[
  {
    "path": ".dockerignore",
    "content": "doc/\n.idea/\n.github/\nbuild/\nxinference.egg-info/\nxinference/web/ui/build/\nxinference/web/ui/node_modules/\n"
  },
  {
    "path": ".gitattributes",
    "content": "xinference/_version.py export-subst\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
    "content": "name: \"Bug Report\"\ndescription: Submit a bug report to help us improve Xinference. You should provide useful information AMAP rather than simply describing what happened. / 提交一个问题报告来帮助我们改进 Xinference。你必须提供有用的信息而不只是描述发生的现象，否则将不予处理。\nbody:\n  - type: textarea\n    id: system-info\n    attributes:\n      label: System Info / 系統信息\n      description: Your operating environment / 您的运行环境信息\n      placeholder: Includes Cuda version, transformers / xllamacpp / vllm version, Python version, operating system... / 包括Cuda版本，transformers / xllamacpp / vllm版本，Python版本，操作系统等。\n    validations:\n      required: true\n\n  - type: checkboxes\n    id: information-scripts-examples\n    attributes:\n      label: Running Xinference with Docker? / 是否使用 Docker 运行 Xinfernece？\n      description: 'How are you using Xinference? / 以何种方式使用 Xinference？'\n      options:\n        - label: docker / docker\n        - label: pip install / 通过 pip install 安装\n        - label: installation from source / 从源码安装\n\n  - type: textarea\n    id: start-way\n    attributes:\n      label: Version info / 版本信息\n      description: The version of Xinference you are running / Xinference 版本\n    validations:\n      required: true\n\n  - type: textarea\n    id: commandline\n    attributes:\n      label: The command used to start Xinference / 用以启动 xinference 的命令\n      description: |\n        Please provide the command used to start Xinference. \n        If it is a distributed scenario, the commands for starting the supervisor and worker need to be listed separately. \n        If it is a Docker scenario, please provide the complete command for starting Xinference through Docker. \n        If it is another method, please describe it specifically.\n\n        请提供启动 xinference 的命令。\n        如果是分布式场景，启动 supervisor 和 worker 的命令需要分别列出。\n        如果是docker场景，请提供通过 docker 启动 xinference 的完整命令。\n        如果是其他方式，请具体描述。\n    validations:\n      required: true\n\n  - type: textarea\n    id: reproduction\n    validations:\n      required: true\n    attributes:\n      label: Reproduction / 复现过程\n      description: |\n        Please provide a code example that reproduces the problem you encountered, preferably with a minimal reproduction unit.\n        If you have code snippets, error messages, stack traces, please provide them here as well.\n        Please format your code correctly using code tags. See https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks#syntax-highlighting\n        Do not use screenshots, as they are difficult to read and (more importantly) do not allow others to copy and paste your code.\n        \n        请提供能重现您遇到的问题的代码示例,最好是最小复现单元。\n        如果您有代码片段、错误信息、堆栈跟踪、涉及的命令行操作等也请在此提供。\n        请使用代码标签正确格式化您的代码。请参见 https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks#syntax-highlighting\n        请勿使用截图，因为截图难以阅读，而且（更重要的是）不允许他人复制粘贴您的代码。\n      placeholder: |\n        Steps to reproduce the behavior/复现Bug的步骤:\n          \n          1.\n          2.\n          3.\n\n  - type: textarea\n    id: expected-behavior\n    validations:\n      required: true\n    attributes:\n      label: Expected behavior / 期待表现\n      description: \"A clear and concise description of what you would expect to happen. / 简单描述您期望发生的事情。\""
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yaml",
    "content": "name: \"Feature request\"\ndescription: Submit a request for a new Xinference feature / 提交一个新的 Xinference 的功能建议\nlabels: [ \"feature\" ]\nbody:\n  - type: textarea\n    id: feature-request\n    validations:\n      required: true\n    attributes:\n      label: Feature request / 功能建议\n      description: |\n        A brief description of the functional proposal.\n        对功能建议的简述。\n\n  - type: textarea\n    id: motivation\n    validations:\n      required: true\n    attributes:\n      label: Motivation / 动机\n      description: |\n        Your motivation for making the suggestion. If that motivation is related to another GitHub issue, link to it here.\n        您提出建议的动机。如果该动机与另一个 GitHub 问题有关，请在此处提供对应的链接。\n\n  - type: textarea\n    id: contribution\n    validations:\n      required: true\n    attributes:\n      label: Your contribution / 您的贡献\n      description: |\n        \n        Your PR link or any other link you can help with.\n        您的PR链接或者其他您能提供帮助的链接。"
  },
  {
    "path": ".github/workflows/assign.yaml",
    "content": "name: Assign\non:\n  issue_comment:\n    types: created\n\npermissions:\n  contents: read\n\njobs:\n  issue_assign:\n    permissions:\n      issues: write\n      pull-requests: write\n    runs-on: ubuntu-22.04\n    steps:\n    - if: github.event.comment.body == 'take'\n      run: |\n        echo \"Assigning issue ${{ github.event.issue.number }} to ${{ github.event.comment.user.login }}\"\n        curl -H \"Authorization: token ${{ secrets.GITHUB_TOKEN }}\" -d '{\"assignees\": [\"${{ github.event.comment.user.login }}\"]}' https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/assignees"
  },
  {
    "path": ".github/workflows/docker-cd.yaml",
    "content": "name: Xinference CD for DockerHub\n\non:\n  schedule:\n    - cron: '0 18 * * *'\n  push:\n    tags:\n      - '*'\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  build:\n    timeout-minutes: 240\n    runs-on: self-hosted\n    strategy:\n      matrix:\n        python-version: [ \"3.10\" ]\n    steps:\n      - name: Check out code\n        uses: actions/checkout@v3\n        with:\n          fetch-depth: 0\n          submodules: recursive\n\n      - name: Log in to Docker Hub\n        uses: docker/login-action@v1\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_PASSWORD }}\n\n      - name: Build and push Docker image\n        shell: bash\n        if: ${{ github.repository == 'xorbitsai/inference' }}\n        env:\n          DOCKER_ORG: ${{ secrets.DOCKERHUB_USERNAME }}\n          PY_VERSION: ${{ matrix.python-version }}\n        run: |\n          if [[ \"$GITHUB_REF\" =~ ^\"refs/tags/\" ]]; then\n            export GIT_TAG=$(echo \"$GITHUB_REF\" | sed -e \"s/refs\\/tags\\///g\")\n          fi\n\n          docker system prune -f -a\n\n          if [[ -n \"$GIT_TAG\" ]]; then\n            BRANCHES=\"$GIT_TAG\"\n            echo \"Will handle tag $BRANCHES\"\n          else\n            MAINBRANCH=$(git rev-parse --abbrev-ref HEAD)\n            BRANCHES=\"$MAINBRANCH\"\n          fi\n          \n          for branch in $BRANCHES; do\n            if [[ -n \"$GIT_TAG\" ]]; then\n              export IMAGE_TAG=\"$GIT_TAG\"\n            else\n              git checkout $branch\n              export IMAGE_TAG=\"nightly-$branch\"\n            fi\n            docker build -t \"$DOCKER_ORG/xinference:${IMAGE_TAG}\" --progress=plain -f xinference/deploy/docker/Dockerfile .\n            docker push \"$DOCKER_ORG/xinference:${IMAGE_TAG}\"\n            docker build -t \"$DOCKER_ORG/xinference:${IMAGE_TAG}-cpu\" --progress=plain -f xinference/deploy/docker/Dockerfile.cpu .\n            docker push \"$DOCKER_ORG/xinference:${IMAGE_TAG}-cpu\"\n            echo \"XINFERENCE_IMAGE_TAG=${IMAGE_TAG}\" >> $GITHUB_ENV\n          done\n          \n          if [[ -n \"$GIT_TAG\" ]]; then\n            docker tag \"$DOCKER_ORG/xinference:${GIT_TAG}\" \"$DOCKER_ORG/xinference:latest\"\n            docker push \"$DOCKER_ORG/xinference:latest\"\n            docker tag \"$DOCKER_ORG/xinference:${GIT_TAG}-cpu\" \"$DOCKER_ORG/xinference:latest-cpu\"\n            docker push \"$DOCKER_ORG/xinference:latest-cpu\"\n            echo \"XINFERENCE_GIT_TAG=${GIT_TAG}\" >> $GITHUB_ENV\n          fi\n\n      - name: Clean docker image cache\n        shell: bash\n        if: ${{ github.repository == 'xorbitsai/inference' }}\n        run: |\n          docker system prune -f -a\n"
  },
  {
    "path": ".github/workflows/issue.yaml",
    "content": "name: Close inactive issues\non:\n  schedule:\n    - cron: \"0 19 * * *\"\n  workflow_dispatch:\n\njobs:\n  close-issues:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n      pull-requests: write\n    steps:\n      - uses: actions/stale@v9\n        with:\n          days-before-issue-stale: 14\n          days-before-issue-close: 10\n          stale-issue-label: \"stale\"\n          stale-issue-message: \"This issue is stale because it has been open for 14 days with no activity.\"\n          close-issue-message: \"This issue was closed because it has been inactive for 10 days since being marked as stale.\"\n          days-before-pr-stale: -1\n          days-before-pr-close: -1\n          operations-per-run: 500\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/pr_auto_run_gen_docs.yaml",
    "content": "name: Auto run gen_docs.py and commit changes to PR\n\non:\n  pull_request_target:\n    types: [opened, synchronize]\n\npermissions:\n  contents: write\n  pull-requests: write\n\njobs:\n  run-gen-docs-and-commit:\n    if: startsWith(github.event.pull_request.head.ref, 'chore/models-sync/')\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout base repository (trusted scripts)\n        uses: actions/checkout@v4\n        with:\n          ref: ${{ github.event.pull_request.base.ref }}\n          repository: ${{ github.repository }}\n          path: main\n          fetch-depth: 0\n\n      - name: Checkout PR head branch (working copy)\n        uses: actions/checkout@v4\n        with:\n          ref: ${{ github.event.pull_request.head.ref }}\n          repository: ${{ github.event.pull_request.head.repo.full_name }}\n          path: pr\n          fetch-depth: 0\n\n      - name: Decide whether to run gen_docs for latest commit\n        id: decide\n        working-directory: pr\n        run: |\n          set -e\n          MSG=\"$(git log -1 --pretty=%B || echo \"\")\"\n          echo \"Latest commit message: $MSG\"\n          if echo \"$MSG\" | grep -Eiq '\\[(skip ci|ci skip)\\]'; then\n            echo \"Skip token found in commit message; will not run.\"\n            echo \"run=false\" >> $GITHUB_OUTPUT\n            exit 0\n          fi\n\n          HEAD_SHA=\"$(git rev-parse HEAD)\"\n          BASE_SHA=\"${{ github.event.pull_request.base.sha }}\"\n          RANGE=\"$BASE_SHA...$HEAD_SHA\"\n          echo \"Diff range (full PR): $RANGE\"\n\n          CHANGED_FILES=\"$(git diff --name-only \"$RANGE\" || true)\"\n          echo \"Changed files in PR range:\"\n          echo \"$CHANGED_FILES\"\n\n          RUN=\"false\"\n          for f in $CHANGED_FILES; do\n            case \"$f\" in\n              xinference/model/llm/llm_family.json|xinference/model/embedding/model_spec.json|xinference/model/rerank/model_spec.json|xinference/model/image/model_spec.json|xinference/model/audio/model_spec.json|xinference/model/video/model_spec.json)\n                RUN=\"true\"; break;;\n            esac\n          done\n          echo \"run=$RUN\" >> $GITHUB_OUTPUT\n\n      - name: Set up Python\n        if: steps.decide.outputs.run == 'true'\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.10'\n\n      - name: Install gen_docs dependencies\n        if: steps.decide.outputs.run == 'true'\n        run: |\n          python -m pip install --upgrade pip\n          python -m pip install jinja2\n          python -m pip install \"xinference[doc]\"\n\n      - name: Run gen_docs.py if present\n        if: steps.decide.outputs.run == 'true'\n        working-directory: pr\n        run: |\n          echo \"[Debug] CWD: $(pwd)\"\n          echo \"[Debug] List ../main:\"\n          ls -la ../main || true\n          echo \"[Debug] List ../main/doc/source:\"\n          ls -la ../main/doc/source || true\n\n          # Use PR branch's gen_docs.py if it exists, otherwise use main branch's\n          if [ -f \"doc/source/gen_docs.py\" ]; then\n            echo \"Using PR branch's doc/source/gen_docs.py\"\n            echo \"Running pr/doc/source/gen_docs.py from its directory\"\n            (cd doc/source && python -u gen_docs.py)\n          elif [ -f \"../main/doc/source/gen_docs.py\" ]; then\n            echo \"Copying main/doc/source/gen_docs.py into PR workspace\"\n            mkdir -p doc/source\n            cp -f ../main/doc/source/gen_docs.py doc/source/gen_docs.py\n            echo \"Running pr/doc/source/gen_docs.py from its directory\"\n            (cd doc/source && python -u gen_docs.py)\n          elif [ -f \"gen_docs.py\" ]; then\n            echo \"Using PR branch's gen_docs.py\"\n            echo \"Running pr/gen_docs.py\"\n            python -u gen_docs.py\n          elif [ -f \"../main/gen_docs.py\" ]; then\n            echo \"Copying main/gen_docs.py into PR workspace\"\n            cp -f ../main/gen_docs.py gen_docs.py\n            echo \"Running pr/gen_docs.py\"\n            python -u gen_docs.py\n          else\n            echo \"gen_docs.py not found in main repository, skipping.\"\n          fi\n\n      - name: Stage and commit changes back to PR branch\n        if: steps.decide.outputs.run == 'true'\n        working-directory: pr\n        run: |\n          echo \"[Debug] Before staging:\" && git status --porcelain\n\n          echo \"[Debug] check-ignore for generated file:\"\n          git check-ignore -v doc/source/_generated/auto_generated.txt || echo \"Not ignored\"\n          git add -A\n          git add -f doc/source/_generated || true\n\n          echo \"[Debug] After staging:\" && git status --porcelain\n          echo \"[Debug] Staged diff:\" && git diff --cached --name-status || true\n\n          if ! git diff --cached --quiet; then\n            git config user.name \"github-actions[bot]\"\n            git config user.email \"41898282+github-actions[bot]@users.noreply.github.com\"\n            git commit -m \"chore(docs): auto-run gen_docs.py\"\n          else\n            echo \"No changes to commit.\"\n          fi\n\n      - name: Push back for same-repo PR\n        env:\n          BRANCH: ${{ github.event.pull_request.head.ref }}\n        if: steps.decide.outputs.run == 'true' && github.event.pull_request.head.repo.full_name == github.repository\n        working-directory: pr\n        run: |\n          echo \"Pushing changes to same-repo PR...\"\n          git push origin HEAD:$BRANCH || echo \"No changes to push.\"\n\n      - name: Push back for fork PR using maintainer PAT\n        if: steps.decide.outputs.run == 'true' && github.event.pull_request.head.repo.full_name != github.repository && github.event.pull_request.maintainer_can_modify\n        env:\n          PUSH_TOKEN: ${{ secrets.PUSH_TOKEN }}\n          BRANCH: ${{ github.event.pull_request.head.ref }}\n          HEAD_FULL_NAME: ${{ github.event.pull_request.head.repo.full_name }}\n        working-directory: pr\n        run: |\n          if [ -z \"$PUSH_TOKEN\" ]; then\n            echo \"Missing secrets.PUSH_TOKEN; cannot push to fork. Skipping push.\"\n            exit 0\n          fi\n          echo \"Pushing changes to fork PR using maintainer PAT...\"\n          git remote set-url origin \"https://x-access-token:${PUSH_TOKEN}@github.com/${HEAD_FULL_NAME}.git\"\n          git push origin HEAD:$BRANCH || echo \"No changes to push.\"\n\n      - name: Skip push for fork PR without maintainer edit permission\n        if: steps.decide.outputs.run != 'true' && github.event.pull_request.head.repo.full_name != github.repository && !github.event.pull_request.maintainer_can_modify\n        run: |\n          echo \"Fork PR does not allow edits by maintainers; run succeeded but skip pushing commits.\"\n"
  },
  {
    "path": ".github/workflows/python.yaml",
    "content": "name: Python CI\n\non:\n  push:\n    branches:\n      - '*'\n  pull_request:\n    types: ['opened', 'reopened', 'synchronize']\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  lint:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [ \"ubuntu-latest\" ]\n        python-version: [ \"3.10\" ]\n    steps:\n      - name: Check out code\n        uses: actions/checkout@v3\n        with:\n          fetch-depth: 0\n          submodules: recursive\n      - name: Set up Python environment\n        uses: actions/setup-python@v4\n        with:\n          python-version: \"3.10\"\n      - name: Install pre-commit\n        run: pip install pre-commit\n      - name: Run pre-commit\n        run: pre-commit run --all-files\n      - name: Set up Node.js\n        uses: actions/setup-node@v1\n        with:\n          node-version: 16\n      # ESLint and Prettier must be in `package.json`\n      - name: Install Node.js dependencies\n        run: cd xinference/ui/web/ui && npm ci\n      - name: ESLint Check\n        run: cd xinference/ui/web/ui && npx eslint .\n      - name: Prettier Check\n        run: cd xinference/ui/web/ui && ./node_modules/.bin/prettier --check .\n\n  build_test_job:\n    runs-on: ${{ matrix.os }}\n    needs: lint\n    env:\n      CONDA_ENV: test\n      SELF_HOST_PYTHON: /root/miniconda3/envs/inference_test/bin/python\n      SELF_HOST_CONDA: /root/miniconda3/condabin/conda\n    defaults:\n      run:\n        shell: bash -l {0}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [ \"ubuntu-latest\", \"macos-latest\", \"windows-latest\" ]\n        python-version: [ \"3.10\", \"3.11\", \"3.12\", \"3.13\" ]\n        module: [ \"xinference\" ]\n        exclude:\n          - { os: macos-latest, python-version: 3.11 }\n          - { os: macos-latest, python-version: 3.12 }\n          - { os: windows-latest, python-version: 3.11 }\n          - { os: windows-latest, python-version: 3.12 }\n        include:\n          - { os: self-hosted, module: gpu, python-version: \"3.11\"}\n          - { os: macos-latest, module: metal, python-version: \"3.10\" }\n\n    steps:\n      - name: Check out code\n        uses: actions/checkout@v3\n        with:\n          fetch-depth: 0\n          submodules: recursive\n\n      - name: Set up conda ${{ matrix.python-version }}\n        uses: conda-incubator/setup-miniconda@v3\n        if: ${{ matrix.module != 'gpu' }}\n        with:\n          python-version: ${{ matrix.python-version }}\n          activate-environment: ${{ env.CONDA_ENV }}\n\n      # Important for python == 3.12 and 3.13\n      - name: Update pip and setuptools\n        if: ${{ matrix.python-version == '3.12' || matrix.python-version == '3.13' }}\n        run: |\n          python -m pip install -U pip \"setuptools<82\"\n\n      # Install torch for Python 3.13 using nightly builds\n      - name: Install torch for Python 3.13\n        if: ${{ matrix.python-version == '3.13'}}\n        run: |\n          python -m pip install torch torchvision torchaudio\n\n      - name: Install numpy\n        if: |\n          (startsWith(matrix.os, 'macos') && (matrix.python-version == '3.13')) || \n          (startsWith(matrix.os, 'windows'))\n        run: |\n          python -m pip install \"numpy<2\"\n\n      - name: Install dependencies\n        env:\n          MODULE: ${{ matrix.module }}\n          OS: ${{ matrix.os }}\n        if: ${{ matrix.module != 'gpu' }}\n        run: |\n          if [ \"$OS\" == \"ubuntu-latest\" ]; then\n            sudo rm -rf /usr/share/dotnet\n            sudo rm -rf /opt/ghc\n            sudo rm -rf \"/usr/local/share/boost\"\n            sudo rm -rf \"$AGENT_TOOLSDIRECTORY\"\n          fi\n          pip install -e \".[dev]\"\n          pip install \"xllamacpp>=0.2.0\"\n          if [ \"$MODULE\" == \"metal\" ]; then\n            conda install -c conda-forge \"ffmpeg<7\"\n            pip install \"mlx>=0.22.0\"\n            pip install mlx-lm\n            pip install \"mlx-vlm>=0.3.4\"\n            pip install mlx-whisper\n            pip install f5-tts-mlx\n            pip install qwen-vl-utils!=0.0.9\n            pip install tomli \n          else\n            pip install \"transformers<4.49\"\n            pip install attrdict\n            pip install \"timm>=0.9.16\"\n            if [ \"${{ matrix.python-version }}\" != \"3.13\" ]; then\n              pip install torch torchvision\n            fi\n            pip install accelerate\n            pip install sentencepiece\n            pip install transformers_stream_generator\n            pip install bitsandbytes\n            pip install \"sentence-transformers>=5.1.1\"\n            pip install modelscope\n            pip install diffusers\n            pip install protobuf\n            pip install FlagEmbedding\n            pip install \"tenacity>=8.2.0,<8.4.0\"\n            pip install \"jinja2==3.1.2\"\n            pip install jj-pytorchvideo\n            pip install qwen-vl-utils!=0.0.9\n            pip install datamodel_code_generator\n            pip install jsonschema\n          fi\n        working-directory: .\n\n      - name: Clean up disk\n        if: |\n          (startsWith(matrix.os, 'ubuntu'))\n        run: |\n          sudo rm -rf /usr/share/dotnet\n          sudo rm -rf /usr/local/lib/android\n          sudo rm -rf /opt/ghc\n          sudo apt-get clean\n          sudo rm -rf /var/lib/apt/lists/*\n          df -h \n          \n      - name: Fix SSL on Windows\n        if: startsWith(matrix.os, 'windows')\n        shell: bash\n        run: |\n          echo \"activate conda env\"\n\n          source $CONDA/etc/profile.d/conda.sh || true\n          conda activate $CONDA_ENV || true\n          \n          python -V\n          which python\n          \n          echo \"before: $SSL_CERT_FILE\"\n          \n          python -m pip install --quiet certifi || true\n          \n          SSL_CERT_FILE=$(python -c \"import certifi,os;print(os.path.normpath(certifi.where()))\")\n          \n          export SSL_CERT_FILE\n          export REQUESTS_CA_BUNDLE=$SSL_CERT_FILE\n          export CURL_CA_BUNDLE=$SSL_CERT_FILE\n          \n          echo \"after: $SSL_CERT_FILE\"\n          echo \"SSL_CERT_FILE=$(python -c 'import certifi;print(certifi.where())')\" >> $GITHUB_ENV\n    \n      - name: Test with pytest\n        env:\n          MODULE: ${{ matrix.module }}\n          PYTORCH_MPS_HIGH_WATERMARK_RATIO: 1.0\n          PYTORCH_MPS_LOW_WATERMARK_RATIO: 0.2\n          XFORMERS_FORCE_DISABLE_TRITON: 1\n          TORCH_DISABLE_FLASH_ATTENTION: 1\n        run: |\n          if [ \"$MODULE\" == \"gpu\" ]; then\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U -e \".[audio,dev]\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"openai>1\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U modelscope\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U gguf\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U uv\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U sse_starlette\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U xoscar\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"python-jose[cryptography]\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"passlib[bcrypt]\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"aioprometheus[starlette]\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"pynvml\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install \"transformers==4.53.2\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install \"funasr==1.2.7\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U nemo_text_processing<1.1.0\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U omegaconf~=2.3.0\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U WeTextProcessing<1.0.4\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U librosa\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U xxhash\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"ChatTTS>=0.2.1\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U HyperPyYAML\n            ${{ env.SELF_HOST_PYTHON }} -m pip uninstall -y matcha-tts\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U onnxruntime-gpu==1.16.0; sys_platform == 'linux'\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U openai-whisper\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"torch==2.7.0\" \"torchaudio==2.7.0\" \"torchvision==0.22.0\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"loguru\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"natsort\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"loralib\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"ormsgpack\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip uninstall -y opencc\n            ${{ env.SELF_HOST_PYTHON }} -m pip uninstall -y \"faster_whisper\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U accelerate\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U verovio\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U cachetools\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U silero-vad\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U pydantic\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U diffusers\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U onnx\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U onnxconverter_common\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U torchdiffeq\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"x_transformers>=1.31.14\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U pypinyin\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U tomli\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U vocos\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U jieba\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U soundfile\n            ${{ env.SELF_HOST_PYTHON }} -m pip install tensorizer\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U sentence-transformers\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U FlagEmbedding\n            ${{ env.SELF_HOST_PYTHON }} -m pip install -U \"peft<=0.17.1\"\n            ${{ env.SELF_HOST_PYTHON }} -m pip install \"xllamacpp>=0.2.0\" --index-url https://xorbitsai.github.io/xllamacpp/whl/cu124 --extra-index-url https://pypi.org/simple\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              --disable-warnings \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/core/tests/test_continuous_batching.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/embedding/tests/test_qwen3_vl_engine_params.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/rerank/tests/test_qwen3_vl_reranker_virtualenv.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/image/tests/test_stable_diffusion.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/image/tests/test_got_ocr2.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_whisper.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_funasr.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_chattts.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_cosyvoice.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_f5tts.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_f5tts.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_melotts.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_kokoro.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_fish_speech.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_megatts.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/embedding/tests/test_integrated_embedding.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/embedding/vllm/tests/test_vllm_embedding.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/llm/transformers/tests/test_tensorizer.py && \\\n            ${{ env.SELF_HOST_PYTHON }} -m pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/llm/tests/test_llm_model.py\n          elif [ \"$MODULE\" == \"metal\" ]; then\n            pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/llm/mlx/tests/test_mlx.py && \\\n            pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_whisper_mlx.py && \\\n            pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/audio/tests/test_f5tts_mlx.py && \\\n            pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              --cov-config=setup.cfg --cov-report=xml --cov=xinference xinference/model/llm/mlx/tests/test_distributed_model.py\n          else\n            pytest --timeout=3000 \\\n              -W ignore::PendingDeprecationWarning \\\n              -vv \\\n              --cov-config=setup.cfg \\\n              --cov-report=xml \\\n              --cov=xinference \\\n              --ignore xinference/core/tests/test_continuous_batching.py \\\n              --ignore xinference/model/image/tests/test_stable_diffusion.py \\\n              --ignore xinference/model/image/tests/test_got_ocr2.py \\\n              --ignore xinference/model/audio/tests \\\n              --ignore xinference/model/embedding/tests/test_integrated_embedding.py \\\n              --ignore xinference/model/llm/transformers/tests/test_tensorizer.py \\\n              --ignore xinference/model/llm/tests/test_llm_model.py \\\n              --ignore xinference/model/llm/vllm \\\n              --ignore xinference/model/llm/sglang \\\n              --ignore xinference/client/tests/test_client.py \\\n              --ignore xinference/client/tests/test_async_client.py \\\n              --ignore xinference/model/llm/mlx \\\n              xinference\n          \n          fi\n        working-directory: .\n"
  },
  {
    "path": ".github/workflows/release.yaml",
    "content": "name: Build and upload to PyPI\n\non:\n  push:\n    tags:\n      - '*'\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\n\njobs:\n  build-publish:\n    name: Build and publish Python distribution to PyPI\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Set up Python\n        uses: actions/setup-python@v4\n        with:\n          python-version: \"3.10\"\n      - uses: actions/checkout@v3\n      - name: Install pypa/build\n        run: >-\n          python3 -m\n          pip install\n          build \"setuptools<82\"\n          --user\n      - name: Build web\n        run: >-\n          python setup.py build_web\n      - name: Build a binary wheel and a source tarball\n        run: >-\n          python3 -m\n          build\n          --sdist\n          --wheel\n          --outdir dist/\n          .\n      # if is xorbitsai repo, upload to pypi\n      - uses: pypa/gh-action-pypi-publish@v1.5.0\n        if: github.repository == 'xorbitsai/inference'\n        with:\n          user: __token__\n          password: ${{ secrets.PYPI_PASSWORD }}\n\n      # if is not xorbitsai repo, upload to test\n      - uses: pypa/gh-action-pypi-publish@v1.5.0\n        if: github.repository != 'xorbitsai/inference'\n        with:\n          user: __token__\n          password: ${{ secrets.TEST_PYPI_PASSWORD }}\n          verbose: true\n          repository_url: https://test.pypi.org/legacy/\n"
  },
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\npip-wheel-metadata/\nshare/python-wheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.nox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n*.py,cover\n.hypothesis/\n.pytest_cache/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\ndb.sqlite3-journal\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ngenerated/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# IPython\nprofile_default/\nipython_config.py\n\n# pyenv\n.python-version\n\n# pipenv\n#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.\n#   However, in case of collaboration, if having platform-specific dependencies or dependencies\n#   having no cross-platform support, pipenv may install dependencies that don't work, or not\n#   install all needed dependencies.\n#Pipfile.lock\n\n# PEP 582; used by e.g. github.com/David-OConnor/pyflow\n__pypackages__/\n\n# Celery stuff\ncelerybeat-schedule\ncelerybeat.pid\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n.dmypy.json\ndmypy.json\n\n# Pyre type checker\n.pyre/\n\n# IDEs\n.idea\n.vscode\n*.iml\n\n# VIM\n*.sw*\n\n# web staff\nnode_modules/\nstatic/\n\n# Local docs (project notes, refactoring plans, etc.)\ndocs/\n\n# doc\ndoc/source/savefig/\n\n# local env\nlocal_env\n\nasv/results\n\n.DS_Store\n\n# Exclude markdown files except README files\n*.md\n!README.md\n!README_*.md\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "files: xinference\nrepos:\n  - repo: https://github.com/psf/black\n    rev: 25.1.0\n    hooks:\n      - id: black\n        exclude: thirdparty\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v5.0.0\n    hooks:\n      - id: end-of-file-fixer\n        exclude: ^xinference/thirdparty\n      - id: trailing-whitespace\n        exclude: thirdparty\n  - repo: https://github.com/PyCQA/flake8\n    rev: 6.0.0\n    hooks:\n      - id: flake8\n        args: [--config, setup.cfg]\n        exclude: thirdparty\n  - repo: https://github.com/pycqa/isort\n    rev: 5.12.0\n    hooks:\n      - id: isort\n        args: [--sp, setup.cfg]\n        exclude: thirdparty\n  - repo: https://github.com/pre-commit/mirrors-mypy\n    rev: v1.15.0\n    hooks:\n      - id: mypy\n        additional_dependencies: [\"tokenize-rt==3.2.0\", \"types-requests\", \"types-tabulate\"]\n        args: [--ignore-missing-imports, --follow-imports, skip]\n        exclude: thirdparty\n  - repo: https://github.com/codespell-project/codespell\n    rev: v2.2.2\n    hooks:\n      - id: codespell\n        args: [ --config, setup.cfg]\n        exclude: thirdparty\n"
  },
  {
    "path": ".readthedocs.yaml",
    "content": "version: 2\n\n# Build documentation in the docs/ directory with Sphinx\nsphinx:\n   configuration: doc/source/conf.py\n\nbuild:\n  os: ubuntu-20.04\n  tools:\n    python: \"3.10\"\n\npython:\n  install:\n    - method: pip\n      path: .\n      extra_requirements:\n        - doc\n\nsubmodules:\n  include: all\n  recursive: true\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License."
  },
  {
    "path": "MANIFEST.in",
    "content": "global-include *.pyx\nglobal-include *.pxd\nglobal-include xinference/**/*.json\nglobal-exclude *.c\nglobal-exclude *.cpp\ninclude setup.cfg\ninclude pyproject.toml\nglobal-exclude .DS_Store\ninclude versioneer.py\ninclude xinference/_version.py\nglobal-exclude conftest.py\ninclude xinference/locale/*.json\ninclude xinference/model/llm/*.json\ninclude xinference/model/embedding/*.json\ngraft xinference/thirdparty\nglobal-include xinference/ui/web/ui/build/**/*"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n<img src=\"./assets/xorbits-logo.png\" width=\"180px\" alt=\"xorbits\" />\n\n# Xorbits Inference: Model Serving Made Easy 🤖\n\n<p align=\"center\">\n  <a href=\"https://xinference.io/en\">Xinference Enterprise</a> ·\n  <a href=\"https://inference.readthedocs.io/en/latest/getting_started/installation.html#installation\">Self-hosting</a> ·\n  <a href=\"https://inference.readthedocs.io/\">Documentation</a>\n</p>\n\n[![PyPI Latest Release](https://img.shields.io/pypi/v/xinference.svg?style=for-the-badge)](https://pypi.org/project/xinference/)\n[![License](https://img.shields.io/pypi/l/xinference.svg?style=for-the-badge)](https://github.com/xorbitsai/inference/blob/main/LICENSE)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/xorbitsai/inference/python.yaml?branch=main&style=for-the-badge&label=GITHUB%20ACTIONS&logo=github)](https://actions-badge.atrox.dev/xorbitsai/inference/goto?ref=main)\n[![Docker Pulls](https://img.shields.io/docker/pulls/xprobe/xinference?style=for-the-badge&logo=docker)](https://hub.docker.com/r/xprobe/xinference)\n[![Discord](https://img.shields.io/badge/join_Discord-5462eb.svg?logo=discord&style=for-the-badge&logoColor=%23f5f5f5)](https://discord.gg/Xw9tszSkr5)\n[![Twitter](https://img.shields.io/twitter/follow/xorbitsio?logo=x&style=for-the-badge)](https://twitter.com/xorbitsio)\n\n<p align=\"center\">\n  <a href=\"./README.md\"><img alt=\"README in English\" src=\"https://img.shields.io/badge/English-454545?style=for-the-badge\"></a>\n  <a href=\"./README_zh_CN.md\"><img alt=\"简体中文版自述文件\" src=\"https://img.shields.io/badge/中文介绍-d9d9d9?style=for-the-badge\"></a>\n  <a href=\"./README_ja_JP.md\"><img alt=\"日本語のREADME\" src=\"https://img.shields.io/badge/日本語-d9d9d9?style=for-the-badge\"></a>\n</p>\n\n</div>\n<br />\n\n\nXorbits Inference(Xinference) is a powerful and versatile library designed to serve language, \nspeech recognition, and multimodal models. With Xorbits Inference, you can effortlessly deploy \nand serve your or state-of-the-art built-in models using just a single command. Whether you are a \nresearcher, developer, or data scientist, Xorbits Inference empowers you to unleash the full \npotential of cutting-edge AI models.\n\n<div align=\"center\">\n<i><a href=\"https://discord.gg/Xw9tszSkr5\">👉 Join our Discord community!</a></i>\n</div>\n\n## 🔥 Hot Topics\n### Framework Enhancements\n- Agent-native Serving: Xinference integrates with [Xagent](https://github.com/xorbitsai/xagent) to enable dynamic planning, tool use, and autonomous multi-step reasoning — moving beyond static pipelines.\n- Auto batch: Multiple concurrent requests are automatically batched, significantly improving throughput: [#4197](https://github.com/xorbitsai/inference/pull/4197)\n- [Xllamacpp](https://github.com/xorbitsai/xllamacpp): New llama.cpp Python binding, maintained by Xinference team, supports continuous batching and is more production-ready.: [#2997](https://github.com/xorbitsai/inference/pull/2997)\n- Distributed inference: running models across workers: [#2877](https://github.com/xorbitsai/inference/pull/2877)\n- VLLM enhancement: Shared KV cache across multiple replicas: [#2732](https://github.com/xorbitsai/inference/pull/2732)\n### New Models\n- Built-in support for [Qwen-3.5](https://github.com/QwenLM/Qwen3.5): [#4639](https://github.com/xorbitsai/inference/pull/4639)\n- Built-in support for [GLM-5](https://github.com/zai-org/GLM-5): [#4638](https://github.com/xorbitsai/inference/pull/4638)\n- Built-in support for [MiniMax-M2.5](https://github.com/MiniMax-AI/MiniMax-M2.5): [#4630](https://github.com/xorbitsai/inference/pull/4630)\n- Built-in support for [Kimi-K2.5](https://github.com/MoonshotAI/Kimi-K2.5): [#4631](https://github.com/xorbitsai/inference/pull/4631)\n- Built-in support for [FLUX.2-Klein](https://bfl.ai/models/flux-2-klein): [#4596](https://github.com/xorbitsai/inference/pull/4596)\n- Built-in support for [Qwen3-ASR](https://github.com/QwenLM/Qwen3-ASR): [#4581](https://github.com/xorbitsai/inference/pull/4581)\n- Built-in support for [GLM-4.7](https://huggingface.co/zai-org/GLM-4.7): [#4565](https://github.com/xorbitsai/inference/pull/4565)\n- Built-in support for [MinerU2.5-2509-1.2B](https://huggingface.co/opendatalab/MinerU2.5-2509-1.2B): [#4569](https://github.com/xorbitsai/inference/pull/4569)\n### Integrations\n- [Xagent](https://github.com/xorbitsai/xagent): an enterprise agent platform for building and running AI agents with planning, memory, and tool use — not limited to rigid workflows.\n- [Dify](https://docs.dify.ai/advanced/model-configuration/xinference): an LLMOps platform that enables developers (and even non-developers) to quickly build useful applications based on large language models, ensuring they are visual, operable, and improvable.\n- [FastGPT](https://github.com/labring/FastGPT): a knowledge-based platform built on the LLM, offers out-of-the-box data processing and model invocation capabilities, allows for workflow orchestration through Flow visualization.\n- [RAGFlow](https://github.com/infiniflow/ragflow): is an open-source RAG engine based on deep document understanding.\n- [MaxKB](https://github.com/1Panel-dev/MaxKB): MaxKB = Max Knowledge Brain, it is a powerful and easy-to-use AI assistant that integrates Retrieval-Augmented Generation (RAG) pipelines, supports robust workflows, and provides advanced MCP tool-use capabilities.\n\n\n## Key Features\n🌟 **Model Serving Made Easy**: Simplify the process of serving large language, speech \nrecognition, and multimodal models. You can set up and deploy your models\nfor experimentation and production with a single command.\n\n⚡️ **State-of-the-Art Models**: Experiment with cutting-edge built-in models using a single \ncommand. Inference provides access to state-of-the-art open-source models!\n\n🖥 **Heterogeneous Hardware Utilization**: Make the most of your hardware resources with\n[ggml](https://github.com/ggerganov/ggml). Xorbits Inference intelligently utilizes heterogeneous\nhardware, including GPUs and CPUs, to accelerate your model inference tasks.\n\n⚙️ **Flexible API and Interfaces**: Offer multiple interfaces for interacting\nwith your models, supporting OpenAI compatible RESTful API (including Function Calling API), RPC, CLI \nand WebUI for seamless model management and interaction.\n\n🌐 **Distributed Deployment**: Excel in distributed deployment scenarios, \nallowing the seamless distribution of model inference across multiple devices or machines.\n\n🔌 **Built-in Integration with Third-Party Libraries**: Xorbits Inference seamlessly integrates\nwith popular third-party libraries including [LangChain](https://python.langchain.com/docs/integrations/providers/xinference), [LlamaIndex](https://gpt-index.readthedocs.io/en/stable/examples/llm/XinferenceLocalDeployment.html#i-run-pip-install-xinference-all-in-a-terminal-window), [Dify](https://docs.dify.ai/advanced/model-configuration/xinference), and [Chatbox](https://chatboxai.app/).\n\n## Why Xinference\n| Feature                                        | Xinference | FastChat | OpenLLM | RayLLM |\n|------------------------------------------------|------------|----------|---------|--------|\n| OpenAI-Compatible RESTful API                  | ✅ | ✅ | ✅ | ✅ |\n| vLLM Integrations                              | ✅ | ✅ | ✅ | ✅ |\n| More Inference Engines (GGML, TensorRT)        | ✅ | ❌ | ✅ | ✅ |\n| More Platforms (CPU, Metal)                    | ✅ | ✅ | ❌ | ❌ |\n| Multi-node Cluster Deployment                  | ✅ | ❌ | ❌ | ✅ |\n| Image Models (Text-to-Image)                   | ✅ | ✅ | ❌ | ❌ |\n| Text Embedding Models                          | ✅ | ❌ | ❌ | ❌ |\n| Multimodal Models                              | ✅ | ❌ | ❌ | ❌ |\n| Audio Models                                   | ✅ | ❌ | ❌ | ❌ |\n| More OpenAI Functionalities (Function Calling) | ✅ | ❌ | ❌ | ❌ |\n\n## Using Xinference\n\n- **Self-hosting Xinference Community Edition</br>**\nQuickly get Xinference running in your environment with this [starter guide](#getting-started).\nUse our [documentation](https://inference.readthedocs.io/) for further references and more in-depth instructions.\n\n- **Xinference for enterprise / organizations</br>**\nWe provide additional enterprise-centric features. [send us an email](mailto:business@xprobe.io?subject=[GitHub]Business%20License%20Inquiry) to discuss enterprise needs. </br>\n\n## Staying Ahead\n\nStar Xinference on GitHub and be instantly notified of new releases.\n\n![star-us](assets/stay_ahead.gif)\n\n## Getting Started\n\n* [Docs](https://inference.readthedocs.io/en/latest/index.html)\n* [Built-in Models](https://inference.readthedocs.io/en/latest/models/builtin/index.html)\n* [Custom Models](https://inference.readthedocs.io/en/latest/models/custom.html)\n* [Deployment Docs](https://inference.readthedocs.io/en/latest/getting_started/using_xinference.html)\n* [Examples and Tutorials](https://inference.readthedocs.io/en/latest/examples/index.html)\n\n### Jupyter Notebook\n\nThe lightest way to experience Xinference is to try our [Jupyter Notebook on Google Colab](https://colab.research.google.com/github/xorbitsai/inference/blob/main/examples/Xinference_Quick_Start.ipynb).\n\n### Docker \n\nNvidia GPU users can start Xinference server using [Xinference Docker Image](https://inference.readthedocs.io/en/latest/getting_started/using_docker_image.html). Prior to executing the installation command, ensure that both [Docker](https://docs.docker.com/get-docker/) and [CUDA](https://developer.nvidia.com/cuda-downloads) are set up on your system.\n\n```bash\ndocker run --name xinference -d -p 9997:9997 -e XINFERENCE_HOME=/data -v </on/your/host>:/data --gpus all xprobe/xinference:latest xinference-local -H 0.0.0.0\n```\n\n### K8s via helm\n\nEnsure that you have GPU support in your Kubernetes cluster, then install as follows.\n\n```\n# add repo\nhelm repo add xinference https://xorbitsai.github.io/xinference-helm-charts\n\n# update indexes and query xinference versions\nhelm repo update xinference\nhelm search repo xinference/xinference --devel --versions\n\n# install xinference\nhelm install xinference xinference/xinference -n xinference --version 0.0.1-v<xinference_release_version>\n```\n\nFor more customized installation methods on K8s, please refer to the [documentation](https://inference.readthedocs.io/en/latest/getting_started/using_kubernetes.html).\n\n### Quick Start\n\nInstall Xinference by using pip as follows. (For more options, see [Installation page](https://inference.readthedocs.io/en/latest/getting_started/installation.html).)\n\n```bash\npip install \"xinference[all]\"\n```\n\nTo start a local instance of Xinference, run the following command:\n\n```bash\n$ xinference-local\n```\n\nOnce Xinference is running, there are multiple ways you can try it: via the web UI, via cURL,\n via the command line, or via the Xinference’s python client. Check out our [docs]( https://inference.readthedocs.io/en/latest/getting_started/using_xinference.html#run-xinference-locally) for the guide.\n\n![web UI](assets/screenshot.png)\n\n## Getting involved\n\n| Platform                                                                                        | Purpose                                     |\n|-------------------------------------------------------------------------------------------------|---------------------------------------------|\n| [Github Issues](https://github.com/xorbitsai/inference/issues)                                  | Reporting bugs and filing feature requests. |\n| [Discord](https://discord.gg/Xw9tszSkr5) | Collaborating with other Xinference users.  |\n| [Twitter](https://twitter.com/xorbitsio)                                                        | Staying up-to-date on new features.         |\n\n## Citation\n\nIf this work is helpful, please kindly cite as:\n\n```bibtex\n@inproceedings{lu2024xinference,\n    title = \"Xinference: Making Large Model Serving Easy\",\n    author = \"Lu, Weizheng and Xiong, Lingfeng and Zhang, Feng and Qin, Xuye and Chen, Yueguo\",\n    booktitle = \"Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing: System Demonstrations\",\n    month = nov,\n    year = \"2024\",\n    address = \"Miami, Florida, USA\",\n    publisher = \"Association for Computational Linguistics\",\n    url = \"https://aclanthology.org/2024.emnlp-demo.30\",\n    pages = \"291--300\",\n}\n```\n\n## Contributors\n\n<a href=\"https://github.com/xorbitsai/inference/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=xorbitsai/inference\" />\n</a>\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=xorbitsai/inference&type=Date)](https://star-history.com/#xorbitsai/inference&Date)"
  },
  {
    "path": "README_ja_JP.md",
    "content": "<div align=\"center\">\n<img src=\"./assets/xorbits-logo.png\" width=\"180px\" alt=\"xorbits\" />\n\n# Xorbits Inference: モデルサービングを簡単に 🤖\n\n<p align=\"center\">\n  <a href=\"https://xinference.io/ja\">Xinference Enterprise（企業版）</a> ·\n  <a href=\"https://inference.readthedocs.io/en/latest/getting_started/installation.html#installation\">セルフホスティング</a> ·\n  <a href=\"https://inference.readthedocs.io/\">ドキュメント</a>\n</p>\n\n[![PyPI Latest Release](https://img.shields.io/pypi/v/xinference.svg?style=for-the-badge)](https://pypi.org/project/xinference/)\n[![License](https://img.shields.io/pypi/l/xinference.svg?style=for-the-badge)](https://github.com/xorbitsai/inference/blob/main/LICENSE)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/xorbitsai/inference/python.yaml?branch=main&style=for-the-badge&label=GITHUB%20ACTIONS&logo=github)](https://actions-badge.atrox.dev/xorbitsai/inference/goto?ref=main)\n[![Docker Pulls](https://img.shields.io/docker/pulls/xprobe/xinference?style=for-the-badge&logo=docker)](https://hub.docker.com/r/xprobe/xinference)\n[![Discord](https://img.shields.io/badge/join_Discord-5462eb.svg?logo=discord&style=for-the-badge&logoColor=%23f5f5f5)](https://discord.gg/Xw9tszSkr5)\n[![Twitter](https://img.shields.io/twitter/follow/xorbitsio?logo=x&style=for-the-badge)](https://twitter.com/xorbitsio)\n\n<p align=\"center\">\n  <a href=\"./README.md\"><img alt=\"README in English\" src=\"https://img.shields.io/badge/English-d9d9d9?style=for-the-badge\"></a>\n  <a href=\"./README_zh_CN.md\"><img alt=\"简体中文版自述文件\" src=\"https://img.shields.io/badge/中文介绍-d9d9d9?style=for-the-badge\"></a>\n  <a href=\"./README_ja_JP.md\"><img alt=\"日本語のREADME\" src=\"https://img.shields.io/badge/日本語-454545?style=for-the-badge\"></a>\n</p>\n</div>\n<br />\n\n\nXorbits Inference(Xinference) は、言語、音声認識、マルチモーダルモデルのために\n設計された強力で汎用性の高いライブラリです。 Xorbits Inference を使えば、たった 1 つのコマンドで、\nあなたや最先端のビルトインモデルを簡単にデプロイし、提供することができます。 Xorbits Inference は、\n研究者、開発者、データサイエンティストを問わず、最先端の AI モデルの可能性を最大限に引き出すことができます。\n\n<div align=\"center\">\n<i><a href=\"https://discord.gg/Xw9tszSkr5\">👉 Discord コミュニティにご参加ください！</a></i>\n</div>\n\n\n## 主な特徴\n🌟 **モデルサービングを簡単に**: 大規模な言語、音声認識、マルチモーダルモデルの提供プロセスを簡素化します。\n1つのコマンドで、実験用と本番用のモデルをセットアップしてデプロイできます。\n\n⚡️ **最先端モデル**: コマンド1つで最先端のビルトインモデルを実験。\nInference は、最先端のオープンソースモデルへのアクセスを提供します！\n\n🖥 **異機種ハードウェアの利用**: [ggml](https://github.com/ggerganov/ggml) でハードウェアリソースを最大限に活用しましょう。\nXorbits Inference は、GPU や CPU を含む異種ハードウェアをインテリジェントに利用し、モデル推論タスクを高速化します。\n\n⚙️ **柔軟な API とインターフェース**: OpenAI互換のRESTful API（Function Callingを含む）、RPC、コマンドライン、Web UIなど、\n多様なインターフェースを提供し、モデルの管理と相互作用を容易にします。\n\n🌐 **配布デプロイメント**: Excel の分散展開シナリオでは、複数のデバイスやマシンにモデルの推論をシームレスに分散させることができます。\n\n🔌 **サードパーティライブラリとの組み込み統合**: Xorbits Inference は、[LangChain](https://python.langchain.com/docs/integrations/providers/xinference)\nや [LlamaIndex](https://gpt-index.readthedocs.io/en/stable/examples/llm/XinferenceLocalDeployment.html#i-run-pip-install-xinference-all-in-a-terminal-window) のような人気のあるサードパーティライブラリと\nシームレスに統合されています。\n\n## なぜ Xinference を選ぶのか\n| 機能 | Xinference | FastChat | OpenLLM | RayLLM |\n|------|------------|----------|---------|--------|\n| OpenAI 互換の RESTful API | ✅ | ✅ | ✅ | ✅ |\n| vLLM 統合 | ✅ | ✅ | ✅ | ✅ |\n| その他の推論エンジン（GGML、TensorRT） | ✅ | ❌ | ✅ | ✅ |\n| その他のプラットフォーム（CPU、Metal） | ✅ | ✅ | ❌ | ❌ |\n| マルチノードクラスター展開 | ✅ | ❌ | ❌ | ✅ |\n| 画像モデル（テキストから画像へ） | ✅ | ✅ | ❌ | ❌ |\n| テキスト埋め込みモデル | ✅ | ❌ | ❌ | ❌ |\n| マルチモーダルモデル | ✅ | ❌ | ❌ | ❌ |\n| より多くのOpenAI機能（関数呼び出し） | ✅ | ❌ | ❌ | ❌ |\n\n## 入門ガイド\n\n**始める前に、GitHubで私たちにスターを付けてください。そうすると、新しいリリースの通知を即座に受け取ることができます！**\n\n* [ドキュメント](https://inference.readthedocs.io/en/latest/index.html)\n* [組み込みモデル](https://inference.readthedocs.io/en/latest/models/builtin/index.html)\n* [カスタムモデル](https://inference.readthedocs.io/en/latest/models/custom.html)\n* [デプロイメントドキュメント](https://inference.readthedocs.io/en/latest/getting_started/using_xinference.html)\n* [例とチュートリアル](https://inference.readthedocs.io/en/latest/examples/index.html)\n\n### Jupyter Notebook\n\nXinferenceを体験する最軽量な方法は、私たちの[Google Colab上のJupyterノートブック](https://colab.research.google.com/github/xorbitsai/inference/blob/main/examples/Xinference_Quick_Start.ipynb)を試すことです]。\n\n### Docker\n\nNvidia GPUユーザーは、[Xinference Dockerイメージ](https://inference.readthedocs.io/en/latest/getting_started/using_docker_image.html)を使用してXinferenceサーバーを開始することができます。インストールコマンドを実行する前に、システムに[Docker](https://docs.docker.com/get-docker/)と[CUDA](https://developer.nvidia.com/cuda-downloads)が設定されていることを確認してください。\n\n### クイックスタート\n\n以下のようにpipを使用してXinferenceをインストールします。（他のオプションについては、[インストールページ](https://inference.readthedocs.io/en/latest/getting_started/installation.html)を参照してください。）\n\n```bash\npip install \"xinference[all]\"\n```\n\nローカルインスタンスのXinferenceを開始するには、次のコマンドを実行します：\n\n```bash\n$ xinference-local\n```\n\nXinferenceが実行されると、Web UI、cURL、コマンドライン、またはXinferenceのPythonクライアントを介して試すことができます。詳細は[ドキュメント](https://inference.readthedocs.io/en/latest/getting_started/using_xinference.html#run-xinference-locally)をご覧ください。\n\n![Web UI](assets/screenshot.png)\n\n## 関与する\n\n| プラットフォーム                                                                                        | 目的                    |\n|-------------------------------------------------------------------------------------------------|-----------------------|\n| [Github イシュー](https://github.com/xorbitsai/inference/issues)                                    | バグ報告と機能リクエストの提出。      |\n| [Discord](https://discord.gg/Xw9tszSkr5) | 他のXinferenceユーザーとの協力。 |\n| [Twitter](https://twitter.com/xorbitsio)                                                        | 新機能に関する最新情報の入手。       |\n\n## 引用\n\nこの仕事が役立つ場合は、以下のように引用してください：\n\n```bibtex\n@inproceedings{lu2024xinference,\n    title = \"Xinference: Making Large Model Serving Easy\",\n    author = \"Lu, Weizheng and Xiong, Lingfeng and Zhang, Feng and Qin, Xuye and Chen, Yueguo\",\n    booktitle = \"Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing: System Demonstrations\",\n    month = nov,\n    year = \"2024\",\n    address = \"Miami, Florida, USA\",\n    publisher = \"Association for Computational Linguistics\",\n    url = \"https://aclanthology.org/2024.emnlp-demo.30\",\n    pages = \"291--300\",\n}\n```\n\n## 寄稿者\n\n<a href=\"https://github.com/xorbitsai/inference/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=xorbitsai/inference\" />\n</a>"
  },
  {
    "path": "README_zh_CN.md",
    "content": "<div align=\"center\">\n<img src=\"./assets/xorbits-logo.png\" width=\"180px\" alt=\"xorbits\" />\n\n# Xorbits Inference：模型推理， 轻而易举 🤖\n\n<p align=\"center\">\n  <a href=\"https://xinference.cn\">Xinference 企业版</a> ·\n  <a href=\"https://inference.readthedocs.io/zh-cn/latest/getting_started/installation.html#installation\">自托管</a> ·\n  <a href=\"https://inference.readthedocs.io/zh-cn/latest/index.html\">文档</a>\n</p>\n\n[![PyPI Latest Release](https://img.shields.io/pypi/v/xinference.svg?style=for-the-badge)](https://pypi.org/project/xinference/)\n[![License](https://img.shields.io/pypi/l/xinference.svg?style=for-the-badge)](https://github.com/xorbitsai/inference/blob/main/LICENSE)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/xorbitsai/inference/python.yaml?branch=main&style=for-the-badge&label=GITHUB%20ACTIONS&logo=github)](https://actions-badge.atrox.dev/xorbitsai/inference/goto?ref=main)\n[![Docker Pulls](https://img.shields.io/docker/pulls/xprobe/xinference?style=for-the-badge&logo=docker)](https://hub.docker.com/r/xprobe/xinference)\n[![WeChat](https://img.shields.io/badge/添加微信小助手-07C160?style=for-the-badge&logo=wechat&logoColor=white)](https://xinference.cn/images/WeCom.jpg)\n[![Zhihu](https://img.shields.io/static/v1?style=for-the-badge&message=未来速度&color=0084FF&logo=Zhihu&logoColor=FFFFFF&label=)](https://www.zhihu.com/org/xorbits)\n\n<p align=\"center\">\n  <a href=\"./README.md\"><img alt=\"README in English\" src=\"https://img.shields.io/badge/English-d9d9d9?style=for-the-badge\"></a>\n  <a href=\"./README_zh_CN.md\"><img alt=\"简体中文版自述文件\" src=\"https://img.shields.io/badge/中文介绍-454545?style=for-the-badge\"></a>\n  <a href=\"./README_ja_JP.md\"><img alt=\"日本語のREADME\" src=\"https://img.shields.io/badge/日本語-d9d9d9?style=for-the-badge\"></a>\n</p>\n</div>\n<br />\n\n\nXorbits Inference（Xinference）是一个性能强大且功能全面的分布式推理框架。可用于大语言模型（LLM），语音识别模型，多模态模型等各种模型的推理。通过 Xorbits Inference，你可以轻松地一键部署你自己的模型或内置的前沿开源模型。无论你是研究者，开发者，或是数据科学家，都可以通过 Xorbits Inference 与最前沿的 AI 模型，发掘更多可能。\n\n\n<div align=\"center\">\n<i><a href=\"https://xinference.cn/images/WeCom.jpg\">👉 添加企业微信、加入Xinference社区!</a></i>\n</div>\n\n## 🔥 近期热点\n### 框架增强\n- Agent 原生服务能力：Xinference 与 [Xagent](https://github.com/xorbitsai/xagent) 深度集成，支持动态规划、工具调用与多步自主推理，突破传统静态流程的限制。\n- 自动 Batch: 多个并发请求会被自动合批处理，大幅提升吞吐量。: [#4197](https://github.com/xorbitsai/inference/pull/4197)\n- 支持寒武纪芯片：[#3693](https://github.com/xorbitsai/inference/pull/3693)\n- [Xllamacpp](https://github.com/xorbitsai/xllamacpp): 全新llama.cpp Python binding，由 Xinference 团队维护，支持持续并行且更生产可用: [#2997](https://github.com/xorbitsai/inference/pull/2997)\n- 分布式推理：在多个 worker 上运行大尺寸模型：[#2877](https://github.com/xorbitsai/inference/pull/2877)\n- VLLM 引擎增强: 跨副本共享KV Cache: [#2732](https://github.com/xorbitsai/inference/pull/2732)\n### 新模型\n- 内置 [Qwen-3.5](https://github.com/QwenLM/Qwen3.5): [#4639](https://github.com/xorbitsai/inference/pull/4639)\n- 内置 [GLM-5](https://github.com/zai-org/GLM-5): [#4638](https://github.com/xorbitsai/inference/pull/4638)\n- 内置 [MiniMax-M2.5](https://github.com/MiniMax-AI/MiniMax-M2.5): [#4630](https://github.com/xorbitsai/inference/pull/4630)\n- 内置 [Kimi-K2.5](https://github.com/MoonshotAI/Kimi-K2.5): [#4631](https://github.com/xorbitsai/inference/pull/4631)\n- 内置 [FLUX.2-Klein](https://bfl.ai/models/flux-2-klein): [#4596](https://github.com/xorbitsai/inference/pull/4596)\n- 内置 [Qwen3-ASR](https://github.com/QwenLM/Qwen3-ASR): [#4581](https://github.com/xorbitsai/inference/pull/4581)\n- 内置 [GLM-4.7](https://huggingface.co/zai-org/GLM-4.7): [#4565](https://github.com/xorbitsai/inference/pull/4565)\n- 内置 [MinerU2.5-2509-1.2B](https://huggingface.co/opendatalab/MinerU2.5-2509-1.2B): [#4569](https://github.com/xorbitsai/inference/pull/4569)\n### 集成\n- [Xagent](https://github.com/xorbitsai/xagent)：企业级 Agent 平台，用于构建和运行具备规划、记忆与工具调用能力的智能体，不再受限于僵化的工作流。\n- [FastGPT](https://doc.fastai.site/docs/development/custom-models/xinference/)：一个基于 LLM 大模型的开源 AI 知识库构建平台。提供了开箱即用的数据处理、模型调用、RAG 检索、可视化 AI 工作流编排等能力，帮助您轻松实现复杂的问答场景。\n- [Dify](https://docs.dify.ai/advanced/model-configuration/xinference): 一个涵盖了大型语言模型开发、部署、维护和优化的 LLMOps 平台。\n- [RAGFlow](https://github.com/infiniflow/ragflow): 是一款基于深度文档理解构建的开源 RAG 引擎。\n- [MaxKB](https://github.com/1Panel-dev/MaxKB): MaxKB = Max Knowledge Base，是一款基于大语言模型和 RAG 的开源知识库问答系统，广泛应用于智能客服、企业内部知识库、学术研究与教育等场景。\n\n## 主要功能\n🌟 **模型推理，轻而易举**：大语言模型，语音识别模型，多模态模型的部署流程被大大简化。一个命令即可完成模型的部署工作。 \n\n⚡️ **前沿模型，应有尽有**：框架内置众多中英文的前沿大语言模型，包括 baichuan，chatglm2 等，一键即可体验！内置模型列表还在快速更新中！\n\n🖥 **异构硬件，快如闪电**：通过 [ggml](https://github.com/ggerganov/ggml)，同时使用你的 GPU 与 CPU 进行推理，降低延迟，提高吞吐！\n\n⚙️ **接口调用，灵活多样**：提供多种使用模型的接口，包括 OpenAI 兼容的 RESTful API（包括 Function Calling），RPC，命令行，web UI 等等。方便模型的管理与交互。\n\n🌐 **集群计算，分布协同**: 支持分布式部署，通过内置的资源调度器，让不同大小的模型按需调度到不同机器，充分使用集群资源。\n\n🔌 **开放生态，无缝对接**: 与流行的三方库无缝对接，包括 [LangChain](https://python.langchain.com/docs/integrations/providers/xinference)，[LlamaIndex](https://gpt-index.readthedocs.io/en/stable/examples/llm/XinferenceLocalDeployment.html#i-run-pip-install-xinference-all-in-a-terminal-window)，[Dify](https://docs.dify.ai/advanced/model-configuration/xinference)，以及 [Chatbox](https://chatboxai.app/)。\n\n## 为什么选择 Xinference\n| 功能特点                    | Xinference | FastChat | OpenLLM | RayLLM |\n|-------------------------|------------|----------|---------|--------|\n| 兼容 OpenAI 的 RESTful API | ✅ | ✅ | ✅ | ✅ |\n| vLLM 集成                 | ✅ | ✅ | ✅ | ✅ |\n| 更多推理引擎（GGML、TensorRT）   | ✅ | ❌ | ✅ | ✅ |\n| 更多平台支持（CPU、Metal）       | ✅ | ✅ | ❌ | ❌ |\n| 分布式集群部署                 | ✅ | ❌ | ❌ | ✅ |\n| 图像模型（文生图）               | ✅ | ✅ | ❌ | ❌ |\n| 文本嵌入模型                  | ✅ | ❌ | ❌ | ❌ |\n| 多模态模型                   | ✅ | ❌ | ❌ | ❌ |\n| 语音识别模型                  | ✅ | ❌ | ❌ | ❌ |\n| 更多 OpenAI 功能 (函数调用)     | ✅ | ❌ | ❌ | ❌ |\n\n## 使用 Xinference\n\n- **自托管 Xinference 社区版</br>**\n使用 [入门指南](#getting-started) 快速在你自己的环境中运行 Xinference。\n参考 [文档](https://inference.readthedocs.io/zh-cn) 以获得参考和更多说明。\n\n- **面向企业/组织的 Xinference 版本</br>**\n我们提供额外的面向企业的功能。 [通过企业微信联系](https://xinference.cn/images/WeCom.jpg)\n或 [提交表单](https://w8v6grm432.feishu.cn/share/base/form/shrcn9u1EBXQxmGMqILEjguuGoh) 讨论企业需求。 </br>\n\n## 保持领先\n\n在 GitHub 上给 Xinference Star，并立即收到新版本的通知。\n\n![star-us](assets/stay_ahead.gif)\n\n## 入门指南\n\n* [文档](https://inference.readthedocs.io/zh-cn/latest/index.html)\n* [内置模型](https://inference.readthedocs.io/zh-cn/latest/models/builtin/index.html)\n* [自定义模型](https://inference.readthedocs.io/zh-cn/latest/models/custom.html)\n* [部署文档](https://inference.readthedocs.io/zh-cn/latest/getting_started/using_xinference.html)\n* [示例和教程](https://inference.readthedocs.io/zh-cn/latest/examples/index.html)\n\n### Jupyter Notebook\n\n体验 Xinference 最轻量级的方式是使用我们 [Google Colab 上的 Jupyter Notebook](https://colab.research.google.com/github/xorbitsai/inference/blob/main/examples/Xinference_Quick_Start.ipynb)。\n\n### Docker\n\nNvidia GPU 用户可以使用[Xinference Docker 镜像](https://inference.readthedocs.io/zh-cn/latest/getting_started/using_docker_image.html) 启动 Xinference 服务器。在执行安装命令之前，确保你的系统中已经安装了 [Docker](https://docs.docker.com/get-docker/) 和 [CUDA](https://developer.nvidia.com/cuda-downloads)。\n\n### Kubernetes\n\n确保你的 Kubernetes 集群开启了 GPU 支持，然后通过 `helm` 进行如下方式的安装。\n\n```\n# 新增xinference仓库\nhelm repo add xinference https://xorbitsai.github.io/xinference-helm-charts\n\n# 更新仓库，查询可安装的版本\nhelm repo update xinference\nhelm search repo xinference/xinference --devel --versions\n\n# 在K8s中安装xinference\nhelm install xinference xinference/xinference -n xinference --version 0.0.1-v<xinference_release_version>\n```\n\n更多定制化安装方式，请参考[文档](https://inference.readthedocs.io/en/latest/getting_started/using_kubernetes.html)。\n\n### 快速开始\n\n使用 pip 安装 Xinference，操作如下。（更多选项，请参阅[安装页面](https://inference.readthedocs.io/zh-cn/latest/getting_started/installation.html)。）\n\n```bash\npip install \"xinference[all]\"\n```\n\n要启动一个本地的 Xinference 实例，请运行以下命令：\n\n```bash\n$ xinference-local\n```\n\n一旦 Xinference 运行起来，你可以通过多种方式尝试它：通过网络界面、通过 cURL、通过命令行或通过 Xinference 的 Python 客户端。更多指南，请查看我们的[文档](https://inference.readthedocs.io/zh-cn/latest/getting_started/using_xinference.html#run-xinference-locally)。\n\n![网络界面](assets/screenshot.png)\n\n## 参与其中\n\n| 平台                                                                                              | 目的                   |\n|-------------------------------------------------------------------------------------------------|----------------------|\n| [Github 问题](https://github.com/xorbitsai/inference/issues)                                      | 报告错误和提交功能请求。         |\n| [Discord](https://discord.gg/Xw9tszSkr5) | 与其他 Xinference 用户合作。 |\n| [Twitter](https://twitter.com/xorbitsio)                                                        | 及时了解新功能。             |\n| [微信社群](https://xinference.cn/images/WeCom.jpg)                                     | 与其他 Xinference 用户交流。 |\n| [知乎](https://zhihu.com/org/xorbits)                                                             | 了解团队最新的进展。           |\n\n## 引用\n\n如果您觉得此项目有帮助，请以如下格式引用我们：\n\n```bibtex\n@inproceedings{lu2024xinference,\n    title = \"Xinference: Making Large Model Serving Easy\",\n    author = \"Lu, Weizheng and Xiong, Lingfeng and Zhang, Feng and Qin, Xuye and Chen, Yueguo\",\n    booktitle = \"Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing: System Demonstrations\",\n    month = nov,\n    year = \"2024\",\n    address = \"Miami, Florida, USA\",\n    publisher = \"Association for Computational Linguistics\",\n    url = \"https://aclanthology.org/2024.emnlp-demo.30\",\n    pages = \"291--300\",\n}\n```\n\n## 合作\n\n* [琶洲实验室 | 黄埔](https://www.pazhoulab-huangpu.com/#/)\n\n## 贡献者\n\n<a href=\"https://github.com/xorbitsai/inference/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=xorbitsai/inference\" />\n</a>\n\n## Star 历史\n\n[![Star History Chart](https://api.star-history.com/svg?repos=xorbitsai/inference&type=Date)](https://star-history.com/#xorbitsai/inference&Date)"
  },
  {
    "path": "benchmark/README.md",
    "content": "# Benchmarking Xinference\n\n## Downloading the ShareGPT dataset\n\nYou can download the dataset by running:\n```bash\nwget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json\n```\n\n## Benchmarking latency\n\nThis tool will sample prompts from dataset, and run benchmark with serialized requests.\n\n```bash\npython benchmark_latency.py --dataset /path/to/ShareGPT_V3_unfiltered_cleaned_split.json \\\n                            --tokenizer /path/to/tokenizer \\\n                            --num-prompt 100 \\\n                            --model-uid ${model_uid}\n```\n\n## Benchmarking serving\n\nThis tool will sample prompts from dataset, and run benchmark with parallel requests.\n\n```bash\npython benchmark_serving.py --dataset /path/to/ShareGPT_V3_unfiltered_cleaned_split.json \\\n                            --tokenizer /path/to/tokenizer \\\n                            --model-uid ${model_uid} \\\n                            --num-prompt 100 --concurrency 50\n```\n\n## Benchmarking long context serving\n\nThis tool will generate long prompts to sort random numbers, according to specified context length.\n\n```\npython benchmark/benchmark_long.py --context-length ${context_length} --tokenizer /path/to/tokenizer \\\n\t\t\t\t\t\t\t--model-uid ${model_uid} \\\n\t\t\t\t\t\t\t--num-prompts 32 -c 16\n```\n\n## Common Options for Benchmarking Tools\n- `--stream`. You can enable streaming responses by using the option, which is useful for real-time data processing and receiving incremental data without waiting for the entire dataset to be processed. \n\n- `--print-error`. For troubleshooting and more detailed output, the option can be used to print detailed error messages if any errors are encountered during the execution. \n\nThese options are available for use in all benchmarking tools provided in this suite, enhancing flexibility and providing essential debugging information.\n"
  },
  {
    "path": "benchmark/benchmark_embedding.py",
    "content": "# Copyright 2022-2025 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport argparse\nimport asyncio\nimport logging\nimport random\nimport time\nimport aiohttp\nfrom typing import List, Dict, Optional\nfrom datasets import load_dataset\nimport numpy as np\nfrom benchmark_runner import ConcurrentBenchmarkRunner\n\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\n\nclass EmbeddingBenchmarkRunner(ConcurrentBenchmarkRunner):\n    def __init__(\n        self,\n        api_url: str,\n        model_uid: str,\n        input_requests: List[Dict],\n        stream: bool,\n        concurrency: int,\n        api_key: Optional[str] = None,\n        print_error: bool = False,\n    ):\n        super().__init__(\n            api_url,\n            model_uid,\n            input_requests,\n            stream,\n            concurrency,\n            api_key,\n            print_error,\n        )\n\n    async def _run(self):\n        tasks = []\n        for i in range(self.concurrency):\n            tasks.append(asyncio.create_task(self.worker(i)))\n\n        await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)\n\n    async def worker(self, i: int):\n        r = random.Random(i)\n        index = r.randint(0, len(self.input_requests) - 1)\n        while self.left > 0:\n            request = self.input_requests[index]\n            index += 1\n            index = index % len(self.input_requests)\n            await self.send_request(request)\n            self.left -= 1\n            # pring longer space to overwrite the previous when left decrease\n            print(\"\\rdone_request, left %d    \" % (self.left), end=\"\")\n        # The last one\n        print(\"\")\n\n    async def send_request(self, request, warming_up: bool = False):\n        input = request[\"sentence\"]\n        request_start_time = time.time()\n\n        pload = {\n            \"model\": self.model_uid,\n            \"input\": input,\n        }\n\n        headers = {\"User-Agent\": \"Benchmark Client\"}\n        if self.api_key:\n            headers[\"Authorization\"] = f\"Bearer {self.api_key}\"\n\n        timeout = aiohttp.ClientTimeout(total=3 * 3600)\n        async with aiohttp.ClientSession(timeout=timeout) as session:\n            async with session.post(\n                self.api_url, headers=headers, json=pload\n            ) as response:\n                resp = await response.json()\n                if response.status == 200:\n                    request_end_time = time.time()\n                    request_latency = request_end_time - request_start_time\n                    if not warming_up:\n                        self.outputs.append(request_latency)\n                else:\n                    logger.error(f\"Failed to create chat completion: {resp}\")\n\n\ndef main(args: argparse.Namespace):\n    print(args)\n\n    random.seed(args.seed)\n    np.random.seed(args.seed)\n\n    api_url = f\"http://{args.host}:{args.port}/v1/embeddings\"\n    model_uid = args.model_uid\n\n    logger.info(\"Preparing for benchmark.\")\n    dataset = load_dataset(args.dataset, args.subset)\n    input_requests = dataset[\"test\"].to_list()\n    if args.num_query > 0:\n        input_requests = input_requests[: args.num_query]\n    else:\n        args.num_query = len(input_requests)\n\n    logger.info(\"Benchmark starts.\")\n\n    benchmark = EmbeddingBenchmarkRunner(\n        api_url,\n        model_uid,\n        input_requests,\n        args.stream,\n        concurrency=args.concurrency,\n        api_key=args.api_key,\n        print_error=args.print_error,\n    )\n    asyncio.run(benchmark.run())\n\n    # TODO: Print the results of request_latency in detail.\n    # benchmark.print_stats() needs to be overridden\n    print(f\"Total time: {benchmark.benchmark_time:.2f} s\")\n    print(f\"Throughput: {args.num_query / benchmark.benchmark_time:.2f} requests/s\")\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"Stress test the embedding model.\")\n    parser.add_argument(\"--host\", type=str, default=\"localhost\")\n    parser.add_argument(\"--port\", type=int, default=9997)\n    parser.add_argument(\n        \"--dataset\",\n        type=str,\n        default=\"clue\",\n        help=\"Name to the dataset.\",\n    )\n    parser.add_argument(\n        \"--subset\",\n        type=str,\n        default=\"tnews\",\n        help=\"Subset to the dataset.\",\n    )\n    parser.add_argument(\n        \"--concurrency\",\n        \"-c\",\n        type=int,\n        default=256,\n        help=\"Set the concurrency of request to send\",\n    )\n    parser.add_argument(\n        \"--num-query\",\n        \"-q\",\n        type=int,\n        default=-1,\n        help=\"Set the query dataset count, default is all\",\n    )\n    parser.add_argument(\n        \"--trust-remote-code\",\n        action=\"store_true\",\n        help=\"Trust remote code from huggingface.\",\n    )\n    parser.add_argument(\n        \"--model-uid\", type=str, required=True, help=\"Xinference model UID.\"\n    )\n    parser.add_argument(\"--seed\", type=int, default=0)\n    parser.add_argument(\n        \"--stream\", action=\"store_true\", help=\"Enable streaming responses.\"\n    )\n    parser.add_argument(\n        \"--api-key\", type=str, default=None, help=\"Authorization api key\",\n    )\n    parser.add_argument(\n        \"--print-error\",\n        action=\"store_true\",\n        help=\"Print detailed error messages if any errors encountered.\"\n    )\n    args = parser.parse_args()\n    main(args)\n"
  },
  {
    "path": "benchmark/benchmark_latency.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport argparse\nimport asyncio\nimport logging\nimport random\n\nimport numpy as np\nfrom utils import get_tokenizer, sample_requests\nfrom benchmark_runner import BenchmarkRunner\n\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\n\nclass LatencyBenchmarkRunner(BenchmarkRunner):\n    async def _run(self):\n        total_requests = len(self.input_requests)\n        for i, request in enumerate(self.input_requests):\n            await self.send_request(request)\n            remaining = total_requests - (i + 1)\n            print(\n                f\"\\rProcessed {i + 1}/{total_requests} requests, {remaining} remaining.\",\n                end=\"\",\n            )\n        print(\"\")\n\n\ndef main(args: argparse.Namespace):\n    print(args)\n    random.seed(args.seed)\n    np.random.seed(args.seed)\n\n    api_url = f\"http://{args.host}:{args.port}/v1/chat/completions\"\n    model_uid = args.model_uid\n\n    logger.info(\"Preparing for benchmark.\")\n    tokenizer = get_tokenizer(args.tokenizer, trust_remote_code=args.trust_remote_code)\n    input_requests = sample_requests(args.dataset, args.num_prompts, tokenizer)\n\n    logger.info(\"Benchmark starts.\")\n\n    benchmark = LatencyBenchmarkRunner(\n        api_url,\n        model_uid,\n        input_requests,\n        args.stream,\n        args.api_key,\n        args.print_error,\n    )\n    asyncio.run(benchmark.run())\n\n    benchmark.print_stats()\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"Benchmark the latency of processing a single batch of requests.\"\n    )\n    parser.add_argument(\"--host\", type=str, default=\"localhost\")\n    parser.add_argument(\"--port\", type=int, default=9997)\n    parser.add_argument(\n        \"--dataset\", type=str, required=True, help=\"Path to the dataset.\"\n    )\n    parser.add_argument(\n        \"--tokenizer\", type=str, required=True, help=\"Name or path of the tokenizer.\"\n    )\n    parser.add_argument(\n        \"--num-prompts\", type=int, default=100, help=\"Number of prompts to process.\"\n    )\n    parser.add_argument(\"--seed\", type=int, default=0)\n    parser.add_argument(\n        \"--trust-remote-code\",\n        action=\"store_true\",\n        help=\"Trust remote code from huggingface.\",\n    )\n    parser.add_argument(\"--model-uid\", type=str, help=\"Xinference model UID.\")\n    parser.add_argument(\n        \"--stream\", action=\"store_true\", help=\"Enable streaming responses.\"\n    )\n    parser.add_argument(\n        \"--api-key\",\n        type=str,\n        default=None,\n        help=\"Authorization api key\",\n    )\n    parser.add_argument(\n        \"--print-error\",\n        action=\"store_true\",\n        help=\"Print detailed error messages if any errors encountered.\"\n    )\n    args = parser.parse_args()\n    main(args)\n"
  },
  {
    "path": "benchmark/benchmark_long.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport argparse\nimport asyncio\nimport logging\nimport random\n\nimport numpy as np\n\nfrom utils import generate_sorting_prompts, get_tokenizer\nfrom benchmark_runner import ConcurrentBenchmarkRunner\n\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\n\nclass LongBenchmarkRunner(ConcurrentBenchmarkRunner):\n    async def _run(self):\n        tasks = []\n        for i in range(self.concurrency):\n            tasks.append(asyncio.create_task(self.worker(i)))\n\n        await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)\n\n    async def worker(self, i: int):\n        r = random.Random(i)\n        index = r.randint(0, len(self.input_requests) - 1)\n        while self.left > 0:\n            request = self.input_requests[index]\n            index += 1\n            index = index % len(self.input_requests)\n            await self.send_request(request)\n            self.left -= 1\n            # pring longer space to overwrite the previous when left decrease\n            print(\"\\rdone_request, left %d    \" % (self.left), end=\"\")\n        # The last one\n        print(\"\")\n\n\ndef main(args: argparse.Namespace):\n    if args.concurrency > args.num_prompts:\n        print(\"Fix concurrency with num_prompts %d\" % (args.num_prompts))\n        args.concurrency = args.num_prompts\n    print(args)\n\n    random.seed(args.seed)\n    np.random.seed(args.seed)\n\n    api_url = f\"http://{args.host}:{args.port}/v1/chat/completions\"\n    model_uid = args.model_uid\n\n    logger.info(\"Preparing for benchmark.\")\n    tokenizer = get_tokenizer(args.tokenizer, trust_remote_code=args.trust_remote_code)\n    # XXX: generate_sorting_prompts() currently only generate prompts 1/2 to 2/3 of context_length,\n    # because tokenizers vary by models, consider improve in the future.\n    input_requests = generate_sorting_prompts(\n        args.concurrency, args.context_length, args.context_length / 2 - 20, tokenizer\n    )\n\n    logger.info(\"Benchmark starts.\")\n\n    benchmark = LongBenchmarkRunner(\n        api_url,\n        model_uid,\n        input_requests,\n        args.stream,\n        concurrency=args.concurrency,\n        api_key=args.api_key,\n        print_error=args.print_error,\n    )\n    asyncio.run(benchmark.run())\n\n    benchmark.print_stats()\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"Benchmark the online serving throughput with long context.\"\n    )\n    parser.add_argument(\"--host\", type=str, default=\"localhost\")\n    parser.add_argument(\"--port\", type=int, default=9997)\n    parser.add_argument(\n        \"--tokenizer\", type=str, required=True, help=\"Name or path of the tokenizer.\"\n    )\n    parser.add_argument(\n        \"--context-length\", type=int, default=32768, help=\"model context_length.\"\n    )\n    parser.add_argument(\n        \"--num-prompts\", type=int, default=16, help=\"Number of prompts to process.\"\n    )\n    parser.add_argument(\n        \"--concurrency\",\n        \"-c\",\n        type=int,\n        default=16,\n        help=\"Set the concurrency of request to send\",\n    )\n    parser.add_argument(\n        \"--trust-remote-code\",\n        action=\"store_true\",\n        help=\"Trust remote code from huggingface.\",\n    )\n    parser.add_argument(\"--model-uid\", type=str, help=\"Xinference model UID.\")\n    parser.add_argument(\n        \"--api-key\", type=str, default=None, help=\"Authorization api key\",\n    )\n    parser.add_argument(\"--seed\", type=int, default=0)\n    parser.add_argument(\n        \"--stream\", action=\"store_true\", help=\"Enable streaming responses.\"\n    )\n    parser.add_argument(\n        \"--print-error\",\n        action=\"store_true\",\n        help=\"Print detailed error messages if any errors encountered.\"\n    )\n    args = parser.parse_args()\n    main(args)\n"
  },
  {
    "path": "benchmark/benchmark_rerank.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport argparse\nimport asyncio\nimport logging\nimport random\nimport time\nimport aiohttp\nfrom typing import List, Dict, Optional\nfrom datasets import load_dataset\nimport numpy as np\nfrom benchmark_runner import ConcurrentBenchmarkRunner\n\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\n\nclass RerankBenchmarkRunner(ConcurrentBenchmarkRunner):\n    def __init__(\n        self,\n        api_url: str,\n        model_uid: str,\n        input_requests: List[Dict],\n        stream: bool,\n        top_n: int,\n        concurrency: int,\n        api_key: Optional[str] = None,\n        print_error: bool = False,\n    ):\n        super().__init__(\n            api_url,\n            model_uid,\n            input_requests,\n            stream,\n            concurrency,\n            api_key,\n            print_error,\n        )\n        self.top_n = top_n\n\n    async def _run(self):\n        tasks = []\n        for i in range(self.concurrency):\n            tasks.append(asyncio.create_task(self.worker(i)))\n\n        await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)\n\n    async def worker(self, i: int):\n        r = random.Random(i)\n        index = r.randint(0, len(self.input_requests) - 1)\n        while self.left > 0:\n            request = self.input_requests[index]\n            index += 1\n            index = index % len(self.input_requests)\n            await self.send_request(request)\n            self.left -= 1\n            # pring longer space to overwrite the previous when left decrease\n            print(\"\\rdone_request, left %d    \" % (self.left), end=\"\")\n        # The last one\n        print(\"\")\n\n    async def send_request(self, request, warming_up: bool = False):\n        prompt, documents = request[\"query\"], request[\"positive\"]\n        request_start_time = time.time()\n\n        pload = {\n            \"model\": self.model_uid,\n            \"top_n\": self.top_n,\n            \"query\": prompt,\n            \"documents\": documents,\n        }\n\n        headers = {\"User-Agent\": \"Benchmark Client\"}\n        if self.api_key:\n            headers[\"Authorization\"] = f\"Bearer {self.api_key}\"\n\n        timeout = aiohttp.ClientTimeout(total=3 * 3600)\n        async with aiohttp.ClientSession(timeout=timeout) as session:\n            async with session.post(\n                self.api_url, headers=headers, json=pload\n            ) as response:\n                resp = await response.json()\n                if response.status == 200:\n                    request_end_time = time.time()\n                    request_latency = request_end_time - request_start_time\n                    if not warming_up:\n                        self.outputs.append(request_latency)\n                else:\n                    logger.error(f\"Failed to create chat completion: {resp}\")\n\n\ndef main(args: argparse.Namespace):\n    print(args)\n\n    random.seed(args.seed)\n    np.random.seed(args.seed)\n\n    api_url = f\"http://{args.host}:{args.port}/v1/rerank\"\n    model_uid = args.model_uid\n\n    logger.info(\"Preparing for benchmark.\")\n    dataset = load_dataset(args.dataset)\n    input_requests = dataset[\"test\"].remove_columns(\"negative\").to_list()\n    if args.num_query > 0:\n        input_requests = input_requests[: args.num_query]\n    else:\n        args.num_query = len(input_requests)\n\n    logger.info(\"Benchmark starts.\")\n\n    benchmark = RerankBenchmarkRunner(\n        api_url,\n        model_uid,\n        input_requests,\n        args.stream,\n        top_n=args.top_n,\n        concurrency=args.concurrency,\n        api_key=args.api_key,\n        print_error=args.print_error,\n    )\n    asyncio.run(benchmark.run())\n\n    # TODO: Print the results of request_latency in detail.\n    # benchmark.print_stats() needs to be overridden\n    print(f\"Total time: {benchmark.benchmark_time:.2f} s\")\n    print(f\"Throughput: {args.num_query / benchmark.benchmark_time:.2f} requests/s\")\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"Stress test the rerank model.\")\n    parser.add_argument(\"--host\", type=str, default=\"localhost\")\n    parser.add_argument(\"--port\", type=int, default=9997)\n    parser.add_argument(\n        \"--dataset\",\n        type=str,\n        default=\"mteb/scidocs-reranking\",\n        help=\"Path to the dataset.\",\n    )\n    parser.add_argument(\n        \"--concurrency\",\n        \"-c\",\n        type=int,\n        default=16,\n        help=\"Set the concurrency of request to send\",\n    )\n    parser.add_argument(\n        \"--top-n\",\n        \"-n\",\n        type=int,\n        default=5,\n        help=\"Set the top n to the rerank\",\n    )\n    parser.add_argument(\n        \"--num-query\",\n        \"-q\",\n        type=int,\n        default=-1,\n        help=\"Set the query dataset count, default is all\",\n    )\n    parser.add_argument(\n        \"--trust-remote-code\",\n        action=\"store_true\",\n        help=\"Trust remote code from huggingface.\",\n    )\n    parser.add_argument(\n        \"--model-uid\", type=str, required=True, help=\"Xinference model UID.\"\n    )\n    parser.add_argument(\"--seed\", type=int, default=0)\n    parser.add_argument(\n        \"--stream\", action=\"store_true\", help=\"Enable streaming responses.\"\n    )\n    parser.add_argument(\n        \"--api-key\", type=str, default=None, help=\"Authorization api key\",\n    )\n    parser.add_argument(\n        \"--print-error\",\n        action=\"store_true\",\n        help=\"Print detailed error messages if any errors encountered.\"\n    )\n    args = parser.parse_args()\n    main(args)\n"
  },
  {
    "path": "benchmark/benchmark_runner.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport aiohttp\nimport json\nimport sys\nimport traceback\nimport warnings\nimport logging\nfrom dataclasses import dataclass, field\nimport time\nfrom typing import List, Optional, Tuple\n\nimport numpy as np\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\nAIOHTTP_TIMEOUT = aiohttp.ClientTimeout(total=3 * 3600)\n\n\ndef remove_prefix(text: str, prefix: str) -> str:\n    if text.startswith(prefix):\n        return text[len(prefix) :].strip()\n    return text.strip()\n\n\n@dataclass\nclass RequestOutput:\n    success: bool = False\n    prompt_len: int = 0\n    completion_tokens: int = 0\n    latency: float = 0.0\n    ttft: float = 0.0\n    itl: List[float] = field(default_factory=list)  # List of inter-token latencies\n    error: str = \"\"\n\n\nclass BenchmarkRunner:\n    def __init__(\n        self,\n        api_url: str,\n        model_uid: str,\n        input_requests: List[Tuple[str, int, int]],\n        stream: bool,\n        api_key: Optional[str] = None,\n        print_error: bool = False,\n    ):\n        self.api_url = api_url\n        self.model_uid = model_uid\n        self.input_requests = input_requests\n        self.outputs: List[RequestOutput] = []\n        self.benchmark_time = None\n        self.stream = stream\n        self.api_key = api_key\n        self.print_error = print_error\n\n    async def run(self):\n        await self.warm_up()\n        start_time = time.time()\n        await self._run()\n        end_time = time.time()\n        self.benchmark_time = end_time - start_time\n\n    async def warm_up(self, num_requests: int = 5):\n        logger.info(\"Warming up...\")\n        for i in range(min(num_requests, len(self.input_requests))):\n            request = self.input_requests[i]\n            await self.send_request(request, warming_up=True)\n        logger.info(\"Warm-up completed.\")\n\n    async def _run(self):\n        pass\n\n    async def send_request(self, request: tuple, warming_up: bool = False):\n        prompt, prompt_len, output_len = request\n\n        if self.stream:\n            pload = {\n                \"model\": self.model_uid,\n                \"n\": 1,\n                \"temperature\": 0.6,\n                \"top_p\": 0.9,\n                \"max_tokens\": output_len,\n                \"stream\": True,\n                \"messages\": [{\"role\": \"user\", \"content\": prompt}],\n                \"stream_options\": {\"include_usage\": True},\n            }\n        else:\n            pload = {\n                \"model\": self.model_uid,\n                \"n\": 1,\n                \"temperature\": 0.6,\n                \"top_p\": 0.9,\n                \"max_tokens\": output_len,\n                \"stream\": False,\n                \"messages\": [{\"role\": \"user\", \"content\": prompt}],\n            }\n\n        headers = {\"User-Agent\": \"Benchmark Client\"}\n        if self.api_key:\n            headers[\"Authorization\"] = f\"Bearer {self.api_key}\"\n\n        async with aiohttp.ClientSession(timeout=AIOHTTP_TIMEOUT) as session:\n            output = RequestOutput(prompt_len=prompt_len)\n            ttft = 0.0\n            st = time.perf_counter()\n            most_recent_timestamp = st\n\n            try:\n                async with session.post(\n                    self.api_url, headers=headers, json=pload\n                ) as response:\n                    if response.status == 200:\n                        if self.stream:\n                            async for chunk_bytes in response.content:\n                                # {\n                                #     \"id\": \"chataec79465-dfea-46af-81b9-c28124063fc0\",\n                                #     \"model\": \"llama-3-instruct\",\n                                #     \"created\": 1721202668,\n                                #     \"object\": \"chat.completion.chunk\",\n                                #     \"choices\": [\n                                #         {\n                                #             \"index\": 0,\n                                #             \"delta\": {\"role\": \"assistant\", \"content\": \"\"},\n                                #             \"finish_reason\": null,\n                                #         }\n                                #     ],\n                                # }\n                                chunk_bytes = chunk_bytes.strip()\n                                if not chunk_bytes:\n                                    continue\n\n                                chunk = remove_prefix(chunk_bytes.decode(\"utf-8\"), \"data:\")\n\n                                if chunk == \"[DONE]\":\n                                    latency = time.perf_counter() - st\n                                else:\n                                    timestamp = time.perf_counter()\n                                    data = json.loads(chunk)\n\n                                    # First token\n                                    if ttft == 0.0:\n                                        ttft = time.perf_counter() - st\n                                        output.ttft = ttft\n\n                                    # Decoding phase\n                                    else:\n                                        output.itl.append(timestamp - most_recent_timestamp)\n\n                                    most_recent_timestamp = timestamp\n\n                            output.latency = latency\n                            output.success = True\n                            output.completion_tokens = data[\"usage\"][\"completion_tokens\"]\n                        else:\n                            resp = await response.json()\n                            output.latency = time.perf_counter() - st\n                            output.success = True\n                            output.completion_tokens = resp[\"usage\"][\"completion_tokens\"]\n            except Exception:\n                output.success = False\n                exc_info = sys.exc_info()\n                output.error = \"\".join(traceback.format_exception(*exc_info))\n\n            if not warming_up:\n                self.outputs.append(output)\n\n    def print_stats(self):\n        total_time = self.benchmark_time\n\n        if self.stream:\n            # Initialize variables for metrics\n            total_input = 0\n            completed = 0\n            actual_output_lens = []\n            itls = []\n            tpots = []\n            ttfts = []\n\n            for output in self.outputs:\n                if output.success:\n                    actual_output_lens.append(output.completion_tokens)\n                    total_input += output.prompt_len\n                    if output.completion_tokens > 1:\n                        tpots.append(\n                            (output.latency - output.ttft)\n                            / (output.completion_tokens - 1)\n                        )\n                    itls += output.itl\n                    ttfts.append(output.ttft)\n                    completed += 1\n                else:\n                    actual_output_lens.append(0)\n\n            if completed == 0:\n                warnings.warn(\n                    \"All requests failed. This is likely due to a misconfiguration \"\n                    \"on the benchmark arguments.\",\n                    stacklevel=2,\n                )\n\n            # Calculate statistics\n            total_output = sum(actual_output_lens)\n            request_throughput = completed / total_time if total_time > 0 else 0\n            input_throughput = total_input / total_time if total_time > 0 else 0\n            output_throughput = total_output / total_time if total_time > 0 else 0\n\n            mean_ttft = np.mean(ttfts) * 1000 if ttfts else 0\n            median_ttft = np.median(ttfts) * 1000 if ttfts else 0\n            std_ttft = np.std(ttfts) * 1000 if ttfts else 0\n            p99_ttft = np.percentile(ttfts, 99) * 1000 if ttfts else 0\n\n            mean_tpot = np.mean(tpots) * 1000 if tpots else 0\n            median_tpot = np.median(tpots) * 1000 if tpots else 0\n            std_tpot = np.std(tpots) * 1000 if tpots else 0\n            p99_tpot = np.percentile(tpots, 99) * 1000 if tpots else 0\n\n            mean_itl = np.mean(itls) * 1000 if itls else 0\n            median_itl = np.median(itls) * 1000 if itls else 0\n            std_itl = np.std(itls) * 1000 if itls else 0\n            p99_itl = np.percentile(itls, 99) * 1000 if itls else 0\n\n            # Print benchmark results\n            print(\"{s:{c}^{n}}\".format(s=\" Benchmark Result \", n=50, c=\"=\"))\n            print(\"{:<40} {:<10}\".format(\"Successful requests:\", completed))\n            print(\"{:<40} {:<10.2f}\".format(\"Benchmark duration (s):\", total_time))\n            print(\"{:<40} {:<10}\".format(\"Total input tokens:\", total_input))\n            print(\"{:<40} {:<10}\".format(\"Total generated tokens:\", total_output))\n            print(\n                \"{:<40} {:<10.2f}\".format(\n                    \"Request throughput (req/s):\", request_throughput\n                )\n            )\n            print(\n                \"{:<40} {:<10.2f}\".format(\n                    \"Input token throughput (tok/s):\", input_throughput\n                )\n            )\n            print(\n                \"{:<40} {:<10.2f}\".format(\n                    \"Output token throughput (tok/s):\", output_throughput\n                )\n            )\n\n            print(\"{s:{c}^{n}}\".format(s=\"Time to First Token\", n=50, c=\"-\"))\n            print(\"{:<40} {:<10.4f}\".format(\"Mean TTFT (ms):\", mean_ttft))\n            print(\"{:<40} {:<10.4f}\".format(\"Median TTFT (ms):\", median_ttft))\n            print(\"{:<40} {:<10.4f}\".format(\"Std TTFT (ms):\", std_ttft))\n            print(\"{:<40} {:<10.4f}\".format(\"P99 TTFT (ms):\", p99_ttft))\n\n            print(\n                \"{s:{c}^{n}}\".format(\n                    s=\"Time per Output Token (excl. 1st token)\", n=50, c=\"-\"\n                )\n            )\n            print(\"{:<40} {:<10.4f}\".format(\"Mean TPOT (ms):\", mean_tpot))\n            print(\"{:<40} {:<10.4f}\".format(\"Median TPOT (ms):\", median_tpot))\n            print(\"{:<40} {:<10.4f}\".format(\"Std TPOT (ms):\", std_tpot))\n            print(\"{:<40} {:<10.4f}\".format(\"P99 TPOT (ms):\", p99_tpot))\n\n            print(\"{s:{c}^{n}}\".format(s=\"Inter-token Latency\", n=50, c=\"-\"))\n            print(\"{:<40} {:<10.4f}\".format(\"Mean ITL (ms):\", mean_itl))\n            print(\"{:<40} {:<10.4f}\".format(\"Median ITL (ms):\", median_itl))\n            print(\"{:<40} {:<10.4f}\".format(\"Std ITL (ms):\", std_itl))\n            print(\"{:<40} {:<10.4f}\".format(\"P99 ITL (ms):\", p99_itl))\n\n            print(\"=\" * 50)\n        else:\n            # Initialize variables for metrics\n            total_input = 0\n            completed = 0\n            actual_output_lens = []\n            latencies = []\n            per_token_latencies = []\n            per_output_token_latencies = []\n\n            for output in self.outputs:\n                if output.success:\n                    actual_output_lens.append(output.completion_tokens)\n                    total_input += output.prompt_len\n                    latencies.append(output.latency)\n                    per_token_latencies.append(\n                        output.latency / (output.prompt_len + output.completion_tokens)\n                    )\n                    if output.completion_tokens > 0:\n                        per_output_token_latencies.append(\n                            output.latency / output.completion_tokens\n                        )\n                    completed += 1\n                else:\n                    actual_output_lens.append(0)\n\n            if completed == 0:\n                warnings.warn(\n                    \"All requests failed. This is likely due to a misconfiguration \"\n                    \"on the benchmark arguments.\",\n                    stacklevel=2,\n                )\n\n            # Calculate statistics\n            total_output = sum(actual_output_lens)\n            request_throughput = len(self.outputs) / total_time if total_time > 0 else 0\n            input_throughput = total_input / total_time if total_time > 0 else 0\n            output_throughput = total_output / total_time if total_time > 0 else 0\n\n            mean_latency = np.mean(latencies) if latencies else 0\n            mean_per_token_latency = (\n                np.mean(per_token_latencies) if per_token_latencies else 0\n            )\n            mean_per_output_token_latency = (\n                np.mean(per_output_token_latencies) if per_output_token_latencies else 0\n            )\n\n            # Print benchmark results\n            print(\"{s:{c}^{n}}\".format(s=\" Benchmark Result \", n=50, c=\"=\"))\n            print(\"{:<40} {:<10}\".format(\"Successful requests:\", completed))\n            print(\"{:<40} {:<10.2f}\".format(\"Benchmark duration (s):\", total_time))\n            print(\"{:<40} {:<10}\".format(\"Total input tokens:\", total_input))\n            print(\"{:<40} {:<10}\".format(\"Total generated tokens:\", total_output))\n            print(\n                \"{:<40} {:<10.2f}\".format(\n                    \"Request throughput (req/s):\", request_throughput\n                )\n            )\n            print(\n                \"{:<40} {:<10.2f}\".format(\n                    \"Input token throughput (tok/s):\", input_throughput\n                )\n            )\n            print(\n                \"{:<40} {:<10.2f}\".format(\n                    \"Output token throughput (tok/s):\", output_throughput\n                )\n            )\n\n            print(\"{s:{c}^{n}}\".format(s=\"Latency Statistics\", n=50, c=\"-\"))\n            print(\"{:<40} {:<10.4f}\".format(\"Mean latency (s):\", mean_latency))\n            print(\n                \"{:<40} {:<10.4f}\".format(\n                    \"Mean latency per token (s):\", mean_per_token_latency\n                )\n            )\n            print(\n                \"{:<40} {:<10.4f}\".format(\n                    \"Mean latency per output token (s):\", mean_per_output_token_latency\n                )\n            )\n\n            print(\"=\" * 50)\n\n            print(f\"Total time: {total_time:.2f} s\")\n            print(f\"Throughput: {len(self.outputs) / total_time:.2f} requests/s\")\n\n        if completed < len(self.input_requests):\n            if self.print_error:\n                logger.info(\"Errors encountered during benchmark:\")\n                for output in self.outputs:\n                    if not output.success:\n                        print(f\"Error for prompt with length {output.prompt_len}: {output.error}\")\n            else:\n                logger.info(\n                    \"Errors were encountered during the benchmark. Run with --print-error to see detailed error messages.\"\n                )\n\n\nclass ConcurrentBenchmarkRunner(BenchmarkRunner):\n    def __init__(\n        self,\n        api_url: str,\n        model_uid: str,\n        input_requests: List[Tuple[str, int, int]],\n        stream: bool,\n        concurrency: int,\n        api_key: Optional[str] = None,\n        print_error: bool = False,\n    ):\n        super().__init__(\n            api_url,\n            model_uid,\n            input_requests,\n            stream,\n            api_key,\n            print_error,\n        )\n        self.concurrency = concurrency\n        self.left = len(input_requests)\n\n    async def worker(self):\n        pass\n"
  },
  {
    "path": "benchmark/benchmark_serving.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport argparse\nimport asyncio\nimport logging\nimport random\nfrom typing import List, Tuple, Optional\n\nimport numpy as np\n\nfrom utils import sample_requests, get_tokenizer\nfrom benchmark_runner import ConcurrentBenchmarkRunner\n\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\n\nclass ServingBenchmarkRunner(ConcurrentBenchmarkRunner):\n    def __init__(\n        self,\n        api_url: str,\n        model_uid: str,\n        input_requests: List[Tuple[str, int, int]],\n        stream: bool,\n        concurrency: int,\n        request_rate: float,\n        api_key: Optional[str] = None,\n        print_error: bool = False,\n    ):\n        super().__init__(\n            api_url,\n            model_uid,\n            input_requests,\n            stream,\n            concurrency,\n            api_key,\n            print_error,\n        )\n        self.request_rate = request_rate\n        self.queue = None  # delay the creation of the queue\n\n    async def _run(self):\n        tasks = []\n\n        for _ in range(self.concurrency):\n            tasks.append(asyncio.create_task(self.worker()))\n\n        await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)\n\n    async def warm_up(self, num_requests: int = 5):\n        if self.queue is None:\n            self.queue = asyncio.Queue(len(self.input_requests))\n\n        logger.info(f\"Enqueuing {len(self.input_requests)} requests.\")\n        for req in iter(self.input_requests):\n            await self.queue.put(req)\n        await super().warm_up(num_requests)\n\n    async def worker(self):\n        \"\"\"\n        wait request dispatch by run(), and then send_request.\n        When all request is done, most worker will hang on self.queue,\n        but at least one worker will exit\"\"\"\n        while self.left > 0:\n            request = await self.queue.get()\n            await self.send_request(request)\n            self.left -= 1\n            print(\"\\rdone_request, left %d    \" % (self.left), end=\"\")\n\n            if self.request_rate != float(\"inf\"):\n                # If the request rate is infinity, then we don't need to wait.\n                # Sample the request interval from the exponential distribution.\n                interval = np.random.exponential(1.0 / self.request_rate)\n                # The next request will be sent after the interval.\n                await asyncio.sleep(interval)\n        print(\"\")\n\n\ndef main(args: argparse.Namespace):\n    if args.concurrency > args.num_prompts:\n        print(\"Fix concurrency with num_prompts %d\" % (args.num_prompts))\n        args.concurrency = args.num_prompts\n    print(args)\n\n    random.seed(args.seed)\n    np.random.seed(args.seed)\n\n    api_url = f\"http://{args.host}:{args.port}/v1/chat/completions\"\n    model_uid = args.model_uid\n\n    logger.info(\"Preparing for benchmark.\")\n    tokenizer = get_tokenizer(args.tokenizer, trust_remote_code=args.trust_remote_code)\n    input_requests = sample_requests(\n        args.dataset,\n        args.num_prompts,\n        tokenizer,\n        prompt_len_limit=args.prompt_len_limit,\n    )\n\n    logger.info(\"Benchmark starts.\")\n\n    benchmark = ServingBenchmarkRunner(\n        api_url,\n        model_uid,\n        input_requests,\n        args.stream,\n        request_rate=args.request_rate,\n        concurrency=args.concurrency,\n        api_key=args.api_key,\n        print_error=args.print_error,\n    )\n    asyncio.run(benchmark.run())\n\n    benchmark.print_stats()\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"Benchmark the online serving throughput.\"\n    )\n    parser.add_argument(\"--host\", type=str, default=\"localhost\")\n    parser.add_argument(\"--port\", type=int, default=9997)\n    parser.add_argument(\n        \"--dataset\", type=str, required=True, help=\"Path to the dataset.\"\n    )\n    parser.add_argument(\n        \"--tokenizer\", type=str, required=True, help=\"Name or path of the tokenizer.\"\n    )\n    parser.add_argument(\n        \"--num-prompts\", type=int, default=100, help=\"Number of prompts to process.\"\n    )\n    parser.add_argument(\n        \"--prompt-len-limit\", type=int, default=1024, help=\"Prompt length limitation.\"\n    )\n    parser.add_argument(\n        \"--api-key\",\n        type=str,\n        default=None,\n        help=\"Authorization api key\",\n    )\n    parser.add_argument(\n        \"--concurrency\",\n        \"-c\",\n        type=int,\n        default=100,\n        help=\"Set the concurrency of request to send\",\n    )\n    parser.add_argument(\n        \"--request-rate\",\n        type=float,\n        default=float(\"inf\"),\n        help=\"Number of requests per second. If this is inf, \"\n        \"then all the requests are sent at time 0. \"\n        \"Otherwise, we use Poisson process to synthesize \"\n        \"the request arrival times.\",\n    )\n    parser.add_argument(\"--seed\", type=int, default=0)\n    parser.add_argument(\n        \"--trust-remote-code\",\n        action=\"store_true\",\n        help=\"Trust remote code from huggingface.\",\n    )\n    parser.add_argument(\"--model-uid\", type=str, help=\"Xinference model UID.\")\n    parser.add_argument(\n        \"--stream\", action=\"store_true\", help=\"Enable streaming responses.\"\n    )\n    parser.add_argument(\n        \"--print-error\",\n        action=\"store_true\",\n        help=\"Print detailed error messages if any errors encountered.\"\n    )\n    args = parser.parse_args()\n    main(args)\n"
  },
  {
    "path": "benchmark/utils.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport logging\nimport random\nfrom typing import TYPE_CHECKING, List, Tuple\n\nfrom transformers import AutoTokenizer, PreTrainedTokenizerFast\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\n\nif TYPE_CHECKING:\n    from transformers import PreTrainedTokenizerBase\n\n# A fast LLaMA tokenizer with the pre-processed `tokenizer.json` file.\n_FAST_LLAMA_TOKENIZER = \"hf-internal-testing/llama-tokenizer\"\n\n\ndef get_tokenizer(\n    tokenizer_name: str,\n    *args,\n    tokenizer_mode: str = \"auto\",\n    trust_remote_code: bool = False,\n    **kwargs,\n) -> \"PreTrainedTokenizerBase\":\n    \"\"\"Gets a tokenizer for the given model name via Huggingface.\"\"\"\n    if tokenizer_mode == \"slow\":\n        if kwargs.get(\"use_fast\", False):\n            raise ValueError(\"Cannot use the fast tokenizer in slow tokenizer mode.\")\n        kwargs[\"use_fast\"] = False\n\n    if (\n        \"llama\" in tokenizer_name.lower()\n        and kwargs.get(\"use_fast\", True)\n        and tokenizer_name != _FAST_LLAMA_TOKENIZER\n    ):\n        logger.info(\n            \"For some LLaMA-based models, initializing the fast tokenizer may \"\n            \"take a long time. To eliminate the initialization time, consider \"\n            f\"using '{_FAST_LLAMA_TOKENIZER}' instead of the original \"\n            \"tokenizer.\"\n        )\n    try:\n        tokenizer = AutoTokenizer.from_pretrained(\n            tokenizer_name, *args, trust_remote_code=trust_remote_code, **kwargs\n        )\n    except TypeError as e:\n        # The LLaMA tokenizer causes a protobuf error in some environments.\n        err_msg = (\n            \"Failed to load the tokenizer. If you are using a LLaMA-based \"\n            f\"model, use '{_FAST_LLAMA_TOKENIZER}' instead of the original \"\n            \"tokenizer.\"\n        )\n        raise RuntimeError(err_msg) from e\n    except ValueError as e:\n        # If the error pertains to the tokenizer class not existing or not\n        # currently being imported, suggest using the --trust-remote-code flag.\n        if not trust_remote_code and (\n            \"does not exist or is not currently imported.\" in str(e)\n            or \"requires you to execute the tokenizer file\" in str(e)\n        ):\n            err_msg = (\n                \"Failed to load the tokenizer. If the tokenizer is a custom \"\n                \"tokenizer not yet available in the HuggingFace transformers \"\n                \"library, consider setting `trust_remote_code=True` in LLM \"\n                \"or using the `--trust-remote-code` flag in the CLI.\"\n            )\n            raise RuntimeError(err_msg) from e\n        else:\n            raise e\n\n    if not isinstance(tokenizer, PreTrainedTokenizerFast):\n        logger.warning(\n            \"Using a slow tokenizer. This might cause a significant \"\n            \"slowdown. Consider using a fast tokenizer instead.\"\n        )\n    return tokenizer\n\n\ndef sample_requests(\n    dataset_path: str,\n    num_requests: int,\n    tokenizer: \"PreTrainedTokenizerBase\",\n    prompt_len_limit: int = 1024,\n) -> List[Tuple[str, int, int]]:\n    # Load the dataset.\n    with open(dataset_path) as f:\n        dataset = json.load(f)\n    # Filter out the conversations with less than 2 turns.\n    dataset = [data for data in dataset if len(data[\"conversations\"]) >= 2]\n    # Only keep the first two turns of each conversation.\n    dataset = [\n        (data[\"conversations\"][0][\"value\"], data[\"conversations\"][1][\"value\"])\n        for data in dataset\n    ]\n\n    # Tokenize the prompts and completions.\n    prompts = [prompt for prompt, _ in dataset]\n    prompt_token_ids = tokenizer(prompts).input_ids\n    completions = [completion for _, completion in dataset]\n    completion_token_ids = tokenizer(completions).input_ids\n    tokenized_dataset = []\n    for i in range(len(dataset)):\n        output_len = len(completion_token_ids[i])\n        tokenized_dataset.append((prompts[i], prompt_token_ids[i], output_len))\n\n    # Filter out too long sequences.\n    filtered_dataset: List[Tuple[str, int, int]] = []\n    for prompt, prompt_token_ids, output_len in tokenized_dataset:\n        prompt_len = len(prompt_token_ids)\n        if prompt_len < 4 or output_len < 4:\n            # Prune too short sequences.\n            # This is because TGI causes errors when the input or output length\n            # is too short.\n            continue\n        if (\n            prompt_len > prompt_len_limit\n            or prompt_len + output_len > prompt_len_limit * 2\n        ):\n            # Prune too long sequences.\n            continue\n        filtered_dataset.append((prompt, prompt_len, output_len))\n\n    # Sample the requests.\n    sampled_requests = random.sample(filtered_dataset, num_requests)\n    return sampled_requests\n\n\ndef generate_sorting_prompts(\n    num_prompts: int,\n    context_length: int,\n    prompt_len_limit: int,\n    tokenizer: \"PreTrainedTokenizerBase\",\n) -> List[Tuple[str, int, int]]:\n    prompts = []\n    for i in range(0, num_prompts):\n        random_nums = []\n        _prompt_len = 0\n        while True:\n            r_str = \"%s\" % random.randint(0, 99)\n            r_len = len(r_str) + 1\n            if r_len + _prompt_len > prompt_len_limit:\n                break\n            random_nums.append(r_str)\n            _prompt_len += r_len\n        prompt = \"Sort the numbers:\" + \",\".join(random_nums)\n        prompts.append(prompt)\n    prompt_token_ids = tokenizer(prompts).input_ids\n    dataset = []\n    for i in range(0, len(prompts)):\n        prompt_len = len(prompt_token_ids[i])\n        dataset.append((prompts[i], prompt_len, context_length - prompt_len))\n    return dataset\n"
  },
  {
    "path": "doc/Makefile",
    "content": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the environment for the first two.\nSPHINXOPTS    ?=\nSPHINXBUILD   ?= sphinx-build\nSPHINXINTL    ?= sphinx-intl\nSOURCEDIR     = source\nBUILDDIR      = build\n\n# the i18n builder cannot share the environment and doctrees with the others\nI18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SOURCEDIR)\nI18NSPHINXLANGS = -l zh_CN\n\n# Put it first so that \"make\" without argument is like \"make help\".\nhelp:\n\t@$(SPHINXBUILD) -M help \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n\n.PHONY: help Makefile html_zh_cn html_ja_jp gettext\n\nhtml_zh_cn:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) -t zh_cn -D language='zh_CN' \"$(SOURCEDIR)\" $(BUILDDIR)/html_zh_cn\n\ngettext:\n\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale\n\t$(SPHINXINTL) update -p $(BUILDDIR)/locale $(I18NSPHINXLANGS)\n\tpython $(SOURCEDIR)/norm_zh.py\n\n# Catch-all target: route all unknown targets to Sphinx using the new\n# \"make mode\" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).\n%: Makefile\n\t@$(SPHINXBUILD) -M $@ \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)"
  },
  {
    "path": "doc/source/_static/switcher.json",
    "content": "[\n  {\n    \"name\": \"简体中文(Chinese)\",\n    \"version\": \"zh-cn\",\n    \"url\": \"https://inference.readthedocs.io/zh-cn/latest/\"\n  },\n  {\n    \"name\": \"English\",\n    \"version\": \"en\",\n    \"url\": \"https://inference.readthedocs.io/en/latest/\",\n    \"preferred\": true\n  }\n]"
  },
  {
    "path": "doc/source/conf.py",
    "content": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common options. For a full\n# list see the documentation:\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\n\n# -- Path setup --------------------------------------------------------------\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#\nimport os\n# import sys\n# sys.path.insert(0, os.path.abspath('.'))\n\n\n# -- Project information -----------------------------------------------------\n\nproject = 'Xinference'\ncopyright = '2025, Xorbits Inc.'\nauthor = 'xorbitsai'\n\n\n# -- General configuration ---------------------------------------------------\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    \"sphinx.ext.mathjax\",\n    \"sphinx.ext.ifconfig\",\n    \"sphinx.ext.intersphinx\",\n    \"sphinx.ext.viewcode\",\n    \"sphinx.ext.githubpages\",\n    \"sphinx.ext.autosummary\",\n    \"sphinx.ext.napoleon\",\n    \"sphinx_tabs.tabs\",\n    \"sphinx_design\",\n    \"IPython.sphinxext.ipython_directive\",\n    \"IPython.sphinxext.ipython_console_highlighting\",\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This pattern also affects html_static_path and html_extra_path.\nexclude_patterns = []\n\n# i18n\nlocale_dirs = [\"locale/\"]  # path is example but recommended.\ngettext_compact = False  # optional\n\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_theme = 'pydata_sphinx_theme'\nhtml_title = \"Xinference\"\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# Define the json_url for our version switcher.\nversion_match = os.environ.get(\"READTHEDOCS_LANGUAGE\")\njson_url = \"https://inference.readthedocs.io/en/latest/_static/switcher.json\"\nif not version_match:\n    version_match = 'en'\n\nhtml_theme_options = {\n    \"show_toc_level\": 2,\n    \"header_links_before_dropdown\": 7,\n    \"icon_links\": [\n        {\n            \"name\": \"GitHub\",\n            \"url\": \"https://github.com/xorbitsai/inference\",\n            \"icon\": \"fa-brands fa-github\",\n            \"type\": \"fontawesome\",\n        },\n    ],\n    \"navbar_align\": \"content\",  # [left, content, right] For testing that the navbar items align properly\n    \"navbar_start\": [\"navbar-logo\", \"version-switcher\"],\n    \"navbar_center\": [\"navbar-nav\"],\n    \"switcher\": {\n        \"json_url\": json_url,\n        \"version_match\": version_match,\n    },\n}\n\n\nif version_match != 'zh-cn':\n    html_theme_options['icon_links'].extend([{\n        \"name\": \"Discord\",\n        \"url\": \"https://discord.gg/Xw9tszSkr5\",\n        \"icon\": \"fa-brands fa-discord\",\n        \"type\": \"fontawesome\",\n    },\n    {\n        \"name\": \"Twitter\",\n        \"url\": \"https://twitter.com/xorbitsio\",\n        \"icon\": \"fa-brands fa-twitter\",\n        \"type\": \"fontawesome\",\n    }])\n    html_theme_options[\"external_links\"] = [\n        {\"name\": \"Official Site\", \"url\": \"https://xinference.io\"},\n    ]\n    html_theme_options[\"header_links_before_dropdown\"] = 6\nelse:\n    html_theme_options['icon_links'].extend([{\n        \"name\": \"WeChat\",\n        \"url\": \"https://xinference.cn/images/WeCom.jpg\",\n        \"icon\": \"fa-brands fa-weixin\",\n        \"type\": \"fontawesome\",\n    },\n    {\n        \"name\": \"Zhihu\",\n        \"url\": \"https://zhihu.com/org/xorbits\",\n        \"icon\": \"fa-brands fa-zhihu\",\n        \"type\": \"fontawesome\",\n    }])\n    html_theme_options[\"external_links\"] = [\n        {\"name\": \"产品官网\", \"url\": \"https://xinference.cn\"},\n    ]\n\nhtml_favicon = \"_static/favicon.svg\"\n"
  },
  {
    "path": "doc/source/development/contributing_codebase.rst",
    "content": "=============================\nContributing to the code base\n=============================\n\n.. contents:: Table of contents:\n   :local:\n\nCode standards\n--------------\n\nWriting good code is not just about what you write. It is also about *how* you write it.\nDuring Continuous Integration testing, several tools will be run to check your code for stylistic errors.\nGood style is a requirement for submitting code to Xinference.\n\nIn addition, it is important that we do not make sudden changes to the code that\ncould have the potential to break a lot of user code as a result. Therefore\nwe need it to be as backwards compatible as possible to avoid mass breakages.\n\nAutofixing formatting errors\n----------------------------\n\nMoreover, Continuous Integration will run code formatting checks\nlike ``black``, ``flake8``, ``isort``, and others using `pre-commit hooks <https://pre-commit.com/>`_\nAny warnings generated by these checks will cause the Continuous Integration to fail. Therefore,\nit is advisable to run the check yourself before submitting code. This\ncan be done by installing ``pre-commit``::\n\n    pip install pre-commit\n\nand then running::\n\n    pre-commit install\n\nfrom the root of the Xinference repository. This setup ensures that all styling checks are\nautomatically executed each time you commit changes without your needing to run each one manually.\nIn addition, using ``pre-commit`` will also allow you to more easily\nremain up-to-date with our code checks as they change.\n\nNote that if needed, you can skip these checks with ``git commit --no-verify``.\n\nIf you don't want to use ``pre-commit`` as part of your workflow, you can still use it\nto run its checks with::\n\n    pre-commit run --files <files you have modified>\n\nwithout needing to have done ``pre-commit install`` beforehand.\n\nIf you want to run checks on all recently committed files on upstream/main you can use::\n\n    pre-commit run --from-ref=upstream/main --to-ref=HEAD --all-files\n\nwithout needing to have done ``pre-commit install`` beforehand.\n\n.. note::\n\n    You may consider periodically running ``pre-commit gc`` to clean up repos\n    which are no longer used.\n\n.. note::\n\n    If you have conflicting installations of ``virtualenv``, if could lead to\n    errors - refer to `here <https://github.com/pypa/virtualenv/issues/1875>`_.\n\n    Also, due to a `bug in virtualenv <https://github.com/pypa/virtualenv/issues/1986>`_,\n    you may run into issues if you're using conda. To solve this, you can downgrade\n    ``virtualenv`` to version ``20.0.33``.\n\nBackwards compatibility\n-----------------------\n\nPlease try to maintain backward compatibility. If you think breakage is necessary,\nclearly state why as part of the pull request. Also, be careful when changing method\nsignatures and add deprecation warnings where needed. Also, add the deprecated sphinx\ndirective to the deprecated functions or methods.\n\nYou'll also need to\n\n1. Write a new test that asserts a warning is issued when calling with the deprecated argument\n2. Update all of Xinference existing tests and code to use the new argument\n\nType hints\n----------\n\nXinference strongly encourages the use of :pep:`484` style type hints. New development should\ncontain type hints and pull requests to annotate existing code are accepted as well!\n\nTest-driven development\n-----------------------\n\nXinference is serious about testing and strongly encourages contributors to embrace\n`test-driven development (TDD) <https://en.wikipedia.org/wiki/Test-driven_development>`_.\nThis development process \"relies on the repetition of a very short development cycle:\nfirst the developer writes an (initially failing) automated test case that defines a desired\nimprovement or new function, then produces the minimum amount of code to pass that test.\"\nSo, before actually writing any code, you should write your tests. Often the test can be\ntaken from the original GitHub issue. However, it is always worth considering additional\nuse cases and writing corresponding tests.\n\nAdding tests is frequently requested after code is pushed to Xinference. Thus,\nit is worth getting in the habit of writing tests ahead of time so this is never an issue."
  },
  {
    "path": "doc/source/development/contributing_environment.rst",
    "content": "==================================\nCreating a development environment\n==================================\n\n.. contents:: Table of contents:\n   :local:\n\nBefore proceeding with any code modifications, it's essential to set up the necessary environment for Xinference development,\nwhich includes familiarizing yourself with Git usage, establishing an isolated environment, installing Xinference, and compiling the frontend.\n\nGetting started with Git\n-------------------------\n\nNow that you have identified an issue you wish to resolve, an enhancement to incorporate, or documentation to enhance,\nit's crucial to acquaint yourself with GitHub and the Xinference codebase.\n\nTo the new user, working with Git is one of the more intimidating aspects of contributing to Xinference.\nIt can very quickly become overwhelming, but sticking to the guidelines below will help simplify the process \nand minimize potential issues. As always, if you are having difficulties please\nfeel free to ask for help.\n\nThe code is hosted on `GitHub <https://github.com/xorbitsai/inference>`_. To\ncontribute you will need to sign up for a `free GitHub account\n<https://github.com/signup/free>`_. We use `Git <https://git-scm.com/>`_ for\nversion control to allow many people to work together on the project.\n\n`GitHub has instructions <https://help.github.com/set-up-git-redirect>`__ for installing git,\nsetting up your SSH key, and configuring git. All these steps need to be completed before\nyou can work seamlessly between your local repository and GitHub.\n\nSome great resources for learning Git:\n\n* `Official Git Documentation <https://git-scm.com/doc>`_\n* `Pro Git Book <https://git-scm.com/book/en/v2>`_\n* `Git Tutorial by Atlassian <https://www.atlassian.com/git/tutorials>`_\n* `Git - Concise Guide <http://rogerdudler.github.io/git-guide/index.zh.html>`_\n\n.. note::\n   If the speed of ``git clone`` is slow, you can use the following command\n   to add a proxy:\n\n   ::\n\n      export https_proxy=YourProxyAddress\n\nCreating an isolated environment\n--------------------------------\n\nBefore formally installing Xinference, it's recommended to create an isolated \nenvironment, using Conda recommended, for ease of subsequent operations.\n\n::\n\n   conda create --name xinf\n   conda activate xinf\n\n``xinf`` can be replaced with a custom Conda environment name.\n\nAfterward, you'll need to install Python and Node.js (npm) in the newly created\nConda environment. Here are the commands:\n\n::\n\n   conda install python=3.12\n   conda install nodejs\n\nInstall from source code\n------------------------\n\nBefore we begin, please make sure that you have cloned the repository. \nSuppose you clone the repository as ``inference`` directory,  ``cd`` to this directory\nwhere the ``setup.cfg`` and ``setup.py`` files are located, and run the following command:\n\n::\n\n   pip install -e .\n   xinference-local\n\nIf the commands run successfully, you can use Xinference normally. For\ndetailed usage instructions, refer to\n`using_xinference <https://inference.readthedocs.io/en/latest/getting_started/using_xinference.html>`__.\n\nIf errors occur or the process freezes during execution, the next step\nis to compile the frontend.\n\nFrontend Compilation\n--------------------\n\nNavigate to the ``inference/xinference/ui/web/ui`` directory. Then, execute the following command\nto clear the cache:\n\n::\n\n   npm cache clean\n\nIf the command fails to execute, you can try adding the ``--force`` option.\n\n.. note::\n   If the ``node_modules`` folder already exists in this directory,\n   it's recommended to manually delete it before cleaning the cache.\n\nNext, execute the following command in this directory to compile the\nfrontend:\n\n::\n\n   npm install\n   npm run build\n\nStill, if the first command fails to execute, you can try adding the ``--force`` option.\n\nAfter compiling the frontend, you can ``cd`` back to the directory\nwhere the ``setup.cfg`` and ``setup.py`` files are located,\nand install Xinference via ``pip install -e .``.\n"
  },
  {
    "path": "doc/source/development/index.rst",
    "content": ".. _development_index:\n\n===========\nDevelopment\n===========\n\n.. toctree::\n    :maxdepth: 2\n\n    contributing_environment\n    contributing_codebase\n    xinference_internals\n"
  },
  {
    "path": "doc/source/development/xinference_internals.rst",
    "content": "===========================\nThe internals of Xinference\n===========================\n\n.. contents:: Table of contents:\n   :local:\n\nOverview\n========\nXinference leverages `Xoscar <https://github.com/xorbitsai/xoscar>`_, an actor programming framework we designed,\nas its core component to manage machines, devices, and model inference processes. Each actor serves as a basic\nunit for model inference and various inference backends can be integrate into the actor, enabling us to support\nmultiple inference engines and hardware. These actors are hosted and scheduled within actor pools, which are\ndesigned to be asynchronous and non-blocking and function as resource pools.\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../_static/actor.svg\" style=\"background-color: transparent\", width=\"77%\">\n\n====\n\nBoth supervisor and worker are actor instances. Initially, an actor pool, serving as a resource pool, needs to be created\non each server; and each actor can utilize a CPU core or a GPU device. Each server has its own address (IP address or\nhostname), so actors on different computing nodes can communicate with each other through these addresses. See `Actor`_ for more information.\n\nRESTful API\n===========\nThe RESTful API is implemented using `FastAPI <https://github.com/tiangolo/fastapi>`_, as specified in\n`api/restful_api.py <https://github.com/xorbitsai/inference/tree/main/xinference/api/restful_api.py>`_.\n\n::\n\n  self._router.add_api_route(\"/status\", self.get_status, methods=[\"GET\"])\n\nThis is an example of the API ``/status``, it's corresponding function is ``get_status``. You can add connection\nbetween RESTful API and the backend function you want in `api/restful_api.py <https://github.com/xorbitsai/inference/tree/main/xinference/api/restful_api.py>`_.\n\nCommand Line\n============\nThe Command Line is implemented using `Click <https://click.palletsprojects.com/>`_, as specified in\n`deploy/cmdline.py <https://github.com/xorbitsai/inference/tree/main/xinference/deploy/cmdline.py>`_,\nallowing users to interact with the Xinference deployment features directly from the terminal.\n\nEntry Points\n------------\nTake the command-lines we implemented as examples:\n\n- ``xinference``: Provides commands for model management, including registering/unregistering models, listing all\n  registered/running models, and launching or terminating specific models.\n  It also features interactive commands like generate and chat for testing and interacting with deployed models in real-time.\n\n- ``xinference-local``: Starts a local Xinference service.\n\n- ``xinference-supervisor``: Initiates a supervisor process that manages and monitors worker actors within a distributed setup.\n\n- ``xinference-worker``: Starts a worker process that executes tasks assigned by the supervisor, utilizing available\n  computational resources effectively.\n\nEach command is equipped with ``options`` and ``flags`` to customize its behavior, such as specifying log levels,\nhost addresses, port numbers, and other relevant settings.\n\nPython projects define command-line console entry points in `setup.cfg` or `setup.py`.\n\n::\n\n  console_scripts =\n      xinference = xinference.deploy.cmdline:cli\n      xinference-local = xinference.deploy.cmdline:local\n      xinference-supervisor = xinference.deploy.cmdline:supervisor\n      xinference-worker = xinference.deploy.cmdline:worker\n\nThe command-line ``xinference`` can be referred to code in ``xinference.deploy.cmdline:cli``.\n\nClick\n-----\nWe use Click to implement a specific command-line:\n\n::\n\n  @click.option(\n        \"--host\",\n        \"-H\",\n        default=XINFERENCE_DEFAULT_DISTRIBUTED_HOST,\n        type=str,\n        help=\"Specify the host address for the supervisor.\",\n    )\n    @click.option(\n        \"--port\",\n        \"-p\",\n        default=XINFERENCE_DEFAULT_ENDPOINT_PORT,\n        type=int,\n        help=\"Specify the port number for the Xinference web ui and service.\",\n    )\n\nFor example, the ``xinference-local`` command allows you to define the host address and port.\n\nActor\n=====\nXinference is fundamentally based on `Xoscar <https://github.com/xorbitsai/xoscar>`_, our actor framework,\nwhich can manage computational resources and Python processes to support scalable and concurrent programming.\nThe following is a pseudocode demonstrating how our Worker Actor works, the actual Worker Actor is more complex than this.\n\n::\n\n  import xoscar as xo\n\n  class WorkerActor(xo.Actor):\n      def __init__(self, *args, **kwargs):\n          ...\n      async def launch_model(self, model_id, n_gpu, ...):\n          # launch an inference engine, use specific model class to load model checkpoints\n          ...\n      async def list_models(self):\n          # list models on this actor\n          ...\n      async def terminate_model(self, model_id):\n          # terminate the model\n          ...\n      async def __post_create__(self):\n          # called after the actor instance is created\n          ...\n      async def __pre_destroy__(self):\n          # called before the actor instance is destroyed\n          ...\n\nWe use the ``WorkerActor`` as an example to illustrate how we build the Xinference. Each actor class\nis a standard Python class that inherits from ``xoscar.Actor``. An instance of this class is a specific actor\nwithin the actor pool.\n\n- **Define Actor Actions**: Each actor needs to define certain actions or behaviors to accomplish specific tasks.\n  For instance, the model inference ``WorkerActor`` needs to launch the model (``launch_model``), list the models\n  in this actor (``list_models``), terminate a model (``terminate_model``). There are two special methods worth\n  noting. The ``__post_create__`` is invoked before the actor is created, allowing for necessary initializations.\n  The ``__pre_destroy__`` is called after the actor is destroyed, allowing for cleanup or finalization tasks.\n\n- **Reference Actor and Invoke Methods**: When an actor is created, it yields a reference variable so that other\n  actors can reference it. The actor reference can also be referenced with the address. Suppose the ``WorkerActor``\n  is created and the reference variable is ``worker_ref``,  the ``launch_model`` method of this actor class can\n  be invoked by calling ``worker_ref.launch_model()``.\n  Even if the actor's method is originally a synchronized method, when called with an actor reference, it will\n  become as an asynchronous method.\n\n- **Inference Engine**: The actor can manage the process, and the inference engine is also a process. In the launch\n  model part of the ``WorkerActor``, we can initialize different inference engines according to the user's need.\n  Therefore, Xinference can support multiple inference engines and can easily adapt to new inference engines in the\n  future.\n\nSee `Xoscar document <https://xoscar.dev/en/latest/getting_started/llm-inference.html>`_ for more actor use cases.\n\nAsynchronous Programming\n========================\n\nBoth Xinference and Xoscar highly utilize asynchronous programming of ``asyncio``.\nAsynchronous programming is a programming paradigm that does not block.\nInstead, requests and function calls are issued and executed in the background\nand results are returned in the future. This enables us to perform\nactivities concurrently.\n\nIf you're not familiar with Pythons's ``asyncio``, you can see more tutorials for help:\n\n  - `Python Asyncio Tutorial <https://bbc.github.io/cloudfit-public-docs/asyncio/asyncio-part-1.html>`__\n\n  - `Real Python's asyncio Tutorial <https://realpython.com/async-io-python/>`__\n\n  - `Python Official Documentation <https://docs.python.org/3/library/asyncio.html>`__\n\n\nModel\n=====\n\nXinference supports different types of models including large language models (LLMs), image models, audio models, embedding models, etc.\nAll models are implemented in `model/ <https://github.com/xorbitsai/inference/tree/main/xinference/model>`_.\n\nLLM\n---\n\nTake `model/llm/ <https://github.com/xorbitsai/inference/tree/main/xinference/model/llm>`_ for example, it focuses on\nthe management and instantiation of LLMs. It includes detailed implementations for loading, configuring,\nand deploying LLMs.\n\nWe support many backends such as GGML, PyTorch, and vLLM. Our generated content is compatible with the format of OpenAI, supporting features such as streaming output and returning chat completion format (for chat models only).\nTherefore, there is a lot of adaptation work to be done after the model generate content. These tasks are not difficult, but they do require some time. When writing this part of the code, please refer to the `OpenAI API documentation <https://platform.openai.com/docs/introduction>`_ and the documentation of various inference backends, and make the necessary adaptations.\n\nJSON\n----\n\nIn `model/llm/llm_family.json <https://github.com/xorbitsai/inference/blob/main/xinference/model/llm/llm_family.json>`_,\nwe utilize JSON files to manage the metadata of emerging open-source models. Adding a new model does not necessitate writing new code,\nit merely requires appending new metadata to the existing JSON file.\n\n::\n\n  {\n      \"model_name\": \"llama-2-chat\",\n      \"model_ability\": [\"chat\"],\n      \"model_specs\": [\n          {\n              \"model_format\": \"ggmlv3\",\n              \"model_size_in_billions\": 70,\n              \"quantization\": [\"q8_0\", ...],\n              \"model_id\": \"TheBloke/Llama-2-70B-Chat-GGML\",\n          },\n          ...\n      ],\n      \"prompt_style\": {\n          \"style_name\": \"LLAMA2\",\n          \"system_prompt\": \"<s>[INST] <<SYS>>\\nYou are a helpful AI assistant.\\n<</SYS>>\\n\\n\",\n          \"roles\": [\"[INST]\", \"[/INST]\"],\n          \"stop_token_ids\": [2],\n          \"stop\": [\"</s>\"]\n      }\n  }\n\nThis is an example of how to define the Llama-2 chat model. The ``model_specs`` define the information of the model, as one model family\nusually comes with various sizes, quantization methods, and file formats.\nFor instance, the ``model_format`` could be ``pytorch`` (using Hugging Face Transformers or vLLM as backend),\n``ggmlv3`` (a tensor library associated with llama.cpp), or ``gptq`` (a post-training quantization framework).\nThe ``model_id`` defines the repository of the model hub from which Xinference downloads the checkpoint files.\nFurthermore, due to distinct instruction-tuning processes, different model families have varying prompt styles.\nThe ``prompt_style`` in the JSON file specifies how to format prompts for this particular model.\nFor example, ``system_prompt`` and ``roles`` are used to specify the instructions and personality of the model.\n\nCode Walkthrough\n================\n\nThe main code is located in the `xinference/ <https://github.com/xorbitsai/inference/tree/main/xinference>`_:\n\n- `api/ <https://github.com/xorbitsai/inference/tree/main/xinference/api>`_: `restful_api.py <https://github.com/xorbitsai/inference/tree/main/xinference/api/restful_api.py>`_\n  is the core part that sets up and runs the RESTful APIs.\n  It integrates an authentication service (the specific code is located in `oauth2/ <https://github.com/xorbitsai/inference/tree/main/xinference/api/oauth2>`_),\n  as some or all endpointsrequire user authentication.\n\n- `client/ <https://github.com/xorbitsai/inference/tree/main/xinference/client>`_: This is the client of Xinference.\n\n  - `oscar/ <https://github.com/xorbitsai/inference/tree/main/xinference/client/oscar>`_ defines the Actor Client which acts as\n    a client interface for interacting with models deployed in a Xinference cluster.\n\n  - `restful/ <https://github.com/xorbitsai/inference/tree/main/xinference/client/restful>`_ implements a RESTful client for\n    interacting with a Xinference service.\n\n- `core/ <https://github.com/xorbitsai/inference/tree/main/xinference/core>`_: This is the core part of Xinference.\n\n  - `metrics.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/metrics.py>`_ and\n    `resource.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/resource.py>`_\n    defines a set of tools for collecting and reporting metrics and the status of node resources, including model throughput,\n    latency, the usage of CPU and GPU, memory usage, and more.\n\n  - `image_interface.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/image_interface.py>`_ and\n    `chat_interface.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/chat_interface.py>`_\n    implement `Gradio <https://github.com/gradio-app/gradio>`_ interfaces for image and chat models, respectively.\n    These interfaces allow users to interact with models through a Web UI, such as generating images or engaging in chat.\n    They build user interfaces using the gradio package and communicate with backend models through our RESTful APIs.\n\n  - `worker.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/worker.py>`_ and\n    `supervisor.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/supervisor.py>`_\n    respectively define the logic for worker actors and supervisor actor. Worker actors are responsible for carrying out specific\n    model computation tasks, while supervisor actors manage the lifecycle of worker nodes, schedule tasks, and monitor system states.\n\n  - `status_guard.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/status_guard.py>`_ implements a status monitor\n    to track the status of models (like creating, updating, terminating, etc.). It allows querying status information of model instances\n    and managing these statuses based on the model's UID.\n\n  - `cache_tracker.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/cache_tracker.py>`_ defines a cache tracker for\n    recording and managing cache status and information of model versions. It supports recording cache locations and statuses of model\n    versions and querying model version information based on model names.\n\n  - `event.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/event.py>`_ defines an event collector for gathering and\n    reporting various runtime events of models, such as information, warnings, and errors.\n    `model.py <https://github.com/xorbitsai/inference/tree/main/xinference/core/model.py>`_ defines a Model Actor, the core component for\n    direct model interactions. The Model Actor is responsible for executing model inference requests, handling input and output data streams,\n    and supports various types of model operations.\n\n- `deploy/ <https://github.com/xorbitsai/inference/tree/main/xinference/deploy>`_: It provides a command-line interface (CLI) for interacting\n  with the Xinference framework, allowing users to perform operations by command line. See `Command Line`_ for more information.\n\n- `locale/ <https://github.com/xorbitsai/inference/tree/main/xinference/locale>`_: It supports multi-language localization. By simply adding\n  and updating JSON translation files, it becomes possible to support more languages, improving user experience.\n\n- `model/ <https://github.com/xorbitsai/inference/tree/main/xinference/model>`_: It provides a structure for model descriptions, creation,\n  and caching. See `Model`_ for more information.\n\n- `web/ui/ <https://github.com/xorbitsai/inference/tree/main/xinference/web/ui>`_: The js code of the frontend (Web UI).\n"
  },
  {
    "path": "doc/source/examples/ai_podcast.rst",
    "content": ".. _examples_ai_podcast:\n\n======================\nExample: AI Podcast 🎙\n======================\n\n**Description**:\n\n🎙️AI Podcast - Voice Conversations with Multiple Agents on M2 Max 💻\n\n**Support Language** :\n\nEnglish (AI_Podcast.py)\n\nChinese (AI_Podcast_ZH.py)\n\n**Used Technology (EN version)** :\n\n    @ `OpenAI <https://twitter.com/OpenAI>`_ 's `whisper <https://pypi.org/project/openai-whisper/>`_\n\n    @ `ggerganov <https://twitter.com/ggerganov>`_ 's `ggml <https://github.com/ggerganov/ggml>`_\n\n    @ `WizardLM_AI <https://twitter.com/WizardLM_AI>`_ 's `wizardlm v1.0 <https://huggingface.co/WizardLM>`_\n\n    @ `lmsysorg <https://twitter.com/lmsysorg>`_ 's `vicuna v1.3 <https://huggingface.co/lmsys/vicuna-7b-v1.3>`_\n\n    @ `Xinference <https://github.com/xorbitsai/inference>`_ as a launcher\n\n**Detailed Explanation on the Demo Functionality** :\n\n1. Generate the Wizardlm Model and Vicuna Model when the program is launching with Xorbits Inference.\n   Initiate the Chatroom by giving the two chatbot their names and telling them that there is a human user\n   called \"username\", where \"username\" is given by user's input. Initialize a empty chat history for the chatroom.\n\n2. Use Audio device to store recording into file, and transcribe the file using OpenAI's Whisper to receive a human readable text as string.\n\n3. Based on the input message string, determine which agents the user want to talk to. Call the target agents and\n   parse in the input string and chat history for the model to generate.\n\n4. When the responses are ready, use Macos's \"Say\" Command to produce audio through speaker. Each agents have their\n   own voice while speaking.\n\n5. Store the user input and the agent response into chat history, and recursively looping the program until user\n   explicitly says words like \"see you\" in their responses.\n\n**Highlight Features with Xinference** :\n\n1. With Xinference's distributed system, we can easily deploy two different models in the same session and in the\n   same \"chatroom\". With enough resources, the framework can deploy any amount of models you like at the same time.\n\n2. With Xinference, you can deploy the model easily by just adding a few lines of code.\n   For examples, for launching the vicuna model in the demo, just by::\n\n     args = parser.parse_args()\n     endpoint = args.endpoint\n     client = Client(endpoint)\n\n     model_a = \"vicuna-v1.3\"\n     model_a_uid = client.launch_model(\n         model_name=model_a,\n         model_format=\"ggmlv3\",\n         model_size_in_billions=7,\n         quantization=\"q4_0\",\n         n_ctx=2048,\n     )\n     model_a_ref = client.get_model(model_a_uid)\n\n   Then, the Xinference client will handle \"target model downloading and caching\", \"set up environment and process\n   for the model\", and \"run the service at selected endpoint. \" You are now ready to play with your llm model.\n\n**Original Demo Video** :\n\n    * `🎙️AI Podcast - Voice Conversations with Multiple Agents on M2 Max💻🔥🤖 <https://twitter.com/yichaocheng/status/1679129417778442240>`_\n\n**Source Code** :\n\n    * `AI_Podcast <https://github.com/xorbitsai/inference/blob/main/examples/AI_podcast.py>`_ (English Version)\n\n    * `AI_Podcast_ZH <https://github.com/xorbitsai/inference/blob/main/examples/AI_podcast_ZH.py>`_ (Chinese Version)"
  },
  {
    "path": "doc/source/examples/chatbot.rst",
    "content": ".. _examples_chatbot:\n\n========================\nExample: CLI chatbot 🤖️\n========================\n\n**Description**:\n\nDemonstrate how to interact with Xinference to play with LLM chat functionality with an AI agent in command line💻\n\n**Used Technology**:\n\n    @ `ggerganov <https://twitter.com/ggerganov>`_ 's `ggml <https://github.com/ggerganov/ggml>`_\n\n    @ `Xinference <https://github.com/xorbitsai/inference>`_ as a launcher\n\n    @ All LLaMA and Chatglm models supported by `Xorbitsio inference <https://github.com/xorbitsai/inference>`_\n\n**Detailed Explanation on the Demo Functionality** :\n\n1. Take the user command line input in the terminal and grab the required parameters for model launching.\n\n2. Launch the Xinference frameworks and automatically deploy the model user demanded into the cluster.\n\n3. Initialize an empty chat history to store all the context in the chatroom.\n\n4. Recursively ask for user's input as prompt and let the model to generate response based on the prompt and the\n   chat history. Show the Output of the response in the terminal.\n\n5. Store the user's input and agent's response into the chat history as context for the upcoming rounds.\n\n**Source Code** :\n    * `chat <https://github.com/RayJi01/Xprobe_inference/blob/main/examples/chat.py>`_"
  },
  {
    "path": "doc/source/examples/gradio_chatinterface.rst",
    "content": ".. _examples_gradio_chatinterface:\n\n===============================\nExample: Gradio ChatInterface🤗\n===============================\n\n**Description**:\n\nThis example showcases how to build a chatbot with 120 lines of code with Gradio ChatInterface and Xinference local LLM\n\n**Used Technology**:\n\n    @ `Xinference <https://github.com/xorbitsai/inference>`_ as a LLM model hosting service\n\n    @ `Gradio <https://github.com/gradio-app/gradio>`_ as a web interface for the chatbot\n\n**Detailed Explanation on the Demo Functionality** :\n\n* Parse user-provided command line arguments to capture essential model parameters such as model name, size, format, and quantization.\n\n* Establish a connection to the Xinference framework and deploy the specified model, ensuring it's ready for real-time interactions.\n\n* Implement helper functions (flatten and to_chat) to efficiently handle and store chat interactions, ensuring the model has context for generating relevant responses.\n\n* Set up an interactive chat interface using Gradio, allowing users to communicate with the model in a user-friendly environment.\n\n* Activate the Gradio web interface, enabling users to start their chat sessions and receive model-generated responses based on their queries.\n\n**Source Code** :\n    * `Gradio ChatInterface <https://github.com/xorbitsai/inference/blob/main/examples/gradio_chatinterface.py>`_"
  },
  {
    "path": "doc/source/examples/index.rst",
    "content": ".. _examples_index:\n\n========\nExamples\n========\n\n.. toctree::\n   :maxdepth: 2\n   :hidden:\n\n   ai_podcast\n   chatbot\n   gradio_chatinterface\n   pdf_chatbot\n   langchain_streamlit_doc_chat\n\nHere you can find examples and resources to learn about how to use Xinference.\n\nDemos\n=====\n\nEnd-to-end applications of using Xinference:\n\n* `Voice Conversations with AI Agents on M2 Max <ai_podcast.html>`_\n\n* `Interacting with LLM Models: A Command-Line Example <chatbot.html>`_\n\n* `Interacting with LLM Models: A Gradio ChatInterface Example <gradio_chatinterface.html>`_\n\n* `PDF Chatbot with Local LLM and Embeddings <pdf_chatbot.html>`_\n\n* `Local Doc Conversations with LangChain and Streamlit <langchain_streamlit_doc_chat.html>`_\n\nIf you come across other examples in your own workflows we encourage you to contribute a `PR <https://github.com/xorbitsai/inference/pulls>`_!\n\n\nTutorials\n=========\n\nThe following tutorials cover the basics of using Xinference in different scenarios:\n\n* `[Notebook] Question-answering(QA) Application with Xinference, Milvus and LangChain <https://github.com/RayJi01/Xprobe_inference/blob/main/examples/LangChain_QA.ipynb>`_\n\n* `Using Xinference local LLMs within LlamaIndex <https://docs.llamaindex.ai/en/stable/examples/llm/xinference_local_deployment.html>`_\n\n* `[Chinese] 如何让 Chatbox 接入开源大模型，实现免费聊天 <https://zhuanlan.zhihu.com/p/655765551>`_\n\n* `[Chinese] 摆脱 OpenAI 依赖，8 分钟教你用开源生态构建全栈 AI 应用 <https://mp.weixin.qq.com/s/cXBC0dikldNiGwOwPuJfUQ>`_\n\n* `[Chinese] 使用全套开源工具构建 LLM 应用实战： 在 Dify 调用 Baichuan 开源模型能力 <https://mp.weixin.qq.com/s/JWYWyJxS3ludMpMDZKw_Dw>`_\n\n\nThird-Party Library Integrations\n================================\n\nXinference is designed to seamlessly integrate and deploy open-sourced AI models, so we want to incorporate support for mainstream toolkits\nin the AI landscape. Xinference can be used with the following third-party libraries:\n\n* LangChain `Text Embedding Models <https://python.langchain.com/docs/integrations/text_embedding/xinference>`_ and `LLMs <https://python.langchain.com/docs/integrations/llms/xinference>`_\n\n* `LlamaIndex Xinference LLM <https://docs.llamaindex.ai/en/stable/api_reference/llms/xinference.html>`_\n"
  },
  {
    "path": "doc/source/examples/langchain_streamlit_doc_chat.rst",
    "content": ".. _examples_langchain_streamlit_doc_chat:\n\n=======================================\nExample: LangChain Streamlit Doc Chat📄\n=======================================\n\n**Description**:\n\nThis Streamlit-based application demonstrates a AI chatbot powered by local LLM and embedding models\n\n**Used Technology**:\n\n    @ `Xinference <https://github.com/xorbitsai/inference>`_: as the LLM and embedding model hosting service\n\n    @ `LangChain <https://github.com/run-llama/llama_index>`_: orchestrates the entire document processing and query answering pipeline\n\n    @ `Streamlit <https://streamlit.io/>`_: for interactive user interface\n\n**Detailed Explanation on the Demo Functionality** :\n\n* Streamlit UI for uploading text files, enhancing user interaction.\n\n* Texts are split into chunks and embedded using Xinference for efficient processing.\n\n* Executes similarity searches on embedded texts to pinpoint relevant sections for user queries.\n\n* Utilizes a structured prompt template for focused LLM interactions.\n\n* Xinference's LLM processes queries within the context of relevant document parts, providing accurate responses.\n\n* The system facilitates effective and context-sensitive document exploration, aiding users in information retrieval.\n\n**Source Code** :\n    * `LangChain Streamlit Doc Chat <https://github.com/xorbitsai/inference/blob/main/examples/LangChain_Streamlit_Doc_Chat.py>`_"
  },
  {
    "path": "doc/source/examples/pdf_chatbot.rst",
    "content": ".. _examples_pdf_chatbot:\n\n======================\nExample: PDF Chatbot📚\n======================\n\n**Description**:\n\nThis example showcases how to build a PDF chatbot with local LLM and Embedding models\n\n**Used Technology**:\n\n    @ `Xinference <https://github.com/xorbitsai/inference>`_ as a LLM model hosting service\n\n    @ `LlamaIndex <https://github.com/run-llama/llama_index>`_ for orchestrating the entire RAG pipeline \n\n    @ `Streamlit <https://streamlit.io/>`_ for interactive UI\n\n**Detailed Explanation on the Demo Functionality** :\n\n* Crafted a Dockerfile to simplify the process and ensure easy reproducibility.\n\n* Set up models with Xinference and expose two ports for accessing them.\n\n* Leverage Streamlit for seamless file uploads and interactive communication with the chat engine.\n\n* 5x faster doc embedding than OpenAI's API.\n\n* Leveraging the power of GGML to offload models to the GPU, ensuring swift acceleration. Less long waits for returns.\n\n**Source Code** :\n    * `PDF Chatbot <https://github.com/onesuper/PDF-Chatbot-Local-LLM-Embeddings>`_"
  },
  {
    "path": "doc/source/gen_docs.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport os\nimport sys\nfrom collections import defaultdict\n\nfrom jinja2 import Environment, FileSystemLoader\n\n# Mock engine libraries before importing xinference modules\ndef mock_engine_libraries():\n    \"\"\"Mock engine libraries to make them appear installed for documentation generation\"\"\"\n    from types import ModuleType\n    from importlib.machinery import ModuleSpec\n    \n    # Create mock vllm module\n    vllm_mock = ModuleType('vllm')\n    vllm_mock.__version__ = \"1.0.0\"  # Latest version for full feature support\n    vllm_mock.__spec__ = ModuleSpec('vllm', None)\n    vllm_mock.__file__ = \"mock_vllm.py\"\n    \n    # Create mock mlx module with core submodule\n\n    mlx_mock = ModuleType('mlx')\n    mlx_mock.__version__ = \"1.0.0\"\n    mlx_mock.__spec__ = ModuleSpec('mlx', None)\n    mlx_mock.__file__ = \"mock_mlx.py\"\n    \n    mlx_core_mock = ModuleType('mlx.core')\n    mlx_core_mock.__spec__ = ModuleSpec('mlx.core', None)\n    mlx_core_mock.__file__ = \"mock_mlx_core.py\"\n    # Add required attributes for xoscar serialization\n    mlx_core_mock.array = type('MockArray', (), {})\n    mlx_mock.core = mlx_core_mock\n    \n    # Create mock lmdeploy module  \n    lmdeploy_mock = ModuleType('lmdeploy')\n    lmdeploy_mock.__version__ = \"0.6.0\"\n    lmdeploy_mock.__spec__ = ModuleSpec('lmdeploy', None)\n    lmdeploy_mock.__file__ = \"mock_lmdeploy.py\"\n    \n    # Create mock sglang module\n    sglang_mock = ModuleType('sglang')\n    sglang_mock.__version__ = \"0.3.0\"\n    sglang_mock.__spec__ = ModuleSpec('sglang', None)\n    sglang_mock.__file__ = \"mock_sglang.py\"\n\n    # Create mock xllamacpp module with proper module spec for importlib.util.find_spec\n    import importlib.util\n    import importlib.machinery\n\n    xllamacpp_mock = ModuleType('xllamacpp')\n    xllamacpp_mock.__version__ = \"1.0.0\"\n\n    # Create a proper ModuleSpec that importlib.util.find_spec can find\n    xllamacpp_spec = importlib.machinery.ModuleSpec('xllamacpp', None)\n    xllamacpp_spec.origin = \"mock_xllamacpp.py\"\n    xllamacpp_mock.__spec__ = xllamacpp_spec\n    xllamacpp_mock.__file__ = \"mock_xllamacpp.py\"\n\n    # Create mock mlx_lm module\n    mlx_lm_mock = ModuleType('mlx_lm')\n    mlx_lm_mock.__version__ = \"1.0.0\"\n    mlx_lm_mock.__spec__ = ModuleSpec('mlx_lm', None)\n    mlx_lm_mock.__file__ = \"mock_mlx_lm.py\"\n\n    # Create mock mlx_vlm module\n    mlx_vlm_mock = ModuleType('mlx_vlm')\n    mlx_vlm_mock.__version__ = \"1.0.0\"\n    mlx_vlm_mock.__spec__ = ModuleSpec('mlx_vlm', None)\n    mlx_vlm_mock.__file__ = \"mock_mlx_vlm.py\"\n\n    # Mock these modules in sys.modules\n    sys.modules['vllm'] = vllm_mock\n    sys.modules['mlx'] = mlx_mock\n    sys.modules['mlx.core'] = mlx_core_mock\n    sys.modules['lmdeploy'] = lmdeploy_mock\n    sys.modules['sglang'] = sglang_mock\n    sys.modules['xllamacpp'] = xllamacpp_mock\n    sys.modules['mlx_lm'] = mlx_lm_mock\n    sys.modules['mlx_vlm'] = mlx_vlm_mock\n\n# Apply mocking before importing xinference modules\nmock_engine_libraries()\n\n# Mock platform checks BEFORE importing xinference modules\ndef mock_platform_checks():\n    \"\"\"Mock platform and hardware checks for documentation generation\"\"\"\n    # Import and mock engine checks without modifying system-wide platform settings\n    try:\n        # Mock vLLM platform checks\n        import xinference.model.llm.vllm.core as vllm_core\n        vllm_core.VLLMModel._is_linux = lambda: True\n        vllm_core.VLLMModel._has_cuda_device = lambda: True\n        vllm_core.VLLMChatModel._is_linux = lambda: True\n        vllm_core.VLLMChatModel._has_cuda_device = lambda: True\n        vllm_core.VLLMMultiModel._is_linux = lambda: True\n        vllm_core.VLLMMultiModel._has_cuda_device = lambda: True\n\n        # Mock SGLang platform checks if available\n        try:\n            import xinference.model.llm.sglang.core as sglang_core\n            sglang_core.SGLANGModel._is_linux = lambda: True\n            sglang_core.SGLANGModel._has_cuda_device = lambda: True\n            sglang_core.SGLANGChatModel._is_linux = lambda: True\n            sglang_core.SGLANGChatModel._has_cuda_device = lambda: True\n            sglang_core.SGLANGVisionModel._is_linux = lambda: True\n            sglang_core.SGLANGVisionModel._has_cuda_device = lambda: True\n        except ImportError:\n            pass\n\n        # Mock LMDEPLOY platform checks if available\n        try:\n            import xinference.model.llm.lmdeploy.core as lmdeploy_core\n            lmdeploy_core.LMDeployModel._is_linux = lambda: True\n            lmdeploy_core.LMDeployModel._has_cuda_device = lambda: True\n            lmdeploy_core.LMDeployChatModel._is_linux = lambda: True\n            lmdeploy_core.LMDeployChatModel._has_cuda_device = lambda: True\n        except ImportError:\n            pass\n\n        # Mock MLX engine platform checks by monkey-patching the imports within MLX module\n        try:\n            # First, let's monkey-patch sys and platform imports within the MLX module only\n            import xinference.model.llm.mlx.core as mlx_core\n\n            # Create mock objects that look like sys.platform and platform functions\n            class MockSys:\n                platform = \"darwin\"\n\n            class MockPlatform:\n                @staticmethod\n                def system():\n                    return \"Darwin\"\n\n                @staticmethod\n                def processor():\n                    return \"arm\"\n\n            # Store original references\n            original_mlx_match = mlx_core.MLXModel.match_json\n            original_mlx_chat_match = mlx_core.MLXChatModel.match_json\n            original_mlx_vision_match = mlx_core.MLXVisionModel.match_json\n\n            # Now create wrapper functions that replace sys and platform only during the platform check\n            def create_wrapped_match_json(original_match):\n                def wrapped_match_json(cls, llm_family, llm_spec, quantization):\n                    # Temporarily replace sys and platform in the MLX module\n                    import sys as original_sys\n                    import platform as original_platform\n\n                    # Replace sys and platform temporarily\n                    mlx_core.sys = MockSys()\n                    mlx_core.platform = MockPlatform()\n\n                    try:\n                        # Call the original match_json which will now see the mocked platform\n                        result = original_match.__func__(cls, llm_family, llm_spec, quantization)\n                        return result\n                    finally:\n                        # Restore original sys and platform\n                        mlx_core.sys = original_sys\n                        mlx_core.platform = original_platform\n\n                return classmethod(wrapped_match_json)\n\n            # Apply the wrapped match_json methods\n            mlx_core.MLXModel.match_json = create_wrapped_match_json(original_mlx_match)\n            mlx_core.MLXChatModel.match_json = create_wrapped_match_json(original_mlx_chat_match)\n            mlx_core.MLXVisionModel.match_json = create_wrapped_match_json(original_mlx_vision_match)\n\n        except ImportError:\n            pass\n\n    except Exception as e:\n        # If any mocking fails, continue without it\n        print(f\"Warning: Could not mock some engine platform checks: {e}\")\n        pass\n\nmock_platform_checks()\n\nfrom xinference.model.llm.llm_family import SUPPORTED_ENGINES, check_engine_by_spec_parameters\nfrom xinference.model.llm.vllm.core import VLLM_INSTALLED, VLLM_SUPPORTED_MODELS, VLLM_SUPPORTED_CHAT_MODELS\n\n# Mock platform checks again after imports to ensure they stick\n\n# Re-register engines with mocked platform checks\nfrom xinference.model.llm import generate_engine_config_by_model_family\nfrom xinference.model.llm.llm_family import BUILTIN_LLM_FAMILIES, LLM_ENGINES\n\n# Clear existing engine configurations\nLLM_ENGINES.clear()\n\n# Re-register all model families with mocked platform checks\nfor family in BUILTIN_LLM_FAMILIES:\n    generate_engine_config_by_model_family(family)\n\nMODEL_HUB_HUGGING_FACE = \"Hugging Face\"\nMODEL_HUB_MODELSCOPE = \"ModelScope\"\n_LEGACY_TRANSFORMERS_FORMATS = {\"pytorch\", \"gptq\", \"awq\", \"bnb\"}\n\n\ndef build_architecture_to_models(models):\n    architecture_to_models = defaultdict(list)\n    for model in models:\n        for architecture in model.get(\"architectures\", []) or []:\n            architecture_to_models[architecture].append(model[\"model_name\"])\n    return architecture_to_models\n\n\ndef get_metrics_from_url(metrics_url):\n    from prometheus_client.parser import text_string_to_metric_families\n    import requests\n\n    metrics = requests.get(metrics_url).content\n    result = []\n    for family in text_string_to_metric_families(metrics.decode(\"utf-8\")):\n        result.append({\n            \"name\": family.name,\n            \"type\": family.type,\n            \"help\": family.documentation,\n        })\n    return result\n\n\ndef _can_use_transformers_legacy(model, model_spec):\n    if model_spec.get(\"model_format\") not in _LEGACY_TRANSFORMERS_FORMATS:\n        return False\n    abilities = set(model.get(\"model_ability\", []))\n    return \"chat\" in abilities or \"generate\" in abilities\n\ndef _extract_primary_model_src(model):\n    if model.get(\"model_specs\"):\n        for spec in model[\"model_specs\"]:\n            if isinstance(spec, dict) and \"model_src\" in spec:\n                return spec[\"model_src\"]\n    return model.get(\"model_src\")\n\ndef main():\n    template_dir = '../templates' \n    env = Environment(loader=FileSystemLoader(template_dir))\n\n    with open('../../xinference/model/llm/llm_family.json', 'r') as model_file:\n        models = json.load(model_file)\n\n        model_by_names = { m['model_name']: m for m in models}\n\n        sorted_models = []\n        output_dir = './models/builtin/llm'\n        os.makedirs(output_dir, exist_ok=True)\n        current_files = {f for f in os.listdir(output_dir) if os.path.isfile(os.path.join(output_dir, f))}\n\n        for model_name in sorted(model_by_names, key=str.lower):\n\n            model = model_by_names[model_name]\n            sorted_models.append(model)\n\n            for model_spec in model['model_specs']:\n                model_spec['model_hubs'] = []\n                \n                # Process different model sources\n                if 'model_src' in model_spec:\n                    # Handle new model_src structure\n                    if 'huggingface' in model_spec['model_src']:\n                        hf_src = model_spec['model_src']['huggingface']\n                        model_spec['model_hubs'].append({\n                            'name': MODEL_HUB_HUGGING_FACE,\n                            'url': f\"https://huggingface.co/{hf_src['model_id']}\"\n                        })\n                        # Set model_id and quantizations for template compatibility\n                        model_spec['model_id'] = hf_src['model_id']\n                        model_spec['quantizations'] = hf_src['quantizations']\n                        quantizations = hf_src['quantizations']\n                    \n                    if 'modelscope' in model_spec['model_src']:\n                        ms_src = model_spec['model_src']['modelscope']\n                        model_spec['model_hubs'].append({\n                            'name': MODEL_HUB_MODELSCOPE,\n                            'url': f\"https://modelscope.cn/models/{ms_src['model_id']}\"\n                        })\n                        \n                    # If only modelscope exists and no huggingface, use modelscope data\n                    if 'modelscope' in model_spec['model_src'] and 'huggingface' not in model_spec['model_src']:\n                        ms_src = model_spec['model_src']['modelscope']\n                        model_spec['model_id'] = ms_src['model_id']\n                        model_spec['quantizations'] = ms_src['quantizations']\n                        quantizations = ms_src['quantizations']\n                else:\n                    # Fallback for old format if still exists\n                    model_spec['model_hubs'].append({\n                        'name': MODEL_HUB_HUGGING_FACE,\n                        'url': f\"https://huggingface.co/{model_spec['model_id']}\"\n                    })\n                    quantizations = model_spec.get('quantizations', [])\n\n                # model engines\n                engines = []\n                for engine in SUPPORTED_ENGINES:\n                    for quantization in quantizations:\n                        size = model_spec['model_size_in_billions']\n                        if isinstance(size, str) and '_' not in size:\n                            size = int(size)\n                        try:\n                            check_engine_by_spec_parameters(engine, model_name, model_spec['model_format'],\n                                                            size, quantization)\n                        except ValueError:\n                            if engine == \"Transformers\" and _can_use_transformers_legacy(\n                                model, model_spec\n                            ):\n                                engines.append(engine)\n                            continue\n                        else:\n                            engines.append(engine)\n                model_spec['engines'] = sorted(list(set(engines)), reverse=True)\n\n            rendered = env.get_template('llm.rst.jinja').render(model)\n            output_file_name = f\"{model['model_name'].lower()}.rst\"\n            if output_file_name in current_files:\n                current_files.remove(output_file_name)\n            output_file_path = os.path.join(output_dir, output_file_name)\n            with open(output_file_path, 'w') as output_file:\n                output_file.write(rendered)\n                print(output_file_path)\n\n        if current_files:\n            for f in current_files:\n                print(f\"remove {f}\")\n                os.remove(os.path.join(output_dir, f))\n\n        index_file_path = os.path.join(output_dir, \"index.rst\")\n        with open(index_file_path, \"w\") as file:\n            rendered_index = env.get_template('llm_index.rst.jinja').render(models=sorted_models)\n            file.write(rendered_index)\n        llm_sorted_models = sorted_models\n\n\n    with open('../../xinference/model/embedding/model_spec.json', 'r') as file:\n        models = json.load(file)\n\n        model_by_names = { m['model_name']: m for m in models}\n\n        sorted_models = []\n        output_dir = './models/builtin/embedding'\n        os.makedirs(output_dir, exist_ok=True)\n\n        for model_name in sorted(model_by_names, key=str.lower):\n            model = model_by_names[model_name]\n\n            sorted_models.append(model)\n\n            model['model_hubs'] = []\n            \n            # Process model specs for new model_src structure\n            if 'model_specs' in model and model['model_specs']:\n                model_spec = model['model_specs'][0]  # Use first spec for model hubs\n                if 'model_src' in model_spec:\n                    if 'huggingface' in model_spec['model_src']:\n                        hf_src = model_spec['model_src']['huggingface']\n                        model['model_hubs'].append({\n                            'name': MODEL_HUB_HUGGING_FACE,\n                            'url': f\"https://huggingface.co/{hf_src['model_id']}\"\n                        })\n                        # Set model_id for template compatibility (prefer huggingface)\n                        model['model_id'] = hf_src['model_id']\n                    \n                    if 'modelscope' in model_spec['model_src']:\n                        ms_src = model_spec['model_src']['modelscope']\n                        model['model_hubs'].append({\n                            'name': MODEL_HUB_MODELSCOPE,\n                            'url': f\"https://modelscope.cn/models/{ms_src['model_id']}\"\n                        })\n                        # Only set modelscope model_id if no huggingface exists\n                        if 'huggingface' not in model_spec['model_src']:\n                            model['model_id'] = ms_src['model_id']\n                else:\n                    # Fallback for old format\n                    model_id = model_spec.get('model_id', model.get('model_id', ''))\n                    model['model_id'] = model_id\n                    model['model_hubs'].append({\n                        'name': MODEL_HUB_HUGGING_FACE,\n                        'url': f\"https://huggingface.co/{model_id}\"\n                    })\n            else:\n                # Fallback for very old format\n                if 'model_id' in model:\n                    model['model_hubs'].append({\n                        'name': MODEL_HUB_HUGGING_FACE,\n                        'url': f\"https://huggingface.co/{model['model_id']}\"\n                    })\n\n            rendered = env.get_template('embedding.rst.jinja').render(model)\n            output_file_path = os.path.join(output_dir, f\"{model['model_name'].lower()}.rst\")\n            with open(output_file_path, 'w') as output_file:\n                output_file.write(rendered)\n                print(output_file_path)\n\n        index_file_path = os.path.join(output_dir, \"index.rst\")\n        with open(index_file_path, \"w\") as file:            \n            rendered_index = env.get_template('embedding_index.rst.jinja').render(models=sorted_models)\n            file.write(rendered_index)\n\n    with open('../../xinference/model/rerank/model_spec.json', 'r') as file:\n        models = json.load(file)\n\n        sorted_models = sorted(models, key=lambda x: x['model_name'].lower())\n        output_dir = './models/builtin/rerank'\n        os.makedirs(output_dir, exist_ok=True)\n\n        for model in sorted_models:\n            # Initialize model_hubs list\n            model['model_hubs'] = []\n            \n            # Process model specs for new model_src structure\n            model_spec = model['model_specs'][0]  # Use first spec for model hubs\n            if 'model_src' in model_spec:\n                if 'huggingface' in model_spec['model_src']:\n                    hf_src = model_spec['model_src']['huggingface']\n                    model['model_hubs'].append({\n                        'name': MODEL_HUB_HUGGING_FACE,\n                        'url': f\"https://huggingface.co/{hf_src['model_id']}\"\n                    })\n                    # Set model_id for template compatibility (prefer huggingface)\n                    model['model_id'] = hf_src['model_id']\n                \n                if 'modelscope' in model_spec['model_src']:\n                    ms_src = model_spec['model_src']['modelscope']\n                    model['model_hubs'].append({\n                        'name': MODEL_HUB_MODELSCOPE,\n                        'url': f\"https://modelscope.cn/models/{ms_src['model_id']}\"\n                    })\n                    # Only set modelscope model_id if no huggingface exists\n                    if 'huggingface' not in model_spec['model_src']:\n                        model['model_id'] = ms_src['model_id']\n            \n            rendered = env.get_template('rerank.rst.jinja').render(model)\n            output_file_path = os.path.join(output_dir, f\"{model['model_name'].lower()}.rst\")\n            with open(output_file_path, 'w') as output_file:\n                output_file.write(rendered)\n\n        index_file_path = os.path.join(output_dir, \"index.rst\")\n        with open(index_file_path, \"w\") as file:\n            rendered_index = env.get_template('rerank_index.rst.jinja').render(models=sorted_models)\n            file.write(rendered_index)\n\n    with open('../../xinference/model/image/model_spec.json', 'r') as file:\n        models = json.load(file)\n\n        sorted_models = sorted(models, key=lambda x: x['model_name'].lower())\n        output_dir = './models/builtin/image'\n        os.makedirs(output_dir, exist_ok=True)\n\n        for model in sorted_models:\n            # Process model_src for template compatibility\n            model_src = _extract_primary_model_src(model)\n            if model_src:\n                if 'huggingface' in model_src:\n                    hf_src = model_src['huggingface']\n                    model['model_id'] = hf_src['model_id']\n                    # Handle GGUF related fields\n                    if 'gguf_model_id' in hf_src:\n                        model['gguf_model_id'] = hf_src['gguf_model_id']\n                    if 'gguf_quantizations' in hf_src:\n                        model['gguf_quantizations'] = \", \".join(hf_src['gguf_quantizations'])\n                    # Handle Lightning related fields\n                    if 'lightning_model_id' in hf_src:\n                        model['lightning_model_id'] = hf_src['lightning_model_id']\n                    if 'lightning_versions' in hf_src:\n                        model['lightning_versions'] = \", \".join(hf_src['lightning_versions'])\n                elif 'modelscope' in model_src:\n                    model['model_id'] = model_src['modelscope']['model_id']\n            \n            available_controlnet = [cn[\"model_name\"] for cn in model.get(\"controlnet\", [])]\n            if not available_controlnet:\n                available_controlnet = None\n            model[\"available_controlnet\"] = available_controlnet\n            model[\"model_ability\"] = ', '.join(model.get(\"model_ability\"))\n            \n            # Ensure gguf_quantizations is properly formatted (fallback for old format)\n            if \"gguf_quantizations\" not in model:\n                model[\"gguf_quantizations\"] = \", \".join(model.get(\"gguf_quantizations\", []))\n            \n            rendered = env.get_template('image.rst.jinja').render(model)\n            output_file_path = os.path.join(output_dir, f\"{model['model_name'].lower()}.rst\")\n            with open(output_file_path, 'w') as output_file:\n                output_file.write(rendered)\n\n        index_file_path = os.path.join(output_dir, \"index.rst\")\n        with open(index_file_path, \"w\") as file:\n            rendered_index = env.get_template('image_index.rst.jinja').render(models=sorted_models)\n            file.write(rendered_index)\n\n    with open('../../xinference/model/audio/model_spec.json', 'r') as file:\n        models = json.load(file)\n\n        sorted_models = sorted(models, key=lambda x: x['model_name'].lower())\n        output_dir = './models/builtin/audio'\n        os.makedirs(output_dir, exist_ok=True)\n\n        for model in sorted_models:\n            # Process model_src for template compatibility\n            model_src = _extract_primary_model_src(model)\n            if model_src:\n                if 'huggingface' in model_src:\n                    model['model_id'] = model_src['huggingface']['model_id']\n                elif 'modelscope' in model_src:\n                    model['model_id'] = model_src['modelscope']['model_id']\n            \n            rendered = env.get_template('audio.rst.jinja').render(model)\n            output_file_path = os.path.join(output_dir, f\"{model['model_name'].lower()}.rst\")\n            with open(output_file_path, 'w') as output_file:\n                output_file.write(rendered)\n\n        index_file_path = os.path.join(output_dir, \"index.rst\")\n        with open(index_file_path, \"w\") as file:\n            rendered_index = env.get_template('audio_index.rst.jinja').render(models=sorted_models)\n            file.write(rendered_index)\n\n    with open('../../xinference/model/video/model_spec.json', 'r') as file:\n        models = json.load(file)\n\n        sorted_models = sorted(models, key=lambda x: x['model_name'].lower())\n        output_dir = './models/builtin/video'\n        os.makedirs(output_dir, exist_ok=True)\n\n        for model in sorted_models:\n            # Process model_src for template compatibility\n            model_src = _extract_primary_model_src(model)\n            if model_src:\n                if 'huggingface' in model_src:\n                    model['model_id'] = model_src['huggingface']['model_id']\n                elif 'modelscope' in model_src:\n                    model['model_id'] = model_src['modelscope']['model_id']\n            \n            model[\"model_ability\"] = ', '.join(model.get(\"model_ability\"))\n            rendered = env.get_template('video.rst.jinja').render(model)\n            output_file_path = os.path.join(output_dir, f\"{model['model_name'].lower()}.rst\")\n            with open(output_file_path, 'w') as output_file:\n                output_file.write(rendered)\n\n        index_file_path = os.path.join(output_dir, \"index.rst\")\n        with open(index_file_path, \"w\") as file:\n            rendered_index = env.get_template('video_index.rst.jinja').render(models=sorted_models)\n            file.write(rendered_index)\n\n    if VLLM_INSTALLED:\n        architecture_to_models = build_architecture_to_models(llm_sorted_models)\n        supported_architectures = []\n        for architecture in VLLM_SUPPORTED_MODELS + VLLM_SUPPORTED_CHAT_MODELS:\n            if architecture not in supported_architectures:\n                supported_architectures.append(architecture)\n        groups = []\n        for architecture in supported_architectures:\n            if architecture in architecture_to_models:\n                model_names = sorted(set(architecture_to_models[architecture]), key=str.lower)\n                groups.append(model_names)\n            else:\n                groups.append([architecture])\n        groups = [', '.join(\"``%s``\" % m for m in group) for group in groups]\n        vllm_model_str = '\\n'.join('- %s' % group for group in groups)\n        for fn in ['getting_started/installation.rst', 'user_guide/backends.rst']:\n            with open(fn) as f:\n                content = f.read()\n            start_label = '.. vllm_start'\n            end_label = '.. vllm_end'\n            start = content.find(start_label) + len(start_label)\n            end = content.find(end_label)\n            new_content = content[:start] + '\\n\\n' + vllm_model_str + '\\n' + content[end:]\n            with open(fn, 'w') as f:\n                f.write(new_content)\n\n    try:\n        output_dir = './user_guide'\n        os.makedirs(output_dir, exist_ok=True)\n\n        supervisor_metrics = get_metrics_from_url(\"http://127.0.0.1:9997/metrics\")\n        worker_metrics = get_metrics_from_url(\"http://127.0.0.1:9977/metrics\")\n        all_metrics = {\"supervisor_metrics\": supervisor_metrics, \"worker_metrics\": worker_metrics}\n        rendered = env.get_template('metrics.jinja').render(all_metrics)\n        output_file_path = os.path.join(output_dir, \"metrics.rst\")\n        with open(output_file_path, 'w') as output_file:\n            output_file.write(rendered)\n    except Exception:\n        print(\"Skip generate metrics doc, please start a local xinference server by: `xinference-local -mp 9977`.\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "doc/source/getting_started/environments.rst",
    "content": ".. _environments:\n\n======================\nEnvironments Variables\n======================\n\nXINFERENCE_ENDPOINT\n~~~~~~~~~~~~~~~~~~~~\nEndpoint of Xinference, used to connect to Xinference service.\nDefault value is http://127.0.0.1:9997 , you can get it through logs.\n\nXINFERENCE_MODEL_SRC\n~~~~~~~~~~~~~~~~~~~~~\nModelhub used for downloading models. Default is \"huggingface\", or you\ncan set \"modelscope\" as downloading source.\n\n.. _environments_xinference_home:\n\nXINFERENCE_HOME\n~~~~~~~~~~~~~~~~\nBy default, Xinference uses ``<HOME>/.xinference`` as home path to store\nnecessary files such as logs and models, where ``<HOME>`` is the home\npath of current user. You can change this directory by configuring this environment\nvariable.\n\nXINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe maximum number of failed health checks tolerated at Xinference startup.\nDefault value is 5.\n\nXINFERENCE_HEALTH_CHECK_INTERVAL\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nHealth check interval (seconds) at Xinference startup.\nDefault value is 5.\n\nXINFERENCE_HEALTH_CHECK_TIMEOUT\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nHealth check timeout (seconds) at Xinference startup.\nDefault value is 10.\n\nXINFERENCE_DISABLE_HEALTH_CHECK\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nXinference will automatically report health check at Xinference startup.\nSetting this environment to 1 can disable health check.\n\nXINFERENCE_DISABLE_METRICS\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nXinference will by default enable the metrics exporter on the supervisor and worker.\nSetting this environment to 1 will disable the /metrics endpoint on the supervisor\nand the HTTP service (only provide the /metrics endpoint) on the worker.\n\nXINFERENCE_DOWNLOAD_MAX_ATTEMPTS\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nMaximum download retry attempts for model files.\nDefault value is 3.\n\nXINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nEnable continuous batching for text-to-image models by specifying the target image size\n(e.g., ``1024*1024``). Default is unset.\n\nXINFERENCE_SSE_PING_ATTEMPTS_SECONDS\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nServer-Sent Events keepalive ping interval (seconds).\nDefault value is 600.\n\nXINFERENCE_MAX_TOKENS\n~~~~~~~~~~~~~~~~~~~~~\nGlobal max tokens limit override for requests. Default is unset.\n\nXINFERENCE_ALLOWED_IPS\n~~~~~~~~~~~~~~~~~~~~~~\nRestrict access to specified IPs or CIDR blocks. Default is unset (no restriction).\n\nXINFERENCE_BATCH_SIZE\n~~~~~~~~~~~~~~~~~~~~~\nDefault batch size used by the server when batching is enabled.\nDefault value is 32.\n\nXINFERENCE_BATCH_INTERVAL\n~~~~~~~~~~~~~~~~~~~~~~~~~\nDefault batching interval (seconds).\nDefault value is 0.003.\n\nXINFERENCE_ALLOW_MULTI_REPLICA_PER_GPU\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nWhether to allow multiple replicas on a single GPU.\nDefault value is 1 (enabled).\n\nXINFERENCE_LAUNCH_STRATEGY\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nGPU allocation strategy for replicas. Default is ``IDLE_FIRST_LAUNCH_STRATEGY``.\n\nXINFERENCE_ENABLE_VIRTUAL_ENV\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nEnable model virtual environments globally.\nDefault value is 1 (enabled, starting from v2.0).\n\nXINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSkip packages already present in system site-packages when creating virtual environments.\nDefault value is 1.\n\nXINFERENCE_CSG_TOKEN\n~~~~~~~~~~~~~~~~~~~~\nAuthentication token for CSGHub model source.\nDefault is unset.\n\nXINFERENCE_CSG_ENDPOINT\n~~~~~~~~~~~~~~~~~~~~~~~\nCSGHub endpoint for model source.\nDefault value is ``https://hub-stg.opencsg.com/``.\n"
  },
  {
    "path": "doc/source/getting_started/index.rst",
    "content": ".. _getting_started_index:\n\n===============\nGetting Started\n===============\n\n\n.. toctree::\n   :maxdepth: 2\n\n   installation\n   using_xinference\n   logging\n   using_docker_image\n   using_kubernetes\n   troubleshooting\n   environments\n   release_notes\n"
  },
  {
    "path": "doc/source/getting_started/installation.rst",
    "content": ".. _installation:\n\n============\nInstallation\n============\nXinference can be installed with ``pip`` on Linux, Windows, and macOS. To run models using Xinference, you will need to install the backend corresponding to the type of model you intend to serve.\n\nIf you aim to serve all supported models, you can install all the necessary dependencies with a single command::\n\n   pip install \"xinference[all]\"\n\n.. versionchanged:: v1.8.1\n\n   Due to irreconcilable package dependency conflicts between vLLM and sglang, we have removed sglang from the all extra. If you want to use sglang, please install it separately via ``pip install 'xinference[sglang]'``.\n\n\nSeveral usage scenarios require special attention.\n\n.. admonition:: **GGUF format** with **llama.cpp engine**\n\n   In this situation, it's advised to install its dependencies manually based on your hardware specifications to enable acceleration. For more details, see the :ref:`installation_gguf` section.\n\n.. admonition:: **AWQ or GPTQ** format with **transformers engine**\n\n   **This section is added in v1.6.0.**\n\n   This is because the dependencies at this stage require special options and are difficult to install. Please run command below in advance\n\n   .. code-block:: bash\n\n      pip install \"xinference[transformers_quantization]\" --no-build-isolation\n\n   Some dependencies like ``transformers`` might be downgraded, you can run ``pip install \"xinference[all]\"`` afterwards.\n\n\nIf you want to install only the necessary backends, here's a breakdown of how to do it.\n\n.. _inference_backend:\n\nTransformers Backend\n~~~~~~~~~~~~~~~~~~~~\nPyTorch (transformers) supports the inference of most state-of-art models. It is the default backend for models in PyTorch format::\n\n   pip install \"xinference[transformers]\"\n\nNotes:\n\n- The transformers engine supports ``pytorch`` / ``gptq`` / ``awq`` / ``bnb`` / ``fp4`` formats.\n- FP4 format requires ``transformers`` with ``FPQuantConfig`` support. If you see an import error,\n  please upgrade ``transformers`` to a newer version.\n\n\nvLLM Backend\n~~~~~~~~~~~~\nvLLM is a fast and easy-to-use library for LLM inference and serving. Xinference will choose vLLM as the backend to achieve better throughput when the following conditions are met:\n\n- The model format is ``pytorch``, ``gptq``, ``awq``, ``fp4``, ``fp8`` or ``bnb``.\n- When the model format is ``pytorch``, the quantization is ``none``.\n- When the model format is ``awq``, the quantization is ``Int4``.\n- When the model format is ``gptq``, the quantization is ``Int3``, ``Int4`` or ``Int8``.\n- The system is Linux and has at least one CUDA device\n- The model family (for custom models) / model name (for builtin models) is within the list of models supported by vLLM\n\nCurrently, supported models include:\n\n.. vllm_start\n\n- ``code-llama``, ``code-llama-instruct``, ``code-llama-python``, ``deepseek``, ``deepseek-chat``, ``deepseek-coder``, ``deepseek-coder-instruct``, ``deepseek-r1-distill-llama``, ``gorilla-openfunctions-v2``, ``HuatuoGPT-o1-LLaMA-3.1``, ``llama-2``, ``llama-2-chat``, ``llama-3``, ``llama-3-instruct``, ``llama-3.1``, ``llama-3.1-instruct``, ``llama-3.3-instruct``, ``tiny-llama``, ``wizardcoder-python-v1.0``, ``wizardmath-v1.0``, ``Yi``, ``Yi-1.5``, ``Yi-1.5-chat``, ``Yi-1.5-chat-16k``, ``Yi-200k``, ``Yi-chat``\n- ``codestral-v0.1``, ``mistral-instruct-v0.1``, ``mistral-instruct-v0.2``, ``mistral-instruct-v0.3``, ``mistral-large-instruct``, ``mistral-nemo-instruct``, ``mistral-v0.1``, ``openhermes-2.5``, ``seallm_v2``\n- ``Baichuan-M2``, ``codeqwen1.5``, ``codeqwen1.5-chat``, ``deepseek-r1-distill-qwen``, ``DianJin-R1``, ``fin-r1``, ``HuatuoGPT-o1-Qwen2.5``, ``KAT-V1``, ``marco-o1``, ``qwen1.5-chat``, ``qwen2-instruct``, ``qwen2.5``, ``qwen2.5-coder``, ``qwen2.5-coder-instruct``, ``qwen2.5-instruct``, ``qwen2.5-instruct-1m``, ``qwenLong-l1``, ``QwQ-32B``, ``QwQ-32B-Preview``, ``seallms-v3``, ``skywork-or1``, ``skywork-or1-preview``, ``XiYanSQL-QwenCoder-2504``\n- ``llama-3.2-vision``, ``llama-3.2-vision-instruct``\n- ``baichuan-2``, ``baichuan-2-chat``\n- ``InternLM2ForCausalLM``\n- ``qwen-chat``\n- ``mixtral-8x22B-instruct-v0.1``, ``mixtral-instruct-v0.1``, ``mixtral-v0.1``\n- ``cogagent``\n- ``glm-edge-chat``, ``glm4-chat``, ``glm4-chat-1m``\n- ``codegeex4``, ``glm-4v``\n- ``seallm_v2.5``\n- ``orion-chat``\n- ``qwen1.5-moe-chat``, ``qwen2-moe-instruct``\n- ``CohereForCausalLM``\n- ``deepseek-v2-chat``, ``deepseek-v2-chat-0628``, ``deepseek-v2.5``, ``deepseek-vl2``\n- ``deepseek-prover-v2``, ``deepseek-r1``, ``deepseek-r1-0528``, ``deepseek-v3``, ``deepseek-v3-0324``, ``Deepseek-V3.1``, ``moonlight-16b-a3b-instruct``\n- ``deepseek-r1-0528-qwen3``, ``qwen3``\n- ``minicpm3-4b``\n- ``internlm3-instruct``\n- ``gemma-3-1b-it``\n- ``glm4-0414``\n- ``minicpm-2b-dpo-bf16``, ``minicpm-2b-dpo-fp16``, ``minicpm-2b-dpo-fp32``, ``minicpm-2b-sft-bf16``, ``minicpm-2b-sft-fp32``, ``minicpm4``\n- ``Ernie4.5``\n- ``Qwen3-Coder``, ``Qwen3-Instruct``, ``Qwen3-Thinking``\n- ``glm-4.5``, ``GLM-4.6``, ``GLM-4.7``\n- ``gpt-oss``\n- ``seed-oss``\n- ``Qwen3-Next-Instruct``, ``Qwen3-Next-Thinking``\n- ``DeepSeek-V3.2``, ``DeepSeek-V3.2-Exp``\n- ``MiniMax-M2``, ``MiniMax-M2.5``\n- ``glm-5``\n.. vllm_end\n\nTo install Xinference and vLLM::\n\n   pip install \"xinference[vllm]\"\n   \n   # FlashInfer is optional but required for specific functionalities such as sliding window attention with Gemma 2.\n   # For CUDA 12.4 & torch 2.4 to support sliding window attention for gemma 2 and llama 3.1 style rope\n   pip install flashinfer -i https://flashinfer.ai/whl/cu124/torch2.4\n   # For other CUDA & torch versions, please check https://docs.flashinfer.ai/installation.html\n   \n\n.. _installation_gguf:\n\nLlama.cpp Backend\n~~~~~~~~~~~~~~~~~\nXinference supports models in ``gguf`` format via ``xllamacpp``.\n`xllamacpp <https://github.com/xorbitsai/xllamacpp>`_ is developed by Xinference team,\nand is the sole backend for llama.cpp since v1.6.0.\n\n.. warning::\n\n    Since Xinference v1.5.0, ``llama-cpp-python`` is deprecated.\n    Since Xinference v1.6.0, ``llama-cpp-python`` has been removed.\n\nInitial setup::\n\n   pip install \"xinference[llama_cpp]\"\n\nFor more installation instructions for ``xllamacpp`` to enable GPU acceleration, please refer to: https://github.com/xorbitsai/xllamacpp\n\nSGLang Backend\n~~~~~~~~~~~~~~\nSGLang has a high-performance inference runtime with RadixAttention. It significantly accelerates the execution of complex LLM programs by automatic KV cache reuse across multiple calls. And it also supports other common techniques like continuous batching and tensor parallelism.\n\nInitial setup::\n\n   pip install \"xinference[sglang]\"\n\n\nMLX Backend\n~~~~~~~~~~~\nMLX-lm is designed for Apple silicon users to run LLM efficiently.\n\nInitial setup::\n\n   pip install \"xinference[mlx]\"\n\nOther Platforms\n~~~~~~~~~~~~~~~\n\n* :ref:`Ascend NPU <installation_npu>`\n"
  },
  {
    "path": "doc/source/getting_started/installation_npu.rst",
    "content": ".. _installation_npu:\n\n\n=================================\nInstallation Guide for Ascend NPU\n=================================\nXinference can run on Ascend NPU, follow below instructions to install.\n\n.. warning::\n\n    The open-source version relies on Transformers for inference,\n    which can be slow on chips like 310p3. We provide an enterprise version that supports the MindIE engine,\n    offering better performance and compatibility for Ascend NPU.\n    Refer to `Xinference Enterprise <https://xinference.io>`_\n\n\nInstalling PyTorch and Ascend extension for PyTorch\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nInstall PyTorch CPU version and corresponding Ascend extension.\n\nTake PyTorch v2.1.0 as example.\n\n  .. code-block:: bash\n\n    pip3 install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cpu\n\nThen install `Ascend extension for PyTorch <https://github.com/Ascend/pytorch>`_.\n\n  .. code-block:: bash\n\n    pip3 install 'numpy<2.0'\n    pip3 install decorator\n    pip3 install torch-npu==2.1.0.post3\n\nRunning below command to see if it correctly prints the Ascend NPU count.\n\n.. code-block:: bash\n\n    python -c \"import torch; import torch_npu; print(torch.npu.device_count())\"\n\nInstalling Xinference\n~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: bash\n\n    pip3 install xinference\n\nNow you can use xinference according to :ref:`doc <using_xinference>`.\n``Transformers`` backend is the only available engine supported for Ascend NPU for open source version.\n\nEnterprise Support\n~~~~~~~~~~~~~~~~~~\nIf you encounter any performance or other issues for Ascend NPU, please reach out to us\nvia `link <https://xinference.io>`_.\n"
  },
  {
    "path": "doc/source/getting_started/logging.rst",
    "content": ".. _logging:\n\n=====================\nLogging in Xinference\n=====================\n\nConfigure Log Level\n###################\nYou can configure the log level with the ``--log-level`` option.\nFor example, starting a local cluster with ``DEBUG`` log level:\n\n.. code-block:: bash\n\n  xinference-local --log-level debug\n\n\nLog Files\n#########\nXinference supports log rotation of log files.\nBy default, logs rotate when they reach 100MB (maxBytes), and up to 30 backup files (backupCount) are kept.\nNote that the log level configured above takes effect in both the command line logs and the log files.\n\nLog Directory Structure\n***********************\nAll the logs are stored in the ``<XINFERENCE_HOME>/logs`` directory, where ``<XINFERENCE_HOME>`` can be configured as mentioned in :ref:`using_xinference`.\n\nXinference creates a subdirectory under the log directory ``<XINFERENCE_HOME>/logs``.\nThe name of the subdirectory corresponds to the Xinference cluster startup time in milliseconds.\n\nLocal deployment\n================\nIn a local deployment, the logs of Xinference supervisor and Xinference workers are combined into a single file. An example of the log directory structure is shown below::\n\n    <XINFERENCE_HOME>/logs\n        └── local_1699503558105\n            └── xinference.log\n\nwhere ``1699503558105`` is the timestamp when the Xinference cluster was created.\nTherefore, when you create a cluster locally multiple times, you can look for the corresponding logs based on this timestamp.\n\nDistributed deployment\n======================\nIn a distributed deployment, Xinference supervisor and Xinference workers each create their own subdirectory under the log directory.\nThe name of the subdirectory starts with the role name, followed by the role startup time in milliseconds.\nAn example of the log directory structure is shown below::\n\n    <XINFERENCE_HOME>/logs\n        └── supervisor_1699503558908\n            └── xinference.log\n            worker_1699503559105\n            └── xinference.log\n"
  },
  {
    "path": "doc/source/getting_started/release_notes.rst",
    "content": ".. _release_ntoes:\n\nRelease Notes\n=============\n\nThis page provides a version-by-version index of Xinference release notes.\nFor detailed updates, please visit the corresponding links below.\n\n+-----------------+--------------------------------------------------------------------------------+\n| Version         | Release Notes                                                                  |\n+=================+================================================================================+\n| v2.3.0          | `View release notes <https://xinference.io/release_notes/v2.3.0.html>`_        |\n+-----------------+--------------------------------------------------------------------------------+\n| v2.2.0          | `View release notes <https://xinference.io/release_notes/v2.2.0.html>`_        |\n+-----------------+--------------------------------------------------------------------------------+\n| v2.1.0          | `View release notes <https://xinference.io/release_notes/v2.1.0.html>`_        |\n+-----------------+--------------------------------------------------------------------------------+\n| v2.0.0          | `View release notes <https://xinference.io/release_notes/v2.0.0.html>`_        |\n+-----------------+--------------------------------------------------------------------------------+\n| v1.17.0         | `View release notes <https://xinference.io/release_notes/v1.17.0.html>`_       |\n+-----------------+--------------------------------------------------------------------------------+\n| v1.16.0         | `View release notes <https://xinference.io/release_notes/v1.16.0.html>`_       |\n+-----------------+--------------------------------------------------------------------------------+\n| v1.15.0         | `View release notes <https://xinference.io/release_notes/v1.15.0.html>`_       |\n+-----------------+--------------------------------------------------------------------------------+\n| v1.14.0         | `View release notes <https://xinference.io/release_notes/v1.14.0.html>`_       |\n+-----------------+--------------------------------------------------------------------------------+\n| v1.13.0         | `View release notes <https://xinference.io/release_notes/v1.13.0.html>`_       |\n+-----------------+--------------------------------------------------------------------------------+\n| v1.12.0         | `View release notes <https://xinference.io/release_notes/v1.12.0.html>`_       |\n+-----------------+--------------------------------------------------------------------------------+\n| v1.11.0.post1   | `View release notes <https://xinference.io/release_notes/v1.11.0.post1.html>`_ |\n+-----------------+--------------------------------------------------------------------------------+\n| v1.10.1         | `View release notes <https://xinference.io/release_notes/v1.10.1.html>`_       |\n+-----------------+--------------------------------------------------------------------------------+\n\n----\n\nFor older versions and source history, see our GitHub releases page:\nhttps://github.com/xorbitsai/inference/releases\n\n"
  },
  {
    "path": "doc/source/getting_started/troubleshooting.rst",
    "content": ".. _troubleshooting:\n\n===============\nTroubleshooting\n===============\n\n\nNo huggingface repo access\n==========================\n\nSometimes, you may face errors accessing huggingface models, such as the following message when accessing `llama2`:\n\n.. code-block:: text\n\n   Cannot access gated repo for url https://huggingface.co/api/models/meta-llama/Llama-2-7b-hf.\n   Repo model meta-llama/Llama-2-7b-hf is gated. You must be authenticated to access it.\n\nThis typically indicates either a lack of access rights to the repository or missing huggingface access tokens. \nThe following sections provide guidance on addressing these issues.\n\nGet access to the huggingface repo\n----------------------------------\n\nTo obtain access, navigate to the desired huggingface repository and agree to its terms and conditions. \nAs an illustration, for the `llama2` model, you can use this link:\n`https://huggingface.co/meta-llama/Llama-2-7b-hf <https://huggingface.co/meta-llama/Llama-2-7b-hf>`_.\n\nSet up credentials to access huggingface\n----------------------------------------\n\nYour credential to access huggingface can be found online at `https://huggingface.co/settings/tokens <https://huggingface.co/settings/tokens>`_.\n\nYou can set the token as an environmental variable, with ``export HUGGING_FACE_HUB_TOKEN=your_token_here``.\n\n\nIncompatibility Between NVIDIA Driver and PyTorch Version\n=========================================================\n\nIf you are using a NVIDIA GPU, you may face the following error:\n\n.. code-block:: text\n\n   UserWarning: CUDA initialization: The NVIDIA driver on your system is too old\n   (found version 10010). Please update your GPU driver by downloading and installi\n   ng a new version from the URL: http://www.nvidia.com/Download/index.aspx Alterna\n   tively, go to: https://pytorch.org to install a PyTorch version that has been co\n   mpiled with your version of the CUDA driver. (Triggered internally at  ..\\c10\\cu\n   da\\CUDAFunctions.cpp:112.)\n\nThis typically indicates that your CUDA driver version is not compatible with the PyTorch version you are using.\n\nGo to `https://pytorch.org <https://pytorch.org>`_ to install a PyTorch version that has been compiled with your\nversion of the CUDA driver. **Do not install a cuda version smaller than 11.8, preferably between 11.8 and 12.1.**\n\nSay if your CUDA driver version is 11.8, then you can install PyTorch with the following command:\n\n.. code-block:: python\n\n   pip install torch==2.0.1+cu118\n\n\nXinference service cannot be accessed from external systems through ``<IP>:9997``\n=================================================================================\n\nUse ``-H 0.0.0.0`` parameter in when starting Xinference:\n\n.. code:: bash\n\n   xinference-local -H 0.0.0.0\n\nThen Xinference service will listen on all network interfaces (not limited to ``127.0.0.1`` or ``localhost``).\n\nIf you are using the :ref:`using_docker_image`, please add ``-p <PORT>:9997``\nduring the docker run command, then access is available through ``<IP>:<PORT>`` of\nthe local machine.\n\nLaunching a built-in model takes a long time, and sometimes the model fails to download\n=======================================================================================\n\nXinference by default uses HuggingFace as the source for models. If your\nmachines are in Mainland China, there might be accessibility issues when\nusing built-in models.\n\nTo address this, add environment variable ``XINFERENCE_MODEL_SRC=modelscope`` when starting\nthe Xinference to change the model source to ModelScope, which is optimized\nfor Mainland China.\n\nIf you’re starting Xinference with Docker, include ``-e XINFERENCE_MODEL_SRC=modelscope``\nduring the docker run command.\n\nWhen using the official Docker image, RayWorkerVllm died due to OOM, causing the model to fail to load\n=======================================================================================================\n\nDocker's ``--shm-size`` parameter is used to set the size of shared memory. \nThe default size of shared memory (/dev/shm) is 64MB, which may be too small for vLLM backend.\n\n\nYou can increase its size by setting the ``--shm-size`` parameter as follows:\n\n.. code:: bash\n\n   docker run --shm-size=128g ...\n\n\nMissing ``model_engine`` parameter when launching LLM models\n============================================================\n\nSince version ``v0.11.0``, launching LLM models requires an additional ``model_engine`` parameter.\nFor specific information, please refer to :ref:`here <about_model_engine>`.\n\nResolving MKL Threading Layer Conflicts\n========================================\n\nWhen starting the Xinference server, you may encounter the error: ``ValueError: Model architectures ['Qwen2ForCausalLM'] failed to be inspected. Please check the logs for more details.``\n\nThe underlying cause shown in the logs is:\n\n.. code-block:: text\n\n   Error: mkl-service + Intel(R) MKL: MKL_THREADING_LAYER=INTEL is incompatible with libgomp-a34b3233.so.1 library.\n   Try to import numpy first or set the threading layer accordingly. Set MKL_SERVICE_FORCE_INTEL to force it.\n\nThis typically occurs when NumPy was installed via conda. Conda's NumPy is built with Intel MKL optimizations, which conflicts with the GNU OpenMP library (libgomp) already loaded in your environment.\n\nSolution 1: Override the Threading Layer\n-----------------------------------------\n\nForce Intel's Math Kernel Library to use GNU's OpenMP implementation:\n\n.. code-block:: bash\n\n   MKL_THREADING_LAYER=GNU xinference-local\n\nSolution 2: Reinstall NumPy with pip\n-------------------------------------\n\nUninstall conda's NumPy and reinstall using pip:\n\n.. code-block:: bash\n\n   pip uninstall -y numpy && pip install numpy\n   #Or just --force-reinstall\n   pip install --force-reinstall numpy\n\nRelated Note: vLLM and PyTorch\n-------------------------------\n\nIf you're using vLLM, avoid installing PyTorch with conda. Refer to the official vLLM installation guide for GPU-specific instructions: https://docs.vllm.ai/en/latest/getting_started/installation/gpu.html\n\nConfiguring PyPI Mirrors to Speed Up Package Installation\n==========================================================\n\nIf you're in Mainland China, using a PyPI mirror can significantly speed up package installation. Here are some commonly used mirrors:\n\n- Tsinghua University: ``https://pypi.tuna.tsinghua.edu.cn/simple``\n- Alibaba Cloud: ``https://mirrors.aliyun.com/pypi/simple/``\n- Tencent Cloud: ``https://mirrors.cloud.tencent.com/pypi/simple``\n\nHowever, be aware that some packages may not be available on certain mirrors. For example, if you're installing ``xinference[audio]`` using only the Aliyun mirror, the installation may fail.\n\nThis happens because ``num2words``, a dependency used by ``MeloTTS``, is not available on the Aliyun mirror. As a result, ``pip install xinference[audio]`` will resolve to older versions like ``xinference==1.2.0`` and ``xoscar==0.8.0`` (as of Oct 27, 2025).\n\nThese older versions are incompatible and will produce the error: ``MainActorPool.append_sub_pool() got an unexpected keyword argument 'start_method'``\n\n.. code-block:: bash\n\n   curl -s https://mirrors.aliyun.com/pypi/simple/num2words/ | grep -i \"num2words\"\n   # Returns NOTHING! But it works on Tsinghua or Tencent mirrors.\n   # uv pip install \"xinference[audio]\" will then install the following packages (as of Oct 27, 2025):\n   + x-transformers==2.10.2\n   + xinference==1.2.0\n   + xoscar==0.8.0\n\nTo avoid this issue when installing the xinference audio package, use multiple mirrors:\n\n.. code-block:: bash\n\n   uv pip install xinference[audio] --index-url https://mirrors.aliyun.com/pypi/simple --extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple\n\n   # Optional: Set this globally in your uv config\n   mkdir -p ~/.config/uv\n   cat >> ~/.config/uv/uv.toml << EOF\n   index-url = \"https://mirrors.aliyun.com/pypi/simple\"\n   extra-index-url = [\"https://pypi.tuna.tsinghua.edu.cn/simple\"]\n   EOF\n\nInstalling Xinference 1.12.0 with uv Fails (As of November 2025)\n=================================================================\n\n**Note:** This is a temporary issue due to the current package ecosystem and uv prioritizing **higher versions for direct dependencies** over **indirect dependencies**.\n\nSymptom\n-------\n\nWhen installing xinference 1.12.0 as of November 2025 using ``uv pip install xinference``, you may encounter an issue where very old package versions are installed, particularly:\n\n- ``transformers==4.12.2`` (from 2021)\n- ``tokenizers==0.10.3`` (from 2021)  \n- ``huggingface-hub==1.0.1``\n\nThen uv fails with \"Failed to build `tokenizers==0.10.3`\"\n\nRoot Cause\n----------\n\nThis occurs because uv prioritizes **higher versions for direct dependencies** over **indirect dependencies**:\n\n1. xinference 1.12.0 specifies ``huggingface-hub>=0.19.4`` as a **direct dependency** (no upper bound)\n2. uv selects the latest: ``huggingface-hub==1.0.1`` as of November 06 2025\n3. However, ``transformers<=4.57.3`` (an **indirect dependency** via ``peft``) requires ``huggingface-hub<1.0``\n4. To resolve the conflict, uv keeps the direct dependency at 1.0.1 and downgrades the indirect dependency ``transformers`` to ancient version 4.12.2\n\n**This is by design in uv**: it prioritizes what you explicitly ask for (direct dependencies) over transitive dependencies. Refer to https://github.com/astral-sh/uv/issues/16601\n\n**Update:** The latest transformers 4.57.3 (as in 2026.01.05) still requires ``huggingface-hub<1.0``.\n\nSolutions\n---------\n\n**Solution 1: Pre-constrain huggingface-hub (Recommended)**\n\nExplicitly constrain ``huggingface-hub`` to a compatible version range:\n\n.. code-block:: bash\n\n   uv pip install \"huggingface-hub>=0.34.0,<1.0\" xinference\n\nThis forces uv to select a ``huggingface-hub`` version that's compatible with modern ``transformers``.\n\n**Solution 2: Make transformers a direct dependency**\n\nBy specifying ``transformers`` explicitly, it becomes a direct dependency and uv will prefer higher versions:\n\n.. code-block:: bash\n\n   uv pip install transformers xinference\n\n**Solution 3: Use pip**\n\nOr just resort to using ``pip install xinference`` which will resolve to the following versions\n\n- ``transformers==4.57.1``\n- ``huggingface-hub==0.36.0``\n- ``tokenizers==0.22.1``  \n\nvLLM + Torch + Xinference Compatibility Issue (Segmentation Fault)\n===================================================================\n\nSymptom\n-------\n\nIf you have **vLLM < 0.12.0** installed and upgrade xinference (particularly using ``uv pip install -U xinference``), xinference may fail to start with a segmentation fault:\n\n.. code-block:: text\n\n   root@server:/home# xinference-local --host 0.0.0.0 --port 9997\n   INFO 12-30 17:35:37 [__init__.py:216] Automatically detected platform cuda.\n   Aborted (core dumped)\n\nRoot Cause\n----------\n\nThis issue has three contributing factors:\n\n1. **Binary Incompatibility**: vLLM versions before 0.12.0 were compiled against PyTorch 2.8.0. These versions are incompatible with PyTorch 2.9. Reference: `vLLM v0.12.0 Release Notes <https://github.com/vllm-project/vllm/releases/tag/v0.12.0>`_\n\n2. **Xinference's Unbounded Torch Dependency**: Xinference's ``setup.cfg`` does not specify an upper bound for PyTorch:\n\n   .. code-block:: ini\n\n      [options]\n      install_requires =\n          torch                    # No version constraint!\n\n   This allows package managers to upgrade PyTorch to incompatible versions.\n\n3. **Different Package Manager Behaviors**:\n\n   - **pip**: Conservative - only upgrades the specified package unless dependencies are incompatible\n   - **uv with -U flag**: Aggressive - re-resolves ALL dependencies and picks latest versions\n\n\nTherefore before you're ready to upgrade your entire stack and just want to upgrade xinference, use either:\n\n- ``pip install -U xinference`` (keeps PyTorch unchanged, only upgrades xinference)\n- ``uv pip install \"xinference==1.16.0\"`` (without -U flag, only upgrades xinference too)\n\n"
  },
  {
    "path": "doc/source/getting_started/using_docker_image.rst",
    "content": ".. _using_docker_image:\n\n=======================\nXinference Docker Image\n=======================\n\nXinference provides official images for use on Dockerhub.\n\n.. versionchanged:: v2.0\n\n   Starting from **Xinference v2.0**, to use the CUDA version of the image, the minimum CUDA version must be **CUDA 12.9**.\n\nPrerequisites\n=============\n* The image can only run in an environment with GPUs and CUDA installed, because Xinference in the image relies on Nvidia GPUs for acceleration.\n* CUDA must be successfully installed on the host machine. This can be determined by whether you can successfully execute the ``nvidia-smi`` command.\n* For CUDA version >= 12.9, CUDA version in the docker image is ``12.9``, and the CUDA version on the host machine should be ``12.9`` or above, and the NVIDIA driver version should be ``575`` or above.\n* Ensure `NVIDIA Container Toolkit <https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html>`_ installed.\n\n\nDocker Image\n============\nThe official image of Xinference is available on DockerHub in the repository ``xprobe/xinference``.\nAvailable tags include:\n\n* ``nightly-main``: This image is built daily from the `GitHub main branch <https://github.com/xorbitsai/inference>`_ and generally does not guarantee stability.\n* ``v<release version>``: This image is built each time a Xinference release version is published, and it is typically more stable.\n* ``latest``: This image is built with the latest Xinference release version.\n* For CPU version, add ``-cpu`` suffix, e.g. ``nightly-main-cpu``.\n\n\nDockerfile for custom build\n===========================\nIf you need to build the Xinference image according to your own requirements, the source code for the Dockerfile is located at `xinference/deploy/docker/Dockerfile <https://github.com/xorbitsai/inference/tree/main/xinference/deploy/docker/Dockerfile>`_ for reference.\nPlease make sure to be in the top-level directory of Xinference when using this Dockerfile. For example:\n\n.. code-block:: bash\n\n   git clone https://github.com/xorbitsai/inference.git\n   cd inference\n   docker build --progress=plain -t test -f xinference/deploy/docker/Dockerfile .\n\n\nImage usage\n===========\nYou can start Xinference in the container like this, simultaneously mapping port 9997 in the container to port 9998 on the host, enabling debug logging, and downloading models from modelscope.\n\n.. code-block:: bash\n\n   docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:v<your_version> xinference-local -H 0.0.0.0 --log-level debug\n\n\n.. warning::\n    * The option ``--gpus`` is essential and cannot be omitted, because as mentioned earlier, the image requires the host machine to have a GPU. Otherwise, errors will occur.\n    * The ``-H 0.0.0.0`` parameter after the ``xinference-local`` command cannot be omitted. Otherwise, the host machine may not be able to access the port inside the container.\n    * You can add multiple ``-e`` options to introduce multiple environment variables.\n\n\nCertainly, if you prefer, you can also manually enter the docker container and start Xinference in any desired way.\n\n.. note::\n\n   For multiple GPUs, make sure to set the shared memory size, for example: `docker run --shm-size=128g ...`\n\n\nMount your volume for loading and saving models\n===============================================\nThe image does not contain any model files by default, and it downloads the models into the container.\nTypically, you would need to mount a directory on the host machine to the docker container, so that Xinference can download the models onto it, allowing for reuse.\nIn this case, you need to specify a volume when running the Docker image and configure environment variables for Xinference:\n\n.. code-block:: bash\n\n   docker run -v </on/your/host>:</on/the/container> -e XINFERENCE_HOME=</on/the/container> -p 9998:9997 --gpus all xprobe/xinference:v<your_version> xinference-local -H 0.0.0.0\n\n\nThe principle behind the above command is to mount the specified directory from the host machine into the container, and then set the ``XINFERENCE_HOME`` environment variable to point to that directory inside the container.\nThis way, all downloaded model files will be stored in the directory you specified on the host machine.\nYou don't have to worry about losing them when the Docker container stops, and the next time you run it, you can directly use the existing models without the need for repetitive downloads.\n\nIf you downloaded the model using the default path on the host machine, and since the xinference cache directory\nstores the model using symbolic links, you need to mount the directory where the original file is located into the container as well.\nFor example, if you are using HuggingFace and Modelscope as model hub, you would need to mount the corresponding\ndirectories into the container. Generally, the cache directories for HuggingFace and Modelscope are located\nat <home_path>/.cache/huggingface and <home_path>/.cache/modelscope. The command would be like:\n\n.. code-block:: bash\n\n   docker run \\\n     -v </your/home/path>/.xinference:/root/.xinference \\\n     -v </your/home/path>/.cache/huggingface:/root/.cache/huggingface \\\n     -v </your/home/path>/.cache/modelscope:/root/.cache/modelscope \\\n     -p 9997:9997 \\\n     --gpus all \\\n     xprobe/xinference:v<your_version> \\\n     xinference-local -H 0.0.0.0\n"
  },
  {
    "path": "doc/source/getting_started/using_kubernetes.rst",
    "content": ".. _using_kubernetes:\n\n########################\nXinference on Kubernetes\n########################\n\n************\nHelm Support\n************\nXinference provides a method for installation in a Kubernetes cluster via ``Helm`` .\n\n\nPrerequisites\n=============\n* You have a fully functional Kubernetes cluster.\n* Enable GPU support in Kubernetes, refer to `here <https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/>`_.\n* ``Helm`` is correctly installed.\n\n\nSteps\n=====\n#. Add xinference helm repo.\n\n    .. code-block:: bash\n\n      helm repo add xinference https://xorbitsai.github.io/xinference-helm-charts\n\n#. Update xinference helm repo indexes and query versions.\n\n    .. code-block:: bash\n\n      helm repo update xinference\n      helm search repo xinference/xinference --devel --versions\n\n#. Install\n\n    .. code-block:: bash\n\n      helm install xinference xinference/xinference -n xinference --version <helm_charts_version>\n\n\nCustomized Installation\n=======================\nThe installation method mentioned above sets up a Xinference cluster similar to a single-machine setup,\nwith only one worker and all startup parameters at their default values.\nHowever, this is usually not the desired setup.\n\nBelow are some common custom installation configurations.\n\n#. I need to download models from ``ModelScope``.\n\n    .. code-block:: bash\n\n      helm install xinference xinference/xinference -n xinference --version <helm_charts_version> --set config.model_src=\"modelscope\"\n\n#. I want to use cpu image of xinference (or use any other version of xinference images).\n\n    .. code-block:: bash\n\n      helm install xinference xinference/xinference -n xinference --version <helm_charts_version> --set config.xinference_image=\"<xinference_docker_image>\"\n\n#. I want to have 4 Xinference workers, with each worker managing 4 GPUs.\n\n    .. code-block:: bash\n\n      helm install xinference xinference/xinference -n xinference --version <helm_charts_version> --set config.worker_num=4 --set config.gpu_per_worker=\"4\"\n\nThe above installation method is based on Helm ``--set`` option.\nFor more complex custom installations, such as multiple workers with shared storage,\nit is highly recommended to use your own ``values.yaml`` file with Helm ``-f`` option for installation.\n\nThe default ``values.yaml`` file is located `here <https://github.com/xorbitsai/xinference-helm-charts/blob/main/charts/xinference/values.yaml>`_.\nSome examples can be found `here <https://github.com/xorbitsai/xinference-helm-charts/tree/main/examples>`_.\n\n\n******************\nKubeBlocks Support\n******************\nYou can also install Xinference in Kubernetes using the third-party ``KubeBlocks``.\nThis method is not maintained by Xinference and does not guarantee timely updates or availability.\nPlease refer to the documentation at `here <https://kubeblocks.io/docs/preview/user_docs/kubeblocks-for-xinference/manage-xinference>`_.\n"
  },
  {
    "path": "doc/source/getting_started/using_xinference.rst",
    "content": ".. _using_xinference:\n\n================\nUsing Xinference\n================\n\n\nRun Xinference Locally\n======================\n\nLet's start by running Xinference on a local machine and running a classic LLM model: ``qwen2.5-instruct``.\n\nAfter this quickstart, you will move on to learning how to deploy Xinference in a cluster environment.\n\nStart Local Server\n------------------\n\nFirst, please ensure that you have installed Xinference according to the instructions provided :ref:`here <installation>`.\nTo start a local instance of Xinference, run the following command:\n\n.. tabs::\n\n  .. tab:: shell\n\n    .. code-block:: bash\n\n        xinference-local --host 0.0.0.0 --port 9997\n\n  .. tab:: output\n\n    .. code-block:: bash\n\n      INFO     Xinference supervisor 0.0.0.0:64570 started\n      INFO     Xinference worker 0.0.0.0:64570 started\n      INFO     Starting Xinference at endpoint: http://0.0.0.0:9997\n      INFO     Uvicorn running on http://0.0.0.0:9997 (Press CTRL+C to quit)\n\n.. note::\n  By default, Xinference uses ``<HOME>/.xinference`` as home path to store necessary files such as logs and models,\n  where ``<HOME>`` is the home path of current user.\n\n  You can change this directory by configuring the environment variable ``XINFERENCE_HOME``.\n  For example:\n\n  .. code-block:: bash\n\n    XINFERENCE_HOME=/tmp/xinference xinference-local --host 0.0.0.0 --port 9997\n\nCongrats! You now have Xinference running on your local machine. Once Xinference is running, there are multiple ways\nwe can try it: via the web UI, via cURL, via the command line, or via the Xinference's python client.\n\nYou can visit the web UI at `http://127.0.0.1:9997/ui <http://127.0.0.1:9997/ui>`_ and visit `http://127.0.0.1:9997/docs <http://127.0.0.1:9997/docs>`_\nto inspect the API docs.\n\nYou can install the Xinference command line tool and Python client using the following command:\n\n.. code-block:: bash\n\n   pip install xinference\n\nThe command line tool is ``xinference``. You can list the commands that can be used by running:\n\n.. tabs::\n\n  .. tab:: shell\n\n    .. code-block:: bash\n\n      xinference --help\n\n  .. tab:: output\n\n    .. code-block:: bash\n\n      Usage: xinference [OPTIONS] COMMAND [ARGS]...\n\n      Options:\n        -v, --version       Show the version and exit.\n        --log-level TEXT\n        -H, --host TEXT\n        -p, --port INTEGER\n        --help              Show this message and exit.\n\n      Commands:\n        cached\n        cal-model-mem\n        chat\n        engine\n        generate\n        launch\n        list\n        login\n        register\n        registrations\n        remove-cache\n        stop-cluster\n        terminate\n        unregister\n        vllm-models\n\n\nYou can install the Xinference Python client with minimal dependencies using the following command.\nPlease ensure that the version of the client matches the version of the Xinference server.\n\n.. code-block:: bash\n\n   pip install xinference-client==${SERVER_VERSION}\n\n.. _about_model_engine:\n\nAbout Model Engine\n------------------\nSince ``v0.11.0`` , before launching the LLM model, you need to specify the inference engine you want to run.\nCurrently, xinference supports the following inference engines:\n\n* ``vllm``\n* ``sglang``\n* ``llama.cpp``\n* ``transformers``\n* ``MLX``\n\nAbout the details of these inference engine, please refer to :ref:`here <inference_backend>`.\n\nNote that when launching a LLM model, the ``model_format`` and ``quantization`` of the model you want to launch\nis closely related to the inference engine.\n\nYou can use ``xinference engine`` command to query the combination of parameters of the model you want to launch.\nThis will demonstrate under what conditions a model can run on which inference engines.\n\nFor example:\n\n#. I would like to query about which inference engines the ``qwen-chat`` model can run on, and what are their respective parameters.\n\n.. code-block:: bash\n\n    xinference engine -e <xinference_endpoint> --model-name qwen-chat\n\n#. I want to run ``qwen-chat`` with ``VLLM`` as the inference engine, but I don't know how to configure the other parameters.\n\n.. code-block:: bash\n\n    xinference engine -e <xinference_endpoint> --model-name qwen-chat --model-engine vllm\n\n#. I want to launch the ``qwen-chat`` model in the ``GGUF`` format, and I need to know how to configure the remaining parameters.\n\n.. code-block:: bash\n\n    xinference engine -e <xinference_endpoint> --model-name qwen-chat -f ggufv2\n\n\nIn summary, compared to previous versions, when launching LLM models,\nyou need to additionally pass the ``model_engine`` parameter.\nYou can retrieve information about the supported inference engines and their related parameter combinations\nthrough the ``xinference engine`` command.\n\n.. note::\n\n    Here are some recommendations on when to use which engine:\n\n    - **Linux**\n\n       - When possible, prioritize using **vLLM** or **SGLang** for better performance.\n       - If resources are limited, consider using **llama.cpp**, as it offers more quantization options.\n       - For other cases, consider using **Transformers**, which supports nearly all models.\n\n    - **Windows**\n\n       - It is recommended to use **WSL**, and in this case, follow the same choices as Linux.\n       - Otherwise, prefer **llama.cpp**, and for unsupported models, opt for **Transformers**.\n\n    - **Mac**\n\n       - If supported by the model, use the **MLX engine**, as it delivers the best performance.\n       - For other cases, prefer **llama.cpp**, and for unsupported models, choose **Transformers**.\n\n\nRun qwen2.5-instruct\n--------------------\n\nLet's start by running a built-in model: ``qwen2.5-instruct``. When you start a model for the first time, Xinference will\ndownload the model parameters from HuggingFace, which might take a few minutes depending on the size of the model weights.\nWe cache the model files locally, so there's no need to redownload them for subsequent starts.\n\n.. note::\n  Xinference also allows you to download models from other sites. You can do this by setting an environment variable\n  when launching Xinference. For example, if you want to download models from `modelscope <https://modelscope.cn>`_,\n  do the following:\n\n  .. code-block:: bash\n\n    XINFERENCE_MODEL_SRC=modelscope xinference-local --host 0.0.0.0 --port 9997\n\nWe can specify the model's UID using the ``--model-uid`` or ``-u`` flag. If not specified, Xinference will generate a unique ID.\nThe default unique ID will be identical to the model name.\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference launch --model-engine <inference_engine> -n qwen2.5-instruct -s 0_5 -f pytorch\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://127.0.0.1:9997/v1/models' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n      \"model_engine\": \"<inference_engine>\",\n      \"model_name\": \"qwen2.5-instruct\",\n      \"model_format\": \"pytorch\",\n      \"size_in_billions\": \"0_5\"\n    }'\n\n  .. code-tab:: python\n\n    from xinference.client import RESTfulClient\n    client = RESTfulClient(\"http://127.0.0.1:9997\")\n    model_uid = client.launch_model(\n      model_engine=\"<inference_engine>\",\n      model_name=\"qwen2.5-instruct\",\n      model_format=\"pytorch\",\n      size_in_billions=\"0_5\"\n    )\n    print('Model uid: ' + model_uid)\n\n  .. code-tab:: bash output\n\n    Model uid: qwen2.5-instruct\n\n.. note::\n  For some engines, such as vllm, users need to specify the engine-related parameters when\n  running models. In this case, you can directly specify the parameter name and value in the\n  command line, for example:\n\n  .. code-block:: bash\n\n    xinference launch --model-engine vllm -n qwen2.5-instruct -s 0_5 -f pytorch --gpu_memory_utilization 0.9\n\n  `gpu_memory_utilization=0.9` will pass to vllm when launching model.\n\n.. note::\n  For more tips on model launching, refer to :ref:`launch`.\n\nCongrats! You now have ``qwen2.5-instruct`` running by Xinference. Once the model is running, we can try it out either via cURL,\nor via Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://127.0.0.1:9997/v1/chat/completions' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"qwen2.5-instruct\",\n        \"messages\": [\n            {\n                \"role\": \"system\",\n                \"content\": \"You are a helpful assistant.\"\n            },\n            {\n                \"role\": \"user\",\n                \"content\": \"What is the largest animal?\"\n            }\n        ]\n      }'\n\n  .. code-tab:: python\n\n    from xinference.client import RESTfulClient\n    client = RESTfulClient(\"http://127.0.0.1:9997\")\n    model = client.get_model(\"qwen2.5-instruct\")\n    model.chat(\n        messages=[\n            {\"role\": \"user\", \"content\": \"Who won the world series in 2020?\"}\n        ]\n    )\n\n  .. code-tab:: json output\n\n    {\n      \"id\": \"chatcmpl-8d76b65a-bad0-42ef-912d-4a0533d90d61\",\n      \"model\": \"qwen2.5-instruct\",\n      \"object\": \"chat.completion\",\n      \"created\": 1688919187,\n      \"choices\": [\n        {\n          \"index\": 0,\n          \"message\": {\n            \"role\": \"assistant\",\n            \"content\": \"The largest animal that has been scientifically measured is the blue whale, which has a maximum length of around 23 meters (75 feet) for adult animals and can weigh up to 150,000 pounds (68,000 kg). However, it is important to note that this is just an estimate and that the largest animal known to science may be larger still. Some scientists believe that the largest animals may not have a clear \\\"size\\\" in the same way that humans do, as their size can vary depending on the environment and the stage of their life.\"\n          },\n          \"finish_reason\": \"None\"\n        }\n      ],\n      \"usage\": {\n        \"prompt_tokens\": -1,\n        \"completion_tokens\": -1,\n        \"total_tokens\": -1\n      }\n    }\n\nXinference provides OpenAI-compatible APIs for its supported models, so you can use Xinference as a local drop-in replacement for OpenAI APIs. For example:\n\n.. code-block:: python\n\n  from openai import OpenAI\n  client = OpenAI(base_url=\"http://127.0.0.1:9997/v1\", api_key=\"not used actually\")\n\n  response = client.chat.completions.create(\n      model=\"qwen2.5-instruct\",\n      messages=[\n          {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n          {\"role\": \"user\", \"content\": \"What is the largest animal?\"}\n      ]\n  )\n  print(response)\n\nThe following OpenAI APIs are supported:\n\n- Chat Completions: `https://platform.openai.com/docs/api-reference/chat <https://platform.openai.com/docs/api-reference/chat>`_\n\n- Completions: `https://platform.openai.com/docs/api-reference/completions <https://platform.openai.com/docs/api-reference/completions>`_\n\n- Embeddings: `https://platform.openai.com/docs/api-reference/embeddings <https://platform.openai.com/docs/api-reference/embeddings>`_\n\nXinference also supports Anthropic API via base url ``http://127.0.0.1:9997/anthropic``, you can use Xinference in Claude Code and so forth.\nRefer to :ref:`anthropic client <anthropic_client>` for more details.\n\nManage Models\n-------------\n\nIn addition to launching models, Xinference offers various ways to manage the entire lifecycle of models.\nYou can manage models in Xinference through the command line, cURL, or Xinference's python client.\n\nYou can list all models of a certain type that are available to launch in Xinference:\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference registrations -t LLM\n\n  .. code-tab:: bash cURL\n\n    curl http://127.0.0.1:9997/v1/model_registrations/LLM\n\n  .. code-tab:: python\n\n    from xinference.client import RESTfulClient\n    client = RESTfulClient(\"http://127.0.0.1:9997\")\n    print(client.list_model_registrations(model_type='LLM'))\n\nThe following command gives you the currently running models in Xinference:\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference list\n\n  .. code-tab:: bash cURL\n\n    curl http://127.0.0.1:9997/v1/models\n\n  .. code-tab:: python\n\n    from xinference.client import RESTfulClient\n    client = RESTfulClient(\"http://127.0.0.1:9997\")\n    print(client.list_models())\n\nWhen you no longer need a model that is currently running, you can remove it in the following way to free up the resources it occupies:\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference terminate --model-uid \"qwen2.5-instruct\"\n\n  .. code-tab:: bash cURL\n\n    curl -X DELETE http://127.0.0.1:9997/v1/models/qwen2.5-instruct\n\n  .. code-tab:: python\n\n    from xinference.client import RESTfulClient\n    client = RESTfulClient(\"http://127.0.0.1:9997\")\n    client.terminate_model(model_uid=\"qwen2.5-instruct\")\n\n.. _distributed_getting_started:\n\nDeploy Xinference In a Cluster\n==============================\n\nTo deploy Xinference in a cluster, you need to start a Xinference supervisor on one server and Xinference workers\non the other servers.\n\nFirst, make sure you have already installed Xinference on each of the servers according to the instructions\nprovided :ref:`here <installation>`. Then follow the steps below:\n\nStart the Supervisor\n--------------------\nOn the server where you want to run the Xinference supervisor, run the following command:\n\n.. code-block:: bash\n\n  xinference-supervisor -H \"${supervisor_host}\"\n\nReplace ``${supervisor_host}`` with the actual host of your supervisor server.\n\n\nYou can the supervisor's web UI at `http://${supervisor_host}:9997/ui <http://${supervisor_host}:9997/ui>`_ and visit\n`http://${supervisor_host}:9997/docs <http://${supervisor_host}:9997/docs>`_ to inspect the API docs.\n\nStart the Workers\n-----------------\n\nOn each of the other servers where you want to run Xinference workers, run the following command:\n\n.. code-block:: bash\n\n  xinference-worker -e \"http://${supervisor_host}:9997\" -H \"${worker_host}\"\n\n.. note::\n    Note that you must replace ``${worker_host}``  with the actual host of your worker server.\n\n.. note::\n  Note that if you need to interact with the Xinference in a cluster via the command line,\n  you should include the ``-e`` or ``--endpoint`` flag to specify the supervisor server's endpoint. For example:\n\n  .. code-block:: bash\n\n      xinference launch -n qwen2.5-instruct -s 0_5 -f pytorch -e \"http://${supervisor_host}:9997\"\n\nUsing Xinference With Docker\n=============================\n\nTo start Xinference in a Docker container, run the following command:\n\nRun On Nvidia GPU Host\n-----------------------\n\nFor cuda 12.4:\n\n.. code-block:: bash\n\n  docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:<your_version> xinference-local -H 0.0.0.0 --log-level debug\n\nFor cuda 12.8:\n\n.. versionadded:: v1.8.1\n  CUDA 12.8 version is experimental, welcome to give us feedbacks to help us to improve.\n\n.. versionchanged:: v1.16.0\n  CUDA 12.8 version is removed in v1.16.0 .\n\n.. code-block:: bash\n\n  docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:<your_version>-cu128 xinference-local -H 0.0.0.0 --log-level debug\n\nFor cuda 12.9:\n\n.. versionadded:: v1.16.0\n  CUDA 12.9 will become the default version when Xinference v2.0.0 released.\n\n.. code-block:: bash\n\n  docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:<your_version>-cu129 xinference-local -H 0.0.0.0 --log-level debug\n\nRun On CPU Only Host\n-----------------------\n\n.. code-block:: bash\n\n  docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 xprobe/xinference:<your_version>-cpu xinference-local -H 0.0.0.0 --log-level debug\n\nReplace ``<your_version>`` with Xinference versions, e.g. ``v0.10.3``, ``latest`` can be used for the latest version.\n\nFor more docker usage, refer to :ref:`Using Docker Image <using_docker_image>`.\n\n\nWhat's Next?\n============\n\nCongratulations on getting started with Xinference! To help you navigate and make the most out of this\npowerful tool, here are some resources and guides:\n\n* :ref:`How to Use Client APIs for Different Types of Models <user_guide_client_api>`\n\n* :ref:`Choosing the Right Backends for Your Needs <user_guide_backends>`\n"
  },
  {
    "path": "doc/source/index.rst",
    "content": ".. _index:\n\n======================\nWelcome to Xinference!\n======================\n\n.. toctree::\n   :maxdepth: 2\n   :hidden:\n\n   getting_started/index\n   models/index\n   user_guide/index\n   examples/index\n   reference/index\n   development/index\n\n\nXorbits Inference (Xinference) is an open-source platform to streamline the operation and integration\nof a wide array of AI models. With Xinference, you're empowered to run inference using any open-source LLMs,\nembedding models, and multimodal models either in the cloud or on your own premises, and create robust\nAI-driven applications.   \n\nDeveloping Real-world AI Applications with Xinference\n-----------------------------------------------------\n\n.. tabs::\n\n  .. code-tab:: python LLM\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    model = client.get_model(\"MODEL_UID\")\n\n    # Chat to LLM\n    model.chat(\n       messages=[{\"role\": \"system\", \"content\": \"You are a helpful assistant\"}, {\"role\": \"user\", \"content\": \"What is the largest animal?\"}],\n       generate_config={\"max_tokens\": 1024}\n    )\n    \n    # Chat to VL model\n    model.chat(\n       messages=[\n         {\n            \"role\": \"user\",\n            \"content\": [\n               {\"type\": \"text\", \"text\": \"What’s in this image?\"},\n               {\n                  \"type\": \"image_url\",\n                  \"image_url\": {\n                     \"url\": \"http://i.epochtimes.com/assets/uploads/2020/07/shutterstock_675595789-600x400.jpg\",\n                  },\n               },\n            ],\n         }\n      ],\n      generate_config={\"max_tokens\": 1024}\n    )    \n\n  .. code-tab:: python Embedding\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    model = client.get_model(\"MODEL_UID\")\n\n    model.create_embedding(\"What is the capital of China?\")\n\n  .. code-tab:: python Image\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    model = client.get_model(\"MODEL_UID\")\n\n    model.text_to_image(\"An astronaut walking on the mars\")\n\n  .. code-tab:: python Audio\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    model = client.get_model(\"MODEL_UID\")\n\n    with open(\"speech.mp3\", \"rb\") as audio_file:\n        model.transcriptions(audio_file.read())\n\n  .. code-tab:: python Rerank\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    model = client.get_model(\"MODEL_UID\")\n\n    query = \"A man is eating pasta.\"\n    corpus = [\n      \"A man is eating food.\",\n      \"A man is eating a piece of bread.\",\n      \"The girl is carrying a baby.\",\n      \"A man is riding a horse.\",\n      \"A woman is playing violin.\"\n    ]\n    print(model.rerank(corpus, query))\n\n  .. code-tab:: python Video\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    model = client.get_model(\"MODEL_UID\")\n\n    model.text_to_video(\"\")\n\n\nGetting Started\n---------------\n\n.. grid:: 2\n\n    .. grid-item-card::  Install Xinference\n      :link: installation\n      :link-type: ref\n\n      Install Xinference on Linux, Windows, and macOS.\n\n    .. grid-item-card::  Try it out!\n      :link: using_xinference\n      :link-type: ref\n\n      Start by running Xinference on a local machine.\n\n\n.. grid:: 2\n\n   .. grid-item-card:: Explore models\n      :link: models_builtin_index\n      :link-type: ref\n      \n      Explore a wide range of models supported by Xinference.\n\n   .. grid-item-card:: Register your own model\n      :link: models_custom\n      :link-type: ref\n      \n      Register model weights and turn it into an API.\n\n\n\nExplore the API\n---------------\n\n.. grid:: 2\n\n    .. grid-item-card::  Chat & Generate\n      :link: chat\n      :link-type: ref\n\n      Learn how to chat with LLMs in Xinference.\n\n    .. grid-item-card::  Tools\n      :link: tools\n      :link-type: ref\n\n      Learn how to connect LLM with external tools.\n\n\n.. grid:: 2\n\n    .. grid-item-card::  Embeddings\n      :link: embed\n      :link-type: ref\n\n      Learn how to create text embeddings in Xinference.\n\n    .. grid-item-card::  Rerank\n      :link: rerank\n      :link-type: ref\n\n      Learn how to use rerank models in Xinference.\n\n\n.. grid:: 2\n\n    .. grid-item-card::  Images\n      :link: image\n      :link-type: ref\n\n      Learn how to generate images with Xinference.\n\n    .. grid-item-card::  Multimodal\n      :link: multimodal\n      :link-type: ref\n\n      Learn how to process images and audio with LLMs.\n\n\n.. grid:: 2\n\n   .. grid-item-card::  Audio\n      :link: audio\n      :link-type: ref\n\n      Learn how to turn audio into text or text into audio with Xinference.\n\n   .. grid-item-card::  Video\n      :link: video\n      :link-type: ref\n\n      Learn how to generate video with Xinference.\n\n.. grid:: 2\n\n    .. grid-item-card::  Flexible\n      :link: flexible\n      :link-type: ref\n\n      Learn how to inference traditional ML models with Xinference.\n\n\nGetting Involved\n----------------\n\n.. grid:: \n   :gutter: 1\n\n   .. grid-item::\n      \n      .. div:: sd-font-weight-normal sd-fs-5\n         \n         Get Latest News\n\n      .. grid:: 1\n         :gutter: 3\n\n         .. grid-item-card::  \n            :link: https://twitter.com/Xorbitsio\n\n            :fab:`twitter` Follow us on Twitter\n\n         .. grid-item-card::  \n            :link: https://zhihu.com/org/xorbits\n\n            :fab:`zhihu` Read our blogs\n\n\n   .. grid-item::      \n\n      .. div:: sd-font-weight-normal sd-fs-5\n\n         Get Support\n\n      .. grid:: 1\n         :gutter: 3\n\n         .. grid-item-card:: \n            :link: https://xinference.cn/images/WeCom.jpg\n            \n            :fab:`weixin` Find community on WeChat\n\n         .. grid-item-card::\n            :link: https://discord.gg/Xw9tszSkr5\n\n            :fab:`discord` Find community on Discord\n\n         .. grid-item-card::  \n            :link: https://github.com/xorbitsai/inference/issues/new/choose\n\n            :fab:`github` Open an issue\n\n\n   .. grid-item::      \n\n      .. div:: sd-fs-5\n\n         Contribute to Xinference\n\n      .. grid:: 1\n         :gutter: 3\n\n         .. grid-item-card::  \n            :link: https://github.com/xorbitsai/inference/pulls\n\n            :fab:`github` Create a pull request"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/development/contributing_codebase.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-03-07 15:03+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/development/contributing_codebase.rst:3\nmsgid \"Contributing to the code base\"\nmsgstr \"代码库开发指南\"\n\n#: ../../source/development/contributing_codebase.rst:6\nmsgid \"Table of contents:\"\nmsgstr \"目录\"\n\n#: ../../source/development/contributing_codebase.rst:9\nmsgid \"Code standards\"\nmsgstr \"代码规范\"\n\n#: ../../source/development/contributing_codebase.rst:11\nmsgid \"\"\n\"Writing good code is not just about what you write. It is also about \"\n\"*how* you write it. During Continuous Integration testing, several tools \"\n\"will be run to check your code for stylistic errors. Good style is a \"\n\"requirement for submitting code to Xinference.\"\nmsgstr \"\"\n\"写出好的代码不仅在于你写了什么，更在于你是如何写的。在持续集成测试期间，会有多个工具来检查您的代码是否存在风格错误。良好的编程风格是提交代码到 \"\n\"Xinference 的要求之一。\"\n\n#: ../../source/development/contributing_codebase.rst:15\nmsgid \"\"\n\"In addition, it is important that we do not make sudden changes to the \"\n\"code that could have the potential to break a lot of user code as a \"\n\"result. Therefore we need it to be as backwards compatible as possible to\"\n\" avoid mass breakages.\"\nmsgstr \"此外，不要对代码进行突然的更改，这可能会导致大量用户代码出现问题。所以，我们需要尽可能地保持向后兼容，以避免大规模的故障。\"\n\n#: ../../source/development/contributing_codebase.rst:20\nmsgid \"Autofixing formatting errors\"\nmsgstr \"自动修复格式错误\"\n\n#: ../../source/development/contributing_codebase.rst:22\nmsgid \"\"\n\"Moreover, Continuous Integration will run code formatting checks like \"\n\"``black``, ``flake8``, ``isort``, and others using `pre-commit hooks \"\n\"<https://pre-commit.com/>`_ Any warnings generated by these checks will \"\n\"cause the Continuous Integration to fail. Therefore, it is advisable to \"\n\"run the check yourself before submitting code. This can be done by \"\n\"installing ``pre-commit``::\"\nmsgstr \"\"\n\"此外，持续集成将使用 `pre-commit hooks <https://pre-commit.com/>`_ 运行诸如 ``black``、``flake8``、``isort`` \"\n\"等代码格式检查工具。任何由这些检查生成的警告都将导致持续集成失败。因此，建议在提交代码之前自行运行这些检查。\"\n\"可以通过在 Xinference 仓库的根目录下安装 ``pre-commit`` 来完成这一操作：\"\n\n#: ../../source/development/contributing_codebase.rst:30\nmsgid \"and then running::\"\nmsgstr \"然后执行命令：\"\n\n#: ../../source/development/contributing_codebase.rst:34\nmsgid \"\"\n\"from the root of the Xinference repository. This setup ensures that all \"\n\"styling checks are automatically executed each time you commit changes \"\n\"without your needing to run each one manually. In addition, using ``pre-\"\n\"commit`` will also allow you to more easily remain up-to-date with our \"\n\"code checks as they change.\"\nmsgstr \"\"\n\"安装好了以后就能确保每次提交更改时都会自动执行所有样式检查，无需手动逐个运行。\"\n\"此外，使用 ``pre-commit`` 也能让您更轻松地在我们的代码检查发生更改的时候保持同步。\"\n\n#: ../../source/development/contributing_codebase.rst:39\nmsgid \"\"\n\"Note that if needed, you can skip these checks with ``git commit --no-\"\n\"verify``.\"\nmsgstr \"请注意，如果需要，您可以通过使用 ``git commit --no-verify`` 命令来跳过这些检查。\"\n\n#: ../../source/development/contributing_codebase.rst:41\nmsgid \"\"\n\"If you don't want to use ``pre-commit`` as part of your workflow, you can\"\n\" still use it to run its checks with::\"\nmsgstr \"如果您不想将 ``pre-commit`` 作为工作流程的一部分，仍然可以运行如下命令来使用它进行检查：\"\n\n#: ../../source/development/contributing_codebase.rst:46\n#: ../../source/development/contributing_codebase.rst:52\nmsgid \"without needing to have done ``pre-commit install`` beforehand.\"\nmsgstr \"而不需要事先执行 ``pre-commit install``。\"\n\n#: ../../source/development/contributing_codebase.rst:48\nmsgid \"\"\n\"If you want to run checks on all recently committed files on \"\n\"upstream/main you can use::\"\nmsgstr \"如果您想在所有最近提交的文件上运行检查，您可以使用以下命令：\"\n\n#: ../../source/development/contributing_codebase.rst:56\nmsgid \"\"\n\"You may consider periodically running ``pre-commit gc`` to clean up repos\"\n\" which are no longer used.\"\nmsgstr \"您可以考虑定期运行 ``pre-commit gc`` 命令来清理不再使用的存储库。\"\n\n#: ../../source/development/contributing_codebase.rst:61\nmsgid \"\"\n\"If you have conflicting installations of ``virtualenv``, if could lead to\"\n\" errors - refer to `here \"\n\"<https://github.com/pypa/virtualenv/issues/1875>`_.\"\nmsgstr \"如果您安装了冲突的 ``virtualenv`` 版本，可能会导致错误 - 可以参考\"\n\" `这里 <https://github.com/pypa/virtualenv/issues/1875>`_ 。\"\n\n#: ../../source/development/contributing_codebase.rst:64\nmsgid \"\"\n\"Also, due to a `bug in virtualenv \"\n\"<https://github.com/pypa/virtualenv/issues/1986>`_, you may run into \"\n\"issues if you're using conda. To solve this, you can downgrade \"\n\"``virtualenv`` to version ``20.0.33``.\"\nmsgstr \"\"\n\"此外，由于 ``virtualenv`` 中的一个 `错误 <https://github.com/pypa/virtualenv/issues/1986>`_ ，如果您使用 conda，可能会遇到问题。\"\n\"要解决这个问题，您可以将 ``virtualenv`` 降级到版本 ``20.0.33``。\"\n\n#: ../../source/development/contributing_codebase.rst:69\nmsgid \"Backwards compatibility\"\nmsgstr \"向后兼容\"\n\n#: ../../source/development/contributing_codebase.rst:71\nmsgid \"\"\n\"Please try to maintain backward compatibility. If you think breakage is \"\n\"necessary, clearly state why as part of the pull request. Also, be \"\n\"careful when changing method signatures and add deprecation warnings \"\n\"where needed. Also, add the deprecated sphinx directive to the deprecated\"\n\" functions or methods.\"\nmsgstr \"\"\n\"请尽量保持向后兼容性。如果您认为必须进行更改，请在拉取请求中说明清楚原因。同时，在更改方法签名时要小心，并在需要时添加弃用警告。此外，为弃用的函数或方法添加弃用的\"\n\" sphinx 指令。\"\n\n#: ../../source/development/contributing_codebase.rst:76\nmsgid \"You'll also need to\"\nmsgstr \"同时你还需要\"\n\n#: ../../source/development/contributing_codebase.rst:78\nmsgid \"\"\n\"Write a new test that asserts a warning is issued when calling with the \"\n\"deprecated argument\"\nmsgstr \"编写一个新的测试样例，在调用带有弃用参数时会发出警告。\"\n\n#: ../../source/development/contributing_codebase.rst:79\nmsgid \"Update all of Xinference existing tests and code to use the new argument\"\nmsgstr \"更新所有 Xinference 现有的测试样例和代码，以使用新的参数。\"\n\n#: ../../source/development/contributing_codebase.rst:82\nmsgid \"Type hints\"\nmsgstr \"类型提示\"\n\n#: ../../source/development/contributing_codebase.rst:84\nmsgid \"\"\n\"Xinference strongly encourages the use of :pep:`484` style type hints. \"\n\"New development should contain type hints and pull requests to annotate \"\n\"existing code are accepted as well!\"\nmsgstr \"Xinference 强烈鼓励使用 :pep:`484` 风格的类型提示。新的开发应包含类型提示，并且对现有代码进行注释的拉取请求也是可以接受的！\"\n\n#: ../../source/development/contributing_codebase.rst:88\nmsgid \"Test-driven development\"\nmsgstr \"测试驱动开发\"\n\n#: ../../source/development/contributing_codebase.rst:90\nmsgid \"\"\n\"Xinference is serious about testing and strongly encourages contributors \"\n\"to embrace `test-driven development (TDD) <https://en.wikipedia.org/wiki\"\n\"/Test-driven_development>`_. This development process \\\"relies on the \"\n\"repetition of a very short development cycle: first the developer writes \"\n\"an (initially failing) automated test case that defines a desired \"\n\"improvement or new function, then produces the minimum amount of code to \"\n\"pass that test.\\\" So, before actually writing any code, you should write \"\n\"your tests. Often the test can be taken from the original GitHub issue. \"\n\"However, it is always worth considering additional use cases and writing \"\n\"corresponding tests.\"\nmsgstr \"\"\n\"Xinference 非常重视测试，并强烈鼓励贡献者采用 `测试驱动开发(TDD) <https://en.wikipedia.org/wiki\"\n\"/Test-driven_development>`_ 。这种开发过程 \"\n\"\\\"依赖于非常短的开发周期的重复：首先，开发者编写一个（初始为失败的）自动化测试样例来定义所需的改进或新功能，然后用最少的代码来通过该测试。\\\"因此，在实际编写任何代码之前，您应该编写您的测试样例。通常，测试样例可以从原始的\"\n\" GitHub issue 中获取。然而，值得考虑额外的情况并编写相应的测试样例。\"\n\n#: ../../source/development/contributing_codebase.rst:99\nmsgid \"\"\n\"Adding tests is frequently requested after code is pushed to Xinference. \"\n\"Thus, it is worth getting in the habit of writing tests ahead of time so \"\n\"this is never an issue.\"\nmsgstr \"在将代码推送到 Xinference 之后，经常会要求添加测试样例。因此，养成提前编写测试样例的习惯非常重要，这样就不会出现问题。\"\n\n#~ msgid \"Pre-commit\"\n#~ msgstr \"Pre-commit\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/development/contributing_environment.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-08-02 23:15+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/development/contributing_environment.rst:3\nmsgid \"Creating a development environment\"\nmsgstr \"创建开发环境\"\n\n#: ../../source/development/contributing_environment.rst:6\nmsgid \"Table of contents:\"\nmsgstr \"目录\"\n\n#: ../../source/development/contributing_environment.rst:8\nmsgid \"\"\n\"Before proceeding with any code modifications, it's essential to set up \"\n\"the necessary environment for Xinference development, which includes \"\n\"familiarizing yourself with Git usage, establishing an isolated \"\n\"environment, installing Xinference, and compiling the frontend.\"\nmsgstr \"\"\n\"在进行任何代码修改之前，建立起适用于 Xinference 开发的必要环境至关重要。\"\n\"包括熟悉 Git 的使用、建立一个独立的环境、安装 Xinference 以及前端部分的\"\n\"编译。\"\n\n#: ../../source/development/contributing_environment.rst:12\nmsgid \"Getting started with Git\"\nmsgstr \"Git 的使用\"\n\n#: ../../source/development/contributing_environment.rst:14\nmsgid \"\"\n\"Now that you have identified an issue you wish to resolve, an enhancement\"\n\" to incorporate, or documentation to enhance, it's crucial to acquaint \"\n\"yourself with GitHub and the Xinference codebase.\"\nmsgstr \"\"\n\"当你有一个需要修复的问题、需要添加的增强功能或需要改进的文档时，熟悉 \"\n\"GitHub 和 Xinference 代码库很重要。\"\n\n#: ../../source/development/contributing_environment.rst:17\nmsgid \"\"\n\"To the new user, working with Git is one of the more intimidating aspects\"\n\" of contributing to Xinference. It can very quickly become overwhelming, \"\n\"but sticking to the guidelines below will help simplify the process and \"\n\"minimize potential issues. As always, if you are having difficulties \"\n\"please feel free to ask for help.\"\nmsgstr \"\"\n\"对新用户来说，使用 Git 是参与 Xinference 开发最令人畏惧的方面之一。很快就\"\n\"会感到压力山大，但以下指南将有助于简化流程并减少潜在问题。如果您遇到\"\n\"难以解决的问题，欢迎在社区寻求帮助。\"\n\n#: ../../source/development/contributing_environment.rst:22\nmsgid \"\"\n\"The code is hosted on `GitHub <https://github.com/xorbitsai/inference>`_.\"\n\" To contribute you will need to sign up for a `free GitHub account \"\n\"<https://github.com/signup/free>`_. We use `Git <https://git-scm.com/>`_ \"\n\"for version control to allow many people to work together on the project.\"\nmsgstr \"\"\n\"Xinference 的代码托管在 `GitHub <https://github.com/xorbitsai/inference>`\"\n\"_ 。要参与 Xinference 代码贡献，你需要注册一个 `免费的 GitHub 账户 <https\"\n\"://github.com/signup/free>`_ 。我们使用 `Git <https://git-scm.com/>`_ \"\n\"进行版本控制，以便大家共同参与项目的开发。\"\n\n#: ../../source/development/contributing_environment.rst:27\nmsgid \"\"\n\"`GitHub has instructions <https://help.github.com/set-up-git-redirect>`__\"\n\" for installing git, setting up your SSH key, and configuring git. All \"\n\"these steps need to be completed before you can work seamlessly between \"\n\"your local repository and GitHub.\"\nmsgstr \"\"\n\"你可以参考 `GitHub 指南 <https://help.github.com/set-up-git-redirect>`_ \"\n\"来安装 git，设置 SSH 密钥以及配置 git。你需要完成这些步骤以确保你的本地\"\n\"仓库和 GitHub 可以正常工作，后续的工作才可以顺利进行。\"\n\n#: ../../source/development/contributing_environment.rst:31\nmsgid \"Some great resources for learning Git:\"\nmsgstr \"以下是一些很好的学习 Git 的资源：\"\n\n#: ../../source/development/contributing_environment.rst:33\nmsgid \"`Official Git Documentation <https://git-scm.com/doc>`_\"\nmsgstr \"`Git 官方文档 <https://git-scm.com/doc>`_\"\n\n#: ../../source/development/contributing_environment.rst:34\nmsgid \"`Pro Git Book <https://git-scm.com/book/en/v2>`_\"\nmsgstr \"`Pro Git 书籍 <https://git-scm.com/book/en/v2>`_\"\n\n#: ../../source/development/contributing_environment.rst:35\nmsgid \"`Git Tutorial by Atlassian <https://www.atlassian.com/git/tutorials>`_\"\nmsgstr \"`Atlassian 提供的 Git 教程 <https://www.atlassian.com/git/tutorials>`_\"\n\n#: ../../source/development/contributing_environment.rst:36\nmsgid \"\"\n\"`Git - Concise Guide <http://rogerdudler.github.io/git-\"\n\"guide/index.zh.html>`_\"\nmsgstr \"`Git-简明指南 <http://rogerdudler.github.io/git-guide/index.zh.html>`_\"\n\n#: ../../source/development/contributing_environment.rst:39\nmsgid \"\"\n\"If the speed of ``git clone`` is slow, you can use the following command \"\n\"to add a proxy:\"\nmsgstr \"如果在 ``git clone`` 代码的时候速度较慢，可以通过如下命令添加代理\"\n\n#: ../../source/development/contributing_environment.rst:47\nmsgid \"Creating an isolated environment\"\nmsgstr \"创建一个隔离环境\"\n\n#: ../../source/development/contributing_environment.rst:49\nmsgid \"\"\n\"Before formally installing Xinference, it's recommended to create an \"\n\"isolated environment, using Conda recommended, for ease of subsequent \"\n\"operations.\"\nmsgstr \"在正式安装Xinference之前，建议使用 Conda 创建一个隔离环境方便后续操作。\"\n\n#: ../../source/development/contributing_environment.rst:57\nmsgid \"``xinf`` can be replaced with a custom Conda environment name.\"\nmsgstr \"``xinf`` 可替换为自定义的 Conda 环境名。\"\n\n#: ../../source/development/contributing_environment.rst:59\nmsgid \"\"\n\"Afterward, you'll need to install Python and Node.js (npm) in the newly \"\n\"created Conda environment. Here are the commands:\"\nmsgstr \"随后需要在新建的 Conda 环境中安装 Python 以及 Node.js (npm)。命令如下：\"\n\n#: ../../source/development/contributing_environment.rst:68\nmsgid \"Install from source code\"\nmsgstr \"从源码安装\"\n\n#: ../../source/development/contributing_environment.rst:70\nmsgid \"\"\n\"Before we begin, please make sure that you have cloned the repository. \"\n\"Suppose you clone the repository as ``inference`` directory,  ``cd`` to \"\n\"this directory where the ``setup.cfg`` and ``setup.py`` files are \"\n\"located, and run the following command:\"\nmsgstr \"\"\n\"在开始之前，请确保您已经克隆了存储库。假设您将存储库克隆到名为 ``\"\n\"inference`` 的目录中，请进入该目录，其中包含 ``setup.cfg`` 和 ``setup.py`\"\n\"` 文件，并执行以下命令：\"\n\n#: ../../source/development/contributing_environment.rst:79\nmsgid \"\"\n\"If the commands run successfully, you can use Xinference normally. For \"\n\"detailed usage instructions, refer to `using_xinference \"\n\"<https://inference.readthedocs.io/en/latest/getting_started/using_xinference.html>`__.\"\nmsgstr \"\"\n\"如果命令能够成功运行，接下来就能正常使用 Xinference 了，使用教程详情见 `\"\n\"使用 <https://inference.readthedocs.io/zh-cn/latest/getting_started/using\"\n\"_xinference.html>`__。\"\n\n#: ../../source/development/contributing_environment.rst:83\nmsgid \"\"\n\"If errors occur or the process freezes during execution, the next step is\"\n\" to compile the frontend.\"\nmsgstr \"如果出现报错或者在运行过程中卡死，那就需要进行下一步前端编译。\"\n\n#: ../../source/development/contributing_environment.rst:87\nmsgid \"Frontend Compilation\"\nmsgstr \"前端编译\"\n\n#: ../../source/development/contributing_environment.rst:89\nmsgid \"\"\n\"Navigate to the ``inference/xinference/ui/web/ui`` directory. Then, \"\n\"execute the following command to clear the cache:\"\nmsgstr \"\"\n\"首先需要进入 ``inference/xinference/ui/web/ui`` 目录下，随后执行如下命令清除\"\n\"缓存：\"\n\n#: ../../source/development/contributing_environment.rst:96\nmsgid \"\"\n\"If the command fails to execute, you can try adding the ``--force`` \"\n\"option.\"\nmsgstr \"如果命令执行失败，您可以尝试添加 ``--force`` 选项\"\n\n#: ../../source/development/contributing_environment.rst:99\nmsgid \"\"\n\"If the ``node_modules`` folder already exists in this directory, it's \"\n\"recommended to manually delete it before cleaning the cache.\"\nmsgstr \"如果该目录下已经存在 ``node_modules`` 文件夹的话建议先手动删除该文件夹\"\n\n#: ../../source/development/contributing_environment.rst:102\nmsgid \"\"\n\"Next, execute the following command in this directory to compile the \"\n\"frontend:\"\nmsgstr \"接着在该目录下执行以下命令进行前端编译：\"\n\n#: ../../source/development/contributing_environment.rst:110\nmsgid \"\"\n\"Still, if the first command fails to execute, you can try adding the \"\n\"``--force`` option.\"\nmsgstr \"如果第一个命令执行失败，您仍然可以尝试通过添加 ``--force`` 选项解决\"\n\n#: ../../source/development/contributing_environment.rst:112\nmsgid \"\"\n\"After compiling the frontend, you can ``cd`` back to the directory where \"\n\"the ``setup.cfg`` and ``setup.py`` files are located, and install \"\n\"Xinference via ``pip install -e .``.\"\nmsgstr \"\"\n\"编译完前端后，您可以返回到包含 ``setup.cfg`` 和 ``setup.py`` 文件的目录，\"\n\"然后通过 ``pip install -e .`` 安装 Xinference。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/development/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-03-06 12:05+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/development/index.rst:5\nmsgid \"Development\"\nmsgstr \"开发指南\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/development/xinference_internals.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-05-31 11:46+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/development/xinference_internals.rst:3\nmsgid \"The internals of Xinference\"\nmsgstr \"Xinference 的内部结构\"\n\n#: ../../source/development/xinference_internals.rst:6\nmsgid \"Table of contents:\"\nmsgstr \"目录\"\n\n#: ../../source/development/xinference_internals.rst:9\nmsgid \"Overview\"\nmsgstr \"概述\"\n\n#: ../../source/development/xinference_internals.rst:10\nmsgid \"\"\n\"Xinference leverages `Xoscar <https://github.com/xorbitsai/xoscar>`_, an \"\n\"actor programming framework we designed, as its core component to manage \"\n\"machines, devices, and model inference processes. Each actor serves as a \"\n\"basic unit for model inference and various inference backends can be \"\n\"integrate into the actor, enabling us to support multiple inference \"\n\"engines and hardware. These actors are hosted and scheduled within actor \"\n\"pools, which are designed to be asynchronous and non-blocking and \"\n\"function as resource pools.\"\nmsgstr \"\"\n\"Xinference 利用我们设计的 actor 编程框架 `Xoscar <https://github.com/\"\n\"xorbitsai/xoscar>`_ 作为其核心组件，以管理机器、设备和模型推理进程。每个 \"\n\"actor 都是模型推理的基本单元，各种推理后端可以集成到 actor 中，从而使我们\"\n\"能够支持多种推理引擎和硬件。这些 actor 在 actor 池中托管和调度，actor 池\"\n\"具有资源池的功能，actor 的设计是异步和非阻塞的，。\"\n\n#: ../../source/development/xinference_internals.rst:22\nmsgid \"\"\n\"Both supervisor and worker are actor instances. Initially, an actor pool,\"\n\" serving as a resource pool, needs to be created on each server; and each\"\n\" actor can utilize a CPU core or a GPU device. Each server has its own \"\n\"address (IP address or hostname), so actors on different computing nodes \"\n\"can communicate with each other through these addresses. See `Actor`_ for\"\n\" more information.\"\nmsgstr \"\"\n\"supervisor 和 worker 都是 actor 实例。需要先在每台服务器上创建一个作为\"\n\"资源池的 actor 池；每个 actor 可以使用一个 CPU 内核或一块 GPU 设备。每台\"\n\"服务器都有自己的地址（IP 地址或主机名），因此不同计算节点上的 actor 可以\"\n\"通过这些地址相互通信。更多信息，请参阅 `Actor`_。\"\n\n#: ../../source/development/xinference_internals.rst:27\nmsgid \"RESTful API\"\nmsgstr \"RESTful API\"\n\n#: ../../source/development/xinference_internals.rst:28\nmsgid \"\"\n\"The RESTful API is implemented using `FastAPI \"\n\"<https://github.com/tiangolo/fastapi>`_, as specified in \"\n\"`api/restful_api.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/api/restful_api.py>`_.\"\nmsgstr \"\"\n\"RESTful API 是利用 `FastAPI <https://github.com/tiangolo/fastapi>`_ 实现\"\n\"的，具体代码在 `api/restful_api.py <https://github.com/xorbitsai/\"\n\"inference/tree/main/xinference/api/restful_api.py>`_。\"\n\n#: ../../source/development/xinference_internals.rst:35\nmsgid \"\"\n\"This is an example of the API ``/status``, it's corresponding function is\"\n\" ``get_status``. You can add connection between RESTful API and the \"\n\"backend function you want in `api/restful_api.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/api/restful_api.py>`_.\"\nmsgstr \"\"\n\"这是一个 API 的示例，API ``/status`` 对应函数 ``get_status``。您可以在 `\"\n\"api/restful_api.py <https://github.com/xorbitsai/inference/tree/main/\"\n\"xinference/api/restful_api.py>`_ 中添加 RESTful API 和对应后端函数之间的\"\n\"关系。\"\n\n#: ../../source/development/xinference_internals.rst:39\nmsgid \"Command Line\"\nmsgstr \"命令行\"\n\n#: ../../source/development/xinference_internals.rst:40\nmsgid \"\"\n\"The Command Line is implemented using `Click \"\n\"<https://click.palletsprojects.com/>`_, as specified in \"\n\"`deploy/cmdline.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/deploy/cmdline.py>`_,\"\n\" allowing users to interact with the Xinference deployment features \"\n\"directly from the terminal.\"\nmsgstr \"\"\n\"命令行是通过 `Click <https://click.palletsprojects.com/>`_ 实现的，具体\"\n\"代码在 `deploy/cmdline.py <https://github.com/xorbitsai/inference/tree/\"\n\"main/xinference/deploy/cmdline.py>`_，命令行允许用户直接在终端与 \"\n\"Xinference 进行交互。\"\n\n#: ../../source/development/xinference_internals.rst:45\nmsgid \"Entry Points\"\nmsgstr \"入口点\"\n\n#: ../../source/development/xinference_internals.rst:46\nmsgid \"Take the command-lines we implemented as examples:\"\nmsgstr \"以我们实现的命令行为例：\"\n\n#: ../../source/development/xinference_internals.rst:48\nmsgid \"\"\n\"``xinference``: Provides commands for model management, including \"\n\"registering/unregistering models, listing all registered/running models, \"\n\"and launching or terminating specific models. It also features \"\n\"interactive commands like generate and chat for testing and interacting \"\n\"with deployed models in real-time.\"\nmsgstr \"\"\n\"``xinference``：提供命令用于模型管理，包括注册/取消注册模型、列出所有已\"\n\"注册/运行的模型，以及启动或终止特定模型。它还提供生成语言和聊天等交互式\"\n\"命令，用于测试或交互已部署的模型。\"\n\n#: ../../source/development/xinference_internals.rst:52\nmsgid \"``xinference-local``: Starts a local Xinference service.\"\nmsgstr \"``xinference-local``：启动一个本地 Xinference 服务。\"\n\n#: ../../source/development/xinference_internals.rst:54\nmsgid \"\"\n\"``xinference-supervisor``: Initiates a supervisor process that manages \"\n\"and monitors worker actors within a distributed setup.\"\nmsgstr \"\"\n\"``xinference-supervisor``：启动 supervisor 进程，在分布式环境中管理和监控\"\n\" worker actors。\"\n\n#: ../../source/development/xinference_internals.rst:56\nmsgid \"\"\n\"``xinference-worker``: Starts a worker process that executes tasks \"\n\"assigned by the supervisor, utilizing available computational resources \"\n\"effectively.\"\nmsgstr \"\"\n\"``xinference-worker``：启动 worker 进程，利用可用计算资源，执行 \"\n\"supervisor 分配的任务。\"\n\n#: ../../source/development/xinference_internals.rst:59\nmsgid \"\"\n\"Each command is equipped with ``options`` and ``flags`` to customize its \"\n\"behavior, such as specifying log levels, host addresses, port numbers, \"\n\"and other relevant settings.\"\nmsgstr \"\"\n\"每条命令都配有 ``option`` 和 ``flag``，可自定义其行为，如指定日志级别、\"\n\"主机地址、端口号和其他相关设置。\"\n\n#: ../../source/development/xinference_internals.rst:62\nmsgid \"\"\n\"Python projects define command-line console entry points in `setup.cfg` \"\n\"or `setup.py`.\"\nmsgstr \"Python 项目会在 `setup.cfg` 或 `setup.py` 中定义命令行控制台入口点。\"\n\n#: ../../source/development/xinference_internals.rst:72\nmsgid \"\"\n\"The command-line ``xinference`` can be referred to code in \"\n\"``xinference.deploy.cmdline:cli``.\"\nmsgstr \"命令行 ``xinference`` 可参考 ``xinference.deploy.cmdline:cli`` 中的代码。\"\n\n#: ../../source/development/xinference_internals.rst:75\nmsgid \"Click\"\nmsgstr \"Click\"\n\n#: ../../source/development/xinference_internals.rst:76\nmsgid \"We use Click to implement a specific command-line:\"\nmsgstr \"我们使用 Click 来实现特定的命令行：\"\n\n#: ../../source/development/xinference_internals.rst:95\nmsgid \"\"\n\"For example, the ``xinference-local`` command allows you to define the \"\n\"host address and port.\"\nmsgstr \"例如，``xinference-local`` 命令允许您定义主机地址和端口。\"\n\n#: ../../source/development/xinference_internals.rst:98\nmsgid \"Actor\"\nmsgstr \"Actor\"\n\n#: ../../source/development/xinference_internals.rst:99\nmsgid \"\"\n\"Xinference is fundamentally based on `Xoscar \"\n\"<https://github.com/xorbitsai/xoscar>`_, our actor framework, which can \"\n\"manage computational resources and Python processes to support scalable \"\n\"and concurrent programming. The following is a pseudocode demonstrating \"\n\"how our Worker Actor works, the actual Worker Actor is more complex than \"\n\"this.\"\nmsgstr \"\"\n\"Xinference 以 `Xoscar <https://github.com/xorbitsai/xoscar>`_ 为基础，\"\n\"Xoscar 是我们的 actor 框架，可以管理计算资源和 Python 进程，支持可扩展的\"\n\"并发编程。下面的伪代码演示了 Worker Actor 的工作原理，实际的 Worker Actor\"\n\" 要比这个复杂得多。\"\n\n#: ../../source/development/xinference_internals.rst:126\nmsgid \"\"\n\"We use the ``WorkerActor`` as an example to illustrate how we build the \"\n\"Xinference. Each actor class is a standard Python class that inherits \"\n\"from ``xoscar.Actor``. An instance of this class is a specific actor \"\n\"within the actor pool.\"\nmsgstr \"\"\n\"我们以 ``WorkerActor`` 为例，说明如何构建 Xinference。每个 actor 类都是\"\n\"继承自 ``xoscar.Actor`` 的标准 Python 类。该类的实例就是 actor 池中的一个\"\n\"特定的 actor。\"\n\n#: ../../source/development/xinference_internals.rst:130\nmsgid \"\"\n\"**Define Actor Actions**: Each actor needs to define certain actions or \"\n\"behaviors to accomplish specific tasks. For instance, the model inference\"\n\" ``WorkerActor`` needs to launch the model (``launch_model``), list the \"\n\"models in this actor (``list_models``), terminate a model \"\n\"(``terminate_model``). There are two special methods worth noting. The \"\n\"``__post_create__`` is invoked before the actor is created, allowing for \"\n\"necessary initializations. The ``__pre_destroy__`` is called after the \"\n\"actor is destroyed, allowing for cleanup or finalization tasks.\"\nmsgstr \"\"\n\"**定义 Actor 的行为**：每个 actor 都需要定义某些动作或行为来完成特定任务\"\n\"。例如，模型推理 ``WorkerActor`` 需要启动模型（``launch_model``）、列出该\"\n\" actor 中的模型（``list_models``）、终止模型（``termininate_model``）。有\"\n\"两个特殊方法值得注意。``__post_create__`` 在创建 actor 之前调用，进行必要\"\n\"的初始化。而 ``__pre_destroy__`` 会在 actor 被销毁后调用，执行清理任务。\"\n\n#: ../../source/development/xinference_internals.rst:136\nmsgid \"\"\n\"**Reference Actor and Invoke Methods**: When an actor is created, it \"\n\"yields a reference variable so that other actors can reference it. The \"\n\"actor reference can also be referenced with the address. Suppose the \"\n\"``WorkerActor`` is created and the reference variable is ``worker_ref``,\"\n\"  the ``launch_model`` method of this actor class can be invoked by \"\n\"calling ``worker_ref.launch_model()``. Even if the actor's method is \"\n\"originally a synchronized method, when called with an actor reference, it\"\n\" will become as an asynchronous method.\"\nmsgstr \"\"\n\"**引用 Actor 和调用方法**：当创建一个 Actor 时，它会产生一个引用变量，\"\n\"以便其他 Actor 可以引用它。Actor 也可以用 IP 地址来引用。假设创建了 ``\"\n\"WorkerActor``，且引用变量为 ``worker_ref``，那么就可以通过调用 ``worker_\"\n\"ref.launch_model()`` 来调用该 Actor 类的 ``launch_model``。即使 actor 中\"\n\"的方法原来是一个传统的阻塞式的方法，当我们使用引用变量调用这个方法时，它\"\n\"也变成了一个异步方法。\"\n\n#: ../../source/development/xinference_internals.rst:143\nmsgid \"\"\n\"**Inference Engine**: The actor can manage the process, and the inference\"\n\" engine is also a process. In the launch model part of the \"\n\"``WorkerActor``, we can initialize different inference engines according \"\n\"to the user's need. Therefore, Xinference can support multiple inference \"\n\"engines and can easily adapt to new inference engines in the future.\"\nmsgstr \"\"\n\"**推理引擎**：Actor 可以管理进程，而推理引擎也是一种进程。在 ``\"\n\"WorkerActor`` 的启动模型部分，我们可以根据用户的需要初始化不同的推理引擎\"\n\"。因此，Xinference 可以支持多种推理引擎，并能轻松适应未来的新推理引擎。\"\n\n#: ../../source/development/xinference_internals.rst:148\nmsgid \"\"\n\"See `Xoscar document <https://xoscar.dev/en/latest/getting_started/llm-\"\n\"inference.html>`_ for more actor use cases.\"\nmsgstr \"\"\n\"请参阅 `Xoscar 文档 <https://xoscar.dev/en/latest/getting_started/llm-\"\n\"inference.html>`_ 了解更多 Actor 用例。\"\n\n#: ../../source/development/xinference_internals.rst:151\nmsgid \"Asynchronous Programming\"\nmsgstr \"异步编程\"\n\n#: ../../source/development/xinference_internals.rst:153\nmsgid \"\"\n\"Both Xinference and Xoscar highly utilize asynchronous programming of \"\n\"``asyncio``. Asynchronous programming is a programming paradigm that does\"\n\" not block. Instead, requests and function calls are issued and executed \"\n\"in the background and results are returned in the future. This enables us\"\n\" to perform activities concurrently.\"\nmsgstr \"\"\n\"Xinference 和 Xoscar 非常依赖异步编程库 ``asyncio``。异步编程是一种非阻塞\"\n\"的编程范式。相比于传统的阻塞式的函数调用，异步编程中的请求或函数调用在\"\n\"后台执行，运行结果在未来某个时刻返回。异步编程的优势是使得可以同时并发\"\n\"进行很多不同的活动或任务。\"\n\n#: ../../source/development/xinference_internals.rst:159\nmsgid \"\"\n\"If you're not familiar with Pythons's ``asyncio``, you can see more \"\n\"tutorials for help:\"\nmsgstr \"如果您不熟悉 Python 的 ``asyncio``，可以查看更多教程以获得帮助：\"\n\n#: ../../source/development/xinference_internals.rst:161\nmsgid \"\"\n\"`Python Asyncio Tutorial <https://bbc.github.io/cloudfit-public-\"\n\"docs/asyncio/asyncio-part-1.html>`__\"\nmsgstr \"\"\n\"`Python Asyncio 教程 <https://bbc.github.io/cloudfit-public-docs/asyncio/\"\n\"asyncio-part-1.html>`__\"\n\n#: ../../source/development/xinference_internals.rst:163\nmsgid \"\"\n\"`Real Python's asyncio Tutorial <https://realpython.com/async-io-\"\n\"python/>`__\"\nmsgstr \"`Real Python asyncio 教程 <https://realpython.com/async-io-python/>`__\"\n\n#: ../../source/development/xinference_internals.rst:165\nmsgid \"\"\n\"`Python Official Documentation \"\n\"<https://docs.python.org/3/library/asyncio.html>`__\"\nmsgstr \"`Python 官方文档 <https://docs.python.org/3/library/asyncio.html>`__\"\n\n#: ../../source/development/xinference_internals.rst:169\nmsgid \"Model\"\nmsgstr \"模型\"\n\n#: ../../source/development/xinference_internals.rst:171\nmsgid \"\"\n\"Xinference supports different types of models including large language \"\n\"models (LLMs), image models, audio models, embedding models, etc. All \"\n\"models are implemented in `model/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/model>`_.\"\nmsgstr \"\"\n\"Xinference 支持不同类型的模型，包括大型语言模型（LLM）、图像模型、音频\"\n\"模型、嵌入模型等。所有模型在 `model/ <https://github.com/xorbitsai/\"\n\"inference/tree/main/xinference/model>`_ 文件夹下实现。\"\n\n#: ../../source/development/xinference_internals.rst:175\nmsgid \"LLM\"\nmsgstr \"\"\n\n#: ../../source/development/xinference_internals.rst:177\nmsgid \"\"\n\"Take `model/llm/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/model/llm>`_\"\n\" for example, it focuses on the management and instantiation of LLMs. It \"\n\"includes detailed implementations for loading, configuring, and deploying\"\n\" LLMs.\"\nmsgstr \"\"\n\"以 `model/llm/ <https://github.com/xorbitsai/inference/tree/main/\"\n\"xinference/model/llm>`_ 为例，它主要管理和启动 LLM，包括加载、配置和运行\"\n\"大语言模型。\"\n\n#: ../../source/development/xinference_internals.rst:181\nmsgid \"\"\n\"We support many backends such as GGML, PyTorch, and vLLM. Our generated \"\n\"content is compatible with the format of OpenAI, supporting features such\"\n\" as streaming output and returning chat completion format (for chat \"\n\"models only). Therefore, there is a lot of adaptation work to be done \"\n\"after the model generate content. These tasks are not difficult, but they\"\n\" do require some time. When writing this part of the code, please refer \"\n\"to the `OpenAI API documentation \"\n\"<https://platform.openai.com/docs/introduction>`_ and the documentation \"\n\"of various inference backends, and make the necessary adaptations.\"\nmsgstr \"\"\n\"我们支持不同的推理后端，比如 GGML、PyTorch 和 vLLM。我们生成的内容与 \"\n\"OpenAI 的格式兼容，比如支持流式输出（stream），对话模型以 chat completion\"\n\" 格式返回。因此模型输出内容后要做很多适配工作。这些工作并不难，但需要一些\"\n\"时间。编写这部分代码时，请参考 `OpenAI 的 API 文档 <https://platform.\"\n\"openai.com/docs/introduction>`_ 和各个推理后端的文档，做必要的适配。\"\n\n#: ../../source/development/xinference_internals.rst:185\nmsgid \"JSON\"\nmsgstr \"\"\n\n#: ../../source/development/xinference_internals.rst:187\nmsgid \"\"\n\"In `model/llm/llm_family.json \"\n\"<https://github.com/xorbitsai/inference/blob/main/xinference/model/llm/llm_family.json>`_,\"\n\" we utilize JSON files to manage the metadata of emerging open-source \"\n\"models. Adding a new model does not necessitate writing new code, it \"\n\"merely requires appending new metadata to the existing JSON file.\"\nmsgstr \"\"\n\"在 `model/llm/llm_family.json <https://github.com/xorbitsai/inference/\"\n\"blob/main/xinference/model/llm/llm_family.json>`_ 中，我们利用 JSON 文件\"\n\"来管理新出现的开源模型的元数据。添加一个新模型并不需要编写新代码，只需要\"\n\"将新的元数据添加到现有的 JSON 文件中即可。\"\n\n#: ../../source/development/xinference_internals.rst:214\nmsgid \"\"\n\"This is an example of how to define the Llama-2 chat model. The \"\n\"``model_specs`` define the information of the model, as one model family \"\n\"usually comes with various sizes, quantization methods, and file formats.\"\n\" For instance, the ``model_format`` could be ``pytorch`` (using Hugging \"\n\"Face Transformers or vLLM as backend), ``ggmlv3`` (a tensor library \"\n\"associated with llama.cpp), or ``gptq`` (a post-training quantization \"\n\"framework). The ``model_id`` defines the repository of the model hub from\"\n\" which Xinference downloads the checkpoint files. Furthermore, due to \"\n\"distinct instruction-tuning processes, different model families have \"\n\"varying prompt styles. The ``prompt_style`` in the JSON file specifies \"\n\"how to format prompts for this particular model. For example, \"\n\"``system_prompt`` and ``roles`` are used to specify the instructions and \"\n\"personality of the model.\"\nmsgstr \"\"\n\"这是一个如何定义 Llama-2 聊天模型的示例。``model_specs`` 定义了模型的信息\"\n\"，因为一个模型系列通常有不同的尺寸、量化方法和文件格式。例如，``model_\"\n\"format`` 可以是 ``pytorch`` （使用 Hugging Face Transformers 或 vLLM 作为\"\n\"后端）、 ``ggmlv3`` （与 llama.cpp 相关的张量库）或 ``gptq`` （训练后量化\"\n\"框架）。 ``model_id`` 定义了模型中心的资源库，Xinference 从模型中心下载\"\n\"检查点文件。此外，由于不同的指令调整过程，不同的模型系列有不同的提示风格\"\n\"。JSON 文件中的 ``prompt_style`` 指定了该特定模型的提示格式。例如，``\"\n\"system_prompt`` 和 ``roles`` 用于指定模型的指令和个性。\"\n\n#: ../../source/development/xinference_internals.rst:224\nmsgid \"Code Walkthrough\"\nmsgstr \"代码指南\"\n\n#: ../../source/development/xinference_internals.rst:226\nmsgid \"\"\n\"The main code is located in the `xinference/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference>`_:\"\nmsgstr \"\"\n\"主要代码位于 `xinference/ <https://github.com/xorbitsai/inference/tree/\"\n\"main/xinference>`_：\"\n\n#: ../../source/development/xinference_internals.rst:228\nmsgid \"\"\n\"`api/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/api>`_: \"\n\"`restful_api.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/api/restful_api.py>`_\"\n\" is the core part that sets up and runs the RESTful APIs. It integrates \"\n\"an authentication service (the specific code is located in `oauth2/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/api/oauth2>`_),\"\n\" as some or all endpointsrequire user authentication.\"\nmsgstr \"\"\n\"`api/ <https://github.com/xorbitsai/inference/tree/main/xinference/api>`_\"\n\"：`restful_api.py <https://github.com/xorbitsai/inference/tree/main/\"\n\"xinference/api/restful_api.py>`_ 是设置和运行 RESTful API 的核心部分。它\"\n\"集成了一个身份验证服务（具体代码位于 `oauth2/ <https://github.com/\"\n\"xorbitsai/inference/tree/main/xinference/api/oauth2>`_），因为部分或所有\"\n\"端口需要用户身份验证。\"\n\n#: ../../source/development/xinference_internals.rst:233\nmsgid \"\"\n\"`client/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/client>`_: \"\n\"This is the client of Xinference.\"\nmsgstr \"\"\n\"`client/ <https://github.com/xorbitsai/inference/tree/main/xinference/\"\n\"client>`_：这是 Xinference 的客户端。\"\n\n#: ../../source/development/xinference_internals.rst:235\nmsgid \"\"\n\"`oscar/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/client/oscar>`_\"\n\" defines the Actor Client which acts as a client interface for \"\n\"interacting with models deployed in a Xinference cluster.\"\nmsgstr \"\"\n\"`oscar/ <https://github.com/xorbitsai/inference/tree/main/xinference/\"\n\"client/oscar>`_ 定义了 Actor 客户端，它是一个客户端接口，用于与 \"\n\"Xinference 中的模型交互。\"\n\n#: ../../source/development/xinference_internals.rst:238\nmsgid \"\"\n\"`restful/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/client/restful>`_\"\n\" implements a RESTful client for interacting with a Xinference service.\"\nmsgstr \"\"\n\"`restful/ <https://github.com/xorbitsai/inference/tree/main/xinference/\"\n\"client/restful>`_ 实现与 Xinference 服务交互的 RESTful 客户端。\"\n\n#: ../../source/development/xinference_internals.rst:241\nmsgid \"\"\n\"`core/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core>`_: \"\n\"This is the core part of Xinference.\"\nmsgstr \"\"\n\"`core/ <https://github.com/xorbitsai/inference/tree/main/xinference/core>\"\n\"`_：这是 Xinference 的核心部分。\"\n\n#: ../../source/development/xinference_internals.rst:243\nmsgid \"\"\n\"`metrics.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/metrics.py>`_\"\n\" and `resource.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/resource.py>`_\"\n\" defines a set of tools for collecting and reporting metrics and the \"\n\"status of node resources, including model throughput, latency, the usage \"\n\"of CPU and GPU, memory usage, and more.\"\nmsgstr \"\"\n\"`metrics.py <https://github.com/xorbitsai/inference/tree/main/xinference/\"\n\"core/metrics.py>`_ 和 `resource.py <https://github.com/xorbitsai/\"\n\"inference/tree/main/xinference/core/resource.py>`_ 定义了一套用于收集和\"\n\"报告指标以及节点资源状态的工具，包括模型吞吐量、延迟、CPU 和 GPU 的使用率\"\n\"、内存使用率等。\"\n\n#: ../../source/development/xinference_internals.rst:248\nmsgid \"\"\n\"`image_interface.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/image_interface.py>`_\"\n\" and `chat_interface.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/chat_interface.py>`_\"\n\" implement `Gradio <https://github.com/gradio-app/gradio>`_ interfaces \"\n\"for image and chat models, respectively. These interfaces allow users to \"\n\"interact with models through a Web UI, such as generating images or \"\n\"engaging in chat. They build user interfaces using the gradio package and\"\n\" communicate with backend models through our RESTful APIs.\"\nmsgstr \"\"\n\"`image_interface.py <https://github.com/xorbitsai/inference/tree/main/\"\n\"xinference/core/image_interface.py>`_ 和 `chat_interface.py <https://\"\n\"github.com/xorbitsai/inference/tree/main/xinference/core/chat_interface.\"\n\"py>`_ 分别为图像和聊天模型实现了 `Gradio <https://github.com/gradio-app/\"\n\"gradio>`_ 接口。这些接口允许用户通过 Web 界面与模型进行交互，例如生成图像\"\n\"或进行聊天。代码使用 Gradio 软件包构建用户界面，并通过我们的 RESTful API \"\n\"与后端模型通信。\"\n\n#: ../../source/development/xinference_internals.rst:254\nmsgid \"\"\n\"`worker.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/worker.py>`_\"\n\" and `supervisor.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/supervisor.py>`_\"\n\" respectively define the logic for worker actors and supervisor actor. \"\n\"Worker actors are responsible for carrying out specific model computation\"\n\" tasks, while supervisor actors manage the lifecycle of worker nodes, \"\n\"schedule tasks, and monitor system states.\"\nmsgstr \"\"\n\"`worker.py <https://github.com/xorbitsai/inference/tree/main/xinference/\"\n\"core/worker.py>`_ 和 `supervisor.py <https://github.com/xorbitsai/\"\n\"inference/tree/main/xinference/core/supervisor.py>`_ 分别定义了 worker \"\n\"actor 和 supervisor actor 的逻辑。worker actor 负责执行特定的模型计算任务\"\n\"，而 supervisor actor 则管理 Worker 节点的生命周期和任务调度，并监控系统\"\n\"状态。\"\n\n#: ../../source/development/xinference_internals.rst:259\nmsgid \"\"\n\"`status_guard.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/status_guard.py>`_\"\n\" implements a status monitor to track the status of models (like \"\n\"creating, updating, terminating, etc.). It allows querying status \"\n\"information of model instances and managing these statuses based on the \"\n\"model's UID.\"\nmsgstr \"\"\n\"`status_guard.py <https://github.com/xorbitsai/inference/tree/main/\"\n\"xinference/core/status_guard.py>`_ 实现了一个状态监视器，用于跟踪模型的\"\n\"状态（如创建、更新、终止等）。它允许根据模型的 UID 查询模型实例的状态信息\"\n\n#: ../../source/development/xinference_internals.rst:263\nmsgid \"\"\n\"`cache_tracker.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/cache_tracker.py>`_\"\n\" defines a cache tracker for recording and managing cache status and \"\n\"information of model versions. It supports recording cache locations and \"\n\"statuses of model versions and querying model version information based \"\n\"on model names.\"\nmsgstr \"\"\n\"`cache_tracker.py <https://github.com/xorbitsai/inference/tree/main/\"\n\"xinference/core/cache_tracker.py>`_ 定义了一个缓存跟踪器，用于记录和管理\"\n\"缓存状态和模型版本信息。它支持记录缓存位置和模型版本的状态，并根据模型\"\n\"名称查询模型版本信息。\"\n\n#: ../../source/development/xinference_internals.rst:267\nmsgid \"\"\n\"`event.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/event.py>`_\"\n\" defines an event collector for gathering and reporting various runtime \"\n\"events of models, such as information, warnings, and errors. `model.py \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/core/model.py>`_\"\n\" defines a Model Actor, the core component for direct model interactions.\"\n\" The Model Actor is responsible for executing model inference requests, \"\n\"handling input and output data streams, and supports various types of \"\n\"model operations.\"\nmsgstr \"\"\n\"`event.py <https://github.com/xorbitsai/inference/tree/main/xinference/\"\n\"core/event.py>`_ 定义了一个事件收集器，用于收集和报告各种运行时模型的事件\"\n\"，如信息、警告和错误。`model.py <https://github.com/xorbitsai/inference/\"\n\"tree/main/xinference/core/model.py>`_ 定义了一个模型 Actor，它是与模型\"\n\"直接交互的核心组件。模型 actor 负责执行模型推理请求，处理输入和输出数据流\"\n\"，并支持各种模型操作。这两个部分都使用 `Xoscar <https://github.com/\"\n\"xorbitsai/xoscar>`_ 用于并发和分布式执行。\"\n\n#: ../../source/development/xinference_internals.rst:273\nmsgid \"\"\n\"`deploy/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/deploy>`_: \"\n\"It provides a command-line interface (CLI) for interacting with the \"\n\"Xinference framework, allowing users to perform operations by command \"\n\"line. See `Command Line`_ for more information.\"\nmsgstr \"\"\n\"`deploy/ <https://github.com/xorbitsai/inference/tree/main/xinference/\"\n\"deploy>`_：它提供了一个命令行界面（CLI），用于与 Xinference 框架进行交互\"\n\"，允许用户通过命令行进行操作。更多信息，请参见 `Command Line`_。\"\n\n#: ../../source/development/xinference_internals.rst:276\nmsgid \"\"\n\"`locale/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/locale>`_: \"\n\"It supports multi-language localization. By simply adding and updating \"\n\"JSON translation files, it becomes possible to support more languages, \"\n\"improving user experience.\"\nmsgstr \"\"\n\"`locale/ <https://github.com/xorbitsai/inference/tree/main/xinference/\"\n\"locale>`_：它支持多语言本地化。只需添加和更新 JSON 翻译文件，就可以支持更\"\n\"多语言，改善用户体验。\"\n\n#: ../../source/development/xinference_internals.rst:279\nmsgid \"\"\n\"`model/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/model>`_: It\"\n\" provides a structure for model descriptions, creation, and caching. See \"\n\"`Model`_ for more information.\"\nmsgstr \"\"\n\"`model/ <https://github.com/xorbitsai/inference/tree/main/xinference/\"\n\"model>`_：它为模型描述、创建和缓存提供了一个框架。请参见 `Model`_ 以获取\"\n\"更多信息。\"\n\n#: ../../source/development/xinference_internals.rst:282\nmsgid \"\"\n\"`web/ui/ \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/web/ui>`_: \"\n\"The js code of the frontend (Web UI).\"\nmsgstr \"\"\n\"`web/ui/ <https://github.com/xorbitsai/inference/tree/main/xinference/web\"\n\"/ui>`_：前端（用户界面）的js代码。\"\n\n#~ msgid \"\"\n#~ \"Xinference supports different types of \"\n#~ \"models including large language models \"\n#~ \"(LLMs), image models, audio models, \"\n#~ \"embedding models, etc\"\n#~ msgstr \"\"\n#~ \"Xinference 支持不同类型的模型，包括大型\"\n#~ \"语言模型（LLM）、图像模型、音频模型、\"\n#~ \"嵌入模型等。所有模型都在 `model/ \"\n#~ \"<https://github.com/xorbitsai/\"\n#~ \"inference/tree/main/xinference/model>`\"\n#~ \"_ 中实现。以 `llm/ <https:/\"\n#~ \"/github.com/xorbitsai/inference/tree/\"\n#~ \"main/xinference/model/llm>`_ 为例\"\n#~ \"，它侧重于 LLM 的管理和实例化。它\"\n#~ \"包括加载、配置和部署 LLM 的详细实现\"\n#~ \"，包括处理不同类型的量化和模型格式。\"\n#~ \"在 `llm/ <https://github.com\"\n#~ \"/xorbitsai/inference/tree/main/xinference\"\n#~ \"/model/llm>`_ 中，它支持许多后\"\n#~ \"端，如 `GGML <https://github.\"\n#~ \"com/xorbitsai/inference/tree/main/\"\n#~ \"xinference/model/llm/ggml>`_、`\"\n#~ \"PyTorch <https://github.com/xorbitsai\"\n#~ \"/inference/tree/main/xinference/model/\"\n#~ \"llm/pytorch>`_、`SGLang <https:\"\n#~ \"//github.com/xorbitsai/inference/tree\"\n#~ \"/main/xinference/model/llm/sglang>`\"\n#~ \"_ 和 `vLLM <https://github.\"\n#~ \"com/xorbitsai/inference/tree/main/\"\n#~ \"xinference/model/llm/vllm>`_。\"\n\n#~ msgid \"\"\n#~ \"Take `llm/ \"\n#~ \"<https://github.com/xorbitsai/inference/tree/main/xinference/model/llm>`_\"\n#~ \" for example, it focuses on the \"\n#~ \"management and instantiation of LLMs. It\"\n#~ \" includes detailed implementations for \"\n#~ \"loading, configuring, and deploying LLMs, \"\n#~ \"including handling different types of \"\n#~ \"quantization and model formats. In `llm/\"\n#~ \" \"\n#~ \"<https://github.com/xorbitsai/inference/tree/main/xinference/model/llm>`_,\"\n#~ \" it supports many backends such as\"\n#~ \" `GGML \"\n#~ \"<https://github.com/xorbitsai/inference/tree/main/xinference/model/llm/ggml>`_,\"\n#~ \" `PyTorch \"\n#~ \"<https://github.com/xorbitsai/inference/tree/main/xinference/model/llm/pytorch>`_,\"\n#~ \" `SGLang \"\n#~ \"<https://github.com/xorbitsai/inference/tree/main/xinference/model/llm/sglang>`_\"\n#~ \" and `vLLM \"\n#~ \"<https://github.com/xorbitsai/inference/tree/main/xinference/model/llm/vllm>`_.\"\n#~ msgstr \"\"\n#~ \"所有模型都在 `model/ <https://\"\n#~ \"github.com/xorbitsai/inference/tree/main\"\n#~ \"/xinference/model>`_ 中实现。以 \"\n#~ \"`llm/ <https://github.com/\"\n#~ \"xorbitsai/inference/tree/main/xinference/\"\n#~ \"model/llm>`_ 为例，它侧重于 LLM\"\n#~ \" 的管理和实例化。它包括加载、配置\"\n#~ \"和部署 LLM 的详细实现，包括处理不同\"\n#~ \"类型的量化和模型格式。在 `llm/ \"\n#~ \"<https://github.com/xorbitsai/\"\n#~ \"inference/tree/main/xinference/model/llm\"\n#~ \">`_ 中，它支持许多后端，如 `\"\n#~ \"GGML <https://github.com/xorbitsai\"\n#~ \"/inference/tree/main/xinference/model/\"\n#~ \"llm/ggml>`_、`PyTorch <https:/\"\n#~ \"/github.com/xorbitsai/inference/tree/\"\n#~ \"main/xinference/model/llm/pytorch>`_\"\n#~ \"、`SGLang <https://github.com/\"\n#~ \"xorbitsai/inference/tree/main/xinference/\"\n#~ \"model/llm/sglang>`_ 和 `vLLM \"\n#~ \"<https://github.com/xorbitsai/\"\n#~ \"inference/tree/main/xinference/model/llm\"\n#~ \"/vllm>`_。\"\n\n#~ msgid \"\"\n#~ \"All models are implemented in `model/\"\n#~ \" \"\n#~ \"<https://github.com/xorbitsai/inference/tree/main/xinference/model>`_.\"\n#~ msgstr \"\"\n#~ \"所有模型在 `model/ <https://\"\n#~ \"github.com/xorbitsai/inference/tree/main\"\n#~ \"/xinference/model>`_ 中实现\"\n\n#~ msgid \"\"\n#~ \"In ``model/llm/``, it supports many \"\n#~ \"backends such as GGML, PyTorch, and \"\n#~ \"vLLM.\"\n#~ msgstr \"在 ``model/llm/`` 下，我们支持了很多后端，比如 GGML、PyTorch、和 vLLM。\"\n\n#~ msgid \"\"\n#~ \"`oscar/ \"\n#~ \"<https://github.com/xorbitsai/inference/tree/main/xinference/client/oscar>`_\"\n#~ \" defines the Actor Client which acts\"\n#~ \" as a client interface for \"\n#~ \"interacting with models deployed in a\"\n#~ \" server environment. It includes \"\n#~ \"functionalities to register/unregister models, \"\n#~ \"launch/terminate models, and interact with \"\n#~ \"different types of models. This part \"\n#~ \"heavily utilizes ``asyncio`` for asynchronous\"\n#~ \" operations. See `Concurrency`_ for more\"\n#~ \" information.\"\n#~ msgstr \"\"\n#~ \"`oscar/ <https://github.com/\"\n#~ \"xorbitsai/inference/tree/main/xinference/\"\n#~ \"client/oscar>`_ 定义了 Actor \"\n#~ \"客户端，它是一个客户端接口，用于与部署\"\n#~ \"在服务器环境中的模型交互。它包括注册/\"\n#~ \"取消注册模型、启动/终止模型，以及与\"\n#~ \"不同类型的模型交互的功能。这部分主要使用\"\n#~ \" ``asyncio`` 进行异步操作。更多\"\n#~ \"信息，请参见 `Concurrency`_。\"\n\n#~ msgid \"Concurrency\"\n#~ msgstr \"并发性\"\n\n#~ msgid \"\"\n#~ \"Both Xinference and Xoscar highly \"\n#~ \"utilize coroutine programming of ``asyncio``.\"\n#~ msgstr \"Xinference 和 Xoscar 都高度利用了 ``asyncio`` 进行协程编程。\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/examples/ai_podcast.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-12-25 17:11+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/examples/ai_podcast.rst:5\nmsgid \"Example: AI Podcast 🎙\"\nmsgstr \"示例：智能播客 🎙\"\n\n#: ../../source/examples/ai_podcast.rst:7\nmsgid \"**Description**:\"\nmsgstr \"描述\"\n\n#: ../../source/examples/ai_podcast.rst:9\nmsgid \"🎙️AI Podcast - Voice Conversations with Multiple Agents on M2 Max 💻\"\nmsgstr \"🎙️AI播客 - 在M2 Max芯片上进行多智能体语音对话\"\n\n#: ../../source/examples/ai_podcast.rst:11\nmsgid \"**Support Language** :\"\nmsgstr \"**支持语言**：\"\n\n#: ../../source/examples/ai_podcast.rst:13\nmsgid \"English (AI_Podcast.py)\"\nmsgstr \"英文对应代码文件：AI_Podcast.py\"\n\n#: ../../source/examples/ai_podcast.rst:15\nmsgid \"Chinese (AI_Podcast_ZH.py)\"\nmsgstr \"中文对应代码文件：AI_Podcast_ZH.py\"\n\n#: ../../source/examples/ai_podcast.rst:17\nmsgid \"**Used Technology (EN version)** :\"\nmsgstr \"英文版本涉及技术：\"\n\n#: ../../source/examples/ai_podcast.rst:19\nmsgid \"\"\n\"@ `OpenAI <https://twitter.com/OpenAI>`_ 's `whisper \"\n\"<https://pypi.org/project/openai-whisper/>`_\"\nmsgstr \"\"\n\"@ `OpenAI <https://twitter.com/OpenAI>`_ `whisper <https://pypi.org/project/openai-whisper/>`_\"\n\n#: ../../source/examples/ai_podcast.rst:21\nmsgid \"\"\n\"@ `ggerganov <https://twitter.com/ggerganov>`_ 's `ggml \"\n\"<https://github.com/ggerganov/ggml>`_\"\nmsgstr \"\"\n\"@ `ggerganov <https://twitter.com/ggerganov>`_ `ggml <https://github.com/ggerganov/ggml>`_\"\n\n#: ../../source/examples/ai_podcast.rst:23\nmsgid \"\"\n\"@ `WizardLM_AI <https://twitter.com/WizardLM_AI>`_ 's `wizardlm v1.0 \"\n\"<https://huggingface.co/WizardLM>`_\"\nmsgstr \"\"\n\"@ `WizardLM_AI <https://twitter.com/WizardLM_AI>`_ `wizardlm v1.0 <https://huggingface.co/WizardLM>`_\"\n\n#: ../../source/examples/ai_podcast.rst:25/\nmsgid \"\"\n\"@ `lmsysorg <https://twitter.com/lmsysorg>`_ 's `vicuna v1.3 \"\n\"<https://huggingface.co/lmsys/vicuna-7b-v1.3>`_\"\nmsgstr \"\"\n\"@ `lmsysorg <https://twitter.com/lmsysorg>`_ `vicuna v1.3 <https://huggingface.co/lmsys/vicuna-7b-v1.3>`_\"\n\n#: ../../source/examples/ai_podcast.rst:27\nmsgid \"@ `Xinference <https://github.com/xorbitsai/inference>`_ as a launcher\"\nmsgstr \"`Xinference <https://github.com/xorbitsai/inference>`_ 作为平台\"\n\n#: ../../source/examples/ai_podcast.rst:29\nmsgid \"**Detailed Explanation on the Demo Functionality** :\"\nmsgstr \"**关于演示功能的详细说明**：\"\n\n#: ../../source/examples/ai_podcast.rst:31\nmsgid \"\"\n\"Generate the Wizardlm Model and Vicuna Model when the program is \"\n\"launching with Xorbits Inference. Initiate the Chatroom by giving the two\"\n\" chatbot their names and telling them that there is a human user called \"\n\"\\\"username\\\", where \\\"username\\\" is given by user's input. Initialize a \"\n\"empty chat history for the chatroom.\"\nmsgstr \"\"\n\"启动 XInference, 部署 Wizardlm 模型和 Vicuna 模型。\"\n\"通过为两个模型指定名称并告诉它们有一个名为“username”的人类用户来启动聊天室，其中“username”是由用户输入提供的。然后为聊天室初始化一个空的聊天历史。\"\n\n#: ../../source/examples/ai_podcast.rst:35\nmsgid \"\"\n\"Use Audio device to store recording into file, and transcribe the file \"\n\"using OpenAI's Whisper to receive a human readable text as string.\"\nmsgstr \"\"\n\"使用音频设备将录音存储到文件中，然后使用OpenAI的Whisper将文件转录为人类可读的文本字符串。\"\n\n#: ../../source/examples/ai_podcast.rst:37\nmsgid \"\"\n\"Based on the input message string, determine which agents the user want \"\n\"to talk to. Call the target agents and parse in the input string and chat\"\n\" history for the model to generate.\"\nmsgstr \"\"\n\"基于输入的消息字符串，确定用户想要与哪些代理（模型）进行对话。调用这些目标代理并将用户输入字符串和聊天历史作为输入让模型去生成对应的内容。\"\n\n#: ../../source/examples/ai_podcast.rst:40\nmsgid \"\"\n\"When the responses are ready, use Macos's \\\"Say\\\" Command to produce \"\n\"audio through speaker. Each agents have their own voice while speaking.\"\nmsgstr \"\"\n\"当模型的输出准备好时，使用MacOS的“Say”命令通过扬声器生成音频。每个代理在说话时都有自己的声音。\"\n\n#: ../../source/examples/ai_podcast.rst:43\nmsgid \"\"\n\"Store the user input and the agent response into chat history, and \"\n\"recursively looping the program until user explicitly says words like \"\n\"\\\"see you\\\" in their responses.\"\nmsgstr \"\"\n\"将用户输入和代理响应存储到聊天历史中，并循环递归程序，直到用户明确在其响应中说出“再见”之类的话语。\"\n\n#: ../../source/examples/ai_podcast.rst:46\nmsgid \"**Highlight Features with Xinference** :\"\nmsgstr \"**Xinference的突出特性**：\"\n\n#: ../../source/examples/ai_podcast.rst:48\nmsgid \"\"\n\"With Xinference's distributed system, we can easily deploy two different \"\n\"models in the same session and in the same \\\"chatroom\\\". With enough \"\n\"resources, the framework can deploy any amount of models you like at the \"\n\"same time.\"\nmsgstr \"\"\n\"借助 Xinference 的分布式系统，我们可以轻松在同一会话和同一“聊天室”中部署两个不同的模型。\"\n\"在足够的资源情况下，该框架可以同时部署任意数量的模型。\"\n\n#: ../../source/examples/ai_podcast.rst:51\nmsgid \"\"\n\"With Xinference, you can deploy the model easily by just adding a few \"\n\"lines of code. For examples, for launching the vicuna model in the demo, \"\n\"just by::\"\nmsgstr \"\"\n\"使用 Xinference，只需添加几行代码就可以轻松部署模型。例如，在演示中启动vicuna模型，只需：\"\n\n#: ../../source/examples/ai_podcast.rst:68\nmsgid \"\"\n\"Then, the Xinference client will handle \\\"target model downloading and \"\n\"caching\\\", \\\"set up environment and process for the model\\\", and \\\"run \"\n\"the service at selected endpoint. \\\" You are now ready to play with your \"\n\"llm model.\"\nmsgstr \"\"\n\"然后，Xinference 客户端将处理“目标模型的下载和缓存”、“为模型设置环境和进程”以及“在选择的端点运行服务”。你现在已经准备好与你的 llm 模型交互。\"\n\n#: ../../source/examples/ai_podcast.rst:71\nmsgid \"**Original Demo Video** :\"\nmsgstr \"**原始演示视频**\"\n\n#: ../../source/examples/ai_podcast.rst:73\nmsgid \"\"\n\"`🎙️AI Podcast - Voice Conversations with Multiple Agents on M2 Max💻🔥🤖 <\"\n\"https://twitter.com/yichaocheng/status/1679129417778442240>`_\"\nmsgstr \"\"\n\"`🎙️AI播客 - 在M2 Max芯片上进行多智能体语音对话💻🔥🤖 <https://twitter.com/yichaocheng/status/1679129417778442240>`_\"\n\n#: ../../source/examples/ai_podcast.rst:75\nmsgid \"**Source Code** :\"\nmsgstr \"**源代码**：\"\n\n#: ../../source/examples/ai_podcast.rst:77\nmsgid \"\"\n\"`AI_Podcast \"\n\"<https://github.com/xorbitsai/inference/blob/main/examples/AI_podcast.py>`_\"\n\" (English Version)\"\nmsgstr \"\"\n\"`AI播客 <https://github.com/xorbitsai/inference/blob/main/examples/AI_podcast.py>`_（英文版）\"\n\n#: ../../source/examples/ai_podcast.rst:79\nmsgid \"\"\n\"`AI_Podcast_ZH \"\n\"<https://github.com/xorbitsai/inference/blob/main/examples/AI_podcast_ZH.py>`_\"\n\" (Chinese Version)\"\nmsgstr \"\"\n\"`AI播客 <https://github.com/xorbitsai/inference/blob/main/examples/AI_podcast_ZH.py>`_（中文版）\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/examples/chatbot.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-11-01 10:48+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/examples/chatbot.rst:5\nmsgid \"Example: CLI chatbot 🤖️\"\nmsgstr \"示例：命令行聊天机器人 🤖️\"\n\n#: ../../source/examples/chatbot.rst:7\nmsgid \"**Description**:\"\nmsgstr \"**描述**：\"\n\n#: ../../source/examples/chatbot.rst:9\nmsgid \"\"\n\"Demonstrate how to interact with Xinference to play with LLM chat \"\n\"functionality with an AI agent in command line💻\"\nmsgstr \"\"\n\"演示如何与 Xinference 交互，在命令行中基于 LLM 的聊天功能与 AI 代理互动。💻\"\n\n#: ../../source/examples/chatbot.rst:11\nmsgid \"**Used Technology**:\"\nmsgstr \"**涉及技术**：\"\n\n#: ../../source/examples/chatbot.rst:13\nmsgid \"\"\n\"@ `ggerganov <https://twitter.com/ggerganov>`_ 's `ggml \"\n\"<https://github.com/ggerganov/ggml>`_\"\nmsgstr \"\"\n\"@ `ggerganov <https://twitter.com/ggerganov>`_ `ggml <https://github.com/ggerganov/ggml>`_\"\n\n#: ../../source/examples/chatbot.rst:15\nmsgid \"@ `Xinference <https://github.com/xorbitsai/inference>`_ as a launcher\"\nmsgstr \"\"\n\"@ `Xinference <https://github.com/xorbitsai/inference>`_ 作为平台\"\n\n#: ../../source/examples/chatbot.rst:17\nmsgid \"\"\n\"@ All LLaMA and Chatglm models supported by `Xorbitsio inference \"\n\"<https://github.com/xorbitsai/inference>`_\"\nmsgstr \"\"\n\"由 `Xinference 推理 <https://github.com/xorbitsai/inference>`_ 支持的所有 LLaMA 和 Chatglm 模型\"\n\n#: ../../source/examples/chatbot.rst:19\nmsgid \"**Detailed Explanation on the Demo Functionality** :\"\nmsgstr \"**关于演示功能的详细说明**：\"\n\n#: ../../source/examples/chatbot.rst:21\nmsgid \"\"\n\"Take the user command line input in the terminal and grab the required \"\n\"parameters for model launching.\"\nmsgstr \"\"\n\"在终端中接受用户的命令行输入，并获取启动模型所需的参数。\"\n\n#: ../../source/examples/chatbot.rst:23\nmsgid \"\"\n\"Launch the Xinference frameworks and automatically deploy the model user \"\n\"demanded into the cluster.\"\nmsgstr \"\"\n\"启动 Xinference 框架，并自动将用户需求的模型部署到集群中。\"\n\n#: ../../source/examples/chatbot.rst:25\nmsgid \"Initialize an empty chat history to store all the context in the chatroom.\"\nmsgstr \"\"\n\"初始化一个空的聊天历史，以存储聊天室中的所有上下文。\"\n\n#: ../../source/examples/chatbot.rst:27\nmsgid \"\"\n\"Recursively ask for user's input as prompt and let the model to generate \"\n\"response based on the prompt and the chat history. Show the Output of the\"\n\" response in the terminal.\"\nmsgstr \"\"\n\"递归地请求用户的输入作为提示词，让模型基于提示词和聊天历史生成响应。在终端中显示响应的输出。\"\n\n#: ../../source/examples/chatbot.rst:30\nmsgid \"\"\n\"Store the user's input and agent's response into the chat history as \"\n\"context for the upcoming rounds.\"\nmsgstr \"\"\n\"将用户的输入和代理的响应存储到聊天历史中，作为即将到来的对话轮次的上下文。\"\n\n#: ../../source/examples/chatbot.rst:32\nmsgid \"**Source Code** :\"\nmsgstr \"**源代码**：\"\n\n#: ../../source/examples/chatbot.rst:33\nmsgid \"\"\n\"`chat \"\n\"<https://github.com/RayJi01/Xprobe_inference/blob/main/examples/chat.py>`_\"\nmsgstr \"\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/examples/gradio_chatinterface.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-11-01 10:48+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/examples/gradio_chatinterface.rst:5\nmsgid \"Example: Gradio ChatInterface🤗\"\nmsgstr \"示例：Gradio 聊天界面🤗\"\n\n#: ../../source/examples/gradio_chatinterface.rst:7\nmsgid \"**Description**:\"\nmsgstr \"**描述**：\"\n\n#: ../../source/examples/gradio_chatinterface.rst:9\nmsgid \"\"\n\"This example showcases how to build a chatbot with 120 lines of code with\"\n\" Gradio ChatInterface and Xinference local LLM\"\nmsgstr \"\"\n\"这个例子展示了如何使用Gradio ChatInterface 聊天界面接口和 Xinference 本地LLM构建一个只有120行代码的聊天机器人。\"\n\n#: ../../source/examples/gradio_chatinterface.rst:11\nmsgid \"**Used Technology**:\"\nmsgstr \"**涉及技术**：\"\n\n#: ../../source/examples/gradio_chatinterface.rst:13\nmsgid \"\"\n\"@ `Xinference <https://github.com/xorbitsai/inference>`_ as a LLM model \"\n\"hosting service\"\nmsgstr \"\"\n\"@ `Xinference <https://github.com/xorbitsai/inference>`_ 作为 LLM 模型托管服务\"\n\n#: ../../source/examples/gradio_chatinterface.rst:15\nmsgid \"\"\n\"@ `Gradio <https://github.com/gradio-app/gradio>`_ as a web interface for\"\n\" the chatbot\"\nmsgstr \"\"\n\"@ `Gradio <https://github.com/gradio-app/gradio>`_ 作为聊天机器人的 Web 界面\"\n\n#: ../../source/examples/gradio_chatinterface.rst:17\nmsgid \"**Detailed Explanation on the Demo Functionality** :\"\nmsgstr \"**关于演示功能的详细说明**：\"\n\n#: ../../source/examples/gradio_chatinterface.rst:19\nmsgid \"\"\n\"Parse user-provided command line arguments to capture essential model \"\n\"parameters such as model name, size, format, and quantization.\"\nmsgstr \"\"\n\"解析用户提供的命令行参数，以捕获关键的模型参数，如模型名称、大小、格式和量化方式。\"\n\n#: ../../source/examples/gradio_chatinterface.rst:21\nmsgid \"\"\n\"Establish a connection to the Xinference framework and deploy the \"\n\"specified model, ensuring it's ready for real-time interactions.\"\nmsgstr \"\"\n\"建立与 Xinference 框架的连接并部署指定的模型，确保它准备好进行实时交互。\"\n\n#: ../../source/examples/gradio_chatinterface.rst:23\nmsgid \"\"\n\"Implement helper functions (flatten and to_chat) to efficiently handle \"\n\"and store chat interactions, ensuring the model has context for \"\n\"generating relevant responses.\"\nmsgstr \"\"\n\"实现辅助函数（flatten和to_chat），以高效处理和存储聊天交互，确保模型具有生成相关响应的上下文。\"\n\n#: ../../source/examples/gradio_chatinterface.rst:25\nmsgid \"\"\n\"Set up an interactive chat interface using Gradio, allowing users to \"\n\"communicate with the model in a user-friendly environment.\"\nmsgstr \"\"\n\"使用 Gradio 设置交互式聊天界面，允许用户在用户友好的环境中与模型进行通信。\"\n\n#: ../../source/examples/gradio_chatinterface.rst:27\nmsgid \"\"\n\"Activate the Gradio web interface, enabling users to start their chat \"\n\"sessions and receive model-generated responses based on their queries.\"\nmsgstr \"\"\n\"启动 Gradio Web 界面，使用户能够开始他们的聊天会话，并根据他们的查询接收模型生成的响应。\"\n\n#: ../../source/examples/gradio_chatinterface.rst:29\nmsgid \"**Source Code** :\"\nmsgstr \"**源代码**：\"\n\n#: ../../source/examples/gradio_chatinterface.rst:30\nmsgid \"\"\n\"`Gradio ChatInterface \"\n\"<https://github.com/xorbitsai/inference/blob/main/examples/gradio_chatinterface.py>`_\"\nmsgstr \"\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/examples/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-12-25 17:11+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/examples/index.rst:5\nmsgid \"Examples\"\nmsgstr \"示例\"\n\n#: ../../source/examples/index.rst:17\nmsgid \"\"\n\"Here you can find examples and resources to learn about how to use \"\n\"Xinference.\"\nmsgstr \"在这里，你可以找到关于如何使用 Xinference 的示例和学习资源。\"\n\n#: ../../source/examples/index.rst:20\nmsgid \"Demos\"\nmsgstr \"示例\"\n\n#: ../../source/examples/index.rst:22\nmsgid \"End-to-end applications of using Xinference:\"\nmsgstr \"使用 Xinference 的端到端应用：\"\n\n#: ../../source/examples/index.rst:24\nmsgid \"`Voice Conversations with AI Agents on M2 Max <ai_podcast.html>`_\"\nmsgstr \"`在M2 Max上与AI代理进行语音对话的播客 <ai_podcast.html>`_\"\n\n#: ../../source/examples/index.rst:26\nmsgid \"`Interacting with LLM Models: A Command-Line Example <chatbot.html>`_\"\nmsgstr \"`与 LLM 模型互动：命令行示例 <chatbot.html>`_\"\n\n#: ../../source/examples/index.rst:28\nmsgid \"\"\n\"`Interacting with LLM Models: A Gradio ChatInterface Example \"\n\"<gradio_chatinterface.html>`_\"\nmsgstr \"`与 LLM 模型互动：Gradio 聊天页面示例 <chatbot.html>`_\"\n\n#: ../../source/examples/index.rst:30\nmsgid \"`PDF Chatbot with Local LLM and Embeddings <pdf_chatbot.html>`_\"\nmsgstr \"`使用本地 LLM 和 embedding 模型的 PDF 聊天机器人 <pdf_chatbot.html>`_\"\n\n#: ../../source/examples/index.rst:32\nmsgid \"\"\n\"`Local Doc Conversations with LangChain and Streamlit \"\n\"<langchain_streamlit_doc_chat.html>`_\"\nmsgstr \"`使用 LangChain 和 Streamlit 进行本地文档对话 <langchain_streamlit_doc_chat.html>`_\"\n\n#: ../../source/examples/index.rst:34\nmsgid \"\"\n\"If you come across other examples in your own workflows we encourage you \"\n\"to contribute a `PR <https://github.com/xorbitsai/inference/pulls>`_!\"\nmsgstr \"如果在你自己的工作流中遇到其他示例，我们鼓励你贡献一个`PR <https://github.com/xorbitsai/inference/pulls>`_！\"\n\n#: ../../source/examples/index.rst:38\nmsgid \"Tutorials\"\nmsgstr \"教程\"\n\n#: ../../source/examples/index.rst:40\nmsgid \"\"\n\"The following tutorials cover the basics of using Xinference in different\"\n\" scenarios:\"\nmsgstr \"以下教程涵盖了在不同场景中使用 Xinference 的基础知识：\"\n\n#: ../../source/examples/index.rst:42\nmsgid \"\"\n\"`[Notebook] Question-answering(QA) Application with Xinference, Milvus \"\n\"and LangChain \"\n\"<https://github.com/RayJi01/Xprobe_inference/blob/main/examples/LangChain_QA.ipynb>`_\"\nmsgstr \"`[Notebook] 使用Xinference、Milvus 和 LangChain 的问答（QA）应用 \"\n\"<https://github.com/RayJi01/Xprobe_inference/blob/main/examples/LangChain_QA.ipynb>`_\"\n\n#: ../../source/examples/index.rst:44\nmsgid \"\"\n\"`Using Xinference local LLMs within LlamaIndex \"\n\"<https://docs.llamaindex.ai/en/stable/examples/llm/xinference_local_deployment.html>`_\"\nmsgstr \"`在 LlamaIndex 中使用 Xinference 本地 LLMs <https://docs.llamaindex.ai/en/stable/examples/llm/xinference_local_deployment.html>`_\"\n\n#: ../../source/examples/index.rst:46\nmsgid \"\"\n\"`[Chinese] 如何让 Chatbox 接入开源大模型，实现免费聊天 <https://zhuanlan.\"\n\"zhihu.com/p/655765551>`_\"\nmsgstr \"\"\n\n#: ../../source/examples/index.rst:48\nmsgid \"\"\n\"`[Chinese] 摆脱 OpenAI 依赖，8 分钟教你用开源生态构建全栈 AI 应用 <https:\"\n\"//mp.weixin.qq.com/s/cXBC0dikldNiGwOwPuJfUQ>`_\"\nmsgstr \"\"\n\n#: ../../source/examples/index.rst:50\nmsgid \"\"\n\"`[Chinese] 使用全套开源工具构建 LLM 应用实战： 在 Dify 调用 Baichuan 开源\"\n\"模型能力 <https://mp.weixin.qq.com/s/JWYWyJxS3ludMpMDZKw_Dw>`_\"\nmsgstr \"\"\n\n#: ../../source/examples/index.rst:54\nmsgid \"Third-Party Library Integrations\"\nmsgstr \"第三方库集成\"\n\n#: ../../source/examples/index.rst:56\nmsgid \"\"\n\"Xinference is designed to seamlessly integrate and deploy open-sourced AI\"\n\" models, so we want to incorporate support for mainstream toolkits in the\"\n\" AI landscape. Xinference can be used with the following third-party \"\n\"libraries:\"\nmsgstr \"\"\n\"Xinference 能够无缝集成和部署开源 AI 模型，因此支持 AI 领域主流工具包。Xinference 可以与以下第三方库一起使用：\"\n\n#: ../../source/examples/index.rst:59\nmsgid \"\"\n\"LangChain `Text Embedding Models \"\n\"<https://python.langchain.com/docs/integrations/text_embedding/xinference>`_\"\n\" and `LLMs \"\n\"<https://python.langchain.com/docs/integrations/llms/xinference>`_\"\nmsgstr \"\"\n\n#: ../../source/examples/index.rst:61\nmsgid \"\"\n\"`LlamaIndex Xinference LLM \"\n\"<https://docs.llamaindex.ai/en/stable/api_reference/llms/xinference.html>`_\"\nmsgstr \"\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/examples/langchain_streamlit_doc_chat.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-12-25 17:11+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:5\nmsgid \"Example: LangChain Streamlit Doc Chat📄\"\nmsgstr \"示例：LangChain Streamlit 文档聊天📄\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:7\nmsgid \"**Description**:\"\nmsgstr \"**描述**：\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:9\nmsgid \"\"\n\"This Streamlit-based application demonstrates a AI chatbot powered by \"\n\"local LLM and embedding models\"\nmsgstr \"这个基于 Streamlit 的应用演示了由本地 LLM 和 embedding 模型提供支持的 AI 聊天机器人。\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:11\nmsgid \"**Used Technology**:\"\nmsgstr \"**涉及技术**：\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:13\nmsgid \"\"\n\"@ `Xinference <https://github.com/xorbitsai/inference>`_: as the LLM and \"\n\"embedding model hosting service\"\nmsgstr \"@ `Xinference <https://github.com/xorbitsai/inference>`_：作为 LLM 和 embedding 模型托管服务\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:15\nmsgid \"\"\n\"@ `LangChain <https://github.com/run-llama/llama_index>`_: orchestrates \"\n\"the entire document processing and query answering pipeline\"\nmsgstr \"@ `LangChain <https://github.com/run-llama/llama_index>`_：编排整个文档处理和查询回答的管道\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:17\nmsgid \"@ `Streamlit <https://streamlit.io/>`_: for interactive user interface\"\nmsgstr \"@ `Streamlit <https://streamlit.io/>`_：用于交互式用户界面\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:19\nmsgid \"**Detailed Explanation on the Demo Functionality** :\"\nmsgstr \"**关于演示功能的详细说明**：\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:21\nmsgid \"Streamlit UI for uploading text files, enhancing user interaction.\"\nmsgstr \"Streamlit 用户界面，用于上传文本文件，提升用户交互。\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:23\nmsgid \"\"\n\"Texts are split into chunks and embedded using Xinference for efficient \"\n\"processing.\"\nmsgstr \"文本被分割成块，并使用 Xinference 进行 embed 操作，以实现高效的处理。\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:25\nmsgid \"\"\n\"Executes similarity searches on embedded texts to pinpoint relevant \"\n\"sections for user queries.\"\nmsgstr \"对嵌入的文本执行相似性搜索，以精确定位用户查询的相关部分。\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:27\nmsgid \"Utilizes a structured prompt template for focused LLM interactions.\"\nmsgstr \"利用结构化的提示词模板与 LLM 模型进行交互。\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:29\nmsgid \"\"\n\"Xinference's LLM processes queries within the context of relevant \"\n\"document parts, providing accurate responses.\"\nmsgstr \"\"\n\"Xinference 的 LLM 在相关文档部分的上下文中处理查询，提供准确的响应。\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:31\nmsgid \"\"\n\"The system facilitates effective and context-sensitive document \"\n\"exploration, aiding users in information retrieval.\"\nmsgstr \"\"\n\"该系统实现了有效的、上下文敏感的文档搜索，帮助用户进行高效信息检索。\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:33\nmsgid \"**Source Code** :\"\nmsgstr \"**源代码**：\"\n\n#: ../../source/examples/langchain_streamlit_doc_chat.rst:34\nmsgid \"\"\n\"`LangChain Streamlit Doc Chat \"\n\"<https://github.com/xorbitsai/inference/blob/main/examples/LangChain_Streamlit_Doc_Chat.py>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/examples/pdf_chatbot.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-11-01 10:48+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/examples/pdf_chatbot.rst:5\nmsgid \"Example: PDF Chatbot📚\"\nmsgstr \"示例：PDF 聊天机器人📚\"\n\n#: ../../source/examples/pdf_chatbot.rst:7\nmsgid \"**Description**:\"\nmsgstr \"**描述**：\"\n\n#: ../../source/examples/pdf_chatbot.rst:9\nmsgid \"\"\n\"This example showcases how to build a PDF chatbot with local LLM and \"\n\"Embedding models\"\nmsgstr \"\"\n\"这个例子展示了如何使用本地 LLM 和 embedding 模型构建PDF聊天机器人。\"\n\n#: ../../source/examples/pdf_chatbot.rst:11\nmsgid \"**Used Technology**:\"\nmsgstr \"**涉及技术**：\"\n\n#: ../../source/examples/pdf_chatbot.rst:13\nmsgid \"\"\n\"@ `Xinference <https://github.com/xorbitsai/inference>`_ as a LLM model \"\n\"hosting service\"\nmsgstr \"@ `Xinference <https://github.com/xorbitsai/inference>`_ 作为LLM模型托管服务\"\n\n#: ../../source/examples/pdf_chatbot.rst:15\nmsgid \"\"\n\"@ `LlamaIndex <https://github.com/run-llama/llama_index>`_ for \"\n\"orchestrating the entire RAG pipeline\"\nmsgstr \"@ `LlamaIndex <https://github.com/run-llama/llama_index>`_ 用于编排整个RAG管道\"\n\n#: ../../source/examples/pdf_chatbot.rst:17\nmsgid \"@ `Streamlit <https://streamlit.io/>`_ for interactive UI\"\nmsgstr \"@ `Streamlit <https://streamlit.io/>`_ 用于交互式用户界面\"\n\n#: ../../source/examples/pdf_chatbot.rst:19\nmsgid \"**Detailed Explanation on the Demo Functionality** :\"\nmsgstr \"**关于演示功能的详细说明**：\"\n\n#: ../../source/examples/pdf_chatbot.rst:21\nmsgid \"\"\n\"Crafted a Dockerfile to simplify the process and ensure easy \"\n\"reproducibility.\"\nmsgstr \"制作了一个Dockerfile，通过 docker 简化了部署流程并确保易于复现。\"\n\n#: ../../source/examples/pdf_chatbot.rst:23\nmsgid \"Set up models with Xinference and expose two ports for accessing them.\"\nmsgstr \"使用 Xinference 拉起 LLM 和 embedding 模型，并暴露两个端口以访问它们。\"\n\n#: ../../source/examples/pdf_chatbot.rst:25\nmsgid \"\"\n\"Leverage Streamlit for seamless file uploads and interactive \"\n\"communication with the chat engine.\"\nmsgstr \"利用 Streamlit 实现无缝文件上传和与聊天引擎的交互通信。\"\n\n#: ../../source/examples/pdf_chatbot.rst:27\nmsgid \"5x faster doc embedding than OpenAI's API.\"\nmsgstr \"文档 embedding 速度比 OpenAI 的 API快5倍。\"\n\n#: ../../source/examples/pdf_chatbot.rst:29\nmsgid \"\"\n\"Leveraging the power of GGML to offload models to the GPU, ensuring swift\"\n\" acceleration. Less long waits for returns.\"\nmsgstr \"利用 GGML 的强大功能将模型置于GPU上运行，确保加速、减少等待返回的时间。\"\n\n#: ../../source/examples/pdf_chatbot.rst:31\nmsgid \"**Source Code** :\"\nmsgstr \"**源代码**：\"\n\n#: ../../source/examples/pdf_chatbot.rst:32\nmsgid \"\"\n\"`PDF Chatbot <https://github.com/onesuper/PDF-Chatbot-Local-LLM-\"\n\"Embeddings>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/environments.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-28 11:54+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/getting_started/environments.rst:5\nmsgid \"Environments Variables\"\nmsgstr \"环境变量\"\n\n#: ../../source/getting_started/environments.rst:8\nmsgid \"XINFERENCE_ENDPOINT\"\nmsgstr \"XINFERENCE_ENDPOINT\"\n\n#: ../../source/getting_started/environments.rst:9\nmsgid \"\"\n\"Endpoint of Xinference, used to connect to Xinference service. Default \"\n\"value is http://127.0.0.1:9997 , you can get it through logs.\"\nmsgstr \"\"\n\"Xinference 的服务地址，用来与 Xinference 连接。默认地址是 \"\n\"http://127.0.0.1:9997，可以在日志中获得这个地址。\"\n\n#: ../../source/getting_started/environments.rst:13\nmsgid \"XINFERENCE_MODEL_SRC\"\nmsgstr \"XINFERENCE_MODEL_SRC\"\n\n#: ../../source/getting_started/environments.rst:14\nmsgid \"\"\n\"Modelhub used for downloading models. Default is \\\"huggingface\\\", or you \"\n\"can set \\\"modelscope\\\" as downloading source.\"\nmsgstr \"配置模型下载仓库。默认下载源是 \\\"huggingface\\\"，也可以设置为 \\\"modelscope\\\" 作为下载源。\"\n\n#: ../../source/getting_started/environments.rst:20\nmsgid \"XINFERENCE_HOME\"\nmsgstr \"XINFERENCE_HOME\"\n\n#: ../../source/getting_started/environments.rst:21\nmsgid \"\"\n\"By default, Xinference uses ``<HOME>/.xinference`` as home path to store \"\n\"necessary files such as logs and models, where ``<HOME>`` is the home \"\n\"path of current user. You can change this directory by configuring this \"\n\"environment variable.\"\nmsgstr \"\"\n\"Xinference 默认使用 ``<HOME>/.xinference`` 作为默认目录来存储模型以及日志等必要的文件。其中 \"\n\"``<HOME>`` 是当前用户的主目录。可以通过配置这个环境变量来修改默认目录。\"\n\n#: ../../source/getting_started/environments.rst:27\nmsgid \"XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD\"\nmsgstr \"XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD\"\n\n#: ../../source/getting_started/environments.rst:28\nmsgid \"\"\n\"The maximum number of failed health checks tolerated at Xinference \"\n\"startup. Default value is 5.\"\nmsgstr \"Xinference启动时允许的最大健康检查失败次数。默认值为5。\"\n\n#: ../../source/getting_started/environments.rst:32\nmsgid \"XINFERENCE_HEALTH_CHECK_INTERVAL\"\nmsgstr \"XINFERENCE_HEALTH_CHECK_INTERVAL\"\n\n#: ../../source/getting_started/environments.rst:33\nmsgid \"Health check interval (seconds) at Xinference startup. Default value is 5.\"\nmsgstr \"Xinference启动时的健康检查间隔（秒）。默认值为5。\"\n\n#: ../../source/getting_started/environments.rst:37\nmsgid \"XINFERENCE_HEALTH_CHECK_TIMEOUT\"\nmsgstr \"XINFERENCE_HEALTH_CHECK_TIMEOUT\"\n\n#: ../../source/getting_started/environments.rst:38\nmsgid \"Health check timeout (seconds) at Xinference startup. Default value is 10.\"\nmsgstr \"Xinference启动时的健康检查超时时间（秒）。默认值为10。\"\n\n#: ../../source/getting_started/environments.rst:42\nmsgid \"XINFERENCE_DISABLE_HEALTH_CHECK\"\nmsgstr \"XINFERENCE_DISABLE_HEALTH_CHECK\"\n\n#: ../../source/getting_started/environments.rst:43\nmsgid \"\"\n\"Xinference will automatically report health check at Xinference startup. \"\n\"Setting this environment to 1 can disable health check.\"\nmsgstr \"在满足条件时，Xinference 会自动汇报worker健康状况，设置改环境变量为 1可以禁用健康检查。\"\n\n#: ../../source/getting_started/environments.rst:47\nmsgid \"XINFERENCE_DISABLE_METRICS\"\nmsgstr \"XINFERENCE_DISABLE_METRICS\"\n\n#: ../../source/getting_started/environments.rst:48\nmsgid \"\"\n\"Xinference will by default enable the metrics exporter on the supervisor \"\n\"and worker. Setting this environment to 1 will disable the /metrics \"\n\"endpoint on the supervisor and the HTTP service (only provide the \"\n\"/metrics endpoint) on the worker.\"\nmsgstr \"\"\n\"Xinference 会默认在 supervisor 和 worker 上启用 metrics exporter。设置环境变量为 1可以在 \"\n\"supervisor 上禁用 /metrics 端点，并在 worker 上禁用 HTTP 服务（仅提供 /metrics 端点）\"\n\n#: ../../source/getting_started/environments.rst:53\nmsgid \"XINFERENCE_DOWNLOAD_MAX_ATTEMPTS\"\nmsgstr \"XINFERENCE_DOWNLOAD_MAX_ATTEMPTS\"\n\n#: ../../source/getting_started/environments.rst:54\nmsgid \"Maximum download retry attempts for model files. Default value is 3.\"\nmsgstr \"模型文件的最大下载重试次数。默认值为3。\"\n\n#: ../../source/getting_started/environments.rst:58\nmsgid \"XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE\"\nmsgstr \"XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE\"\n\n#: ../../source/getting_started/environments.rst:59\nmsgid \"\"\n\"Enable continuous batching for text-to-image models by specifying the \"\n\"target image size (e.g., ``1024*1024``). Default is unset.\"\nmsgstr \"通过指定目标图像尺寸（例如 ``1024*1024`` ）为文本转图像模型启用连续批处理。默认未设置。\"\n\n#: ../../source/getting_started/environments.rst:63\nmsgid \"XINFERENCE_SSE_PING_ATTEMPTS_SECONDS\"\nmsgstr \"XINFERENCE_SSE_PING_ATTEMPTS_SECONDS\"\n\n#: ../../source/getting_started/environments.rst:64\nmsgid \"\"\n\"Server-Sent Events keepalive ping interval (seconds). Default value is \"\n\"600.\"\nmsgstr \"服务器发送事件保持活动状态的ping间隔（秒）。默认值为600。\"\n\n#: ../../source/getting_started/environments.rst:68\nmsgid \"XINFERENCE_MAX_TOKENS\"\nmsgstr \"XINFERENCE_MAX_TOKENS\"\n\n#: ../../source/getting_started/environments.rst:69\nmsgid \"Global max tokens limit override for requests. Default is unset.\"\nmsgstr \"请求的全局最大tokens限制覆盖。默认值为未设置。\"\n\n#: ../../source/getting_started/environments.rst:72\nmsgid \"XINFERENCE_ALLOWED_IPS\"\nmsgstr \"XINFERENCE_ALLOWED_IPS\"\n\n#: ../../source/getting_started/environments.rst:73\nmsgid \"\"\n\"Restrict access to specified IPs or CIDR blocks. Default is unset (no \"\n\"restriction).\"\nmsgstr \"限制访问特定IP地址或CIDR地址块。默认未设置（无限制）。\"\n\n#: ../../source/getting_started/environments.rst:76\nmsgid \"XINFERENCE_BATCH_SIZE\"\nmsgstr \"XINFERENCE_BATCH_SIZE\"\n\n#: ../../source/getting_started/environments.rst:77\nmsgid \"\"\n\"Default batch size used by the server when batching is enabled. Default \"\n\"value is 32.\"\nmsgstr \"启用批处理时服务器使用的默认批处理大小。默认值为32。\"\n\n#: ../../source/getting_started/environments.rst:81\nmsgid \"XINFERENCE_BATCH_INTERVAL\"\nmsgstr \"XINFERENCE_BATCH_INTERVAL\"\n\n#: ../../source/getting_started/environments.rst:82\nmsgid \"Default batching interval (seconds). Default value is 0.003.\"\nmsgstr \"默认批处理间隔（秒）。默认值为0.003。\"\n\n#: ../../source/getting_started/environments.rst:86\nmsgid \"XINFERENCE_ALLOW_MULTI_REPLICA_PER_GPU\"\nmsgstr \"XINFERENCE_ALLOW_MULTI_REPLICA_PER_GPU\"\n\n#: ../../source/getting_started/environments.rst:87\nmsgid \"\"\n\"Whether to allow multiple replicas on a single GPU. Default value is 1 \"\n\"(enabled).\"\nmsgstr \"是否允许在单个GPU上创建多个副本。默认值为1 (启用)。\"\n\n#: ../../source/getting_started/environments.rst:91\nmsgid \"XINFERENCE_LAUNCH_STRATEGY\"\nmsgstr \"XINFERENCE_LAUNCH_STRATEGY\"\n\n#: ../../source/getting_started/environments.rst:92\nmsgid \"\"\n\"GPU allocation strategy for replicas. Default is \"\n\"``IDLE_FIRST_LAUNCH_STRATEGY``.\"\nmsgstr \"副本的GPU分配策略。默认值为 ``IDLE_FIRST_LAUNCH_STRATEGY`` 。\"\n\n#: ../../source/getting_started/environments.rst:95\nmsgid \"XINFERENCE_ENABLE_VIRTUAL_ENV\"\nmsgstr \"XINFERENCE_ENABLE_VIRTUAL_ENV\"\n\n#: ../../source/getting_started/environments.rst:96\nmsgid \"\"\n\"Enable model virtual environments globally. Default value is 1 (enabled, \"\n\"starting from v2.0).\"\nmsgstr \"全局启用模型虚拟环境。默认值为1（启用，自v2.0版本生效）\"\n\n#: ../../source/getting_started/environments.rst:100\nmsgid \"XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED\"\nmsgstr \"XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED\"\n\n#: ../../source/getting_started/environments.rst:101\nmsgid \"\"\n\"Skip packages already present in system site-packages when creating \"\n\"virtual environments. Default value is 1.\"\nmsgstr \"创建虚拟环境时跳过系统site-packages中已存在的包。默认值为1。\"\n\n#: ../../source/getting_started/environments.rst:105\nmsgid \"XINFERENCE_CSG_TOKEN\"\nmsgstr \"XINFERENCE_CSG_TOKEN\"\n\n#: ../../source/getting_started/environments.rst:106\nmsgid \"Authentication token for CSGHub model source. Default is unset.\"\nmsgstr \"CSGHub模型源的认证令牌。默认值为未设置。\"\n\n#: ../../source/getting_started/environments.rst:110\nmsgid \"XINFERENCE_CSG_ENDPOINT\"\nmsgstr \"XINFERENCE_CSG_ENDPOINT\"\n\n#: ../../source/getting_started/environments.rst:111\nmsgid \"\"\n\"CSGHub endpoint for model source. Default value is ``https://hub-\"\n\"stg.opencsg.com/``.\"\nmsgstr \"CSGHub 模型源端点。默认值为 ``https://hub-stg.opencsg.com/`` 。\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-10-16 10:33+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/getting_started/index.rst:5\nmsgid \"Getting Started\"\nmsgstr \"入门指南\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/installation.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-28 11:54+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/getting_started/installation.rst:5\nmsgid \"Installation\"\nmsgstr \"安装\"\n\n#: ../../source/getting_started/installation.rst:6\nmsgid \"\"\n\"Xinference can be installed with ``pip`` on Linux, Windows, and macOS. To\"\n\" run models using Xinference, you will need to install the backend \"\n\"corresponding to the type of model you intend to serve.\"\nmsgstr \"\"\n\"Xinference 在 Linux, Windows, MacOS 上都可以通过 ``pip`` 来安装。如果需要使用 Xinference \"\n\"进行模型推理，可以根据不同的模型指定不同的引擎。\"\n\n#: ../../source/getting_started/installation.rst:8\nmsgid \"\"\n\"If you aim to serve all supported models, you can install all the \"\n\"necessary dependencies with a single command::\"\nmsgstr \"如果你希望能够推理所有支持的模型，可以用以下命令安装所有需要的依赖：\"\n\n#: ../../source/getting_started/installation.rst:14\nmsgid \"\"\n\"Due to irreconcilable package dependency conflicts between vLLM and \"\n\"sglang, we have removed sglang from the all extra. If you want to use \"\n\"sglang, please install it separately via ``pip install \"\n\"'xinference[sglang]'``.\"\nmsgstr \"\"\n\"由于 vllm 和 sglang 在包依赖上无法调和，因此，我们从 all 里移除了 sglang，如果要使用 sglang，请使用 ``pip \"\n\"install 'xinference[sglang]'`` 。\"\n\n#: ../../source/getting_started/installation.rst:17\nmsgid \"Several usage scenarios require special attention.\"\nmsgstr \"某些使用场景需要特别注意。\"\n\n#: ../../source/getting_started/installation.rst:19\nmsgid \"**GGUF format** with **llama.cpp engine**\"\nmsgstr \"**GGUF 格式** 配合 **llama.cpp 引擎** 使用\"\n\n#: ../../source/getting_started/installation.rst:21\nmsgid \"\"\n\"In this situation, it's advised to install its dependencies manually \"\n\"based on your hardware specifications to enable acceleration. For more \"\n\"details, see the :ref:`installation_gguf` section.\"\nmsgstr \"在这种情况下，建议根据您的硬件规格手动安装其依赖项以启用加速。更多详情请参见 :ref:`installation_gguf` 部分。\"\n\n#: ../../source/getting_started/installation.rst:23\nmsgid \"**AWQ or GPTQ** format with **transformers engine**\"\nmsgstr \"**AWQ 或 GPTQ 格式** 配合 **transformers 引擎** 使用\"\n\n#: ../../source/getting_started/installation.rst:25\nmsgid \"**This section is added in v1.6.0.**\"\nmsgstr \"**本节内容新增于 v1.6.0。**\"\n\n#: ../../source/getting_started/installation.rst:27\nmsgid \"\"\n\"This is because the dependencies at this stage require special options \"\n\"and are difficult to install. Please run command below in advance\"\nmsgstr \"这是因为此阶段的依赖项需要特殊选项，并且安装起来比较困难。请提前运行以下命令\"\n\n#: ../../source/getting_started/installation.rst:33\nmsgid \"\"\n\"Some dependencies like ``transformers`` might be downgraded, you can run \"\n\"``pip install \\\"xinference[all]\\\"`` afterwards.\"\nmsgstr \"\"\n\"某些依赖项，如 ``transformers``，可能会被降级，您可以之后运行 ``pip install \"\n\"\\\"xinference[all]\\\"``。\"\n\n#: ../../source/getting_started/installation.rst:36\nmsgid \"\"\n\"If you want to install only the necessary backends, here's a breakdown of\"\n\" how to do it.\"\nmsgstr \"如果你只想安装必要的依赖，接下来是如何操作的详细步骤。\"\n\n#: ../../source/getting_started/installation.rst:41\nmsgid \"Transformers Backend\"\nmsgstr \"Transformers 引擎\"\n\n#: ../../source/getting_started/installation.rst:42\nmsgid \"\"\n\"PyTorch (transformers) supports the inference of most state-of-art \"\n\"models. It is the default backend for models in PyTorch format::\"\nmsgstr \"PyTorch(transformers) 引擎支持几乎有所的最新模型，这是 Pytorch 模型默认使用的引擎：\"\n\n#: ../../source/getting_started/installation.rst:46\nmsgid \"Notes:\"\nmsgstr \"注意：\"\n\n#: ../../source/getting_started/installation.rst:48\nmsgid \"\"\n\"The transformers engine supports ``pytorch`` / ``gptq`` / ``awq`` / \"\n\"``bnb`` / ``fp4`` formats.\"\nmsgstr \"Transformers引擎支持 ``pytorch`` / ``gptq`` / ``awq`` / ``bnb`` / ``fp4`` 格式。\"\n\n#: ../../source/getting_started/installation.rst:49\nmsgid \"\"\n\"FP4 format requires ``transformers`` with ``FPQuantConfig`` support. If \"\n\"you see an import error, please upgrade ``transformers`` to a newer \"\n\"version.\"\nmsgstr \"FP4格式需要支持FPQuantConfig的transformers库。若遇到导入错误，请将transformers升级至新版本。\"\n\n#: ../../source/getting_started/installation.rst:54\nmsgid \"vLLM Backend\"\nmsgstr \"vLLM 引擎\"\n\n#: ../../source/getting_started/installation.rst:55\nmsgid \"\"\n\"vLLM is a fast and easy-to-use library for LLM inference and serving. \"\n\"Xinference will choose vLLM as the backend to achieve better throughput \"\n\"when the following conditions are met:\"\nmsgstr \"vLLM 是一个支持高并发的高性能大模型推理引擎。当满足以下条件时，Xinference 会自动选择 vllm 作为引擎来达到更高的吞吐量：\"\n\n#: ../../source/getting_started/installation.rst:57\nmsgid \"\"\n\"The model format is ``pytorch``, ``gptq``, ``awq``, ``fp4``, ``fp8`` or \"\n\"``bnb``.\"\nmsgstr \"模型格式为 ``pytorch`` ， ``gptq`` ， ``awq`` ， ``fp4`` ， ``fp8`` 或者 ``bnb`` 。\"\n\n#: ../../source/getting_started/installation.rst:58\nmsgid \"When the model format is ``pytorch``, the quantization is ``none``.\"\nmsgstr \"当模型格式为 ``pytorch`` 时，量化选项需为 ``none`` 。\"\n\n#: ../../source/getting_started/installation.rst:59\nmsgid \"When the model format is ``awq``, the quantization is ``Int4``.\"\nmsgstr \"当模型格式为 ``awq`` 时，量化选项需为 ``Int4`` 。\"\n\n#: ../../source/getting_started/installation.rst:60\nmsgid \"\"\n\"When the model format is ``gptq``, the quantization is ``Int3``, ``Int4``\"\n\" or ``Int8``.\"\nmsgstr \"当模型格式为 ``gptq`` 时，量化选项需为 ``Int3`` 、 ``Int4`` 或者 ``Int8`` 。\"\n\n#: ../../source/getting_started/installation.rst:61\nmsgid \"The system is Linux and has at least one CUDA device\"\nmsgstr \"操作系统为 Linux 并且至少有一个支持 CUDA 的设备\"\n\n#: ../../source/getting_started/installation.rst:62\nmsgid \"\"\n\"The model family (for custom models) / model name (for builtin models) is\"\n\" within the list of models supported by vLLM\"\nmsgstr \"自定义模型的 ``model_family`` 字段和内置模型的 ``model_name`` 字段在 vLLM 的支持列表中。\"\n\n#: ../../source/getting_started/installation.rst:64\nmsgid \"Currently, supported models include:\"\nmsgstr \"目前，支持的模型包括：\"\n\n#: ../../source/getting_started/installation.rst:68\nmsgid \"\"\n\"``code-llama``, ``code-llama-instruct``, ``code-llama-python``, \"\n\"``deepseek``, ``deepseek-chat``, ``deepseek-coder``, ``deepseek-coder-\"\n\"instruct``, ``deepseek-r1-distill-llama``, ``gorilla-openfunctions-v2``, \"\n\"``HuatuoGPT-o1-LLaMA-3.1``, ``llama-2``, ``llama-2-chat``, ``llama-3``, \"\n\"``llama-3-instruct``, ``llama-3.1``, ``llama-3.1-instruct``, \"\n\"``llama-3.3-instruct``, ``tiny-llama``, ``wizardcoder-python-v1.0``, \"\n\"``wizardmath-v1.0``, ``Yi``, ``Yi-1.5``, ``Yi-1.5-chat``, ``Yi-1.5-chat-\"\n\"16k``, ``Yi-200k``, ``Yi-chat``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:69\nmsgid \"\"\n\"``codestral-v0.1``, ``mistral-instruct-v0.1``, ``mistral-instruct-v0.2``,\"\n\" ``mistral-instruct-v0.3``, ``mistral-large-instruct``, ``mistral-nemo-\"\n\"instruct``, ``mistral-v0.1``, ``openhermes-2.5``, ``seallm_v2``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:70\nmsgid \"\"\n\"``Baichuan-M2``, ``codeqwen1.5``, ``codeqwen1.5-chat``, ``deepseek-r1\"\n\"-distill-qwen``, ``DianJin-R1``, ``fin-r1``, ``HuatuoGPT-o1-Qwen2.5``, \"\n\"``KAT-V1``, ``marco-o1``, ``qwen1.5-chat``, ``qwen2-instruct``, \"\n\"``qwen2.5``, ``qwen2.5-coder``, ``qwen2.5-coder-instruct``, \"\n\"``qwen2.5-instruct``, ``qwen2.5-instruct-1m``, ``qwenLong-l1``, ``QwQ-\"\n\"32B``, ``QwQ-32B-Preview``, ``seallms-v3``, ``skywork-or1``, ``skywork-\"\n\"or1-preview``, ``XiYanSQL-QwenCoder-2504``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:71\nmsgid \"``llama-3.2-vision``, ``llama-3.2-vision-instruct``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:72\nmsgid \"``baichuan-2``, ``baichuan-2-chat``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:73\nmsgid \"``InternLM2ForCausalLM``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:74\nmsgid \"``qwen-chat``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:75\nmsgid \"\"\n\"``mixtral-8x22B-instruct-v0.1``, ``mixtral-instruct-v0.1``, \"\n\"``mixtral-v0.1``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:76\nmsgid \"``cogagent``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:77\nmsgid \"``glm-edge-chat``, ``glm4-chat``, ``glm4-chat-1m``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:78\nmsgid \"``codegeex4``, ``glm-4v``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:79\nmsgid \"``seallm_v2.5``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:80\nmsgid \"``orion-chat``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:81\nmsgid \"``qwen1.5-moe-chat``, ``qwen2-moe-instruct``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:82\nmsgid \"``CohereForCausalLM``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:83\nmsgid \"\"\n\"``deepseek-v2-chat``, ``deepseek-v2-chat-0628``, ``deepseek-v2.5``, \"\n\"``deepseek-vl2``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:84\nmsgid \"\"\n\"``deepseek-prover-v2``, ``deepseek-r1``, ``deepseek-r1-0528``, \"\n\"``deepseek-v3``, ``deepseek-v3-0324``, ``Deepseek-V3.1``, ``moonlight-\"\n\"16b-a3b-instruct``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:85\nmsgid \"``deepseek-r1-0528-qwen3``, ``qwen3``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:86\nmsgid \"``minicpm3-4b``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:87\nmsgid \"``internlm3-instruct``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:88\nmsgid \"``gemma-3-1b-it``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:89\nmsgid \"``glm4-0414``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:90\nmsgid \"\"\n\"``minicpm-2b-dpo-bf16``, ``minicpm-2b-dpo-fp16``, ``minicpm-2b-dpo-\"\n\"fp32``, ``minicpm-2b-sft-bf16``, ``minicpm-2b-sft-fp32``, ``minicpm4``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:91\nmsgid \"``Ernie4.5``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:92\nmsgid \"``Qwen3-Coder``, ``Qwen3-Instruct``, ``Qwen3-Thinking``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:93\nmsgid \"``glm-4.5``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:94\nmsgid \"``gpt-oss``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:95\nmsgid \"``seed-oss``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:96\nmsgid \"``Qwen3-Next-Instruct``, ``Qwen3-Next-Thinking``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:97\nmsgid \"``DeepSeek-V3.2``, ``DeepSeek-V3.2-Exp``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:98\nmsgid \"``MiniMax-M2``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/installation.rst:101\nmsgid \"To install Xinference and vLLM::\"\nmsgstr \"安装 xinference 和 vLLM：\"\n\n#: ../../source/getting_started/installation.rst:114\nmsgid \"Llama.cpp Backend\"\nmsgstr \"Llama.cpp 引擎\"\n\n#: ../../source/getting_started/installation.rst:115\nmsgid \"\"\n\"Xinference supports models in ``gguf`` format via ``xllamacpp``. \"\n\"`xllamacpp <https://github.com/xorbitsai/xllamacpp>`_ is developed by \"\n\"Xinference team, and is the sole backend for llama.cpp since v1.6.0.\"\nmsgstr \"\"\n\"Xinference 通过 xllamacpp 支持 gguf 格式的模型。`xllamacpp \"\n\"<https://github.com/xorbitsai/xllamacpp>`_ 由 Xinference 团队开发，并从 v1.6.0 \"\n\"开始成为 llama.cpp 的唯一后端。\"\n\n#: ../../source/getting_started/installation.rst:121\nmsgid \"\"\n\"Since Xinference v1.5.0, ``llama-cpp-python`` is deprecated. Since \"\n\"Xinference v1.6.0, ``llama-cpp-python`` has been removed.\"\nmsgstr \"\"\n\"自 Xinference v1.5.0 起，``llama-cpp-python`` 被弃用；在 Xinference 从 v1.6.0 \"\n\"开始，该后端已被移除。\"\n\n#: ../../source/getting_started/installation.rst:124\n#: ../../source/getting_started/installation.rst:134\n#: ../../source/getting_started/installation.rst:143\nmsgid \"Initial setup::\"\nmsgstr \"初始步骤：\"\n\n#: ../../source/getting_started/installation.rst:128\nmsgid \"\"\n\"For more installation instructions for ``xllamacpp`` to enable GPU \"\n\"acceleration, please refer to: https://github.com/xorbitsai/xllamacpp\"\nmsgstr \"\"\n\"更多的 ``xllamacpp`` 安装说明以便开启 GPU \"\n\"加速，请参考：https://github.com/xorbitsai/xllamacpp\"\n\n#: ../../source/getting_started/installation.rst:131\nmsgid \"SGLang Backend\"\nmsgstr \"SGLang 引擎\"\n\n#: ../../source/getting_started/installation.rst:132\nmsgid \"\"\n\"SGLang has a high-performance inference runtime with RadixAttention. It \"\n\"significantly accelerates the execution of complex LLM programs by \"\n\"automatic KV cache reuse across multiple calls. And it also supports \"\n\"other common techniques like continuous batching and tensor parallelism.\"\nmsgstr \"\"\n\"SGLang 具有基于 RadixAttention 的高性能推理运行时。它通过在多个调用之间自动重用KV缓存，显著加速了复杂 LLM \"\n\"程序的执行。它还支持其他常见推理技术，如连续批处理和张量并行处理。\"\n\n#: ../../source/getting_started/installation.rst:140\nmsgid \"MLX Backend\"\nmsgstr \"MLX 引擎\"\n\n#: ../../source/getting_started/installation.rst:141\nmsgid \"MLX-lm is designed for Apple silicon users to run LLM efficiently.\"\nmsgstr \"MLX-lm 用来在苹果 silicon 芯片上提供高效的 LLM 推理。\"\n\n#: ../../source/getting_started/installation.rst:148\nmsgid \"Other Platforms\"\nmsgstr \"其他平台\"\n\n#: ../../source/getting_started/installation.rst:150\nmsgid \":ref:`Ascend NPU <installation_npu>`\"\nmsgstr \"\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/installation_npu.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-07-07 16:58+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/getting_started/installation_npu.rst:6\nmsgid \"Installation Guide for Ascend NPU\"\nmsgstr \"在昇腾 NPU 上安装\"\n\n#: ../../source/getting_started/installation_npu.rst:7\nmsgid \"Xinference can run on Ascend NPU, follow below instructions to install.\"\nmsgstr \"Xinference 能在昇腾 NPU 上运行，使用如下命令安装。\"\n\n#: ../../source/getting_started/installation_npu.rst:11\nmsgid \"\"\n\"The open-source version relies on Transformers for inference, which can \"\n\"be slow on chips like 310p3. We provide an enterprise version that \"\n\"supports the MindIE engine, offering better performance and compatibility\"\n\" for Ascend NPU. Refer to `Xinference Enterprise \"\n\"<https://xinference.io>`_\"\nmsgstr \"\"\n\"开源版本依赖 Transformers 进行推理，在 310p3 等芯片上会存在运行慢的问题。\"\n\"我们提供了支持 MindIE 引擎，性能更为强大，兼容性更好的企业版本来支持 \"\n\"Ascend NPU。详细参考 `Xinference 企业版 <https://xinference.cn>`_\"\n\n#: ../../source/getting_started/installation_npu.rst:18\nmsgid \"Installing PyTorch and Ascend extension for PyTorch\"\nmsgstr \"安装 PyTorch 和昇腾扩展\"\n\n#: ../../source/getting_started/installation_npu.rst:19\nmsgid \"Install PyTorch CPU version and corresponding Ascend extension.\"\nmsgstr \"安装 PyTorch CPU 版本和相应的昇腾扩展。\"\n\n#: ../../source/getting_started/installation_npu.rst:21\nmsgid \"Take PyTorch v2.1.0 as example.\"\nmsgstr \"以 PyTorch v2.1.0 为例。\"\n\n#: ../../source/getting_started/installation_npu.rst:27\nmsgid \"\"\n\"Then install `Ascend extension for PyTorch \"\n\"<https://github.com/Ascend/pytorch>`_.\"\nmsgstr \"接着安装 `昇腾 PyTorch 扩展 <https://gitee.com/ascend/pytorch>`_.\"\n\n#: ../../source/getting_started/installation_npu.rst:35\nmsgid \"Running below command to see if it correctly prints the Ascend NPU count.\"\nmsgstr \"运行如下命令查看，如果正常运行，会打印昇腾 NPU 的个数。\"\n\n#: ../../source/getting_started/installation_npu.rst:42\nmsgid \"Installing Xinference\"\nmsgstr \"安装 Xinference\"\n\n#: ../../source/getting_started/installation_npu.rst:48\nmsgid \"\"\n\"Now you can use xinference according to :ref:`doc <using_xinference>`. \"\n\"``Transformers`` backend is the only available engine supported for \"\n\"Ascend NPU for open source version.\"\nmsgstr \"\"\n\"现在你可以参考 :ref:`文档 <using_xinference>` 来使用 Xinference。``\"\n\"Transformers`` 是开源唯一支持的昇腾 NPU 的引擎。\"\n\n#: ../../source/getting_started/installation_npu.rst:52\nmsgid \"Enterprise Support\"\nmsgstr \"企业支持\"\n\n#: ../../source/getting_started/installation_npu.rst:53\nmsgid \"\"\n\"If you encounter any performance or other issues for Ascend NPU, please \"\n\"reach out to us via `link <https://xinference.io>`_.\"\nmsgstr \"\"\n\"如果你在昇腾 NPU 遇到任何性能和其他问题，欢迎垂询 Xinference 企业版，在 `\"\n\"这里 <https://xinference.cn/contact>`_ 联系我们\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/logging.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-11-15 19:32+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/getting_started/logging.rst:5\nmsgid \"Logging in Xinference\"\nmsgstr \"日志\"\n\n#: ../../source/getting_started/logging.rst:8\nmsgid \"Configure Log Level\"\nmsgstr \"日志等级\"\n\n#: ../../source/getting_started/logging.rst:9\nmsgid \"\"\n\"You can configure the log level with the ``--log-level`` option. For \"\n\"example, starting a local cluster with ``DEBUG`` log level:\"\nmsgstr \"\"\n\"你可以通过 ``--log-level`` 选项来配置 Xinference 集群的日志等级。例如，以\"\n\" ``DEBUG`` 日志等级启动 Xinference 本地集群：\"\n\n#: ../../source/getting_started/logging.rst:18\nmsgid \"Log Files\"\nmsgstr \"日志文件\"\n\n#: ../../source/getting_started/logging.rst:19\nmsgid \"\"\n\"Xinference supports log rotation of log files. By default, logs rotate \"\n\"when they reach 100MB (maxBytes), and up to 30 backup files (backupCount)\"\n\" are kept. Note that the log level configured above takes effect in both \"\n\"the command line logs and the log files.\"\nmsgstr \"\"\n\"Xinference 支持滚动日志文件。默认情况下，当单个日志文件达到 100MB 时会\"\n\"生成新的日志备份文件，系统会保留最近的30份日志备份。上述配置日志等级的\"\n\"方式会同时影响命令行日志和日志文件。\"\n\n#: ../../source/getting_started/logging.rst:24\nmsgid \"Log Directory Structure\"\nmsgstr \"日志目录结构\"\n\n#: ../../source/getting_started/logging.rst:25\nmsgid \"\"\n\"All the logs are stored in the ``<XINFERENCE_HOME>/logs`` directory, \"\n\"where ``<XINFERENCE_HOME>`` can be configured as mentioned in \"\n\":ref:`using_xinference`.\"\nmsgstr \"\"\n\"首先，所有的日志存储在 ``<XINFERENCE_HOME>/logs`` 目录中，其中 ``<\"\n\"XINFERENCE_HOME>`` 的配置方式请参考 :ref:`using_xinference` 。\"\n\n#: ../../source/getting_started/logging.rst:27\nmsgid \"\"\n\"Xinference creates a subdirectory under the log directory \"\n\"``<XINFERENCE_HOME>/logs``. The name of the subdirectory corresponds to \"\n\"the Xinference cluster startup time in milliseconds.\"\nmsgstr \"\"\n\"其次，Xinference 在日志目录 ``<XINFERENCE_HOME>/logs`` 下创建一个子目录。\"\n\"子目录的名称对应于 Xinference 集群启动的时间（以毫秒为单位）。\"\n\n#: ../../source/getting_started/logging.rst:31\nmsgid \"Local deployment\"\nmsgstr \"本地部署\"\n\n#: ../../source/getting_started/logging.rst:32\nmsgid \"\"\n\"In a local deployment, the logs of Xinference supervisor and Xinference \"\n\"workers are combined into a single file. An example of the log directory \"\n\"structure is shown below::\"\nmsgstr \"\"\n\"在本地部署中，Xinference supervisor 和 Xinference workers 的日志被合并到\"\n\"一个文件中。日志目录结构如下所示：\"\n\n#: ../../source/getting_started/logging.rst:38\nmsgid \"\"\n\"where ``1699503558105`` is the timestamp when the Xinference cluster was \"\n\"created. Therefore, when you create a cluster locally multiple times, you\"\n\" can look for the corresponding logs based on this timestamp.\"\nmsgstr \"\"\n\"其中，``1699503558105`` 是 Xinference 集群创建时的时间戳。因此，当你在\"\n\"本地多次创建集群时，可以根据此时间戳查找相应的日志。\"\n\n#: ../../source/getting_started/logging.rst:42\nmsgid \"Distributed deployment\"\nmsgstr \"分布式部署\"\n\n#: ../../source/getting_started/logging.rst:43\nmsgid \"\"\n\"In a distributed deployment, Xinference supervisor and Xinference workers\"\n\" each create their own subdirectory under the log directory. The name of \"\n\"the subdirectory starts with the role name, followed by the role startup \"\n\"time in milliseconds. An example of the log directory structure is shown \"\n\"below::\"\nmsgstr \"\"\n\"在分布式部署中，Xinference supervisor 和 Xinference workers 分别在日志\"\n\"目录下创建自己的子目录。子目录的名称以集群角色名称开头，然后是启动时间（\"\n\"以毫秒为单位）。如下所示：\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/release_notes.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2025, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-03-15 14:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/getting_started/release_notes.rst:4\n#: ../../source/getting_started/release_notes.rst:10\nmsgid \"Release Notes\"\nmsgstr \"版本发布说明\"\n\n#: ../../source/getting_started/release_notes.rst:6\nmsgid \"\"\n\"This page provides a version-by-version index of Xinference release \"\n\"notes. For detailed updates, please visit the corresponding links below.\"\nmsgstr \"\"\n\"本页面提供 Xinference 各版本的发布说明索引。有关详细更新，请访问对应的\"\n\"链接。\"\n\n#: ../../source/getting_started/release_notes.rst:10\nmsgid \"Version\"\nmsgstr \"版本\"\n\n#: ../../source/getting_started/release_notes.rst:12\nmsgid \"v2.3.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:12\nmsgid \"`View release notes <https://xinference.io/release_notes/v2.3.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v2.3.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:14\nmsgid \"v2.2.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:14\nmsgid \"`View release notes <https://xinference.io/release_notes/v2.2.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v2.2.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:16\nmsgid \"v2.1.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:16\nmsgid \"`View release notes <https://xinference.io/release_notes/v2.1.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v2.1.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:18\nmsgid \"v2.0.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:18\nmsgid \"`View release notes <https://xinference.io/release_notes/v2.0.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v2.0.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:20\nmsgid \"v1.17.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:20\nmsgid \"`View release notes <https://xinference.io/release_notes/v1.17.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v1.17.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:22\nmsgid \"v1.16.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:22\nmsgid \"`View release notes <https://xinference.io/release_notes/v1.16.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v1.16.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:24\nmsgid \"v1.15.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:24\nmsgid \"`View release notes <https://xinference.io/release_notes/v1.15.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v1.15.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:26\nmsgid \"v1.14.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:26\nmsgid \"`View release notes <https://xinference.io/release_notes/v1.14.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v1.14.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:28\nmsgid \"v1.13.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:28\nmsgid \"`View release notes <https://xinference.io/release_notes/v1.13.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v1.13.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:30\nmsgid \"v1.12.0\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:30\nmsgid \"`View release notes <https://xinference.io/release_notes/v1.12.0.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v1.12.0.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:32\nmsgid \"v1.11.0.post1\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:32\nmsgid \"\"\n\"`View release notes \"\n\"<https://xinference.io/release_notes/v1.11.0.post1.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v1.11.0.post1.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:34\nmsgid \"v1.10.1\"\nmsgstr \"\"\n\n#: ../../source/getting_started/release_notes.rst:34\nmsgid \"`View release notes <https://xinference.io/release_notes/v1.10.1.html>`_\"\nmsgstr \"`查看版本说明 <https://xinference.cn/release_notes/v1.10.1.html>`_\"\n\n#: ../../source/getting_started/release_notes.rst:39\nmsgid \"\"\n\"For older versions and source history, see our GitHub releases page: \"\n\"https://github.com/xorbitsai/inference/releases\"\nmsgstr \"\"\n\"更多历史版本及源代码，请访问 GitHub Releases：https://github.com/\"\n\"xorbitsai/inference/releases\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/troubleshooting.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-07 15:50+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/getting_started/troubleshooting.rst:5\nmsgid \"Troubleshooting\"\nmsgstr \"故障排除\"\n\n#: ../../source/getting_started/troubleshooting.rst:9\nmsgid \"No huggingface repo access\"\nmsgstr \"没有 huggingface 仓库权限\"\n\n#: ../../source/getting_started/troubleshooting.rst:11\nmsgid \"\"\n\"Sometimes, you may face errors accessing huggingface models, such as the \"\n\"following message when accessing `llama2`:\"\nmsgstr \"\"\n\"获取模型时，有时候会遇到权限问题。比如在获取 ``llama2`` 模型时可能会有\"\n\"以下提示：\"\n\n#: ../../source/getting_started/troubleshooting.rst:18\nmsgid \"\"\n\"This typically indicates either a lack of access rights to the repository\"\n\" or missing huggingface access tokens. The following sections provide \"\n\"guidance on addressing these issues.\"\nmsgstr \"\"\n\"这种情况一般是缺少 huggingface 仓库的权限，或者是没有配置 huggingface \"\n\"token。可以按照接下来的方式解决这个问题。\"\n\n#: ../../source/getting_started/troubleshooting.rst:22\nmsgid \"Get access to the huggingface repo\"\nmsgstr \"申请 huggingface 仓库权限\"\n\n#: ../../source/getting_started/troubleshooting.rst:24\nmsgid \"\"\n\"To obtain access, navigate to the desired huggingface repository and \"\n\"agree to its terms and conditions. As an illustration, for the `llama2` \"\n\"model, you can use this link: `https://huggingface.co/meta-llama/Llama-2\"\n\"-7b-hf <https://huggingface.co/meta-llama/Llama-2-7b-hf>`_.\"\nmsgstr \"\"\n\"想要获取访问权限，打开对应的 huggingface 仓库，同意其条款和注意事项。以 `\"\n\"`llama2`` 为例，可以打开这个链接去申请：`https://huggingface.co/meta-\"\n\"llama/Llama-2-7b-hf <https://huggingface.co/meta-llama/Llama-2-7b-hf>`_.\"\n\n#: ../../source/getting_started/troubleshooting.rst:29\nmsgid \"Set up credentials to access huggingface\"\nmsgstr \"设置访问 huggingface 凭证\"\n\n#: ../../source/getting_started/troubleshooting.rst:31\nmsgid \"\"\n\"Your credential to access huggingface can be found online at \"\n\"`https://huggingface.co/settings/tokens \"\n\"<https://huggingface.co/settings/tokens>`_.\"\nmsgstr \"\"\n\"可以在 huggingface 页面找到凭证，`https://huggingface.co/settings/tokens \"\n\"<https://huggingface.co/settings/tokens>`_.\"\n\n#: ../../source/getting_started/troubleshooting.rst:33\nmsgid \"\"\n\"You can set the token as an environmental variable, with ``export \"\n\"HUGGING_FACE_HUB_TOKEN=your_token_here``.\"\nmsgstr \"\"\n\"可以通过设置环境变量设置访问凭证，``export HUGGING_FACE_HUB_TOKEN=your_\"\n\"token_here``。\"\n\n#: ../../source/getting_started/troubleshooting.rst:37\nmsgid \"Incompatibility Between NVIDIA Driver and PyTorch Version\"\nmsgstr \"英伟达驱动和 PyTorch 版本不匹配\"\n\n#: ../../source/getting_started/troubleshooting.rst:39\nmsgid \"If you are using a NVIDIA GPU, you may face the following error:\"\nmsgstr \"如果你在使用英伟达显卡，你可能会遇到以下错误：\"\n\n#: ../../source/getting_started/troubleshooting.rst:50\nmsgid \"\"\n\"This typically indicates that your CUDA driver version is not compatible \"\n\"with the PyTorch version you are using.\"\nmsgstr \"这种情况一般是 CUDA 的版本和 Pytorch 版本不兼容导致的。\"\n\n#: ../../source/getting_started/troubleshooting.rst:52\nmsgid \"\"\n\"Go to `https://pytorch.org <https://pytorch.org>`_ to install a PyTorch \"\n\"version that has been compiled with your version of the CUDA driver. **Do\"\n\" not install a cuda version smaller than 11.8, preferably between 11.8 \"\n\"and 12.1.**\"\nmsgstr \"\"\n\"可以到 `https://pytorch.org <https://pytorch.org>`_ 官网安装和 CUDA 对应\"\n\"的预编译版本的 PyTorch。同时，**请检查安装的 CUDA 版本不要小于 11.8，最好\"\n\"版本在 11.8 到 12.1之间。**\"\n\n#: ../../source/getting_started/troubleshooting.rst:55\nmsgid \"\"\n\"Say if your CUDA driver version is 11.8, then you can install PyTorch \"\n\"with the following command:\"\nmsgstr \"比如你的 CUDA 版本是 11.8，可以使用以下命令安装对应的 PyTorch：\"\n\n#: ../../source/getting_started/troubleshooting.rst:63\nmsgid \"\"\n\"Xinference service cannot be accessed from external systems through \"\n\"``<IP>:9997``\"\nmsgstr \"外部系统无法通过 ``<IP>:9997`` 访问 Xinference 服务\"\n\n#: ../../source/getting_started/troubleshooting.rst:65\nmsgid \"Use ``-H 0.0.0.0`` parameter in when starting Xinference:\"\nmsgstr \"在启动 Xinference 时记得要加上 ``-H 0.0.0.0`` 参数:\"\n\n#: ../../source/getting_started/troubleshooting.rst:71\nmsgid \"\"\n\"Then Xinference service will listen on all network interfaces (not \"\n\"limited to ``127.0.0.1`` or ``localhost``).\"\nmsgstr \"\"\n\"那么 Xinference 服务将监听所有网络接口（而不仅限于 ``127.0.0.1`` 或 ``\"\n\"localhost``）。\"\n\n#: ../../source/getting_started/troubleshooting.rst:73\nmsgid \"\"\n\"If you are using the :ref:`using_docker_image`, please add ``-p \"\n\"<PORT>:9997`` during the docker run command, then access is available \"\n\"through ``<IP>:<PORT>`` of the local machine.\"\nmsgstr \"\"\n\"如果使用的是 :ref:`using_docker_image`，请在 Docker 运行命令中 加上 ``-p \"\n\"<PORT>:9997`` ，，你就可以通过本地机器的 ``<IP>:<PORT>`` 进行访问。\"\n\n#: ../../source/getting_started/troubleshooting.rst:78\nmsgid \"\"\n\"Launching a built-in model takes a long time, and sometimes the model \"\n\"fails to download\"\nmsgstr \"启动内置模型需要很长时间，模型有时下载失败\"\n\n#: ../../source/getting_started/troubleshooting.rst:80\nmsgid \"\"\n\"Xinference by default uses HuggingFace as the source for models. If your \"\n\"machines are in Mainland China, there might be accessibility issues when \"\n\"using built-in models.\"\nmsgstr \"\"\n\"Xinference 默认使用 HuggingFace作为模型源。如果你的机器在中国大陆，使用\"\n\"内置模型可能会有访问问题。\"\n\n#: ../../source/getting_started/troubleshooting.rst:84\nmsgid \"\"\n\"To address this, add environment variable \"\n\"``XINFERENCE_MODEL_SRC=modelscope`` when starting the Xinference to \"\n\"change the model source to ModelScope, which is optimized for Mainland \"\n\"China.\"\nmsgstr \"\"\n\"要解决这个问题，可以在启动 Xinference 时添加环境变量 ``XINFERENCE_MODEL_\"\n\"SRC=modelscope``，将模型源更改为 ModelScope，在中国大陆速度下载更快。\"\n\n#: ../../source/getting_started/troubleshooting.rst:88\nmsgid \"\"\n\"If you’re starting Xinference with Docker, include ``-e XINFERENCE_MODEL\"\n\"_SRC=modelscope`` during the docker run command.\"\nmsgstr \"\"\n\"如果你用 Docker 启动 Xinference，可以在 Docker 命令中包含 ``-e XINFERENCE\"\n\"_MODEL_SRC=modelscope`` 选项。\"\n\n#: ../../source/getting_started/troubleshooting.rst:92\nmsgid \"\"\n\"When using the official Docker image, RayWorkerVllm died due to OOM, \"\n\"causing the model to fail to load\"\nmsgstr \"使用官方 Docker 映像时，RayWorkerVllm 因 OOM 而死亡，导致模型无法加载\"\n\n#: ../../source/getting_started/troubleshooting.rst:94\nmsgid \"\"\n\"Docker's ``--shm-size`` parameter is used to set the size of shared \"\n\"memory. The default size of shared memory (/dev/shm) is 64MB, which may \"\n\"be too small for vLLM backend.\"\nmsgstr \"\"\n\"Docker 的 ``--shm-size`` 参数可以用来设置共享内存的大小。共享内存(/dev/\"\n\"shm)的默认大小是 64MB，对于 vLLM 后端来说可能不够。\"\n\n#: ../../source/getting_started/troubleshooting.rst:98\nmsgid \"\"\n\"You can increase its size by setting the ``--shm-size`` parameter as \"\n\"follows:\"\nmsgstr \"你可以通过设置参数 ``--shm-size`` 来增加它的大小：\"\n\n#: ../../source/getting_started/troubleshooting.rst:106\nmsgid \"Missing ``model_engine`` parameter when launching LLM models\"\nmsgstr \"加载 LLM 模型时提示缺失 ``model_engine`` 参数\"\n\n#: ../../source/getting_started/troubleshooting.rst:108\nmsgid \"\"\n\"Since version ``v0.11.0``, launching LLM models requires an additional \"\n\"``model_engine`` parameter. For specific information, please refer to \"\n\":ref:`here <about_model_engine>`.\"\nmsgstr \"\"\n\"自 ``v0.11.0`` 版本开始，加载 LLM 模型时需要传入额外参数 ``model_engine``\"\n\" 。具体信息请参考 :ref:`这里 <about_model_engine>` 。\"\n\n#: ../../source/getting_started/troubleshooting.rst:112\nmsgid \"Resolving MKL Threading Layer Conflicts\"\nmsgstr \"解决 MKL 线程层冲突\"\n\n#: ../../source/getting_started/troubleshooting.rst:114\nmsgid \"\"\n\"When starting the Xinference server, you may encounter the error: \"\n\"``ValueError: Model architectures ['Qwen2ForCausalLM'] failed to be \"\n\"inspected. Please check the logs for more details.``\"\nmsgstr \"\"\n\"在启动 Xinference 服务器时，如果遇到错误：``ValueError: Model \"\n\"architectures ['Qwen2ForCausalLM'] failed to be inspected. . Please check\"\n\" the logs for more details.``\"\n\n#: ../../source/getting_started/troubleshooting.rst:116\nmsgid \"The underlying cause shown in the logs is:\"\nmsgstr \"日志中显示的根本原因是：\"\n\n#: ../../source/getting_started/troubleshooting.rst:123\nmsgid \"\"\n\"This typically occurs when NumPy was installed via conda. Conda's NumPy \"\n\"is built with Intel MKL optimizations, which conflicts with the GNU \"\n\"OpenMP library (libgomp) already loaded in your environment.\"\nmsgstr \"\"\n\"这通常是因为你的 NumPy 是通过 conda 安装的，而 conda 的 NumPy 是使用 \"\n\"Intel MKL 优化构建的，这导致它与环境中已加载的 GNU OpenMP 库（libgomp）\"\n\"产生冲突。\"\n\n#: ../../source/getting_started/troubleshooting.rst:126\nmsgid \"Solution 1: Override the Threading Layer\"\nmsgstr \"解决方案 1：重写线程层\"\n\n#: ../../source/getting_started/troubleshooting.rst:128\nmsgid \"Force Intel's Math Kernel Library to use GNU's OpenMP implementation:\"\nmsgstr \"\"\n\"设置 MKL_THREADING_LAYER=GNU 可以强制 Intel 数学核心库（MKL）使用 GNU 的 \"\n\"OpenMP 实现：\"\n\n#: ../../source/getting_started/troubleshooting.rst:135\nmsgid \"Solution 2: Reinstall NumPy with pip\"\nmsgstr \"解决方案 2：使用 pip 重新安装 NumPy\"\n\n#: ../../source/getting_started/troubleshooting.rst:137\nmsgid \"Uninstall conda's NumPy and reinstall using pip:\"\nmsgstr \"卸载 conda 安装的 numpy，然后使用 pip 重新安装。\"\n\n#: ../../source/getting_started/troubleshooting.rst:146\nmsgid \"Related Note: vLLM and PyTorch\"\nmsgstr \"相关说明：vLLM 与 PyTorch\"\n\n#: ../../source/getting_started/troubleshooting.rst:148\nmsgid \"\"\n\"If you're using vLLM, avoid installing PyTorch with conda. Refer to the \"\n\"official vLLM installation guide for GPU-specific instructions: \"\n\"https://docs.vllm.ai/en/latest/getting_started/installation/gpu.html\"\nmsgstr \"\"\n\"如果你在使用 vLLM，请避免通过 conda 安装 PyTorch。有关特定 GPU 的安装说明\"\n\"，请参阅 vLLM 官方安装指南：https://docs.vllm.ai/en/latest/getting_\"\n\"started/installation/gpu.html\"\n\n#: ../../source/getting_started/troubleshooting.rst:151\nmsgid \"Configuring PyPI Mirrors to Speed Up Package Installation\"\nmsgstr \"配置 PyPI 镜像以加快软件包安装速度\"\n\n#: ../../source/getting_started/troubleshooting.rst:153\nmsgid \"\"\n\"If you're in Mainland China, using a PyPI mirror can significantly speed \"\n\"up package installation. Here are some commonly used mirrors:\"\nmsgstr \"\"\n\"如果你在中国大陆，使用 PyPI 镜像可以显著加快软件包的安装速度。以下是一些\"\n\"常用的镜像源：\"\n\n#: ../../source/getting_started/troubleshooting.rst:155\nmsgid \"Tsinghua University: ``https://pypi.tuna.tsinghua.edu.cn/simple``\"\nmsgstr \"清华大学镜像：``https://pypi.tuna.tsinghua.edu.cn/simple``\"\n\n#: ../../source/getting_started/troubleshooting.rst:156\nmsgid \"Alibaba Cloud: ``https://mirrors.aliyun.com/pypi/simple/``\"\nmsgstr \"阿里云镜像：``https://mirrors.aliyun.com/pypi/simple/``\"\n\n#: ../../source/getting_started/troubleshooting.rst:157\nmsgid \"Tencent Cloud: ``https://mirrors.cloud.tencent.com/pypi/simple``\"\nmsgstr \"腾讯云镜像：``https://mirrors.cloud.tencent.com/pypi/simple``\"\n\n#: ../../source/getting_started/troubleshooting.rst:159\nmsgid \"\"\n\"However, be aware that some packages may not be available on certain \"\n\"mirrors. For example, if you're installing ``xinference[audio]`` using \"\n\"only the Aliyun mirror, the installation may fail.\"\nmsgstr \"\"\n\"但请注意，某些镜像源上可能缺少部分软件包。例如，如果你仅使用阿里云镜像\"\n\"安装 ``xinference[audio]``，安装可能会失败。\"\n\n#: ../../source/getting_started/troubleshooting.rst:161\nmsgid \"\"\n\"This happens because ``num2words``, a dependency used by ``MeloTTS``, is \"\n\"not available on the Aliyun mirror. As a result, ``pip install \"\n\"xinference[audio]`` will resolve to older versions like \"\n\"``xinference==1.2.0`` and ``xoscar==0.8.0`` (as of Oct 27, 2025).\"\nmsgstr \"\"\n\"这是因为 ``MeloTTS`` 所依赖的 ``num2words`` 软件包在阿里云镜像上不可用。\"\n\"因此，在执行 ``pip install xinference[audio]`` 时，可能会回退安装旧版本，\"\n\"如 ``xinference==1.2.0`` 和 ``xoscar==0.8.0`` （截至 2025 年 10 月 27 日\"\n\"）。\"\n\n#: ../../source/getting_started/troubleshooting.rst:163\nmsgid \"\"\n\"These older versions are incompatible and will produce the error: \"\n\"``MainActorPool.append_sub_pool() got an unexpected keyword argument \"\n\"'start_method'``\"\nmsgstr \"\"\n\"这些旧版本不兼容，会导致以下错误：``MainActorPool.append_sub_pool() got \"\n\"an unexpected keyword argument 'start_method'``\"\n\n#: ../../source/getting_started/troubleshooting.rst:174\nmsgid \"\"\n\"To avoid this issue when installing the xinference audio package, use \"\n\"multiple mirrors:\"\nmsgstr \"为避免在安装 xinference 音频包时出现此问题，建议同时使用多个镜像源：\"\n\n#: ../../source/getting_started/troubleshooting.rst:188\nmsgid \"Installing Xinference 1.12.0 with uv Fails (As of November 2025)\"\nmsgstr \"使用 uv 安装 Xinference 1.12.0 失败（截至 2025 年 11 月）\"\n\n#: ../../source/getting_started/troubleshooting.rst:190\nmsgid \"\"\n\"**Note:** This is a temporary issue due to the current package ecosystem \"\n\"and uv prioritizing **higher versions for direct dependencies** over \"\n\"**indirect dependencies**.\"\nmsgstr \"\"\n\"**注意：** 这是一个临时性问题，原因在于当前的软件包生态系统以及 uv 的依赖\"\n\"解析策略——它会优先选择 **直接依赖的高版本**，而不是 **间接依赖的版本**。\"\n\n#: ../../source/getting_started/troubleshooting.rst:193\n#: ../../source/getting_started/troubleshooting.rst:250\nmsgid \"Symptom\"\nmsgstr \"症状\"\n\n#: ../../source/getting_started/troubleshooting.rst:195\nmsgid \"\"\n\"When installing xinference 1.12.0 as of November 2025 using ``uv pip \"\n\"install xinference``, you may encounter an issue where very old package \"\n\"versions are installed, particularly:\"\nmsgstr \"\"\n\"在 2025 年 11 月使用 ``uv pip install xinference`` 安装 xinference 1.12.0\"\n\" 时，你可能会遇到安装到非常旧版本依赖包的问题，尤其是：\"\n\n#: ../../source/getting_started/troubleshooting.rst:197\nmsgid \"``transformers==4.12.2`` (from 2021)\"\nmsgstr \"``transformers==4.12.2`` （来自 2021 年的版本）\"\n\n#: ../../source/getting_started/troubleshooting.rst:198\nmsgid \"``tokenizers==0.10.3`` (from 2021)\"\nmsgstr \"``tokenizers==0.10.3`` （来自 2021 年的版本）\"\n\n#: ../../source/getting_started/troubleshooting.rst:199\nmsgid \"``huggingface-hub==1.0.1``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/troubleshooting.rst:201\nmsgid \"Then uv fails with \\\"Failed to build `tokenizers==0.10.3`\\\"\"\nmsgstr \"\"\n\"随后 uv 报错：\\\"Failed to build `tokenizers==0.10.3`\\\"（构建 `tokenizers=\"\n\"=0.10.3` 失败）\"\n\n#: ../../source/getting_started/troubleshooting.rst:204\n#: ../../source/getting_started/troubleshooting.rst:261\nmsgid \"Root Cause\"\nmsgstr \"根本原因\"\n\n#: ../../source/getting_started/troubleshooting.rst:206\nmsgid \"\"\n\"This occurs because uv prioritizes **higher versions for direct \"\n\"dependencies** over **indirect dependencies**:\"\nmsgstr \"\"\n\"出现该问题的原因是 uv 会优先选择 **直接依赖的高版本**，而忽略 **间接依赖*\"\n\"* 中的版本要求：\"\n\n#: ../../source/getting_started/troubleshooting.rst:208\nmsgid \"\"\n\"xinference 1.12.0 specifies ``huggingface-hub>=0.19.4`` as a **direct \"\n\"dependency** (no upper bound)\"\nmsgstr \"\"\n\"xinference 1.12.0 将 ``huggingface-hub>=0.19.4`` 指定为 **直接依赖** （\"\n\"没有上限约束）\"\n\n#: ../../source/getting_started/troubleshooting.rst:209\nmsgid \"uv selects the latest: ``huggingface-hub==1.0.1`` as of November 06 2025\"\nmsgstr \"截至 2025 年 11 月 6 日，uv 会选择最新版本：``huggingface-hub==1.0.1``\"\n\n#: ../../source/getting_started/troubleshooting.rst:210\nmsgid \"\"\n\"However, ``transformers<=4.57.3`` (an **indirect dependency** via \"\n\"``peft``) requires ``huggingface-hub<1.0``\"\nmsgstr \"\"\n\"然而，``transformers<=4.57.3`` （通过 ``peft`` 引入的 **间接依赖** ）要求 ``\"\n\"huggingface-hub<1.0``\"\n\n#: ../../source/getting_started/troubleshooting.rst:211\nmsgid \"\"\n\"To resolve the conflict, uv keeps the direct dependency at 1.0.1 and \"\n\"downgrades the indirect dependency ``transformers`` to ancient version \"\n\"4.12.2\"\nmsgstr \"\"\n\"为了解决依赖冲突，uv 保留了直接依赖 ``huggingface-hub==1.0.1``，并将间接\"\n\"依赖 ``transformers`` 降级到了非常旧的版本 4.12.2。\"\n\n#: ../../source/getting_started/troubleshooting.rst:213\nmsgid \"\"\n\"**This is by design in uv**: it prioritizes what you explicitly ask for \"\n\"(direct dependencies) over transitive dependencies. Refer to \"\n\"https://github.com/astral-sh/uv/issues/16601\"\nmsgstr \"\"\n\"**这属于 uv 的设计特性**：它会优先满足你显式指定的依赖（直接依赖），而非\"\n\"传递依赖。参考链接：https://github.com/astral-sh/uv/issues/16601\"\n\n#: ../../source/getting_started/troubleshooting.rst:215\nmsgid \"\"\n\"**Update:** The latest transformers 4.57.3 (as in 2026.01.05) still \"\n\"requires ``huggingface-hub<1.0``.\"\nmsgstr \"\"\nmsgstr \"\"\n\"**更新：** 截至 2026.01.05，transformers 最新版本 4.57.3 依然 \"\n\"依赖 ``huggingface-hub<1.0``。\"\n\n#: ../../source/getting_started/troubleshooting.rst:218\nmsgid \"Solutions\"\nmsgstr \"解决方案\"\n\n#: ../../source/getting_started/troubleshooting.rst:220\nmsgid \"**Solution 1: Pre-constrain huggingface-hub (Recommended)**\"\nmsgstr \"**解决方案 1：预先限定 huggingface-hub 版本（推荐）**\"\n\n#: ../../source/getting_started/troubleshooting.rst:222\nmsgid \"Explicitly constrain ``huggingface-hub`` to a compatible version range:\"\nmsgstr \"显式地将 ``huggingface-hub`` 限定在一个兼容的版本范围内：\"\n\n#: ../../source/getting_started/troubleshooting.rst:228\nmsgid \"\"\n\"This forces uv to select a ``huggingface-hub`` version that's compatible \"\n\"with modern ``transformers``.\"\nmsgstr \"\"\n\"这样可以强制 uv 选择与现代版本 ``transformers`` 兼容的 ``huggingface-hub`\"\n\"` 版本。\"\n\n#: ../../source/getting_started/troubleshooting.rst:230\nmsgid \"**Solution 2: Make transformers a direct dependency**\"\nmsgstr \"**解决方案 2：将 transformers 设为直接依赖**\"\n\n#: ../../source/getting_started/troubleshooting.rst:232\nmsgid \"\"\n\"By specifying ``transformers`` explicitly, it becomes a direct dependency\"\n\" and uv will prefer higher versions:\"\nmsgstr \"通过显式指定 ``transformers``，它会成为直接依赖，uv 将优先选择更高版本：\"\n\n#: ../../source/getting_started/troubleshooting.rst:238\nmsgid \"**Solution 3: Use pip**\"\nmsgstr \"**解决方案 3：使用 pip**\"\n\n#: ../../source/getting_started/troubleshooting.rst:240\nmsgid \"\"\n\"Or just resort to using ``pip install xinference`` which will resolve to \"\n\"the following versions\"\nmsgstr \"或者直接使用 ``pip install xinference``，它会自动解析到以下版本组合：\"\n\n#: ../../source/getting_started/troubleshooting.rst:242\nmsgid \"``transformers==4.57.1``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/troubleshooting.rst:243\nmsgid \"``huggingface-hub==0.36.0``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/troubleshooting.rst:244\nmsgid \"``tokenizers==0.22.1``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/troubleshooting.rst:247\nmsgid \"vLLM + Torch + Xinference Compatibility Issue (Segmentation Fault)\"\nmsgstr \"vLLM + Torch + Xinference 兼容性问题（段错误）\"\n\n#: ../../source/getting_started/troubleshooting.rst:252\nmsgid \"\"\n\"If you have **vLLM < 0.12.0** installed and upgrade xinference \"\n\"(particularly using ``uv pip install -U xinference``), xinference may \"\n\"fail to start with a segmentation fault:\"\nmsgstr \"\"\n\"如果你安装的是 **vLLM < 0.12.0**，并且升级了 xinference \"\n\"（尤其是使用 ``uv pip install -U xinference`` 时），\"\n\"xinference 可能会在启动时因为段错误而失败：\"\n\n#: ../../source/getting_started/troubleshooting.rst:263\nmsgid \"This issue has three contributing factors:\"\nmsgstr \"该问题由三个因素共同导致：\"\n\n#: ../../source/getting_started/troubleshooting.rst:265\nmsgid \"\"\n\"**Binary Incompatibility**: vLLM versions before 0.12.0 were compiled \"\n\"against PyTorch 2.8.0. These versions are incompatible with PyTorch 2.9. \"\n\"Reference: `vLLM v0.12.0 Release Notes <https://github.com/vllm-\"\n\"project/vllm/releases/tag/v0.12.0>`_\"\nmsgstr \"\"\n\"**二进制不兼容**：vLLM 在 0.12.0 之前的版本是基于 PyTorch 2.8.0 编译的，\"\n\"这些版本与 PyTorch 2.9 不兼容。\"\n\"参考：`vLLM v0.12.0 发布说明 <https://github.com/vllm-\"\n\"project/vllm/releases/tag/v0.12.0>`_\"\n\n#: ../../source/getting_started/troubleshooting.rst:267\nmsgid \"\"\n\"**Xinference's Unbounded Torch Dependency**: Xinference's ``setup.cfg`` \"\n\"does not specify an upper bound for PyTorch:\"\nmsgstr \"\"\n\"**Xinference 对 Torch 依赖未设置上限**：Xinference 的 ``setup.cfg`` \"\n\"中没有为 PyTorch 指定版本上限：\"\n\n#: ../../source/getting_started/troubleshooting.rst:275\nmsgid \"This allows package managers to upgrade PyTorch to incompatible versions.\"\nmsgstr \"\"\n\n#: ../../source/getting_started/troubleshooting.rst:277\nmsgid \"**Different Package Manager Behaviors**:\"\nmsgstr \"**不同包管理器的行为差异**：\"\n\n#: ../../source/getting_started/troubleshooting.rst:279\nmsgid \"\"\n\"**pip**: Conservative - only upgrades the specified package unless \"\n\"dependencies are incompatible\"\nmsgstr \"\"\n\"**pip**：较为保守 —— 仅在依赖不兼容时，才会升级相关依赖，否则只升级指定的包\"\n\n#: ../../source/getting_started/troubleshooting.rst:280\nmsgid \"\"\n\"**uv with -U flag**: Aggressive - re-resolves ALL dependencies and picks \"\n\"latest versions\"\nmsgstr \"\"\n\"**使用 -U 参数的 uv**：策略较为激进 —— 会重新解析**所有**依赖，并选择最新版本\"\n\n#: ../../source/getting_started/troubleshooting.rst:283\nmsgid \"\"\n\"Therefore before you're ready to upgrade your entire stack and just want \"\n\"to upgrade xinference, use either:\"\nmsgstr \"\"\n\"因此，在你尚未准备好升级整个技术栈、而只是想升级 xinference 时，可以选择使用：\"\n\n#: ../../source/getting_started/troubleshooting.rst:285\nmsgid \"\"\n\"``pip install -U xinference`` (keeps PyTorch unchanged, only upgrades \"\n\"xinference)\"\nmsgstr \"``pip install -U xinference`` （保持 PyTorch 版本不变，仅升级 xinference）\"\n\n#: ../../source/getting_started/troubleshooting.rst:286\nmsgid \"\"\n\"``uv pip install \\\"xinference==1.16.0\\\"`` (without -U flag, only upgrades\"\n\" xinference too)\"\nmsgstr \"\"\n\"``uv pip install \\\"xinference==1.16.0\\\"`` （不使用 -U 参数，同样只会升级\"\n\" xinference）\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/using_docker_image.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-29 16:49+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/getting_started/using_docker_image.rst:5\nmsgid \"Xinference Docker Image\"\nmsgstr \"Docker 镜像\"\n\n#: ../../source/getting_started/using_docker_image.rst:7\nmsgid \"Xinference provides official images for use on Dockerhub.\"\nmsgstr \"Xinference 在 Dockerhub 和 阿里云容器镜像服务 中上传了官方镜像。\"\n\n#: ../../source/getting_started/using_docker_image.rst:11\nmsgid \"\"\n\"Starting from **Xinference v2.0**, to use the CUDA version of the image, \"\n\"the minimum CUDA version must be **CUDA 12.9**.\"\nmsgstr \"\"\n\"从 **Xinference v2.0** 开始，如果要使用cuda版本的镜像，cuda版本最低要达到 **CUDA 12.9** 。\"\n\n#: ../../source/getting_started/using_docker_image.rst:14\nmsgid \"Prerequisites\"\nmsgstr \"准备工作\"\n\n#: ../../source/getting_started/using_docker_image.rst:15\nmsgid \"\"\n\"The image can only run in an environment with GPUs and CUDA installed, \"\n\"because Xinference in the image relies on Nvidia GPUs for acceleration.\"\nmsgstr \"Xinference 使用 GPU 加速推理，该镜像需要在有 GPU 显卡并且安装 CUDA 的机器上运行。\"\n\n#: ../../source/getting_started/using_docker_image.rst:16\nmsgid \"\"\n\"CUDA must be successfully installed on the host machine. This can be \"\n\"determined by whether you can successfully execute the ``nvidia-smi`` \"\n\"command.\"\nmsgstr \"保证 CUDA 在机器上正确安装。可以使用 ``nvidia-smi`` 检查是否正确运行。\"\n\n#: ../../source/getting_started/using_docker_image.rst:17\nmsgid \"\"\n\"For CUDA version >= 12.9, CUDA version in the docker image is ``12.9``, \"\n\"and the CUDA version on the host machine should be ``12.9`` or above, and\"\n\" the NVIDIA driver version should be ``575`` or above.\"\nmsgstr \"\"\n\"对于 CUDA 版本 >= 12.9，Docker 镜像中使用的 CUDA 版本为 ``12.9``。宿主机上的 CUDA 版本需为 \"\n\"``12.9`` 或以上，同时 NVIDIA 驱动版本需为 ``575`` 或以上。\"\n\n#: ../../source/getting_started/using_docker_image.rst:18\nmsgid \"\"\n\"Ensure `NVIDIA Container Toolkit <https://docs.nvidia.com/datacenter\"\n\"/cloud-native/container-toolkit/latest/install-guide.html>`_ installed.\"\nmsgstr \"\"\n\"请确保已安装 `NVIDIA Container Toolkit <https://docs.nvidia.com/datacenter\"\n\"/cloud-native/container-toolkit/latest/install-guide.html>`_ 。\"\n\n#: ../../source/getting_started/using_docker_image.rst:22\nmsgid \"Docker Image\"\nmsgstr \"Docker 镜像\"\n\n#: ../../source/getting_started/using_docker_image.rst:23\nmsgid \"\"\n\"The official image of Xinference is available on DockerHub in the \"\n\"repository ``xprobe/xinference``. Available tags include:\"\nmsgstr \"Xinference 官方镜像已发布在 DockerHub 上的 ``xprobe/xinference`` 仓库中。当前可用的标签包括：\"\n\n#: ../../source/getting_started/using_docker_image.rst:26\nmsgid \"\"\n\"``nightly-main``: This image is built daily from the `GitHub main branch \"\n\"<https://github.com/xorbitsai/inference>`_ and generally does not \"\n\"guarantee stability.\"\nmsgstr \"``nightly-main``: 这个镜像会每天从 GitHub main 分支更新制作，不保证稳定可靠。\"\n\n#: ../../source/getting_started/using_docker_image.rst:27\nmsgid \"\"\n\"``v<release version>``: This image is built each time a Xinference \"\n\"release version is published, and it is typically more stable.\"\nmsgstr \"``v<release version>``: 这个镜像会在 Xinference 每次发布的时候制作，通常可以认为是稳定可靠的。\"\n\n#: ../../source/getting_started/using_docker_image.rst:28\nmsgid \"\"\n\"``latest``: This image is built with the latest Xinference release \"\n\"version.\"\nmsgstr \"``latest``: 这个镜像会在 Xinference 发布时指向最新的发布版本\"\n\n#: ../../source/getting_started/using_docker_image.rst:29\nmsgid \"For CPU version, add ``-cpu`` suffix, e.g. ``nightly-main-cpu``.\"\nmsgstr \"对于 CPU 版本，增加 ``-cpu`` 后缀，如 ``nightly-main-cpu``。\"\n\n#: ../../source/getting_started/using_docker_image.rst:33\nmsgid \"Dockerfile for custom build\"\nmsgstr \"自定义镜像\"\n\n#: ../../source/getting_started/using_docker_image.rst:34\nmsgid \"\"\n\"If you need to build the Xinference image according to your own \"\n\"requirements, the source code for the Dockerfile is located at \"\n\"`xinference/deploy/docker/Dockerfile \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/deploy/docker/Dockerfile>`_\"\n\" for reference. Please make sure to be in the top-level directory of \"\n\"Xinference when using this Dockerfile. For example:\"\nmsgstr \"\"\n\"如果需要安装额外的依赖，可以参考 `xinference/deploy/docker/Dockerfile \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/deploy/docker/Dockerfile>`_\"\n\" 。请确保使用 Dockerfile 制作镜像时在 Xinference 项目的根目录下。比如：\"\n\n#: ../../source/getting_started/using_docker_image.rst:45\nmsgid \"Image usage\"\nmsgstr \"使用镜像\"\n\n#: ../../source/getting_started/using_docker_image.rst:46\nmsgid \"\"\n\"You can start Xinference in the container like this, simultaneously \"\n\"mapping port 9997 in the container to port 9998 on the host, enabling \"\n\"debug logging, and downloading models from modelscope.\"\nmsgstr \"\"\n\"你可以使用如下方式在容器内启动 Xinference，同时将 9997 端口映射到宿主机的 9998 端口，并且指定日志级别为 \"\n\"DEBUG，也可以指定需要的环境变量。\"\n\n#: ../../source/getting_started/using_docker_image.rst:54\nmsgid \"\"\n\"The option ``--gpus`` is essential and cannot be omitted, because as \"\n\"mentioned earlier, the image requires the host machine to have a GPU. \"\n\"Otherwise, errors will occur.\"\nmsgstr \"``--gpus`` 必须指定，正如前文描述，镜像必须运行在有 GPU 的机器上，否则会出现错误。\"\n\n#: ../../source/getting_started/using_docker_image.rst:55\nmsgid \"\"\n\"The ``-H 0.0.0.0`` parameter after the ``xinference-local`` command \"\n\"cannot be omitted. Otherwise, the host machine may not be able to access \"\n\"the port inside the container.\"\nmsgstr \"``-H 0.0.0.0`` 也是必须指定的，否则在容器外无法连接到 Xinference 服务。\"\n\n#: ../../source/getting_started/using_docker_image.rst:56\nmsgid \"\"\n\"You can add multiple ``-e`` options to introduce multiple environment \"\n\"variables.\"\nmsgstr \"可以指定多个 ``-e`` 选项赋值多个环境变量。\"\n\n#: ../../source/getting_started/using_docker_image.rst:59\nmsgid \"\"\n\"Certainly, if you prefer, you can also manually enter the docker \"\n\"container and start Xinference in any desired way.\"\nmsgstr \"当然，也可以运行容器后，进入容器内手动拉起 Xinference。\"\n\n#: ../../source/getting_started/using_docker_image.rst:63\nmsgid \"\"\n\"For multiple GPUs, make sure to set the shared memory size, for example: \"\n\"`docker run --shm-size=128g ...`\"\nmsgstr \"对于多张 GPU，确保设置共享内存大小，例如：`docker run --shm-size=128g ...`\"\n\n#: ../../source/getting_started/using_docker_image.rst:67\nmsgid \"Mount your volume for loading and saving models\"\nmsgstr \"挂载模型目录\"\n\n#: ../../source/getting_started/using_docker_image.rst:68\nmsgid \"\"\n\"The image does not contain any model files by default, and it downloads \"\n\"the models into the container. Typically, you would need to mount a \"\n\"directory on the host machine to the docker container, so that Xinference\"\n\" can download the models onto it, allowing for reuse. In this case, you \"\n\"need to specify a volume when running the Docker image and configure \"\n\"environment variables for Xinference:\"\nmsgstr \"\"\n\"默认情况下，镜像中不包含任何模型文件，使用过程中会在容器内下载模型。如果需要使用已经下载好的模型，需要将宿主机的目录挂载到容器内。这种情况下，需要在运行容器时指定本地卷，并且为\"\n\" Xinference 配置环境变量。\"\n\n#: ../../source/getting_started/using_docker_image.rst:77\nmsgid \"\"\n\"The principle behind the above command is to mount the specified \"\n\"directory from the host machine into the container, and then set the \"\n\"``XINFERENCE_HOME`` environment variable to point to that directory \"\n\"inside the container. This way, all downloaded model files will be stored\"\n\" in the directory you specified on the host machine. You don't have to \"\n\"worry about losing them when the Docker container stops, and the next \"\n\"time you run it, you can directly use the existing models without the \"\n\"need for repetitive downloads.\"\nmsgstr \"\"\n\"上述命令的原理是将主机上指定的目录挂载到容器中，并设置 ``XINFERENCE_HOME`` \"\n\"环境变量指向容器内的该目录。这样，所有下载的模型文件将存储在您在主机上指定的目录中。您无需担心在 Docker \"\n\"容器停止时丢失这些文件，下次运行容器时，您可以直接使用现有的模型，无需重复下载。\"\n\n#: ../../source/getting_started/using_docker_image.rst:81\nmsgid \"\"\n\"If you downloaded the model using the default path on the host machine, \"\n\"and since the xinference cache directory stores the model using symbolic \"\n\"links, you need to mount the directory where the original file is located\"\n\" into the container as well. For example, if you are using HuggingFace \"\n\"and Modelscope as model hub, you would need to mount the corresponding \"\n\"directories into the container. Generally, the cache directories for \"\n\"HuggingFace and Modelscope are located at <home_path>/.cache/huggingface \"\n\"and <home_path>/.cache/modelscope. The command would be like:\"\nmsgstr \"\"\n\"如果你在宿主机使用的默认路径下载的模型，由于 xinference cache \"\n\"目录是用的软链的方式存储模型，需要将原文件所在的目录也挂载到容器内。例如你使用 huggingface 和 modelscope \"\n\"作为模型仓库，那么需要将这两个对应的目录挂载到容器内，一般对应的 cache 目录分别在 \"\n\"<home_path>/.cache/huggingface 和 <home_path>/.cache/modelscope，使用的命令如下：\"\n\n#~ msgid \"\"\n#~ \"For CUDA 12.8, add ``-cu128`` suffix,\"\n#~ \" e.g. ``nightly-main-cu128``. (Xinference\"\n#~ \" version should be between v1.8.1 and\"\n#~ \" v1.15.0)\"\n#~ msgstr \"\"\n#~ \"对于 CUDA 12.8 版本，增加 ``-cu128`` 后缀，如 \"\n#~ \"``nightly-main-cu128`` 。（Xinference 版本需要介于 \"\n#~ \"v1.8.1 和 v1.15.0）\"\n\n#~ msgid \"\"\n#~ \"Starting from **Xinference v2.0**, only \"\n#~ \"``-cu129`` and ``-cpu`` images are \"\n#~ \"officially provided.\"\n#~ msgstr \"\"\n\n#~ msgid \"\"\n#~ \"Starting from **Xinference v2.0**, only \"\n#~ \"two image variants are provided: the \"\n#~ \"default (no suffix, **CUDA 12.9**) and\"\n#~ \" the ``-cpu`` image.\"\n#~ msgstr \"\"\n#~ \"从 **Xinference v2.0** 开始，仅提供两种镜像变体：默认镜像（无后缀， \"\n#~ \"**CUDA 12.9** ）和 ``-cpu`` 镜像。\"\n\n#~ msgid \"\"\n#~ \"For CUDA 12.9, no suffix, e.g. \"\n#~ \"``nightly-main``. (Xinference version should \"\n#~ \"be v2.0 at least)\"\n#~ msgstr \"对于 CUDA 12.9，不带后缀，例如 ``nightly-main`` 。（Xinference 版本应至少为 v2.0）\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/using_kubernetes.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-02 15:15+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/getting_started/using_kubernetes.rst:5\nmsgid \"Xinference on Kubernetes\"\nmsgstr \"在 Kubernetes 集群中安装 Xinference\"\n\n#: ../../source/getting_started/using_kubernetes.rst:9\nmsgid \"Helm Support\"\nmsgstr \"基于原生 Helm 的方式\"\n\n#: ../../source/getting_started/using_kubernetes.rst:10\nmsgid \"\"\n\"Xinference provides a method for installation in a Kubernetes cluster via\"\n\" ``Helm`` .\"\nmsgstr \"\"\n\"Xinference 提供基于原生 Helm 在 Kubernetes 集群中安装的方式。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:14\nmsgid \"Prerequisites\"\nmsgstr \"\"\n\"准备条件\"\n\n#: ../../source/getting_started/using_kubernetes.rst:15\nmsgid \"You have a fully functional Kubernetes cluster.\"\nmsgstr \"\"\n\"一个可用的 Kubernetes 集群。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:16\nmsgid \"\"\n\"Enable GPU support in Kubernetes, refer to `here \"\n\"<https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/>`_.\"\nmsgstr \"\"\n\"在 Kubernetes 中开启 GPU 支持，参考 `这里 <https://kubernetes.io/zh-cn/docs/tasks/manage-gpus/scheduling-gpus/>`_ 。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:17\nmsgid \"``Helm`` is correctly installed.\"\nmsgstr \"\"\n\"正确安装 ``Helm`` 。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:21\nmsgid \"Steps\"\nmsgstr \"\"\n\"具体步骤\"\n\n#: ../../source/getting_started/using_kubernetes.rst:22\nmsgid \"Add xinference helm repo.\"\nmsgstr \"新增 Xinference Helm 仓库\"\n\n#: ../../source/getting_started/using_kubernetes.rst:28\nmsgid \"Update xinference helm repo indexes and query versions.\"\nmsgstr \"更新仓库索引，查询可安装版本\"\n\n#: ../../source/getting_started/using_kubernetes.rst:35\nmsgid \"Install\"\nmsgstr \"安装\"\n\n#: ../../source/getting_started/using_kubernetes.rst:43\nmsgid \"Customized Installation\"\nmsgstr \"自定义安装\"\n\n#: ../../source/getting_started/using_kubernetes.rst:44\nmsgid \"\"\n\"The installation method mentioned above sets up a Xinference cluster \"\n\"similar to a single-machine setup, with only one worker and all startup \"\n\"parameters at their default values. However, this is usually not the \"\n\"desired setup.\"\nmsgstr \"\"\n\"上述安装方式安装了一个类似单机的 Xinference ，也就是只有一个节点，同时其他启动参数均保持默认。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:48\nmsgid \"Below are some common custom installation configurations.\"\nmsgstr \"下面展示了一些常见的自定义安装配置。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:50\nmsgid \"I need to download models from ``ModelScope``.\"\nmsgstr \"我需要从 ``ModelScope`` 下载模型。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:56\nmsgid \"\"\n\"I want to use cpu image of xinference (or use any other version of \"\n\"xinference images).\"\nmsgstr \"我想使用 cpu 版本的 Xinference 镜像（或者其他版本的镜像）。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:62\nmsgid \"I want to have 4 Xinference workers, with each worker managing 4 GPUs.\"\nmsgstr \"我需要启动 4 个 Xinference worker 节点，每个 worker 管理 4 个 GPU。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:68\nmsgid \"\"\n\"The above installation method is based on Helm ``--set`` option. For more\"\n\" complex custom installations, such as multiple workers with shared \"\n\"storage, it is highly recommended to use your own ``values.yaml`` file \"\n\"with Helm ``-f`` option for installation.\"\nmsgstr \"\"\n\"上面的安装方式基于 Helm ``--set`` 选项。对于更加复杂的自定义安装场景，例如多个 worker 共享存储，\"\n\"非常推荐使用你自己的 ``values.yaml`` 文件，然后通过 Helm ``-f`` 选项进行安装。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:72\nmsgid \"\"\n\"The default ``values.yaml`` file is located `here \"\n\"<https://github.com/xorbitsai/xinference-helm-\"\n\"charts/blob/main/charts/xinference/values.yaml>`_. Some examples can be \"\n\"found `here <https://github.com/xorbitsai/xinference-helm-\"\n\"charts/tree/main/examples>`_.\"\nmsgstr \"\"\n\"默认安装方式对应的 ``values.yaml`` 文件位于 `这里 <https://github.com/xorbitsai/xinference-helm-charts/blob/main/charts/xinference/values.yaml>`_ 。\"\n\"而 `这里 <https://github.com/xorbitsai/xinference-helm-charts/tree/main/examples>`_ 有一些示例供参考。\"\n\n#: ../../source/getting_started/using_kubernetes.rst:78\nmsgid \"KubeBlocks Support\"\nmsgstr \"基于第三方 KubeBlocks 的方式\"\n\n#: ../../source/getting_started/using_kubernetes.rst:79\nmsgid \"\"\n\"You can also install Xinference in Kubernetes using the third-party \"\n\"``KubeBlocks``. This method is not maintained by Xinference and does not \"\n\"guarantee timely updates or availability. Please refer to the \"\n\"documentation at `here <https://kubeblocks.io/docs/preview/user_docs\"\n\"/kubeblocks-for-xinference/manage-xinference>`_.\"\nmsgstr \"\"\n\"你也可以通过第三方的 ``KubeBlocks`` 来在 K8s 集群中安装 Xinference 。这种方式不是 Xinference 官方维护的，\"\n\"因此无法严格保证实时更新和可用性。请参考 `文档 <https://kubeblocks.io/docs/preview/user_docs/kubeblocks-for-xinference/manage-xinference>`_ 。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started/using_xinference.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-12-29 12:19+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/getting_started/using_xinference.rst:5\nmsgid \"Using Xinference\"\nmsgstr \"使用\"\n\n#: ../../source/getting_started/using_xinference.rst:9\nmsgid \"Run Xinference Locally\"\nmsgstr \"本地运行 Xinference\"\n\n#: ../../source/getting_started/using_xinference.rst:11\nmsgid \"\"\n\"Let's start by running Xinference on a local machine and running a \"\n\"classic LLM model: ``qwen2.5-instruct``.\"\nmsgstr \"\"\n\"让我们以一个经典的大语言模型 ``qwen2.5-instruct`` 来展示如何在本地用 \"\n\"Xinference 运行大模型。\"\n\n#: ../../source/getting_started/using_xinference.rst:13\nmsgid \"\"\n\"After this quickstart, you will move on to learning how to deploy \"\n\"Xinference in a cluster environment.\"\nmsgstr \"\"\n\"在这个快速入门之后，可以继续学习如何在一个分布式集群环境下部署 Xinference\"\n\"。\"\n\n#: ../../source/getting_started/using_xinference.rst:16\nmsgid \"Start Local Server\"\nmsgstr \"拉起本地服务\"\n\n#: ../../source/getting_started/using_xinference.rst:18\nmsgid \"\"\n\"First, please ensure that you have installed Xinference according to the \"\n\"instructions provided :ref:`here <installation>`. To start a local \"\n\"instance of Xinference, run the following command:\"\nmsgstr \"\"\n\"首先，请根据这个 :ref:`文档 <installation>` 的指导确保本地安装了 \"\n\"Xinference。使用以下命令拉起本地的 Xinference 服务：\"\n\n#: ../../source/getting_started/using_xinference.rst:23\n#: ../../source/getting_started/using_xinference.rst:65\nmsgid \"shell\"\nmsgstr \"shell\"\n\n#: ../../source/getting_started/using_xinference.rst:29\n#: ../../source/getting_started/using_xinference.rst:71\nmsgid \"output\"\nmsgstr \"输出\"\n\n#: ../../source/getting_started/using_xinference.rst:39\nmsgid \"\"\n\"By default, Xinference uses ``<HOME>/.xinference`` as home path to store \"\n\"necessary files such as logs and models, where ``<HOME>`` is the home \"\n\"path of current user.\"\nmsgstr \"\"\n\"默认情况下，Xinference 会使用 ``<HOME>/.xinference`` 作为主目录来存储一些\"\n\"必要的信息，比如日志文件和模型文件，其中 ``<HOME>`` 就是当前用户的主目录\"\n\"。\"\n\n#: ../../source/getting_started/using_xinference.rst:42\nmsgid \"\"\n\"You can change this directory by configuring the environment variable \"\n\"``XINFERENCE_HOME``. For example:\"\nmsgstr \"你可以通过配置环境变量 ``XINFERENCE_HOME`` 修改主目录， 比如：\"\n\n#: ../../source/getting_started/using_xinference.rst:49\nmsgid \"\"\n\"Congrats! You now have Xinference running on your local machine. Once \"\n\"Xinference is running, there are multiple ways we can try it: via the web\"\n\" UI, via cURL, via the command line, or via the Xinference's python \"\n\"client.\"\nmsgstr \"\"\n\"恭喜！你已经在本地拉起了 Xinference 服务。一旦 Xinference 服务运行起来，\"\n\"可以有多种方式来使用，包括使用网页、cURL 命令、命令行或者是 Xinference 的\"\n\" Python SDK。\"\n\n#: ../../source/getting_started/using_xinference.rst:52\nmsgid \"\"\n\"You can visit the web UI at `http://127.0.0.1:9997/ui \"\n\"<http://127.0.0.1:9997/ui>`_ and visit `http://127.0.0.1:9997/docs \"\n\"<http://127.0.0.1:9997/docs>`_ to inspect the API docs.\"\nmsgstr \"\"\n\"可以通过访问 `http://127.0.0.1:9997/ui <http://127.0.0.1:9997/ui>`_ 来\"\n\"使用 UI，访问 `http://127.0.0.1:9997/docs <http://127.0.0.1:9997/docs>`_ \"\n\"来查看 API 文档。\"\n\n#: ../../source/getting_started/using_xinference.rst:55\nmsgid \"\"\n\"You can install the Xinference command line tool and Python client using \"\n\"the following command:\"\nmsgstr \"可以通过以下命令安装后，利用 Xinference 命令行工具或者 Python 代码来使用：\"\n\n#: ../../source/getting_started/using_xinference.rst:61\nmsgid \"\"\n\"The command line tool is ``xinference``. You can list the commands that \"\n\"can be used by running:\"\nmsgstr \"命令行工具是 ``xinference``。可以通过以下命令查看有哪些可以使用的命令：\"\n\n#: ../../source/getting_started/using_xinference.rst:102\nmsgid \"\"\n\"You can install the Xinference Python client with minimal dependencies \"\n\"using the following command. Please ensure that the version of the client\"\n\" matches the version of the Xinference server.\"\nmsgstr \"\"\n\"如果只需要安装 Xinference 的 Python SDK，可以使用以下命令安装最少依赖。\"\n\"需要注意的是版本必须和 Xinference 服务的版本保持匹配。\"\n\n#: ../../source/getting_started/using_xinference.rst:112\nmsgid \"About Model Engine\"\nmsgstr \"关于模型的推理引擎\"\n\n#: ../../source/getting_started/using_xinference.rst:113\nmsgid \"\"\n\"Since ``v0.11.0`` , before launching the LLM model, you need to specify \"\n\"the inference engine you want to run. Currently, xinference supports the \"\n\"following inference engines:\"\nmsgstr \"\"\n\"自 ``v0.11.0`` 版本开始，在加载 LLM 模型之前，你需要指定具体的推理引擎。\"\n\"当前，Xinference 支持以下推理引擎：\"\n\n#: ../../source/getting_started/using_xinference.rst:116\nmsgid \"``vllm``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/using_xinference.rst:117\nmsgid \"``sglang``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/using_xinference.rst:118\nmsgid \"``llama.cpp``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/using_xinference.rst:119\nmsgid \"``transformers``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/using_xinference.rst:120\nmsgid \"``MLX``\"\nmsgstr \"\"\n\n#: ../../source/getting_started/using_xinference.rst:122\nmsgid \"\"\n\"About the details of these inference engine, please refer to :ref:`here \"\n\"<inference_backend>`.\"\nmsgstr \"关于这些推理引擎的详细信息，请参考 :ref:`这里 <inference_backend>` 。\"\n\n#: ../../source/getting_started/using_xinference.rst:124\nmsgid \"\"\n\"Note that when launching a LLM model, the ``model_format`` and \"\n\"``quantization`` of the model you want to launch is closely related to \"\n\"the inference engine.\"\nmsgstr \"\"\n\"注意，当加载 LLM 模型时，所能运行的引擎与 ``model_format`` 和 ``\"\n\"quantization`` 参数息息相关。\"\n\n#: ../../source/getting_started/using_xinference.rst:127\nmsgid \"\"\n\"You can use ``xinference engine`` command to query the combination of \"\n\"parameters of the model you want to launch. This will demonstrate under \"\n\"what conditions a model can run on which inference engines.\"\nmsgstr \"Xinference 提供了 ``xinference engine`` 命令帮助你查询相关的参数组合。\"\n\n#: ../../source/getting_started/using_xinference.rst:130\nmsgid \"For example:\"\nmsgstr \"例如：\"\n\n#: ../../source/getting_started/using_xinference.rst:132\nmsgid \"\"\n\"I would like to query about which inference engines the ``qwen-chat`` \"\n\"model can run on, and what are their respective parameters.\"\nmsgstr \"\"\n\"我想查询与 ``qwen-chat`` 模型相关的参数组合，以决定它能够怎样跑在各种推理\"\n\"引擎上。\"\n\n#: ../../source/getting_started/using_xinference.rst:138\nmsgid \"\"\n\"I want to run ``qwen-chat`` with ``VLLM`` as the inference engine, but I \"\n\"don't know how to configure the other parameters.\"\nmsgstr \"\"\n\"我想将 ``qwen-chat`` 跑在 ``VLLM`` 推理引擎上，但是我不知道什么样的其他\"\n\"参数符合这个要求。\"\n\n#: ../../source/getting_started/using_xinference.rst:144\nmsgid \"\"\n\"I want to launch the ``qwen-chat`` model in the ``GGUF`` format, and I \"\n\"need to know how to configure the remaining parameters.\"\nmsgstr \"我想加载 ``GGUF`` 格式的 ``qwen-chat`` 模型，我需要知道其余的参数组合。\"\n\n#: ../../source/getting_started/using_xinference.rst:151\nmsgid \"\"\n\"In summary, compared to previous versions, when launching LLM models, you\"\n\" need to additionally pass the ``model_engine`` parameter. You can \"\n\"retrieve information about the supported inference engines and their \"\n\"related parameter combinations through the ``xinference engine`` command.\"\nmsgstr \"\"\n\"总之，相比于之前的版本，当加载 LLM 模型时，需要额外传入 ``model_engine`` \"\n\"参数。你可以通过 ``xinference engine`` 命令查询你想运行的推理引擎与其他\"\n\"参数组合的关系。\"\n\n#: ../../source/getting_started/using_xinference.rst:158\nmsgid \"Here are some recommendations on when to use which engine:\"\nmsgstr \"关于何时使用什么引擎，以下是一些建议：\"\n\n#: ../../source/getting_started/using_xinference.rst:160\nmsgid \"**Linux**\"\nmsgstr \"\"\n\n#: ../../source/getting_started/using_xinference.rst:162\nmsgid \"\"\n\"When possible, prioritize using **vLLM** or **SGLang** for better \"\n\"performance.\"\nmsgstr \"在能使用的情况下，优先使用 **vLLM** 或 **SGLang**，因为他们有更好的性能。\"\n\n#: ../../source/getting_started/using_xinference.rst:163\nmsgid \"\"\n\"If resources are limited, consider using **llama.cpp**, as it offers more\"\n\" quantization options.\"\nmsgstr \"如果资源有限，可以考虑使用 **llama.cpp**，因为他提供了更多的量化选项。\"\n\n#: ../../source/getting_started/using_xinference.rst:164\nmsgid \"\"\n\"For other cases, consider using **Transformers**, which supports nearly \"\n\"all models.\"\nmsgstr \"其他使用考虑使用 **Transformers**，它几乎支持所有的模型。\"\n\n#: ../../source/getting_started/using_xinference.rst:166\nmsgid \"**Windows**\"\nmsgstr \"\"\n\n#: ../../source/getting_started/using_xinference.rst:168\nmsgid \"\"\n\"It is recommended to use **WSL**, and in this case, follow the same \"\n\"choices as Linux.\"\nmsgstr \"推荐使用 **WSL**，这个时候选择和 Linux 一致。\"\n\n#: ../../source/getting_started/using_xinference.rst:169\nmsgid \"\"\n\"Otherwise, prefer **llama.cpp**, and for unsupported models, opt for \"\n\"**Transformers**.\"\nmsgstr \"\"\n\"其他时候推荐使用 **llama.cpp**，对于不支持的模型，选择使用 **Transformers\"\n\"**。\"\n\n#: ../../source/getting_started/using_xinference.rst:171\nmsgid \"**Mac**\"\nmsgstr \"\"\n\n#: ../../source/getting_started/using_xinference.rst:173\nmsgid \"\"\n\"If supported by the model, use the **MLX engine**, as it delivers the \"\n\"best performance.\"\nmsgstr \"在模型支持的情况下，推荐使用 **MLX 引擎**，它有着最好的性能\"\n\n#: ../../source/getting_started/using_xinference.rst:174\nmsgid \"\"\n\"For other cases, prefer **llama.cpp**, and for unsupported models, choose\"\n\" **Transformers**.\"\nmsgstr \"\"\n\"其他时候推荐使用 **llama.cpp**，对于不支持的模型，选择使用 **Transformers\"\n\"**。\"\n\n#: ../../source/getting_started/using_xinference.rst:178\nmsgid \"Run qwen2.5-instruct\"\nmsgstr \"运行 qwen2.5-instruct\"\n\n#: ../../source/getting_started/using_xinference.rst:180\nmsgid \"\"\n\"Let's start by running a built-in model: ``qwen2.5-instruct``. When you \"\n\"start a model for the first time, Xinference will download the model \"\n\"parameters from HuggingFace, which might take a few minutes depending on \"\n\"the size of the model weights. We cache the model files locally, so \"\n\"there's no need to redownload them for subsequent starts.\"\nmsgstr \"\"\n\"让我们来运行一个内置的 ``qwen2.5-instruct`` 模型。当你需要运行一个模型时\"\n\"，第一次运行是要从HuggingFace 下载模型参数，一般来说需要根据模型大小下载\"\n\"10到30分钟不等。当下载完成后，Xinference本地会有缓存的处理，以后再运行\"\n\"相同的模型不需要重新下载。\"\n\n#: ../../source/getting_started/using_xinference.rst:185\nmsgid \"\"\n\"Xinference also allows you to download models from other sites. You can \"\n\"do this by setting an environment variable when launching Xinference. For\"\n\" example, if you want to download models from `modelscope \"\n\"<https://modelscope.cn>`_, do the following:\"\nmsgstr \"\"\n\"Xinference 也允许从其他模型托管平台下载模型。可以通过在拉起 Xinference 时\"\n\"指定环境变量，比如，如果想要从 ModelScope 中下载模型，可以使用如下命令：\"\n\n#: ../../source/getting_started/using_xinference.rst:193\nmsgid \"\"\n\"We can specify the model's UID using the ``--model-uid`` or ``-u`` flag. \"\n\"If not specified, Xinference will generate a unique ID. The default \"\n\"unique ID will be identical to the model name.\"\nmsgstr \"\"\n\"可以使用 ``--model-uid`` 或者 ``-u`` 参数指定模型的 UID，如果没有指定，\"\n\"Xinference 会随机生成一个 ID。默认的 ID 和模型名保持一致。``:\"\n\n#: ../../source/getting_started/using_xinference.rst:232\nmsgid \"\"\n\"For some engines, such as vllm, users need to specify the engine-related \"\n\"parameters when running models. In this case, you can directly specify \"\n\"the parameter name and value in the command line, for example:\"\nmsgstr \"\"\n\"对于一些推理引擎，比如 vllm，用户需要在运行模型时指定引擎相关的参数，这种\"\n\"情况下直接在命令行中指定对应的参数名和值即可，比如：\"\n\n#: ../../source/getting_started/using_xinference.rst:240\nmsgid \"`gpu_memory_utilization=0.9` will pass to vllm when launching model.\"\nmsgstr \"在运行模型时，`gpu_memory_utilization=0.9` 会传到 vllm 后端。\"\n\n#: ../../source/getting_started/using_xinference.rst:243\nmsgid \"For more tips on model launching, refer to :ref:`launch`.\"\nmsgstr \"关于模型加载更多技巧，参考 :ref:`launch`。\"\n\n#: ../../source/getting_started/using_xinference.rst:245\nmsgid \"\"\n\"Congrats! You now have ``qwen2.5-instruct`` running by Xinference. Once \"\n\"the model is running, we can try it out either via cURL, or via \"\n\"Xinference's python client:\"\nmsgstr \"\"\n\"到这一步，恭喜你已经成功通过 Xinference 将 ``qwen2.5-instruct`` 运行起来\"\n\"了。一旦这个模型在运行中，我们可以通过命令行、cURL 或者是 Python 代码来\"\n\"预支交互：\"\n\n#: ../../source/getting_started/using_xinference.rst:305\nmsgid \"\"\n\"Xinference provides OpenAI-compatible APIs for its supported models, so \"\n\"you can use Xinference as a local drop-in replacement for OpenAI APIs. \"\n\"For example:\"\nmsgstr \"\"\n\"Xinference 提供了与 OpenAI 兼容的 API，所以可以将 Xinference 运行的模型\"\n\"当成 OpenAI的本地替代。比如：\"\n\n#: ../../source/getting_started/using_xinference.rst:321\nmsgid \"The following OpenAI APIs are supported:\"\nmsgstr \"以下是支持的 OpenAI 的 API：\"\n\n#: ../../source/getting_started/using_xinference.rst:323\nmsgid \"\"\n\"Chat Completions: `https://platform.openai.com/docs/api-reference/chat \"\n\"<https://platform.openai.com/docs/api-reference/chat>`_\"\nmsgstr \"\"\n\"对话生成：`https://platform.openai.com/docs/api-reference/chat <https://\"\n\"platform.openai.com/docs/api-reference/chat>`_\"\n\n#: ../../source/getting_started/using_xinference.rst:325\nmsgid \"\"\n\"Completions: `https://platform.openai.com/docs/api-reference/completions \"\n\"<https://platform.openai.com/docs/api-reference/completions>`_\"\nmsgstr \"\"\n\"生成: `https://platform.openai.com/docs/api-reference/completions <https:\"\n\"//platform.openai.com/docs/api-reference/completions>`_\"\n\n#: ../../source/getting_started/using_xinference.rst:327\nmsgid \"\"\n\"Embeddings: `https://platform.openai.com/docs/api-reference/embeddings \"\n\"<https://platform.openai.com/docs/api-reference/embeddings>`_\"\nmsgstr \"\"\n\"向量生成：`https://platform.openai.com/docs/api-reference/embeddings <\"\n\"https://platform.openai.com/docs/api-reference/embeddings>`_\"\n\n#: ../../source/getting_started/using_xinference.rst:329\nmsgid \"\"\n\"Xinference also supports Anthropic API via base url \"\n\"``http://127.0.0.1:9997/anthropic``, you can use Xinference in Claude \"\n\"Code and so forth. Refer to :ref:`anthropic client <anthropic_client>` \"\n\"for more details.\"\nmsgstr \"\"\n\"Xinference 还支持通过基础 URL ``http://127.0.0.1:9997/anthropic`` 调用 \"\n\"Anthropic API，你可以在 Claude Code 等环境中使用 Xinference。更多详情\"\n\"请参阅 :ref:`anthropic client <anthropic_client>`。\"\n\n#: ../../source/getting_started/using_xinference.rst:333\nmsgid \"Manage Models\"\nmsgstr \"管理模型\"\n\n#: ../../source/getting_started/using_xinference.rst:335\nmsgid \"\"\n\"In addition to launching models, Xinference offers various ways to manage\"\n\" the entire lifecycle of models. You can manage models in Xinference \"\n\"through the command line, cURL, or Xinference's python client.\"\nmsgstr \"\"\n\"除了启动模型，Xinference 提供了管理模型整个生命周期的能力。同样的，你可以\"\n\"使用命令行、cURL 以及 Python 代码来管理：\"\n\n#: ../../source/getting_started/using_xinference.rst:338\nmsgid \"\"\n\"You can list all models of a certain type that are available to launch in\"\n\" Xinference:\"\nmsgstr \"可以列出所有 Xinference 支持的指定类型的模型：\"\n\n#: ../../source/getting_started/using_xinference.rst:356\nmsgid \"\"\n\"The following command gives you the currently running models in \"\n\"Xinference:\"\nmsgstr \"接下来的命令可以列出所有在运行的模型：\"\n\n#: ../../source/getting_started/using_xinference.rst:374\nmsgid \"\"\n\"When you no longer need a model that is currently running, you can remove\"\n\" it in the following way to free up the resources it occupies:\"\nmsgstr \"当你不需要某个正在运行的模型，可以通过以下的方式来停止它并释放资源：\"\n\n#: ../../source/getting_started/using_xinference.rst:395\nmsgid \"Deploy Xinference In a Cluster\"\nmsgstr \"集群中部署 Xinference\"\n\n#: ../../source/getting_started/using_xinference.rst:397\nmsgid \"\"\n\"To deploy Xinference in a cluster, you need to start a Xinference \"\n\"supervisor on one server and Xinference workers on the other servers.\"\nmsgstr \"\"\n\"若要在集群环境中部署 Xinference，需要在一台机器中启动 supervisor 节点，并\"\n\"在当前或者其他节点启动 worker 节点\"\n\n#: ../../source/getting_started/using_xinference.rst:400\nmsgid \"\"\n\"First, make sure you have already installed Xinference on each of the \"\n\"servers according to the instructions provided :ref:`here \"\n\"<installation>`. Then follow the steps below:\"\nmsgstr \"\"\n\"首先，根据 :ref:`文档 <installation>` 确保所有的服务器上都安装了 \"\n\"Xinference。接下来按照步骤：\"\n\n#: ../../source/getting_started/using_xinference.rst:404\nmsgid \"Start the Supervisor\"\nmsgstr \"启动 Supervisor\"\n\n#: ../../source/getting_started/using_xinference.rst:405\nmsgid \"\"\n\"On the server where you want to run the Xinference supervisor, run the \"\n\"following command:\"\nmsgstr \"在服务器上执行以下命令来启动 Supervisor 节点：\"\n\n#: ../../source/getting_started/using_xinference.rst:411\nmsgid \"\"\n\"Replace ``${supervisor_host}`` with the actual host of your supervisor \"\n\"server.\"\nmsgstr \"用当前节点的 IP 来替换 ``${supervisor_host}``。\"\n\n#: ../../source/getting_started/using_xinference.rst:414\nmsgid \"\"\n\"You can the supervisor's web UI at `http://${supervisor_host}:9997/ui \"\n\"<http://${supervisor_host}:9997/ui>`_ and visit \"\n\"`http://${supervisor_host}:9997/docs \"\n\"<http://${supervisor_host}:9997/docs>`_ to inspect the API docs.\"\nmsgstr \"\"\n\"可以在 `http://${supervisor_host}:9997/ui <http://${supervisor_host}:9997\"\n\"/ui>`_ 访问 web UI，在 `http://${supervisor_host}:9997/docs <http://${\"\n\"supervisor_host}:9997/docs>`_ 访问 API 文档。\"\n\n#: ../../source/getting_started/using_xinference.rst:418\nmsgid \"Start the Workers\"\nmsgstr \"启动 Worker\"\n\n#: ../../source/getting_started/using_xinference.rst:420\nmsgid \"\"\n\"On each of the other servers where you want to run Xinference workers, \"\n\"run the following command:\"\nmsgstr \"在需要启动 Xinference worker 的机器上执行以下命令：\"\n\n#: ../../source/getting_started/using_xinference.rst:427\nmsgid \"\"\n\"Note that you must replace ``${worker_host}``  with the actual host of \"\n\"your worker server.\"\nmsgstr \"需要注意的是，必须使用当前Worker节点的 IP 来替换 ``${worker_host}``。\"\n\n#: ../../source/getting_started/using_xinference.rst:430\nmsgid \"\"\n\"Note that if you need to interact with the Xinference in a cluster via \"\n\"the command line, you should include the ``-e`` or ``--endpoint`` flag to\"\n\" specify the supervisor server's endpoint. For example:\"\nmsgstr \"\"\n\"需要注意的是，如果你需要通过命令行与集群交互，应该通过 ``-e`` 或者 ``--\"\n\"endpoint`` 参数来指定 supervisor 的地址，比如：\"\n\n#: ../../source/getting_started/using_xinference.rst:438\nmsgid \"Using Xinference With Docker\"\nmsgstr \"使用 Docker 部署 Xinference\"\n\n#: ../../source/getting_started/using_xinference.rst:440\nmsgid \"To start Xinference in a Docker container, run the following command:\"\nmsgstr \"用以下命令在容器中运行 Xinference：\"\n\n#: ../../source/getting_started/using_xinference.rst:443\nmsgid \"Run On Nvidia GPU Host\"\nmsgstr \"在拥有英伟达显卡的机器上运行\"\n\n#: ../../source/getting_started/using_xinference.rst:445\nmsgid \"For cuda 12.4:\"\nmsgstr \"对于 cuda 12.4：\"\n\n#: ../../source/getting_started/using_xinference.rst:451\nmsgid \"For cuda 12.8:\"\nmsgstr \"对于 cuda 12.8：\"\n\n#: ../../source/getting_started/using_xinference.rst:453\nmsgid \"\"\n\"CUDA 12.8 version is experimental, welcome to give us feedbacks to help \"\n\"us to improve.\"\nmsgstr \"CUDA 12.8 版本是实验性质，欢迎给我们反馈以改进。\"\n\n#: ../../source/getting_started/using_xinference.rst:456\nmsgid \"CUDA 12.8 version is removed in v1.16.0 .\"\nmsgstr \"CUDA 12.8 版本已在 v1.16.0 中移除。\"\n\n#: ../../source/getting_started/using_xinference.rst:463\nmsgid \"For cuda 12.9:\"\nmsgstr \"对于 cuda 12.9：\"\n\n#: ../../source/getting_started/using_xinference.rst:465\nmsgid \"CUDA 12.9 will become the default version when Xinference v2.0.0 released.\"\nmsgstr \"在 Xinference v2.0.0 发布后，CUDA 12.9 将成为默认版本。\"\n\n#: ../../source/getting_started/using_xinference.rst:473\nmsgid \"Run On CPU Only Host\"\nmsgstr \"在只有 CPU 的机器上运行\"\n\n#: ../../source/getting_started/using_xinference.rst:479\nmsgid \"\"\n\"Replace ``<your_version>`` with Xinference versions, e.g. ``v0.10.3``, \"\n\"``latest`` can be used for the latest version.\"\nmsgstr \"\"\n\"将 ``<your_version>`` 替换为 Xinference 的版本，比如 ``v0.10.3``，可以用 \"\n\"``latest`` 来用于最新版本。\"\n\n#: ../../source/getting_started/using_xinference.rst:481\nmsgid \"\"\n\"For more docker usage, refer to :ref:`Using Docker Image \"\n\"<using_docker_image>`.\"\nmsgstr \"更多 docker 使用，请参考 :ref:`使用 docker 镜像 <using_docker_image>`。\"\n\n#: ../../source/getting_started/using_xinference.rst:485\nmsgid \"What's Next?\"\nmsgstr \"更多\"\n\n#: ../../source/getting_started/using_xinference.rst:487\nmsgid \"\"\n\"Congratulations on getting started with Xinference! To help you navigate \"\n\"and make the most out of this powerful tool, here are some resources and \"\n\"guides:\"\nmsgstr \"\"\n\"恭喜你，已经初步掌握了 Xinference 的用法！为了帮助你更好地使用工具，下面\"\n\"是其他的一些文档和指导资源：\"\n\n#: ../../source/getting_started/using_xinference.rst:490\nmsgid \"\"\n\":ref:`How to Use Client APIs for Different Types of Models \"\n\"<user_guide_client_api>`\"\nmsgstr \":ref:`如何使用 Python 创建不同类型的模型 <user_guide_client_api>`\"\n\n#: ../../source/getting_started/using_xinference.rst:492\nmsgid \":ref:`Choosing the Right Backends for Your Needs <user_guide_backends>`\"\nmsgstr \":ref:`选择正确的推理引擎 <user_guide_backends>` \"\n\n#~ msgid \". code-block:: bash\"\n#~ msgstr \"\"\n\n#~ msgid \"\"\n#~ \"docker run -e XINFERENCE_MODEL_SRC=modelscope \"\n#~ \"-p 9998:9997 --gpus all \"\n#~ \"xprobe/xinference:<your_version>-cu129 xinference-local\"\n#~ \" -H 0.0.0.0 --log-level debug\"\n#~ msgstr \"\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/getting_started.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-07-18 10:54+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/getting_started/index.rst:5\nmsgid \"Getting Started\"\nmsgstr \"入门指南\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-06-26 13:20+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/index.rst:5\nmsgid \"Welcome to Xinference!\"\nmsgstr \"欢迎来到 Xinference！\"\n\n#: ../../source/index.rst:19\nmsgid \"\"\n\"Xorbits Inference (Xinference) is an open-source platform to streamline \"\n\"the operation and integration of a wide array of AI models. With \"\n\"Xinference, you're empowered to run inference using any open-source LLMs,\"\n\" embedding models, and multimodal models either in the cloud or on your \"\n\"own premises, and create robust AI-driven applications.\"\nmsgstr \"\"\n\"Xorbits Inference (Xinference) 是一个开源平台，用于简化各种 AI 模型的运行\"\n\"和集成。借助 Xinference，您可以使用任何开源 LLM、嵌入模型和多模态模型在\"\n\"云端或本地环境中运行推理，并创建强大的 AI 应用。\"\n\n#: ../../source/index.rst:25\nmsgid \"Developing Real-world AI Applications with Xinference\"\nmsgstr \"使用 Xinference 开发真实场景的 AI 应用\"\n\n#: ../../source/index.rst:117\nmsgid \"Getting Started\"\nmsgstr \"入门指南\"\n\n#: ../../source/index.rst:121\nmsgid \"Install Xinference\"\nmsgstr \"安装 Xinference\"\n\n#: ../../source/index.rst:125\nmsgid \"Install Xinference on Linux, Windows, and macOS.\"\nmsgstr \"在 Linux、Windows 和 macOS 上安装 Xinference。\"\n\n#: ../../source/index.rst:127\nmsgid \"Try it out!\"\nmsgstr \"立即体验！\"\n\n#: ../../source/index.rst:131\nmsgid \"Start by running Xinference on a local machine.\"\nmsgstr \"首先在本地计算机上运行 Xinference。\"\n\n#: ../../source/index.rst:136\nmsgid \"Explore models\"\nmsgstr \"探索模型\"\n\n#: ../../source/index.rst:140\nmsgid \"Explore a wide range of models supported by Xinference.\"\nmsgstr \"探索 Xinference 支持的各种模型。\"\n\n#: ../../source/index.rst:142\nmsgid \"Register your own model\"\nmsgstr \"注册你自己的模型\"\n\n#: ../../source/index.rst:146\nmsgid \"Register model weights and turn it into an API.\"\nmsgstr \"注册模型权重，并转化为 API\"\n\n#: ../../source/index.rst:151\nmsgid \"Explore the API\"\nmsgstr \"探索 API\"\n\n#: ../../source/index.rst:155\nmsgid \"Chat & Generate\"\nmsgstr \"聊天 & 生成\"\n\n#: ../../source/index.rst:159\nmsgid \"Learn how to chat with LLMs in Xinference.\"\nmsgstr \"学习如何在 Xinference 中与 LLM聊天。\"\n\n#: ../../source/index.rst:161\nmsgid \"Tools\"\nmsgstr \"工具\"\n\n#: ../../source/index.rst:165\nmsgid \"Learn how to connect LLM with external tools.\"\nmsgstr \"学习如何将 LLM 与外部工具连接起来。\"\n\n#: ../../source/index.rst:170\nmsgid \"Embeddings\"\nmsgstr \"嵌入\"\n\n#: ../../source/index.rst:174\nmsgid \"Learn how to create text embeddings in Xinference.\"\nmsgstr \"学习如何在 Xinference 中创建文本嵌入。\"\n\n#: ../../source/index.rst:176\nmsgid \"Rerank\"\nmsgstr \"重排序\"\n\n#: ../../source/index.rst:180\nmsgid \"Learn how to use rerank models in Xinference.\"\nmsgstr \"学习如何在 Xinference 中使用重排序模型。\"\n\n#: ../../source/index.rst:185\nmsgid \"Images\"\nmsgstr \"图像\"\n\n#: ../../source/index.rst:189\nmsgid \"Learn how to generate images with Xinference.\"\nmsgstr \"学习如何使用Xinference生成图像。\"\n\n#: ../../source/index.rst:191\nmsgid \"Multimodal\"\nmsgstr \"多模态\"\n\n#: ../../source/index.rst:195\nmsgid \"Learn how to process images and audio with LLMs.\"\nmsgstr \"学习如何使用 LLM 处理图像和音频。\"\n\n#: ../../source/index.rst:200\nmsgid \"Audio\"\nmsgstr \"音频\"\n\n#: ../../source/index.rst:204\nmsgid \"Learn how to turn audio into text or text into audio with Xinference.\"\nmsgstr \"学习如何使用 Xinference 将音频转换为文本或将文本转换为音频。\"\n\n#: ../../source/index.rst:206\nmsgid \"Video\"\nmsgstr \"视频\"\n\n#: ../../source/index.rst:210\nmsgid \"Learn how to generate video with Xinference.\"\nmsgstr \"学习如何使用Xinference生成视频。\"\n\n#: ../../source/index.rst:214\nmsgid \"Flexible\"\nmsgstr \"灵活模型\"\n\n#: ../../source/index.rst:218\nmsgid \"Learn how to inference traditional ML models with Xinference.\"\nmsgstr \"了解如何使用 Xinference 推理传统机器学习模型。\"\n\n#: ../../source/index.rst:222\nmsgid \"Getting Involved\"\nmsgstr \"参与我们\"\n\n#: ../../source/index.rst:231\nmsgid \"Get Latest News\"\nmsgstr \"最新资讯\"\n\n#: ../../source/index.rst:239\nmsgid \":fab:`twitter` Follow us on Twitter\"\nmsgstr \":fab:`twitter` 在 Twitter 上关注我们\"\n\n#: ../../source/index.rst:244\nmsgid \":fab:`zhihu` Read our blogs\"\nmsgstr \":fab:`zhihu` 阅读知乎博客\"\n\n#: ../../source/index.rst:251\nmsgid \"Get Support\"\nmsgstr \"寻求帮助\"\n\n#: ../../source/index.rst:259\nmsgid \":fab:`weixin` Find community on WeChat\"\nmsgstr \":fab:`weixin` 微信社区\"\n\n#: ../../source/index.rst:264\nmsgid \":fab:`discord` Find community on Discord\"\nmsgstr \":fab:`discord` Discord 社区\"\n\n#: ../../source/index.rst:269\nmsgid \":fab:`github` Open an issue\"\nmsgstr \":fab:`github` 在 Github 上提 issue\"\n\n#: ../../source/index.rst:276\nmsgid \"Contribute to Xinference\"\nmsgstr \"贡献\"\n\n#: ../../source/index.rst:284\nmsgid \":fab:`github` Create a pull request\"\nmsgstr \":fab:`github` 在 Github 上提 PR\"\n\n#~ msgid \"Vision\"\n#~ msgstr \"视觉\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/audio/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-02-01 16:47+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.13.1\\n\"\n\n#: ../../source/models/builtin/audio/index.rst:5\nmsgid \"Audio Models\"\nmsgstr \"音频模型\"\n\n#: ../../source/models/builtin/audio/index.rst:7\nmsgid \"The following is a list of built-in audio models in Xinference:\"\nmsgstr \"以下是 Xinference 中内置的音频模型列表:\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-base-en-v1.5.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:5\nmsgid \"bge-base-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:7\nmsgid \"**Model Name:** bge-base-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:14\nmsgid \"**Dimensions:** 768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:16\nmsgid \"**Model ID:** BAAI/bge-base-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-base-\"\n\"en-v1.5>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-base-\"\n\"en-v1.5>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en-v1.5.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-base-en.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:5\nmsgid \"bge-base-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:7\nmsgid \"**Model Name:** bge-base-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:14\nmsgid \"**Dimensions:** 768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:16\nmsgid \"**Model ID:** BAAI/bge-base-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-base-\"\n\"en>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-base-en>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-en.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-base-zh-v1.5.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:5\nmsgid \"bge-base-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:7\nmsgid \"**Model Name:** bge-base-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:8\nmsgid \"**Languages:** zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:14\nmsgid \"**Dimensions:** 768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:16\nmsgid \"**Model ID:** BAAI/bge-base-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-base-\"\n\"zh-v1.5>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-base-\"\n\"zh-v1.5>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh-v1.5.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-base-zh.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:5\nmsgid \"bge-base-zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:7\nmsgid \"**Model Name:** bge-base-zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:8\nmsgid \"**Languages:** zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:14\nmsgid \"**Dimensions:** 768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:16\nmsgid \"**Model ID:** BAAI/bge-base-zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-base-\"\n\"zh>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-base-zh>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-base-zh.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-large-en-v1.5.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:5\nmsgid \"bge-large-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:7\nmsgid \"**Model Name:** bge-large-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:14\nmsgid \"**Dimensions:** 1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:16\nmsgid \"**Model ID:** BAAI/bge-large-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-\"\n\"en-v1.5>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-large-\"\n\"en-v1.5>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en-v1.5.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-large-en.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:5\nmsgid \"bge-large-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:7\nmsgid \"**Model Name:** bge-large-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:14\nmsgid \"**Dimensions:** 1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:16\nmsgid \"**Model ID:** BAAI/bge-large-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-\"\n\"en>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-large-en>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-en.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-large-zh-noinstruct.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:5\nmsgid \"bge-large-zh-noinstruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:7\nmsgid \"**Model Name:** bge-large-zh-noinstruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:8\nmsgid \"**Languages:** zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:14\nmsgid \"**Dimensions:** 1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:16\nmsgid \"**Model ID:** BAAI/bge-large-zh-noinstruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-zh-\"\n\"noinstruct>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-\"\n\"large-zh-noinstruct>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-noinstruct.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-large-zh-v1.5.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:5\nmsgid \"bge-large-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:7\nmsgid \"**Model Name:** bge-large-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:8\nmsgid \"**Languages:** zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:14\nmsgid \"**Dimensions:** 1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:16\nmsgid \"**Model ID:** BAAI/bge-large-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-\"\n\"zh-v1.5>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-large-\"\n\"zh-v1.5>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh-v1.5.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-large-zh.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:5\nmsgid \"bge-large-zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:7\nmsgid \"**Model Name:** bge-large-zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:8\nmsgid \"**Languages:** zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:14\nmsgid \"**Dimensions:** 1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:16\nmsgid \"**Model ID:** BAAI/bge-large-zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-\"\n\"zh>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-large-zh>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-large-zh.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-small-en-v1.5.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:5\nmsgid \"bge-small-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:7\nmsgid \"**Model Name:** bge-small-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:14\nmsgid \"**Dimensions:** 384\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:16\nmsgid \"**Model ID:** BAAI/bge-small-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-small-\"\n\"en-v1.5>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-small-\"\n\"en-v1.5>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-en-v1.5.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-small-zh-v1.5.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:5\nmsgid \"bge-small-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:7\nmsgid \"**Model Name:** bge-small-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:8\nmsgid \"**Languages:** zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:14\nmsgid \"**Dimensions:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:16\nmsgid \"**Model ID:** BAAI/bge-small-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-small-\"\n\"zh-v1.5>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-small-\"\n\"zh-v1.5>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh-v1.5.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/bge-small-zh.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:5\nmsgid \"bge-small-zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:7\nmsgid \"**Model Name:** bge-small-zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:8\nmsgid \"**Languages:** zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:14\nmsgid \"**Dimensions:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:16\nmsgid \"**Model ID:** BAAI/bge-small-zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-small-\"\n\"zh>`_, `ModelScope <https://modelscope.cn/models/Xorbits/bge-small-zh>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/bge-small-zh.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/e5-large-v2.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:5\nmsgid \"e5-large-v2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:7\nmsgid \"**Model Name:** e5-large-v2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:14\nmsgid \"**Dimensions:** 1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:16\nmsgid \"**Model ID:** intfloat/e5-large-v2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face \"\n\"<https://huggingface.co/intfloat/e5-large-v2>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/e5-large-v2>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/e5-large-v2.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/gte-base.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:5\nmsgid \"gte-base\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:7\nmsgid \"**Model Name:** gte-base\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:14\nmsgid \"**Dimensions:** 768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:16\nmsgid \"**Model ID:** thenlper/gte-base\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/thenlper/gte-\"\n\"base>`_, `ModelScope <https://modelscope.cn/models/Xorbits/gte-base>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-base.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/gte-large.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:5\nmsgid \"gte-large\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:7\nmsgid \"**Model Name:** gte-large\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:14\nmsgid \"**Dimensions:** 1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:15\nmsgid \"**Max Tokens:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:16\nmsgid \"**Model ID:** thenlper/gte-large\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/thenlper/gte-\"\n\"large>`_, `ModelScope <https://modelscope.cn/models/Xorbits/gte-large>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/gte-large.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-12-25 17:11+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/models/builtin/embedding/index.rst:5\nmsgid \"Embedding Models\"\nmsgstr \"嵌入模型\"\n\n#: ../../source/models/builtin/embedding/index.rst:7\nmsgid \"The following is a list of built-in embedding models in Xinference:\"\nmsgstr \"以下是 Xinference 中内置的嵌入模型列表:\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/jina-embeddings-v2-base-en.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:5\nmsgid \"jina-embeddings-v2-base-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:7\nmsgid \"**Model Name:** jina-embeddings-v2-base-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:14\nmsgid \"**Dimensions:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:15\nmsgid \"**Max Tokens:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:16\nmsgid \"**Model ID:** jinaai/jina-embeddings-v2-base-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/jinaai/jina-\"\n\"embeddings-v2-base-en>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/jina-embeddings-v2-base-en>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-base-en.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/jina-embeddings-v2-small-en.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:5\nmsgid \"jina-embeddings-v2-small-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:7\nmsgid \"**Model Name:** jina-embeddings-v2-small-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:8\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:14\nmsgid \"**Dimensions:** 512\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:15\nmsgid \"**Max Tokens:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:16\nmsgid \"**Model ID:** jinaai/jina-embeddings-v2-small-en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face <https://huggingface.co/jinaai/jina-\"\n\"embeddings-v2-small-en>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/jina-embeddings-v2-small-en>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/jina-embeddings-v2-small-en.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/embedding/multilingual-e5-large.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:5\nmsgid \"multilingual-e5-large\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:7\nmsgid \"**Model Name:** multilingual-e5-large\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:8\nmsgid \"**Languages:** zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:9\nmsgid \"**Abilities:** embed\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:14\nmsgid \"**Dimensions:** 1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:15\nmsgid \"**Max Tokens:** 514\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:16\nmsgid \"**Model ID:** intfloat/multilingual-e5-large\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:17\nmsgid \"\"\n\"**Model Hubs**: `Hugging Face \"\n\"<https://huggingface.co/intfloat/multilingual-e5-large>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/multilingual-e5-large>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/embedding/multilingual-e5-large.rst:19\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/flux.1-dev.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-09 19:13+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/flux.1-dev.rst:5\nmsgid \"FLUX.1-dev\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-dev.rst:7\nmsgid \"**Model Name:** FLUX.1-dev\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-dev.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-dev.rst:9\nmsgid \"**Abilities:** text2image\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-dev.rst:10\nmsgid \"**Available ControlNet:** None\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-dev.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-dev.rst:15\nmsgid \"**Model ID:** black-forest-labs/FLUX.1-dev\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-dev.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/flux.1-schnell.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-09 19:13+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/flux.1-schnell.rst:5\nmsgid \"FLUX.1-schnell\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-schnell.rst:7\nmsgid \"**Model Name:** FLUX.1-schnell\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-schnell.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-schnell.rst:9\nmsgid \"**Abilities:** text2image\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-schnell.rst:10\nmsgid \"**Available ControlNet:** None\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-schnell.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-schnell.rst:15\nmsgid \"**Model ID:** black-forest-labs/FLUX.1-schnell\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/flux.1-schnell.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-03-11 13:33+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/index.rst:5\nmsgid \"Image Models\"\nmsgstr \"图像模型\"\n\n#: ../../source/models/builtin/image/index.rst:7\nmsgid \"The following is a list of built-in image models in Xinference:\"\nmsgstr \"以下是 Xinference 中内置的图像模型列表:\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/kolors.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-09 19:13+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/kolors.rst:5\nmsgid \"kolors\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/kolors.rst:7\nmsgid \"**Model Name:** kolors\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/kolors.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/kolors.rst:9\nmsgid \"**Abilities:** text2image, image2image\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/kolors.rst:10\nmsgid \"**Available ControlNet:** None\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/kolors.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/kolors.rst:15\nmsgid \"**Model ID:** Kwai-Kolors/Kolors-diffusers\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/kolors.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/sd-turbo.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-09 19:13+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/sd-turbo.rst:5\nmsgid \"sd-turbo\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd-turbo.rst:7\nmsgid \"**Model Name:** sd-turbo\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd-turbo.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd-turbo.rst:9\nmsgid \"**Abilities:** text2image\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd-turbo.rst:10\nmsgid \"**Available ControlNet:** None\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd-turbo.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd-turbo.rst:15\nmsgid \"**Model ID:** stabilityai/sd-turbo\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd-turbo.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/sd3-medium.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-09 19:13+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/sd3-medium.rst:5\nmsgid \"sd3-medium\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd3-medium.rst:7\nmsgid \"**Model Name:** sd3-medium\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd3-medium.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd3-medium.rst:9\nmsgid \"**Abilities:** text2image, image2image\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd3-medium.rst:10\nmsgid \"**Available ControlNet:** None\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd3-medium.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd3-medium.rst:15\nmsgid \"**Model ID:** stabilityai/stable-diffusion-3-medium-diffusers\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sd3-medium.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/sdxl-turbo.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-09 19:13+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/sdxl-turbo.rst:5\nmsgid \"sdxl-turbo\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sdxl-turbo.rst:7\nmsgid \"**Model Name:** sdxl-turbo\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sdxl-turbo.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sdxl-turbo.rst:9\nmsgid \"**Abilities:** text2image\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sdxl-turbo.rst:10\nmsgid \"**Available ControlNet:** None\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sdxl-turbo.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sdxl-turbo.rst:15\nmsgid \"**Model ID:** stabilityai/sdxl-turbo\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/sdxl-turbo.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/stable-diffusion-2-inpainting.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-07-28 22:01+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/stable-diffusion-2-inpainting.rst:5\nmsgid \"stable-diffusion-2-inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-2-inpainting.rst:7\nmsgid \"**Model Name:** stable-diffusion-2-inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-2-inpainting.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-2-inpainting.rst:9\nmsgid \"**Abilities:** inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-2-inpainting.rst:10\nmsgid \"**Available ControlNet:** None\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-2-inpainting.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-2-inpainting.rst:15\nmsgid \"**Model ID:** stabilityai/stable-diffusion-2-inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-2-inpainting.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/stable-diffusion-inpainting.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-07-28 22:01+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/stable-diffusion-inpainting.rst:5\nmsgid \"stable-diffusion-inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-inpainting.rst:7\nmsgid \"**Model Name:** stable-diffusion-inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-inpainting.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-inpainting.rst:9\nmsgid \"**Abilities:** inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-inpainting.rst:10\nmsgid \"**Available ControlNet:** None\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-inpainting.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-inpainting.rst:15\nmsgid \"**Model ID:** runwayml/stable-diffusion-inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-inpainting.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/stable-diffusion-v1.5.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-09 19:13+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/stable-diffusion-v1.5.rst:5\nmsgid \"stable-diffusion-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-v1.5.rst:7\nmsgid \"**Model Name:** stable-diffusion-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-v1.5.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-v1.5.rst:9\nmsgid \"**Abilities:** text2image, image2image\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-v1.5.rst:10\nmsgid \"\"\n\"**Available ControlNet:** ['canny', 'mlsd', 'hed', 'scribble', \"\n\"'openpose', 'normal', 'seg']\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-v1.5.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-v1.5.rst:15\nmsgid \"**Model ID:** runwayml/stable-diffusion-v1-5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-v1.5.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/stable-diffusion-xl-base-1.0.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-09 19:13+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-base-1.0.rst:5\nmsgid \"stable-diffusion-xl-base-1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-base-1.0.rst:7\nmsgid \"**Model Name:** stable-diffusion-xl-base-1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-base-1.0.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-base-1.0.rst:9\nmsgid \"**Abilities:** text2image, image2image\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-base-1.0.rst:10\nmsgid \"**Available ControlNet:** ['canny', 'depth', 'zoe-depth']\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-base-1.0.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-base-1.0.rst:15\nmsgid \"**Model ID:** stabilityai/stable-diffusion-xl-base-1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-base-1.0.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/image/stable-diffusion-xl-inpainting.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-07-28 22:01+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-inpainting.rst:5\nmsgid \"stable-diffusion-xl-inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-inpainting.rst:7\nmsgid \"**Model Name:** stable-diffusion-xl-inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-inpainting.rst:8\nmsgid \"**Model Family:** stable_diffusion\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-inpainting.rst:9\nmsgid \"**Abilities:** inpainting\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-inpainting.rst:10\nmsgid \"**Available ControlNet:** None\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-inpainting.rst:13\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-inpainting.rst:15\nmsgid \"**Model ID:** diffusers/stable-diffusion-xl-1.0-inpainting-0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/image/stable-diffusion-xl-inpainting.rst:17\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-12-25 17:11+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/models/builtin/index.rst:5\nmsgid \"Builtin Models\"\nmsgstr \"内置模型\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/baichuan-2-chat.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:5\nmsgid \"baichuan-2-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:8\nmsgid \"**Model Name:** baichuan-2-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:11\nmsgid \"\"\n\"**Description:** Baichuan2-chat is a fine-tuned version of the Baichuan \"\n\"LLM, specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:20\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:22\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:23\nmsgid \"**Model ID:** baichuan-inc/Baichuan2-7B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-\"\n\"inc/Baichuan2-7B-Chat>`_, `ModelScope <https://modelscope.cn/models\"\n\"/baichuan-inc/Baichuan2-7B-Chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:26\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:36\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:38\nmsgid \"**Model ID:** baichuan-inc/Baichuan2-13B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2-chat.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-\"\n\"inc/Baichuan2-13B-Chat>`_, `ModelScope <https://modelscope.cn/models\"\n\"/baichuan-inc/Baichuan2-13B-Chat>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/baichuan-2.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:5\nmsgid \"baichuan-2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:8\nmsgid \"**Model Name:** baichuan-2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:11\nmsgid \"\"\n\"**Description:** Baichuan2 is an open-source Transformer based LLM that \"\n\"is trained on both Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:20\n#: ../../source/models/builtin/llm/baichuan-2.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:22\n#: ../../source/models/builtin/llm/baichuan-2.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:23\nmsgid \"**Model ID:** baichuan-inc/Baichuan2-7B-Base\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-\"\n\"inc/Baichuan2-7B-Base>`_, `ModelScope <https://modelscope.cn/models\"\n\"/baichuan-inc/Baichuan2-7B-Base>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:26\n#: ../../source/models/builtin/llm/baichuan-2.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:36\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:38\nmsgid \"**Model ID:** baichuan-inc/Baichuan2-13B-Base\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-2.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-\"\n\"inc/Baichuan2-13B-Base>`_, `ModelScope <https://modelscope.cn/models\"\n\"/baichuan-inc/Baichuan2-13B-Base>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/baichuan-chat.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:5\nmsgid \"baichuan-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:8\nmsgid \"**Model Name:** baichuan-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:11\nmsgid \"\"\n\"**Description:** Baichuan-chat is a fine-tuned version of the Baichuan \"\n\"LLM, specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:18\nmsgid \"Model Spec 1 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:21\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:23\nmsgid \"**Model ID:** baichuan-inc/Baichuan-13B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-inc\"\n\"/Baichuan-13B-Chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan-chat.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/baichuan.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:5\nmsgid \"baichuan\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:8\nmsgid \"**Model Name:** baichuan\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:11\nmsgid \"\"\n\"**Description:** Baichuan is an open-source Transformer based LLM that is\"\n\" trained on both Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:20\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:21\n#: ../../source/models/builtin/llm/baichuan.rst:36\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:22\nmsgid \"\"\n\"**Quantizations:** q2_K, q3_K_L, q3_K_M, q3_K_S, q4_0, q4_1, q4_K_M, \"\n\"q4_K_S, q5_0, q5_1, q5_K_M, q5_K_S, q6_K, q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:23\nmsgid \"**Model ID:** TheBloke/baichuan-llama-7B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/baichuan-\"\n\"llama-7B-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:26\n#: ../../source/models/builtin/llm/baichuan.rst:41\n#: ../../source/models/builtin/llm/baichuan.rst:56\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:33\nmsgid \"Model Spec 2 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:35\n#: ../../source/models/builtin/llm/baichuan.rst:50\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:37\n#: ../../source/models/builtin/llm/baichuan.rst:52\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:38\nmsgid \"**Model ID:** baichuan-inc/Baichuan-7B\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-inc\"\n\"/Baichuan-7B>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:48\nmsgid \"Model Spec 3 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:51\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:53\nmsgid \"**Model ID:** baichuan-inc/Baichuan-13B-Base\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/baichuan.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-inc\"\n\"/Baichuan-13B-Base>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/chatglm.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:5\nmsgid \"chatglm\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:8\nmsgid \"**Model Name:** chatglm\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:11\nmsgid \"\"\n\"**Description:** ChatGLM is an open-source General Language Model (GLM) \"\n\"based LLM trained on both Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:20\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:21\n#: ../../source/models/builtin/llm/chatglm.rst:36\nmsgid \"**Model Size (in billions):** 6\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:22\nmsgid \"**Quantizations:** q4_0, q4_1, q5_0, q5_1, q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:23\nmsgid \"**Model ID:** Xorbits/chatglm-6B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Xorbits/chatglm-\"\n\"6B-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:26\n#: ../../source/models/builtin/llm/chatglm.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:33\nmsgid \"Model Spec 2 (pytorch, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:38\nmsgid \"**Model ID:** THUDM/chatglm-6b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm.rst:39\nmsgid \"**Model Hubs**:  `Hugging Face <https://huggingface.co/THUDM/chatglm-6b>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/chatglm2-32k.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:5\nmsgid \"chatglm2-32k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:7\nmsgid \"**Context Length:** 32768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:8\nmsgid \"**Model Name:** chatglm2-32k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:11\nmsgid \"\"\n\"**Description:** ChatGLM2-32k is a special version of ChatGLM2, with a \"\n\"context window of 32k tokens instead of 8k.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:18\nmsgid \"Model Spec 1 (pytorch, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:21\nmsgid \"**Model Size (in billions):** 6\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:23\nmsgid \"**Model ID:** THUDM/chatglm2-6b-32k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/THUDM/chatglm2-6b-\"\n\"32k>`_, `ModelScope <https://modelscope.cn/models/ZhipuAI/chatglm2-6b-\"\n\"32k>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2-32k.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/chatglm2.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:5\nmsgid \"chatglm2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:8\nmsgid \"**Model Name:** chatglm2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:11\nmsgid \"\"\n\"**Description:** ChatGLM2 is the second generation of ChatGLM, still \"\n\"open-source and trained on Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:20\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:21\n#: ../../source/models/builtin/llm/chatglm2.rst:36\nmsgid \"**Model Size (in billions):** 6\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:22\nmsgid \"**Quantizations:** q4_0, q4_1, q5_0, q5_1, q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:23\nmsgid \"**Model ID:** Xorbits/chatglm2-6B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Xorbits/chatglm2\"\n\"-6B-GGML>`_, `ModelScope <https://modelscope.cn/models/Xorbits/chatglm2\"\n\"-6B-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:26\n#: ../../source/models/builtin/llm/chatglm2.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:33\nmsgid \"Model Spec 2 (pytorch, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:38\nmsgid \"**Model ID:** THUDM/chatglm2-6b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm2.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face \"\n\"<https://huggingface.co/THUDM/chatglm2-6b>`_, `ModelScope \"\n\"<https://modelscope.cn/models/ZhipuAI/chatglm2-6b>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/chatglm3-32k.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:5\nmsgid \"chatglm3-32k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:7\nmsgid \"**Context Length:** 32768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:8\nmsgid \"**Model Name:** chatglm3-32k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:11\nmsgid \"\"\n\"**Description:** ChatGLM3 is the third generation of ChatGLM, still open-\"\n\"source and trained on Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:18\nmsgid \"Model Spec 1 (pytorch, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:21\nmsgid \"**Model Size (in billions):** 6\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:23\nmsgid \"**Model ID:** THUDM/chatglm3-6b-32k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/THUDM/chatglm3-6b-\"\n\"32k>`_, `ModelScope <https://modelscope.cn/models/ZhipuAI/chatglm3-6b-\"\n\"32k>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3-32k.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/chatglm3.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:5\nmsgid \"chatglm3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:8\nmsgid \"**Model Name:** chatglm3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:11\nmsgid \"\"\n\"**Description:** ChatGLM3 is the third generation of ChatGLM, still open-\"\n\"source and trained on Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:20\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:21\n#: ../../source/models/builtin/llm/chatglm3.rst:36\nmsgid \"**Model Size (in billions):** 6\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:22\nmsgid \"**Quantizations:** q4_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:23\nmsgid \"**Model ID:** Xorbits/chatglm3-6B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Xorbits/chatglm3\"\n\"-6B-GGML>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/chatglm3-ggml>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:26\n#: ../../source/models/builtin/llm/chatglm3.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:33\nmsgid \"Model Spec 2 (pytorch, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:38\nmsgid \"**Model ID:** THUDM/chatglm3-6b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/chatglm3.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face \"\n\"<https://huggingface.co/THUDM/chatglm3-6b>`_, `ModelScope \"\n\"<https://modelscope.cn/models/ZhipuAI/chatglm3-6b>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/code-llama-instruct.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:5\nmsgid \"code-llama-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:7\nmsgid \"**Context Length:** 100000\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:8\nmsgid \"**Model Name:** code-llama-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:11\nmsgid \"\"\n\"**Description:** Code-Llama-Instruct is an instruct-tuned version of the \"\n\"Code-Llama LLM.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:20\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:35\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:50\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:21\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:66\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:22\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:37\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:52\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:23\nmsgid \"**Model ID:** codellama/CodeLlama-7b-Instruct-hf\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/codellama\"\n\"/CodeLlama-7b-Instruct-hf>`_, `ModelScope <https://modelscope.cn/models\"\n\"/AI-ModelScope/CodeLlama-7b-Instruct-hf>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:26\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:41\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:56\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:71\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:86\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:101\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:36\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:81\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:38\nmsgid \"**Model ID:** codellama/CodeLlama-13b-Instruct-hf\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/codellama\"\n\"/CodeLlama-13b-Instruct-hf>`_, `ModelScope <https://modelscope.cn/models\"\n\"/AI-ModelScope/CodeLlama-13b-Instruct-hf>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:48\nmsgid \"Model Spec 3 (pytorch, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:51\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:96\nmsgid \"**Model Size (in billions):** 34\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:53\nmsgid \"**Model ID:** codellama/CodeLlama-34b-Instruct-hf\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/codellama\"\n\"/CodeLlama-34b-Instruct-hf>`_, `ModelScope <https://modelscope.cn/models\"\n\"/AI-ModelScope/CodeLlama-34b-Instruct-hf>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:63\nmsgid \"Model Spec 4 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:65\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:80\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:95\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:67\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:82\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:97\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:68\nmsgid \"**Model ID:** TheBloke/CodeLlama-7B-Instruct-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-7B-Instruct-GGUF>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/CodeLlama-7B-Instruct-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:78\nmsgid \"Model Spec 5 (ggufv2, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:83\nmsgid \"**Model ID:** TheBloke/CodeLlama-13B-Instruct-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:84\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-13B-Instruct-GGUF>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/CodeLlama-13B-Instruct-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:93\nmsgid \"Model Spec 6 (ggufv2, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:98\nmsgid \"**Model ID:** TheBloke/CodeLlama-34B-Instruct-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-instruct.rst:99\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-34B-Instruct-GGUF>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/CodeLlama-34B-Instruct-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/code-llama-python.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:5\nmsgid \"code-llama-python\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:7\nmsgid \"**Context Length:** 100000\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:8\nmsgid \"**Model Name:** code-llama-python\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:11\nmsgid \"\"\n\"**Description:** Code-Llama-Python is a fine-tuned version of the Code-\"\n\"Llama LLM, specializing in Python.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:20\n#: ../../source/models/builtin/llm/code-llama-python.rst:35\n#: ../../source/models/builtin/llm/code-llama-python.rst:50\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:21\n#: ../../source/models/builtin/llm/code-llama-python.rst:66\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:22\n#: ../../source/models/builtin/llm/code-llama-python.rst:37\n#: ../../source/models/builtin/llm/code-llama-python.rst:52\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:23\nmsgid \"**Model ID:** TheBloke/CodeLlama-7B-Python-fp16\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-7B-Python-fp16>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/CodeLlama-7B-Python-fp16>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:26\n#: ../../source/models/builtin/llm/code-llama-python.rst:41\n#: ../../source/models/builtin/llm/code-llama-python.rst:56\n#: ../../source/models/builtin/llm/code-llama-python.rst:71\n#: ../../source/models/builtin/llm/code-llama-python.rst:86\n#: ../../source/models/builtin/llm/code-llama-python.rst:101\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:36\n#: ../../source/models/builtin/llm/code-llama-python.rst:81\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:38\nmsgid \"**Model ID:** TheBloke/CodeLlama-13B-Python-fp16\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-13B-Python-fp16>`_, `ModelScope <https://modelscope.cn/models\"\n\"/AI-ModelScope/CodeLlama-13b-Python-hf>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:48\nmsgid \"Model Spec 3 (pytorch, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:51\n#: ../../source/models/builtin/llm/code-llama-python.rst:96\nmsgid \"**Model Size (in billions):** 34\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:53\nmsgid \"**Model ID:** TheBloke/CodeLlama-34B-Python-fp16\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-34B-Python-fp16>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:63\nmsgid \"Model Spec 4 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:65\n#: ../../source/models/builtin/llm/code-llama-python.rst:80\n#: ../../source/models/builtin/llm/code-llama-python.rst:95\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:67\n#: ../../source/models/builtin/llm/code-llama-python.rst:82\n#: ../../source/models/builtin/llm/code-llama-python.rst:97\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:68\nmsgid \"**Model ID:** TheBloke/CodeLlama-7B-Python-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-7B-Python-GGUF>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/CodeLlama-7B-Python-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:78\nmsgid \"Model Spec 5 (ggufv2, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:83\nmsgid \"**Model ID:** TheBloke/CodeLlama-13B-Python-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:84\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-13B-Python-GGUF>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/CodeLlama-13B-Python-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:93\nmsgid \"Model Spec 6 (ggufv2, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:98\nmsgid \"**Model ID:** TheBloke/CodeLlama-34B-Python-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama-python.rst:99\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-34B-Python-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/code-llama.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:5\nmsgid \"code-llama\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:7\nmsgid \"**Context Length:** 100000\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:8\nmsgid \"**Model Name:** code-llama\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:11\nmsgid \"\"\n\"**Description:** Code-Llama is an open-source LLM trained by fine-tuning \"\n\"LLaMA2 for generating and discussing code.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:20\n#: ../../source/models/builtin/llm/code-llama.rst:35\n#: ../../source/models/builtin/llm/code-llama.rst:50\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:21\n#: ../../source/models/builtin/llm/code-llama.rst:66\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:22\n#: ../../source/models/builtin/llm/code-llama.rst:37\n#: ../../source/models/builtin/llm/code-llama.rst:52\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:23\nmsgid \"**Model ID:** TheBloke/CodeLlama-7B-fp16\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-7B-fp16>`_, `ModelScope <https://modelscope.cn/models/AI-\"\n\"ModelScope/CodeLlama-7b-hf>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:26\n#: ../../source/models/builtin/llm/code-llama.rst:41\n#: ../../source/models/builtin/llm/code-llama.rst:56\n#: ../../source/models/builtin/llm/code-llama.rst:71\n#: ../../source/models/builtin/llm/code-llama.rst:86\n#: ../../source/models/builtin/llm/code-llama.rst:101\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:36\n#: ../../source/models/builtin/llm/code-llama.rst:81\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:38\nmsgid \"**Model ID:** TheBloke/CodeLlama-13B-fp16\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-13B-fp16>`_, `ModelScope <https://modelscope.cn/models/AI-\"\n\"ModelScope/CodeLlama-13b-hf>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:48\nmsgid \"Model Spec 3 (pytorch, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:51\n#: ../../source/models/builtin/llm/code-llama.rst:96\nmsgid \"**Model Size (in billions):** 34\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:53\nmsgid \"**Model ID:** TheBloke/CodeLlama-34B-fp16\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-34B-fp16>`_, `ModelScope <https://modelscope.cn/models/AI-\"\n\"ModelScope/CodeLlama-34b-hf>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:63\nmsgid \"Model Spec 4 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:65\n#: ../../source/models/builtin/llm/code-llama.rst:80\n#: ../../source/models/builtin/llm/code-llama.rst:95\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:67\n#: ../../source/models/builtin/llm/code-llama.rst:82\n#: ../../source/models/builtin/llm/code-llama.rst:97\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:68\nmsgid \"**Model ID:** TheBloke/CodeLlama-7B-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-7B-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:78\nmsgid \"Model Spec 5 (ggufv2, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:83\nmsgid \"**Model ID:** TheBloke/CodeLlama-13B-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:84\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-13B-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:93\nmsgid \"Model Spec 6 (ggufv2, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:98\nmsgid \"**Model ID:** TheBloke/CodeLlama-34B-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/code-llama.rst:99\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/CodeLlama-34B-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/deepseek-chat.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:5\nmsgid \"deepseek-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:8\nmsgid \"**Model Name:** deepseek-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:11\nmsgid \"\"\n\"**Description:** DeepSeek LLM is an advanced language model comprising 67\"\n\" billion parameters. It has been trained from scratch on a vast dataset \"\n\"of 2 trillion tokens in both English and Chinese.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:20\n#: ../../source/models/builtin/llm/deepseek-chat.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:21\n#: ../../source/models/builtin/llm/deepseek-chat.rst:51\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:22\n#: ../../source/models/builtin/llm/deepseek-chat.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:23\nmsgid \"**Model ID:** deepseek-ai/deepseek-llm-7b-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai\"\n\"/deepseek-llm-7b-chat>`_, `ModelScope <https://modelscope.cn/models\"\n\"/deepseek-ai/deepseek-llm-7b-chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:26\n#: ../../source/models/builtin/llm/deepseek-chat.rst:41\n#: ../../source/models/builtin/llm/deepseek-chat.rst:56\n#: ../../source/models/builtin/llm/deepseek-chat.rst:71\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:33\nmsgid \"Model Spec 2 (pytorch, 67 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:36\n#: ../../source/models/builtin/llm/deepseek-chat.rst:66\nmsgid \"**Model Size (in billions):** 67\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:38\nmsgid \"**Model ID:** deepseek-ai/deepseek-llm-67b-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai\"\n\"/deepseek-llm-67b-chat>`_, `ModelScope <https://modelscope.cn/models\"\n\"/deepseek-ai/deepseek-llm-67b-chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:48\nmsgid \"Model Spec 3 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:50\n#: ../../source/models/builtin/llm/deepseek-chat.rst:65\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:52\n#: ../../source/models/builtin/llm/deepseek-chat.rst:67\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:53\nmsgid \"**Model ID:** TheBloke/deepseek-llm-7B-chat-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-\"\n\"llm-7B-chat-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:63\nmsgid \"Model Spec 4 (ggufv2, 67 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:68\nmsgid \"**Model ID:** TheBloke/deepseek-llm-67b-chat-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-chat.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-\"\n\"llm-67b-chat-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/deepseek-coder-instruct.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:5\nmsgid \"deepseek-coder-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:8\nmsgid \"**Model Name:** deepseek-coder-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:11\nmsgid \"\"\n\"**Description:** deepseek-coder-instruct is a model initialized from \"\n\"deepseek-coder-base and fine-tuned on 2B tokens of instruction data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:18\nmsgid \"Model Spec 1 (pytorch, 1_3 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:20\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:35\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:50\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:21\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:66\nmsgid \"**Model Size (in billions):** 1_3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:22\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:37\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:52\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:23\nmsgid \"**Model ID:** deepseek-ai/deepseek-coder-1.3b-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai\"\n\"/deepseek-coder-1.3b-instruct>`_, `ModelScope \"\n\"<https://modelscope.cn/models/deepseek-ai/deepseek-coder-1.3b-instruct>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:26\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:41\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:56\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:71\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:86\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:101\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:33\nmsgid \"Model Spec 2 (pytorch, 6_7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:36\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:81\nmsgid \"**Model Size (in billions):** 6_7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:38\nmsgid \"**Model ID:** deepseek-ai/deepseek-coder-6.7b-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai\"\n\"/deepseek-coder-6.7b-instruct>`_, `ModelScope \"\n\"<https://modelscope.cn/models/deepseek-ai/deepseek-coder-6.7b-instruct>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:48\nmsgid \"Model Spec 3 (pytorch, 33 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:51\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:96\nmsgid \"**Model Size (in billions):** 33\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:53\nmsgid \"**Model ID:** deepseek-ai/deepseek-coder-33b-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai\"\n\"/deepseek-coder-33b-instruct>`_, `ModelScope \"\n\"<https://modelscope.cn/models/deepseek-ai/deepseek-coder-33b-instruct>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:63\nmsgid \"Model Spec 4 (ggufv2, 1_3 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:65\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:80\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:95\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:67\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:82\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:97\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:68\nmsgid \"**Model ID:** TheBloke/deepseek-coder-1.3b-instruct-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-\"\n\"coder-1.3b-instruct-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:78\nmsgid \"Model Spec 5 (ggufv2, 6_7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:83\nmsgid \"**Model ID:** TheBloke/deepseek-coder-6.7B-instruct-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:84\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-\"\n\"coder-6.7B-instruct-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:93\nmsgid \"Model Spec 6 (ggufv2, 33 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:98\nmsgid \"**Model ID:** TheBloke/deepseek-coder-33B-instruct-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/deepseek-coder-instruct.rst:99\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-\"\n\"coder-33B-instruct-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/falcon-instruct.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:5\nmsgid \"falcon-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:8\nmsgid \"**Model Name:** falcon-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:11\nmsgid \"\"\n\"**Description:** Falcon-instruct is a fine-tuned version of the Falcon \"\n\"LLM, specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:20\n#: ../../source/models/builtin/llm/falcon-instruct.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:22\n#: ../../source/models/builtin/llm/falcon-instruct.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:23\nmsgid \"**Model ID:** tiiuae/falcon-7b-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/tiiuae/falcon-7b-\"\n\"instruct>`_, `ModelScope <https://modelscope.cn/models/Xorbits/falcon-7b-\"\n\"instruct>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:26\n#: ../../source/models/builtin/llm/falcon-instruct.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:33\nmsgid \"Model Spec 2 (pytorch, 40 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:36\nmsgid \"**Model Size (in billions):** 40\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:38\nmsgid \"**Model ID:** tiiuae/falcon-40b-instruct\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon-instruct.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/tiiuae/falcon-40b-\"\n\"instruct>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/falcon.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/falcon.rst:5\nmsgid \"falcon\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:8\nmsgid \"**Model Name:** falcon\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:11\nmsgid \"\"\n\"**Description:** Falcon is an open-source Transformer based LLM trained \"\n\"on the RefinedWeb dataset.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:18\nmsgid \"Model Spec 1 (pytorch, 40 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:20\n#: ../../source/models/builtin/llm/falcon.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:21\nmsgid \"**Model Size (in billions):** 40\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:22\n#: ../../source/models/builtin/llm/falcon.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:23\nmsgid \"**Model ID:** tiiuae/falcon-40b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/tiiuae/falcon-\"\n\"40b>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:26\n#: ../../source/models/builtin/llm/falcon.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:33\nmsgid \"Model Spec 2 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:36\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:38\nmsgid \"**Model ID:** tiiuae/falcon-7b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/falcon.rst:39\nmsgid \"**Model Hubs**:  `Hugging Face <https://huggingface.co/tiiuae/falcon-7b>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/glaive-coder.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:5\nmsgid \"glaive-coder\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:7\nmsgid \"**Context Length:** 100000\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:8\nmsgid \"**Model Name:** glaive-coder\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:11\nmsgid \"\"\n\"**Description:** A code model trained on a dataset of ~140k programming \"\n\"related problems and solutions generated from Glaive’s synthetic data \"\n\"generation platform.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:23\nmsgid \"**Model ID:** glaiveai/glaive-coder-7b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/glaiveai/glaive-\"\n\"coder-7b>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/glaive-coder.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/gorilla-openfunctions-v1.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:5\nmsgid \"gorilla-openfunctions-v1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:8\nmsgid \"**Model Name:** gorilla-openfunctions-v1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:11\nmsgid \"\"\n\"**Description:** OpenFunctions is designed to extend Large Language Model\"\n\" (LLM) Chat Completion feature to formulate executable APIs call given \"\n\"natural language instructions and API context.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:21\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:36\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:23\nmsgid \"**Model ID:** gorilla-llm/gorilla-openfunctions-v1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/gorilla-llm\"\n\"/gorilla-openfunctions-v1>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:26\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:33\nmsgid \"Model Spec 2 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:35\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:37\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:38\nmsgid \"**Model ID:** TheBloke/gorilla-openfunctions-v1-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gorilla-openfunctions-v1.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/gorilla-\"\n\"openfunctions-v1-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/gpt-2.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:5\nmsgid \"gpt-2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:7\nmsgid \"**Context Length:** 1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:8\nmsgid \"**Model Name:** gpt-2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:11\nmsgid \"\"\n\"**Description:** GPT-2 is a Transformer-based LLM that is trained on \"\n\"WebTest, a 40 GB dataset of Reddit posts with 3+ upvotes.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 1 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:20\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:21\nmsgid \"**Model Size (in billions):** 1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:22\nmsgid \"**Quantizations:** none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:23\nmsgid \"**Model ID:** marella/gpt-2-ggml\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face \"\n\"<https://huggingface.co/marella/gpt-2-ggml>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/gpt-2.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-02-01 16:47+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.13.1\\n\"\n\n#: ../../source/models/builtin/llm/index.rst:5\nmsgid \"Large language Models\"\nmsgstr \"大语言模型\"\n\n#: ../../source/models/builtin/llm/index.rst:7\nmsgid \"The following is a list of built-in LLM in Xinference:\"\nmsgstr \"以下是 Xinference 中内置的 LLM 列表:\"\n\n#: ../../source/models/builtin/llm/index.rst:13\nmsgid \"MODEL NAME\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:14\nmsgid \"ABILITIES\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:15\nmsgid \"COTNEXT_LENGTH\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:16\nmsgid \"DESCRIPTION\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:19\nmsgid \":ref:`baichuan <models_llm_baichuan>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:20\n#: ../../source/models/builtin/llm/index.rst:25\n#: ../../source/models/builtin/llm/index.rst:65\n#: ../../source/models/builtin/llm/index.rst:75\n#: ../../source/models/builtin/llm/index.rst:90\n#: ../../source/models/builtin/llm/index.rst:110\n#: ../../source/models/builtin/llm/index.rst:115\n#: ../../source/models/builtin/llm/index.rst:120\n#: ../../source/models/builtin/llm/index.rst:140\n#: ../../source/models/builtin/llm/index.rst:160\n#: ../../source/models/builtin/llm/index.rst:170\n#: ../../source/models/builtin/llm/index.rst:185\n#: ../../source/models/builtin/llm/index.rst:205\n#: ../../source/models/builtin/llm/index.rst:220\n#: ../../source/models/builtin/llm/index.rst:225\n#: ../../source/models/builtin/llm/index.rst:235\n#: ../../source/models/builtin/llm/index.rst:240\n#: ../../source/models/builtin/llm/index.rst:245\n#: ../../source/models/builtin/llm/index.rst:280\n#: ../../source/models/builtin/llm/index.rst:290\n#: ../../source/models/builtin/llm/index.rst:295\nmsgid \"generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:21\n#: ../../source/models/builtin/llm/index.rst:26\n#: ../../source/models/builtin/llm/index.rst:31\n#: ../../source/models/builtin/llm/index.rst:36\n#: ../../source/models/builtin/llm/index.rst:81\n#: ../../source/models/builtin/llm/index.rst:86\n#: ../../source/models/builtin/llm/index.rst:106\n#: ../../source/models/builtin/llm/index.rst:131\n#: ../../source/models/builtin/llm/index.rst:141\n#: ../../source/models/builtin/llm/index.rst:146\n#: ../../source/models/builtin/llm/index.rst:196\n#: ../../source/models/builtin/llm/index.rst:201\n#: ../../source/models/builtin/llm/index.rst:216\n#: ../../source/models/builtin/llm/index.rst:221\n#: ../../source/models/builtin/llm/index.rst:226\n#: ../../source/models/builtin/llm/index.rst:256\n#: ../../source/models/builtin/llm/index.rst:291\nmsgid \"4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:22\nmsgid \"\"\n\"Baichuan is an open-source Transformer based LLM that is trained on both \"\n\"Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:24\nmsgid \":ref:`baichuan-2 <models_llm_baichuan-2>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:27\nmsgid \"\"\n\"Baichuan2 is an open-source Transformer based LLM that is trained on both\"\n\" Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:29\nmsgid \":ref:`baichuan-2-chat <models_llm_baichuan-2-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:30\n#: ../../source/models/builtin/llm/index.rst:35\n#: ../../source/models/builtin/llm/index.rst:40\n#: ../../source/models/builtin/llm/index.rst:45\n#: ../../source/models/builtin/llm/index.rst:50\n#: ../../source/models/builtin/llm/index.rst:60\n#: ../../source/models/builtin/llm/index.rst:70\n#: ../../source/models/builtin/llm/index.rst:80\n#: ../../source/models/builtin/llm/index.rst:85\n#: ../../source/models/builtin/llm/index.rst:95\n#: ../../source/models/builtin/llm/index.rst:100\n#: ../../source/models/builtin/llm/index.rst:105\n#: ../../source/models/builtin/llm/index.rst:125\n#: ../../source/models/builtin/llm/index.rst:130\n#: ../../source/models/builtin/llm/index.rst:135\n#: ../../source/models/builtin/llm/index.rst:145\n#: ../../source/models/builtin/llm/index.rst:150\n#: ../../source/models/builtin/llm/index.rst:155\n#: ../../source/models/builtin/llm/index.rst:165\n#: ../../source/models/builtin/llm/index.rst:175\n#: ../../source/models/builtin/llm/index.rst:180\n#: ../../source/models/builtin/llm/index.rst:190\n#: ../../source/models/builtin/llm/index.rst:195\n#: ../../source/models/builtin/llm/index.rst:200\n#: ../../source/models/builtin/llm/index.rst:230\n#: ../../source/models/builtin/llm/index.rst:250\n#: ../../source/models/builtin/llm/index.rst:255\n#: ../../source/models/builtin/llm/index.rst:260\n#: ../../source/models/builtin/llm/index.rst:265\n#: ../../source/models/builtin/llm/index.rst:270\n#: ../../source/models/builtin/llm/index.rst:275\n#: ../../source/models/builtin/llm/index.rst:285\n#: ../../source/models/builtin/llm/index.rst:300\n#: ../../source/models/builtin/llm/index.rst:310\n#: ../../source/models/builtin/llm/index.rst:315\nmsgid \"chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:32\nmsgid \"\"\n\"Baichuan2-chat is a fine-tuned version of the Baichuan LLM, specializing \"\n\"in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:34\nmsgid \":ref:`baichuan-chat <models_llm_baichuan-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:37\nmsgid \"\"\n\"Baichuan-chat is a fine-tuned version of the Baichuan LLM, specializing \"\n\"in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:39\nmsgid \":ref:`chatglm <models_llm_chatglm>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:41\n#: ../../source/models/builtin/llm/index.rst:91\n#: ../../source/models/builtin/llm/index.rst:96\n#: ../../source/models/builtin/llm/index.rst:176\n#: ../../source/models/builtin/llm/index.rst:186\n#: ../../source/models/builtin/llm/index.rst:191\n#: ../../source/models/builtin/llm/index.rst:206\n#: ../../source/models/builtin/llm/index.rst:246\n#: ../../source/models/builtin/llm/index.rst:251\n#: ../../source/models/builtin/llm/index.rst:271\n#: ../../source/models/builtin/llm/index.rst:276\n#: ../../source/models/builtin/llm/index.rst:281\n#: ../../source/models/builtin/llm/index.rst:286\nmsgid \"2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:42\nmsgid \"\"\n\"ChatGLM is an open-source General Language Model (GLM) based LLM trained \"\n\"on both Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:44\nmsgid \":ref:`chatglm2 <models_llm_chatglm2>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:46\n#: ../../source/models/builtin/llm/index.rst:56\n#: ../../source/models/builtin/llm/index.rst:121\n#: ../../source/models/builtin/llm/index.rst:151\n#: ../../source/models/builtin/llm/index.rst:156\n#: ../../source/models/builtin/llm/index.rst:161\n#: ../../source/models/builtin/llm/index.rst:181\n#: ../../source/models/builtin/llm/index.rst:231\n#: ../../source/models/builtin/llm/index.rst:236\n#: ../../source/models/builtin/llm/index.rst:241\n#: ../../source/models/builtin/llm/index.rst:311\n#: ../../source/models/builtin/llm/index.rst:316\nmsgid \"8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:47\nmsgid \"\"\n\"ChatGLM2 is the second generation of ChatGLM, still open-source and \"\n\"trained on Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:49\nmsgid \":ref:`chatglm2-32k <models_llm_chatglm2-32k>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:51\n#: ../../source/models/builtin/llm/index.rst:61\n#: ../../source/models/builtin/llm/index.rst:166\n#: ../../source/models/builtin/llm/index.rst:171\n#: ../../source/models/builtin/llm/index.rst:211\nmsgid \"32768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:52\nmsgid \"\"\n\"ChatGLM2-32k is a special version of ChatGLM2, with a context window of \"\n\"32k tokens instead of 8k.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:54\nmsgid \":ref:`chatglm3 <models_llm_chatglm3>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:55\n#: ../../source/models/builtin/llm/index.rst:210\nmsgid \"chat, tools\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:57\n#: ../../source/models/builtin/llm/index.rst:62\nmsgid \"\"\n\"ChatGLM3 is the third generation of ChatGLM, still open-source and \"\n\"trained on Chinese and English data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:59\nmsgid \":ref:`chatglm3-32k <models_llm_chatglm3-32k>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:64\nmsgid \":ref:`code-llama <models_llm_code-llama>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:66\n#: ../../source/models/builtin/llm/index.rst:71\n#: ../../source/models/builtin/llm/index.rst:76\n#: ../../source/models/builtin/llm/index.rst:101\n#: ../../source/models/builtin/llm/index.rst:266\nmsgid \"100000\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:67\nmsgid \"\"\n\"Code-Llama is an open-source LLM trained by fine-tuning LLaMA2 for \"\n\"generating and discussing code.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:69\nmsgid \":ref:`code-llama-instruct <models_llm_code-llama-instruct>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:72\nmsgid \"Code-Llama-Instruct is an instruct-tuned version of the Code-Llama LLM.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:74\nmsgid \":ref:`code-llama-python <models_llm_code-llama-python>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:77\nmsgid \"\"\n\"Code-Llama-Python is a fine-tuned version of the Code-Llama LLM, \"\n\"specializing in Python.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:79\nmsgid \":ref:`deepseek-chat <models_llm_deepseek-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:82\nmsgid \"\"\n\"DeepSeek LLM is an advanced language model comprising 67 billion \"\n\"parameters. It has been trained from scratch on a vast dataset of 2 \"\n\"trillion tokens in both English and Chinese.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:84\nmsgid \":ref:`deepseek-coder-instruct <models_llm_deepseek-coder-instruct>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:87\nmsgid \"\"\n\"deepseek-coder-instruct is a model initialized from deepseek-coder-base \"\n\"and fine-tuned on 2B tokens of instruction data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:89\nmsgid \":ref:`falcon <models_llm_falcon>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:92\nmsgid \"\"\n\"Falcon is an open-source Transformer based LLM trained on the RefinedWeb \"\n\"dataset.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:94\nmsgid \":ref:`falcon-instruct <models_llm_falcon-instruct>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:97\nmsgid \"\"\n\"Falcon-instruct is a fine-tuned version of the Falcon LLM, specializing \"\n\"in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:99\nmsgid \":ref:`glaive-coder <models_llm_glaive-coder>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:102\nmsgid \"\"\n\"A code model trained on a dataset of ~140k programming related problems \"\n\"and solutions generated from Glaive’s synthetic data generation platform\"\n\".\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:104\nmsgid \":ref:`gorilla-openfunctions-v1 <models_llm_gorilla-openfunctions-v1>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:107\nmsgid \"\"\n\"OpenFunctions is designed to extend Large Language Model (LLM) Chat \"\n\"Completion feature to formulate executable APIs call given natural \"\n\"language instructions and API context.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:109\nmsgid \":ref:`gpt-2 <models_llm_gpt-2>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:111\nmsgid \"1024\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:112\nmsgid \"\"\n\"GPT-2 is a Transformer-based LLM that is trained on WebTest, a 40 GB \"\n\"dataset of Reddit posts with 3+ upvotes.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:114\nmsgid \":ref:`internlm-20b <models_llm_internlm-20b>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:116\n#: ../../source/models/builtin/llm/index.rst:126\n#: ../../source/models/builtin/llm/index.rst:261\nmsgid \"16384\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:117\nmsgid \"\"\n\"Pre-trained on over 2.3T Tokens containing high-quality English, Chinese,\"\n\" and code data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:119\nmsgid \":ref:`internlm-7b <models_llm_internlm-7b>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:122\nmsgid \"\"\n\"InternLM is a Transformer-based LLM that is trained on both Chinese and \"\n\"English data, focusing on practical scenarios.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:124\nmsgid \":ref:`internlm-chat-20b <models_llm_internlm-chat-20b>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:127\nmsgid \"\"\n\"Pre-trained on over 2.3T Tokens containing high-quality English, Chinese,\"\n\" and code data. The Chat version has undergone SFT and RLHF training.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:129\nmsgid \":ref:`internlm-chat-7b <models_llm_internlm-chat-7b>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:132\nmsgid \"\"\n\"Internlm-chat is a fine-tuned version of the Internlm LLM, specializing \"\n\"in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:134\nmsgid \":ref:`internlm2-chat <models_llm_internlm2-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:136\n#: ../../source/models/builtin/llm/index.rst:296\n#: ../../source/models/builtin/llm/index.rst:301\n#: ../../source/models/builtin/llm/index.rst:306\nmsgid \"204800\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:137\nmsgid \"The second generation of the InternLM model, InternLM2.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:139\nmsgid \":ref:`llama-2 <models_llm_llama-2>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:142\nmsgid \"\"\n\"Llama-2 is the second generation of Llama, open-source and trained on a \"\n\"larger amount of data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:144\nmsgid \":ref:`llama-2-chat <models_llm_llama-2-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:147\nmsgid \"\"\n\"Llama-2-Chat is a fine-tuned version of the Llama-2 LLM, specializing in \"\n\"chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:149\nmsgid \":ref:`mistral-instruct-v0.1 <models_llm_mistral-instruct-v0.1>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:152\nmsgid \"\"\n\"Mistral-7B-Instruct is a fine-tuned version of the Mistral-7B LLM on \"\n\"public datasets, specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:154\nmsgid \":ref:`mistral-instruct-v0.2 <models_llm_mistral-instruct-v0.2>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:157\nmsgid \"\"\n\"The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) is an improved \"\n\"instruct fine-tuned version of Mistral-7B-Instruct-v0.1.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:159\nmsgid \":ref:`mistral-v0.1 <models_llm_mistral-v0.1>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:162\nmsgid \"\"\n\"Mistral-7B is a unmoderated Transformer based LLM claiming to outperform \"\n\"Llama2 on all benchmarks.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:164\nmsgid \":ref:`mixtral-instruct-v0.1 <models_llm_mixtral-instruct-v0.1>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:167\nmsgid \"\"\n\"Mistral-8x7B-Instruct is a fine-tuned version of the Mistral-8x7B LLM, \"\n\"specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:169\nmsgid \":ref:`mixtral-v0.1 <models_llm_mixtral-v0.1>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:172\nmsgid \"\"\n\"The Mixtral-8x7B Large Language Model (LLM) is a pretrained generative \"\n\"Sparse Mixture of Experts.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:174\nmsgid \":ref:`openbuddy <models_llm_openbuddy>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:177\nmsgid \"\"\n\"OpenBuddy is a powerful open multilingual chatbot model aimed at global \"\n\"users.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:179\nmsgid \":ref:`openhermes-2.5 <models_llm_openhermes-2.5>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:182\nmsgid \"\"\n\"Openhermes 2.5 is a fine-tuned version of Mistral-7B-v0.1 on primarily \"\n\"GPT-4 generated data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:184\nmsgid \":ref:`opt <models_llm_opt>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:187\nmsgid \"\"\n\"Opt is an open-source, decoder-only, Transformer based LLM that was \"\n\"designed to replicate GPT-3.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:189\nmsgid \":ref:`orca <models_llm_orca>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:192\nmsgid \"\"\n\"Orca is an LLM trained by fine-tuning LLaMA on explanation traces \"\n\"obtained from GPT-4.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:194\nmsgid \":ref:`orion-chat <models_llm_orion-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:197\n#: ../../source/models/builtin/llm/index.rst:202\nmsgid \"\"\n\"Orion-14B series models are open-source multilingual large language \"\n\"models trained from scratch by OrionStarAI.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:199\nmsgid \":ref:`orion-chat-rag <models_llm_orion-chat-rag>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:204\nmsgid \":ref:`phi-2 <models_llm_phi-2>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:207\nmsgid \"\"\n\"Phi-2 is a 2.7B Transformer based LLM used for research on model safety, \"\n\"trained with data similar to Phi-1.5 but augmented with synthetic texts \"\n\"and curated websites.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:209\nmsgid \":ref:`qwen-chat <models_llm_qwen-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:212\nmsgid \"\"\n\"Qwen-chat is a fine-tuned version of the Qwen LLM trained with alignment \"\n\"techniques, specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:214\nmsgid \":ref:`qwen-vl-chat <models_llm_qwen-vl-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:215\n#: ../../source/models/builtin/llm/index.rst:305\nmsgid \"chat, vision\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:217\nmsgid \"\"\n\"Qwen-VL-Chat supports more flexible interaction, such as multiple image \"\n\"inputs, multi-round question answering, and creative capabilities.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:219\nmsgid \":ref:`skywork <models_llm_skywork>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:222\n#: ../../source/models/builtin/llm/index.rst:227\nmsgid \"\"\n\"Skywork is a series of large models developed by the Kunlun Group · \"\n\"Skywork team.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:224\nmsgid \":ref:`skywork-math <models_llm_skywork-math>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:229\nmsgid \":ref:`starchat-beta <models_llm_starchat-beta>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:232\nmsgid \"\"\n\"Starchat-beta is a fine-tuned version of the Starcoderplus LLM, \"\n\"specializing in coding assistance.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:234\nmsgid \":ref:`starcoder <models_llm_starcoder>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:237\nmsgid \"\"\n\"Starcoder is an open-source Transformer based LLM that is trained on \"\n\"permissively licensed data from GitHub.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:239\nmsgid \":ref:`starcoderplus <models_llm_starcoderplus>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:242\nmsgid \"\"\n\"Starcoderplus is an open-source LLM trained by fine-tuning Starcoder on \"\n\"RedefinedWeb and StarCoderData datasets.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:244\nmsgid \":ref:`tiny-llama <models_llm_tiny-llama>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:247\nmsgid \"\"\n\"The TinyLlama project aims to pretrain a 1.1B Llama model on 3 trillion \"\n\"tokens.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:249\nmsgid \":ref:`vicuna-v1.3 <models_llm_vicuna-v1.3>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:252\n#: ../../source/models/builtin/llm/index.rst:257\nmsgid \"\"\n\"Vicuna is an open-source LLM trained by fine-tuning LLaMA on data \"\n\"collected from ShareGPT.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:254\nmsgid \":ref:`vicuna-v1.5 <models_llm_vicuna-v1.5>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:259\nmsgid \":ref:`vicuna-v1.5-16k <models_llm_vicuna-v1.5-16k>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:262\nmsgid \"\"\n\"Vicuna-v1.5-16k is a special version of Vicuna-v1.5, with a context \"\n\"window of 16k tokens instead of 4k.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:264\nmsgid \":ref:`wizardcoder-python-v1.0 <models_llm_wizardcoder-python-v1.0>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:269\nmsgid \":ref:`wizardlm-v1.0 <models_llm_wizardlm-v1.0>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:272\nmsgid \"\"\n\"WizardLM is an open-source LLM trained by fine-tuning LLaMA with Evol-\"\n\"Instruct.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:274\nmsgid \":ref:`wizardmath-v1.0 <models_llm_wizardmath-v1.0>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:277\nmsgid \"\"\n\"WizardMath is an open-source LLM trained by fine-tuning Llama2 with Evol-\"\n\"Instruct, specializing in math.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:279\nmsgid \":ref:`xverse <models_llm_xverse>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:282\nmsgid \"\"\n\"XVERSE is a multilingual large language model, independently developed by\"\n\" Shenzhen Yuanxiang Technology.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:284\nmsgid \":ref:`xverse-chat <models_llm_xverse-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:287\nmsgid \"XVERSEB-Chat is the aligned version of model XVERSE.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:289\nmsgid \":ref:`yi <models_llm_yi>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:292\n#: ../../source/models/builtin/llm/index.rst:297\n#: ../../source/models/builtin/llm/index.rst:302\nmsgid \"\"\n\"The Yi series models are large language models trained from scratch by \"\n\"developers at 01.AI.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:294\nmsgid \":ref:`yi-200k <models_llm_yi-200k>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:299\nmsgid \":ref:`yi-chat <models_llm_yi-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:304\nmsgid \":ref:`yi-vl-chat <models_llm_yi-vl-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:307\nmsgid \"\"\n\"Yi Vision Language (Yi-VL) model is the open-source, multimodal version \"\n\"of the Yi Large Language Model (LLM) series, enabling content \"\n\"comprehension, recognition, and multi-round conversations about images.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:309\nmsgid \":ref:`zephyr-7b-alpha <models_llm_zephyr-7b-alpha>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:312\nmsgid \"\"\n\"Zephyr-7B-α is the first model in the series, and is a fine-tuned \"\n\"version of mistralai/Mistral-7B-v0.1.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:314\nmsgid \":ref:`zephyr-7b-beta <models_llm_zephyr-7b-beta>`\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/index.rst:317\nmsgid \"\"\n\"Zephyr-7B-β is the second model in the series, and is a fine-tuned \"\n\"version of mistralai/Mistral-7B-v0.1\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/internlm-20b.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:5\nmsgid \"internlm-20b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:7\nmsgid \"**Context Length:** 16384\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:8\nmsgid \"**Model Name:** internlm-20b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:11\nmsgid \"\"\n\"**Description:** Pre-trained on over 2.3T Tokens containing high-quality \"\n\"English, Chinese, and code data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:18\nmsgid \"Model Spec 1 (pytorch, 20 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:21\nmsgid \"**Model Size (in billions):** 20\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:23\nmsgid \"**Model ID:** internlm/internlm-20b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/internlm/internlm-\"\n\"20b>`_, `ModelScope <https://modelscope.cn/models/Shanghai_AI_Laboratory\"\n\"/internlm-20b>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-20b.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/internlm-7b.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:5\nmsgid \"internlm-7b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:8\nmsgid \"**Model Name:** internlm-7b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:11\nmsgid \"\"\n\"**Description:** InternLM is a Transformer-based LLM that is trained on \"\n\"both Chinese and English data, focusing on practical scenarios.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:23\nmsgid \"**Model ID:** internlm/internlm-7b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/internlm/internlm-\"\n\"7b>`_, `ModelScope <https://modelscope.cn/models/Shanghai_AI_Laboratory\"\n\"/internlm-7b>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-7b.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/internlm-chat-20b.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:5\nmsgid \"internlm-chat-20b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:7\nmsgid \"**Context Length:** 16384\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:8\nmsgid \"**Model Name:** internlm-chat-20b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:11\nmsgid \"\"\n\"**Description:** Pre-trained on over 2.3T Tokens containing high-quality \"\n\"English, Chinese, and code data. The Chat version has undergone SFT and \"\n\"RLHF training.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:18\nmsgid \"Model Spec 1 (pytorch, 20 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:21\nmsgid \"**Model Size (in billions):** 20\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:23\nmsgid \"**Model ID:** internlm/internlm-chat-20b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/internlm/internlm-\"\n\"chat-20b>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Shanghai_AI_Laboratory/internlm-chat-20b>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-20b.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/internlm-chat-7b.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:5\nmsgid \"internlm-chat-7b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:8\nmsgid \"**Model Name:** internlm-chat-7b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:11\nmsgid \"\"\n\"**Description:** Internlm-chat is a fine-tuned version of the Internlm \"\n\"LLM, specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:23\nmsgid \"**Model ID:** internlm/internlm-chat-7b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/internlm/internlm-\"\n\"chat-7b>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Shanghai_AI_Laboratory/internlm-chat-7b>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/internlm-chat-7b.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/llama-2-chat.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:5\nmsgid \"llama-2-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:8\nmsgid \"**Model Name:** llama-2-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:11\nmsgid \"\"\n\"**Description:** Llama-2-Chat is a fine-tuned version of the Llama-2 LLM,\"\n\" specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:20\n#: ../../source/models/builtin/llm/llama-2-chat.rst:35\n#: ../../source/models/builtin/llm/llama-2-chat.rst:50\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:21\n#: ../../source/models/builtin/llm/llama-2-chat.rst:66\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:22\n#: ../../source/models/builtin/llm/llama-2-chat.rst:37\n#: ../../source/models/builtin/llm/llama-2-chat.rst:52\nmsgid \"\"\n\"**Quantizations:** q2_K, q3_K_L, q3_K_M, q3_K_S, q4_0, q4_1, q4_K_M, \"\n\"q4_K_S, q5_0, q5_1, q5_K_M, q5_K_S, q6_K, q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:23\nmsgid \"**Model ID:** TheBloke/Llama-2-7B-Chat-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2\"\n\"-7B-Chat-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:26\n#: ../../source/models/builtin/llm/llama-2-chat.rst:41\n#: ../../source/models/builtin/llm/llama-2-chat.rst:56\n#: ../../source/models/builtin/llm/llama-2-chat.rst:71\n#: ../../source/models/builtin/llm/llama-2-chat.rst:86\n#: ../../source/models/builtin/llm/llama-2-chat.rst:101\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:33\nmsgid \"Model Spec 2 (ggmlv3, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:36\n#: ../../source/models/builtin/llm/llama-2-chat.rst:81\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:38\nmsgid \"**Model ID:** TheBloke/Llama-2-13B-chat-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2\"\n\"-13B-chat-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:48\nmsgid \"Model Spec 3 (ggmlv3, 70 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:51\n#: ../../source/models/builtin/llm/llama-2-chat.rst:96\nmsgid \"**Model Size (in billions):** 70\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:53\nmsgid \"**Model ID:** TheBloke/Llama-2-70B-Chat-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2\"\n\"-70B-Chat-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:63\nmsgid \"Model Spec 4 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:65\n#: ../../source/models/builtin/llm/llama-2-chat.rst:80\n#: ../../source/models/builtin/llm/llama-2-chat.rst:95\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:67\n#: ../../source/models/builtin/llm/llama-2-chat.rst:82\n#: ../../source/models/builtin/llm/llama-2-chat.rst:97\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:68\nmsgid \"**Model ID:** meta-llama/Llama-2-7b-chat-hf\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2\"\n\"-7b-chat-hf>`_, `ModelScope \"\n\"<https://modelscope.cn/models/modelscope/Llama-2-7b-chat-ms>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:78\nmsgid \"Model Spec 5 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:83\nmsgid \"**Model ID:** meta-llama/Llama-2-13b-chat-hf\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:84\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2\"\n\"-13b-chat-hf>`_, `ModelScope \"\n\"<https://modelscope.cn/models/modelscope/Llama-2-13b-chat-ms>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:93\nmsgid \"Model Spec 6 (pytorch, 70 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:98\nmsgid \"**Model ID:** meta-llama/Llama-2-70b-chat-hf\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2-chat.rst:99\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2\"\n\"-70b-chat-hf>`_, `ModelScope \"\n\"<https://modelscope.cn/models/modelscope/Llama-2-70b-chat-ms>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/llama-2.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:5\nmsgid \"llama-2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:8\nmsgid \"**Model Name:** llama-2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:11\nmsgid \"\"\n\"**Description:** Llama-2 is the second generation of Llama, open-source \"\n\"and trained on a larger amount of data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:20\n#: ../../source/models/builtin/llm/llama-2.rst:35\n#: ../../source/models/builtin/llm/llama-2.rst:50\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:21\n#: ../../source/models/builtin/llm/llama-2.rst:66\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:22\n#: ../../source/models/builtin/llm/llama-2.rst:37\n#: ../../source/models/builtin/llm/llama-2.rst:52\nmsgid \"\"\n\"**Quantizations:** q2_K, q3_K_L, q3_K_M, q3_K_S, q4_0, q4_1, q4_K_M, \"\n\"q4_K_S, q5_0, q5_1, q5_K_M, q5_K_S, q6_K, q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:23\nmsgid \"**Model ID:** TheBloke/Llama-2-7B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2\"\n\"-7B-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:26\n#: ../../source/models/builtin/llm/llama-2.rst:41\n#: ../../source/models/builtin/llm/llama-2.rst:56\n#: ../../source/models/builtin/llm/llama-2.rst:71\n#: ../../source/models/builtin/llm/llama-2.rst:86\n#: ../../source/models/builtin/llm/llama-2.rst:101\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:33\nmsgid \"Model Spec 2 (ggmlv3, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:36\n#: ../../source/models/builtin/llm/llama-2.rst:81\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:38\nmsgid \"**Model ID:** TheBloke/Llama-2-13B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2\"\n\"-13B-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:48\nmsgid \"Model Spec 3 (ggmlv3, 70 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:51\n#: ../../source/models/builtin/llm/llama-2.rst:96\nmsgid \"**Model Size (in billions):** 70\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:53\nmsgid \"**Model ID:** TheBloke/Llama-2-70B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2\"\n\"-70B-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:63\nmsgid \"Model Spec 4 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:65\n#: ../../source/models/builtin/llm/llama-2.rst:80\n#: ../../source/models/builtin/llm/llama-2.rst:95\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:67\n#: ../../source/models/builtin/llm/llama-2.rst:82\n#: ../../source/models/builtin/llm/llama-2.rst:97\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:68\nmsgid \"**Model ID:** meta-llama/Llama-2-7b-hf\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2\"\n\"-7b-hf>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:78\nmsgid \"Model Spec 5 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:83\nmsgid \"**Model ID:** meta-llama/Llama-2-13b-hf\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:84\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2\"\n\"-13b-hf>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:93\nmsgid \"Model Spec 6 (pytorch, 70 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:98\nmsgid \"**Model ID:** meta-llama/Llama-2-70b-hf\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/llama-2.rst:99\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2\"\n\"-70b-hf>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/mistral-instruct-v0.1.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:5\nmsgid \"mistral-instruct-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:8\nmsgid \"**Model Name:** mistral-instruct-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:11\nmsgid \"\"\n\"**Description:** Mistral-7B-Instruct is a fine-tuned version of the \"\n\"Mistral-7B LLM on public datasets, specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:21\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:36\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:23\nmsgid \"**Model ID:** mistralai/Mistral-7B-Instruct-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mistral-\"\n\"7B-Instruct-v0.1>`_, `ModelScope <https://modelscope.cn/models/Xorbits\"\n\"/Mistral-7B-Instruct-v0.1>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:26\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:33\nmsgid \"Model Spec 2 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:35\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:37\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, \"\n\"Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:38\nmsgid \"**Model ID:** TheBloke/Mistral-7B-Instruct-v0.1-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.1.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-\"\n\"7B-Instruct-v0.1-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/mistral-instruct-v0.2.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:5\nmsgid \"mistral-instruct-v0.2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:8\nmsgid \"**Model Name:** mistral-instruct-v0.2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:11\nmsgid \"\"\n\"**Description:** The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) \"\n\"is an improved instruct fine-tuned version of Mistral-7B-Instruct-v0.1.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:21\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:36\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:23\nmsgid \"**Model ID:** mistralai/Mistral-7B-Instruct-v0.2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mistral-\"\n\"7B-Instruct-v0.2>`_, `ModelScope <https://modelscope.cn/models/AI-\"\n\"ModelScope/Mistral-7B-Instruct-v0.2>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:26\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:33\nmsgid \"Model Spec 2 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:35\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:37\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, \"\n\"Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:38\nmsgid \"**Model ID:** TheBloke/Mistral-7B-Instruct-v0.2-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-instruct-v0.2.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-\"\n\"7B-Instruct-v0.2-GGUF>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/Mistral-7B-Instruct-v0.2-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/mistral-v0.1.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:5\nmsgid \"mistral-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:8\nmsgid \"**Model Name:** mistral-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:11\nmsgid \"\"\n\"**Description:** Mistral-7B is a unmoderated Transformer based LLM \"\n\"claiming to outperform Llama2 on all benchmarks.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:21\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:36\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:23\nmsgid \"**Model ID:** mistralai/Mistral-7B-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mistral-\"\n\"7B-v0.1>`_, `ModelScope <https://modelscope.cn/models/Xorbits/Mistral-\"\n\"7B-v0.1>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:26\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:33\nmsgid \"Model Spec 2 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:35\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:37\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, \"\n\"Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:38\nmsgid \"**Model ID:** TheBloke/Mistral-7B-v0.1-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mistral-v0.1.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-\"\n\"7B-v0.1-GGUF>`_, `ModelScope <https://modelscope.cn/models/Xorbits\"\n\"/Mistral-7B-v0.1-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/mixtral-instruct-v0.1.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:5\nmsgid \"mixtral-instruct-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:7\nmsgid \"**Context Length:** 32768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:8\nmsgid \"**Model Name:** mixtral-instruct-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:9\nmsgid \"**Languages:** en, fr, it, de, es\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:11\nmsgid \"\"\n\"**Description:** Mistral-8x7B-Instruct is a fine-tuned version of the \"\n\"Mistral-8x7B LLM, specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:18\nmsgid \"Model Spec 1 (pytorch, 46_7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:21\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:36\nmsgid \"**Model Size (in billions):** 46_7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:23\nmsgid \"**Model ID:** mistralai/Mixtral-8x7B-Instruct-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mixtral-\"\n\"8x7B-Instruct-v0.1>`_, `ModelScope <https://modelscope.cn/models/AI-\"\n\"ModelScope/Mixtral-8x7B-Instruct-v0.1>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:26\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:33\nmsgid \"Model Spec 2 (ggufv2, 46_7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:35\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:37\nmsgid \"**Quantizations:** Q2_K, Q3_K_M, Q4_0, Q4_K_M, Q5_0, Q5_K_M, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:38\nmsgid \"**Model ID:** TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-instruct-v0.1.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mixtral-\"\n\"8x7B-Instruct-v0.1-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/mixtral-v0.1.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:5\nmsgid \"mixtral-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:7\nmsgid \"**Context Length:** 32768\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:8\nmsgid \"**Model Name:** mixtral-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:9\nmsgid \"**Languages:** en, fr, it, de, es\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:11\nmsgid \"\"\n\"**Description:** The Mixtral-8x7B Large Language Model (LLM) is a \"\n\"pretrained generative Sparse Mixture of Experts.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:18\nmsgid \"Model Spec 1 (pytorch, 46_7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:21\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:36\nmsgid \"**Model Size (in billions):** 46_7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:23\nmsgid \"**Model ID:** mistralai/Mixtral-8x7B-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mixtral-\"\n\"8x7B-v0.1>`_, `ModelScope <https://modelscope.cn/models/AI-ModelScope\"\n\"/Mixtral-8x7B-v0.1>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:26\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:33\nmsgid \"Model Spec 2 (ggufv2, 46_7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:35\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:37\nmsgid \"**Quantizations:** Q2_K, Q3_K_M, Q4_0, Q4_K_M, Q5_0, Q5_K_M, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:38\nmsgid \"**Model ID:** TheBloke/Mixtral-8x7B-v0.1-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/mixtral-v0.1.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mixtral-\"\n\"8x7B-v0.1-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/openbuddy.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:5\nmsgid \"OpenBuddy\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:8\nmsgid \"**Model Name:** OpenBuddy\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:11\nmsgid \"\"\n\"**Description:** OpenBuddy is a powerful open multilingual chatbot model \"\n\"aimed at global users.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:20\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:21\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:22\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_1, Q4_K_S, \"\n\"Q4_K_M, Q5_0, Q5_1, Q5_K_S, Q5_K_M, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:23\nmsgid \"**Model ID:** TheBloke/OpenBuddy-Llama2-13B-v11.1-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/OpenBuddy-Llama2-13B-v11.1-GGML>`_, `ModelScope \"\n\"<https://modelscope.cn/models/Xorbits/OpenBuddy-Llama2-13B-v11.1-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openbuddy.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/openhermes-2.5.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:5\nmsgid \"openhermes-2.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:8\nmsgid \"**Model Name:** openhermes-2.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:11\nmsgid \"\"\n\"**Description:** Openhermes 2.5 is a fine-tuned version of Mistral-\"\n\"7B-v0.1 on primarily GPT-4 generated data.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:21\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:36\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:23\nmsgid \"**Model ID:** teknium/OpenHermes-2.5-Mistral-7B\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face \"\n\"<https://huggingface.co/teknium/OpenHermes-2.5-Mistral-7B>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:26\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:33\nmsgid \"Model Spec 2 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:35\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:37\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, \"\n\"Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:38\nmsgid \"**Model ID:** TheBloke/OpenHermes-2.5-Mistral-7B-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/openhermes-2.5.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face \"\n\"<https://huggingface.co/TheBloke/OpenHermes-2.5-Mistral-7B-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/opt.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/opt.rst:5\nmsgid \"opt\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:8\nmsgid \"**Model Name:** opt\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:11\nmsgid \"\"\n\"**Description:** Opt is an open-source, decoder-only, Transformer based \"\n\"LLM that was designed to replicate GPT-3.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:18\nmsgid \"Model Spec 1 (pytorch, 1 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:21\nmsgid \"**Model Size (in billions):** 1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:23\nmsgid \"**Model ID:** facebook/opt-125m\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/facebook/opt-\"\n\"125m>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/opt.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/orca.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/orca.rst:5\nmsgid \"orca\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:8\nmsgid \"**Model Name:** orca\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:11\nmsgid \"\"\n\"**Description:** Orca is an LLM trained by fine-tuning LLaMA on \"\n\"explanation traces obtained from GPT-4.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 3 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:20\n#: ../../source/models/builtin/llm/orca.rst:35\n#: ../../source/models/builtin/llm/orca.rst:50\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:21\nmsgid \"**Model Size (in billions):** 3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:22\n#: ../../source/models/builtin/llm/orca.rst:37\n#: ../../source/models/builtin/llm/orca.rst:52\nmsgid \"**Quantizations:** q4_0, q4_1, q5_0, q5_1, q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:23\nmsgid \"**Model ID:** TheBloke/orca_mini_3B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/orca_mini_3B-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:26\n#: ../../source/models/builtin/llm/orca.rst:41\n#: ../../source/models/builtin/llm/orca.rst:56\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:33\nmsgid \"Model Spec 2 (ggmlv3, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:36\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:38\nmsgid \"**Model ID:** TheBloke/orca_mini_7B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/orca_mini_7B-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:48\nmsgid \"Model Spec 3 (ggmlv3, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:51\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:53\nmsgid \"**Model ID:** TheBloke/orca_mini_13B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/orca.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/orca_mini_13B-GGML>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/qwen-chat.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:5\nmsgid \"qwen-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:8\nmsgid \"**Model Name:** qwen-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:11\nmsgid \"\"\n\"**Description:** Qwen-chat is a fine-tuned version of the Qwen LLM \"\n\"trained with alignment techniques, specializing in chatting.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:18\nmsgid \"Model Spec 1 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:20\n#: ../../source/models/builtin/llm/qwen-chat.rst:35\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:21\n#: ../../source/models/builtin/llm/qwen-chat.rst:66\n#: ../../source/models/builtin/llm/qwen-chat.rst:111\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:22\n#: ../../source/models/builtin/llm/qwen-chat.rst:37\nmsgid \"**Quantizations:** Q4_K_M\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:23\nmsgid \"**Model ID:** Xorbits/Qwen-7B-Chat-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Xorbits/Qwen-7B-\"\n\"Chat-GGUF>`_, `ModelScope <https://modelscope.cn/models/Xorbits/Qwen-7B-\"\n\"Chat-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:26\n#: ../../source/models/builtin/llm/qwen-chat.rst:41\n#: ../../source/models/builtin/llm/qwen-chat.rst:56\n#: ../../source/models/builtin/llm/qwen-chat.rst:71\n#: ../../source/models/builtin/llm/qwen-chat.rst:86\n#: ../../source/models/builtin/llm/qwen-chat.rst:101\n#: ../../source/models/builtin/llm/qwen-chat.rst:116\n#: ../../source/models/builtin/llm/qwen-chat.rst:131\n#: ../../source/models/builtin/llm/qwen-chat.rst:146\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:33\nmsgid \"Model Spec 2 (ggufv2, 14 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:36\n#: ../../source/models/builtin/llm/qwen-chat.rst:81\n#: ../../source/models/builtin/llm/qwen-chat.rst:126\nmsgid \"**Model Size (in billions):** 14\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:38\nmsgid \"**Model ID:** Xorbits/Qwen-14B-Chat-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Xorbits/Qwen-14B-\"\n\"Chat-GGUF>`_, `ModelScope <https://modelscope.cn/models/Xorbits/Qwen-14B-\"\n\"Chat-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:48\nmsgid \"Model Spec 3 (pytorch, 1_8 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:50\n#: ../../source/models/builtin/llm/qwen-chat.rst:65\n#: ../../source/models/builtin/llm/qwen-chat.rst:80\n#: ../../source/models/builtin/llm/qwen-chat.rst:95\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:51\nmsgid \"**Model Size (in billions):** 1_8\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:52\n#: ../../source/models/builtin/llm/qwen-chat.rst:67\n#: ../../source/models/builtin/llm/qwen-chat.rst:82\n#: ../../source/models/builtin/llm/qwen-chat.rst:97\nmsgid \"**Quantizations:** none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:53\nmsgid \"**Model ID:** Qwen/Qwen-1_8B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-1_8B-\"\n\"Chat>`_, `ModelScope <https://modelscope.cn/models/qwen/Qwen-1_8B-Chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:63\nmsgid \"Model Spec 4 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:68\nmsgid \"**Model ID:** Qwen/Qwen-7B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-7B-\"\n\"Chat>`_, `ModelScope <https://modelscope.cn/models/qwen/Qwen-7B-Chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:78\nmsgid \"Model Spec 5 (pytorch, 14 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:83\nmsgid \"**Model ID:** Qwen/Qwen-14B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:84\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-14B-\"\n\"Chat>`_, `ModelScope <https://modelscope.cn/models/qwen/Qwen-14B-Chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:93\nmsgid \"Model Spec 6 (pytorch, 72 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:96\n#: ../../source/models/builtin/llm/qwen-chat.rst:141\nmsgid \"**Model Size (in billions):** 72\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:98\nmsgid \"**Model ID:** Qwen/Qwen-72B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:99\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-72B-\"\n\"Chat>`_, `ModelScope <https://modelscope.cn/models/qwen/Qwen-72B-Chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:108\nmsgid \"Model Spec 7 (gptq, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:110\n#: ../../source/models/builtin/llm/qwen-chat.rst:125\n#: ../../source/models/builtin/llm/qwen-chat.rst:140\nmsgid \"**Model Format:** gptq\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:112\n#: ../../source/models/builtin/llm/qwen-chat.rst:127\n#: ../../source/models/builtin/llm/qwen-chat.rst:142\nmsgid \"**Quantizations:** Int4, Int8\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:113\nmsgid \"**Model ID:** Qwen/Qwen-7B-Chat-{quantization}\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:114\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-7B-\"\n\"Chat-{quantization}>`_, `ModelScope <https://modelscope.cn/models/qwen\"\n\"/Qwen-7B-Chat-{quantization}>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:123\nmsgid \"Model Spec 8 (gptq, 14 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:128\nmsgid \"**Model ID:** Qwen/Qwen-14B-Chat-{quantization}\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:129\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-14B-\"\n\"Chat-{quantization}>`_, `ModelScope <https://modelscope.cn/models/qwen\"\n\"/Qwen-14B-Chat-{quantization}>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:138\nmsgid \"Model Spec 9 (gptq, 72 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:143\nmsgid \"**Model ID:** Qwen/Qwen-72B-Chat-{quantization}\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/qwen-chat.rst:144\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-72B-\"\n\"Chat-{quantization}>`_, `ModelScope <https://modelscope.cn/models/qwen\"\n\"/Qwen-72B-Chat-{quantization}>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/starchat-beta.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:5\nmsgid \"starchat-beta\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:8\nmsgid \"**Model Name:** starchat-beta\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:11\nmsgid \"\"\n\"**Description:** Starchat-beta is a fine-tuned version of the \"\n\"Starcoderplus LLM, specializing in coding assistance.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:18\nmsgid \"Model Spec 1 (pytorch, 16 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:21\nmsgid \"**Model Size (in billions):** 16\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:23\nmsgid \"**Model ID:** HuggingFaceH4/starchat-beta\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/HuggingFaceH4\"\n\"/starchat-beta>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starchat-beta.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/starcoder.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:5\nmsgid \"starcoder\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:8\nmsgid \"**Model Name:** starcoder\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:11\nmsgid \"\"\n\"**Description:** Starcoder is an open-source Transformer based LLM that \"\n\"is trained on permissively licensed data from GitHub.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 16 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:20\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:21\nmsgid \"**Model Size (in billions):** 16\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:22\nmsgid \"**Quantizations:** q4_0, q4_1, q5_0, q5_1, q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:23\nmsgid \"**Model ID:** TheBloke/starcoder-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/starcoder-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoder.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/starcoderplus.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:5\nmsgid \"starcoderplus\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:8\nmsgid \"**Model Name:** starcoderplus\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:11\nmsgid \"\"\n\"**Description:** Starcoderplus is an open-source LLM trained by fine-\"\n\"tuning Starcoder on RedefinedWeb and StarCoderData datasets.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:18\nmsgid \"Model Spec 1 (pytorch, 16 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:21\nmsgid \"**Model Size (in billions):** 16\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:23\nmsgid \"**Model ID:** bigcode/starcoderplus\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face \"\n\"<https://huggingface.co/bigcode/starcoderplus>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/starcoderplus.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/tiny-llama.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:5\nmsgid \"tiny-llama\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:8\nmsgid \"**Model Name:** tiny-llama\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:11\nmsgid \"\"\n\"**Description:** The TinyLlama project aims to pretrain a 1.1B Llama \"\n\"model on 3 trillion tokens.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:18\nmsgid \"Model Spec 1 (ggufv2, 1 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:20\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:21\nmsgid \"**Model Size (in billions):** 1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:22\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:23\nmsgid \"**Model ID:** TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face \"\n\"<https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF>`_, \"\n\"`ModelScope <https://modelscope.cn/models/Xorbits/TinyLlama-1.1B-step-\"\n\"50K-105b-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/tiny-llama.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/vicuna-v1.3.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:5\nmsgid \"vicuna-v1.3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:8\nmsgid \"**Model Name:** vicuna-v1.3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:11\nmsgid \"\"\n\"**Description:** Vicuna is an open-source LLM trained by fine-tuning \"\n\"LLaMA on data collected from ShareGPT.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:20\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:35\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:50\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:21\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:96\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:22\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:37\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:52\nmsgid \"\"\n\"**Quantizations:** q2_K, q3_K_L, q3_K_M, q3_K_S, q4_0, q4_1, q4_K_M, \"\n\"q4_K_S, q5_0, q5_1, q5_K_M, q5_K_S, q6_K, q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:23\nmsgid \"**Model ID:** TheBloke/vicuna-7B-v1.3-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/vicuna-\"\n\"7B-v1.3-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:26\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:41\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:56\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:71\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:86\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:101\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:33\nmsgid \"Model Spec 2 (ggmlv3, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:36\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:81\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:38\nmsgid \"**Model ID:** TheBloke/vicuna-13b-v1.3.0-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/vicuna-\"\n\"13b-v1.3.0-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:48\nmsgid \"Model Spec 3 (ggmlv3, 33 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:51\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:66\nmsgid \"**Model Size (in billions):** 33\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:53\nmsgid \"**Model ID:** TheBloke/vicuna-33B-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/vicuna-\"\n\"33B-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:63\nmsgid \"Model Spec 4 (pytorch, 33 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:65\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:80\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:95\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:67\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:82\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:97\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:68\nmsgid \"**Model ID:** lmsys/vicuna-33b-v1.3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/lmsys/vicuna-\"\n\"33b-v1.3>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:78\nmsgid \"Model Spec 5 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:83\nmsgid \"**Model ID:** lmsys/vicuna-13b-v1.3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:84\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/lmsys/vicuna-\"\n\"13b-v1.3>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:93\nmsgid \"Model Spec 6 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:98\nmsgid \"**Model ID:** lmsys/vicuna-7b-v1.3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.3.rst:99\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/lmsys/vicuna-\"\n\"7b-v1.3>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/vicuna-v1.5-16k.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:5\nmsgid \"vicuna-v1.5-16k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:7\nmsgid \"**Context Length:** 16384\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:8\nmsgid \"**Model Name:** vicuna-v1.5-16k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:11\nmsgid \"\"\n\"**Description:** Vicuna-v1.5-16k is a special version of Vicuna-v1.5, \"\n\"with a context window of 16k tokens instead of 4k.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:20\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:22\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:23\nmsgid \"**Model ID:** lmsys/vicuna-7b-v1.5-16k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/lmsys/vicuna-\"\n\"7b-v1.5-16k>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:26\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:36\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:38\nmsgid \"**Model ID:** lmsys/vicuna-13b-v1.5-16k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5-16k.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/lmsys/vicuna-\"\n\"13b-v1.5-16k>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/vicuna-v1.5.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:5\nmsgid \"vicuna-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:8\nmsgid \"**Model Name:** vicuna-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:11\nmsgid \"\"\n\"**Description:** Vicuna is an open-source LLM trained by fine-tuning \"\n\"LLaMA on data collected from ShareGPT.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:20\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:22\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:23\nmsgid \"**Model ID:** lmsys/vicuna-7b-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/lmsys/vicuna-\"\n\"7b-v1.5>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:26\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:36\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:38\nmsgid \"**Model ID:** lmsys/vicuna-13b-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/vicuna-v1.5.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/lmsys/vicuna-\"\n\"13b-v1.5>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/wizardcoder-python-v1.0.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:5\nmsgid \"wizardcoder-python-v1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:7\nmsgid \"**Context Length:** 100000\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:8\nmsgid \"**Model Name:** wizardcoder-python-v1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:11\nmsgid \"**Description:**\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:20\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:35\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:50\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:21\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:66\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:22\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:37\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:52\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:23\nmsgid \"**Model ID:** WizardLM/WizardCoder-Python-7B-V1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLM\"\n\"/WizardCoder-Python-7B-V1.0>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:26\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:41\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:56\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:71\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:86\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:101\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:36\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:81\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:38\nmsgid \"**Model ID:** WizardLM/WizardCoder-Python-13B-V1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLM\"\n\"/WizardCoder-Python-13B-V1.0>`_, `ModelScope \"\n\"<https://modelscope.cn/models/AI-ModelScope/WizardCoder-Python-\"\n\"13B-V1.0>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:48\nmsgid \"Model Spec 3 (pytorch, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:51\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:96\nmsgid \"**Model Size (in billions):** 34\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:53\nmsgid \"**Model ID:** WizardLM/WizardCoder-Python-34B-V1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLM\"\n\"/WizardCoder-Python-34B-V1.0>`_, `ModelScope \"\n\"<https://modelscope.cn/models/AI-ModelScope/WizardCoder-Python-\"\n\"34B-V1.0>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:63\nmsgid \"Model Spec 4 (ggufv2, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:65\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:80\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:95\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:67\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:82\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:97\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:68\nmsgid \"**Model ID:** TheBloke/WizardCoder-Python-7B-V1.0-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:69\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/WizardCoder-Python-7B-V1.0-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:78\nmsgid \"Model Spec 5 (ggufv2, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:83\nmsgid \"**Model ID:** TheBloke/WizardCoder-Python-13B-V1.0-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:84\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/WizardCoder-Python-13B-V1.0-GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:93\nmsgid \"Model Spec 6 (ggufv2, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:98\nmsgid \"**Model ID:** TheBloke/WizardCoder-Python-34B-V1.0-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardcoder-python-v1.0.rst:99\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke\"\n\"/WizardCoder-Python-34B-V1.0-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/wizardlm-v1.0.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:5\nmsgid \"wizardlm-v1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:8\nmsgid \"**Model Name:** wizardlm-v1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:11\nmsgid \"\"\n\"**Description:** WizardLM is an open-source LLM trained by fine-tuning \"\n\"LLaMA with Evol-Instruct.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:18\nmsgid \"Model Spec 1 (ggmlv3, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:20\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:35\nmsgid \"**Model Format:** ggmlv3\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:22\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:37\nmsgid \"\"\n\"**Quantizations:** q2_K, q3_K_L, q3_K_M, q3_K_S, q4_0, q4_1, q4_K_M, \"\n\"q4_K_S, q5_0, q5_1, q5_K_M, q5_K_S, q6_K, q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:23\nmsgid \"**Model ID:** TheBloke/WizardLM-7B-V1.0-Uncensored-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/WizardLM-\"\n\"7B-V1.0-Uncensored-GGML>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:26\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:33\nmsgid \"Model Spec 2 (ggmlv3, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:36\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:38\nmsgid \"**Model ID:** TheBloke/WizardLM-13B-V1.0-Uncensored-GGML\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardlm-v1.0.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/WizardLM-\"\n\"13B-V1.0-Uncensored-GGML>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/wizardmath-v1.0.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:5\nmsgid \"wizardmath-v1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:8\nmsgid \"**Model Name:** wizardmath-v1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:11\nmsgid \"\"\n\"**Description:** WizardMath is an open-source LLM trained by fine-tuning \"\n\"Llama2 with Evol-Instruct, specializing in math.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:20\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:35\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:50\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:22\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:37\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:52\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:23\nmsgid \"**Model ID:** WizardLM/WizardMath-7B-V1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLM\"\n\"/WizardMath-7B-V1.0>`_, `ModelScope <https://modelscope.cn/models/Xorbits\"\n\"/WizardMath-7B-V1.0>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:26\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:41\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:56\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:36\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:38\nmsgid \"**Model ID:** WizardLM/WizardMath-13B-V1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLM\"\n\"/WizardMath-13B-V1.0>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:48\nmsgid \"Model Spec 3 (pytorch, 70 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:51\nmsgid \"**Model Size (in billions):** 70\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:53\nmsgid \"**Model ID:** WizardLM/WizardMath-70B-V1.0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/wizardmath-v1.0.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLM\"\n\"/WizardMath-70B-V1.0>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/xverse-chat.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:5\nmsgid \"xverse-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:8\nmsgid \"**Model Name:** xverse-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:11\nmsgid \"**Description:** XVERSEB-Chat is the aligned version of model XVERSE.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:20\n#: ../../source/models/builtin/llm/xverse-chat.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:22\n#: ../../source/models/builtin/llm/xverse-chat.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:23\nmsgid \"**Model ID:** xverse/XVERSE-7B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-7B-\"\n\"Chat>`_, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-7B-\"\n\"Chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:26\n#: ../../source/models/builtin/llm/xverse-chat.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:36\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:38\nmsgid \"**Model ID:** xverse/XVERSE-13B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse-chat.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-13B-\"\n\"Chat>`_, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-13B-\"\n\"Chat>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/xverse.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/xverse.rst:5\nmsgid \"xverse\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:7\nmsgid \"**Context Length:** 2048\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:8\nmsgid \"**Model Name:** xverse\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:11\nmsgid \"\"\n\"**Description:** XVERSE is a multilingual large language model, \"\n\"independently developed by Shenzhen Yuanxiang Technology.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:20\n#: ../../source/models/builtin/llm/xverse.rst:35\n#: ../../source/models/builtin/llm/xverse.rst:50\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:22\n#: ../../source/models/builtin/llm/xverse.rst:37\n#: ../../source/models/builtin/llm/xverse.rst:52\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:23\nmsgid \"**Model ID:** xverse/XVERSE-7B\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-\"\n\"7B>`_, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-7B>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:26\n#: ../../source/models/builtin/llm/xverse.rst:41\n#: ../../source/models/builtin/llm/xverse.rst:56\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:33\nmsgid \"Model Spec 2 (pytorch, 13 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:36\nmsgid \"**Model Size (in billions):** 13\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:38\nmsgid \"**Model ID:** xverse/XVERSE-13B\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-\"\n\"13B>`_, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-13B>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:48\nmsgid \"Model Spec 3 (pytorch, 65 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:51\nmsgid \"**Model Size (in billions):** 65\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:53\nmsgid \"**Model ID:** xverse/XVERSE-65B\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/xverse.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-\"\n\"65B>`_, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-65B>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/yi-200k.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:5\nmsgid \"Yi-200k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:7\nmsgid \"**Context Length:** 204800\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:8\nmsgid \"**Model Name:** Yi-200k\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:11\nmsgid \"\"\n\"**Description:** The Yi series models are large language models trained \"\n\"from scratch by developers at 01.AI.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:18\nmsgid \"Model Spec 1 (pytorch, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:20\n#: ../../source/models/builtin/llm/yi-200k.rst:35\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:21\nmsgid \"**Model Size (in billions):** 6\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:22\n#: ../../source/models/builtin/llm/yi-200k.rst:37\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:23\nmsgid \"**Model ID:** 01-ai/Yi-6B-200K\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-6B-\"\n\"200K>`_, `ModelScope <https://modelscope.cn/models/01ai/Yi-6B-200K>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:26\n#: ../../source/models/builtin/llm/yi-200k.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:33\nmsgid \"Model Spec 2 (pytorch, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:36\nmsgid \"**Model Size (in billions):** 34\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:38\nmsgid \"**Model ID:** 01-ai/Yi-34B-200K\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-200k.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-34B-\"\n\"200K>`_, `ModelScope <https://modelscope.cn/models/01ai/Yi-34B-200K>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/yi-chat.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:5\nmsgid \"Yi-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:7\nmsgid \"**Context Length:** 204800\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:8\nmsgid \"**Model Name:** Yi-chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:11\nmsgid \"\"\n\"**Description:** The Yi series models are large language models trained \"\n\"from scratch by developers at 01.AI.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:18\nmsgid \"Model Spec 1 (pytorch, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:21\n#: ../../source/models/builtin/llm/yi-chat.rst:36\nmsgid \"**Model Size (in billions):** 34\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:23\nmsgid \"**Model ID:** 01-ai/Yi-34B-Chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-34B-\"\n\"Chat>`_, `ModelScope <https://modelscope.cn/models/01ai/Yi-34B-Chat>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:26\n#: ../../source/models/builtin/llm/yi-chat.rst:41\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:33\nmsgid \"Model Spec 2 (ggufv2, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:35\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:37\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:38\nmsgid \"**Model ID:** TheBloke/Yi-34B-Chat-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi-chat.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Yi-34B-\"\n\"Chat-GGUF>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/yi.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/yi.rst:5\nmsgid \"Yi\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:7\nmsgid \"**Context Length:** 4096\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:8\nmsgid \"**Model Name:** Yi\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:9\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:10\nmsgid \"**Abilities:** generate\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:11\nmsgid \"\"\n\"**Description:** The Yi series models are large language models trained \"\n\"from scratch by developers at 01.AI.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:18\nmsgid \"Model Spec 1 (ggufv2, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:20\nmsgid \"**Model Format:** ggufv2\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:21\n#: ../../source/models/builtin/llm/yi.rst:51\nmsgid \"**Model Size (in billions):** 34\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:22\nmsgid \"\"\n\"**Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, \"\n\"Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:23\nmsgid \"**Model ID:** TheBloke/Yi-34B-GGUF\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Yi-34B-\"\n\"GGUF>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:26\n#: ../../source/models/builtin/llm/yi.rst:41\n#: ../../source/models/builtin/llm/yi.rst:56\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:33\nmsgid \"Model Spec 2 (pytorch, 6 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:35\n#: ../../source/models/builtin/llm/yi.rst:50\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:36\nmsgid \"**Model Size (in billions):** 6\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:37\n#: ../../source/models/builtin/llm/yi.rst:52\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:38\nmsgid \"**Model ID:** 01-ai/Yi-6B\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:39\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-6B>`_, \"\n\"`ModelScope <https://modelscope.cn/models/01ai/Yi-6B>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:48\nmsgid \"Model Spec 3 (pytorch, 34 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:53\nmsgid \"**Model ID:** 01-ai/Yi-34B\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/yi.rst:54\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-34B>`_, \"\n\"`ModelScope <https://modelscope.cn/models/01ai/Yi-34B>`_\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/zephyr-7b-alpha.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:5\nmsgid \"zephyr-7b-alpha\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:8\nmsgid \"**Model Name:** zephyr-7b-alpha\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:11\nmsgid \"\"\n\"**Description:** Zephyr-7B-α is the first model in the series, and is a \"\n\"fine-tuned version of mistralai/Mistral-7B-v0.1.\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:23\nmsgid \"**Model ID:** HuggingFaceH4/zephyr-7b-alpha\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/HuggingFaceH4\"\n\"/zephyr-7b-alpha>`_, `ModelScope \"\n\"<https://modelscope.cn/models/keepitsimple/zephyr-7b-alpha>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-alpha.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/llm/zephyr-7b-beta.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-03 15:51+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:5\nmsgid \"zephyr-7b-beta\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:7\nmsgid \"**Context Length:** 8192\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:8\nmsgid \"**Model Name:** zephyr-7b-beta\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:9\nmsgid \"**Languages:** en\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:10\nmsgid \"**Abilities:** chat\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:11\nmsgid \"\"\n\"**Description:** Zephyr-7B-β is the second model in the series, and is a \"\n\"fine-tuned version of mistralai/Mistral-7B-v0.1\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:14\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:18\nmsgid \"Model Spec 1 (pytorch, 7 Billion)\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:20\nmsgid \"**Model Format:** pytorch\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:21\nmsgid \"**Model Size (in billions):** 7\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:22\nmsgid \"**Quantizations:** 4-bit, 8-bit, none\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:23\nmsgid \"**Model ID:** HuggingFaceH4/zephyr-7b-beta\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:24\nmsgid \"\"\n\"**Model Hubs**:  `Hugging Face <https://huggingface.co/HuggingFaceH4\"\n\"/zephyr-7b-beta>`_, `ModelScope <https://modelscope.cn/models/modelscope\"\n\"/zephyr-7b-beta>`_\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/llm/zephyr-7b-beta.rst:26\nmsgid \"\"\n\"Execute the following command to launch the model, remember to replace \"\n\"``${quantization}`` with your chosen quantization method from the options\"\n\" listed above::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/rerank/bge-reranker-base.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-12-25 17:11+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-base.rst:5\nmsgid \"bge-reranker-base\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-base.rst:7\nmsgid \"**Model Name:** bge-reranker-base\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-base.rst:8\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-base.rst:9\nmsgid \"**Abilities:** rerank\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-base.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-base.rst:14\nmsgid \"**Model ID:** BAAI/bge-reranker-base\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-base.rst:16\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/rerank/bge-reranker-large.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-12-25 17:11+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-large.rst:5\nmsgid \"bge-reranker-large\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-large.rst:7\nmsgid \"**Model Name:** bge-reranker-large\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-large.rst:8\nmsgid \"**Languages:** en, zh\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-large.rst:9\nmsgid \"**Abilities:** rerank\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-large.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-large.rst:14\nmsgid \"**Model ID:** BAAI/bge-reranker-large\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/rerank/bge-reranker-large.rst:16\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/rerank/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-12-25 17:11+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/models/builtin/rerank/index.rst:5\nmsgid \"Rerank Models\"\nmsgstr \"重排序模型\"\n\n#: ../../source/models/builtin/rerank/index.rst:7\nmsgid \"The following is a list of built-in rerank models in Xinference:\"\nmsgstr \"以下是 Xinference 中内置的重排序模型列表:\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/video/cogvideox-2b.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-13 17:44+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/video/cogvideox-2b.rst:5\nmsgid \"CogVideoX-2b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/video/cogvideox-2b.rst:7\nmsgid \"**Model Name:** CogVideoX-2b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/video/cogvideox-2b.rst:8\nmsgid \"**Model Family:** CogVideoX\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/video/cogvideox-2b.rst:9\nmsgid \"**Abilities:** text2video\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/video/cogvideox-2b.rst:12\nmsgid \"Specifications\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/video/cogvideox-2b.rst:14\nmsgid \"**Model ID:** THUDM/CogVideoX-2b\"\nmsgstr \"\"\n\n#: ../../source/models/builtin/video/cogvideox-2b.rst:16\nmsgid \"Execute the following command to launch the model::\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/builtin/video/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-08-13 17:44+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/builtin/video/index.rst:5\nmsgid \"Video Models\"\nmsgstr \"视频模型\"\n\n#: ../../source/models/builtin/video/index.rst:7\nmsgid \"The following is a list of built-in video models in Xinference:\"\nmsgstr \"以下是 Xinference 中内置的视频模型列表:\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/custom.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-28 14:31+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/custom.rst:5\nmsgid \"Custom Models\"\nmsgstr \"自定义模型\"\n\n#: ../../source/models/custom.rst:6\nmsgid \"\"\n\"Xinference provides a flexible and comprehensive way to integrate, \"\n\"manage, and utilize custom models.\"\nmsgstr \"Xinference 提供了一种灵活而全面的方式来集成、管理和应用自定义模型。\"\n\n#: ../../source/models/custom.rst:10\nmsgid \"Directly launch an existing model\"\nmsgstr \"无需注册而直接启动自定义模型\"\n\n#: ../../source/models/custom.rst:11\nmsgid \"\"\n\"Since ``v0.14.0``, you can directly launch an existing model by passing \"\n\"``model_path`` to the launch interface without downloading it. This way \"\n\"requires that the model's ``model_family`` is among the built-in \"\n\"supported models, and eliminates the hassle of registering the model.\"\nmsgstr \"\"\n\"从 ``v0.14.0`` 版本开始，如果你需要注册的模型的家族是 Xinference 内置支持的模型，你可以直接通过 launch 接口中的 \"\n\"``model_path`` 参数来启动它，从而免去注册步骤的麻烦。现在非常推荐使用这种方式。\"\n\n#: ../../source/models/custom.rst:15\nmsgid \"For example:\"\nmsgstr \"例如：\"\n\n#: ../../source/models/custom.rst:47\nmsgid \"\"\n\"The above example demonstrates how to directly launch a qwen1.5-chat \"\n\"model file without registering it.\"\nmsgstr \"上面的例子展示了当我已有 qwen1.5-chat 模型文件时，如何直接 launch 它。\"\n\n#: ../../source/models/custom.rst:49\nmsgid \"\"\n\"For distributed scenarios, if your model file is on a specific worker, \"\n\"you can directly launch it using the ``worker_ip`` and ``model_path`` \"\n\"parameters with the launch interface.\"\nmsgstr \"\"\n\"对于分布式场景，将你的模型文件置于某个 worker ，然后通过 launch 接口的 ``worker_ip`` 和 \"\n\"``model_path`` 参数来达到直接 launch 的效果。\"\n\n#: ../../source/models/custom.rst:53\nmsgid \"\"\n\"For CLI usage, prefer ``--model-path`` (kebab-case). ``--model_path`` is \"\n\"legacy-compatible but not recommended.\"\nmsgstr \"\"\n\"对于命令行界面（CLI）的使用，请优先使用 ``--model-path``（分号分隔的大小写混合形式）。``--model_path`` \"\n\"兼容旧版规范，但不建议使用。\"\n\n#: ../../source/models/custom.rst:56\nmsgid \"Define a custom model\"\nmsgstr \"定义一个自定义模型\"\n\n#: ../../source/models/custom.rst:59\nmsgid \"Web UI: Automatic LLM Config Parsing\"\nmsgstr \"Web UI：自动解析大型语言模型配置\"\n\n#: ../../source/models/custom.rst:61\nmsgid \"\"\n\"When registering a custom LLM via the Web UI, Xinference can \"\n\"automatically parse the model configuration and pre-fill key fields for \"\n\"you.\"\nmsgstr \"通过Web UI注册自定义LLM时，Xinference可自动解析模型配置并为您预填关键字段。\"\n\n#: ../../source/models/custom.rst:64\nmsgid \"You only need to provide:\"\nmsgstr \"您仅需要提供：\"\n\n#: ../../source/models/custom.rst:66\nmsgid \"**Model path / Model ID** (where the model lives, local path or hub ID)\"\nmsgstr \" **模型路径/模型ID** （模型所在位置，本地路径或中心ID）\"\n\n#: ../../source/models/custom.rst:67\nmsgid \"**Model Family**\"\nmsgstr \" **模型家族** \"\n\n#: ../../source/models/custom.rst:69\nmsgid \"After parsing, the UI can auto-populate fields such as:\"\nmsgstr \"解析后，用户界面可自动填充以下字段：\"\n\n#: ../../source/models/custom.rst:71\nmsgid \"``Context Length``\"\nmsgstr \" ``上下文长度`` \"\n\n#: ../../source/models/custom.rst:72\nmsgid \"``Model_Languages``\"\nmsgstr \" ``模型语言`` \"\n\n#: ../../source/models/custom.rst:73\nmsgid \"``Model_Abilities``\"\nmsgstr \" ``模型能力`` \"\n\n#: ../../source/models/custom.rst:74\nmsgid \"``Model_Specs``\"\nmsgstr \" ``模型规格`` \"\n\n#: ../../source/models/custom.rst:76\nmsgid \"You can review and edit these fields before saving the custom model.\"\nmsgstr \"在保存自定义模型之前，您可以查看并编辑这些字段。\"\n\n#: ../../source/models/custom.rst:78\nmsgid \"Define a custom model based on the following templates:\"\nmsgstr \"基于以下模板定义一个自定义模型：\"\n\n#: ../../source/models/custom.rst:82\nmsgid \"LLM\"\nmsgstr \"语言模型\"\n\n#: ../../source/models/custom.rst:129\nmsgid \"embedding\"\nmsgstr \"嵌入模型\"\n\n#: ../../source/models/custom.rst:164\nmsgid \"Rerank\"\nmsgstr \"重排序模型\"\n\n#: ../../source/models/custom.rst:199\nmsgid \"image\"\nmsgstr \"图像模型\"\n\n#: ../../source/models/custom.rst:234\nmsgid \"audio\"\nmsgstr \"音频模型\"\n\n#: ../../source/models/custom.rst:267\nmsgid \"flexible\"\nmsgstr \"灵活模型\"\n\n#: ../../source/models/custom.rst:294\nmsgid \"\"\n\"model_name: A string defining the name of the model. The name must start \"\n\"with a letter or a digit and can only contain letters, digits, \"\n\"underscores, or dashes.\"\nmsgstr \"model_name: 模型名称。名称必须以字母或数字开头，且只能包含字母、数字、下划线或短划线。\"\n\n#: ../../source/models/custom.rst:295\nmsgid \"\"\n\"context_length: An optional integer that specifies the maximum context \"\n\"size the model was trained to accommodate, encompassing both the input \"\n\"and output lengths. If not defined, the default value is 2048 tokens \"\n\"(~1,500 words).\"\nmsgstr \"\"\n\"context_length: \"\n\"一个可选的整数，模型支持的最大上下文长度，包括输入和输出长度。如果未定义，默认值为2048个token（约1,500个词）。\"\n\n#: ../../source/models/custom.rst:296\nmsgid \"\"\n\"dimensions: An interger defining the size of the vector output by the \"\n\"embedding model.\"\nmsgstr \"dimensions: 一个整数，用于定义嵌入模型输出的向量大小。\"\n\n#: ../../source/models/custom.rst:297\nmsgid \"\"\n\"max_tokens: An interger defining the maximum number of input tokens the \"\n\"embedding model can process in a single request.\"\nmsgstr \"max_tokens: 一个整数，定义嵌入模型在单次请求中可处理的最大输入token数量。\"\n\n#: ../../source/models/custom.rst:298\nmsgid \"\"\n\"model_lang: A list of strings representing the supported languages for \"\n\"the model. Example: [\\\"en\\\"], which means that the model supports \"\n\"English.\"\nmsgstr \"model_lang: 一个字符串列表，表示模型支持的语言。例如：['en']，表示该模型支持英语。\"\n\n#: ../../source/models/custom.rst:299\nmsgid \"\"\n\"model_ability: A list of strings defining the abilities of the model. It \"\n\"could include options like \\\"embed\\\", \\\"generate\\\", and \\\"chat\\\". In this\"\n\" case, the model has the ability to \\\"generate\\\".\"\nmsgstr \"\"\n\"model_ability: 一个字符串列表，定义模型的能力。它可以包括像 'embed'、'generate' 和 'chat' \"\n\"这样的选项。示例表示模型具有 'generate' 的能力。\"\n\n#: ../../source/models/custom.rst:300\nmsgid \"\"\n\"model_family: A required string representing the family of the model you \"\n\"want to register. This parameter must not conflict with any builtin model\"\n\" names.\"\nmsgstr \"model_family: 一个必要的字符串，表示要注册的模型族。该参数名称不得与任何内置模型名称冲突。\"\n\n#: ../../source/models/custom.rst:301\nmsgid \"\"\n\"model_specs: An array of objects defining the specifications of the \"\n\"model. These include:\"\nmsgstr \"model_specs: 一个包含定义模型规格的对象数组。这些规格包括：\"\n\n#: ../../source/models/custom.rst:302\nmsgid \"\"\n\"model_format: A string that defines the model format, like \\\"pytorch\\\" or\"\n\" \\\"ggufv2\\\".\"\nmsgstr \"model_format: 一个定义模型格式的字符串，可以是 'pytorch' 或 'ggufv2'。\"\n\n#: ../../source/models/custom.rst:303\nmsgid \"\"\n\"model_size_in_billions: An integer defining the size of the model in \"\n\"billions of parameters.\"\nmsgstr \"model_size_in_billions: 一个整数，定义模型的参数量，以十亿为单位。\"\n\n#: ../../source/models/custom.rst:304\nmsgid \"\"\n\"quantizations: A list of strings defining the available quantizations for\"\n\" the model. For PyTorch models, it could be \\\"4-bit\\\", \\\"8-bit\\\", or \"\n\"\\\"none\\\". For ggufv2 models, the quantizations should correspond to \"\n\"values that work with the ``model_file_name_template``. Some engines also\"\n\" support ``fp4`` / ``fp8`` / ``bnb`` formats (see :ref:`installation` for\"\n\" backend support details).\"\nmsgstr \"\"\n\"quantizations: 一个字符串列表，定义模型的量化方式。对于 PyTorch 模型，它可以是 \\\"4-bit\\\"、\\\"8-bit\\\" 或\"\n\" \\\"none\\\"。对于 ggufv2 模型，量化方式应与 ``model_file_name_template`` 中的值对应。\"\n\"某些引擎还支持 ``fp4`` / ``fp8`` / ``bnb`` 格式（后端支持详情请参见 :ref:`installation` ）。\"\n\n#: ../../source/models/custom.rst:306\nmsgid \"\"\n\"model_id: A string representing the model ID, possibly referring to an \"\n\"identifier used by Hugging Face. **If model_uri is missing, Xinference \"\n\"will try to download the model from the huggingface repository specified \"\n\"here.**.\"\nmsgstr \"\"\n\"model_id：代表模型 id 的字符串，可以是该模型对应的 HuggingFace 仓库 id。如果 model_uri \"\n\"字段缺失，Xinference 将尝试从此id指示的HuggingFace仓库下载该模型。\"\n\n#: ../../source/models/custom.rst:307\nmsgid \"\"\n\"model_hub: A string representing where to download the model from, like \"\n\"\\\"Huggingface\\\" or \\\"modelscope\\\"\"\nmsgstr \"model_hub: 一个可选字符串，表示从何处下载模型，例如 HuggingFace 或 modelscope。\"\n\n#: ../../source/models/custom.rst:308\nmsgid \"\"\n\"model_uri: A string representing the URI where the model can be loaded \"\n\"from, such as \\\"file:///path/to/llama-2-7b\\\". **When the model format is \"\n\"ggufv2, model_uri must be the specific file path. When the model format \"\n\"is pytorch, model_uri must be the path to the directory containing the \"\n\"model files.** If model URI is absent, Xinference will try to download \"\n\"the model from Hugging Face with the model ID.\"\nmsgstr \"\"\n\"model_uri：表示模型文件位置的字符串，例如本地目录：\\\"file:///path/to/llama-2-7b\\\"。当 \"\n\"model_format 是 ggufv2 ，此字段必须是具体的模型文件路径。而当 model_format 是 pytorch \"\n\"时，此字段必须是一个包含所有模型文件的目录。\"\n\n#: ../../source/models/custom.rst:309\nmsgid \"\"\n\"model_revision: A string representing the specific version or commit hash\"\n\" of the model files to use from the repository.\"\nmsgstr \"model_revision: 一个字符串，表示从存储库中使用的模型文件的具体版本或提交哈希值。\"\n\n#: ../../source/models/custom.rst:310\nmsgid \"\"\n\"chat_template: If ``model_ability`` includes ``chat`` , you must \"\n\"configure this option to generate the correct full prompt during chat. \"\n\"This is a Jinja template string. Usually, you can find it in the \"\n\"``tokenizer_config.json`` file within the model directory.\"\nmsgstr \"\"\n\"chat_template：如果 ``model_ability`` 中包含 ``chat`` \"\n\"，那么此选项必须配置以生成合适的完整提示词。这是一个 Jinja 模版字符串。通常，你可以在模型目录的 \"\n\"``tokenizer_config.json`` 文件中找到。\"\n\n#: ../../source/models/custom.rst:311\nmsgid \"\"\n\"stop_token_ids: If ``model_ability`` includes ``chat`` , you can \"\n\"configure this option to control when the model stops during chat. This \"\n\"is a list of integers, and you can typically extract the corresponding \"\n\"values from the ``generation_config.json`` or ``tokenizer_config.json`` \"\n\"file in the model directory.\"\nmsgstr \"\"\n\"stop_token_ids：如果 ``model_ability`` 中包含 ``chat`` \"\n\"，那么推荐配置此选项以合理控制对话的停止。这是一个包含整数的列表，你可以在模型目录的 ``generation_config.json`` 和 \"\n\"``tokenizer_config.json`` 文件中提取相应的值。\"\n\n#: ../../source/models/custom.rst:312\nmsgid \"\"\n\"stop: If ``model_ability`` includes ``chat`` , you can configure this \"\n\"option to control when the model stops during chat. This is a list of \"\n\"strings, and you can typically extract the corresponding values from the \"\n\"``generation_config.json`` or ``tokenizer_config.json`` file in the model\"\n\" directory.\"\nmsgstr \"\"\n\"stop：如果 ``model_ability`` 中包含 ``chat`` \"\n\"，那么推荐配置此选项以合理控制对话的停止。这是一个包含字符串的列表，你可以在模型目录的 ``tokenizer_config.json`` \"\n\"文件中找到 token 值对应的字符串。\"\n\n#: ../../source/models/custom.rst:313\nmsgid \"\"\n\"reasoning_start_tag: A special token or prompt used to explicitly \"\n\"instruct the LLM to begin its chain-of-thought or reasoning process in \"\n\"its output.\"\nmsgstr \"reasoning_start_tag: 一个特殊的 token 或 prompt，用于明确指示大语言模型在其输出中思维链或推理过程的起点。\"\n\n#: ../../source/models/custom.rst:314\nmsgid \"\"\n\"reasoning_end_tag: A special token or prompt used to explicitly mark the \"\n\"end of the model's chain-of-thought or reasoning process in its output.\"\nmsgstr \"reasoning_end_tag: 一个特殊的 token 或 prompt，用于明确指示大语言模型在其输出中思维链或推理过程的终点。\"\n\n#: ../../source/models/custom.rst:315\nmsgid \"\"\n\"cache_config: A string representing the parameters and rules for how the \"\n\"system stores and manages temporary data (cache).\"\nmsgstr \"cache_config: 一个字符串，表示系统存储和管理临时数据（缓存）的参数。\"\n\n#: ../../source/models/custom.rst:316\nmsgid \"\"\n\"virtualenv: A settings object for model dependency isolation. Please \"\n\"refer to :ref:`this document <virtualenv>` for details.\"\nmsgstr \"\"\n\n#: ../../source/models/custom.rst:319\nmsgid \"Register a Custom Model\"\nmsgstr \"注册一个自定义模型\"\n\n#: ../../source/models/custom.rst:321\nmsgid \"Register a custom model programmatically:\"\nmsgstr \"以代码的方式注册自定义模型\"\n\n#: ../../source/models/custom.rst:336 ../../source/models/custom.rst:354\n#: ../../source/models/custom.rst:369 ../../source/models/custom.rst:424\nmsgid \"Or via CLI:\"\nmsgstr \"以命令行的方式\"\n\n#: ../../source/models/custom.rst:342\nmsgid \"\"\n\"Note that replace the ``<model_type>`` above with ``LLM``, ``embedding`` \"\n\"or ``rerank``. The same as below.\"\nmsgstr \"注意将以下部分的 ``<model_type>`` 替换为 ``LLM``、``embedding`` 或 ``rerank`` 。\"\n\n#: ../../source/models/custom.rst:346\nmsgid \"List the Built-in and Custom Models\"\nmsgstr \"列举内置和自定义模型\"\n\n#: ../../source/models/custom.rst:348\nmsgid \"List built-in and custom models programmatically:\"\nmsgstr \"以代码的方式列举内置和自定义模型\"\n\n#: ../../source/models/custom.rst:361\nmsgid \"Launch the Custom Model\"\nmsgstr \"启动自定义模型\"\n\n#: ../../source/models/custom.rst:363\nmsgid \"Launch the custom model programmatically:\"\nmsgstr \"以代码的方式启动自定义模型\"\n\n#: ../../source/models/custom.rst:376\nmsgid \"Interact with the Custom Model\"\nmsgstr \"使用自定义模型\"\n\n#: ../../source/models/custom.rst:378\nmsgid \"Invoke the model programmatically:\"\nmsgstr \"以代码的方式调用模型\"\n\n#: ../../source/models/custom.rst:385\nmsgid \"Result:\"\nmsgstr \"结果为：\"\n\n#: ../../source/models/custom.rst:409\n#, python-brace-format\nmsgid \"Or via CLI, replace ``${UID}`` with real model UID:\"\nmsgstr \"或者以命令行的方式，用实际的模型 UID 替换 ``${UID}``：\"\n\n#: ../../source/models/custom.rst:416\nmsgid \"Unregister the Custom Model\"\nmsgstr \"注销自定义模型\"\n\n#: ../../source/models/custom.rst:418\nmsgid \"Unregister the custom model programmatically:\"\nmsgstr \"以代码的方式注销自定义模型\"\n\n#~ msgid \"\"\n#~ \"model_file_name_template: Required by gguf \"\n#~ \"models. An f-string template used for\"\n#~ \" defining the model file name based\"\n#~ \" on the quantization. **Note that \"\n#~ \"this field is just a template for\"\n#~ \" the format of the ggufv2 model \"\n#~ \"file, do not fill in the specific\"\n#~ \" path of the model file.**\"\n#~ msgstr \"\"\n#~ \"model_file_name_template: gguf 模型所需。一个 f-string \"\n#~ \"模板，用于根据量化定义模型文件名。注意，这里不要填入文件的路径。\"\n\n#~ msgid \"Define a custom embedding model\"\n#~ msgstr \"定义自定义 embedding 模型\"\n\n#~ msgid \"Define a custom embedding model based on the following template:\"\n#~ msgstr \"基于以下模板定义一个自定义 embedding 模型：\"\n\n#~ msgid \"dimensions: A integer that specifies the embedding dimensions.\"\n#~ msgstr \"dimensions: 表示 embedding 维度的整型值。\"\n\n#~ msgid \"\"\n#~ \"max_tokens: A integer that represents \"\n#~ \"the max sequence length that the \"\n#~ \"embedding model supports.\"\n#~ msgstr \"max_tokens: 表示 embedding 模型支持的最大输入序列长度的整型值。\"\n\n#~ msgid \"\"\n#~ \"language: A list of strings representing\"\n#~ \" the supported languages for the \"\n#~ \"model. Example: [\\\"en\\\"], which means \"\n#~ \"that the model supports English.\"\n#~ msgstr \"model_lang: 一个字符串列表，表示模型支持的语言。例如：['en']，表示该模型支持英语。\"\n\n#~ msgid \"\"\n#~ \"model_id: A string representing the \"\n#~ \"model ID, possibly referring to an \"\n#~ \"identifier used by Hugging Face.\"\n#~ msgstr \"model_id: 一个表示模型标识的字符串，类似 HuggingFace 或 ModelScope 使用的标识符。\"\n\n#~ msgid \"\"\n#~ \"model_uri: A string representing the URI\"\n#~ \" where the model can be loaded \"\n#~ \"from, such as \\\"file:///path/to/your_model\\\". \"\n#~ \"If model URI is absent, Xinference \"\n#~ \"will try to download the model \"\n#~ \"from Hugging Face with the model \"\n#~ \"ID.\"\n#~ msgstr \"\"\n#~ \"model_uri: 表示模型的 URI 的字符串，例如 \"\n#~ \"\\\"file:///path/to/llama-2-7b\\\"。如果模型 URI 不存在，Xinference \"\n#~ \"将尝试使用 model_id 从 HuggingFace 或 \"\n#~ \"ModelScope 下载模型。\"\n\n#~ msgid \"Define a custom Rerank model\"\n#~ msgstr \"定义自定义 rerank 模型\"\n\n#~ msgid \"Define a custom rerank model based on the following template:\"\n#~ msgstr \"基于以下模板定义一个自定义大语言模型：\"\n\n#~ msgid \"\"\n#~ \"type: A string defining the type \"\n#~ \"of the model, including ``normal``, \"\n#~ \"``LLM-based`` and ``LLM-based layerwise``.\"\n#~ msgstr \"type: 表示模型的类型，可选值包括 ``normal``、``LLM-based`` 和 ``LLM-based layerwise``。\"\n\n#~ msgid \"\"\n#~ \"virtualenv: An array refers to the \"\n#~ \"name or path of a self-contained\"\n#~ \" Python environment used to isolate \"\n#~ \"dependencies required to run a specific\"\n#~ \" model or project. Please refer to\"\n#~ \" :ref:`this document <virtualenv>`.\"\n#~ msgstr \"\"\n#~ \"virtualenv: 一个数组，指代用于隔离特定模型或项目运行所依赖的独立环境名称或路径。详情请阅读 \"\n#~ \":ref:`这个文档 <virtualenv>`。\"\n\n#~ msgid \"**Model engine** (e.g., transformers / vllm / sglang)\"\n#~ msgstr \"\"\n\n#~ msgid \"``model_family`` / ``model_name``\"\n#~ msgstr \"\"\n\n#~ msgid \"``model_format``\"\n#~ msgstr \"\"\n\n#~ msgid \"``model_size_in_billions``\"\n#~ msgstr \"\"\n\n#~ msgid \"``quantization`` (if detectable)\"\n#~ msgstr \"\"\n\n#~ msgid \"``architectures`` and other model metadata (when available)\"\n#~ msgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-06-26 13:20+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/index.rst:5\nmsgid \"Models\"\nmsgstr \"模型\"\n\n#: ../../source/models/index.rst:8\nmsgid \"List Models\"\nmsgstr \"模型列表\"\n\n#: ../../source/models/index.rst:10\nmsgid \"\"\n\"You can list all models of a certain type that are available to launch in\"\n\" Xinference:\"\nmsgstr \"你可以列出 Xinference 中所有可以启动的、某种类型的模型：\"\n\n#: ../../source/models/index.rst:29\nmsgid \"The following ``MODEL_TYPE`` is supported by Xinference:\"\nmsgstr \"Xinference 支持以下 ``MODEL_TYPE``：\"\n\n#: ../../source/models/index.rst:33\nmsgid \"LLM\"\nmsgstr \"\"\n\n#: ../../source/models/index.rst:37\nmsgid \"Text generation models or large language models\"\nmsgstr \"文本生成模型或大型语言模型\"\n\n#: ../../source/models/index.rst:39\nmsgid \"embedding\"\nmsgstr \"\"\n\n#: ../../source/models/index.rst:43\nmsgid \"Text embeddings models\"\nmsgstr \"文本嵌入模型\"\n\n#: ../../source/models/index.rst:47\nmsgid \"image\"\nmsgstr \"\"\n\n#: ../../source/models/index.rst:51\nmsgid \"Image generation or manipulation models\"\nmsgstr \"图像生成或处理模型\"\n\n#: ../../source/models/index.rst:53\nmsgid \"audio\"\nmsgstr \"\"\n\n#: ../../source/models/index.rst:57\nmsgid \"Audio models\"\nmsgstr \"音频模型\"\n\n#: ../../source/models/index.rst:61\nmsgid \"rerank\"\nmsgstr \"\"\n\n#: ../../source/models/index.rst:65\nmsgid \"Rerank models\"\nmsgstr \"重排序模型\"\n\n#: ../../source/models/index.rst:67\nmsgid \"video\"\nmsgstr \"\"\n\n#: ../../source/models/index.rst:71\nmsgid \"Video models\"\nmsgstr \"视频模型\"\n\n#: ../../source/models/index.rst:75 ../../source/models/index.rst:240\nmsgid \"flexible\"\nmsgstr \"灵活模型\"\n\n#: ../../source/models/index.rst:79\nmsgid \"Flexible models (Traditional ML Models)\"\nmsgstr \"灵活模型（传统机器学习模型）\"\n\n#: ../../source/models/index.rst:84\nmsgid \"\"\n\"You can see all the built-in models supported by xinference :ref:`here \"\n\"<models_builtin_index>`. If the model you need is not available, \"\n\"Xinference also allows you to register your own :ref:`custom models \"\n\"<models_custom>`.\"\nmsgstr \"\"\n\"你可以在 :ref:`这里 <models_builtin_index>` 查看 Xinference 支持的所有\"\n\"内置模型。如果你需要的模型不可用，Xinference 还允许你注册自己的 :ref:`\"\n\"自定义模型 <models_custom>`。\"\n\n#: ../../source/models/index.rst:89\nmsgid \"Launch and Terminate Model\"\nmsgstr \"启动和停止模型\"\n\n#: ../../source/models/index.rst:91\nmsgid \"\"\n\"Each running model instance will be assigned a unique model uid. By \"\n\"default, the model uid is equal to the model name. This unique id can be \"\n\"used as a handle for the further usage. You can manually assign it by \"\n\"passing ``--model-uid`` option in the launch command.\"\nmsgstr \"\"\n\"每个运行的模型实例将被分配一个唯一的模型uid。默认情况下，模型uid等于模型\"\n\"名。这个 ID 是后续使用模型实例的句柄，启动命令 ``--model-uid`` 选项可以\"\n\"手动指定它。\"\n\n#: ../../source/models/index.rst:95\nmsgid \"\"\n\"You can launch a model in Xinference either via command line or \"\n\"Xinference's Python client:\"\nmsgstr \"你可以通过命令行或者 Xinference 的 Python 客户端来启动一个模型。\"\n\n#: ../../source/models/index.rst:122\nmsgid \"\"\n\"For model type ``LLM``, launching the model requires not only specifying \"\n\"the model name, but also the size of the parameters , the model format \"\n\"and the model engine.  Please refer to the list of LLM :ref:`model \"\n\"families <models_llm_index>`.\"\nmsgstr \"\"\n\"对于模型类型 ``LLM``，启动模型不仅需要指定模型名称，还需要参数的大小、\"\n\"模型格式以及模型引擎。请参考 :ref:`models_llm_index` 文档。\"\n\n#: ../../source/models/index.rst:125\nmsgid \"\"\n\"The following command gives you the currently running models in \"\n\"Xinference:\"\nmsgstr \"以下命令可以列出 Xinference 中正在运行的模型：\"\n\n#: ../../source/models/index.rst:146\nmsgid \"\"\n\"When you no longer need a model that is currently running, you can remove\"\n\" it in the following way to free up the resources it occupies:\"\nmsgstr \"当你不再需要当前正在运行的模型时，以下列方式释放其占用的资源：\"\n\n#: ../../source/models/index.rst:170\nmsgid \"\"\n\"For models that are no longer maintained and depend on outdated libraries\"\n\" (such as ``transformers``), we recommend enabling the :ref:`Model \"\n\"Virtual Environment <model_virtual_env>` feature to ensure they can run \"\n\"properly in a compatible environment.\"\nmsgstr \"\"\n\"对于不再维护且依赖旧版库（如 ``transformers`` ）的模型，建议启用 :ref:`\"\n\"模型虚拟空间 <model_virtual_env>` 功能，以确保它们能在兼容的环境中正常\"\n\"运行。\"\n\n#: ../../source/models/index.rst:176\nmsgid \"Model Usage\"\nmsgstr \"模型使用\"\n\n#: ../../source/models/index.rst:181\nmsgid \"Chat & Generate\"\nmsgstr \"聊天 & 生成\"\n\n#: ../../source/models/index.rst:185\nmsgid \"Learn how to chat with LLMs in Xinference.\"\nmsgstr \"学习如何在 Xinference 中与 LLM聊天。\"\n\n#: ../../source/models/index.rst:187\nmsgid \"Tools\"\nmsgstr \"工具\"\n\n#: ../../source/models/index.rst:191\nmsgid \"Learn how to connect LLM with external tools.\"\nmsgstr \"学习如何将 LLM 与外部工具连接起来。\"\n\n#: ../../source/models/index.rst:196\nmsgid \"Embeddings\"\nmsgstr \"嵌入\"\n\n#: ../../source/models/index.rst:200\nmsgid \"Learn how to create text embeddings in Xinference.\"\nmsgstr \"学习如何在 Xinference 中创建文本嵌入。\"\n\n#: ../../source/models/index.rst:202\nmsgid \"Rerank\"\nmsgstr \"重排序\"\n\n#: ../../source/models/index.rst:206\nmsgid \"Learn how to use rerank models in Xinference.\"\nmsgstr \"学习如何在 Xinference 中使用重排序模型。\"\n\n#: ../../source/models/index.rst:211\nmsgid \"Images\"\nmsgstr \"图像\"\n\n#: ../../source/models/index.rst:215\nmsgid \"Learn how to generate images with Xinference.\"\nmsgstr \"学习如何使用Xinference生成图像。\"\n\n#: ../../source/models/index.rst:217\nmsgid \"Multimodal\"\nmsgstr \"多模态\"\n\n#: ../../source/models/index.rst:221\nmsgid \"Learn how to process images and audio with LLMs.\"\nmsgstr \"学习如何使用 LLM 处理图像和音频。\"\n\n#: ../../source/models/index.rst:226\nmsgid \"Audio\"\nmsgstr \"音频\"\n\n#: ../../source/models/index.rst:230\nmsgid \"Learn how to turn audio into text or text into audio with Xinference.\"\nmsgstr \"学习如何使用 Xinference 将音频转换为文本或将文本转换为音频。\"\n\n#: ../../source/models/index.rst:232\nmsgid \"Video\"\nmsgstr \"视频\"\n\n#: ../../source/models/index.rst:236\nmsgid \"Learn how to generate video with Xinference.\"\nmsgstr \"学习如何使用Xinference生成视频。\"\n\n#: ../../source/models/index.rst:244\nmsgid \"Learn how to inference traditional ML models with Xinference.\"\nmsgstr \"了解如何使用 Xinference 推理传统机器学习模型。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/lora.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-05-16 14:18+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/models/lora.rst:5\nmsgid \"LoRA Integration\"\nmsgstr \"集成LoRA\"\n\n#: ../../source/models/lora.rst:7\nmsgid \"\"\n\"Currently, Xinference supports launching ``LLM`` and ``image`` models \"\n\"with an attached LoRA fine-tuned model.\"\nmsgstr \"\"\n\"当前，Xinference 可以在启动 ``LLM`` 和 ``image`` 模型时连带一个 LoRA 微调\"\n\"模型用以辅助基础模型。\"\n\n#: ../../source/models/lora.rst:10\nmsgid \"Usage\"\nmsgstr \"使用方式\"\n\n#: ../../source/models/lora.rst:13\nmsgid \"Launch\"\nmsgstr \"启动\"\n\n#: ../../source/models/lora.rst:14\nmsgid \"\"\n\"Different from built-in models, xinference currently does not involve \"\n\"managing LoRA models. Users need to first download the LoRA model \"\n\"themselves and then provide the storage path of the model files to \"\n\"xinference.\"\nmsgstr \"\"\n\"不同于内置模型，Xinference 目前不会涉及管理 LoRA 模型。用户需要首先下载\"\n\"对应的 LoRA 模型，然后将模型存储路径提供给 Xinference 。\"\n\n#: ../../source/models/lora.rst:54\nmsgid \"Apply\"\nmsgstr \"应用\"\n\n#: ../../source/models/lora.rst:55\nmsgid \"\"\n\"For LLM models, you can only configure one lora model you want when you \"\n\"use the model. Specifically, specify that the ``lora_name`` parameter be \"\n\"configured in the ``generate_config``. ``lora_name`` corresponds to the \"\n\"name of the lora in the LAUNCH procedure described above.\"\nmsgstr \"\"\n\"对于大语言模型，使用时指定其中一个 lora 。具体地，在 ``generate_config`` 参数中配置 ``lora_name`` 参数。\"\n\"``lora_name`` 对应 launch 过程中你的配置。\"\n\n#: ../../source/models/lora.rst:75\nmsgid \"Note\"\nmsgstr \"注意事项\"\n\n#: ../../source/models/lora.rst:77\nmsgid \"\"\n\"The options ``image_lora_load_kwargs`` and ``image_lora_fuse_kwargs`` are\"\n\" only applicable to models with model_type ``image``. They correspond to \"\n\"the parameters in the ``load_lora_weights`` and ``fuse_lora`` interfaces \"\n\"of the ``diffusers`` library. If launching an LLM model, these parameters\"\n\" are not required.\"\nmsgstr \"\"\n\"上述 ``image_lora_load_kwargs`` 和 ``image_lora_fuse_kwargs`` 选项只应用\"\n\"于 ``image`` 模型。它们对应于 ``diffusers`` 库的 ``load_lora_weights`` 和\"\n\" ``fuse_lora`` 接口中的额外参数。如果启动的是 ``LLM`` 模型，则无需设置\"\n\"这些选项。\"\n\n#: ../../source/models/lora.rst:81\nmsgid \"\"\n\"You need to add the parameter lora_name during inference to specify the \"\n\"corresponding lora model. You can specify it in the Additional Inputs \"\n\"option.\"\nmsgstr \"\"\n\n#: ../../source/models/lora.rst:83\nmsgid \"\"\n\"For LLM chat models, currently only LoRA models are supported that do not\"\n\" change the prompt style.\"\nmsgstr \"\"\n\"对于 ``LLM`` 聊天模型，当前仅支持那些微调后不更改原始基础模型的提示词模版\"\n\"的 LoRA 模型。\"\n\n#: ../../source/models/lora.rst:85\nmsgid \"When using GPU, both LoRA and its base model occupy the same devices.\"\nmsgstr \"使用 GPU 时，LoRA 模型与其基础模型在同样的设备上，不会对其他模型造成影响。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/audio.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-11-10 11:08+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/model_abilities/audio.rst:5\nmsgid \"Audio\"\nmsgstr \"音频\"\n\n#: ../../source/models/model_abilities/audio.rst:7\nmsgid \"Learn how to turn audio into text or text into audio with Xinference.\"\nmsgstr \"学习如何使用 Xinference 将音频转换为文本或将文本转换为音频。\"\n\n#: ../../source/models/model_abilities/audio.rst:11\nmsgid \"Introduction\"\nmsgstr \"介绍\"\n\n#: ../../source/models/model_abilities/audio.rst:14\nmsgid \"The Audio API provides three methods for interacting with audio:\"\nmsgstr \"Audio API提供了三种与音频交互的方法：\"\n\n#: ../../source/models/model_abilities/audio.rst:17\nmsgid \"The transcriptions endpoint transcribes audio into the input language.\"\nmsgstr \"转录终端将音频转录为输入语言。\"\n\n#: ../../source/models/model_abilities/audio.rst:18\nmsgid \"The translations endpoint translates audio into English.\"\nmsgstr \"翻译端点将音频转换为英文。\"\n\n#: ../../source/models/model_abilities/audio.rst:19\nmsgid \"The speech endpoint generates audio from the input text.\"\nmsgstr \"转录终端将音频转录为输入语言。\"\n\n#: ../../source/models/model_abilities/audio.rst:26\nmsgid \"API ENDPOINT\"\nmsgstr \"API 端点\"\n\n#: ../../source/models/model_abilities/audio.rst:27\nmsgid \"OpenAI-compatible ENDPOINT\"\nmsgstr \"OpenAI 兼容端点\"\n\n#: ../../source/models/model_abilities/audio.rst:29\nmsgid \"Transcription API\"\nmsgstr \"转录 API\"\n\n#: ../../source/models/model_abilities/audio.rst:30\nmsgid \"/v1/audio/transcriptions\"\nmsgstr \"/v1/audio/transcriptions\"\n\n#: ../../source/models/model_abilities/audio.rst:32\nmsgid \"Translation API\"\nmsgstr \"翻译 API\"\n\n#: ../../source/models/model_abilities/audio.rst:33\nmsgid \"/v1/audio/translations\"\nmsgstr \"/v1/audio/translations\"\n\n#: ../../source/models/model_abilities/audio.rst:35\nmsgid \"Speech API\"\nmsgstr \"语音 API\"\n\n#: ../../source/models/model_abilities/audio.rst:36\nmsgid \"/v1/audio/speech\"\nmsgstr \"/v1/audio/speech\"\n\n#: ../../source/models/model_abilities/audio.rst:40\nmsgid \"Supported models\"\nmsgstr \"支持的模型列表\"\n\n#: ../../source/models/model_abilities/audio.rst:42\nmsgid \"The audio API is supported with the following models in Xinference:\"\nmsgstr \"在Xinference中，以下模型支持音频API：\"\n\n#: ../../source/models/model_abilities/audio.rst:45\nmsgid \"Audio to text\"\nmsgstr \"语音转文本\"\n\n#: ../../source/models/model_abilities/audio.rst:47\nmsgid \":ref:`whisper-tiny <models_builtin_whisper-tiny>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:48\nmsgid \":ref:`whisper-tiny.en <models_builtin_whisper-tiny.en>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:49\nmsgid \":ref:`whisper-base <models_builtin_whisper-base>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:50\nmsgid \":ref:`whisper-base.en <models_builtin_whisper-base.en>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:51\nmsgid \":ref:`whisper-medium <models_builtin_whisper-medium>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:52\nmsgid \":ref:`whisper-medium.en <models_builtin_whisper-medium.en>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:53\nmsgid \":ref:`whisper-large-v3 <models_builtin_whisper-large-v3>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:54\nmsgid \":ref:`whisper-large-v3-turbo <models_builtin_whisper-large-v3-turbo>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:55\nmsgid \"\"\n\":ref:`Belle-distilwhisper-large-v2-zh <models_builtin_belle-\"\n\"distilwhisper-large-v2-zh>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:56\nmsgid \"\"\n\":ref:`Belle-whisper-large-v2-zh <models_builtin_belle-whisper-\"\n\"large-v2-zh>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:57\nmsgid \"\"\n\":ref:`Belle-whisper-large-v3-zh <models_builtin_belle-whisper-\"\n\"large-v3-zh>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:58\nmsgid \":ref:`SenseVoiceSmall <models_builtin_sensevoicesmall>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:59\nmsgid \":ref:`Paraformer-zh <models_builtin_paraformer-zh>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:61\n#: ../../source/models/model_abilities/audio.rst:99\nmsgid \"For Mac M-series chips only:\"\nmsgstr \"仅适用于 Mac M 系列芯片：\"\n\n#: ../../source/models/model_abilities/audio.rst:63\nmsgid \":ref:`whisper-tiny-mlx <models_builtin_whisper-tiny-mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:64\nmsgid \":ref:`whisper-tiny.en-mlx <models_builtin_whisper-tiny.en-mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:65\nmsgid \":ref:`whisper-base-mlx <models_builtin_whisper-base-mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:66\nmsgid \":ref:`whisper-base.en-mlx <models_builtin_whisper-base.en-mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:67\nmsgid \":ref:`whisper-medium-mlx <models_builtin_whisper-medium-mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:68\nmsgid \":ref:`whisper-medium.en-mlx <models_builtin_whisper-medium.en-mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:69\nmsgid \":ref:`whisper-large-v3-mlx <models_builtin_whisper-large-v3-mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:70\nmsgid \"\"\n\":ref:`whisper-large-v3-turbo-mlx <models_builtin_whisper-large-v3-turbo-\"\n\"mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:74\nmsgid \"Text to audio (TTS)\"\nmsgstr \"文本转语音（TTS）\"\n\n#: ../../source/models/model_abilities/audio.rst:76\nmsgid \"\"\n\"**Models supporting zero-shot** (direct synthesis without reference \"\n\"audio):\"\nmsgstr \"**支持zero-shot的模型** （无需参考音频）\"\n\n#: ../../source/models/model_abilities/audio.rst:78\nmsgid \":ref:`ChatTTS <models_builtin_chattts>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:79\nmsgid \":ref:`CosyVoice-300M-SFT <models_builtin_cosyvoice-300m-sft>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:80\nmsgid \":ref:`CosyVoice-300M-Instruct <models_builtin_cosyvoice-300m-instruct>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:81\nmsgid \"MeloTTS series\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:82\nmsgid \":ref:`Kokoro-82M <models_builtin_kokoro-82m>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:83\n#: ../../source/models/model_abilities/audio.rst:102\nmsgid \":ref:`Kokoro-82M-MLX <models_builtin_kokoro-82m-mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:84\nmsgid \":ref:`MegaTTS3 <models_builtin_megatts3>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:86\nmsgid \"**Models supporting voice cloning** (requires reference audio):\"\nmsgstr \"**支持语音克隆的模型** （需要参考音频）\"\n\n#: ../../source/models/model_abilities/audio.rst:88\nmsgid \":ref:`CosyVoice-300M <models_builtin_cosyvoice-300m>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:89\nmsgid \":ref:`CosyVoice 2.0 <models_builtin_cosyvoice2-0.5b>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:90\nmsgid \":ref:`FishSpeech-1.5 <models_builtin_fishspeech-1.5>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:91\nmsgid \":ref:`F5-TTS <models_builtin_f5-tts>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:92\n#: ../../source/models/model_abilities/audio.rst:101\nmsgid \":ref:`F5-TTS-MLX <models_builtin_f5-tts-mlx>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:93\n#: ../../source/models/model_abilities/audio.rst:97\nmsgid \":ref:`IndexTTS2 <models_builtin_indextts2>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:95\nmsgid \"**Models supporting emotion control**:\"\nmsgstr \"**支持情感控制的模型**\"\n\n#: ../../source/models/model_abilities/audio.rst:105\nmsgid \"Quickstart\"\nmsgstr \"快速入门\"\n\n#: ../../source/models/model_abilities/audio.rst:108\nmsgid \"Transcription\"\nmsgstr \"转录\"\n\n#: ../../source/models/model_abilities/audio.rst:110\nmsgid \"\"\n\"The Transcription API mimics OpenAI's `create transcriptions API \"\n\"<https://platform.openai.com/docs/api-\"\n\"reference/audio/createTranscription>`_. We can try Transcription API out \"\n\"either via cURL, OpenAI Client, or Xinference's python client:\"\nmsgstr \"\"\n\"Transcription API 模仿了 OpenAI 的 `create transcriptions API <https://\"\n\"platform.openai.com/docs/api-reference/audio/createTranscription>`_。你\"\n\"可以通过 cURL、OpenAI Client 或者 Xinference 的 Python 客户端来尝试 \"\n\"Transcription API：\"\n\n#: ../../source/models/model_abilities/audio.rst:161\nmsgid \"Translation\"\nmsgstr \"翻译\"\n\n#: ../../source/models/model_abilities/audio.rst:163\nmsgid \"\"\n\"The Translation API mimics OpenAI's `create translations API \"\n\"<https://platform.openai.com/docs/api-\"\n\"reference/audio/createTranslation>`_. We can try Translation API out \"\n\"either via cURL, OpenAI Client, or Xinference's python client:\"\nmsgstr \"\"\n\"Translation API 模仿了 OpenAI 的 `create translations API <https://\"\n\"platform.openai.com/docs/api-reference/audio/createTranslation>`_。你可以\"\n\"通过 cURL、OpenAI Client 或 Xinference 的 Python 客户端来尝试使用 \"\n\"Translation API：\"\n\n#: ../../source/models/model_abilities/audio.rst:213\nmsgid \"Speech\"\nmsgstr \"语音\"\n\n#: ../../source/models/model_abilities/audio.rst:217\nmsgid \"\"\n\"The Speech API mimics OpenAI's `create speech API \"\n\"<https://platform.openai.com/docs/api-reference/audio/createSpeech>`_. We\"\n\" can try Speech API out either via cURL, OpenAI Client, or Xinference's \"\n\"python client:\"\nmsgstr \"\"\n\"Transcription API 模仿了 OpenAI 的 `create speech API <https://platform.\"\n\"openai.com/docs/api-reference/audio/createSpeech>`_。你可以通过 cURL、\"\n\"OpenAI Client 或者 Xinference 的 Python 客户端来尝试 Speech API：\"\n\n#: ../../source/models/model_abilities/audio.rst:220\nmsgid \"Speech API use non-stream by default as\"\nmsgstr \"Speech API 默认使用非流式\"\n\n#: ../../source/models/model_abilities/audio.rst:222\nmsgid \"\"\n\"The stream output of ChatTTS is not as good as the non-stream output, \"\n\"please refer to: https://github.com/2noise/ChatTTS/pull/564\"\nmsgstr \"\"\n\"ChatTTS 的流式输出不如非流式的效果好，参考：https://github.com/2noise/\"\n\"ChatTTS/pull/564\"\n\n#: ../../source/models/model_abilities/audio.rst:223\nmsgid \"\"\n\"The stream requires ffmpeg<7: \"\n\"https://pytorch.org/audio/stable/installation.html#optional-dependencies\"\nmsgstr \"\"\n\"流式要求 ffmpeg<7：https://pytorch.org/audio/stable/installation.html#\"\n\"optional-dependencies\"\n\n#: ../../source/models/model_abilities/audio.rst:275\nmsgid \"ChatTTS Usage\"\nmsgstr \"ChatTTS 使用\"\n\n#: ../../source/models/model_abilities/audio.rst:277\n#: ../../source/models/model_abilities/audio.rst:480\nmsgid \"Basic usage, refer to :ref:`audio speech usage <audio_speech>`.\"\nmsgstr \"基本使用，参考 :ref:`语音使用章节 <audio_speech>`。\"\n\n#: ../../source/models/model_abilities/audio.rst:279\nmsgid \"\"\n\"Fixed tone color. We can use fixed tone color provided by \"\n\"https://github.com/6drf21e/ChatTTS_Speaker, Download the \"\n\"`evaluation_result.csv \"\n\"<https://github.com/6drf21e/ChatTTS_Speaker/blob/main/evaluation_results.csv>`_\"\n\" , take ``seed_2155`` as example, we get the ``emb_data`` of it.\"\nmsgstr \"\"\n\"固定音色。我们可以使用由 https://github.com/6drf21e/ChatTTS_Speaker 提供\"\n\"的固定音色，下载 `evaluation_result.csv <https://github.com/6drf21e/\"\n\"ChatTTS_Speaker/blob/main/evaluation_results.csv>`_ ，以 ``seed_2155`` \"\n\"音色作为例子，我们使用 ``emb_data`` 列的数据。\"\n\n#: ../../source/models/model_abilities/audio.rst:292\nmsgid \"Use the fixed tone color of ``seed_2155`` to generate speech.\"\nmsgstr \"使用 ``seed_2155`` 固定音色来创建语音。\"\n\n#: ../../source/models/model_abilities/audio.rst:308\nmsgid \"CosyVoice Usage\"\nmsgstr \"CosyVoice 模型使用\"\n\n#: ../../source/models/model_abilities/audio.rst:310\nmsgid \"\"\n\"CosyVoice has two versions: CosyVoice 1.0 and CosyVoice 2.0. CosyVoice \"\n\"1.0 has three different models:\"\nmsgstr \"\"\n\"CosyVoice 有两个版本：CosyVoice 1.0 和 CosyVoice 2.0。CosyVoice 1.0 有 3 \"\n\"个不同模型：\"\n\n#: ../../source/models/model_abilities/audio.rst:312\nmsgid \"\"\n\"**CosyVoice-300M-SFT**: Choose this model if you just want to convert \"\n\"text to audio. There are pretrained voices available: ['中文女', '中文男'\"\n\", '日语男', '粤语女', '英文女', '英文男', '韩语女']\"\nmsgstr \"\"\n\"**CosyVoice-300M-SFT**: 如果你只想把文本转换为语音，选择这个模型。它提供\"\n\"了一些预训练的音色: ['中文女', '中文男', '日语男', '粤语女', '英文女', '\"\n\"英文男', '韩语女']\"\n\n#: ../../source/models/model_abilities/audio.rst:313\nmsgid \"\"\n\"**CosyVoice-300M**: Choose this model if you want to clone voice or \"\n\"convert text to audio in different languages. The ``prompt_speech`` is \"\n\"always required and should be a WAV file. For optimal performance, use a \"\n\"sample rate of 16,000 Hz.\"\nmsgstr \"\"\n\"**CosyVoice-300M**: 如果你想克隆声音或者把文本转换成另一种语言的语音，\"\n\"选择这个模型。使用这个模型，你必须提供 ``prompt_speech`` WAV格式音频文件\"\n\"，请使用 16,000 Hz 采样率以获得更好的性能。\"\n\n#: ../../source/models/model_abilities/audio.rst:314\nmsgid \"\"\n\"**CosyVoice-300M-Instruct**: Choose this model If you need precise \"\n\"control over the tone and pitch.\"\nmsgstr \"**CosyVoice-300M-Instruct**: 如果你想精确控制音调和音色，选择这个模型。\"\n\n#: ../../source/models/model_abilities/audio.rst:316\nmsgid \"Basic usage, launch model ``CosyVoice-300M-SFT``.\"\nmsgstr \"基本使用，加载模型 ``CosyVoice-300M-SFT``。\"\n\n#: ../../source/models/model_abilities/audio.rst:365\nmsgid \"Clone voice, launch model ``CosyVoice-300M``.\"\nmsgstr \"克隆声音，加载模型 ``CosyVoice-300M``。\"\n\n#: ../../source/models/model_abilities/audio.rst:395\nmsgid \"Cross lingual usage, launch model ``CosyVoice-300M``.\"\nmsgstr \"跨语言使用，加载模型 ``CosyVoice-300M``。\"\n\n#: ../../source/models/model_abilities/audio.rst:418\nmsgid \"Instruction based, launch model ``CosyVoice-300M-Instruct``.\"\nmsgstr \"基于指令的声音合成，加载模型 ``CosyVoice-300M-Instruct``。\"\n\n#: ../../source/models/model_abilities/audio.rst:435\nmsgid \"\"\n\"CosyVoice 2.0 only has one model, it provides all the capabilities of the\"\n\" three CosyVoice models. The usage is the same as CosyVoice.\"\nmsgstr \"\"\n\"CosyVoice 2.0 只有一个模型，但它包含了 CosyVoice 三个模型的所有能力。使用\"\n\"方法与 CosyVoice 一样。\"\n\n#: ../../source/models/model_abilities/audio.rst:437\nmsgid \"CosyVoice 2.0 stream usage, launch model ``CosyVoice2-0.5B``.\"\nmsgstr \"CosyVoice 2.0 流式使用，加载模型 ``CosyVoice2-0.5B``。\"\n\n#: ../../source/models/model_abilities/audio.rst:474\nmsgid \"\"\n\"More instructions and examples, could be found at https://fun-audio-\"\n\"llm.github.io/ .\"\nmsgstr \"更多指令和例子，可以参考 https://fun-audio-llm.github.io/ 。\"\n\n#: ../../source/models/model_abilities/audio.rst:478\nmsgid \"FishSpeech Usage\"\nmsgstr \"FishSpeech 模型使用\"\n\n#: ../../source/models/model_abilities/audio.rst:482\nmsgid \"\"\n\"Clone voice, launch model ``FishSpeech-1.5``. Please use `prompt_speech` \"\n\"instead of `reference_audio` and `prompt_text` instead of \"\n\"`reference_text` to clone voice from the reference audio for the \"\n\"FishSpeech model. This arguments is aligned to voice cloning of \"\n\"CosyVoice.\"\nmsgstr \"\"\n\"克隆语音，启动模型 ``FishSpeech-1.5``。请使用 `prompt_speech`而不是 `\"\n\"reference_audio` 以及 `prompt_text` 而不是 `reference_text` 来为 \"\n\"FishSpeech 模型提供参考音频。这个参数和 CosyVoice 的语音克隆保持一致。\"\n\n#: ../../source/models/model_abilities/audio.rst:509\nmsgid \"Paraformer Usage\"\nmsgstr \"Paraformer 使用说明\"\n\n#: ../../source/models/model_abilities/audio.rst:512\nmsgid \"model\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:512\nmsgid \"vad\"\nmsgstr \"语音活动检测（vad）\"\n\n#: ../../source/models/model_abilities/audio.rst:512\nmsgid \"punc\"\nmsgstr \"标点恢复（punc）\"\n\n#: ../../source/models/model_abilities/audio.rst:512\nmsgid \"timestamp\"\nmsgstr \"时间戳\"\n\n#: ../../source/models/model_abilities/audio.rst:512\nmsgid \"speaker\"\nmsgstr \"说话人\"\n\n#: ../../source/models/model_abilities/audio.rst:512\nmsgid \"hotword\"\nmsgstr \"热词\"\n\n#: ../../source/models/model_abilities/audio.rst:514\nmsgid \":ref:`models_builtin_paraformer-zh`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:514\n#: ../../source/models/model_abilities/audio.rst:516\n#: ../../source/models/model_abilities/audio.rst:518\n#: ../../source/models/model_abilities/audio.rst:520\n#: ../../source/models/model_abilities/audio.rst:522\nmsgid \"yes\"\nmsgstr \"是\"\n\n#: ../../source/models/model_abilities/audio.rst:514\n#: ../../source/models/model_abilities/audio.rst:516\n#: ../../source/models/model_abilities/audio.rst:518\n#: ../../source/models/model_abilities/audio.rst:520\nmsgid \"no\"\nmsgstr \"否\"\n\n#: ../../source/models/model_abilities/audio.rst:516\nmsgid \":ref:`models_builtin_paraformer-zh-hotword`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:518\nmsgid \":ref:`models_builtin_paraformer-zh-spk`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:520\nmsgid \":ref:`models_builtin_paraformer-zh-long`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:522\nmsgid \":ref:`models_builtin_seaco-paraformer-zh` (recommend)\"\nmsgstr \":ref:`models_builtin_seaco-paraformer-zh` （推荐）\"\n\n#: ../../source/models/model_abilities/audio.rst:525\nmsgid \"**VAD & Punctuation Usage**\"\nmsgstr \"**VAD 与标点符号的使用**\"\n\n#: ../../source/models/model_abilities/audio.rst:527\nmsgid \"All Paraformer models support VAD and punctuation.\"\nmsgstr \"所有 Paraformer 模型均支持 VAD 和标点功能。\"\n\n#: ../../source/models/model_abilities/audio.rst:529\nmsgid \"**Timestamp & Speaker Usage**\"\nmsgstr \"**时间戳和说话人识别使用说明**\"\n\n#: ../../source/models/model_abilities/audio.rst:531\nmsgid \"Only the following models support `timestamp` and `speaker`:\"\nmsgstr \"仅以下模型支持 `时间戳` 和 `说话人` 识别：\"\n\n#: ../../source/models/model_abilities/audio.rst:533\nmsgid \"`paraformer-zh-spk`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:534\nmsgid \"`paraformer-zh-long`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:535\n#: ../../source/models/model_abilities/audio.rst:560\nmsgid \"`seaco-paraformer-zh`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:537\nmsgid \"Among them, only `paraformer-zh-spk` enables **speaker info by default**.\"\nmsgstr \"其中，仅 `paraformer-zh-spk` 默认启用说话人识别功能。\"\n\n#: ../../source/models/model_abilities/audio.rst:539\nmsgid \"\"\n\"If you need speaker info when using `paraformer-zh-long` or `seaco-\"\n\"paraformer-zh`:\"\nmsgstr \"\"\n\"如果你使用的是 `paraformer-zh-long` 或 `seaco-paraformer-zh`，且需要启用\"\n\"说话人识别功能：\"\n\n#: ../../source/models/model_abilities/audio.rst:541\nmsgid \"\"\n\"In Web UI: add an extra parameter with key ``spk_model`` and value \"\n\"``cam++``\"\nmsgstr \"在 Web UI 中：添加名为 ``spk_model``、值为 ``cam++`` 的参数\"\n\n#: ../../source/models/model_abilities/audio.rst:542\nmsgid \"In command line: add the option ``--spk_model cam++``\"\nmsgstr \"在命令行中：添加参数 ``--spk_model cam++``\"\n\n#: ../../source/models/model_abilities/audio.rst:544\n#: ../../source/models/model_abilities/audio.rst:562\nmsgid \"Example:\"\nmsgstr \"示例：\"\n\n#: ../../source/models/model_abilities/audio.rst:555\nmsgid \"**Hotword Usage**\"\nmsgstr \"**热词功能使用说明**\"\n\n#: ../../source/models/model_abilities/audio.rst:557\nmsgid \"Only the following models support `hotword`:\"\nmsgstr \"仅以下模型支持 `hotword` （热词功能）：\"\n\n#: ../../source/models/model_abilities/audio.rst:559\nmsgid \"`paraformer-zh-hotword`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:576\nmsgid \"SenseVoiceSmall Offline Usage\"\nmsgstr \"SenseVoiceSmall 离线使用\"\n\n#: ../../source/models/model_abilities/audio.rst:578\nmsgid \"\"\n\"Now SenseVoiceSmall use a small vad model ``fsmn-vad``, it will be \"\n\"downloaded thus network required.\"\nmsgstr \"\"\n\"现在 SenseVoiceSmall 使用一个小的 VAD 模型 ``fsmn-vad``，因此它需要网络来\"\n\"下载。\"\n\n#: ../../source/models/model_abilities/audio.rst:580\nmsgid \"For offline environment, you can download the vad model in advance.\"\nmsgstr \"对于离线环境，你可以提前下载这个 VAD 模型。\"\n\n#: ../../source/models/model_abilities/audio.rst:582\nmsgid \"\"\n\"Download from `huggingface <https://huggingface.co/funasr/fsmn-vad>`_ or \"\n\"`modelscope <https://modelscope.cn/models/iic/speech_fsmn_vad_zh-cn-16k-\"\n\"common-pytorch/files>`_. Assume downloaded to ``/path/to/fsmn-vad``.\"\nmsgstr \"\"\n\"从 `huggingface <https://huggingface.co/funasr/fsmn-vad>`_ 或者 `\"\n\"modelscope <https://modelscope.cn/models/iic/speech_fsmn_vad_zh-cn-16k-\"\n\"common-pytorch/files>`_ 下载。假设下载到 ``/path/to/fsmn-vad``。\"\n\n#: ../../source/models/model_abilities/audio.rst:585\nmsgid \"\"\n\"Then when launching SenseVoiceSmall with Web UI, you can add an \"\n\"additional parameter with key ``vad_model`` and value ``/path/to/fsmn-\"\n\"vad`` which is the downloaded path. When launching with command line, you\"\n\" can add an option ``--vad_model /path/to/fsmn-vad``.\"\nmsgstr \"\"\n\"然后当用 Web UI 加载 SenseVoiceSmall 时，添加额外选项，key 是 ``vad_model\"\n\"``，值是之前的下载路径 ``/path/to/fsmn-vad``。用命令行加载时，增加选项 ``\"\n\"--vad_model /path/to/fsmn-vad``。\"\n\n#: ../../source/models/model_abilities/audio.rst:590\nmsgid \"Kokoro Usage\"\nmsgstr \"Kokoro 模型使用\"\n\n#: ../../source/models/model_abilities/audio.rst:592\nmsgid \"\"\n\"The Kokoro model supports multiple languages, but the default language is\"\n\" English. If you want to use other languages, such as Chinese, you need \"\n\"to install additional dependency packages and add an additional parameter\"\n\" when starting the model.\"\nmsgstr \"\"\n\"Kokoro模型支持多语言，默认是英文。如果你想使用非默认语言，例如中文，则\"\n\"需要安装额外依赖包并且在模型启动时增加对应参数。\"\n\n#: ../../source/models/model_abilities/audio.rst:596\nmsgid \"pip install misaki[zh]\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/audio.rst:598\nmsgid \"\"\n\"Initialize the model with the parameter lang_code='z', For all available \"\n\"``lang_code`` options, please refer to `kokoro source code \"\n\"<https://github.com/hexgrad/kokoro/blob/main/kokoro/pipeline.py#L22>`_. \"\n\"If the model is started through the web UI, an additional parameter needs\"\n\" to be added, with the key as ``lang_code`` and the value as ``z``. If \"\n\"the model is started through the xinference client, the parameters are \"\n\"passed via the launch_model interface:\"\nmsgstr \"\"\n\"使用 lang_code='z' 参数初始化模型，可以参考 `kokoro source code <https://\"\n\"github.com/hexgrad/kokoro/blob/main/kokoro/pipeline.py#L22>`_ 查看所有\"\n\"支持的 lang_code。如果你是通过 Web UI启动的模型，则需要添加额外参数，key\"\n\"是 ``lang_code``，value是 ``z``。如果你是通过 xinference client启动的模型\"\n\"，则可以参考如下代码传递参数：\"\n\n#: ../../source/models/model_abilities/audio.rst:615\nmsgid \"\"\n\"When inferring, the voice must start with 'z', for example: \"\n\"``zf_xiaoyi``. The currently supported voices are: \"\n\"https://huggingface.co/hexgrad/Kokoro-82M/tree/main/voices. For example:\"\nmsgstr \"\"\n\"当推理时，需要使用 'z' 开头的 voice，例如：``zf_xiaoyi``。目前支持的 \"\n\"voices 可以参考 https://huggingface.co/hexgrad/Kokoro-82M/tree/main/\"\n\"voices。使用方法如下：\"\n\n#: ../../source/models/model_abilities/audio.rst:625\nmsgid \"IndexTTS2 Usage\"\nmsgstr \"IndexTTS2 使用\"\n\n#: ../../source/models/model_abilities/audio.rst:627\nmsgid \"\"\n\"The IndexTTS2 model supports emotion control, you can use this feature by\"\n\" specifying some additional parameters. Here are several examples of how \"\n\"to use IndexTTS2:\"\nmsgstr \"\"\n\"IndexTTS2模型支持情感控制，你可以通过使用一些额外的参数来时用这个功能。\"\n\"以下为IndexTTS2的使用方式：\"\n\n#: ../../source/models/model_abilities/audio.rst:630\nmsgid \"Synthesize new speech with a single reference audio file (voice cloning):\"\nmsgstr \"单一参考音频（音色克隆）：\"\n\n#: ../../source/models/model_abilities/audio.rst:646\nmsgid \"\"\n\"Using a separate, emotional reference audio file to condition the speech \"\n\"synthesis:\"\nmsgstr \"指定情感参考音频：\"\n\n#: ../../source/models/model_abilities/audio.rst:666\nmsgid \"\"\n\"When an emotional reference audio file is specified, you can optionally \"\n\"set the ``emo_alpha`` to adjust how much it affects the output. Valid \"\n\"range is ``0.0 - 1.0`` , and the default value is ``1.0`` (100%):\"\nmsgstr \"\"\n\"当指定情感参考音频时，可以选择设置 ``emo_alpha`` 参数以调整其对输出的影响\"\n\"程度。有效范围为 ``0.0 - 1.0`` ，默认值为 ``1.0`` (100%)。\"\n\n#: ../../source/models/model_abilities/audio.rst:689\nmsgid \"\"\n\"It's also possible to omit the emotional reference audio and instead \"\n\"provide an 8-float list specifying the intensity of each emotion, in the \"\n\"following order: ``[happy, angry, sad, afraid, disgusted, melancholic, \"\n\"surprised, calm]`` . You can additionally use the ``use_random`` \"\n\"parameter to introduce stochasticity during inference; the default is \"\n\"``False`` , and setting it to ``True`` enables randomness:\"\nmsgstr \"\"\n\"可以省略情绪参考音频，转而提供一个包含8个浮点数的列表，按以下顺序指定每种\"\n\"情绪的强度: ``[快乐, 愤怒, 悲伤, 恐惧, 厌恶, 忧郁, 惊讶, 平静]`` 。您还\"\n\"可以使用 ``use_random`` 参数在推理过程中引入随机性情绪；默认值为 ``False`\"\n\"` ，设置为 ``True`` 即可启用随机性情绪。\"\n\n#: ../../source/models/model_abilities/audio.rst:712\nmsgid \"\"\n\"Alternatively, you can enable ``use_emo_text`` to guide the emotions \"\n\"based on your provided ``text`` script. Your text script will then \"\n\"automatically be converted into emotion vectors. It's recommended to use \"\n\"``emo_alpha`` around 0.6 (or lower) when using the text emotion modes, \"\n\"for more natural sounding speech. You can introduce randomness with \"\n\"``use_random`` (default: ``False``; ``True`` enables randomness):\"\nmsgstr \"\"\n\"或者，您可以启用 ``use_emo_text`` 功能，根据您提供的 ``text`` 脚本引导\"\n\"情感表达。您的文本脚本将自动转换为情感向量。使用文本情感模式时，建议将 ``\"\n\"emo_alpha`` 设置为 0.6 左右（或更低），以获得更自然的语音效果。您可通过 `\"\n\"`use_random`` 引入随机性（默认值：``False`` ；``True`` 启用随机性）：\"\n\n#: ../../source/models/model_abilities/audio.rst:737\nmsgid \"\"\n\"It's also possible to directly provide a specific text emotion \"\n\"description via the ``emo_text`` parameter. Your emotion text will then \"\n\"automatically be converted into emotion vectors. This gives you separate \"\n\"control of the text script and the text emotion description:\"\nmsgstr \"\"\n\"您也可以通过 ``emo_text`` 参数直接提供特定的文本情绪描述。您的情绪文本将\"\n\"自动转换为情绪向量。这使您能够分别控制文本脚本和文本情绪描述：\"\n\n#: ../../source/models/model_abilities/audio.rst:761\nmsgid \"IndexTTS2 Offline Usage\"\nmsgstr \"IndexTTS2 离线使用\"\n\n#: ../../source/models/model_abilities/audio.rst:763\nmsgid \"\"\n\"IndexTTS2 requires several small models that are downloaded automatically\"\n\" during initialization. For offline environments, you can download these \"\n\"models to a single directory and specify the directory path.\"\nmsgstr \"\"\n\"IndexTTS2需要多个小型模型，这些模型会在初始化过程中自动下载。在离线环境中\"\n\"，您可以将这些模型下载到单一目录，并指定该目录路径。\"\n\n#: ../../source/models/model_abilities/audio.rst:766\nmsgid \"**Easy Setup Method**\"\nmsgstr \"**简易设置方法**\"\n\n#: ../../source/models/model_abilities/audio.rst:768\nmsgid \"\"\n\"The simplest way to set up offline usage is to Use the `hf download` \"\n\"command to download the small model in advance:\"\nmsgstr \"设置离线使用的最简单方法是使用： `hf download` 命令去提前下载所有小模型\"\n\n#: ../../source/models/model_abilities/audio.rst:781\nmsgid \"The final directory structure should look like this:\"\nmsgstr \"最终的目录结构应如下所示：\"\n\n#: ../../source/models/model_abilities/audio.rst:791\nmsgid \"**Required Models**\"\nmsgstr \"**支持的模型列表**\"\n\n#: ../../source/models/model_abilities/audio.rst:793\nmsgid \"The small models are automatically mapped as follows:\"\nmsgstr \"小型模型将按以下方式自动映射：\"\n\n#: ../../source/models/model_abilities/audio.rst:795\nmsgid \"\"\n\"**w2v-bert-2.0** (``models--facebook--w2v-bert-2.0``) - Feature \"\n\"extraction model\"\nmsgstr \"**w2v-bert-2.0** (``models--facebook--w2v-bert-2.0``) - 特征提取模型\"\n\n#: ../../source/models/model_abilities/audio.rst:796\nmsgid \"**campplus** (``models--funasr--campplus``) - Speaker recognition model\"\nmsgstr \"**campplus** (``models--funasr--campplus``) - 说话人识别模型\"\n\n#: ../../source/models/model_abilities/audio.rst:797\nmsgid \"\"\n\"**bigvgan** (``models--nvidia--bigvgan_v2_22khz_80band_256x``) - Vocoder \"\n\"model\"\nmsgstr \"\"\n\"**bigvgan** (``models--nvidia--bigvgan_v2_22khz_80band_256x``) - 语音\"\n\"编码器模型\"\n\n#: ../../source/models/model_abilities/audio.rst:798\nmsgid \"\"\n\"**semantic_codec** (``models--amphion--MaskGCT``) - Semantic \"\n\"encoding/decoding model\"\nmsgstr \"**语义编解码器** (``models--amphion--MaskGCT``) - 语义编码/解码模型\"\n\n#: ../../source/models/model_abilities/audio.rst:800\nmsgid \"**Launching IndexTTS2 with Offline Models**\"\nmsgstr \"**使用离线模式启动IndexTTS2**\"\n\n#: ../../source/models/model_abilities/audio.rst:802\nmsgid \"\"\n\"When launching IndexTTS2 with Web UI, you can add an additional \"\n\"parameter: - ``small_models_dir`` - Path to directory containing all \"\n\"small models\"\nmsgstr \"\"\n\"在通过Web UI启动IndexTTS2时，可添加额外参数：- ``small_models_dir`` - \"\n\"包含所有小型模型的目录路径\"\n\n#: ../../source/models/model_abilities/audio.rst:805\nmsgid \"When launching with command line, you can add the option:\"\nmsgstr \"在通过命令行启动时，您可以添加以下选项：\"\n\n#: ../../source/models/model_abilities/audio.rst:812\nmsgid \"When launching with Python client:\"\nmsgstr \"使用 Python 客户端启动时：\"\n\n#~ msgid \"**random sampling**\"\n#~ msgstr \"\"\n\n#~ msgid \"\"\n#~ \"Enabling random sampling will reduce the\"\n#~ \" voice cloning fidelity of the speech\"\n#~ \" synthesis.\"\n#~ msgstr \"\"\n\n#~ msgid \"\"\n#~ \"5.Alternatively, you can enable `use_emo_text`\"\n#~ \" to guide the emotions based on\"\n#~ msgstr \"\"\n\n#~ msgid \"\"\n#~ \"your provided `text` script. Your text\"\n#~ \" script will then automatically be \"\n#~ \"converted into emotion vectors. It's \"\n#~ \"recommended to use `emo_alpha` around \"\n#~ \"0.6 (or lower) when using the text\"\n#~ \" emotion modes, for more natural \"\n#~ \"sounding speech. You can introduce \"\n#~ \"randomness with `use_random` (default: \"\n#~ \"`False`; `True` enables randomness):\"\n#~ msgstr \"\"\n\n#~ msgid \"\"\n#~ \"The required small models are: 1. \"\n#~ \"**w2v-bert-2.0** - Feature extraction model\"\n#~ \" (place in ``w2v-bert-2.0/`` subdirectory)\"\n#~ \" 2. **semantic_codec** - Semantic \"\n#~ \"encoding/decoding model (place in \"\n#~ \"``semantic_codec/`` subdirectory) 3. **campplus**\"\n#~ \" - Speaker recognition model (place \"\n#~ \"in ``campplus/`` subdirectory) 4. **bigvgan**\"\n#~ \" - Vocoder model (place in \"\n#~ \"``bigvgan/`` subdirectory)\"\n#~ msgstr \"\"\n#~ \"所需的小型模型包括：1. **w2v-\"\n#~ \"bert-2.0** - 特征提取模型（放置于\"\n#~ \"``w2v-bert-2.0/``子目录）2. \"\n#~ \"**semantic_codec** - 语义编码/解码\"\n#~ \"模型（放置于``semantic_codec/``\"\n#~ \"子目录）3. **campplus** - 说话\"\n#~ \"人识别模型（放置于``campplus/``\"\n#~ \"子目录） 4. **bigvgan** - 声\"\n#~ \"码器模型（放置于``bigvgan/``子目录\"\n#~ \"）\"\n\n#~ msgid \"\"\n#~ \"Assume downloaded to ``/path/to/small_models`` \"\n#~ \"with the following structure:\"\n#~ msgstr \"假设下载到``/path/to/small_models``目录，其结构如下：\"\n\n#~ msgid \"\"\n#~ \"**Find your Hugging Face cache \"\n#~ \"directory** (usually ``~/.cache/huggingface/hub/``)\"\n#~ msgstr \"\"\n#~ \"**查找您的Hugging Face缓存目录** \"\n#~ \"（通常位于 ``~/.cache/huggingface/\"\n#~ \"hub/`` ）\"\n\n#~ msgid \"**Copy the required models** to your target directory:\"\n#~ msgstr \"**将所需模型** 复制到目标目录：\"\n\n#~ msgid \"**Note about Directory Structure**\"\n#~ msgstr \"**关于目录结构的说明**\"\n\n#~ msgid \"\"\n#~ \"The ``snapshots/`` directories contain \"\n#~ \"version-specific model files with hash \"\n#~ \"names. Xinference automatically detects and\"\n#~ \" uses the correct snapshot directory, \"\n#~ \"so you don't need to worry about\"\n#~ \" the exact hash values.\"\n#~ msgstr \"\"\n#~ \"``snapshots/`` 目录包含具有哈希名称\"\n#~ \"的特定版本模型文件。Xinference会自动检测并\"\n#~ \"使用正确的快照目录，因此您无需担心精确\"\n#~ \"的哈希值。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/chat.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-01 22:58+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/model_abilities/chat.rst:5\nmsgid \"Chat & Generate\"\nmsgstr \"聊天 & 生成\"\n\n#: ../../source/models/model_abilities/chat.rst:7\nmsgid \"Learn how to chat with LLMs in Xinference.\"\nmsgstr \"学习如何在 Xinference 中与 LLM 聊天。\"\n\n#: ../../source/models/model_abilities/chat.rst:10\nmsgid \"Introduction\"\nmsgstr \"介绍\"\n\n#: ../../source/models/model_abilities/chat.rst:12\nmsgid \"\"\n\"Models equipped with ``chat`` or ``generate`` abilities are frequently \"\n\"referred to as large language models (LLM) or text generation models. \"\n\"These models are designed to respond with text outputs to the inputs they\"\n\" receive, commonly known as \\\"prompts\\\". Typically, one can direct these \"\n\"models using specific instructions or by providing concrete examples \"\n\"illustrating how to accomplish a task.\"\nmsgstr \"\"\n\"具备 ``chat`` 或 ``generate`` 能力的模型通常被称为大型语言模型（LLM）或\"\n\"文本生成模型。这些模型旨在根据接收到的输入以文本输出方式进行回应，通常被\"\n\"称为“提示”。一般来说，可以通过特定指令或提供具体示例来引导这些模型完成\"\n\"任务。\"\n\n#: ../../source/models/model_abilities/chat.rst:17\nmsgid \"\"\n\"Models with ``generate`` capacities are typically pre-trained large \"\n\"language models. On the other hand, models equipped with ``chat`` \"\n\"capabilities are finely-tuned and aligned LLMs, optimized for dialogues \"\n\"use case. In most cases, models ending with \\\"chat\\\" (e.g. \"\n\"``llama-2-chat``, ``qwen-chat``, etc) are identified as having ``chat`` \"\n\"capabilities.\"\nmsgstr \"\"\n\"具备 ``generate`` 能力的模型通常是预训练的大型语言模型。另一方面，配备 ``\"\n\"chat`` 功能的模型是经过精调和对齐的 LLM（Language Model），专为对话场景\"\n\"进行优化。在大多数情况下，以“chat”结尾的模型（例如 ``llama-2-chat``，``\"\n\"qwen-chat`` 等）则具有 ``chat`` 功能。\"\n\n#: ../../source/models/model_abilities/chat.rst:22\nmsgid \"\"\n\"The Chat API and Generate API offer two distinct approaches for \"\n\"interacting with LLMs:\"\nmsgstr \"Chat API 和 Generate API 提供了两种不同的与 LLMs 进行交互的方法：\"\n\n#: ../../source/models/model_abilities/chat.rst:24\nmsgid \"\"\n\"The Chat API (like OpenAI's `Chat Completion API \"\n\"<https://platform.openai.com/docs/api-reference/chat/create>`__) can \"\n\"conduct multi-turn conversations.\"\nmsgstr \"\"\n\"Chat API（类似于 OpenAI 的 `Chat Completion API <https://platform.openai.\"\n\"com/docs/api-reference/chat/create>`__）可以进行多轮对话。\"\n\n#: ../../source/models/model_abilities/chat.rst:27\nmsgid \"\"\n\"The Generate API (like OpenAI's legacy `Completions API \"\n\"<https://platform.openai.com/docs/api-reference/completions/create>`__) \"\n\"allows you to generate text based on a text prompt.\"\nmsgstr \"\"\n\"Generate API（类似于 OpenAI 的 `Completions API <https://platform.openai.\"\n\"com/docs/api-reference/completions/create>`__ ）允许您根据文本提示生成\"\n\"文本。\"\n\n#: ../../source/models/model_abilities/chat.rst:34\nmsgid \"MODEL ABILITY\"\nmsgstr \"模型能力\"\n\n#: ../../source/models/model_abilities/chat.rst:35\nmsgid \"API ENDPOINT\"\nmsgstr \"API 端点\"\n\n#: ../../source/models/model_abilities/chat.rst:36\nmsgid \"OpenAI-compatible ENDPOINT\"\nmsgstr \"OpenAI 兼容端点\"\n\n#: ../../source/models/model_abilities/chat.rst:38\nmsgid \"chat\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/chat.rst:39\n#: ../../source/models/model_abilities/chat.rst:56\nmsgid \"Chat API\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/chat.rst:40\nmsgid \"/v1/chat/completions\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/chat.rst:42\nmsgid \"generate\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/chat.rst:43\n#: ../../source/models/model_abilities/chat.rst:222\nmsgid \"Generate API\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/chat.rst:44\nmsgid \"/v1/completions\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/chat.rst:48\nmsgid \"Supported models\"\nmsgstr \"支持的模型列表\"\n\n#: ../../source/models/model_abilities/chat.rst:50\nmsgid \"\"\n\"You can examine the abilities of all the :ref:`builtin LLM models in \"\n\"Xinference <models_llm_index>`.\"\nmsgstr \"\"\n\"你可以查看所有 :ref:`Xinference 中内置的 LLM 模型的能力 <models_llm_index\"\n\">`。\"\n\n#: ../../source/models/model_abilities/chat.rst:53\nmsgid \"Chat Models\"\nmsgstr \"聊天模型\"\n\n#: ../../source/models/model_abilities/chat.rst:58\nmsgid \"\"\n\"The Chat API mimics OpenAI's `Chat Completion API \"\n\"<https://platform.openai.com/docs/api-reference/chat/create>`__. We can \"\n\"try Chat API out either via cURL, OpenAI Client, or Xinference's python \"\n\"client:\"\nmsgstr \"\"\n\"尝试使用 cURL、OpenAI Client 或 Xinference的 Python 客户端来测试 Chat API\"\n\"：\"\n\n#: ../../source/models/model_abilities/chat.rst:145\nmsgid \"You can find more examples of Chat API in the tutorial notebook:\"\nmsgstr \"你可以在教程笔记本中找到更多 Chat API 的示例。\"\n\n#: ../../source/models/model_abilities/chat.rst:149\nmsgid \"Gradio Chat\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/chat.rst:152\nmsgid \"\"\n\"Learn from an example of utilizing the Chat API with the Xinference \"\n\"Python client.\"\nmsgstr \"学习如何使用 Xinference 的 Chat API 和 Python 客户端的示例。\"\n\n#: ../../source/models/model_abilities/chat.rst:155\nmsgid \"Hybrid Thinking Models\"\nmsgstr \"混合思考模型\"\n\n#: ../../source/models/model_abilities/chat.rst:157\nmsgid \"\"\n\"Some LLMs are marked as ``hybrid`` and can run with or without thinking \"\n\"mode.\"\nmsgstr \"\"\n\"部分大型语言模型标记为 ``混合型`` ，可选择是否启用思考模式运行。\"\n\n#: ../../source/models/model_abilities/chat.rst:159\nmsgid \"Request-level ``enable_thinking`` is added in v1.17.0\"\nmsgstr \"请求级别的 ``enable_thinking`` 开关在 v1.17.0 支持\"\n\n#: ../../source/models/model_abilities/chat.rst:162\nmsgid \"\"\n\"Xinference exposes a request-level ``enable_thinking`` switch that works \"\n\"across different model templates (e.g. Qwen uses ``enable_thinking`` \"\n\"while some DeepSeek templates use ``thinking``).\"\nmsgstr \"\"\n\"Xinference提供请求级别的 ``enable_thinking`` 开关，该开关适用于不同模型\"\n\"模板（例如Qwen使用 ``enable_thinking`` ，而部分DeepSeek模板使用 ``\"\n\"thinking`` ）。\"\n\n#: ../../source/models/model_abilities/chat.rst:165\nmsgid \"Usage examples:\"\nmsgstr \"使用示例：\"\n\n#: ../../source/models/model_abilities/chat.rst:219\nmsgid \"Generate Models\"\nmsgstr \"生成模型\"\n\n#: ../../source/models/model_abilities/chat.rst:224\nmsgid \"\"\n\"The Generate API mirrors OpenAI's legacy `Completions API \"\n\"<https://platform.openai.com/docs/api-reference/completions/create>`__.\"\nmsgstr \"\"\n\"Generate API 复刻了 OpenAI 的 `Completions API <https://platform.openai.\"\n\"com/docs/api-reference/completions/create>`__。 \"\n\n#: ../../source/models/model_abilities/chat.rst:226\nmsgid \"\"\n\"The difference between the Generate API and the Chat API lies primarily \"\n\"in the form of input. Opposite to the Chat API that takes a list of \"\n\"messages as input, the Generate API accepts a freeform text string named \"\n\"\\\"prompt\\\".\"\nmsgstr \"\"\n\"Generate API 和 Chat API 之间的区别主要在于输入形式。Chat API 接受一个\"\n\"消息列表作为输入，Generate API 接受一个名为 prompt 的自由文本字符串作为\"\n\"输入。\"\n\n#: ../../source/models/model_abilities/chat.rst:297\nmsgid \"FAQ\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/chat.rst:300\nmsgid \"\"\n\"Does Xinference's LLM provide integration methods for LangChain or \"\n\"LlamaIndex?\"\nmsgstr \"Xinference 的 LLM 是否提供与 LangChain 或 LlamaIndex 的集成方法？\"\n\n#: ../../source/models/model_abilities/chat.rst:302\nmsgid \"\"\n\"Yes, you can refer to the related sections in their respective official \"\n\"Xinference documentation. Here are the links:\"\nmsgstr \"是的，你可以参考它们各自官方Xinference文档中的相关部分。以下是链接：\"\n\n#: ../../source/models/model_abilities/chat.rst:304\nmsgid \"\"\n\"`LangChain LLMs: Xinference \"\n\"<https://python.langchain.com/docs/integrations/llms/xinference>`__\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/chat.rst:306\nmsgid \"\"\n\"`LlamaIndex LLM integrations: Xinference  \"\n\"<https://docs.llamaindex.ai/en/stable/examples/llm/xinference_local_deployment.html>`__\"\nmsgstr \"\"\n\n#~ msgid \"Quickstart\"\n#~ msgstr \"快速入门\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/embed.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-02-01 16:47+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.13.1\\n\"\n\n#: ../../source/models/model_abilities/embed.rst:5\nmsgid \"Embeddings\"\nmsgstr \"嵌入\"\n\n#: ../../source/models/model_abilities/embed.rst:8\nmsgid \"Learn how to create text embeddings in Xinference.\"\nmsgstr \"学习如何在 Xinference 中创建文本嵌入。\"\n\n#: ../../source/models/model_abilities/embed.rst:12\nmsgid \"Introduction\"\nmsgstr \"介绍\"\n\n#: ../../source/models/model_abilities/embed.rst:14\nmsgid \"\"\n\"Text embeddings are used to quantify how related different pieces of text\"\n\" are. They can be used in various applications including search, \"\n\"clustering, recommendations, anomaly detection, diversity measurement, \"\n\"and classification.\"\nmsgstr \"文本嵌入用于量化不同文本之间的相关性。它们可以应用于各种应用程序，包括搜索、聚类、推荐、异常检测、多样性度量和分类。\"\n\n#: ../../source/models/model_abilities/embed.rst:17\nmsgid \"\"\n\"An embedding is a vector of floating point numbers. The proximity between\"\n\" two vectors serves as an indicator of their similarity. Less distance \"\n\"implies a higher correlation, while a larger distance indicates reduced \"\n\"correlation.\"\nmsgstr \"嵌入是一组浮点数的向量。两个向量之间的接近程度可以作为它们相似性的指标。\"\n\"距离越小表示相关性越高，而距离越大则表示相关性降低。\"\n\n#: ../../source/models/model_abilities/embed.rst:20\nmsgid \"\"\n\"Embedding models in Xinference can be invoked through the Embeddings API \"\n\"to create embeddings. The Embeddings API mimics OpenAI's `create \"\n\"embeddings API <https://platform.openai.com/docs/api-\"\n\"reference/embeddings/create>`_.\"\nmsgstr \"通过 Embeddings API 在 Xinference 中嵌入模型可以被调用，以创建嵌入。\"\n\"Embeddings API 模仿了 OpenAI 的 `create embeddings API <https://platform.openai.com/docs/api-reference/embeddings/create>`_。\"\n\n#: ../../source/models/model_abilities/embed.rst:27\nmsgid \"API ENDPOINT\"\nmsgstr \"API 端点\"\n\n#: ../../source/models/model_abilities/embed.rst:28\nmsgid \"OpenAI-compatible ENDPOINT\"\nmsgstr \"OpenAI 兼容端点\"\n\n#: ../../source/models/model_abilities/embed.rst:30\nmsgid \"Embeddings API\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/embed.rst:31\nmsgid \"/v1/embeddings\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/embed.rst:35\nmsgid \"Supported models\"\nmsgstr \"支持的模型列表\"\n\n#: ../../source/models/model_abilities/embed.rst:37\nmsgid \"\"\n\"You can examine all the :ref:`builtin embedding models in Xinference \"\n\"<models_embedding_index>`.\"\nmsgstr \"你可以查看所有 :ref:`Xinference 内置中的嵌入模型 <models_embedding_index>`。\"\n\n#: ../../source/models/model_abilities/embed.rst:41\nmsgid \"Quickstart\"\nmsgstr \"快速入门\"\n\n#: ../../source/models/model_abilities/embed.rst:43\nmsgid \"\"\n\"We can try Embeddings API out either via cURL, OpenAI Client, or \"\n\"Xinference's python client:\"\nmsgstr \"我们可以通过 cURL、OpenAI Client 或 Xinference 的 Python 客户端来尝试 Embeddings API。\"\n\n#: ../../source/models/model_abilities/embed.rst:103\nmsgid \"You can find more examples of ``embed`` ability in the tutorial notebook:\"\nmsgstr \"你可以在教程笔记本中找到更多关于 ``embed`` 能力的示例。\"\n\n#: ../../source/models/model_abilities/embed.rst:107\nmsgid \"LangChain Streamlit Doc Chat\"\nmsgstr \"LangChain Streamlit 文档对话\"\n\n#: ../../source/models/model_abilities/embed.rst:110\nmsgid \"Learn from an example demonstrating how to use embed API via LangChain\"\nmsgstr \"从一个示例中学习如何通过 LangChain 使用嵌入 API\"\n\n#: ../../source/models/model_abilities/embed.rst:114\nmsgid \"FAQ\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/embed.rst:117\nmsgid \"Does the LLM in Xinference support Embeddings API?\"\nmsgstr \"LLM 在 Xinference 中是否支持 Embeddings API？\"\n\n#: ../../source/models/model_abilities/embed.rst:119\nmsgid \"\"\n\"No. Xinference doesn't provide embed API for LLMs due to considerations \"\n\"of performance.\"\nmsgstr \"不支持，Xinference由于性能考虑，并没有提供 LLMs 嵌入 API。\"\n\n#: ../../source/models/model_abilities/embed.rst:123\nmsgid \"Does Embeddings API provides integration method for LangChain?\"\nmsgstr \"Embeddings API 是否提供了与 LangChain 的集成方法？\"\n\n#: ../../source/models/model_abilities/embed.rst:125\nmsgid \"\"\n\"Yes, you can refer to the related sections in LangChain's respective \"\n\"official Xinference documentation. Here is the link: `Text Embedding \"\n\"Models: Xinference \"\n\"<https://python.langchain.com/docs/integrations/text_embedding/xinference>`_\"\nmsgstr \"是的，你可以参考LangChain相关部分的官方Xinference文档。这里是链接：\"\n\"`Text Embedding Models: Xinference <https://python.langchain.com/docs/integrations/text_embedding/xinference>`_\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/flexible.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-06-26 13:20+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/models/model_abilities/flexible.rst:5\nmsgid \"Traditional ML models (Experimental)\"\nmsgstr \"传统机器学习模型（实验性质）\"\n\n#: ../../source/models/model_abilities/flexible.rst:7\nmsgid \"\"\n\"Learn how to inference traditional machine learning models with \"\n\"Xinference. These flexibly extensible models are referred to as \"\n\"**Flexible Models** within Xinference.\"\nmsgstr \"\"\n\"了解如何使用 Xinference 推理传统机器学习模型。在 Xinference 中，这些灵活可扩展的模型被称为 **灵活模型**。\"\n\n#: ../../source/models/model_abilities/flexible.rst:10\nmsgid \"\"\n\"This ability is public since v1.7.1, now the API is not stable and may \"\n\"change during evolving.\"\nmsgstr \"\"\n\"该功能自 v1.7.1 版本起公开，目前 API 尚不稳定，可能会在后续迭代中发生变化。\"\n\n#: ../../source/models/model_abilities/flexible.rst:15\nmsgid \"Introduction\"\nmsgstr \"介绍\"\n\n#: ../../source/models/model_abilities/flexible.rst:17\nmsgid \"\"\n\"Traditional machine learning models can still play a significant role \"\n\"within an LLM-centric ecosystem.\"\nmsgstr \"\"\n\"传统机器学习模型在以大模型为核心的生态系统中仍然能发挥重要作用。\"\n\n#: ../../source/models/model_abilities/flexible.rst:19\nmsgid \"\"\n\"Xinference provides flexible extensibility for performing inference with \"\n\"traditional machine learning models. It includes built-in support for \"\n\"loading and running the following types of models:\"\nmsgstr \"\"\n\"Xinference 提供了灵活的扩展能力，用于推理传统机器学习模型。它内置支持加载和运行以下类型的模型：\"\n\n#: ../../source/models/model_abilities/flexible.rst:22\nmsgid \"\"\n\"HuggingFace Pipelines for tasks such as classification using models \"\n\"hosted on HuggingFace.\"\nmsgstr \"\"\n\"使用 HuggingFace 托管模型的 HuggingFace Pipeline，可用于分类等任务。\"\n\n#: ../../source/models/model_abilities/flexible.rst:23\nmsgid \"\"\n\"ModelScope Pipelines for tasks such as classification using models from \"\n\"ModelScope.\"\nmsgstr \"\"\n\"使用 ModelScope 上模型的 ModelScope Pipeline，可用于分类等任务。\"\n\n#: ../../source/models/model_abilities/flexible.rst:24\nmsgid \"YOLO for image detection and related computer vision tasks.\"\nmsgstr \"\"\n\"YOLO 用于图像检测及相关计算机视觉任务。\"\n\n#: ../../source/models/model_abilities/flexible.rst:26\nmsgid \"\"\n\"A wide range of traditional machine learning models can be used with \"\n\"Xinference. For each of the categories above, we will walk through a \"\n\"representative example to demonstrate how to perform inference step by \"\n\"step on the Xinference platform.\"\nmsgstr \"\"\n\"Xinference 支持多种传统机器学习模型。针对上述每个类别，我们将通过一个代表性示例，\"\n\"逐步演示如何在 Xinference 平台上进行推理。\"\n\n#: ../../source/models/model_abilities/flexible.rst:31\nmsgid \"Built-in Model Support Examples\"\nmsgstr \"内置模型支持案例\"\n\n#: ../../source/models/model_abilities/flexible.rst:34\nmsgid \"HuggingFace Pipeline Model\"\nmsgstr \"HuggingFace Pipeline 模型\"\n\n#: ../../source/models/model_abilities/flexible.rst:36\nmsgid \"\"\n\"First, we use `FacebookAI/roberta-large-mnli \"\n\"<https://huggingface.co/FacebookAI/roberta-large-mnli>`_ as an example. \"\n\"This is a zero-shot classification model. For other types of models, \"\n\"simply specify the corresponding task (which is also a parameter of the \"\n\"Pipeline) when registering the model.\"\nmsgstr \"\"\n\"首先，我们以 `FacebookAI/roberta-large-mnli <https://huggingface.co/FacebookAI/roberta-large-mnli>`_ 为例。\"\n\"该模型属于零样本分类模型。对于其他类型的模型，注册时只需指定对应的任务（也是 Pipeline 的参数）。\"\n\n#: ../../source/models/model_abilities/flexible.rst:41\nmsgid \"Download the model to the following path::\"\nmsgstr \"将模型下载到以下路径::\"\n\n#: ../../source/models/model_abilities/flexible.rst:45\nmsgid \"\"\n\"Next, we demonstrate how to register this flexible model in the \"\n\"Xinference Web UI. For the following examples, unless we have to, we will\"\n\" skip the UI steps and focus on the core logic.\"\nmsgstr \"接下来，我们演示如何在 Xinference Web UI 中注册该灵活模型。后续示例中，除非必要，我们将跳过界面操作，专注于核心逻辑。\"\n\n#: ../../source/models/model_abilities/flexible.rst:52\nmsgid \"The corresponding custom model JSON file is as follows:\"\nmsgstr \"对应的自定义模型 JSON 文件如下：\"\n\n#: ../../source/models/model_abilities/flexible.rst:77\nmsgid \"\"\n\"Refer to the section :ref:`register_custom_model` for instructions on \"\n\"registering the model using either code or the command line.\"\nmsgstr \"\"\n\"请参见章节 :ref:`register_custom_model`，了解如何通过代码或命令行注册模型。\"\n\n#: ../../source/models/model_abilities/flexible.rst:79\nmsgid \"\"\n\"Next, load the model by selecting **Launch Model** / **Custom Model** / \"\n\"**Flexible Model** in the Web UI. The loading procedure is the same as \"\n\"for other model types.\"\nmsgstr \"\"\n\"接下来，在 Web UI 中选择 **启动模型** / **自定义模型** / **灵活模型** 来加载模型。\"\n\"加载流程与其他模型类型相同。\"\n\n#: ../../source/models/model_abilities/flexible.rst:82\nmsgid \"\"\n\"When using the command line, remember to specify the option ``--model-\"\n\"type flexible``.\"\nmsgstr \"\"\n\"使用命令行时，请记得指定参数 ``--model-type flexible``。\"\n\n#: ../../source/models/model_abilities/flexible.rst:84\nmsgid \"\"\n\"After the model is successfully loaded, we can perform inference using \"\n\"the following method.\"\nmsgstr \"模型成功加载后，我们可以通过以下方式进行推理。\"\n\n#: ../../source/models/model_abilities/flexible.rst:120\nmsgid \"ModelScope Pipeline Model\"\nmsgstr \"ModelScope Pipeline 模型\"\n\n#: ../../source/models/model_abilities/flexible.rst:122\nmsgid \"\"\n\"ModelScope Pipeline models are very similar to Huggingface ones. The only\"\n\" difference lies in the launcher used.\"\nmsgstr \"\"\n\"ModelScope Pipeline 模型与 Huggingface 模型非常相似，唯一的区别在于使用的 launcher 不同。\"\n\n#: ../../source/models/model_abilities/flexible.rst:125\nmsgid \"\"\n\"We take a zero-shot classification model from ModelScope as an example. \"\n\"The model is `iic/nlp_structbert_zero-shot-classification_chinese-base \"\n\"<https://modelscope.cn/models/iic/nlp_structbert_zero-shot-\"\n\"classification_chinese-base>`_.\"\nmsgstr \"\"\n\"我们以 ModelScope 上的一个零样本分类模型为例。模型为 `iic/nlp_structbert_zero-shot-classification_chinese-base \"\n\"<https://modelscope.cn/models/iic/nlp_structbert_zero-shot-classification_chinese-base>`_。\"\n\n#: ../../source/models/model_abilities/flexible.rst:128\nmsgid \"\"\n\"Here, we make use of Xinference's model virtual environment feature. This\"\n\" is because the model used in this example requires \"\n\"``transformers==4.50.3`` to run properly. To isolate the environment, we \"\n\"use a :ref:`virtual env <model_virtual_env>` when registering the model.\"\nmsgstr \"\"\n\"这里我们使用了 Xinference 的模型虚拟环境功能。因为本示例中使用的模型需要 ``transformers==4.50.3`` 才能正常运行。\"\n\"为了隔离运行环境，我们在注册模型时使用了 :ref:`虚拟环境 <model_virtual_env>`。\"\n\n#: ../../source/models/model_abilities/flexible.rst:132\nmsgid \"\"\n\"When specifying custom packages during registration, the syntax is the \"\n\"same as for regular packages, with a few special cases. Since the virtual\"\n\" environment is still based on the site packages of the Python runtime \"\n\"where Xinference is running, we need to explicitly include \"\n\"``#system_numpy#``. Packages wrapped in ``#system_xx#`` ensure consistency \"\n\"with the base environment during virtual environment creation; otherwise,\"\n\" it may easily result in runtime errors.\"\nmsgstr \"\"\n\"注册模型时指定自定义包的语法与普通包相同，但有一些特殊情况。由于虚拟环境仍基于 Xinference 运行的 Python 解释器的\"\n\" site-packages，我们需要显式包含 ``#system_numpy#``。包名用 ``#system_xx#`` 包裹，\"\n\"确保虚拟环境创建时与基础环境一致，否则很容易导致运行时错误。\"\n\n#: ../../source/models/model_abilities/flexible.rst:136\nmsgid \"Registering via Web UI:\"\nmsgstr \"注册方式（Web UI）：\"\n\n#: ../../source/models/model_abilities/flexible.rst:142\nmsgid \"Corresponding json file:\"\nmsgstr \"对应的 JSON 文件：\"\n\n#: ../../source/models/model_abilities/flexible.rst:170\n#: ../../source/models/model_abilities/flexible.rst:241\nmsgid \"Inference the model:\"\nmsgstr \"模型推理：\"\n\n#: ../../source/models/model_abilities/flexible.rst:206\nmsgid \"YOLO\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/flexible.rst:208\nmsgid \"\"\n\"YOLO is a popular real-time object detection model, widely used in image \"\n\"detection and video analysis scenarios.\"\nmsgstr \"YOLO 是一种流行的实时目标检测模型，广泛应用于图像检测和视频分析场景。\"\n\n#: ../../source/models/model_abilities/flexible.rst:210\nmsgid \"\"\n\"First, download the YOLO weights. Here, we use the `yolov11s.pt \"\n\"<https://huggingface.co/Ultralytics/YOLO11>`_ file as an example.\"\nmsgstr \"\"\n\"首先，下载 YOLO 权重。这里我们以 `yolov11s.pt <https://huggingface.co/Ultralytics/YOLO11>`_ 文件为例。\"\n\n#: ../../source/models/model_abilities/flexible.rst:213\nmsgid \"JSON file of model definition:\"\nmsgstr \"\"\n\"模型定义的 JSON 文件：\"\n\n#: ../../source/models/model_abilities/flexible.rst:300\nmsgid \"Writing a Custom Flexible Model\"\nmsgstr \"编写自定义灵活模型\"\n\n#: ../../source/models/model_abilities/flexible.rst:302\nmsgid \"\"\n\"First, we implement a custom launcher with a simple model for sentiment \"\n\"scoring. In this example, we do not use any actual model weights, so the \"\n\"``load`` function does not perform any model loading.\"\nmsgstr \"首先，我们实现了一个用于情感评分的简单自定义 launcher。在此示例中，我们未使用任何实际模型权重，\"\n\"因此 ``load`` 函数不执行任何模型加载操作。\"\n\n#: ../../source/models/model_abilities/flexible.rst:334\nmsgid \"The model JSON definition is as follows:\"\nmsgstr \"模型 JSON 定义如下：\"\n\n#: ../../source/models/model_abilities/flexible.rst:359\nmsgid \"Here, we extend the model by passing in a custom-defined ``pos`` value.\"\nmsgstr \"这里我们通过传入自定义的 ``pos`` 值扩展了模型。\"\n\n#: ../../source/models/model_abilities/flexible.rst:361\nmsgid \"Finally, let's verify the result:\"\nmsgstr \"最后，我们验证下结果：\"\n\n#: ../../source/models/model_abilities/flexible.rst:380\nmsgid \"Conclusion\"\nmsgstr \"结论\"\n\n#: ../../source/models/model_abilities/flexible.rst:382\nmsgid \"\"\n\"The built-in Flexible Model launchers in Xinference can be found at \"\n\"`Github \"\n\"<https://github.com/xorbitsai/inference/tree/main/xinference/model/flexible/launchers>`_.\"\n\" Contributions are welcome to support more traditional machine learning \"\n\"models!\"\nmsgstr \"Xinference 内置的灵活模型 launcher 可以在  \"\n\"`Github <https://github.com/xorbitsai/inference/tree/main/xinference/model/flexible/launchers>`_ 找到，\"\n\"欢迎贡献更多传统机器学习模型的支持！\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/image.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-12-04 17:26+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/model_abilities/image.rst:5\nmsgid \"Images\"\nmsgstr \"图像\"\n\n#: ../../source/models/model_abilities/image.rst:7\nmsgid \"Learn how to generate images with Xinference.\"\nmsgstr \"学习如何使用 Xinference 生成图像。\"\n\n#: ../../source/models/model_abilities/image.rst:11\nmsgid \"Introduction\"\nmsgstr \"介绍\"\n\n#: ../../source/models/model_abilities/image.rst:14\nmsgid \"The Images API provides two methods for interacting with images:\"\nmsgstr \"Images API提供了两种与图像交互的方法：\"\n\n#: ../../source/models/model_abilities/image.rst:17\nmsgid \"\"\n\"The Text-to-image endpoint create images from scratch based on a text \"\n\"prompt.\"\nmsgstr \"文生图端点根据文本从零开始创建图像。\"\n\n#: ../../source/models/model_abilities/image.rst:18\nmsgid \"\"\n\"The Image-to-image endpoint allows you to generate a variation of a given\"\n\" image.\"\nmsgstr \"图生图端点允许您生成给定图像的变体。\"\n\n#: ../../source/models/model_abilities/image.rst:25\nmsgid \"API ENDPOINT\"\nmsgstr \"API 端点\"\n\n#: ../../source/models/model_abilities/image.rst:26\nmsgid \"OpenAI-compatible ENDPOINT\"\nmsgstr \"OpenAI 兼容端点\"\n\n#: ../../source/models/model_abilities/image.rst:28\nmsgid \"Text-to-Image API\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:29\nmsgid \"/v1/images/generations\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:31\nmsgid \"Image-to-image API\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:32\nmsgid \"/v1/images/variations\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:35\nmsgid \"Supported models\"\nmsgstr \"支持的模型列表\"\n\n#: ../../source/models/model_abilities/image.rst:37\nmsgid \"\"\n\"The Text-to-image API is supported with the following models in \"\n\"Xinference:\"\nmsgstr \"Text-to-image API 在 Xinference 中支持以下模型：\"\n\n#: ../../source/models/model_abilities/image.rst:39\nmsgid \"sd-turbo\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:40\nmsgid \"sdxl-turbo\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:41\nmsgid \"stable-diffusion-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:42\nmsgid \"stable-diffusion-xl-base-1.0\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:43\n#: ../../source/models/model_abilities/image.rst:213\nmsgid \"sd3-medium\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:44\n#: ../../source/models/model_abilities/image.rst:215\n#: ../../source/models/model_abilities/image.rst:252\nmsgid \"sd3.5-medium\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:45\n#: ../../source/models/model_abilities/image.rst:217\n#: ../../source/models/model_abilities/image.rst:254\nmsgid \"sd3.5-large\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:46\n#: ../../source/models/model_abilities/image.rst:219\n#: ../../source/models/model_abilities/image.rst:256\nmsgid \"sd3.5-large-turbo\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:47\n#: ../../source/models/model_abilities/image.rst:211\n#: ../../source/models/model_abilities/image.rst:250\nmsgid \"FLUX.1-schnell\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:48\n#: ../../source/models/model_abilities/image.rst:209\n#: ../../source/models/model_abilities/image.rst:248\nmsgid \"FLUX.1-dev\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:49\nmsgid \"Kolors\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:50\nmsgid \"hunyuandit-v1.2\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:51\nmsgid \"hunyuandit-v1.2-distilled\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:52\nmsgid \"cogview4\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:53\n#: ../../source/models/model_abilities/image.rst:221\n#: ../../source/models/model_abilities/image.rst:258\n#: ../../source/models/model_abilities/image.rst:292\nmsgid \"Qwen-Image\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:55\n#, fuzzy\nmsgid \"Image-to-image supported models:\"\nmsgstr \"支持的模型列表\"\n\n#: ../../source/models/model_abilities/image.rst:57\nmsgid \"Flux.1-Kontext-dev\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:58\n#: ../../source/models/model_abilities/image.rst:223\n#: ../../source/models/model_abilities/image.rst:260\n#: ../../source/models/model_abilities/image.rst:294\nmsgid \"Qwen-Image-Edit\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:62\nmsgid \"Quickstart\"\nmsgstr \"快速入门\"\n\n#: ../../source/models/model_abilities/image.rst:65\nmsgid \"Text-to-image\"\nmsgstr \"文生图\"\n\n#: ../../source/models/model_abilities/image.rst:67\nmsgid \"\"\n\"The Text-to-image API mimics OpenAI's `create images API \"\n\"<https://platform.openai.com/docs/api-reference/images/create>`_. We can \"\n\"try Text-to-image API out either via cURL, OpenAI Client, or Xinference's\"\n\" python client:\"\nmsgstr \"\"\n\"可以通过 cURL、OpenAI Client 或 Xinference 的方式尝试使用 Text-to-image \"\n\"API。\"\n\n#: ../../source/models/model_abilities/image.rst:121\nmsgid \"Image-to-image\"\nmsgstr \"图生图\"\n\n#: ../../source/models/model_abilities/image.rst:123\nmsgid \"\"\n\"The Image-to-image API mimics OpenAI's `create image variation API \"\n\"<https://platform.openai.com/docs/api-\"\n\"reference/images/createVariation>`_. We can try image-to-image API out \"\n\"either via cURL, OpenAI Client, or Xinference's python client:\"\nmsgstr \"\"\n\"图生图 API 模拟了 OpenAI 的 `图像变体创建 API <https://platform.openai.\"\n\"com/docs/api-reference/images/createVariation>`_。我们可以通过 cURL、\"\n\"OpenAI 客户端，或 Xinference 的 Python 客户端来尝试使用图生图 API：\"\n\n#: ../../source/models/model_abilities/image.rst:176\nmsgid \"Memory optimization for Large Image Models e.g. SD3-Medium, FLUX.1\"\nmsgstr \"大型图像模型（例如 SD3-Medium、FLUX.1）的内存优化\"\n\n#: ../../source/models/model_abilities/image.rst:180\nmsgid \"\"\n\"From v0.16.1, Xinference by default enabled quantization for large image \"\n\"models like Flux.1 and SD3.5 series. So if your Xinference version is \"\n\"newer than v0.16.1, You barely need to do anything to run those large \"\n\"image models on GPUs with small memory.\"\nmsgstr \"\"\n\"从 v0.16.1 开始，Xinference 默认对大图像模型如 Flux.1 和 SD3.5 系列开启\"\n\"量化。如果你使用新于 v0.16.1 的 Xinference 版本，你不需要做什么事情来在小\"\n\" GPU 显存的机器上来运行这些大型图像模型。\"\n\n#: ../../source/models/model_abilities/image.rst:185\nmsgid \"Useful extra parameters can be passed to launch including:\"\nmsgstr \"有用的传递给加载模型的额外参数包括：\"\n\n#: ../../source/models/model_abilities/image.rst:187\nmsgid \"\"\n\"``--cpu_offload True``: specifying ``True`` will offload the components \"\n\"of the model to CPU during inference in order to save memory, while \"\n\"seeing a slight increase in inference latency. Model offloading will only\"\n\" move a model component onto the GPU when it needs to be executed, while \"\n\"keeping the remaining components on the CPU.\"\nmsgstr \"\"\n\"``--cpu_offload True``：指定 ``True`` 会在推理过程中将模型的组件卸载到 \"\n\"CPU 上以节省内存，这会导致推理延迟略有增加。模型卸载仅会在需要执行时将\"\n\"模型组件移动到 GPU 上，同时保持其余组件在 CPU 上\"\n\n#: ../../source/models/model_abilities/image.rst:191\nmsgid \"\"\n\"``--quantize_text_encoder <text encoder layer>``: We leveraged the \"\n\"``bitsandbytes`` library to load and quantize the T5-XXL text encoder to \"\n\"8-bit precision. This allows you to keep using all text encoders while \"\n\"only slightly impacting performance.\"\nmsgstr \"\"\n\"``--quantize_text_encoder <text encoder layer>``：我们利用 ``bitsandbytes\"\n\"`` 库加载并量化 T5-XXL 文本编码器至8位精度。这使得你能够在仅轻微影响性能\"\n\"的情况下继续使用全部文本编码器。\"\n\n#: ../../source/models/model_abilities/image.rst:194\nmsgid \"\"\n\"``--text_encoder_3 None``, for sd3-medium, removing the memory-intensive \"\n\"4.7B parameter T5-XXL text encoder during inference can significantly \"\n\"decrease the memory requirements with only a slight loss in performance.\"\nmsgstr \"\"\n\"``--text_encoder_3 None``，对于 sd3-medium，移除在推理过程中内存密集型的\"\n\"47亿参数T5-XXL文本编码器可以显著降低内存需求，而仅造成性能上的轻微损失。\"\n\n#: ../../source/models/model_abilities/image.rst:197\nmsgid \"``--transformer_nf4 True``: use nf4 for transformer quantization.\"\nmsgstr \"``--transformer_nf4 True`` ：使用 nf4 量化 transformer。\"\n\n#: ../../source/models/model_abilities/image.rst:198\nmsgid \"\"\n\"``--quantize``: Only work for MLX on Mac, Flux.1-dev and Flux.1-schnell \"\n\"will switch to MLX engine on Mac, and ``quantize`` can be used to \"\n\"quantize the model.\"\nmsgstr \"\"\n\"``--quantize`` ：只对 Mac 上的 MLX 引擎生效，Flux.1-dev 和 Flux.1-schnell\"\n\"会在 Mac 上使用 MLX 引擎计算，``quantize`` 可以用来量化模型。\"\n\n#: ../../source/models/model_abilities/image.rst:201\nmsgid \"\"\n\"For WebUI, Just add additional parameters, e.g. add key ``cpu_offload`` \"\n\"and value ``True`` to enable cpu offloading.\"\nmsgstr \"\"\n\"对于 WebUI，只需要添加额外参数，比如，添加 key ``cpu_offload`` 以及值 ``\"\n\"True`` 来开启 CPU 卸载。\"\n\n#: ../../source/models/model_abilities/image.rst:204\nmsgid \"Below list default options that used from v0.16.1.\"\nmsgstr \"如下列出了从 v0.16.1 开始默认使用的参数。\"\n\n#: ../../source/models/model_abilities/image.rst:207\n#: ../../source/models/model_abilities/image.rst:246\n#: ../../source/models/model_abilities/image.rst:290\nmsgid \"Model\"\nmsgstr \"模型\"\n\n#: ../../source/models/model_abilities/image.rst:207\nmsgid \"quantize_text_encoder\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:207\nmsgid \"quantize\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:207\nmsgid \"transformer_nf4\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:209\n#: ../../source/models/model_abilities/image.rst:211\nmsgid \"text_encoder_2\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:209\n#: ../../source/models/model_abilities/image.rst:211\n#: ../../source/models/model_abilities/image.rst:217\n#: ../../source/models/model_abilities/image.rst:219\nmsgid \"True\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:209\n#: ../../source/models/model_abilities/image.rst:211\n#: ../../source/models/model_abilities/image.rst:213\n#: ../../source/models/model_abilities/image.rst:215\n#: ../../source/models/model_abilities/image.rst:221\n#: ../../source/models/model_abilities/image.rst:223\nmsgid \"False\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:213\n#: ../../source/models/model_abilities/image.rst:215\n#: ../../source/models/model_abilities/image.rst:217\n#: ../../source/models/model_abilities/image.rst:219\nmsgid \"text_encoder_3\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:213\n#: ../../source/models/model_abilities/image.rst:215\n#: ../../source/models/model_abilities/image.rst:217\n#: ../../source/models/model_abilities/image.rst:219\n#: ../../source/models/model_abilities/image.rst:221\n#: ../../source/models/model_abilities/image.rst:223\nmsgid \"N/A\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:221\n#: ../../source/models/model_abilities/image.rst:223\nmsgid \"text_encoder\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:228\nmsgid \"\"\n\"If you want to disable some quantization, just set the corresponding \"\n\"option to False. e.g. for Web UI, set key ``quantize_text_encoder`` and \"\n\"value ``False`` and for command line, specify ``--quantize_text_encoder \"\n\"False`` to disable quantization for text encoder.\"\nmsgstr \"\"\n\"如果你想关闭某些量化，只需要设置相应的选项为 False。比如，对于 Web UI，\"\n\"设置 key ``quantize_text_encoder`` 和值 ``False``，或对于命令行，指定 ``\"\n\"--quantize_text_encoder False`` 来关闭 text encoder 的量化。\"\n\n#: ../../source/models/model_abilities/image.rst:233\nmsgid \"\"\n\"For :ref:`CogView4 <models_builtin_cogview4>`, we found that quantization\"\n\" has a significant impact on the model. Therefore, when GPU memory is \"\n\"limited, we recommend enabling the CPU offload option in the Web UI, and \"\n\"specifying ``--cpu_offload True`` when loading the model via the command \"\n\"line.\"\nmsgstr \"\"\n\"对于 :ref:`CogView4 <models_builtin_cogview4>`，我们发现量化对模型的影响\"\n\"较大。因此，当显存有限时，我们推荐在 Web UI 中启用 CPU offload 选项，在\"\n\"命令行加载模型时指定 ``--cpu_offload True``。\"\n\n#: ../../source/models/model_abilities/image.rst:238\nmsgid \"GGUF file format\"\nmsgstr \"GGUF 文件格式\"\n\n#: ../../source/models/model_abilities/image.rst:240\nmsgid \"\"\n\"GGUF file format for transformer provides various quantization options. \"\n\"To use gguf file, you can specify additional option ``gguf_quantization``\"\n\" for web UI, or ``--gguf_quantization`` for command line for those image \"\n\"models which support internally by Xinference. Below is the mode list.\"\nmsgstr \"\"\n\"GGUF 文件格式为 transformer 模块提供了丰富的量化选项。要使用 GGUF 文件，\"\n\"你可以在 Web 界面上指定额外选项 ``gguf_quantization`` ，或者在命令行指定 \"\n\"``--gguf_quantization`` ，以为 Xinference 内建支持 GGUF 量化的模型开启。\"\n\"如下是内置支持的模型。\"\n\n#: ../../source/models/model_abilities/image.rst:246\nmsgid \"supported gguf quantization\"\nmsgstr \"支持 GGUF 量化格式\"\n\n#: ../../source/models/model_abilities/image.rst:248\n#: ../../source/models/model_abilities/image.rst:250\nmsgid \"F16, Q2_K, Q3_K_S, Q4_0, Q4_1, Q4_K_S, Q5_0, Q5_1, Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:252\n#: ../../source/models/model_abilities/image.rst:258\nmsgid \"\"\n\"F16, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, \"\n\"Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:254\n#: ../../source/models/model_abilities/image.rst:256\nmsgid \"F16, Q4_0, Q4_1, Q5_0, Q5_1, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:260\n#: ../../source/models/model_abilities/image.rst:262\nmsgid \"\"\n\"Q2_K, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, \"\n\"Q5_K_S, Q6_K, Q8_0\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:262\n#: ../../source/models/model_abilities/image.rst:296\nmsgid \"Qwen-Image-Edit-2509\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:267\nmsgid \"\"\n\"We stronly recommend to enable additional option ``cpu_offload`` with \"\n\"value ``True`` for WebUI, or specify ``--cpu_offload True`` for command \"\n\"line.\"\nmsgstr \"\"\n\"我们强烈推荐在 WebUI 上开启额外选项 ``cpu_offload`` 并指定为 ``True``，或\"\n\"对命令行，指定 ``--cpu_offload True``。\"\n\n#: ../../source/models/model_abilities/image.rst:270\nmsgid \"Example:\"\nmsgstr \"例如：\"\n\n#: ../../source/models/model_abilities/image.rst:276\nmsgid \"\"\n\"With ``Q2_K`` quantization, you only need around 5 GiB GPU memory to run \"\n\"Flux.1-dev.\"\nmsgstr \"使用 ``Q2_K`` 量化，你只需要大约 5GB 的显存来运行 Flux.1-dev。\"\n\n#: ../../source/models/model_abilities/image.rst:278\nmsgid \"\"\n\"For those models gguf options are not supported internally, or you want \"\n\"to download gguf files on you own, you can specify additional option \"\n\"``gguf_model_path`` for web UI or spcecify ``--gguf_model_path \"\n\"/path/to/model_quant.gguf`` for command line.\"\nmsgstr \"\"\n\"对于非内建支持 GGUF 量化的模型，或者你希望自己下载 GGUF 文件，你可以在 \"\n\"Web UI 指定额外选项 ``gguf_model_path`` 或者用命令行指定 ``--gguf_model_\"\n\"path /path/to/model_quant.gguf`` 。\"\n\n#: ../../source/models/model_abilities/image.rst:283\nmsgid \"Lightning LORA Support\"\nmsgstr \"Lightning LORA 支持\"\n\n#: ../../source/models/model_abilities/image.rst:285\nmsgid \"\"\n\"Lightning LORA performs distillation on models in the form of LoRA, \"\n\"reducing the number of inference steps while maintaining model \"\n\"performance, and significantly speeding up inference. The following \"\n\"models currently support this LoRA:\"\nmsgstr \"\"\n\"Lightning LORA 以 LoRA 的形式对模型进行蒸馏，在保持模型性能的同时减少推理\"\n\"步数，并大幅提升推理速度。以下模型目前支持该 LoRA：\"\n\n#: ../../source/models/model_abilities/image.rst:290\nmsgid \"Supported lightning version\"\nmsgstr \"支持的 Lightning 版本\"\n\n#: ../../source/models/model_abilities/image.rst:292\nmsgid \"4steps-V1.0-bf16, 4steps-V1.0, 8steps-V1.0, 8steps-V1.1-bf16, 8steps-V1.1\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:294\nmsgid \"4steps-V1.0-bf16, 4steps-V1.0, 8steps-V1.0-bf16, 8steps-V1.0\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:296\nmsgid \"4steps-V1.0-bf16, 4steps-V1.0-fp32, 8steps-V1.0-bf16, 8steps-V1.0-fp32\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:299\nmsgid \"\"\n\"4 steps or 8 steps refer to the inference steps \"\n\"(``num_inference_steps``). When ``lightning_version`` is specified, \"\n\"Xinference will automatically set the number of inference steps.\"\nmsgstr \"\"\n\"4 步或 8 步是指推理步数（ ``num_inference_steps`` ）。当指定了 ``\"\n\"lightning_version`` 时，Xinference 会自动设定推理步数。\"\n\n#: ../../source/models/model_abilities/image.rst:302\nmsgid \"\"\n\"When using it, select the lightning version in the interface, or specify \"\n\"it via the command line.\"\nmsgstr \"使用时，可以在界面上选择 lightning 版本，或者通过命令行指定。\"\n\n#: ../../source/models/model_abilities/image.rst:308\nmsgid \"Use the command line with ``--lightning_version <version>``.\"\nmsgstr \"在命令行中使用 ``--lightning_version <version>``。\"\n\n#: ../../source/models/model_abilities/image.rst:310\nmsgid \"\"\n\"For those who have downloaded the lightning LoRA files themselves, you \"\n\"can specify them via the Lightning Model Path in the interface or by \"\n\"using the command line option ``--lightning_model_path``.\"\nmsgstr \"\"\n\"对于自行下载了 lightning LoRA 文件的用户，可以在界面上通过 Lightning \"\n\"Model Path 指定，或者使用命令行参数 ``--lightning_model_path`` 。\"\n\n#: ../../source/models/model_abilities/image.rst:313\nmsgid \"\"\n\"For example, using ``4steps-V1.0``, the inference time is reduced from \"\n\"the original 34s to 3s.\"\nmsgstr \"例如，使用 ``4steps-V1.0`` 时，推理时间从原来的 34 秒减少到 3 秒。\"\n\n#: ../../source/models/model_abilities/image.rst:316\nmsgid \"OCR\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/image.rst:318\nmsgid \"The OCR API accepts image bytes and returns the OCR text.\"\nmsgstr \"OCR API 接受图像字节并返回 OCR 文本。\"\n\n#: ../../source/models/model_abilities/image.rst:320\nmsgid \"We can try OCR API out either via cURL, or Xinference's python client:\"\nmsgstr \"可以通过 cURL 或 Xinference 的 Python 客户端来尝试 OCR API。\"\n\n#~ msgid \"You can find more examples of Images API in the tutorial notebook:\"\n#~ msgstr \"你可以在教程笔记本中找到更多 Images API 的示例。\"\n\n#~ msgid \"Stable Diffusion ControlNet\"\n#~ msgstr \"\"\n\n#~ msgid \"Learn from a Stable Diffusion ControlNet example\"\n#~ msgstr \"学习一个 Stable Diffusion 控制网络的示例\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-02-01 16:47+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.13.1\\n\"\n\n#: ../../source/models/model_abilities/index.rst:5\nmsgid \"Model Abilities\"\nmsgstr \"模型能力\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/multimodal.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-08-25 03:59+0000\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/model_abilities/multimodal.rst:5\nmsgid \"Multimodal\"\nmsgstr \"多模态\"\n\n#: ../../source/models/model_abilities/multimodal.rst:7\nmsgid \"Learn how to process images and audio with LLMs.\"\nmsgstr \"学习如何使用 LLM 处理图像和音频。\"\n\n#: ../../source/models/model_abilities/multimodal.rst:11\nmsgid \"Vision\"\nmsgstr \"视觉\"\n\n#: ../../source/models/model_abilities/multimodal.rst:13\nmsgid \"\"\n\"With the ``vision`` ability you can have your model take in images and \"\n\"answer questions about them. Within Xinference, this indicates that \"\n\"certain models are capable of processing image inputs when conducting \"\n\"dialogues via the Chat API.\"\nmsgstr \"\"\n\"通过 ``vision`` 能力，您可以让模型接收图像并回答有关它们的问题。在 Xinference 中，这表示某些模型在通过 Chat API \"\n\"进行对话时能够处理图像输入。\"\n\n#: ../../source/models/model_abilities/multimodal.rst:19\n#: ../../source/models/model_abilities/multimodal.rst:190\nmsgid \"Supported models\"\nmsgstr \"支持的模型列表\"\n\n#: ../../source/models/model_abilities/multimodal.rst:21\nmsgid \"\"\n\"The ``vision`` ability is supported with the following models in \"\n\"Xinference:\"\nmsgstr \"在 Xinference 中支持 ``vision`` 功能的模型如下：\"\n\n#: ../../source/models/model_abilities/multimodal.rst:23\nmsgid \":ref:`qwen-vl-chat <models_llm_qwen-vl-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:24\nmsgid \":ref:`deepseek-vl-chat <models_llm_deepseek-vl-chat>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:25\nmsgid \":ref:`omnilmm <models_llm_omnilmm>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:26\nmsgid \":ref:`cogvlm2 <models_llm_cogvlm2>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:27\nmsgid \":ref:`MiniCPM-Llama3-V 2.5 <models_llm_minicpm-llama3-v-2_5>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:28\nmsgid \":ref:`GLM-4V <models_llm_glm-4v>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:29\nmsgid \":ref:`MiniCPM-Llama3-V 2.6 <models_llm_minicpm-v-2.6>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:30\nmsgid \":ref:`qwen2-vl-instruct <models_llm_qwen2-vl-instruct>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:31\nmsgid \":ref:`llama-3.2-vision <models_llm_llama-3.2-vision>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:32\nmsgid \":ref:`llama-3.2-vision-instruct <models_llm_llama-3.2-vision-instruct>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:33\nmsgid \":ref:`glm-edge-v <models_llm_glm-edge-v>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:34\nmsgid \":ref:`qwen2.5-vl-instruct <models_llm_qwen2.5-vl-instruct>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:35\nmsgid \":ref:`gemma-3-it <models_llm_gemma-3-it>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:36\nmsgid \":ref:`deepseek-vl2 <models_llm_deepseek-vl2>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:37\nmsgid \":ref:`internvl3 <models_llm_internvl3>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:41\n#: ../../source/models/model_abilities/multimodal.rst:197\nmsgid \"Quickstart\"\nmsgstr \"快速入门\"\n\n#: ../../source/models/model_abilities/multimodal.rst:43\nmsgid \"\"\n\"Images are made available to the model in two main ways: by passing a \"\n\"link to the image or by passing the base64 encoded image directly in the \"\n\"request.\"\nmsgstr \"模型可以通过两种主要方式获取图像：通过传递图像的链接或直接在请求中传递 base64 编码的图像。\"\n\n#: ../../source/models/model_abilities/multimodal.rst:47\nmsgid \"Example using OpenAI Client\"\nmsgstr \"使用 OpenAI 客户端的示例\"\n\n#: ../../source/models/model_abilities/multimodal.rst:78\nmsgid \"Uploading base 64 encoded images\"\nmsgstr \"上传 Base64 编码的图片\"\n\n#: ../../source/models/model_abilities/multimodal.rst:121\nmsgid \"Limiting Images Per Prompt\"\nmsgstr \"限制每轮对话中的图像数量\"\n\n#: ../../source/models/model_abilities/multimodal.rst:123\nmsgid \"\"\n\"For vision models using the VLLM backend, you can use the \"\n\"``limit_mm_per_prompt`` parameter to limit the number of images that can \"\n\"be processed in each conversation turn. This helps control memory usage \"\n\"and improve performance.\"\nmsgstr \"\"\n\"对于使用 VLLM 后端的视觉模型，你可以通过 ``limit_mm_per_prompt`` \"\n\"参数来限制每轮对话中可以处理的图像数量。这有助于控制内存使用和提高性能。\"\n\n#: ../../source/models/model_abilities/multimodal.rst:142\nmsgid \"Alternatively, you can launch the model using the command line:\"\nmsgstr \"或者，你可以使用命令行启动模型：\"\n\n#: ../../source/models/model_abilities/multimodal.rst:155\nmsgid \"\"\n\"For Web UI, you can set the ``limit_mm_per_prompt`` parameter in the \"\n\"launch form:\"\nmsgstr \"对于 Web UI，你可以在vLLM引擎表单中设置 ``limit_mm_per_prompt`` 参数：\"\n\n#: ../../source/models/model_abilities/multimodal.rst:161\nmsgid \"This parameter provides the following benefits:\"\nmsgstr \"此参数提供以下好处：\"\n\n#: ../../source/models/model_abilities/multimodal.rst:163\nmsgid \"**image**: Sets the maximum number of images allowed per conversation turn\"\nmsgstr \"**image**: 设置每轮对话中允许的最大图像数量\"\n\n#: ../../source/models/model_abilities/multimodal.rst:164\nmsgid \"Helps prevent memory overflow, especially when processing multiple images\"\nmsgstr \"有助于防止内存溢出，特别是在处理多张图像时\"\n\n#: ../../source/models/model_abilities/multimodal.rst:165\nmsgid \"Improves model inference stability and performance\"\nmsgstr \"提高模型推理的稳定性和性能\"\n\n#: ../../source/models/model_abilities/multimodal.rst:166\nmsgid \"Applies to all VLLM-based vision models\"\nmsgstr \"适用于所有基于 VLLM 的视觉模型\"\n\n#: ../../source/models/model_abilities/multimodal.rst:169\nmsgid \"\"\n\"The ``limit_mm_per_prompt`` parameter only takes effect when using the \"\n\"VLLM backend. If your model uses other backends, this parameter will be \"\n\"ignored.\"\nmsgstr \"``limit_mm_per_prompt`` 参数仅在使用 VLLM 后端时生效。如果你的模型使用其他后端，此参数将被忽略。\"\n\n#: ../../source/models/model_abilities/multimodal.rst:171\nmsgid \"You can find more examples of ``vision`` ability in the tutorial notebook:\"\nmsgstr \"你可以在教程笔记本中找到更多关于 ``vision`` 能力的示例。\"\n\n#: ../../source/models/model_abilities/multimodal.rst:175\nmsgid \"Qwen VL Chat\"\nmsgstr \"Qwen VL Chat\"\n\n#: ../../source/models/model_abilities/multimodal.rst:178\nmsgid \"Learn vision ability from a example using qwen-vl-chat\"\nmsgstr \"通过使用 qwen-vl-chat 的示例来学习使用 LLM 的视觉能力\"\n\n#: ../../source/models/model_abilities/multimodal.rst:182\nmsgid \"Audio\"\nmsgstr \"音频\"\n\n#: ../../source/models/model_abilities/multimodal.rst:184\nmsgid \"\"\n\"With the ``audio`` ability you can have your model take in audio and \"\n\"performing audio analysis or direct textual responses with regard to \"\n\"speech instructions. Within Xinference, this indicates that certain \"\n\"models are capable of processing audio inputs when conducting dialogues \"\n\"via the Chat API.\"\nmsgstr \"\"\n\"通过“音频”功能，您的模型可以接收音频并执行音频分析或根据语音指令直接生成文本响应。在 Xinference 中，这表示某些模型在通过 Chat \"\n\"API 进行对话时能够处理音频输入。\"\n\n#: ../../source/models/model_abilities/multimodal.rst:192\nmsgid \"\"\n\"The ``audio`` ability is supported with the following models in \"\n\"Xinference:\"\nmsgstr \"“音频”功能在 Xinference 中支持以下模型：\"\n\n#: ../../source/models/model_abilities/multimodal.rst:194\nmsgid \":ref:`qwen2-audio-instruct <models_llm_qwen2-audio-instruct>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/multimodal.rst:199\nmsgid \"\"\n\"Audios are made available to the model in two main ways: by passing a \"\n\"link to the image or by passing the audio url directly in the request.\"\nmsgstr \"音频可以通过两种主要方式提供给模型：通过传递图像链接或在请求中直接传递音频 URL。\"\n\n#: ../../source/models/model_abilities/multimodal.rst:204\nmsgid \"Chat with audio\"\nmsgstr \"带有音频的聊天\"\n\n#~ msgid \":ref:`yi-vl-chat <models_llm_yi-vl-chat>`\"\n#~ msgstr \"\"\n\n#~ msgid \":ref:`internvl-chat <models_llm_internvl-chat>`\"\n#~ msgstr \"\"\n\n#~ msgid \":ref:`internvl2 <models_llm_internvl2>`\"\n#~ msgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/rerank.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-02-01 16:47+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.13.1\\n\"\n\n#: ../../source/models/model_abilities/rerank.rst:5\nmsgid \"Rerank\"\nmsgstr \"重排序\"\n\n#: ../../source/models/model_abilities/rerank.rst:7\nmsgid \"Learn how to use rerank models in Xinference.\"\nmsgstr \"学习如何在Xinference中使用重新排序模型。\"\n\n#: ../../source/models/model_abilities/rerank.rst:11\nmsgid \"Introduction\"\nmsgstr \"介绍\"\n\n#: ../../source/models/model_abilities/rerank.rst:13\nmsgid \"\"\n\"Given a query and a list of documents, Rerank indexes the documents from \"\n\"most to least semantically relevant to the query. Rerank models in \"\n\"Xinference can be invoked through the Rerank endpoint to rank a list of \"\n\"documents.\"\nmsgstr \"给定一个查询和一系列文档，Rerank 会根据与查询的语义相关性从最相关到最不相关对文档进行重新排序。\"\n\"在 Xinference 中，可以通过 Rerank 端点调用 Rerank 模型来对一系列文档进行排序。\"\n\n#: ../../source/models/model_abilities/rerank.rst:18\nmsgid \"Quickstart\"\nmsgstr \"快速入门\"\n\n#: ../../source/models/model_abilities/rerank.rst:20\nmsgid \"\"\n\"We can try Rerank API out either via cURL, OpenAI Client, or Xinference's\"\n\" python client:\"\nmsgstr \"我们可以通过cURL、OpenAI Client或Xinference的来尝试使用Rerank API：\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/tools.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-09-05 16:44+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/model_abilities/tools.rst:5\nmsgid \"Tools\"\nmsgstr \"工具\"\n\n#: ../../source/models/model_abilities/tools.rst:7\nmsgid \"Learn how to connect LLM with external tools.\"\nmsgstr \"学习如何将 LLM 与外部工具连接起来。\"\n\n#: ../../source/models/model_abilities/tools.rst:11\nmsgid \"Introduction\"\nmsgstr \"介绍\"\n\n#: ../../source/models/model_abilities/tools.rst:13\nmsgid \"With the ``tools`` ability you can have your model use external tools.\"\nmsgstr \"通过 ``tools`` 功能，您可以让您的模型使用外部工具。\"\n\n#: ../../source/models/model_abilities/tools.rst:16\nmsgid \"\"\n\"Like `OpenAI's Function calling API \"\n\"<https://platform.openai.com/docs/guides/function-calling>`_, you can \"\n\"define the functions along with their parameters and have the model \"\n\"dynamically choose which function to call and what parameters to pass to \"\n\"it.\"\nmsgstr \"\"\n\"就像 `OpenAI 的 Function calling API \"\n\"<https://platform.openai.com/docs/guides/function-calling>`_ \"\n\"一样，你可以定义带有参数的函数，并让模型动态选择要调用哪个函数以及传递给它什么参数。\"\n\n#: ../../source/models/model_abilities/tools.rst:19\nmsgid \"This is the general process for calling a function:\"\nmsgstr \"这是调用函数的一般过程：\"\n\n#: ../../source/models/model_abilities/tools.rst:21\nmsgid \"\"\n\"You submit a query, detailing the functions, their parameters, and \"\n\"descriptions.\"\nmsgstr \"您提交一个查询，详细说明函数、它们的参数和描述。\"\n\n#: ../../source/models/model_abilities/tools.rst:22\nmsgid \"\"\n\"The LLM decides whether to initiate the function. If chosen not to, it \"\n\"replies in everyday language, either offering a solution based on its \"\n\"inherent understanding or asking further details about the query and tool\"\n\" usage. On deciding to use a tool, it recommends the suitable API and \"\n\"instructions for its usage, framed in JSON.\"\nmsgstr \"\"\n\"LLM \"\n\"决定是否启动功能。如果选择不启动，它会用日常语言回复，要么基于其内在理解提供解决方案，要么询问有关查询和工具使用的进一步细节。在决定使用工具时，它会推荐适合的\"\n\" API 和 JSON 格式的使用说明。\"\n\n#: ../../source/models/model_abilities/tools.rst:25\nmsgid \"\"\n\"Following that, you implement the API call within your application and \"\n\"send the returned response back to the LLM for result analysis and \"\n\"proceeding with the next steps.\"\nmsgstr \"接下来，你在应用程序中实现 API 调用，并将返回的响应发送回 LLM 进行结果分析，并继续执行下一步操作。\"\n\n#: ../../source/models/model_abilities/tools.rst:28\nmsgid \"\"\n\"There is no dedicated API endpoint implemented for ``tools`` ability. It \"\n\"must be used in combination with Chat API.\"\nmsgstr \"目前没有为 ``tools`` 功能实现专用的 API 端点。它必须与 Chat API 结合使用。\"\n\n#: ../../source/models/model_abilities/tools.rst:31\nmsgid \"Supported models\"\nmsgstr \"支持的模型列表\"\n\n#: ../../source/models/model_abilities/tools.rst:33\nmsgid \"\"\n\"The ``tools`` ability is supported with the following models in \"\n\"Xinference:\"\nmsgstr \"Xinference 支持以下模型使用 ``tools`` 功能：\"\n\n#: ../../source/models/model_abilities/tools.rst:35\nmsgid \":ref:`models_llm_glm4-chat`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:36\nmsgid \":ref:`models_llm_glm4-chat-1m`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:37\nmsgid \":ref:`models_llm_llama-3.1-instruct`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:38\nmsgid \":ref:`models_llm_llama-3.3-instruct`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:39\nmsgid \":ref:`models_llm_qwen1.5-chat`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:40\nmsgid \":ref:`models_llm_qwen1.5-moe-chat`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:41\nmsgid \":ref:`models_llm_qwen2-instruct`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:42\nmsgid \":ref:`models_llm_qwen2-moe-instruct`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:43\nmsgid \":ref:`models_llm_qwen2.5-instruct`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:44\nmsgid \":ref:`models_llm_qwen2.5-coder-instruct`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:45\nmsgid \":ref:`models_llm_qwq-32b`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:46\nmsgid \":ref:`models_llm_qwen3`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:47\nmsgid \":ref:`models_llm_qwen3-instruct`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:48\nmsgid \":ref:`models_llm_qwen3-coder`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:49\nmsgid \":ref:`models_llm_deepseek-v3`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:50\nmsgid \":ref:`models_llm_deepseek-r1-0528`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/tools.rst:53\nmsgid \"Quickstart\"\nmsgstr \"快速入门\"\n\n#: ../../source/models/model_abilities/tools.rst:55\nmsgid \"\"\n\"An optional parameter ``tools`` in the Chat API can be used to provide \"\n\"function specifications. The purpose of this is to enable models to \"\n\"generate function arguments which adhere to the provided specifications.\"\nmsgstr \"Chat API 中的可选参数 ``tools`` 可以用于提供函数规范。其目的是使模型能够生成符合所提供规范的函数参数。\"\n\n#: ../../source/models/model_abilities/tools.rst:59\nmsgid \"Example using OpenAI Client\"\nmsgstr \"使用 OpenAI 客户端的示例\"\n\n#: ../../source/models/model_abilities/tools.rst:108\n#: ../../source/models/model_abilities/tools.rst:171\nmsgid \"The output will be:\"\nmsgstr \"输出结果是：\"\n\n#: ../../source/models/model_abilities/tools.rst:126\n#, fuzzy\nmsgid \"Example using Anthropic Client\"\nmsgstr \"使用 Anthropic 客户端的示例\"\n\n#: ../../source/models/model_abilities/tools.rst:191\nmsgid \"\"\n\"Finish reason will be ``tool_calls`` if the LLM uses a tool call. \"\n\"Othewise it will be the default finish reason.\"\nmsgstr \"如果 LLM 使用了工具调用，完成原因将是 ``tool_calls`` 。否则，它将是默认的完成原因。\"\n\n#: ../../source/models/model_abilities/tools.rst:196\nmsgid \"\"\n\"The API will not actually execute any function calls. It is up to \"\n\"developers to execute function calls using model outputs.\"\nmsgstr \"API 本身不会执行任何函数调用。开发者需要使用模型输出来执行函数调用。\"\n\n#: ../../source/models/model_abilities/tools.rst:200\nmsgid \"You can find more examples of ``tools`` ability in the tutorial notebook:\"\nmsgstr \"你可以在教程笔记本中找到更多关于 ``tools`` 能力的示例。\"\n\n#: ../../source/models/model_abilities/tools.rst:204\nmsgid \"Function calling\"\nmsgstr \"函数调用\"\n\n#: ../../source/models/model_abilities/tools.rst:207\nmsgid \"Learn from a complete example demonstrating function calling\"\nmsgstr \"学习一个完整的示例，演示函数调用的过程。\"\n\n#~ msgid \":ref:`models_llm_qwen-chat`\"\n#~ msgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_abilities/video.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-06-01 16:29+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/model_abilities/video.rst:5\nmsgid \"Video (Experimental)\"\nmsgstr \"视频（实验性质）\"\n\n#: ../../source/models/model_abilities/video.rst:7\nmsgid \"Learn how to generate videos with Xinference.\"\nmsgstr \"学习如何使用 Xinference 生成视频\"\n\n#: ../../source/models/model_abilities/video.rst:11\nmsgid \"Introduction\"\nmsgstr \"介绍\"\n\n#: ../../source/models/model_abilities/video.rst:14\nmsgid \"The Video API provides the ability to interact with videos:\"\nmsgstr \"Video API 提供了和视频交互的方式：\"\n\n#: ../../source/models/model_abilities/video.rst:17\nmsgid \"\"\n\"The text-to-video endpoint create videos from scratch based on a text \"\n\"prompt.\"\nmsgstr \"Text-to-video 端点将一段文本提示词从头开始创建视频\"\n\n#: ../../source/models/model_abilities/video.rst:18\nmsgid \"\"\n\"The image-to-video endpoint create videos from scratch based on an input \"\n\"image.\"\nmsgstr \"Image-to-video 端点将一张图片从头开始创建视频\"\n\n#: ../../source/models/model_abilities/video.rst:19\nmsgid \"\"\n\"The firstlastframe-to-video endpoint creates videos based on the \"\n\"transition between a first and a last frame.\"\nmsgstr \"firstlastframe-to-video 接口根据首帧和尾帧之间的过渡生成视频。\"\n\n#: ../../source/models/model_abilities/video.rst:39\nmsgid \"Supported models\"\nmsgstr \"支持的模型列表\"\n\n#: ../../source/models/model_abilities/video.rst:41\nmsgid \"\"\n\"The text-to-video API is supported with the following models in \"\n\"Xinference:\"\nmsgstr \"Text-to-video API 在 Xinference 中支持以下模型：\"\n\n#: ../../source/models/model_abilities/video.rst:43\nmsgid \":ref:`CogVideoX-2b <models_builtin_cogvideox-2b>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/video.rst:44\nmsgid \":ref:`CogVideoX-5b <models_builtin_cogvideox-5b>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/video.rst:45\nmsgid \":ref:`HunyuanVideo <models_builtin_hunyuanvideo>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/video.rst:46\nmsgid \":ref:`Wan2.1-1.3B <models_builtin_wan2.1-1.3b>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/video.rst:47\nmsgid \":ref:`Wan2.1-14B <models_builtin_wan2.1-14b>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/video.rst:49\nmsgid \"\"\n\"The image-to-video API is supported with the following models in \"\n\"Xinference:\"\nmsgstr \"Image-to-video API 在 Xinference 中支持以下模型：\"\n\n#: ../../source/models/model_abilities/video.rst:51\nmsgid \":ref:`Wan2.1-i2v-14B-480p <models_builtin_wan2.1-i2v-14b-480p>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/video.rst:52\nmsgid \":ref:`Wan2.1-i2v-14B-720p <models_builtin_wan2.1-i2v-14b-720p>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/video.rst:54\nmsgid \"\"\n\"The firstlastframe-to-video API is supported with the following models in\"\n\" Xinference:\"\nmsgstr \"Xinference 中支持以下模型使用 firstlastframe-to-video 接口：\"\n\n#: ../../source/models/model_abilities/video.rst:56\nmsgid \":ref:`Wan2.1-flf2v-14B-720p <models_builtin_wan2.1-flf2v-14b-720p>`\"\nmsgstr \"\"\n\n#: ../../source/models/model_abilities/video.rst:59\nmsgid \"Quickstart\"\nmsgstr \"快速入门\"\n\n#: ../../source/models/model_abilities/video.rst:62\nmsgid \"Text-to-video\"\nmsgstr \"文生视频\"\n\n#: ../../source/models/model_abilities/video.rst:64\nmsgid \"\"\n\"You can try text-to-video API out either via cURL, or Xinference's python\"\n\" client:\"\nmsgstr \"可以通过 cURL 或 Xinference 的方式尝试使用 text-to-video API\"\n\n#: ../../source/models/model_abilities/video.rst:91\nmsgid \"Image-to-video\"\nmsgstr \"图生视频\"\n\n#: ../../source/models/model_abilities/video.rst:93\nmsgid \"\"\n\"You can try image-to-video API out either via cURL, or Xinference's \"\n\"python client:\"\nmsgstr \"可以通过 cURL 或 Xinference 的方式尝试使用 image-to-video API\"\n\n#: ../../source/models/model_abilities/video.rst:118\nmsgid \"FirstLastFrame-to-video\"\nmsgstr \"首尾帧生视频\"\n\n#: ../../source/models/model_abilities/video.rst:120\nmsgid \"\"\n\"You can try firstlastframe-to-video API out either via cURL, or \"\n\"Xinference's python client:\"\nmsgstr \"你可以通过 cURL 或 Xinference 的 Python 客户端来体验 firstlastframe-to-video 接口：\"\n\n#: ../../source/models/model_abilities/video.rst:147\nmsgid \"Memory optimization\"\nmsgstr \"内存优化\"\n\n#: ../../source/models/model_abilities/video.rst:149\nmsgid \"\"\n\"Video generation will occupy huge GPU memory, for instance, running \"\n\"CogVideoX may require up to around 35 GB GPU memory.\"\nmsgstr \"\"\n\"视频生成会占用大量显存，举例来说，运行 CogVideoX 可能会使用到约 35 GB 的\"\n\"显存。\"\n\n#: ../../source/models/model_abilities/video.rst:152\nmsgid \"\"\n\"Xinference supports several options to optimize video model memory (VRAM)\"\n\" usage.\"\nmsgstr \"Xinference 支持若干选项，来优化视频模型显存（VRAM）使用。\"\n\n#: ../../source/models/model_abilities/video.rst:154\nmsgid \"CPU offloading or block level group offloading.\"\nmsgstr \"CPU 卸载或块级分组卸载。\"\n\n#: ../../source/models/model_abilities/video.rst:155\nmsgid \"Layerwise casting.\"\nmsgstr \"逐层类型转换（Layerwise casting）。\"\n\n#: ../../source/models/model_abilities/video.rst:159\nmsgid \"\"\n\"CPU offloading and Block Level Group Offloading cannot be enabled at the \"\n\"same time, but layerwise casting can be used in combination with either \"\n\"of them.\"\nmsgstr \"CPU 卸载和块级分组卸载不能同时开启，但逐层类型转换可以与其中之一配合使用。\"\n\n#: ../../source/models/model_abilities/video.rst:163\nmsgid \"CPU offloading\"\nmsgstr \"CPU 卸载\"\n\n#: ../../source/models/model_abilities/video.rst:165\nmsgid \"\"\n\"CPU offloading keeps the model weights on the CPU and only loads them to \"\n\"the GPU when a forward pass needs to be executed. It is suitable for \"\n\"scenarios with extremely limited GPU memory, but it has a significant \"\n\"impact on performance.\"\nmsgstr \"\"\n\"CPU 卸载会将模型权重保留在 CPU 上，仅在执行前向传播时才加载到 GPU。适用于\"\n\"显存极其有限的场景，但对性能影响较大。\"\n\n#: ../../source/models/model_abilities/video.rst:169\nmsgid \"\"\n\"When running on GPU whose memory is less than 24 GB, we recommend to add \"\n\"``--cpu_offload True`` when launching model. For Web UI, add an extra \"\n\"option, ``cpu_offload`` with value set to ``True``.\"\nmsgstr \"\"\n\"当使用显存小于 24 GB 的 GPU 时，建议在启动模型时添加 ``--cpu_offload True\"\n\"``。对于 Web UI，可添加额外选项 ``cpu_offload``，值设为 ``True``。\"\n\n#: ../../source/models/model_abilities/video.rst:178\nmsgid \"Block Level Group Offloading\"\nmsgstr \"块级分组卸载\"\n\n#: ../../source/models/model_abilities/video.rst:180\nmsgid \"\"\n\"Block Level Group Offloading groups multiple internal layers of the model\"\n\" (such as ``torch.nn.ModuleList`` or ``torch.nn.Sequential``) and loads \"\n\"these groups from the CPU to the GPU as needed during inference. Compared\"\n\" to CPU offloading, it uses more memory but has less impact on \"\n\"performance.\"\nmsgstr \"\"\n\"块级分组卸载将模型的多个内部层（如 ``torch.nn.ModuleList`` 或 ``torch.nn.\"\n\"Sequential``）分组，并根据需要在推理过程中将这些分组从 CPU 加载到 GPU。与\"\n\" CPU 卸载相比，它使用更多的内存，但对性能的影响更小。\"\n\n#: ../../source/models/model_abilities/video.rst:184\nmsgid \"\"\n\"For the command line, add the ``--group_offload True`` option; for the \"\n\"Web UI, add an additional option ``group_offload`` with the value set to \"\n\"``True``.\"\nmsgstr \"\"\n\"对于命令行，添加 ``--group_offload True`` 选项；对于 Web UI，添加一个额外\"\n\"选项 ``group_offload``，值设为 ``True``。\"\n\n#: ../../source/models/model_abilities/video.rst:187\nmsgid \"\"\n\"We can speed up group offloading inference, by enabling the use of CUDA \"\n\"streams. However, using CUDA streams requires moving the model parameters\"\n\" into pinned memory. This allocation is handled by Pytorch under the \"\n\"hood, and can result in a significant spike in CPU RAM usage. Please \"\n\"consider this option if your CPU RAM is atleast 2X the size of the model \"\n\"you are group offloading. Enable CUDA streams via adding ``--use_stream \"\n\"True`` for command line; for the Web UI, add an additional option \"\n\"``use_stream`` with the value set to ``True``.\"\nmsgstr \"\"\n\"通过启用 CUDA 流，我们可以加速分组卸载推理。然而，使用 CUDA 流需要将模型\"\n\"参数移动到固定内存中。这项分配由 Pytorch 在后台处理，并可能导致 CPU RAM \"\n\"使用量显著增加。如果您的 CPU RAM 至少是模型大小的两倍，请考虑使用此选项。\"\n\"通过在命令行中添加 ``--use_stream True`` 启用 CUDA 流；对于 Web UI，添加\"\n\"一个额外选项 ``use_stream``，值设为 ``True``。\"\n\n#: ../../source/models/model_abilities/video.rst:199\nmsgid \"Applying Layerwise Casting to the Transformer\"\nmsgstr \"将逐层类型转换应用于 Transformer\"\n\n#: ../../source/models/model_abilities/video.rst:201\nmsgid \"\"\n\"Layerwise casting will downcast each layer’s weights to ``torch.float8_\"\n\"e4m3fn``, temporarily upcast to ``torch.bfloat16`` during the forward \"\n\"pass of the layer, then revert to ``torch.float8_e4m3fn`` afterward. This\"\n\" approach reduces memory requirements by approximately 50% while \"\n\"introducing a minor quality reduction in the generated video due to the \"\n\"precision trade-off. Enable layerwise casting via adding ``--layerwise_\"\n\"cast True`` for command line; for the Web UI, add an additional option ``\"\n\"layerwise_cast`` with the value set to ``True``.\"\nmsgstr \"\"\n\"逐层类型转换将把每个层的权重降级为 ``torch.float8_e4m3fn``，在层的前向\"\n\"传播过程中暂时升级为 ``torch.bfloat16``，然后在之后恢复为 ``torch.float8_\"\n\"e4m3fn``。这种方法将内存需求减少约 50%，同时由于精度折衷，生成的视频质量\"\n\"会略有下降。通过在命令行中添加 ``--layerwise_cast True`` 来启用逐层\"\n\"类型转换；对于 Web UI，添加一个额外选项 ``layerwise_cast``，值设为 ``True\"\n\"``。\"\n\n#: ../../source/models/model_abilities/video.rst:208\nmsgid \"This example will require 20GB of VRAM.\"\nmsgstr \"此示例将需要 20GB 的显存。\"\n\n#~ msgid \"OpenAI-compatible ENDPOINT\"\n#~ msgstr \"OpenAI 兼容端点\"\n\n#~ msgid \"API\"\n#~ msgstr \"\"\n\n#~ msgid \"Endpoint\"\n#~ msgstr \"端点\"\n\n#~ msgid \"Text-to-Video API\"\n#~ msgstr \"文生视频 API\"\n\n#~ msgid \"/v1/video/generations\"\n#~ msgstr \"\"\n\n#~ msgid \"Image-to-Video API\"\n#~ msgstr \"图生视频 API\"\n\n#~ msgid \"/v1/video/generations/image\"\n#~ msgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_memory.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-06-06 17:26+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.15.0\\n\"\n\n#: ../../source/models/model_memory.rst:5\nmsgid \"Model Memory Calculation\"\nmsgstr \"模型显存使用量计算\"\n\n#: ../../source/models/model_memory.rst:7\nmsgid \"\"\n\"For better planning of VMEM usage, xinference provided tool for model \"\n\"memory calculation: ``cal-model-mem``\"\nmsgstr \"为了更好规划显存使用， Xinference 提供了计算模型显存使用量的工具：``cal-model-mem``\"\n\n#: ../../source/models/model_memory.rst:9\nmsgid \"Use algorithm from https://github.com/RahulSChand/gpu_poor\"\nmsgstr \"算法来自：https://github.com/RahulSChand/gpu_poor\"\n\n#: ../../source/models/model_memory.rst:11\nmsgid \"Output: model_mem, kv_cache, overhead, active_mem\"\nmsgstr \"输出：model_mem, kv_cache, overhead, active_mem\"\n\n#: ../../source/models/model_memory.rst:13\nmsgid \"\"\n\"Example: To calculate memory usage for qwen1.5-chat, run the following \"\n\"command:\"\nmsgstr \"示例：计算 qwen1.5-chat 模型的显存用量，可以运行以下示例指令：\"\n\n#: ../../source/models/model_memory.rst:37\nmsgid \"Syntax\"\nmsgstr \"语法\"\n\n#: ../../source/models/model_memory.rst:39\nmsgid \"--size-in-billions {model_size}\"\nmsgstr \"\"\n\n#: ../../source/models/model_memory.rst:42\nmsgid \"-s {model_size}\"\nmsgstr \"\"\n\n#: ../../source/models/model_memory.rst:45\nmsgid \"\"\n\"Set the model size. Specify the model size in billions of parameters. \"\n\"Format accept 1_8 and 1.8. For example, 7 for 7.0B model size.\"\nmsgstr \"设置模型大小。以十亿个参数为单位指定模型大小。参数格式接受形式如 1_8 和 1.8. 例如，7 表示 7.0B 的模型大小。\"\n\n#: ../../source/models/model_memory.rst:50\nmsgid \"--quantization {precision}\"\nmsgstr \"\"\n\n#: ../../source/models/model_memory.rst:53\nmsgid \"-q {precision} *(Optional)*\"\nmsgstr \"-q {precision} *(可选)*\"\n\n#: ../../source/models/model_memory.rst:56\nmsgid \"\"\n\"Define the quantization settings for the model. For example, Int4 for \"\n\"INT4 quantization.\"\nmsgstr \"指定模型的量化配置。例如：Int4 参数表示使用 INT4 量化。\"\n\n#: ../../source/models/model_memory.rst:60\nmsgid \"--model-name {model_name}\"\nmsgstr \"\"\n\n#: ../../source/models/model_memory.rst:63\nmsgid \"-n {model_name} *(Optional)*\"\nmsgstr \"-n {model_name} *(可选)*\"\n\n#: ../../source/models/model_memory.rst:66\nmsgid \"\"\n\"Specify the model's name. If provided, fetch model config from \"\n\"huggingface/modelscope; If not specified, use default model layer to \"\n\"estimate.\"\nmsgstr \"\"\n\"指定模型名称。如果提供此参数，将从 huggingface/modelscope 中获取模型配置；如果没有指定，将使用默认的 layer \"\n\"参数粗略估计。\"\n\n#: ../../source/models/model_memory.rst:70\nmsgid \"--context-length {context_length}\"\nmsgstr \"\"\n\n#: ../../source/models/model_memory.rst:73\nmsgid \"-c {context_length}\"\nmsgstr \"\"\n\n#: ../../source/models/model_memory.rst:76\nmsgid \"\"\n\"Specify the maximum number of tokens(context length) that your model \"\n\"support.\"\nmsgstr \"指定模型的最大上下文长度。\"\n\n#: ../../source/models/model_memory.rst:79\nmsgid \"--model-format {format}\"\nmsgstr \"\"\n\n#: ../../source/models/model_memory.rst:82\nmsgid \"-f {format}\"\nmsgstr \"\"\n\n#: ../../source/models/model_memory.rst:85\nmsgid \"Specify the format of the model, e.g. pytorch, ggmlv3, etc.\"\nmsgstr \"指定模型的格式，例如：pytorch, ggmlv3, etc.\"\n\n#: ../../source/models/model_memory.rst:89\nmsgid \"\"\n\"The environment variable ``HF_ENDPOINT`` could set the endpoint of \"\n\"HuggingFace. e.g. hf-mirror, etc. Please refer to :ref:`this document \"\n\"<models_download>`\"\nmsgstr \"\"\n\"利用环境变量 ``HF_ENDPOINT`` 可设置 HuggingFace 服务器的 Endpoint。例如，当网络不佳时可以选择 hf-\"\n\"mirror 作为 Endpoint. 更多请参考 :ref:`此文档 <models_download>`\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/model_update.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2025, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-11-14 14:48+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/model_update.rst:5\nmsgid \"Model Update\"\nmsgstr \"模型更新\"\n\n#: ../../source/models/model_update.rst:8\nmsgid \"\"\n\"This section briefly introduces a common operation on the \\\"Launch \"\n\"Model\\\" page: updating the model list. It corresponds to the \\\"Type \"\n\"Selection + Update\\\" button at the top of the page, which is used to \"\n\"quickly refresh models of a specific type.\"\nmsgstr \"\"\n\"本节简要介绍“启动模型”页面上的一项常见操作：更新模型列表。它对应页面\"\n\"顶部的“类型选择 + 更新”按钮，用于快速刷新某一类型的模型。\"\n\n#: ../../source/models/model_update.rst:10\nmsgid \"\"\n\"Model update rely on the online model list service provided by \"\n\":ref:`xinference_models_hub` .\"\nmsgstr \"模型更新依赖 :ref:`xinference_models_hub` 提供的在线模型列表服务。\"\n\n#: ../../source/models/model_update.rst:17\nmsgid \"Update Models\"\nmsgstr \"更新模型\"\n\n#: ../../source/models/model_update.rst:19\nmsgid \"\"\n\"Operation Location: \\\"Type Selection\\\" dropdown and \\\"Update\\\" button at \"\n\"the top right of the page.\"\nmsgstr \"操作位置：页面右上角的“类型选择”下拉框和“更新”按钮。\"\n\n#: ../../source/models/model_update.rst:20\nmsgid \"Usage:\"\nmsgstr \"使用方法：\"\n\n#: ../../source/models/model_update.rst:21\nmsgid \"\"\n\"Select a model type from the dropdown (such as llm, embedding, rerank, \"\n\"image, audio, video).\"\nmsgstr \"\"\n\"从下拉菜单中选择模型类型（例如 llm、embedding、rerank、image、audio、\"\n\"video）。\"\n\n#: ../../source/models/model_update.rst:22\nmsgid \"\"\n\"Click the \\\"Update\\\" button, the page will send an update request to the \"\n\"backend, then automatically jump to the corresponding Tab and refresh the\"\n\" model list of that type.\"\nmsgstr \"\"\n\"点击“更新”按钮后，页面会向后端发送更新请求，并自动跳转到对应的选项卡，\"\n\"刷新该类型的模型列表。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/source/source.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-10-20 15:15+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/models/source/source.rst:5\nmsgid \"Download Source\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:7\nmsgid \"Xinference supports downloading various models from different sources.\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:10\nmsgid \"HuggingFace\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:11\nmsgid \"\"\n\"Xinference directly downloads the required models from the official \"\n\"`Hugging Face model repository <https://huggingface.co/models>`_ by \"\n\"default.\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:14\nmsgid \"ModelScope\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:15\nmsgid \"\"\n\"Users can choose to download models from the `ModelScope model repository\"\n\" <https://modelscope.cn/models>`_.\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:17\nmsgid \"Xinference supports downloading the following models from ModelScope:\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:30\nmsgid \"LLM Models\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:20\nmsgid \"llama-2-chat\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:21\nmsgid \"tiny-llama\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:22\nmsgid \"baichuan-2-chat\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:23\nmsgid \"baichuan-2\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:24\nmsgid \"chatglm2\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:25\nmsgid \"chatglm2-32k\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:26\nmsgid \"internlm-7b\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:27\nmsgid \"internlm-chat-7b\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:28\nmsgid \"internlm-20b\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:29\nmsgid \"internlm-chat-20b\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:30\nmsgid \"wizardcoder-python-v1.0\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:49\nmsgid \"Embedding Models\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:33\nmsgid \"bge-large-en\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:34\nmsgid \"bge-base-en\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:35\nmsgid \"gte-large\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:36\nmsgid \"gte-base\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:37\nmsgid \"e5-large-v2\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:38\nmsgid \"bge-large-zh\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:39\nmsgid \"bge-large-zh-noinstruct\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:40\nmsgid \"bge-base-zh\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:41\nmsgid \"multilingual-e5-large\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:42\nmsgid \"bge-small-zh\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:43\nmsgid \"bge-small-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:44\nmsgid \"bge-base-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:45\nmsgid \"bge-large-zh-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:46\nmsgid \"bge-small-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:47\nmsgid \"bge-base-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:48\nmsgid \"bge-large-en-v1.5\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:51\nmsgid \"\"\n\"One of the following settings will make Xinference download models from \"\n\"ModelScope:\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:53\nmsgid \"The operating system's language is set to Simplified Chinese (zh_CN).\"\nmsgstr \"\"\n\n#: ../../source/models/source/source.rst:54\nmsgid \"Set the environment variable ``XINFERENCE_MODEL_SRC=modelscope``.\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/sources/sources.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2024-01-02 16:27+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.13.1\\n\"\n\n#: ../../source/models/sources/sources.rst:5\nmsgid \"Download Sources\"\nmsgstr \"模型来源\"\n\n#: ../../source/models/sources/sources.rst:7\nmsgid \"Xinference supports downloading various models from different sources.\"\nmsgstr \"Xinference 支持从不同的来源下载各种模型。\"\n\n#: ../../source/models/sources/sources.rst:10\nmsgid \"HuggingFace\"\nmsgstr \"\"\n\n#: ../../source/models/sources/sources.rst:11\nmsgid \"\"\n\"Xinference directly downloads the required models from the official \"\n\"`Hugging Face model repository <https://huggingface.co/models>`_ by \"\n\"default.\"\nmsgstr \"\"\n\"Xinference 默认直接从 `Hugging Face 官方模型仓库 <https://huggingface.co/models>`_ \"\n\"下载所需的模型。\"\n\n#: ../../source/models/sources/sources.rst:14\nmsgid \"\"\n\"If you have trouble connecting to Huggingface, you can use a mirror \"\n\"website to download with setting the environment variable \"\n\"``HF_ENDPOINT=https://hf-mirror.com``.\"\nmsgstr \"\"\n\"如果你的网络无法连接到 HuggingFace ，你可以通过环境变量指定 HuggingFace 镜像网站：``HF_ENDPOINT=https\"\n\"://hf-mirror.com`` 。\"\n\n#: ../../source/models/sources/sources.rst:18\nmsgid \"ModelScope\"\nmsgstr \"\"\n\n#: ../../source/models/sources/sources.rst:20\nmsgid \"\"\n\"When Xinference detects that the system's language is set to Simplified \"\n\"Chinese, it will automatically set the model download source to \"\n\"`ModelScope <https://modelscope.cn/models>`_.\"\nmsgstr \"当 Xinference 检测到系统语言设置为“简体中文”时，会将模型下载源设置为 `ModelScope <https://modelscope.cn/models>`_。\"\n\n#: ../../source/models/sources/sources.rst:23\nmsgid \"\"\n\"You can also achieve this by manually setting an environment variable \"\n\"``XINFERENCE_MODEL_SRC=modelscope``.\"\nmsgstr \"你也可以通过手动设置环境变量 ``XINFERENCE_MODEL_SRC=modelscope`` 来实现这一点。\"\n\n#: ../../source/models/sources/sources.rst:25\nmsgid \"\"\n\"Please check the detail page of a model to confirm whether the model \"\n\"supports downloading from ModelScope. If a model spec supports \"\n\"downloading from ModelScope, the \\\"Model Hubs\\\" section in the spec \"\n\"information will include \\\"ModelScope\\\".\"\nmsgstr \"请在模型的详情页面上查看它是否支持从 ModelScope 进行下载。如果一个模型支持从 ModelScope 下载，模型信息中的 Model Hubs 这一项会包含 ModelScope。\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/virtualenv.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-30 19:14+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/virtualenv.rst:6\nmsgid \"Model Virtual Environments\"\nmsgstr \"模型虚拟环境\"\n\n#: ../../source/models/virtualenv.rst:11\nmsgid \"Background\"\nmsgstr \"背景\"\n\n#: ../../source/models/virtualenv.rst:13\nmsgid \"\"\n\"Some models are no longer maintained after their release, and the \"\n\"versions of the libraries they depend on remain outdated. For example, \"\n\"the ``GOT-OCR2`` model still relies on ``transformers`` version 4.37.2. \"\n\"If this library is updated to a newer version, the model can no longer \"\n\"function properly. On the other hand, many newer models require the \"\n\"latest version of ``transformers``. This version mismatch leads to \"\n\"dependency conflicts.\"\nmsgstr \"\"\n\"一些模型在发布后不再维护，其依赖的库版本也保持在较旧的状态。例如，``GOT-OCR2`` 模型仍依赖于 ``transformers`` \"\n\"4.37.2。如果将该库升级为新版本，模型将无法正常运行；而许多新模型又需要最新版本的 \"\n\"``transformers``。这种版本差异会导致依赖冲突。\"\n\n#: ../../source/models/virtualenv.rst:19\nmsgid \"Solution\"\nmsgstr \"解决方案\"\n\n#: ../../source/models/virtualenv.rst:21\nmsgid \"\"\n\"To address this issue, we have introduced the **Model Virtual \"\n\"Environment** feature.\"\nmsgstr \"为了解决这个问题，我们引入了 **模型虚拟环境** 功能。\"\n\n#: ../../source/models/virtualenv.rst:23\nmsgid \"Install requirements for this functionality via\"\nmsgstr \"通过以下命令安装该功能所需的依赖\"\n\n#: ../../source/models/virtualenv.rst:32\nmsgid \"\"\n\"Enable by setting environment variable \"\n\"``XINFERENCE_ENABLE_VIRTUAL_ENV=1``.\"\nmsgstr \"通过设置环境变量 ``XINFERENCE_ENABLE_VIRTUAL_ENV=1`` 启用该功能。\"\n\n#: ../../source/models/virtualenv.rst:34 ../../source/models/virtualenv.rst:217\n#: ../../source/models/virtualenv.rst:233\nmsgid \"Example usage:\"\nmsgstr \"使用示例：\"\n\n#: ../../source/models/virtualenv.rst:46\nmsgid \"This feature requires internet access or a self-hosted PyPI mirror.\"\nmsgstr \"该功能需要联网，或使用自建的 PyPI 镜像服务。\"\n\n#: ../../source/models/virtualenv.rst:48\nmsgid \"Xinference will by default inherit the config for current pip.\"\nmsgstr \"Xinference 默认会继承当前 pip 的配置。\"\n\n#: ../../source/models/virtualenv.rst:52\nmsgid \"\"\n\"Note: When launching a vLLM/SgLang engine model inside a virtual \"\n\"environment, if you encounter a cuDNN error, you can set:\"\nmsgstr \"注意：在虚拟环境中启动vLLM/SgLang引擎模型时，若遇到cuDNN错误，可设置：\"\n\n#: ../../source/models/virtualenv.rst:63\nmsgid \"\"\n\"Starting from **Xinference v2.0**, the model virtual environment feature \"\n\"is enabled by default (i.e., ``XINFERENCE_ENABLE_VIRTUAL_ENV`` defaults \"\n\"to ``1``).\"\nmsgstr \"\"\n\"从 **Xinference v2.0** 开始，模型虚拟环境功能默认启用（即 ``XINFERENCE_ENABLE_VIRTUAL_ENV``\"\n\" 默认值为 ``1`` ）。\"\n\n#: ../../source/models/virtualenv.rst:66\nmsgid \"\"\n\"To disable it globally, set ``XINFERENCE_ENABLE_VIRTUAL_ENV=0`` when \"\n\"starting Xinference.\"\nmsgstr \"要全局禁用该功能，请在启动Xinference时设置 ``XINFERENCE_ENABLE_VIRTUAL_ENV=0`` 。\"\n\n#: ../../source/models/virtualenv.rst:68\nmsgid \"\"\n\"When enabled, Xinference will automatically create a dedicated virtual \"\n\"environment for each model when it is loaded, and install its specific \"\n\"dependencies there. This prevents dependency conflicts between models, \"\n\"allowing them to run in isolation without affecting one another.\"\nmsgstr \"\"\n\"启用该功能后，Xinference \"\n\"会在加载模型时自动为其创建专属的虚拟环境，并在其中安装对应依赖。这可避免模型之间的依赖冲突，确保各模型在相互隔离的环境中独立运行。\"\n\n#: ../../source/models/virtualenv.rst:73\nmsgid \"Using Virtual Environments (v2.0)\"\nmsgstr \"虚拟环境管理（v2.0）\"\n\n#: ../../source/models/virtualenv.rst:76\nmsgid \"Global toggle\"\nmsgstr \"全局切换\"\n\n#: ../../source/models/virtualenv.rst:78\nmsgid \"\"\n\"Virtual environments are enabled by default starting from v2.0. You can \"\n\"still override this globally:\"\nmsgstr \"从v2.0版本开始，虚拟环境默认处于启用状态。您仍可通过全局设置覆盖此选项：\"\n\n#: ../../source/models/virtualenv.rst:89\nmsgid \"Per-model override at launch time\"\nmsgstr \"启动时按模型覆盖\"\n\n#: ../../source/models/virtualenv.rst:91\nmsgid \"You can override the global setting when launching a model:\"\nmsgstr \"在启动模型时，您可以覆盖全局设置：\"\n\n#: ../../source/models/virtualenv.rst:102\nmsgid \"Add or override packages at launch time\"\nmsgstr \"在启动时添加或覆盖包\"\n\n#: ../../source/models/virtualenv.rst:104\nmsgid \"Use ``--virtual-env-package`` (or ``-vp``) multiple times:\"\nmsgstr \"命令行中，使用 ``--virtual-env-package`` 或 ``-vp`` 来指定单个包版本。\"\n\n#: ../../source/models/virtualenv.rst:112\nmsgid \"\"\n\"If you specify a package that already exists in the model's default \"\n\"virtualenv package list, your version replaces the default instead of \"\n\"being appended.\"\nmsgstr \"若指定的软件包已在模型的默认虚拟环境软件包列表中存在，则您指定的版本将覆盖默认版本，而非追加至列表中。\"\n\n#: ../../source/models/virtualenv.rst:117\nmsgid \"Storage Location\"\nmsgstr \"存储位置\"\n\n#: ../../source/models/virtualenv.rst:119\nmsgid \"By default, the model’s virtual environment is stored under path:\"\nmsgstr \"默认情况下，模型的虚拟环境存储在以下路径\"\n\n#: ../../source/models/virtualenv.rst:121\n#, python-brace-format\nmsgid \"\"\n\"Before v1.6.0: :ref:`XINFERENCE_HOME <environments_xinference_home>` / \"\n\"virtualenv / {model_name}\"\nmsgstr \"\"\n\"在 v1.6.0 之前：:ref:`XINFERENCE_HOME <environments_xinference_home>` / \"\n\"virtualenv / {model_name}\"\n\n#: ../../source/models/virtualenv.rst:122\n#, python-brace-format\nmsgid \"\"\n\"From v1.6.0 to v1.13.0: :ref:`XINFERENCE_HOME \"\n\"<environments_xinference_home>` / virtualenv / v2 / {model_name}\"\nmsgstr \"\"\n\"从 v1.6.0 到 v1.13.0：:ref:`XINFERENCE_HOME <environments_xinference_home>` \"\n\"/ virtualenv / v2 / {model_name}\"\n\n#: ../../source/models/virtualenv.rst:123\n#, python-brace-format\nmsgid \"\"\n\"Since v1.14.0: :ref:`XINFERENCE_HOME <environments_xinference_home>` / \"\n\"virtualenv / v3 / {model_name} / {python_version}\"\nmsgstr \"\"\n\"从 v1.14.0 开始：:ref:`XINFERENCE_HOME <environments_xinference_home>` / \"\n\"virtualenv / v3 / {model_name} / {python_version}\"\n\n#: ../../source/models/virtualenv.rst:124\n#, python-brace-format\nmsgid \"\"\n\"Since v2.0: :ref:`XINFERENCE_HOME <environments_xinference_home>` / \"\n\"virtualenv / v4 / {model_name} / {model_engine} / {python_version}\"\nmsgstr \"\"\n\"自 v2.0 起：:ref:`XINFERENCE_HOME <environments_xinference_home>` / \"\n\"virtualenv / v4 / {model_name} / {model_engine} / {python_version}\"\n\n#: ../../source/models/virtualenv.rst:127\nmsgid \"Skip Installed Libraries\"\nmsgstr \"跳过已安装的库\"\n\n#: ../../source/models/virtualenv.rst:133\nmsgid \"\"\n\"This feature requires ``xoscar >= 0.7.12``, which is the minimum Xoscar \"\n\"version required for Xinference v1.8.1.\"\nmsgstr \"此功能要求 ``xoscar >= 0.7.12``，这是 Xinference v1.8.1 需要的最低 Xoscar 版本。\"\n\n#: ../../source/models/virtualenv.rst:135\nmsgid \"\"\n\"``xinference`` uses the ``uv`` tool to create virtual environments, with \"\n\"the current Python **system site-packages** set as the base environment. \"\n\"By default, ``uv`` **does not check for existing packages in the system \"\n\"environment** and reinstalls all dependencies in the virtual environment.\"\n\" This ensures better isolation from system packages but can result in \"\n\"redundant installations, longer setup times, and increased disk usage.\"\nmsgstr \"\"\n\"``xinference`` 使用 ``uv`` 工具创建虚拟环境，并将当前 Python 的 **system site-packages** \"\n\"设置为基础环境。默认情况下，``uv`` \"\n\"**不会检查系统环境中是否已有包**，而是会在虚拟环境中重新安装所有依赖。这种方式可以更好地与系统包隔离，但可能导致重复安装、初始化时间变长以及磁盘占用增加。\"\n\n#: ../../source/models/virtualenv.rst:139\nmsgid \"\"\n\"Starting from ``v1.8.1``, an **experimental feature** is available: by \"\n\"setting the environment variable \"\n\"``XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED=1``, ``uv`` will **skip packages \"\n\"already available in system site-packages**.\"\nmsgstr \"\"\n\"从 ``v1.8.1`` 开始，提供了一个 **实验功能**：通过设置环境变量 \"\n\"``XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED=1``，``uv`` 将会 **跳过系统 site-\"\n\"packages 中已存在的包**。\"\n\n#: ../../source/models/virtualenv.rst:144\nmsgid \"\"\n\"This feature is enabled by default in ``v2.0``. To disable it, set \"\n\"``XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED=0``.\"\nmsgstr \"\"\n\"此功能在 ``v2.0`` 版本中默认启用。若需禁用，请设置 \"\n\"``XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED=0`` 。\"\n\n#: ../../source/models/virtualenv.rst:147\nmsgid \"Advantages\"\nmsgstr \"优势\"\n\n#: ../../source/models/virtualenv.rst:149\nmsgid \"\"\n\"Avoid redundant installations of large dependencies (e.g., ``torch`` + \"\n\"``CUDA``).\"\nmsgstr \"避免重复安装大型依赖（例如 ``torch`` + ``CUDA`` ）。\"\n\n#: ../../source/models/virtualenv.rst:150\nmsgid \"Speed up virtual environment creation.\"\nmsgstr \"加快虚拟环境创建速度。\"\n\n#: ../../source/models/virtualenv.rst:151\nmsgid \"Reduce disk usage.\"\nmsgstr \"减少磁盘空间占用。\"\n\n#: ../../source/models/virtualenv.rst:154\nmsgid \"Usage\"\nmsgstr \"使用\"\n\n#: ../../source/models/virtualenv.rst:166\nmsgid \"Performance Comparison\"\nmsgstr \"性能对比\"\n\n#: ../../source/models/virtualenv.rst:168\nmsgid \"Using the ``CosyVoice 0.5B`` model as an example:\"\nmsgstr \"以 ``CosyVoice 0.5B`` 模型为例：\"\n\n#: ../../source/models/virtualenv.rst:170\nmsgid \"**Without this feature enabled**::\"\nmsgstr \"**未开启该功能时**::\"\n\n#: ../../source/models/virtualenv.rst:181\nmsgid \"**With this feature enabled**::\"\nmsgstr \"**开启该功能后**::\"\n\n#: ../../source/models/virtualenv.rst:196\nmsgid \"Model Launching: Toggle Virtual Environments and Customize Dependencies\"\nmsgstr \"模型加载：开关虚拟环境并自定义依赖\"\n\n#: ../../source/models/virtualenv.rst:200\nmsgid \"\"\n\"Starting from v1.8.1, we support toggling the virtual environment for \"\n\"individual model launching, as well as overriding the model's default \"\n\"settings with custom package dependencies.\"\nmsgstr \"从 v1.8.1 开始，我们支持对单个模型加载开关虚拟环境，并用自定义包依赖覆盖模型的默认设置。\"\n\n#: ../../source/models/virtualenv.rst:204\nmsgid \"Toggle Virtual Environment\"\nmsgstr \"开关模型虚拟空间\"\n\n#: ../../source/models/virtualenv.rst:206\nmsgid \"\"\n\"When loading a model, you can specify whether to enable the model's \"\n\"virtual environment. If not specified, the setting will follow the \"\n\"environment variable configuration.\"\nmsgstr \"加载模型时，可以指定是否启用模型的虚拟环境。如果未指定，则默认遵循环境变量的配置。\"\n\n#: ../../source/models/virtualenv.rst:209\nmsgid \"\"\n\"For the Web UI, this can be toggled on or off through the optional \"\n\"settings switch.\"\nmsgstr \"在 Web UI 中，可以通过可选设置开关打开或关闭该功能。\"\n\n#: ../../source/models/virtualenv.rst:215\nmsgid \"\"\n\"For command-line loading, use the ``--enable-virtual-env`` option to \"\n\"enable the virtual environment, or ``--disable-virtual-env`` to disable \"\n\"it.\"\nmsgstr \"\"\n\"命令行加载时，使用 ``--enable-virtual-env`` 选项启用虚拟环境，使用 ``--disable-virtual-env`` \"\n\"选项禁用虚拟环境。\"\n\n#: ../../source/models/virtualenv.rst:224\nmsgid \"Set Virtual Environment Package Dependencies\"\nmsgstr \"设置虚拟环境包依赖\"\n\n#: ../../source/models/virtualenv.rst:226\nmsgid \"\"\n\"For supported models, Xinference has already defined the package \"\n\"dependencies and version requirements within the virtual environment. \"\n\"However, if you need to specify particular versions or install additional\"\n\" dependencies, you can manually provide them during model loading.\"\nmsgstr \"对于支持的模型，Xinference 已经在虚拟环境中定义了包依赖和版本要求。但如果需要指定特定版本或安装额外依赖，可以在加载模型时手动提供。\"\n\n#: ../../source/models/virtualenv.rst:229\nmsgid \"\"\n\"In the Web UI, you can add custom dependencies by clicking the plus icon \"\n\"in the same location as the virtual environment toggle.\"\nmsgstr \"在 Web UI 中，可以在虚拟环境开关同一位置点击加号图标来添加自定义依赖。\"\n\n#: ../../source/models/virtualenv.rst:231\nmsgid \"\"\n\"For the command line, use ``--virtual-env-package`` or ``-vp`` to specify\"\n\" a single package version.\"\nmsgstr \"命令行中，使用 ``--virtual-env-package`` 或 ``-vp`` 来指定单个包版本。\"\n\n#: ../../source/models/virtualenv.rst:239\nmsgid \"\"\n\"In addition to the standard way of specifying package dependencies, such \"\n\"as ``transformers==xxx``, Xinference also supports some extended syntax.\"\nmsgstr \"除了常规的包依赖指定方式（如 ``transformers==xxx``），Xinference 还支持一些扩展语法。\"\n\n#: ../../source/models/virtualenv.rst:241\nmsgid \"\"\n\"``#system_xxx#``: Using the same version as the system site packages, \"\n\"such as ``#system_numpy#``, ensures that the installed package matches \"\n\"the system site package version of numpy. This helps prevent dependency \"\n\"conflicts.\"\nmsgstr \"\"\n\"``#system_xxx#``：使用与系统 site packages 相同的版本，例如 \"\n\"``#system_numpy#``，确保安装的包版本与系统 site packages 中的 numpy 版本一致，防止依赖冲突。\"\n\n#: ../../source/models/virtualenv.rst:248\nmsgid \"Manage Virtual Enviroments\"\nmsgstr \"虚拟环境管理\"\n\n#: ../../source/models/virtualenv.rst:252\nmsgid \"\"\n\"Xinference provides comprehensive virtual environment management for \"\n\"model dependencies, allowing you to create isolated Python environments \"\n\"for each model with specific package requirements.\"\nmsgstr \"Xinference 提供全面的虚拟环境管理功能，允许您为每个模型创建独立的 Python 环境，满足特定的包依赖需求。\"\n\n#: ../../source/models/virtualenv.rst:264\nmsgid \"Key Features\"\nmsgstr \"核心功能\"\n\n#: ../../source/models/virtualenv.rst:266\nmsgid \"\"\n\"**Multiple Python Version Support**: Each model can have virtual \"\n\"environments with different Python versions (e.g., Python 3.10.18, \"\n\"3.11.5), enabling compatibility with various model requirements.\"\nmsgstr \"\"\n\"**多 Python 版本支持** : 每个模型可以拥有不同 Python 版本的虚拟环境（例如 Python \"\n\"3.10.18、3.11.5），实现与各种模型要求的兼容性。\"\n\n#: ../../source/models/virtualenv.rst:271\nmsgid \"\"\n\"**Isolated Dependencies**: Each virtual environment contains its own set \"\n\"of packages, preventing conflicts between different models' requirements.\"\nmsgstr \"**依赖隔离** : 每个虚拟环境包含自己独立的包集合，防止不同模型之间的依赖冲突。\"\n\n#: ../../source/models/virtualenv.rst:276\nmsgid \"Management Operations\"\nmsgstr \"管理操作\"\n\n#: ../../source/models/virtualenv.rst:278\nmsgid \"\"\n\"**Listing Virtual Environments**: View all virtual environments across \"\n\"your cluster, filtered by model name or worker IP address.\"\nmsgstr \"**列出虚拟环境** : 查看集群中的所有虚拟环境，支持按模型名称或工作节点 IP 地址过滤。\"\n\n#: ../../source/models/virtualenv.rst:282\nmsgid \"\"\n\"**Creating Environments**: Automatically created when launching models \"\n\"with enable_virtual_env=true. The system detects your current Python \"\n\"version and creates an isolated environment with the required packages.\"\nmsgstr \"\"\n\"**创建环境** : 当使用 enable_virtual_env=true 启动模型时自动创建。系统会检测当前的 Python \"\n\"版本并创建包含所需包的独立环境。\"\n\n#: ../../source/models/virtualenv.rst:287\nmsgid \"\"\n\"**Removing Environments**: Delete specific virtual environments by model \"\n\"name and optionally Python version, or remove all environments for a \"\n\"model.\"\nmsgstr \"**删除环境** : 可按模型名称和可选的 Python 版本删除特定虚拟环境，或删除模型的所有环境。\"\n\n#: ../../source/models/virtualenv.rst:292\nmsgid \"ModelHub JSON for Xinference Models\"\nmsgstr \"ModelHub JSON 格式（适用于 Xinference 模型）\"\n\n#: ../../source/models/virtualenv.rst:294\nmsgid \"\"\n\"If you plan to add a model to a model hub for Xinference, define a \"\n\"``virtualenv`` block in the model JSON. Starting from v2.0 (v4 flow), \"\n\"**engine-aware markers are recommended** so one JSON can cover multiple \"\n\"engines.\"\nmsgstr \"\"\n\"若计划将模型添加至Xinference的Model Hub，请在模型JSON中定义一个``virtualenv``块。自v2.0（v4流程）起， \"\n\"**建议使用引擎感知标记** ，以便单个JSON文件覆盖多个引擎。\"\n\n#: ../../source/models/virtualenv.rst:298\nmsgid \"\"\n\"Important rule: If a new model supports a specific engine, you **must** \"\n\"include at least one package entry for that engine in \"\n\"``virtualenv.packages`` and attach a marker, for example ``#engine# == \"\n\"\\\"vllm\\\"``. Engine availability checks rely on these markers when virtual\"\n\" environments are enabled.\"\nmsgstr \"\"\n\"重要规则：若新模型支持特定引擎，则 **必须** 在 ``virtualenv.packages`` \"\n\"中至少包含该引擎的一个包条目，并附加标记（例如 ``#engine# == \\\"vllm\\\"`` \"\n\"）。当虚拟环境启用时，引擎可用性检查依赖这些标记进行验证。\"\n\n#: ../../source/models/virtualenv.rst:325\nmsgid \"``packages`` (required): list of pip requirement strings or markers.\"\nmsgstr \" ``packages`` （必填）：pip 要求字符串或标记的列表。\"\n\n#: ../../source/models/virtualenv.rst:326\nmsgid \"\"\n\"``inherit_pip_config`` (default ``true``): inherit system pip \"\n\"configuration if present.\"\nmsgstr \" ``inherit_pip_config`` （默认值为 ``true`` ）：若存在系统 pip 配置文件，则继承其设置。\"\n\n#: ../../source/models/virtualenv.rst:327\nmsgid \"\"\n\"``index_url`` / ``extra_index_url`` / ``find_links`` / ``trusted_host``: \"\n\"pip index and mirror controls.\"\nmsgstr \"\"\n\" ``index_url`` / ``extra_index_url`` / ``find_links`` / ``trusted_host`` \"\n\": pip 索引和镜像控制。\"\n\n#: ../../source/models/virtualenv.rst:329\nmsgid \"\"\n\"``index_strategy``: passed through to the virtualenv installer (used by \"\n\"some engines).\"\nmsgstr \" ``index_strategy`` ：传递给虚拟环境安装程序（由某些引擎使用）。\"\n\n#: ../../source/models/virtualenv.rst:330\nmsgid \"``no_build_isolation``: pip build isolation switch for tricky builds.\"\nmsgstr \" ``no_build_isolation`` ：用于处理复杂构建的pip构建隔离开关。\"\n\n#: ../../source/models/virtualenv.rst:335\nmsgid \"Use wrapped placeholders to inject engine defaults:\"\nmsgstr \"使用包裹的占位符注入引擎默认值：\"\n\n#: ../../source/models/virtualenv.rst:337\nmsgid \"``#vllm_dependencies#``\"\nmsgstr \"\"\n\n#: ../../source/models/virtualenv.rst:338\nmsgid \"``#sglang_dependencies#``\"\nmsgstr \"\"\n\n#: ../../source/models/virtualenv.rst:339\nmsgid \"``#mlx_dependencies#``\"\nmsgstr \"\"\n\n#: ../../source/models/virtualenv.rst:340\nmsgid \"``#transformers_dependencies#``\"\nmsgstr \"\"\n\n#: ../../source/models/virtualenv.rst:341\nmsgid \"``#llama_cpp_dependencies#``\"\nmsgstr \"\"\n\n#: ../../source/models/virtualenv.rst:342\nmsgid \"``#diffusers_dependencies#``\"\nmsgstr \"\"\n\n#: ../../source/models/virtualenv.rst:343\nmsgid \"``#sentence_transformers_dependencies#``\"\nmsgstr \"\"\n\n#: ../../source/models/virtualenv.rst:348\nmsgid \"\"\n\"Markers use ``#engine#`` or ``#model_engine#`` comparisons (case-\"\n\"sensitive). Engine values are passed in lowercase internally, so prefer \"\n\"lowercase values, for example ``#engine# == \\\"vllm\\\"`` or ``#engine# == \"\n\"\\\"transformers\\\"``.\"\nmsgstr \"\"\n\"标记使用 ``#engine#`` 或 ``#model_engine#`` \"\n\"进行比较（区分大小写）。引擎值在内部以小写形式传递，因此建议使用小写值，例如 ``#engine# == \\\"vllm\\\"`` 或 \"\n\"``#engine# == \\\"transformers\\\"`` 。\"\n\n#~ msgid \"Manage Virtual Enviroments\"\n#~ msgstr \"虚拟环境管理\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/xinference_model_hub.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2025, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-11-13 17:28+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/xinference_model_hub.rst:5\nmsgid \"Xinference Models Hub User Guide\"\nmsgstr \"Xinference 模型中心用户指南\"\n\n#: ../../source/models/xinference_model_hub.rst:9\nmsgid \"Overview\"\nmsgstr \"概述\"\n\n#: ../../source/models/xinference_model_hub.rst:11\nmsgid \"\"\n\"`Xinference Models Hub <https://model.xinference.io>`_ is a full-stack \"\n\"platform for managing and sharing models, providing a complete solution \"\n\"for model registration, browsing, review workflows, and collaborative \"\n\"model management.\"\nmsgstr \"\"\n\"`Xinference 模型中心 <https://model.xinference.io>`_ 是一个用于管理和共享模型的全栈平台，\"\n\"提供模型注册、浏览、评审流程及协作管理的完整解决方案。\"\n\n#: ../../source/models/xinference_model_hub.rst:14\nmsgid \"User Guide for Regular Users\"\nmsgstr \"普通用户指南\"\n\n#: ../../source/models/xinference_model_hub.rst:16\nmsgid \"\"\n\"This section introduces the main features available to regular registered\"\n\" users, including model browsing and personal center management.\"\nmsgstr \"本节介绍普通注册用户可使用的主要功能，包括模型浏览和个人中心管理。\"\n\n#: ../../source/models/xinference_model_hub.rst:18\nmsgid \"\"\n\"**Audience:** Regular registered users without model maintenance or \"\n\"public model registration permissions.\"\nmsgstr \"**适用对象：** 无模型维护或公共模型注册权限的普通注册用户。\"\n\n#: ../../source/models/xinference_model_hub.rst:21\n#: ../../source/models/xinference_model_hub.rst:60\nmsgid \"Core Features\"\nmsgstr \"核心功能\"\n\n#: ../../source/models/xinference_model_hub.rst:24\nmsgid \"Browse Models\"\nmsgstr \"浏览模型\"\n\n#: ../../source/models/xinference_model_hub.rst:26\nmsgid \"**Function:** View available models and click to see details\"\nmsgstr \"**功能：** 查看可用模型并点击查看详细信息\"\n\n#: ../../source/models/xinference_model_hub.rst:27\nmsgid \"**Location:** Navigation bar → “Models”\"\nmsgstr \"**位置：** 导航栏 → “模型”\"\n\n#: ../../source/models/xinference_model_hub.rst:28\nmsgid \"\"\n\"**Model Details Page:** The default tab is “README,” where you can view\"\n\" model descriptions, usage instructions, and important notes\"\nmsgstr \"**模型详情页：** 默认展示 “README” 标签页，可查看模型描述、使用说明及重要注意事项\"\n\n#: ../../source/models/xinference_model_hub.rst:31\nmsgid \"Some advanced models are only visible to authorized users.\"\nmsgstr \"部分高级模型仅对授权用户可见。\"\n\n#: ../../source/models/xinference_model_hub.rst:34\nmsgid \"User Center\"\nmsgstr \"用户中心\"\n\n#: ../../source/models/xinference_model_hub.rst:36\nmsgid \"**Function:** View and manage personal information\"\nmsgstr \"**功能：** 查看与管理个人信息\"\n\n#: ../../source/models/xinference_model_hub.rst:37\nmsgid \"**Location:** Click the avatar in the top-right corner → “User Center”\"\nmsgstr \"**位置：** 点击右上角头像 → “用户中心”\"\n\n#: ../../source/models/xinference_model_hub.rst:38\nmsgid \"**Account Management:** Update personal profile, email, and other details\"\nmsgstr \"**账户管理：** 更新个人资料、邮箱及其他信息\"\n\n#: ../../source/models/xinference_model_hub.rst:39\nmsgid \"\"\n\"**Token Management:** Configure a GitHub Token used for model submissions\"\n\" or updates\"\nmsgstr \"**Token 管理：** 配置用于提交或更新模型的 GitHub Token\"\n\n#: ../../source/models/xinference_model_hub.rst:42\nmsgid \"\"\n\"If no token is configured, the system will use a default token to create \"\n\"pull requests (PRs).\"\nmsgstr \"若未配置 Token，系统将使用默认 Token 创建 Pull Request（PR）。\"\n\n#: ../../source/models/xinference_model_hub.rst:45\nmsgid \"Workflow\"\nmsgstr \"使用流程\"\n\n#: ../../source/models/xinference_model_hub.rst:47\nmsgid \"**Register an account** → Log in → Browse models\"\nmsgstr \"**注册账户** → 登录 → 浏览模型\"\n\n#: ../../source/models/xinference_model_hub.rst:48\nmsgid \"\"\n\"**Reset password:** Click “Forgot Password” on the login page and \"\n\"follow the email instructions\"\nmsgstr \"**重置密码：** 在登录页点击 “忘记密码”，并根据邮件提示操作\"\n\n#: ../../source/models/xinference_model_hub.rst:49\nmsgid \"**Logout:** Click the avatar in the top-right corner → “Logout”\"\nmsgstr \"**退出登录：** 点击右上角头像 → “退出登录”\"\n\n#: ../../source/models/xinference_model_hub.rst:52\nmsgid \"Guide for Model Maintainers\"\nmsgstr \"模型维护者指南\"\n\n#: ../../source/models/xinference_model_hub.rst:54\nmsgid \"\"\n\"This section is for users with model registration or maintenance \"\n\"permissions. It introduces model registration, maintenance, and the \"\n\"review workflow.\"\nmsgstr \"本节面向拥有模型注册或维护权限的用户，介绍模型注册、维护及审核流程。\"\n\n#: ../../source/models/xinference_model_hub.rst:56\nmsgid \"\"\n\"**Audience:** Users with model registration or maintenance permissions. \"\n\"If you wish to become a model maintainer, you can `contact us \"\n\"<https://xinference.cn/images/WeCom.jpg>`_.\"\nmsgstr \"\"\n\"**适用对象：** 拥有模型注册或维护权限的用户。若希望成为模型维护者，可 \"\n\"`联系我们 <https://xinference.cn/images/WeCom.jpg>`_。\"\n\n#: ../../source/models/xinference_model_hub.rst:62\nmsgid \"\"\n\"Includes all features available to regular users, plus the following \"\n\"advanced functions.\"\nmsgstr \"包含普通用户的全部功能，并额外提供以下高级功能。\"\n\n#: ../../source/models/xinference_model_hub.rst:65\nmsgid \"Model Registration\"\nmsgstr \"模型注册\"\n\n#: ../../source/models/xinference_model_hub.rst:67\nmsgid \"**Function:** Submit new models\"\nmsgstr \"**功能：** 提交新模型\"\n\n#: ../../source/models/xinference_model_hub.rst:68\nmsgid \"\"\n\"**Location:** Click the avatar in the top-right corner → “Model \"\n\"Registration”\"\nmsgstr \"**位置：** 点击右上角头像 → “模型注册”\"\n\n#: ../../source/models/xinference_model_hub.rst:70\n#: ../../source/models/xinference_model_hub.rst:112\nmsgid \"**Operation Steps:**\"\nmsgstr \"**操作步骤：**\"\n\n#: ../../source/models/xinference_model_hub.rst:72\nmsgid \"Fill in basic model information\"\nmsgstr \"填写模型基础信息\"\n\n#: ../../source/models/xinference_model_hub.rst:73\nmsgid \"Complete the README (click “Get README” to auto-generate)\"\nmsgstr \"完善 README（可点击 “获取 README” 自动生成）\"\n\n#: ../../source/models/xinference_model_hub.rst:74\nmsgid \"Submit (for public models, enable the “Public Model” parameter)\"\nmsgstr \"提交（若为公共模型，请启用 “公共模型” 参数）\"\n\n#: ../../source/models/xinference_model_hub.rst:77\nmsgid \"\"\n\"When registering a public model, the system will automatically create a \"\n\"PR in the `xorbitsai/inference` repository. If the user has configured a \"\n\"GitHub Token in their personal settings, the system will use that Token \"\n\"to submit the PR; otherwise, the default Token will be used.\"\nmsgstr \"\"\n\"注册公共模型时，系统会自动在 `xorbitsai/inference` 仓库中创建 PR。\"\n\"若用户已在个人中心配置 GitHub Token，系统将使用该 Token 提交 PR；\"\n\"否则将使用默认 Token。\"\n\n#: ../../source/models/xinference_model_hub.rst:80\nmsgid \"**Notes:**\"\nmsgstr \"**注意事项：**\"\n\n#: ../../source/models/xinference_model_hub.rst:82\nmsgid \"\"\n\"Enterprise model registration requires enabling the “Public Model” \"\n\"parameter first.\"\nmsgstr \"企业模型注册需先启用 “公共模型” 参数。\"\n\n#: ../../source/models/xinference_model_hub.rst:85\nmsgid \"My Models\"\nmsgstr \"我的模型\"\n\n#: ../../source/models/xinference_model_hub.rst:87\nmsgid \"**Function:** View models associated with your account\"\nmsgstr \"**功能：** 查看与当前账户关联的模型\"\n\n#: ../../source/models/xinference_model_hub.rst:88\nmsgid \"**Location:** Click the avatar in the top-right corner → “My Models”\"\nmsgstr \"**位置：** 点击右上角头像 → “我的模型”\"\n\n#: ../../source/models/xinference_model_hub.rst:91\nmsgid \"Model Maintenance\"\nmsgstr \"模型维护\"\n\n#: ../../source/models/xinference_model_hub.rst:93\nmsgid \"**Function:** Modify and manage existing models\"\nmsgstr \"**功能：** 修改与管理已有模型\"\n\n#: ../../source/models/xinference_model_hub.rst:94\nmsgid \"**Location:** Model Details → “Settings” icon\"\nmsgstr \"**位置：** 模型详情页 → “设置” 图标\"\n\n#: ../../source/models/xinference_model_hub.rst:97\nmsgid \"\"\n\"When updating the JSON of a public model or modifying expiration \"\n\"attributes, the system automatically creates a PR in the \"\n\"`xorbitsai/inference` repository.\"\nmsgstr \"当更新公共模型的 JSON 或修改过期属性时，系统会自动在 `xorbitsai/inference` 仓库中创建 PR。\"\n\n#: ../../source/models/xinference_model_hub.rst:100\nmsgid \"Review Workflow\"\nmsgstr \"审核流程\"\n\n#: ../../source/models/xinference_model_hub.rst:102\nmsgid \"**For Submitters:**\"\nmsgstr \"**提交者操作：**\"\n\n#: ../../source/models/xinference_model_hub.rst:104\nmsgid \"Submit a model\"\nmsgstr \"提交模型\"\n\n#: ../../source/models/xinference_model_hub.rst:105\nmsgid \"Check the review status\"\nmsgstr \"查看审核状态\"\n\n#: ../../source/models/xinference_model_hub.rst:106\nmsgid \"Modify based on reviewer feedback\"\nmsgstr \"根据审核反馈进行修改\"\n\n#: ../../source/models/xinference_model_hub.rst:108\nmsgid \"**For Reviewers:**\"\nmsgstr \"**审核者操作：**\"\n\n#: ../../source/models/xinference_model_hub.rst:110\nmsgid \"\"\n\"**Required Permissions:** Model review list access and model review \"\n\"permissions\"\nmsgstr \"**所需权限：** 模型审核列表访问权限与审核权限\"\n\n#: ../../source/models/xinference_model_hub.rst:114\nmsgid \"Enter the review list\"\nmsgstr \"进入审核列表\"\n\n#: ../../source/models/xinference_model_hub.rst:115\nmsgid \"Evaluate model quality and compliance\"\nmsgstr \"评估模型质量与合规性\"\n\n#: ../../source/models/xinference_model_hub.rst:116\nmsgid \"Approve or reject, providing feedback as needed\"\nmsgstr \"根据需要通过或拒绝，并提供审核反馈\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/models/xinference_models_hub.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2025, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-11-14 14:59+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/models/xinference_models_hub.rst:5\nmsgid \"Xinference Models Hub\"\nmsgstr \"Xinference Models Hub\"\n\n#: ../../source/models/xinference_models_hub.rst:9\nmsgid \"Overview\"\nmsgstr \"概述\"\n\n#: ../../source/models/xinference_models_hub.rst:11\nmsgid \"\"\n\"The `Xinference Models Hub <https://model.xinference.io>`_ is Xinference\"\n\"’s unified platform for model management and collaboration. It provides \"\n\"end-to-end support for model browsing, registration, review, updates, and\"\n\" collaborative maintenance, serving both regular users and model \"\n\"maintainers.\"\nmsgstr \"`Xinference Models Hub <https://model.xinference.io>`_ 是 Xinference 用于模型管理与协作的统一平台。它为模型浏览、注册、评审、更新与协作维护提供端到端支持，面向普通用户与模型维护者提供全流程能力。\"\n\n#: ../../source/models/xinference_models_hub.rst:13\nmsgid \"\"\n\"Before the introduction of the Models Hub, model JSON files were manually\"\n\" submitted and modified directly through PRs in the open-source \"\n\"repository (`xorbitsai/inference`). This approach resulted in \"\n\"uncontrolled versioning, long iteration cycles, and delays in delivering \"\n\"updated models—since model updates were tied to product release cycles, \"\n\"users could not obtain new models promptly.\"\nmsgstr \"在引入 Models Hub 之前，模型 JSON 文件需要由用户直接通过 PR 修改 `xorbitsai/inference` 开源仓库。这种方式导致模型版本不可控、迭代周期长、模型更新依赖产品发版流程，用户无法及时获得最新模型。\"\n\n#: ../../source/models/xinference_models_hub.rst:15\nmsgid \"\"\n\"With centralized online model management, the Xinference Models Hub \"\n\"requires that **all model information—including metadata, parameters, and\"\n\" the README—be edited within the platform**. Based on modifications made \"\n\"by :ref:`model maintainers <model_maintainer_guide>`, the system **\"\n\"automatically generates and submits PRs** to the `xorbitsai/inference` \"\n\"repository, ensuring a standardized, automated, and traceable workflow \"\n\"that eliminates inconsistencies caused by manual edits.\"\nmsgstr \"通过集中式在线模型管理机制，Xinference Models Hub 要求 **所有模型信息（含元数据、参数及 README）均在平台中完成编辑**。系统会根据 :ref:`模型维护者 <model_maintainer_guide>` 的修改 **自动生成并提交 PR** 到 `xorbitsai/inference` 仓库，实现流程标准化、自动化与可追溯，避免手动修改带来的不一致问题。\"\n\n#: ../../source/models/xinference_models_hub.rst:17\nmsgid \"\"\n\"Users can obtain the latest model list at any time through the \"\n\":ref:`model_update` feature, significantly improving model delivery \"\n\"efficiency and overall experience.\"\nmsgstr \"用户可通过 :ref:`model_update` 功能随时获取最新模型列表，从而显著提升模型交付效率与整体使用体验。\"\n\n#: ../../source/models/xinference_models_hub.rst:20\nmsgid \"User Guide for Regular Users\"\nmsgstr \"普通用户指南\"\n\n#: ../../source/models/xinference_models_hub.rst:22\nmsgid \"\"\n\"This section introduces the basic features available to regular \"\n\"registered users.\"\nmsgstr \"本节介绍普通注册用户可使用的基础功能。\"\n\n#: ../../source/models/xinference_models_hub.rst:24\nmsgid \"\"\n\"**Audience:** Regular users without model registration or maintenance \"\n\"permissions.\"\nmsgstr \"**适用对象：** 无模型注册或维护权限的普通用户。\"\n\n#: ../../source/models/xinference_models_hub.rst:27\nmsgid \"Core Features\"\nmsgstr \"核心功能\"\n\n#: ../../source/models/xinference_models_hub.rst:29\nmsgid \"Regular users can browse public models without logging in:\"\nmsgstr \"普通用户无需登录即可浏览公开模型：\"\n\n#: ../../source/models/xinference_models_hub.rst:31\nmsgid \"**Access:** `Xinference Models Hub <https://model.xinference.io>`_\"\nmsgstr \"**访问入口：** `Xinference Models Hub <https://model.xinference.io>`_\"\n\n#: ../../source/models/xinference_models_hub.rst:34\nmsgid \"Browse Models\"\nmsgstr \"浏览模型\"\n\n#: ../../source/models/xinference_models_hub.rst:36\nmsgid \"**Function:** View all publicly available models\"\nmsgstr \"**功能：** 查看所有公开可用模型\"\n\n#: ../../source/models/xinference_models_hub.rst:37\nmsgid \"**Location:** Navigation bar → “Models”\"\nmsgstr \"**入口位置：** 导航栏 → “Models”\"\n\n#: ../../source/models/xinference_models_hub.rst:38\nmsgid \"\"\n\"**Model Details:** The default tab is “README,” which includes model \"\n\"description, usage guide, and important notes\"\nmsgstr \"**模型详情：** 默认展示 README 标签，包含模型说明、使用指南与注意事项\"\n\n#: ../../source/models/xinference_models_hub.rst:41\nmsgid \"\"\n\"Certain advanced or enterprise-level models are visible only to \"\n\"authorized users.\"\nmsgstr \"部分高级或企业版模型仅对具备权限的用户可见。\"\n\n#: ../../source/models/xinference_models_hub.rst:46\nmsgid \"Guide for Model Maintainers\"\nmsgstr \"模型维护者指南\"\n\n#: ../../source/models/xinference_models_hub.rst:48\nmsgid \"\"\n\"This section describes the features available to users with model \"\n\"registration or maintenance permissions, including model registration, \"\n\"updates, and review workflows.\"\nmsgstr \"本节介绍具备模型注册或维护权限的用户可使用的功能，包括模型注册、更新与评审流程。\"\n\n#: ../../source/models/xinference_models_hub.rst:50\nmsgid \"\"\n\"**Audience:** Users with model registration or maintenance permissions. \"\n\"To become a model maintainer, you may `contact us \"\n\"<https://xinference.cn/images/WeCom.jpg>`_.\"\nmsgstr \"**适用对象：** 具有模型注册或维护权限的用户。如需成为模型维护者，可 `联系我们 <https://xinference.cn/images/WeCom.jpg>`_。\"\n\n#: ../../source/models/xinference_models_hub.rst:54\nmsgid \"Core Features (Login Required)\"\nmsgstr \"核心功能（需登录）\"\n\n#: ../../source/models/xinference_models_hub.rst:56\nmsgid \"\"\n\"Model maintainers have access to the following advanced features in \"\n\"addition to the capabilities available to regular users.\"\nmsgstr \"模型维护者在普通用户功能基础上，可以使用以下高级能力：\"\n\n#: ../../source/models/xinference_models_hub.rst:59\nmsgid \"User Center\"\nmsgstr \"用户中心\"\n\n#: ../../source/models/xinference_models_hub.rst:61\nmsgid \"**Function:** View and manage personal information\"\nmsgstr \"**功能：** 查看与管理个人信息\"\n\n#: ../../source/models/xinference_models_hub.rst:62\nmsgid \"**Location:** Top-right avatar → “User Center”\"\nmsgstr \"**入口位置：** 右上角头像 → “用户中心”\"\n\n#: ../../source/models/xinference_models_hub.rst:63\nmsgid \"**Account Management:** Update profile, email, and other information\"\nmsgstr \"**账号管理：** 更新个人资料、邮箱等信息\"\n\n#: ../../source/models/xinference_models_hub.rst:64\nmsgid \"\"\n\"**Token Management:** Configure a personal GitHub Token for model \"\n\"submissions or updates\"\nmsgstr \"**Token 管理：** 配置个人 GitHub Token 以提交或更新模型\"\n\n#: ../../source/models/xinference_models_hub.rst:67\nmsgid \"\"\n\"If no GitHub Token is configured, the system will use a default Token \"\n\"when generating PRs.\"\nmsgstr \"若未配置个人 GitHub Token，系统将在生成 PR 时使用默认 Token。\"\n\n#: ../../source/models/xinference_models_hub.rst:70\nmsgid \"Model Registration\"\nmsgstr \"模型注册\"\n\n#: ../../source/models/xinference_models_hub.rst:72\nmsgid \"**Function:** Register new models and submit them for review\"\nmsgstr \"**功能：** 注册新模型并提交评审\"\n\n#: ../../source/models/xinference_models_hub.rst:73\nmsgid \"\"\n\"**Location:** After logging in → Top-right avatar → “Model \"\n\"Registration”\"\nmsgstr \"**入口位置：** 登录后 → 右上角头像 → “模型注册”\"\n\n#: ../../source/models/xinference_models_hub.rst:75\nmsgid \"**Submission Steps:**\"\nmsgstr \"**提交步骤：**\"\n\n#: ../../source/models/xinference_models_hub.rst:77\nmsgid \"Fill in basic model information (name, engine, format, etc.)\"\nmsgstr \"填写基础模型信息（名称、引擎、格式等）\"\n\n#: ../../source/models/xinference_models_hub.rst:78\nmsgid \"Edit the README (click “Get README” to auto-generate a template)\"\nmsgstr \"编辑 README（点击“获取 README”可自动生成模板）\"\n\n#: ../../source/models/xinference_models_hub.rst:79\nmsgid \"\"\n\"Submit the model (enable the “Public Model” parameter if registering a \"\n\"public model)\"\nmsgstr \"提交模型（如需注册公开模型，请启用“公开模型”参数）\"\n\n#: ../../source/models/xinference_models_hub.rst:82\nmsgid \"\"\n\"When registering a public model, the system automatically creates a PR in\"\n\" the `xorbitsai/inference` repository.\"\nmsgstr \"在注册公开模型时，系统将自动在 `xorbitsai/inference` 仓库创建 PR。\"\n\n#: ../../source/models/xinference_models_hub.rst:85\nmsgid \"My Models\"\nmsgstr \"我的模型\"\n\n#: ../../source/models/xinference_models_hub.rst:87\nmsgid \"**Function:** View all models associated with the current account\"\nmsgstr \"**功能：** 查看与当前账号相关的所有模型\"\n\n#: ../../source/models/xinference_models_hub.rst:88\nmsgid \"**Location:** After logging in → Top-right avatar → “My Models”\"\nmsgstr \"**入口位置：** 登录后 → 右上角头像 → “我的模型”\"\n\n#: ../../source/models/xinference_models_hub.rst:91\nmsgid \"Model Maintenance\"\nmsgstr \"模型维护\"\n\n#: ../../source/models/xinference_models_hub.rst:93\nmsgid \"**Function:** Modify the model’s JSON or README\"\nmsgstr \"**功能：** 修改模型的 JSON 或 README\"\n\n#: ../../source/models/xinference_models_hub.rst:94\nmsgid \"**Location:** Model details page → “Settings” icon\"\nmsgstr \"**入口位置：** 模型详情页 → “设置” 图标\"\n\n#: ../../source/models/xinference_models_hub.rst:97\nmsgid \"\"\n\"When updating a public model, the system automatically creates a PR in \"\n\"the `xorbitsai/inference` repository.\"\nmsgstr \"在更新公开模型时，系统将自动在 `xorbitsai/inference` 仓库创建 PR。\"\n\n#: ../../source/models/xinference_models_hub.rst:100\nmsgid \"Review Workflow\"\nmsgstr \"评审流程\"\n\n#: ../../source/models/xinference_models_hub.rst:102\nmsgid \"**Submitter Workflow:**\"\nmsgstr \"**提交者流程：**\"\n\n#: ../../source/models/xinference_models_hub.rst:104\nmsgid \"Submit a model\"\nmsgstr \"提交模型\"\n\n#: ../../source/models/xinference_models_hub.rst:105\nmsgid \"Wait for review\"\nmsgstr \"等待评审\"\n\n#: ../../source/models/xinference_models_hub.rst:106\nmsgid \"Revise based on reviewer feedback\"\nmsgstr \"根据评审意见修改\"\n\n#: ../../source/models/xinference_models_hub.rst:107\nmsgid \"Updated PRs are generated automatically (for public models)\"\nmsgstr \"对于公开模型，PR 会在修改后自动更新\"\n\n#: ../../source/models/xinference_models_hub.rst:109\nmsgid \"\"\n\"**Reviewer Permissions:** Access to the model review list and model \"\n\"review privileges.\"\nmsgstr \"**评审者权限：** 可访问模型评审列表并执行评审操作。\"\n\n#: ../../source/models/xinference_models_hub.rst:111\nmsgid \"**Reviewer Workflow:**\"\nmsgstr \"**评审者流程：**\"\n\n#: ../../source/models/xinference_models_hub.rst:113\nmsgid \"Enter the “Review List”\"\nmsgstr \"进入“评审列表”\"\n\n#: ../../source/models/xinference_models_hub.rst:114\nmsgid \"Evaluate the model’s quality, completeness, and compliance\"\nmsgstr \"评估模型质量、信息完整性与规范性\"\n\n#: ../../source/models/xinference_models_hub.rst:115\nmsgid \"Approve or reject, providing feedback as necessary\"\nmsgstr \"通过或驳回，并给出相应反馈\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/reference/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-28 11:54+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/reference/index.rst:5\nmsgid \"API Reference\"\nmsgstr \"API 指南\"\n\n#: ../../source/reference/index.rst:9\nmsgid \"Client\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client <xinference.client.Client>`\\\\ \"\n\"\\\\(base\\\\_url\\\\[\\\\, api\\\\_key\\\\]\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.describe_model \"\n\"<xinference.client.Client.describe_model>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Get model information via RESTful APIs.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.get_model \"\n\"<xinference.client.Client.get_model>`\\\\ \\\\(model\\\\_uid\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Launch the model based on the parameters on the server via RESTful APIs.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.get_model_registration \"\n\"<xinference.client.Client.get_model_registration>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Get the model with the model type and model name registered on the server.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.get_launch_model_progress \"\n\"<xinference.client.Client.get_launch_model_progress>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Get progress of the specific model.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.cancel_launch_model \"\n\"<xinference.client.Client.cancel_launch_model>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Cancel launching model.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.get_instance_info \"\n\"<xinference.client.Client.get_instance_info>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.launch_model \"\n\"<xinference.client.Client.launch_model>`\\\\ \\\\(model\\\\_name\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.list_model_registrations \"\n\"<xinference.client.Client.list_model_registrations>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"List models registered on the server.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.list_models \"\n\"<xinference.client.Client.list_models>`\\\\ \\\\(\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Retrieve the model specifications from the Server.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.list_cached_models \"\n\"<xinference.client.Client.list_cached_models>`\\\\ \\\\(\\\\[...\\\\]\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Get a list of cached models.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.list_deletable_models \"\n\"<xinference.client.Client.list_deletable_models>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Get the cached models with the model path cached on the server.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.confirm_and_remove_model \"\n\"<xinference.client.Client.confirm_and_remove_model>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Remove the cached models with the model name cached on the server.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.query_engine_by_model_name \"\n\"<xinference.client.Client.query_engine_by_model_name>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Get the engine parameters with the model name registered on the server.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.register_model \"\n\"<xinference.client.Client.register_model>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Register a custom model.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.terminate_model \"\n\"<xinference.client.Client.terminate_model>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Terminate the specific model running on the server.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.abort_request \"\n\"<xinference.client.Client.abort_request>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Abort a request.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.vllm_models \"\n\"<xinference.client.Client.vllm_models>`\\\\ \\\\(\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.login \"\n\"<xinference.client.Client.login>`\\\\ \\\\(username\\\\, ...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.get_workers_info \"\n\"<xinference.client.Client.get_workers_info>`\\\\ \\\\(\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.get_supervisor_info \"\n\"<xinference.client.Client.get_supervisor_info>`\\\\ \\\\(\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.get_progress \"\n\"<xinference.client.Client.get_progress>`\\\\ \\\\(request\\\\_id\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.abort_cluster \"\n\"<xinference.client.Client.abort_cluster>`\\\\ \\\\(\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.Client.unregister_model \"\n\"<xinference.client.Client.unregister_model>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:39:<autosummary>:1\nmsgid \"Unregister a custom model.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:41\nmsgid \"Model Handles\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:45\nmsgid \"ChatModelHandle\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:54:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.ChatModelHandle \"\n\"<xinference.client.handlers.ChatModelHandle>`\\\\\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:54:<autosummary>:1\nmsgid \"\"\n\"alias of \"\n\":py:class:`~xinference.client.restful.restful_client.RESTfulChatModelHandle`\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:54:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.ChatModelHandle.chat \"\n\"<xinference.client.handlers.ChatModelHandle.chat>`\\\\ \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:54:<autosummary>:1\nmsgid \"\"\n\"Given a list of messages comprising a conversation, the model will return\"\n\" a response via RESTful APIs.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:54:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.ChatModelHandle.generate \"\n\"<xinference.client.handlers.ChatModelHandle.generate>`\\\\ \\\\(prompt\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:54:<autosummary>:1\n#: ../../source/reference/index.rst:84:<autosummary>:1\nmsgid \"\"\n\"Creates a completion for the provided prompt and parameters via RESTful \"\n\"APIs.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:56\nmsgid \"EmbeddingModelHandle\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:64:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.EmbeddingModelHandle \"\n\"<xinference.client.handlers.EmbeddingModelHandle>`\\\\\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:64:<autosummary>:1\nmsgid \"\"\n\"alias of \"\n\":py:class:`~xinference.client.restful.restful_client.RESTfulEmbeddingModelHandle`\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:64:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.EmbeddingModelHandle.create_embedding\"\n\" <xinference.client.handlers.EmbeddingModelHandle.create_embedding>`\\\\ \"\n\"\\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:64:<autosummary>:1\nmsgid \"Create an Embedding from user input via RESTful APIs.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:66\nmsgid \"RerankModelHandle\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:74:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.restful.restful_client.RESTfulRerankModelHandle\"\n\" <xinference.client.restful.restful_client.RESTfulRerankModelHandle>`\\\\ \"\n\"\\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:74:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.restful.restful_client.RESTfulRerankModelHandle.rerank\"\n\" \"\n\"<xinference.client.restful.restful_client.RESTfulRerankModelHandle.rerank>`\\\\\"\n\" \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:74:<autosummary>:1\nmsgid \"\"\n\"Returns an ordered list of documents ordered by their relevance to the \"\n\"provided query.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:76\nmsgid \"GenerateModelHandle\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:84:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.GenerateModelHandle \"\n\"<xinference.client.handlers.GenerateModelHandle>`\\\\\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:84:<autosummary>:1\nmsgid \"\"\n\"alias of \"\n\":py:class:`~xinference.client.restful.restful_client.RESTfulGenerateModelHandle`\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:84:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.GenerateModelHandle.generate \"\n\"<xinference.client.handlers.GenerateModelHandle.generate>`\\\\ \\\\(prompt\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:86\nmsgid \"ImageModelHandle\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:94:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.ImageModelHandle \"\n\"<xinference.client.handlers.ImageModelHandle>`\\\\\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:94:<autosummary>:1\nmsgid \"\"\n\"alias of \"\n\":py:class:`~xinference.client.restful.restful_client.RESTfulImageModelHandle`\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:94:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.ImageModelHandle.text_to_image \"\n\"<xinference.client.handlers.ImageModelHandle.text_to_image>`\\\\ \"\n\"\\\\(prompt\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:94:<autosummary>:1\nmsgid \"Creates an image by the input text.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:96\nmsgid \"AudioModelHandle\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:106:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.AudioModelHandle \"\n\"<xinference.client.handlers.AudioModelHandle>`\\\\\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:106:<autosummary>:1\nmsgid \"\"\n\"alias of \"\n\":py:class:`~xinference.client.restful.restful_client.RESTfulAudioModelHandle`\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:106:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.AudioModelHandle.transcriptions \"\n\"<xinference.client.handlers.AudioModelHandle.transcriptions>`\\\\ \"\n\"\\\\(audio\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:106:<autosummary>:1\nmsgid \"Transcribes audio into the input language.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:106:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.AudioModelHandle.translations \"\n\"<xinference.client.handlers.AudioModelHandle.translations>`\\\\ \\\\(audio\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:106:<autosummary>:1\nmsgid \"Translates audio into English.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:106:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.AudioModelHandle.speech \"\n\"<xinference.client.handlers.AudioModelHandle.speech>`\\\\ \\\\(input\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:106:<autosummary>:1\nmsgid \"Generates audio from the input text.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:108\nmsgid \"FlexibleModelHandle\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:116:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.restful.restful_client.RESTfulFlexibleModelHandle\"\n\" <xinference.client.restful.restful_client.RESTfulFlexibleModelHandle>`\\\\\"\n\" \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:116:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.restful.restful_client.RESTfulFlexibleModelHandle.infer\"\n\" \"\n\"<xinference.client.restful.restful_client.RESTfulFlexibleModelHandle.infer>`\\\\\"\n\" \\\\(...\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:116:<autosummary>:1\nmsgid \"Call flexible model.\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:118\nmsgid \"VideoModelHandle\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:124:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.VideoModelHandle \"\n\"<xinference.client.handlers.VideoModelHandle>`\\\\\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:124:<autosummary>:1\nmsgid \"\"\n\"alias of \"\n\":py:class:`~xinference.client.restful.restful_client.RESTfulVideoModelHandle`\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:124:<autosummary>:1\nmsgid \"\"\n\":py:obj:`xinference.client.handlers.VideoModelHandle.text_to_video \"\n\"<xinference.client.handlers.VideoModelHandle.text_to_video>`\\\\ \"\n\"\\\\(prompt\\\\)\"\nmsgstr \"\"\n\n#: ../../source/reference/index.rst:124:<autosummary>:1\nmsgid \"Creates a video by the input text.\"\nmsgstr \"\"\n\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/reference.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-07-18 10:54+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/reference/index.rst:5\nmsgid \"API Reference\"\nmsgstr \"API 指南\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/user_guide/auth_system.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-03-19 12:55+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/user_guide/auth_system.rst:5\nmsgid \"Simple OAuth2 System (experimental)\"\nmsgstr \"OAuth2 系统（实验性质）\"\n\n#: ../../source/user_guide/auth_system.rst:7\nmsgid \"\"\n\"Xinference builds an In-memory OAuth2 authentication and authorization \"\n\"system using the account-password mode.\"\nmsgstr \"\"\n\"Xinference 使用了账号密码的模式构建了一个基于内存的 OAuth2 的身份验证和\"\n\"授权系统。\"\n\n#: ../../source/user_guide/auth_system.rst:10\nmsgid \"\"\n\"If you don't have authentication and authorization requirements, you can \"\n\"use Xinference as before, without any changes.\"\nmsgstr \"\"\n\"如果没有身份验证和授权的要求，可以像之前一样使用 Xinference，无需任何改动\"\n\"。\"\n\n#: ../../source/user_guide/auth_system.rst:14\nmsgid \"Permissions\"\nmsgstr \"权限\"\n\n#: ../../source/user_guide/auth_system.rst:15\nmsgid \"\"\n\"Currently, Xinference system internally defines some interface \"\n\"permissions:\"\nmsgstr \"目前，Xinference 内部定义了以下几个接口权限：\"\n\n#: ../../source/user_guide/auth_system.rst:17\nmsgid \"``models:list``: Permission to list models and get models' information.\"\nmsgstr \"``models:list``: 获取模型列表和信息的权限。\"\n\n#: ../../source/user_guide/auth_system.rst:18\nmsgid \"``models:read``: Permission to use models.\"\nmsgstr \"``models:read``: 使用模型的权限。\"\n\n#: ../../source/user_guide/auth_system.rst:19\nmsgid \"``models:register``: Permission to register custom models.\"\nmsgstr \"``models:register``: 注册模型的权限。\"\n\n#: ../../source/user_guide/auth_system.rst:20\nmsgid \"``models:unregister``: Permission to unregister custom models.\"\nmsgstr \"``models:unregister``: 取消注册模型的权限。\"\n\n#: ../../source/user_guide/auth_system.rst:21\nmsgid \"``models:start``: Permission to launch models.\"\nmsgstr \"``models:start``: 启动模型的权限。\"\n\n#: ../../source/user_guide/auth_system.rst:22\nmsgid \"``models:stop``: Permission to stop running models.\"\nmsgstr \"``models:stop``: 停止模型的权限。\"\n\n#: ../../source/user_guide/auth_system.rst:23\nmsgid \"``admin``: Administrators have permissions for all interfaces.\"\nmsgstr \"``admin``: 管理员拥有所有接口的权限。\"\n\n#: ../../source/user_guide/auth_system.rst:27\nmsgid \"Startup\"\nmsgstr \"开始使用\"\n\n#: ../../source/user_guide/auth_system.rst:28\nmsgid \"\"\n\"All authentication and authorization information needs to be specified \"\n\"and loaded into memory when Xinference is started. Xinference requires a \"\n\"JSON-formatted file with the following specific fields:\"\nmsgstr \"\"\n\"在启动 Xinference 时，需要指定所有的验证和授权信息。当前，Xinference 需要\"\n\"一个 JSON 文件，其中包含以下特定字段：\"\n\n#: ../../source/user_guide/auth_system.rst:67\nmsgid \"\"\n\"``auth_config``: This field is used to configure security-related \"\n\"information.\"\nmsgstr \"``auth_config``: 这个字段配置与安全相关的信息。\"\n\n#: ../../source/user_guide/auth_system.rst:69\nmsgid \"\"\n\"``algorithm``: The algorithm used for token generation and parsing. \"\n\"``HS`` series algorithms are recommended. For example, ``HS256``, \"\n\"``HS384`` or ``HS512``.\"\nmsgstr \"\"\n\"``algorithm``: 用于令牌生成与解析的算法。推荐使用 ``HS`` 系列算法，例如 `\"\n\"`HS256``，``HS384`` 或者 ``HS512`` 算法。\"\n\n#: ../../source/user_guide/auth_system.rst:71\nmsgid \"\"\n\"``secret_key``: The secret_key used for token generation and parsing. Use\"\n\" this command to generate the secret_key adapted to the ``HS`` \"\n\"algorithms: ``openssl rand -hex 32``.\"\nmsgstr \"\"\n\"``secret_key``: 用于令牌生成和解析的密钥。可以使用该命令生成适配 ``HS`` \"\n\"系列算法的密钥：``openssl rand -hex 32`` 。\"\n\n#: ../../source/user_guide/auth_system.rst:73\nmsgid \"\"\n\"``token_expire_in_minutes``: Reserved field indicating the expiration \"\n\"time of the token. The current open-source version of Xinference does not\"\n\" check the expiration time of tokens.\"\nmsgstr \"\"\n\"``token_expire_in_minutes``: 保留字段，表示令牌失效时间。目前 Xinference \"\n\"开源版本不会检查令牌过期时间。\"\n\n#: ../../source/user_guide/auth_system.rst:75\nmsgid \"\"\n\"``user_config``: This field is used to configure user and permission \"\n\"information. Each user information is composed of these fields:\"\nmsgstr \"\"\n\"``user_config``: 这个字段用来配置用户和权限信息。每个用户信息由以下字段\"\n\"组成：\"\n\n#: ../../source/user_guide/auth_system.rst:77\nmsgid \"``username``: string field for username.\"\nmsgstr \"``username``: 字符串，表示用户名\"\n\n#: ../../source/user_guide/auth_system.rst:79\nmsgid \"``password``: string field for password.\"\nmsgstr \"``password``: 字符串，表示密码\"\n\n#: ../../source/user_guide/auth_system.rst:81\nmsgid \"\"\n\"``permissions``: A list containing strings representing the permissions \"\n\"that this user has. The permissions are described as above.\"\nmsgstr \"\"\n\"``permissions``: 字符串列表，表示该用户拥有的权限。权限描述如上权限部分\"\n\"文档所述。\"\n\n#: ../../source/user_guide/auth_system.rst:83\nmsgid \"\"\n\"``api_keys``: A list containing strings representing the api-keys of this\"\n\" user. With these api-keys, user can access the xinference interfaces \"\n\"without the need to signin. The api-key here is formatted similar to the \"\n\"``OPENAI_API_KEY`` , always starting with ``sk-``, followed by 13 \"\n\"alphanumeric characters.\"\nmsgstr \"\"\n\"``api_keys``: 字符串列表，表示该用户拥有的 api-key 。用户可以通过这些 api\"\n\"-key ，无需登录步骤即可访问 xinference 接口。这里的 api_key 组成与 ``\"\n\"OPENAI_API_KEY`` 相似，总是以 ``sk-`` 开头，后跟 13 个数字、大小写字母。\"\n\n#: ../../source/user_guide/auth_system.rst:86\nmsgid \"\"\n\"Once you have configured such a JSON file, use the ``--auth-config`` \"\n\"option to enable Xinference with the authentication and authorization \"\n\"system. For example, for local startup:\"\nmsgstr \"\"\n\"配置好这样一个 JSON 文件后，可以使用 ``--auth-config`` 选项启用具有\"\n\"身份验证和授权系统的 Xinference。例如，本地启动的命令如下所示：\"\n\n#: ../../source/user_guide/auth_system.rst:93\nmsgid \"\"\n\"For distributed startup, just specify this option when starting the \"\n\"supervisor:\"\nmsgstr \"在分布式环境下，只需要在启动 supervisor 时指定这个选项：\"\n\n#: ../../source/user_guide/auth_system.rst:101\nmsgid \"Usage\"\nmsgstr \"使用\"\n\n#: ../../source/user_guide/auth_system.rst:102\nmsgid \"\"\n\"For Xinference with the authentication and authorization system enabled, \"\n\"all usage remains the same, except for the addition of a login step at \"\n\"the beginning or using the api-key.\"\nmsgstr \"\"\n\"使用带有权限管理的 Xinference 服务与正常的版本保持一致，只是在开始阶段\"\n\"添加了登录步骤，或者使用 api-key 进行鉴权。\"\n\n#: ../../source/user_guide/auth_system.rst:105\nmsgid \"Signin\"\nmsgstr \"基于用户名-密码的使用方式\"\n\n#: ../../source/user_guide/auth_system.rst:106\nmsgid \"Signin for command line users:\"\nmsgstr \"使用命令行登录：\"\n\n#: ../../source/user_guide/auth_system.rst:113\nmsgid \"For python SDK users:\"\nmsgstr \"使用 Python SDK 登录：\"\n\n#: ../../source/user_guide/auth_system.rst:122\nmsgid \"\"\n\"For web UI users, when opening the web UI, you will first be directed to \"\n\"the login page. After logging in, you can use the web UI normally.\"\nmsgstr \"\"\n\"对于 Web UI 的用户，在打开 Web UI 时，将首先跳转到登录页面。登录后，就\"\n\"可以正常使用Web UI 的功能。\"\n\n#: ../../source/user_guide/auth_system.rst:125\nmsgid \"Api-Key\"\nmsgstr \"基于 Api-Key 鉴权的使用方式\"\n\n#: ../../source/user_guide/auth_system.rst:126\nmsgid \"\"\n\"For command line users, just add ``--api-key`` or ``-ak`` option in the \"\n\"command you want to use.\"\nmsgstr \"\"\n\"对于命令行用户，仅需在所要运行的命令上新增 ``--api-key`` 或 ``-ak`` 选项\"\n\"即可。\"\n\n#: ../../source/user_guide/auth_system.rst:133\nmsgid \"\"\n\"For python SDK users, pass the ``api_key`` parameter when initializing \"\n\"the client, just like the ``OPENAI`` Python client.\"\nmsgstr \"\"\n\"对于 Python 客户端用户，在客户端对象初始化时传入 ``api_key`` 参数即可，就\"\n\"像 ``OPENAI`` 客户端那样。\"\n\n#: ../../source/user_guide/auth_system.rst:141\nmsgid \"Xinference is also compatible with the ``OPENAI`` Python SDK as well.\"\nmsgstr \"当然，Xinference 也与 ``OPENAI`` Python 客户端的使用方式完全兼容。\"\n\n#: ../../source/user_guide/auth_system.rst:149\nmsgid \"\"\n\"For http request, pass ``Authorization: Bearer api-key`` in request \"\n\"header.\"\nmsgstr \"对于 HTTP 请求，在请求头中传递 ``Authorization: Bearer api-key``。\"\n\n#: ../../source/user_guide/auth_system.rst:159\nmsgid \"Http Status Code\"\nmsgstr \"Http 状态码\"\n\n#: ../../source/user_guide/auth_system.rst:160\nmsgid \"Add the following two HTTP status codes:\"\nmsgstr \"添加了以下两种 HTTP 状态码：\"\n\n#: ../../source/user_guide/auth_system.rst:162\nmsgid \"``401 Unauthorized``: login information or token verifies failed.\"\nmsgstr \"``401 Unauthorized``: 登录信息或者令牌验证失效。\"\n\n#: ../../source/user_guide/auth_system.rst:163\nmsgid \"``403 Forbidden``: No enough permissions when accessing interfaces.\"\nmsgstr \"``403 Forbidden``: 没有足够的权限访问接口。\"\n\n#: ../../source/user_guide/auth_system.rst:165\nmsgid \"\"\n\"For the command line, SDK, or web UI users, there will be clear \"\n\"information prompts when encountering authorization and permissions \"\n\"issues.\"\nmsgstr \"\"\n\"对于命令行、SDK 或 Web UI 用户，在遇到授权和权限问题时，会有明确的信息\"\n\"提示。\"\n\n#: ../../source/user_guide/auth_system.rst:169\nmsgid \"Note\"\nmsgstr \"注意\"\n\n#: ../../source/user_guide/auth_system.rst:170\nmsgid \"\"\n\"This feature is still in an experimental stage. Feel free to provide \"\n\"feedback on usage issues or improvement suggestions through `GitHub \"\n\"issues <https://github.com/xorbitsai/inference/issues>`_ or `our Slack \"\n\"<https://join.slack.com/t/xorbitsio/shared_invite/zt-1o3z9ucdh-\"\n\"RbfhbPVpx7prOVdM1CAuxg>`_.\"\nmsgstr \"\"\n\"该功能处于实验阶段。欢迎通过 `GitHub issues <https://github.com/xorbitsai\"\n\"/inference/issues>`_ 或者 `Slack <https://join.slack.com/t/xorbitsio/\"\n\"shared_invite/zt-1o3z9ucdh-RbfhbPVpx7prOVdM1CAuxg>`_ 提供反馈和建议。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/user_guide/backends.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-28 11:54+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/user_guide/backends.rst:5\nmsgid \"Backends\"\nmsgstr \"推理引擎\"\n\n#: ../../source/user_guide/backends.rst:7\nmsgid \"\"\n\"Xinference supports multiple backends for different models. After the \"\n\"user specifies the model, xinference will automatically select the \"\n\"appropriate backend.\"\nmsgstr \"Xinference 对于不同模型支持不同的推理引擎。用户选择模型后，Xinference 会自动选择合适的引擎\"\n\n#: ../../source/user_guide/backends.rst:11\nmsgid \"llama.cpp\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:13\nmsgid \"\"\n\"Xinference now supports `xllamacpp \"\n\"<https://github.com/xorbitsai/xllamacpp>`_ which developed by Xinference \"\n\"team to run llama.cpp backend. `llama.cpp` is developed based on the \"\n\"tensor library `ggml`, supporting inference of the LLaMA series models \"\n\"and their variants.\"\nmsgstr \"\"\n\"Xinference 目前支持由 Xinference 团队开发的 `xllamacpp \"\n\"<https://github.com/xorbitsai/xllamacpp>`_ 作为 llama.cpp 后端运行。`llama.cpp` \"\n\"基于张量库 `ggml` 开发，支持 LLaMA 系列模型及其变体的推理。\"\n\n#: ../../source/user_guide/backends.rst:20\nmsgid \"\"\n\"Since Xinference v1.5.0, ``xllamacpp`` becomes default option for \"\n\"llama.cpp, and ``llama-cpp-python`` is deprecated. Since Xinference \"\n\"v1.6.0, ``llama-cpp-python`` has been removed.\"\nmsgstr \"\"\n\"自 Xinference v1.5.0 起，``xllamacpp`` 成为 llama.cpp 的默认选项，``llama-cpp-\"\n\"python`` 被弃用；从 Xinference v1.6.0 开始，``llama-cpp-python`` 已被移除。\"\n\n#: ../../source/user_guide/backends.rst:25\nmsgid \"\"\n\"For all configurable llama.cpp parameters, please refer to the definition\"\n\" of the ``common_params`` structure in ``llama.cpp`` `common.h \"\n\"<https://github.com/ggml-org/llama.cpp/blob/master/common/common.h>`_\"\nmsgstr \"\"\n\"请参考 ``llama.cpp`` 的 `common.h <https://github.com/ggml-\"\n\"org/llama.cpp/blob/master/common/common.h>`_ 中 ``common_params`` \"\n\"结构体定义设置参数。\"\n\n#: ../../source/user_guide/backends.rst:27\nmsgid \"\"\n\"There may be some nested parameters. For example, ``sampling.top_k``. \"\n\"Just use the ``.`` to separate nested parameters.\"\nmsgstr \"可能会有嵌套多层的参数。例如，``sampling.top_k``。请使用 ``.`` 来分割嵌套参数。\"\n\n#: ../../source/user_guide/backends.rst:29\nmsgid \"Here is an example of setting nested sampling parameters in WebUI:\"\nmsgstr \"这里有一个在 WebUI 中设置嵌套 sampling 参数的例子：\"\n\n#: ../../source/user_guide/backends.rst:36\nmsgid \"Auto NGL\"\nmsgstr \"自动 NGL\"\n\n#: ../../source/user_guide/backends.rst:38\nmsgid \"\"\n\"Auto GPU layers estimation is enabled since v1.6.1 when ``n-gpu-layers`` \"\n\"is not specified (default is -1).\"\nmsgstr \"自 v1.6.1 起，当未指定 n-gpu-layers（默认为 -1）时，将自动启用 GPU 层数估算功能。\"\n\n#: ../../source/user_guide/backends.rst:41\nmsgid \"\"\n\"This feature automatically detects the number of GPU layers (NGL) for the\"\n\" llama.cpp backend. Please be aware that this is not an accurate \"\n\"calculation. Therefore, the ``-ngl`` result might not be the most \"\n\"optimized, and there is still a chance of encountering an out-of-memory \"\n\"error.\"\nmsgstr \"\"\n\"这个特性可以为 llama.cpp 后端自动设置 GPU 层数（NGL）。请注意这并不是一个精确的计算，因此 ``-ngl`` \"\n\"结果可能不是最优的，并且仍然可能遇到显存不足的错误。\"\n\n#: ../../source/user_guide/backends.rst:45\nmsgid \"\"\n\"Currently, there is no official implementation for auto ngl. Please refer\"\n\" to the following issues for more information:\"\nmsgstr \"目前自动 NGL 没有官方支持。请参考下面 issue 来了解更多详情：\"\n\n#: ../../source/user_guide/backends.rst:47\nmsgid \"https://github.com/ggml-org/llama.cpp/issues/13860\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:48\nmsgid \"https://github.com/ggml-org/llama.cpp/pull/6502\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:50\nmsgid \"\"\n\"Our implementation is based on the Ollama auto ngl, but there are some \"\n\"differences:\"\nmsgstr \"我们的实现是基于 Ollama 的自动 NGL，但是有一些不同之处：\"\n\n#: ../../source/user_guide/backends.rst:52\nmsgid \"\"\n\"We utilize device information detected by `xllamacpp \"\n\"<https://github.com/xorbitsai/xllamacpp>`_.\"\nmsgstr \"我们使用 `xllamacpp <https://github.com/xorbitsai/xllamacpp>`_ 提供的设备信息。\"\n\n#: ../../source/user_guide/backends.rst:53\nmsgid \"\"\n\"We have removed support for less popular architectures, these \"\n\"architectures will use the default calculation.\"\nmsgstr \"我们删除了一些不常见的架构支持，这些架构下会使用默认计算逻辑。\"\n\n#: ../../source/user_guide/backends.rst:54\nmsgid \"\"\n\"We fall back to offloading all the layers to the GPU if the auto ngl \"\n\"fails.\"\nmsgstr \"如果自动 NGL 失败，我们会尝试全部加载到 GPU。\"\n\n#: ../../source/user_guide/backends.rst:55\nmsgid \"\"\n\"We do not support multimodal projectors embedded into the model GGUF, as \"\n\"this is a very experimental feature.\"\nmsgstr \"我们不支持多模态投影器内嵌到模型的 GGUF，这种格式的模型目前还处于实验阶段。\"\n\n#: ../../source/user_guide/backends.rst:59\nmsgid \"Common Issues\"\nmsgstr \"常见问题\"\n\n#: ../../source/user_guide/backends.rst:61\n#, python-brace-format\nmsgid \"\"\n\"**Server error: {'code': 500, 'message': 'failed to process image', \"\n\"'type': 'server_error'}**\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:63\n#: ../../source/user_guide/backends.rst:87\nmsgid \"The error logs from server:\"\nmsgstr \"服务端日志：\"\n\n#: ../../source/user_guide/backends.rst:78\nmsgid \"\"\n\"This could be caused by running out of memory. You can try reducing \"\n\"memory usage by decreasing ``n_ctx``.\"\nmsgstr \"可能由于内存不足导致。你可以尝试减小 ``n_ctx`` 解决。\"\n\n#: ../../source/user_guide/backends.rst:80\n#, python-brace-format\nmsgid \"\"\n\"**Server error: {'code': 400, 'message': 'the request exceeds the \"\n\"available context size. try increasing the context size or enable context\"\n\" shift', 'type': 'invalid_request_error'}**\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:82\nmsgid \"\"\n\"If you are using the multimodal feature, the ``ctx_shift`` is disabled by\"\n\" default. Please increase the context size by either increasing ``n_ctx``\"\n\" or reducing ``n_parallel``.\"\nmsgstr \"\"\n\"如果你正在使用 multimodal 功能，``ctx_shift`` 会被默认关闭。请尝试增加 ``n_ctx`` 或者减小 \"\n\"``n_parallel`` 以增加每个 slot 的 context 大小。\"\n\n#: ../../source/user_guide/backends.rst:85\n#, python-brace-format\nmsgid \"\"\n\"**Server error: {'code': 500, 'message': 'Input prompt is too big \"\n\"compared to KV size. Please try increasing KV size.', 'type': \"\n\"'server_error'}**\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:97\nmsgid \"\"\n\"This could be caused by the KV cache allocation failure. You can try to \"\n\"reduce the context size by either reducing ``n_ctx`` or increasing \"\n\"``n_parallel``, or loading a partial model onto the GPU by adjusting \"\n\"``n_gpu_layers``. Be aware that if you are handling inference requests \"\n\"serially, increasing ``n_parallel`` can't improve the latency or \"\n\"throughput.\"\nmsgstr \"\"\n\"可能由于 KV cache 创建失败导致。你可以通过减小 ``n_ctx`` 或者增加 ``n_parallel`` 或者调节 \"\n\"``n_gpu_layers`` 参数加载部分模型到 GPU 来解决。请注意，如果你只处理串行推理请求，增加 ``n_parallel`` \"\n\"并不会带来性能提升。\"\n\n#: ../../source/user_guide/backends.rst:102\nmsgid \"transformers\"\nmsgstr \"transformers\"\n\n#: ../../source/user_guide/backends.rst:103\nmsgid \"\"\n\"Transformers supports the inference of most state-of-art models. It is \"\n\"the default backend for models in PyTorch format.\"\nmsgstr \"Transformers 支持绝大部分新出的模型。是 Pytorch 格式模型默认使用的引擎。\"\n\n#: ../../source/user_guide/backends.rst:108\nmsgid \"vLLM\"\nmsgstr \"vLLM\"\n\n#: ../../source/user_guide/backends.rst:109\nmsgid \"vLLM is a fast and easy-to-use library for LLM inference and serving.\"\nmsgstr \"vLLM 是一个非常高效并且易用的大语言模型推理引擎。\"\n\n#: ../../source/user_guide/backends.rst:111\nmsgid \"vLLM is fast with:\"\nmsgstr \"vLLM 具有以下特点：\"\n\n#: ../../source/user_guide/backends.rst:113\nmsgid \"State-of-the-art serving throughput\"\nmsgstr \"领先的推理吞吐量\"\n\n#: ../../source/user_guide/backends.rst:114\nmsgid \"Efficient management of attention key and value memory with PagedAttention\"\nmsgstr \"使用 PagedAttention 高效管理注意力键和值记忆\"\n\n#: ../../source/user_guide/backends.rst:115\nmsgid \"Continuous batching of incoming requests\"\nmsgstr \"对传入请求进行连续批处理\"\n\n#: ../../source/user_guide/backends.rst:116\nmsgid \"Optimized CUDA kernels\"\nmsgstr \"优化的 CUDA 内核\"\n\n#: ../../source/user_guide/backends.rst:118\nmsgid \"\"\n\"When the following conditions are met, Xinference will choose vLLM as the\"\n\" inference engine:\"\nmsgstr \"当满足以下条件时，Xinference 会自动选择 vLLM 作为推理引擎：\"\n\n#: ../../source/user_guide/backends.rst:120\nmsgid \"\"\n\"The model format is ``pytorch``, ``gptq``, ``awq``, ``fp4``, ``fp8`` or \"\n\"``bnb``.\"\nmsgstr \"模型格式为 ``pytorch`` ， ``gptq`` ， ``awq`` ， ``fp4`` ， ``fp8`` 或者 ``bnb`` 。\"\n\n#: ../../source/user_guide/backends.rst:121\nmsgid \"When the model format is ``pytorch``, the quantization is ``none``.\"\nmsgstr \"当模型格式为 ``pytorch`` 时，量化选项需为 ``none`` 。\"\n\n#: ../../source/user_guide/backends.rst:122\nmsgid \"When the model format is ``awq``, the quantization is ``Int4``.\"\nmsgstr \"当模型格式为 ``awq`` 时，量化选项需为 ``Int4`` 。\"\n\n#: ../../source/user_guide/backends.rst:123\nmsgid \"\"\n\"When the model format is ``gptq``, the quantization is ``Int3``, ``Int4``\"\n\" or ``Int8``.\"\nmsgstr \"当模型格式为 ``gptq`` 时，量化选项需为 ``Int3``, ``Int4`` 或 ``Int8`` 。\"\n\n#: ../../source/user_guide/backends.rst:124\nmsgid \"The system is Linux and has at least one CUDA device\"\nmsgstr \"操作系统为 Linux 并且至少有一个支持 CUDA 的设备\"\n\n#: ../../source/user_guide/backends.rst:125\nmsgid \"\"\n\"The model family (for custom models) / model name (for builtin models) is\"\n\" within the list of models supported by vLLM\"\nmsgstr \"自定义模型的 ``model_family`` 字段和内置模型的 ``model_name`` 字段在 vLLM 的支持列表中。\"\n\n#: ../../source/user_guide/backends.rst:127\nmsgid \"Currently, supported model includes:\"\nmsgstr \"目前，支持的模型包括：\"\n\n#: ../../source/user_guide/backends.rst:131\nmsgid \"\"\n\"``code-llama``, ``code-llama-instruct``, ``code-llama-python``, \"\n\"``deepseek``, ``deepseek-chat``, ``deepseek-coder``, ``deepseek-coder-\"\n\"instruct``, ``deepseek-r1-distill-llama``, ``gorilla-openfunctions-v2``, \"\n\"``HuatuoGPT-o1-LLaMA-3.1``, ``llama-2``, ``llama-2-chat``, ``llama-3``, \"\n\"``llama-3-instruct``, ``llama-3.1``, ``llama-3.1-instruct``, \"\n\"``llama-3.3-instruct``, ``tiny-llama``, ``wizardcoder-python-v1.0``, \"\n\"``wizardmath-v1.0``, ``Yi``, ``Yi-1.5``, ``Yi-1.5-chat``, ``Yi-1.5-chat-\"\n\"16k``, ``Yi-200k``, ``Yi-chat``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:132\nmsgid \"\"\n\"``codestral-v0.1``, ``mistral-instruct-v0.1``, ``mistral-instruct-v0.2``,\"\n\" ``mistral-instruct-v0.3``, ``mistral-large-instruct``, ``mistral-nemo-\"\n\"instruct``, ``mistral-v0.1``, ``openhermes-2.5``, ``seallm_v2``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:133\nmsgid \"\"\n\"``Baichuan-M2``, ``codeqwen1.5``, ``codeqwen1.5-chat``, ``deepseek-r1\"\n\"-distill-qwen``, ``DianJin-R1``, ``fin-r1``, ``HuatuoGPT-o1-Qwen2.5``, \"\n\"``KAT-V1``, ``marco-o1``, ``qwen1.5-chat``, ``qwen2-instruct``, \"\n\"``qwen2.5``, ``qwen2.5-coder``, ``qwen2.5-coder-instruct``, \"\n\"``qwen2.5-instruct``, ``qwen2.5-instruct-1m``, ``qwenLong-l1``, ``QwQ-\"\n\"32B``, ``QwQ-32B-Preview``, ``seallms-v3``, ``skywork-or1``, ``skywork-\"\n\"or1-preview``, ``XiYanSQL-QwenCoder-2504``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:134\nmsgid \"``llama-3.2-vision``, ``llama-3.2-vision-instruct``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:135\nmsgid \"``baichuan-2``, ``baichuan-2-chat``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:136\nmsgid \"``InternLM2ForCausalLM``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:137\nmsgid \"``qwen-chat``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:138\nmsgid \"\"\n\"``mixtral-8x22B-instruct-v0.1``, ``mixtral-instruct-v0.1``, \"\n\"``mixtral-v0.1``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:139\nmsgid \"``cogagent``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:140\nmsgid \"``glm-edge-chat``, ``glm4-chat``, ``glm4-chat-1m``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:141\nmsgid \"``codegeex4``, ``glm-4v``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:142\nmsgid \"``seallm_v2.5``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:143\nmsgid \"``orion-chat``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:144\nmsgid \"``qwen1.5-moe-chat``, ``qwen2-moe-instruct``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:145\nmsgid \"``CohereForCausalLM``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:146\nmsgid \"\"\n\"``deepseek-v2-chat``, ``deepseek-v2-chat-0628``, ``deepseek-v2.5``, \"\n\"``deepseek-vl2``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:147\nmsgid \"\"\n\"``deepseek-prover-v2``, ``deepseek-r1``, ``deepseek-r1-0528``, \"\n\"``deepseek-v3``, ``deepseek-v3-0324``, ``Deepseek-V3.1``, ``moonlight-\"\n\"16b-a3b-instruct``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:148\nmsgid \"``deepseek-r1-0528-qwen3``, ``qwen3``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:149\nmsgid \"``minicpm3-4b``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:150\nmsgid \"``internlm3-instruct``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:151\nmsgid \"``gemma-3-1b-it``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:152\nmsgid \"``glm4-0414``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:153\nmsgid \"\"\n\"``minicpm-2b-dpo-bf16``, ``minicpm-2b-dpo-fp16``, ``minicpm-2b-dpo-\"\n\"fp32``, ``minicpm-2b-sft-bf16``, ``minicpm-2b-sft-fp32``, ``minicpm4``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:154\nmsgid \"``Ernie4.5``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:155\nmsgid \"``Qwen3-Coder``, ``Qwen3-Instruct``, ``Qwen3-Thinking``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:156\nmsgid \"``glm-4.5``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:157\nmsgid \"``gpt-oss``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:158\nmsgid \"``seed-oss``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:159\nmsgid \"``Qwen3-Next-Instruct``, ``Qwen3-Next-Thinking``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:160\nmsgid \"``DeepSeek-V3.2``, ``DeepSeek-V3.2-Exp``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:161\nmsgid \"``MiniMax-M2``\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:167\nmsgid \"SGLang\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:168\nmsgid \"\"\n\"`SGLang <https://github.com/sgl-project/sglang>`_ has a high-performance \"\n\"inference runtime with RadixAttention. It significantly accelerates the \"\n\"execution of complex LLM programs by automatic KV cache reuse across \"\n\"multiple calls. And it also supports other common techniques like \"\n\"continuous batching and tensor parallelism.\"\nmsgstr \"\"\n\"`SGLang <https://github.com/sgl-project/sglang>`_ 具有基于 RadixAttention \"\n\"的高性能推理运行时。它通过在多个调用之间自动重用KV缓存，显著加速了复杂 LLM \"\n\"程序的执行。它还支持其他常见推理技术，如连续批处理和张量并行处理。\"\n\n#: ../../source/user_guide/backends.rst:175\nmsgid \"MLX\"\nmsgstr \"\"\n\n#: ../../source/user_guide/backends.rst:176\nmsgid \"\"\n\"`MLX <https://github.com/ml-explore/mlx-examples/tree/main/llms>`_ \"\n\"provides efficient runtime to run LLM on Apple silicon. It's recommended \"\n\"to use for Mac users when running on Apple silicon if the model has MLX \"\n\"format support.\"\nmsgstr \"\"\n\"`MLX <https://github.com/ml-explore/mlx-examples/tree/main/llms>`_ 提供在苹果 \"\n\"silicon 芯片上高效运行 LLM 的方式。在模型包含 MLX 格式的时候，推荐使用苹果 silicon 芯片的 Mac 用户使用 MLX \"\n\"引擎。\"\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/user_guide/cache_management.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-10-16 10:33+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/user_guide/cache_management.rst:5\nmsgid \"Cache Management\"\nmsgstr \"缓存管理\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/user_guide/client_api.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-09-09 12:13+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/user_guide/client_api.rst:5\nmsgid \"Client API\"\nmsgstr \"客户端 API\"\n\n#: ../../source/user_guide/client_api.rst:7\nmsgid \"Complete Client API Reference: :ref:`reference_index`\"\nmsgstr \"完整地 API 指南： :ref:`reference_index`\"\n\n#: ../../source/user_guide/client_api.rst:9\nmsgid \"\"\n\"To utilize the Client API, initiate the xinference server using the \"\n\"command below:\"\nmsgstr \"使用 Client API，需要先使用以下命令拉起 Xinference 服务：\"\n\n#: ../../source/user_guide/client_api.rst:18\nmsgid \"\"\n\"Based on the log above, the endpoint is `http://127.0.0.1:9997`. Users \"\n\"can connect to the xinference server through this endpoint using the \"\n\"Client.\"\nmsgstr \"\"\n\"在命令日志里会打印服务地址，上述日志中为 `http://127.0.0.1:9997`。用户可以通过 Client 连接 Xinference \"\n\"服务。\"\n\n#: ../../source/user_guide/client_api.rst:20\nmsgid \"\"\n\"Models are categorized into LLM, embedding, image, etc. We plan to \"\n\"introduce more model types in the future.\"\nmsgstr \"所有模型被分为 LLM、embedding、rerank 等类型。后续可能会支持更多类型的模型。\"\n\n#: ../../source/user_guide/client_api.rst:23\nmsgid \"LLM\"\nmsgstr \"LLM\"\n\n#: ../../source/user_guide/client_api.rst:25\nmsgid \"To list the available built-in LLM models:\"\nmsgstr \"列出所有内置支持的 LLM 模型：\"\n\n#: ../../source/user_guide/client_api.rst:38\nmsgid \"To initialize an LLM and chat:\"\nmsgstr \"初始化一个大语言模型并且与之对话：\"\n\n#: ../../source/user_guide/client_api.rst:41\n#: ../../source/user_guide/client_api.rst:183\n#: ../../source/user_guide/client_api.rst:254\n#: ../../source/user_guide/client_api.rst:323\nmsgid \"Xinference Client\"\nmsgstr \"Xinference Client\"\n\n#: ../../source/user_guide/client_api.rst:65\n#: ../../source/user_guide/client_api.rst:215\n#: ../../source/user_guide/client_api.rst:278\n#: ../../source/user_guide/client_api.rst:347\nmsgid \"OpenAI Client\"\nmsgstr \"OpenAI Client\"\n\n#: ../../source/user_guide/client_api.rst:67\nmsgid \"\"\n\"Openai client request with the same function as before, excluding launch \"\n\"model. More details refer to: https://platform.openai.com/docs/api-\"\n\"reference/chat?lang=python\"\nmsgstr \"\"\n\"使用 Openai 发送请求时，除了创建模型，其余的请求都保持与 Openai 的接口兼容。Openai 使用方式可以参考 \"\n\"https://platform.openai.com/docs/api-reference/chat?lang=python\"\n\n#: ../../source/user_guide/client_api.rst:89\nmsgid \"OpenAI Client Tool Calls\"\nmsgstr \"OpenAI 工具调用\"\n\n#: ../../source/user_guide/client_api.rst:134\n#: ../../source/user_guide/client_api.rst:197\n#: ../../source/user_guide/client_api.rst:229\n#: ../../source/user_guide/client_api.rst:269\n#: ../../source/user_guide/client_api.rst:293\n#: ../../source/user_guide/client_api.rst:337\n#: ../../source/user_guide/client_api.rst:362\n#: ../../source/user_guide/client_api.rst:391\nmsgid \"Output:\"\nmsgstr \"输出：\"\n\n#: ../../source/user_guide/client_api.rst:142\n#, fuzzy\nmsgid \"Anthropic Client\"\nmsgstr \"Anthropic Client\"\n\n#: ../../source/user_guide/client_api.rst:144\n#, fuzzy\nmsgid \"Anthropic API's access address is: /anthropic/v1/messages\"\nmsgstr \"Anthropic的API访问地址为：/anthropic/v1/messages\"\n\n#: ../../source/user_guide/client_api.rst:165\nmsgid \"Embedding\"\nmsgstr \"Embedding\"\n\n#: ../../source/user_guide/client_api.rst:167\nmsgid \"To list the available built-in embedding models:\"\nmsgstr \"列出所有内置支持的 embedding 模型：\"\n\n#: ../../source/user_guide/client_api.rst:180\nmsgid \"To launch an embedding model and embed text:\"\nmsgstr \"拉起 embedding 模型并使用文本向量化：\"\n\n#: ../../source/user_guide/client_api.rst:217\nmsgid \"\"\n\"Openai client request with the same function as before, excluding launch \"\n\"model. More details refer to: https://platform.openai.com/docs/api-\"\n\"reference/embeddings?lang=python\"\nmsgstr \"\"\n\"使用 Openai 发送请求时，除了创建模型，其余的请求都保持与 Openai 的接口兼容。Openai 使用方式可以参考 \"\n\"https://platform.openai.com/docs/api-reference/embeddings?lang=python\"\n\n#: ../../source/user_guide/client_api.rst:236\nmsgid \"Image\"\nmsgstr \"图片\"\n\n#: ../../source/user_guide/client_api.rst:238\n#: ../../source/user_guide/client_api.rst:303\nmsgid \"To list the available built-in image models:\"\nmsgstr \"列出所有内置的文生图模型：\"\n\n#: ../../source/user_guide/client_api.rst:251\nmsgid \"To initiate an image model and generate an image using a text prompt:\"\nmsgstr \"初始化一个文生图模型并通过提示词生成图片：\"\n\n#: ../../source/user_guide/client_api.rst:280\nmsgid \"\"\n\"Openai client request with the same function as before, excluding launch \"\n\"model. More details refer to: https://platform.openai.com/docs/api-\"\n\"reference/images/create?lang=python\"\nmsgstr \"\"\n\"使用 Openai 发送请求时，除了创建模型，其余的请求都保持与 Openai 的接口兼容。Openai 使用方式可以参考 \"\n\"https://platform.openai.com/docs/api-reference/images/create?lang=python\"\n\n#: ../../source/user_guide/client_api.rst:301\nmsgid \"Audio\"\nmsgstr \"\"\n\n#: ../../source/user_guide/client_api.rst:320\nmsgid \"To initiate an audio model and get text from an audio:\"\nmsgstr \"初始化一个语音模型并通过语音生成文字：\"\n\n#: ../../source/user_guide/client_api.rst:349\nmsgid \"\"\n\"Openai client request with the same function as before. More details \"\n\"refer to: https://platform.openai.com/docs/api-\"\n\"reference/audio/createTranscription\"\nmsgstr \"\"\n\"使用 Openai 发送请求时，除了创建模型，其余的请求都保持与 Openai 的接口兼容。Openai 使用方式可以参考 \"\n\"https://platform.openai.com/docs/api-reference/images/create?lang=python\"\n\n#: ../../source/user_guide/client_api.rst:370\nmsgid \"Rerank\"\nmsgstr \"Rerank\"\n\n#: ../../source/user_guide/client_api.rst:371\nmsgid \"To launch a rerank model and compute the similarity scores:\"\nmsgstr \"拉起 rerank 模型并计算文本相似度：\"\n\n#~ msgid \"\"\n#~ \"Anthropic client request with the same\"\n#~ \" function as before, excluding launch \"\n#~ \"model.\"\n#~ msgstr \"使用 Anthropic 发送请求时，除了创建模型，其余的请求都保持与 Anthropic 的接口兼容。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/user_guide/continuous_batching.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2025-05-27 19:02+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.11.0\\n\"\n\n#: ../../source/user_guide/continuous_batching.rst:5\nmsgid \"Continuous Batching\"\nmsgstr \"连续批处理\"\n\n#: ../../source/user_guide/continuous_batching.rst:7\nmsgid \"\"\n\"Continuous batching, as a means to improve throughput during model \"\n\"serving, has already been implemented in inference engines like ``VLLM``.\"\n\" Xinference aims to provide this optimization capability when using the \"\n\"transformers engine as well.\"\nmsgstr \"\"\n\"连续批处理是诸如 ``VLLM`` 这样的推理引擎中提升吞吐的重要技术。Xinference \"\n\"旨在通过这项技术提升 ``transformers`` 推理引擎的吞吐。\"\n\n#: ../../source/user_guide/continuous_batching.rst:11\nmsgid \"Usage\"\nmsgstr \"使用方式\"\n\n#: ../../source/user_guide/continuous_batching.rst:14\nmsgid \"LLM\"\nmsgstr \"大语言模型\"\n\n#: ../../source/user_guide/continuous_batching.rst:15\nmsgid \"Currently, this feature can be enabled under the following conditions:\"\nmsgstr \"当前，此功能在满足以下条件时开启：\"\n\n#: ../../source/user_guide/continuous_batching.rst:17\nmsgid \"\"\n\"First, set the environment variable \"\n\"``XINFERENCE_TRANSFORMERS_ENABLE_BATCHING`` to ``1`` when starting \"\n\"xinference. For example:\"\nmsgstr \"\"\n\"首先，启动 Xinference 时需要将环境变量 ``XINFERENCE_TRANSFORMERS_ENABLE_\"\n\"BATCHING`` 置为 ``1`` 。\"\n\n#: ../../source/user_guide/continuous_batching.rst:25\nmsgid \"\"\n\"Since ``v0.16.0``, this feature is turned on by default and is no longer \"\n\"required to set the ``XINFERENCE_TRANSFORMERS_ENABLE_BATCHING`` \"\n\"environment variable. This environment variable has been removed.\"\nmsgstr \"\"\n\"自 ``v0.16.0`` 开始，此功能默认开启，不再需要设置 ``XINFERENCE_\"\n\"TRANSFORMERS_ENABLE_BATCHING`` 环境变量，且该环境变量已被移除。\"\n\n#: ../../source/user_guide/continuous_batching.rst:30\nmsgid \"\"\n\"Then, ensure that the ``transformers`` engine is selected when launching \"\n\"the model. For example:\"\nmsgstr \"然后，启动 LLM 模型时选择 ``transformers`` 推理引擎。例如：\"\n\n#: ../../source/user_guide/continuous_batching.rst:66\nmsgid \"\"\n\"Once this feature is enabled, all requests for LLMs will be managed by \"\n\"continuous batching, and the average throughput of requests made to a \"\n\"single model will increase. The usage of the LLM interface remains \"\n\"exactly the same as before, with no differences.\"\nmsgstr \"\"\n\"一旦此功能开启，LLM 模型的所有接口将被此功能接管。所有接口的使用方式没有\"\n\"任何变化。\"\n\n#: ../../source/user_guide/continuous_batching.rst:71\nmsgid \"Image Model\"\nmsgstr \"图像模型\"\n\n#: ../../source/user_guide/continuous_batching.rst:72\nmsgid \"\"\n\"Currently, for image models, only the ``text_to_image`` interface is \"\n\"supported for ``FLUX.1`` series models.\"\nmsgstr \"\"\n\"当前只有 ``FLUX.1`` 系列模型的 ``text_to_image`` （文生图）接口支持此功能\"\n\"。\"\n\n#: ../../source/user_guide/continuous_batching.rst:74\nmsgid \"\"\n\"Enabling this feature requires setting the environment variable \"\n\"``XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE``, which indicates the ``size`` \"\n\"of the generated images.\"\nmsgstr \"\"\n\"图像模型开启此功能需要在启动 xinference 时指定 ``XINFERENCE_TEXT_TO_IMAGE\"\n\"_BATCHING_SIZE`` 环境变量，表示生成图片的大小。\"\n\n#: ../../source/user_guide/continuous_batching.rst:76\nmsgid \"For example, starting xinference like this:\"\nmsgstr \"例如，像这样启动 xinference：\"\n\n#: ../../source/user_guide/continuous_batching.rst:83\nmsgid \"\"\n\"Then just use the ``text_to_image`` interface as before, and nothing else\"\n\" needs to be changed.\"\nmsgstr \"接下来正常使用 ``text_to_image`` 接口即可，其他什么都不需要改变。\"\n\n#: ../../source/user_guide/continuous_batching.rst:86\nmsgid \"Abort your request\"\nmsgstr \"中止请求\"\n\n#: ../../source/user_guide/continuous_batching.rst:87\nmsgid \"In this mode, you can abort requests that are in the process of inference.\"\nmsgstr \"此功能中，你可以优雅地中止正在推理中的请求。\"\n\n#: ../../source/user_guide/continuous_batching.rst:89\nmsgid \"First, add ``request_id`` option in ``generate_config``. For example:\"\nmsgstr \"首先，在推理请求的 ``generate_config`` 中指定 ``request_id`` 选项。例如：\"\n\n#: ../../source/user_guide/continuous_batching.rst:98\nmsgid \"\"\n\"Then, abort the request using the ``request_id`` you have set. For \"\n\"example:\"\nmsgstr \"接着，带着你指定的 ``request_id`` 去中止该请求。例如：\"\n\n#: ../../source/user_guide/continuous_batching.rst:106\nmsgid \"\"\n\"Note that if your request has already finished, aborting the request will\"\n\" be a no-op. Image models also support this feature.\"\nmsgstr \"注意，如果你的请求已经结束，那么此操作将什么都不做。\"\n\n#: ../../source/user_guide/continuous_batching.rst:110\nmsgid \"Note\"\nmsgstr \"注意事项\"\n\n#: ../../source/user_guide/continuous_batching.rst:112\nmsgid \"\"\n\"Currently, for ``LLM`` models, this feature only supports the \"\n\"``generate``, ``chat``, ``tool call`` and ``vision`` tasks.\"\nmsgstr \"\"\n\"当前，此功能仅支持 LLM 模型的 ``generate``, ``chat``, ``tool call`` （\"\n\"工具调用）和 ``vision`` （多模态） 功能。\"\n\n#: ../../source/user_guide/continuous_batching.rst:114\nmsgid \"\"\n\"Currently, for ``image`` models, this feature only supports the \"\n\"``text_to_image`` tasks. Only ``FLUX.1`` series models are supported.\"\nmsgstr \"\"\n\"当前，对于图像模型，仅支持 `FLUX.1`` 系列模型的 ``text_to_image`` （文生\"\n\"图）功能。\"\n\n#: ../../source/user_guide/continuous_batching.rst:116\nmsgid \"\"\n\"For ``vision`` tasks, currently only ``qwen2-vl-instruct``, ``qwen2.5-vl-\"\n\"instruct``, ``QvQ-72B-Preview``, ``glm-4v`` and ``MiniCPM-V-2.6`` (only \"\n\"for image tasks) models are supported. More models will be supported in \"\n\"the future. Please let us know your requirements.\"\nmsgstr \"对于多模态任务，当前支持 ``qwen2-vl-instruct``，``qwen2.5-vl-instruct``，``QvQ-72B-Preview``，``glm-4v`` \"\n\"和 ``MiniCPM-V-2.6``。未来将加入更多模型，敬请期待。\"\n\n#: ../../source/user_guide/continuous_batching.rst:118\nmsgid \"\"\n\"If using GPU inference, this method will consume more GPU memory. Please \"\n\"be cautious when increasing the number of concurrent requests to the same\"\n\" model. The ``launch_model`` interface provides the ``max_num_seqs`` \"\n\"parameter to adjust the concurrency level, with a default value of \"\n\"``16``.\"\nmsgstr \"\"\n\"如果使用 GPU 推理，此功能对显存要求较高。因此请谨慎提高对同一个模型的并发\"\n\"请求量。``launch_model`` 接口提供可选参数 ``max_num_seqs`` 用于调整并发度\"\n\"，默认值为 ``16`` 。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/user_guide/distributed_inference.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-29 11:03+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/user_guide/distributed_inference.rst:5\nmsgid \"Distributed Inference\"\nmsgstr \"分布式推理\"\n\n#: ../../source/user_guide/distributed_inference.rst:6\nmsgid \"\"\n\"Some language models including **DeepSeek V3**, **DeepSeek R1**, etc are \"\n\"too large to fit into GPus on a single machine, Xinference supported \"\n\"running these models across multiple machines.\"\nmsgstr \"\"\n\"一些语言模型，包括 **DeepSeek V3**、**DeepSeek R1** 等，体积过大，无法适配单台机器上的 \"\n\"GPU，Xinference 支持在多台机器上运行这些模型。\"\n\n#: ../../source/user_guide/distributed_inference.rst:13\nmsgid \"Supported Engines\"\nmsgstr \"支持的引擎\"\n\n#: ../../source/user_guide/distributed_inference.rst:14\nmsgid \"Now, Xinference supported below engines to run models across workers.\"\nmsgstr \"现在，Xinference 支持如下引擎在多台 worker 上运行模型。\"\n\n#: ../../source/user_guide/distributed_inference.rst:16\nmsgid \":ref:`SGLang <sglang_backend>` (supported in v1.3.0)\"\nmsgstr \":ref:`SGLang <sglang_backend>` （在 v1.3.0 中支持）\"\n\n#: ../../source/user_guide/distributed_inference.rst:17\nmsgid \":ref:`vLLM <vllm_backend>` (supported in v1.4.1)\"\nmsgstr \":ref:`vLLM <vllm_backend>` （在 v1.4.1 中支持）\"\n\n#: ../../source/user_guide/distributed_inference.rst:18\nmsgid \"\"\n\":ref:`MLX <mlx_backend>` (supported in v1.7.1), MLX distributed currently\"\n\" does not support all models. The following model types are supported at \"\n\"this time. If you have additional requirements, feel free to submit a \"\n\"GitHub issue at `https://github.com/xorbitsai/inference/issues \"\n\"<https://github.com/xorbitsai/inference/issues>`_ to request support.\"\nmsgstr \"\"\n\":ref:`MLX <mlx_backend>` （自 v1.7.1 \"\n\"起支持）目前在分布式模式下并不支持所有模型。目前支持以下几种模型类型。如果你有其他需求，欢迎在 \"\n\"`https://github.com/xorbitsai/inference/issues \"\n\"<https://github.com/xorbitsai/inference/issues>`_ 提交 GitHub issue 来请求支持。\"\n\n#: ../../source/user_guide/distributed_inference.rst:22\nmsgid \"DeepSeek v3 and R1\"\nmsgstr \"DeepSeek v3 和 R1\"\n\n#: ../../source/user_guide/distributed_inference.rst:23\nmsgid \"Qwen2.5-instruct and the models have the same model architectures.\"\nmsgstr \"Qwen2.5-instruct 及其他具有相同模型架构的模型。\"\n\n#: ../../source/user_guide/distributed_inference.rst:24\nmsgid \"Qwen3 and the models have the same model architectures.\"\nmsgstr \"Qwen3 及其他具有相同模型架构的模型。\"\n\n#: ../../source/user_guide/distributed_inference.rst:25\nmsgid \"Qwen3-moe and the models have the same model architectures.\"\nmsgstr \"Qwen3-moe 及其他具有相同模型架构的模型。\"\n\n#: ../../source/user_guide/distributed_inference.rst:30\nmsgid \"Usage\"\nmsgstr \"使用\"\n\n#: ../../source/user_guide/distributed_inference.rst:31\nmsgid \"\"\n\"First you need at least 2 workers to support distributed inference. Refer\"\n\" to :ref:`running Xinference in cluster <distributed_getting_started>` to\"\n\" create a Xinference cluster including supervisor and workers.\"\nmsgstr \"\"\n\"首先，您需要至少 2 个工作节点来支持分布式推理。请参考 :ref:`在集群中运行 Xinference \"\n\"<distributed_getting_started>` 以创建包含 supervisor 节点和 worker 节点的 Xinference\"\n\" 集群。\"\n\n#: ../../source/user_guide/distributed_inference.rst:35\nmsgid \"\"\n\"vLLM (v0.11.0+) note: Starting from vLLM v0.11.0, distributed deployment \"\n\"with vLLM requires Xinference >= v1.17.1. In addition to setting \"\n\"``--n-worker`` as before, you must also set ``tensor_parallel_size`` (set\"\n\" it to the **GPU count**) and ``pipeline_parallel_size=1`` when launching\"\n\" the model.\"\nmsgstr \"\"\n\"vLLM（v0.11.0+）注意事项：从vLLM v0.11.0版本开始，使用vLLM进行分布式部署需要Xinference >= \"\n\"v1.17.1版本。除原有的 ``--n-worker`` 参数设置外，启动模型时还必须同时设置 \"\n\"``tensor_parallel_size`` （将其设置为 **GPU数量** ）  和 ``pipeline_parallel_size=1`` 参数。\"\n\n#: ../../source/user_guide/distributed_inference.rst:40\nmsgid \"\"\n\"Then if are using web UI, choose expected machines for ``worker count`` \"\n\"in the optional configurations, if you are using command line, add \"\n\"``--n-worker <machine number>`` when launching a model. The model will be\"\n\" launched across multiple workers accordingly.\"\nmsgstr \"\"\n\"然后，如果您使用的是 Web UI，请在可选配置中选择期望的机器数量作为 ``worker count``；如果您使用的是命令行，启动模型时请添加\"\n\" ``--n-worker <机器数量>``。模型将相应地在多个工作节点上启动。\"\n\n#: ../../source/user_guide/distributed_inference.rst:48\nmsgid \"\"\n\"``GPU count`` on web UI, or ``--n-gpu`` for command line now mean GPUs \"\n\"count per worker if you are using distributed inference.\"\nmsgstr \"使用分布式推理时，在 Web UI 中的 ``GPU count`` 或命令行中的 ``--n-gpu`` 现在表示每个工作节点的 GPU 数量。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/user_guide/index.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2023-10-16 10:33+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.12.1\\n\"\n\n#: ../../source/user_guide/index.rst:5\nmsgid \"User Guide\"\nmsgstr \"用户指南\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/user_guide/launch.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2025, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-28 11:54+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language: zh_CN\\n\"\n\"Language-Team: zh_CN <LL@li.org>\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.17.0\\n\"\n\n#: ../../source/user_guide/launch.rst:5\nmsgid \"Model Launching Instructions\"\nmsgstr \"模型加载指南\"\n\n#: ../../source/user_guide/launch.rst:7\nmsgid \"This document aims to provide a functional overview of model launching.\"\nmsgstr \"本文档旨在提供模型加载的功能说明。\"\n\n#: ../../source/user_guide/launch.rst:10\nmsgid \"Replica\"\nmsgstr \"副本\"\n\n#: ../../source/user_guide/launch.rst:12\nmsgid \"\"\n\"Replicas specify the number of model instances to load. For example, if \"\n\"you have two GPUs and each can host one replica of the model, you can set\"\n\" the replica count to 2. This way, two identical instances of the model \"\n\"will be distributed across the two GPUs. Xinference automatically load-\"\n\"balances requests to ensure even distribution across multiple GPUs. \"\n\"Meanwhile, users see it as a single model, which greatly improves overall\"\n\" resource utilization.\"\nmsgstr \"\"\n\"副本用来指定模型加载的实例份数。比如，你有两张 GPU，每张卡可以放下模型的一个副本，你可以设置副本数为 \"\n\"2。这样，两个完全相同的模型实例将分布在这两张 GPU 上。Xinference \"\n\"会自动进行负载均衡，确保请求均匀分配到多张卡上。用户看到的仍是一个模型，这大大提升了整体资源利用率。\"\n\n#: ../../source/user_guide/launch.rst:17\nmsgid \"Traditional Multi-Instance Deployment：\"\nmsgstr \"旧版本多实例部署：\"\n\n#: ../../source/user_guide/launch.rst:19\nmsgid \"\"\n\"When you have multiple GPU cards, each capable of hosting one model \"\n\"instance, you can set the number of instances equal to the number of \"\n\"GPUs. For example:\"\nmsgstr \"当您拥有多张GPU显卡时，每张显卡可承载一个模型实例，此时可将实例数量设置为等于GPU数量。例如:\"\n\n#: ../../source/user_guide/launch.rst:21\nmsgid \"2 GPUs, 2 instances: Each GPU runs one model instance\"\nmsgstr \"2张GPU，2个实例：每张GPU运行一个模型实例\"\n\n#: ../../source/user_guide/launch.rst:22\nmsgid \"4 GPUs, 4 instances: Each GPU runs one model instance\"\nmsgstr \"4张GPU，4个实例：每张GPU运行一个模型实例\"\n\n#: ../../source/user_guide/launch.rst:26\nmsgid \"Introduce a new environment variable:\"\nmsgstr \"引入一个新的环境变量:\"\n\n#: ../../source/user_guide/launch.rst:32\nmsgid \"\"\n\"Control whether to enable the single GPU multi-copy feature Default \"\n\"value: 1\"\nmsgstr \"控制是否启用单GPU多副本功能，默认值：1\"\n\n#: ../../source/user_guide/launch.rst:35\nmsgid \"New Feature: Smart Replica Deployment\"\nmsgstr \"新功能：智能副本部署\"\n\n#: ../../source/user_guide/launch.rst:37\nmsgid \"Single GPU Multi-Replica\"\nmsgstr \"单GPU多副本\"\n\n#: ../../source/user_guide/launch.rst:39\nmsgid \"New Support: Run multiple model replicas even with just one GPU.\"\nmsgstr \"新增支持：即使仅有一块GPU，也能运行多个模型副本。\"\n\n#: ../../source/user_guide/launch.rst:41\nmsgid \"Scenario: You have 1 GPU with sufficient VRAM\"\nmsgstr \"场景：您拥有1个GPU且显存充足\"\n\n#: ../../source/user_guide/launch.rst:42\nmsgid \"Configuration: Replica Count = 3, GPU Count = 1\"\nmsgstr \"配置：副本数量=3，GPU数量=1\"\n\n#: ../../source/user_guide/launch.rst:43\nmsgid \"Result: 3 model instances running on the same GPU, sharing GPU resources\"\nmsgstr \"结果：3个模型实例，在同一GPU上运行，共享GPU资源\"\n\n#: ../../source/user_guide/launch.rst:45\nmsgid \"Hybrid GPU Allocation\"\nmsgstr \"混合GPU分配\"\n\n#: ../../source/user_guide/launch.rst:47\nmsgid \"\"\n\"Smart Allocation: Number of replicas may differ from GPU count; system \"\n\"intelligently distributes\"\nmsgstr \"智能分配: 副本数可以不等于GPU数量，系统会智能分配\"\n\n#: ../../source/user_guide/launch.rst:49\nmsgid \"Scenario: You have 2 GPUs and need 3 replicas\"\nmsgstr \"场景: 你有2张GPU，需要3个副本\"\n\n#: ../../source/user_guide/launch.rst:50\nmsgid \"Configuration: Replicas=3, GPUs=2\"\nmsgstr \"配置: 副本数=3，GPU数量=2\"\n\n#: ../../source/user_guide/launch.rst:51\nmsgid \"Result: GPU0 runs 2 instances, GPU1 runs 1 instance\"\nmsgstr \"结果: GPU0运行2个实例，GPU1运行1个实例\"\n\n#: ../../source/user_guide/launch.rst:54\nmsgid \"GPU Allocation Strategy\"\nmsgstr \"混合分配策略\"\n\n#: ../../source/user_guide/launch.rst:56\nmsgid \"\"\n\"The current policy is *Idle First*: The scheduler always attempts to \"\n\"assign replicas to the least utilized GPU. Use the \"\n\"``XINFERENCE_LAUNCH_STRATEGY`` parameter to choose launch strategy.\"\nmsgstr \"\"\n\"当前策略为 *空闲优先* ：调度器始终尝试将副本分配至最空闲的GPU。使用 ``XINFERENCE_ENV_LAUNCH_STRATEGY`` \"\n\"参数选择启动策略。\"\n\n#: ../../source/user_guide/launch.rst:59\nmsgid \"Set Environment Variables\"\nmsgstr \"设置环境变量\"\n\n#: ../../source/user_guide/launch.rst:63\nmsgid \"\"\n\"Sometimes, we want to specify environment variables for a particular \"\n\"model at runtime. Since v1.8.1, Xinference provides the capability to \"\n\"configure these individually without needing to set them before starting \"\n\"Xinference.\"\nmsgstr \"\"\n\"有时我们希望在运行时为特定模型指定环境变量。从 v1.8.1 开始，Xinference 提供了单独配置环境变量的功能，无需在启动 \"\n\"Xinference 前设置。\"\n\n#: ../../source/user_guide/launch.rst:66\nmsgid \"For Web UI.\"\nmsgstr \"针对 Web UI。\"\n\n#: ../../source/user_guide/launch.rst:72\nmsgid \"\"\n\"When using the command line, use ``--env`` to specify an environment \"\n\"variable.\"\nmsgstr \"命令行使用时，使用 ``--env`` 指定环境变量。\"\n\n#: ../../source/user_guide/launch.rst:74 ../../source/user_guide/launch.rst:123\nmsgid \"Example usage:\"\nmsgstr \"示例用法：\"\n\n#: ../../source/user_guide/launch.rst:80\nmsgid \"\"\n\"Take vLLM as an example: it has versions V1 and V0, and by default, it \"\n\"automatically determines which version to use. If you want to force the \"\n\"use of V0 by setting ``VLLM_USE_V1=0`` when launching a model, you can \"\n\"specify this during model launching.\"\nmsgstr \"\"\n\"以 vLLM 为例，它有 V1 和 V0 两个版本，默认会自动判定使用哪个版本。如果想在加载模型时强制通过设置 ``VLLM_USE_V1=0``\"\n\" 来使用 V0，可以指定该环境变量。\"\n\n#: ../../source/user_guide/launch.rst:84\nmsgid \"Configuring Model Virtual Environment\"\nmsgstr \"配置模型虚拟空间\"\n\n#: ../../source/user_guide/launch.rst:88\nmsgid \"\"\n\"For this part, please refer to :ref:`toggling virtual environments and \"\n\"customizing dependencies <model_launching_virtualenv>`.\"\nmsgstr \"对于这部分，请参考 :ref:`开关虚拟空间和定制依赖 <model_launching_virtualenv>`。\"\n\n#: ../../source/user_guide/launch.rst:91\nmsgid \"Batching / Continuous Batching\"\nmsgstr \"批处理 / 连续批处理\"\n\n#: ../../source/user_guide/launch.rst:93\nmsgid \"\"\n\"Xinference supports batching for higher throughput. For LLMs on the \"\n\"``transformers`` engine, continuous batching is available and can be \"\n\"enabled via environment variables at launch time.\"\nmsgstr \"\"\n\"Xinference支持批处理以提升吞吐量。对于基于 ``transformers`` \"\n\"引擎的大型语言模型，可启用连续批处理功能，该功能可在启动时通过环境变量进行配置。\"\n\n#: ../../source/user_guide/launch.rst:96\nmsgid \"Key settings:\"\nmsgstr \"关键设置：\"\n\n#: ../../source/user_guide/launch.rst:98\nmsgid \"\"\n\"``XINFERENCE_BATCH_SIZE`` and ``XINFERENCE_BATCH_INTERVAL`` for general \"\n\"batching behavior.\"\nmsgstr \" ``XINFERENCE_BATCH_SIZE`` 和 ``XINFERENCE_BATCH_INTERVAL`` 用于控制常规的批处理行为。\"\n\n#: ../../source/user_guide/launch.rst:99\nmsgid \"\"\n\"``XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE`` for text-to-image models (when\"\n\" supported).\"\nmsgstr \" ``XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE``（文本转图像模型，当支持时）。\"\n\n#: ../../source/user_guide/launch.rst:101\nmsgid \"Example (LLM, transformers):\"\nmsgstr \"示例（大型语言模型，Transformers）：\"\n\n#: ../../source/user_guide/launch.rst:108\nmsgid \"Example (text-to-image):\"\nmsgstr \"示例（文生图）：\"\n\n#: ../../source/user_guide/launch.rst:114\nmsgid \"\"\n\"For detailed behavior, supported models, and aborting requests, see \"\n\":ref:`Continuous Batching <user_guide_continuous_batching>`.\"\nmsgstr \"\"\n\"有关详细行为、支持的模型以及中止请求的信息，请参阅\"\n\" :ref:`连续批处理 <user_guide_continuous_batching>` 。\"\n\n#: ../../source/user_guide/launch.rst:118\nmsgid \"Thinking Mode\"\nmsgstr \"思考模式\"\n\n#: ../../source/user_guide/launch.rst:120\nmsgid \"\"\n\"Some hybrid reasoning models (for example, Qwen3) support an optional \"\n\"*thinking mode*. You can enable this at launch time via ``--enable-\"\n\"thinking``.\"\nmsgstr \"某些混合推理模型（例如Qwen3）支持可选的 *思考模式* 。您可在启动时通过 ``--enable-thinking`` 参数启用该功能。\"\n\n"
  },
  {
    "path": "doc/source/locale/zh_CN/LC_MESSAGES/user_guide/vllm_enhancement.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2023, Xorbits Inc.\n# This file is distributed under the same license as the Xinference package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Xinference \\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2026-01-15 13:56+0800\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=utf-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Generated-By: Babel 2.14.0\\n\"\n\n#: ../../source/user_guide/vllm_enhancement.rst:5\nmsgid \"Xavier: Share KV Cache between vllm replicas\"\nmsgstr \"Xavier: 多VLLM副本间共享KV Cache\"\n\n#: ../../source/user_guide/vllm_enhancement.rst:6\nmsgid \"\"\n\"For scenarios such as long document queries and multi-round \"\n\"conversations, the computation during the inference prefill phase can be \"\n\"particularly heavy, which affects overall throughput and the latency of \"\n\"individual inferences. Xinference enhances the vllm engine by introducing\"\n\" the ``Xavier`` framework, enabling KV cache sharing across multiple vllm\"\n\" instances. This allows KV cache computed by other replicas to be \"\n\"directly reused, avoiding redundant computations.\"\nmsgstr \"\"\n\"对于长文档查询和多轮对话等场景，在推理预填充阶段的计算可能特别繁重，这会\"\n\"影响整体吞吐量和单次推理的延迟。Xinference 通过引入 ``Xavier`` 框架来增强\"\n\" vllm 引擎，支持在多个 vllm 实例之间共享 KV 缓存。这使得其他副本计算出的 \"\n\"KV 缓存可以被直接重用，从而避免了冗余计算。\"\n\n#: ../../source/user_guide/vllm_enhancement.rst:15\nmsgid \"Usage\"\nmsgstr \"使用\"\n\n#: ../../source/user_guide/vllm_enhancement.rst:16\nmsgid \"\"\n\"Simply add the parameter ``enable_xavier=True`` when starting the vllm \"\n\"model.\"\nmsgstr \"\"\n\"启动 vllm 模型时设置选项 ``enable_xavier=True`` 即可。\"\n\n#: ../../source/user_guide/vllm_enhancement.rst:20\nmsgid \"Limitations\"\nmsgstr \"限制\"\n\n#: ../../source/user_guide/vllm_enhancement.rst:21\nmsgid \"\"\n\"Xavier requires vllm version >= ``0.7.0``, and currently not supports for\"\n\" vllm version >= ``0.11.0`` due to vllm reconstruction.\"\nmsgstr \"\"\n\"Xavier 要求 vllm 版本不低于 ``0.7.0`` 。暂不支持vllm 版本高于 ``0.11.0``。\"\n\n#: ../../source/user_guide/vllm_enhancement.rst:22\nmsgid \"\"\n\"Due to the underlying communication not recognizing ``0.0.0.0``, the \"\n\"actual IP address needs to be passed when starting Xinference, for \"\n\"example: ``xinference-local -H 192.168.xx.xx``.\"\nmsgstr \"\"\n\"由于底层通信无法识别 ``0.0.0.0`` 地址，启动 xinference 时需要配置实际的 \"\n\"IP 地址，例如：``xinference-local -H 192.168.xx.xx`` 。\"\n\n#: ../../source/user_guide/vllm_enhancement.rst:23\nmsgid \"Xavier only works for Nvidia product.\"\nmsgstr \"Xavier 只支持 Nvidia 显卡。\"\n\n"
  },
  {
    "path": "doc/source/models/builtin/audio/belle-distilwhisper-large-v2-zh.rst",
    "content": ".. _models_builtin_belle-distilwhisper-large-v2-zh:\n\n===============================\nBelle-distilwhisper-large-v2-zh\n===============================\n\n- **Model Name:** Belle-distilwhisper-large-v2-zh\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** BELLE-2/Belle-distilwhisper-large-v2-zh\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Belle-distilwhisper-large-v2-zh --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/belle-whisper-large-v2-zh.rst",
    "content": ".. _models_builtin_belle-whisper-large-v2-zh:\n\n=========================\nBelle-whisper-large-v2-zh\n=========================\n\n- **Model Name:** Belle-whisper-large-v2-zh\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** BELLE-2/Belle-whisper-large-v2-zh\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Belle-whisper-large-v2-zh --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/belle-whisper-large-v3-zh.rst",
    "content": ".. _models_builtin_belle-whisper-large-v3-zh:\n\n=========================\nBelle-whisper-large-v3-zh\n=========================\n\n- **Model Name:** Belle-whisper-large-v3-zh\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** BELLE-2/Belle-whisper-large-v3-zh\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Belle-whisper-large-v3-zh --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/chattts.rst",
    "content": ".. _models_builtin_chattts:\n\n=======\nChatTTS\n=======\n\n- **Model Name:** ChatTTS\n- **Model Family:** ChatTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** 2Noise/ChatTTS\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name ChatTTS --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/cosyvoice-300m-instruct.rst",
    "content": ".. _models_builtin_cosyvoice-300m-instruct:\n\n=======================\nCosyVoice-300M-Instruct\n=======================\n\n- **Model Name:** CosyVoice-300M-Instruct\n- **Model Family:** CosyVoice\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** FunAudioLLM/CosyVoice-300M-Instruct\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name CosyVoice-300M-Instruct --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/cosyvoice-300m-sft.rst",
    "content": ".. _models_builtin_cosyvoice-300m-sft:\n\n==================\nCosyVoice-300M-SFT\n==================\n\n- **Model Name:** CosyVoice-300M-SFT\n- **Model Family:** CosyVoice\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** FunAudioLLM/CosyVoice-300M-SFT\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name CosyVoice-300M-SFT --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/cosyvoice-300m.rst",
    "content": ".. _models_builtin_cosyvoice-300m:\n\n==============\nCosyVoice-300M\n==============\n\n- **Model Name:** CosyVoice-300M\n- **Model Family:** CosyVoice\n- **Abilities:** ['text2audio', 'text2audio_voice_cloning']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** FunAudioLLM/CosyVoice-300M\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name CosyVoice-300M --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/cosyvoice2-0.5b.rst",
    "content": ".. _models_builtin_cosyvoice2-0.5b:\n\n===============\nCosyVoice2-0.5B\n===============\n\n- **Model Name:** CosyVoice2-0.5B\n- **Model Family:** CosyVoice\n- **Abilities:** ['text2audio', 'text2audio_zero_shot', 'text2audio_voice_cloning']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** JunHowie/CosyVoice2-0.5B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name CosyVoice2-0.5B --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/f5-tts-mlx.rst",
    "content": ".. _models_builtin_f5-tts-mlx:\n\n==========\nF5-TTS-MLX\n==========\n\n- **Model Name:** F5-TTS-MLX\n- **Model Family:** F5-TTS-MLX\n- **Abilities:** ['text2audio', 'text2audio_zero_shot', 'text2audio_voice_cloning']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** lucasnewman/f5-tts-mlx\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name F5-TTS-MLX --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/f5-tts.rst",
    "content": ".. _models_builtin_f5-tts:\n\n======\nF5-TTS\n======\n\n- **Model Name:** F5-TTS\n- **Model Family:** F5-TTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot', 'text2audio_voice_cloning']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** SWivid/F5-TTS\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name F5-TTS --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/fishspeech-1.5.rst",
    "content": ".. _models_builtin_fishspeech-1.5:\n\n==============\nFishSpeech-1.5\n==============\n\n- **Model Name:** FishSpeech-1.5\n- **Model Family:** FishAudio\n- **Abilities:** ['text2audio', 'text2audio_zero_shot', 'text2audio_voice_cloning']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** fishaudio/fish-speech-1.5\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name FishSpeech-1.5 --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/fun-asr-mlt-nano-2512.rst",
    "content": ".. _models_builtin_fun-asr-mlt-nano-2512:\n\n=====================\nFun-ASR-MLT-Nano-2512\n=====================\n\n- **Model Name:** Fun-ASR-MLT-Nano-2512\n- **Model Family:** funasr\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** FunAudioLLM/Fun-ASR-MLT-Nano-2512\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Fun-ASR-MLT-Nano-2512 --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/fun-asr-nano-2512.rst",
    "content": ".. _models_builtin_fun-asr-nano-2512:\n\n=================\nFun-ASR-Nano-2512\n=================\n\n- **Model Name:** Fun-ASR-Nano-2512\n- **Model Family:** funasr\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** FunAudioLLM/Fun-ASR-Nano-2512\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Fun-ASR-Nano-2512 --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/index.rst",
    "content": ".. _models_audio_index:\n\n================\nAudio Models\n================\n\nThe following is a list of built-in audio models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  \n   belle-distilwhisper-large-v2-zh\n  \n   belle-whisper-large-v2-zh\n  \n   belle-whisper-large-v3-zh\n  \n   chattts\n  \n   cosyvoice-300m\n  \n   cosyvoice-300m-instruct\n  \n   cosyvoice-300m-sft\n  \n   cosyvoice2-0.5b\n  \n   f5-tts\n  \n   f5-tts-mlx\n  \n   fishspeech-1.5\n  \n   fun-asr-mlt-nano-2512\n  \n   fun-asr-nano-2512\n  \n   indextts2\n  \n   kokoro-82m\n  \n   kokoro-82m-mlx\n  \n   kokoro-82m-v1.1-zh\n  \n   megatts3\n  \n   melotts-chinese\n  \n   melotts-english\n  \n   melotts-english-v2\n  \n   melotts-english-v3\n  \n   melotts-french\n  \n   melotts-japanese\n  \n   melotts-korean\n  \n   melotts-spanish\n  \n   paraformer-zh\n  \n   paraformer-zh-hotword\n  \n   paraformer-zh-long\n  \n   paraformer-zh-spk\n  \n   qwen3-asr-0.6b\n  \n   qwen3-asr-1.7b\n  \n   seaco-paraformer-zh\n  \n   sensevoicesmall\n  \n   whisper-base\n  \n   whisper-base-mlx\n  \n   whisper-base.en\n  \n   whisper-base.en-mlx\n  \n   whisper-large-v3\n  \n   whisper-large-v3-mlx\n  \n   whisper-large-v3-turbo\n  \n   whisper-large-v3-turbo-mlx\n  \n   whisper-medium\n  \n   whisper-medium-mlx\n  \n   whisper-medium.en\n  \n   whisper-medium.en-mlx\n  \n   whisper-small\n  \n   whisper-small-mlx\n  \n   whisper-small.en\n  \n   whisper-small.en-mlx\n  \n   whisper-tiny\n  \n   whisper-tiny-mlx\n  \n   whisper-tiny.en\n  \n   whisper-tiny.en-mlx\n  "
  },
  {
    "path": "doc/source/models/builtin/audio/indextts2.rst",
    "content": ".. _models_builtin_indextts2:\n\n=========\nIndexTTS2\n=========\n\n- **Model Name:** IndexTTS2\n- **Model Family:** IndexTTS2\n- **Abilities:** ['text2audio', 'text2audio_zero_shot', 'text2audio_voice_cloning', 'text2audio_emotion_control']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** IndexTeam/IndexTTS-2\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name IndexTTS2 --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/kokoro-82m-mlx.rst",
    "content": ".. _models_builtin_kokoro-82m-mlx:\n\n==============\nKokoro-82M-MLX\n==============\n\n- **Model Name:** Kokoro-82M-MLX\n- **Model Family:** Kokoro-MLX\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** prince-canuma/Kokoro-82M\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Kokoro-82M-MLX --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/kokoro-82m-v1.1-zh.rst",
    "content": ".. _models_builtin_kokoro-82m-v1.1-zh:\n\n==================\nKokoro-82M-v1.1-zh\n==================\n\n- **Model Name:** Kokoro-82M-v1.1-zh\n- **Model Family:** Kokoro-zh\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** hexgrad/Kokoro-82M-v1.1-zh\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Kokoro-82M-v1.1-zh --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/kokoro-82m.rst",
    "content": ".. _models_builtin_kokoro-82m:\n\n==========\nKokoro-82M\n==========\n\n- **Model Name:** Kokoro-82M\n- **Model Family:** Kokoro\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** hexgrad/Kokoro-82M\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Kokoro-82M --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/megatts3.rst",
    "content": ".. _models_builtin_megatts3:\n\n========\nMegaTTS3\n========\n\n- **Model Name:** MegaTTS3\n- **Model Family:** MegaTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** ByteDance/MegaTTS3\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MegaTTS3 --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/melotts-chinese.rst",
    "content": ".. _models_builtin_melotts-chinese:\n\n===============\nMeloTTS-Chinese\n===============\n\n- **Model Name:** MeloTTS-Chinese\n- **Model Family:** MeloTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** myshell-ai/MeloTTS-Chinese\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MeloTTS-Chinese --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/melotts-english-v2.rst",
    "content": ".. _models_builtin_melotts-english-v2:\n\n==================\nMeloTTS-English-v2\n==================\n\n- **Model Name:** MeloTTS-English-v2\n- **Model Family:** MeloTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** myshell-ai/MeloTTS-English-v2\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MeloTTS-English-v2 --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/melotts-english-v3.rst",
    "content": ".. _models_builtin_melotts-english-v3:\n\n==================\nMeloTTS-English-v3\n==================\n\n- **Model Name:** MeloTTS-English-v3\n- **Model Family:** MeloTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** myshell-ai/MeloTTS-English-v3\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MeloTTS-English-v3 --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/melotts-english.rst",
    "content": ".. _models_builtin_melotts-english:\n\n===============\nMeloTTS-English\n===============\n\n- **Model Name:** MeloTTS-English\n- **Model Family:** MeloTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** myshell-ai/MeloTTS-English\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MeloTTS-English --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/melotts-french.rst",
    "content": ".. _models_builtin_melotts-french:\n\n==============\nMeloTTS-French\n==============\n\n- **Model Name:** MeloTTS-French\n- **Model Family:** MeloTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** myshell-ai/MeloTTS-French\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MeloTTS-French --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/melotts-japanese.rst",
    "content": ".. _models_builtin_melotts-japanese:\n\n================\nMeloTTS-Japanese\n================\n\n- **Model Name:** MeloTTS-Japanese\n- **Model Family:** MeloTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** myshell-ai/MeloTTS-Japanese\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MeloTTS-Japanese --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/melotts-korean.rst",
    "content": ".. _models_builtin_melotts-korean:\n\n==============\nMeloTTS-Korean\n==============\n\n- **Model Name:** MeloTTS-Korean\n- **Model Family:** MeloTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** myshell-ai/MeloTTS-Korean\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MeloTTS-Korean --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/melotts-spanish.rst",
    "content": ".. _models_builtin_melotts-spanish:\n\n===============\nMeloTTS-Spanish\n===============\n\n- **Model Name:** MeloTTS-Spanish\n- **Model Family:** MeloTTS\n- **Abilities:** ['text2audio', 'text2audio_zero_shot']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** myshell-ai/MeloTTS-Spanish\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MeloTTS-Spanish --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/paraformer-zh-hotword.rst",
    "content": ".. _models_builtin_paraformer-zh-hotword:\n\n=====================\nparaformer-zh-hotword\n=====================\n\n- **Model Name:** paraformer-zh-hotword\n- **Model Family:** funasr\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** JunHowie/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name paraformer-zh-hotword --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/paraformer-zh-long.rst",
    "content": ".. _models_builtin_paraformer-zh-long:\n\n==================\nparaformer-zh-long\n==================\n\n- **Model Name:** paraformer-zh-long\n- **Model Family:** funasr\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** JunHowie/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name paraformer-zh-long --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/paraformer-zh-spk.rst",
    "content": ".. _models_builtin_paraformer-zh-spk:\n\n=================\nparaformer-zh-spk\n=================\n\n- **Model Name:** paraformer-zh-spk\n- **Model Family:** funasr\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** JunHowie/speech_paraformer-large-vad-punc-spk_asr_nat-zh-cn\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name paraformer-zh-spk --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/paraformer-zh.rst",
    "content": ".. _models_builtin_paraformer-zh:\n\n=============\nparaformer-zh\n=============\n\n- **Model Name:** paraformer-zh\n- **Model Family:** funasr\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** funasr/paraformer-zh\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name paraformer-zh --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/qwen3-asr-0.6b.rst",
    "content": ".. _models_builtin_qwen3-asr-0.6b:\n\n==============\nQwen3-ASR-0.6B\n==============\n\n- **Model Name:** Qwen3-ASR-0.6B\n- **Model Family:** qwen3_asr\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen3-ASR-0.6B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-ASR-0.6B --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/qwen3-asr-1.7b.rst",
    "content": ".. _models_builtin_qwen3-asr-1.7b:\n\n==============\nQwen3-ASR-1.7B\n==============\n\n- **Model Name:** Qwen3-ASR-1.7B\n- **Model Family:** qwen3_asr\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen3-ASR-1.7B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-ASR-1.7B --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/seaco-paraformer-zh.rst",
    "content": ".. _models_builtin_seaco-paraformer-zh:\n\n===================\nseaco-paraformer-zh\n===================\n\n- **Model Name:** seaco-paraformer-zh\n- **Model Family:** funasr\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** JunHowie/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name seaco-paraformer-zh --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/sensevoicesmall.rst",
    "content": ".. _models_builtin_sensevoicesmall:\n\n===============\nSenseVoiceSmall\n===============\n\n- **Model Name:** SenseVoiceSmall\n- **Model Family:** funasr\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** FunAudioLLM/SenseVoiceSmall\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name SenseVoiceSmall --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-base-mlx.rst",
    "content": ".. _models_builtin_whisper-base-mlx:\n\n================\nwhisper-base-mlx\n================\n\n- **Model Name:** whisper-base-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-base-mlx\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-base-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-base.en-mlx.rst",
    "content": ".. _models_builtin_whisper-base.en-mlx:\n\n===================\nwhisper-base.en-mlx\n===================\n\n- **Model Name:** whisper-base.en-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-base.en-mlx\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-base.en-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-base.en.rst",
    "content": ".. _models_builtin_whisper-base.en:\n\n===============\nwhisper-base.en\n===============\n\n- **Model Name:** whisper-base.en\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-base.en\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-base.en --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-base.rst",
    "content": ".. _models_builtin_whisper-base:\n\n============\nwhisper-base\n============\n\n- **Model Name:** whisper-base\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-base\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-base --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-large-v3-mlx.rst",
    "content": ".. _models_builtin_whisper-large-v3-mlx:\n\n====================\nwhisper-large-v3-mlx\n====================\n\n- **Model Name:** whisper-large-v3-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-large-v3-mlx\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-large-v3-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-large-v3-turbo-mlx.rst",
    "content": ".. _models_builtin_whisper-large-v3-turbo-mlx:\n\n==========================\nwhisper-large-v3-turbo-mlx\n==========================\n\n- **Model Name:** whisper-large-v3-turbo-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-large-v3-turbo\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-large-v3-turbo-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-large-v3-turbo.rst",
    "content": ".. _models_builtin_whisper-large-v3-turbo:\n\n======================\nwhisper-large-v3-turbo\n======================\n\n- **Model Name:** whisper-large-v3-turbo\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-large-v3-turbo\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-large-v3-turbo --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-large-v3.rst",
    "content": ".. _models_builtin_whisper-large-v3:\n\n================\nwhisper-large-v3\n================\n\n- **Model Name:** whisper-large-v3\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-large-v3\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-large-v3 --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-medium-mlx.rst",
    "content": ".. _models_builtin_whisper-medium-mlx:\n\n==================\nwhisper-medium-mlx\n==================\n\n- **Model Name:** whisper-medium-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-medium-mlx\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-medium-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-medium.en-mlx.rst",
    "content": ".. _models_builtin_whisper-medium.en-mlx:\n\n=====================\nwhisper-medium.en-mlx\n=====================\n\n- **Model Name:** whisper-medium.en-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-medium.en-mlx\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-medium.en-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-medium.en.rst",
    "content": ".. _models_builtin_whisper-medium.en:\n\n=================\nwhisper-medium.en\n=================\n\n- **Model Name:** whisper-medium.en\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-medium.en\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-medium.en --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-medium.rst",
    "content": ".. _models_builtin_whisper-medium:\n\n==============\nwhisper-medium\n==============\n\n- **Model Name:** whisper-medium\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-medium\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-medium --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-small-mlx.rst",
    "content": ".. _models_builtin_whisper-small-mlx:\n\n=================\nwhisper-small-mlx\n=================\n\n- **Model Name:** whisper-small-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-small-mlx\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-small-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-small.en-mlx.rst",
    "content": ".. _models_builtin_whisper-small.en-mlx:\n\n====================\nwhisper-small.en-mlx\n====================\n\n- **Model Name:** whisper-small.en-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-small.en-mlx\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-small.en-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-small.en.rst",
    "content": ".. _models_builtin_whisper-small.en:\n\n================\nwhisper-small.en\n================\n\n- **Model Name:** whisper-small.en\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-small.en\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-small.en --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-small.rst",
    "content": ".. _models_builtin_whisper-small:\n\n=============\nwhisper-small\n=============\n\n- **Model Name:** whisper-small\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-small\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-small --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-tiny-mlx.rst",
    "content": ".. _models_builtin_whisper-tiny-mlx:\n\n================\nwhisper-tiny-mlx\n================\n\n- **Model Name:** whisper-tiny-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-tiny\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-tiny-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-tiny.en-mlx.rst",
    "content": ".. _models_builtin_whisper-tiny.en-mlx:\n\n===================\nwhisper-tiny.en-mlx\n===================\n\n- **Model Name:** whisper-tiny.en-mlx\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** mlx-community/whisper-tiny.en-mlx\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-tiny.en-mlx --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-tiny.en.rst",
    "content": ".. _models_builtin_whisper-tiny.en:\n\n===============\nwhisper-tiny.en\n===============\n\n- **Model Name:** whisper-tiny.en\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** False\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-tiny.en\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-tiny.en --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/audio/whisper-tiny.rst",
    "content": ".. _models_builtin_whisper-tiny:\n\n============\nwhisper-tiny\n============\n\n- **Model Name:** whisper-tiny\n- **Model Family:** whisper\n- **Abilities:** ['audio2text']\n- **Multilingual:** True\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openai/whisper-tiny\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name whisper-tiny --model-type audio"
  },
  {
    "path": "doc/source/models/builtin/embedding/bce-embedding-base_v1.rst",
    "content": ".. _models_builtin_bce-embedding-base_v1:\n\n=====================\nbce-embedding-base_v1\n=====================\n\n- **Model Name:** bce-embedding-base_v1\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 512\n- **Model ID:** maidalun1020/bce-embedding-base_v1\n- **Model Hubs**: `Hugging Face <https://huggingface.co/maidalun1020/bce-embedding-base_v1>`__, `ModelScope <https://modelscope.cn/models/maidalun/bce-embedding-base_v1>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bce-embedding-base_v1 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-base-en-v1.5.rst",
    "content": ".. _models_builtin_bge-base-en-v1.5:\n\n================\nbge-base-en-v1.5\n================\n\n- **Model Name:** bge-base-en-v1.5\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-base-en-v1.5\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-base-en-v1.5>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-base-en-v1.5>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-base-en-v1.5 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-base-en.rst",
    "content": ".. _models_builtin_bge-base-en:\n\n===========\nbge-base-en\n===========\n\n- **Model Name:** bge-base-en\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-base-en\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-base-en>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-base-en>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-base-en --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-base-zh-v1.5.rst",
    "content": ".. _models_builtin_bge-base-zh-v1.5:\n\n================\nbge-base-zh-v1.5\n================\n\n- **Model Name:** bge-base-zh-v1.5\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-base-zh-v1.5\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-base-zh-v1.5>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-base-zh-v1.5>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-base-zh-v1.5 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-base-zh.rst",
    "content": ".. _models_builtin_bge-base-zh:\n\n===========\nbge-base-zh\n===========\n\n- **Model Name:** bge-base-zh\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-base-zh\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-base-zh>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-base-zh>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-base-zh --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-large-en-v1.5.rst",
    "content": ".. _models_builtin_bge-large-en-v1.5:\n\n=================\nbge-large-en-v1.5\n=================\n\n- **Model Name:** bge-large-en-v1.5\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-large-en-v1.5\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-en-v1.5>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-large-en-v1.5>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-large-en-v1.5 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-large-en.rst",
    "content": ".. _models_builtin_bge-large-en:\n\n============\nbge-large-en\n============\n\n- **Model Name:** bge-large-en\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-large-en\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-en>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-large-en>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-large-en --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-large-zh-noinstruct.rst",
    "content": ".. _models_builtin_bge-large-zh-noinstruct:\n\n=======================\nbge-large-zh-noinstruct\n=======================\n\n- **Model Name:** bge-large-zh-noinstruct\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-large-zh-noinstruct\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-zh-noinstruct>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-large-zh-noinstruct>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-large-zh-noinstruct --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-large-zh-v1.5.rst",
    "content": ".. _models_builtin_bge-large-zh-v1.5:\n\n=================\nbge-large-zh-v1.5\n=================\n\n- **Model Name:** bge-large-zh-v1.5\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-large-zh-v1.5\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-zh-v1.5>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-large-zh-v1.5>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-large-zh-v1.5 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-large-zh.rst",
    "content": ".. _models_builtin_bge-large-zh:\n\n============\nbge-large-zh\n============\n\n- **Model Name:** bge-large-zh\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-large-zh\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-large-zh>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-large-zh>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-large-zh --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-m3.rst",
    "content": ".. _models_builtin_bge-m3:\n\n======\nbge-m3\n======\n\n- **Model Name:** bge-m3\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 8192\n- **Model ID:** BAAI/bge-m3\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-m3>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-m3>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-m3 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-small-en-v1.5.rst",
    "content": ".. _models_builtin_bge-small-en-v1.5:\n\n=================\nbge-small-en-v1.5\n=================\n\n- **Model Name:** bge-small-en-v1.5\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 384\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-small-en-v1.5\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-small-en-v1.5>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-small-en-v1.5>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-small-en-v1.5 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-small-zh-v1.5.rst",
    "content": ".. _models_builtin_bge-small-zh-v1.5:\n\n=================\nbge-small-zh-v1.5\n=================\n\n- **Model Name:** bge-small-zh-v1.5\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 512\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-small-zh-v1.5\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-small-zh-v1.5>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-small-zh-v1.5>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-small-zh-v1.5 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/bge-small-zh.rst",
    "content": ".. _models_builtin_bge-small-zh:\n\n============\nbge-small-zh\n============\n\n- **Model Name:** bge-small-zh\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 512\n- **Max Tokens:** 512\n- **Model ID:** BAAI/bge-small-zh\n- **Model Hubs**: `Hugging Face <https://huggingface.co/BAAI/bge-small-zh>`__, `ModelScope <https://modelscope.cn/models/Xorbits/bge-small-zh>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-small-zh --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/e5-large-v2.rst",
    "content": ".. _models_builtin_e5-large-v2:\n\n===========\ne5-large-v2\n===========\n\n- **Model Name:** e5-large-v2\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 512\n- **Model ID:** intfloat/e5-large-v2\n- **Model Hubs**: `Hugging Face <https://huggingface.co/intfloat/e5-large-v2>`__, `ModelScope <https://modelscope.cn/models/Xorbits/e5-large-v2>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name e5-large-v2 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/gme-qwen2-vl-2b-instruct.rst",
    "content": ".. _models_builtin_gme-qwen2-vl-2b-instruct:\n\n========================\ngme-Qwen2-VL-2B-Instruct\n========================\n\n- **Model Name:** gme-Qwen2-VL-2B-Instruct\n- **Languages:** en, zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1536\n- **Max Tokens:** 32768\n- **Model ID:** Alibaba-NLP/gme-Qwen2-VL-2B-Instruct\n- **Model Hubs**: `Hugging Face <https://huggingface.co/Alibaba-NLP/gme-Qwen2-VL-2B-Instruct>`__, `ModelScope <https://modelscope.cn/models/iic/gme-Qwen2-VL-2B-Instruct>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name gme-Qwen2-VL-2B-Instruct --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/gme-qwen2-vl-7b-instruct.rst",
    "content": ".. _models_builtin_gme-qwen2-vl-7b-instruct:\n\n========================\ngme-Qwen2-VL-7B-Instruct\n========================\n\n- **Model Name:** gme-Qwen2-VL-7B-Instruct\n- **Languages:** en, zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 3584\n- **Max Tokens:** 32768\n- **Model ID:** Alibaba-NLP/gme-Qwen2-VL-7B-Instruct\n- **Model Hubs**: `Hugging Face <https://huggingface.co/Alibaba-NLP/gme-Qwen2-VL-7B-Instruct>`__, `ModelScope <https://modelscope.cn/models/iic/gme-Qwen2-VL-7B-Instruct>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name gme-Qwen2-VL-7B-Instruct --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/gte-base.rst",
    "content": ".. _models_builtin_gte-base:\n\n========\ngte-base\n========\n\n- **Model Name:** gte-base\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 512\n- **Model ID:** thenlper/gte-base\n- **Model Hubs**: `Hugging Face <https://huggingface.co/thenlper/gte-base>`__, `ModelScope <https://modelscope.cn/models/Xorbits/gte-base>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name gte-base --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/gte-large.rst",
    "content": ".. _models_builtin_gte-large:\n\n=========\ngte-large\n=========\n\n- **Model Name:** gte-large\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 512\n- **Model ID:** thenlper/gte-large\n- **Model Hubs**: `Hugging Face <https://huggingface.co/thenlper/gte-large>`__, `ModelScope <https://modelscope.cn/models/Xorbits/gte-large>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name gte-large --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/gte-qwen2.rst",
    "content": ".. _models_builtin_gte-qwen2:\n\n=========\ngte-Qwen2\n=========\n\n- **Model Name:** gte-Qwen2\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 3584\n- **Max Tokens:** 32000\n- **Model ID:** Alibaba-NLP/gte-Qwen2-7B-instruct\n- **Model Hubs**: `Hugging Face <https://huggingface.co/Alibaba-NLP/gte-Qwen2-7B-instruct>`__, `ModelScope <https://modelscope.cn/models/iic/gte_Qwen2-7B-instruct>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name gte-Qwen2 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/index.rst",
    "content": ".. _models_embedding_index:\n\n================\nEmbedding Models\n================\n\nThe following is a list of built-in embedding models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  \n   bce-embedding-base_v1\n  \n   bge-base-en\n  \n   bge-base-en-v1.5\n  \n   bge-base-zh\n  \n   bge-base-zh-v1.5\n  \n   bge-large-en\n  \n   bge-large-en-v1.5\n  \n   bge-large-zh\n  \n   bge-large-zh-noinstruct\n  \n   bge-large-zh-v1.5\n  \n   bge-m3\n  \n   bge-small-en-v1.5\n  \n   bge-small-zh\n  \n   bge-small-zh-v1.5\n  \n   e5-large-v2\n  \n   gme-qwen2-vl-2b-instruct\n  \n   gme-qwen2-vl-7b-instruct\n  \n   gte-base\n  \n   gte-large\n  \n   gte-qwen2\n  \n   jina-clip-v2\n  \n   jina-embeddings-v2-base-en\n  \n   jina-embeddings-v2-base-zh\n  \n   jina-embeddings-v2-small-en\n  \n   jina-embeddings-v3\n  \n   jina-embeddings-v4\n  \n   m3e-base\n  \n   m3e-large\n  \n   m3e-small\n  \n   multilingual-e5-large\n  \n   qwen3-embedding-0.6b\n  \n   qwen3-embedding-4b\n  \n   qwen3-embedding-8b\n  \n   qwen3-vl-embedding-2b\n  \n   qwen3-vl-embedding-8b\n  \n   text2vec-base-chinese\n  \n   text2vec-base-chinese-paraphrase\n  \n   text2vec-base-chinese-sentence\n  \n   text2vec-base-multilingual\n  \n   text2vec-large-chinese\n  "
  },
  {
    "path": "doc/source/models/builtin/embedding/jina-clip-v2.rst",
    "content": ".. _models_builtin_jina-clip-v2:\n\n============\njina-clip-v2\n============\n\n- **Model Name:** jina-clip-v2\n- **Languages:** 89 languages supported\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 8192\n- **Model ID:** jinaai/jina-clip-v2\n- **Model Hubs**: `Hugging Face <https://huggingface.co/jinaai/jina-clip-v2>`__, `ModelScope <https://modelscope.cn/models/jinaai/jina-clip-v2>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name jina-clip-v2 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/jina-embeddings-v2-base-en.rst",
    "content": ".. _models_builtin_jina-embeddings-v2-base-en:\n\n==========================\njina-embeddings-v2-base-en\n==========================\n\n- **Model Name:** jina-embeddings-v2-base-en\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 512\n- **Max Tokens:** 8192\n- **Model ID:** jinaai/jina-embeddings-v2-base-en\n- **Model Hubs**: `Hugging Face <https://huggingface.co/jinaai/jina-embeddings-v2-base-en>`__, `ModelScope <https://modelscope.cn/models/Xorbits/jina-embeddings-v2-base-en>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name jina-embeddings-v2-base-en --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/jina-embeddings-v2-base-zh.rst",
    "content": ".. _models_builtin_jina-embeddings-v2-base-zh:\n\n==========================\njina-embeddings-v2-base-zh\n==========================\n\n- **Model Name:** jina-embeddings-v2-base-zh\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 8192\n- **Model ID:** jinaai/jina-embeddings-v2-base-zh\n- **Model Hubs**: `Hugging Face <https://huggingface.co/jinaai/jina-embeddings-v2-base-zh>`__, `ModelScope <https://modelscope.cn/models/jinaai/jina-embeddings-v2-base-zh>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name jina-embeddings-v2-base-zh --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/jina-embeddings-v2-small-en.rst",
    "content": ".. _models_builtin_jina-embeddings-v2-small-en:\n\n===========================\njina-embeddings-v2-small-en\n===========================\n\n- **Model Name:** jina-embeddings-v2-small-en\n- **Languages:** en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 512\n- **Max Tokens:** 8192\n- **Model ID:** jinaai/jina-embeddings-v2-small-en\n- **Model Hubs**: `Hugging Face <https://huggingface.co/jinaai/jina-embeddings-v2-small-en>`__, `ModelScope <https://modelscope.cn/models/Xorbits/jina-embeddings-v2-small-en>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name jina-embeddings-v2-small-en --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/jina-embeddings-v3.rst",
    "content": ".. _models_builtin_jina-embeddings-v3:\n\n==================\njina-embeddings-v3\n==================\n\n- **Model Name:** jina-embeddings-v3\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 8192\n- **Model ID:** jinaai/jina-embeddings-v3\n- **Model Hubs**: `Hugging Face <https://huggingface.co/jinaai/jina-embeddings-v3>`__, `ModelScope <https://modelscope.cn/models/jinaai/jina-embeddings-v3>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name jina-embeddings-v3 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/jina-embeddings-v4.rst",
    "content": ".. _models_builtin_jina-embeddings-v4:\n\n==================\njina-embeddings-v4\n==================\n\n- **Model Name:** jina-embeddings-v4\n- **Languages:** 30+ languages supported\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 2048\n- **Max Tokens:** 32768\n- **Model ID:** jinaai/jina-embeddings-v4\n- **Model Hubs**: `Hugging Face <https://huggingface.co/jinaai/jina-embeddings-v4>`__, `ModelScope <https://modelscope.cn/models/jinaai/jina-embeddings-v4>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name jina-embeddings-v4 --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/m3e-base.rst",
    "content": ".. _models_builtin_m3e-base:\n\n========\nm3e-base\n========\n\n- **Model Name:** m3e-base\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 512\n- **Model ID:** moka-ai/m3e-base\n- **Model Hubs**: `Hugging Face <https://huggingface.co/moka-ai/m3e-base>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/m3e-base>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name m3e-base --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/m3e-large.rst",
    "content": ".. _models_builtin_m3e-large:\n\n=========\nm3e-large\n=========\n\n- **Model Name:** m3e-large\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 512\n- **Model ID:** moka-ai/m3e-large\n- **Model Hubs**: `Hugging Face <https://huggingface.co/moka-ai/m3e-large>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/m3e-large>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name m3e-large --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/m3e-small.rst",
    "content": ".. _models_builtin_m3e-small:\n\n=========\nm3e-small\n=========\n\n- **Model Name:** m3e-small\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 512\n- **Max Tokens:** 512\n- **Model ID:** moka-ai/m3e-small\n- **Model Hubs**: `Hugging Face <https://huggingface.co/moka-ai/m3e-small>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/m3e-small>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name m3e-small --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/multilingual-e5-large.rst",
    "content": ".. _models_builtin_multilingual-e5-large:\n\n=====================\nmultilingual-e5-large\n=====================\n\n- **Model Name:** multilingual-e5-large\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 514\n- **Model ID:** intfloat/multilingual-e5-large\n- **Model Hubs**: `Hugging Face <https://huggingface.co/intfloat/multilingual-e5-large>`__, `ModelScope <https://modelscope.cn/models/Xorbits/multilingual-e5-large>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name multilingual-e5-large --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/qwen3-embedding-0.6b.rst",
    "content": ".. _models_builtin_qwen3-embedding-0.6b:\n\n====================\nQwen3-Embedding-0.6B\n====================\n\n- **Model Name:** Qwen3-Embedding-0.6B\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 32768\n- **Model ID:** Qwen/Qwen3-Embedding-0.6B\n- **Model Hubs**: `Hugging Face <https://huggingface.co/Qwen/Qwen3-Embedding-0.6B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Embedding-0.6B>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-Embedding-0.6B --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/qwen3-embedding-4b.rst",
    "content": ".. _models_builtin_qwen3-embedding-4b:\n\n==================\nQwen3-Embedding-4B\n==================\n\n- **Model Name:** Qwen3-Embedding-4B\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 2560\n- **Max Tokens:** 32768\n- **Model ID:** Qwen/Qwen3-Embedding-4B\n- **Model Hubs**: `Hugging Face <https://huggingface.co/Qwen/Qwen3-Embedding-4B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Embedding-4B>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-Embedding-4B --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/qwen3-embedding-8b.rst",
    "content": ".. _models_builtin_qwen3-embedding-8b:\n\n==================\nQwen3-Embedding-8B\n==================\n\n- **Model Name:** Qwen3-Embedding-8B\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 4096\n- **Max Tokens:** 32768\n- **Model ID:** Qwen/Qwen3-Embedding-8B\n- **Model Hubs**: `Hugging Face <https://huggingface.co/Qwen/Qwen3-Embedding-8B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Embedding-8B>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-Embedding-8B --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/qwen3-vl-embedding-2b.rst",
    "content": ".. _models_builtin_qwen3-vl-embedding-2b:\n\n=====================\nQwen3-VL-Embedding-2B\n=====================\n\n- **Model Name:** Qwen3-VL-Embedding-2B\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 2048\n- **Max Tokens:** 8192\n- **Model ID:** Qwen/Qwen3-VL-Embedding-2B\n- **Model Hubs**: `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-Embedding-2B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-Embedding-2B>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-VL-Embedding-2B --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/qwen3-vl-embedding-8b.rst",
    "content": ".. _models_builtin_qwen3-vl-embedding-8b:\n\n=====================\nQwen3-VL-Embedding-8B\n=====================\n\n- **Model Name:** Qwen3-VL-Embedding-8B\n- **Languages:** zh, en\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 4096\n- **Max Tokens:** 8192\n- **Model ID:** Qwen/Qwen3-VL-Embedding-8B\n- **Model Hubs**: `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-Embedding-8B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-Embedding-8B>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-VL-Embedding-8B --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/text2vec-base-chinese-paraphrase.rst",
    "content": ".. _models_builtin_text2vec-base-chinese-paraphrase:\n\n================================\ntext2vec-base-chinese-paraphrase\n================================\n\n- **Model Name:** text2vec-base-chinese-paraphrase\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 256\n- **Model ID:** shibing624/text2vec-base-chinese-paraphrase\n- **Model Hubs**: `Hugging Face <https://huggingface.co/shibing624/text2vec-base-chinese-paraphrase>`__, `ModelScope <https://modelscope.cn/models/mwei23/text2vec-base-chinese-paraphrase>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name text2vec-base-chinese-paraphrase --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/text2vec-base-chinese-sentence.rst",
    "content": ".. _models_builtin_text2vec-base-chinese-sentence:\n\n==============================\ntext2vec-base-chinese-sentence\n==============================\n\n- **Model Name:** text2vec-base-chinese-sentence\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 256\n- **Model ID:** shibing624/text2vec-base-chinese-sentence\n- **Model Hubs**: `Hugging Face <https://huggingface.co/shibing624/text2vec-base-chinese-sentence>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name text2vec-base-chinese-sentence --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/text2vec-base-chinese.rst",
    "content": ".. _models_builtin_text2vec-base-chinese:\n\n=====================\ntext2vec-base-chinese\n=====================\n\n- **Model Name:** text2vec-base-chinese\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 768\n- **Max Tokens:** 128\n- **Model ID:** shibing624/text2vec-base-chinese\n- **Model Hubs**: `Hugging Face <https://huggingface.co/shibing624/text2vec-base-chinese>`__, `ModelScope <https://modelscope.cn/models/Jerry0/text2vec-base-chinese>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name text2vec-base-chinese --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/text2vec-base-multilingual.rst",
    "content": ".. _models_builtin_text2vec-base-multilingual:\n\n==========================\ntext2vec-base-multilingual\n==========================\n\n- **Model Name:** text2vec-base-multilingual\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 384\n- **Max Tokens:** 256\n- **Model ID:** shibing624/text2vec-base-multilingual\n- **Model Hubs**: `Hugging Face <https://huggingface.co/shibing624/text2vec-base-multilingual>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name text2vec-base-multilingual --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/embedding/text2vec-large-chinese.rst",
    "content": ".. _models_builtin_text2vec-large-chinese:\n\n======================\ntext2vec-large-chinese\n======================\n\n- **Model Name:** text2vec-large-chinese\n- **Languages:** zh\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** 1024\n- **Max Tokens:** 256\n- **Model ID:** shibing624/text2vec-bge-large-chinese\n- **Model Hubs**: `Hugging Face <https://huggingface.co/shibing624/text2vec-bge-large-chinese>`__, `ModelScope <https://modelscope.cn/models/Jerry0/text2vec-large-chinese>`__\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name text2vec-large-chinese --model-type embedding"
  },
  {
    "path": "doc/source/models/builtin/image/cogview4.rst",
    "content": ".. _models_builtin_cogview4:\n\n========\ncogview4\n========\n\n- **Model Name:** cogview4\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** THUDM/CogView4-6B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name cogview4 --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/deepseek-ocr.rst",
    "content": ".. _models_builtin_deepseek-ocr:\n\n============\nDeepSeek-OCR\n============\n\n- **Model Name:** DeepSeek-OCR\n- **Model Family:** ocr\n- **Abilities:** ocr\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** deepseek-ai/DeepSeek-OCR\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name DeepSeek-OCR --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/flux.1-dev.rst",
    "content": ".. _models_builtin_flux.1-dev:\n\n==========\nFLUX.1-dev\n==========\n\n- **Model Name:** FLUX.1-dev\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image, inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** black-forest-labs/FLUX.1-dev\n- **GGUF Model ID**: city96/FLUX.1-dev-gguf\n- **GGUF Quantizations**: F16, Q2_K, Q3_K_S, Q4_0, Q4_1, Q4_K_S, Q5_0, Q5_1, Q5_K_S, Q6_K, Q8_0\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name FLUX.1-dev --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name FLUX.1-dev --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/flux.1-kontext-dev.rst",
    "content": ".. _models_builtin_flux.1-kontext-dev:\n\n==================\nFLUX.1-Kontext-dev\n==================\n\n- **Model Name:** FLUX.1-Kontext-dev\n- **Model Family:** stable_diffusion\n- **Abilities:** image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** black-forest-labs/FLUX.1-Kontext-dev\n- **GGUF Model ID**: bullerwins/FLUX.1-Kontext-dev-GGUF\n- **GGUF Quantizations**: BF16, Q2_K, Q3_K_S, Q4_K_M, Q4_K_S, Q4_K_S, Q5_K_M, Q5_K_S, Q5_K_S, Q6_K, Q8_0\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name FLUX.1-Kontext-dev --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name FLUX.1-Kontext-dev --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/flux.1-schnell.rst",
    "content": ".. _models_builtin_flux.1-schnell:\n\n==============\nFLUX.1-schnell\n==============\n\n- **Model Name:** FLUX.1-schnell\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image, inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** black-forest-labs/FLUX.1-schnell\n- **GGUF Model ID**: city96/FLUX.1-schnell-gguf\n- **GGUF Quantizations**: F16, Q2_K, Q3_K_S, Q4_0, Q4_1, Q4_K_S, Q5_0, Q5_1, Q5_K_S, Q6_K, Q8_0\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name FLUX.1-schnell --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name FLUX.1-schnell --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/flux.2-dev.rst",
    "content": ".. _models_builtin_flux.2-dev:\n\n==========\nFLUX.2-dev\n==========\n\n- **Model Name:** FLUX.2-dev\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image, inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** black-forest-labs/FLUX.2-dev\n- **GGUF Model ID**: city96/FLUX.2-dev-gguf\n- **GGUF Quantizations**: BF16, Q2_K, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name FLUX.2-dev --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name FLUX.2-dev --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/flux.2-klein-4b.rst",
    "content": ".. _models_builtin_flux.2-klein-4b:\n\n===============\nFLUX.2-klein-4B\n===============\n\n- **Model Name:** FLUX.2-klein-4B\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** black-forest-labs/FLUX.2-klein-4B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name FLUX.2-klein-4B --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/flux.2-klein-9b.rst",
    "content": ".. _models_builtin_flux.2-klein-9b:\n\n===============\nFLUX.2-klein-9B\n===============\n\n- **Model Name:** FLUX.2-klein-9B\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** black-forest-labs/FLUX.2-klein-9B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name FLUX.2-klein-9B --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/got-ocr2_0.rst",
    "content": ".. _models_builtin_got-ocr2_0:\n\n==========\nGOT-OCR2_0\n==========\n\n- **Model Name:** GOT-OCR2_0\n- **Model Family:** ocr\n- **Abilities:** ocr\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** stepfun-ai/GOT-OCR2_0\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name GOT-OCR2_0 --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/hunyuandit-v1.2-distilled.rst",
    "content": ".. _models_builtin_hunyuandit-v1.2-distilled:\n\n=========================\nHunyuanDiT-v1.2-Distilled\n=========================\n\n- **Model Name:** HunyuanDiT-v1.2-Distilled\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers-Distilled\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name HunyuanDiT-v1.2-Distilled --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/hunyuandit-v1.2.rst",
    "content": ".. _models_builtin_hunyuandit-v1.2:\n\n===============\nHunyuanDiT-v1.2\n===============\n\n- **Model Name:** HunyuanDiT-v1.2\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name HunyuanDiT-v1.2 --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/hunyuanocr.rst",
    "content": ".. _models_builtin_hunyuanocr:\n\n==========\nHunyuanOCR\n==========\n\n- **Model Name:** HunyuanOCR\n- **Model Family:** ocr\n- **Abilities:** ocr\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** tencent/HunyuanOCR\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name HunyuanOCR --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/index.rst",
    "content": ".. _models_image_index:\n\n================\nImage Models\n================\n\nThe following is a list of built-in image models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  \n   cogview4\n  \n   deepseek-ocr\n  \n   flux.1-dev\n  \n   flux.1-kontext-dev\n  \n   flux.1-schnell\n  \n   flux.2-dev\n  \n   flux.2-klein-4b\n  \n   flux.2-klein-9b\n  \n   got-ocr2_0\n  \n   hunyuandit-v1.2\n  \n   hunyuandit-v1.2-distilled\n  \n   hunyuanocr\n  \n   kolors\n  \n   paddleocr-vl\n  \n   qwen-image\n  \n   qwen-image-2512\n  \n   qwen-image-edit\n  \n   qwen-image-edit-2509\n  \n   qwen-image-edit-2511\n  \n   qwen-image-layered\n  \n   sd-turbo\n  \n   sd3-medium\n  \n   sd3.5-large\n  \n   sd3.5-large-turbo\n  \n   sd3.5-medium\n  \n   sdxl-turbo\n  \n   stable-diffusion-2-inpainting\n  \n   stable-diffusion-inpainting\n  \n   stable-diffusion-v1.5\n  \n   stable-diffusion-xl-base-1.0\n  \n   stable-diffusion-xl-inpainting\n  \n   z-image\n  \n   z-image-turbo\n  "
  },
  {
    "path": "doc/source/models/builtin/image/kolors.rst",
    "content": ".. _models_builtin_kolors:\n\n======\nkolors\n======\n\n- **Model Name:** kolors\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Kwai-Kolors/Kolors-diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name kolors --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/mineru2.5-2509-1.2b.rst",
    "content": ".. _models_builtin_mineru2.5-2509-1.2b:\n\n===================\nMinerU2.5-2509-1.2B\n===================\n\n- **Model Name:** MinerU2.5-2509-1.2B\n- **Model Family:** ocr\n- **Abilities:** ocr\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** opendatalab/MinerU2.5-2509-1.2B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name MinerU2.5-2509-1.2B --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/paddleocr-vl.rst",
    "content": ".. _models_builtin_paddleocr-vl:\n\n============\nPaddleOCR-VL\n============\n\n- **Model Name:** PaddleOCR-VL\n- **Model Family:** ocr\n- **Abilities:** ocr\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** PaddlePaddle/PaddleOCR-VL\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name PaddleOCR-VL --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/qwen-image-2512.rst",
    "content": ".. _models_builtin_qwen-image-2512:\n\n===============\nQwen-Image-2512\n===============\n\n- **Model Name:** Qwen-Image-2512\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image, inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen-Image-2512\n- **GGUF Model ID**: unsloth/Qwen-Image-2512-GGUF\n- **GGUF Quantizations**: BF16, F16, Q2_K, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n\n- **Lightning Model ID**: lightx2v/Qwen-Image-2512-Lightning\n- **Lightning Versions**: 4steps-V1.0-bf16, 4steps-V1.0-fp32\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen-Image-2512 --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name Qwen-Image-2512 --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n\nFor Lightning LoRA acceleration, using below command::\n\n    xinference launch --model-name Qwen-Image-2512 --model-type image --lightning_version ${lightning_version}\n"
  },
  {
    "path": "doc/source/models/builtin/image/qwen-image-edit-2509.rst",
    "content": ".. _models_builtin_qwen-image-edit-2509:\n\n====================\nQwen-Image-Edit-2509\n====================\n\n- **Model Name:** Qwen-Image-Edit-2509\n- **Model Family:** stable_diffusion\n- **Abilities:** image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen-Image-Edit-2509\n- **GGUF Model ID**: QuantStack/Qwen-Image-Edit-2509-GGUF\n- **GGUF Quantizations**: Q2_K, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n\n- **Lightning Model ID**: lightx2v/Qwen-Image-Lightning\n- **Lightning Versions**: 4steps-V1.0-bf16, 4steps-V1.0-fp32, 8steps-V1.0-bf16, 8steps-V1.0-fp32\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen-Image-Edit-2509 --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name Qwen-Image-Edit-2509 --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n\nFor Lightning LoRA acceleration, using below command::\n\n    xinference launch --model-name Qwen-Image-Edit-2509 --model-type image --lightning_version ${lightning_version}\n"
  },
  {
    "path": "doc/source/models/builtin/image/qwen-image-edit-2511.rst",
    "content": ".. _models_builtin_qwen-image-edit-2511:\n\n====================\nQwen-Image-Edit-2511\n====================\n\n- **Model Name:** Qwen-Image-Edit-2511\n- **Model Family:** stable_diffusion\n- **Abilities:** image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen-Image-Edit-2511\n- **GGUF Model ID**: unsloth/Qwen-Image-Edit-2511-GGUF\n- **GGUF Quantizations**: BF16, F16, Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n\n- **Lightning Model ID**: lightx2v/Qwen-Image-Edit-2511-Lightning\n- **Lightning Versions**: 4steps-V1.0-bf16, 4steps-V1.0-fp32\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen-Image-Edit-2511 --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name Qwen-Image-Edit-2511 --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n\nFor Lightning LoRA acceleration, using below command::\n\n    xinference launch --model-name Qwen-Image-Edit-2511 --model-type image --lightning_version ${lightning_version}\n"
  },
  {
    "path": "doc/source/models/builtin/image/qwen-image-edit.rst",
    "content": ".. _models_builtin_qwen-image-edit:\n\n===============\nQwen-Image-Edit\n===============\n\n- **Model Name:** Qwen-Image-Edit\n- **Model Family:** stable_diffusion\n- **Abilities:** image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen-Image-Edit\n- **GGUF Model ID**: QuantStack/Qwen-Image-Edit-GGUF\n- **GGUF Quantizations**: Q2_K, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n\n- **Lightning Model ID**: lightx2v/Qwen-Image-Lightning\n- **Lightning Versions**: 4steps-V1.0-bf16, 4steps-V1.0, 8steps-V1.0-bf16, 8steps-V1.0\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen-Image-Edit --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name Qwen-Image-Edit --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n\nFor Lightning LoRA acceleration, using below command::\n\n    xinference launch --model-name Qwen-Image-Edit --model-type image --lightning_version ${lightning_version}\n"
  },
  {
    "path": "doc/source/models/builtin/image/qwen-image-layered.rst",
    "content": ".. _models_builtin_qwen-image-layered:\n\n==================\nQwen-Image-Layered\n==================\n\n- **Model Name:** Qwen-Image-Layered\n- **Model Family:** stable_diffusion\n- **Abilities:** image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen-Image-Layered\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen-Image-Layered --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/qwen-image.rst",
    "content": ".. _models_builtin_qwen-image:\n\n==========\nQwen-Image\n==========\n\n- **Model Name:** Qwen-Image\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image, inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen-Image\n- **GGUF Model ID**: city96/Qwen-Image-gguf\n- **GGUF Quantizations**: F16, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n\n- **Lightning Model ID**: lightx2v/Qwen-Image-Lightning\n- **Lightning Versions**: 4steps-V1.0-bf16, 4steps-V1.0, 8steps-V1.0, 8steps-V1.1-bf16, 8steps-V1.1\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen-Image --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name Qwen-Image --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n\nFor Lightning LoRA acceleration, using below command::\n\n    xinference launch --model-name Qwen-Image --model-type image --lightning_version ${lightning_version}\n"
  },
  {
    "path": "doc/source/models/builtin/image/sd-turbo.rst",
    "content": ".. _models_builtin_sd-turbo:\n\n========\nsd-turbo\n========\n\n- **Model Name:** sd-turbo\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** stabilityai/sd-turbo\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name sd-turbo --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/sd3-medium.rst",
    "content": ".. _models_builtin_sd3-medium:\n\n==========\nsd3-medium\n==========\n\n- **Model Name:** sd3-medium\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image, inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** stabilityai/stable-diffusion-3-medium-diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name sd3-medium --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/sd3.5-large-turbo.rst",
    "content": ".. _models_builtin_sd3.5-large-turbo:\n\n=================\nsd3.5-large-turbo\n=================\n\n- **Model Name:** sd3.5-large-turbo\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image, inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** stabilityai/stable-diffusion-3.5-large-turbo\n- **GGUF Model ID**: city96/stable-diffusion-3.5-large-turbo-gguf\n- **GGUF Quantizations**: F16, Q4_0, Q4_1, Q5_0, Q5_1, Q8_0\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name sd3.5-large-turbo --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name sd3.5-large-turbo --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/sd3.5-large.rst",
    "content": ".. _models_builtin_sd3.5-large:\n\n===========\nsd3.5-large\n===========\n\n- **Model Name:** sd3.5-large\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image, inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** stabilityai/stable-diffusion-3.5-large\n- **GGUF Model ID**: city96/stable-diffusion-3.5-large-gguf\n- **GGUF Quantizations**: F16, Q4_0, Q4_1, Q5_0, Q5_1, Q8_0\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name sd3.5-large --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name sd3.5-large --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/sd3.5-medium.rst",
    "content": ".. _models_builtin_sd3.5-medium:\n\n============\nsd3.5-medium\n============\n\n- **Model Name:** sd3.5-medium\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image, inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** stabilityai/stable-diffusion-3.5-medium\n- **GGUF Model ID**: city96/stable-diffusion-3.5-medium-gguf\n- **GGUF Quantizations**: F16, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name sd3.5-medium --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name sd3.5-medium --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/sdxl-turbo.rst",
    "content": ".. _models_builtin_sdxl-turbo:\n\n==========\nsdxl-turbo\n==========\n\n- **Model Name:** sdxl-turbo\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** stabilityai/sdxl-turbo\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name sdxl-turbo --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/stable-diffusion-2-inpainting.rst",
    "content": ".. _models_builtin_stable-diffusion-2-inpainting:\n\n=============================\nstable-diffusion-2-inpainting\n=============================\n\n- **Model Name:** stable-diffusion-2-inpainting\n- **Model Family:** stable_diffusion\n- **Abilities:** inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** stabilityai/stable-diffusion-2-inpainting\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name stable-diffusion-2-inpainting --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/stable-diffusion-inpainting.rst",
    "content": ".. _models_builtin_stable-diffusion-inpainting:\n\n===========================\nstable-diffusion-inpainting\n===========================\n\n- **Model Name:** stable-diffusion-inpainting\n- **Model Family:** stable_diffusion\n- **Abilities:** inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** runwayml/stable-diffusion-inpainting\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name stable-diffusion-inpainting --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/stable-diffusion-v1.5.rst",
    "content": ".. _models_builtin_stable-diffusion-v1.5:\n\n=====================\nstable-diffusion-v1.5\n=====================\n\n- **Model Name:** stable-diffusion-v1.5\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image\n- **Available ControlNet:** ['canny', 'mlsd', 'hed', 'scribble', 'openpose', 'normal', 'seg']\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** runwayml/stable-diffusion-v1-5\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name stable-diffusion-v1.5 --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/stable-diffusion-xl-base-1.0.rst",
    "content": ".. _models_builtin_stable-diffusion-xl-base-1.0:\n\n============================\nstable-diffusion-xl-base-1.0\n============================\n\n- **Model Name:** stable-diffusion-xl-base-1.0\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image\n- **Available ControlNet:** ['canny', 'depth', 'zoe-depth']\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** stabilityai/stable-diffusion-xl-base-1.0\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name stable-diffusion-xl-base-1.0 --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/stable-diffusion-xl-inpainting.rst",
    "content": ".. _models_builtin_stable-diffusion-xl-inpainting:\n\n==============================\nstable-diffusion-xl-inpainting\n==============================\n\n- **Model Name:** stable-diffusion-xl-inpainting\n- **Model Family:** stable_diffusion\n- **Abilities:** inpainting\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** diffusers/stable-diffusion-xl-1.0-inpainting-0.1\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name stable-diffusion-xl-inpainting --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/z-image-turbo.rst",
    "content": ".. _models_builtin_z-image-turbo:\n\n=============\nZ-Image-Turbo\n=============\n\n- **Model Name:** Z-Image-Turbo\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Tongyi-MAI/Z-Image-Turbo\n- **GGUF Model ID**: unsloth/Z-Image-Turbo-GGUF\n- **GGUF Quantizations**: ['BF16', 'F16', 'Q2_K', 'Q3_K_L', 'Q3_K_M', 'Q3_K_S', 'Q4_0', 'Q4_1', 'Q4_K_M', 'Q4_K_S', 'Q5_0', 'Q5_1', 'Q5_K_M', 'Q5_K_S', 'Q6_K', 'Q8_0']\n\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Z-Image-Turbo --model-type image\n\n\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name Z-Image-Turbo --model-type image --gguf_quantization ${gguf_quantization} --cpu_offload True\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/image/z-image.rst",
    "content": ".. _models_builtin_z-image:\n\n=======\nZ-Image\n=======\n\n- **Model Name:** Z-Image\n- **Model Family:** stable_diffusion\n- **Abilities:** text2image, image2image\n- **Available ControlNet:** None\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Tongyi-MAI/Z-Image\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Z-Image --model-type image\n\n\n\n"
  },
  {
    "path": "doc/source/models/builtin/index.rst",
    "content": ".. _models_builtin_index:\n\n==============\nBuiltin Models\n==============\n\n.. toctree::\n   :maxdepth: 1\n\n   llm/index\n   embedding/index\n   image/index\n   audio/index\n   rerank/index\n   video/index\n"
  },
  {
    "path": "doc/source/models/builtin/llm/baichuan-2-chat.rst",
    "content": ".. _models_llm_baichuan-2-chat:\n\n========================================\nbaichuan-2-chat\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** baichuan-2-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** Baichuan2-chat is a fine-tuned version of the Baichuan LLM, specializing in chatting.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** baichuan-inc/Baichuan2-7B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat>`__, `ModelScope <https://modelscope.cn/models/baichuan-inc/Baichuan2-7B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name baichuan-2-chat --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** baichuan-inc/Baichuan2-13B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat>`__, `ModelScope <https://modelscope.cn/models/baichuan-inc/Baichuan2-13B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name baichuan-2-chat --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/baichuan-2.rst",
    "content": ".. _models_llm_baichuan-2:\n\n========================================\nbaichuan-2\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** baichuan-2\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** Baichuan2 is an open-source Transformer based LLM that is trained on both Chinese and English data.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** baichuan-inc/Baichuan2-7B-Base\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-inc/Baichuan2-7B-Base>`__, `ModelScope <https://modelscope.cn/models/baichuan-inc/Baichuan2-7B-Base>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name baichuan-2 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** baichuan-inc/Baichuan2-13B-Base\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-inc/Baichuan2-13B-Base>`__, `ModelScope <https://modelscope.cn/models/baichuan-inc/Baichuan2-13B-Base>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name baichuan-2 --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/baichuan-m2.rst",
    "content": ".. _models_llm_baichuan-m2:\n\n========================================\nBaichuan-M2\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** Baichuan-M2\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, hybrid, tools\n- **Description:** Baichuan-M2-32B is Baichuan AI's medical-enhanced reasoning model, the second medical model released by Baichuan. Designed for real-world medical reasoning tasks, this model builds upon Qwen2.5-32B with an innovative Large Verifier System. Through domain-specific fine-tuning on real-world medical questions, it achieves breakthrough medical performance while maintaining strong general capabilities.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** baichuan-inc/Baichuan-M2-32B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-inc/Baichuan-M2-32B>`__, `ModelScope <https://modelscope.cn/models/baichuan-inc/Baichuan-M2-32B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Baichuan-M2 --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** baichuan-inc/Baichuan-M2-32B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/baichuan-inc/Baichuan-M2-32B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/baichuan-inc/Baichuan-M2-32B-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Baichuan-M2 --size-in-billions 32 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/code-llama-instruct.rst",
    "content": ".. _models_llm_code-llama-instruct:\n\n========================================\ncode-llama-instruct\n========================================\n\n- **Context Length:** 100000\n- **Model Name:** code-llama-instruct\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** Code-Llama-Instruct is an instruct-tuned version of the Code-Llama LLM.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** codellama/CodeLlama-7b-Instruct-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/codellama/CodeLlama-7b-Instruct-hf>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/CodeLlama-7b-Instruct-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-instruct --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** codellama/CodeLlama-13b-Instruct-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/codellama/CodeLlama-13b-Instruct-hf>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/CodeLlama-13b-Instruct-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-instruct --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** codellama/CodeLlama-34b-Instruct-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/codellama/CodeLlama-34b-Instruct-hf>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/CodeLlama-34b-Instruct-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-instruct --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/CodeLlama-7B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-7B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/CodeLlama-7B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-instruct --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 13\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/CodeLlama-13B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-13B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/CodeLlama-13B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-instruct --size-in-billions 13 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 34\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/CodeLlama-34B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-34B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/CodeLlama-34B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-instruct --size-in-billions 34 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/code-llama-python.rst",
    "content": ".. _models_llm_code-llama-python:\n\n========================================\ncode-llama-python\n========================================\n\n- **Context Length:** 100000\n- **Model Name:** code-llama-python\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** Code-Llama-Python is a fine-tuned version of the Code-Llama LLM, specializing in Python.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/CodeLlama-7B-Python-fp16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-7B-Python-fp16>`__, `ModelScope <https://modelscope.cn/models/Xorbits/CodeLlama-7B-Python-fp16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-python --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/CodeLlama-13B-Python-fp16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-13B-Python-fp16>`__, `ModelScope <https://modelscope.cn/models/Xorbits/CodeLlama-13B-Python-fp16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-python --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/CodeLlama-34B-Python-fp16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-34B-Python-fp16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-python --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/CodeLlama-7B-Python-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-7B-Python-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/CodeLlama-7B-Python-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-python --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 13\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/CodeLlama-13B-Python-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-13B-Python-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/CodeLlama-13B-Python-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-python --size-in-billions 13 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 34\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/CodeLlama-34B-Python-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-34B-Python-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama-python --size-in-billions 34 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/code-llama.rst",
    "content": ".. _models_llm_code-llama:\n\n========================================\ncode-llama\n========================================\n\n- **Context Length:** 100000\n- **Model Name:** code-llama\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** Code-Llama is an open-source LLM trained by fine-tuning LLaMA2 for generating and discussing code.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/CodeLlama-7B-fp16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-7B-fp16>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/CodeLlama-7b-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/CodeLlama-13B-fp16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-13B-fp16>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/CodeLlama-13b-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/CodeLlama-34B-fp16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-34B-fp16>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/CodeLlama-34b-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/CodeLlama-7B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-7B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 13\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/CodeLlama-13B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-13B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama --size-in-billions 13 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 34\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/CodeLlama-34B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/CodeLlama-34B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name code-llama --size-in-billions 34 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/codegeex4.rst",
    "content": ".. _models_llm_codegeex4:\n\n========================================\ncodegeex4\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** codegeex4\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** the open-source version of the latest CodeGeeX4 model series\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/codegeex4-all-9b\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/codegeex4-all-9b>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/codegeex4-all-9b>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codegeex4 --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 9\n- **Quantizations:** IQ2_M, IQ3_M, Q4_K_M, Q5_K_M, Q6_K_L, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** zai-org/codegeex4-all-9b-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/codegeex4-all-9b-GGUF>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/codegeex4-all-9b-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codegeex4 --size-in-billions 9 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/codeqwen1.5-chat.rst",
    "content": ".. _models_llm_codeqwen1.5-chat:\n\n========================================\ncodeqwen1.5-chat\n========================================\n\n- **Context Length:** 65536\n- **Model Name:** codeqwen1.5-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** CodeQwen1.5 is the Code-Specific version of Qwen1.5. It is a transformer-based decoder-only language model pretrained on a large amount of data of codes.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/CodeQwen1.5-7B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/CodeQwen1.5-7B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/CodeQwen1.5-7B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codeqwen1.5-chat --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/CodeQwen1.5-7B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/CodeQwen1.5-7B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/CodeQwen1.5-7B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codeqwen1.5-chat --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/CodeQwen1.5-7B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/CodeQwen1.5-7B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/CodeQwen1.5-7B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codeqwen1.5-chat --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/codeqwen1.5.rst",
    "content": ".. _models_llm_codeqwen1.5:\n\n========================================\ncodeqwen1.5\n========================================\n\n- **Context Length:** 65536\n- **Model Name:** codeqwen1.5\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** CodeQwen1.5 is the Code-Specific version of Qwen1.5. It is a transformer-based decoder-only language model pretrained on a large amount of data of codes.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/CodeQwen1.5-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/CodeQwen1.5-7B>`__, `ModelScope <https://modelscope.cn/models/qwen/CodeQwen1.5-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codeqwen1.5 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/codeshell-chat.rst",
    "content": ".. _models_llm_codeshell-chat:\n\n========================================\ncodeshell-chat\n========================================\n\n- **Context Length:** 8194\n- **Model Name:** codeshell-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** CodeShell is a multi-language code LLM developed by the Knowledge Computing Lab of Peking University.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** WisdomShell/CodeShell-7B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/WisdomShell/CodeShell-7B-Chat>`__, `ModelScope <https://modelscope.cn/models/WisdomShell/CodeShell-7B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codeshell-chat --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/codeshell.rst",
    "content": ".. _models_llm_codeshell:\n\n========================================\ncodeshell\n========================================\n\n- **Context Length:** 8194\n- **Model Name:** codeshell\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** CodeShell is a multi-language code LLM developed by the Knowledge Computing Lab of Peking University. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** WisdomShell/CodeShell-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/WisdomShell/CodeShell-7B>`__, `ModelScope <https://modelscope.cn/models/WisdomShell/CodeShell-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codeshell --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/codestral-v0.1.rst",
    "content": ".. _models_llm_codestral-v0.1:\n\n========================================\ncodestral-v0.1\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** codestral-v0.1\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** Codestrall-22B-v0.1 is trained on a diverse dataset of 80+ programming languages, including the most popular ones, such as Python, Java, C, C++, JavaScript, and Bash\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 22 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 22\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** mistralai/Codestral-22B-v0.1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Codestral-22B-v0.1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codestral-v0.1 --size-in-billions 22 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 22 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 22\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_K_S, Q4_K_M, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** bartowski/Codestral-22B-v0.1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/Codestral-22B-v0.1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codestral-v0.1 --size-in-billions 22 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 22 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 22\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Codestral-22B-v0.1-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Codestral-22B-v0.1-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codestral-v0.1 --size-in-billions 22 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 22 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 22\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Codestral-22B-v0.1-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Codestral-22B-v0.1-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name codestral-v0.1 --size-in-billions 22 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/cogagent.rst",
    "content": ".. _models_llm_cogagent:\n\n========================================\ncogagent\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** cogagent\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** The CogAgent-9B-20241220 model is based on GLM-4V-9B, a bilingual open-source VLM base model. Through data collection and optimization, multi-stage training, and strategy improvements, CogAgent-9B-20241220 achieves significant advancements in GUI perception, inference prediction accuracy, action space completeness, and task generalizability. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/cogagent-9b-20241220\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/cogagent-9b-20241220>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/cogagent-9b-20241220>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name cogagent --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-chat.rst",
    "content": ".. _models_llm_deepseek-chat:\n\n========================================\ndeepseek-chat\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** deepseek-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** DeepSeek LLM is an advanced language model comprising 67 billion parameters. It has been trained from scratch on a vast dataset of 2 trillion tokens in both English and Chinese.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-llm-7b-chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-llm-7b-chat>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-llm-7b-chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-chat --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 67 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 67\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-llm-67b-chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-llm-67b-chat>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-llm-67b-chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-chat --size-in-billions 67 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/deepseek-llm-7B-chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-llm-7B-chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-chat --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 67 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 67\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/deepseek-llm-67b-chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-llm-67b-chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-chat --size-in-billions 67 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-coder-instruct.rst",
    "content": ".. _models_llm_deepseek-coder-instruct:\n\n========================================\ndeepseek-coder-instruct\n========================================\n\n- **Context Length:** 16384\n- **Model Name:** deepseek-coder-instruct\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** deepseek-coder-instruct is a model initialized from deepseek-coder-base and fine-tuned on 2B tokens of instruction data.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-coder-1.3b-instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-coder-1.3b-instruct>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-coder-1.3b-instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 1_3 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 6_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 6_7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-coder-6.7b-instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-coder-6.7b-instruct>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-coder-6.7b-instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 6_7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-coder-7b-instruct-v1.5\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-coder-7b-instruct-v1.5>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 33 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 33\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-coder-33b-instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-coder-33b-instruct>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-coder-33b-instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 33 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 1_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_3\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/deepseek-coder-1.3b-instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-1.3b-instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 1_3 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 6_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 6_7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/deepseek-coder-6.7B-instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-6.7B-instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 6_7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 7 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** LoneStriker/deepseek-coder-7b-instruct-v1.5-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/LoneStriker/deepseek-coder-7b-instruct-v1.5-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 8 (ggufv2, 33 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 33\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/deepseek-coder-33B-instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-33B-instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 33 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 1_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_3\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-1.3b-instruct-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-1.3b-instruct-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 1_3 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (gptq, 6_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 6_7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-6.7B-instruct-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-6.7B-instruct-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 6_7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 11 (gptq, 33 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 33\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-33B-instruct-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-33B-instruct-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 33 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 12 (awq, 1_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 1_3\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-1.3b-instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-1.3b-instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 1_3 --model-format awq --quantization ${quantization}\n\n\nModel Spec 13 (awq, 6_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 6_7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-6.7B-instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-6.7B-instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 6_7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 14 (awq, 33 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 33\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-33B-instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-33B-instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder-instruct --size-in-billions 33 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-coder.rst",
    "content": ".. _models_llm_deepseek-coder:\n\n========================================\ndeepseek-coder\n========================================\n\n- **Context Length:** 16384\n- **Model Name:** deepseek-coder\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** Deepseek Coder is composed of a series of code language models, each trained from scratch on 2T tokens, with a composition of 87% code and 13% natural language in both English and Chinese. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-coder-1.3b-base\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-coder-1.3b-base>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-coder-1.3b-base>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 1_3 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 6_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 6_7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-coder-6.7b-base\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-coder-6.7b-base>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-coder-6.7b-base>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 6_7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-coder-7b-base-v1.5\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-coder-7b-base-v1.5>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 33 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 33\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-coder-33b-base\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-coder-33b-base>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-coder-33b-base>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 33 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 1_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_3\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/deepseek-coder-1.3b-base-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-1.3b-base-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 1_3 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 6_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 6_7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/deepseek-coder-6.7B-base-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-6.7B-base-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 6_7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 7 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** dagbs/deepseek-coder-7b-base-v1.5-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/dagbs/deepseek-coder-7b-base-v1.5-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 8 (ggufv2, 33 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 33\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/deepseek-coder-33B-base-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-33B-base-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 33 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 1_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_3\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-1.3b-base-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-1.3b-base-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 1_3 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (gptq, 6_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 6_7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-6.7B-base-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-6.7B-base-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 6_7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 11 (gptq, 33 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 33\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-33B-base-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-33B-base-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 33 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 12 (awq, 1_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 1_3\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-1.3b-base-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-1.3b-base-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 1_3 --model-format awq --quantization ${quantization}\n\n\nModel Spec 13 (awq, 6_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 6_7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-6.7B-base-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-6.7B-base-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 6_7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 14 (awq, 33 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 33\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/deepseek-coder-33B-base-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-coder-33B-base-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-coder --size-in-billions 33 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-prover-v2.rst",
    "content": ".. _models_llm_deepseek-prover-v2:\n\n========================================\ndeepseek-prover-v2\n========================================\n\n- **Context Length:** 163840\n- **Model Name:** deepseek-prover-v2\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning\n- **Description:** We introduce DeepSeek-Prover-V2, an open-source large language model designed for formal theorem proving in Lean 4, with initialization data collected through a recursive theorem proving pipeline powered by DeepSeek-V3. The cold-start training procedure begins by prompting DeepSeek-V3 to decompose complex problems into a series of subgoals. The proofs of resolved subgoals are synthesized into a chain-of-thought process, combined with DeepSeek-V3's step-by-step reasoning, to create an initial cold start for reinforcement learning. This process enables us to integrate both informal and formal mathematical reasoning into a unified model\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 671\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-Prover-V2-671B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-Prover-V2-671B>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-Prover-V2-671B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-prover-v2 --size-in-billions 671 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-Prover-V2-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-Prover-V2-7B>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-Prover-V2-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-prover-v2 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 7\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-Prover-V2-7B-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-Prover-V2-7B-4bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/DeepSeek-Prover-V2-7B-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-prover-v2 --size-in-billions 7 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-r1-0528-qwen3.rst",
    "content": ".. _models_llm_deepseek-r1-0528-qwen3:\n\n========================================\ndeepseek-r1-0528-qwen3\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** deepseek-r1-0528-qwen3\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning\n- **Description:** The DeepSeek R1 model has undergone a minor version upgrade, with the current version being DeepSeek-R1-0528. In the latest update, DeepSeek R1 has significantly improved its depth of reasoning and inference capabilities by leveraging increased computational resources and introducing algorithmic optimization mechanisms during post-training. The model has demonstrated outstanding performance across various benchmark evaluations, including mathematics, programming, and general logic. Its overall performance is now approaching that of leading models, such as O3 and Gemini 2.5 Pro\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-R1-0528-Qwen3-8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-0528-qwen3 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4-W4A16, Int8-W8A16\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** QuantTrio/DeepSeek-R1-0528-Qwen3-8B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/DeepSeek-R1-0528-Qwen3-8B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/okwinds/DeepSeek-R1-0528-Qwen3-8B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-0528-qwen3 --size-in-billions 8 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** QuantTrio/DeepSeek-R1-0528-Qwen3-8B-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/DeepSeek-R1-0528-Qwen3-8B-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/DeepSeek-R1-0528-Qwen3-8B-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-0528-qwen3 --size-in-billions 8 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-r1-0528.rst",
    "content": ".. _models_llm_deepseek-r1-0528:\n\n========================================\ndeepseek-r1-0528\n========================================\n\n- **Context Length:** 163840\n- **Model Name:** deepseek-r1-0528\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, tools\n- **Description:** DeepSeek-R1, which incorporates cold-start data before RL. DeepSeek-R1 achieves performance comparable to OpenAI-o1 across math, code, and reasoning tasks.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 671\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-R1-0528\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-R1-0528>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-0528>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-0528 --size-in-billions 671 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 671\n- **Quantizations:** Int4-Int8Mix-Lite, Int4-Int8Mix-Compact, Int4-Int8Mix-Medium\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** QuantTrio/DeepSeek-R1-0528-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/DeepSeek-R1-0528-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/tclf90/DeepSeek-R1-0528-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-0528 --size-in-billions 671 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-r1-distill-llama.rst",
    "content": ".. _models_llm_deepseek-r1-distill-llama:\n\n========================================\ndeepseek-r1-distill-llama\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** deepseek-r1-distill-llama\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning\n- **Description:** deepseek-r1-distill-llama is distilled from DeepSeek-R1 based on Llama\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-R1-Distill-Llama-8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-8B>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Llama-8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-R1-Distill-Llama-8B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-R1-Distill-Llama-8B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/okwinds/DeepSeek-R1-Distill-Llama-8B-MLX-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-R1-Distill-Llama-70B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-70B>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Llama-70B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 70\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0, F16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/DeepSeek-R1-Distill-Llama-70B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/DeepSeek-R1-Distill-Llama-70B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/DeepSeek-R1-Distill-Llama-70B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 70 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 70\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-R1-Distill-Llama-70B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-R1-Distill-Llama-70B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/okwinds/DeepSeek-R1-Distill-Llama-70B-MLX-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 70 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 6 (awq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** jakiAJK/DeepSeek-R1-Distill-Llama-8B_AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/jakiAJK/DeepSeek-R1-Distill-Llama-8B_AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 8 --model-format awq --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** jakiAJK/DeepSeek-R1-Distill-Llama-8B_GPTQ-int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/jakiAJK/DeepSeek-R1-Distill-Llama-8B_GPTQ-int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 8 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (ggufv2, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0, F16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 1_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 9 (awq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** casperhansen/deepseek-r1-distill-llama-70b-awq\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/casperhansen/deepseek-r1-distill-llama-70b-awq>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 70 --model-format awq --quantization ${quantization}\n\n\nModel Spec 10 (gptq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** empirischtech/DeepSeek-R1-Distill-Llama-70B-gptq-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/empirischtech/DeepSeek-R1-Distill-Llama-70B-gptq-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 70 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 11 (ggufv2, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 8\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0, F16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-llama --size-in-billions 8 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-r1-distill-qwen.rst",
    "content": ".. _models_llm_deepseek-r1-distill-qwen:\n\n========================================\ndeepseek-r1-distill-qwen\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** deepseek-r1-distill-qwen\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning\n- **Description:** deepseek-r1-distill-qwen is distilled from DeepSeek-R1 based on Qwen\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 1_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 1_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 1_5\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-R1-Distill-Qwen-1.5B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-R1-Distill-Qwen-1.5B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/DeepSeek-R1-Distill-Qwen-1.5B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 1_5 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-R1-Distill-Qwen-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** jakiAJK/DeepSeek-R1-Distill-Qwen-7B_GPTQ-int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/jakiAJK/DeepSeek-R1-Distill-Qwen-7B_GPTQ-int4>`__, `ModelScope <https://modelscope.cn/models/tclf90/deepseek-r1-distill-qwen-7b-gptq-int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0, F16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-R1-Distill-Qwen-14B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 8 (ggufv2, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 14\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0, F16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/DeepSeek-R1-Distill-Qwen-14B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-14B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/DeepSeek-R1-Distill-Qwen-14B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 14 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 9 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-R1-Distill-Qwen-32B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 10 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0, F16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 11 (awq, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** casperhansen/deepseek-r1-distill-qwen-1.5b-awq\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/casperhansen/deepseek-r1-distill-qwen-1.5b-awq>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 1_5 --model-format awq --quantization ${quantization}\n\n\nModel Spec 12 (gptq, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** jakiAJK/DeepSeek-R1-Distill-Qwen-1.5B_GPTQ-int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/jakiAJK/DeepSeek-R1-Distill-Qwen-1.5B_GPTQ-int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 1_5 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 13 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** jakiAJK/DeepSeek-R1-Distill-Qwen-7B_AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/jakiAJK/DeepSeek-R1-Distill-Qwen-7B_AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 14 (mlx, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 7\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-R1-Distill-Qwen-7B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-R1-Distill-Qwen-7B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/okwinds/DeepSeek-R1-Distill-Qwen-7B-MLX-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 7 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 15 (awq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** casperhansen/deepseek-r1-distill-qwen-14b-awq\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/casperhansen/deepseek-r1-distill-qwen-14b-awq>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 14 --model-format awq --quantization ${quantization}\n\n\nModel Spec 16 (mlx, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 14\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-R1-Distill-Qwen-14B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-R1-Distill-Qwen-14B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/okwinds/DeepSeek-R1-Distill-Qwen-14B-MLX-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 14 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 17 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** casperhansen/deepseek-r1-distill-qwen-32b-awq\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/casperhansen/deepseek-r1-distill-qwen-32b-awq>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n\nModel Spec 18 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-R1-Distill-Qwen-32B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-R1-Distill-Qwen-32B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/okwinds/DeepSeek-R1-Distill-Qwen-32B-MLX-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 19 (gptq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** tclf90/deepseek-r1-distill-qwen-32b-gptq-int4\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/tclf90/deepseek-r1-distill-qwen-32b-gptq-int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1-distill-qwen --size-in-billions 32 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-r1.rst",
    "content": ".. _models_llm_deepseek-r1:\n\n========================================\ndeepseek-r1\n========================================\n\n- **Context Length:** 163840\n- **Model Name:** deepseek-r1\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning\n- **Description:** DeepSeek-R1, which incorporates cold-start data before RL. DeepSeek-R1 achieves performance comparable to OpenAI-o1 across math, code, and reasoning tasks.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 671\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-R1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-R1>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-R1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1 --size-in-billions 671 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 671\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** cognitivecomputations/DeepSeek-R1-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cognitivecomputations/DeepSeek-R1-AWQ>`__, `ModelScope <https://modelscope.cn/models/cognitivecomputations/DeepSeek-R1-awq>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1 --size-in-billions 671 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 671\n- **Quantizations:** UD-IQ1_S, UD-IQ1_M, UD-IQ2_XXS, UD-Q2_K_XL, Q2_K, Q2_K_L, Q2_K_XS, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/DeepSeek-R1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/DeepSeek-R1-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1 --size-in-billions 671 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 671\n- **Quantizations:** 2bit, 3bit, 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-R1-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-R1-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/DeepSeek-R1-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-r1 --size-in-billions 671 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-v2-chat-0628.rst",
    "content": ".. _models_llm_deepseek-v2-chat-0628:\n\n========================================\ndeepseek-v2-chat-0628\n========================================\n\n- **Context Length:** 128000\n- **Model Name:** deepseek-v2-chat-0628\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** DeepSeek-V2-Chat-0628 is an improved version of DeepSeek-V2-Chat. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 236 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 236\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-V2-Chat-0628\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-V2-Chat-0628>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-V2-Chat-0628>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v2-chat-0628 --size-in-billions 236 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-v2-chat.rst",
    "content": ".. _models_llm_deepseek-v2-chat:\n\n========================================\ndeepseek-v2-chat\n========================================\n\n- **Context Length:** 128000\n- **Model Name:** deepseek-v2-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** DeepSeek-V2, a strong Mixture-of-Experts (MoE) language model characterized by economical training and efficient inference. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 16 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 16\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-V2-Lite-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-V2-Lite-Chat>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-V2-Lite-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v2-chat --size-in-billions 16 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 236 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 236\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-V2-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-V2-Chat>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-V2-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v2-chat --size-in-billions 236 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-v2.5.rst",
    "content": ".. _models_llm_deepseek-v2.5:\n\n========================================\ndeepseek-v2.5\n========================================\n\n- **Context Length:** 128000\n- **Model Name:** deepseek-v2.5\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** DeepSeek-V2.5 is an upgraded version that combines DeepSeek-V2-Chat and DeepSeek-Coder-V2-Instruct. The new model integrates the general and coding abilities of the two previous versions.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 236 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 236\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-V2.5\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-V2.5>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-V2.5>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v2.5 --size-in-billions 236 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-v3-0324.rst",
    "content": ".. _models_llm_deepseek-v3-0324:\n\n========================================\ndeepseek-v3-0324\n========================================\n\n- **Context Length:** 163840\n- **Model Name:** deepseek-v3-0324\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** DeepSeek-V3, a strong Mixture-of-Experts (MoE) language model with 671B total parameters with 37B activated for each token. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 671\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-V3-0324\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-V3-0324>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-V3-0324>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v3-0324 --size-in-billions 671 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 671\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** cognitivecomputations/DeepSeek-V3-0324-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cognitivecomputations/DeepSeek-V3-0324-AWQ>`__, `ModelScope <https://modelscope.cn/models/cognitivecomputations/DeepSeek-V3-0324-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v3-0324 --size-in-billions 671 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 671\n- **Quantizations:** 4bit, 5bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-V3-0324-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-V3-0324-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v3-0324 --size-in-billions 671 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-v3.1.rst",
    "content": ".. _models_llm_deepseek-v3.1:\n\n========================================\nDeepseek-V3.1\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** Deepseek-V3.1\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, hybrid, tools\n- **Description:** DeepSeek-V3.1 is a hybrid model that supports both thinking mode and non-thinking mode.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 671\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-V3.1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-V3.1>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-V3.1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Deepseek-V3.1 --size-in-billions 671 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 671\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** cpatonn/DeepSeek-V3.1-GPTQ-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/DeepSeek-V3.1-GPTQ-4bit>`__, `ModelScope <https://modelscope.cn/models/cpatonn/DeepSeek-V3.1-GPTQ-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Deepseek-V3.1 --size-in-billions 671 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (awq, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 671\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** QuantTrio/DeepSeek-V3.1-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/DeepSeek-V3.1-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/DeepSeek-V3.1-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Deepseek-V3.1 --size-in-billions 671 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 671\n- **Quantizations:** 8bit, 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-V3.1-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-V3.1-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/DeepSeek-V3.1-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Deepseek-V3.1 --size-in-billions 671 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-v3.2-exp.rst",
    "content": ".. _models_llm_deepseek-v3.2-exp:\n\n========================================\nDeepSeek-V3.2-Exp\n========================================\n\n- **Context Length:** 163840\n- **Model Name:** DeepSeek-V3.2-Exp\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, hybrid, tools\n- **Description:** We are excited to announce the official release of DeepSeek-V3.2-Exp, an experimental version of our model. As an intermediate step toward our next-generation architecture, V3.2-Exp builds upon V3.1-Terminus by introducing DeepSeek Sparse Attention—a sparse attention mechanism designed to explore and validate optimizations for training and inference efficiency in long-context scenarios.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 671\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** deepseek-ai/DeepSeek-V3.2-Exp\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-V3.2-Exp>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-V3.2-Exp>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DeepSeek-V3.2-Exp --size-in-billions 671 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 671\n- **Quantizations:** AWQ, AWQ-Lite\n- **Engines**: Transformers\n- **Model ID:** QuantTrio/DeepSeek-V3.2-Exp-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/DeepSeek-V3.2-Exp-{quantization}>`__, `ModelScope <https://modelscope.cn/models/tclf90/DeepSeek-V3.2-Exp-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DeepSeek-V3.2-Exp --size-in-billions 671 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-v3.2.rst",
    "content": ".. _models_llm_deepseek-v3.2:\n\n========================================\nDeepSeek-V3.2\n========================================\n\n- **Context Length:** 163840\n- **Model Name:** DeepSeek-V3.2\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, hybrid, tools\n- **Description:** We introduce DeepSeek-V3.2, a model that harmonizes high computational efficiency with superior reasoning and agent performance\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 671\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** deepseek-ai/DeepSeek-V3.2\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-V3.2>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-V3.2>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DeepSeek-V3.2 --size-in-billions 671 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 671\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/DeepSeek-V3.2-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/DeepSeek-V3.2-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/DeepSeek-V3.2-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DeepSeek-V3.2 --size-in-billions 671 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-v3.rst",
    "content": ".. _models_llm_deepseek-v3:\n\n========================================\ndeepseek-v3\n========================================\n\n- **Context Length:** 163840\n- **Model Name:** deepseek-v3\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** DeepSeek-V3, a strong Mixture-of-Experts (MoE) language model with 671B total parameters with 37B activated for each token. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 671\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/DeepSeek-V3\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/DeepSeek-V3>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/DeepSeek-V3>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v3 --size-in-billions 671 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 671\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** cognitivecomputations/DeepSeek-V3-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cognitivecomputations/DeepSeek-V3-AWQ>`__, `ModelScope <https://modelscope.cn/models/cognitivecomputations/DeepSeek-V3-awq>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v3 --size-in-billions 671 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 671\n- **Quantizations:** Q2_K_L, Q2_K_XS, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/DeepSeek-V3-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/DeepSeek-V3-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/DeepSeek-V3-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v3 --size-in-billions 671 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 671 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 671\n- **Quantizations:** 3bit, 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/DeepSeek-V3-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/DeepSeek-V3-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/DeepSeek-V3-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-v3 --size-in-billions 671 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek-vl2.rst",
    "content": ".. _models_llm_deepseek-vl2:\n\n========================================\ndeepseek-vl2\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** deepseek-vl2\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** DeepSeek-VL2, an advanced series of large Mixture-of-Experts (MoE) Vision-Language Models that significantly improves upon its predecessor, DeepSeek-VL. DeepSeek-VL2 demonstrates superior capabilities across various tasks, including but not limited to visual question answering, optical character recognition, document/table/chart understanding, and visual grounding.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 27\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-vl2\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-vl2>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-vl2>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-vl2 --size-in-billions 27 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 16 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 16\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-vl2-small\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-vl2-small>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-vl2-small>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-vl2 --size-in-billions 16 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-vl2-tiny\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-vl2-tiny>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-vl2-tiny>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek-vl2 --size-in-billions 3 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/deepseek.rst",
    "content": ".. _models_llm_deepseek:\n\n========================================\ndeepseek\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** deepseek\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** DeepSeek LLM, trained from scratch on a vast dataset of 2 trillion tokens in both English and Chinese. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-llm-7b-base\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-llm-7b-base>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-llm-7b-base>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 67 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 67\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** deepseek-ai/deepseek-llm-67b-base\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/deepseek-ai/deepseek-llm-67b-base>`__, `ModelScope <https://modelscope.cn/models/deepseek-ai/deepseek-llm-67b-base>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek --size-in-billions 67 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/deepseek-llm-7B-chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-llm-7B-chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 67 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 67\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/deepseek-llm-67b-chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/deepseek-llm-67b-chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name deepseek --size-in-billions 67 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/dianjin-r1.rst",
    "content": ".. _models_llm_dianjin-r1:\n\n========================================\nDianJin-R1\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** DianJin-R1\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** Tongyi DianJin is a financial intelligence solution platform built by Alibaba Cloud, dedicated to providing financial business developers with a convenient artificial intelligence application development environment.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** DianJin/DianJin-R1-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/DianJin/DianJin-R1-7B>`__, `ModelScope <https://modelscope.cn/models/DianJin/DianJin-R1-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DianJin-R1 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** DianJin/DianJin-R1-32B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/DianJin/DianJin-R1-32B>`__, `ModelScope <https://modelscope.cn/models/DianJin/DianJin-R1-32B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DianJin-R1 --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, IQ4_XS, Q4_K_S, Q4_K_M, Q5_K_S, Q5_K_M, Q6_K, Q8_0, f16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** mradermacher/DianJin-R1-7B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mradermacher/DianJin-R1-7B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DianJin-R1 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** i1-IQ1_S, i1-IQ1_M, i1-IQ2_XXS, i1-IQ2_XS, i1-IQ2_S, i1-IQ2_M, i1-Q2_K_S, i1-Q2_K, i1-IQ3_XXS, i1-IQ3_XS, i1-Q3_K_S, i1-IQ3_S, i1-IQ3_M, i1-Q3_K_M, i1-Q3_K_L, i1-IQ4_XS, i1-IQ4_NL, i1-Q4_0, i1-Q4_K_S, i1-Q4_K_M, i1-Q4_1, i1-Q5_K_S, i1-Q5_K_M, i1-Q6_K\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** mradermacher/DianJin-R1-7B-i1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mradermacher/DianJin-R1-7B-i1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DianJin-R1 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, IQ4_XS, Q4_K_S, Q4_K_M, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** mradermacher/DianJin-R1-32B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mradermacher/DianJin-R1-32B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DianJin-R1 --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** i1-IQ1_S, i1-IQ1_M, i1-IQ2_XXS, i1-IQ2_XS, i1-IQ2_S, i1-IQ2_M, i1-Q2_K_S, i1-Q2_K, i1-IQ3_XXS, i1-IQ3_XS, i1-Q3_K_S, i1-IQ3_S, i1-IQ3_M, i1-Q3_K_M, i1-Q3_K_L, i1-IQ4_XS, i1-Q4_0, i1-Q4_K_S, i1-Q4_K_M, i1-Q4_1, i1-Q5_K_S, i1-Q5_K_M, i1-Q6_K\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** mradermacher/DianJin-R1-32B-i1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mradermacher/DianJin-R1-32B-i1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name DianJin-R1 --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/ernie4.5.rst",
    "content": ".. _models_llm_ernie4.5:\n\n========================================\nErnie4.5\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** Ernie4.5\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** ERNIE 4.5, a new family of large-scale multimodal models comprising 10 distinct variants.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 0_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** baidu/ERNIE-4.5-0.3B-PT\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/baidu/ERNIE-4.5-0.3B-PT>`__, `ModelScope <https://modelscope.cn/models/PaddlePaddle/ERNIE-4.5-0.3B-PT>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ernie4.5 --size-in-billions 0_3 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 0_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 0_3\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, F16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/ERNIE-4.5-0.3B-PT-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/ERNIE-4.5-0.3B-PT-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/ERNIE-4.5-0.3B-PT-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ernie4.5 --size-in-billions 0_3 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 0_3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 0_3\n- **Quantizations:** 4bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/ERNIE-4.5-0.3B-PT-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/ERNIE-4.5-0.3B-PT-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/ERNIE-4.5-0.3B-PT-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ernie4.5 --size-in-billions 0_3 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 21 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 21\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** baidu/ERNIE-4.5-21B-A3B-Base-PT\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/baidu/ERNIE-4.5-21B-A3B-Base-PT>`__, `ModelScope <https://modelscope.cn/models/PaddlePaddle/ERNIE-4.5-21B-A3B-Base-PT>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ernie4.5 --size-in-billions 21 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 21 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 21\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, BF16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/ERNIE-4.5-21B-A3B-PT-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/ERNIE-4.5-21B-A3B-PT-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/ERNIE-4.5-21B-A3B-PT-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ernie4.5 --size-in-billions 21 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (mlx, 21 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 21\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/ERNIE-4.5-21B-A3B-PT-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/ERNIE-4.5-21B-A3B-PT-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/ERNIE-4.5-21B-A3B-PT-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ernie4.5 --size-in-billions 21 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 300 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 300\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** baidu/ERNIE-4.5-300B-A47B-PT\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/baidu/ERNIE-4.5-300B-A47B-PT>`__, `ModelScope <https://modelscope.cn/models/PaddlePaddle/ERNIE-4.5-300B-A47B-PT>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ernie4.5 --size-in-billions 300 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 8 (ggufv2, 300 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 300\n- **Quantizations:** Q2_K, Q4_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/ERNIE-4.5-300B-A47B-PT-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/ERNIE-4.5-300B-A47B-PT-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/ERNIE-4.5-300B-A47B-PT-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ernie4.5 --size-in-billions 300 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 9 (mlx, 300 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 300\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/ERNIE-4.5-300B-47B-PT-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/ERNIE-4.5-300B-47B-PT-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/ERNIE-4.5-300B-47B-PT-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ernie4.5 --size-in-billions 300 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/fin-r1.rst",
    "content": ".. _models_llm_fin-r1:\n\n========================================\nfin-r1\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** fin-r1\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** Fin-R1 is a large language model specifically designed for the field of financial reasoning\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** SUFE-AIFLM-Lab/Fin-R1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/SUFE-AIFLM-Lab/Fin-R1>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Fin-R1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name fin-r1 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Fin-R1-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Fin-R1-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Fin-R1-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name fin-r1 --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (fp8, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 7\n- **Quantizations:** FP8\n- **Engines**: vLLM, SGLang\n- **Model ID:** JunHowie/Fin-R1-FP8-Dynamic\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Fin-R1-FP8-Dynamic>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Fin-R1-FP8-Dynamic>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name fin-r1 --size-in-billions 7 --model-format fp8 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/gemma-3-1b-it.rst",
    "content": ".. _models_llm_gemma-3-1b-it:\n\n========================================\ngemma-3-1b-it\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** gemma-3-1b-it\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** google/gemma-3-1b-it\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/google/gemma-3-1b-it>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/gemma-3-1b-it>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-1b-it --size-in-billions 1 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (mlx, 1 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 1\n- **Quantizations:** 4bit, 6bit, 8bit, fp16\n- **Engines**: MLX\n- **Model ID:** mlx-community/gemma-3-1b-it-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/gemma-3-1b-it-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/gemma-3-1b-it-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-1b-it --size-in-billions 1 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 1 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1\n- **Quantizations:** IQ2_M, IQ3_M, IQ3_XS, IQ3_XXS, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_L, Q4_K_M, Q4_K_S, Q5_K_L, Q5_K_M, Q5_K_S, Q6_K, Q6_K_L, Q8_0, bf16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** bartowski/google_gemma-3-1b-it-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/google_gemma-3-1b-it-GGUF>`__, `ModelScope <https://modelscope.cn/models/bartowski/google_gemma-3-1b-it-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-1b-it --size-in-billions 1 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/gemma-3-it.rst",
    "content": ".. _models_llm_gemma-3-it:\n\n========================================\ngemma-3-it\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** gemma-3-it\n- **Languages:** en\n- **Abilities:** chat, vision\n- **Description:** Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** google/gemma-3-4b-it\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/google/gemma-3-4b-it>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/gemma-3-4b-it>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-it --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 12\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** google/gemma-3-12b-it\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/google/gemma-3-12b-it>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/gemma-3-12b-it>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-it --size-in-billions 12 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 27\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** google/gemma-3-27b-it\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/google/gemma-3-27b-it>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/gemma-3-27b-it>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-it --size-in-billions 27 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 4bit, 6bit, 8bit, fp16\n- **Engines**: MLX\n- **Model ID:** mlx-community/gemma-3-4b-it-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/gemma-3-4b-it-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/gemma-3-4b-it-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-it --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 12\n- **Quantizations:** 4bit, 6bit, 8bit, fp16\n- **Engines**: MLX\n- **Model ID:** mlx-community/gemma-3-12b-it-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/gemma-3-12b-it-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/gemma-3-12b-it-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-it --size-in-billions 12 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 6 (mlx, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 27\n- **Quantizations:** 4bit, 6bit, 8bit, fp16\n- **Engines**: MLX\n- **Model ID:** mlx-community/gemma-3-27b-it-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/gemma-3-27b-it-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/gemma-3-27b-it-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-it --size-in-billions 27 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 7 (ggufv2, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 4\n- **Quantizations:** IQ2_M, IQ3_M, IQ3_XS, IQ3_XXS, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_L, Q4_K_M, Q4_K_S, Q5_K_L, Q5_K_M, Q5_K_S, Q6_K, Q6_K_L, Q8_0, bf16\n- **Engines**: llama.cpp\n- **Model ID:** bartowski/google_gemma-3-4b-it-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/google_gemma-3-4b-it-GGUF>`__, `ModelScope <https://modelscope.cn/models/bartowski/google_gemma-3-4b-it-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-it --size-in-billions 4 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 8 (ggufv2, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 12\n- **Quantizations:** IQ2_M, IQ3_M, IQ3_XS, IQ3_XXS, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_L, Q4_K_M, Q4_K_S, Q5_K_L, Q5_K_M, Q5_K_S, Q6_K, Q6_K_L, Q8_0, bf16\n- **Engines**: llama.cpp\n- **Model ID:** bartowski/google_gemma-3-12b-it-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/google_gemma-3-12b-it-GGUF>`__, `ModelScope <https://modelscope.cn/models/bartowski/google_gemma-3-12b-it-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-it --size-in-billions 12 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 9 (ggufv2, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 27\n- **Quantizations:** IQ2_M, IQ3_M, IQ3_XS, IQ3_XXS, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_L, Q4_K_M, Q4_K_S, Q5_K_L, Q5_K_M, Q5_K_S, Q6_K, Q6_K_L, Q8_0, bf16\n- **Engines**: llama.cpp\n- **Model ID:** bartowski/google_gemma-3-27b-it-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/google_gemma-3-27b-it-GGUF>`__, `ModelScope <https://modelscope.cn/models/bartowski/google_gemma-3-27b-it-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gemma-3-it --size-in-billions 27 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm-4.1v-thinking.rst",
    "content": ".. _models_llm_glm-4.1v-thinking:\n\n========================================\nglm-4.1v-thinking\n========================================\n\n- **Context Length:** 65536\n- **Model Name:** glm-4.1v-thinking\n- **Languages:** en, zh\n- **Abilities:** chat, vision, reasoning, tools\n- **Description:** GLM-4.1V-9B-Thinking, designed to explore the upper limits of reasoning in vision-language models.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-4.1V-9B-Thinking\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.1V-9B-Thinking>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.1V-9B-Thinking>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.1v-thinking --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 9\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.1V-9B-Thinking-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.1V-9B-Thinking-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.1V-9B-Thinking-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.1v-thinking --size-in-billions 9 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 9\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.1V-9B-Thinking-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.1V-9B-Thinking-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.1V-9B-Thinking-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.1v-thinking --size-in-billions 9 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm-4.5.rst",
    "content": ".. _models_llm_glm-4.5:\n\n========================================\nglm-4.5\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** glm-4.5\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, hybrid, tools\n- **Description:** The GLM-4.5 series models are foundation models designed for intelligent agents. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 355\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-4.5\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.5>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.5>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 355 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 355\n- **Quantizations:** FP8\n- **Engines**: vLLM\n- **Model ID:** zai-org/GLM-4.5-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.5-FP8>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.5-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 355 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 355\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.5-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.5-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.5-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 355 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (awq, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 355\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.5-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.5-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.5-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 355 --model-format awq --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 355\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/GLM-4.5-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/GLM-4.5-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/GLM-4.5-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 355 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 106\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-4.5-Air\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.5-Air>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.5-Air>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 106 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (fp8, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 106\n- **Quantizations:** FP8\n- **Engines**: vLLM\n- **Model ID:** zai-org/GLM-4.5-Air-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.5-Air-FP8>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.5-Air-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 106 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 106\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.5-Air-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.5-Air-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.5-Air-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 106 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (awq, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 106\n- **Quantizations:** AWQ-FP16Mix\n- **Engines**: Transformers\n- **Model ID:** QuantTrio/GLM-4.5-Air-AWQ-FP16Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.5-Air-AWQ-FP16Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.5-Air-AWQ-FP16Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 106 --model-format awq --quantization ${quantization}\n\n\nModel Spec 10 (awq, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 106\n- **Quantizations:** 4bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn-mirror/GLM-4.5-Air-AWQ-4bit\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/cpatonn-mirror/GLM-4.5-Air-AWQ-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 106 --model-format awq --quantization ${quantization}\n\n\nModel Spec 11 (mlx, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 106\n- **Quantizations:** 2bit, 3bit, 4bit, 5bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/GLM-4.5-Air-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/GLM-4.5-Air-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/GLM-4.5-Air-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5 --size-in-billions 106 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm-4.5v.rst",
    "content": ".. _models_llm_glm-4.5v:\n\n========================================\nglm-4.5v\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** glm-4.5v\n- **Languages:** en, zh\n- **Abilities:** chat, vision, reasoning, tools\n- **Description:** GLM-4.5V is based on ZhipuAI’s next-generation flagship text foundation model GLM-4.5-Air (106B parameters, 12B active). It continues the technical approach of GLM-4.1V-Thinking, achieving SOTA performance among models of the same scale on 42 public vision-language benchmarks.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 106\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-4.5V\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.5V>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.5V>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5v --size-in-billions 106 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 106\n- **Quantizations:** FP8\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-4.5V-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.5V-FP8>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.5V-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5v --size-in-billions 106 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (awq, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 106\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.5V-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.5V-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.5V-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5v --size-in-billions 106 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 106 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 106\n- **Quantizations:** 3bit, 4bit, 5bit, 6bit, 8bit\n- **Engines**: Transformers, MLX\n- **Model ID:** mlx-community/GLM-4.5V-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/GLM-4.5V-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/GLM-4.5V-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4.5v --size-in-billions 106 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm-4.6.rst",
    "content": ".. _models_llm_glm-4.6:\n\n========================================\nGLM-4.6\n========================================\n\n- **Context Length:** 202752\n- **Model Name:** GLM-4.6\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, hybrid, tools\n- **Description:** GLM-4.6 significantly enhances context length (up to 200K tokens), code generation, reasoning with tool use, agent capabilities, and human-aligned writing compared to GLM-4.5.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 355\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-4.6\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.6>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.6>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.6 --size-in-billions 355 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 355\n- **Quantizations:** FP8\n- **Engines**: vLLM\n- **Model ID:** zai-org/GLM-4.6-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.6-FP8>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.6-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.6 --size-in-billions 355 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 355\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.6-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.6-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.6-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.6 --size-in-billions 355 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (awq, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 355\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.6-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.6-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.6-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.6 --size-in-billions 355 --model-format awq --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 355\n- **Quantizations:** 4bit, 5bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/GLM-4.6-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/GLM-4.6-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/GLM-4.6-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.6 --size-in-billions 355 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm-4.7-flash.rst",
    "content": ".. _models_llm_glm-4.7-flash:\n\n========================================\nGLM-4.7-Flash\n========================================\n\n- **Context Length:** 202752\n- **Model Name:** GLM-4.7-Flash\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, hybrid, tools\n- **Description:** GLM-4.7-Flash is a 30B-A3B MoE model. As the strongest model in the 30B class, it offers a lightweight deployment option that balances performance and efficiency.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 30\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** zai-org/GLM-4.7-Flash\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.7-Flash>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.7-Flash>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.7-Flash --size-in-billions 30 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm-4.7.rst",
    "content": ".. _models_llm_glm-4.7:\n\n========================================\nGLM-4.7\n========================================\n\n- **Context Length:** 202752\n- **Model Name:** GLM-4.7\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, hybrid, tools\n- **Description:** GLM-4.7 significantly advances core and multilingual agentic coding, UI/vibe coding, tool use, and complex reasoning—outperforming GLM-4.6 across benchmarks like SWE-bench, Terminal Bench 2.0, τ²-Bench, and HLE—while also improving chat, creative writing, and role-play.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 355\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-4.7\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.7>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.7>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.7 --size-in-billions 355 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 355\n- **Quantizations:** FP8\n- **Engines**: vLLM\n- **Model ID:** zai-org/GLM-4.7-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4.7-FP8>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4.7-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.7 --size-in-billions 355 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 355\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.7-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.7-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.7-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.7 --size-in-billions 355 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (awq, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 355\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/GLM-4.7-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/GLM-4.7-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/GLM-4.7-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.7 --size-in-billions 355 --model-format awq --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 355 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 355\n- **Quantizations:** 4bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/GLM-4.7-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/GLM-4.7-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/GLM-4.7-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name GLM-4.7 --size-in-billions 355 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm-4v.rst",
    "content": ".. _models_llm_glm-4v:\n\n========================================\nglm-4v\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** glm-4v\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** GLM4 is the open source version of the latest generation of pre-trained models in the GLM-4 series launched by Zhipu AI.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/glm-4v-9b\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/glm-4v-9b>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/glm-4v-9b>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-4v --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm-5.rst",
    "content": ".. _models_llm_glm-5:\n\n========================================\nglm-5\n========================================\n\n- **Context Length:** 202752\n- **Model Name:** glm-5\n- **Languages:** en, zh\n- **Abilities:** chat, vision, tools, reasoning\n- **Description:** We are launching GLM-5, targeting complex systems engineering and long-horizon agentic tasks. Scaling is still one of the most important ways to improve the intelligence efficiency of Artificial General Intelligence (AGI). Compared to GLM-4.5, GLM-5 scales from 355B parameters (32B active) to 744B parameters (40B active), and increases pre-training data from 23T to 28.5T tokens. GLM-5 also integrates DeepSeek Sparse Attention (DSA), largely reducing deployment cost while preserving long-context capacity.  Reinforcement learning aims to bridge the gap between competence and excellence in pre-trained models. However, deploying it at scale for LLMs is a challenge due to the RL training inefficiency. To this end, we developed slime, a novel asynchronous RL infrastructure that substantially improves training throughput and efficiency, enabling more fine-grained post-training iterations. With advances in both pre-training and post-training, GLM-5 delivers significant improvement compared to GLM-4.7 across a wide range of academic benchmarks and achieves best-in-class performance among all open-source models in the world on reasoning, coding, and agentic tasks, closing the gap with frontier models.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 744 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 744\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-5\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-5>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-5>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-5 --size-in-billions 744 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 744 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 744\n- **Quantizations:** FP8\n- **Engines**: vLLM\n- **Model ID:** zai-org/GLM-5-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-5-FP8>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-5-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-5 --size-in-billions 744 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 744 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 744\n- **Quantizations:** UD-TQ1_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/GLM-5-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/GLM-5-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/GLM-5-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-5 --size-in-billions 744 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 744 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 744\n- **Quantizations:** 4bit, 8bit-MXFP8\n- **Engines**: MLX\n- **Model ID:** mlx-community/GLM-5-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/GLM-5-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/GLM-5-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-5 --size-in-billions 744 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm-edge-chat.rst",
    "content": ".. _models_llm_glm-edge-chat:\n\n========================================\nglm-edge-chat\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** glm-edge-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** The GLM-Edge series is our attempt to face the end-side real-life scenarios, which consists of two sizes of large-language dialogue models and multimodal comprehension models (GLM-Edge-1.5B-Chat, GLM-Edge-4B-Chat, GLM-Edge-V-2B, GLM-Edge-V-5B). Among them, the 1.5B / 2B model is mainly for platforms such as mobile phones and cars, and the 4B / 5B model is mainly for platforms such as PCs.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/glm-edge-1.5b-chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/glm-edge-1.5b-chat>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/glm-edge-1.5b-chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-edge-chat --size-in-billions 1_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/glm-edge-4b-chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/glm-edge-4b-chat>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/glm-edge-4b-chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-edge-chat --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Q4_0, Q4_1, Q4_K, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** zai-org/glm-edge-1.5b-chat-gguf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/glm-edge-1.5b-chat-gguf>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/glm-edge-1.5b-chat-gguf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-edge-chat --size-in-billions 1_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_5\n- **Quantizations:** F16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** zai-org/glm-edge-1.5b-chat-gguf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/glm-edge-1.5b-chat-gguf>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/glm-edge-1.5b-chat-gguf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-edge-chat --size-in-billions 1_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 4\n- **Quantizations:** Q4_0, Q4_1, Q4_K, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** zai-org/glm-edge-4b-chat-gguf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/glm-edge-4b-chat-gguf>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/glm-edge-4b-chat-gguf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-edge-chat --size-in-billions 4 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 4\n- **Quantizations:** F16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** zai-org/glm-edge-4b-chat-gguf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/glm-edge-4b-chat-gguf>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/glm-edge-4b-chat-gguf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm-edge-chat --size-in-billions 4 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm4-0414.rst",
    "content": ".. _models_llm_glm4-0414:\n\n========================================\nglm4-0414\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** glm4-0414\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** The GLM family welcomes new members, the GLM-4-32B-0414 series models, featuring 32 billion parameters. Its performance is comparable to OpenAI’s GPT series and DeepSeek’s V3/R1 series\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-4-9B-0414\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4-9B-0414>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4-9B-0414>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-0414 --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/GLM-4-32B-0414\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/GLM-4-32B-0414>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/GLM-4-32B-0414>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-0414 --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 9\n- **Quantizations:** 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/GLM-4-9B-0414-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/GLM-4-9B-0414-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/GLM-4-9B-0414-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-0414 --size-in-billions 9 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/GLM-4-32B-0414-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/GLM-4-32B-0414-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/GLM-4-32B-0414-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-0414 --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 9\n- **Quantizations:** IQ2_M, IQ3_M, IQ3_XS, IQ3_XXS, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_L, Q3_K_M, Q3_K_S, Q3_K_XL, Q4_0, Q4_1, Q4_K_L, Q4_K_M, Q4_K_S, Q5_K_L, Q5_K_M, Q5_K_S, Q6_K, Q6_K_L, Q8_0, bf16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** bartowski/THUDM_GLM-4-9B-0414-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/THUDM_GLM-4-9B-0414-GGUF>`__, `ModelScope <https://modelscope.cn/models/bartowski/THUDM_GLM-4-9B-0414-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-0414 --size-in-billions 9 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** IQ2_M, IQ2_S, IQ2_XS, IQ3_M, IQ3_XS, IQ3_XXS, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_L, Q3_K_M, Q3_K_S, Q3_K_XL, Q4_0, Q4_1, Q4_K_L, Q4_K_M, Q4_K_S, Q5_K_L, Q5_K_M, Q5_K_S, Q6_K, Q6_K_L, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** bartowski/THUDM_GLM-4-9B-0414-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/THUDM_GLM-4-9B-0414-GGUF>`__, `ModelScope <https://modelscope.cn/models/bartowski/THUDM_GLM-4-9B-0414-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-0414 --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm4-chat-1m.rst",
    "content": ".. _models_llm_glm4-chat-1m:\n\n========================================\nglm4-chat-1m\n========================================\n\n- **Context Length:** 1048576\n- **Model Name:** glm4-chat-1m\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** GLM4 is the open source version of the latest generation of pre-trained models in the GLM-4 series launched by Zhipu AI.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/glm-4-9b-chat-1m-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/glm-4-9b-chat-1m-hf>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat-1m-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-chat-1m --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 9\n- **Quantizations:** Q2_K, IQ3_XS, IQ3_S, IQ3_M, Q3_K_S, Q3_K_L, Q3_K, IQ4_XS, IQ4_NL, Q4_K_S, Q4_K, Q5_K_S, Q5_K, Q6_K, Q8_0, BF16, FP16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** legraphista/glm-4-9b-chat-1m-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/legraphista/glm-4-9b-chat-1m-GGUF>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/glm-4-9b-chat-1m-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-chat-1m --size-in-billions 9 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/glm4-chat.rst",
    "content": ".. _models_llm_glm4-chat:\n\n========================================\nglm4-chat\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** glm4-chat\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** GLM4 is the open source version of the latest generation of pre-trained models in the GLM-4 series launched by Zhipu AI.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** zai-org/glm-4-9b-chat-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/zai-org/glm-4-9b-chat-hf>`__, `ModelScope <https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-chat --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 9\n- **Quantizations:** Q2_K, IQ3_XS, IQ3_S, IQ3_M, Q3_K_S, Q3_K_L, Q3_K, IQ4_XS, IQ4_NL, Q4_K_S, Q4_K, Q5_K_S, Q5_K, Q6_K, Q8_0, BF16, FP16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** legraphista/glm-4-9b-chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/legraphista/glm-4-9b-chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/glm-4-9b-chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name glm4-chat --size-in-billions 9 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/gorilla-openfunctions-v2.rst",
    "content": ".. _models_llm_gorilla-openfunctions-v2:\n\n========================================\ngorilla-openfunctions-v2\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** gorilla-openfunctions-v2\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** OpenFunctions is designed to extend Large Language Model (LLM) Chat Completion feature to formulate executable APIs call given natural language instructions and API context.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** gorilla-llm/gorilla-openfunctions-v2\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/gorilla-llm/gorilla-openfunctions-v2>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gorilla-openfunctions-v2 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** gorilla-llm//gorilla-openfunctions-v2-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/gorilla-llm//gorilla-openfunctions-v2-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gorilla-openfunctions-v2 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/gpt-2.rst",
    "content": ".. _models_llm_gpt-2:\n\n========================================\ngpt-2\n========================================\n\n- **Context Length:** 1024\n- **Model Name:** gpt-2\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** GPT-2 is a Transformer-based LLM that is trained on WebTest, a 40 GB dataset of Reddit posts with 3+ upvotes.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** openai-community/gpt2\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openai-community/gpt2>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gpt-2 --size-in-billions 1_5 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/gpt-oss.rst",
    "content": ".. _models_llm_gpt-oss:\n\n========================================\ngpt-oss\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** gpt-oss\n- **Languages:** en\n- **Abilities:** chat, reasoning\n- **Description:** gpt-oss series, OpenAI’s open-weight models designed for powerful reasoning, agentic tasks, and versatile developer use cases.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 20 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 20\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** openai/gpt-oss-20b\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openai/gpt-oss-20b>`__, `ModelScope <https://modelscope.cn/models/openai-mirror/gpt-oss-20b>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gpt-oss --size-in-billions 20 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (bnb, 20 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** bnb\n- **Model Size (in billions):** 20\n- **Quantizations:** 4-bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** unsloth/gpt-oss-20b-bnb-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/gpt-oss-20b-bnb-4bit>`__, `ModelScope <https://modelscope.cn/models/unsloth/gpt-oss-20b-bnb-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gpt-oss --size-in-billions 20 --model-format bnb --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 120 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 120\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** openai/gpt-oss-120b\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openai/gpt-oss-120b>`__, `ModelScope <https://modelscope.cn/models/openai-mirror/gpt-oss-120b>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name gpt-oss --size-in-billions 120 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/huatuogpt-o1-llama-3.1.rst",
    "content": ".. _models_llm_huatuogpt-o1-llama-3.1:\n\n========================================\nHuatuoGPT-o1-LLaMA-3.1\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** HuatuoGPT-o1-LLaMA-3.1\n- **Languages:** en\n- **Abilities:** chat, tools\n- **Description:** HuatuoGPT-o1 is a medical LLM designed for advanced medical reasoning. It generates a complex thought process, reflecting and refining its reasoning, before providing a final response.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** FreedomIntelligence/HuatuoGPT-o1-8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/FreedomIntelligence/HuatuoGPT-o1-8B>`__, `ModelScope <https://modelscope.cn/models/FreedomIntelligence/HuatuoGPT-o1-8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name HuatuoGPT-o1-LLaMA-3.1 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** FreedomIntelligence/HuatuoGPT-o1-70B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/FreedomIntelligence/HuatuoGPT-o1-70B>`__, `ModelScope <https://modelscope.cn/models/FreedomIntelligence/HuatuoGPT-o1-70B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name HuatuoGPT-o1-LLaMA-3.1 --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/huatuogpt-o1-qwen2.5.rst",
    "content": ".. _models_llm_huatuogpt-o1-qwen2.5:\n\n========================================\nHuatuoGPT-o1-Qwen2.5\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** HuatuoGPT-o1-Qwen2.5\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** HuatuoGPT-o1 is a medical LLM designed for advanced medical reasoning. It generates a complex thought process, reflecting and refining its reasoning, before providing a final response.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** FreedomIntelligence/HuatuoGPT-o1-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/FreedomIntelligence/HuatuoGPT-o1-7B>`__, `ModelScope <https://modelscope.cn/models/FreedomIntelligence/HuatuoGPT-o1-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name HuatuoGPT-o1-Qwen2.5 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** FreedomIntelligence/HuatuoGPT-o1-72B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/FreedomIntelligence/HuatuoGPT-o1-72B>`__, `ModelScope <https://modelscope.cn/models/FreedomIntelligence/HuatuoGPT-o1-72B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name HuatuoGPT-o1-Qwen2.5 --size-in-billions 72 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/index.rst",
    "content": ".. _models_llm_index:\n\n=====================\nLarge language Models\n=====================\n\nThe following is a list of built-in LLM in Xinference:\n\n.. list-table::\n   :widths: 25 25 25 50\n   :header-rows: 1\n\n   * - MODEL NAME\n     - ABILITIES\n     - COTNEXT_LENGTH\n     - DESCRIPTION\n\n\n   * - :ref:`baichuan-2 <models_llm_baichuan-2>`\n     - generate\n     - 4096\n     - Baichuan2 is an open-source Transformer based LLM that is trained on both Chinese and English data.\n\n   * - :ref:`baichuan-2-chat <models_llm_baichuan-2-chat>`\n     - chat\n     - 4096\n     - Baichuan2-chat is a fine-tuned version of the Baichuan LLM, specializing in chatting.\n\n   * - :ref:`baichuan-m2 <models_llm_baichuan-m2>`\n     - chat, reasoning, hybrid, tools\n     - 131072\n     - Baichuan-M2-32B is Baichuan AI's medical-enhanced reasoning model, the second medical model released by Baichuan. Designed for real-world medical reasoning tasks, this model builds upon Qwen2.5-32B with an innovative Large Verifier System. Through domain-specific fine-tuning on real-world medical questions, it achieves breakthrough medical performance while maintaining strong general capabilities.\n\n   * - :ref:`code-llama <models_llm_code-llama>`\n     - generate\n     - 100000\n     - Code-Llama is an open-source LLM trained by fine-tuning LLaMA2 for generating and discussing code.\n\n   * - :ref:`code-llama-instruct <models_llm_code-llama-instruct>`\n     - chat\n     - 100000\n     - Code-Llama-Instruct is an instruct-tuned version of the Code-Llama LLM.\n\n   * - :ref:`code-llama-python <models_llm_code-llama-python>`\n     - generate\n     - 100000\n     - Code-Llama-Python is a fine-tuned version of the Code-Llama LLM, specializing in Python.\n\n   * - :ref:`codegeex4 <models_llm_codegeex4>`\n     - chat\n     - 131072\n     - the open-source version of the latest CodeGeeX4 model series\n\n   * - :ref:`codeqwen1.5 <models_llm_codeqwen1.5>`\n     - generate\n     - 65536\n     - CodeQwen1.5 is the Code-Specific version of Qwen1.5. It is a transformer-based decoder-only language model pretrained on a large amount of data of codes.\n\n   * - :ref:`codeqwen1.5-chat <models_llm_codeqwen1.5-chat>`\n     - chat\n     - 65536\n     - CodeQwen1.5 is the Code-Specific version of Qwen1.5. It is a transformer-based decoder-only language model pretrained on a large amount of data of codes.\n\n   * - :ref:`codeshell <models_llm_codeshell>`\n     - generate\n     - 8194\n     - CodeShell is a multi-language code LLM developed by the Knowledge Computing Lab of Peking University. \n\n   * - :ref:`codeshell-chat <models_llm_codeshell-chat>`\n     - chat\n     - 8194\n     - CodeShell is a multi-language code LLM developed by the Knowledge Computing Lab of Peking University.\n\n   * - :ref:`codestral-v0.1 <models_llm_codestral-v0.1>`\n     - generate\n     - 32768\n     - Codestrall-22B-v0.1 is trained on a diverse dataset of 80+ programming languages, including the most popular ones, such as Python, Java, C, C++, JavaScript, and Bash\n\n   * - :ref:`cogagent <models_llm_cogagent>`\n     - chat, vision\n     - 4096\n     - The CogAgent-9B-20241220 model is based on GLM-4V-9B, a bilingual open-source VLM base model. Through data collection and optimization, multi-stage training, and strategy improvements, CogAgent-9B-20241220 achieves significant advancements in GUI perception, inference prediction accuracy, action space completeness, and task generalizability. \n\n   * - :ref:`deepseek <models_llm_deepseek>`\n     - generate\n     - 4096\n     - DeepSeek LLM, trained from scratch on a vast dataset of 2 trillion tokens in both English and Chinese. \n\n   * - :ref:`deepseek-chat <models_llm_deepseek-chat>`\n     - chat\n     - 4096\n     - DeepSeek LLM is an advanced language model comprising 67 billion parameters. It has been trained from scratch on a vast dataset of 2 trillion tokens in both English and Chinese.\n\n   * - :ref:`deepseek-coder <models_llm_deepseek-coder>`\n     - generate\n     - 16384\n     - Deepseek Coder is composed of a series of code language models, each trained from scratch on 2T tokens, with a composition of 87% code and 13% natural language in both English and Chinese. \n\n   * - :ref:`deepseek-coder-instruct <models_llm_deepseek-coder-instruct>`\n     - chat\n     - 16384\n     - deepseek-coder-instruct is a model initialized from deepseek-coder-base and fine-tuned on 2B tokens of instruction data.\n\n   * - :ref:`deepseek-prover-v2 <models_llm_deepseek-prover-v2>`\n     - chat, reasoning\n     - 163840\n     - We introduce DeepSeek-Prover-V2, an open-source large language model designed for formal theorem proving in Lean 4, with initialization data collected through a recursive theorem proving pipeline powered by DeepSeek-V3. The cold-start training procedure begins by prompting DeepSeek-V3 to decompose complex problems into a series of subgoals. The proofs of resolved subgoals are synthesized into a chain-of-thought process, combined with DeepSeek-V3's step-by-step reasoning, to create an initial cold start for reinforcement learning. This process enables us to integrate both informal and formal mathematical reasoning into a unified model\n\n   * - :ref:`deepseek-r1 <models_llm_deepseek-r1>`\n     - chat, reasoning\n     - 163840\n     - DeepSeek-R1, which incorporates cold-start data before RL. DeepSeek-R1 achieves performance comparable to OpenAI-o1 across math, code, and reasoning tasks.\n\n   * - :ref:`deepseek-r1-0528 <models_llm_deepseek-r1-0528>`\n     - chat, reasoning, tools\n     - 163840\n     - DeepSeek-R1, which incorporates cold-start data before RL. DeepSeek-R1 achieves performance comparable to OpenAI-o1 across math, code, and reasoning tasks.\n\n   * - :ref:`deepseek-r1-0528-qwen3 <models_llm_deepseek-r1-0528-qwen3>`\n     - chat, reasoning\n     - 131072\n     - The DeepSeek R1 model has undergone a minor version upgrade, with the current version being DeepSeek-R1-0528. In the latest update, DeepSeek R1 has significantly improved its depth of reasoning and inference capabilities by leveraging increased computational resources and introducing algorithmic optimization mechanisms during post-training. The model has demonstrated outstanding performance across various benchmark evaluations, including mathematics, programming, and general logic. Its overall performance is now approaching that of leading models, such as O3 and Gemini 2.5 Pro\n\n   * - :ref:`deepseek-r1-distill-llama <models_llm_deepseek-r1-distill-llama>`\n     - chat, reasoning\n     - 131072\n     - deepseek-r1-distill-llama is distilled from DeepSeek-R1 based on Llama\n\n   * - :ref:`deepseek-r1-distill-qwen <models_llm_deepseek-r1-distill-qwen>`\n     - chat, reasoning\n     - 131072\n     - deepseek-r1-distill-qwen is distilled from DeepSeek-R1 based on Qwen\n\n   * - :ref:`deepseek-v2-chat <models_llm_deepseek-v2-chat>`\n     - chat\n     - 128000\n     - DeepSeek-V2, a strong Mixture-of-Experts (MoE) language model characterized by economical training and efficient inference. \n\n   * - :ref:`deepseek-v2-chat-0628 <models_llm_deepseek-v2-chat-0628>`\n     - chat\n     - 128000\n     - DeepSeek-V2-Chat-0628 is an improved version of DeepSeek-V2-Chat. \n\n   * - :ref:`deepseek-v2.5 <models_llm_deepseek-v2.5>`\n     - chat\n     - 128000\n     - DeepSeek-V2.5 is an upgraded version that combines DeepSeek-V2-Chat and DeepSeek-Coder-V2-Instruct. The new model integrates the general and coding abilities of the two previous versions.\n\n   * - :ref:`deepseek-v3 <models_llm_deepseek-v3>`\n     - chat\n     - 163840\n     - DeepSeek-V3, a strong Mixture-of-Experts (MoE) language model with 671B total parameters with 37B activated for each token. \n\n   * - :ref:`deepseek-v3-0324 <models_llm_deepseek-v3-0324>`\n     - chat\n     - 163840\n     - DeepSeek-V3, a strong Mixture-of-Experts (MoE) language model with 671B total parameters with 37B activated for each token. \n\n   * - :ref:`deepseek-v3.1 <models_llm_deepseek-v3.1>`\n     - chat, reasoning, hybrid, tools\n     - 131072\n     - DeepSeek-V3.1 is a hybrid model that supports both thinking mode and non-thinking mode.\n\n   * - :ref:`deepseek-v3.2 <models_llm_deepseek-v3.2>`\n     - chat, reasoning, hybrid, tools\n     - 163840\n     - We introduce DeepSeek-V3.2, a model that harmonizes high computational efficiency with superior reasoning and agent performance\n\n   * - :ref:`deepseek-v3.2-exp <models_llm_deepseek-v3.2-exp>`\n     - chat, reasoning, hybrid, tools\n     - 163840\n     - We are excited to announce the official release of DeepSeek-V3.2-Exp, an experimental version of our model. As an intermediate step toward our next-generation architecture, V3.2-Exp builds upon V3.1-Terminus by introducing DeepSeek Sparse Attention—a sparse attention mechanism designed to explore and validate optimizations for training and inference efficiency in long-context scenarios.\n\n   * - :ref:`deepseek-vl2 <models_llm_deepseek-vl2>`\n     - chat, vision\n     - 4096\n     - DeepSeek-VL2, an advanced series of large Mixture-of-Experts (MoE) Vision-Language Models that significantly improves upon its predecessor, DeepSeek-VL. DeepSeek-VL2 demonstrates superior capabilities across various tasks, including but not limited to visual question answering, optical character recognition, document/table/chart understanding, and visual grounding.\n\n   * - :ref:`dianjin-r1 <models_llm_dianjin-r1>`\n     - chat, tools\n     - 32768\n     - Tongyi DianJin is a financial intelligence solution platform built by Alibaba Cloud, dedicated to providing financial business developers with a convenient artificial intelligence application development environment.\n\n   * - :ref:`ernie4.5 <models_llm_ernie4.5>`\n     - chat\n     - 131072\n     - ERNIE 4.5, a new family of large-scale multimodal models comprising 10 distinct variants.\n\n   * - :ref:`fin-r1 <models_llm_fin-r1>`\n     - chat\n     - 131072\n     - Fin-R1 is a large language model specifically designed for the field of financial reasoning\n\n   * - :ref:`gemma-3-1b-it <models_llm_gemma-3-1b-it>`\n     - chat\n     - 32768\n     - Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models.\n\n   * - :ref:`gemma-3-it <models_llm_gemma-3-it>`\n     - chat, vision\n     - 131072\n     - Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models.\n\n   * - :ref:`glm-4.1v-thinking <models_llm_glm-4.1v-thinking>`\n     - chat, vision, reasoning, tools\n     - 65536\n     - GLM-4.1V-9B-Thinking, designed to explore the upper limits of reasoning in vision-language models.\n\n   * - :ref:`glm-4.5 <models_llm_glm-4.5>`\n     - chat, reasoning, hybrid, tools\n     - 131072\n     - The GLM-4.5 series models are foundation models designed for intelligent agents. \n\n   * - :ref:`glm-4.5v <models_llm_glm-4.5v>`\n     - chat, vision, reasoning, tools\n     - 131072\n     - GLM-4.5V is based on ZhipuAI’s next-generation flagship text foundation model GLM-4.5-Air (106B parameters, 12B active). It continues the technical approach of GLM-4.1V-Thinking, achieving SOTA performance among models of the same scale on 42 public vision-language benchmarks.\n\n   * - :ref:`glm-4.6 <models_llm_glm-4.6>`\n     - chat, reasoning, hybrid, tools\n     - 202752\n     - GLM-4.6 significantly enhances context length (up to 200K tokens), code generation, reasoning with tool use, agent capabilities, and human-aligned writing compared to GLM-4.5.\n\n   * - :ref:`glm-4.7 <models_llm_glm-4.7>`\n     - chat, reasoning, hybrid, tools\n     - 202752\n     - GLM-4.7 significantly advances core and multilingual agentic coding, UI/vibe coding, tool use, and complex reasoning—outperforming GLM-4.6 across benchmarks like SWE-bench, Terminal Bench 2.0, τ²-Bench, and HLE—while also improving chat, creative writing, and role-play.\n\n   * - :ref:`glm-4.7-flash <models_llm_glm-4.7-flash>`\n     - chat, reasoning, hybrid, tools\n     - 202752\n     - GLM-4.7-Flash is a 30B-A3B MoE model. As the strongest model in the 30B class, it offers a lightweight deployment option that balances performance and efficiency.\n\n   * - :ref:`glm-4v <models_llm_glm-4v>`\n     - chat, vision\n     - 8192\n     - GLM4 is the open source version of the latest generation of pre-trained models in the GLM-4 series launched by Zhipu AI.\n\n   * - :ref:`glm-5 <models_llm_glm-5>`\n     - chat, vision, tools, reasoning\n     - 202752\n     - We are launching GLM-5, targeting complex systems engineering and long-horizon agentic tasks. Scaling is still one of the most important ways to improve the intelligence efficiency of Artificial General Intelligence (AGI). Compared to GLM-4.5, GLM-5 scales from 355B parameters (32B active) to 744B parameters (40B active), and increases pre-training data from 23T to 28.5T tokens. GLM-5 also integrates DeepSeek Sparse Attention (DSA), largely reducing deployment cost while preserving long-context capacity.  Reinforcement learning aims to bridge the gap between competence and excellence in pre-trained models. However, deploying it at scale for LLMs is a challenge due to the RL training inefficiency. To this end, we developed slime, a novel asynchronous RL infrastructure that substantially improves training throughput and efficiency, enabling more fine-grained post-training iterations. With advances in both pre-training and post-training, GLM-5 delivers significant improvement compared to GLM-4.7 across a wide range of academic benchmarks and achieves best-in-class performance among all open-source models in the world on reasoning, coding, and agentic tasks, closing the gap with frontier models.\n\n   * - :ref:`glm-edge-chat <models_llm_glm-edge-chat>`\n     - chat\n     - 8192\n     - The GLM-Edge series is our attempt to face the end-side real-life scenarios, which consists of two sizes of large-language dialogue models and multimodal comprehension models (GLM-Edge-1.5B-Chat, GLM-Edge-4B-Chat, GLM-Edge-V-2B, GLM-Edge-V-5B). Among them, the 1.5B / 2B model is mainly for platforms such as mobile phones and cars, and the 4B / 5B model is mainly for platforms such as PCs.\n\n   * - :ref:`glm4-0414 <models_llm_glm4-0414>`\n     - chat, tools\n     - 32768\n     - The GLM family welcomes new members, the GLM-4-32B-0414 series models, featuring 32 billion parameters. Its performance is comparable to OpenAI’s GPT series and DeepSeek’s V3/R1 series\n\n   * - :ref:`glm4-chat <models_llm_glm4-chat>`\n     - chat, tools\n     - 131072\n     - GLM4 is the open source version of the latest generation of pre-trained models in the GLM-4 series launched by Zhipu AI.\n\n   * - :ref:`glm4-chat-1m <models_llm_glm4-chat-1m>`\n     - chat, tools\n     - 1048576\n     - GLM4 is the open source version of the latest generation of pre-trained models in the GLM-4 series launched by Zhipu AI.\n\n   * - :ref:`gorilla-openfunctions-v2 <models_llm_gorilla-openfunctions-v2>`\n     - chat\n     - 4096\n     - OpenFunctions is designed to extend Large Language Model (LLM) Chat Completion feature to formulate executable APIs call given natural language instructions and API context.\n\n   * - :ref:`gpt-2 <models_llm_gpt-2>`\n     - generate\n     - 1024\n     - GPT-2 is a Transformer-based LLM that is trained on WebTest, a 40 GB dataset of Reddit posts with 3+ upvotes.\n\n   * - :ref:`gpt-oss <models_llm_gpt-oss>`\n     - chat, reasoning\n     - 131072\n     - gpt-oss series, OpenAI’s open-weight models designed for powerful reasoning, agentic tasks, and versatile developer use cases.\n\n   * - :ref:`huatuogpt-o1-llama-3.1 <models_llm_huatuogpt-o1-llama-3.1>`\n     - chat, tools\n     - 131072\n     - HuatuoGPT-o1 is a medical LLM designed for advanced medical reasoning. It generates a complex thought process, reflecting and refining its reasoning, before providing a final response.\n\n   * - :ref:`huatuogpt-o1-qwen2.5 <models_llm_huatuogpt-o1-qwen2.5>`\n     - chat, tools\n     - 32768\n     - HuatuoGPT-o1 is a medical LLM designed for advanced medical reasoning. It generates a complex thought process, reflecting and refining its reasoning, before providing a final response.\n\n   * - :ref:`internlm3-instruct <models_llm_internlm3-instruct>`\n     - chat, tools\n     - 32768\n     - InternLM3 has open-sourced an 8-billion parameter instruction model, InternLM3-8B-Instruct, designed for general-purpose usage and advanced reasoning.\n\n   * - :ref:`internvl3 <models_llm_internvl3>`\n     - chat, vision\n     - 8192\n     - InternVL3, an advanced multimodal large language model (MLLM) series that demonstrates superior overall performance.\n\n   * - :ref:`kat-v1 <models_llm_kat-v1>`\n     - chat\n     - 131072\n     - Kwaipilot-AutoThink ranks first among all open-source models on LiveCodeBench Pro, a challenging benchmark explicitly designed to prevent data leakage, and even surpasses strong proprietary systems such as Seed and o3-mini.\n\n   * - :ref:`kimi-k2.5 <models_llm_kimi-k2.5>`\n     - chat, vision\n     - 262144\n     - Kimi K2.5 is an open-source, native multimodal agentic model built through continual pretraining on approximately 15 trillion mixed visual and text tokens atop Kimi-K2-Base. It seamlessly integrates vision and language understanding with advanced agentic capabilities, instant and thinking modes, as well as conversational and agentic paradigms.\n\n   * - :ref:`llama-2 <models_llm_llama-2>`\n     - generate\n     - 4096\n     - Llama-2 is the second generation of Llama, open-source and trained on a larger amount of data.\n\n   * - :ref:`llama-2-chat <models_llm_llama-2-chat>`\n     - chat\n     - 4096\n     - Llama-2-Chat is a fine-tuned version of the Llama-2 LLM, specializing in chatting.\n\n   * - :ref:`llama-3 <models_llm_llama-3>`\n     - generate\n     - 8192\n     - Llama 3 is an auto-regressive language model that uses an optimized transformer architecture\n\n   * - :ref:`llama-3-instruct <models_llm_llama-3-instruct>`\n     - chat\n     - 8192\n     - The Llama 3 instruction tuned models are optimized for dialogue use cases and outperform many of the available open source chat models on common industry benchmarks..\n\n   * - :ref:`llama-3.1 <models_llm_llama-3.1>`\n     - generate\n     - 131072\n     - Llama 3.1 is an auto-regressive language model that uses an optimized transformer architecture\n\n   * - :ref:`llama-3.1-instruct <models_llm_llama-3.1-instruct>`\n     - chat, tools\n     - 131072\n     - The Llama 3.1 instruction tuned models are optimized for dialogue use cases and outperform many of the available open source chat models on common industry benchmarks..\n\n   * - :ref:`llama-3.2-vision <models_llm_llama-3.2-vision>`\n     - generate, vision\n     - 131072\n     - The Llama 3.2-Vision instruction-tuned models are optimized for visual recognition, image reasoning, captioning, and answering general questions about an image...\n\n   * - :ref:`llama-3.2-vision-instruct <models_llm_llama-3.2-vision-instruct>`\n     - chat, vision\n     - 131072\n     - Llama 3.2-Vision instruction-tuned models are optimized for visual recognition, image reasoning, captioning, and answering general questions about an image...\n\n   * - :ref:`llama-3.3-instruct <models_llm_llama-3.3-instruct>`\n     - chat, tools\n     - 131072\n     - The Llama 3.3 instruction tuned models are optimized for dialogue use cases and outperform many of the available open source chat models on common industry benchmarks..\n\n   * - :ref:`marco-o1 <models_llm_marco-o1>`\n     - chat, tools\n     - 32768\n     - Marco-o1: Towards Open Reasoning Models for Open-Ended Solutions\n\n   * - :ref:`mineru2.5-2509-1.2b <models_llm_mineru2.5-2509-1.2b>`\n     - chat, vision\n     - 32768\n     - MinerU2.5-2509-1.2B is a vision language model for document understanding.\n\n   * - :ref:`minicpm-2b-dpo-bf16 <models_llm_minicpm-2b-dpo-bf16>`\n     - chat\n     - 4096\n     - MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\n   * - :ref:`minicpm-2b-dpo-fp16 <models_llm_minicpm-2b-dpo-fp16>`\n     - chat\n     - 4096\n     - MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\n   * - :ref:`minicpm-2b-dpo-fp32 <models_llm_minicpm-2b-dpo-fp32>`\n     - chat\n     - 4096\n     - MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\n   * - :ref:`minicpm-2b-sft-bf16 <models_llm_minicpm-2b-sft-bf16>`\n     - chat\n     - 4096\n     - MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\n   * - :ref:`minicpm-2b-sft-fp32 <models_llm_minicpm-2b-sft-fp32>`\n     - chat\n     - 4096\n     - MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\n   * - :ref:`minicpm-v-2.6 <models_llm_minicpm-v-2.6>`\n     - chat, vision\n     - 32768\n     - MiniCPM-V 2.6 is the latest model in the MiniCPM-V series. The model is built on SigLip-400M and Qwen2-7B with a total of 8B parameters.\n\n   * - :ref:`minicpm-v-4.5 <models_llm_minicpm-v-4.5>`\n     - chat, vision\n     - 32768\n     - MiniCPM-V 4.5 is an improved version in the MiniCPM-V series with enhanced multimodal capabilities and better performance.\n\n   * - :ref:`minicpm3-4b <models_llm_minicpm3-4b>`\n     - chat\n     - 32768\n     - MiniCPM3-4B is the 3rd generation of MiniCPM series. The overall performance of MiniCPM3-4B surpasses Phi-3.5-mini-Instruct and GPT-3.5-Turbo-0125, being comparable with many recent 7B~9B models.\n\n   * - :ref:`minicpm4 <models_llm_minicpm4>`\n     - chat\n     - 32768\n     - MiniCPM4 series are highly efficient large language models (LLMs) designed explicitly for end-side devices, which achieves this efficiency through systematic innovation in four key dimensions: model architecture, training data, training algorithms, and inference systems.\n\n   * - :ref:`minimax-m2 <models_llm_minimax-m2>`\n     - chat, tools, reasoning\n     - 196608\n     - MiniMax-M2, a Mini model built for Max coding & agentic workflows.\n\n   * - :ref:`minimax-m2.5 <models_llm_minimax-m2.5>`\n     - chat, tools, reasoning\n     - 196608\n     - MiniMax-M2.5, a Mini model built for Max coding & agentic workflows.\n\n   * - :ref:`mistral-instruct-v0.1 <models_llm_mistral-instruct-v0.1>`\n     - chat\n     - 8192\n     - Mistral-7B-Instruct is a fine-tuned version of the Mistral-7B LLM on public datasets, specializing in chatting.\n\n   * - :ref:`mistral-instruct-v0.2 <models_llm_mistral-instruct-v0.2>`\n     - chat\n     - 8192\n     - The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) is an improved instruct fine-tuned version of Mistral-7B-Instruct-v0.1.\n\n   * - :ref:`mistral-instruct-v0.3 <models_llm_mistral-instruct-v0.3>`\n     - chat\n     - 32768\n     - The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) is an improved instruct fine-tuned version of Mistral-7B-Instruct-v0.1.\n\n   * - :ref:`mistral-large-instruct <models_llm_mistral-large-instruct>`\n     - chat\n     - 131072\n     - Mistral-Large-Instruct-2407 is an advanced dense Large Language Model (LLM) of 123B parameters with state-of-the-art reasoning, knowledge and coding capabilities.\n\n   * - :ref:`mistral-nemo-instruct <models_llm_mistral-nemo-instruct>`\n     - chat\n     - 1024000\n     - The Mistral-Nemo-Instruct-2407 Large Language Model (LLM) is an instruct fine-tuned version of the Mistral-Nemo-Base-2407\n\n   * - :ref:`mistral-v0.1 <models_llm_mistral-v0.1>`\n     - generate\n     - 8192\n     - Mistral-7B is a unmoderated Transformer based LLM claiming to outperform Llama2 on all benchmarks.\n\n   * - :ref:`mixtral-8x22b-instruct-v0.1 <models_llm_mixtral-8x22b-instruct-v0.1>`\n     - chat\n     - 65536\n     - The Mixtral-8x22B-Instruct-v0.1 Large Language Model (LLM) is an instruct fine-tuned version of the Mixtral-8x22B-v0.1, specializing in chatting.\n\n   * - :ref:`mixtral-instruct-v0.1 <models_llm_mixtral-instruct-v0.1>`\n     - chat\n     - 32768\n     - Mistral-8x7B-Instruct is a fine-tuned version of the Mistral-8x7B LLM, specializing in chatting.\n\n   * - :ref:`mixtral-v0.1 <models_llm_mixtral-v0.1>`\n     - generate\n     - 32768\n     - The Mixtral-8x7B Large Language Model (LLM) is a pretrained generative Sparse Mixture of Experts.\n\n   * - :ref:`moonlight-16b-a3b-instruct <models_llm_moonlight-16b-a3b-instruct>`\n     - chat\n     - 8192\n     - Kimi Muon is Scalable for LLM Training\n\n   * - :ref:`openhermes-2.5 <models_llm_openhermes-2.5>`\n     - chat\n     - 8192\n     - Openhermes 2.5 is a fine-tuned version of Mistral-7B-v0.1 on primarily GPT-4 generated data.\n\n   * - :ref:`opt <models_llm_opt>`\n     - generate\n     - 2048\n     - Opt is an open-source, decoder-only, Transformer based LLM that was designed to replicate GPT-3.\n\n   * - :ref:`orion-chat <models_llm_orion-chat>`\n     - chat\n     - 4096\n     - Orion-14B series models are open-source multilingual large language models trained from scratch by OrionStarAI.\n\n   * - :ref:`ovis2 <models_llm_ovis2>`\n     - chat, vision\n     - 32768\n     - Ovis (Open VISion) is a novel Multimodal Large Language Model (MLLM) architecture, designed to structurally align visual and textual embeddings.\n\n   * - :ref:`phi-2 <models_llm_phi-2>`\n     - generate\n     - 2048\n     - Phi-2 is a 2.7B Transformer based LLM used for research on model safety, trained with data similar to Phi-1.5 but augmented with synthetic texts and curated websites.\n\n   * - :ref:`phi-3-mini-128k-instruct <models_llm_phi-3-mini-128k-instruct>`\n     - chat\n     - 128000\n     - The Phi-3-Mini-128K-Instruct is a 3.8 billion-parameter, lightweight, state-of-the-art open model trained using the Phi-3 datasets.\n\n   * - :ref:`phi-3-mini-4k-instruct <models_llm_phi-3-mini-4k-instruct>`\n     - chat\n     - 4096\n     - The Phi-3-Mini-4k-Instruct is a 3.8 billion-parameter, lightweight, state-of-the-art open model trained using the Phi-3 datasets.\n\n   * - :ref:`qvq-72b-preview <models_llm_qvq-72b-preview>`\n     - chat, vision\n     - 32768\n     - QVQ-72B-Preview is an experimental research model developed by the Qwen team, focusing on enhancing visual reasoning capabilities.\n\n   * - :ref:`qwen-chat <models_llm_qwen-chat>`\n     - chat\n     - 32768\n     - Qwen-chat is a fine-tuned version of the Qwen LLM trained with alignment techniques, specializing in chatting.\n\n   * - :ref:`qwen1.5-chat <models_llm_qwen1.5-chat>`\n     - chat, tools\n     - 32768\n     - Qwen1.5 is the beta version of Qwen2, a transformer-based decoder-only language model pretrained on a large amount of data.\n\n   * - :ref:`qwen1.5-moe-chat <models_llm_qwen1.5-moe-chat>`\n     - chat, tools\n     - 32768\n     - Qwen1.5-MoE is a transformer-based MoE decoder-only language model pretrained on a large amount of data.\n\n   * - :ref:`qwen2-audio-instruct <models_llm_qwen2-audio-instruct>`\n     - chat, audio\n     - 32768\n     - Qwen2-Audio: A large-scale audio-language model which is capable of accepting various audio signal inputs and performing audio analysis or direct textual responses with regard to speech instructions.\n\n   * - :ref:`qwen2-instruct <models_llm_qwen2-instruct>`\n     - chat, tools\n     - 32768\n     - Qwen2 is the new series of Qwen large language models\n\n   * - :ref:`qwen2-moe-instruct <models_llm_qwen2-moe-instruct>`\n     - chat, tools\n     - 32768\n     - Qwen2 is the new series of Qwen large language models. \n\n   * - :ref:`qwen2-vl-instruct <models_llm_qwen2-vl-instruct>`\n     - chat, vision\n     - 32768\n     - Qwen2-VL: To See the World More Clearly.Qwen2-VL is the latest version of the vision language models in the Qwen model familities.\n\n   * - :ref:`qwen2.5 <models_llm_qwen2.5>`\n     - generate\n     - 32768\n     - Qwen2.5 is the latest series of Qwen large language models. For Qwen2.5, we release a number of base language models and instruction-tuned language models ranging from 0.5 to 72 billion parameters.\n\n   * - :ref:`qwen2.5-coder <models_llm_qwen2.5-coder>`\n     - generate\n     - 32768\n     - Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen).\n\n   * - :ref:`qwen2.5-coder-instruct <models_llm_qwen2.5-coder-instruct>`\n     - chat, tools\n     - 32768\n     - Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen).\n\n   * - :ref:`qwen2.5-instruct <models_llm_qwen2.5-instruct>`\n     - chat, tools\n     - 32768\n     - Qwen2.5 is the latest series of Qwen large language models. For Qwen2.5, we release a number of base language models and instruction-tuned language models ranging from 0.5 to 72 billion parameters.\n\n   * - :ref:`qwen2.5-instruct-1m <models_llm_qwen2.5-instruct-1m>`\n     - chat\n     - 1010000\n     - Qwen2.5-1M is the long-context version of the Qwen2.5 series models, supporting a context length of up to 1M tokens.\n\n   * - :ref:`qwen2.5-omni <models_llm_qwen2.5-omni>`\n     - chat, vision, audio, omni\n     - 32768\n     - Qwen2.5-Omni: the new flagship end-to-end multimodal model in the Qwen series.\n\n   * - :ref:`qwen2.5-vl-instruct <models_llm_qwen2.5-vl-instruct>`\n     - chat, vision\n     - 128000\n     - Qwen2.5-VL: Qwen2.5-VL is the latest version of the vision language models in the Qwen model familities.\n\n   * - :ref:`qwen3 <models_llm_qwen3>`\n     - chat, reasoning, hybrid, tools\n     - 40960\n     - Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models. Built upon extensive training, Qwen3 delivers groundbreaking advancements in reasoning, instruction-following, agent capabilities, and multilingual support.\n\n   * - :ref:`qwen3-coder <models_llm_qwen3-coder>`\n     - chat, tools\n     - 262144\n     - we're announcing Qwen3-Coder, our most agentic code model to date\n\n   * - :ref:`qwen3-instruct <models_llm_qwen3-instruct>`\n     - chat, tools\n     - 262144\n     - We introduce the updated version of the Qwen3-235B-A22B non-thinking mode, named Qwen3-235B-A22B-Instruct-2507\n\n   * - :ref:`qwen3-next-instruct <models_llm_qwen3-next-instruct>`\n     - chat, tools\n     - 262144\n     - Qwen3-Next-80B-A3B is the first installment in the Qwen3-Next series\n\n   * - :ref:`qwen3-next-thinking <models_llm_qwen3-next-thinking>`\n     - chat, reasoning, tools\n     - 262144\n     - Qwen3-Next-80B-A3B is the first installment in the Qwen3-Next series\n\n   * - :ref:`qwen3-omni-instruct <models_llm_qwen3-omni-instruct>`\n     - chat, vision, audio, omni, tools\n     - 262144\n     - Qwen3-Omni is the natively end-to-end multilingual omni-modal foundation models. It processes text, images, audio, and video, and delivers real-time streaming responses in both text and natural speech. We introduce several architectural upgrades to improve performance and efficiency.\n\n   * - :ref:`qwen3-omni-thinking <models_llm_qwen3-omni-thinking>`\n     - chat, vision, audio, omni, reasoning, tools\n     - 262144\n     - Qwen3-Omni is the natively end-to-end multilingual omni-modal foundation models. It processes text, images, audio, and video, and delivers real-time streaming responses in both text and natural speech. We introduce several architectural upgrades to improve performance and efficiency.\n\n   * - :ref:`qwen3-thinking <models_llm_qwen3-thinking>`\n     - chat, reasoning, tools\n     - 262144\n     - we have continued to scale the thinking capability of Qwen3-235B-A22B, improving both the quality and depth of reasoning\n\n   * - :ref:`qwen3-vl-instruct <models_llm_qwen3-vl-instruct>`\n     - chat, vision, tools\n     - 262144\n     - Meet Qwen3-VL — the most powerful vision-language model in the Qwen series to date.\n\n   * - :ref:`qwen3-vl-thinking <models_llm_qwen3-vl-thinking>`\n     - chat, vision, reasoning, tools\n     - 262144\n     - Meet Qwen3-VL — the most powerful vision-language model in the Qwen series to date.\n\n   * - :ref:`qwen3.5 <models_llm_qwen3.5>`\n     - chat, vision, tools, reasoning\n     - 262144\n     - Over recent months, we have intensified our focus on developing foundation models that deliver exceptional utility and performance. Qwen3.5 represents a significant leap forward, integrating breakthroughs in multimodal learning, architectural efficiency, reinforcement learning scale, and global accessibility to empower developers and enterprises with unprecedented capability and efficiency\n\n   * - :ref:`qwenlong-l1 <models_llm_qwenlong-l1>`\n     - chat\n     - 32768\n     - QwenLong-L1: Towards Long-Context Large Reasoning Models with Reinforcement Learning\n\n   * - :ref:`qwq-32b <models_llm_qwq-32b>`\n     - chat, reasoning, tools\n     - 131072\n     - QwQ is the reasoning model of the Qwen series. Compared with conventional instruction-tuned models, QwQ, which is capable of thinking and reasoning, can achieve significantly enhanced performance in downstream tasks, especially hard problems. QwQ-32B is the medium-sized reasoning model, which is capable of achieving competitive performance against state-of-the-art reasoning models, e.g., DeepSeek-R1, o1-mini.\n\n   * - :ref:`qwq-32b-preview <models_llm_qwq-32b-preview>`\n     - chat\n     - 32768\n     - QwQ-32B-Preview is an experimental research model developed by the Qwen Team, focused on advancing AI reasoning capabilities.\n\n   * - :ref:`seallm_v2 <models_llm_seallm_v2>`\n     - generate\n     - 8192\n     - We introduce SeaLLM-7B-v2, the state-of-the-art multilingual LLM for Southeast Asian (SEA) languages\n\n   * - :ref:`seallm_v2.5 <models_llm_seallm_v2.5>`\n     - generate\n     - 8192\n     - We introduce SeaLLM-7B-v2.5, the state-of-the-art multilingual LLM for Southeast Asian (SEA) languages\n\n   * - :ref:`seallms-v3 <models_llm_seallms-v3>`\n     - chat\n     - 32768\n     - SeaLLMs - Large Language Models for Southeast Asia\n\n   * - :ref:`seed-oss <models_llm_seed-oss>`\n     - chat, reasoning, tools\n     - 524288\n     - Seed-OSS is a series of open-source large language models developed by ByteDance's Seed Team, designed for powerful long-context, reasoning, agent and general capabilities, and versatile developer-friendly features. Although trained with only 12T tokens, Seed-OSS achieves excellent performance on several popular open benchmarks.\n\n   * - :ref:`skywork <models_llm_skywork>`\n     - generate\n     - 4096\n     - Skywork is a series of large models developed by the Kunlun Group · Skywork team.\n\n   * - :ref:`skywork-math <models_llm_skywork-math>`\n     - generate\n     - 4096\n     - Skywork is a series of large models developed by the Kunlun Group · Skywork team.\n\n   * - :ref:`skywork-or1 <models_llm_skywork-or1>`\n     - chat\n     - 131072\n     - We release the final version of Skywork-OR1 (Open Reasoner 1) series of models, including\n\n   * - :ref:`skywork-or1-preview <models_llm_skywork-or1-preview>`\n     - chat\n     - 32768\n     - The Skywork-OR1 (Open Reasoner 1) model series consists of powerful math and code reasoning models trained using large-scale rule-based reinforcement learning with carefully designed datasets and training recipes.\n\n   * - :ref:`telechat <models_llm_telechat>`\n     - chat\n     - 8192\n     - The TeleChat is a large language model developed and trained by China Telecom Artificial Intelligence Technology Co., LTD. The 7B model base is trained with 1.5 trillion Tokens and 3 trillion Tokens and Chinese high-quality corpus.\n\n   * - :ref:`tiny-llama <models_llm_tiny-llama>`\n     - generate\n     - 2048\n     - The TinyLlama project aims to pretrain a 1.1B Llama model on 3 trillion tokens.\n\n   * - :ref:`wizardcoder-python-v1.0 <models_llm_wizardcoder-python-v1.0>`\n     - chat\n     - 100000\n     - \n\n   * - :ref:`wizardmath-v1.0 <models_llm_wizardmath-v1.0>`\n     - chat\n     - 2048\n     - WizardMath is an open-source LLM trained by fine-tuning Llama2 with Evol-Instruct, specializing in math.\n\n   * - :ref:`xiyansql-qwencoder-2504 <models_llm_xiyansql-qwencoder-2504>`\n     - chat, tools\n     - 32768\n     - The XiYanSQL-QwenCoder models, as multi-dialect SQL base models, demonstrating robust SQL generation capabilities.\n\n   * - :ref:`xverse <models_llm_xverse>`\n     - generate\n     - 2048\n     - XVERSE is a multilingual large language model, independently developed by Shenzhen Yuanxiang Technology.\n\n   * - :ref:`xverse-chat <models_llm_xverse-chat>`\n     - chat\n     - 2048\n     - XVERSEB-Chat is the aligned version of model XVERSE.\n\n   * - :ref:`yi <models_llm_yi>`\n     - generate\n     - 4096\n     - The Yi series models are large language models trained from scratch by developers at 01.AI.\n\n   * - :ref:`yi-1.5 <models_llm_yi-1.5>`\n     - generate\n     - 4096\n     - Yi-1.5 is an upgraded version of Yi. It is continuously pre-trained on Yi with a high-quality corpus of 500B tokens and fine-tuned on 3M diverse fine-tuning samples.\n\n   * - :ref:`yi-1.5-chat <models_llm_yi-1.5-chat>`\n     - chat\n     - 4096\n     - Yi-1.5 is an upgraded version of Yi. It is continuously pre-trained on Yi with a high-quality corpus of 500B tokens and fine-tuned on 3M diverse fine-tuning samples.\n\n   * - :ref:`yi-1.5-chat-16k <models_llm_yi-1.5-chat-16k>`\n     - chat\n     - 16384\n     - Yi-1.5 is an upgraded version of Yi. It is continuously pre-trained on Yi with a high-quality corpus of 500B tokens and fine-tuned on 3M diverse fine-tuning samples.\n\n   * - :ref:`yi-200k <models_llm_yi-200k>`\n     - generate\n     - 262144\n     - The Yi series models are large language models trained from scratch by developers at 01.AI.\n\n   * - :ref:`yi-chat <models_llm_yi-chat>`\n     - chat\n     - 4096\n     - The Yi series models are large language models trained from scratch by developers at 01.AI.\n\n\n.. toctree::\n   :maxdepth: 3\n\n  \n   baichuan-2\n  \n   baichuan-2-chat\n  \n   baichuan-m2\n  \n   code-llama\n  \n   code-llama-instruct\n  \n   code-llama-python\n  \n   codegeex4\n  \n   codeqwen1.5\n  \n   codeqwen1.5-chat\n  \n   codeshell\n  \n   codeshell-chat\n  \n   codestral-v0.1\n  \n   cogagent\n  \n   deepseek\n  \n   deepseek-chat\n  \n   deepseek-coder\n  \n   deepseek-coder-instruct\n  \n   deepseek-prover-v2\n  \n   deepseek-r1\n  \n   deepseek-r1-0528\n  \n   deepseek-r1-0528-qwen3\n  \n   deepseek-r1-distill-llama\n  \n   deepseek-r1-distill-qwen\n  \n   deepseek-v2-chat\n  \n   deepseek-v2-chat-0628\n  \n   deepseek-v2.5\n  \n   deepseek-v3\n  \n   deepseek-v3-0324\n  \n   deepseek-v3.1\n  \n   deepseek-v3.2\n  \n   deepseek-v3.2-exp\n  \n   deepseek-vl2\n  \n   dianjin-r1\n  \n   ernie4.5\n  \n   fin-r1\n  \n   gemma-3-1b-it\n  \n   gemma-3-it\n  \n   glm-4.1v-thinking\n  \n   glm-4.5\n  \n   glm-4.5v\n  \n   glm-4.6\n  \n   glm-4.7\n  \n   glm-4.7-flash\n  \n   glm-4v\n  \n   glm-5\n  \n   glm-edge-chat\n  \n   glm4-0414\n  \n   glm4-chat\n  \n   glm4-chat-1m\n  \n   gorilla-openfunctions-v2\n  \n   gpt-2\n  \n   gpt-oss\n  \n   huatuogpt-o1-llama-3.1\n  \n   huatuogpt-o1-qwen2.5\n  \n   internlm3-instruct\n  \n   internvl3\n  \n   kat-v1\n  \n   kimi-k2.5\n  \n   llama-2\n  \n   llama-2-chat\n  \n   llama-3\n  \n   llama-3-instruct\n  \n   llama-3.1\n  \n   llama-3.1-instruct\n  \n   llama-3.2-vision\n  \n   llama-3.2-vision-instruct\n  \n   llama-3.3-instruct\n  \n   marco-o1\n  \n   mineru2.5-2509-1.2b\n  \n   minicpm-2b-dpo-bf16\n  \n   minicpm-2b-dpo-fp16\n  \n   minicpm-2b-dpo-fp32\n  \n   minicpm-2b-sft-bf16\n  \n   minicpm-2b-sft-fp32\n  \n   minicpm-v-2.6\n  \n   minicpm-v-4.5\n  \n   minicpm3-4b\n  \n   minicpm4\n  \n   minimax-m2\n  \n   minimax-m2.5\n  \n   mistral-instruct-v0.1\n  \n   mistral-instruct-v0.2\n  \n   mistral-instruct-v0.3\n  \n   mistral-large-instruct\n  \n   mistral-nemo-instruct\n  \n   mistral-v0.1\n  \n   mixtral-8x22b-instruct-v0.1\n  \n   mixtral-instruct-v0.1\n  \n   mixtral-v0.1\n  \n   moonlight-16b-a3b-instruct\n  \n   openhermes-2.5\n  \n   opt\n  \n   orion-chat\n  \n   ovis2\n  \n   phi-2\n  \n   phi-3-mini-128k-instruct\n  \n   phi-3-mini-4k-instruct\n  \n   qvq-72b-preview\n  \n   qwen-chat\n  \n   qwen1.5-chat\n  \n   qwen1.5-moe-chat\n  \n   qwen2-audio-instruct\n  \n   qwen2-instruct\n  \n   qwen2-moe-instruct\n  \n   qwen2-vl-instruct\n  \n   qwen2.5\n  \n   qwen2.5-coder\n  \n   qwen2.5-coder-instruct\n  \n   qwen2.5-instruct\n  \n   qwen2.5-instruct-1m\n  \n   qwen2.5-omni\n  \n   qwen2.5-vl-instruct\n  \n   qwen3\n  \n   qwen3-coder\n  \n   qwen3-instruct\n  \n   qwen3-next-instruct\n  \n   qwen3-next-thinking\n  \n   qwen3-omni-instruct\n  \n   qwen3-omni-thinking\n  \n   qwen3-thinking\n  \n   qwen3-vl-instruct\n  \n   qwen3-vl-thinking\n  \n   qwen3.5\n  \n   qwenlong-l1\n  \n   qwq-32b\n  \n   qwq-32b-preview\n  \n   seallm_v2\n  \n   seallm_v2.5\n  \n   seallms-v3\n  \n   seed-oss\n  \n   skywork\n  \n   skywork-math\n  \n   skywork-or1\n  \n   skywork-or1-preview\n  \n   telechat\n  \n   tiny-llama\n  \n   wizardcoder-python-v1.0\n  \n   wizardmath-v1.0\n  \n   xiyansql-qwencoder-2504\n  \n   xverse\n  \n   xverse-chat\n  \n   yi\n  \n   yi-1.5\n  \n   yi-1.5-chat\n  \n   yi-1.5-chat-16k\n  \n   yi-200k\n  \n   yi-chat\n  \n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/internlm3-instruct.rst",
    "content": ".. _models_llm_internlm3-instruct:\n\n========================================\ninternlm3-instruct\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** internlm3-instruct\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** InternLM3 has open-sourced an 8-billion parameter instruction model, InternLM3-8B-Instruct, designed for general-purpose usage and advanced reasoning.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** internlm/internlm3-8b-instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/internlm/internlm3-8b-instruct>`__, `ModelScope <https://modelscope.cn/models/Shanghai_AI_Laboratory/internlm3-8b-instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name internlm3-instruct --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** internlm/internlm3-8b-instruct-gptq-int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/internlm/internlm3-8b-instruct-gptq-int4>`__, `ModelScope <https://modelscope.cn/models/Shanghai_AI_Laboratory/internlm3-8b-instruct-gptq-int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name internlm3-instruct --size-in-billions 8 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (awq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** internlm/internlm3-8b-instruct-awq\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/internlm/internlm3-8b-instruct-awq>`__, `ModelScope <https://modelscope.cn/models/Shanghai_AI_Laboratory/internlm3-8b-instruct-awq>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name internlm3-instruct --size-in-billions 8 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 8\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** internlm/internlm3-8b-instruct-gguf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/internlm/internlm3-8b-instruct-gguf>`__, `ModelScope <https://modelscope.cn/models/Shanghai_AI_Laboratory/internlm3-8b-instruct-gguf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name internlm3-instruct --size-in-billions 8 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/internlm3-8b-instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/internlm3-8b-instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/internlm3-8b-instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name internlm3-instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/internvl3.rst",
    "content": ".. _models_llm_internvl3:\n\n========================================\nInternVL3\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** InternVL3\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** InternVL3, an advanced multimodal large language model (MLLM) series that demonstrates superior overall performance.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-1B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-1B>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-1B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 1 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 1 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 1\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-1B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-1B-AWQ>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-1B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 1 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-2B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-2B>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-2B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (awq, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 2\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-2B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-2B-AWQ>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-2B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 2 --model-format awq --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-8B>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 6 (awq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-8B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-8B-AWQ>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-8B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 8 --model-format awq --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-9B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-9B>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-9B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 8 (awq, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 9\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-9B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-9B-AWQ>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-9B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 9 --model-format awq --quantization ${quantization}\n\n\nModel Spec 9 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-14B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-14B>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-14B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 10 (awq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-14B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-14B-AWQ>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-14B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 14 --model-format awq --quantization ${quantization}\n\n\nModel Spec 11 (pytorch, 38 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 38\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-38B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-38B>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-38B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 38 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 12 (awq, 38 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 38\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-38B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-38B-AWQ>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-38B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 38 --model-format awq --quantization ${quantization}\n\n\nModel Spec 13 (pytorch, 78 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 78\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-78B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-78B>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-78B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 78 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 14 (awq, 78 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 78\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, LMDEPLOY\n- **Model ID:** OpenGVLab/InternVL3-78B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OpenGVLab/InternVL3-78B-AWQ>`__, `ModelScope <https://modelscope.cn/models/OpenGVLab/InternVL3-78B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name InternVL3 --size-in-billions 78 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/kat-v1.rst",
    "content": ".. _models_llm_kat-v1:\n\n========================================\nKAT-V1\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** KAT-V1\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** Kwaipilot-AutoThink ranks first among all open-source models on LiveCodeBench Pro, a challenging benchmark explicitly designed to prevent data leakage, and even surpasses strong proprietary systems such as Seed and o3-mini.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 40 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 40\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Kwaipilot/KAT-V1-40B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Kwaipilot/KAT-V1-40B>`__, `ModelScope <https://modelscope.cn/models/Kwaipilot/KAT-V1-40B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name KAT-V1 --size-in-billions 40 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 40 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 40\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** QuantTrio/KAT-V1-40B-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/KAT-V1-40B-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/KAT-V1-40B-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name KAT-V1 --size-in-billions 40 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (awq, 40 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 40\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** QuantTrio/KAT-V1-40B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/KAT-V1-40B-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/KAT-V1-40B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name KAT-V1 --size-in-billions 40 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/kimi-k2.5.rst",
    "content": ".. _models_llm_kimi-k2.5:\n\n========================================\nKimi-K2.5\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Kimi-K2.5\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** Kimi K2.5 is an open-source, native multimodal agentic model built through continual pretraining on approximately 15 trillion mixed visual and text tokens atop Kimi-K2-Base. It seamlessly integrates vision and language understanding with advanced agentic capabilities, instant and thinking modes, as well as conversational and agentic paradigms.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1058_59 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1058_59\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** moonshotai/Kimi-K2.5\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/moonshotai/Kimi-K2.5>`__, `ModelScope <https://modelscope.cn/models/moonshotai/Kimi-K2.5>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Kimi-K2.5 --size-in-billions 1058_59 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 1058_59 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1058_59\n- **Quantizations:** none\n- **Engines**: llama.cpp\n- **Model ID:** unsloth/Kimi-K2.5-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Kimi-K2.5-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Kimi-K2.5-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Kimi-K2.5 --size-in-billions 1058_59 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 1058_59 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 1058_59\n- **Quantizations:** 3bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Kimi-K2.5-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Kimi-K2.5-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Kimi-K2.5-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Kimi-K2.5 --size-in-billions 1058_59 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/llama-2-chat.rst",
    "content": ".. _models_llm_llama-2-chat:\n\n========================================\nllama-2-chat\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** llama-2-chat\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** Llama-2-Chat is a fine-tuned version of the Llama-2 LLM, specializing in chatting.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Llama-2-7b-chat-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2-7b-chat-hf>`__, `ModelScope <https://modelscope.cn/models/modelscope/Llama-2-7b-chat-ms>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Llama-2-13b-chat-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2-13b-chat-hf>`__, `ModelScope <https://modelscope.cn/models/modelscope/Llama-2-13b-chat-ms>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Llama-2-70b-chat-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2-70b-chat-hf>`__, `ModelScope <https://modelscope.cn/models/modelscope/Llama-2-70b-chat-ms>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/Llama-2-7B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/Llama-2-7b-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 13\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/Llama-2-13B-chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-13B-chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/Llama-2-13b-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 13 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 70\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/Llama-2-70B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-70B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 70 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-7B-Chat-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-7B-Chat-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-70B-Chat-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-70B-Chat-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 70 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (awq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-70B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-70B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 70 --model-format awq --quantization ${quantization}\n\n\nModel Spec 10 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-7B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-7B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 11 (gptq, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 13\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-13B-chat-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-13B-chat-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 13 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 12 (awq, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 13\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-13B-chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-13B-chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2-chat --size-in-billions 13 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/llama-2.rst",
    "content": ".. _models_llm_llama-2:\n\n========================================\nllama-2\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** llama-2\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** Llama-2 is the second generation of Llama, open-source and trained on a larger amount of data.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/Llama-2-7B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-7B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-7B-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-7B-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-7B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-7B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 13\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/Llama-2-13B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-13B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 13 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 70\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/Llama-2-70B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-70B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 70 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Llama-2-7b-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2-7b-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Llama-2-13b-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2-13b-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 13\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-13B-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-13B-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 13 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (awq, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 13\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-13B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-13B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 13 --model-format awq --quantization ${quantization}\n\n\nModel Spec 10 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Llama-2-70b-hf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-2-70b-hf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 11 (gptq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-70B-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-70B-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 70 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 12 (awq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Llama-2-70B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Llama-2-70B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-2 --size-in-billions 70 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/llama-3-instruct.rst",
    "content": ".. _models_llm_llama-3-instruct:\n\n========================================\nllama-3-instruct\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** llama-3-instruct\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** The Llama 3 instruction tuned models are optimized for dialogue use cases and outperform many of the available open source chat models on common industry benchmarks..\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3-8B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3-70B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3-70B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 8\n- **Quantizations:** IQ3_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** lmstudio-community/Meta-Llama-3-8B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/lmstudio-community/Meta-Llama-3-8B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 8 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 70\n- **Quantizations:** IQ1_M, IQ2_XS, Q4_K_M\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** lmstudio-community/Meta-Llama-3-70B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/lmstudio-community/Meta-Llama-3-70B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 70 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3-8B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3-8B-Instruct-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 6 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3-8B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3-8B-Instruct-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 7 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3-8B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3-8B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 8 (mlx, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 70\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3-70B-Instruct-4bit-mlx\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3-70B-Instruct-4bit-mlx>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 70 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 9 (mlx, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 70\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3-70B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3-70B-Instruct-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 70 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 10 (mlx, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3-70B-Instruct-mlx-unquantized\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3-70B-Instruct-mlx-unquantized>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 70 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 11 (gptq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TechxGenus/Meta-Llama-3-8B-Instruct-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TechxGenus/Meta-Llama-3-8B-Instruct-GPTQ>`__, `ModelScope <https://modelscope.cn/models/swift/Meta-Llama-3-8B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 8 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 12 (gptq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TechxGenus/Meta-Llama-3-70B-Instruct-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TechxGenus/Meta-Llama-3-70B-Instruct-GPTQ>`__, `ModelScope <https://modelscope.cn/models/swift/Meta-Llama-3-70B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3-instruct --size-in-billions 70 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/llama-3.1-instruct.rst",
    "content": ".. _models_llm_llama-3.1-instruct:\n\n========================================\nllama-3.1-instruct\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** llama-3.1-instruct\n- **Languages:** en, de, fr, it, pt, hi, es, th\n- **Abilities:** chat, tools\n- **Description:** The Llama 3.1 instruction tuned models are optimized for dialogue use cases and outperform many of the available open source chat models on common industry benchmarks..\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3.1-8B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-8B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-8B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** hugging-quants/Meta-Llama-3.1-8B-Instruct-GPTQ-INT4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/hugging-quants/Meta-Llama-3.1-8B-Instruct-GPTQ-INT4>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-8B-Instruct-GPTQ-INT4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 8 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (awq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-8B-Instruct-AWQ-INT4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 8 --model-format awq --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3.1-70B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3.1-70B-Instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-70B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** unsloth/Meta-Llama-3.1-70B-Instruct-bnb-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Meta-Llama-3.1-70B-Instruct-bnb-4bit>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-70B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** hugging-quants/Meta-Llama-3.1-70B-Instruct-GPTQ-INT4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/hugging-quants/Meta-Llama-3.1-70B-Instruct-GPTQ-INT4>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-70B-Instruct-GPTQ-INT4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 70 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (awq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** hugging-quants/Meta-Llama-3.1-70B-Instruct-AWQ-INT4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/hugging-quants/Meta-Llama-3.1-70B-Instruct-AWQ-INT4>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-70B-Instruct-AWQ-INT4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 70 --model-format awq --quantization ${quantization}\n\n\nModel Spec 9 (pytorch, 405 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 405\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3.1-405B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-405B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 405 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 10 (gptq, 405 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 405\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** hugging-quants/Meta-Llama-3.1-405B-Instruct-GPTQ-INT4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/hugging-quants/Meta-Llama-3.1-405B-Instruct-GPTQ-INT4>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-405B-Instruct-GPTQ-INT4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 405 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 11 (awq, 405 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 405\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** hugging-quants/Meta-Llama-3.1-405B-Instruct-AWQ-INT4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/hugging-quants/Meta-Llama-3.1-405B-Instruct-AWQ-INT4>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-405B-Instruct-AWQ-INT4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 405 --model-format awq --quantization ${quantization}\n\n\nModel Spec 12 (ggufv2, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 8\n- **Quantizations:** Q3_K_L, IQ4_XS, Q4_K_M, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-8B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 8 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 13 (ggufv2, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 70\n- **Quantizations:** IQ2_M, IQ4_XS, Q2_K, Q3_K_S, Q4_K_M, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** lmstudio-community/Meta-Llama-3.1-70B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/lmstudio-community/Meta-Llama-3.1-70B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 70 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 14 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3.1-8B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3.1-8B-Instruct-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 15 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3.1-8B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3.1-8B-Instruct-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 16 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3.1-8B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3.1-8B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 17 (mlx, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 70\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3.1-70B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3.1-70B-Instruct-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 70 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 18 (mlx, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 70\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3.1-70B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3.1-70B-Instruct-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 70 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 19 (mlx, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Meta-Llama-3.1-70B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Meta-Llama-3.1-70B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1-instruct --size-in-billions 70 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/llama-3.1.rst",
    "content": ".. _models_llm_llama-3.1:\n\n========================================\nllama-3.1\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** llama-3.1\n- **Languages:** en, de, fr, it, pt, hi, es, th\n- **Abilities:** generate\n- **Description:** Llama 3.1 is an auto-regressive language model that uses an optimized transformer architecture\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3.1-8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3.1-8B>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 8\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** QuantFactory/Meta-Llama-3.1-8B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantFactory/Meta-Llama-3.1-8B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1 --size-in-billions 8 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3.1-70B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3.1-70B>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-70B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1 --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 405 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 405\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3.1-405B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3.1-405B>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-405B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.1 --size-in-billions 405 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/llama-3.2-vision-instruct.rst",
    "content": ".. _models_llm_llama-3.2-vision-instruct:\n\n========================================\nllama-3.2-vision-instruct\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** llama-3.2-vision-instruct\n- **Languages:** en, de, fr, it, pt, hi, es, th\n- **Abilities:** chat, vision\n- **Description:** Llama 3.2-Vision instruction-tuned models are optimized for visual recognition, image reasoning, captioning, and answering general questions about an image...\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 11 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 11\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Llama-3.2-11B-Vision-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-3.2-11B-Vision-Instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Llama-3.2-11B-Vision-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.2-vision-instruct --size-in-billions 11 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 90 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 90\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Llama-3.2-90B-Vision-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-3.2-90B-Vision-Instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Llama-3.2-90B-Vision-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.2-vision-instruct --size-in-billions 90 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/llama-3.2-vision.rst",
    "content": ".. _models_llm_llama-3.2-vision:\n\n========================================\nllama-3.2-vision\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** llama-3.2-vision\n- **Languages:** en, de, fr, it, pt, hi, es, th\n- **Abilities:** generate, vision\n- **Description:** The Llama 3.2-Vision instruction-tuned models are optimized for visual recognition, image reasoning, captioning, and answering general questions about an image...\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 11 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 11\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3.2-11B-Vision\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3.2-11B-Vision>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Llama-3.2-11B-Vision>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.2-vision --size-in-billions 11 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 90 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 90\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3.2-90B-Vision\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3.2-90B-Vision>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Llama-3.2-90B-Vision>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.2-vision --size-in-billions 90 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/llama-3.3-instruct.rst",
    "content": ".. _models_llm_llama-3.3-instruct:\n\n========================================\nllama-3.3-instruct\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** llama-3.3-instruct\n- **Languages:** en, de, fr, it, pt, hi, es, th\n- **Abilities:** chat, tools\n- **Description:** The Llama 3.3 instruction tuned models are optimized for dialogue use cases and outperform many of the available open source chat models on common industry benchmarks..\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Llama-3.3-70B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Llama-3.3-70B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.3-instruct --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** shuyuej/Llama-3.3-70B-Instruct-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/shuyuej/Llama-3.3-70B-Instruct-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.3-instruct --size-in-billions 70 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (awq, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 70\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** casperhansen/llama-3.3-70b-instruct-awq\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/casperhansen/llama-3.3-70b-instruct-awq>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.3-instruct --size-in-billions 70 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 70\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, fp16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Llama-3.3-70B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Llama-3.3-70B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.3-instruct --size-in-billions 70 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 70\n- **Quantizations:** Q3_K_L, Q4_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** lmstudio-community/Llama-3.3-70B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/lmstudio-community/Llama-3.3-70B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/lmstudio-community/Llama-3.3-70B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3.3-instruct --size-in-billions 70 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/llama-3.rst",
    "content": ".. _models_llm_llama-3:\n\n========================================\nllama-3\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** llama-3\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** Llama 3 is an auto-regressive language model that uses an optimized transformer architecture\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3-8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3-8B>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 8\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** QuantFactory/Meta-Llama-3-8B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantFactory/Meta-Llama-3-8B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3 --size-in-billions 8 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** meta-llama/Meta-Llama-3-70B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/meta-llama/Meta-Llama-3-70B>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Meta-Llama-3-70B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3 --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 70\n- **Quantizations:** Q4_K_M, Q5_K_M\n- **Engines**: llama.cpp\n- **Model ID:** NousResearch/Meta-Llama-3-70B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/NousResearch/Meta-Llama-3-70B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name llama-3 --size-in-billions 70 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/marco-o1.rst",
    "content": ".. _models_llm_marco-o1:\n\n========================================\nmarco-o1\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** marco-o1\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** Marco-o1: Towards Open Reasoning Models for Open-Ended Solutions\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** AIDC-AI/Marco-o1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Marco-o1>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Marco-o1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name marco-o1 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** QuantFactory/Marco-o1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantFactory/Marco-o1-GGUF>`__, `ModelScope <https://modelscope.cn/models/QuantFactory/Marco-o1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name marco-o1 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mineru2.5-2509-1.2b.rst",
    "content": ".. _models_llm_mineru2.5-2509-1.2b:\n\n========================================\nMinerU2.5-2509-1.2B\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** MinerU2.5-2509-1.2B\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** MinerU2.5-2509-1.2B is a vision language model for document understanding.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1_2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** opendatalab/MinerU2.5-2509-1.2B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/opendatalab/MinerU2.5-2509-1.2B>`__, `ModelScope <https://modelscope.cn/models/opendatalab/MinerU2.5-2509-1.2B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MinerU2.5-2509-1.2B --size-in-billions 1_2 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minicpm-2b-dpo-bf16.rst",
    "content": ".. _models_llm_minicpm-2b-dpo-bf16:\n\n========================================\nminicpm-2b-dpo-bf16\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** minicpm-2b-dpo-bf16\n- **Languages:** zh\n- **Abilities:** chat\n- **Description:** MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** openbmb/MiniCPM-2B-dpo-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM-2B-dpo-bf16>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM-2B-dpo-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm-2b-dpo-bf16 --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minicpm-2b-dpo-fp16.rst",
    "content": ".. _models_llm_minicpm-2b-dpo-fp16:\n\n========================================\nminicpm-2b-dpo-fp16\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** minicpm-2b-dpo-fp16\n- **Languages:** zh\n- **Abilities:** chat\n- **Description:** MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** openbmb/MiniCPM-2B-dpo-fp16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM-2B-dpo-fp16>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM-2B-dpo-fp16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm-2b-dpo-fp16 --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minicpm-2b-dpo-fp32.rst",
    "content": ".. _models_llm_minicpm-2b-dpo-fp32:\n\n========================================\nminicpm-2b-dpo-fp32\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** minicpm-2b-dpo-fp32\n- **Languages:** zh\n- **Abilities:** chat\n- **Description:** MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** openbmb/MiniCPM-2B-dpo-fp32\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM-2B-dpo-fp32>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM-2B-dpo-fp32>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm-2b-dpo-fp32 --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minicpm-2b-sft-bf16.rst",
    "content": ".. _models_llm_minicpm-2b-sft-bf16:\n\n========================================\nminicpm-2b-sft-bf16\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** minicpm-2b-sft-bf16\n- **Languages:** zh\n- **Abilities:** chat\n- **Description:** MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** openbmb/MiniCPM-2B-sft-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM-2B-sft-bf16>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/miniCPM-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm-2b-sft-bf16 --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minicpm-2b-sft-fp32.rst",
    "content": ".. _models_llm_minicpm-2b-sft-fp32:\n\n========================================\nminicpm-2b-sft-fp32\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** minicpm-2b-sft-fp32\n- **Languages:** zh\n- **Abilities:** chat\n- **Description:** MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** openbmb/MiniCPM-2B-sft-fp32\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM-2B-sft-fp32>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM-2B-sft-fp32>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm-2b-sft-fp32 --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minicpm-v-2.6.rst",
    "content": ".. _models_llm_minicpm-v-2.6:\n\n========================================\nMiniCPM-V-2.6\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** MiniCPM-V-2.6\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** MiniCPM-V 2.6 is the latest model in the MiniCPM-V series. The model is built on SigLip-400M and Qwen2-7B with a total of 8B parameters.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** openbmb/MiniCPM-V-2_6\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM-V-2_6>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM-V-2_6>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniCPM-V-2.6 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** openbmb/MiniCPM-V-2_6-int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM-V-2_6-int4>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM-V-2_6>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniCPM-V-2.6 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minicpm-v-4.5.rst",
    "content": ".. _models_llm_minicpm-v-4.5:\n\n========================================\nMiniCPM-V-4.5\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** MiniCPM-V-4.5\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** MiniCPM-V 4.5 is an improved version in the MiniCPM-V series with enhanced multimodal capabilities and better performance.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** openbmb/MiniCPM-V-4_5\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM-V-4_5>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM-V-4_5>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniCPM-V-4.5 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** openbmb/MiniCPM-V-4_5-int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM-V-4_5-int4>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM-V-4_5-int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniCPM-V-4.5 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minicpm3-4b.rst",
    "content": ".. _models_llm_minicpm3-4b:\n\n========================================\nminicpm3-4b\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** minicpm3-4b\n- **Languages:** zh\n- **Abilities:** chat\n- **Description:** MiniCPM3-4B is the 3rd generation of MiniCPM series. The overall performance of MiniCPM3-4B surpasses Phi-3.5-mini-Instruct and GPT-3.5-Turbo-0125, being comparable with many recent 7B~9B models.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** openbmb/MiniCPM3-4B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM3-4B>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM3-4B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm3-4b --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** openbmb/MiniCPM3-4B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/openbmb/MiniCPM3-4B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/OpenBMB/MiniCPM3-4B-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm3-4b --size-in-billions 4 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minicpm4.rst",
    "content": ".. _models_llm_minicpm4:\n\n========================================\nminicpm4\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** minicpm4\n- **Languages:** zh\n- **Abilities:** chat\n- **Description:** MiniCPM4 series are highly efficient large language models (LLMs) designed explicitly for end-side devices, which achieves this efficiency through systematic innovation in four key dimensions: model architecture, training data, training algorithms, and inference systems.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** JunHowie/MiniCPM4-0.5B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/MiniCPM4-0.5B>`__, `ModelScope <https://modelscope.cn/models/JunHowie/MiniCPM4-0.5B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm4 --size-in-billions 0_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** JunHowie/MiniCPM4-8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/MiniCPM4-8B>`__, `ModelScope <https://modelscope.cn/models/JunHowie/MiniCPM4-8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm4 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/MiniCPM4-8B-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/MiniCPM4-8B-4bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/MiniCPM4-8B-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name minicpm4 --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minimax-m2.5.rst",
    "content": ".. _models_llm_minimax-m2.5:\n\n========================================\nMiniMax-M2.5\n========================================\n\n- **Context Length:** 196608\n- **Model Name:** MiniMax-M2.5\n- **Languages:** en, zh\n- **Abilities:** chat, tools, reasoning\n- **Description:** MiniMax-M2.5, a Mini model built for Max coding & agentic workflows.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 230 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 230\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** MiniMaxAI/MiniMax-M2.5\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/MiniMaxAI/MiniMax-M2.5>`__, `ModelScope <https://modelscope.cn/models/MiniMax/MiniMax-M2.5>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniMax-M2.5 --size-in-billions 230 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 230 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 230\n- **Quantizations:** UD-TQ1_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/MiniMax-M2.5-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/MiniMax-M2.5-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/MiniMax-M2.5-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniMax-M2.5 --size-in-billions 230 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 230 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 230\n- **Quantizations:** 3bit, 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/MiniMax-M2.5-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/MiniMax-M2.5-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/MiniMax-M2.5-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniMax-M2.5 --size-in-billions 230 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/minimax-m2.rst",
    "content": ".. _models_llm_minimax-m2:\n\n========================================\nMiniMax-M2\n========================================\n\n- **Context Length:** 196608\n- **Model Name:** MiniMax-M2\n- **Languages:** en, zh\n- **Abilities:** chat, tools, reasoning\n- **Description:** MiniMax-M2, a Mini model built for Max coding & agentic workflows.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 230 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 230\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** MiniMaxAI/MiniMax-M2\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/MiniMaxAI/MiniMax-M2>`__, `ModelScope <https://modelscope.cn/models/MiniMax/MiniMax-M2>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniMax-M2 --size-in-billions 230 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 230 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 230\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/MiniMax-M2-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/MiniMax-M2-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/MiniMax-M2-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniMax-M2 --size-in-billions 230 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 230 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 230\n- **Quantizations:** 3bit, 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/MiniMax-M2-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/MiniMax-M2-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/MiniMax-M2-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name MiniMax-M2 --size-in-billions 230 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mistral-instruct-v0.1.rst",
    "content": ".. _models_llm_mistral-instruct-v0.1:\n\n========================================\nmistral-instruct-v0.1\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** mistral-instruct-v0.1\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** Mistral-7B-Instruct is a fine-tuned version of the Mistral-7B LLM on public datasets, specializing in chatting.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** mistralai/Mistral-7B-Instruct-v0.1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.1>`__, `ModelScope <https://modelscope.cn/models/Xorbits/Mistral-7B-Instruct-v0.1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.1 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Mistral-7B-Instruct-v0.1-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.1 --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Mistral-7B-Instruct-v0.1-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.1 --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/Mistral-7B-Instruct-v0.1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.1 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mistral-instruct-v0.2.rst",
    "content": ".. _models_llm_mistral-instruct-v0.2:\n\n========================================\nmistral-instruct-v0.2\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** mistral-instruct-v0.2\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) is an improved instruct fine-tuned version of Mistral-7B-Instruct-v0.1.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** mistralai/Mistral-7B-Instruct-v0.2\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Mistral-7B-Instruct-v0.2>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.2 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Mistral-7B-Instruct-v0.2-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.2 --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Mistral-7B-Instruct-v0.2-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.2 --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/Mistral-7B-Instruct-v0.2-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/Mistral-7B-Instruct-v0.2-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.2 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mistral-instruct-v0.3.rst",
    "content": ".. _models_llm_mistral-instruct-v0.3:\n\n========================================\nmistral-instruct-v0.3\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** mistral-instruct-v0.3\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) is an improved instruct fine-tuned version of Mistral-7B-Instruct-v0.1.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** mistralai/Mistral-7B-Instruct-v0.3\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.3 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** neuralmagic/Mistral-7B-Instruct-v0.3-GPTQ-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/neuralmagic/Mistral-7B-Instruct-v0.3-GPTQ-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.3 --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** solidrust/Mistral-7B-Instruct-v0.3-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/solidrust/Mistral-7B-Instruct-v0.3-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.3 --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_K_S, Q4_K_M, Q5_K_S, Q5_K_M, Q6_K, Q8_0, fp16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** MaziyarPanahi/Mistral-7B-Instruct-v0.3-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/MaziyarPanahi/Mistral-7B-Instruct-v0.3-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-instruct-v0.3 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mistral-large-instruct.rst",
    "content": ".. _models_llm_mistral-large-instruct:\n\n========================================\nmistral-large-instruct\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** mistral-large-instruct\n- **Languages:** en, fr, de, es, it, pt, zh, ru, ja, ko\n- **Abilities:** chat\n- **Description:** Mistral-Large-Instruct-2407 is an advanced dense Large Language Model (LLM) of 123B parameters with state-of-the-art reasoning, knowledge and coding capabilities.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 123 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 123\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** mistralai/Mistral-Large-Instruct-2407\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mistral-Large-Instruct-2407>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Mistral-Large-Instruct-2407>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-large-instruct --size-in-billions 123 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 123 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 123\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** unsloth/Mistral-Large-Instruct-2407-bnb-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Mistral-Large-Instruct-2407-bnb-4bit>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Mistral-Large-Instruct-2407>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-large-instruct --size-in-billions 123 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 123 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 123\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** ModelCloud/Mistral-Large-Instruct-2407-gptq-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/ModelCloud/Mistral-Large-Instruct-2407-gptq-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-large-instruct --size-in-billions 123 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (awq, 123 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 123\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TechxGenus/Mistral-Large-Instruct-2407-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TechxGenus/Mistral-Large-Instruct-2407-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-large-instruct --size-in-billions 123 --model-format awq --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 123 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 123\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_K_S, Q4_K_M\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** MaziyarPanahi/Mistral-Large-Instruct-2407-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/MaziyarPanahi/Mistral-Large-Instruct-2407-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-large-instruct --size-in-billions 123 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (mlx, 123 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 123\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Mistral-Large-Instruct-2407-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Mistral-Large-Instruct-2407-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-large-instruct --size-in-billions 123 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 7 (mlx, 123 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 123\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Mistral-Large-Instruct-2407-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Mistral-Large-Instruct-2407-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-large-instruct --size-in-billions 123 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 8 (mlx, 123 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 123\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Mistral-Large-Instruct-2407-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Mistral-Large-Instruct-2407-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-large-instruct --size-in-billions 123 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mistral-nemo-instruct.rst",
    "content": ".. _models_llm_mistral-nemo-instruct:\n\n========================================\nmistral-nemo-instruct\n========================================\n\n- **Context Length:** 1024000\n- **Model Name:** mistral-nemo-instruct\n- **Languages:** en, fr, de, es, it, pt, zh, ru, ja\n- **Abilities:** chat\n- **Description:** The Mistral-Nemo-Instruct-2407 Large Language Model (LLM) is an instruct fine-tuned version of the Mistral-Nemo-Base-2407\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 12\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** mistralai/Mistral-Nemo-Instruct-2407\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Mistral-Nemo-Instruct-2407>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-nemo-instruct --size-in-billions 12 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 12\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** unsloth/Mistral-Nemo-Instruct-2407-bnb-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Mistral-Nemo-Instruct-2407-bnb-4bit>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Mistral-Nemo-Instruct-2407>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-nemo-instruct --size-in-billions 12 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 12\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** afrizalha/Mistral-Nemo-Instruct-2407-bnb-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/afrizalha/Mistral-Nemo-Instruct-2407-bnb-8bit>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Mistral-Nemo-Instruct-2407>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-nemo-instruct --size-in-billions 12 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (gptq, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 12\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** ModelCloud/Mistral-Nemo-Instruct-2407-gptq-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/ModelCloud/Mistral-Nemo-Instruct-2407-gptq-4bit>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Mistral-Nemo-Instruct-2407-gptq-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-nemo-instruct --size-in-billions 12 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 5 (awq, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 12\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** casperhansen/mistral-nemo-instruct-2407-awq\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/casperhansen/mistral-nemo-instruct-2407-awq>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-nemo-instruct --size-in-billions 12 --model-format awq --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 12\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_K_S, Q4_K_M, Q5_K_S, Q5_K_M, Q6_K, Q8_0, fp16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** MaziyarPanahi/Mistral-Nemo-Instruct-2407-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/MaziyarPanahi/Mistral-Nemo-Instruct-2407-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-nemo-instruct --size-in-billions 12 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 7 (mlx, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 12\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Mistral-Nemo-Instruct-2407-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Mistral-Nemo-Instruct-2407-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-nemo-instruct --size-in-billions 12 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 8 (mlx, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 12\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Mistral-Nemo-Instruct-2407-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Mistral-Nemo-Instruct-2407-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-nemo-instruct --size-in-billions 12 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 9 (mlx, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 12\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Mistral-Nemo-Instruct-2407-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Mistral-Nemo-Instruct-2407-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-nemo-instruct --size-in-billions 12 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mistral-v0.1.rst",
    "content": ".. _models_llm_mistral-v0.1:\n\n========================================\nmistral-v0.1\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** mistral-v0.1\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** Mistral-7B is a unmoderated Transformer based LLM claiming to outperform Llama2 on all benchmarks.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** mistralai/Mistral-7B-v0.1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mistral-7B-v0.1>`__, `ModelScope <https://modelscope.cn/models/Xorbits/Mistral-7B-v0.1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-v0.1 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/Mistral-7B-v0.1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mistral-7B-v0.1-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/Mistral-7B-v0.1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mistral-v0.1 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mixtral-8x22b-instruct-v0.1.rst",
    "content": ".. _models_llm_mixtral-8x22b-instruct-v0.1:\n\n========================================\nmixtral-8x22B-instruct-v0.1\n========================================\n\n- **Context Length:** 65536\n- **Model Name:** mixtral-8x22B-instruct-v0.1\n- **Languages:** en, fr, it, de, es\n- **Abilities:** chat\n- **Description:** The Mixtral-8x22B-Instruct-v0.1 Large Language Model (LLM) is an instruct fine-tuned version of the Mixtral-8x22B-v0.1, specializing in chatting.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 141 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 141\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** mistralai/Mixtral-8x22B-Instruct-v0.1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mixtral-8x22B-Instruct-v0.1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-8x22B-instruct-v0.1 --size-in-billions 141 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 141 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 141\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** MaziyarPanahi/Mixtral-8x22B-Instruct-v0.1-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/MaziyarPanahi/Mixtral-8x22B-Instruct-v0.1-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-8x22B-instruct-v0.1 --size-in-billions 141 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 141 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 141\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** jarrelscy/Mixtral-8x22B-Instruct-v0.1-GPTQ-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/jarrelscy/Mixtral-8x22B-Instruct-v0.1-GPTQ-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-8x22B-instruct-v0.1 --size-in-billions 141 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 141 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 141\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6, Q8_0, fp16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** MaziyarPanahi/Mixtral-8x22B-Instruct-v0.1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/MaziyarPanahi/Mixtral-8x22B-Instruct-v0.1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-8x22B-instruct-v0.1 --size-in-billions 141 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mixtral-instruct-v0.1.rst",
    "content": ".. _models_llm_mixtral-instruct-v0.1:\n\n========================================\nmixtral-instruct-v0.1\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** mixtral-instruct-v0.1\n- **Languages:** en, fr, it, de, es\n- **Abilities:** chat\n- **Description:** Mistral-8x7B-Instruct is a fine-tuned version of the Mistral-8x7B LLM, specializing in chatting.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 46_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 46_7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** mistralai/Mixtral-8x7B-Instruct-v0.1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Mixtral-8x7B-Instruct-v0.1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-instruct-v0.1 --size-in-billions 46_7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 46_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 46_7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Mixtral-8x7B-Instruct-v0.1-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-instruct-v0.1 --size-in-billions 46_7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 46_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 46_7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** TheBloke/Mixtral-8x7B-Instruct-v0.1-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-instruct-v0.1 --size-in-billions 46_7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 46_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 46_7\n- **Quantizations:** Q2_K, Q3_K_M, Q4_0, Q4_K_M, Q5_0, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-instruct-v0.1 --size-in-billions 46_7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/mixtral-v0.1.rst",
    "content": ".. _models_llm_mixtral-v0.1:\n\n========================================\nmixtral-v0.1\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** mixtral-v0.1\n- **Languages:** en, fr, it, de, es\n- **Abilities:** generate\n- **Description:** The Mixtral-8x7B Large Language Model (LLM) is a pretrained generative Sparse Mixture of Experts.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 46_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 46_7\n- **Quantizations:** none\n- **Engines**: Transformers, SGLang\n- **Model ID:** mistralai/Mixtral-8x7B-v0.1\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mistralai/Mixtral-8x7B-v0.1>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Mixtral-8x7B-v0.1>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-v0.1 --size-in-billions 46_7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 46_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 46_7\n- **Quantizations:** Int4\n- **Engines**: Transformers, SGLang\n- **Model ID:** TheBloke/Mixtral-8x7B-v0.1-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-v0.1 --size-in-billions 46_7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 46_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 46_7\n- **Quantizations:** Q2_K, Q3_K_M, Q4_0, Q4_K_M, Q5_0, Q5_K_M, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/Mixtral-8x7B-v0.1-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name mixtral-v0.1 --size-in-billions 46_7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/moonlight-16b-a3b-instruct.rst",
    "content": ".. _models_llm_moonlight-16b-a3b-instruct:\n\n========================================\nmoonlight-16b-a3b-instruct\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** moonlight-16b-a3b-instruct\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** Kimi Muon is Scalable for LLM Training\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** moonshotai/Moonlight-16B-A3B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/moonshotai/Moonlight-16B-A3B-Instruct>`__, `ModelScope <https://modelscope.cn/models/moonshotai/Moonlight-16B-A3B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name moonlight-16b-a3b-instruct --size-in-billions 3 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/openhermes-2.5.rst",
    "content": ".. _models_llm_openhermes-2.5:\n\n========================================\nopenhermes-2.5\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** openhermes-2.5\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** Openhermes 2.5 is a fine-tuned version of Mistral-7B-v0.1 on primarily GPT-4 generated data.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** teknium/OpenHermes-2.5-Mistral-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/teknium/OpenHermes-2.5-Mistral-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name openhermes-2.5 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/OpenHermes-2.5-Mistral-7B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/OpenHermes-2.5-Mistral-7B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name openhermes-2.5 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/opt.rst",
    "content": ".. _models_llm_opt:\n\n========================================\nopt\n========================================\n\n- **Context Length:** 2048\n- **Model Name:** opt\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** Opt is an open-source, decoder-only, Transformer based LLM that was designed to replicate GPT-3.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1\n- **Quantizations:** none\n- **Engines**: Transformers, SGLang\n- **Model ID:** facebook/opt-125m\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/facebook/opt-125m>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name opt --size-in-billions 1 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/orion-chat.rst",
    "content": ".. _models_llm_orion-chat:\n\n========================================\norion-chat\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** orion-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** Orion-14B series models are open-source multilingual large language models trained from scratch by OrionStarAI.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** OrionStarAI/Orion-14B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OrionStarAI/Orion-14B-Chat>`__, `ModelScope <https://modelscope.cn/models/OrionStarAI/Orion-14B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name orion-chat --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** OrionStarAI/Orion-14B-Chat-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/OrionStarAI/Orion-14B-Chat-{quantization}>`__, `ModelScope <https://modelscope.cn/models/OrionStarAI/Orion-14B-Chat-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name orion-chat --size-in-billions 14 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/ovis2.rst",
    "content": ".. _models_llm_ovis2:\n\n========================================\nOvis2\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** Ovis2\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** Ovis (Open VISion) is a novel Multimodal Large Language Model (MLLM) architecture, designed to structurally align visual and textual embeddings.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-1B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-1B>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-1B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 1 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-2B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-2B>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-2B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-4B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-4B>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-4B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-8B>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 16 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 16\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-16B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-16B>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-16B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 16 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-34B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-34B>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-34B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 2\n- **Quantizations:** Int4\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-2B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-2B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-2B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 2 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-4B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-4B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-4B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 4 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-8B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-8B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-8B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 8 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (gptq, 16 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 16\n- **Quantizations:** Int4\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-16B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-16B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-16B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 16 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 11 (gptq, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 34\n- **Quantizations:** Int4, Int8\n- **Engines**: Transformers\n- **Model ID:** AIDC-AI/Ovis2-34B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/AIDC-AI/Ovis2-34B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/AIDC-AI/Ovis2-34B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Ovis2 --size-in-billions 34 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/phi-2.rst",
    "content": ".. _models_llm_phi-2:\n\n========================================\nphi-2\n========================================\n\n- **Context Length:** 2048\n- **Model Name:** phi-2\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** Phi-2 is a 2.7B Transformer based LLM used for research on model safety, trained with data similar to Phi-1.5 but augmented with synthetic texts and curated websites.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (ggufv2, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 2\n- **Quantizations:** Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, Q4_0, Q4_K_S, Q4_K_M, Q5_0, Q5_K_S, Q5_K_M, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/phi-2-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/phi-2-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name phi-2 --size-in-billions 2 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** microsoft/phi-2\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/microsoft/phi-2>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name phi-2 --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/phi-3-mini-128k-instruct.rst",
    "content": ".. _models_llm_phi-3-mini-128k-instruct:\n\n========================================\nphi-3-mini-128k-instruct\n========================================\n\n- **Context Length:** 128000\n- **Model Name:** phi-3-mini-128k-instruct\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** The Phi-3-Mini-128K-Instruct is a 3.8 billion-parameter, lightweight, state-of-the-art open model trained using the Phi-3 datasets.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** microsoft/Phi-3-mini-128k-instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/microsoft/Phi-3-mini-128k-instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Phi-3-mini-128k-instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name phi-3-mini-128k-instruct --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/phi-3-mini-4k-instruct.rst",
    "content": ".. _models_llm_phi-3-mini-4k-instruct:\n\n========================================\nphi-3-mini-4k-instruct\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** phi-3-mini-4k-instruct\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** The Phi-3-Mini-4k-Instruct is a 3.8 billion-parameter, lightweight, state-of-the-art open model trained using the Phi-3 datasets.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (ggufv2, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 4\n- **Quantizations:** fp16, q4\n- **Engines**: llama.cpp\n- **Model ID:** microsoft/Phi-3-mini-4k-instruct-gguf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-gguf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name phi-3-mini-4k-instruct --size-in-billions 4 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** microsoft/Phi-3-mini-4k-instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/microsoft/Phi-3-mini-4k-instruct>`__, `ModelScope <https://modelscope.cn/models/LLM-Research/Phi-3-mini-4k-instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name phi-3-mini-4k-instruct --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qvq-72b-preview.rst",
    "content": ".. _models_llm_qvq-72b-preview:\n\n========================================\nQvQ-72B-Preview\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** QvQ-72B-Preview\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** QVQ-72B-Preview is an experimental research model developed by the Qwen team, focusing on enhancing visual reasoning capabilities.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/QVQ-72B-Preview\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/QVQ-72B-Preview>`__, `ModelScope <https://modelscope.cn/models/Qwen/QVQ-72B-Preview>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QvQ-72B-Preview --size-in-billions 72 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (mlx, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 72\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/QVQ-72B-Preview-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/QVQ-72B-Preview-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/QVQ-72B-Preview-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QvQ-72B-Preview --size-in-billions 72 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen-chat.rst",
    "content": ".. _models_llm_qwen-chat:\n\n========================================\nqwen-chat\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** Qwen-chat is a fine-tuned version of the Qwen LLM trained with alignment techniques, specializing in chatting.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q4_K_M\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Xorbits/Qwen-7B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Xorbits/Qwen-7B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/Qwen-7B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 14\n- **Quantizations:** Q4_K_M\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Xorbits/Qwen-14B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Xorbits/Qwen-14B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/Qwen-14B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 14 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 1_8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen-1_8B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-1_8B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen-1_8B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 1_8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen-7B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-7B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen-7B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen-14B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-14B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen-14B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen-72B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-72B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen-72B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 72 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen-7B-Chat-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-7B-Chat-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen-7B-Chat-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 1_8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_8\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen-1_8B-Chat-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-1_8B-Chat-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen-1_8B-Chat-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 1_8 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen-14B-Chat-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-14B-Chat-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen-14B-Chat-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 14 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (gptq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen-72B-Chat-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen-72B-Chat-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen-72B-Chat-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen-chat --size-in-billions 72 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen1.5-chat.rst",
    "content": ".. _models_llm_qwen1.5-chat:\n\n========================================\nqwen1.5-chat\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen1.5-chat\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** Qwen1.5 is the beta version of Qwen2, a transformer-based decoder-only language model pretrained on a large amount of data.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-0.5B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-0.5B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 0_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 1_8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-1.8B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-1.8B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 1_8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-4B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-4B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-4B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-7B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-7B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-7B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-14B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-14B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-14B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-32B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-32B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-32B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-72B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-72B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-72B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 72 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 8 (pytorch, 110 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 110\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-110B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-110B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-110B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 110 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 0_5\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-0.5B-Chat-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-0.5B-Chat-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 0_5 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (gptq, 1_8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_8\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-1.8B-Chat-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-1.8B-Chat-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 1_8 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 11 (gptq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-4B-Chat-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-4B-Chat-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-4B-Chat-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 4 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 12 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-7B-Chat-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-7B-Chat-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-7B-Chat-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 13 (gptq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-14B-Chat-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-14B-Chat-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-14B-Chat-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 14 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 14 (gptq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-32B-Chat-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-32B-Chat-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-32B-Chat-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 32 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 15 (gptq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-72B-Chat-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-72B-Chat-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-72B-Chat-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 72 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 16 (gptq, 110 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 110\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-110B-Chat-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-110B-Chat-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-110B-Chat-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 110 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 17 (awq, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 0_5\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-0.5B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-0.5B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 0_5 --model-format awq --quantization ${quantization}\n\n\nModel Spec 18 (awq, 1_8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 1_8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-1.8B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-1.8B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 1_8 --model-format awq --quantization ${quantization}\n\n\nModel Spec 19 (awq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-4B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-4B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-4B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 4 --model-format awq --quantization ${quantization}\n\n\nModel Spec 20 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-7B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-7B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-7B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 21 (awq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-14B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-14B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-14B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 14 --model-format awq --quantization ${quantization}\n\n\nModel Spec 22 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-32B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-32B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-32B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n\nModel Spec 23 (awq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-72B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-72B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-72B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 72 --model-format awq --quantization ${quantization}\n\n\nModel Spec 24 (awq, 110 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 110\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-110B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-110B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-110B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 110 --model-format awq --quantization ${quantization}\n\n\nModel Spec 25 (ggufv2, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 0_5\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen1.5-0.5B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-0.5B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 0_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 26 (ggufv2, 1_8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_8\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen1.5-1.8B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-1.8B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 1_8 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 27 (ggufv2, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 4\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen1.5-4B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-4B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-4B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 4 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 28 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen1.5-7B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-7B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-7B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 29 (ggufv2, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 14\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen1.5-14B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-14B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-14B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 14 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 30 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen1.5-32B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-32B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-32B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 31 (ggufv2, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 72\n- **Quantizations:** q2_k, q3_k_m, q4_k_m\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen1.5-72B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-72B-Chat-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-72B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-chat --size-in-billions 72 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen1.5-moe-chat.rst",
    "content": ".. _models_llm_qwen1.5-moe-chat:\n\n========================================\nqwen1.5-moe-chat\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen1.5-moe-chat\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** Qwen1.5-MoE is a transformer-based MoE decoder-only language model pretrained on a large amount of data.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 2_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2_7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-MoE-A2.7B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-MoE-A2.7B-Chat>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-MoE-A2.7B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-moe-chat --size-in-billions 2_7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 2_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 2_7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen1.5-moe-chat --size-in-billions 2_7 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2-audio-instruct.rst",
    "content": ".. _models_llm_qwen2-audio-instruct:\n\n========================================\nqwen2-audio-instruct\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen2-audio-instruct\n- **Languages:** en, zh\n- **Abilities:** chat, audio\n- **Description:** Qwen2-Audio: A large-scale audio-language model which is capable of accepting various audio signal inputs and performing audio analysis or direct textual responses with regard to speech instructions.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-Audio-7B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-Audio-7B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-Audio-7B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-audio-instruct --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2-instruct.rst",
    "content": ".. _models_llm_qwen2-instruct:\n\n========================================\nqwen2-instruct\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen2-instruct\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** Qwen2 is the new series of Qwen large language models\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-0.5B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-0.5B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-0.5B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 0_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-1.5B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-1.5B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-1.5B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 1_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-7B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-7B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-7B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-72B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-72B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-72B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 72 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (gptq, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 0_5\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-0.5B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-0.5B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-0.5B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 0_5 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 6 (gptq, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-1.5B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-1.5B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-1.5B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 1_5 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-7B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-7B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-7B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-72B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-72B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-72B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 72 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (awq, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 0_5\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-0.5B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-0.5B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-0.5B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 0_5 --model-format awq --quantization ${quantization}\n\n\nModel Spec 10 (awq, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-1.5B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-1.5B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-1.5B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 1_5 --model-format awq --quantization ${quantization}\n\n\nModel Spec 11 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-7B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-7B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-7B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 12 (awq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-72B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-72B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-72B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 72 --model-format awq --quantization ${quantization}\n\n\nModel Spec 13 (fp8, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 0_5\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** neuralmagic/Qwen2-0.5B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/neuralmagic/Qwen2-0.5B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 0_5 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 14 (fp8, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 0_5\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** neuralmagic/Qwen2-0.5B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/neuralmagic/Qwen2-0.5B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 0_5 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 15 (fp8, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 1_5\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** neuralmagic/Qwen2-1.5B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/neuralmagic/Qwen2-1.5B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 1_5 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 16 (fp8, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 7\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** neuralmagic/Qwen2-7B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/neuralmagic/Qwen2-7B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/liuzhenghua/Qwen2-7B-FP8-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 7 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 17 (fp8, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 72\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** neuralmagic/Qwen2-72B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/neuralmagic/Qwen2-72B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/liuzhenghua/Qwen2-72B-FP8-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 72 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 18 (mlx, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 0_5\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** Qwen/Qwen2-0.5B-Instruct-MLX\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-0.5B-Instruct-MLX>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-0.5B-Instruct-MLX>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 0_5 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 19 (mlx, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 1_5\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** Qwen/Qwen2-1.5B-Instruct-MLX\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-1.5B-Instruct-MLX>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-1.5B-Instruct-MLX>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 1_5 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 20 (mlx, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 7\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** Qwen/Qwen2-7B-Instruct-MLX\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-7B-Instruct-MLX>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-7B-Instruct-MLX>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 7 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 21 (mlx, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 72\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2-72B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2-72B-Instruct-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 72 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 22 (ggufv2, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 0_5\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0, fp16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2-0.5B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-0.5B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-0.5B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 0_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 23 (ggufv2, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_5\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0, fp16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2-1.5B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-1.5B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-1.5B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 1_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 24 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0, fp16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2-7B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-7B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-7B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 25 (ggufv2, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 72\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0, fp16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2-72B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-72B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-72B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-instruct --size-in-billions 72 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2-moe-instruct.rst",
    "content": ".. _models_llm_qwen2-moe-instruct:\n\n========================================\nqwen2-moe-instruct\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen2-moe-instruct\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** Qwen2 is the new series of Qwen large language models. \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-57B-A14B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-57B-A14B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-moe-instruct --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2-57B-A14B-Instruct-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-57B-A14B-Instruct-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-moe-instruct --size-in-billions 14 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 14\n- **Quantizations:** q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0, fp16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2-57B-A14B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-57B-A14B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-moe-instruct --size-in-billions 14 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2-vl-instruct.rst",
    "content": ".. _models_llm_qwen2-vl-instruct:\n\n========================================\nqwen2-vl-instruct\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen2-vl-instruct\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** Qwen2-VL: To See the World More Clearly.Qwen2-VL is the latest version of the vision language models in the Qwen model familities.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-2B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-2B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-2B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 2\n- **Quantizations:** Int8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-2B-Instruct-GPTQ-Int8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-2B-Instruct-GPTQ-Int8>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-2B-Instruct-GPTQ-Int8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 2 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 2\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-2B-Instruct-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-2B-Instruct-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-2B-Instruct-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 2 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (awq, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 2\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-2B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-2B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-2B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 2 --model-format awq --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 2\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2-VL-2B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2-VL-2B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen2-VL-2B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 2 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-7B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-7B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-7B-Instruct-GPTQ-Int8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct-GPTQ-Int8>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-7B-Instruct-GPTQ-Int8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-7B-Instruct-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-7B-Instruct-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-7B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-7B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 10 (pytorch, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-72B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-72B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-72B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 72 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 11 (awq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-72B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-72B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-72B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 72 --model-format awq --quantization ${quantization}\n\n\nModel Spec 12 (gptq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2-VL-72B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2-VL-72B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-VL-72B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 72 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 13 (mlx, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 72\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2-VL-72B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2-VL-72B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2-VL-72B-Instruct-MLX-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 72 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 14 (mlx, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 7\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2-VL-7B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2-VL-7B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2-VL-7B-Instruct-MLX-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2-vl-instruct --size-in-billions 7 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2.5-coder-instruct.rst",
    "content": ".. _models_llm_qwen2.5-coder-instruct:\n\n========================================\nqwen2.5-coder-instruct\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen2.5-coder-instruct\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen).\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-0.5B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-0.5B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-0.5B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 0_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-1.5B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-1.5B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 1_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-3B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-3B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-3B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 3 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-7B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-7B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-14B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-14B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-14B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-32B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-32B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 0_5\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-0.5B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-0.5B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-0.5B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 0_5 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-1.5B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-1.5B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 1_5 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (awq, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 0_5\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-0.5B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-0.5B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-0.5B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 0_5 --model-format awq --quantization ${quantization}\n\n\nModel Spec 10 (awq, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-1.5B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-1.5B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 1_5 --model-format awq --quantization ${quantization}\n\n\nModel Spec 11 (ggufv2, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_5\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 1_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 12 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2.5-Coder-7B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-7B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 13 (gptq, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 3\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-3B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-3B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 3 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 14 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-7B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 15 (gptq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-14B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-14B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 14 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 16 (gptq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-32B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 32 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 17 (awq, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 3\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-3B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-3B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 3 --model-format awq --quantization ${quantization}\n\n\nModel Spec 18 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-7B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 19 (awq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-14B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-14B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 14 --model-format awq --quantization ${quantization}\n\n\nModel Spec 20 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-32B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n\nModel Spec 21 (gptq, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 3\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** qwen/Qwen2.5-Coder-3B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-3B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 3 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 22 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** qwen/Qwen2.5-Coder-7B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-7B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 23 (gptq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** qwen/Qwen2.5-Coder-14B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-14B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 14 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 24 (gptq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** qwen/Qwen2.5-Coder-32B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-32B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 32 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 25 (awq, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 3\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** qwen/Qwen2.5-Coder-3B-Instruct-AWQ\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-3B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 3 --model-format awq --quantization ${quantization}\n\n\nModel Spec 26 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** qwen/Qwen2.5-Coder-7B-Instruct-AWQ\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-7B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 27 (awq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** qwen/Qwen2.5-Coder-14B-Instruct-AWQ\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-14B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 14 --model-format awq --quantization ${quantization}\n\n\nModel Spec 28 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** qwen/Qwen2.5-Coder-32B-Instruct-AWQ\n- **Model Hubs**:  `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-32B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder-instruct --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2.5-coder.rst",
    "content": ".. _models_llm_qwen2.5-coder:\n\n========================================\nqwen2.5-coder\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen2.5-coder\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen).\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-0.5B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-0.5B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-0.5B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder --size-in-billions 0_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-1.5B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-1.5B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder --size-in-billions 1_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-3B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-3B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-3B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder --size-in-billions 3 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-7B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-14B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-14B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-14B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-Coder-32B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Coder-32B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-Coder-32B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-coder --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2.5-instruct-1m.rst",
    "content": ".. _models_llm_qwen2.5-instruct-1m:\n\n========================================\nqwen2.5-instruct-1m\n========================================\n\n- **Context Length:** 1010000\n- **Model Name:** qwen2.5-instruct-1m\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** Qwen2.5-1M is the long-context version of the Qwen2.5 series models, supporting a context length of up to 1M tokens.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-7B-Instruct-1M\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-1M>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-7B-Instruct-1M>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct-1m --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-14B-Instruct-1M\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-14B-Instruct-1M>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-14B-Instruct-1M>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct-1m --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2.5-instruct.rst",
    "content": ".. _models_llm_qwen2.5-instruct:\n\n========================================\nqwen2.5-instruct\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen2.5-instruct\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** Qwen2.5 is the latest series of Qwen large language models. For Qwen2.5, we release a number of base language models and instruction-tuned language models ranging from 0.5 to 72 billion parameters.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-0.5B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-0.5B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 0_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-1.5B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-1.5B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 1_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-3B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-3B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-3B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 3 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-7B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-7B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-7B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-14B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-14B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-14B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-32B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-32B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-32B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-72B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-72B-Instruct>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-72B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 72 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 0_5\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-0.5B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-0.5B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 0_5 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-1.5B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-1.5B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 1_5 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (gptq, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 3\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-3B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-3B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-3B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 3 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 11 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-7B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-7B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 12 (gptq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-14B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-14B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-14B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 14 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 13 (gptq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-32B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-32B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-32B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 32 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 14 (gptq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-72B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-72B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-72B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 72 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 15 (awq, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 0_5\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-0.5B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-0.5B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 0_5 --model-format awq --quantization ${quantization}\n\n\nModel Spec 16 (awq, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 1_5\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-1.5B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2-1.5B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 1_5 --model-format awq --quantization ${quantization}\n\n\nModel Spec 17 (awq, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 3\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-3B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-3B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-3B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 3 --model-format awq --quantization ${quantization}\n\n\nModel Spec 18 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-7B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-7B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 19 (awq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-14B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-14B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-14B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 14 --model-format awq --quantization ${quantization}\n\n\nModel Spec 20 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-32B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-32B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-32B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n\nModel Spec 21 (awq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-72B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-72B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-72B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 72 --model-format awq --quantization ${quantization}\n\n\nModel Spec 22 (ggufv2, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 0_5\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2.5-0.5B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-0.5B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 0_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 23 (ggufv2, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_5\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2.5-1.5B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-1.5B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 1_5 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 24 (ggufv2, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 3\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2.5-3B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-3B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-3B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 3 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 25 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2.5-7B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-7B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 26 (ggufv2, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 14\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2.5-14B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-14B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-14B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 14 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 27 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2.5-32B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-32B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-32B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 28 (mlx, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 3\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-3B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-3B-Instruct-4bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-3B-Instruct-MLX-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 3 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 29 (mlx, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 3\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-3B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-3B-Instruct-8bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-3B-Instruct-MLX-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 3 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 30 (mlx, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 7\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-7B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-7B-Instruct-4bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-7B-Instruct-MLX-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 7 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 31 (mlx, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 7\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-7B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-7B-Instruct-8bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-7B-Instruct-MLX-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 7 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 32 (mlx, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 14\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-14B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-14B-Instruct-4bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-14B-Instruct-MLX-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 14 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 33 (mlx, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 14\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-14B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-14B-Instruct-8bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-14B-Instruct-MLX-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 14 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 34 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-32B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-32B-Instruct-4bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-32B-Instruct-MLX-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 35 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-32B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-32B-Instruct-8bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-32B-Instruct-MLX-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 36 (mlx, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 72\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-72B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-72B-Instruct-4bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-72B-Instruct-MLX-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 72 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 37 (mlx, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 72\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-72B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-72B-Instruct-8bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-72B-Instruct-MLX-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 72 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 38 (ggufv2, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 72\n- **Quantizations:** q2_k, q3_k_m, q4_0, q4_k_m, q5_0, q5_k_m, q6_k, q8_0, fp16\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** Qwen/Qwen2.5-72B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-72B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-72B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 72 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 39 (mlx, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 0_5\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-0.5B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-0.5B-Instruct-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 0_5 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 40 (mlx, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 0_5\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-0.5B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-0.5B-Instruct-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 0_5 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 41 (mlx, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 0_5\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-0.5B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-0.5B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 0_5 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 42 (mlx, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 1_5\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-1.5B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-1.5B-Instruct-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 1_5 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 43 (mlx, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 1_5\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-1.5B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-1.5B-Instruct-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 1_5 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 44 (mlx, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-1.5B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-1.5B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 1_5 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 45 (mlx, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 3\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-3B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-3B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 3 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 46 (mlx, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-7B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-7B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 7 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 47 (mlx, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-14B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-14B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 14 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 48 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-32B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-32B-Instruct-bf16>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-32B-Instruct-MLX-2bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 49 (mlx, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-72B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-72B-Instruct-bf16>`__, `ModelScope <https://modelscope.cn/models/okwinds/Qwen2.5-32B-Instruct-MLX-2bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-instruct --size-in-billions 72 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2.5-omni.rst",
    "content": ".. _models_llm_qwen2.5-omni:\n\n========================================\nqwen2.5-omni\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen2.5-omni\n- **Languages:** en, zh\n- **Abilities:** chat, vision, audio, omni\n- **Description:** Qwen2.5-Omni: the new flagship end-to-end multimodal model in the Qwen series.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2.5-Omni-3B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Omni-3B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-Omni-3B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-omni --size-in-billions 3 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen2.5-Omni-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-Omni-7B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-Omni-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-omni --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2.5-vl-instruct.rst",
    "content": ".. _models_llm_qwen2.5-vl-instruct:\n\n========================================\nqwen2.5-vl-instruct\n========================================\n\n- **Context Length:** 128000\n- **Model Name:** qwen2.5-vl-instruct\n- **Languages:** en, zh\n- **Abilities:** chat, vision\n- **Description:** Qwen2.5-VL: Qwen2.5-VL is the latest version of the vision language models in the Qwen model familities.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-VL-3B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-VL-3B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-VL-3B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 3 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-VL-7B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-VL-7B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-VL-7B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-VL-32B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-VL-32B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-VL-32B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-VL-72B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-VL-72B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-VL-72B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 72 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (awq, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 3\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-VL-3B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-VL-3B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-VL-3B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 3 --model-format awq --quantization ${quantization}\n\n\nModel Spec 6 (awq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-VL-7B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-VL-7B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-VL-7B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 7 --model-format awq --quantization ${quantization}\n\n\nModel Spec 7 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-VL-32B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-VL-32B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen2.5-VL-32B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n\nModel Spec 8 (awq, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 72\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-VL-72B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-VL-72B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 72 --model-format awq --quantization ${quantization}\n\n\nModel Spec 9 (mlx, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 3\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-VL-3B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-VL-3B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen2.5-VL-3B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 3 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 10 (mlx, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 7\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-VL-7B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-VL-7B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen2.5-VL-7B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 7 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 11 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-VL-32B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-VL-32B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen2.5-VL-32B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 12 (mlx, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 72\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen2.5-VL-72B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen2.5-VL-72B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen2.5-VL-72B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5-vl-instruct --size-in-billions 72 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen2.5.rst",
    "content": ".. _models_llm_qwen2.5:\n\n========================================\nqwen2.5\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwen2.5\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** Qwen2.5 is the latest series of Qwen large language models. For Qwen2.5, we release a number of base language models and instruction-tuned language models ranging from 0.5 to 72 billion parameters.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 0_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-0.5B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-0.5B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-0.5B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5 --size-in-billions 0_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-1.5B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-1.5B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-1.5B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5 --size-in-billions 1_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 3 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 3\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-3B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-3B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-3B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5 --size-in-billions 3 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-7B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-14B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-14B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-14B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5 --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 6 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-32B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-32B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-32B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5 --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 72 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 72\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen2.5-72B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen2.5-72B>`__, `ModelScope <https://modelscope.cn/models/qwen/Qwen2.5-72B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen2.5 --size-in-billions 72 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3-coder.rst",
    "content": ".. _models_llm_qwen3-coder:\n\n========================================\nQwen3-Coder\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Qwen3-Coder\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** we're announcing Qwen3-Coder, our most agentic code model to date\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 480 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 480\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-Coder-480B-A35B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Coder-480B-A35B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Coder-480B-A35B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 480 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 30\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-Coder-30B-A3B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Coder-30B-A3B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Coder-30B-A3B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 30 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (fp8, 480 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 480\n- **Quantizations:** fp8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 480 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 4 (fp8, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 30\n- **Quantizations:** fp8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 30 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 5 (gptq, 480 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 480\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-Coder-480B-A35B-Instruct-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-Coder-480B-A35B-Instruct-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-Coder-480B-A35B-Instruct-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 480 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 6 (gptq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 30\n- **Quantizations:** Int8\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-Coder-30B-A3B-Instruct-GPTQ-Int8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-Coder-30B-A3B-Instruct-GPTQ-Int8>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-Coder-30B-A3B-Instruct-GPTQ-Int8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 30 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 7 (awq, 480 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 480\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-Coder-480B-A35B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-Coder-480B-A35B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-Coder-480B-A35B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 480 --model-format awq --quantization ${quantization}\n\n\nModel Spec 8 (awq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 30\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-Coder-30B-A3B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-Coder-30B-A3B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-Coder-30B-A3B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 30 --model-format awq --quantization ${quantization}\n\n\nModel Spec 9 (mlx, 480 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 480\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-Coder-480B-A35B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-Coder-480B-A35B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-Coder-480B-A35B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 480 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 10 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** 3bit, 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-Coder-30B-A3B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-Coder-30B-A3B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-Coder-30B-A3B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 11 (ggufv2, 480 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 480\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-Coder-480B-A35B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-Coder-480B-A35B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-Coder-480B-A35B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 480 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 12 (ggufv2, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 30\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, UD-TQ1_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Coder --size-in-billions 30 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3-instruct.rst",
    "content": ".. _models_llm_qwen3-instruct:\n\n========================================\nQwen3-Instruct\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Qwen3-Instruct\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** We introduce the updated version of the Qwen3-235B-A22B non-thinking mode, named Qwen3-235B-A22B-Instruct-2507\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 235\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-235B-A22B-Instruct-2507\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-235B-A22B-Instruct-2507>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-235B-A22B-Instruct-2507>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 235 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 30\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-30B-A3B-Instruct-2507\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-30B-A3B-Instruct-2507>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-30B-A3B-Instruct-2507>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 30 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-4B-Instruct-2507\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-4B-Instruct-2507>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-4B-Instruct-2507>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (fp8, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 235\n- **Quantizations:** fp8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-235B-A22B-Instruct-2507-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-235B-A22B-Instruct-2507-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-235B-A22B-Instruct-2507-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 235 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 5 (fp8, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 30\n- **Quantizations:** fp8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-30B-A3B-Instruct-2507-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-30B-A3B-Instruct-2507-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-30B-A3B-Instruct-2507-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 30 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 6 (fp8, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-4B-Instruct-2507-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-4B-Instruct-2507-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-4B-Instruct-2507-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 4 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 235\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-235B-A22B-Instruct-2507-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-235B-A22B-Instruct-2507-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-235B-A22B-Instruct-2507-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 235 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 30\n- **Quantizations:** Int8\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-30B-A3B-Instruct-2507-GPTQ-Int8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-30B-A3B-Instruct-2507-GPTQ-Int8>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-30B-A3B-Instruct-2507-GPTQ-Int8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 30 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers\n- **Model ID:** JunHowie/Qwen3-4B-Instruct-2507-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Qwen3-4B-Instruct-2507-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Qwen3-4B-Instruct-2507-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 4 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (awq, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 235\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-235B-A22B-Instruct-2507-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-235B-A22B-Instruct-2507-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-235B-A22B-Instruct-2507-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 235 --model-format awq --quantization ${quantization}\n\n\nModel Spec 11 (awq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 30\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn/Qwen3-30B-A3B-Instruct-2507-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/Qwen3-30B-A3B-Instruct-2507-AWQ>`__, `ModelScope <https://modelscope.cn/models/cpatonn-mirror/Qwen3-30B-A3B-Instruct-2507-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 30 --model-format awq --quantization ${quantization}\n\n\nModel Spec 12 (awq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Eslzzyl/Qwen3-4B-Instruct-2507-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Eslzzyl/Qwen3-4B-Instruct-2507-AWQ>`__, `ModelScope <https://modelscope.cn/models/Eslzzyl/Qwen3-4B-Instruct-2507-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 4 --model-format awq --quantization ${quantization}\n\n\nModel Spec 13 (mlx, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 235\n- **Quantizations:** 3bit, 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-235B-A22B-Instruct-2507-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-235B-A22B-Instruct-2507-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-235B-A22B-Instruct-2507-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 235 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 14 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-30B-A3B-Instruct-2507-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-30B-A3B-Instruct-2507-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-30B-A3B-Instruct-2507-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 15 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-4B-Instruct-2507-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-4B-Instruct-2507-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-4B-Instruct-2507-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 16 (ggufv2, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 235\n- **Quantizations:** BF16, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-235B-A22B-Instruct-2507-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-235B-A22B-Instruct-2507-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-235B-A22B-Instruct-2507-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 235 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 17 (ggufv2, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 30\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, UD-TQ1_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 30 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 18 (ggufv2, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 4\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-4B-Instruct-2507-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-4B-Instruct-2507-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-4B-Instruct-2507-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Instruct --size-in-billions 4 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3-next-instruct.rst",
    "content": ".. _models_llm_qwen3-next-instruct:\n\n========================================\nQwen3-Next-Instruct\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Qwen3-Next-Instruct\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** Qwen3-Next-80B-A3B is the first installment in the Qwen3-Next series\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 80 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 80\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-Next-80B-A3B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Next-80B-A3B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Next-Instruct --size-in-billions 80 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 80 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 80\n- **Quantizations:** fp8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-Next-80B-A3B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Next-80B-A3B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Next-Instruct --size-in-billions 80 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (awq, 80 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 80\n- **Quantizations:** 4bit, 8bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn/Qwen3-Next-80B-A3B-Instruct-AWQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/Qwen3-Next-80B-A3B-Instruct-AWQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/cpatonn-mirror/Qwen3-Next-80B-A3B-Instruct-AWQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Next-Instruct --size-in-billions 80 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 80 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 80\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-Next-80B-A3B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-Next-80B-A3B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-Next-80B-A3B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Next-Instruct --size-in-billions 80 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3-next-thinking.rst",
    "content": ".. _models_llm_qwen3-next-thinking:\n\n========================================\nQwen3-Next-Thinking\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Qwen3-Next-Thinking\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, tools\n- **Description:** Qwen3-Next-80B-A3B is the first installment in the Qwen3-Next series\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 80 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 80\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-Next-80B-A3B-Thinking\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Thinking>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Next-80B-A3B-Thinking>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Next-Thinking --size-in-billions 80 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 80 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 80\n- **Quantizations:** fp8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-Next-80B-A3B-Thinking-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Thinking-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Next-80B-A3B-Thinking-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Next-Thinking --size-in-billions 80 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (awq, 80 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 80\n- **Quantizations:** 4bit, 8bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn/Qwen3-Next-80B-A3B-Thinking-AWQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/Qwen3-Next-80B-A3B-Thinking-AWQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/cpatonn-mirror/Qwen3-Next-80B-A3B-Thinking-AWQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Next-Thinking --size-in-billions 80 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 80 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 80\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-Next-80B-A3B-Thinking-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-Next-80B-A3B-Thinking-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-Next-80B-A3B-Thinking-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Next-Thinking --size-in-billions 80 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3-omni-instruct.rst",
    "content": ".. _models_llm_qwen3-omni-instruct:\n\n========================================\nQwen3-Omni-Instruct\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Qwen3-Omni-Instruct\n- **Languages:** en, zh\n- **Abilities:** chat, vision, audio, omni, tools\n- **Description:** Qwen3-Omni is the natively end-to-end multilingual omni-modal foundation models. It processes text, images, audio, and video, and delivers real-time streaming responses in both text and natural speech. We introduce several architectural upgrades to improve performance and efficiency.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 30\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-Omni-30B-A3B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Omni-30B-A3B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Omni-Instruct --size-in-billions 30 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 30\n- **Quantizations:** 4bit, 8bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn/Qwen3-Omni-30B-A3B-Instruct-AWQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/Qwen3-Omni-30B-A3B-Instruct-AWQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/cpatonn-mirror/Qwen3-Omni-30B-A3B-Instruct-AWQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Omni-Instruct --size-in-billions 30 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3-omni-thinking.rst",
    "content": ".. _models_llm_qwen3-omni-thinking:\n\n========================================\nQwen3-Omni-Thinking\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Qwen3-Omni-Thinking\n- **Languages:** en, zh\n- **Abilities:** chat, vision, audio, omni, reasoning, tools\n- **Description:** Qwen3-Omni is the natively end-to-end multilingual omni-modal foundation models. It processes text, images, audio, and video, and delivers real-time streaming responses in both text and natural speech. We introduce several architectural upgrades to improve performance and efficiency.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 30\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-Omni-30B-A3B-Thinking\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Thinking>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-Omni-30B-A3B-Thinking>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Omni-Thinking --size-in-billions 30 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 30\n- **Quantizations:** 4bit, 8bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn/Qwen3-Omni-30B-A3B-Thinking-AWQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/Qwen3-Omni-30B-A3B-Thinking-AWQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/cpatonn-mirror/Qwen3-Omni-30B-A3B-Thinking-AWQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Omni-Thinking --size-in-billions 30 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3-thinking.rst",
    "content": ".. _models_llm_qwen3-thinking:\n\n========================================\nQwen3-Thinking\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Qwen3-Thinking\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, tools\n- **Description:** we have continued to scale the thinking capability of Qwen3-235B-A22B, improving both the quality and depth of reasoning\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 235\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-235B-A22B-Thinking-2507\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-235B-A22B-Thinking-2507>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-235B-A22B-Thinking-2507>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 235 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 30\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-30B-A3B-Thinking-2507\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-30B-A3B-Thinking-2507>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-30B-A3B-Thinking-2507>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 30 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-4B-Thinking-2507\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-4B-Thinking-2507>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-4B-Thinking-2507>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (fp8, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 235\n- **Quantizations:** fp8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-235B-A22B-Thinking-2507-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-235B-A22B-Thinking-2507-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-235B-A22B-Thinking-2507-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 235 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 5 (fp8, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 30\n- **Quantizations:** fp8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-30B-A3B-Thinking-2507-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-30B-A3B-Thinking-2507-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-30B-A3B-Thinking-2507-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 30 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 6 (fp8, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3-4B-Thinking-2507-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-4B-Thinking-2507-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-4B-Thinking-2507-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 4 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 235\n- **Quantizations:** Int4-Int8Mix\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-235B-A22B-Thinking-2507-GPTQ-Int4-Int8Mix\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-235B-A22B-Thinking-2507-GPTQ-Int4-Int8Mix>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-235B-A22B-Thinking-2507-GPTQ-Int4-Int8Mix>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 235 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 30\n- **Quantizations:** Int8\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-30B-A3B-Thinking-2507-GPTQ-Int8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-30B-A3B-Thinking-2507-GPTQ-Int8>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-30B-A3B-Thinking-2507-GPTQ-Int8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 30 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers\n- **Model ID:** JunHowie/Qwen3-4B-Thinking-2507-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Qwen3-4B-Thinking-2507-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Qwen3-4B-Thinking-2507-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 4 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (awq, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 235\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-235B-A22B-Thinking-2507-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-235B-A22B-Thinking-2507-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-235B-A22B-Thinking-2507-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 235 --model-format awq --quantization ${quantization}\n\n\nModel Spec 11 (awq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 30\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-30B-A3B-Thinking-2507-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-30B-A3B-Thinking-2507-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-30B-A3B-Thinking-2507-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 30 --model-format awq --quantization ${quantization}\n\n\nModel Spec 12 (awq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Eslzzyl/Qwen3-4B-Thinking-2507-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Eslzzyl/Qwen3-4B-Thinking-2507-AWQ>`__, `ModelScope <https://modelscope.cn/models/Eslzzyl/Qwen3-4B-Thinking-2507-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 4 --model-format awq --quantization ${quantization}\n\n\nModel Spec 13 (mlx, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 235\n- **Quantizations:** 3bit, 4bit, 5bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-235B-A22B-Thinking-2507-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-235B-A22B-Thinking-2507-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-235B-A22B-Thinking-2507-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 235 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 14 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** 4bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-30B-A3B-Thinking-2507-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-30B-A3B-Thinking-2507-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-30B-A3B-Thinking-2507-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 15 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-4B-Thinking-2507-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-4B-Thinking-2507-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-4B-Thinking-2507-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 16 (ggufv2, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 235\n- **Quantizations:** BF16, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-235B-A22B-Thinking-2507-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-235B-A22B-Thinking-2507-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-235B-A22B-Thinking-2507-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 235 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 17 (ggufv2, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 30\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, UD-TQ1_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-30B-A3B-Thinking-2507-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-30B-A3B-Thinking-2507-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-30B-A3B-Thinking-2507-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 30 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 18 (ggufv2, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 4\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-4B-Thinking-2507-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-4B-Thinking-2507-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-4B-Thinking-2507-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-Thinking --size-in-billions 4 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3-vl-instruct.rst",
    "content": ".. _models_llm_qwen3-vl-instruct:\n\n========================================\nQwen3-VL-Instruct\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Qwen3-VL-Instruct\n- **Languages:** en, zh\n- **Abilities:** chat, vision, tools\n- **Description:** Meet Qwen3-VL — the most powerful vision-language model in the Qwen series to date.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 235\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-235B-A22B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-235B-A22B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-235B-A22B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 235 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 235\n- **Quantizations:** fp8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-235B-A22B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-235B-A22B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-235B-A22B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 235 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (awq, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 235\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-VL-235B-A22B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-VL-235B-A22B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-VL-235B-A22B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 235 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 30\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-30B-A3B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-30B-A3B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-30B-A3B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 30 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (fp8, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 30\n- **Quantizations:** fp8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-30B-A3B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-30B-A3B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-30B-A3B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 30 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 6 (awq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 30\n- **Quantizations:** 4bit, 8bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn/Qwen3-VL-30B-A3B-Instruct-AWQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/Qwen3-VL-30B-A3B-Instruct-AWQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/cpatonn-mirror/Qwen3-VL-30B-A3B-Instruct-AWQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 30 --model-format awq --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-32B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-32B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-32B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 8 (fp8, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 32\n- **Quantizations:** fp8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-32B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-32B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-32B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 32 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 9 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-VL-32B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-VL-32B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-VL-32B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n\nModel Spec 10 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-8B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-8B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-8B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 11 (fp8, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 8\n- **Quantizations:** fp8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-8B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-8B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-8B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 8 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 12 (awq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 8\n- **Quantizations:** 4bit, 8bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn/Qwen3-VL-8B-Instruct-AWQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/Qwen3-VL-8B-Instruct-AWQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/cpatonn-mirror/Qwen3-VL-8B-Instruct-AWQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 8 --model-format awq --quantization ${quantization}\n\n\nModel Spec 13 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-4B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-4B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-4B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 14 (fp8, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 4\n- **Quantizations:** fp8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-4B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-4B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-4B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 4 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 15 (awq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 4\n- **Quantizations:** 4bit, 8bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn/Qwen3-VL-4B-Instruct-AWQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/Qwen3-VL-4B-Instruct-AWQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/cpatonn-mirror/Qwen3-VL-4B-Instruct-AWQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 4 --model-format awq --quantization ${quantization}\n\n\nModel Spec 16 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-2B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-2B-Instruct>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-2B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 17 (fp8, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 2\n- **Quantizations:** fp8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-2B-Instruct-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-2B-Instruct-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-2B-Instruct-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 2 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 18 (mlx, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 235\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-235B-A22B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-235B-A22B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-235B-A22B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 235 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 19 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-30B-A3B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-30B-A3B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-30B-A3B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 20 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-32B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-32B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-32B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 21 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-8B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-8B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-8B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 22 (mlx, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 2\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-2B-Instruct-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-2B-Instruct-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-2B-Instruct-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 2 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 23 (mlx, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 2\n- **Quantizations:** bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-2B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-2B-Instruct-bf16>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-2B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 2 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 24 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 3bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-4B-Instruct-3bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-4B-Instruct-3bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-4B-Instruct-3bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 25 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-4B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-4B-Instruct-4bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-4B-Instruct-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 26 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-4B-Instruct-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-4B-Instruct-8bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-4B-Instruct-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 27 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-4B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-4B-Instruct-bf16>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-4B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 28 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 3bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-8B-Instruct-3bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-8B-Instruct-3bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-8B-Instruct-3bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 29 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 5bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-8B-Instruct-5bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-8B-Instruct-5bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-8B-Instruct-5bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 30 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-8B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-8B-Instruct-bf16>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-8B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 31 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** 3bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-30B-A3B-Instruct-3bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-30B-A3B-Instruct-3bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-30B-A3B-Instruct-3bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 32 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-30B-A3B-Instruct-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-30B-A3B-Instruct-bf16>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-30B-A3B-Instruct-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 33 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 3bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-32B-Instruct-3bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-32B-Instruct-3bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-32B-Instruct-3bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Instruct --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3-vl-thinking.rst",
    "content": ".. _models_llm_qwen3-vl-thinking:\n\n========================================\nQwen3-VL-Thinking\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Qwen3-VL-Thinking\n- **Languages:** en, zh\n- **Abilities:** chat, vision, reasoning, tools\n- **Description:** Meet Qwen3-VL — the most powerful vision-language model in the Qwen series to date.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 235\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-235B-A22B-Thinking\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-235B-A22B-Thinking>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-235B-A22B-Thinking>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 235 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 235\n- **Quantizations:** fp8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-235B-A22B-Thinking-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-235B-A22B-Thinking-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-235B-A22B-Thinking-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 235 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (awq, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 235\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3-VL-235B-A22B-Thinking-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-VL-235B-A22B-Thinking-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-VL-235B-A22B-Thinking-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 235 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 30\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-30B-A3B-Thinking\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-30B-A3B-Thinking>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-30B-A3B-Thinking>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 30 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 5 (fp8, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 30\n- **Quantizations:** fp8\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3-VL-30B-A3B-Thinking-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-VL-30B-A3B-Thinking-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-VL-30B-A3B-Thinking-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 30 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 6 (awq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 30\n- **Quantizations:** 4bit, 8bit\n- **Engines**: vLLM, Transformers\n- **Model ID:** cpatonn/Qwen3-VL-30B-A3B-Thinking-AWQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/cpatonn/Qwen3-VL-30B-A3B-Thinking-AWQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/cpatonn-mirror/Qwen3-VL-30B-A3B-Thinking-AWQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 30 --model-format awq --quantization ${quantization}\n\n\nModel Spec 7 (mlx, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 235\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-235B-A22B-Thinking-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-235B-A22B-Thinking-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-235B-A22B-Thinking-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 235 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 8 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-30B-A3B-Thinking-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-30B-A3B-Thinking-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-30B-A3B-Thinking-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 9 (mlx, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 2\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-2B-Thinking-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-2B-Thinking-4bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-2B-Thinking-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 2 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 10 (mlx, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 2\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-2B-Thinking-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-2B-Thinking-8bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-2B-Thinking-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 2 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 11 (mlx, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 2\n- **Quantizations:** bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-2B-Thinking-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-2B-Thinking-bf16>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-2B-Thinking-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 2 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 12 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 3bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-4B-Thinking-3bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-4B-Thinking-3bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-4B-Thinking-3bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 13 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-4B-Thinking-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-4B-Thinking-4bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-4B-Thinking-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 14 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-4B-Thinking-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-4B-Thinking-8bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-4B-Thinking-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 15 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-4B-Thinking-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-4B-Thinking-bf16>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-4B-Thinking-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 16 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 3bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-8B-Thinking-3bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-8B-Thinking-3bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-8B-Thinking-3bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 17 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-8B-Thinking-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-8B-Thinking-4bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-8B-Thinking-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 18 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 5bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-8B-Thinking-5bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-8B-Thinking-5bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-8B-Thinking-5bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 19 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-8B-Thinking-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-8B-Thinking-8bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-8B-Thinking-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 20 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-8B-Thinking-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-8B-Thinking-bf16>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-8B-Thinking-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 21 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** 3bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-30B-A3B-Thinking-3bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-30B-A3B-Thinking-3bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-30B-A3B-Thinking-3bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 22 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-30B-A3B-Thinking-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-30B-A3B-Thinking-bf16>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-30B-A3B-Thinking-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 23 (mlx, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 235\n- **Quantizations:** 3bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-VL-235B-A22B-Thinking-3bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-VL-235B-A22B-Thinking-3bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-VL-235B-A22B-Thinking-3bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Qwen3-VL-Thinking --size-in-billions 235 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3.5.rst",
    "content": ".. _models_llm_qwen3.5:\n\n========================================\nqwen3.5\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** qwen3.5\n- **Languages:** en, zh\n- **Abilities:** chat, vision, tools, reasoning\n- **Description:** Over recent months, we have intensified our focus on developing foundation models that deliver exceptional utility and performance. Qwen3.5 represents a significant leap forward, integrating breakthroughs in multimodal learning, architectural efficiency, reinforcement learning scale, and global accessibility to empower developers and enterprises with unprecedented capability and efficiency\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 397 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 397\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-397B-A17B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-397B-A17B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-397B-A17B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 397 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 397 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 397\n- **Quantizations:** FP8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3.5-397B-A17B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-397B-A17B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-397B-A17B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 397 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 397 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 397\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-397B-A17B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-397B-A17B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-397B-A17B-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 397 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (awq, 397 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 397\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3.5-397B-A17B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3.5-397B-A17B-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3.5-397B-A17B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 397 --model-format awq --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 397 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 397\n- **Quantizations:** UD-TQ1_0\n- **Engines**: llama.cpp\n- **Model ID:** unsloth/Qwen3.5-397B-A17B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3.5-397B-A17B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3.5-397B-A17B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 397 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (mlx, 397 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 397\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3.5-397B-A17B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3.5-397B-A17B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3.5-397B-A17B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 397 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 122 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 122\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-122B-A10B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-122B-A10B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-122B-A10B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 122 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 8 (fp8, 122 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 122\n- **Quantizations:** FP8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3.5-122B-A10B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-122B-A10B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-122B-A10B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 122 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 122 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 122\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-122B-A10B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-122B-A10B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-122B-A10B-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 122 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (awq, 122 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 122\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3.5-122B-A10B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3.5-122B-A10B-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3.5-122B-A10B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 122 --model-format awq --quantization ${quantization}\n\n\nModel Spec 11 (ggufv2, 122 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 122\n- **Quantizations:** UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_S, UD-IQ3_XXS\n- **Engines**: llama.cpp\n- **Model ID:** unsloth/Qwen3.5-122B-A10B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3.5-122B-A10B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3.5-122B-A10B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 122 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 12 (mlx, 122 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 122\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3.5-122B-A10B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3.5-122B-A10B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3.5-122B-A10B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 122 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 13 (pytorch, 35 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 35\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-35B-A3B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-35B-A3B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-35B-A3B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 35 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 14 (fp8, 35 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 35\n- **Quantizations:** FP8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3.5-35B-A3B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-35B-A3B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-35B-A3B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 35 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 15 (gptq, 35 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 35\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-35B-A3B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-35B-A3B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-35B-A3B-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 35 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 16 (awq, 35 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 35\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3.5-35B-A3B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3.5-35B-A3B-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3.5-35B-A3B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 35 --model-format awq --quantization ${quantization}\n\n\nModel Spec 17 (ggufv2, 35 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 35\n- **Quantizations:** MXFP4_MOE, Q3_K_M, Q3_K_S, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ1_M, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_S, UD-IQ3_XXS, UD-IQ4_NL, UD-IQ4_XS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_L, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_S, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: llama.cpp\n- **Model ID:** unsloth/Qwen3.5-35B-A3B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3.5-35B-A3B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3.5-35B-A3B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 35 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 18 (mlx, 35 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 35\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3.5-35B-A3B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3.5-35B-A3B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3.5-35B-A3B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 35 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 19 (pytorch, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 27\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-27B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-27B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-27B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 27 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 20 (fp8, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 27\n- **Quantizations:** FP8\n- **Engines**: vLLM\n- **Model ID:** Qwen/Qwen3.5-27B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-27B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-27B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 27 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 21 (gptq, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 27\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-27B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-27B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-27b-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 27 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 22 (awq, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 27\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Qwen3.5-27B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3.5-27B-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3.5-27B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 27 --model-format awq --quantization ${quantization}\n\n\nModel Spec 23 (ggufv2, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 27\n- **Quantizations:** IQ4_NL, IQ4_XS, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: llama.cpp\n- **Model ID:** unsloth/Qwen3.5-27B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3.5-27B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3.5-27B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 27 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 24 (mlx, 27 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 27\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit, bf16, mxfp8\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3.5-27B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3.5-27B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3.5-27B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 27 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 25 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-9B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-9B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-9B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 26 (awq, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 9\n- **Quantizations:** Int4\n- **Engines**: Transformers\n- **Model ID:** QuantTrio/Qwen3.5-9B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3.5-9B-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3.5-9B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 9 --model-format awq --quantization ${quantization}\n\n\nModel Spec 27 (ggufv2, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 9\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: llama.cpp\n- **Model ID:** unsloth/Qwen3.5-9B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3.5-9B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3.5-9B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 9 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 28 (mlx, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 9\n- **Quantizations:** 4bit, 5bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3.5-9B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3.5-9B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3.5-9B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 9 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 29 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-4B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-4B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-4B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 30 (awq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4\n- **Engines**: Transformers\n- **Model ID:** QuantTrio/Qwen3.5-4B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3.5-4B-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3.5-4B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 4 --model-format awq --quantization ${quantization}\n\n\nModel Spec 31 (ggufv2, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 4\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: llama.cpp\n- **Model ID:** unsloth/Qwen3.5-4B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3.5-4B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3.5-4B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 4 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 32 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3.5-4B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3.5-4B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3.5-4B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 33 (pytorch, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 2\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-2B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-2B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-2B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 2 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 34 (awq, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 2\n- **Quantizations:** Int4\n- **Engines**: Transformers\n- **Model ID:** QuantTrio/Qwen3.5-2B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3.5-2B-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3.5-2B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 2 --model-format awq --quantization ${quantization}\n\n\nModel Spec 35 (ggufv2, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 2\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: llama.cpp\n- **Model ID:** unsloth/Qwen3.5-2B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3.5-2B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3.5-2B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 2 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 36 (mlx, 2 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 2\n- **Quantizations:** 3bit, 4bit, 5bit, 6bit, 8bit, bf16, mxfp4, mxfp8, nvfp4\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3.5-2B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3.5-2B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3.5-2B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 2 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 37 (pytorch, 0_8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** Qwen/Qwen3.5-0.8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3.5-0.8B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3.5-0.8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 0_8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 38 (ggufv2, 0_8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 0_8\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: llama.cpp\n- **Model ID:** unsloth/Qwen3.5-0.8B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3.5-0.8B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3.5-0.8B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 0_8 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 39 (mlx, 0_8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 0_8\n- **Quantizations:** 3bit, 4bit, 5bit, 6bit, 8bit, bf16, mxfp4, mxfp8, nvfp4\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3.5-0.8B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3.5-0.8B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3.5-0.8B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3.5 --size-in-billions 0_8 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwen3.rst",
    "content": ".. _models_llm_qwen3:\n\n========================================\nqwen3\n========================================\n\n- **Context Length:** 40960\n- **Model Name:** qwen3\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, hybrid, tools\n- **Description:** Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models. Built upon extensive training, Qwen3 delivers groundbreaking advancements in reasoning, instruction-following, agent capabilities, and multilingual support.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 0_6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 0_6\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-0.6B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-0.6B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-0.6B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 0_6 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (fp8, 0_6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 0_6\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** Qwen/Qwen3-0.6B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-0.6B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-0.6B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 0_6 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 3 (gptq, 0_6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 0_6\n- **Quantizations:** Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-0.6B-GPTQ-Int8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-0.6B-GPTQ-Int8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-0.6B-GPTQ-Int8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 0_6 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 4 (gptq, 0_6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 0_6\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Qwen3-0.6B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Qwen3-0.6B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Qwen3-0.6B-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 0_6 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 0_6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 0_6\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-0.6B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-0.6B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-0.6B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 0_6 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 0_6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 0_6\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, IQ4_NL, IQ4_XS\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-0.6B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-0.6B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-0.6B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 0_6 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 7 (pytorch, 1_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-1.7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-1.7B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-1.7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 1_7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 8 (fp8, 1_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 1_7\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** Qwen/Qwen3-1.7B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-1.7B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-1.7B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 1_7 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 1_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_7\n- **Quantizations:** Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-1.7B-GPTQ-Int8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-1.7B-GPTQ-Int8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-1.7B-GPTQ-Int8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 1_7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (gptq, 1_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 1_7\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Qwen3-1.7B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Qwen3-1.7B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Qwen3-1.7B-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 1_7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 11 (mlx, 1_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 1_7\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-1.7B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-1.7B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-1.7B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 1_7 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 12 (ggufv2, 1_7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1_7\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, IQ4_NL, IQ4_XS\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-1.7B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-1.7B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-1.7B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 1_7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 13 (pytorch, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 4\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-4B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-4B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-4B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 4 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 14 (fp8, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 4\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** Qwen/Qwen3-4B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-4B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-4B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 4 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 15 (awq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-4B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-4B-AWQ>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-4B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 4 --model-format awq --quantization ${quantization}\n\n\nModel Spec 16 (gptq, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 4\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Qwen3-4B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Qwen3-4B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Qwen3-4B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 4 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 17 (mlx, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 4\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-4B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-4B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-4B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 4 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 18 (ggufv2, 4 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 4\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, IQ4_NL, IQ4_XS\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-4B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-4B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-4B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 4 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 19 (pytorch, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 8\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-8B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-8B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-8B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 8 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 20 (fp8, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 8\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** Qwen/Qwen3-8B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-8B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-8B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 8 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 21 (awq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-8B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-8B-AWQ>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-8B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 8 --model-format awq --quantization ${quantization}\n\n\nModel Spec 22 (gptq, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 8\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Qwen3-8B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Qwen3-8B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Qwen3-8B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 8 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 23 (mlx, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 8\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-8B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-8B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-8B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 8 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 24 (ggufv2, 8 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 8\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, IQ4_NL, IQ4_XS\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-8B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-8B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-8B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 8 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 25 (pytorch, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 14\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-14B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-14B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-14B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 14 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 26 (fp8, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 14\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** Qwen/Qwen3-14B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-14B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-14B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 14 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 27 (awq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-14B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-14B-AWQ>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-14B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 14 --model-format awq --quantization ${quantization}\n\n\nModel Spec 28 (gptq, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 14\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Qwen3-14B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Qwen3-14B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Qwen3-14B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 14 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 29 (mlx, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 14\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-14B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-14B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-14B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 14 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 30 (ggufv2, 14 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 14\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, IQ4_NL, IQ4_XS\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-14B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-14B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-14B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 14 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 31 (pytorch, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 30\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-30B-A3B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-30B-A3B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-30B-A3B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 30 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 32 (fp8, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 30\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** Qwen/Qwen3-30B-A3B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-30B-A3B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-30B-A3B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 30 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 33 (gptq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 30\n- **Quantizations:** Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Qwen3-30B-A3B-GPTQ-Int8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Qwen3-30B-A3B-GPTQ-Int8>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Qwen3-30B-A3B-GPTQ-Int8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 30 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 34 (gptq, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 30\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-30B-A3B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-30B-A3B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-30B-A3B-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 30 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 35 (mlx, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 30\n- **Quantizations:** 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-30B-A3B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-30B-A3B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-30B-A3B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 30 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 36 (ggufv2, 30 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 30\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, IQ4_NL, IQ4_XS\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-30B-A3B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-30B-A3B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-30B-A3B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 30 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 37 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-32B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-32B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-32B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 38 (fp8, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 32\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** Qwen/Qwen3-32B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-32B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-32B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 32 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 39 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-32B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-32B-AWQ>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-32B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n\nModel Spec 40 (gptq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4, Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Qwen3-32B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Qwen3-32B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Qwen3-32B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 32 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 41 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen3-32B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen3-32B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-32B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 42 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, IQ4_NL, IQ4_XS\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-32B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-32B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-32B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 43 (pytorch, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 235\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-235B-A22B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-235B-A22B>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-235B-A22B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 235 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 44 (fp8, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** fp8\n- **Model Size (in billions):** 235\n- **Quantizations:** fp8\n- **Engines**: vLLM, SGLang\n- **Model ID:** Qwen/Qwen3-235B-A22B-FP8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-235B-A22B-FP8>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-235B-A22B-FP8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 235 --model-format fp8 --quantization ${quantization}\n\n\nModel Spec 45 (gptq, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 235\n- **Quantizations:** Int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** QuantTrio/Qwen3-235B-A22B-GPTQ-Int8\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Qwen3-235B-A22B-GPTQ-Int8>`__, `ModelScope <https://modelscope.cn/models/tclf90/Qwen3-235B-A22B-GPTQ-Int8>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 235 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 46 (gptq, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 235\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/Qwen3-235B-A22B-GPTQ-Int4\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/Qwen3-235B-A22B-GPTQ-Int4>`__, `ModelScope <https://modelscope.cn/models/Qwen/Qwen3-235B-A22B-GPTQ-Int4>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 235 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 47 (mlx, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 235\n- **Quantizations:** 3bit, 4bit, 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen/Qwen3-235B-A22B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen/Qwen3-235B-A22B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Qwen3-235B-A22B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 235 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 48 (ggufv2, 235 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 235\n- **Quantizations:** Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q5_K_M, Q6_K, Q8_0, BF16, UD-Q2_K_XL, UD-Q3_K_XL, IQ4_NL, IQ4_XS\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Qwen3-235B-A22B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Qwen3-235B-A22B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Qwen3-235B-A22B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwen3 --size-in-billions 235 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwenlong-l1.rst",
    "content": ".. _models_llm_qwenlong-l1:\n\n========================================\nqwenLong-l1\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** qwenLong-l1\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** QwenLong-L1: Towards Long-Context Large Reasoning Models with Reinforcement Learning\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Tongyi-Zhiwen/QwenLong-L1-32B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Tongyi-Zhiwen/QwenLong-L1-32B>`__, `ModelScope <https://modelscope.cn/models/iic/QwenLong-L1-32B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwenLong-l1 --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Tongyi-Zhiwen/QwenLong-L1-32B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Tongyi-Zhiwen/QwenLong-L1-32B-AWQ>`__, `ModelScope <https://modelscope.cn/models/iic/QwenLong-L1-32B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name qwenLong-l1 --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwq-32b-preview.rst",
    "content": ".. _models_llm_qwq-32b-preview:\n\n========================================\nQwQ-32B-Preview\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** QwQ-32B-Preview\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** QwQ-32B-Preview is an experimental research model developed by the Qwen Team, focused on advancing AI reasoning capabilities.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/QwQ-32B-Preview\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/QwQ-32B-Preview>`__, `ModelScope <https://modelscope.cn/models/Qwen/QwQ-32B-Preview>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B-Preview --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** KirillR/QwQ-32B-Preview-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/KirillR/QwQ-32B-Preview-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B-Preview --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** Q3_K_L, Q4_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** lmstudio-community/QwQ-32B-Preview-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/lmstudio-community/QwQ-32B-Preview-GGUF>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/QwQ-32B-Preview-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B-Preview --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen_QwQ-32B-Preview_MLX-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen_QwQ-32B-Preview_MLX-4bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/QwQ-32B-Preview-MLX-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B-Preview --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 5 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Qwen_QwQ-32B-Preview_MLX-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Qwen_QwQ-32B-Preview_MLX-8bit>`__, `ModelScope <https://modelscope.cn/models/okwinds/QwQ-32B-Preview-MLX-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B-Preview --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 6 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: MLX\n- **Model ID:** mlx-community/QwQ-32B-Preview-bf16\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/QwQ-32B-Preview-bf16>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B-Preview --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/qwq-32b.rst",
    "content": ".. _models_llm_qwq-32b:\n\n========================================\nQwQ-32B\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** QwQ-32B\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, tools\n- **Description:** QwQ is the reasoning model of the Qwen series. Compared with conventional instruction-tuned models, QwQ, which is capable of thinking and reasoning, can achieve significantly enhanced performance in downstream tasks, especially hard problems. QwQ-32B is the medium-sized reasoning model, which is capable of achieving competitive performance against state-of-the-art reasoning models, e.g., DeepSeek-R1, o1-mini.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/QwQ-32B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/QwQ-32B>`__, `ModelScope <https://modelscope.cn/models/Qwen/QwQ-32B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (awq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Qwen/QwQ-32B-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Qwen/QwQ-32B-AWQ>`__, `ModelScope <https://modelscope.cn/models/Qwen/QwQ-32B-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B --size-in-billions 32 --model-format awq --quantization ${quantization}\n\n\nModel Spec 3 (mlx, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 32\n- **Quantizations:** 3bit, 4bit, 6bit, 8bit, bf16\n- **Engines**: MLX\n- **Model ID:** mlx-community/QwQ-32B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/QwQ-32B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/mlx-community/QwQ-32B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B --size-in-billions 32 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q5_K_M, Q6_K, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/QwQ-32B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/QwQ-32B-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/QwQ-32B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name QwQ-32B --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/seallm_v2.5.rst",
    "content": ".. _models_llm_seallm_v2.5:\n\n========================================\nseallm_v2.5\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** seallm_v2.5\n- **Languages:** en, zh, vi, id, th, ms, km, lo, my, tl\n- **Abilities:** generate\n- **Description:** We introduce SeaLLM-7B-v2.5, the state-of-the-art multilingual LLM for Southeast Asian (SEA) languages\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** SeaLLMs/SeaLLM-7B-v2.5\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/SeaLLMs/SeaLLM-7B-v2.5>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seallm_v2.5 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q4_K_M, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** SeaLLMs/SeaLLM-7B-v2.5-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/SeaLLMs/SeaLLM-7B-v2.5-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seallm_v2.5 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/seallm_v2.rst",
    "content": ".. _models_llm_seallm_v2:\n\n========================================\nseallm_v2\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** seallm_v2\n- **Languages:** en, zh, vi, id, th, ms, km, lo, my, tl\n- **Abilities:** generate\n- **Description:** We introduce SeaLLM-7B-v2, the state-of-the-art multilingual LLM for Southeast Asian (SEA) languages\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** SeaLLMs/SeaLLM-7B-v2\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/SeaLLMs/SeaLLM-7B-v2>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seallm_v2 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q4_0, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** SeaLLMs/SeaLLM-7B-v2-gguf\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/SeaLLMs/SeaLLM-7B-v2-gguf>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seallm_v2 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/seallms-v3.rst",
    "content": ".. _models_llm_seallms-v3:\n\n========================================\nseallms-v3\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** seallms-v3\n- **Languages:** en, zh, id, vi, th, ph, ms, mm, kh, la, in\n- **Abilities:** chat\n- **Description:** SeaLLMs - Large Language Models for Southeast Asia\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 1_5 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 1_5\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** SeaLLMs/SeaLLMs-v3-1.5B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/SeaLLMs/SeaLLMs-v3-1.5B-Chat>`__, `ModelScope <https://modelscope.cn/models/SeaLLMs/SeaLLMs-v3-1.5B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seallms-v3 --size-in-billions 1_5 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** SeaLLMs/SeaLLMs-v3-7B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/SeaLLMs/SeaLLMs-v3-7B-Chat>`__, `ModelScope <https://modelscope.cn/models/SeaLLMs/SeaLLMs-v3-7B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seallms-v3 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/seed-oss.rst",
    "content": ".. _models_llm_seed-oss:\n\n========================================\nseed-oss\n========================================\n\n- **Context Length:** 524288\n- **Model Name:** seed-oss\n- **Languages:** en, zh\n- **Abilities:** chat, reasoning, tools\n- **Description:** Seed-OSS is a series of open-source large language models developed by ByteDance's Seed Team, designed for powerful long-context, reasoning, agent and general capabilities, and versatile developer-friendly features. Although trained with only 12T tokens, Seed-OSS achieves excellent performance on several popular open benchmarks.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 36 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 36\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers\n- **Model ID:** ByteDance-Seed/Seed-OSS-36B-Instruct\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/ByteDance-Seed/Seed-OSS-36B-Instruct>`__, `ModelScope <https://modelscope.cn/models/ByteDance-Seed/Seed-OSS-36B-Instruct>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seed-oss --size-in-billions 36 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 36 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 36\n- **Quantizations:** Int8, Int4, Int3\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Seed-OSS-36B-Instruct-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Seed-OSS-36B-Instruct-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/tclf90/Seed-OSS-36B-Instruct-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seed-oss --size-in-billions 36 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (awq, 36 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 36\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers\n- **Model ID:** QuantTrio/Seed-OSS-36B-Instruct-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantTrio/Seed-OSS-36B-Instruct-AWQ>`__, `ModelScope <https://modelscope.cn/models/tclf90/Seed-OSS-36B-Instruct-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seed-oss --size-in-billions 36 --model-format awq --quantization ${quantization}\n\n\nModel Spec 4 (mlx, 36 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 36\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Seed-OSS-36B-Instruct-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Seed-OSS-36B-Instruct-4bit>`__, `ModelScope <https://modelscope.cn/models/mlx-community/Seed-OSS-36B-Instruct-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seed-oss --size-in-billions 36 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 36 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 36\n- **Quantizations:** BF16, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0, UD-IQ1_M, UD-IQ1_S, UD-IQ2_M, UD-IQ2_XXS, UD-IQ3_XXS, UD-Q2_K_XL, UD-Q3_K_XL, UD-Q4_K_XL, UD-Q5_K_XL, UD-Q6_K_XL, UD-Q8_K_XL\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** unsloth/Seed-OSS-36B-Instruct-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/unsloth/Seed-OSS-36B-Instruct-GGUF>`__, `ModelScope <https://modelscope.cn/models/unsloth/Seed-OSS-36B-Instruct-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name seed-oss --size-in-billions 36 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/skywork-math.rst",
    "content": ".. _models_llm_skywork-math:\n\n========================================\nSkywork-Math\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** Skywork-Math\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** Skywork is a series of large models developed by the Kunlun Group · Skywork team.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** skywork/Skywork-13B-Math\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/skywork/Skywork-13B-Math>`__, `ModelScope <https://modelscope.cn/models/skywork/Skywork-13B-Math>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Skywork-Math --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/skywork-or1-preview.rst",
    "content": ".. _models_llm_skywork-or1-preview:\n\n========================================\nskywork-or1-preview\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** skywork-or1-preview\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** The Skywork-OR1 (Open Reasoner 1) model series consists of powerful math and code reasoning models trained using large-scale rule-based reinforcement learning with carefully designed datasets and training recipes.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Skywork/Skywork-OR1-32B-Preview\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Skywork/Skywork-OR1-32B-Preview>`__, `ModelScope <https://modelscope.cn/models/Skywork/Skywork-OR1-32B-Preview>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name skywork-or1-preview --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int4, int8\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Skywork-OR1-32B-Preview-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Skywork-OR1-32B-Preview-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Skywork-OR1-32B-Preview-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name skywork-or1-preview --size-in-billions 32 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Skywork/Skywork-OR1-7B-Preview\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Skywork/Skywork-OR1-7B-Preview>`__, `ModelScope <https://modelscope.cn/models/Skywork/Skywork-OR1-7B-Preview>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name skywork-or1-preview --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 32\n- **Quantizations:** IQ2_M, IQ2_S, IQ2_XS, IQ3_M, IQ3_XS, IQ3_XXS, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_L, Q3_K_M, Q3_K_S, Q3_K_XL, Q4_0, Q4_1, Q4_K_L, Q4_K_M, Q4_K_S, Q5_K_L, Q5_K_M, Q5_K_S, Q6_K, Q6_K_L, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** bartowski/Skywork_Skywork-OR1-32B-Preview-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/Skywork_Skywork-OR1-32B-Preview-GGUF>`__, `ModelScope <https://modelscope.cn/models/bartowski/Skywork_Skywork-OR1-32B-Preview-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name skywork-or1-preview --size-in-billions 32 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** IQ2_M, IQ2_S, IQ2_XS, IQ3_M, IQ3_XS, IQ3_XXS, IQ4_NL, IQ4_XS, Q2_K, Q2_K_L, Q3_K_L, Q3_K_M, Q3_K_S, Q3_K_XL, Q4_0, Q4_1, Q4_K_L, Q4_K_M, Q4_K_S, Q5_K_L, Q5_K_M, Q5_K_S, Q6_K, Q6_K_L, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** bartowski/Skywork_Skywork-OR1-7B-Preview-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/Skywork_Skywork-OR1-7B-Preview-GGUF>`__, `ModelScope <https://modelscope.cn/models/bartowski/Skywork_Skywork-OR1-7B-Preview-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name skywork-or1-preview --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/skywork-or1.rst",
    "content": ".. _models_llm_skywork-or1:\n\n========================================\nskywork-or1\n========================================\n\n- **Context Length:** 131072\n- **Model Name:** skywork-or1\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** We release the final version of Skywork-OR1 (Open Reasoner 1) series of models, including\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Skywork/Skywork-OR1-32B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Skywork/Skywork-OR1-32B>`__, `ModelScope <https://modelscope.cn/models/Skywork/Skywork-OR1-32B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name skywork-or1 --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 32\n- **Quantizations:** Int8, Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Skywork-OR1-32B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Skywork-OR1-32B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Skywork-OR1-32B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name skywork-or1 --size-in-billions 32 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** Skywork/Skywork-OR1-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Skywork/Skywork-OR1-7B>`__, `ModelScope <https://modelscope.cn/models/Skywork/Skywork-OR1-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name skywork-or1 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** Int8, Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** JunHowie/Skywork-OR1-7B-GPTQ-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/JunHowie/Skywork-OR1-7B-GPTQ-{quantization}>`__, `ModelScope <https://modelscope.cn/models/JunHowie/Skywork-OR1-7B-GPTQ-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name skywork-or1 --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/skywork.rst",
    "content": ".. _models_llm_skywork:\n\n========================================\nSkywork\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** Skywork\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** Skywork is a series of large models developed by the Kunlun Group · Skywork team.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** skywork/Skywork-13B-base\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/skywork/Skywork-13B-base>`__, `ModelScope <https://modelscope.cn/models/skywork/Skywork-13B-base>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Skywork --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/telechat.rst",
    "content": ".. _models_llm_telechat:\n\n========================================\ntelechat\n========================================\n\n- **Context Length:** 8192\n- **Model Name:** telechat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** The TeleChat is a large language model developed and trained by China Telecom Artificial Intelligence Technology Co., LTD. The 7B model base is trained with 1.5 trillion Tokens and 3 trillion Tokens and Chinese high-quality corpus.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** Tele-AI/telechat-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Tele-AI/telechat-7B>`__, `ModelScope <https://modelscope.cn/models/TeleAI/telechat-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name telechat --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (gptq, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 7\n- **Quantizations:** int4, int8\n- **Engines**: Transformers\n- **Model ID:** Tele-AI/telechat-7B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Tele-AI/telechat-7B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/TeleAI/telechat-7B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name telechat --size-in-billions 7 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 12\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** Tele-AI/TeleChat-12B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Tele-AI/TeleChat-12B>`__, `ModelScope <https://modelscope.cn/models/TeleAI/TeleChat-12B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name telechat --size-in-billions 12 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (gptq, 12 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 12\n- **Quantizations:** int4, int8\n- **Engines**: Transformers\n- **Model ID:** Tele-AI/TeleChat-12B-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Tele-AI/TeleChat-12B-{quantization}>`__, `ModelScope <https://modelscope.cn/models/TeleAI/TeleChat-12B-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name telechat --size-in-billions 12 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 5 (pytorch, 52 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 52\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** Tele-AI/TeleChat-52B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/Tele-AI/TeleChat-52B>`__, `ModelScope <https://modelscope.cn/models/TeleAI/TeleChat-52B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name telechat --size-in-billions 52 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/tiny-llama.rst",
    "content": ".. _models_llm_tiny-llama:\n\n========================================\ntiny-llama\n========================================\n\n- **Context Length:** 2048\n- **Model Name:** tiny-llama\n- **Languages:** en\n- **Abilities:** generate\n- **Description:** The TinyLlama project aims to pretrain a 1.1B Llama model on 3 trillion tokens.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (ggufv2, 1 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 1\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF>`__, `ModelScope <https://modelscope.cn/models/Xorbits/TinyLlama-1.1B-step-50K-105b-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name tiny-llama --size-in-billions 1 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/wizardcoder-python-v1.0.rst",
    "content": ".. _models_llm_wizardcoder-python-v1.0:\n\n========================================\nwizardcoder-python-v1.0\n========================================\n\n- **Context Length:** 100000\n- **Model Name:** wizardcoder-python-v1.0\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** \n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** WizardLMTeam/WizardCoder-Python-13B-V1.0\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLMTeam/WizardCoder-Python-13B-V1.0>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/WizardCoder-Python-13B-V1.0>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name wizardcoder-python-v1.0 --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** WizardLMTeam/WizardCoder-Python-34B-V1.0\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLMTeam/WizardCoder-Python-34B-V1.0>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/WizardCoder-Python-34B-V1.0>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name wizardcoder-python-v1.0 --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 7\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/WizardCoder-Python-7B-V1.0-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/WizardCoder-Python-7B-V1.0-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name wizardcoder-python-v1.0 --size-in-billions 7 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 13\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/WizardCoder-Python-13B-V1.0-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/WizardCoder-Python-13B-V1.0-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name wizardcoder-python-v1.0 --size-in-billions 13 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 34\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/WizardCoder-Python-34B-V1.0-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/WizardCoder-Python-34B-V1.0-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name wizardcoder-python-v1.0 --size-in-billions 34 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/wizardmath-v1.0.rst",
    "content": ".. _models_llm_wizardmath-v1.0:\n\n========================================\nwizardmath-v1.0\n========================================\n\n- **Context Length:** 2048\n- **Model Name:** wizardmath-v1.0\n- **Languages:** en\n- **Abilities:** chat\n- **Description:** WizardMath is an open-source LLM trained by fine-tuning Llama2 with Evol-Instruct, specializing in math.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** WizardLMTeam/WizardMath-7B-V1.0\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLMTeam/WizardMath-7B-V1.0>`__, `ModelScope <https://modelscope.cn/models/Xorbits/WizardMath-7B-V1.0>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name wizardmath-v1.0 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 70 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 70\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** WizardLMTeam/WizardMath-70B-V1.0\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/WizardLMTeam/WizardMath-70B-V1.0>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name wizardmath-v1.0 --size-in-billions 70 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/xiyansql-qwencoder-2504.rst",
    "content": ".. _models_llm_xiyansql-qwencoder-2504:\n\n========================================\nXiYanSQL-QwenCoder-2504\n========================================\n\n- **Context Length:** 32768\n- **Model Name:** XiYanSQL-QwenCoder-2504\n- **Languages:** en, zh\n- **Abilities:** chat, tools\n- **Description:** The XiYanSQL-QwenCoder models, as multi-dialect SQL base models, demonstrating robust SQL generation capabilities.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** XGenerationLab/XiYanSQL-QwenCoder-7B-2504\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/XGenerationLab/XiYanSQL-QwenCoder-7B-2504>`__, `ModelScope <https://modelscope.cn/models/XGenerationLab/XiYanSQL-QwenCoder-7B-2504>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name XiYanSQL-QwenCoder-2504 --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 32 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 32\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** XGenerationLab/XiYanSQL-QwenCoder-32B-2504\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/XGenerationLab/XiYanSQL-QwenCoder-32B-2504>`__, `ModelScope <https://modelscope.cn/models/XGenerationLab/XiYanSQL-QwenCoder-32B-2504>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name XiYanSQL-QwenCoder-2504 --size-in-billions 32 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/xverse-chat.rst",
    "content": ".. _models_llm_xverse-chat:\n\n========================================\nxverse-chat\n========================================\n\n- **Context Length:** 2048\n- **Model Name:** xverse-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** XVERSEB-Chat is the aligned version of model XVERSE.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** xverse/XVERSE-7B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-7B-Chat>`__, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-7B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name xverse-chat --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** xverse/XVERSE-13B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-13B-Chat>`__, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-13B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name xverse-chat --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/xverse.rst",
    "content": ".. _models_llm_xverse:\n\n========================================\nxverse\n========================================\n\n- **Context Length:** 2048\n- **Model Name:** xverse\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** XVERSE is a multilingual large language model, independently developed by Shenzhen Yuanxiang Technology.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 7 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 7\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** xverse/XVERSE-7B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-7B>`__, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-7B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name xverse --size-in-billions 7 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 13 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 13\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** xverse/XVERSE-13B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-13B>`__, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-13B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name xverse --size-in-billions 13 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 65 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 65\n- **Quantizations:** none\n- **Engines**: Transformers\n- **Model ID:** xverse/XVERSE-65B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/xverse/XVERSE-65B>`__, `ModelScope <https://modelscope.cn/models/xverse/XVERSE-65B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name xverse --size-in-billions 65 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/yi-1.5-chat-16k.rst",
    "content": ".. _models_llm_yi-1.5-chat-16k:\n\n========================================\nYi-1.5-chat-16k\n========================================\n\n- **Context Length:** 16384\n- **Model Name:** Yi-1.5-chat-16k\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** Yi-1.5 is an upgraded version of Yi. It is continuously pre-trained on Yi with a high-quality corpus of 500B tokens and fine-tuned on 3M diverse fine-tuning samples.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-1.5-9B-Chat-16K\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-1.5-9B-Chat-16K>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-1.5-9B-Chat-16K>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat-16k --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-1.5-34B-Chat-16K\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-1.5-34B-Chat-16K>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-1.5-34B-Chat-16K>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat-16k --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (ggufv2, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 9\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** QuantFactory/Yi-1.5-9B-Chat-16K-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/QuantFactory/Yi-1.5-9B-Chat-16K-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat-16k --size-in-billions 9 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 34\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_K_M, Q4_K_S, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** bartowski/Yi-1.5-34B-Chat-16K-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/bartowski/Yi-1.5-34B-Chat-16K-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat-16k --size-in-billions 34 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/yi-1.5-chat.rst",
    "content": ".. _models_llm_yi-1.5-chat:\n\n========================================\nYi-1.5-chat\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** Yi-1.5-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** Yi-1.5 is an upgraded version of Yi. It is continuously pre-trained on Yi with a high-quality corpus of 500B tokens and fine-tuned on 3M diverse fine-tuning samples.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 6\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-1.5-6B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-1.5-6B-Chat>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-1.5-6B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 6 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-1.5-9B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-1.5-9B-Chat>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-1.5-9B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-1.5-34B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-1.5-34B-Chat>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-1.5-34B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 6\n- **Quantizations:** Q3_K_L, Q4_K_M, Q5_K_M, Q6_K, Q8_0, f32\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** lmstudio-community/Yi-1.5-6B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/lmstudio-community/Yi-1.5-6B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 6 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 5 (ggufv2, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 9\n- **Quantizations:** Q3_K_L, Q4_K_M, Q5_K_M, Q6_K, Q8_0, f32\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** lmstudio-community/Yi-1.5-9B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/lmstudio-community/Yi-1.5-9B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 9 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 6 (ggufv2, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 34\n- **Quantizations:** Q2_K, Q3_K_L, Q4_K_M, Q5_K_M, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** lmstudio-community/Yi-1.5-34B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/lmstudio-community/Yi-1.5-34B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 34 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 7 (gptq, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 6\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** modelscope/Yi-1.5-6B-Chat-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/modelscope/Yi-1.5-6B-Chat-GPTQ>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Yi-1.5-6B-Chat-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 6 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 8 (gptq, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 9\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** modelscope/Yi-1.5-9B-Chat-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/modelscope/Yi-1.5-9B-Chat-GPTQ>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Yi-1.5-9B-Chat-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 9 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 9 (gptq, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 34\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** modelscope/Yi-1.5-34B-Chat-GPTQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/modelscope/Yi-1.5-34B-Chat-GPTQ>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Yi-1.5-34B-Chat-GPTQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 34 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 10 (awq, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 6\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** modelscope/Yi-1.5-6B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/modelscope/Yi-1.5-6B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Yi-1.5-6B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 6 --model-format awq --quantization ${quantization}\n\n\nModel Spec 11 (awq, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 9\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** modelscope/Yi-1.5-9B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/modelscope/Yi-1.5-9B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Yi-1.5-9B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 9 --model-format awq --quantization ${quantization}\n\n\nModel Spec 12 (awq, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** awq\n- **Model Size (in billions):** 34\n- **Quantizations:** Int4\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** modelscope/Yi-1.5-34B-Chat-AWQ\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/modelscope/Yi-1.5-34B-Chat-AWQ>`__, `ModelScope <https://modelscope.cn/models/AI-ModelScope/Yi-1.5-34B-Chat-AWQ>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 34 --model-format awq --quantization ${quantization}\n\n\nModel Spec 13 (mlx, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 6\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Yi-1.5-6B-Chat-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Yi-1.5-6B-Chat-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 6 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 14 (mlx, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 6\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Yi-1.5-6B-Chat-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Yi-1.5-6B-Chat-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 6 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 15 (mlx, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 9\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Yi-1.5-9B-Chat-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Yi-1.5-9B-Chat-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 9 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 16 (mlx, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 9\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Yi-1.5-9B-Chat-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Yi-1.5-9B-Chat-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 9 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 17 (mlx, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 34\n- **Quantizations:** 4bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Yi-1.5-34B-Chat-4bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Yi-1.5-34B-Chat-4bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 34 --model-format mlx --quantization ${quantization}\n\n\nModel Spec 18 (mlx, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** mlx\n- **Model Size (in billions):** 34\n- **Quantizations:** 8bit\n- **Engines**: MLX\n- **Model ID:** mlx-community/Yi-1.5-34B-Chat-8bit\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/mlx-community/Yi-1.5-34B-Chat-8bit>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5-chat --size-in-billions 34 --model-format mlx --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/yi-1.5.rst",
    "content": ".. _models_llm_yi-1.5:\n\n========================================\nYi-1.5\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** Yi-1.5\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** Yi-1.5 is an upgraded version of Yi. It is continuously pre-trained on Yi with a high-quality corpus of 500B tokens and fine-tuned on 3M diverse fine-tuning samples.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 6\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-1.5-6B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-1.5-6B>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-1.5-6B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5 --size-in-billions 6 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-1.5-9B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-1.5-9B>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-1.5-9B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5 --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-1.5-34B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-1.5-34B>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-1.5-34B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-1.5 --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/yi-200k.rst",
    "content": ".. _models_llm_yi-200k:\n\n========================================\nYi-200k\n========================================\n\n- **Context Length:** 262144\n- **Model Name:** Yi-200k\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** The Yi series models are large language models trained from scratch by developers at 01.AI.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (pytorch, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 6\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-6B-200K\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-6B-200K>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-6B-200K>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-200k --size-in-billions 6 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-34B-200K\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-34B-200K>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-34B-200K>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-200k --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/yi-chat.rst",
    "content": ".. _models_llm_yi-chat:\n\n========================================\nYi-chat\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** Yi-chat\n- **Languages:** en, zh\n- **Abilities:** chat\n- **Description:** The Yi series models are large language models trained from scratch by developers at 01.AI.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (gptq, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** gptq\n- **Model Size (in billions):** 34\n- **Quantizations:** 8bits\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-34B-Chat-{quantization}\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-34B-Chat-{quantization}>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-34B-Chat-{quantization}>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-chat --size-in-billions 34 --model-format gptq --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 6\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-6B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-6B-Chat>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-6B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-chat --size-in-billions 6 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-34B-Chat\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-34B-Chat>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-34B-Chat>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-chat --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (ggufv2, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 34\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: vLLM, llama.cpp\n- **Model ID:** TheBloke/Yi-34B-Chat-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Yi-34B-Chat-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi-chat --size-in-billions 34 --model-format ggufv2 --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/llm/yi.rst",
    "content": ".. _models_llm_yi:\n\n========================================\nYi\n========================================\n\n- **Context Length:** 4096\n- **Model Name:** Yi\n- **Languages:** en, zh\n- **Abilities:** generate\n- **Description:** The Yi series models are large language models trained from scratch by developers at 01.AI.\n\nSpecifications\n^^^^^^^^^^^^^^\n\n\nModel Spec 1 (ggufv2, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** ggufv2\n- **Model Size (in billions):** 34\n- **Quantizations:** Q2_K, Q3_K_L, Q3_K_M, Q3_K_S, Q4_0, Q4_K_M, Q4_K_S, Q5_0, Q5_K_M, Q5_K_S, Q6_K, Q8_0\n- **Engines**: llama.cpp\n- **Model ID:** TheBloke/Yi-34B-GGUF\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/TheBloke/Yi-34B-GGUF>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi --size-in-billions 34 --model-format ggufv2 --quantization ${quantization}\n\n\nModel Spec 2 (pytorch, 6 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 6\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-6B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-6B>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-6B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi --size-in-billions 6 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 3 (pytorch, 9 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 9\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-9B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-9B>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-9B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi --size-in-billions 9 --model-format pytorch --quantization ${quantization}\n\n\nModel Spec 4 (pytorch, 34 Billion)\n++++++++++++++++++++++++++++++++++++++++\n\n- **Model Format:** pytorch\n- **Model Size (in billions):** 34\n- **Quantizations:** none\n- **Engines**: vLLM, Transformers, SGLang\n- **Model ID:** 01-ai/Yi-34B\n- **Model Hubs**:  `Hugging Face <https://huggingface.co/01-ai/Yi-34B>`__, `ModelScope <https://modelscope.cn/models/01ai/Yi-34B>`__\n\nExecute the following command to launch the model, remember to replace ``${quantization}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${engine} --model-name Yi --size-in-billions 34 --model-format pytorch --quantization ${quantization}\n\n"
  },
  {
    "path": "doc/source/models/builtin/rerank/bce-reranker-base_v1.rst",
    "content": ".. _models_builtin_bce-reranker-base_v1:\n\n====================\nbce-reranker-base_v1\n====================\n\n- **Model Name:** bce-reranker-base_v1\n- **Languages:** en, zh\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** maidalun1020/bce-reranker-base_v1\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bce-reranker-base_v1 --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/bge-reranker-base.rst",
    "content": ".. _models_builtin_bge-reranker-base:\n\n=================\nbge-reranker-base\n=================\n\n- **Model Name:** bge-reranker-base\n- **Languages:** en, zh\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** BAAI/bge-reranker-base\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-reranker-base --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/bge-reranker-large.rst",
    "content": ".. _models_builtin_bge-reranker-large:\n\n==================\nbge-reranker-large\n==================\n\n- **Model Name:** bge-reranker-large\n- **Languages:** en, zh\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** BAAI/bge-reranker-large\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-reranker-large --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/bge-reranker-v2-gemma.rst",
    "content": ".. _models_builtin_bge-reranker-v2-gemma:\n\n=====================\nbge-reranker-v2-gemma\n=====================\n\n- **Model Name:** bge-reranker-v2-gemma\n- **Languages:** en, zh, multilingual\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** BAAI/bge-reranker-v2-gemma\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-reranker-v2-gemma --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/bge-reranker-v2-m3.rst",
    "content": ".. _models_builtin_bge-reranker-v2-m3:\n\n==================\nbge-reranker-v2-m3\n==================\n\n- **Model Name:** bge-reranker-v2-m3\n- **Languages:** en, zh, multilingual\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** BAAI/bge-reranker-v2-m3\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-reranker-v2-m3 --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/bge-reranker-v2-minicpm-layerwise.rst",
    "content": ".. _models_builtin_bge-reranker-v2-minicpm-layerwise:\n\n=================================\nbge-reranker-v2-minicpm-layerwise\n=================================\n\n- **Model Name:** bge-reranker-v2-minicpm-layerwise\n- **Languages:** en, zh, multilingual\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** BAAI/bge-reranker-v2-minicpm-layerwise\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name bge-reranker-v2-minicpm-layerwise --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/index.rst",
    "content": ".. _models_rerank_index:\n\n================\nRerank Models\n================\n\nThe following is a list of built-in rerank models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  \n   bce-reranker-base_v1\n  \n   bge-reranker-base\n  \n   bge-reranker-large\n  \n   bge-reranker-v2-gemma\n  \n   bge-reranker-v2-m3\n  \n   bge-reranker-v2-minicpm-layerwise\n  \n   jina-reranker-v2\n  \n   jina-reranker-v3\n  \n   minicpm-reranker\n  \n   qwen3-reranker-0.6b\n  \n   qwen3-reranker-4b\n  \n   qwen3-reranker-8b\n  \n   qwen3-vl-reranker-2b\n  \n   qwen3-vl-reranker-8b\n  "
  },
  {
    "path": "doc/source/models/builtin/rerank/jina-reranker-v2.rst",
    "content": ".. _models_builtin_jina-reranker-v2:\n\n================\njina-reranker-v2\n================\n\n- **Model Name:** jina-reranker-v2\n- **Languages:** en, zh, multilingual\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** jinaai/jina-reranker-v2-base-multilingual\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name jina-reranker-v2 --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/jina-reranker-v3.rst",
    "content": ".. _models_builtin_jina-reranker-v3:\n\n================\njina-reranker-v3\n================\n\n- **Model Name:** jina-reranker-v3\n- **Languages:** en, zh, multilingual\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** jinaai/jina-reranker-v3\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name jina-reranker-v3 --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/minicpm-reranker.rst",
    "content": ".. _models_builtin_minicpm-reranker:\n\n================\nminicpm-reranker\n================\n\n- **Model Name:** minicpm-reranker\n- **Languages:** en, zh\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** openbmb/MiniCPM-Reranker\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name minicpm-reranker --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/qwen3-reranker-0.6b.rst",
    "content": ".. _models_builtin_qwen3-reranker-0.6b:\n\n===================\nQwen3-Reranker-0.6B\n===================\n\n- **Model Name:** Qwen3-Reranker-0.6B\n- **Languages:** en, zh\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen3-Reranker-0.6B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-Reranker-0.6B --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/qwen3-reranker-4b.rst",
    "content": ".. _models_builtin_qwen3-reranker-4b:\n\n=================\nQwen3-Reranker-4B\n=================\n\n- **Model Name:** Qwen3-Reranker-4B\n- **Languages:** en, zh\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen3-Reranker-4B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-Reranker-4B --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/qwen3-reranker-8b.rst",
    "content": ".. _models_builtin_qwen3-reranker-8b:\n\n=================\nQwen3-Reranker-8B\n=================\n\n- **Model Name:** Qwen3-Reranker-8B\n- **Languages:** en, zh\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen3-Reranker-8B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-Reranker-8B --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/qwen3-vl-reranker-2b.rst",
    "content": ".. _models_builtin_qwen3-vl-reranker-2b:\n\n====================\nQwen3-VL-Reranker-2B\n====================\n\n- **Model Name:** Qwen3-VL-Reranker-2B\n- **Languages:** en, zh\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen3-VL-Reranker-2B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-VL-Reranker-2B --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/rerank/qwen3-vl-reranker-8b.rst",
    "content": ".. _models_builtin_qwen3-vl-reranker-8b:\n\n====================\nQwen3-VL-Reranker-8B\n====================\n\n- **Model Name:** Qwen3-VL-Reranker-8B\n- **Languages:** en, zh\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Qwen/Qwen3-VL-Reranker-8B\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Qwen3-VL-Reranker-8B --model-type rerank"
  },
  {
    "path": "doc/source/models/builtin/video/cogvideox-2b.rst",
    "content": ".. _models_builtin_cogvideox-2b:\n\n============\nCogVideoX-2b\n============\n\n- **Model Name:** CogVideoX-2b\n- **Model Family:** CogVideoX\n- **Abilities:** text2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** THUDM/CogVideoX-2b\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name CogVideoX-2b --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/cogvideox-5b.rst",
    "content": ".. _models_builtin_cogvideox-5b:\n\n============\nCogVideoX-5b\n============\n\n- **Model Name:** CogVideoX-5b\n- **Model Family:** CogVideoX\n- **Abilities:** text2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** THUDM/CogVideoX-5b\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name CogVideoX-5b --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/hunyuanvideo.rst",
    "content": ".. _models_builtin_hunyuanvideo:\n\n============\nHunyuanVideo\n============\n\n- **Model Name:** HunyuanVideo\n- **Model Family:** HunyuanVideo\n- **Abilities:** text2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** hunyuanvideo-community/HunyuanVideo\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name HunyuanVideo --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/index.rst",
    "content": ".. _models_video_index:\n\n================\nVideo Models\n================\n\nThe following is a list of built-in video models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  \n   cogvideox-2b\n  \n   cogvideox-5b\n  \n   hunyuanvideo\n  \n   wan2.1-1.3b\n  \n   wan2.1-14b\n  \n   wan2.1-flf2v-14b-720p\n  \n   wan2.1-i2v-14b-480p\n  \n   wan2.1-i2v-14b-720p\n  \n   wan2.2-a14b\n  \n   wan2.2-i2v-a14b\n  \n   wan2.2-ti2v-5b\n  "
  },
  {
    "path": "doc/source/models/builtin/video/wan2.1-1.3b.rst",
    "content": ".. _models_builtin_wan2.1-1.3b:\n\n===========\nWan2.1-1.3B\n===========\n\n- **Model Name:** Wan2.1-1.3B\n- **Model Family:** Wan\n- **Abilities:** text2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Wan-AI/Wan2.1-T2V-1.3B-Diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Wan2.1-1.3B --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/wan2.1-14b.rst",
    "content": ".. _models_builtin_wan2.1-14b:\n\n==========\nWan2.1-14B\n==========\n\n- **Model Name:** Wan2.1-14B\n- **Model Family:** Wan\n- **Abilities:** text2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Wan-AI/Wan2.1-T2V-14B-Diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Wan2.1-14B --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/wan2.1-flf2v-14b-720p.rst",
    "content": ".. _models_builtin_wan2.1-flf2v-14b-720p:\n\n=====================\nWan2.1-flf2v-14B-720p\n=====================\n\n- **Model Name:** Wan2.1-flf2v-14B-720p\n- **Model Family:** Wan\n- **Abilities:** firstlastframe2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Wan-AI/Wan2.1-FLF2V-14B-720P-diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Wan2.1-flf2v-14B-720p --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/wan2.1-i2v-14b-480p.rst",
    "content": ".. _models_builtin_wan2.1-i2v-14b-480p:\n\n===================\nWan2.1-i2v-14B-480p\n===================\n\n- **Model Name:** Wan2.1-i2v-14B-480p\n- **Model Family:** Wan\n- **Abilities:** image2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Wan-AI/Wan2.1-I2V-14B-480P-Diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/wan2.1-i2v-14b-720p.rst",
    "content": ".. _models_builtin_wan2.1-i2v-14b-720p:\n\n===================\nWan2.1-i2v-14B-720p\n===================\n\n- **Model Name:** Wan2.1-i2v-14B-720p\n- **Model Family:** Wan\n- **Abilities:** image2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Wan-AI/Wan2.1-I2V-14B-720P-Diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Wan2.1-i2v-14B-720p --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/wan2.2-a14b.rst",
    "content": ".. _models_builtin_wan2.2-a14b:\n\n===========\nWan2.2-A14B\n===========\n\n- **Model Name:** Wan2.2-A14B\n- **Model Family:** Wan\n- **Abilities:** text2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Wan-AI/Wan2.2-T2V-A14B-Diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Wan2.2-A14B --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/wan2.2-i2v-a14b.rst",
    "content": ".. _models_builtin_wan2.2-i2v-a14b:\n\n===============\nWan2.2-i2v-A14B\n===============\n\n- **Model Name:** Wan2.2-i2v-A14B\n- **Model Family:** Wan\n- **Abilities:** image2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Wan-AI/Wan2.2-I2V-A14B-Diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Wan2.2-i2v-A14B --model-type video"
  },
  {
    "path": "doc/source/models/builtin/video/wan2.2-ti2v-5b.rst",
    "content": ".. _models_builtin_wan2.2-ti2v-5b:\n\n==============\nWan2.2-ti2v-5B\n==============\n\n- **Model Name:** Wan2.2-ti2v-5B\n- **Model Family:** Wan\n- **Abilities:** text2video, image2video\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** Wan-AI/Wan2.2-TI2V-5B-Diffusers\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name Wan2.2-ti2v-5B --model-type video"
  },
  {
    "path": "doc/source/models/custom.rst",
    "content": ".. _models_custom:\n\n=============\nCustom Models\n=============\nXinference provides a flexible and comprehensive way to integrate, manage, and utilize custom models.\n\n\nDirectly launch an existing model\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSince ``v0.14.0``, you can directly launch an existing model by passing ``model_path`` to the launch interface without downloading it.\nThis way requires that the model's ``model_family`` is among the built-in supported models,\nand eliminates the hassle of registering the model.\n\nFor example:\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference launch --model-path <model_file_path> --model-engine <engine> -n qwen1.5-chat\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://127.0.0.1:9997/v1/models' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n      \"model_engine\": \"<engine>\",\n      \"model_name\": \"qwen1.5-chat\",\n      \"model_path\": \"<model_file_path>\"\n    }'\n\n  .. code-tab:: python\n\n    from xinference.client import RESTfulClient\n    client = RESTfulClient(\"http://127.0.0.1:9997\")\n    model_uid = client.launch_model(\n      model_engine=\"<inference_engine>\",\n      model_name=\"qwen1.5-chat\",\n      model_path=\"<model_file_path>\"\n    )\n    print('Model uid: ' + model_uid)\n\n\nThe above example demonstrates how to directly launch a qwen1.5-chat model file without registering it.\n\nFor distributed scenarios, if your model file is on a specific worker,\nyou can directly launch it using the ``worker_ip`` and ``model_path`` parameters with the launch interface.\n\n.. note::\n   For CLI usage, prefer ``--model-path`` (kebab-case). ``--model_path`` is legacy-compatible but not recommended.\n\nDefine a custom model\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWeb UI: Automatic LLM Config Parsing\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. versionadded:: v2.0.0\n\nWhen registering a custom LLM via the Web UI, Xinference can automatically parse the model\nconfiguration and pre-fill key fields for you.\n\nYou only need to provide:\n\n- **Model path / Model ID** (where the model lives, local path or hub ID)\n- **Model Family**\n\nAfter parsing, the UI can auto-populate fields such as:\n\n- ``Context Length``\n- ``Model_Languages``\n- ``Model_Abilities``\n- ``Model_Specs``\n\nYou can review and edit these fields before saving the custom model.\n\nDefine a custom model based on the following templates:\n\n.. tabs::\n\n  .. tab:: LLM\n\n    .. code-block:: json\n\n        {\n            \"version\": 2,\n            \"context_length\": 32768,\n            \"model_name\": \"custom-qwen-2.5\",\n            \"model_lang\": [\n                \"en\",\n                \"zh\"\n            ],\n            \"model_ability\": [\n                \"generate\"\n            ],\n            \"model_description\": \"This is a custom model description.\",\n            \"model_family\": \"my-custom-qwen-2.5\",\n            \"model_specs\": [\n                {\n                    \"model_format\": \"pytorch\",\n                    \"model_size_in_billions\": \"0_5\",\n                    \"quantization\": \"none\",\n                    \"model_id\": null,\n                    \"model_hub\": \"huggingface\",\n                    \"model_uri\": \"file:///path/to/models--Qwen--Qwen2.5-0.5B\",\n                    \"model_revision\": null,\n                    \"activated_size_in_billions\": null\n                }\n            ],\n            \"chat_template\": null,\n            \"stop_token_ids\": null,\n            \"stop\": null,\n            \"reasoning_start_tag\": null,\n            \"reasoning_end_tag\": null,\n            \"cache_config\": null,\n            \"virtualenv\": {\n                \"packages\": [],\n                \"inherit_pip_config\": true,\n                \"index_url\": null,\n                \"extra_index_url\": null,\n                \"find_links\": null,\n                \"trusted_host\": null,\n                \"no_build_isolation\": null\n            },\n            \"is_builtin\": false\n        }\n\n  .. tab:: embedding\n\n    .. code-block:: json\n\n      {\n         \"version\": 2,\n         \"model_name\": \"my-bge-large-zh-v1.5\",\n         \"dimensions\": 1024,\n         \"max_tokens\": 512,\n         \"language\": [\n             \"zh\"\n         ],\n         \"model_specs\": [\n            {\n                \"model_format\": \"pytorch\",\n                \"model_hub\": \"huggingface\",\n                \"model_id\": null,\n                \"model_uri\": \"file:///path/to/my-bge-large-zh-v1.5\",\n                \"model_revision\": null,\n                \"quantization\": \"none\"\n            }\n         ],\n         \"cache_config\": null,\n         \"virtualenv\": {\n            \"packages\": [],\n            \"inherit_pip_config\": true,\n            \"index_url\": null,\n            \"extra_index_url\": null,\n            \"find_links\": null,\n            \"trusted_host\": null,\n            \"no_build_isolation\": null\n         },\n         \"is_builtin\": false\n      }\n\n  .. tab:: Rerank\n\n    .. code-block:: json\n\n      {\n        \"version\": 2,\n        \"model_name\": \"my-bge-reranker-base\",\n        \"model_specs\": [\n            {\n                \"model_format\": \"pytorch\",\n                \"model_hub\": \"huggingface\",\n                \"model_id\": null,\n                \"model_revision\": null,\n                \"model_uri\": \"file:///path/to/my-bge-reranker-base\",\n                \"quantization\": \"none\"\n            }\n        ],\n        \"language\": [\n            \"en\",\n            \"zh\"\n        ],\n        \"type\": \"unknown\",\n        \"max_tokens\": 512,\n        \"virtualenv\": {\n            \"packages\": [],\n            \"inherit_pip_config\": true,\n            \"index_url\": null,\n            \"extra_index_url\": null,\n            \"find_links\": null,\n            \"trusted_host\": null,\n            \"no_build_isolation\": null\n        },\n        \"is_builtin\": false\n      }\n\n  .. tab:: image\n\n    .. code-block:: json\n\n      {\n        \"model_name\": \"my-qwen-image\",\n        \"model_id\": null,\n        \"model_revision\": null,\n        \"model_hub\": \"huggingface\",\n        \"cache_config\": null,\n        \"version\": 2,\n        \"model_family\": \"stable_diffusion\",\n        \"model_ability\": null,\n        \"controlnet\": [],\n        \"default_model_config\": {},\n        \"default_generate_config\": {},\n        \"gguf_model_id\": null,\n        \"gguf_quantizations\": null,\n        \"gguf_model_file_name_template\": null,\n        \"lightning_model_id\": null,\n        \"lightning_versions\": null,\n        \"lightning_model_file_name_template\": null,\n        \"virtualenv\": {\n            \"packages\": [],\n            \"inherit_pip_config\": true,\n            \"index_url\": null,\n            \"extra_index_url\": null,\n            \"find_links\": null,\n            \"trusted_host\": null,\n            \"no_build_isolation\": null\n        },\n        \"model_uri\": \"file:///path/to/my-qwen-image\",\n        \"is_builtin\": false\n      }\n\n  .. tab:: audio\n\n    .. code-block:: json\n\n      {\n        \"model_name\": \"my-ChatTTS\",\n        \"model_id\": null,\n        \"model_revision\": null,\n        \"model_hub\": \"huggingface\",\n        \"cache_config\": null,\n        \"version\": 2,\n        \"model_family\": \"ChatTTS\",\n        \"multilingual\": false,\n        \"language\": null,\n        \"model_ability\": [\n            \"text2audio\"\n        ],\n        \"default_model_config\": null,\n        \"default_transcription_config\": null,\n        \"engine\": null,\n        \"virtualenv\": {\n            \"packages\": [],\n            \"inherit_pip_config\": true,\n            \"index_url\": null,\n            \"extra_index_url\": null,\n            \"find_links\": null,\n            \"trusted_host\": null,\n            \"no_build_isolation\": null\n        },\n        \"model_uri\": \"file:///path/to/my-ChatTTS\",\n        \"is_builtin\": false\n      }\n\n  .. tab:: flexible\n\n    .. code-block:: json\n\n      {\n        \"model_name\": \"my-flexible-model\",\n        \"model_id\": null,\n        \"model_revision\": null,\n        \"model_hub\": \"huggingface\",\n        \"cache_config\": null,\n        \"version\": 2,\n        \"model_description\": \"This is a model description.\",\n        \"model_uri\": \"file:///path/to/my-flexible-model\",\n        \"launcher\": \"xinference.model.flexible.launchers.transformers\",\n        \"launcher_args\": \"{}\",\n        \"virtualenv\": {\n            \"packages\": [],\n            \"inherit_pip_config\": true,\n            \"index_url\": null,\n            \"extra_index_url\": null,\n            \"find_links\": null,\n            \"trusted_host\": null,\n            \"no_build_isolation\": null\n        },\n        \"is_builtin\": false\n      }\n\n* model_name: A string defining the name of the model. The name must start with a letter or a digit and can only contain letters, digits, underscores, or dashes.\n* context_length: An optional integer that specifies the maximum context size the model was trained to accommodate, encompassing both the input and output lengths. If not defined, the default value is 2048 tokens (~1,500 words).\n* dimensions: An interger defining the size of the vector output by the embedding model.\n* max_tokens: An interger defining the maximum number of input tokens the embedding model can process in a single request.\n* model_lang: A list of strings representing the supported languages for the model. Example: [\"en\"], which means that the model supports English.\n* model_ability: A list of strings defining the abilities of the model. It could include options like \"embed\", \"generate\", and \"chat\". In this case, the model has the ability to \"generate\".\n* model_family: A required string representing the family of the model you want to register. This parameter must not conflict with any builtin model names.\n* model_specs: An array of objects defining the specifications of the model. These include:\n   * model_format: A string that defines the model format, like \"pytorch\" or \"ggufv2\".\n* model_size_in_billions: An integer defining the size of the model in billions of parameters.\n* quantizations: A list of strings defining the available quantizations for the model. For PyTorch models, it could be \"4-bit\", \"8-bit\", or \"none\". For ggufv2 models, the quantizations should correspond to values that work with the ``model_file_name_template``.\n  Some engines also support ``fp4`` / ``fp8`` / ``bnb`` formats (see :ref:`installation` for backend support details).\n   * model_id: A string representing the model ID, possibly referring to an identifier used by Hugging Face. **If model_uri is missing, Xinference will try to download the model from the huggingface repository specified here.**.\n   * model_hub: A string representing where to download the model from, like \"Huggingface\" or \"modelscope\"\n   * model_uri: A string representing the URI where the model can be loaded from, such as \"file:///path/to/llama-2-7b\". **When the model format is ggufv2, model_uri must be the specific file path. When the model format is pytorch, model_uri must be the path to the directory containing the model files.** If model URI is absent, Xinference will try to download the model from Hugging Face with the model ID.\n   * model_revision: A string representing the specific version or commit hash of the model files to use from the repository.\n* chat_template: If ``model_ability`` includes ``chat`` , you must configure this option to generate the correct full prompt during chat. This is a Jinja template string. Usually, you can find it in the ``tokenizer_config.json`` file within the model directory.\n* stop_token_ids: If ``model_ability`` includes ``chat`` , you can configure this option to control when the model stops during chat. This is a list of integers, and you can typically extract the corresponding values from the ``generation_config.json`` or ``tokenizer_config.json`` file in the model directory.\n* stop: If ``model_ability`` includes ``chat`` , you can configure this option to control when the model stops during chat. This is a list of strings, and you can typically extract the corresponding values from the ``generation_config.json`` or ``tokenizer_config.json`` file in the model directory.\n* reasoning_start_tag: A special token or prompt used to explicitly instruct the LLM to begin its chain-of-thought or reasoning process in its output.\n* reasoning_end_tag: A special token or prompt used to explicitly mark the end of the model's chain-of-thought or reasoning process in its output.\n* cache_config: A string representing the parameters and rules for how the system stores and manages temporary data (cache).\n* virtualenv: A settings object for model dependency isolation. Please refer to :ref:`this document <virtualenv>` for details.\n\nRegister a Custom Model\n~~~~~~~~~~~~~~~~~~~~~~~\n\nRegister a custom model programmatically:\n\n.. code-block:: python\n\n   import json\n   from xinference.client import Client\n\n   with open('model.json') as fd:\n       model = fd.read()\n\n   # replace with real xinference endpoint\n   endpoint = 'http://localhost:9997'\n   client = Client(endpoint)\n   client.register_model(model_type=\"<model_type>\", model=model, persist=False)\n\nOr via CLI:\n\n.. code-block:: bash\n\n   xinference register --model-type <model_type> --file model.json --persist\n\nNote that replace the ``<model_type>`` above with ``LLM``, ``embedding`` or ``rerank``. The same as below.\n\n\nList the Built-in and Custom Models\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nList built-in and custom models programmatically:\n\n.. code-block:: python\n\n   registrations = client.list_model_registrations(model_type=\"<model_type>\")\n\nOr via CLI:\n\n.. code-block:: bash\n\n   xinference registrations --model-type <model_type>\n\nLaunch the Custom Model\n~~~~~~~~~~~~~~~~~~~~~~~\n\nLaunch the custom model programmatically:\n\n.. code-block:: python\n\n   uid = client.launch_model(model_name='custom-llama-2', model_format='pytorch')\n\nOr via CLI:\n\n.. code-block:: bash\n\n   xinference launch --model-name custom-llama-2 --model-format pytorch\n\nInteract with the Custom Model\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nInvoke the model programmatically:\n\n.. code-block:: python\n\n   model = client.get_model(model_uid=uid)\n   model.generate('What is the largest animal in the world?')\n\nResult:\n\n.. code-block:: json\n\n   {\n      \"id\":\"cmpl-a4a9d9fc-7703-4a44-82af-fce9e3c0e52a\",\n      \"object\":\"text_completion\",\n      \"created\":1692024624,\n      \"model\":\"43e1f69a-3ab0-11ee-8f69-fa163e74fa2d\",\n      \"choices\":[\n         {\n            \"text\":\"\\nWhat does an octopus look like?\\nHow many human hours has an octopus been watching you for?\",\n            \"index\":0,\n            \"logprobs\":\"None\",\n            \"finish_reason\":\"stop\"\n         }\n      ],\n      \"usage\":{\n         \"prompt_tokens\":10,\n         \"completion_tokens\":23,\n         \"total_tokens\":33\n      }\n   }\n\nOr via CLI, replace ``${UID}`` with real model UID:\n\n.. code-block:: bash\n\n   xinference generate --model-uid ${UID}\n\nUnregister the Custom Model\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nUnregister the custom model programmatically:\n\n.. code-block:: python\n\n   model = client.unregister_model(model_type=\"<model_type>\", model_name='custom-llama-2')\n\nOr via CLI:\n\n.. code-block:: bash\n\n   xinference unregister --model-type <model_type> --model-name custom-llama-2\n"
  },
  {
    "path": "doc/source/models/index.rst",
    "content": ".. _models_index:\n\n======\nModels\n======\n\nList Models\n============================\n\nYou can list all models of a certain type that are available to launch in Xinference:\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference registrations --model-type <MODEL_TYPE> \\\n                             [--endpoint \"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\"] \\\n\n  .. code-tab:: bash cURL\n\n    curl http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/model_registrations/<MODEL_TYPE>\n\n  .. code-tab:: python\n\n    from xinference.client import Client\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    print(client.list_model_registrations(model_type='<MODEL_TYPE>'))\n\nThe following ``MODEL_TYPE`` is supported by Xinference:\n\n.. grid:: 2\n\n    .. grid-item-card::  LLM\n      :link: models_llm_index\n      :link-type: ref\n\n      Text generation models or large language models\n\n    .. grid-item-card::  embedding\n      :link: models_embedding_index\n      :link-type: ref\n\n      Text embeddings models\n\n.. grid:: 2\n\n    .. grid-item-card::  image\n      :link: models_image_index\n      :link-type: ref\n\n      Image generation or manipulation models\n\n    .. grid-item-card::  audio\n      :link: models_audio_index\n      :link-type: ref\n\n      Audio models\n\n.. grid:: 2\n\n    .. grid-item-card::  rerank\n      :link: models_rerank_index\n      :link-type: ref\n\n      Rerank models\n\n    .. grid-item-card::  video\n      :link: models_video_index\n      :link-type: ref\n\n      Video models\n\n.. grid:: 2\n\n    .. grid-item-card::  flexible\n      :link: flexible\n      :link-type: ref\n\n      Flexible models (Traditional ML Models)\n\n\n\n\nYou can see all the built-in models supported by xinference :ref:`here <models_builtin_index>`. If the model \nyou need is not available, Xinference also allows you to register your own :ref:`custom models <models_custom>`.\n\n\nLaunch and Terminate Model\n============================\n\nEach running model instance will be assigned a unique model uid. By default, the model uid is equal to the model name.\nThis unique id can be used as a handle for the further usage. You can manually assign it by passing ``--model-uid`` option\nin the launch command. \n\nYou can launch a model in Xinference either via command line or Xinference's Python client:\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference launch --model-name <MODEL_NAME> \\\n                      [--model-engine <MODEL_ENGINE>] \\\n                      [--model-type <MODEL_TYPE>] \\\n                      [--model-uid <MODEL_UID>] \\\n                      [--endpoint \"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\"] \\\n\n\n  .. code-tab:: python\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    model_uid = client.launch_model(\n      model_name=\"<MODEL_NAME>\",\n      model_engine=\"<MODEL_ENGINE>\",\n      model_type=\"<MODEL_TYPE>\"\n      model_uid=\"<MODEL_UID>\"\n    )\n    print(model_uid)\n\n\nFor model type ``LLM``, launching the model requires not only specifying the model name, but also the size of the parameters\n, the model format and the model engine.  Please refer to the list of LLM :ref:`model families <models_llm_index>`.\n\nThe following command gives you the currently running models in Xinference:\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference list [--endpoint \"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\"]\n\n\n  .. code-tab:: bash cURL\n\n    curl http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/models\n\n\n  .. code-tab:: python\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    print(client.list_models())\n\nWhen you no longer need a model that is currently running, you can remove it in the\nfollowing way to free up the resources it occupies:\n\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference terminate --model-uid \"<MODEL_UID>\" [--endpoint \"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\"]\n\n  .. code-tab:: bash cURL\n\n    curl -X DELETE http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/models/<MODEL_UID>\n\n\n  .. code-tab:: python\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    client.terminate_model(model_uid=\"<MODEL_UID>\")\n\n.. note::\n\n  For models that are no longer maintained and depend on outdated libraries (such as ``transformers``),\n  we recommend enabling the :ref:`Model Virtual Environment <model_virtual_env>` feature\n  to ensure they can run properly in a compatible environment.\n\n\nModel Usage\n============================\n\n\n.. grid:: 2\n\n    .. grid-item-card::  Chat & Generate\n      :link: chat\n      :link-type: ref\n\n      Learn how to chat with LLMs in Xinference.\n\n    .. grid-item-card::  Tools\n      :link: tools\n      :link-type: ref\n\n      Learn how to connect LLM with external tools.\n\n\n.. grid:: 2\n\n    .. grid-item-card::  Embeddings\n      :link: embed\n      :link-type: ref\n\n      Learn how to create text embeddings in Xinference.\n\n    .. grid-item-card::  Rerank\n      :link: rerank\n      :link-type: ref\n\n      Learn how to use rerank models in Xinference.\n\n\n.. grid:: 2\n\n    .. grid-item-card::  Images\n      :link: image\n      :link-type: ref\n\n      Learn how to generate images with Xinference.\n\n    .. grid-item-card::  Multimodal\n      :link: multimodal\n      :link-type: ref\n\n      Learn how to process images and audio with LLMs.\n\n\n.. grid:: 2\n\n    .. grid-item-card::  Audio\n      :link: audio\n      :link-type: ref\n\n      Learn how to turn audio into text or text into audio with Xinference.\n\n    .. grid-item-card::  Video\n      :link: video\n      :link-type: ref\n\n      Learn how to generate video with Xinference.\n\n.. grid:: 2\n\n    .. grid-item-card::  flexible\n      :link: flexible\n      :link-type: ref\n\n      Learn how to inference traditional ML models with Xinference.\n\n\n.. toctree::\n   :maxdepth: 2\n\n   xinference_models_hub\n   model_abilities/index\n   builtin/index\n   custom\n   model_update\n   sources/sources\n   virtualenv\n   lora\n   model_memory\n"
  },
  {
    "path": "doc/source/models/lora.rst",
    "content": ".. _lora:\n\n================\nLoRA Integration\n================\n\nCurrently, Xinference supports launching ``LLM`` and ``image`` models with an attached LoRA fine-tuned model.\n\nUsage\n#####\n\nLaunch\n======\nDifferent from built-in models, xinference currently does not involve managing LoRA models.\nUsers need to first download the LoRA model themselves and then provide the storage path of the model files to xinference.\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference launch <options> \n    --lora-modules <lora_name1> <lora_model_path1>\n    --lora-modules <lora_name2> <lora_model_path2>\n    --image-lora-load-kwargs <load_params1> <load_value1>\n    --image-lora-load-kwargs <load_params2> <load_value2>\n    --image-lora-fuse-kwargs <fuse_params1> <fuse_value1>\n    --image-lora-fuse-kwargs <fuse_params2> <fuse_value2>\n\n  .. code-tab:: python\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    lora_model1={'lora_name': <lora_name1>, 'local_path': <lora_model_path1>}\n    lora_model2={'lora_name': <lora_name2>, 'local_path': <lora_model_path2>}\n    lora_models=[lora_model1, lora_model2]\n    image_lora_load_kwargs={'<load_params1>': <load_value1>, '<load_params2>': <load_value2>},\n    image_lora_fuse_kwargs={'<fuse_params1>': <fuse_value1>, '<fuse_params2>': <fuse_value2>}\n\n    peft_model_config = {\n    \"image_lora_load_kwargs\": image_lora_load_params,\n    \"image_lora_fuse_kwargs\": image_lora_fuse_params,\n    \"lora_list\": lora_models\n    }\n    \n    client.launch_model(\n        <other_options>,\n        peft_model_config=peft_model_config\n    )\n\n\nApply\n=====\nFor LLM models, you can only configure one lora model you want when you use the model.\nSpecifically, specify that the ``lora_name`` parameter be configured in the ``generate_config``.\n``lora_name`` corresponds to the name of the lora in the LAUNCH procedure described above.\n\n.. tabs::\n\n  .. code-tab:: python\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    model = client.get_model(\"<model_uid>\")\n    model.chat(\n        messages=[{\"role\": \"user\", \"content\": \"<prompt>\"}],\n        generate_config={\"lora_name\": \"<your_lora_name>\"}\n    )\n\n\nNote\n####\n\n* The options ``image_lora_load_kwargs`` and ``image_lora_fuse_kwargs`` are only applicable to models with model_type ``image``.\n  They correspond to the parameters in the ``load_lora_weights`` and ``fuse_lora`` interfaces of the ``diffusers`` library.\n  If launching an LLM model, these parameters are not required.\n\n* You need to add the parameter lora_name during inference to specify the corresponding lora model. You can specify it in the Additional Inputs option.\n\n* For LLM chat models, currently only LoRA models are supported that do not change the prompt style.\n\n* When using GPU, both LoRA and its base model occupy the same devices.\n"
  },
  {
    "path": "doc/source/models/model_abilities/audio.rst",
    "content": ".. _audio:\n\n=====\nAudio\n=====\n\nLearn how to turn audio into text or text into audio with Xinference.\n\n\nIntroduction\n==================\n\n\nThe Audio API provides three methods for interacting with audio:\n\n\n* The transcriptions endpoint transcribes audio into the input language.\n* The translations endpoint translates audio into English.\n* The speech endpoint generates audio from the input text.\n\n\n.. list-table:: \n   :widths: 25  50\n   :header-rows: 1\n\n   * - API ENDPOINT\n     - OpenAI-compatible ENDPOINT\n\n   * - Transcription API\n     - /v1/audio/transcriptions\n\n   * - Translation API\n     - /v1/audio/translations\n\n   * - Speech API\n     - /v1/audio/speech\n\n\nSupported models\n-------------------\n\nThe audio API is supported with the following models in Xinference:\n\nAudio to text\n~~~~~~~~~~~~~\n\n* :ref:`whisper-tiny <models_builtin_whisper-tiny>`\n* :ref:`whisper-tiny.en <models_builtin_whisper-tiny.en>`\n* :ref:`whisper-base <models_builtin_whisper-base>`\n* :ref:`whisper-base.en <models_builtin_whisper-base.en>`\n* :ref:`whisper-medium <models_builtin_whisper-medium>`\n* :ref:`whisper-medium.en <models_builtin_whisper-medium.en>`\n* :ref:`whisper-large-v3 <models_builtin_whisper-large-v3>`\n* :ref:`whisper-large-v3-turbo <models_builtin_whisper-large-v3-turbo>`\n* :ref:`Belle-distilwhisper-large-v2-zh <models_builtin_belle-distilwhisper-large-v2-zh>`\n* :ref:`Belle-whisper-large-v2-zh <models_builtin_belle-whisper-large-v2-zh>`\n* :ref:`Belle-whisper-large-v3-zh <models_builtin_belle-whisper-large-v3-zh>`\n* :ref:`SenseVoiceSmall <models_builtin_sensevoicesmall>`\n* :ref:`Paraformer-zh <models_builtin_paraformer-zh>`\n\nFor Mac M-series chips only:\n\n* :ref:`whisper-tiny-mlx <models_builtin_whisper-tiny-mlx>`\n* :ref:`whisper-tiny.en-mlx <models_builtin_whisper-tiny.en-mlx>`\n* :ref:`whisper-base-mlx <models_builtin_whisper-base-mlx>`\n* :ref:`whisper-base.en-mlx <models_builtin_whisper-base.en-mlx>`\n* :ref:`whisper-medium-mlx <models_builtin_whisper-medium-mlx>`\n* :ref:`whisper-medium.en-mlx <models_builtin_whisper-medium.en-mlx>`\n* :ref:`whisper-large-v3-mlx <models_builtin_whisper-large-v3-mlx>`\n* :ref:`whisper-large-v3-turbo-mlx <models_builtin_whisper-large-v3-turbo-mlx>`\n\n\nText to audio (TTS)\n~~~~~~~~~~~~~~~~~~~~~\n\n**Models supporting zero-shot** (direct synthesis without reference audio):\n\n* :ref:`ChatTTS <models_builtin_chattts>`\n* :ref:`CosyVoice-300M-SFT <models_builtin_cosyvoice-300m-sft>`\n* :ref:`CosyVoice-300M-Instruct <models_builtin_cosyvoice-300m-instruct>`\n* MeloTTS series\n* :ref:`Kokoro-82M <models_builtin_kokoro-82m>`\n* :ref:`Kokoro-82M-MLX <models_builtin_kokoro-82m-mlx>`\n* :ref:`MegaTTS3 <models_builtin_megatts3>`\n\n**Models supporting voice cloning** (requires reference audio):\n\n* :ref:`CosyVoice-300M <models_builtin_cosyvoice-300m>`\n* :ref:`CosyVoice 2.0 <models_builtin_cosyvoice2-0.5b>`\n* :ref:`FishSpeech-1.5 <models_builtin_fishspeech-1.5>`\n* :ref:`F5-TTS <models_builtin_f5-tts>`\n* :ref:`F5-TTS-MLX <models_builtin_f5-tts-mlx>`\n* :ref:`IndexTTS2 <models_builtin_indextts2>`\n\n**Models supporting emotion control**:\n\n* :ref:`IndexTTS2 <models_builtin_indextts2>`\n\nFor Mac M-series chips only:\n\n* :ref:`F5-TTS-MLX <models_builtin_f5-tts-mlx>`\n* :ref:`Kokoro-82M-MLX <models_builtin_kokoro-82m-mlx>`\n\nQuickstart\n===================\n\nTranscription\n--------------------\n\nThe Transcription API mimics OpenAI's `create transcriptions API <https://platform.openai.com/docs/api-reference/audio/createTranscription>`_.\nWe can try Transcription API out either via cURL, OpenAI Client, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/audio/transcriptions' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"file\": \"<audio bytes>\",\n      }'\n\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\", \n        base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    with open(\"speech.mp3\", \"rb\") as audio_file:\n        client.audio.transcriptions.create(\n            model=<MODEL_UID>,\n            file=audio_file,\n        )\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    with open(\"speech.mp3\", \"rb\") as audio_file:\n        model.transcriptions(audio=audio_file.read())\n\n\n  .. code-tab:: json output\n\n    {\n      \"text\": \"Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger. This is a place where you can get to do that.\"\n    }\n\n\n\nTranslation\n--------------------\n\nThe Translation API mimics OpenAI's `create translations API <https://platform.openai.com/docs/api-reference/audio/createTranslation>`_.\nWe can try Translation API out either via cURL, OpenAI Client, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/audio/translations' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"file\": \"<audio bytes>\",\n      }'\n\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\",\n        base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    with open(\"speech.mp3\", \"rb\") as audio_file:\n        client.audio.translations.create(\n            model=<MODEL_UID>,\n            file=audio_file,\n        )\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    with open(\"speech.mp3\", \"rb\") as audio_file:\n        model.translations(audio=audio_file.read())\n\n\n  .. code-tab:: json output\n\n    {\n      \"text\": \"Hello, my name is Wolfgang and I come from Germany. Where are you heading today?\"\n    }\n\n\nSpeech\n--------------------\n\n.. _audio_speech:\n\nThe Speech API mimics OpenAI's `create speech API <https://platform.openai.com/docs/api-reference/audio/createSpeech>`_.\nWe can try Speech API out either via cURL, OpenAI Client, or Xinference's python client:\n\nSpeech API use non-stream by default as\n\n1. The stream output of ChatTTS is not as good as the non-stream output, please refer to: https://github.com/2noise/ChatTTS/pull/564\n2. The stream requires ffmpeg<7: https://pytorch.org/audio/stable/installation.html#optional-dependencies\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/audio/speech' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"input\": \"<The text to generate audio for>\",\n        \"voice\": \"echo\",\n        \"stream\": True,\n      }'\n\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\",\n        base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    client.audio.speech.create(\n        model=<MODEL_UID>,\n        input=<The text to generate audio for>,\n        voice=\"echo\",\n    )\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    model.speech(\n        input=<The text to generate audio for>,\n        voice=\"echo\",\n        stream: True,\n    )\n\n\n  .. code-tab:: output\n\n    The output will be an audio binary.\n\n\nChatTTS Usage\n~~~~~~~~~~~~~\n\nBasic usage, refer to :ref:`audio speech usage <audio_speech>`.\n\nFixed tone color. We can use fixed tone color provided by\nhttps://github.com/6drf21e/ChatTTS_Speaker,\nDownload the `evaluation_result.csv <https://github.com/6drf21e/ChatTTS_Speaker/blob/main/evaluation_results.csv>`_ ,\ntake ``seed_2155`` as example, we get the ``emb_data`` of it.\n\n.. code-block:: python\n\n    import pandas as pd\n\n    df = pd.read_csv(\"evaluation_results.csv\")\n    emb_data_2155 = df[df['seed_id'] == 'seed_2155'].iloc[0][\"emb_data\"]\n\n\nUse the fixed tone color of ``seed_2155`` to generate speech.\n\n.. code-block:: python\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    resp_bytes = model.speech(\n        voice=emb_data_2155,\n        input=<The text to generate audio for>\n    )\n\n\nCosyVoice Usage\n~~~~~~~~~~~~~~~\n\nCosyVoice has two versions: CosyVoice 1.0 and CosyVoice 2.0. CosyVoice 1.0 has three different models:\n\n- **CosyVoice-300M-SFT**: Choose this model if you just want to convert text to audio. There are pretrained voices available: ['中文女', '中文男', '日语男', '粤语女', '英文女', '英文男', '韩语女']\n- **CosyVoice-300M**: Choose this model if you want to clone voice or convert text to audio in different languages. The ``prompt_speech`` is always required and should be a WAV file. For optimal performance, use a sample rate of 16,000 Hz.\n- **CosyVoice-300M-Instruct**: Choose this model If you need precise control over the tone and pitch.\n\nBasic usage, launch model ``CosyVoice-300M-SFT``.\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/audio/speech' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"input\": \"<The text to generate audio for>\",\n        # ['中文女', '中文男', '日语男', '粤语女', '英文女', '英文男', '韩语女']\n        \"voice\": \"中文女\"\n      }'\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\",\n        base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    response = client.audio.speech.create(\n        model=<MODEL_UID>,\n        input=<The text to generate audio for>,\n        # ['中文女', '中文男', '日语男', '粤语女', '英文女', '英文男', '韩语女']\n        voice=\"中文女\",\n    )\n    response.stream_to_file('1.mp3')\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    speech_bytes = model.speech(\n        input=<The text to generate audio for>,\n        # ['中文女', '中文男', '日语男', '粤语女', '英文女', '英文男', '韩语女']\n        voice=\"中文女\"\n    )\n    with open('1.mp3', 'wb') as f:\n        f.write(speech_bytes)\n\n\nClone voice, launch model ``CosyVoice-300M``.\n\n.. code-block::\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n\n    zero_shot_prompt_text = (\"<the words in the text exactly match \"\n                             \"the audio file of the zero-shot prompt>\")\n    # The words said in the audio file should be identical\n    # to zero_shot_prompt_text.\n    #\n    # The audio input file must be in WAV format.\n    # For optimal performance, use a 16,000 Hz sample rate.\n    #\n    # Files with different sample rates will be resampled to 16,000 Hz,\n    # which may increase processing time.\n    with open(zero_shot_prompt_file, \"rb\") as f:\n        zero_shot_prompt = f.read()\n\n    speech_bytes = model.speech(\n        \"<The text to generate audio for>\",\n        prompt_text=zero_shot_prompt_text,\n        prompt_speech=zero_shot_prompt,\n    )\n\n\nCross lingual usage, launch model ``CosyVoice-300M``.\n\n.. code-block::\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n\n    # The audio input file must be in WAV format.\n    # For optimal performance, use a 16,000 Hz sample rate.\n    #\n    # Files with different sample rates will be resampled to 16,000 Hz,\n    # which may increase processing time.\n    with open(cross_lingual_prompt_file, \"rb\") as f:\n        cross_lingual_prompt = f.read()\n\n    speech_bytes = model.speech(\n        \"<The text to generate audio for>\",  # text could be another language\n        prompt_speech=cross_lingual_prompt,\n    )\n\nInstruction based, launch model ``CosyVoice-300M-Instruct``.\n\n.. code-block::\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n\n    response = model.speech(\n        \"在面对挑战时，他展现了非凡的<strong>勇气</strong>与<strong>智慧</strong>。\",\n        voice=\"中文男\",\n        instruct_text=\"Theo 'Crimson', is a fiery, passionate rebel leader. \"\n        \"Fights with fervor for justice, but struggles with impulsiveness.\",\n    )\n\nCosyVoice 2.0 only has one model, it provides all the capabilities of the three CosyVoice models. The usage is the same as CosyVoice.\n\nCosyVoice 2.0 stream usage, launch model ``CosyVoice2-0.5B``.\n\n.. code-block::\n\n    # Launch model\n    from xinference.client import Client\n\n    model_uid = client.launch_model(\n        model_name=model_name,\n        model_type=\"audio\",\n        download_hub=\"modelscope\",\n    )\n\n    endpoint = \"http://127.0.0.1:9997\"\n    input_string = \"你好，我是通义生成式语音大模型，请问有什么可以帮您的吗？\"\n\n    # Stream request by openai client\n    import openai\n    import tempfile\n\n    openai_client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    # ['中文女', '中文男', '日语男', '粤语女', '英文女', '英文男', '韩语女']\n    response = openai_client.audio.speech.with_streaming_response.create(\n        model=model_uid, input=input_string, voice=\"英文女\"\n    )\n    with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n        response.stream_to_file(f.name)\n        assert os.stat(f.name).st_size > 0\n\n    # Stream request by xinference client\n    response = model.speech(input_string, stream=True)\n    assert inspect.isgenerator(response)\n    with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n        for chunk in response:\n            f.write(chunk)\n\n\nMore instructions and examples, could be found at https://fun-audio-llm.github.io/ .\n\n\nFishSpeech Usage\n~~~~~~~~~~~~~~~~\n\nBasic usage, refer to :ref:`audio speech usage <audio_speech>`.\n\nClone voice, launch model ``FishSpeech-1.5``. Please use `prompt_speech` instead of `reference_audio`\nand `prompt_text` instead of `reference_text` to clone voice from the reference audio for the FishSpeech model.\nThis arguments is aligned to voice cloning of CosyVoice.\n\n.. code-block::\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n\n    # The reference audio file is the voice file\n    # the words said in the file should be identical to reference_text\n    with open(reference_audio_file, \"rb\") as f:\n        reference_audio = f.read()\n    reference_text = \"\"  # text in the audio\n\n    speech_bytes = model.speech(\n        \"<The text to generate audio for>\",\n        prompt_speech=reference_audio,\n        prompt_text=reference_text\n    )\n\n\n\nParaformer Usage\n~~~~~~~~~~~~~~~~\n\n+-------------------------------------------------------+-----+------+------------+---------+---------+\n| model                                                 | vad | punc | timestamp  | speaker | hotword |\n+=======================================================+=====+======+============+=========+=========+\n| :ref:`models_builtin_paraformer-zh`                   | yes | yes  | no         | no      | no      |\n+-------------------------------------------------------+-----+------+------------+---------+---------+\n| :ref:`models_builtin_paraformer-zh-hotword`           | yes | yes  | no         | no      | yes     |\n+-------------------------------------------------------+-----+------+------------+---------+---------+\n| :ref:`models_builtin_paraformer-zh-spk`               | yes | yes  | yes        | yes     | no      |\n+-------------------------------------------------------+-----+------+------------+---------+---------+\n| :ref:`models_builtin_paraformer-zh-long`              | yes | yes  | yes        | yes     | no      |\n+-------------------------------------------------------+-----+------+------------+---------+---------+\n| :ref:`models_builtin_seaco-paraformer-zh` (recommend) | yes | yes  | yes        | yes     | yes     |\n+-------------------------------------------------------+-----+------+------------+---------+---------+\n\n1. **VAD & Punctuation Usage**\n\n   All Paraformer models support VAD and punctuation.\n\n2. **Timestamp & Speaker Usage**\n\n   Only the following models support `timestamp` and `speaker`:\n   \n   - `paraformer-zh-spk`\n   - `paraformer-zh-long`\n   - `seaco-paraformer-zh`\n\n   Among them, only `paraformer-zh-spk` enables **speaker info by default**.\n\n   If you need speaker info when using `paraformer-zh-long` or `seaco-paraformer-zh`:\n\n   - In Web UI: add an extra parameter with key ``spk_model`` and value ``cam++``\n   - In command line: add the option ``--spk_model cam++``\n\n   Example:\n\n   .. code-block:: python\n\n      from xinference.client import Client\n      client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n      model = client.get_model(\"seaco-paraformer-zh\")\n      with open(\"asr_example.wav\", \"rb\") as audio_file:\n          audio = audio_file.read()\n          model.transcriptions(audio, response_format=\"verbose_json\")\n\n3. **Hotword Usage**\n\n   Only the following models support `hotword`:\n   \n   - `paraformer-zh-hotword`\n   - `seaco-paraformer-zh`\n\n   Example:\n\n   .. code-block:: python\n\n      from xinference.client import Client\n      client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n      model = client.get_model(\"seaco-paraformer-zh\")\n      with open(\"asr_example.wav\", \"rb\") as audio_file:\n          audio = audio_file.read()\n          model.transcriptions(audio, hotword=\"小艾 魔搭\")\n\n\n\nSenseVoiceSmall Offline Usage\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNow SenseVoiceSmall use a small vad model ``fsmn-vad``, it will be downloaded thus network required.\n\nFor offline environment, you can download the vad model in advance.\n\nDownload from `huggingface <https://huggingface.co/funasr/fsmn-vad>`_ or `modelscope <https://modelscope.cn/models/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/files>`_.\nAssume downloaded to ``/path/to/fsmn-vad``.\n\nThen when launching SenseVoiceSmall with Web UI, you can add an additional parameter with key ``vad_model`` and value ``/path/to/fsmn-vad`` which is the downloaded path.\nWhen launching with command line, you can add an option ``--vad_model /path/to/fsmn-vad``.\n\n\nKokoro Usage\n~~~~~~~~~~~~\n\nThe Kokoro model supports multiple languages, but the default language is English.\nIf you want to use other languages, such as Chinese, you need to install additional dependency packages\nand add an additional parameter when starting the model.\n\n1. pip install misaki[zh]\n\n2. Initialize the model with the parameter lang_code='z',\n   For all available ``lang_code`` options,\n   please refer to `kokoro source code <https://github.com/hexgrad/kokoro/blob/main/kokoro/pipeline.py#L22>`_.\n   If the model is started through the web UI, an additional\n   parameter needs to be added, with the key as ``lang_code`` and the value as ``z``.\n   If the model is started through the xinference client, the parameters are passed via the launch_model interface:\n\n   .. code-block::\n\n       model_uid = client.launch_model(\n           model_name=\"Kokoro-82M\",\n           model_type=\"audio\",\n           compile=False,\n           download_hub=\"huggingface\",\n           lang_code=\"z\",\n       )\n\n3. When inferring, the voice must start with 'z', for example: ``zf_xiaoyi``.\n   The currently supported voices are: https://huggingface.co/hexgrad/Kokoro-82M/tree/main/voices. For example:\n\n   .. code-block::\n\n       input_string = \"重新启动即可更新\"\n       response = model.speech(input_string, voice=\"zf_xiaoyi\")\n\n\nIndexTTS2 Usage\n~~~~~~~~~~~~\n\nThe IndexTTS2 model supports emotion control, you can use this feature by specifying some additional parameters.\nHere are several examples of how to use IndexTTS2:\n\n1. Synthesize new speech with a single reference audio file (voice cloning):\n\n   .. code-block::\n\n        from xinference.client import Client\n        client = Client(\"http://0.0.0.0:6735\")\n        model = client.get_model(\"IndexTTS2\")\n\n        with open(\"../mp3_test_voice.mp3\", \"rb\") as f:\n            test_prompt_speech = f.read()\n\n        response = model.speech(\n            input=\"Translate for me, what is a surprise!\",\n            prompt_speech=test_prompt_speech,\n        )\n\n2. Using a separate, emotional reference audio file to condition the speech synthesis:\n\n   .. code-block::\n\n        from xinference.client import Client\n        client = Client(\"http://0.0.0.0:6735\")\n        model = client.get_model(\"IndexTTS2\")\n\n        with open(\"../mp3_test_voice.mp3\", \"rb\") as f:\n            test_prompt_speech = f.read()\n\n        with open(\"example/emo_sad.wav\", \"rb\") as f:\n            emo_prompt_speech = f.read()\n\n        response = model.speech(\n            input=\"It's such a shame the singer didn't make it to the finals.\",\n            prompt_speech=test_prompt_speech,\n            emo_audio_prompt=emo_prompt_speech\n        )\n\n3. When an emotional reference audio file is specified, you can optionally set\n   the ``emo_alpha`` to adjust how much it affects the output.\n   Valid range is ``0.0 - 1.0`` , and the default value is ``1.0`` (100%):\n\n   .. code-block::\n\n        from xinference.client import Client\n        client = Client(\"http://0.0.0.0:6735\")\n        model = client.get_model(\"IndexTTS2\")\n\n        with open(\"../mp3_test_voice.mp3\", \"rb\") as f:\n            test_prompt_speech = f.read()\n\n        with open(\"example/emo_sad.wav\", \"rb\") as f:\n            emo_prompt_speech = f.read()\n\n        response = model.speech(\n            input=\"It's such a shame the singer didn't make it to the finals.\",\n            prompt_speech=test_prompt_speech,\n            emo_audio_prompt=emo_prompt_speech,\n            emo_alpha=0.9\n        )\n\n4. It's also possible to omit the emotional reference audio and instead provide\n   an 8-float list specifying the intensity of each emotion, in the following order:\n   ``[happy, angry, sad, afraid, disgusted, melancholic, surprised, calm]`` .\n   You can additionally use the ``use_random`` parameter to introduce stochasticity\n   during inference; the default is ``False`` , and setting it to ``True`` enables\n   randomness:\n\n   .. code-block::\n\n        from xinference.client import Client\n        client = Client(\"http://0.0.0.0:6735\")\n        model = client.get_model(\"IndexTTS2\")\n\n        with open(\"../mp3_test_voice.mp3\", \"rb\") as f:\n            test_prompt_speech = f.read()\n\n        response = model.speech(\n            input=\"Wow, I'm so lucky!\",\n            prompt_speech=test_prompt_speech,\n            emo_vector=[0, 0, 0, 0, 0, 0, 0.45, 0],\n            use_random=False\n        )\n\n5. Alternatively, you can enable ``use_emo_text`` to guide the emotions based on\n   your provided ``text`` script. Your text script will then automatically\n   be converted into emotion vectors.\n   It's recommended to use ``emo_alpha`` around 0.6 (or lower) when using the text\n   emotion modes, for more natural sounding speech.\n   You can introduce randomness with ``use_random`` (default: ``False``;\n   ``True`` enables randomness):\n\n   .. code-block::\n\n        from xinference.client import Client\n        client = Client(\"http://0.0.0.0:6735\")\n        model = client.get_model(\"IndexTTS2\")\n\n        with open(\"../mp3_test_voice.mp3\", \"rb\") as f:\n            test_prompt_speech = f.read()\n\n        response = model.speech(\n            input=\"Quick, hide! He's coming! He's coming to get us!\",\n            prompt_speech=test_prompt_speech,\n            emo_alpha=0.6,\n            use_emo_text=True,\n            use_random=False\n        )\n\n6. It's also possible to directly provide a specific text emotion description\n   via the ``emo_text`` parameter. Your emotion text will then automatically be\n   converted into emotion vectors. This gives you separate control of the text\n   script and the text emotion description:\n\n   .. code-block::\n\n        from xinference.client import Client\n        client = Client(\"http://0.0.0.0:6735\")\n        model = client.get_model(\"IndexTTS2\")\n\n        with open(\"../mp3_test_voice.mp3\", \"rb\") as f:\n            test_prompt_speech = f.read()\n\n        response = model.speech(\n            input=\"Quick, hide! He's coming! He's coming to get us!\",\n            prompt_speech=test_prompt_speech,\n            emo_alpha=0.6,\n            use_emo_text=True,\n            emo_text=\"You scared the hell out of me! Are you a ghost?\",\n            use_random=False\n        )\n\nIndexTTS2 Offline Usage\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nIndexTTS2 requires several small models that are downloaded automatically during initialization.\nFor offline environments, you can download these models to a single directory and specify the directory path.\n\n**Easy Setup Method**\n\nThe simplest way to set up offline usage is to Use the `hf download` command to download the small model in advance:\n\n.. code-block:: bash\n\n    # Create your local models directory\n    mkdir -p /path/to/small_models\n\n    # Download models from Hugging Face\n    hf download facebook/w2v-bert-2.0 --local-dir /path/to/small_models/w2v-bert-2.0\n    hf download funasr/campplus --local-dir /path/to/small_models/campplus\n    hf download nvidia/bigvgan_v2_22khz_80band_256x --local-dir /path/to/small_models/bigvgan\n    hf download amphion/MaskGCT --local-dir /path/to/small_models/MaskGCT\n\nThe final directory structure should look like this:\n\n.. code-block:: text\n\n    /path/to/small_models/\n    ├── w2v-bert-2.0/                 # Feature extraction model\n    ├── campplus/                     # Speaker recognition model\n    ├── bigvgan/                      # Vocoder model\n    └── MaskGCT/                      # Semantic codec model\n\n**Required Models**\n\nThe small models are automatically mapped as follows:\n\n1. **w2v-bert-2.0** (``models--facebook--w2v-bert-2.0``) - Feature extraction model\n2. **campplus** (``models--funasr--campplus``) - Speaker recognition model\n3. **bigvgan** (``models--nvidia--bigvgan_v2_22khz_80band_256x``) - Vocoder model\n4. **semantic_codec** (``models--amphion--MaskGCT``) - Semantic encoding/decoding model\n\n**Launching IndexTTS2 with Offline Models**\n\nWhen launching IndexTTS2 with Web UI, you can add an additional parameter:\n- ``small_models_dir`` - Path to directory containing all small models\n\nWhen launching with command line, you can add the option:\n\n.. code-block:: bash\n\n    xinference launch --model-name IndexTTS2 --model-type audio \\\n        --small_models_dir /path/to/small_models\n\nWhen launching with Python client:\n\n.. code-block:: python\n\n    model_uid = client.launch_model(\n        model_name=\"IndexTTS2\",\n        model_type=\"audio\",\n        small_models_dir=\"/path/to/small_models\"\n    )\n\n\n\n"
  },
  {
    "path": "doc/source/models/model_abilities/chat.rst",
    "content": ".. _chat:\n\n=====================\nChat & Generate\n=====================\n\nLearn how to chat with LLMs in Xinference.\n\nIntroduction\n============\n\nModels equipped with ``chat`` or ``generate`` abilities are frequently referred to as large language models (LLM) or text generation models.\nThese models are designed to respond with text outputs to the inputs they receive, commonly known as \"prompts\".\nTypically, one can direct these models using specific instructions or by providing concrete examples illustrating\nhow to accomplish a task.\n\nModels with ``generate`` capacities are typically pre-trained large language models. On the other hand, models equipped with ``chat``\ncapabilities are finely-tuned and aligned LLMs, optimized for dialogues use case. In most cases, models ending with \"chat\" \n(e.g. ``llama-2-chat``, ``qwen-chat``, etc) are identified as having ``chat`` capabilities. \n\n\nThe Chat API and Generate API offer two distinct approaches for interacting with LLMs:\n\n* The Chat API (like OpenAI's `Chat Completion API <https://platform.openai.com/docs/api-reference/chat/create>`__)\n  can conduct multi-turn conversations.\n\n* The Generate API (like OpenAI's legacy `Completions API <https://platform.openai.com/docs/api-reference/completions/create>`__)\n  allows you to generate text based on a text prompt.\n\n.. list-table:: \n   :widths: 25 25 50\n   :header-rows: 1\n\n   * - MODEL ABILITY\n     - API ENDPOINT\n     - OpenAI-compatible ENDPOINT\n\n   * - chat\n     - Chat API\n     - /v1/chat/completions\n\n   * - generate\n     - Generate API\n     - /v1/completions\n\n\nSupported models\n-------------------\n\nYou can examine the abilities of all the :ref:`builtin LLM models in Xinference <models_llm_index>`.\n\nChat Models\n===================\n\nChat API \n------------\n\nThe Chat API mimics OpenAI's `Chat Completion API <https://platform.openai.com/docs/api-reference/chat/create>`__. \nWe can try Chat API out either via cURL, OpenAI Client, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/chat/completions' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"messages\": [\n            {\n                \"role\": \"system\",\n                \"content\": \"You are a helpful assistant.\"\n            },\n            {\n                \"role\": \"user\",\n                \"content\": \"What is the largest animal?\"\n            }\n        ],\n        \"max_tokens\": 512,\n        \"temperature\": 0.7        \n      }'\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\", \n        base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    client.chat.completions.create(\n        model=\"<MODEL_UID>\",\n        messages=[\n            {\n                \"content\": \"What is the largest animal?\",\n                \"role\": \"user\",\n            }\n        ],\n        max_tokens=512,\n        temperature=0.7\n    )\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import RESTfulClient\n\n    client = RESTfulClient(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    model = client.get_model(\"<MODEL_UID>\")\n    messages = [{\"role\": \"system\", \"content\": \"You are a helpful assistant.\"}, {\"role\": \"user\", \"content\": \"What is the largest animal?\"}]\n    model.chat(\n        messages,\n        generate_config={\n          \"max_tokens\": 512,\n          \"temperature\": 0.7\n        }        \n    )\n\n  .. code-tab:: json output\n\n    {\n      \"id\": \"chatcmpl-8d76b65a-bad0-42ef-912d-4a0533d90d61\",\n      \"model\": \"<MODEL_UID>\",\n      \"object\": \"chat.completion\",\n      \"created\": 1688919187,\n      \"choices\": [\n        {\n          \"index\": 0,\n          \"message\": {\n            \"role\": \"assistant\",\n            \"content\": \"The largest animal that has been scientifically measured is the blue whale, which has a maximum length of around 23 meters (75 feet) for adult animals and can weigh up to 150,000 pounds (68,000 kg). However, it is important to note that this is just an estimate and that the largest animal known to science may be larger still. Some scientists believe that the largest animals may not have a clear \\\"size\\\" in the same way that humans do, as their size can vary depending on the environment and the stage of their life.\"\n          },\n          \"finish_reason\": \"None\"\n        }\n      ],\n      \"usage\": {\n        \"prompt_tokens\": -1,\n        \"completion_tokens\": -1,\n        \"total_tokens\": -1\n      }\n    }\n\n\nYou can find more examples of Chat API in the tutorial notebook:\n\n.. grid:: 1\n\n   .. grid-item-card:: Gradio Chat\n      :link: https://github.com/xorbitsai/inference/blob/main/examples/gradio_chatinterface.py\n\n      Learn from an example of utilizing the Chat API with the Xinference Python client.\n\nHybrid Thinking Models\n----------------------\n\nSome LLMs are marked as ``hybrid`` and can run with or without thinking mode.\n\n.. versionadded:: v1.17.0\n  Request-level ``enable_thinking`` is added in v1.17.0\n\nXinference exposes a request-level ``enable_thinking`` switch that works across different model templates (e.g. Qwen\nuses ``enable_thinking`` while some DeepSeek templates use ``thinking``).\n\nUsage examples:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/chat/completions' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"messages\": [\n            {\"role\": \"user\", \"content\": \"What is the largest animal?\"}\n        ],\n        \"enable_thinking\": false\n      }'\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\",\n        base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    client.chat.completions.create(\n        model=\"<MODEL_UID>\",\n        messages=[\n            {\"role\": \"user\", \"content\": \"What is the largest animal?\"}\n        ],\n        extra_body={\"enable_thinking\": False}\n    )\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import RESTfulClient\n\n    client = RESTfulClient(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    model = client.get_model(\"<MODEL_UID>\")\n    model.chat(\n        [{\"role\": \"user\", \"content\": \"What is the largest animal?\"}],\n        enable_thinking=False,\n    )\n\n  .. code-tab:: python Xinference Python Client (explicit chat_template_kwargs)\n\n    model.chat(\n        [{\"role\": \"user\", \"content\": \"What is the largest animal?\"}],\n        generate_config={\"chat_template_kwargs\": {\"enable_thinking\": False}},\n    )\n\n\nGenerate Models\n================\n\nGenerate API\n-------------\n\nThe Generate API mirrors OpenAI's legacy `Completions API <https://platform.openai.com/docs/api-reference/completions/create>`__.\n\nThe difference between the Generate API and the Chat API lies primarily in the form of input. Opposite to the Chat API that takes\na list of messages as input, the Generate API accepts a freeform text string named \"prompt\".\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/completions' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"prompt\": \"What is the largest animal?\",\n        \"max_tokens\": 512,\n        \"temperature\": 0.7\n      }'\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(api_key=\"cannot be empty\", base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\")\n    client.chat.completions.create(\n        model=(\"<MODEL_UID>\",\n        messages=[\n            {\"role\": \"user\", \"content\": \"What is the largest animal?\"}\n        ],\n        max_tokens=512,\n        temperature=0.7\n    )\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import RESTfulClient\n\n    client = RESTfulClient(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    model = client.get_model(\"<MODEL_UID>\")\n    print(model.generate(\n        prompt=\"What is the largest animal?\",\n        generate_config={\n          \"max_tokens\": 512,\n          \"temperature\": 0.7\n        }\n    ))\n\n  .. code-tab:: json output\n\n    {\n      \"id\": \"cmpl-8d76b65a-bad0-42ef-912d-4a0533d90d61\",\n      \"model\": \"<MODEL_UID>\",\n      \"object\": \"text_completion\",\n      \"created\": 1688919187,\n      \"choices\": [\n        {\n          \"index\": 0,\n          \"text\": \"The largest animal that has been scientifically measured is the blue whale, which has a maximum length of around 23 meters (75 feet) for adult animals and can weigh up to 150,000 pounds (68,000 kg). However, it is important to note that this is just an estimate and that the largest animal known to science may be larger still. Some scientists believe that the largest animals may not have a clear \\\"size\\\" in the same way that humans do, as their size can vary depending on the environment and the stage of their life.\",\n          \"finish_reason\": \"None\"\n        }\n      ],\n      \"usage\": {\n        \"prompt_tokens\": -1,\n        \"completion_tokens\": -1,\n        \"total_tokens\": -1\n      }\n    }\n\n\n\n\nFAQ\n========\n\nDoes Xinference's LLM provide integration methods for LangChain or LlamaIndex?\n-----------------------------------------------------------------------------------\n\nYes, you can refer to the related sections in their respective official Xinference documentation. Here are the links:\n\n* `LangChain LLMs: Xinference <https://python.langchain.com/docs/integrations/llms/xinference>`__\n\n* `LlamaIndex LLM integrations: Xinference  <https://docs.llamaindex.ai/en/stable/examples/llm/xinference_local_deployment.html>`__\n"
  },
  {
    "path": "doc/source/models/model_abilities/embed.rst",
    "content": ".. _embed:\n\n=====================\nEmbeddings\n=====================\n\n\nLearn how to create text embeddings in Xinference.\n\n\nIntroduction\n============\n\nText embeddings are used to quantify how related different pieces of text are. They can be used in various applications including\nsearch, clustering, recommendations, anomaly detection, diversity measurement, and classification.\n\nAn embedding is a vector of floating point numbers. The proximity between two vectors serves as an indicator of their similarity. \nLess distance implies a higher correlation, while a larger distance indicates reduced correlation.\n\nEmbedding models in Xinference can be invoked through the Embeddings API to create embeddings. \nThe Embeddings API mimics OpenAI's `create embeddings API <https://platform.openai.com/docs/api-reference/embeddings/create>`_.\n\n.. list-table:: \n   :widths: 25 50\n   :header-rows: 1\n\n   * - API ENDPOINT\n     - OpenAI-compatible ENDPOINT\n\n   * - Embeddings API\n     - /v1/embeddings\n\n\nSupported models\n-------------------\n\nYou can examine all the :ref:`builtin embedding models in Xinference <models_embedding_index>`.\n\n\nQuickstart\n============\n\nWe can try Embeddings API out either via cURL, OpenAI Client, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/embeddings' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"input\": \"What is the capital of China?\"\n      }'\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(\n      api_key=\"cannot be empty\", \n      base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    client.embeddings.create(\n      model=model_uid, \n      input=[\"What is the capital of China?\"]\n    )\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    input = \"What is the capital of China?\"\n    model.create_embedding(input)\n\n  .. code-tab:: json output\n\n    {\n      \"object\": \"list\",\n      \"model\": \"<MODEL_UID>\",\n      \"data\": [{\n        \"index\": 0,\n        \"object\": \"embedding\",\n        \"embedding\": [\n          -0.014207549393177032, \n          -0.01832585781812668, \n          ...\n          -0.03009396605193615,\n          0.05420297756791115]\n      }],\n      \"usage\": {\n        \"prompt_tokens\": 37,\n        \"total_tokens\": 37\n      }\n    }\n\n\nYou can find more examples of ``embed`` ability in the tutorial notebook:\n\n.. grid:: 1\n\n   .. grid-item-card:: LangChain Streamlit Doc Chat\n      :link: https://github.com/xorbitsai/inference/blob/main/examples/LangChain_Streamlit_Doc_Chat.py\n      \n      Learn from an example demonstrating how to use embed API via LangChain\n\n\nFAQ\n========\n\nDoes the LLM in Xinference support Embeddings API?\n------------------------------------------------------------\n\nNo. Xinference doesn't provide embed API for LLMs due to considerations of performance.\n\n\nDoes Embeddings API provides integration method for LangChain?\n-----------------------------------------------------------------------------------\n\nYes, you can refer to the related sections in LangChain's respective official Xinference documentation.\nHere is the link: `Text Embedding Models: Xinference <https://python.langchain.com/docs/integrations/text_embedding/xinference>`_ \n\n\nDoes Embeddings API support hrbrid model?\n-----------------------------------------------------------------------------------\n\nYes, you can use ``flag`` as the engine to deploy the model and call Embeddings API by setting the extra parameter ``return_parse=True`` which will return sparse vectors."
  },
  {
    "path": "doc/source/models/model_abilities/flexible.rst",
    "content": ".. _flexible:\n\n====================================\nTraditional ML models (Experimental)\n====================================\n\nLearn how to inference traditional machine learning models with Xinference.\nThese flexibly extensible models are referred to as **Flexible Models** within Xinference.\n\n.. versionadded:: v1.7.1\n  This ability is public since v1.7.1, now the API is not stable and may change during evolving.\n\n\nIntroduction\n==================\n\nTraditional machine learning models can still play a significant role within an LLM-centric ecosystem.\n\nXinference provides flexible extensibility for performing inference with traditional machine learning models.\nIt includes built-in support for loading and running the following types of models:\n\n- HuggingFace Pipelines for tasks such as classification using models hosted on HuggingFace.\n- ModelScope Pipelines for tasks such as classification using models from ModelScope.\n- YOLO for image detection and related computer vision tasks.\n\nA wide range of traditional machine learning models can be used with Xinference.\nFor each of the categories above, we will walk through a representative example to\ndemonstrate how to perform inference step by step on the Xinference platform.\n\nBuilt-in Model Support Examples\n================================\n\nHuggingFace Pipeline Model\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nFirst, we use `FacebookAI/roberta-large-mnli <https://huggingface.co/FacebookAI/roberta-large-mnli>`_ as an example.\nThis is a zero-shot classification model.\nFor other types of models, simply specify the corresponding task (which is also a parameter of the Pipeline)\nwhen registering the model.\n\nDownload the model to the following path::\n\n    /path/to/roberta-large-mnli\n\nNext, we demonstrate how to register this flexible model in the Xinference Web UI.\nFor the following examples, unless we have to, we will skip the UI steps and focus on the core logic.\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../../_static/hf-pipeline.png\" style=\"background-color: transparent\", width=\"95%\">\n\nThe corresponding custom model JSON file is as follows:\n\n.. code-block:: json\n\n    {\n        \"model_name\": \"roberta-large-mnli\",\n        \"model_id\": null,\n        \"model_revision\": null,\n        \"model_hub\": \"huggingface\",\n        \"model_description\": \"roberta-large-mnli is the RoBERTa large model fine-tuned on the Multi-Genre Natural Language Inference (MNLI) corpus. The model is a pretrained model on English language text using a masked language modeling (MLM) objective.\",\n        \"model_uri\": \"/path/to/roberta-large-mnli\",\n        \"launcher\": \"xinference.model.flexible.launchers.transformers\",\n        \"launcher_args\": \"{\\\"task\\\": \\\"zero-shot-classification\\\"}\",\n        \"virtualenv\": {\n            \"packages\": [],\n            \"inherit_pip_config\": true,\n            \"index_url\": null,\n            \"extra_index_url\": null,\n            \"find_links\": null,\n            \"trusted_host\": null,\n            \"no_build_isolation\": null\n        },\n        \"is_builtin\": false\n    }\n\nRefer to the section :ref:`register_custom_model` for instructions on registering the model using either code or the command line.\n\nNext, load the model by selecting **Launch Model** / **Custom Model** / **Flexible Model** in the Web UI.\nThe loading procedure is the same as for other model types.\n\nWhen using the command line, remember to specify the option ``--model-type flexible``.\n\nAfter the model is successfully loaded, we can perform inference using the following method.\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/flexible/infers' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"roberta-large-mnli\",\n        \"args\": [\n          \"one day I will see the world\",\n          [\"travel\", \"cooking\", \"dancing\"]\n        ]\n      }'\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"roberta-large-mnli\")\n\n    sequence_to_classify = \"one day I will see the world\"\n    candidate_labels = ['travel', 'cooking', 'dancing']\n    model.infer(sequence_to_classify, candidate_labels)\n\n\n  .. code-tab:: json output\n\n    {\"sequence\":\"one day I will see the world\",\"labels\":[\"travel\",\"cooking\",\"dancing\"],\"scores\":[0.9799638986587524,0.010605016723275185,0.009431036189198494]}\n\nModelScope Pipeline Model\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nModelScope Pipeline models are very similar to Huggingface ones.\nThe only difference lies in the launcher used.\n\nWe take a zero-shot classification model from ModelScope as an example.\nThe model is `iic/nlp_structbert_zero-shot-classification_chinese-base <https://modelscope.cn/models/iic/nlp_structbert_zero-shot-classification_chinese-base>`_.\n\nHere, we make use of Xinference's model virtual environment feature.\nThis is because the model used in this example requires ``transformers==4.50.3`` to run properly.\nTo isolate the environment, we use a :ref:`virtual env <model_virtual_env>` when registering the model.\n\nWhen specifying custom packages during registration, the syntax is the same as for regular packages, with a few special cases.\nSince the virtual environment is still based on the site packages of the Python runtime where Xinference is running, we need to explicitly include ``#system_numpy#``.\nPackages wrapped in ``#system_xx#`` ensure consistency with the base environment during virtual environment creation; otherwise, it may easily result in runtime errors.\n\nRegistering via Web UI:\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../../_static/modelscope-pipeline.png\" style=\"background-color: transparent\", width=\"95%\">\n\nCorresponding json file:\n\n.. code-block:: json\n\n    {\n        \"model_name\": \"nlp_structbert_zero-shot-classification_chinese-base\",\n        \"model_id\": null,\n        \"model_revision\": null,\n        \"model_hub\": \"huggingface\",\n        \"model_description\": \"This is a model description.\",\n        \"model_uri\": \"/Users/xuyeqin/Downloads/models/nlp_structbert_zero-shot-classification_chinese-base\",\n        \"launcher\": \"xinference.model.flexible.launchers.modelscope\",\n        \"launcher_args\": \"{\\\"task\\\": \\\"zero-shot-classification\\\"}\",\n        \"virtualenv\": {\n            \"packages\": [\n                \"transformers==4.50.3\",\n                \"#system_numpy#\"\n            ],\n            \"inherit_pip_config\": true,\n            \"index_url\": \"https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple\",\n            \"extra_index_url\": null,\n            \"find_links\": null,\n            \"trusted_host\": null,\n            \"no_build_isolation\": null\n        },\n        \"is_builtin\": false\n    }\n\nInference the model:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/flexible/infers' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"nlp_structbert_zero-shot-classification_chinese-base\",\n        \"args\": [\n          \"世界那么大，我想去看看\"\n        ],\n        \"candidate_labels\": [\"家居\", \"旅游\", \"科技\", \"军事\", \"游戏\", \"故事\"]\n      }'\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"nlp_structbert_zero-shot-classification_chinese-base\")\n\n    labels = ['家居', '旅游', '科技', '军事', '游戏', '故事']\n    sentence = '世界那么大，我想去看看'\n    model.infer(sentence, candidate_labels=labels)\n\n\n  .. code-tab:: json output\n\n    {\"labels\":[\"旅游\",\"故事\",\"游戏\",\"家居\",\"科技\",\"军事\"],\"scores\":[0.5115892291069031,0.1660086065530777,0.11971458047628403,0.08431519567966461,0.06298774480819702,0.05538458004593849]}%\n\nYOLO\n~~~~\n\nYOLO is a popular real-time object detection model, widely used in image detection and video analysis scenarios.\n\nFirst, download the YOLO weights.\nHere, we use the `yolov11s.pt <https://huggingface.co/Ultralytics/YOLO11>`_ file as an example.\n\nJSON file of model definition:\n\n.. code-block:: json\n\n    {\n        \"model_name\": \"yolo11s\",\n        \"model_id\": null,\n        \"model_revision\": null,\n        \"model_hub\": \"huggingface\",\n        \"model_description\": \"YOLO is a popular real-time object detection model, widely used in image detection and video analysis scenarios.\",\n        \"model_uri\": \"/Users/xuyeqin/Downloads/models/yolo11s.pt\",\n        \"launcher\": \"xinference.model.flexible.launchers.yolo\",\n        \"launcher_args\": \"{}\",\n        \"virtualenv\": {\n            \"packages\": [\n                \"ultralytics\",\n                \"#system_numpy#\"\n            ],\n            \"inherit_pip_config\": true,\n            \"index_url\": \"https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple\",\n            \"extra_index_url\": null,\n            \"find_links\": null,\n            \"trusted_host\": null,\n            \"no_build_isolation\": null\n        },\n        \"is_builtin\": false\n    }\n\nInference the model:\n\n.. tabs::\n\n  .. code-tab:: python Xinference Python Client\n\n    import requests\n    from PIL import Image\n    import io\n    import base64\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    model = client.get_model(\"yolo11s\")\n\n    url = \"https://ultralytics.com/images/bus.jpg\"\n\n    response = requests.get(url)\n    response.raise_for_status()\n\n    img = Image.open(io.BytesIO(response.content))\n\n    buffered = io.BytesIO()\n    img.save(buffered, format=\"JPEG\")\n    img_bytes = buffered.getvalue()\n    img_base64 = base64.b64encode(img_bytes).decode('utf-8')\n\n    model.infer(source=img_base64)\n\n  .. code-tab:: json output\n\n    [[{'name': 'bus',\n       'class': 5,\n       'confidence': 0.93653,\n       'box': {'x1': 13.9521, 'y1': 227.0665, 'x2': 800.17688, 'y2': 739.13965}},\n      {'name': 'person',\n       'class': 0,\n       'confidence': 0.89741,\n       'box': {'x1': 669.89709,\n        'y1': 389.82065,\n        'x2': 809.58966,\n        'y2': 879.65491}},\n      {'name': 'person',\n       'class': 0,\n       'confidence': 0.88205,\n       'box': {'x1': 52.37262, 'y1': 397.83792, 'x2': 248.506, 'y2': 905.98212}},\n      {'name': 'person',\n       'class': 0,\n       'confidence': 0.8706,\n       'box': {'x1': 222.58685,\n        'y1': 405.93442,\n        'x2': 345.02032,\n        'y2': 859.52789}},\n      {'name': 'person',\n       'class': 0,\n       'confidence': 0.66505,\n       'box': {'x1': 0.28522, 'y1': 548.60931, 'x2': 81.25904, 'y2': 871.59076}}]]\n\nWriting a Custom Flexible Model\n==================================\n\nFirst, we implement a custom launcher with a simple model for sentiment scoring.\nIn this example, we do not use any actual model weights, so the ``load`` function does not perform any model loading.\n\n.. code-block:: python\n\n    # my_flexible_model.py\n\n    from xinference.model.flexible import FlexibleModel\n\n\n    class RuleBasedSentimentModel(FlexibleModel):\n        def load(self):\n            self.pos_words = self.config.get(\"pos\", [\"good\", \"happy\", \"great\"])\n            self.neg_words = self.config.get(\"neg\", [\"bad\", \"sad\", \"terrible\"])\n\n        def infer(self, text: str):\n            score = 0\n            words = text.lower().split()\n            for w in words:\n                if w in self.pos_words:\n                    score += 1\n                elif w in self.neg_words:\n                    score -= 1\n            return {\"score\": score}\n\n\n    def launcher(model_uid: str, model_spec: FlexibleModel, **kwargs) -> FlexibleModel:\n        # get model path,\n        # in this example, we do not use it, so it's empty\n        model_path = model_spec.model_uri\n        return RuleBasedSentimentModel(model_uid=model_uid, model_path=model_path, config=kwargs)\n\nThe model JSON definition is as follows:\n\n.. code-block:: json\n\n    {\n        \"model_name\": \"my-flexible-model\",\n        \"model_id\": null,\n        \"model_revision\": null,\n        \"model_hub\": \"huggingface\",\n        \"model_description\": \"This is a model description.\",\n        \"model_uri\": \"/path/to/model\",\n        \"launcher\": \"my_flexible_model.launcher\",\n        \"launcher_args\": \"{\\\"pos\\\": [\\\"good\\\", \\\"happy\\\", \\\"great\\\", \\\"nice\\\"]}\",\n        \"virtualenv\": {\n            \"packages\": [],\n            \"inherit_pip_config\": true,\n            \"index_url\": null,\n            \"extra_index_url\": null,\n            \"find_links\": null,\n            \"trusted_host\": null,\n            \"no_build_isolation\": null\n        },\n        \"is_builtin\": false\n    }\n\nHere, we extend the model by passing in a custom-defined ``pos`` value.\n\nFinally, let's verify the result:\n\n.. tabs::\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://127.0.0.1:9997\")\n\n    model = client.get_model(\"my-flexible-model\")\n\n    model.infer(\"I feel nice and am happy today\")\n\n  .. code-tab:: json output\n\n    {'score': 2}\n\nConclusion\n==================\n\nThe built-in Flexible Model launchers in Xinference can be found at\n`Github <https://github.com/xorbitsai/inference/tree/main/xinference/model/flexible/launchers>`_.\nContributions are welcome to support more traditional machine learning models!\n"
  },
  {
    "path": "doc/source/models/model_abilities/image.rst",
    "content": " .. _image:\n\n========\nImages\n========\n\nLearn how to generate images with Xinference.\n\n\nIntroduction\n==================\n\n\nThe Images API provides two methods for interacting with images:\n\n\n* The Text-to-image endpoint create images from scratch based on a text prompt.\n* The Image-to-image endpoint allows you to generate a variation of a given image.\n\n\n.. list-table:: \n   :widths: 25  50\n   :header-rows: 1\n\n   * - API ENDPOINT\n     - OpenAI-compatible ENDPOINT\n\n   * - Text-to-Image API\n     - /v1/images/generations\n\n   * - Image-to-image API\n     - /v1/images/variations\n\nSupported models\n-------------------\n\nThe Text-to-image API is supported with the following models in Xinference:\n\n* sd-turbo\n* sdxl-turbo\n* stable-diffusion-v1.5\n* stable-diffusion-xl-base-1.0\n* sd3-medium\n* sd3.5-medium\n* sd3.5-large\n* sd3.5-large-turbo\n* FLUX.1-schnell\n* FLUX.1-dev\n* Kolors\n* hunyuandit-v1.2\n* hunyuandit-v1.2-distilled\n* cogview4\n* Qwen-Image\n\nImage-to-image supported models:\n\n* Flux.1-Kontext-dev\n* Qwen-Image-Edit\n\n\nQuickstart\n===================\n\nText-to-image\n--------------------\n\nThe Text-to-image API mimics OpenAI's `create images API <https://platform.openai.com/docs/api-reference/images/create>`_.\nWe can try Text-to-image API out either via cURL, OpenAI Client, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/images/generations' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"prompt\": \"an apple\",\n      }'\n\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\", \n        base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    client.images.generate(\n        model=<MODEL_UID>, \n        prompt=\"an apple\"\n    )\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    input_text = \"an apple\"\n    model.text_to_image(input_text)\n\n\n  .. code-tab:: json output\n\n    {\n      \"created\": 1697536913,\n      \"data\": [\n        {\n          \"url\": \"/home/admin/.xinference/image/605d2f545ac74142b8031455af31ee33.jpg\",\n          \"b64_json\": null\n        }\n      ]\n    }\n\nImage-to-image\n--------------------\n\nThe Image-to-image API mimics OpenAI's `create image variation API <https://platform.openai.com/docs/api-reference/images/createVariation>`_.\nWe can try image-to-image API out either via cURL, OpenAI Client, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/images/variations' \\\n      -F model=<MODEL_UID> \\\n      -F image=@xxx.jpg \\\n      -F prompt=\"an apple\"\n\n\n  .. code-tab:: python OpenAI Python Client\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\",\n        base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    client.images.create_variation(\n        model=<MODEL_UID>,\n        image=open(\"image_edit_original.png\", \"rb\"),\n        prompt=\"an apple\"\n    )\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    input_text = \"an apple\"\n    with open(\"xxx.jpg\", \"rb\") as f:\n        model.image_to_image(f.read(), input_text)\n\n\n  .. code-tab:: json output\n\n    {\n      \"created\": 1697536913,\n      \"data\": [\n        {\n          \"url\": \"/home/admin/.xinference/image/605d2f545ac74142b8031455af31ee33.jpg\",\n          \"b64_json\": null\n        }\n      ]\n    }\n\nMemory optimization for Large Image Models e.g. SD3-Medium, FLUX.1\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. note::\n\n    From v0.16.1, Xinference by default enabled quantization for\n    large image models like Flux.1 and SD3.5 series.\n    So if your Xinference version is newer than v0.16.1,\n    You barely need to do anything to run those large image models on GPUs with small memory.\n\nUseful extra parameters can be passed to launch including:\n\n* ``--cpu_offload True``: specifying ``True`` will offload the components of the model to CPU during\n  inference in order to save memory, while seeing a slight increase in inference latency.\n  Model offloading will only move a model component onto the GPU when it needs to be executed,\n  while keeping the remaining components on the CPU.\n* ``--quantize_text_encoder <text encoder layer>``: We leveraged the ``bitsandbytes`` library\n  to load and quantize the T5-XXL text encoder to 8-bit precision.\n  This allows you to keep using all text encoders while only slightly impacting performance.\n* ``--text_encoder_3 None``, for sd3-medium, removing the memory-intensive 4.7B parameter\n  T5-XXL text encoder during inference can significantly decrease the memory requirements\n  with only a slight loss in performance.\n* ``--transformer_nf4 True``: use nf4 for transformer quantization.\n* ``--quantize``: Only work for MLX on Mac, Flux.1-dev and Flux.1-schnell will switch to\n  MLX engine on Mac, and ``quantize`` can be used to quantize the model.\n\nFor WebUI, Just add additional parameters, e.g. add key ``cpu_offload`` and value ``True``\nto enable cpu offloading.\n\nBelow list default options that used from v0.16.1.\n\n+-------------------+-----------------------+----------------------+------------------+\n| Model             | quantize_text_encoder | quantize             | transformer_nf4  |\n+===================+=======================+======================+==================+\n| FLUX.1-dev        | text_encoder_2        | True                 | False            |\n+-------------------+-----------------------+----------------------+------------------+\n| FLUX.1-schnell    | text_encoder_2        | True                 | False            |\n+-------------------+-----------------------+----------------------+------------------+\n| sd3-medium        | text_encoder_3        | N/A                  | False            |\n+-------------------+-----------------------+----------------------+------------------+\n| sd3.5-medium      | text_encoder_3        | N/A                  | False            |\n+-------------------+-----------------------+----------------------+------------------+\n| sd3.5-large       | text_encoder_3        | N/A                  | True             |\n+-------------------+-----------------------+----------------------+------------------+\n| sd3.5-large-turbo | text_encoder_3        | N/A                  | True             |\n+-------------------+-----------------------+----------------------+------------------+\n| Qwen-Image        | text_encoder          | N/A                  | False            |\n+-------------------+-----------------------+----------------------+------------------+\n| Qwen-Image-Edit   | text_encoder          | N/A                  | False            |\n+-------------------+-----------------------+----------------------+------------------+\n\n.. note::\n\n    If you want to disable some quantization, just set the corresponding option to False.\n    e.g. for Web UI, set key ``quantize_text_encoder`` and value ``False``\n    and for command line, specify ``--quantize_text_encoder False`` to disable quantization\n    for text encoder.\n\nFor :ref:`CogView4 <models_builtin_cogview4>`, we found that quantization has a significant impact on the model.\nTherefore, when GPU memory is limited, we recommend enabling the CPU offload option in the Web UI,\nand specifying ``--cpu_offload True`` when loading the model via the command line.\n\nGGUF file format\n~~~~~~~~~~~~~~~~\n\nGGUF file format for transformer provides various quantization options.\nTo use gguf file, you can specify additional option ``gguf_quantization`` for web UI,\nor ``--gguf_quantization`` for command line for those image models which support\ninternally by Xinference. Below is the mode list.\n\n+-----------------------+------------------------------------------------------------------------------------------+\n| Model                 | supported gguf quantization                                                              |\n+=======================+==============================================+===========================================+\n| FLUX.1-dev            | F16, Q2_K, Q3_K_S, Q4_0, Q4_1, Q4_K_S, Q5_0, Q5_1, Q5_K_S, Q6_K, Q8_0                    |\n+-----------------------+------------------------------------------------------------------------------------------+\n| FLUX.1-schnell        | F16, Q2_K, Q3_K_S, Q4_0, Q4_1, Q4_K_S, Q5_0, Q5_1, Q5_K_S, Q6_K, Q8_0                    |\n+-----------------------+------------------------------------------------------------------------------------------+\n| sd3.5-medium          | F16, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0  |\n+-----------------------+------------------------------------------------------------------------------------------+\n| sd3.5-large           | F16, Q4_0, Q4_1, Q5_0, Q5_1, Q8_0                                                        |\n+-----------------------+------------------------------------------------------------------------------------------+\n| sd3.5-large-turbo     | F16, Q4_0, Q4_1, Q5_0, Q5_1, Q8_0                                                        |\n+-----------------------+------------------------------------------------------------------------------------------+\n| Qwen-Image            | F16, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0  |\n+-----------------------+------------------------------------------------------------------------------------------+\n| Qwen-Image-Edit       | Q2_K, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0 |\n+-----------------------+------------------------------------------------------------------------------------------+\n| Qwen-Image-Edit-2509  | Q2_K, Q3_K_M, Q3_K_S, Q4_0, Q4_1, Q4_K_M, Q4_K_S, Q5_0, Q5_1, Q5_K_M, Q5_K_S, Q6_K, Q8_0 |\n+-----------------------+------------------------------------------------------------------------------------------+\n\n.. note::\n\n    We stronly recommend to enable additional option ``cpu_offload`` with value ``True`` for WebUI,\n    or specify ``--cpu_offload True`` for command line.\n\nExample:\n\n.. code-block::\n\n    xinference launch --model-name FLUX.1-dev --model-type image --gguf_quantization Q2_K --cpu_offload True\n\nWith ``Q2_K`` quantization, you only need around 5 GiB GPU memory to run Flux.1-dev.\n\nFor those models gguf options are not supported internally, or you want to download gguf files on you own,\nyou can specify additional option ``gguf_model_path`` for web UI or spcecify\n``--gguf_model_path /path/to/model_quant.gguf`` for command line.\n\nLightning LORA Support\n~~~~~~~~~~~~~~~~~~~~~~\n\nLightning LORA performs distillation on models in the form of LoRA,\nreducing the number of inference steps while maintaining model performance,\nand significantly speeding up inference. The following models currently support this LoRA:\n\n+------------------------+------------------------------------------------------------------------------------------+\n| Model                  | Supported lightning version                                                              |\n+========================+==============================================+===========================================+\n| Qwen-Image             | 4steps-V1.0-bf16, 4steps-V1.0, 8steps-V1.0, 8steps-V1.1-bf16, 8steps-V1.1                |\n+------------------------+------------------------------------------------------------------------------------------+\n| Qwen-Image-Edit        | 4steps-V1.0-bf16, 4steps-V1.0, 8steps-V1.0-bf16, 8steps-V1.0                             |\n+------------------------+------------------------------------------------------------------------------------------+\n| Qwen-Image-Edit-2509   | 4steps-V1.0-bf16, 4steps-V1.0-fp32, 8steps-V1.0-bf16, 8steps-V1.0-fp32                   |\n+------------------------+------------------------------------------------------------------------------------------+\n\n4 steps or 8 steps refer to the inference steps (``num_inference_steps``).\nWhen ``lightning_version`` is specified, Xinference will automatically set the number of inference steps.\n\nWhen using it, select the lightning version in the interface, or specify it via the command line.\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../../_static/qwen-image-lightning.png\" style=\"background-color: transparent\", width=\"95%\">\n\nUse the command line with ``--lightning_version <version>``.\n\nFor those who have downloaded the lightning LoRA files themselves, you can specify them via the Lightning\nModel Path in the interface or by using the command line option ``--lightning_model_path``.\n\nFor example, using ``4steps-V1.0``, the inference time is reduced from the original 34s to 3s.\n\nOCR\n--------------------\n\nThe OCR API accepts image bytes and returns the OCR text.\n\nWe can try OCR API out either via cURL, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/images/ocr' \\\n      -F model=<MODEL_UID> \\\n      -F 'kwargs={\"model_size\":\"large\"}' \\\n      -F image=@xxx.jpg\n\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\", model_size=\"large\")\n    with open(\"xxx.jpg\", \"rb\") as f:\n        model.ocr(f.read())\n\n\n  .. code-tab:: text output\n\n    <OCR result string>\n"
  },
  {
    "path": "doc/source/models/model_abilities/index.rst",
    "content": ".. _abilities_index:\n\n===============\nModel Abilities\n===============\n\n.. toctree::\n   :maxdepth: 2\n\n   chat\n   tools\n   multimodal\n   embed\n   rerank\n   image\n   audio\n   video\n   flexible\n"
  },
  {
    "path": "doc/source/models/model_abilities/multimodal.rst",
    "content": ".. _multimodal:\n\n=====================\nMultimodal\n=====================\n\nLearn how to process images and audio with LLMs.\n\n\nVision\n============\n\nWith the ``vision`` ability you can have your model take in images and answer questions about them.\nWithin Xinference, this indicates that certain models are capable of processing image inputs when conducting\ndialogues via the Chat API.\n\n\nSupported models\n----------------------\n\nThe ``vision`` ability is supported with the following models in Xinference:\n\n* :ref:`qwen-vl-chat <models_llm_qwen-vl-chat>`\n* :ref:`deepseek-vl-chat <models_llm_deepseek-vl-chat>`\n* :ref:`omnilmm <models_llm_omnilmm>`\n* :ref:`cogvlm2 <models_llm_cogvlm2>`\n* :ref:`MiniCPM-Llama3-V 2.5 <models_llm_minicpm-llama3-v-2_5>`\n* :ref:`GLM-4V <models_llm_glm-4v>`\n* :ref:`MiniCPM-Llama3-V 2.6 <models_llm_minicpm-v-2.6>`\n* :ref:`qwen2-vl-instruct <models_llm_qwen2-vl-instruct>`\n* :ref:`llama-3.2-vision <models_llm_llama-3.2-vision>`\n* :ref:`llama-3.2-vision-instruct <models_llm_llama-3.2-vision-instruct>`\n* :ref:`glm-edge-v <models_llm_glm-edge-v>`\n* :ref:`qwen2.5-vl-instruct <models_llm_qwen2.5-vl-instruct>`\n* :ref:`gemma-3-it <models_llm_gemma-3-it>`\n* :ref:`deepseek-vl2 <models_llm_deepseek-vl2>`\n* :ref:`internvl3 <models_llm_internvl3>`\n\n\nQuickstart\n----------------------\n\nImages are made available to the model in two main ways: by passing a link to the image or by passing the\nbase64 encoded image directly in the request.\n\nExample using OpenAI Client\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\", \n        base_url=f\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    response = client.chat.completions.create(\n        model=\"<MODEL_UID>\",\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"What’s in this image?\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": \"http://i.epochtimes.com/assets/uploads/2020/07/shutterstock_675595789-600x400.jpg\",\n                        },\n                    },\n                ],\n            }\n        ],\n    )\n    print(response.choices[0])\n\n\nUploading base 64 encoded images\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    import openai\n    import base64\n\n    # Function to encode the image\n    def encode_image(image_path):\n    with open(image_path, \"rb\") as image_file:\n        return base64.b64encode(image_file.read()).decode('utf-8')\n\n    # Path to your image\n    image_path = \"path_to_your_image.jpg\"\n\n    # Getting the base64 string\n    b64_img = encode_image(image_path)\n\n    client = openai.Client(\n        api_key=\"cannot be empty\", \n        base_url=f\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    response = client.chat.completions.create(\n        model=\"<MODEL_UID>\",\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"What’s in this image?\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": f\"data:image/jpeg;base64,{b64_img}\",\n                        },\n                    },\n                ],\n            }\n        ],\n    )\n    print(response.choices[0])\n\n\nLimiting Images Per Prompt\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nFor vision models using the VLLM backend, you can use the ``limit_mm_per_prompt`` parameter to limit the number of images that can be processed in each conversation turn. This helps control memory usage and improve performance.\n\n.. code-block:: python\n\n    # Launch model with image count limitation using Python client\n    from xinference.client import Client\n    \n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    \n    # Launch model and set maximum 4 images per conversation turn\n    model_uid = client.launch_model(\n        model_name=\"qwen2.5-vl-instruct\",\n        model_engine=\"vLLM\",\n        model_format=\"pytorch\",\n        quantization=\"none\",\n        model_size_in_billions=3,\n        limit_mm_per_prompt=\"{\\\"image\\\": 4}\"\n    )\n\nAlternatively, you can launch the model using the command line:\n\n.. code-block:: bash\n\n    # Launch model with image count limitation using CLI\n    xinference launch \\\n        --model-engine vLLM \\\n        --model-name qwen2.5-vl-instruct \\\n        --size-in-billions 3 \\\n        --model-format pytorch \\\n        --quantization none \\\n        --limit_mm_per_prompt \"{\\\"image\\\":4}\"\n\nFor Web UI, you can set the ``limit_mm_per_prompt`` parameter in the launch form:\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../../_static/limit_mm_per_prompt.png\" style=\"background-color: transparent\", width=\"95%\">\n\nThis parameter provides the following benefits:\n\n* **image**: Sets the maximum number of images allowed per conversation turn\n* Helps prevent memory overflow, especially when processing multiple images\n* Improves model inference stability and performance\n* Applies to all VLLM-based vision models\n\n.. note::\n   The ``limit_mm_per_prompt`` parameter only takes effect when using the VLLM backend. If your model uses other backends, this parameter will be ignored.\n\nYou can find more examples of ``vision`` ability in the tutorial notebook:\n\n.. grid:: 1\n\n   .. grid-item-card:: Qwen VL Chat\n      :link: https://github.com/xorbitsai/inference/blob/main/examples/chat_vl.ipynb\n      \n      Learn vision ability from a example using qwen-vl-chat\n\n\nAudio\n============\n\nWith the ``audio`` ability you can have your model take in audio and performing audio analysis or direct textual\nresponses with regard to speech instructions.\nWithin Xinference, this indicates that certain models are capable of processing audio inputs when conducting\ndialogues via the Chat API.\n\nSupported models\n----------------------\n\nThe ``audio`` ability is supported with the following models in Xinference:\n\n* :ref:`qwen2-audio-instruct <models_llm_qwen2-audio-instruct>`\n\nQuickstart\n----------------------\n\nAudios are made available to the model in two main ways: by passing a link to the image or by passing the\naudio url directly in the request.\n\n\nChat with audio\n~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    model = client.get_model(<MODEL_UID>)\n\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\n                    \"type\": \"audio\",\n                    \"audio_url\": \"https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/glass-breaking-151256.mp3\",\n                },\n                {\"type\": \"text\", \"text\": \"What's that sound?\"},\n            ],\n        },\n        {\"role\": \"assistant\", \"content\": \"It is the sound of glass shattering.\"},\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\"type\": \"text\", \"text\": \"What can you do when you hear that?\"},\n            ],\n        },\n        {\n            \"role\": \"assistant\",\n            \"content\": \"Stay alert and cautious, and check if anyone is hurt or if there is any damage to property.\",\n        },\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\n                    \"type\": \"audio\",\n                    \"audio_url\": \"https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/1272-128104-0000.flac\",\n                },\n                {\"type\": \"text\", \"text\": \"What does the person say?\"},\n            ],\n        },\n    ]\n    print(model.chat(messages))\n"
  },
  {
    "path": "doc/source/models/model_abilities/rerank.rst",
    "content": ".. _rerank:\n\n=====================\nRerank\n=====================\n\nLearn how to use rerank models in Xinference.\n\n\nIntroduction\n================\n\nGiven a query and a list of documents, Rerank indexes the documents from most to least semantically relevant to the query.\nRerank models in Xinference can be invoked through the Rerank endpoint to rank a list of documents. \n\n\nQuickstart\n================\n\nWe can try Rerank API out either via cURL, OpenAI Client, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/rerank' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"query\": \"A man is eating pasta.\",\n        \"documents\": [\n            \"A man is eating food.\",\n            \"A man is eating a piece of bread.\",\n            \"The girl is carrying a baby.\",\n            \"A man is riding a horse.\",\n            \"A woman is playing violin.\"\n        ]\n      }'\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n    model = client.get_model(<MODEL_UID>)\n\n    query = \"A man is eating pasta.\"\n    corpus = [\n        \"A man is eating food.\",\n        \"A man is eating a piece of bread.\",\n        \"The girl is carrying a baby.\",\n        \"A man is riding a horse.\",\n        \"A woman is playing violin.\"\n    ]\n    print(model.rerank(corpus, query))\n\n  .. code-tab:: json output\n\n    {\n        \"id\": \"480dca92-8910-11ee-b76a-c2c8e4cad3f5\",\n        \"results\": [{\n            \"index\": 0,\n            \"relevance_score\": 0.9999247789382935,\n            \"document\": \"A man is eating food.\"\n        }, {\n            \"index\": 1,\n            \"relevance_score\": 0.2564932405948639,\n            \"document\": \"A man is eating a piece of bread.\"\n        }, {\n            \"index\": 3,\n            \"relevance_score\": 0.00003955026841140352,\n            \"document\": \"A man is riding a horse.\"\n        }, {\n            \"index\": 2,\n            \"relevance_score\": 0.00003742107219295576,\n            \"document\": \"The girl is carrying a baby.\"\n        }, {\n            \"index\": 4,\n            \"relevance_score\": 0.00003739788007806055,\n            \"document\": \"A woman is playing violin.\"\n        }]\n    }\n"
  },
  {
    "path": "doc/source/models/model_abilities/tools.rst",
    "content": ".. _tools:\n\n=====================\nTools\n=====================\n\nLearn how to connect LLM with external tools.\n\n\nIntroduction\n============\n\nWith the ``tools`` ability you can have your model use external tools. \n\n\nLike `OpenAI's Function calling API <https://platform.openai.com/docs/guides/function-calling>`_, you can define the functions along\nwith their parameters and have the model dynamically choose which function to call and what parameters to pass to it.\n\nThis is the general process for calling a function:\n\n1. You submit a query, detailing the functions, their parameters, and descriptions.\n2. The LLM decides whether to initiate the function. If chosen not to, it replies in everyday language,\n   either offering a solution based on its inherent understanding or asking further details about the query\n   and tool usage. On deciding to use a tool, it recommends the suitable API and instructions for its usage, framed in JSON.\n3. Following that, you implement the API call within your application and send the returned response back to the LLM\n   for result analysis and proceeding with the next steps.\n\nThere is no dedicated API endpoint implemented for ``tools`` ability. It must be used in combination with Chat API.\n  \nSupported models\n-------------------\n\nThe ``tools`` ability is supported with the following models in Xinference:\n\n* :ref:`models_llm_glm4-chat`\n* :ref:`models_llm_glm4-chat-1m`\n* :ref:`models_llm_llama-3.1-instruct`\n* :ref:`models_llm_llama-3.3-instruct`\n* :ref:`models_llm_qwen1.5-chat`\n* :ref:`models_llm_qwen1.5-moe-chat`\n* :ref:`models_llm_qwen2-instruct`\n* :ref:`models_llm_qwen2-moe-instruct`\n* :ref:`models_llm_qwen2.5-instruct`\n* :ref:`models_llm_qwen2.5-coder-instruct`\n* :ref:`models_llm_qwq-32b`\n* :ref:`models_llm_qwen3`\n* :ref:`models_llm_qwen3-instruct`\n* :ref:`models_llm_qwen3-coder`\n* :ref:`models_llm_deepseek-v3`\n* :ref:`models_llm_deepseek-r1-0528`\n\nQuickstart\n==============\n\nAn optional parameter ``tools`` in the Chat API can be used to provide function specifications.\nThe purpose of this is to enable models to generate function arguments which adhere to the provided specifications. \n\nExample using OpenAI Client\n------------------------------\n\n.. code-block::\n\n    import openai\n\n    client = openai.Client(\n        api_key=\"cannot be empty\", \n        base_url=\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1\"\n    )\n    response = client.chat.completions.create(\n        model=\"<MODEL_UID>\",\n        messages=[{\n            \"role\": \"user\",\n            \"content\": \"Call me an Uber ride type 'Plus' in Berkeley at zipcode 94704 in 10 minutes\"\n        }],\n        tools=[\n            {\n                \"type\": \"function\",\n                \"function\": {\n                    \"name\": \"uber_ride\",\n                    \"description\": \"Find suitable ride for customers given the location, \"\n                    \"type of ride, and the amount of time the customer is \"\n                    \"willing to wait as parameters\",\n                    \"parameters\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"loc\": {\n                                \"type\": \"int\",\n                                \"description\": \"Location of the starting place of the Uber ride\",\n                            },\n                            \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\"plus\", \"comfort\", \"black\"],\n                                \"description\": \"Types of Uber ride user is ordering\",\n                            },\n                            \"time\": {\n                                \"type\": \"int\",\n                                \"description\": \"The amount of time in minutes the customer is willing to wait\",\n                            },\n                        },\n                    },\n                },\n            }\n        ],\n    )\n    print(response.choices[0].message)\n\n\nThe output will be:\n\n.. code-block:: json\n\n  {\n      \"role\": \"assistant\",\n      \"content\": null,\n      \"tool_calls\": [\n          \"id\": \"call_ad2f383f-31c7-47d9-87b7-3abe928e629c\", \n          \"type\": \"function\", \n          \"function\": {\n              \"name\": \"uber_ride\", \n              \"arguments\": \"{\\\"loc\\\": 94704, \\\"type\\\": \\\"plus\\\", \\\"time\\\": 10}\"\n          }\n      ],\n  }\n\nExample using Anthropic Client\n------------------------------\n\n.. code-block::\n\n    import anthropic\n    import json\n    import uuid\n\n    client = anthropic.Anthropic(\n        api_key=\"cannot be empty\",\n        base_url=\"http://localhost:9997\"\n    )\n\n    response = client.messages.create(\n        model=\"qwen3\",\n        max_tokens=1024,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": \"What's the weather like in Beijing?\"\n            }\n        ],\n        tools=[\n            {\n                \"type\": \"function\",\n                \"function\": {\n                    \"name\": \"get_weather\",\n                    \"description\": \"Get weather information for a city\",\n                    \"parameters\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"city\": {\n                                \"type\": \"string\",\n                                \"description\": \"The city name\",\n                            },\n                        },\n                        \"required\": [\"city\"]\n                    },\n                },\n            }\n        ],\n        tool_choice={\"type\": \"auto\"}\n    )\n\n\nThe output will be:\n\n.. code-block:: json\n\n    {\n        \"role\": \"assistant\",\n        \"content\": null,\n        \"tool_calls\": [\n            \"id\": \"call_26884d11-ff6b-48fb-ada7-734f3fd0dfcc\",\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"get_weather\",\n                \"arguments\": \"{\\\"city\\\": \\\"Beijing\\\"}\"\n            }\n        ],\n    }\n\n\n.. note::\n\n  Finish reason will be ``tool_calls`` if the LLM uses a tool call. Othewise it will be the default finish reason.\n\n\n.. note::\n\n  The API will not actually execute any function calls. It is up to developers to execute function calls using model outputs.\n\n\n\nYou can find more examples of ``tools`` ability in the tutorial notebook:\n\n.. grid:: 1\n\n   .. grid-item-card:: Function calling\n      :link: https://github.com/xorbitsai/inference/blob/main/examples/FunctionCall.ipynb\n      \n      Learn from a complete example demonstrating function calling\n\n"
  },
  {
    "path": "doc/source/models/model_abilities/video.rst",
    "content": ".. _video:\n\n====================\nVideo (Experimental)\n====================\n\nLearn how to generate videos with Xinference.\n\n\nIntroduction\n==================\n\n\nThe Video API provides the ability to interact with videos:\n\n\n* The text-to-video endpoint create videos from scratch based on a text prompt.\n* The image-to-video endpoint create videos from scratch based on an input image.\n* The firstlastframe-to-video endpoint creates videos based on the transition between a first and a last frame.\n\n\n.. list-table::\n   :widths: 25  50\n   :header-rows: 1\n\n   * - API\n     - Endpoint\n\n   * - Text-to-Video API\n     - /v1/video/generations\n\n   * - Image-to-Video API\n     - /v1/video/generations/image\n\n   * - FirstLastFrame-to-Video API\n     - /v1/video/generations/flf\n\nSupported models\n-------------------\n\nThe text-to-video API is supported with the following models in Xinference:\n\n* :ref:`CogVideoX-2b <models_builtin_cogvideox-2b>`\n* :ref:`CogVideoX-5b <models_builtin_cogvideox-5b>`\n* :ref:`HunyuanVideo <models_builtin_hunyuanvideo>`\n* :ref:`Wan2.1-1.3B <models_builtin_wan2.1-1.3b>`\n* :ref:`Wan2.1-14B <models_builtin_wan2.1-14b>`\n\nThe image-to-video API is supported with the following models in Xinference:\n\n* :ref:`Wan2.1-i2v-14B-480p <models_builtin_wan2.1-i2v-14b-480p>`\n* :ref:`Wan2.1-i2v-14B-720p <models_builtin_wan2.1-i2v-14b-720p>`\n\nThe firstlastframe-to-video API is supported with the following models in Xinference:\n\n* :ref:`Wan2.1-flf2v-14B-720p <models_builtin_wan2.1-flf2v-14b-720p>`\n\nQuickstart\n===================\n\nText-to-video\n--------------------\n\nYou can try text-to-video API out either via cURL, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/video/generations' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n        \"model\": \"<MODEL_UID>\",\n        \"prompt\": \"<your prompt>\"\n      }'\n\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    input_text = \"an apple\"\n    model.text_to_video(input_text)\n\nImage-to-video\n--------------------\n\nYou can try image-to-video API out either via cURL, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/video/generations/image' \\\n      -F model=<MODEL_UID> \\\n      -F image=@xxx.jpg \\\n      -F prompt=<prompt>\n\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    with open(\"xxx.jpg\", \"rb\") as f:\n        prompt = \"\"\n        model.image_to_video(image=f.read(), prompt=prompt)\n\nFirstLastFrame-to-video\n--------------------------\n\nYou can try firstlastframe-to-video API out either via cURL, or Xinference's python client:\n\n.. tabs::\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/video/generations/flf' \\\n      -F model=<MODEL_UID> \\\n      -F first_frame=@xxx.jpg \\\n      -F last_frame=@xxx2.jpg \\\n      -F prompt=<prompt>\n\n\n  .. code-tab:: python Xinference Python Client\n\n    from xinference.client import Client\n\n    client = Client(\"http://<XINFERENCE_HOST>:<XINFERENCE_PORT>\")\n\n    model = client.get_model(\"<MODEL_UID>\")\n    with open(\"xxx.jpg\", \"rb\") as f1, open(\"xxx2.jpg\", \"rb\") as f2:\n        prompt = \"\"\n        model.flf_to_video(first_frame=f1.read(), last_frame=f2.read(), prompt=prompt)\n\n\nMemory optimization\n===================\n\nVideo generation will occupy huge GPU memory, for instance,\nrunning CogVideoX may require up to around 35 GB GPU memory.\n\nXinference supports several options to optimize video model memory (VRAM) usage.\n\n* CPU offloading or block level group offloading.\n* Layerwise casting.\n\n.. note::\n\n  CPU offloading and Block Level Group Offloading cannot be enabled at the same time,\n  but layerwise casting can be used in combination with either of them.\n\nCPU offloading\n--------------------\n\nCPU offloading keeps the model weights on the CPU and only loads them to the GPU\nwhen a forward pass needs to be executed. It is suitable for scenarios with extremely limited GPU memory,\nbut it has a significant impact on performance.\n\nWhen running on GPU whose memory is less than 24 GB,\nwe recommend to add ``--cpu_offload True`` when launching model.\nFor Web UI, add an extra option, ``cpu_offload`` with value set to ``True``.\n\n.. code-block:: bash\n\n    xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video --cpu_offload True\n\nBlock Level Group Offloading\n-------------------------------\n\nBlock Level Group Offloading groups multiple internal layers of the model\n(such as ``torch.nn.ModuleList`` or ``torch.nn.Sequential``) and loads these groups from the CPU to the GPU\nas needed during inference. Compared to CPU offloading, it uses more memory but has less impact on performance.\n\nFor the command line, add the ``--group_offload True`` option; for the Web UI,\nadd an additional option ``group_offload`` with the value set to ``True``.\n\nWe can speed up group offloading inference, by enabling the use of CUDA streams. However,\nusing CUDA streams requires moving the model parameters into pinned memory.\nThis allocation is handled by Pytorch under the hood, and can result in a significant spike in CPU RAM usage.\nPlease consider this option if your CPU RAM is atleast 2X the size of the model you are group offloading.\nEnable CUDA streams via adding ``--use_stream True`` for command line; for the Web UI,\nadd an additional option ``use_stream`` with the value set to ``True``.\n\n.. code-block:: bash\n\n    xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video --group_offload True --use_stream True\n\nApplying Layerwise Casting to the Transformer\n------------------------------------------------\n\nLayerwise casting will downcast each layer’s weights to ``torch.float8_e4m3fn``,\ntemporarily upcast to ``torch.bfloat16`` during the forward pass of the layer,\nthen revert to ``torch.float8_e4m3fn`` afterward. This approach reduces memory requirements\nby approximately 50% while introducing a minor quality reduction in the generated video due to the precision trade-off.\nEnable layerwise casting via adding ``--layerwise_cast True`` for command line; for the Web UI,\nadd an additional option ``layerwise_cast`` with the value set to ``True``.\n\nThis example will require 20GB of VRAM.\n\n.. code-block:: bash\n\n    xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video --layerwise_cast True --cpu_offload True\n\n"
  },
  {
    "path": "doc/source/models/model_memory.rst",
    "content": ".. _cal_model_memory:\n\n========================\nModel Memory Calculation\n========================\n\nFor better planning of VMEM usage, xinference provided tool for model memory calculation: ``cal-model-mem``\n\nUse algorithm from https://github.com/RahulSChand/gpu_poor\n\nOutput: model_mem, kv_cache, overhead, active_mem\n\nExample: \nTo calculate memory usage for qwen1.5-chat, run the following command:\n\n.. tabs::\n\n  .. code-tab:: bash Command\n    \n    xinference cal-model-mem -s 7 -q Int4 -f gptq -c 16384 -n qwen1.5-chat\n    \n  .. code-tab:: bash Output\n    \n    model_name: qwen1.5-chat\n    kv_cache_dtype: 16\n    model size: 7.0 B\n    quant: Int4\n    context: 16384\n    gpu mem usage:\n      model mem: 4139 MB\n      kv_cache: 8192 MB\n      overhead: 650 MB\n      active: 17024 MB\n      total: 30005 MB (30 GB)\n\nSyntax\n------\n\n* --size-in-billions {model_size}\n  \n  \n  * -s {model_size}\n\n\n  Set the model size.\n  Specify the model size in billions of parameters. Format accept 1_8 and 1.8.\n  For example, 7 for 7.0B model size.\n\n\n* --quantization {precision}\n  \n  \n  * -q {precision} *(Optional)*\n\n\n  Define the quantization settings for the model.\n  For example, Int4 for INT4 quantization.\n\n\n* --model-name {model_name}\n  \n  \n  * -n {model_name} *(Optional)*\n\n\n  Specify the model's name.\n  If provided, fetch model config from huggingface/modelscope; If not specified, use default model layer to estimate.\n\n \n* --context-length {context_length}\n  \n  \n  * -c {context_length}\n\n\n  Specify the maximum number of tokens(context length) that your model support.\n\n \n* --model-format {format}\n  \n  \n  * -f {format}\n\n\n  Specify the format of the model, e.g. pytorch, ggmlv3, etc.\n\n \n.. note::\n  The environment variable ``HF_ENDPOINT`` could set the endpoint of HuggingFace. e.g. hf-mirror, etc.\n  Please refer to :ref:`this document <models_download>`\n\n"
  },
  {
    "path": "doc/source/models/model_update.rst",
    "content": ".. _model_update:\n\n============\nModel Update\n============\n.. versionadded:: v1.13.0\n\nThis section briefly introduces a common operation on the \"Launch Model\" page: updating the model list. It corresponds to the \"Type Selection + Update\" button at the top of the page, which is used to quickly refresh models of a specific type.\n\nModel update rely on the online model list service provided by :ref:`xinference_models_hub` .\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"model update interface\" src=\"../_static/model_update.png\" style=\"background-color: transparent\", width=\"95%\">\n\nUpdate Models\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n- Operation Location: \"Type Selection\" dropdown and \"Update\" button at the top right of the page.\n- Usage:\n1. Select a model type from the dropdown (such as llm, embedding, rerank, image, audio, video).\n2. Click the \"Update\" button, the page will send an update request to the backend, then automatically jump to the corresponding Tab and refresh the model list of that type.\n"
  },
  {
    "path": "doc/source/models/sources/sources.rst",
    "content": ".. _models_download:\n\n================\nDownload Sources\n================\n\nXinference supports downloading various models from different sources.\n\nHuggingFace\n^^^^^^^^^^^^^^\nXinference directly downloads the required models from the official `Hugging Face model repository <https://huggingface.co/models>`_ by default.\n\n.. note::\n   If you have trouble connecting to Huggingface, you can use a mirror website to download with setting the environment variable ``HF_ENDPOINT=https://hf-mirror.com``.\n\n\nModelScope\n^^^^^^^^^^^^^^\n\nWhen Xinference detects that the system's language is set to Simplified Chinese, it will automatically\nset the model download source to `ModelScope <https://modelscope.cn/models>`_.\n\nYou can also achieve this by manually setting an environment variable ``XINFERENCE_MODEL_SRC=modelscope``.\n\nPlease check the detail page of a model to confirm whether the model supports downloading from ModelScope.\nIf a model spec supports downloading from ModelScope, the \"Model Hubs\" section in the spec information will\ninclude \"ModelScope\".\n"
  },
  {
    "path": "doc/source/models/virtualenv.rst",
    "content": ".. _model_virtual_env:\n.. _virtualenv:\n\n==========================\nModel Virtual Environments\n==========================\n\n.. versionadded:: v1.5.0\n\nBackground\n##########\n\nSome models are no longer maintained after their release, and the versions of the libraries they depend on remain outdated.\nFor example, the ``GOT-OCR2`` model still relies on ``transformers`` version 4.37.2. If this library is updated to a newer version,\nthe model can no longer function properly. On the other hand, many newer models require the latest version of ``transformers``.\nThis version mismatch leads to dependency conflicts.\n\nSolution\n########\n\nTo address this issue, we have introduced the **Model Virtual Environment** feature.\n\nInstall requirements for this functionality via\n\n.. code-block:: bash\n\n    # all\n    pip install 'xinference[all]'\n    # or virtualenv\n    pip install 'xinference[virtualenv]'\n\nEnable by setting environment variable ``XINFERENCE_ENABLE_VIRTUAL_ENV=1``.\n\nExample usage:\n\n.. code-block:: bash\n\n  # For command line\n  XINFERENCE_ENABLE_VIRTUAL_ENV=1 xinference-local ...\n\n  # For Docker\n  docker run -e XINFERENCE_ENABLE_VIRTUAL_ENV=1 ...\n\n.. warning::\n\n  This feature requires internet access or a self-hosted PyPI mirror.\n\n  Xinference will by default inherit the config for current pip.\n\n.. note::\n\n  Note: When launching a vLLM/SgLang engine model inside a virtual environment, if you encounter\n  a cuDNN error, you can set:\n\n  .. code-block:: bash\n\n    export LD_LIBRARY_PATH=$CONDA_PREFIX/lib/python3.12/site-packages/nvidia/cudnn/lib:$LD_LIBRARY_PATH\n    export LD_LIBRARY_PATH=$CONDA_PREFIX/lib/python3.12/site-packages/nvidia/cusparselt/lib:$LD_LIBRARY_PATH\n    export LD_LIBRARY_PATH=$CONDA_PREFIX/lib/python3.12/site-packages/nvidia/nccl/lib:$LD_LIBRARY_PATH\n\n.. versionchanged:: v2.0.0\n\n  Starting from **Xinference v2.0**, the model virtual environment feature is\n  enabled by default (i.e., ``XINFERENCE_ENABLE_VIRTUAL_ENV`` defaults to ``1``).\n\n  To disable it globally, set ``XINFERENCE_ENABLE_VIRTUAL_ENV=0`` when starting Xinference.\n\nWhen enabled, Xinference will automatically create a dedicated virtual environment for each model when it is loaded,\nand install its specific dependencies there. This prevents dependency conflicts between models,\nallowing them to run in isolation without affecting one another.\n\nUsing Virtual Environments (v2.0)\n#################################\n\nGlobal toggle\n~~~~~~~~~~~~~\n\nVirtual environments are enabled by default starting from v2.0. You can still override this globally:\n\n.. code-block:: bash\n\n  # Enable globally (default)\n  XINFERENCE_ENABLE_VIRTUAL_ENV=1 xinference-local -H 0.0.0.0 -p 9997\n\n  # Disable globally\n  XINFERENCE_ENABLE_VIRTUAL_ENV=0 xinference-local -H 0.0.0.0 -p 9997\n\nPer-model override at launch time\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can override the global setting when launching a model:\n\n.. code-block:: bash\n\n  # Force enable for this model\n  xinference launch -n qwen2.5-instruct --model-engine transformers --enable-virtual-env\n\n  # Force disable for this model\n  xinference launch -n qwen2.5-instruct --model-engine transformers --disable-virtual-env\n\nAdd or override packages at launch time\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nUse ``--virtual-env-package`` (or ``-vp``) multiple times:\n\n.. code-block:: bash\n\n  xinference launch -n qwen2.5-instruct --model-engine transformers \\\n    --virtual-env-package transformers==4.46.3 \\\n    --virtual-env-package accelerate==0.33.0\n\nIf you specify a package that already exists in the model's default virtualenv package list,\nyour version replaces the default instead of being appended.\n\n\nStorage Location\n################\n\nBy default, the model’s virtual environment is stored under path:\n\n* Before v1.6.0: :ref:`XINFERENCE_HOME <environments_xinference_home>` / virtualenv / {model_name}\n* From v1.6.0 to v1.13.0: :ref:`XINFERENCE_HOME <environments_xinference_home>` / virtualenv / v2 / {model_name}\n* Since v1.14.0: :ref:`XINFERENCE_HOME <environments_xinference_home>` / virtualenv / v3 / {model_name} / {python_version}\n* Since v2.0: :ref:`XINFERENCE_HOME <environments_xinference_home>` / virtualenv / v4 / {model_name} / {model_engine} / {python_version}\n\nSkip Installed Libraries\n########################\n\n.. _skip_installed_libraries:\n\n.. versionadded:: v1.8.1\n\n   This feature requires ``xoscar >= 0.7.12``, which is the minimum Xoscar version required for Xinference v1.8.1.\n\n``xinference`` uses the ``uv`` tool to create virtual environments, with the current Python **system site-packages** set as the base environment.\nBy default, ``uv`` **does not check for existing packages in the system environment** and reinstalls all dependencies in the virtual environment.\nThis ensures better isolation from system packages but can result in redundant installations, longer setup times, and increased disk usage.\n\nStarting from ``v1.8.1``, an **experimental feature** is available:\nby setting the environment variable ``XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED=1``, ``uv`` will **skip packages already available in system site-packages**.\n\n.. versionchanged:: v2.0\n\n    This feature is enabled by default in ``v2.0``. To disable it, set ``XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED=0``.\n\nAdvantages\n~~~~~~~~~~\n\n- Avoid redundant installations of large dependencies (e.g., ``torch`` + ``CUDA``).\n- Speed up virtual environment creation.\n- Reduce disk usage.\n\nUsage\n~~~~~\n\n.. code-block:: bash\n\n   # Enable experimental feature\n\n   # For command line\n   XINFERENCE_ENABLE_VIRTUAL_ENV=1 XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED=1 xinference-local ...\n   # For docker\n   docker run -e XINFERENCE_ENABLE_VIRTUAL_ENV=1 -e XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED=1 ...\n\nPerformance Comparison\n~~~~~~~~~~~~~~~~~~~~~~\n\nUsing the ``CosyVoice 0.5B`` model as an example:\n\n**Without this feature enabled**::\n\n    Installed 98 packages in 187ms\n     + aiohappyeyeballs==2.6.1\n     + aiohttp==3.12.13\n     ...\n     + torch==2.7.1\n     ...\n     + yarl==1.20.1\n     + zipp==3.23.0\n\n**With this feature enabled**::\n\n    Installed 7 packages in 12ms\n     + diffusers==0.29.0\n     + hf-xet==1.1.5\n     + huggingface-hub==0.33.2\n     + importlib-metadata==8.7.0\n     + pillow==11.3.0\n     + typing-extensions==4.14.0\n     + urllib3==2.5.0\n\n\n.. _model_launching_virtualenv:\n\nModel Launching: Toggle Virtual Environments and Customize Dependencies\n#######################################################################\n\n.. versionadded:: v1.8.1\n\nStarting from v1.8.1, we support toggling the virtual environment for individual model launching,\nas well as overriding the model's default settings with custom package dependencies.\n\nToggle Virtual Environment\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWhen loading a model, you can specify whether to enable the model's virtual environment.\nIf not specified, the setting will follow the environment variable configuration.\n\nFor the Web UI, this can be toggled on or off through the optional settings switch.\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../_static/model_virtual_env.png\" style=\"background-color: transparent\", width=\"95%\">\n\nFor command-line loading, use the ``--enable-virtual-env`` option to enable the virtual environment, or ``--disable-virtual-env`` to disable it.\n\nExample usage:\n\n.. code-block:: bash\n\n  xinference launch xxx --enable-virtual-env\n\nSet Virtual Environment Package Dependencies\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nFor supported models, Xinference has already defined the package dependencies and version requirements within the virtual environment.\nHowever, if you need to specify particular versions or install additional dependencies, you can manually provide them during model loading.\n\nIn the Web UI, you can add custom dependencies by clicking the plus icon in the same location as the virtual environment toggle.\n\nFor the command line, use ``--virtual-env-package`` or ``-vp`` to specify a single package version.\n\nExample usage:\n\n.. code-block:: bash\n\n  xinference launch xxx --virtual-env-package transformers==4.54.0\n\nIn addition to the standard way of specifying package dependencies, such as ``transformers==xxx``, Xinference also supports some extended syntax.\n\n* ``#system_xxx#``: Using the same version as the system site packages, such as ``#system_numpy#``,\n  ensures that the installed package matches the system site package version of numpy. This helps prevent dependency conflicts.\n\n\n.. _manage_virtual_enviroments:\n\nManage Virtual Enviroments\n##########################\n\n.. versionadded:: v1.14.0\n\nXinference provides comprehensive virtual environment management for model dependencies,\nallowing you to create isolated Python environments for each model with specific package requirements.\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../_static/manage_virtual_envs1.png\" style=\"background-color: transparent\", width=\"95%\">\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../_static/manage_virtual_envs2.png\" style=\"background-color: transparent\", width=\"95%\">\n\nKey Features\n############\n\n**Multiple Python Version Support**:\nEach model can have virtual environments\nwith different Python versions (e.g., Python 3.10.18, 3.11.5),\nenabling compatibility with various model requirements.\n\n**Isolated Dependencies**:\nEach virtual environment contains its own set of packages,\npreventing conflicts between different models' requirements.\n\nManagement Operations\n#####################\n\n**Listing Virtual Environments**:\nView all virtual environments across your cluster,\nfiltered by model name or worker IP address.\n\n**Creating Environments**:\nAutomatically created when launching models with enable_virtual_env=true.\nThe system detects your current Python version and creates an isolated\nenvironment with the required packages.\n\n**Removing Environments**:\nDelete specific virtual environments by model name and optionally\nPython version, or remove all environments for a model.\n\nModelHub JSON for Xinference Models\n###################################\n\nIf you plan to add a model to a model hub for Xinference, define a ``virtualenv`` block\nin the model JSON. Starting from v2.0 (v4 flow), **engine-aware markers are recommended**\nso one JSON can cover multiple engines.\n\nImportant rule:\nIf a new model supports a specific engine, you **must** include at least one package\nentry for that engine in ``virtualenv.packages`` and attach a marker, for example\n``#engine# == \"vllm\"``. Engine availability checks rely on these markers when\nvirtual environments are enabled.\n\nMinimal virtualenv block (recommended)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: json\n\n  {\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"mlx\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  }\n\nField reference\n^^^^^^^^^^^^^^^\n\n- ``packages`` (required): list of pip requirement strings or markers.\n- ``inherit_pip_config`` (default ``true``): inherit system pip configuration if present.\n- ``index_url`` / ``extra_index_url`` / ``find_links`` / ``trusted_host``:\n  pip index and mirror controls.\n- ``index_strategy``: passed through to the virtualenv installer (used by some engines).\n- ``no_build_isolation``: pip build isolation switch for tricky builds.\n\nEngine placeholders\n^^^^^^^^^^^^^^^^^^\n\nUse wrapped placeholders to inject engine defaults:\n\n- ``#vllm_dependencies#``\n- ``#sglang_dependencies#``\n- ``#mlx_dependencies#``\n- ``#transformers_dependencies#``\n- ``#llama_cpp_dependencies#``\n- ``#diffusers_dependencies#``\n- ``#sentence_transformers_dependencies#``\n\nMarkers and case\n^^^^^^^^^^^^^^^^\n\nMarkers use ``#engine#`` or ``#model_engine#`` comparisons (case-sensitive).\nEngine values are passed in lowercase internally, so prefer lowercase values,\nfor example ``#engine# == \"vllm\"`` or ``#engine# == \"transformers\"``.\n"
  },
  {
    "path": "doc/source/models/xinference_models_hub.rst",
    "content": ".. _xinference_models_hub:\n\n=====================\nXinference Models Hub\n=====================\n.. versionadded:: v1.13.0\n\nOverview\n########\n\nThe `Xinference Models Hub <https://model.xinference.io>`_ is Xinference’s unified platform for model management and collaboration. It provides end-to-end support for model browsing, registration, review, updates, and collaborative maintenance, serving both regular users and model maintainers.\n\nBefore the introduction of the Models Hub, model JSON files were manually submitted and modified directly through PRs in the open-source repository (`xorbitsai/inference`). This approach resulted in uncontrolled versioning, long iteration cycles, and delays in delivering updated models—since model updates were tied to product release cycles, users could not obtain new models promptly.\n\nWith centralized online model management, the Xinference Models Hub requires that **all model information—including metadata, parameters, and the README—be edited within the platform**. Based on modifications made by :ref:`model maintainers <model_maintainer_guide>`, the system **automatically generates and submits PRs** to the `xorbitsai/inference` repository, ensuring a standardized, automated, and traceable workflow that eliminates inconsistencies caused by manual edits.\n\nUsers can obtain the latest model list at any time through the :ref:`model_update` feature, significantly improving model delivery efficiency and overall experience.\n\nUser Guide for Regular Users\n############################\n\nThis section introduces the basic features available to regular registered users.\n\n**Audience:** Regular users without model registration or maintenance permissions.\n\nCore Features\n^^^^^^^^^^^^^\n\nRegular users can browse public models without logging in:\n\n* **Access:** `Xinference Models Hub <https://model.xinference.io>`_\n\nBrowse Models\n~~~~~~~~~~~~~\n\n* **Function:** View all publicly available models\n* **Location:** Navigation bar → “Models”\n* **Model Details:** The default tab is “README,” which includes model description, usage guide, and important notes\n\n.. note::\n   Certain advanced or enterprise-level models are visible only to authorized users.\n\n.. _model_maintainer_guide:\n\nGuide for Model Maintainers\n############################\n\nThis section describes the features available to users with model registration or maintenance permissions, including model registration, updates, and review workflows.\n\n**Audience:** Users with model registration or maintenance permissions.\nTo become a model maintainer, you may `contact us <https://xinference.cn/images/WeCom.jpg>`_.\n\nCore Features (Login Required)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nModel maintainers have access to the following advanced features in addition to the capabilities available to regular users.\n\nUser Center\n~~~~~~~~~~~\n\n* **Function:** View and manage personal information\n* **Location:** Top-right avatar → “User Center”\n* **Account Management:** Update profile, email, and other information\n* **Token Management:** Configure a personal GitHub Token for model submissions or updates\n\n.. note::\n   If no GitHub Token is configured, the system will use a default Token when generating PRs.\n\nModel Registration\n~~~~~~~~~~~~~~~~~~\n\n* **Function:** Register new models and submit them for review\n* **Location:** After logging in → Top-right avatar → “Model Registration”\n\n**Submission Steps:**\n\n1. Fill in basic model information (name, engine, format, etc.)\n2. Edit the README (click “Get README” to auto-generate a template)\n3. Submit the model (enable the “Public Model” parameter if registering a public model)\n\n.. note::\n   When registering a public model, the system automatically creates a PR in the `xorbitsai/inference` repository.\n\nMy Models\n~~~~~~~~~\n\n* **Function:** View all models associated with the current account\n* **Location:** After logging in → Top-right avatar → “My Models”\n\nModel Maintenance\n~~~~~~~~~~~~~~~~~\n\n* **Function:** Modify the model’s JSON or README\n* **Location:** Model details page → “Settings” icon\n\n.. note::\n   When updating a public model, the system automatically creates a PR in the `xorbitsai/inference` repository.\n\nReview Workflow\n~~~~~~~~~~~~~~~\n\n**Submitter Workflow:**\n\n1. Submit a model\n2. Wait for review\n3. Revise based on reviewer feedback\n4. Updated PRs are generated automatically (for public models)\n\n**Reviewer Permissions:** Access to the model review list and model review privileges.\n\n**Reviewer Workflow:**\n\n1. Enter the “Review List”\n2. Evaluate the model’s quality, completeness, and compliance\n3. Approve or reject, providing feedback as necessary\n"
  },
  {
    "path": "doc/source/norm_zh.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# This file is derived from https://github.com/mars-project/mars/blob/master/docs/source/norm_zh.py\n\nimport datetime\nimport os\n\nfrom babel.messages import pofile\nfrom babel.messages.pofile import escape\n\n\ndef _zh_len(s):\n    \"\"\"\n    Calculate text length in Chinese\n    \"\"\"\n    try:\n        return len(s.encode(\"gb2312\"))\n    except ValueError:\n        return len(s)\n\n\ndef _zh_split(s):\n    \"\"\"\n    Split text length in Chinese\n    \"\"\"\n    import jieba\n\n    try:\n        s.encode(\"ascii\")\n        has_zh = False\n    except ValueError:\n        has_zh = True\n\n    if has_zh:\n        return list(jieba.cut(s))\n    else:\n        return pofile.WORD_SEP.split(s)\n\n\n# code modified from babel.messages.pofile (hash 359ecffca479dfe032d0f7210d5cd8160599c816)\ndef _normalize(string, prefix=\"\", width=76):\n    r\"\"\"Convert a string into a format that is appropriate for .po files.\n    >>> print(normalize('''Say:\n    ...   \"hello, world!\"\n    ... ''', width=None))\n    \"\"\n    \"Say:\\n\"\n    \"  \\\"hello, world!\\\"\\n\"\n    >>> print(normalize('''Say:\n    ...   \"Lorem ipsum dolor sit amet, consectetur adipisicing elit, \"\n    ... ''', width=32))\n    \"\"\n    \"Say:\\n\"\n    \"  \\\"Lorem ipsum dolor sit \"\n    \"amet, consectetur adipisicing\"\n    \" elit, \\\"\\n\"\n    :param string: the string to normalize\n    :param prefix: a string that should be prepended to every line\n    :param width: the maximum line width; use `None`, 0, or a negative number\n                  to completely disable line wrapping\n    \"\"\"\n\n    if width and width > 0:\n        prefixlen = _zh_len(prefix)\n        lines = []\n        for line in string.splitlines(True):\n            if _zh_len(escape(line)) + prefixlen > width:\n                chunks = _zh_split(line)\n                chunks.reverse()\n                while chunks:\n                    buf = []\n                    size = 2\n                    while chunks:\n                        l = _zh_len(escape(chunks[-1])) - 2 + prefixlen  # noqa: E741\n                        if size + l < width:\n                            buf.append(chunks.pop())\n                            size += l\n                        else:\n                            if not buf:\n                                # handle long chunks by putting them on a\n                                # separate line\n                                buf.append(chunks.pop())\n                            break\n                    lines.append(\"\".join(buf))\n            else:\n                lines.append(line)\n    else:\n        lines = string.splitlines(True)\n\n    if len(lines) <= 1:\n        return escape(string)\n\n    # Remove empty trailing line\n    if lines and not lines[-1]:\n        del lines[-1]\n        lines[-1] += \"\\n\"\n    return '\"\"\\n' + \"\\n\".join([(prefix + escape(line)) for line in lines])\n\n\ndef main():\n    try:\n        import jieba  # noqa: F401\n    except ImportError:\n        return\n\n    pofile.normalize = _normalize\n    for root, _dirs, files in os.walk(\".\"):\n        if \"zh\" not in root:\n            continue\n        for f in files:\n            if not f.endswith(\".po\"):\n                continue\n            path = os.path.join(root, f)\n\n            # only modify recent-changed files\n            modify_time = datetime.datetime.fromtimestamp(os.path.getmtime(path))\n            if (datetime.datetime.now() - modify_time).total_seconds() > 120:\n                continue\n\n            with open(path, \"rb\") as inpf:\n                catalog = pofile.read_po(inpf)\n            with open(path, \"wb\") as outf:\n                pofile.write_po(outf, catalog)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "doc/source/reference/index.rst",
    "content": ".. _reference_index:\n\n=============\nAPI Reference\n=============\n\n\nClient\n~~~~~~~\n.. autosummary::\n   :toctree: generated/\n\n   xinference.client.Client\n\n   xinference.client.Client.describe_model\n   xinference.client.Client.get_model\n   xinference.client.Client.get_model_registration\n   xinference.client.Client.get_launch_model_progress\n   xinference.client.Client.cancel_launch_model\n   xinference.client.Client.get_instance_info\n   xinference.client.Client.launch_model\n   xinference.client.Client.list_model_registrations\n   xinference.client.Client.list_models\n   xinference.client.Client.list_cached_models\n   xinference.client.Client.list_deletable_models\n   xinference.client.Client.confirm_and_remove_model\n   xinference.client.Client.query_engine_by_model_name\n   xinference.client.Client.register_model\n   xinference.client.Client.terminate_model\n   xinference.client.Client.abort_request\n   xinference.client.Client.vllm_models\n   xinference.client.Client.login\n   xinference.client.Client.get_workers_info\n   xinference.client.Client.get_supervisor_info\n   xinference.client.Client.get_progress\n   xinference.client.Client.abort_cluster\n   xinference.client.Client.unregister_model\n\n\nModel Handles\n~~~~~~~~~~~~~\n\n\nChatModelHandle\n^^^^^^^^^^^^^^^\n.. autosummary::\n   :toctree: generated/\n\n   xinference.client.handlers.ChatModelHandle\n\n   xinference.client.handlers.ChatModelHandle.chat\n   xinference.client.handlers.ChatModelHandle.generate\n\n\nEmbeddingModelHandle\n^^^^^^^^^^^^^^^^^^^^\n.. autosummary::\n   :toctree: generated/\n\n   xinference.client.handlers.EmbeddingModelHandle\n\n   xinference.client.handlers.EmbeddingModelHandle.create_embedding\n\n\nRerankModelHandle\n^^^^^^^^^^^^^^^^^\n.. autosummary::\n   :toctree: generated/\n\n   xinference.client.restful.restful_client.RESTfulRerankModelHandle\n\n   xinference.client.restful.restful_client.RESTfulRerankModelHandle.rerank\n\n\nGenerateModelHandle\n^^^^^^^^^^^^^^^^^^^\n.. autosummary::\n   :toctree: generated/\n\n   xinference.client.handlers.GenerateModelHandle\n\n   xinference.client.handlers.GenerateModelHandle.generate\n\n\nImageModelHandle\n^^^^^^^^^^^^^^^^\n.. autosummary::\n   :toctree: generated/\n\n   xinference.client.handlers.ImageModelHandle\n\n   xinference.client.handlers.ImageModelHandle.text_to_image\n\n\nAudioModelHandle\n^^^^^^^^^^^^^^^^\n.. autosummary::\n   :toctree: generated/\n\n   xinference.client.handlers.AudioModelHandle\n\n   xinference.client.handlers.AudioModelHandle.transcriptions\n   xinference.client.handlers.AudioModelHandle.translations\n   xinference.client.handlers.AudioModelHandle.speech\n\n\nFlexibleModelHandle\n^^^^^^^^^^^^^^^^^^^\n.. autosummary::\n   :toctree: generated/\n\n   xinference.client.restful.restful_client.RESTfulFlexibleModelHandle\n\n   xinference.client.restful.restful_client.RESTfulFlexibleModelHandle.infer\n\n\nVideoModelHandle\n^^^^^^^^^^^^^^^^\n.. autosummary::\n   :toctree: generated/\n\n   xinference.client.handlers.VideoModelHandle\n\n   xinference.client.handlers.VideoModelHandle.text_to_video\n"
  },
  {
    "path": "doc/source/user_guide/auth_system.rst",
    "content": ".. _user_guide_auth_system:\n\n===================================\nSimple OAuth2 System (experimental)\n===================================\n\nXinference builds an In-memory OAuth2 authentication and authorization system using the account-password mode.\n\n.. note::\n   If you don't have authentication and authorization requirements, you can use Xinference as before, without any changes.\n\n\nPermissions\n===========\nCurrently, Xinference system internally defines some interface permissions:\n\n* ``models:list``: Permission to list models and get models' information.\n* ``models:read``: Permission to use models.\n* ``models:register``: Permission to register custom models.\n* ``models:unregister``: Permission to unregister custom models.\n* ``models:start``: Permission to launch models.\n* ``models:stop``: Permission to stop running models.\n* ``admin``: Administrators have permissions for all interfaces.\n\n\nStartup\n=======\nAll authentication and authorization information needs to be specified and loaded into memory when Xinference is started.\nXinference requires a JSON-formatted file with the following specific fields:\n\n.. code-block:: json\n\n    {\n        \"auth_config\": {\n            \"algorithm\": \"HS256\",\n            \"secret_key\": \"09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7\",\n            \"token_expire_in_minutes\": 30\n        },\n        \"user_config\": [\n            {\n                \"username\": \"user1\",\n                \"password\": \"secret1\",\n                \"permissions\": [\n                    \"admin\"\n                ],\n                \"api_keys\": [\n                    \"sk-72tkvudyGLPMi\",\n                    \"sk-ZOTLIY4gt9w11\"\n                ]\n            },\n            {\n                \"username\": \"user2\",\n                \"password\": \"secret2\",\n                \"permissions\": [\n                    \"models:list\",\n                    \"models:read\"\n                ],\n                \"api_keys\": [\n                    \"sk-35tkasdyGLYMy\",\n                    \"sk-ALTbgl6ut981w\"\n                ]\n            }\n        ]\n    }\n\n\n* ``auth_config``: This field is used to configure security-related information.\n\n   * ``algorithm``: The algorithm used for token generation and parsing. ``HS`` series algorithms are recommended. For example, ``HS256``, ``HS384`` or ``HS512``.\n\n   * ``secret_key``: The secret_key used for token generation and parsing. Use this command to generate the secret_key adapted to the ``HS`` algorithms: ``openssl rand -hex 32``.\n\n   * ``token_expire_in_minutes``: Reserved field indicating the expiration time of the token. The current open-source version of Xinference does not check the expiration time of tokens.\n\n* ``user_config``: This field is used to configure user and permission information. Each user information is composed of these fields:\n\n   * ``username``: string field for username.\n\n   * ``password``: string field for password.\n\n   * ``permissions``: A list containing strings representing the permissions that this user has. The permissions are described as above.\n\n   * ``api_keys``: A list containing strings representing the api-keys of this user. With these api-keys, user can access the xinference interfaces without the need to signin. The api-key here is formatted similar to the ``OPENAI_API_KEY`` , always starting with ``sk-``, followed by 13 alphanumeric characters.\n\n\nOnce you have configured such a JSON file, use the ``--auth-config`` option to enable Xinference with the authentication and authorization system. For example, for local startup:\n\n.. code-block:: bash\n\n   xinference-local -H 0.0.0.0 --auth-config /path/to/your_json_config_file\n\n\nFor distributed startup, just specify this option when starting the supervisor:\n\n.. code-block:: bash\n\n   xinference-supervisor -H <supervisor_ip> --auth-config /path/to/your_json_config_file\n\n\nUsage\n=====\nFor Xinference with the authentication and authorization system enabled, all usage remains the same, except for the addition of a login step at the beginning or using the api-key.\n\nSignin\n------\nSignin for command line users:\n\n.. code-block:: bash\n\n   xinference login -e <endpoint> --username <username> --password <password>\n\n\nFor python SDK users:\n\n.. code-block:: python\n\n   from xinference.client import Client\n   client = Client('<endpoint>')\n   client.login('<name>', '<pass>')\n\n\nFor web UI users, when opening the web UI, you will first be directed to the login page. After logging in, you can use the web UI normally.\n\nApi-Key\n-------\nFor command line users, just add ``--api-key`` or ``-ak`` option in the command you want to use.\n\n.. code-block:: bash\n\n   xinference launch <other options> --api-key <your_api_key>\n\n\nFor python SDK users, pass the ``api_key`` parameter when initializing the client, just like the ``OPENAI`` Python client.\n\n.. code-block:: python\n\n   from xinference.client import Client\n   client = Client('<endpoint>', api_key='<your_api_key>')\n\n\nXinference is also compatible with the ``OPENAI`` Python SDK as well.\n\n.. code-block:: python\n\n   from openai import OpenAI\n   client = OpenAI(base_url=\"<xinference endpoint>\" + \"/v1\", api_key=\"<your_api_key>\")\n   client.models.list()\n\nFor http request, pass ``Authorization: Bearer api-key`` in request header.\n\n.. code-block::\n\n    curl --request GET \\\n      --url \"<xinference endpoint>\" \\\n      --header \"Authorization: Bearer <your_api_key>\"\n\n\nHttp Status Code\n================\nAdd the following two HTTP status codes:\n\n* ``401 Unauthorized``: login information or token verifies failed.\n* ``403 Forbidden``: No enough permissions when accessing interfaces.\n\nFor the command line, SDK, or web UI users, there will be clear information prompts when encountering authorization and permissions issues.\n\n\nNote\n====\nThis feature is still in an experimental stage.\nFeel free to provide feedback on usage issues or improvement suggestions through `GitHub issues <https://github.com/xorbitsai/inference/issues>`_ or\n`our Slack <https://join.slack.com/t/xorbitsio/shared_invite/zt-1o3z9ucdh-RbfhbPVpx7prOVdM1CAuxg>`_.\n"
  },
  {
    "path": "doc/source/user_guide/backends.rst",
    "content": ".. _user_guide_backends:\n\n========\nBackends\n========\n\nXinference supports multiple backends for different models. After the user specifies the model,\nxinference will automatically select the appropriate backend.\n\nllama.cpp\n=========\n\nXinference now supports `xllamacpp <https://github.com/xorbitsai/xllamacpp>`_ which developed by Xinference team\nto run llama.cpp backend.\n`llama.cpp` is developed based on the tensor library `ggml`, supporting inference of\nthe LLaMA series models and their variants.\n\n.. warning::\n\n    Since Xinference v1.5.0,\n    ``xllamacpp`` becomes default option for llama.cpp, and ``llama-cpp-python`` is deprecated.\n    Since Xinference v1.6.0, ``llama-cpp-python`` has been removed.\n\n\nFor all configurable llama.cpp parameters, please refer to the definition of the ``common_params`` structure in ``llama.cpp`` `common.h <https://github.com/ggml-org/llama.cpp/blob/master/common/common.h>`_\n\nThere may be some nested parameters. For example, ``sampling.top_k``. Just use the ``.`` to separate nested parameters.\n\nHere is an example of setting nested sampling parameters in WebUI:\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../_static/xllamacpp_param.png\" style=\"background-color: transparent\", width=\"95%\">\n\nAuto NGL\n-------------\n\n.. versionadded:: v1.6.1\n    Auto GPU layers estimation is enabled since v1.6.1 when ``n-gpu-layers`` is not specified (default is -1).\n\nThis feature automatically detects the number of GPU layers (NGL) for the llama.cpp backend. Please be aware that this\nis not an accurate calculation. Therefore, the ``-ngl`` result might not be the most optimized, and there is still a\nchance of encountering an out-of-memory error.\n\nCurrently, there is no official implementation for auto ngl. Please refer to the following issues for more information:\n\n- https://github.com/ggml-org/llama.cpp/issues/13860\n- https://github.com/ggml-org/llama.cpp/pull/6502\n\nOur implementation is based on the Ollama auto ngl, but there are some differences:\n\n- We utilize device information detected by `xllamacpp <https://github.com/xorbitsai/xllamacpp>`_.\n- We have removed support for less popular architectures, these architectures will use the default calculation.\n- We fall back to offloading all the layers to the GPU if the auto ngl fails.\n- We do not support multimodal projectors embedded into the model GGUF, as this is a very experimental feature.\n\n\nCommon Issues\n-------------\n\n- **Server error: {'code': 500, 'message': 'failed to process image', 'type': 'server_error'}**\n\n  The error logs from server:\n\n  .. code-block::\n\n    encoding image or slice...\n    slot update_slots: id  0 | task 0 | kv cache rm [10, end)\n    srv  process_chun: processing image...\n    ggml_metal_graph_compute: command buffer 0 failed with status 5\n    error: Internal Error (0000000e:Internal Error)\n    clip_image_batch_encode: ggml_backend_sched_graph_compute failed with error -1\n    failed to encode image\n    srv  process_chun: image processed in 2288 ms\n    mtmd_helper_eval failed with status 1\n    slot update_slots: id  0 | task 0 | failed to process image, res = 1\n\n  This could be caused by running out of memory. You can try reducing memory usage by decreasing ``n_ctx``.\n\n- **Server error: {'code': 400, 'message': 'the request exceeds the available context size. try increasing the context size or enable context shift', 'type': 'invalid_request_error'}**\n\n  If you are using the multimodal feature, the ``ctx_shift`` is disabled by default. Please increase the context size by\n  either increasing ``n_ctx`` or reducing ``n_parallel``.\n\n- **Server error: {'code': 500, 'message': 'Input prompt is too big compared to KV size. Please try increasing KV size.', 'type': 'server_error'}**\n\n  The error logs from server:\n\n  .. code-block::\n\n    ggml_metal_graph_compute: command buffer 1 failed with status 5\n    error: Insufficient Memory (00000008:kIOGPUCommandBufferCallbackErrorOutOfMemory)\n    graph_compute: ggml_backend_sched_graph_compute_async failed with error -1\n    llama_decode: failed to decode, ret = -3\n    srv  update_slots: failed to decode the batch: KV cache is full - try increasing it via the context size, i = 0, n_batch = 2048, ret = -3\n\n  This could be caused by the KV cache allocation failure. You can try to reduce the context size by either reducing\n  ``n_ctx`` or increasing ``n_parallel``, or loading a partial model onto the GPU by adjusting ``n_gpu_layers``. Be aware\n  that if you are handling inference requests serially, increasing ``n_parallel`` can't improve the latency or throughput.\n\ntransformers\n============\nTransformers supports the inference of most state-of-art models. It is the default backend for models in PyTorch format.\n\n.. _vllm_backend:\n\nvLLM\n====\nvLLM is a fast and easy-to-use library for LLM inference and serving.\n\nvLLM is fast with:\n\n- State-of-the-art serving throughput\n- Efficient management of attention key and value memory with PagedAttention\n- Continuous batching of incoming requests\n- Optimized CUDA kernels\n\nWhen the following conditions are met, Xinference will choose vLLM as the inference engine:\n\n- The model format is ``pytorch``, ``gptq``, ``awq``, ``fp4``, ``fp8`` or ``bnb``.\n- When the model format is ``pytorch``, the quantization is ``none``.\n- When the model format is ``awq``, the quantization is ``Int4``.\n- When the model format is ``gptq``, the quantization is ``Int3``, ``Int4`` or ``Int8``.\n- The system is Linux and has at least one CUDA device\n- The model family (for custom models) / model name (for builtin models) is within the list of models supported by vLLM\n\nCurrently, supported model includes:\n\n.. vllm_start\n\n- ``code-llama``, ``code-llama-instruct``, ``code-llama-python``, ``deepseek``, ``deepseek-chat``, ``deepseek-coder``, ``deepseek-coder-instruct``, ``deepseek-r1-distill-llama``, ``gorilla-openfunctions-v2``, ``HuatuoGPT-o1-LLaMA-3.1``, ``llama-2``, ``llama-2-chat``, ``llama-3``, ``llama-3-instruct``, ``llama-3.1``, ``llama-3.1-instruct``, ``llama-3.3-instruct``, ``tiny-llama``, ``wizardcoder-python-v1.0``, ``wizardmath-v1.0``, ``Yi``, ``Yi-1.5``, ``Yi-1.5-chat``, ``Yi-1.5-chat-16k``, ``Yi-200k``, ``Yi-chat``\n- ``codestral-v0.1``, ``mistral-instruct-v0.1``, ``mistral-instruct-v0.2``, ``mistral-instruct-v0.3``, ``mistral-large-instruct``, ``mistral-nemo-instruct``, ``mistral-v0.1``, ``openhermes-2.5``, ``seallm_v2``\n- ``Baichuan-M2``, ``codeqwen1.5``, ``codeqwen1.5-chat``, ``deepseek-r1-distill-qwen``, ``DianJin-R1``, ``fin-r1``, ``HuatuoGPT-o1-Qwen2.5``, ``KAT-V1``, ``marco-o1``, ``qwen1.5-chat``, ``qwen2-instruct``, ``qwen2.5``, ``qwen2.5-coder``, ``qwen2.5-coder-instruct``, ``qwen2.5-instruct``, ``qwen2.5-instruct-1m``, ``qwenLong-l1``, ``QwQ-32B``, ``QwQ-32B-Preview``, ``seallms-v3``, ``skywork-or1``, ``skywork-or1-preview``, ``XiYanSQL-QwenCoder-2504``\n- ``llama-3.2-vision``, ``llama-3.2-vision-instruct``\n- ``baichuan-2``, ``baichuan-2-chat``\n- ``InternLM2ForCausalLM``\n- ``qwen-chat``\n- ``mixtral-8x22B-instruct-v0.1``, ``mixtral-instruct-v0.1``, ``mixtral-v0.1``\n- ``cogagent``\n- ``glm-edge-chat``, ``glm4-chat``, ``glm4-chat-1m``\n- ``codegeex4``, ``glm-4v``\n- ``seallm_v2.5``\n- ``orion-chat``\n- ``qwen1.5-moe-chat``, ``qwen2-moe-instruct``\n- ``CohereForCausalLM``\n- ``deepseek-v2-chat``, ``deepseek-v2-chat-0628``, ``deepseek-v2.5``, ``deepseek-vl2``\n- ``deepseek-prover-v2``, ``deepseek-r1``, ``deepseek-r1-0528``, ``deepseek-v3``, ``deepseek-v3-0324``, ``Deepseek-V3.1``, ``moonlight-16b-a3b-instruct``\n- ``deepseek-r1-0528-qwen3``, ``qwen3``\n- ``minicpm3-4b``\n- ``internlm3-instruct``\n- ``gemma-3-1b-it``\n- ``glm4-0414``\n- ``minicpm-2b-dpo-bf16``, ``minicpm-2b-dpo-fp16``, ``minicpm-2b-dpo-fp32``, ``minicpm-2b-sft-bf16``, ``minicpm-2b-sft-fp32``, ``minicpm4``\n- ``Ernie4.5``\n- ``Qwen3-Coder``, ``Qwen3-Instruct``, ``Qwen3-Thinking``\n- ``glm-4.5``, ``GLM-4.6``, ``GLM-4.7``\n- ``gpt-oss``\n- ``seed-oss``\n- ``Qwen3-Next-Instruct``, ``Qwen3-Next-Thinking``\n- ``DeepSeek-V3.2``, ``DeepSeek-V3.2-Exp``\n- ``MiniMax-M2``, ``MiniMax-M2.5``\n- ``glm-5``\n.. vllm_end\n\n.. _sglang_backend:\n\nSGLang\n======\n`SGLang <https://github.com/sgl-project/sglang>`_ has a high-performance inference runtime with RadixAttention.\nIt significantly accelerates the execution of complex LLM programs by automatic KV cache reuse across multiple calls.\nAnd it also supports other common techniques like continuous batching and tensor parallelism.\n\n.. _mlx_backend:\n\nMLX\n===\n`MLX <https://github.com/ml-explore/mlx-examples/tree/main/llms>`_ provides efficient runtime\nto run LLM on Apple silicon. It's recommended to use for Mac users when running on Apple silicon\nif the model has MLX format support.\n\n"
  },
  {
    "path": "doc/source/user_guide/client_api.rst",
    "content": ".. _user_guide_client_api:\n\n==========\nClient API\n==========\n\nComplete Client API Reference: :ref:`reference_index`\n\nTo utilize the Client API, initiate the xinference server using the command below:\n\n.. code-block::\n\n    >>> xinference\n    2023-10-17 16:32:21,700 xinference   24584 INFO     Xinference successfully started. Endpoint: http://127.0.0.1:9997\n    2023-10-17 16:32:21,700 xinference.core.supervisor 24584 INFO     Worker 127.0.0.1:62590 has been added successfully\n    2023-10-17 16:32:21,701 xinference.deploy.worker 24584 INFO     Xinference worker successfully started.\n\nBased on the log above, the endpoint is `http://127.0.0.1:9997`. Users can connect to the xinference server through this endpoint using the Client.\n\nModels are categorized into LLM, embedding, image, etc. We plan to introduce more model types in the future.\n\nLLM\n~~~\n\nTo list the available built-in LLM models:\n\n.. code-block::\n\n    >>> xinference registrations -t LLM\n\n    Type    Name                     Language      Ability                        Is-built-in\n    ------  -----------------------  ------------  -----------------------------  -------------\n    LLM     baichuan                 ['en', 'zh']  ['embed', 'generate']          True\n    LLM     baichuan-2               ['en', 'zh']  ['embed', 'generate']          True\n    LLM     baichuan-2-chat          ['en', 'zh']  ['embed', 'generate', 'chat']  True\n    ...\n\nTo initialize an LLM and chat:\n\nXinference Client\n=================\n\n.. code-block::\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    # The chatglm2 model has the capabilities of \"chat\" and \"embed\".\n    model_uid = client.launch_model(model_name=\"glm4-chat\",\n                                    model_engine=\"llama.cpp\",\n                                    model_format=\"ggufv2\",\n                                    model_size_in_billions=9,\n                                    quantization=\"Q4_K\")\n    model = client.get_model(model_uid)\n\n    messages = [{\"role\": \"user\", \"content\": \"What is the largest animal?\"}]\n    # If the model has \"generate\" capability, then you can call the\n    # model.generate API.\n    model.chat(\n        messages,\n        generate_config={\"max_tokens\": 1024}\n    )\n\nOpenAI Client\n=============\n\nOpenai client request with the same function as before, excluding launch model. \nMore details refer to: https://platform.openai.com/docs/api-reference/chat?lang=python\n\n.. code-block::\n\n    import openai\n\n    # Assume that the model is already launched.\n    # The api_key can't be empty, any string is OK.\n    client = openai.Client(api_key=\"not empty\", base_url=\"http://localhost:9997/v1\")\n    client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"content\": \"What is the largest animal?\",\n                \"role\": \"user\",\n            }\n        ],\n        max_tokens=1024\n    )\n\nOpenAI Client Tool Calls\n========================\n\n.. code-block::\n\n    import openai\n\n    tools = [\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"uber_ride\",\n                \"description\": \"Find suitable ride for customers given the location, \"\n                \"type of ride, and the amount of time the customer is \"\n                \"willing to wait as parameters\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"loc\": {\n                            \"type\": \"int\",\n                            \"description\": \"Location of the starting place of the Uber ride\",\n                        },\n                        \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\"plus\", \"comfort\", \"black\"],\n                            \"description\": \"Types of Uber ride user is ordering\",\n                        },\n                        \"time\": {\n                            \"type\": \"int\",\n                            \"description\": \"The amount of time in minutes the customer is willing to wait\",\n                        },\n                    },\n                },\n            },\n        }\n    ]\n\n    # Assume that the model is already launched.\n    # The api_key can't be empty, any string is OK.\n    client = openai.Client(api_key=\"not empty\", base_url=\"http://localhost:9997/v1\")\n    client.chat.completions.create(\n        model=\"chatglm3\",\n        messages=[{\"role\": \"user\", \"content\": \"Call me an Uber ride type 'Plus' in Berkeley at zipcode 94704 in 10 minutes\"}],\n        tools=tools,\n    )\n\nOutput:\n\n.. code-block::\n\n    ChatCompletion(id='chatcmpl-ad2f383f-31c7-47d9-87b7-3abe928e629c', choices=[Choice(finish_reason='tool_calls', index=0, message=ChatCompletionMessage(content=\"```python\\ntool_call(loc=94704, type='plus', time=10)\\n```\", role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_ad2f383f-31c7-47d9-87b7-3abe928e629c', function=Function(arguments='{\"loc\": 94704, \"type\": \"plus\", \"time\": 10}', name='uber_ride'), type='function')]))], created=1704687803, model='chatglm3', object='chat.completion', system_fingerprint=None, usage=CompletionUsage(completion_tokens=-1, prompt_tokens=-1, total_tokens=-1))\n\n.. _anthropic_client:\n\nAnthropic Client\n========================\n\n    Anthropic API's access address is: /anthropic/v1/messages\n\n.. code-block::\n\n    import anthropic\n\n    client = anthropic.Anthropic(\n        # defaults to os.environ.get(\"ANTHROPIC_API_KEY\")\n        base_url=\"http://localhost:9997/anthropic\",\n    )\n    message = client.messages.create(\n        model=\"qwen3\",\n        max_tokens=1024,\n        messages=[\n            {\"role\": \"user\", \"content\": \"Hello, Claude\"}\n        ]\n    )\n    print(message.content)\n\n\nEmbedding\n~~~~~~~~~\n\nTo list the available built-in embedding models:\n\n.. code-block::\n\n    >>> xinference registrations -t embedding\n\n    Type       Name                     Language      Dimensions  Is-built-in\n    ---------  -----------------------  ----------  ------------  -------------\n    embedding  bge-base-en              ['en']               768  True\n    embedding  bge-base-en-v1.5         ['en']               768  True\n    embedding  bge-base-zh              ['zh']               768  True\n    ...\n\nTo launch an embedding model and embed text:\n\nXinference Client\n=================\n\n.. code-block::\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    # The bge-small-en-v1.5 is an embedding model, so the `model_type` needs to be specified.\n    model_uid = client.launch_model(model_name=\"bge-small-en-v1.5\", model_type=\"embedding\")\n    model = client.get_model(model_uid)\n\n    input_text = \"What is the capital of China?\"\n    model.create_embedding(input_text)\n\nOutput:\n\n.. code-block::\n\n    {'object': 'list',\n     'model': 'da2a511c-6ccc-11ee-ad07-22c9969c1611-1-0',\n     'data': [{'index': 0,\n     'object': 'embedding',\n     'embedding': [-0.014207549393177032,\n        -0.01832585781812668,\n        0.010556723922491074,\n        ...\n        -0.021243810653686523,\n        -0.03009396605193615,\n        0.05420297756791115]}],\n     'usage': {'prompt_tokens': 37, 'total_tokens': 37}}\n\nOpenAI Client\n=============\n\nOpenai client request with the same function as before, excluding launch model. \nMore details refer to: https://platform.openai.com/docs/api-reference/embeddings?lang=python\n\n.. code-block::\n\n    import openai\n\n    # Assume that the model is already launched.\n    # The api_key can't be empty, any string is OK.\n    client = openai.Client(api_key=\"not empty\", base_url=\"http://localhost:9997/v1\")\n    client.embeddings.create(model=model_uid, input=[\"What is the capital of China?\"])\n\nOutput:\n\n.. code-block::\n\n    CreateEmbeddingResponse(data=[Embedding(embedding=[-0.014207549393177032, -0.01832585781812668, 0.010556723922491074, ..., -0.021243810653686523, -0.03009396605193615, 0.05420297756791115], index=0, object='embedding')], model='bge-small-en-v1.5-1-0', object='list', usage=Usage(prompt_tokens=37, total_tokens=37))\n\nImage\n~~~~~\n\nTo list the available built-in image models:\n\n.. code-block::\n\n    >>> xinference registrations -t image\n\n    Type    Name                          Family            Is-built-in\n    ------  ----------------------------  ----------------  -------------\n    image   sd-turbo                      stable_diffusion  True\n    image   sdxl-turbo                    stable_diffusion  True\n    image   stable-diffusion-v1.5         stable_diffusion  True\n    image   stable-diffusion-xl-base-1.0  stable_diffusion  True\n\nTo initiate an image model and generate an image using a text prompt:\n\nXinference Client\n=================\n\n.. code-block::\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    # The stable-diffusion-v1.5 is an image model, so the `model_type` needs to be specified.\n    # Additional kwargs can be passed to AutoPipelineForText2Image.from_pretrained here.\n    model_uid = client.launch_model(model_name=\"stable-diffusion-v1.5\", model_type=\"image\")\n    model = client.get_model(model_uid)\n\n    input_text = \"an apple\"\n    model.text_to_image(input_text)\n\nOutput:\n\n.. code-block::\n\n    {'created': 1697536913,\n     'data': [{'url': '/home/admin/.xinference/image/605d2f545ac74142b8031455af31ee33.jpg',\n     'b64_json': None}]}\n\nOpenAI Client\n=============\n\nOpenai client request with the same function as before, excluding launch model. \nMore details refer to: https://platform.openai.com/docs/api-reference/images/create?lang=python\n\n.. code-block::\n\n    import openai\n\n    # Assume that the model is already launched.\n    # The api_key can't be empty, any string is OK.\n    client = openai.Client(api_key=\"not empty\", base_url=\"http://localhost:9997/v1\")\n    client.images.generate(model=model_uid, prompt=\"an apple\")\n\n\nOutput:\n\n.. code-block::\n\n    ImagesResponse(created=1704445354, data=[Image(b64_json=None, revised_prompt=None, url='/home/admin/.xinference/image/605d2f545ac74142b8031455af31ee33.jpg')])\n\n\nAudio\n~~~~~\n\nTo list the available built-in image models:\n\n.. code-block::\n\n    >>> xinference registrations -t audio\n\n    Type    Name               Family    Multilingual    Is-built-in\n    ------  -----------------  --------  --------------  -------------\n    audio   whisper-base       whisper   True            True\n    audio   whisper-base.en    whisper   False           True\n    audio   whisper-large-v3   whisper   True            True\n    audio   whisper-medium     whisper   True            True\n    audio   whisper-medium.en  whisper   False           True\n    audio   whisper-tiny       whisper   True            True\n    audio   whisper-tiny.en    whisper   False           True\n\n\nTo initiate an audio model and get text from an audio:\n\nXinference Client\n=================\n\n.. code-block::\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    model_uid = client.launch_model(model_name=\"whisper-large-v3\", model_type=\"audio\")\n    model = client.get_model(model_uid)\n\n    input_text = \"an apple\"\n    with open(\"audio.mp3\", \"rb\") as audio_file:\n        model.transcriptions(audio_file.read())\n\nOutput:\n\n.. code-block::\n\n    {\n      \"text\": \"Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger. This is a place where you can get to do that.\"\n    }\n\n\nOpenAI Client\n=============\n\nOpenai client request with the same function as before.\nMore details refer to: https://platform.openai.com/docs/api-reference/audio/createTranscription\n\n.. code-block::\n\n    import openai\n\n    # Assume that the model is already launched.\n    # The api_key can't be empty, any string is OK.\n    client = openai.Client(api_key=\"not empty\", base_url=\"http://localhost:9997/v1\")\n    with open(\"audio.mp3\", \"rb\") as audio_file:\n        completion = client.audio.transcriptions.create(model=model_uid, file=audio_file)\n\nOutput:\n\n.. code-block::\n\n    Translation(text=' This list lists the airlines in Hong Kong.')\n\n\nRerank\n~~~~~~\nTo launch a rerank model and compute the similarity scores:\n\n.. code-block::\n\n    from xinference.client import Client\n\n    client = Client(\"http://localhost:9997\")\n    model_uid = client.launch_model(model_name=\"bge-reranker-base\", model_type=\"rerank\")\n    model = client.get_model(model_uid)\n\n    query = \"A man is eating pasta.\"\n    corpus = [\n        \"A man is eating food.\",\n        \"A man is eating a piece of bread.\",\n        \"The girl is carrying a baby.\",\n        \"A man is riding a horse.\",\n        \"A woman is playing violin.\"\n    ]\n    print(model.rerank(corpus, query))\n\nOutput:\n\n.. code-block::\n\n    {'id': '480dca92-8910-11ee-b76a-c2c8e4cad3f5', 'results': [{'index': 0, 'relevance_score': 0.9999247789382935,\n     'document': 'A man is eating food.'}, {'index': 1, 'relevance_score': 0.2564932405948639,\n     'document': 'A man is eating a piece of bread.'}, {'index': 3, 'relevance_score': 3.955026841140352e-05,\n     'document': 'A man is riding a horse.'}, {'index': 2, 'relevance_score': 3.742107219295576e-05,\n     'document': 'The girl is carrying a baby.'}, {'index': 4, 'relevance_score': 3.739788007806055e-05,\n     'document': 'A woman is playing violin.'}]}\n"
  },
  {
    "path": "doc/source/user_guide/continuous_batching.rst",
    "content": ".. _user_guide_continuous_batching:\n\n===================\nContinuous Batching\n===================\n\nContinuous batching, as a means to improve throughput during model serving, has already been implemented in inference engines like ``VLLM``.\nXinference aims to provide this optimization capability when using the transformers engine as well.\n\nUsage\n=====\n\nLLM\n---\nCurrently, this feature can be enabled under the following conditions:\n\n* First, set the environment variable ``XINFERENCE_TRANSFORMERS_ENABLE_BATCHING`` to ``1`` when starting xinference. For example:\n\n.. code-block::\n\n    XINFERENCE_TRANSFORMERS_ENABLE_BATCHING=1 xinference-local --log-level debug\n\n\n.. note::\n   Since ``v0.16.0``, this feature is turned on by default and\n   is no longer required to set the ``XINFERENCE_TRANSFORMERS_ENABLE_BATCHING`` environment variable.\n   This environment variable has been removed.\n\n\n* Then, ensure that the ``transformers`` engine is selected when launching the model. For example:\n\n.. tabs::\n\n  .. code-tab:: bash shell\n\n    xinference launch -e <endpoint> --model-engine transformers -n qwen1.5-chat -s 4 -f pytorch -q none\n\n  .. code-tab:: bash cURL\n\n    curl -X 'POST' \\\n      'http://127.0.0.1:9997/v1/models' \\\n      -H 'accept: application/json' \\\n      -H 'Content-Type: application/json' \\\n      -d '{\n      \"model_engine\": \"transformers\",\n      \"model_name\": \"qwen1.5-chat\",\n      \"model_format\": \"pytorch\",\n      \"size_in_billions\": 4,\n      \"quantization\": \"none\"\n    }'\n\n  .. code-tab:: python\n\n    from xinference.client import Client\n    client = Client(\"http://127.0.0.1:9997\")\n    model_uid = client.launch_model(\n      model_engine=\"transformers\",\n      model_name=\"qwen1.5-chat\",\n      model_format=\"pytorch\",\n      model_size_in_billions=4,\n      quantization=\"none\"\n    )\n    print('Model uid: ' + model_uid)\n\n\nOnce this feature is enabled, all requests for LLMs will be managed by continuous batching,\nand the average throughput of requests made to a single model will increase.\nThe usage of the LLM interface remains exactly the same as before, with no differences.\n\nImage Model\n-----------\nCurrently, for image models, only the ``text_to_image`` interface is supported for ``FLUX.1`` series models.\n\nEnabling this feature requires setting the environment variable ``XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE``, which indicates the ``size`` of the generated images.\n\nFor example, starting xinference like this:\n\n.. code-block::\n\n    XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE=1024*1024 xinference-local --log-level debug\n\n\nThen just use the ``text_to_image`` interface as before, and nothing else needs to be changed.\n\nAbort your request\n==================\nIn this mode, you can abort requests that are in the process of inference.\n\n#. First, add ``request_id`` option in ``generate_config``. For example:\n\n.. code-block:: bash\n\n    from xinference.client import Client\n    client = Client(\"http://127.0.0.1:9997\")\n    model = client.get_model(\"<model_uid>\")\n    model.chat([{\"role\": \"user\", \"content\": \"<prompt>\"}], generate_config={\"request_id\": \"<your_unique_request_id>\"})\n\n#. Then, abort the request using the ``request_id`` you have set. For example:\n\n.. code-block:: bash\n\n    from xinference.client import Client\n    client = Client(\"http://127.0.0.1:9997\")\n    client.abort_request(\"<model_uid>\", \"<your_unique_request_id>\")\n\nNote that if your request has already finished, aborting the request will be a no-op.\nImage models also support this feature.\n\nNote\n====\n\n* Currently, for ``LLM`` models, this feature only supports the ``generate``, ``chat``, ``tool call`` and ``vision`` tasks.\n\n* Currently, for ``image`` models, this feature only supports the ``text_to_image`` tasks. Only ``FLUX.1`` series models are supported.\n\n* For ``vision`` tasks, currently only ``qwen2-vl-instruct``, ``qwen2.5-vl-instruct``, ``QvQ-72B-Preview``, ``glm-4v`` and ``MiniCPM-V-2.6`` (only for image tasks) models are supported. More models will be supported in the future. Please let us know your requirements.\n\n* If using GPU inference, this method will consume more GPU memory. Please be cautious when increasing the number of concurrent requests to the same model.\n  The ``launch_model`` interface provides the ``max_num_seqs`` parameter to adjust the concurrency level, with a default value of ``16``.\n"
  },
  {
    "path": "doc/source/user_guide/distributed_inference.rst",
    "content": ".. _distributed_inference:\n\n#####################\nDistributed Inference\n#####################\nSome language models including **DeepSeek V3**, **DeepSeek R1**, etc are too large to fit into GPus\non a single machine, Xinference supported running these models across multiple machines.\n\n.. versionadded:: v1.3.0\n\n*****************\nSupported Engines\n*****************\nNow, Xinference supported below engines to run models across workers.\n\n* :ref:`SGLang <sglang_backend>` (supported in v1.3.0)\n* :ref:`vLLM <vllm_backend>` (supported in v1.4.1)\n* :ref:`MLX <mlx_backend>` (supported in v1.7.1), MLX distributed currently does not support all models.\n  The following model types are supported at this time. If you have additional requirements,\n  feel free to submit a GitHub issue at `https://github.com/xorbitsai/inference/issues <https://github.com/xorbitsai/inference/issues>`_ to request support.\n\n  - DeepSeek v3 and R1\n  - Qwen2.5-instruct and the models have the same model architectures.\n  - Qwen3 and the models have the same model architectures.\n  - Qwen3-moe and the models have the same model architectures.\n\n\n*****\nUsage\n*****\nFirst you need at least 2 workers to support distributed inference.\nRefer to :ref:`running Xinference in cluster <distributed_getting_started>`\nto create a Xinference cluster including supervisor and workers.\n\nvLLM (v0.11.0+) note:\nStarting from vLLM v0.11.0, distributed deployment with vLLM requires Xinference >= v1.17.1.\nIn addition to setting ``--n-worker`` as before, you must also set\n``tensor_parallel_size`` (set it to the **GPU count**) and ``pipeline_parallel_size=1`` when launching the model.\n\nThen if are using web UI, choose expected machines for ``worker count`` in the optional configurations,\nif you are using command line, add ``--n-worker <machine number>`` when launching a model.\nThe model will be launched across multiple workers accordingly.\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../_static/distributed_inference.png\" style=\"background-color: transparent\", width=\"77%\">\n\n``GPU count`` on web UI, or ``--n-gpu`` for command line now mean GPUs count per worker if you are using distributed inference.\n"
  },
  {
    "path": "doc/source/user_guide/index.rst",
    "content": ".. _user_guide_index:\n\n==========\nUser Guide\n==========\n\n.. toctree::\n   :maxdepth: 2\n\n   backends\n   client_api\n   auth_system\n   launch\n   metrics\n   distributed_inference\n   continuous_batching\n   vllm_enhancement\n"
  },
  {
    "path": "doc/source/user_guide/launch.rst",
    "content": ".. _launch:\n\n============================\nModel Launching Instructions\n============================\n\nThis document aims to provide a functional overview of model launching.\n\nReplica\n=======\n\nReplicas specify the number of model instances to load. For example, if you have two GPUs and each can host one replica of the model,\nyou can set the replica count to 2. This way, two identical instances of the model will be distributed across the two GPUs.\nXinference automatically load-balances requests to ensure even distribution across multiple GPUs.\nMeanwhile, users see it as a single model, which greatly improves overall resource utilization.\n\nTraditional Multi-Instance Deployment：\n\nWhen you have multiple GPU cards, each capable of hosting one model instance, you can set the number of instances equal to the number of GPUs. For example:\n\n- 2 GPUs, 2 instances: Each GPU runs one model instance\n- 4 GPUs, 4 instances: Each GPU runs one model instance\n\n.. versionadded:: v1.15.0\n\nIntroduce a new environment variable:\n\n.. code-block:: bash\n\n    XINFERENCE_ALLOW_MULTI_REPLICA_PER_GPU\n\nControl whether to enable the single GPU multi-copy feature\nDefault value: 1\n\nNew Feature: Smart Replica Deployment\n\n1. Single GPU Multi-Replica\n\nNew Support: Run multiple model replicas even with just one GPU.\n\n- Scenario: You have 1 GPU with sufficient VRAM\n- Configuration: Replica Count = 3, GPU Count = 1\n- Result: 3 model instances running on the same GPU, sharing GPU resources\n\n2. Hybrid GPU Allocation\n\nSmart Allocation: Number of replicas may differ from GPU count; system intelligently distributes\n\n- Scenario: You have 2 GPUs and need 3 replicas\n- Configuration: Replicas=3, GPUs=2\n- Result: GPU0 runs 2 instances, GPU1 runs 1 instance\n\nGPU Allocation Strategy\n=======================\n\nThe current policy is *Idle First*: The scheduler always attempts to assign replicas to the least utilized GPU. Use the ``XINFERENCE_LAUNCH_STRATEGY`` parameter to choose launch strategy.\n\nSet Environment Variables\n=========================\n\n.. versionadded:: v1.8.1\n\nSometimes, we want to specify environment variables for a particular model at runtime.\nSince v1.8.1, Xinference provides the capability to configure these individually without needing to set them before starting Xinference.\n\nFor Web UI.\n\n.. raw:: html\n\n    <img class=\"align-center\" alt=\"actor\" src=\"../_static/launch_env.png\" style=\"background-color: transparent\", width=\"95%\">\n\nWhen using the command line, use ``--env`` to specify an environment variable.\n\nExample usage:\n\n.. code-block:: bash\n\n  xinference launch xxx --env A 0 --env B 1\n\nTake vLLM as an example: it has versions V1 and V0, and by default, it automatically determines which version to use.\nIf you want to force the use of V0 by setting ``VLLM_USE_V1=0`` when launching a model, you can specify this during model launching.\n\nConfiguring Model Virtual Environment\n=====================================\n\n.. versionadded:: v1.8.1\n\nFor this part, please refer to :ref:`toggling virtual environments and customizing dependencies <model_launching_virtualenv>`.\n\nBatching / Continuous Batching\n==============================\n\nXinference supports batching for higher throughput. For LLMs on the ``transformers`` engine,\ncontinuous batching is available and can be enabled via environment variables at launch time.\n\nKey settings:\n\n- ``XINFERENCE_BATCH_SIZE`` and ``XINFERENCE_BATCH_INTERVAL`` for general batching behavior.\n- ``XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE`` for text-to-image models (when supported).\n\nExample (LLM, transformers):\n\n.. code-block:: bash\n\n  XINFERENCE_BATCH_SIZE=32 XINFERENCE_BATCH_INTERVAL=0.003 xinference-local --log-level debug\n  xinference launch -e <endpoint> --model-engine transformers -n qwen1.5-chat -s 4 -f pytorch -q none\n\nExample (text-to-image):\n\n.. code-block:: bash\n\n  XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE=1024*1024 xinference-local --log-level debug\n\nFor detailed behavior, supported models, and aborting requests, see\n:ref:`Continuous Batching <user_guide_continuous_batching>`.\n\nThinking Mode\n=============\n\nSome hybrid reasoning models (for example, Qwen3) support an optional *thinking mode*.\nYou can enable this at launch time via ``--enable-thinking``.\n\nExample usage:\n\n.. code-block:: bash\n\n  xinference launch -n qwen3-xxx --model-engine vllm --enable-thinking\n"
  },
  {
    "path": "doc/source/user_guide/metrics.rst",
    "content": ".. _metrics:\n\n==================\nMetrics\n==================\n\nThere are two types of metrics exporters in an Xinference cluster:\n\n- Supervisor metrics exporter at `<endpoint>/metrics`, e.g. `http://127.0.0.1:9997/metrics`.\n- Worker metrics exporter at each worker node, the exporter host and port can be set by `--metrics-exporter-host` and `--metrics-exporter-port` options in `xinference-local` or `xinference-worker` command.\n\nSupervisor Metrics\n^^^^^^^^^^^^^^^^^^\n\n\n\n- **exceptions_total_counter** (counter): Total number of requested which generated an exception\n\n- **requests_total_counter** (counter): Total number of requests received\n\n- **responses_total_counter** (counter): Total number of responses sent\n\n- **status_codes_counter** (counter): Total number of response status codes\n\n\n\nWorker Metrics\n^^^^^^^^^^^^^^\n\n\n\n- **xinference:generate_tokens_per_s** (gauge): Generate throughput in tokens/s.\n\n- **xinference:input_tokens_total_counter** (counter): Total number of input tokens.\n\n- **xinference:output_tokens_total_counter** (counter): Total number of output tokens.\n\n- **xinference:time_to_first_token_ms** (gauge): First token latency in ms.\n"
  },
  {
    "path": "doc/source/user_guide/vllm_enhancement.rst",
    "content": ".. _user_guide_vllm_enhancement:\n\n############################################\nXavier: Share KV Cache between vllm replicas\n############################################\nFor scenarios such as long document queries and multi-round conversations,\nthe computation during the inference prefill phase can be particularly heavy,\nwhich affects overall throughput and the latency of individual inferences.\nXinference enhances the vllm engine by introducing the ``Xavier`` framework,\nenabling KV cache sharing across multiple vllm instances.\nThis allows KV cache computed by other replicas to be directly reused, avoiding redundant computations.\n\n*****\nUsage\n*****\nSimply add the parameter ``enable_xavier=True`` when starting the vllm model.\n\n***********\nLimitations\n***********\n* Xavier requires vllm version >= ``0.7.0``, and currently not supports for vllm version >= ``0.11.0`` due to vllm reconstruction.\n* Due to the underlying communication not recognizing ``0.0.0.0``, the actual IP address needs to be passed when starting Xinference, for example: ``xinference-local -H 192.168.xx.xx``.\n* Xavier only works for Nvidia product. "
  },
  {
    "path": "doc/templates/audio.rst.jinja",
    "content": ".. _models_builtin_{{ model_name|lower }}:\n\n{{ \"=\" * model_name|length }}\n{{ model_name }}\n{{ \"=\" * model_name|length }}\n\n- **Model Name:** {{ model_name }}\n- **Model Family:** {{ model_family }}\n- **Abilities:** {{ model_ability }}\n- **Multilingual:** {{ multilingual }}\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** {{ model_id }}\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name {{ model_name }} --model-type audio"
  },
  {
    "path": "doc/templates/audio_index.rst.jinja",
    "content": ".. _models_audio_index:\n\n================\nAudio Models\n================\n\nThe following is a list of built-in audio models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  {% for model in models %}\n   {{ model.model_name|lower }}\n  {% endfor %}"
  },
  {
    "path": "doc/templates/embedding.rst.jinja",
    "content": ".. _models_builtin_{{ model_name|lower }}:\n\n{{ \"=\" * model_name|length }}\n{{ model_name }}\n{{ \"=\" * model_name|length }}\n\n- **Model Name:** {{ model_name }}\n- **Languages:** {{ ', '.join(language) }}\n- **Abilities:** embed\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Dimensions:** {{ dimensions }}\n- **Max Tokens:** {{ max_tokens }}\n- **Model ID:** {{ model_id }}\n- **Model Hubs**: {% for hub in model_hubs -%}`{{ hub.name }} <{{ hub.url }}>`__{% if not loop.last %}, {% endif %} {%- endfor %}\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name {{ model_name }} --model-type embedding"
  },
  {
    "path": "doc/templates/embedding_index.rst.jinja",
    "content": ".. _models_embedding_index:\n\n================\nEmbedding Models\n================\n\nThe following is a list of built-in embedding models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  {% for model in models %}\n   {{ model.model_name|lower }}\n  {% endfor %}"
  },
  {
    "path": "doc/templates/image.rst.jinja",
    "content": ".. _models_builtin_{{ model_name|lower }}:\n\n{{ \"=\" * model_name|length }}\n{{ model_name }}\n{{ \"=\" * model_name|length }}\n\n- **Model Name:** {{ model_name }}\n- **Model Family:** {{ model_family }}\n- **Abilities:** {{ model_ability }}\n- **Available ControlNet:** {{ available_controlnet }}\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** {{ model_id }}\n{%- if gguf_quantizations %}\n- **GGUF Model ID**: {{ gguf_model_id }}\n- **GGUF Quantizations**: {{ gguf_quantizations }}\n{% endif %}\n{%- if lightning_model_id %}\n- **Lightning Model ID**: {{ lightning_model_id }}\n- **Lightning Versions**: {{ lightning_versions }}\n{% endif %}\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name {{ model_name }} --model-type image\n\n{% if gguf_quantizations %}\nFor GGUF quantization, using below command::\n\n    xinference launch --model-name {{ model_name }} --model-type image --gguf_quantization ${{ '{' }}gguf_quantization{{ '}' }} --cpu_offload True\n{% endif %}\n\n{% if lightning_versions %}\nFor Lightning LoRA acceleration, using below command::\n\n    xinference launch --model-name {{ model_name }} --model-type image --lightning_version ${{ '{' }}lightning_version{{ '}' }}\n{% endif %}"
  },
  {
    "path": "doc/templates/image_index.rst.jinja",
    "content": ".. _models_image_index:\n\n================\nImage Models\n================\n\nThe following is a list of built-in image models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  {% for model in models %}\n   {{ model.model_name|lower }}\n  {% endfor %}"
  },
  {
    "path": "doc/templates/llm.rst.jinja",
    "content": ".. _models_llm_{{ model_name|lower }}:\n\n{{ \"=\" * 40 }}\n{{ model_name }}\n{{ \"=\" * 40 }}\n\n- **Context Length:** {{ context_length }}\n- **Model Name:** {{ model_name }}\n- **Languages:** {{ model_lang | join(', ') }}\n- **Abilities:** {{ model_ability | join(', ') }}\n- **Description:** {{ model_description }}\n\nSpecifications\n^^^^^^^^^^^^^^\n\n{% for spec in model_specs %}\nModel Spec {{ loop.index }} ({{ spec.model_format }}, {{ spec.model_size_in_billions }} Billion)\n{{ \"+\" * 40 }}\n\n- **Model Format:** {{ spec.model_format }}\n- **Model Size (in billions):** {{ spec.model_size_in_billions }}\n- **Quantizations:** {{ spec.quantizations | join(', ') }}\n{%  if spec.model_format == 'pytorch' and ('vLLM' in spec.engines or 'SGLang' in spec.engines) and '4-bit' in spec.quantizations -%}\n- **Engines**: {{ spec.engines | join(', ') }} (vLLM {% if 'SGLang' in spec.engines %}and SGLang {% endif %}only available for quantization none)\n{%- else -%}\n- **Engines**: {{ spec.engines | join(', ') }}\n{%- endif %}\n- **Model ID:** {{ spec.model_id }}\n- **Model Hubs**:  {% for hub in spec.model_hubs -%}`{{ hub.name }} <{{ hub.url }}>`__{% if not loop.last %}, {% endif %} {%- endfor %}\n\nExecute the following command to launch the model, remember to replace ``${{ '{' }}quantization{{ '}' }}`` with your\nchosen quantization method from the options listed above::\n\n   xinference launch --model-engine ${{ '{' }}engine{{ '}' }} --model-name {{ model_name }} --size-in-billions {{ spec.model_size_in_billions }} --model-format {{ spec.model_format }} --quantization ${{ '{' }}quantization{{ '}' }}\n\n{% endfor %}"
  },
  {
    "path": "doc/templates/llm_index.rst.jinja",
    "content": ".. _models_llm_index:\n\n=====================\nLarge language Models\n=====================\n\nThe following is a list of built-in LLM in Xinference:\n\n.. list-table::\n   :widths: 25 25 25 50\n   :header-rows: 1\n\n   * - MODEL NAME\n     - ABILITIES\n     - COTNEXT_LENGTH\n     - DESCRIPTION\n\n{% for model in models %}\n   * - :ref:`{{ model.model_name|lower }} <models_llm_{{ model.model_name|lower }}>`\n     - {{ model.model_ability | join(', ') }}\n     - {{ model.context_length }}\n     - {{ model.model_description }}\n{% endfor %}\n\n.. toctree::\n   :maxdepth: 3\n\n  {% for model in models %}\n   {{ model.model_name|lower }}\n  {% endfor %}\n\n\n"
  },
  {
    "path": "doc/templates/metrics.jinja",
    "content": ".. _metrics:\n\n==================\nMetrics\n==================\n\nThere are two types of metrics exporters in an Xinference cluster:\n\n- Supervisor metrics exporter at `<endpoint>/metrics`, e.g. `http://127.0.0.1:9997/metrics`.\n- Worker metrics exporter at each worker node, the exporter host and port can be set by `--metrics-exporter-host` and `--metrics-exporter-port` options in `xinference-local` or `xinference-worker` command.\n\nSupervisor Metrics\n^^^^^^^^^^^^^^^^^^\n\n\n{% for m in supervisor_metrics %}\n- **{{ m.name }}** ({{ m.type }}): {{ m.help }}\n{% endfor %}\n\n\nWorker Metrics\n^^^^^^^^^^^^^^\n\n\n{% for m in worker_metrics %}\n- **{{ m.name }}** ({{ m.type }}): {{ m.help }}\n{% endfor %}\n"
  },
  {
    "path": "doc/templates/rerank.rst.jinja",
    "content": ".. _models_builtin_{{ model_name|lower }}:\n\n{{ \"=\" * model_name|length }}\n{{ model_name }}\n{{ \"=\" * model_name|length }}\n\n- **Model Name:** {{ model_name }}\n- **Languages:** {{ ', '.join(language) }}\n- **Abilities:** rerank\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** {{ model_id }}\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name {{ model_name }} --model-type rerank"
  },
  {
    "path": "doc/templates/rerank_index.rst.jinja",
    "content": ".. _models_rerank_index:\n\n================\nRerank Models\n================\n\nThe following is a list of built-in rerank models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  {% for model in models %}\n   {{ model.model_name|lower }}\n  {% endfor %}"
  },
  {
    "path": "doc/templates/video.rst.jinja",
    "content": ".. _models_builtin_{{ model_name|lower }}:\n\n{{ \"=\" * model_name|length }}\n{{ model_name }}\n{{ \"=\" * model_name|length }}\n\n- **Model Name:** {{ model_name }}\n- **Model Family:** {{ model_family }}\n- **Abilities:** {{ model_ability }}\n\nSpecifications\n^^^^^^^^^^^^^^\n\n- **Model ID:** {{ model_id }}\n\nExecute the following command to launch the model::\n\n   xinference launch --model-name {{ model_name }} --model-type video"
  },
  {
    "path": "doc/templates/video_index.rst.jinja",
    "content": ".. _models_video_index:\n\n================\nVideo Models\n================\n\nThe following is a list of built-in video models in Xinference:\n\n\n.. toctree::\n   :maxdepth: 1\n\n  {% for model in models %}\n   {{ model.model_name|lower }}\n  {% endfor %}"
  },
  {
    "path": "examples/AI_podcast.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport argparse\nimport logging\nimport os\nimport queue\nimport re\nimport subprocess\nimport sys\nimport tempfile\nimport time\nimport warnings\nfrom typing import List\n\nwarnings.filterwarnings(\"ignore\")\n\n\ntry:\n    import ffmpeg\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import ffmpeg, please install ffmpeg with `brew install ffmpeg & pip install\"\n        \" ffmpeg`\"\n    )\n\ntry:\n    import sounddevice as sd\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import sounddevice, please install sounddevice with `pip install sounddevice`\"\n    )\n\ntry:\n    import soundfile as sf\nexcept Exception:\n    raise ImportError(\n        \"Failed to import soundfile, please install soundfile with `pip install soundfile`\"\n    )\n\ntry:\n    import emoji\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import emoji, please check the \"\n        \"correct package at https://pypi.org/project/emoji/\"\n    )\n\ntry:\n    import numpy\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import numpy, please check the \"\n        \"correct package at https://pypi.org/project/numpy/1.24.1/\"\n    )\n\ntry:\n    import whisper\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import whisper, please check the \"\n        \"correct package at https://pypi.org/project/openai-whisper/\"\n    )\n\ntry:\n    from xinference.client import Client\n    from xinference.types import ChatCompletionMessage\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import xinference, please check the \"\n        \"correct package at https://pypi.org/project/xinference/\"\n    )\n\n# ------------------------------------- global variable initialization ---------------------------------------------- #\nlogger = logging.getLogger(__name__)\n# global variable to store the audio device choices.\naudio_devices = \"-1\"\n\n# ----------------------------------------- decorator libraries ----------------------------------------------------- #\nemoji_man = \"\\U0001F9D4\"\nemoji_women = emoji.emojize(\":woman:\")\nemoji_system = emoji.emojize(\":robot:\")\nemoji_user = emoji.emojize(\":supervillain:\")\nemoji_speaking = emoji.emojize(\":speaking_head:\")\nemoji_sparkiles = emoji.emojize(\":sparkles:\")\nemoji_jack_o_lantern = emoji.emojize(\":jack-o-lantern:\")\nemoji_microphone = emoji.emojize(\":studio_microphone:\")\nemoji_rocket = emoji.emojize(\":rocket:\")\n\n\n# --------------------------------- supplemented util to get the record --------------------------------------------- #\ndef get_audio_devices() -> str:\n    global audio_devices\n\n    if audio_devices != \"-1\":\n        return str(audio_devices)\n\n    devices = sd.query_devices()\n    print(\"\\n\")\n    print(emoji_microphone, end=\"\")\n    print(\"  Audio devices:\")\n    print(devices)\n    print(emoji_microphone, end=\"\")\n    audio_devices = input(\"  Please select the audio device you want to record: \")\n    return audio_devices\n\n\nq: queue.Queue = queue.Queue()\n\n\ndef callback(indata, frames, time, status):\n    if status:\n        print(status, file=sys.stderr)\n    q.put(indata.copy())\n\n\n# function to take audio input and transcript it into text-file.\ndef record_unlimited() -> numpy.ndarray:\n    user_device = int(get_audio_devices())\n    print(\"\")\n    terminal_size = os.get_terminal_size()\n    print(\"-\" * terminal_size.columns)\n    print(emoji_speaking, end=\"\")\n    input(\"  Press Enter to start talking and press Ctrl+C to stop the recording:\")\n    filename = tempfile.mktemp(prefix=\"delme_rec_unlimited_\", suffix=\".wav\", dir=\"\")\n    try:\n        # Make sure the file is opened before recording anything:\n        with sf.SoundFile(filename, mode=\"x\", samplerate=48000, channels=1) as file:\n            with sd.InputStream(\n                samplerate=48000, device=user_device, channels=1, callback=callback\n            ):\n                while True:\n                    file.write(q.get())\n    except KeyboardInterrupt:\n        pass\n    except Exception as e:\n        print(type(e).__name__ + \": \" + str(e))\n\n    try:\n        y, _ = (\n            ffmpeg.input(os.path.abspath(filename), threads=0)\n            .output(\"-\", format=\"s16le\", acodec=\"pcm_s16le\", ac=1, ar=16000)\n            .run(cmd=[\"ffmpeg\", \"-nostdin\"], capture_stdout=True, capture_stderr=True)\n        )\n    except ffmpeg.Error as e:\n        raise RuntimeError(f\"Failed to load audio: {e.stderr.decode()}\") from e\n    os.remove(filename)\n    return numpy.frombuffer(y, numpy.int16).flatten().astype(numpy.float32) / 32768.0\n\n\ndef format_prompt(model, audio_input) -> str:\n    # the second parameters of transcribe enable us to define the language we are speaking.\n    return model.transcribe(audio_input)[\"text\"]\n\n\n# transcript the generated chatbot word to audio output so the user will hear the result.\ndef text_to_audio(response, voice_id):\n    # for audio output, we apply the mac initiated \"say\" command to provide. For Windows users, if\n    # you want audio output, you can try on pyttsx3 or gtts package to see their functionality!\n\n    text = response\n    if voice_id == \"Bob\":\n        voice = \"Daniel\"\n    elif voice_id == \"Alice\":\n        voice = \"Karen\"\n    # anything not belongs to alice or bob are said by system voice.\n    else:\n        voice = \"Moira\"\n    # Execute the \"say\" command and wait the command to be completed.\n    process = subprocess.Popen([\"say\", \"-v\", voice, text])\n    process.wait()\n\n\ndef chat_with_bot(\n    format_input, chat_history, alice_or_bob_state, system_prompt, model_ref\n):\n    completion = model_ref.chat(\n        prompt=format_input,\n        system_prompt=system_prompt,\n        chat_history=chat_history,\n        generate_config={\"max_tokens\": 1024},\n    )\n\n    if alice_or_bob_state == \"Alice\":\n        print(emoji_women, end=\"\")\n        print(\" Alice:\", end=\"\")\n    else:\n        print(emoji_man, end=\"\")\n        print(\" Bob:\", end=\"\")\n\n    chat_history: List[\"ChatCompletionMessage\"] = []\n\n    content = completion[\"choices\"][0][\"message\"][\"content\"]\n    print(content)\n\n    chat_history.append(ChatCompletionMessage(role=\"assistant\", content=content))\n\n    return content\n\n\n# ---------------------------------------- The program will run from below: ------------------------------------------#\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n\n    parser.add_argument(\n        \"-e\", \"--endpoint\", type=str, help=\"Xinference endpoint, required\", required=True\n    )\n    args = parser.parse_args()\n\n    endpoint = args.endpoint\n\n    client = Client(endpoint)\n\n    model_a = \"vicuna-v1.3\"\n    print(\n        f\"{emoji_rocket} Launching model {model_a}. The initial download of the model may require a certain\"\n        f\" amount of time.\"\n    )\n    model_a_uid = client.launch_model(\n        model_name=model_a,\n        model_format=\"ggmlv3\",\n        model_size_in_billions=7,\n        quantization=\"q4_0\",\n        n_ctx=2048,\n    )\n    model_a_ref = client.get_model(model_a_uid)\n\n    model_b = \"wizardlm-v1.0\"\n    print(\n        f\"{emoji_rocket} Launching model {model_b}. The initial download of the model may require a certain\"\n        f\" amount of time.\"\n    )\n    model_b_uid = client.launch_model(\n        model_name=model_b,\n        model_format=\"ggmlv3\",\n        model_size_in_billions=7,\n        quantization=\"q4_0\",\n        n_ctx=2048,\n    )\n    model_b_ref = client.get_model(model_b_uid)\n\n    # ---------- program finally start! ------------ #\n    chat_history = []\n    alice_or_bob_state = \"0\"\n    print(\"\")\n    print(emoji_jack_o_lantern, end=\"\")\n    print(\" Welcome to the Xorbits inference chatroom \", end=\"\")\n    print(emoji_jack_o_lantern)\n    print(emoji_sparkiles, end=\"\")\n    print(\n        \" Say something with 'exit', 'quit', 'bye', or 'see you' to leave the chatroom \",\n        end=\"\",\n    )\n    print(emoji_sparkiles)\n\n    # receive the username.\n    print(\"\")\n    print(emoji_system, end=\"\")\n    welcome_prompt = \": Please tell us who is attending the conversation today: \"\n    text_to_audio(welcome_prompt, \"0\")\n    username = input(welcome_prompt)\n\n    # define names for the chatbots and create welcome message for chat-room.\n    system_prompt_alice = (\n        \"This is a conversation between a Human user and two AI assistants. \"\n        \"The first AI assistant is called Alice, and the second AI assistant is called Bob.\"\n        f\"The Human User is called {username}\"\n    )\n    system_prompt_bob = system_prompt_alice\n\n    # we can change the scale of the model here, the bigger the model, the higher the accuracy.\n    model = whisper.load_model(\"medium\")\n\n    welcome_prompt2 = (\n        f\": Nice to meet you, {username}. Hope you will enjoy the conversation with our AI agents\"\n        f\" at Xorbits inference chatroom. Later, our system will guide you on when to speak \"\n        f\"with your microphone, please follow the steps correctly. \"\n        f\"We hope you have a pleasant journey with our AI agents. \"\n    )\n\n    print(\"\")\n    print(emoji_system, end=\"\")\n    print(welcome_prompt2)\n    text_to_audio(welcome_prompt2, \"0\")\n\n    while True:\n        audio_input = record_unlimited()\n\n        start = time.time()\n        format_input = format_prompt(model, audio_input)\n        logger.info(f\"Time spent on transcribing: {time.time() - start}\")\n\n        # set up the separation between each chat block.\n        print(\"\")\n        print(emoji_user, end=\"\")\n        print(f\" {username}:\", end=\"\")\n        print(format_input)\n\n        # for un-natural exit audio inputs.\n        if \"exit\" in format_input.lower() or \"quit\" in format_input.lower():\n            break\n\n        # for natural exit, both bot is expected to send greeting message.\n        if \"bye\" in format_input.lower() or \"see you\" in format_input.lower():\n            alice_or_bob_state = \"Alice\"\n            content_alice = f\": Nice Chat with you, {username}. Have a Nice Day!\"\n            print(emoji_women, end=\"\")\n            print(content_alice)\n            text_to_audio(content_alice, alice_or_bob_state)\n            alice_or_bob_state = \"Bob\"\n            content_bob = (\n                f\": It's my honor to chat with you, {username}. Enjoy your time!\"\n            )\n            print(emoji_man, end=\"\")\n            print(content_bob)\n            text_to_audio(content_bob, alice_or_bob_state)\n            break\n\n        chat_history.append(ChatCompletionMessage(role=\"user\", content=format_input))\n\n        system_prompt = system_prompt_alice\n        # we choose to set Alice to default.\n        model_ref = model_a_ref\n\n        # check whether alice and bob are both in the prompt and their position.\n        def check_word_order(string, first_word, second_word) -> int:\n            # split the string into words, and exclude punctuation.\n            words = re.findall(r\"\\b\\w+\\b\", string)\n\n            if first_word in words and second_word in words:\n                first_position = words.index(first_word)\n                second_position = words.index(second_word)\n\n                if first_position < second_position:\n                    return 1\n                if first_position > second_position:\n                    return 2\n\n            # neither of the words is present in the string\n            return -1\n\n        # if the user says alice first, we assume that the user want alice.\n        if check_word_order(format_input.lower(), \"alice\", \"bob\") == 1:\n            alice_or_bob_state = \"Alice\"\n            system_prompt = system_prompt_alice\n            model_ref = model_a_ref\n        # if bob is first, then we assume the user want bob.\n        elif check_word_order(format_input.lower(), \"alice\", \"bob\") == 2:\n            alice_or_bob_state = \"Bob\"\n            system_prompt = system_prompt_bob\n            model_ref = model_b_ref\n        # if not both of them presents, user says he wants to talk with Alice, we assign Alice,\n        # otherwise we assign Bob.\n        else:\n            if \"alice\" in format_input.lower():\n                alice_or_bob_state = \"Alice\"\n                system_prompt = system_prompt_alice\n                model_ref = model_a_ref\n            elif \"bob\" in format_input.lower():\n                alice_or_bob_state = \"Bob\"\n                system_prompt = system_prompt_bob\n                model_ref = model_b_ref\n            # if both of them are not presents, if we don't have any assignment to agents,\n            # we shall tell the user to do so.\n            else:\n                if alice_or_bob_state == \"0\":\n                    tips = \"Please feel free to call our agents' names and they are ready to chat with you!\"\n                    print(emoji_system, end=\"\")\n                    print(tips)\n                    text_to_audio(tips, \"0\")\n                    continue\n        content = chat_with_bot(\n            format_input, chat_history, alice_or_bob_state, system_prompt, model_ref\n        )\n\n        text_to_audio(content, alice_or_bob_state)\n\n    del chat_history\n    bye_msg1 = (\n        \": Thank you for chatting with our extraordinary AI agents from Xprobe.inc. \"\n    )\n    bye_msg2 = (\n        \": We will keep helping more people in need and make the world a better place!\"\n    )\n    print(\"\\n\")\n    print(emoji_system, end=\"\")\n    print(bye_msg1)\n    print(emoji_system, end=\"\")\n    print(bye_msg2)\n    text_to_audio(bye_msg1, \"0\")\n    text_to_audio(bye_msg2, \"0\")\n"
  },
  {
    "path": "examples/AI_podcast_ZH.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport argparse\nimport logging\nimport os\nimport queue\nimport re\nimport sys\nimport tempfile\nimport time\nimport warnings\nfrom typing import Iterator\n\nfrom xinference.model.llm.pytorch.core import PytorchGenerateConfig\n\nwarnings.filterwarnings(\"ignore\")\n\ntry:\n    import opencc\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import opencc, please install opencc with `pip install opencc-python-reimplemented\"\n    )\n\ntry:\n    import ffmpeg\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import ffmpeg, please install ffmpeg with `brew install ffmpeg & pip install\"\n        \" ffmpeg`\"\n    )\n\ntry:\n    import sounddevice as sd\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import sounddevice, please install sounddevice with `pip install sounddevice`\"\n    )\n\ntry:\n    import soundfile as sf\nexcept Exception:\n    raise ImportError(\n        \"Failed to import soundfile, please install soundfile with `pip install soundfile`\"\n    )\n\ntry:\n    import emoji\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import emoji, please check the \"\n        \"correct package at https://pypi.org/project/emoji/\"\n    )\n\ntry:\n    import numpy\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import numpy, please check the \"\n        \"correct package at https://pypi.org/project/numpy/1.24.1/\"\n    )\n\ntry:\n    import whisper\nexcept ImportError:\n    raise ImportError(\n        \"Failed to import whisper, please check the \"\n        \"correct package at https://pypi.org/project/openai-whisper/\"\n    )\n\ntry:\n    from xinference.client import RESTfulClient\n    from xinference.types import ChatCompletion, ChatCompletionMessage, Completion\nexcept ImportError:\n    raise ImportError(\n        \"Falied to import xinference, please check the \"\n        \"correct package at https://pypi.org/project/xinference/\"\n    )\n\n# ------------------------------------- global variable initialization ---------------------------------------------- #\nwarnings.filterwarnings(\"ignore\")\nlogger = logging.getLogger(__name__)\n# global variable to store the audio device choices.\naudio_devices = \"-1\"\n\n# ----------------------------------------- decorator libraries ----------------------------------------------------- #\nemoji_man = \"\\U0001F467\"\nemoji_women = emoji.emojize(\":woman:\")\nemoji_system = emoji.emojize(\":robot:\")\nemoji_user = emoji.emojize(\":supervillain:\")\nemoji_speaking = emoji.emojize(\":speaking_head:\")\nemoji_sparkiles = emoji.emojize(\":sparkles:\")\nemoji_jack_o_lantern = emoji.emojize(\":jack-o-lantern:\")\nemoji_microphone = emoji.emojize(\":studio_microphone:\")\nemoji_rocket = emoji.emojize(\":rocket:\")\n\n\n# --------------------------------- supplemented util to get the record --------------------------------------------- #\ndef get_audio_devices() -> str:\n    import sounddevice as sd\n\n    global audio_devices\n\n    if audio_devices != \"-1\":\n        return str(audio_devices)\n\n    devices = sd.query_devices()\n    print(\"\\n\")\n    print(emoji_microphone, end=\"\")\n    print(\"  音频设备:\")\n    print(devices)\n    print(emoji_microphone, end=\"\")\n    audio_devices = input(\"  请选择你想用作音频输入的设备: \")\n    return audio_devices\n\n\nq: queue.Queue = queue.Queue()\n\n\ndef callback(indata, frames, time, status):\n    \"\"\"This is called (from a separate thread) for each audio block.\"\"\"\n    if status:\n        print(status, file=sys.stderr)\n    q.put(indata.copy())\n\n\n# function to take audio input and transcript it into text-file.\ndef record_unlimited() -> numpy.ndarray:\n    user_device = int(get_audio_devices())\n    print(\"\")\n    terminal_size = os.get_terminal_size()\n    print(\"-\" * terminal_size.columns)\n    print(emoji_speaking, end=\"\")\n    input(\"  输入 Enter 键位开始录音，随后输入 Ctrl + C 停止录音:\")\n    filename = tempfile.mktemp(prefix=\"delme_rec_unlimited_\", suffix=\".wav\", dir=\"\")\n    try:\n        # Make sure the file is opened before recording anything:\n        with sf.SoundFile(filename, mode=\"x\", samplerate=48000, channels=1) as file:\n            with sd.InputStream(\n                samplerate=48000, device=user_device, channels=1, callback=callback\n            ):\n                while True:\n                    file.write(q.get())\n    except KeyboardInterrupt:\n        pass\n    except Exception as e:\n        print(type(e).__name__ + \": \" + str(e))\n\n    try:\n        y, _ = (\n            ffmpeg.input(os.path.abspath(filename), threads=0)\n            .output(\"-\", format=\"s16le\", acodec=\"pcm_s16le\", ac=1, ar=16000)\n            .run(cmd=[\"ffmpeg\", \"-nostdin\"], capture_stdout=True, capture_stderr=True)\n        )\n    except ffmpeg.Error as e:\n        raise RuntimeError(f\"Failed to load audio: {e.stderr.decode()}\") from e\n    os.remove(filename)\n    return numpy.frombuffer(y, numpy.int16).flatten().astype(numpy.float32) / 32768.0\n\n\n# ======================== for all the content below, alice refers to 小红，bob refers to 小花 ======================== #\n\n\n# Launch model while sent the greeting message to the user.\ndef lanuch_model(alice_or_bob, model_a, username, model_uid, system_prompt):\n    if alice_or_bob == \"小红\":\n        emoji_assistant = emoji_women\n    else:\n        emoji_assistant = emoji_man\n\n    print(\"\")\n    print(emoji_assistant, end=\"\")\n    print(\":\", end=\"\")\n    print(f\" 请耐心等待我们的人工智能助手{alice_or_bob}上线...\")\n\n    terminal_size = os.get_terminal_size()\n    print(\"-\" * terminal_size.columns)\n    print(f\"{emoji_rocket} 启动模型 {model_a}。初次下载需要的时间可能会比较长。\")\n    print(\"-\" * terminal_size.columns)\n\n    model = client.get_model(model_uid)\n\n    if alice_or_bob == \"小红\":\n        prompt = f\"你好，{alice_or_bob}！\"\n    else:\n        prompt = f\"{alice_or_bob}，你好！\"\n\n    model_greeting = chat_with_bot(\n        format_input=prompt,\n        system_prompt=system_prompt,\n        usname=username,\n        model_ref=model,\n        chat_history=[],\n        alice_or_bob_state=alice_or_bob,\n    )\n\n    text_to_audio(model_greeting, alice_or_bob)\n\n    return model, model_uid\n\n\ndef format_prompt(model, audio_input) -> str:\n    # the second parameters of transcribe enable us to define the language we are speaking.\n    return model.transcribe(audio_input, language=\"zh\")[\"text\"]\n\n\n# transcript the generated chatbot word to audio output so the user will hear the result.\ndef text_to_audio(response, voice_id):\n    # for audio output, we apply the mac initiated \"say\" command to provide. For Windows users, if you want\n    # audio output, you can try on pyttsx3 or gtts package to see their functionality!\n    import subprocess\n\n    # Text to convert to speech\n    text = response\n    if voice_id == \"小红\":\n        voice = \"Mei-Jia\"\n    elif voice_id == \"小花\":\n        voice = \"Sin-ji\"\n    # anything not belongs to alice or bob are said by system voice.\n    else:\n        voice = \"Ting-ting\"\n    # Execute the \"say\" command and wait the command to be completed.\n    process = subprocess.Popen([\"say\", \"-v\", voice, text])\n    process.wait()\n\n\n# Construct Baichuan Compatible Chat prompt.\ndef construct_Baichuan_prompt(\n    prompt: str,\n    system_prompt: str,\n    username: str,\n    assistant_name: str,\n    chat_history,\n):\n    sep = \"\"\n    sep2 = \"</s>\"\n    ret = system_prompt\n    for i, message in enumerate(chat_history):\n        role = message[\"role\"]\n        content = message[\"content\"]\n        if i % 2 == 0:\n            ret += f\" {role} {content}{sep}\"\n        else:\n            ret += f\" {role} {content}{sep2}\"\n    ret += f\" {username} {prompt}{sep}\"\n    ret += f\" {assistant_name} \"\n    return ret\n\n\n# Base class for the generate config.\ndef _base_sanitize_generate_config() -> PytorchGenerateConfig:\n    pytorch_generate_config = PytorchGenerateConfig()\n    pytorch_generate_config.setdefault(\"temperature\", 0.7)\n    pytorch_generate_config.setdefault(\"repetition_penalty\", 1.0)\n    pytorch_generate_config.setdefault(\"max_tokens\", 512)\n    pytorch_generate_config.setdefault(\"stream_interval\", 2)\n    pytorch_generate_config[\"stop\"] = [f\" {username} \"]\n    return pytorch_generate_config\n\n\n# The actual sanitizer for the generate config.\ndef baichuan_sanitize_generate_config() -> PytorchGenerateConfig:\n    _stop_token_ids = [2, 195]\n\n    pytorch_generate_config = _base_sanitize_generate_config()\n\n    # we don't need to specify the stop parameters as we are always going to pass in stop parameters.\n    if \"stop_token_ids\" not in pytorch_generate_config and _stop_token_ids is not None:\n        pytorch_generate_config[\"stop_token_ids\"] = _stop_token_ids\n\n    return pytorch_generate_config\n\n\ndef _convert_completion_to_chat(completion: Completion) -> ChatCompletion:\n    return {\n        \"id\": \"chat\" + completion[\"id\"],\n        \"object\": \"chat.completion\",\n        \"created\": completion[\"created\"],\n        \"model\": completion[\"model\"],\n        \"choices\": [\n            {\n                \"index\": 0,\n                \"message\": {\n                    \"role\": \"assistant\",\n                    \"content\": completion[\"choices\"][0][\"text\"],\n                },\n                \"finish_reason\": completion[\"choices\"][0][\"finish_reason\"],\n            }\n        ],\n        \"usage\": completion[\"usage\"],\n    }\n\n\ndef chat_with_bot(\n    format_input,\n    chat_history,\n    alice_or_bob_state,\n    system_prompt,\n    model_ref,\n    usname,\n):\n    full_prompt = construct_Baichuan_prompt(\n        prompt=format_input,\n        system_prompt=system_prompt,\n        username=usname,\n        assistant_name=alice_or_bob_state,\n        chat_history=chat_history,\n    )\n\n    pytorch_generate_config = baichuan_sanitize_generate_config()\n\n    resulting_chunks = model_ref.generate(full_prompt, pytorch_generate_config)\n    assert not isinstance(resulting_chunks, Iterator)\n    completion = _convert_completion_to_chat(resulting_chunks)\n\n    if alice_or_bob_state == \"小红\":\n        print(emoji_women, end=\"\")\n        print(\" 小红:\", end=\"\")\n    else:\n        print(emoji_man, end=\"\")\n        print(\" 小花:\", end=\"\")\n\n    # this is the completion generated by \"generate functions\"\n    content = completion[\"choices\"][0][\"message\"][\"content\"]\n    print(content)\n\n    chat_history.append(ChatCompletionMessage(role=\"user\", content=format_input))\n    if alice_or_bob_state == \"小红\":\n        chat_history.append(ChatCompletionMessage(role=\"assistant\", content=content))\n    else:\n        chat_history.append(ChatCompletionMessage(role=\"assistant\", content=content))\n\n    return content\n\n\n# ---------------------------------------- The program will run from below: ------------------------------------------#\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n\n    parser.add_argument(\n        \"-e\",\n        \"--endpoint\",\n        type=str,\n        help=\"Xinference endpoint, required\",\n        required=True,\n    )\n    parser.add_argument(\n        \"-m1\",\n        \"--model-1\",\n        type=str,\n        help=\"Xinference model 1's model uid\",\n        required=True,\n    )\n    parser.add_argument(\n        \"-m2\",\n        \"--model-2\",\n        type=str,\n        help=\"Xinference model 2's model uid\",\n        required=True,\n    )\n    args = parser.parse_args()\n\n    endpoint = args.endpoint\n    model_1_uid = args.model_1\n    model_2_uid = args.model_2\n\n    # model_a used in these demo are both baichuan-chat-13b\n    model_a = \"baichuan-chat-13B\"\n    # Specify the first model we need\n    client = RESTfulClient(endpoint)\n\n    # chat history to store every words each member is saying.\n    chat_history = []\n\n    alice_or_bob_state = \"0\"\n    print(\"\")\n    print(emoji_jack_o_lantern, end=\"\")\n    print(\" 欢迎来到 Xorbits inference 聊天室 \", end=\"\")\n    print(emoji_jack_o_lantern)\n    print(emoji_sparkiles, end=\"\")\n    print(\" 如果要退出聊天室，请说 '退出'，'离开', '再见', or '拜拜'\", end=\"\")\n    print(emoji_sparkiles)\n\n    # Receive the username and the opening greeting message from system, start the whole program.\n    print(\"\")\n    print(emoji_system, end=\"\")\n    welcome_prompt = \": 这位来宾，请告诉我你的名字: \"\n    text_to_audio(welcome_prompt, \"0\")\n    username = input(welcome_prompt)\n\n    welcome_prompt2 = (\n        f\": 很高兴见到你, {username}。我们希望你能在未来速度推理聊天室与我们的两位\"\n        f\"人工智能朋友度过一段难忘的聊天时光。随后，我们的系统将指引你选择和配置你的语音输入设备，请认真仔细阅读并完成。\"\n    )\n\n    print(\"\")\n    print(emoji_system, end=\"\")\n    print(welcome_prompt2)\n    text_to_audio(welcome_prompt2, \"0\")\n\n    # define names for the chatbots and create welcome message for chat-room.\n    system_prompt_alice = (\n        \"这是一个充满好奇的人类用户和两个人工智能助手的聊天。人工智能助手们将对人类用户的问题提供有用的，详尽的，和有礼貌的回答。\"\n        \"第一个人工智能助手的名字叫小红, 第二个人工智能助手的名字叫小花。\"\n        f\"这位充满好奇的人类用户名字叫{username}。\"\n    )\n    system_prompt_bob = system_prompt_alice\n\n    # launch the two model one by one and let them greet with the user.\n    # first set up two model ready for serve on the server, and then\n    # retrieve them by model_uid on client side.\n    model_a_ref, model_a_uid = lanuch_model(\n        alice_or_bob=\"小红\",\n        model_a=model_a,\n        username=username,\n        model_uid=model_1_uid,\n        system_prompt=system_prompt_alice,\n    )\n    model_b_ref, model_b_uid = lanuch_model(\n        alice_or_bob=\"小花\",\n        model_a=model_a,\n        username=username,\n        model_uid=model_2_uid,\n        system_prompt=system_prompt_bob,\n    )\n\n    # We can change the scale of the model here, the bigger the model, the higher the accuracy\n    # Due to the machine restrictions, I can only launch smaller model.\n    model = whisper.load_model(\"medium\")\n\n    while True:\n        audio_input = record_unlimited()\n\n        start = time.time()\n        raw_format_input = format_prompt(model, audio_input)\n        logger.info(f\"Time spent on transcribing: {time.time() - start}\")\n\n        # turn traditional chinese to simplified chinese.\n        converter = opencc.OpenCC(\n            \"t2s\"\n        )  # 't2s.json' represents the conversion configuration file\n        format_input = converter.convert(raw_format_input)\n\n        if \"小宏\" in format_input.lower():\n            format_input = format_input.replace(\"小宏\", \"小红\")\n        elif \"小洪\" in format_input.lower():\n            format_input = format_input.replace(\"小洪\", \"小红\")\n\n        # set up the separation between each chat block.\n        print(\"\")\n        print(emoji_user, end=\"\")\n        print(f\" {username}:\", end=\"\")\n        # format_input = input(\"type your prompt: \")\n        print(format_input)\n\n        # for un-natural exit audio inputs.\n        if \"离开\" in format_input.lower() or \"退出\" in format_input.lower():\n            break\n\n        # for natural exit, both bot is expected to send greeting message.\n        if \"拜拜\" in format_input.lower() or \"再见\" in format_input.lower():\n            alice_or_bob_state = \"小红\"\n            content_alice = f\": 很高兴能与你交谈, {username}，再见！\"\n            print(emoji_women, end=\"\")\n            print(content_alice)\n            text_to_audio(content_alice, alice_or_bob_state)\n            alice_or_bob_state = \"小花\"\n            content_bob = f\": 能与你交谈是我的荣幸, {username}. 希望能再次见到你！\"\n            print(emoji_man, end=\"\")\n            print(content_bob)\n            text_to_audio(content_bob, alice_or_bob_state)\n            break\n\n        system_prompt = system_prompt_alice\n        # We choose to set 小红 to default\n        model_ref = model_a_ref\n\n        # check whether 小红 and 小花 are both in the prompt and their position:\n        def check_word_order(string, first_word, second_word) -> int:\n            words = re.findall(\n                r\"\\b\\w+\\b\", string\n            )  # Split the string into words, excluding punctuation\n\n            if first_word in words and second_word in words:\n                first_position = words.index(first_word)\n                second_position = words.index(second_word)\n\n                if first_position < second_position:\n                    return 1\n                if first_position > second_position:\n                    return 2\n\n            return -1  # Either of the words is not present in the string\n\n        if check_word_order(format_input.lower(), \"小红\", \"小花\") == 1:\n            alice_or_bob_state = \"小红\"\n            system_prompt = system_prompt_alice\n            model_ref = model_a_ref\n        elif check_word_order(format_input.lower(), \"小红\", \"小花\") == 2:\n            alice_or_bob_state = \"小花\"\n            system_prompt = system_prompt_bob\n            model_ref = model_b_ref\n        else:\n            if \"小红\" in format_input.lower():\n                alice_or_bob_state = \"小红\"\n                system_prompt = system_prompt_alice\n                model_ref = model_a_ref\n            elif \"小花\" in format_input.lower():\n                alice_or_bob_state = \"小花\"\n                system_prompt = system_prompt_bob\n                model_ref = model_b_ref\n            # if both of them are not presents, if we don't have any assignment to agents,\n            # we shall tell the user to do so\n            else:\n                if alice_or_bob_state == \"0\":\n                    tips = \": 我们的人员已经准备就绪，请直接呼叫他们的名字与他们开始交谈吧。\"\n                    print(emoji_system, end=\"\")\n                    print(tips)\n                    text_to_audio(tips, \"0\")\n                    continue\n        # call the chat function to chat with the bot.\n        if alice_or_bob_state == \"小红\":\n            content = chat_with_bot(\n                format_input=format_input,\n                chat_history=chat_history,\n                alice_or_bob_state=alice_or_bob_state,\n                system_prompt=system_prompt,\n                model_ref=model_ref,\n                usname=username,\n            )\n        else:\n            content = chat_with_bot(\n                format_input=format_input,\n                chat_history=chat_history,\n                alice_or_bob_state=alice_or_bob_state,\n                system_prompt=system_prompt,\n                model_ref=model_ref,\n                usname=username,\n            )\n\n        text_to_audio(content, alice_or_bob_state)\n\n    # finally, to wrap up and clean up the workspace.\n    del chat_history\n    bye_msg1 = \": 感谢你关注我们未来速度公司的 Xinference 项目，并选择两位诞生于该项目的杰出人工智能工作人员\"\n    bye_msg2 = \": 我们会继续努力强化我们的已有的产品，并持续推出新产品，未来速度的目标始终是为大数据用户提供更好的产品与更广阔的平台\"\n    print(\"\\n\")\n    print(emoji_system, end=\"\")\n    print(bye_msg1)\n    print(emoji_system, end=\"\")\n    print(bye_msg2)\n    text_to_audio(bye_msg1, \"0\")\n    text_to_audio(bye_msg2, \"0\")\n"
  },
  {
    "path": "examples/AI_translate.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport argparse\nimport logging\nimport os.path\n\nfrom xinference.client import Client\n\nlogger = logging.getLogger(__name__)\n\n\ndef _prompt(text):\n    return f\"Translate the english text to chinese: {text}\"\n\n\nif __name__ == \"__main__\":\n    logging.basicConfig(level=logging.INFO)\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"-e\",\n        \"--endpoint\",\n        type=str,\n        help=\"Xinference endpoint, required\",\n        required=True,\n    )\n    parser.add_argument(\"-i\", \"--input\", type=str, help=\"Input text\", required=True)\n\n    args = parser.parse_args()\n    endpoint = args.endpoint\n    logger.info(\"Connect to xinference server: %s\", endpoint)\n    client = Client(endpoint)\n\n    logger.info(\"Launch model.\")\n    model_uid = client.launch_model(\n        model_name=\"OpenBuddy\",\n        model_format=\"ggmlv3\",\n        model_size_in_billions=13,\n        quantization=\"Q4_1\",\n        n_ctx=2048,\n    )\n    translator_model = client.get_model(model_uid)\n\n    logger.info(\"Read %s\", args.input)\n    with open(args.input, \"r\") as f:\n        eng = f.read()\n\n    paragraphs = eng.split(\"\\n\\n\")\n    logger.info(\"%s contains %s lines.\", args.input, len(paragraphs))\n    input, ext = os.path.splitext(args.input)\n    output = f\"{input}_translated{ext}\"\n    logger.info(\"Translated output: %s\", output)\n    with open(output, \"w\") as f:\n        for idx, text_string in enumerate(paragraphs, 1):\n            logger.info(\n                \"[%s/%s] Translate: %.10s...\", idx, len(paragraphs), text_string\n            )\n            completion = translator_model.chat(\n                _prompt(text_string), generate_config={\"temperature\": 0.23}\n            )\n            content = completion[\"choices\"][0][\"message\"][\"content\"]\n            stripped_content = content.split(\"\\n\")[0]\n            logger.info(\"%s\", stripped_content)\n            f.write(stripped_content + \"\\n\")\n"
  },
  {
    "path": "examples/Custom_StableDiffusion_ControlNet.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"# Preparation\\n\",\n    \"\\n\",\n    \"First, you need to install Xinference with image support and huggingface-cli:\\n\",\n    \"```shell\\n\",\n    \"pip install xinference[image]\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Then, download the Stable Diffusion model with ControlNet. You can download the model from the following link:\\n\",\n    \"Stable Diffusion v1.5(_https://huggingface.co/runwayml/stable-diffusion-v1-5_)\\n\",\n    \"MLSD ControlNet (_https://huggingface.co/lllyasviel/sd-controlnet-mlsd_)\\n\",\n    \"```shell\\n\",\n    \"huggingface-cli download --resume-download runwayml/stable-diffusion-v1-5 --local-dir \\\"$(pwd)/stable-diffusion-v1-5\\\"\\n\",\n    \"huggingface-cli download --resume-download lllyasviel/sd-controlnet-mlsd --local-dir \\\"$(pwd)/sd-controlnet-mlsd\\\"\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Then, start the Xinference server by the following command:\\n\",\n    \"```shell\\n\",\n    \"xinference-local\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"The Xinference server will be started:\\n\",\n    \"```shell\\n\",\n    \"2023-11-02 16:04:55,278 xinference   38878 INFO     Xinference successfully started. Endpoint: http://127.0.0.1:9997\\n\",\n    \"2023-11-02 16:04:55,280 xinference.core.supervisor 38878 INFO     Worker 127.0.0.1:32187 has been added successfully\\n\",\n    \"2023-11-02 16:04:55,281 xinference.deploy.worker 38878 INFO     Xinference worker successfully started.\\n\",\n    \"```\"\n   ],\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"id\": \"58f64d59be3a3a67\"\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"# Register the Stable Diffusion model with MLSD ControlNet\\n\",\n    \"\\n\",\n    \"Now, we have an inference server running at `http://127.0.0.1:9997` with empty models. Let's register the Stable Diffusion model and ControlNet.\"\n   ],\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"id\": \"7fca21941c0f91ca\"\n  },\n  {\n   \"cell_type\": \"code\",\n   \"outputs\": [],\n   \"source\": [\n    \"import os\\n\",\n    \"from xinference.core.utils import json_dumps\\n\",\n    \"from xinference.client import Client\\n\",\n    \"client = Client(\\\"http://127.0.0.1:9997\\\")\\n\",\n    \"\\n\",\n    \"dir_path = os.getcwd()\\n\",\n    \"my_controlnet = {\\n\",\n    \"    \\\"model_family\\\": \\\"controlnet\\\",\\n\",\n    \"    \\\"model_uid\\\": \\\"my_controlnet\\\",\\n\",\n    \"    \\\"model_name\\\": \\\"my_controlnet\\\",\\n\",\n    \"    \\\"model_uri\\\": os.path.join(dir_path, \\\"sd-controlnet-mlsd\\\"),  # your controlnet path\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"my_model = {\\n\",\n    \"    \\\"model_family\\\": \\\"stable_diffusion\\\",\\n\",\n    \"    \\\"model_uid\\\": \\\"my_image\\\",\\n\",\n    \"    \\\"model_name\\\": \\\"my_sd\\\",\\n\",\n    \"    \\\"model_uri\\\": os.path.join(dir_path, \\\"stable-diffusion-v1-5\\\"),  # your model path\\n\",\n    \"    \\\"controlnet\\\": [my_controlnet],\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"client.register_model(\\n\",\n    \"    model_type=\\\"image\\\",\\n\",\n    \"    model=json_dumps(my_model),\\n\",\n    \"    persist=False,\\n\",\n    \")\"\n   ],\n   \"metadata\": {\n    \"collapsed\": false,\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-04-19T06:36:11.231232Z\",\n     \"start_time\": \"2024-04-19T06:36:11.222587Z\"\n    }\n   },\n   \"id\": \"b09705b3829eddd2\",\n   \"execution_count\": 7\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"Let's launch the Stable Diffusion model with ControlNet. \"\n   ],\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"id\": \"390b692c8f21a418\"\n  },\n  {\n   \"cell_type\": \"code\",\n   \"outputs\": [],\n   \"source\": [\n    \"model_uid = client.launch_model(\\n\",\n    \"    model_uid=\\\"my_image\\\",\\n\",\n    \"    model_name=\\\"my_sd\\\",\\n\",\n    \"    model_type=\\\"image\\\",\\n\",\n    \"    controlnet=\\\"my_controlnet\\\",\\n\",\n    \")\\n\",\n    \"model = client.get_model(model_uid)\"\n   ],\n   \"metadata\": {\n    \"collapsed\": false,\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-04-19T06:36:25.169778Z\",\n     \"start_time\": \"2024-04-19T06:36:19.203544Z\"\n    }\n   },\n   \"id\": \"9d5c7815ffbe1f7d\",\n   \"execution_count\": 8\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"Load a straight line image from the local.\"\n   ],\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"id\": \"7e257c8cab307833\"\n  },\n  {\n   \"cell_type\": \"code\",\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"<PIL.Image.Image image mode=RGB size=512x512>\",\n      \"image/png\": \"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\",\n      \"image/jpeg\": \"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\"\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import os\\n\",\n    \"from diffusers.utils import load_image\\n\",\n    \"\\n\",\n    \"image_path = os.path.join(os.getcwd(), \\\"draft.png\\\")\\n\",\n    \"image = load_image(image_path)\\n\",\n    \"image\"\n   ],\n   \"metadata\": {\n    \"collapsed\": false,\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-04-19T04:41:23.785272Z\",\n     \"start_time\": \"2024-04-19T04:41:23.758995Z\"\n    }\n   },\n   \"id\": \"f8adc46724e0e84f\",\n   \"execution_count\": 3\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"Call the image_to_image API to the Xinference to get the result.\"\n   ],\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"id\": \"b7b1026c4f8e3484\"\n  },\n  {\n   \"cell_type\": \"code\",\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"{'created': 1713508619,\\n 'data': [{'url': '/new_data3/wuzhaoxin/image/f02f5baa71fe434eb112cfbc4ca79d3d.jpg',\\n   'b64_json': None}]}\"\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import io\\n\",\n    \"\\n\",\n    \"prompt = (\\n\",\n    \"    \\\"a modern house, use glass window, best quality, 8K wallpaper,(realistic:1.3), \\\"\\n\",\n    \"    \\\"photorealistic, photo realistic, hyperrealistic, orante, super detailed, \\\"\\n\",\n    \"    \\\"intricate, dramatic, morning lighting, shadows, high dynamic range,wooden,blue sky\\\"\\n\",\n    \")\\n\",\n    \"negative_prompt = (\\n\",\n    \"    \\\"low quality, bad quality, sketches, signature, soft, blurry, drawing, \\\"\\n\",\n    \"    \\\"sketch, poor quality, ugly, text, type, word, logo, pixelated, \\\"\\n\",\n    \"    \\\"low resolution, saturated, high contrast, oversharpened\\\"\\n\",\n    \")\\n\",\n    \"bio = io.BytesIO()\\n\",\n    \"image.save(bio, format=\\\"png\\\")\\n\",\n    \"result_image = model.image_to_image(\\n\",\n    \"    image=bio.getvalue(),\\n\",\n    \"    prompt=prompt,\\n\",\n    \"    negative_prompt=negative_prompt,\\n\",\n    \"    num_inference_steps=20,\\n\",\n    \")\\n\",\n    \"result_image\"\n   ],\n   \"metadata\": {\n    \"collapsed\": false,\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-04-19T06:36:59.856123Z\",\n     \"start_time\": \"2024-04-19T06:36:28.438127Z\"\n    }\n   },\n   \"id\": \"6d2ad668067e19c4\",\n   \"execution_count\": 9\n  },\n  {\n   \"cell_type\": \"code\",\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"<PIL.Image.Image image mode=RGB size=1024x1024>\",\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAIAAADwf7zUAAEAAElEQVR4AUzdB7xfV3Uv+Nt7772oXemqF6vL3Za7MdiGkJgSEgiQQOYRSIaESV4mZZL3XipDAD+K6e7GGHfLXZKbepeudHvvvd/57v9J+Myx/fe55+y99lq/VXbfJ37DspK5ubml+MSUlJTFxcWpqanFpbjU1NSl+ITExETPp6enJ6amk5KSSsvLKyoqVtTVdnd3T05Otre3t7Reqaqqqqgoa2trS0wM6QuL8mtqas6cOTU0NNTbOzA7G1eUVzA1OTM9MxkfH5+RkeZKiFtaWFiorqm65pprkhMTBgcHe7o6Zmdnq6urp6cmEuMXJ8fHsrKyEhISLl682NfXV1ZWhubo6OjMzExubm5GRobf4uLi5OTky5cvZ2bmYlv2+fl5rwoLC+XFCfaUeCx2LS0t4T+IUFp630c+7Lm8iBQVFaWnp09MTOD2zJkz6PT09Fy4cKG3txca6CSnJPYP9m3YsK6ysnLVqlUnTpySBRvKWrmiAR2CwCcjI0sC95cvX8rKTM/Pzx0ZGSkvL4+Li+vo6Lhy5cqaNWsA+8Ybb2RnZ2Nsy5Yty5cvx/Phd9/r7hu5/oYbq6uqsJEYFxdkmZnC1ZtvvIb3qfGxFStWdHa1b968eXF+YWBwePnylbPzi0DLzMzEKnDy8vKkLCkpWb169b59+xR38uRJz9G/dOlSemZWU1NTfX19Tk4OEaBK3cTHfH5+Pj0C9uzZs0p555133F9/ww0E9xbzAYHkZHQiMVkFdcAckWXLllFlf38/o4hISYYfUuAHeuDFJJ1iTHayw7+2tiYufr60tHhsbAJv3pL329/+rvQz03MDAwMJCYn4nJiYgtgtt9wyMzeXmpaVW5BPof/yL//S2NhIxldeeQVxZBX0wQcfHDlyxJ/XX3+9NApKT0mLdEciLD377LMnTpyoq6vDMDNYv349RYyPj7e2tgIwLm6pv68nJycL4IhQyquvvgo9adiSi/iUxWyYhOIKCgoOHz4ssSIU19LSsnv37vPnz3d2dkqDoIzAiaSWLL8gd2JsMDk5cW5uATMIetjd3cuwuzp78LNqVQPVQIMivFpkAEvz8wsLgD148CC94Jwh8S8CQob9KMUNzINpNV/uaGlOS0sBF+0kJ6cyvKLCElCnp2ew0vfe++Ctt94aGhzxBMPpGanJqamzc9OySx+5DKqQ37RpEy9LTIzHCelwOzY2lpCQdOrU6QvnL42Oji8uxi0sxJWW5rGKrq6udevWgYsI+McV4hRKy16hs3zlquChSVhKzsrJx7B4InFlVS276u7t//Wvf93e3jk9O7V16+bF+KXM1JRNG9YRfmJ8pOn8hZkZOhrFZFVN5fzSIvGXrVi+a8/u9NTUoqyMmelJgA8PD1dWVGMVVlSTmJjsIU8UkZixGEXkvPz8qanZxYT49LTs4vLy2cX446fPfvfB73EKMI6NDK9tbDh76tj44MDVu3dMTYxxjbmlhIWl+KGBPrclJUX8Ljsr46233rzqqquOHH33qi1bc3OziaJc10D/UE1VLdh/9atfsXYOdeeddzItnMChoaGBs9M1lm677TZpxIfiorw1jatBFPw9IUk8WVhYElLYPNvbs3ufV6mp6e+9996TTz55/fXXbtm6CRv87gc/+MHGjZsRv+666/j7W28epMGqqprt27dzCloTuyAsehPNDZpBmqWlBCF1cVGUpm50+AiCjEr2ocHBpfklPPT39yanpa7fsAGYE1OTr7322osvvkzA2uo6ejx25BillxWWZmSl8/qR8VHh7vTp01dffTWaiqB6Xib2QkDp4ozS0YdDbX2dh2+++SbO3XjFGN5+++3a2tqVK1dKJj2UvGLPVOZPFsLR5BWW2YCyiMYG+MKuXbvcMyoaZ3UcWZlugM/2nn76aWnwQ1m8EkHcfvzjH2cPikDWDa6Uy50FEDpCbe/evWJm5N1qAaRYPsqf+tSnvC0pKj5+/PjR4ydwvriwxEkvXGoSRpYWQ4QsLit/7LHHBvoHqfi9D47U1FTu3rG5rLxYlQdnSvG8qekyfpgBodLSMl544QWiCRFiRVFRAW5Foa1bt4rYiMO/sCAPqj0qxY4OZko7mzZtwF5Xe8foxOTiUnx+QdH//F//uHr1qn179vJlfs+WKBT9+dklltN8pRUm+flFK1etOn76XN2y+nPnzgnvnBp9stNUZBueSCm7qMWj4S9GgZq68UDF/JoIEgBQkBFeZIyCvyeUNTkziQgm165dOzk1A5Pc3PxDhw4VFhexionxSZyv37RRSth6m5qSSfXvv/8+UpTOT2kE82I74wQ4KZgrw8CJuqaoqARckEEniq548xar0lMK3GhZBJPerzDuFc16C1sqQHDHjh3PPfccc5KRREqkfRcLhx5OZKERULhHhOwYZi3kQpwq3333XaQY3nD/gD9ZviwuxZ06dYqVSgYWZsM3IQxPfML5xhtvhCdVKtpDl9K9Upxk8sJWoaRATXTv6+1OS0slL97ww/tc0uMK/2RhnDxCRuw1N7dMT80CPD5+CRHyglSjBVDDw0MiZFJSAq2JIehjm1lOTi1mpGdRGQofHHmPpWdmpuF/48b1SsnJzcYeavgEVHxiAiia21rr65YfPXq0q6ubOOfPNamYWDJmykorsZefX4jh+flFEPEVjM3NhaYa8SklMQn5+ISEeAQFQLlKy4ppdnCwPy4uYWZ6ITU1zStKjyULJcbaVBkA8ZAsoMM86fxWV1eBOsKHFXkVjCo1FVws031Eyg30oJGXWyhXQmJcRA1vIyPD6GMV8cnJcbmUS7MCLyNMT0qjevjwl67uDhQWF+elgSTfycrOVHRZWTAe8MqVnZXnHnF6ZKJsW97m5mbhSPNA5Uhr6m4tZ0S44d69V3sFXko8eZpPnBGOdu7cOTA0Qpap6Rnl9vcPFBcX4XAhbml+Li4pJZlq4Jafl6PEhdkZ/EdMjo4MKxfI0IYP6VLiE/16qAiWEANwAktZWRnELCwqQKG+vtZboEkZv7pK3ZmoTSkR2ZQ0MzsXXGVuXqLE5FCFL8bF454GkiWNj5Ns48aNkQV393SyPJ6LoeXLl9FWTm5WzFcnRIGpybn5maXEhGRVJlZAiVpmetDf3PzsH/zBH+RkZXKPzvZWHsJGS0uKmi9fTE9NIaE/6YOTaFbiSnsOVyI1MUQNETMyr+PHQ5CigMivGAcDIr9qBi5SCkNU5SKtZCNDox/+8F2aO9SJW07Lyb1SYgQKSYU25Xq+qmHFsRNH2fSpU2cTE+NuvPFmaTZs2EBtFy80iT7SCDSqWvcMiF0lJcaL3RhQFWGGFHhgEFoSfFh21Yn6j2F9+ctf7urpvdDU9sqBV+dmZ2+//fatmzapfjraW/GwtnG1XCeOHmEut962H5j//q//dvTYifGp6cyMbLLjmcq81fRk7oI1I2CL7InIqijP8dZ0pVm5biB/8803u/FWdhfcgrpjwdS9ZFDKyMz0K4DCmfkiGDme1p7EsIWbclETiSQTQYQYlYf0IXtGaHdybzdgZBug5px0p6XO++67/57R0WHRDESKVjUKj48++ug1V1/3+uuv06Tnk5PTEW933n336PhEQVEJbhHX3JdeU0N7QutKWKcmVgVMpatFBKal+VB5cH71Fo3QlIfySqmKYjbYQ1yl4jc3N6e9rUWrm39SJRMS5mTHsKhBwCjEUC7xwctK2TYMycXAVFcSsxw8wwrgYGHPEsuCn9Gx4Yy00K1jIfhEAav6qgHqoVGcDA4O0bUAqmhEAFtQXKBSkthzEYSk7rX51Ovoo4lPl3BA5KnJifffPQxP8nKQ+PjEQGQmCFhdXSOCiLAos8A3Xn9Lk0hEKC4r9haf1Bq5gCBJWTIiy7Z1J1pa2iJvglJlZVVvTz808MN0FUo6mnVDFkGA4zM2pADCtNghq8jIyhYiCguK6V1cLy+rLCgq1M/JzMopKyvPyM7iPvy6q6d7eGSgpLykopjrF8zNTAtug7194rKAC//E5ASiTc3O7Ny9SykJ8XGJ87OGCSCPn+qqWjWum5hlLuK2uLgUS3q8UTTzamFxqaik7Mix4wXFZWvWb+ofHvnpzx5+9/0PZElLSV5anCstyquvrEhLSZgaGw0KXYgbGhkbHx0GNSjwX1JcWFVVqQVw6637qyvLExLiCN7a1iyab9yweWkhrrCw+Hvf+x55jWjgWc0KAZb24x//GMh79uzBj1DA9zs62m668dp169dSAY/OzsoRJdi/P3/+84dR2Lxpq3L/4z++w+CZugZBWXnJ7Oy0sMDqmA/k9RMwDwnp6+uX051SJGBOvNW4jSaIAOuiI2/jE+JEIaTIwlYlRpAI1D02OhoX+C+cmA5dUIYH7RdffolVP//8ix/96EdzsnJR62jr4DurV67WMujpp50JzVnBWaGiDen4hdCquMiPFBrFOia3Z99egoNCV5n9670zY+5DOsamIIiBXUYmxAi5rWgGQDTZLRf2kKTw5AiK4M6Mk6REkIArKEtE5SyULs0f/uEfPvjgg3jjxffccw+zfP7554V6LRVeyXEgIKMiwIhIMJKFBffSMCEIIyi2gAXDZSWlPFoHgA9OTU7jNjs3D9v9fYPY+ODYcWZcXVWD7MWmy5s2ra+rLl2xsv71194EAgooz8zMahYwVCw1NV3hIBKzCjykp4c+0qpVK4VQ8RwP8Nfh1Fl6++03jeZMT00BtrKynOAFuXkvHXh1775rHvrRT4aGB+677yObNmw8eep4Xl4O+0G8vLxyYW5ReJycmNZdz87OKS4pGZmYHp+c4LnkAohCu7u1IzOVIzKrYuAAcyhFEU8aGDIGAROe9BLMY2KC5aAAQ/bpwjY1Qax/qF/okwaM8QlJiKhpvWptb8NSVSV3rM7Oy5WSnUC6rLQCFAIyPrSBZFQW/cqOpufiCXFcYhQekpJSIKB0lOEm/AIfBYnZACNnxv70HIBcwJ+si326V7mjw65YoPSeQBgRlIlJQTTInaVHBwhAhoaCEJHLW4LQfuQ40qPW29nF5hXnrZBLRrYnGTFlVAqUvKJxrg0uBWGGsIpQemTD7hkSsp6TDmUlMsvQQEpKWFxc8BAyjB8FWSIfAQJ8+B2WgCDYUvH42GR1dS0bwElUHyUlEzeBpekj6yUyrbT0FBpUqDg8MjrT3QXXXnw2Xb4Ids1BV3FxIXzmF0Ib2ogVthFZjFuSTPg13AmZnJxcDbCTJ84CVtALIKSE6j49PZMI/f3M+yKhoISfiPmluAXwjo2F0Vua5dbeGofCrSpFq763Z7CoqJijQY+RKB16LlIDxBOcKyLSF1iSk5M8B0vUFMSVvGAhCPpYwgkirgjw2dk57U+dkAhGKdXYFA1MpYyNhWa3Gk3lAnDP26+0KUt25jow2CfNxMRYQGZ+1ljSipV1jFbdJDs2NELKy6rAThxZZERN9CAyq5YHD8YsBBmcY5i79fT0echiGczZ8xf4ODqo9fYPyjs7N0813kqPYYYan5RcWFTCPNCfGNezmsvJDM19JqHQyYlxhUqmLAnSklOGB4fcoCmlYXdEMjPTeXc0+J6ZlQHS0LNLTOQIpEuSzh8RImporGRl5yhvYSkuSM0EVBjzRpIW/GO0Jy1Dz3j86NHjPAQfKjbFG9MNNtXbq2x2o6OZl5/T0LDGMGdzU1sCFzZBkJAwP7tgGFtYcT8zPeU+asWqErBlzC8lVt93trfRolcGQZmm7hErZFhA0dDkTphUkWhS87FQ58UH7brIwoww7FJ/wJ3kHEBevHE2kFVVlakPBES1NeIMQtFuFEcif7IhUY8gIUtP575r9go7YqWRVBf66MirG+1G0cKBBivV+rOmpio2AxD07QlJqUe49CdLRROTRpTBS7Rf/vKX+YVFZaU1X/7Sl9iQkaQnHn30d37nd1iVUSLNDlwJ/bXL6gd6+7Zuuer/+cd/2H7VTmNOqGlZVlVXob9r9w7lAqR+Wa2IwNXfefeQsSuQKkItxf7cxOx+RgsbTYORLIx0zJTImJEYBa2EYEmhk13NwaRBX6xRVRCBCmiN0XAAdoFhdixw9/b2qQJdcBYXOCFMqEkfQFlyufFErIxFrlYj6AYjFaGS8/yRRx756Ed/64477jh+7OQNN9xw5MhR1pidnavpQInPPPPM7XfeNTYyFL+0ALr01GTjYtu3bTlx7IhO4+mMNEXggRT0UpifmxC32NnTjcmurk7dyXfeOazhMjExrqF/6dLFqanJs2fDKBSzKSgIsx8Mhq51X2WHhl/8kxdcZGE2YGEzYhCro2hVHR/RzjboW1lZvWLFKs0RtsrnsdfXN8CjCgqKxscnW1vbpUxIXEyIm2M/mm7EQYexGaXGoajEJAArowY3IvBXLrPhVlQsHu3ds6eivBxix44enTUKwsk548zM8NCQm5hXZ6xdu0b/7vLl0B6FJ3l1NvDT0tLMkg0virmofeTeexDXB+vq7SIgZhg8bmXR4ZqbCyNe3d09MzPvr1u3VqMfGzQLnJTkNMrCNqWLUKCGmz/ByPe1NrTktBFVn+j7NdaSkZnW3NJ27NgRzdOa6jpDy1PTE1eujHLN1NERuUwv1VZXpqYl10/UnTp9cnAExoOUm52Z0dfbwwBAEY3NjIwNYzUtM8ycKHd8bLQoOxOM9EIKpBgYoFjm0NAAlkgkO06Aw5iRLSgsgrDuU0l5VU1dfW529vbQ52wTQFtbu5bV13R2dBdBvLzkrdder9FpV32OTVCQZ93dnSjk5YYBZp1njjk5Hho32nCYwRirqCyvMrioXMy4IA867sPsNfI4NWYwDF7QPfDAAzPT4xi7crm5uKjEQ5Bi/lvf+jb6gkxVZY3+Q0vLlV27dqiWhocHUTPvBXxuDhY2iXPGmZ2Vy+OM2aGPJXEGPwxYBeA3qgUVhP7IaGg0tLe38nQlRoFIehiy/5LCEuwNDAcDnpmdFRZOnz6blZOzurERAhfPX4Lw6obV8FSu6nh0YvxKyxU1ftOVywLsyNio2qGto11rXhrFzS3M5+bnnTpzGtm169eJtEq56667NNDFat0YPAjp1IQg3PypIOUyKi0kUngiLzAZHhnFSX6HuLwUQTSqx630khlrRAdx+AgFKnIzLVLKbjaGfz311FNcmy8oi+PLInZ5S0dQlZcjSAZGF/5pwXNKkUxZdC2N7ECemp50X1RSqnJZWuI4E+KelG5Ey9raaiorys9U00M+CqrecgqxDv/oA5/HRRYriwrBc4zhgTiKY1dDg/1kMcbMaO++6y7Oa/QOYwYjJGYemiZ33H5rUUEhZsAVS5AV1XtgdMU63iOZmaFLw1nFUviwiqDiMDMTpnaJTC+y4xMUIMIeTmTxVuQHAnujYizJ5TnYPZSYFqgSCEyouKi0pDiMLo+NTtTU1YqHhw4dv+++O6+0NIseYibPHRkPc2tiILIMGAixIB8GaNFBnzXyDtQ8kR5EGKNEwHZ1XWbt0kvDTlBgkPjBv7yRDSs94DY0BG2C4FC5GCYvVsmFJlLSu6heMhdZ5BJUWAUQUKYFBXnFi2lQicDEBoYVjZosLjhIBiucGGDCrWoID7SmOPTpkVI8QZCOcMukUYuIR1rg1xJQKN4w7BU6LDo+btHQrfRYxZUbyCCLjgQSY0lBUd1ExapjDJOavEwUbkRCOSsrXS2sA6DchcU5Biy7/kl8QjqJrCkYGw/dHjGBfdKU5jgelkILJbSjUPPLl9lVWmoG+lA6evQY4mKj2txQCx4kQVltyBgEw2B7hYWxOBRa8xqgUIIGUGlBv4I4bnr7uikOY6Yv2BikMaxcoBEBTW/hHPgxgQkOrf5Yg5iOzCQgCHn0vZUdyPJKhjg1SYwaOrIgQuqZ2amZsf8cp0MZM7hSCvpAFmTq6k26po5PjC4uxEnPv/oHemGOQ0RcSoTPqlWl9cvq0NQl8MRb99qEEOAy7nHCclgLlWk9XXXVRuFLSuxRN94wyeslUyjOS8sr8ABSuXp6ekk3MTmFE4J4KD2y+UXFcrEKDEdQkC6yK+kj9jxh3kvG6EKXJtiJkb5AJ6tQAsNYeDDWIPvs7EwMnznMUwQAQzsDoeRU00/ZMFWw/CEijI27MezvCaKT01MpKcGyCYOE4MiMdPLMJqOl+jNtbXYREQXTphnSnOy8wdQwULowr2YKmvAqpmB9qam0VN7VjSdrHvLyQiAwJeTKTA9hGnH2xDpxGWmaCSIlkhrFIb9IIdZcudKyfv1GXIEMKUBQAw7BKo28/sRt5GMY8Kq3u4t0blTbTF9VhCyVS0OREFGct/iB/uBQ/0svvbR7904IaDfr9rz55mFVgqb2ju27lKsg+rY2RLMeUJcuXaisKNPZoi0UyKtthJoOAw0FKBYWpIebKs0qiJY2rerzRgZMQ//Jn3zlmV8+/c1vfnPb1s2/+7u/+9qrrwCWBaqQ3jv8DhOhJt2elasbbr/9TjEdRPhXCq/btm2bxj2rAgLBUSaspr80Bw++Zf0L3jQQUQAjEwSXqEoXxtRJIRmovVVe88WLBBfF2B/pJOYzIo7Wj4LYMQoCkyiAJqwUpHkhpTAHRnRYlD8RhzyWNDqh6q2gXFhY8PSvnjBrjxTmQXHttddqjQEHG2pT+MhbVlaBAYPx+nNPPPa4QUTcUiXc1H/oX3/99ZrF2BZ56fHWW291j0n+ZvwbSyKaFlgws7Q0ubzFSWThFE2bbABBHbycrMhiF6JmAeJE9kqsxDae/VoUJNAzJyAAEwWG6iEj5GDgomLpFUcK6zFUt8KHS1dnempENW+MhPbBC2TskRE4KNMXCkoEiLzYnl2YBayUwMESlPSOmDo0sA1hyHtIg0Az5lVoNC8z3YAfGBmJtybNMYYgOsShkPHxCZ0EJa5cubx+RT1utVG4EkGEISkjkQ3OofnWm4cghhku29M9YJULS8B2pEGAwJkPYoml0TKN0A6RFe0JJzJYm5dfiOGTJ48zHgzpIeflh/UPxviHRwZHRg2rl6WCrrRkZLSyu7v9bEd7y5WmuprqwYEBk99po2F+SZ2IZ6hW1dbkmZzOzDLjiXk0+RfNQhLnmgIe4goscCNCZEV4hi3maYrDCmWUWFJRuWxZna7mE088UV1VMTsdFjeqvdpaW9JjM79mO/mv5+IHagaY8cDm16xpUK4SjZJFTbH9t9w0N7sw2D+kNtJ8j6oixsAZQcHkHn/8ce6gdKqnWT5uevdDd9/e2xumL5RLTdB7//0jn/nMpw3fsgp9dTMDFr9py+KfHRLKr6I1bTs7u80IISXaWNYVBRNmyZgjwd339vVTH7tyjxkwoqM46vPQn/A0TsEXCFVRWTkxMs7MpmanMMkg3z500EI3KbVlR8Ym2mLDxniQZmx4bHpuenx8jKlzNMAiqxFAQGMxCEqjaOoQ9JQuLCDI0oydMxh6kZjBfOhDH4KVCIYlonnOUFkOk468knOxZBLhnxdjBlBiqfQu4nvFOwhC7wpVUzBXMwwggjlLcKNDwlZFQuFakGHqMkof+TXwtZy4DBAwzIrQEdx+67d+Cz9eeW70AT+ys7Rt23dwZ0gWFasuw9jh6Mi4iIogwXmQV1uv2qZRFb84zcxMDXEEUniLOFZJgSYVww1ZRSsxPr5ESKmoCAbsLaEIqMMpWIFOBwZcPMvsjXaGYaBPfeb3Hn7ksc1bWIch85mLl87TGtsgPrI4RMGQcHmZxZlNGmBpA0O9g0PdPd3sFgNAdkM6ARxjgkmEA2VxAUSYOmrUhA2hwyU93gDOyNU1FMeVjDL4pTsqa1izxr0IwEgwSYo1a+ojkBkDoKhjZj40OEjkApSCFCGL7CBCExRKgTNdSIMHWmAG2FBR0h0ccMKnGDAmNUD9yiWLJ0phJ2ThEaBDn7CMB4dMyy+uAIUfUhOW3UqDE0XEJhVCAw5x5SKiLDesBX1k8aMUisMSKZgWKJQIRngqyA0+qUl6rBIBb1JiRukkRZyk2PDcFSla6R7K6znR4KCUMM86O235B0yAj4LnGJbYWzShxCCVK5eCrIVBxHiTViUePAyePhsWzKj9VY6qBok1B/EggYHQhcWwPsTFLNGUhjXG7JPcYf2MvMap9IsInpgsRhWkpKVBT+wyTqRPoGsKH5fEQiWuNF75Ai8gnYEY2LLGlNSw6BTDRtwVZ3EEJglCWMmkcVn3a/bbwDcGcK5EFz5dXF4y8HoSMeYGb9EVlYU4ReAED0rEJPUpQhpPpEfTnIEEURj0PHrohnuK7bQMautTOI7EpUXFmqPSIMVUlItaJKl4IovZVOpT24b7+Hi9S8moQBYU2AC0cYWNG27YgbKL7BBGHOBQUuHzo2jRpulptqSI0NYtKSOsskhEcL/yopyTX8CEXIqAGLmmJ8JcIhEwmZKchKxc8s7NLbLnpPjQWcqMzRLQLyY1P7wNaBs6HB72kJ2ggwjYkxQcUVdXeUeAYUNGw8OGdvxptDI5L9ukUnAbbZPpmdGh4dLSssK8gunpqfGR0YnR4JDlFaW5WQbRSnn75YtNNTV19g0A3cPp/KDdyfEwjzMXv8QmQhc7ORkinpt9ipYwMm+uPjjQPzNlKYIpjxBtMGOhMIiZKeDMLRqfNba6adMWojY2riODylgCzkCXtAImiHM8BiGNS2msX5XMpAQ+VT3rkQbb4pQoLwTTLgEhQHneYhX60jPi/MI8eoUp0czX8H9dgkuXmrVWiSILH7b+SilKV+VMToyFhs7cwtDQiGBknJjF6KgAU/0tDesx4qtGvOGGm6BsG0BXZ9dTjz+uUkfcEL55hwMHDtx0043f//73161dq/a67sYb1JdqWQw3NV955ZWXVM8mG0dGhkhhlkDHw1pqMqrDNCkMaaP25JOP6yr09PYLtVgVm7wFCHUzHU/A4vInXWCPLMQ8c/YsvXjCwtgfA3IDLpGIguCj2mDHUTCVkuDB21NSGKJcLnbmCQ4FRAQJRSkiqTqPXd5xx11PP/0UJBHUcfJK/JJYixBZS2LIqEQ86/z09BlPbSWR+kkzAp4UHQ2wqQINLurAeEKJugSRWWt28FsepRtpqodyRXZSSEanBFdREQFuLExjlAda0scJ4YBbXGEVGtJTFkwwo0lnSQBxtHqnp8XiDGPbinOBCAVSG/4nS06OWn+IiuHHfnACH+r2L/uUK3rIY1kFqa2qhKHhXmH98OGD7Gfztq26TN7SJtixCgqNG+rDmFa7smiNIBjjUlkZSZNT46tWrTCOAxmNDypWlqXqXIY58TeLfPDJsM+fP2c6nu2tXdu4cuWKc+fC0KAZYREKq8IZiAjV1NSCTwsbDHlqheKB4yBLxVAFnfTgEqToOmp20DiQCTs1M5mdY8GeOeLQRbfoszM0zWsy0tNSUkP/xwoeIsjrN3EyeeWKZcVFBfR79P33kCKmcY++/h6LOg1apKSFan5ZXS2aKanJs1OTcdmZBFcWHXFzmLtHFWK8mAapm7DE8ZYGF+bntKpDx2Ow/93Dh9Zt2rp2/QaFbli/NgTf6SnTM1YVWWtZWBzmEs3RkAJBO3mAbODcQ9oX35E1GUVfJj0kSE1Jt3jq2WeeYypecQH6EvQokfmRJWJDEPvwhz9MXnHDcInhPEvJPSTp228f4lD3338/zUZqffOt1/Fs6gDUsnNSaCuaLMh+97v/W9OHLkgXgS8XbmkBPxjDMKvGMBDwQ0e0Sd2smsMC2Su2wbTkkgCRMy0nZV+xajVSR44dVfc3rtvgrXBnXKWgoLC9tY2Xebtq+YrElEwmBA1M8lPCYi+yRveKcE9wnIjJZHQvMbcloBj+7LPP+pNQuCW+CxEWq3IiHa6Ugmeyo+8eOMY1jNHwWUrHJ8pA5j5ewcSfDJjZG50Rh//jP/7DQ+1m5fIayyPR57ys2nMmypaIpiA3MIEwNJAlrEL3799PHBcrUrrApXJRHYohhqQNb+n8a5ZNz8yqLC41XeCzqWE+fDQ3Lwew8AzR40JvSWkhGQkiemCVmbEQSowCEeLKVSKIcOIXb1zME3xSVoa5sLBFLRvz7W1tzOONN16j2TWrGgirlBXLlgPBmg0dAMbgPmqIhMouMbGyuqq8suL0mbNm4czfW89mJbdcFIQZwBIZDwolC04io+XRRIAbg4EqjXgFGV4mFLiRhXIRwSFuZZdRW3BgcBBQBNcPbGmxlyMvYiluKZ73hmaDdlVZOZQseCEXTugOfRDB3Fua9cRzqvFQSqWg7xVwMOZPhuotAfk7lCTGJJeP6CjFnwxAFpDiNmLYnywN8cjsSeQeHbJIoAh0jK+hr25StOdIYZII1Ad/WsMDd/OKCigUIIj4kzbhyd2wJLQiSBDE0cStBJIBE7UoXnniwqfEKDN4KREnr2RIYVIT1y+cYc47MB9BhIg/Aa7VgUOJxQH86ACY5CdXbm7ojViXODEZZqtAYRSGgIuLC7SMjnlOfALz7LmLoivpsKd7oPmKDQRzc8MaKtiL+fgxSJVuqXZmxvTUzJq164w8GkUyMkPXtKBoNJVCdWGg58Rp4hvkgiEftd7G7K77GB07x8J4vF+FulEcTwQFBsjF7LXRPUcwxrDBsnQ806wENIgyVEEqo8veBlYqO+0zRdmJryyg+Y007kaCiIGh/jByujg3H8fK9DFi3a3kpMQN6xppGYftrc1+gVZWXEIdvd19li0pGtqCjXJVeVpT+maMnAjpGcEjVOyqu9BOKKugFPajFMoFoNF2kRBvkYmq5WkcHWM3MW8qZMDUiu1Lp89gGM1g5OPjSidgZELe/sYlQQeTAMXkhDEPWKG2uGC1WOit0Z2+lYd4ltdsITpRdaw6wlVkTiiHujIuTEGATkbpNaeTFO+Fv8XECLVIeL/0ocuEXH5OaOGNDY/ARCzTJVOoXzxxHrmksaRBZKmoqDp79rRFX5bWYQOy1IDdhdB3NAtjBicuK1NwseY4ZBTmaFr5i4s5tJ6akqwD0NbSqs7gmVq9XAVqbE5ZpKJ7WEAciJ5rBapEKUbbUfXGIilVAvywLUx6RWAoYIPVopCV0cCNCUtwCXCo/vAnh4GDNChD0z0LWFgM6w61ZtQl8rI2sKgnLMN7/LFn6Ut2HhtaWrF+lcrIXIvsEov7zEK1p92MPoRx4gl7EjUwTMbamhpO1T8wZF2v9oG1/lrGTRcvadra0KZR+/JLL8m1f/9NbO7YB9ZU1O/YvUv3IKpOtBTVc3imHbIol3ZEFoPiCPrTANj6DZtQU9bdd9+tJaRNRgQiE5OMmsueYB5j8EdHbYdV0Y2wQAMmW4Sn2k56CCtOPaRRzkBl8URKYHIhF5vhsTHN5uKWqWEpMnFaw7bRCDX03//93//5n/+57iVSOAmRfTF++/btBnrIq/0EWOLLgqD6hmFhAG5K9OstxtAnGk8jAmfzCh0bJFAwRgVzUlujgk+qjGI3TCApzhFZue61/0gtO7JcBfNKJyMipGA5GFAcl/YnWCzB4AXoSCmXXynp1C8LlBK3EutrsQGGUVpi/W5YbU9SGTHjuRKByfKhhwKjVTSakGTwmjuMB1akxidS2v3UiisySoOUt5LV1IQ5H/ryK6VaARu8T4vtvvvug56BfyBYr2kJo5U5O3dtf+2NN6TRVgaImRtsWOIvMmBGB1velStWFRWWk0W4s6qhtKzogw/ewyd8PGQJCsJeZBVAJoshQGGOb1ZVV+Tm54J3aTGOpBDjhr0DhvX71IYmJ3K0tueBOtPf2+VVZnbW+AiNiALpkyMjTZcu9dl/H4vj5sHEXMtLFERTKSaRB/RARheLwmIqIcVldgIm7JlE+JdScwIbfFYZnnsCq9aW5qICS4enwFhZbTrIcGPcXXfd+d3vPqgmx21i/JKl3iPDxuqQCQu66urCSLbNP9yqsXENguIVnJFlS5qkqLkxD8o5hA66oBEQyY4gdYAIb6yURwsREiClnTo2OvzCC88hSCimqzrn+BqpEqBPL0xXKeh4pSq1Ckjo44kPPfQQOiiQgjlpSnEugoCRpC6AuE9ITGKBzIkRanAjZcuB9jcjxGE0VG+Ujmnh0zRIZUXFUkI8fs5dOH+x6dL11904EXpo89oWoOvt6m5tbTPKt6y+Himb0krLy/idyMMY2C3rNZrFL9wr0aoVbHjCW/mmBiLz4/78InJSwxlwc7EizxFxEzkFflwICiMUp0EJT/HTdA1Hk51mJQYCA4CtBKKoMcg/+qM/EtCMUBLfZCB/YZNCH9DABT3AwpNGPKcRT1DwkIrFPbFdGOQ7QHN5JSVANHpYQmlxCe/Gp/Ty4iExKVm5okRRcUF+YbE9/ZgkIHFycjO72ydzcuol418qfpKSwi9nRFlKAkYXAxAKqHJwMIzymlTBA/ROnjiGAYs36NEiQHLxvh/+8Ief/+zngJCZnoFJqykiZtBUEPEJZcGtkQHLhm1KJnTMfsJqZoh5i0PFMTPZveKb9KX6juwWdISiYhCxDchEEqGPeZaAW2+1hKRneKKiaW0Ii0ueqA74YF5eiPngEn+khxgAacrFQvwZMOkJS31YiLyMVjxBX4KolQ8ZJWIG21SGVUgqF7ee+GUbfuEgI2DZg8Tij8DontlI79dbtsTsBShSA1B2UhMKTTJCGMOMEzOsSxGyo+wXD7iNuUw8hjGJJVmQ9ZZOiQZPCsU2swcFmpEDUopkfhUHJSYhAfzJgoLQHWkKvIgol+xYonT2phSjI2Wl4VQPiVGQEUsuxHGoOYQgHqztwYBLEfr+knnr3hM4MGYXmh6GNdyxQSjE8am+4h0dHV1oajmowN14Ll6RGmKI0AsRIu2gAElHAniOz02bGiVmNt4an4WtIyLoAlk1KXWJ7SmpRkIttMw29GzgV7ku9P//N2IXYwByXHijkg1dfVLgGWUCuiGLJ167d+M5BlyRsjwHoIdU4C380SepX9B5jiBsKXd8ZMzDCMAwXpaVxT7p3UZkb1VMaNKONGpeXHW0dwLZE0EpO7uOKtEntapHof7ULWJyivAnEzLrRRDW64mimT8X4+aIoEmVfIdnyQJMmJvX9yeEce6hQiHvT3IBTaGIQMC9XxySwhMgKG5KfRhrUctoYS2lRPajbe3CM7syTx4Jq/QIGfavLDEfNdmTEpNBR1/u5UriMEpiB/5AUZ60jHTjbeNjllfGGu2JCepbI2RO77H7AXU2JzOesrJ0WVIxIT5Cwc3tt99+8823XLp4+fKVS1YPDw52ZqSlLyQbzBWwUs1O2QKAM1iAMCMmoRLzrDbRM1gKS3dokc9waYwZ+BQpzIkzNbLxPYn1OFXAVAJoLm20jFPBFAP+FIyixgrUJMCk54oT6LEH6NLisOJXqEVTYioktTTuBS8Bzi87QAosZeWVllDHLy2uXdMIxDNnzgk6VLtx/Qab/+jeVJlB+oZVa0Ip8zPuVXu6Aar2yAjUiHTsXqEeiukMgnZd0OU8Fks49kFzxy7Dxx559NDbBy0n+PKXv+xPfvX1P//zf/3Xf/3a1/7sS1/6UuP6Dc3Nl8+cP7duXSO2TWBppuDzued+ba+bCKJcZM+dO3PDDdeRThRmA6TQKyM7lADC2gyq4QcmxBQvuIQ0FCoL5TItgKjeIIYmNCApNPAZ+JPdQyHAjXAmmtjBIx5xKk9YGPp4k1JZLrr2p9Lhpl7hoTo2N954o7FMFZuhKJxY/Y+mvW+UuHGjhmmhbVUoPPPMr26+eX9mdi5BjNQeO/KBRRQZaal4tsZAlm1bNuflZNsv8cUvftHEzszUJCPp6evnCSbyKirLnFJlCNx6R96VmbXcTF9Pb1dxT+H5C2ejA6zYA8tUS0VM0hF50SeI/icbcw9S1khTbC8W+8IidRnhxlCBJjFuFa0U0HElNwT3SlslK6PEhJhuIHuWDJL5eZbthK0UWnIqGHt4Ll68wPO3bduqzfHOwbACpLFhNQNwzJZkmWmhyXLh7DnBp6K0zEYfdU9vT2/CUpxdbGUlobVk/SJuaWrT5g1G9EUr0yxGWzUjFHrlSpNaSbWogWs19q9+9StNQ4puaFitC22FnrkpvYy62vqx0cnDh99dtmyFKTiwXLp02SZdgkfGgFuiRYEPwxLwI1pT37BqVsTUc/J0R01KTJhHBAX9Sn/xYpNtAECuWqyanw3TTbYvC45cXi05OzdldkA71SCPSq4rdmCLJebQEzEseLD+hyNrKukwMzB2i4InCGKD0bpRkOex6BSGLSklCuvMxgiJhVCGbY2atDZfob7ySp2iwrvvvMMa/em5eQcbXGlpFZ1bWy4XFeSrG1wwR8dDZsy7VQFwAAsVazLqJzNpU7VMgpjKpVkJ3NMO3tg85KMBb74DbQ1ZzKsqdIQMpLEQkU0s5g44p0QZuRJDAmxJaZUtaNk5+SZ2OCzKyo1atxq+hE1JTsFVrGYM414RIKS2UCQKoTChGjYjoyfim/tgKuPj2JBSE4dVr1m9WigQwCW2aFN77uiJE719A4lJKR3tXbY0GlgoyMswwdo3OICCmOzsCmdvEQcDhtr6+vtFaeHxwKuvwsFMHbKOILlq+3YbIQf6+wGow2A0nU/BhBeLnKKB2CXssEAWInrghwPyKQyDAgiM32QLB4QqAFk4dSjIK/cCGp+6/fbfJpFYJJllD9r9agdBGBHn/4CX88orFxumdLJDHlxeKVTL1b2C6CugNzAgSiOLAm+iuI0b1pnLMt4HOjZgx/ZSXDzP5f66anEJSXxZI0YRVlVkZqXhH1kncbnYCUNSNF/GD5uhXAYgujJOFBRKEG0Jrf9oXY35kLbWZq/27Pk0QX751FMi0iOP/MIkkoLQ2X/rnQWW0+Xnnz51Kjc7x9AZ9GjQyT8atcaUOHJHZ5cOwPiEMZEMM34DQ4OMk00qHTN0RDQ3OFE6nfqTyC44KJpTe0hTnsvI7yCMDdmjNpaCaBk4Xtn0IXqcO9fifDA1l/hw/NiJjPRMR5fIa+2f9ieLZSrpaZn2CSiRln9DClcsM1IKDGXhnh4yeDxg1Up43kHAyKNpQTKBCHQwhCqW/EkclDVr5PWECpCVhhY8pHGWxop4CllQ8IumJ8xeIApVxn+1QQmlXlMoPr1ipTBB1i86v7FPfHpLXhmlUSKTVhZzwiQelEUEWfwpO7LMBuZMgkdgIIoGXkXu709Se2UImU796SK1IiLLJCwbiMyVVUuDuIKM6KPmHmUDMdqgmnz48YQZOGSIHq3Q1vQMFUef7aqLVg1IiBSItNrhAC6luOFHWFK0+WUjxubnWZSUW7ZsYyHCHRkVTVM8+vjxExJbAAINsy3416pU11jfrr0nDanlUgqCiMCZIsCiIA+ZBA6dIxJhBWF0JJCYQrFNU2hGYEYq88pziLFVRkW/IJWMFjzEmMuNh1F6tSQcEMkM485hWN1uSZqCD8bYjIfa8zYNMnh09uzaqxYDBSKgcNkobHW6P8mOK6zOOiFnPlTxaj21PATIRU0YE6AEEHEGBfryC/NI19IIL4qQnh5FGFMrUmJAsxBlz0tKw7AsECSWHRRGvuLMYi/858p2uM0rfzqcDQBeY/8IAhafDtShGln0ZxHxhH2iGcbRZqdhFajF9r6zMbngT+T4bY11uAQ9QD2lMIcGoOjEgyi1X67iXAxPDDhdbmq1qFdKUsGakygMKwkJ8Tjm2OowDQKhCr7UY1e70TJly5KSHBbSdXZ29PT0JifG/fEff0l21XxxbEieqacmORc0TBLJCyDqUYMKPeK7ViCMEOGxNEENGIZdbL3NHAbUYbwCxB4ql0S/WaiKjjqJtjwsKQqIQ0cplCojFUY2ys7YB+apEHb+1I4086s5JSMnF+yw4a37lSsbxHF5YWVzPZbojHRaD7pNYGSChgbx4579UarijGpjkrEqXdiyTMispyjJIBiQsUDdGzoj6Te+8Q2SWoFAzCcefxxljQaV7jPPPH3x4nlVKehIAXzU6ELpMmKGNhmHt0zccqmBwVGHx4BCEZ5QmfkBRvmJT3xCiQpCGarSkyUYfU4OM3Kvga7KJDjR8MAGVAySxXRtVUnYHAZSy0igDTf1QZRRKW7QxJVwGRmi2Ic9ns/vbFMWp5g+hPFg7B9ZQCmde8uLrGa97HjeuWePQX1tIDqCoSFSeREnJiYRp1k3gJUdGxZykIiYEkiPW1JAlWUai2WiXNRGCw+1AFiXdecAVK6uGhNSsWmIuD7/+c/7JVTktwhCAMN60RhTBRJfd5ewSmGrBMG59gTePDGmK46E2Jqw0LA67B5msXLxQw1uCZSOQx0n8KKMZ5MVekd6Flg1uuaXARCNUPDBJLXSF42QggahpM1x1923OHfLK3ziX4LYsEqCQyTZubyadKBWNCgEvsSUVKuEjRSC9PTpM6GBHs8YU957N2zVyMgIK4ucIsI4XROTI9o0N998vQYcBvDM5hXhhr4QJDIdsXA4aLsXFOY5K8B6JCvayYsgBTn/jS9caLpM9hCqsnK1hLw1rmwCxaECLsAylbmZMOH79htvaDGElDmZcYsLn/jkbyPouEMPrXMzJj3uJBaDM3V1Rz44JtowDAHUCTrw5Gc4ZKhY4sLw/+d/+p/KrayqGRufsjdqZGxq5aqGG2/eb4F7/fIVVGwUfGpinBZocHpyNDcn8757P2y2TdC3mR4yp0+dBGNrazPBLY7UavfKwgzGrMS4xTBMiG1Iwp8lQBs/biBvtpC+yIIHb70aHbFnoJW5agQzSw07CdiSFiC1Yhu2AJFYLgAKJnxBEdzfnAzMYRU8qyTsW42m3YEvC+JwbmltI4u85gnffffI5s3r999yM/sxwEKzzJiYJnbU9xJodOqMsti+/kHrf9Y2rnc20ODQCNNiHoJ2anLKYP9IZnqitrUJTQ16/bRXX3vNiINghW0FEVzRoeXa1ibOaLKzPc5ORpQzMzKgxH6eeebZj3zkHlYtFx6AyWjpDreK8wRLdEp88hL/05/+NGcXLdVS5gyJpk6RgCyCSbCTt9+WwAwJKZgTfjAssTb6/v03qTIghj6Cwi/BpYGbe0brT3ZrezE8ebq+BJUBn754IuKQBykNdnd1YKymtp7P8m5ODR8rFaPlfA60xdL58+GIT20xfbaaihJLmlc3NIqKKgs8ONgAq0i5TLJhCRo6+bLEeuaZJsQUijEAik52kQFHLao4DcCYL6R89atf/e//11+icO0NNybEJ3EHzH/sY/cTeWgkLIBpa1Wr9q1fv/HwO3B6v7am3vhReVVlfGLsPJOBMOcjCvFi0YZoFKQ4PPiTUET2ipnxGimFHSqgPnjSlw4eF4AbAMVbeZGidwlePvDakSMncnMzPSkpKwWymaQQikvDHnddI5TPXQzLZetql0UNHfoiLLNnyWwYNb/gQk3Ei5CHkj8lsI4AHQT9KQsdsXZ8ysV+MKlEcZiOaJwtScBnqVU48ks7EqNPOrWYJ4RFltRswBOj8FFcZVfA9BYsPJEKcI5PeZmQoiN556dn6AUm+u3s1nCJ6IQlKY0eQk96dPyJMVL/hm25OAL9wpy6PVeuJwqiPqUrztDJmtWrDDLjTRpkmb00CJJUGuVqvbnHuTTkffXV1yRQlqK1TGgBYbkwgAIw1QuyEyrmSn3aG0YxJENNRlBoqfuN1A1qjOFHQTI6uu2NN97Kyg2HlSlC1HVZCi79yy8fkMyGKOlx4q3nFs80NDj+rlRAQAGYqgmlYEMyAGKSmpwCREd6WVmZObolCQlh7JxCJUMGaKIKWJQSqMa2QjEA+KBp6ZmH6mVv5SIalkRXnLuPAJeSFrAHBIt//KImC8M2IOhtxJLlT4CCjI690qO6rKujGymVkXJRwJJF8SgIXIqTVzK5WJcEuGFRbjzk6eoddLAqF9npF3FKsfiHWaov6M7ojxpKdSyluo+lRcjYoqaUisowRBsJAijiIOLyitSKw7nuANmVq6FhMtQrqDJRY6M4USJA8M9hZceqsX+CAASqvAx9CZDCj/v4f/jvX1MLCt/Bc5KCj0XqjNTAbYQqbulof8vxnTGnWne8t1LJKSUx8CeZOcbIM9mNP4VmoLzzzuHUFPtIQlNVY1pK3miPt/OncKAxs8252nnZuNeUiZcizFD85/5R9KFsKhlqhr4IIBiJCzIqiPyUGgM0tGuVRW3SA1cCQET2wdAFTUwCgpWQsb83nO3A+vmhyytBDQUtKiJ7DwHPDVOh70iTwrxcQ8jYlst6O2QpLKaAcQhij1+dOHH2ppuu55MELKssi9p5sYrhvNikXOKjjD62aQu3qgTKEA5kERZpi3u0tLYyiJdeeiX4RlaWESCrYmiUJxOcgOa7161dYzEAAYEGEG0pFW3kNkTAMzaYjvQScPXjJ06ZB2T96EewMI6/+Iu/AJ1ADGQMUBaVqQWJZuiOXAREQVvHQ2hQN1tBRIuZGUXEuVOkdyuLWLw0OOQDUsKTbUTaAa8nBAQCQXg0KFSB+NRIQlwyLElPcc4NAEvkVEq3uLC0osJZAcaWaJaAimAk9uoJvgQkeGQVUMKz9kdVTS3o3KNGHPcY4I00hUmHLGln//SnP5UAM0r/vd/9NPwpAll9HnZCBE0QyMOHjHLhjXSBvdCpYDLByQV0qocezPHvF0sSsBNZUFO0Efe4RbsLADYogb/lpX2Gqk51L2JG8Easnj519qmnfule6TfddBN4iczyiSAxDCHpLZN2Yxqko6NdG93+VJ0ieiGUt3JhFRtEdpoBe+P/whApNP2z8/IdYKUvBuTm5hYBOi83HATRdKnZtIB5GhQM/RJBKZNTo/0DPXrELER2nKgnmCi4/JIRhqxFPSQXozWvkpgcAFIBcJkoYloO5AZQQNOw0D4DphLzc/Os8CksDgsxMaknb9Ib4JIdO3bUxnfTNdOTEw8/8jNnQGk0m4uTayx2yLES4ckf/QKTO+vS0ILNNsRnJCyQMbzy0ouPPvzzUHpKmtrJKWsOcMovLisqLtm2a5cpyvLKKp5I3aTDYUZ6cn52enVVmZWjeu8Mvr2jzYArPPHsGuzvffHFFyXWFQe4lujunbsieYnG06HKIKXB2Gc+8xk2LzEn4iPYA0tdbTV52T9l6W1KoO3CBkRsTT3ZeT2GmZaHBNEnpAjOAnmrTaDqFXXbBIwrfXvJTBxZ4EcXzG90LPS6mY2NMRhTxG2338rmDWOLAHyK7jR62Ia3tNa4pkFdnp2Tp/Wmb6Zu18B9+OFHGQYkqyu1NtrqaqqmnR++MH/zLfs5mm6AVqDiwI4IpTCwJ5/85W233YKgcUEMi58Ep1azu/z9H//xHz3xnMPSLwTEoshmUGDefFCn9/Dhw7TgCePnfe4hjBNhHKq66Pp7utYe/tM//RMLVzfp2MhO3eIDC1SgTcbE5/LKwptyEVcWMEnN+/gRzrkPWcRnVfvPf/5zZuwGV97iU3cC/8otKsxXZ2RkhmHRAwde02f76Mc+Hqvdk0WAumUrqObttw9hb+OmLRYFDfR0rGlsWFYf+pZUTNKnn/4VLUdzQeyTjniTJ4gYGgPyyZMnBD0YshkdrYryUj2Hq67aSuPvxfo8gGUbOqXemkukd/EE/lftvIobIqgzoItifOripcsWrtsBmJWbl5IcjhM5/O7huPhFsNA7qelCRiAIdNhjw/h0jyXmTSKcsC6WDE8IA5bZKIJRsTQP5eV9MuLWn2fPX4SMXHBw7AvDVv15VbdsufpOh4ek47G9OuycQqOZVRQgIwbyGvu2Wa8buSTwy4QQkQY4IhX2RE6WjwLXID5OBCiOgEPLzHgNhgkoQCHrTxaCczwL5lKCGgUKlVcupBTEJKQ3AqNENWYUr1ggiOAmwCqL4EQjMlISM4/xYYMvF3fs2M60KEhBBDx37sLVV+8FLB6U6wnTivxCRo0rFggNpJSlXPcYQBy3kIQ87WNAry8hXls5bLcQ1iRGja+RKLpHmaEybK0L0QlLYheUBBZxI7JhUKBJCmTT00NlRGR6YTPkMt4iMFIZAdEkkedYYhtoGjHEG2P2nBc8+/xzIsyyFSv4rCIwDHBaQJAlY9ITdDZu3ER90ixfbmN3ulYTlvAGVXLJKKpHmgWLJ7xDRipmlhonvb19CkWZdtgkriSmLLbNGRGJbANBCCuC+OiTEQN0hAEZpSc+uSBGKdIg6OHU+ITPZQCBgCWlIXgCU4tUeBElgEwbfJPlc38FRcYspAAQBcggwt6Ugr4RcIUau8EVGN8+dKS4MINa9f1kJxSupMcAjSuIIDKKYLxDDwEF0ymqAwx7a7CSRoCD2/TMEBAyMrOkgaQn0mDGLyJUGWzPBH1sbwyUtP0VV15aZjJHeoBIg21LbQ1he6JQbHuouEgWNRq0PYksASbML/4//vlvFMnHtMbe912q2Ic5KIacUU1/4YKFGRtxeebUqZOnLVkpMivkDARhJTcnH6wKU7BuHNKMGOtMkDFxhvDNhSlrmJLspvWW+ZqfKsjLQVmfgvA+w4SbO+64nZ84ihp2JnIISTZcQR8p3HsuDBEbcYDimxnBiw15ZThKMjygj221L3Ei+DyhRVzhh62QzpgiRKDDLoUY/CvFRQoEJWAWcuGNgo2tlpcUG9TnElRbXFQqI+J40JNT3yDi1RNPPEXBRACxDoCUoqoBNsN71s8ZR1Ri5Gl0CRbQS28kni8xC/CK+DCvCVuiU/VieDU2orrKnLuILEqyTsVtv2qrtoJjH+lFm8n8ia20egq2mXri3oCEvRZmLdwTpKTUHtlnZRR5yYhnfQbDe9oExjColSyEZUAuIhidAynG4EYL2h+ivGT+dPPFL35Rds0IBNk9PVoCxC3VT3KxaTrCMO3QCI2DguIYImxpBOBCEADVo35pFv4KpVD4hIg5PYEN96IbL7KT4UpLu7MCgCalIpQliGBGt0cujGGeULSgUAQrqqpFEH0D6EUGgwd55QIyRbsRkdmJh647b79NcS6y4J+RsBZxgQOrn7SbpQGRt1SDQw4sr9Optah0iQ8detu6eRV52NI9bEtxp2MlOEi03dPQQl6OIBL2EmgyRkQwyYqUxZidlssyIw9CH+B61+fPh46c2AcZv5CUUSc84o1QBJcLn04zP3joDUtc7DXfsmWTLcgWuIMdLNyBsdGyUUkVlYcaRiYHJmdmbdcxBwYKoTUM3LZ2GGS5++57Dh965+zZ88zM8aZEVpBhvtY2x4lMMGwWiw10KA6GGGCxgjLiEI5cydtD7xw0kE5TzEMWWJkwjVRDHIGeslqutLqhYmqyT3F8atLxlxKzW/UyxbGBN197zWlxvPWrX/tvJjo7O1vtHtEW139AXGJoiEIsPKrRyY6m3ZDAYR74h+d//L/fHB7sNYUcTihfip93OJmvHGbmWFe2Y/duJ6xVVFYbRHdS5FsHw9lHC3PTBdmp586evG3/LYqwkInpjgwNszFwcYrnn32G1nBIm6oBAxNVFZX+JKA4pi8BE85Fj1bbM9FIs/xdtYQfjGVmpGmaA0etAxBGLjtNOfKIy4sG7I2jMQ9xnJtY0yKMaInSlPBNRvbACxrXrIPkb/3Wb//gBz/QesMVwblYTm4e6xUDpdSk1lxOi83FCxSsAlmG4bhugU7LCc6nTh535seqhrVWptl3YueoeQYdUVomy8oVK06cOGakSSdzWX1YEWuGUCOJgNoHRPaEHg1xSawK1Kr23EJ/CZguMQvy8//sz/4MgKIceV26KzTII1iRP4mPgux/8iffWLOmDqTMiesBHGicBScoY1sHG6qeGOIWUT/2sY9RvdlttYBXCKrUBW2GobnDg6RUNZiOIDgwaScqC9q6+pSi3YkT0cy9liLtsGeXGxeyukgNq1bpAJw+c45EVrL97u/+rkWbEDBkKaY5pUDGDz44ygB27NzttIy0pDjL8Hgx3VEuLfAyuuYImFSzgSWqmGMqm40FpbC0nUZEG6r0ZRINfbuBuLwj1YhsxokjF+UXcEMraoQmsPO1bdu2tLS36dUcPHh467btBv4np6YNmY+OT/vGnLXEztnr6ulauWq5QpkidTMSgpCXRvDM2cFLBH4EUgkiU8ehUs6e79i5vVFZ7M30qZYowM3GSOMGTdBxqyhIQrut3cah0G8METIlDOjqk1Axm4OqBOyByxMWLOoFCDAYRdMO55KSUAweq1J6zsDsX0JQtEEBnoqmGmYcxTQdQnYiF3UDkNdTrhsM07VKyiul+EXEW74TycjGiI9DJ0DwOPde/YaCQCe6esihFCESYhgd/MxN/ecGXPcK5arSgMI9C8SeUiCpaI6AGTUjwcEefCG2+R4pkDIegqCMB3/iR17H5xfk5/oLNd6hCDGBm8vIF0iEGbLQGkCkN6zgLQthGJocjIeNgREPmMfV8PCINAICp0Az6D0rS0uAghCEEt6ACQHVuixmjXgEZoiAoA0/1g/TmUKR5RG4UiKszLXiX2JsJCenSEARJSXFPvSp1lMDgisSStHKlcANiOBv5c9vBL9wIXSNMCwPDjV1vIpKFwSYk1wSEEFxAgXAUPAwQo8xowxArBOELjxRircusK9ZsUrpBGR1jkNlRVr/DIkg8FF1GmtTImHJIgspiIkOzAEuaKOvROyho9UnjBCfNjU5VBnGZMFOUuWyGaYrUKNAd5Fd4U0C96AmphkPrGJDk8Z4Jy9gbPh0GA+TtoMLM4hghmO6ISkk8eOy8scTCYx66GPxGuvmCRuq0XAKeZ/OjFCJmnsZxT0FAVMWTRfyWnLirSwgxTP7TPrudx5U64ibDatWO1o4apoozFjXusbVkHIij4+yOGTUaFxZSVFSSjrSMcQnjF9GR71qxzhCFVHqMaHpErwUbFXPrp3brL12EUM4D/MFCVWA3rp5CwlTEuJ7u7p++qMfwy4s9s0tcPySrVU4xij0nSTg0Ayeef5cWCcNx6zMcAqvBJlWUWZm9/b1GNAVlQAKdFpxrwIQWQANR5B5yFFhDRFSsHWgEw2TqnlFRwC5B1NU2TAINmcze1dBvr25uCZChL7EwrE1nCKUikTF9slPflKthiDBN23dJCDySWWpqIxVG14yCgUxLOEc5UhhGGZt/T3OorQtIdsKftqS0QT9F7/4+V/84pFXXnnd2tPHnnjcF0/VZJTy0A+/rw3E+NatDVX+mdPnzAWnpWZZaGedDMs/dvSESGqy1XZMS2skOH7ijEYAPvVxafnll18WeriZ0ulRCGA6DAJxcrl38C97xScwFWTonaHAEwJGy+TlGLSgelNL8QpDvUGbW7eqMAQmpNQKkBQvRAo0aUGsITJhJVCQ7OvWreeBvJKl4iEkm57w0ThlQbXNqTktYZuyTxG98frb6Bz94IQv0uA5NTmRWaLjW634d37LJLXMzehVppYW67ANDatuHKpt9rOOA5PJPbEMxjc0rGRynEQCgmijW2CtJAGR2eOc+FSAMbGbaLRJp/TIQmifFAyGz4sIGso+nED2rVs36wC88cZr77xzyK4MPUclajdob/l1DAM1oSO7QR/NPwK6Z2bnzp9hCaamISAk6TZgwIcFszNz0lLSVOrtU9N9Pb2wojVfCHT0BzP2hO6wJ9g1X77iRIKrrtqhPecMImfUrl7dGOEMT51DtNg8kVmCb5CQ1Fo1nXZRnpjUAR/Wq7FiBOvZZ5/ZuXN3WzsbNve6yPiJZvYTQR1LrApwmEFQmOY+0GASPIKAiqBldR6CRLNYXLDr6Oq2cJEJ8cEQlGOLSo0Ha1Nmp4dhJOd++oyRlrSPBNKmKistI+zQ4imy+3roQF+ZFfnQpq/+vr7ly+ucQSl8mdcSGJRITKVLwBKADEDY+lPoUMMxGyGovKSABrAZhvhFA/MAU5MSHD546Pobb4KnHuM1113f3tWrTVNYkNty+ezG9atnZqcvXDzP3jCPLCmwhLIelBVcEDOIdf7cxYryKpNDNMiqhW8NKelxxYYNvQOKmjxxqX5wiOcL587r0K5fF76ShjL+OZT4xmDQJzuTE2msZTN162tQWv+8ifNqSWzdehUBKY6JircqSGFNLh5EL+RlnO0dnbrNktkFLpRRCqNRLgQYAAt3jxMLdSJPtICEv1dWVZtSgIAOgLNfJw0KOPPEcvbh4bGxudrq/xwrYQam6h3rTmuyp6SHwcsnfvkUwTdu2qQrItA1NK45cfqUOqWkvCw7I/PHP/4x85CMGRNBexdvGBNeBBnhDjg413b3HU+r9vma5+yKgTEzmgUjSGFljNOv6KqNaAmWYW/wsgeuSkGcgtLZpD8ZIUNywwCk4cKK1npACsHvfe97YLHECA5CtPCFN3lFFe5JFgp1z8Z0gLGBPTXd6jVhaa/hlbcPHaYmR+HhamXDGqGVN4UeS4pGbfWsT0XwzSvhgyemgGwD4DXKFXDYvE49dSuXjDixB5EB9JvJGhzUtvPEjaa2msLxWba32Y2rCWjuC/PVFZUKSoxPsu6/uLCoo6uTUNL73oimgCw0kpmVvRjDKiszdX5xobO7x5Yq4ESNaWbPeLDNH92zOgSxBwHmjUMCYtKfLAqTBXk8JlTexnSAIEhiSUaY8HSqhHBlda2+0Hg4aHgQZWXpphJKE5ASg+mHy4nsRqntFtsg0CmFHfoVTgEu/OJHKZSrWlEuOt5SAdwolN2yH8aAebhhwBMMMBWk2SQRaEQa2LJh+EOSx3nI9pDVSMUzrhBXMXmCAeyxw/LysLkZdHzKExTcU30w75QUTQ4FsQcZ/ak4vOmNwwc/XuEQ87hFXF7QRW1W6sIVX8aPG8VEb1FQisQuspCIOGi68O8iL0yoNTJCfEJGEcybhZCCy9OmaBNpRJ/37rvvpDstOP09VYlXBNf7bmtrjxlPlzVjvhuoFjAWIJ4nJiUMjwx1dnX4TjO5YomLzV/Cs7e3n1B0Z5xLmLV7zXRx9BGb6KF6gdIxaxMWnuUVeUAhLxidlGBGWqtPTaduhViEWwyfMMAa/QnbSDvMj7AeElzsQkR0AhrxqQlQ8HSxySho0MvcXNiujbLSQSejG/iwFr/u5QIaxjTzwK6FKQiYlOCes2GKdNoRmmBRGTgCVHp6MSLlfM/FpQUr0AcG+y13x3BpWYlF74QSGaibrtgSL6Nf3QAjaL7dHGsbFCiLWmlZ0SpusRpZbEeNCmkUASK4EYovwIH4HlZn5zADAKLgS8Cy2F+kFBfDQM2vBf/gYtI4VwrZszLSPDfwpPeiDRps21nUsc2ZrM4opt13E5Pjaelhh7eUTBR9/OuNS+wy5gUTg2Wu0F2mAF4E/braGqjBWt0zMVajSDnVTFdt3cbbWUZ8YpK1s8ja1G4owXCSHRJBRU4LjTkn6Fmnhh2asjsOBwqaPRxJwVPiRDhcaUprzAGD1viuadhn7+Pzzz8PtaUjYTlKUX6JyoPmIr1iBrKea1+yA0DAjkqYAmR5xclTJ7zV/vZrXbsETEHbVCTCM6wjK4EpCqHTVlWJN7LIzucZNIOLWsOQArHSxReFiokmLk4cP6aTo9XF/aiQ06qrlG7QRW2HPdmNmO7fv9+9ysDAP/Yir0bQML/xMHOagrW+JitnfIKCX216ZJubLqkqtu3YrilmdNNza0kl+73f+z1V0U9+9lNyKfdnP/uZ4Pvx337gV08/DYc777z7phv3x8cl+9wSRR46+M6mTVtMUIyNTl1uah7oH4GeyTsD1d29HayWgEzEcD7wcchtFEdBsUAUfjxxgcsaQVPttElGVktx+gAk8korH3SYdwMEPV06hTajxDDK0GNSekdwVk/TDtvVG3bPRBSHGrgQl4WxMgaiScP2TLMojuezQCpmNmwJ/7t371KXS4l/GGJSOwAyFE19uuP+NMBGWSxZQapeJ9hKLAt/Q5nKUFYcdRBKBHQPZxK5ujo6JYOAQpUovEbhBvOUKApDTwuMgJJRsXJ9nNVJ6mbANINZiMP10zOS33v3A0vYfCjzSnOT8WxfajPalZGZ0tx0OeIEWYIAkIPQKQsnuD9JwZNJhAd7ugyzGXbRZ7M/lRTsSjUJW1CzFjasM4YNlZAI4kaHraqyjiXYh+YYkBDyUtLsb8etoVw8aAjJq9AP3j9qq3bDmvUGyzFAkISEMGBg6ydMNKqefPJxNsYjzITV1Vdy7cyssLSJRqjDcwygAxbaByBUBWJ+IUpgFZM2jSkqKazwtCG4XS0io3BpbhYdAjIMRqJQKgA+ca5caiqrrPCRcwcEGOlkJ8ILleXkWJIbxnSlF5v1AUR6xwn5EykmxNJUaTAEAqtQuoegJixU3bNPdqsxbRO/MRzLwM1Rah7FPko+74tjTLF+eapvcaxbv/Gej9z77//+78Ojo1FriZ2AF0SAIj4b9qewIGh4xaigIaWCZpZCmBYu+D79GgvHPG3ChPHgDbbAYecYY6VqiJti61tijelQ2SuFt0ogJW/C1aZNG5iimQREEGc5whfQ3GshkQtX+g/UYVEQ4kphJDTOlh5/4kkr1G+88QYujwHzuuMTY17hXy4TkkwL+AqVQCjQdtT87ejsPnbyRFM4TD3NijcF6eRYoXv+7OnklLgNm7Z4oMFh4QKWKIWfchAiGF9HjdlojpsHhw8LoX5q4u8iCQ8FlFBJCqGD7rSVvTUSYT0ep2MV2ussQZMJTRYCCsqFiWRqYnSYHHCoGGVzocYFODupIw+97bbbJFNV44rG5SIsuERdRGT0XGSQnmoeeugh8lKQKlBZ7AfPGJCGFfkTMkokr36ROb3333+X4syWIGXqjEQY3nf1HusSuUBGVo5c2MYb20PnhV//yoCXJr0OGFXSL7tjM4yH7CKJe1ncE5NdkdSSKKpRZxFKj8jwB73ccksYeZELP8hClQ0A/0LswADZmYqL9h1LimFHu5SVVzj0ZWxkzNCYya5woFZKCmXpvTA84hME8y44IEt8KNEOPiPxFQEByVgOJtUR6MMKqsIO3IRB5ocsakePnqitrUpPD5+RwQCatICCAZFY6CZTuLxyeaIspOCkXJgzBjwI3fQFCrB4gg0upUuAJWm0gdzQpvoaUJJhHmP+pA48RK1/7EmGAgAlC+2RWHUjAT1KiStlSUZY0jEb+pIGSykpyXzZRXAC4tNQiZFspcBcYoW6Z6jQRhCe0kAAe56zLskIiG30vdL+1qRDnCxaIChIiWGcR9GJoUJMDMEw0JCSXZyEg2oFBcli7TNduzEAygtYXhbJS2SA4B9BLQoTvwQkEWbQFAeEd6+ULlZIjD3VLlKyCxp5+bleYVL09iVyWbDNnLRKRAmJvT127ATGbrjhBnOD7ByHHqKsZlcukVkmuGTEG5tUHAawzV8c6YlbFwQ8xpVkyFoyJK9kKJuckoXUzDLWFkhDBMKgVtsyOQ4lOolm6PgFF8sBF5BjM0BhaJ9EBI84oRqKxhIMseeCubxJ8QlmXJHFm3JRUJmQHdugJq9X7Hk2jBCFgyVYJrKMxCscuse8UuRVmQqAQMOY2k16IcVzBRkuICB4MS8NWRREy240ThiM0IcykCGpaERoBD55BYXsVhFYXYoP68/Hw0c5g4UzA0XQPtHcuORlS1AKZ+ZlOCsYqfAdXuBAjGNiG1btnaGqiqwLSwrFP2aMNSGCsphj9kZgwUOw4S1r6qAGWerJyQ47Pk2KKWylZaZDA87fANA2350ZGjBYopsSl5DoY48xigb1wmg/jtWweFL3y+hGlxFN8iP1wXvvAJ0LY4XKMeFT57pwVLh23RohPGCRGb76dPL4CfoYHZnglhSAOTWcmhVjLghyb4aoCCCiBg5FGASVS+3rFXN3yAkglA4pQorRfiWAMhMRBSwqQFYanNAfAuCTBtseAlTR+Iw8wZh0YtzSpYvnVe3GzIQ28Cmdhx98+7AWjPE5tmXRjgRKGRwemp2f1wiQWChHTVCjRektKsUDlURLVLW3KMbcQlF+XnPLZdsuhcLF+ND+Y16aoWsa10GA1h5++OETp0/jh8gfvfc+MwCHDx00Frx7967t23f44Osbb7zZ09NNwbW1NbpeTU2XTp8+w0J27tzluPeevl5QMyM8aHwQlgOgRnAlquSwzQqBg1tvS8vKvAKgC+xgYU8sWC9FPWRRAY2zTjpCkxlcutQEN1YIN2SZIEVoqdMOwdH3HH2Ca7PGKIdJLooAvsaZeN3aGsBnA3RtjEa5ETPWzGsfWs9qX6z4SLniqV+adVm/hCC4tJOYu2YN4sYmDXXMzFl2P4Ql/EfKwq0SCSg0eOU+Vm4r3k4cO46O2EGDEmBeX5Tn83MXvlgdz8SVvLyjsChf31YQUwFZNGSRG9YrKsonJiaN5Ak1Z86cXr58hb3f5gcANTlmgXLoj7FzUxB+w6yWT8YOBvYgINazNxLpBug7JyemDQ0OM0jtTvBqxCgU8uCCM374o4dusIcrm+1YMiX29fUOD4+Ij6oxo5XAV9cqSCneAlargrPm5NlOGjZSswpyKQLaiOPwwe9+j4zCExDYqtW3nhuKVhZBWL4sQHaJffQrJeOPFC3wUY1xfrG7oLjI8npnU/R0Cl5z5jR4qvaROgxZuTTo6YVJDAwZuhh0uGRxcYl9umYADJAYxXTZ/GUsY9+u7c4IGurvPHv21Ib1axlSeka2cSlBgPclJYY5ZQLSo14APh1bBC5cub71rW85UiBpcWZpcSF80Dw+wYkp9lrZcpaYmja/EG/kbc8111fW1heXlJWUlb/y6uu/fvqx3VsbU5MXnXkPEJENn+OjKrZh0c+fVpQqS1jHgJEC8XSgv5eDGMJgolFXjZh8nE1GVRQv5hT4oXqRIX4pwcp1IyAeIkL1xhfQ1F+iFIbpgbw87sCrr1y97xo7yqTkdHA2jApkMU2U08RER7UqctI4EFCzKskB8Pfee68n7IrZ8ILBoQFNZLWUtrjGN3s2+iUaoInaxk3rlfja62+ePd80MDhiZMpOYy1dq8KE4YG+Hgd6bN60wfZoE9ANa1aZeTAVzVUhb6qBMXA9NsmDtBfFKJUfY6ZobBtxGBkYFAT0Ei180vxlOeryn/zkJ/oM0rMoBsMlQUdqhuqCM8AlZt4K8oT5cVKWI3ZBG9sMW5fDiWuf/ey9cBP/2aosCKop3JDOEyqI4lX0RBCjJvMMRBZMOJRCMczX8C+YKFGsYJmeo2Po3abtzZs3FhQV60qZPSPX4PAIBmzzxecbb7+tFJ9K5UqN69ZrALVevrRl66aJ8fCxCC6jY2NE0oiJVZ1w0JajKaqUix5PnjweyXvttdeI+V/72tfI+4//8Pc0aGmBVqkBEi4pEkJ7bjo0U0wWOgdsxCFbQmhSEuimZuekLCgsHRs3pGvMLjM+IZlhDA+NllaUm84aGh4AHcS4FTuELTGx4WIhkRl4Agc2Lxm0GbaLWcKBLbEr1qtdTqeIAJnBSyx7fGLY3iO7XHaPEBl60DbVRkxjz4oetBI4dnQ9HMyLEpxbsU+/noAdQblIxFyZMROFniiEQ/MbDAzbkgENG0INVvHmYRSoRTCJcS6jh5pTzJJ2MCYmKBpZ4rAc9okfZcmIVCzcDfFKT/gp0aQUZPAfNbjlYhjs2SuTOWLLNXv24pM66AL4WCI4mgwDcWagWlT1Q1UMB7UisIe+LFAiHWEpndH6E5NBs7Ff2UV6HwLT+YYzykG5//WpTYXyEfwgdeHCZScLqIsR0UlxBBy29eQdsSqj/iye3377IMHZIfpwILttgJaUTs85bznMrYFLOxlQGvm4FXhBZ95YT48IerzLl610lBOgNEsoi83HEoQ1vXgwqQ4W4iiaICTFsBUTZWVmp0L3zBNfSqEm8rEKkRngiiMCq8ChQmNqCuu73LOKSE0QExMIAih88iCqcfFH1HTYlC49ZPySDlcuiVmj1jZJYQVSN86v9wmq0ydP0YtX6ijJwOIgIIaB7d7e0IaBPIiQRbOwuIBcpMa/rhQbdvi+NCdPnqY1W//ZHub5hWMYqmsqVbLwVCI+aRzzWKU4vHEcgUUk13FCk5gymgsHDh7YmEhCImTZkpk0i7UGh8KeeAajRFrwfGx0BErMj4FpOOPH/+nOShY3ltBLqRS5MMALJqYm7AoQRuBMm0iNDIfvE6vNPVQ+nIGDvV079wiq8VWFGeSPacJB/VOAYFLQqa2upAanilpMkkGxyckCru38Pg5h2R+jV0PAHVJRP29qMszcGbVRjLFnDMFXFJubmYqdAh5mczyxDMuRjmRG1rCQtoaiWYxyrbXlwBrTY6OhxwYaEZMfyigNyJTFklT8tBh5bwgxiSFOeSvvo48+qghZeKAE7vFJK3pm1ODelZWRTrUIko62kIKyP8HHgoUkgFIh+JRrHNcUEriID27KpWmmKRAYITOYxMgo0gocPKhONmzaKBb/6te/RhYOFoxqTSKLIAFJjUl6xaGCRFXnRVy1ZbO9KXZnulY0rIIgJbH79o4uBJfigjjvHTliXQ2tpyQmfe1PvpqUmKjqVfEbAFCPsjbdDHUbKWTxi0MeS61MUNuGLJgnNfvWavnmN7+JN7aCeaaDPgQYBLiwav5MwA3cxJbB+cU2rhixEICguEMKD5EilD0azEuJ8gIBZeblT/UZTlDGhoIUh752gO6NJ+5R5jzs5NKli6j5iKbWiSYyP6dNDLN3K1ump9QNYRcpDhkAPYKUGVA9LZguF+5hTjQNi+KyUhMgtpbCH01sSE+PdKS5TLOKFgs8wZLGBEjPnDodRTH3HgJQAuN8HsrFabk6ViFMKZa6XXPN1WHgP8VKHh10E5HW8Ay4F3bFRJuojFtrqBFNux9vvsqjDtP1YkIqSoFV3x5Zw4RQlRFZ1k5qTUBkC/KKZ6bDtKMnUHIjLDJUAMJKjAMy8akbGnTnKDFaQMrwOcwlxrAVXl4Jc5RuBw6jFYCcY2OZUHfvoF4i43ehzxrpS3yBuQiokrOmxeg7gg888IC3P/zBjzzXVqNKbSZaoGLg+JVLMhc8EZHYgYPmowo150tKpJmeVNmYkByhHSuYG9eu5pXksvCGLMwDYj6i1Nre0tXTn5XtcN5VDuhMTDLPO+dsXPBsWrdmeNBQZtvwUH9tVfh0a3FphYETxkZNuhmgAyzpVGA4VM0wUdlVYw8++GBlRUmKDxrHLZi6tPp/Zn5hRicgMTU5LdOXzhNT0nMKinfs2WcnQEZOfnJK2puvvdh+6fjdd96s20YSVR0+O9rCWgtos/z333mXRjgdkCmXImqqK4VUsZtTYEAuXk+/YOF3cpEdPwwPqy+99NKdt9+FW/0iRgVz0DkZ2UVN7tVrjJCF06OGu7mCo0fCsAilK9eWSrrQDjCpeOrkGdFs27btGtOf+9znInsQFhrXrtPcZ/86xhxZ0Sa1GYN1YvwLe9gwO6/pgBmrwzHj+M5D777nbAkHJU2Mz+gi4cEgDuMpzM9dvXqlD9EXFOYYd3KGRv/gMEcjzne+8x31h2FCi3xYhQ45M9M1AgLmiabDySBXLlv+2x//+Isvvohb8Yo96L4yA0ukGLPGFlX60xSuCQRsUxxJ3WDeL69EnBawLZIj4iHoGOT/+l//67Of/azqUveDXIh4C3ZFiEja8SwQXNyc+LILXzi0MUML0nMGzP6JT4+KALJYwXgECurmcXi2s3NxYU43oelKM65MiSB+8PA7RPjtjz8g/ugAMGMLL4UjQ2N88OrdO61m9J149ikyU9aWLVsdvAvw2EADnwjLi1mOiKo5d/fddxtvpgtvzfr+j//xP266MWwd8Q2KELJiH9rTCcdtd4eqr3P3VYHymQtnojaB6sS5Xn41EgYGh3yXwDDf+x8c0/KrW74i1vEetrGQvMDBKpExwCrAyEkZJ+v1XH3kuVKoA2J8Sp0FUs0mfIJX65890yxdqE994m/Hjk14sIqEMTBg7q8DgHPSiZxtHWGxKA+ltbHJCQkg4NKrVNWCUdQCsuIoS7m0gxM9Ww19ilM0ddCXz33i1itlYQnbTB0dDsh4JKNxoqEgsNCyvJiPfkkdaZaYmKEjLsZPKZ26SY1b8y10wfaQEt+kxBWUiOAt9n4DlyqAZ+VmZuEBRFLybnIpQhaFIqjaVaW6gQbcdG+ISRDJmBnolAtGDCiCQfkTtriCITGNf9oEvGxZvSyMR+l49lxZUmJAKXDAGF/WyGE/aFpNiiAEbOIHlFaKrv6xY8eJrGsqMfrEsfxMBdQ32CPIoOOt8SayaG6hr/+CvtYXj0NZFjusikosDepp7Wj3i1vxUHoMwNnYLiUyRXiqSqjAc8f7ZGWlC2iklt44gjTOZyKjc+HQhJjLc3QgYFWYyh04AoXYTr8aFaHo0VFkaZbBUzTKnmAYdPBGQXFEAFFnp2kui3nCCVcKhYPEbsAisTBuuPnVVw54yIBfffUVNypxyVDAW1tbK6EwwGAIhUhqehieQxnsOgAUcfHCJaSsXAGLNS+S4QQF6z/N/5shVIkLKRQkMNICsgxPxEYN/wYOMCMcUaVL/5xFSc+EUtLShUTFMRvb0vwmOSkzOXS6xF6XjIWxoXPuCZZw6E9suht04ejqK1eWFueFLEJF3bOammqjn2IkcTzUnCDFqKounJcddlpqnyDOFCWwYATCSTiWCNOEtMSVNVvur3s1PT7mG5ApSQkCsXHu0dGRez5091O/fHp4fMKXvV26MbEF5MbRwkTbTGJYq2QqILb0eTy2WC6OQedmZ2Ja2d6GlVixtSXQd5yfQz/VlITs6+32awl1kG8pfMeENfBndgxo4ZvDy8gf4Bh5FA1BgeNZvCUeEYnXqXofeeQREUdKQwj0yq84JN/mGIyMq4+Nhaa5vJ5IyTHkJTWPQhOfcOczbliVCs/pqgatPOQDRAgoxcer7y2tVOcZ1vLKhueoUhS8CPKVr3xFfaYCtthUg089IW7iBFeSqd3ZEFNQrhkGTS4H+2zfuUM15ivLJGJkirbVTDLdAFiRhY899KMfGTH+8z//xv333nftNdcb6n7xhZdbW9oN5NtV4ws+JDIGIK8dAib72Ad+lmKb/1gDSRVN/V/4whewDXlvDX7Alg+AF0uczUpVrVVCgR3apBagscozPVfzUQ2TkMWfuGLoEht+ENbBqyAMey4LwEHqitlf2CYlDaNkzXoCTEgni77VQ0rXM4xN4/TLrlxvUdOSZi9WJ4sg9EuECqtiy61Kty62y7zHwYNvqyaZhPaYOo4baFhGX77kMFyLOtCJ6jA8i0osSjThfsEdM8PpdTFjjiMFL9BwAQL2qEwFo/5WKK15KK91hC+++Pz6DWGYwYY/i7l14Ti1bRynT5+sCRPiqYbijL1NTOoa2XAWqgo+Lz1nM42GQ0P1MNHr85CDQACrcHPpSc7PLlVXhhUa9oV51RU7v8JmNN/XYRvCopMLCLJv717VFTrii/XopKAIJ4QYs8Sztpe6Z2Q0bL1QibBYJq2L4qvh84vWOHXTKWHFDuA7uRnmNrzRyz33fEiUdI+ZN998A9Y66nYJMxteo8XGBUAkO9AEEZzzFO6DPm4tNFTlMGBnvZDOEvDsrLjpyXDKIXitktIMCVFiIVTYmjVZOZm+70uD+YUlTZebOXJnd29N7bLgGnNzwhn18WKscuFwSNjCLPX9V1n8KQy/4UHRHrJVZN3gMGpHRoInxC9ayRwO3rBsS9lLcYuxo6+LfMpgJJw/k1tQHJ/sSxE5Flw93h/G7RLjwrACtCOpjX0wCRGJpWm51tcvU/OJkWDvaG8lnVeWfPzlX/6lX7GFrUYGRgq2yndIhCWxiBWpbvHs+9rYk7ggt4ClGXaBjLqZnVxpvuxX3GC6IVLHRs4EKyZPIzRLrT7tSXwcqpaUpSADCgxDn4E34YeDg8VzPMurXKRk4RQULQH72bBxncpBxa/o1JRM7WezuRVVZfY32Y7FCJkHzn28DBrULJnwkpya8h/f+Tay6zdueOSxRy1Gt9OJsxu3BgXRfO7t0e89JlCUFIXDzTiv59imSuW+8tqx//2df5AdzphkWhrcWGVI6kuFYlJBEkdIekXLqD377LPGyPnsL37xCyZnzQwK2twk0oy2ukkpeiCiHIJslc8K1OIb+wnCbtgASfTZNuIuOLjQl9FzlTHj0e4Xr0ghyknf0hy6DdLA4cTxU/w3OTXt61//upArwNIsVo8fOykcTc340NsteDawFVt0Fsae0MEMX2AqrML4n19KgQMrtWcAt7byo/8Hf/AHRFDVQpve0SE1VQJcDwSG2GCNXJtT6HxbRMyQSKGVI1ksQmYYktCi9UWcqsowiy7gCBGaKaiREUFBGEtyAZkKYO4GIJ7jAR1OJBlI4cbY2DnrIhHYMaxSYMaY37dvuwRoTkyFatF8lJEg3s5grAeOrd4Ki91nl8LyegRd6NOaag5LGCCXXwR4AdGonlyGcgRbhXoifmIA57SsXLqgF2bGknVLLCGDJIaJwLCpmCOTSE0EXu6jdMWxLjdSKsVDzMgiAX74DgBVIkpUNMGlJDiQsSoNTIgMHy4sl0KBgILicB4RUaJcWIKSvP6UizHgR0a8EVZKmCOLSISD4iJYFOQJCtKQjhI1WN17AgEGjAIe1NQeKjfSF8sXuv1paFIWlDFPHRcvNEH10KF3tC+jCqsgv4iFYw8zOn20BQRQYMBFCsQ9wTn+/YkrYlrCyiyBY0DHIlmHNOA8Pz+MjtGFe0qRkpX65Rc48cuKtGeSkpcWZ8KAHfqqiYuXLlpE5K2FsmDBP9EMFtOIapGMEpKOxjmsZgNWISYeRpWdP5kxJSoRhhzK9Du1RlJgOD8/nCEpjFAN5F3oS4BJT8yV8V+VrKkPp5lFGpGAsNhzAyWsAoQWtBf0oax5QhxoeCOglKjJqAiJrQHxC1V5acQeNlYXtXU1IDUVGC2dcnb1FBsAlzAemTq5mIf2D2WhGdbsVYRTE5ifP1vbzxInNy+fR0QgE5z4lRXltJOZHlaLKZFS7GFz48J5kcbG8LCWGO8Qi+y+4INW4cUKYh6hYe/rYdDAMHUwDNai6ahnDlWsxq9dZoQyOIl2jOaSpi8sbLWkMwdT+IKvRjAoHWWj8rQKUgQUi+FCD9YSiWg48IGP9CznGfteQRRMx31NzBFFajXTFnOhU7JoiDegszCPmi9cOp/1i1/8Avg0qmxowDQ6HF4rAjM93b2MQKAhMNk0EcRQMIFVV8ZzLVE44pm9pqal5Obk0Sh55OXYwoT7latWqHHB517fV3qx+PixI9K4guPZz+dokfwwmAcXEEvpnoCAs0zEKqtrrtlnvRWIJDDWix+eFrQebyA+hAZ0bJ1R8TCa3Pw820ZYuYfs1SAZJTFQ42RRaBD+dMK0dEmkWW8GRVuEF2E+Q/89K3t+aXHligZV8vKVK0SEnt7QIGY6u/bucfP88y80X2yyJsEYpI1ZaiAECYg3f1IKxnAIK7zB01hUQVGBzS5sCyd6+ZDhaSxeoX4VxAQBK8LW1tQVFOY3rF6NgkYkZ8OVeIq+zowEyGpkyMVkeXvMcGfZd3ZsxZdPozJEwBqcQxzzvJoudNmNyNi7jyWLDvVQBYJdu/YIXhoHMdlTOJuPc7l4kTrdDBIvQ4rqxSwG09c7oP1nC6bKrLqqVqDRKr146bwq2cbf7VftNPag2Q1z6/V8DUEHTssmxWr0tNSBvv4rLc2tzS15dpQuxa1dv85md4tVfFOT+Bp2DMNFapJSPf2CCCxckRGyBJplmX5JXViUJxkLNKIHT7MB3JsUggV8ongqRoTYd/GiSK6vnpoUJvX4nnhLiWLZhg3rWdTuPTsVoZLWaTEA7LIhobW1s7SkjG3Zf2k0gJkaADdZsLaxcWp62hPSeSu++jWH8vDDj9Ic3IDJDKAKXrCfOXMaqp/5vU/jORbg5vUu2MD77x0ZjA2RUgfvEDUMbGIG1NQXVRWQJw4wme7CfJznnW2dFs6wEYo9ffosP4tNj4YgnukrvumZZjyEJvT7BwftJ2PYXFUbBFbzsyFWDvT24EddZ8uBDJ7oHenU19VX6wYYfbdBq69/uG/A/sIC4liTtHff7pLi/ObLF69cOr9547qZ6XHBZ9tVuy1EJBGoExLDd0tYC4YVbfhfRs8x/3d/93f0khS3YNWOcQ34swQfQjd4Mb/gYFJjROk9A8N5hSVOBq2oqbv6upscymbrZHvTqZ72K5XlFboKOjAqDwNIZbHllZzIMBLXs2APYuxf7dvT3f3tb38LEBq4VGxsXp+f7zBaLAkFfEejXMv+r//6b4xYsz2fkREb2TmLClV1cQH29NxEHrjR3dnTp3Vdqaa3f8B4Xt9A/6SBp6nJ6kor0KwZzHvv/fdLikpFm7GRcZX06lUN33nwuwlx8XfefRcZua1C1R9UzwjtaRNqrBk9deY0LaulWPhXvvJ//NVf/XVahv3f537xyGOoz84Zo5m1ysX5SMaPOQKQN29cX2XT1PQ4Jh3/IWpl5mT/4KEfDttmcPNNvlnOs66/9jqI1tXUOkjUd3MPv/vOi8+/YDGkjysLBevWNNqj9vbbhz784Q+ZHfr1r3/1wAOfJKbRR6lN6NrtKq7yJlHTF05wCDew7Ny5m/GwQL7GpL/73e9+/etfZ0L8kWWK51zSK6oHNY974oknPvGJT+D5T//0Ty3Bkkx1I2oh8oMf/PCWW24SmNXi4hLflAVlNT2dAt8Nmog8+8yvBds//uM/1hIl7HPP/9oxkaKBWAoQ3FohaSxTS8Waaa1my5u//9APfbAvOTXdXikd1JoaJaZMjIYJB9GYU2tdc0y64HF8BMN4ELdHhsdq66p9hiu/ILeirDKvIHfLpq3mDxmPsuTQCPPlO009W3pEmLiFRcoaHhzRDmN7+Ozu7cG8Uw/0uJxzNTUzj6vurr6yisqS4rKRcS2JwZKiXEMVSkSB1C7CquYQUV/wdyYKKy0n0LFqh6kWFeVqYjJ15q1P4oYtSUM1mt1ippuVDQ2lxcUHD7/LW2dn5kHKow0Yo0OPaKamh2rXK1WkG43IhhUra8JBUqnABL406MNE0x9WtGl5mOEM2NKFcTGj8nSngYFzuoCJlLwb51gVOdVNnEUa6WElrtIvT1ScYM5USO3eW5f0/Euh7gUNCYhPOw7eueOOO0z5Mjl9aemjIhgGWaJ28IkTp7RfVeIqBQcdSMD+o5qlsLjIgkZ7nxyhzgssf0lISuzt7rHmMCcrWy0jeDJCTscrlU77alsUcrP/c9kFxjwho1d4K8i3mnzRQ15ANDi4EUul8VZ8s0yIpBTnOdidlSyvWhhxnVLtIlYqMYTr65dRHL1IoN7R2rHaMCHJ5pwwvhNDYxFK01NhIY32KHU4UgKf9tGBDj5MRdiprLEBvWp+aSErPcNqruKCQktt21ubmZRZLV+wu3j+vE1mxYWFC3ELpaVFhth921qXm3YwUFFRCWcRhj8adcY2EzJUxCn49cDAIN5AJFxTClZJhx9s4AFQfBx6TE7zAEShjZupqTmLc7Do1VM6muwTXOSK1UlhnYw6/bQldqNjA329NjQ7yF67XFlg5BGvv37Yxmw21tvbw7oiarSvkaAU9NmtIOAMSNESngi+//4R4R1j/BoP3NSydN0GhTJFPGheSinoIUiDkuGfhfvNyvGhrtzh0ZHzZ88ZKcjKyF7ZsCpq4hKTdAIIj55fCANkVEMu4kxOjJPRKdgUEeY+Z52QKXmAxVvVx+REmGGma20PuOFh0hF8SfFZGdbpLHa2d4nDCTZ1JSW6FyXmZuaVOz0xE+MhUyMzfmVVKbFZD2jIxj/9OTszRSrqoD9FklaQor+q8rJ1DQ2jw0Na4aolJw2ftygoLUOVfC52HrDjgbTSWJSugAljHYDM0AYLHURRjDMUFYTT4vTGsFhTW42yUM5tNOyCBRsjmQlnPmo5sR4DtwrNy833q5oXiBm6dcxULgSAz5R3cmwXpmMx6Uxjjq3gXIhhN5YeGRimPyuY9NLEZTKqsI1h4ER63SADz+AluOkIOPJ5aYBL3ypXixO0AKxQUi7KTtoBjgT0QWrRUHQ2bvTiiy8LHzStEWBrNXOnUWIqyBC7phLRNLZCk6i8fGho2J+GppTCIk0rU6cWrS0UFlDkFxRctX0bxxbs8ABAicmiYyqx3s7BNw8LymfO+PLAjdoiUfgIbjw9DR91mGDKVVh2qALDAmUN1tDC5mMaa2IfT2MultcrRaOfobuYnQpy2bI68ddb8gp2Oiq8xQVSnQ1KlMzSI4K4h3ZVjdZbAbPGmM0VpMObYVbLVS0dnpyY4EsffPAeAyx2wEpsX7Wl2JJZlzY3Hxa6aOWIUAjin8imJjT9Naw1iPEQM8Ipzc0wrh8OvjVw5ZNq9rPr5BTFDqsxyWB3yvsaEHC2IJ5XjE1M6aymZWYk+8y4BqwV4IkJp0+cPHvh/OTYpB1/dT5n6BPIegsh1oRTsZiTqIQHnqzNJM6qWTmkCCUOwh+TYFH3WA4X1Ux2bmgn2chOnJhZhkWf2IMMS2BQFGfy9NzZMFnBTjxRhx07fqSmsooxQLKurtaROKSLjapPshlFWDh03rcD7XCKj2+JbbusdvaoHYTZ2StXrdLon3AwsJgyM2NOgDYdhMWYsYpn3qQLpx6FJI0zZlEYe8q6+mqnoV/R4DPczzvspJRFiRjbtWs36SQWSgQXVhEZKnE0G0wlEWd0eOz0WcOfzQyyqjbU4m+8+bZOl7fp5nzD6cI6KYaFxrPzrFd2bqc1/2HEkUfnZOaQveliWANaWmQIdozv85EWyyqy02enw/dTi0vL09IzLNQxA8CVROHrrrl6355dVkCOjgx0tTVv27J5aMAU/1R1bd3EVGj6EzAlPWNs3F60HAPp9MWnbr/99o729qeeeuLN18OCXSeyJIVO/aLtv8Fy4o2qUrdFWguCZWJKxsxC/MTsQm5RWeOmLctXrgZCZWnxgRefS09L2dC4uvnKRYurvvXNf73+uqstZOJH+vlODYqLD6tWTp0557e3K+x3dzwu/2IY2hA+ZUiPeoYc59zZs5QC5Icf/rlmhGQ47+rphpaZUhzSRViXkJFx7AM2vJwRanMYq1y/fi1rzMjKTMnI9F3es6fPGC5a09BYW1+nK+tbjU6DqQ4CTorAuge6AaKoIXkn9cEcvAId0718qcnYDXu4fPGSL1AzTuP32pHLVy5bsXyVoY9fPPzIuXMX7rzzblsmeKtWrLWtzEYWH7Bz/AOd2g9m5IQSVQcW/Jy/1PWpBz7c3dd76viJ6268oay4pLCkWONAIy8vO+d//vM/OdBZo2F941qdB+tPHnnkF9dee31j4+of//inztXRstcEMZZmYMLWupdffnHTpi0aWLEYPu2b0FQJ2Ndee+Oee+7h1MLs++99INo4l0NFoNKlZfHBPZaMhugUs1U8O0ZdmBIBCDI41C8aY1iTiB0Kg4wHWZ3MqPPGLywm8cSnIfUY1Sn+dPad2QwREh3VvxDtnlMIES6YfOT++wxGaCqJk9q7//Zv3zxy9CgPTc8IPYpwVZaPT4699867wFdHUD2DVzfzArWGVdHC8oFXXlFVG3gqKS2YmzflmLdh3UYdgNWr1vzi4Z8xCZO6vOCll17CuVUxfoNCe3qEJtpRhQvyQhaWeGtVtZV+I0ZhGJh609BAeXkFeAU3q8Mt3BKjhCD+aIyARHIxA2wgKAKThYl6rhTmZ9uMGKjRD0PQseQdu3YrxdAlIo6+cK+JwxqHBgbtOiBj9HUzugCpX/TJ61KEmoU2GWR6Zsb6teuyc3McIqJ64kfoiIciKnndE5m8OKQR0GHJjfivlvdQoHPjElRpSjMr+gWp6BTaRLFN9uDXs+KPklEWt1IhEoQrYUwujGCPcqHhnsgCY1S7ab1p3skiMEJDemkAzjYiZqgAWfUO5H0nZGJ6yoCd/UuzU9PqmhJtGH2e+QWNY/OHhljHhkd8SpuRcHMDqURAHOCQgcn8TNhFIOR6ziC9Uor1ZmkpyYZ7BTdlARwb+rz41EAS4YUIg56MBzP2C6mYxqemN27YbGBOk1ENa8zRK/1DhqdaIXJMFWGzgbLIzsw8VBYbMJTjxnAIrFiOsG/hn2Q6AJ4Q0xPgVNVWmkCdmZ9OT01zaJhRKocTalivWdu4dk3juQvntfTcs4eiksLqutpTp05wRjCacxYVFactZ8k0TrBEI7zVACyl4L8y9lVaPiv2esIaCQsl4DMMv3LhxCu1GMSyszINH5hytnBBsIWkZH6VwlWZrma3lEqh0AHT+M1h8lOtZ67eQ604xnbq1JkNGxqVyGBgiYLscGNOoTaJnTun8QkiDRvpVSFgKSwKq8hoRNPIelpz3iytpqpaetZoflJgh3xZOHwlaTEuNkQVmw2mr7nFhb7uPj17DfnVju9cCkNRaCoRGkrnLJIxZhwqNKb3UbIbwGIbXhkROHfmvK2DlMjRmKhyXcqSmDF74tCf0YlRRmZmR4N+dmqmPyyfGLnS2lJVHo5z9X0QLSLtIuM4huAHhofil5WVgJW16RVBCi2DeRAxuoG//ILwFSHAGa2hxbys9LnxiU0b1nHO2Xn75ZuLS0odOID73PxC61V8H4IKbfM2iRxQmJ8rLSxw4Ia4zyJ7uzu5k1WAmvhZmWGll/lKYci6N7brOYsZDIdaOOF4m/ju3GW+0XylhX0YZYeCPWp8AEZaHtDR1vzJz36MfziKJtTMh5kFc4n1KMIpy23tzTzHZKsaV1Peog3CmsPQkBXvQK/KwWp+Tj7Lo2AhT29eGs1lqxTsU3SuCxBEfF/KZDSKYxAWdgPB1i5Zdu/eCwqddZ2BDZs20ZDsQhKuXL/4xSNQBZG42di4Fp8+04iCV0KhRo9VE1iIuWhAXl0lPibHajgTI/LSC03rAELGKGxvT5/hLuGeUAYXgamuAqaorRT8+BNxxTnw65133tbvVyIMXSTFuQaoiQiukpYatg3YMSYMaXmQXXy58847uZC6kyrZOqMkKSskF0tQkHPTBQjl+o7Stp27fMPC8D8m83M1U7Pb2lu0DOyJsHzFeSY0+Pqrr+Hf8Z12jzgnjF+hJrjoYLBaTgt51IDs0CS7LYlPucTRlCQ+F4UnO5EAJ7LwSQIqi0kINMZvCO5Pb+3mJKNeKG4RgUZ8fNjxxiRYFKkFHXlJrb/E6lLSgneJIISFgFf4kVJowLOM7hVHCpd4VF1RI1d9fR2jYjxWqWmRsA0WSwqbRuBDuWjix2JDFZJBFFbnTwSVkpaSxPDYMOJJiQlGZzHJge1/10fXvfHlC6Ef/5TCirBKImQZHgH1AzkRHgiiiWM0L9I+ajwU81wgQgN72sTUxwuAqbsIK8PtdGf0EQWr5HF1xx13KgJvKir44JBh8DJqAsKlC2Gyi3Lxo63p1dRsmBK96eabSaEV6FVicmiNsZmwTSk9KEsDFxpI6c9kZ2QLWBqs6t2M1HQm5BNgyu3r6W9pvZyWEpebl+VzYMbMsjJzjZkZ0XRK1l98/c+s9Wq9cnlkyD6QseX1NVMTsYmyrOzkpBTVnnG34dFJIyvxcT7zlUq/fKe4uEgv+lvf/HdoODwIsCoOUSI51gFITtC0NgkRPNh+gGTbJZMyJucWZpYS80vLN2zetrZxHZuxyuz5Z56uqizNz8x44fmnfXFjy+b1BqpvvOkGsCQmJfcPhL4TCgp99aXXyQsWrX8rJcCoAxBFUTGB7UL++eeftbDkC5/7A7N8b7518My581bha90aL6cp/WS5zKNQsWOOrBdn/8A/c/JE/YqVF5tbjOVwFs6ri0W/iDMqShFRDxx4Vf0B+a985SsaKxBOSU/Fm+aFSQDr7/FWX1OrxU9Z2FMPvfjyS3zt5v37l61ccfidd81IWX7KTnB49d7daNpuRKesEYfcAYaQ1LFnhCRCB3uUK46hwxqZbuS8opnxDlYkvLAHHqHtYoEyqxCL8Ok8g7/9278lLPOmIBU23DiX7CwzpqzpstJiPFvZyHiMtFhW9P3vPaSiZaIXL11wY+7dpmLOqC5Uu5nl4w4EZ1HM8iP33vP2W4c+OPKelVp8UEd33759psVAJLipPlrbukxyL1te7wkHCaXX1WLppRdeIPX999/riYMWRBsskcWfWMUnZDZu3gRJRKQM4xDJyX/11/+38WMMG7reu2efr+BNz02//uYbsoPlvo/c79Wzzz4H+cS4RDz7Wqrr7Olz/Fo139XdlpoSv2LlMtUKrSlF25eNCXGEevLJl7dvX8NfsMG2ZTFUq4Fi5gdvnhjTxXlqbJ/r5aZWtmTNHa6MuVKQKWpHEeRkZg2PDDJUPCuFeYOF7yuLBgUuvimAePXuuydra0uW14cvTAWz/K/NrzZA48ekvy3dQiC1muoBnR3HeLCKGHHFsVhEREgVGVv1ipbRwT/VUK6C+KmZWx1RtiRIShAFXsGQumWUzG8Un7GKMjaQFQlZV//AiClB1uIhsioR8Ap63qLDQpTLBgAlNqKjCpNMWQhiTDJ8eq5cuGmrkVQ7B6vqbt0MxgwZf9I4ym7oUUrsQY/6lKutJY1S3LtQwzPdKQi3YBEnMRB0HVt9p5+dYKdcT5j/xKFkYcZgKQy5ot/R2oaxiKCMyYbnJycMpRsVYtLokD0/PyxYv/qavQTBLTCNfxGh3xmys/M5+QWWDggI2IAhztk5B0SfDzI2zyNAFM3kjNvCCp/6Zpr77h2wDmozchg2Q4Vzq/+VKD2Gnc6Hc0WTLlQfsZOO6EItA94DBw6wBzBG4UWkMtBupyjRgFZWWkE6GALKeXSQtO8PMxThuQRgNKHNUzAJE7mU7k+2xKHIgg0cUh+GyaI9Y8jDskR2S1nYpn1kMSBCusceOojDRwcgZByflsBbxVksAGTMIKXtRCj3YpoxRDWdy1sLGPV7TU3za3S0fygNhbLysNjmxIljwm97R6uBkojh4oIwl2WQYnB4dsWKctO/JvCJMDQSznajC5GzoqpG9IOe4U6LgAilaJGEmPq0ADH2oYENcHwSgT1Exm8x/vzsjG4hwwajiptmGSpwQKcUKVkIR/AnfljW3OJcr7l+a8mys+22MzjI70Van3nhxUpH2bIrPGOJ1uKXlQfxPDUSH0sRNA0XRoaiJ339Q9nZabo4nhfkZDrVbGpyQiDu7umlNiQ2bNocOE5K0bQeiPkMt3dPZ74fmW7HnXGP9PABVIvphdGkhDjq0egCt+1l1NzV2Q4duIBs1+7d1KOrrH1G95RqZp8u5+fCQgItYBUq2dgTGeCrQfPLXz6pL6tQqwtEN3AYNTEPpbKHy8joIFENyKmH8Gk6SykU4Fdw5wZO5lZKWjJZw+lOLgsARAd5xRG7wo1wYVLCMGlbW+sVBnDIdBQKXB1K5Qrc4P7s5z/rYXdXLza0Dg1caRJ4zkWVKESoDHAOB6U7xuTo8RNUiIg/Y/tHdU5ie8kryyMTZyLMUdSDJ8dTLjPiJ2xOv5857t61JxbIQpQkAg6bm1vV4vx/+/Ztm7esY6/W4cmiIpHSIY9Ea2hYQwvW5LAVJkI6IMCZGWAGyKxTvNBGVxVx9ZhvhE3l9ELp2srmN+xi0YDee/U+7EmQlxPq4JXLrUQPC/Tp1Bi2Mzf6erodY8q+Ce5LvewNhgxdZJGLgMya9pXol5n98z//Mz4tarIv1o3RZYmDKkdGaCdyEsK6pCevh5wTwhRthygOt2ze5iGhhDDVoWCqLE9MdLqnzSjKeFtWUUUv2GBLfvVtQqSIHTTpCTtBWV5ZKCiEmLAj3xrisAwR2yD1nSADcvikL21N/DP1SBAdAIbR2t42Ox2OT0WK4+gseQgKBDNiJ6lrowDWaZUXLl10TogVA7xdiYqgHWYfIcbtGZVqW1vTDXFCLJufZw9uPAeRep0UH/3oR8UXOBBBKapeq9ipVaelrSOMqOkqa6tplhnQnZiYJIgjZRRkhAYRsNhaGj2xiM8IKxzwYx0KI7zcYjPx0aLiMHPoyH/yYsa9M4zNPywuWBkYD97A4eyc0g1GEra+tk78MuqusjQe5tdJ6pebLrQ2X3QAVEFRiWl0HQDj02aTmdz/+adfFT8unD0zOtzva6ypyQnzs3NyGf4vKizu7us3YtZ0pS1MaE7NWfhIreT1BQKtmZ//9CcEH42tsTGcEXUAGHZKojhnO4CTbOLHJ6ZsB07JyIlLTh8cm7T1dfWa9Zuv2u6UBXQs/2tvvTw9NjI1OVxTWnb61DFduw9/+EPUyjYmY4ud5hbDuW86AMxDT0z/SgSAoW+fA0PflYPs2rlTkPz93/+MNRUf/+jHXn3j9ffeP2LeTK1JF4bnmY1OQoiHiQkc9uc/+xmlwF+tUFVeYWT9vWPHdXKEX+oW/XgibI1OGb9XUXV0dDLyT3/60zCXnS7Wb9oA54e+/4PPf/7zmhd8xKgk9+TanKh3oN+sgsUM2ikGKYdHRlNTM599/kWuKj7cf++H2ZjmMpp33HY7SbMzQ7eE0vGjc65GZEXEpCDuzK6k0YNlcsIRBySOjZICI/xdL7zwvI0xDsPQUMCJIv7oj/6IVRu/MHLBnUOv4+qrGTkDYyQwSUlOxOpLL75iy/WePft4yksvHuA13ra2tYgJhn1MywGko7ONTfqonDALk2984xsoX7nS5Hu9qhsOhQEBnz1Th9JFOSgNDI6SAsKkMHDAf519IZqZ6fvkJz8Z9jmrvAf7OSAvJjVJ8UBYyBtdwLB5aGxcaWnRu/jQhz9C4yAS4fXNzM4deP2ADj/E9EBqq+uMEK1bsxYbIiLozCPFgnY4gsLDf/vWD//y6583C03pEPjmN7+JVZ9CA6DzVd3zQREeyNGQvwWBIpb5H4JAz2ZKb1tjRzoODoQVEbwSCM4fw7POnt0FxqftUIpEAAWvZAbYEx/8yQ5JSnG+r+1cPWNn1uiKBmxJGoFCxjCfPzf3zLPPKlEjmS5M70Ne65N3+z+Coe5MCyeFyMVQ2Tw3FO6IDDqCQDUkSE0Z6B8qrwprQsRqcgn+0lCuqg0I4hhTpDg05fIcA7zDQ/ENZePcGmrsHPN4wADjkTJWI/ssZnAQkZbixAoVikKV5TlS1OSSnrkyVFWwBBp/Qgf2FIosboVQjMEHfbk8ERAUoSzSsSLZAeItbqVUXzAVCTyX3i8Dk4AI6GsTIysvHkhK6eoCb0USNmlezj3D8otnAyNqAatrAIil7OysqJOmFZGVHb4aZhLSc7GFINAItpFf8OqB18HIpEm6f//+SEDgR/xLI+ZhTIkSWPuBQwGB8Wt4s5m+3n4cxtaIsds5iZVOLk1GqFp5q0QqkMtz4KCj+SuZIQZzcUgpiGgGIM6eP+ewAQ0+kYEiLMplt4rGm64juExV+eW8fgHr13kREriI44KwS1ks0J9QJbUnRvC0GLOyMy2hNHqCuCySQR7OGCCaG1xxWKAxGAigbwqVDTAGkhoJ9ZAUVMbT1eaSSYO8vJj06o03DmLPggJZhAXphS/qO33mFDSsB1Hi/ltuEmM5Di8+fyaM5VFliF1pqcx41coGzFi9GVFg5+s2bGJj/uRBGtrYVqjWAhtzjw1oq0EIiwHcRqbFJHzmyECMkCiN4GmnEzRIhw6b5G5U8xsLl1186OnvsRi3paVVegByH2tn2J41gfjXAWAeIAIvSGWJ37CyhvAuiZggRNgWgzA/S0Oo49IThitBQX5eroMgenuAtWvPbusRT54OGNF3anomngqLSqZiO71AhhSC477fEbr7C4AjM680DhOtSteKSkqMJ8yVy2H1BUulafPaGDXezyFlISGXMyocOJ4Mg7iemIbjvW6CZS/Ohar0cvOPfvQjBodn8HG8LVt9GDXHzIOPbBor4lB4IIv1d9QWBR3FQbm7s0vAvXjuYoQXWLkoxWCgsqocfeAwOMUZvYhsQhi95prrRPyooabfzPopWOw+cfoEXdqiBzHegqaQy1iVpfIw8+UGUIDRh1b9+MakNdOQQT/a0OaX25jvdrFFaFjLxALoAtvqZlokIPbQV/kZicGeosmiOJwYpQAd0HTlSsuK9uzdocEHFvoGsqYXe8UVIiYT8Gk1Gw3q7bAMbgUlEccTUVLpwBHRiOwSaBBBXEFagb4Dcelyc8OaRupTVzlDRHQ2gwmxrq6wCsUhZ1RmWpOAzz//fPDYwiLVJ6WTXexgppxBuZFNh4i5EE6t1rghjrzWQqjykQUvERgVMLkBttFnzeiwQH8KUthobm1TirkarWQJoKEtqiCkvFUNE1OJ6CgaGoY/NaBBjRT3MwKHDhmpCTNMCD8IKhQImGxuauHeOtt+qSDGWAiUQBMILHhAhH45noIct0at1ola7iIAaSXQo+15bEwFBsauzg6oIs4YVL1qVp8Yq6isxDlhaVzpWBVEGLaqNwJK9FE02wBRVqYp0dAsQ196zNM7vyAsBuxJxTMmI2eRq6UtnD8gHOBBxe++p6cXOEip73//9z8HFn/Ckwr8btuyNXhEbCeuACdjZ9h7fdCeXYVC0jSicokgoGgxWmNTUJhncZ310DY/uIQCJmSZCr3b5k6uIsuKkuLLyyqLivNOHD/S09VhagiHFktn5+aJMxu3bNyzM6z/6exomRwbbbALf3BAQ818evi4QVn5wOCwSNrWEdZWWc/j8ATYrlmz2qTTo48+bNeHQWsaxIzut4EAU0JGj8wDmOd0OLQiJqZm9Gbik1Izc4tmF+LGpmZVeqWVNdfeePPiUnzjmoZLF8+9e/DNuqqKZTWV3/vf37n+2qtXrFhmAQqUjFpRypXWNko/8t6RhlVrNIJZkYd0GobxAvjdVNbf18frVTba3J1t7drfrW0dFjgxWkYyMTZOI7hhwGYA+PL01BTX04LxdnldvWUGllmsWt3ASGjK+ad07WIVxsg1o326ULShX4ZBg+5fee2Atzu2XQXP53/9LAN23BROtOzZsw7btddfp3QzYj2xU2uPHD157sIl9M1e8lzJxEnu0LByFQpXmi6yKyahUR7ZpKEBQY9a8ckNocG5ook7rQE26SHD81wPMyMjfd/Ve3yrRP9fg1sfSUauwbQgxookY2NAEPE0LERy38F98MGHvvLfvqwZaiAjhJrg7kGE7p5wGPELLzz3h3/4BV7mHC114eOPPuJ7WyxW85Ghqmg5pj6ncMEXNHBFAOERcQMfks3OhQM69M2sOUGWGz7885+R97ZbbtFogS32xsfCN6fU5fyaYStaSuZ04WITbm+77Q7IPPbEE+4tj6FrM2zoyHvy1Kmm5qbK6qrQkl5a6u4M48cb121ARC9at83MmAC+f/+t4v/3v/+Tu+66uaY6LKGipn/5l39B1tCVqKv7rQGtMcd3wAtPdGhZo0ZtaOk/JjmdWSCWc/zUKasU7RYghY3szMCgKobtzDMDYDlWsPnwqelEDCOCGbaEMmuRWLigWfhoXuBqcjyME7GHKAscHFZoOOnIicvXX7stTNEPDvrEGDTGwxeBtGYW2SphBW0sUSVAEFc3IQJ/oUNxBPRW59PcrO2CPAUz3If/IiUQIUXjxME5HHCClFzyshbssWp/qnOlJIIQ55XgphTG4AkecOs54p6wdk8kZnKK8FBiydgzoNgAtcrrFBcIu5FXaGIYnrMrDkX76CjUJaO3qNlZQFJC4ccvUuCiDpEQ25IpBbfsVi6YU1aUWBEeYkYzjYxiuJTjI2EIzNCGLF5ZVDk5OqIHLjFBzKIDjcr8aRmzskyGE0QHQA2LOHW98Vb40G80mwF5NzDECZEpFz/kktg91xBYGtasZkv8jndYUhsU1zfAo2ONbc2D0HKAgCysC1cazQQhLEAgIKOw7zlXIjgvgwnG1FDCkQVCxsvrVyz3HEpO5JOFHunCF0s4iF21xOT7pFM0WWgiQtKvJ2DEmFoyALVk9XqI1aRQCpVVVlXooQNBiZ7gQQLcumfDSmR4MronrIzUVxHWYocWsAjTP2BFdEHUqjGIIDFBpNHAACaglIhPMx92/uAccZCePXsantaro3nbbaJEuaEHfOLnwCuvaQOzf6EP5UuXmx577LFPPPBJKR29wz4Bblu/r3NoOAE2Jlf4rjZhxQFxVa4okGo8UBzjxA9WUcBzRlqKb/0uzIdv/RKTaJ4TFrzchxW5kKJcVhQ0buVbt48OCHT9sqBGIh0ANzZ38VzSQUlBMR7CdkSx0tC7fnboP1lmBAuNE2LzFy1FzUStbf0EKZXkmPOutlZfIvDAun/ffSstr7QWSE1MEkRTmsOnT5AqLynJjW3ojo999FGR1gmweDPp7Mn2PtWhU7lM+PpzxcqViFNn6+nT6mfI7t1r9LeTktyzElMHNtJoKMfFL6mKaI7UxqcpxlqD99/Xl8340pe+dP7cReHMQ8qjm3XrGyVzcgwsDNOq2IxOHXn/qEEIpxbQBxANogDIsMrGdevFI9CzNkOS/M3By4zeDAPR4Is9A/bGpYTjqCWnFEZDNFPzEIOsX7pRiSrR+ku/5JKYAiCpESCLtWJqAvqmThYgok1N2S7TyQ6cx8hESkxz5uezHp6JPpfT4qcC8AKQ6bMqswQoMOU77rjtzJlzzMuIkUkr1YxBGpaAq6uvvlaH9Wc/f4hyWRW9IMIgcOtX6coymMqU9XeZI8s2wMCMVNXqZsirAkVw8VGJjIyAHgoW4iNMDN2xeEu/9PuTEhJffeVlR+wR1sZBNFVCevLlsYNrnnvhVYk1DhR6/mI4sdQqAqOnlAVPEIFFKcIozbJvDABZXwufzACksfGDEPWsgCIahO2YgFJ9/fKY6wrxc/yW7lgmClHdoA9AKHbE9OFGiZqDaAoQgHW5IY4oAHwphR6/ioOMNiuNU5BSlCuNjC76kmxhYZ7dYpsq9Wl1KemCO7lkIVrUeeDDLk0Qi174KuLYOHzwLTRFDVqzEM5b8d0K7C2bNpZXhgEzgACKGTMn2eXyBGgqRc9lxLYqkzGANC01FW+S0Y63OgnEN7pDdhsqLKvVtSALEajGuVWaJqD+4P2j+KFEaj1+/AT7ZB6k/uu//msbKPGjaMmI4+xkBLVZc/JMPc+IfUaQ+KM0wj1grUFKik/UOHNv5bdQo/Wv6R9OCJ6ZMKblWyJrGsIBlLiyEZBXHnz7sMV4e/buvXD+rCG9cykp9IU4xURj+ax6ZNjYzDiu4hbCEFRo76eEhXmekFfp5jkJhc+klFRdBScYhN5mT++VpsuV5eUG/q3jHxmZ4sgMXhjF56Kxf10NR/H7pGJKinuj+PPTEylpmXkZqarV9uYm4WXrtp265dVVFbv3XHPy6PtgKa2svmrXXquHLAv0vWPZOWN7S3N6SujratdyRtaLPXZr2JwsakdCsWHK2rp1s9iioddypMVi6B3bg095a0raxIKFjEKuhfimX3bs2KkqtVXOlJ1V3c+//Er9yhWKY3iMjbBs2K8/2RinplAwG1SmSjbMSERLc4xsm/PiDWP2nKiWIMY8cKVZQxeZsdWejkY7f/5sZUXoRaAfa7JnbFi3VuDq6u5Q0zNX7tYUPi1yeVm9c6ZqlM5amDd709pwz8yUJbRiAPNKUTp8FFRREfZB6flv3ryVg1jQz5I163fu3B0mkcISgzJSsE9BGEHury/xx3/8BUYOQ+1OZlxbsyw0lcaDMXCZH/7wh2+99QbvM7HjrMx169dWVpX19nUVFYdlorp5/l29elWMk2Tz73KZH+ZWoQXQ33/9DfuFFA5IEHtkNS5Zl86A1j8k+ZGemxOdNaqIRgTGLyMHJyM13X33nWKRuOqtyOzrClFTleqdTeRgHYDrM4sqwR0qwzCzteDkKiooSklKRPbGG683gubJH33x9y5cPAcryFiCwh/tEScpLXB5ACpC0RLgEODMXhoAYsk93NRiGgTMw8d8ZQluOzPrlfBLm3qbms0YKygMg2Iyklq0FNakAT1qXJKRMB5hTUFMfevmTQgKC/QIDYkNqShl88bl0CAsvThnGZJmAJhT7HzCcLwjmlzARQRegKZAikl27k+8YRtl610vxvq3oqhgJSPGsKfvR2TcktSvopHyBAJ4Vu8oF4cokI7uXJKpwRWBAoa9xaGV8aZqQOet7LG5IMezjhnpx5j0xgQxhn+6wyRDYuHMg4zulQ4TrCLLC4BDLkAh7kZB2OZ9kPSEa+MHJ3gjoOcK9QTnfolGLuc7aF/xCat3Uo0NCEMGJ4zU+sSEb5PZDZUY322lVk5Wkd10lnXFNpslJoZDbwjOEfQKUCMR9mIb4abZg7dEiLUE2tgP/8Uz9ugLbwRkfuijIKWYoH73hC+Yz+anVlUEoyoo4nouySwB8kvpEFMcDucXw3dClQtG0KEvI5WxAbUecKCnOB1vT8yGSQbeqHsATBauOPzDhMeZbcAY20FcibjCANhNo0imFiM7an6BZqbWyLaM2ICqzqtxLktkLM2gYnsASAReemGBGOPsVIBb4REzinbPEzlFflZYPIkyEZQjZGGSEpUeTbtJrGUoJT3ycYwZNgUdM9No5MhIgde5m4Y4RV38s2EfSH7k4cdYi5FNuOGZ2Vi/6k+cGBEwLIVJc/tenTh1BjMinqK1wZRCKEYSYUVMQikIZc8hgD2/OLT9tzA/zxQUdxgdmxhsaZOSRizMgraH0us/apZTrgsyvf191vfzblIbJQARidgqNyQpT4QbqABrKMar+D1bV4MMcNCx3VYBjAAr1oVTnjLklEDLiXmpAhPjF40oGMPr7e/JTM/SuFSZyU4HULMnDx3uigMCKB58niiYhGlOFwqL58Y9v/3W/SH9qEUdwcjEXw8FoDffep3vrVq5mhErnXYV7QIWQKGp6cOItYBVHgB1ag2eTfhI4FhZ288RsXBFFmsfSW4Z+tatW0LfOpS7uGLZSrUyz/GK1hXNvBQ0PNCPDpa8NYcEAQ8Vp7WMB/oToRyNB3cKI5FqgMXIztYplZieG8NoXN/4yiuveM4U9KEjMIFDT4hEdc+TTz6lRsGh4TT7hcDLOJROZ4DigV5RJyJ2AlAVMeHJLumCCHjT0GcikQjaN6B78YWXMKDK4aWcWcWmu2L+fXJqpLX1MjYYHHz8oqzqQiHoOiUNV6ElGts1z54UARZPDOHoYmFJ3FEQMaEhi1/6VRY22jrafRXOIEdHWztjYvpsxgg3HoCG/7NnTsMNpBoB6xrXhIcFhTLCORhf7NwJ7RWl6wzQuFciC+1wLR6IW2sK2QMEJCYmZsjCiLWovEWcFhSKICZltIyenVgdKzuLhXN2dljgRExaoymdOjIqSEZ68WUo+IPd5j8Mkw4z3jIz/Rw+o0R5MRBiop0haVke2osopqDgLfMBqTaENMuW16EgPmJVXNbYRM0SDt8i4Q4RRA7ZVS4k4eyAGu9FBMiYP8kv1IzboD6RGMiRx0qpXGlAFOsNhqPuUMCzXLaQCmqeA1+hqMV8O3xWU4DWmKBKK4KEMAbjz6uv3UdMx3bBQfz18MSJk/wFpLRvhI8lKxFNsZ7JtcU+0+bwGcyLxizTNwthKzjLIkqYUmH7/AK8bF65i/FLJvt172mE1nBoKE2IIM7YyBDEFAExRWzbtkVD37Co7Gr6zq5waoRppb/6q790DoGxCbWjXbvm8uW1d0L1ZJRMjWwrLYMMC4dE0rRw5ibwif/M0798751DBLcOZzasxHDGDx4Sfc4vPs4pUnYDL9kKTGWhUx0fJxLagI+ew5WWfP1qKWk2JfPGW+8oyMupralyptjlSxdee/mFfXt3Oe9/fnYqLHJLik9OSHSkwb/9279xvR07dl2971rgMDbyit11tdUs01oUvWixhUR2jDFUG9NFhmtvuL5x3VrmqmVsXRA0mi9f4f5Z6UFxdArGFcuW6+KGRuf5czfest/WSQQDAs5WS09X8atsjOjQ6djYuJCiD4k+mkr/+AO/zfyM+7JD6/9o6mc//om4pCVK46vWrNbJpJSz58519facPn1meMQYxDqebgAPgKKljb/mIkzjSOYcPS1y569YnqoCZrHWg+DQTRSglMK5VI1CmX4IT8QhNtwQgZuI517t3r2bghgt72aQrAiTWGIw4oxfgnv15JOPaz1bE292iMG//PKBz33uc12dvTxUIHr8iceAcP/991rML8snP/XJD33ojrpaJyaHrUe0rYqJvrTlIBTnwrEKBiN6HD8epi9cd935IcHKVIBeMSm+8id/U1Ge+odf+CKDsdUEA9aDEs05D8wY2xBjt3xEaBIN1m/YgHNGZYSC0dAghZBUcdbHYzI5JWXX7h2OGXA6haYJzwcpa8HJwlxYGMNIRKeGlav1ex966CEbE6+9dp8usR4aFUOJCAABDiclMr/GG3/BBkVbL2GWVzuD2YcYdfocqOtjyynT0wzeJTg1zm9cXKi5zPDojc9MTlk9gjcQqakZDzokjcFitid8tIunM2CFskZRWgyRDD7eWubhGwg42bl7t4e64SzKXiByLV+2QnrDfZ7AVljGs3ug+ZP1oilECKTClPkxifUcRB4bZ7XGYOg5bIU1liwx5YJXWeIqVwKI/hLDUJtgmPGIEkIWKNBXkASEBalcuGWu4qThc8pibIj403NFcBAIYIlyPcGqaKk4RBDkoQZH4ICyKCQ9G6ZWryBABMIqhcF7FTWEJMCwcvGJB9RI56309AVbpaMmgQFN6oMMaiIPvYCR1uwKkF4HAHEmQUBVXntrSzR/npwcmlWoYcNwpLYN/l2qIHpUKFjUgKB2eown+KFWQQCfSIFXoSjDhIxeuTzBsy0k/E4TnNR2V7oBiOxCWXgbW82l4Ug1wpEsRPOWODgRJaTnCArSILGuz6wR3szvcWqoOm1GVyf67hscKitCJNQew6eahYAdHZ0wIb7E2MYD+jDBMHgjthUtF84BiAf3Lonpzq4wC7l5E/El8zea7tmYGyDLgkMgqFxwCIG0xNBS4lZkqaiETRm9swc9LulpjWjazVIqnevZ4eMJ5GX3nCGJA0SorqkKPtXTpU2vRETEPaNp5pUZAA4VahsbcM6eOUeW6264EYdAMKKUaOlbaMmcIY7KCx0WImaiQ6caEmIFWJgrHjxECjIgshik2LEwBXlCjZwMmFWQhbAkBR1HYDyuyCP4l0F8n5OCHsrMU0r6hUlXZw8ZUY5Z5jxFiy10Gv+Nr/4BffAuTAttbMu5Ii5DrZjQ2aZa8ltdo0jT+o6pMp04PjK2Zl3j6ROnjK/jG1vE4J/TU+HoD/ARnicb47FGzxQQpyO2pThI2dYA1pv338gTOn0jc3LMzpZgLuazqyq0WfFjRARkxJCLGWFPkEKTPHARwZ0tY3NmKKWw4Ibrb9IJZxYOaGOsBvixZOzHEBFYdeM0HX1z1zgcQ/QlRThqW7z44otE4wwNq1aBJj0lHIEMteDPsZMEjcoDyxo+1LBBLptaVKVsCFlNSfICisoNRjIImMLXgJvJCt+NU4pLXqeuxlx3kSGqwuFOWzRKf0LbpaZwAhrGGCXmYU5qGuVjaGJAEc5S9ZCwFjIZoKIFZwfFaIaVMIIyWOzlf+KJpyxGokfHYmojunEMaFa2kf5OyfBMNOEAt8AkLIaNxAtw3IDz8xCM9ff2kQLn8GH6iPhTsOYtQBB02CgQPBRTnAZQV7/sQtMlo1xR5zjmNhPK0r3WAqYssjjuRnFvv/UWxAQRcrEQaBCW1nBlTaGU/kQWMpRC4wpCR89QXsZARk/cA4Sp0J2MEJMFY6xchJXMMhVzLDSFZy0S/G/bdhXrYtjKNQYpl9odKRnBbssphUbgWwWBMmOgtehtVB9wV2kiX7LzkOKsdSECOtyVUiTAPy9Y09iAhchlGIyWJ+Q1uRyIjhQm4dzf24241iGs6utqIyvya6rPMQK+KWEPgLwAlzjiU3p5cYsy9hStv6F2dK+JiTJrMa/KFDkpNniWchmMywAth0L/b//2b2n/l796SkoDGJKp8lkjf1X/4QdWra0dX/nKf4OV4jBg2Kx/ICxjcKFsaJ+OHCCOoApDnHCyioaa8aRgqDo6uWFRbxR6TIw46s6UHR7g40/4C6m2gdEXuXC4b/dujS03JBVPXQRnk/fcc7fV0s5ZSktOMoegg84y3Rh6UfOa+DbNw/yqa+tx5bwFCHAiYe6xRx7WvzLQIKNX8Jme1WE2ihBnuxFXTogzhMEEWI4BzkSLGSbV1HPzuhSJyelLKelxdpJX+MDcnlCjD9kPmvfyi883rFq2cvmypcVZ29wXbOScn/YZk+9/70Ht1DvuutsmPBpRlgtlXzr0p7NBYesoHja8YcM6M2Df/Nd/M1fgYG5agBupxV+YEI19athpdg8PGDauZH7ovPLKq7ffeee27VuFdbLQiFy8iZh+b77pFsAawqd0dZKuHYbh7MhZzy0fEkJvvXn/3/3d39mJYWrOZBGu1m/ayMYw0HT58ntHPmhpaV23fuNNN+3//ve/z4BvufkmPqs3aF7E1mGW/POf/VRZKi1f6KMXCsIqiVxcj/GL56KE4X8mhGferXPCtPi1DhJHPnXm5J/92Z9xGVwJNUqhYk0HWHkri2Ai8rAH5u1jGh+66+7GtastofSnTYqeW72lSffv//7vq9c0UDRgDx8On13zqel169BY1tUV4tuhQ4fRdBKi9gP71ACrq603TPPII85gSNe997FFXtDS1ophPMDtuecO3HvvnSZkQOc0fSCbX3Hf2nKFQynChbLOxt///d/TXXVNnYEMx7lCRlVn/8zefddQltU7oo0e6bbtV61ZvfbU2TPRcJUFb2Ks4SQUlGibxKoVKykrPz9sDXz22QP33XfHnXfe/oMffk+4M5kjGbTdkz2qTbSMNUrkdTGAuvp6x1eYgaBo/NuTL+hV1dZyn6HBsHuypbVdStELpDoAjmKz4G2JzccCEb8mkWDCGNiAHhr60lMBoxJaRRWbUPk4oajMQ61zHWwJHCFCFyyQg1tmgELDqtXwEoGQcoMl9JkEe3av9ocSqyCR7ExdQc6LC2fAZ4WOEG49ZAnBLNevR0FGuYQadoKUMEKPpNbMwgzOY6KFld+kY06I4FNKucBFubxJA9GfAJEAZU8AhQfJIC+Gq3fYsHDhBtTKQg0+igC1ysWfGMY8Ih7KK7iRUUol6tR5GNU4gGLPXnnC9iTDrahONAmUHvQyNICU6gOHSnQNxk40kiaAHFuH7XQdfxI8DLvPzzphQkZllZWXmIH3Cg749wsB0gnvaklQM86GNWsjNMRDxgB50mGV7vCGJWrFDB7wA9JtV20HoAv9t9465Lu06xrraRZ7ZCcd3HilS3ppzKqJSJoTSlHf8Q5ta6/cIC6jh67geqSemdb9FB9R47NaPhF6StcURNkMAIiwgZqbGEqL5NJ6VBYZlQsHv7RJWGnQIbIb9MFi3gbg8OT5iOtpo8Z+FGHcXV6NaVFI5QWBoILkMDyEVVnMuMoCEH9aqgQE9uASxogANNntCzCSrH8uSjB1jDWsXoUZErmnXDir8nAlHnqy6JPysUNpIc+8BajhoREWa120ClowFBnM5ZqbJbLLkueVK8OAnVFRTEY84ArCwMQqHLxlWsTUASjIyVXtUwG5vIWhXKyIyUlPFhYuJQMGjrN3ce4cKk9YOBgZv3vy+mYRKQAuGWouDEM4/mtf/iS2ZGFP1oITySEbDEtnAATUJrMtrUKSG01qzXfNSlRggSLqLIV6tCqw5SMmkrmJooA0JaUVDFEHgIaCBcxODfbbKjyIgmpG2LWXxspXU/Zi7q233koxFs/wDdjhntqMZKMgpMoOa4JhUhECrmTCEyw2rLdptSg2WRdHFj6grtLlcoCP9jPT6e3tsZ/91lv3m7VAh/y6f3RghEN7isVUV5STGkEKtoffGCHRYHK5+QolKReaqn5AUw8fsBiAeUFA6SpvzV+WpP7YsdvnaQaj+QHqsQLMlkOYgAh9nRYKxgA0GKgimp0hnZyMoNaYiAxzvQK6YXCIY0CzzKQ2rUOMS2LbMgxr+tmraTWFavRL78BajGjc63FeOH9J3vvvv98ehoLCsHNFHFcup6VyfdyIbb9m2OUFJh5YIWO1WAV7EMaGRqFXAeTY14gECMn8qQikKAU168bgQ0B8cgz8q+ekx7BfVRrVlsQWNdHCQH+/vISlTSGMfqGqGtD+tpGRKVMcyryI4YBapNNV86eCkPJQegywWOAjiIIQSYkqJOFbBHREhnIhgCbVsEOGYaGRIGJDng6AOg+qgg6EqfXYiVNK4cyMQXptFymj6kpQo0F1mF8o8UlZCnJDQ1aXEg8CBA1aSoYTr5RueJiaKFoR3mp54nPz1i22eUXeCyWjy4xBfQZkM2ASUw0AtSw1oI2sr2powDz35lMKpQKqYfaecAqcuwcvkZmQzqp7r+BGceRln7wGk5QVOQ7RjDETx/KeVatX6hddudyiqacfGGsEbAM1Zhy1bu4IM1QPaiAQzTGFutA8C89G79A3NkderWea1SJPSE5qbrp8+tx561k1ozW2nIPDJLDkkyVgqagMq6pM9DET+h0aHhCysWqHIrV+6Yt/aOG+G/bsuQOCf//3f9+XN1Bw5IJThdik+tZbA736vVraYVfxQpjhqalbJqPD7lgI43zn0MHXX30lKzPdUfkmFsjuvBffLcShUdioA6COdUoPK8rJylBEGPxnUQtLZrv9OhhoKbMoOSsP23d/6E40lWvC3qS9D/SkWOoUHzc02Nt2pam12V7oyz4H6yAssdVFNKaiKnri8UepfuPG9RA4aTB+evqrX/0K19BnEOV9ToE2hWIB3SvmQaFMGsLBHZbCznKO6bm4bY3MyNhwRVUYm+QyKmMNUNZorYi+B+1r9Ro21vonLH2xuuKyEpzUVddolTraOPhXeYVzvdibND6VPTI2qrazzPalAwd46y233u770E899cz993/o+muvswleNUm/1RWVUH31wCt8BMgWufKOgEZcnH6yxTmsi8mhbx5DSg7CnJgE2YlmP6sShRd7qKxll1caf1KxS3AmpgDO+NmGyoXsCnKQv50eDi1waCD9QoBlLi2GFSk/+MEPrADW0xDPrSMF0Uc/dt/goK1sw5bqvPPOe/ARpOU5feo8/sVG/33n2z/5i7/4E/EZaD6SCBkfzVAxg064MEixa9eOxjVrxPyCXItGZqmG6h27wX1waFzfQJ2A5jJR6fwd3QDxkzhnzp8Tkfr6Bw3kUx/vUPXKXllVYwUc+uTdvSMMr5j75sUisN9b998i2qgslL569Zp9+/Zag+57Jr4BDAQAwsQGAHYCT9z6hSfifNyl26be0f4mLM91CBJ+bLoLXpkUtrFeaQ7db9UylZnhMRPP8n1/0yuaIiZDwgbYgYAIDapBiCO90IQB9TtxhFB8iv8Y2Ll7D0M1dEE6By539YytXl0tyCz6ZHSIxiEyMFeUJaMXeRWhLKVgUjwUxyhXdqeSixilFeXgVQVLowku5MrLnGiZDdMgZZGC+7ANBdGICCYBstBgY7hSkFyIi3UULb3SWYv2A64EMWxIwNLET5KK8PgkGmr+lBjgBEeZScOWvvDjLYdSNFLIohNxQo/KwrPPbEEMM+hDDwWvQqiJVa+yQFK5AMEGypaNeSiLZJjBfFasX+GV8NLT1Y2Cr4IoUUEOw3VO+sBAmH6hsu07tkVSqDuUiGekMCaYqEaBg1Uz8Ebl3MNE0X6RAo6ChHSYYwawkYwALC2zJrZToLASz1ZMIkRZwIiyVZHySk8iFxEMBEvDNtiYCg7PeEMGcZritnCThcvj7cSpk5YTs380AdLT3Sej7HCL5o60BGOxbpEBoCZE+BYvVpkHeDHpXqGyexuxoTrGCXBkUSL64g/QVPqyE5zN+DW5igFalhho7qENtNGBEcgjSEDrLVWsVMOoLJ/BiWT4NEOLFB7kVatqiGqiMA/QYX5oeBAzSvQna5FFZECBXbEWR8iAHRGQ+saRojdt3AyQy80t8Ixc6YWXXhEc0BcWTCNhwCbw5cvD9k4yIqtEniIvl1HfsRYpKd2fsSnrODJ6CyLPEVc0odgDuBRBTCkBZQGtgQnGrAilS6ZywTmT0BlDliB4Jqa3ig7I/+kff0pqXh+TcB7dTp927OzUmiSqHiFyxtRJqABNcw0yaMqp1OKisGqNu5IkMTYwiUWQ2bXgOYE9j09Idtq09oQlAao3jX5qhr47NTpld3S0mxynXZ+CIqc1T9QJX3QQgQKAlIiaZro5BEaAEwZHl0C/eOky2Wuqw3dSNZvNYukwkA1MOHz/g3dPnjxONDryzS9S+JiO0+41cZSl9EDhQlhDX2h9T2zXb7ADH66Ki2Pilnq1xsbmORI0LMxlKJihJIEYBXDh08AuxGTUQNf9NXwYrdhGX6y///6PyaLJzhmgL5fNDDQRlc5oBH0yKv3E8ZMy0iW4WIzISMdKlJKR0bRTWU0vaCQpnXSMBmWLRlQnGelhAGbVqtVksdWDe0BPK+SGG65LSk7kvXwVtxREEBqnQSaFZcThqURmASijEbY+gR2GWFV6sPLYyB+98HxsEJZDKs4SF8eYGi2HD040Rzz/whe+4ChDwmLekJJCRSvSCVuEumrbVilpRxTmTl4JKFq0KiRNUmWpLWSED0HwIJkSDY4yM4BIKTv+lewSffCGAhFwJRSmZ6Z95CMfcUI/8Qmrxdzd3aNcdar2mS2+dBcNOEGAzfjylIz8Cue8wgUK/q8gVaCy/GLDSIPQoKCi/GLMm03BJMa8MsFCfbQGLivONW3xzHj420A403bJRKvPJLnwg2FLWTzkVpTS2uKI/xZ0ZDd0a3J/pTMEYotZcYJhoUG59IJs1GDiKVb2Y0yLBB3rkXFCfFwRgYX7k5o4CM4Zp+ALKFoAlMHdrVdt8VADS15E8F9UVCyxGMGzXnzxZWhAhvhQskRnKW7+4sXz1CeBBWboOwed6k14xsoKI0nJiTr281fo4mJToi9upYUlByzWcjW5FhZD88jnHQy6K9GIpNF2N5NTE/ZGz03PfuxjHysvC3NBziBX+u133Bq/uEDMU6dPGEoxdkA7bI+5MtF4K5ASky81XYG2DdxKGbaQ0J7piXGLsJ3jblvRyOCA1T7OdzcMvODrBBPTeLW/RdN/ziiGdr76OykMcbmsEeICWv+UOD6/NJOSW1Ae1m6Vl1fs2bfXwWJ6LE4KpvHC/OyJ0SHzAAffeO3gG69/9vc+w1wzs3PMAABfxKCgsKY8LQV6Bw68zJB85wG2ZKfKwrywu04l5Jy9VavCQSvYphedEFo4cuQYCzHbSVmo0SC0rVrs6Gq3e0pbk4u99tobdMeY5XKKvPaZ7hD9alxaKqORSnE79+wS9EcGh3jWYF8/s7e7CdpeIWL1hTUwOgyW2/vY7/LlKyyW41ycTsdYs96JMbfcdLOhk3VrG83si1T6urfdcrNILoDQguVCrIjFisYMhr7YCUvjVlHgElENjb///rEHHvgtnGzYuBmHYjUbIBSn9ha3WAIXT0HEZAU0VKu+sZ2bneWjKHCgGh0eBdkE/O1vf1vRV1+zz6/aWizkF/XLfIz8RGqq2mQRVjB0xohRwLTU0BX31QuUnSslqvg8lilNVSCne+mVl2mK2VD3pz71CblMjGql+YIBfohpvNwhEByKt/J6AJrKIJ2wFn3EEPK4csaOUv7+//lHnJt5thZC8EGtoBCPxQ8++OCXv/zlC+dD44DzqgWyMzMgxmBgOxRr/pqlNBvm20mMnEFCj4eK27K7Z5Nu+LL4IAIwFaQyDPSUlP3q188QH5I4wbAhNDiXlYbFV/yC6+nMkt0RUozWLIR6VjDhPlwM54KbWIoTmFCfG6WzqNdff/OjH73PInUWiLg0nNeoOQuXrDM2YMEe+J0RDczYoqZ0OxSUiD2U0aFl8MI2FhxCI9tILcMT9yQwXa+lseTT3DH8wUVMjLmUBU9Fg930CMFhjho6SpFeQGDDnggCHvpTQZBBxJ/8Ahvo6MXpwWKSv7BYD9HEADPw1p9CmXv8yM6D1q/bCD3VblS6LrE/OSD7xFskDpWxHK8M0jmEwKsQQmM9FpKKzJCXGObKRVbRkQahatiTRSlXhehwXjyIlhjGA1DVtqiBmrzqC9WHqGSQlFJUdrwSLHxHNWoER0HoiCQGZKFKj/7sCeuyEriYaENeXEVSEycWH0JFTwrehLeA0sQU6aAXlSijsU7qA7I0wPTcjT+Zn/Ey3V3GQHex9lVohsGfFEQQRrySEjJCNCJWxJnpNU0LAWwLvBFjMDHmyaeM42tReBtVWKKlVSn2GSsGHUVjlYKkBx379Kei+QXZpREi1C4oaPkgAkNFq+jFOkJxCqCh42LwVMzvFmcWjFCgg0Mj16ITPqFncD3IFmuWqOCkJ6AOle91SaxBRUCw06ywwPxkhKQ5brbkoT+VC/nUlLAVJDJOCyIoxQA6R1MPokmz4kNYd5WbS6JY6WEjn5hAX7LDgb7ETzfigyqAIJKRmiNI6SAgSsES86BuUihLem/ZGyaJAGSahZ4i7OGgPqKxN9qRxug/o9u4aT2aBGFv8kqJbdYSv3VtDdJIqLQsoAT9QL/PevfZlIZL/T/+oHjLDY3fWK6jn88ICI+c4/kIKRmDcHCaJ/QkMQ4YsbalGnsiplTiEdjHMhgPfRMyw4c54+P5KlhTYyPiLa1hlbk98qo9dTxLsmaddSKLoEttgU81qMai6IBhQPtKDlE17IwObtq0OVh5djibRejBia1sbs6dO8McNX19zszqX06L9JYtm1RdIO5xWENPT8vlsBTV52NU2M6BNlqBX3xm5eSgECmpo73LPXlZgLUmsmOJVow2uQGdqULfXQi5ssLKSHBzYOukdUxXNzTSluzyhqXMqalAxqFBXwWJBcTMzMhi2erjjo5OyzeN10pMT1zRoB03YF4VlaUEBxSzMBTKOiPHSAprnXlyaJd7xbbefPNtk0dW8V13/bXGuqicWbMStshDJMCwyUz0AcKAgAaWVA36+XnFSUlrrE0VSMsA5H44UQp1A4FoUoYx1KTQ17QB7ujRY9Bgnddff70EQAMCSUPsc7pZbNG5E7k3btjwO7/zO5xTUwbyblgqM0NWidJzY5K6QUReIGCVrsUL0vFS3GLDQ7ihIGUEOBnPXwyHVu3auUdxxGQPL730spaHBBjTKAUOgpZkcDaGVORYvdhXD6XneCgInQIElLBBg0pRhPkK+pKxvKSC/1gCJKW3NKgDIBhJhg3f3FGQ4jyhVotk4KwDYEGLG8+x5IhCeUEtpYN/aJBmAehL3NF3AFi5NgE0DNVDgLBgFOloRDKAuJGLLkAxEpttwwkmo0hBZf6ksmuvvVah5KJZRFRj2ii+bQcT48cCgSIkO3nyFDqoYYlVy67lpwjxyOqmDRvXshdVstCzb981wLHNBv88cXFxyTm/eCM798SIFtvlK62j4+NmDs19uzIyw6EHGNPoisWpLI0e7Ri2xHZYu/wb1q5buWK5aO7IM3OMmzesF2do1tIOMR2qDInNcx8HfkxPzlgc/dZbB419Dg6PgtSx+hZ0vvDc8yeOHZmfm7EgfHxsVF/CGL/FQgk+9mezLwaWFoK0STZWhcafbpi/XCBiw4i7ZpcSh3wQJStXH8YGg4a1a/WoBTEy0mx83ILPGs5Pj//sRz/YsL5x6+aNRgrsSWhpbhM0/umf/klQoqbRkSHr6XmWRR2rVq6kQYPWtOYgDzWQCU+AVFWF1XEa7uzZBDEX4Musrqqyhh4pgo6OHTuhtX3uwlnjgqK8+ZktW7ZJz0oVd/zYSTd1dfVKZNhslc8KBaMTYWTohWefo1/rv23/8FU+ZTEJuay++MUjD2NJz6OqtoZG3nrzkJQ333yzVnhvX7cna1evEc3+7m//xmzlyuWFutMmb6iYyXFYJ9VCg/v40ypBcwusSOSEMA1qrXrIzBxI4E8Vc6lPRpWXe04EenRxZG8xo7LQ5dCb1SR44IH7NXGc4u/IYCj5thEPCjM0i4vnzl7EGzbYkrrfMtyrr96rdtdasqtt27b1tbU1/MIeaX5kJMjoJ2vUWSou0pNfxUNZJjtxiDODdA46pXPDWP85rCGxlR2HBqcENMvMgDk2Er6pIiwgaAWdUMDYIKwDIKWKhiuNTozjXL/XQVuaoCIDJUppITBFcBPiWxgqF6As8be5lpfpO4UwvmyZxg0cbFddvbaRjDQOVdM7HvI7zshEPYcqs6QU4defNryJ6uZw1MU0Ym45FlrDxq3cnHDoTWpaRsyoUsI8Z5A0QaPToBsjR4HxKFfd4Ub0YwZiFOiUJRKCxdgqXQt0iJCF92HMWKb0h955hw9VVpYZO7PWDzim12Br4yh50YSwP9k2sniGAGW55xTMMqTX1Jud0QHILcjHqlJIJy4pVzwBvuLUUPhUqCwgZQNBNbH9Wihjw0NAsXxGy+owjwh8vHWvp63Euvoa9JUoaGNJH4YdioHiNrMBL9EQiRpA6vQIGdSkoSwEmQerRhA13sRQVUxkVEnpgEVhUzJvaQFXnqAmnjOnKLZ7iElxSa7YPFwYwrMciycKGiSChsQGQiVwAy5ZNFeK8vN12CAgQuKWxVIKUpgXgfkRjRvi1PPxBMJiseyYh5gEWCIy52JLZJQM5+pKtUDEnlks1kIoNiaLNNEKeLnAiD7MubnENCKNSGjw3ltE8ExZrIWPaP0rl/3AAeckErIsVjRp7POXGIOMDiqooUcd5pbpyDojhRJHNwaYhr91vOGjIOIgpSBF4MFkFC0gCwTcag/IyEqvtARrRFCM0kDiiTghxb333kt2WbCEc8FEowIP+3bupRHiE83SCQ0hvsMN7QVnbFQsmbEhdSX+kZ2YHMczInAjL6wwwFbZRoif4bN3YQg/qpRFs6HBUNvinGXu3ruHClpb2oickJQMKCxBMq+giDVG2La12R8VjvpQhFAvAfbIjjF4SkYW2eUCOMFzs8NnHJDyVp0IukA89i05JfICiEVP/IJOxMStLEBglqQAgmTqLykVhCzk2blXepjxxdm+ARG+C42ngvxC94FK+EqF6vz/Y+q+w/u8rjvBo/feAZIACBCsYO9UI1UtW5Ysy5ZjO9XjSbHjsSeZTHY8u5vMbv6YmWfiZ59NxsnGJU5iJ25qlmTJsiSKlERR7L2TIIlKgOi97+e+N8kzP9PQ+3t/9557zveU2+/tRSWKp2XJFdEykqGSxpkPWkqVAFJ05kEC2YOV6xmlZejr+2ncMtupacc3KYV5awBJZq0e/mprQgDq6uqk3cK8MIcFM9FA6YYVRD8uxBSoHzOCA62LxeTRZVdPsO+KykotbAMU167euH073E2ze9d9pCAtmnB0x5aTLqjcyfSIWGVXURn6ORzPYU8q6Q3r15Hi3OlTWt5bt23Gw+WLF4UtROBuPITBeUlPxj4ZBB2zby1fkuoDYMYRFtyVfYvJzmENf++ES9r1axgKq6UqUz8WOBlQ5MBQJQglwVCFmqzzCyej0SuIurt67Km/cqXNFJw+Kk7EXNqSHjLYdosN0NB0fAcjZtxKwYCYzjMR95exWg5kfhmrKKt9VQncLBjH+Cie9azQZBD4MV+NICKM8pmnPol5PFMh9Azbe2DxutHGP7yBOfPgJPBRtA5mfWODcREQof/f/tt/0yjSfiULVt85+J7E0SQAMjo2rNFxp6eHRPoAhudZnZTcmEVyxagydDzgR9/DWRO0hgGsmjHgjWRBkKIxw7r8yg8FSllaVq5w6qOvB955FxpURsYnn3zKEbHYJruOpSxYEgXiSKoDrAQ+DqzVEsRJ1rMqTgtAzQEKkR0spFMp4tPN0aq6lStbGD86mGeo/uJZGq6BCE7ECwqaTEbubSOxSZpSFC1vSVEBrqiJRE4BQodm6Wh8dEQANV907fp1WJGRarwXI0gtQCjCGxaoSpCdjnzVxFQua2d+zBUnRJBXLkYeQzlgRTdQ60FdvX6F7zi5UmICJi2JMJECT4o276cUkhr7JLj51t/4wm8eOvRe69q1vloRwRmblzcJ35IZL3Aom+IYT/AU818LLgPINJhtbfqqVSvxoHJ1oLSjOVgLCuZnIMPxSe2wAmdfuiuXndjc9OC+fc76tImisqzU4vve3jvAlJhv9tzpo01LG20zsINANFO1b9+10xQzoTDDnv/mr/9ajeyYDcf8W1rrADUYwsRu5IyM0CXW8rYcwjmt4OJHxuHI64OTaBLgWkjLGpgM3YBs6fIKK2qWbN+xs7F5xXByuZujZorz895955cZqQuf+sSTlicNDw44JV07TEzAIS2wxiMffqD62bv3/rBoJDlyh6+J3RbkiIETY2M2fX54+CijGjBkbYZkbpFGKmtCDHHSPKMVqOH54eEjD+y93yEEOgBxTHT16rUgpU3e/Tf/37f/8A//0FUvOlECi+CslcOQOrpDjWU5ljbB3Tu9Fgtdv3KV1pgN+t//p390oBM0zNqZLOYRy5Y2Uv346LAiJGCfZjRACmFWunnjBp4eDQwkuLWGG2WtWPWu8zcJrk2p68IX6NFZZP6yTz71ne985/69D7in1sqcBP+w950HCeBcm/HLYrkLLz5xwikZ5ZT11FNP/uL1V/70v/yfGuts2KG9SvzRD39qAIUBu/kIq3pTb7zxOmMzsPrMM093d93CGDtxnhs7vHw5rJ3jiK44FCgcnMqDLJKkXNBRtM6nUCP8EhbUSrG9m+I622/hxBuaumf3brzpBpOCywh9KiDZNcZhwpIB8sJLL/O1jz3xJEY0tmgfcTWyDoCZKJ0eHQMoofDSC88zM+GXTh2rylZFFZHN4Y82LOmG4QGruBKCIKMKwIm4jTLw1RGYUbpkvX19ZjOaW1Yg62tckmcMmUnk54VGbVd3GIYzEy74ZGRnad25B12Xm+tZb2g2ke6YKK+BGMtHHNtwow5cyeXgkxguhGjhhT2wcDVjYXGxGAtPUFizSxYjnVTmgjIaRxDnseUh+oFIXh+wEA1jXB5j9srZR6QXKrvErIKkBEEHsJhhIVRg5JW84A3+m5kpOybhhog3FOqNalGhzA9EilNPIeWgXsnskZNe5QJJsHMHlPXHRGCsCqR+RQcO9HLyxGlFcBBs4Fx9KuBIIKVczIZPsRYWIpTFoIcx/KNAIizJKL3E9MX2gMkZoeFZe8eATTyFD7YAZznOqZLLvblUQBbyVidTPYRyO5Vr0bXIlYgCmnIZlAkOm5wDIeKRV0Z/LZlU17hQFjN6NdDALbOhPkXLi4hkCqV9uuA7imjv6LJnHUqhbp2dVqeDmlUYsMA/zrmzJcchXmVnt6xw5s8EBmACEFAoAjU1LDClkREzfkUQOB1dnUZvB0eGsUQd+XmhMUlY1qUXQRbzxvROyyiA0R4Vww32eqEgHqLMCGmNjQEcMnSEPeOJxIE/7XTfuWP0AfOS6ZwLa7RmZSDRMEwRMJGSFvBD6ZYAsVtfQb1y1QoF6a+yAbW2WNTT09/YuESsxi0KuqA6AE4CkJFJ8F+fUEuzvcxsGvdBQcVHKM3ocEReeujLsUAB6vjJE/zFUCxSjjuHT2ID5YZ4yEU1LE1oYrp4Iz5NsQdsk4WbSExN8lKEUijOQ3lpODuBCCBlA94r2ntgyghYQEnJQgDl7+2OLjoCu7KYE8bklbKqugKf+EffODVqFCdup65rqkVOHqSlJoAfYGo/G1VBXAFIyOYBELYAGFcoKSwWX3AM2UgURRSQMpmuPID6qkiOLa+LoxmQkK0Itzg4+dhPlqA518kMOwmNITomjxG3NLdAimN3G1gdGJqaDsMVhNXDwxvQnQONw6QmCJfO6n2zQqM+Qr9z+vUBLFsyAKzpQ+VMFtbmGUxciBEvvPC8HZuMyWCS94AzY+jUDolXrWhm0+8fspeucPXKVQzUeicVbf/AMHGkJKCa3oc4LPXw4SOXL3dlZVlemW/AWnuRMmhhcmZSH19i6DF6fEIJCCZYiWxkS/1HOmiQy+dOX2i/Mim9MSrEg8O5lKLHYjrYUQE2OBEc/cBMfz8E2AFSsPKBpcRqKQaEpr+WXPuVlWuFY+n4sROxakGcffOc6ZkpDFgrCQGMoRb2eoZj0fpGhodXLF8hI0uCHjNgZ37SOPiDP/gDD0xWMmQZMRXjx6og4OjvUr1COdXRY8cZtOW8cDt85Bg3kFFKC9S0EPVo62pD4FMBM1NuI+LAE0vqPykJxVsEL2lU/PXLGgjoV1ghy1TYpNAgF1sKBpkc3aBoEWTPPbut1DM06G4U5opDzZTKyiojjhhjqMZZOR5SKJAOqpPTYTsBWyUUABmJskgkjRE7yONcNSavZJA8cfSkZ3vfcS4LW2LdkIQY2B24ob7hokKMCM5Zfa2urTEDgDjKtGBVH8cji7wz01MS45MW2h3JcNsAzPDGTZu0OZSLIDYA/pOf/IQicAsQeIaC3LtcWip8X792zVeBnuqRQkdMAQvOyS4NZwEaPFWreBgaCedhv/TiyyyTOCz/qac+AQ3IMw+Lx0ChLI7DAnW5J2emvvzlLxtHNHGHeU3D9etaYR6tuqw0DPAoFGVKtPKqu6ffIJMOodPfLU7juS+98jJNyYK9cBB4iuGDGXMLpeWVpkmz0jM6OyzAK3GAUklhwWOPPeLMfuE6DIYlu7pJ5wQ03LpwwAzswqzFAIOW9WOSP+JTCKLcdw/st/rf2iEj7CiEA0KSOaJU138lHXjMC6jwFFejsjwbjbNjwTicTlpYlpiWOTmXMruYZuHQfEqGoZvVrRvNAxSXlJnmqqosf+MXPz936vhvff5zJUV5M5NjF89fGBwaEZrYJHNlt0YE/vf//J/olyBqU4cyA9aQjciuS+EYCiv5jHipGunOdC2t/fQnz6vwljaEfrVT1ChOBwDBsKgvK+PhRx9yoJDGvd6aKRw8IygIsPDPf/7zJ06clOtrX/sa/HUIoXH46Iee169dB3MLgeQqLghnzKkXtektv163vhUUP/7JT9wUG3YoLVhFNnn+7GnOyIzZtsteGAxtqgKX1NYoS3XI3hykZkrKFXsq3Rj5BRPa4Xdil/Hvv/u7vxMWdOwZtr66N/seelD1aY81xmRRnbOWOKKJB1rAkkL5SFvbzY0bN3CrlMXZ3/jNX3vv3UOsZc2adZbfTE7MyMILNmxcT/xz586Y0cXP733pdzxb68WW2L9aX0sFOPw0DsLp3GqwIm54iLsBFs4/+vGPUcY5+8Gn0daaqmrg2NxGF5RCg8YeSK1ot5UJPhqR+PdmbWurljcXkOzRj3yUSbv3Jo5KgIhoaueTp85oNDhWif8KO7YuuPlGieKVY8ivhkugw0CjRqHlg5u3bLErbN2G9aoAnUbE2bxn/og9QuHQM4RpR7kfHjmyceNmF8mBnabsSROCnAGM/5TFsC3+2vXONWuaHSCkdEuAdHr7e/vMxnd2jbSua+Dg1CqLyOwvskKuZ6gSUytfSDQLJ2JQCgaESm8crMzFOsKqYMOZYeuXsIWf1JTw3uJw4ZFQ8OGGgp6vbJI48sZKjd5RY5aOSXHErVNiCCUNANkA1MSrKCCjVZsrItYyqlqMkRRZ3kQL4ryMgKJNIIh1wKRidPRYNIe4ssSwQhDm2hKYpFkPfNB4H9E8QEyQZ8n6jdJLjCw1gYUjq+aU6yVOPBAE83Kxn+Qc4dAY8An6zsqiI1kk42XMDJh+Uopfw9iQS0iSlhXKmCS4SlDd5GSPiIlyc5KODbSNSPbc6TQXi3MIIEVHplVZhUkwPFi66RlcdJGMDg0aXvHBGImUiz6UsEpqLQ38wwcpH2oNF2wPDVMWBigFe7iSQGLaELXoy7EN6in+pcqwPZOb6j/jDRqIk5Rp8TIUFEfXJIUA8b1xMLQNY+47xzlh46I7CVAz80cLnZ1dfAfzeIZVRUW5piEc6JFlAoof+QlBKlAWnVI0w6Zi2bGxacsWOEDA9nGcKEiI8wYRgjBCOKAgdtEvIkN9ISwrUavG+KMsOkvwee+9g4pTpSpRs00pDExrU0MRMz4qRxCpx138x01MJ6LDIOGgAoqNBFn6kzNmCAjDrdu34dmQpZQurMQA81AFOwWIpZECh3YXUwphcQI0pXNzxREEk4yBVRPfR0HEHOzvI4WfohUBTWK/+goNuXyQhYAAS/UWZIDCSyy1toYoh1Vs6BV7KQ1vCg3vZNATDqn1lWE1hcKQ8wmmWWgzeEFNTRj1BKXiFbB//3vNzfUGh0xkaxkX5BXqKEgAI5sZCZ/uOO7E2sYmwpSWIlFjIubi8eonX03QI6WF7WAjFaGRLQVpxRUXFfHPrq5OkwZlJeVSSq/pwNls+sZA390waCFoapMRg5pFHkEc23f6ZO0xU+8wu+vX2s6cMQwWjsAzTcaghTz4dnUb2R2DHdzPnDpNtUy5Kjkt2HtdGlI3NzaYUbIE6MKF8w7nMmMCO8i4CJk4BPExVudDbf5qxFC24bcbN9pthNq0aY0GlpHOsckx46ZqI+11KY8fP/744x8DlI0KL774Iq1zS7wBmZjeWwJEWBZG8ToSKGMS/2ZjqMq1UJqkGoXciQMw6xgH+a30ahpLt5TrxlxvRsdGAGJAxDODA7LjWZYuMTAZTlhTH+uw+smBVkjRr2eNITx4oC8oXbtydW56bu3qNTEiMzumRnAPRtDBrnQw4haTfMMVRXcHwgZiyYhjMYbQYNSaYT300MNomvziM9dutKnpwWWOydBsT3eXElGgUyD72GLIErxRm3Jg7Q+VN4chDhxEbcJ6rwg0MczQseSv90gpXYBQkM7Pvffdd7v9pntSOSHKdPc3f/MtqJpmkVLvFxu0z27RERN37NrDRT3Ljrj0CoKeBLQP8GhCgXmrXwTdu0NkMRkDByGS5di/zsZ4CnxsNEeKywENtTXr1uHZRWA6AIxBdjp10SNOFCqLm4CJwEFUQtakWGPgHlOLqbR3ZUQcNeVimCF51qSgCAbM5vkwgpcvXeJ92KMyUQwdGckCTyPQWGWKTE652pRMxWoXWC1vbDbASZso6519/etfB34i/oKMoCMaOoL1+UthrlaFxG1Xt6xUkRhhp3G3fIN9cS5M4uvPw4q+bt/qyi0o1e81fGA+4P1Dh9HcuWe31aj2/0lPUp+pGZNCbv6yyjZl2RKnLs5pklh9/siD+1wAMm5cffCufUFM1PgWd3Yzl0DJrXlK6kIqq17buoHUAMEPsj/4wQ/cmu7oz9mpybnZqbysTDTNy2aFi5Yt7gghiDiUIrHOA6xARCPpFpDzxvSMFPsDbFbQQllMtS7XdbETs4vFFdV5JeVLm1bs2n1PTl7+ne6u/Lzsdw+81bik9p6d2/7o33/1oYf3OQMUGhyW5XMrna4PDx/6d//u34kZ9Hvh/HmGxCVZiEsDbMcUVgw2WyarajejePDguxbJsLEjx0/oEus7udOwsytM0bqYdjX/6u81A7Nv3z50TMMyG71xIdFRB8otLS0z+kUFGGDkGui3O9slhh6N2wosztRV12iak51PTc3O9A8O8DJO+uxnfwXN8ZExaIBF00rgVyO+e/Ag+3/koQcZngTsbdHVzckVBwQ0b0MLsmjh8SnPOh7M1ewQHhw8EOMDYxN+c3LzjeKXlJZJw5dR48vcVj3EwHAbTZdy2RgTuueePQ/cv0f98ovXf+nWlHfeOSjErVurY7AEz48+9oi83//+37sfRi2+bfsW7Q9jF3gDCGehUykTkwhXvcJTlECZPXs2dk5HRsDwwMj54KnTJ1Qiw4NDdqjTC8fXCQnZJyaBbO+yvCTFOVPhXAbsDbU4ZN+CAbPvIHV6LMexvdgzgloGdtF89PGP3bzVJnQcPvSBwMv0pB8bGRKBhXGNPJNTuKXKnHBh0+yqtWs4iJSYoVMuqQ8AfGmYASvSDCK+Fo8WkzEcS4Bgxfh1Wn3uJhuN0tOy9RLZj3iSmRmaHZ093TrBrFq7h21o24mHiMe6n2OSi18Ah4zk9UadZQmWB8YpODBa6e2xodkjx45hz6JwdqUzDBBXyvprgYOy0KdxakXcS+1v7GmVas2LVKRWtF9d5Of8MbfRIYtziqNQ6f0KfAAq1N+k8ioDKfyZHByAgCuseuOrUhi2QukRMiIPU/TSwm6jP5Z0Y1iDTxb2w7aRwjaNOA2CfhFRnOyqAzWFCIk3BkNqjCkdV4TCNg4pQnaGyssSeUN7SV5/KQvauIpVlWTMEqtMwq+IaC1XVZQxAEKRcXZ6xktLVz3DXKF61ShE3Mhy/vy5pub6DRta0aedOHOlKWQoUNOfZ6Ej/bThGCu7XZxiZX99o2d8mrbFsF8x6Stx+LKgRygqYBvek91Ni/o8ttkAhI5AJFAjZbRYFDIGoiohqV4hb9IwHBudFMxhjiYxeZD34MUt/XJ/EmGVmkBke7rei41GEivaUcV4hhLGzpw5J6NNT4jrgUiAbeuc3dde5uqY5MPFkOXL7Afb6i/iYJ5SCC6Je99dP0WQl156iY/gX+tf6aGvkszYAAT+isCVVgqbLCsUUW8w/sBed4fYqFyupHnJGKRMZAknupLFMQNHjhw28+yZ8eOfgzjQhYJ6uq3sMPg7xU9BhxmrMww9WEBo+J7qVZHG76S0h1bou9XeoeeDQ4ipVqIB+AtSzQMyQkBoBYWyIAMoyFMEw/AGk6RGlqH6FS/e+MossUodniXz7L1CpQE4rvSqYJibG0Y/DccgeOLEMX8dhyMKmSJDln0qfWIizAaktjaHKUg5VcZogcNv3mhZ4ole2QQUNAWAZZlyTUU4ERmaWLEplC20d3VpiJj6dNqpCQ5XbGLOfgjb9eyVUnkYK2DxPNYEPVPQfmYTDcvCyfrGT/1k355IZ0eoAwxmJ0wehbUoqn++Bw6lo7V//37bsclskRmz4Ni6+4Cub1yGMiWRf3ljWOB47txFoN9suy0vy1DtGeZJkDUDNe/2TSlZhgHOmdlpx9s598YsRNu1q1pvau6Bgf7Xfv4K7AQUUCQhNSxtYlsqXUqCGr3Gyph1kt2cGgDVxEDr7u224kjLkkTCGXPEG8XDit2Y61cLCoKCKQ0xkeXNYYoAP0KGdXIoR4eZcYR5CJELoEZfzFK0+Xd2BhaHKwkpTNwciD3NzsoEbENjvYk84QaHLSuD7i2LKi6qMD0CQzrFmIlRClVhc3gCappIDDQJ2L0Dns6cPGNuGs7Ghv1lLkQTSmhEHc92BVb1LqcSKINai0u2bt+OPdya9jJWvbypSbLr128A4ZOfehbabgEno0aANR5ToccVFiCyQi8hwwdoyjAbe2M5hpG4B6w8w9aqO9USRWNAqIWPMMEJ8YZzH5x7ySZDTE9ZcFqTm7rtyxTsYrVx69btGCwU51Y7iRUBHPjDdt36jSoGgnj2Bg8YQ4oJKV0cYT9AgICCAF6YF7bEmS+hepAyMAaJJfhjzxpifEqAfkA1qVNVe4BFVhps9yZ7TpiT2nHpkjo26Sd/c62ay3Y5yNJfvvmmEtX6IqwHtgclPm+IDpP6XQrlqvCHgxs35NV6owIcMjmwQw9NssBWocTxF0twuMfRm3v2dLSHGV7o4fmtt95m51/96lclUINoKjFR4kODhdjHrKn385//3IlSjz38iJnMkuJC5TYtbzCANDnu9oAwoGXJkpVVU9Nz2TmlXd1hoBfaToWjhd67A8K0wSEeF09iUUMwZidCVFZWpCyoq2rLi7WVz/zu7/zb6srSbgPMI4NNDaHxGhqs5o4KSgx0Ob6fScxPhZC6vLkFgFRALtp88aXnrSU1eGx1vxEHZ2nPzkxa+275n9rO/hPCOmqPgBr2eBPKAKh6t3iRffI4LxE0famtyw17B0cn51ILKqp1A0qr6vY98mhFlYH5rLC8aHz03Ilj3R1t7kZbvXKFReeoRVtF3+r/Hdu3MicuSXfmZ4RQ2mMqZlEMw4jZBmCsjaRNcYBm9TfImG1tivO4hsdfffXVlatWU5zqwYj48RNH1WiggKdBBIpWBC07eohfbN68RRxGiklQojnxj378Y5xFB0Av2vQ6mV575VXupu8nb09fr2NAhaaPPP64G53RrCyr4CZULPv9999H6a+/9prn3//S70nPYEiXmR4uhGJmfH9iOix1YOSajHZvi8M2H+NfbWraipiaU6orGUNdlZbZ09tXUFhEZZQl4OPTM1vVGj5+3OaNNE03AQ3+2Fi7ds2IQbqBPquHja0YuVf61i1hDbQHM8QQ/va3/8Y9cQ79+L/+7z9Fp+162H3IR5g9jzMASavmRX3FJy3zTeEItg478maP0zyXLSMOni2OJ4jjdzFs7bmx/7a2G4Lbd771bYf/iLQal0Bmqz5EM4fJjjSv6Xc+ubXUDhDGo17AHpr/439845577nMMiEOn8Pz8T5+Tfu3a1ZA5efwoNuxeoFnHvcFZ3D585MN1azeyT4mVC2EOLoHoSjWEijUI/XJ2z2vWrtUMOHn6FHsgkZU4EHCMAya7OnupNTfPqWzF4RwgQX9memFhXrdTB0AwYefQIBTmxcAIGsxpSrwV5EVgzxfPn8OzmUbI4AF9m+wOf3h+zdp6daL4IKOtSngbHgqbCNkpH4SPEhkzOljFvwqO1fEL6uYCChVLy4z4jk/ZP02PPtggsigkL4JqHIYn6spFWOKghkMaVLkIYoomNfYIQoksygPEiA+0pKAS67wNh2FVFvQlMIJGFvBqUKJJTcEZ5+YEc4wBCQVmiSxUWR1WPWCPtfhIQyKmxXrxZkYLZWBiGJ/y0h3xMawUZoCyeOg9hrWGDXgZ7GDesogtsmgZwS24ngZiWIvnZL+wFl+40OTctXub9LDiFOp5/qXpjL5Fm5LhCmVrGtkPhuHTfacP2owZQawqXV4omdyTRkbokVoPE8hcUoRRlsDoOVJTf6lo/KXrnNxs0BGOSSR0ChfmU4mMSdFAKwXnPEu5Khf8oA/kEMSSnVqmhjTb6Ncb3Af3Ty4BwJs2jJdOelfbYkxZtGnEwaJKS54QpETIK0IWNgxtdiUNFSglDF0tLJw9f05wfuPNNxFUutY8xiSmZSnRRxkCQp8oRExvCnPCWecgohpLgLR/PMOHJ8oiPcXZGaQIOnKdpdWha9eFjWfAKS0pp2UDB9Bg7YlFpWCVtZBOC9CBBPfes/vSpXB6jXKt4GUqZm6ZnMgQe4MoW2UAN6zSvrU5GkISI6IZBmRyKdobJbJMPCuUUSmUvbFzaTAPsdGxqfKyMMDHPtkYfMjIMuVFQUYvDUVSUFWY/Qu7vRmhFU1K37CxlbCqaWlQQ/Pq1Sv8PXV5dViN5K2uM1awqLUtg84rIYeGBylGTgYMZWNsS6pqNCXIaQBQYyUjM9sMANt1Bcm8E0NUwTYHuXYzLZz24biG0qJ8qwfQVATLxrRRCfiuWdUiRhgy57fhZNEwi2QqajgvM9/AGNTMOAPILAE/wTfcLc/SdSPqnj27yEbNzq6wqZEF6CXzAff8AN1daSDW9mUlmmKY1wEgo9YMaJbWLUFBxwO+V69dMaZg6p/sTgo37khJv/3b/7a0pMjiVGsVDMlv2brdQInskNH+9mGRvsbFJB6YhR6dwEFA3YmW1Sbv7kisaJyrjPUaKY+SSG1qzk9wpznHDglJhcVhhY9lzeyej0HbVAaPZXAoMGnSxZEAZ2ObB3TJM/1xAzsj9AHEOxMj1vNoLiRnrttpWkkQ7U9KMVx0/Vq72zkUGtSXbf1D6o226yo28wOsVjeA3UgJTyC4tLW7o7u8tIxvkFRioGkjSgAZS411zXUFeSMM2YBm8aUrlxXtKBVZDC5yreeee6FuyRIzJRYZf+KpT3JUk0NIuYX65o1rH7z7TmZG2IRHUkNxf/VXf+VBMIKqCkAIww/VcFSICdY6AJyB4iwElAyfUioaezTLVYJFJfsNGICDZX7ls5/9xRuvaVoJNKxIehU2tCEAVSMv6HuABhg5iU3A7AQ/Gtb0RVj0BUGSCg0YUIRhP7yBAgi93c5FsWp8jo3xLvICXFOemDgxeEnLanrGgPjFy5dldPZFRVk5DCXgWW7D49hUgE55WSkPp2KuZ0+fDoDdL5qCWPLBqu4H3gR9shNQqwvOiGs2UYEEnclmd8aDJubJhXkEpSGOl4CSF6uMENRXrl1mkzt37AYaAJUrhjggFSljrsYnvORrmKcF8rrpWWODsG/vf9Mq9iee+JhJT8Sdqhn6FA7fGRt1+wdnQSEvv7jv7lhDQ9NguB47xaEQulGd3XdkX9e6AU2TlPxd9EHBnOHY6HButk5LpWGFsdGhL3/pt80IW1Xgwsza6qq5xVln9BCtqnqJPkNRcQkBdQDUE64FRgEg0DAaZPbAKL7j+SnGcIMTftLTFjWC5xcMN7hqL0QPRkiz2uAG74z7h0aA5oergMNgXhhv87F2KGUmBNOJ2ZSplPT5jNyxmYW80srmlVajtELVFNbU+ND1yxeOHzn8a5971iV5AIQ50RmV2ppRlZeVIMUqVGaOgNSsFG2IrANgfUJTuFBm/OD7h7TJbPnFvM0GImHdsnqS3mhrl3LJUkaxLNnMOp+aJgo1au+yZ1Mflpsjzk1277pH0evWtbIomuIsrE7EdmEBhB3iyUf0Z7x//dWfO3UHcXBZRmWhqqaeI7U1EFVU69e2aglh1Tk2WzZv+va3v40x6U8cO6rRsHRZnUwWEaFDfJIyeJ7CqIwpis8M7P/4k//3j//oC15yFkWzLtSYHAPj8iqDicmw5tBXBsYOGbPWv1inMcqvySK9xpMasbOzo6gw1/HnTriXzKpXm4zff++wUsB47PhRHn35cucXvvBJ0yOuGPv+P/zjZz79K8EaU1ONktKCWmPN6nUWvdC4EjVT8PyTn/wIb8DRS7F+BhHQAc3KImjreJPRygbdm4MHD0DeXSgmzWyJDrpI1vwsWxrWzxjhA2NZWTkfN9bqb01diAkA5K1kvHH95vbtu1evWjM5NfHNb37TAjMeZ0JYMLEURNg01IVbdStLxlJldVVDfbP7CXCLPRS8hDOUMMl/QUSP3/3u9zduXGOjti6rvrlDBUhKOo1pKde0thL/rTcPeGOyi/rM6bHGppYV5mKdAlRWXqJaJAvDFhy4IZ4xwDWAHP9SDaxsVuY+Fj4RjTFTCi3Hi8C27diBJTjJK0z56+YZyayaUS7x+RHOpQGR9wqSBrB+xa1SyCiPFoJePaWwKFn8FZx9pJeAXpBi4d5TOvFFPx/Mk0j8ZDCkQFalKYSShWhcQxxge9bcC1Of+MSTCOIEOEzLiIZcWGK65lEpVF6k8Am3WzfD3hhqkhgm6guJMUwRmFEWThBnpaoDvMUlQIRCARsKlQxlFPwlpsQE4SAe7DTl+hn/y6lHEpgBILgPS9MBkFjQYEKi1ZNPfXxwuFfcqqtdAiLdLaMbjmOxA95mZbDwMGQ5lxjIO1Dbf+AAUvjBqr/EBBfrhYA+j1rPhxJpU6tDxvSMHO8l1row5Ac6jQfc6jWhs651LdkvXjzPSols1X1VpZVXE8TkLyAFDrj8hGxUomeqYUjAbGxaHmY+w7hxGe1bcaRcqEqs5tXNWLNmLcpwoziBCxIjAy7gCzuJycV+eAHRfLCkSkWEUD4YwL/IHVZ6d3aKBno46BAEG1oIyMpCp5J5g5SKTMZlNUsZEqgluNF2LVa7LFzMhwMQCJUsNgknNd1uv/Xgg3vv9IZ1m/Rihk1vQZuNONohuLJUG1nYKkhNTVjb1R5//CPY8NIFHazlxvU2aapr65ToJZsxA0B35GUh1nRIo+mFJiY1YtmPX4kvVxRc6T5A8z4OAlIcSyamXKCTTGIPRJbGMxOievJa/ocgXcCh1z66MN0UTojWMtFOM+CrIMOX7BwRESa1qaYKCbz6rn6CnVrRm8T606Ifrt/QSsHmLu2cG+q907y8yW2d2hNW8SrbutUZ9+Q5G2TcyMNkCAy2/ya+HWTzNSXMNPmwGYjE9h8zdQfXQphXCsGOMtasXmnY/uyps1YEsULyE88mYNUMAbCOw3PnzwIUKaNoHEAte/T4EUZjfB1Ba85kSUYWK40DoeCUCY0PL1kYuHU4d+7YgSawYq2vyXjpwvnTZ05u3brZlENdXa1mjV+dGcJ2iTm/aJdYWOPoJTKu2ASFj6/oMwp/6RWgZ8+cV/0UlxaRmp/Qt9gt1sSxOublY9GgFQhnTp6yg8J7TvXY4x+hGNQIZQW2CPWvWtduZLsUpqMVi9B6vHjhMlPgcuRlDRWVZTaVB07yckpKi8HikFBHPsFE99Tsd3+vfnaYu9QApc18h7EmNxe+8srP8GPEesPGjRjgaezJOjAXAHF4P7E5pZNUZFQ3iym6H+IFjesdSa82RVP1luPO14xsjQlD3WoRbmnBn0srv/cPf79p/caHH3tUcxyYhn/sO2i7fqWj/RZ+BGJDwo899jizFm0JpUOvOLUyspg0lWZBBYMBJgtBGQ+emSjGmDgjwafEukMA5My32m9a+E3XzE+McNYKvUhDEQzMy+QMkk6lgyLGoJGxCdiyEBLBgYC+0iAxFaF06uDtAAeCRsD4SNiFJoFhA2dP+YsfNaV2Dx5MrdI4JUrAbklhCY2Fri6boy8JaNNxkImXhSvPnIXPtJYm8+YSM1FDQpxRMtxC0kneOOGoQgzECEId2jqqee7AZnRvIEBG9RMkTQSLBSiSxUu5lIsUgvAxB6p5BG0Mo+aDW/BD1dwUc7KKmuWQFxHMoABAzuMKD+PQ3/jGN8qs+i8qEiV12k2405chfFyA1ECOmwBrahut1TGXQQtGRHBoPz/DxrbOV3NTmL8yW8Mr9Q8NO5hD0Oaw1amuturXf+3zvT0d6ampPFGvA89ZuXnWTlof745xPFseY47HEUYYQx8C6jY7vOtqqiwvXJid0aAQY7QySoWL5PJBLquvIPxa3YMrZ1SLGzb1Rlh0u9CRCfg5AocbA8IWhan0rPzZlIzekan59Ny84sqFtIzWTZu1mzVdXBhy907H8FB/hamQghzblWEIPeahm8c2li1ZqnXLszBpFT55jTJAGLe66/Ozs0xdc4E7XDh3YXZ+TjNux45dyxobXn3ltQ+PHvkP/+E/hng1Nx8Wohw88PAj+yxpMPaPmha5iuGP//iPWY61+OYK7rvv/ugRbEBbQSvKpApLNstLossXQ8P0kQcf8oZQ5y9dVBkr0UCyAZp/+qd/0r28daPNTNwXvvAFaVQViLSuXae+9PW99w+qfpjQu+8c0I+N9ZmMTEvw54/AJ7i2uMTE9MY4iAbZa6+9ZgQdCA59Lyop1QH4y7/8y6985StcyUcY0QFgGKxaY4IlyItbsHz2s7/iEjftzGPHQi8FBXUcq66tqfPXCl0rNvG8Y8c2zvW//af/uHnT1o985KOc2mIbt/CY/Nm0ZbMFnNaoGG2leifRHT7ygSHurdu2Oe/fsgmNE++NSTHO/FwTs6bpw5pdO0kN/zM5ItuZ5oQJWoiB8fixk17C5Mixo1ypqakZMxpcQor67vzFCy68s7nlxedfKCgsvv9+x4nU/8Vf/IVh1Hv33KdVZqWTQZPf/uIX1Ai6ynSkoa/rbGBI7O0bCCsuiM87BSUg8ynxXIgjqXEQSheKTS/7VVXrjG61GPSwCvbBwaH79+19+6137KvUYHKtmyaFLfhsUju7q6vT0Rq7du9QNPehIL4v7imCIjRuEBFFLXYSasjrXCNRXVViBmU++NL8G2/+UgwkaUNyybcKSClWerC3pUuWsT09/Dh6JRn67D+GF+4gDZrKVZxniZVSUVl9s/22iyNtBdZf0SN1UZ1V45vWb7h647oL7Bxe5PhaE032BJr346fQQCFpfIfTlkAk2nijIDHKUIhgK1Yr3aEX9Q0afHeLC4rbbrd13OowHldeUm5avqmh6eyFs6VFpdt3bRfDjxw/srpl9aWrVwQTzsiewcIUxVUP6KsFBFvRD88itKEuShcYCetXxwkIXz2dXXcHB6orKpevaPbGc/2Spep3+y7SszLNvRgEnZnS0g39GWTxSXE6AJo2uKWplqawCpo7U7HaTQNM64sbWrXL3w08Kc6eV8agDhWpRHBIqkfEAd6hph5RiSc3yVCxzNjGpLrAmJQFilhVyZrfkwZcqum9Dz7EGjU8lGj4T+nSaKHRFKjNAODTUe9I+WrF192+wbPnL/QbdiwpNj7or0rcZTtORnZ+ifOyLHDt7uxy1pdRFyOAZj5dNjIzOXXi9KnrV66nhBtXCjQB165yBUomnVqWaVWZHVfWe1sEUFoSGACyOKMOVQcRluw8wnvI48RXEBHZEV6WhjgikHQY5oySMQnIaGAIcayCSTMGVoqUn8y5kNTt5hrEagpdsieeeNJSCBbNotRKlGLEFjX4u/Pr3QPvqCWVpb7Iy843eKd1jaCV7FLqkrFGECnLA952bN+iWcuJrHG9fbsDzdJkw5i1wwDnDllJz4EhqWtEG3W32CXuYZWAhOWJcgXDSA1r0lgZEYAfY47BZTrVLBFs6ZHIzo5xW5I0ZBQ5yYiC7MKIXNEwOCOeuR4ihn0VJIzYZcdyKJcHqSZkYZapD2wLxwuCOEYfkigDHPKIjGT2nqjUg5yKdnFh1sK12Lo1twJBetUCQ0EaMl+5erW/f0AZvnJjrNiqI72v6CgLx6w/IH7vHgeBmwSQhrY+/cwzjHuwr9dLyUhCu/r0cvlVLEZEEGH3cKeqqeQCLBM0wNVqD0GqsR4bBti0bGDqDFMUksP1w2E4oQ+WkW2ZNUABZ7nOsvol6OufC8cfHH7fncC1dTXa06+99qoz/pTroPGZ2UV98L47vRp/6gA1B0QQnxwPDUcnt4gdKhLH8xtNNDaTYsguOTJIWGEQFHzf3gfYt8Pj2A0QTJMN9g/pJkHAWrCr12+o6tQKQeU2QN/pVmHIS9IYnZViWooWKFj7TMXGquwVOXH8lAgOZz6s0oWJvc5sPS3NBOIIC3PiIX07NcXJiazH+JaIw9bZsuocM8alsHfj5k2WZJGGghiNEQ4vAY4HJoJJ0Kmx/Cq7slCWV0+ajjDJvJYsq9PahkmI78lxEHbUKPHd99+zvMqZFTQuAMFTRWtb4a2bN2VkKoY93Nz5uc99zhplsUxBaWnpKBBH6S6ftvGU0QsTxpZZJmaMVDl5UWgmOG61KZF1GgYRAAiZs+dOW9OthWE5svMZuZz30KMmUjMPwYLg8sqIAUaiWSk7rEin3iJpHNHHLSMUTGUUi9E5cGD/2lXhYH79AcHd6nGzDcARp/DDsdGnJqT4hYyrV688fuqYBS3yKoIN4MSvQJZMQZcuXdZkNw6UjMRU6XA1NoRR1fKKUngyAIPHhsFwq2Pj/0Zk5YKtCK4IZ8sWFHGQsJJBB8wMG85FfDtoSadQxgABOgI4fXk5EZYrhB3DfoUnFaPvV0EELBAQMpw4CQe+gysJgGATf2pa2ObF+3zFmA4zDqnpxLHjDI+KQ4xbTFVjafDJSxeskVkqCIekPnQ4DOVGP0IBw9p8TNrOeX3yTz3zSQ547colm/JtPt61ayeytvVbRlVeWWklCf8+d/5iVka2Y9dlF6BsWBTTdSFM4i3OzpiUMOsfNhqFZYdmNdHOnrcQ0ZVFSVUhgBDTiH+Ia0mjAZEY3zwkyR2mO29gbG4xc2Y+Y3Iuzb+puXQXBdcua3SkvYgRFl/k5YyNDGrC1VSXLc6Pmldjb2Mj47ZHjw0b8AvbuXygqunPVq1WN31uIPZuX+hRG/wF70JqSndHp80ALGFly2ooWWLn2bQY6ey8tG9EY/2SI49XLI8349K43TJkoUrIW3tjUg7Umt3A1IwrMaTUdnPNylW2NKhpxkdGNSL1eXCipa76ZAAP7N0r+7W2GzxLn22gd/ypJx+kLLr2V2TOzwlXtLJwe8j0B4hmgoIxE2RyZtZt7VTMzqlbuUKiFhifgi1T8Z47BCLJBRpiRX5B0Z//+Z87EgcgZEdEM4tniXgmDVTbcrErtoRVz5BhM5zl93//9z3EytKvLMfhsJqn4hg718cWLqxqNfTzwvMvvfrKq3v37d3iythwOk2G0SzLSk6cOi7S9vX3mtJ84smPDw0Mqhd0D3iHvR81S+rcasMRTBcIy+++e1A1ZJpR9cHRvGcqYtG7777vrNXoVmQkEQH5FIOBACTZZ11NzS/feuuss8mHR3//K189ePA97W9jMapFtej55IZBS9SAgyxSb/3yTYbkHoCMrExV5MCg42JC05ya+DVhjVtp8SNiQkadSLMQpjuo8l2NIWwwEip++OFHTcVjkhlTk9MYAIU3RMzM29m3ddNmg3/KxTxs/aVTX+kXP8r1bIUSd7CRhrzKOnfhws5tO4+fOt7X09fe1YkryQgrAiNLKYBiIYkPLdqgb3DXeyrDJOWKIazFXxIJC0phsSirNTBmkM5EilWmKmJOOj45YeT7gX17267fcD6VWtU9Fdx59do19mZoXHKTGL25hniCJjrsRDyHJInQBJH6xaoPejS/ykNd0zc4PNC8fIV5wJGh0aqaSl3/8cmx8tKKgqL8s6fP1dRVd3f2aM466d7oOctnnGIUGUOoTY76QBDnKAtZiiAvwZ1hKIHV/Or6wf7RFSsbW5pXWOuYlZGpZg/3wpp8NPM4Pxdu1Cm0UcQlJHNiJvvHPw496BZ6ABFSOn6Wohn2Ig6/MOrMNaBtblCaPXvuBSD2OIIQQXANWZWRyAkHu6DNIsJH5wQptYbEFCSGq6QsIOQjrEV2qmH8+hI3b95iY2o0dFAjnbz2+un5RDp4wBi/BkJXd8/5i5cMYI+6aNKSmwceGLcB1x5Ta4PDCs9pc8CmwhZtPLAuRVxIPpyaNmFCv8bszYOppnft2EmbotPYxHhBbmF2XpbmNU/UInfCuXxYAj7Bo6n7S7lww5V5bzwzwiXL6jWsVWOMjSXHboPoIVlc88NHMM9ik1ovnH1cW2d5Rf7lCxf5FI9++OEHVbKatAZrhFPCAsGqWV7gV0vWjxw+xGeZq/iwpGaJNqPxBRDRBbIZmWGmjuvFFhHzyM3L0ufEicaYi/lMjmlRmC6QS8PYNn1WoTuHyYH+QTMMorp1HwqVxYg06YjmrzA+NDxgMWFeftjiohTEoWGxroFRcmlxnT59Xi/CQJO8OksUFBjIDdvJQEfXeODswqMD9NmAnX5QspCSruGpMkJHJ9O4edKzmmMzqR/bey8qfhbL8AEyidgoZ/DeJ77xkzcu1S3RynSYZbJTm5FpFErvJ0xgGkz4IBKb4zOjE5MGY3WXEJHGrwpCHDUfTBjUUS6H8at5Z02Bgpxst5EzbgnQYUygiaDjVmMlflVdKdeMjB0qTp427A1N92QZkDZUSWD8SGkJTehMj47rJ5w9ex6aOoYGhRWqn21Zs/RNyxt1A260XdmyZZNRQzvMjJ2Hmj4vf3h0vLis0nKu40ePaiy6H0ArxE2bsmuICxnz4e7rNPcfswl3SbqadP+Bg2mp6YyVCWpqcFQTI7yLKXA24YyBOreUMRmyshD17NkLFuX5imFhnVz6AFA1DCYigAsUdqwJ64IsxDSEHaRgAZKfHJ0hmltuBW3VMIOwd1mgpEDtA21Hi3dXrlg1eLefcTMOAOLKsAd/4+HCmXuO/TWhwIVUwH4tLApLTejIvhmGSC4F0al2AEkxw9RwCwHOY9ukqwa03lgCkcV9acCCOJXJwgTUNMQRv4TRxA3CjT+inq8///nrnPCZT35aVWelo5EJqyuFMJJu3bJd+8B5KTZYcTZXKGltCG16GrNzC3DgG7zILkMPPoozSqp3eydMb4U9vsyD9eJf34a8Wkh4A4uXiiMIHkRSSDIS5od/uWAIB+KzNBUq0CSWhe6oQKX+2qsv4x+TEKBKdJiomQoJECE4Dj0IN6ooS9Sy8tINW5LIQAIKIdCkZXJagys4NJQgQDvczXtxSnZH2FmQ5UheEjlTCIZaJAoywMrpNCJJQSiyhzNeu+8urV/uCKbyskrNVh9dWXLhyjQuNc3NJ2tgUhfjjIH6qe1aW0tL2PeGSX0kXsZZQEQi2WlK2CUaSDUvNNd+57f/rdLJwkLAiHMrklmI9LQQGyKkY3V0jaYjX3wwKY3EVKbaY3isAn252CqsYMsY2IYpbgwYJ/vP//vX3YN148Y1A+ua8fXJUScaNw4/05AyHmOxjpXbuTnGpYqHBkMrp6er87vf/rYpCXHDSm5Ti+mLRvRVS5PuGcSMDoDZSHl9sMQLhCAP8gLfA8ZwhWF8hgRpC/nZodpyTMvsYvrkbJr4ZRbADeAq9uYVK1s3bqAjocNkgdpifLQ/PW18/5uvTU9MueS1oqzS+ZtOkrDugptAwHJ2julgbK5hLab9vucuXOFlRIYwM+PvYKRQgYKleUYf2r5q6d7uaLdkSf0HQ9EATfEHhjyCJYNUfOc1rNT4OiPUSKwpr2xZseK5559nIdboI6UDwPiNOEB75apVEFAz6Txcb+stzE/ZvW3zxtZ1HFwRSBmMYDa6ecwYIGod4HhWFmNoWb0qKzv/8JEP6U6h+ipCBL3Di4Ghz50T2y4SNGTHg/OmEFTn+dX6JZIydWgAAW80Anl/Vf/ohPhTWMT89IXYm5CIsmki/Ihs0ggj7JMC7XZ4+umnFXH82OnnnnvOS6NRMQ5gQDPRXYTMTHDTZwAy10O8o73dAMTdcA5mGQvkI+irv6Gtg/T005/AnvFv5oFnZwkI2q4Yy83Ni9WQmAAHWuWbHjis91hSTyW3NGxxTJBTp3ifEskuAR7cSU40C9Iko0H2v3F9aOvwU7NAZiBtjyGa9HgmKYLgJZGJFPap0YYgtClIAGjv6HS0ESViA8iM/HrbLVhJSRfxIjBeKTh39/bu2LHdJmA73DCgiBj3GDx78BcgKIjzVEMFAiDknaZhIACFH/7wh4jTjqYGYPEAFsbg2XuhgAj2IU+ZrAr77cNcH6smHWDhw6IYqrDgL1+jdNmlcQc5ZtgtNVEfBSkaXJD3kQAPiEvgp7jZwGw5In4iI6lR88EDX4CJoI0gaiCSd1VzGIXBDyIClyJ84IkxzNAIJhn5j3/8Yy0kg7M6JI4BQEFx0kuJCPpMgrB40xwnu4wQI7JVzoKkNJ5pQUxmpZFbhcooGaOSUQKbRM2UXrlyGbeMJ/Iv3viqHeYrf5HXfYt04auhDSZnbCcZ9jLzr2tZE4tmbwBU3dM1eDGsdHH79Klz5CWjZLYYkQJxVmezFnxUiFglF4+TC+da7CIJX5ZeMolVrBan6blhBtvqZahCCQJj4QT32camFcBHAYBRTSRlGBgQwZQONCD46vnapct0hFVE/JWAWQoggFK6UiRWruzszSCsCGOTDGboi1maaVGWX5mZUlSOqhvg4JmRmHMoKnIsSOi1wo1emBk/UgFRliIUSiJoEJm1O53CHJpT1AQEetm5bbsAS3aYmNOgJjzjx8IHisPqwsJ869rVWzZtvHr9GsDNNkB7dDy0efCD4dGxcW8kVhauNF/nw0DuJKws7mhobPKSKBLf6RugC9FbuQ5xcQS9XMRsbAiLzRBnV9Z2cr3o2kY3SAR/4mvKembYEFPfRWyhiixkWIVkPjgnL95Qk9JfNZdRm8TwzVNpl4bVCnwXkpBnYACXRSw1JuiIsGDD+EMIZ0ChPx8CeVZAtGOASgBfnxAFFsIkiL2WIOju7RsyK5lsxDTQbFcdZVvMWlJeoeBQ9sTEzfb24uSUIl9FYUwgSMj8vNy+3jtMSn07Ouk44XAQocG8mYnx+qVLAnaJ+wEUl9SMQ5GR0zJNKACIVJ41pLwEHUsApQmUdevW8HCIsHhasWzRCKCoZFhau+fd9w6hzDTJ4quxRkcb6TM89NA+081WfzodyOYb7dr56TF3GOs8pKZkaBSi9vabb1HYji1bhBsnoLPjjJQiABpVsqAfQRVzOLGuN6xy5iqW4GsZmzgWUq2l1vonL3jFHZuk2Sg3Ut+fPnMGt/ChY6ZcXsG8fUpQALJk1pkIBGyXt9Dr8MiYKSkOuXbdOgs1xCvdzYuXrxjy1JMxNGcLmtU4dnQbaJHFEl5al97cHE5o1svTZ8+oMlkhKOydUffjQXzZsnUHlngjfkiEYTjTl/oDvPRCF1wo1sTXb1wztnfo0Hs4j07C6wCCPnOkJvYAK0KpKanMV3nVTRr37e23NKR2795puOTadYunjb7XmAdwMkBDQ72xAccDK9RCORwa1QYpghrET3/yU7waNZS1qGIU85MErIt7sAE+I3aQVEzBmNjhw/zYnjccic2IyFDWPREvSCqjARtdAudXkuKDD8LhLWKIBRjsf8WKvQI3BDTLtBXQlxdXsDIMyVepPnJIQNWngEV90G5sbhDrXUjk7LuVLc50683LzVY967uyQxHn0UcfMQ8AMRuzNPXuv+d+s0lI6XDayY2+SRtfZWQAVZU1pOApFBTGFxfD7nwoWTiBW+/7hoaNbegMtN++KfaYomVvCjL0xQCYwQMP7LWRRmberUH26KOPaqFSEFi89BD9ndVZxQFnqwKefPJJdig78L136qVxdzUQ94EM2zBjIzuNhAi1EKKqj6/CiNIphSKoHnue/UR8PADcS54VGls322COpgQYY11GN+idLdGyN5kuXEz2QztK308AwQnQKK4gL3QzQrbQyldUurb8nJkAK8GMP+X+c4s/UgMFBqTx1SfyxgC8R8QC5Tlz+S4zSDOkZTLfYaDJdEHqrD1S3V237erzT8Y4g3fjxu3TJ99dnJ184mOPL6tv7GrvsOaHfjNy0hYWZ0ZGTYQ6j6U46ZV10LjQr6CunjvDSdgkO+t1MB/Xs4E+r6DQqTL2XBr+d4hEY1OzsdXnnn9Bcdu37/AX293dPYDShQOLzRumj1SZpHYwiCH4+qX1N65fYyr8NFTq166SIn0mLMM4evwYjWgTqC/tKOCev/nrz3z728/tNbw0PVk6N4ug2XlHNOow1C5dYivXm794U3zYsn0bGwM4q6bNjs478irCGlxGTsVCotlz7sY+2QmTYEislGrUOgTUxNSgITiXiZjTOO3IKwtWBUlCsT2u6oMUJqOHIn7o0Pt0rR3PKrBBfWp0NHkf+2GiTqEzeCTCCFbKVbqXTJFEfBw/scbxnjhnTp00jVZWWWHBiRUmfnITiPX4jhe0edHtyKzU2lSc46SotBAap86c4ctK7wxXF83WJD1kp9SZV1q3fr2Y8OprrzksbMOmTeqIV179Bc7ZkpDIerHELMlorzcZHWWBc3qEIcbI4qUFFaKHuPHKK7+org5bTr3HRoh+yfmVYAcU7wCLVgg9Cs5eYl6HwbQDqIlGds6IoJT07o0i7AOREhRyKZcgAjgoVOKIGO/3FU0tJC0/XbLIlb4H5vEgCPgLdhSQRYQGaRkOmLR6jgdJqVzalEyU0DVFmbrJTtEUgQJA5JVFcdH7/CojEYCGQyzxDgFKRY8fsigxRgO/yogxL+HGGKiG6pkWImRHhFwSoAxtUogtzFWhuPKhI7/yAnar6mFghJVLRayRlIwDhLhENNxSHGoKkkBBXnr211dSG/LDj69Kx4lcSox8+us9wbGhOJgQkLxwwydmPHujmpNSEd3dXVnZWTgxi0Vq+kHZxm7WEqGmFPYPbQCiGbWArJ4kLZPRVLBTXzyQkftwYNDhgXLlYhthYXByljd48al09SD6BEGQdYnhHsyngTG0EMKo5aJqS8vKA3WsdJBAqrDTjay4za48gAIppfjgBx3yMk4+OD8dVq5He4u/KtqHIKSAg4+CoIEaDjXMNHWwRHaQKlEuWmAV5kAwhrg61684VBvaczIcFv0WEkF9xNIwwDCEI0RwhYgstAAlJygo1+gwWBBUtEhLm7Qmu4w+uIULjaBpfRk3d46hFqA2VU/PGX7HbolDahn7BwZRMMzPcqzd0DCzOUehlsYhDgRpTPBS7mJqsFgHdVGifTv4t4jIX+s7KAtBkKrJpUSfman9CYh5Vuq9XhmyXNgeITJiHrNz9wABAABJREFUL4YFD0yF9hEBFAwZlYVhfEs9vnvPToPX+qHYMDETduQmB3b7SmUy8kcPFlZonzJ7aGf4jR1HCeHiZ7pRDGhghImobwl8NZ81Mzczftf6t2mV58DdAdM/FgplZi9o9XYb+7/VXre0rqqiyrGI7rW1zhIt0KDDPnyoNqFjojZUYKyTbrypqyvDjd17DjZXd9MlNkBD5bLTjbapIS7SchjOHy3G7n84GM6xdKW+YQkj4RIqGxnBAWLBB7iEmhgf07wzw7uutRW4kvExMrJytw3E1pX6+E63noZB/RSnZzqyxlRBcYmqucLECkttrG/45S/eED6w6hxftpKVlzPQO2BdEA7ZnBLHxsPYAEj5ErukTg0m48HXboQNXn4iQmV1jYhPdi6NlBlYL/HAQ8hoHR6prR4RiUQupXAYmgaI0SDzGBKbYGDfVps1N7dY6O8r7UbjQ8RBnyAycuz+KUQstWQubEsaivAAkMtXr6gdIY/Jbdu3MzVrgnkOcGjcQTGUBRxuIxb466vxBiJomCqCOoC8aXNYcqp/jyVVpgjOhBTBbWIdT1k6Y0TQQPQrI87PC/c26HuQV1+ZaKKAelFggoYoJqOzrr3URtQk29iK/Pq0zExvsAdYOGv0iDUw0Y5ShPecR3MavFptbJVmDVzxHNSEM+9FOu0MxXmfNBr6qExeJqRQ6U2Y+MkA8dGjx23mdpvV97733WeeMTtR6QSDF154rrGxydShKWDtXXgC0zQ9eGP00VA2DMAAODkjp1zYWhBpUSIK1n4omqaU6FcmDUmFApbUW7dusdb/+edfqKyqPHb8iB26nEJgEm3xb/8qXWv1Mga6QFl2CahpsmS6vKpKjLNsUYMPhsY8lEsLfgX4wEA/IpyFvsAPgdzWHI1+TWcv8cDejBNjiY5IhB9IIugZNStMsjIzjLBSAT7FHTGXbRh81fRkb7CVTJhm7YgIeb19d+VlGzGSMCEZMQMxL5Mgy/HDEZyAYgMmTPfs2eViXftrb1wzTjOnIpTSiAxqWmZYEnQIZbheLh8G4DMxNnrm1KnQvJ4cl96QPwexp9dwP/FFMNMdwl9mtoFGWIYWvwQ+WGKiEsQH+Pig4I1mvRG4eQtE0udMB2Razmc+P0NXxA8Td3tHLqZncB/7OlMyMudTM8qraycm5+/bc09xSVV6Zq45vVVrVn7w/nt2EKkreMoXv/jFi5fOhTOmq+y1uJuWEvZWKYUSGS3EVN7qOf5O0XATDYQXXw2Z07XRr6zsHAPt4GVamlYcDbAsHHpIaeVQCgvkHQys43Y727ZX297ZUJ2UheYUEAwtm3+XmIzG/jX0MQaKJ5/YzaH6JsZ0Yv/rf/2vAiALoRTscVhsROKA8oY6rL57973D7Z0dGtyY1zHQ2GUAnvGvRGmk9OADcMSdpMFuRQykOAjTZUvsGU1Z8EAcFLgzYPmpxHI5jY3GIcAUBd5f+7VfM4wtJbI0pRTxE1YWtqL81FMfpXFiggjNN954Q2QQgvgIV/UT/YJOShMynH15U9gECbSysiZm6b2Gx/r160Sw6poqUJuV4rOslMu7R4WP40FK/oJ5ZDEPpViiXrRa/Dd/8zd9tTlLWfyadojmAQgSg526+aBftWYunr/gpWhjbmpsYgrOkOFZyUqKtCgaRfBoaChdAtT4EX7SkgvsZCcjmsKvOQRRBTLYMCPKKmKUqE6u7rKqXp+ZnxJcAtQET7ILxeIwOmD3Xl3AnemOjNSKGheT0kuKIDtZvCEO2JUb/NGe48WU6REzhym+Yo+rUiVhY+3G6WAiGZUhCGcFRfVhEjVm41cxAf0Il68KQo0lMF0P1gjplHqPGmZIAX+2RIOyo4YlhkGiIEtBWNbIflS7/or/lOgNOlyGyDrAoAYdPXqJoPlzVYYPBrzRKoAAPqXHM8oQAwviWKL0obuh4mDGUToJ8IZ/pUiDAtHYp4+vTr3EgLoVaCHv0BB8GBitQQMddwKyTCgBDR2VrBNQDFmS3a+E9d6vsMKYjFEvZttArSBvcrLzISajLFXVFbJ4JjsdEZ+KZaEa2dHhFHJhFRtkFLc1lrgw8ZFicnj2RjAhoPcVtmGUlOofywVqbMglDa4iYgqV0huoJm4+XFVWBDpgAtmvqhUuCQTIsDQfIAhisntpMMXCEdmlwSQ7pyM4K0hrBMN0DT0Cil0UnZ6pvTq2Jrl0gpWiE3MZhSQUkDGDTyDgRwSz50q5sMIGTdEscKMsTAgyFBeMMBmVpjKYZ2flWqvIVWFIEHxu2dIaR5osXRO7ya4swhrXN+hmQw76hqG9twAPPv5bkF9o5MhnaDgsRpDSs3MdndSfkx1O94cD6Vgc7SsFVkYJgYA38V+/ggHjmeFZTUQiDq5FBw38sxwq9oB5IpBrx47QfpMMVw51Na6lluMRztxL9BWURb/KtWbCOLyjpRmbcE7k1I0r6v0HFYl8MAoyEkoNXB+69CsdePBempHRISf8LGtc1tvdW1BckB4m0VJdE+R/3heWFNp2kxvujcmzPtK14VbFWSsPiGiFA/13CUxC0BcV5BFSwDLAo31pJUBYNNveoRQsMpGgnrQ08tMNaNi0jNyYsnHIoFmPRgzKZeWlxtD9YyigYTFCrQTQ1whzbSH+PTjKza+YUT3rBoCprqZ6RUszfXz608+ctj3XrEF22PAQzgRMWayoKlf/h8lX21Pu9kEAOsaA3adHee4o9h7bGMAJlM6euUCj4MbhuQsXvTeQg7jVRKGmKS1hneZwVXj4F5m6uu7oYGAJZTIi4rAjDqD5blyNalRLOjao4Z861QH+GjOgKRej6msYw6Yy1FB2Cp5/zm5Sl3OtyvKKqbFxO3KMbMGcS4sdrh5jZz4WfboFlGGpOEHK8bjN+QthlzrrFw5i9SmjrzjkumxUMripmNlGV3enBWcsDxEB0UumghS7pFa1Dt3FWOlXTEpcXJT37Gc+rZmiegu7RJMoLORprdIOjfPS6qpwuQE2RCLHkjIM7TXRwbgUff3O734JSsRXXHePXkS+pg8OtYvClOu8pVkDsPJBDSbKwrbE+ORCVlF7L9CQiCw+Tme38tJJMnW1S+3d/PDwUavxNFzOnD1l1f4zn3raRgVrb0zyML9ryeEYoECE15GLLfFnUUBIsi/Te9B5QzSFbtm+RVcbPgRUdQrFbEPk0udxFoEIAjHiULSlqE7hKC0qoxrpycv4WaMJAc1E6bGqOaEg78limJ/URSVlmlNJW99ZB/UWkTE5CjUeDD1BEIdYUorJbt0DW5DZBqPVI0JHWYwWwmBEOcICeeBgXlehorxM9j/90z/97Gc/Cz3EY4eKf6nmORGvFKrIy0lZuFnjEFaSMCIxEBg2gn7CA7l4VqTvr1/TUlJ1EZfYAlxV0d93x8ybk1JYu2F6uqNmhqSRZDGPHR0QEMJYl8a9BtOrL79sOM2uoRAuQqt+3kKLjPRUJwKBdMZeTwNUAmh2uKKEKXrJKsQH7Pl4iM8gir/6fXLCPJKx9rBQxq4hx6pMh5PNUqZnU6YXUqfmUqqX1m/Ztad2aaODo4sKcjtvXZocG1zVsmJ4uK+ipHBkwCbGnulx++hHuc9iMgxj4NJeOh2A3oHBBx99zMI1ylXDsRO+TEyGREy4YY/uuAyGeZmA/rEnPg4xVTXAOa/qmb6YH1NkRcYOqMMbCqW7s6fP1FRX2cfvZEldCPAieOrMaT4FIvy89vrrntWX6APT4mMxbdfOnX/2Z3+mkc25eIqqRQUDK8qCKfdnG2KdN4Z4bM999lc+o0aUjCuxE2z70DIVi7cwVwSeUTPwoYFlUhST0YDFNFDzFAnYMN/BFeJKhAlLu3DhInemHUphn97fe+89iJvdlkVKUj///E+VyBotBGpavlKsQMpJtUpn8MAhrJccDf/MEp6MjcHrXW/duJkXMCHUtEKBrEMrlJmNVBwtiGl+NdQCTzJevnTFeAS4xEb6YuqQ13qgJsh873vfY0IW6apr1GJ4s6AfhoqOtYBfjdGRRW1i2QnEBHn9NKQYuXXS1lA73FCnBRTYBjJVYkkTjSB45pXQQJnsOioWIRiPYAwwhCoByyqqsAc6ZfX2hdU+KCvFYaWGyO3ocAS4OkiUoCw9PQVpgNI+GWkK7FxJuYbGafDd9z9gdcSkJnjGegp9mNCCZNqU7AHgcDBtZkGm8xCx6idhShxA3wf/LIH54RC8sJUGpE3Lw+HxfkJBcRLoCPkqOzMGFNw4Be1AA3v9Q2HFBQS8R1Z6BgMisqDgPS0QXADEFauwf8CvPlKiLxkoAIKm9GzmwIEDBgdlwZKV+kbc7cNhHr6SkdHKxXHg4yVwsCG7N3iD2/jwUGyZSY9IbHHiEBqYIaxkSpSdRrTkbEwCiwQ41M5i20phKoa9jYKpVvyE8+g+8hp2OHz4iP+K7SIDC4ReDAhEQFMlrjuqdM+sSMyjWUUzD1c+iw/RPk0GK9eKAF9R48sRLkteUZOdOugdIIDV08MAOhCOnqV06rDkPT0zy/gL7RANmBLIEuGSUTI4g4XNeEn7qfNhipVQCPIC3seA/cScYCi9akWtoXRQON0o2fScC2G6pjUykoUWNOoYLVJSys5u8eMGDKeimJGjdPSxBA3qiMagILDzFHJpNZER+341QEx23NoTRTrUpGe4PiiEn5KTMXFbVlaqw3z12mWg+VgOhyZIKfTCxUtikex6pNYpYEZ6t9bY8YEC6HBuLS6CLsijsozsHFp2NqY3ysGMleGQX7WyxTM+iWatMoJIkVd8Y06E9WyIj4rhA/bCglKIwUf8YY3sgSHxI8wTjQGQSxHyBrmmrerJwYkGFeMxmGUgzvk+igC+zgpBrI9wwgFOVHaUkrqheRnEfVgJWjhDS2rKIAZu2Jl0GI1lSOYmcNvtbKy529vvFEvDbjPOMJ2cUdnZPWdBoL8ZWenO7nYkjrsbcO8CAVyyFX8NxmNO68SYq5k2xMWsz33uV5yeYWWtvfOXLlwkOTEUzVuEWuEAP9gDEDjwACDhCdvs/pYFBG1tFpZobIjgrBCrPvyKfRjbsGzGTgjUtJjtu1ItAgszBKSkq5fDKmQx3TUQ05OOVUoT4xTUsHSZ7s21G1e379wmA07KbX5PNIbnf/z+95ka3aq8V65ohhuLRNlOdQ+KZhOuE8OkgOK+d2f+KM4+POzpYkCYLs0U3LzVgXmiiUrIQsYSIMbBMahcrPTSOiXF8lLSmZxivufOXTC5go5y16/fSMH6rCTSAkb56NFwxYHE27duaV29pii/wIVKuFIiajpEeGABUhphBSysYrURpF7e5BgGa3CFDE15uUCNK2nojuWhoPrBg9UyHZ3tYpxyeS9FCM3Rc7AtPSXyH6VQpTRsSa9mzeoVLStX8CW4mSOiCMqVXiNWeu8FaHXNpk1WrNaS6/SJ02L0xi322oeJLcC+9/4HDi1hA1RmjaIqCsIQS+YPi8PhEmnh4Hxmw9xRFg40VTFMRuKQS2QhC3eCsBAsLyalxDxnVqh2PMZkZzNIaR8ThEPiYXZqFjWBjDgUx1QIIruqWiMAJ9pGWhWyQ4mr2wChQUC/thThX22XFBEihSaLFXvqXVz5CmQ/ddzqPHXqDB60YIBGzCREZCkxKeWKNxKLPjZIEMpuMoGeCBpbqksqk0xB5MC80IwTU4F4wLyPbTx+NerPAARiaZglrrTM/KpErJKCqWixEWHd2jVszxsXh6mxfNQBZJcAIDjng8awWQV702EYHgnLDyLUrAJBcmFJMgUpFOyglhFfBLFFjN8tb6g3YOAm4AsXz4kDbJIbQnLz5i2CvhoI/gcOvqcFzDaoyVj0d777LeeHuL9L/9bMjJWEVvA4kggUKq6M1DTHwASHXEyBKhH8xVg0S5bmIX4w5j1UfRLOh3Gl2vbVULpemev/ZhZSJmcXyquWdN4d6hkYW7Vh8/otO8oqa+26y89YPHPyyLYtrRcvns7JMM95875dWx0NZH/CUnsu01171zc4MOpQkPff/3DHzt21jY2afYyT+xj1MM2lfczSiIxJIms5MUsfDkVeO6rVdrzbhg1sMzPJDh06BGG65g7iEkgpRZ0HzKee/PiJo8e27dzBbqlSRuug6NEFHazFdJqMGqy8hgYdvCZMvf/eQWHqySefBB36SFEQKCiO+vDGQ8Vwdfz+cCP4fzB5yKM5O34YvyxUGdp2TU1Syi4Lyzd9gb29Dzyo4ctTFGHYVe0lL22CXc2KQ40AlEVp/HhTVlYOAbakdAzzr+vXr4WVTps3AIodGnEXG02rWnbPDrdv2018zQUWbmkTltgYnyJytDflMhgogYK+nAdy7uxp7qMB7SRlTW19BpGEH5CRv2hV65m7UcRBzDq3lmWTkcujjyYfYUgiP/Z+9KMfARkFihBR0VGKm6HRgYM3DAzamk7evPjc8yiIJERovxVOIEXKKXPWH/399/+BS+nbwpxyH3roIVLLyH0kVoVxWKCJ/1YXuFXNoQUIsgG/gtQybQ+ghvzEZBhF8qxoY9FisGPr1m8ImgI4BqjJByaiOnwQV2JsNbI3NK9eD2tO4ic6KeclZgg1SRsO2p55BxteWFi08s0BRNBQLvr4ZK7oS0ARyvWGfokDZC/d3s26WFqkQOlkwTBU2Q97ww94vRSaWMv03BRr8V6hOKE4jR6M+cplQMS0kJIL5uxQHJCX+SUxMByMw52lxIkHkVnwZ3XSo2AjsmuwzQCAAoakYCrKxYx4K75JJi8zk528qK1obCCpr9RHisgYZIiJDW9I5wNtPDi9w4JMg7vEx7MlFBhGk19v3rwRqoHObLhYw6/So3n2zEVsCOm+4gQbhAKdgEB8gZptAA1BdPxUUV6NMYDjWf/WG1qQQFk0dfHieWpFDX1WCitTC34FBXlBxLaxrSw1DvvBNngBDhyf9IxMB93aBKxe5hcUqhQVaAwR2Ca10tGRkdRwsETKM4XqJ4AO/54BjppC/RVwWCB+CGU5nPVcivbTv/oL4kqJPMvL9QCOSR+R8+WXX7MHgEaIb4wDS6yL34HUS8R9CEgv4HXbslCgI4ND9B264CUdQdIWc9wqyMf4N5sBFNHarl2zHF+DEHo5eVZf95OLQd5uD4HLiCXOjfezVQkcGGPNllE8ak1+DUO0Fo372nUnrMNUNalztMLhUF1Vw0RTU8KCQCJDT2sfD9G5jMVwHECJq3osDBKfLDA7K5/qJfMrlAQZKgaLtXneMAPZ5SIRJZrzVrQ+rM6s8UpHd1EBLlg1QJSowU8iw2X2Rqs0kQr2iq78vogaERQP4EYXvtQpAW7k92DPj0sxrXK1UNUaOn81pd39ZeNuRrbqOD3cdmP33BxJM6bmZi5eviSgCzdcF9b4wL1CHfjNGlLmQDakAV2/bInKtqK0TM/MeDyFOXzfoD42iooLg8X0TFESo/EreYQG49zeOOOGgi1pYjeAg4iuBZ5FWAahNSnQu34ZD6xEqLK+V+kUAAXGZ6qXKdDa+fMXRf/iwhLHPztGDbdpi+lDF4b23Lur785dgnkjooJRXtB//vO/qmVput+aGaBTmwSGHlesbCGmInrvhulmZueks2BiWbnZ/9ILmpkLwWskuUKPgcKEF+HWA2XX1FazRZ0ZwZ09MRfVBrO2yIRcziN3KHVZeVjQFk/OOXf+vFaRLLpAel+MeN9DD2rMaN6dOnP26uXLDieh39B/KAv9SCyh46gHSmGRtBxOzVtc0K/TPymvrIK8NpnVZdeuX5U4L+lUsHhEHL7ENLX78e9iTpAePPiOsCJyoWms3a9c11doEIeKxQ5wMR4fdZPE/QN3v/rVr/Ixoo1PjPfdDV0FueBmJ4Da3VgpWTQsNAs0Vj449KFnuoa8ElVOWjM4B4ttN0KY9ywERO7DraiuUgqhfJIyA2VWoZJT2wmU2knG25Rl9JQpSuOZ8wgorAvPwo1FFzSixSAjvaDvwUfR5ruENsJChtKFBg0dpOTSelMoSwMU2yC4FkNzyypfEXdKuAc1EEVYfaoJ/aUvfem5537yP//n/3z4kQcVrSbwoXRcGfF9990DGFNd2eivaAIK/dXVYfG0jUNwENDlsmDGzbJePnDfPWp51u68i5amrRaL852C3NBR6enu1W8ZGR4xRDQylKaIH/7wh1aJ4N+SRIM06IOFdysiBhTRzaoG/Bw7GoajpNFnUGdQBAPzhn5ZPrnUFr/+67+OPQgD1vSCl+H+LTe8jIVRAyEyPS0cqOrWMz+5B9pL1UxhRdh1zbpoHP4OYynKz3OWnLFSB4NOjo8rRbQVefIzw7F3MRZZsG6R/fkzZ/t6uuuTERHbHKmDHqW3dt9HKAurGJM6STjyBj4SICW+RauI6X31q2d69yyLGQOJF+ZmkF1InbNyKD110fbDUdAN9qbM+zqvAZdbVLa2oLQ8LWs+Zb5147bDxz5cWlt2+uShjz/xcMrs+HzKbH1DncGktuu3UQXR4Q+Osj39kWCXBQU/+Md/+vznP6+gTzz9SbHOVLtJRe3OZfUNdlEPDA41Lg+b5gUr3RmdkFWr1pjsgaGZIaHPhQBMcdu2HVRg4svKE/iITjTIwOyD54aCj+MajfLqGT7//PPMQH1Ja2Bc3th48sQJ5+PyQT5rXMj92QODg6KN8aKi5P5XGuHj1Gr2xMk/gsnRY8e0P7x3qM7qlaEpzBFu37zlcEBWpL/qTfhq8dv0zDtv7yfdb/76b7z0s1f4HYSVxWVYFCZ9AM7OOTjMIY9bZaHgjXCBMhFYOJG/9a1vMZsvffl3/WSdkobIv//3X3VuGJZ0nJ/8eK3wqyz0lYIUZyQm31GKqOUlIrGZsmbtKgZsn7WRexbYtKLZWNCqNat5DYN35a0TD1tb16vODE6dPXfeWk3xHLbua9+2YzvZB3rDxTjGUOBmp+Af/dEfEcoxD6Z21fxsiUuKVD6MjVuRzoiCShe23MQD/LFEOn9Fj3/6px9ifu/ee3FOs1pvsZshLzNWjxBEEVLqs1kvBxycczQNI0sQlXjgZ6+I5KINmrV1SyUmLOJmAAwD79q+I0ZCZsbd5AKyKSBlIYU9gStYYEWF8QhGYiOl9FQjnAqtyZsSGaWkBR9o4E38QUfHGR1vFCoXb5WAAUBeRgm8AZr62htpNIPEIqQUBx8vkaI+mJCULKzCRzLGICPGSitK+DUN+isX4qKxZz8pQm0ilzekiNW6/XixUHh6LyPTgowEYnI0Kgx4ybx72nss4SALvZBRiexTRjFQWQKdn1Dz109Y9YZ+ZfeM+Whafor1iIxRX7JEO4+xVIuCUJCRMisr3LD54IMPEsRybaTMNFIuUuI/kzbEpC0ro2YMw1C0NBTqWa1EWCLjnIOgpoF4s63ds+IEcICHZquVk4mRwNB7WJHaAwGBZj2RsqDhK27VcZxaevUpPyW14iRDHB1seLDsRQKJo1uB3VcFoUD7iBOfBnEoowX1LIF0wl30AgbsDUVIQBBQMGDal4V0lmz4KiU8EZSA1lRD0isd2mjiBLYKdWYJa7Hfxt4V3sHmMYNhv9o+hxq9yKhEyPBTa6II7itSUSl+RVNKPPuJdMFTworTsHubk2r2iCRqMUZIBfKac+u7a2nJIJ6hpwdVt2xpdV2tu4+sEw5nwdWGZgPVSMlrnOGB/shwGO0qKAxVmFlr8BYVFdo07GwoJRIqaoHu8KxEHQBSa6soBZMQA7ifeifCvheweMYwanF0g9NJKT24JKBrzJtGgJIOiYPjGbaKg2FPT//zRJyfLBpCXI/MEZGqPiCk7t2+keTo+rAVSCkYoDjDYpBkZMRfEgZznJ5aWEynLckoQBboh/fJyVye4ehZRszJIoFLuHQ1PGO0qqKc3WgHiAUlRQVc2LFQbmdwVBmp8FddFfagYIBe/WVboIkWGTD6lzt3mK8PDqmHtHSDB395FOCELfbn3kfBkxZZj+kNDDMINYpJGQYjPWqS4cQxYeBD366ycK5teTlOeEJNZU3j8vq229daVq1wNZgPIqTQS7FoxCZgn9HhIfWrsVIMi8JG8SsrqnCCPRgap7d+USkwLCsPVa+4Q1vlldUYIx2sVPH8SuNeoRpkUB0dG4Ge5eMQADU6aiNlwYH1Hzt+mgXv2rUb/5YWOETc9gFSCApy6ddQLQzNDt24YezsWh7rTg83RinLbIzGn4LwU1ldzXvRDDiUhbY1kwIRY1VJqIR0rLVoJWBDTJM/4wRlRoIxD3SqRE0vCYzAyS4xNwAdKWhBqJIFY4SFiQhFEEen69d56SMNE+SExHRdBP9n0PhUrr+JY3S2rtmg7+RECzzHBoFNGaD7xS9+gds1a1uNIojLasfTp8/qNZnPpXfyCgHUCnPc4lPPh458xZKmKqm91CQySAB2whr9MgrOPtUTKEusQ6hQZbEWh51THPacIc3JqSNGJcmUQmT4KIIgQIAwc0JTstLyaoWamOO9CPJrUpgNkKyrK1wTYRW7UkzTYamzo9tCulWrVksZZzYSjYSzEaMxYIZcglRUojs+P/vZz6DpkCs2wLrwYFsI/B0oxs5N+HLJ69fagOzjiLHY78cwjYceVENDaAImM7l8EFe0CU8sxeBbWlIMLgyAi1JIpIlJcb5GDKX00e3RKMEVPtkzcPgRfpSCYLDq0VEA+pXGvWEPkjmI2rOBWAfXOIPf4p/29tvmRKWR3t+RsbA5ITMrZ//BAxrBJgSdJMA1/p8//4aybBsyfGBiF+yG/1mmnoNJOXvf2SdfUFwYoUim+4jm92jDOPeMN1KwWJYsvWebD/gQTYVzhOamwxqg0KewkCclJ7+ks3cgLa9kPrOgrbM/La9457371m1YX1tmQ2nxuXPOTGzbsK45dXE8N9PAWJ87xdw52NejZTE0Njrd2dGTmZFvkWlZdbX+Nl8gHZtRuiAJWB8gY4x1cSVT3myY4TkZWkptX5CqBrT4DYdDT15vpCejYSEBB9qrVrU4Vq24qBA1llNdW8OVmKj0X/nKV0QqmjVibWCbVaCmhjPybfm72MXelCiiYgBlOmUwiAtfoGZXXEO9a2yJyrRRWLVwhH9tCPaAAe0YOoXziy++yLtNKWhY9zsfOxlVhbyAI5kOsJobh6IKflBWBKEYDGs0YY03YYoHAeQP/uAPenom//t//7oLT6Thm3zWarFvfvObirYVwawP/YqfuIKb1j93VhY3oVAl+kuh8mp4OW/ArUzmEMhlNU5DY9jkQF72T3DvlQtYWXCFSXIxEvzDn/gCI6dmLbxA/BHtmT0+SSQNYbWlTFdCBn0CwhCSds7RWuuataQDjqho35xy+bI7fd98+x0DQ9EMvKQdBaGmLEXzU3QERjKCzpDexUuXbQPDodk2RfvYA0DAq1fb9+3b7SICGX2VwBqvareI5OZZsqv9gbhGkvfWejE52vfMSDwozpwn2LFdWFyKgeBcZWXKpVBuSwpkoYQfIGPGSz/l5uZdvHSFY0GAQ3EiFQdqDAx0sutuyaV0iX1AaiZcucGpk2McBRMM6D1CxnucBx4KC0Vjtg2WhqZ6QOGHqTAYTCKom+QNjWsxU5k3UFK6GKiyA7uMvsY0qJFdu4dOlUI7FKcUrmFxoPk9F7HFpiSzgXkUk02ihizBWSZD4ob65C6u8p5rEJPImFSQxJiBkjSKAA4eeBO4RhwP335TSl/9hNtt27YqiKRyaQLBExSc1wHWVjlSMYZj1cnMkJIRMqya4cUPJr30E95MLcKcI0PGQBJnP3jwIAoqKF3l++67R0EUYXZaROWh5smNjeoAswF4+ot/+LAEsijIx0uYwzAnN88pQO51gjP8kSUXIuKtEpWFH+AQHLwKIkil1dLJx0v8YxWGsJJRYjTp2nsjXH7ipI59gwmgsK0HIhdmMIwZ7u8Z1KKlvOopPe2GhmYdAMJSGTqSAUF6DIuWcFY4sqyXIPwd1OpH2bHtuG0qICmrU0dgiSVLaSTfX8yjZnCNcbJVpMQ3+53sbkUf8SXLNIEyyOvaCmTdzBCWDRsXXpyXhmhWB4kPIqRn0yaYNHAAZNc1yY4HVme42d9oJyacYBhN17GTES7JLBqShiBM8ciHJzxLBgp+RO/yMmx/I+zEZ5zKIi/prG9Uul6llHpw3ugAUI0EGhUEZBhGSNHUiHX2ZIZBEXIGxBfDnXz2B2gWAMu2V4RQcVkK6/STDr9NS4YR++3FSfYGIKcAyTxo4yMaKlXnc2vaJsuOLT0HipVYXoMAOj55llTn59+7Z5etqi3NzVVOPCwrdyJQR/vt9tttAocQHBqy6anWyel3kDM93XhYOLswUE4uqnBYJ4WxGGe2oMaAuKUBEu5k+zZ5t2/fqdPOSnTa3C5AbZCSt3F5M5My25GVFbp9ZLdqUI2CQ4gb7BfHDbYZTLUoxbIEdg8dKx6Yo8W1llRGn4n3ACj3iSefcjiRPoAa9Obzzze5McUwqkvjc7JXr1vLSynPVVAe8GlqXkohTxcT8zQ3PjEtAa+AOatSSQyPhJPm8OPDc6jAwnHoYZ6OlcixOzstjb2/flmYDNUlJQWaajjHPOlQqdK0y0VJUzbzszNhV0VnOOHr2o3rlGXNii4qYVE2pWUpgiODmJd2icpa41wD2skzuq9muEQHO3W0MPQaYWhMR1kMUWOR0jmS2Q6HM9kioW6m3FAhjYxBwNYLx9QIOpD0xsol40q40gGwbX1ocLi5acVbb77N2MAyMjyamZWhU2j/A6nXrF0NzDu9PQql8ZH5MMbAiMmlaIJof3jjq5pGWFecIGgpOWOwvluhkAQ4NyYXMVmFKhy3sjAb1TaJgOmva0dJRMvMQ4ixKoMZCwGiQ3RIQFFKdFS85ZSHRXtIGbfwgA3l/u3f/i2umC5mPDAVrgsNfYOunrsoMOmNG0Pbwoop6vvwyAcUsWXLZtIxdZoinWglyjtI3ridk2qNHHsJVQWRQkHRw9mJAOcoTFAT8KWXXnBYkIPkJcYA5l977Rf4X7umlVy2OLOxJz7+UXiyH67kDZvRaGNa2NaxoUopcYJ5ZeGW4D4sSpPo1s02CTDG06Ekr24S0dghVKUHr5cal5hUhOCiTWl0Ibm8wrDKXHIMzrRuKG2KJDppLMp7NubvmlWrTWFmpqXytYi5Fnx2ZkbvOJup0PJm+WPjoXbHkhLd2H365HGz6qVl7uHKD12+jExmo+LHoRa+/2dkJUOJ9r4nPQG4+YQYlcxTgQjPQr+vQGMPYJFA5BU3BJsMK4jSUuanF2enJoxdCEXUnrI4l52V7lDnxdTM4sK80emZ9rZrRniAZbDShQxLaivmZ92xktfTfTNtYaZhaY0isG3NYUbWgmN/MtLnHty589zly9Z8831gSsCAuS3tAFnzIjZkNVBkjOFX+NLW1CDAJHzYuVwk5YzSAMRH7eVlrB5shubURmpsviIdQ/WrNp86g8Fo2wmJRuj1hI4fPaYxpD1NcQ6SZ+QqKavIxD2G5IIn9b3l5hZP8iZdoZ07d3upUOlRxgAkkcW52oGpI85mVO1E0xBneCAFNWwZLRtT03vD0WgWTaQEOobtV8zzAg0LQ0PMibLEc2P/LOo3fuMpz1qEWOFrGtk/+9mL0FA6L+toDzNdyoWAqt1wADH9RQRvGEOZE/mVs9gE/IN/+Ps7d1P+y5/8Lm6Li0odDO22MtPlyhIi3FWodlLRvPfuIVpwVD+2V61cwync8gtqF1NgG0EeoQWQlpphPtbRlqRWug0PYMEAlv7yL/8Sq7/1W7/lnD/6IjLQvOcpz37q0wTncSYPYRVOvk8OaBZ8wAVJlukBw3QHHLk8SPnDH/7YKVvr1q0nO1fCm19dii27RU/SxGNAqRWqRmWhZ0ktxkQqLbZYv+jP615ikuHRhWaBKkkWhcJZ1UBA9glt5TJCDqKtzCSQlAak7BAD+B8eHvGr4O+nKJ3Yq3plSxgDI4UKeohwXhohmrPJQYQI4tjGobw49MwLMOABvBLLi46z4NTOLpsRr3p7coRuJfZ0dUrW3dmxtK7WulxEvGGHGJuzfz/Zwya2C9pUQHZsYwZLIDWlrBZgk9BQinXS3pMFWYJjhh1CA3tqECCzH8oinaiOvo+fEJQd/pgUbBGXHf4khRvpvI8Oy2YcNISIk5odv6iI9957X3bjwaTzwYJl2ZBxlSoL1HfQGJNAKdF9uJuAzyN8JRHpNB6wweSY5c57d3INcVjpJuLgz219Bgb6TRDZP4ZzZAFLp/I64gJ9MDIA/GNAQYrwkgg+ZCc4hqHa29dnxYdr14UddHgZueCjaMjQqa/gJa8Pk8APlLQH/aNeITYM0CRLm9QIy5bVw9+p/1RJBRKrI+SyrJT3yUiEWAoL8RDlpWhFOMaAw27eusUmYHYianlJWJUpKG7dui3ycxBy4QpWJKVT52gnDaewWwNNB7t7D2rEnccvGX4ShsNNZDzUVw1empWA+J1d3bdu3oaGVZRVNbUtLav0STXkLV2mRx8bBelLq0bFwY96wh4VK9zCcVsGSFm++UN4av9ggyBQInXy6yLmYegNNrxhRXiTLEGmCMPk4giOcsQV2wZ1FApjggMLEd8k9uANkGO3R2NbXot+UbagRxedhTOtYPOZYZmu88TZPstPSdFSGk/duqYR0AqmCR9lMBQFK8N7EVYe78GNUYeuDAyOpiRxwVcQyAhowhBPwfxKSh8g+mnW6MfMlIkJOxwkTl1c8F6FGMfVtmzdtGpFixUCFJ+TlSkYUV7tkjDW6CMlHkBDPF8JAAIvtdL0R1kqK6czktCWr541hXHS032HhRHEHlg6wDyoOTlu0FnXukF7kcXL6AZVLzXl5bKuS0oXfhmdlIx0VoxduXqpsKTAlkKcUGRpUdjryan4AHm0aaKwjI9nGubRebjdFibBLfqnURMxSFlPLQroF/pbXlUpkp45fQ5jfIzR5BcUew8mZi12ANwKHDgwI2VhybOmkgekdCVvtNlw02aRDH7WrHamUavuChuFEoPgzxYXEkhI4oR2cHbcvlVd6VreKhzqSZO9sLjYA8537dlNfNwKBKKV8UKl9PaE+QFl0b73AKdW6IEUCGoOXBlJ8pOgIG8cMfUTFQgQwi6f1JQUSZUlAa4oiO4YqMZu6zqLB6auX287f/4sfSXTVaGjT9Gm0hQXQwlAkLpw/mKakdzMHIfJSsOESLF5yzaqj1XUseMnNUZjwNIjsiXULQfo83ZGhQizBBRx8KAxxE8URCLi+OsZk5qSxoEGBu9qDXR03rYF1MaAFc0r9Q0camtjDReyQMVkC51OJesyUQMdeQnOOVF77bXXPHupXCoTcDWy6dQidD0fPDjwFLyw1R2Tff87byk6TEHkByNXyeFHgsK8Qg7Fein03LnzumekENq0Dv3qPU1BUhZGq5NQXJJvy4evyl26tJ6irQ9hV6SgKRP6wKEaedU01rwxMNpkhHDWAQDpgw8+SFmKgy0+VcaqE1kiaH/3vb/FrRG+hx56iElIJhBrTGAy2gmVSYwxH1ahcQ8EpHw4EfxlURbGZPdSLhJRBJSwYUmP2aoNrWuNv7uqSfC0vj8qGhtGGqpqa9puWtY5WLtkmRmPmamxt956U7uFWWRnWjawSCOoWToIBOO74ZMsVoSnj0K9wKRffbzBlQ8Y44OX+PdXoczAOKT06akLZgAWZqdNKJgBCGlyC8YmLdfNXEjP7R+bGzLQW1q9pKHZ3av4rygrnBjv77h1aWzkzpKa0pqqUpuS265fnRibbr/d5WAqA7JuZ9aTOXfpkrUiOlHgYh78V+lcxuA6E6IsyzP4phBHfFpzP4ZegWeCqNE5hT6D8TwYwpkNeEAhysgCzYFYVSVaPvXUU5YVaW7+yZ/8CXuQGM3PfOYz/NEolAhgwlNjqL5xmZ98GIaGIFKciz17oDhwYZJ5KFFNCUaeJfqFluL4ODdXLsuUQGWGN/plGLEDE8Oai6LEIlk0N3GFJkF82IOPVoiCwEsKxuDBjUxU46uPvSXwefzxj+DBiX7QYIQmG0+fPklZMGHhw0Pj3PDYsYtbtoRN0uIMJ6VZyPhLEJhYrG/JrHr04Lvv6Pbc/8AeaCvLLBnGtG6xig2GTRbIqGJI9OijH1FxEJk6gPbd736XsCz5a1/7mpjDTUghiyJUl+TSfPcr5qOO4PB7v/d7eD5+7BiuVreslF6E1y/avDHMGDhca3lzU0dXz/GT5x54YDf/1VqVBufCpgaZvATkL0oXAWzCETBXrV4jnhCfNuFJEfseekSbHphwNt8iTuKBOM7X4x2VZeUONgAgPEGBK/FKTwxonrXkNH08K5FC2UCcnebICsUAkbHEJND3BtuKBqzECPKqpcsaLEvzEh2VmtJx5Rlx2HoPSZZDah9S6DWx/KT9ETwRQQgLaACMlQV1EEpKFDRZWCAD8YwTNQ76rI68DDKKGV1AEfghiBF09Bk8YYmDuIzqZaVD2DPi6g5codPR1WlPwuDIMD5RE/FImrQCw54H4vuLQwFTRkxK5jZHKfGjLPSZASnwIHICilzYkBjb0nAKMwBapdADqTFWP+FEGmHf7Fa0B7u8MKMsFDQWpZEAKQUxACx5g5oiMKDKUJz1WormUyeOnyYRkeHmWAhOIaNkdXVhx5oxZjwwYIm1DdihLj1r56cAl8DUn1LYM0AEZGV5iRr+/bX0xRJKB6lF6Zg3r5FXTSoXahgjF1IE5AsszRpxlIAvJQqY8RFeeKW/Kg4fJg1k/k6hBNTww6EHCdiV7gpLplD8KMXYB8T0t4Fz8L13a2uXOSBJFjJC7ODBw27CZQy4Es2YvZCCq6gUgKCpMYUflmCumA3zLGDOTs8/8cTjUmq2FSSbRWlTcZqTOMEPMz556rS/jh5imQ5xJq/VUH6VjOJIJ8ulCxfmZsI6NzSN+pvz4KQhmDQ0IBIvstBJkFguPLhLCg86IbJo5LIxgmBS1QYQkzN6dz/5yY84rJcsp7ionH6loUeQeoa27BhTCllIKibzCzLiSqPFe4eaUKMWunK1/iWTl4qNklGH9qp9xpjXMg+yQQH3UfGo+HAVPoxdhUEZKyyAgn2qasLGeXBTPENUvOx8grQxpbU1qllNYxWp+XfNZJpbXJxDzeY8fxeTmwSMTFuG5M3Y7MjdcPnffN+d7gJ3+syHo6aoHzVWKIgoAj+4ij4QJ4yomQcSj5X4q69jS6HjWXMr89JSwzw+gUUBtS8uNm/ZJC7E/dGuZb1yddpPYCIUshZmGWxWqKCj/2SIFMOKXrt6pTnio0cPu7l6oG8AXlNVob+hkhbi2RzobBGcGBmW2NrZzVu3rli58uiHR5i4StpfnQ0xncX4uCSBUoUSnuDeeMtzLbs3oNhx+TJMyBvOQkkuMLYECPOw9Z50OJTdXxbDAynb+bSDw1N9RiVm5nr67tbVWqO71K6Azp5uh1tn5ug56ClU2IthFBHb/MdHXp5jnE0gI8X7Hxx6YN9e0MGIRIomNVUyU0YJc2l89dLHS5UrBjQpmJpqGPiecQj59a0bpqdmbraFe4K3btlWUV7ZUN+oarlxvU1cIEv9sgZ5HYOF7IED75qmwJ+9ywcPvtfdbUtGWDdvjp6BigsjsxaYDiHF580SvP3Lg+E62IwMBJmf1qpeKGpCgGilwmYbgPVVtwRlx5abqCcv+1E6mmyYMROB5USziQ1oI+V0rR4FKR7sx928OdyCZJovNAWDOeWa3DCkbSGNVrtLIwTZymQHErJkwQZX5DicVtNK04FTkBee9MVXWayjiUxkYQaH8GSE3oN029Yd7773gcSxeuAiLJBEU+Ohw6ya9Nzaahpx+vTpM8olRdL2qlOv2fvB5DDgz+z03K4duwmoUrxy6aqxz5rqcCs7roQD4xgEP/DOfi1O79kANryJzvXlL3/ZOSoQ0BXxhrFJADplMUjc0q9F5EZfxKy///u/t/eaAZOO5UOAFzAbxmnzpTrVLJYsrlInlIzEDIdQJect5JSUTk1MwsTBVJaMKwUdNev5c2ecU7FyZZOfHPnqEzoAOTmx4YVaFJOxmU0KrbSscObStauXw46arIzJsPzUgA0jz3NXMTQ4rqJ9zAMImiDCjPDlw99ZkU/8SgWIxyL+9VlitV9oM6SlhBEIXRF31jtJXSgNY3IZ2WkZs4ZVMlKm0xanRwY62uYotKS0IDN9oaKsZLK8cmykPyMzzzzBzbYbg/2h+Tg0PL6yxdBXdU52wZETp1wCIDCfu3DJT5PTsz29d/FTU7f09Nnztzu62PPy5hY6cn+ZevdOX987+w9eutpjlDq0sC9c1vM3hmpMUbzVI9U11dPzLzcn7HgRlo2hm8JY3tT0s5dfBv7jH/2olzTLVjUXrl+9Bkb1vSrc6aW0HI6oS9bpeWkLaXlegb/ur7FuhIKEgvmFFEuwKiqrbZUKoSF7zOy5XRCsSyjjkrTj9GRg+ss2xLGoa1+d/3bog3BXBm7xoJ/j16gCjoM9hoQxRFWuCAb3T9ZvSG8EncPaF4F/vt+ysgUFuZgH25ORocrFfXRyHn/8ftWn1g+aAhfjJ6bwzgh1qzR9RAn9KLOjTSuW33PvvQLjsKbWmJBYYF2BiML30XS29+EjR8UNIcIJYw6lMOMkQr799tvhLLvx8V/9tV8NK3bSUk2zEJ/fnTl31kS/jQSmXIwn60SJXVJijFsJOP+MUkc4U4hncSinAGniRC878O77Js3pnXQsIWLiWVMAEdiqqnjWgQMHvEQKesIdD+IsvmoOHnzvUOC2u1tTaXnTChGM7JJxTDswXU/59v43AaKOYHKiilYXd4a2wQXtTmQBBXDARmfhNTjxRsBREDzljc0mhfKj4KhJzWtkSXG0hkkloiPiSS8vlhBUIvoMiex8nCWYM0EK1L56iY7EiuODuPJhxn6FoTeWLPrVbD86mqpoYliY5bbYiFVkbIbiXIXLBlggYcVhoQk/vkYMWYI0xMeMjBhGH9mBfkeZL0gpARGYFsa894kJ+B1AAufJ5YZpC+HsEBYrJX68xJI6kZhRv1FquSST0aCMcyJMVPoVz4jjAW+y/+xn7sirlsZSYTh7iOjRuy1L2iZEIz5AfIiPPbDEyVsjcYrWh6+rXYYBxQHNMjmiEZkjcGcGZmgYP1FHPJTSgaMsFuKrGhYRgGCGEj0wP6JRt1KCOFPTFVXVwpT3OMcG2/MeV7LAh66hKr0OBt4Mk5nORRMR5fJcNL3XplccpdAdBsilxuSSPt6TWiDidBq1yOKcYXsvLwvkvADxLCpKE2SaniYIy7ly5bphfQnUbhhj2NGtqFIqbMwvhGUprAsnpB7qD7epghEgDgPAPxwwI6yhT0B83rLKoDpctmML0KVLNFvWsmo1EewNwwxsMdM/ODQ4NEwQIQhBI8hGYwySO8k6CiW9bTQSGCMHEe0TR6PCR1/UX0gyAx0ASk8SzFIZ/xXf7NeydIVpGVBAzQAHhH0YGKCAwHQhKTsZ2a2a16+xHUKuSfVsufKL8OkQAYK4gAgndARbTQvvzTTggal4HxbMMR0fgHr2oQYl0THmYOfZVBi/AGjlzMzyppWm2PGnCqcG8hPGT1JCEBEP6PoLaJ80p3MQeD50xM3PO13B7jpzQyaAQ/vMMaDFBY7/j+4h452eLuNkSBEiVs+I+5WPeWCICqVg/gAIZgo+bVAZHb9jgsFSE3Wt9uWliwauCq3LMgl16eLl5JLgZmwbfsMwffBGCOLfInmmo401cmk4PdktQM3K2rCuddWqFaZhjQrzMWELytCgFbwZ9UGtecVynhPRRNNP9lYiZQyJOqWRC6tqAuGY28OW0YgmKmA0aY6S8EMK6vGVORrAw5huKwyBDFLdK1j5akWEWSfuYSWlyXqmxe6tnwmqTU3V7B4ZHbZCVJvVbWh0OhgWaTTZuA4fJj42MaGyNOPGXf/m29/6q7/6q6ef+aT3UfV48FxTVS0jarhCFiekY2cqbxYDf191b5gaA5XMkRS0QEaT/pqSKIjCfgWFCoalygtM5iujdpW9KWzamOjata3dXX3tHW4HvKosNSWNsGZuFsqd4lQzOdlhF79x2cNHjwIQTWWpdAQXRYPLJ6nnwpG9ln7pzQ+PGT8rkpJQkSZLphrVALORDDOCQtIoyUBHR1kH3Szxhx8eXb2aphrMi/HVzs5ucdnt2NZBGUDX2Iak9zdvXEMNVspVxzNCBsmpEPQe/xBTlijGPAzZHnj3Xf5MWVq6REvcPiyyxMbqVStMbohZt291oAAZyyaTGbRgmdCmCCOXjY3L9bV4PlvFLcE5JqEQsd8/LdxjGg54ffjhhx234vimJ5/8hIIkppSknd1vSuTDDz8A8gMP7BNqkfKMW4bEGHDCLKVnYwrFiSLYatBXskfwE5/4hFaUCCWacA0ZAQh52ZPgMETFHoQ2UeaZZ57xwBKQQkF0JjJTp1xFeCMvI/dXuXd6u+2Lc6leuLRudjo/sXmjVn4SARQkbzjkJxxnlqmZ5oTP82fPem/LBAbIJbb6iVrncmZp3DyAIiRAwV8fBRGW3TInWbwXlMjFm+JXv8YsIVplhnUpcoV+bZq2n/3FmdbAOtZs0olDmbKnZizM5yk8JWd8enZydKjj5g3NrIw1q6oqimqql8w6otRBtCNWO/Q3LTe/P11RM7u0cTnFHT9zytYNwJqOoQIxRFsQVpQFJeO7xhSMF4gYGOChaiy2wcCW1oTWCWPgTVISAZ7+SoDzaN54J6A4aVmnakx7kR4NiYGasDRLxVR//mzYp85i0ZfszPmwDDpejQIiYQpjbInjUCgjFPEkUzSuOItxMEcb6fiBLkSqvDxaxgZ/5+xkYa44UbR6hHk898LzFeXloiuaL7zwgt4p+sREnI+gTKIYbUikdBnBwmjZm0BqfaCC9GwFf5YAOm7lq+WgshOBDwqAzvjxjD1yMQbZ0RRDBAGDAiKSxjQPgiTetBWoWMWPecnEE1nADhb2iQ1GvnvXPfJilVw/+9nL5roEc5Ng7733gT6J96Y4AMIjsAE39LEnpCtCV+HZZ581TuGN5qwi6pPNA2oEjR7iEBm8CFKlrrUirBOg32iZJI29IKzyNay64chcgTpFW99im5/89LmamjpM4vnxxx/3k4KkFBMAvn7DhtiGBiZ49XmvXbY56jSGmRkLUZCGsg97ACbPjfGTRjwjcuXaDaEMmJ5ZL5/yQMzYZMR/fCkxgqWlZcwPbryJCvgaiyUIoSSDvDeMWQIvxUNQO5sc8t77laYYp58kJmkci4EwPlkCDXJz4Ecm2TDzpm7p1TVExgyCEnvjw3I8M1p/1UFoEkrpKlzapAgP0TCiluEvMQpWH4BFdswQByfyKpTxR/FJSi+4Zer21EngVzIiDkYvo/EoFwUuiXkfGEpTWhy2B1gIDEZMgsIQpOz0y4OQ0oiHHt9kFUonNQMAEZqSRS9D1scKH6rBKsosDSWYeKAaAspIQMk8MFHn/EHSlDj2OCPeMOav6SOSKgIDNAJzL9kSIsBB2VcmxLxx5cyJ1PSM0rwCgHgpTbRJjBGHjIiI+cDBuTSzc7MuyI0FyY4Z1kXXYHT9iL+6RbQquzS48jdqRE2qaIGFj3jjPQsXNBBRKCKsxRu79t3ZqEqlOGnsEXAaGDNWeuz70Wy0Cl7mpRkA+tX99JVcRpwVjRrxwSJcSEMFcMOAcunC+ChJlSXlxo1rXZ+iMS0v3VG3QkU86zkxQJzeO31zYTmlE2Iq6MJAAEAIQmT0ARKavElnVUZZIMYmsRT9yAog733FhpleTT6WJg1Pp2jaIVpebqhbfZSLTzzLi39ZIK848Ydl4lBeRePTT3BjddLLaE0jO2Q2QSOL4YwstS0BbchUNAo2stjNqSHlRFgzINO4b2ioZ46m7vGnPE0vpEdHR+DYdrODsYrF1VUV+Xlhv7noQD0IAUg3xzncllaA1d65OSsWAaCtliyqAZkNEy7JRLOuthrH4mCZBZglRVOT4yualxuVsaXOmhn8WZdEEm1fjspWNAtEOgtj4gST4CMBsbXenNfGXgcHeoeH3TdgFXJhwnOlkARNZ7pbdjbR0eXCr8qqiuXNjX41tGCojHQMWjPCkb7OnWQ9FvXonGghaCqcOXuSlRvFtCy+ZHMxVxfderruGN+ibLlADBDOY6KA9VC5z3xmloZXc8sK1I4fO8k/D3142MC8hZtqPoNPOsGGM3m4CgNKojZYCBIdBvNKI765Ypgj641dgtTPgOAogNrwS503bwo9C1bYEkHtS8eh5V1rU2kpEw26Hy8q169bmGeb0pdXVhJB6ZacUhRwDhw4ZVGd2kt9INgZzKF9B7FrVDEjvAklxEy2YRTt3LmdnUmGDWmIzkNUSIpzuCr+WQIeGCh7YKCiDwtWW1Ox2leMwIMs+eVlKGuPnTp5Zvv2naT2VZWmhWRdkCt4NMHlVbRbAhYXgjXa7ra0oQEpYKLgliYi28PH5Ng3fqBkCA0zGKMRpsJgmCgDo0FCEcezsIgNrkUKDm8QxbF6wjLmXWzX0dtl7igIVaxeK6mtWeooVav9NATtWBgY7M/LdaxrAXcy0KIeoiNiCtOKDrEg3GsWTt9TlnAsgTceFKQDqQ/A5EzP8YWhwRD4gCMliQxm66leu3rDJCNquRVh+dzcvPWX4dAGkNbW1uzatZOMEseqy1naGh9GhXWTzUvwCH0VbvLss7/CqNT3PLS52WlxYroqpNhsHKCYxGuvvfrA3gchg3PI+6gMEvxrgCkcADNaY4yqUnrJ7F0CwHKkZOFKhSpBKBTOWGbY0KB3TFowY0nVxk3rQyOj/aa9TavXrHQip4zEMStlFlK97p+Xs3OTpiKtUrD53nRlTWUVDQ7cHXOPHbMHpiKwTSkwwaE6D9nKslJ8urKLbZALh1TMWfzFmImExYVFbOCQNvDM30US1Hwk8BUpYqLpWQIvfY0JLCzyJnQKFhcMB4SliyY0U9LEmjQnPBvSWZgxD5CVY57Imdcz/Xe6LqWnVVeU9BTl5Oe6xb3MGaD5uYXLlho7qGUDy5sKxsbDzplLzllyMloy1KoAsnAo6KGu6UzRtIYxQDEkWAGcuiXg1/iUgDlRmcjsQcglr19hDgEJQCFKONPwpVde9vWe++/j496QTgJBzPpG5dKm+5IMKnMHFGrqapWOjuyKBiMz8wwQRLzHDAr0q1A8yKVKZvPA50fCF57D4PqNGxYvYU8RgEU5bJPdsd1kLIMxv+clOup4H1W7zo/EogdqisAqQLinQ661FSydV0+r27Tge3vvmAdQl/NTIZdN4gQ/ugfSHHr/yOc//wxvQorTKR0gDAZo8hKfXxCZLGzmY088riAVMUnlNQegdAGBF5CXaPl5hVb8a5Tyhvz8AqMeuMUGWFRijz32KO2ZFZRd49POe1sfk6mDcCGXr9SNmtqBIHzch3Ihg4heEJ/1gCUcegkQ4fORxz5iPgFBPMgoTFG6lCbcPve5z+FKJ4Hx6FfTuO49DIFPWIHlBz/4AZyra5dAhjie+aNRJ7O1Ses/s6ur04opRQMEM7SJiM4h3UkMdihhA5PIgggdDPiKPpeBG9l5YmwqyYIf6vYmAcTmrhGzQyaREGQbRIO/vKiBAkuIePbgL7JUwLQUgQ3mjRR1eE+tFAoBLhDZYDNIqVMsG96+Y6t4pR7h+5ocNTWNTgvgejhn2LJju6O3RykD/YOWrGBAejwji2eFkhSrCCrFXzxQgVzd3X0rmpvSs+g6jL6BCJ/Mkjq8kd1LXPkgggKG2Z4SySWBIpDS1xJqJPar9Er0wRiUwO4NhXoTMQ9KLy6zq0hZOLl69VpTU7PJT2lAQQQ+JY3iJGDVUFWKGTB0hFkI400CTGr/iY1mvJTio3StHb8yD2p94IH7EbG7gPEwchxKQxAYYpWBYQ+8QGCxCBIch7SGAlL8WggyQyqBfeHE5FwIMlHi+8l7CFClEE06P1GZX7FthTciLMdXihCv3jmw39Ck0pc3hbs+jPiMjY+6dI+Ahi/JJSWvZ6hMFJ+8yU/ocxMqgzDwqZUNnD9/uffucKWJ5KIiQ5AUgRMUtN1Bxz6VCAcG5gFcyWcYhyxW3MODjOG5MOzUJ3WsX1DQbNPGcCmq0QcNKnIZ+0df3ozsLKvqQdd7N0zjiFSaUnAwnu1eHat6oterMpRrYnZmes7pTlq7yf6x4AKkxhXk83PD1BZwIKYJTo9UA3+VOB4oRWwEpwSGEtjD3b4h6ekFJiQlFMwZA7QJyzawhwJ7hmG0McoyKQsNS9w1V0hMFuaGpizJKqBw/JFKD50MfER1Qpy0kQQ1+OCbjUrkwU+45CDumcKH/GIc/lhbHLnBIlUxtYBXshNAXuLZWko+8+nEMCNjQiCsT8yyic3BL/P27sxNjS/MhvXr7NOO4crqJfhVIs2RGRFMYwafTJk/qAB8BagEBDMs7o5l+wvm5hx/N3Cn5y4QvXf0p3bdyMiou5xWrrRKNffWrbaO9k4iaXyAL0LGnyfGwhVdVGhBSGF+Ud/dO5aAW1Rw5eIVQpnIRk0y0DNBKnTWkHGj0vLQNIcDrqqvVAJB8GJe46NhflAWUdiWMo594fIlRmbungs9+thjnNOCZuNJrJBQr77yOmYYE5z9hY2bgEENZH+j+JADgjekzC8qzMzItmVu82ZjfmG+xbH92l6UiJPG5Q0qBqZAImu/DKE4dcgaNXAhzqupzMGs5gH27Nmze/daXscfeBqGFVe3dKk7jDAG/6CuJGoHlpJTIHgI5DUxGQOb4wZayx5wjgINYgMOGDCugCBlGaphIfa6cQz+A5+ynTvhQxZjzZoFSQMj34RGY0NT9HAzGKpSa+LV3JajK6Krs5tXyAVGxt3eEZodYiL6wh+IwIgHhqG7eK3thv5PDMcS++BEjyIGO7JQJblgzoDxEG9SdJlaeVloEPzyjTdNTVhKxKJsY9LCDNYa9oCmqucC2TRneIVz7sGFH7AjLnKJTUD2FRTWOTAGaAQXWJhdUxSWgUFAFJMSmACkUB4nTqLvV+xhRtt904Z1NvITDXs6e7GNKF5bhegNcMRTR4wpCLDqjNHiIp1qEsX6iV0xOdvCDHuwND6vA+x0CKVbNspaNMv27t0HfxgyaRau/YcTJWJMek4nMV/GIf4/9cwnDUhoCaFG494oyF8CkjcGUyBHFZgU1LiyQzdWQoaseIogBTfapEGfWFGRmr7gbHTdMFWPm8vSVJn57gUzZoITyexVnc+ZZdXZOVl63eaxrl69zA2gh22G50QLBikldVhZxAY8443ZRtNl8yTyXjL68tWvUS4pvfGRMskSDN7iluwCA/9O+/RJC41ZdaDoJWomEwM2ai/O6V0smAvITZ3LS1+cWph3d2Hb9WuZqQtrrFGuWuKcKHVAddUyzREQOmzy5KnjJqYcDIAeJUY3YYGgNjSrLonaxCcHAZGWqJ+YBOapXpCJ7ST482ucAxz4MT3jAQiVAUHsVW0AwKiEIICClE5YEnmkJzhzguejDz3sPWPgrcZPfJBSiqL95aeUqyCOw+W9AZFYF6yiv5+JGt6WEtt06ldj27Ts0FheL4oiS7mqHz4rtG7ZtrY9mfOUhXSMR0yg+Kg4WTRVOT5M5NJkNxLiwFlAUbG2L2FbW9ehaXmx1gD+HS7U3n7LSCHbE4skMEnI6SAmC8rsDSmxRftViVSMefQBAkwQyQgE/BtD8dJX9OkcDhXl2UzXwKfmqUYAuSwONAOWxKLQVAULbv0Kc4BDlV8AQfsDQVMcYVtq0sAlIFSlvHY1LMwrKSyKTQ0Z97/1thLxZg3e3YGh2x1hmZBczB4g2h9/+Id/aHgCcY114jzxxBO6WKTjpxs2bjLpqvHnKGSql5GREIFc1EQugDAqPzlund5ZtZjDnXErdHjAmKIxgBMfb/z1koIQQVm5KkfaZ4dycTSCixiywBllX733t6ysyF/Kkt5fCYQR4OvnKAJBhsTSlCsj3CAs/MIBn1KyamVRq7/o+CovC5FSoXK5kXP1yhZhyq+sNxLxV+nE9AbD9EtGlKmSexqGpm5CoSCZsCwBa6QLZIUp/OONOGypubnBV2015aImC579RVDpiAMh1hekQBb+VjB7iCV6KQHFCY/oRyjggAiCyuXXriykF2l81c8iI4ISOPNHFtGA8cDNZB0ViNsUim3ZuRLe/AocybiJcv3EDQmCAeatLBHGLK6YzwJdc0H1isAVP5WYVrkhNxfk+ak4bJgMZTKyZAzjgV3Bh+0hqDjrgiDsJ4pITUu3g8SvVOaN93DzgYxnGsQJ6YiGN1akxYVdO7EgrBRZ2D8jFIgkIAj8Y0yTEQ6yYFUkPHjwIPwN6jEGLsBP/UoFgNKO8sApJBasFL1p07pYm7ABcrEx9BVEqKgaDBPEMxl91Lf4Aa8DbeKHsKRghHhDdsvmzYRVWxHEvjjKskcIcc194BhSwa2VKUrp6Oomb6xTlKtpu2J5s9tXrP/x0mJCAsqI/qLVLsnHe8TxQx0+46MT0TxwixSIsIQ9Q2a0TK10pO6Gg8RSjo9Ns21EqJUj4FYCXLF2luC9+ANDRciraCHLe8PiZHE+ARAUgpTiUPMy7KNLzvvSnJQydABYG3ViQgrciDhQjqll8yw/9YgyPpMT01MT47faRu0u5fYCbrCD4iJHfMK6qyv4HoPGjb/G0LSejMVpE/gfauroLHjlhEFckjDNxvql5WXO0sg1yuoa1xvjN8wvaETyLiwJ3AxCuezJV3iJswQW1PBsSYJGcF6usY18kdoSIGO6tttas/HSiy8XFYcdzLpMUOCS+FSKcktTDW/M4RarErj9vbGx3sJxm/Tt+MSsATWj4DIaS3KzsvUb2JCX2Wntaa/gwdJP7UIqZtamTbt6zAiHfTa1znebGHecTnRvVrKk3n0cFy9duiIYWeCl5e0iBTtLKqvDigsxhQpoVHr6AzvVymXSEgKyJK3MMPyGAfdya4/0Dw4Yf7Jb2gYmihdhHFztV6ubTpw8aZnB2nWr6XFufs6tpKWFhWSkjiRYhKNCFM2gT5w6qeiz5y/Yabd1+3bGN9HfT5ZltTWMjKakh7aMnlmqr/rHkMQJ66Q4eFoLtGnTFmcIsXjWqdmh9UBfahGVB94UxIEVxFHNYjPls2fOxyhgC7jdzJ/+9KfQBz7+VeQ6wTYHK8hUgEZ5Xd2NovyiTRu38D3loobCxk1bJGC00DMbgEmqZNkOS5BmV3XVpUsXhD/ujQ3JZGHoMYwCGTLiC3HAorK/eoWnjeuish+2hKai/d2xYxcVMDDtfivKGJhTwizM6elq10WEA8RwzhIEX/TJKF7DgdZYPgyTTkvmB0cO+8lQCKyoEm7W98Pqu9/9nnHN++57gG1w+WXLGlwgcru9DedFxXmWjTJ49Z9xccR5n745bnWHNHpsVlYulSZOXpeTHc4v6+52usvc7ZthI/P99953+szJtnDq3LqUxeJTJygu/57duwaG7NS8sX//fsgQH6sYpjVOAZlAbdkyyJCOjoDA/KThaKolasUA+1HbsQoJ+AKQNbxUTnTNhg2cW0JmlZS7qHjonp27BBMfV9E5gm16YhIyMnJ8dIzf2I5ono2OfExT+AkbTvn0LGIQiodio6A4HPRh4lXRVKws6f1qeQCXMdFomFCYog5fSWHoBWISsI1oxh786q+XmPdXQb76eC+Lh/hT5EHQd/IDn1nQIUkmCjKM3nMItV3qYkbKgq55etpCQXb6dErm3MyiyyMdHFRdWeXuw7LSKh2hcVMpCsmwc8kuoTFrRgU+Rq5frtuelZZqKbnZubZbHCW056wgtzXIJDJ1X7h0UR3GhFhUVXnVxYuXjTpHqAnu7ksOyFyJIASJqSxBMHNcj470zMKUzdH6bNzNpjftSAYjqly5fJnG1c/37t5Dy4YALE0RK253dVgC5BRI+qL3U6fOajBQumdVjsCrXM9AQ0RNrIUhxKlu0+2IHRt74bnnIKYhqyq1OsjN6LTzne98R3pWwZ8vX72qavFStapJzcFNObI61sJyuAZ/5L/ckxGCGsNKUUX5qxbAgHEA/nLx0nkvlQ4uYZnsrMhtyps2bmMkiLBP8UEdgYjSLYezKE51qDfOE1988dWvfe3LQoEeX35BGDLHsCObpNfV12rUZzOllixdDodNYRWkSv/Up55xUB5AFIFJvqBrwfsIwnJgwtKACRDKErdXr17FFFHwazR+wrL2o4c/lFfM1FB788239+17AOBUDBl1qLCgCOl1gUiBf1lEOfWOLr39x8yY7JTOwrmAK8NpR93PHhw7HqHjXPgRbzkmr9Hm0MaVjAZx7iuzgRv8pYxO5C97A69CEx/MwgYi8PHeX8URkEQeVLuU6FfE8QM6TA6PhBjiWVuEyCwcz1QjYvApgigaA5SCvq+UxTIBi0/paYHUcrEWNDGGmveSSdzUtNJ7XhcNUtEYjhzKxTzYnhoHsEKTXLJDWLlISYxzIrBeH7+SHQ+kCMFkeJhCNXZtp0kJkS9EAGkkiPJKAGcZ8QM64rPVYHV3wmki0kggC87VTRIAUKE+0qAjQUxm5IJ3++DET1hVHQWuCoqnQmM4gKZJwGAcnqtvLKPEGhLYY+oiMDZYcggTyS4yjuNDOiEChvNzKaIi46dol+XhCj6QsdiEm+sAeONXKOENWfPMLComIxTtRACZIsDVjKIEkJUrfd2SpQ5ipiMaZyQkYmmK9qz6IzvmfQjlA1WKdhhI+kKYWQWO+s58lLKAI7EEBGfqNiPhRHEKssrXmJTs1rMBwctImX4hQHbsGbrCJ5vJm5t9+ulPm1zACVLSePDTN77xDdpBhETMj9njCkr0Qt1GlpES3r3EFYSJc/H8BVl8sMp6yaWJwm63btvmCLUbN28R33vm1Nc/ePrUWeHIG71gQDF7Zuk0UgFwcWbemJdZFhTMAOAhGrAGE1mmdImmwlIRf31FwfgWBjiUD3ZEDPUvTGxvizavE2hmQMr777+fLm7d7CQF9EDBSkmHeV8FTxklIDIo2C0wtSWijxv1B2N5WZUsdjAqUQLi++rB33CERnZ4SG1ZUoppZYAGi4wGr+iC1Ut5FAA7Sf0dGwuXpRtTV83aXj6ig5u6YErL8MzmTVvjClr2B3o6IA8Lt+QMWSxqUhupdENQjvO5MzO2bt7oRgCNbycCOffDiapEEgqnzDM6dTvxOsqjHiKpQjxQNugxoAHNzDTa1LgCQneXYa2wIH50ZIJNCNyKY3aYR0FPRBWicW91pVkPtS/PGRoapEim7Nxwaq6sKIu1XX9vn3Np/HTrdhs2Ad1/d1A9bYthVA81MBo86O0J0EaRxAilKIuVW/CgGvCREehWd0g5n2LMWEdlhiAnTp5mx5aGm/Z1ZUlio5NakOfOnDVVkkE72Vku2cnMzlhSW6dNMDo8ZrvwB+8f0uiHng0ODlECjsXiFOTUOYe+60CibIGT3cNEIy8YcUWtRlhrq8pFpMlxm3hysOElBIhMoS+9/DPnGLrX0w0hK1c2GkjQfNKAI74EUrJCfkY05TEvhkELvvLz4Op5eXW1SzXL7EJmx+oGpuK9lMSPs5bS4JO3K45GhH59feEDZgX5YT6aQvOcC5vcxQ1bTDIzfF5vu2bBGwxxzgk3bdrMBsR1ZmStP+dBEz+2jFOikXKFEpnFuuKOKgH74dGjzu/VE008LTVWsZgkGk3hh6m7QqG2pl6VDEPrxFQQGLA1WRtUi/+RRx7SwFI1cCfWG3qYBvTnph2yBASNAJWcsT0xzgfzzAAO7IQ4vImiTYnJwCbxZkOUgAgQu1PEWWP/Qpvt1DZDRwcBnQXcHbevG7OXXRqnPAVLGx0VGXm+yWJsiyb6JFydvzAhwdQaNTFdmEafqXMTDWh/naAHHIaAN0dX4XlsYrKzq9fOeJrVSlAEqDksznGLH8XRHRh1V8DrwdVOz37m02ED8eS4Q5nWtYYhYe0qeLIQdZWCxBrmLfvPfvbiqpaVvEBD0+XTTj4hr1BABdEwRB/2oLWkUt++fWfon6QuWPVsXawDy8PajLFxzTV3lWuNsQSHBrmCMd++4fGpO313f/rjH7Wua75+7VJtTTjezp2ShYXhag6Gx/0R9wkj97QljIQtMwt5Odla7SHyJuHPX2R9YM6YZfSBqgThrc70XFhZxHONCwroYrZkPmiarHDIpgP+Q4Mh6Qxo/d+ZSUvJNtTknObaVStXOyoOsBJDw+6Rvrs9uqM9dzpv3rrGMTe0rnMx8CMPPczlwcgRTMchzorYJLPBjPaEX3WJsWTqMi0l3b4hjUUwik4Sgx2qURxS0BfGeZYSIVFWWeZAVciDhT1UVpSLBoxHqDTCZ8KamzN46qZ9vcSapcve3r+f3aLjrC2cjySrDbWbTR1o7DoMjUO5QMaqIXMyu3btsJX2dttthw103Oq4c/fOjq07ljYsTV1IzcjO0F059OEhv27dsXVZ3TKdfrFanKUs1T8zIxQ6WMUAS2bn+DRD6NmoG5bIHg2SqzqFlrca8udBTvBkbCQlOOjkMijIsN04pxlkpvfo0SP79j3o5DALcK5cudze3mFFa3Pziq1bt3z44ZFbt24+/fQn1XdtN6+aXTRCZkBUD9xoEdOlTycCAXb37j04cccwK/3KV77ib0ZmGA82E4IH0VXp+s9YIogGmRYkQb7+9a+LUf/m3/wbnAv+dMStjDu6mcRRtQTRnFq2dCmEqUlzrbaqmpFgHuXuO3333HcvX7ZOkqeD4s/+7M9oQXNE/UIvBibFOoOjDIAVDwyGg9gtVbLu1KVaWGpqWSEjNrhYb1+/UGO9EI1bTPXyyz+77/57pPGrXOyNgyAuDeTxI4uwHGo0JzA6vnciRPgYKhmJKEocZom+vNQnl/iGAnP10TWeTi6WsguUG3E9rVuzlEzdrR1Ox9IpNfHONdTXIh4iYNdNNdbjWZBx9ppKxJHkJMWz6gCwbADOpLYctMikfFER+4ntbMqilNigsWbR+XocMalE8gRhm7gsPhCZvVG5CJI4B7JQjyClEJwJkZrIxFRrWKOsA5CZlq7vbMwhJz/POMXN9tt52TkNTcu9mXTGy8io62XqlyyFYWFBHvPDDyIYAxfG2C1SwAGvN36VRokQViL3cUixGtxx5xaFd7bftszUaXueLZPevGWL+f2fv/5zZ5rt2LG9srKKf2tQtrXdsPFn3bq1+NeCR1xw4NHI+qAvStGFeVF2y5b0SDmFZZ8WjapS6QgnwggXBgX7FDTo2gxAkDg1vbi0+FbbrVm7pgyhFriBMWNw2CFs2caol9QuqayuzM/NP3vunKirh6kxIRIODQxYSLzChc2Li0YBhk05Woqp46RetKM6+LJxtEwLrQUK0Ua1BQHcYkBAVrkQQVeNOvDDLElh/QLGHFkmDYn8ZWbRzYGJiBMm2OFDjzzsLJ/S8rJb7RpvoTUVAScmhyW+WoNVSBm7LvIS1t+Vq1aIIfQr/kASJkwCY3U14aYwnIRmyZmzlBjCfm5OWUW5BFiNDQxu6Jwuv2BVoQ4DFRgB7tlfKdOSpTW2BUzNTBU4FbokhDhxwFi2El3MGmQMFzOH6olcqhjvObKluSyQ5YgPFGcIiaZYjlCv18BBBCUBxBZeARw/kBFwSK1cX6EEWzQZITNgIfxCKQYx/cq5cnN1l8KyST1f9JUsmXkIKnC2gQ4A/+XdqTvXNiXZwh4RrCs1MTDHlQRD96w8L1H3q1jgvZQmxTVhNYsZjWoUPzpl1dVVMNUayMkLvT0K5jAW6Hv2sTgXHddqqvuNou27/371WGF+Hg3pQFAA/2+/fXM2WdSBS0w7IkPV6KAG06hDw2GwPBy/YBd5eaXRWY2zXIeGLKZTz507vXd6+gQgUaarOzQ4uAo0aZScjnayC0cvRYsNWYaincFWrPmxKYM4uj5wdJ66u3uMGtCfdgnK4XLWuVlriiHGdCBIIr1IEBt9QcrNHRpeWOKfyFpcVLe01glQDAtX3hAZaPSUaEIPLINNs5uNmzf1dHVrTlswJ83C7Pxb+/erUKtq61wnbCTQqDUxd27bUVxa3tPV9ebb71jPk5qRWlVbMr/ojNugDuPBSuHO+gMupaMaGF69EjYIWiOEJYthtmzdsGJFs7sWbKv1BhoyEsToKZOiCCbOALgEQ7RDjqIFcaJxVE7V2x2OLcI/WRiD9QKsAhScEIBOCCksqaxvXI4gm2PNFMcDVdUhsf3XelrOb05WFqKvGSo6//znr5oMzM/LnZmaFqn37Nz9xhtvYICuV6xaificxRih6aXzmfbTH/9EGjrSQdI1clYpBiiImSmUWZOIJSjFVw0/49/axHzjTl/vYP/AzdsWBoRFxowBb45bwSfQMCOa8JDC/LAU0sQRZpWo2talFDd1KXWfVqxYqRrzRtOc7aNvktMVGeKXOhsnUOLGJujpFDPCPdnFI8WROglVU0rHLYumnVi6s3egRB2ArabRkhJLGhitlSaWELjiGmUVjHOTWtevY2nosE/dPGSBzJglkP2VV36uJ2/2AGhr1qziZY60Ym/sig0Ix6Ibi5WyqbkRhiGspGe7bgyrGJBey4ZlgotVRC2LLBFehvH97/9AIwljOmwmuMrLK1Xt6AAwLsGyiUhejkl9Dl12jid3wKoV505E0bsWvFiCFv/qlhVGVeX1NahqwMa1Cs0auDUus1dnNOE868iRw16yHMbsMpGuzt6MjMyeO336Yy+++DO7fnIyF6anDGmERTqksJmE9dqam50bFg2LD+bzye45TEPOMrFx9SzVe+mj9PSUMA4Us4tGfiK4n1DD3tx02AwgvHkpBnkvFDgIyPpe2ZBdmJs1tmOGTMbUzJyhyYXRKVuErXzNKymvXd6yqnXjlobmFu1FjV7XGPzyjVdv3rgyNzuRn5fV39d736772IN97UxFKJhdcBrdE7jKyQsLMLR4tD4tiNIj43ch3E3PW+nE2CRuXbuOY+LBcJQ9RSxEo4S6v/e976FG+tLSksaGZRRqi47gDtulS2p9RZkjSpPscR9lLeDlArbgm50wY9nU3HJaZd9714XMHM0qOIY9cLf/9Z+/Ojs59ZGHHzJRCwbVhhmGgaF+96WUlBVfvnglOzerqbEZ5KtXrpmZM8STcuXaZXumH3ns4XNnzl+9ds3tAaZCVIHMmKkIyyIMnpkxsz9w4AApPMOZkZNuZGxYFcvADHIzHs+sVLPYsbzCEftHikSa0RA2ILVh8yZ4asK55dq5/mbnjE8dOXrYTLUVEQ/ue9iOFNuNxG/daYq0PVmjk/2xUqU4RonekTIKS+MMQENc/9ahXhxZssGRQfeJQkMz4q//+q/FFq4nI2wZgPd440QE0Yjp63Wr3Wruw9PfeeftrVu3L87Pigb0pQPmpb34AumjjzxCdurQETKfiQGx4pvf/CZqxkGJozonIExiLNUmUCIn0npzElV7Z7cDprW09u8/EKshFiuuksKgIJ5dMm23ADo8LgkL4wqNJeJtYmqaLAa3TA1xK8yD3bJlTUH9KOHUB8MYgDMQkI0MQExMoA7Dn1QDLhEJWTEN/rDVbb585aJD2zZv2VhZUa1Xf+H8JWh7v3PXdgujyWvwAs+yeMa22lb4suCWWilX39VLIuAQY4kKwgHtOOECw6MjcHA0u8aZNybT1J/1jQ3yQgwnApGVGipfBq+vRUfekI6NQQDgoIYAZPQ38C88coSsnGynYxl627p5ixOfbJRv1PRfWNRMtzcprGG2EDA9rTa5hZ33sWHhDidCJVcSf3xYDn0piy8rF0qRHwPBVTXVAqPqBgXDbdoebuQ0sKIuE1yMJF66cNFmpQfu2wsHQwnGQYS1ZCWC9UhhySL61nmiyfaUqBWZlDl7t9ce+jI3jqsiFUdqdRPkDXdikkMBgZuzQOaBw6ERR+MXaeMODQzfHei729tfWe2w9KplDUvbb3Usphr9mHfkj2a8YxSnJqbdeO2vgUiDj/h0vCe0LXk37mYNvfERC6StO3CWo18hpvFj3UR7V6fVHKAAEYaBTFk2Q2sQemkiq3XdOlpWZWPYiJWwwOQowj1FfMqlWkzunvvul8CsiHBhPtMyiolRSy2uQUNlTTQ4CCMwj7DTplIgj6YPW6IdIXR0aJjg+GQJjIrVSQ8QxxV4z2z0G9mD7hNu2XNeYW5YXpl0MgEeVclsGA+z176VDPiEUgoG/MVnekp6dV21QK0TLYv0ql3FET80k5KORzQSP9lDaADLZaCooYAl0/7MEmPaCVoC7J+AjBZcRcUabKmg85Uj8DvQScwZWZrSmaKyFAo61FRawKR0Y8mkwCcpFKp0IpBUMgWxq4hS6q51zX6DHS5R9DNkPZDTJ5YR30ujYuYMVBVbDNqUgNZcC55stjwZVDB6ykp4OJWgefNGWJoJI7+KhmyYoWgob2pt5YQFeWH4amldDY55uwOqB3rvQATrehFGOGzQ4TlK1Bo+d+G8UWHVtdNC491VRkDtjLt+9ar9mYZ87AEw39G8YiX4TNMxegf9qtNNhKkAmA5+7IoAotUkWDI8IyUGHELqU1JchIclNdUE19SLIMylzt8ddIp/mASEXDAN54EnFwnTR8vyFnQMlniDydtdt/OskqyuEOPUakxQvFBu/At3jgoxIxNyYW/L1s1La2swAFtdt9u3w/WxxvW17AVKRxBa+W0u9/e//O+49ze/+ddTsxMLqVP5BWEtF/aMW0tMZAZhMNvuVZ24JJKq80OMcOqT/asOuIwDTpkmGZIjULBkuzSToghvtPLVLuonNdBvffG3uITAYRjm3t17hFoGQbQQnR1vX1CILJNif/Rr+OrqzQ7NJVbLbDCvNWxADjWmTC5GxmZYIQ6DqczNlJSX4vzWjTYtRSOa4FxSUwde21ZYiI2QxsOMHhFpaNSgfv7YyIh9reCKvoQfQ5iAZfdUBgc2jTGlR/3aGiJ85BeEi6Ip12d8MozWqNLw4yx5pZghJenNW+2e01LC5WsqWvIyWrzBgWgy4tyzRrNan2vR0I6d248f+bC7p5M60CeRrgNzIrXs0uMTG1jihPwNttptypUeYqjhU+IIyJtvvskwkEWKLeGKIPEoMXLxeY4gFojQAplhSykpgrG56oHDY95Kob/+q2+FOn1qSvdJ8A1Ve06W4jiaEcQ9e3YpS2Ndbdp287qBwzXrWs0hRXWwQ9X8F7/4RZxjjNnjUNCBAwa8xM8bb7wFE2QFUJKirF+haL/SnTYzl1HjEp+xYcOgQPxoi2jWK52lQm+gr9dwKeNRYlzyRzRaGB4Y5ilhvtSJ+2lpVvlv3BKki/XH+QtXLE40/K8PpgNgvCAjZXJuZhLIEjtSgIG5CxaHYW7VGH8wcAYbTuqQhhfPzjjMPizZJ6CfQprkThLZpRGLwpvkVw/BHhatIEI4bJDCg1hozAZvIpUEFib52H9MpyF9WpZjgiamFybcGqYvn1tSUVfftGrDsuXLrdbTxz70/sEjh99LTbHCZLBhaa3tBXVVtahoMJiVAC/NNjaHYwDUuGzp+vWrTNHJOTrtLEdVnZ2VZwrx/JnzmDfPA2ejiewTBbI714JGZBRYTLIWFfGYgldfeWXDhlamiF8IHz32IY+oqqp8+umnaYQvQF6AssCVWhEZGBw2jnvFHbcpqY5kWrWmVQPo5PFTVy5eGB0a+uxnPm0N5XD/3S2bNvfc6X79rddU88haOsjCNcoVjQiXBAjikHGAjxLN7D/26OM2qQtlRhaYHNMVHDwwGFDjULBSrVKEgWGC33vvnmUN9Y59VKUhvnnzVm5uCJwidmzfxYNOnjwlMaPSvvGXVZeUVUjML/zqgSv56eDBg6KENr2XGo7iFWrQZodMsrf3DuUmyyTGtQB4qwaBIpg0fuhCYi/9FXOmZqfMbFMT78C5v5IxY8/IqsL4qbkL3QAEw+6smlqDmm/vf0tU0bwTBonDL9qdSR2WlU861UdjiBWJltBTu+P5j//4j8HoVj5xw4IfyCiCv+MBBYmlIQtrPX/uSnlVuBnKeCEpuCqhNOVxxSoYA/7pQonw0fpnhKD2Ib4EJDIvFmymr4+MGprsylEnwt2dnl4wGpPk10KHxL6ChXIVhxleSWq5iEbXrMizBHigdEyq0aChWWN8BEEGTCOCp+yoMQm5sjLD5kVF0CzbJ6BSfNVzI+PERLhn3RsVlsBC1+IYcVgRPbo2AYYOu+MFhgUVbZUf53WQPwpUQ+Tm+jCgqcnBKfwkrkIJ21AS3OCAPWzDAUv4FGNxJQ0b8JdSiMk+5cUGgvDxjBP4ywVn1GRBhCASyAVPxgBhWHEBvzIMBOWanZ9RClkkoCa5KJ0sXiIlMVgkNs5CHB02XQXUFE0KH8RDCFpYcFK5v1IC1h4YaCsFkeXLwj4KeQnIbBSKT8tIInvAh7DeIC9TrbvkwfJr0Q0R1CDGukinIHUB/NGhF1xFg/FVB4C8vrJP8V/EkN5XsOBcKX6lDvEEsCdPnyDd2GRoQoNicgxg40BQkLUG0ZBEACO/ZGc2nikKBTCy52Mnzjz22INNy5sJ0tNrLXdYwybUrG3dgCugKVEzKRobsjSIAcRhxPAwBhM4+Iq+BNCYHBlP7CpAxCkYBigEUtQECm/IFRVNQVk5YUvx3GJYooOlBCW7tsKSbCYhGZohQXLLGPZiiTBREO37SRb2I0F8Fk9giysFYRu3hpaU7oN5uIVWUH8/bUJP/YhV9SNDFQcQ50GVVXWYQYRcGECWdKw6Mo9JHy/9JC/LyczIURA+ZffBCbnih2FE9XmJIB15n/rEAzsUEL94GzPLz+uIpDDM+Qs+AlOMCSPF4IZI0vvJkhI/aak7hUJiGXV5fSALFzeukR99yuu1NHZ81OikkEppzLelWWhtali2hMIwZwlAYX44FsNXbVDTH1nJpAyO0x2LnZ+n82eDA+O7Oxiiz9777s/LzrLSwxJ8gzUGUzFghAOflhBgQPfdXdOivHGICIqxN8MeGjHQWRMWVReQYnhogBlxbmmqKsMWzKCqYOgLBrfs5yAmhRk7JHXUcWZGhlIMOOK/ojTcmk6RmblGK+9Mz00TgX1zBnqVEdAMiM1JhvnYOuTtwXxzguuiqVDr4dixlqfDJ9zkyiNA5wxW2Tdu2GzM79Llc9duXHKeDGAR0ZIjr6FlFNSydGTZg+YgaogoV+Q9c+40xiXGSX39Mtqx1oHF2LOBYR8iu4GBAQWUBgZ0/jUU6ItD2rimtUpAulN5Cr5CACrGDlBQqB1s1csajh47DmpOghTzFQv4mASkw1KEjgaJL7zeudurt6DLwXCNKQZMukPzBZjAGR4dZzwGnPT6CopKrNqyhk47QUjCGzYwLJhq7GKM4tgJf6Mp/Ec300LzXktQSrlQtgke5xIA5XrbLQ/SK+Kee+9nY5YmUL3SxRoGz25xTguAAhr6uBJ9VEgURJa56SkzaF565nIK9UxSavWG3nmQl4pAh7UQ3IP3AjEGqBI+1Mf5iSCXg/zwCTpejVt60SCO0OHHrN/Va2GjksEhCWQRLg2fa17jiq7dOGfTgrM+8Kyja7DE0bokMruVIKPkFB0AdbYhB+eN9vUPMC2kII9/bChdJwd7FMq14YxJX32IdurUWeB4STr2LEg5E4yMZEHZUIvoQRx/mSVSRokYHsClV8ELOhBmFdevXPbMIJVizZKPoIHO7NQso1LJmYoGF8ysKPQAQwycPnXevKra7cTxU++++35VRcnCnDu/QjCFsKYMeMMWAOdKzcx64zwApfuDt/CT+Qr3eela/MsKYGlYXeI1oRuTbJ/+53AZNejWcvZjwwIGkMJYaPUvzLl3IOQNLQF9i7AIGA9azNZYzeiUz6aMzy5Oz2dkF5QsqW+pWdqwbdculvbdv/3W4UMHi4vy3V+2bu0qBw5Ojo44x4FdQdWwk1UOSuMvhw5/IKZTIkU7q4INaJrYVKT/zynMB8YaSD1tcSBOLJ/gmNCDklCDeXQ8C6HG9SXwrDthZVBlZVipdc+9ezStaIoSVc2GcqXx3oyZHvLt9vY7LjtfVl9aUblkWSM9vvXGL81jL6+veWTfXgsBi/Jy161d46bt293ta9aFi7pxYnhe9YxtzuJD6WhqlDN4QwD2Cptr0nRzHgNnxx4rYmDMgGVGZrTRVXKg1kbhemYI7ZTQGZeAUCLegQMHGKrhuuamFgZvS6TikDJIzwWI0+kSgu5wSADi/IXpcmTYGgXnTLJYVc9WjTsCUAC5eP6sSAU6VqeNKK+v3OGFF17AtgaT7GBhnIzWjMrw2HBJaZGCLMmVkj/yTaEbe6LZ3r17mYE3SOFHT9VBbdK8/fbbDs5ymAcGDCD7oE9Hjzz0oFJMVmgBgMLaRSO+ulIQ+NVf/VXeYZMY2VFjYBiGKl+AKo3ImF9gXqhFYAQvEPDAkgUxEBGBOZm+AAI0KAg1ghg9URBjEBOwAQrq5oN9yVEwybLGcFk1Ppx1Rky2pyBKgQ/imBElCMhi0RQ2oQoc7PkJeyhTqDdE0MCFhrYsXeBEcYKAWC0N+sDHT0932HsaEFlcpG4JlEJGQZWMHR3t+BRsBTpMckA1kRjlI4IZZtZIcJIHU8GzEjXGULBKm4EpBSYVJaWxmhAzsQdzoYlECsWbl9DgmJ59AIsyxNiDZyYtuiIuGeLy+oq+n8jrgcjRzJSFN8bmjffwkVIRXqJGBBTw76GmLpwfKqWIR0xSo+8r0HQaZaRlVaqvfF92NgNMDMtraAs4oPOxdoLN4BBK+qfKUh9JvyhUJefikyuqBgh+FVIwIIwoBQM0q45YuXqtOeKhkTBEDUkU5FIci1WcZMplVH6CpwqU1FZgeYkUA5OGOuT1VdUABBnJy4vBIvu2HVt18i0LxzYZLaYirwQAd74Ci2IAODFMAR/QKcKYBW/lhjRu+oXK1qxey54Pvve+ZxJRjTVITAuf5DXcqVw0I+ye8YMUWAgeWYUqBiRguqlz5i2zsA1hH2rCEnxiZ4wuol6IQzs6ANgeNYj4LxcskhqGXEkp7EEaH88ISqkIJWISZe/lwoNflQ5AmPAaz+wHD9CGgKl4qGKDutkeOrRv7ICYAn6UBYdiKSkYoRPkhB3vEQQdhmNeDGNAdtIUFobdOD7QGB4aw0MsFHse4OYTWy+RcxRwi3MpU7evbvBWkQqTwQe7AJLTz2SmBrgrCRWsZ4W1OWFFka/SBBNM1Q5IBuKSYQZmP6Myn50uLiqprau5Z/cecoIG0AbarQg0b6UD4Pi9hFq6JaFLasMgh7KU7nhQ5VoIdKuj3RD4jZttkQerYhRaWl4hpcirb4lhDXdrBLdv2SoCiGV37/Yb4zx5+pTpD+EYGZsQlBXsIHWR81gnY5bWkm6upSx4iXcWg9CfbomKni3eTUYOLCUvL60wHhjW1OaGLiaIsjMy5WB8im5P9iJbb2PgamltqELEVosW7Nqzoohlc1qJ9XFFLigxcdbPtaL6ySLIygWWgsJ8014gAnuCfwb1O6Hi/vv2imWSadyrsNesWfv5z3/uO3/7N05PN4/Bw7FN1/hhGUIheQVxH9rlfdyVuZi/c7Si0vFguo2blTqr0Yr8wQGwyIvVa1fC/CkGOB55SaQ24s8//dGPaV+Nrtln2Q1OGCVjjQuiPOuNv/Xu+4avh4dtx3RM3kcsz+ns7LIkzEka4Xz0DBNzukMmK3JNCXINZxSSTldKlDc9h0njBcrCIbs0pWDxD4s3ELhkWYP91sOD/ZjkSEwM7HigfTCqj/0VieDJlEmUQBfOmKKpIcdKJv0cTuVgOA1coQpi7x06zG6D+MPD7nBlWpYBoqxoVqpRwkVVckhBA2+iMyUay2QYfrKCoqu9Y8nSWtmjSQAB2jTL27EnC5bQ95LLYCx6Fv55DRXQEa15ICMLEW0l1jiIPskAzEqpMpWLGvZYu8X33tuiIKWvNoodOLBfZSAwOTjVKUbsWSywE/HkyeMyqioELFtFMXz48CEWKLs+gD3xS5fUC6xmjfTxaNZLwvILCbDN2O677z6ysGTNLOaRABX2Jqr7/RXHuZUJJfRpwVcrYrRFiEnw+oZwfogKjF4Q994aKmjrqkLp1PFwTjxr5+/WpUAVgFBamA3TI3ToYDgYWmrl3CTlYolQ5rVwa4XbCy+8ZLFKWGa8MOn2M8qFj1F/D44W80cHwBtj8iEvCPwaAr2tu6EboMWhOCrwV3MejCGxjzkA/YPkDFBo+5jMldEMQFSc4T8j7nbnOCk2/JwZ6CcVXDiYywCk3ndKasZcWsbY9PzoxLx7gkuqllRULVm7YeP6TRpkh375y184lSo3J3NVS7ObynIyE1Iuo/hfzvnG2Otv/ALmmm4UYcIaJiFqpafdvN2hIOcL8QKawrJlisDX7NPZ013xhiJgxaKsK+X5GsdUwGKVbvrXfKfmr9tFuFhsFlg9wuOojKfbYzA1PeP4teHxCSNt9jA7Jvit/e8M9k+taKresHaNZUsrGhu2b97cduMao96wdfNb+9/EqoXmKl31kLIUjR9WraBYE4szXhoRN5utg8oUX3/9daPyrEg8NOUdmwLR49SFDIYbWrLoSByl2KjKTSw8c9IlZe3bt8/CHgkGBgaVYlOgKISChrL1MAgKC/6CgqVp8ZiC8OArP/UT+xTEKC7Mnm1cD0nPEvhL+8gyb8+iJUzQZ/+mHTxoqa5dv9ZCUP0cvR3CeqlQUYWkQoSN7BJzZBkFcztKM7NzsMeP9NDsp1Lvvv3mG9GhVq1q+cSTTzFy09FMiaJp5OKFq8ILvQtowi98oMG/BAFWoYjoif7i0LW7TmM3FoYNoiHukmNsQ4+5xhrZ+AIOBRwg6FqYkOd0LESJERDXGLEoC7gRtMTRr9ZJKshpzpxOG0pK1FhgjLpc1a/Y9gbmLM1XkHJeRWMVNZUIJP1VE8FK64ppgUiJIp6fCAs9yLv7hWEjRTrOpQjZvVf9sluAq2uUQjtI4U3Q0JfwhudyB0RGR8bIqAOA/2RsdNbwH9nZm1IunTuPMcRlpxRx1QcDJGKEbFWMQioKBXApiUAQDPMvaTTIeEcIFNBIGtPyMsJoKojjDUTYjkoEBf2yIqTQEYFph1zSK04rWDLs0ZH3sVVAcaZ/pdThRMevEPCAgnYIqwBykj6dFyOOVMvKFaxOKSzBuJgajVyG1e1v1XbEFYkAortLC2oHGlcKRUAVXHBjWgZRR7UoZ8OBLrDyIRpA4EBepWBAxiiRryR1pDbKsc6SOH4gQzQoxUZnrMikOXfhLNswgg4uKXOzwnVpKAes0sKRR3Fix6FCpiO8hIC1jiRVIoKmaxnG5UtXdPsduU0R6LNz1yYyP/SxJ+hiG1lffRiY0iEGJRh6H60dGz7S6wAol1BU6U3US9SsiCE9uCApJR76+vsgOTkTdgvIonRGxa8l86tcShHfsOTjKwYYD7ViQ4IotQdERDYJvPcroZSFjjeCiaaIX4nPEegoYpgEtwGgoSw7pfjVcbE2YeMNEfgQELfyYpgg1M3C8YC+XyXzZmQ4NG8UhBkiK4UesQFquWQnAvoS0Iv3qSuqi2Rgo2jFkvwWPzL7CRB+DbgkZ4QX5BkhCJ1OvyojUA9dhrAnGAWs5BfkusnLqK1BcxWSw7PN//JGDmYspKWl2Rq4Y8ePWKIr/e2bbazTqL94Jw3VWmFDJKPUTsLTprcdh9rgQi2ipKI9a/oYDOAJWkuHD70HqYrqqpUtq23f1ABz/RluiQYUc+jaWChrxIODCH39NsVf0dpLpEtxPgn7xrPVRAwOxPYh+Kjlayqr3VDQ1FwPFtSUCwo0NSB4LFY5lUM/uSg01Kx2Mlyywm9qvLKmWjJY4xA+yFI/JumMdj1QJ2WIazJib9u2LdakaDBxUb/KwobUH4b2DZaL5rH1SfHI6rXxakO/NCox1REKWV5Eax7whr5F9IqDw6o1a3XZZqYm0JGSFTr5mNkBX4L83DCHgA25rOHmZmTXKGTlJEJfZXbx3HmJtfzoxZJqNEVJX0uLii2/MDStkWWb/PkLZ9mrEyeLCkts6Q5n3VSZW662hNrJ9wa9vLENo8e5Wmlpr778MlY3r98M/LOnTlOobU8C3NXrbVYWKsiKTHWLuqR+aZ1AQ3fRr4jJgk1xYokUmIQDeXFFoQzVyKqftGlojb5U/5euXPVMKKLtffBh8UITIQTliSkC6qjFvgT7FAfxwNvV66CQXUYxCzhK9BNNCWpagX6FNheiIOhRtNI5LU4oFAUM0yNOmAHjgaeXYhO0kWVmxJcYfeaBgiaIFhL9WpqFN0SELQLyDjtdGIapKhaISYbHmNkAo9q0aYvWlSNKxSlI4l9BZ8+d4YZG1wzMBBMNvf8wwcLeNIMEVufD6i387u/+LtDgwz11ybRvhN3oF/Y44lCMhpgRR8jDnIzirNItL1H9EAoIwjdBPLAuSxvx4DhOJZJRbWq0l71p0fiblZ7G5mEItA3r1+EQBekzUjMkTqaLw94s1xcIbnADjikpfRstSLc0/OhHP1HPOTU4M82KGDfVJmMW1sg7s28xVF3a4vBJztzzk9fGMxhaiha9Fr7ffAFsiHohazhvxLPqVk6681cOaXQAQrKM1BhA+X1udo5puunJCb/Gplu6mQMrC5OPl9b+WAs0MZcyNjE/OZ+ele/0scr8wpKtu3Y5o/3MmVOMx8kHtFDk+pGinI7bN0yP8iDgw8HY9ve//32lc0/LrPAGKLVCaP3fvKki9byhtRXCmoasoruzi74wzPjtnAYUBbEupojImdOnndTMcjQNfWWlzz77KT09ZCnaOQGMjezqLV1K4dSaUVNcSy2xnZllc6ZPjxw7ij6pXY3SVL9sZKB/9aqVORnpx458uHL1qhu3bgpn2nZaMECgWQywfJo15E/1jFy8VTQYQ7ya0dooIWBMCS5SsEM+7gEyzz77LOOMoY/a3zl4wBUojj0hzuHDR/SNZeGPlgCJAzoAOg+KQJxrMFHzwpyI5UOSI3tDZD0NCTCjHU8WfWAOpRRcORGE2fuIJNKARXY/edZ4UsXgWWeGbmlh794H6pfX4w0Dwi+cYai9rt2GK54LSS4pF1TNGDBRIy98k5tohJnu5jIH33kn+G9B/te+9jXlagGYJYOGlhlv/Yu//H5LS61Rc9aOYR0nkUpcwg8PIqmC/hUfl6CbaTYyogfIKjCsIEIRgaeTEQPYRpbI4CWjMXqkcM5goqbMAWLDjLY39uGQVKfLT2WlYU1jQX4+NxThUY65GB4pAKVH4ZlNgkgRGFMKVkUApfvrPR5IEbWpKU9l2MAhg/SSndTV1qMcYQ+9+eRcSBHgytVL/m7atJFhIC64MW+c2F4lL07wKaonIaIZzcLisPfAHm68WayJDZCKUVcvXoKMr8wAS5jBJ3wAgQ2BRWQjOJR8kOVQzBUbDJg21USgoGtZJBMhoqejhmc/eUMK6VHDsDdAQ8p7fEbFEVAp0gj+fX13Vq5cwTgR15LBALJsmMMSUACMKfGJDb/aV4NVgzXIxuitHyS8Q49ta1vqW4rG0m/bvgUO69euJwVuMSOBtVtMiF6wh46ZKHWoygUzspguq64Jc7BKlwDb8b2fFI0BwpIdeYdzQsaqE108KZmQBD60wBp9iANw6VFAELe0NjUThvwNgPoLELsWMSYlxCx706sHkSrG2UZMRcVN1+IoZpTF/iemQrfnB9//R++XN68gkaL5b+/dAUB5Vq4ICUCcoKCUWPso3ZuAm5OCkkPVIR/RzkkPyGCGKcKNQylLMkTkkgb/lEsQzaGBoQGl5BWGM+LRl9FfHwJKLwFwKIVEkikutv59jTYmjSIwSV6G4b000cDwD22xQsz3E5qsFAL4oT5ZMANb/ERmaBwRPLNzaXCCGoQ5vrt9k7mxsEKPIChjDz9KJ4Ulox4kRtZf1BTngzL+/ZWGUnz8JGXq+sZqTwSIH5jiw4dWUPeScVA/JiRDYiEcsSdjWPGvAIHPkK1kWpm+eqAJcwLkwYGvmRm6EOEATbHJgT82mKp0bcw6+PbbvMUuPcF0cjxMJhKDSbGfNa3rVNJuqWR/kFIoI7h86Spl294gNiFLABw6l6Onp0P0N2vuIh0DTmacHdyn3QAsTFo1pLusINV04rdTi6l8OLgxzo2Qgdg6WuVqvpDRmA2HpA8LN23FUd8D1v1NDBfcOISJdfBKNybB2eyT4zagCO28hcXCkuKOrnYb+5DyQYe5Y4OhaI3JDpb/n6v7gPLrOgtFr5mRpml6702jUe+2JBfZklzimtik2SGEQKiBABcerEvWAh43N9y3eMB9Dx6PDgmQxKTbiXtRs2TJsnovM9J0zWh6Lxrp/fbZJu+td5bW6PzP2fvr37e/XY/C1OCtv2TLJvinWKlNpUvlNQzCELuxt4+1hXWxtbUCnwbGufhz83fQTLrgUJZijJWIcAQ+mKREBX6q23vjhnH3puYWuyy8EkRwnZcb+jyGD93b2EhNiOEG5RWluGBhoGGKkJkBqq5euvztb3+bImjQdh+1lCcHszjORmhevdp2W8SoIs8gPbL01hM0uPHTQ9jRwz1Wrl7trwQK41cvXhWtzLxoVChAGUt0Wq+1YdZRXHayeLtuzSoaJ3xtD3GBBqygj07iRaTWV4yDyFsQupN1Drl5+QzAT3WHR8fk1qyF1tZt2EQ47BmKM2fD0MiRw4eJl7+xQAYsDDE2ZWiE0UYu/CUxerFCnTVBBykpKayMioghRhcVaJbgck96ENE+pRMsCH7STvR8K39wJO2mPkrEF6QAnjx+LLh9btjDAAIz27R5I9nK6uAifBYisabKN954w/65e++93/mhLAELJAPvwUPvagiNrknI/MS1fjgs5G/+tKS03KCaJMMmS8Oojz76KLx4gYuaSMBiDNAeeughSMWsuJgQEKKOrYVGMGg/+eRqdXUVFDwLcPvPsKkjrfmRG3l49OgRlnzq5ElcNNaFzalkSy+TE2OEJgMOMkk6AAIJAnwsxpwPPUIBnWaSwauia/bugYN6Yp0d7UtSZPP2zCt+y3h/kPCiME8iAhG1DwFjwfATlVn+J8E3UCjQSYSFSBew/N0NSforFimpIgi4du9zBJjVx/NEGb0DP3QAfNI8VNc/sJfA7uYkyNoNEOrzxLQM/ZCJuUWTc9YFZaRodPJLqhvq773vQZnWW2+9I4lC6rKGmuut5+7fvkV1YteZDqlD6pK3335biGCNpnRAI3kdwCPJoRBVtVWUJc6yFpaD6zdee521KA+IDoCHRG19l2+EO7uss72Da//xH3/FxCZrZKv2tatFBWzeKUvqqkhfhlq0ptNTc/ZYb99+r+OdB4eGjp86ef5iu/EKYLds3nhrZtp6MhufDYuUFhYIHDrxDY2N+op8Ewv79+8XwEGTc7NbfkGMbgzoyKgYjE+MCB3Ks145vYM7Zf8IELSFEa8Qz5x0J6ykl/pfvBwmjuTZPPcLX/jFsbHplpZGnxgzA0D+L7zwH2wGFlqwDse95IC+hAJ9BjBJT6xmfhxEesTYhA6yUtc9O996112aGBTqtYoPRETa7Ja6GZ5i0jIZPPsU+rw6ejzuow1HHOpgwKsWx6GOWBFMriczENAk/Q7pN8/ArXgTv/uTP/mT2WT5x+/+zm+zf9uHeASro3cFkP1P//y1z372cwTyox/96I//+I/VJRMRg+35qzAsFMdn0UxT27bda1II8S6iA8R17NjZdetaVGRC/IWRkwxSvZIyYooB+OnChbPM6aW5pYUl2FMnntjtKtqEHS1iRUEBRjDIj4hFpMWpiuKhyIZsXAgvaMOsIECABCKskR7JgwAFzXouDKIcagWieBlVZkbIqwBRUlLqRnOATmt0cbp58yYVMRrjKhXDSLy0qbzjPQgE12iz1MpfC/LRkCxKCPk6k1t0a0E8B5D2wfEWazASDjIYp3t/o65RCCmAaEYngeAU15ASGtrAgcWrEGeSnaDIIBNVSJixYZy0oYjti78shz0rzCl4vUZTKFYMcFV06lSHhaa4A9kSEZZV4U2a+PLSCvfW9XgFtbhtPpKdMAyU+wY2+HwZPRcvnQfz5o2bFKGw8R1C5vviKt4pC2QDPViAHcEM1SpyzbIP4TIAjHiCePIHk9lrhdGMBWryF3cuH1VjisSIeDcgA4s7VfwkSYKFl9URWlFJIUTOB8MRHuNcKxTuHWCgopIhY8nPJ1LP1e3rC7pmUUFlvT1ivmWc+tvjPqaSnPZB9TNzt5QkDXCqq2sBQZi/xOLCCPkTFPl4jio0YBlt7DAjNcx2QuenOCCWMl0qABwXnvuJcpd77UFNbZXFW0ABi2tEes4SWAWYnA6d5I99+iITQgsVkz4S1ETqp7roUR5hDAwBFIQ2NHilLhW7AQEKwGH3KnA6MyOcgoM2uJQpKSuHBcGCkm13OoxkCx0xqqtAkHOSwLtx2Z6GANU//JkskwY/EhZljjtlPAxesL6pTH0QVWBV/kZCo479JWJv2RPODcPPzQTXVZyUkQuQtSdubNLFiUt1J837G39WVpQMOfo6OU9g7WrfWCm1StWZbuYR4bLlkeXpAAhwRKZRMeKi5bY21y4fh7Qg0UInipyZDLuaHKFIOpwKfDI1b2j6xdIdrb2C9lYbNLp9ZxE1kzv5AsKUDYQZgcaIs95OnjYwWSSmwOW4bjAtdj9xwjeoV7Mwh3+xfhryQYDhQSckjq1bv9qiZ/ZHgqbmMcLrSL/jeptxUGrjMzo5bigGL3LuOGuBALVImYNFcUuMxCZcay34PyxUnpMbRiY0XcH5y8v1kgnnwIEDThJS3li1MAIO2yUKHwgaGZ5ytppgrRaOWFLz8mUKMOZAdtIRRyTFBdHNzlgTZs0opsiQuATBqfGwSuzW/JwEEcGswegm5wSKU13vuIYXrYIeiwl+98ggonOnz3gLCNHZUk0LzMD6Ips0fPfSPXtg6PwEcKDYMWI8ZKaw8wRCcIyDQ7W8daKHkHGjqwf82akw/0CMBMuzu2UBXV29fTe4Pd2ZNXr88ccpC1PMl76IFEDuQWgucmAPGIn0678iw1YnF6bYie2YSJIuB+vPC8OE7Byd9teTuTlUcy/oxAIK1aIgpoVNlGvSWD563EBEceZSNJBilrDLI5ANWrB5yWbSZgDlJ6kyP08A9BOD7pkQsqlJRWnQnj17CMEri3eVxyxc5mT0o7gD5SKYSdCvZIifsQGhBxCHFMmGFTtx4pS+rqBPvKjFL8jsDZ0CEwKcx2vTIcngyF+02fpMeoQJtZxJ147oWIKKuh/gK2nUDZHuvfINE/TjkY2BgIvkc3828DXBogOAfkpkG/03b4DgtBNixA45SzHx25oMra1fs5ri8KjwwXf3E5eF3cAiCWrm5IllNkKiGxh1rbXKUfiaMZ3lYN5TjhCY0wFQ3uVwDlozy8rab4URCXl5GL+YT0YokGoGYEm65idMBsCrmDJmcOBVzE9xxhMlk7phaiDOAOgAeKgAwDYKO+iOXrwNh4MZP0g6A+HlwnxaSjIRusiJQFnziywEuj05c2f2dmp+SUVxeVVZlf7bVjavt8lUysuKejsufPYzn2SiwahKS0jMlwBoVseDtH1RBNTqmjpD3TqcjLCiutL5S5cuXCBSKqZWUUj0IChKlEyxEIJy5KiFguZdeauuHbHrL//pn/4ha2FmDIwdmlQkQ1rQEikglxocHMrKyEnPyFqxYmXr9Tbf7PHVQr0vlFiragup7VMLNlLPOgtt9u5Nm0dGRx/+yGP//atflaAL15KSnTt36gPQgg4Ak+BKjFaUIE8Es2Hr4HQp6VpSznGUZJ9EQf5iHe1zYSYEIy7279/r7IfnnvuUdW6GV770pT9YsSIMnehOmEUUu1pb21g1dvbu3cv8xFjLPyhEeQCZrpjDmGEXWnk3rpERDYktmfTgOIQf6YRUS6EiA9PKopwiDNERGnb81LLY2LZ7905xWEADQTMMAhbwKIsSWBRDGG+CC21AOdZJfwaof/v6102Tm3PgOL5uRvLOPpZC0Sp0DOk73/leaVnFunUbVEQnk1MGUwCiilMzBhKDQrzCzphPhXR0CowswYUYvuwGNE6kX4R4VDlHy9CvkOUVLC4C8dcrQjMDAGZDUxP7sRjBQ+stYXfuGqZM9IfWvLCQlJDa3t4hh8G4xk5dFXk6o0WkLoGAoyJqXewQm0StjPCoOpIURjy9E5SS7NYSIHEeaswaHedTpC0sOLIJhWVlpcgmDVRFHzF9Tq0est7lLS2g2d4GkSOAeJCBMBrMzsljUQICMpZmhNwrxjfWRYYKEyMCeL0bryCKEkMDEcXES0kEM0VAFFYyxiv3pIcp0ICiFzf4As1f0ALxyUfcyE2Q5LMK0xdQxE9BOgDEoq4nuvrIsz+EtfAOZBMLGsgWNCG3qjKsL1UeNImiV6RH9YZIOBFi4Fq7brWHQoG6ch90MkgK4tFUQ558jUECrh1HibZGAaQ6Y6Onp695+XJOhwCCJQe4mDR+aRNTUhQcAUI4tOwDg2ggGa8gQhtpKOBeAbVIT3qKKWV6bnTj16Gq7gnBeAyCFfbW9xDoXfwhfJm1t1SMKtalcdc6q6IDAOyunbuVYaXkDB1OfZMTp3Bh0OwuQdE1YbqUJBCXe1iQ6hXiseYJHqfHJpRnkOh3seQoXohoBAvkQxHg+Gm82BnWhsOZpVo4pW7QVIlWoTy/JiLECKG488Tlhr5UibLCnfIqIsy9SD4+MVdTXaouAkI7knQGaASRsaIb3LFz9DNsLoAdVFnOSqf06D7GVTaGAITBG+H4621kcHhozE+veIoyyEAnSqIAI3lekS2MCEh57P6NyrnzF1cu9PlLkbiiJEXRBCIQrkxn2+cXKmx5LuggGo2jSA0wFZK4ktpb1Jga1xwPD/X7zGjityMlRQUOMHEYlnS8LzmcuLmpERYh0uwVrszuhzWLxWEqCgTr9cFEKfYW5hZw7qxPJbFEUj5eaqiuoNgwg4XjYXZvbjaM5HV29cqf9IOlTT50r1MDhaE7BQy2Xb4qGPk6Ce8KPXhRDDSRNI5e450oLG7hQqxfA3Czv9dqCkt0jKjpuoiJ/IpYWpqbCIFKsDweTpAMc16jY2O1DfUkxv6ARTx9EyYjIysEkKonurk8QeTSPBUVl5Ih/zc3wml5oyhphsTx4UpWVVV6aGCPDwNbV9vYfr33jdffZjSKgcn3HCQKsg5DSM2Ts4EBYdP6ag5K9Y0EbScr5GaEhiPrJMj2wvlzrBNtBt6qKsqVDwQvDZNl0iaT4BJcuscXu8TO2VOnzVRgGQoHxpFtyDwGnSQ2YBMTaWOWfUON2Sil2OGJpibQkJWFPeGcFbaUmalMWVEJ9x4ZHIGLCRm/MR4iEWZvvrNmaxeC26+1krDoRlOIiQ7DIQmEPaCZ4gABHDp+HrO2/psDSOVCQBkOxoImPwTNji5KRyf9FhaVMFWZDV4wqIEhTHGB3qGjIw0qucESgCRftFFSx0/09JOgiBQEWBBGiZTrIVBJ7A6RjuNRIkEpQFmoZV0uxCDVK6xBalhIesEkEtnOYY1elBFbcZqbl2NATmNJazEvMT3FKtxb4dDd3evQRuUxxc5FWzRDBDJeHPODEcIxfY8YMqmrb9ScSH0wFdzZ+HB6uoNHrAhi2Kp7ojqCNcCmm69evUZ3/Bc0zCYRPCxWoXFJRklJaDWJlP3MJksnHW8XHCcJoNb7Qbpu7Vqnuc1NT8nb4MJRb08XgrEJHSkRnWJu4ul25jdUP3/2HPLg1SyZwDFw4HAKkOen7UILuwbRIJAaRXF8EXVMz4ZUzGATyHPJBAGq9Aic464ZlvJ7Tj4e2cFCzlD4aa+Sm1AtSZKUsfhfGYP8SHWBoIwdTT7qrqQOAC04a80VwDssyKpOXyy2DyAzJ3VJ1vT8HbuwJmdv6wM0rVjjAxWPPP6kPcHnHfh/yRLe8R33rJ8e55tz4XuKk5Nd7dfNGTOkksISErZI16uGxmaadQ6NmFNY4vsSuc6oIi5pqJZg5wMPWgPGfcjHAVh6AiagBJMQlFpaONHXvvadtWsbP//5z8eOq/aDATBadkhNRCdgop82ly9vud7aLQsmijfeequzq8NppOwqPSu9rroK9NZLF6cnJ5qXNTJyod/4/9f+7d8ttjBzJWQhic1IefUkmR/vYDOEqTBShReL+A8efE/6zqLYnggPkX2uUmTYyZMBsGQsuzl69Kge45NPP2X/OnU4FlN6qqcBuJ92W7EEmQNfFq5dDI9lDgyNSSxQIvcVaqDwk34RwFo06uwcUvARgDzAUU7UJMYBvUWwn+4FLhITJWxToRHPjcW0tCw3juHeoL5ZOxEptoxQuMiWX3so7hEs3zflghJADh8+asuK9QUb1y976KGHGLm9Q6dPnsLsI488xNIwSGaPPPqYxogpyYGQBK97wRAW7EBBmHTH7wSEV159PeROmWErjhANI9YUoF8FOBFG9JegcIM1XHNnZfx0ESAJODBXV82QuF6KeS+xV1jGxdIwSp5j0IfQiIKlIZJn6acRHfqjFYVEfPly4mJpElbYgVWe2VCoaCO0RmLIHw14YavCHeAALs3O51ZJ7j5j5gDMSKcut3jrCHxqVZJJg+9GT5ix4V3c0DTAi2Zm7MhI6KQanqSkhc4wsHBZq+biWTjiIMSIBRRiIbxI8iQliQWiGHlojaDQrAqYZE6SHASWaDbuVYk/FWbYrNdPz7W5iOR6WPNcXXT6yTKTHlGOoRg8eo4doqNiw9tiPmehPgTTI6qYkL/813AAfYFJC86h0eZChNonnnhM3CYKH9A0HsdZPFTLfigCRDzsoCEJX3IklwK45n2chRCIqK9vcNs92zZvuUuChFMAFdbKcDE6YnskhkEAyS3Kwfo93BOI56rgBe94dE9c9I4LSD0kq/LKMLQ0OROGhGC30w9eMNFmEloZYlRY7GbbCjCevLxc+3z4LJu0ipPxtLVeU76794a64gZXKpPGVVbiTjHrFTEFNQgwkgDeoQMcZEauSnQEfuRVWvJVeKwxCa9AUIw7Ky/yYMo9aZMDgRvQNPdi6QGaAaEmSJEBVDQJxdibkn4yKniZEEFRGfgg0zvyqCw+wYjCRKQWZ3GjQLQQxdwoSSaoIlhPEAMpZoNVp6QYBLl0pZWIlIE6sajQBXWBr3C0Zzco9BCpWZnByyCiGhQyRRQSNVKpJvKSAAiTWmCmfOKx+3FLmhADilyFYk1kRf4JGgKAvFqSlq4MxA4pBxQyK7dAdMRs8jN0PrKXhmPU/DSOPj3Fl8L2O5eJ9NAY21LnmO2UFKapwyt0GuWlA8qweMZSB2uK+InwYdW4Wg5WZY6OCyRocwJR9ASn/dRgNC2vXbasSVqP1KzMXJxfu95J3yKdugbK5ShaBYPfiDSWYckSociJaZpbY4qsNSr797/LrzAeDYKFYfbRRx92dKnO0qkTp2pqqw210p+jPLyKqjJeCbiZBPxinBjvpH641xCEJK0PSz4k6/rrdCzwSWQVFgsYhLpT06Z7wsGUZhtIQErGkm4tzFmBxkDlOWzIxLGAqNbitIzystq83EJjb7jzRBVHlBA1q8YI1fABiuPzly9ftN+rsKjCoSiI0csrKwkHbzn+D79O6iX5yYlxqtTgcT8AbRcOouvvs0/DE8Khd58v4YQUrU11bh/JY5+c0UwatvybImVJeBTlvSJeFqX9YL4aKo292UkE8G17Atji4MiwbdMEmHo7VfTp6ugw5NzYsIz0snKW9g/crKyoYgMd3V2iknSNKrGGGGN7JAY+7BCxYH8ZrSxEGHUjD3DghbDikEXFcOTyMVcXbASrA3Do0KGeHhuglzYvX6Fts7wBa+TGrjCr8SZAPH7iE5/ANRS8juWoCz4KpUH81ivK9ZaU8EUR3oqbZEIjoKEWUp4suUct80YVUcsYqJKgZM9aAprShCDAc2Xg6r8RvqMJjlEZYjR66hQgwEVOwoRLy6Frh0J1wdm37wD4pIo2f6GQBlAifhUgH9Po2h4/d+3ahTaCgMjPiE6IZAz/9m//ZhyXGcjR4UIP1rDDaLds2SoysFXPyVl5OSd+yYS4BAAPKRcXNniwKLtE2C0IqttcQz5H33+fHM6fOa31UlKGNHAzbEdBpDKiG1mpwt812oRmERF7fvHFHxjW1cHcm5ziYlzg2tVW7M/OTDO4gDos6gsLW52+SeBODAsBLglT3oGMd16fHjKCFBl7Ep3QddsSIBcG4TK6H03I8/DUCsbFIZpb24Mq8hSvHAOaHGoww5acVaLMIgcPJWOH1hfdmdPaJTMLJiJSF8/fXjw9vzCzkNo3NFFe07Ak03cyqtZuvCsjO6/tWsfAYF9TnTGvXB9KvHDubFdnu+2gI8ODD+/aTXTWJzvJfklmxs2BYTbvaGP8wiiSW4FE4HSE31/+xV/Q6RUWrLnywTVRkUU98MAO+mWWPjEhiH30ox9lPNZF40X6GDhdtAgKsUgryMixJppZMFlUWF5UWPK973/H0X1WmDz00A4sT05PrF610nzC0MCAY6m2bb0LHEscRcj+QR9UKSIKJoEk3rRz505mQ4NiC7Ui7I/+6I8s2uG8vNIgu4de0QhTOXDggEya8CnLQ5SgDVVmLZT/zGee8y1km2V9DOG119620lA3RgGR04nysN97730kwCRYIAbporcvfGEACgwKR0AxJHJg3gDqycsdQeAvVMz8cMe/OA76maWH4HjLPUUhrm05PhMVlwhZsqX54DWcEbOEQG5RhsTOQgDns0IHIfMjJTvbryGPO7S2ttm9v2pVDTYN6LBq3Wl8yf516wRMMby0vNIUlHWt3/rWt7i8kgQr5+Pj6KcvjQXWXALgn/3Zn3X33MjJyZXvwogL3HkFlGJhaqivz6oSshJMWLvcCLXIdk8UhCA75ykNTaFb7mgzkmRy3NBh2djJy81XRXKmR6cACRMOKSFG20pW4ItmhENWBKU50LFhbChBOQjEi2yKphcQ+D4WNAREROACFDmvWrkOMWqhzdAWyv1ElQWoAq/vKItaRkyVpFBMOViCkLWbMDY2NePXskCobVxGWEV5+PCiY8HdK4PO4vy8GLuQQbO4QB4aokhJg3lweTc4gpGpKMNoQVaS9Kg10owFQsMsSrxSICod5URBOMjWaSFeBbAMHYBYFiRpkyqN1GhfmBA7R54nbICUwMc4HhFJpPRIbhDh1OAj2tgYdPwaRzYokiTgCAunYoyGE0GEVmafdB3DYkUseE416mp2xXzkEbKQrnVgUaoTLDM2mq6V9IQ62IPmiMszIbatir+kpyQpqWhjXthudTskl1oW/oUGYHmHt5j1l0wIzStCsDkUGTn5Oe7BN9SIZXJGv1UD6PQWcNm3NkVFotu7dw/ViCHaU8fHM93iohLwHfAAKdtAj2GRSD8ZSkCEEQCJLjYobtAWrYvKYImM0B0Uy+rrSJJskQopfZEbXDFhoAKQKYv8FbOzPBRODoQVgZUHHBwAkYr3KGFYaBlfHhICe4AdfD9Z4+SkT56FYzD4DgvhZWAqgxhwjHf5iQDPaRlexCvMwJRR3hPF8MhIjO5l54Q11RyThMFHDwaRxN5cbuJF4J6TWHZWaIVRjjCvyN9fr2jWvWIgKKauezcpO+9aqZmBmF5hVdQ7L7xWE5WocaOAiwIo0s/Ex0LGExSfksofzEtiAHseGoHDLclqvSbGeXLwEJcREXmqXoABNmusWOfG9euITJKtFlzsWPfRR0k0Pdk5S22PE0ltc4BOT1dENoRPCqyTMvyUKPvQRPjyaDgddpHD720Ev3a9HS+Uqpg1JxSZnZ3lYy6MQPtqCIAgnNBs5ZKJHSscDYHWJVt/fHcNMYJOHC0TcyXl27duNbzidHNNF8nebQ3p5i3G5IiIqgzFokT/lpIgDSJOWwwIcXMqZsGC6ZsoBEFSIl5ijEOhANqO6VBeURupJObtpUsXQHbQSlhovCj05HRSwHFMsq8cXL58ZXGagZq8rXdvs6wWKPI/cfI4yXd3d2JQnwpqksS+IaWBweEp3w6YCav2WW1xYYGAIvTYnLN+zdrgTgM3jTUiHi/Sayxfa29TOHYAUAX+hXPnGSjaXMc/+EDXRTFWS2XwrlqzxtYfzT/I3FIs85YJsT/kAY54qQaX9hxAi7J8KKSpvkH10cGwSM4aWW1h69VrWlAfXzSr0Hq1zSSSjd2i863ZsB/ahGpTUxgGMA0KCBuAmpWTOdkyG7KV5vJnOIS5gsIiysIy7fgWKdlSK6pKyirQA6AYKo958sknmxrrCTy6HDblJSgXeZkrNWETTIzgHYNw+QYSmAwSfCMo/uqsSlWZGblRgaYOBJQDpXzUviqU4q+HMSFDEprxghFVdGy0BF6tW7MaUsX8BTA0ybPTHFPfzEPxK8EeThnyUwHneEg4MCWuJU5mtjqc56Mk22MP7qHmLIL+Zz7zmSEL4SbCMRooRy0I2Ge3P/jBD9zoEcXECINMAklOXaIj+tX98EqA1hVBGzJoUAgiOjyC4OAshhS/AUk1gNsCp4zPKBDOmZMnEAOCV44BBZ9UERZHBxBD+DoAvMbwgGjoxEmpSU93pyOPxBExw0PfAXDuDYzUEZhNC2sbZmcM/8+IDCxfsoM2c494YSScaO6WASo7kcKojychmoVgHoqFSxchmawA0A1o9iQEyMlSH0SGhV0eO7/Md82EXVOyYRdBmHJ1hTODblsIC6Iyvhyot7nIl8RmF1LMA8xCkpFXWF5dt2xVXdNyKyOdmtPdebmoIAdfrVcu+zDwlQvnt969xadGyZAx2ELqU5c0uGLlqryCIu1l8tnpRToAMntM/cIv/MLZ06eQamyFbB3U29vbQ1NmeJiQ/aku22o1VCywsbGJ9bpRgHD8xSZLYFRiPuE7bviuLdtfffW14IyjI80rJFg+CtYg5hiAMDxlTkaSNzUZNvBUV1QePX7i8qWrd2/bSvuIYXg8SIj2FnbuyZi5IU1xSX0D9u9TFcICU9Ta2dT0xBNPYBNV+FUmRhKJiBYxScqrdADOnz9rlgA0+1tglzwB6ARbdusgQZ6Lfq6HBgN/Fn/SCHeAizFzKypmTowWfD+xGaPxq6++yux5gRldfW8EoFxh9IDGRA2aOh1LsPITUm9F0bZrV8vCrG2pqI4RkicrtsojcI1mqKVcbiR2BHLl0iVLtqLfmTxh8I7HVevh3Q/x9/feOygFrKqooAhprgGpguKSF1/6MVM3Eq/Jxwu+MMg7eB+WvVLYiC/yrBeycFdbB2lMPYU48Vw2IwKoxQH5O0XzvmDFyV4XP9W1ONaaLoP3A0KANQ9hKsFH5cJRGb73FEKf02GkXF1dUJMG22Mkmi0kkSRB8U0Uiq4YoRHVwfEcAdHdggPeuqUKmfvLEsjKDTLQyTbYwPDQuCoxlkpCwHGFSaeMcCySDoChK/DRILbD5dsDwjWAKBSx0X/kyFFK1Hx74FgzwvHVVYjAxH7anXD2DmWBRoNkaN7X93QRT5gYcSV+HVJGT9wjD5Do/h4CxbVJGDRAqNW9YgqwGex44kYtNuY5yDCShsiGTUYoo2WN4MCQkW65aegjcUnl6UWWj0EQIka5L8rJjZ8yRTsM3RMRA1MLAQZWtIzcwcpPrRggd98ddo4RviYgL68IJbC7hx0NcbwfGQhABmpJQwtF+K6xiSlyEwQ8hwjjbFtU19BTtHvEI4zDokqE84UQ6xTAV5hwWAVoELEuwKnJXxWpPlwLYSrPpzOU8cswH7IVUN3Gd4LCOJeUC2OEk4K2efMmWlBA+aqaMCtiKRrGDduhChfotNFfeEES1xAhoUYk9rkGquACAeMgeAWUYjSIKn8rSoqRTU0YhNoNsTCto8dON9RVEjiq0BxlbjMMaGYM2Rse/SWKWIDhBdpu3xYc3DADDgsdaYMJtYcggwORt2qhykMapDJCAA1wCzXpjsrQ5iHaEjmnySI8AYdY8KIwaoEyZgopNcEVmXLjikg9xy9c6ESwq+/GgHtV/I2XexeZQIo8dgKOKioGOBKLRFxhotzhmChAlisx3ykP3SSGqDxTM44+5wmRgcK+Hd/hcGIyzyssCNBnzRWmWUniglLbmvhYSBdQnDT2i3UhbK5lR4J+XU21ApYARX9AnG9bLs3LPXr4SFd3j+9NEh/RgKavXxs2XIZENoYnq89rSqra21s/OHpcduxAA4djbty4marENbPPRlasoJLm+kYYKZM7sqUjxUVhMY8DMcw/rF+/9nrbtQ+OHmFMjb5HUF0pSnJFHsLfKEBnWkVRe9s9243AWXmHYJGlsb6O9dfU1+Hax2GJWKCfnJheWMQnw7wzw2WCoDJcAQsol4d0xrJB0H89cvjo2fMXem/0AXLfffdaB7L5ri3U5uQQwTd0PCanB5OpN9841XGRPQ/dDF9juXzl0rM/9YxhM1zYrMZiqIdY9u7dj1TsX7igHWrKLxixBOj24BAaANTbMZ2tGPMiCl7EUquqaw4ffs+OcVk40VWFAeY5Yy09PltbVuEDzNk+cF1UbGQXjytWrZmdX3j/vcPKYNOGaMNmyK6trvOlbp9Ia7/WYfM0fbEwMxOPPvwRbflbb7xN95cvXlm5ekV9Y4MBbB7IfhyIYR6GFZroJyuBiXI5iUUvFZWV41OTAvfUeOiCakv40pvvHCNYDMJOgMoTqZjCZ9xrhyTufT09UgRMYY0LeSVsC0N0GpVCUKIh723v6FJ+x/33WucNOGM2JR35slBNy3Hq1AlVYMeohpx3WCdFbp6A7AlNxWiuMwag0CBOIYzRyjC0W+BTd/Qprg6OiMbUo3tzSH5Bm5pnQtCiA3K9LZx4HYMX4hlGjNRiN7z6V1IBAEiYDGOmQiDkw1xrauqIPax7WRzOWpHKHH7vCMio8nWVNavXfv97P/AFeFoWf2kfIsVQhUITNVp3qYyY6MwWEyBBdMnGKewQppQI5ZKMiF3sRpswq/HDo7rX28NCFN/yk2Ypprw2j3ZcPEjfRsKktYOxotwR72sIAWu5VuLdCsNO6JTN5SzNdZCokvYSWDZqG7tJxNLCQh8/zs5aYrNQSnaOvf4KU82SlFRBwJE8CFu4E8Y/tGhG8hel/r9jJEqSGwpJm1T9jQl/QBcGMphhaCrcKxNLhkch8Y9pwaJwDKiWMDUDdKZCJmp4C4Ia4cCgO7KHlADOkqCUO+HgAMtn8zM7egflaotHszrb23hQXeNyQyHjYwN9gzZMz1ZW1+nE3XXX1smk/VPXZ0d9lNccYHFxaD8QE/YuhOx2+oMjp0xrxGCi5WNFqKWp69Zp3Lm1cfl6J25Zr/L+0cMPPfrQmvVrQHYuwsKi223t12yiKi4rzVmSJ6XYtHGLSbC6hiYcfeNb/0zpxp4h0jA9//ynRkatu80wGy0+s0kdPesDNacdA6bOy15//U2fZje30NHV7WgmMtf5tLtSW2Znnplwf8319fff1Ff85je/yeCFIERyFoV1YGT/PJEA/WTPDI+N8XfhS7IljhmD4qeMwRmjbMlZZ14pr7AZHlZ09uw5xdgesCRgveHmu7baCcN/RXtdM8fqK2/aQQHe5xVT5NQM3tdz4dXG+1ZXdW3YJewGEMB7+/rTbBZZvKSyuubYifAZRJnQsuUt5kKpUu/OKCTz8UkWNDhL4/jxE45Hw6aFJFoW0nMjCFy+3N5YX/rggzuyrb3s6oSOkbjHqekUfVoNjG0bGRnpvN7N2PhIT1/oO8l00UOzyOZrpBEqJpsaxW2Q//7vv1NVlaWTCbv2MRxFlh4+fsT7dEr1BlevWclUwrREehpjEFhA8Hd05I7Wh7oFSwCR5KJxDTkerfwlHFFU/OyxBLunx1tKURJJmBUZBEz0ywG8EqD4rCeqiG/CEcgEyLTARDlo5E9oohPdSX1g4aqeQCGSGKhhD5hS3pkKcBln8dx0lgKaXWaDcq02UQBy8eIl3wMVsjxXxSyQ1hwNdnDZFy4awxgy3KHQFfHTNysEFmLBQhjhCoP6BTB6hX6kIhiF/kINURIww35CcPAb2wiMEF2ielPrIfWHHRAkAa4M+NB5ghLFRAbA/YU0NhDKMy119c/NcesQmjrWjfcdujWrVnR3tlsNwcI1Fqr4zs3E2KgClkJYt8E2QAPZJ8zNUTqPa8VyE8u9vhFm+bTTlvtsz+jqEgTIDRY31IRT/U/WiBHokrgRtk2ihIGxKH8pDvD52enCfGF20u4embIbxzBWlIWv0FA0vMxAQyxjy8jKzMqWMRsqDRcpq05oGAcfp4h3TxRRpJmp4XPmiPGKMIsLQpjim8SFMJQgmNFeunhR11ps4aGWIwKFZpEBC0D5IB0U9gCAzCNoyk9UMTmtjA2cLsApLlZkJICTmGKqI8ArBfACgr300ZvAcYMYLZEUqLY6nOzC5CgaVXQHBTgKWO8PiPK4w0uEFlur+JzWyIqIZLDSgJhQwR65BlNdcFRnSH4CzhdcpFdfb51VMFr3lrBgoSw5LJig2DA7JGT3ylArubEuTLncuJQnaj9BoE20KUwCtINC1JpvwI5LMWU8QQw5MMUIwXMsqwsUOGH4RHOLGoUU9c5T1XQ6FSUUcHECFg5x23ej5/bM/PjEKOKKivOcfCz60IovAatlSF5DpfVUl76lVdSge4CggC90HuQPU8LP6OCY6Wii4aUzU+EUdgwnOgvHpho1AsEJBFe7rjJHQlzevMLbl19+leiRYZ9Ac8vy9w+/Z52oZWEG3iCxO3Zm5ogtdFIQNOOZyteuXQ8C/2lv79DK+opnQ2Ndy7IWQ60obL16SZ/y3nu2ayFoi0VKcEV299J0qeTE6ITP2eh+3L11i8lH62q6O7vYJY9VRgqLhcqyUnLr7LppjaxzexkWZpUhScaKBoYlXNqOiVl2Q5IQac4ffvSR9Ixs693Z0LvvHtSuNDY2aOGsDbXVSTF/uaEvvMJSXDSDjIMHDuHr+PEP9NxMvL7zzl7oCISa0KMB1jKRpKMhzWXrWpgucPIcEyFPtmJJn3vWqZHjbw/cd7/nJuX37NkDwv4DB+KAhGAhdnMqIiJwsdJYKdMkVVtyLaKgL85A5oYGEM9MktV96cRoWJEBPPTQIxqezZvveuCBB3zRzNzlxYuXT58+a0bRp1591ptFRceYnghxWfr7zjvvNLesZCrmDVY4omsqnIzmq04G3vAoI6lKxmy4GVI1OSICll3YUcvD4DAVFejk5O45KhQ+fIMR+SiTpgum7qcb2681wNbYyOxjiKQmelEAPS4GwE8A8YTi0MACRUwSgxEQctZ6SVlwKq6JaKTKJ/VnOI5GC1WAkA/ziE5Ip2Qo+UYhygER+BCs98XqsFZUkB+jDDh+kpKLIfkpO1cYGfrY5A8OyeigAk56GloSFgjc8yDJkMHge++5D3ZKUZEX7Nq16/D7hw24wgWCiEAmJIMqNwgGBFg3eBQNcDE9HY7pMGssNjEDLDMJzDI5tRIDCWFdRdtLyMeiGhg18HiUGqGtKBmX9cTSAhiFfgFH6iBcEC/W6Mhzxuk+6NHRukMjtTXVtj0AlR62BYehdwewmlNWy4pCtLkISq3UxZnig55qtHAFdAD4iMusoGIx44/hz1+ZOvdEvPIwxueKufEz7gHwSoGkTCjmkoorE1qYpDsBgvL+GJfRb0kmOb255c5YjVdhM2Je1vStO/M+jjw62OMb4Tl5izPS6xubHHft5IQVyxovnTtNLyeOfeCs21GrEo2SZmUva27IWVrg/AEH0y1NDoTRzWPtJmesk/7Od77/kUd2maBgG4RvOR/B0rjBgh//OFjyxz72MS2NHIxGmCVnb2hojLFdSfkTm2H8tlVwH/N5Q0PWw9Rt3XoXmPaDNDauvnT5gu8VGBwhVS28GEiSorpsW2LdPzDINRgDaxQrGDBEbBI01oJxpsUm8YJgNsBg2CQTYmAGerkSa2Q8RIo2/oIez6PrvfPOW89+/KfiHgCa9SV3ANk/w2MYkNqpggXCFxl0ehmqVzQOO/dnmV6hlnBIjM/qZ5KGXroyQKlltEIB5KEZSWjjy57w4thfRZ5X8d4nyVatWAkaAbJVlIDDcXRmEAwF80Y8wmwPsO1w1667fGdA95s7Q8EdpGu1hrSWLj127CgXpilWBCnuBKiR8G2seh/2VR4j0msP4eKqidGFPRLO8jdXvHFj/e7du989dJB7Uh+8orcQjQX0+MuQqJsuIOUXTJfE8GLXHPKUjONoak0ky8aMQJJV4h13JK2kRx1oFvHFJXC8QqTA6C8UnrAHkYoMSVumHuNY1AukrB+1XpEkdDyXDLFM/oQmiiKJLelrKEOYCmCThYgtIlJRcQF9Xb8eDiAiH69gVN6pJrhzj3LGtu/A+431Ydk98lDir3YW8QggE4gW3wk7UNGGHfkZSmgTQG/VwgKuccFUFEMw7Qc/T85p8MpDJf30ihhhZDaesBCvQCBS8hdgGQO8CGD2ANIaOj33EElRIKZAh28OGGchUkEPfO6gJHZMbZEMIFAAiELPKR1S0TWq7L777iFe1mu3Bt8kAd08KBgeUFCortkFwRMaiW0KN6c19umiFOU1UvgVZqHwRJMElLqRLxhJiWV6BS9QXqGTDMO6igWnPoQBxJ+IIooXYQxDSTInBFJS3RgMRkrKS9BGYkKtMl6RJ+yKUYryUgJe7ye8Z86cZhtgMgk9UBIgQKgjfBoEyvoOcSMGruQc1yxaAxlVpOqCCxchXiUf9wAq+hGSQIY90gkI4C4wiSgq3auInR4Hh4dQZRqLoDx0T87MlaURArCewAWswn6yVdCgjgYDu9gINT/ij7EkkeKCLihCeYNOMKKf8BGMTTDJVjRDnucRCAoJitZm5kJ0iqhhgVp5VxQ4MkAWOtRVTF14lYkoImEQYUd5uDCFI6LzCq7Q8m5bUxvQJJ8bVA6UiEagRB8vpRIghACsWuuyZHGa3rUdwH5CptV2NIQOgMEriBCqDZ0OsyHzKoJmk6XgCTcKfOtT+h/2zN32xb4CT1avXEGyy5c1ItolBBQlRxaabrbG10y7zf7GYpVctWYdLzpyNDQt5IUV40n6x/NzM+fPnD0YRjr1jRbZNuAQIccjkgshOkrddxxRYjEPtxwbHamv9gnuEQcD6j9oHmw77uzoHhlz/mCVbFut0rJycsAyBl966ce+Qod4a21bVjRbq+ONk0OsyrB/g/35DJnOBqbEbkYr92U5NiqQMt6pgWJgBzDOHNmhhRdOQraUpxvjBEFtKq8zHII1uuDAn//8z9KlWp5LSVgVpdAWxocGbra2XfHJSQ0wBp2UZ4cl39BngKi354aMFgpkqO7T8Vl5OdxYSRqsLA+HYeuVUZNFTcJQQV6ODUAgo9ZYPku1YNHaGyk+ZgU7zbkEDiNoUOzq5SucU3U2p1nyPBImF7LAKjfXDoRxK7Ozs20t6n3ggR2jo2P+Wjvd3d3lr8TnSuvFTz73ybgRuavdw/SK0pBPmBpz2WFgSwlFTE1Pf3DiOAOrqayO7FMN88Wj3JFqZOpQ8yj9KCbkErNwFMZE7boeCpsd+S3GLbJC59tvv00gGzffpZjIS9TGkJqXN504Zn45nAYIDviwAEWAfIxM6MhDZHiOSFrjeewQCqoBRHSga5QzBrqOUgJK3wwx6CRwAdcr0ouWgCQFhAO1ZDO4YGyimLpaAumkBsOlrioo95046M6ePQ2dWhBZMQS4whoGE8T8ee2acESJkKGkhW0qnjlzDqLSknDYcGdnoI1diTzzC/NMUeSFHXB2iyrs+wmCiqDhCNcaCTTk51uXMg2yFgKRPNSx1sEOLb0NX7ULg/d8h2wNCqhrn4ngwmd37KD9Yb0Liy6DF9yatyZEjsLpljc3gYadoNAwVmAJYGgeFubCPlHbiHX2Ghvq7f/ev3dPbl6244PNo6QvCSujbDiS1kNKaIb74XKwL+zGvBHpO5f+0p63yiwyeGTY4ZazOUM75AksznaB0uWJITbMutxThCv5yFjoB/ynDegraMjuJAeTug2TCXjxFtIwmSkW37mtI4ALtbwD+ZYqaZkLizNvjkwNT93OyCvJLaqormlctmJlanqGVnBk4GbWEh+tW3Sju3NZfc3li+e7OrleUXFJWXZuriCWlpGpg+yrPc7154Yb1q4F1l4g2DesWyt+ssZLly7qOUg7nn/+03KVr371q5/97OcamoKamCh/f/vtPexQJOetRq/JxGAqjTs+6rvf/Z6xBtGG6nfv3nni2DFd9PIyi/cs3p1ov95mfpJti/O07IDRQ4cOL10aDgKemgkHIDI8nvvcc8/BTikolGbJ+006wWV7q84wq2AnDFJqwuBZI+HjnR3SEfuRrxhmZooGR0QeD/Vsf+1Lvy7X8Qpt8kkqs1QGTKs39atxIVcWcvlUwtSYT0CWhbG8CnknXBAxWr5PQcZB/+Ef/sG94y7uumuDaICesopgn+4xiBINnEDKp7Cgeywy4A6pZMWG7WKXvhswAoQj8ziJqSlNpguXYighQCd4KiAutfgYTUvzwQP70WwOcM3qlRJcfmR9ptEXheVIsJtNZfkEaNNuVU2DE6IEEx0JoZUD4oUo1OI7ikmOESMEEd2xE8c3rN+szUqEsxRwbBoukeExRl7GhUUqhLmkFC+//PLN/okdO7aSlQZFeVw4BlSxuNCZKwXjT0uFyxd2IWLfGEGk0CcKYZM5CTu0iWsaRCTIJCZxJ0YEK6Ak36FTEJhozGhxEasQKYIJH1UlxRUYxxSJaTF1BREWel+rWiiddzInvGOHYHGnfWQh1ATy5aut16932SeMhoLkdHwZHZU5VgZHaBsbG81MW2I7AUo4iFAPNV68wghqVQQZNOGOSFkXwhRGm2IIVgU9yEYGAjxMYmBYz40vXCOeKACkGmFKeSIleb0dwAEkEK5KGh6a9mluqGtsChOt2g6u5MImw1PMBTX5Q4EqcCC9dOEiG8Yy+WCZ4s6dOwMpT1HLlLvy+T4tnuw6k34LeHbycB8X92Q8CiAPhH379lENrxEERANVEMkZsa8MUjHoQmqUnuCsPI4AwQIhOEZwZHjcmjFSUhLxKpIkvVAlgWDB33i5twSI6qvrwjekyd93AAjZc1xY+G3uWnttfNNUO2gEqBEHwz34eDdXCcW0JcvMb3LK6lOnQrI9Rko1mh5NpCklkmTkPBG1FEdKahG+vwQFHfKUQaGfWUt8mbsNQOgUBgez4JA8CaCTJeCUEILubptM1qCELh/LwQtpAEIaivEIjICgJFwAKmMJkLdgRoF4rooypIRIxsmYlU8oL8apKU/MQhcpRAB1YA37nsAIJiGDEIHk5OXgSDFMgeNSF0Y/AVcXa6hlP/56qy3CJhRqxeceAkg+GHHvOctUBhA/U1bV5rtzgQso03HjEq1wJTCxGxapG0pb5lXY3q7dD0Jw8N33SIQhGdDKzlo6e2vB0lurV8klNS1INiHyTnfycW/0IcKJGppJa3xNmzvcW9R47NFHADEJhX/mK3s4euQ9suZvKDHUZ/WujwEjbGhkTGcApzpxFGa7MH4cVrdmpaG0xgGvx8atkmcWp8+eI2gfvfU3J89pa6GNt5OGpLq72psbqi1BphVHILPOzVu2GBTXM9BiWwopIGo7jdD13AhTz1h46cevmLXp7erkFWEhXXlJdWXFkvTFtGuE8vq1VlLWbmkIiVfaHRKRsBcx2BOyIXWxBsTs3btXMayhn2zRb56rsKBoaGSUsjVpml4PyRxE4/eSbze0GXZVzOuvp09Nj2csCWcrgcD6rZtH4uc+9/l//Md/NDjHu6YmmXj4UrKcj300OoQ4MytlcejICrJOYUKJgEKnOgCUWFURht61fOCIINrCO6nhZCQf52LQauHaSbaoRWGAPzEZu6riC6uVSnZ39wisyGZYyrvcM2JckKRgB4IdgcIZgKPjo1097TYJ1VZVi2jvv/e+Vm3zho1Q67Ope7WtzSJgaQentBty//79mUsyOA9jYB5kznbjveaZ9UPKiqQ4/gqjeHRmCgKGhoPvMSrWWFru9LMq0c2op76QIKghJAGHRRpSraqQ3IejBhQGOQYs1DJg9ABCzlSmtaNTPzXkjFnJ4KD/eQqYV7xXNi/O8jQXCfzcz/2cmI5rNskGBEThg0lABLJMVxWgCEphikahJzJcP4XsCEdestT+wbALP3Q5SMCl4UQeRkSxt95+Q9a1etVatEVXtwqCQKwBQ7kvqylmqQbhcCtJnk66AVlORy9xpDb2AeQQSDXkRnqiA0oAZK6nT59DD5ppAc0cxzGgpOqt0Cx8K8w86NpMIIx1NbVKama8tXMXSR3t7ayutChE0h/84Adk8sVf/WVwSMN8hgN6DJzPTgfhp4dPBxaeO3OWZjXdp1nhieNV1eVmCIUvvX3xyUlfdjkzVxQaL2fDYxNhaabhPDLxqSCilvWTJyH7JA0vvJV8NkAZT2Dx/QpaoDJPzFe499DlrYcG8BlVmMlM1lyG6CH9t6oqNbQKApdaC+Hj1qHbpgNgT0LoVaRZA6QHYEbCwIdPASyacy5ZTkHP0Hj/6HRGTsntxdnF5TUbNm8rrawxv5GdueTUiaNlBTkDfc7Cyn/v4P4cCxpratgqkOLIosVLbMk1vTnQH77KVFlWxhJ0ALZs2eQYUPMhRs5YRXNTw4MP7ti4cb2TNMjEypmJ6RmzshRBlaaD7Q3QJsk/jh07zn8tAeJT//zP36yo4LVFtGM6XWy0CUGPMivT9wsy21qvbNu2jcbZjFZVEOaP586dX79uI2n7irqtwYQmSoBsCN9YJnt44YUX+CD1mecB2UgHpExOGRIjUdwJgLt373avOmtn4Qz1X//1X92LdVz72Wc/Zs0rzTAS1kKPuGbkYlRJcTjOpbW1Da6g6GRro5ECX8WiQIzEyACmuvB6IrbAhRHuL91HKlt1ZJlFMnTNL2iQHbJVfMWuyMGDBzV2yIumDq9o73grClZYlFBYk++tTgviidSAC2+yMooXMI3hm/2GcjiXmdLiIttgfFnlqnBt3b/Y0tHRzpu0gBwfF5nZ2cY6Ojq7Dc+LqDHUcHC1yFPEk71hhAHo9ljwafeFjpCQxMg10HxQTJAX0gUaCJ8NIJ4zItXO/s7O4fq6Uh0hMpRbEIgbOypRIgEkDWOLtGPMBVPSNyyY8wEKs/QFlKZEWDBkK7IRGqeTxiFPzCFYOvLXc39ZI+Aq4oXqVaRTahL32IO3lCJglpZYy34dj4pxOAoCROPo63awGyeiPhzhGhZNnk9Jkh7561PFuVztoQLWi6vb1dUNe0Fxkb9cEkesGSj3dAQspOTMKtwj3k+gMIgSBZBBEVjzkKF6Hm9YPkm6CAdHJIBIdfGiIUCbAqzdEBhR0wUGAUcwaFTPnLCvmM8a6gA4xM9z1ZHnLwgJp93Agq8hY9KwQ6cb5jvfkWA/FdbaGkZhaaI0XIZ70Kyfw4oUa2/vOHX6rIkyBNC+nhsaaJniSB6FkgrlCecLX/gCU7FAAC66UJ70XAjzlnA0Um6w6QKZKDiUofepyVnrqPGijAJeoRn8GB4RiX0XuZGA4CD4pywOaY+SIi044jxiZI7odzEVlUkVNHZo+TGSwESn/NvN2Oi4+M+neQQHhHc++a6LJIGmrEVUC23Sj6ggDQ34fAQvCCN8PxFMRGZEJ0ZGpVXIgxEoVg0dx1FMdQ/d+Ek1GBfEDTroEysDO17AoXT2zLahYDYuRCpAYh5qIlkX5/IXywgAFjSSV9I98pgr7SiMBaqGFG3egkDFylAEdOyBDCMLpKQYjpycgx0FEA9FFBRZgUbICtOmksr7SSlObAYQv57DAoK63kaMQOHXpeSH6FbXFYAbtY4BDFMMNOrQlpAElhuEEroW0Dekn3rqCYoxfWzdiFxCzi92zN8OczcLt+4EuIUhI/Qx2mAEi4PogUVHkujPaHS1o/PJ8QX33bMddovkWAkZyR7Ki8MpyKqYjrHxSxZo4Tu6J6ZmTp05Ldbb2OqkvooqTlT66MOPWDYltsr/Defpgeh3GFBBibEiLDhVOtl+vcT3HXimLxbkZVmzGyQyOzNHENNzs74gtiZ0ka9ZKdvTfcOXaGxco7P+0Nu79dKPX7PxwOWI3tKiYpRbTGlZIYczqzAzPYlHR3YqoHeEPFqzEIgOiIv0qZ9iYqqKAK0j4xACcMSGmpqXS9l1AOhDWNREqaKuQOCvwK0lNuAqpzdrwXOnpsYHBowlhIExcHwgSTS08En29v3v//DRRz6iTJIKT1snzWLMbPhskrU0mlh6HOi/wcIgop0wbJkaDuFh1npm+uVIIvYrbVfxznq8am5sohe0weV4MmHogft30A4I0Xo0G0M3B/V5xDvGrbrnMUxoR9mMaQRxh+pFHIQ1NjfeTp2/dPWSGR7q67h2XQ5qzJQo1DJmZr5F10va4WsABrqw0Hal1VvQeBr/Z5mM3j3dEazW6ODBQ9xEYqE6yn0l1avJqTD0iGyuwhoJHM1SH0eLQsRdxdOCwmLH0SbnE4ehQTZDTehUACOe0Cy30SDhDkbdP/T0JkdYsB+c+olHAVddPwVxQtMNwJoCgPze7/2eVy6vUMKbiELkIiuSQSFFuPdXjgK7oLBqRYvOtjaPXrTxwR8dYhNOYg4KVZJtcH8yUQW1DNJub91XuYhiyrBA1WVBFkh0d/VopdjPjh07oGai3GpoaFAcVBIoypUrsFIZEk9kHoKdwEfv7mE3bUaebENnj9crZk2raIVU8hkfH1PSfVBuUz3rzUzPAJAiDI85dl0GIwpALWlmP/Tl7TMfexoWcrPr2/CB/HBmyjxhRm52OD7iyHuH4TVSum//HocIW7psRUqyk1JoW5SWam99GCJSRgcgGOdUOEKAvbsPi2usmFoUJObn3IIcxUFw4SSLeDEezZLLDfrl7NQNVHzC6VLCR8OEqDDooop4ngxYyC/CeEn8PoBTgELJcNkbsMR67AwLyK0PujN3ZyGw4/ihW4tS53wabD51Yn7RxEzK1O2U/OLy6vqWdRu3Tc/OVZeXXrt6qbP1UlFBduulc75OXFtVaWt+bl6BU/mNz3T2+khG99johAHE5ctb2tvaggx9dyx1kQ6AlJQS+ezSrAxJ85Ej7/HEj3/iWQFwem6+r9/RSfsZpIRAXmshpeTpRm+fHqkVg778YKjxqacecvjPD374ve1b7yZbI11YI+c333p9985dem5V5eHjVhbWm0q6dKVt1co1ennSC0cc6QAId+RD7JQoTHlOjHxKik8ycQMJX3Afxai8REdGyOo8FBsJGYUmhaTUBiCkg6xRnuYkEJ0o6iNcPT3exyw5lE3ecDkDR2hCmEU4chpLCguKyvr7wqnHbBINXAx8imKTWm7mCheT0MaLpbaSGz8yIAJ7gJkWd4h1QiHCqMJZCI31MnVOlJWxpLS4qLOrXcQA09g/J8U1LhTmRFhgz3o7ngiMZj6/+8I3tDXcDZ167nzfMHBwqL6w0YsDA8V5lXeuA3WnLs6yeg2/qJWScjStqmCl+m/+5m+GIJl8Ykx3DuoVq1Za+D4wHGY7RR7Bk+fqe6BNMYVJW8gSr0wLHD3WtnF93b333I9UDPqr04JxexuEEUt7k+c5wBpZI7fysgpI55Pv+okthENoboQRohB7hayoX9EsJlI0AjKxI1648BwlbsR8BSSvgIhLIs5bb72FfYLquzFoVEgoSNK4MWFWs8j3X33tZTFWB8lzfTNlMKhNX7PaMSEj2NTR0jmEUZeAoPgbqrq7e8jW/kMoGD8bvj07d/bcaQVYFAuketkLLDGauQGWBv1EOWisxUPGhobg+PpwycoWb+mOmuhLmRjl1CIQOhISPdcr85PA2R4BkoN7cLiDaE8C/G92clyHBGs8FBDFtFNEYYGcuB1RcFL69RC1BqRie+GvriNQTJGKjfVrODCLMAulYEHqu+8eHB6xuzpbD1AERi01Eb52AS+UQqHYZ5laE0alior07qIs7HhCIKjCAl7YIUMSnD2nSuNlvizrO4j0GGsBi01/wXTjIhxvMc78Cory/RR1FWBj1k1ASlbILiooJGRlUGUGgHBAYKhWHHAir/hp+PiPZGJ2XnWpETNACTmkhf1F1XRqTsOH9hR2YYTPKgA1FNC5AUpdxkCzCNZ4LszOmR4AFkfKw4tfhkEyLJ/AgfKE8INkFm6tWbPOgBDhgAaCMlBEZmNvHEeaNlgiATQLtZIRFFsiTOXdECYshKwk+J4oo/tATfwXvxp63JG8gEBEMVSih+SJ1A1hTs/qpRtYtxUrLM4HGWssH8vgAO4vIAKgwmwjfUlY+hEjDCAeRrAoDLJNtujQGph4dKU8+/Bd6UYjwmc4jcTPOTfTudf2opmyqayuMuIrYzBl6UwefVMjT+MTOj11Rn2AeOfNd5zVaLxLJpqTa9GSnN80QlroyS3I3sKkzMKtOWHRngbpuRNdDBParRdm0mEZHxOgZTxEzGr1PJqbm7Zt2WyQGyQcGsWUBVL86TPnSivKNbsTU9NYdTykvzREdiODQ0KGWZ262gbSQUP4iGyBduuMAOSsAOIQginAMcyi+doVy6x7cXAYmSpPB12dPbgWknC0dv1GIhubGCdZGpqcmv32f3zfyXf1NQ6TCnOFmkbtpWysqrKC19nUQJqSMFK2YJTcfTo7uAURh+9dhMs9Xba3YzEs5L3Wfv34B8fWrFuba7+jM78bGmAX4yz0t5nh9ddf1XMTOI4ePSbTIsN77tlmjlto0lExnGkOeWJyxEQV3n01xVyqkWXD5+zy0MH3du7cqYtsuxtKKLvEKpSZ6fbOjsEB38MdFtCZvrlm9Oi9CGHSXw5prQWL9JN/Xrxy2cAHaTDx6YmwyouUuIE+nBsmSJ7r167TtZAYOZdB+700OyzApUSmycqhBopAyDyGFQ7DFvnesuVN1XWV9m7lLc2RKK9eucp4hTgoeNk+7pJkk0/TsuUQvb13j4mC3u5ecVPLAQW7Z1Hg44jc6Ijr6jWJnjbPrFnTIlA2NTSay2UezB1StRwrJOIjWwAVShCJZaNr4otunJORwncn5m8JPOGUbmtaUtNYvnOopI3WozU1L7No7fD7RySLDzzwgASEYG1UZSQD+oiD/aa1nJ4+NjIKggUDtPnu/gN6nsaNHSv2Mz/zszBqwJgBk2ZdhEkRYp+gRj7M2D3W0INaH5zyXPshELtaVixXRmIkeOnFeWVUAwQDDIA88eRjzB5YDTNRiPXkY5WtezNCgFCHCf447k7v2h6jfWKuxEth4YmcyQo08uGMcKGQUWn1ucPsbJiXVMDQIRosSoFdeqR5FndwZN0XaUjdUG5yLD83j+pFYS1Q2PvW0SERsWvBYta+nnAEGxUbfzX7BC/yamtr5LImH81ZWvfCCCfHJiRAaNODeemlH4pnC7fn8nMdOWCdQtj4a6M/38IXHs3h4NdksqH82Zl5nQOdyZl525BCBwAjPmFlFVCKf0nTDruHlrcxDMQzUT/diHWgh3F+GX+cGE0maqATPzPSw0iM5FhJATBx6bCvINjrrdupi8Jo7lKdABN+dwyDGB/yVZJFSzKy+4fGl+QWpKbntnb3j00v5OQX305bumrD9uraxsWpt+trqs6deN/XsPNysupryuxO0r9DQBj457BDw/OLwplxmzfcPeskr/lwxIfxPzHEijU9QC4jGd68cYPO7a9/8Utf/vLv0h0P3bN/X0Zm9oVz5+0v2rh+k/m09mvXX/j2f3zqE58yq/b3f/sPrHTTho3mKVuvXOVWvTc6HZyl5WhsqPve974DmnOxxAEbcEUwzmV8VsAOUxNJkmoRVnFpUVdHJy3rV/CjY8c/EEv/+q//+m//9m8p5emnnxQ5KRcv5ExEDJX1iiS0BohXYosbfv3P//zCF77wPCBm59inEGqMyanf2hoTv21XrzlDyA7Izu4uHS12Imb6UjjfbFm5Qnp9vaPzapu9Wx9CplAo8AKyMSl9iZUtK86eP0dvgo9MnVkaPZ2YDgehcCVsGpERDRgtk2PJhkhlY2JLHF98ePdOJJUWl9B0R+d1bQpOhVCT8Js2OW2i2YnEnBF3JM8v/umf/jE7c/G9927ftGnL6VMn7FvTWHAuTo0Gcrhr82aqxD6MEgXNovmrk6fCKgLpNfv/7d/+bV4pjLtIWHQ1GSh+uvT3ADH+JaTLbg3wk/ZP//RP07tiRM2/gEXJX/zFX/jMsc8uffrTn9ZtZJ++4GmdkiQDd4ZTsSxHUMWAkV6BriaX4fJiptMbOH50DVISuNxDJDs0P6wACAIClaFfO8JHyNyYl+S7vKySO4fz3BrrTIN7woSuXL104vgpcnDQM8adbMgSDG3Aa+cJMwjt7OSkkKKkjlNMDWOQ9NMZXyIkvRC7vALNTY3NJMOMQRscHKJEErtxsz+cFeb7uD6fV13BBkJ8SD6SgAsl3RMyUFJk6LhPpLy3pw8x3g6PDDqUKSs7pO8KMAaCpRHs+wkv2brcgKM8+JTCikjVEdDKkIlXMgqQKYgNO+LCbM7OXQ+gH508Qqx+8cUXtSMgMCp/dTj5Ee9WSx/1Rk+v1RyQeohsMRkvSLL4h+1hnMQ0tRyTiBRYsXItq0YnTfEsukh8Np21g/+5z31OXTQTMpgUBwsrclGowtIG8ImoeVmL2ELIs7fmLZL0XXAZmuBoPEIHwCyoltEIB43Gts9fMdNwj131WkntXRj/uBVW8ZVVlo2PjGqtYCFbQmMnYiyJeUICojFxyaZIrK4+rNbmI2jTXujjGXzg3ahCj/yHSH0TQRLI9twfP34y2OHk1PKVK7bfvXXfuwcMy+b6lHVB4ZRTl8anhseGDY/bX1hZXs6W7KnDI5kgg+kyWlxL5cnH+FTUrL+as9iXc+SJ6J3pU6e35q9bbN3Wau+ZjzutaF5uUbrV5r2+79zTl5WTlZuda3llNBLiJTqup63HCB15LnISLMg45XHUJ8g4mjlZN9FNDqQhaMBLNZE7glLX5YYFuiTn4ryPXY+OjRjOM/hy5/Yiw2yNDU3uTSb7DI1k29CGXIaNJZ2FcFAnNgmcukFDA8bZAxqQxF9Yjp/+pvz+rz6PJUx23+j1iSbfdTJC5pwBY7Qj4zZJjut96Ix09fQYvdi8eePlKxek6YKF9NdQlzAkebXgxP7fxc7cTteLsgfA6OCdJT5YsjTT2lkNm6TWX62u8GfZml5BoCwthf989KknmbUTvS+ev3DmzKmGeuMBiy3LIUHjiTf7+hOBZvgIIm/RDLAMvV5CNEkllFTWVEujDVM9//zzYAp2NGFBfAgKN24oRtD6F0IDiai7OC3lmaefpifGRC7cxoFAlndRBvhSeWEUaholoNm52wf2vT+p6zYjfFCTXS9hbkseYKJeAcu2DYA5tUYUMLz65huv6XSWFZforsiWQpvtYO+MdINwuTl5Ul5bctdtWD82Mt6hm15QbKzIQGSWRiNtCbOtqqy2uOiHP3jx1OmTy5tb7Hi81nbdSeWPfeTxgsL8zIyssfFRywFolxZZMJtmUlb0+okReSRDz8rMjtvv0En3hcUl6DdtaKCSPcn8Ll29YtBF3JE1blq/AeW2XbLdq8kBecQFMp/UAomSYg3Rkapiakn12NDli5e2bt+mGSY0MBn3O++8IxXThsFICy7OTHECLrEbBBIrAckvLLDSYNXqFfxZNPRKj5DY3VuRhQYRwcmUtMN1OUbr1as+zvHuvv1ODvVTjw6Ppjt8exg0LMtvBLjDR8PaG9asHWpubIm9U004+aBKAVmLKBBcdGJUFABHs4UGKWNJablpm3Vr1hhh8Lmli5cvSwPZvEWFxr1tCpH96TDqMutnEP7KpmZKZ77SKeN4FpEMh7NWp4RIXeWxkWHpi23uuge93T1hgDhtsQFR1ijKYDPKRLwW34kOp9Hz+acbEiZmAR0iUUMDIWkgcA2JNsPIi4dxKoANUI2thyaHOQuj1Qsiba7kL1G4iJeCrJ1QS3MrfbFERBGiQwxKCFxF6YtX9MU7pD7eRtUwKpp1zpWunEXx5pZPnz6Tk7P03m2hA6kMgkkAtTQo5fI3L2cpy3GYDL92KWa2o+3KVY5215YtGjbs6H7oRIn4HJBJWTajfRKqDDBnZmSPT07s338AF1cvXOrrvzGUDOg6PUP2b/WueOKrtBpp48E8lH/xQTMeTNS4gwTRAUA6YEbng/PqCizccmZnMqYf1je6kO0V19CNZKtooAWfrA+99eQjYgmq26TnlUt5qbmb+CVgEKQ1mgeC9dBYteESTwKsxYt8ITjsCtYSAmvh6pLMW3fCt4FHZ29Nzi5MztyamEstb1r/4K7H5uemzLrm5qRfu3IpZdGtirLiyYmRnPANkImePmd57dV1ZPAty1f09Q4tTklL98He3Fwds7HJMf1S2YDMANeWSNnHb7mrQ83ovbOzg6NlLs0e7L/5pd/6Td9BdDya5T0vfOfbn/vpz/7B//pHkqSm5c0D4dCbDFOiOGCr4gyDZAwUIapzf0P1JkgZGJcxX8FlDDxTGYciZ844MjigabcFWboj7skz/v3f/pWWjVyYeHdEiRDKhk1OSgH5sjgtFHsIEQrBj9br5uGHH7b7yOwBfnUXeeinn3vOsrHvfPe7X/r1X5clXWu9Lm5YF+VMZ11xU0Z0bHOXYZVrxhdnrNn9MCcTBCCykjgY9rIWAyQSBem+IEDp1ojSy9DNm+QGL4NXTFjjeigUExi/e2QwexFMhFTs1OkTRiVeeeUV47NGZIno6pXLn/zkx80Sa9FOHjtJDlpDBvzGG2+ePnfGGi0Jn+PgfPrIaJSuGgOzsY2nk09FWbluonv2orXmcceOn3733UOPPvooyUgNESA7gREiHkrg/MnAp24ALhCWlR3WYcv4BRD9eb0mXLsQr4BYQX1/+Zdf8xlM0Vs80ZTzUEPFyFCYi40ZQBoZqW9cRhHW2EinNEYOECMi5S0Dc6MA9xeNxRBeppWhGvFWvkJiHv6EBek+TzQC5RA9wyFJpHU0isPkajs6rksMRABHRAhsZpOAkkEKvCFWCFuWd1vyMTYmP6aCZAo9jHoKLMyDPd933w6NuBFGM4c3bvTl5oZdKC5S4sLwEho6KSsmpoI8gNHNaZm9xbQbCg/JAVi16AsWpssAampqyTNJAe3NLRseDquIxUBmAGwYr0zyBIgwDpexHpKERVOoMUKMc8/wix6eb7e76uvXhwOU2B6kQC1vbqY4ohOHcYoMdCbOEo7/p0dv2S3h80dRjXfjFzRK13CYzEcDpYAQwyxduDHnSullFeVEpC7a0IMqeqdT5T1hSF4xj6QRDF9/t8qaYB2AgRh4MSW7hcsRNJQiPtvAqV9i9lOvwtiJEV2junI2sTQc656ZYVjw5tCgj7E4gS03e6m/Iqfk2DCLvMhUOgZlFJRIhnBFRYS2nnEkI/GMP4ZfeB29hWyNFwHqNZWUlVmobrELFSvmPVEzFaD8JQfpvTBoqYhBQAuwq2trHJ6mZ2h15vZ7t61asXp8csy5jkb95CcuAtQ0RzLEK35KI/wOKO0asfjJAGJHS69S/gaagVH7bcZHLYKaXd603EChOC+RM5ii27PUMp6MxU0NyzzxAUpOx6joVJqHI2IHn0KtYQefzJkB80aJYleMSksNk08nMU6FiR1V3qKEVXB8LCtAIAmR4dwLGxCsARF7DcD5G3bS2m8xZ2mQJWrmK+wJ0QSFFVC0z5jVjVZNxXzZzzgsy4zBlOOBTy8knPLzH9+JgbjCErmM3jQFs0CQoiI4EAoAHdzMFrFpQwtFen5Y0sZ7eP7sBXCPHDnKACZnbzm50giYdUF3bqcYjLfgXsjDFfYEF1g1wgiaGB/lJLXV4SMRjvc28kQKV65efO+9PZiB3cZifbtAxoION2Xd4c/OjUxSqJDvyvDOnDvfNzRgIpUNESUsshnpJimEWJMcxeOGxTAF3GFYaFJMYGWR8m8KM9+CC5FEG2CSHUbVyctJOx3tPQODE5s33c3+xA6jFBIDr8xgkHIyJhq2HjY1NUikSstKBAInexCuLin6mbslOrpB7O/4sRNGLi8nC1oefHAXIWtQZWvLmmok/SSJL0bvBmHChLccCVNcnXt8/vOfj51gIQOd2mlmpJjmR3S2dFULSsKsMObo5ICkIIfxKfxaryBkazvBN1jy4o9eEjWefvIpo6HgO6M3kXPYj2LZIo6sljFlz4h1A8gTWOwLJSKO8hgEjdJJmCLc6FfA5SFBiarEK64RF+ODHVLypwg0yyM5m0l/MhFuWLzCBEU1FMTY/MQp5apiW0NORjavO3fhPLCJcc45SgWcomSsesOmjRKLotIS37LlPXcWhKrbK1pWPfDg/eDADgsho1muhgUrUcDR0iSj6VVp6enOjLLVySuS1HNwQ/JEhzAEcxWJAn7d+GnP5a2pmfKyEuJiOeblcMddeYqFv+TgWHlPcKG6hzTf09vHpZi91pccsKwAhyI3lLBbSqdxFIoO1K2x5BHWE7F2/BpiJ0aTyFzGyCK9G7fgnuRsAQCNv/DCd1W3Y4SyTEkzS6rnTRELIt1ASjWosgfUDAHa9Fqh43HBmBctQhs2mZnWix5Rq5eFJCmUXd1CnpXwCPZEq+nbVYwQL7RgqlJcBgR5gqYkialI0OEyoWG6TJW56Rn5ii3ihjCxg5Iw1T03B5Hyhm34u55diAN5RVz1Rn9YffTD739fK6LhsYEFdstTHKeYn5vllL/FYXVP+NQXvYhLpv6JWtLvqeDoiWN50CNomEi0BM4sYvIqeZNMBVAZ02Vy/rJ2P0lJGQt/nNutJQswkisANsBimhtQEwCCujGWsEwyXIAZy1DCKTlsIUsvwgCDqaIwCyCyWFS6ZPLWncm521OzC+NTMyPTdzKKG4vKazeu35ChI+GAo5QFi8qKCnNLiwt6eqXvx0+dPIF92bPm33Dp8E3pV9XM/KzmjKlYY8Q2jJBRt8U82+++67d+67e+880X2MOBffsGbw7Y4sDy6ZeJCiD+ihLoYUXMA8y4UId2MI5Niz+IUfDB13PPf4apMEvPr7WziA4PjSb4eobqrEXDduH8ZW7lcyg8xTEfzn796le/6gCiM6dPcR+rE2XJSxaHEXdDJOacy8uq5VvGPhgtO2Ee9A7yt771LcbsIIfXX3+dxcpUdANYy/077uV9//7v/85aUEjyDjzgxfwC+0xXYQ0lGpg6x7OldTg5+cqiIA2qAGUPGEpEvMQywwZTXSYQfF0Em1bNP/3000AZs1DYWnYFhBoyJyv2zzKFI4rWMxFaDbf7eezoEUeUBmOen/7ir/yqVcXsXx62asUKQGSoIP/N3/ytsP+Vr/y38xfPmQrjv4ZjeJnhA11fwcFKUUtAogn52JnZQts3r7d33nPPfVI0GrHun+4QL9XjJvBycGk62uRGROfJ5JTPM91EM/kYMBZAhErcMWZadhEdY6BoLiDOFJYU82uSF8a1+ITm7Fz+a/O0uHHpkpPZThuqA4EZ0JqdNirCSNRIZULiXlQfjnDhISwsxF8KunolnJ6np8Qfeb3gSUFaCtBA9hMWoOhCRVG0uWW5e74DlEumK4CLVyjEAgNTEe9oAARkpxixSWwShZ/odAMO7Nj0lzQoDigGCaMbkQpGcGDEqb/kFqWB4FhYS0dukBo6M9mlL6cko6JH7QXIvEAtI6DgYFx0Yl1A2eVPJhpZrKFEm/Xoww+BdnOgn7N88P5Rgyz6fkRBIODc6OlT0VSbMkwd/cjTOOry4UJ1GIEFMxFRSn7B0j173jGzoa6wjEF5FLGAxkptCiIueGnTPD+MvtmnOnkqaRwHR/wUI9g0ZgSFbAFrrFp1lDheWdtnCBV8QNjbaDJ6jVks9yab/vHL7yiOcxnVpWvQAPEEF+wBOhaCDIQRNTKU8VBErKmo1OXj7IAjCV7FyFAZQqMsnEIquHqbnpnx6itvWqIsRAgL4MNCRDSuAHoYcOxzYh9qfC3MhJ0nfgprxsWipojUfn0XBkneODJjAB9tVrWIJ6xCXSt+2Zi6ZG4aXpohcwONLwOOBagnZ0Iqr8FSUlYsV9HWMBseyixNBsNC4OTDPo13M57rHR0IZmDmK1wYJECnQcIi/cMR8ryFQtjx0SQCVAwcz/kj4SiDX+JDA8god7nx0HpXclAF2R56EkVNsFQAl7pB7snlBjtwQU3UbpRhEm68R7a6rnhD48wj5TNPbgdakFWZjPjY5OQUuPRBatCzUSCgYVjhWKshKxpLtm/fynWN6omYhw8eKi4tpzx7dCYcwDBniX5qWDwbjuURJkJzr5kkUGbkMl6HiGGJe27utuSTFuOjI8kAZ+rNgRtLsxe//MqPMW9JonXZLKO2pl4kra6soQCyILuC3CBQQpmanbshr52bSzR6AwoP5S6EqxiOoGYEaiEeEA1PWoplzcOsk4n4QKMbEYMEDFyx0RUrl3MYrZ2KlpZkZuTM30rx9XImy7YI10IairSmiBDB57QyDW+jTD/2zEf7ujvQYNDRfKi3cBmjogZj/JIb/Sm7JhC/bt0GLYdlEmH8r7IcBME3kooMxFtvSgjWpGoYBII9e/Z4rpnEoxvEo4f1cyo2xIJ1NDUJEAkuAgGWvQ2mX1AiNfJ1a9B8ZBcKnXgsyORodujmgNhkVIAF+/qftRnDo0MaG+IyOa4PwJONMwHFdkGIQQQNMAqgNEIIScLqg0S9CGPNjIcTuvFX4CZJIQCzDA5eZUg4WhRBcW8+hioSAEprp6JWGS6saUd9xKEov4AkwTElJex6znN0kHGnY0zdJq/4hgzAYYVF+SUOACQHfYwVK1qYuIvVURMbdto0mi2iwDvy6hob5OhOd1Uds5zE8BsX4O1YVhEcFo5f3KF2dnqquanJIHT0N5MzNIU2TOmIsyIywaZRHPkZpAa5eMG5c+GUD2LBI7AUDRR/AVYVfMHOXemUKsPZL+PjAD744A4OyFM810flmyap5UyWhCnArryFSxf95InTEQIDwBR6INIM+4tZKIhXSfQQ3YkTJz3hCOTGtCDCr3yCEikdnRAh3hOG4Sx53mEMvKcrbFkjQM2P0WX3LnUd+wU4R6ZQea+QQtcWS6AHLgmD9FF52jx54hgJrFmzWkVfmEJYYhJTdv5qfc+fvxiSgOw8R1qVV1YZ2Pj7v/lbuYjOhhU4IDsoSAcgNy8rLcXEZchRoJCK8zsDJTiiekrRDEXHdO+5YoazlHR5wsDI04UeAuHOWHDvig8VM9XwkzVCHgZFJzMAlA6y8v5K2+O9wGu+YW5u1unjMv+lmb5xEw7zBsfyWZM/t1OXzN5OtSF4av7O6Pjk0KTPjxffSslg4dVVFUQnY7Yzx4xRGM5quzw86Mu7RZs2rmOuUJw6fio/z2cgq3v6es9fuEB0puFVsRZc+8eG//3rXzO3Y5hOcm8ZJYvdtu1uoZsGma4M1Vo+ma5Pg335y19mMMJdjBXUbZgQnXqB/nI63pRfUEh9xvz4qWSFgpYtX8HkeD37BJBOW69eZ7HOZmVOUmUNgdMcnbPx9NNPiRWiujYiZ6l9GuErS540NrVIcgQrRsKtGD+l/Nf/+r8+/vguYU0n1kA7RejMQPGlL/0amzGawFSUNLeMZWxShAPWQEO8JxPjYcUIDbJw1NqB/nd/93fs1noYAeQjjz/Buey4Z9iaZ2RQkphjF4Q228Yv6PyUPWsmwBGj8M4Z3aOBNNg5jB/72MeCAy5Os3jmWusVzCrz2OOP6I7SjhDEX1avXEka585eMATT3d3zjRe+denSRavsGurqTeMgxoRAY3296CGc6g9bmgW4HohFMhZ7UMGDO3db+cnxBW2k+lQfgSssO+EjyGDbuJa0eStaGkICTYYhxed0uJadMEuXyI9C4mLnVKZJlcqYAcAXmLg2iB5Y8/GMrCy75sQQB09TfWFRGIKJDjI+NgILy4QaFtIQCsRA4YJtgB+LeY59WNJSM2iBNIhO8AHZuh35kwvBDpKxgIA1KqC6tzb9s09hE1WAMInLl688/PBDMKKHJ9Kd8Ih9BgBFW+t1TQ+OmAQrQgCWFcMIgyQ35sQUWayYBogAqzCZuLAMEYJZo5jJoRghnRIpGfoLgrPpkA2CukSHQgObSorkNOtoY6+MeOKR4QForYuA7CKf/BAew4Ei6PSFcuX1rlHrJCj0EAiCnRMgLLNzpDI//NIUCfirZFQWyCjBEQH39HZdu9a2bt16NolN2unvG4he8NZbb0ne8AsLRtDCMPpuhoXsgJMndSsphhOChsw9Nl2ERgIEQqqXLobWE2G8g3CCEsNeixR1SSAuqjQqT3dQ00hZRTj9ifSIy4UkLKtLyArEh0gCgXA0gtbc+yvO8FZIoXCDQtpBgJ+oglQkIXaZiZWVd23bCoKf5MNISF5F0sAjOsmfmWHKQ28XzS+QG/HCbuoVXg3Hk08+ySVBYKsuZ75TOqsjnw3rNrIoYvfWyJTnoCFbboBgJw6jinwoAg3UagUyA0OzeXvPSdUea/KU7oqZNdW1bIO05SFWVazfuMHq9/6kkeUs1iKSIckk8jRYvMjqaBd0mEK2GxMldI2vxPbSyRNef4mIScAIPtagIHYsW89MF8qA7JWSbsgQCpJJzCBk/KrwJqjVAgo7zA9AImW6bpSJKgMNWIVBQGHK809sUyE5vD8gBlqY8BpoCKwRJCY1IXZjO4WF+1a8idpH3z/soANrXzUz9AGBo3jMF6ctXjI1c8uJOmZmfZDVYgnwxRcwMaAB1ajDvcJxaQcPPvuxp5H40g9/YNiDyRrrGx0xIVtlzTGwPgNEUuwVYRbMsB4XaBOjY0gnCPPxAyOj1qObsO7p7V6anXPl6mXfErJGygnoVkfZYgumxTM2ZE1OTLG8QwcPmp8FkDGZsTK7rX+FO0NuLHvjpvWUxGIwy8zMrXR29tkXQluCIK2QCWdobb1y8OB7mn/PCdpzXKBHu/jwzgdBHkoGqOweFlAMoBJmWmo4OsC4mkCvybFrU569bv0ap4tkZmUwDq2RuAALFJpexfRYJN9GNcgWbYTMIZURoD2haVIlDWCZKRQMVEonUCoWHYycH3xgN7Frk/ROi0p0TIfNiQsE0Yt80kv1rXfdLcX2fQPl5VR4B4SotSh6IFAoDzivwCZXxCCJiQJexVDIi/i8WKOW+ygWN2gWWYjdkCQvgl0GSfgoFxFkBj65RfVAIRJYBfRMqIA0OEPb1VaTABYUCgdw+dYE4fM9r4aTuQXjSVDcu+N+7k0gr77yemFeMSvTdhLR1q3Q3g0d+Vy+fJFUnQlLTRomPMozcvI0S6FN0mhRuqNUvDWazroYHrKD+pKG0BOeY+mzr6j03wghlYiom9i5DNokUVggFj8NgUQhsBwjdmZ7cC1jA1BCpilVnaAU9gTLSPUEIk9OnToDGnReEalze0QxHiuCZGcbKb/qu9dJ229RVgWShodCAmcfBSC049LPRDzrEgHVUoa3sgfilQecO3ceMTya3QqLdAqL8rCgHw1QQO0JKzU7bPc1s5HXqSKUeGXrNivllaENTtakegV4rtNksjKAJWQBiArImTGvXrESs5cvXZCqmuimbiMPeGQkAoMP8ybLJExwN5g8/NGPfuzAXyy89fobwSS0z4vTLLS5NT8nbvgWmGUzVs3F8X5xDcGcgA1bFERoqSH/D1cSskxeh9TWlK4/ZKuw5/66VFE9llTRE6/cLMyGoRDq8DYW1gHw3OlMEYIqZgBiXc+zMzMsajQdqydvJZ/uiu6BiuHkihTjICaUU2+lpTsfdNR2/4lbNydTlxaUmbSUFvgIn9yU0Gjn7Xfe8OHY4sJcJ8k7HMVMQnfnNa1jVmbehI3+vd3WaVAHsu1pNnLmVLbPPPeJmurwoc3jRz/gKZbKfOlLX9Q7kjkxCRT+1V/9FVP5pV/6pd///d/HoJ42sXMuuQW3FV5oDcGmbqIZ67Gg6p29+7yCSOetMdmNI1YoiHFBj5tYkFpSWkzRPorOX94/fMixECC0tl69czucWTw7M2W8nIVYJ1NZVWN6B5HKI4wM9fEQIIlhRXyWV1pgYyD461//GwMimmd+IMRBJH5KfJnxd77zHa2kLr0wqIG3DMgNkkhPiL6QjGX46aGw+chHHjOZsHHzZlqw84rRWg+Ao8qKsOjZmKS/hLN7925OyrNiQuChSEI+rJpr8yPiYsM2uQk4OmkaCE/SFi9yWKtZDoxIO2xz4V/f/94PAfzDP/yjvQf2ywPsK/KJpQMH9sc8yUpixzeBLIo64Uo34JlnniEQCy0AMbLqsGlBXuhWXreESEUz8ZbRogr9QoSuAg8VYK9cDZ/bU8xDBRRmPLCTtr844mWsl1MTHYGY/qIR6MjNkKIgnCztTu0fGNLNsBCdhfjaa4xCAoJ+KUQMGzTOK3rLhwzwg4CY2DSwJSZBbgjwzQpNknTfQ1qDSwChWdhR7iE4kDIPzAqnpeWW2YQtBMjWyWQS2GEGIJO2dkEVeD1XUVtjiZEbRoIkfNGO2OIJdbNkhfFIBeTD5lkvgdAjgOIwAtQCFqngq05KqvipMI78tZCYnbgYvL/aHQtkeIdX9jMoQymGuf2EOnDXFnbZUpBmIisjnXCYFsncfdcWZgOCkr7zhSSoydanu4gCeQweapJxoxUz3uQnRqBQEcuJKQ50dXds3rxp9eo1+CIicfjsmbBDQDqk2IoV4WAlxum5eObeEkeg3AjXUJNtUiwcKoVfMGnKW1hYoHtbrbRBJINmAlT+ZnLstZ9OxzS4AYhzyYmIAAnNEhdaRgCaozSADVEouTQ6/hcZPCR5f7WPQiKwFBQbfSJCgAtAMiEBRgWaAhZHbLvnPqx5pb8Ky/79+6HjC/7ikXyU14rBogwptV26wgBQ66f8TdP22GOPYe1f//VrmHWDBnkre3Mh2AHT4ICMdzMG9AIv79AOMEg9Ll4pNFEctcJl0piCKForSfXeal90vdCDqS2b7/JKRdil/hYmGNa3bInM4Y2LUQkHhXyNCjLSs+CNKRAUUGctzRTQ2CGAmPIENOyQIeG4/KQXBFMBKRk8l6hjRBXsEzI7hF0xzAKiCsgUAQghw45HP1WhPm+hUEVh9gYydSijCmhepWxbGaRcXVWrmhLKyZ+8i7BoltO69xznPNwOXSm1pfmm7wdv9j3z0Y9Zn4BcdccnLH2W71g5d8vMqbCycCclOyMutwpHRiARHONjWinS4uSGu8Qs1Li0f7/xm18avNnvCA4GqqQRFLqx4hYBBhc9bFkeJhBlIWrZtxC+PnY71dIia6R8tzVZAGCx8nBnZ7sVOEnyVKuLlXyUYCGeIDs2Mib11CMPDXB5OVe3cNaNpS8wIgObtjOSiZ8IxhTuSYroub0wyrDELN9YlVayGGqmPBIgNBo1FsooHUyGX9sTVTSXQxNqkaRvJDMjMfrs2fNYYqkPPrCD6ECAVhUEgCOe6g5997vfFUGM+msgWRhdMnFkKAYF3QsQmlJjvQgTBQQ+io89BPbB7AK1OQUgOA5Vn8TfoNn5YArR7Gz3IYozp07vfOCBDevWE/jS3GyWAAuDU4bviV8EjkKGCxf5e4tTGgRHm8GdGKtiYtBTTz0lcqETEOaLVERyLRIwmUMauNBIIxg0QDSuvP03fuM3PPGTEDRypjsA1zeTSjnu3iLm/KJC7PArBNgy5j4asUyI7oR4hWGUPZ85fYEB19WFZaZA2ZZgTBR5tKlYSWn4fpAq9Eu5Wgb9eGkEJdIpdkiDXqQ+KPET/ZzHX/InATsWfLXREkOpLQik7XldfS2pKqOAgKK1wy++Tp8+aRXK1m1WYVYSCEFRPfdTUYMKBRfFJil5Dil6yFmv/tTJM4nnB6vrvxmOeDLOShcYpPTLly8haXnLMoviiBRedogSzEqpccpNCMpftEWj1dySGPaFfsKRbTAzBQjccwJhnH4KwSriBRBhC23OyFq5coVtXnE9ZeTXFhcEg4ZfhwYyanCo1VYwc4N4N9CCHdIzJghUy7JmYTQ7K4OJ2klPg1yOAaNBAb3mc+fPbNi0xXB+27X2CxcuVlTVWB8yMmicz8nCDu0xTGRadIGtpqXezl2qm22i88OBFqhNsxKv1J+IIAUWKH+RFMiy/y/k/yHaulfAXyVd/9+f7rHjmp8GKuT32PfTvfM9vTVUxaJcnljJ6C0IBGJexCIjE50mOX3S2D5kb1m7unYBmLqwky4l1VTAYtOVY1MLrb3jS4uqRJXlq1av3bg5PduH1PPtJ9l/YG9YCbmieWZiuLvj+rKG6utXL2lRNFLnLlz24RGkiyoUZBEC8+DUorFTyISgmzcc/NP/0K7dvKCoII9J8EG29Od//ucWCL366qv0RfWyKLpmPMgzY0DRzMMegNjZ1tuX0/D31998i7h0wxLu8oLcUsIiCgbMRKkbdm0qze64/17l9eFF7M7r7TpNFlAREQKsspNHsisfp7NNBTFEyqfgRbAJEP6LEuowxLBnz3svvPA1oLiM5zt23CfkQkTqKHfIAdr0XeU9vlbLs2D3k5YN/ZCz7qBgZcTdPfPzWd+dO3ca72AVWgEQ9h3YTyA2VIirGj1y4CkCjgJKEp261OohyYhvqIoB1vNTZ89XV1c4QBlVVsLce982iyg0RqTHd8RTQ4MmmawXkkxf62jHo32NVnI5i0ZIEf0MYzFf8EnMJ5o++tGnxB8/zbv29fd+45vfRLNoIA363d/9XVKSeaBKvEIzL+P1GhdVyO3FF3+0es06oxXeeo5a2acbjYV7+jKRQjJ8mSiEGpqyPBJMqBFsUFXFjMwcpnvi1BkCb2z0AZnK8AXqqSkC8WTL5o00qDAlaiiVpEc/Aff8J+0CqfpJR9aB49H//FoIUgv9lEgO6vopChE4kXqomA4AeiiRSRCCh7QpPuiNwIJs8qdowPEOqbXcymvUPGGK2IRa5EQwmKqAQIDuiQh5pAEy90S2+Ikp+mXPUCBGeSVJxiv3CvtwtZJeyTTy8sKQM7JJKcfhYx8mTyHEocEF7NFjH2hnf+anP0O26NHqXbl8ibWQuajuC7v/8R//QVPGj80zq2IJkOEMk11oIxmNHVv1BBngo4H8PUESVRqlEjyffvopq0i8gg6uI4eP6j+oLj7rEhMastFpwQmar9pidfUqxwSQ9PhpmLnNDo04+IjEDjiEQFAEu2rlGpCFEZCFPG/VVdHeEtQ6d0u09IR4ASF/H/+OpoVZqkEqOBjk2sCiiiRVB4eQXc4lgxRw3h215qFIxSwhlSEwKmCJi3mD4LhyvVkqIBOJgRvhCBdgMlqIMMIxFY4m2t8dRvexoDfugw+wULcFwOZFSVJK6VWS3YS2IGhwSSYyWCbgBpPITQEAxXUttaE6fIFg2FF8Qwn7RD/rVcxphDIiqiEQm27BxzWqPPdQ4JI5OHJDB4CFAGK9DBlCqryV0ayI9RIFFhDjFSnVN9Z5jvEYZzDluXv8KgY4Z2eNhIYw5aUQZI5gonbhl8ChUDiWce8CE9mgufdcSRJTkiT9hA5J7mMBQDCipCcpO9aH8UWfmI1+5ZHVLvhHikvwVxlBSGEH2GhqqJfwBbU7BejtN1evXmlnHub5J4hDw8O+bZ6atkTSIKq0t3ekOyEjPXz0BATAjZZpzhkx28XYjvvukXtJiFU3xkZ/Tz/1JImwFckEo5E0HD70LmUob1qjvKxMVPXT7L0tKSGXtaIlMwxOsC2yY1viMln4SQrsiSDYPdoYNLzZmb6gOSMHQo/AxLXq6mohsmMJeRgRsCwNQrCA4m91MmpF3ORDULrNfEm3T1JFtXv37CMrFiYIIlt8P3U8fK7VWB3gLCzoNTlwjcAQYyQep6yQG+zbt68nHL8QhtJFT6EBatqCRbeEmwkr//RP/yR2cGmxA9cxbmJWONPYAxgTOIkgHxPsOAw6Me4no0Tqa6++bu3Jvfffp4w1aAggcA01ROxA42SZzfW2NtbsbB9d9mvtbaRE6eC44ahKkqq4Bqwnpn1YG5ppBKeoFX/ZE5kzGI7EgWUSTAUxjJhSRCiJNQmQFVEzd95IBSh0MW68IB4uAEkMZA5G+Hk5uVbSWZKxdsN64qXTYHdJWEQeI2FmRCEDZkuA66/qAFjlosUlAVrTitizToZxlapMhQyJBTTwscZKbTEUfRi5Q4TQhjD80giDEd8xJf8gNEQ6PqW8tNhiYKaYmEE4h6G6pgpq2iGBYKLJ1CoB2kMi+xFY6+tDwsHeABRlmBxOn332WVU8JyLMwkhilH6zf5hMGIDGmNLxpSliMIYbpcsNDU0yW42lJYwadCmX1MFbTIHGIIOWkws0F2mjEwrmyvBITE8Wj7YbYl/vyBMCR5jcCF6jKYjhMkTtxppm3WNHbjsIhYoVpk3nLeAaO/iVWrMKzHpCWTbS8LXzF87ii2EYf0dDb1c3XzCySObG3HF67swZ1k7glg1Ks8+cPfXoY0/R1OUrbWpZPOO7FjlZObRj8Y9tFcb+LcEXzh3gm5qykGNQISsnzP8uCg1PCB1hLCSMRfkJIzNgqG6khrizBBxSrxCpjMtPLPv7k5/uVZHYW2uUQPhwtY+HzgdymamDxQVIXAIUhWD83rlGSyx6dGrGnOA2D4g+AGEmBKToAywKe8GXmF6fmFt0/cb4yLQ9x9k+QrF2090tazcYwqiur7t48cLN/hstTfVtl85lLL6TmXb7RlcHaTuY4PLVa744QCk+fiJAmZq15VH7B74qPK6vR8q7QweAIhxxpiRN0TvHNMvKC3SwqZtFac/4wttvv013xg7InGaZeoyWVLl3/z5dUD6Vujh8DoJpoWFoOJx1y51ZkZjGnRmb6GQsSAGd/eCYTu+pqLjR28NKAeQv8AbBpaTxRHITXRm/3/xI1AJHMWcHIexLX/qSoQq+5u/mzRu15WqxUtphJB98cFxvB0b0X7/WzioAZ40SICMalC0FZzY0pbEQQnc8uJPpzicNAbVzDQd5aTXeeXsPgD6KQUrUrYz4yTzUgoWJUigJ4FH8cY9NdFoFh5KPP/uxAwf2AbJ6zQpHX5jf4KrawVd+/GMze5/8xKexM+JTa5kZzpRzForPOUEhWBn7Lyksck+MGpaVK1ZoLOCtra223lIYPHT4oKiLBWIhKC2gkshQN+a1GEckATrLS93Hn/ioV8Ip6amuT2J7mDLEawITGSaNsUYjnkDEZugOATxO8yVs5heUYLnteofQIU3REmlAFSB/TqE3K4IxDz8hEkA8FJz9RRWxYBwxZEhxZJ6RvlRAE0lAhpR2FGN7dMQIFUCzaIApENBguhXxTAuzyoPDkDzBLGrV9SRC4NckbCs/yLyJxhkPwoDCL3emdE94hALkBqOw6SFEXECsQQbKFWbPKKdWHNEm7IBDhBGDdIB45W9VVSVLAB8oYYcc+BrhQ40ASSS5WUb7yU9+sjA/jILxJuvr1q1dw9QV1gpcPH8WF9gUTnfv3qlVvXzxCo8jByiw7AbXyFCdzDUEysPIAAicl1RUlt1zz/by8gp84eLrX/+6PU5oMF5JuVaL+atJUlduRtEHDu7HKeDkjAzxn9C0AB4Cq2JkHL9EFFLYnHx6YRI0ZWF4lCEyDEnwDieSk4Mq5AACXZsBgMtDNNM4oUXilfE8Xiq6APQ3d2kWqWq2CFloIjr9FgKRIPFfqDFOBQijQdJYuXot4Fo61OKR/2rNaRlrJIBs2lSMinHNpHMysnSPiVp1DY2mEAr6Xb9+rWJowBExgulCnnyPcMBH1YaN67gwLhBvoJxtrFwZli1o8UMuumNHGEqzoSsZHFQ9nEK5YOC4mIkWF5WgXzGU24mBNgw6LdPueYesuKAmAOWRQUp8jRbMz/sJoOcIduNDhG4Q4B4lhOlGGZJBOSGQOc0YegLEK30uBOBRFahJT/UEYejyQam8C3feAhhhKqyMAuDHMpEMAF0RsufkmbJ5WVgBrwPAxFUjeisWoFQTA9pTz6khUfFtFmY6vqK8dFXLivz8vMqKMuOM2Znp1oCGKLMoLGlwjJ2BQ0djo2lkbHx2zhxEGAiPKg8Cwn5KHJtbJNrSpSgWBYfolS3LtW2xcTKGbADSQNuBd/dZSSzlQ4l5HEeib9iwXnvjjIHS8iof82HB3mCYoYgCjAZ27ooqlPMKyS4HCEt62i2lCF1npoNxtZidAvxKYSiwQIgMEcGSDAkK29YF5TyEqEyYEEgPu9n4vLXLnFyPAheUBFdFaQXgtO0JmNybymFEmBYly2EiyeHxnqNWS9zT3R3JAI2dRQ0Z0RFc0EAjQkmcPURqdAkmK1wiBlOaAS2He80zvaI5vhVzYWcrM1Mzb7z5pkT5p37qp5yYxKvApFMFqH8qGaoZHhg06G43Pc/cds92VogMf1EoerJLNCPSeBgu/Pz4xz8OkfDEJbRq8DIb0Y2bAS6Z1pOmnWi1aJBAiwUIKywsUr2lZSUJIxgX7J5ghUiCRTBGWALI0JHwyNBw87JGWFBiqZ/VNiQcwQKIGD+lIP6SDBuzjMT2JoP6SNWwOa8WnYwWCvFRJEIMHwaZMEPLZ3YsfHfshswDv0AxPCxjRy3GiRiiEHpUIQQ6kvwRnXtIpT7aGKEK2G3btpIqVwRZq+8eL0g1gauVdQMgvtxoABTDIC8zw8MsVfGT8bMca2qVJBY2w2AEKReMCjz/mU8b9dcfoCZ7js16mR31XJfME6SyBzIhSS5AKbAgGDvo1/8hBDeeg+/GtCYDky6oQkpYFhHIhO2RNinB67wXqYhlrw45RTlQgMfvO/KvQHPyNQbsE4hPvVgiiGtLgIhFUJYz0DJ/54mlVk4UF1tQxACMnMPoBkjrNYeGB9Zt2CI77OsfZJPGhF5++VXHfZKwkg7gd8qELbYgmwu4PTeV6WC6cOSfeefQIMFOgC4SIB9XKJk0Y6wx3vgbbxRREqcIdh8L++mhwqAtdmZEUhcQRLrsQvZED8SFJIVta/JEYZcHOgC+P5oaZgHmfQfA5ifbAMyD2yKmullQa4Fcjgidu5UyOpd2tb1/ydLcibnbpgLW3b29uKKmoqbWXNbZM6f6Oq8N9PWU5GTMTo1mL/Gtx76xybn5W0bX5gmfzM15kipfQz9dmINlGy6qN8ZvLd/VyxdFHr7GzP7hH762du0K+aXAglNDjJphjmnoga8pRulbNm2WIrtY0cnTZxjDsqbl9mzRDn1ZwKNRlOOSD+9g1UzUq4cf2Q0pE2VIo8NDzE9Ipzur9QyjNjU24pdL8h2rmymBo5GVhzHLj/E2ZrSMkHGCbKm95Y1WRZIwlxfZLKsWXcVnzHZ0dAIICCeShBAsgbheee01AYed4wjBJGPNAizOC+PyBIblkrLSxMf7f+7znzbhRRTRBrgexlFFm+bZOLK4hBeFQSAKAFtWrZTdXm+7yraVX7N2pf7/+fNnScM2LfvbRBUnDrFe1mje22La1954UyfQaALxHj58yJnkVAbsrl271qxabTIHqRT0oxdfMgP85NNPGL8kAWxCJwgQGnFJ7jmgkvI5TkRlxG5bQnlFDfkQO/UdOnRIedFYN0+MpeifmLTqqMVXV28P2XJnrFnHQUeDQ2PeZi3NtQjKt0SJ2pcSRT+a5eOjI0OEyXiEIGGcPN0AS9fsX3XRAwGgkZubifHwwSmkCv4IwDLatG6eeIvraCSIxwudmrRxD1TUAlyK0TIDpk36DRQmAw0ULQJLfxVAgJ/YicSoqzA1IYasXOyBb4pIXrEocLCjsBso1PUTZDS7+BECsKAwluMrCmXS5GDlj4dw4cLhRaTHx9kGU9HoiNg6ThBh8/B7h+Byj2w0oVIAAQAASURBVDwj3+hEkvhZUlRoFEzQk1nSLLCEzO/wqMkDECWw+4k26qY7KZBwTacOK3dOmswQOsoVyTdu2KyJd0+h7JlglVRdcAB/ejZsVEOev8hGHjLQxsBwBAXLZMm60NQEUVVNXVuYwZ5gEuQGrIWXLiz4ab8iSRqCoSM/sSbIAEKA/npFbkTKH9EQmwDoPMeFi2xFJDJ0Qx2ea7Up0RNOyumQzSRUJ15yQLD+BfPWQ8CjG4ICUHluiyN4/dQqaVD8xML92+5RXY+RxKRn2muiZgxyGUJAEvhcFeW4xqbzG4N2wqEy4bxHKNCmKZS+iopm1yCiMrR55a+gjTYY6chP8rSkHNlsiXbMkFCxkOiy4t+JjhTkkxoESDJSfdQSnbpis3vRgFjIwUWeLku2MKUwaj1ElWJ0Ciy8Lg9VwaMLXjJwo6LnzBUveERYtDqI8Ag7pigIm7Gkt2RIBX6qpQAg0Rkjhf6q4krZuSkkSU6r9JqtQCCQMXFwuTReAHUPJVrhcDSHA5hlK2a5qyrLH3jgfh0AIxfdPV1QOqdf4da261evhc69I1Y6u/o0gY7i81VOp3RL34GChTqRxcdkt+ySyXpOCoAzdHPElO2sWeuKrTIw5i7xOnjwAMaKSwpvJj6wrLmxtq5hbGLaJLpsg0poiOxi+ACfiCESy1gPx6NLbWRtdZ1dHV55wowwRWH6D7yFuDEi6/JEE+WnrVoOJ3DGqg8MsXjASYmiadxehuCcGzfj97vf/Z4GA/3BVfLCJJ2pMroUDZG0Zt1qkd1PwWJ4NORnICPMaLS3k+NTwh/2EQkCg0aJuMBtaJeyOTnT1HioQp2EQ3l6BaSHNVQZkBBcPPSER7Et6SxJkhXa6mvrNZwXtHOL02R7y1qWMx82weaEY7ZJ6Q/t3GWI8s//7M90SKnbNx84FdToBw0Z6PSXDZGbZhtST/SYSUNXFWvREANA80LvvINHdR3xwbQwhQWSQRWTqKy0uXbGT9DQ79Iw6PKxBCXR7IqxgxjdvH/4PauAyAcuM1MkQETkGdMLYYVU6VotXSYja471BJ8xCKDG40UZHIFjKEswojLKFQ3FR1XI4XLrVUSih0AQQ+xSARxRAXkCopggjgBRA67O9msoByTasD4A7WDfHl1vXSr69CNBEYXMQBLLINHAOyACio680gYD4h5qokYnBknAaScT42FkCwSvWClS2STRoYTMcWEqE/ZoSO+9dxAXZPjcc89pyXCqpLrsgZo8wY6/AiuVGf9QAKcoIQqLQzxxWDjVoNxfBiP2oYSQwXTOsKPwDNr5cgWu9dOI3Yg+gSuDKYkz8jzEiNWuYi+wjqvnVpDK+sBxYBz52FyInbKyUqbr81Q4RZ5lhP6Bk56VffHCZT/seLt0tfXM6dCTJITUO6ncxEowRwgbMUkLn/SaWRwOnVtsJ5EzDX08yzyAw52cxIJlFwZVVD1efjIk/Lo8JzfSdhGaVx5yRvfxCdGJM37GuirSVDiGSPBd+DDpoQVfJlZGZoMj5wsoYumLoUsrlPQBrDLXQwDJEmFHaENqLRCA0PlWwaKMvI6ewf6Ricz8khujU2X1LY89/VNjM3PFpWXardd+9IM5pxL3dxXnZedkLt6790Bdg+PFLP8Imw7BZP9WPLEi5oRZK25Jnl6I3RwRRUxOjN29eYspFB082ZuIJ4PEIx9EAOINfET/pUEh0eYBF+9wArePx3GBopLgZTFGpS1OV9jCXPzKg9khKxJshWUq9hBe3yKQ6wDugASnZQtfvjDgmwpJvjKXl19AtqCxdm0tqxCsoLP+28Pnn3/eci85NMNj6todTdLV1ssoZxXnz13UWGJWMLFdldWxUhrUcYMds6aO3z10iM9yCrpQi207aAGbdENE77//Qcghbi/AvnLFKlF6w5o1nlMZeXqIcvbPu/0UVTAuqwYZzSqCadCE/9rWaQ+AVTofe+YpQ2AM2zYDknRq70c+8hFLgKQjTU3LWq9fu3D+iu+K3HfPveriURZix4gMw8yGoLRqRZjmvdHX+9prrxlw+cu//D/+9z//U4x/8YtfRDMXg5SWEfOVr3zFcko+iEgRldzMk8C4bHlLTXWdnxovoqYLDQf7xBEIzMxfSiEKYqH0C5cvacsgTTK5XO3Cnr1hybUv3vhLqoAUFYcZaSEItY44s0xL6GMbsEe/QBj45OCnWlGbEHmYmpJOqghmfkZJlFGAviiCZWIH/eQpKmpk3ZiCds9yhE2tjMKkqryHShIaq2aQCHAPXUF+kRiCLzzC6DmwsDACDxHseaxLiWyGHbINFYkIR7FZIXksEALgpO2tKlCLS8KXKuZ/kBoahblpxagAtRyacKCTl2poIkD9OraqIv+yOBB87QJEczNTP/jBG8XFBolKd9x3P/jEAp0sk5XSBVkRMtHBjmbw0YkqYPkFlQV5hj6yleLpMzOhESSlX/zFXxy4GbJ5XiOqO/qTuhmw5sP+FjAFRcT4nygeeugh1CpAdFhW3b08ivmRtvDOlTq7wzphBKtFRyKd8VkcIcmCFhtE8e5szkik59wfL2JdxMJHUEhfPIXS3fuLVHrx0N9bcyFpUVgyoFn3hBxEexc4XJhM3EdDVcUZ3JI90DS1KkJESrwS2YgkE0T6S86aKqLuutbOC+DVZ5AKUlAUrGw5UqWMSXLtHcHCknInnLWPGEgvXb5AShTtMtRDL1of8wl4xzWaacf3kugCkR4KU4D7GC+BUxYD83WmaHJ+2mPso6V4t9oQ5YlNhoEwhUEgG1h0AFCFETRgjTztAVCF0FwwgubCIKVgKlJCfYxQpCUuGvFWYbRhgQ0QqZI/cQGiA9lb6ka2nwpg3EPQ1PUcVV7B668rMJUcfgppygMbalQ2cqaO3xCbe8Geh4Ri/SUbiq9gZbX1tQ0XLpyzGLrUZqcix0o0OcpTK7i8pZl76wqBrit07sIFmEbHrHDK7L85oB/mfFYfzXFyKgGhiSWRWmxOUElk5OvGvmnESYss3aZ1KYU9BTZWyQMMFl6+cNGq6GRpbqp0UQOdX1hiswH3QC2eAUck4tkNBTACz0mNA5MLZfjMBEuCF1NsTvJtKo1jeBtFExrFZP0DtWmSGxsqi4vD4CVpmtahM5MzKDQ3ggs5AFlpAFi5iKxvLfv0VioDvlcuh7T6q4miBicIwkLOpJTshU7JTA/Hn7EMLm0gx7fNJUlCHuyqiGjRSrTi4iOtYw2bfmqVhS0nwStg6MUTeLkrqUIHezSs623X0WnWxwdxsL9l693NyXQHtYYs33n2DgCenWOghQUFb7/zDkU49ZYJgoBrdREMJqRQowpYsU9DAp2k00CwkV+2QeAsjFv6y0W1ItoDg0zcG4PGToSDl178sTGnzZvvomtEohZwGaFcQRKgmIcwCgFEhBJ+uzA/Bxevxi/I2iS6BoqxadKAJbrlzc3oB7Ojs9t0kAZPSf0B+YobdNIdpbNtoIjRIgcSg12YyC8KHUUXyP4CQp7R8z3BFN75oZIgMJLlTcsQhjypp5/0yET5J0qIV2LMtAARbcGh8fXrN+CI3GAHBEySVJEzu7AgZBM1dhRAZwzHHpLzlcthk666hmBhZJYeok2rb1WYWj29urJDChs9NVxHjC4iZSdMCBYkmaCX4lAQgWgGCAdVmKJi9mb38C//8i8TO5r9RZIGEjHYgWjD5k3yZF1HMwCUDqYeSHvbNWFXjEaMPTnI42XIs1zHgFkw5snggzDyUPKvKC3z1vIYUmItPHTt6tXqJvJJv3j+3M7duwZ9OOaSz/bd6u7qPXP+QmdXD3gYdJqmswZD+FuS5vgqZ+1nLrbSnvQ0/xYEYyVdG2jRp6GTZHzkwwESdQkTMW5gR0b8mVAVJC/UeBUv8D33N1w2HiR5v/IkqaSDfcjqtu/g/OSyCiS5gKV9+jU1oe02fRC2lumN2LOcfOo79G2SGedIw4JdDEtyxmZudQ+MDdjDn5KZlltY3bR65boNzS0r7f+zVvLC6WNTo4P3b9vyP77yx45CWbV6/TGTgckSMqZL9QwPXkSyByswKYWFY+epj330jVdf+5nPfuZv/q+/ljLCK2WnRGZA5spQMWOgeoXZoegqS/BlTQ0z7wPTamPHl7FDjJ+/cMmgA8OD6Gpy6KQJhLq6WkZiGysjUQyvoEFhBjj5+MEdxOgGOKSBs7BzKiZGf9HAqFggSQq2sTdiPJtBsnAF7Az+tV/7NXR2dYUzTNxwT2YsBppAExuRJCdgFVSutVJA4oiMgeEBZxzRDBT8NPjv3Dxmza+L+ZpP3qHXGLyvM8QTI2bEiCmUs1sx0D0JCCCckUhdSX6wxBNYfA+I7uwBcA63GLtqdUs4nXZ+9u/+7u/EOh0AEcDpugh44okn9+zfNz93xyTqyeMnyFY8geWpJx6DV3VwVixvgX3/gX1wmXuxeuXSlYuf+ennEIlCr1CO/b/8y79URaDjRy+99BK5/Zf/8l8w7iNmPlRkgEBbI30hyZ/92Z+FCGRvwSRJjqnXJ7tluqT64O5dNMsOyUc6xzB8n1AQsNNGcMvNDcm6TxFrDuDFS39fr4E/BYzIIp7Yo1uATx207yI3iBRWt6vzBr0oQwJUJtNFDFwG9ehOqGRsjFZhlzKOxPCEMZA8wtAs2isQcYFA5rotZWVhHM0wqqUXBpIiQMGNppANL0WzJTBRglOFuaF7nLq8BTAmke4VgAsv4MDONbDjobYD5eQcnT2MJiSrJsQx1UUPhBniwS/HEfQoRTYCIPphxKM1kw79JDGNHQKcCxRkW1ERNhBnhCNr33jrHXZCHYK/AsCiRKymbl6Ao+9+97ug4YhwiooL6NRBUjQlmweHMI2JMGyUc1jL3jRqtA+agUhcOLVPBEYb7rSS5COrEV2jv0Nt1A+dPAVk7jY7f5t5qwjpzYHQ2Il2lKJlRKR5V2vGSCYqHcEKk1gUC5ZhISsY3SBYFYRFb2VCinlLboSAZpbplTIqem6oV4sThU9xHE24YGbBihLhAOuGSWA80k/XJECMGEEq2+7tCA2xzAcEOSEKeRnUVCbg8CMuY2W/DnlQR36+AV+oZTJm2F559cecmqz4jm+iKmAlOXv2Vl3sYPzdQ++JSExXLa7vredoMGpM8maVwKcI2BmPY+5pcyRZeY5rg3e6alSMjLBSRVp/K9AAKb0AHlq9ZGe5wqpTx8DgCPhmixltbOuxCTjzQADJaN1URIBiIKvlb7xn/y4yV4U6wCQ0tfx1jzu0oYF8XEiiSuWBUtjbqLiUx+9dwb5FFiUgVrmvrx8pTDPwNhJ2JHiICFjJrrOjG2CtXGFBHp+zrbS+vnZ2etIa+u33bLsWZkYqLM20cFIOIftPTcuIH+ak2igdXZH4/SZ0CDqkgxQ0INrX6X0uhDoHB8ISAnm/Drb2yoRhS0uzpQWLFm7pALBmR2XhysoAX6mM+1cQ7CILQYdQ8BKtgQ1hhAmyHlycPX0OF4C7pxty9xExVbiEYjRETIAgzBMzD1kZaXn5S+3jpHVaASduOqQY8DkPONbVsSG2Lgrs2bNXkLG7lLiUB+TW7XnEkDuvWL4iDMbwgQAnyc8sCQJBMcRQrY6EWINB1fkzEVks7p67sjxDBRQMmhjkLDklgbJ8kIK8xRdhgixS++sVA3KCmU4CpF47w09dHynTHxC5en1bMfnUq09WkZKJe9UPHzniI1aEALuGxw0fQCr2iQVYXspFCZ88S0vDmf1m/8EHGZGUiBEc6QDgAsF/+Id/yPqRRLx6Sm+99bZvfjFE5aFTXRwU93kgRHGu01v2QLxixH33bI8tHAFqvYiIlgU1JsoZyEFMuXwpfEKSh3NR65Xz8sMUG0qQnfSpugiesz366KOSlWQhRDiOUFtFZT7phyk0CDoYhBo6DCLME9L2kGwJEy/ArjWJn2T2WPZdFFQhXkOOa1bkKDbW66GfjBCcT37yUxgXBF3xFd+jVtxhmVi0+rjAC3RoFt1wbXOye9jVZW8Eq4C4j4CIHf02WoDAHdauXS1RAwr7gFjLIZpTgU4OtULqEv3RKYyyGQTgncnBS6RYM0wFnecEwiPUolxiKaus2Lr1bmuabfBFAJ0qvG71Gm6isMggs6MR1YFiRWah0cxPwSE0g2He3uju4U0+noxlK93DxGty6Ic+ku0ZVy7ZJLrWJ12HR8dNDrZd7zp08LBBXN+zQ8CiJKlPuW0pv623mRlpKVkWcN7RLTCgrgUKRRiS/9BPOHGMA+/kRv6eRxl65V5JD2nHRQXKuIklvQLBXyNYWFPLvRvFTHHxr7AJ4ScTC6Ff8uEFucJSf+VBt4T6zu05O4Z1h9AmJoceSjILjIZkOVD6zELKwNi0DsDwfMrM7cX55bUNy1ffv3OXgzbMJDgm+Z03X2u9dN43FAvz8s9dvAi+85Vi8xAYSQsNFQdkUTZKkargY/GJjKEgN+9PvvqVo4ePMHjTAsYylNQbV5LZSKMRTWssBxz2/OKPD+zcsdG4Owj64RZf8Xf33/veDwwTkJiAxiWvdXRog+MwpHlmKRHjB0cnhwWCST52MBMgwxDn792+3Tn3knVDgYhnGxzBckehgwPSO8E+/PDDXhEpJ9V9tWmS6/lpQwdLxuyLL76ojJz7/fePsiKv2Lz5PLhOnzrLF/gpJy2tKJXvqsK8OR02fcQI/MvJRgUZLC6W5obja32xFC6L8PgXobFJMKmGA4qczB6z1A2Ln6KEikFli8KJkyNDAxs3rve8prbSxxbeeusN7BOCrqxaPd03DAzv27df4Y999Nk/+4v/6RvnqiPVQUn2CRi1MAqrvJPWWtuuYk2f3J6Zr3/9Xz7xqY9v3rKRHdIUJ8WIkQ78ynoJnGREUfoS3PCrfXSOnLPOEOaJ57jGGkWjRyatOtYQjFQbgiE1VYYSzo5rFNLvuvWbcW1xN/YtNREY7WlSBnl8/P0j7wlBBEssilEZYrxyj0IcUbdmBQH+UuX2bfeLe6yRvzMzJamA+yumokgiqiNGeaEDfO6BWZyqywBoxENRS4hzz36cfldd7RwFbUSYZWqobwIWaixgjbSZk84DFLQcscCIfSywQAR4BYXyqEU2neLFX2Vg9Fz5GMFARhiZ+Aua1ZXKi7tcQHnVZSDIoy8ZJzNT7L1DYcb13LmrjY1VvCxE1GNHmTc3MXhgZEDaYwko77tn6zYiujkYMgpyQCpQrIuf4gIZ9KWPKhkFkOl6lRz0vBq0zMwwZkyPmLW1ngAVRpI1FkDRMl6SkJaanZMFPtmiHF9e4ZHcGA+BfOELX9C0QcdCtA71dY1OJ4Wa2QSS7oQlvsa8FdC+u7fzh6yifrHvgtqTKDo/o1Sho9woZHDQFmWuoUcGXtCAmChtT1BCpPohjARTqjNajTikuiuUK4zgFKlqKUlWKCRtz+naE8aPNXZSVRrWjIGJkumZSbJSJQn+t+FFFVKNR6ur+8dgdACwg0hNnrEJZTSOhn3D0tYwEDbD8PBF+MRIETV19ZpLRCopi+UjFAq7bZ8Jv2E/HqpgoU0tI2L03qIodH+QjR30SHIceVdZoc8WEkuQgUKVM9wUUBe/CIuSYbSK+QkaminCDVCwWAJE/lwDa5E7QMAnCkiBApw0kKQWIDhl1Z6wcMJRgAvHV2opgBJlmIeKSqY89/hWIcAYhndKANTT08uAiAO+sN7dmGRWFiJU8NCmENAdi6ZxNjaWl5NdW+1kMUsgwiwqCJbFa3jFHfmWQ9Bv9ISZOAEdYgahEXdsJ9KZI5gFZh9LS7GK3KW5+Yp1XOsAx7gaB7CeiBZMuU47X3zJYp/4Thq8pdqN/v6w4dWXB7q7+4wXoo2JqyiyQMcmSJZrGSrGvESWWHELY093J+3KL/ErHyUgVguUvh1O5UvqsgnNA7OzrmNuZmJJeopNhy7so9bxi0BRCY4kIv7ChXHV+SofYegHD78nLHroFeXDBXWoWxFmQgF3cQNDY1IotAmgGk4oWC1D1xhrni9fbtcYCTEo0RCimUGgVjCiWmX0U+kCVSaUTZvilBAYE3mCo2QINOkZlB1Ro4Tl+Ywf+TMCFZc1NAYifQJjaY5dFm3t133F2FG45En7MgMqwyBiNAngJyYRZsrYCS86f/4cdHX1NYIj4sFU3hNV3DPiPXv2aMWlp/SCEd8TvXlzyJfhiYicBVCW5pW2KmYYyDNpgHJyC1HsRre1fXQkvmCNSEVMiSbsMgkYbbyCRTThoo119U4U7uruLa8M2zAQgGCqvHA+zBIorKQDScgfaglEQ0Pjpk0bjRZALSgQqcLcHnd0oX1igV6BIxv++Z//eWKXQtnfogztIwmdviTC6jizYW9CQ7bnNs4qgH52MjM5DY6hDjLh4QhTDCVudLEwwlxBQCEX0EgbJlm+vHlwcIhJgI8qW47cBBTOIe3sESUp3VsyF0NtGlOGpmx7YPCRBmOr+AUWTKrHgjQCbYQmq2FgOEUMXOgEWXNlyIT3ec6CmQ09en69s+ORRx52ypbFeOQm9HClkUHHIIR9CIaNbbKTKsWfvohpc2SIm3lLkQGvgVJ2K31nbyPDgwR4+PB72r+L5+2LKBABbNJwwKi/V1rbHB82Zh7s3CXj0E4Qk8UleXUapJJpC3N4WNaSNBtk0+0KT7WZ2MSUoZFb2EStzhgG3SfiDSOXbgxLk1VIM/9zjB+0n1zKsGd/VaR0jCcuGexNmVAx6YDJWPzMTA8LM+Llq2QuCnU5usAeABX5UaTVQxMCklurhnxD2YGeVAw4aF6Z/1uUljExuzA8NT80Od83NruwJLuovKapZeVd27ZzQ23EiaPvf3D0/aaGmqNH3r9xo8dAfvqScISOvRDM0ufDXHwc0qqaSmCt1OJ0ogGq/rf//j9WLg+73iWIylCiAvyX4jBLBUIi82Z+XOmee+6xiY0qr7V3opBhiIS2bxlT4JvuJciWkOk00pevh5aWFjvYzNZt59xzGaZOy+Ojo9HY2GT/jT6UmDrQNlm+ZUkD+TJCcQAZPF1rSrzSZZIkeUgZnj6hWozEqJk5NM8NXduzZBQNnYALbmWl4SuEVO2JXiuOQGDAOpkuKYgox/aSFmpOeQtzuf/99z/AZ31WmZ1fvHBJ1DWPSbOimSccCi7CJEkjL5xd2PQWI36qDoXPKitphbcmSS4yMjpokeqrr74MgqRhJjmft6mxWdKg3TTcbtmSGbP77rmXrlW8OdB3cP+B3//934fIxv1TJ0/yO3KQLP75//z6F3/pk43LGviLCE879MW7FfjsZz8roKGB+mj8y1/+MgGyUvnEC9/+jmbrV37lV9gDfZGGloV3EyCNiDOqIMy+Al0ImjVGRv48mjZbW9tCdK2oIa7C4pDYiTP++ho7AmhT/DEDgDxyQAwWSAZeiZogQ1ks2UNRgogQzC98JEd4oSOSJzGFNXYKKI8S1SVeihGFMmDqjJGwt2wVeWhDM7xeeY4dZuCV5yTGpH2Myc+Ii+WQswIiJyxoQLM2UV1/wccFQ8WdiEQgJKmukm4UcE/XKFTRhVr2EHbwJ5vC6RoEBMtX3QjSuOYpaPO5b3LDApexZA6dKPdz14M7NGQEgveKslLQtDo+1Kg67SgGclVtjbYGauUZGIvFGiLRLABab6aYi2AVxqABN5Q0NjYhDwvMQPjBPmHiXRpKXwqowhfwkl+YR8JUAL7qhEN3SNLGqQ4mCMSof8KLpXkzlrkn+zOJTmEFxicd2jvAHngoCHQ3ORWWjAv46IwLIGHEAj0qD7UbTqc5Rgx28AKjMtop5xfBS7xkzh+JPYpaSWIhUvCRikj9TIMCciieqzqYyqiiGHrARIzyfjJseuF97pemB+sCFjpr+t0jid7FWxRyBBWFW+Spy4Sam5bH/IoMfaBG1qQKLPfffx9G7AHAhSo0yKjAl5EODYbVvDRCRN46yQOPho/QQCz+WtgDF+npzcpRjVu5Rb82B81e0YtPO9CgRaqee4taD93bswGsyOMn8aIEGaoQPrH4i1o/CQ0oHmebKrG40E9KCiPM5R4EBZSHCGRcuLyiesJXRWGG6kKz6pB6CItiqlOWzCR8BwBxdisji7xIYWhoGJ/KoYORqawAoN6SQX1DsxHfqYnJoQGj45llpSX2AORkZ12+clEZQl/esvKdfXtZZH5BmNNcvqwZXrSiRgSXBYq3hCF4sWnTtcDSN4Z9QQzPdgsIjkKYgw4BkUQVFRbQcWf7dX+tfjbXI221foY/yJKGhidJzaYvrbmDPoVpavFZOH1FL998822N1j333CchtGnGGkInZ8vnMI9Bm8xYOXFQg6lw9PsGAhroG7UMtKqqsv9Gj36QMsqjjGXgkXkxR0KUo6AfI+hnPbpljIMOpIlMx2CGgG4ZXUyeCMFQYYxN2l3hQH9G084io0oI3AUOcxQKBRctsZCBEpJkLvQNIE1Rp+Ef1qydpjKSYQH/8i//wtuV1zgpCRHJtF8Nm+Eco6mA4MvPhsdGUY4dDcwi45ROP6ioZApT4xO6bcdPnKxrqBf4wFRMusDZOJh2FO9YIB8MkhgyHBf22uuvEKbM0hNCUIBFIi+ajehJiRgxLI0wH0Ez++RgByqQOLJIFGrtxCZ1Sc9z8nTt3LmTfKwBpwgLsbSCjEQm5Obi+QvY1MYzJ0tQhD/0eG4m24Ld9Rs2XbpymaxA1jEgB6tI3YjduhC6eZ77YBAIR468X1dXSyw6buxNOEYz7iiLcPwkc0zJs+XWmDLbThRO+pPUYhMEigPfDJgI60Q/Js3VwXdSBWpZBUPq7+2TKJvzVZj9EBrnUsxPEo7l3cDLnsE0qm5F+5rV6xRDtn4rSwPH/nXiYqLzcwtxjJB2kPHY44+yGeSxGVyoYtJDMRNEHoKvGIsCAWGMx8o6jZM2SdjV0ivjIi7yoUcVXXIFZVBlAbF+6GNPPG7zItVAh4UTHxwTcaBDmEE2FiiO07KV+tpOSiQKmqJ6rqcxNhLGmB0DSm6trVdhsU2bWpNgNOkT7gTY3dtvaDPs3n73oM9v83PjUnAtcea+9iYk2wshzV6SkrV4Ufpi2bmJgA9XNGJfHwG1YgIeEalwtCKvFscduEnwpWsXsMoAqwxD9ddD1WnfX3Vp2XNlPPF3IRnmsaA/VvREB0AVNCkcTv5JlhsBaLwxvAzvrPFTMVyimYOM2UmgMFXWu2Bh/ezCIp8GG5u90zs0rhuQmpGzdvPdK1avKykPc9/g7nnrTd3m/r4btdXl1ZUVKjJy3sp+cnPCYjz+Ao8AYseOT2lywIGhwWNHPxjq77v/nnslfywQF2imHbVYAn2JDDTFMgkfQMm9BkZ8OHL0GK7ZPGMwHnzi9JXykqWesAwK1azytbr6RtlRR2e7YVHDCgjQzGhdspN1zCQv4lnXzqiwIELetWkzaRz54Ii+h1gkAvBZocDqNT/VZUX+8h0mFwMgkqwnPHBgP38hLk0ELpg9si1OEH9aW68xXUBQBQg5OCFXZwBHLDbauZNM8GsKmiM7q5uj2XjKkbOzlso1JS98DdkgI4CC0AAgs9Rrwr5cmSODzMLJir8HOZcUmWdz09BYaz+MiAQIjO3XrPmcKi4qBWT37ocOH32fK1kwWuob2mUhp+fUlsAZ+2OKvtE7Eo5pL7DY6Q/+4A92PvCgIeemZlJNlzsqbLUPOBbTI8anDzCollH8N998E7VGUiz+eWDnLk1MjN6KkTDeyU0qCTUVE5e9B7p/BIhrnUOQOW9iMOG0jLTFyWEGGVm402nBpvOpWC/te1JcFHJTcCjRDb2TFYEwBje0DDWAVMZKUXj5UpvWgWuLMGyMSImF1ws1sDMDIlVFYagpyKcb/RTwSdtDYBHPQqgMcKLABRWD6aJx39PEI6YEJfR4C4haUGMcYSRGFyrC5aIOhZGhmHuvgFUebW6QjU70R9qUseyHDSjGUxInDSsokMTI6Y4xgP/oRx5Bg76rNquirDxWF2wPvbtflGac2qCRoUFJ9ujwIBkSKcJg13q+vXcPgPRIpPSFAKZL3Vb+xKl7cBCmvICpJ7x58yYYRQlSwqzyPtIqfiIb+8KVwuwQQGSiPzc/nFIFKS6UJweMoJwoKEUMoQ7kkR6m2ju7xT/9vRCskg8qO9RI+kpcZoRgpAV/HX5C+KglJUue/I0JITHCri4UaNDmIo+ZIQAEEkaAuQvCBITE3LAE91ImQuPpWFCY7rzFr8CydGkYTeekMEpCMGJOAHwy1IiA6QleQFYMzfYA4JrlIFVDCS8CADfq7y8jV1G7ozykXmVlZKNfqmMaxwyAHN2QARp2796FPIKE4iehTCo1NR3ybEJjXWyY3DShCDD8pCSdYjkuAidwpwANDPZnJxsavQUcRuQRtY4Q+JYA4ZRSwGSW4Zoax51iKOcaXpEPjROsWp7jgpQwqwohyyNAdkPstAC4yw1ReAi4Kl6xB4Sp5SJMdILP0vyFk/HE9AYW5YkaR8jwKuWJ+1YSkI10sBKEd8a22LTRRKUZmXJoikQkraU+ylJfQOzqvOaAdot9hgZuNjWELQ6MmLzWrAvLCa53WEcxZDBwYizsR8QbmgA0wWxGAhYjzQTkxAZIR8Ym8IAfSkUZyzDGt37D2kQTJYbQcKVXF0xq7sMFUs5VAI0gpqYXmHtJcaluulOiNRl23tmRbNPgzl0P9vbcmJqerK2ps5HXZg5jkYMDepO+St0KrXwLkF07H0KhBAvxV6+2opPLgckza2qrCsQv3Z3ki4MIIGgKU4R5aXR5NRUyI/R7SAI289GELqHgBaY2b/+7B9ifsUBlcvMLCAo7uvVi6+o1Kxvr61CFERf2uQTLI4rYzZB6QidWekIFIAujoqfsjZo5jD4Aa7aMm9Dom6YFKXLT0eLAqtSUV0oKjQPhZnJ6SvqjbUIAy+DADlgMC7oWwq7/seGR+qbGmdk5K4UQ7y0F4U7DozxoMLIYT4iL6Oi0qanRx4R94h5rbEYxZTxnoyhEA0eSWRILOZPhtm33XL50jf+IdCYQDP4BRaRyAmRzeNoXGckBPcT70MO79DnjHgOtQmVZGO4zGi2sOCYT78Bq1B20R5hsypEXnVYg3H8fowWhpKRMT6a3pw8lFnoxYwL03ApLOxO436lTJ1Fuj1eYK09O4UQ/7FIiN2iDSFDAskhquNRA+5LM0MMmYYqQ7EkdnBwFO4f03KfjwSc9MRc6kj9/5qx7WTJhik3K0BcHIavIuydUrLAC0lcBJVkufAdeMA0oaoSQahGadI1+TcopyUisgUYGmBoechDy6JTAGbbdvbDgAiJ/Sd5PrwQazJIzdNI1Bs/qyFmDJM4aaAGZkaMNIgp1GszY2Oje/ft2PbgTF5pAVsRm9ECgxrXVBugE309W5FsctG9SAmSzE2ZXEHDx3HkLtHQAUKhrhFS5MENi0mGXdkamD/8NjYwfOnxEwHzx5VccEyJpTyfnafEmeI3U3ic57SBKd8p+2p20lAUmZOjOq5CChytkuig35OwhFIEc+3H1DW6FNf3eBgqTkBp/0qmfHMSFEld8Ls5gn1LURbzLh8AgSE8mEkBWzOB+BMjxpXamnUNan4QjYL0yGAW4/QDABhocfJwW+hg+aqbDD8K0AHFn8a3UjP7RqRuDo1M+N15Q4lTQppZVds3aEj0wOCyNcyTL5vWrL58/YxaCkGcmp6pYxeKQx1CctXzWnukAFJaENayvv/kGo71r/frdD+5kMzRF9bwpRgatr/jAGRkn32Q2bIDe6xqaTDEJU8xe6u8vS8Cv/bbMD/Eg+2yZ3rh7rezo2IhRMA/xyxM9JEDW6A2WhwZHLDwjPp1t9uMo9Jde+qFQJh8FmWBYsmQUagWMawh3eAFKikPsXOyNN1/Te1GACfkrCq1oWQUddsScAwcOqqIV5vVkawDP91tgJ1ICIWGgBobCMqQVyT5pXs8eDJWKG07zUEuChhKmSFPKY5xgCcSIA3/EO1waRLWAFbe5QG/v0PJlVfIGQxVt1668d/CQ4WERDOU6AKEpKw4bo48dOz40OvKrv/qrN/qdrZyvr0v+YDqo3Sl2RMo1igoKfU/Axht07tq507CUg0SYnOaGPwodqigm7AsvKOG2MnvZ/2/91m/JF3fu3D07d9toHZnTIxZwLU3BBWdUWJS2aoiuyRxf5OAYU0255h/YjRs3QTE1HUYWfd4Gj3IGtfr6w5kNCPCEnwpHzIOHAs6LkWoVmQjmp9hCLMI7PQoRxFVRXoNUsYWmyJPoUAUj7YgY2CdbD5WhfTdnzp1Vy6gKIAIOLvbt28dykERE4CDVT88ZUmhNMsOKRFSzNNDQQCzumQchBHaSkU5aoFMEiNiEwB4UBtNfcgg+mzRAaGZmyCAfKDw0xoRfAN3HdlwUZeEQIaygMB8XwIrzCPawualx35497uFln0DtfGAHBREvSS7Mh+8JGADw3HmljujPSw4voh1wGJ6KRKHhIyIQOCDgHjIAbLIi3yFGzM2bA6hCLcpv9gevxCztSBoVTgKMfR1h4EYHgO6gRgB6sE/guJOZgE8L1OGGcgG0vz8/v8BnH6IkTf1QgV6lqETmsExMhl0oKCRPcoY9OyuMeXsLOGgkADtNcQ2CJUOWQGLKeIgeI7qsTknVAVQrEJl0AsH0RGGOz6oplz+2Xw8fVkJhDLnkQBEMWGMXLQFkJcmTC+N0bHAYZEpkimZ9EQBmkqvMQoR4xYwCKyNikMlA/6DWkIKw4HQKwiEZLWZPTzfIpqtdiAQEs+6zsnOlK56IM3bAgkDgsDsgAeMivVcU4ULMoKnX4gK2gmbsa0OUh5pOnSMImsN1vFISAVCoW1oeFm2iE78ESNfIUJ7EMOWJvx5SkFqJD2YrDCYyXG6UB9Ollr8MQxWXG0DIKpZXDDreyiChpn1PqA8vrI6sPGQVKbu3NBCNqQo2pDQoJsM12G+99RagOgDQuIkeMmvb4sioGe61a1aFrUNjI6gbsJihvKymqqrt+vWk5KJly5s7wicYyybGR2enJ7SdldWhm4s9XEn3ceJ0bBhtafLQ4UEIokvYXe3t1+Ro9IRBzhwbYGNdGDNJvHB7HhsETY4sdWh4XGSnDwZB5UaD6BgZtKjBEERwxz7cCGHjE2M6ADIDn6jURgqpCvtYA8fbunU74YqOKhqoFlVpFDF3bdwAgnvSpBWnWwTZp4XzyBAsYDE4tImYpE/KTpxAWzikxHKnZCLFWKaKRw6/z8N5mL4WaGDzB6dB19dVrV23JmZRhEwmtI5goLDjrzZbBwAi6Rfl0aLKcDEpNsqFsEyGclN13WjvRSvcYeojjzzqFCVp6I2b/Yy+uWW5ihIlK4aJq6q8Qust8zZuxy2lF3a8VVXX0C9bh0sKgmvRRIKuIg9BGyIxzs7IXKakj3Tp0gV0wk5cAX6SSRt+oGtg2Q9bp7uXX34Z10WF5caw5RN0xwRlA6+88oqIAJ2ScAElHEi427uHH3/kvl0P77LUT3nYDx14Vxi1zlKDV1lRgS/xTmFLI0RYWb4zPU/73kdmhghCL3qWiDRgRp7OTwCBxolIsg0XkqxSE1LeeOM1GpUHY4oezXVIlYAlaoaKQm+9AlCZ2oZGQUpo9tO+FPDtgNQakTaDNKQHPtsA30+ycsqat26ihZMnq2BpCRlhtxDgodj0NPMIy1rmpwRlYtS7Q4zAyCv1SD2RCXMKqA0jsAEodIrU8sp6CckTgRA4u6JcvUSWAD6akcpUUMjz5RzkQM7AaofwyLQYD05ZFDKoGFP8QmETWRI8B3ccee8w8TI21mihOVdCBsk4IgBGBxHyF0cfGjZDg2QXs4yBfPgOC+SPjgwmFmNtTF0QZRtEqu3QAovCXT19739wzA7BV157a3B4RMK8ZfPd5CYEg+OkfUZlyD31zu2M1Nupt8OoHvXFZT+cy0gCGWp3saYPQDIKfJjzO0TzPy+C+smFcTAD2GQsX/V4OZkRRmoiYdCAcvioJ1Y8+ukCOXYAkooLdifrAJgz8BNMF+kBq4rOgpM1wsCQuHE7rFtVuCAn29tZi5fEiIysselbvQOO+rx9+Xr/5m1bl61c27xyjedVNQ1WaX3vu9+uqyw8ffID8+I00tvZRQUlhQXIYEIwjk+NO71Hi9vdf4M8qexTzzzT1xMyAOgoiN7ZgzQOUl7A9igOEKPRphAV6+wOK9ywyRicoIUTZbgVbr2FghEWFBYTNvymNRyrIT7zbgQ4CoJrA6uMuU6bcVuv2i/QUV9X53gApmJp35Ytm+69dzu7on0WyHOlDubEhCMU8n3EvPbaa3rgwp1EU29/9+7dyCZmcQzxPlKJPGBNZZw9qwtqSDgsrqAvlqOAvE30gIKcGbx1ocG08vOtFBLnUbhy9SpG7qvwcB1+913UCtGCD0fjKbyDupkxxnl9jEt8nPlpOlMWL7r//u1TE7Y1hy9sdHReM6r1yCMPMWAFin35wpanuRCRfBLqoUcfMR5nBrW+to5v8lbB4f3Dh3Eqqjz99JOPf+QxMiFMQz8Wv5FDb18PTgVhjhyHWnQPRDlugn6joTZrWdEnYdLlcD7cC//xvU9/6nnYUY5ZZkZoOCI9XHBeKvOclgVkWaYZDJ4u4cbg2FhIRGpqG7Fp0RcnZeZqjY2H+W0KYiRFhfnchfETJjdPIsZNP92o66FAAal7FTFSEL6DJK10XElAjTCioyz69RxqUgJHAdqEV06kuvQudK4SL2O9alEZLtBgjeiqVS1sj34VsL8OL0iCl9LdeAgXaCyQu5EeTtX1ynNiIXYowPQcwZ6gk2GTsLpiO14YAGieW72sFgWBZkaQZ8n+/SVVjU6edeDJ+XUAQqR79s4br2trVDe6z7So6fTJE0GqySJyp3K5TF0Afu7s2WPHj9sDNjE9ZUZLda9I8s0335SZoOShhx7CddSjG0gFbYMVeBfaoNCywxt2fmeHzQkgaDroMXKNfDfzCyHD5lnSZReh4VpvlipVRwYIJKMuRThzM92pztk5nlCNrjKx+Ga5MlSDJFOV5IMAJhTln5UZRr6VB4qDoJ9+STJma5wFncRI9XTnr8iGIw/RpiJoiJeNqIgwHuSvV1EjUMzPhQNVqYk/UoTAwlZRCwiWPYEUFlmsi7MX5oStdAROXDab+YsYrDm/kRDgBV8HAAQckcCpE6fBQQYPVZ7hUaLy3d3hQA4lcY07UkUMGkZGw1wTaimLtOWf7oFCHUosbVceX2BCLdmzLt3CGnRiITGoMGhCqrW1dZ5Y7OAV5QJCDqRaXFpESoCA6YYoYFfeT8XcgByl4S2quLyKjDDK2dsgtHBa4LgnSPJTXemEWqpwBOSBgxcS4zsKRFNnrtAJd8hQ0kULKZ9+7G7lLCvkrqCoKYXTASBWItOqErqa8DEpOaB5Mrox22656vyM0zBTy4qKvVqala2YLoXPiJ06FVIo40Y2lNux1t3ZoUCwicyswNvEFBWZZsJYYbFh1NTB4TB9Q2doteZHu04WuLIqnZJ0R1kAR9Q2G1PDnipEQHBg1tU3SZKwFJw50Y3nTAQjWhHo2BxzQRukPllfW1ueLPwK+xyUlFVTErxSDWmoHczIyMst8JzmcGoJPykTFlEmITIMzVZWhSBiMDVBFJYG0VDTsgaRzsImfGnweU2gKj3LgmaXHeVG2i5eCgd+IVgigXga7LvRkb00S0UBBeCoFd5leNtrOZxXTNaYq9YLQOQxCyrDIEt1L4B6SF/eCkPcADHUr133PRoH2Eklb/SHjd3b770HfBPi+AVBUHaiBSFI3bDmeypEsdTaHmc7Jyu+REAEkAPI7AZkFUEGinuQ7fnz52wAMBBO+J5QGcpJg8MzAGYnlLiRdrMiKrPO6kbvYMqiJQpo/LRztENNsGCHRlggrkmV40klbVapbai1cZ7uue7QzYFARjWMqWdOnzasqBdqnCaSpGH2oeW1m9YLu3ZEi7n6LFRvGg5w81EJ2R9OASNeVu2zi7t27fz2t18Q7tGJXwEInbQPETJ0JGjfDDUK3eCipr6hsqqK2EnMkmVKoR1iuXz5IvbZGCwaEkLjqxzUGXuY9TMkCkkUoCz0wCXweQIOdgCnTV8nSU2zgnARAmLqZvM2c3LkMAgOyHLPfsxvo99MGvuEGnkXLlx+9tmPRqE5FpY6pGvwRl0YbXWDNoKSm6BTdfQoQD4MW9SQgWGEoeKaKhFG6dYb1dXV3ujvO3HsuFcIprJdDzy4Z88eMHHR1tqqq2ZKAQRWZF6O7ZlpRWfwndRFGuPaqmqqXNHSrMkvKlKw0CwMA2OBFl3rzknXjx472dVj+m7k/Q9O+nhIY9PyRx7+yInTZ06fOIVmYYvQNFO+trX4zryRdTk46yJhKFyigr9S7RgcACQBUwRpervmt0IyE7oB5EwOJKaY6mDGK6nrWbjupIQhGcXw66cqlt+oa67YfbzitwLCQ1N/OhoGbJKtjcb9FUjPCI3fh1Qt+BBYCC+WJYHpK2a5BhcdBaa3YsVU5lIHgw5NOPMvdXTm9uDYVFF57cOPf7RueUv/wJgTec+ePHnmxKG5qVGD27Q2NxUGBZobGxzCqm0zV5WWnmZbkbmg8ZmpXbt2iZOWDvhQA0ugX4k11HJxOkUYlqmVEgmfvXFV7nbo8AfsR/lgxndSpCAcAf1Hjx+XwxUWhSMvYnl2or1s72izrt1uVGU8JyJniDGtdavDImM6BceBu4KSMaCmZY0bNq33zQrCFF3FAVZtv6/yiOHphqsBka9IiciTQT7zzEf9RZvnBrl4h56nJ4690R4RAo/j0SDwwTD8tnjJ2bOnledQfISl+QA9gIcOH+ZEpss8r29sIPwHdjxIGu/u3ctspEpAMRL2yQYEW0GS7zNp9hZHZ6Oua+rrlPT9b5ZGFItSFqzvZ3fcELoH7r9fBDuw/yB2fv7nv3Dp6pXHH3+s7Xqr2TBOxODR7zOLFy5c+dznntOFePfAAVTh6PnnP202gMtbr0g48GKBQNDvXhfIRwbcG7fSu9aVMgRjbdWf/umf7Xhgt66okqKl6iTD0uidYZhTtc4Kp+jHowgA8gcnjuNaHKNWi169vbUQvrtUHI5LDnsANLVyQnGAMdCpY0Cxpro016Xdp1M32MEL54UXUsBJg8Q6O3r9VZElMC2pPxULHTEqigOw0xRZ6eRQsSO/vFVGYfKnCDBpPwloWW7oV+xFrc4PNicnpgEhXpQrTymMmXUBSHFekZsLAZ6IOQzDQ8WYejDOpCfjp/YxBj32IIx7hTAAR0YREsbvAQlhwlzeQkjadDCeeeaZicnwUVuI0MyMQZ6dnLKWFYVYsC+cCoQX1a+1XsEyBqlPUqSW+02bN1PKs5/4OOLVVZhaocYdmDoATNoNNREypAwGKAVQoQoFUa5shHtSEyFIMZX3HwWJKLhLSVtEYoxWd1F5rZ4Emj2QpAjgLziq8CYsdPXc6Oq+YRkCFIihdJLJyAo7N4AC0/Sj9ktF9z7BuDhl0XjysW2CImF0sgG1kGpQkgAxxTBAQycW8G4FgSZAeMG+WpBSCjZZiwDCtFhybOWJCMFmGMDEEaQKyzEQTPjgK49shaGjMkzBNXIzLLIKFU1CLg6fzoSd0OI3KKMedUkIhII4TmF+EQWDjPjm5eG8YIyA4xQg6RZHZk6UDj68KGnv6PZE6q8YsSBM6q+AtzjS1UcSjLCzW6fdjE+M6gBgnJDVwrgq7pctayZhe/bgIgdmyXGQMTQyCA5iSA8KJZFHFHiM6DwJak0Jq/XYiSH4CJOEPVQGMdARsr+A+4sez6lMXU8oAkCS0R4ZhIIdBPYDHTbpV0l+jQY3Kb/3ix9HqDqJ5QWdqSnphFvSOT42wazxzOWgQcyixUucZUe+2iGSGh0ZfnS3LV8Lw0MhOQs6m56rqqq183J0fIImmpc1XLl0AUtEZhcfPodGhm2vDhYWjtGtFVw0h6wKiRZoWNcVFlqEbdRdF86ewxKj8nPD+vVsqLiwSGtrQb6pSMsDCPR6e9jESVjoREZ6xpKbfYJ10Nz5CxdefvlVgtYVAZzI7F7YtHGNFsHWy5Cp2+GVTFQpc+jQYbwbZJXZWx+ivGyYQdiwSHzRaEQKDJI4Zezc+aCSkgypocaY3AnQ8N/dWzcRMYAmFvzNdGJ25lJalC2YNzV2e/L0qdMnz8h1wgeDFqeUlhY6FppSmT4WxEosRy14AgUjhk4IwKxxVskWsWubVeFXhhNQGxSRDMlrzwQyciArrFku71u/gCSMZlrwR/6aOmP85M/lerrCRBh03Z094UumYb3zgsOt0IB4SgGH3IR7bBIy1lCFGL0LiAQim2CgY9/MWjG1GDpL1c4hEnBVIEUqNWm5nfDkb7RRzCqDDC4tj0QGURtQNFoGmhFKNtDb39uyopkzQ+f8mTAwUx86Wui3oJZBY1PcBMFKa/TX1tUVFCEhTMgIkQjDy/hY2GXuiXkmMBFJWeaxL1w4b3OqbJJOT5w6abcAPf7O7/wOgG6qqmpQEpxWpn47HOwDSEVlJdp4B7HIhIBiwCyfcKzHMGrrL2tXOLqoPrAh8ChPDScFMU7NpEiEBfwSLP8iUhjtiOrp7XjvvYOmd0HQTiuDWeeLEXvohC8Kw13Xrl2nF7KlIIz4WJ5FTbIrB4ezWAEXaiIAsLOzWy3odJ+wL6o6w5ciuDYCPKEygmU8TEiHCp0AKs/BAZG03U4JU+RUQyZvv/GmKhJNHkoUeB8bDe0nE9Xw2ABqJN6RJuISOdirA5RI7aQpGlTR8XYb128Qm/imgTcdMIuF5qbDUoRXX39Ti/zByTPtHV2G7D/6zE/t2vXQ/v3v7nlnbyyvisU0FuOk3pozoyjGsjEEGJHmRCBQIuyCGq2bUyXYsOrequIUH/GY8ZzWcKcWc+U7SZWwiMjlobee+1IJW8U4flWJnv7/6wBEIFYO2K2kA+DMH4oARHmCQlJmOHQheDEzCHgXLZjlcFFuii3LC7ecnKa8cG45mSnFsOg0Lf1CW9fM7ZS8kprbadnPPvczt1LSfQJS/PzG1//WHojzZ0/bQNBYW5ezNLswL3dmOnzhgUl0dLXbAGCRwNydBaM22qT56SmHeTFyGqRojRxRoATLeKQRMZBvShq4pOzq//77b9+9ZSWWDTC/8tqrkkvES8t8MMTB9jZGsENWxOC5mKh7Z1GIVOpSKH7p5d7t4asaC3ML5hAYBhSxIaipqikqKbKPX+pMtOyTnDk1gJoYxdAjcqIZQC7w2//Lf/ur//MrlIhmbs4jnEgEhcJs75VXXvOEXkiYjqQRVofrag7093koDrB8ZoxNy0oxrlG72ta2ZtUqa4FM3+MXCrFi79vvgCkxkraiREWCkpsaZXeDBRbLrTgFD0IkDZJGWXkJGXLtrVvvYg9sEo+wWOAHLNGhR9JmQbPhXhmksSLOaxJAXnL0yPn77994733bdZAktbL/+trw2VqOjB66EG/FZHnbN77xDd762c9+7pvf/CZ/bGxqktATkbEhlLzwwgsbNwr/d3E9bQrC2ADKMSIECZvkgCR0slvY/UWn59V1YeDG2g/KYpzOj/elp9raOkIIQhsZt2tZn0F1W318le/cOQuKKtDJaKOayARYmhIMqd5FnoYASLKwoNg9CzFYY2TWHL99Vo5GsNzAZOOKFasM21lw65BAwzH2UdQ3NhkfcagidLAzKlFR8CRw4vIXCySDffJnNkK3kW5HbfkcoT695MFJStZe6z5Z0WpxYEVVpW8MGos1j02SAmOMiuADTjvsGfFdHWEKVAtrGFh40HAzYPDFOnRShHbKT5waBSY3k2aqW33IorxlA9O8ZXp6x333OZnQ4g47cilD9b7eMPnGQjRSeUvD9l+LOslNl0xkwKOlevxLA6c1IVKRAUmIcQOFFkFazFzZhllcolDM9jHEcATV4wAW3UX5cyKSFEC4DxVbQiZ6vf32Hi7PEvQYuSpQ/ko5T588aXIHSdEqBgeHb91hvf0clmQQA5rsi3mwYdRmh6/Lh2Xoyosb1G20X/LvHi7U4pTXyCj8RI97VuQCAT3BpJeGr5sRGviEwKdYKchEhyOSVBKd7NZD0HQwwEEGEamoFsiI9xYQnu4nQUWA6o4M3KRZcKCjOP6iFgvECzgwIhU9MiVV8DI9yR8XTIPLNAxWIkaDywx0KxLbXrAoBb9qBYxhsDzj/IWLkEovYU8S7Fl9MAIRiFwRLGu0F8uAYxgTD3l5OOYx8kgmlHjp0mVVnArDpImFsWHNk7lbs0IH+jXTzMxfJqciIKwCg+5BiImc8qaN6dpzRGI5NBzJLiZkwKgWabi8ZSoiQ9Sskrjz3I1iqsTg6Sf4oGEWcAym/NUff8kIEE0zIN/f4X4SDj+j3OlPZbrhkNTv+cytOd0aXLFOWaAVYk8++fjc7OTM1LhN1gJZeFtY7qMQp0+dk/FjWD8J3fhHCsSINjADshzH8IbQo5Y0AsU0XVldwTcMcSlPu6iyhpLaMEysxgvr6mut+bHWvyDP6qt07XBindNmVBkxrWiYGRZFGs0bHRt/Z+++rp7+sfEJ9qHpf2jnvQu353y0yFcMxsKe1A+3zkCBvOtt16jEjTGYmsrqOaFc6+F8k2SoNZFwuD91yorAMNgpNHMGCiMK1mZCryjfcH4TcywtDT2ta9c7sCxesCcTOaiCt/1ae2tb25HDh53RKMwpQH94Zwqm0YE1zgqgoGBSmLioQIxguBBVVYdNUbRD/p67l34JQwIfvWpltcHMyyUeGYga6AuzKEYofYTV6K/vOphuJXB1mYI5GbWsqCZMBkHgM3NhHT9c/kJNL8SrcUKbn6HtSU6tYSd+YtBnq9gPl5Ysqq48J8EUwtwzQWWg8xDGsdHx0vIyXk+5QMHihr2pSxHgAC5a4cLACbGoSKouEUF1jkRKmh+v4PJVHabCiDELI3RSDZtP2DoPZ2AuPIKv36UuBjU2oCGJEgMjxnDvmJm5zrZ1z86du6C84fZt27cbpE6T/qT7ynU4XG/T5vCdzoOHDkhIysrCFxZBQBWn1d5wVzB9Ns4aQQkWyXjrL38zcqwwOaCTDN04u0CrjH42ZkBNFFAXHDZgX6tGjq7N+KMT/Whral4mAKGEWVqjxfVcCFae2I8eObhhwzqjQpIkBZgBG1PRumTYRQnq06L4axbK6mqDuKxFiJRjGeJSReFoPMhwCU+EzCvZjzbMsiZaYG801Zkcr6ElI3Y9CjKnFFIFQeHEaM+Njw098MD9aLh2rRVwdWnzMz/9PBnipbmxSVxiWg68c66Liro6BiYPvvueVPidt/ca/r85MPn/MHUfcH5d5Z3wNSNN71VTJI00GvVmFcuWi2xLLjLGLcYJECAJxqQtC8kmm33fhH1fsuzmk313l2R3swnZkAChgzE2Nu6o996ladL0XjVVGmne77mH8NmL9efOvec853l+Tzn93L/4y/9AImeIffe73+MFPhYDOhB1d7ZXlZXY4htPgGZjGfN8DTiMfDggWPMeP1ZRsSXg6wBkm/DWvr9zOzmsCx7hMoLA5q0Ll5jBwBm2SOE22Q14SwoEPUSH1F4xFWjLJbtXssho/b+mnlU+PlLmoVegkMUNyporMEdEzLcMzCuqN94w0j/kJhz+lB32DN9JMXsw59Zsqk+o9I5M9gxNzsssWbPpvi3bHioorWIzHZ3XTxw/mJbiuJWsyrLi9uvNc+fM6AKZOgcIbK0KNrv4/Iu/apfbzscezcvPNvaOVao0VIkx3+YkgplVDzHQ0REO2o/B/Atf+ItnnnnEGgBhFudioGml6VvhG1jVCxeafVKdoFNYFE6YoSx0NqxfxzZgReO2qzJF1iUWURALdMMMCK7cgtw8yRzb0NUVDu/ipHHjDctnY8piBpLFSGLdi0I1ZE0scyjlYtJbbsts3njjDaDJSAuIM3sdTpXIvn17GKF2mGjJPbUg/cmYpdRi0zZyBIUZkjfe+JnDlJni3/7t31690oCUIEM1ioOheOKJbu0///M/s1KWg1WRlpZdBDdhxJ1pHFmr2hSkHjT7x4uFGkFAq4ud6D/rAvKTE8eOnr9wFj4wgYbWCTtBQaNk167HQ4UyNGT+k4xqbCBDiUMJXw7jc3Po8FH2RvCt2+61jlRUtAtfYmc8/Mmf/AmT1oCOo7+0j3Oo0tHZM+c1H4eGhjGvIBZoGFWXW+gGLM57+vudVnTpylWfzly3fr0xBQkkQ+Hg/gPQnl9RBjQIc3bsySU++4U/oCiL9pkQuDBJKI6pRhZpaVO/8dWfvGKBhK3PBiksw9NwtzpCR8XxaEePHDeu9/hju3y5yeYWDii6MgBCsXAg04JOArjYD3vQbOJEYMG2fZQZ2VlmEc1G3pqavnD5koEq1dn80rKB4SEbrBcvrbV7zSfYjLPYw2aqndlYnCYvbt0LNsoyVyj6Ec2owMqVq60CkADOtpVr22jKYoMSoe1UQw0JbWhyOecwBi7qq1mwcMNdhqvyQrd/1vD8GOIsgRbEfwzzIO0WXqAKho8qDwO5ySAIsuwBYiIqg5GYodI4fojJoTwEpj+tN6cCVoc9/KCvSkIN5nhgtLqadE1TDJVSVq1Z/c47b4lkuDW3xndy8sOyatPFgl5ne5dBWzpiq66axUuuXGk8e/4iyvxIRSwaM1GlQF5BaHpFKdjjAtaMYZX2mQpjYFoaPJiMUQ7nGIAexanj+AJr0ZjFJMBxS60IYoblyIuUP9mqP8konoRXKWH+irV75YqhA2U3fmVxKRFL2GM5BTnGVLMjPtNTN+MgY2hcJYv+xQRgqkBj0dhYXrd02333kI6dw98rU4fKRZDUhmdNITIJ//gCuUzgSuYoSwPujhQ3qG+PhJFJ62BRQ9YZtcrShbQQ1HkqFsk62WX2TqgHyYVtAtI7GAFILg/dE4G1QEYCKYEjAgsFMVfEx5/S61czBtrHJJ6jWQIhUpYedBEZBTFgaSBDLgbmAxX6IwpCUJaIJ5rYpqMIslKi08krWcq//phl0KEXRR/ULJEGE/UzFymAQseKpFp/Gt5w02VBSW8/tfENzmA/QPn8ouLC3IaGK0g1NDTWLVmVlZl/7uxlJ3tkFeQZEWMfhEcN6xEOZTNr1MRuN4ThD8K6Y9EUJIySP0LpszIk1F4hkiUroOQMAtbYjRtCqVMUtMmoUtxquFpfs7D6gfvud1Jnczj/4UZXT9/A8OjFyw1d3T2Z2Q5wy7w9PZ6Tlc4lmDVMA0YJykwEuLb7cmAhzyvjzeWV5cScmAqn6TGOZBfAjMUkBw8e7O3pc/YP3NQ3fJJGtfKnJm90tTcNDfSqeokWzt53+n5Dk1LCot+UlMrqMNZlR5AaF1bK2rN3H8rRMlikFr/qJFQSiWt57j52Z1U8QrzDt6UHgvqMXtGnHUB98MEHUELcvaqI3bjRVmtpbHn44YenZ6ZPnjyBuPORzFAzEXnpIiscOzjn5nRY0yaIIMUZKMuNCGgYCUFceUscdkM1bgjCAjzEklMRMEMWDItu7IefaBawSMz70ysOg468gb304Glww6EKW/RkCRRqxMVbgJCCaLSvESzM3X//g8IxePm8ZEr0Skr1EIt1EYoKmKK3rFxklxhvVKaZi0+6NppFofhR5TA2zwlFxr2792x/8AHnWhaXlaLZ0dl18OBhjVf2unnz3a3tHfyfnSRn1c438aUpkzJ76/z5cFQfHyGRgEtBtKAIiBliJzIoIIANnYGcrExcARwIfgPOKaGX/93vfpe9VVZWaM1gRunsy4j1zM3bDmUaGhn2FhpU4FARAYWyUM4rLIjBBWjG7Yy1L1uyqKOzzUozVpE0ZbIQhO2iRYuNOEPSYBLFocMdeA0YqImFmwRwYx4Aq7AlJq4QF7Y8x60se/furVtaa+2BhwIWluhOTUB8gGtUQZU94E0rkF40kvJyM8UiDSw4G/JU4uIlNThnD/IaDmRdTgvFkhJ1rqoqfcq0/9SpM3g4dPi4SGn+8M+//OW+/rDd8PCxY7t379YTIBHewmIccZZgrlS7gZMV+T4F4CYEvhRz1pIBS/sB2hr5uZr39uOkhYAIIqwKWcCLXQJ9tJAsueYgpy2ejH5JTFMhWdLoVxrmA+Ww0yD0uuXwK7tNG3HXgT91PtB3SWa5f2JyyarlyTD2g4iKxm4F3BqATFZEWsw+V3fEIqGbd+b2j0129U2MTM0pq65be9e22pXrLb5Py0w9f/7Mz9786Sc++uLbb75+59akPW5FheHziNebG5G1perjv/4J+Dv/3jDXjYkRXS/jo9ULKtWO7L+2xvBwE9jxSURHG2PexN33vvPde+69XxNdJOMRIhIPotb8wnC+k/pHPWT1qUrBcBforl9rMX5/7OgRuuA7mt0SsHk+SN2e4MFIG+L8gp/61VqyN8DoL2eJc32SwQfbsmgVMQ8VntI5u3oH5jg0q2lPC8piMkX4jAnTMuur8Q1kGQU0YIqKLBYz7vEAczd8TRHcnGELKXggl1ysURFWHBUWlcU2q/pSDGRjzJvBM3VNB+m13hQqi35ysFVr0pNFU8zVcf6y8Gv8G+qmXwyYdrPKSytKlqL8/Ndf/cnk+A2GAZwIi2XtuPcNjSeeeKL5WiPiimD/VAMKX+QFjtqWOM//ykdYu+FtkeqRnY/hUwgCC64ampvE1fVrVvvK8vq1q4UL7mlZlPNACcgHnRZAZIaJPRcPNciqMb9u7Voh/cLFKwsX1wwN3mi83rJqlSPL+h3+GDIWhMNVrly6GNw/DN73+fApJWIYsOKzQK0zILCAVFjzp1AgqhDW1AQFMQyNQmEc7FQsJQPg75Dxq3KXUZsePuIM/fINyAvswqbo6lKWKKpWpQUpoWpSAleAMhoVDCk3jIwqHSnPaVmjh4C0A2RYCR2KC3VtWZkemFUR2k3oIMq0jBd4HjtCudnhBCTUQORICKHMXIRQqXsMfzRRXrViOS2TgkQD/eGLy1YSquLVMsk3+AwuhM0GEuNQVGQAwikeMI9DkiqagnCuaTE8MPDNb34TXGTHg6K1KJRC+0Iiu2VL8NRgINr7779viUbAIjlBFR2YQNivsiRGE1cyshyKEIte/cl7dXWVanx/Gi1Wrg4A5sVMRHytVomNzU0oSPzKj348MKRfEXa8QM8rufCDuCcuXFEHuJTClRL9hgEyCfBMBJbGXHGoIBhiCf4gpWuYsB9DIGhGH8e/jMqVBTL+RIT6KEtiv2QvLfGRwwJmIIvEOMcVKJQFtOjdOKF96XUA1qxcarWtgoBmhlBGy0l4ijkoRqUqkRFZI3ESOEgm3+rh3DB848KtcomhLHUr6Sx4w954coKQ4ijJ55BVsha2acc2X+v26bm5qWF8dmJyWuuRRxu7GR0P23kNbZDdKhvjL3SEcwKSDoBsAybuPSSyZEEjSZ+W2UtANdAj6S8x8ZYi2BiJ8Ele6kAEzohjklzSKNefOEUQOCiI2KJHb9/gvLlhhNQQhJReKfSXv5ENylW6e4V6hb6GR8rO9aFIXAKFEaPIjj1RcKwSBCBWzuZkS88KK0fT0q2KPuewHWm0R0eHhyqrSlavXLbhrjUcsrGxeWr81tCgM8t76hubJmduiykIuv5P3atjaJRLMCahFlmeY1NsPNbKIBziuMSuw+9kJDaOTfL/5Cc/EdqICte6uqVmDERYb++9524E21tau5JvjC9cUGOTe2t7Z2ZW7r79B/uHR6sX1lTOL7t44bR9ycHySktJytbztdz/xQTNDMDIxZhKCosc7Ift0vISbDBKY7igx4zYd+DAIYVebeyvW1ysSYB5WrfQ+aMvPvPtb36DgYa6MD3MTWuQBVe5EcK6+XpFG+EAFKgZpNESFScVKhHCBlYd+ACQ4EvJPge/KPtVI6qMf/9f/R4egMaUPVRnqx6w5BdB9mG0zCvatBYcYn/9X/6amE9++MlTp04SwSTswpoFTF8RpJ5fWSVve1sI7gb/MMBKkRUd2BxDVBb/f/vttzEf0icfbKc7sHglgK5bs1a57sV6BsMV1SXK9QQdGmF2okbQV0YGYPsG+nlRbH+zVHQIbv0iJnX/FAoK2ZUlMT/RFZIY1IrGHjEpTlkAV9mwTEarBlLBCzHCqHPToS0lBBitC1dsmKVJiRmkcMiXKOj82XOmIJ3v4QBxrVXnH2PAmpIL5y/RNRg1hu6++56779lqQJ0WrPkxnis0uccbUqKMsuQlrChMlYBSweOfFErUKlWWe8LCEyCamRDT+rF0W1sV8/AEkX7staamdWvWm+YyUUNMGEKjP/nClwT4URe6gEZeAw9O3Vm2ZHGysCW0R9HXpAaXPqQP6Ihx8DG7ghmuJKKhCW0hQ2OI3kHEDnVdMM8kKF2kJhfpNMsEI9XnyRPHScTMiCkxI1Q6KdygBmrAykWnLPbIkUMOuVm/fm2cVSemXL4RLn0M2abXsWeIRelMxRHLRYXOm7IUYchaiPMXrvT09m3YsPGjH/94ekYOE9VatxzCugV6p3Qz/mEbwC8GOfTIQhNcm5/WLL8zGO8VHJzAr2g/tt7qAISx+OQbn8Sksjl6Dkk1I1cymBdGSjzRZfb7i1mAxPVi7JYF/+7RdAGNQpP0+tipUxNOzQsbElyx+yG9gvQ9aFwQ9utLCPHh7Vu39QtQcJCo+jQ3zwxchq3Nt8KMxrzxm3P6Ria7Bsanb2dW1izbfPcDK9euG7tpJCnv+9/7jrPIejvbs9LmOO/DyUMWJGjq0Kw+54WLYeBm/V0bi0tLv/7P/+ihvWzOe+UydqUXO4+5uBADDuxauqTWYDyPABL0zl+4vGDB0sNHTwBCvCUduWrrljEk3RJNfJ+zUftqVDGJstJyitPx4E3iD7viTUIKM6AdyhLraFl33ZJ6Ju2h8ak3Xn/dghCkGBicwQhMVi10cEOJZdQ4ht6uXbtY+Guv/kT73siFTSlwdsOMMcbgo08xS5d4xbYT1NNwRTocMjYUMK824Yx6F0yaDSuaucYud0XlQt4R26kSM2wGgxRYeBY+ZVdQDBSBWlITs3mkVE8qbzaMMQnQ1wggtS6EvDA5c/KkJdIlRYUPPvig9JcuX2DtuOLpqjIpHRfBUzCPAaUkKOUIdPzxU5/61N59B8BiyNZYtTWALGfVqjVOGhHEdIp+8zd/U003NDC4YtlS8n75y1/+0pf+Q7QrWmhtCd2ABx/czk1oAWj6Mzt2POKQCtsxbG3Ua7xyuTEzN0/XeWh4tKWtnZVWV1bBbWigHw5XL1+kfevaaNYrMgoF+MdGbOsLsFQWK00VDWDhLALgWRhkgW4olHaEQYhBUrSBGDTUawyJHh2MA1UhyHM+x/DgRoNqH3lVx5jXAcCJcrXGPOHnygIau2XSiIhIft0rFJOoCUHghYY1JZCHLTPDNjXVLq5hDFqBdOQAA4xRKv5l3Lt3b9n8CgXF1s78snLSqQ5gYmQ6jrt5W1VRrrJwI9eNkWEzG/owMGd+AbHkq1WiGc6pQCmEZVGQkeZ73/420EDBaxi/ZIQFBTDd4Jlxqsv8iY70p86eBT5xor9ouBOKFjxUOlsy+IgUrPCwZ8+egsJCHb/Vq9fiGRFSsxxZrE6hFKEVJ4trlwCZEY6PTfQPjtoFTXHEQQ3DbhJdmCoJy8QVjT02Ge8tN2V+2jD44c8KJTJUXbjCP6jRwR4tBINxAH5BAUnxQGrJqJimIByibRI//SpUGpf9EgryinRMDqTxXiluXKJldGoEjbHMnZ2xzBvIUtaEnlvoweLKwjNF4FwWXBljJb63Kgi8OY1GGvEnWOzAgHoZVmS35R0P/xL/gzYHhsIUyqSPtAwOXW+RZe4cCzTF8Yz0GOhE96lbigqndWvIjU1M5mQHewMOVuFPOiGFmSGLSfT96Tl7AAhL9icmCas40IFCSg4YhZI9vnJDNEwS3D3iBPErF34YOXsjBbKIQ88rZC3TRj+W6xcpr2JG1BSETxQkdoPtlBe2r0GL5rDiNcXjmDEpmJAczCW/IvFnJTSvqF267Pq1Nh6LtK5za8v1wqJsw95b79mEtLm/9HmZ9h6kzElvuna9s6/fIVN4ilJJIBeNanb4FQ0hwprJoHnBVeygC5t9E1vBEsmdTy8LG0LB+dOM1Q2z3r9vX1v44tK4b+4RxvK7sDgvN5x6JlIsrV2mg3hjbMK3r998+52W9h6bdHXGqqtLbaJmAUpnHwzCyVuYITvrMSJCTA+VYmC4vqmeV9QsWQQi4GoUKhoyuKULHtXcdA2Uf/In/xctWj+6f9/ujetWP7rjYefnCIIrVq/iNjiniZzcfBmHb4y6pzk+DwpHHBiJURcrVHaDOpD/+Mc/jjEicx64wYdGaEFBfEyLAU24yS4BkwIRa6M4bJMCffcuecXi08dO42TXU7ucLyYgwlU7n0mp6hiEVS6BvXmZdE0iYUKdrWiscm8QRdsCgoEQpQMB1JhXYuJdKT6MAhwhj5FoxzNH7OGNQYvdEmNSRrhJ709bkKkVfXwqFPMykjouEoj1MbMmr1KIYGxY9FGfCUNYVa6M6EuAwxhlWC9AxFYNC+cEyKUIzFOiBN///vdJgUN0sMo8YjWPmum89pbr2OObKNj9bFmfYSc10769B/idT3suWVx7zzanMFUwD8trR0eE9UkGBmpsU4oWMGb4Bcy1CVgCgn6Jr4K35AYbmIE25hVqvFCjR3iibt0Tr9DBmAVaDhVprG9av3adL4xAEtooc18DbGAEl9gkJcTIXlkd9iJfOneW41AQhCGGFC0r/Vee/4g/geYJ3tQZCiorCyO1zI/pcgEEWYhk0tMOVOnFL4bZkroQ/cuXsHlRiRjWMtC8ICOaGFAiIu6Jo4KEsLbRteZG4zQmhFRKggbGNm66S0rdSJWZReTo06/iEDcOInru3bvf7AQmdZLHJ6aee+75uzZt0Xu3WiM1bd7f/d1XqxcsYlTBEdLSB3p6damoODRh7aq1Ft/8a8odHYB/mRMw0J7EDweGCXNWD9vkYsY2GYNhbxYNApb6XEmYCbHVvdFnphWG+pPaCFD+ZEhMCHRupCGIP2N6b1miLYBKx40/rAWSRgKXpWXuzRMAwYpjNBmAUJwyO08HD0Q+Z2ZvSFZ2plEG2+0cDDqTkjZ5a17/yGTvsImyvJVrNq5avym7pLi0Yv7kjbG/+sr/V5yfW1FeOj461NrcaLWYj+/SCJVpeBmmXbZi5Ws//emp03ZStH3p33+OueLZ8f06T+wW2vakaURoDGlDmMsy/93d22dZTdO11ujy9CgSOpkN1GvXr2fPeCe7DgABO9o7Gfb6dWvpjrCMWRBmPCCVXYziWZrCLIQnKg4R66QNgz/++KOycFIPmRxuGZhQELsQRuU5hblNaTT3Lc1gewhyK5T/6q/+Sr2rS8D+JXNPKEiKVJzaPTbw6U9+wWU8waoWZ1QEW/VQ9EhEDsuKdACwISSyRmzweuZdX9+2Zk3YIKhcKpZeQSyW1nQADEzIyJXEFtZupo4BMGzZt9y9SSVqePgrX/mKchnHF//s/+7r6VWEBE3NYWMowzNo5ZQS4wJOKNdo0/LjsxBj1RYb0NTjjz/Ox+sbmnjiRz/+MY2V5ctXarGKycj+3d9/9TOf+Yzipicn6mprjdEY5VGECg7zn/zkJ//iL/7ii3/2/0h5+PARjgkrE8I7d+4U8y160IuZl5ZpwYwDdnMKCpuamvWoz5w7T8bszDDJ7wvtym1urCemAVVPkgouLPqHrb4KtSILdgmwLTH1UagnxqQgTxwhQkYYavSzebozLEJl4gaQBfYY6M5fuAAQrLIE7k9x5IKnD+OIRe7h7LObgidVanVxpZGxEGGkd2FJYjoSnRTnLfTcaPMhS3Cn4rIfKbGtRMnWrl5FUpt9McnTXMIDhGmZCLn5BZIhCE/dIeGagAYPjh056q3s27bdY+cQQEhhrYA9XepcGsQ56SATDRgntElMVq0awpKZK5jY+Mm2eQokGQAPUrQ/YQglF34I7rk6RWSek8wVM06Ae4gB/LikZ7TkgrYiOJdOI5q//olPkFqFJQGb9+usz2D8BkpCyz5sEtUpogtcFeQXZmbn6wDwXxJFL6YpzMuirmHMpCYaRXuuZ240WS0G3uhusU+FMpZoFgLwxzlMmAQKYi2XdAMBquTs6ICO1jCPGfISQUEAx8DEeBis9Jzr+dMrmMjrQpm7+VU0Dr01BJ2f7ZzNTFBTGWMAEfWpUAzuMQBkccXpvIp0WJQEOdmZSMniunD2LJyVSArbsVgFYTGvII0TNZQTco2zqzNURiomOyNNIjBFNB10gk5GdugzTE1P6AAsrl3qbBx/0jWXxypSQhkQ0PfcE5DSkUDk3uI3AzrEhANkMOmeqcMTaDDxEJNkgQBkJEM5Xl4hiCwo8I8gQyLL2PiUwScu46JxeV0yogM3wMrunl/gTUZXLJ1GzABUcg8wAYKeKFIGsIISFSkU5rmCpTGk7TfbEvx+oTbb4hbtxZ7uzuKSvCef2JmXF1YfGtW+MzNn2vfu56T7Rq+VnoYtFS8jUphAClJMHH0tfmJwG2/ZmUne5GNqmlkjhOcDEjvpBXCQ4icm3KGAQ+kNhKrBrfD74L13ENF2t8nD0kBFMAhj/05Qml9RdXs29fLV+iNHj9v0OTI2WpifuXRpLaBpJcKnIcmN1aDUYO1gYnvhDGPHYja3hLpKBQ5B6icyQHBCHJW7QqGv0rpv2/2gl8aY3MWzZ5YvrdUYUh1asBihw9K89NDbs2AxktJyonih7Oat2ZvTocdPJeSFjODCGtR/JjoojO9F+9i9ezeGLYCLw1fmW+GGB8zgjfmCV+3LN9wgIjApd2wo7GFfvHTxM8887RUebQHiEijLaDG1h1mZuXA2Ck77apdou4jIqERqMvwmfIBC8FIi4gBUKCX6oD1SXklMZdIjRVOCAtkFCGLKwqIQh21BUSEESMrAqNIVbZHg5EJWXqqRGH3JTMsJXu7BLuolfIbYwQ/Vu0RAEwX1ELPm/G3hQ0UlBGczXEUpZmCTtkivITSKVgorBZ0xeDu5dzy0/fgJa3bDl4BIymY0z2zaxrAa05o3OxTowthJV0+36T8NO1CLg4rAvCisdM1rw4rGsFGgO6zCBBQCtIofD1wMnliFhvaiCIs+MzacQBY3YS/g5Pgyn7gfvmFPm/EbKdFXlrYq0cgL0sZrzRBAjXSWCsCnstSkZDaRo6vHyKiqADKHojggOEdVIJa4Yn4VwFBgAIZpGbOL1rgh8d0rCLeKDmEuI0NzsKy0RI0OMXQYOREUB0NBFhvEVK5AbwE6QJ588gmbgnQDSKQUm2PFVoFF+LPWxSUxU9E98JCWoe1wxh//+CcmvdH0nTyjzR/60FPpmdnOUhQrZ1Pm/u///Q+GsBVkLoh7+vYIFdA7QzWQohuQHNA/a+bBehxdAvMhWuJ+Tdw7QThtNizsCQ+TC1c6YNjwF8UZi0EIVqA2KONvyvPKnxD2Kt7HiImoBB7K7hcpZPVJfnHOT9iQ8IsEspuXACyajCE77EQIC0O5yMT4TX0MzM+ZnZmXOpNhVtUxAdroM7Mzc9JuzZk3MT2nd8h+wzsFxRVlCxdveXBH9+Dg0prFHe3XTS1WV1WOjwx2dbYX5GQ9/ugOOmJjmNSnZYqnzpwh7Yeffrr+6lXLdSiUMTqHylcaBRyTY06w0Zy1+uv0mZOF+QXO/Xz3vT2FxaUaQ4IM96H9jq5uyrVYlQ3EIQ/bDNinU30ESVsRuKq6Ktb99AITBQGEfZIRSyxND5OLkfiB++7T6mUPkjF1nih6sAomx4mYJTPQQmK3Ymkws9SwWM5UnnsJUMOMaIxDc2XiD2v0hMpEFe6sUNrha2h6CG2UZUdZ/PFEXWBlhcRMDhvLlq82lsFfZCHymTMXfPBUFgzghDg8jmFbcUrL0hcW5Im0bJsNk4jjGIaX0pnikhFKMmPQwiP2ntr1pJkf81TB4BN/EZeOHT+CK70gpXA6Ix38QnHQkEsTn/h0oynvNB5rn/BsI9P69XdBdf1dm/7+7/+eFwtB7E3RBlEdLSo8Yt7nL03zGmzC2H3bHsBVaLWMjyuCSYiZFnLv2b3bkLYva09M23Z/s62r2wEJTc3XHbYLRhv3OfVM8tlKU7+am0brcCs6sV7Canl7qMUJQCXGuIoxOgKUhxQkzrAoxkNNQoGHGCYOodSD3iIoGUV4JV67iS0wyxVwi1XVn70QknnO6mzvVhBstbo88S0zdgUWRAguOikd+DToIYv1Z4wtGBY3ZGEVXjmzn+6k97wwPzS5fM5PYkWwAabIJHw+T0qThNCIUVSXqa8vNNcc8hOCV0UFhvX9VTfU6tAIf8pCfaBzT3CGyh3wzAtIoaAf/ehHzE8V8zsvv8ySTajKQgr36mjLVrHE2BAUUWkWpIxBRl8CkwwmSAlBLNlbUJu/wqEsnkigRM8NuxiljvavD8m69DGcssi6bPZAjQ2A4oOf74YzkIXQlastCQtjfEoMUTK5kKVcyHBtfPJf2PI1TxYsMEC6gJjoeCuLvDBhEizfE2iThWqID2qNABKhICWE8akgf4KFRyjF5d5byVymXdEhAqE8x4lkUXa6Rl9xeEQf4C6neptGAwUFEQp9v+713DBAcHEgOpfn6llNLDZJU8qlO3HswoVLmuCKxxWtuezXkpgurLzFg+a/VVLGosJ3W+3BnWsf163wuZWioliWDgBkzCrbAV9aPr/fqobkVFx58emXCMAnFMa84pjuPYmm7i3B+ZcbPLPkaKLEJL57KYFGcMmi2QDEW8/deI4akyAX4rKwNNKxanAZFICtxOjHvHJ5EsMjSCXDBiS9xV7oAIjmdIB1VCKjCvanh/iAZtKu8oWldt+Qmrk1x8H22ic1NUud+qxt4Rt4CxdVlBbnz68IuwIQGewf7uke8HVOI1sNLS2OoME3K8GKsjDnHoL+NBzFiAULYsNCG8gMAPUAnpwuDKi/vZVLfLHjnlcQIGBXVNTb2+MbjTr0Ur777rtxUSyaZaXzrzQ06gxVL1gor73Ih48e8/0Us/9Lap0TE86xUTpuVSfWiJBadBbBHTFJf9oi8LJiVtXeZ1vY3DAiAmVhCsSKBrpFCyJjbKyLkoZbPnj/56z51uRUU/1VtmW82YKfY8eOQJn/K5oI1pqrDqMloakFmJaem2yyD3Md9IQr1Lix6CkeyUsLhq+UZYqAjT7w4P2xFS49vQBNi1lxMHQTta4+IJp9tAj2tPegWb2oetOm8IlBI39FJYWUS8VUECawbAbQ9EhL09KFtvEgCDBZYordFCcWoOAht8eVOKV9qUTP2d+WTZshTOnRCgnFSZimooPuktW3mPQnuTRWTp4+ReMGilDGpFKiLcbEDAMpRiLieIsmB6YOIEgZBVS9RdfFpLrT8xhGpadWtTbRPGTrClV0zI5VWhbEVRgCJQpWBSxfvkyFbVlUXd1yox0aGbiy3zcvL6xh1QBt6+jgenCgMspyLprhPXZodBAUACEsfvypIB8Y5iNkBwgGBB3qc3icslCQGE1imoz2xFsMnzp1Uhp6hD//zfN1+opqW1kMRQi7xAkRJ+kMi7PQ6BsMW2mhBHzzFQHz9MyC3PBdG7hxacERqyInqMGCuKUUdif7E6RgNOmkxsEtgrLQJjT8qSyw45AJ0Yj44i271QEgC2HZm0Jh6626RP+WheMcHXnR19Z57713dj3x2MaNG7gPstor1nXIqNpbt35t1AgiBtLYNkGscKi/2uQDEQYyGKdPVArBG+/aPKLhOTlpr17Z/Mq3337X6dTmG03IWAE4MjikZU1SihYZLPsJPYt54atbhgNMDugIJIvynZBpTN/e3vBZYKvzSUEiv5za5UY+oZJEOISMPcC0L37zDnYrjajiFbeVxp+hnGRQRzIoeeX/7SuyfsefweowkLiwLGEdUrhMW6dmpf+iVvB4ZDhsidOHmbk9fXtmwjyAMVeQavxNzdyZnknx38iYQbup27NpqdkF9z/5XHn14tycLJ8w/1//47+3t7XembmZnZmxZGG1+WumePL4Ub8QBq9y799+v87ltnvvZSQMnilCbN++vczSTOl9996v/0Wb1PfQg9vf//nu+oZG4ZHIeNCLYMCO0RRAupLFdaoTprtn317CPvH4Ls36qsoKSocMP6JKdsKwVcPoc0ZRQtPq8OEzv/3bn+LvaC5etMAINNNKPCjgKQ1cpMeD9hlToXq+LA2GG+sbXn75ZSfeqKr5iLgKUmFWW5+/iGnsTYTHoVwwD2aT7C9i6qRAwXk+WDKg7pdvSiBoM+zoIMMj4ygrVFgQxj3UWtWBj2vbFMGnWDK5yIjn9evCroZoDER2FjRgmUHN4jDWKzKTXYcOz8IaQ2huatA04HqSkRREVojpdBH89OmTQrdCzQr7kyAsYenSsOBKF0WaXU8+xUm9Il1ndw9OnFfjk4eaOyFWW5GYn8uqNIC5DA5ffPHXhH09hD/90z91+J4YMjw8AnbYgkgAaWm57uwObli7dLkPAlgCZOGCDsDBQ0fMF6HvnGihQw2urTa/LHwf1CpfvgwTPSgeqmjMCJ6aAXwEJqBwg0mwkEW9qTpwrzjS0Tg9xtY/iVim9PQiY6wruYo6V3G0pv8uo2CCEx1w9wzDrxkANyEWzYaxEl8j0UhSqFeKUJALemxGce7BCA2/CjLaLY17prVsaS0LQcqGe1uH3VdVhEiFAffoI+LXd2Ms/mEDCDY2NTgZT+sOgGS3psT9L7jKzhbfNIdlUUH7jVCwGaonIMrAN2jCFOmRjeHHJmBlcStVz3//7//djRl+ssjFiqII0JCXtezYsWMo+eYXddMFeNkweNkqnVokphTlQjJWMXJlZeeqI6yh4NQIkmjZilUS5OTlsweDAuKwwz3dgyjpZ5Xrd2GJ5UNJKPPKvbcu5bJ52XVdWLuZNIMAimbGkrEHCsUSxmCiXDaJiCwuN3RamKwcQYc4hAUIhsUlPsgw0KREUsgOHHSM0eDBJQ2u2BUXBqz0kvlTuZIhqNKkbktAlSWxnQBAxjPmZVfpMFSGZJWoCymAsOGc7HxEPOGShqrxjL4shn9UW2SRt7tLl68PTcfVGAdSLtZUCKqXRC+Z3NDAJa0JJjgvCnVsGJF0XW1otDwIwfingqKOlK4s6ckSEZbAWwig4/KnapdhwwFN98rynGaxhFt/usEkxGjWhUPE2YxXdISUXN4KIC7E4WPONsIIdhfZFaQIBUlDdn8ihTKeQZry5c8Hc5SHp0V/gKlEuIcmzjyHPjfzcHR8LCM9x6qV3Bzd7lzjVIi2XG+2cGbZ0kUzt6esrYKqg+8skerp7ree2nYehzPiQ5FKIQM6GEKWQZCHYzBfrDNWw7eFxQWmrSsSsdkTNkygcwY3ZPDtSZhGQM278AYfGFK7MxdAu9QQoNF0WFLnk0kjOiqm1lVjZkpMtppmtB1QzU4iTRCcoNbY0CD6g0Ys05xl4hDwp+lCSzwtG9diAyWsnX7N4kkRoEjW3sQ2Op0JFtbbmTQA4tVLlzmMb9Tr+RDcxLHOSfXCMM1k+4iUiNcsXoRniw4c62ckEVmYuGiF7tGnJFFYbUrf9KLSZQr6AE3XwiFWwjHj9orIGtPsmLIwyRp4nVjmibfY6O/q1zhYv3G9ys7bxsb6iqr5GOAtSlHNMCPahL8NQwKNA9kkwxsjgzPMyUhAQS1gkmwDgo+Go3rUQ7WdcgVxLMFEYvUiOiSSC3uEis8V4a0zT3EOQ10a9ieZtyhHj8I8ReOfbWDeKbTlFZUS44dmBU3jHMr64IMPKE6Il4ZlSo8ObolsAhMpUVjpDFtZxBdDBXS1NUujZQkENeoIbTzT6hNhKXBhsQGzYgHLGjaRRbuZncpuDRKjXbVmjQ6Srml+bi55FQMfTCICBEVrByjIiJd7XLFYN5Riopd10SnxgalWsIQUbwyDEVoCpBnkbeKTt9U3GzdsWrt6jW2X5n8UxBr5jCqNLJA0I6E4ef3peP6e7t6MNF3/sCgOYYbhOAukNIsl8+fBgweUQkBVi5mH8F2SEacf5NML12Zsqn/gMDOeyB6oXnps45YioLq4JhiePxWBTy4JDWBKqdXioVJI6kYAMn/a2HBVsocfDl96AjhANHf+BW0N+PCpEGhLDCVWffLEmYMHD6uSA24OYM7OMTzmkPKcXAdTVJvB/trX/snGAPf6Y4bb+3v6cY5brRFL/I3MOR9TwA8jr+E80NTkkP5ZfQCJnRFkpMeIv6OBsA2ZAE4y6q+q8SRkTMZL8G82BmVRxRPM+IWSgiTzJ5tP0ocmi/KiCvREjB2GKYbksrnDKwlCmrBcyGaP0E8wF4EC9bGoyekwGxu+TXBr6vbMVOrcWd0DZ0o4J9pZRTfvpJoKmJie9VG+8clb43fS5hYteOyZFwryQ5NobGTYquW21pbVK5c7q4T49Zcvb7xr/dnTJ2ltZGjQqrDs3Pw169aWlZTy6+iGP/je9xgAJb788mfe/tnbm7ds4nH6usODQxOTU9aCq/MolDETkH59y5wGm65d49E8QgOitDzsoWyoD80mHzygIDBKKRxxRshQnyjEYlFmD3qGHFkaNA13MB7M8HFv+QvpvQWLAKIhhXNOF6sD9I3RwtArdvIHf/AHQh8fFAmht2/fPjapIEYrjSyikP4JZ5TAPCFlCdJMnSD8URGI8FPBUH2MT6Xv3nOQHhQkFvEvtQ/VyMjF8CkjWURNH3a79571DGDd2tUyIuJeUEQTw5VV8wnuofpOJxk4RPbnGZ/LSL6GjhTZuSmfIrhPp/nlVpYNCGU6Wko0dcxHxDFFw8dD41ZkQUoRtjN6pU55/IknmJOQJYzwa+jZaYMZez+YaqwgnnnmGeOUZLQ6AA6cDrBudADKSkvPnTuzfMXqQ0ePNNRfW7FmrZP6nU1316bNMGxraRWLero6kTWUBhbHvwKftchORuPNysI8zOFAcewQjKDDFYnoDoDsR+leudf1UgXTi03YBBGIEJc3upK4KYwLsKH6m2ewL1yJVcA+nL+EgkUXSqRr+x8UxLfVFAwA+KxOetEVBfxToj8lRlxGLF28eB5WjFCQQVacTPbbhCNBw6BtRibpbBHFHiO/ePkSkfUtWQjihw4cZKLM/u67N1u5i1PZEZHPJ96ZN9vYunnLs88+88Mf/jBMC4+HzqTah9WZbyfmr/3ar5GX5WvMMC3RG4Y/+9nP1DtWouIBJpAEGsNG2S8zpgIpo/kNhs8j5gGWCgAli7Y42SnCQwjHK7HGERbiiHPPhUP1oJVmOl0WsEDJYYMynj1zTkr3Mbbn5uZP3dRYuqFo9okUxLwCMsPDWGxX6ADjB0SJ+4TOjGTSk9cveNFkCZAneFQfXdACOuShaw8JBQo1CISjdsDiomVAucGDCsgePH9K4xfaOEcEfer4ZRo3mERT6dXloUcEdscrS4xIXV1tEkYyFeeTSkQgy8mTxwGr4Zc6N5zB6LBgvSzPlWjcREYEoZqdNL7BiHkME8d6M2JmZ+fgwQwA2Y09KcVkAIL2FlOTIRsNfujJ6LODC6odmBYWjdOXXxepgUBSnCtRdsX5k1CQDOUm/RkSeRul9lBivxFbyMtCFmlkkRGGmHRxHOV65VdBwcKTLebyuvSeIIk36f0CFlmuIZlfMmLGKyAThB+FDoAiOUyUR0lUKzWw/FK2J3p+8sgZOgAZWdk5BXdup3R2mBINjYOOdh1uywiNbFndepM/5GSqS9Ia6putt/WtLGspEKc8rKAJLMbKB3CvoebSDvDWc6Hq1JmTWr9G+HkOIQGk/gYB7vHgOwC/tA8nBa1avry/r2d4oJ8IfJg7oW9hkpUS1hTizQJa+sgvLBAOjp88vXbd6qsNVy10UJa3CWIZLE4IFg5CrzcvXwWjQy+am7gP5eorzg2zljSxrG4FQaR0kQUynIReYYWg6KAbOC81rbujkwsxuLs230U6M+9wH5u4QaPW+3puESIp/DkyPLpq5Qb9QCpEgbbcMA7ZVXvMmvh4IN0//uM//pt/82+ChU1O6E6wD6+0+VAjBawcyUJxYgdmiKxqQcf9qz941cOnnnnqzJnT5pcvXbrg25NMhBc9/PDDJrAA29baCVu7XUmnkpMdTRasfvWWbShLAu1XsQbI/uRCxBfo33/3PYKAC54iiHtQK5F1+uUzeACvV/7EZ0FhPsoekgV0muOCuCcI0p1SGAZqtIAO+q1t7VQJGe6tTuIATl2AquoQRNHl2AkmoaT0pPMfZvdQAzuChDW6z4aZWWwHeM5awojd7B0tRSIriMicR6GO/cIAGaWvqAhupusoO4dht5oaKgl6Jz5WsU1lUgJfQZgEkSciFDDp1HGK/pQMmJRFKcbj4UC5QDAM7ZUBM6gKjCLoremZlctXbNh4F2qyYFh0hK3iyOJTx0DDrXvHNYZl2X3DHR1dOl0oa3Db7ulwRiOF2HDeKA6FVihZNqBESzimxqfqjfo2NupKMWPgA41EliZjnrG5oA0H0QEOhqdhxdoxD2eXvKDm5hIwVF6DN80R8mpsW1RgiN3wjFYIrCAmo5oFcQD2D/RhnnKhSoSszOyf/vRNB3GwZ6VcvHTJDkgNOINYYXtseubo+MQ/fu2bQ8MjGzdudmCfVs7w4LDwpmVOv9bjKtGov8Gj9LSw4igjbDfysVrr78NcfKaP7ZpvvR3iEvac+koQyVwqSQhLFv5IZmyN1kujye+5vPB0w0+hwTYEqyR96B5EiDDAYC06YkIo0IvzRiX2NhAMXIXFPrASwaJfqwscaSrbrekJ50h6abJWjwXPDrfja9Zqi5lTN+84N8gE5tBkylh6cWXtSvCyJQnYw+uv/cSfb/70tWef/nBD/RU1sCGYzvbW+WWlDr60AtgHv61CIYs+M+1ovjF4e4L5i/jJUzTRyGKowqYLx9ttSfas83r2EJwiJbStwURx0OII9Y0NfH/jXZt0Gyrml6NGQHrUA2RRmtpaJ+wfb5ToYhhISSBAlRYX8nEWAgeQSkbXrI7ZM0vmwQyA5rn6RTvyrTffYBvaZHyE+eEWY9TBoahAEDZPy7uJ4Dkc2BW52D9uOdQjjzxCZXo+ai44o29jEsoeUoe6s77hGjtkxtpk0nMQpo4+NjAmUmESYwqKw7rOoJcRS0zFcxKZ+qcI6enUCjQbdnEiPU5wmJsZzh3iztLoWiqR4N4yFSKzjRc+8jwPoppt27ZxcIUS/zd+4zfQcpIPr8EtHjiFZUi+Tw89KjCro/njk4ha/LoTJkYMoLz++hvvvffe7/3e76HQ3xcWrDc2NllhgnODEX4XLlzQHjo2WadOn2vv6rQxb+mKlb29ZjH7nVCHN6feQamro13e7Mx0IjgCBTjYUyM/8cQTeinULb4RjRcQjV0xBnklZgakE1j8CRx610nzBKQGUGBOZHbrRimkwJUZcCkpiLVon8WuHVIqQcmARhbjFDQi1Le0CV9zLPKDNrsCEcuhC9aLIA4Bix/VB948pFA4A1YyrKK2YuUyh4fygqVLl6Dfcu26sjZv2oggVhmJD2lDmGEbiHG856c+9Qni9/Z1CxpEJogpXJ5CUia9ceNdjgahPr0+9saQCAVwDLABtZJqDmM41wF46aWXsIoNfGKMJXvOMDDgTzaMQjQJmsI/arjSNpTen4w/7iT0/NOf/jSuiMP8dMgxxqGwJKVxapcZbO7GExWxfOVq6vjWd76NN4v+pXFOAk786cs2WqwGRhmYCx04o0MXQMA5g/SQIFSsyvMn+NU+0mgC0S/+8exP99IAkILIDluKcG8IEwU841Zir7DnV40poyKYN9lR8FC9E0YURN7kIr7LnzwOZSnRoXQWFZ9Q609//BMGCUP8+/aCNox+Hcp+lWiASZfJJyk8sRDUyH1mVn5nZ3fr9Wu4VaKPo1qBb/0eTSldk5wgEVsQuUwlG8Px6sSJk3n5BQC3R4Agpolg60tByu3p7wt5k3X/ZeXzYehP2pQdz0RjDzxdSn8SHzN+/ekCESlckpFUMnpBIWJFfM/96Tlx3KAgGUgloFY4Ub1fmEAGQWi4UaLSFWQmTVmeyIuyC0F/uhhVJIWCt5LRWsqfvPQUaOSUlK3Ed8hF6CNdxRvs8YT1IGumfnJiJjenUDBH985tu9SzsrPM5eU2X2vE0M3J28bgOzt6pqZvB47mBhUqAmQRIHzghpCeC+hmmjyHr7EGn7YWh+2QJyRDIaEzNODiLQbsAVCimCKvsbqSwsKSgnxbvH0uWxrfBJFscGSUfXR1doNCYoFD4vz8sD39+KkTZ86d1fWTWOyAAjuI1oemWkTFyZ9Bqeawq5gTLqmtoTNgufccq1ozsTaiIYoEIiaJIy7QjqMI7UMQLEA3MjZCZDOwXKi+8apokpOfI+6UlBZjDNqNDU0DvUM2mGIGNTwIE0xfcXhTN+iIY5VSdADUiL/ykY8YIlU9s4bXX3+d2akCmbWUqCGiVtPy8xxL0BNqr5y/gtTkzcn588vVVbBtaKqX0itErLQgqRkAFeq2bffjTTceDlyCRojgIho1AYEsBPEcFB6GujAz0xiS6KkhiGeMGReRxSAWCugTGXtEED4YgLImpyZWrFjGlBkVst7yQDaDbWRpir06dIg7qUKYt0OfbfBXFpzx4FcVCIpnn32WrpFFSgsAKQ+1G+x0hKQV+QQUv8gCVfYAIsrySiWk8yBIEOSZZ57WDoM5EVDQEBcHV69aqzUMNIWW+q51ebnYGqUjiOEET9D0xJ94IAgelB6dTdRWnTMARciowRhBIyZh+ZEVI0oRENmAg448pyxYmbtwCpAdhtqpVl3TrOeKOHvuHFnwQ2tFyVexKYI4Vq+afBweHGdFKKelhwllWpXLQiDjT44tU7X42BktyPKtb33rySefLC0qYRhqRFC7gSfxYc7dtH7wzHj8EpBEVOZLjRoHXM+v1oDnGFaQNOIG91GXw1leQ5hWzXZ3dvmWEGvUG/nYxz7m2FkpMa/9RFnYwJ49djSi7teB+e53v69nBCJlsUyTslxs2cpVjhqzRzArJ//73/vh5SsNjrkwqmKdg0aFVotAT5U23epsWMGMoHsD/iZrTQFbfh+WBpnanjfXjLKTeDTFxBz9S5jbtoQH3QRa0ypjBoyZi6mK4ABwZvbLS3o8u1DDIXV7RRzoySJeUZayJAhZkgU/UqKDkSRxmGk1QyCvNO4LtWDGxzTKDRX4iJiWg25MUG5ujvPTQ3GOd01Nd6anmNYzOt05MS+ntHrl6jVMurS8Ap0f/PBHlPXsM08z18LcLCeEZqfPGx7s/8K//lxbR7u+k5XTjgE14qitoIH75BNPMA8sQcApQDF6sHbjmsdOHDddsHTZMglYIC1AxphW8PGRESkNGSKysCbs/3bwMVXWLnEaZhXj53QkFhK1DrU8OC9D4mIcXwglCOMXB/JzszXrLcXRqlAK79B4Ujozk4BRwUR2kYFbaXcaq9PDZ3u0w4kEQ4yxUnoRWKyy82s3lFLYJKEwwCCxZG4EHQ+5ye/+7u9++ctfZpAgUqgWoXiCQzynzg2bCoQpHoQBtQPwGYABEaSim6MgkpAuaDl0CcOoJB8Egt3k0vvTCkFezB1Qs9c5Ch7onD4nGEbpSISCwWgFAV9oSqqPauMR0i9cVC3OYF5/2C9zsumIU4j54vDpk2e0v40IwVx4XLt+nRmb8cmx73zvu3baEF8QcxafPQC8GEQWvpH0vffeJzILZHv6QlUO2Q1drKl//tZ3nZ2/7d4Hb0xO6QB09/RZIsIHY33a1FBvZHp0eJBedAAgLLsiKBFoeCMIqCmRFNQtGYlohHQQoCNPqMC4OPukX6iSgjpwIj3L95xC5bItyUIyZNmw+SWKUJlCw7oUv0wOWXsApBRVtM7pQjvOhQHFURDoUcOJvEJKLBrD4jCymzdvVFz/QC/mlyyq8StcWDwiGb34jh4lau9GlHDuS3GCv64s/n/7t3/bkmaLhehCiQZNrA7Q0MWqou/etFkRDEkPUOiTRugTEsVAGmQVgBIYMYw3WmMMKD/y8E5oeM65GBitQcxbvTsIu6dx0ZJ1IYhbA/JSsj27qiSOVTl7FsOJABYpdSp4Fr3Dyv4ogdHAvwkKJ0FxnOttrbqFjvyHA+dy+TQezomgIKcGMypg8jhBG0v4hKSbaJb8VKFcGM/0bsJaieAFOw2SjryEZZMYpgivUBYxMI/DiaSzJzGCXoFRoViV0tuou/hQubQpOCuI6ZLFhVuJEQQaGJXIfjg1wRHE8NhQ4AF0Ab0SW6zzks+R+YpwDkg1/SQ24Ymy6s+AfX3DdbPdDINVK90CbFu9XfYD4J9mpXe2AKwkALtAIxT4k+wONCSm8TX8mCzSUtVhZHI+ncY4SUF6S+LkIhoRIgUh1IV5CRThlT9RU5CH5AIFNXlCXthG2YUmxuCtZHDzEJ4yAlYMx7+8nkey2HNRot9YtPRuFGeqPAY0paMAB7kUJLG3BHGDiMTeUkHKi4+sYr5UzqYVgzmcgVVqhPzKzE/4jAw2JqiV9x84MnPLkSPLr15pxJ9tYU4SK8izPdsm4TAk0NXRXVI83+nyjudwDKjtRybA6UmvJtkgaGLUDLK2lBPQfKA32ziHBTNObrJoSoyzRNgkCjW4gLvFouwtlmXnCVi+54dJDwmm4a4ezpibWlpS5KNCdmIomvVTkmGGK1eu2men6s3LywUBUSF77uIFH86wGokbC5oIaofNT9pzopWAbuqcOXJsDlNeUsrI8guCoYtNnkBJMjuVjdOwSA4PTUAjDlITsvQxOjDCYpRo4N+WX08IqHlt5T1sbcblZkKeaf/HHntsaHC4vaUTFMShG+ZINP6vUlEoM/WQUMyF6RvKMqj4yU/+hlFSZJmFulliAZdRis6y45B7iA5MB2PotDa1+jXz4FNO6lcfjbozJ5zsK0Aje6W+gWZf+8kbBME/XzVc5JLFxfppn9t4y7jJSy4uCjQPYwtg9cpVWCWRlM49EFYoSOsTh0IJ5hGBNgDVuEPDg0B2cpTESme1ISjn5nooAToEoWg+r2rEre/3LVu+wkCtpoDAjbIsYlO0RmPY8MEzlRFWvYKrBQuqYIWgmKg6ESs1MlwQFnaJAGEzCQjSMgN46bOfsW1hzu05JnnrrzZiVemCMvMgqZlYkGKJz2jqEdnKWPvMIMBNFM1HYCI2MRVs4NCFPZMtSsftvgMHCBV1ijI+bVOnOGrC1dGjR8CimY4xbFitbAbAIPrVhnrEqUCzz5Jb9NkbyibTZKQ7OrIJ2Dj46PCkHfk6DwptbWvBDA0ySOzpBjznU193bsnOx7EnbKneODJ8pMGYmg+fn/3sZ6XBGx9hn4QEl1oBVu+8/Zbhxqgjf4ICpLiVnkkwDFLoU6l+FG0s0CnaOgCgpl8wUhCXxwqNx83BgsngUNgpRJBLFy9/73s/4lke0p3t6T7Bxtl9OzOewOCAtR+/8vqZsxdWrVrDTQwNCrOOTdLxUrQxVieYBK+5E1b6iyrGa8N4R0pokWv0Ow4oPXXWJIB71oUHK3/Cc9fcsBNLds8lli2u2vGnx8T/5W9IlkykeuWKr2Do0quxlkcHwH1IlOwicE9qm5KlNMXkn8WEnsjrFDWwhEMjcHz71uyMB6FbohdquCEMxmWEhbm2EkisnTM0Nds7lTY2k2637orVq9dv2JydX+DjZj5ZRQI8b9m4/ptf/6ehvp7f/uxnfCVNFDVcaiKjt7vvjTfCUDqT25LsD9YaZtLnz55jsZHDvh7DwCWr1qw0fMdPAwJJtBG0Eb989Soj7+rqoW4dAE8oi8348J+KigHwIDQVwa4YJzG1OJkHbYoGxBRkJDOuLA54yAItUWDVsodInpxeT0yWIGiwJbnU97/5qU+yc0YYn2PV0CzFMULuQNfCgqqKQ3FJz1mvkQLmJxmPlsaBOTqfWNXLZYFockOjM9Foc/OKjB1ot4kSfBYpnMsIHH1wc/Uip4csFiC+VH2tqdmsKftk5z6tgJowLvauW7eWLMQ0FabBwaEAq8La88EeA6dkxACL4KrHjh1hYFgVkZyQK1BHqI8cPQQTGCLCv9i/AUs0ganlt3njFskOHjyMH+BoGbhhZWaATSargH7wgx84wN6aE3wDgenpAh09eoxQhEUn6WyEr+Xwu8am63ffe095WdWb77zLhNesXe9gDA7ber1FJHEcOgNgyvL2DoQldv50LxqAjiJoQawQosErHoqfEvgTz5RLX+og1RMNwuGBBx6QPrZsNFslEw08ISM+bSX0q2qjejDDUwAEr0UsIIr2oN1GO3S9YFHYwheXEOOTfbIcRUMMOAIIstQXEdAwVbqBC+jpp7H86dDkm3RYFuuVBrB3bVgvPWvBEgU98shDbFJZTP3XP/ExIZSw1g0uWVLj+aiBxeER4Uh9ShynAjLpBQurGLlqi7D4ARGzZxLY0zZQKGOGFTT0IQV2OlWQZFxAdjzjX+ec6iUgCCOhCBwCiqIzc3IkE1FdXinL9Bp1A0pebLC9aJ/oDA4MO4UGcaJhxsmHKJ86a7pjaf9AmHNAljFY6BsNWNPIsQpIsSVoeysjasyVW1EKI/eWU0sAMapRp0nGd9gDBpTFmPFJO3RBC14pmg0wGwks44Q5QCRDRPoYcPxK45UsilZKlM53AEhKFq4KQ9YFrkiTMUjpT7moBk1A1S6sieHa8E+8MfbPSCyChkxnVwecgebEXkUcP37SAnR9S2wojnRBlpJweodVJtdbQpub+NZYY8/V3Gwwqg0bql39c8s32arxR/z4Sjr/dWoFMZuvtwpfdoGhqXbGpIeykxf96D40iwHCilRE4Eds1UOcgAtQ7BDD5EJEXtp3KRo1r9CRRenEgTNJpYE5zqVB1isZpVScX0WgjAG9OzYcQYabt0h5K7F7v14hgiwlgj3lUx8Ku845MOo4U7woBhTvpPbQE3bsXpF6jtzMAJydRVOTt641tw0MDKqvamqqJ8dH78xO6ZNpQqmITYarl82h6JhYVJU0Lm1usFrGEjFTSFb1WclXojtx/XoXxu69d+1TTz2taZiTF451s8xWCGOCmkpd7R0E4Id+LdHBJO4xpr4ik09D6wDYJUj+zp5ex0Ex2cKSYq7I+qww404c0kkIlsnXNzY6XjDOUjG1+vpm365evmwZB/uFyHdCxe+Voh0/6l533zlrYgqUtUE5zI9+9AP9FcvBKQwn3AbuvmzqiBXQz94Mu0+olhf5POHKlcu1hjW89h3YKzxpoRw8uB/0qhzm6KiHm5OiXjjxir6jhtxgwNx6NHqCW8+j2nj11Vft0nryyaesjOQtbELE0RoG1K5du/iAboaoJDuF4k0dxuZ2PLjDkqHaZbXOhKBKMwBr1oUpQl4n5Zp163nL6VPnENG09fDChSbHcG3dGtZvsF2iSYYUeyARCmQUTeTyJzHjwamiHucUSckFIjYHf8lkJxSbgQAi9Q1XTbNqo0eTlQDCmIkhGA/oq8jVduKjaqb5eotA5kQ8zGhwcBuU0TRFQKcsgaPiJD7ELUDMr5Jd1MMnHqDkLdOlJp7jFUwUp2biw9DTpO7u7f6NT/6Gttp1xWm1j95ggdJzV2fJe4KO0o3xGgpDjXYkALIS0YE8a+Q1wq4gxZDMUUimNayNbtgaM2BBx3ylxM6qolnf9fQZbEqJvRdcGajTtl25fJXYZLzBeIaGOJOzRRHbWhLsv6O7C+ZJgFtoYnd4aGTAJ33GJ7AE9mvXmhkSwVELfN4IR7Led9+9kJcFevrP1mQzPAOxslgsRK3utbc+97nPMWYPCcuK0KE4YcEm4K9+9augY71aWhLQDpPADBDUo4iT2kVfeHj+2WdUbGKWou06QF+QNUQa446TmildvaJyQkQ1+d57u33ezCoa5jQ0MvgrH3kepDq6eQWFthhl5xW+8dO39u47tLR2uehncbAGkIz2AsUxfuv5temFQQdwaR6pvMOCHJ8FM8KfYifunewMYwTa92Egn8rCqZ2+vau/nRIijGF41IyDEid8kytZT8kmJYiXLC738CSCCyys1EP3uhFWF+GEKcqlA+CtxG6dTYSmAkPtnhoaCrI4FUAc96kTuwGMqekAyGhFsn2qqEuTkxn2HwviKEg/OTuvdcBSoQwne1QvWvzoEx/OKiiqqFpgXdw7739QWV528cL54sL8RdUVK+rqahZUGHRQxKUrlxrrGxFTAQgjb7/5s9/6rd86e9YBjBe6OjoZrWEXslsPbd+LHUF2uvuTHnliCK13Zml2YU2N1obZHa0fMy+slLExrYL8PNOMzMATv8zyrbfekt1DRkI6OGseqTJRkx6sbN6fjNnbCF2AItnDw2F5h0Yk+wTU8hV11pLyOxbIcmSUi+8YezOKz3I03FFgluyTQymXdWnug50vC5X4YXsKQoRBEkdIe+GF59UCnE5BK1auNVLAAhEkMhHQxA/mWQLiLFm8QgcI3T2dxo/tLzSaKIJRKCbNPeNWFaB0usKkjJyrs6v97bfezc/JNzVlQF2MYjK8lT1IubQufHOGvyhCVx8/YqYmhZYKCvqBxFm1Mmw4fv2110C3ZfNWEr395tuihOxxitJ09MIlix1VTt6kB1WilU9GgviKtjh/7tzVl1/+DfiTbvfu3Qx5xyOP2ITW3tEdvqR7c7ajp5dbWPplqzdJHaohnN5z9xZZ7AFg0uosvkkcz1FmA0wR2pjk14BSE5EixhOAcHMY6mtBhg0QXDAhsjSk4zUULTGlwBOw5jOREs9RtrhClON0pNZCQIcW8NDe1glSQlm8zh18CRhoMRmW8CAEwcQ9JtmheM42VBli1JVLFwzsMnKkfHAQZacAw9bggdEQqg8a8T2O2xYprOQRHaampyc+//nPS//z997XAiG7elDHaWRk+Hde/qzhDPQxbPKWLObNIKB0spBRSKca+3qNWEFJaAU7S8OAiSxcTTvnIwFBXpRZOzpiLMeEGGw9pAj8sGRpHKxhbp8BI6JCUfUrK9BJBtqViBmdRn/CITcnf+TGWG9PvwkNzu4hqB959FEuaSFLqAKcFHHjRvXCBUZzDErIa/Saa7jQlxiqsOVlSlHLKJdlIkWzErDDoqKwWBpvnlArVmXh10p3T2S/ntOaBErsTiycOO5DPEvWMEtAEQqShrze0gj1eehUA1qja3rU6FJQqDiSZUWKkJ1VSKxQ3Epp8Ym3MjIZBDEgUHiSNCnDLmGzwR5G0+3r7Z9fuWBu8sUq1puZPk/lQi6x10kbCFbML4MtOur3KC9Iwa7aZYE9fd3KRR8b6h3nJFnRTIRLV+ptETa8rNzB4TCYxXjIK/SRlMW60NQSkBg+3rJY92RBEKrYoxd8QkNLg0cgQgVgjHqkSi0c+kIKDl4hIpdLKcqVQBbyxqKVTnd+TXd4qxTlutxLxk2iTiVww/VI5yEzSPmPf/AxbOFbHuhofsnjCRtlEAoGDdax67rHXGrr9YzMHE3/qcnbNYuWBgknJ6uqyq81W1bR8cSux9rb2wb6zFJ1pqak9/YNZOSFHrzp7JFRx3eE9rSFvEYlw2DZnNv2UwhqVlYVFuXbYutDS0YzdHkXVFdDkHhYrL98xTgl9VCV8WbmSCUkMTtij/DkDV8bqXeWgrbRr/7ax2x1MmllJBZSXLSyqoLAZvKmb05avedwvqv1jXwy1i5cl0dpGqjkhAOyJM2G0HOliZ7OsF1VdFAZeKtxw/HwIHxz0cce2wk0FCwvFsoFd9kH+vrTUjLYN7LQ23fwgF+NVNREbQ+thhJcRFs60K2SZf0a46ypuIU5XaJPtTDnDJr1eia6QJE+ZsLq/64ea3z1srQvjYr95//8n2Ux6CJqR2VriTojQomJz8/98BMfZkYXLl+w9Q39MBl6+yau2ByE9+zbzw3WrtnA2pYsWYqrc+fOGEkSr7FBEdp8bhTB4bgokVktVkU6oIHRmKInEjBTVu6eUO7FIJanCHGZHj1koCmpc65evsTBGJv6gD+rM9woEQP4JzKNi8u44hu9/QP2ufoi30c+8hF6ZI2KJhqvkEatg44QTGRRg2EAiu+LF8wDw6DDj9jtCQ6lxAOoCeJPN0aajdD86MevDA0Majjee8997OTU8VPGzuMMlQ5ATEkERoOB4OtJW0H1rJlCUlC4UBa8dBSxzVMwqSK89z6tFvtQSrFBoR7KVRS2uS8mMjNbu3ZNrEgSb524fPHinDspdqL7dAv2tDkAXkxbJSWUSDrn4tMRKEQBX3JKm5c+OjphBoDJ4YTruWASoE4ueuTULM04pYK0UXIytI1CRwtlHOLBRIrhH5yrvMHOzKzCV6N4guaWzZuYCotik8giRUFRg0ogKRBii0GjynY3Xz5GULSV2DgcKfiOat48GI1oMPnFFQSw+oMf/MiOnapKC8NEJDuqRj/68Y8yFQPj8ysqLe3JyS/at/fgT994u2ZRrWU1goY+lb0Nk+MT+FcEPZuZ0aZ3QqjQH84FUvPZCpwYScqcmcw0G2lD9aBbpWg2phPgtBYd0WCWyUIde5PlsgAHTTfSEM29CwIuN/IqzuWeR7B8yYI4YcloEEpGewDiFdLrjYRPzIRxF0uEZJSAXOKJMQ6Nb9l1GBREX8nXS6fD03A8BYphxsAre4IHxlNGp1OGb4xn5hbUrlhz19b7xiZvbtxyz+tv/oyCLHxasXypWdD55SVLFi5oamr42TtvQNJCMnZLU45s2fnwI7R5+PBRyqpZGBZzi5p4u2v9BnMqN2f8N8PAoMG5cGv1EWe0d0XLWLOfrp2sgpniomCH88vDHJq6jXMxHvZMWM85lydcQ32mDcEj2Lz2vaiLsqJJxOqwhG3mQWrxkM0gIlJJT2Viqa6doyCEU8yEkYvaWm1cNs+7VQEuA67snwrUozxO98C9gnQS0DECauUMgxQfdAwUoQmFGlO3ABIPu/ccwIwuhGAlbpA3tsUhjzFckVdZUHLl5TvcIvQo9KWFFImFbl/vNu4uahHWl/gQlyV0KjrbHn9sV8Y8beIqQwAuGxql4YBMaP2GtTwLP+LhiRPHIGzBCX4Mz+NQcwBBjX7Pv/mNbwCqZtES/Jgz0qsRB3jf5k2bfPbe6lgfstD9INH27Q8DGc+s8dvf+i5AXnrpM9/+9reR4rPk+q3f+s1NGzf6Kl9La4eFNL4dpwPAuBy2Ozo2LpnhGzyYAQBpdeV8tb8hKrGCucI/hhr3EIgzFVSsAU1eJcIH55AHCz3S+0c/+lGYew5M/mzkC1nB1ity/SJjsrGQOVGlJUDCIPrktdqT2bMl6X0IjGYZFft01dQuER7Vv1IKUOyERTEk/FMlC5Ry585QHZO0q6PDQkRpxFuL+2RhUWS8956tzAkshJJKxapSUI9XLqhkUajt3v3B8qWhphCXHPXwzIef1hnUKmRLnEVeIjAM373xRLWFZ2xgj4kiy/B4mQoCOACkFC0oEds310jKeIgMJUpBTdcoQqSyUHMRLbZ9wfVP3/ymlKBQvXIKemfVEjBXluZPFogyrwmstnacPntOs4qY5pwlMEqomgd1TnKYjN2hUuYVhJlqfSgw2oMkMrjBEhW7R5N+SYQ94NMsudiSPxH0YU+68NATv+TFv6pEXhT86cZz4EeDyf2XEz9JIVBEZfEC2WWkCBeW3NMdEZIj0EI/gdnENFhlPFyGImQHBdld3ko2MToi6srukkbK6AIqAmQljiZHywqtXrhIk92kBx3RV+1ip4SHJjW0y0tLIG8zFjHBKz1dsOec7AKCaI6x6uLSIgjACj46UVpuRhM0TAzqWUpjnso6yZKSQuUqi7yKwBIm/Yk9sIDI24gek/AQt9KQ0XPWwjX84tlz2RUqMViwBBBYibRAhoNcDB4zERNKoSY8o6NoubxSBD+CCYIeKp0KPETW5U9EwA5JDIhL7DPlz37nWQbKvcUmiTDBjtlcNG6EXOxbHkMO99y3zclOwkdZaVVOdiGeMzOyl9XVmcM8fuzA9euNL33mN9nT++++19NjgniLQ2obW9r14A2WqUwZtnlm/CSRMdvw2OLFS3bseETEtEDFTDj1mOYRKB3NiUWG7iotCr3PQ4cO8UDjMUARBbhZdVWV01B9yqG/x9mULar92+HcHucihtFK/NsJboJdrC8p1t/tNJeDjm+g6JbAN1o5lNtaW0ntT1WI/ZcwiihbXUxqn4xLjD6N0Yu52sTmB4G+/8BeodxgNlJQBqZfbR5bh1ta2ugAk5ULqgVxzLg3X0R/tpiI5tpMTJAhglQFWV7KzQJNfwoQbmRhkf4MGW+Hg6JjLfit73z3zLkLxu2iIv/yL/9S6ZDhfjYB49MlCxMRJnQS2JZTgAw2WDs9OjrCLm046ezuYDfiiwQvvfxZHL7yo58wRGOE+ioskBYYMSaxikl2I5TLEit1HDIJBQGTFnIs/Jo7l2cIJSpUadgiwwIsPaIgJS9SYwFZB8CZLQaGo8mizI4VAXCnKMhCC+pvZPEAQ6dIFReVnTh1mlA65ahFtsElrz9FOg6sL6Sxgo62phW3wBHQ2T1H0j5gkAiCkVUDRG3Bw9mS39q65VY5O06HROqFa00OplyROpt66fIFXVPjfz6WBBkD50KDElXqS5fV4pmw1B3MI7ncQMyaLrURlsR3Z/MxGGtYfdeWZdMpa4ktANNUak1+yOOWLasLQScnbLQ1SSW+/ugHr4zfGHMemVoEmEoxn0oWJfrlSlJSNwqOCi0vc8BOj/NtiSwlgmyGXKA2X6oIzBtckR4pDBiSTEs1/RcWNYk4wj3BYaUKBCZ7oErSaa8bLUPwa1/7mvXzTz/9NAUxfpolAiORBVm/whMk5aIsCMDhnbd+RljmylOgDXxn8DFmkRwbskhj2EJiWH3/+z8UrKzfs2bXUJQTup5/4Xl69L2zsdDET8kvLD139uL3f/ATHQCbjog5MjY85hMIN8IcoDY9Osb7PTcVioIBfvda+pTFC+wRSJ87k5oy4yjGsHg79gGSzwjoKhi8t19AnNEZYKVxD0DyUZdQdf3ywrZ7sqMpMWE9UbonnEUHIHyALF7JzAEGXMkJRdr9IUvYhZz0yrLysoRfa/CcUAQl1bMqFbWMtHnqGK4RyCTzGNZSKtSJDhk5ZW3dQzOzqUNjU6M357zw0U+UVi5MTc+6eWcOmy+xZbNifk9H+84d20+EZS3X3t/97tKlNRNjFDtpDFI/dmFVteZLU1MzGzAXQstMSzm5DrPIzzPKpauNGWwwG0JZAgS602fP0po+TldXf21dGAyy4URjtL8vNEHoUWNIeudxIcuc/MlI+LW84oyHBuB1LDeuD00lxYlp4oMwEoH10J+sWs8hjvnxUP3Awf4Bc/rgMrbCRBktUsDBHn6kR5yFcy5lMWCOIAJo/XBE6RXEQZAyEGu09Y//+I9FSJYmtjNgEbind9B4rfDCMmWPARNNdPwyfpJ6qAi2bRmAqaPma41oCncnT55Qa7Jt+qVH2YUjsejsubCkUIByfoAjwkdGRi3g9lbYIZrPzkA1xgpdYjfE4R2bNt2lYnUus3Bh7w4V6AlbefLeu+9Cqay4TB/mvnvv51/Cjiixfs3aA4cPFFeUP7D9fg1x7G3bdj9Jsc1Pr19rNQy0e/ce7sPxvf3VX/1VQUXLwt4DKi2vrGhv6z517jwrLiouNXKMkwVV1XgjIwHNP0LMslUURAM1FOfynBfjwQ1MiEnX0euVQkDGIG6rZNXUnmCVQmPjQ0yAJ6+BNsTkokSTqO5DCzUnR8dK5QVYr4xnSCliBy3bKFNSQjRTTyGLBYGGY5NdW9gADqzoWnEYw6eIRBEwIemqFSssaQmhwLkjuWGE2y4mBq86w+eNEW22ESrzdt++fd5u2WIJVr7JcybtTzuM5DI1ypAE0cH+fusuVXleqbcOHDhrkaO2MiLMkiB4FnJ1Y6w8+P3ff1kurGJM4DXwpDV2+sw5lk8uzSo8u/ec8UeIGABZ2AMteKv79PO9exm5qgplyLMiNOEc29zYACmTBiBlsTebuT/81DNAY+RLltRCwxwgagODw/SIuPjj3HYJaJOTps5L56d8EE1cuRThObZFDFnoRVlg51CgToLfHNkVTU28m3cgxQxiXeMeDuiQ2ltjGDhXKFI4Z5ykQBPg6MON7AREyo1cZhSVJb1fOGDDc7/wURBOmIfsfkltWKaitIRylUgEvyT1qyCBThH4BCNVAlZ2yz3sjVm4uAZ9niikIMUGMOAbEWw1BpYbo8NaLABR7tDgjYSf0Mk0ICVilM8v03+wverK5as+NybqO0lp+uYd3TspHVuvXMwoAtpkj1yByw1wPEQW8369JRcNKg6A7skVBccz5ulCMoZKCgzwAgLGCh01BZELdHIhq1B5PXR5608Xk6NfT5RFBejI7on0AHHBChHE3UiWsm1Z+LCcFMb/6MMjGbAIL4FV+ymGRcpzX1Fd4YzOcxcuzk3NXL5s7coV60KRjrZIvV1/5eKiRVX5BTkWmQg6LdfbtIZz8wq6BoYcKc3MVHUwocL5831YQHPZjv5w8KJFe6bNTdtZX0WewaFhj1CgHsFF6RvWruMzwGL0Vy5d1gRhIhxJx8NZU77xZgBtYHikq7uXs/poSEFydrWoeuFi2D1pdziHL8zPGxrsv3mLdGPJvpkxIlM/E+9Lhtu1gwWXxYtqCE43TFkTAT9LFi8WZYR7ib0SKYw1w8qyXc6WMG+ripfB3zQBb9hlk8zvMIjisnJeSoX6VwKBMGSFrly67IojoHi6sLJCXsV5ywRxJVKIVoZa6cxz6ggt9ZdeEmEt/jl05ITZKNWb4izdViHRpWqDa4m8LFWgpCymQ5uKuDURhiqXr1puNl7iM2dODY8O4UGNyAp9CZjBrVwRTj26erVB3LdGC0GVHDvDvCpcPS1A4AfmHJJcXJ1toM/sVixb7i0RtPLVWLhFhNmp4VBmWuIyftDH210bN1iz4aOMYGfE9IgCuOAcMTdvwAK1R4VXqu/p7tPGc+4UmlLiBxEMkFGIVK5JAHEKwwiamcWG7pk0mJcGtzzQOhPgSMyEBCOexvTh44kFfxAw9cS2zUH1dPU2Nzcar9XQ4YpkZBvOCFJNooaUVm9be4sPSWDPn8gyMFIgCFI0+Tl1U40EWl3uf/WjH7METzLVBhEwcO78GazSKU64MJQYHoZNzmx0nHNnj49Q9vb3eUhHfKHKx6tLSzHDHkymARNZRTsy38GV+mIaytbGKALPigA+izX0S0EwtEkH1OzKXMfDjzywds1yX7YXAqAhC5/CLSiApgrxRF8OnhJocyB1+NBBf1IQk4AkhAkrL3UzJyLDhOwewoF0F8+fU9+r/7Q+MYPO5SsXYWXYhmZjmLPsAW/q/n37DjhUwLHfRk/tcXKK5Y5Hd4hp833uanLKoZrZuYXNTS1//7+/UVmxID+v2Lyhc4B1AMwnksjxmTCxml9BRorEXIt5Av6zoe4RAdPm+Xb4TR2AOEgfFghZHZQM7vtKAOmcYEA6D1G7PXOLaekA8BfykjFe8HFDTX6RlYZXuldQqIpMJiQdWsni4H3MfutmiMI6ABSgA4A+dtjY9IxqaVxjAlYWZwJNSIQPiXSPdUX8s4HYbDUubt28k5aRPyc1o29kontobE5GXkpm3pPPvpBdUJqvDTc6duzo4VUr6lSKVy6dd+zOyRNHFi9doP+2Yf1axmOJsL7xW2+8hYeOjk5mMDI0KhhyfIq73tziICl7rnQAmBkcAMLMLAFiDzo3DNgiDVDU1i0llNVsIkB3VyfMNYl06e35EZR4bgLFDLJUz0KEO3BZA4PmymXL5ZUg+jhTgZ7ATnzhDkHZYwLaA29ryzXdKjV0dCsGg1Vx0iuY+9MKCs1NBFVmnlOHCGDOShiRAM582aWUL3zhCyoL4YsRKl3o9vbXPvoJMUpTAIdKIbI/E8H7d+58AFdCDRGEDtHedll9M6EeDwmG7YoGICmuXLlkYMVzLiMBQNDp6x2orands2evxPjXc2bn5j4xJnbB1vwPbI1TgMiqZVl0hrFnmAlZW1zs7lD/iz+HDxxmMBYEYlVwg9Kp4yda2lt27Hp8cW2NZP/u3/07q7XVGhafiPMP3L+d5xpcg4biNIip/ubN8ElN9axJ++6+3rbWrsnQQ541LK3hCHB2CKj83LBQ+8K5M7Tpq52wBQI8oY1b7IknTFR4F4ikEQzZtifCHTEJa0pHobp8rMKfOKd6yDA5atK5UgqpmZnBbRwSSp1uEzNYxAojXMYflEihUuoI0Zc/7XZjbGYEovugjBmYU5MQigciCEQMSRyjaEe2WMgkL2wxYA2/9BYxiplMTqSy5E+QJCzieOB6Ng0jgg2C3Bgbhefjjz4mnhw/ftTzutrFakA36Jw+efa5555mseKk2pBc7McHKxgPMc3nENA8APSEAvhTmVKGhsdwSEEqTS5JldhmzLBVintYkRrC4IKw42N15CCsApUApCYryMLAWF2M1Wp/jW9gmjKyByBZbj1j9mZiYjLEw8wMbui7IjhBHxrO9SIChl1OWPYAb4wcDn6BiR880CBsUYCzjJhXxPh4WGPDWTCDDQzQhXuA0H5S0YSwyRjkchnAVZbsHkrviSxKDPAmm+yZkEuJlIKf69eaJfNE6QyDR8T4iStMMj/UZJQShTByNM+Mb9gtLb0tcJhRlj99l8kTWSjFn5rQclnqYVbfvCs2tLiwTftrVukilp46cRzImFSLlZUWk5q8ZlSApSpkGES73nrN0Rq6l2pz3y9yaQnm52WsXuukk8nMjNzW1uvhtId/+cqkcjGvFBfQQIR5asU5vfvTW9W6Qv0JsagdfBJchS4LHkjEnKJSSE0vkskrCyk89+tJBNmvK2g4qZswYFDJPSfyEE3xB0FoeyEjOn69ZbQoe5vymefuYVikxRnshCH3cJQITOxDTpELZ250ACyx0CBLT8sZHhrLzNAL7DSuVlpWWFSQ+5EXnzl69JCFPcbRtSb37zukA2CdkdWH+mHGyQxVqunDWaq5WcuXrSwpLTKn70gm5x+HLR1zwipAp1APDgwZvmN8BODV1vUDi5N7MjUxSZECigalNIV5eQ9tf6C8pHjYev15aWfPnR8cHmm61uIQFQ2kBx64TxDs6+0aGhiwE8iqXMsxBvpHltTWxcDETyhDwKUhBTFoSwsYhGEnlVlBbp63+koCq9VuPJ/XQcYSIBnNDotBDEXds2XLZoZFNABaDhBbyeDqCvOtqVo5mF+5ag1T8GEjCrDaHrz0pDl+7tRJIYDuqYQVqnXomAFhSajFgGR4E5iowNcoKqoWnb94AUtKpKw/+IM/kNcFFu0z2c10y8WqaB3NlsZw/EXjtcbi4iI28aEP7TKDTMVsMThe+Xwt0YL8Ylbi4CYC0q+hMlCo6izIIe/7779vmThj4LEahRqyWMIz0SSzeEZx0V4JHqtev6G2S0YadEsIy/LETSOwtYtrLNdADYfYdsMKlasagAzB2aXqB3GVyvzK6qzsPP14xTFFBOOIkXikjhTQhdQkjodtSbzixz/+sa966T4ZwoHYe++9B1LgC6OQ4U44Z+20T1N6cV09fVnZ+VbkWe4V1ijNS3dCq7hw9NBhExE+aosxkdfn4XRjzAhtf2Q7875xYzTCCxz0sRodnpgg0uZQBNMlcld3j4+EPPnUUwKrKkFKGQcG+zBj6BQbbW2tFCfMcW/Ir129urS4bGz0huU9fIHZo7x8xQo2iSaJdACkhwP+9Zp5in0vFG03qQQULRTDQZfWQjuBTL149OjxWGVazlFWUlBclPt7v/MZKfGgEvLFSizxfZizZJzQqZYfmu6V2FB/VVkSCH/sjQ0zPJzLFaw9+QAQxXmFYSZqGJta6YsT+RPnOgCkYCR+hUfsKZqFvPLKD33/Kzsr3ystLes5N27etG7DOkNuWiGLFi+xs3deeq7DxL7yV/+rrLRCB8CIoDMFxibDpx9pPMNrn46fFxbdOX43DOonU6jO/GTe1JE27056xvS81NtxUVDYjKsBEtYM+WhXqlxzZ8PokQ4A1zAD4LkzePDpTxdroTIJ/BLKc5eHKHvoRl9FB8CCRs/l9SVgryR2rwOQPEyOGRX7IrW5c7LzMm8aCrkdxg4dqSyxV4HujGaBLoD1yT4V7O3cMFc2J2V64k5RaWXv0I2xW3PScouPX2jYuPX++x95dMZJQTN3yDJueeXw8OuvvZJlQVhGyuiNgUcfe1icRH/Llq2c6/KFyyqJzo5uxllUUGQ2T8lUZnurL846IllXiZo8YeqAzc4Np3DULV9uWMGZEuKeuSbhKDUl9PHGboRNIG7YIeJqRwlokyAAYfxKETpYkSaX8JtyJxwpq/EtorIHMYczsnaxQiRxw5AYgIuv2cRiVa6l2wIUzxJ/+KwEtMyhmKuaUqGiUBzQJSMKgo9XfoUObkWtosqjjz7KQkROsmjeXb7Scd+2tWJj/8CIuM1cjR1IgG2+YCjamJRcdIFDv9SN4M1bU5PjYw6PJiA27r33HtEMTSLs2PEwXzBRo2hyaZNh0lzWtcbrNk4wA+HFSkKWYN5AEfGaX1HmiDBtX3IR2VogU46clIJ4kxlIszp5ubkafzoAKExNTHtrSELpCt311K7BsdGDhw/823/7bzm1Ti6R//Iv/5IKrF1WK/X09AqMsDL8TxAtzJ5weoceaMrQ6MikttysQxsFVMfthXaDxW8CL0sDfuv1Zv4uQHjOx4mAAoTdwNwv+p4Qkyy0A1haEAO5s1gtPqigXXCjFNFASkFJ/QJMiYVr40Emhb0CHdyOHTshsdYVdThqWSnU4YkWLSUKMs6zUq5tCe7Zj3t0sAQNsGhYe44B6OGfAVPi0ECfViKWWCNj9pZf41N2DfS9uz9QZQDkG9/4xpKaxUi1tF1/9LGd7G3PnkMf+9gLuEpJTgPzCSvEoQINOw+VZfsvcXwGmnYUxwXEyY6OG889t8NoI/WBRRQljldkl93krR31tuPLzhdI5yKCBABkAJBhhGpzo37S8BShhGaJL706lAjosCIepD2gCDjLokSdEEqfnL6ZNi+DxkM9XhB2YBoIVUTZ/HLVh6jDOB07psqQS72pSo0MqI5jYFdN4Aek9EJxOJQMA0HwggIbesErCx5iBYpt4UqsYAwSy+sJrUmPiCNsvXUvC32hIyC4GCpdMDYX2fHjoZQZ6eHLFZLRDjrihnuMcUZCyUWt7r3ChoX6ljKopz1E3KIm0jkPm66tzMGJeIUThjrQH06vml9ZAWFTIvTiBnpKdy4ZgjyatWsWRmRCuTM3F9fUakBj4PLli9LXLV+6fsO6JHGDxdIM2GfFDLE7qebq1XpVB06sUku6OaHpgpRfvBFQ7SkYsvOEz7CziJPqyxFKGuYhjSL8yZaA6SEZo7vRuFzwgSclumcSMHEDcDh4jklSA9kTqpHdE5fYjqwbaCAuJZr0CCiAMG/PYyXOHsz4pvzwb/+9JpRoKLVobr8i5pgjX5UBc3piMpNKSfriOhhY2bB+i6+KXLoY/H/9unWNjQ25eZkbNqw5d+a0Qx6V4cTZvLz8weHRcScl3Z7x+Z6rjVe7O7p98N6HSzNzMqsrqssry1WdWblZxQXFBsY8LwhDMtbyhrNhFQcIM+2O1adRPmycYPGixaDkrhcvXq6/4kT/CUufBJ1tD9zf2dW9as3aQ0eOqA4MckPEaehrVq+iHmd1jAwPOrCSLpctX+kLb0bawpmhk0FhwWoNNieHNjY3XrNYSDOAK961br22I2G5vercQpGRIeJbc3zHwdhGvhfWLLhktN68UnamtssjDz2U6C8EZdrVZOSiVQuq9+3Zf/nKFUMjGgmgwK16QkrxjqfpnDhpWJ1hkoFBawhAwWoQcyM0a/jW6I915Eamr19vVbOWzZ/vkPg333yLTeP5S1/6EvaiQdMjS3KvgqRyWmAZumcMAoAHDuxjMXag+swBUyMaRXf39klj05XPt6FD6bhicwyAW2IS26RgK8aZWIiKAf/CfXR+LsE2aIrIiEuvLCuapBeJlEJT4BV8cYW4b/GBngaZjVrZW0ENVrQQf1WNMS8bdbHXsvJKnWytSf4QjdtCc56MLMZCCyMZ9sMGkcniBHpegYgWBoeBsCJwq9ZXhBuvZNG4Ub8+9fSz11pabY7gVJ3JUfToWCHjwAcVTI2cixYZ5XWYgBlDAxZ79vz87q2b1YnRLbmZmCivYWOdBOdyCqYYIyDtUIfv0Jl+tWCc85vWgA+g9HWpRpyCv/XEcFDr+9XwZXUb1oTJX5DKbu4DAg5398sOSafti7jwqrcAENMX/b39k1MOt5k1mou4Rrjqkxa0XeFv3bwpXpWrLJQ1MjTgSIwdD2/XSgACBpzNVV/faCmzP3GFT5WxZpa6jVyrVq18aPv2n/3sjZ07H6NQALqIpmiyMwaOg4hFt27gDw3nZhBNwPIEwYnJsFYH5w7ztQNHfSaZizv/3d/9nalii1IYg2X9mu47H9tRU7OosbnBuWF6mlotRln6B2/8t6/8j/nlVUWFZToAEzfHyK5omjWKL+5bToOZ0LJXuc4Jp2b5QoiRBX+mzVUPaWlZM5pmub80hhk0ssMqtPA93SzOHGq1WY6WBQGniwItBlO/2JYnbW66b4HrZtg8c9Nghk25d6xlTDH/ICBr2yvR2UoQ9ifdMT+kNOhx45XL6iO4uRkZG62oNNY1m+xCCk0cBgkfVa+tipbn6ZaEo45uTSd7iNMsKJ+9dUcQLSidf2tu+sWGlqKqJTduzSkur3lo5xN5+cWMVeKv/cNXC3JMpKR3dl3XeP6jP/rDrs5O4vNT26t++tpr9HX50lV/ViUj+itWrFI5ObDVWUUOWjH3r7oCqUaGCnL12vB9PedcqK40A6iMcVrMpvNALiXaz6mh2dXVySrvu2+bcUBtDC3D3t4eelaz8zPNch0j6W9OTpFOBIhRRZDhmKbvWKPnjAfgohZnB4VOuO6xSSStKB1moUbMYU6CEgBV2Lr0sasJTFAbhamsqKZ9BTFarX8EVRN8EKp79+7lUIoWZyQWyhyuX1ZeQeOeSO9tbLjjQWWnY4Ms3GRXLn4sk1lcU01Ssrz44kdEA14pNkKSbynCBja/8OEUMHSMWMOVRuFXrIvUDh48IHaxdpcY+Ku/9hFCgcKl2acIc8jaIvyOPR85dBTyYGGQ6uKFC2ua6hs40ZHDhzGPK+udO3o7a5aEYIKClM4CMnwGwBi9eQB4occBySKBo0GEDppwRqStDI7ZNiphuQcLFNA0bdUp3Z0dYew5N6ytMoktjCDISeGDQ4Yd7CH5YALoGACQRWAA8hp8yiW9kEKJ1ApJGgGgX8FKXpyzK5cnh48ckcDCSwl0EclFv1A1PAEBJXKfpsZrYgIppLHnx9xFdUWlhRxiiC0KN4ZHjp44vqh6wep1a/md7kF7S6vVtvdsudtRHNaPcXDsMQl8UnRXZ9jjvn379v379z791FOWCVmgVbt4idrBBl/82p63asXKu++514wBEQwvqhydytXQeNWaHFXMPXdvNdYLB/Jinq6HB0eEqfLS+c+/8JyQbB2IloNTjC3ZumvThtbrbQagLbFztPD+A4eMQN+9aYvliXnZudWLFnS0tuc6iz4rZ3T8xpmTp7t6uwty84sM/BSXOqo18YIwhG/bm6k8IFMlU8GtCMxU8KAPqUYADnjnzstkV6bKNehJffz4iZLysrVr1gcz1u6fmFY3MX5oMFQzqJevNohsDF73G9SuGMYpkYDKol8JeJnfRMVhm7VkghVTlEahQEWfgaEDW3GS7qRxb3yICC4lqmqR9Sslc+W/OmbRhGSPFGZuhRMqJWDAUjISfoRVRshuBS40pfSKQaqax4YHfOclijOpJ5usj7fQBiB4Ux2wMSJQE6k5nV3QeCCL7GpnjJHCct81q9baO6ogRuLXc0P5Rkk0qslrkFdFX1FVoWNgxzDpnn32+Z6+3nffetfueU1/40UO7bXs3HpOBFEgPiK4FakUbc4HP1658A9Y9kw6fOJZesoShJXlLXEivPCUnbDs0HMIaORECtGbYIW4Jyig7wK+XwJ64hcC8iLuT68QwVJEMmoEztYoeiXYIpXynb/5U0IyDXGNatV6gj5uuCIjsJnhvG2e586xtjKzayLyaFhfqJ2hPkedXmUX7Lq6O2jLp7YxBwgOrPGx60NP+l4YNzh35rwjPlT2pr8dwuG8v6KC4jmps8uWLl+ydLGDuUvLSzLTs1rb2sz42ldg6AVz5FJZ6ispnQyC3fiNCd+joW99GxFNq87RIF1dQzqo5kbUzoQUAgBhtaVKyCF0Tu20qs8onfXcWEXWNx1U5NULFhQm3xRE3EPMu5mcmOb24jgoxDJVYKyHbJV3XID2VKWPUGox+1b2qVNz0+cWFxQ6N017MXSNZuc8+PBDjjbSiqVIqhXX8LN44aK2zg7wPvPMM776KRqyOWWxyPSsbFv4KdWMlTlHTTFVDxWYyvTLCo13GB9xWJA5TSILXuK74dIF1Yuo0Gy4ESnjc/wK5Cq8g4cOK9FlGlFKHanu7nZHM1ETxauoYvueFVo0kqzsD81K4itOLhWMr8tZG4w3gdvspx4gy/7iF78Y3o6HqQ91MAOlX5UcMbVMg+1ab5cswCWLhRaCVH9vH7skJt++eOGCX8Zj7CQj2ZgFBHbJVPhAtJYYF9TWDI8u4M+NhTxrOlATidTrdnAoEW/6q94ydAPePEQWTo4at0fZPT6RUi0hq2h5YS69sCI7JnkIuQjFVzCGQrbzkpPj2GBFFqFWYjZgSafu2dnTp6qrF+qYwUr4o1yVBAraBNKLMhpw9lrxUuLwC68UBwFTZLilShUtVgUCu/E890k0IoSNvMmqQfHi1KkTJO1qa1+xfJXEMOC/6Fsh45LFjJkzjiwRNGnmxkCpnmFne89A/2BVZSXdKdEQlWkuu+iarvv8VrWPFE5OT9loSxGs0dqbwoIQr/UqqU+zw1nXRk00vrWlhAzDuuJUXd1S40xU7LOag/29WhuvvPLqv/r9f61CqqyssnHQICgMBYT5ZeU6SHrovrOjvyqLES+ByHImA7M0MjUeqhPMW1jjq/WKvm1COnXeN7/1z2qssGMs2YumgW6Iykl8ukUiIA/l+lOW2NxOGRu/9V/+619lZudZqTWaHKZmxV1iV9P0p1BQ06S9KErRNKeCWf9mwo+iDfSHDpvWenpqZjLEnnrnlikbQ+32D2uyh2fJxRhcPivgmIKoFJbjow1p+hHpDhyzWkJrP3Xq1tSMEfw5tzPDBoQQQ5Vi74FLiShAxpWUHiIy5vwZBMfU7ZsmGwqKwod+WLgFSzTuYjBD/cFf7I3QYnMTNvLaNpA6NzstSxC8bTuz/W135ozenB2ZTBmfnvfir31m6tacRQuXTM/cvHL51L79H9ikavj/Dz/3eQGbc7Gue+6+2yogyxKwUbs4rJ2jcfeY5ndmZa25ut7eZn+bV8yDUzz55JNiO+NHAdvWtDB1Ab+iuormhm+EWSn9VV/Ldj6yjarMpquzR59WHNNcRjM3L1v7Q2tSFBWEOYs47DKgIICoUwxeApafklpLWhsLaIrQ0wCm3bRLl4RFSmwJdFAyreMeeoEUuyooYH4ckwPeSdH7mikpLWW3zAlunhs6US+IGMp67rlfUZZpQ2hYdXPxwmXBWXyI8koDDaVrhgqPqmfhEUTiKi8WJC1WHB1xCGCx7qh6RCNYTECByoRHtR62aVYvImCVnCvNsrSh0Y9PdJ7/6I/+iApEpE984hPoP/7448oViglFhJ7OHgwo2lwc2BUhSjghkhdct0KxrU10MhNizY+oiCUM61EI+/4Unw8dPjg55fi13rKyfGBySBGDaytI81qH10nKRkDZG9lxaIc3r5wYnySgCpo2wU71ihM9rHV85tkPq6pogRSRDt35kyKUziaRklgjGIxGbUW1n//85x5CA/h06gZKpIM5vTAqIcVDBQ06nWN4VDLDqLocEuss8WWaRcGfIrDYCzrZScpIiClI3rv1HnGMv7g/cey4YTjHgWjONjU0Op2qqqLS3LgIbNgbmPZVMyQZx2+MutEBePDBBy9fPB86tLdmRDwImCjAnj0SBYU5C2oWbN281cLuE0dPqO/YiePgxDq1Cb1s23YvZdUtqyUFtZoPB1deTr7zc/X3R24M+52XPrexvskWbRFx5eoVOnLzK8tFjaPHjvHndU7ZHxmzwWnxoiWZ2RnaP+2dbYsW1Py3v/qvWj5GPUQtp4RbgOp8CFLrQtO7mQrosXZ6oWhP4K+XpWqIWEkJzYrKamrVs2VUbjRgZIQzVNOzrI6eMWKoc8VKTXM5WsSIZPIh27DNBtrcyuUe+LByuYGhK94Yv9XadK9QkCqFHhUNDQ85F335M7LkT60vZaGDOJ65CRH4lMY3mjQrCMiiRlMoK/JhQd6EWxbL1HUSPAe4Jk3kTRAAO4LIcvDRwQGJ3Ugv/CqFwUMGSgw18owZlqP1z5t4KCuVXs2rXBcpTM0ZQBO1pFeKt25cijCXztpVeTR+6dJFvRHTSnjWjvDVlKGBIftnMtL1isPnjdX7xWWleiHuI2JusMc1YIJznJDOL8rAcbkhjldS4sQTpcuroGj8HA1KmrtsDyDQ8EQyaaSMFGT3J8796ZIG88i6WtrDah3EIcyAuTmynjBs2XElsV/ZQRro/PvPvQAgX+TB98mTp7U57CyhMAji1ZSl8TYQeKuq5Kg9vQN0IydySCiSh/t1HxtVCuC92DKBZXjGGLbdwAINJjTIVDzEQ5lUwgQhDSHQDYYgpXfDjJms9jo3kIaOF1aH6TwELRgwDmfZQ1tbl3Z5acn8w0ePnPc1nOIiO+HQtP0ATStMNErwryq1uouYUDDyreECJmGKTeBKxcZhGCjOPdGpAChoIOUVBI2LU6TBKuFDcaxZzMIG8aVnu1IybkyKCCizP7KXV5SpvbS9KODK5YtyhTZcsmffBNY6cwJVVYBismqsvIKiqspFPiXqUpZCsaTtxZrZN6DghnmUYzAyEWTVMsoHjxxWilaOOsOhQOqMBQsWQen8hYtmHmIFpnbZtGmjBeQ6FRjQ6mIKqkZFWIVFWOm1IOUVkdEkS1+/md+08alJ+oUnlrBKaqMgKgMPMcP/uZZS/AkKcULjwHKpYI7J9h0QGfJkwc5EUqIsTY3GmM86XrN60ULzD8I0eWUnHcSIhibT8oTIjJ4W4ImlTus/enossdU1x55cal9f58U5xvx2dITDJdQuop5yNTIEGnABMELKMkUTtqc+Q5xmhQBcoc/llOiQb6oEgtCDVUarXOnZJCJcVKdRQdFatDw+8+mXcAhDElkrpedw/4MP8HCkgKynhz65wIUfBWWlO42un2UqBUHaX3fXBuaRl5fLqHy02lsMo9na0Xr4wEEbjo37iiEYvnvLNtR0DrVgHMdE+1XVFTduDI+NjxqWsH1Q5M6Yly3KM0jfMNdngOTceWFV9I2xsCFy8mZYySDmFRUFntUoRuixt7SuVlDTPmdy7ERApAU7ZaHKDVUBahq7QZA9dGCfXyv6ONTmTVu1KrY/8BBdqF51ACwAU4MmGDatXb3KHmWL5vJ1CgsscE9zZBsTctKC+3CGj4U6aVkaHV1dva/8+MdtHZ3KhbAGfWGBheB3PvWpTzkHjIfSlCF1VbLuZGpa1l/99f+0xcs3boXdifEwouxUFuNZlkZo31Ol0O1rJNRkFY+4NJssIRDYGZLN9+QKy2PSUrPmzabbhm7J/pzb/Mjwv6kAmZg6EqZTxENxx5OEJqphEgARJIHp8jzYeTLHKqcndiD88nmMrSFdEh4DJ8klpYx+UR6f0v/PFiH9MT0VjnABOB1NE8z4S7LywdiMckMpt2Z0htz7CMXteSnG325M3RkZnzM6Oa+gcOFvvvSvmlvas3N9W7rq1de+d/Hqqbs337WkeiG/MxzAqY2bfuUrX0GHlVaUV7A64Yh5j46MeNvd1WuMcPnqVe2dYT8PnYp1dH3hwiVcE4HrGeWKVRGpVZ3s/Oz5i1QmcXRST5gocZi3gpg9cbySgMs4dYpdnT2rAzypOc7g2Z4EZHfD5aVBgf/yOFXMK6+87uwTpu6wWp4IHPz40JuojiZDdeapllmsX2yutVSMi9kTdezocdFYCxjPzmCwApCjEUr9i3PxSumqdpdkGACF8Ct4GigRnw36Mm9NczcYE/GkV1vZm76srobfQUYc4CyQRFCNmTimw3vCGZcGyDSavYo1gv1aZDFRyQ2x8fLLL1tCKdrE8EUWUoskVulwisarDbRP0n/4h3/goVzAW15M6TgEzu///u/b44syJA2glBaWwsGEDGa+8IV/Lb51docT+gVGRSy3I6SuDrBKNL3z1NPPWG5q55vqBlAHDhzCrRsi+EasZG1tHXIpnUai1gryc8HFTj7zmc94iAH3QigzYJ+eQM+NQIEUTpqaGiFDTErEITsXyoiPGnHo3UNPSEQ1/FeDVTBBFikGgxpvpn0GiaZcWOX+0nuImpSkQ1+8kpJluvEc2pTlTzwAQWj1G5d8OMp65fI6wVn3nDbv3rKZgM44Yg99Pd2UbiKUBquqKts7WjdtWm9gxfJCPJ89cxFBHXldXPPwKN93X2j9lya7CJ768JPSfOHzf8i6tMIVB0kRFYzqQbLIqxLBJHmxjQET/g8/tNPMsKpBFQN2TQWC847/9J/+k5aPjpxXBPcEjNpdFvWZs8A26LgqL9AzBAW1mrJWQ0HVcwhgRmWtPapNBROm6IwaK1cttOaM4pnitApwxZBMK8q1fuMmmyR9Tt4raIAFwdjqwIBCCSU93w8ROKnNDXWwTw+j3SqXyrz1EAVpmAHD5g5055WhHJxQB/aUQpuEoj4PvfWcYTMJeSVQWTsoO9awPC4mkIvG2ZhSXNIrHWiRq2v1psrD7BPMjT5wZLJLoMmHAvagce1a+DImi/VWdCYXOoi7aFb/mY7oiwjSY0yJBCcCbLWpDIIYY8Xegw8+AKK33/6ZsrR8mZxVLZqFtgILsKb3xc/ZMAkcKoUoNcrusRr5h4x7peA/XsTxECd+IYYN6T2kbmXhE2Jckjo8BK+H0kjpFToSRwWxPa9i3kT8GfwjkpoWDnt0eQiE6EcoAEH66PtIMQZF+E355NOWNKRt2rTZaKsxTt/aFECFs4ighovzy9SomiPNzWEc0aFSAgT9MXGGrkg2RGHIocPJOYyScBAYmrBRxuqlMB3J0CGOLJSFM5GdhB7KS1X+FEEcwWBmQ+/VYSW8bnRo2LGMNt0CAhRihArp4sVL/b0hUliPZbDzakOD36rKEH0MIjJ9Y6OW/SjFttf55aUW2DA77A0O9NGBUB4ixfz5EIkjHAIutlXleIY+Z8MkufgqozeY6qEhZFUF+DQxycXUMEwK+DILzKmWGCUoKAm+hr400KXhHgpllBzY8XbGEGN2PIhBvimdMifNJ8w8hAayIBKhmDj9wdmlCPeA4kVozkxNmhzkw9KUFJfhvKMrfAPcIZ44ab4WzvJXdZGCCNXVVVs2byifH75optEP52hV2s0GFRhrMlibR4+6vEY+LokUerO3w9HFOAQI0fbu3UsiBgBDNyiwdQzjk82MJit80A82oB0zPT3QG+byMMz0LYRgM5lJK0F6fRurcAxCiIZQjRUGiFSHGgciKYIewk1ev7qsoLNew3wFNYm2wMzNzTOfy3aZmQFvamIMOgB0KrtyaYHsHkqAf0r0CxD2QyIIkwJ9f/oVOXHFPiWjESrQIBC7pWQh3JgKZJdSNAHgxfMXqBJx/Bh2wrkeiJiCMWk0QViFPay0YI4VtbbrLTyFo7JM/CNoYEZ2kZopNjarXUpFQOw5+sY2A8fMHTl4SFeU0levWk8uRy2DlydiybCETpnmrwpXa1IDpLmhBeY6tBhQEFuy5JNmC4qK/Wbl5AmyBw8f0hU38orb8+fOKc5D9qOJT3DdAJQfffRRkbqxqZ5eFi0KWw4Ym9ZvUUGeFoAwBZ/2ti4Zf/ra65/+9Kfpy3fH7PYZHHJWXqfpCAsJ5ldWZWblLVuxsjRZSZzi/F/d2ukwjeuUBvdWrdjWt3fvgYOHDpm/JYWCdACc5WXS4Nd//ddt3F+zZhUnmpgMXwVng9l5Rf/rb/++o6vXd3BVeMae0dEFMm6lAzAnJU50znHWh1zWqcMhzgPEDoClDp6kmwd3EFD4L9WvpUFhEmDOjEEVumDSdKe1oAtwOxk+AD4j4QLy0r7L8hxpXJ54y7RAR62mECSDPCIeurwNjCRXfCiZv6QxLjw2qRETNqUxYDWbUIOk+5zMEDDHx0ITJzmkIQdjtiTNi98E0FNJS7k9z5LT2eHQAZgzOZ2xctWme+5/ODU9ragk/3bKzb//2v/c9cTO1qamRZXVjJMe+am4tKh6YWhYJDV3X08vayGJqMJhTVQ5N+3o8WNsmzWKwArV4RQwRTMpzcOgw/HxaeSOR+zdf9ATvsbFIOCJGzxzcybhVWy4E5A4wqDqQO9PPBGdeBxnl8tb9JWi3BhPtLm5PwZEBuHICU2YxzPKzl/gHbHz4JRHemGKghUDmAyfULixe+8elbFRfKMSuPQ9GfSZHAYsNVGK2grD+/cdVHRiimFdCuKKwxKCLFyPV1mc3T2F+ljYl770JbMcL37kOTWR2EWDnhNQKxwDgBJnPNc5p1mNQhPUvGPnzp2sRaEGCAQWO6HFTwyIKrACKTDtHMUtKBSdnRE+rP7BBx+I4aZk+btzPLUjxWc46CQgqwEHFtlJbTJIKDaF/tJLn12woBKMOgMMzMmkRFu/cQPRnKgmqqxdv84BymYgl69YZQrCpvwjR44RmSBkb2oMrUbnqK1YEQ6rYbeK89wmbDEKA9q4EouEisAzyyc1BKiSzypRfGBCLS1hsZBAhz2xV14pIS8XubBkqFiJ8irC6mgbV4QCOEQMZZEY8jFooy+Lt6SQ3r2Qi7LipETQc/WgOoKFY8NDvgNwzLuci2CtrBFui4IoxYiUmsJKB+lZlMZfV0d7qPq5oQ/4VBo22piWkVpWXmJMF+Wff7AP/z5NQV81NUuAb82JthAD1vi2KoE31S1drkS6wxIAWRTLZ7pkhDCelauRQHxvdzz2qAFrCoJkbIoRUIVlrZ3lAHADuDpLSnWKjKqMrs7wdRo3Kj5WkZDq9SWKD33oQzyFWlkg2ZXIeNz39PZbG4wsu73/vgeVgj4p6urCwUdQVT1BzCICjtk3MGRIyAn2nsvLhkEqMVKegBEd0hENHW/BO24RkaWnyeeo3NCINMQkNRAYA/eXno48l0U95U+kiMa5GAYNAsdDDCAY7Qcdb7nJyPCQxJ6zJWagXPZDlUpEIV6yo4yC34tnzknsOfMzTEwK1sLfjeVKhitgGmFBHx0Xe/XLAGiEpeFTLaxoSJIisu2VWlsWDULLTxA31Yt+Q0O9ugY16rPWAHutrW3NTddV9fYXZKRnmoO6nTqnPTndVUqiAQGfIMUk4vHXDXgB609qhRiegYkBKaWHf0xDHFbBEpTFtFzSuCSWBmMSe+VPYvp1+dNDBJGCZMq8NHpRkCfMmH5lhwBSfiOH6EPMhduUF3aukk3PxlH4VpIJ01aIUgMr5CpeXb162elsWuFkQA7z8oOSnSmJ2mhLc0cdA1bFsE6+jT/PnaVoOENNSma5qIEMiKNDl2D10CtiIKU4l1nL5atW8pC+vt7VK5fTjZlDk3fWfxuyKtFbLypquBoOVLb20RlCFy9frqyuzEkOQwUR4pZw64hq3kDTN8I8MVxKeN1/BdE0KF0YwLNy8Qkv0wvwcoO+jFLyMdgdP3YSstgW3FUS5DUIKujLq04Sg9iNZp80mt1A084Dq0FrikGZY3M/dCCm5njz9Z9iRmfGYUr6RT5Ypu1gzprWOQNWAY6xpMfZRUNgVDGgqZ4DFCJa2Zh8eOcOBmpxiHJtToCnTrJQa3Oh5h1BkAIdqygsyJGGuUfmtXawlxh3gz1YKKOGMlYff+yJJcmJdT5WQHwG7RWrhZg/EdSCjDbgCQqYoWstuWiCcFuRLNudHLOtOnwNFCy+72ABjKY0+sz0+IkTnlvJrYIBMnWTkcnF0AAEnKhTEfTQn1pCkDcqbFaKtXirPXHy5Cn4qCk5vG9h+lUEkRVBNI6kHc+u0MEGhl3SiN2MEzUaofRon4pgM6QDoKUIfIaJmpWO3kj8+EpsVZe7Vw3nZueY8XfsoEU71qeqs2HIDKRBnzha0pr4kMEAj1i9YmV8zveEJ6hOzwSvhicZ2zvbFScxDrVmnC5mVe7I4BAZ9W1IYbuIrp2+TBAj13AmYmG20dScxWYAMYncWN9gChhoTnUkl0awKscmGYakbWuFz6Url9m/ASe117vvvKMXACvSJR8/6dZtRhsmTk2xqfFv//ZvP/zhp4x+qTkkmxiz6sNRUWH5wYH9h4y9r1+7DsLc34IsI/0aeWKs3XLOEuno6rapev1dG61xZXWZ88KheD5dyjacAxast7RClPr2t79nCbaJLzMFoDPXp5NgqZtKzpix2g7jPth167Z2tlW/OV//xrcam1vKK6whvmOgnFrtGVAj6ADMzolTqLOqeTLOtTjAT/IlXaGSyYnRImTqHQfw3smYOyfLcdHp4TO9aRaS2jkROgAzYUpAS9hY/jxLDMI2XAygQzAGgwh9JWYS+glCh4cScFWXFURJOAnlshCJvXLRUUxJYezKE9o0PJaaNsekTlBWOMEszDoKCOjPLy2TBlYS6ymIKkoxQ3NrKhm4Trnte2YWQN+ekzY5nTo2nToyOjs9m7Fx630PPLzTR1bmZc8bHR90FFtu2lxtBFBzUmYsXhE3MuMhiRlqbk6O4CCCVVRW7jt02FkrbIPvRBFEWk7KI2gfeDSIVW97enr5qWkZlsBx8OlCGfM4ZzBJFApLhAmlXGrSnROCzKCyLg+ZK5eXi+2xLkRwyHnhDEmuzam5J4JmcYHpIfOgjtjukdESIFJgBgW9+ItXLovGVCx24ZNNalgLp7E5ZSLUhz5FhvhK11ErHEGyX73a/MAD96hWREtQ45aMXNIpAojTDvq8dcvdm7bevXF0dIRo3ork+CcFfqTRNORK4raOa7KE75SZUkEYh2RXCcryxS9+Ec3t27cDipvDXMcAVn6VTkZnQr3//vv+fPHFF7kJNBQt2ijlD//wDzXldSEEClEFVgRZv3q9P48cC+NNuhbXr3f+49e/Kr0xCNQGhkPlS49IGZ5sud7a3dd/8NARf7LDBx7YHsLHzZsYO30qFKQUr8JGmoyw7xCHZNWZUYSmPw5RlhjzEtAgqelXZeQJfpgoeqKBgOwJDKXBpCI0syAJLhkh6R7O2jP9A44fCGdFUJxcHnor/kBYhEeTvkAqfYxRiiAO1XuCLGyZn2SaHGpkARbUEtC4V3pNPsxkJMWwC0WsX7tGA/RO2HdX+M5bb9lkZdOzvbxLFtXIYs6wpmbhgkWVFv12d4XTMB0Qgv9r166zh7Vr12PAWU8K1SIAlFYQrO7ecg+EGYA0WgigACOD1RggiDYA6GjcW9WluKb3as8GZNBh57bSkf1zn/ucXIyHIKoMhapPEUHB8cGKgrmW4je+8cPCwnTuo+6GA4R1mKWHD2XJ1djQ3NLWDn8z5LH1BRYqZgx25tAgg7cAb+HCRZTC8n0SyxI6cRU/XFJxuh/o4JbxRKixQagQvZOzPgcGg/FjXnpPYjSTmMsjwh7ATn18GX3tH9HRPWZABEDaJ46CUJCeHlGgdIWSwitakIw6FIqmUoimdFjFxF5RvVcU7boVPiMbvucFB5WgdqAq1a8ZaZBKjEk1o7dKJIvYzWAIqDhPpLEDxHAnIkqnStJRK5fElSfzyysJ1XytEalLly4yUQfF4grjpGhqajao7Ww0rqAL7bC+tu5OVQJuaUdGV0RSrFCE5y78x1808SDmcF4yxvTeAlDfQxpZIIMNKCEovV9PiI+sezeuWIo/CUizYJGGyK68wiJIMmZyUY3nktGsV3ShIPggi1osPeXfvPQh79555z2g2E6u2bF5890anbg0PidgtbRc0x8yUOoei74iqb5WgMoAXQVgXZH82Z/wYo7MV0STGAoIal0QUnme/MLKk89GkBZPVOIht8eT7BWVVXzJjebutetN3irXW2NRHmpBQScvt4h7gJGThx02W7caYzbSr1z86ACwBru/EO9LPkGqBUN5ZmIUsWPHDsnEWboPNUryaW4p169f67kE0FQEVmm9trbOnAOvJiz+wechy3Z5YtTKLx8DICNWiUZB9NrjFAqLl8UlDjJBhki0Q4cPFOQXXbx03snNlVXzWQ8B9Q1QUKjS1dxupMchYCGASc+FVHXkYG8fC9CIDIMuGdmC4IpVKzGMNaXPSUmNAdQ9y6ivvwoBpNDhk0ipA0jNMjycX17B/4UMWRRBWJuZjD1oZ8CBjZIL53THYrg3o2S+5GVSzIhHwSScoGETWDg/dBA4SrEvgi9xKjaggQYrgisF/g6BBqbP3GI4FqrKpxHUdPmQ1RqmBVx568YcHE5sprQWmV0hq/ly5MhRDs8+lbVz52OgwwD2/IJOcahB3i9jkBKTGstKFK/lwiRx4MPnYWjkAPKwQlxijQZpzMzGbpvn3qKJstiNeSFYShSMw0HAqNLHPvYxodZDPQEqY2l6Pugzb1DHmwgCTgKkVZXAwRsva2pulpg6Qun9feUlpT58uqCySreZCbFSDKxZvY6kKOj8Gl+prV2C8sFD+y2Xx+SKZSuxgT1WEf1rbDxYL693HhwV2PK6+e4tsmjV7dr1IVvW8Gy/AYhgAmStUmrlvCqhrfdsIYIWia9fW2IhiDhYj+156K1P9tKjY/TfeuutR3Y8TF+5Bt6zDIsabR1TmdplaO9xbd0ya3HksvCGaE5ZVlYyEDCvqLjclN23vvVdO151AMQ3DAiPPd2d27bdQ/s6Ob6tITja3OZk8KGh0albsz957Y3rrR1VCxZphuklweT/7AAQXOx1uielWL1PUmv7QS1mehUW+/vylzNP7tyalzInIy1MAlj8aUuAc7hI7VgnS4bEVBERnZwMs3S/CI7B9kzoJZQZP2IWBaGfwGubb1x8GUK24kLpSd/An5TuiWSeuCeOX3B5n51nAUzoJ0jgjBORxysC5WaFUSJ9F0pRFuv1SpZpq4RuOxzAHFRKWMaUpi5Mv3k7vX94anw6NT23dPN9DyxdtfJmyh2frTl0cO/M+IhludpSmHc8QwJvOi3Yp6RQG389QT8OMdog6KM22x9+yCu2zZV4vRlgbIsPGLOcgA1jjAgaRsLdspUrhBExQRZOyumEDsapCOoToNgMV9UW59Hsc0nS+hF/RBIZycUN3TAJebWbPQeFjIh4TmTZjdFqJ2FVMp1MXuNetLcSSi6D04o+ceJ4fVMjBX3s1z9ef9UnwI37hM+QqZ75i3uObDscjyYIT1e1azGrOHifS2ceESiJPzzIpanNaPmCizZNifzWp3+js8OcpFWUYVWDViapMSbqck/NTQxr/XurMYc4mrD1K0xJ8Od//ucW9ogP+KFWYgKHmEqBM5bEpX/46v8WB3yawENmoGXz+uuvC0TWQZFI+1vwNPmsCOLTQs2ChSqaH7/6qnAku4U6+w8egBgcVBCWo0svBNGayIyHy/UNduHqp6vfhT5SmFFEFrBK1P4kEWuh7v6+sPTINmV5hTIgo7lv3z7JVFtwkwz/1MceqEnAl9dyVxEMZTbjF3RkJ6xcMXISSvQQ31yq7+oFizBF3UpEEKsUypzgJrQiyw7l9Yp0/kSKI0iANzdyCfV44FxqIvhjEqSwTZoEnQYNYpCHycLqsIrap6Yc6tKgTzvQ75zlurpax4FkZmWAUcegvvGyvSsLFyyh8YL8EqVfvnyFlZpuV4Q4yUhuGp+YnLQUwrjPsaPBYkkKQOqgd5xr68tCFkX/zd/8jd4a/8KtgQXrFKzREjyjR2yyHnrLFol1gAkFE3CBSCMKq+SyBEhZ3/rWt+iOMVC95y6lwERK4ChdWezQxLiI6pWAyKQxQwptKBbFVSWjRJ9h0WYFDuiEmJR5GdZoUpMqg8+iTBAUPHEf1ccAWBHXYC1GTkKksv0umb9ihwCPBuDGcyViBud+pbQZDEFlSYOO9IizDdRcIPXKnzhkFUo0D6NQHuqhSxphFh2ql9Hl3iUBWACenxXmLjSZ/GkGAB2YKFpfDgIxLiU0QotZEDBxgEPPY7lqLnkhw3Q1WYHJqRmeQglIs/FEkHffe1spy5cvY2BhGryoyEEg7G1qyrmlreGLlaNj7W0dvpA4LytDNUBSBFFginStLFYaBVE6udxLQ1KIQZXNexitCFywUgSsXFLi1lsiSw8xT1xAgAlqESI3EV6kwOJPRMibk18AWNoXTtSEnqAgi8Aoe8yLVdTcu1Ie37rQqIn+zas/fu3hh5Nx5excxRvkRtcNZC0ScN6OMkBg3F0Dglc8/vjjmNbZxYGyWYOIID15FOmG8ugGZfpVtiJhSrbYJov2RAZMcAOQyaXEtvYOTNuGyIFV894aLVa0UyyovKioWEuXvu02MwujidPY1ARTJzZCE3Gnf44ODyrOBgB/NtRfwaT4axrBAhWFekjleBNQVFEiGrzkNQ4nwordsOYYfr3ya7jC8KCuraDJXo3lsAnOLHG0Qm0sDVbIxAFyItMcDpmX54iDJdaR0ptYNJdy5Uq9J97iyi4ichGZ6SidLcJEESxbNYMB7Tbc4tlD1YZNovy8qzdsXdAp8spIDw0++OBDCi0sCgPtHkYV4MGqAovF+T/jtnYNAsAR0IsKi0VY8JqIkEXDDiDZjl9ctMC3YGBOF0r3inLdCFiU7ka7GbeeUwpgHQWMMauKxSNmRxb7AYQqr1iCbVsxHJOOHdQ3NNjfyQFggiUUjDYZZ1IENAzS6+PxH+oQUEyAahoCQeQdHwvfKFE6KfSH4aBmQhnzZGcq1KrS0vWiF8Q5tvpVoaSQmDWqzmVHlmeShV6ogCDMW5QUDRkhQbicA4JIoTWDLKOFKsRgFW1AAk1/UAjQccDPExoHLHk12anP8l/3tKCOwSShSIE+eRVqgEoWDOhA8kL1ATAp4mpjU45Tb3JyDF+VlNh7M4Ftzy1dcJYOiL74xT/18Ny5s9qsOLdmBoZGu9FUFh4IayOyE9CI7EwTZAkiS15+PjRsMZeyML8IDlxYFm/hZgmeG3brrYLsOFQWe8C2usQou4UQfAF9nWFtxNdefW3N2tV0dPToYYc2JuCU+NMaoFwFLa6zB8C6bTR1AKAxMX6DNeoAQCAjM/ed996zBEhX0HnzRt/By1V1EnbtepzZVC+o9BAzyW4BBt83MX17z94DZgAW19YZhGbzlIvPOANwZzYcTBGiiwmB/6MDADePwysfA9MivzltYH/u7G0t7Iy5npkKCOgamYl2pYaRDLA6AOKmTwn7tBiI0LG5UB/JfUhwO0wiEUdZugne6iNE8N3F526UK7GUkvkTdNK4uGZ6VpoBdLCT0dligXTyiVkwwd9BBZr7oKMjadRG8QzvmVsiki+a+cABhtMcjzQ1k3atvT+7qDItt+C+HY9WLlmSYY3EYF9X89XFCyo1fDdsWNdifLizEylFO0FF7eJDivSlIKbO44ydb9qy1XyRmCwNf9GIxKZowwZ4iqYDw2btop9GhudFpWEvHVIsEJ98WS7eweA9kcVbOuVinoh4FBMREIclgIlcpOYC0iiFw+pwKkLbSFk8ka1asIElFMRVJ/HDSgUBTAdyCE1io7fNzU0+biV6tLS13hgdC1FodFSDyXi2i9RW2ujMWBsDSe529UoDj8NebFR5qFD8YIDUQiUjb+sYXLokHNEm41/8xX/UuR0fG9bYIy8GAoATE6TQjNBuE6kM8IvPxCGLKURvOQjVk+jP/uzPyCjgaB9zTJioPuQlBZRkIbvVPs6E+Z3f+R3iBOmmp3FoD6KU6kp5LT2FBrmkF9Y+7Mtu42EB6r79+9mYBiIl2skNW2cziDZWeGtb+1Ni5+2QqKd/AKrPPfsrUuJNj2vPHsug67AKE2cuAIoGMWOkQO1jlIF/udiJ1jBUDSfLhTfuSWpBXmyHG9UTxyZgbEAM5h6CSJxEPDaqqJ7sLikl4KDpGVl79uwDvoCMJTLilviqFRYopV9vlYsm3mTEJ0sQYYCAMRWN58EUk1NioO2GpCxHFh+2i2ZjwUVpcYk5ws72Nl9Y1103x+JbsBo2N0ZHrPMm9f79e6dujlsCVLMoTHj6MDd+dPChEY5IKijYu3e3up4B6CUuX1EnNFhMjzcJMIlbvFEEUuS1rN9zzQCGQXAoqabNJlqYRCkSq6rYM9zkJQh1QFVtzn1on5GTy1CIjigfUZZlQoiLHogrQlmsyHOkKEJe88M5uYUHDx7SvGPMSkTW0gn2rG5asXIZjQS5bt82KM4MDh4+XlBc7hgG9F24VTRUEXSvAUBx6MuFGWVJU1pWIQEeGCH2yI55BP36U0bIk8gTHKqdtUJRUBbOUUAnliK9WikaCQ3SlDqRjZmfQRl9WpOLUGiirGhpJPAnobiSP3FSURJO6/Inbk+eCoOG6ENVbQhDzyGPh2h43mYn9iOLJ5oHKPBHbTbZ1e9MV1lyKRrbbM+pCXA25O2tyRPoGbVQEark8Wl3uCVA2lEWmpiRsQZ4SrWSNOUVAX9ESA0TkpIFQTx4CB/YusgCGWhwcCGFVUtAfAlw4gK+C7fyei6xBP50Q8CIicSxkYOaV3wE//KGLOqw5PJcegXJEgmi4/ISY5E3WVKevG+p3md5eUWcMH3p0y//zd/8L9RZxtmzYXLWtLilcoQSCEiYnxtGozXOCMAu6UlibS/qBByO2bryRHMlcWxn12Cd3RAeQxTAJtiKe9wgJZd4p1GFGssAGuK0rpFKSbS7Pdn7InYgnnyEOWQUQy33wJJOmMhra6NmnFUEXvnYB2PSp1VWt48HT4QeM4LO7FauEjFjiQ6teE7A6FcWMaOJN6WoElDT80s0eLu0JLRlhTYWTF7tGAwL8Xr5oIO+XEIkEAJEJeXeQkB0oxX09x86KIgwC5CmpOg9ZxeXhBELLb/LVy6tXr1clQ8cuOFEetZmXNxNDLuxfazOoy2Y3J4Kq0fyCgteffVV528oyx4+2Y1Tqxi23L0VP7TuibDICHQASMoiNeka6hvlhTz2NJ2ZOECcmgrkqJez58+YKTJErSviCR5k9BZo7FuExSHOZRRxSMclOD9LMI5KQJYggIKRIXqIE6EwGgY0HEgq49WGes8lQNNlCQ1+sIoxIYwBKBH+wFHcN77xdY4kQFufLTF+2IlmlYJclvxa/ogxkVQI8JbuMMCQAK7pg3PpMamhLDt1Kwvb9CU7Nvzp4Bzj/cxDcbiiUzey+8WbaglWKsLY/pBAn5O9YZUVsQqY29zsT6FEcRXl84OVjo0ZHWQt8tqX5lfR3lKEXxQUJ3bzDrvYFUTjKqeKqgXnz56urqwSgHVNlSUwQdVbpIhgcBMbGr6av54TBJ5ibvRBNNUKtoloADEVCRTnrXuGBKU8i4u48eAN61kRt1PKxIUsAwPjJtXZDO9mwOgYLFQE9izOcdweq4MqeclIOyPDocvK0fSZ669ehrwbzyvnl1lj+uSHPuykEcs2JHDKPhFsAnZvyARcPqD4re98p7d3wMktDjXUH6d3EtkE/MQTj7FGn8rCI551FXwizCcEZ1PTDxw8cuTYySVLl5kB0AHgifYAxA6AJUCMXAfAZ7zgbAaATsMCnxA0QxiNHQDVv7a7E8FTHfKtQ59yxyqgMA8QRrCS8OpsDqHWQMudmxY1+Z82PFUqRU8BOOYBBLRAJNANOwQUpxSZPMGwt349ZIfe+tPlFX5c7gFrtVXKPPH6F6P7IlKgNjfMM1g4Bw0dAH4nOkmKn3mqvOzQ/Z6dmb5jVeFMKB07KWkZk9Nz76RlN7T2llTVliysKa5c+Mjjjw8PDR7d897y2hrLQZ1YpVHL3ixSclnnIK8D4UUMZzft3r2b8fheyroNG41QUhMfVEFyFosfaIqpYNvGWZrlDqKTQz9F9dHxsPOVj0uPrGRskm34lVc/Af9MgosBgfM62l8QYFp8hNngR/yUSyRhnJgRl9B/+umnUdNwkZ373L41zew18iDvJH6vFKfped+9W9HBPFZffPEjFosiZZHZ++99oEnHqvFsWSDfl1hvHLoiACL+3Lf3AK4ww4xxkswVhBYtO8c5H1GiyKNqJB2oHNpjPmqwvy/ZKrpJXq0BYS2ioW9jIQcZqUl66wpIRBzBR3z46Ec/qp0BNNQUx30oFH3IiDwgxZKQqIvy2Zc+IzjwAk+0TdXCEEBHRkRARF6aQt/Yk1eqd8py8hv3pwh1SlayKJGDE988l4fXmtFuUTN64tOTehEeomnqXuscOML7iROn6AJl5qp1LaVQ5jKxINqghk8iQ14a6LlRblQiNtikjNgzfEnLmE/iwLQsApoEGKNHkkpJQMFWei3nw0eO2V/L02lKbwdj8FGJyC4xqSVmTlzPJQ0mPQeyjh8GwqBJ0uD2HJ4MlSoRQYEW3Dil1xTiA/eFjyWbATNNZMsvNd2/7V582kOC+BOPP4bDPT//4NKVixs2rnf2TmpKaM2P3ZhCxNZFJmF4kR71uuV99tlnyLV4ySK2aqIO8mocIqityIgU9amO7RuRWMsBhgIpDM1Q1V9t4mVkYcweooNJaECMdKBWU8vCVJiiJ4aftDJ37HhEd46JMkvK0syQEm/URC/YgzyPUP1dveLAnGrP5bWkkxSabYbV7BbjGrASorDnF6s3Z+bkF5UNarwm0yZ+4SYLfnCObMQWNaZOF2wmMyuXL0gDZzxzXn+SQukUrc0jMV9QR3irROEUIJjxPGoQXJ6Qjr7UYkBjZpTuOSOxB0AyidlJErR/cVqOhwoSNindWwQpDp+VpeUAREd6cVLRciVFh5U8URDtZ7kkkEVc5guSycJ4XnrpJVERMzyd+EyCjAoCEaGQ6mjvEuWWLV8qGdsGmugOnOScxuMtLa2aIqaV/elAaQPPOUbUkCgulgZEynVDXqXTLFY9jFDA01usYpLsfgUT1u6tZAT0REYqkAXguEIqEoxQeOVGegl4oj/liqQ8l8WV5Tz+BPBIR6E4IWnUBQH9KVkswsOUh+6qNKPBOleuXG3CFwrbtz/E5QxsUCfIcGv4Xx8AvoaHHdap7/7OO++wSOyKp7hkCv5kNBpMqGOOMKIqCVWaaOKJJJwWx/Qhi3YhJsBBx/hDk0qSjKE/p3nNgZWIGjviCZs3b0HHh6wJRlt+bfAiz8rVqzjJmVOne3pCGyUob+kSZZWXlyFu/FPIU33jxKn/YhndS+YaGQ3fQlK6wKQURqN0OhPsxGueLwtMNJQNg0GKqgT3GLnAyo6NAXNyREhHK7ryYqs1u/iHA8qyeDUwPKT+e+ONNzkY71UdqyzJbl/59u0PlJYVFRWHb6l4AkNkWapcPAQdZLU+4UYu1PA2dSOMui2pWyr2OdnNcNHDOx4x5KxhhjcLqBA3fUwQ6iPX/PKw+gV94UPzyDy15woSGXBopFkp0AA+t2y61kihTdebZMGDOoyK4QAQItAprFTSFAEQPq8syXzEFHQ0y5+Vq3vNeDyPti5+uaFxevc2IkMEpLChCGXp8IDUDaXTHXPCkr3OhgPefPNNC9M3rN8osV6QgXlzW5iBhixmk2UhJriIgAFYERCTfBLbsXISTAmCLAUxKj5AF15BTMXhuYfE8RzgUrqhKTW9G9Wnh6QDlyw+lKP9QSlCsHJxYu247LQPZAfOChnshPhQYmzav9Ed8IYOno2hMhvLwFiv/ZewYnGQfOiRR/p7e3Uh8nLCBIvmC0DAJVlsYSNoWQ54HbtJWE4KWK2ERvuKxiYLigtOnQrzD9REdixxaiYKZ8m4jFfl5fPNpNE44xHK/XJSw5DEJJl1CKIezxJNvFWEboClI2YR2IY0LAEPVr/qLQOZRI7XxL+BNCI7c8b6kDVr1/v0gaMbITbt47F2+NkJHlYihtGIwaEbX/unfwqtWouChlEoYQl2aa5YXvfIIw8B0IZvG+8wVlhU5pTC/v6h9Ky8ffsPvf7GWwtrLIGY5ozC5S83AesAwOeXHYBktU7oAAgpSgwvrPTXgL6dnH026zjNWd0SK5QcAaShHhbhWDGkXx7PAjL/Pu5I/jDUhP8wjH/7ljcOQLPYCTI6AKjJLosEShHfIOyeculLEvizXg7Ckv16yxikB4XBiLnpqQxY98TmKfs9JLC22K+ZFpSdkUsRqEGevpQsoCslddaxpjdv35wmDVfyXYGbdp+l5YzdntfU3p+SXbDt4cdm07LsLJ8ZGzpx9NCuXbuolQEcO3bEEA6tYWzbffccP3KUP/Z2Gz5v1qC0YKpmyVJ9pFjfi/ZU7OQQVoFXdmLpnQhD18KCDiSD1wHgehjmaBRBeSpXfvTGG29gk83wUM7FODkIzzKKxpyYtydwAKxkGlLiv2aNFjB88Am0gPWtW0lomi3Mz5UAWd5Ed/yF5yLogAdNJaSEuPnzy33cCpNWebW2tOm16hWgoNdmFY1CeYEVj9rl7jmCoTvRhiCCA05EVMRZL9dAnFAiAAGxhwhbDWMQHa1HDh385Kd+XYmUi413332XUM8995xxGVrm/kKB0Ep8ohky0FLHiT62UmRRCvTgiRkqiM4osCgXS/oY4csPiZ3YpwtzWcDCWghowNgEO2oogwUdFlIcYlCBjz7QoGoR8xcvXaY1LsNgnNNKlefPXfRrMpDb1i6r05DFBhWcOnmGvh588EEtVB2fVauWQYMey8rCyLF7gsQunLJA5NLsNjFLF5CBPL0DKpoHjwe+9VHgdWEGk4CSV2QADkPFHp6lJDji5Dtw8PDTTz/rucTkEmYlAywTRRz4HhLfvecYwLC2gfT+dC+9ZjRuxTfygoKyxF6vlKit5og5v84zLSktfuWHP9IZMOj6+OOPOufs9JmT2RmZu3Y9UZl81vDKpYtWAVqF6whyn0iD4fFjp+Fmr5VyDTkQ2eLGF154YWgonIRraJV0jsjGJJXhk5HQAlgwLFDzLEziXMAXysTSRUsWizf2PMMEvEDAP56l4eOIxFpVQT//+c81plVwjMReLAizdvS1XnQP0JeelSrOjVwQ4GXGQK9cbli2bIWGgVPtvRKr6bqisty9qo0ihEAugP/ma01m/bt6hjPDFtl8rLI3sOOKTmmZCG6UgjIE8ClNb9+gBNKDF58EIb4/cYIHNyzEr3uKhiHwsU20SBkRz6lPRtjycboGDuk8V0HXLllMd8w+YT4sSVUctlmULHCIxaHjOXAunD7rFe3DRJfMfSLpgBE2TwArmckfBUWWDFcAxytKMY2DVa5HFoDwCMQJSylykR3nCxfUSGDzj1wCvBDnEEUx0Epnlib0WnZljlSQdMT2jG8M5xvVChdxlIIgltxjnn0CIYTxZMifwSgFY7CVzENwQUOhESsgQNhzsEtAFiWi6U8PvULKL4bAIhdMXBKQ1EM8KDrNrGVyoYANGeHj8mfkR1mxFMygnHLvqlL5LaLx/W24qJwEUOEYHBiGmo+VCi5Gxe69d6sCigtLmAgTZN/abWxIGpIQTOxgaugqCfeoe8j+Iq+YwHfUELbc45gzy04rNCrS4cQReYiILEA/cOgw87KxVcyNO2VLyrSXi7JyuPoveqXiF/acfKdSEYuNppdaFpecEs3OfAYcQPhRljP18KMPoKsQlQQgN2peajDu6C3k8aY4MRqmABGFHECukoMgwdmQUB5blpp3rAd9eiICq5VRE89RG9qjnhgspXUrp3FoYJBNXK1v5OrKtDBK8+PG2JClyT5eC0D4iBE0KspwA0NBHsZ+kYLEOPZq8toYKXtt7WgPSknPMmhkAAyMtoHi1uEx2AajysylO2FzJPyVSASz8e4FLBScbS8im+LwiuDUQa4djz7i5qEdDykx1qaQNEBORoLgilxwkF5FqNrGoRX/3mKGw1B9tByxDGNIeU4oBoc3eZVITL4HeW4PMffQoyngYNufMDR8zgndv/jiR+j3+Imj+uUSK0jRliNSBMNQvdlhIrteDbKye8K71Nx8SYRiKmxSAJWGdLilFM+xp0pjZozc0fgsmVewAXYiC4N0oz5jqxiWEXSMGREIhK/SLFigD4BnSyy0eIyqQhWfQKucH2YnbTXAAw7P+YjG+bOg44lwjk3DgqISqJp4gVhXT7cGvcl3opkZ8DVOreVdjz0ugnsLIhyaYiUvLZw6dZJx6pAYuVepQxsPGmRr1q2dGJsoLC4sKy2/eOmCmtUrW3XJCGcmSmV4IA6UBFVfCuMF/iQ1Ch66YmRR33iCuMqAKWqCXGtqkF2EwbPlAcQ0Sm32QHbMGP1WCl3rhNctqX3+Iy+Y4nc6chhxn53VAQCaRfjwNKLGBv7n33y1K6x2SA8DIDm+zNCHQ8Q/9tFfra1dTCOKMIYk78JFtX//D/+4ffsjhqxOnDzz9rsfODPXKhSjmJD01RHhy7KWqenYFJg0AyAXC4dkON8/XGGMzRUe3wkdgBCYJXNIkP5Jahh3t3NYorAnOGggdAOsz7f+RBE6rT4xJjj4lNX01KRT32jZ2nQ0bk6FQR3bgk1KW2OEvvSoxbIg4y352KpXnlPHL9noHwonqHhOI2aFmKtyPTGHEbC6M6vjzGtkYUikNf5BkmxHw1pI6iNhE6Py6rikpuXcmZcxfitlcPy2bkBOccWS5euFzfvv2dTd1cnshTLHM2GD0b7++k9+5bnnlWhBsD9vTU1/6EMfstLJ4JrtBUYodc61/hmbSKJ6430MgD0bNcc5T8RSe3sYPe0b7Of4SDEeoQbP+JQSLMbg+Zd7CJBLAJHSDYaJ4wZKcqky5BKdNJo5HZ75F6djqEih461jHJXonuwTY2HEVFREp6nhKi1YCcNUjM85BpS5WlU4PRXWTeH/85///H33PaBozCBuxQoiXvEycdj8nuwiMP4xwI8gLyxg2IrWkCZsVA1tQZLi03FbPivLGXFOWBB5a3hVR4Ig0hBKvWOrrnBhVNjSIMMWvEboo1aloC9u819PRDDxRBFf//rX/WlvgHKvNYblEKobzi4yq1IFMTFTa5IUpNPT8FzjSY9CVIGOFok+G9zU1DSlbhOjzHuJ6qfPnuf+VvkT2YkORnWwJ8S5oG0BKqgNE8TYi2HfCycm/UKJCqDd2tHhFxG6ELHBRXC/tEMcbJNIKCA4tmW0NgEUgoBcggA6Yov7WIsJp8IIUlTD8PbvP7DryadUVVGzYFE6YaEHAVqWHqrCRQRQtJE9kWjCPb24GKQSEeRZ6AjmAjhsEz7D9lD0TFNBjAn5cs5TTz5p9T9fUM+KilXVla3XWfs5dNIz02wAqF5Y5TBuQJ0+dZ7uzp07r940Y6mntHXrFvfGQCFgxbnibLelUJcnoiVbYlSUpVwiR/vBGJWByxK14qKyn7z+GoulI7BHC4eh0sGo1mNR+urk9ZaF//sv/b+cV/tYP1BiRTASTSOWQ1KIaRIgDgGOZm1CZXnVwYOHncMmr5QPP/wQALXWGIDqTp2oOerVjbFgkA4A6ugarFu+WkpMQswrrSbmTZU40bCJdR+03QSEw3lpoWkrJWpklIx+MUxwuYiAGt1J7IbCCa50xBGhArGFJVNcrKCZDVKA8gvGtHk6LeFSnF/I4J/SyRtRcs8q8KBhgFSRj6YlFwBpBOduXHIrIgYNIwmIgwgPPtWKK8+ZGW6jIFh1z/Yo16uoTQpiotpUpDMrK6/v23I69a8nOunEWbt2nWab5axqL8NEZpwHb4xoViqOPbjwLKMrNrIje7JLADeXsnDrOU6AxowBIpc0HkogI2Gl8RAmnkvgFfQ4OKFkVBD+pXFJ47kSuWRAoCA0xV2IuNwQ36/sblwxu6KlRzzlkU01iDrtASv5+bGbFSa1KUD0oW8VElMzdmN5LjezUgb+rFO4JAy7Z6Yskp4iQ+yY75FE/MXl8eNHY9NKYW68xY0RWcp2jy2/2NJa4m9i34VzF+WFtd6waUpn/Otp6UPb8nsjWSRXXBpOBVacXFRIDDw441+YOHvutDhiQJqQmGRJxr+FPNZGRktQxEHl4kQujQ/JcKjPAKlly5YmTa6wOhOOhhoJ1dx0zfeSR0fGJFMjgkWVhqBy4Y5m7NQiSMHA0cBUYeBcuLQSgzhCsRNsuIoMihseuQGlC5cu4tM4jaVmvrA5Okqvk8L0xo2bdWRVwGoWIynW7pvK9wGae+7ZZrj2/PmLwFxUVS061K0I3yVwyJL7d957lxFb9YuBBQtDn1gDzlt8EnP5sjpuA2Qyrl2zjiAYEOvD6oY7d4ROrVDJVGkw373354z/rs2biAMrvQ50eI5mLvGlpy8jfJCXWAgY6h/Iyghm54neMAFlxADDEMXoUT0tGQO1HUrFgEPHHYoy6h5sKN1DtuQJqxBK2DHjlkv/B8/FxUXPP/+8wxlbroe1pxhAwYQ1rsRrBT399LPcQ7nM1eQpHKQhOPq0T004F16hJCPNkhRvmPWKjmiQvEzFc/HFDW4FAjUZW/UncdDxS3DxWkDXflEchhnVwQNhUcHszO1HH31UMkQcEkocjUmysBCNjP0H93d0dvJ3MEoQBMzM5lnmba3zabrW7Gwr3kh8n1MQuffu2cNi7Daz/EAs0HTEqik70d+xdGTEjPFFf6rR+wYnqheUGpxAzuE5gpTYh9qp0z5dXLdo0ULgkIi8eObgkhkh1QUyjAEZTiQUUgTp3Csu1lsmH6TUOfTQdIQBFYVaCOtwXno39IElsshlS5qUNEU7zrGxJMOaG/1e7WwlmlMXHAxak86nYHjo977/Sl9YOpxr3aROgE/2IGWnwda7N7NzrPoQrD0JbO/a9fYjx048/PBOi1aPHT/12k9/5iP2RhA5I8oOaDeooeulA0Aum5SsJcVksuDcEp2w70oJpIu+mQzKMI24L5jp6wAI8rNG/5O1QHYPhzE2T+bM3rKdACWLfphimlJCvhlTB1YBafSjaQZAAv2E8Jsa5iSZYsiu7/IvJ9ZBPuRLhhjiK7+S+URoONkn2V1gRIhN4tBzxXmo+ycjU/LcQ18yMKaLZmbaPAM7auNb0+OYQepO6tw789LvzMuevD23z1jKbEZ1zYq65SuNii1bVqdd+J3vfEfj0lHZDFv88Slrtqpohrpt6z1ipsPYfHG5sKDEGnrp+YX2ZRLMm7HNoQQ3J+fwHSKTUZ1C6d19Pd7yDspSfXJtRqJTiiB7EGroWkHsHJOSCQ6xZemegWlteM5DDe+gzEFQJiBnIbjIyYUxfO/WLfxLfGBvZSXFuOKSSjS7a+JCfEiI1Ogzy+vo25Hk81IGDhiw5ayacQhSn9W6kSx+rPxSIpAVgTKaOMcJQHg65lV2THTXrl3kUi4jbGm95vRXc8UiOQYwpvXPwfFm/J7hMXsMIC6x89q9DWM0yRERiIs5IhVApLeuVUaFvvLKK1DSn8eGerCjtc3qETbAKxGxY4HqveJTQVPbtnFzbOt7EMesUV93GL1yxCctmEOmEQODgHV4JbdduXotRbzzznuy73h0ZyLUgO31eKNE0dJYiXAigGDeW91ppcRgjlXatAcLhojj3y/6oGYM1ERMgrhIJBdZALVmTVgYjAEhEeeigV8gY4BQwMc8HARbiXU4a5cuU+MIj4hIRijZhVziKzFGQmXhlgYZEt7I67kn+ME2eJFVjwsdeEZWiaSmHSd5WCfJTvbs/jmaqqPqykqbyLE6P/lAZ3GRA7LGbAJWBK586M33SSurK8wIqnFWLF9jINxoNeZ9QE2vRmDhFzo54u3CRdVYMk5KFqaiAsL8H//xH3tFX56wIli5Z8b79u2zqs0MQEN986LFNcqy7Yp18UQQwVMyGamDdzAhQsHQIiKTWugzjwSusOZKzSslBNAHKR60SkFHBP23jtbO/fsPajaYauMaevhUQxca4giaqoU/u/J9Q4BP37pT39hWUFSmRsC8IrCkdBsG3n77bRlxxWGBrBTwejU7J6zCklc0wAYVgEUrCLyBYNKqoSC25E8aNAIuV3xCkGg5mEcNOIwH/ag7ZIljOSSEvWISckmAN1IzNs08IntOyywBcSkz54bmsosN+CAmhuUiqdFqWdCRRaxiDETDnt2J2jYQQAEpUsvClqhYWcDxhFAKBSl+LKvWDWhtuw5D1Qm9qI+kMUwk18KFi2wCEVUM+JhUFp9NxKoMUMASCkRTkHJxi0MEUfanBFzJBShM4tnlT1ADB2JyYUxBZHFPuTG7X/zg1kMMyCKN9H49YdhuPJQMWcVNTIfFt4grFymXNHiL7V5lxUuuyEbKAxsWoSuP8S+9n0QroUqjMLU/djVEGLRpBxkM99qMIL24qUgcsGwOjEVVSPRMeRFBjgKS7ac+rbeaAqAvPfXQouJllMxDhmUE0Rpou2cgSGHWdoWmYDiluGVwaLi0tNwkL1t39A3v1bwIXOXb4b7a4O6l8xfI5kA9ZAUColqTDS/GR3ifVYIFr6PpDkbR3v7YY49RlsSJbsKBxMYAcGJZml+mIwgODQ+CjwjytrV2Ox2VCSrUE8akcaYUgkBWM5fsnqMMn5qF1b48YCiUXCdOnSG1/nq/D47399u9wHNmbUqanR0YCvNcR4+fPHPqxEB/j566Rr8pCE0WiyKWLl1mNFSDXnNC2w6Gupt33WVB4wZe/f1vfwsnjuo3R3zu7AUDTgARsqURBC2tALJxAsy4VAlMVAQ2RKE1z1TUPQb5lO4z2pTILj2EFdm1UF959cf6Rffefx/+1bKa0Ya6WQJXQZyCeEVAtb1du5wltTRfc9AnI9afQYEBUMG1lrA8BgUQdfaESWGXcpkN59dMREHFH6JS8h1Bf8awzpDgKbG2AuSV8sEH74PuV154zlAHClQjSGX5fHJvLxCEbM1oY2YyYlJGOIg4/AEzRk1ArRRsGJlTK2CAWtmMtq/EkgGKxgkio0LRdyMBZNizSM1QmQpqAXPTmlOTZmd8/E8DQkfIufEAaWttPXPylDbHprs2mlxWVU/c8O28ReoAn6nfeu9WFSzAAWIeIDjCjXGVwc6dj6lsWtv08UJ0ULTWs6/Z9/X2dLa1kv3ebVvBbj0M6Xp6urF3+crFSKep8ZrFHmlp6fsPHXx/79naxaWM2XCI70IYrczL9pE7663FIMPWv7hAYamSqL2gJqxI1lxAnOOQy/IqegEvrQkX3hqwEYxQsEl93Ro9wzBaoAOgv0pTS2oWaTt7AhB7bygxsd6RBZULHJLloxwDQ4M6AMwvLKp1kEDSttYBoIXDR07waxN+eiopcw2rhA1eGzfetWSxZutSpqtlz/g51IGDR50CdPfd9+bkFx8+cvxHP36ttm65Q0gtSvFWm0ytrANwayasVTP8YyQJjDoAJNUBoOtwfk8YfQ+N8rDQXgaR2nxiMhvAD9Vumt7YmzcXOCF6hmmBO2rW0AFITQmN8jgP4GZqciL0anw/WKtdYeEbFwC4qQOAsiuUpzeZTAGH7EmjOZSIq3/ZvyWvoWq5LPsJee+EcSNLCTz3jfCA40wI3x6ySaFepWNbpwVMvlvA2GjQNgb7nvVnjAFPOio1LSs1I3dk7LZDgbLzyqsWLl24tHZR7RIrwOwK1dYsLzcqETbj2uaqFZuTHbaqP/TQdtaYljrX50Sam1pOnj4lGmv9C2v8AhdiGhvgMpo7NI4x/FRWVjGYI8ePWmrMqmKLTRS/xMkXAAEAAElEQVQiNasGiCcyCgLiiXsO4hWLYmnCQgArqYpoWTKGoUHM8IDjiXK5W2xhAHPt6pUcX72DK0bMcjiI9uqD99/Ns8QilIlmybs0TO4bX/8mHkShl19+2fkt4l70WXt5BYTTpx2sviKs/Eq6agrV9+ZQgjk1kRoy6EtpPAIzEmAP246hs/QL27HJJQCqSsgOGR6aNHdCL1FKT/j77/7u7wKKl6kvSOS5SIUsePEspFjnoyCdBEEGRKLWkUMH1EFExrCvgEFYjIIhNMCuSyP+8E2lKNrB5KHNk5et0S+9Dj/LcbK+zp6+sRDknEdf/jpw4NQTTzy4tG75iZPHtj9w/+49H6gQxUmuDVUfGiegWjXGQO6jrtF4UtzojRvm7vGjUJSFR7KDGs8AUX/hEz4EdEPLuF23bi2LTcwmDPkBJ4qgWteAQwcIbENjgNKNMPb2DVh+qOMkgThMvwgaTMQeT1Gc0nGiOOlZKY2gz378unAeDVLcQAEdRXuLNyKoJYeHBrRVYEu5jgPBkl0ccoljADQz0Fh/FX1xkkNdrr9qEiAtY15jw3Uqm5uaQV+9vf2f+tQnzZahv3nzRpq1kUAr3NoKBTkEBowA0dq22EZBcd2X4JkEyTwIsA12pfb86c/eLC+rfOiRhykaq8xPGhcVc08l6g/DB+fUjSA1LVi0GLckpSkJ0EFQb1nfkud6zkdAhAKIJDh3+pz0cF65armUlIWgiM1mWJ1kwogSKQW8E1Mzb7+3e9mKNUqkEQTBqxugJnXDERiVxCjLCGd/9g+EtaNAdmEGn7SGMu1IGfXFOFmLohm/6Sm4YV5iJVJutG3UeCjKSmE5NMt9MLl508aYMTIPKCAoC8FoSKTj8ipBLMmVMhOmI1zIWhscDcMr6+dpCnHUtGFQdg+WuqVLmQqNE1ZLwFs8oIw+9jgaPMPKkWRMUBPIcg/EkyZbvyqPXRmOCeWmhPrFeQfWoBqcFe+tbw3729Qms7NwwDlhYYUxsqOMAVmU6EITDzEZnpXuCb+AoT/dwJB5SCOXPyVAB1d8EBEPXbJITCl+pSevQt3DVhZyuRwTh47E7r3FT8wofcyrxMgPslKGPcs04XQQTDtij2VoEUoqPx3jQ/yyYdETVRLgaqoNHQ17qA3HDbguZEmL9UgaBQVjiEalYYtcyltpiES7SFEMpTJf+Bo9lZHpeEus/JzQP7PQQBEd6d2WO6lYLfR3/rctaeZcVPG+bW4RgqPHGe7zzzxLhVgiFU7ICSCkBGv3B/cf2JPsalKQEGOeQSinJ597wpsD46zU7esPZqRJx7i1lQuLCtIzwiomDQWNhIL80rqlN1UtSS8oNGhYP9GYOPpqViBKTLUcqfV68+Ka6q72NiH+kYcevHD5khXqtopjiReaUMjKzLbIwBiVlZL6Bgq0xOLypYsCk3rLKeYdne29PaH38tijj6v4HexOLt9p3rt3/9kzF6xrrK5wTGqdLwFzEkIZiLLiglzMiX0kNhosz1s+89RTH/JhEc1N+IcYsXIlVF0xZFAT/RKZjtwL688994yIZlUJ6aSxAhVotCMAEZypcH5kiWNAC9rWEmzcoPW2OG3NGjyLcZB3Oj5ksA0TKaXHFdBafcC5q0v3DNtKEYCETkas0S9WYoC5UwQ28E9HqkzjK1rJkD9z+pwqU+mCi0pcKFHHo6OLCHwerkQFiX2e8wf+j0P1Os6NoukMAIEdMhUUDHhITN3yGiNhe0oEkT/FCLKzXnlVYAyeFLjiIdJMdnd5qNmBYYZUmJePq/KyMihZm2iszieggWw1vNUFO3furGtvG5+0pi5MmOBN11IRqgrGiQ29XHWctyjbVGSZ0/XS1g3r1m7dvOWv//orbFut4zBlsa526WLQEUQjgzrUbQBcsqT22Weez8wp8iEkx6bX1labJSPg8vCx5ArNKnGqr6ffFje+Ri4zFawiIzuT7BoRCEpMp0WFJRjAHsNQNxvdIb5uDFZtETEooCeASaMEyczyuIXRsEITJjmV4UB3+HPA2ppaTxgAO+TC8UIq2doUxrPxrCBP2AaHcYqmSMWKgMOhFMdOhGBoUzrLtOuXsPzLJbuM2EDcryfmNq2fltgrVyxUSAt/GJ0PQ+8hwGnlB04SjqSZowl9W2LvzQb4JE5I4wqZwuDV/8/Xf0fpdZwHgnfnnCMaje4GGkAjZxAgIpEZRDFJouRsBdtjj215bY/Ge9bfmT37z6yPV99+Y896bcv22JKcFGhRYg4AQQJEzmg00AAandA559zfr+7V6J8N7yFf3L5v1VNPrqeqnqqK/o3w99KB2UlzCylCRC0lJs8n2kkcVmltGw6gIkevAQ/xJ2o0eH8fz77jYp5B8+3jJfKpK1bMR7sjvFRdAT8h0p+a8Gz879CUrAy5QItzMwsu8HFpoDnVpHC60axspMk5JzKP2DWWk56zkJPmuf3B3fySIltd0lMzJPmQr/7D8Ze8BEYxKFkzWK1lPIzTgW7fucVexOJw4MG0y9MzZGUYCLNlp8RKo3xc++rPe/cfF+SFQ2NNYFNFomdBVAsED1rUL6iOIlZMhVgQsKSsUbERbYGDaMx7SsjP0D2FqSInoCTIMFcYfDr50ckbEPB+w4ZyBbBUizJ8Pv74tHPW4eMcTN5JXj5rpY0mGfkHPIwjCUQZwrNKc3vAaogfYAKG0GrxPwpTQtE55NXCDU3wQly3KxT1hroGyvnCCy/gAAQgDFXdB0l59oYj+uM//mNJRJ6hjUDc0K6uEI1g+mjrr//6r2GODxYTcEajKIUMl3L9VuvnXw7pSTgTzdSEQ+1M2xMBP0AKxOc9NSmqqR4c6jcYBFM2NSTfePPtAwcO8CIE9+n5iwzTpAeiCBGGqgNrbIBwb3RYuI0QnlOPDAdc4rrJTouUw1VHZAptkop9OGkyQ5QiDbs8QJJGqWJN0iZvMtK5+CCc3KGqil9VhwZe8cl+BVZyq2RhKUCUhDbSOr8qzNmCiRUYCFukccJ4ri1AUAEsh0BAuBerCkGLH0gKRToI5QHxpqW5SSxqXKELcm+0CRRVJBbSjb7eHjs6NPTcZ57Bt48uX9m1Z9fA0CBP3tszaOj4v/3p/0/r3/jGf9B9sFGOOp4Ywi6NwocmSAGCiUxgbKS9SLDhxDMVpTM+quAkOPa3XL529f/zx/+zFmkCCPovCmDwaVyHRjqgCYToPqg6vpmnG4mu4aPtgKuF8+BTLZTiM/4gREn0olrsasPStu2b+G0rwDoRUyqaiLMbcAbr0NLf3xmtTSZ3dPXocz89f5nEYz9v4h9d0sywmorilaZxm7OFMIkMDIYNfhqliiToG0yY+5VoYBU/0A1yBAHDfaPOR0m8wg1qhkUa9ZK202dlsMgcQewNFKAwCES1WjE/IUYPFfOG4sEBaUW5YWY9Rs97AOHgAZlwwB+mBwe1GJe2QFAYQD0ggIopoIpnHxqligKUB1a+e7pDRvrsnOziXqNRDEGiAtbNUKqwlWYC5cWnJqcXZ2fgb9eRVqAHGTxRBVhvYKUibMkrdgsEilLVFYADPsck+I4/msD/GD1M9sF85cFEkfcAegDTe3/GbfkTKHW9AQddsZ7EclQdVr7V9VEMbritIX8mbqjOVT/XUnGWmR6ByJiflMYF0+0KSS/DOxuuscOa4+oVy3GWPJg0/NAMFWrKX1A4pPpJ89oAwWQe5hhtg8OKREv8td5dAauQ1IvZsApAtAj17s6u4oLCO7cb3BLqk5WTj2WXLl+VWOyeMqm7qZJfkxIsizsQ3crv7My0U0pUd1QfKlTBnbWrXUhVBwHex1WaWqSCWhfPo86kjnZp0vDwEG12WB7S1Y3nBTHECcGRAII4sSInu5DIQQOZBhvwCO5JEU8RBWfffCg8lZGimrw453Ya+Zfr120Ym6SOw4IFR/Q4xVyyvkzoyWAecz39fWa1CUPY7nrC69dv3rlzW3OGBKTQ3Nyk49mwYd2+fQeoMbbfvHndwNjQsfWRXf/l+w4e4FVf+OxL0HCSDGU9cSKc3piUHNylfg6qPKx9ck41wRYFRMAkoj/mdPypsJ4ydlWkhuSExUTZwHTiyvVrSirjgzTRKuGK3vykJJdt6KIHDaOp+juWU83IsWT8QSmVcLg49uKt/saUueaEP7GCymgcGQhT7+wBZCpElzCQGugUycufsTJoiKGKDLlUs8JtrY9R5I0CRuFo14WwWOzlQNECAkFbdUU1F6wABwd/mBM9ZMBBo3Z1XWwVLdwuaJaM/Ul2SkJAF0KB6QmsuEWaj5+E6w0XmZGddf7yJZm00slwwEy/0Yurg9EYb05aUl5++vTpndu248bo8Ah+JjprJiVxxfKVKLpzpwFKqeniDOONeQjfrr+DKJ2NzEIT0aXFhSeOHeXTBUV/+r/9CYfLXZiYXrd+DST5PXcLcmFupzZitwHapHjl8toPTn5449p1HGZEc86pTAgLypahTDOPjYyaHcccMYrRLfWWwoEVuMQG9cdad2YItuhjkCkWxRnrKixCb2enx8rlNQIO00jSsYwlrIcKIsFRBdV2BGGXWV5wdmzd4bLe3v4e59KKren25OgIR+OWXxIH+S/+4i/MWYt2rdCM2Yo0w3cvwu3gwQMu7DP+IlCz+gxB8LR9x27nfrKVucVkKUBvvfP+ytVr2traJS/pPJDmKz0lNSs7hAtoNHuvxbAoGyL7EJTzlr6hSpTJ0sgsvEb5+grEH0MBG0zD0f4J4VCgaCdAksvCwnVgCi84zGgu7BUmwNQk+Z7zCzMJ0QKCU4AUsCwQHG7CT3tBbfl4E380oQzzhFWs/N57A6n4DZVzVmpcDLdDho/PT3sFw60wtknPSE5LD1cRT0mOnUuMBg7BAS4mzCSn2I8cnOT8QkpqSk7iYobdW/1jc2llNbufOsJBrV1b1/zoYZRw4nKiymdOnNAxWWbkbzPSwyyRifwrV65l5+Q+8cRuysBaY5fe0HBPixCjJNJmGD53SmdsUWtsvPf6G2+sXLncKqJAE4JK0gQioNix1ZhOoxg/+8mZQoDDkwIzYd6DTcWhCS9BMZgVddUcD8AiKKryZSVFeCIoB7OoIJ9XEWlpZd2a1fQNBKre0tJ86049m3UV+meeex7HFIgCiwzfzJkfcP2cFoVr8Dn36QU0MltkYoKGZHH4k6PgMIVl6NUxc+9cE0+Fh7qGT05/LP1SZAZP+qmz4yLiwYN+hMkYpYPwG7/xG1//+tcxCtpmi8idrEUzaAQTkt/+9rdpNbfAR6GXMvC93/nOdwb6wmLmH/zBHwBrWkFUJwqB85tvvmmegu/iyiBGtXQ9mzdvGux3ekHu6rq18Pmnf/oXbH/xpVd89/bqhbN+/MZbhw8f1lci5413Tj974oAdEHV1qwmFCKgnUI4xIQuYkCkHz5GSAn3AtOwQp+VbaSd0TGCbWIrhWKE5eCIKJkpCnvMkhZ6ebu4XZyi5kt6rIqQWe4GP1ZomR+LTX7idanhkTGptHPRzy1qBiXgdGp7xE54e8JnIkA8glsbfmKZFOChmhcozQvBccxhORg0N9cVFcqDndmzbol/AZ7MADmYwEhhy/sDYSEFeLg4M9vfGejgwPGD5q3+w7z/84f9IahcvXL148dof/MHXcVPkRo0bG8NhEoUhcWjiwsVz9MSV6lIAiJLmk7t2YashVTABWHqo49ALfP/73//y17566KmjlsRpLJwx0HYRauNPPPcnODSQyvmVTQUpzMxJG6Y2imGsgQpDo2+yJDAT87FXFwATLcp8fuWlF+gnbKXdCTXJHcIEZHUC94y18AGH6Qwvfedu4+DIhDGGAlokMk3QNzgwQMxEDhw84LlvrQwOjXoJFD2nHF4i3BvE8vmQgRWSiZigPZhJix2gb3+Cg1Ki9Cf1iKn2TD38ipzH7W0G5xjCYGNUtaUhTfhWHUspA/T86TM6MMTh+BMoKUBIQwh1evjwPhmhSxWdFIpiJpt1B1BbVNoHwuxRGWpDf9ASq5YHf6ou08RHNwRbSZLeoEhzxp6wtalBNCj65/ZcBOYwLseAmsBTwK/AotQH8tAGEJJaJGha7Vd/xqGjAqgA3HdcC41MzAco5PioAm3sBYFQ1IUq3PypIkEwBHCU8WsMDRULiSF3TgFwYBLjoBhZwxDnfauoUaC8DylAYRpydgFmphDURJsSYNEkzNJnGQmwdheycvXSvu0t4pGB4CDoAbdOMPyXNnwiDoSOwbMuRyizfsNaLOBSYQMO2hibbx5TdSrONaBN0zZfmKfs7enRY9urZMCakpze2z+wZu3aLVu2mXmdC0O+aWFlkE648GtyqC/kGurlMUjTLMfdiqAZYFDumangTfzJAWVlZOtgnCmJ11yzdpubH5ERlGBoWl1PHRiUaJw3Bhm02+MqW5hO4CbkaTwqNKSVaI4h9NlYoaeBA50ON9UnusVyMuweeBQuB1iytNJNvXMLCXhbs7x2iUugCoofd3XpEiYmpx+3ta93yFpbO5SwEXB+EGNhHguYCHgZyCOBwRv2mAC8fPliXmE4j8WZtVaNxaO8g/ubKfr4xCTNwyP4wK2j47GMABsZwZQ8rQvRBNtwGwljwHxrIMiJPQuPk19QwEev3bA+nuABh03qmE0gmXLjc/VGkYaEUTU3t7yq+qHzBaMjd7CxLrrNDo1UEFgmLRdDK869o6OURPdGARsb7lI+GqI/xlU9MR+kvI+Kp06doorm8zzbhYMDTkRx5RlxmAPjZRxlgzoehyrDn5PCK6Lhocjl4MGDPKkuwXuOFVdRjb0aoq4kQi1RSmQeoHTkyCFqA0n89Iai+ihpmKp/0geA5k8QkOyS+d7BgctXrzirR93SomJqfOXyZQHN3GRYiJDApoPpbH8M7a2btzw2tuvudDJd5dJwSJFVOCwdGgnBlmgQRQ130XFfjhlhmY5eWr7kiZ3bl5SF27UdCKm32LFjq44nMpylupn4NP3H7V0gWECwg3MxJe35F15sa3Fk6n+jvabbOx4bGpVUlJXLGHZlq5gP8lLLaBpBP+5qpyFA4XZpaVhXdbUNwnVFsp9lvuKwsIk0sQVyNiTYcetZAooo2kGd+kPQIIAttuzzWdL65Fc4ANetfO5IkcgisCaU8eEQ4RUV5pOXuy+seju+xgQ432A6YXI6pLJg4xe/+CrLxjxd+J2G22fOfGx62H0Cdv329Q0uJKYaAHx85pzFcftQw3XJQplEc0LDDp916JmGjN7jAYAUoOCLf5rsEToYTRBcdOkYJ5EisydeJLCB2MSido2QzYo4GzSkKiUtZqYmiezZC2aGHcNRkqcjQHPSMxOTFmThh/4g2uEQF4sHAArTcE379hz/qV0fz97HH9i4a4+sPeC5Lb1o8eBPgySNWkf3bNIEHMWSUxbz8sMSh7XPkClm5wJWphrizRpz5eVIjE6YGJucm5btlJ04nzY4m3x/cGrd9t1Ul96uX7vm3Pmzf/3Xf8Uo9u99kueEhjvImx810Xab26jTrt1PmmvgdryhZuzd2YLUT+v8CUnqVjkr3aHTCSVXmHTfv38vqdF85gYdH7bGzSKW5bJEFu1lZKplolIE+pXR0SJOMnZu2EIt2RdUuRS+wliaCeOBtKL6Wze4HQjQH7qkL4cDexEue6ldbV27dtWeHDbe2t62pDyEklxK6LwXE2OrFxlIdNGoiSe6F18mSLHBwQdcRTJoSOZY4hDf/Kg+whvO1qTGw6b79xrumojh61gNJJWPYxfI4wkgqnz00UcAWnJhCxrCOnQxMVVgAjEAeSRlHLSFWNxT5vXXX4fw7PQkEoQj+AAaCHys1UutGJPrpFTntQSU2GLSKnHRxH+ZpSFrm+xOuN/bF5KXrLuzZftkfJtOOnX64rq1yx0atmfP9vfff09zeEg9KYUcBt4PP5Uka99cVhTuDMlWHx+bMqwiBSSgkdSw1J+MXR8UixL+4FBd4eaTT+7mVSBJT5BMNDwDNdBnIQczvdE01UKsCKT9sSnehLh3Q7IqNAFYJNAZHKM2oJERsFTFN475iSYoiRCFYcuREqsuCQQk0EZVzHxv3bLJOomdS9BgfMura9hpiASmQ2h4/95dcHbt3E5/KNjZ82dtAPgf/uD3W1s6wPk//utfgX/8+An+nA90tp5pdcr80UenaIgESImvhk+Ch6CWi4tkRKwYRccA94by4wxaRP/Q/vwXX52fSyijnRUVoOl8lcFJyFNOGOpV/Yk/gKBRvp8tYSYKeWOYsEqsph4Km46BiQcdNxbBX+uCkCUlhS2tzZ0dXZigRQWkCsMByRhlAOA99CAG7db2zs6efmMMYL2EFX1DCy2FAwEprFb8jaX0Nis7T+eog4Yn6VAJfIZtzHA4Kwy4MQkFUEbsRLje46dWQPNBC/5QGGog9sOEeAGQAdZUV/lTFdUVozn0jaX4Vh5KXlI8SPoTdUO9/f7UEPydjky7cAn+sc9EBWWOMxrUVUZXCrhiemdY8Ww0Chp0CYYQgCQS0AUsAp3yRLucMkdGZmiwlGsPcIpL4SnkZj4cpk2bt2/Vy75Oy860fAxJZeAMrHahikvAqo4uoJCPNELx4L0yflJMee3G4sCo+D2sVAENEN8x90icQXkfV2S/KEIXIH7y8R5/pACB6U8VkQkrVHsDeOz0YmheegAw8el9GzBI2I88IxsL4UoqDYSBL4bq9d2WSlFsqJeXKsdNWg6IwCmDocQvpgQLqSpCEQF+ojechr7ZWQoEBiGKC0XUal5Myd0bNtBLA1xvKL3RVGZ6amZ6lmxmcf/o+OT01Nzlq9cePAz7bIQXCUmLLkV12mB5RZneyHmIu7Y9QfzmaYCKOwmBCgNmXZBfuqQCg4RK3qyoWQ4xSKLUJdJ4XV9/+9q1K6pbo6A0ct7gvCREfaV4R0xWMmQCZ2XKhw5zdT74ACAL90zV0IIV3JxPsIT+7mUVJZJWtXLvfjiubmBoxP72Nes2UFO3oJeUlR86dEhqAak7GMaSf5fj6h31l5urCd6WUPHBbD3zJlHM1ITuwSiZ4opmJscGdeHnL4V14dd++CO/2ouCvXv27COL9IywVQgo3MAxgeDjx01CK0ia71eYxrDq9rYO00ue7bRQHsEQQPLklJm/xeS0sNiKgd6gFGnxwpnOz3uF0ULQnmVG7N+zt/lh06PWFibEXmmV9YGdu57AJVPaEQ6lpnuxwrRsX3ePkNTeRCIgcQiQPk7qfZEAE5QimY8I1cOcQZhQMQ/ngFouAAIKcws4g0BoWBXB6thgfv/3f1/UDqCSf/iHf2i/LIboh3SolFMsi7do1xZ3Bj4I+ldytxQQ26dfjUUBRzVdAhbtvKRQAG64YetFcnoaB40csy+uPFO4PdofYm8KHl68cAFW3jt1Tt1Xv/RqYVnJ9ZvXBB8AlpcvCXaYEHLVrOogp7Or28PdhkaxRVdvX22NLrhqZKifry8rL7ICcOfOLaPT999/l4lRVJuxYdLV2Qt/I+TS8oqmts6CouKDBw5Ji3/zJ2+YG5L5IldnemKS9K2FGeL29/TiAIWRxjqfEBJvZPV440h0mGBLclIq2g1Z8cE0pAQ8UhBsSjkzGLl77w4y5UhbCuBJzFIbANi5ayQmv4Yb5ZAZbGZapqW5kbFheXqCNjwcGxokVrP7pPYv//I9fUZaerZJEmG9nnza0umc4+rLX375pcmJMX4WMu520W3v2bMnITHVsNl8U3pW3idnzp27cNnaVV9fvy31fIu7yUw9OjvfHDkx8WZuAqZU8R4AiTo+AkHf/A9FigcAphXCikCCg/ej3yybGgBYBAhRPrrC6MA9waClOzvTP2DY2g7c4qzNZzLw08JegnCoaHxSEMiJyenwiZ1pEG4UWYbX0WJrwOO/z7vEv0o49hPg3rsmjxynZ0LaNz/NQ5rDAIoTVTiqOZeV6STQTDEMg5iYojw6IfTMTc8OZWWmpKUkzMsNmiSW1OSEzJmUvEdTKZOJGaY5dLH2RFq6+eEPvs/rHjl00A4iKsqZ32+8h2kmDtet25CXXyCiIG4iZiOsSVgZOObe7tJS4Q5MKF5kYnMW83fu3mWqjodBBQxBZgvUxjP2cxq6T/2chlSk8zKqqZZn3p4Og6MA4HxR7IpF5JRfyllA8sgRVkZPGu/e4e6Ujwwtj/fGMVxypjt1NSciehOXrqxbjeFmHOaitWtweHWMjDsaaMirBBBpYvRVK+sOHjyoUYapFgw5ClTIx0Avt8wtqG4yhf/xp+DSnuniwqIXX/xs7AD5ZLVoLF/HV7NEhCD8W9/6lsMiOQoVeRvJQjQZKK1gCH9ubINFqGNcIEDpe9/7HufjoaSo4I/+6I/EkSzFn8I7kAUicr7xBDIctVwgXktbAvoVNZX6rIZ74USgjRs2Y++IFbdwLKZspbSJqXBSvuMimtv6DuzbsXnzpqamBr2Q6vCxdiogwCVesfHeA6wgC7V0DZ7JyBmaly5eNcaLhUUfcFIBtVBHLnDgmpBApnRAD+hyS3JBJk4iAQcgHye0cO+e+Qci9szfMgXneOl0UOpl6LyitA2t+5U46AAHThymSyiPpqGtXZxUxbcPNaOumiYOM0qeldEQJui4q6tsR0mamghzrrPTU2Q6OR6muvkHrRQXFoB8987ts2fPWplcWln5zGefdRTbxg1b+avbt+7SmbVr130c7j+e0BcwH3Nhb775HnT+4A//BwNdCXU8vBYhidUo9QwHioocGgvCqVOnYK7LtlPRHIJ5YqE/lUAIHNCIjcgx4UKrvdERqI60qdkZFnfx8hXUUYnTp898/eu/baSncKyrZEedkEAJkeZY9snRoZbWJivhjAIzjVRnpkMytlvmSQ2r4ekCR+MHTZiUdS6saSN44o+fVIEYfUaCWnFDjJQeagtK6zdsJu5YECilxsr4k0/Af28oCemrjhYtMgh+Q8+LRmz3DazyPoSlOkVSyxjPG2SauCFxFkpPmDysiNI3NipGx0CGZ8xhDFxTu0oxOBO38A8aHvzqkD+NxhZqMSTmpxBFcACHmF3+BBCeIMT6xngB1xAEvKdaegfccBYFmBQJGtYTfHDSr8ZHctHZi0WIe3cbrdU4T5rTB0QrPkgGCv4CRYSQNbugGJrG6tht+lWLSgKIIQE61+ySiu5utg8ljWKyn9RlofjvDXwYEdEogHUKgI+N3uOGJrwHf3ouHDOqvDIxVuAgDW4a1bRi8RutwyEMANwq5Yp5x9WPj8jfcHheijUP5387I2Kdo5FnZ0IunezGmSmgp8bCTR+CaQnMkhyWLqscHhySzyvUnpmbke0lS9WppPhh3kDoSTDGE7ZOwons7bun8Rz6L/3SL3nDlhibb9bO1SJp84aNZtK8sVYorpAV4uScjz762GyV+VfduVHXfMJ8hfYqKnBBsLVx/Qau5v59B3eOcVh6RCEdFTeP4qodvgyrYc5stKgeg7T6L/yQeCFh/fynZ/lTfX+xUCYnayFhXmy3cvWq6qplUvbtPLPvGyupNdFiK3Wn6GwDzt5IpSUhwsP9zLTUjjZ3id8qzC9yv6YlKbNkDx82Nbe2OJ+BYhUUFnvpFGfI79yxK8hjIUHvQp8MlsIALGFBAWMtIU8Ia5JlAFvumaYD1kBMbxQV5Xf3hKvFyV4wBMKlK5epuzRCkXdgflhvMkOfZKxrQUXtuXnrQQlYCm0ix4rxUTYzL9q2uAFtc+SuoNA7trS1GYw4ZJDiIo1S0i2mwsXpwzgR2nP06FG2+uB+kwJCkSUlZboTekmfiEbC2J07dwuLC2y2tllWc0G5o/Pj8ZAiIsbOAeqoGwaBKbJqGsV03ZCKyd60trSggrAksEIbfAUgc+zocfRiV+yDeEDpzhw0aECBv2nLZhMttpkaTfz8z3+J3EVLUahdJj9ets/rr/9E0BmfuXT48FGz4zJA3n33XZ2xjo2qkCNP6huN5Ms3ETfHiOFwkxu068ndE9PmKtz6MS4PxfihualFrnDV0qpbN64rOTw08PqPfiKCJJFHrY/WrFujC4fh1WvXII/nMmnssognEmyJKy4OM4U3btz60NKHc6tKS8ZHRyBg3rFujbtj1urgBO6sBpPND3EKJEu9bXDMysm7dO1GR2e3zgZkIrjbUE/tdWZS6ZR3rdjqulUM3k/mvIfHhienRm261SLRUEJcBVB3nptToHtT0QYVZctKw0UzeqbS4oKr16QsC+2H3cwtTHezL20kL1GFufZoOmR8eU0tjmmlp6+XersIjMgkGJUWhU3/XM+f/MmfctAhxM3MbmltI0EDAHPSThHZvmMraxSPXr9x1RrXK6+8rJdPTcsYm5wyYCgoLH/n/Q/PXbgiyTbEOhMzdLJ8yVKK0dvTFU2Bj9jbOjM17nCekNXzs4+UQX9He6fIy7DErmKxd0iu56/DnP2CqfWfRvPRHWEOLHK4aKo9wSmpTvyU/GMrsAGAEYJi+iovgy8F1lKk4WBYwE13jKjBga4jpPSHNQgj+0RHiPpV69wsK9YaG+S+oAQEN4LtjtgITnkmdHJWBLxkoeG9sYG9yGEIMJeQNM2F5mQXTc8syucCMyE53A6cluoEJCTPZtkNkJjhorCF2aS5lLyehcykvBLM2ST627qVjKgBH8u6o3ttRt5648euXTO5k5eTxbI6XbW2uCg//vadem6E9HUmDITOELF+xeiRgRAiHaMwkq/Yl4Mlu3p6zG5ZSxbzQTt4g+jUAT2fD9uk88yT09DNMx9uB/I+cT+kMEOLu2FaB0kFqJAOT96FHk8OAxcH7LYtmzlb+HBKRcUFutL6m7da2tvsmGdFMKQV1JjaA8IHciw4yatwIDivgGemZxgf8Jyc0cuK7WAigIMkW9MW6ky0/+Vf/uX1G7df/cIrzv8xLDeO2rRhI4nz8IBTYE4ANDhgmhlozideqcAZNiXOA82qrG/MhLPxAMulsVrff/CAZ54NKAnilBBdzz37NF5RALjZvo8hzJAjwh8Q6C3I5oNYEwxtcn33nTdp1IEDT5Ed/H1KSsu3b98RxXDzb73zTugXxiYkGlE9a8UmBLdt2yxAhDwciIMzV8v40KwKtlDR0HqmlZYExuvcJyvAMAeH/iLKBydhThY6Vqz4+OPT+HbgwAGC1i4qqDQgGAsghHlOUqCE+lyNqit2IVm9c3dPP+abyHDAgOOAonUF66s9fI5V/TCeGbHz0IQrv1FKJTABq8kXf+gJUOBTJ83Zb0q4sHL2Ghtkd8ZXefnZ1gGMz7C3smKJiqPDg/zbmjV1xkkquhTcnnIe9djhI70DvWvWrneMst4BcB09wUmzR51DC/QOekYifvnll1Q0K0w/W1vC8El/gZO2L+IeDpAvVCm2vkkVSii8+fTTc1IVXHzGBnVkDNDGMBzATF0P44K5wJQu0Qd1/Tk+6VSGicqq0LnDh2XBR6P6aN/Yi3yE/8Iv/IJ2IelWlILCHGmfK5evsC2ws63DkEMsZz5u0/oNzpsOWSzDo8466h3oz0rPlH0qiVMGEB7iKqlpGmNJirf3BnBOh7A07Vd24dgSnZpiMKEVJOs9oXAIahknQJszh48HlkIEeO5ZGdTplegPK+AE6DlCqAFC6IxiD5seOKZFGaZHXqiDg59okRaD+4u2pHvAJXyDgJVtEGwAsfmEJXpDCW2Lh4DYgeaQGlCmiZ1pNDUxDrLkAbxSAObEFGnOKPvyhhTitsC0yAM9JZGGPxhiikHT3igsOIcY7wFJidwcS0tzK5/fOzRg/Ed8wELeR+tq4QDc4ExFNYqQ2AQU064CfJQCPgpgBdcBvpfIwU/PSvrGQ1gZSuiC9SAGBeiy4CQmtLoQZStbhzTKEu4nq+KWIdoIQowDfDxDAyiex8cDfPATXQHb3/sNFwk9lCssYM1IzeQC5M1nZGVPTUzKTLZqbl3cyd9ZOdmiRkqQvBDukTZL7rhsM3CTeq+p6WU1y4ZdlTIzKancPbJ6Qqd9O1oJEwtyCkaHhkVCoXvLzBCEubrcBShvvfUGwcsmMoKUR45sAwrhryoMjHVJxUWPAbFEaqk4VhsloMieN6+M4QRGw/iXVatW52TakjsgzuR5Yk3FTUNhvBO9GTETs5E6oaJcFqAZXB24bwMYAYnk947OznOffmqMYYnDFJ2hCNGan7NMUVocFjdUJHhc0wFIZyVO+8R94zXBhH4lOkLRWWOlxaEP6+nsMqCiN6pYWGMDcj24TmRSHS6DNlBN02k0QLFwQkXCvA2XHJPAgq/hjOrv3HLVl/WTcGGRGUIz86mp4m9JGMBiDtEiCij+iArCDZI4YITqUCMBonOgzcgahuEMDF2XZm7V6fV2qTbevUeO2zZvoX9BLebD0R80fYnLNZLCwBTOnDYemkWTd/HwYZOSp09/YtsQY3aUBP6DOdQfsqFENhTSe0ZowHavsQFbdDltHY/NjdXWruCgKQD/uLTcXXLhLgJm5kIG3eezzzwNAU5ZThrkdQ/79j7Jufhs27rDcvbjx+Hw4/fff9+uCeQze6DoNJJxANU6G8wkDqdqVteu/PZ3vyNL3qoOtGXPr1u7oa29Ze2a9bZ/uH7L8MkpOrh95pNPt23fUrGkBHrG/BwBlvJNNsMAHmsXiuiPVGn+F2I4BkPnRluSCXHagkmgm2+88Ra9NeSwsixVSQa5GReT5Q6NbLhzu6y0uK7OsU61uCqePnnyA0Cc4icOJkQrGDxLhkOF0zLuP3zkSKtuZ4x1dmG7fpk0ne1gtEz9TPag2hti8idQ3NnA8NCly5cLisO+T0oe7Hw2dMYOG7HmIIUcRQMD7nZdD3kH+AY3kTRXXBhWZqmujT1CDe6CA3JDMLVsaLjL1/R0D6xZs9a+hZrlMoat7DlZN+SkUgBdNfyFwES2NByfF87lYFwGJORCItwKD0gxhDJCFjrEogUcP379DVPLLGVMmlp0kTAcPGzfuX3zlo3DQ6agbDHqcIGlbGEBKC1ybU1aVq7Ul/tNbR+dPpeSltnR2Tu7IEk/o3bV6qLCsgeG1o+aEudn0pzfPzeRnDCVMC+DMSzWLbryN2FRhlTY9htdCSxv1EPcB+Bk7KkZHrUxXDEhEBx9khOE5pISbfw1sR9ygdKSE9Oi0z9npyatpEq/CQOA8CH84ECpjd8NKUBnyX42YDA0cLGAQljhlGEJlnKWuDJWzIt6Dw04+AaBjHxEtxiCP2Rhb8PkzJR6ko4W5q04R3u0rOkvhKwVjDKwp8D8kmSg0N/wHgvWMBJmFpOHZlMyjJTGpobHp9Zt2PrsZ19cWl3j2DGLY7rza9cuWdE7cezg1PiI/DDkuAJJX/LmW2939/Yvr11pV8n9Bw/xhLPS2ePkzRvXHVpEE+pWrWRo1AbTa6qqWfS1K1ejYMWuuzHzb+Ibzo1+BvVOT2fs0BM5OawJqjBnquhlULyW9/SNkqAXTN+G7rIdbDG3imUCXtOG3/oIXApqE939hGnAyl2yycq8gvjD9h9r8VjHVI3VwFQSizhhOq+7QQtQyOHTCMtd1Doii2NmWEU53tvZAhn9hVUCE8MvvvhZsa5BCClxQSGACEfMFcYOh7YDSNvNyUbmfJIOMz3eDIHyGBpuN9StDimvTPjUx6dBcCMvH8hmS8rK+LEPPvjAbeiiDVjt2r3zxPEjXY9Dpgc53rl9R0X2Dtrj9nCj+fBAyCT+q7/6K0x48sm9fI4hEGTcnWAdRjenJOT9qqItDSJdQ4XDhw+bdDDq48Rqli8zSSGwxlKdMhG41lkoxjquX7tB67gmUpAJ198TUvCNapBjdRE/JYCRptjG3C0HqLeVXYxvnCoOmAXAdtMr/FjcX1APPMF2fQfeItn+MTCxjoaLfe3+zc3L1wS/Z5LLMIARuJGGW9XXGBvivIEBzq9aVeuuJSxyXSCha924yI0QVAV8MF3rGW1JKsbJ7o7OZTXVrilZWlVpdCTtzY5FNMae0228CISYeWnkUC9CFyBCG4f5XunQxCQjS/n169d7PnLkiAkv/OTTnnrqILUUSOAtnlgU4oT5N0TF6SIUgIsz+agVH4G+wZWoxsJan/3TWZn9g2H5mly4R2gYREXR25S+GMw4uMRPLGImFjY96x+ZCfE1N3euXbuC1cAEiw4dAv4gZAwPyN3wyRg1Mzvjb/76W2c+rV+6JPu55z8zMji6eesW07LDo27Unuvp7UOyHAOj8OmZuaGR0Zy8AsiDSXxa9PFAZJDEXpAhj+e6Bmo5NR3S6jh/BSiPNwrTN6Egipib6iriAFUEFgT+FH9QagXbr7DFIoZDiHiOKFxS3SCHHLGUfmoC+fgDqxgf5oDPPAADjKKmMB6urKwyYRrI7+nnUZVkdD68JDPhmSVa687g4OxK/tZ6bd0K10f+NNmGG/FRSyvKq8hqGBGAEIA8v5Sa9tOzZJDp8DiUqs6ZmGSHrT5ERQ4fMnbdMHiGw9GDyS0gk4OJuQp/aEMeWNxDiCrgVK+o5f/xitzJFCb+pJaqY2/sXhDuPVRh5ScfkQyK3GTCY1uu922g7vve3fvhLIfBEb/KLQeTSmMjNNgOyN6EDiJaVUAsDP3JWr0Hn+ASd2+uMTcm2EVM0mKyQN9slmuqcrKy5fJ6z1M4U8K1gu6tRPxQbwgFQABUfZtvDdl5QxLlmxxGi35DE20Tg5HIaN+I54FoWGY3pCpDI4NmBcTr6IcawT9z4mmQ62/Wn/n4k63bt2D6hs2btBLvSbB3JsI1jGnefe8DfCQwwmMAWLNt205axZC8AdwHc7HPG6uouA++JTkK+tWvfhVfTMVhEHZ7rxgcsQPHPbz22mucFB6Rk+CVvga5Ts/s3bvXcnpw5dF9fohFkXk71YW5vAlT8kbP9M1vfvPAnnAOtOrqUh1loAR/TWMRL+aNFvlHh16sW7dK/pdz93lhtNASPxEhVdAcnmAmX2D+QFcHiPm5/oEhvYiYW5eJBGgjTVsG2b4howlAqI7wi8tue9yqRbg9/fTTzkRCuPxrNBrUPWy8bxTJSs0TQ0+UNzA6mFtWLPZhCdwQtYu2AQfF3bZ1J2v3J/7fuH4LbqYxjKMa7zYis7yi3BvbAajX5i1bZGjgpF2GJh5IubZ2hY68qmaZcUhXW8iVop26edhyE3ZyK6MnUOXWjZtSzoy7LOZ2Pe7ST+zYvstEEQHxqkIEbOHZRZyxKoPAg2A+gMBm5ua0dXYVlZVjtaxZjsavmsYl3QYDwFiKgVF0gFZYHR4dMTs49cILLxKTWvCRBQesISiARtv0Kl5odjwrtvC5ZIHJbFvHQI5OacBwJHDNZES3KbCQl1ymJ8fv3LxtqjUjO/P555/r7u0yqU8Wk9Pux01kyHOzUVZfdPqW1CB6MzQwfOv6jX/7t3+jRXpBCmw8jP+yeiiVP0mTBsIkciIsa+DO3QazfZgg5qUw+gloYNq777xP2mIy3HOeo4gkK1N+XUpGZopnlPOPAnoNAUs0vjvCXuuwFD48POJAtCNHD1UsKc7IDNTFOkYK7B1vORZORKNo/+rXvixoIBGc4YbwDdPgIF/aA1X8sz/7MxMfOAxDbhQ+oAWpLc5v2769umapw3PPnz8rot6zZzevIV6+U3+3tm5tReUKYfDV6/VvvnNSlDg0MjUwPGXVYeWaDavr1o9NTJNmmwPBHjUuLcxOWZhyK9HC3MTs3NTswqyZi5TUdDmEGMtDB50LWYvwDR/Ih0P9E0JypAGAL4E7VyndP9kAQLnkpMzkBFu45WCmwNTBptaLjRCE9dEuYQ/Cb+dr0/kIdnC4RK9nAi32CaFho0MdFEcfkWxKBX8IUUks8u1ZecpJJ5XEJQ4NKO9NhyXa/CsxKTMcC2MtVxlzhbDxCQMTuxrCnFkoavFa9t74jGvMkofHpsdnF5ZU1m7fvX+tRfyCYlcHCt16uzs/8+yJ8ZH+8bHh6qXlZnjaWjvbHnfYjC7dcscTuzp7+6TTZOWEa3HFcz/+0b9V11T9wqtfunHzytKycu5O/gDWQZIz5IJ4aesR0JaYfObMWRfl8GN5BSGdb2R4lKmWRdcmUmAaohg35Sepz+zL4J8aUz+2aZGBA2luabIsYB8LlwIOrygK0RDvhFHiM86Qk6SElIpV4mjT/WakUypSsN8s6N7EmF/NRFByy0qB+RZHonPl7YMqX7LMnNG7776DOgbFha5Zu5rVG71AQ1BLKIwXHDCZue1S1NUOMZ0OV4le9shInG9hX69Y1rCK4+JYenq7LY50d3SLmwmrUeDZ2MgDHztxHLvER2ByRP/5T/7XYB2ZGfv27N20eQNBmKxpfRSuYsjKtGSRvN8WiNsNGuJwrG9/5zvfMSeg4pe+9HNCAtESDEGgVxw5TdYWu7NzBgdMi37ta18jO3uIFbN7ii45UsK+VZDtAdVx4CRx3G28b9po86YtmHDnXtiKRBYqWjnUNGslAqdOMeqQdzc2piG0hFgiMWwX5G4pAwWwj5GPFYUTkwfNYTjHi2T+hALwk/4kOArQ0dW1fv2mhrt3sVT/ggRSpvyAE6tW1I0twhvBkIZcIE76lB7OFeVl8PFTKLMwRxBXL11CJperIj6Y0fj0/HljY4unulFGoVZX5+OgFePjJCgyFdwTN7/hDuDVq9Y4EFmnpi8QLfDtwm4sMnZiLKgT/etGqQESwPfBc5wkbjrmxBiEoBQhH3zwIY7pZGmUURitFkmL2fMLiwwDKIy6+gv8idNypDbAXN9Bf0wb4R66dKAR06qd62ooQigPm7p27lgHE4hZSWAC1NIHY3Eb6x53tluhxTpjrZzsPFgZeMTjSVy6U98AefQSrj9dBMgzCWsxBCehSmdwyZ+Q8QwN5REYdcHlng0ANI1eukEQ2OgbJ320EkcgWARtWKnoZDN2h3yYkFrMH9UBhySE8YqCgewnPBG1e6mk93DABO9JjUBpCMJpDj8AW6wzOWW0LyzUtD8hYxRBFbmOwrDfTapBODZK2Ko5KEnoCLMP9k5Fh1KSlLYAhyrvoSMmMjhYtWDaoCHfXDfFFqGA46R/iFlVoIemmBUWESGf0gKiA8mx3pLhOtcxfyqpUX4G5loBMzjl6CQlDMQoIsAWKTogQBWxNAQmquA/gaoISCwU3MAuYDl5nIQk0jz4VXXwIYMDPA88FfMr4J6B1ShQUeNBsqr4JgJtgY8WJq8YID6JT26sdveEcYVEIHP5tqE4iLNqeY2NjGacLUqa3jLTr4wtdxi9dEmVYurjsvaMPEAPA4Ho+rduE5gyLBfDScaaMZawn9bdT1OzwYZNroNAZbVFn8x0djxuoy5f/fJX0OZPVie+BGHN+nVkZhkOuoEls7NkHxRuLtxsKv6gQ2Y1ePylS6uQqgpkDAnoOr3xzHiA4rMYBmvX3wBicZbCgQxnPKJtXlK4mPUQpgEqCrgpKM/FCAd6+zBOxjPbi/WYfsDEyWLexBOipEX2YfJ7aOj29VsEQ6hiJkaCap5ISQX8Sl/NK/DXOjZKwAXr4sgPE8wHaJHUfWgqRkEySCjawIFATvbOvcb0sB43CVW9oO4HcMgDa1Sgv2EnqBMa0i3kf/LJaZcKcDGkw8N2dXTSnmOHDhvqOMHdGrqhYjDpySkthsg1Lbmps31iynZYey3KaqpXRGINCic3FF1bt24HQXAJuN5UlXVrZai/L9+AXNyo4Nf3PnjX9jUxOmb29PcYYRtpQ4w5mmZ7YusOMwcwVBKfGcuJ48cx0AqAQMgxUMwSZ/bs3W2qixQEecSERZjjWz+NZHXRS9aQB42ysXa1SsuWyNgy5UZtaIXVWKxWHTN/5Vd+RS3PuIQ0XFWXib33riPGw2I3+FyqXmpJeYhUyJp1iYZpCImgzrwPvRKUs211hTIMm1z8SkPo3he+8AVsUZ7WkbUm3AthM8Dpj05aTTHgqV5eZcLG+SPSi3lzOC8mhutFMrNyKWFTU6vhTVlJuQlgHysttIue6MVRioGI0v3Dwa9BA0MqZHbV8qozZz/u7xtUwLqEkufPXzA9YHbN4olP472HzNN18ZqAw66d29LSk7jUrKzMgsIwo8934I8unxaZSDY3Lf7wp+kDhw380i++WlJqraabI0ajhTheGs42i9IKmAD1/Gefw3w8CaY0b8Ug3A6OCeIzOkO1/uN//I/WkUhEfqpiPnQ7EJKWcvCpp+YXpkWiN29et6Fw46a1FhxM+5kBNQBYVr3KAODKtduvv/GeA3nHp2ZHrZbPJ1XV1q1cs9GlLmMTk65NeHD39sxwX8LcaOqi1QkOwwbjiZCH406iGRNF8vvCpVo+URAOfXNF6TyBhxCfBzsLn5DubwCQtGBzS0j4SUqwDpDusjDBtYKL4cggYlXJ4C0eAiVGJw4hh9ypMaJ8A6WnAJwx+ngwjRKSDufmZN5EvjD0FnAIaERVOHSfwMBw4oT9SLpGRzeE/QmhP0sKUxVSQ4HSBYCjsGfLvrg6H02xmxmybjGblDw0OjEyPmMYkJiWU1ZZs2PXvq07d9vAwSd0Pm7bvnXTwvxMdoa0pQTHDzBPrrW1rd2VxhWVy+403nfxosROvSdZnzp17j/84W9WV1QODfeZOICgGQBWj0AihrzAqLQ8XKDxznvvwYqUaQJiUbdq5Wqs0KmyO8ijyxQ70zMdzq7FWHRY6MDzMzTenF13dIZdto7m4jqoJZMEmbZQIR8aCCyL8Kw8nZQv0fpIlaUuvlCFzZICNFWUE4fzeAMrwo/k4ACmpBW1dQ7junHjOsulz4J+IR1rPXDgAAtS2zPgGhIiaNq2eCiZngABSsogBOdZFg/seCUi0x8Z1XAdyksM5Dx5Bv6WWzh6/JjYgqUzh1v19ab/SQFDvvzVrwz09VsdMhXtkiaTL4AceuqwjuDGtZtGQeqyytdfex0PJfD80R/9Eaw4KHkvRO/8EwWQrLx5lpMnw0IEsHv2PCnOIBr6QzoSbjX37LNPc3oQdlIcPE2QIuTb3/1HtY4eOcZ/Olbbx6IB+IV5+cRh+gt7R4bDcQV8oxYJHdW4zoNFGu6U1V58rqys0bdqXRmuQKPmzjEWMkePHlUdZELxoNGNmzffu/fAnBCh44mfcI+AVMdwfSW90opfI+UPuUmLiSkYzs/4zssJZ2P4SRkZ/JhsUU5bulddAEqt8UqVsAb75BO7yAtieCg/0E/IQfv2LVsghjnIcbiciWQHi7kgmbZI9YEJ0yMID7TR87JllRCj5EiGFTgmYuhwHCro1jyQix6womIpevURGkUFbBmmtJXGBw+tF0BPizjAabNZhFuGomkwh09LsyTbGUZha6KfXDugaRxDaRzA6BzhHMfZ8PESLaIavVt2bhYgqvt4yYdLwVVSR6ktF31Dm1zU0mtbpde6TEi44S08Y7vwK5bip/4LkjSZKREoHLq6e/wJlJJQZY+Y4CcN0VJASNxIjBy9pw9r1tYhIeYAlLTOzH1rMdLkQWYFc/yhujjJcjXtV4XVUgYy/tQcp0EQjJ0QPahoJDwqMzzsAQ6Zq3reiGqpHxWZJtmynaQQQnw5GoBoNz8vRzTrzAYIsxcYsvqg2CF8T8ZSrFPMg7ZAg9XQ8KC2cB5d7hdnSmwahvwhuuJ76AH3MVFjutyRWZQY8FiHoQog8amIOYqBCUm40QF8mF1YVFJzcRls1Jbn8FMUi0IDAjigogeb68BUIDK6oFcI9GG20NaK9yriJPjwhLZvHxBU95NvtVgQNLzU9M8k4n3ioe2rXaQiY1WuiA3crp7h6uak2vcPOHNTHxmvA5hOsybgMxAu8jBJl+tsE12aNCEpNGS7WkKnQzra27FDd27FQDKM1B1Bp6wac1WaB1zKjURqawXiPNxxD+KeJ3d9/pXPQcVCM6mgDVXvvP8emnlS6uhsyEjeqYRnwY7JoZmk//mf/5mC2tlSWhrkh/KYZh6BAeCjiRwI004RsJc25ht1mMtRkr5ijV9h5RmLNU3LRf/eAK4uj8nA4mhsyZIwww0ZjBYxKMDXWMsT5pqQgw8NYzxyNO2jMK1Oxv5EIwi0jTyef/55MgMBYsb9ugeIoaUlurEc5qoQDBMCXBXIUGvN0Q+G51fuXld98/bdjq5OzRE/kfNT+icUBUZVVrJP1VmyFlEXao0Off/7/ypbUVdHIlzV+ro1bC8sEUpMqr8jr8hlXppg85XVVXnF+UKedhOGHY9Likqrqqt9u8rAfmU7Vi9fvEKyBXmFYqrc7DxzePyaWLzZmXzNzQJKhNx/2CjA5aRefPFFafL0r8PBNB0ddgiwvdyMsLvlxImnHfWmRavbx44e1fFgC4mMDIXzs/X0xLF9y3aQbUFBi1Dq+vVrnPnduw0GybW1KzIzs5wcIBueaExwnDv3qdxNo6mNW7f19PXjBt5qLg7QmRmW6omJP9Yx/FfAKHWgv9chD2ICDFcMzz/7/IskFfX6aVGKTrfm6SrvgwrpNPyINwgnBfJV69y5c8SECodJG3XwFNqSTrBh7bqM9NQl5WHwjUNh6JubLdfOKJXWObgpryCsSvdL5ZGsOShUmp0ZdzVBn+EBCBcunKPhJaVFOicQ+AgjXkyj7fCBg7mw9Kz0J3bt4PodUK0LsZ5O8YTWsrqjVdliYI0zzXeUFOczhJZHD7Kyg0tdt26NCUXPWEG/5FgaT9qZYJwYFg3G3S360NL82Ojg8RPHOEqcIRrSNKuKP5piKTTfwSbCEfhonY5JLMYWHKDJJkpYLnxMaHE7yhsA0DS0eyQIurrvwD5p5Xfv1C+tLHvuuWfN4Yl3HZxleT0rryA9s9BIpPFBy9vvnczOKhh2wvDkTHJ6dnXtuvKqVfMydFLSuZ+hvp76K+fHh7vmJwczUueSk8THjmeONMfZ/ibH+dPgUuH70w8lhACp+TY84H+Co5Q0ZLrIRmd7kMX9/Kkrz/A5yU1htgOE+4CVNgAIK6spIo0Q4htUGEJI9KH8hAIUTbYE4U9s4SEJzgP4FlQtB1k34+WC89UbR0sSEZAwbGAFWAcrfMMcyKQm8pxTakof0hF4GfWPIfUI/P9OkRQgvaZdHuE2x6Exg6TE2cRUWwaSUnM2bd+9e++BzOwcd6gLFpubHq5aWZuR5iKbkQ8+eN+0DvNpuHefh2/vsOiavmp1nQGAJJD6+lubNxrhr4GzI4MW5mdt4pdYLAQnYvjzkIzIbQWi+bbozIC9e/fzKob6JrTa2x5TM/vU+Emdt8JsitNT0VwGZjBS7MIqftL0h8BR2h4jQiAhqYsbyFTLM+3ikymwSRnBjajLywcPmhZmQ34wfDCTXRA6L2qIbphKxyzuBPlGqymkYKq1/XH3W2+9XVZWKqzhHpUxh3X48GEP4JgREJ0AxbVScg7EoisMDx9+ilVChp1ql4zg/Ju/+ZtGrdD2nqMGX5qG6IT3ow9M2UIHNWNWvlnZe++9JwlHYY4aFXY7WUoy63zPKmrDXQ6zalk10+jr6eefoaEzktaFRUePHidrnIHVrVs3YC4RhRfSKDR+8pPXSU0BvZ5ruZibD/6jwozy0aOHtW4bsTcbN27GdgdKeHP95q3//J//11UrV6HRFYR+ZeNE424TEjS55vvhgxZ83r37SVhpGh84VCu0IGOvOFwt00cYpaLWgeIi4Akf7lEo7BkE5zEIjjmua8E3Tln0Q5TC9BxMfZY/yY6L1pAH3gyeWI1XUzPziqnLOkaHh/wKOOY4WoBb27t7t+hW6ziGajG9lZZwZPnkVOyscNVaAVBg0r2xaA2fmwKtta35+9/74UsvvWzxEy3o5cYB0UfAWe+JOmkpcYhGwXhgGgIOS+SWab48WKqoE+SrV6+uU/fGjVsEoSTM0c4oTLhXL18eJyRz47A13kCdZEu06MTpksmOuAp50ZO0tLDwAme1DDINm5WEMxx0UhYo4IB2RoQza9evCYqdkWGMp2m26Rjff/3XH+blZcFh9ao6LXrwE80Uy+XnFTtMxRusjt8zEB+2hmMe9LmcD5mSCz0xSYMh8GGAbEQV3xDAcK0jmTgEV3BTl91NTU/STMVIVi0labuSauk9qYQeGRXkQmqIxXm/sndVYivGZB8sUoyYmJsuFTeADcn3SQaEwYfTGYRHUZBz6ZxTr4UwVwwNK+Q4hifC17GRIXvB4al1nzgYgzOREbFODWe0QqUpALD+1BsQhyrWq7XOSSPEug2E9bdajF6GtTA+U47DcDgIOxztxUZghUANoRo0LzETG32gF1Q9OqUH5hqlWuhCPkxCc9GoDB9UxAEVNVSQX4QidNETVcBRDCjCUsuDl8jhJCHmmRyVR45iEPYAvo+X8YMyamkCcBAS921YZt9AVrotd+NO5tOPMB55BSajjBTsZTTEkU6VX1ToGG3QBX+quT3TQME2OYHgxNh4d29PRfmS+I1DacZGwvE9kkyIsPVRs8aKy0p9e+nMXfk3NIaNycYeGZx46sCTX//d3+bInFuCToqFd3a0EJUQRM9hek4wcejQEarsOKCYlbGKsD1qrC5oeIrdaPaTknSRPVM47pJUKBx3CWa4LHBoSNyGEYawPAtO4WAMEGuoDjnFBnny5Mn2lhYFQKaRmIgiQVis8aZm2aeKmjaFQELMxmbQWI/xFzK0wfwB6fpo0U80T7uOd4A8n2v/A6MFn0+h4lTZy1j1Y5NAL4b4kJ89kHMLSaNjIXeNvlKgSDVHkY9vAm6UgoAKnETF2LhE6nzu0iW1kJFYwuxdKWRVREIXDeMycUmHi0ugmftfUlWxedtWS8+Puzrl9xvzpiSmiKbzsvOWVi0TOt66U5+fk8++P/rwI9nnX/ziz5HR2EQ4xhhw9BaVFOIwzusyhU7GHjwIR5meGa4iunL+4tlPP5Gft3HTeob9x3/8xx+dPI05qMMBx7ZiDnGYfXTS4YED+3fv3cNHmK24f59ztF1v65kzn5rQEa0J4XTPxmPmHcVkZgrcQbuYlFqzohbTsBRPCJp6kBc3StaYEI+7GAZlsJhjM6TwXlyJD1hKiEJYK7m4IfXLGMFoBCfpPJ9DK+xboAYETejEpBugAFauvMFnOuY0QHIkCHHPO2++ZcNlTfUyYxSZCcILM+4iQjqmYvBWqekk6wQPzdnLS9MKcwrgJomfTEVFoSMcHkCICEwTMCRf61Fapx7iADGE7QFIMw8KrAsTkMz9AnL9+g3zB1Jp9Q2Ilc7Ea5j2kn2H29U1y4TytbUrHB8ErKbBxCgJDC4sMx4A//z5T+mJDfeUmQ3iA2KtdFFj8394pRWXAZlhpYfapcmWxb2MCbRkCv8f/vCHHL3WlZkYDzOF9FNzHDSuli0pk8XY0d62Z+8TNurZO2FmM+ySX1Jp7n52PtXGp5a2rnc/OJ2RniOB1QlIeUWlazfvKqtaPT4X9gPYOTNhm1Hf466WB73tjYuzI2lmMOatXY+b/03UA5Mcp85jSxKPPp78G/tEqhJOB4reUI8wnrejYDEh1eG5iQnpshaNPpMW4kQgp4UK+CX2xEFqyOwPW4VTwTWfBiY4RgJYt2jqhNZGKQ0oNZkSWp53kKitPsEV8waKxV7Fn5jvWxWS8o3PPjIustKs1ZrFmTE4sZYAlPUcOEeoMvMwZ8a3GwBIbBR0msifQ29y+sxC0uDYtPBpiRNo69YdO/GsAw/0WODLpb596yZtbG9tdvuBfstBtHL6e/qGOJ/alWHXuP6e1ulDVq9e5XoTUz4XL5xjm3bUkCMgyujnCLrhXqMTC1yPLLnCQjlPYojL6emqOYQt4XT2kNDC2whiqJClM7UYF/OnV2zKT3ijjAQ55MVLTCBQJC1qjglTUS5deVYACA8DBxlQ+qPYV+MkvgHF25iYB0cBHGdonnkYZ4ZIlj1/4crhw0ecL+wNbWc4Gzau4yvAD/o5EVLwdRZI48Fgzq3xaU899RRhmXKi7dQebtw4/CmwuvAhvphjJuIvX71quejzr75K1Q0t6AbPoCv5+OOz+goxh2EMDpQUFdvqnZGdceqjk+XFZcb8/AatqKqsNoRQBV09nT1SeqJOx8xRWFijJjSBQQnUtGhobU4B7WvXrgETfwyrTBnAH4skcjgK1iSLrRpOZbBlENUuguFDzBN/4xv/qWb5EoE7Gikb8mNaoG0AwAmbshBVVFeHa5IBpCemSlmon+i/oQsLam5u5+tkP5IRhihDjdEoegYHhupCCWKmsWn59u1PyBP3E36SLyRpMkFgMm2hBkIZaOgLEKt1KwCYrDzOZJlNiYZSVMUhZGrNRCcRRWg0a9r0vPUN7ujyhYv8NoVRt72thUCJVTGzZUB5SYjOeH1i527GDQ11DWL9pEMndIMTbNEWHGiRivCEgIQmCkY6Agytm+KhNtu2bfcS8vKI2DFyfLCor3fAad3OALXugS7KCT6bklLC53d39/hTl0Aipl3ggKiPP/lIo6Ju3YE+CBv1SpDRXxtGakJ1zDES9vFMB4LRR2ci+dX8ID3khyFm8y9ALI7+e4+TOKDr6bY50YEOUY6NAtrljcmCWaEi8jlhagnJfvJZvqKWISiDIlh5r4/zHgOxkVgV9onh4/ONm9dRBDI8fdPJ2LRhhUBwyJeL4LVAgwYgMKd7IIPGVEFTBUBa7VmYFHMp4B8OEZk23lGLDrMLD6ZugiONFlgh5o1+LZS0Xjk2fuf2TahqKG4CjRgCOIkDS1KsTGEvocTzEKhGNa26KRVCx3/a6LxiFMXhuIpwjhF2z4hACt80wUa0hWTQ0IJ8yKBF07jnDWjO+gMnBosDflIAKI1iDnwUQxqTwQrvdTiIUh5KACoGQ2rp268wJ30AVVEMNBDi9/708axpFZWMAcZaB6D3Qdyf2bNBt2FqyZGfFKGzu8MaqnUlXeDy2prKpUt0XbomC+gP7t8zi+MU7OKiEotwRp1Cw3AwYkLi4MioC7mc221/57DVkLFJJ+rpdCFNNhSOxut7LA5gZWaOk7bqSPHixfMcJaH/2le/duH8p7U1y+kWdqOnesVyGkMAhrm36+u98cxZu6kE3ijx8Sd2LFtWZW2L+hpeC3Q6wiRWOKJe8MQH4emHH34o7mFLRM4ZiSDZNg0wY6089GgtD0h+oJEreQBOUTQUvNLoqHVbkzFK4ib+ijt1Sz6YaHeplxhNF+W9UG7cIAZSYYog0CrPSvIg2M1HCG2FhiZIxM1cSWZ6mIL1k8CU6jAS0FiIeAuSnvUKmAamX3Pte2tuLSsPaU7AUoJYyZCpIhyA0pB0RgqkgLrRGQB9Vm/0i8RB52wFbrx7d9nSSmV2btvupf7s0cMmXHIIpdSFZdWVIjk46F+JwxQyzlQtC/csyrKDp+1z6JJAKU1lcmbWiOjZzzxHUgrwONYc9I5YB+31m9ajUT9E/yTOX7l6+dD+fXosaZfmw+CMY1YbcJtLVcYGdGLdtGkz0i58Gua/HVupE416rxHn4mMLXXLnLnnpXVgalw1IzF4Jl/cePDKRi/kwQQVbhQnIUFLFMIAccVItL8VV+hTTPNYT/KrTxUDzMaCpzr1KAFAsYsKgACsym3Bul/EbdnHBOK+AzpsgzMpQHljRH308FtUsqxp0E31vr6l0/H/U3LR+/VoGxWc5cxMaTNBaBc20Ysxv2vm9pDQE9xyHaTNavXmLEyo6MFbyD9p94O+gP60zCjcE54UdvbN4wrANh4C6euU6qletqkOFjUqe+Tg7mymqad3FucAcOgtPgYKMp822bGaEY0DpG5x9SBb/UU3bG6I5G5qsCdGPbhUtdMOojNLGs31xRAKsN7o9DZGLbxujwfmTP/kTmmammw7LC/fBRiW9RKbjdXTYpcVFa9etKioqdJ6DWdVlVTVocQLOYqILuDKbmh+/8fYHWZl5hg+SxFLSsmvWblm6YsN0Ys5CcqZzy+zlKCvM7Wi519p4vb+jaXZqKClhyl5ck9aWFOMMfaYUf8gIXXAI0/VhFcUsV3psxXJXCFTU6EQRk/0ORU5LWrSkajAgBySsAyQtpjhENHnBfgtoc5JWCNX9aS5+xD0DgNB5JCUDJcwxRRK8VbiA3V7lhbmpycyMMGMHDQxRRiUqBA1Mho+XPn6NX+ZGN7FASUm57GYHsY5HVkArwk1rCWFTQlhhCCsPlgFSbdpIy5yZTx6yGDlriJSfkVv4wsuvyK1xzq/1Xsrzox+9duHi+T27d9ljwCfQK72bU+QBr1gaTv2nZnZ+y+GkeH09XcKjnTvCsQrORCZBSgVJ0hegPHzUzCLMFjFDTEUIkpl2V2c3CzINKL/fGfY8sOQKYD0ozxyMBCLW6QQS6KoUFL5IfOn6DQKifsGdhvP+r6GUl2aSlFa/QFGpqyYcjKa3skbPbzMfHNu9OxyGRrisg/cQ0HOVHKMu0xlTzr5cUlE1PGwcHtIVOOFgCykhW0DTuGdszIL0C7Yb8fA6ERUBB/Ob3/ymyVc4EJO+gwR1CmjhuMxu4Ikhroak3cnvt3LCp2lCYee5WPK9frOpelkBqjl/B2zQfExmhjrcnoHeIwfDEoQqvKgVAOzVqJLpKemiWEZEvizIgHzlqhV6OtEhb2NCR6yjov6rrm41sUIAEEtqqOaoMe3dt9+Cg4NuUCf0QhoCTZ/+wz98R2C3/0C4NSVWRa6PXLDOdIbYAIF2KEUT+RZdwwd74wEANZAr5b/ICxWJ/smFPmgCqlwf84+YH9JCOF4KdubMGaJ0PNCGDZvvP3gAOO+nRaLnB3CPY9Frkyy2sALN8dveJ6dmcOMcoJJVlUsBVJI4jKKFSkJFqqKY1jXKe/Cot+tvylKGLaZpyD0kZIQh+NDY0EBpBdM4zGsJ16QsSseHIdqBslTiJ0s3BESs1BJKeAIa09BKV5dduSG/QPetCmjmYVSnpXouMy+qxCXNC+za86RbScmSAnsJPrD0hL5RQiwirDC4etyFXqY0NR0yANm4XGX6zHCccf9bv/Ub5KgwTHCG7mECijSNV0K1YKpROGjWBktF/9pyMwBBaA5zdDH0XBk9o6VdpzuC81NVmZzUy8RdpHgJxwD3K6H4juwxTIphPgje4CeYuEF8Cnvvm52SkWLiQ7NFaFEYjVyBRg2ovMcWZRACCJIx0K8kSGe0Aogq3vjVh6rgOQ4rqYCf4haVtAQLc6zGOmQqbCJDK9xwjJu6eihmy4EEkqccrBQyhXCPtaqrAJha9IAWiBGrB9X9qrDrpA2AGQV8fGsiwi2E0WRKQBju258OZxERtUoja29XEh+YhsLgE40mqJzquKR1z1jU3NZOFUEgUH+qBZSSWlcRV5WM+QA9D/QTtLhFb7CFYviwYkqlMEeBFX5Sxgfb8SpCODBT0z7g+1ZGcyD4xFQon/iLz+51LI8cfqfhSsCwo5yGzpttSkwoKSsxfylw1/mZ3R8a7KdezQ+btTczNavLkoxqW0RJUYne0oHaDqSWTa57lCCEDqsOZKuN5rZWnNUvujON13Y6ZO2q2oH+wYY79UukSJeGo9acG2MNYdeunY4xoTGmlrl4HIC3I0TV4uWR8bnPv0pa5MpJ+dOuGq1jBB6Jk5BHpYgQF5iBbyk6/vRSBxa7mP0HD+AadnuPj1QKNPLjbcOMwswMveFKSEsBGmMAQEUgw4Vxc0SiLZyVxWFcDj2goKQz4HAPHT5oLcVHdeyOucwCgdIEaD7whAkN1opZE8dgSQGhDVQWRXAmPBLSVcCHwcQy1gSweYVFjlF70NSsF4wMu0CHhLeUgPIBiNKLFy+iCDTvQ9J5eakejlwgoENCnS2/2q2/dUstqV9qacURClh6/vz5yupKbEGmwjbdkzUalTSK4ebW1K1Fu5n4OHqjFadOf6IhR5GahyaOoFsJYUuGOTNdlEG6bh607Tu2OmU1Jzf7vbd+YsBgQY0bRS/CbRXmPQ3w6PTYyJg3rs0yQWhcdePGteKyIndLYQX3BDho/JouUF3sxXY+Aot4Q4Q4aiwxNd0UPhnhORGQEfQs0+O8EFYVdfV8Hvype3O0pQOI791rJBHWSzry6Q3SMBwQAwAqpF3cM3Ot0UuXLhw7dowNA6IJjsOvECAR79Uyee89tecCPv/yK7a3ehBM3Lh1Xck7d+p1P5aodz3xJMYCi6u8uastuANXuztN3z5aDNS7mJvXCpVwMgajQA4Po8OGp1pYYcnY7QLCd2+orm27uMpSSJnt8I9ND5vhTHPslaWTtbWrnIPE9RGoXYM9vV1mSfTQOGB+hflYFoCG6j74QxX7ewcEJUiALea4CieecTHJahgAGSQ4qEoPDQcQTEXjCYaAo+PRndgrSQTmhv3oFE96C5QCnB2KsnKy3DC4ZvUqE7HCL7n7/G91zQprL5Mm0BPSbMGyAvCTt97PSA/3UDrUb3JmsbxmXeXqLfNphXPJ2clpVkKnCrLTF2eGBzsetjy42df+cG56xOH9DslPsSc2us9L6/whbgQcowxd0J3wbxrFkaOcJmW2SkBGCriOMGwd0wfYCJkkF2gxK+QASchZtCHYMUF2Fcgo5/bEjxaahbyIslHAZ24+jCLketIBAbepE8BF98EpR1uAnRnkTYyJptTzrN3YcXvm0Hz8xHAcsKJr0AZtlGdkrBHXBU0r0dzZpEUb7ZpSUd6GCp45OS3TcUnjk/NjUzI1UxaSUlfUrf/cF7+knJOMQP7wo1NinR1bt9iWZMnaqZHsg6aRCFAwh09T0wMTPUzvg/fe1dahQ4doVBwf8IfUiUmePHnSkXGclQl5NigFghq0tIWLtNatXQ/ny+fPx4GIOUtaTTdomuE3H+XPWG1oAheEIg5WGjQquCBkQoNZxQ1RGKGPjgBitFd1Ws1jSDFVnlLx5CyL2+EJ4wgAEAhwC+p6ZkEORnMZC+EfOXIYpfjAafMA9IFBaZEG8oGekWZAgiEo5Tp88yGGMfB3ZKSmeR62JkbROnvHGflF129dtwHp+NMnnJLEQ6JLj/nh+x8g05Y4vtQZeGDu2LqNJmORc966+rpffOXlO7fuCGqB/Zu/+ZvszCzQzClglF0XXnIF9MHZZWLEymUVn//853/4w+/DBwkI58QolwLKx6uFgKPLdQTf/e53rfYYt0CGz7dG6uRyTDO8ccmmvkN6j4qS8nEAFb41ra/kPQCXJ8UJPHzYpAqtQIs0Dd4GE1hcdGpnz9atO3EYgcojED5+9QYQkCkGVymQ1bokWKZlxd48CpaSo5cQ06IA0bfuA5B4cEXoekmfjKxwGhX1ox4iPbUwhFd3BDBl2LB2LclqVEOaMyZ/YMm39ZGZFwB1guS4Ynm1Wqor+eQTT3DFcY9vRUgZ20L0dAoQugEVLfra135Nc7p731QaqsJ6Ruonq7xpmenYyx8i08hB0/SKKM2woDpal06lFaT8xS9+EUqatz8eE3TNnCo4DA1iNh9TS7OTbEG6ph7HT46fR1peXi5ksBRzfuu3fgvbKaoqsEUCMSFBMI0K1pGZHWaaGSljsRykxcmJkA5n3MgQ9AWqaAjywQOHvUwmBzK8UUtgEwceaimP50gDh6y1wsrQ6MhmHYQCkOfGUYFXEEMyxQMHBE2ogmQcyMhMpy1o8Z45h94hWkLxUn+hUYRARklEIVNJdIHD+nQZCvuVsHDVA0JoqWftKkbD3cuiIajSVXWV1B9BLyzERiMWEEw+aAUJzD8zzH2HRSTIwwEc7ZIsSlWnsf5UIFYPLepw/cpS+LH417hAFAKZKgzJQqjQVgAyM63LtmICLOA+lNP7mHUeFI4/4FMVMqX9MMFk4vMT4D7QQ5FvLcZ8AEEr2GIAoDBs0QKgb7X8hBUoFbT4VhEH/KoVJRWAHlPyQSNG+QDrPdkpCQhKNeGT+GuvHFXIz5xmkOVQf2VlhfzggIreL+RmTZp50iQvY7HcKoFpPCoujPBSXAhLB9IbCVmYZU68lWDOqpNf6b2UsftNDyWOy5SCf3tnh/6JCP1K/OvXrf2jb/xhWUmx9YL33nnX3E/Nshodg4PSmeXly1fxRQqt1UOaSaK5eQV0XVdEsWDIQXR3djMGLzEXeVrEaPSbo6VPquCvktyKDBktWgzV2TAh/EKvkvgissFlFTWKWaoAiE24iYVKcuWgsTf6wfVjCw+I3axXYQ9x4CU1xRkNTrDhsygQ8aAUVtAw9aIW/SAVfxKDWv4UPdgIgRA4kKXWvfRBOMiYybVxQwQUxDU9s6Ri2fxiImzNvlgdQ5EmfGSeQBja7EQ8HbcoW9F2jqefPVG7PCxqe4lY+alwkKeGJ/fvNaqrLSbNnkEwRy4HAxrKGGkLf/EKtnFWydioTX0kOQZ5PNHbUT4TGs4rVQU/1frCF18Fx4M3vAjp/O3f/i1nxBXu2Ll1ZEDqyKgOFT/NSAUhNj5EoMtr+JG0lDRUOmvZe8lUjtOsWb7UpkQ8V4Y3JxGcjLnEkFDKi8XMYfNP7t1XXbXCShT0MBOBUFJMCKIYMgWspAmIYRKPFp2p55T66R07duI2xaMAOnJcjZd9JBfpPpXn7yw5Eqj5BptJ9NbeE4GSOMDyfYNPhfAfCfHIBK9Wr1whLtGWX7kJMah42o0HrIYeYr4qijFIb+gM84zyuQWGIXtBuw8eNMJK/BQ502FuVHBAz0lTzutrr33PRD411nOY72UFmzdvBZO81EKUZ9x2EiWdJLrxsWnjOsiYC7BkL40NQxwsiEVmNIwV6QmO8Rvk6ycDADuhiUPAwWYhLB415wdrz8SK3vhyDyRQSx0M30RvSdOaCRbRKFon9lJSViXm+BO7SI1eVVZVwtD9RkePPSXMfeedt518WrdmjZmm7r6hkbHp9Kz8nt7hdz44mZIczspwF+zcYvKKdTtXbto9nVI4PJMgRyCa0BivLMlJXZxovnejqeHa8GDX4vxU4txk8uxMwmzIoU/A1vAJmfL0RwY/hB0qYK3SCCA1PSM6zNOcfkjit3Tg+Ahbd2X8h6A/MSEvOyPJyUIJcy45s0nAOkCI4w0PHBwUTbRgNQhYBEJwr9M8ZRgAWP4z/+IHOhkuJRWjy+eJ7IsUvFNdXebg259sP/YYjAg02FAbXpC8AtqWHuzhnQkXqIVWJkIsIoVAF2a9xXywS9LDHlyLFAlp49PzGDhh54K9DFm523c+ue+pw3MJidm5eXfu3nXBYkNDfWZyoiQqJ4uTGudGSehqmPU3SR6dGinozM/N4VjghiKCIzXWYcaEjcNhxcpVQjFLO/B00iPkr9+8wWlsWL/RFICJEL7FYJUB0iICYMix9lIABoV8fTyY9ISvCwvH0S5qgRfrpvPCbvA1hFLF6Cej41UYHe0ynWEe3TG4Rj379h0wncRkMEpzDEpDWscufkA4IgZyE+3zz3/WMEcZrWvLsEoVwSjgBw7sM0GALuZAEFqktNwIoti7uQbOx9oUrGJf6lc9tF9ZJWylTT7/wmfkn5kLAMR65t/93d9RAjrvfwuh8hR8O5cdVlevXNHTpGalbdi8qeF2vfGGwhA2J8YANY2HJkFQQTegJ0bkdlQ3SNDRsC/9wb59TwqNGDKfQCXkBCJTqO1Py7PQe3JXmAKLPaS5Z9D+4i//T8K100larxRl/BQswJCykc6pU6f8avjNVa5auVZoTsewQgEoySW2BMGfmJLAdh7MYRM0BwM9a4gLRdo//uM/QgaqSHAeEciEToKClIaGxrXr1vFsbJnhk4L3VF1PSkyapmCYGY+46FtFZTXp4wp39MnpT7Zu3UTxYDI6ElLkLf1DjKpgEYlzRE4Beva5pw3g8eHAgQOwun3rhiaMDIlp/Zo1ni2uasvWKY7d0dKgeZCpSAGcFaGvE/0TAboUBl/6h7omyPCqsMRCwTzdY7xOgxMS+Mmz5JDIkMOtoIxIPA1hwQYS8qJBDg0kDqorKI9UNOQVMxC8vXWzHjeYj2ky5LM8Ia+wG85YqhhuaBEykWiKwKf50DZN5lJPZqW7YbacP7Y/amqOEVCLT/BGcz4CNpOwzrExA6sV4wrCBZBotAVb0leMXjGKqAeZJsrNW7bSf+wiRLT49lIBDgG/6bxaVDeuTmcGhwYU08f5eOA04E+geEvWKuKSj1rcnTc0M/7GHGoAAYghTQFv9C94jnAdSgixxibsJYODNwACDhm9hoYSkxKYJybjvwADWDRiqSsmTW76xPirSFjea52FQlstHxCQAzEBLYRjJ6wMOLDCDSUBFBtghZKqBLWZmV5SETJvmRVoNMFHFW1RG3QpjJ+EixaNaqWwJGzqhbyfYELxVInRo8NeggMNdbXuwbZj3wD6VlgBbSmvFshkBxlwYIi38bBKGTjHBMYVMdMbzzGHCR0mCqgSBgBgqamP5NdMMDigFwfpkAMxlONSnfurebsYzVU7TdapPoRksyBuuplI3C822rd3/717940EkGe7CVzN8soaN+XX299vLzyzr6+/s3L1mubWFngQnlPqjx09cvr0qd/8jV9zAaodcj/4wfd279wNmYfNj4ic22QAvQwibDwPdxwaAMS9CLXm5rDsQeMDzI21FjsQSTaYSIQohCHu854+BIZS3llWpVASU3AZL5QEk+pgHLEpg5sUS2/kjc4WTKDgHENje8Y/cR/gPUJUAVDYMmBdY7CfpiqJClf9gQw32GpdcwwbRaooA6BjDhzEoYwmIKCb1MEgig4po3+KFREreFJ/gpCdk09s3qNaSZbPiYSZkmiiiMHEXReq6TEF1QZZsIqj4YyCCcVs/41VCk+cPqFdmHBMJo1Wr6oFE/lohABUkcZmdX4ohRVCvHGmP85AwAAAt1evWdfb3wfzuCGzoYJRs9qq2PQGeWgDy1WZYMtM023UwAQVZAqTkaFwhI5FZy5McgTGuqj4k08+setg5+6dXd1tQjZoCzoVVtLvWsdVLGUMOOD5p4F4WfnE+DQdE1IgCjeU4UF06sTBTrzULYGmdUr14GEjzlMKswMkSG2UN5dDkdAO5sWLl9lqTLgNwQjZt2/P+++/r8c9ceKE3sUyMVr0QGBiuCpa0S4MiQBiqrsUABM867qc3Qua3b0QgJKpHFyyDRG3lWc+ZWUV3kODdNi5UaT3ENNLIoQ94oxDITkdAtUHCw3/7Uc/zMwIOZFMTyt44lkkSVLkhWTSZJLGA46tEFjHK86UDTMtl1MtCf1IsLxgPIAceUFoiWWUkWZ+7jYVpQN/+qd/GqlBku7N7VQkAkN29PqP/42xwBPhA/1Dgg/k4IABgLRpngJPhGgcqK3l1Aav6IMuFobsUcbjFz7/isNJnQjR2tpy+MhTzmlz/wTX0tzauXbD1sGhib//7r/k5hRSNisAybYuF1dv2XN0YDZ9NjknOSOcRpdqbDE3npc+n5O20Nf56PaNy52Pm5OdLzQ/NTdhoX9W8G1+H05CaOhJk7AGbAMrC5mZlW2UmOYgCVtsnfkpoOd+ITcb7gkOiUD2GkT7AdKTHefvYFBbgUMKEFBhjTLqxkTuWMHwTfmTl1DdN5fBRmT5OiLILhLHmFiOsBBA66J6oSSpaZdkMdw33DAKDsyQGuRHA0uYipRojvlXPFMSdqTMDeghTI6AQ+JhicOKsbRgZ58mpiwmp0/OJAyOTA6NTWXkFqVkZD37wstVK1YmpqRn5xdcuHT59OmPhnu7Xn7xBZElHtqioV3E4zNvY2c244IPPaEARK+M9xyOYP0b3/iGPh7yUWbcvPkhKDljXpxUXrHEbO7DB2F/fHlxsXCKOjEENiXOozPIxCugKIOfBC5AHT58WKgnhBXcK8kv0RxzPQwBr7hc1qciNNTCCqKED6mqwmZ1UrUrVuEMIMooTMEgzyLEH95IILx379Ghw09t3rzl/v1GmGsIuZcuh0wPWNFSfR88OWfdHwiRc5jFhHhzMz6IeMyNCi7tUVELbnbPwko/oukDh55yObPzjhkI9Ozv+i//5b84YgEfnn/uORMBvdF1QnZegaCfdwSWi4Tyi/LbmlvQy/DJ0b2WwDIlYOV6IlYoz1kdOXLEAM+poAyNp8WTXdGF69AIVp+XLQ4Tj+Kqs3QVMGInBXfdOJ+DB0BLxdJlEpmo6C/+8i8ZtzB5Gcz8NsfLY2MR39Ld00MZTHwoduN6PemIE1grhJVZurTiX7/3z/iprzDPGil8WL/iQ5SHBun7bmxsPnHikBmlDz74AFeF77ghyjTs1J+UlpVBRp+lkzXmRDKAPlohDuWpH0KQoPWRsUmSIh1a50o4OCOfvUhOJn0jYyLWNBxoyLvvfXz86f3WV90MYAxGCjjZ9PA+1lEG8O0BkI4VOd5VbpzwgMnI5wzxefeuPYyOuBmgoRF9FqwHo0sL/lknsqK2pqGxgRowPQwhdAhzqjA0tvQNJWTadoUc1W39YoyykpgPEZjvx0MDH9772rXrFAY57h8wNUFqL730kpNFooWyTpG9LkxDSnqDRQikkMYkEMY6obY3/IPtUtjFgqh9X2/IqsdtErRHBj7CZSgp4Jt87SE0F1FTu4KSmz2Ev1b01ECxNUKJhUhdaRc4ug/7zEjER7eLLYBgvoqq0BzoWRMWXUAMo2DYcPeOgQdlxhlEYbvyfiJN39jo4ycNwQEtudHhEKCBDI7BhveR1oX1T+2iwkfTBOSNNCfOQUVN0wqc0Xn5tLWHPTNaAV+OsZJUTjFX1gIOMfCjxkO0phhoEPMTdaUAdMOf2jX0VUx5rWAaBPyprlrYqAkPYWInuv6spKSswJ1R0UcVH3yLP2CiEQ7Kx1oNPqwKiku8VAPmSirj23t16QOEoYRRqijgQZqRNzGv4EzxvIc/TACEnjI+HgABKhaNMv6Mm0CFVhRWBVb0xJ+4x/oATPx3XzjhB9T6m++3IQ9yVgMsxLuo3mnHlEAmJU1dXbdyYXbujZ/8+Int2+QSIKO5uYUB9/UOkdDY6CQtN2csCdgMMdBmxByWp3udNuU1a5ScUd9wz9Hc4EMOQuY6ZGBPTIw7Gu/gwb1SYwvy8q9cvCK0cg4pOxcgYp/1DEISTMD+7r37iEcAw4aA+emVK1binWf4o4IBIIdhU2vsUAx3eF4CplswtA/GRxU+SzGQFYure6ZJvoXp4LBk6ru8qgrCsGUV4BOGn8DUq+EJw4OVcVSsefhAKLrqGAexprCSLOkQqzh+/LimdSGIotA+AefoBFlZoSIhGbeOyrl88dKFSxfN03uj86iqqZbBL6pw8U3lsmoqUlAQ9ojgMKnH2gAlmScUCIZMUahHUZiH3RfGky7NoRYcEB+KY3uf3GNWz+xCrKNQtW/BqT9mTeiKns+Jh0Dhg2VcHDPjpY+hBlrRri7cedUKYBrv40gB1A0OjcQ6rSO///AB3+El/7usuhpMSGrFvSSS2ZIWBf0LTz/9rOpQwjcpQAS6e/ce5FjXFb86hpIH4fNy8nOMAQVi+KYzg0A81KG+RAAlTpn48ER6MYaMjI2XFJfbeqqwaFvTGIIPxK0MmMqry845aO5J7srgILt2FfFj4kA7x2qOBL2ml7w3poUhx6S6zkAVmU5atLaOz7ynwNfMHJjGDEiOrQsomkB5EK5bInoj5zg+VsywwaRjJJH7MNy+fZsbbSiY1Rjfk1OWcao1Tf3M/VMVz8g3VNAuZDzLZtYr4IDDSazXeYPMN954I3adUIWbARUTgAlJaUVdrk2EJEVLT0H0b7/1LvTw02HkquMJvRU4WTVCpjEApiF82VKrTyE3AwRk/su//IvQn0o7oMJsGeAa1W/BgW7oRewVoTOxehgyiRTZFFkb7SIkLzdfeYxSBkN8m66urV3h6re+/i76W1e3ms3aiyKQvll/r7yiurisMiu78O++/U/9fSbJcjoftySlZmWXVm/dd3x4NmMmKTspPRfwDGk6044BncpJt3Vgqqez9U799baHd/NTFlMTZsMlvXPTi1YDJPZI9kkMZ6gnhNM5E83QC2FdeGltHBWSdYLzNRGNF3MGAAsGAK7+9Z8W0lNcipLoHBSJQMzE5VvcmWPmDJIdoet1SJ6MnK9lBQ+YNjXjKKVJIyuLMPYVZGU4+1Q7YbZVE75Do9H6LDHFvQX+eO9PfNPbsIvojcJRtxG6s2Cq1t50Dx74SeVJXC9gBWAxQf6RZeBUyxwC5pGJWTeGzyWmSwSq27Dl2LOfTcnITrK3ODFRzsDEyNDXvvKrzDM7M0OmJ0FXlJcaia2qXfn3f//3FJLHIE0F2BeKKJ7R75e//GW6QWe8t3hCmTOi+S32Qr7rNqxnaI4TpWa3r98g07t37zvSjAOkaYyLWjJAv/LAbJ8vZUe8FgWTkKMhAVkIPuxJi/ZHeWBZmEMzg5mPjGAIILw6rONnP3nDSxuCYilt9I05mlPA4Jn/l9G3dt0GU9qPH4f7XDHWhLdEu9gZ8iE6Tc8CL6LxiWy/A+StW7fzbFwThvzkJ28ybUdgYAsuU2Pkcw5cvQsxKyorDh464Lo3qUQ+6DUo44uWRflyt2/ewrferkC4DoiXGJ2aIKsrly6JcJ599llkWhPWNFqMT05+8AHvQd46Yg7hW9/6FiagmoPlrCorl3Iv/kSgVXr+jUlGxLabmDBBhkAHVcGZeuDzf/v7b5OXk8pouHVVDOnp6f347BnX1hpvmKqXN/uVr34Vhw3XxcGG3CRiXh338AQazc2P3PECc3OgEIa/BBw/YZTQP+5ldD0WbXhdhg89D/SE7Yc+KzvbLIdqqCB9TeAPvukpkAwryoMD4ADIdnwswsEcUaioXV6jzzVvDaY1VM+pSUkKk4uOGLerqivdQGFj3kuffYF0NEpSx44ehjnIGHXvzh22RtmokA0DvB/xCYWpCrdsBdXHs19zjajCJULzeoTbt+6oq+ML+tDb5dAzrKNXmghwsvPop8jHrxBDC0+LHHAKXR29pBSZhI46DlnFkIcW0mBCqiHNp/alJeUGSxalw+lFU1Mvv/wSklGHZJ1L7E/UhTYBkYWhAvsiXGI1rYbPelKcrK766eUAiMIw3oMr0gqhK4n/dnaYL3DmHHzwP36Pe6RMAdQCBKtR4SWmoSszKxsC2MIe8VMB0ZGSqvjoaIgPtvo1MI1wBBH4Bhr8KRKeaAUcheEAGaAg5hn+PuZtvGG2qgPujZJwwF42wvToGG0Bwbda0kuxRTHoKS9KEfT51coDAlUkKdkZmoYGWeflhI1tMPQhAhV9A0VLNYp13tPPwJxox6YODeRobiGE6VpUOMbQg8J+5egBB0HFqWmdZphu8BM00EuCyiuAb9ryq09ML/SSw6EOJlVD0O+9Wr6VRIv3isFZLQA9e8/PAOhBWzDEOuXB8fwzTiJWLYTTRgqvAAjg+4AJJR+WGL8BSnk9Lwy9Sdy3NiRmGSzxLzyK473x1/QY8gzxBbTweNwRzq8UWM7NTDlVwI0nxAOQ0ZuW3JKhV8jPK2IPkjr0SWakwPSn3VkGcTLPXFdu7CHvsLW9r7gozw0DdIi3LS8trK5aJk1iw4Y1tvU4OCgnM4cjNnUNRfl7pjE6OjsRv3PnLo7GzBZT1wPRMBrDgHWeWRmZ5myUN0mJQTwIW8ILRsW6yNizWE0VE9UOB8FrvAOTGCg6sHgXeB0dzYFlwMbz2VTEAJlw6Tf49ATfAUT1w4dNypiFJR45fIg1T2Mq10HQfgUcfxXWz8FN0+z23XffNbL3wT0zHPy7Xer4DLLgu7One8odzFL6nF01OeFSWFfJOENJisKS0jLLdk5oJhqQlQc8KHe0+xvCLBP+Om8OhS/ABObKYTnfqbx8iU0UvBinow8zDeYCsn//738dybo6qEJmZW3t5StX7ALevHnTxOgYyPwUO6Q3mElSzMxD7BTQwrbNZFAMti2pEAlDNgwODfkJYleuXYeGuhRx6bJqnkvH73lqenZkdMA2kf6BbkNE0CgV7u3YtpOLpNPg2BHBEdu6yjAsNN1ucBnyjeW1KyCjEyUFmKgih5VAOQi9jtGdpnl/EPwp39tcBbm7+0Z5uk4KqvvGFn0kXcUoTDNRzbnUrVtDGZitbsCfyq9aWRebjRk1szUcpT8J3WoArJin98hhUYyNjtEiTXtDOprwwWr6gEAewSkQpPO4rQMDCZ3IbHZ3iwsy7XtxV/n9B416d3k13LCMkYHBEQmI5g4UwBABkPgpDl/M6zi1k9ZpiJSjY5E6JXe5f4AsII86YzyYcB8YRfdwWGEChRI58orLV6zMzMxinqdPfwLIJ59cXr9upc6OPphfxFXRpswig3PdPDjWZ6yAo5FKsBR8dhAhwnkDxyCSha5IDjxN4D1waeeOXdjFxCgAjsEW5MjYg+GUly2BamwgpIZvMu/379/nLBo7Q2wGyM8PklqytOL8+QuSobZu3z23mFJatuy//uXfjAxPWfZypkdyalZuWc32A8dH5jKnE9KddGl+Qa6nsWXC7GhK4lxBbqZ54Xv37t66em6iuzUzOdzv6zA4l3tL/Qi3/87LmQmu2bh6NtqGbBwSBgEhHI/mVJLDNFU449/MUbTZd2FuRi5QasqCkMrZoKkOQJA75HQgG3tNcejN7Q9OTEnwU5TtI3QBjVXqLQwP9Em6ltnpSRmNIHvrO5YUJvuopTw++3jwCQg4bWNoxFACT6KNv1hrABP6TmrmVwlXypscgUC6wzFyMmxwDXuUZSPp+xMs+idOTs1Nzi509o4UlCyZmF3cuefggaPH07NynbkoObOh/vZTB/Ybn9StrHXlwMcfnXZ5RU3Vsn/67nexiA5wniTF5C2VeCBW4R11olTcIxKcuitisLBF/draHgusTTTShzOfnHMsTWG0HsVw9C+cA9dKi5geraCr9Aft1IOXoDNcpeZ4+DgaoPB8nQiYoiJZK+DQc+GvAmpJR3G4rRUkZgsOmGxN583KKD8T0BkBa0jpvT0+vNbjji6HXDmCHObSROG5+8knEEVRUeeWD2U0ireMl/VhO7S1hRVOpRN9Cu/YlJ1C09NWQbN5Gw0ZWlsQM3guKi20tUTyj5J+ArkgL4+nVQUczoe8HLEtshE5YeDIqH2BzUXOyN+4EXX8xuaNG9i7AjyMU0bZnbURvk6GOstGI9+OyVQoxD1oTAvbzX3IRS4fRlkl+MpXvmIelD9cV7fOT3pMxBrG2uyhO8Yc6/aCiJaWVqDonsjyrXff+Z3f+R2zhSCYz+asltes4ip13FQxxMG3bxs4CbLxn1aLdiL3kkMnsRex3DjpYBTfxRuIFEH2K2Yin2TFWVaq2h8/9l4fHVuB6XkPPpQBQ/hJdKmCdSSSm19E0yiGP6uXhVUXLMI6CXj44IZVhXla02oQ2PnE9ubW1n3790iyAkct/tk9ABA254UuIVuwmuhUHwtHVOvy5Yuqe4NG0tSWE+o4XpOi3rBcSyWaBsFGf2OekvKS6zevGejSRr2MViSv0hML7zi5besOqogKWHFuvqdmpzAHaXSA89S6PSRq8QGRdqWRBS2Ne20pqbZ3W9FBoF5J8AOCOIF1ECIVpeTsiGhwWMdEOvV3GmgO8+Rd6blaJrhIQcwZexLsGh4K6Xk0yjm4ijnHr7m5TVIJM0E4hD0gB5Kq4wBF9e3Zm9KysCOfmSjD6kkTdX5lVnTSRJtOHz5iNqiScs3yanzWHBHDGQRoKI+Z1FsZL5meXxVW0lEBRlnE6qOkVtT1QCgefoYJZNTCPdgSB3xAjgGarfZsWkUV6LEIysnJQE8Vc89oVBFM3zDxoBgH4sGfAGoFMjDUAndPUV2kY0StAIRRCr6JQmWAwg2dNXaBT8RDw2MoYpWwgqQqsS5RIdQhU1tEAE7cugEArLQVY4IEAGP0PKjuJ1ViekMZ8V+0NRRAPwHlV+1qMabLnx5EOHGQ4xvCfo3BwgqlBAd5/MFeD8AGyBEfEv/n3/kVBPMy1M6p6tJt6LHe3UtI2yjD9wmiYjJ0XieOHcrPy65cGlLkeaho9TmVN7TOwKGboqMQRi2mo+A6NDIs/0cvW1xS1msiMy3LeXOOLEI2nhqTO2E6vyDnwL6927duNKa3xX5xZpE263nl5GEOP2IAoCE3Mgq8srJD/pOagFN3Zu/ASgziMemEnD8Tt4gkEvok4MYL0AiY/2JIFslcjeFUe7KhKCAoyY/gGn6RaMxN/PWeWjsh3ikf+gBc8yvX4X0se4rCheFscKkLiVZCGBiDHLCrbqAP8FjkmtadUDI5+gyYYFRnsXD2rDr2UlYboB3DJzARiOg8RsZGbcs2fGptbrl9p97JJ+bal5SFXSkrl6/QzVALa4v4bD7GuRzmKy3tiQ7NMprQcrFI4/27zF4rFcuW7ZIdHu3sMV4/efKkgQr0MCT2j1QE7f6kl4YHj9vbZC6NW0eZGDdZ6RBYyQ4Ou3UxXEd3F8cqc3R5VXVOfp7tztl5ubQlSNLcxWQ4i4PGF5eWwVP/x9+5/J3ikgutcEuXAdL89ERJaeGZTz41+87CiWD71h245IEgZPTScrKD4c5tO1oftzXcu1tSVtz8qHVgsK+6avnxE0fLSpec+ujD0x99ovt3Wrx4yJ4Brp/jtrxrbBxDg9iJEyfoj2EPPhAcPnOsnD510iNCWJ9x9MQxGhKv48NBgCKdJhalMEUOJTHRikipwsLO3/7tt/yqf6X/8KQ5qhNibL2xAXOyqiBHE3LW/OS+WAYFE97TtXre6K0dijA2Otzc8vDKlUubNm2QreiaCwfHdfW4IHCYyEz5YOO+fXvpD4uFiQU6kI2FWLW9mzTqwrnzFNsJ38bqum27dxDFLrSuRf0EzutpYAICxBykY5Oxl7wcdX3zzbfNYBGEj/QSSs5Xm6NZVmWVfw3qnNEEDlXR33hA4N27d5jDr/7qL/tVzEfzDz61n8SxjiKsXxd0mxB1e9/5zj/q6vzJDDm34A3nFvSayMc6LPXrlm1bvd++bSuvbgDgEiijMN707JlzR59+Lq+g1M1ficmZf/5//lVZ6bLePnM2PQkpGbllVbufemZ8PnN6MZ3icz7ye7LS2MGMmxQccs8WhsdGBjtbb5z5YGZsYGZqLMV9uvZBzVuSnJidsQSMk+YT5sO0vG4+ITFOZQmbeqOVat/CaEYBW8MAc+72A6TYA5DkNOjEtJRwRxiY2alJ8+7OjbYOhxl6KUQ+ZiYtGYTdAqHLMcVvGpjTozM6fgCBxZbYBXsZvVclfOL3vuOOZEHcLa80NWQKga9LNdzivlQBMOxfSEWI98Y2KVnZ6eY3FgyEHEJkH6dLEow9ZhOn5xP6h8Ym5xPnEh2UmPfsCy9tfWKvS59z8gvsa5TmVFe3amJk+EHjvZW1NQZIb739xmef+4xFRVokyBORo6K9o0sI+J/+039iBTD3HCvG4HBIbrTT0Tc9ZF8uKqEYpn+oTW11tX6BWwbKS96AMtNtcQ+dZKo0gdpw4FQIBHP/sXeiXTSE6rIaA07qx+4UiHsyKMGB4uXmOA6uhArBipqBzAPA2QNtdwyu94xdAOdiXdaXGx0bWlZWCqCxK7q4DgWuXZODdIBJQolF4z87AlAOHi/NLtBleAOsdX93IK5YURvZoAzYAVIw28KF8kVOH5HS86PXXvvK174Wp5UfOXQIBGExoYMJVZLFh/7ePv2Rm5UZaW52GMDwn4hat6YOjSJy1jEyNIBRUIqDbzzBPbTAULuY5ic3c8ETczg3AwCRrjkmGmJDnWtQsjNzjBxA00+Z2qA2bi+CgHlo82Ujo2MwwQqpQSvrVluC6I+iVUPK4NSn5g0bMjIyOXAuTlvXrl2VOs8RSRTFKzypqKjSUXIC5GiN/PDhvdwRyRIBcTN2RCmtFeRQerPMggOOS3mC1i2iRYeLM9RJRRygzH5FFJ4UlZTTIqyjA3du3/IMDnWaGA+9W3dHh4ZEL3AQ6+uFKp0GUVxw8dx5ZTAE92ZnpgyEsF1z2zZvVoti+Fy+EraBGcbgp6kiGFpJA1zMjsnsVBaNvgBKpE97pTRv2LzB/UAuutm//yBZYCY9/PDDUyIT0lfLdnxhFitmm5rA5/tNYU3MihlOMgT9ES2CzN27zm+oFAwo6dw2Eof/tu1bCM6ogWQ1Stmw3aQMPhhc4aRew0sAaRSVoM8yDfFNLS6dgCJHFByLAEzr+AZ/8QlTUqupOVxpLC/AymJJSSHI+kTFlCEjQCCG+Tgf/EnIKkxz5jjO+OgsNI2HCPSrhUGcxwHmGSS7GMI2b4qKC+HgffytJAL9isD4pSY0BEON+rS1dvjGMeavTPBpYSSWieGeEe5PRuoDiD8xBO0+/lRFyWhuZUK6CmzjMuZUyV0rOCa3gudEvpIAshqapjr4qvvQB5yBJ8RMvWVmhJMYFVPYZ2zcPMmEBz4cfGjAnB8G3AeLRsdCQgrS4OZXbZECQuI/AQcZBKyDm/KOaIsghC7Sg5c+iqkIjbiY9z8j3OoxJYG/Nz5wUFhzGvVSLc8qqoJAKMUFSBOZDBBwrCBlBeKfFPaJZQFg4omda1VjXeIJicIWf3nMvPywfQolUKcNMRlgFRXmzs2MuknU2cHQIgwxKErs/eJ2GaE/0SBLUquYqxnZ/GGxyxnqLghLz5bl7OxrGEAdT53UiorcnMxnThxZWesckoX2R+3Gu2UVS1j1tWs3sM+eU5p65syn0JDFePToUZgQkgDFbh7hFI/Dg/OACjNLVs2tEEaMtpcxtRR0/cYNrS1t5s38BAFw9AG0ASjcwUH9DfwpB/wpREtL89VL1geTsVL0THxcnmESk5PqoAMQ43KOTz65V6MA0nz5B058ZxXG9PiLgQqDTCdMEmAm9sKEe2ItWtEcAsfDqWSLUhD05/F3UHaa4SrNiYm21tZGR2JF821jQ4P2TOvMhEqMXJBhUYzGC/4k2OjvTfyQo6x4Z/UYVJy/eFnKEHMV9YptDNntqOaviQDh+i0zE2bs/MkfGYe4OkDQKTSqW7tmaGBQPo+g3KyI7CzdlelOOc1r69bo4y3X0BxeEo3GVByW3eEchMwvzPcnF+CCIT26M6dxz/0v8nQrwo7VRDxsbW3BGUxz0KQeC4bCd1FTrDn4bD7VIGRZdZVlIUbX1tb60UenLcN0d/eYOzhw4ODIyLCF1NraFbaj2O8tx0xd7OWLBaO6EG5dD8R1YjItpQmUhDLQdk6HClEbpzrAU1aAzk8x3u36tZsMlUqoiM+qkCb+eGZXZjktdJKdmUJGGK8L44A3qnsT8SRMlCINh93czPbYKgTkniC5o7391q2bWESvpL5MTQtYUy9eOm+m1SatE8efNxONCgVcu6NpiqDzduIn3KABWzc0GQN4zynL0WeGtsvv27fH4rn10LiT8BIQVkzJiQDVzISLcBcHCFyrtGk26yolx57SDfOXkERgVzePbMwzx5QwcGlFBUtEi+Z803kdv3ZfffXzYOpOfNuFjHD8pOGOmWNciFXmH/7hOzHn8UcUDb4FX85IYYbGvcDwyLHjMkXF125uEdrCkHq8+fbbbqE+cuJZ0f/45Nzg8OS//uB1U8kur3NH2HxCWm7Zsn1HnptayJiaT0tMCeNec/Xicud1zi84eMc1uJINne4513b7SkvjzY7W5pTkxZz05MVZU3KjtvOa3o8HAEpSWJYmFNNxidSDm06RWSLCTzX/wg5Dwr+P9J5FO2rnTfzbBBzGBwnzuY7oMYKIzlpQQl6QfcTuB8hKD8MRf4U436lBAYAJHkogZRn/Q+onLvkZY0mEcpKUl1r38d6fPtlp4ZAx1xhgvg7I0lB0FlDYcIbzMNRpgYTPC47gtKCSLn7i30PiaWa6dZH0hcUU1wInpKRfvnG3dGlVuD0tq+CVL/386nUbBkYYbH9RUaGliempCeHSo6b7Vy9ekBUm2/PWzRsUmP7n5IZD1Tq7e7/61a9GnWY+tym5ywAbbsar5Cvd2IfPoQYWWn3v33eA3+tobaVFPnQMjeYvGQhNRqkPL6Gj4hXB8ZEyzvceOnSImYDJ6+qJGYIH5KBXkMQtX7p0denScuuKJr+N90zGeYkDeIJjWKxd41sVpfOJw8xS8Qw8vDnpsvKlfJFA1ocT5iU6u8IQl6XoZbhAH10bfx6H18bVwALCG1jfVjIcgRDOpgyJ9Y4zNvlldRppIjBraG3tTdbP161Za+IGRYzOOoZ4VzAqimrv6GAXSnIvn545MzI2tn79Ru/dgeNDYTSdaQmurw+qvFPdqlre7MKF85CBIay4HaaNXjQ6NIae8GZMSUcAc4wlL5147H5Nsf63v/372zduWiREtdMjfPgQZZwoDcjE5BRxYMXHH3+sa3BA5KPm5tCtp6Rp7sF9V6E7+6WEt/GSc9iwYb0EGE5AiqAkYRBu3rwDJjeF2zpu8iUCBCqPaVCiMJ6JWLtMq6en34p0PHZ65ZWX0M4W6ADhMgRS9uEWVCEvvy6vXe1PL/F92dKQ7ujjT2G9isUFBUqKremeHsQk0Zp16xru1puionK4wUFJM5ZIc+zYMfibVcY3M3dicSsAnq35ONDPRk08dD7PyZMnJfxwhoxUxC90RlS0jXN4167doxNj586dta3x6aefZqRIhrN1TiI2bJD8w1UixBIr5PWzplP3P7WfmXimyXQAqpKFREoCRbWIWBwvljCEIAgX4SHHTJrhIo0V34NG+d977z1yRwJ1xVUc9kZXy0b6+kOoaqqIMnN4eIU/fIUYDMfgj0aoYj7c7txtkGJaUJRHAchXE3wymJqg5IqpiygPsVPyMknGZLRWSf8JWhjDBqmcklpHiFYUw2qCRmBzyyN2raRvFT3EoCAJLLao6A19wBB1JyfCiQjAqu7XuAlYMQeYxPigF/7E5zsINPqApl0/cZZKdvd00QEKA44Zeq1jnY/la76I+WhRPXbhQ9b6a2/QriGFMd8HzMGBEZmr3oumwAeB34ZYbl5Y6YIPIH4iJn+qYs+hXwHEcz8hGTRYxVSrjnDP3kMyfNLD3lRvfGIWxVzyjJ+cGByUiuHghgMeoKoJtKuiFY0q7BPBCJC1jvaYsfhDQzCWRIiDoOGJ0rgWN4WNvrWiPPiJz+7e4JvFMnVQfGgDFFVGJIZqRjiltDKClZTk2aHBbtGDj2LylZVE5+DgkLCSGWBovAFF20sql7pMJT0zK1wMNumMarNlCWMTUzHNo2NDOVm4OVmQn1NUnPfC88/lZmdfvXzdGV6OAY2cSHAEJ0+dYglGkpzL5SvXKJ9z0Gge9ZULf+vGTW94VUiyVcjzJt7gJjNmGHhBnHiEZg92bYcbCaI7jEy9YCtnxN6oI5PAViUJABW0UHZcuC+8p0vPBGCcEML148nGDZttmcIE08bV1cs/85nPqGJWve1x65KKch6cwWiO5kFJ0ywTnykfh64KjnnmWO1Qx1sy1lzExkEaQ5PYrYdYVP7Uui7hbkO9c235Poc51iyvcvKAtXtjRBGGTWlxnrG5z5W1q81BWmwx2TM8NH791i0uHnOKoq4CdcIvbEGvFFhov/jySzhAdYwB8vNyNRR7GaaORXSOCYXJs1xLSDmXo9t/AyejS1XcE+xX1wbTH/O7YDpjBEwfBNqLyE+9+ebbyvMKurff/PWvOMJCc+glMufhPLh/nz5QfetO0koxh0Sefua4AzG7HehhrWN+DlhlDLcopHAWnjjjWCfIYC9QflUGfJizFpqJQDgbABAocWAyoaPFe8agZKzAN27f1Jz5HurKI5ORU0SxIu6TJH3pw2CrFukjyhQ7uVM/YPlccLQFAYKGA0Fji7ZiwaG9rb0Dw2M7ysnKIUrTCHiFyU1N9836735yZ7jZKS1R12LEZy57/YaN0MYxcz1wEz1o65lnT7BkMYoI6d1336Yb2Ku8HH06zPTEZCxRL4gDfKJflYQJzWH/ZKQKDq1ZVwcf83/hWKeQXzvv5kjLKdLtGIsQM1A6MnjvXri8qaysdMvmzYjCMaB8463eWVhjFyCuGgsJ1wQu8PQTXvEMuITzspAvXLikCvQov5ACHCuH0GA+XqpOJ7du32G8sXnTRomaJlAp2J//+Z8deOqpTRu3TM0ZL6Q6gm9kbObUx+ceP+7OyStsammeXkjKL1l64Njz04tOu09JTDaEW7DBamaaK19wGKbRgAukbR7KSk3MT5y8f/PS3Tu3Job77RJImJ1MmJtKTZ53e4zcfQtuQnxh9IJ0frlAsjMXwjXAUijdDmYMkCDHRnJPtGibuOhKgbnExTB4CLcFJ9oeMC8xM5zkFdL9vRRhAUBho63G6SnmZGw+9pMMI74FwxcWk2fCACwMAAgCV6mNZ2yPewvP8UvI+BTnhTQ5mbXYa3TkV92PMYBa0emfYV6KMwfQ2qYjvzJzU2fDaSvhehZnaglVbUFiRJg5MjnbOzSZmJEzvZCyfuvOlz73hfHpmVE599lZur6c7HTrX1OO3F1a0fSgsbAg37wpYwwtzoW88+LScurnQ7jiD5dC+JWlFBaX8Ce1q1ZR1LNnz9EBF8sIcHmD4OWCF801p8BGRDk0mQ1SAIqBfMZLzfTZ8P/e977H0ExLU2CQldcQF2F1XbiJCWoxfNpFc+SNGG06RtOm5+KSfKdzwJPxciOm84jDrAeHcOVyOA9NkE0DIcnNOkQB686c+YRtsl8vpYzDhFsmZVqtCS9Zn64QHBZBt0+fPs248Dn0ktnyWJIlURtvO7CY4X/uc1/gExQQfjx6JK99hGN/9913uYL/8B+/IfhjWfAX/irMHjUhGePc2U+ZeV3dWvQ6qESAbihC9F0dj0GjD6xj357dWAdb1bER1dDGK6iixYQ3fkIG/vyK/lHHpwCDYvtEc+rkyetXb/zuv/9tnNF03dr1vv2ENOu0Ok23QRKEjT1xuGzPHiGmh/nLEMTYBKwVvglvgdUdOArF/LpnHobaCme7u8PWOGgjmVvwgEDwMSoOPdUlMppAmXv6+trbO/UivKt5CqqiFQsU0AsxdLQP3hsaQvpAkfjSZTVA0QcF5mfDcj26eFF5fMDaoSeUV9GvitlMNTg8XFZesnXTZnqlMNmd/PB9k3SQwauSwkKdCLSJwEjGte6iCFOf0sPwwRZ2SNIlzZkjh4a+ALHWtZQX4Zz6+KP0THvbNpvFgCdKiYm+wZO/omM4Kc62OoQVUURR6lZN4zHBAGgowispQ/SB6RtAaghi0iaZAIBmQDywGJj7ia35/vM//3PRBbvASeSg2r5hHNYo3NIzwhmatBeG5rtjxyJqEn7DR3YAuhiR3oEICooKYS4BW6M+WoSPwmD6kxZxJj7EAQ6V04tZI/IGEGsvWlQsGHVRkXELJLkFHxWxUXOsJis782fVMVNFVRBOyXGA4IBl1zD3gCK46EOVgQP4ZASaJiKVztA0HBSOesNpCMdlgIIh5JXkFdUSoCvpVy3qrDz4UxlN+QaNRlHmWAo8QEwgzYGDP5UnTSeoOvIO3d57Q8lhrgrENe2yYfgTEA/MBYEP7Yz0YICK+Ua4Wqj2rUUFEAVD7xUIaPnOytai1r0HM67ojWfl1YWM8p7hoJjl+phRmvZeAY3CAbao9lFXK1jKa8GKz+H3iAO9CqvrW0Vl4nZB9hC3q9HElw7tgKsPhKxsgk6Q1JpHwHeS9oano3DgOvTFiTXdPe1I9gZ+Ek+1BJA1AYkHlB7xQGnPIjan5tB1kw0CwempuaKS0pRkfWqKzShabLzXkJmeIhIqKw2HhP7+7/2mVEjHdhc5UXR4CJYWgUMr0bE8D90309x8r/EBPhKI+STt7nriibpVKw36QONn+SDI+4jXUeiBD9WpQAYX6FlKWkb5kgodHmlxECwHp/yETH6BCeEyHwoaL4M6vZWr0Ylfeeb6ySdnRZ/mllTMyy0gA/mg2GLAwxhMBgttV65e7ihcXMYK3z4qshZdHf2jx77jgJLDEl6vXLXKHCSAWic81BE8sXkgZrgRqm8RJKwmxkbu1996+KCxtbXdKNHAw3Ss4zHty9RNegMTp3dLXLEW7E1ZeUV7W5cFY4aEPzb+aAUokl27fh3TxVJc4lYgQHCYxtEgFtu5Hjt84M90yREysDK6QALdMImC/3YKWgcAJ1zm5Fq01nAbbk7IC1pHHXt7+i3u8DjO86AbN27e4v2XlOQvXxEGjY6qgAbvs6YuzPG4tgujOh93WCWgzS7cdUh77aq6vPwiN0tgGtwYPHkZzGCmSR0dHsnCB/MRiJmS6SnGwEA/bOmPXwkdAmRNoNRGuyiCJPayCrKz8C2a52H0Q1pB43PPPg+g6Eddmq/LtEjCCmTN+tUKAEzAjxz9CnSB7w3dYwUa0i4GKsk4tTI0PBqSTOaCRxgaGMZ8fDPuhfbF8+dbWh+2tDZt2rC+qroiKyPN2PhRc4e0S5EB/TFdRQkh/M4775jsJAW7fgGneFqEnqRk0eDqlas1TYg+jjfRuxj66hdDOJ6djTMaBASTE5MT7jfdDQowMEx109Oyq6qquX0pj0I3bdF/ZzQZWxo16LT0091dnSwCZwiLoO1rP3v2E+domaHGXpzcs2fPrds3iEzGlBYNR9GOpdLJaCCA9EdJHgOQosJihGOFN6QJz4Gh4S1bNjlhWLuDQ72nT5+SjvvCSy+xr/uPWtMycmWxz84nuwhseGjC9ElrR+eEdfaiiqeOPTeXkDmzYJuUrEobc8MYMpzMk5aakJLK4M03yNgpz5ifGuxqb3746EHDUO9jA4DkhOmEuemkBSeACqRCChBNCOdrhgTQxdAVhI9VDId6hhn1sD7gfl3+3XyatYXFWSeBhvNAzesnzGU6VTOcVJym87YrwEn/MulnZyZmJifSTbU71irNsl6I8Xl2MerMXJJWsTq0FY0YfftgWmz4fopVCFYestMsVM4vaDHclRMGDBLKlKRaIEBMGRv+oOfELwveYa9vGNIY0CgIQ+MYaYwZg6MT5cuW32x8NDGblFdU4di8rTt2bd+1a8v2HdduXHX6gbz/ob7upvt37Uu511Cfm5PtULDe/rC5SPNUa/PW7SaJWd/7778vvqGNnAYlUUYs/pM332R6u3Y9ya05/ZC9wAJu0nU5Ew5WtE0J2biRtl+ZFSVnyCBTCeap4q//+q+fOXOWnog2eBjvUagkk6EzuIRwHDC6oOR6mfbHLfZM5RcEJVfSgI5SGQZp0biMmVy7eoPHE8DBk4pC2wUNr732mm76hRde0CgzkdROdWGIpdJm8J/r8wxPWurqbtcXrl3jCLt6c//MnEdlSvYp6eAkvEHS7cn6BZOqyUmLYyP9xnvoct+lbbgsyM1r0NZPQIBdbN+5A3CZjbKTDddd+7V9uwu/Urx0D5SR/MkPPozmMfOf/+xz3/+Xf9UX79y5g/XxAHyCwSrEcBI3zGFzAsKR2PvhjKa1hRbuC8lDg4MvfvYl27p88NBFb/ytihz4vfsPUGpA7pwu+5RI1vsz5z4VdJp8kuNuH5dt9yzaChjRmN4mcXsnRsdCvChzxtYwVBcXl6MRY+W18orsnVYoz+rhqQkdAcjeK3b/4UNav2nzZhJkY7jBjaNFdS4XkoSIorgfZBHBb1DdwUEuiy4VFeQTDZ/mvT0AgLMELhc0JBOQbKjR8fEdO7ctq1gKvsBXyWtXLx8/fpynog+ZaWkGVNTjS1/6klOArB3pXu3IgrlfzYlQHjv6DI2cuOilLbM8/CuvfB78d999Lyk1+fjTx5wJhDq/Oh2IPqPL98svf+4v/uIvGhtdKLTumWeeRbXupq5uNVC2GTAQcvEBbdu2Hdoym+cnmPziL/6iBFd8Ro3uFe1G7QD6STFCZCZe4hJysNRaDch+wq4Q/yUmYZ1IgJ6ohVGugMQrdGGgjAxOm1JBWD9lVR8o6+rq+tU3OJEDCSE+GbEySHrv27OXUoz07ORCMWDopV/pEoQlmwEOPYqBCTBk16YqAMR8tbgOz0SgCuWkBl7GmCsMlJfWWklcRaBYNBy05RmeMSbqgqAiBwgCtqjrpxg+zRd7e79l62YcoAy0RfsAgg/h6Gy0JIR4AxkVvVSeV6GoPsCqyDZ9T4er6x0IlxLWbKMdw3Z9BCaE3MtgcUI7GOpbUAEBTRQWMMBwUZcPqpXxEuE+CmhLRd/+BAe2cjaV8ZPyKMUACMS0+DNmHXpjbvjJMbXa8gBVEJQMaERLDSBAm2Q1oY8mBfEMBdCcnwDxHkD4+EDSs+o+Hnxi+0rctLycOwBabCSmITfqxdHwIBVl5bgGdW/Q5qGktGDRyXrprsEKoSqFa3nUDBZFPHDgKQ1jog20GlbRCpoqufk5Olgeo7Ojd2lVlQwBwaKNd/m5wWsvzLtQcObRQ/lwFb/0y79gR+M3//T/e+SpQzW1K7BGtiVMsJyncNKoRBTVBfemFuHMpEHIy84Sgix1Z2Rq6oVz57bt2GGYaWl13N7zcMhmG4E4Fse+G8/Cdev8klN5KyaNF0iDpGdW5Kf6W7dl3kt6cXGBvcWW8+PRnqQXV6gItvoG+v/pu/9kW4ITU3Sz7kUuKilOT82QMy9ZYlXdSp20rXixO4s7OUYrKBeyc3Z4RaHpGRHGc2mO7iBR79ErujWU5w05F7jRZpz0jEzSUsAMx+zUpKNrcN6qK/jwJ/hllRVkjwrar+NUpW5lOBEvt6BwembBaeoWEP357nvvc3/ySYx23P6mCpiAk7WBMpiUBi4AusTEwEwEYqyiFR5Er6zTZaumh2XW2hzCOdpfxa1EOrdA9NSU5t1/ANJDl3TSTmm8tMLkC8g+cKav3sw7DiglZe+Tu9AOsgMoaTAItnhGsijlKPFT8lh7W2dFZcjdp2+UELZw1unyhqjg2SmtXoFCUkLpTxyEaSr/KwMmvfcMMRyGlZ4bBJaGFjamCsYSlqbdCfXe2+/afQ5P40bSUd5aip/MimHp8eNPg0kuYOpHPUNSTKBrhBiFJGjQjPOhSm9ZHUeZnZsjd8Ixf8Q60DcATxwwXcBDOmi9peVR4/2GmanJjZvW1yxDZ/XI6PTDpkf6DwvHly9fwg0ioOo3bmprBPIvvfSCxAP+32DPnNyyJcuuX78BW/LVOp53dnYMDA0+98yzdpIgEDm8MzEpHGLH2Qk9n5lRK9H8vw0AhYVF1vFMJ1MDonETk1ocn2cVJbRMTYeNRBZbIhqLEWLmjNAFT9SYFj1sui/Mwm1/WrJkUAz2H//xH+0IwnbBULTambBt63Zw+FeW9ailGTSpX1eu619fEa1aeOjuefzJxx/9T//T/0hM8m5mw+JPwsy8q7VS/+Kv/m5N3cYHj1pHJibHZ+eyC8oPn3j+pwOA1NBn8CnBjhIXwvW/i47sSU/CLBH6SHdFYY6J7VvXL7Xer0+YHU+cs1Q2GCfzhNOBEkL3FmY8hejyf6xScklmLBaDz06WRpQUZkBjI3VEphQgIwHxtbl+QJLmp3MyUjPC8rHD9hOs79hXbABguKAbVN4eYD5fPj4ImrAPKsT+LEDKjrmNkD4URiA4znboJHnhPB4GVXegwtgkdTI80ZV4acrJs5IMX0Wpej5KMjFqyQvNLEy5zFE/JYfHphy/ClPc1SWQ6h+ZTMss6B+ZGJ0yzZKcV1jymZc/l11QkpGTXVtdde3qpYZb12emJ+7V356aGF1WWbl5s2WZkI/7uKPTSMMeLKmeNp8LXIzc4AkNzqG8Yimv4g+hgMEkFyH+M8mSnZnNgiyirqipMm5kL7QamTSNyVNXzgoQ3+JI3ZtRpYGu3olGmYr69NwZF9vxNrH+lxYVa4uHFEthCLr4AeleC/NTthrjbcS90HFC2A1NDNA8upEtFyE9gULiEhZduXqdjVDXXbt3fnz6DFUQ0/N4IAPiHnCIMVISgbAmjEi94c3YgoFEFBaLMMK2Ft0T18EZitJQhFcy42trKu/erTfTV1NbI5p0Ws74xFTF0nJb2HTKly5d2X9wn7VEWesHDx5iAo13761dbZojh1s4+cH7cONbIGCz00cfnbLnyjonit7/4F3467YckcyxYJoWbaNi8tRg+/atgjRxDxv0XkfDN3JZRw8fsX7tZcOdezweOKbe+MiHj5rgYMbk+rUbhLJm3Voz6IZDehynUAgG7zU0Xr1+7clde/LyC70XrfIevNng4IDBkoGKfcZhxD44qLr+lw/EMauILBfn0aIwf+UlufDA6CKOyenZV1/9YmFRkSlGa6xGkuJInOc5CRe3IWkeDUXce+yZZcybN0CLdRVvgnzTMyyVsCF7P9yfoAogcQ9lEE4E8p2IDCaCYOcmVVdVQl5F8OUJSCEmbprAKhmRyRGFUeEN3y5bVU5XBHMp8eE5bXSd4v/yv/xnB2b+2r/7NeX7BnppFNLI3RI6b0y9zfGZP//iF38ONG7Qn+vWuSSxzagY/yPLDYNearNiRS3PCTdoPLl7r86LWHESl4xhzI5JyeP2yYLK4TZlOHnyJJtiOyaq1EILR+obQwzuzAAiEPKqYwu1ZFYMShMGMzivIji6AEuT/UODykCSehNN7NbiMAMED2B6YGIOHTF/p3ulUVRFLT4fV7FR02gXI23fuk1fQ68Ug6d2sUWL/X0DTlJz5EOhqcmxCcfGuGllRD6H0wJlM2ZmuxLU/AqYuga9p1rA4hLdJhSsgBuSffwKAS8JSLswj8tjspcERO0hXLlsKc/jgebY1wQODoBpAOAbhr7BVF0rKgKCWOKALOb7yXtI8tloV13QH7VgNSwsDpj/UctWY55HKxrlEj2b5oio8GeUYBeNUmKuahEchUOxaGMDNPoGw/yXwloHWaOekYbtnhVTOISI0Y5qfMBStQzkLI+HvJu87HBK4fCAXHrjfxk31NggQfKY/ZDYCBSAPp59mJKPhnziBz9pyJ+YSZqJS0stOeWJQOWUK+GgYldnm0NataK2s6ODu9dHioecR8mXCX8ty1Not6vjGsMz2AFFKltJUaGJUhckCOX9yQFJWXOscmXNUkvBwgKMIN9IvRx8nlNeugSdosyt2zaLLV5++WXTIe51Jz9SZ3ViPt0xdBVjCZwtL2BeEAJsQ9eipPPUZGYwCQez/upXvjwzNV3fcMdtiw7T9MbsmDuGZat7dhTmo4dNAikbW1XnZOHvpm51gWVv3tiPKDS5ceumeegSqxI5ufLdnbgj9B8bGTV7qdP2fmzEFtmxN3/ylgsNbPeVKhBW/pOT1DWHyEHs279bByO5BZKElG+1INdKTRJib1y7OTAwKBNA74k0mn3k6AGTk3RClElgZMMb6vPMgXmgQ/AkVDLyE1YYn+hosZH8Otrbzp4929/XV2AXRUaGWRz/8L8MVS6NqzEKi4r7h8emQ3SFkHyWZfaLkoHwf/zXby1bJt32iHgu0rYsmicE1AWa9IKJMpQPhrwbZfWBAKuz1padlWNKkpHbk4mRT+wO+YuwZUsMkrIGPMfH+b64Xf26EQiKhD5SlZDAfL7/wx84DYNXUkbCDxFgmtGLij5US+BYtTRsS+Dc4ayJ2EXaUx7XolH2JTNLDg7JfCJD5Ybop4+X+EasYia6BAIvLwKGJCoYQOjy3XgyPKJplJqomxibtMxETPp1Ogxn+SEaVd3+BAuDdavX1FRXS6vwkqwE0BYNORCoAq48m5IAZkqJv8Ax+kZh9BY9IWGgB4sIXUqIjl9nQLLmjO801OsPqE1OduaS8qUmoWSFMQHUkTIVQuyBAwe8IRR24fre/fsO6vstsEgCrqutoySND+4jB8kKcEn01vbxbvtlE8KJH95jsogzLy+3ssL8azpk9OvR3ETwXLTr3KcXwMEcpBmF4glRWvtFF2nC/Ny5Tz2vWbvaHcDPPfdMrC3UI3IlkzjG4TIB4amtI4QrUkG4KtMz9kWExVxAMEqagVVn/ZAcEnbqeKvlNSsk2YPz1ptvvvq5zy0pL5W1JzouLittetRWXF7ZPzj93779r2WlVf1D4VIRW1zTsov3H/1Mcmah+27n7bxNTjEAEP0LzW3CCdP5Jq4YgHF14kLY8pvmtKCFtvu3r188Yx2gMDt13oVZMxMhjUdG/2KYMsFekjVjExJ1FhZNUgSfmRgC8XhpHDSgjS8M3uT6e29X8dzMcKILepMWZHfZF59pCWBxdmFmUl6ORJ25mWDmwmIpH6FfSQ5nlrMjq7y6EcvAYQgQ4v9w4BD+a5rQjdxifFQUSprYjnJ+EqKVBuc6hjGDQQY48ot8Qv3gg8yQhdDQoEJbhnA4Ybhk0wD3YuBh9DGfkDo+YWfb9NxCcnpGTlJW/ud++ddH5+a3bVrf093xxo9faw4O35XSeatrV1qhFXuNjoxZCTESNjaBJA3XpYr4+QeqIsjo6uoBn8XBSkoMiyNopxCdPvlRbkFeyLKoXKJv5sPZnZISF3UZjJrvNS3C+VM2YR/OGMtbtGT+YNprblwa7CIazPPANIT6UU4nxQDFZm0+sV4h7NMiDbfp9pd/+ZfpNo4ZpXhDsXVeCnvpDRfhZjZO1iYxmeIXL1x96tA+sVGs7TDkdlAhNmKemuMPdbdPPLGb3nIC5i+izIeQ4A6yoBkOlrz00O+9d2r9+tXbtmyRGd/S/MiN6QNDA7rrBw/uW1AzhV9SYtp++s6dhmU1VQ8ePNy2bSvhV1dWpqYkOI+SieHkyfc/4DNPnDjO5b79zps04emnn6Z9GIJATINec1OLFAWkcQhWY37hF36B3B2KIXy1/gkToZi7t/miOCikDwgxAcrP84d0TX9//sIFXoWD4pnNHQjfaRHbl0usrcYHTTevX9+9Z8/K5Ss5DUujrg7kWOjblatXTUxYTCbuhsZ73N6evTus4PmJn6EtOCM0xCsUYY7Bno8HO0acfmO2e82atQRx6/oN0RYCIWwEcPr0ab0DQXDCIKMUHAxxJ5pJN8oMGusgF7yS9AomWhzzBXnGS2RoJERqxrmZreM8+d5/+Id/sKDtqhPShJ4CW7dusVygPDKVJESpt1RRc+ryZhZYsAJ8BugcfCwymPnBD35Af7Aa/2FlqkInzn9Scjoj2ZAtUOOv/trX2LlZIfCxS4jmvJ3l4dCOcC4QJlB+jKJLCIGhVQh5DQYbCKSiRH/u3Nnf/d3f1rdSMzzEHAj0dOtkh/GKgZhU1ccJ9Ll0cvcrxSBczzywVjStpN5QK/F4AxxM8CuFMfCTBGHLHwQQiKWctvhEQz2dIYcekorBE6VmMFAtnwqrcYbCpKanaSJ4gOiAow2bN1nnNL1gwElqwbOlOO68w4q96VrdhFVfM1wmpqSlfPDBSZkUcjpMkHFT+keeTUNIiCN1ssBbOJA1GrEdUf7UNMiiGiWDA0kMe/lwT11/IiGakZsdGOzX9R+KroiVc6W6IAotcMjPCzl7JB4ZQjoaNaQVcJAGOFZ4BkosIXtC74w/ptjMqggYtAUfBHrwgZWSRgKuV8Rt1RkjmN7Bh/J44yPc8lIBJKgCIK1WnRKShQf6SVLEpyIj9U3rvIeSbxVjbSEab4jYNAfDl46u18bJaFSca4wq988bFuC4dnDyCoqU9wEh7hpQDSACwQeT7LyBM5QgINBfBlElzFTRG0fyj486BWk4JzNLtl96apDQognbcKelS+bTzI25T7C0uEhlOdcEKVB216G5c8PE4cF+qhPtSe1zjs3g8MCSZaXm1MwWaxWRMIM0jRc/QaizI1ybZ8FQLUmBzAaKHAR/ofDhw0d5BxW9lG4qAuPZw7UctttHx1G5UcVcglgNi4UaHBnm8trPOMdmPGwO9k32hE0kLEFkf+XiJR07bWaogjJeUruYFe4sc2ZztBsdcNBw0+4/uivtj8pqVEBAxnwEoZp04+mkUty+7XqTsEPfICecyZOVLhCBxvHjR7HTUY+93V1a19sB29PV39LS6iYmu+XGhsdwb2pu/ODB/fSASMyR4EBswFDi3eLFTU1r1xvJtcPjE6ICU5U0zOEy8OxsN0PTIISSUL5+zVr7EMLh5SkpRkumCEbdnxAOHUthD6h2WjyEYetOX+I2DawJMzdMxcyH2V87Mh89emg0wki4JHAYFXLgoHzsi6mEPz2TYFdPl1OJ/Ak+W4UOMtHCYBTgWzkRQlcS/ps3ba10HVV0V3nkSsJEgvCXDujzGDB5sRPEEjpx8E2J83NF4ZjR0B/waNi444mdHCL4XPD5SxfRAh9tySJjwGXhst5g26BRSG/ohlQu7ALcs4NuTdvTfx6fBdPSLZs2O67KeJJX5cqv37yhQ9Jh4IktZeB45iOuXLtKaiVFYYVaPGR6wMZrAwALD+yT5ui23nnnrZdeftFkldQsPROO9TtuTx8eLaQiKrYmaPB3CO/q7Dhy5AhVRNrN69c2bt5ky74cGsz0BjMxTY/ORf7qr/4qThI0x+HBFCySNWrshwM5eflkhEBcWlZV7SG2mv7BYUIU94BgDEyZx4b7uGBs4fkBj+MDXae29DoYK22UCBSQYWVxgDsCn5cxncGyysqL+Ec7VoxsOVmzDoTLLqhWxATHYC46KOPU6Y/pQEqyg4n6JKBTDJ4HzEetjwiusfEebKtq7F9YtmHj5rGJ8ZyM3Ndf+7cTx447hN59xHIyk1OT0rMyHzW3ZuYWj4wtvPb6O/n5Fe55sI2SMqXlltgEbAAwvZgqq946dUI0K+MEGwMArs9BmIsJKQJWxmKBJTlhNiN1cXZssL3p7oM71/vaHxXlpS9Mj83NjJtFD71RuGlrgZ3yS3HSfzwGCEPygFCqCF7CTjStr2CYTeFYbAVOTphMXJjWblpqYm5GSlZaSrrRx8Ksbs4eAwCZQ+jwnCkEjtDf2ZxRyA4I1vlVgg19iAcAGlLFCJkTUEDrCwnmooT4GgzXEhuuUCeTZTYCRYmj7CrcR8ZOaZkve7zpKiDJ6SFlyBomOLKBAvJeJaRYEpycmPNtn8N8Sk7Jqi3PvfyFqekxcwjTk6Nvv/UT56WSAvjXr19bXlVDahJ7CFqwTuIIdo0Eu6ZROjO2xntrThzDCShGw6HK3p3Kw+527d1pmZopsQXJApSWAoNjLEQtwVSSRgEFiFuHdHJNzS300J+sAGcMoii85thmTfWy4HMePwbHx414TvkwZ2H8oAp+Bq+4sKA5Vegt9w4yQ4u7WD2L1EfrbB7Onbu+ZUud+WDYxrJg11oxI0tp0cWI2lofi31tJ8BSawiiEMz3nheiwKjgYTSEInXjIMOqDg5waGBinb4VTEMF6LEIL/VrTBvJqsgEXlFtIiyMbawtCNqw8djxI+4aJ2KjlNgLGcuhhSGLTtjMlSvXSPp//9//6ld+5QvKs1asAA0Qflu8/lu/9Vva0rSG9h84YLTGyRsIKYAQCCuPwA+jwwxYLr+nR4MYJDs6urGRsBBoOGeS/uz5c7CVJa+6ISavax4Wi9z2ZHT35J7t5Uus2Iwin9L6RAmoxVohQSsw6prAhslXvvI1L4f6B+GG59BzSjVeNbg5rrxc9M8hm0eDCTS0hS6hRVdHd350/QLI7FRFD5GARjHB0oqSaKEqcEadW6s9ELcpSJ2LMnKWiMPYgy4xHfoDQgRnAj7ND8PUNT3BB4QTrl9xG5kcIJT0C5igDJfLAdbfvg0xkQZ2OfyaIlFL6Y6f+eyLAoxTpz+iP5s2hdEsUE7Bdr4Gr0VV/IlGEzrGDHjlzAm0MxmYCMW8J+vPfe5lrvWNN3/imbLpB+lzx+NwSAPbgRLF1i63QQ+D51gIk6EKg0OI4PhVGRymS6imHvgPjjfem623EZx7iZvGKBVNm6KX7fkGUGHRhWd84Fv0j7p6YQm/bQEBVnIiKPaefXvhI+zGcyUYAgPpcTNaQmbpkpByjEs+UPLBjXjEQgT6LEIJxhuF755xRnk6QO6iAsKFHsKhp7zqKFXdN7GKS1VUHqqKKcA6/GoejVVaUo5Cl2D7UIJh3ep11MOHcL0EzTN8MArmHsjCsw8g6ALQB5kQi1Va50Un1aI5Pn5Fggd1449nbxQOP0fnHeGq8mopQPMRBWe6xBWgEfI+4CAhruIbMgj0EIP6GbRYKN7TEy/BgY/gIWZgjBVJgYaBHjKy8hQGykfrmlDRr75B9oAP5KIkCDBMXLeqGhTSlV/uZ9O7uJyXm6OjEtjZdgOcPCiA6BAsJb7E2oNlhfm5fi0pKjYrXFW5TOyorjAinCkRjS/379/b2vHIqAbfUSJUwmWjZIwO11z994/sambD3/FTa1aFbY5C4dNnPnFECYAC9KefecbYER8ttxkCx/RoghNxRi5MvLH/RvRqfgJw/ZOfYk1iHqhDszdWP50PIIrCSlR4YxIFXywrr9+0UUlqB08f9MK5s7vDEDYnz57xcCeFc2DUsuxCDFNTYW+HRRmKogvka8zuUL68PEe1TLCc3buf2LXrCUMCAyrUIYQGCL3cq+LYSvuNjLlN5qWkG5+ES8eQT2CO3otNmngICRqUBmK0mQcvLS+z4NDdZ5/KFKLMJeN/V3vHT954XZKJ/YbWN6wn7n5iJ1DsyiViWYXFE5Nhz4phkoAfDhyQ6YrDh44wMCoXdXgDVBbAyAAWGTyWesZwnGRFPuaiYi9DgsjHQDhgYGVVpY4cfBpmDYdKQZgvCGqTnY1dmKkhjpIT9GupXJ1onygbwFKWZl5N9Mm3wpxjZSF8lsLUsrW5eWRokIh37NwJT6lf/KaQDotwDIukM1IiKqe6TCC2UbdqDcTUJRfSNGPEDxpKQZWgFZgOx+BQ5jCn4mxTs7AuC3TzlAKQ4SUtQ4JM29HlxDSgtGUU5EAkbnpqIhxgZaZWBg5HXFZaHo0EwnlK3mPd93/wPZnEx44dkRijCXdX4xUb8WsALikuOvKP9pLRQL9dcSGDFrvYmvUrYHft3o0heIXPJlcA8SvMNYG3sS4BhbEYvnHdWtJx5E2Ys4nMOyMzC56EpTBTo3iYQz/7BwfME2emJbvLDIcFi8oD67unu4+MkAwZIStUIUD6BBSCv1z7eq3JhDxUkaKUCX+2tjXjvME49NgmJvONQmgpam+99UZzaxucJyfEc1MS0GmdwI5BFZYUsrilSyvoRs2KaqHYkopKK3V//zf/IPHPlpLl1cv6erv4dAMAE2x9/cOusx2fTHz3g0+0Zv7LCoABQGpOcTwAmFpIEegbAGhbIPd/HQAIGmzetQpgsj7bqUCTw/fqrzRcu7wwPWpUsDgzbjOh0zzDUT6mFaf1KNEJPGEvb0KYvgxBOL9pvjLovMEA/88q0e5H6UBZ0owS7CgIG4IzUxxFmpydlmSeSkFrp2GfcfThfhmI9CcJDPTQR3VA6EC4hcxMUhTEm6n37DAo6sFTm0CdnNbZh4mugMsc9JinT3rYahzVdhywVQkFaIuSBiAUg9LOLUx7kZkrU2jBIgwsEBE2BM8nTk+5lMNSx9zkQtpcVvHRZ1906ivlXVpZ5kTaUyc/FMq0NjsAvnvP7idKi0v27t4rnnAWmYjjwaMH1lTjUIkJe8AcHZIZXPZi7MRTUR6KtEuSzc4dH55+34ScST0DXX6MlYmqwf/444/5BELzjB66geTkFMestXf39gEo5hDMsXR+jPfesnmjIA+36LbVFerqMzjUL4VGrGzxGck6Dv5KXZ0uB+KBekOSXbMR2sshmD7gcERUgnIfXGXsfAUriC2UvQDlwxy4fTlyumnkw1brhhPcFG4jBKXKwBxYHo80oSrRV6NAxU7SNxOAuZLURzQJSDRaTgehumaZVSOHX0ObXTNwq7ju1bZbmpHyAHHoYMSOn/hj0lRALB9JSAoyigSmkGHONMreVuwCRCRkTgHTuFNLmgyWc9DrKQl/YvKtuTfffNMqPWRgggQ0YlRXV3C8P//zP08PBe5gbtqyjYOSMqQHMT9PK/j4Dz86b3vgV77yZQeu6P2Nu5GpRRwwEwkObAnIqpH8Lj/xnyuWr0Q+X62TxzTwDYXNbijGwTpHDtOwiDjaHrcjRy3D4sL8ImkFtFe/4EhWTYBMwfgQJV3lrgr9ESSorhsyRvAnNAxvMAcfnD19+PBhukfErk7DCrIgL3t/FZsan8IxG1T8Sm00qmkMoZao4Db5Kyqk36EqEoo2bdyIY4b1mG+BFDOdsydjVtNBSVpaeUt8hi0FrqyqabjTyGtBSSxOajDnVI9HN+KRILrIBSEm6XVSIig7rDo6H1MDeEKSGlcsWWqdnwVhGLdJuwzGCFpz2AgaxYMqUB4wQROwwlV8tlxGiwBRmFg5LFNCljYpPOsgdDAt2PrkZeeohbde2moEf0wQATJ/WCmsTEtbK+bYAw3bD0+dRJRGlS8pL7N039HxWA5uRfly15HgBuSxCI0UHlcNfvgKHy3ip/e+yU4ZjYLvPaLouZ+QiY1xRd8axVL892yiU0kf8kIF1kWQ3OzO7U2g13vdEHsnfeVlckImVkh//gwBoscukHFMW2iJUdI0HWN3msMx6PEqWvfgTfzResxtECDgJ288+CigFb9CwwMB4Rs89YBo9KsoC1i8VcYHBHyAA530ElZeas5LEJSHMBH7QA+7vMTMGHmoxtW99KEY/pwNSxQh3IcVgKr7MzYr7fqA709NxAgnrq0pIwD9N3CQ6O/r1arDEPQPmjT7AlB6atjMARZ+TUyFTdmezb7kZmV7COviMkZc/FhVxVMoozyFMwTXUaVnS3gKQzfYxHMDhIvdMsDMTPCM2nWQFoX7vd/7PWWqK8McD1PEPiuMbqilwTRjx/YnpK2bjfWe82p3VNFC2OyFuYAghoxPnTpFieWSYh86TcygKGY6SYilUOGidedj+OCFcT9h6w+07u4tyPNEsbwVAMQilXwyx34Jy3Bp8+atMBSYcKBWMoy65TnQMxymMaZLRVqYT0LGL660pJpHjx5ZtXIFUWrCoNrNX5ivRzFUqL9Zb0TjmAF+jbvRtDEAfOiu/GkcIyeMIioAUWGmYVXd6tV1EmnCRA4+A6eMG4L7enob6m+FFMD5BUkzkqBc1GouWVft1jjdP9FQGnlHvvlEnJGf93M/93NCEmwRyaAL8rpakxAkonX8YRjg46GPYpDh+/gpqkbuUKIhYxOh38UrvhKNsBUK0HXPMPReMQD5IDLVefT2D3GFCoDpJ6rvw4kQpWUftqqWcTySuTBB041rV9mQyEMuLKx0IabJ9XB0gIwc9gIlYgX81EcfcR+StKGtRWC9RwUkxTdOWoiz6ARMwhQH6ntve9yD+41XLl2WzghtouSOpcCyUt6EDluqgZg+gGc5/vQJCGAz6Qt88fDBg2aKt2J5rUCBmezd+6QJVzx0Oq2M7YNP7ecETe8i1iGqvuPu3AAgDhEQePLDD5CMaRTAJLuFiBs3bhnqaYKkMNyv7Ihhw4cPFXN4VlEEw3zg9vyzz3DHd937cPcunYePbWEiGwpPRlLYcQNu+Har3k70toVZBx106w71eU65xmet+xgUaVR0hQPwFdg8etSiGE6KeHg8zhOL3Nerc+KIXBZGfOGsnUT32JdH3sfsyGLro6Yf/eg1G2yZieQoWWepYQ7JsYxBEEOjQ7p8fx44sN+C8opVK6TF6zyam5q//ttfFxybLK6prnRVnHGk+GB0bGpgxHUic2fPX3NH5+ycKyn6LCamZBcZACRlFFgBMABwVt3/7QCAAgiUnQOYIFaenQpxeeri2IDOs/nSpx8lzE/I4LcnOHF2cmF+xhAAGBE7ivSUYTxjf0AYF4SLAsxb4ZJ7gjkcYwBS4Ih8ZYrnw3FAjgqaS110IXFCTnqSdYA0Y/uwYYBMfjrV4Qk+6ALLJ7SyGLZ/hVSjsNXB4kOYW/KldcBJDTJjE9amQ6MBTligELAG3+1qAQADFvMzZp29V4ZvEfODwz84ocS6SFaOoCoxrJxq3VAmSZaR2xiS7HazSWzcQVC55QnpuXSbi8jKyXQQpLCPhrDf9Wvqtm3Z6qCTYknbQ4OtLS16qPp7d53yyRex6BhhXl3/pDzqnKBCYbCM5vCHt2/fsuBy9OhhPT7/TF35WMfORrbzgHNw8CJl4LTZKdqdSulcAIdGMAd/tre2aEUttrxieTVNVtJn0/r1iMWfOw23H7cZaeyED2gQ4AFwlAvluGDCrYHPvXAXyrMU63gCPgyMC9B/asmgNARtVGiF0cGHsVsgNfC7efMWa4IDMvk6QLhQCs9dsEoQfHtjgoZJrl+/TnNwgCES/Aqm7lV5b6g6f8UVaBGT9x/Y++BuvY37iOLfsAgVNvsCJQ+TF+IkAZFVS/cY5smTH23dvM3BFtBj3VJ9LJyavQL5vffeI2KRJdK0ggR4EpBz/T3gA1A6Fw9IwAqHFBke6Dp5EixSxuIwH75//wHmj3Xm4HQohiKmscmrqakZJpZFUGRtR0Bz/JmnTaYUF9qHuqg35+vQBRN9CtZpiJ//wQ9eg4kFeeGse2kA1DoOcNegmcmCs0UYhU3roJ1QSOFuYzgzByEW3Ey+Dfb3ex+cVGq47BIh1HvLls2YYLFdnG1QgVfGOeKEwf4wlwENs0UcF9dduaxCh0LKyCwpKYa/FaEo7E5Vd82qNcqjF850QBlU4C2ZEpBeD56YgEvnzp3jV7dt3co2rZgQGY6qsnPXk47lwRBax0lQRU1QAHBaHQGXmrF163YI22xNDcBXACUYwt9SGFqkX9D7Mxn29cEH723YuF4BFFEqTHDdqqYFG96AqV9wtKUqmiBfyPCoPmSKmbFJagXOgV8SEaOccryCA09kG0bManT5yUuTOh50hfBRBUXuHfIrDGUEZGW4La4FYxEoRxryDg7WnAEbSXEaMPz0wnl2R4VEGnIee/oHKAwmMCVsDyTk5mIp8/QBmXQg5gG2Cmhdu7oepIEZh3ORmo0iSnVlYkr9aqUC4eAAgkx6ElGZjAwQiBKXZKDoulVU8lFTa/wAuBZhoiKqMcR7cvfx4KcIuxA3e/YNK2rJlmksWcMfe33goIAPEmBFaf3kJRL8Ce2Y1fQHbljq27PWNUTfsBc5cAA/Bqg8laZ+EABTeVLm9GKAvlVURRPI8YGbVoKjCL12GIH4FSjVIZCVE2b0/KkYMmPcvNGEhlRUHnDVlVE9cW21ybkppQVV3hI+cHEfE9OmnIRy0JEBnBwh30DDNWLZ4ng0oBF0YQqVESAWl5hanh/SjXd3unwGozSBYJ4FeYiHhDMraJiZD9BsrkI/DRP950XXuXEQuG9iUkjEX5C0E3gsclP9eFXLXJoMdDnEmBVBzlOMgxPo0FeWr0V5kJ75bs9ECFtmLKdLFMVp8hp8E4VGrxlxTXigQEHv//vVYNOzYdlRfwwyG9BdkZ/FawXy8wOjCRFYW9bgoLfAK+ECt8hiLdRcuHguP19smeuap1gDeDSCjHLLFsadbjgzLamY4+BtuWPIcATEg3tcA+bwqlqhAbhEhA5T3bFz17adO2tqquFp6yQCBRnGALY4X79+VY4TMdsw4rqWNXXreNgVq+vMK/OfGOWD8zeu30QLgMhft25DNLszjHbi0yjtEudBEmQ80echkMh4QzxURUms5q2AQvXUTNhEC3OsM6ohOC9xmPLwd2YjtKU6gHwEWtzsiJmslMrBQWGCpjPAIpN/N03ipfDUS5peXlpiAKAcXwwgqo1qFBYNU0iHQmIXHwolOY960EsXLju6xwfyENMi6fMRzkaQlWi/lEDKwJJYIRwii4z0q1cum9uAhgl1cAw28MGfnsHXIsxPnz7tdCPbVctKwmncAirsam936s79wYGwRolpeOJuH3vjTDg5+UEKkE/ToxZoSFRg/FrDNDEuhJGPRffuNvARMPEsrU4KrNWwpkePOFat6L3gwNbcfKw5fAOE6uKzqTvE6rClAIH5uS+8il4dvyacIgorLML24dFx8QcWaUXcJq/63CefYDvj9SkqKmYpQhME8gHgQJUF2SLshEERvFMpMJk05Q5x11pfUVslOjHIcUMKlZYADXJ8VbBwVs7JB+++45w9u04tlAnmTAeangc8pr3RDOj8DHqd42J3hOs+RsaGv/evP/i93/294oJCtsERlhQXusrKxIP9iG6vamnr6u4bv3a90TlkUhAftTbr6JKzCvcefjYeACQkOrLz/3EAkLzg2P4wI2IVgF9MTnFf74K5/4tnT3W3PRzqa0tNmEm3zXhqTN6OQ3vEygr7CPqDzw3LGiGKN/FkzSQ12syQGG1fC/H/fHBu0ocsVzgoInlhLi1xLkvmU+piRlJierg2WOPzHK0Tatx1YGcxCHwXaYaP4yYgtshpJBoAhFZ04ZJsYoTDEv/iuNOTbW2IPlEfpY8Py9D230cytFKLsjCzZcgAVYdiS5wjyskp0d54uHvCQmG0Oi07SgqQFFajFXufwwrAXNLoQrpVlPKllc88/3xeYdGCfi01/QevvUZ5Duzbl5uZ0dfV6ejh8uLCKxcviMzsfY4HANwRf6ITijr0FHpCIUtLwlwAvYhcjW5pPhrjhUgFaeSuk77f+JBPMJVDLX14/r6+cGyXipLeRAhOls7OzOBteD8vi4tCPKrnxoOE6GgRIYKffCxDLa+ukYjC6VFOzGQjbF/8wYK8VAsEThueYQW1tFQWJWSYKvuCBjeilvQbSh7EHY3rjKVZKA5QYBp+4XL9qhVL6Lk40reJcABNHiGHk2TjzJD5c1DewA18L9FLwkIl8Lk7H7VYAYsTB0MmjJkXZs+ePmnTgOOPoM0ncHF1a1apJa9JT8f2AXniiR0ockwq+R49fExHo2vw65/92Z/p44xnzDiALALGBM4B4cyfQyARR+7gMPWAG+cMNzZuXt+DWXPw+TpOhsgwBLueeuoQaMacyuOPb6f2kRoIZOQeZYJWmKuUAt7QUL+kzPbA/NKSMgG3EEKjd+82QgZ1Zi7MvaLUcI47tfJDOpDU3ynALcduXGqc9yp6o7vHBJgQh9M1dJd93QNmETGTdEzGxb5LqMBrKvZvP/ohyE7JJCzowbYp2g1F//EQpcrbVkvuZEpGNuZ5QA6v7vI7ujEzGQI+CkZDIBBcdki1H8UiYoKGknoxoDhecB4/DusG4m9NwJn+/N3ff5tknXUeqxy7cHcfrMC0PW3V6jXmdDhkEGiLIQR9IBF6AjfFLLZoV4u4TQHFUVXVYU2GHHFJsR/+4DWCk4oWbCFapTe1hwrlsUW4ri45xsjjEoRpkZLeEJafaDWugimJWo44N6CY1v3kPSbjgK4WRd4gzRvVUaeMdHo6T68I1KnikNecmEoygsIqCnUsj5oVQqN7Wlua20fGJ7QFeRwAn5tS3Tf8I3cR/KqPN6TmI1iP1U+jNJDpaYIUPCMQP1XUujL6KbO3sd+ASUA+JNOGpAM9LzL9CX/zzsD6E8Od16AuTUOLj1ogYwtVUcsnLqkwlFTXNKJi441x4MpiK/beB9o/e1AeEzAKhrjNhFX3rIqXmOA5FpkW/QQBb1TXnDeqKOO9W1dd8YcurI6xBVkZH3A0ARPowcoHwsiJ0QYQS9UCUzHt6i/UUt63wr6V8WcIC8NZEWFC2RusU4XEEzcvD5Km4gTmI9gVTbptBx7q477SehTVYBw9W4TKN01lqhviZAwvbLUZNMg4JZWR2KGoSck8+qrk9CSaZvgBv1j8WgXcfnDVoSUAlYLMeLgJm/plUWxav8H75rZWztcComcTVNhl1P6oqUVYIDRkmQweQL1R7KyZq5E9/4IKFIlj+DXeB4ZIhQ8F8p7XcHVAzJ34V7xApuoelFGYI+PfdRKGheYpnaqBFbDV1YlQ3bOLFYInZnzs2Ak46FCx3koCF2RgQDx0evXqVefOnXU1SV9Pd8XSJZZ0ITwyFLLc+K/gc6PJfvdnYIjejjZADx8AhCSAWvGeqSNcLYQUl5b09g06IsnuAi54x9ZtvICleRw2jpcaZgCgh8UrOQ+yBp86cthhnE55M+SAPwWl8fI1qZeYkkSEbgYeGkWgl5qwy4Srgow+BiswgVipJoXDJchwTIDodVCBXeOT496rHg8glSQybQGiLtEgh91SPjD7+wfq1q01BagY6mJVxlINca++vWQSZ8+e1RAIX/jc5yRREOft6HyDQ4cOcYX8FwdEgmzYcbF0UuvaouYgOKiduerVdDNapJksEG58gW99AGIF2YYBAiDJ0zXVS6V42DXLfymPA/JjMB9YRqFzApwGosjcIYT37N4DMVe3kDI+W/QWiBhMVi2rtjFIKsI3v/mnL7/8Ink5bEfaQ/vjQOyDxrBJV9OY1t7aTPoUEglWz9TVlyu/pKzUOMS+j75w68UMPy6koEhUWhPYriQVMkT0K1CkANvbN65TDwfsAhgt6SS46YIi4aoCrp0iZbTgjPlkvB0fGzl35qyQhbi91NMbvLEm1cWjlMFDfb283Dv2ioRpkcTgBFwgsHHjBtV/+3f+HXW1j8LCuvDCvhdGxH4pAv9JD//5u99hF/oUHDMzgl6xpjdM3vdAlC9hdErDdzyxg2pdvHIRpYcPHk5KSGp91Lx27RpbWWxLu3rtmhNaXWHb3TvS3jl05tzVwsJKswbdfT06NAOAPYeeMQCYSUj7f1kBMDaWS7QwYxv8gl4qqEfYMriY5gz96ZH6Gxcbb12aGu3PSplLnp90QqiZd2V4WqEm/kSLzaEzMMzXQVhaiccAZiO5ghCO+i0MKoTZtjTNGQAYWpi3tOHYGMAtBNnpUvzkDBkDzDgRSA8DFd/UEu0+EUqhPxb4h2FCFDiGtqNMJNx3yLhlFu9VMdLwEej70wCATUk4AYQuU13ScbKk+wb0B/RkfsEiQJhiCDuiJUmhy4Gn1iqC6zZ3E64RmE5I7htbGJteTMvKWbNxy7rN2y0yJiSn3XvYRG1kscxMjtXVLH/c9nC4p/vyhfNADY1PcImcPCVkAhEJYUKHuXHgdml9+OGHeGIqWsa+Ht8iiiltEQCJi5NEz6Hd6Wln89MZlgVzK96cNjWjtJs2b5WoODo8hBw4s8SB/l5ugRuhxlWRO0I+9840CgrznFXKvoCi85CBRlwSo1grpoEDPYEUHLS7cnXIxlEdz/kcgfXHH38sWYIVMApExX0EmFphdL29A+vXbWC8giqmxyT5N54ENOQrA2cDA1n7Wo+dmFa0DnlY8UX8Dzv1J2K1Aiv4gA+B0x+fGhnoPX78GD8PKydhsClb70DWbbAgFblQg0zBNO699NIrS5dUfvvb32XprJ6D4je4SuiZdMBJjoKh4QA4ygs3J6P8YADxPw4+lFfAyAFnFMMxDs20i+xZvd6Pf/wTqOoX0MXJqNLV0ye4xyJI2spCFuZ6AbT6Kobu6mhdu26N9WSdL0ox3BYFACFj0uTZZz+DCp0UG3cSEb+naUwDRBkK40+ZfjwVNPBNb445gFtxNVqWndLd2V2YV4hMVfAEBGgr6YAdurR5y8bYl+IS6dgFLoeZdDDZB4dD+JUdDhKlsXyRBF34gKDvMMsJ7OiQbj0pFIuuu0E1MvUvfjp48CD0PEOeQaHi/8/Yf4D5dZ2Hgff03ntD770TBEmQBFgkkqIarR5FxbIlK8ruk433sSNnN453pedz/GW/7NpPIluS5UhWs2RZVCSxggCIQvReZ4DBYAaY3nuf/Z17SEZfNtndS/LPO/ee+563n/e8p7lKS8O6FxD4TNL5xa9+aauuwNhkT0sVkaNhbhiStWDgytXrbFoVXvGuPkQdDkCb+EQyqnB5KwspHfX888+Zz6g8eiEZhmVuNGq2PvCBDwkwAEcpf+uerHHbwjPQXOiik2hES3T4lJAlEoQrPjGDUXdON8CFOTTWL6dB7Xl6CoM0spDGJYXIhC2bNnqCOaCFEcmkJ6bejq5O2oLh4rflq8KheEA59Kanu7+4rBxkMBUjBVyKHgmXUAoCZPwq40/NLj54BW2qixCfeOtXjWDGUM0naEdjTWVV4FfY8TbkZfzK7vlzaHhQRcqjwtxwN14hvKa6HlHAKgMU/jNwdeGw8uoFWTGFkayMAjjPclmo8m6U8Qsfb8nOr8JeuSKebsBHLzjq9SGv5RWPoQrqxMkoE5mgmDBMVk5JXxEEfLxyYQis4nOvIgmqcxM9BobALQgrKQYNWLnoiaoRTsln7YeXtBeROX6Vd0UJKuzbWC9ogKc+unkxvsvG8gWBzuwskyMMBPuAW0E8S+ix2HFiAmF1jrjq6rJNENlRVvJAKtoUUwdi0KYCPcxIsM6Z6bymZ5lKHaVOGJCImuoGPcg2v81b7qCrvWOwt88qfnpsDxP6RtH1uT/92X/MJWnAbAPKpfLUaGBOux7cbVQLqqrGQa4cHG5U8MqSpdUFZGTGZqgp3x3cynzYxUh5Tg0LmDTSWGNBXj7IiPUQcMV8YrobpUcpmtRiPoNaBI7Yzd9pCWxoBX/jTgqryOBs851WNxoY0Q7Oafyst73ffk/SVDi4ft0api4gJrzlS5aK/K5ev0m6UNIDAYQsVQN5yGA44HQFkowETFOrV6xcZQeVrnZjF7V79uzRzahNln/dbrqFEDu3Wkd39MhxraYmdonzd3fuMPmbr8Tz8rIKdIEcNZVq+oRdET1vZdAQGgjEHAUU8xZu7j0kKdxTQCQNPUhyXvgmH0/WmIZ1+EZwoJGCZgacvXv3cse+VYYPJTi086fIxAfaAj4DUBIEz/2qAnM0vaYiUDA72Zk9w/gwQSMk3OR6KBv3hM8Dw0MwAYSlWQOAVyuXr/EEJiqiPDRBrEO1KDk0yBEQUrO9kFX8dhAeGuw1m0ImhDZqI1FnxabOlT9hAr60OsI1V8eOH2djG9ZtVB0MXbIyOKAKOTOtkg1wtRly88ePH2U7aAwyXbUSqHutbajDfOVFa6hAPs739rw9xdkTawC0eaGrPD3Nt6IO0/gOnRmBBU3QAUAUuRg05zfRqM0rLSpUi+kd/sRqxYpLSomG1EjBGgBs9wonY9xm3Ey9PqHAelMCWWSiTkCgakoSpJmS5mDFNw4ctFkl07XpGFdszF1X5CMf/RA26u3bPxG3dX3pMBkSB7vQ+Xzt5Zf4BIfBcibO7oWPndfds1xe4n7nfcjHbVtEzUB19nTaLt1iWuPOVeWVpt7oKjffabTe4sGHH5qcTeUb7txz8tTRiopF7V1GrkKa7t0OgClAcQSAS9Yi/BdrAHQA8hY8MyNJ8J7pnN7Q5bIH5vx0eUl+T3vL7evnW5suTg51Z5rHPzc1N83Ri9ODZ6eKGmJRP//rT90b3QBgjDZYzxyaAWSEvUpDuM7jaUuNIWQszNh3KDPFUMBMYXZ6kdPsMuTfTUV1bkAYO54EPUnlBPjR4ydVCIM0Z5hPWApgbHJlzM7rVr3TARAavNMBUCN+GqwNmNgO05ZwNqI2F2ghzbb/zCEnN8wa4ns1TIYZwziA7FWgSFsfOnbocqby+Ey6o5xKKmuHpmaXrdv88P6npxfSK6rr79lMtqc3bW56w5qVV8+dPnf6hHlT9GRsemb5yhXwpP/YggRekQoxT3plLynhguifDqDDHqB5hXn0p662QWGTzg8depMJGN/jWwDR36elDIQmUCFK66x3kCk5mPaD8pbToMNrV61iMjwkMnu6O1kHW2Blmhifcwhqp2baFzrMpcDHryf4w+SVVB0c1Ms/eOgrtfAziBLMqd2fXG60U5XqYBjytKNXjMtZKP9gpo3CmnbSwUBBmNOR/+qv/grO+hjAiq78EiJQDBa2ACqpPJw9hxJzRotvTcl7ePcDQg6faKRU4Tp2/EjSo/gxQvgQpPG4cGbs2iWLgPXPPQRfEgdA95/73OcYOMcLDZiTvhuGqd7+gQF8UFi9kGH43L6TNH3oucIib4jhM58DyN27rbwlzwkasLzED3/8E/7Q2gxPDFFi44c/9Fv6Bib5GRgcGuhpqK9zcCJPBUjgwEQYS9S86n5wL7wEsKqTHYOq4EyYgtt6ETLKxMS7gnz2/PlILEct9w8+76TP2N3ZnZUe5pGSl3wECMTkMqWPxGX3tTg4jDkIDAPpmzf5kxqggnLCh/ppaOiASomdZsITK8IKGRoybGZsmJANmnYNPu5ZmQYRHMSCj5mo0whSlb//+59R4Oq6Wpj88j/92lujHAaHDezgVXdvv6+UJ25V2z41JMXvhvno5kHF4CfqoXvqRMT4T/lRB7HPfObTTPTe/ZC68gkp2MjIaj0KI6rEJRT5xF4U5KgHCGf67/PELYTmAJKYjwrMjGTiPGTAd5kD2Ns/aBDMhUxc9St1qKR9l3AD831uZzwiAwEPwyb7Tj1PYncjmBDDLuXJ6Ec/fvF9zz0FpfMXLyLZc9uFmQymA4BGWNE6sqa6Ptd0YggclFS7wn7hpsH1ENNovk9cHsIBzqQGQ34ANErrHrfra2pjMZgDqBiNgpUOgA/jQ1lvnMET31aUh/USdAN19By26MJDBqgWyIAGGYUh6W3sJ3sCeQV86FdF5OVt4OE7uXn4uOeayAW7fO5eLWBCw58ROEyUZJJQhSdCfAU4VivjlV9vI0OoZZQXVIHyCquVVwxMEOAQ/3TjoStSKvoCWbtvpoOSLkxz+dzlBglqdx+BwM0FVOoL+7eqFerYJDMqLdnfb4+zfB6z/J0kh89sw2IevKbUPndgwZKCEiEssTKCw1av1J2XGwbgxCiemJHFbjERzcqzMXZI1zFUBO8h1GVSeVs5DDsi377Z6GwBXV46UVwSJiX/4Ac/wAhb2nO7q9esi8LjuIlKV0dbsmTZUlQxTi7V1EZjahRXRWZQwBxdPrSIRxnCNu8E8mz4XlsbTDCFjGFrHCk4tYUwOx9KtIQMRO2PPLpXRAJhpNmTmAryKkAROciHD72JBDLg5p5//gPmiDppkjhRamkXFkm5isVfe+0VW3MbkbNPop3sZMZVbY9n3DP4busP4qQBBIFwtdMzqMJNFSCrgoDQazLPhYtX5DJNeoAqHor5Hnt0b2BvXtAwO8foVFJ7m8HbbE58II36gQ990LdADSYHnkfMsYvUNFHopQZRM0B7+OGHUaqhhY/mQRxPNEEZystJwW/UeKxGNdtuWLzIDfdK7vCkDG5wyYc6LZBUiyFaRGGL4EA3Bl1sW10AQgzy3CtxawkoMch8Af5H3AwKaXFtBkXQSpK+EQASRDvIHd1dqMZtAmKdgNxrvW+4A2J4CBmdNIMWCviQD3IERBKwZqMImfqnTqJYvWqFua2gAUsE5y9eQLu69K9sU4P/kNcarU3amIE+ohskL+REu9I1NSJ98KCE10GNgR6vurhsFk61bLyAYzZwVKO+BDytAUCRP9Vitb3F6+rS+jqJqblF1m2JCabconoVVgv2Sg5Bj73QiteTQ6kBx0aQH3skjOOPG/8pKXnppZeMzEgxg+ZbgjAY7RefccMoB7YbsFcSpfTBSnTTTMGEj4P8GOyDu/cgjeDYgl9HIBlhsI0j1bUH7ze+8Y3xibCi3cS2nt4uCBgeE/dwvFhtMMRUipvXrrKXxqbb3LuxaJtA24YSDvbLoh4WARMNMRlA4H4Ov3noIx9/QVInNzvv5s2mRTX1WeEQR9vRXrP39+6H9rS29/QPTjS39bz6+tFVq7fYSXBsbDh2AB587D1xBCB2AKRT/qsdgPSJGbGwSTsanCkBq5R5ptSgrs1EZXHuSF/bubcO3rl2IW1+LMdsoSmDY7JTMJbLTwJ0SfMway+cF4zMcD6AHkBmjt30sHTeOEBKhnbRQb/S/JL4lgJnmRKdMpMyO1aYnVGal5WXkaJXkJ4yq+nQlNpaIYnnQ4IHq2lv7GNY8BCqSfaWDot/3YXtgjJM6okdA0YaFy/x6vjpvAoKbAQAGhbGeWJwI0T0GWY1hNy547G4F2e3c2ICHk5D28F3UaRQNjn1LCU1Y2LajKi8gZHp1NyihZzClZu2P/XsBw2X3EpOKUqdnmq7e7vJ+QBjQzMTo+Sy/+n38LeCj9hEqQJe7jlqVv+LF39JuHLJbM3WMvX1ddl52Sa6mA8mXqe6XKJ0CW3RatIxLOEB3FNCykyX8guK2Be1ZET2pAtea3DQ4iiLhHgJBdjy6MiQeEu0RwPN60Ms81Sjy5QMXEWzX02A8p6wX2W0AtTec8WUVzuALILHgwA0uETk6M+zONjGgE9/VXltqJUIbFy8ZcmorpOAzDoZXV9nZgvI9u592KGOvhVj+ZB38mtzGL8I8Sfl5y4ggD/IV4U/7RU23N8nLtJlInFOjw+8cPEcrK5du6K/zX0pyb1wvMI77mWKwFLTQeBMUMFVwh9PWCuPauyUJ+c5v/KVr/DzWGfvIVXzNvyJYQpuwQlofD5onkgwc85Uiy/yrVosDTWpAyu0mOTluW0/8JA5Hzx40PrsD3zgeSlfhCxetpRelRXL75aePBk8GzZ6bh2IyJWggdU5BMFDGOoI8P/Cbk2AHgU/zCPxPAjXMzRDWSPinjPUMYAJ6ibGJo1bYS+p8XLAaFYAAfzYsaMIMVMRbzlGXkX6T77J4hh2QRBETyHpFU/lCafHl0pwQQav4IOrHt5vte21rGaXZg5X1SuKErZioyCBgjEWTRI4mmZaYQE0CKfPnfWJpTsYZXtEMkImBRsZm4AqkxRRYH5ubl57R5elgxwynVQmNkwAqhR8cbzCPkECL20jVyw9c/Y05EkNRTJKdbX1NJkGEqIy2PLyy6/SZwXwivp5CGeapgASYhWEC0N/Umkq52F40tPNg8lwIQrfYIguSQH8qU62qMb/4BzmwgZWoJkN3dlxn8eApGs6mdpErOzdRAhRFq3AkxWrVtEZamkGlySjJDRhQS8mNFXkwjR4+jDASfJ3OAAlFVF7MiUs2JKRX8+VhExweknI61sKFnSsp5fhgICfLjfC41DGZI0kTPeWqYITFS+Z9AhMiO99rjqShY8aYYJYQJR040OvSBwzPcEZAD3Ear+xcNRkv2rEfDBBTnCg6uHyp7egYQutwDp0xQZXReDHPz3nlHAp8Z8hr+9GLUhWEbAqjXXBAar+hJJKcVUZkH0LVYTQW5UqgGPcCOa590RdPlEMMtHnQ9jlT9WpC1g6k/qVTz7tb5dWWoPiBbWQM6bZTpEApX7xIqJKmCs9lp6XlWmSrroh6hNulI+mlKToQ2EEULE+WDo6wKABeiDtIVcIAzBdSZ3j3AG/H6ND9mDgoKzQ0s8wxwNytq+hDTwdBKwuQ789cCAmW8lZcN9Hjh9DpDws1nuOHVHDuMUoGKYOgvw3C8RimRXWeaPJfOKClctCj1PVGI2c7q4uPXhr3uEzNR42UIO28WtT+C3S1a9CKeR9ohb4i/VxAPfZqrq+9rWvOdjHxNb9T7zH5Dd1GUdCtRnhWt7Gxhts3jQ1y9r4rKVLF3OpzoM1xym3oNA5DsrDk7S4HtCApVUcOpKRwJUDpVJ999vNYWo+D3v06JmqqtCPcsaQdAXvo1F0CIhzguVgHAxhJEjTe+369SeffBIo4kAp4IgFDUsxzY3mzRZaHKs/YYUKga/CtBYz3bAl7b2KeAS/XLZX9ATn5SdkK6FKqxRj8MJ0cHAPw/GWg0N4dMQcKBETk6r9sgfPo+fFWJDBIXRsF0yQIIVRu21bVedodbhhvkploXylmEp1AMjLc7ZtERmJyICyPQ+RbBEqEuSutGRABeSXLsdMzZLmB8CBvp5LF8889eR+cyngT5MDmQ31AlmNGZhmW8EERT6XFVGjkx8wkKQgDwfj9ea22mto3doNzuo68PpByqaYr9CroZIpAef61Wse6hWooqX5FkahFCam/WOUUIZAH97zoFjTYju7R/lEK05YxKo632Km8pTQPfZqYBTAoopSm0JU9vaHpovlY8X+J570iwPBZscnqRC7C68mJyCMP77CKDwnfaAuXLhE+iaGQQkQkQHHixu0xTqWxhtXbbXBN65cucI6RXPoKaqJpzaIIIW1a9ajVMdYz01gp4ewqK5Wx1uamYj1YQ0myJpjEXdDk1ea+l9RpkFauWr5K6++2rCI0oau/uT4lAnNX/jsb6O36eaNW81Nzzz3Xnv5T8wu9A6MX29sPXv+RnnFYlOQJ+3fLxGSV7p9z77U7OL5DOddZAnYhdb/1Q5AruMAzNUxDYcfT80QyJtsE0rK06ea/W96Ys+ty2duXDo1PtxfUmiioymwMyGjb8xAYd5TO58S3LHAH0ozugEz1jiHBfq20ncQgYJCdcVs5OQUMCMAgctzk6YVZafMFedllBfm5IdthqQeZjJzcwxaUnUWBA9yAdbv8NgooXD+hMLMGXuyt4I5F9JUyTQkg8JhsW9oyUhWLsalGDihWxGmAzlPOZOPeLsnkTZH+XPzbBeoJQipcV8ZkHQhKuli8MkZs1Yvp+WOzab2j81MpGRXLVq1YdeeVeu35CVbwp888db9lqbs1DmDJbNTY1u2bFq7fqNjCqQtkQ9/Gi4xRN94Y5g4MkkoQ/QcuFDJtDFdPvYo5qO95i5DmAlo4OVh4MzKaIWFtj6JDkc3hm7DUEk4q2VJQwNT9Tn91N/BOiWFsCffOsYX7X3sMT3v2NSxODd8u4CJAqvXVBm+VHmk+zAqvCdw4AEAjJbi11v4sHKhDINSnfjboCi6bHfhrNbzF86uXLF6/xOPG5xxPJkOrRTO9m07v/e3/9F5wGa1aS4h7NRCng1AtcecHNK4QWaiXpDJGml6ODDcvn1rQY7ZU602qUQpG/fLaeuKiwVF50zDJ+IwckfXvXvt+bk6Qvd0wjWLrPXTn/40HtIbYNFu5jqLNqSGFoJ2eon908hIXXw1aEiGlWw0DhhAUBIymg8eL7YIxEE6mgzYGsNRfsv2baq7dDGkinY+sDummTklG/KiuqKk2HmF5kfgGIfAzHX2kO+Gl7t+/SaKaCZVuXz5KgE5CwMtm7ZuAROjSMGhyHgFLKcnF60wPEGAZ5hokJ17+PARLb5EiSlAWltqxl899NAekFm2VgkJekoYJYfY1WFUMwRDSHajcExg0wHwZTE85KL9qbmA87XLYaNqmGOj8ABLXTgpuo3aQqa0QmiFLcpIxf3lN75JW0CrqavXEETdk2rRTKgXZ7q6NaomooRhbce9iTDJjkorqYARXagyXkYBjcTfhmOhiMmIyuXLF1etXole0CR0FLAImBIaF/EJxcYWp2SQCwzxQXDCwLGCw486AG21YCC6ohQwHyZULicvd2p2TrYLMjCEqpLcIfSGBwY99GfQt+qgMPAnoKrKcs/BRLsOADWGBm2x5gG6tg5XtclgelxhIl/geYZ5s+rlyf3yAxgIvq9oKTMkEXqO4bhBRbVo0MZMFKmIEqqIQL1Cu/LuYSW8jB/OTYdRJgrjOawUs0kROeoA8BuqoDwmBSHZK1x10rCH7nHAQ5+AA5nYPmIRhcdqtPhVAOFYBzdllISSD0HADWioVF0Qhg9FjU7DW6/8qTx6oy5BQ13RLcev/MIcW8BXUnXeeqiu+AocBVTnwygyaHsYEYivoAEBcmHmkZZYCwbCHEBTBH2L59QV8h76EC3uIQmge5+ACY3At/1bw4xhSVPlqEmsGwiByEOPPCwvfvzEW75UsQJuTJvGQ8lcZWSVtQTqpouyxcqEI0UT2vxC3a9BYN5Jw8YPUAhPcE31UFTAulVWRzWhJWJTfY4DarKyVSTRK5AVC+KpwybCqWwF+aUl5b6lJchjqJIQtgzjqhCGoVwtcXJngip1wRBhSoqu/IKzeMkSU2IoFg6GGhctxjLPwbT9rPKdOuxdXc6fYhuMDY8mZxwoZq+rsLpLr4Oi+ASXvEE4n0h++Mid0fITb53MyS3EBERxdp4b5NUq01Ho6RB1dXbYZb/5zi1Gu37t6i2bt+UVFplIjbxoclQBfJzBWADhj+2wFUaze+mlnOx8o8zKQ89FD4QhSBCoaK44DpI261vPSlNhp0WHmIRAJTmxVfwdhchp+lBdTJF3k+/EUjbM0YTpMXV1sKWpjNOHPsENJd2zMXyDKv0mdH/KcPOnoEFbSXYlicWtYw78mQr43mqKiJ5zka+KThwQCDAkBo/PSiqAUopBmj7HAaOT9XV1msMnn3pKGTkqjYoEJLaAiUtNzbdpnRv4bN22TUxcnsyl6+rsQRE0pCiClqemy8ZxeU4/QJSOsdr5sg9/8P2HD73mrHi2Dm15KTRKk3BGsIKMVdToVakQRIQFQuONJmhTlYD/rMGWcnLhWCorq/DNcw3zq6+8Th+oGYbbfZ9rMJFJOocyf/SjH3VWhv2O6CrXb9MtX1EVijQ00G84xai3BQ8S+fiPvYDoafBTOg9qJyCaLKDHaoqK8NMn3sIxHQCvtH/4L3Qz+E43QtOSmq5SWCGW96cnksRo9AQ/MZzUuGwm+etfvYSTbMcr50KoC0sNfqaGfRd4ahO0auh/T29HkItZJckpB7J9JMW6dZ6NXegAlBUX8c7iVucMmPhHFc1owUz2iJ9GVBD+4IOmPUz09HVbPtjQUAOUEYA//fqf/qNPflob+tO/+8mXvvxFC2+c7DU+M983OHGj6f65C9crKpd0dHZPjA/x+mm5JToAKVlFC5k2IXEi7MJ/0QGQjffcT45lvOL9dzsAOiRhia0zemfTUmbyJPHnJnrbm5uuXmy9fWNsuLsgXw9pJmxvNDtt+Ds3O0tkjzNUiIrK1k8L0MzoAT1MPs1Ny9IDCT6a3cmc2S3JGWG4lpU6pw+QMTthLlBBZmpRTkZBGNHNsA+SzZApML0iuNCEZHNteUOjQUsxHygYC9BJR0rIGWcE5DmfowPgBhoMJDmPLGSt1Kt6mhCgh/UAIY0UuiIhmRomagIgdcqEjWx4aEjD52rRSQnLix2sM5c2k5I1Nps2OGUX75Jlazat2rBl1doNzje2+c/Jt44gZ2pssPH6lYce3K1zQr6+ppmQ4RY0Lm6Yj3BETw96MgjGrKqqqoNB5ef+8IffJ3TKaaqnVALz4aWFC0yYQvISzr9jcXji2/aOe4nBhgaC4fAV1ckOesi0c5ejA3HMxVlZ+cAomltawKG3fAs28kX4wDZlQ3wOPa88USNDYEdqp9vehnolbOrq9Ff5CiQgigPh1gCUQfeErbFxH4IDCINSXgeY7DzBAcYOQ34GZABpdU5uvhgGh2HIhGUTuS8FVIpYvyiFkuaSc1i/fq0zMt9883B0AjGTfbf1Dj5885t/iTo1shpJJ6AwRBL97OlzdsemeyAjEGR1wY35UwZORtvnKzaO1SS1cdMmdEneExAI/NLzzz8Pf30S8vrwhz/MfgmLN8AN83aQbKkVdWLmVnGAY9YckqkKX12/aDFP5S1XcLOpqb+3mx7u2rVT6IJLkbcOwDK9h0/TlZLzhT+Y2LVjxy519fd0a6cc4GinOyLTYClgfz8FEOLcFR4V2izOn0b8rIinYHws0TA4OAdXv3UrdxT42dsl5YSZXCW6FHPoBwhkQUkAwZlSgxTJ3o5+bZ4hWsBMHLabjXXVTvFGHU4aZaKBKlUAbzVb9JBAMdZQAw+W+PmUn/7sxdiyKOwcSGWwHWRL55GAsUTTzUt2dPDSBouoGCCUgTq5oaKYQNzYSC56sB4SivbFq5/85MfPPPOePQ89CB/89wTAnu5exis5K0zi1dG+a9dupCFZdKE6KRX0KgMUA2cpaIewWtxjMkWl1UIIy9h0AARMNEF5z10CI9BM/NbQuFTtfHH88UprYmwTdTjsfs9Dj1D4l19+Waj22L79JGJDFK8uXwv9ENgyIS7LkgBqg6v0hM4gE/zoqWgIxmIgfQOWLeAGTqoUpYmqh4kP7j10QcM9OMj0IfPhA8kUgUEzkxyKdbOkMDg0oC6tTMKHMchTAzxva233rcIuN5DxLTQU8zkkwVfSt96C7CG9ii7IJxDwRBmX++A/k/4S+EAB4vIt/DXHpONP2kWsOKyWWBG6PFdeMU9wUo3uPcQHANWLG27IS3V+1eUhwl2qTiDNYCOw0IvAFVDMBRnKhl1KSlACFQlRI31GLwRUR0AoApyeIJBVep5RXVujDlACNiNhSCXya+8jDw0ODS6ur7MhA1cFY3PoqyvCweDDg/2TxZOq2bplU61ZgCOO9b7rT4QZvEaABkyWiOaRbkvzneKSwqVLlq9dt1pFrAiERCHMrc974YUX9CZNSVSv7IUOwMTcpLkxFNHIw87dDziMmmcx7XtRNXPaYvDRtGwBPSDIC44pueCPZgBVgTs8uDgPqZiCZu2QJzSVL77d2sLYlKdPbBtpVeUVfEqYnuaUymS7RsNMPiRFvsCxvyiyyNbRqmZD85Iga89sN7YwN2uPGtxnmeZv0GY25jAAairlz4kIdv0KNyQRSBqG/KYtVi0PvXo1kCBhJjSxXQ8/TiooQrhf2CrMquGJV0jgT1XtyCSr7LGaOJW0q5KeG1MvmF/QFz/+1smbjbd85bnwW1/QXl2/93u/RzU1cvJGBqw1D6QNPlNBl8PdLB+mgRRIRIC0y5eu0GN6I1GhXkSRIyersK/goyRhaWhxjzMS4D355NM0T3ujFkl3CQ+c1t5zQPCUxREaPvLIo5hvCoHROdsiUTbC0mpSNkoCOFEKUivKyxyXJOAmxOGhwdIli48dOaa9RAIysZ2OuVHYV/jA2FSN4ZSH+fKkS8O24uH8FFtR9ff3GWPBT4R/8IPvF1u/9moY1I41yrt33G976sl9v7z3n6z0gPmlS1eEziYQaWjxX0xlVxN1Xb509eqV684K4PhkMZOWIJgo5M1yNk1UW2LAp6mpkdoooynCCkzwrw4SvdKxfPTRRykbLq1ascyhCpjJ4FHKCK3ww1Xs0irr6BINenEA55HMVukAbmMa4UKMWmKs8lihR8EC2jvDQUvOAMLDo8eOewsNLURmdi614TLg4ygrtWCa2BocQkyWB4eUxuDwwJ6H9yjW2trGauzMs/OBHRjb0X5/eKAfJ8PQX7JxBxwgZgpQHHxfvmylr44fPyFd+stf/hpYslC7nT+xHX/0tYyXeGJrJpiQi3ufMBkD47TLEgO/3DpjYXHf/MtvKEPx1G56vSwP3eARncsbZtokcbBfwMMfyZ/v3MYHIVCOT5IbYXg4GUzW359hOk/4xOchBQLu1MyCFSTVDctTFjKm5hbuNE5NzAznaSkk+yfNslNt2JRHvCz4EANhjl5FmrUEptCIfaYm8jKzA/QwBKAuWJkUZJGBdnghMzXLTL0pofx4yCdZp1GQli5AVK+gjv5I0Evcy6sZnZIjCYMNwfWL+WXRDNSY6hM8v6iePUJYB0GBMN/HUF5oiUJnIFxJwiiZ2zirD4BMnYBQo9GOjNSctBzRifFTWkR83gGd4ZwC2AI4Z3xhJjQ1BbkzC7M9Q71S/hpc+3z1dE+VFkuaFp9+61hZScGGLVtHHQMxPMhzEiXhcn20TgBMXloHBm7V1mc+8xkmQ9NUx9l986+/pQNjZFgK0+5bkNXOSrFpmLhEp86VlYaRNJceo44K5QffRT8r7HWQbAcOoIVnNjsuKSwaT10YGXKEdspQsoqApVB1luUT5hODMyEmNaPYzBkDtRe8JX/LXsqENTbGnZxcvHYttG9ev27gX/vHF9296zyvave/+4Uv2KGB6WG6jW56OjtDc7BkCXz0tUxGYgtGbULWuayM71YRQU0IquyakgzBnzlzgS9du3Y1szUFy9F4QkB597q6GlRbG0ZdzP8h1tcPH7ZXOHf6xhtvaAcF/UyDNLgL7RRnhXabruEz9hoB8LneC3q1CNydkqgAnNMWdO7fv59caIo/2Sn3wtbwHPn0QUsKK5XyYCJpE2ZAc3kVWrTk4kAEi3ilY8P/YK+5c+6pAeURNhhNIn07LQLlgKDBgT6bzl2/dh0DtWIOopFzsVlbf2+v1txJnVinwLLFS3I5hazQo7N3k44K41m+dLF2ysC2I+2NJDP0q5cvkqDugbYefCON9TUNfAg2ooJK4IPG2j200Y5degveuvEQQ2ylwEQI3S93BG3mACafj+pr164inzNEi3ycGqcXpvWCos8BUN9JdoZAsZF9QV7wIFXPrYl9iYOarV5rjWIVeoVQGiAba3oOH5+YcaUu6qEPbDOr4Pe6Qu6GLKCnh4AEGo75PuHu/El8qqCZGgKNtVwhNsJfAYoNVUT589y5C4SuF+de5A2giuyKBwjfAA7/Bn+i9Byl/LwacUAbDU+jZMSLahuoG5/ARrqBOuSwU8VEQT6BOXzMKUBLvO/tMY+oHysUs1I8MaUqwxpnTp+jJDYWCmjU1VMwLJJjqqwspX64AU8I+AoofECO2mECc2zHBCGlK2KO4TDxXKWwevdbhX0FTiQNdSY/gwkgnH2lJAh+fRgcZHo6htgdA7HMARpVlbUegukCBDSf+1UAx1ww8QoQNFISNarOJ/RHSQVgFT0tzqiUp/IQJop5AiazigzHUnwgR5wBED6KqQsECKsFKzz3hEZhiG9xgKtUr4dqiSSA7IKDX8UAZMUQQ2Zw/4mgYRJ5EgEihyAwRKctI9P+/DkA+hBMSFZWhQQ0chyKF0sSBFBoydjz4MMGNH1MftDFMuiqWzVisIH+7n2PPsLGOu/fdaC7TUIL8nIy0sqMKDjeBXQXpBHGj1Og/sEhCIGrehWYbmt4XBAGOLsFEw0QwnRuEQ2+pf1qlDMQZb556NDxo2+Ffe6TJT6ipZbWu+ZFcHZLly6vZvmWsaekkDEjtPZDstamOayXnUQusxDuIP6pRvBdWM/viDOsEz17ySz6y3L/ameHFNr+g1D95Cc+gXyghJvOh/IV9wdmR3c4h09/HXM9jDoktFJR1GbfRm/rLZ9ulrkMvX0PdYpeemlYd9ne/U888YS2DTRzMkUnVZU11furuzvaKYpNczlZbEEUPcAoUsdPPh0mnvjTL5YSzWiyFIY2xKo1vRoDiOG2DoDuh+BbVKALoPU3j8sWNARvGhKBvvjiiwcOHCD+HTu24b+qfSVYEUfSWkD0pHHg/c9/QOZGTohO01pKoyeAUcQECHUkFCrLGfGA/PiyFStJHKv5axfO82XUyfgye8BPdXE3XukL7dmz+9iRo/JMnuB/kEgy3E9zVA0gULiNCer1BGIIpDaogIZfhBuS4qbZA3/a09/HhJDgQ/Vi4/nz58RHqhOpy4moiFyMzjv2xTDOlq2bL128rF60L1tmZ4xO00856O7eHph4yMsL9AUupI/evIICLSL913vkdgl625aQiRcDGFkmUNJP9iatViAEsgsylyF0+MhHPiJRJ7K/duNqoGU6eEOdIjHT5cuXsEJ14FRXVZKIArhUXlqryTfyRhNEwyglCDggFnshplHkJWkg9DgdToRW4FL0WRDW6hCQ9kMPAUPgVlldS5ci86klQpCAb+SSOMQwKRP31KiHo+EncSEpIJimaiNm9xYMfzlEeQQ0z/3iUtJsh+mMkEQXsIB4ixY9yqLCElOAIKDvh0VUSxlmS3wqdZ05cw5AXZ3ggHLtAZLf3ta+a8d2Zz7A/A/+8H9UtXTWbFioatJf6JvDhxqEsDs17GITr+ALhfPJgKaoWGwf/FHsJCSdAAV4D/F5yPkLmRdMoZH7d35eCKnn5yz+npQIL8wrqLK76YzdcjJuXnozY875wVnZ+ZmzTn2bHJf/tgosxPdGT0J/IHQARNkm39h+c25qEooh6W8mz0JGmFoki2PQYHoqLJfKCDkkU4qm5qcGx03PmamuKpmaDK4cUcZP9DRsQSpngkOBFsiHbob/vzP0PBMaBq+QjImAB5pl9zOzPPcw/CZrAKI2OoPAE8On/p0JzU/YMgKflQfDv+ItVChs6VGYHTVv9yddorn0hTnLFfLT56eGB+4337R+a9HyZbnZ6e958omFuWkh2tqNm08cffPm9WuV5aVUHf7qiabEiwphKc9HP/IhcueIYCh8EdRS1C9+8YuaIrrBtJnzgQNvRC2iD+VllfRBYR6AKt69G+af0AF0UePNGzZ4yN2xGjfMhFNVKUsHkAviEiHAQPCTAfqTW6aK/tTB1ikFjf5TbyOQLEXIK+fGXnyujBt9BgiAzCh0DfQcaDVHROc9PHv2tJFjtaMFvRw14FyKe8brk0996lPiDLXwQmAaBMXt6zcaGTg4niAEJqizHYVGhNaBBn+WLoz+y7/8D6ODQ+vXryMOAJWUoFEYzlKqiQWlCzFlNDhkHQN9JAXkUzAQPxWICQIcc1mszEXwk0ryWsY8IfOl3/s9Xoh7YaT8gH4FUEjDXl7Fvbrc4AapQVsiHBrwxAF4gqAZgqq2Q3VWaPDqGlPl8dNz5zP8p5///NKly7Hv4RMtNV9kMZ5mQvcSadQPPjoGpgTL3WXnhC4KZ0UubXfv4qNaJCKx16U644So09DwSOMjExwdDSGmwcEJBLrHWMJSC+ShjQkEpMUEh56oEape+cSv7QqUh60P0eVhSP10dJh/9dWvfvXQgUMqRQieRGh4RZEoBsVDrLFN+sBt+lz0+vhj+yU3oUTbXb4yBU5bprBWb3ombIFNM6llSVnIK8vIQomqE5nCyoBDc/hwn2AjIDwkbrv8CXlCwTposBfUeQJ/ChbBsjXzvNEbmoxyW7uGueaA+xxpyFQdHmrUPEcatvDM6sXSkKtt66qpLVe7umKITJnpam1N2KOCXAgr7voIWw2sABueFRWV3D58MGT16rXIFxJgF6VC7+Kly+EJjqoRPjYZYlZ0QQnA2JqoPdodEahOSKOAGknKFZUEl0BQ3ucuUnB5RaywQh3bcWAZUKr2xHPwAQGztCysUQwyGrLsJciCo0CmGRMgKOATb/EHTAz3FanBwSsFPFS7T9SOEOghH8Jw89yfGI4P3qpUAa9oRaTIWwFq/DzGMOD4PNboXhW+8i3rwBN/snFfufwJmleKKeMVJOFDOpF2xAKF+TBXAExXhAY3hSMHItpwYBSIAsEFssKRRpICyhVBeU7nGU7qx595QHVR8AavXQa+EyUodBQ8PEyLN0YvIiES3jwzK3hk/AVCuA8DvKWvRp7RMzAUMjdS0KJwg196ImGAaWISEoY7UYJg7RVZNjXdJADxobo4JtiEM56zcydGJxib5AqStF7WrtEJSqapsNaeKWEEGmI/Thn9Y0pJogJWCgoyPOGmCBvwClbsDZ4emsVxrbnp8pUrBnVYlAR4eJ6eMTo0bKsZ7JgYG9ecPLBjJ2gSpHaEzMoNc81pFay4JIRDG70rVi5jZmrxp7YHAuq16bsWrq8/ZFLhhvk+tGaPh7XWik8wpcoMArlX8Yzj0ly3LPxM5hrBh0ljlIs46JZ63WOOVoc2RCrSM7I5CL0M5g15n+h6MXJTkuBmUDI+xzTk7N61a3JiVO2YrMypUyfIVxSuncsvyKMiJKIuKQSEuGG9uTkha0LELvqqMcBwmCipcSUmIzY6D+CrCB+qampR+q7mwZPoUeQJCL4iO5AxB7t0RSyDPnU6DDQjUKtAwTBQGZQq4yuc1Ob5VbuqiwrCPKvWtjYNjNq0c0UlxbHRZXVt7WH2uXYCKEO29vY5+dZxR/CCIOjHc/E0L2w3BsMs1AnO9mSAGDgV5ZUmjA4N9suCrl2/jnMR4uODNQCoMDaN8zLwZESlfXirOcTcTq9VI0IKi/JRZ9e1VatWOJGesZl31NLS6u3cbEgd0VWG6hQ5O4c4AA6luKfZs/bDWxEAaxKneY7JeCgCtFGPvZtOnjqlauELPKkcvXVPmtSMDvBE5B4dE4Q3rF2DaW33Q5vNrRBNa9s9TQX2aioc2xeoSC67wVIDOTxoqxRvdRfdcMcUzAYA9AcTtNmeECI1IGV7wFvhIF7nLpAzPBIOeRGd2M4fNFPypH71rMjrxIlTuFpSUOQr+gmy8JdD1As1liJogGeZDcOrKvQb7XbnVDsTc0ZH+uQCK8oqJY+/+ZffEidt2brJmqbp2akwcT8j26LHm033j568WFRc29nRPTM9wgE7CXjr7sfm0vNnpbczckJOP0TN/3kXoDgFKHjVOBwQ5vyIlRMHlyTMzdwX/prNE04K43eysp3cN9R77+yxFwd7W6fGhgtss5k+NzM2mj4/416wz3JDvtwkVyshzJwxRmFUwtZCSXchIzcnJT1bmj+A1DOcmXYWWNgPNG02Y346fc55vWbnT+ZnzRfkhOwaeYn7WZa5RUbSrQHAXpaiF+AxEfvT5YgW9/GCfVIg9BPS1PtOlih2DEKlDiLITg+z+gX2yWiyLY2IyWVjhgDOoIqzepL1lE4MMNKQbtwiLUPfZ2o2fWo+Y3Ihc3wmdXRqLjOv+H0f/q2snNxFy5YbxTl85AiShvp6MxdmDWGxRMDoJ49hY2QhpurY47atO2g7g020rood1TZYShjWIJrQ/Nxz7zNI5Su65xA6GkIxQaAeFI8KneYZBvrEHLRF5pK90KiO9nsMHMngHDl80CcUVf/5mfc8zSTXb9zMb+h+iHV4ezjgFWvCKA5HRcDCh8Oh5MFylywBU6Xci2JJS9SEIdzve97zHrgFE0jmy0qa6ppWVVVWVIZJOzTZJ4DgMwjcoIw+JsBEvWiBoQ6qVmtwaCQirFItLmfFZiHPkDXDPle7ZotDNrn/f/oXX9UcsKkIgTM0CQoypoMrD2G2/OMf/5B79Mm+fU/YBUggBwGeH38gIMfEgfgEPnBQhQZCUzg8PP6tb33DNF3dMKA4EJ4QQNS5Z6QSMdwdSWEgDijDw8sd8jni7MC64TG1OItTtNfSclcMYI8m7am6+B+T1swOfOv4UUMiublBn/kcUjPVx3hszKcsXmRVa1hNC09reX/wg7/l+z7ykRfsHQe+51DtGxjQq0Ed2VnfpTy9BI10eOzOjh4jAGTKHWGnXzgL7KqrqxB78NABqgVbVJNOkN1syDBio19f4XZcAwCaMjL1PLnOD/wtHw8Bek+/npL9jh555BFlYmcj6WuFKcQaMj0B5qNSHzpZt6S4LK8gpM/gKfcPHz4Z4eb94wxmupyCgsm8MUbdb2v3XHwMGdCS5FEB/mOICxAXemELlHEVo0ZxFzIM4SeVdPgIP//442HKDSAwMbEqxh4682H6TE4WQlSXAJuhXbSUdoFPQ0hcQ5D0Zyaraoqra+tkuNQou0Q5cb6mKjRedkpwQYPhmO8AlM9JYXYmDFlIOUJepoPIRDoAigMHBgZlK7TdXb19DIcUJDxkTHIL3sYE4ViHP0SjAMihoiT2VRcWqcUvPqtXLajDHwhjNTIh4LmSPlQsODFXdjhS0L2LvDyPqZOCwsBtFudzZsvc8AFbRkeMzIVtWyMQN7Sd9GECPQ89oYowAZD+qJohuCKr4QYIUPCHOTNEDt6yOA/RrqTPqZnLDbQ5HFUAjnuARE6qTkXQI1C1QBVdCPQJ0/MVjVU48sSfILi8coEDNxBiechHbP16hSVeIQRYDTckLGEFAWIQhj+W8o3oYk8aF7lLdflKeVfqnvXV/kCMhwRvC38mhE5zWuxZybN3GJ6bmxMn/e7vfMlMiea7rRwchVbG3iM+NHcCKiWlYVaTEXNOPzffPEgDYQVhwpahNDN009M5QalhgZpxb39q6SxyeuGFD+EsZsk9LF22BKLz0yGo5TQldw170VEcJwHQtApmJ+v64ZQLN9VSmMyTwSB/gsNseGpwgFULlERybzssZ/E6B3FJg67llcuXgwiLSzDIpleK2YG02hrlzLCgfvfOXZygOJ3MHnn0YQEyaSnjT05EFVAS89F4XMZ6f8KTYMgP702UJICLFy7fvcutz2lo1YItxLNj23YToB2wR+i2BaSpZgb4ipC0YYBTXO6J5Dwke2IjdXKKEFBdWlYJjYmpsDrCQ0/sxOJzIQGNcbiC5/CBlUWZjsjZvHGDWRb0zNvm5ls4g/dokZ4QVmq6Eq0KXXCXexG9hfxsjEyZH92iHpB3TygQcwM3tfDd2G72OZ3GeVVQLC0f2mWhgArBaGsrqlmgkhhrLHv5sqVwiBemxVhfp4vfRH5kMkzg7wKktrqW4zNq6U/2RovEXFCKrVTvgJTSZTXydDoAH37hQz3d7fIWhGsEQO3mqGhFcAkwq9OEvDT20KE3CcsR63093Rap+zXtB/6QUctrB153DxMN0qYtW1Dnc1WY/RwIbzLruEXqxXpKGW05C/EBfLRJysiqzpgzQQABAABJREFUmpQleWEyNKdHQCI1SmL+mEblwoWLlkV+4mMfwV4ePEihtASxsfk3106Gxij/Qw8/DA1RCz9O9NiC7QinDx56JfziZTAHwpcvnAcnv5AEipgDbl+8dFkzHJXnbtt9jlsV0LMawSfaGOpBGai0LopXiCJlpwt5yIhcxUVhMqXCA4NWxM4XF4Juq8ewt4nxKoohOhEOYovBPZHQ+973frX86Z/+GevOTg7JGhkLO9PZUjiYxuAo3LCR5ugAAPvWW8e+/OUvC7rNkLnTdM0064f3PHLirVMGdPbt2ydBwE4LiwvC8t3MnJn5zOtN9w69eS4vv5Jzn50ZDcmcgvItDzw6m5YXOwD2tpdp5FJM07FiR5dWB8D+PCH37w+hv4dGJZJ5M8J+YkE1fELsy0QXQssUugczg/3tF69fOHqr8XrWwlxxYU5WymzK9CQXxitKlicJFxAtlzILKGQ37XyflpmVlmkucb71APOpmWG6qzFfTcjsdNrshC2AdAPCkoB5O41OzDvlIDfFzDE6g46ASbIhj52XcYaW+pam4S2UXHD1hEJCOHYAglLZsWoqWCsXFwq93XPQMbAV0WzoCAUHq8cRGjZEK2KRGonr56Ak8R+GPji2lBw7mFviNrMwZgpUalZKVuHI5HwPkZVXV9UvXbdpS7ktm4pL7OF/8fJlCe6yvOyypOsLf/YLB3tJuQGbPzSOxP2qmh/o7e0TMtrhzFsOCkpsiLW691YHAEXcHY2VQyVZHzr9ysz+detY3lo0wlPh8bERrgNDsMvhBzEQZxfshUTtvHzsrbfYOw/ARrh9YnUjnHLDZQmFFdYK/PznP8cNWSa/XsHKV3BgXLRdh5z9xhgC/gImBFpEYYK7U+ZAgIwPoeGVCMDkItRRfkYKMTJiks7dEwzYqg5kYH2FXiiB73Nma5SbkX73u99VWLT9yCMP7X/0sYsXL3AIbBkctkxX8Ypj4WP1dgylanzgqW9MXe1daSqjXAASANRAiLY5z4997GPKfPOb32RxPudgv/rVryp2O9mDIeRHkimvuKqfgIe6N+wdn/l2/oc70rySpln1fOPjjz/O7fT3haTAwTcPo7q+vsHK4FE9+2SWM+YYDutqv6+tNY9NKpMcIeCCpNpxCTMlpxg+IARx+/YdK2adpMt76NVhskZB1brPCCEvnkdyh6+AKjjecteNN29zTQqDr/2iMCHiDJtAhGXH0hD4hvkxJ8W3O3XHh6p2UWygHFmoAIlgi64+UKqDFR+ulqH+kIryCfJJioixPbpZfxIfrfbWoj6orlq71tQX51SQl6/6B4fBJFm1FxYV87EEAabsAP4E4EKO0SB35ZWBNqyU95WKYMtLUxIkax188uUvf+nixfM3bl6n9jKJkEcjd+VeuwABn9ArPhUVhIWfSQNU7iFQvAQgLvDRroGGJP1X2ENKuGbd2oKiYilHmJA+oVN7qRCo8hXKUD+3jq30y6I9GbE7RDhf9TZaxHh0Q+2qHkq2T62uqlVvpjTBokXa2YwsNj6ZXxTmoNM0NNJGn/vTPRGjFGLUCUqQBAdAl8IeMkmIKaleT6I5KAYZb/1J5yVtSRNuiHWjsEQl+OUVZQr4Cpm2ocNVBGKgBA3mE6XC3gKlUuWB8qcy8I/YKgACDisDPXiqOuKpAPL1uqNzQ4XPI/5uQMBnF9p967lvI1FgutToiergbCZFrBTkiDDSXF65kBOvhCtSTEEoPlQgMiEpGxJAJO4JsHBTTC1IptWGnt0DAqvIAbSPjU+aQhnLC9J8S9A+9Hnq6lp9vjACW15abLGoNte6N0x0Qqqd5rSdLIoHlMqorq4xx6ugsNRRXCAy6a6ubiBMMEVzRWU1+otLy1g72apekGrW5tL6xYbwzYtQHwPmWZavWIoqU2IYxmuvvSL4oyXuV6xcTq4OkkBJJAnfTPd+8803ZRk10w6fM7vALCB0ahLok82vZRRYFBYTNrTZObaCz4a5MEhyHGw4yGFurunWrbG5aTtjanWphc6JHMbo8Ah2GARw/IPBbY3T5g0bzbgwm0roKRBRHe9AxQk7Ec8UAUiKKClY10HUSeEp1FtcVmonLJugK6bJtp2JbRAM5hu+UExqRx7R9g5GD9hCcWFoIexN40PA3Us/oFRbCNVnnnmGs1MjVmAd3qJImGUOwoMPPmhrRY2QFRGBz8mk9ms3G2emwygn/pvCTlOdymGX8NrqSrFGWD+XbN5C0OIF5/OWlIZxDE0LphEBR2CAwmAOM87NyYM/x8F0YcVn8bnAUsqobVH/1KvA0eNvaUIUA00B+DAh90jAVbQwaY0NxDRmqjY9ylbNCtAcb5WhoJSS6FXKtBgGIXroQ8G0sNkaLNsLUBJAgLWvDqdPrNAw2uhJok6zRv70IS9eOCWMwKKzZ88ji2N9+qn3Iurevfsx7NCT/NGP/g45qOZNGEbb3Rbz41kLgEIHs/a1XgjBc8e00TTYeiVPC8+sjGyOgPZayCH9rwunJ8DccOaxx/bRz5MnT6vLohcT+HmNgaF+Utu0YSM5uoHP3Tu3JZzMlQqr1oxTdHURNKpLigqNg4tGDrzxBqHQOozFfK90OSKZ9BDbKZtXIh58cLgDnalw/sO0o99CynNiMvQTQCAdm1aSOGZ6Ij0j5ti6Y6t5L4wFdUwX25GWuJtZ2SDAcUYjJ2LA1Uo7Cwmkw/EFlnOE2Kujsy3x4wVOuKP83//bH9Ic2306EebChUs+sUEmyFLjtNpICK2zOQTOO/QPmaUVZYISWmfKn0jdHjVWlxqjd1YtTmxcv4kn4R/4M2+tAYgdgGuN9w8cPJlbEDoAc9OjfF7sAMyk5s6kZhsBCPtrBv/umCtti5jZnj8h7tUBECMG2dm6xSCAmT/6Am93AMLSKxt66oHzmTL3BJydPlmQ2tfWdO7qpXNd9+9mztvL3yow83fC+IzTTfgNrbu581YSy6aEdsmz0L3ISMnKSc3KS0nPnVV7SpiiI5Z1uFi6oZLUWX2AjNTZrPmpzLkRm+uL2HGeOtF/K5hpPrcWgNnpxxXm8Ic20pWelW7LUhf3HY7yeqcxCBsbJXF/aF38l9zz5HOpTpMw5B3mTcGNGjslAFexg3Sc6R4OTdblmmI4YbFxdmYAKkVjxYBNRPUBxudSxqZSxudS27r6nvnAh9Zv2ZaRV2AU/IIDTRuv79yw2ggGEavRr364EQAqwUVQSIuaxKMiY/hbIKBeHa/oo9iCgTiEFIYhxjAO7tfCALon5KLhXlEfXnHnzh2s+50nefY7oufTk+PcI/2n7WQhoOfe12/ccPr02YGhIYE1BNiIxoLJ0EzsEp1Tv6effhoCvtVCs/GaZHIFTY6NBa+iz6k6LQWHwFIYJivgxBTgEu1kimPuoedzGsjzu7dKmJdgvHv27BHb0SUQhkfHpQunpsOGFmI4ImanMvQME24kwqlGP2amjV46f6jBvn8/DAvQBLUEf1tRCuwbb7zOA+CSJ0bLRf8YZW6njDLByRapMahHsq957L1861vfMuiNcH7mC1/4Aq4i+cbNm3iFIlUjU/tLDewIJI0FB8h4TnBoh5420bZmZEe4yGy8eQul9zs7ZMd13pRpu3cPVib5IDYsk58Yb6iv7+vu1hUlTfpMytbZqQ5Fml1jCGT39a9/3Tom2yF+/ev/qw6DpauIVZ1drf2Km+Gph4l8ms81afXwHwOvXLm2a+eDojWvMN9sfwTC32gSuaB00+YNOEwJE10qgS3dwBlOL0ZpVLSruwMoVRCuEMvoN9z4N7lqDNQBwFgDU/w8JdFMYyl/hTNYBDd/kiaEwWxr16TmXbtxU0UeOiJNhtTIqgZiQ3KwnREzTGbBmjCIQXVkKGwICzI+e67fSBupJXWlwIBjGmjqRYIMqcZr/QaD1ZOxSwNaV2fYZVETphY4wIRv4F1pl+aFyZjeh42opiqgYRR6mQnOY4JknK/QSwnHJsbPX7x0M9kFUafCQzx0zBM8C3JDoEnuQBkXpAPwhNjM9BSL8Hz16jW8JMMxAEVPMrNy0SX5GGhZucqyQ7M25FogbJYkunwCE22lKnSSo7vzqxZPvMV8NwDSFk0VdqnNcyRAmA7AIdSf5FUhBaZPLF3CK3DQqIBvaQWTr64JbbTa3XNuoCmD/KZG86LD8DuOAU70fgH3JwIV8yfg4PgcRdQbVu7VpWqI+ZzgKI/yPserqFoK+DPiT14+IRpgYaV8vFEAEG/BRJQP9STZDjOBg/LqpfDvkvlu1W58C47qvFU1OCCTcvyQPmMUGuMnUT9VamUVTJQnIywK4VwS4/kwoqcMCFGR0J7633/2ea6Wtuk2aB7E0y5a1VBX054oaHVluRmeWuWGunqom+CYnpVNj6mj5sowIieE74XFpSad1zcsVkabmpHlmL0Bic/U2QUbucj5W9Ymnn7iyX36Z1DU78V3ddF7OmpangCRS8J8/gi6DKa0LKxJV5gBvPLKa85JJQ+zDnwFdVrFPivKwtoD7Ii/hrRRjjWYzmtggQE+HCRpXmxoZHCxTd/Hx7Izw+4ELXfuwsEaAG9lViQ/eto7l69Y9j/90b88ePCg9lswpE0FRL2gsXmugYbhoIubJiRNAhG6Vq9cherZ1DmdFvBz7aM3Mt7X229aiG4ACIgyAQZvuXhDaUsXLSqrLCNQWOneCCVN7pSWMEflxInj586c1/xwtZs2bbCtEFO3JYI11r09fdL2Mr46ADjjYhi9Pf1EQJm0DXQLN2B+v6OzMD/PDAdhBcRwEsd0QM2k0qJILNGtxE5DukIcrHEVIPIkqmAJqONQ9EwkHkgEfMasOq/oYlRNfxLE7TvN5rtz64yFWKXeLTR1DrGMmPyLk3QM47uXuBJqG6+sSo6tBUREaEYuV+he60IKZIdL/qTWnCZWa+Nu3LhpLwsMRDJROi2S7mm2oeeasCdSZpZFI/SnsfFmbp5DDJY1N926eatp66atV67dsEZs89btdn3tNx1reiY3v9Cw7+lzZx04rcZ7bW1cYRKnZrnXwmljBEgQUGN7Zyd+Uqcg9yR7XWgHe4OSaQvWiumW89sNi+rMZEMdBOrrFmmkJW74BQMO0dhoGnF4u2p1WNzc1y0yCElKmxo55Jk7E52T3f79+2mRxQNGTKklXIhAMQU8N4mZB2d3oHFGWKQKfVQmY0rRt/76O3jCv4SruIRvopbYq97zly4O9g2yPoGXwYqJqQkEegW+EIFPKSkOR15ADF2JAuiYdcMN89euWWUWn9PK2KzpSY60Y+MESuVIilWqiIq6+eu//hvE+lPjYbOXoBjpGQ4d6+zusZBagMJSqB+6Dh059MXf+R0zWyanxnm56QnNSW9T451PferTPIY1cJpe++SaVx/O7021Njfj6s22A4feyius6urunZ4YyXDGVX751gcemUkxAiCDHbyBNYQi+7BQ11YN/2UHIKT/wzlcb3cAYBc6CWHcIN3JuJlm94TDOu05mDWXlz4yPzXQevvm5bMne9tb8tPNjJ+fnRzN0qolM3NwLEzTN7NIJyBtgWejezOC7pTMlMw8gwALaVmsgg9Uo11pnQImEs9cmHYWmA5AYfpkjvGJpHUhREyLbT9947VdGKVDEVA0f9pWRcnCPuaWtEqhf2NY1aWjGDAR42urQkooZK3gk+GUY3ONUkNAILJXhfL4I/UQGgmZgJzQEIZ5iOGAhunUObZmW2tD+rYSSBmfBlFwUdjZP+KE4OziMscDr9u2q9h8ud6+xhvXVzRUIIpLvN10UxWCYBJnQWJuZxPp3S1dtkJnj4YsWbZCgeGRgezcHBrCn/f3hdFCE9mpAXyspKT2olXWB3foaUBXLl8iP+JPrRK/5FH7vfsQtt4aNC6IHXFHWis7R+mrS+5RVHEta6XDoPEkSh4+fBiSrMlgtc99aBk6H1uV+EkKz0DAZwuQwQs2rgz+x9hLFWxB22lbMoGUKtgLjwS+wrrK0BDxsALrCpgeUyJBx2hKVoqThFYwN8tCkMdhIocf04v+1a9+ReLe8uFwGOjvXbF0GVWyAS9Zmjvhlz8U9gCuOhu8CB+s2lK70w/E05LiILCsZ9/3HK0QpcMf7dpQvppP0L3V0nV2dznx48ixo5rI3bsf+Mu//KsdO7Y/88yz1vo1N985duzonj0P2RLnz//8L/Lz8x5/fJ9f45aiLDwsKS+739rW2dN9/cq19Zs2YhSS9XOgrTvBwQiZwq5fS5ds2biB7p85eYr0VYSBeias2J9UQgdMwlA34D/8h/+Aqx4irbKiDOGcKs0R7svUaFghb/oL3RBz26145fIV1v452nL12nU8qmQa/oOMz5WVFfa188n7nn8WT8+fP6vd5zHAh6EAY8mixTBkDx6iBa/03zAK8njY0FBPHB66N1CMybNTJoVPmPX+ud/+3A9+8AOS1bKoS9iAjVwWPaQbYIJmHvqBN96stmlRdY0N4uTFeeY9Dz3klTJGKrSzRIBjFAl60Ii7dDTeuGnzOrXobY+NjPrl/mSyTA1F77IlSyuqzEftvNvWUlFWyk9VV1RPzU7NTM5cunI5lqHt1j06GllyQRKKKpQ66aMwr7iwIOwKmJVt9pR8Rq9Th7q6Bfom9iipZ6+5V++5C+etQ7N5f9/g1Ko1DcJQTafGFN/AZK06ABSJ4biHvCZGx4CYEMhMSBPPT589R88xIz+vcDxZOiwVgjOWwxgfN243OW2UbMoKRw0rvnFTagFWReIHus1GQl1J4oPtq4XESQcaeEU0Ln9yCMBioPKAsF9vwYRMQ22dNpEKsWsFoCrwoFcCvwhZLSCInWgpKd9rC95DkMlgmaTykIGSYm5AAAom0RsweQbmiabQW6LkuFSqsJJwo4dYBAiLwxwoeeWCp19IulE7nP2pOspJ2YCCA11iod6iGr0AgqwKX2kC/HqChEgsi4OJYkB5GJ//ZkUo4qOgCg1lSEfV+DY2OuLXth6aH1smFBQ7izLbHhXa8cKSYt5fayXrLTWmXbB/a+rvfewxvQSVidWEC8b0deaYokgUU4xyG7DT9Rqf0JWv3b5la9udZqZFbN6uWrFSsueXv/7V7Za75RVVduxZvGRpW0enpULWttbU1tvHYqCzGwamOkyYmjQxsn7DWn4H2fc6+MaQwjGGXllZhdEmn2AZ18bfiY8JmLNj8zhIHhrsc+fPS8yLJgkALzw3h8FRzyvsw7YmHJzhuc4fDhJwNw+oh5oTdkuUzKCOnLVOf2FJIekkh99ZBmdjAhnxOKdIJJ020NNdWlb4P//RH0kbVJaX2a/T6jeyITYsEtkQUmlYuVEsnEhMaE5wo23TgSkuKNzzyMN5xfmW6FrT7izfmqpaA++ERxEd0aUYVfAnUcFWEvSFFz6sAdcVlF/p6ek2HUMPVuZMx+zalWsXL11ov99hj06pfVP2BWokjXUf/q0XaLxoGAMZp0CGEgDYP9BXX9cgv0tAStpulEA1nEF9MrM//slP1FTXmrGzcfNm6uuSLcMcJi1/Wl9Tg8DFydRzATqSqSDgUauwFZmkoHdH5zxnM4SlK+VP3Oju6unobL9w/uLY+KiZ0YsWmz+2wdlnNoJ0pqwhBU8815cgOAKSw8YN5lRRWQ47yDt02Z82R1Iv6avXDbrMBSsrDYO5aNESe0KOmnb2TOmV2bp9mxBEkKFMf38fDO37pvEzmuz83bLyyoH+/samplXOhbFRoL3bxizGnA4rYlvbnDe7ft1ma0NYcpGFhlmZl65e4c0fffQRbYMmzdQXXcGOzvtoF3yzZwsycIwDRfibRw5JPsHWqiP6KarWzDDLMKU72ezMb21tA0aZhofhw8ND9Q1hCwvsRYu36jI6JKo4evQY/A3BKawngCFEg0ZKjmS+A10MG9vVCxQLlXzatHmjtlMQQy1hRYKYCQH+WkkXwXFaPV0999rtxX47ySnMmr3GE4GAHMy0bR+YbjATS1k0LSWLV1991fyo6amx5ID5CgMgN6/fWLRksTI8Bi92/drNPQ8/ZNqCsO/n//ALWkEuomKJZlqKtMmxcBikWAelupd27pMvUGzPgw/KMrlg+NaRN80LWrtuU31DQ6/dY6qrbaov8JIJRnJdw+KegZGTZ68dP30xxKO5hTbFyy8qXcgq2rD9ofSckrlwCEBIJoXUvsz3Ox2AkKEPG/II8oNfdiVrAAwMhFY5/JlIwWFf8S/eV1np9ZnpydKS/NTZ0dvXLlw7d7T/fnNu2mRxbrpTAooLcgHBfPsTmearw4A5OZlcf+g/zC4kGfT07LTMPJv3TxsI4IjCcIElVDM25snNzszPsvH+QPr8pIYCkyWqhIu6lDqQVoYwdH7GDp5avYCVNc8paUOTUxnJEKsuALYzIjsEubCOwjiNwRrpQEpoK8MAoAUVkEQNTYiXoQ/AjFkpYbhfB5ZQrD8KSaUwgDYjFvc5mNZb2YFoYnpufHouPaegb3hyaDKluKp+zeYHVm/YUlRajZKXfvmTpQ21c7Mzdq1tbWl+6/jp3/3tT4tRfM6HG0koragcG5+y/ZQFUTX11aVlTrWzn3KYGgt5p+ZxiXRDOBJtnPIbieFDpAucXrJ+7SrH83HXnnCwPCfNhD9loLS+9ZU2mGHqHt1pvcM03v/B5yk/YqVRFOMbBZci4w9+8IMK6wkE6xa2puo5Ztm9zcF2AJKOHjW02RfrBlNzqytOBKzbK1W7VKodARyevBaDEsjqY/iTmxUpWjngExC4XM2iGvft20fhT508w5YhrGqF7Qh56dIFedkPf/iDHMX//n/8u0cf3avS1StWBmh32wyGLF2+7EbjLVbJrKwWO3r0zRPHjy5ftoRsZ40xZqbz2Hhl3k5ddZ3ZjzzSr375kt2xJZg0Sj09YaOtsrIKyWxhzsnjJ51V8M//+T/77S987ve+9E+qqiv0H2z4oYk3aGlyzquvvTw0OPLPf/+f4cy161d01GkUvbp4+UrzrSb23t3ZtWrNakxQIySxUX6Hk3GJ9Xkw1WkUteBaB/GARtBz7gv3DDKYa6TA66+/fuDAmzZ7fPzxx4XXOclsCh6D29S48znAciZK8h74VtfQ0GfL1OHhTRs2iLulvXQUKYOZHpo8tYhMuFnTaImDT8VDDop2wZPH7urq1etgXJ5IzVAkIy0CLM0rx6VSNNp8/Mc//jEryM7IXiusXrNOl6Px1s3SsrAr/+HDB4UZzzz3rFpefPFFiFFml2DS4Q9zqZmFNt/LzpGOpDl6mFph+oYbzNETpKEIQzhYSx2Qdu3Gjfzc3OUrVxq/HnU+rrybE1qGh0H1K1hhvj3Gt3nn+fmlixukBfu6TYfsSdYcLTBx8wN1OQRtZmQ4MtyifxulGNnzpCi/qMQEaflyu1KOj99qbjbJ3XYpeGgbb8d74eSd27fvtrXZ2EreTkT0xBNP4CfysQLDsYUCu+HziYNpUGPtmr2brHkio7ASMisLJ01DYgiWKvhTz9vnSahl1/9is771VLVQMjhdXYFqloVpygQbSNbZq5Rmxuc6t8TNWv2CCRnGDiz7gown6iVBnIwaQi29ZUqQDJJNFrnhvIcu3/ISsY/hTzfdPV3Nt++wcaD8qdGhEkjT0rFQCgwyfDwBDUpMEnBVe8WLeqsJY+BqT6w4mxr4VkkYqgulbpQETRUqYv6qiH+iGkBvo4YHZmZlUQl6qFkHnJ6oKFLqlfK+5bWD436nF6FqBWIZBYJvTzoD5OVS0ofogh5MREcgE6LhYnjSz5Ky0rB8N2XBEly2HGb3WGyWlh6fmGUahr/zclO//NG9CLCQRKMj8yf97PAgf8YqJ6cN9aZU1VTKXvAaegk7t25JScZlHD5/49p1ePNWAsHWe+1aUwftCg9b73VOapbTM5fUN4z09A/19VMLCweHxwZwTOcM9jeabJS5RvKYD9J3YuT/3z/730J3cEYObIZa8MWSXjQDPWIIwTfZYzQDO3rkuLc4YkKbWQLq5RTo1rLlS3DE57imIg6dpVAOGoDpzN4EDHGnPfKzDIWnZTsCL2z/pwM6FfLHWtxx2pCV+ru/8/n77XfXrFzhyDM7IdJm+of7MlgQy80KWytu3byN6tjnUWTjrHLz7fi+B/Y8YAmp/CCW0k4jJMQMAfQKm5Pawyx86MFTQ/LeZ54x+YQZc/outajLchzaA4J7+16jVzODFhhiBbnqOWiWFIYAuvT5aIA2gupoVumNhRyw1e9y33JHJuVWTU2DM1BLSyq2795VX7fE+kufU1Za/sMffv/82XNGfo26UVARqAACbpw1JNVLq1gCW+VeTQPVmMXJiCrl6C0QJAhkQpgyUEQhKTcNMePyBhwoq1pQrRhHcP1a2CKDdnEoLS2hiyL2IV/hEPxNiuXHBd9kLVlZV9tgQdf5cxe88i1kfKjJhzxuA+hzXMIZ2Rr2rIDDyKEhwsBPnzAPhakNwXnCZtz7xRmMvXzl6to1W2yVE1gX1oWXwsl5bRSGc1OXlKTnhhNghfmahId278ZenJfZAhk3jEcTB4+gPEwE31iHk55YFlxQYEFLl6VHRo9ESDb5pp++xS4sMn0COatXrVNYzxaXJH6Zr2Hf1WtWbdywiSObmpzWMulE6YRfvXJt2fKlshqyvp7rHDIEnouZiHugIRLSeoHsiB/0QoPCU1dc4nTE3w7TwTctOp3UEmAjVuMYCaKOAXriuW/x59y5M/U15fpm2Xlhoh0bVJdzBnShHXkWNKSgkBq8dfykJpDKyYCaZ2GVjk6X554InlYmmyIbfCALnS4dDHxWi9E0zcDPfvyTz37+t8uqqs2g5DFm5mdsSFddVT4xNiJ0tko/J7/o9IVrF6/fvtl8PzVD/20yr6g8NVMH4MG0nNK5tOyQMf9vdwBCRyC5lPnNG2rwm3+6V0DAnZFT4NQsZ4RlzI3cv3Xl6tkjwz2txYZ85ibmpuwIFCYOicX1rWBbkO+kr1FZEs5TUsWhYPNp2s2ctHQDewVhhbDuLtzCqWLhP2cCZKcML0zbNZJaBTcqLnfWQl5uTlVFeRaVU1p3Qo/f9CE9i/TU4bHpBTlMMMxtCouGYRrmIOGtejUWsjN0HjW+5O7C0gQfmiFkPCC0f0knxOQhIwcOS14IE1GM81JmjQFYwgUKaZxQ+aRXlmEKs1lEI5NzCxl5w1OpY7MZtUtWb9v1aP2SlXKTDjI5d/bk3of2HHj9tZ6Oe8VFBUvrF5nrbdpbOSdeXW+RWFZ2Xk/fQMvdey2tLes3rwrbsIwa6TaIWkzHjJ4wBLGUVdcaJ4bPTuGvc75hw/rs9BS+iP1CnjnI3TglQKRLe7kgbKVFuOpK7Drliaee1MHgr9CVjECaMNPE037gAx+i0j7nh03Mo8/+nJgcM7VV7IhYlfLMQWmTZU60nY1zVnLS7Cj41cSnWZvuhrrSVaKPWWFWz2Bdr7zy6r59j3PXOImlDgt79NFH9d9effU1EWF2VliEZwayNoKz5VtkFox5yjQb5TMpg6HV19RxJitWrYGchUOmF0iE8c82YAXw7JnTP/z+9/bs2p6VmXH54gWpjaWLGlBnHsvaDettW8wVX7t+0/Cj0RvQrKYQZ2fl5FlfJ3T+3Oc+82//7Z899dRTHI6vEMjvQYz5f+9730NszOyqCBxLwkQ2NxubQz9n+u2TsHgGLQtPjl0crCBEo8Dn+JA74m3KwuT/Csb+wx/+kNSee+457t2MGo0UkrkFfR7eyTgJL8QJm8bB9XnCMwiP8IQU+G3f8lGEjhsKuLz1qqqmDg6EaNSaIDyUv4DwjRvX6XPoB6aEeSkSPl5h4MWLVxY1mHAYzky0QoDgjAyo2o6yxGQjS+MSFJ7T43hLi0prq+st0mttbTl95qRtnhcv4cn7IL967So6YIIZ6syVA8cEtrr6JalpOYbW6R4yAaSitEKEp+cADWEAzVQjDIO65oQdOyy6RJfnlNBzxIJMjbWeSFYMNJElX41jcKZXWA1D8qKcdNsTGktXXejFHOXV67ei3KS2sDdGrForgC30k8kAG9tuzTH24jnHS/S2ZTegzaBUR5raUF4dSgobQiEj3IMeHbMLHJzv3mvTToFAB5R3RIrCUt6I0udBkQEBrxAoJmxrkdGfhqEPFfY8XvEJnOGvCnyDFYHilT9VrUbloQQ4LQXNE1RDRtUo1bbSGVTgM9X1HATPPcEBnEQFZmKFhyry3FiBwjDxJLLOjSqIAPI+US8OY7XLJ8owAfhgDjzVDm31Mhn3sZX0yodQikiC40OX8hFnSgsTpHnlQzUyLkIhX78UHpyoDIp5CxmFVQ0T1UFPAZcbMDFBARcE8AfhflWH7aBBQ2yGCoUjn42EKOCtP/2C7AJWXb7yicKA4wk8FUj9t3/4adZr2np3d09qsu6ivbObYQuhEWLypzZGw8DAKKUUqbO3iwvyt2/dxonz7OiRrl66dJnU4IlTZwxo3e/qXrNu3c2m2863GR4cqSgq6bx331Cmsz/HJqDbK6iCouN44WTDHKjyzDZp+YM/+APP799r1VuAqO5+PPIQx1mXJa0kCm8cMZ2I1hqFPHPu/MT4tErxjpz4R1SZokDwZWWlWEZI6E9OMgoLefW1LCkTEJ86e66p8e7EZEqBrYwl0ZMLH0zvqKwq/Sdf/uK9+y0GulauWGbOOpWSd4SSAhS3qz0soDEMxwmSEZxrhS+jo4cPHykuK5Y5MHgHyWB+Q6PGMQgb682Txnc5fsaMIkpG5M6u0i1zPCrlIMix4RE0kgp58zuIBVxhM6m89QmPsG1HmL8RhRcF7HAxZYjJw7a7rUFvUgUoEzWVVRDWh3jxF7+oqKixD0hlRU11Q52FW/I6pClFwQna4MXOqGfOnmpJTnJZv3Y9m/GK3/E2dgPMAtRAsi6eVF7HW/xnqKi2sSZTVJ0r4uMhC9FeKgB/HseF+UjwVV3tIu6J6XpiRJ69WfPEv1sa4SuyUykycUw7bRKqTUSNYWI+NuIYmSqGLhNbcRKftTEEhGPY8uyzzxqCSFLyw+IACuYrOsDMqASYLOpdu3VjNOC1V99ctWadTilM4OnXkAUO7N37MODSTiC03G3GVUiqRRJAgpACeB5hIt94MapRRI6cERIgw6cgn/sSupnBxT8Aa/iN90MOIAAaPMW0gvywqbZEyalTJ7Zv2ypWE8q8+urLokxsoS9M5hOf+JQd30SM+jXXrt0QlAtDBfRCHFjRDVULPtBOQ/GZODQGjEJDpW2gIYoZ4tQBkKhTaXRMysMk+l/0Uj+K953vfAc04pYi/sRHP2REzoAee6+qrMbAtIwwzH3h/KWQ6RwNOyr86Id/RzSIcnSUjoaI22AH/gQhVlt13wAZyV2+wsx4CTnNnK/MX6JUTddufPTjnzBsaLg010zUglwdACfwSmX3dHdWVNbmFhRfvtH82uG3eofGB4YnTGjXAUjJKFy/bXd6btn/+w4AzCmP33gT73/ziec6AFk5+QZ3zdKpKs2fGu68cu5405XTE0Nd+VlORBvTAbDKQaqdAihfkJ+jI8bcdPV1AMTNs3b/N90qPbugyHjd2xor0RiicxulzYwWZdk5dFjwH9oLY8Wz0yJ+26+VGsvPyzGbS7Qf5o06f9DigJS0ce2taUShI6EbkGGEwygA0RMfhtsrKfHPZmWGxsMEaKsg6KpLH0CngHPWIxHqx66s6khKwaB1ppAaEZ4IiShRuF89ruAILeNOzxqdmE/NKjDq0jc6m5VXvnz9lnUbthrcLyjOOX7scOP1G4Yv+ro7HnxglzXipvYJ7qm9zkPj7WZRval3yJ2em6qqtVYnZNT0R6T/C/KLhgfCgT52JsBAtkPsnLAy4iGT96bGRtHiFR7cbbFLZDgjyRgX5dEiMCisMMkE/nzRunVrFNO5cjF2FIlg7t/rELswKA0E2+EV+V3Oh9+wsTW7NkWKtTJ2RkqTKTYj4i5YCgsCFlZCDQCZABy038CylGeeeYbCACVhYWa/52DCjXqDpuNtfBuQN944YB4eC8rNKYS/MxC4O6CSsbWp73zn2xyFzs973/sepmeajU/s1nX4yFFZ+XWbNsHWPi16SmUlxQy5p7vrr77x703zrq+ttmToVtP1T3ziEz7kA6X/5Zh5A/g8/MheVmzVE+R/9dIrPIPFDxyjIfHf//3fZ/K8JTwphupM8EM4T87YMY0j8tAvp/3Sy697ormHJCkgcPXqlWin8MqIXT3RHFO/lrt3oFeQW6R7YIH1gQMHnGcsQEGp6FMIIROEsZyAhlJrEttEwRFNwxAEcrYQAEpdfL62kkQIQsNHgoInOJuCrRgZcV+eLFlqRlDYv/LevTDxA7GQpF3cmqoTJ1xw+9Ydr+g5ATkmRa/YtzoAsv4YYv2VMIAG+rChtmFoYOT82Qv8c19/j7DRKbyLljSQqU8IWr+Z56RF+Sb0jtr1x+yJFJsf0kmfQ5W2aM4QSNBIoGxIQCCqMerEqZP0c/eePQhUo1+BSsSZAnPUeI4DviKa4CqXLLnTctu3uB0MMdn+Jb4FLTFrnfuwPQBmutzU1ixStc8xTV10wEMShD/gocV5Z6IL7ungeGuqs0rBgQPgmKkM0fsckjQcnhovRFVWVSGfBeAAc8BhiNlwXHVmsSEzZCEs9p2ew3lS0HsxRiH+BAEV4MevoBr/pDDIpxjQIHceA6qq8JC8XHAAUGFooBc5LlaPM1gNTiwMeahCA1HB0HJzqTQdi4TjG/IjT0BT2PWuq1cLyEqSrxtNJCQhryKvCNG9rzwEWTFUuwgLkqSAA74KzpZvTU1VDErqgiQMhVXYAgIOKwlhoFDtE/SqQmGS8pVXqsN5F/TcKwCmP33Ouj1UC8i44ROQIeMJFnkLHzQqiZPqpXVeBcxTQ5oVHPX6VTgiiV0K+DBixb+BD5/U9+6o8n1BYbFR2rFRHSM73KVrYBJSx80Y9llomsPpOJnSaf3dndqqBx/YzbPwd6o5ePANxKj7wYcemp6dP3b8RFPzHXsFq7/17r26ihpju7K5YizD8C5tITxse2c6lo05DcAJ6LUfdI4Ix8eG7M8FaXoJGb8mWydcC7uekTdG2EECMhhtnfHgwEhj021dcFzW5uGUbq7LhjEsioYFw5gJfSyVYrjGBsv0GZpb7t24eUvadWTMPlAhsuzoaNcGa4T+5R/94cTYUGfHfWMFlFlKzVJ4zgjLCEMDxo903O9EtUkcJLdx3XrpE6s/u3q7du3eOTI+RlQ0gGHwDvDEbjtxBf+1ZCmrAMdz0Y/+ijPOzLPUNlBxmTIWi0VopDEQpg2wxX5S4AeZ9PmLF2RTRHIK0MhA12Rw6+J4X3XcD7t22reRcpjvTnsc5e30A9vIbty6RQfgbvu9zg5HVfbt37+foiBK219RVm545/KFC/x4bnbImmMd7QFERXGaJkHA2VgE3UUdD/vYY4/RKuEyDnhImaAKZ9/ClnXFFgWSbEysTBDeTk6E46LRyONQIRIXn2gnLHvQrly/fpWxeYjDpGk7msbG5kf3PqY8hYStqlUnVoBe9F/SUchnt9BT164HwoESqgMBPrBCppv4rc+jcyECjLJt85E3T1ZWGzcvg61WvL0jDPhob/bte0yzKgJGuJQ/gJAH8/qVK3ge7QcacJDewwfFaKCGjcnRZM2biw7IaxCiOUL8pxoFH2YCcNkQ04oI6L1duWIN2dEl1Z07e+aZZ97jodYLRTAHB42o/t3f/V3TfvAHFZQBDu51koGSZtMRUi891E67wRC1QBW9GBtFAz2z+TlrmTDIkFTQmWTWhOEdn3D6HJmqtW3W9f7+7/8PD+4ygF58o+kW/qxZHexd/9Lk5g3rN6HUEBzGfu+734eJiuzcxb4nTFVJNi8DShXyNkEb58Po0KOP7CU4mQUNz8//4R88ed97ntEHPnvxyo7du20vZo2yhSuml+RkZVy6eH7b9p0Z2QWvHjh65srNwbHpscm5yan53MKy2AF4dwQAzP/mFKBkAgzrhrnrN29+8z6+5TMdtutAXVv6Z6bN6AaMD3XdvHTq2qWTsxND+VlS+LNzUxNGJhxXl2pOztR4fh6HGfZ/5ELC8ttwzIAxSY4tV4pM7h9uLnXhCSCFWfOps6GBAYASyvYszE+HSQAL86J/E5+kqEW0ngdtcekMSfnb6T88lfhPds6emcNtah8PXny7DyAjGI5dCeVAdiXnHoR+AwTMflFMp0IMA7L2i3SYhk8cO+ziJP3nKx0A+xoZ3uh37tdMxlxa7vicSW35q9Zv3bx929T8TG19zdE3jyxbsmhqfNSMYxsnyDc//OAeCimxMjwyakWQJIdwf8OmjQNDvcYXqJw18TLxVNoKHFZjzEF5yz9M0jYgYayOS4H6/ZZWXKWuOGZ2HP3UttEfWsq6uSao8l+xuTX6IZrR5aZmdN7IIU/ieHXWSvPVFVdKHDv2Fr/K3ARAJrLGjeH9CZryIItIOGd9BvqvRm0ZD4ZprMzmVHgCYbXEKIRTZQsmyOEeD8CmXEJezuH59z93/Phx/alFi8LJxLeaWrgysQe/ykAMn/7sZz+l/ADu2Llt9+4HhOnVFVVM7+DhI9bYbNu668iJ41OTs7/10Y9owtiIrwwIXb1yWSJ/UX19d9f9Dzz3jMbdvDs9IgRyIHI0OOk8afxRl7k31p/wXQl7+x2AiPlUBXpYygkfOHAAczgK9IrseQ+s48FgbpSA6nI4gmYigCcb1//HCmyncsk6zFQtAo4NDPYTzejQuEYB99ArKPHEvYSRcVFOzEPOB3zOExC87e3uJk1VQ4nnxGoPtQXeylMozLlBBk/4MTj/8Mc/prpGgYT+XqHFW5QyKUKPzaUgTQ8LqtiFe3preIJGCEgJvfLqS/w5eRKf4RE++eWXf02gaO/u6L57p83hyrrHjvGghXsffWTt+jVoxxYMFNUaBJCjVLUopafPIulav9SD7LQXakEFT6vVoMA+5A/VCxlIWuSgjOE8hCiA+ahWgFkH9S4vxwqajGN0ySfw1HYD4sZzauxeSe6CuN2rN3oqD4EyPCVGcoMV6MLM4GmTDal0wJCA7Sil59irCvwhQXu7wQ2rcV55oEK3OWzWHJLZsCI1tLusG2UdgyPDAkKvQFaFiYKUU4oCfKlb+Eh/qMiN+UVOglcRVGGFBFj5pTwwxwGCRj4hMhzUkYimzbcgUzaW5ZUbCCsGoHv4wwccEGAranKvCjGhIFBMCA3EqsU9ipT33Ft6AixQwEIG/iglGsjghld+MYRkQdD24YnCKlWdh278JpROUzMXOK5IS2ILYVGyP1WqmHojwmr3FjTeA8LE6jdiRVsYiHsFfIhYr9DlT0yAmz9dcAOEtiAK5tCI6gFPn0QccAYD2RFWA6XqqBLNd27zG75FiyfQUN69WnyiJICoJmUP1agDUKFccnZsiXhfAi8vt4gzbGm9BwlV0gDNjGStOqRt8h1vk7ZgecHjjz/qTEX0iAfNkRDwSedDfdWaNVbHmyHX3WvX5IYZ81anw/gyPcwv1J3KhwTpjk1O6eXbs3zFilXLlq6Q4IebZkBzqIOOU+AZDIWDxA8yeDrawwxQwh3QeESaA2v1/eR0SAnoAyggpLA8g5rSElJZbCPipaEngOkCyjDClhw2aRpfRlaexX+yQmZemD3JBkwTzEzHirxPffIT05OjTY03xLe6OuzT56ow0qp2tBPYzeuN4iQ3BGzBKeXD0Jr6Ojk5DR7jodxyBpoKtHMN5s+RMd3AfdpPGGIss3CdZUYkdE5mlE16SyouckU1/iupFsynr9Aw0sozErySOKCkHBF158IUw2q+gx16ZV8jcfnVK5eefOopK9drGurzcgv7HH84m2pxmGK8pGKS3E4/sKs9o6def/ejvwtGnpWFBKQxWm3Jvn37gIpBp2SSXBevhyiE1NaFhBkd9W3QkJDSy4dPtCLajExy8Uq7Qha6UqrGRmYT205b99AEhwS/kexXDYKOgUrpErfAp3V2dCGcJ6U2KgITVppqmo0/2I4QOLvX8JSUiqSHPVEXs8F/muArGqW8b4GCG3JQNzQ8YsdFqoherReRaVMT/xV2MKDbFsCgGmn+tHTbq+GBAasCVEcuANIN3v/zn/886ShGSbgSqkt8alH1rl0PJswxSBe6++Yf66rBH+3wZHekrxOrsGDFeqbm242GMXUI1Y6NysDZTCpWAzKAIKuI9NXFTu3fABlqj6sU0i+T0e/1CQwBVwx1uASgG1twegsT0RIpMC4wjcNGngBLXQGE87e//e1/8S/+IC87nRqaTIwD1pCo3TY40p/79z1JskuXr3jp169w4uALOC0cDNLXFQw77oUcc3A0SbdwcKiftmxcvwGqGndEfeev/5oWPb1/X3tHV3f/UIWVnfMp6zauswtZWurc2PCQbIm9xZqa267dbLEv/WuHjhWXVRty0AFYSC9Yt/UBHYD59Byj4pj/f98BoH7o8vvuzbt/vvskuUk3scrQRMq8AwAG87MZe1bXvebrl081Xj2fnTIdYveZsRwb/EtSm604MWb/Tx0YMbrkt+ifJ7ZFR0qqeWhz2dIeGbFVCC2ZlSczkyNZCxOZqcG/hw5AGPCfNoCgy2FVSnZWan5elvFVaiaZT0ZyPbj69tzNcIaXHUKDUXg4HVYThaophiFHoiZcywzSzYk0WJDsOpd4vHc2D523MUWYOaAboNMJihCKApSWWGwXzg3QMUgm5MgYWdyclZGTNzQqg2Flc77RgNHJhZrahmXrN2zcscNJMRTYgRubN65vab6t+9DV3r5yxQrN1aHDhxOdHTUvmb45idwRezY4Yrk2UNfjuXb1BmF5hUB+3jmjui18F1aZZUqxU2bClrtkocUVVXOJCORzeBuVMmcqqoWjtC7WKm7Dck/kj9m3T3CPYd5ra8cQjQtoUkiM3bwOMZ98rvEQvPWW5bIpjgKo2CJCIHpjv4DDwbx5USMn4N6oI/Xm/cQWYg5G6ubNuFl7VpbxAVlktr927Rr9NLytrAgW9+qrr0crY85IlraDCaHrf7HNNStXmXBrWM3c0ZY7906eO7N0yQoLRvc+to/5MH8dLcK6davx3/1v/7/Cgtz3PrWvoqxYh+wv/uIvtGvbtm33NvG3IWXz/e9/H4ZG52T39dLNUDehnCXiPz5AxkOODsn6P0riG66CYLSEOSu5dNkqmDtKhb9l1L7ithkLzcEQbQ7Hgpxg7ykhRdXVHjbYATAKyL1i+hIYzuEzcIxVEQh4qGpBk8IqogOe8PPadDckooulWMRW60DuOiTWClo0uGrVauGQzykA5fdW1b5yg+GOBzEvCEqDA8OQF0jEnWFUIUwPCx7Kyj74wQ/iEifsQ1RjLGid9ztuNd4We4RMX16OiVK2IpyZC9O+GRl8bESulq3btrthbgIPR/Y1J3s60/bo3/CWvsWABBU4pgpYUSG7uuGDAWUWSzoJAiGeQ6ZG3BVdt7eoVgBKbmgyJY8NHFDQgANFhVVwv4lXBxxk9UJeYQR6omrKr2rtoE+AgqSvyB1bSBlLDYL5SkmNnT8psAJd3YNFhdnKawXICzQfgi89RaD2e3X5nDtwwRMaRrYRLu/vXmGXJjVIbWqSuNVIYfzpoerYjuYDXQgEAWkCGHTB2dskZhuBIciqA1ZhH3qCHJCBcpEaxHQAACc+ZbxSwCf6VwZt8MrFdahCFOEXq6EXG2slwVcA1R5663NV0H+fK4+NaIeVyytgSdMnpMZOaTUcAMGld1nqrQAAM8GMqLpBLK5CD9PAV5cLTxSGiUYQydDwJzg0wZ/xCTgu+EfDxD11EQJU4RB80ciIJ5iALm+VxEC1gOMe39RrDxvVQcNXgPtcAaT5E/P9CQGidyP3ITBL/R/+8V7VDw44HmjGuKUlRJa4GfGRF6fhaMYIWwqom6PmgBwcMz42rPqnnthn3mpNbaXwUbf1lVdeAVTMbXmB8BpPBQqiN8O14MPPK+sRI3ISFZKFmzZuthEFrbKRyLJlKxpvNtU3mA8NubeXSCftVMgeJbpVSqfRIMS503yX0mCTs8YGBoc2b93Gj8AQPXy6+ElJrFQXPSQYn3P9a9et5noECmRj6oJ5tMV4WW7RYdhDxpIzIwC2aLx+7VKpFWPpKeFQ8YVZOXUnJGghVCfhzros7KOLxtKjH8T982fOYwhG3+toX7FqeQKtmDfREBMJVmCjtLeYz8AXOPSMSAg1eL3qaicLMm8460XoBnAlOEnLyS9KFyHe4oNvfQgO8vGTFZG0DgB90rOnUsYrdITsfCzIswaA/71+7Yo56cyzZ8C2p7kFpcVTk3NaZdE2WtRivKW+tk6WJdcRgMXFrS2tNEOCB27+hKQqaIx9pnEYAgzGJFEI+BZjH34kzIfBH3xQMlogDCEAH8xnAwp7ghz8dvyWMoToCW3GCiqAS6IPjTf/zulzx96q+umn38uJmfLuORVSIxZhJtwgTxlUraEClkdwE8xpUs7mtBsSxyKW7Ndbeo+BMPHrITiQF1yZNNHZ0xttjF1ZlgAlb9GC7ToAZIFqCAs13MvFUipVM0gVwZzThJuMGi6plOKFmS3hIJ5hcakBLk2m4S9jkgovXtKgl6s8rVCpVTcgFxeFXL4Gxikwpr//5Cc//sUvfmEcw4cIQbU20uRjVEu2YSn1wwSX54mR4n1gPp5QJN0AFQFI2xWmJIyCgIgDhsR97NgxQgFWq+8XvaIZMA2XqwIbdTJpL0V6+OE9JqT09/eVmqEuS6EzrwkZD/uQNtQvtsGFqPff/Jt/wwlSVAkAC9TcWG0gewmBqK5TyZxO0/D2799voB1XTQg0lGF/h+effc4BI6lpGfa0bLl33zQGbycnrJPLGh6ynqySc/jXX/vTf/TZLzbdvf/3L76cVVASdgYtKptPy48dAFOALIVD2n+rAxCz4Bjuwsx485v37z5MbszCzzCKra2UK88yOz9LhD06NdJ38ugbna2N4wMdhTlpRZkpM+OD9vckShspSOaHgdOU5GQAwwHy2KmZXF9uXr7dwMzbt0MPhhP3zMRoZorT7MN0zwzjBqbwzNgtxGb8GY7nMhdI3eJ/rMvLDjsTKODooqQVEbiHTNusqT2OlkhNt91wph1/MsKcUTgALqAPZwvagZRHS9a6gMCDhZUNaanWVHgY0wSm+rgkqn1VVGgXBJv1B1djtzkaLngNVaRlZWblzy5kjYzPTUyb8Gt/1/yFrJwtex9dvnYt3bPHQOgxjI9aCVZXV0PinEaL+T9h7tkK0OiVof3ewf4i3YCuXvjb1YTBigvNMDE9yeHcY6PDso2cD/dVWVVhvaND0kjTJXRTkmr5hKHRTwbFJyQ6vAhPeA89HPMK+RPDXwo8+eRTFJ5BeYJXrMAUOyZPsvRZlkH2nSO1wYOHGmPEgsPfCl7dcHe+1djzAyBwQbj0yMOPqpcqMm1PZKmZGDOh2xwLC4KPiEGB8HnHPSfUerty5SqVah7/9m//9vz5iwByKZ6L/p3Ngnt05OTJE+bMhK4Xo9uwwTi2ExUe3f9EdVVN0+3mrdt3IlwIq3UAHCZ2j/nh9/9jTVXp1k0b//iP/xhFD+3ZIxlhXIU8uaPEG+Sh68knnv7Zz35mChCnZy0pWgzk6vCzaFVDBs58JsJ5BpKS/PLLtOVN7ra28xWWKiEHYvSUxyBTHgZkUbIneOhbC5DALCkMa3twwBN/6h0JRNSLXs/VBQ5ewd9Xrv2PPx7jAa2nVpugMQqlnBXcDCUBZYhbKyCKVd3iZUsA8bl2h2ulwzoAyiOKpOxspjoC0jAqQ1vYDj1kOmoBHFsw2bQ692qvq6tVWEm88qHFnHOTNpldZFyUq8fn9Mx0ngpKLBZ8KVdzXeyQZbmFeN3s6JY7be2dXXQJhnjI5QJLUZEPstrVizQAvKV9tNQhQUjDXgUAkW3R9NBAKGkFEMUM8RaZCtMx3AMN90D2ykPNXwjAkjwgoRAWKfilwEZcfAsgbUSsthtKbA2NEaB7us0ufO6hsWgtIL3CT3W9A6QWMppFjQVhxZJwGxkLM93tHgMZdNkuAraqcwWPG3buCmMjPkQglKQYrGCEDD7EGokJq4X+LEtdogLlaaNv0YUoFk0QbiLOavGJknQjqh84cPMWWALCCp9o41TK5KEHIB2jEniFUpCh50/4KIPtyvgcCV75E3DF/IlMr/gIDPFnjBZUh5ZIEXmpDj9hAibOwMErn0PJb7yJhWGFRoXBB01FyrtRBqXK+ASGqCMFZaDkFz/RDriS6vXJu/YCKxf0fBhx9op1oNe3vgLWK2VUDaa3GGInGGTGWhAYmcCi6RsqwGeYChCKRt+Hqc/uKBV/28B+YjzM/xGhzc2n9nTrv6ZIeGvx+XFDYHhB/DbNGxjsGR3ud55iYX7u1s2biksK3jx0eNOGdaJIBsM/hp7r9BRFD9vlzs5LCJngSK5hy4rkmG62RT90D8jannGifEyXCj3y5tGq6srn3/e0FZMqRbMCKMRTlwOoFcNN6nKrqVnSkbrrotoCHFXK0y1qjWZqza/BBGsIGGdtoRO5r9Xbvm3LsuXLlyxbrpUcDCeJLNjWCu9s2ugQRIfLSNM5jM60b5Nyb964Rip45xdFLBPr7WYEt4G+QULFSrUcP3KU9tBOB9Marje7yXPTNK1GQqkGQxkLTiDMT8IHCQghG79mbykMFOXQgaFDVoDxgCSq0ng8ELn6M2qJSYikS3I0gJYHPcjOSmivBsSkXrGpFs69kQpV2DtCq24g6ObtWzoAlgyZSGAfM1Wji1zklkwNsEJDyEY5DAHJoBBlbDDUhe3gUH37XXBqlAk5LBBKJ0++ZcUi3mpBDXZjjrcIjBoJeLRJWo521YGmCiXBIRqXMsgkOPLiF44dO6IwIFihFiQT8XPPvg+BnEg0ZsLicDUV8VvModkQUK/A1NpZX9EBzIF5THThErCqxhb3CkTbEOUZ8DR/A4GRmQwDWD2vGD3DDVHaFYYH27Z7YS0Uw1OjeimhHe4MiHMTFEB1qoAbchSGMD00YQzCK1cuf/TRvb7q7um0yIx/x08MkdTgiJtvm6PFser3LpSXFcrFwhMP1Y5w6qEwhmA4+HjIy2OR1lrGi7D0HHAGUcqri7FogaT6qCvysULsQkZ+1aUKtcdGC/6e61T4yv3zzz9PLhRDSRThg0OOh/pthtBb1xDG32mcWiw6xGoGK4x45dXXCcLENhaBHPuAIVwHwO7g+INRULK6CM7aYBlTR8zAyqpNgcveRx6R/hToW0PWMzCYnZe/fdcuO4UN9PdlpM2bmqJG87m/+Z3v/vHX/uyHP/3FiTOXx6wJzi7MLiyNHYDU7BIjAP+PHQASxEO/v3nzX/wZC0iFZ2eEQ3+F8axT6ssOoFmZKYV56fdbGm9cPHm36XLW/Gh+mjT1UPr8VH5Oti2lnAuGjQxf5EyXZDf0AcjFCcGW6douHUz9NDVOjo/l2pxzNmRlpMBdYYOglFk9CNG/XIjsvHtxj24AJsvlT4+PyhabAKQZV4tgnmc2x8PugSrSjGhKAp7JJfdlYIHJ+zY0mhCyvU86P5PGrSmie0DztQtAsU2nAodlA5kS/iKfdFGDbo9/dDOsB8vOCR2AcYufrQ5IyzY/aGBqJqW44rkXPsLlkqylL/Y8XLFsGcu933bvwIHXZCGorrNH1KUAHe53ykpung4A66CltGvrlk24bfPB9o5W81wEXkaVnYqCag3l7cY7sUUQxpkHomQyhD7JHYGw64EdNF8VnKon1NuIHNNgnp/+9KfxkzIbwfBW7oPPsXiRaW/etJUdsT4DLjpDfDvdZnH0nI7J7dF/mRe+l3pDgiaDqU3hwxHCt6jaQzbCrBRTHUK4ceh9+MMf1jiyKVapFnEFxjo2iyl977s/1Moa+9WpZg6Kbdmyaf36tZwMP7B4cUjf2ITan6ISM682bty8YcvW0ZExHLOl6nuffaat7T6Hy3y4F5Vevnj+Vz//6Z3mRqakxsNvHNS+nDhxyhEiMGfp27ZskYnQX1L+0UcfZWUyRmgkLyavVwATx6qghYbAU5CnV8C/+RwHsKWvfxhb+gd6YY510DYCwBuoCBzRFCbI1JCszh8OWGnic5zHlrDvZxJE8gzYyNPiGzz5BBVROfwpKQrRPAS8wmGIcdogCPh8Tqacp0UOhjI4K2n73oE+rZzyMORzSErUzq9OToSZFaISGBIQ16QWtB85cpggNKD6hKrQ3RKsA2vzK7EUrQD21KmT8IehRnhxbVh8Zdqwnbgs2he7EpxJvLQF1TW1dZp1U9rANx/1xV/+0uFoW7fv0D5CHkBqgJM4I3T2oUrVxcAQC4IjArQX+tMcONqRhj++onLaF2gjCia0iCywC11EYG4t20l89duxbGy/gOU3KIPySItViKbUG22NAmj8KZXqsFQxcvGnT1zB56SnC7k9IU3yUpcbD2kFKsgFe9WFkx7iOS8Q2he7y4fzv/qgqlLLIdQOPRyIxqgwVYGeG8swhVvufaIMfIieJQKORQb0qLHCQX8mJpSxzyHcoBSZoBgWRWOJjCUmb5VnPkkrOU4i6MJMyIOPdjfQ9tDnwEZCqBbIgYp3LgVcancB5UN/xqohDIF4T3D+hAZQMPcLB+KL/PTWRV6RaqxQgBw9BE3VbtDlc1j5BA4Rmkpxj4zQ5dsoet96Dj7Owwc0hSO9SMNAT7xyIYdYlYQ5bngClAK+8gpkVUOgt68Hh4mGTnqogIp8BSt885UnIhMYih+YRuq/+tLTgrmJ6RmxRXaW3QAH5+fSzAKz/pK9STUJNfVYLN7CxpFRUzvKxsaHnD4xMz1RKODMyljqmPTOe5p8k8OJgXJbmUQp7eBbXFE2Mmo7CZu4dYVgaCQMi5i/SIecG2DqlN3yOdl4HEx+XsGx40d7ui1IWmGwlcNiePSYLwNWeIQ8FwZZA8CutBCMzcYTVujiCI7zXNQCmyJT1CgXqzEYGh5UL3mg3/g3dhSVlFaHkyOX2dPXhv1RbBpE82isPbXZkcTRsiWL7QyAj7dvN/HRZMZihS/2UiWh6ckwr4kjgF57W4iWFOju67VLT99gGItRsqK8isarTtUYK2dgChBJQIwS+DBA6Oz0BALKQJ5FGdYnY/0NOmfpH8hRlor5SgcAB0SrLiSDYJUYNV22bIlvNfaq07rQe7N91SjDZwqQ1QeDoyNOxbMR4MS4M8xDPx6H9dZEhC3Nd27cvHa3uVlWqaYmeHNsV+D111/n7ukK+AhRIxvm0F20Fs8lh2wV19h0ky4ih1WIhrk2mqcAqXnObkkEdTwO1+wXZ6gHYrUTykCVXGgt1WQj5OUTJKuU23VWgzIkC6ALVkoyKrprmincImStVzQP4wnEBCaHBQJNgIwuB2yhjTmAEx/WwdbwkRz8itC1WyoqUp1JyWQNB0OKACLZ50QAJra75IcAhwZZhC5fW9tPf/rTj3/849pL/ISqrzRmaGS6qjA6pGrJzpqaas8f2L1TZEa+JA6sJLpPHDGsInv50cDJiWFV4I/0P2xpOGy1WyTiT3MhiMzNj370Iww0JM2aqBbdgwymYRGeoBGBcqhMm+AC2lNhYbqW+9q1K4CDAAEMjw0GzXGvon37wsQDMYEnvpLcKcxz/ldX0kfmobIBf/3AQXpCwnTv//Onf4bD5oNCwOfGvnzFVRvR48QhQ5ccnR3ktXunkrZnhcavfvWfMPCjH/lI2KLeRJj5+cbbd//x5z7vOCgxLQsVoIqtRX6vvPLaxs0780urDxw9eeLsResB5p18XVCiA7B2y664BiAZXf+/GwEIXuOdPgCc45/v/r77xI2AesHJwxlZ+s2iaodOzoZxgLTcnPSS/PRbV89fPn24q+V67vx4UU5KpiUAk6MpGSLnMPrma8l+Eudqwqz91JCbt0WBhYO4WBz29k0zWJqdkeortqy1xBDJ+NQFh/WqNN3SaOMA5ulnpacZU7URpBlB6ebrmB40E0beJfb9utcr5hkcOEUcxk9cZhhgsgyz6N+/AbKLKzfQbL+3cGXYA2falnBpKUkzEzKIOgB2AtU3S+YPokR3YM4Wg8gWkBoqXEjBDIF7+sioiHl2ynhLaXVaQZHBIjpcUmY69cuiB3lftmY0YFF9gyahq+P+li2b+/v6mu/ccSLM0MiohYN0WI30fOOGdci3p41w3MHYRcWWfucsX7EkdICmZ4cHxh2cAm2WZRBM9MAk6RKfibdPPrWflXE16DGX/f3vf94J7lRXwOcXSiBfuHDRbHuxKcty+iyFtMOEP8X0JhpNzwWPwSGw4qi08t9simlw2tQy+g2+10O6qnHFLtoiTjWVyFuf+xC3mTO3g/kELV0tPwIBoxR8hYjIDLqbN26DoNmBMHtEDv9mWik3aPmcrkIQ3Oyc9swWkzaEeOLp9+jpWdjmLL/DR49V19StWb/OlGtzpFShsCZzYXb8u3/zHRvaYbtG0GoZ/mp0eJhf/Wf//X8nANH5Z57wf/XVV3XMxGVGI7GRFwJBOhwfkICZOGP+Ek7CTXlBA1BLlq4UH9j4GP9NVSIIU7MwXwG0kwVHRIh8l72UQ9o+LZsP0RYzf4ziNukdPgDOq3MjeEU38JbPEWNoON3gKoqwxYfQEwNwaKTm+sM//EPtAm3RyWm1iLDDeE4I6YCl4KQ8NmYLmnldSsKSVgNT/ACUA+w5rnv32x566EHFNP3mQcHTSCR/CI3KqnLBCY+amZmBNL6RVxgdGn3koYchb0PgrVu34IY1rwj0VnhgWq3AA2yZiAMH3ugbGArnmySpZfykAwjEov379xM0K4htGSWkpWDqUWjHK6qqlKH8cICYz6kfcjwkQb+ko6V2g5YXXnhBm+stJrgxxET3mLm3+OYXcG+jTkJAy+WJvgoOqyKKNTbf7hXTHilABIhCneyqJ6blcoSQh4y2FWQiA9yTaDg4DCv4W8orJx/4k0wDQwKmQYm9aCnUSCsYmvtEEMWGA5SBmNCI2qg3Iv9uAx1xgxLqcCknOyxEJCZKyMwhDCUXfCLmREYtAVSFMlSXjnmLHAS68RXMKQOc8RM0xdgmJKkWTYO5VyD4BRmxftXoeagpicuBQiNyFHNRGPBBgIPmEkDiVgDaymAjNNQLuAKeQ8MnykAAvcrAh0Ep6a0amUOEH3EGXC2qjjYCiALYGC0FKMV868LV+DaCVS8++FBdCqsODtBTIybgXll5WLjsT0CwgnRQjYSo8LQa1VRLIKe8MqmffWYdXoDiD4tpZuYWxOW25pT+YebEb3j5vqGi+XAWt1xRbX21Ka/Wftk/rrK8VBOVkZZWVlJg0TVDBZkp6pc7ioIxmLGakZ1n/gDjNC2i5W44e0i/wpCCFfVWCOzY+QC3KJWFHRgakj0TI+fPB6X3/NSpM4iHOkqM8SEYX8gASgIsJqfD3dLahtcKHDx4rCasBCvHSlwTJrqQKieEbE4Ns0LjKrFnuBwl9DQ9w6EnGzZu5uv9gTWW2zpyMt9k+cJCWx69/MqvaZLAkX/n5piEqEvaEu/s2UF94aw6RztBgBIYAXD+LphYqhZZu6eeesonPuREuGbzA2FFfohQIzJJCzTAcUaqnnmYOOutJ1y8BoCKmO9Le2iDiXUOdIgqxeCjwsmYotfaZfyxp3ggJC3o3+3GJvAPvvG6QYa6usVVdbXlZVWbd2wb6B8ZGBqMnoWL1Gu1NNDOG7o9yFy+POzRSWkibn6hLT3vIfgu3OCv1aiF0DV6bO+j9vjHW/M+oY1qtD/++OMgKOkJtWYAeEvESBCAsmdIIlwfFI2W9GGdD6kvxUUU83ADAqW/fu0G3vqWikbNBtMrvy56TN/4fQXUq8GzJSJQbvypagaggactSkJSuxLhkJ0qdAJN7z938YJZpBKpD+5+CLchibeopvBaOHaBalWLsLWCpitQJ9yIdKGR84UzTfCL7Wrhs9TL9RvtXVwfNhTXcF6+fCk8XL3CrtVCBFpBjmFnd3ON0mNKgBMZbGu9feToYXiijjKDxnphq3ahPHOQg0QL3CzkteP1pk1byErzD0/I8wXswlvWhwOcO93TbdBEaez9mgMKc0zDbZTipJaSRNTFWCAcLQWBnhjWmxgZRrLxJo2WBcdEc7u5hZYaOTG/4n/5X7+mUvZLh6kKYqSQ7R0h5Qg+ZLDFsmnl7dCFh4Ja+FiEp8tkqum1y1dqa6ogb+ZxaWXFsPGBpUs67t+z/Vh5STGEm5tbPvGPPnO7tavxbrtBAEsBR8fmqhqWjkykmAKUVVA5abfh9JAYCxto/lfPAUgWAcONBr7768Ynfl2/+VwHwMFgJsBI4c9bwRtmwnjvZyZ9frooO6Wv49b54wfuN13MS58pzLIKICzh4rVAk693L6jFUjgxBQ9nZ4wAhAO9HMTBqTAEIb4ujjIaa9F/aE5VIg1vEYH8u2V99gVKMaE/09E8DrcoK8yLGTx64jwXLsu0H47FQiM5Y6rOSzMT3YCAKKLC0cSmtoU56HHSv1W+XqWH8YNAGw8qNeCJVsmpfKq26Nb6BH6Ax5NBEESaHKRrqi8zEwYX1JqltuHh8a7hiamC8uzySkurNm3ZLPnSeKu5peWupV2qtsBfXTbaX7yoHl0OrtLG3+vqoR0lRaVsh4ryq3wUlWMo23dsqSiz/8mIfW91v4UmQqau9j5J1WAUIf1chFG2Faf//mQC9pJiXEY6/SlRyvDN17J+iabxSBbsMlUuV/mjR49RYDbIBFgZHQOK2psTz0jdB7/d1wdDjOKF4AYawwSf1XMgdIP2shFSE83QRj4zBhx8iPw6IAqwMhYHvgn3rNWCGbw9e/acNfR6c2oxSYM9asWSqPQ6B6g6QxlBX8PcDw3pmPBo3fr19nIyp8W+/qJM/UaTgobHxuXRzH1Wi+MgqqsqMqQsZ6bePHhIdobDMV+Os6JUn/jYx3RRTMrdkWzZef7sOYu7PvTChw8fCRv+YDhiv/a1r7Fu1HFZolWVfuMb3xBO6T6hmgtFsg2stET0hwvCQKrFsxIuYjkfiS/3TJ6AjACw8futHYDjHlbzS9yOex9yjFiHt2ThBnzui4zCgdxp4TBXXhRbjKA+8cQTuMfJf/nLX9YNELSpSE8gceDD1XVaT/sZtBlZbW1tA1+PCA6ecIyCDlzd/cCDatQA4ad9PGFFxO55WrLjSKk6F4Tk1rYWyHzqU59yIhs8YbJymdUrK0jQdD6y0xmLMbr5e1DisTTctjg/fTpM/XLiQRBNMoGbrKMXhRg10F6ARrvxMEhkdpaHNwJAMweTeA7TpMM063F9M0J8hb28Mcw9V57qJjsO5XseeQImztMQnFQv+IpRMJ8r40+sIF+Q/YlvalFS7X7ZSPyKCEDAFggDAiD+uIEbESiG1W48QTI9oeT0NrTa6WmmfXI1aoSJujwXwJCjujDKskn0hk5ORQUE1C4abGy8wcljAsRUwaY8pw++dSlJGTCfAvBd4YD1ZLmF5xBTAM4U2y8asUUtIEMG4YDEGCBSgXyQCRo0ZfzCXEmUgume6MFx760LcPhgDm6Ag2pPQHADYTAB9AliXZCJV/xTLXQMA+kPVgAbTCAEvWGQAZJqUbVLFX6pB2jK4CcW0VV1qZcnwToOBJJIpgPwxCjPAVHeK8Bhq4CvlHmXLmCBgiFkSApAThUyPvEnQnyiCfG5Yp7gMNxiRbRUeRcgnigDc/ikfu7ZDWNhpteMs6pKS8NAlaS4mKxQmm3B1JQw7n/tRqOZIeYaspPOnrBjo+W/C4ZTF+YcKVlSVGShkrSTBgau8CA2XkyY2GSf/7v3DII7KEpX1aYSgn7pAN0Je5hz6Js2b0U27mNEwpRsJwXa7hDeaDhw4CDW7Nu3j5PSNrgYIYORWY9ioBAzcyH7AjG0vXHgoBNgrP5VXu+Ts5NGlUggDBeYlFK+3D2ma0eztTw+zMmzAwNkbAK8dfNG+Gv0lKmtrmFZELCFOdnDU87JcwPyv/VbvzU9FdK05MSZmhQUFctaSYeVNt6+RRvI0u7gVFlPhqvVmrJDLoz81EWrGCHbEwT7k5jRhZAzZ8+qyAENRjOdwU66G/ROkr1ZotFqYYwaI1wx+gcaikiU1tGhEkPpzoRbCNMNHcMkpNMluXT5cltbh91GZJq/9E//SUF+if2J6YcR/EceecQubyIBazQtmh4YMEFwHIToFDCcusABu3BPdYJp6SvYYiy/SWQXz59zCjdysAJ3FQCZnWAswvENJlhB4QgIZIMG1INq8pgo0jxTjBid+0R1qo7Wi0DfLl60RL0q1fpGyIj1hA/CczXCDQ8ZlRFkCDcsMhJVFM1VdcwPELz1lWJvvPGGaQMaA1UQh8Clrq5e3lpdcjAeQtguIvDXmgqLfUsfuDDWQvc8p6iCeNqFIuyFibr8QkYV+EAf9JcEFshR0QM7zDwuEV2JOQnITuG2XdK4cqM8mtwVyJMTwU8J2ARnY6MDZnDB07dMAAKh1UwmsxKWWqIaUwlWMz4mEaLXvYw5KAkTCHBtPkEIpuE8ICjFfMk2ldrSB8eorvrQC0kfwl8BqUF/uoyu0HNhCjc1MtAvppdHTJg5gCfm9RGaDvmLL7544uQpyiBxCyZVFHIqbGCYQtMH0lTegn0MtDAd8saLsE4qh58xyLZi6RJbO5HRI3sfMwuouFz+qU/fPcdu8PNzf/PX337wob2Llq4YHJs9ee7KsVMXcgpLbZVUVb9seHzBCEB2YdV/qwNgyoz9TMT4gmkccOHMb96g/Tf/jG/f6QAoHZYlCOStwPXKSHiqQ3yz5hemhjparjVePNnd2ug8r8LczLnpcfGyM4WT+ZaieCwX88+JpOXPxfOWOc0JG1LNv881C5Io7dRGUcOMfmd3cKEW4zozOD3u8x/y4PqiJv8QhLnxpflhQXCYKT4PcshRpSezbTUCJAiMuUD28NQ+C/K9Fcr7hbi3TEltvg0ApT0zTAYKTNAvgYD+AspynUNiW9OkQxKPDNMBMJOJPlBIE4ECnxaYZNrE+NTA5Fy7PZByC00Z3bR5284H9xhxPHnmzOkzZwiUuG/fatq+dWNOZsa0LeWGh5qabrf39Okn7N71wNWr15kSsBfPX7BM6zOf/TSM5IP1gg3f6ESZDCzFW1xQSaVdEKZyuknchQE0Yav1M5TH/o/UO8bf1noafwaWJ+EKLH4Fn+dM+uTDtI7CB3lMhyQcgO4LikPDjzPU1UMuJTBtZsacE5N5gNIN4CiIiXXjD6tnaGJcLoup8tUx0uW49MBjsyq/gNsY6yvLiRnv9773tyzPKgoZFjbOI7Ey5n/mzKkHHtgpBBSJWiEJE13mtevCMiGQhfsQc6PnabbdpStXOzq7q+vqly9b6aAlSgV+SXGYSzY+MnrkzUMqMggfsh4Z6UMDg1JXTg+A3iW7Y0+MGUU3F8iE9XAsVF8fJHGAneIqz+MsAtQJHEXD6OKyOEasbmy6wzlIlmMOE4ahhBI/j7F4lawRLedO4SlvxGOcO31Bayu4xwGNnYpEFTCkvby61tONmJ68uEEyWr50MT+AmXyp/Un/5E/+JNYi3lVvHOHk4iATqpifa+8KQTOHqUeXRAi5ttZQhWFPtVhhSJO3btnmW1WrwpEppKmAeq28ohh8u3spGLV77uAz66ejq9y3b19hsoe9iTGBvZlhHUhEPuzBaxPe8cmbN5pOnzvn2Aq1i+4kxXFGpaSpBeSlschYqxaZf8YHHg8z8ZZFaGeDdiXZXKqIbxgODl4hn6PWTEhQesjlYhcBmXdNyr4iKci74OweacrjCXb5HA6UmVLhLYGChkaEu5SJb0GDmzJuoOchOLgBIPTopAZLeYT7JOJGEzQcmOBG1YHY7FxRjWIQoJm+gobLWw95Rs8BhAMFYyY9XWEbDG8BgZULQCTjGDT8urRECqg3YF4SWgraBT2cj4TDOYRVyciDVyoFREOjvDL0UPOEXlX79TloPkmsadYTl2L4oy4kow5LVQc41rn31q8a8SHy03NgydSNty6vIp+pK4AQgL/nqIaYulTq8hU4MHEprzpvFfOVG9x2qdefkXw8xBmXh75lILQdOZE0v8hEMsjw9wmAfkkqil69EIMPbuOqP+kb4Fyi2pmVVezEgRC9LJDxnz80XMM2gQUEWF8JCZRhEalf/exTtkWTU793v9V5XpCWXurqnSgvI7MF5/tKYGSk8wVSuWPdfSLidrGmGbomqRqRzEwVVk5mZKbu2r4NVVSZSSDsJz/7ZX19xc4HdjsP2GAhMuUVpKnog26qwKWl7Z5xhs9/4bf5KZH6oUNv0Jtnnn2PjBTLQRsJMXIxN0TR/PnPfwErSYtQDQxSNQ95YbyWCpIPwEr1ovnq1WtEwqXSCROZaLaS8pd4KoHk6HUT6+FpePp+R7uH8ntRG4ikuqKSd96wbr3mdOWy5RZ8j4yHz4mBCcmLKPl3P/wRAThPgMjldWjG+TOniZBVDI6MWjAUGvZkBwNksmr+iwj1fAjJGjN4BteQdAeJZ/2atSgiPEttKIdJ1tZHHj1+DC1Lli/zifhBpbUNNvFdKvSXkLFUzhOSoisovXE9HAnsnAActuMqaIItuDkHQAwnADJD6Pz5y9n5efV1iz/3u1+409xmDQB7UAUN0MnZ99jjJn06YtfUVYlL1hGNShmUUj74Y4ILt3FM7M5tMcuH9+w2omInUOUpGfWiWFRNfsWHeII59A8y1BE0YavMn8SeV0Rg+g3GgoPz+IMWW/4TvT9RF9kCoEpBU4XehW6AG2yBkuoUpu5UzhOfoMg5AKgmdMZACqpmVJ7jMP3UrsCNUEhZLQ70AwfneWdwKIyvqLpLu8g78/uegOxDPspyJkthCN1DYQHItELbE1sv4oie0Z/MEsmd7R1shJStkjScEyyzM+wtm8xUDtvYWdlChxfm01RtFiXOTE2y3vt4rnGFqnrda+MpPKYxdc0txgEFZ1pkmlySBwm1oFEriM9eIRm9qGPtnjMigqMhlrvhJw30ECcBxEa/GAVt5sPK9JmxXUVyb3lZmU4PralrgCEPYADduh3eR0P153/+52a2INmIn0rtl2LLSQtpuGp7JahF1TohDz/4IBp7+7pR4cSJZCDicW1nh9XPBfntraFbtWrd+pmFFAkCMzTqdO1yM8+ePnX+7JnPfv53bre0ZeaVnjh7+fjp83mFFWYUVtSazzYXRwCmgun8/40AMFJRuw5Aks2nsm93AOATFTjekL6beP+ffxccoC4llUy1D5F6plA62EOqrXXmUmYnCrLmMxYmWm9cvnDmaG9Ha17mQo7BgYUZM4eE9ZkZ2pWQxg+MNVEwzGZacOy6X0fkmjQlfSgzwnhdzg4I+dS5GR7PEoCQp5cXWVB0jua7VyYrfaHQjKe8ZDPiNI1Z6PAHgpM8WQAyvyAHNeeogAUxvNB93qCrmbteidskAEX5Hgrx3ekA5NjuMGwsGKYKABXmn4QsrWEF1eu8hMc45nPrByi8007CSgMcTTVwujA2m9Y6NDnKIWXl1DYs2rR11/LV63oHh86dv3D52vXlSxbry9bVVNgJJDc7o7uzgw4XlVU6Hj7YmohtfkHoaQiLBa1bs6q9/b6VCSIKvSCTWTBNXZJRfb1hmoTtvDDo7cgsLezNZ+kwz6MPboqLAU89duYv/ST1ZBNDNoVOqqs/rCnhhah0aUkZWughYiWzbEM3aZLdxEQ0DV6F52QUvuVAnn32WXbtIY/E6PzizFXbqF26pIXyhNUoRvld3LhoT/jFdhTjBNCIfb/+9a8tspfKYHrbt4XOvwSHKugY5Alk8+aNHIWtGO05AQ2zEH/rYx9HDjzt2wYC4x0ZDx1yIwC377TQmbr6RcY+tCze4gOf6YxPVBw88NqtppvOiK2rqb7V1Li4oW6wv4+F2tsVqloKmiSB29La+pWvfIXHQB0bJxQpf85NFdygPhVeqZR74dOuXmtk+HJeXKjqiEAgCjdsITsayzMwWOXtmIwza1au4x5Rx3v7De1pcuCjXxhimtgdvfjMUXCYVOr+/Xs8OU9lvFEBQtSV0l7zUYDAU89N/oXr40KD1ibHMHMvWKqAWMJzbCduYzt8C3/uPgoOjdp6n7ihUVCVbvCh5Jr4B2Qi08cju3/8mX9ELhamQyDb3LDpaVXhrblEGhRbnhw69OapM+c4PfZh2EHvXS1YgYc+0bQBTjFQ7U86mXhIc5XH+Rkkw9A8CNfqtWvpEiZjgldYp6RLXZiZcHhSihA0hUWtQ0PDZBG8g5Nqkhvk4KdafELx1Kgw6bhnDioCH41Y5yJWf3pL5/3pQw1NbB9xeHTUOFvoD9NMtEBDGQC5ffJSEZ30S/qKSVqYAV5VW6MwzCEATtj5IGzL265GbjxAs7ApNRWHQbhz6zYIUCLu2Di6V51X6or0ar88IXqvsvm2RHPAoUi0QrzkRvuFRrxSNVDKRCb4Fm6IUgt8kEkoMPHcDUK4DnQpACU3wLp347m3yngOFHwiUTjsFVA4wBYU9hZA6gRDVcfaPSEOV+Qq9JADTzR65XO0qMVbl4ogpjFFrxq9VRcXQf/V5SuC9rnoCy0qQik1Jjj3EPCKtvjQE4RD2ENV+wpkoGJ5ZbDLK+JQO5VjCLduNzFtNg4riQxRGWWI/IQSCL5yuUE4JqR+/SsvQJRj8kF/OHm2x35tvIytoFvutNr50mJZx9IxABs/WZGj/5NpUZtppulmjmbmZqc7DLKspMTERdaFZbRc7sRO4IJvvzIQDohkzLI7dge6e7fVOBoblneH1qOPP7Zp0wbY329vExnoWQlGsQlyJGoTNwxi7ab6yOJ88pOfRDzDNvNBAXSSLharjsjUDiApNjffidMkHn/8cV5D75y0MO769TvWJYpZKXF+USG9NzPRjvhdvT2A4Km6ZM1tpLMk2abzgR0hVVNRXWkrc7uy4KMppByrfD/lO3XyLSJBLA1YuWwp7mFjeVXl/fbOVWvXCde8dRCsaJ43UTtHF8LxVHNAe0jCWw/pt/0JPCc5tOiZgENt8U2bdL3x5kCy1MZRe8rDcNXyFSZOFBcUUg6yByFopwMngyXM+Na+goxcCpkO9XaFHtGK5Us162aymWJx/tylbQ/sXNSwzIgHRaSv9ECQJ/G5ZeumsuJigzPFpYZ94RImCahFvRTaDfJ94k8KRylBDvOvWpqrykqfevpJbZuQl5SjDWggEc45EhYMuQmf+0QaxgRNOSqgKLdUHxcGvm/lWqiBjSZJByHkiARoaHXU7sYveumuel3+pL78uK+Ux1K1qOt28y0cVp56MCpNHUHTKBV5qFL9KJ9DBs9ZEpOzTaEP8ZBYqRAm0D3aSK+qKkPHmq/3LQXm5S9evuATbaQmSu8UNO0NhsgFIkRdwagSFxON7Y1XXyNl3TMbiBnXFh/zQrQXAtyNAV8atW1r2KDQcKJitnw3j04rRY6YqUmOwGF7+PBhOoYD+lEeMm8BAuPCPQhDUoSNBGUQSz1gi+04SWR02yt+geFDzHOihC3usVmvPMQcrkSjyJQwxOfmK5cWFhgdWrRkGa7qsEHM3vyE8qtfvWQSQn1DyFrROHCYkSOwEFJWUWqcyhPIM9japKNiE1XAz5w6rRaLfII6aWYGB0wxog95jvTOyBSshHAgN9vWQK/++ld79z5iy7JzF6+n5xRdunnn4JG3yqsXzyxklNcs7h+eiSMA73YA4i5AjsEKgWwydUcHQOweOwAkQnlc797EP999Ep8zhJgFt/bJIIAOgB2GklfzgqqpyZGc9NminIyZicHmm5evXr7Q23arIm8hN02oT/j2Ops2p0aOiTH6LKwJtm3/rINyUpwSYDxwLjXd4F5QfbP5Lfg11Sac+DurDxCm2oS5RnNv7+Lv1F9N0cJsVupCUWEIRi0MSLbwl3ULTVTQW1n/pKXRbVK9/YdF/ykZ2fJ2Lm/l+yPyyJRr9xWzF5qyvtgHEPEbMXinZDimJQA3aGCZyti41ic5LTi8D3WZnj6fNpqS3dY7ZIVzrkmwlbWrN21eunytYabv/eCHmobH9j7S3HjdIMb8zOS91rtC9hWr1+uQCNTGRsetE/vFi2GbF/lgJ65QD+OvFMM2sxaaw1l/Zm423aw/5syycvNCOBh6L9qasJeDvSjCLkBWdrIOTls75dOEnND19QkXpPkTX4o7aaZ1ZVjNJNm1qaeV1QYEppPTKkIIxShc4PgVgDJJjAINJtHtsNCDB9/giGgl4+LWQIMJreZS2B0EfMv0YtTiW9v++LOyMmwpMz42rXXgTtkjM/ShwXMJF584tN4+N+MTkw/tfdS0bzVyC/Zt4xlMYuQ2799rd1w9fdQpNn3MZJKqmob8giJ7yfKdymt2xQXHjhw++dYJbfGz732P4wJww3yZyvIy7sgBkTLQx9869Ttf/CKAOkW8hA4SVAXuH/jAB+gGqxfO8gCchnse21Jv7oUReeI5uZuX6Bdv8dA9u8YEnmR6ZiqkQu7c44pZPeZglOdcpVgHzwkaP91jLHbRYcODPZ1dhw8fMoSOCUBpYb/+9a9jPoYrQKwYpbBGX6X6UZbTSFLzxg59I0bPOSKvMNnngjQQsJ2nkmmhNhyjzwEhOwoALI/nK/hARoAh7/nggzt53TVrV/F1q1cE7z0xbTOMWxZV0QpNkDUwZ8+ev3jxsm1/4KBjDgdTsJR0ghuKuEcwuVBVQMBXcBAMoD2G/sHi9J2mkwAx2U01PklwmBIeeItvYgOf+5AsmCexWhmLMzjJW8bGNxo7+EjwEI2K+RYT1L5y5QotgueEAj1wvIp1BV3KzFQFXvmW3LGFn8AfhSN8hZkYCH5h7hUpR7qUoZQCabt4aSCYQPzQJFIi0FnS+LrBDeONZjGRMhWSO2EpRKNGAF2gRcxpFNIQ4sIx5pDQkirrp3bKCYJfaNMEH4oE/KIFWCXxAck4H28iRYji+igqbL0FGXMibxVDvieJDwlri/FHYReY3v4Gz8NsYc89RL5iiE20K9vnsTqM4mFckFHSt3iC9ggTekqqTu0Y61LSQ8UUUBJFMEcyNSMFlHqrFl6Ci8ANVKsRBNh6Cw1E+QRiGKiwPyNPmBVBGGVCr7ceqsIvyHTeImBfQUwxwH1FlyADMo65wTFPcADCIKT+6y9+MHmdrkNLQpyyUWszEXlJvaCwAimTHliTEQJBHJUbcBdyW46CNBCTmSqtbtQe0vTMGlDZa0mIFatXbdm81bAvwdiKgfdxcpCGxWJik0zMItM5Unj5ymVYpu2CjPE+9IwMBb+AI1TBDCi04YU8opVh0OOGmK6hA1xzMUKCUYUCnD4T0DxIOfMjL774CxTu2L4LBJ14rg2GvL/pcjShoLiIa3BaWXllRXtXh2DRJ0qmh2RfinUWapdux7Vn3vesRIV9S6CECrwyb1XXQi6NGV+9ehk3OTU9LfOJHBJu5/L7nV2QJFHh46FDhxgJVMVqiVpXYjogmKkV8cT0Iokx8/59kpEdzJKbgRVpjU1O2EJfoGlTArWbkGfrjJ1bt/mEJtFLtFNH24aAY76lWkzmoUAOrqI0cnju77Y02/Wou7vfbAOzkKfmZ9eu2ejYZppBqxRgCK+89LLhdecAaIDtSI2NVFMBhgQNAsJhDKFS7n3iFRmRlYD+2qWLCKfoRKBSUWOIm6uqNDm4hzlkRHAKuG9ruyu65XkpGPMGhCJqmBWwLyg3JCJiLRpQVajUxWVT6Ki+kME3v3gr/4d2tqSk8VOqr3aN0OYtm4gSu3hVOGh6AdcNoJxKesghQkbjTQqmdlmNZyJh9INEAyvkk4Ksj891INElw20+m0YOE8xXomnaSMjr9mARJGGoxQUEZBck331+7dLlgwcPmiA+lAykCr/Wrw/7llI/xYxcaYTIRTSvDRU4mtDlVwHqYQRfX0V8rDCw0c6t7cMBNKrRc9giFih8JhrUYb4/UY0hbAduPqQbEMZb/EQXCFiHjXjCTLwiWQKNfOA44INj5gt1tLXic0V1yFpduXKNvNasXU/3/v2//4bpoWMTkwobkfMhfjYsaQhxW76FQ9McDXxwXs+JZFevWelPO4ZhHQJhkmMNz6WLWzasR2xRadmtlrtrN2y02MCioreOv2l+okGYa9eu9w6MtHb0nbx4bVyeMSPfGbulVQ29g1OrN+3IKaqeNnfGDHWru0Tcv7EG4P9xChBC4oWxbuKvIOztDoOpL6b1GNEwJBALmJdv4G1+JnXO1JHU+enx61cvXj1zLHWwtTBjxvad8wvTC/NTmel26NMAzzuGb04YNRcOB7CCVwfAOIAuwUzInmdjeDJl0jCAIfgZfYA5K2zDSoDggEThMXEviEhbmLGZXFj/Jqkuh+WVnoRRDst0RQBhMmq6af8EHVy0Tc0y88yK5OgIVBzPcGI3QHo6PEkJD031d7nRy+FloOWyFIET1t7BAf7WuyE8dKbsu5Ah1ZOplnFhUF7ZnY7eUVsgSN2VlK9av2Xlhs0WenX19h08eGDt6lXDoVM32HTjqtVc9pXSn7Cnzd3mVpZlL0VZJKuYhKGUk2OUvOAFuTpxFZOx0dydO2011fVyLmywte0uuixC5TQYuL3ezbGnOboEFNhMvGCn8ylAUSHI2s+RY5TxoW/r12/kFSFPq9PDyHMp8q19Upjz9yG7YFwEwVg0n5ipADeuHeX9mAa7ePnll+/cCcfTimmYG1YnjUhIoLrnbcBxLzyVwfXkH/7hH6QhGA4yQXPiCrB2AVIFI9L/TzA3faXfVhPCgMtXrn70U5/Cjd7uHvlp+7a13m0xC46F3rjRqDOzfMVKncv+gRFqUVJWWVhUlp5TUFu/KERsI0PLli4mq2OHD50++ZbWuLio0LhSVUVZV0e7EGPzhg0ySulZOVIp3/3ud+UpRGxaExE/y+IQoL1//36eBKUuTRU8Fy1eDn95QJ4Tc+APMV7FvSf0UKshOYUcZ8Aj9ua1JszHBGAJlJSlKpTROOKAnh6xeit5gV3Nd0wZOvNP/+lXPASBr7CDgur4BGIlLM20b3ESVgo44fTs+cvGjvhA7pyvA9ZzTXxgV7IAT+24YcGDoIKH0Q3o6+0HhBCtUojdHp9QM2jIWJmYKuZGTkTAAhIOnHMj91VrVkHDvjQ4c+rsucoKaworxcMy8jLa2izKw4HTJXKX8FY1xcAc2EIeTCjhGJWDAPJNz0OjacT+dAM9bQcVUkCSRV0Uj8bKqoDJBrUvg5ZfJhtWQk8tPvTcL/g+p+SCP5DpPwK5ekP4HqoaGym8V1RXSYbjE1UoQ7icM4eP7Xqa+ACgP8H3rXt1AQuIT0D2UBn1mo9geby1zCADJa7AT36DRdTV1WpMFy2uJxHD8r7lc9iUqAlbfMtjiATQIqTUGMGKdsXmBj7gq1EnSAdjZnqW3LXIChC9uqgKIO49wSt4kpHySPanWjCZEQGLouDLkgygMiCr2lcIce8iMpfysWqvIm5IjmLyLZIJBdUqdXniQ58oCb7LjTJugPXWn/gMGeKGBsju1Y6TFAlWFFIBoKCqsOcuENToFUJcyCQaZYBVu2IgA6JeheGM6ogtxLyKX0HMc/IlAp+4oTmRt4JYcLZuCxsAgAwCk6SZykCGsPDTjed+3buQk/rCg6u0N8UlRbaRCQ2PfWm625l6dm6+yoTOthp0tDt9Rm39oiUSNtLSpv2IJIxAWPRWKkOVF4ZLxEPk6iAww0Znz1959pmnEVCTrAS1C4SBLbsAmUXHjKmFRhI7bGjxyN6HbI42Pj6mBQKkr6c/5IoaGmiwLDAUo1468JzfQTxX66B0VAEOJaSi3yuqafDX6B6emlZkHrI5ys23+dMBEy1wkLHhmn4LV2KaPnkYO+TWzcDttUe+RNHoWGd7JzjkTyr1NbUgF5YUcWpaIB6TXkLmxPGj8HfCLgdtcqoybS13+b6mW412F120eKmJQJAH3+CJroJ9Emmb/nPiajMZEuDwgSdhT45Icc3LC0LPXJRgQlAPmSpTiYN9oLSpORx1PDQybI3y/butVgcSjRQX/0uKzv8kNSGmSm3sR/xSZag2UoHDumr3wxa8JutmS8w5xOepJ58xjwWr2ScV4dOPHTlqhxAd53Xr7BrB8kP/GKXKwJC6uEgWpfTbDcwxn+rDcXx0GAI4kzRaYcGuSxsgrcWleuhPUgOQ5iW56U7akpkR5sfzibCVw6bx5lng4V3D1a2tuojU2sAIGtkgtxgUKekwsB/MxD0qyoVRek+gBBkWAjFnufuW2tANaCsgMgZBK4sWLY2Jswh3EceFS+fFr/lF+XW1DVoFAHkrWXkyCqEWI88LO3kZytPf8LnNT0bGhskIaX6RQDoEDT7mEApytFUwwShPfGJASUJeiPPqq6/QMaMLelx0WF2UXNCPOdevhf6n8MVomJBI5ACqZJtUn7kBBw8e1h0wRYrn1SiYQYRj2CKcojMkSKuRgw/SMIhlEcRhQqononDwldHe4Bie6P3ScERFx+SGklA2fCBxREW0dXrdqEtGW2bXGBS2OxQTdSVhOfuNn/7k7zU5tvrFt472cDqHAg/tfQgciW/jKZDBDR0Jc8lhImYlQWtcPEQIyh3u0N7Wum/vI8Q3OTM7MjFZXlXtVeONm02N1/Y99qh19s13WlMzcg4fP3Ps7KWHH33qVktHZm5RcUVdd/+EDkBucc1MikA2eGQjAHLU6WG2yn+eAiR6FdCjkT643r35zfv48J1XAt6QthEnS8nZC9Rv8mma3XKckcMaHIaYkZli18re7q7WG+dvnXgpa3Y4M033ICUjTWttjrymNzRC2jYTeebDQESmlLnNRXUDNIMyRTQhZOKT2f86AUbaZOhDrUkfINkhFBfDsmCDAGbiy5TbbsHwUbaBgAXtz6wdRUEXsdvAh3GZBUSIlglPzadNhoM5k00IzEpySeOHEYOk3XK+gSmFlhyEfFV6Vro9Tx1QFz6ldbYDopzJMoF5YLHCcmFWYD0DhFU7qe3IzB+fSRkan+4ZHJ1Jz126ev3y9ZvySsqqamqv37whG11ZWtx57+7wUH9tVdmGDes5HHvarFuz9qWXXtGbcjZUTWW12qkEnbeGlbHQSfrMZIQpU5NW1tobt5+BLFm6mH+WweWxmbaNCnRzeF2HBvrTzsUQLEgWa0KP94vCovAcYxzGZIC0C5tBFmbxLdt2bH9o7yPo5W0kwvkKJqz9RqZgTgG+S2Op2+9XW75ihR2tlgGoCmbOiKiHxptr8pbJwBMhgnszy5955hleTl06ACxixfI1/EYY+i4stPmmWiSq2bVXkqbXrl2trqnVAVi9Zp3NcIler+vKpYs22ABEFYsWLZEe1K2TV7KTUnaWobqS2kWrUzNDTpH0zeRqqK+1tfipE2/97O9+vHRJg+h/dnLCRKCiwgIbMhrcti/Jn/277/zTL38ax3AYJqGhKSyUlUApQaALYujlqKn6ylUhrXun5TYF5kk0ARoI1oobLFfQJSuBAzr2YgbhbGVZNWbygajGatLBf+G+k7P+5E/+mFAAAcpl1YHl5s+9972xO6Fqq3Ix3wxev/SUSkBMRV4RBDjnz1/Qo13UEMJB2/sAouVVC6xMROF//I/mEASO8V3cI1/NnhIHnnL9xjVbMWdnZyCZRvGTHGn8XAGujN/gLnzoFcjtne1mcN24HmYXZ+bkmpfHI1oqqJBJByyGS7Rez7GnGCUe0ELBHBCIIQoa+OBPvxSPBEU6EJOZV0BJMS4nSZ2Qiece8r3sMbaYvtLLta8MojykVxiCtwD69SFJuVQdTDhZ+glIf38f50+UXqlCMXCwHRB04aonLkBouA/xT6V4Cw7cFMZt+ETPD4K6gslnZmJvRVidWCMroCT5mreGM/ZLdbFEn9xsvA5PhHgigIS/idNqB1NDACXS1AbxP2CCjO1e4YxfghDgyQ47G1QZuFGVREbmIkhUhbRRbIzQoryqAfEtOFjNGJUhNYSgIlanmDKeuHG5ERgoAwIclPetemEOAiagC6X+jAV8G6WpJKb59acPXV4po3a/Hsa34BOBJ8SBq1gU9QGqavEqouqVAh6qjiqiEW89ATYKCDIkyDzV6El8GCMcdPFRvlJ1JBYQmCuJObBSiwZd1YyUVebl5+IMtiNcvfFSnizgCSsXr+XCH5+nPrd1iQZeFqqmtpqGVFVVTIYca5iDaKlY3+AQP1NWVq7kxOR0XCOv+aqr5cTT2lnp1Piiulr4UW4rwyBnelB+YfHPf/Hy8mWLqJWh5BXLnAi4SvdAO8JEBTomx5tnGwSTn6NVs2zXtHa1czGO8R0ZDnPHEab7gYOUA+qExSkIvIR0UOJq+Vw0cIJUUP/EsINkamgnMsPSwy996fcEQydOnOLlhXcAsgtpgGefeY9x996BXjxi8JiOl9DGX/pnq15PYjfAqQB37tyuNbFycBA38GTv3ofFVQavBVLdXSFFoXEKwVx/H/WFnh1FdXL2PLLXbgZaiDcOHALWOCmYXA056ZIRPIkCSHtIemE6LJCFgPmC2Es5bNpjtmpwYelpw4mtmoRXWFwk5fDSr35dU1G5bPGSqKAcB6xWrQxLkXbt2hH40xiWBGEpzMwUonO5OWEgz/j59abGttb20akJU4Ae2/c4RuGtqgV5f/+Tn1qcysL4nM/99hdNoYYeOMpQFOYNGhJ4TDhjMi2HHqGIrqYmRk6fOol1MkyoQBGsJOFISmLeVBlqKkkACMK1fwbBLYBz0ATzpgCJMVQKDeVa1CV+E4JLBzAJdSmwe/cuHpMyaDWZBPVlrl5huOpoOelob1QqVlB7y907un8UKSIPVbZBH4KuJ0Pe+/bt027RB2BvNTcBMjwW2kWSFYCpVxOCnK6uMItGEogE2SlNIz5wCosLnnv/8yqFZ1C/JG0AHz00DSfXEIL6xYshCRmrNZzNPDw4qBE9efIEksMUu5Iw0o3zOGOBjeFv0sYuE2mwffnSJevWr9WG2aFFU1ReUbZ61ZoTJ9+6euXaylUr/JohsGzp8v1P7JucmDLeBwGRjbo0A8REOoCDjFHQABCjYI5YrCAyrQmmYQ6SfQthZEZvIgDCN1pBUr51Y11maaHJQpMmjmC+jCneWgT8N3/z3a5O009L7cGFk8NDYcIebuzcvZNiOPbDCIDyGkgSNIaIWLEktpcWlwgR4sZ8bx4+/OS+x+XlIG+l9tKVq+60tJaWl7z68iuLGmp2bt/mFI6CwpL+obHXD781Pp++cs3Ga02taZkFhWU1XX3jqzZuzyup/c0OgBGA//dTgNBOaq54886foQNg3DvVzJ+Q+88MKRGJctdciqmuOGOVgkdowtjUse7W0y8PtF0b6pPBTRFj22FibmZcDO1tCC5Mx0nJSknNmltIt/WOBL3BbCE3eGZR2nVHUBuga5pn7A5kjEDSOBzl61eO30CCBJ1ejQXJTvnVB8g360FKP83IgTPHJe8F2HYttXVPwDElPXtyIWPcGO5UGCvzQIdKdwJ1zNyvqNEVxhwS50OtU6fDOEDYOchAwIIUl6kFqXoCOZmB2BCTSsvplhgakJrSn1nIlvsfmZzr7BvqGZ1ayC5Ytnbzhm07MqXBCgtee+XVkaH+0cG+xfW1SxpqpCcLy0rogKk4jFqCX0q4raWNvslycOx9vT3e2sVHbMHArTOurK7TQnHOkNyxcztFlWTRn6FmOs/r1oXZkvYFKioOWcCq8gr2Rdmgp6ljX9huk2j+hLn7kxWAYFKfGYnco07Plm1bt+/aqbBAluJpuRgCf+7etxyXpLgcAVtm7GxzzZrVRsJEe0yJ1bvcRAfOyiSeQP5X/+pfxUaXiZkrwgxNQ+UBbt+6C7jUj7FuBsUi5ChFoj50IvjFixf+xVf/qPleO9Ik1DQiPV2dTlbWFbQ1FseIQGNF1gA4lXNwaFimJ7+kMq+8vndwxNslDfWToyG/Y4o0tTFS9+Mffd/IzfT4WFlJ8YO7H7h84eJLr75ieuunP/M54sYTCPAAXIQb6DFPz10sXetJHHopt5tbMd9+33ygT7BFn5D7RRpXqeulMLbgWEdnGNlYumi58oB4AjjO4C22qOWDHwyTC5SXI9B4hW7SU/vNnTKlED/FA5iJ/8AamlA7zxkjG76UQHUP7jS3bt22R16P67AjGaHAqrCogCh5UZchSoiF5nUhzCDX9Bskti24J7xcb1+vnjOPBAebT8BQdahubW1xAwdVm7qMFfTE5wcOHjh8+M3MjMzHnVY2PUNdDQPKmun3mXRgCQNQtI3N8pNaK1LwFasiUIKGCbRJDdXuFQ57gpulnewM4YbmqF1gADcfeqKxgRWFAQQ3+MmSknJY4YOWHRC/eOs53qoRfK+YMIQZjlcWnWv91U7bXV6BjHyygwnCicMTJbWA/tSNiU+A8lBdREy+GlDFFIh/Yo72dNHixffvdzndGsMhSWnVpVEgXF4EfOGfi0tnZUZXkMyZwAE+4FAMTQ/kPcdkdSnmrT/V5cawv5Eujb4nmEko9CfSCCxy4EzK+IbD0GahmIAt/oS8WoCFBsjeqggbPVc15rinn1jhc6+CQ07mTUUZCSPdeB7NGWLgqNTnOPwu51UHN/whJs/VogzIxOFDN75SC1Qpp688VNiv6mJ5n6gXnqhDCzK9VYvCmOBzOPjTrye+grzfd2vhHNTlrcLIjGGMXyZMxMBSG2DJC6rUyZb3DM1btfvEr+owCoFqgYlfT+gPmCpKfX7HclLXSjuryCliyjhYHs3wQJL5lJNTs3Z3lqI209RhPRoTtirErLMsSQ4pxED2KhkEV/VGNn21acs2FajGJs2tLW1Oq9Kk7Nq12yJgfT4bx6l7587tzv8Vtlp+yoRNJ+Jc9A1MIrA9BgHDHkwGb19evHPvK+py8dIloRITkkx6/vnnykvLcJydCMgsiIQDz76ort7hRKg1w8qrI0eO2DEdszDOVAQd5rpFDai+fee2wMvmxu4Bx6yKZGVPeWk55ZBo59zvdYQdlMkmUYVCtH/g+eeMFJOKJMTlS5fUTvE4rxAdFhaPT0xZYPDhj3zkxz/4gb2KGQBWEJK2WO3KwGrTps1FRYUUsrq66t7dNrYkJ+j3nomtg/1LlyzbvnM7xaisqRI+9Q30jU9OmQ6rXZbUP3ro8JNPPq06Ks5oUU0KeEVjlixZrJEW4bWKgltuFyXnG2zburnpVvO6jRtsnnCr+U5hUfH5i5cFi08//TQpMw/osVkTMZPtGhsys3MtveCyndlrQlF20mlMTwsDF2qh68imG048oNn6QgadBRl4jocy+vxSQV6B/cWV1JqSo4dYR9WwFAcoGG1hoSxQx4BOY5ohXRxm/Ca66vLSV7KgezdvXg+WU1nOGXE9Pid3lBIW8tkSTwQ4JkBAHOyhCYW8Ffx1V6SfSUfjwTz0A635pk6esBz40E+9LT1PYRE4WEFG23bssCtjcpTb2yOAXD/j4fGNa41NjGq3bI0IsroiN6DKSrGR5rs89AoJHhoPtYiWxMVrFpxorV957dXy0hLzeu3G6XdyfIplrVm11jStqYmw0RAIk1MTz7z3WTw0deFua4t1ESZZnTt7XstnerTFkXm5+QOD/c5UJmf9T/B5IlpK1fEkMoQX4BfwHN8oLUG4R76GUxXKREdDdYUscfgocpW88AdLUT05MSbuBNaKnSSBes9AigHxr371X9bVhlbHFjeaMZkColGd2YDWOhkVxG19P1pKrIZacUJg/fOf//yTH/+EWjAcuxzj8NST+40zwry8uq68strBmVC9dOnCU08+PjEmh3pvxaq1Fy9dswXQ3v1PX7p6q3tgfC4tTwegs2901UYjANWzqeLUwGEx99tTgECXS7clTgii314DwHtg0bu//9eb+Nb0GnFwfBsmyCTxMyfviRQgK9aNCb7RDNqpsIFdWZ5jOG5dP3X4+vWLKXNj1ndYzrowP2E0QCTGjwlDF1K5e0nETB2AsCpzIdXZAC45YAN6kt80MCQ/5mfC1PmwB2iYpZMMAuh1zNpISGpYT8DkotycTBanG2AykpNYDBJZdBsmKonZTdPUnmXnzqRlTs4siInpIbbAIF64QuGVYYBm/geOafzSM6ZGJ5h5Vnbc4EKrPAsf5Xxl3o+0NFRhFXQjGWrwf3uojdt3NK9oaCLlekt7XnnN3ieeLiqtkDQVupw5dRKGNSZKFud3tQctMp9dMDq7kLJi6QoNXnlZOLBCBztwYTIsxRMk07cQ1heVrFyxhkaZEkCTd+7aYYUSn2nRiA8Fjh//+MePHj1iPi0vQaVxIzAuyaRyhm70qF0KW6SuFjf6FRcvaDI6fCL2sjCifvEiJYWkMhSsngyors8t6ZEF0HayceTrM8vdOL4D60wskfiUhLJAP47CaUPh9sYbhz7zmU97bt6OMiJXYH1rYSr0pDk4UNG/9ksPQQebeuvYODCY/xGS/fPf/x87+/ogaUC95fat+/fanKUgpbhhvdVi4VginZn8wrB+9LbjUMZGs/KLl6zenJUbVvVBu8HpZlOTumiL6+tsBm0lwL//i/9d+u6973nq8MEDh944EJLcaelcBGPHZ84TKKaHveYQf/aznw1cHR46dOhNHFDM8xvXGxW2RIHLpfbRb9BS3g+9nH90nvAnNSXpI6rBwVv2zk/yzzoAb775JieMhyYdudw73osv0DO2MkQXCwk6RT6hljy2XxgCC5pNZjkHarB790N5+aUnT5+prqwyImYoyzC4rrnVxKbg6lzbVrinrxv3pGgcskH0V6/elIcmAn4e8jA0egMryuAJlupPYp3tjNDLs9mVQZh77erVEydPCh54LTGSqvl6xmILTIpkRJrSiueRNjnlKGs7Ui3rH+xzzrfddw1YJeukQ0pbWyDqpV0wQYuhTPN41OIVDuAelPx6pfXUTPiToH1CDxPvHVRXEh/aWkOvqCWYmAOmP72FlbcuDzkCG54DbmMakycRyNP6RFTD7twwczd0VdSuN8GKbfTnMwgACxpWAKtqv956DrI+tgjBt51dVFg3ynaoYSGfqdqabMP+BMcq9V80KLo0HCMrq6oOs/adBQ5DpNE0Oq+NoPxk7aF7jUtUQhJPqBsKmzAm2/YDBSWVeo4bcNN2uEcdtmuzyJSGBBEkM5dAU4v4IQZvqlDY5y7PfeUGXX6Vx2fF8MflIfn6nCD8qaQPEU7bVYoWJYENPj+ZWCV4UC8HBQHPlfSJCxwcRiPRuHBVMZ9AG42AqDTqoYrwFg8V4NYcoGGFl1NX/GpHnBSjhRkfm3DuS9i0ID3V+p/Org5b58eUKyCoQ7gbtUAMcBUhgbjVRWRRT0gBJt09XWbnGqDLtWnVgoRInsMBnPMbtnqQ283OFD+IJ7VfMEl9YvMi6gsW4xXWYz2vrBqNEN7inV1hzPW3GhgNFGPR0mUeIpKAVYYk2U06zq7scyIDZ4LH2Miw6cOqMxvNPiqdnb2SWflFxWMOG7bVSZkphmEH/Qd27xwfteR/SWVFiRwGqbBwZ4Cyq/bO++A4QEA/QgyK/jt37/Imo+MT9+5z5l1/9+OfMgSN8fs/9EELNiS9gwjDqrs5o5nHwz4MYdynorRMsA5btNgoLb8wz9oGIyEm2XPHmIjewLLkuAq1KInRWBxEVV3DeJApEIEbSVMXikiQ6qU0Tz39hBaUVGiDD1VNDGvXrmfb3iosxoWMWqJJEJutKn3LrS9fsdTEiZr6GkPnGhW6J2Sl2zcar3tr03TrB8zkCVuv5pnur3mWmdPZSrt7p40l8y91YbelIVt0QVK3BQJm6Di+BccWNYRD8gwr87ylRSHKt7qgrLQi6PfwCC1pu3fPOKrWjsWiGrERNz0lNy4uw7C3cyW1pwjRCpnOiBDWikxT3IVWiKJSlp05MpnZSA/7NU9XmkAeRGEGUFJSzGXoaEOPV+LpbCuGY3HI0o1IkSFhOOHiDPbCnPexnXNVZbVJwK0td3xF5cgRTAgr70/+kXwh756scV4fwLItjpE6EK5ctbYNTAM+atfC3WhsNPAdguCywC41GsFYtqTBYTqGL3h/4/Vh7KWwxOKXlStW0wqs4PfNB0ELsA2LwzhdZk72t7/9beWfe+45+JC1ZkxJigQfCuMJTwGxZYsXMVbrsG833Vq+coWdo0RkZ06fbmxqWrN6dY8td/hjk5pGJ2w9sXrlKuvP8NDIldEqKSvTfkTLOkuCD/7ZQhRBhsSQ3RVZDX2wd+HiJUuwhV6pzlyn+voynZP3ve99Qg1c5R2IibYwXii13r1rLZ0N2pEPSV0j0YaNuYyMwxxLxTFsX9sfuBfi3dmSwgLxkByYRREWiNfU1F26eOVb3/rrouISJ4gbFlZvaJfSwoGgHAgJGjcjX2hgCBFL0xDZ7eYmTSAp8FaSeSYlP/vss+HEivmwiKKwoFRDS+7f+973Vq2messam67rDObmFX7z2//xYx/79ODI9ImTF+bS84YnUourG9o6+1du2FFcWW8bUFEuAwkzIuIagNABSAsdgJSws2YI+00K+r90ADyJFz64ib9u+L2wfkC6IUn8C689iwUEzorBFkuTfkJadupsUXpq993Gxuvn2u5emxrpsJ19buZsZtqUuXHUXug+O+dwABuS2t4hLCmWtv8/qfvvKL+u+zD0nd57HwxmgEHvBIjCChBFbJJIW71EsizLJVe2r59je2XdxMlyfJ375FjJleynYseJVa1e2AtIkCAJgETvbTDAYDC9917eZ5/t8Hp5vX/uWi+27yHWj2f22fu7v31/d7eq22OCIDQn4fLRIhKgO/bjOhVHIxa6BGHATiWzDgiKiz2s1ElPNQ+QVVKQW5AfdiFkW64Dv3B371yYK0CI6GF6lo+3+ND4gjlbfi9p2dPHJhy4OcNkikuL9NDYC+hcmeWbzmGFj7ZEp4JiwMS6NS4914BqPFDPztMwnxDOKs3JDLsPp1OzRqdTByZShmfSJhaz5lJzHtz/cH5RGXO43Xqrt7ujID9b76WivGRmYjLMzTbdyM3Pa1y2gqvCPahy4uoSlOMtfPxSEm2tSQC2xsmwU9OS1oe0td6BKh8r1LdKk2rdd9+9TJ6GkzMzJBGODigBPcKhijrks32xoKDWwBAXt3fvXr5dm4/hdFsehNB5Gqt1h6SdqWo5ePAgCAY1BSt2K3HmhokbG1foCZi/HRjoz8sT+GacPHnKeoFdu+4xNCmdozN9GsfR42C/WnD7/e97EqUaAqPmCITG+Qtn/SkkZQ73338/t4EWJsb31tfVsiatfkWFWYse+6mEniyXX+Lk12/c+MKLB+2AL6uq5ZDt9LAurLK6hnfGLq2GbXm93e2vv/bqO8feclCfDXzXr142DI8zGIjbJp0I2v0wfLJ1UBqXy1evnLtwqbiUWMpNMmiOx0ZHKA2HZiYkTuTaLmxyhc+hlGwccwAhI/yxsZF/NntjCJ+8qBO6YB7anXAd0Ig+P4oo8h/+4R/iBrkb47WLqau7A/ni6Oi6DXwgkNMjEWd8nz0bTsY0EbRuwyb3jjv6x7jy1Ow0PdeQ5efkOt/K/LZbd4Lmh4507iksKikxkGRTASFiGoaAaakd1VILTygRKyxL0w8J2p4XQk/6IyQ4dPCVyppqnMQl+75A4Gnb2tp5dUugcRtP3Alg6Grr1i1Mzoo7W/oZolNlrRQyEG5yD4F0ktZRdcMl+GC40/A/UFQCQ4gJ63ADT6gi9DCTt4eDVo9uMA3ayBVDGByZE02eh5hS0XD84hIIkBezVZQVrVjZ2HGnQ6OGKOuNNYJk4VJ2duEMcdDsn2TUkFFdZoalvCGUDHjm6rGH0Qh/csuETjNxiWgQjhWhLctI965FYAj0kNDx0PEPMmuh4BnjQMUV9Asa3MRLlEGfMFq6FBVBTy8C1ToPGmuUImHfvgMoUhZzZFNcdfDxFYYEQYtAk4gJQk2X5AlqgfUJ/gpGEhRn1JEuhMOKinK/CbuCw4Eq9CSqAii/LFRirE42eoJLyeBM2BoBT8osD6YRln5pDPwUUSP4Hpv4JVq/Kr9K4RASkwBSCtw8MsBTdUG3K8rqagUwFuWHNdu6mmI2w6paeeGqvhwTuHz5oiE5zbSJLwrgYqnIGb+QoUXwVEWM3MgrspqecGI6PupVo/0qGhFDSQZtvLtW0hiuWTKD+H69+2p8it6mvv++DcJm7Yj77MlBa6MC4SayqRG99FBQUaM6KFlGJssK+6lZlCl7KDq5X5XzM9PufzHSWZibZS6TTVYkd5I5z3pwaMTBNDdbbt9u7SksLbI9K4/PSlkc6h9ob2ulSbt2bqupqtArEQRs37zDycvbt29z3IreeXlVudUvjiOjiC6FXb12nWN2XNf9w5/8+Ma1ZnNyvX3dmyyd3rCBAIz4aUK0XnD7zre/DSvr+BGjk6obCv7tO623WlvEhbSZOuKmdC0KKrwrxVn7xWsqQgNAMBJJBT0UBdPpKFawc9XRA8jTaWX9ScxeLl24gDlR12U2tMyQYpPmzzgDQEtURCfu3rFj5epVp86EW8aMNglJKXE0PADhRgX9gkx7gjalZc5PQ7U8OyfQ0tx8M3QK0sMo1113bdFtsJzXieGh3zZlc3CyvDucwdpjPzEgRjHRZa008o36hCoqq8TKSMABmoQilw/ZDXbtehMqKACU1qzb4CUsFg2HCGaLhsMYRHItuYMgbD7TX4723469t24pCKAjTcBHOp441IDjQDul+smPQ5MAJeSjTruI/yh77rln5MR5jYG7xLXl3Ic5FhQZeJBopxGJcBlAeaGT8rNbNh+ISgkrrOxGbbsj8E3jpMK4V3a4KYNCo6uzpxsVd9rDqX/aPyv0uTkjiPNTIvscctQGaqHxIRjh1SsW/+gV8EEOoh4eDrcBMAQLqEXAmMnYSFDvDuFiFFqHWFz1K4Ww+C8dHntIH967h5Lbe8B8cIb7wCJSFpdo5OSHlYLeFaQ2GzZulo2+RdtGCDwNG8ANx6RHd6lTJD+d+ea3vkNh6A/voAqugaLKrHMiD0x0nBCFA1ghQG+92eJXESS4WQUatBFXTQDyHYYfcFU7ql559GLsmSGFt958m7favnOXq1S+/rW/chq7431ptU4IaRrIhpiKxsZH8Jb3EGyRNVQxjQ6Q0bG3j5g9wFIxma0gEPMnPE0yUKqlS+rRd/zYO/Zcvvd9jw2NDgyPDNQurX399TfbOnt///f+t4OHjnR3DY5Np7b3TxRXN7R29K/atO3dDoCK+K2kAyCUN80UbsYNZwGZFghbAv5vdABCDyB5Ajf+fsfAOhlLb63m+bsOQPCTTuzScGUuzna1NV0480ZH6+Xc9PG8TJHKSE7GogJOeXesjeEexyTqp8As7riFGwcoOrdYSrupKdPzFM4aBwk8D1O9VuGH6ekwA+DRXxAlL8y5IMEqoPzsjKJ8C4gcVBROY5ibGje5yykb83D5iHAdZG1MelqWDXx2BjlflbbYEkoTcvJsQc7RNRLi8xK8pQkBMx94mGvZWThjOMykj48Ms0rvBmVEHDDz2OWcnz3n++xi1vhcxsDkoj7AyFTaxHxGYVn17gPv0UWkz909JmObaqsrjUFcPXPWwLbtX2bbaDK9suOA3OHDFrwYAigsKTQYQW/ppFUBfM5wuByinxHpE9opIRvM6cza1SuZKpVjI2VlYe+77SdCdgEWpRWiyckw+W3SE1XTYWhbxKVeXgKNoalK4jDRjBrZtcBLwMqliGINEPC3LBp6YKrUGdnyQNU7I6LzrFVBKZoVPodwiOmnP/2pr3wslBgUe+dXeSpxg69sSnEAf/SjH3F9CuKSbTaw6jDp19dtPF6NKtq9ezcS0M4VwBZwdaFXh8SwujvfRsbNBhfakpqdq+9WmF9YmpdfyDdPTc44vJ/G9vV2nj19/Nlnnh7s796+beueh3Y7j5XvpU6Msen61a72cBe7KyZvNN08ffacAdXqWk7SEpQRtiNWwnYrbKN/Ixc48BK8B54TATI9KOKOujraKspK129YixyjCXAWKerJ4BLSnMXHS2OFfg6/xIkh8PixY1gnLsEc/icJlLswRJDKX21Yv8VAUnNzCzgP7dn382eetuOIv8UBaGBIaAONY6Yady+JlsgJaxoAJ9+zZ0/TED0oY7ucoT086jJMFgfv4Lxu3Rpz7wSkp221M2UQSOA8oYNw8sRpRJmG8jswENw1rhKoQT1ey4tBOnbAQuEAAQ/pdIX90j0W7mKvpllbzAZfeuklAGG7fuNdsYVSBDcopGweLhdWBsKpkz+BopYQw2otl44WKciAauhhOELQqzg0YtQBZ4N9qxqXmjI1Joi6t4+/Q+cdvsJqTLth17LlK/CBT1aQUPgEs4zGlTRYIGuGKBv4kPFLSdQIDcgwB9LUNKMOH7RZilMbfh6BxE3VpQMLZ6DQCBRuSGe/UEWXdGov3VeZpfgTVoDACnzNgXTS9MiDNJnBxP/IEC8epXAPYvhgGxQvBYi6ZJaoLsyBHiUBWXH1UgaPs1xJRFn5VQRUHEzEOkUk+gS4ekFWkJaKZo1YRZOPpucT3KLfAEEeOSOx4bKI9AzF5VTpu/nBjMqpCgXxBBApVM4JXWZZwYGwgrBSlzwYTkxEIAWfka8iAioqCAvY5IQDMUlHF72KMmU++M/WMBBMOlBcpNMbHgJFXfDhhiuSvdEyYJcU6MFHEdlSD2xbmV+Yb5hreHRI4xTaBhtPJ4KojDJC3dPZ3oFgXkkr1d0zIBaP7OjrH5TZ9JzQ0/HKAinTc1s2rDf24zhz61DFinAoKa200t9OpkuXr3b09OrrWBynMRBqUyLjUiawjTFsWr/B6lQDvv/rb/6vR4++dffOuy1Fteb/lUOvyrzznnvw3akjlmRwBaVlZd/77g/eOnquqDRs86JM+Kinw+osCoK8EVYLeI4fPw7DDzz5C1jghaVZtOQsCIzjuxkkhoqicB/TUUotsEk4RVFYtQoL88P4PWGoQlzLD/KMbIC2aTYU94Kb3JzugTzrkgsHZACNqEAgPzARC44Wjq8ne+nEtqyxUZfm2vXr8PQVEFEvMccpUZIDBM64HU2URGsrl5CFM4nNcukpWk/s8lXQrl69wqn1dvdkZqXiBVVbszpc1GUPBmNjxui1JAkoRwAJFgX0GqeR0WDV7FxOCkE/3IJsY4P49ujRoxcvXUKU0S8u+MknfrGoxPm+BYY0lIWY/Gh3ZgvVjyOWlrXwIK4CQSD/TiCuGcJ2HJBCO9Ho0HOYGADANN1fTIA8UHgLT0UIxfoWgiBWu8OX1TdYPaIgfITUQGkt4i8+sBDvxMekoWGZk/VvcRARpeaF4U9p8ZDJqhF6V687u+kScfBidUtqihzwt34txsKB+9A7chEYI3FZunUYcAbBSKht04iFBvRwTAbujJQ1ewrip3CWvKTTHHYFSdA0t2O2OmRlUEuS5dxh4is1IFDF6ZJsIEjHKFhxzZBBkQfT5PEnHFSnYfAnX+wTFfUO5voNm44cOaK1gB7+gKPN5hSwhTYGeq9elc1XQ/L2Tdpuai011mnS9Pdppmx+reBUHf8ks+VhNAGxwr6RIShVHjt6gjrrADjB4t//uz9yJSsTdoSRsX9UR0dG4ob5kf/wwwfIDjnwRJEJOppmOkvDzF4g9vTTP7edGq+I28pn3dqwHzU986++9pdPPvmE/kl3X+eq1Y1uHfne9364894Hd+64/8jbZzra+4YnFkZnM0pqlukArNhwlw6AU4CMqWGRyYR/5A4AAoN3m58vzs+dHu9runKy6eI7IwO30+dH3RVQlO+OsKm5aUOFmt1wkJoxem8mKvCWERlx8f9xk7XWUTlmtzRMSQvqjUJpYQzMsSxWYImdvGHtvhEbkwD2BFugn5FaVlqkG2BXgvm4GUfozDuBNFnZ6RIuHYBpkT+OZKrJCJONpLgd/b6tyHQvryDXwgk9W1bjNEWYTUzMONKNUTiGlaW4yAuexjrJV5uLw0Zb52YnsjPDUoT5tOwZfYDZjIHx+YGxueHplPySipr6xs3b7nZglOK3WlpOnzlpM9rs6EhNRTnd4GQM5ajOmggZKAaVpofeV6xeIfhmWQyET2PLY/bNDA2pCM4b1q2l3qyGbi9dEibceGOqhW5BvBEils5qaK+RWpRxnrzZpUuXNVg8HoqwEfliSmU5GdquIn8iUB4xk3dRi4DV7549e6Tz84zOELj7K5i22ukwDAldurF5iHk3muDF4T8RARquZeEfNFjy82lw5tVjpc8++yy0peCG/Bp7wx+Xzp/3lS1LxwSehMGaf8MWFfEPbNko/te+9jV9g37Tgy1tbsxwenppeUVemKs0LmoNlf5AGA01V59t+Dst5fjbR1579RVshKqrWpBsjZCDgzhqHlXgddmRXlevmtmzc8OyT6vvxsIRHRQwY8umDfBhyNAgd76a2RIKeokP5r5iiD/Z78b16zTTEIiBCKnhP3n5xYHPfvazOIwbMmAUr9XT2Ym3Dp2jVxp9rkM8RA1s5uJsDTTIv3fvAYw6d/aCuTg6w0MSLkwYiHr5Je9SvFMAYIkb7RwjWXNZMLSsNGjpXLhIUQeAQDU02p17791F/bi+ZcvrLT8WpnPgPtm3JT+JgClooVFOCOepzEKAjy3elzU0OvSG5vBWMIEDrvKrhlNpnaV9UOJvfbLWVH5M8+QVlKARcL/0FiikUUjvUbgkDmEZlMUff6rdn5pFReADAfyJ/V5fyQ7bcRgDXeJpv83Va1fkgcn5ixd83bljlxijpLwM7bAiLCsmItN0uu3GYSbyx6YTQI+v/jTkpDpwyNpSKClQYvxqJ2sSJH0YKkuClFYiJBMu5fjkBRxCBATDfUUsNUapr4iSIqYiX90b8EkNfF/VGOGgmhz9yk/5JSIhwkesnP4syA290PhEzsgGAsjQVjVs/aoCn9VougMa8oNJXrKhSwZ4khSESQ0z1UIKSrEA+YMpTUzwUSATFvmiCGQIyI8o0CIORqq8++pRCp7SvZORP32Kv5D0yRi/w9/MussDsl8aEsVNZHCTn/egkDCHJBJEeMpKp9taalZGY0lKnKMql8wUFuRosgGRB7ThId280LyoLvo9yKDOn/CXRyK94nujsFLX1xU52AcvJg3lGtjIDFMqo8NhY0Fy7Bpw8xbPBNDDw+YIysor7QyWE6yh4VE7E0JwahVX47Jet4R1dd61eUOB8f/sTEOmkHYeggPxIKNFEoRZy9h0o8V8Q8QjHFXqKS8T5Fm4Tyee+vlzVG3fvn1Hj7312GOPxM37d9pu37h504lU9Mqs1rUrN2bmZgf7B12UeOydo0OjI6AhYXQoOBQOjkN3lj//C0lO/K3Db1iAyNveuHWT/RcUhRk90uW+/ZI3drznPe9BMh1CKcFgOhWX7jYiGWTDYkpjJIZgvPuqPQBH+8FxwJmkseXAvn3kQQC001fqjihgiUEKn3j48GGKCCaE7fDfde99xjesHOW/QFZWh4SkjffIT0g0Sb0IVMrqQIuaLJE0aTs6NmZQ1sZrZ/8Z92ZRBquarl21xdbmbEH86lWmrWvsZCB7M6fE197WGZQgLYR9hgHg32MZSrgFIt3wrWEDw1u2QVNQIT73hHVuETaWxuDh1rhyNZYWlQQLhw8uoZe24ZuAARz7EXGmo63VVDiYMK+sCJu5kU9lAcFVDgjauOc5c+YUFwAZKpDUHroNYmUTC3w0zxXEUVS4654drEVFSOB/jfegC4seffRRL8JfwDk+Qhf6m57BNL1EE9NWq9NenU8hrHmn4TGxeC5NMyVlcdbZs+edN6/3XZ5cGGlVGAg6/xRAF5d84nLee+69104SIoaDICY6nUg7JvAIWCqgRy+XAQ06jyJ/ErELszVZp06fuH616dOf+ZT1frrZBXmFRlYt+7EF2SGMdgr3dvfdvtNi4belOGpBNdZhcvRQfC7doEvaYx6KKqqUgqlF1caStfHQ49dgpdOre8OXwZPO66OyTR0DektRTQVuXr/RSHNUvwsXztFboOg5XSAdF0mDZjCVuiYqnWo2j3/UKLrPSL/P0UN/+90f1tYumQ7rA2fcMUesYgVRDulY/gH5Rx55jxoJSKNF/1kcAT20dzeUUEHutucxN56UTK1sMUCbm5135Mixof7BD3/4QydPHc8rzCkrL372hWfHxiY/8vFPvX3sVE3dirNnLmfklnYMTJbWLtcBWLZ2kw6APQBJWOIEnrDz1rqf/0kzADoYtD3OABAuzD0iEdGV23cz02YWZkbams5fOnd0sKslJ2POHWEpc/b1Bj8pZzjwbsHgpa3A4XpgzaNRKe2FYE6Abu3PnOM+rU4psLwk3YAPptkWjGPh5i5yNb2xGDoAbhwz6m+hZH52VmF+TnEBRxsQMBFnokxFbJ3mmKGz09iIj5NBNVU6G7htBs88yeT0hB6CuQMz4hoKcb/hBdMlY+MTGkkDKTyG7oQazUa45ZF6AAdZswTzNoiF6w70LTIcBzSXmj0+kzo4Ojs0tWBn8MTs4rZd9y1pWF5Vs8R5ZM8+/2J3e2t+2uLKZUudAyHQJH1oaGi8MBYBGQuibw2NDdG0aSDPQxvNH9JtVTPGVSsaOUNmRYcry0uprodGvfHGYYr3a//y13S2hZsys1MprEMr8MwzlGds86a7qKJPOs/aV76FKdFAZ0HCgQVpAnhXxXke2ZiYRpcN8mkwhM/S+uC1+G0eiSlBg8JrpJUlHa7me9/7Hjvl/dTLPDFfvEuU8PcON9Lj5YTRikDA3CbTQGMcBzG3oiKV6nVr2hmdti8WZ3dyAsIPq9djWYNBt4mpsADFJLDTrPMLiguLy90PoKCB56LCfLpiVk2cbD/xyy++AI3qcMBXjvOFXBa2a4f9ZdtNrpw8fpyN63sb3NGMmh2ycCAvL3fThnV4wnJxCTk0yuQG68YcoCCGdsTSAXkM0LA7Mw+YLCf/KTPS8JYgTAOCgHbM5JHwQZTz4H33KauTj118DoZQP8WdbMZZvfP2KaJZutTBJLMXzl+qqQujXejyJ/jBQJJo1Z8e0zUaKdyOnpB09N+MIGvvWBah6AAnyhDWTvCiELDa1vCdjpYN/XraMDFcYsrCERSkCQ3CZZ5ezHJTDE5PvRQAe92PZL8i2FwcTEAGE6WOyZfz/IVLUOKEaZrjsLRo3imzA1HUi3vqUgp8f2ovqJO2knqTL33D7cg3LRqYUmivetEiJbp9v9AAitUo5ZMZbMu9rCaP7YUNEhKtI8eQts5wq2P/wBCwuAFDRUSG9pVxNjJAA1uYkgxySqFgxEFeaveC87y3DgDDwWRVaNYpvJZaHmh4oIpqjhG2GKUWGHpiawhOkHWyWl1r7pEH80GTIZIsg6rlxH8Yyuzxgnv0E3wPVOX3p5xWNwbZJyccKKIgQSABJ7XOfuWXDoi6fCICmEthZZCHKnK0odSM8nihJ5STAeKGUpaAYTt35BcE/ISMguSlUsChAWcAvXjc3o2H8sCQfCOf1QKsbIrIA8lEGQxHVhlQNuSNdaqjJEjjkeibbIw9psSqqRnROw4Ab+FDFjwGNBCruIoio5CsVBQBaJZ4QVsGKMUgLTArQUOeyEl/Qsk7JFNX1xXbAWziF7qQMEUdyts7YgNjabEz78CCNKmPOGVhZPR2a1u4G8+gQW5uuIV+dhYlxYVFpcVh0Xlne5uly2al83MzV69cZb2dPr8OsXNCrJRaWu+M8MKz7tfo6LIfAIWiYsqsJcRkB7rdd98DSOXu4aB3+8qrLz/wwH1shq/xJJLIwoiivBInYy6vX3bl+rXw78oVpkhUCIatDag4iDymuGb1ap7ddAkX71yLvQf2u2SDEUAb/mqh5WqMQ8IMzBCOigjSJ9wgZpPv3vFdTupCuWkDlMgb/mTjhW7BWRXEXFFWRjbKxlAeKLwmMzmJCijVCcUYAxziKW/5BYUsKj5q0QEwZ6ogdQfZLzTU4kHU8MCgYN25SrZAGUojcC0BzmCL0NYh3FbK0l/XzZhXUcWalWH01wkS3A13D35LqzXLlo4F/+6STl/5I6yDnra5vKzs0Yffoy5Mw0w7zxz+KD/8ZWa67oSilgxGEYgxCdmiYlEhSiZw8dt0PZz8Q7nRYl4K3zAnnNG2sMjRYB3jxCVGqL3BPfRy31hHm4mSd0DRtetXBUCAUz8NJ7GiQruI1XwWBPBKzA3VuEBIMGEFJEMSvhO0mMZkgoWA2kqnjjjTzBV3aGTUVVVsxl5723rH1e4hF76pLrkDjs5YPxdX/B87/o5VonGSRNXW6SIfx/DkwIGwfhFWKNIz0WHAN/ojAwJxhuxMMvBvrs775ne+VVez5K67t1Y79jRlYWZy2gS+sVlr0qYnpkrKSwd6+9955+1lDUsZFJLJhVgxBJMpHmtHporwAeHE4VeG1jvt+E951As9iRjrq5FIjKXPOIbzqMOcS5cv5Gfn2n8ig7Ias+gxtdycGDhOztbHIxd6ol5xpfE51rFly1ZtYU93/w9/+OPrTbdqaxyNpROSbsyKaAAHhyUCcu+uXdwj4B6eV7jw3HPPWg5hBgBR9Nmo2y//8i8xBPLA9prqSr2Lqorqb3zjW0++74lwW4JbQbLTLAE6fur4zp33Ll+59sc/eqqhcd35c1drG9bcaOsvr1vR0tZbv3qDDoChaOEoaP/IHQDMUSmKrJmZmhi1+rAkP3N6qPvKheM3Lp0a6e3IzVhIT9Fc6UuK/k3OhWiDizIWb8TfmIi9Vf5Ms1/YVUfzc9Yl4j9tF6uZF9VrmJ40YDKZlcEAHEhkd5SlTIZE58DT1dGNsM67pCjPbcrOBrVPV+awHm9+1j4B+i9G1+vwL+wMyAiGr1kwvOYUozDyPp2Sm51SVJLnZE86bI01JC23szVZU2YZkPOaiD4eEcoHBuTT+enU2elxtDvUKDUzOz0jb3YhfWx63mlAtzv6S2rqUjJzd96/Z+mK1YPjk3oJLTeuLym1OnRSRINiQ8UezpBC2nzHP7B0rS8e0nDpTKawONy+wofwDNGL9jvVpa9Pb58mmxUBwSdTpqJVe12cuMDKFGcpAILM1woNaTgzNBMCc3qorI4Wo7BsmhHJz4ezWYbDXpx+w8PTUu++Eiv/Q7F5aefEv/jiizrYvJMGhQPkXvg3jxjXCDQr49y0zUJJmECD/frKplCkamUhpo03RqMW4QKSOTcVyaxtF1f94R/+4Ze+9CVj/BI5HwYFfzaFHH5GU6XzY+SIV2loDHvwLNcfHp1IzcguLq1wOYCzmy0Ewi7bZoTxE055dsVqhhv6Os+dPtPT3W2eofX2rerKCvG9niSUdCZxEsNxoC8Zfbfm2OZaS4TB1zSoGtoea7Q4HzhLRykXB0n+HwPpjFnfdevXoJTzEUmTHfXQHPPMqOME4IB1IDB86xLdNoO9Vj1hkdBfQT0W3aRr15oQWFO91FeNnnrXrllvwI7HsKQeqlGO+Il1BKcJYIDcnXjOV+iRF1esA0BAZC2bJUAQMMSsFpnhlown1gBiQzn13r9/P8FhNZcpD9fn9/g7J1HHnSLw9u1W+HvhrFgPjbJ8acQZt8kNr8QB/pXr13n+uqUNJEvoEHZ/M/1RigTpM61QNSHKHFWL5uAkNkoBHy3MEy0hlMxIk0guMFFKjZBRClej4sGWgnm8GEkxorx5yybUiYIs1hO4Exz4l69dV9xGI9AoPxunHoZsjA+IBgFUHZbiGIR9whMYatdkhjlpYqyvd90d5sPVRSfxWUHkkA58vCuoar8q9YteCMNNdUwJFZp1OckiRmjYqCVVNWhIhiH1g6EU7/CJj4qUUm8E7s93320akwgHNQLiXXWQRzg4ctJSX6WDQMfMddI9f3oHHEURVTR6ka4gbYeAgh59Y8TCDXXEoYg/ySJYQtLVAVai3/hnrvX2yQINELwQa2QR2mVTqZxRmjKYVnTSA57A2Vccpn5Qwi6aEzXEu5eIMzSmJ6fIgpLgoZy4FMK2ZLlKxAEJQBFixNmyz8guHPP4RC4eleKPP9HoT0jCTZHUHZuC2Ug1OASWUzVV75ZBLZA9YQ4ZEFZu2rCeiVoKOjBoX2CKGSWDEOjRbqlYWb92yBmL0geora6anhxLRo/mNFkWpvLReqVODLRgcfvdO0bHJ+wrdyKNHQku+IKVY2zJA5GCuYqqSo7j9dfDKcXFJYVvvP4aLNevW+MsZinCWQcvyDk9NesMrdGxcVfcGv5AG25SMjRrqAhMStD75JJ27QQmuqRa/2ZZ4zL6AWd2xaKoLGFoYLCDCfG2BKAl4HBlwBBjcrjG4NEom1qoLPYpK7piMLQEYpGHhNTZ3g4gBKIGYCZQfJNPSgGIuigVrVFrW4dmcsOmjdAz/qG9gRi3Ig8cYCI/Q4oqGxS9sMjooETu3koet6q5wUBLr83g8WmqK2BEWhXFpeKAsZFhMycuKcNAi/8hLNLimHQAxOU0E6/WrF0nLqRVbIlAy8pKL547q3agYK61Q3VrW6BRK4UoXNIvXLHcf40sh2TtCImaR/XBCduhpi1rtsM98FM7HXhVGvwCsNJF5eBwQ/a/L60LA+pEEO2ZE1cvwWEmJsOnu6dL7JSYm2A0XDwJE4wlCITAGYvkp/GYBmHS8adEZq8r7wQ9Iay1K1xB7ZKlOroCAvMA/KAjLDR4/JEOFZ4rRam0ugTNHa9Y6Y64Nfhs5sRvR3sXQcOH7Tm4h9HiTKydE9fT43DpgGZJjI5qyBjGo36EblUHRfJO3DCnov5UHPfUiL3QxhaMxRb59c37+3qkqw7rFMFVDk4pNeIMUNBGI4bgnrPp2LNABCaQx2d5KJivWm456QZegUMPbao5cvhN8ZbMKuWPVBoZaDZAWUcEWPAAGXzmMkjWEezKrl27XlSp/i9/6S/GJ6adE6UDafaI0OHjCT2osVGbcdavDfsmEUXcVFcGi9MchOKiCVTop8HNzB6F94LzxizNAFy+eMWs/fo1lgLfctXgrdbmLFeMlxWvXbvhVmuH08xPnb1iCdCq9duut/ZWLF2pA1C3cp0OwGKGbnxwx/9oHQDiwDpa4TG2bqOBwXF3cWUszmSlzk8N9V49f/Lq2ROp82Np85Mi81wapAmYGtNNMUQxv5BjL7HtuU5/cA5DRo4ztbLBmZwOXtRtAyTL/VoNZMRdX0hQTr3t/tefdwWALcoZbirQus1OuTZYYVPANmpn23NgvEJANjqo3dMpCuMhYS47LDQiQfsDxiZsgDOcFhpXIzd2RpiJys6xnTRMZZhoYGtmDp0IasmMabFAaDjkzgxFaDNkQLuyXIc/w70L6dn2W0/PpU7NpfQOT04vZE6nZS9pXNu4flNp1RJHqY8O9xdnLkyPDrHrUETEOTtFjf2JOuey0HCaZsUpF0c9NHul5ZXUaTA535Ye0pDTJ0/YhxoD0OrKsDKeKVFvJwXQMUPX0UZYH81nNY7gVIoy8yHFRcGVRT/vVkqQ7eWJBmXmkAayDkvj+F7+NtqCgjwAJDVJIOisCfHZS1y0QPSqICkLdWRjWdJNuz3++ON03hA+V48iwQEIkJSZnsBHY+HlJz/5CX8ruBSCcxG+fv+73/3d3/3dP/uzPzNBzUK1gMhRC+fgF1v4BLh5/4M/+IP/+B//o1ZAht7+oa6e3onpBZsBcvOLSLuyutYOPeOxqKtbWiuqtqMXvfb9mxj/zre/ef3Klfcc2GcHuQuDneuqIyUaDjFQakpJMohtB4UDJ7iynffs0l0hGvxh1wAih+tDNeagDmeoAa5q+Z1kJhHnOZ9nnnnGzn5zHZwh0WAa+ITuKyowCj5WXgcVMsUU4IfFLabsiP748ZN+Z6ZDsFhSUu6r3be8hL25OgDIl6K4spisWcF5rJYovzEmL0AlOhY244pxcclyUzjHgwowHxouYXRUCdE7r0yET+JmV3zi0CKeWhazxDDRKkkfHh5BCJ5DAHyOXeeXY6SZWgTNjTysAqP4YVyCBg/v0gY84eEp7dDIGJh8LHapThMPDh3GT5mlEHRs9SQCK4gCBwmYDIhEXtSDWNSFDMl6NoxVVtj8/vc+fuLkcQjAzYJeAYwHBGvTSUFsAHNIyqw6gbQzYUSVQCkCE1WTL2Kpq/EvRkRXiRh1yNR8WAcLc4YAB6yArQdu2A4CyGwWuyCG4Qrq7NFtlbIsyOMGkukGZKgxTkqRE0w4xPApCtefqvYJTLLwS9YeaAMLSZ9IcETAk/QGffKCUZCnGL56oCExPniOV3orEYh3xOqBgwxJ9GpSCQj+6sUf6YpYlgaIBz4eLPKJFiE2pnsBSikPrByMGStCLEJUDY3YNMcikUsgKEUjjP3YW4Yo2ShGtCn40BZoKOiXbmM4DsvDq8NBRRiok4DV8kAJUaQMQ2h7gRuYAZ/sHGGe98hAGeT0DiyEvZOjRDgDHsxz89o6bPU57KLTw0sJXBD6W8Fv4jc3W+dvZM/uB9Td0FAPlTNnL7S2tjkREdMLisLuKIBgLOzWe7UN1PqfnKx0g62gO4AhbLUpzF+1cvWVa9eNNNxzz31VTuTMLxLHC96MByOVYKgm4LScD7I45r57733hhedV6jS5kaFhJ4Q6mwUZhfn5+/fuw2iC/8kPf1RcVu7ofhduI0wiCgkVL+goz3X+/NW6ukrc4W8M3pj0eeWVV8yDy4lGSowCAUqwk+TQHn/KzLNzYVTTn6SydvUqMCkuQTIJUgGc5ODMHtDonQoK6QCEofDTJ3nirwwsk2BUwcDYAGPwEDxsR8YmXAZp3gMQ06ORFcQTBJ8MkcKNG8XkmOgAHgrixAlj2xZBrV+/0dEQhcVhzRKioCfotxHT5WKCoqqKcjgX5udS+mQn63ByoEH+ug3rMdYSUF6++eatwNVkYTqb1KZuWr/O+J9mwKiGE5xYCNph66v82jytf2F+OLeEC3MSUWWyRD6O7Vk8QC6OY+sf6KOpPNFgf59hIQYMQ/xHTv/ggPfq6lojnW5i4M3B1/KRCM02QYmZNAEDlaqsqjj+9jtiU54IA9HIrXD3PC97g0zkPxeDS4AQ2ZijdkaHLYe2itV4kOEJQ9e8E2VjnuKhTVs2eheoi3nQPjAUNvg62QOH/UlqdplDgAhWrF7l9DcqoYcJc9/bWm9bIW2pG2y5OQJlO7CiIYrLSVI0RP8KhuRuEvzEydO4DU+iBx8nAcdbKqG4R0H4+wR5pxLB0gQa0ughq6RjhEg90GuRgIpMH7FhbQNG+SQIjSZNQPQW/0mT+HRL0AIZBwQJOHDvscces/dubGjk3PkzRACmk7u4EqEJHNgpQbhGRC+LNVFRdcmjS0O3deB5G5z5/vd/6N5iwbplA9QVz0VgiBJCgWDtkBEsOLBBIuPrEaLFRZ0DgpHw8ssvf+QjH0nGjOaFcYbckGy91gvPvfgv/sWnx4ZHjRe0d9zpH+qtb1hSv7xewNbe1VdZseTZFw4137izZfsDx883xQ5AbeMaHYCUzDzBLvz/Z+8BAF8tnCTBkXj0quYSpxdn9b3T5hfnbajNSMvPSOlrb21punj7+oWp0f6UudGCrIUwEjc7bhevI/tnZm2szXKXgrnjcACcW3azcm1WMUiPjY4gwTqntdg4wRHimFln3LOrCqNCHwC1KVYiLaRaXLTgzFB7fzPN0Aav6+R+RwJNjnHdmkISp40mCCmJ3bvWSCZLxrT9IUZ0v5mFRxOT89lhQXBYqIosflJIlxz6GWY2rOM0G2HBmBVGdNtojilETUQY1UouCMMTvQB3nBlMmE5Jv9k2kFNaMTqXvnLD3Q/sf3hyPq2itOTcsUNpiyHagw+FdBOIMWPDzJwVhbdglplYuyjUE5BZw+P4RWrvLHxqKRzhhzVJdEZmOsn/sTjIGAPDIqG5MQhgE8i9WjqmpzH62Mc+dvTI2xyIsSrKz9MCxcw9mjPwZePZeDAeno3QWAAxgQnQedDUq59vrtVOBjZIUeHDyTB8oQPvZFoMHKIxMqJ/y7q5WV+BkkHVtIWSqFcKU9XGO1xBM6QKoCyqsVoGEKQpxXI/9KEPqZQV44wXNOrA6y1oVlD05S9/+XOf+5zRAbanXlsdR8cmRset8FrQ8GYym7yizXdt1XTiD4Xk6cTXMLfnJz83101hJ4+/7aKJAbfXtdwqyMu2vClpVmYxxy4+3QBi1RxWL6m1lRaGqGDU8qiOHgJFiDhGED5hEYo4Gef5sHQhNXo5Cm3EoUOHfumXfon/RKni/Bj/hl49HGy354qG2zQoAxeNHMEePiQbWHIGB0ZV4dZaNV672kRnGlc1YiYWYSZHx7MROoA8j6EWmb2omu3IQ0OKS0uSeCYMUNoDgJNagehFIWx+wNA2gOZJqKL8pcUhClQduZMmyFwriuyDVTYg0NhIQ+BJLniFRS23b0JDpdaLEq55QAXd/0N/HJaqiB391pLxft4dBkx8bFAVkW+sTymtADw96IK5rySO1UIvOqDJoGzohY9PMJQTFUrxujEFkoae3R0BLCPS4ly4dFEGUTSYS00lL11qESxua7ngEGsZGjRqFpYPBdyStUYIIVn674W3D50ue7ySazflcQh7LIgEOCBKM82O/AmIIvLIoJaoJ1RdY0cuAOKSGADftJ4eOoNR/lQEaTE/OAAG15dcNBEZhUA5ZfMn3FTkF2kgjAwO+RMQFVEwVcMBIbgnPxHIKcWfmCCFyACRAqBEECgG9HySU6Js8Rc+qrDkSTb4aBll9q44sJCUH2JqBJM+eMhR8Qg8QpPNI5GO+cUW6R7AFbQUOTcr29mGmAx/vX18VjwKOqIkJ/dC5UCgA45lIFwv6opMxih5IjkQ8xJZ5x0Ec7+RnIgY4B7vcEA4WpCGqJjZp9TKsFchHWHhSQvgzCPPGODPTCssyrPgwQmyex/arRvM2tH2t9/7odl/SqZNmJ41wxI2JoOgp0LhbBm0oMektHN5YHO7xQ3PN27dvrNqVaM2aXB4lIsfnxCWpa5csdomQv1mAzakI7O1d85fd9FSVm7WutVrxIuvv/aasyM2rlvf1dludAoLjh89RrF8xTgMch6RkahrTTdQldhDAfwhg1paKIXHCUozNIwFqjBL63h7TplXwgWZuTN0gcy6FHxX1Si6BoCcBvp6ZfDgHbMEBNcY2xtvvMEUQwSTmspTgKA6GUw4USMIMBIZ2ICqORdWCprxB9m4QhAoRHunWtqs55Hfo0ZdFLTIRr3IFZLgaKWgB47m2aHg0Laqqqu7B8KuUqurb+AEMZ+iOEVEOy0csSxC48/sTfUGpc8Lk0oO9YUSX++dJtOq2613dDzYj7JYYVHJqpWNZm94PcAvXriMFi98ripA86fa0RIUNC+MUpQ4q7Wy2qgt1hnVCygF9xIeyBvRJAJtJGJ5W/ldxIMbyEcUigA09iNM5DEpoEuvqKmy8quCnVs9dO7cGdKEntEafNCIEofwlIyYhGy8jPxcDBm5SYqWIke9BM20yAiB9913H7MxAg0+xRG4rFuz1rCrPrNZ2tu3W3EJED6lvKKKQJXSazJJRV4o5Q5oqUjL2KRzoegA4Fbj4F4MFDTV5AWBKErRgLYQksZ64WDJO+mTqSrYi69KwYonImso4QOq3X1rP5QADpMxB8Ppj+K4igNwQD4eYhTORJXIzMoBBCtkQxdOkk7gfrK4IrYfdFVYr+8kMujt7Lb+Ff/Bt/GXULALS20/gI++uj4JZdYk4ydPhI337LpXw8e7vmnT/bkLKxpXt3W03265A8LmrXdBUvOvamv2MM1GQ3wwqkrKGO7rhg3rwXFKNMWGp1DAKCwuqVqNtkm4rlvIakLGfLkFWsdPvL1yTeOOndsGRwY5/7zC0vGxmcvXWn7+s+d33Lfv2u2eyvpVt+706AAUVSxJzTJBZ/nK3D9JB8BCmFlX/RK6675SU0zwZ7v7d246dWb84LM/Heq7Mz3SXZC9WJBnJaE1/YaR0sYnFnJyi9igzr/ZU445dgAys0PIyF48eoDEJ1TyWJIp3Vk/GjXrM/UB0pIZgDAPYBw3xZ7gNONjZrfs38zOgANkQsOD+dhLc5z9xd51jIkVKFpk5BVkeYaGx21QTku3mCc0h8nZo6E+HWbH8RUUZpn/pC0EzZR5YK2os0D9qQbGbkc/7xeWJS2mD43P5hVXtnQP6QBkFFTWrdrw4L6HqXr37WuD3R2Uk1/iEOiDQQrqbRU4D6DphqGJDnCcOUGxRS/0x422PPzTTz/t94n3vZft0NJgtguhxWFEjMv5jZyeKVApDJb9Gq8Fje9SS/ONWwIpTbY/uVDWiiF8iLiLjWCFdBnUpTg8VaQKpDFGkTpFFdbzllevXbYyhyHLyaswYbbD56iO/LwbtAJKiqrJLpCjZUweNQJIlKrTb9dy8XLyS7fhGFH65JqMH/zgB7brwIpDJheQvUOAXTNGvHKHrlLCa0NyukDqtSbL2VG6kGZC7S8vss7EmeIzc6aFa+uWmJRHBaLgUV1ZI+g3GKQV/MH3vnfm5NsaaGu6bL7ftu0uy265C8ynGNm54YC1zu4OC8hYPR9FI6QjBTQxqK84j1Lzjd4Zsn6COw306vkKjRrx/emf/unv/d7v6dujy9cvfvGL2Ltnzx6faCM4YjFkUgZU6JEi00QEqi3CwWTaxW9YIqHz49hlYz23Wm/hHsHhv9Ei6eAQHCbrnlEJSNIuztALjers7iICxwkaoBkZDuE1xwVtn1Cq32SMVeA1PDKo4wGs4wcIkQknOcVPOZwhAtkmhoMJW8izCD7bwYF2SxOfZoIfJgUOFhkUTAcAwy0nOXz4cMOyRjhLRK95UYamaipKPagQfVAjyCwRFYEnyTl1UvDKKUYhiigo4DOpsZdoql7UBQJCVKQ5oBj6zBb9giaz3hqvQi72DPLDAneYd/eEDX68d/TzeChAoMPKUj9YqVE2qEKPjZAjDGECJbWjIp5ZTCjUMhhgMm2ruBfyAjx4seShRSAjlnRgCD5VYRqx/Y1G4VfZmB8f5IcDgXpomnpj1WQBYbhhjnRfFfQA7sB32IJPKNHKYOIdGlgEQ2VlU4snllULDUGCUghULzb6SohwVpFPQIGjrA6Ad4zyqFdKxArbcYMsorykexSBpKrhBgcwkeZXFUrJAAH5PVCihFh94ewZR5wzbfkj/Ihk9GCQgZuK8BB64NRUhdNpY2b5AY/oAS5nrAWqCJFfFSSjLk9ET/74JzwjIXCO9QKLM6mr68MEikeQpzeMAMtVjQFPjE3U1JaLpYtL8tevWW2mETbY19x06+Arhzo6RnPyUqZNNKVZYVmEBvVV2Mu7OF9eWuwiqvvu3cWJCyiHR/pvt90e6B+SwcHhtEVTIpZaUldvF6YpqsLCoqbmW08++Yu+Hnz1ZQZvPZ5zwmwN1irpGLrQqqGeqtugbbV7OGjW2RTkUWOno0UaubnOD0MMGRhdRh4u4KBsnAL14kzRiUf8LzIJkbXgrwwEL8DylXJjEMMDFoQIBCto8NREWCQXbZXmaXI0FeAASKv4I2ZDwCQEIBbryzNCksZ6fwILjooUMWIR2JtcO6AijsZOiv7+AaP3EWcEwkQv3EO68Iwy6+oaWL48XG2rTbp65aJFGuYxHO3X0nL79LmzaenhGC9LVtS7vKHeotUC3QIb+8I5gzM2cSLHXcJw6Ors4RbFvhq2nTvvgbAFSAxeMHr06FE65KxrMbuQdNWKlWwbDrClQHL6imQ+iF+wNAsTkN98s8VdrSCIyLGxIGxwmcN2I9wuB8ArfPNJ0GyIC0A7FlwBwSPEvhl1F5hesWfq6lVrQIMep4R98bhBWxzHZhZ0y+ZNnB050j3M0ZfAJXmYEBeMyTivFdFiEboRDR1I49whak8WC5GvZgMn3VtnjE1OHOCVNJN0bGBw2OJZaCHQY9CArJFgIM30VgCeHZbNOVwcbphJfGUlReIwtRMHz8vN4RIyMYESQlu91AaGGIVAOzT0W3zShKMCadQMzqwJTBqlOtjKLCZYu2bVOmfY5WQRkHqjU0O1UioiJune6RKtowYErgMAmsxs0AsxkQsElEKRP6NKmxCTx07cG1evCxZBgzN1UTWZAms8BZe23LVZT8ZXQvSL5O6eXoaJHGOMf/qn/9myjyVL6y9fusr7WVdGQDzXiVMnydqpGhYsuo0IZzAB7Qi3TeLy5UtQ1eJ+4xvf+Ff/6l/RVc0w3nqohPj1Zz99at9D+7mjqvLKp59+SsT5nkf3zy/M5Ag+cwvGJl3JOf2d7/207U7Pzvv3X77ZWbN87Z3OAUuACspqFtJFAGGloxXycRMwNx6O3NG8i4T/7x8DKqQFzYN1mkG/8U9QvetmxCemLxiK1+0VB4dLB1LSF9IyeX/TOCmzM6MDp44earp0MjdjujDXlo9BrUNBXu6C2wDmU8PiSWMo0/PThvad1sNv5IQjKcChTnqYQQmTwNG6P5K1EMge5zDEo5GaNy/srq8p6+HDEqRwQ0iKE3qLjQfm2o3shrKgCXhrvICOeaEwRi+jLWM75P36c2Z2cXLGQiPEhWMi8nLsKgnxvRUaod3wGw7gD8fv0DqLD/VmXfSXfLEuaNzoMu64pCQtI9uVzBOzbgZYGJwCq7B0SeOKtWFUoiQ/u/naZXaXl5ero842RZ8gNC5vgKSIFnvNOajdDJIoc2BozO+N61fxWTZ9bERAgDpRKkeL0mTuhW7v3LkDdWwWLZjGS4hZGZTpZT5fGAQmNwWOcJAmU0JnylnShhb+WS2KhzAuOQPaO8Oh/GYs9X4dvMOIbPD9pc98ivEyEFVoQUCj8BBT3GgCAukzE9MEgMBCuTKNi4fQ4KMIq2eMkDQ/pi/x2muv4TyKjEYpa7wcjQqqBZLwB0ddDJCTQQh6LZ2HM5M392tGF0Bn1dNwPTdaNDAoeB7ftGVr043m9Gz3t6ww3IN2ix5NxjoeyLEy2oKhgb6vf/Wrg2Har9100bq1qxuW1l29fNlMrOs31Qhn9mKC15rov/7rv9Zj0RDwS5BErAEUjR1Fko1d89vCaBw4e+40oryjF2c4DS4F1Wg0OMKl7N27F/LkhQlkXVVerudw4eI5MC1u5c95Ie2djX7Y2N83jDOCdin33/cggP1D/RwmTyuw5uRxnghwGwLesYIWkSYhqhFu45NhlAELCXHN6vXw5xtABooyJJPDYWTKdl7DscEXjdoSFsI1CsaHg6aB4MFIljjog19om4V2YpKT7x3bLXNUOaMhNio4+JZ68MNaB/0mxQ1rKrhkSZ2KRsZHtUFReykwPmA1gLgBMqbBwTsHS/T6e7a/Exa0PTip9VQXCIBr4KQAQlGVpTD4cPr0Sd0t5EN4zbpwihR3rgq9f7WXVYR5V5rM2yuC0sblq/wJoMYFvSiFvMgEiwhXcTBBg6cHh+0ehIl3n9ToBc8hA1vw/QksDGGlOAwV8SefAyuLvjS1qFMXnyOnIvErHqpF5vjp3XTK74EzCDDxlUbJTFsohmzGGmMVeOhPGfBQZlUr5QFfSnxUgRWKA6U4DGWABvylgAM3zZ8MpOBPiTpsiFIK8Og5EQ44ekFDBQgRrPwyePcoIr/i4EBMFT55kZnyY7t3eTyVZWHzrnQ4qMVDN3BYSkRDdfIDjgQpPHxEG0CPUirCbe9oVxxk9cYqlJICH2X9+hQgJLOvKsUZGaQjh75hCNxSH35wI++zceNmvGi63jw9MY3XbgI3ol9aZn+VW37m62qqDREZnFNm3ZoNzlbrHxwyeu32RjPFdAhQFavJ+XPOkBkaGF6/dmVY3Zu6WFqmmxW6m07aonnwsHjbJkLr5JyuePMWx1dgZ/COHbv273+PLZmnz5595+Tbly5chH1lWblpaJPkjroIG9RSU5Yttce4ZmJ0xOlsAjjzfXW2sc7MQQx5PX29JIRI0sIgWCGKJ1Uvh4JHgkiOxouv8nMcMnNSPDX8MRd68igSFQiD+Eowo6JwQ7CKtioPPoqq+WiJ3kkRKKLwAhTr4kA1MKqQQmawks49xQe7OMqZOdPp4eQ7YTFB+sS8vUApGmTsPERxnr9w7qMf/pBYSvfJkJ4RQNtVXj30OmytdJRnZePy3XseWL18hRM7jPRwiA4K4IidCoxYK2KpYEdXmGCyisMIjVgJfCoYrUInMKhrcny76fGVjcL6fChxaopTTXxjMNebrrJSjFq5yv1ZAydPhfZYG6BPplWjThzZwZdelF8bpnZBs0t2vvCFLxjk0xWBADiNy1dyPR6nLGMvZ8pl3G5pxRZsl2L0jlcy5Lly5QqgqGVEgPiU0hxCSY+IUCK31RuWPGRpBDMRiO3IxxO4aaiMdXmHGEvTtpEX8q2LMJNeWV3lThwokePgiImaPtyQmZYra5DbYKeFLoN9g4bJq6ucvpxD35ifqqEKFPcqfFcjrdBcgUwivlL7+qXLzDOAho0CF6y2WkDzIAPgylIn0vcnL2zGzFLdstJic+giCZ9Yu6YL7bgNcwAhryUGhCCo64qVq1UqJ7YAQqupK0LkkYgotYCPk4T70ssvPHrg4XgMqEQLvpXSLuK8hkQV+/bvxeRoCHA2z2SBmSFqrt9B3T//2TPurXPWqqrtPQff9KBW2VF999yzkx+g/8uX1sX2CRAZ/OpVquXgKy9RBjMDSBZziHvMikg/9OpB/dIH7zfIWtHf06e3sP/A3rnFmYzM1Mqayra2zvSsvOvXbv33b36/tmbZirV3NbcPxA7AkhVr80urDQAkgfo/eQdAUJCWbi2Ne3lT9AHmshenu+40N1060X7rUurccKGDClMslhqzqIaIeHfLdKYm3QPAI4fxNOOvuKGDQeJWAtFAUYapWUsRSFOErl0TGXizq9jtYJb62BwcUsKUYNh/xVXmWw4kpF4wVxBy0geVKE0NdABYlicASh7y1VOygt+ADNWV37bRBAVZQlsBB1MPoiPSJ7WkrAU/xvyd3eTUo0l9CKtKqJuL3lOy3NE263aw8YXM0ZmMheyC2oZVywz/NdYjh4KdPXWaymlQBLFGUnX8GKklbAIXYT0koUp1p3Vt7OUd6BPrcClSzGoai9V5kO5mKwE0TbMr4MyZ09AUpAAr+keOaFJOS0d4Bs2Nr3RbrCOwYZWUs6npGrAOt2ChzM07olTBdQAixo0rWD75yU+y1i984b/8+q//8l1bNwNLpdkgLrFfLt3Yjb4B9ZaISyJaxi4bDPkc9igbmErBxAvq3C1g+F8UazziU5/6FAQ4EL4XxzkTpm2RD4f/27/92yJ+log5pIQEHhX/+UMehvuyKYDVZ6VnCR6Toycnrt+4deXqdcGf7RPCFus7rMxMDaLMrCqvqK2q7u/q0W34wv/xf3S03+GKezradu3cbk4Akrpey1Y0OjxNC6V56urp1n945rnnkI9YlMLBVDzeYiNeOdbzX//rf23cQafF2kIc42xRxw1CGJ5Egyg5NRnoMkjPfaEUHzgKfo/++bRpc9hx0dzchIdxhaflrOD0dA9ghRUW2pfqqrCfNS0zbMg2fmSICj/5MbUTHJh4Qr4gAIUn6NUoOGxK69DcfIuXvu/eB+08NkMDH4SALGQVxkDSlDWFZxd9Pf08HrmDqQhhURVCJFnk8JkGIglX1TSEXFzfDitC51ftjMIWy6Fra5e4E0mTrQNAB3S9tOwCG5V29/XEqrHIJ3AUjG6ZTUnhISGAUbDSw3e1iG2GSJOoRjljZAIxEYJRJEWibmCR2vXnRAt4QuusT0KpkXc1WsxAefQM8UQViOJ+rbC1flvEIkP4Mz0d2NhAoB3/PUp5ZFCR3/auTgaCFaTpK7ZTDKxWCmL4oHYioLq++gQBiMUXxohG0sF5v9Dw0CXFcSOYdtJzgAa20MZIKTiqk1M277LRTBKBjL5HTWUV+LEKxZVNGpQwDO9FHi9Qwj3QqLEM6oIe/KWrXVmfKBUCvfglegijCHxjlLEIhsRHKSkojemRCWrxIoNSwR6TRVDyQEk6NLTUkWlo96dafMKc2qrgc6RAAxDFffKQNRykywYOxLwoW11lNVqJinBDRRJlhglU5fGgSO2++uQdXUp5vIMDJgbK76sqPHJG+Mp6Sf3w49tl27Rpi11iONPVEY7ApxZKGhS0oNyREcUlOGhxUbYhOmdFmJtLz8wad57cxKQO4ODIKOHRPwN7glkHydvoYDGDcSlzu2vWrDTfxx5gpvHTL+eOjVuhdM9D+94+fkJUmp1b4KTq3/z8b/cN9onGDEc5wpE/ff3QIfei6QDU1VZbC+UGU2cI3L19q5OhjSS50VCeqiV1JsCt0EQkLadJfQP9OMs14IuhEjQzb7VjGYIdUWOykmzwBVtxigy4JzGNDH61E5QP0xkVd2PRPcUCCt+ZJfiyeaGRSnET4MR09q+b4fBTvI5awnF44UBNZfIagIAshUrhmIoIycFcPtEGKHG4AMoW9QNk6X4lkhZCXPnhWDphrqHrweERaxAtw9T8ivYYidDw8sVLlhtvWb9x1z0762qXEIG+k4IuTQy1jE3qkeMJhF977bBVPXVLw5QffOCsUq4TrxDIXM3e1NXqXjXEDNpLGLr2xa+vsolQzbea4rOY15EBkMQQHK6pqsQHTgr8uzaHdfk4g17H7Z8+c6aguKi9sy0Zj1kiiqUP7jxOnLh+f9a5s+eNwIHPgPkcGq/R8ktM3J/wkQsmNYyFs1aBhRtmECjgDwUosh08J9Ml7RVl5XBg2NTS3nDShw+Gr16xkgGg1CeyYIrOkC0ts34pzOHIbERa/9aDHGImerg6laWzq8sl2GZX2IUDTHBbfu8yECjqsA6H2Q7cnFgCJZ/cPsZGoEptiFJOCPO/CgoIpMCZovoFEEqaxrOnTjnXik7SGfyRE+ZEAALe0nC/0MNSQkdLRWU1+BoPuuqX8hClB2myUR5kQo9o2KDF1iffPk6FNCSYcEk/++JFVAtNjh07Io6pb1gqM9qhimnPPfv8J/7Fp5L1BllPP/WsPSPE7Xg+88ICUy714uULRLl9+zahCcQo0YqGZaggI6ZE2TBkzZqwntj+Y701+NAfbYcUFqSWv/nvf/3gA3vcEasneael1UDYjp13G0s3k2nrqzEXewAOv370zPlrB/Y/3jM46SIwHQDHgMYOgFOAdADQ++4SIO36P9oMgBFTe3LDOTuG7cysMWbWaHWs640zFrMWpztbr1889WZH69Xs9NmcDOeCjplJlY/Zi1yd4jU2xYNy/AtxBkAIjieWAJGa0MAHk3lkahE0WzYoo6gzQMOZnHYchsFCZ4MmY0WpluSm52SmVhcXpS4a0pcYXD/eJOt5Zm19opC27IOfHNMVmmpu3EUFYQwiNPZ/t9o13ASW7Eo3Q+Cx54DDIbXQzll2Mj4RppnCRITtD9MiSE4MB7JzCoZtaljMnE/P7x+bGxidLiitrF++aunyFVZdsuhzZ0/TcPG2GNRcxY3rYUSmrLSEZto3YmjW3gDDzzYW2+K5Lyw6DXNQKn3skYfFYZokixyam67BhKJS9ddeOySgtB6WsrkBkD7TN0ZhaAONfKlWQCuDNKYBmnFrkytidyetKyIdP9gd4ExMsIIhcc6KO3KFrRidw9EC6nuwO0XEoJTWu548e1RWUwJDJsP1Ks7qOQF5BLtSokthhkwvqbfIVQCaFSt/4ANJQAzVYg4n+fzzzyul50+ZeSo4eOFC1UIcMsumv+3MR5iEOxxGuOhc9xxNjE+1trd3dHa75X1kYtwpbcaGNm+5y/bZcA9mOGB29j/80b93nrJDVN30azjP2JwbRm2EhXwICKbn3JCIXeq6cOk86pBgyAY3NF50gIfBXpl1YAhCtKo5+J3f+R1el//kq3XwwPECCHXQOuA5z6ys5TSIBZkaUwB7QgE3AM9LUAPSNydjbgQtqhgfm5ZNBwA0fpj3a1yx7Hvf+y7mgEym/D/I2IUnxEcTg44m2xk53rHJiZ7eMPsqxoCbU4CMoL/66mvw52b5HJ1kikuC9knrDSq4MOdy6xBdaRPF31CVGYcdWuBF9OxgA4lEySQtUdbYwQQJ4myXQkq8faedUdy8Fdo4BySagHJqoQzcpt3t1hADDlv6BiW/3qXw8GpBIKo1bVw9cpxS2ttpiX9YdyRA94kXVYrOI8QLXYpBLXJAoJmcMIA4DxMeSE5RHM2xqppCOsQPtiXFYUM2ZZPfDT9ql19BtaMaaf4EjY4pErH1SfMEpiV2MhA9bkAeNDyHasLMsDQLFTLAwaM4DJVlBZqY2I4oAjJa4uMdBBiCJidyAA8idAlpEknLJo9S0ecEWpKdBhG+w5BhpaA/oRofCMT8XhASHFJyWwg0Vq9eKad0MFWBXnaEk16kwEGl8MRntGjES8oq3B+qajQiOaIKIO6hDhwPfBRU3LvFkH4jKNnC52QsX0HV4aFHfrVQCVYwPRHCbiTAM6Ia3Pv/uA1NFeiVDj4I5mNHR8I+TCoNApGpgpohlssCNtYYReAdW+REnUoBAQ0Vkat02LsUgsNzxgKObKn/7f/8A+5mbHTi1q07ySXYYaDUcvzk5tQKhzZ0dbU72oUOW7nLgOembUFzxnValkuesnNMQoxOTBIDhqLKFgesM6hi0Uw4CChlvqQ0bKV1OVdeXm5He7u2X0uv4sKCIs3Pew48crP1zsjoxNoNG7dt3Q7++NQYwqxjBxNB3MTbR49x6+Ggutlp/Yq62qoVK5ZbLKF/ghFvvvW2nV52SdA83pMkjEdGUwlYTYzjr0+Ixx2+fmpimqRlY3I46x0rcQ0okkMFLyy6in+CcP+9YW26l+gXiCdxxGEfGBfvTz6aQwEBxyWaVOUiwdFEsSsvtFDV1kLIwPvTAwIgCeKEGFHDzcZ8C7IRQtstdNLYC7C0u9bxun3QZI7zYKuqdGkyDr/xKsdqmMeKXFcmu11BEO+AC5DJuLuzi4++3XzDgUGF+WHB6xPvex9G2YqED6SMM5YPaTgRhEbnBqgdhnAWZZKUOWUEwlCcihyjjKhbtXIFk5COVwIO3ocqK+LmEeu4Vq9Z01BfjxvaS+mm7FENrMzr1qzSRsY1o+fPnTE05V7qgaFw8Q086+rCYjjLw5jo1q13Y+bEeBhXEFP6asiZxw8hVmJREMAxXJWI24ltrzZaJiygMHiiWR0ZG+Fb9AGGBgbxXEEefNvWrd4tVCVEV8URfTQGt1uA6ZiExTS7Gkb5S/dJLwtn8I22tt0ZHR5xshs7tCjwzMnTNtYbn7aSQi0IxwqaozhoDJU0VcHSVKf5jK2UWlgmS3PGhiDLXLDDQMVrI7bCTIw1X78xPTezcvmKdRvXW6riYNDykrK0sKhjEfO/9a1vUR6Do7jnBbGsMomfVBXisygvHL52/QZuQ4N+EB/OQEO9fsHhttgaQSsrCombgK9cvYTVmGby3adXX31VRRwlFRoaHuSeRPMAUoCnn3rmIx/7eGFBqfOkv/nNbwlVwTl7PuzbNpPGXV6+egkTduy4G0qUDRxjEQ5WYizqpQyYYGCCQJ0ViGPq9UkcIyei8Mpa5C2bty7Op1g++wf/6ve//vWvuciiorrMKUBC4IyM7L7B0f/yn//i07/8G2mpORevuUx8tHrZGkuA7AHIK6l69xjQf6oOgHhf+Ot6r9ABCGcopJkBMFeZsTCdk7WYNjPukuDLZ461NF+2mbayJDdtbiQzVZibkdzRO2OBU9hP5WiIcMimWwopaeghUDzjKybYJ6ZCJ9OyPiuj0Mg3G+DX6lh7KSq0ZCOJ9alP2I2XmbZYlu/MWwZjkmGGqmiabagVE3Ap+XlZ9gNIFPSQvo/ODVS5s9EEKwZruH0dhoBBctqPPJSBYlMGGsX6YKJXYGVmWPbvkNBQREfG4JZzaLIsoVtMz11Mzx+acKrpZIoTjvQBVm4oqwrxN8zfOfa2pf9iAXd08BIbN1pbuorB6p0bz7X8yaZqSwF1oxxXr14uS5uydEktVTTWQ+cNZ1j7wQOYBwgbX/PyjO+xAjN4dJKNeHgkjog3o4F8iM4tKoxWoEJQ4iAOXUTvsdVnyKJV0RWfBqYuBE9ibFvfIwxvC3rmQjvKrPhqjRH9xxbzV/rn3qXDCpJiOMhoX7h39er3yu8d4b6qV3caV5XdFc7JTdEMqwuSFsFCwFiGINjYx549e3784x+bHFM7qvUoUKQgGpmP4sbIcEZTYqwtaZRyUWdkR4//jTeP1K9YLgK2jMHs5cc/+Yltd2213e3L//mLvOgHnnzy7WPHNq5b6/KTsM131SqUgnyrpQUcAOHsqscXX3yeHiKNp0Ud/Ak9ysJWH6zgRvg0+qBLw4oNLXEysvE2rBtAUaaCSROTqZ+Ak0iTH0yeyr1c3PKPf/JDdO3b95AiDQ1hvFxgSsFct6hedoCZDl/mr7iI73//b9vaAAlbDuCGe1SduOWENvYCgvOcjP1odNhpSHSbFByJaIBDSwoaQUPemhdxCE4aZLQTjYMqzCkSCZEUPNkI142Q6ZmwooxH3bPnQVWgDo0yxAXiQipkysByucGXDr6qdrcyh3Aiv4SMLPtQhXmVAGqe/qQyZ542ihL+RAYlkJGjRpqglD+t17XNDFYUTzvo8UJJYhNAQNQGlxTxoJoHRrU8iqAiHrAhMEaOAwZJjXVju5swZRPVyK/HCE+WhSKC8BVWBAofAL17oKdqwvKrG4mTcJMZ1TgPf5z0QsoeJBCBRwqwQYuKilRH52mO1gFAyi+bryD4MwQeyeH9wCoFBwDV5atH7diF5z5BSTrZoQXhqpscC2PeoNEo8BXEOg8OsBGQccNXKShKdCksCYGeGnEPLYADq7gMQMkPCEUVEI5OhP4bRx4JhEDEAcmKwBZYGCorHZ5S3H4LOJj4g1ifYnVYCnMZIEMZ1AWm6pyRKF0e3PBJCoAI4X+U9agCnjiWKMyc/kp5uVAwEAUONAgaLYrAQVmfgIIhmB61wMefGBLjtIh5BKisJ2aQR12pf/Ar7xGN3XvPg3ZWHHzlTUMmpWWVMGi6cdMFYRnZulaaDwNVlqwFSyuwmCq/yIo3zYb2yTZzK0AxGroaDygW5uXSIzu0hOw2++vfu+hxae0SR1vccYiKxfpT4dhmjiMrO2dJbUNxeYU5aDMAH/nIx8IGprEQsmer2O3N2cHSJsOVyAOmIt5687AxS7PP/IKT75Y3NggfVzSGY+Cxm33evxsVxQQDz7z8fCjpzIEg/MUyej86NGrTj1CV1+Z0SIVPwXS8UJ08MrM3BSmEPMRjkw1dZFH0T36PPPL7xLzjC09NsbBbWct0pbM0WguTdzWGdqqCz+XTpRMbOArqxhqzN5ZfVFzgOJSmG9cExOEIjpx8WzapI1fl1FTxk9OdrJZatWo5d+P+4Ln5xatXr/e75nBhkS9+550TkKytDsPJN69f0152h5U2trqu4fWc7YAnjgiS7qBVy2EF33BwigTy0Zu4vzRjgTVL6mitRyKcLRjVkjn7UptqiJ/aDQ+FQ/3wQb8CBEuPtFh4y35ePfiywTmfuN32O+HGCqX27t3LSOgf5nznu9999L2P2k5oMFgVr732urDP1mRLdCI+LrLWqNBqYX1ss280XaMP2KhStXPKtJzzjQMklp+SC3dDh0nkkccesVnESjB3UFAJ0iGXro4wnKYzaZiqo61d9ABDQMqKSyZnJm1ONX4LB6NHFpi5x9TQjkZxx/btbe2d6NJDsDj5raNvmvvimbTfGAIsN0fZVIHhXhDLCiBJuPqQWkH4aM5lsGUiP7egu7errbXdTIPLCOYXHdO6cPL0Cd1Rl26YW1jaUDcyZCNBGRpJisrZAQkaPL0LzQX3Hh0e/KHA+ID5CHEZH71VO37iEmnKhjm8jBcqh/Me8oWJq/3Wr157+cpF6dwHs1KdInA2TqwW564Sk0RF6PDgwNDmLXeXlJUfevX1F1540cy5U2Xau7oVQbyoRSRnOHDthrVw5tyw1Epxl4ogXzoW0aKhoUGRzYc+/IFggOFWGr47ywuhmKB3wu+S2qU3rjf39PSJXR9//LFXDx1csXq5i8DGJg1fTb917IQ1NQceeaKvd+TS9VZLgHQAzADoAOQWV8YOANL+SfYAqFcHAO2G2xagECKT8AhSjM1npZgs0jWcbLl+8fypd/q62vIzZzLm+rPT5pz5I8w1/Dcxbc7aLEDYGAWakJxYLegHRFPhGRoJQ258BaYZknLst06G4JsH0k8I0ZB5gdArCGF6mrVAi/PFugvhQvd5qzeNyhmI0Tcz15gZFteF4TrneYLpfgyPQXe3DMBcHM+f0zftHxlZ9+UrjUp0I0wmQMzuFDMBGWmhajMMIM/rPyzYHCzEmU9z+1hqlv/PzqfPzqdMzMxbEVS5ckuRO4KTM52PvPGm5UChOzI17pQI2m4GgOINDQzYGQwOblownFdQ5PAJGs7w9ahdaMXeDUbwMOYK6DnFpt7Ciddff91ptRs3hHVltItd8L22rDBPYR+xUD8u6EZTM2UWZjWuWE7nNcdGbUBmFIqA5k/vYBrwZt2cpPCFOXOAOgAcOwRwg8byVLoBnACrlJ8Dl01TopRGDZnckUWP7zYl2js8RIiGhn+GZIw/tMGsQ9mW23ciKN2AV155RY1f/epXgQWKA0GCIhJJRL28E+lARnpJUXFmWhKGTkyayhEot7nYyFrTvHwdRLfucFYH9u99+gc/vN3c/Ju/9b8EtTFJsqzhRnMTlWHmkDThycZpoFEzI+6JZ0iDDwTwcN++feqFgD/tVH7/+9+PCXydxpFCIk1nzC4pBHLXmINMYuKgvCAWReZVcAbjJRINtO1X/cpXvmLywbN16xYBg3ZELQY9vd9uaU+K52KOTp3Tr37/93/fVhbciz0KPKeKOIMJYh2y8w4fEQvcjFpacrn17m0GcYxiPPfsi2rXSsIZwvTHqC6DQRoN1PEI4pgIg9CCY+NcVJFWaBHApAD0RGONCkYU7MKa5Jpq6udY0qbrN5iDfXf6Lf/1v/2NNsVNSPRE9A4xE+hOj7Azw6HyWXnWiPICQW+BBQQJvJ+qo2IY4iELfKMS2lm7+PTt5YEk945L6AVTpxQQOaXgPDXjhGEVz6wjMomOvQb5Tms7PuuaqyIzK/QNKD8PzBa8i2VAZtQYggTAAfGoi2bCQTYv6gJfBmtf5ZfunUwYmk/gA+XX409EKSKbsrKRvhaZAksnUxWRDmgcDw7IxlLgqVK1Ezc85dReKy4lIgYsqmX2J9zApCQgFOSGbrB6/Qmmr2ACBUP6rBRo8JQiD2Qsy5If8wGXR0VAeZR91zY1dmIqsZlA0eiNM9MUARYyAAZ/mQy6SXw3HXAkY6PYxjs0QANWFawV5iQoPSCcXPeGb6qGlehXKensJfLcn3IKYKSQI5yjIBKFmdNr4eiAlUjo4HiBhhoB9EDy3cefRuqBBYcBwgcmdJt2If9dnLEOVhAGJPWjD9Uzhwfu37Nl292XLl7v6OydnVkoq6g6fvKUs6rnUzgvW1Wz7FuzZceJwqlz7ogpc9BV0Ay3eyW72cx8hROOEiIFqTOW07uQLy29oXGZDoD1dru273CLmTvuXczkLH8KId4aGh4xVZeSQUtzW+60uX7mfe974u6t2+BtSh2dtr2REzVEWFZ6mtlY4XjzzesnT7xz+3azZe4Z6Zm779/tkleU4NcPf/Jj2aHxgQ98wBVFdNSQBm1z5Db1EhWJqGor6/DUC6vQcxD08P5q5IujRhIATuE4LuPU20eP4C9toAS4Jptf6bhMiYlZNuJUL2UlxcsXL8opf5QTyPLLTCkpKCdO3vYG8CwsmT07lr67m3iMfJgNr+Gkk6akz859E4JWXFi9oiOtvbZ/g3RNsFwXE2fn1Dcs1yJbgLiwGJReAI0co9rAlhYWqMtAvBmDV15+2Ujb9l07UWczKwxtnIASaDA3A5A4hVJ4UgjD/939A3wx/P1pxz1HaUs32bkaXoPNEdfXL1WS01QFrGiazIcOHTIGZgeC2Jcs0MWX8f7aQkMC+n7aAM3bgYf3l1Wa/x3EHMHxrVsteMinzc9ZGNpKQO5u5IIdM6V2SoIi3pAThzwdYADS6bQ/PbjKpxMfXQcHb8eCZ5+oqCo3fq9Gfpky2CsCzppVYfPT0z9/imS1Dag2G2BSfTF90TAQfAyWQNvCU+SY6tWE0Ch1LVu+IjbAFAbfxsYnowtOjC0YIfWAlSDAizDCO5NDhZZDO3fvrnswRG2gYYVf2sXjIBY5GjAD8JrPaNt4gmpw+AKaJhvGUl0EGsiM6WStawogonhPm4xja8HCowsmVjmNuskjkTYaYoGYZtJU3tIam3jDFUgU0rCrKvTZIEYZ5R8dCwdOS0QCJ15VXbN507ap6fk///O/kNJQvwLy44kLszIKc1wCKr8pdPib59ev4f5PnzhpvgufVQGlb3/7W6rYuWs7ktFCamZQ2YsFFci0HPnY0XfMAFDIj37oI/rOBokPHnppz0MPOOry5ZdfvXaj5Td+/be6eke6uwZnU3KOnbn6/3MG4J+qA2DTntF/S3osBxLTh0kA3HcCeeq8uYHs1Dl7guenRrvbWq5dOt/WfL4oYyg7dULEZtxE6zll7IN7mp2bmLQ61tldPHimONuvpfZausnpMEWAmSJ+B4PyruFjEtbHPoDWWB+A3yAad4QZMSvIz7Ifn+3blGAGL9kSNqtjhu2O7AFZV4LnpOd8QJrlCTqDKXojYVzZIx+tNgDByxlNlM5lKY0sS0lrKo35ufpAqx8cSIj+7UheTDXemZHluvdF2mKnXFpGztj4dOfgxFxRQ03juhXLGyHtTGdbTQZsQMrP2bRho9tOgeApx4dHxOWWHhWHdWXFVj1ZJaReS1AQbq6AAVIbXUpn4EinzzTn6NEjHG9tXQMsDChYtONFEKYDQJ95UbbPKpltV2c4e4pjz8zKEFnZyik6MUjhCxfB6lHNOjg3fkC61kG4ycy9CwfB5B5ZEA/DKJgJt8OR4iTOsE1W5l2jS6tNVvOBYGIXicAQHIZgHEQYrQoEsV/IMGTWYQ+I2hWBs8yf//znZQANTJ6E8aLXn4SlVBgmKgsdD2GJCV6qZlWQnb7q+qM//g8meM09LW9c0T8ytLR+2TsnTzizWGP2a5/9Zb5ixfIGWnHy5HGDRPBBEZ9p1ZAYhx46scUi2WQeJsQWuhPoIn4eD68EEChi1BgCT1gpLgMP76g0dCmCafAnJjwxIOVPdGnmCEU6eYVRvzt3fvT97/Mbn/nlT0s0rY1GApZTG4fSzg5HDmjXQsDn5l332Dz//LPmZzgZolEwMoQ+YAiUYKj26HW99/T3ve+9TxgIN7z7wgsvdHX2Bo89FvYuetHsUjMd10QT0nU8tGITw5O03UOsNJn7tc6T7xXPwE1XUBABGSnUyQEm0DZPZRUtMTlgWlze2d3f0LDMkGjY7DoeNt9qI8Ax/ssqM3ON74YOAIESnIpA8Es3wESyqaQYcki0Q8HqP7ZFkcgocpXPDJ422aKAvfiAw8iJIQdPQiKYDKDD/2iUmROfGhrDMU2OC5eCRUwJk4NnchBZcvYo6sBXEN+88/lRYyMonyQi+VbrbQjjgMeLzPHXVyKQ2YMKjxcptALCpK9tCiglx+CArDgExAzUwFfEIgEQbFcXzviKOvCh510epRBCdtIjbgDa/QKB+MgsnSAUp8xqpBKYoxYQvPgkZMR82dToV0EwISNRijwQgDAIXIF2X4zkUAcPWvzKEx85oaGgF5l9jTjwvV6kS1EvNqpUEfAlIs07OF4IFMmDff1SfEKXX3jCXJH4JwwjLbTFJ663IsTxYX0/JYEqsNJlo2BqpAw4LJGkokrYuoktPtEZZuuBlWz0RwZAIlvgo0b8T/3dj+3wlpHpCPfCgcGx9s7ephsttjHaZmohhD34hJ6WkTq7iKEYPd1Y2zDmCIKwhnXWMVvWoqRlhOkkuwEojADUqL91TkRjIYhgkVu0JMEawGXL6o+9dRj3jTdBhWLZl0Fn1Dw5NdfrLIPRMbGg1dsrl680qCNcyM3OjUSG6y2tPzUJnu4OnTGrUBZTHJN87tVXXulq6y4w+1ZbY3xCpIjLr7/5BhY/uHt36IOmhZkaZxXhmhks8ymLs6nGPFGOg1Qtcp8GCMUoEMSwHkPxKxi8g9iLixiYpepiJp8kRjWVWV0EA74Xek8PYGuXgFI8lICJWycGJHN/ZAYffFdjFBs4PKDo3KSJVZht7a3G/rWCCDXy0XbHQZ8ddUvq8bO2ps7NhQ6rMRxVVVtNwEeOHnMjm3NyjJbdc+8DwOowhHp7+7RMEyPDkHHwR7DZNLPqV3guFIHsq4PMEGL9Iv1zCbEAGu0MGJ5GMUsqqo1HEuiELlx6RhgyCXN2Y309vTdv3ejvCefDaFaNz7CqSD6lx0+jcU4wQybkNZ/uBCAOG/6s6AUZu3Sy165f48rbvILct948Cs7dd2/nDoyU8PUGgOFQXbWEjuoMSAccr242N3mXyCPEBkDDKRr2SctqUF+NasdhPXinBTljy6+mnQicwoM6J2arq+NOWzIW2CTu1DVlS9Re1FtYZPtlDmgaQGw0/IqNtu0aCQBTw2MjJPmikaU5wsimWNXJr/GQk14RB7/DfUR/5CvGwlYooN3d99BedypFw8NVWNEumFsWRZeE6X4BBxCjJG7YuBnOBtdtEiAyctRqPvfcc3BgEXw6IOBrJpVSu644RlF4tXu4jxDxJPe2GM6kctFBKIKNdGywt3//gb2qU4RwUaEKEDR4tMI+H7zyiewYRWVV9bKG1fa3felLXwahoChs99fbp8AnT53S4xPQOINnZHwEr6x3sCyhq7Nz6+YtcEYasH/zN3+zbdtWTS8lD/pQUoJ8Ttmnl19+2QSO4DkcKtA7sH//eyyIMn50q6XZRWDr1q92DOiPfvTTB/bsX1K7rKR8yWuHjlQvXfX8oWN/vwPgFCCOHcJhAUnKvKN4BKb/aHsAtCEGVlXp8F0dAAPYf7cUSHuzOJthd+zcTPr8bH5WWP5/+2bTrcsnxrvOZKWMWkKpA6A9Mn7O9nUAJqdCaKsjhD86zFTRDGoY00/NNJzCl1o8KSXMCjrSNyc7Bv24p33RCYEDlqYtzDqHweSDzfBhFiDHUqD5gBpL5UMtup0Jcbyb38EXz+sC6ADoJ3hX3PIJeTQppMzFhumCrDDZLc0UEUWyNMkhW9lZYRFwQBDhzhBKTpbQDQonBs4qCFom87HWdWAqvWe+NL8qHPBiDboFgXYp2SxpIryqgoN1IJL57oGUuXnKs6SuxnGWlkGuWrPu8sXzQhYumtY5ktToLBxUqlPDJJkAb9ze3sZGXIVLgQ00JH47Q+jJUvS9+UNGxxhNJJaXVVBUjtpdlkYxrK7CZMbikzFsXoW6AiuRjVhuLiYT4puCY0Hcr6qZldg3jCOsWcMGmY+o9PDhw5hjuQ5k4IBGkZYeO9/C7nQVJHLyIHOYbJnBMgSfxKbo8s7EbKN78eDLinz84x9neiryjlI+U3UcC7Yry5lIsUP31p022XTk+nq67QQQ4bs7QgslZD9/8dL7nnjiyLG3jcrdae9wv6Tm7dGHdmemhmNk3vv4o8eOHautqVqxbLk/m1tuOYbB7Zzk6kTRi5cvCWMsNzUP5FY2yoAnuCe21rnCW9jyKnyURBwmdLYcXNBcWBHKE0IPqkSDDzLgNrSZPHeNHHTJrBl96/Dh3/iN3zAyQjp8sHRht4KGwNTlJuAkLFY/e0p32oQwXfQOPlBgykkr8B8TMAqSeKhx8U4bHSNlGbMG7o033jLKc7P5Nn8rTIchsCTO8xjOl9naZntt1ZiZkpV0GpdrSvhDeuJ8Ef5Zk4eQO8lhmhRAu4xAxmZ+2KnQwZfeadczDzLdsMU5LqVlFT6Zq9cBMDmvCJtiIzrlrAf+KEUUVmAg2rEUfM2xbhWioOfXqBlzNEvmnTbGUvJTA2SySsWV9dU75091DQAZOEAaJbzZcoterV611voxfUUwX3n1EC1SNT4YLhTwoEKQI7/itBfwWBFQ/vQejDp5kKAWq56iNvqqXiTIo7g/Ex8SnANQSlF1jwz6yaqAp5wgyOlX1UjWLMqsuK9Q9cIciJXaKKhF9q5JIl8qRH8QzojwQS2geXeBolqg5M8IGXUgUzNFvAsziBVdNER+HX7ZVCS/x4vE+KsuYEVu4jQSl83aOTHSux0AaEdWw80LnBVUBHsiNFSHWVAanLgIaIOJ9tjMwYemyQk9iIGPZNPjEQGlwPGrCJ4ALoN3jAINbz1hkCX0/0MHAyhEqYKkoCGn/BDw+DOKFWeEtNglD81UL7B4CB91AQIZL8jxjocwSX36639AJzVIdvi9fviY4cHCogphJVE5EwCHDO9NGM93r2pGisgpZXbRfi1is/vwqmNbbt+mgsB194bd9N3JLXGYbr9vS0ubZfDWrsizqnFF/dK60eGha9evGIhBNkuzhfSDH/rQ2ydOXrx05VOf+eU33zoSYrWiUjfUEBnB2L/PtksKi4SxhCH89WJxsGZNQ4g7BnqH+kd++MMfWrfv3tA1K9dYjWA5DTafOn3W0ELfwOCePQ8aHR912eTgCJXSRFEcXMMmSqMNoHA4SAZYgyPyiLT84il+haubk93lDhu9fvWqew1wFveV5ThIhZ7JPGM57Mw8RoNASDRCq6sz0Gxrxe3bPJYUbftqS0ULimyCZVfWS3T3dVsS5pwB7pVfDipoH3pamISNJ3O7Y5IsBd+rV6+qq1tqf7M9AzTMMZ83mm7aB2xBY1llxf79B5gQ/psUtszSmBACw1EdYaYvHT7XbwRJxbBM1w7/MRaH9XLDYt7p0EdaUl2jvTchIwyOOmRdAZhGHGkkUNwTCFZ38CZs1Zk/vvJivmIg2o8dOcqnG3p30ztVIWKaQPWPHjlicqustLT51o0NmzZV1YQ55W996zvieE04zImGt+JAsZPK8vVUmdo33bg+NTGpUm1PXFqqwc7NDfomA1PHsXBdh3DWIcQFBdt37Kh2E3VVFRnJoH8IawC3bAprgvWG169Zyzu89eab+MMAqFB5hY54JvtmZGhRijfn323qYor+FFJUVNfIjxBFwoj7dLg4EA44pSkloMqK6uigkYyraAGBubK04+8cU7WypCZqlw0tWDTQ16/JoUWOGTFuZPmcDp6g5+TpUzhJo7BUlwY0L6B997vfhR6UPvOZz4gtSJB5U1Ta654yaHFb1ohbpWHgVwTQ293z8isHLSN7/H3vrSyv0Bky/kmvnnn650xJ1AJt42G65fBBy5K6cCOSboxjkUV+vmFdSWlZSWn15atN3//+92uql5hfkehQRSx1bqsgCUr6eyzaaAIWTc9MFecV6BhcCxfRZ9hRf+nSRdxwMZOhYjGK7dGQp/B/9Ed/5CwUFsfkX3nllc//y980aEephLnWwtmft3J14//55S8dePgRQzYrVqwbn5yfml5oauk4cuJaVbIHwCZgewB0ALRI+OwEHh2A0HyJiRczxLnJshzLW3wIM+/RXb7rNEPG5PkH6cz23XTQ/q/8xjySBpJ54rORhSTqBl/lVtOEI0fDwaOWx4eGKclsic5i2CTMj4jUpxwwN9zx5rN/k7Ewqog8ypIjlrKgcDqyZxaqoQbKEIJyewnSs4zThws17CAM9/imuCqIa8oLVwVbhuk2gAX00x+P9bA56YuTE2Pei4rzigvzdABgI6owUREq4lqTyzqSVsgsBJzn7YGJpIUak6EvtA70DeommAcQFwbfOwsHiw0dD+pQhLRibsEN1hkqNCYfAjgohSHPuTAeRgKmNULzmVXaNp7ZMzavKTQJqRa2aXn6ndYWrXC4ZGZw4NzZU7mZGfc/sGtJdXVn6HPWvPjyK27hYlxIphLGtBQ0bs2CvKBCNHz58s0nnjzAzOuXNjp/hV3wnPv27aO3xqfwU58BLXIyH05DG19WWu4MOS3I0bePbd0SLthShD0yCjmZwPXrV7UjNpiJ+zklbkdZDpKJ6ZnD/JFHHmEjehdx/pZiw5CL0IiwCO/67RDmWtFusRCvro3wSaL+g8BXRaqTTYTvKJTBoaFrN5p1D0JPOFkMrS5FgEIIlmICTCCvv4HJZikdMWmasqW55ZWXX6KBjz3yiFU9TBhW4vsz584bSlX7jl332P/24P33dd5pKU2OLHOaAv9jltb6VJ6Q6xazIl+0ejtxYlvu2kbRTp84gTrIwBMbUR15yNhZLmRIwa/ibrBxRiSdxQc0csN4iFIp0FYWsZF2Xo5O/+hHP/L1wN69IItKTQkiUzbun6t0eKXAcf++9wiKzADztFYb9g/0GqMZt3N5dDRyAw5K1dc3qAUb+cA48oI5gCt14vSp9rbOBJ8wkFdeXslHyUMt8VbzhDST6i7zojwUw5KShvrluDcyOoQQQ2aGIG2Ta1y+zEJQpaiBaIelYTLG1jcsq6yp/cuvfs15cTWVNcWl5Yi16sdIPPOxyLa7u4eYUCSUTA7SXRgYHpoan9Dil5eUOqGVjTB2BzSJ0a9euvyBD3/I8mbvrriS3xKgwYGwnExAAjI+awtwjD4QFnyQ6UW7g9uMxSHadvpiNbvA542bN9dW1QoJtOA082dP/Vy7ySURGergb8YeW7zI7xffCM5X1XkHR6XYiNvBkDlABw5wVf9jjMlXxf2pbIxr2QiVQK8X6aCxEZ1eOhalT1I4Dz5ZAyWnqEnmWC+s4BnRIGUwZdCuySlddYqrS37IeCcv71IAVB088cEnf2KLqv1J4qqIMQyByuyRR0FEgenFEyHLGcbdNmyQ3xIgHtgSIINIWpEwqGR4xJan9DQtqXZfa+UCVgfSWDvnnQqJiCNpIEfg8PdADHwke1QNq5joukaf4BM8VTjqMPRqEMvQMCHxY7Yv2pkAzRDiCjLCgOS0QM5YbjgRi/7TAeID0yNRQQC9aB2CRSfLJQiF2sgJvgzgK4i9kCFf5PN+2JX67N/8EcoJTCMSFlBMzzY333QdI+Hdbm0jEgRDlPp6xoZHrGFSXlXJtTCmOLMcYQEC+apAbxENQgTLUFUPG9PNjq2kxA1L64VPgiGUmVvQgb/WdB0veNWrXgLMDAcgVpSWkYcqUKh46AbUN/DmvCTUzYonDA07J5T167gLKWbfjp9859WDhwTiW7ZsFdZYTmMrxY0bN6m3sNJwm3F0QzuadxwhM3iiAgfRyLYBYQYeWoVr+AVV06zwMbbmq86aln14ZOTSZUs2LtiCh+mOs0IaB+EuLPdmKhu34GhoqZHgdXB4SMdAV+fk8RMUCECtqGkd3WEjG3rcAYGxEfIoKgiLKJDpLEDxsZn+ZFFQlZZSt8oiHINw4v6u7v6qmnCHsSI2TnBPCGH5gkVDANritRZV19TyIIBwDQatt+3YLj95C6zNdBvkFnZTR8MP0nHemigBOs4Y4JFibYyFiZhPoDijPUA+HRVFYDi58D7cCmjodWccroImZqFnrleEWLDG3i7pRgfw5+L5sw4ealy2rPnW7dolDabyVQ0T/NdmK2W9jJUw8tMZfxKQoM0YJMUTaqTMp3S7kU1QfvOmgnYpsHB5FHfIAa7evNF8+eoVZmklq44P8anCKIhIWtspzrZMXmiO1awOPmgxXwHgujWra6uFBUvIS9yGTEWE44D7SsruKlaLJtnsASlb9hYcfVo4jhMHsFGsYJrYujOtF1+GMxobrKKx+BOsOnHNXclhDnHEC0vRuGF9GP9jgSdOvFNfv8wh+nYC4J5eNyCKc5ow5wohLKTGUsYPKxjSUhBgazjTn2aH4G/rm6NOlyytsxG8ZkmtUz5cD6ubQQe4sFVrVjtIl5mjyIi7yRxxFX/h5i/3rGkIw2x10mxziDRNQ4uNNbVL0zIL/92//w/erVQvXa4AAQAASURBVKwQCiQbXFO036zvve99r+6MoYEwdluk/5XXcvOmvo3eiGbJ6X6G6p588v30h6XAnGNCCPJxjMLw78Aefu11B9c6OE8rwz3hsz3KJktff+OwIcC9B97TcqtV3GJs+PTps2VVy546eKK8dmVTa1f1slWF5bVuAjbEBL6dqSmLc1x2iGiNVcRF+QJvp2cmrRehcyDx18u7zz9MT3oLvv7D9CSFMnj+fgfg/wKoriRPaGqSKD72RpK1SWEYzGVhmYvTi0Ptz//8+4N97UYwim0MW5zq77lTVVlq75O4YUKQP2tXsS5DbmpmGBOyWcBsJ3EnPjYZpKB/aS5bzLO4zUh/WugeTOurSzTT4I93O0La7uzsjEKDJZqJ4K6c6mnEaorqQJY5eML6pdA6hhltf6qRXonpDbdMhCbbkqRUk8NBN2bmOQTXLgduW6Xg+uGCAu2rQTD5YIgvobFMxOHP5DaBzO6R1OnUHLFGXkHZ8jUbVqxeO5+S1d3XS5l55ubrl9MWZj705HuzM1NGhvpMZLxx7MTAcNieSGFUyh/CimVVllXSH2rJ0HgYisS4hAbWJwu1YbJv3z5jHEa+bLWvqChns4cOHdIX+tznPkflYK5BBfDmrRYHm3zyYx9nYi+//BLzUVdoDpyC3XTNsQq7du24ffMWu6aih994jeO1U4HhiObDgHGyOAcmVr8IyhmpOS6BNa1A8s3bt9W7/8DDL774IpiaIZqgIC+tmbIwVRuqufFJN/vMmXPo+oUPfNDAB/w1N1wrIN5BUxcWsQjESolxUpBHWqpAf3ZqbsXK5YZsmOGd263Ays+a7B/gV00mEKa9XmJrbe7KFSveeOON6uSqR/mdimZYPUZaojSxryYen3WxOBYtb2y4IWMRqLpMQNkzdubMWU5VxK8iHIOnYBeeUMJb3IiJ0rlorTZfbegECWpU/E//9E8h+eGPfJDdM39TxPwkBwtCeXkFt4ylZj7tc/MuDiH969eDj+Kfh4dRkUtS1683EUpobSurHcOKjSsaVyEEsZwJRunCXW+6TGEkqpeGmIfEcO9GnPlbqutYIY/V+XSpqan57m07nn/+BddNQhIEgVdpcUlvf0+ya6uHX1KjIYaz58498/wLpSXOgFpl6TKNz3PMZ16hVh6jgmnZ15VsTjOYhSiBO9Frmk3j88aCRRNnwSKwemm9jr0ZMFEB/7x67ZriQnP5xYbtCNowG7ZgDpzhCQ5ycFVLoSJVaBM15ZHtEgdHx+QhMkU0FtTDKgyehE5anqTbmXBsGelABscEucmJBSEahjZo2EJMFEBrDnPplNxLQlRoi9WOFiIAyleOCHs9EuEmUX6ZFfGCNEhKjzWqNAaaPqEIgZ4oLGqj9jhYqXgSO4WRbF/9ErcUVaM6qH1y8TCYckrhZFCtqZJOVfABFaoAXKLa5UEsTCAss9+IkvygeQAHDc5M2C/uxSICj4CMaM8wEm9mrSS/ZhWM5VVTTmwQ2JHirHfDpvIAFXFLKPu7zgm0oYEK9UJDXYiSAQ6GiHxlC7DSdMIQlVjKEr1DKS/fYpfsZEY59A10SZBml79xMVJWF75BlR2BAyAectgqEm+oy7Ke0CIvWfL4448bIVUvo4Yk54BMlXonkcTKxkFIffWHXwSR9/FZ11ll03MBe/e7YvENB/XfuaOjiQbW4lpc09OhmXINpGMQZ8PMjvlrZV0xDQkH+6jSKrT9+/fv3HkPjC9fuMiJ8DIaeN1xIxDVNUuw8Njbb4PvODDyQ+jv/M7vkJ/DATasXtvZ1QEBREImyhudzJ7L1lET7EIG2apGjIeHRTk6ZROj8Pu+YjcBcMeoU7u6+COOCXqYCFP4g/NusyoFQEzEGhmiehk0LSsqdpRySXkZ3snv1xXsDGZgeEB7c+XqVUjm5GVrkODGAk3ia/3VgieA4Dv/Lj+FhtvFC5e0RkwpZEq8Z2l52D8dglfXJoQAIlRdVOCIgElD81ZV1Zm1rarSaw02Nz49NDbd55zL5FAIDEEFMQtzMUot+MCSxb6QUYUZg9CdT47RhDm1453jeJV35BBQDIgVhA83efHcufa2Nl8hjBz4AxBoTHaXYiaw+ClRnIrP58+ej/7osccexW0qJYr1ycyPPgk/S5SUG/5CcKwQaZuR19Mw1a47Z2xYawSCFpGmOVVapVwEuigA+KMDYwoKU8hFCBLEl5aaTPP16wY4xoTUkK/GaFRcMZeELnwwWc+HygCyZoCMwFQXJD2IOn3qRFfnnfc+9ogNZ+b64xIpHsHZ24HZySkiuqO0gvpp7518tXPXvRmZ2cAiSlsoXfQf9H8oHLImJbwPjqgaIdYUarlddGYxlReek1qaukaLUShiPXb0CKbZ2ourQsBf/dVf1fZAkmgos93VoPmEFu2TF2KiwzwF/LX0HR1td2+7ix+DIXwIRTZ5lMUN+kDo7ILEtQeRnPe//8nurl7Nkh4uLy1sdvyUY3xkxvx4TKScoOmW5OUXdfSOfONb381IzeBTFAwGkgxC6CJatmFEQHjqk4sCWaKQLjsztLuUnESgDVtYcS80Fg4S2TsLNfkDMc+1K1fNabAgONtwgkZ96a997Ws7jBjv3HmzpQ05jY2r/Pb2Dcyn5b30+vnS2lU37nTrALgIzD0ADE5M6j5bJ4faiuvkMX18zZHxeOT/z+gAEEqAnDz/4OXdP6PgZHk3xUuGJTfjg8M97a+/8szsxEB5Yer8ZG9+1sL4SL/VQnq8dt9MzbpgMXM+JTs1M9cG9IxMW2PdzuvSLbNwYSJOR46xFzrsx3F1rkmBi0ErO+oE8WL/hWk0h46QHp1jxe0aogpZlmoSddgu5+BOi2p8DiuUzC84fjHZDqyh5IFDNyppd+mYOQnjHvofGemGA8OwGXIMXtI9eQxM8Algx43JiWdwRClfLqPYIlwmPGXCIL1wfDptaGxieiGjrHZZ45pNlUuWucDc7ltX+bW33rhnx12HXnrm8ffs/d63v8G+BkYnhpNNhzTnnnvuQynr5uF1yxmX5YI8AFNSLZXgvU+cPMOmeELs7enuhBI79Xvj2jUpyxqWysah+qVgJ0+d0W586CMfo7H6wLRXZgppMo/T099m+1ooIyB6rf50DTAGPvjgA8ElJ0dwIJMzoc8cFBbpjbBltcOKBblLZsvWu7t7e44cOcIF6c2K5zCNMmh9TFdzhp/4xCf+5E/+GPnCdFPTeD8xHRaR8rR8DsaSAimL3vgrtoNG9CoIPvRMEvLtG9au4+XgIFjUSEGAf8Or5599FvP9KbpVsKqmxtoV6w8su2KMmCCP8UYZHMsbIqfePv5w//69am+5dQsVxCtbGOAcH3/uuRc4MackczUPPPCgr6QPDe0+ikSZKhUukw5eMX9cJSNOm4ZI5HaIgIfEKPQ+/PDD1gF6t67G9Dn8AQmupqPbnIkVO2Rq8Sdi0Wi64KMf/Xiy8d38ZzimD0VCXHywTjhMjA+OYK9hRy2aFo4ngQy32tF+S9cTPwG3VxsCFBt8LREJGulQS3uHWfnbMrz80ivXmm585pc+u2XzRq7J4nv5hVO6DebL3Tdr/r66jt/r+8FPfxw6wNMzuTkFFiZEHSMOo2xIIAgM1LHBTLyFJAcIH4l+kaxSeaiET9odApQCAV/xjWbikqopQHv7HX/SFulEKSWYfDK/gQPYS984YYmUnJjuue8BPT1/4oMiaiF3WionXVILPoNMKEDp6Re4C2gqbNhVtWwxj2y0VFm/QEmnJ/RQFar2Sw9hCzIg1EOiP5WiEn4RGGlUlzMpVBec+eQkSmWWASHMGcD4xIpkgJVzz6DtiZqvoDyAeyQC60WiIlBSLwSAwkl/hsYoWa72bhF1eYCCquLI8SkaIByAUiqCBVk2D0YpQkOkwNZIikRF5Pd4ka4IthAuhGGCG2iU4tElhh4WRaL84olHEdXJBgFsUUQK5K248OLPxJ8EW6OZWlu1QKPE/trEucGfjEK9UzPOhvFCl+xOgY93VOgAKAs4KxY7qQhAo28OWYYVULrTVtzJgM/+hJhSEMA0JKuOTWFj6u/90kMYamgZlmWlFRiRW1DIPIaHRhBgalnLHQ7kCvtFrAu8fevmDduJnJYKlnEflDvJOGFiLsYNDA7BwzjKBz/4wc2b7kKMixsgCKDVnw5oE7Koy4JjuDIe8ywxSmD/urfnL5xtvnq9t68n6hA/C7eojn4Rz7AZGOcibPKnRDmjWpCWqnEHYqgVbXOOZCaFm8YsRWQQNWIQYgFXlhmQn1rk9CsDKnDKQ9hOkzSW6DTl8qrKKGCstCVaXTZEYx+Hwfe9c+JtrUIEvnH9Jog5HQwaIPOJZsbJjjjxSkvthT8VwiqiS+9WLMjo1bgky7XPyXzGrGadr7QmNwh7PjgCzWqioDM7dj5g0wX0cJXXUyngOGBpOxcQzV6iejmRTVs2j9o67fTi5JpJeknqKPWn4tDgp+Aj3UJPQS2J0BTzfziDS5gmmEMOsMYSMJ//wkCkebQENGRkaFi6EBYf5LStFp9V/cST74MkT8214YMhRuk6iD29g/aUiKp1AAQVQl4LQjDVpTCqKCkN6kv7BdDaXNLJWAwabNBO1RZ3BR80FS744PrRiDqOGycRBWe6yjBoCH7SWOqnESUmMDEfzoqrywvcZHDx1pXLF69cuUSoloqZKXIypupIBwS0y0x18RaB3t38YgHDps13QQ8+6CIUYZkXjKU5xrwpmxesE88ZJ2CH7o4Jh5zMWwgRwghhGV0iNWK9euUyKoASMZw/ew5W+w7sNXhGQHpxFNLopqrNV2iJI/N1ThgpOPobrEmAizEemFAAv/A0fklkNDyYZLKbgnBZvqE146BhmeOiY56tNDWvxZsYe1uPTDD1BimVWQJMcDeIdenPH3zdknxrjqEkCNP3M97CeKFhk4vRkbLysAFG8A2+sRu3dpAOhvNxSAAHDuj1mDeA2Ne//nXNMN6KDyC8Yd16f+rSBg+zMItFDlzCTLuAEHXo9be0tcZ/ccYRNe4BePWty2VLVje39dQsX60D4BQgDlt/KMdQ+T/LDgCjoJl+PZaapU2PVZXkvf7ys5fOvp2VOp6fMVOQs9jbdTs7mWm3HMeJoONTizNWM6VnC9ADWW4s0gkwwZFsGMVSym9wSVhfgMtWBGU4ioh+hbOA7AMOecOAWlgd5OwEq/WN2hTk58qkg2AO1SwBPXEZAZTs/eLkYainmfwL7x4Z8NwPHyX04YGMzQVvL4hMNSwVuqD6ppTNaIVh5uCqXAsQIoPQ/CcQHG9qyiN7ej5jYmZhfCZ1MTO/vLZ+2aoNNUuXMbGrVy9v3ri2tCh3Yqi/prL4xNtHrzVdnbCFID3DOCttVAUdsBSEpYh+wORApPAk1InDYRomTti4hy45kUM6RQ2udXKSTxPS8SFcnM4nX3T5yrX6+obP/MpnkdbUdH1idEzrQ1fNob1+6DWJ7p42UyMzWwOfazpwYL+GgGPkEKiiPNwmvvEAPA+r0VWIsRTT0ERb4cl8MEq3HCZy4tWue3ZQacGKHhM2PfXUU5/+9KdZsYVclmeQJrTR6BOx8VH8GCMy8MEeMROGKgVfHqs7tJWO22ZN4HNxFvshH694Hous8YH75TdkNparA+AOE1EVvnFKwU0lsrMWlxs0a6QxdZ+3T3VLlvDAZA0H04aicAPt6BUmQGnduvU8ydjElIokslbrDOFpaAOvmC1WWOOnThMFGCWDbdkcxUc+8hGWrqwOAD7Lk5fH2T7EY2ujEW4DWAyIpcBYf+8//af/9NnPflZnIAyKLc52dnaQoOlW7A0r+2+2YIW1rxgoM/aaAeB8tGXWNFrzZgBx9+7dHGbkv4l0xc1VStE0yIknStHAl148+IEPfdhNRAbZBGEz05N4rsuHG3YOnAsXreTe6ex45unnJ92Y1tDovC5L68M+9aQR0QIyxkQtw/irWrxjhWYRLZiGOkyOQsQ3PKG61MBcN8WIja88EPOVx6ZmzgchI20WHZZHEXWxBY0CDquRdKDH7vHWfK/zWlg1VZQhyoU2qsKjXk0AZCBJtUBjQIYY9N9AoFTyq52uRh0DGVug7ZFZvdI9ZIouRaTLI13t0r3LpohP8JeO4dYJ4IPqPPKDL7OKUBQU8n+Mx78LUAcgIiMFBPSCCRq0QfaillhQOjjY6xdkZPqVnwngGM6AoJTfiJKCahfbeFEk/gIIMRnkjGhjFPbyAz7hibsaoaGg92jXEQGliNJvJD/WoggXjYEeReAZmeBPiGlJYaWu2HD7lcegA2QifDYug1EzFfEngOu7gqzGBMkZQwcdbR1hO1Z2BsIBB00/KDJH/0reKClNsIUMusTtraEDqThN4zNVhEAiUBC2NEFdEJCf02BBqf/brz4M0Oh4OLOFZtDjDZu3CBd+/rOnMOjuHTs5OFtb1O0QQDsDbzVdd4mGyeHLl6/SYKeV5BfYoxN2x4eZu8FBUSJOPfro4wQz2D/AKdNCEsIddQvKjx47RlmhtXr1WhdrkyKajRY3LF/uqJmma1db79xm4TJTGoECxlFlFkUkUMKdKDChFU+NKg4acGQDhU6c8niPFkUpFefaRFHYDYLiiOeklOXleUwc4YPYoeoIT41eAsCJyeL8Au2ESC4qEPgO+SPd8qpwcrAVQZhbUBQ20cdYrby0QnXuocQxWHG7xvvViMnIyc7KwXrvJMGe8e3pZ56jo4q7pAkCVrAraC9mGb9YHjaPjlgSaHJnZjJZ3pDW2ubkiqUxAMUitcc4DwlGIPT5MAr/kY8JHMRnf+Vz+hAYxcFxE0hDoMZMNu8wSVQwuHtFHnvssbrqamhjNWfkK1UTocIckzUw0AZE8IciMuVDjRhiI/i0Wb10juapK24FZgPUwCcpCEdg3dLljlDg+l959aD8Jqp4eYrIig8ePOjMDbXzfaoTT7gesii3EAJGnoJbSbYwCkjoj7MuET6Oa8mDFdoYLY0FowihUdAgYh4fcKiiGjPl8Wi3mI1ETMjOSIeb5aTJZoxKwSjSuMToINBLggqeOXPqzTeP2F5WVbnE/QDygAx+opPhjkDc1tUxRUSxVY00R4tCG9NIwVpnQuRlcN5ALICqVso6jtdee01mCHz2M78Mt/LKMopHwTABhrpbRKzV1GWCMzKxmrFoQmSAlU3SFgJBksayCIgZX7eqXgboqQixcJMBAno4Nlk66chgvx4XyNk54YAOjte8DQF5x84TJ06BpgPQ2dX751/768LiMnflYAU/gFf6hyIMMA1WlRYVr123Eq86u9qwnSgdMckQOBBxANNjNVEBoobYzexFisw2bsLtEx/7OLoKiwuIzPG+7Ouv//t//Tf/5t+Yi/jmN7+ZXxguKTMERle7HKTaP/7m8RvldWtutvc6BtQSIHsA9GB49NzMrH9WHQDkoCv+vvuStrjgGPz0hamF6bHDrzzdeuN8TWn29GhfRqoT10aTwXcTAamzc45YMOxvAbolQIbkwzp+YbEfZ/QQRGi6jPa5GSE7Ux8gLAay14H7np9zeFC4HSx4K22nVYuL2Y5D54jMqhnjd+kFbMK6yTC6wHJNDdhvQBUtZo3NiVoIlD/xYsjQeKEFnl4E4s58NCmhnwC8bZQWninnrDAHN5G11nPaeQ7zYYI+GW4zCZOuMzOXqpOWOWHzmDNvcwrrl69etnKNWWXWWl1VtqSm8tSJI8P9va0tTQpa7tk7YC/KUl6RetBD6NEoNkW3LZWgtLFVExNfvXrNcTdSmAzNEcaxPq2Sgo8cOACCbo8YkW/nG1kQvn3owx+1hp7thEirsMQqc2icOPGO/pZwv7a6WhDpgAS0ALtt21YmiRVMQ1n9DXZkeBgyamGM1Jiqa9TUzoorK6uGRtwkc5uZBwmEQDksjNYT5kL1b3/2s59t3Ggb1CZOCf+tIskvKIItP0ks6FLEu0rF5aTAD3iHOa/LnBm10Rye8NL5C9rlANOm2MEhxggZQrQfU3PGLeMbQ7ZBraOzrc4tH6tWYRcPwPqIU8t19txpZT/8wQ+p4saN6zDkH8MAUFYu0k6fPQMZo8bQ0MbxtEbY1asDID/OQN4eA6RZoKux9ogftBeYYJ8PHDg0G41QyqVoZGFIHGZUVN3YuHzFipVEwI3zoitXrAYNsVToy1/+CxgiTffGsRCWhlpiZrodGvxJRUWlpoRUOfOK8iBEVNMKM+te8M2ghhUojz72CAcFICD8sxFWMnr44QNSNHPQ0MoQ6C/+4qe/8P/+dwb17W4yDIQ5mzdtIF9WoJlyipQdGsePnx4YGa5b0pCRm82ft7a1l5dVsRs2iHvQoHg8OcJpAqFjDji+qoVAoSTFTCa0/amp1QRoJmBCZzhn7zIgHFtwlQTNfstJdjQK2n5NnqBUwyq/oB/HvMgjv8Ec97FaZgw+/UxisHEm4Ks8ykKSTXlXC9XSmR8cHosTOPjGqapRXbgXy8JcfpDRleQPQ6V4iDqyluhPpIGmFOASFfQnivypiEt+AAEWc6QHJJNBaGXllC1xDmEwHnpwdlptLCgFnvJAHhylAJE51i7FVzDVC76y3uk/ZOAADhWSR1kQpIDpHQR/Svdn5IZfT8xJn734pZxiDBV5kmPTwiwBkj1eQIMGOB5UwFN1nr9DOCyvDOumUEp5YAU+DIH1Dr1YJKKkOjs/gZVHBpJS0PgdYlUd8OSZk9WeiT4PiQ/tJotsRz5kLOMHKrJUX4Yb4Ysos7o4ZIRYvign4PSE2SoreKBdVFSzGzPLJk/kc+p//H99gF9jsZxLVU0tmzTjYEeOM2XhZ9N2SUnhipWrmQSf4tS/ipJiBun+P86A2nV19RjF14eGnPlZO4qQxOZ3794jdrE4u8hGNLt1k1NH3AwPAyMysLEA7uDLr9Bd4zS7d4cDTxwkZ2VCUUF+T283byU+Fm0wJ5wFSoaoE9gHMdURP5NTnOthaRIhiY9CLqIiDF+ZDYowIsA3QTs1pSVgUZw+RmMfC4QtNsGQAMhVdRoMfSkvZgBOHT/BtXjXZ3Dxb9CexaB8mkWlrLRAr2DXQ0s8/+2v/yY6X8BtuJHC5vkIs73e1QIxU+OQV5cBDwsbrG9B76lTJ2QLY3jJjbbcsXkS7HJro+rYjsNV7VI37c83yQMlyLBhukuc1EJxo8Ko42ikqM5gucXQ9cuXWX4KFC4xYGXxR35PJDloXrgX9pI+0kBPDwz379+PCRyQptcnCEikRoqHoD8tjU/nkS1yFT8koh+h6wTBrwnsZBOs8/40RFmf6Kh6NQ+6msSBfEBIRMiobQOcyYCjINEYoSFx+GBXflYe728JluKUjgQt9E9sLMzp65qBQzH8qoh3aG29jZmEDpoUwo1O04umRY3YgjkaOe9e9O4wEGIOXYU8UcJBTgc04bAYVwNM9GXlpRfOXzx+8sTI8ERnd7Al7bHYSGZf2ZvzSJNYIRyGAD20Uz/HQqhOt0G8RT9ZGXmVlxbjZFlynB/XSxbJeVG3jIVjxWPvfVxAoBQDfvHFF5FArJYNGL/cvXs3nA8fPoxF1B58gwfmCE0sK0Iu+IDPQcEsmOntRRQhsnZM8wsxDkUv3boPw5wifiqanpFCFuA4oYHeGnIg7ldffU2UU7dk6cXLV/77t79fUVVrc3lwIt32B2ctX7aMBBmmtkrwt3HTWmK6cvUifDh5EyooErVTjyDKjAyZwSQOSP7kJz+xFZJpY5pZfmpm1p0USsvDRUvWX1ouuGfvbtZqtsG+5wMPP046fDtdbb7ZMjadeuTkTR2AWx19NgEXVSyxBEi0qwPwz20GgAR5WM/ff7ET1972wd7OVcvqWm9eOPzyz2dGe9LmxvIyF60CWpydMv+siMX8duparevoHYqtmQ1w3BSWGS4ZswgVM6kcXyEUNw/AQejR4aRTgNwFZhAUuyzNt3DIciC7BAyE6yfoALiGOAT8pnaTwz0pqiAhzTBxaG5D26xYKJu0nfZg6AsAI+JJlh+HhjM3X9BDqhlkSs2E+0rquVWWlScNt7bTjFdozECzYSY9M29yJmV6LmV8dnF4wkGk2VW1DXXLVxneoNuMzp1ft25cdVmZ9folZcVwi0ePU+Mkg4aiFzRnPSNZIt3o7OxiDrwcjc3LL4Qt5WStZjygJLNx4tXJoiBn2lA25uzgnebmlqqq8jXr1pqG0kZs2rSBZzp8+LUrly5rO+/asg0VOkEm/C1QEU8Kmmm7BplXUa+WBckWr/MnvF8M6fCBcbFrRiSiGh4euX7DQc9xX2zYvwg3CG/ZskkwCkn2+/FPfJRDswYScD5kfCI0Zx5sl+IX31gE0piVIlpnhrNnzx4mw7c7PpubtQoZPqBxEb/9m78FH62MicrqykpziZyAgnDjf1atXmEpi/l9efATnhZH+eqETcM94g1OwEQib1NVWcmHELoNPM4S4Is0goCQIvT0DTgQ3RtE4QaUhkfDUY96oSBzzhprzOE3jD7wrhA+cCDs0g46k5wP/tZbb+mNyPPAA/dbzS+/4vySeV2MxSgFwzGAFRUAGrDDCY3C3IxOyFoChTP24g/+w2RgwGFvw0bJcMkYCtJwr2HZUhd3OlPMO3+CFTyMTR28tAYUkoD45JwxWwj+7b/9t0IdzfkD9+92+Tp+VlWWayK5U+ZgrOT/85WvONw41X759Gy7i44eedsRKQP9w1Z80FJiwhxoo1E8g7G4xOWqRTo8Pd41ZGhULxwosL6Nhtj4F5KFK4jFWChhkXS65BIbL76ycQCxglDwXCIHS/QUw5+wlRm2Tu42AxAa1qQLpA2CGJUDU3WYTy2R410GM38F4aqWYJtqxEZISvdEmOqVWTrMwffIgFgU4TC1jKQBKxsgyPcOVTlVQSGtuwQZAvJLjBX5ZZjKAgugUh41SjSIEJn57q8XT6xCkQhfFYpIJ1akwdDjJcIByp8xD8TUIsUTy8qjUu+o8+KREnkCMUhCVbscmeCcMVxFi6qxThWRNC9qBxkcKYArJUN+USEgHvmJGIsQxWMQrvwRPdIBEHrKOsrZxg955HSmcww+ZRBKQ49YZSPeiC1801NCeOPhl2TzFXstD6EMIOCzzJBJMsz5NDQQbuahjeF9aIjyGD6QQcAgUXWwAsQDB9WlfvOLv+0PLoxJa3noq2he3Pz6m2+ZMTbqj06LTkU86uvsaFu1wqD7nKEgXsD6RaqvW6wmpYjfbHJcL2REYcuWu3rCiQO3G5YugaitJ5ojMbGC4eLJedtZJlpu3ebgKRinbGDSKKz5ZAdQEjOk/YohdH8ZCQcH9UB8co8vXsBeCuvSdeEUSIUSCBdwn9kgzyd/woqv4ROZEJdB/LLJw7EapYC/bIzKekF5wJQu9CRR3rlx2fKGuqWdydIaImHZyppqgcz4VJjv07zDIRmbCxM35F1eFhbkGelRl4F4ie973/sSNQqdaVqCjc799otAKm0EaGwynFYLT2u5tBNOD2Xd/mRx5lYNjRO2Fdu63mrks/SgwIG2Pz1BC5ONOGASJdlp83gl71b3dnR2rd+00U5rrgdKuCQzWqJVGB4DSoMUvZjDmn7y4x8JoPkRHLZAXy2Qx38tBKbBiibQZqDoDPOvdK9VZTlXvmbNOuMrgGtcFdFsywkIjWLmauHsZLt1u4WxwQ1kcWf0dEE9FsOi/IDz/Lz7qtDCacr/3W98h9VZgiWmtFKfQltlKJt5SDCdc4z/GO4BhHpYEgECG8YEmRHCNqgcKagRTFJmnHpKGMUeCvML7YGG5PLly/SViQCLnJdvD4bpYEPkiiw6LCjpZFsxc+H8leZbLZp/OGgswQTNU1lZBR9tP8Wjt5Chb0g2aGmVl01g8IyQHZCqlIYPry5fugQ37Rw8e7q6cRh/GKqxfLhRHrHLM888AyD8cQOZbA1KFBuZodc0M2U7gdY6cgBWPimLyQhUBUGrAm6EYjKKVxRE2heqiSE+s226eZYm6Q8oRWOppe22u3beg28vvvTq+StNGdk5w06yGBoSC2LU0ro673RgzZpVFt/ULa3GbbdzCFC0slcvXzOLokZqSVMhgGqsoEL6V/SQXCgt0qwQ+JVf+RWLVRivwX2qZW2uocTPfu6X4fytb34H7Rs3b1NXSUk5AnWV03NKLAF6dwYgdgDEDv8M9wAgAZl+//6Ld2H67ORYUX5GdVnBW688fezNl2qKc8aHejJTRKFjYmqlbALzS5ecqZ+cYRTuGuA8wwZ0u9GSdiVpUewHmPZNRB6uZbeiLs2aHzugQzgVLgtTemFeCccN2S2sl2x/mWUyJCtWJmiP43qCB/OECQYIh5bSwwCDb0uVqs1LcVYpOdIx63FU5yssovFao6ht1RWkVMyPUpkHsJ3DVzMYmRm5DkRbSMueT8san04Zc96Yu5EKSu+97/6S0vJW287a7+zaeXdry601a1fdunWDour/R09Fr1QqyIOdQx0AhCo9uWknb0sLV0x1VQEZvkg5h9WxOOZDA/u6u8WaF86fFYwaDqCKjIhHMsPG1cfAVBxmeNiQLFAUVRfIXJLZdm3Z+MSoywSBdQ0IZOizurhQBSkkrBgwbuCY5gm7vGhAX3vtdQfE79t3QIMiJ5/GDKFHWC+//KJFLB/96EdZut6aB0oKGkQwjgsUvyGRkTJD9gLa3/7t3yrreGtUx8Fsf27eehdCbt1oZuYGs7hoS4BwQ6mXX35Zq25IC2R+gMXZtrl23WrnpIl9cAZ8OU8dPw6OQ3jUtXb1GnwzAaIJGEqua226fgvH3BWDe9QDM0+fOSunNpRFj4SV5CHGxRPdPgyZHA9noQDuXUGdEMzU+mOyIlyQdEWMCmlWjEfokFgCpAvHQ3KbqHbdJ2zffPNNHRIbf3kJ8qLAQvxwLOnMhGNUY9OgA2DyGVZ0wMY3vgil1642YS8E6N7mLRuzBJkZaXCAIRKSaGFBDGN1osZOD0pjaqBBzKDUpYtXljWuMAPw2qFXCNR+KpGDtlhxV8w/+thjTz31XEvbnaV1ywZGh7U+/YNDWZkWtISF8jCnkPwYfPzphWQphrrwxycaRd+AVS/XTUOwWuSAWIqN4by9BwlyEjEghL5i1UpigoYmhjNUi7JCERpIl5CJM1EDcTVsoBwY0lsjAtymTkBBgHxhBQ3kY4sqNBlS7NvPLyo2yaMKmUHwCTODqdpGlTwIgYlHIpz94gY4kPdJilzgq0UR+BMNtL1L8ThtAoaKyAl45FJki0qhJN3jRREo6YKiXQrg6opVSPEJHC9yegEB04iMacAEqFjEJxnio4ji3sFBlEcKbCN8OeOjoBQPmODIBhOlKEwobso0Wfskg+IeiQr6VbvMcoYgI9kXISe37M/IHJ/wX6L8GAgsIKoAhJwwyj1alnkDhZ8EaigZf9BFOuKBd2nEJGrjgfydljuAR6IAFPrjANuhDFp/KZgvA61WkXBl4/oNyKfnImdaAU8qJ7qmdYQCEz4tqkpso1OP/fxLsjpPJpFZOmzc+6SkUABHtmzdBlcBAY+2bt0Gc4WjwwNGpnUAaCF5KSUIA1FzRbmcn6UgIHre69dtHB0ZunTxtLstIj3aRL7Vfd1MyBR/fmHR+XMXROGwNWCwddv2ZcvrnWos3qKaUMdEOHBkxjmwAIWqQy1OIZIxcILy4LKxCmwVuwva9u7dS044yx+xQG4C91FEKgryjz5hBD3AFOxQKg5VEqT87A1Y1SGqrfWOQ0gxl3tVI6yUdX0sOPfetysKGJ5h6XMyeAMsl6epEKNLF+sYQRcmwsTQCATkVYsqyE8Rt/+UllX19A9oNaUghPeBqnOTDFkFhRvTcQxbOsy9LG9wj33t5o1bWB2NgUxUO1R4oRMwJFRskYIizVt7Z8emzZvF7r4inMhooUANJzGWZBWBMEOlVWSEURb6wUSr9o1vfAP+YvcNG8LZ1TjDrWMy9NSuifViGcn83JQhFgg4+gl8Pt10pepMmGqoaAXl415Ajk48IyvDNjsCIikcIAU2g9uIQqYV/sSNNJSKuXHMHgw8P3nmtFYhP6+Q31zaUE/pTYPIYLEUkpXVsMEnaeO1WfatlUVTpB5EjEbMlF8cCZrxJCP0GDU66k6JcCuFLh/vRO4OstQH2L37gZ/89EdySgSHAQoLoCcOW7N6o9sf33jjDWOQaoGh7b+adsoAN0cNIo22kLguiuFGiphfWNDbExYMqAjrujs6dcWRDLJVpzDEfKwwMIAK0wXYyOPz/hpRpCGQvmEUAVEeaLMv9ULPGHxxESHOCgU8BAcNshAumHcGUy3YglgSp5BM2Oa2qkoHrhdotsxvtLXfMapkH7Zs1I+88NaxYyRO+77+l//NwaKIv33zNlVREAmcn8xod6ESU8gMMkztH+gB3zBcTZWu1HLipmCUAUoAwtbYP50hGpgojuGqoIpGqdFlEyvmv/nWYWUnpyf8fvHP/ssnP/nJvIKw+U+vXxHX6xSV17342jl7AGwCjnsA/tluAkayB2f+wYs1uDlZzlEYqasqGu5qfeu1F8Z620YG2ssLsnQA5gwrzIf1qU7pIcq5WXvG0sNaIDcyLi4ks9GmApIJd38mwwRGjazecRwQ/XQpS06a3b2hnXbEqCbVAj3tNmj+zEhfFHmGPQNZyZIhYXuyn5hk1aUAzQHKuyfBwZR96ACE7odz8ZJnYmpCp0BOUWxWOtiOFZrVd+EZNIs6t1JlNITBGXrRa7BnKT07Py0jd3oxY2x6cWxyYWo+dUlDoz6AjaTMEyJWMdl+k5x8MOtARhtD2ZHiWi8Lcui2BojuceTGhhmIP2mgKvRxaBTjYiMmQ3geZu5X1ED9zp87Y+CZiVFCY2DUcu/+h5ig/j/NNC5XWxtaU9ZqVb0LK52jxQUlhzQsaGs0I3b8awgopCZGEdDYHe9EaaMZ+uVv5UHItWvX77v3IctLDfkJ4CAA5wsXQvsiDv793/99EyyKkxRPBdr5ixexCy2IhSFLjy4FM0Xz2hFGQX9iFWo0lm8x6ksvvfQvf+3XuTLtCDj29GmhrJfDgbs2bY7+nBc1EKizLhQwze1kYn4DTGMiRnGRo/2Sf2VjWCdgGoRf2rRxI4c/N5tind5HP/4xTsmcJ8aadxK7m8HmQp0TTSg8OQXgh5HgmkhkiuyN/mhJjVwAiCF8AfQgBvKrr75KZEkgcpee1ZEjb9XXN3BucvJRHe1dmhuNFCYcPfo2ugCEvwVflo7WVIWFx9QZJqJ2L7hEjnjIGZow1NSSoCaDV+d4nZlR37CUqxF2YykNsUISD/VaYUgcXKvxHXXRCn1LE2vH3znZUF+nPWq7cxvnjYYg8OTJ07dbWw3ybtp6F73u6u81p+18Medw0OtoMoDAClvU4oEYVcRVX71DBhM4cJ6QwhAUHYAzy6KiGAIB/plL5NxQ5B3H9PDRrn3BGQ0E5yyDr0pBXgaQ5advlLY7nDmRwTOARq/eNQo4wApAD3kRR2KeDDTPaKMOAPHJrxT8fcUfiGGpdIRgJtzU6E8kIMrjT8z3IkXOOASGOkyQSAQeJkNbFAdQflXABPlox3bQJMLEb2ybvPP/nshPLxLC38lRPxF/nyDj8QIsnYnF38UWpWrEK+mKgCCFySgCYekSvYSqkgcQf0IMpb568fiiFNLcnkKrsVrx0Oj8j12/MqNUNowiAr+oBpmj8440n/wqiDT4Yyz2ejDBJzVGjTXaGLS0rs6fTEMVCZOmVJTwRMbgXQHXPTDsMjY8Bj48OQroUQaGaZKKAoAMVXJTKUworejF6VK3mm9SIbVYKkzxYI4W+ESFRGYUemRI6od316vsrm13g8LfwcMMoGV/JChfUUmYNbC1EfH6gUZ98nIybVeta6hHpHTa41ZaxJw6dYZbcUoxFyZCshBQf6Cn2y6EhUvnz2Ex7AVt5jcKi0vVbXOLZXx2PVgW/8ILL2GE8a177t25fu2aqupKwGHCgGkVtWa64j+ujdopi1N46iHyyJ3du3db9id+Mn4AGXYiGpMBi1EHMVzAIAWlYBZisRJK8I9y1cegpvKoWqX0VXRC25qbbqxc3iin2okTBFcKeNf+iWAMXpKB6RRAKBbJEZVfA9kQg2pQxOk5nLTxi0O37YExk5z8PI6bVlPTsqzzFckREviK2zKulCE0LiyOBOinwx9AaNvX47JkSoA/ssGZ9jM8vEK1RkI6bsOTJplWhx4OQgBDYKgBQJ2KNC3yQAMyUYHwllbVJxe5IwFMLkZjo4eGfHAA5Ka1KzjMTWOd1lZUgRp+CqrW5VMvQxXyG9dhJ1aFYakJX0IURrTeaTHHa0IcA7EXAlACWR4weQq0o58ckQBDaNdUhFOQbQLWON26eRuXlq9opJO8E8naA4AtyqoXUfLYEqwurACWAqAO2nKiWmcsCfTN6YaF7xTGgKDj3qi6UJiwdMNCVDFvdsKkSm53T6dYAW6OVTC5DILpl/KyGjzDf7yKj7Gi6JWolvW9RMDRw9w+EAsih0ZGyisrzJPAEIF4wjmZaqBg8tQvXSI/pQ2xQl4+gbrSjgbKbEgMsboBDvahZtBDF2SwDlFsGxXG/jesX6sDADJxYIU2GEvB8Se2oJFiMC6gICmY026CFoZpwzOpdqequq4bYhQJV280NVNs3W1jS//hj/+kpn6ZXS3N15tBi4fuWXygajTq9xoxnZwKe3WmZ8IdEdR4/doN7IsQcUM6zlNdQZtfRkqlwfGri8JFQMnpt7ixYlUjTH7+1E+ffPLJqppKcnzj8FuQLywuh393dx959fT2l1Uve/3YtZKalddvd1Y1rMwvrf5n3gEgC+r37q/rAjQF4Vw5W5rHh+urSttbrjzzw29npU3nZyyaGnBn8MLMlKMFLd2xctIWAGeBpKRmmrax9cUwzWxY1i8ATzfUQqbBfqcmNKBmrjE2WwfAFnNrfuzrDYNWru6aD8uGwqUgzglNMT7KgevCmSzwWZPIBi3d9/iDsLTREKaBgFMG/5gty4jmxuR6BnjI6HhdSWY4Jk0HgCLJbw5BlyDsO9U0OmMoPOEoZGHT9Pzi9FzavF3QGXkOOJo24padu3LtuqrqWmNhA2HZfQ2lHRruy8xwdM8SHQAuRPgoqtaF4KA4BEbh7nDKAz5fSmGQb9EpbKUwjbDROTkhlO07pJPK/eXXv+oTp8d2DB6j0WomaPEDd23d4jYASuvdXiGjkXAozM9TI72lbz5RY3flcuDGs7Q1jIuh6UhE/iSeIYQR1FXzxGGuXr1m1coNLS23DezCX5wHWwtsqLpSYOoAeGK0x4WCVru0Vr08rTabE/CoV9Ru9JoTY+w8vJYCXRysuFWRA488bGAIPhwIs3XCz6FDh6ARsqWk8hvyKM7hu6ZXdY6HNKqEV+bcJG6U7jDl2ioQLDvk9q3DxCKtuBj30qUrnLzgXnVjo+Oc8I2bzexdECLFCdS0jL/CIheNsc3y0jKRvQF+8CHMh8gMGY6UIvFCyCFZNPKf/INtAFYQPPHEkzDHMRleO3RYjQDioQ2+gJjzJHEDEOTlNKmGhhD1egDHB8wnTTxExalTV7ZvXw8lXZTf+Z3fpW9uOzZXjANQUq9xNz06sjh27Ai35uFRzeHDVqLtJT/+6c/cA/DoI+9BixkkEn/ttVfxnNatXrNmy5a7L169cuH85eKKMmcnMEB9cuPgcNDO8v9KsSCCBjB8SOI8qIKDvfgAT0GYDidxW8mJXjgoLj/NhCGK+GcQ/ElvXd6COumYAz5uxE4UGiXKA235YQi4+pzBCJq6MBzT5PFASSKToSFeQIg9SWu3LdqzulI6ZoKgIJhw0Hb4E3oRmvTouMCU4l0GKLEdZdEuUWYkwxmSakcRbvBHciIHwrGW2ArDARBVcDXKUhIPaBYdch0eoFQqRR5/4hvIaoSnlt0nJHgikhJ5A9mky4Mn0v16VEf6HtXFP70AC1sMUUROf/IeflUhHTSlvEjkdUGWAjIS/CrlT+iBRrIYAvPIEy9EHXGOCOA85mj7MEFxvwqSCFZgsrJaz0i+/EHlpqa404gV6mX2lUToj4lQWJnwhST2SkmknwUNtUCJ1+VS5AGnu6cLx0qKig0Ty0nlFIE8PQFcQcggEG4KRkLU5c/UX3tyC9koAz+9SvGgzTeiEwdv28zU3R1WZVAx1RgM1nnYvHFDGPDOzRHA2ZKFjKYbzQxYKfqaboA32Q0cBh0zsrnywT67BnU3Z2OIL57XgBHPYlq6gz5eeumgqi9fuco8GDzi3cOyYmWjgBLZUKcuEV1M5ErEcGpRhT8RjBHywM3U6q5du0gCndiBbInIJnsyEGfQEqWAAhBFfId6PbKROkb4ijWOpuFAjWcQFSmGKCcnV37tDVdiiTwumZfkLu0ekydsgMvL0yHDbnWxAZlpCdZTI8DlwXxc+spXvgYxtm1EHGfEuEgwC2J/hX+AyGNJtYKAqMWfJGRNFFr4MjagMbCDZHho0MIkgo8tBMWSE6qAkyMOKAVaBCJW5nM1kZiAcMgAEvkggwYMWFSL6aO+wrm56SalBB8OmMlb4bOJXYNYMisihbNm86BpOPXxdLC1PTA3NEJA1nEKMd1LD43GxpWkpmfu18FtPG9ahsGGsNuMTyQOjYdT1bCXCLh/slAq+no4QHK4vy94k7xcOmNZES1yQoX0cILe4mJFZbgM2NRENFrFrVTHW5kJF/40E3Oky4BwoLTWIk70anTXrFkrYIUwqTErFoWH/QPG4HmfQpv2dANMpNj4hAkOkDYQ60QaIVEMKWgsXpFy8iyaE4iKV1RYTHOeeOIJ12+J1YzV2IQLH6cy4KFDBlU3ONQvONBf1zt1dBI5khwhsjs4yICfpCk6QSAlpznUmGFKpDloZCAGt1avWgFzCGAm0/DIEIb9li4FE3o4zFQxQaJwUSdN54GPBV/EJeCw4xza4CtrjtivPIbfHHB+7vxl2/CtS7fJE8ecfStcQAucmSrpm9N0jyyibMBljGGhWm44Sih6sajMTJvW7d692wuT9Fiza8YPQGTahoycpQ1hqNISYUeCdvV0as7vtLYbxsvJK6KfX/jCnzkY9MrV633D04ffvt6wZtupi9fNAJTXLnNOvaFvqybjMaBWv8djQMXZ8RhQI+n/f78HAF2xUcHqf/Dy7p8+xSemxF8dAOthzALO2vIrEp2dXJgeHey4feLIq+nzkymz4xkLU5muWpybnJ2ZtHrHui0z845cdm2wlb4uvRgcHbZoh/O0EwaJ+Gz0QQRuIF4VtgLb6muVv9F5Y/kgCPzF/S5fN4w/P2e90KILfMnSGaIEoZdgNXnUNNquEWRT/mT7NIrH0DcOZ0a5AGyafMOaV9cWG0ClV3hAgmxZL0Ggxn4pbLghwWKlcNdYGOQLcwRhR8LC3EKaPsDMXNrUrJfU2YX04YnZyto6l0/lhI2wha6/gHfq4pxzf8+fPSOGo7TUlc1Sp8OHD1vYwWnzQsjcsnkrW2DjMAw70IqLLalnGjYBC+/4DTm3bNzIa9kDgBBNAw+DNGMm5RWlP/7xjw4cOMCP6YUazHLpGC+ho4IKEQawpSXBXfAPbv2rrl1ixBThdBUaltyolBeizOrFK84kOKXRUf1VG4EsoXF8DeA8gFASE5T9rd/6LbtuWDHPCbczZ05JZ8I0vKg0jBMHh5Bs3PLLOtyRh7M0n7/lsiDP4XhqamvV0tbZ4Qxy3sOYN9txg4EGgntBoBk5YNWOSwg39aNhumksvM+SqG55uPo3XntNb4QQMWrvnofMrhw8+JIUy0wPv/6mQH/z5i12PjiSwXA+3Kx4hC0F4J2WLgt7WJ955jkBvaFbDtbGEhVp7uGDaVL8iRtcBHoxE0XqxQ1AWltb6hvqrGZ3zg3uAW5owC2KVJHJ80I8Kl9ByoobRNO9XB2mi0NvR7tA26mZzIgaHg7rm6ERXb0ulpUdLoe2Ul5zABSPxwDxxPUONOETn/iYoAJbIGnCCkre//Lr/9VCpl/57K/aJEOsY6PD2i8GpeCOHbssC+vpGfjzr37l4x/7F3bSaNFMFywuaKCnOUntCOazFLgRH0cKMql5IXFYYVfkANeqaYOVdIYTf1GBfMWhgWl+KQYe3r19p20ePtF8KZRQHtiqS0WJvYcBe1/xGc6MX1m89XhRozTZiNsvOMyHoBWBnnazrbPLgICcoMUn4uBdWYR4gU9EQDYM9PgT2l60g7y9bJpUkAWacKOo6PVVQRuAvBAuhLHIS9QE6EEMAsIVVSDf4yV4r6TXoS4vkPTrXY1yUiSlmAAgUnxVFx3wqyyUPODEsugN/EgibDjE6iDgXb1A+QQNiuSXpOQPNpKs8PESyTeSEmknKbVAJmZQC1CqU5eC+I9YcMyiCtpl8/wD0lSEt+CAjP8yQGN8ZEwiu07ghOATP33lfhUHUGuONCGQRx7H7KpadUpJ95L8GRgYBl6SzX5UXXzBibELpyo5FAluMhOWMQu/ggHF0UhYQjX6wHaU4u5STz73FWoHSxCzssLeo5bWNk7E1Jarbi0Y6O3tW7VmDS7Ya2/FpBMqmSW3BTkBH9m4FwMezkSxqscKZr0CjhX0f/kbn9cUuTreSRSAC5uEbmNj41qoEKgNDHKsZhWEOEeOHhPOWgika3GnrZVsYGaswgM+9inGrgL7xseZKJ8LAgo5vviiweACvMsAMfm5WjSLOw1g08646kMG/ghMGUCTDjiSUYf1BMZxyCP0icEKlrlElh80P2Aglptj+RcvntdDMEEDgtv7/FpBQUHFbcjEblxW0IOr0LDsh0pZ3ahSUY7fXTvv5YgxzTKZphu33OA92D+0Zt1qkZmhNl1Rc9jKBj1LeoFR6W1pamm+GU7nTtZrafDEdkQLfzBBg5t2EaPYHnVHvsTauhprTOUJxjk9ja4Ima5QO/zR3tAqlhznuPXtKCI8UcG90k4vTJ0zwitRO5fNRyOWGtGEe+/Z7rIWzs7hd/v27YMJSjHB4ApMbN3TkF+4cJFMwYHV8Oig/bVcg3lhakbLaQ7dxUAAYQ6CdznVCMPF2RmoFpcFabp6huVY1wQ+y5Vn1z33yoNwfAYkaS/L4AmsWSNYsTpoAEhboomCg14SFzRcvHjJtsv77nvACF+yaCGsF3I7ASXRcWJUlsoIsimzBoUvBqTCtcDVYfJEQyg8QgWVA1/ETEwUgDU9/dQzWKe6PXsfyisssP5M40oHtHzqtdjAr8uSEWsFJCXEQEBMOsDNkgZehvLQK7WgndSwXT+E3spG6LLRSdyzyNbWSTMqeEtqOEDKEMABM06MCBwSpNjw8ZByR0cPvtlYAgeCkIcfURHIgNiXv2/fASMXhmAtQjv85lt333PPgm2AKenwkQhnTSwnogquyn1/2kT8dwq/9lUEqS9MIhRGftakK/iDH/xA9C+RZCM+Xpi2FITY+UBAJ0+foFS/9uufoydtHXe+853vPP7Y+2Db0zcEjUceeZxu2C7ZPzJz8I2Ly9beffpSk3sA/n4HwAn2OiH//DsAk/NhKk8w7rzO+cmJhanRufGR5mvnr58/UZCTmsunTg7PTg2nLkyF1f5hG27uwmIaEZgOEBkMJtv+7AagTrTRZAA5Oi84HOc65/TPOXsATOSHxskovGhch0jMkmLzcWZY8RO6CuEaL+d86JJy5voFGOeJLZAgmP8EmaSI2BZij1FPTkP/AuZ2EliaxDUZzJYNCiY06EfS+IUOQICQTKYRrjYr7FvWzQj3hzndKN0J8k44nV3IGByfKiqtzC8o3nX/bt0dq4xb7rRab3Th/EnZuTUtgoiFbjBqDr+5OZyNqz7WsaQ2rKhmONC2ZCIqFdMzA8DkIal5SyY4FjdZErthgxRWAI5Fa65x3LFje3T1GgXL33VgWJZT1/hGhmDtXNP1q2CyiA0bN/Mz7u7kJ7ULlJZnQBUr8Evt7VtVI+ejdcAoXLnZ3OrT9u07Rfk+sVaRnztG4BCs3jXkb72RNPmipZxf/MVflGihDmPhXtiFHXvvfe97QeBM0KsUTKRzAnwa984TWXbs7lghNYR9vXrlivzqkn94YNCLnAyQ+Iw+AKiIcUcV2UeEEGeXsl/i9rA+dDnLwe+J48c52Mcee29PT6+lGHioSFCGjLBmz/ANzm/cslkz5CQx0rne1IRFa1avNLVikCLWK4UmYAWKSIf7wltSU5dPBlbWb1hbVlZaWBiabyMmmlRKDD4eatnNVmKRSgVbWoxw08iIWfewf0l+ZPr1FWSbJqGHTJ+wAqM4fJ92bN+OD5QBk0U/qti8eaOjSIkehjimCCVV7xe/+EWhyN79B4xrrGhcZnrkRpMOYeOePQ8yLgOaxi1u327fvG3rzPR8TX3dqZNnbHHMzyty8IkBLNBwGKUyMzcWEaNhhCM2coAD1FBCW4Nl4E9+mkP3oCcR/sp6l41c/OlEf53b/qEwYYsWQmd33LW6vMuJcCngR2740zEYGveEId0g4LYM0OPt4aCIX18VAcHwd1dPH45FnN9N91WKnMAC4vESfEgyRY+fXmBORQFBJq2mDIpHCCRLXWMR7iaGVXBGtSZJu0AlJEawQHkURKPHVfPsyAsFkK4IaNCWWRHqTV5okaKKWEvii8JKMPkVlAczIe8d82HoTw+i5FQRgHjoRRUsCF2KqMiLUvLLIDNomOAca1UrKBHa6vUgjYEQMSA0TWOEfF8BJnu3T2BOVFp6CyYIcgICH6UivfLQ8+6OLqDkwVWDlXKqSJjnBW6WQUqHrT+Bgo5pYHgCHuFYmxASUxeFtRIhRpXwh2uiV53tHWYHrGF2G4+VtG2t7Q6odC5lT193ZXmV/YmueMwryJViaacLasMCzz/+/GNEtWnjFixzQS+v5Lxb9/4aKMcvZ/wjo6+v3yQj8VNivSbqtXxlWDuocQlcmAzHijXfuCXUq1+2XEdZBmz92Mc+7mrLqtKCibFR/SyjTjLju7tbjWwJ/WVzR5batf2m/uknP2IKQR4PfDQDCBPpUmvaEMWAfXq3rJ0xUwJYid7EMdjEihQ0XqIiukJOMuiNGMxQHCifdBXQBT3qgstqIWA4AK6Ud5UKDWXwSzWB/fznP/9Xf/VX8tNmI5fhrk33VIebessUh7yjGIkWBJJ2jRH44OCPuTY40DZC1XmDEq6KrXkleURFLie2rq2ouLi7s8fx56ZWLS80Lbtt+91aPjWmpKfBgc7RBoJwZE13V+cbrx+OXlKNUCIUHhDCskFA/IeNrDQMw4+5udpNE/2UhtPHDY9EbaEXOFAa7xQOFXDGW6cfIAqo2LoAK9BUlh3SVIKg0zw1EuCjsV++rP7JJ98Pc8tLfHr44YcF95C3uw80eJo5IWsGhg9+J6ZGZ+emYagIz0utUYHJ+o22u5GRIkYZeA1G4o6qqbFRljOZXK5uGxa7cnJU4hrCaISL2ZHmuBjkOOmIWXZ0tHP9yFcdKlQEHynerdQnFPBRymki3zGC1npSGyk89QMP3IeBNBxP7CczdCTsNkYo8/LGBorU1dGJTGFVdXUtWvCNdFatXOMdi9Ci86NqQMwj4a11GgUlxQ5GsKEQ26kNlbNxE7aow64b169RM10valxSHPpCFtH5hBAapWGgjUSvMTbyF7teUIKPGoUvxl+NVgrIMBxdABKTX8RSZmgoqBXECkUwyktNzVJg9W38aXcHfrrQUmb9Sp2fq1evu8GDF7Xf94//+E8sOrbPRhgxOjSKS6ZeMNAmYChRKgvATEl1dLYStBHnJCJp1W9ijCilHgixnhjbiTg6NaKkaSwaB6i335abt3D+O3/7bV3iT336kzh/4dJ5w4FPvP8XYHj7TueXvvSlv/iLr9KQ8xcudfaNHT93J3YA4gzAnFUnmoHZ2f+HdABSTBjZQyeEMV43Pjw0PTFamOVysN5Tb7/harCFyeG0hfG0+fGF2QkLgazocI6/gVxqM2v98eS0/rFzP7SyOEwu9BaTHfCvAxCO4JxxNmiKQXfscjSom8LCShybARbmNGJOSExxVbhDQBZScrJSLDmz4FUGrQA1iKtT2Cg19ieR0bFwhpAXp/iPQ9xq+/Ss3HCpmCfsUHAX5kKIRaAQuwGmGjwg+BreUudz4wUHOogL+jDpIfqfC9MgM4sZbgfLLyq3EGjVuo16MKbLBgb6m29cXr1qJdvkXWky1WpqumEAlc+ne06MoRUeyiOaQaZtUuqh3rR6eGiAJrMd7/Zm8mMP7XmQWopZlWUUZgBWrgoLCF3x5Y4Z2shbNi5voM9cCiNycZgRcUBUYTimyS25M3M1tXX4r8ttrERbS10p/xtvvMFe+JYw81BbC2GqawytYekyCBg+e+qpn1FpVHBlcXKfB2AUbx15E2JStm3bztvy0nw4N8JAPNoIJMMQbiryp7ogrwo8HZ0YtxLM6Jt5G0hy0RAbHQ5HKSRGXdjZ1k4vMAQtuOkY4qeeelotKxobNTdMjz/UKMp/8tRxVdjzwes+/vijPGTzjRs6AMJug3SW26maZBGo/4N1asftJfUN/BXHwhuYARBGO6YC/pyMzMDKiUbMxNLoiNg4VGGVNMd2ijtBcnT16jWJnx/w1ewUbkd+Ultyjb40mXHK06fVBnGccgLuqwl+8L1zgOYxMI2kOGfz8yZd16xaiy0ekjVGA2db1LDU2KJfBbHFYQOGHTXK99/3oJje0ORf/PmXRC+f/tQnYXLw4EtKaa82bNxoi6zbNGzLcj23Q5D1hYYGRw110UacD2aQrNYAmUzJ3Z/wwUysAN+DV7yZpjO2aP5ksLJhCBYRgXjAL59JxM7YDTsNkgF+TMNJ2ZCPV+CzRyk4EBsI7YuX0bEJxbFaTnlgJRFzVORXoqo98Ak2ac+M7njyyPn3H2mKxwcEfIA8PnjRNuEnNOghllJ12eQHlkpLhxLcEj+QYdUrzVEdlGRDNZPBc18hAJ+IGA6oXTbjEaqQmTUhhJQ1Yao2CySdznhiXWoBhAQh4PGuIgyJmGsuQUOgPwH3yA8syyIdZhhl4asiCuKer/CPYOWHGJjGSt7lsxT4yCnZC7agCAnxRTZTGpYimenEKI9scJAeMfEnsIpgFAkyZPWa//dQFV816Kpw95GHMqg71gUs2eE2DriqT3E1+lPmoeHQ2cA6+fGPzohpEWU8kf9x7L7TdeykNWPfN9g3MjjisMq5aYtJ5hobGp0qZ3Z2YtrW7wk3vfvPavbUf/Mre0N4cdfdfKgRelOokLHbzwi9aM+dR3ht5WX0UOp44IH7Bd/aFodSkA1izWjrSXMB7vlyyAK3hQWXL18B8NFHHk6bn3IgnREg2CMbm1zogxHUFWE3W1qphUopyvr1GxiPYzJICLMoBKFiAQq5M0MOGAcBwPl0pWwAoiXiSzO8uMnqokbivne1g0BaCTKX+UeSUC9/bUxIdThIA6REoSoCN+qlVNQYVcDn+9//Pn/EPcU2RvED+/bKWVJUgCIvfk2DgsNIeFhWZtMngRkVZsy4x0Ion46GiuyaUAQfyF4ELP3973uSmzYq7KRL+J88ferUydMOMsPeJUuXPPjgbs08QdBs+GjnZ6ZDM08JDD5pF8EnfrTgD7QBpxOiRh5K/ypo+fQE88MEeVgywgXZlEkGSkZBgcUxUT6PiXxLa0DAdr18PMFwPNT90/PBLpBhghDvwL766sH+PmuCw6JMaDAzjyYNQBe1qJRqkabhMV+h5zfNVFCyfBAJ1vSTYJQy168uyuMsCLsI4KCgKsqLi4xzd/f1UnpTTCgqsAalsFCoDXl7ADEnTgrBAXo7d+4AGajIDQ7LO8bChJphOOlrMFCK/GBg/WG76uHDb966FZa5/8Iv/EJ9fRhfdFMmPCFgYwgma2yiYh8/dpQ2GqmKzCR33RjqpwXSHN5//4OaRijBlpQduvDVv/pLewCsNgZNdZ7e7k4VQY+S9IVzsroQq0FyVQBsHRGEcHVBLypn1E8oKYuBeKv3T/SIcoPP/n0PwZyyKRJdA7ByKgsCB0cNWJPaIQmIUVVbgc3M0wTF2fWWuzabYSgsKDJR7qwVkzaOW6Wo//v//icf+/jHO7mt6SmbgMFxUSA1K0mif6AMqtlNpwPw+OOP32q5wRCMnwg7SQfHOFYDt1BinrhBCuiiUdK1tQihSBglbGVcw6NDOO9YNAg33wreQFgAzud+7X/56le/arqOqzl3/qJTgNwEvHzddjMA7gF4dwbg/0EdAL3BMAO/sIhVQ7ZKD/SXF+Qvai6H+y+fe6ej5WpBtlt+U6YnBqcnR0TVQnDDSRjoSC9Di6L/cBu9TdNGX5IwPQTlZmG0W9JnwoS1VU90Jicr0wh/mAgQ2y/yG5MC/XATfdIJhQLgug75OlDJ+FmoykKi5KFjpOlXDQbxTW4bywiHsdIhKwPdCpGoIkcU10tY8e+0SPrFE2rGPNCgcm6J1jOUwtsTqEkAMx+6L7PWMGXld/UOZOcVZ+bm77zvwYVQT6Yz41pvN1VVVgga+GHQ+W3dCGbIqwBrDR71ptjUT2geMExbZNSqo/DdXWHOEO1+9Z6FtnpACGIakOHfeG9K23Tjmvl25sOOnnji/UJY+3Q5+eDnXz9su7/AXSkKbyOT6BfJVJFvp/wI19JxniJpjl2wwiPRdv6T/wHBdWp02CIZnHnggd3GsCHvhCSGBjGfjBpycT/5yY8sfbQSqaKyGkXMBFFMA9u5AuYMYYGjIrEXoSVCrJWQbo63Vgr+PGcUliAel/AKE1zxDR85PeodHBHvDlZUVpYl1xI/++yzbLAoPx8tem64ce+ue3gzyx1tbuYN2+506LoYnu/u6QMNzGD15ZWclepYZUd32IPkzyvX7+x+4G4v4lbBDebjBrfGorVr+K8hQBfRED+6UCczAfb1d91997bc3DxWbzAOY2803cQ9suD9DKwgihuHv66ulYp0e3TM1qlwNDOhh2GI8TGgNE/mMrhlL4qYLIEtmc5M2ZD9d6tf4GNN7wc/+IvEZLSCCyI4emUfgsVXCtqm+POnnxHtWP1vCPLY0bc0RkZ8SEEbZAmQ+bb+4SFn/7/59lHK4EiuUyfPCjtJJ7REyY5PzZCKNIiw4qaUxQ0ChRUOYA450kAhvlKKqAKeohpskSIPFuG2X13r0fEwboJvPtEWvwkrQpyqCjTSQPomg3QpLqYkI5zhVGGiNYGYJl40Iqc8UXOiwcpvMSHECCsqDAVTSo1ykpp3kAnFi2wqZTXokkKCPgGuIJjekUmdZJMCciTHIRagyQyCUsj0AhnvkESjGmXwePGnTXYyKI4nYFIbVKNIfhzDLq0zZkY8cQOSdMyf0lUNHzjQ/xhFIBM0X/ETjcD6E1gCQiAMpYPggQz8ZYCDUvBBBVDG5xTxkKOC0PCilMef6AJHNqDUjkP2nKgOtL8rnszqAAg4imIVKJIfKJhXlJYBDppGWfvIra1es1L+ZAFCGLPzAAumRyn3fOM/MkFzYgcy8cRSW8YIuIJ8L/bSau8V7LywyGQuI4WcuAKXNO5wE/aIfyRyU3LigOLMIfWNH35Bww86GpbWNVAglPG/lNGeXWEc3jl4Ua06BhgtGyijYSnOGYmUlkjjEK/BY/cV6WpKF2cQW1VFeUWxwcbQjwwEaZMCT8MoDl0nTqBoWPOt24zfJ/XqTkAO5TH6xCa4yQYN/pc3pHw+GTSVmWkZEGXcfBk2YSteyBAjPNii3xgGfcJ6EbCvRI6bPDUO0raoFvBRC7Q5TbXTCdrjl4TOnjsHMUwM+UtLef+aqrAtdc+D94NDPFB1GxU44Ri+LJMJvcrCgS8AQajNxECOx6TCQU4H5kjBD2DlrKtfaqWXdhuSSxsauGCDoH5PnjxuLJz6I5ab5kSCFZmEyg7L49CuUTF+cPGiIybCRJv1qfjA46iXpqJUtqKSQkEs6iiBYfugyMk5X/fffz+XSjXxn0biP9odOmz0l6M0D446RegQOPhDSVBkGEy2qAZs20t/b09yFMMoxVBEjeTi/e7tW4HVVdMekJfM3o3AGYG09FyUghVkCtvz59zFe4VBwUdgra5VK1dz0Khw+n53e1volZv1tiq3swfCmkAtBOVUvKc3HKZB9BowbYOKtmzZrL/BiiJz8M1X5k2I6PKr+0pA+I80TJMCT0dj6QHp57BtUsBwTQvZwUFPQNWAEDqRpS7MO/uIkhCHXj0dpgB+jQ/BjXBxHhUG7L2Q7KlzZ8N47WLo1gq4KZ4hApw0UiCzizKYiWNPwBc70eSy8mqYgwkrNVIPoQa501WCo88w96ec0q9cueR4R6GGItirUlaN9v8vd/cZ5td1HgZ+BtMwvXfMoHeispMgCbBJtJpVrG5l45Zs4qw3xXKc9UaW4t2s7cTORk5sx7asSJZlyepd7AAbCBC9t5nBYAYDzADTe93fe4/E5PHjL/thn7VySf5559xz3vP2856O6vSiChzmHcCR4lfriLfqfPzxx/VQpKxavRLrRkdi2pHuO87VlObv/d5/4KstSO0fHuzsvtrdGR311pY2TllzAZTmU73uNSwtK9q7d+/+A8/j5L333j09GVERQ8NtRagEHweHZM44ryD18MDTV7OW1tc99sSj1MZYCAc3MxcL54R6ZlFOnj7/T//pP2U9CBweGVtYVvLV77yqA3Ds7GX3AKQOQJoBKIog+O/6EiABkNu0mICFZ1yru0sM8FS4DnZhrrai+NLZ45fOHZ0cuVmYawPA1OKcE4Fs+tXmxeCZvq5LcmddzTtn8jY2CLE1gSBVNCKvMTVdkDxnpAssnPpvDbt+QETn4mRHgs5bXRND/hEiB0T9gvLlnJYeY4xlAEFhNEUMX8iuClE79yWStwQcVAli/nDkRj1cPBCBfozhpdkDHYDoVBREk8BmQ520FQsxfAuI3kGO44x0A6xoWspz01lOflFv/2BFTX1BUcnue+4X2hsk6ew4b5KTE+BbNNBsirGrqG3FSo4ITDqjLYID1aUtjc0NrIlnY7ZmABgOa2Uj5mF1yB15JL8X8aviVrqfPK6NOsZSYJWZ8IBhs/qGOmuFDhx4kb2Lzk+fPKkdpLfa+QLONubNYjGkKrQmXC4D5AaT66CZ2lTcAy0c6YoVfJHT7e67/17HPZdXlLEFa9/lgRifg/Oc7YmTx971zndHc7CUY7IU/OSxmSrPk4ZjcBzmCmq/wOdCTYTW1NUaMNLxRiMT4xAs48ENlgW+PQB8HVfDo0LPzXD33Xe/FsTgBxtnmJhgLSM8ndn6vve9r7W5RSkeXSugY28gr6+v3zyAOSN5uG5Ybdq8Ffe0R7DlCvgWO4WUuuueu9FeUhyNEWHB3Fy0WqzL1f7SEFKDJDiEQnAe67cbm2p37dppfDBkFMcS5NoEjKvABoFTM1TXgyKnq9EiI6Y0yjpMPCcUnHHqNV9nDxUCeUVyBIpoKC0mnD55hosjdN0/TvWTn/zkL/3SL+CJyWQChZXYyAZopBk6/L1//x+eetvbTSuZfSW1O3fTilxhHnFY52OSRQfArNDJE2ecnsvmXj/8xoXzlwUwkAGKluIPncEBCPiTVqAFEG0Z9FL4oUa6AXkaK4bR6IBvBBB/MAccnIE50zPfV1VTb4IbB3wiLHxmAtw1EjxgqtqLRNKn/yIETCBZtasXTL9Qwg3vKVRVio1AUn4Xh6U8fv/7B6+AhYx61a5qyKsdKAZICRWHv1+ikehXHg0BzNNL5jRym1piAhwoREEJW2RWr6+EApOkq4oAJY9hC0yDMxYlBiINDlgkJwSU9RV6fn3CWIgpAkmEgymKpb0qwhl/Igpkjxr9UlpMgKd38NmRF39iKbXxqIV+yoP/ypo4lQhUyowW9apLIvKFo3AARNVQ4ncNyJp7BUFZoFAEFOqkQFJFUMJ8AOUPIMPjsiGBUXd02hkSm51ApnUq4ofBQbU8MmOjazKkMy6xokRdO1EEVFFnqAJ8+ubXuAZrsjIwtvuPj3vHas0uCBpTGWDFWhONaicU6fic+8ef/HtqQhLT1ejKKv5lKhVVNazaSjib7BztBF1LA5EBNG1wFB2EmCvlNlpAWo88so8xONcSuiwEaKdrPfjAfbZwD93myg2055owNv6BQjVa60LkJMc/Ol2Y8Yu6sK/CkolsAAmFSsHV4wV68IEAFkCAePwKR5gB94QwktbLwW4+QjoJoZm0fBW1I1DnQTogYlm/3jUD6oUqCamOiyckcJgTXtuJ5ZPDgAVMtJwi2gAVsVS2/ehq5xWUVpbH6n/rQyiK0RfccEMwbFUNIIaAYIAAXeYZcZVaAGXsB54IB9Nh6gJoNIrdw4stxIZdIwl0SL+L5hkQOn3a/shoZnjYTes3qBe9smGjgWeiwTpqTW+QY0JWKQJGcnB7WS4xyo8hUFKWHhg/hobWxZ+pi4VkOMNcVIYWk92A4BgZEa7MOKMHiS30hlZRWVVAUhMi0UJtEuFV9U2NtesnUEU5cRiSSCB9siCgoZHYkuKEHCgxQmVZEFboMSLE6c5SSopLERsqsf0OSweYmRkn+GiZFBE/4amr2pFs5QAeJntDi7b51VdfIRD1QpsN8LPooiRW1qKa8hAFPqjRvAG5Y4IMqf+JfINkLEqKOFUzRij0RHiBS6rbtHGji/8MmFEDlRoIQDVoFj4N3h4WWMhJW5xDyPjlN59z9/336bFYO5RZdS4ROztFa6fRBdlwLnovXjqvupuusL9+3QwADJUFAVakJhEt2ic5qRBZ6EXgP+R1pYxd4Q9jxB8FKRicaRd5eSgzPitCpliHA3b2Q5hQrNxFiJzu3cMoR/6ZhNMEuI5DC/rxj/+a+3H00nv6b1y4fMm9CMTh1DwsMlJIfrRLg2skWwdA1dao46R22hnxKmKt1t39wi/8AshsPKwjVnZFn40IvEAVDnJ+9a+/YiBwyx2bkZxiyvHJOLLd4ByBvrD/lZ/92Z816YoE8erJc50vH76iA3D83BUdgLqWVTYBGzkWlaaLwP6O7wEQ/BUWxViRVfWc5PjYtFuphekLM5PFDgNbmrnZ03H+1MHbN7uKCxcK8ubnpuJUUHwgRJ5B6GxNkD4AAJwkWc+5KcAS2GXRm7J6VQAXqwx9ntEptf03j7pq0grMIlZWOI55fnYqWw6kDYeL6H2mfLl1B3F2wnJ3BMTKhNA9jw45GfFazBz/vQqADMBNzxhpDg/NCchv/EkHQGdCpbb/mmSgpbFNLI1r5s5PTI4KS/IiWaWmA5zrW7C4zLDu9LKCktHJmXGbgguK127a3LZ6DW0Xexw9eoSishRjf3wIFaXq9iLTFhWrVD8EMEjy2EXFhXxFGgZyTQ2rpFfsa9P69Yxi4wZD/m0KUj8KLCweHR40JQUg7gHCDPGfmbhrxqIg6bxlXU0NlyV/kysCp2dKs7afhX7+859XKbNFHVePJ9yCuiAgsudkMGHL5s0cLLecPNjzzz8Lt8ce24dHGUUjjnfbt28fb8BR8+HnL1wx4cag+BzACQJRDATORmEk8oqAa3a921FR39hgEqd0eTEbQSxnxYeApqw/dQI9WhO+iLM1Y6AH1j8wMD4WM88cOOSNgRv9ceAe/6DzIF3Ph2MhZpiIyuwytxYAc4RWMLT3hmN3jijbtwkY2MHbQ4SiBQ9ul0Z7wZ3iJwKttvKLVxoUDIGMJtsnD7kIgVau4vpuUyHxNyabx9YTlkd+/Ozu7sE3lCpIA41QOIbbVnJqCQIacd7ErRqdJ4GlQk3NCl4RHA29fLnDdRf8mGYLx3geh1n/+q//mhdhE80BWaUdnZc5q/379+/aeadNwCKc0ZHYe/DwQw+CyTAAZJ5uUL558/b0/Ny5sxfb1qzq6ux+7fVDlsNhBVrYHdPAH7+8E/S0Bd6lQx6qyE9KIjE5PWiL9iBGjfUHlIW8ehWkpbK5BWxZfpFxY++44ZPWDUDvKFIcCeqS7vFCRnoElIeblVMKmWIRsH6hJAUozJGBktCZwuUlaATQA0/ZPPIwPSnyo53+0GRYkTKEJQKIdaqjLUr5Cn8pFCDxQToheppbW+CZvBMmgKk6eWSQriJYgaagPADalyQ91Gl+nr5p11CqUmikSlUn55u1qJR1gEnNlAInIcaEU720VKIM6lLWu19/wkSKB/KKYIh0iYm9mIBeT4VlkVk/QaW+vpmHNBOBRJA+IUTHIeYODHtkW2whTy5yYiDc5EcL4/UClHqh4ZoWv4xas+6IF5PnRM+NwEVxTSrgKiVHUvNiiYDMBOdPgQ1/GF7b0TiZuwZWXdBAvncnjG/csN6oHBaBBiu0AM7wxXJg+hNjPbjH5KOKz//uP1ClGX9RcseVOECA14sArW2V9CtdzlXssVQ9uikTE9yNnbtRpeEoh8/03w4t77tBp3fu2MW5bNuxkwvQkRBe2EC8orXZZFVfzzXq4oxSI19j46P2uJAKdvCAo+MR3J86cwZyv/iLvwjjnut9WMw2kqrhsQwIJl2M41jhQ4q8pMz602LNJFTq4kVBosV3vDOrKMiDoerA5NDVCJTWBUwQ5EGp4QRjxqDhIEK4b79k9k/+yT9xUZH4F9eSqtlKRXXsAQDQVBE+cqBhirNutC1fucIMZuPFKxehQR5kQFqsTmk5wVSjaUS+A+v8Wm5BecpLih1+wnpxVQYLXHhAIwEYbs8fqimXkWa9mpdeeVldy/OXo5q5UlxY4TnSCBjVwIbGZAMDugTaD2G3r9YNIQ1wGciU7HFJjWpPtkQXqUtSi5v9g3RFvQI4mkdFuGYhmoqQQ2p0kUpJD8hC8OySL2R2dFwBGffMgQCLJ5ARtwijYdvfH+sI8dnR+KpWEMOFm9DW3qDOEiDy9WvW5dVXXoOhFsJmlwfvvSd1AKRYAgSmK+hhm9lmbvvKVVIUAYeqiDvNvBE6JHFg7969EIO/6lQBgGxk50UTZQRd/uGR2DTiTzm9kJ1zqU1PazMwzb7ZJ598kqmoBTes+JudmTCGSkby4wOSuWByVxBdZG1Dgr0KKsUf1wR+6wffu++B+50xgoHMm3RmpmJJnyVVeOgQddoFW/pwq3+ACNpXxoQg/dFQUWmQJdIu8PWs9HA0wDKwU6UsbLUJWLRGu+iD5cu0CCiIKcj1yIzkqHRmhrbgsBEjzZKqfbU+ASYdnVeg2nfdSiRmvt66tRMnTr3++iFrMpwxd+LcKXpYVlymEyIIA8dIodqxUf9h6Nbt8opijnvvvodwzx5vw8cs154ZUY6xLmizfaKhfmqhQtCDBjzpGIQvXbjIysS0vprTh4/lQH7trPijP/qjd/70+5BmGxggR4+daF216evfO7h6811/owOg+f0J6QBQ+4iXRfUlpRU6AGJcASgft2xppqKsYGlmzA3BXZdPjg/15SxNLcuZ015ZtOMgtpk5A1QG90wgiI3E99F0CbzpthDcSokIuwuKZJLEU2nljPGbB3Dmv/sBXAZrAY1o3Z5gCqy9ibg+Z6E43+xahCzGk0hEROVdDJQtZE1Bv6Y0tsHpDAhFZmP+IrYTax+ZsA6ATon8RGZVid6D4kQpaPNwALNOOnIPWNRmtbVQI99RKhYCzi/kjkzOlpTXXu27UVHd4HT1HXfeRSdLSg3WdmqMyN2IYejDsBN1YycM76fLjV7eO6rI1ltbDOXPMKWFhRt9vUyDP/cLE22Kfg5LpJBsh2vy+/73vk9mtnPX3buPHTlKjdmIXfinTp4UolBLdQmjmY+2hv262MjKTmNGWCMnIIowKHE/tZdfh19FJAI9NnJr4OY3v/4Ng+tsxLBI/4AVLzEcDgcLjbiLffse4X8AYQsx/H89piWxl2Xxrqg2BoEED4B8FJjGfTgf1e2+6y7rSy20smTUsBGwMKE/2mXvcDCnhDrAeQBey8W9DmCgcPYA2Nvza7/2a+9973tFQ/y52R4E6iJmruaUgNiG0xPHTxkGtUnk5kA/gIau8NaMCZs1qMGcd965m1M6d/Y8SQ2PjrBKx/hyULKBg6twNjyBluSQFeR2ssgmthSa0XUkLPVcs2at7hlxaHru3H234nKSrGU/OKB4JlMh6YJBTR1L/OEDbZHMvOgsqk0OZc1Nr4ruumu3FIGHoPH+ex+AtoZedYRlRObDH/4gNhqn5m2kwIfo1Qttu8mt6nEcuQvjOOR0K0trazNMzDOdj7NMhmYXFzas3/ziKy8deeOYm4tcBKavTfcyM2FHEZ5qKWCYtUpxmogXPlaooC7cQAvpJ5+MTPkximIj05/0jbpqO+CjLz46PkVXaAg+azETJ2X2kK9EKiczVSFoHBBF8CcQ9lUiTCCgOjiwCHUB5ZGurKe6NlpDj1JwTpmRIzO1SaJUCmJabTxXRB5MlgdFqoaAuvwqwsblxGqP/AxhdHxMfhDAh3zKjA/UQyms8HhRNarlnByPmSXoaSAUUZFaqDrS5FGp31QKB+Aj1EGOSpVNBKpU7fIorqwXfFCKaIANt5MF/RjiK86o7k1ykAxVmIAMSTANl6SCiUW+goYQ+CDWO4qUUkSKDu2wTflLMfYKZ48qwAFNLTwPZVZKfhASMh2XOsG0rMCfIGglNaNKASuPg5yRg1K0SGFfY6MjcNa2eoz3CUvwJNS7Jrbhia9kRhoEkKkVcICPE0eYoa+iFLySzmoAAR+TU73wV4pwc//j//YhZG/evJX8jh8/AV1kKG9hHEQ3bN4kSmM5mKIbILATEll9galAmx9A5+GjR944fBTeVg/vvuvO2po69IIAJgIKl+WWl5b9KPTJNqrOLcSRZx5edc8jD+vA2zzQtnJFQ12js+3Q6RNFhDEvjIMIJgxK4xdnSZ2/S0h6gSTyqiqr161fOzU57WbTNavXrmhz8vGI8xy5KikF+YVl5aWxZXkhlq/hCNaohR1iBO0R8nLThk4xCF3ELF7kQHHG6ISdRtZ5i2gdyqFjYqSWc/enjh9uQvXatav0sjdbffToo3uV4h9BgBjB6E9hNI+gX0TSTA8z0aIsE9i8cb1zYMus3Mr8AuduoCTGlg1QCbioZnbWqnXk2XBC7rNPP2PHMA02qMCLyWY4h9TohN/QmLGwQA6R+xA6y+YoG5zENxoJ26ReOIlMfSFo0AxFIGyXIeECm7csn7O+NXB7fGLMoZYOirn/vgccGO/dLQ1Xu7qdOzs5MaWXYsqbLEDTnFhjCbi2xCga9lo4wuHyTm6OA1/7QX2dRPHqwdfcjKuLKSDHB/J1MBk/SO8oPax0P1NPD2JrV8cEiwUA9AEJWBerqJeWTNGitLauXg+Qfyc1cT9QRjsZjwieKEFDPnwoJ/h4BQH2qVIMSQaPURcunhP079y13YF0vCoPIr+VQtQ+G02YMnvAVgXHrr3s7blmCVC5ZcfLltasXOWk7YnRiVVr1jz+6N7eG32vvfzK9p2721pbj588eeXSpQ1bNh8+dtSs6IEXX7K0FBA4mzEkBZJFhXNL8FA64VqKwJtTLXcHOOn1Wq/Ao5f+MyX5ZYMw9iKBFikrp3nDwdtW1wwiH38gz0IN/sEfw1kHyKIH7hJPmKoXE+s+YSO5AG4JF1A2O9qvUN/YlG2zXvbDHz7jdg5zBVe7ey51ddjWg179NApGhexgwkBxiQDvtVdesnPaiIlaBodumf8RI/7Zn/2ZPQ8mYag0hImSiYlgIKw4FVUWbqQpQvrohz9CLuUVpbyRgWuZOcTVa9e4UPy3f/t3/vRP/5wLt1Sewh8/dtI9AN/44aHVG+88caGjZe2mtATImJmz5yyFQpLF7jGw7Qz8OHE/lmb+nToGVLNoKFPDJPwtKiwZZV2jjg4s0bEsW14wNz1WlL+4PG/+aue5k8cOjg7211UV5U6P5GmD5henZmJO34pd8dmUZUBz4UaM45NFnLK5FCtocNuqBLLGUkriP+NvYhV9AANQsR7GHLgm1U1hOgM5i87dLNQhcTbEvFX5GkIOh3ZE8M5Jgpw53XlnQHl0APgs8zBRYQQbMaAlG5OjCc6D0ucw5mg5UBp3MLAo5GePZg4U01shmuwIQgG2VT+2Jy2MTNnS2tBzo38xt6CqpuaOnbsEJsSX+bERQwDCRFbMM1NvzkSQrEb4qpTeMl5u5Hvfe+bee3fyQsLZNS5tWb1a/+HOnTtV6ZIE5s85izX5qJVtrcmNoBEEwasWlF3fuHH90sWLfIIDggwK4B4Lssymr/+mI9QOvv66Vuld73qXBeXsl58EUx780Y4AS6v1zFPjeuj11110SKvZ7ysvvdy+qg3Lp2dmrC9/6JGHLTRyK5r793bu3gXbru5rZkesMiIsNXK8HNcjjzwCJtfH/6gIVmb//D700EM40Gx1nytirnQxXjbF8Ls6OkITsvlY0916DiCbSNcxO3zkjUNvHLVegwFa8mdN3Uc+8mGdB8OHyvIG8HG5p0VHnMzlS5dsympqaj342iG8NdXAA5A7QW+KO7ZiG6Va6psae671WueDk3iIDzIkjwRt/SI4wE1ODoeXI0p0eV+1ak15hePI6sYnRqUkPutTGUYEGZwU1WmUOTGPgXzXsFQHkEIcBhkQnQf6wEXf7E+bO6vwjTOxGNLA/KYNG41iGIBCEelwm8OjQ+vWrH3uhWd5RX8+9thjon+q8rnPfU7PbdPGLWMTk3TS4jEkc2KaCQE2tF1Jdq3n+g7n8hmtvzlw4OVXXc/Z3NSiB+s2AMs1Y6ffsjzH3usMC9ynJial6Ir32dV1vY9Hssk+Lt4tKzecV5S/fGp2sq2lfXxqTHfGHqtrXT137Ni6dtW62YWZgRu3pueEE4VyMkWypLoaUGTiCU4K5gQS8I+ILdsMhmO4kelJ5hassctiZVTTHL+CTrLTZCQIBCQFWPOHciKQCYAsRWYPhquORWtExC2h/9lsAF8tnYhBIyOYQMwLV6M4BJiA0BFAf4bDz5Z2K4ufwEJYdcIhapBUJTUKEhEijz1KgDMrYtXE+AolKaij2zKoXU7vYELSMlHKbIaTbZYULV+9bq1fpymai7YwMu5o1RbEhqJ8PifOS9Ao8EPhOIMb6oUGmLhBqVAnUXUeBNrdZEBDt5OL8yv05bFFs2JUQ3vcmhScE7f4qiW1uCVOC3I2i8Yru3gH2hgIJmh4iPko8kkGHIjnep88EsUDzvzYtGkD0ciAsZm8liOfMXIm6IVna2wObyYsiXB2fJ/iiAKZv8WZDMNYixUh39XuipJSXCJBJqBUogtMaDJYUoMbScmMFaKj3LP7/wK4JABoEaQyhOGqEfUpU1kVW2+Th3IOoMuvLG3kiaB78PXXeCjTsfjJcvQHFGpyV0ih9UzLikujYEtrU+/16yrjFJJoCRVkxdUSapSXa8XkwUNHa6rKHtzzACMsLY4TzUV1hrrhIw80aAAgiYZET+YIps/Z0XP2rEULWJP1hq1Um8jGRB2O6Z6sQWLTbBgk0HG3nbSsosxK0MQarYIRAtBwACt5XrPDqSKxlyHkpKBW4mWNqYk5F0hF/wyL5TftLQN2gQAxAiPeV17aTxgCL50Kp6bIoKWQmalAEutra+qTChJkY0PNitb6ySmDKe5fO+d2Bdk0SEbysMh4Q3gBrYfdZtkivLhb6taQIAnJdMnoAoTVhbdaSojxC4pgFL6lSJE/pXxMkULILB16skGbAZA7zUOyP717uXSx47pA9rXX+UFeRWCpUv03S3TICod3794p3ZiZhU7Dg7c3bojxHjUGljNxeR6AtbVxFiejbmisO3nyuEWw+CDauf/++9FFK2yFsbW0vW2l1hr+Qn8tnLXOZttBIA4II1MpF9NYYONXGywOUBHZoRRL1UeCDIMZ45t5gBdeeEFHRS0koj+g4U86Rjq62ppGxX3ShCvuBQfEjBZSlpaWGb0S8LJemDASfk0tmkkbA6wjwmFDRHqJXAleuWzvldde3r1rl1WNMdw6PyeUe9e732nBpmNJXPftSBOdHNFDz42bRrANwuoxEhkkOSYjcPiDRisgkQMNzsLqPY0i76Z2K19r6utkoBXwZAhCGCaDZDLSrtBPXHJGbVNj/fWebiJGL2ZSCe74K1/5il+9O0VIXF36hz7xAuYFoKE/2djYQI1Ff/II9C2zqm9oYmd83Ne/9k3n/glMDh46bGmTUSa6YeltW0srP+DyC3051B06dNDZu3GIQWlsDuOPEGLi4rvf//7/8su/zEOBT8nZMpnaBRFhXEEhsWImkX3iE5+wa0XwuH3nzpOnjmO4q96OHDv69rf/FDP5zd/81M+8//179uzFE6vFlX3ppVeq6tu//v1XW9Zsu9DZW9O6pqZ1VU5B6UyMc1lkYrpIUBsdgPhb51yCYaCY04+HxN/8zRJ+9PM303P/9vxUUU6IpSeVAsJqlATob8B5M8N/X5fNLNbC804G8sERSbgAghyNlzu5f2x0aNniguXIyxbnui5fNCrZf/X82sbcnBmNgT3AsTAaEnoDLtC12if0xx4Bl4Sh1s1fwoelxRKLfvAia3UMiMS8awwELlZVlFgpVJC7qImzFdhlYU4FEtSbBMiuDNNTiOnBaCajM1kAHwVNHkIvsTQoWlpm+MIcUZj6rA6A5aJZ5yCm8uc0nwrmZkGFuQnZgzdLvLfVSbGw2IIlOKOCajlQJUbzl3Lnc/ImZ1x8sFhUXFJaVbfxjrtzltnQ4bSKqYFbfQI4ykU3TPuF4x0YNAahG9V/Y0AzLCS6brN+zhKrEU7U11q8U2NOjB465YqdWu80OR5npFA5JlBVUf7iiy9qUPl2jhEVrgMbGR49/MYhRUwD8g/cl56qst/51rcF8Vvv2CZdS2lEgJXRZGVxRtUsi0sxzmIdi50DlvpcunQRD4212wA4cLu/ubHJkWVdHVccjSLU3rpti26HZeMWblteYkkET2hWk4+iDPwAj81L+5XCxAQBqnaeL/dl7pTxooJN6U5VV9XiBsvizOGMq74GtOJSCFiWKegZHhw68PJLZ89dwG/OU37npAHYceWKpaG6E35JXdVYYZeCjoG1qb//e592h63FBugyYvWWp94qXMZVnQGhDTcrvjdOj3ymnfaiWGLEPKmH+SB+yaPnJlgVhUAMLZwY52mQZfMmp5wVv3HoINIwHLEyUzyM5S54Nh0D1ZGX9beXL1/SzNn2h2poo066dkfVHDieSFcpJvBOWn8DbYDQP5w0XEKOf/qnf/rAQw8Izw4ePiQ+eeyxfUwEHKGF/PimQR8dEQvGKi+NI88PH+Pqul5f/uuv/vzP/3xdQ9P+/fsvXLpMHyw35RvDQxYud/+PQHN6YtKJTELGqz3X9MAdUeFY8ItXLpv2clOq7Vwz83GNn0m3lSvaZ3Saabwzpm8N6hbcvfuuscnxkcFhv1xOgbCyMLbj2CROXknTiBItpIPeMMbsBH000na/aJeC67J5OCh/UmkPZPGHcnohdxyjJ9w+iRCZT1hN7toFn3APY1VKyljqk7p8Al9ZEPypCH5SfulAycOBp/wwVKN0EGTDVTClSFccVl60DtoFvx7Z4AkmBGRwnzkPT4iqs+xFcch4lEJUthCmSqODCQrayQ2q6OW2IUYXTVralF2txePjjjCOPvvFC+6eQ+SAwrEYFCkq4VK4IPUCq+oYCsGHH52wGREaoqQYFrGKh7AN35eXO9rbcgNb++wyLzPONW0FZBwCSYv084Rzudev9TA3kNHCCrTj+ANVzoHRqc7yOUoFMlY4q8ftvhyRR1wdh5qULlc1duEJ9noQqxRo2MtGIJ80P3Un+FWdTFzymMA3QnP+/FlRkOJ4a0WmUqpWPBQ2G131J2ZiILXBOok+qRQf4uX/+hcfUqsCeti0SvVmjWW1lRjGWiZwLWAoKYnTT91xmB+kxZZk+iQipBa6vHToAx/4kBDkSme3LTV2A8vjlDmqb0Fb2lGkiqRVUFe36pKpYw2WoUGwRfBPPvF4c2MDFqhGijDaVzm5HixAHnwURwb0iHJ0bFxd0NDFF/CBxnnRTipF51CkIp/YP6brEjRlawHRQkigMS1zqSIn64XgwE/J6degC2sRv1rlT6vVrlJkkrR6kU9m3iGDLhh6V7XJyuX50fNTo6jRqlm1cIX4KYAmTkTZYSmz94mJydNnjhkV1YV210B1XA8+euzEcbVYKXTnPfeqiBDYJAEVW2pZsBySmzfekYyfI0ajSoEyCg4H2Wi2X3KVR3FkEgZJ6R7wrdgLgZjJ3blTQbKGGL3njlGhrGF1u/j4d1EajQHfLy5RID6dHxdTgkmNrC/SjuKMFaW6BHYpYDuKMIosOO4tWzZrkrUiNbUO8rtUU1tp0MiEcHFhnNWNRmpgMQAj4dxVzWxV5CBk75iGHLUbdPzBD56mWkxIu4gWra9AFgMRiEzZIK9R9HCatOLM6bO4gUBf1aIgtcQKReAsggeE9us2IE1xKxqSajEzngtWaqc/pA9PhPuKG08//bQq2tpWfuRDHyUdq0iz2iPUYIcjo8N6kjqKBv84GpyxGh7CDU2NLtE2MMslURWkEYQjCCFDFjTK3ktUa3iEOLXZVY4ajKRd+kUOhoI/tZRfTwPmSflNKZBy4D8x5ly91uZG0oS/xQOUXP/HV6Ni8hM996qi5GJg67AtZLatjO282QBtwVDcMefKyTbZiorL7cm2BIhtDQ6NWMVn3bkNoKJ8yJv5pi3WipCaDg8E7ti2JRjV34/nlN/zub/4iwceeMC4gFpMnUqBCVqEgDR5RGXDw0mlmZ7ePvaRWndvNz588YtfYHomA0VUNOpTn/rU7cHYt9DYENt1Dhx4eS6n6OkXTrSs2Xquq0/0X9O8NqeoRAdACKzht1Imhv6FLZ64CTcvmyz62wP6yJM9yRWm30j4/7QDsGTLQtZsC8aN9s1MjTgiOdvwpy9IpW2PNSceQ+c5uVcp2cnXJm8cqy+PA6Bir51Lf7PWKzyDcTLt0sySsaqg1OlpDulZWjTAb4WPEJvvjStDjMnPzQgZbcp1Z1epFYQ6o3HDwDwOuSVgedQFHleTVgW4LdhdvsssTWQIeKoSqq4nQDMBtnqHqRohi0SbTLMFyoo7wUnbzCFY4LOwaMNGtpg1Z9n0jNURbiQwpUDdoiYq4VdwYah/IdfCoZzJWV2aeVMYOQVlKzfe1bJyLTXru9Fza3Agv2iZ1hutdliFv6rki4pmxs2zl12+eIU5XOvtdiwYPwam0TGMGhsdZr/2CVombtNx19UODtnQb2tzE5O00Yb7oswMUIPNugXuXIeGhm3yLd65BUqrXXCsZE62NZ9BcSPCSnqiCt4S+f4UKTK6f/kv/6Vm3vmY0F6xotVYw4EDB2BroF0p+/NEuuriW3hZ9Yajq6uzZEVPo6IsVs7AX07H1Qs3GQ67EDdDxlSGFAfUcJ5MwCfdQtanwQqr6Y49DxwyzUEFSxRSSIEkl8L2D71xuKQ0Vg8+/fQzH/3oR1Rnzs25YZy5phCZhoWRY7pIWzk4cMuywXNnL+3atVtkwt1ZhqdeTQ/vJKrkZLS43JGgE/lsRRUGYtetXw8fCPPY27fv4PN5LXUZ8PLCC1l3dOH8Jew6d/b08OBNYZB5YPzRrCvFf6ILCdoX97hrfzXZGqmz52L71h1btoLAiUnHKFLW0MiPfL+IJQtqoDgpG27nvle0NL/xxtFXXnnJ8PzevXuRSeUefPhB4YSlTfIThLlT6w5oeEF+8VNPvU1Aipzu7msO64CqYYgPfOgjmo/DR45qvMyYgKAFV5G71EkZBGA94Q9/fOwPbjAH6BEE9GDLk1sxgVeK4x6AHoSQLM6onVtGAoWkEkxVkYbGRh7SCz0M482WbeCSqjO0YzsvpX2zLGOUTuJqUTtZe1RHwYDVzKELG+UHFiftpgM2IQ9J6RQAbtosxT3ye0AAUAbsUrt0v9JBAB8CJK6sR4bkPBUhHaC8yOzxTi7qxXn6IF1OiTgGIFZQQoPWHJAJZwSCnyEWm2FUwSh0AKABlF9/UhWD7vYegwkNBMqvUtqO1eCnR4qKPIy3vLqBn1Ecn+2XSyTDubE++GN+CYasUgZcMtDJT/F40ANEZrwCU11wk0FIkHRPukRly5fHoVvUldIKsRDFWCDvE5Okt7QS5uQIVR5QBGRFRhIikgEna4aQvIpfzEnIe/GnS4ToBlTVIp2sZ6ankK9JVV1Xx2VImkbgXgZv3eaFKqsjWvMQjcwgeEGLXwhgAv4rm1jHreV+9vd/VeiAGFpbmBdr6zMvtsKlGMqbajFyiTsCC2285ZgXzl20vkhmRJJfSHFyAql33n0vnTYhbKegsRyzOXpL+sfq5EFgiQUAwiNjdOy4zQRcgbO4CbMI4tzv3dsDxWxdZmgkBgkQqR3vDEm4YQcC5El6bLEK2ScidQCwgHT5Gg9L45JUJDPe4Reya7PjwKg7dkAJXX7VCxpvy9rhg14RjADFoU18iuu2eGQks0nih4aHXDUnCsqf1AV1ptEb4paTWKCGuQJiYI186AxoMhWHpyXjkFHEyXrDI7e2bF0/PTNuta657DWr40hpCN+8FdfEGsDjv9KxSLSKTkKs7/oAe1AcUYxK7YamZBb2SWcJyKdPiIIkDeMIIEMPfOXlhVPJZrCCjgqIMUpmeShlDGXPx0gDCPRSH0Mory6glIKbBwnIoVJcAL1vb23Vc+ZMNXvGpoGiEki4cOG8FepK2fVFXgZ+Ml23JnaA09C+EuWJU6dQBCZmmmKGrbogLMBFhYrEcsa0EI5jcjI/La6CugHw9+LBAcj4ZWwkKOhBLPiYwyp8wiiumQ8iESRjkQiVvoGJUkN0kFSX2mXGItmwXQaISaRdyJeZbhw5cuxqZ7c7qn7qbW/VGTO5BDivUVFZDjejaBTcTTdMgzIY2bp05fLGzdv4RaP7pI/D6Dp6+I3nnnsOw4E1TSyz2qXrBNDY7VvvQAuE+W5LkHEGemSnVxRupSKOH4GMX4hZcLx54yajWYAL7g35fOITn0A1WZAg+4IGcogy87ZGl/THJ7mqPQ/vgQxuk5fL+/B2/foN8pSUVX3mzz7Lfwqz3Lxr4st2fyO40JCZj4RhfUMtmHb2cwgOmWlubqLkaBFvOTOX17Gm/3pPD5gEoToLHrAR8v4UXCYzJA7KI1BzzoV6J6ZjQ4XzwO655x5rJP7Vv/pXf//v/7xFC2fOxpBqc9MKwoVMQUn19589mjoAtStW/yR2AAyvWDMg+s86ADNmAKypISaNEzPRAbASrKggv7a6xi3LVy+dOPnSNwpyLOrLl6jhNrytXbNRDc+F34uzSw7nNDeg8RVJ+8+qHm2Y83RoVFiNPsKMmQbgJx36X+FicwewieVzLOwxQZJTbO4gOlCafBI24DBvrkYVFeUldJt8QY+TRzWEPsVwv96s5tBEuQYyogSPcpnTE6xbhsof2rEcDadVl8bLfDVBL/oVaGhJ5bdAwuSBPQcuGo7tDQtLMwuLBtfGZ5ZqWzds2rabYtwYMFveoynWatJSGm4Vw4qWFYrnuVJgcbH32nVGxH7tO9RAsGUdACRYzsFXX7l4UZ+krMghnrFjxxxadWVcS+KoNsorM/1nMlL8yZ9QS85E2ySA09YI65kJUyqvqORMNG0UWEvEgnDVC4bQbfG0cNx9XpazakbBbG9vk98DJYviAORtlDV0Tc81XviGP4BwxWYCr13tIX3v1hlyX+jSJPGfcGP10nHci8GLv/7rv9a6fehDH0KjDPigOjh7R4JOAc8JJZbIWHwViHvftfuuL37xi/wem9KigbZ7V8To1o9oHK37h+rZs6eVtbH40KE3fvVf/LqhTWE978dI4blx0xahOcPnAE0Vqs45IOgC5Pz5y/fvuVtbiUAdA52ojo4uL4Qlm5W38hjLR7ImSIcqXMjk2Dvf9XZVgwwZ2XQ/OHNV0FjBISsQH3M4VpASk1U9gHAdOE+s6AVfm6UsJ8mzKaUIrw7huprawVtOMRqyiun24EBVhIzxScGjJ07yV7avQQZXrSAyCapeh56ZOjj8xhvG7EQsbe61WbFy7fp11NM4yKuvHUSLoEq7DwGKtJQbJxliLNyAwnAk0E+J5OgXqtKl+IWkoIsyK05X/cnQ/Ele9EeKzPAndPLCkLDZZcu05rRRikelvqKaMRI3ly4P5nvA965xBBYyMoOGb6qAs19IasXkgYy6/Hq/dr3XL1TDurOzIsgOfPjQK7+yeUBTrypQhEC4gZaYKR201IBKBC098qgUMjw5elUBsgxY5KH5sskDOH0GE5JEb1ZQ62nduIp8kq6jpQrFcdvYLl7J6SvSNLiWW8NW7WAm/P3poQkJSb/QRovHHfYOHOMYzb7409gcQ+Al/CquOq6PnbI1rJNiyRi4BruhjfNqSYzFbRoLLML9ygkfhk+1ZidiII+vABPV0nFJWdoOCCaDjJnoAs3oktFtI2jS4YlMWAEIAmIBV0SNifykGw7NN+GPIEzTcEh0dSOG0BAAW5oaWB/GCn1VgeGJfDAlQkZKUg/5laVCHtXhqggBwtEBUDF2q9UKKiIBQmHhCHYbd6GOHs5UUO4ot5Llpa+88ppQIxOnNmB+05bNEXYXhokSk0bCoJQ1LX19N0xpta9cKYRN8QcM1I1mzMJ38vPuk6rhgKroQ8/HwnTOlK47AISQVEH2FAjSdMufivvTLxxAwDW+xgnklodb03z2zLlLly8a+Lrn3ru3b9vhDOYxO2umJ21zdM2wheG0nEfgrUR7fOKjjz7K6YNDh6AntOL48MuLGQBLHTRaMohXoKFGwsNTmRMh/sR6iCHfziTDbhSIZ6dVOAAIGTjoRhOCSy5aog1clceUmm1hq9e0mf6z1Qk5JjkEQNbCUmgFCZgagQ+a43XXrVlvZaeeFc9JXqhI/NSGwQcDdcO8CHwJHp54yKsK0xFFU7l4COOndEPa/B0gNJu+YgVxgMDLV1RWG7FTNaIwgbfVnNAVkIlJjZlZho+jkXYONzfUG09y8yU3LSaRTsPU5VZ2JFvUIfhwz6/V4TYPsCITndgILLZc6ewka/pG7gZxNLdUgi3BxKKohrr6WOxSWs4SfaInFMCIFOSxOg2qaSxhhYrkGcE5+NrrxAdPVuor80AvgFKwhdSMtGEp/uOMF7EItrAEMGk1vRLZ6/YoiJOECD6VkzPj9rIjh4+alNcW/uEf/idFxLR4dbW7a8WKFny215kcqYH8mzdv7LCItrDIFI+DlGkIfqrL0Y3eg0ZzF45xzna8hJJnYx61VdWWoqkaPwdHYsyGKOXp7OqCv64RUeI8iWi5/Z45fdLQ5q/8yq+A6bFW4ZlnnqHeMIcDftI3lgU3vykykOee++41lYlvSNBLITL9wdjlmZP7H//vP7Ba13DJmbPneSedr23btkOA5tgnxRBaVzS/9torba0rtu+4Q5uGLWgB31Crqj/2sY9pdTsuX4YAotBo9FdxagPCipZW0RUS5McoZS0QDvMvLjTntmfPA1K+/JUvYdTHP/4vuZ2Kyjjczca7T3/60w8/vLeksuEHzx3TATh/9YYZgNqWdT9xMwA6ANjCZekA2BpGq1MHwNSzx7qlaDZ4Xs3YwuKyubHLp16+fOawe6hrq8tLXaI0fHth1kE3JaQnf5zMs7SM1Nznq+seEGwsjeu7rCIMr249fYxiORxzcixv2aJbuYzRmwTgLEX+5gEc5hkRvSdDIBrNaPgXi6xKWl4oKDQJ7AstiuVAC8J3Uwc655ZPRB+APmcNVhzlofcru9kDyWYARHt6kosLefoCssUeg8LwnN4zaEuGpyyFmoa2RtoRNJNTg2NTuUXVLavWuazEiMCN/ptXujotpCwqNlG+RDf0bcyzVZXaIn/K4tgbN28WLi8VjkMGjbXVcbaPGQDKFoMQI4OVJWXtK1dwDpTNtXU8j81LluFReAZOELyEd/l5ADrJ1rgXQyrgaOCZoWNNDe2rWheCY8FSTlIR6+lZKAv6pV/6Je8yCOyYpI6QMXuxJpTsaRG4Eworc+s2jDhbtingxgHtqU/nz17gFU1QMF7u2mA/lVCR2vlP7ziGt2yBz+EbYaguAFXNuuGMCnSxWTWqgtUjygu/JFB+cf9LyDcGD1vwDb1bFqWUZZnavuu9vTRN9xImztsxw1lb08j2bw0Nsl9AQLYCHg5q5KsdxcsebXGELV9KFnfde4++jeN3TH46YEAfRjNnwZLhf74rI7xJywttVWhDqypK9Ys0cKkPwBXYUpVcHL9kMFrTwDkjLV03of3lMdIgYGrXADcCRUzySIGh/LDlXlxK8+1vfF0/2LCRIhpUnkRLQV6XO7s0qca0UU1SD9vyO2uZh60Fbej6wl/+pTbM+u26xgYHOi8vKX3RfKO4bSTmSZyFgF7wcXJ5dk8LsKFv2cZQ/KddZKTtwBr8xF7Ekh0GmgGQIr9fxCriBUVUjqQSW4AKA8mC6e5r18hddXhO2WQGE2Q5ZfCn6uQHX4oMYnXVQdWf+IA0fp7+AC6PhxpgNeQVl9MyY9hiCLDhH368hhkCvvozIa8KBdMvIWKyIlhKA9Ulj6YEHA88oQQxakkiMgtI/GKIGmWGibLpnZVpo7XIgEs3RGgxsIlIw7iQkQcoAz1KqZqScCBASVcRWjIjXSyrLJubnhsYHBBIO3SxpKhEN6KlscUVV/bjjYyPTE9MuxLFNGecb7C4TEjTWN8AB64JH2zkYzsAQmNsZAgfmLmvBC3AzM+LHgvdJgJooC6xCHUQxmF/ol26bipuTwyPKo57MPcntA2b4oDMHIVszBb/1aKsKNrsrn4IYhNkpDETtaMOV7GF+FIi3SYM95DwKhDDTy0CyLYFK2s+kDYW5sfWcyzC/yRregVtBMJHEWgnnUmREvTQxZmIHHyi/7n/y8eeEAlpmAGFgflWw0PKg6vbyXMrjyPUTzbtgRFQC7LJRih2/4P3sUOj4wo6yhNrHG1BDWKQOyfPzqtzFy8YwrGuA5FYoJRQABLBuAm73+LoUzQnXGkwPprgwDgDvXJiE+ZiN1wlJiDoVNZvYhxG67RYxsfoTANSKSZh/frZs1bIcKATxketqufjKBManaepIBevOr4Y/tDgpjGIluMdzWA/eIQcfbVV7Ss1NviuFOYyYNnAoYvk5N2D0VL4l+5rXffeuevixTh4lFCFxYDguK47nNUo2iRO9u9P+KDdUvhizq7Q7oIqvg8CpGJ/kpAXWE7Z2JI2mNFY6XL/gw/l5UfEieFqxEa1wyQhQNUwTS246pMonIrLiZzUkBABG6ZYyPFgO0x8haR6eZmdO3dbCI5G7zgsA9EDCzG1ACuRbhAHtieB9nZfXbd+zdo167HUlDKR7dq1W+NqST1CHPxszP9LX/qi007tIbb7QmcM5nwuZ6GRg7DarZ+ZzKZHIAxzjzF/za9tJAO3dNli5EyzrV4BqPycCAgkwghTHA8xAEN2V69Bm3JyvjQHr5566imloE3cMiCfh0W1B0A7t1Tnkz8F1lpldoVYbQymJSSJhtJCW1Bi/bF0GT7/+f9KOT/wgZ8hgqHhQUIHXDOvV3nj5nX8QVpzS8sTb33KWhoDr4DQBNLnv4FFaVjZSHQ8IE/zdQYIhfhMyzBvagl5lRrMJR1l5bH4W3umdtleee21K+6uX9V+6sRJ2vv+978fOfJo4fySjkQA8QGXyAU+2OhX+CiiQiwxqtr930gwUmXu7lJH59e++g2jideu9QzcGjS2a1twc3PL5GSM0AOoARjot+RvRCThpNfmhgYQ3NRDFp//r5977InHCVqlqoO4F5LiW3BPuAYTomE1G9aGbvsET80wDhSXFbPEO+8MT/KL/+BXfv/3f4sw2eDWO3b6ag+ATtcdd2zPL6764fPHUwfADMCbHQDa4nTJn4glQGLnjAlxx2/qABhZxy4PSi3Kp0X5WbMnjqgsLVicvnXm+KFz547PTY05srNw2VzOjJ1FM84ii+Et6/O1nzk22i4zFRBrDmNcMhv4ikERZ4vaGCAc0UA542RybmbSqh7j+sWWc1mYkzOfH5cERwegwKSE2MUKKH1U+1Tm5o3l69tpBayX9ckomkd06F0fIDJnDz/G9wYBhRYBm+MJScSERKwpyjFHYdkqkukJRHUD1BWHmc4tGEoxO+9AOX9yazzh0Pj0qCuCi8vXrd9oM31xSXnn1R4zqOY6VMeC4lzj3MXZiYne6z3V1ZVWVzY2mWCMwXLWZIl/aNRMtqzF2GfBMh0AW1aoNwPXf+LNLPcHh+VCQ8NMb3X70cGg/MLTyIjhNCYj4meDR44eQzXL8s4nyOyd8zGOwH1xLOgSVUhk8tzptWuOE63TAdDE+so72d8iEJeoOkuk1K6N54Xgz01NjE2K3X39i7/4i4985COaGA5EftWFXRTH2BlD8AsNBbliNqi4SlHNxFBnBsNXJk/0WdAZB3ggENNwVzqHo3liklIaG+p8OnDgRRU5HYhROyNfhi0bN3HgTnnRdttbyckYEUey412g9/3v/1D8WlVdyykhH27+hKd7LTq7rrghhJ+/1t2Lap0ZZTlt6sexq12/AmfsQCAdB5XrScIW/sDakrF162bUGYSi+WarEAsZZFopQUxp9kl+fk+zSEBI1scAFh9wGBpUj0s3gnD40EGbW+6LY16jwa2sruLVHfLD/1y8oouy1niqUjjGm9nbBpricnZd7Va7kbWLly87y8SYyPGTp2E4NDziqxvnaJcndN5RK9lqCgpDWKr2p5YOe/EcED5WosyIxQF+FS1StKroAk1wSQcgk7JJIWUC1SJQPAM9YSk/3ukLoE9US2ZcogCqQ7sURNFnYzTAqogGwkfttALVMsgPDQ7fC8VAtbJNrS1+KYAU5GMsPNUIZnr3FWmAUyRyzIQyA2EPcYgfkKk6Q5PQVkuyGgj7EyZaH0UkJlSVkhkamElwOkLQAx8yTM8QA+/kXhMXlIOARrVzFWr3Z4ZedEukK+JP6QzaLjvLGMsqSu3xmp6dsjW3oCjfPk3pYyMuSp+Q4qvlghp3uqcUpfWgFPziWIJU6DpOADHBu9MRvEPMo6XDB5UixycZMAe7EO4dOf6kbDJQJEyzkB8TCCLhr31HJqUiCO/aODV6J30PqnlFrAAwymYLy6GnRixCpnSQidIjG/6b4TSwS2dEKZa4ocKiX8g0N8UgGuWheM5kAArCcENCEgQIEEOCRPBlYJv4Tx9SXQDqk+Q+ec9KIbIJNDOkSsrHLA2lsBAVWOPjxhBQ8O5Hch0ZN5sMBHbMLcQgIt4ZgT9/Lgb2ausa9RWJ0PZ3/fMTp08JuK00lJmReMBEJD7iC82GJQhUH1rSKZBrIGVWnXQqCB+/OlXYoQ8gLKbltEEev1jmhBmE4YuygMsGOAYREu6ISkF+y1veAiCrQIK7jeUU1BqtJBLRns4GOBhnJtcLv+9T4r4mbdtWQ8g3gIIPUKpAJhb5BTOYkHUTwQkgw4MWV5tIEs2Qqy3IWCoPRmuIQn2zSTegjMdYa+iEdefp6bHol2IyxmICtjQ2xQWTPGONMQk3QhfHgiLN5uuHD9U1tFi7Q3jyezDfJ1xKyIDM8IgZY8WyMmQWFYqe+ElT8YpiMT/40Ej5cQk+SPPV+fpt7auUhQawsoEvPy/mqzYsQroVK1KNLq81ZYqrp0+dRaml5JR+167dmsktWzajhWrp7+KwDlhv7zWnCZmTgRuJg2nIB9NA8yfFJ2VuBathhXwG5uCpbTvuPHXmLBemCaEJyAEWVqScmWsM8+/Zswf/yRd669dtgCrJ0gp9BqzAIqM78qgF8pp2EHBDBkI8dea0RK0L1cIluGGaDICzOq0RA6NyMXZVFbuRVrS04crNm30w+cIXPi/9oYf3QIxhK6jniS6s0Acw3lZYVGyfszVy7rvFMRQBwmYARyYFFhJ5kht1JZbq1EV54IyH1Bhdqf+MAw5YkIGjUR3Mz1240Nd7beP6DbSOkaNOI6pqrKMzGmlMgCT4BKQK1WEsIYbo52N1vgiBmTvzm6yFbw7k/t4Pn758qYthdV/tMVKBIZaluQjcTg29qcCnpvK5Z5625XHX7h34U19Tg1diss985jMtTc0syCn+KlIFVFWNew4Bg1JJ1loAwr4My5CLNNKnM/jGe0eIVl7qEFX7Pv/xP/7HBsJwDFJIKC+Lcxvd/bx6w7a/+NIzrWvvsAcgdQByl8cm4J+UDgCGWCYYDjOLg3/UAcg2AROrkRfRuTyCZ2tmPA42Kljm1OHhzstnTx97fWrkZmNlSVHe/MTI7aIQTrTcsUTG7Vq5jgfNEXA7/EiDjsNGv7AOh/0StGDf0NfE+Khm38kboeaGFLV/OfYpLspjiCd27cXOALUvOq7e7I9jNLWD5dmVwmqDuRkAlZoK8AMD2HqgoKK4yKtQjaqTko0mKjJjZCv2BfOTOiEyq0Rl4TulmxD2PfYImGDMsSNnaGpuOi6XqFrnBLpNO/ILizs6rxmBcFh7cbkd6voYBefPnly9qs2FvvzDirY1tmYyYbbpSnYowZlxOTPFxpUVjc1+k1GPDA0yiuqaKhEqY+H0GIuhClqNLoGLP0X/LIKRijUZ4A9/+EPnjHFQLA4JHvCNyMhMw3l1tGhKDCdzkhxU1sAvpLEbFseW0WskW87kdQX9GiYuSBWvv87XWdTUxplbcQQTxi6/UuCgwEAAM7Gh3xCGSBpueMiH+PWV95aZ9SkFQ/D9CSu0cA6cmxeJDiVAIOOCD7Cssvtq5+c+97mf/ul36jawSp5f64N2W1oN4e/Yscsks2NVlDUKIH3b9u379+/XzdOZGR2bMLbFs4lfFXc+W19/XKF4M+5ztfS031SDVt554oyaq7HP4S1veQqS1BvPYchl8TZI8E6FKJ5FHdY1yQ9D5zHgp4JCYVM3HoecwoF2IVx+73pKascT4gAEnojiM5UqLyt5dO8ecaJsVMLsqq+rV61VdWFxiUqra+KaGj1G0PBHZAY3bdbN/gFs1NNxKbF27+vf/EbLinatiQ4AzE2qgaN2YbbZd1gRmSoECfybX64MMkiQWS1yooXWoS6OYV1Y0NLRHGikNkv/EAlgwl9OqgsH7Ze2wyYpmJCj9PSAJgMgmYmF2RN9YiDk4YwKLJXB4ys+qEURTQYaFYetstBTMHyKtioL/b2AIN1XyHjxp+K03Z90GwlIk01Tgl76oykRMECbCcABHDT6JFsqLvyFdkrxK6f86NK4y5nQSISoy0gB51VsQKIg7ufCSQ+UvaMosF2KpUcQ8KhCODIxFTs6IAYysPInkpktBKAHSdzzC4IUvRj1emSDsBFJm6yilmzhGQzVkp2k96PBKQG/RDqcWk9flU1MgJUXYFXtSYjVVcVsGIowX+sms7Lq4mqghxXiEwqDmYpTj2wkOtymnB4vsPJostGlOg/0lKXA0WW60cfY5QSWXiDQESPM+fatAWGVgtZ+O0lSTrXDAcn0J8kLGkDhPwgUDHxowN/jJas/L/dde7eyRD5UqwA/xEO3rbWFhwphx8RoREWo9ael6kO3b0ORevEyRj0xemAwVr84l6Cqpnp8bMqg++uHj9gH/Pf+3v8km4UgFy5dZNW0HzZkw/YAp7W+qlGKd1XAHj2y4ZSAjCKqlFVwiN75zUQJXuMFnc6MpJDNm4JENjEACH/FmSUWIBh6Rgt4E/DNVDAQ80HgePeVV7XYQ2YkM0hDCOIMdFm1SQB4ZGgTyTqI6gKcUNWCfUITL0QLTyRgrq8KindLI1iP6VF5DG+ATMbq0hnQMPDFSfYQs9QSow68fEgDSlRqdKsi/K0Lx2C8AG39ujV0zgM9a3Yra6rnlmJ1Gl6pEdVeYJKk5p3pQk8VaFSKpIgZ8t4lKhhu8fZt+OASpYEkTsojJx+6/8ABbRJktFg4Rkyp5SACMpJOCsaNEOWrKhBu8+Jb3/qk6MXkho2bYm6LSdBirASNDzxw37btW8ERGZuc4XwtfEqix3ZoB+bGyS3uLCkKBZiJkzpPnDhOYUh/h60XK1Y1NMYMrz/pD4vCW/ogBQcs10GRlhJvKY88MPEVbmpHKf2RDk8VETp6sSiZU+IG8amXrFOTCY5RJfjIyYGCwNNxXigi63vuvrerqxvfWB1zIFhNo4NWfBL3qMJiAOPrgECVohq9bGhquWP7NhERJVQjkenq4CSDJwIzAEIH6RBIgTLqDC76RaCT+BiLB2QjAamIVi1JE/mWidijYkRNo6hRge2jjz6q80ar0Sh6UIQ+YII/+QVgbWonPou3/Yko0rRCD1aOxNZsfPHLf22Tks1wNqgYrVXW+Bm114BFDDQfa/11fj74wQ+ODMUxwzXVVUJJrucP/uAPfu3XfhVFBnMgTo7kgsxwKVmfilBAc7oRM+G5IC+eoHWml3B7bHIM2o52+NSnPvW/f+I3ND/mw8EZGh437GQJECG+8ML+9Vt2fe6LP9QBsAToJ7QDQBC4hI0eSmIuhTFSFfeK0G3LcvDESZoG0nFPW4Dw6qriieF+HYDrl07mLUyW5M0tzowVCZit/2fIhqhy8+ZzcudiZXxu3mK+aQFptBoE1WXDZ1YeqUH47mCS6PtpeSRx+aVWHS9GNGZ02JVIegC6CrogMTxozc+8hbPmASIUsAkBzmYcQPYxvv94y6ACIOjVKM8Qog8QjYkZQ3cNxwSBJ5VStQmCjPp8kwD+tN7UXm0rzUjcWN6occ35hYnJ+eKSqo0bd6xcu3F8craz65rrJuFQWkkTpvt6r7avbB0c6nd1fU11o8N+aD5Q05MxFV5RXkohayorDT20N7daxkmxaaMpEPU6aA7mB7JNutba0TosEupRZuE+5otuOXZjRnoISt19z71cASOVDQksK83uCvqVCqed9WNBljn8WDZxR6DMlg/k+nQk2I4BcsVlYIwupVKQWfEbNVW1ds6YGjWfAHgKF3xSKZ//53/+50888YTpL2E6G2QRVzq6iBUJKUSTB3yZ7RhnU1o9D73izYQaBuOsdIcMtvBa0r/xjW+4LeH3fu/3TI9LcXoXhA3NeHeTPRFomXH129/7LlEiga9+cf8BPpkZgn/67Dl3oRYW5KaNDfYHimHMAOhgOiz70X2Pazg4dqNM2II/gHDImMNb6sCEZ8iiRgD37t37wgsvPPnkkxs2xFZs7PVr55gFV0iT07nMyHRVNrvARvz5wz/8Q9jqLeAeZAgd2ulRhQ7JPXffOTk+dOj112DL29AZY6/O+uRgX37tIAj6nPqhG9bHNi3UhVZku3VPnDqpaT7mppG2ttdfP2wPTW/fTR3p0jJHgBQNO2lkfJz6aVOcUwEHwDk0xZGDNHl8pYEw96vB9SdB0yWTQHhIBNoRQvGJ+6UG6oWzbFQON7R31IPs9I3Vkjy8PBJVQXAyw1l+rRI3LhFYXLIfI7xHdjAJJLElcRgaEj0g6HDigK9wLq+qlAiybB5f6QbgMAecFLzI7EXb4UGsPFAKWFkMrVlRi0cVyqIdN5T1LoMzIlSUpCmPgIH1wZAFgQZhbY0q5FG7Eoo7ot0mYHyAnkQeQo044JdTSWA5ELWI7h2djNeqZiP4hidwU4UxPpCVSpggUO1gmkAB09CqxyUBOCn0Ca+ZXd1g4aWvHhxAqaetbQXgb2IIGt1TNZWDKro8MmORPOhqqqtV3Au5UEUIgCyUol2UEMmgQR6egPgktJMHBPhAT0Fg/clSsEj0S7gUOzMi0zsLvKpujxFhusFCEeUiWlXDh+2vXrVSWUSBk/RQLaqTjc9JoYXMMmhtZUAgziTkJcI8d++udmNz0DAMYJwy9kkYvC9dXl1ZtWPHNh5EIwFFlzDpIcfa0IJCvQKgv/rVr77lLU8cPnqEUJFkuTYaentY1OIzz72g6/gbv/G/z2QU2rmoYsbw3e9+VwhIToSKj0p5vMMYciJRRGK30MTMI/wwUbjANiBNzJgSnfLsbrzEOLKwFtY4PuuVE0wkwVZmxVXkIRUy0A1QC1Tvuz9OUxbSJUcpYCUGjBa0sSgkCNTwzlr80Oblhffcdbdbx0FT3C/eQYPlAwgrlqwJgWfSEgo9eOumE16ZOpTM8IIsJ+5ji0Rkska/pAJbC1ivXrv50isHneUMsg0i0ZLFvr2Zpoa4brDj8qUdO7c9suchjDL9fe8DDx4/cWJ0YlJZqolkfKA0wfnszHgoSadDqcEwqoRdElEEfyR7VzUtwQEwocR4UJEsnJq+fugNLZz8KRuhIA2NCoqMCUvICA6mQdXyTYvSVW3RCM6vbF/94osHrlzpMFep+VEQUR/84Pu1EyZqMMEQvF1i6lUcDtDmEG12BNlAHUyEp+BYGEVqSGhra69psHIuPinlk/wwURYEgtCQy4mlyU1YOWPpiAwkTsp+Nag4oKfH43gogGZAUwpn2ahl6hsgH3y/iFJQHmVxEqXUiaPBEzjI8PBDj5jdxnYWzcLJSJBDixynrRQaFacGWKoKOzdOnTnX2NwkuKddGKJVMA3BL8ABFabzOAJtAyqqKirpDLYjTV0GFHv7rjNy4/rWc2s25HELC7bo8NBAIYvm1s2mDjsnTQUxh1tErwAd5hAgX6qiHgh70KJGdF291q0Z4iZI01FFXlz8Z4j9y1/52qZNW44ePeY4kfHJaIbt+0e1x0Dm5YuXKKGWW6fu+9/57tq1a9y0ysR+67d+613veodoBvdU5zaPmDksLgbc78YNG9RLWJB58rHH4a+NF/HIias8DHwqa2Krw/e//12YvP+DP0PQHCyOOdNP1UODo8TR03N9eGL+wGsX0gxAXdsaS4B+4mYAUE3xeO3kuDUbWiOiMUigsdYBkMGAOnoZbMRV8wsWIhbmzo30d3edPdJz6ZSNAdXl+foAguvocNkUJvp30oWlPnH3QeEyWwmyNl4nQGgOON6aJiYpA/yZfU3pBqhIh6O6uHAx1uu7NthUu+Vmqo8ThUT7wgQbePQBzAqIDWy6N6W8LCcG5JDg8RJzAdljzZDet8KhZ1FjRuFSjm1+/Hty8oGVmgRWi7GKgKwtAfIijtBvNAtQwBwcFjrv0iJO2a237ZYC1Te15+YVfuvb342T1/OX9d7sqa8td0bQg3vuNeiQm2N34wIjUqmBF7XW19VogLdu2hRtWVGxLnaKrnbt2G72yTYwaol2s1jshaNjdMoa/TFewzD1CliW1kop5pyuGoQzvRXC8iFairQfjJEqyNnKzBJlpuFSEMv6uL6ammqZkYlGvSM5qTqL0Ouj+exFkWd++CzgwhfM8cKlsF9NhgaIvcNHTh0ARueTda0YCL4JG8uk4Y8iv1pVAyjaTRVpOxRX0EFkfJoN4qyYmnERBGUBvfFOXDJ4ATExAn3wDjeTBaJ/Bz3vf/Glrdu3QRUtmrA3jhzlrDg6bqqj6yqPauIFgVYm6HXoANjqAL0YVsg8qslD7YjhLaUwgWiMwoJGCWVADvwxgZ9Mzu2OO7Ykpslw9WoXrKCOn7rBegjmFSmZIoZF9Mr4BGzntIlYTk5PWcjwEuE2h28tL8yrrhJLtOBDS2ubpnl0JK6acq4G/PMLigG/7977MyuINv3IkcM87V333K138ba3vcO0qrOV7MwSIWpeW1e0q925RUSDKBiaAVARhyYdderFdpjQKDxM2WCVtQKx6D9NkgmakYyKaNmbmpQlbo4dGoaQqA2NonVErwMNK3DApGzyK6VejQshcrAqTSRjkaotoRQLUmM5iVVmwPFZ5pB+NrCofcQ06XBwq6MX8OXxogjgHpXCHyi8orSUDY3QIz6J4EDGn154cgXlxxCZqRxoavcr0bExEmVDFIBSUutDGbAlUSRRvZ6keAYLXHKuOLpkNs0CPn5mGMZIeVJFiRHRzy9YEwwC/iQDYSnsyBcpqE5VQEBBT1/adxf7o+aV8sQYRnaiY1CU3aGLWEJBiBppIBwwBCcJl2qhGttlpnvesVpFaPEVo6rLy0iEryA7DAFBpWwE85kMOFLQ5ZNK5dS9wli0I4c4ZMNhjEoNNyBZnuhGihZq6mpb21biPz8Mq7gVO1oKxC2ISeBsIRDm+Fs6aCCrBZDU9GMpnOmV2uEPoOqQAHmVykaUuX//fY/xRzpLukdmiw0MCGMEN3rebuextq+9LYYBADfw7Z7kibExHT1j4AZfWb66MU7PztYOEJtb2x0dmM0ALn/Xu37aIiPxtPAFrtQCVR4xkLL8EWnRG0gnAfuFH1yxj90SAAIAx1BIs3ks8KBNRcp6Nm7cYBWKEXdyQp6oi1XgOITxEXAyUFYpxs8mAbGqmBPEAh6fC1adDIpw4taf0CSs9FVUDYGS4qKPfvgjto3gFMcBkyTsZMOpIUmqBgF1uarQMIpGF1Ey0xv1wpa8169fS8wQk4hMD3zuvPu+/lsTvO746LAg8sjhQ1y5DgDDNuuuLhPplOzOXTtIEXznQhpqw0CgaDxQXAz8WTi00euhATA3BqZq1GEIzBVXI57DHDeIXyl6jOf4qcEwfCKzY2e0wsgH30k12CWDipRiJCTIZSurXu/Q49ccROMUKrGjXV/WkKDa5A8cRkZG3/OedxMfjTI4ZOKedPAh647O4AmXZPoPUcIOgq6uqvArhJFNf0AGIfXE1Exlbf3adRuoDUxU7UW9MiRKxcHgwJwEdS91VFavXqvBUxELYRIQUMrYP9r1Klkv5ijLerEONAgk34E/UrARW+RBvsy8GG0UIsimuNC/uip2euEDiVPjvfse8Yl6QFvbZo4UrzRO2BVtWG6OkSSXI3Z1dOKqSn1FtbaTVT/66KM8MVr00+jbi8+/wMub4sRb5CSs+AVNvqaC5jibTyKURsZiNALC1GPLpg1XLl1GrAaSODCHCLTHhtZwhtzNwiPELhcwcWbw9m0ziUblMk9Bkrf1z3HJ3R1/9VdfdvaFddW8qL0pNXX1Djw1W8F3WI2mCg6XG33n29/Oi9mxcMe2rXp0hi0du+GsDyQMjcQ0F9LwH/yTx0/oq+AeRRJe4AmHqDO2Yb09OXFPmftaqmrCcA4ePmj748c//i8+8YlPnDl3GrG0iIrW1jVBvqqyVp/BRsMddz34xolry6uaT12+1rByXWXDKpuAF10ra3IzVp04pmbJ+nNVx7DzklPz49V/HjJ98ze9sNz4kD2+pkfY8WaKF4npT5m9oys9/y39x+dwp5Q301OpNyG8mS7CJwhAiGlu1gzAmCYzxl4zjuk6vgnHixU9BcVxscvyZfP1lUWjN6+deP2FG51ni/JmC3Nmc0ToC1ZgzmlOnepvEN16wvxly2P3Wxr/ixF2p/rEg8mQ8cLKIGA4HHvd6NtUVZ7n9jSfYsn+vOGe5fbWRQAfZ6gaIIvZSPeW5eaULC+IFqYghm884IhBAQHMXoTotmREZbWhItoFQ1b6D+qTGb0FVlCI9UHMdi4GzRnVwSvbAAmwIG/CBMWy/JnZ3PEp4X1hdV3rmvVb2trXOibI2MTRo280NtUVFOfaZOxoAZYyPmz5SkzrcVn2KvCcCGFra51k39s9NzntemnBh682AavdKUAMh/1mwVNcoY0zXPHXvvY1c2haBCzjN1Lf1Z8FhUXsmq7ySCiVwskgh1Dk5H/YMiCUXAoDt+ZYTk0qlCg/A3TSgVJqYUErV7WxUPOEgHisNR0dHrNwjsngJAOBuaiXhxHZS3n66adVzRzgBkmQKypjVEVbfP16j140i9aaw8SLKpwwYIzfiQuq9iccGupbeAy2CUPcZsIumgBZ0BgNwcSE8Nd6B3pog5+G4vDhOO10dbZAxbp/ZXfduRtDjh45Bj1zklAVolkHBabx1rb2Fv4/fFEsRqr1q+nRQrmngjdraGjUa8IEdOGehkbACRo0yByGulsm8L1AicO8ePGCGu2FIK+Dr7+Kz6PDI+AoQn/8+vrlL39ZLXy4Fh/nVQ0UyWLaxPhw+4rmyooSmIR852Ldr1VjWjfHgED41u04T+n0qTMK4qHW9vTpk2YzjLNqJp55+jkn+tNTxtm+ejVndXtwGGIxaZWbW1pSHk1DfizbwHA4Q4NBaDXQhZke2ZBGKxBLOWFotQ60Aaf2GhfcC1aXljr0SdQo5AANSjRHKXW500ctdAkH0CgnQtCoFF+dwlD6rB2RwuGjQrp35gYl1qcuEDw4Bs9UtdYTHCxyfQEgKlWjIr5SJ9kUxBO0SCQs2CoiD5go0gzJSRURJQOK6CTcVCFdXcGgbNW+Iy4Mt6si0au4SoFCgvZIOq56V6M/7SIz3GuJqCvTMFMRHDBzCT054SMGlhM+akGji9Bcx+ZcGRyDABbhMxH46lcROaGRGnGqIoOBDCNrEPDV0Bu1T3Q5Tg0EKudXT1e9uA0BS6QURyM4EpGWoRQ+E1boRQ6GiArAIc3chXnDoIALWQlFKQTim6+JUaAlODjs3UxnwtBXMEVfIk+hGszBVx00MFlUIKLAKH0evkilrFJ+Iff4SKyn4sFplyF7bFyzetWePXv8SR+udHSqSEGk6ZOTEfnyA/iDgeBAD7Z8kXgm2PWRdz5snwnlYx7oqa2uFATLLWTRHiCD9Tqq3awlo0KUTQ/WkrbHoe8TPCxiTFqpWPuI/omp2aNHj1+53Gl6YefOXXYY2bYICD1APLQIFQYcGR1ChqiXGdBgPFKpRL+Jg7APj5P5tcTEEE92+AxOsRCeBUPiWL2FmIIhbBUxdZ6Oy8BfoLCMtJI8EOi0SqsY4czmMRp8bMIOtauUlkskEtEGtSPR1pamM6dO33fPXTwRIQHOEeOjunAW+3AWGrgpHFQpX2aRdENDfXmMZBufi042CamaWzTUgXyshhheEbbTsOsbV9IZKGlaDbg5v+j82XOKTE/GSWqONH788ccdvCjMcjPllm13OBeWHaKOCpIXLSdIYNUOSUYuKsVnQ0o8OwR8peKUCVsgSVKsRf7EHFSrC2MR7p2srZXEuKT3OAOIRy14DqY4T6Uy44Cv7tA1XiiDJWSAtLas1GIZF9DFMkalW9Lb24MD69atEVfJICwgZEIE3yMUVqloEkxb03ifxfm4Y44v0FrHp5nZg0ePx47A7duTKtM6tINAMUAgcVSTiMzaaYn62LSc6EgHpVLwloLhicykYEiLSsgjBRyo4pIMKIIhRSIaJgAmqrELMh6MhYPan376WfOVVEXtPBf9oTBkYUkAuzVAjjnKMlfO4tbgbSNGhcuLnO2oKaInErdt2ap2rMaZrs5O9bJ2yFihQf8t9IcnoeBJUJptTER784pWaEBYupkB+g9V03RTE2N1NdXAegBMDkXDZk8wsGSEM8xNLVBSRK9fOGKdPTyprpkZjXplRfW5cxeEI7a4cYNOhcFGeCtriQC6jA7QW5lRvap9Bd6uX7cWsSBY3PXYo49SLWfG4oONd/iJ5wJ99wEri6v45locGqiTRiJt2ZHe1Btd2R6YmZLyEnHPxo3rtW0iQYRw/ZiwvDi6dppwXnLr1m3dfYOvHr5SXN2SOgAV9SvNAPwEdQCiQ5J1AAS75PXfOgDi7YgrUn8jxjvTY33/lP0CNrUtzeUvThcsOiinr+PM0Utnj1aVFSxbnDWgz0s78mJeVzImtfMd78kVx79uCDN0ajFP9jiBR9XA+ks6j+dhbmXW3eQtGffXBzHzoEvJoRryt1XOfkobg3OMJ84Kv+diC++yHDPZdg9DHhyS5YG9KKgjAH9dKnsIfM2Mhr7mWDmkm6HG2AAcvYTwdfYnuBRJpyLhA4KyijiQaD5nySUC84vWOeVNTtvHUNzavn7Vuk05eYWOBPvCF/+ymoLlGJKwPOw2bzzYP6KtoWCZOVQAaKEa5zZNO8dH3AMANw6QIegeaIamZ6bYLNdE95gAE/NJG8TAfYUhraOoSMMfeq5B1U4xTIMIyZkAzi4YIKfB0NTIY8AfjbLRWxbqfC/eTMc+84flH/jA+xkm3T51+oT1b5o2JKsUnJ3bd4XXzXyaXwBBVhF82COPAQ5Dhg/EJsYndZjZMsTk0Yq98cYhZ8QRafLJejt2OBCypk0rxs/bKw7DMKLsjA316vtnVdR6f+bpp+12cLslJpid0RwbQLENYHB4+L/8l/9im+y73/3uK50d8g8NDqPOJAxouuJaGYjZSOCCF27he9/7HpfrOzTgadDBciCMOnnyFM8Gf8au24PDmzdv5VQ1Z77iDxcttOCsNGpaWEtajCBgEX9iAofVOwaUD/HCz5vvVXsSmfYOn/2JUT7hjzauuamhvLSw51pMU/ByBvKHh0dMo6k9vyhWja9cZWyx7S+/8EUF5ZeHxDHn4uUrxP3aq6+7xssycntd+6J74/aoaGucxKIuQyT4QHXViLEaEUBSG4QW5POQGi+iwWq88vDkFF9OwlK7wf7BodEH7r9HS0r6MlNFbY0MIgRRinZBX1lLQcSpjVCFd5pGwyktTiIfwrBSEawEbqqDqrqQoOmR7quCasQWHJbCOuAA7Tg2LK1+ybrivuIeJuAYi1Cpd4n0gShB8KeqgZWIQLUTItLoPODIVxwCqpMNPmODw5ABRx5lGYVHjUCRYzj8uTntEZRkcxmWYQM7gMbHJiTKD0OuSHXIUYVJaybAANUuwK2srv7p97wXPaoDAVsUkVPVqsAWBTGTmOAm3Qo3Yxm+UgAUGfuHAPEhwYCjX39Cz8SE/KhQpLahXk7IUOOUmHhLCnSSjGRDHeZQY9tX5qamTe1DFTSkgcbbsGhsgWT4tEwKPnkP11EYA7ugcQipSw9UQl5ZVRCxbAhJIrs1OMg0kAltiXATGQ7cGm9boaPossQ4//Ceu+8SmmIRpVq9Zq2KIOkXWPWSEUIIzi+hYJqALfMzU/al537oHY+wQNig2Yf6ujinDFA3QRq4VR9K9NCMGlIP0fb61RbbxJlKcDp34SympzbeuhTmNNA/aJryhRcPsKJdO3fjnSN1sQaR4MMJBzEdoyGXNAOKZMbCDaWIz9wIAWM54epXZmMhnJRaMA6RfiViKzuZnZ58+aUD9BDjkh5QQQjzsDjilz5JJ8tUF86evxALijgjQnrPe94jhcCAVQrH0Ysug6lSiKfjyqUP/Mz7r13tZDzYh3dQZepq0QfFUw/qiFMvLYlTT9JOOAsqtt6xWSm0eOy44FuhRITQZl+wwsPxyZnKKtuem/zJDHRV4aBqMTHtoWG9167CHO3wdDR428p2q0YgmTyC2mke1olHsZENU33oyYw/WiwQ0MJucRueDz30EJayHKEt+HwoHMCHp7AYWABd3YAz4ENJZlKTB3BamDIoq1Kylpm8NDaIMiZkAt0RcjhjJ1nG1VqYGP1SndkPPIESMTkSB43inTAk61FKSqxGAMFpQipqaowd3jTbsTkyG3Kcyy0YGY3OOgRwWE61wwFPUKQJwV4s1WzQMV9NRHihPESPk6SGOoTQAQ4UDoQlnQHQdn+ubIvuIkeMHMVxDMIgUzOu2YvhfOSQOzhqMQ1mUivpsxiXZ6GN0mElHME30QNCYKVSDck3v/Mdx4BWZfenqNRjjASXRAMItMUcV4lAfhuXSMoxcOE9S0sIyAMIhRSjQdK7v4kShuol64lx0b95veUK+ppsCkt5TDyxEAiBSIM/qsUE9hnr6qHr0uXLnG+aBNPkkIi+MR2enDZ6Om2sS9fVXBBMBJa6/RfPnecT3OqNRa5QQf6GjesPHHjRxtCa2ip6xRWiguvARkwjLOZsUF+ijiuGm6jVrqudVsCNdtl0aEG6SXmY996IQzw+9rGPQtXRkUjg+pVykQatfu7ZF9nOxo2bj5666BjQsrq201d6LAF6swNg1MhFYH/3ZwBSB8BmWIGwYUaj6/hpwR+dFzKLIWUg9Gi9IzqO43FGJudJIXdpdm58uLwot7JoWU/H+TPHXxu5dT13floHoMicsJNBpyfs6zDsqnHXfzOmH1MZNtiaXM+erOsRa4EM2NAKPYYII3Q6J8eK8nOM68fYPrsUxy7MGPc3D+Av1xoqoQ/ArRnut4l3eYG+QYznic/4TMMcRAwgF5EN9MM/lhJ5nCoLPpj0N/7Mrg7QuSFua6znZ2L3chDryQKamHCwiMhlqNMOzHZ+UcnIuHsSZstqmtpXr1uzYZN9Dv23BlifDWtO/zDUYhqqvMTsdnhvLYvGnl0IcHl+jbpVMfNTM2l2JZy8KMPZNU0NyVrZHecGAfh7Z7ycBnGADxQT9lX/tn/gFtNm1PwJS6ef+CY/G+RSRCe+Ksjw+QfsFXoxTPTSW7Zgp68hBg2zRlNZcR7HtXbdamPGXIFx+g3rNg70x8YzbMBDpqFq/GSMgmwGJSBgLLBiVjJ0Xe21jBsL9ZZZGVCqQ93XvvZVBS3Kle3ue+60nwHOEMjPKcSc5NyQr6D+GICOAUVsdVUVbrh/A1ZuzDWG8tRTb2Pdf/Xlr0DJLGL4GcepDg4CrhZjtqZGkc8d3XPPfaKC8bFRu56AkgFDPCdPnlbw0sXLfE6KhFz0bsYAQ9B79PgxKwy3bt3CojlAzHTaKvjcC6q1F/DHT5x0WiiX5TBojtowljZOBthilKWenIM/uXfik0IhMccBULqvu3bsAFAph7uRjslMeYrLYprIoAbf61Zje4gxwa51UtZvOWlS4MyZzo6r9U26W2tsPHaajEcPQn767jdJee2G9aojO+KmPEL5F154gb4hRKW0AiZIUKN3ida7JfcrxKI/fG+iFKPkwWS+V6MDJhHgvEM2lAr7ycvDVTDJTl2GbyDsXSmIId8jv+hOfpj4hCGpCEGDRu7Ayp8AAqK6nr7rJMWl+CRd7d7hrPeFwBSeqRpkJINj5Zt6lQUNcCmoUFYezA+eZ6OH8qsdtMLcPOSDCR/wk4B8oni+whPyMvvKoJiwC33HJ8bYPbYQukr1532lLXLalXH+wvnysvJ3vOMdVkk5d5zrgAYIHhwGGQ64JDO19MANwgk9GUxHGPbg3MCnjdhiZEMeyKBFlwWSBIQoQxUmxm8NDqPUAxlsifRs9Rr8ZfOoAoFaK+ot9F+1ok37C5oiviIcSkSTeIuliQ9SsMKnE6dOQzjwmpjwoiBoahHS0HbvtBRpZKReRHV0dVsUgG/+NKYDCICOExVFEMo6x3itXi0zUDQKZySqhdClgAMNxCruE3dB28GHKtI8asx97N6I5CDkoE7xHFa6AWDNmtUrV8R8vfLM34peQOHKt05Pjr43O8+L9dqtAW8yY2auOMdim4BFYP/h//60AyWffOItgqcNmzZSO3CSt4UN5BAMaWilP5OOQhd5+196hRMUb0n0wJXfETTs27dPjVFpNqtFDEjShBilvHTpwvXrN7JZ11EhOnrNaWoVuCdrAe+55y4mSUjWNqDUHexg/vZv/7bfD3/4w8kqkvZQGg6alkADwsLNlw68aJumGIvekE2KjH1SOwwtScRE71BCCz4Y+RDomwfgLflesdemzRsMrzoYXinU0AM4+LUwxotu0iuvvfHwI/t27diJw0SICYwQP6EnhHLTm2w4f/PWgFFDXsDp8rKRF93ykFEqpV4o0b8U5hK/2qGNFs4Xr0jWu17B29/+dghzOor7pdkmo+WHIb/We6NPW5iUHkqKQAB/mKsMRAN5vlj/RxF8NmVBKJYNW+hJCg7tdpsMKgSuonN7Q6BHyrjhMY6YtlXFqR86tXa3NNZXVmRzqfl5fBAXru9q+ZlaHAO3vLh07aY7RApogQnpUGIvmlvj8bSLFtE61fllfvRq9+67yEK3B13I1ztiaYkPiMJVaCAcrxCrloGb/fAnWQ/uEaJPskEGTP7dn2qRbtSKsbnOwLsqkrXzAtgiuv3sZz9rVlc7jV3ER4ikNmWSJ4ZBcwRQgGM7zG9e79PQgqlGHQC8JRpYWRgD7OuHDiGwVqewqQldzNURW8lHSLGCGM5YhwSgOjqv9HRfdS2U6kAjZYrBXrwgXM+ZegPiE0VNnQROFx/sn9KEm2Rnm5AE8Ic/fIbnHRnTx57SAWBEy/JcylPDwZuO7u2+tu/RR5iwwU266lYNizFAvveeu2CiU0qRRCrwpDMoFX/w4HTGu0gXFXDQiu/buxfHcCmEtbyYstXW1Dtm+9vf+7aBTNsSSNA5buwdMmixB4DsXnj+gL46BZuaz/viV56vbFx1pqPXPQDlde15JeVmAJjrT0oHQMtJYSgnE7D4hxdLHYBl2YidIJkO+A8bOTcR8XTckCsud1T+nHF2a/+XZicXpkdfP/Ds2Ej/4vRocdGSFm1GB2A2QiJzOIqF0zfmLjTKOgCSKVV2aprhe210/rzLcSwQst1ofMgSoDCKIveRxFmgTu4UI1r8YxeAY/1dJ2AuwNIhHXVTlDOTOgC5BG2yltrYKOwxD4Ai0Q6fYFOAd8N45oa1RK5+0m4wClPjsJqPxb7RPZESN5Hp9mRnGQnDVYx2M2BWKTjXKCevaGxqbnBsOifPvvSqDVu21TZaF76sqLRM9FxdW+M+Slfv1dfWCYsQiKuOg2ZNxvbonqbdoEOaAWAO9N8ZQZ677zHgHZNUjI6CQYA5MB8PtYQh8+HSdVa5Gi97HnrYLluWy+lBT1QNCEPAAZ6NDdJw6ZhAdVW0f/9LhquMj/iTg4LPvn2PWLXCi0uh2FF8+LbiYZvTc9u2bpNH7ZBhUODgoQ68Lchsk2eWqDqQ4SkevekixcIikfTAwE0FLfSH9pUOkwl5LhLmZnndy1cuphaEbToTnTnzRdxXwt8AOUfqAA9LENvb2nQzUpty4ew54bVTZQwG1TU08Q+ZZJ3QGMsvMeoHP/hBjxGE2VmOjm+0SE/La/mBtpU04UkuTtxGixdLuuAsm0k/kQlMRO0aKdEMRyGYwwesxgeBBz57OCiK5FE1gRpZUOmlCxdF2PiGG4jie3GDNP3JvcjGt3CJ3AsIVKi+tnIk+nURbuqz8h4u9sL5gcEhszHd13rRSIgmT5ggOO4osGbh8JE3gHLksX6C5YMLhslzw8daM6TG630xAQ4rNZ69EFspNAT0R3MsZEImWtROE9DuHSs0OhoRDHeSEuOiKnDQsPJ7csoGZ+RzhlQIWJTqIShlgXvyD/JDDw6aJzk9CMd8rCZ3wQmY6hJpKEs/lZUBWH+qJemnukDzFQ6pmRubdCVFE2hUHath6CuEMcqv/CCoxQOgd6jCQaTok0QIg0xXsdefgCNTTmUD1arqNLSXUAIfcFXAE9Pkgbk/MUp1CHHcMBdlUs4SIEzwVTvChREurcZY2kht/JlqxxMj4g6fNKc4ZXh61JTYmN+xCbfOz7vg0FCZrzNTFn/N5ocKFFRmdTETaMMBRZMTYzCHIQ6Yy4MJGn1yx/Dg8JB1h1YBYaBEjgJRPiEEx2iaYIDtMAdaASuL31w+JTPMyRE3Eru8qM6vgniFaYTr17v1TTiGIeolEaCwBVIYlQTnF3DaJUXLOjE1HYzKDoqoLI91NDCJOKSmChXWu0ohXLR4gKUD6vVA2wMxeoJ7Edr12qH0o4kvIwsqJYvcdzx2r04eJJpbGh06KcKjH8KymiyikkGk7WyqhCIDmxy7fc9dd/XdvEEnXHKuDlLAKUs70Dw8Mj7Qf/tP/uTPHP71yMN7eUDrH3AKHFXgFI4ABWlKgDDFkQF1ovVIt+xVCmbpkVshBwLi+RHc59rYLZ8oGyBKBSuXFiurKoaHRjq7OkaGR+3IvNF38+y5M1YCW6Fh0MdvZUXVffffW1Za7rgdY84cDfpxmdcQyCKf2JISky6YSSEYPJ24eqVj/wvP46PQ2XgPnDluDpoxw4qOApUUFPdlc9m48E4vSFQEc90Sc44Odscs3QA5TfSRhzEhw0uktWXztvKqagsksJ1OAHh7mP+K0TX8LC+rpIJod1rltavdRrPsl9mx/Q4Ycj1YyjN6vFACxqM/RsmgATdBM6KogsAL2rwetPHWJ39qI0lNZr90V11wuz00SOfgAAIVpJ1QwmckkxfxQdifGifvqqOIjtUjxHNnzxtfMBRozt5lZ6i7ePESkxZAm3gkLIsJcUMjuqJ9JVRDDcbHTFPpQ9u0h8br16JrUV5WSst1YMU88t8cuH2+q2vj1js0GEaMVE0/AUG+zDDnIiFPH+CDWNTVVNdhtZYGFUbZUSqDaF6TjEtKYSYECBc0OuawXESRO8PDMWRivlKKf//73/enMBqXaJ26VO3MYTlTTMBJUVSEw41MsUvHQ/OmFJ4w1II44HLaoKjlAqpWIz6bWwOHYsNZOEZ/JKKFt1Cvq+Dt0MV/KYAAa5jci1kh5FAScJyYrq7Qt0lr8QdMSxETlsJZ1YB4cI+AMAooX/1J7XVZJ0fHEeLIZDBPnDzmXY349qd/+pnm5tYxm5SmpkV9vLAbpvhGEWpFacmt2/3CBQB1sNtXtLn34Pvf/Y5RNJeCRaUlzmaZs41bixhjRNkqZwuUDQTTHF0RCPR0X2NrtFr+suKYo2B9kzMWseQfePmV0opSnSgjXFhUVRNLNrUaPJcOAM91x9Yd8NQBcBPwn//F92pa1p7tvF7V3F5W25ZfWqEDYD27XZY/ETMAnLSDNI33Zx2A6awDELPPAu94orcYp5p6DIcLikXyQjCf5V+0cH92sryooKay+MLJN3q7LvRdu5QzO15aZAuEWZDYOmYljgF5Iyti75hRyJYAgWmk0Go0fQAdALfucLM6CLHw33Gfc9kmYKv/C2P1f9wTLH120i06mreC/Lg7DIJG6OPg7QlnT8XCAMpLXuYBsuYmxiDVPj+3mEUFEBf0m1NQy7ReiIDMbIbjPmMvXixXitEyQMhMN0AfQGsc8D2wWubyzrgbeGYpd3pxGQMYm563/+mBh/caYnMwlh0H4xOTP3z2OdUvLc5pC9mEkAiXOLGG+lpNiTjRCuMGy1azM5Tp0tbNm2LesqiARTArVsztwCRZJb3nr2BFXUW6fAKjFmdX18Rmes4WaqwvFSEvVfAqDI1m8j+AQICHsYb54Yf26hdJlIGZW6yP/4yX49VYq8ifrJvfhu2N6ze8QIYFqRQE0TPHAhnYYmlya6BpfW4NDq1ft3lkfEy6dTs4/+qrLzOWU6cv//Iv/0+sT1+LfzP1wXtbeIk41yTd6OuHJM/gV2PnkBxk2kEhxXw6ZOwZENmI3lShCEzufeB+LDp8KPYDmMPn5b71re9gAl9hQqO1dUVCFR9sQwQT+Vo9hLQ0t0KAYK36xhADpeh11S5nCLhPu+7cCWHkYCZ8kGk+XB6ekxfavDk8Nm7AqrYu8Llw7jxne+DAAd0q3kx35U03mIqrVFOu4RMtOADq7t277NzT/8QBfalwMpOTmlrrynhaEbqGG9rgM0GUnj51zq5FC4PVK+TT+Zx2p9Cy3OrauCX60BtHdBhc166ss9FQ2tQaQ1FCN34M1Tw5MSV1wk+E0zQiQwKAarlw4aI/TRFofykb2jEfP71TIRIM29fPuXQJcBqi6yxF2dQiwx9MJEBGWZ8QSyHViHXAxrbSKdNdwUNa8SMzzIb2cQCSiuAb/lM2aDtIUHVQ8hV69JAsaB1MJGoH4YYtavf4BCWfsJo0GQ6AnLm6pMBEThbhwQoU8RzGCIxUqtQDGYnygOABUCnpEEAUbGcWZmwfNcAweDuWn6haHkvNfUU4ztuSDisPUJCkP2akxqdchzg8OjEac5w5XAfnmFu6vHSO8zNGIfTP1SyU1tfUJ8JVBw0sckUgIICHrLOhfS8Q0yVAmmxGH3QCNbhww+1kMtL9SawERNzIUUrrhp9mYkYHb8cwR0YmJsiMq/4UdZCah7Yo4kECtdywabNGFhpYgZMSmRJZQBUOkJGiiAxqgYCrPykM5MEkLMiXlRSLu6xvVFccsxYDKtHTUBdGNTSFfmY1x+5taGj3cY25ScdVj0Y5iU9duf/H//YrPA5LA2LNqlUCVoTJ6i4ASCSEeGcv8Z6zWFddGguDJicgZxJGzLRiZTvKUSeout7XbwOAiZtHH328ob4R6jrTWJkYRJ8Q4B3qdNefaIai6vDCg+YrLk/N1nUxDy9iDmsZjce8aTPJ/qlyWGZJiTXQzY1NSTzoRBEBsBDD5+qFMyqkg0zzpNTW18JZt1J1mE7hxMeMkxInegkj2o/RuOBN+zRye9Aaa+tbyB6XOAIFWWM2YBm3o+OespAhFfhY8s08XIly/sJZrKcYSYFEP4Jd7tQoODRaWpqNMKnaIkWs0Ow559FNTDDxVQ+Wzgklqba+FookotGeSwrnIGd2CHOcFBBrpQRPsMITjKIEbJUG3H///YrADT64gShFgBX1epHOtlWtJ8C90kICleehRx7uy04rCp3NJtfgCRO8SsaPkxRIWKYb0D9w09p357jdvBHb2LWGcKipjo2nV4xKZVdX8lNMjwMyXUA6RpZpBTQo0fz0lDDCigILoLdt2Xyj77r5logQZi2ayneve3l1TWdfn7NBCMXMBsGpnR16+fa3vw1/kiWpxx9/HPO905bxsejXIh98tZALhcEBKiEnAmmdT/BBLwEZXUE7mKjzKRkwOSpF3BoVbFSQ/aAUt92F+fzzz/uTNeK25sep0rjhz4ceekg7pPHGf82VHqMhFMMQRq4EfOSiCiotagEZ/2n+kcNvoIjsUORkAe0r+zTLyaAw3y8FFu4zEMonG3mpsagkdNVjA4bFJDeu92AXA0EdaSIKRXBWBVZ76A9NQDI96brcQZSCMfK6PTggkVo8/fSzFj3S7a7uXgeA8lO8cH6MoC47deyogwj7bvQimQ0Bfr23B6u3bNoov1WC2KhTSsoabAhoj8Q9kMf8LZs2+bW9Eg/Fr3SDHOUfGRwiAgxpbGk1ovmDp5/5pf/5lzLmRABnNbpScED+G0dOIO1tP/VO9QocZxYLPv9XT9etWO8Y0MqmtpLq1oKyyqW8Qg61yBK6v/ObgK3wWXSKyELMV9AEJ3282QGI7cthHdGEe0vRP8EZMxc786+4ITYIkRjbWJguKVjs7Th36dzRWz1XcudHSvIXLckxohb3anlE90sLmgftMofof0a2Yg+AeHuZme78JezKhYXRTrP4k+Yi7NW1wlPsJDqzcGTJBoM4YnQ+7vJdlmsSwAi6DkTeUoEzXumeFUr0QR+AgNhvpLiTeGFJDDw7Y97ZjHERf19WXjAzP22oe15kb4pdHXDIJqlxINYC2m2sh5CzkG3jjoVLAFrYMWkUz4ieY3wmp/tHJhyYVtnQtGPH3eXV9c0t7afOnD9+7LSzE1pb6s2AUQ8G3lBXy2zBDDVz1NjcdFVpucVRjJpemS6HpNv21MsBsnF/sizmQHuZIa/OcXF3FJUtMxwpVoOwFArJk0hnR9os3piN+8rcWCVv40+2r3a9daD0PTQfwil6fuHCOV6dsciA1+yXYcIWfNOYr7z0Cs/mHXD55dFngJL2Qi38ElSTH5Zu+rG2vpmmMEDC3L9/P6u3YHD9hrUONTJkrPlGlK64UsboNcqjQ6OxoT/b78gtWMDjIj+uTGMUDcrNmxwOJSGRgRs3OXYdRb5UH4NDIymekyo+++yzBw8eslmZg4K/g4EE5aDBc2R4CPJakEceeWTzpi2/+7u/a9sAev/yL/+KJ8RqLktAK3DHFuNB6e4gGbhH1IFgMZKmhAP0VSykSAo6D78Rw0xObd+7d6/iuJT6GISFgaDBXAasMGVBQET5np9+t1XB01MTvT19BsuE+xo7/RZl21ev4YW6BPuWGRcWtrW3Ou3w1KkzP/zBs+bhm5pbcdIgJtfK9pxJNTkdUzpmAKDaP3CbVQ4M3CL6O3Zs47d1bGCLQIOSENbuyABs2II4Mj+fFJJO6gZD2ANVKgcmEcOKK6alilAef/qloiRuKZ4aKRV/SEBASQyfkK1aQSzNQSx2EZAXEXsKrpDvRTZVwxOLYOKX6IlVZgiQsuFabQrfm/KElGOQN6a8ZPBO2VDES1MhtUNDKTh4oQzKpgYUwrJJlw0VqoaANYfGCjK3E97MA0MAlZIN7cp6l6hsoLoww3BwnWvxkDsziaYneyBpNCFRxNYya7KFekRdaEQarqoCJn6hJx0QiYDQKxVBWLsGfxmAdKhjcDg7V0bvRAZlFTRlgHaMqqiqjBY1LhuJ/aiK4BJxEwS10WpDRugIMbV4t/jcCaZiPPUSrhQyJXf5VYRMdeEwupAPoM0kzpiyaAuvfIVYogU5GAKC6kDwIlCED9bZdeNToo5WKGLOVO0W5iDK8lpmqAPgE5Ih3OUI7+yYFmoGDfmTKJk8KcNT1fAE0wuJ5H76d38TZ8+ePiO4TKKqr62GnAcgozJAy6eAcbuqyrLpqZHR4SGODxRFIr0yhs9NCOK7sSH3W1291vPA/Xt083QJAMFo2aijByOQl4DDTDqapasCruDohekzQE5B+CTOkge/bGyGE5SNNqBNVGoN+VueeMLSeXwEQSnpqlAjvhsGZlrkAQ7IGGpmY25h7ud+7udYuz8JhjkRsHdWB6skQnyEGCCWhdkSi17v3I3IT28EmRSLzAiJN4S/KiAGhwcffMhVI+Bks+2x+8SuLCouHAXTPBRK9VL9YiCD7+i4cujg62ZU165efeHSJdOF9lCuX7cRWMdVkIuRCbiZCDMArCKrZXR+zcXjgAe26DU6Ts/gQ3VQIUhFHS4hTd9ACKu3ijMy8INycrs4n9Ue3VnKhGPoVRzmtnz5U2tE7h7pQMFA7chRXHgHedDon3ntb333OzoAW7dsJ6mLF6OPVFkhqK6ZmJg06UzngB0dHYEq30gfTBKYkKmojPkExqMDYAmARtoSvPk5U1p8jSuv5271D+gpVdc3rNq4ZXA0DkCg3yQObZjgP1SRKZ1PhJgmRAttdZMZADVCxlcIwBMzNWleZIYGO2ROHtLXOAmODBz4JL9ECKOL8nhh6oYlsE4RNWrRXaPoHgmYE40UVXu3mQdDaJrmnG4rePC118lF4hNveVL4bkWkIQIIK4KZlsQQgXEjhBgXTxroEwk5A46zXrdhvd9QQsshpuMUArSfd+1XdrBpdDXXGeqLbozRKi3G3EwsR8YEaCuIRiRo6bUx5CinzoCvFJiKLs7GGIP5U3Kkh8J6Z5X+23/7b9/61p9Sy4lTZ90mq0Vcs2adJSL2cPd0dT64J7pAShke1tS5hJUa/MLP/X3snZgcM0MyGeuAy1a0tXBGZgBkxvNo3cvK5NeEG0zVYmnF3fnAM2psaB38W9tXvnTglYqq6vsevA+GRneMz93o7wON40b4lY5ugYJpIahqOBwD+qWvvdi4cpMOQEXjiv9hOgBaTUE+3YiWSmNvxEWHIDblxhoaI2oG7I0uOTSJVkQHeWqspmz53NTgQPeFrovHh/o6cufHHBUqkrNQ3jUAOhpKaomjXxFD/RFAZMt+ciM2F/rHgn/7jswQzCrEpWiohft6Ucut2Mk38G9DcQDJ7vJ1PulSTA6YIVhWqHeRneyjDePY49AMDw8JfXgLQmwMjlY+24dQVlloWNB7XFQccxPmAeKRX2/bmqM3OwCxSyBObjIXsszRRTMZLRZLTS4sTViGklswPrUg+H9431svX+5uaFrx+utHjMBtXNdutRL7ZacuDqT/xvN4gFqnd5cVL89zL3G0JjyhaQ3jIKaLmQk/CVsqyiJ4OTxP4+7gPPbYYyyXd6XezMdFYFAFVqnkHxiytklAwPaVTc12CiuFmO7RY0ceJvn0Mz/QWLAFRcQKqC4piR1cgCtFlKyjoS6iWMBZBMPhDRgX5+CXT0huVlsuHZPXrt9wtftGOlXvi1/8S4ugGhprzMPv2rWDS7eW2h0dnJVzqM1Y6rRbHTE5FsfzIwGBqEO1U4DYly4YAu/cvVtFjjGJ/D29vCuYQDlujidP3uOrX/sGhJ966m1aWGPgGhHtJIbweMoa8T175gwnIN1loJpCoIzOWHCrFi6RsVMJvkv67aFbldUV5iFpI9eKnzyGe6L4ZzkRa6gINzCTl9CJksEx3PyGr7jxmc985p/9s3+mcUkdBik4hm/Q1vWyr8+YEZ/T19tj/oEZ3eiPqx4hRgEMEvMn5ufDU61YYVrmxIlTViusXrXhxIkzBkHUaCjHEnmrCRxkXFoewZZTKEyHsiJ46hfDsKevV07yIlMvvBblQV2Ed4XWTMZqUtzmXfUbldq4cROEfVKEBGmgROySQvqUhHAxDZ60DkwrFPCZbvD8qvPigYlaECu/gnwp/VFcD8TyZgpGDwlX049GLl0GuIHjV0EP/wkgfjrmCAeIGJ9JAUDcpl2iCOlUFEUecNSOw4CoK8FJ7R0kUwYUgQM3mSXCU9Pm1C9jFhjuYVy+SgdWZtXBQboUtXsfGosl6bzMitY2XSl14YbRZTUCiG/eaSn+QECKxajufYIRcjAcwvDXcCf4qMYK/JHIA6hICGq6VV1yenQAABE0qzoFpPYDqNQDpSB5btb519m8awy9YRd88EcVaGH1eEt23qGEq/aYGFlxDD1795U/kRNu6hJdoJfE4SknUBGoxDXqeXMLeg4RjyUWJenAAbfxM8La7Oge6cQ6NeOoGF46VmkCi5/ugEej6hQXKSXq0GVoziMakQ4Ud+4CPXol6KKTWEpqiY0gow4JSM79P//VL6sVnYqxVayRm380OA1FzYCSAXE8FlK3rWgWnLNYm2sGR4aaGxpNmdE8Aoh4Ijfv/gf3WAVuo5LRgubmOJRT1O44FvNedHDCmSQFBd4jzjIaiukCfXsu4+7bpiLrJSanisuis8HqtH6uJBQu233vQFK2ypVbEuNIHLv1v/PdbxnYQGdDXd2GdeuxjCNASNItMsN6OkcMRmeZnIgN/iCfPH3i53/+56g7tI0oEA/ZoBThtIdfS5KGOavQqypxSV1RgSumDbsZETt1yurtGtZt6JmB2Pyq2+/kBMO7+/e/hLNl5ZX2CbU2tZizryg1ylB+s6/XDqOOyxe9s40du3eIOAdHhu+9624DqCtaWo8dO9rT06t20z1c7dDgiLnIh/Y+AjdDY7pD+EFg9MXw2cjtfhyw/9tpibf6bzt48ZGH9lbX8upVo+MjtwcGxXZlJeVcrXuG5xcWOjs6DDZa1FVbX+NUFvrERCn66ZOnQK6pqnYR7H333GtpvmUq4nGa5OocvTgLVRvqmywMYxJmM3DeqInlpIaNHfdpgf7w0Kh74OnQgZdfcpjdvsceFTnU1TceOnjYyZK913oLzIFyMZZa1dc5ufLVl18yBmnHW229afxmhJswJiO3fzk078rFSxs3rddI3+y/YQewU1BJ7dbwUHltndEB8WjWiQo3Sjk5XLImMo9FpbEoZWTYan47zByio2PGxdMNEucIDh48yHL27dunLJjK+kQf2AOduWPr1vKSUrYqkSYwYMpAnV599VX9LvGowS1uXaUyrFm3zpI2meWhWtTMr/PpuSq2s27t+qSENplx9OC//4MfiM2e2XQnmMkhugxLRSyANbrVj9cgdI9sAFqFBU9Gh4S2VStlw2EUUWzLZnhDVTseSzdA1RaOu+7DlRGciwys2GCYssIONsuQ6TloMDdKYRzOdIFNUWq32NGtW8ZXOAjv//k//2dTFkR8/tIlN39Z1GQnnO3IVt/u3rFVrEAhdcwsQrve1wus9QPQw1uHwGrXm5oaGIsOnqqRw4jk4QefcYzJlSu/8iu/gmNIo8Ox+luPa3HRnzwpufzBf/rDX/ilf+g8MZiIX7k2Y4T46WBZLuitT71N1bcGYlxQs3VjYPyvvrW/adXWS1dvWgtSUtNcUFptBgBPsvtnF2P3a/ZE5CuetCTt79IxoELvpfxl2SZg3Mr98R6AaBETnhxIBMAib6LNJjMLcgX881b2Oz7CWiBn7hk0rygrHh+61VhT4k6AzgsnOs4dnRzuz1mYXJqbXHKOji5AtvRf/wG38cMvH2Lmwdh8DMXHFnx+LYa4WJ86xfSaPxPJhuxMwGDm8oJlfoss0Fl0WNC0/1kI5HqyhenYQGYhA5jWNArB4QmOdohYjU8ZQlOnCQfhq+M+8wuc1JpTXFxiXQB948RIiDSphw5ATCmI91NPI9f1ZLxm1pdAfkE+hCamZ6Lps9JveGJ2Pi/f0tzqhi3b78orLDt/4XJdbU135zm3DaNRM2zDqJ4MkwFZFVr3pvqG++6/x0gQW9MR5astWQSPfsKf0fnVEDJ2NmJMl/3SXs6BKUkxzdvc0spjoI5metHuopfmM2fayyRBY25oV5ajuHDhkvCdPaoUHNGnFp116LXJoFXiYUBmvOlPoIxtGcky6jw9OaU3vnnjpubWFud78NKuCevo6uy91sNX37Flq+7TxY4utu9mAB0shvxTb3uriVu48ag6AIxIq6SndWtwYGoyjuUwuwNVrbCqNWqCSCRjurkOh1br+nFTxk1imV/2sH3jDrwHjjFAx/u4GP5d73qXj2h3MIBYhzvSdEox0nPx/AURxoYNGxGLCfKYLedmdfkYOEq1s5Zhs1B+bPPWLVyHtkCIZsgMSmpxtB4GooVPWJV5PF4OA3ffuROq3/rGt3Xe1CjYNZJlUjN9RQg9xFvDHICr0cItK4RpspFzOhBOe9UqLlcbobHQOJKUJlWvwNZ3B6n137i5feeus2cuOezYhIbF/QM3RBm3ylyVuDLm4YUfFsuRjmkr7r2psQWokvIy2AIurgCQMiAQ2+kzJcQcVQjEUQcCsNXVNVD1CWfEZxQJzrKZvcEcn6iBpp8ayKAPYNZCQY8ivmIUJpCvFzrpXX6/uI2ftEgRvCILf1Jd7RRilQ37KoilI5QWfzSFKR3PDTWB5lGjnKhgLPKohashCPBhSG1Q50/plIRKEJAqQADcV2UlemRIsamzCOwXlcFJwnGd+Nw8f+80ARol7Bb/2PcVLcD8AhwGB271DfQRUFVNVduK2GSPBLToLuIhsKqWkuE2J+bksix7M4ZrUbf7fIdHh12CMhnnhZSsXru6pqrG2O7UxNRotifAGQcuNRHPYAgI+MEuxJ/I5BXhz1jhGSMgngUnD1taU+rsDZu/8Vbvl7BQrSw1IzWsTmZOD9kR2hVX0sgIraADMJfCsdCNxDGkqYgo/WJ1Yjj4Vm2RC1Yjk1ywGnxl/ak66SSCvX61FIpb5mRRUza9RECmuAT3czLI73IeXOq8fOXC5UvjI8NGjSfHpvMKYndlU0vLyrY2my3opV6XVsT2DlNUpuhNQPDUFiSIrHL/02/9r5xOe/sqJzuYxjxy7Gg20xv7Y+ifeRfIESUF5bOFERbY6bW5oVYv2eij0xgQjH4UmruxfsCeQLMB7kw1FUZsdnhEe6aBcbx9ZZVJYCf72uPoyidM5+aGR0f8arCdDi0YFeqZMRK6X73axRubE3SWsC7EyAiDx68q8YPwySiwDc2iDcuNcI1t4BRj8LA6us7nMjCc0hE3PEAYSBC12DQpkYS8G3iguHyH4vhOKqmTgBZWyixv3Ozjmi0Uunzh8qq1qwYHDEYP29R74+b1wdvDhlimJvSq4xYFfUFDW6fOnpo1ixANcK7Fjm2tK4x9iXSLipc7VlV4eu7MWV/5zeUmmLTJBQXGNiDD0pKPhmoEqddv1rnDsLZWAAolKaiDKhKi99XWYg1ccVnxzm07f/vf/XZ7a/u5i+dWt6+uqXd8ek1PX09tVa2vFaUVff03e652Hzl+bGJ07NbQLXs89j72qCWz1s24We76jRszkzPXrveeO33m0See3LhuvRaXOahi3boNAkS3tFLxO++82551yNoAalO1lTxGibKTl+rhr6XduHlLd9fVZ59/rrW5ZeOmLQY0LH0RxfRev64hlaG1pSXRa1D55VcPUjNNLzs0VS0CblvR0tBQb2usIX+hv7oQLi4hxBiGMC8w6z6H8hFLpGpqNGkwxDG/VN+YqF1NJq/5ZY39xPSUQU8uj7hZPr9MlOqiCZwybCUyY9arrWKx7HztmjUsU42sVOxi2RKwisjsOCMFzc8YrGKNNISeP/7kYwyPvFig2FTKzewgNsrDQyXN0Tk0BqYsFXrf+98rdObOktEC6wXyHjL1LkDnQVgZ9wqlU2fPAM718AsUmzI795eeU2xTEFBFHVqUvffue1ziW1nDImJGz6NG+EyMjUDV0Gw4iOzUdqQ1NcdZn7q5um0cHE+nHd2yJbYgf+rf/BuQccAlRc7/b3TzWqlzgfsZowHFfQ/t0TuG/tGjRzhBVdBJXUQvsbF+eMQE/cCtmxYJOCLWyJxTQQUoEEaC26/1OYlMZozVGzEuCENjh2ZXxEZKCUm37diuFHu0ggWBTiHXfeJ8KCEdMKAAH0NBxucudfbpALRvuvNC143K+hWVje15y8vnY+ElR+7CKV4kxqE9nLy9417ElFnC3/xRJiXhtpf06yWGrbPnb6RjshRPYrUXKbTIspy/NX9K9Cvnm79Ai+81Ts7F0SwKh5FpRQ2YbwJ5M3/2YsJs3vIfYOxKjPCaA41uRLbgZ3aytHBZ0bL57o6zRw+9OnTrZm1pfs7kwNL8BOo0ujacGUV0TZiGkKZJRITqWFWon6EYQ+SFBcCyFxmsoDU6YMWReYAC26UK80pMzhsL06+Y0/FYEq9HqyYOzdbRUmaWlHQbwBCDfkV21ofNgVRLc2sQML8wR/wsKpABx2IuLNt3yAEyK6CQg3wQ/BreJkWbCfwZrC7QCi5Nz+pQLLMdenpep6RsxcoNbWs3LOUW2JHSdeXs7PQ4z8MDa+BdeCrgsPwJZMdMUTY2qHOLOt7AgIumFgqMjh0Bby0HbWQvhqX1BISYdFXgS9VpHZdr3Bfa7FpmrbtmJRksI5KfP4EzF41YmaPjeuWy1TuiBOvOgRKSMlXBoplJENiFWE0AARkeA3ru+OTNbt3sv9RxRZ9rw6ZNvsUJNA6mczJMWeXLr71q19D9ex7k5SxkN4729HPPxjaNnAWH7cBn88YNqgac+TC9s2fPCK10rWz35wHw3U5J8AiOu9Dzgs9n/+tn4PbOt79D18Kwzrvf+S7nKfE/Gv2G1madNGaIQNG/vgHD1O6Ig1GnUyes11RBXo3y24SNOQbFVEET7JtClE/aNbqNjRI1r2pn7ytXrT5w4OUV7W28gXRywVINKH3AVXmIT8tr9lI72Hv9muXEC3MLhl05KG4HOecvnNNb46KfeOKxbFgkRoLFagY+uEom4/pCI2h8jqoB5FfRQkYiCjVKudzZcebkKcHo2lWrBfwy8/B2IHzne991IhPHuHbNeucswVk3GS3CtdNnz9AfSAp/27IrLymnuqQASNPUIgOW6kNKdBUDDug96q6bLZEBhkZIocQHcoy6E5jDw9MEicyE56dmUswAkKYHNAomsxf8x17cJgv5ZVZcpe7QFXBri6FB9PZaoJEy4w9oVBfhUsKsstXXYhPwaL7ioNFwBWGOFr8K+lNOLFVc1eAoLsULSSmidsigTn6ZE2QZUJ2qpgU+iX+KigvdUs/DCK91ZWMBoWsEhcuaE/GcFQ3ZogZAEIIPfkEGirhZhJjHJ4jhXqzxX6bXarjVqU0jAuLb/bd1MPgra/1379htIHJpfmlgcEBcNL80bz+AdP9oeUNMcbOqQfFYigIaKphAkqAXzGyorXN2gZlSh1LouWXGF7tyfaWWHgzxEIRfnIEnYmVQFv/YArRZtIcrIE3KgwrK48VXXIKG2oNpS5xhjJX4U2aEJ/aqRR6MhaEUHPCuLi2jpsYJnDo/vovNEseSevAnatGsE160DbZ6V9v3VCOsEp+Lup3CH7eu6EgUFpkZ5vyt3ndAshQDSSSS+9d//EkgrMy2uqqiqg6u12/cfO7Z56kaJCg4kZtJmqBoIzFB6TBm2iy0gJx9+rhpIAE9ph6ob1lpkFFeFulsRMhYX1fNxQDFAJCERzLTPCnqQgZdlIKzKMcUZz7SYZaGuTyOurwriCkol01BpbBSRX4rq6rtOjW/idHQE7qlzVuYyzERs+Lf+ta3uA9DBSg1gcKuyFg6ZODpgTmFU9YnpQRDHJBfFbk5UhSVkFE7t2gplD+hIbOFI2xDH4PUWaAiOfm5l65cFl1BD1j9WlVrJ9gPaDDUunCgCYKqUe2TrogUWCGZYCCvl4ZeWOG/aVCQ/WmNmo6slblYxyPDX9V8n0YFHDnhoEbvCgqeApo153l5eixmSMVzpEZKmiXIyJa2ajkGAdWaKGMtq9esVBYCcJMHZMJiCUBhJhapWr2kBgF6vX37bmdKGgbGEH5N7Tw4Wggu7YjFZx5HM0yj7KMqLa+mfF0dVw8dOnj9Wo8+gIM4Yb5qZRvczJMBa8KH/VDZmNEuyrPaFWeQzz4g5poH1kJVgrqCODGXWNkkhyV6E7U7fBOGsJUHVpAnC8U1ycgBGZISgQLH6dMokhk3zHXwvEb1hAU0TsshJtGSQUx8obqurs4rnZdR5N1jixIuCTs9fHJo18IStmP45UsdBsmMtm/eusk5d7QXCQSND15ojoLg8AUQw0yqBYjoEPmM2fwYaAJ9WGnskxfmLB68/wHFCYsgHKe3ctWqbbt3MGM3DQOICiIzLQgB/Te0c8HaWvykGCbrlV21cp0p9eLSMugJd1jNJz/1b6zfRSPdrm9shpvo3MqxBx/a89prr+zatt3GBEd5wAFK73//+8WJBNrevgLnmYlanAHqK9ZhuAUYFIAmoOuOO7Z7hyrSzOMhUySEA7iE89hre8A/+kf/SCk+mX+wiIhovv/970rRnBMQ/WRZunko4hau9Q1/6bsvr9x458WrN6saV1Q1rhIO2qxMAg4DyMmNIwE0DCJa07iLOflCyfjvb3vQm5Lh5iX9evn/ugOgV6KxUTvJpg4A1qHuzRVAcCDx9BjLX7SwxwqgtDRmKTob8VUrUiCUnxSdO5dzdnL0Wufl8+dO3e693Oqkg1n7ZmeU4eGd+q46/NR3UKmCMSw3Y0Aobh02BON0fX0KXV9CMQcgBtBB0ZVy+OfyglwdjFgItGAGYEbnyoCnZgYONC2REJhnKVwxNy5dCm2XCJbELJ18YqCRtvtVXE5Up/wJjvz+pPm6FzTK0JxpAR0DX7UjNgTPzuWYO5iYdUlBoXNB29etb2hoM4lw+OBLzguwphBU46WmJqorKq2b4g2wFzL0kOfnfOgS0ylaLnaJmIah6aXzPLw0byAleQaaDzceEv6AmLt46KGHNLQJQ/aCRr4UZIvTjCCwYvl9ZfgsYnxqQlxrfJd6b9oUF00qC5TTrhgCY2QmOt58LHPjGWzmYxcysAgzrsmKscKIOdp1JBR3dr6vfBcf+h//439atXblE4/tgxvMGdSq9jaMhYM/TZyy34QqVrC1qx1dgG/YuJFPJmji+PJX/zqQ37GNxRne+uM//KNjRw7fuN7X0tjkyKe85YXf/s53kKCdUim/xCQ1WNDmA7kX/SVD/pjAm/En1ZU1cMYHpJksRa9S4nU4ELR0TRtvrEv/z//5P/+df/fvzSmLQZm2PNI1E0Z88FCoBL4lDDwGP4PqZ597ekVr+5OPP8nNcl/qOnLksJN8djrmc8cOQ6GJgTBBO29mI8RLL7/KEzzxlqe0Wei1fssLktFr4MMjvMuwuqqT5h2H3/7Ot/3O7/wOIPoMTpDz4iQ0yuAKF2C7r8agjEkDekJ1rY0sKi4FDXVyApXeyYuaQRLaplYIwlZpRUh5fHyKMyR69OIYrUAplPheZKoCY8GRDoh3JhTa4oT27MwJSErHLoxVnGlQCb8pEDJAOT464qRBfSHaqzMDAbV78IGw2BMOaKpgSxa0xQAZVNGSWhxchQw+SJTHgyJf/UnBNDRwIyaJHlSrWrpELIIn3Lwr5Z2jBqogPxoyAOWPJUEZNCkiXtlELx5Ugy+zItaDoJqOJc2XX1npMmOgX1xSCyrU29NrlVrzsFNphoZSRCGP4qiGKpjKoiv5mQyHXGsrbR9IARIRaENlUxxA2ZSlgSBrakEg64QYMmkjVYRVMlXsRSNC/BIWS1fKb0NTo+gO/2FOsr5ivuJo9JWKgo8EYNXoAQfrcBh6GVviCCZSyBo7fihiFZyR34tcXmzmkS4b1vlVO5RoFAQ8WAQgQrDCiKT+o3EdpCU2piKAJG4rjplqTwiQXe6f/u4/LS+rcL1IZ1fX7aExBNQ3NkHoale3rNYAc3m8Y011ZfT1p8ZdrqFKrWf0I8eGwXXKO87CDcZ1tU2+tjTHUCV9sNJu/YY1Bl2QhylQVDF2JDXym6j1C2O/uKbxVjtdh7oM3AqHgnF+SYh0kSqDrxkVdlTqGETcgxe6AaI3seDly51bt8apC0IZuMlPGICgpamhPgkPdWrEOwKDHkkTIUFyEwYm1aW4eN2xcUlfwQcKcMtm2CcCVdrfd4NsiDmivYkJiYbhzajgOMhqRAKm+yV4XpU3pIt8q8CdZngHKjicTfklWRoF11y5oEkMBAjgI7FSjjurvfPuuxBaHVPNtUnbWI4oCiYER5wqYhgS2TwCATQVy3fYpUdjLNlQ9Zkzp5CGWDw3XYON5n9Q6gp36FlfBG1FGADCNSeI4qDB5/cVUQuOwVm6eLm/f5DD4COQzIq4J8WfeOIJ1YGpFqThM+ZAeM2atVQN/zXG+iE93d3PP/+8cx403mzCIPfq1avgNnx7kF6RiBWuM9PWkpbagAUI5lMegyjktXJ1HDrJrSMTbyHDVxrA5pSc5qV2qqKF1lRgAgcBDWgrrgHDTBDomJSy0piGS5Cv98YCVhXJ4EhTQAyLIIEUMMQnemeBipunhU7wBBPDccuvM6YQaLIbZ9iefoeOmSCjbaXLKGqkoJqYFOFWkICxSoGcpJ8M0t47GYzD+EA38JPLvt0/wNYwH0+sdtO0IBwonc9jx483tDYZtXJHBJVQlrK5KMSvA8iZg3k2pd7/gffphVr8QyuudrHpHh0A8OmzSOW5518gL+ih1G2ymGksED44TFXuv/uevr7rspHvY489hhBu3Xt2xq68cSqRDgCmUQzv1pGrXWzh0549DxOifhcOW9RHnXguPBfKU1GEa5O84CStprfOFPrOd75z9uzpd7zjHZhDsvREjU5l8Os0cR2A7x04sXrz3Ze6+2ua2ysbVpoBsDxcK2Tb6v8AHYDwyJrurAMQ7zHaPxf0ZbcaO5InEnUTYyWR3oEB+2nSME5v5cv506fOHj9YsjBU4Cots+OO8syERZ10/Qg3K6uUBaVxbMSilfqLC8Ul5UaLDc+nPgAZLZoHWJi3Mbcwz/R9TlG+HQPzNgQbPzLqbHw9vEr2QJWe0DpqbOevspRNLUmxiUwuBxfRB6tVNRlGb1glTECAg/SUX/HQPXjGmh+NfQwtIzB2IARDHAqkF5I3NZ8zPj03MbuYW1hW07hi5ep11kxeuXzB5Lj2zWyAXo1761nHbU6zv98yW9MC1My4LF8KlNjAQgAdAGbF/Xo03jKkJoZmaimorrFqDyfABxpu4NMgzMP45SF1G1DBIcA5uVml8IGNgDYxPakuFsQe8QONur7sAk8i4C4tl8702C//Yxr/4qXzokcOlnsx1y0nX6SUpYzaMm6TgeATovje5198wQo910Hu3rkdEA5KHkNaSODrPH2913ghOeFmlS086Y5G0OHCQp/LHS6+PV3bUEc0Ds/Q0v3Cz/28lTADN/ve/a6f5mcsEjt1/qzrO9/0n3Bms2jHCtDQBSWC1vOHJLcvJs7WkPeyZZVqufCEh1GFtptL96fhMEMMuKeV1AHgWrWzyIRnpj+xhdTDK1oNC0OkEZZDBT76kY85JclMoMwqPXnyuDx19dH2CSgpnqCUELVNwnfTGnfdfa9Di5aXlMnMndAdyNfXNcI5cyxn/+E//EdWKGEIIfLABneM1nGDjz76qKYBQ4jJeKlH35gKuR5AuvVX5C60gq2jtFSnaipKWOCjAh+oEG03tgIIF83jEQ2+uUELLUl8AMKWmukqqCiqYYnZVlT6gHs4bA6LMrAIzp/bJ33oYSaKVIozZC0D9QuEx0Z0/+7YtoUsSIqfxHCOV8trYapsQhtIopQyQyO4XVyqUnanCL0F1p8+kY4nvfhNBi5Fa67ehC2SNRMKSocSaHD2DohED7AV5TXxyVahbM0KF6E2VWCFX5MVIAOIUrXIrxWjmciRU6JPsqUHetji3adUC/+C8cZo8EczypTgACB6E0oqJY4EGWOVmxx1bFGsy5IBtuB7ARbOGIgcqgU+roKpIEkhEz5AgSwbOF6kKIX/iqiCECk2BGzalBNY2WRWEZQQSxx+ky3LTx8Ukc27bACqC8eS3NWYwgk44AmRoRoo/gEzeUcplIH+wJMoaZ1InvorBQe4gQyIH9GKaxRBTtxLQlEd9NKjXgh71IXw3G9+9v9EklEhYZPwJcfhuGVxTmV1VQ1EL1+6dP1678TIsGKWmQNXXlHl19C+Utonv2lWwj2ddMUJMPjbUN+sAqG8YUirwvRYEE8vSVqtCICrqr0TCeQQKX+SJYYjnjnJhjucL9rwIoWY0vEdJTgCPb0OkQ+aoQQTtsdgwOGLLcHkhnhktdj166v1Cfv27XPWNYA4aFSDeCAGGaD4As5LWYyDlQycHQQOHjoIJp8OQ6cm84xsuKUpVBb3ScWSbkAkMvjnXnzBCh/cS511UqdP8iAQvbxeNhAV5CiCCggYGhG58miZpGOWw5QZ4E5kkkF+ntd4GJxltkBr587tGgD08gt0hT7xFD6pNKkd4FCFcNIJDQb7N9COb5bRK2irpcAUi8g0RtdmZpzZKrNrUDhKnTqogqC7Ql5kaiAfr/BEfv4X5KTQPhl4N8lvoEBxlNJFEGQGE/c4ZS8k5QUnf/CDH2Cyu15JhNAhb8qbiZp9xqJvffObMnMpxmYsVfIIvl0zadzR8IdPuIHJwMJN8fUbN0DPmH3iG/gEZwT/3NkLMcllLplejo5CTB9ABKA6+FMq6TLjAGPG540b1nGUdICGHHnjGNrxnLs3K6JG43/yE1BaSLZt2x0NTZYI2z0TgyiqRjKrw3/CdcSJVkellkj5iii17Hn4QVUTqxRUEBYc8IpSURKl1AtzChCtaWWFnCzKrhiZiRLJVzs6bWNQSgNvoI7W2S8FYffp6nqdOn/GIjqzc5DBNEBs4veVbRmQk58mf/gjH8QHeQix++p1X83TQpXC/Pmf//nadeulQJtcdM+wF2eorqFzqtLS0PiDH3wfx+iDqIj+c+4QcAQ7ripCuwyFAAVb1NmkxRCgQU8sBSQpRfypcUpRBQ5bKIJ8RFEhKiGd76LP3/jm13DyZ3/2I36pDU/CI8Hc+g+18MOXOm/sP3J5zZZ7Ll8b0AEwAxBLgOxTNSKlA/L/ZgYAGvTBk17e/PP/rxkA07UJGZjoAPwIMeFbLr01JJ/vvxiXD7Tjaok4TMzkmLUys5PLHdFTkDsydGugt+PMoedz5yetgckz9e247IVZXrrAUf/hWGL1DYoB95eruPhao8J2F2hriNKcAVV1R68AwdUVeTHkv2Db73JLUM1CxGYAO0liOt4/2hTQaB2F8cBfzyKpOvg0DUC/9i3wrmID0YWiXId0peSR2QMIojK6IuwYGbPHwEkA1h5lhxah2OwE3tjpsWASYGl8dsmpoNYVNba0tbatpLpIs+jF3iRLTC0xV92li+fpD4eo0eH67tp9J3+rXkffuGnd4tLkky3SgIB+MkvndmidP/lJ5k+fqaUMhh48jMg72rlrrgC94g/1IoSd8jaGFfgNdt1xtVNwLIWGOwrZ19Wr1go1QADZNkWWLjJmfXDr6Lh8va9nw4b1jAWGmGDIVtUwiR1W2cZEZkVoikvvud77vve+3zCHtX28lk/cwshQoI0EzuTKpVh6jo3qHc2OXli7em0UFJHn5+n2sMTtu3aA//KBF/lP+wqw6947dytibTES3AfBq3CzcCY+eH7uc5/72Mc+hlgrIRmpyIbblB8CXJ9bgeEmsw4Mz++XZCGGTL4xNW22EKhRQdAc0C+O8SIQN6hhYIJGCOAQi7E9Pdc4Q/A57XXr11j7ce7MOSFBkojNzcRqslONVkRASQeAl/j6178eS4A2rvuH//M/jpuP86MDyRniDWiWJZvR5d8sZ+LVubLnnntOdaJwDK9rqH/44YcB5LuwDuYWRuixOAwjWorJuKLBKC9amIay5ZWxDBLDiZ5Gyc9Vqosbh4NEmGMOpeK6wW9sbJENGhDAGTpASaTjGAYyB+kAguOdEG2fwmf40B8ZaBoRU1f6piB+Ik3tasTGlava3W/NGagiVKi8iuBk9ugIqU4XFHy44RVQqrDCAjJII/eU4hOuwhknPUp58AdK6lLEV78yYAUh+oRkGBJTQgZ8Cg95ecLnLzjvN9cnEAAXK9JAlXrnkdAOGtVCtYL6EJZsIIfGSoeSTF6grQqUgiMzbPHWgKPeowt+cYZE1Cgd7X4xBwT5EyGAqEgTXVtp+LgEReqSwVfIMG0VsWsFwfdARhEV0UmJ4CgOMoYo5aGiWl60q4gVaLm8SzFmkbEt5kAUxyIv+E8B8A0otBC6dPlVoThWSPcOGURJefOremECgszYqxZDY9ZBeKgBhlAWgZhOCg5gL8geVSRWcBT+tWI3VZ2qUIsHB9SFKIkye1fKk/vxX3xbxL5t7a7I1V/V/a2pq1fAtgxQnMwo98LMNJZZBUTnLCjiJoycSrf2lx5DEQfN63FArmwBurCgmCMwvuyT4/mNgFLfgJOJVhHSxWgpqqA60EItboIjbGOHKFcjNZU5sMw2o5CHPHJ6IT98dAZW7/XYNo4LasQ1tSfbQMJXvvIVsQhQSolcuSdBTFVFuaoBwVC8BscvugSpfFYKy5QFUKVGLOyosJKerpDupvUbeG0jms4PUhCcoMVl4z9uBcmpx4H22WZ8Lo+E8EpOQbwXFVE+9CKQ/FgRhO1do5rgw4f16vDoE8tpAzHg8qjRGiSO22NFFwh2aVIFLRZKMVA6FVRcfghgjgYGc5Bg7jtO2DNmXxnyMlKLmUbF6B9yFBGqurOJeqhFQ0UXDRZyf0BhBeAWBUGeAYjAiA8n4a8VRDIEjBW5mpqjkk6mYCINWF/RgkZ/GtHBxvvvvx8CfCJuqIugQeM529pWmPNTHVerAXjpwAFwiEx+619FOrV1bkHWctcgnD7ABIuQr/VSi1+OIOkVmJbCOUrVIVTJYODAbhFlXMQ8vhes8MDEeJWv9GV8bARPRLSwFWhqI32lAPai8LZ9fbHMV6QOK1RoU1tWNFr5Zr+sFNnoPD2nWoBYpA4ZfEOLT/BRhR3Se/bsAV+9iqACV8mLqdM6/IEVh0IHaIumCxoGgbhFbCRZicJBmEBMkGGkP2xwehp/6u0pNPZQXmIJEA1RY3J/hk4Jgm/kVqzxVfCxx/dhu7I4rAOAhzoA2lROiijf8c536RtDA2I6AHQPFdA4eOh1AdP17mvHjx/TRspA9GHjpTGIwjuhlFzE8ckbKEjnb964rnZqA3PdSxqOnwBayo8KlKpdLx5uX/jCF3CGJeqrP/jg/XTDphpKZbwAfNmwNObcDZnMzKN9w4ZNZy9e++7+46kDUNuyMi0BMgNg9vp/mA4APUkzAPyP4frcnOgApLSY54j4PbriWGQrp+6xY3yMzRfYVbBsKW9x+sShF2/2dAxbAObAzugfjPuxml826kEWyjoJ1H9xXIexorlZm+VEcvhsQRAtcs2OXZKO6HXeQ57YIj+n2H46Z/SYMJifE3AJ7G3ri/H57IGnLkFxYYzmWkukFvqpddOZ54tii2+G7Zu1y5Ye5VABJZ+8MGea45ILvQNNVZw9WphvUEs29xbTaQuBFnLzLWYan1mcnlusqKytcV/VqnXq4rqd40Wp6uoNc0w6BwYuU5MTEHRj7mP79umuqHRo8Nap48dZAW/Me0OPAbJKNpVwYOweqptcDcM/c+ZsCujxB2ROQHOplPxsFmlcjeJMQ1Crabjr3nvYSJr1YjIsYtQBEnF76ywj4o4sCLHDntqL8yx/r62rsAuWXQDOghg056zUjRs3IczD8wMOtVQdW3OIuPHsW87KzF2CJ6Zxy87lxTdlEXKr/4ZuOf7zM6IphNgWKQsELB8Nt7C06KBmNuvsfwfoWQKE/0MD/QJx77bnOqT8G9/6JvLViD98tfhM54fXTf6WJXId6IUkIz1+/KQXU4iYj16DDvweMrlcfECsP7UObJ8PhIYFe1p2nwyO4KTaLRMgJlQblTdOqs3ifNRro9Gli1ds94Q29wWO6gQSh984BFvncEjkYPHf2pZf/dVf1Shs3LyptKTSbTiQlx8D+RYHWgjKDSWIB7DFo4vNtdIBTVu6dUQDlKnHCHwcQwLbGzf75VQ1ZJpbY2SQHhL38GiM7nlHNZVApjYaN6xNQgLOYJpKiSN6O7ni4HIYAoU/iMIixCIEQPwMhmR3PCklkUZZIu8T16oRVIWC/kQpleNFxd+0FxrJ967fsC5GAOamoe3ryHDc9uoFXWjMikcjpay6oATPiclpxeWHRkKArGkOxGALjfADGW6UJ/Fcoq9w8yddkgHARBHElMW9RJE/IQu+h3ImStOwI58CjoKAFJf8aIszkTkFS+iFOSAorhSACpIshU9GB1tl/erKmEOzgZhG+So/AclM3CCzIECkJBKQw8HUVVWLeGEIoOoghiEMBNUKohEnQVZWKQICQTGcgQmw/vTIAEMCVS/2Uh6fQFOXydkkwcQ0BXkDpq3LjVJ8S0SBiYSEsPfEHziTMiDgJ1ZDw7uqU+3eXdinInIDGQTPmzhADAmK+yQnlGASMxYGcX7sUVUkj8cn7+mRP9HoJV9NQgT34Tk+1/nKGpyiwuXGnZJctcrOSLHxVwd1bNTu27H1GzYBh0io82LYZ5ifk4I65Rgb7ZTe2NACLZkNEza3NOG5P3FQrbgsA/y4bEiTBL30J3lQKRwxgolImMmGX6hVBJKAA5K4CQF5cNwMwMMPb7xypVPxxGJMYYe4qZQ9UvIDDj2BDru1LsJeBvJjt+yf6cIBKKIVjgg+VCoWZ/OKYJYwa3xmcuPCZtqjL/HCgf2osECFyvqKpwoCglILrNXFMTlqBWJ8XKKO5mER3ECgDXDwFa8U8QtPzguN6BXLgsZ9kyfma1AVgTbxT+Yuo1Lg77pzNzdqohYCyuIY50LVuEV6iRAPDhjbAIGMDLrb08mD+xNDoBceYDJ6XLjkUdAB0k5cwUDOhTjaV4azwwptzzPPPGNTl+IQYyoe5MDcSDCstCIR2T+wx9g7ejEEpSSoIpRiC0561zGzLFK9KrImXttA9N3XusgUEOvzSrOhAjNOokZzLHovp06eOXb0RE1VlVbA7lWxLISxCI34j7FolyLs9uAbeSGZNk4ODhs0kgcaSIaGB4uwkd/UBwgBZWuRMZCXRM6lC9aM3ZIBe9esXsetwJzr9IC5fv2GVDVCRAwwtdSfRpGd/IjSVFh4p5SKUGRIz7Se44OWFxfQ/OXFRfa7EwocfMVSLKLJ6vWuIolACcTpGypa29sAdHaV87OUIiBcrSqPm0199Zw6cRKZ2jNYyanr1VzY6swlJxiAADJoleV24WN+vzz+pO1IxmpjtEQsrMIZkQRZ65thgj8VJGWWSKWxTkVI03jbrFhcUPie97yHZyTEiP5LSq5e7YS8qMU7tcQZf2IX/kD49MCATXXA6mIJdHxFrLrwH1hGhxV4RZcoKvdCyYUUbkulis40ILsTJ44xQyyFjEdZa1txA1Ht7baBnKIJHpx58/FnnPqD4PiPe83ehMrpnzfz/R1+oQmQTr8JTe+aUf/S/UiJgXJ/G/2Px3De7Kyj953X6XCnQieUiXHdXnrHnQ8uy18+Ojk7Nakfnh9LcucnLa53hWB2JpDjgfAnu63X58I8y32s6NHSgakXhZO0xYpBZ4/ZSZvdierQDjgI5GN7cKwsWrCzIDacxTmlWQRvbiAODcozyV5gmRID0bUQY/ia9QJiKgBkf8YMg3OIsodM1aVeUmbUyJONiYXUzV2YEjEdkw1JOgZPYCHZikbvlh3km21nug2SAAEAAElEQVQwqDq0bKSyrqKyhsLQQMcCc4mALC8pxUv6OTgU1qpNhOnk6LCVMIO3b/FIXC59o70Um36ySupKJ1PrzhlCTHEqyihooMCOAgNFh/2qgvWxEW5EKXAotmbUr94CgDKwUzk9UEKFm6DSKI8qAOfl+G1jMcak9KVlSJ5TQcGMDLjHZqUrxWHyXeqyMN3lfY5vqiiL47aYG+PlkDWI2OtPyHCwEGYs8Pe1q6NLurWj0Kip11jHDZuM/R/8g1+0/FJFzqhYu2aVXchP/+CHdrve6L+1Zt1axHLybBBXNaOvv/66WoTmSNMAsXcZbBHmWz7wgQ94B5w/JETtF2eSySJWKFlsA43PfvazWlLssk5yYT7OXcWc1IGBjLPN0O4r///AA/eTCAjKWm9MD1e0tXZ2dNENezOsI8IfDNTuGDijOSSl0t/4jd84fPgwPC1esJsR2vyeFDC9cym4/eqrB3kbf5I+LVUXjuGVGXsQ8EFmwOmkPoziliqhiPvySMRhOIcXqo7rGrBUn40KUQ/M0XyArHEBwfAfdeLigOWTHQ/jnT/0CwjRyIOBXmTAHGBVl2akkdmQ3QYALFb7U0FqD6aypuLpA5i6W/5Uu3NrBm7eaGiMVc38qoESGog//jSYqyAWqQXCNFm9+ExDEO4T1lEwv96Rj1jpkEwRl1IexX1iXN6RjEYDqbRRb1AtSHgTCC6hBXADwbgETypB2UzASASWPflFOOk7BFx1TAMEJ+/IjwNIVkp10tGIQOjBWdWJV959BWR+LLaMosUDThJcwlZK+uRPMOemp8719aFCHhoFLGLlgW1q40D2STpCDMrjuabW18Rnf+IJEXi0fWqHFWjYCxmCi5y5ARxz0CsdFdDGcGxEV8JQQfmB8shJrImxOEY5oQQCkwHcu6oTB5IdORVSOINpKMU9AaRKZfAA5TcBV5aI43c6hi89agHKgxWyQSaxEUowB82fWJS/qm1Ft/323T3GEdva11gPak5YbuS4ltXGoECdM7Xq0dBfxjspFiepwF1P5CEzjdd1VBMMAKUxKk7UOhn++ImjCMYRBNMbrMdQxx2ixPJlIxPQVVAeRfwKE9PtLTHRvbTo1CN1bd6y0SfSlQeXE1XmAasqK3btiAWRarTTvGR5BWisAvBay7Py8673XONkaa2glkM0xuwUsiNvHD529AjM8ZQlw+ed73i7P7EGnGvdVxWn7o48r6qrtX/OwQWtbSve8tRbQeAov/fDHxCJ7Vv8MpMI1S8tIXWHUSKQSBQHin+RiF34JhvCeUz4w5Yzoi54ZYKMxlBBmIizcUlBBILAe4pBKZZJBtGYZkakqKytWgBiMg3gRlPwLR0agNAkIyvQE+3t379fRXC+2R/bcO+8cxca9cyxCGToURoIb94cU5mmSvHZBRPMW3VyQg/+ZjY5OJDZADsB1ieKm6RpgzUM3/ve93KpvJgV6HyQbBSjuanBizU29993j8tZLl44ByvX8axfu4Zpqd06BHDg4F0XVBHN5IN7Ht66ZQcEJF7p6iyrLI0NDINDvkLVaeIO4zcJ6NQgtOMbO7na3dnReXnLps3tK1ebbHdkkEPMy0rKKtZWrFuzTkupARDsfvELX8QEo848NSY7OMzeWUvC7JDmPTVjXZ3dvKqGFp4u7GAk5eUV4NME7CWU8vJYuuPMSn9KxAd6BQfxQVPTGpqjn4y9ZCqqYdVYVFHBv0cXN+N8LJekHjot9AET1KsUZYYYMSEZz/lC7g0biRID3cOdGC62sKkXx4jAE+NnCwtEo8Fev3Yd1wDtcPQWiUdnKQ6LUFeGW+zMoW/ky9CQIDO2yKwWdPlKoyApiAeZajlyG6rIvO+uux999FH9QJyRjih6+DM/8zOKKP7SSy/ZLkmdkAA4TTATzaC8wxlM+dVIw5GF7YowAV0mSkXE5EIc//pf/2tzmjrYZeV6F1dBRgjmI9+AEfPBZLTDE+3J34HPG8jpN979++PJayk/oQ9yEl3wT+9i9ujCpL7BjxL9z3fbMKJj4DU75T/mBSznsT+7prJp5fptAvyeK+fnxm8ZuS+0l3Z2DCi7fmNu3kqdcKzKRXEyIjur5y1wIEdsj2MDsgMi3CmwNGcxkdVbCznz0ZlwR1sMKC3lGBPLz8maNAvC7EqwDh0QoDNUiR4hAZZiLFEMUxUya1bM5UYiWYGiR5AN9kuXPW0McNuA0UEoRsMP54XZxeiNAOvgo7xlDgAxtuWwcVsU5t1IMzPbnVu8fkOJGQldBmPt6DOCW11iAeGMdWWrVq8xMWLljGhy6LYo94YjB1Jfl8ejqGyBZ2AO+/bto2lcNEdHS9mdSj0MRJ5XX32V4uE7m5LC5TIx9vLpT3+alxb10kxlqSgGyiOKld8oBvbSYXCkMxyDZhoBDpb1yQOUUk5JSTcHu5kBd91fJNxyaIkNUYcPv8EGnfXJXbNfPOEDLdO1Qzq5DkYKbZiAjwoTQRy+KomA0XEpSrE7pqRlgT+sPvChD4Jm6EQo3ySeKCh0Ndgf/dEfrVm1Wu1PPfWU3gJ5oIXNQk+Aq2/DZfFXgLBoZq5l4UJBM2Ld2NS8bv0GX7GUB7Nzxe1p/oTPmbPnwPnIR38WGhwpndPmA+4rIHCAGNap9y1veQtusGN+mL1nnKmDcHfXNfeOD4/kPrL3YSfmkyD94YjEJ8YOnBi2a9cu71axEtOpM6eFFCrFAcModjecPXfBciq8grkTnPc89AihE59hMLWnkRSyNopOxW4PxlovrbFQYf+BA0g2hIGTlgnhsN4BnG8P3YQw7+2XHAXlAilRIwdOc2COLf5EIPhQratr1FJA2DusvANFLn55OQ/a8dmvxkJdUnyVP6kZJwk+4XrwUHHdMAJVRIq4SSNo4lS9sLWJPElNTlqBLgu01YvhHjXSlkGn6LC97KHn/g9trPNJTggQotp9UgV9I2IFMQVAmMiPmaqDp6/yqAtwyPikRh0ARZiwvjPr1mrLKU6jt0Iae/tlo0LKKuKrHZV0wJw0WowGq0W8agGvnoLYAxqQEYEa3WY7mqfpmVknW9W4EakkdhHwDYY2dPjh5twCpC3Mzgy58zd7cMNIBntUY2I+VBPOgMOHVtCfjJOLDAcHSIGUESKRadMWJoAnUtJX1KkEHB4AWOtv0eLBE82ZGmmCzjP1gDyuygaU/DBUtRpllqgiYCUCIp3aox1FiqgL+tJxvr09rhzFKEDkR4UMPgEIH8ikUnICBXKMkGR7tPyC5jeJW07F/alq2RIysM39r//+nwF0tae340rn1m3ba2rrXVTMjPlrYbF546nJcc4W3q1NjSZfXjrwWpwlvxidV1EXL6bJgLFpffXl58Xy+vY28VBTa2ubPR+Oax0ZHYI9mDxgSCibsqEWIACbXhCWOGJi2cEI6PEnLJMwYA8Zv8DKT2NAwyMXTBoD3bB+I3YkbabBjASdeMTJ/smf/Il08mAnKMdKY0hYBgJp8SAqUhZKHB8dlUdZ7AbH40ClmYX5qppq1oUuGiOzqVKQCUz0s37NWtWxH1GjQB5k66HRonbv1tIYTgi22FK5ciX4YaUNDagGHPeDhJmIDsU9gFMaOekFZdI4gxPu3mLZmVlFuK3nXnjer5MxMQcc9Wp71IKxhChAfzNOAh+vJApq+Sn3kSlijAy07dvvgJuyIDB22iD8RrgtsAjXUmoReXwVwRlngMJDkHk94R0+oF2iFxxYs3Y9aIAAaISGuXL0gkVs5MKEp4g6dOgQ/kNVZHzrdsy2ux8h5SQFYYEg1SxEnVsum1sJvTk7cRmco0ffuNJxsayi2OngtjrBJ2FuMtOJwuCg3RiSKwsYuc3TmzY5Z3qzcyiwkWOCdjidrIGECZsnd7rKR9unBR/mY3wHyZwaTTt65Dh6iVgGdzuwtJUrV8mvA4kEPGlocAxci4UZ8jNasSx+mmI2QqMIHeBN4E+yqobAxo2bXbAgoicgTYJ2Fw8JHajkdhN7Ic84wRwajUkwq46FS7wPrkJmbnoGD4kGUUb6lUUIyVpOZL1Rd58dvSXSyTdl0wHI/E6MTNg9ouByVxBamjUYx906+I5S3Ry4BQ2DZEbrnXb33HPPafPAdNYkrTDYb2f52vXr7r337tVt7WISfEMg+CaFnnzL4+RldRDmY4vhKJ6NfAUKYD780INwxhYKoE0lXw6UqjhsW7tFc4zAWTf88Y9/HKM++clPaoOVstsYntZvGIhlQbRddboiGmCcef3g4Q996ENvvHG0vLrlDz//LacAxTGgDa1pE7DINmJhQer/mz0AMExPwjb9Svn/aw+AXrnaoeFh++nFUUYCe9djmZKNENlQhA0CMYQfl5XijDXQ2KjJdGsz9RCsaz7qqkonR26fPPxS94WTRTlTFeKEmbEch+U7Ki9mCgTVObGf1+x1brRDdHV6KlbH5qURz8LYp+skTguB7OG1xGDZoujHOU7W/rhVSz9hHl5SOAGdAmKW2RSoVj9WALixIL9ACA8sPbR9OT3QQ4PMtNrjRbrElK52maWXl4YPFN87uA9MUzuBTFSyZG5CB8bUwMx8TlBhaep83uT88p133geRS1c6NKR4kr88mjoKWFpWtGv7Nhslp6cc1HbZ2H9rU/Nj+x4dGx7htLlisTX/QDlxXgqHyaXwA1jqBUps/+rVbkEAk5GNRcvDaqRrAvgQLpf/Yct0GIacpCNKkMkDGKxxmjNLEZ6CoDhjRyK2cB0oBcqOBdedL48ToSOIp8LyAMXcrDVg6WfPnrMhnuFoIDhYcypdXd0aaB0AeVQEk+rKbJlctsO+Js4KzFUp2+zsDFuzB0BYbLDAcc9c+kc++lHxNJNc0dKMzNLiYrPEL734wn333ffInoeQ4AZcBzrjJ/5gi9ZWNq0te+S+OG1//v7v/z7f/vjjjxtidl2BnHjlEy+He8kZopebQpeBedzgOvg3rYwibBx8OEgB/667dssmQkC4rYnSyYUHoAAa6J7uuCEHRfyDOQeu0hVDhg8sstLc6ABQYPlJHEuHhketkzAIzHXA00ZYroxKwhBYjZcNgJiAk37JlE9WnDiw3Z8vvviiei0OM7nNtQo5tO1AcbDgW90uf4Nr3fNifzCJcKp8voIgECsyYeI9xR4EIfBwMxjEPMm6cSA9+KMuGsVD+qrPQIv8qUPFEABRF4bQTw/IQBEiJhCEXgeKZNb1tsXBIW8Eh5N2xKlaQS2++I1GMU3WhDrpGCKb5X6AI0F++BMcWZBdqlQ65hCWIiqFGCASfWUg5OVBu9opgETqJxsIkFQF8tNMHUMHHByPYXo4qA5D7IqHNuCo0ND4eju7X9lX74l1FJsKQRXH5PQAjjloh4nuJQKphCJkJ1G9qXYv1A/T8DZZMQjcl1IyYHvCVkH4iyW8QINtoghWfuFsuwhV0ZyRvq+Bc+aXQiFnHEcee/FlxjfA1dJ38wY7hbN0bEzRIG1RlxRaLVuCAA18gCSuIlbwgLdMJlkNb5AkBSYlVy+98lgRg8P+RCxQqvYnWkAGJ/En6R6OxQxWfvTEpMPQy4+0Lfsf9KAEAZEVHsIKSrnPfPHfgXhraPh6r55dv1ahqSXWRwKhStsPLCPevGkDVC6eO+ta0zE3i0dHLbZsj0+EqzIbgIlnz57HsuamNkFhZUUNZ2EB9kMPPTg2MYbOJCo4wRVrSAgG1IUdkjpEsV4V1TXOGsLDGohCALu9Q4/aoZw86AHxoJzwBBxHjhwja6tHIOAhJHyhjsmbgKk62xwtYQSQF2Ouy4sK3ZyqLvYADgQ8Fu1hESQV9AkowvCnm0QsWoo7c7IZLgigWrsIJTlx0M0XGIpYamfbqXSBEQKRTFpgykI/9OO1E7yYFoLgwaEBSFCF3pDzm+GJkwqq12YsrUt3Z5fYCC2c4P333Sc/bPkGa0mtFMc0DoiuJFOEniIcK9WRoiL5gVLc4Z402yABhusAKEJ2GIuTKF2/PuJRRiuz5kc8V1lVjo0EZJoVSvL7ZHhMFXJCiabKhg9CRiw9m50JzZjJy5iHfhQc8JaJqkXVnLUehS7B2972NpDFNBYFooLycUaIig1vQ0M2LZHC0GCa31zCGYRkmPecOHX8xvWbRhEAcXCeM5DwVpgIgjNJsLr7aif26sFbYODaBpsZNJnJwJIdIhbyCUN0USfpoO3du3fT1k3WUAJIW8ZGJ6CqUtxzYj2hWASkEU3shZ5jQBubG3bsiHttVYdSlgK4d2YMvgFIYlW1RHxzq27uMhpVRxOkw4HUpNMKGfCQMlM/JKCF+bAv7Y1RO0oMMj1RquPSZfwE3IidQVxl/SmUn7U2cWGhq7ebPdJJCokEPLcJ2GOhDtsRisnf4qSgYpPFcQbFzHTMALzy2kF26kUQ0z8Qc0dcHhVav3EzY/z1X/91iL37ve+hhg01tVoBteOJTyCbixPHc+uK4BVVdCQo/H/zN39Tn+ptP/VWjoba4J4GGA7oVdBSNECAxfw//uM/0US9+93vNoGmaqGSLgSFEfmii0UgHDnYomWR344LkZZAanax6PNff75lzXabgIsqaldt3DmzmDc7t8jv6QC4A8sxoIIoluekHMeACpgt0kwPH+ol/XqB0t+anm2ZiS9/I78UuioRYokiKcT6YzB/M/+bFQWsHz+qNAov0FMQkP/+GNBsJD/yKZg6APGesxgrd2IPQKzajEsEohuQCInhIn2BrCIrqyNRgszLcucKXVA5NtB17njn2aO5MyN1lcUL06MTY0P0xMncOjkjE5NcvZEzKWQHDnm59xQ0rSoJ4k/s9o27w6bnp92es+hadP/aUeCI/8VsYJ57sQwIWlmXgHfXV3EXjUvEYm1uJHP409FKgYZv7Ah8YlWXsvgpAz74lFyl9JLlBvyYEeJjWti4oCK+GiOP+ZG4MjnOeBUKu4PS1WDj864yiCPL3E3o5gozDWYAwqAK8kqLl692Am/hsmee/p7TEmuqKnVoDSXo+rA+ikc5tYWgshq4qYULNT8gJmMv/uTQVq9egxuwpaVUXdzDK/JXNFkp70hgOEh4+OGH/WlihhnyFXwjdH2V01fb1dAFAguqKK9UkVapvKLEWe0WOjJzaGjj8OTUKdtdNrz88itqMdwr8nM8A5is9cKli1xcHOs/GU0MrkLSTWog8wnczo3rsfKYVfJvTz75BCq6uq7KqWHSk9NXb+dVKsrcl+LmL87h0oULxvJzFubN45nt5x9Onz3ff+s2fvJUTJ5FM0xc4ka8aLKfffZZLsu2YB4PNwqL4hA8rNDoCEyxgu1DTKUStXcowlsP7dRw6MDgcFIGjOXTst3acWoK/I014A8uEYFhHf55x7bt0MCKFBUBzid86Utf0poQCny0jwZo5FHqhp3HjY09fTdA48mda4f5HCnebtu2IzQ8O/7F0gmqRfFAMI7qq8bRV82y1ry7N6ZGLXUmOzeZaCXTIgWM5cDZLVZAQxPATakIHMWxSH7EhqcdGCBB7hEtunXyoxTJXnwlLGirAkP004gVczBKw0RnRAagRUWZi/AJCdpcI0cqUgQJ1AyePllLo/tnxQSwFICeAKsgL2rwBU/0JmgCAuUHE4R0kz11ggZoHokewsJkiXD2S3xAqcsLfAiUivoT5hBOPVIZAMd2L7Jl1hrdCUygGFQIDDxJhBcUxspn75pd/V7MhLAUZ9OpHXA5QQAc92yogIzM6pUIJSEZckA2WCldfg88sVQGL0j2UGB5UJfwUYSk1AWOFzkhJobR3ZLC/LEFBPC1MpSTEC1koDA+IdZX5CRu4DYhJvlCVUVEL+pwQhQeUgbiJgVgPbJBUjZlMV+K4lDCPcSq3SfjCBpBRYDFQPnx2UN8DA00EpFNKWh4kc0n7xADE42JgYl8f6oCcNE5fCAAJtIUQb5aEEJYqQowqS6ccTv33/zK+3zj9N0IozfvOPPJqRleDHRr3/gIUuTkhQJCUopYWVPrTkeNYFTppOgY7YCV1Q5lKmhsaMWasdFJSLhLiHlv3bbF1BNGoFCteA25aNTLy+HH5REbr4E1/kSA2+IoHuW3MhJzsuNBSKSNpp06dYKa2RNNhSiGE2HVqJuhlYcMgHQCSYkwKHFhLMqYpQCd4OlQtFXzMYECHwpBP7xgHBcGYWHN/0Pcf0D5daWHgWflhFhVqEIFFHKOBBhAMIJkk+ys2N2SldqyZMmW5D3W+ujYO949e87Isz4zxzM941E7aWT3yttqdbub6tzNDJAAEQgQORUKVYWKqCpUzlVA7e97l/wbAqnekaxz9h3yj1f33fvdL9/vZuPECJcZKOl2fKzdvNn5CbgPPfm9mCrVfiDBIDSEU7zrfEpCwkkHp4AJnyQ8QPzJ9qxwoDGkpRNCA8iAGeMtlur2qJGQkCND2tCpq6sVAYQlaEkpBL/pJnYD9/YAYCNomEYb0KiR4KlxQEUp4IYYnyJsGh+bDPufHIOn4CBhSEYg0wziVuPevQ/SNqvnxfHnzp9J6ggfSPJK1BQDtRAgMAzelony/jwjIJuirXobKPyUgTThhkYMJHHpMNTGMC3e3Ki2k/STTlMDzkg2nQF6SbFBvnjhEhLQhUWPPfbESGA9bK0zzpDOtatXyd31aoaKLR3BPYsOCG5sdBgTYAXUhYtXxUnw5DGxhbx4GWqGQBQRB34mWahUD7amruaZZ57hleTRkpIsQftkc5sXYUjq89AKf16/3txzq1uLpbui2TaS3d9/K+uWrEEUiiBvQZEq1EVkzrGuWKQ/YBtMTIayRkDoBl4RLq0DXDaJ3vFNJxLCZ8+d08nxootL9TXMyeYR5cq8zForVCf+MVdQUFrk2FlXAkIjIT85PopdptbogBOWSMF1zvgzdDt2pffdGpTzD/+H/1dCm3K6nY2HgqHiOgACHZnVLpZiaw/s3HXjRgub8mACE9BFRCCTDFeX7WEwSvDlL3+ZBvKeW7dsoj/kbpG0SVulkEbK7pAOPbQOePHif/bP/jsbQigDcZA1zjN26kRLCZHDVBw3fNI55Bx+5Zd/DUwSqapd85Vvvlq7ent773Dx4sp1W/fO5RX/t3QAoIRwT+4ldQByf+Ze5GEp/sRPTEO4FAJNHYBctg+/BPQPHmX+Wh0AQbDh/1Ta8p3UDfhwByCaoOgAiGWiY2OZTrl7c+5MDve0t119r6/92tzE0KISw4Vzca2vbYOO1TcGr/NQ6ADN6ABA2+0cOgCKZwF5dCalx0obt7FPW/IzZ5i6pCgvbpPWWfHo3RpzigNJXdobW/HMA5i/xZMSUXbMDcDJmc7RQnukU8jEOn5Djezlw+mucpbTtD6ajIyoQk7zAIrot3iPxUSFRTazKj49lz86W3w3r7Ta0um6OrdkuRdcGbnWb1y/oqrSYZfXrl5yQ0Jdjd2Ay/bs2ulAo+Q2RcPsjnPg3+ge16dG+Gg1mIZRGy9ienOAxiPZNc2EA7tgBTytd5EZTyIbZ8Xb+ERLraGXQSicRYRBi2yosOyN1TMxOu/ULlZgAPtas208otvQdEcWQxzboXHx4iXxKxfHYF1Om1wHT2gVlT/5f2uuwISDRwcAY/kDtnnbiZ49PYxO78IiCoastxIwCwuMHzuGDzKDo5FSURpHbDsmeMO6daQ24/zTlhuvvPaGqx7tBGDgWlKD96qGnGBOk2HIALsQ60+1A4JpY+MTolgOyjsC4YOrLBpKuCqUoQkYosMDQyzKdro1yiZwpww8A3vnr1AtgzFTfoNkwXd80xe/+EVnl8E5NUlEoAodALxVHfw1Q5o5UoNS+JYlS0+fO3/xymWNIwjuXiBKOAS9FXFaPMeOpXyYuvBTvXq5PGkSk92t5G6Pta6IPoJSuphyCkMQhRC4iXNpV4pesBf+1vlaOIYiSgK4Bl1fCHpYh3ALN8BBODiQTwoPGvJJCpd80lziD9zwTdQGvrK4R1tUxO17wWHky6AKKVjnfWx81EoY19spEk1PTx/vFFFdfn4cmhw3u7mt0mDWKAgQCz5na+1w24NqcODgBXpKKatGkQnS8AdLcV4iJBGYsTGOvKPz8uc0UEH1Umy/EsFUxHtacUB8cLaOmSzgIIPpQin4SdDmrpNlSQHHV+1F8PmDEwtUihugwYT6kYh3KVDCTEh6fIIVCD5BAzl4I1EerAaBmFStqSUX6GGmDDijFjRCI2kguXsAlK5sqhRKIEgBXyliMi5ATzDKs3nrFoRgr19WA3LiJ/aqOiGjCCNSka/gS/cgVhHAEeUTquGj1fOr+VM1hqsUHPUm7UKRdPClS8m4EVVAQyLgqJicmFIEZIm4BD6cQzd6e6WjPfFTLYmr+f+Xv/Ok2xYdGFBQXBJXxDgGKE5cEPLG7vXy0hLapnMx2N930zIVh1E6cNBOr5j0dTN79DJNpEDRaE7IoGxJKM10XNLkbCjhoH1mgyMxJCzFAgkP7Hk38oAKREnRo0aU6MII8mx81nkQrekAaK6cBGK1y0MPPeLQESn6jXqBVkm1trbrgTnIjLzBwQJM8XgBOakypnBP/sRxQ7nQ6OpoZ1q+whPyUiBPGHJyIliPU9y3SUAy06VY7jjiFUbKY1GXgpjoxlm8U6Mqoa0s4cUS2+wZm3h/2i7pCoFRDl8oASPns3gB6kgXuWmTJ4RqqIO2CbJpJ/xv9fRyVXbe0QaY4yEnBBl802Dixt6HHkQjlIA97KhHB0ZkK9EF0NgLOJiMSuPksYEygsjGmGBiXzDXp0r0khc3AR9Ha2FCQ/0qvtJGDwaQaFE7/mj/VO3FV+SoxbtuFYYwaTwBDQI4w+Oo2mOEQJHUz1EjOCROX3VI0tIdA5akhudA6QZghSld2apXRCsCMap8/vyFn/qpn7Lc3ztmWhdo6K68otSYgeOMTBkSooNLQHBJhd6dGMWMcf9AHOGPgdJxHu3JHWMIM6CEmKxqfGbG7rdyZTJNlmgSfPOmrWFC7kQTas/MMXIzrsiBGLvlExF18fJFx9RcvHjZ2qFnn/2Y48hIH+3aV0PzqiApJIBvRbuVTvbViBHxExpEA753X6mPnMpKwRYFuQ8dAEooGq3L7lWg3jijK4gWvIKV7ZnKgo8E0hIbGqe180SUpjgFY0pmAMha74NSvX34rV/7tV+zBg8V3uHgLHm93C/96//8u7/zS8gBp2l1rPvXBcWE8kVLXGOpq4ZdJ0+9axPwxrXr+vpuESiYuIoPixaXYyzCCZ1Z0Zyvf/1r9OH3f//3ATFITFhMGQQnKaGOocmPFdjIsyPq2LET//gf/2Po2Vqg/eak6CT4jqCFv84AM8xelvzJn/wnUcjOHbthKJQsXbTCDMDS2vV9IzN5pYvXb9unA+AUIKFlWgLkN3cRmJtixbg/YQaA3hKcJ/fiXQyd+zP3kuX6rx0AqMLZg3uEm8uWe7kPZiru96/dAYgOQ64DANuYB3AncADMkI8g3mJQCdmfWe9F/G/L751FEdqMDXS3tVw41dV6tWhhptx09ML81ORoRDyxHidCcGP2Qmr/G8qKJTiC8qxPY9bFNBRK9bEtQZydmeKRjJ9UlBgpirhBz4BS6QaY4beRxidbAYSS9FOvgHqbazUfHQ1KHDcUsT6sFQTTrz/Tg40wkejBT9riV1CbHiuVAlH4ZUWC59lOTZwAUwdgaqFkciavuKS0tqF+8fLKkTFXwc4sWhpr/BwbPzYy5BpQmB7Y/6DOkTNA61Y2MDpal+lwRPCU1nvmzov8yV/Rc8CZHsOESzJ82LIXzsEjvz+ZISVHb26YnNobnqfk7lBnFx5fzcwhSln6bxeFUhw7W7MZYHjktl1glq6p5aGHHuQOuT4wj7z9Djdr+IzVa+bghvzwKgvRTun8pD4YmERgd4QMTAaeNgdI1A/XIbl06WLG7VhWblbEmDRRL6+usjoL/jrtp06c1NasaWpyN471hO4BcE+ppbyaGdED/msIOHlUiOG4Sv7QeiReHSYoAlwjfvLU6cHhYaRJwVj44BtRYh1XhhwNH5SwC0vDG69Zg0BU8FfaDqwOm4vjMldKkQshHCN/+LnP/xwcHHMJATyHgzPrpGvvyIhG8C3Lli4HNukMmI7JPvneGdJ3IKbWIcUYFmtAFQ78klFRKsSdKut6QYfjGdYEmS9SF+QhPDUT46O2HQgYoMrz1NTWca3gE9zsnRhTR4gBKY04wiEAPVVAm+oClXpulAFilg54USlNQCYchFV+dTsz3XCNTPQb8UE2MrJeXjZgSQ0a3tULDp7jA3GgHTQ1KkWUDoG1hNWDw5ZZKoL53LKVEcJ00Rk+YBr0wCQgrW16Vy+A4IPjgTxCMB8a0MMiL/RKHpBlgIbEJEoI3PsAInMCKGwDR0GJCgJopzJ8YEUf9GUSH+BJqUEbGRrFNLXIAAc4a1ZUhHwke/EJcBDQ6Jd++gVZqVSF6sgOUSkbPFUBPX/Sc0ELqdEuvzigLDXzqA4QBT0SAZFBZrQLciQi2a8iHi+UnyaI3+ADLOAyE4fRYTlholJAlIUJ6SReSYcPE4AP+Fjk159oAdMvZSAdtNAlYD0gyAw3D/44sE9OLx5VJ22BP/hI8KSqZZbNu2wg4L8/IYYcyuMFFfLIAIJa8F+lIYt/8PP7wXUSNCaMTUwaY1hRs5JJODEXHg11DvCec8C0d8eAOkNqeGzcUlRhJAkZofFYuQP7GIkH0UWOjLY8Rv6M+Lhl49ixo2I41eOyDNyHKATeRhSoMjwgREkgDUu4blq73hCTpSCXr1wyHmxfjgU4jv71u3PXDscIrKyr7e25td7iP1da3J03RwGsBzFYyWLRDCugbF6Uzh2rxVCBd253fDTWW2MTd4kRSnFDnoShdLzznmRze2jouz/4odPZMUSwW1MVPQcI634iE840wC30VFaiskhwqoBPSQnICd9k80kieoHVIaFJMkAG9a5J9hUHgMIWqNauqPHnu8dPvPHGGwSmY8B3sg1fZyNiK3IPABqZE4qQzBlxT6qGA/UiFy8yJ428dPGK4Luvv1c7t3HjepD1WagvBBQHDahXXnkNx4ywQc+sDmvR9sCKv4AzxJSCCbYYt05V8F+AqJRWmY3llPEN89Vu0gA0cVvyKcJWQJJpffWrX7WlVa1OMsVPoEIFXT2RTdIZe3YooUrV7vmjP/ojN9QdfObZ4GfWW7AavrJy+Up73YoLz5+LXdHzM7EBy6wRVtsh4+g5XVB7VKxmu3DBBQvN2dqSJsPV7qngxAQP7FRQkvGpkmt958RxyLNJ4tizey+9RSZ8LDghC30r2sKGcQZb9IXezaa5WbggxY0bVdWVEAAN2to8sgBTGMGRET0Iy5av2Lt3nxfuTBWGvXFMD5M48Ae7KANCZBZk22MDE0omOpANYor098YptLhNpkb66SrReDQp7mDesHWTRR0rqqrl13oR08iQ6YsziMVhm4PFOjoAJu7NnHjOnb1k3/bNzi5SS0S5So8cIYZSp1yjUTfSHoC3jx45ePCpihK74WNlHQLZFLloNWFlGgSqRCP/4cNvKgJ/fxqZJV+YqNdYsrM79FRhawZALW+99RYpP/jgwxb/UCHvhiqhIQigkPawqshaL8QColHUVfh7f+/v3WhpU7X7gNo6bzsGtGhx3fhcoahPB2A+vyTdBOy8SUuA7usACBML4gz5eHAm95slvP+T0nOfshg6Pt2XTkA4LBGGBOHPD/K8H6velz9AfOj5G3QAsrU9mUuBvx6HahJBvKQ3PQDBoE+pGwDtQjsB7ubNz5bkzy/ClJnx3vaWrrarzgZ1HND8zLgZ0Lz8eWP7qZUxoO/NSjWQ/CtSi2DNzh+DQtmiMp0AHW+XBHPgC3PTxfkLpSUOejZ2xZBmfTEDUBo397okGEZuGzAPEDoQewbiTEDwIxRIrSyWcBTJO3lXIw/gq/wpnWUh8X0iteO4a5Yv/671zVYBGfs26mSJp/wBc25hrrBs5m6BsNtypura+lndlYWFFbVxnJ+lnsYaqyqXbl6/zmGmHW1tMXk1GPvUNVh0TAzHMD1Mngvl2zln5mz0R3+equusGhXmvjgEiHGV2l2qiBaWa7yDbwSKv/UnWhjsG4feYhG2uvIGUsTQAlDIKC6z9QK0nRkqYlWOGK/5+pVVTXXOH9PVsULdV8bLxnfvfoB98ahsh9dSr8eoCdbhgi4We4EGZHRv0rv8G9at4cGgxADPnj2jF+FyMUtG0agjvnbDet7YuhF4Hjr0Bvz37drDPHs7OzSFTmCzhsQBwXopBEAu2jWgNJTcPhZxEQgBE698VeSV115FhQWywGpnpSOTRRuO8RAQfkKbY+GLwgmYV/zg4lKgZFDEVlHF5dTInjr1ruFwHSp8W79hrSqKCwsgrzraIqzS3vGW4PCsmOOwcrSDw7GQ5ntnz2zYslX7iJP8lU9kFx3cggKIeaanY1EK6hRx6LN2ymwVueMqjgEeXw2IOoC1qhrVJA43m4kV0Vph+P7H9qOF7yJxOMOKY+efaS8ySRxk87op4pRi7T3WaUHQCw3M1DooAnIWI8WcsK8kTit029pv3qRslDOBgg8k5QEfHCoEJpaSIOmYAZiaGBcBySPDsqWV8KEGgGvPcc+hOH4hg/kI9FX/Hi0wwRzA8QQytEilyPdJLcjHYQR6wUZtGYDqBUTVVIImQCn96QXJoEHAr3YhwfcnIPhvL5HW2foFZDLmZE0wwSpozE7HzBXm0EYOH1GQUS/goBE9zhABUBLlP3nyVCbHbD9D5kmAQohHBujhG0VCMsIVR5ca8VMpCkOvEraELjOAHiQoKzOcZfNJkQTTn0J/us0w5eES2TX4gCRxa3wVl9kvgASBWB4AG/ET3xACEz4HITig6YcwFiX5qlE6gKCBIIP8KpKuCmzhQjEEkpk0o5sNrJw+ySZdjTleQdu7FNmoAYnLiXbAI7rIHvUCniuY/3//7U+p3t5fJtavyPAIFQGa1GG5elUTK5mZnJDHQS4dne5HHXBWMPMBlC9GuR4aCVEAKfNzedHPq6zBL83HoiWLrZFo7+wQ7uMLbAgSa2AphoCZdw8NAMGvlKnROEAGNOG0X/rf3u4Izkv8uQuYdIHEB+4GN3j6zDPPWWm2ZnUTusgJTA/ioY1CvhuRLNNjNEgtIi2fTJI65wLayQKT9kMMgSwcGvJgcVIOrakDiW52dIhjQNAYCXRwsMyAUwzhxGaRtU3hImmG2rkU996AQO3gIMWvT+CTB8ED4peuG4XFEzbw7HMH9bSTivskvwYPbnrfbI/mKSjs4x2wV8tOW3r7+8RPtBkczZXMTCVBpjSJAzgJB1UL60NXikPLbbXkuWyc0jXihpBgBoCsuVNyMYFIBFr0119/nZ0kCAZRwJGHceKJiA11wKqOt6JnpE+3IKBq4S8m8+k0zydz3FiE/7q54PPs5sEPvX4IA6kHurgiThBpfI1RQm6lb6Bfwdab7WSK/HdPnh4eGa+pq3cDg7EPw1SmGXds3bZp43rLo8EZGYxL44eHgrcWS2i9RO9hUStWIvn2wFCrie2WNv0fC5zWracsa50rWrm82t4NwYR8Nu3hucZDv2V6Kta5euDDb8BEjwIt5Mih8LloH3ZT0Z07FjU54nbbNoTH7Ef1iiqawAHiFT9C8cx+4oN+SMUiS93m+BSSAjkphjxkB09sJBcKzy+oZcfuXf50cJa9DvLYlIY5mzdshCGYGNLTFWscCYJ03AMwcPt2cUWpQQinAxGBT+ALCOW0eofUtm7eQqud7ATJDevW82X/+U+/xkLd9o0uRDGEG61t2mwVKe6QO4maWPMA2s3nnnvmVlf3hg3rMQcCSBAViVRwO13+RQSGBq2GMn+SuYJyx0DBnD3SigsXLqmXyairsaGJSVpnKTKwwRoP9W91EpCGz0xAKboHYDYyFfPmeoBf/OKvA+UYGgwk4Zb2vqPn2mcLli6ULB2emk9LgOJsyrt3XYoVI6mCyQ/2AKQZgJ/cASBQtHhyL6kDkPsz9yIPnP1J+bEanlLwJPv3vxa/N3/A/cvPX7cDEMhY/SLIN+iSTQZ80AEQxFi4LypyOKeo0m82DxDxcjTteeZx56ZLC+/aPj87MTw22HvjyrmBnvbRod7iwvkybvWOfSOz2dGgEUkb/lcUTBDtDVbafAvRRF/YkICV9y7h0tLPztydG3eykBQhP5TE+tnlABYuGth3FKguQCxQoQzmFeKSsRJnkBdhA+3iiPxiUWCoV589KpcoP2ZKSAMo6fYSMUIYeYznxcynQEgjpVaDPoAoBU87A0oWLR0Znxo3alhZU8YQSstFb+qixtu3bmlsWDk80K+3Xrl8GWDGnAT3XJ8auQ5o8LE0k4KJO5kPzyxY8afiTFKwpOlVkMvyZ2CYhfXcGpOhDKnR5TFko9Kt7R367waPKbBBMU0JPOnwrd4+lDIumAv/+FVlzSWOjg0xHxYhchLUMm2+yFcs4SH5ENlWN60Bh5m4nNtCS3tIzLpAFT4syzFyqtCaMLSN69eyeoKDrRCLDTo6RIrM4rWIjC01HrodbjzvLvyLFmL62gIgRfCZod0eGjbmbqSTM0eFxuW73/0uTAzoaIAQhbHaDnzAQP5TZGvzoGZU0MPJYwI0eDYIQF5mHsMv+LDltQQ+EUtkm5pAyLjUHm1cdulhXZ3hnVp/gvPmodeFTU898fimzRss5iEmDMRJYTyKTIxYoGVYkFv+5jdf0gRj7COP7rcNS9SBGxys5gYm6lXd7YFBMFWXIAAFq8nxie1b41gLf/pE5xFCZfnMzu4eDNddJDKnSKVoGEO6b3XzVAkOgByjX35VNtiqi5loRnk2ebDdplls0Z5SNqzGJdXRGSTQPWCx+sCBA5QKBBnE5nRPEQwkXHyWnjgmT+KAbCmgElu7yt6FCQkfd62gDljFGV2m5DFX4KtE5PgtKo7RdIlaWNiCye48iKJFECYInEkxFa2jAL5Cg+zQBWHAIQ8TXJVNKWDlwX/Q/MhDzQA3RqFq774K2+iAsqrIOjUxWK5S+/+ASv0iRIGGXroHJivACmCBkq4uPFnbtBYnKQNOSgETYtADDZfEUWSHcOloVJDDkA2qcJMN5glVv/JIwRYMUVYplRKNgolFFFhFyiIcW2Tw6102LFKjT67OoADe6YAeo7LQxgEVERMN1+gjRwqtlgc5WIoctFNO0NQIrPywBVYRiEEPKDndpO7PJEH64FEXtvgKcwgomNBTUHEKTGqpn4PVSVdBkwefPbJ51IVGv/nP7a5EgA6A3PmFcVzRnbsFRoM9rS03eHUyq6mKU5MdCCf6KSmvsATIObOkJbDI+Bg+URsi5535OLl229ZwNFyYZsmN84kqaIkOBQRq9YCvbFSXNQCkiHGeLRu3iHf9CUsFfUU/aFK4Laui1YUqYjaEGcMM8zOgEUlSNV8TcCzAZXIlRT5d7f7UOj326P6URzomUiY40AMVCUbZLf1L2gaCwynn8wq5MCl0VFQEK6fNGJWHgIIWtMAZ4cpiIIo6e+LORUIFk+YRj6/SiQoQVUvxS5C6WC5xcZTqtm1bxL6KaFSouAE8mbs6Omy0Is7wxU2rYQXVJbZXV9a++sbrSVkRRRVoCaxSFK6gSgk7UUEFBb44YzkKfESlVNDNA3zQwYMHs8wzbIYRwc0xoBgrcEA4laAfikM12Q8NxlhA1GXxDFSFvHDmK0hHZgyh6xADlkJrJDyA457qcMDMj8U5i8sXT01Ge2A0zsSbvgFWqOWhRx4Enznpn9iGRTRAWYh59NipgX4n/JQobqkPlejv7bWn+ckDjzsfMG7kWrbM+gRwnIcArDUAlEFf3eyKMxwM12puDaVpjNPiMR4gDuexQ7CswkVmupSm1FWtxva2uO0BqkbF2ATqOEBWmqiGT8fNLjuXEYjn169fI8EkXCxlIBYZY7sJMQxXRChFs07EiMWUFApMGxPT8AqHNVHS4QwIUULgWst1GW719elcSnRHGxHoYdpaTT9x1ZgvreNKsBREo3q3R4ecVeUwb3zgEdiXmAx8nT0omZ6imd/81jdiAGYitP3//ZWv/vIv/7IOgD5MEm5dfUOKV0hWwKYW++YJ3aUTOtgXz55z+JOgRPOGOvqWVmZz4uoCBP7uBGD1dJWMbg/0IUo2WmQW0S5GhGCXRYacKWbStGwnz63UzFMezLcEyGMuG3VW+mGO4zt4mF/+5V/lNJTFOtsox6fzD59uGZoqrKisvzU8YROwGQB3i1KkXAfgviVAf1UHQEX0JD25dy+pA/DhdLwiAhkgnExYClXRd/gAzF/qBviaS8+9/A06AOLiCM3jEM/sVyX06oN1R1nUHmuCouGNDwXG38ut59QLnJ2xI9omx3zh+Mx4d3vzjWtnezuaSwtmK4qdoWNoasKwvSVh5K4DIO4XNNhBnJgwPhZbzdgRuQDonjHkL9gPMDPqJCAIaD3NESh/x+zA3FSZXbdFeTqjUChweHOcNsSw8gw/AcIcMISgPQEnYw42ejCHSqRENRaXhns0bOHdJ+8+wZC5+lOiJ5u10NFzxmieoRoHGjhIYdQNYsVlFUsrSyoWO11AMKdtdVqgBfYrq6vclGwceMUKawyNdsUxDwJHftLIDium3oyFlTFJeqsV4IeN72q5DVIxTLotMw/P9iHjK2SMwkhnd0xbZgXBKS1fArhGAVgaqwjXZNjFVD4rU4otwE0ecJyF4aoQEwwUXk7GbsiAKWmbeNSR4RibSB7GETRsR3tqQE0Hiz8Me8nar9v9fRjI01p5YiqGEwDZ102bNjLD9s5OIzWaTxZkfEqR5pZmX0tL4m6QSiesmeEcG+X5sdt08fDoWEN9IwIRBRRMiABDuBHEIhA+sDXi7hAIOy6mZ+c1B5gpXRukRowibmVhhUxOAxDv3CnZMR6fOCI5k9BbWpoTwvhJ4OrlWAD8P/7kP/7cz31m88ZNa9et5uZx2CdFeGaYODCalzt+7AQJGsBCo0/2sYy7+3Z8DP7okpO8jJT51VlEAsJBtoRYZoKDUklBjPehEavpJgEJZiOQChjjGzds5vZNdKSdYDAfGBpAvgdFon8QNKlo1Jvyq1kkOGTqZMrg3R4AEqdX4gcvIMOBsGROtiCFz8cBmWFimla6RL+wQjLFUESKRwbNJc+JIgSazLG13fwYdy3dfj9yhAlVQQsI5n8AwX9ei1zQfqO1XYoHocQEPuCpBYeDFLXgGD3h3HAJnrCVRxX+hIw8UJXiTzQChV6ZM6jWGMdwIUbJb+EGrZATVhwCUHCAlXc1Ko4hE+PjBr/oA7XXfJCCquFAc2iIbMyKIABP5JcWxS4+liIbaIglVrX4k1AUh5vaqVCKK2rrGqTAkKSgAU9wpICJFjh4VEQE6KJX4GCvpofZqgh/DPmL9xJnJKKO4ikLVLS2BfksndyhCg5egaxzgocyGDLzqFEK4OrCZBQpLsaAeUohSgIFAZ4yJw5A0mMGwOMrkv0imXCxlCYAhS1q8cgpRdWAYwL46PWbYMpJUuqSLeN/jLbIhpb8L/2zv2PlnwuiYTw0EowuKtZ+xOdANOawJoyzOtdh+dJlLrQdGB5pWr3WonyIOtIRs0Sxypp1UdZNwGptbFgt7BNgGdAtKi0aHhlRPVRwUx6WIBQgcu8oz5QjVu/QSN3DaIHvxopAMbExY6RinK/MlZjtN4UYPU5fmXx3100Rj2z4gjuITBpDoonjpAVVvEOInsCN680wTCanRok8I5h45E8YUlwQ1AWaLRUdXTENyqHDlniwuOVaM8uXE3wzMdTOACrdVREtWbRsMTeEWDwkSDC9A+4dpYCgBd/hQGkEkYND7nnpwR8kUzVqUVMdnrH/1i2OFeYgO79F1Zjc0dXpjHwLRSgil0SBsFEeQZJdlQgBFlbwVzvewsdYGlTN1fjVC2dyP/rRDywCkVOl+/cf0CxpoXFgRXWtgobMlYUznwUyA4OzdAioFLH4LDM1Qogqum7G+A3tJCBy+dmf/Vk5k/XilT6b/JRBWW4oulr5JdebW5ye65RrY0UMZngsTgG62dmu0g2b1sOzrcNgUjnl4dnn5ouuXrsx0NfvsLPVjQ2NDQ0ia0w7+c7xVU0NtdVxYFTNiqrGxgZde5i4cpnld3Y6GrmXlzMiUFVVbeiKo9PpdVWQ7oPJMf1n/UrHO1jqULkiJn9Ip6JcfyaWzZFathfAbGAcwoXYpCTmWHUAHBZEmrofPgn9vRvDM/g3PhE9MULZunWzeAJiCpaWVRw/fkIeDJdCsqQvHMd8bMFbDRvfh2kqdQuH2m1n1AFXRHNra0Tzlaua9qeeegpu3Z1dgGCpgoIjjdTswrwRL8E9qakaHCeEqCtdz7drx05dGsvMaIL1vvrPU5Nz9nM7QlGETShc2xNPPgVtroHCm/6mS47bo9KY09XVMTk6tmpVI/JRBFXaaA8Aukx4GiLV+r744otWdmIghFmNeUIEUgyi17FUF7316fKlqxL1B/QZMu8U0QA/CzJaBKwQcPAftwWaT3/2Z3/mcgnrEkNDhkalY48OwCvvXOodnq9uWN/ZP2wG4E5BaUFhidZSB+AjTwFy7jzGehKH02/uzw+/5DoAH85JZBJpKQKD/9m4V/av1/fh515Shvhwz/M36ADcQVcW+htuF0TbEBL+0X8pPs7qjQ5AdloQjNxMj+3mTi0NNzVuPD7/7ly+4c7x2+0tF282n58c7SlemCpYmM6bn7bs325hDMq6EFm0bbZBN0BYfzeG2AXiNvTqAjhuC3CH6hXcmZqfm9SepJF4o/5GVWwi1dFyPI8OgIwlBTCVOG+NnJDexQI8Bv3EEzADbDa4Qyc9Kd2nePLuuGog+geZs0UF5nHMrAZC2J4WfAai1g84fTQ/zxFF9v4WlJTOWR8/m6cLUFqx1JikIJtZPXZg/43m5u6b7XUrqx/eu0+T52xRV9TSSdrIvjJf0WnRPJvifi3+oflMRo0cml9DAKlZBQ0VTAbnkUBveTkoCRC5r+9973t8oGZi6/bdqJNBM4cIRYzgyDB4e0gHw2HHWhwqzVIYBVWKVVNZj4gzkW1sdJxXFFiAZuRC0wMN6eJd1n39RjO7m3OrsSmfggKuHiFEzHJZFhJsemabPrGXhoZ6bHJAMoo0/vQWu9Rys/MmSg2a4G1XW+zvWtPYAJnuri497eLSMvM2fDvOcKeskpvic6Ak0Vy6F+m6NAh3M/07x08KuGUwf5IaC02tSAhnsCg1CvD0JxfhaFnr2WECMd5M5KT9Et/yh150AOz20h5lLUW+7V4mBq9evmI3sLl1ECADuMM/4CYUMeBqXJ90HnhgnxQxgBWkhp1dl4a08EXTsR3ZOyk4KlnzpEuG20SfFNKnsaFBkJkMDgCOh4XFcWCgyQ1CNCeM6q3bt2mdaYu6XJJhnEvjy49JkcefWm0AQfCgDqW0Bba0xcYuwR+OqQuG5CIDHJCPP4ATMSGCr5FVSkwnMAAH6+iJUtJl49Jh5RMg1Ax14E9MjsdNRz1x8hI5astgwqWjSI8RT3QAVIdRWnP5KdW69RvBpMPJ9IJG66Ky5Uk00wsNkUKj1IJRdCk9ciLfL+qInuyQ7CFKVaMowbSqTYqc6m1c1QACU4UtAqVbHwu+Umrn/DGQ1iETP8HU9GAFPadIEICPP7EuqbQqIGYwAgeA9esBRyIpM0bI4w924Z4U+IShLVmmOgjIDA7EZPMpQGWLe30Vo/tKA1VHWCHFrC3Tq2QpSuE8CB44oAsJrAA/ycXlQRiiWSQvtdMxVcPcn6hQXF30mSwUJ33ogaCIUIogVMRdhKJnD/bKwN6TRHBexxVAglMp5UxeCBUKKkXQckJDjdjrT7+qBh88mPuqFlxKOZUCBxVSUqX5//q/+7XSCi36na7uXiKxiELUVV6xGNJK2mqZZCbInhibBMYIhxjIrJSRWjTYwJrEhrb2m52bNmwW8Th6zCqdHdt3EaoOgJ30jrbU13N3veDGuBH3Zl/n+QsXrjc365I44ILpauFo+aZN2/DR42BrAzBGx5uaLIdYRA+sBUMP4tGAR6Iiyx/HxvHLGTJxugiVxSOy1IbhuJBFpI4X9ABAvzjiUsx3T51wtql5Pc2JDf5GTx2k6DyE0vISv24oa7vRahTfoaSw4hqWZltJdPRJlHgw1Uk7uq0qsvTCr7EQ7PaCy4boJ6aYpVJLHGkHpnuZxifHGuoa+2/3mfJ1kLeRqQrTPqUVlqnYGCyQonlGqIxsCUOpMmtBqfbD3DTls+nuk5/8JODXWm7Y5AYN+odArke9NMy5WhTaC7MgNT0KovSJFJYvq6pvbHCXMy0BU5Mjp2EkjRyAmGkV0MP7wnfrwlE4ZyDIRj/onIdGAourihMBGvFQvViN50aFt27aqDtB7TQJYFI+jwy03ICQ+BXf+PSk7jSz9UaH8SSnur3y+qua8E//1GcdfwFUV08ni7pw6aLbMammaW4D9qNjU+7/cQvYYH/4RBfessk17ouJjTvTVy5fZLSLyiIgNp/g7nj10lvzJNZo2QngCgo9Db/Oom2sbxQQyZPCZdx2vsTFy5d18MQPAIph1zStNZpuG6uBC9KhG6IfEFqar09OTW9wHa89JOPTfLSFDSbBWGZ4yYpSNHbejGEAcpmemUocgAwvtm79BhIkX51eps670V589pXX4P39yRORJt7S/yvN13gKGUgByUi7cvES9+0FNCf5EA1mYrhfcw5FZaWaTxnELq7qc5EzQzALoUnwrF295vU3XpUBtJttMfajmVu7Zv3Fy1ccQ6YFEr6LSqkKzwAyEX/n+98bGRz6zd/+LRInU5I29ad1l+cb3/iGXYAM6vqNFuRbrCxY8SdEoEqFqGvdyhqEkAJXePDgQYT03YotfdpCcjdFTWTCVR7fAieUOqHIBDMdE/1DgJGSu+I4pneKOfRNv0tO7Llxs//omZudA1Muu2rrHVq/fe/dwjIBKvdlF3DsQ80zImXVf7YkJq8IWDynZh7vud8Pv6Sv0oFIz335JaZGjmLDEyeloO6+DkAOTsrwPqx7/8mOATVOzvpSE+IXwFjpnj0gQDjBET7fif2w5hns+zSj7gbc6ADImKvIEJQ/Izl7OA3DTDgcK5l1UtF/Jw7yX1xa2NfVcv3Kez1tVxamhyuK9SUskh+fmY7dnMwh2Cdy9U+sBSpwoZJRSL4CKPaIagsBgC6zxcAQ2ky0IsJQdQjtMX/WUaGOYVWwpNCIYmAdYXBsHrAySHH0ZuyKPoBJJCfFQVmK2v2qMaMipg7cHYZk6amIDgDEpsanYGHkOu2DD7FyrLYTFxf0uf9bCGdUjG0WFC9aUqVLQJEsWNBeXm++tri8rGlVgyVw5jKsWKpvrKOQnJUt4n7Zy8GDBxkXrWOeNI3fo+3CQkqYpKO5wQSlaDXIyKHtCOGOWJbOv7iB096weZObtpWCPAx1Xxkmn2C46trVZiYvm1/NN5bzt5b9xA7+uNKhgg/h+Sm8qAjh2h2WRfnV61xj4uZGHFhspkdPmXbhIbdJCk2NDWI+mHMjehNQhd6aNashwH43Z4fOWSvIAD/96U/bTYVMPtGf1csraR0IFhRxLGyf/+Ef8gsKz5x+T6v9sWefc8KYqJ0uOX+svaMTD5vWrG6+ei3G/ienfvzKyybcjCGbZ3zhxRe1a1pSBxLs3L2Ld9V6TowFgWawjeboEmrdhiMqXYEDhw+/yaLN0kBba/X8889r7nGd96B1pHDx0vkrly5bathQr2EqMqZuAALauFFWUa4J5oTJAuFdnd3Eh1dDI6M6AHADBMdshMUEzCQ4k1xkx1HonPgqRX70uh2Fn/QCN05MZt6bQrpeXVlDFZqwbVt3KItR3HWBqaTi4tPvvmu4ld8zRgkBIZBPPJsUxa0BM/4idhV+iK7VBTgHTmqZqsecAzS4X5jQIqj6VXtkyDQH+Un6hE5/6FjShHD52Vnn/sQlS4B6ujrFYIaukACODgCdhLkolEHRI/gozlcjgYoa6vWnByaUXBFwPCluRj5zwEzYwo020iWEJyRpNZgsQn6oIsojBebwUVaRdmdF1tfCE4GeTFdjGiEijb7Y8Kq/ByUYUlR/rlm1BigplJnmIxwnfSVoYUxiHZORAap6yull3mrE+ViPwDogoPYUEWlGESUPCB47RTgI8OGGEClyguMdCTipUjRCm80yVWXRQiH5DWIFGVvUQs2wS1mq4kUt+j9gys8cMNNgi/0Yrqx264iN6ZVVy9esXlvfUMfDtdy4rlff0FivX329pRnCIKsCaeDjM2RUisP+xFuMghJU/Rm/CzHyKwOiyEVKLjMSvCcHRfq+IoT44CNRcehBEvlKSfGS3tWVysqZ/7/+87+LI/aPMxsPopQxsSeawRFbHGCDYPYsmrRGcPOW7QzP0KDxzrXr15hnEAbhEYHZINDU0GTK6srl60RlJhG/Pv2ZT4HQ1FBvK1J3501kOaXEoQRCOhO0Y8NjVjNcvnD5lnUet4eXLF+Wr8dQ4qiEIUqHHmrugLenn3pSvFxbvcKEUTjl6TgSCxlWdVcbMK+N8JSaurUmdebM9qCNdnJn0HMmAG1jADYgWzOHHda806+Tx98Zm5wwEeh3ZnKqvbP9wP79WmbbKJ2UvLg8ZohIi5bgCQ0TSJEfUCCz9qQEuhm0hOHhnhFW72YJDUNpGP0+/tTje3bu6e3vnZmcSemat+rl1fzm9IRjapY6eImoAOzpuzVsAeboqFEKlZKozRg0T41iWbWY4bFCo+Nmt6CNyJj06HCs7TZqYpUkQZCu4ACqWlsZiFwLZBXjxs1bBMSaHAKNZmNsnK5ULltCoZHW39+nO+RFpZa8f+/7PxYv87YaLfzHWGSqBV14zmaEcQwbeqA78nJhfk7jKicpAyIn3eLacBvn+UcQPEpRdJFZ05oN0IhV4Nm1RG032010GN4GE4TAeD5sQLPhHSnGfmClu2Ww2WJ0MNetXWtcOTPFGNA6/s4x8PGHhfhdWVdD70eN65SW2CS4YmXt0MDtwZHB7o5u/De+wSk01NXp1AlT3Kk5MTlL33CgpfWGRURYbXOjpY4cAF+7Yd3GohKz5cWaicuXLjlmTmBkGxyHLJ5hF8kHUUUNKdw08Par0A0pZsw8XIlOArNEDubIjzPEzSfK/HS2TYKakRoL0lUzNaE5VJzc6TBaEm+JW3daiw4gKUinNtyHXyNkXnwyDyD0lyKDIAYr8CcUKcYjO7hXF6XZj7Nv30Mu+pVIkeTEPTB5QgUN2180I1Hvas9NeizucnYPoGkWB0/pYGiGVQQr25RPnHhXyPJzn/v5mDaZjzO/FfeJXk2Oj8HWeJ6qETU5Hhf6IBA3ujs7aZ3giXthR25UMP9s5SrVhQ/vz70aKbDs2AFQRo5FeEpZZ5z8b//t6TOX+1u6hnfse/TUpZatex9dKCqbsTx9fs5BNLEbNjYAhOsMS3APwD2BMou49081+vPDT8om/b78KadEmBCiXxA8PyH/vRDkBCHLH/0Rzg0EGZgVqyHrlOEj6s3QTukICAQ+6HsklNINADk0hN2xFtcwQ+y+jUoNHwjQRwcHqpeWTwzduvje8e4bzQ4Fyo/zTAaKCqcKCjEtDlEIaqKzEQUNEfrfi01NeuNIpoee2ckpAHVFyNH9YaorF7Q5jcvSn7kp5wW5K4xlldgTYFuw6m1WjxH/gPD+bWXRIGmBYuecVUJZXZhBQXSLRPKxajTmHj4YU1TQQ7WkKJL6TlLAjj9LLUe2NCkWFuTlQ63YbIClS5u3bNPxX1ZVyS6eeupgCmvM8xUWWJgxLdjVUvz7f//HhjD4OpCpMQ3EMFEmr2tAPQ6hzRo+RmQkj7q+/fZhmvyJT32Ss2JNflevizNtDh8+zLq5uMoqSy8Wjrz9jpbC19dee41PYFzwZCzJ6jk3s5FjY6PGMZWyLIfa2yIPciITqpoSLASZbhg9ibgtG+IFZ3522qQLckHWfwDAxIKgSilHvenV06UdO7bLLzO2usnk4oWYSTbLAZS1XlQOGP6BOiKQ5vDwPZ1d4m+IXLly2QUL9lz53bxh0432NluvrbN2ucj5i5ftRzICOzQw9Oobr3e233Sd4/jo4JLlS599+mBNnStS6txk4hYIbf00x3pn3oINDt2QmQVMQlQUrVu35trVKz/+0cuO8XCkhyEMfTDthWkKHEMOb4nVZlTIyMDfE4/GIQHIIR08QRT/6VKzGFvNi5ub6WRvX0RIwT09pPkFy9a0QfgjzCJKQxvC6IF+kwYN4GRaFHaEYwYB9Uy0hnQJDx2ToOnEKwWHBmN5s3OcnUEjroAYm+jq7XGTm/90ZsRLL7zwcRUBbqjLUig9q8amVWGh+YXvnjp59co1KCW/hyh+DJJIkyFFctGyZ4uEOWFwyCJ5e78CaHhSXU2J/GgkGghzv8qSPk6SIPWw69BcnIWs6oKwinQjOd6kIZiGD5ig6cE6tnarrz+1HShSu0cG/TGD8rIpTkuVBVlmGILgFw4wlKKsd2WhoUZtB9zQBb1o8UfGH9q7z7tEgw9+nUVZki3qs9ALgY7mNi1AsvDnP9x2V1xAucrppE6U6QcEqgJYVayoqdYZoPxSVAEliOFtKO1CgYE8CEjBUq2MRa2JHJVWLI6VDrJBmMsMxmWbLvyZpZB2Hs0hOJqvIvBT2F1eUWZUThuawhuZ0Y5vqiZH8DVbUMVnNGa8nXB7qWziTDtUTdkZOXRYxdq1q3Xvu7s7rfwSzwSZxdAe1i3UPQMThJBddrsOxqI9a4KFt+MS4YM0L6ijsUmyqoMA5Uwk0GrhPTw9SFYETKKxiCC5SqU8gMAfvYxLenpU7ZFfwfxfeXFPysflGfJEodEIBiA2wsQr12Ktjs0lKgCFnqmUosDQ9JOB/P6BWxY+GSB0eBYNsOLNcr2XX32NZ6exqi+LblKR6h0p6Ph2BoYqSUQLIM1jGKb43Q/yzjvHuFyzNUurK1lZaFV5GZqc/QJCbU1Mf8Rd0jY0LDa7N63tqV/VwO/kF4WFSMdu1Gp8UORQS1VgmSoYmE4LgE6ys0lRW0UhNAO44NRLevDqq694t5aJeNiPBTPMgMiBdZ8NYZMZbgCbVnRRX4wCUAbyoEZw80jhBURRxIY6MBEuXoRJNvAzzsDA4aaN2ZCcAHoZE1nipV9BnAfhZmc3hONS1sLCtes3wGc6W2FvdaZ5zHPnLv3Mz/wMbYC/s1/wv7PTicJdNt4Rv6gUqk5dchKUP+n/+MQMi8CcgDMZp4lZpQ2r8tJiFjIWxyrHcnyS4tBvtN3svTWo+6epePbZZxm5/PjA84pWhYCcNQ4zHvgD4gTiuekpqz4wBBxVyMy86Zk/MRZ/mLQUrNDAmH+sqqm1QhcQXJUO229/+9soVaMUykD3IINAlXq/ebMT8pjs0ze/+U35OUdc0j+RojqZtZ2abTDD/TU2QM/ZrQybpkkUYmKF98yEJhhwcp2As8y16zZx5armj3yizJZUGvWJyFUzXFym36tpd3y1rghyTp4+rVXgdNRCSTABeuyWWJFs+BLHwMEQ80gUw5SoNff4pnaGg1KI4YbM3Jx6qSIfh3UIodXLq5ZLYXSkAzgFRp0qsBFKfpWiKuKJn//5n9clMF8BT/xBjomdJCwIiBMps4oIkW/SlqjXEjMNoQjv1VdfxcDnnnsO32QgTUUIQjuBRu0ZAnUIu7s6li1e5B5AMzPmqT7/uV+A2PTcPGH9H3/yn/ReduzcjV43p6PO5F7NimqzB8ePHUWp2oFCha1EEN67Z0/qHGIaA8QQfebNmzcODluQ1S8+wAoOVJE3Dx+yasLZ/yzIbcQMjfEmZRifzH/pByfausd3PHTg5IWrW3Y9HIfALCwIMsrdqORwGydRftABMFyuQ0D04HjSS+7P5EbTp3t/78uWy5/y+JMsCDHpJCC5DPcVvK/GVF2WP6Ji7AJBkYx5sd46h899cP4q+IrnULrnxfj/bDaDUIj2hbsRJduYi+FzU+OObPDPUF93y8Vzbc2XnBRUWVnqTlvNaFywaRx/IQwtBd8JPQNQxtr0r9BJBB4NNh7zNkiwjVgd5gGM93M5cQLCnO0Bd/QGSox36SfEDgNuCBbxf1xrkK1dATyKh5nHxlNuSu0mCuwgEC5EZzp7GC/yqTSGe/dIDjDZAga/HqDgHMudILVgI4T+VVwDt7yyutKZ98MjThIzh7xt+3Z6Vt9Q64I0625ef/3NBMeguP4DHXNMLbu7eDHciD1CjIITo+1LKxYDL242msuWYWJgmw6/7+1vtjF8npz9mkV5+60jViMJTFkua+UEeH4402fmSbcpObAAslkeSdd3ddM6pDNqQICCg3e4GQWQXwpQ/mS83F1DXb3BKcP2c/OzHLLxI5Zr1MMSRCpk9SYBQQw71CJ6tqv40KHD1nZqtrhfwLHdg28ciIo0VXwUDNUipNYSDQ7e5tngKd1x2SglICLgKs3vOV6Bozh8+DA+kPbNjtbP/dxnNR8mFXl78D1md0GAD/jOyFAvUPyMlMbGenML2nDIGxuCKhZZ1is/bwAxE4M83ksvvcT/xI6Cqkqh0MqaFbjHDRoqkm5snht0ninRQwMbheRYxAl399xaWlXrKgbsQpGWgkcdHh4JnmdL2hQhXw2aFxVR7GvNLY2rmxzjJhJwORpoc7Nx4euSOOpvkW328l+70mw/sT1yw6NDRiprVsYBMlrhbs12dvBdkL10OaK4Ol6O2vDMuCqahBXBUScYEroHmRQAcLRA0gvSfEUUlNKIjGxctz81DXiCh5qkkFxsoIq+n6aT60Amo0shoHRikjNTgDjqlDL45YFhR+KgKdLR2YVpqvMnOJDEWzgohSdaJTmB9RWSAPrTr/eoK4tNyVFKUmPZpKtCCp/vZOoVy1dYbgslkV5WKjplCmazvNbkLDdDrgjllOhpvtrS3dWbhZ3lpq+FSVQugxZRuKUxSIYnbqiRLDAPS0kW2m3tHfigXo87THxNeWbn75ILYpFjND7cVvYAm2hHvszUkrAQiCKPeu2pIIXksGQIXchYAWwSB7lIVAQ86OFcx01DWhGuRF3ZZQvaTeI2QKAsYzHaxUJ5D1ohFOQAhR9YDX8vyczpP7CAYAjgkEy0qDea8uyR4quCiRbOwbucHi+y4Da6DMb5hYzHCxwUTDCxkUmqBR9IHKWULa4lUzcjpItcGI7gg0CqpKyCMJ6ur9M7MT4hZiUkbHL6A30lTn13c//mYSenJ44cOWLDJW2oWLzMlZ8qhqv8sJzPF4CWij9M6GzYuE405pNrHCzR5nH0Y/DFLDMXZtaSPQmCisbGoUj2gaVlcNnt6JgFmu1culb8IGptPlteXWnOsa/7lvtuabkDK/DLKBA5Hb76OqeMeDuBJsZGrG5EreVVGicRjL6mKN/SVlLHUByEoWkHUnEbEavjayxyUJyHVRCzJJp2bGlrNWjkz9vDQ6ZTjY1h6Jr168LGigqZI2+yZfs2JiEzJSCPM+fPHTt5gqb+9E//9NHjxyjErgf26Cwp29zSsmzJYusosFpd1l+tXrt21eq1Fu1NZ7u/iYZy68H5Oj7qwitLMwf8pQNmfs+mSVqxZ+cup79hLx11Ho7w8/ZAdGoz+xEXRatjrEjQqOXgjDzAWi2Kn0ZlQndLChG+bPGShlWrHap4pfk636Rr4aicFHTKyTirV3zi0QOPCN20BGfOnk7thKBv8ZJlFh0gueVGG2Zi1/pVqxG4bftOVFdWrVizNkbuqccPf/jDBx586Gd/7nOHDh2iHmRqgSkHZ9E5a6R12ktg2Q+ciZj/op8UBli/4k7LjWgXEqiywxOChFjt2kDRKdIrr7zi4FrSEd2C4yA5msBC1L40m9KlI6En2X47qqLRunT5qjVvmGxVm/ZvdGRI/kcfeYRitLTcMJLd3nbDTDSY7pLU/u3bE8fzmXtZvnTxZP5C52QcWsXCexbCdK2vo7fRAVlBUasbVtWfO3PWOTmwNWuRDJKs8Z+Gyy8ywCic4dQ4DlKGKokgUAbkkwsOcGckggMSZdN2QkwpejI3Ox3WWlJCUeVnxYzUhMnefXuwkRNEjnRgM/0fBvm9984mIACqF3wWbRmD/FKwQnBAKNQpmqjK5UbTXT9kHtzgn3kqvQjjc3wZgHBAC2HhNhq98yTXrl7+vd/7PX8SCiFSDAMEE9mBaNSSrV27GsucSA3tJoIgDEnNp0uIiAYyPAOKYAJzIhaicZR/+qd/+qnP/AKm6eX6mhycFsHaeA/e/m09qkigci9/W5BzcEBOTy7lb/yCw0Apnr3cDyabCdE+mByJI1Id0BwXU5hoHh0Z7O8xtl9QpO9hfQQPY1FQjBHyrDyM9T4JqmjaYxCfcI0llS7WP48hfTXRRh0AjlhX2zISBQjC4Cgtmr7rLgKRnq6Bo4He7y9RbCP7SvFeSRN0N2wzMEqlUj4kjg8lST2WTKBQURFo6oKDRFVI8YDkT0/cTmDxZNSkK2DHhwkLTWl0sewXsoRjw5bN8DJLBprxuf6JQas+EpsEnSC4ToquOh+MQ2ACCvqlYIJjv3LKIxDQi+Yi+Ksz5+KKdP6BH+DBaD5Nxpz+3rjSzhlXOgCcm5YUjSyX6iJBXZpzBb3Dn9Og2BVLFgctDlPNVqqoi7+i86yAl2DXZuGUggaLQDvcOARtzuTQRBZYaC7W4gporNUScG0oHIwO81cWwAic2KlVoMpyj+DICSVgNU8qQrKq+VWhqhdjHDU1tVyETxZQRXNvmejYqLqsszWEd+rUe+KB0dERyAP+sY89y0i52ddefUMeXgX+YlBuR0EtpnoTCfBXl0PAHLyzbftWmPC9LN2wgpaX25cClIJm0ZFgyStUL1+8YAB+MDsaDh+KS20S28h1AG7AEZ44ZnRyYnJCvbyNIoQiJwZ6JPIwwio5CUWNpIZRtvLKTEZ1DfWW7zqmXCxhrVH/ZAyLLlsaR4y4jpNHKi+JU9q0JsSiIzR2OSZLyxeVOfQM5J6eXrqBFdDAFsqgCF1CiOFUtXOP3n3VjKoOh8WIcMAWX8kXnzlbfNZhQJScIKjRizzQkCcRgmreGBBsRADIlEEeZbGObkuEPIDpK6zAkRkoyukTyHC20lBBiaoD2S/mqMiL/Ip7obdgJosDmdLCFm8plT/pDzR8VZHMiQNIYzUyGJYQXOmUgeATH0JjPRKBVRzm6uXSz549j3ZddvqpKTdg5IBpMDVJsqX+JFcPpRC9JXFZMyEwZEEJFELUglIZMFsihkjEHnCgpIhfiT5BBoFy4gb4xKQKfCARQFLsXlpWglIra2SQ6JcqwgdMlSqOXnzwrrhPkCIXU5t+0e5RoyqwyFfcZgs+aY6xSyMIFDWDj3qpBF2FvFLAKqU6D/Q8qMaoVGMSBBK8+MVMuKkIkPSkgunXVSPgy+nPBAQH0I4hSe7ERANR4VF7yI8GeCBtbCPpmWqmZljOvI2AVJDxYBB0SW50xEQM6UZ8Zo6CflfMxm4qLhpfzOmJJukTFcmbXTAEZEURNZDXxs2B4706AzwFSRtxYfwo37x5CyEamMSauvqVennQ0KhZd2FRUr8dTvrii8tNJM9OTfNi0cO+2QHPquVLLfMozg4QVAdd12dHjhrhWV9XN2hraXun5uralcsm+/Y9sBfNTXa15i1ULLIl3KIFnLKAft0v/uIXEoZcGL4b8dV/dcsbPtASnGHbUMU43ty7PDwvGZMQnyWEwg2cVRwTxLIE84UvfIGWODjInwYzOA7hr84DJYAqfkLVAMns9ORbb71F5LxMxeIlgNveZKW1wYUwlWyPgXNcAdeToSXw0RSRl1bUxIg1lHoyFIL9qK7vVszE8RRmCLJJ9jxLPnY/EEIEzWpOOcW48jTU1YLGl8AfziRiSSiuLllaWbYo9ktpsZBP6MAiwSdNnXZCE2jDsRTRp03V7757Ai1WZ9XW1zXW1buEJU4Nvxv7fhz/eu3ylT379vL+FncZG167YWNPrxMqY1+1Fk574Lx5iz1+6Zd+SeBIXzW6WCqKRY7+GyBwo/EaCaKXSDRaFHkw6rXXXpPB3DH20kO/toV8+6VvkZceKSDOv8+sspo+MACltLaUHmRKmFnj1PXrNyyQPXvmdNWKyt07dxiRNPbCUYzGsf01H3/hRSHUe6fOnDl7/p2jbzsFqLGxyUbnxx89QClsB3eX8eBA8c2b7VwEVxy3nsRIn9lJB5/FNWS0Tn8JP6GEcMRiI0VCFI1ixpygdGPktMjKAeYKT20n5useUCSZ/UpHe0gquyteAyMbGV29cslX/QHMPHr0bd0A3QO0e3gBZkjiDFl14FiWarGf/JTNnwxQNmgcPXqUesijUpJ94YUXACfc8ooKmBh80kxi+JtvvonJds+ADFvI8zWaLqf8UmaIXb5wsfnaFZt3U4NBEIq4qg//3VDKRhRUO8MBR40yLKtc2riq8b2zZ/EKAmBqqH7lV37FUa1EZnUWZ2I5qHjlX/7Lf3l7aObi9SMJTgLl3TE8aheJgnzPExX9hCd54Q9nyKXf9xIV/S09CbLf9PzNoCZ8QFDce3pxaVcOmpHwCJzTs1BgQGGp/UjayIW8xjXrCfrS+TPNV96rXLJIPt0wkXUsvr87J5IuLlFaz8pwuoH8fEvqcTmGwSnndCxZxHyPfcZO4jEsZfGN+75MNVg+LpNBETjl2Wbg8mFQtabRLMUxfBl+MYznfHdwQnAW4rm/IQ4O8p/VIvPZnmFePOIhqqtSEORUY+TPbCEl+o25C+TrfUR2SmAUK+YCeDlH6jhxtszYwfzCpQsXTUDaQ29/0I3rt+hqrpXlG3kPSyXBtzAbZ3xSL/uFAy1lJnryzz33HG8jGOI2WTjr8JXDZ0c8iXbBcnleBapdXZ18JlSpPVVXyhCPP7l9lu6FsACXU129/f1OZtQ6sC/kyMDiuHduVojADDlP6HlhLI5Bu7NQIOTllvk9MwCqNqABJZ6B7WsLeBKIwV+jzPYf3f94Cv2BhRVL14KwMgufVIp2+RFoUB8+n/3sZ82c898WveAG00v8xxDGCKBhJuxXl6o524ce2tfeep2x8zNPPvmkKkDDEPigHb1WEwMClHQjRxZFOJaAP4Q2PmhNFOSCABdA8yQGhpQ1fKBV0jRs27K5t7vT8VI8g2xWKAAlg5bCNkXsUhCG2JhwkOiiCHDULg8E5PEV94zfoyIL72LltHS0a1Doy5SE8RgZtZjCvS5Gb0inr/cW7kEjVjdM6A4tvnTpivihoanhVj/N6tEM7X3wIXkM7pK+dUcwTH4yIYAPOE8BUCobVYGJl4SGRAwnEb9cH43ieCHM+6kFbqBRA5jIg/Mk7qsHLclwgCLo7AAwi+Nj+MmDCg+YOCMbJmgBlaVdOEwVN27YACtqrEZ4SgGHPgCbIOCwgoCACY4XOaEhkQaCI4U4VI0EEleciDEKtj7ZLGdJCoC+pzwMH8MxEOG6jp0dcRqStfLuw161qmndmvWCAXCI1ZijTxDAKL+KGy/2i5Nw8AK+j3ISHxL8Yh12aUNtGoK/KjxQpQCQhJJzy/yJOionLgJfNugloeAAK/AVcOl26gurUma1AIUJivskPwjI9A6yB9VmALZt3a4jDz3pyFSFh9MAREOsrNDFL88AGgYaViZcjCVKlWoHgUoNPXJUCojiKFVKpTiPGxk/i5JoVOQBzZ8y+PVIAVMRE7+qJne/oPlNX+Uka34PM4lMZqRRrfyfeXwDASggn7UQOHL8eIR0Tzx1UPnLV6+IWXkcbgj2Rt/PnTmfOr6anoHBWD+HEYRhHhOD6hqaKK7LhpiHjhZfV17CfsPfadxbW29aRG1MAhc0IpBQxaaNW7hdHBb89d8eGp+egQZKjOlAEa46AHz6ciXLrCvNmgEb4rI1fJlnnLEPQ7oQ360FzpHUYtnKaSBKU6C1c+7ba6+8+qOXfywUE/kZt4CMF8M5wl3ek5aAzIyJiltva7uBWKyhQx52S8w0DI0kR0h+sYtIUOoX2j6xMdGYR18WP/k1Qk16ZjIhdXUQJZuGRBE4+JPUdmzbQjaXr16liNj78ssvW4xOChZAQ9LyfaEeOB5Op7O72zGeyvJcmcSjCdHbZV22XoHjgSHJc2l0QDvG8yLQQ0dNr0PMAJg81mpjLz3T1ZRCdkBRjkWLl7kRmAoikxMhR2XRy1njCfxVwerQ7k9xrSPVrPCwkXloeNh0zWaBu+OlLapzOKmG2WK72lopevE3Wlq6usWO1D7GGISGlBg3KJi6kvHgMymw0kQyDTHunoJF7NJySOe/tCWAwBYymkwy4qb9SV6CEilmnKkrGyOLrds2g2CSN+k9SqkfyByHiVvjZCBbsdB6s/XKpUvWs7rpue9239T4hLtMy4rLVq1ewyNaFrWojBq0XrtyNYotq9y8ZaNFCy4n6hsYrK6p2rrVGoN+y47jlMxYemIH0jJ9qvnZOPGXhsAKXaSQelNIxkYiRjivSls0zBJ37NohkXoTDYRDXsPD9MGfshGEnqceI76hHf8ddAgseelQnTx5nLzI6Nd//dctguJZdNKIjzJgNebYXqIDYPQWz3EASnojNF8DA77WS/OjOAtNNzc/+eTjzZcvCSw6e7oVN3UOEzd1c2c2usG/tb1NvSPDsfyJtnzlK195+CFLjbeqGtrU3svyZct8dc+oh6SgavugFxX55QbGxkf0Zem/dVb/4T/8B/r/B3/wB3jIuhk1ef3whz+GmyhqYHD6pR8c7x2affDx505eaF63Zc+0q375bofeOP/SjtnoBvgvTs4xr/gTlgAR+kc+OC89/d77gl3pT34S5/1K8dyXM/dnrmxKkVNKlj+cNdMDxIvWAoFJM2XwpPzpN/dn7uWvSk8Z4GRxfhauR6B8x5g+XjizvyB/fGTUje2l6pybWVRWBIPLl86dOfH21Eh3/h3+1sEy7HXG5V72AwstZmemAxXzBguFWOvAzXTJo0Ef2DIMA/zOn7EWxWqgWH+4cNedSmqSqNXxp+EJ40v2CInRY32PdiBaWY45mlVL+QN6HgxNTUTAESFHHMh7t7gsRlXxh5vKUmOAHOtoEQgooszSJYJQbKdB9uRnlwPoDtADq4AcsO84ikcOHOB/9Aqc//Lww/uvXr08OtIveOXNuFMNK4tjBQI46/p4idbWtjRQxxCeeeYZPurqpcvqgjpPQkVh9e7pU6+++qopMr6oae0aOaHEjlzhxDFYsmjXO1TlpPzCL+5CfKMWls5g2RH+aDcFE/hgi4+GWU6WqzUEStxA8zkNBLIgrPCC5NTo4GC7G82WLTFYID97NOXIHuXBBvss5eScORyuFLsMwfEY0OM9tG78iSIsl9apVC2sEiZ+IaPnn0BpO4zswASHgfKVQ+DwkWDaGa/sOtv7wIPUAGYu8DYxnyIEYnJoH3pVpCyGwEEbZITCJ4dVmMd2xSf+4zMy7fbhD+Gsw4NjakcX15FaT7pEX6IVd0NFNheEsfwqjuEnMieyMUHoeTQxy6urnQRhpxxfBO0MgcWWgnI1jsP2JyYgMyay0rW7lcud+aFeoT+56DlS84zVk84iJzh71W7e7DCgpcnWNeJLbSRz9pH+EgVwYhLfSy4sYteeveBDlF7JBgjCuXQcZuM4DH8VeWQmUwiIyKkHvsEW/rLJjwMYJY/iiIUDhDFTRdQGEGU9UVfmUtipukCTqAi9Eh7QBKCU9QkoqgU4cYslampjdYOqZcZ/pcABjZJ7UVB67k/YSqeTPvHbkKQ2qGM1lIEU6BJhyQ89tJiWdVC0JsnSWSt/FIcPgFhkBoDIQEgF0SduxsPKZcvBB1y6cyASXdB2tERGUSzZkggxmNC+qqpYLSMRgU6dgQPa2WBdQ6yhgF4YUUF0FfyJ5KLiEonQky4RKIJWCjPVCH9ok44/faInGic4g6kWnEeCF/VioEQPrBTR6uEeATmYQEZVKEvl1JJE7BOASPNAHgNVJ48IS4o86RcyivA//oQwDD0yKw551cmJgZ4EBEoeGRJPfPWkihT32ISDmXCW6FMSKGheAPRIV4WcKUORYUVvGKHYnYEYfUQtf2HBtxTr7YxcuiFV1JUFK1O8JH5hBz3AKYCoL4SUirO6nAJRWmqrhyozqc801sdZB3SRRA0sWRrh1JfLly8iwcwjhbhy5RqNtFdJv8UIQWVN7eIKh6IMc0tRatkSPQiTMu5ywiznDRKe2QAUJpPQ07MGcBTNM7E00zRlKNlwRHiuKYDDxjvrt+/YvHRZBQE4/wd6S4eWtre3aiaNWW/ctB5TkMBDmdk4c+Y0+yEnDLElAD54JdqmqdQXfI4J/GTVCkIJFYSHp7yeFkLIxVkoyTD4WXDk0Xjgj4IGgPkONxioQhRLKiYW5RQ+KvL1r/8RJvtqOHxxXIy2FJlsNVkXoWyyF81e6eHB+TvTanQepbmRiVErRysARBrmBFaZZ1fWAyWEq5oEK6uWQRVXlUWOd5mXLl22qDyYQ5S8oAkwcocMSqXIgyEwkSFJ3FfsovGUEslW+Gzdts2lX7y8sJs3F00i9umnn+Ym5OFzqTg3p29gqIE5aFdef/313/qt37KuzFej0QDCJAXEGgD2DA6EqZkz0MygGW/m7sHHCi/4hlKRq184+BPbqfGzzz7LifOhaISnDH4psDFstTjVHnuJg62pESi9waply3HDorAajdiTT7AmZiyggbkZJ7ylSNbCol13YFVD/Zb16w1I09g3X7G+f5mru6wFchjUmdOnNAxEUFsXA3hYZwBhYnpiZiK61hp+VJMCNeOR2TD74taZKG9CwbSIkMQNzhrneRniRqmc8mO+bFBCb5oxsBRKEI9XQ67Kzm5U4Y9EyaoWNOA2PVGW+tEuwqKxahe54dLGjRug5CsvBhpQTveDAClr5gGBbYJ5/PjJ9evWYBO3AJQlxRA2cW9DoaadjGTDSYImfRuLaeOmTRvojDz4zFEoBU/T+gJQyEPSIN/unbuUQo41V7ym90cfe4zK2eet+/dLv/LLqrOegezgbMzSBJGy3guKlmpXYk16LJuYM8ZtyBlFulsq/Ws9UeqjnnvTc+9eqMFHZf9rp4ED2r0PEH8D4AlOKgtaeolEXYgMU6vhc8iJSyzLvZtXeCc/z9rOecOGC7M1DasPPP3ckVe/Nz+V7yB/6+cpv1Az21LL8p2zGZDihl/TADpaOlju2ouhovniu4XCGcy3Jy8vjhpeMHSfH5eMKmHVT3TE3AITCcb3s5hfd6KgaCGCiwxb6kcJdaYU8VO4YEA0G8CHQhbvQl5OOZIX8stOJUrJYGRw9BjQ7JucfpyqVphn6MTQT/XyZbpWbv+1FV8z3ZStu+MWPvuZF62i5FI4zMcff5KhsTh+kuHQWOrKEfFXFJtCcjjDtwet9nYQNW1n9fRQZgM9cnIUVJTJK0ix7Yjj9xLOzE26RpDZwpk5ePdJOrX3go3gQFxHB0UyoEO9mlf+Vjb8kZNzY7/S/akKltgWxxSOP/30k7jBGAX3biSEhoqYOVAe+f0pA/w3b9oKAU0SMiFv4MCn5HlwA9gEh8fQGxeF2zLnKwSctilEs3cTH9DOBVklb3SjekXTZz/7GUwPjt+9c73lWiaJCNCxDhDbmtCCQIZvV4+2DAlchIp4m/a2VjyH4Y9+9CPpwjifkIZwrSSHr2HyVQrax0aGueL+Ptfe9mIXhLEdFYRFfLKJtrksDkTm1WvWWqOYX1DiWmiCQDWUcIxekYU5DcQCjmnm0qEKbQej7di10+4Rg2PCj/4+J2pYfxKLPdw/wAMbcuLEbnX36gmItB0Ncu7CeTAhgCFDI51cNOepxXH5dHiwY8ehh3z4+1NZokl/KgIfBMINKygP+PhM9DybT5DEAU44ZcBAZSEJ7VQjzOWBOcXADUj6tHRJCBFwagOId2xBu2FZ9eISJoODb5D02ARMXalNTlVUpCD9lN+jbAg023lMUhCGKgRUiqgYssmiHaCUwi7YkosGWmtSUV5m5cGSRe4KMCcTIXvScwKiSAqqmrgJC9/saPW1tLYUBzR8YSwrYB1nNqLFEnG0EApKvXjgBh8NPdukwygyDEcKEIAV6wPfu/zFpeXeoadIUXHsysMTrAZZ2UQjzYEe/ijia+Ktr1a2k6AUhCeq5ZcHx9AofkjMB1xFMgzOxj3KqpBHTlSQEWhAaRORQ6CUXDouqVFBv4QomyLJur0kcQCORr+Ke5RCCLDIV8qLRwrpqCLR6FOCmYAba5GuIDiqkDMVkU0RtchGc+QBX0X5/9s//w2kyooeQ+9SrXqiiH/xne/5/OhjBziRn/vZz/34xz9momgwx8CVUCk5mRMCKqzQCdruWnxJfHoU2f7VuAZLZc5TnJwYp0PGRGLtyvK4iPH8+bOiKDEZKTp+QZCn54mbRpZudptktBJO+GdkpUCon7jTWF9PG4z0Iwx5NN6dgeq1+ASFtNRvTW01p0Mpb9yIwQ9MxhqXFXhgS/z+NJTrV+3ie0GMbUmEAU9rDMRAXhxSRv9UQbdEot09/Ul71EucGIqJTBcTqS/cYCKdZkBGHmZPq5g0dtM5XJVTFeI/obzoh7Lyg7/2a79GifUBOm7eNC5iLkItFFb0Rl2wCHD4CLlABhPO8pcYccm/Cw7zo1g25Pl1SwApwIGMSUe9pAl/eIqQoMcW0CK0wgFc0s8hOAAhOZ6F9UxXNjUSgdWFyKfQ3sH0HlqSPQwDLR6QEa46Gz8s6Sktj4UiaFSLB/5aSjjLQ5RGHXzFfyZENI5Hy0QTy8ZYiLFqANWijcGrpLuQhyf4fmUjGp/wzRiwbPgANzyUDc64jRY54Ux8WzZtpb3qolpUHaVi7mvNVxTheoSnNCT5WWUVMTJtxAIEB7gRa0enaw3iqAqjNiSCHzyFEUq9KlUsXbS0qXH17f4Bum2hGvFZZmbFwqc+82lrnBiiIoxITrMHyFTwVlcvCdJAwAXWNAS3Ea52TEUj2jGfQ9RVwwqrWTGQBPETu4jAgwquE7YSVW1IHodxBo02ASMHWCQYZfHwR1LEx8nIDftJp0siaU6svGyRxky9WEptTCaozv4E/dg33nhDLfDkEPTQRPkIefqpJ3gAKqdzFZej9PTs3fsgVUephwnDSsRg5kp3TqcOh4kengSkFn2b1qxDaEaFZ+AH9HMe3LuPlnoE7pZSOsuL1mLIn/zJf7KQ4PkXXyAsSwQh9md//jXL4aiZWvjfy1c7fnzobM/t2X2PH3zvSuumHQ/OFpTeyc6tdz7mR80A4DE2xJPecn/nXtLX3G8u/b4X7E1AKD/Mw7iy575suT/vq1FeKdnv+0EtIDJjNWJp8n0I5ODc95L7M+XP/Zle4OQg1DRiqgMg/kZ3HIyT3RRjHpXrLHP1kdZElJB/t6Jw4eK7b/e0Xevuar8zZyJCGzOxoEOwMJut0NGXcFB9Uf6CVlNMX2CZ/tScGDcW5FjqKdzW37bihzbxhkabgzPR8oqpYoSpOD+vVHsU94zFEgUUxyxBDGYZ+MjGqLK2jNfCGcaimMdOKhDkYUF+A1z2+ASIR+L7zJTT9oUQLjpj6ZLhMrsazEQ4RMFgoMU/m7ZvXdXYZK53YHDYlVKuBbBmnfIzMfbF32qAjFbAnBnSW8rMDGmjfrgMv/Ubv8lzOgyDhXK2dP7S5SteZJPHQXbckRlypmQ3msQ4aX5+gS2za2bCZwKSPBuwkAeBm6LPGdr5TvBWNR0A01d2ikwpXoTO8nCe0vlAMDHE+Jx79/RAuCmeRCnOgfmzNWyBhlEPrtK0pxeY79yxW28HDpYM6dvLw2HCRB7tOLBYqy4P+L6SkmX5WbwemzuNU1j2E+wqi0MjmPMjjzyMBC2Mdzbe0d7OC51575wihrc4EIOkPACHz/8bzYAeJEHQCbl27conPv7i6tWr+C6DAiIK0TMqEIj5PBXc0Es0UkAwVWgJkOgcJ9E+NTvHv+ngEZOxf57ESTuybduxXfMKc1GDG064Zg+GQADh7JUUrN6UKEWj7FKFVIuvDasaySIUeHbaupRwgNn2Ytm0j+IErnvHjp36D8avuUEdY0iaI+WdHt7/qCEYqGJ7ukLxZkcn3HzihNUF2/iUPYROYQgULRiiag5NFdoCqiLFJy/KkojayVR+kpKeyEGRd7rhFzR6ArCrk6UonhiurET5JZIXhSQsAsJSwDUll69cBRmSMiSUVAGy2MCLghL9ekcXvwR/3FNEdbJJVFAVMiT0tBfgC0ggYKJvZmqMT9B8yZOCAQzEB5EMC9IwAejx7nBnd/vY5oEhtJEa2KiDtGQgVglhkbl6nGQdIMCZkmzatBV6PkFmbv4uI9UK+1pWEetbVBpcKoijQaBKmpYkoQj+aPcLbX/KBgIBISFRhFIP0m4Phvmr0aesurhXAbZSEsdoC6etODjB7fz3r5CinyDAX3EYQhtRAkgiYK0+af1DbyfC2+MVnD1S/Am4FFipAhyPd4iB5mvivLq85B5/5h6JcsrvoTnSU0G/+OBP6VBKckzylaIuv0VaenWjkH7QEqkkgfiPfexj0GLhmKiL5p0fcZ6JPaZETk2pF1gK8q0wcPgRUttvxrHHGLtx82bQqiuX8esrqpdn/bF5Z36DT3AkYaheqA24TzivB+uTJUv7H3nIODHpjI+PDt0ePnb8aFvrTQW7OjugW7uiBp40BnC0sZ++nl58NDksxQA/wezcud1YMtWhf+MT1nKPVFU5EKKGSJxXYr8ZwWlBcNbGJgenEDP1VYQTFItrEvgy/Q9rHNl8SWl0D4iEnvHIgjnM4QIUp3AeHPAngSUFxRYYehcqQUDzAD6sRK7kwU/RHoukFVQpsJbrHD78tkAqRl8m4vxNvklBtZOlLpCxGS+oABPaI2Ni/WWUjFC6Ozqp9bYt2yFMm0PwRsEy7cFMQpFC4dQoPwwRAiuTBKjwDrKIEaVASYenKqyASwqEEJVKRClVpiSKpE8Z2LiG2hyoh9SIXgYEIkrDYMKEkUu0K5cNYB1BY4WKHDgtBNdCkJciX/rSl8w7sw2EwwEnkzj8IoHW4oNPhKIiEuRw4QMyVyJmBVx8r52jn8wMnxGrFCfCWbtEgjJnjeXt7//gu/SkubmFIJSViM9AOeIGEOvltMi2qXBiWKqszDiZ7fXXw415Vdt+GlbWjQ2NiTJ0CJSFGAZoh/TrNJ+bt211Eo6rsHDG9j4ZvCwqdRSaPljoGxGTLIQVxAqJ6GWWTEZrLcImaIyiDISCqCQyQLCOBLGdqyUXCJMF/GVgAkphF7S5aGhHDzyOextWkOCkkDi5sBd1WTCPjZSWcFVKTPpgyaOBxtlphlm6kcKkyVhB7cXl8A8DrK0FEzJEptsASULkJXQSfud3fsfcFJi0S2cAaXq5siGZXrmqDYbWTpAa+yXckNT8jDbAywoxxJkzKgWZ+GB+/txFKb/5m78JbaEgkYlF9ux9PP/wWWQi0K8QNhvgiGHgdBw+lt7zhAP9b3yQ/N8I4a8qDnJ6/qoM/2fScQGQD+UUH2uFYwDAIqj0UANSwC8npjihp7CiyOKcyZmp/Y89c6ao2Dqz0aEpZcpKKhaKTY4WWQduKX00K9G4ROtiGYYtuMxQ009GtLGwLM5EF7wbtdfoRp2xZMhvTDGQiQN+LMHXrMWU7fycqkmzwqmhWsrIAL+IKmCZPbG+k9HdjVlsQVxIOWmdrxRGTsuEspYxvFxgVZA/5dyhjEY/Gcj4gZtLxJmS8QzKWbuybqC9ve1mp2V7jIWXoGYAsjJ28cTjT9FM6krHDCcnV+NP8PWBha1sxMJOVqOtpNvYiHwZGItjfHxtvdGOvRs3b7JM3Il24lpgqT0IaoEM/Km0d3bHUTNexQEJOMPDEOY9IKYUW0AmDBkjA2duTEx+RsddH37jjcaGOm7tzTfflIhABmWwQ0WKs0TmBn+ZbWk48vY7MDFi6pdPwEn0whOxMhw+fFhkBogBGoQnhvjlCeEJASfLmZHTjIZoLOy6c+cLX/i8glYfcdSCV72p2pUrtm3ZAogLs/hkkFEnskcOduE87vHMaeBJE+zY3wOP7neDkA1LMttKi5my8a4iOSzSkHHdEEA4z2aEraauxs4WpPFdlcUlmEmxZfjXf/RlbrBp1eonnnrSshd3o2Om4VczhPIABSs8VEooji3+RBteUWCNr1+s9ssNipO1mZxS3aI6c+k2H/oEQxwzByLWt2ZEZ8moosXADqriqI2/iBYU0ZCpC1tcoOGFWnLsmEwKqkaCFN4b/iqCAJiEhUZOngjkFBKAQ4vwnLOV2VeYY7iv3rGIcDFWcTRKBwFY0g9/ng3VY4gMEJDToxT8peA5WfjFZDDxXLOrOOWUh+LhAPg+QQCLpIAMGjyxUV1Ju2QGHBWKywZVf5IaFdWWwUoGTLYl0/hC240WqgUmxwAg5tAxXQLUyQN43cqGpHL6y0ajnJYBDcRSMwaCItmwK5EMDpRkQIUgDX/A1GJqp9g4NcMWfDAggTqchIzDvJUFx5/cEVqgDUP6D6y2MvU5kYMK6VCSDhTOONpMKbbmoYQ+ge+rR6W4BBkF1SI9thzl2/sXj+pSYhIQ5rAIAFHqXQZfhc2CN0A8qFBEBtBg7l2KR41JBOkrKeCAPH69Yz6EgVKLPz2yZYqKQzEy7s+UDlTKlr4mCFIUB8SfKpI59gBgB2JQaw1DZo2VpO5AGLw+fSYucrL6TQbFGIMRa8fFwFsg1dzSqjLmB5YNOtRi6ZJlpl+JCjRuwlIRJw+JPyir8XgrBNTIsyiL3TTVAW1cicUXAGJIYVGJyEm65kL3z7Fw/FFHR2dPT/f5c+eY5fCQznrEMbSKBdrpa29Axovo8IknUIiuTF2qvVv1ztrxmRuiYZjoEhrpINADx42h0c5I8QodhQmF9okAOGgYEowOAMvCL0RJ53RMCxIk6WIxPeOzpENGRd6BxSvI4LuvoijZwJQoj5MWxceiTwzBIl+lUw5eg3bSPAagLjZpjCQJ3uiUgzuBku3M2bOPPrbfyhRaJcVBk5Cxc0BBK2y1UgJciK1bvYawhOt6ViJaMZZhBpLCBLxy1ipQCM+EArWYsmSxnAK+GTRRrwdi/Be9Bxxb/OJ50k72KQPf5750squuqZWCZACBBcdv0kK/6jK0TIuAwkNbrPCZKJkT9mbj03RyhmpZFcpHwIEyyI8/sLVRTSFwpKiFLSXLRB4BYTg+qJHuaXgcJusCLw+JwAc03NZeyiaDteZCWzaPNFXQE72Lpvo6ghNVAKLxsBgU/5kJQeNkXPsl0CkoJpfYIFhQOD48aZ1bOv1JHMVYIeBUIBI0+2YiVhwgSnD6k4pgkj8fDQOYalEvPiPKu0/Jp/j1p14EtdRU796zV2a6im+Q1NLQFnmQoCDm0EyfMBCNqrZADub6RRL1mfGH4vlkMBR/SJDoOR3pBul/9md/XlPNezB5g39SnnnmGZKFoVIopXViIJu8kQOIEOdrX/uaiRc8T3xLkQp5kR07NRoChz/87//73/iN35CiFa9vaLD0jiz+6T/9p9ycSMXWE4Q/+MBeVi+a4cQd9kZ50KiKxqZYV33pyhXyfe655/HcLT+4ZNOepnFlfR0mCP9Ik8Tn7pT++bff7Owff+DAwSttvStXbypevHwuz8GRzvwXqMYwdRaxxkVg/srC3yyATSHsB79g5h6QvaffXGIuJZfuhZlIz4wjfrynlFTqPjgpQ/p0769xHPRitfzyMEnClUHiR8K5FwEZcn/mYN5bbzYDYDg9rkEQr/s/uyE4UMVtXsXALb7oGFgqYyNVoWVU7shbsfTihfdef+27DnZeVG4BxIjDPwscrzM7J0AXBZkBsPomX9RRUixadz+YrcBoL41zCAybicNdKkbIMZymDtTNTMV4hD0Azh51EpC5Hr010T5UiosQW1BeEiM4sVPLKFS2gTf2IBvP9wCXjV1p4ximKjyg+eI3/NoHjaIz6cbHJlIfZHrGJWD5YiLHDmnIYtmSkygdHBsLjMI/Ox380UcfOfTGa1u2xOkOPI9mjqkaj+DfIIOAc+fPCN3IgmjYmq/WNTEWV8ILAcVFfJcxUnpeVVUN84uXr9LSV155jc063QCEbVt3QA+rWVwycwZL7RmOPxmOtoPE0eKXQ/Oi38sc+EyBMgP0q/ZgQ0EB2/fJ+IJeOkO2bOaF559hjCxLLVoBhHgHhxX704FjcMYicT/j4tv5GVXDh5eQmZFyCywR8lRCq6cKkCVys2xcsKG4Nbr8sybJiS+NjXWaUU7A0QlYwTdika4UvsFwcizOUD586G1DAE89FV2prq5uGAr99R+MoElxUwFuyCbOdo4sGXILyYf4yu9BkvtCSApF/MkuZIDV1i2bRkdFS/lZT2YXtqxdt+Hf/bt/9+67p194/sX1GzfJyaeZNcJ8AjKIZhm0svhDpihy8opf65O1BRwLr+WyLDQCjkbb58JnlsQsQVWV3Yyxec+uBu04b2weifPp7uqR6LgIgxcg4xvI5i7U7h22fnWAsevqtWZhj6rpg5JQIgWk0QHLmAx5ceMaEsJKVk8lMr8dK9dzQk8aTgnJCyh4arxohXfZsMsnENTrRbcaRbCVGRoqElTwyRk5VX7hoBSDUty7JUDopQ8Spajdp0zuMYIJZ2Vlg7+yfkEDP3X50CKnNkXrAwFWgxb1guAXMkZ7bSWyBAjkTEWjX4ou+NMEhIBAzR5/7EkAwTEY66rKpqZGyPjE40j0yWS1BeZkbZgYaQrCmWIDZRMwIWosoqM1HWsHhCWY4/QSQoGGUo6/UqMHnvZBUirF2AgTQCCimDZCYEh5oO2rd1QkivSWgSUFKSAwQJlxg7ZgvuqQgEU4g+EZsIi85QEfDnJiDrAQkF914KgIFdhi+DtUKlsj5BOq/SmDX5h7vKc/YSVRBn+C71EpOCqVLVQuL9a24Y/HVylkhxjIy+mhIaiAhoqSxOEDQ9z2SzR8Tv7/7Tc+TbkhhFT7ZTHL0gx6uWRZpWIuAlPljZY2DMJlq5LdtsUMdIVhZq2VUbqLFy/TAysi5FmyOBTatNqGDeu15WS5fFkcvAWUgz6rqgMzTZ5f3KSsgjFxnnWK2IotMFteVWklum03zpjXn8QFVMHbcDHlaGuNJeYsLak4Ut3t5eYR6sKVaG1gy7SMHJDBAw/s5t2shZCIZbhPSJa4+PUn+kVdIicdAAPVBw8eVIuysM16rpZMxelOtSvrk5CwSHUeSOIVzooveT0vaEE1JnAZ1BRkksMN9RKSgqojDBmSfj/zzDM4rDoZsIJs1CiWAkeGYGDmsjUVWg5sLC8rwSUrodV1+eqlvoFbJKf1qigrx4os0C92xy23bsgKZ3o6e9SF+fCsql4KJUzDYU6Zjm7fuRPmMIQnGuGGQAoBHy8SNeSA4JIUxEKSDrEKn+AGc9rmBWLWyVhg4AhebMFeApWuIqWSGUCA6JkQ5dHiYpdoAS2Ulf1ADDSC07ga30WRZsZXFTFRSCIfMhy3sXNw4E9kKsIfiepKGMIHEAhfuHDJXSSifOQAjhzStMpL04jJ/uzp7RLg+hOEV175sWz1tSstc6fS9fV1JGUfEg+PGThDHAhF2uDtYZdbA+VQlPqVDfqzxOrQD56I4Va7oqJmhbFAbQ9xuMdKjLt9106+Xo1dbZ1+QcZwyqxGvAUK4VIQRUwwx0xuhVi/+70f4IP8gPilxooDRTFQhDnYgnvJqqmrey2Qk8xB7wUoaqNj41gnIT42ZhMOO3ESl0y0aiyd48kb/sf/+B/JNGkaXWX49AfJ6JUTaUxDPKHeL37xi1itq6nJp4EwV5DTIIIjR97SQzABb3UBHOBvhkpOc1xkiija1dEe+ylLi4qNVooMhFDvnT5NDwFBlzBVoPDWkSN/+Id/KCD8N//m37z4iY87AMSdA/yaI71AIAv1Yp37tb/20hvtvWN7Hn3yetfAiob1pUtXOGzMtms2po1zysz7HYAs/P0bdwCIhog9977ARAohJml6Tyn3ZfOnR7b0ct/vR3YAkm6knKnGe+v9yPQc2Hvzx2E96cR9n4OE6ABEwJ+fOgDEGO299TkZCXpIdyIMnxw32dbRdvXtwz8Yut1ZubQ4785ksfNFHCl9R/iub2X03T4BA17O27GyyFlZ2cyygD47soN2O4TAWqBMWOq1dDMmrGJKIW4hCL7Z0KkDoDNgP4EjgAITIX+MZrqxGRjJjgSMCXRSUxZeib1Qjc9ZQyhFuidKJbOKM4fohuOLs0lznRFbzehNqW2Id6yvskRIzu07d1NsYwGOKrp48YKur4lHYys62MZNVAeguFbkl+ALBXgh5rB9c6xbszGd9T377MdYblt264v1HbT0k5/+7Je//GWtGOXnEHQGNESgKW44H7Ysi6kyWA6QzjN2MKWoheBkkFMehgABhLBliayPQxNi6kjzePBUr/mHR/Y/tGPbVgs7zTMgCg+5WXjCkO9VhWEL6QwK/AcffFhFYm6/UOJJZFYFUJhsp5kq+HbOmbuWiAROEi3MFp6W4PKu5t61oWyWECCpdQXqZkcbi+YlYD43HSOmjgHlmjIOb2MlgvU33ngDPhZjpuEDDkfxWJPZ28VNccLq4vE4E1UTsdohAwIuaSv9KdGIoe1VHPi5cxewy3HcGpf//P/5s8uXrz524HHdUStVOWeHATrvVRHrCaHkmlG44TlQEg3y8orOmsyCkDpMc84ekjFW7XojTrjWXAoQshUB/ZoACBj7gPCtvgFMwJOzZ86JnYDFbTB1aXC4sztmQtTI5V6+2ixlLrxUPEr5JUqZaa8/ySXRC0gyQ6AQhf9aSYTz1V4kyiwd+ZAkO0B8wuTk9oGFNlBSQHZoqTxwUBHhyuzXw7ETN6XyKXEY+cAaEfc1Y0sMSyUcVASUdFX4VZ10X9Ulp3dfQaNjGnFsoRJJ/QgRLShSESBTrlVdUm4NFepJHAQ6JlKnxjopaqcMGhri0EasX7fxgb27HdttgYA/6aQROm0QHECjrRoITSJ8UEpA4NPMvr7bYFI2TNDJR1oi0A2C0ANEpbGNKRu2l9LQuIrGpjw+IQ3OKFIFfdOYskcp4IPpl0CRTBCJq5o/aPuEA0iWE7EysDiIAejIUX/CzTuUaI5sgEfTnMXZakcRkjFKhiy0eH+Mn4gBl9mjONl5Sb9e0ie1eACR4gUc76kgicBHuoqSkvhzOJvXghIOqA7aXuDMzyQ4ckoBx5+qyP/6//7PMULgQoldaACE5c6E52a7kERBvmpiT3c2aGpbwQO7dk6Mj7o+AzOd0EIA12+0oe3y5Sto2Lh5IxaolfszXWSsWkA2NRHrpYwipDbRPmiuAQfhbegWp2i72wOswXGnr6qXLndcBT7ieIk8cE08hS0p+JN70gV0ATjMYw1qtlGS8KimDSSBcKbr6VSpdOZDCnQwy5IYfGGD4Ohocuvt7R1GVshYKYj5il6j5m40UyMv4wQ9muSBBj6KSxAo+sEfGkm3WIUIG+YyQIZxAivW0R8QzOE4YoEiOYoO8xdffJHBY2miC42CCvPbdJE7sGgJbs8+ezCQWbxELUeOvvVf/st/2bJx07qNGx559OHrLS3Hjx1TEfgifl4HfKM4zHJt02pOMx3iZvDHcL5AjVKJxmTu6ukRCFqfwwDcloJk1BGN1hJnMDMuFpiPqXNPMhWYaBcF7sSEw6rAZHEerFgID+sSANaCXjzx0DzZsAUEzRjN84Ih8uAAnAVzeMXw6BsIhIUEBWXTB4AYjlFB/PGruBWoGIv5uAFzFSEWDxWBoQw0De1EIDy1uPOOo80LYtrOwhVdYtmQJhTeuHG9XoQixKFv6QX53/ve99x5KUt5hRshFlMAfXIV2Y1kXa8MChr4cRUxKV+6eKW6UgdYgxcrgiCMHNvCYk46u4FF6I8ho2YashlSbp4u7d21GwJ8OilTABUwFgasLN6iF2NlgDDWaTi/8At/R7oGkuAYl54Jfj755JOoTgqmaikYogiAjgGVjU6Cv2/fAxhrZQ4xuRVIHKAi2SyiJRGgmI/ZDM5ELE4iSZqqA0E2mOh1oNQnUvCiFf/8F34RZH6ZFzbjrwHW1aSoTjDS0Xrl5ZcVf+GFj6F747r13bd63z56xKp9NOKP7dfItOWXmJym4l2zikwVIBwrSPPV118B7Z/8wR9gEVbTh+9+/3vWH7I+mmmfGBsx3KAswZUvrv7Tb/youf32rkce77w9vnTF6oqqmpm7hUJL44p/Wx0AikointxLeoeAFxqFq379mVJy2XIvKZvfDz86AMlLyAwIo8scYLynzAlIDtR9L7k/c5DvzR8dgMAxe7Jx9DSa7m9iYlB4HuE/jU2PDsBC3tjQ7drqJYV5M28d+tF7p97KsxmgcK4oVg/Ns1jBuKCd2brFywi9MJ8SYTWJGPUXjMa6+6zNy9KE4jYhCMBjlkOOcrxKOBnUcUuxzoQxEbsRTGqrIrt6zPyAqTRLLxTj79P0muKJvYnNTtdFqcefqvY1Uem+dtorxY3dthpYOuSFU3KRwdDoqKFgkx0x9n/gceZskXHz1Svnz76nObAGQyyC/ybMaGPz9asUXjoNt7yef2No2OVGW83NVl2HLVt6e2PNTF19o18jAiKbS1eucWaw4oKe+9gLjIiqK8Xj0X82S9vFK1yKzKJzoJSFvIdzgBJzEmTAhNNgaFSL2/QnC2LLGhGmLWwydSxg/fSnP2ktPgO1zl4e+TFBl0OrwXzAtAaJoHFDOyUmNqiEW2ghbYgxUsoGGWCz6KoG+b4ybd44TX3Ak3cNzufHucOmCFBnPBBzMMRWTs4fYjoAMMQuA+8QPvbOCZjrStGEV155FQdQx03pnmh3KB5vpm+DsYcPvW6HFUywBUoQg4D8aEEpJlhDiNUWlmBdV3eHO3+OHTvK7GLUprGJ3zt9+ozLGW0X5GrNExrvF4TNTMfdVc4ApCf2X2EyJwYa5KkWcmJxSiYXYC1HkY4iBDY11pthwJaBgf7bw7exYlVTgyiipKxUf0OXFoY2AuD/xg2beKe+3n4z1RKDRQWF2izDUkrZAyCxTEOSDUshED5qIQ6aoCBuIBlipCPFJyJTxJ8UGDQFSZAK+YqZREN/fMV2BaXLr7hsRCBFWUwbdOlP9sipFP77pRWA+FVEnowJhfABE4ZyBkOyUWH5lYYk9NTuk1IJAqwwkIwoM6ZpYZFJlEQjQ8JccaRJ9KfirNsNOfZTWJFKzXBYQ0bnfX3iicfwRGZ1gSPOduuLU7naW9tkgJh0S4BARqNslPz555+33YVtQolyMjGttsNEktqga8x27+z4SimaANWhBZkdXT1Yh1GYYKQCQJmVTZGbKiinP9Wi6QFWNjOEsJLT4nP6jG+Kg4ZROMNOVQSmT9gCH4TjKpKRBnkphOKRHxpSZAMEP3PZ1I4nekkQ8CirOnkUURw+ftO7T17Sr5yyJbmkDGpUe8ovxaf0NYNaKESXgbxARhcg2I58LKIzCJeSmIaxMuT/4T/6PA2DNNrsjFVyz55YgmzIxOiIKXhsOn7sJHrogf34RlBmpqYt+DGvi0AhV31jkwpGnOs6MtKwqkFUAaAAkjWSrnvf1I2VIu/sPNBgvbZD3AZjC4t04qcmY0pCP1stD+zb5SyH7GjvUDIp1BWuXjAC7ZAmG+9Tk9MzsxHEc6BO7TXt64ygNevWrl+7xlSGhQfpGFDnfN243gKZbVu2GkHRghhRoKBwNjgKVdu2vABr3STOkrdFNdwNC8EQRNncoUac4fj4R2hjBVayBHqsCM3gmOg6jgmVoCo/L6aN4WpJnYUkjfnjP/5jqsar4onHJ3ZNXUjLgyg7v28PBD4nTsSVYYsrFjl1Xs+Yl7l47rydpqKS555/tqig2MZWNknnVjU0woQq22PNHRs3onM20W/asBHbVY1S9uN9ZX099PQBjNfymWh3ilUoX2mF2ukA42lrbWXRGE7uMtBaePoqFkQ7IIRibNgnVkFNzUnSX7OMfM+ubBuD8E44M2AbtEk9Dmh21tz2kuhWFaNQw42TYIKj1eHucY9G0go1UlY8AVwkqhY1iouQI4/MighMsQV7E88lKgVJZJKLJUCVy6rSoT3Kau+w1Fdof/3rXzM+Jz8DsFmcthsmRzsECHHT+nVCERva2jrarX0oX1y+fs1aDcm2zdtcxTBqamtZ5cjgiPMo7UvzmPwyNlZbU2fu2L2D87Hj1gDkgusQbHM3KNXZdVMX2g54ixwwU6SLXQTNsjCNjtEuKgE3DRWU8ARRlK1iUcx+YAK3iO2adsyhXfbw0TqlvCvImP0SWdOqBtqiiO6BY464s89//vPSu3s6CR3rfBIHUFeqGBN3hSU/+MGPMEdUoTqJmCMnRsEQG2kIDoOvz6mp27xlGzTeeustOoYQEwsWm8Hk7Nn3XMwsUtatEg5q+4Vi/9sf/e+f+9znWB/I6LIOlTbqUoJ27MhRYEUtPpkBAQEfWO6161fNMCyvqhIisG4scuuwoMG+CxkYNbFaZEj0uFRYsuTPv/36+audOx9+/PbkfOmS2qW1jdN3CuYMVIcb/cgZgHCb/seK3K+X3HNfevrT1/te/AmflA4l+HhPKQnUh/On9Pt+wVCcu5PfC4XHEO8JoMwJTvrN/Zl7yaXnwN6XP/UBDKXfm65ldqRVaYXWoVREaL7RBEn8H2d8OpJ/wb2AJUXzRXenTx4//N6JQ3l3p8qKnI171ySAKSZkmmUtLS6LmYSZudB0pzN6sgHPiOOzuSwkUBUF0EXrQnxOlYgVPSYBrNePYP/uQlwe7NAm94bpGcTdv9FpiTBLB8B4hCyWz9FG4kYjIKn5MxogjyfqzlpH9cvDbwv+vIvGlBEHsE03mRjgGhwa4d90Rqqqa/Y/9hhbM/fW39PZf6uHKupk4jwV1fOHtUEBPWSYs0ST1QyBQcmge6PXaklrFqDPMQHTC6RmYYn1lt/53g9YliLsyHIRCHPIDBOGNJmjUCkMZTAEwyJUJM5gxXLycjobkxOxRB5RPqFaEV990prwgaqDCcf1p3/6pwx/9+6dDs6ifdoo4x28qFoMVQjZQeDTdFEkistVarJBtAHVdAIyWjzwQaY2WqMAB5n98jDaLD4BHM1KbW2NlgtW1jJYFQMf1pq5l1WW7yqimYMbz2/xxpG33vLp0f2P8TngwOHAgcd4aWNGSjlvh8j4WH9q+AzG9d3qNnbA5+iiYJRHKTgAgnyZ+QrLQQlUh8cA4sXz50j5iSee0sBt3LRF4yVk8l5eEUMnhcVmsBZutnd4p9sxXpkdi4zqBA18HXbwbTE3dMW5qRpWaiFWRmxI2RgThSJHY2crGwzwxZi6tQ8w5JFu9fb3DdzW3LhyyADNIw/tl046EHbONrYTljHsuoZVoSHZYdyQJ3G/WEcQ8quOahExPqMRb5VChTwshdAhjEzQIIzDUmiLF2XRBRp5ARVILootuTITvVJtrTeAAlBm8D0q8p5id3VRRWBxAOHAGtzyot7gSXaUjQyKqMWjYMoJTrJBcHhpMiJNTQZQ8vhN2FJO+HgP2i3jsZPe/syS7PSLvh4apSC2a/6YpjzUz6Mic0G2bYRR3B5EF3vEYXEO4MHqGKqPqyoM28ksRefZC9WFeEIMzmYAVIo5KBoaidsS8AQ0hx+gFAnIFCNqbfEN0/BWTsj7U0FailgtbEohGjKNzmS2fkF+xVOfh3bReaXgECzO5nNAU5xVKp5E4085PTLwA3CAamIRiiDs4TTRqCzgKoKPUsQEspecZ/M1kelXuoIgKCin6jxy+iSbFF/lSdBsTUhCl4gEmDBJSNIQ7Tt1go/MiBVgoDf/v3z5/8E4oUsYhnYQab4CT4dHxyXyLnBtbIhjTBRY1Vjf1dGm2Vi5so5tuHmbAtSsWGmRyNLK5YIPaAudF4WTKlRl8GsmBG8A0rIcS4As6UZJqh5++uJ+XfrjjlVDJ7P2Yo5aRuJc3liZB1dmMDQ8CgfbccBRENmqBgTTZaCdg8O3uzt7TGEIw4Vn0Y21PrKpidd2io2m1ciSsaWRoeHeWz1PP/VYFnpFcRJSsV4+vUGyngCbpLXIMTYg+hG2DsWZm7GuiwHguwCOl6SR0EjchBKd5hCxDhyaiq26Cn5JVx5mI6DhH0EwYCCu5X9pCXIUqbSqyuUlGp6pcSelAFVSXITVZs8lHj58mNhcecbdmz0YGBr87ve+x5M6o82GKrwjdROXDKymOvax0WZ7eh/a96BhDH0Gqq9lYzaDI8P86aaNWxByKlturoPHbs2S461drt45Cqv39PqhnR78wUs2QJSaItEzNWAJaKdYejhs21pEAfT8zOyYxrX3FgyNma3ftFEgsrKh/lZ3j3sWL5w957gMY+d79j04OharX+gDwWI+OeIYNyHExF5cYpbqwj1tqiF/awv5BRlQGj4iO28YBzzyUx6BI257QYJ+Y0mRDScxxUQiuME120CCD+rCzOeff458dWbQosmnP7/7O/+I2DUCzo5vamyoWlGl62KORRPhwsM1TWusZzPKZCWY2wx0EQ34KWv8T6ePAS5ZtkSXc826NebNYo36HaG8LutdDadYjiwcWcvTYruHjhE6NUAa340JHhymbBQPadTeClfMZ+oefCYC4tOCEpM8zB5dmAYUgDiv7+uTBgmN3AKhoBSolhsWrV73jjmO3SBEjRAj6um+deLEuwQnDx4qS9moNLVkEfoSSZP5BLJ2AKKzlmkql7F79y5BIwQWVZQxupd//EPKbGBUIGVvtNr/4tvf2rZjh2DFQKzjvZFJmfHqycefkNPkiBEd4kC4fSBaYsyHvy0TJFua9d8c/osQ2kgHjO0hUAeAfXEycMMoZ8T/+NC7J89d37r30em8srySZVUNaybn8iLsg+LfXgeAagW8D8Lx9IJ2L8nhpgwp5b5s/rw3Jf2Z+00dgNDVvzwDcF+N9/2ZA5hLzwFMKbl0YXb6lKVELan/o4teVmEdpYA8OgDZqvwYhXKS6qKK8rGhAYF3U131cF/n0cOvtF6/WHh3Wh+gQGs764TlaSP9hmVE8tnhnhE6ZLX412KfiBVI0/hOyGg6lhP4E3OsCVhwo7mIxNhksfAMGBcFz2m7oFVSrI9Rohm30EhmnSq+2lmTbhYAJ/HWL1ejOxDNfdbU8YrwkC5PZHNKUVHsDdUzMbNh0aolQFZC8GwGCJdXr9DzsHRVP1aRLifLzc86t5eC0TqHQWtlLB9FiyOSuR2DoeCzGnZqbsaL5UkMR7dcHhXRQxPCzPb06ffOnDkn1ODJjWVS++brsZlV9JzcI5cFPdDYF9fNnEHAf5zxrmUElpuqWREDpdwXq+cSWYRPlqQyWLfhalJ1oQH5V//qX3Hy4kb9KOcoooV91dXVK2LQQqvkgdWebAeRnglegaAbjkwi5C7AV53WmfuFWDQrEeIv4geQIAN3cfq9d3lKRs0z6EUIhozZ8xVyWp2qqw8sznAXoLW03DBMu3pVg4ZSeM2uWTe/8T/+j/+TWAKx+GAojdcySKeIgo4I+4Uv/KxBE26BcyBH/gcJHHtGTh3EZEMpAr/+9a+bwxSOW09IAbBl6ZLlvPe15lakLV9ezfO7OMi44cjomIgRBC37wNBt5ChOFviMOk2HWpTFZM5QvQ4s4a+I0r5eHQB3VjSu4sPqjDxa0kIlQTD0GS37ctIZPXnyFIC3h4Y5wCcee9LcMh5q2fU0AbSBEK9sN0cvRUZUqGW2xpiISVw3jwS1zpx5Mg2aBjc8JB21yAyg4lTFJ7VjAj0BFrZI4IplyHR1mcyKSPSr+HI322Uz4fRNohSQpcABlzBNOmiwAtkjIKZviUWqyDgZp6pAFUBIanm5d++KQB7C8PRC+nQGJ8OB19SA7wVw1fkqPaBZfFFY1N7aaksjt4PJ0H7fLczFYUSZ4UZv34FLHTc7YWvADnzZSPZG63UAgRIvHTjwqOL6rpDRWFBUf8pZWbkCOQoirbgk+k70R4pZGvoPZ2iMjE1IxCi4Va+IrcPgJxPgKORRlloajYIJkkGTjhxwTC4l2hEIGfXKIzNQStFqiTITKHmBqSzyMTylKJX4LwW26U8FVaqUPzNWIbHIn5lni06vP1UKuEQPyOmR31dlAU8I+E2gEuely+8dKMVl1lLywP5UNoEia2YiPsQHIvAnVvsFR73573zbfpp38Usc5mZsSAsFKeK6DZuo3cBgrOpeUV2rYgyyxuHhBx/o7Gi/3tyqCjetMI+J8Wnas2b9OhjYG43y/tt9HR0xjrht246N6zXwqZdjgf5I761Yt0MPyAl+ZgCEvxhI0R0EZJdMT287yfpK3o7/gw8/jjDbhWECDSn6jh7FncHCaD2AIImc+EHqQml0Y+QneLEyTPQxcGRicmRlbXVpCTuPYePEo9KSqCtjso0QESiLQtwbwvEJPISMjhUGkJMCkNnTCeLR3cQ+lgMNv1KgQRJcp2zyg8MhwoposY5nV1YwR8noN6XBB4tNLCehxEn2YyNDqLOyv9y9JLFWrdTQrMc6KjBVIem1Nw45Bp3wBJFGf6WIKn01lcmfCCUNA71z9ChXa2kNNMZHxgWFZtW9c9O8njMy9Q1Ky2N7EFWBielO7/RQgzcqgs+m1eRUC/1OZKICxyTSE3Rx8Qgnjl/+xV/wIp05YT5WqEge5ufBDY2HbIaT0WvQpXJFjeN7heYkyI8QkMz0EhNUhDnWnctJIlgnnuR3LMjh+ySql3BBw0mZ4WlcnHC9M0WtrEsVLEuuqamFLWfHPNR+40aLujQ5IGjbEIVirZ2A1TztyroaPMz4P7+ipmrz5o2Zn4qefVPTalJmVp/59E+lJlBLPzoWCy6ZkCbNV9kABMHGWSRQflQTt0Qs1QGoXG5doF0tFSqFp0dd8ugEUhi80sbDM3XCn3vuuYLCcNkg4xUD1HjoBaEalzBEZraNNCqE1UAJIPDfV2wxlHXw4EEVYYWVrFw5NGBloE6bClUTX5cvXdUNkIgK1QH41a9+9amnnoIM5hMxXXrttddognp1foZGxvXNrEImqdLsxnKruf/Fv/gXS5cscl+vQ7SQ/MCu3Zyv/RUGDocdOHsjdqLDHyi0OI4L5PXZcAu64Okmb/DNVGjC9RbQ5YxlPLGxz/uBxx9jYlY5I9MCS7IzTEABsE4H4EdvnnzrxIUtD+wvqKiaXiiubdo4Mevs+jx+8Z4OgMMr/WkTcIpT/xozAPiAq+nBvdyLdxh6ZCCvlM2fH+SNf+/Nf2/6ve9KIITnkRkcqoJk756ULb3c92cOeC49B/O+/B/uAGS7AmJpgZVgHlFyogKEOKc/P84Ut+Zy4e7s3enJysUlw/1dRw+9eqP5QuHd2ZJC6wN1+2bnZict4pfdrazZ6HzqwGQj9D5mIULwJD8aOQuNkQa06S+HMgqbXARsbYJrwWIrsMUqd6LTxhRiMRxmRrxk4b+1SXeMcGeHggZmMKTbAKZHiicrkY3p+nTXHJFFEWG/dgSaUyitWKTDPT4x5YhAW8PrGxrtD6lvcEy7ZQzTvd1dAz0dWzfHbdn6qCLjf/gP/6GBVJpmaU3mvuJEf80fv2f0kU8zqMHz65ZnS4OGYNI/MHjo0KFTp87oRWggRWnWCLCmdes3MCvyxGTGIiez5XZS5MFMpFN++HtnaMn7raiuZIPi8kSsX71lDZn5SfUaCzf0Y/0JfDg9Bm4VU0NDxP2ZG6yTs+V6K9NWC/hWt/skJk76mYVEDoPvhww/CWGWRdzkxTOjWpsCjq9CbSM7nOFnPvPJsvISZmvUDzlaH36GeEQg8jNDtZw7F7cKqJGrfOappxwHZAkQ+MneGxpiNxEHbrxcBIGrCOEh6flzzz3z+c/9tD4ev8cKIE++cFCd/KrjKFgE4HjiT36J11SpPQB8S39fjHCNjU9znqdPn3UNjhMNYt94fqwgxVWEDI4Ym4v1G6lRBo294rZZbmgQopzWo8vMZ1LS6riI6q4Gl2SoHzwrsuFLjSyELfeiDKZMLft04ovOWM/NboLzicSXV1UDgkzwDRzzacsrq6gozMkR2lKIBibaIy8qFSlhuK9QTbGjGrEXE6CKLdjrk7LCDy98uK/gpIKyocJDiODIXF+3EvfIArSwouzxggNq8RdN8JuqUGp4JDaqKgsgQqCkrJYxCRTmMisLcvqVGbdlliKbIlolWgSgzMQHVYmogBvFOvHOMVPE+Ew3sKi7u0vzrRG3zgombpcbGx/Vsmi/tAWa0dv9t80IQl5XyiEctN2AqfxG0GiITcB0VTyGgVDF9hUrYgzbu5SWG22AIJ9M3c0JJcYFvffOnmcFAiSRj4EHVoxeyMPWQ8eQjDn0WRHvqgDNS2abFd6lqz0BxAc8SeoKYXAIFEPQCx+iVzuU8McLzoAMJbUkT6VGbAdKBg9lk0EikmVLn8CX6JEtUMycXnpRkURSSBAgg43+9CgLc2jImfJIzL8Tu8YlemTAKJhL4daAUpY+W/69ZFF5kkL+t/7t/1M+oRVr1AFgurt27aaIXBsV7O6Vv+eDU3oWNqxfOztt2fPE5IRFOwuW7rDwouIynsW6zkxlY/dJ+aKyU6dOgkmn52YWVtU3kPemTRsF63bZI5s80Ix9ehE4qINBUY3/ubJ60+Y1U9PjJt3QBmNPNsFVNW+qOqZOwjz0fkOcGU/dfRido2xyRAiLbMc10jwjncIL9qkK3NGvEU+LJG2q5HM9ocR3Y8hZZ0Cw4g5IqmylIFnSGIk08mrzFdcFPPTIQ2ajIEy3sJIUiUEToqw/6QS2EicXJl0iV+hdpRiLRuprYFXEKUVF+OmXomeWY2S50eS1GUrqYraSAxSVl5aV2GkalI5Ek8N40CWQMnV5tbllLHTVdS19WbNqVmua1Pbu2WXfjDNh9u9/2J8vv/yjRx99lAO9M2uyr8BqFmx3RSXJ7ty9G/fch0AzZkJ/5m2gCdXJjs2y6Y3uQjuZN6UMxLJ5Sfgjk5bTKkxAuDWaly+c37RxvTVFzEm9uKqhApNYMR8c0aQtUwwVT24PDm/ftVvbDH/4ZN45FgLhGLbDTUOIgdK5S+P0qsLDbdud5LONE0z1SoEh7jFyRfBTOpfBDdnhurKmcXxsUnQOf+0ZnaQ1LBbCFJJaYj7po0jr+Gd/9mcuMbCpkRwxGbE8rVLyU+Owrjmr9ss0lobW9Al5ycXWRDloPOvsgaCh0nAiHD6o3r51K78DGiRJUOtWscgBZHE2P2hwEBlgoOIwxyK8QrhfCGMXihYvMU5fRtP0GGk1sP6UH4tYqPZAoszaAHLBlqrKZWgBQRF3AOhhSteldyKWSjFB6E+pVA0BPerRkXHxgczKUleY47OxRqN06pJotkH/8LOf/SxZ2M9we2jUVUoOQ6bApndVff7cGR7H8akyt1y7ysk6PlWgYKTfvYFGIc6eP0cZ1KgPTC7vHDkqmqHbKDUJA41dO3bCk9PAT2vz1FtZXQ2C3Tg0VigYZBZFb18HgJ5ofUkEXflFi77/2rHXj7y3affD5ZX1Y7N59Wu3jM+YGViIewD+6wzA30IHIOeU04tf+k9DvMCERLynFC+e+/KnxI/6jeLJ3LxQdc+Hi38YWkrJpecg358eMwCQiwDd0Gb8xgooc33TqQMQkXY2DOaL8cq7+SWW3Lj8xn28E8O3ly0qrSi8093ecuTQy0P9nZNjAxWlheVlBXPzE861gvDdu9rFiL8DcNaSUXJ8sBxIClX0izr6j0XchAOzhPB5rnR1tqhLw1wMpt+hyGyWkl0ZY9MunHUAWGJxCSh/aZcFbFUEYGrnwE/8j0od6XbHtEK2zqGwoLDEjob8WBQ+aT1xkX3AtQ0NxjgcNWim2eYC80lLyorqV9a4/E5AaRI1065os61to5lMledhoTTWehWDu5U+LF7shB/6vHXLdttUXvqL7whD6+tXcRGaUn5Ju4NY2yvluX69mZ4rwvVRb8JNTS/g8vjE6lkHP6kWBnijpVmoBIh3XzkTJsadclOySfm3//bfiqH/wT/4BzyGxmjRYkMMd6yblZ8QeL9oDCam+QdmIifctm/fiYrenluzc4Y2jUzladFYK7/HR6ka5oCzMg+XDojVpMzwE598sdz5sAuxLsUwAZPXcrknATJPPXUwU9UxVHz/ez9MjuXAY/vR8M6xI24bEE/oRSC8q6ubf06tv1Mi8JakgAP/937vd7o6W0WEpAkB9SZp+tNjEITzgSFannzySSm+mvTgxyQi+eKlK1IK8uNqWwv2idUyfdOuOgCqwARLhmbmjcjGEotUL4lYyKR2pkDWnCotEgH65WyJYnbSEfWLFi9xivziZZWxaXJ6blotQyPDBDQ5NaOzx7184uOfslhXRLEwG8Ne3DhQJ949ZajFwCpiq2tWauAAImgVgZBsAfLyS0FOEijrUDtuJE3TbGmO+WHsVQpkj0TFSZyfJzWuUhE8h7NSRIYickSdm4ATQEZBJeCfsz4v/pRTNjrC5yvrJmBVqwJ8KGltVU1ktbU1MiMZkuCoDkulKAsChYm6sttzSY3G+gQOPOWXWVNIb7ssHd+8fUl2S4z2FOarVzfxPKqAuLbSOdFPPPm4JpIvl1/BwYFhI7DoIuKm1Y1mkwxiSu/ruyUlO+uoAnCPiqDBl2AXQui5FSikDJoix06cpMzSMdygQFb1ahiOT0wiVjZMw14wZQAfCTiAIikopbGJ//pQLFQGKGG4F+LDFt1ycKi3FKCQ708oycbAveNSesFSoRFx4Jhf8OVXyrsasw5v9Hg90n31CXpa8KSxkPTiN/f4Ux6P4mASayqIEBj6CsPQf27ANEIclFwAE+pBvjDnQ6SjFHPkgaruGUIA8Wd0AKACro2w2m9Z0woKpyYDbdcXFIXFIKrGSSe8J/JsTrUUsrWlraSs3CYksYumZteunaqxwn7n7l2GpYFCytUrN2jezda2odHhupraTVs3OevEgW/lJeUCc42VqduRwSEndTnQ08HHo2N6FAUSgUoKbU12QXGRGQD0YIqbjAITQ5ijMbheWR1TSEjAAlSZ6YN2ZioRNDvhh9pBQGiIWr3PZXEUqc5rrDsUeMhphMD0n+IPPLCPhtm3xKSTPBjBt779ravXLtMtXsmYulNMcDbGtIrDtOBz8fwFtVN3PNSHefLJpzVfPBBpI9/yoRQm9Pf1GcV9+623pFu7Z3mSQ54dUbdiZa2T4ywcNw8Of8KzlR4yNlpYLsUFUOVLF2KHa+Yc7+rqOpIi06S7i8qj+27Ahnm4YyWbQIiJNpsyqaY9mgBu3riFEoigeXOJpC6zVVvOTYM/r+pPKDEVHS0ZrNiWTsm4ntQNYG9e9MsTT5DJVFg+ccSAX1yxONt5s+tGW8vePfv0/ez60JXjUbnEnq5e00FXLl3t6um0GOyR/fuXVpmodWrTMjSCw3RFfroHQfLMDIRpGuqIWLwrXlS5dQNW2+sGNK1aY/SIiDUhp0+dMbdoN6MF/S55sXR1ddNaLri6snbt2nVkxL8I/QkO/qzbcaD8HkKgzRJSd6LKFRXLqyzEc28u5258gkM3v4oDlsSQhSF/1uIwVfjIaXWRXSCQZFTsWSJUoa2Kb3/rJcApFW1kqwJfd0lKqVhirGJMXr5MoMoPChfMbFIzNmJe0TS9iXInEOhzakhorIEd3OCSdOEAB80YDFCUjUrjvC4T76fNlkcn0Eg8enkWiDU2NDiWxy4O4iRZ0b+Aj5J/4xvfeOaZZ4DFyZdfflWHnJIL0IE1i6KZB1Oj+8Mf/hB/dNiSgLp6unEb9frwuKGrYPsmYzd4Pzsz5WyH3Tu2w8qkza/86i/JqQF2JAB6N8fZKQOu8zPIKrYzr2LcwCK3c2cv2EmsNbVZrrOjm/Zil0XiGM6Qz753Zv+BR3W0eFXs9cnlSphs9hvmECsqXXz4+IUfHzq5eedDS2rXDE7daVy/fdxorysBsN6quSzkjWhSdPv+sMr7g/TwlCP9Rt4PnvvSkZm+3JfuTzj4JEN6vKeUj8yfEj/qN+JXMgUQnGRcsqXqci/3/fnh9BzklDOXn0WkT0bgNRwYYQA/OgCz05oCzPTuPi8hk2VAIvG5hQIz9xYfWu6/fPHS6YmRu9MTa+przp8+fun8u23XzxfnzSwqs5xj8s7cpOLTs+L4mO9GO20EAcP8yd+rVwbWrVUlWYlLKhY5OZeLMB/lKgCH/xTbvRR9gLjM3X84KINSYn7F446W+dni0mjnLPlxTUBiFOpIX6inPZLtA/7blHy3sKjMnVCcLN9ln4KFiBYZatMXu4ijrNyK59tDI+s3bgj9uXO3TEtWmE9preLYvWenuLat7QaA+gLCGmsCM89WLZ1L5zTYfnd2VgGqmCcXceTIOyZCtmzfbqupMRQBt4hB1AI3K5z4TLY25UqpIUd89oj0xFX4ADiHAwdWqV/NpbNrjZcT6sz0ml5LoZ6mCpkvvvgiqoHSGP35n/85S2eqqGPLbIr56GPYccfYOTf2yyvyQmYhAFTcL6+e7ZSNVS7GUIS5Zgb8+oRApg0HWMkMrODsyJEjeggfs/N+qVPvKq9fv+bGQyN6Lp3vtjTfGb4P7ze47Z7dM6feu9He9trLr33+F35ho6OBSgrfPX589s7sutXr+F7C40b0YcRAfX39YJIj6nwypmAg7JFHHn5w325eAkP4+YQwf8LrYohGR06+Dm5aMf4fx9JAuOAese0WliwUgG/xVFFJmfWDwidndDoDXqgAGt67HMeqLv6EWFEKjlCWwwfZnxwmjlAnHLatRZdj86aNGCu0MwNgCwrPczv2WMddchG2Do7YX2y8LnRuwYk9veB4dEI5PS1X05o1zsHR2TS2AuzEZGy0hb8GggrxwIQIGQIKlc6OhoSkFLyCoXReTgpBAMsQCEU2QJSVDW58exKcRFoBrHT5lcWxO/NxvpCCoeHZwo+cgaBXNozFOgWhh/ZlsaM4BpWxXSCndmXVKIVG0U9/Ml41QliwKPBQHcimoRClWbS4Ghzv0gG3b84JMgajdbQWlZUzW/V6zCIoZWyIVjtRikqYqKhdWaNR40oRi9UQW71qbWrOGJFWCRx+0YZszZw8OuQwZDt+6Qz6NObkQu2dN+04VzhTaaGgK+fgHO4i1hvGHaz4Ft5kLuL7pBvJmcAt6y3Hzh9sSZ4KfOwNft5ZQCM9EfGzSpRSBhwW/CgeALOFW5gJPv6ATMe8qwVkaEvBW9wL4fCQWX9PKXiqQhigXk9CBqoe0BQnuCQ7KWrMvsRqNKD8SQHTL4STeqA91Qtbj7rM9TA6XpeBkw7G0nw0ErTMIEAYhkQMAnxglX/8u/9BPipIsVrbYy21gPjAgQOGZsQHt/r7pDsGNNUkrJnOuqErLF+sWXGr2yXZMSSplCHdtWtXmw4TJStOtGpCp7WDDva2XEuX+pqVI80WtIxz8cLBJ59+qrrSAa6LBwduxwkqwyOM3xGU2irE4IgHF5bZeVhpV3EFjI0z0TyMIBU4W6FUky2ITFzGRw1EkhA2yYmhSnk4B4zweMd6skCXFjgEvpAPQ4w78Ojj+x5+yOUb2A95tah0an4adW3tNwSjVy9fYSwOYtu5fVtDXW2sSLIQZXLCOkJTJuOjY7qT7h1fWWcQekynwvGI2G9VPW6RlTXluG6v7vXmZreUuRG7vrGeE7GFFEouVmEDJAR/9ZKWxTyUieR0qTHEu0Gsq83XZ2fmRMxoaVoduyrl9DCwkaFBtkG02C6wNoxkwZWIyKy6M1Wsb/H4lDSelng3K8LREJZabBpTqqQsLuumdshHuHoZqqEdGLJ2pphW9YSLzFYHAi7ctPBgbHJMg2EGVm2r1qw6duTYlu1bdPM0EkMDQ803mvPu5BmcM21XVh7WAplQp+lpL5CHOftBTvL7+CDdQvZzZ86Ky3X/Yor2bt7WrZZv1jpHwlo9A97mgrq6OjRvgmm9L0BW1ugArM0G/mMhGRIQ6EicQ2++9fAjD/ILKMo8eIxT1tXXG3fr6NKKx5QflsKk82Y7zVdWoj3uuOQcGxYlOve7sr7Bklv2lmRECbFOoGDwA2TkcBxcHpviZexH1mo+/njcz7ByZc1g/6CtwyYodJnMehkaMVCLLhoY4XvFEjM8IANCB7A9GS00TD37E89VkdQSqujiGn7wo+9Lqa5c7tYt09JVy5ZSVOE1Sen3Gkc3vnujrXXtmvUiPgAvnr8EjpAC+QSKUSCbMUAa7vEX5MuEQaYVkPEnxdMwiHVUdPTIW88995wXcYlE7OWXTQLQAd55cmyUFgnkdABef/1VU+38na4OGnv6+p35sGPHrgMH9stpYM+0PlswMEnimskf/OiHn/rEJ5cut1MzzlsgfehlHnMxhnCyBLFQUPqD1945+u7FVet3VTWu7xmZa9pkf8t0eYUbymN5CVYy+Qh4Y9w7i/izHcASOYfcr5fcc196+tPXD6cThPTM2uLHe0pJmXP500vuk6/3Pgat+TTMB8FLcsTec/lzcFKpQDp77k9/v3tzP55pK6oS6ewdQxUZPwwviL8jUNDc+GiUN37pXUwDyBJhPCvWhOhEFd2dL8m/c6vzxpuv/EVf5/U1dcsmRvuH+jopydDYVIy4G8XPuGHwKiGGIi6CJqPF1l4ISKGu5dHgzdydNU0zD7LLQu0lsDPX8iBS0hGg+YGt5k0x8ZDz/GNITE4xU8wnOEZA8G9NJOAifnE8sHoeCsXm5jmrw+O8Zt1Ua0KGRnQ8TO5zmktkYH0q1G3IXEE0vZs2rH/3xIm9ex/QzIs7bY8xpmCRjKp5C+/mplpbW9iIPjnNHBeuZoF1b08fD6BvY+iGBzMbZT6TvWzYENO5kGV3sDWX5aTm2/2DInXho+EJyHKnBvkpuQ0HnA8RCD3x56mnnjK37NB9Nqh3YVBZcMYJG7txq+4PfvADKycZgsCIPdIWtiYoAZB1M08Q+EnXe8OTVwdZiqaB4aOXsZORzrNYKBvzjrFG9s7HIlwiB6W9ZuOGn4RlycQ2ZxOYhj0Gh4auXb164eLFLZs3r9+w0XymS4EunDvvUI1nnj6oRRbq3ezs0Nsx0OOruvAnFpdmZ5M/d/A5CPMPIdns3BUZzFoPxwhIjCtDBjmGafCQAhCH/FwKKnzi3LTUZGyhimGXgYFY2c8t2IJlmQvnr5YYPclmz/Qv0Xul+RombN+2k3cFn6un7XhljTBfzZnI44oSZEq3vvjo20cIziftjtCfAkgnCGuaNZcQs7NoUcVi+RU0624P4czcvJX4ajl+/KSc2i+rznq6umPmM/MGkOf5oUoheS1iwiWogiADVtMlZKoULTBUqXRCF2/AkBwpu3DNCwi8dJKpUrihbcIZ+MicoClSsahcY0GxcZX6+UVFYq90NVIGjZQWitxV53AUKkRJcBgaMJTNO+lgvoJgkpqqM22MTpqxNgcqUkvtAl5Z0aJ2UiM+D7NduSIOw+BD7KLWqwfQo4iJGpBlBhyxDQ31hhH96YEYXSV0p8N99asv/e7v/j3MhJVBPaOT1nDID22sg6Ti5mEwXGfeCR+8/cGDB6l3nMp1944qMNNWeNEFsBiITAXxCi1uAYEq/qAuBJ0t28ZwwAkCu+SRIQU8rKm6KnommIbhSmGpbJ4EUAqNIk1WCQFfUeqrFHJh4LIxTB2AhDxZyEBwqoCb4lLk95se74BgCGylePcAQhAgwMosg1JUjiCkYJoiqFCjnJCHrUZEfrWTMoEqrlINdArsgfVVTxLmGe9jhZIi8kRl3/njP1S3D6Ru4Bo39Rn8utnObxytU1VlzAPvMEX127fuQJ4ISX6n2UBFNswVyHIu/BqP9ulPf1qVmKuIo3oS3tCCunec9cvf0XJlKboBRfLGI6pZuWypplVOKBkFNwyTaEYYPCFtPQWroBYIM6mr+YKb4sijB9iBPBqjOhnwDuMgKb8XvREdRK0HztIYw1c4Cxl9f0IS/T/99DN22XK4lSuqrb80AKl/gjtgGUrRRXEzsYtSJ6cm5mdnNm9cv/eB3RvWrTUGYDvUQF+/7un1VufMxK1SwMLW/JRAHJ+R4088gQbnIpzK8Ly7/8AjIFMarCNOwStLI0vs9eCD/LD1KRO80ffxkeFRISY3gTp5cIZHoLsYiHDp5grwChzRlfE/nCEIELZs2sjMzGn7ajbErxXqiqAdtsZ3hSSPP/60Ngy7SBAV+IPb5EuZYCIzQgBUHYfiV5OJHKTRMECEv+iKteDZ4db0jPggiXCyfufYMQvzdIoNOQs36St6PQQnJ7NUKeAI4X3IlM2MDHP6N3yCjIrgDAG29/GPfxzhJIsVsJXIJFTtdH46gFfwkUE6mDREIrBS8BYh6KIhghcxv/1eaodDajJJWXH533zzzdv9A9B75plnpFw4d44TlcdJU1SLBNFLe0mHMj/77LM4DwEYEgeBUm8NZNWK2nMXzg8PDsFEBw9dOA8HZXGPTyJEtqp2t3UFD98/+NLWjlinCGeKgUxBNqdMEOD7M7FUBje4Ysuxo0cEEx87+LT8x48dVQsEEGUTm6kendzGVatETmIUo+y/+qu/qnYZxDrmheCvXrUkm+LIRAawUlyKIX+M4ujVSIKaTO9kSjSywQeZyCFfMIFycieGYwi1MY2HUZTQoN2xk3Ei0AN791KhJA6TEhyFmEtZo4Pk+8ILL/jFQ3V5IXQAYajhYUGQGRyZPHri4uHj55o276pu3NQ5MLVq446BkYmy8iVxzIcOgJAyBrzz4sapWN+Sl7oEyQCl51683/tnLj293PdnypmUH7aUIWVIKelrruB9n6Kaex4dAOLDQNnAwWSUpiIpVw7O+39+UPb+9J/YATCipBynk5WKd/Oo6rVE0BN/Zoas3VkoMB+Q5c13p69vcWp/9AEW5vLmxlounT5/6u2J2x3lhXPF+RoMa+6jw6C4J5gdFQnE0x0AkYismF1w5I+1Pwvz+Yby5bG6xz3A83N2AYhkXeBl+Y5FP9HwxaZkVcZoaPAVLBM6C8GfkiIxTdwWTOdNWmR4WlLEoUU3QF9DnopscAQ/ZRENeDSvNLA0GwMWeqHXNgDOQXjPTc1Mzhhm2rFzG5fY1tb6/PPPG2V86+1Dn/jEi0xbSMA9YselSzGvu7x6Odux29d6GEqu+eB7waTq42NxNldT02po88nB1RgEmYiJr84ORsQ0DF1p0czQMhZXjvEVRjXh5iwdVqNr/dhjjxntMpXHMH//938f8vwAfeC69cm5BQSq1+gjCMJrpXSqOUZAOGQ0oZpdoEtZfybnKTO782AsbvjTC2cr6mWV0FBWD1A77hOv8syzT3NZ/L/4bGI4rnHECn4VgWB65ytef/117ssJv+wRNBaqruqaau5lcnqCiwbT3h5omFEU2NXV1oKv0YGeLpwXVi+WuNXbHY7x5k2/agdfE2nKJbxxtk6D30MUfvLSzv8YHhpzDpt3/lYcAnkjGuhNkqXfco6MGOCbcBsAhyYM9NVkDmiq9lB3qIos2Zo15chxaZgVj1u3btHtOXHiJHrXZsMcra3tIbiqFTwqwOYZ+E8igCdHpBMlHHI4isFKVZACnMnXJ1jBGcM1AX5TvejiRa9cuoy32IUD8vP50EC+ivg3VcsvhVPFQNI3maF4NKzZYaAgpNYKDuIrpVSkbcIlhANr2I9M5YcSteSdsJR6kJ0mGPJ4ThVBA0qiy0Nhgjn4AG3ySvDhpqAUYtKy0zqIAXjq1GndoTjyzpqZWKftpJUBEMia/9d1VKNOBYAwNMY/cFv7O0i4wI6O3129qopQsEI2LalpE9kgDCu6ZPtZb3fn3/27fxd6BhkhIOhiDv5MykAQ5I5M+RW3MMT0vkN+EeuTMQPZ8Bz5lkZTS6NAKkIL5OXBpYHb/fJgCHkh2Sd8kwcamOMT+02sZndB3cAgnmCyr+EwsxVQfpmJImRNl+QHB3CCSHmgR8rw99UDLJPxIo8i5Iv5KSccfIVeQgYntarqpQkyJNx89Y4cpQwsyoMWOKtXKdyQDXzAVaFq4zKkI1E2YRX4iuA/CKQJMrFmJh9Nj2zAKusXjfnHvvPvvdFjSdoHqrlly1YseOW1N3jATns4qqtd3cwHyaMhb2pcjWzQlVI91nNknAtQSmn4ocJTqAYT4cpTgwwhBOCjbNJhBlcGIBFM0MQf0qFbvzI69zAmRHsflJVTfkoDH17p7HunRSF4JJsam9asNq8McgIuBWJ+sRWzvHD0Cibxiwcql1bCgdvK2vFCQwjsROsCMjlwr4IhwtYXgs/qtesLCouMyyIEfNO1mquZCaHz/Inj71xMN1sV5Fn+uP+Rh9y/a6l9Welig2/6vsnHwV836eDBgynSIhtSRA61oMGy6RCaORGX0x67DmizetWFsQyMKcqPS5iAEF1eq5zKSmMhKePUJKgFNGVlo4JEQ1JajhMnThCEUk7vY37IV6PeuYKyYWYc55pt8KUT9uSBIAgzWovftlirHRM8voJG9QkrKaIq6CsMaZ6vjatC9D4hDZewmpfxCx8IkCzNY1pq5IbaYox5xEIgaMiTWERn9AcsQ5cIYY0BCKJG+qZes0f+VB1l4yWT4rEo5KNILeRFH/ypOI5ZW0D0yqrUg//J2MTH2KgiiZooyAPuWKzk1hFFWyDMczlSFrEgg3n63VMEJ57GipttbRcvX5a+a89u8kIO8sFUheK4p3Zqb3TNL6z4a1OTTiTQwbBkzmBe+KwYHy3EDW6R4Pik5DjQpZMA1LoN6xOZKtKXZlw8IK2ABqygDThWe2GYOD93J1Yxnjx+DDKf/eQnVKELpBYyYggaMANalhhZx3+rf+BLX/rSz/zUT+ueMTfcw2TcIGs16rnpqYLJZFSkCigRqFV/QBEKO/UnooD1zh3DXApZYIVEL9i+uLScQUFJ8T17H2DIWIrtYjqOXm9bFfTc0COYdNUeDIotgx4ON0L5wZGHI8NktBtr0DGALflOzS68fvjUG0ffW7vtgZVrtt3sm2jcsH1wbKq4pOIndABwCTme3Mt9f96b7j33Z+4llSUvL3hLBH79mVLS15Q5CmfV5T6lunK/gmbFMVk2QCghEaQiKU96z6XE5VjZc3/6XyYql19cnL1HtCxAzor+n+oA5OdpTf9rByBvfrq82BbeoQun3jp17FDe/Fj1kjLra6wpEjuiIhGok5XVE0G5emMuK24O4OGjZgTOmHmIM9gK8uacDz6tG2BkyLC8wD7W+OQ6APZvZFy1MAN4HgkQmTJuB0VmxYADUj9PXUZnOW2PsEVBmfkTS4RYgbNBpNBqTLYNQB4vrKm0JM7lWFS2yFfD85S2p6ebAsNafGNEXDvqNt7LVy7SQzQyiuutN5qvtaxeu6axMUY3+m7Fblo00sbysiVq3L59h2wOpaC0Dth1YqQYyNmj4idfTcLwRbwK91uVLXq08F/tmjYuhZUxjZde+ibfom+cDJZNvfzyy+yC52cX2jh5uAUvzIrVm6DmE4DVQ5BHTijBB4Fw8CKzFHxDGq9u5Dd9BYG7kmiy1ANtvzt3bX/22WexhaFBAGSnnrFcxUET1oPv5dVXXzXgcvDgQZDFcGzTKkHIFJcW21Z29vyZFL1t37qNUdvur3jyjUJ/YMEnDm0Ew9cB4M/BgbzMgNAT3kN+BCqILUjQHENPqFdYUHLy1Gko4RsBcTuONPEnv41ky6hFQlo/fsZiWj7c4BfmE67qDJuSvkmw0KWifLSYUzK7ojGHgHbZ2ie0wORTn/oUKdj9BLemNeu4Gp09a6FtIAn5Dg1DEgJ03iC0LgCBoghpkIQzd+erPAjU3GitwEeIdmHPrt1yQpX+cI9kEUpbWqrS1GgqKBsPj2rSsW2d1ADBE2DVKBtdAgEVgGCmd/TKD6AZAK2JP+VXKeCYgwql/En3cAMQvJU/bGQmwmLcRqMiIPhV3J+4x/Hy8IrABHVot1Jdu4YWlA7ftsHaVp8wfnGaPA7oCwjZ1csqlceiA7tPEWXURiNIz+EMExTBgS6RoEWqqlCjyGRNUyPy6TPMgSJi+MgpKlAEpTqlfmEOPX0zN2AQgPzI1DMkfQ0uTKz7B0EHAJfiJbtBWXV2d3iAwjdo4y3peGFc0EOvdNkCc4v2enoKC+JmA/IlI5JFiPweMD0IkR+GIGCFR05/wi0xDeZAyUmg0rEa+aleOikbTHwF1gskOX+Y4ADC6Y8a/WaqG8G9nFbcqB0HPKmIr3CQiGowWRBUwWHCfIVs0rPs8aMi+eEAGh4m/Ul6Ihtu5P/P//SLYCVF0cHVMJtk8eeNtpv8oA4A7phaVSbzPlOXLlyWoGLYUBGawWtAOgabswFLZKeIEwsIiacGP+k0RsgTPjrbCK+sDLDHNVgyRehaZgMzbE0aiZzF5VZzFs87TnRq/PTJ02+8+cbzzz+XjAoH2zvb4QYm5irlxZ8eMEmXbUhB+fssK62otGF/fKp/MDYZZzIOSVgXB4Fv/cW30dWwatUXv/jrtIog9Sd1xhtWNZk9R7WWTOwM7SWCePvaYrau3XLStw4dshDFCK7TxNzXS7FIDihFvvOd7/BlOCnqot9gqg5pHlg5tJM/AgRvjQZxiBgFc5GxvgEqEIguHPZJvTRH83Ortw+T8YrUqQ74sJUHpeglacDVooWgW8srl0HGn9xf/cpa/Ec4Dj/84F7AvUNjfCyiK7JYvWaN7uvht+Ned8pEps8880xSKcgA4h18lXpE9loIS2nVqwoSYQNYSslkRohaVAdJrkFd0lvb2urqVm3ZuhUyQJkv9onhYQs0MIEU6J4uh5ge4TjpyCmQQYOq6JYDlYGdEK6YWE4FoYoD2k5RvpOR5JcB7TSQioKpdgSKuVGETPErOHAzI2tRiglcXkmeFKDXroila9ADUGcAboqAxjQdEawuV36SBXmBRqUTP5HJfRCxGr1LBNMZly2t7e4JtsgNdbA1UWbHCxEzCo7GSAvBoUXtlpChxXZD72rHSThzoJoKf+Y6exKT9AEMbRmNLp/wFyZVS5dQG9sgcIOYyMXxhUOjI9pNJvfe2XN09Quf+7x0eKoF83GYcr722muqNh5GxCSLw2pEMv9lLDbgVMTlgBAmWawjWdE5NDAHIezOiwdA04gwhwaN3bZjOxPQF1XXx158AU+suVLc3krNjIifaBwro3ZokDgPYOwQbmhRndEgVOMVFlEeuJWUL/3+j99+5fDJzXseWbVxd1vvmBmAkclZC8FteP0JMwBkTUX93vty358pw4ez5dKT+/In00ueOqXcCydXPCV++Pe+DgD+0JYE7SPh/HU7AFxWBidawURw+ufuXOjDR84ARH7zJvnRATBEorzR+3wH9cxNLCpeGB/uOffu29cun747M1FcMG+aINtEgPRs5D5i/gyADV2Zd4rheQ3k3ejeOP1nZi7O9UsRP4+pA1CghTYmh4XqjKY6opy7titIKFgoLypRA62jM5YJyWBaAMOFN3Ln5Rdj4KwbhGNWICYgeI66uojmaYj+NlBOAqUqCtJVW7WyKmIGQAeAvtXXRifTMD8Tbm2Ni+eckWXE3QpJ26iYm9gyNH8q+r0aF2H9x14wSzCnjwoCQ7CxFY0aEZZoNp4P1BaLSBwYb6mljUb1jQ3EyqCGBgcYFwOJOCNb+a3Dr5TNXR6Gxk6tkbPU5/d+7/fgJtFAuw6A4IkzYVaKcz4ePEQgu7MenXHBMPy5lYfZKUOiB6AgzMRQxHOyQTxRr0hDWe0Cx2VzjnSXecGWGSLq537+p9TrnesWcjHDrRs2qQ6xykpEhfaFLVvWq6yI2QCtPgOJYNo3vvmNay3X7N7hcrk7nhOxBpxx2AvvYemvUrDVonEOINuCzq+KtsNrZa2DRFKDZPJs8ISSUtK7unutMO/t6xesc3f0imS7e/twxpUvZGFVNQ64qNHXZVWVnAbEgCJ6QOhLNEO6lLaalBQSinM/MScbE18OH66JF9IuqJrDNCMLpmFmynb06DsAJe7Z6AgsfKwQDXWn6IWFOCMfaIjl2HEevdDwS5MBJF+ysHxURb5KAVyRxBxuLZNIxD94BWGkYWNpWWiv/NwCEtCCS/6Un0BlUDVy5KcPULIMGEDv3C8SZPauLNkluQOOLXDwghvmtGEoG2QUVAUSyMInEuf5/clk5MEu8NesiZZR7QGhMJbCmzkI9k5N2zhHS9VrFTRaLEUpLslzUaTjXmimeTbFsUJZtEOe3qrUL/hw04DS52tXLpEmtiSh21fmHW9pl3FVyEAJJ3EJdc5a1QEYHolNerT9wqXLOAMygOcvXlaXQQWkAe6Btq9Lly3xAmbiMN6CgzrkaHH0bZBJOVWBqyDoAPAMCSZOggC4dC8qxUPFoacWf3qQDzK6FFERPngU9JCU/B7ZsNeTJCvFJ/SqWjbwpfuFFcgJ7SR6YI0B5/ITqzzwVFyMjSdKpWYXKO9ysiwZvAct2RbkJMdUI4mALAOU6BL9zP/K//R/pR9K8j48KlR0MPhBt6khSQcAirw5SeOp8lMTsWOY1ZFrskm8gyiRC7/oh7hTNvghWDVOisE7KR60QZpQpWeatBhw7yAADqB3q+5SftSiLc4xsHYx725DXYNloM1XbcN628oBSiMzqtgCkjBOZg/aYMXfQZhfwwUV0T8ckR9FNnFgIu2hEyq10gnJNoMG96divvLd06cOHnxWKfg3t7SWLV7qqBzT0GAqjgo4W+sWMO8Gu4AF6saNuHj14oVzo8MDXI44JnGDMqlFlI+lFEVO8Q0VkQggbkjku4XCtFCNtkyZP4E2WpLf1LFDiJzCII9gzlY4IlAQMujlfcBn8HyZ0FZZWFFTXlvZ8xfPezcWyLzVCIHZ6SkVeeeIHYmNk+DAZ3RkyIj4kiWVcaDuwICwTEBMK2AuFJMZ5KRzKvUCrGyW+kEGWPgAJd1XOdktnpOpkBf8NIoQXdfZGB70ifIhEH/ITnFCpAaohlgaShcOIm3f3j0AypO0mQphOGEZHQccgb6qVwa0+1P8AgiAmJAQBg3fpMCW7oGvOOS9MxG3yhuxS2PtWaM4gyUJJg10hZziaAmrduJTV5cBCUdjERargQCsmBxt1xlQLypUSve0ppBhUP/wd/+RVbOtLTfwnNdAkQuzUIq3UBIJSadLrNFZFEhLt2glehGLt/TZLxxwEvvwjUl7UYS6OtxdjWIyaMxORstt5QHWgYBSyyWtfxAq4Pybh9/SC9UAKAgN+oBFWMfnUmneVroXciQUL9iFOqf+E31EP9k9LMbjUU1LKQx6vVM87EpRu0qXVSwWJVB+EEQGOmmkbLbXDACha1OJCeeFCzKr8WanSxXazMmgHccYDpgYiEBcxWcsTRyQYgnQe+dvfP/VI9v2HVi7dV9zx6AOgGNAxYWxsv3/r0uACDc9yPzg9aP/TZosG8ERJTXz7rm3eO5PVH1kei5Desn9mToAsXImK5mlx/tf1QHIy5+LCH7B4huxtRsYjdXHtmE3AefdmSpamKkodrtn94m3D128+F6xP4tE8AbAIkDXFQA4oYcWdZGE7bCcQazUi7XfLueyYviuU5mMobBNq/gtnjQM6bYgNSn1PihtTPYUxXYEzXB02Bw8mqM9wYeX0F8HINsNXKASm9fspKLM1IP9+nWtsFK6IzTZPDFFBYvVCB0sDbE4gNaxJunnz5+z2vOBB3ajxVmWFy7EXac6I0bBdEV4CTPLzz77sSvWwl+J0zBtOpTT1nZSs9SEVd6OLXbC7jhMk8Jv37kTDtlK2j5GLbLjP4270W0nE/EkrAkhDJ/OG5gTgsCcLxJ5s1YrIg4dOiRFQ8O0QaAb4SUy/LWwKDLbgDpf1QgNn3hXzbFsaGekSGPUqEMyOImB0tUIN3/qALApizdi19DICGPfs2e3gfNka0N9t4EFxJ5giDFGzkoetQCrQ37w4EHQ5FfplWtXyhaVWUGkxwJb9sux1FZHQylAVER12HijpYV/wHaexHAGj4chCTgEMjHFLg68hRi34AUzDd+0tt00mmkSfv/+A6BBDATHk2ALrPDffJdfMEmhcXUTxLo7uvCBMiYWgTMxGQswPEr5S1umiFr0ZDS1Zn50ACzGgaclPvC/cuUal7Wyrp5/09NzLQkcwHEwsSVesDWg41f25NI5K66SWMHnqdCF0jSgK4pwRgi+oQ7JfrlKHarkA8kuOX+qhVGqgJV9OkphoHdESVTE4x1wSsKmBK/4pixVcWkTzkA1PXLKQ+uQD0OclAIl+qA60K5fa/biT7wCAUoe7x54EiL4CRN5sgwRj5ELOGzJLymoXagDZ1wN67bQPjZm1G7ctJ6Su6dC1fDBTPk92ggpRIZLWoQnnniCHMExbf7oIw+pyAk00mkROM6i0BxoHyFDJ9VOeVAKGYMA1m+bf8QcbHdWJEphThv1DQCPfWDhet6frkG4HUOQ9wk0lIIGeRwz2uWdyFI8BlsGJcOK6hra7kUpOf2Cpjiuyp/RG8DV4k8P0ROW/Aj0jiifZCDTHJNh6B2cVIr6yQCySmHoK92ARqafMd6f5AINDx8KJsi4p3aqRT1ogncQEIIVIANC4uBgIIZL8Qu4PJD0AjjIHpio3YMomfMPfeNfk7cCILpZO4sa43bVgcFhoI1Hyrdh/Sb4QYI70AEA1J8QAtdX6GKuFIMEbIlf0MlTlmxiMX31CmiBDwNFErqqR5t6fcIFHPTrHRMXZ1eugCwnlJDB2PzJucBNBsbDbjUDZonNpboMWNuvLPlhBzSSDGgY/VMpghM0vONnscefSICDIqooLo1zGB14otNpjEdgJ3pz+ovRiw2bNpdWLMXj0aFhw1bwVBGAiyqWoBoQEuUgbGW2jRijpyZdQdF38YJ9q+8mdRcXGi/BHzE6BDhxMmDAkMQTmPhECvAUWlmGgQSxEY+GmQlDfGAMeghIk9MYE5hp0AL+jBZPBHyKywlDMEHGXpCB6ujqUJ37fX1lnFTHskrehGnR6WVLFgmOIcbAjM85jtG9tgj0CWe0GUwUN5BpnwbM5YQVwZELZFTt/GzaQnwJPVqoOK3ARkiSndWWihBZkm9Hp4OcoxebmhZNoOJYZyDNC/RgC3lfMYEQW65f844oibiX6oKAAQbAaQW6VKegP1XhXHweFrsgj5mQxA34AwUgO/HIrBQgOjwPPvjw4HAs4CECaoDqWz29AAr0hdSuskY+/OFZv3LluQsXvFsSwNlpJAwg6bxBnrUrKyxWBFi9BZgwBCfi99zqt6z/uWee5aR0pTDKwYJMiWjgeeniRVoKSQy3fRl77a7zyQvtMg+jdnURHBIQSOJ+oYqB8uD2itpqbBkfjXWod2ZiuM52+pQBMtFAOsSxoMidBWYAfvM3f9OWNZBJnzVhKQaa00cs50tkaKEJMqhXFZhs8QZNpq64B22qmDiDvTgpP6KwAskswp9Xzl+UAiVov3HoTdT99m//Nnw6urt4A2hI0VMFnK5i5pF3jmmSMZwuScEKDAQQbqjzjo2YT6lU0dLWNTy+8K3vv779wcfWbXvwwvUeS4Cms3Pn7S79CR0AOuBJynDvS5b8l9Jzee7NJtEDZw9Uoe1XBn8mCB/+lf/DiSlFcUL0DgjGamZkTgAlpoL3FH8fzn3puQz3pafwl8oH/PdxCFN1DR8efngGQAdATmvw3+8AQCQ7R2hhfnZRefGd6fGChemKkvz21mvH3znc1Xp1WemcC4NpY0w6GRexlzdbnI8ocOibNTJGKOJ71G+QPxRXy+yiX0G/FwcXupbYIiD7I7NSce6/g0IxE77OsXa4VxwEasVxWm4EWNamWvQPvmMWtOrRn7RvoCCfnjCKxFJeQsfAsWT00EiSUoIcWmr6i5/UzlIn3XstJ/Ok51euXKZajz32qKrtLGD7JgFYKFmsW7eWEpZWiDnmDx96iy81CI00vsgxxazDpYpclgDDJxvfBXyA6DBQdUdTOFUmvGW2sa3JDYKrVqWdPxbAsDimKrM5CRbBUmg41nFQX/nKV3g/dsSXfvzjH4dzcg6+osifgh5z/nQG1ZyYbrn8vuIzNLwQseIMx8M/qIgP9DBhbQSKnGLCkA2+WvxDCZPWNTTU63i89NJLIKxYVqVFsDVCa8iZqAsy2lxhGYsGB5fkVBD5+x7at2nzhs3bNvN+WIp2yuwoGHIw0MDHSoEhDQYzOTEoSdEAgYAigpMHT4kDQIRAz5+aSyRv2rx1zZp17Tc7jKKSpvyKG+tNPMQE571KQaki7p0MrJpbACwpKeZFsQjyFy6e46yMJvB4jigMfLJDpZCmkyNKcbiqC1L4n+//8McgmxOW2R4TZftvD+Je7LvTd1oooFTuzCFZHhL3kMmRAggB4gOWj8IliMEEZByw9z3xIUWTqQ2FM1+aHDiee5ICy+lSs9BG82IR6saOTwqsFHJgIsWfftEoc3jFvt70olIiUFBjhJmqQ1GCABmfCA6q+sD+9A5+yqkKkCXKzJTgpgqJitAiHk6iipDsGFq6im+BcEHsIhCFAlVXuxJ6dECv0vof+FM2uiqFyKChLOagwjsp0CsA/+Iv/kI8Nj0Z88as4O///b+ftJfUqIf8WISfWjEIqBRYs8stN5Qtka7FFJ5pszSs+oqrVq8NHroYJGvZYUV/PJZAw5N1KK4icLzrkMiGh/BJzFeW4cCWV8MBtfvqSQz0p0845pGiLDiciXd8g550mVWqrJwo9ZIyg+xPjxd1yZMTrgyAYD6AMqgF5xVXNmUOJsSVVlNKEQexQh6X0KI60NTuT79gYjJ6k+ygJA/qeDNlwclQKJGulE9+FYF//utf+1LS1+jIhudaagMVoHpUqtRi4PXK2pi4hwfZLCpfLLolG3gTpFqBIwA2Q11ovxfFGbNE1cOYCEUSPkFCfqCwD6KQQBLThQfPArghQt192ZCEOwnFKWfIWT3S2irwxRcweW1txcjgiLPjamuqGDBTBcRXpKod5uDjI9lL50Y9qrMry626MKdhmC6zimrrnCe1STAnxXHv9EDVL7/6itZszwN7V7gLpGm1pqjnVq9Rn+CsYTLDcllZ/DfK66vGzep814nkzU9UVy7FemzhcI2Gshm1IBk5NA8VDAMc0iJFTZ0XuKnXn+J4MSVMCIUsOE3hFNaBhm8yHD/2LjigodG4dYqlaLZOVyLq4MGD4INAEPjmBBhykcH48UB/H96yVUY4NjKMfBhSuLKSiPhl48VMtBOudKLhwnAPbzlQnRPxGeQ1DBDDap9w0slxCCQUZZGgIojBSqJsxtK0FlpHWBE0KbuFQkHhJjFBkoAwBxyJChIZPVQ1ciTCHw5yaj/UiAlwJh0KgAkQoxWwUi/k8QQtujFJeZSl+hIRbuAKw70jHJ6kA4Jajp84QeU+81OfxW2g1E4Juzo60+Iia+LXrVlLc1577TV1Pfboow/s26e4TWAgUzDMRAI8aTU3BE9V03bpgMPW4iKbzv+X//VLTsnAQ406IW5aHwbCLpQSOAuptSLgCE0kOhE0wu7sBgBVpGabZNUrEflUxYNdsCVoMwBk5xQgutHf0w2Z+blYa4ux2O7SIoc8YuSRo0fLFy3WRbHQCOtAVhfgb7zxhhetuxRyx0ZPct9qpCpCFnVBldy//OUvW/uLQGjITC3JPUUwMoCAh23NLb/4i79I1jjwr/6X//mf/JN/ojqy0H8OAS1direKaOZJwWMUR1+XvgHFOuTEapqgODKRk9JpzltvvbVu47b+odmvvfSjHQ89vn77Q2eudJgBmMsrmr9jw+j/jw5AjnW5l4yR7wfc3lN67ut9L/4k0JSNKhK095SS4Nz3myv+ofSYwKXD0gHBEyohcwIoMRX8oLha/oYdABBSyfTPX90B0BUxls9z2kFtmNARnUGbCKTIpmDx+NxkwYIThBbaWq+/d/z16f62oruTwmVLIJ3h80EHIBbwEDQDVdw8gDU9InWaAwtcIhuOLrofIny70oUJ7meN28GYTNRvQCdod3pTdI30ATRs9nbFsKWYFbugJ0PqAGjmTS/YAqi4s3rYDnv0VeVyxiaEbJmy2l1VSS1lYw5WnlKn5UuXUT/6yeuOT4wJhd02yL5UJ5hgjOm0NH6McvJgb7z5pqPA+D1ORjwIgps0hIkcBU9laYN0a2n8SVG7+K4VlZb9MkySNdIiv+FMJjM8GEsvert74GmdPBx4Cbh1dvfA+fHHH+dgzcUxOr4I5r7iG91Qygvb98DZ1AvTADa5ZTYIYHKkHIJSBAHt/y9v/wHl2XUeBp5d1ZWrK1d1VVfq6hyRGjk3ABGEmIMkUoGSRtLY41WwtbZlH9srj1ZztGfWlmWlGdmmSIlKJMVMAiQCASJnoHPu6lA5d+Vctb/v3e4/W00QI+nM2XeAf7+6797vfvl+N0PAnyQCLGgQVtYSBt7SgNR7H3mPRD1/YZJZQeipRUGt1UBP7yc/+UnIG33QvjBzPOEtvSAQen/0R38EE5k1TK1OhCwvcdobF4TJhskgrKcHHwzUTTLYaK0gZJCAUfwzYtWV2gLGDnkFPSgia1VwBdLRyFc3t7S98spr+omcEtIA5z2swsdtg9fynD57xicHyaPOVKdGh15t37ZNu4k/Bw69zW9wp6Y3sQICNlFCDCjeEs5GrImAt1Qj4A56wk/nvMFheGjECKEreqjWhJHRK+uUjPT5milkrFlHCKLgAxmYwB+x+KNe/FeLuV/apWrDYZyegqntUCMRYAXImBBUpMnztQWEJejCYZ45PbQXeiryIIQstEqqBsoad3DUxXmiCA/BxA0O2VeOFDKkSSLJa1m3nOr1C7giapfBr4LyEDElIa9Qtqwr4hNo+DYyOCTRuX8KGh6FM+NGmmW3MISVR2eB+sHNBEsapoSzUoCDIx7AIiRYKnvHHbfKBnOD8SplEWoBGary461PSuEhoqRgCKonp6ZN10BYTiMQaoGzUMe8EC3iGADBZJmlK1hSGnGgqkkNTKKntxRen1Z+2fBBfhm8y19dFQMKqiM1MvKuCD74Cm05JRIuqYEPspTEcOLDNymKyO8rIESgICkA4kUtyIEhGhWUza9sHuQri6WyKaUWNKoFTiAjlo7J4BOmedSVACb8YZ5Q5QXlAVAVEAOfgEgkIZBEL0Mqi6K83/kXn6SXSbEMqFC+TZs2K+aIShK3LEbKbbfeoYAoCkRuGW1eonBentiFVKAoM1P3ArrKkj2IJNJ2Q/mZlqE+7gYxWIARVIHGKILXFBE7ALTR2bpBL2gASk4ncOEFAxAL4gtMNm/drgp2awedaLtiXXQ8gAUwBUzwJ11KKRs4yPYuA15Yl0nuBXkFGomp8YmLPd3CesxVu8xGGvhrrCQzV0U6upRLa+vo4AH1Vp0irY9EP0VqMdAVy46jB4YEJde4yGvNct7CjN9UNTmBTFS6TNgoEkUpGZMHL++TWmws9k5aCISDRsjotV8kQwNk2bgw3pD4GbX1h5igk0Ac6AJNcbiBaYU3DuAwFecOGBUgSMBMOVXR29OdhIhd73noQZzEQ/wZGxkiTWIltZa2jXRR20ag+A950MDhWwXl0qGkOHw8vjoFDHzp+nteUJQ0Tx5RO/VwtDzOw5D5kbJTvw23QzI1UVRcLXDwyQvS8AG3sS5ZLM0BGTQqys5hCBMai1feOUr5oQpn+MPHxJA/sU4KsBohoLBObApz7MIiiZBRvK29/aMf/bgpfkwGHDR1CRFUp9mD25ZNm5GprDnK0xYvrl2rdbRgDJmAEzrmJ6sO73NlMSitxn9U2/5rRalNYy5x4/soJx5+8H3vh55xdKTx09DGN/g4Yo+G2NQOE7TDVtiBapmxBYYS6Y8aPaiWHnFJeYn+yS37bkLjiSOHwdzQtN7QIIZrBTvPXaiOizKWnn/hhUeyes0A4JJKcRv+ggDNPFQRiyg84d2gQYH1H6jNmdMnvSBWTogJ1hXEQ/LCJRTBEL1gyqw7ccsNN5E7aF/+8pfvvvee1ObRNLf0gHng4EGEWOeDFkV0Dj/ysY/jm6phDgKtoB4qwhOl6A/1QzWUPv3pT//27/ynw8cv/tWXHr3utnu37r3t7eMX27dft5xf5ESZd18CREYA5n695J5r0tOfvv5gOpWTDqv0eE8pOVBXv+TgXJ3oXZOJ+RyUd3C4QY/M3lPOa+o11vaO6Tn41+bPAmWhsnQEZz+B9rt2AOLI1Ks7APKvKzMrPci5FhWsGRsbWF9fLZB/86WnDjz/aMHKlMBgjeM7VxedMWa9flZdhPs4BA6nyJc7M1E0HmhonLJFAtG3CEpjX6axYiZjJwBuBB95U/G7nQCG4ITwa1aM28d8dfAqOgAZbCcJr9XJWDFgWhibfQNC4eUd1caOUsvqhPjUnMFHHmYCAQqGGfxYzOtu2cLB0vma2mo2YhW+nN/73vcc1EvVuS9OYHxiTI/3qA1v01PGiY3x00DjGnIeO3oCNB5PGNHQsN5Ql2PYVE2BLaqw8sWCXzUymXOdZxkXR+TTxKVRwUpz04ZHHnkYyfywxoj92mDKcvkoEQltZ1ZqYWLQDmyzA7iYP/cOMSbjNg2QVeqdNyMppsTbgKki2bAy2FIUl8Nw76r2icfTUxJpcQt2PCv13HPP+fTTP/1T3mWGDAJhVVMRo1f8AA/Div0CixyWDh+dFIfnQID7gs/mzR1l60o7tmxm2mrRnkLGEAMX7UUD5AhRXoL4UASIF9DA4WQQpWq2rxb+BHy89SfZkQKKfLXa2yltTRuatZ4CCU4SdZu2bOMTsoNNVw4fPSLKdMlPjH+NX1qaX7jt1lsBF5MwK7PgTmzjLZOHwUyrWxka3pI7NSBo3DZFgHD1OuxE4C/4twyBGlvCZss1aNlt0zEoDn/jgFBFL47hMH8FDoqok6/cnXql4yEOYKOVb2RKWHBAMhrBISBoEDrCvZMj5gCirOOr6BKJKOITmCpCApy94wDRa+B8ojZ+N3bEie9eQMYcwJPCQ5vb9C4bsB4vfK/uGVmQoJwgJzQAhLl6pZCXX7ipCxUyq5eMfK0sX+eWTMiozr0fDFONCK+rjXUHEFAF2PisOkOZbrQASl2kI4NWiSmBo7jBNbTjuV9xXcpDrITuXR6QKZg/VY0QM0IQ088yRY450INzT18/ipTSLSwtj66RexhorOKJcDnr6mNNAUGjhfILLdROQAkNdUFAtsRheaxPxBlVgwMHgk5WphSnIUIgRMJKfEYp4HhI0GmkkhBRSiIQgI+cgHsSOcDSCoxKNKIOB5hJYqkqZMB2QMBUSvENcZNpDNvDLUdakrg80FDKCzFBLCseRwBTHpjnVC4hI92L2j0A+sWEvPOvfcMVD6H99lKtb1D91FSEAk4vQRUbEGu6FRw4w4EYffF8F9/nU/JTLJN4EmHq4zSZFmeqMiolpaaqAt44xb/wcRAlM4vA+D6JPqEWqVAhCatxIiTOlgyBqTXJsVI3AIU1dQ2AwMTjvnfRnnnqsdG47UtxKIktABRDI4/kVAETbKKR0vGKzzHG43gJ56JojXDfhUQclpzY3dPTpyzPznEDaJbWSljnxGOLDV5bt2y3wcvs9vjUJPdgSjodh5GvGcqEZH3r+GBfa3MTFiXRUlxYMQxgiRlK0FAXgKoLktfGuhoZEqpYIQMFZS3aA5hLZ8ygGcbgPdXrHWPJwlc5QUYF1WSK6vVuIzL+INn7wtJy38CAaXqctA5V4kB/n7JykpQLDfCZDhEoCN5phlJS6Kiqk/ZjJoB+oU3cIk4oKW4wyXY69SLBV8gQKHVUSgCdAsHHH3/cJ2PMVMV4W29fH00AmY6qVE6azUXqI+lAqkWjpQrWDg4cxBBQBVkizuAhj6+FkMj5YruqQaBX7FMRS4CQgEw+gugpG7UhX39SSARyKDpUMmskjh0/TkHsHeTEkeNRRAOWJMXVxmLl7IHqhXPn/vbLX8b8Ldu20nOY2/XxiU98Ql1wIBFlFQRZSuKGrkJlda2Ipra6Bv44bBjbJmDa7qpdEOgNomCIhw5Tw70Dh+IiXmgTNwZ6kZlPSd1s9ZpqoCQ4QEP4vl17dur46QBoIDc01MvZ19tNMeTBQ4toLQFyuoVlhnffex/x2WmACZhs0FF1dIxblJ90UvTz+uuvc5e/9Eu/xKYgrDuByVwEAh966CEc9kIPUZrIxHmqhbe/93u/B+f77rwbRYgFxHFJHB9JSdmyfRtfqR/yb/7Nv4mhwYICaJsI2tDSSiJsAZu9EBNmQonoCR05cPOuiD/3XH9z39DMZ/7qK7fd/7BjQG0CbmjbaglQUXG5FSnvuAQoll5mjyr8m34vJ2V/5tLTC4RTtmvSUxGJ16Sn/DmAuZdcei5/+hQeKHtkQB3hkr5fjJUsM3rTOz7TIrd4Xw0hgfWb8qQiud8A/EM6AC4CwHMLujyKe7JSsWhWR0YxBbMZgOg1JIBxSE+E7MsG5tdGtpXC1dmuoy8/++Q3Rof7G9c7Hnp+cXaqtLhgdc0iwLDNQjjgVJEXK4RWViwo8mvsDF0UyTxAAI2xNHdVO4wt0ktjzlm2OFdhrX+zmMMWYUt7dANkUCRcgZ5B3PsLUwM1VvSUmVPAT/yhObQR/Jq4L7wMPw1dobSkOEaOHRwpA9zsYgSD3+BvAWSwNJn2GkhiCGyNSfJO4OzatYPeMgFWE2KaizAIKD6BEeHk9u0RB1N+Wq290K5zUdZMPPjQfpsg6Co4gnV1WZoL/2NHjljw4xYC1SminyDGtY7oxKnTBjx5MFPQDHb//v3KMkwOgSdRFz8JK5aIBMGIDnzIMevVQIkcAUSI/IYqNNP4oBR7UVy6O/iM63OwjllTyvFHaNeXvvnmfYIwOMhvGQLrk9nvhbOdeMLbJJSQxls+9dRTUgDHJZ7fmTlCOtW5rGBweEA5fgm7HFlowgGq6L37zrtUqpVXhBApOXapejU/bjMgU+hZVSWzDPr8qPCkwEXjCysIZKPVq85sNv4ihc4afzGiIQR3q71RpC995avgEHS0XOIwg8M1tefOnOWd9t5wPXJUyv3yKsbs6Ak3jkxdU7Lm7iwhdivRk08+CTFPOli2r7e/okqbEgOofhsaGxkokVE4+mCPfaKFUDBKW6l2+qYuD2S8+yUOVZB4ugdA0MI2UM3NakHEWhAmO2WhKl1zibEAurhKClTh7Cse+vVO04jA4wWX6JVPgfS6aEA9oEEJdcqqixbJ4wWv6AMLVC/ydQBkxmqf6IMHab6qhdRkgINPKFVX0nBfoYRdletiTaavJI7P0oU39913j848/w8OCNnodpDGjcsMByohBPIOMUA0srIlHabS1TW1f/zHf2zUVToOMAHEqk5opNXASYTIj5/wV4pEcFhOfCivqJQCHww00IYEU1A4LIpIHPPVMaBYzXI18dpT71QOXTRTr496wwEhEIYeJEnfC4CkqbhaKJ48ioCP35jsHbEwhJjacQzC3lMGpWTAYTA90hOQZNfyyEBM+OMBTYpsEkUpcPMnzUEvBKDBVaoCBMYOz4SbPD5J9+KBCf9DrBL5VWfdQkl+XCJfZusdhPCE2QIccNQLFLryvvO5/69wUOzlD3qP4xUVlXI4ATOCuegEz+phkyJtVqyuph4UNoyeZLGwJyp8RxXVhIdPflMFZSXWxsTOS2WJn5uTLnYhCXRCVCL2ISaJ2Roqn1Rt3g1kB3wpiDArLzl9ffSnn/0e+A888MCsg+FWnfe9VOaE57IYxRF2wI110QDso/qwwiB4kiKpqKiuoTqJnOkK76SbaZHZNR+otlgiLSmTGXr799+3+7od+O/kB0dY4nJxWblOpLtfFBFxuIPUEiAnRahFkVl7GKyniVazoLevW0ziNAlXFzsc9/y5i1PTEzfdeLMNxNVVtZbOr4u1i5XWeFFExuad9kOVnOgZQVBig0YCKRwDXAbdm6LCYkwjFLor5uOF+XoQgpzsNnWgKLeRWtGhANSkAXVWHWa67xOXuKSl5UUcFr+ODA0iBxAs9UnHDPnkyOnLr+9HL32lRvCBhnphiKs0VaW4t3lLh4GlZJ8MjGJQJ4TgD4GSBe00MMwHiZWZDUVWl/x+kUZhOB2/REN8qPCianJUUF2MUaVEQysAJwJqjTMqxQGaLTPMVSSblxJDfNkOaTopJZmlPJQQuyQiB1F4Rb72ADz++JP2AKCUjqkO5zVdicOosIITOarjyEzlTM3MCIVt6pWNwxLN80pELzL+2Mc+BjgxQQm7vMDT/pD5xWXLwyzv8RUOiCIFps6ggN2yebNBEc2wd8ef44M96PQTEEwGhOtEJkygZDeFDGokI/RqdNlRS1sztCvKy4zQb25vw1jHcZMgNhIxG9FZvXChy8lLtfUNuAETzh3++lF6Gl4AF9aoEd88tMJKIfiggnzb21r058ka30QnSRPAl5NQ8FBBctdCa+R08/Zs30msEvFTd14YBD1o2z9HMz/04Q9jtX6CPGonxHWVVXwFAQGoFNpJh6r7E8eQ4Jf3AIQK5ReWXewd/+xff1UHoLZ564WBqfXt23QA3uUY0NQBoLpo9+Recn9KSYnpFyYpW5Z8ORROmd8xPeXPZci95OCklATce5x/mT1SMJAekrLHe3p8pFEeL4BYSZ9hfRmTa6rLgc29/KM6AFmcb27C1tfL/QfwosYI5KMf4Mx+PYSVopX5pfGuvgvHX3z+e4P9PS1NtU73nBwfLi92Yn+YoSeosOQnBnet6wchmjc2CiCiaEWABtLcQcTPi8BbymOKIGXT3xCju7VALmuEsMFZC1b80w1byGPdvw7SWpf82odVKRCx5CObIY6BNxOmNFNHAwrW7qvORXjUSQeA9yBYSmVoTotCITUZifk8FX2zxZQ1SeQ2GRHNZ6p0/pZbb2cRlJCRWijPBcmjg+rkQKX8yQT4Rok6HrfdeZs1ksaOdW5p8tiIQ9NH3F1Iw3kP4aYZRfFutW1A2XT0kaPH+beTp08DQslZOjimCpWFMNv0m2Jo9pKsbN/1NyS00YgccPhPmARXs4lEVgZb/hNALkIHE5KcDIos0fZ85StfAfOBB/bjDw+J7XV1NdECZrZWUVrGMwPomg4+DWJ/+Id/SD8F62wQe7XgquDBLNrWWLnrw13moivIfP5v/oZ84YmQhro44gJK+E/EkDSyAHJTSyscoAcavnECvJnwEdulA6IUlOgPV+PYiieffMbtMVgh9J+entFpefLp70LvXOcFPurYiZN4qzoCdXq3E0jxfGx4hIBCKBWxEfPlV1+JYcFsDzHcDNbxhySrjeOdLIWFDO/KvcwtLMKzr38Ah8kFG40rQ8bp25ij9vBORTHhrzotgt/EQ2xEGpw1YdiuFcOQ5Meclw+TxFIkg6YVkJO6+lNF1AwCXiSCPDV9+eIdKZRHQe0IGiEDoEqRoF7FkwJUVMYtDQSkXsqTRI+NcJDI1ZOUtkCUJVGKHW5kBDL2Qh4+0cxlISYmw4S2AAI31flT1XiiXl+XsxX/5uWy99i9qtNHcAMZAnIqYn6PTgILgoo0GeqCgOZMKZ+goQo5VUon33r7ABr15dLYvK9YTbLQxgF5qBwEkIZR2EtJpXiXxxHSCSBoJAVsb190wAiXlREoGjkP6qGxwzQVUV06qRTFDvm64i2LE0Dzgj9iSdDkAUctiIKDPz1ewrddWRYFVTQCiwqfaC+1BBCq3qGakPSVeiRaZFMvPmAINVCRdF/VFa1bNuoPAk2QriIMNCLuxSPR4wUOHqASZIneYR6ZS0uogdEVkEGDs1q8YClU1UKBPV5AyKCu5n3xj/4Dy2RXAWh1RUPu/igGc+TYCRF/S1t0yxx5ZshQv1xPvbS4TB3gUkFRIMcEY47GO8LUJFZgzxjqHU83d7TjC+Swg1IK4MQ0JCEzaDq+ssEJQJVGjRuaQYYMd4+q0Uuxi8gavE0dm/0K4PnHN9468OM//uOOOLSrrKGuxvn4+EWoSE0BouIEQ28QCRNfgVLR7OxMTX0N3YIzNES+qrZpLCSxsCA9274WK+xZjsjPxPXQYPdtd9zywAMPtra3AXWm8zx7E1chqrImvLaV247lJXUKAQHzAt1dFzdtMi11WiPR3u4A6bnsYPph+tnT02t7QmNjU21tzYMPPmQwOFrWbJ6LanqSMkmxa5bRYj4nBXOVQkl7oCK8UrngieA9tI10uDBl5WRphmcQzqiuv/GGvXuv1+VEvpx4bqzNDjx/zs3OMA9FNHsnjh0VzoJjaF/bICe6aAxmyiPFV0VQlxDALgIVT6vo4KG3KRPIxCf+4/gUx0CKgf/sxycqziAtH6fl0PMrGxugBqHLbiWbmRHR+kUXlPDZV1UoSMrEh7cebEk4UAkzBklPkEnfIE+USgka6LciCXLKA2GcAZxyIgpiUFWLwYRdu/bY/0050+4LZJoBwHnTl7KZwAUKZKJhUtYDMSrzzmJxxeHPM6qai4EeNBRXo0QP/2j9FcfkdF0RD1qoKKJskpMNCcA64V83FUwtllkCrNuxaydkZIYnQtCLaszxUGlqAB9CARw0fzpmUWePBL/whS9sbGmGs0Vu7FEGrDaH7n5E3dobbrzR/UjqtQmMqaZWhEbp+WMUUaoIIQRnxka4gKsaZhw7f+4sYvWo2QvdA5aYYAISkjUeinv/y7/8S0WoyuxEzKhKQVQae+PyKMNbBw/Q2M3pntHmZimIBRZWdBWN/lTKr+LME43wxwovYi+JGFJQvO7k2f7cDIB7AFIHoKCw9F1mAGACvif3cvWfEtOTEiHjz5T56vRc8cu5r8BMyKeyV//m4OQKpq/ZHGQMdiQ4slGYRDvJevDTV+LwWILsmLKUN/2T+5Ut4ZlL8RLPP2YG4PsdADCjwmz/bvx7mWlmAIInDgWqLFpYmhl96YVn33jlBatvykvylmYni/KdBKJRimEqtBgSMSyCkf5PW4r9CeF0EhRjtMTfYzm7/JoyAaJQn2lEN2LFugIZo31yuJVfmTKWrFlrtrSwxAKOfCt7nAEejrdkdGjYcYQaappJP4GNdZnZJCRm6n5TquQQnK9i2qAqO+WQAlNLqPI2MjMlfWAuQgvF9aFUERk4YebZ2XnOOw/A5OVhXEoxXnTIxhtD0svDDz988223WsdhlYghc/TOz8bJJxo1vnT3zu1Gc1z33tzSRJl5bG5Q27Fly7bX33ybkuM8VMHkVbwLIFgfA5GTIbAI5EBv6tIYJywnIIydW4Ab+FDiUiAJMVz1CzHBmV4H793a1sy6NXC8vR1DXDG3zJDF7mrEDaxwpjucF2fAXjAori5/aqAFT9w1G+QQUKouBb/1rW/pHhg7sgpf9MiP8fDqNTngMFDYqo6fMe/EK3JTcBPMuplycCSW84EmA+YgTUXcHQ6g18MTcg4+cUpDw8M29Lk3JkHDGUuP3jxwAEsNvhhKMAsESW6H549g3fHfw0Md7RsNXBKWNTHYYu0ANyVYoyH2E0pHhf6jlWgUkML50yIuOb1QBkGk80Dd+sUZ2qwE8a7uHp9koCeN2YwofNBI6L7yUb56IQvMoT/kojmWqEabofENWPkJzi/hKoIDSMYxbk1Z4lCQCZSVr1OvDDRNRIt14KiO85Sf0IFSioqmSMAIt5zygOCXaOCApbKhlFBUqjECgUqAbDeaBydlxnb5YQIlA1JwVhaZ0CY1dZFCQ0MdUIAobjIOnx1GGha8ugLJaBatU1qM6FMRfFYX/fEJOWqRogqg/FLI0K2sW+IdMjBEr9YTmXCm7UaRUpyjewYZBeGpiOLIzNgyic8pvbo2bqyTzpTEhNTYAir4sxR9PJtpmeott96MHNnQIqLDB7MNgBvIA4doaBF+MiIw0WIjkRpJFnogIxxzpCfm+8UNjxcky+kTDQQ2cU8RFUGYTAHBYe/yo4WA/CZrpQYkiCjYYiyEfQUKqjL7kz3CRzbOy59AgQPP3LtsuCFREdn8Aq4DIN3SLGVhCIhfYGWDrfzqAgQ0T8Iq7yt/8r/CEkfCwU2M8xG2ywNnAF5WcwIIs8mG87J+g8B6u0MpEYx9FJTfpBOCA5TTJEU4LCxj2MQfDmU+ej9kQ+2gKCcG+RMqeJTwllnt2DE3O22tKl7wAh2bY4m52TroaQUD+5lZBmmV3uf/5osWNuzevdeNcrt2bOPjPCpFZCIbeaoWxkmEJATUHqLKW3P3vXcbdBC5GjhnqCVFcSCmzGo3aiSbObJsCWVRhuGQcZzTp487rBDJoiU3quqwufDFhiH3uGaXZrg5oLXR5eRlIdS5qWltRmtLe09vl6vgDbr4NQBfWVF9tvO0UX93CVt0ZNSqrrbhgQfvLy8KneD4oEokFI7PFafSacYjtsMKPkJ7gG+4zVChTaGJTMjlE+qwHXXJ72CXiM2oFVBmAPZcd4OtF2wMc1Thq6uUkVlaErsLsJ2WmAcwTUy4EFAdS1aW0siPUYoQPd+n0mQbPtE5TPNisax5QIgxGPKV09oSEiQ7QDCZYdMQnT2bAfQh4Yw0OMuMap/AwWqtAhHrRahdy+GRKM/uPdclPYZM8noolTO5AN0A7EKagF5BSJoBSAxRykMToCFFLTRBdcjUeHAN2hIDceZ2FpYWCRdMGXDy0IGDKtII0edb9t1smQqlQqDdOq3ZNSVG9KHHm2AaAlFkd6+WFfJqodWYRlimBW6/8w5DqgYjTTRLQQ4EKsrK4QNnv5BToxfqp5OAIZou71LwljjoEhoRgo3gp446KSSFobruAWBEn/n0/1DpjXv3yGbbLnEnsEePnXA/DsswKsVdsk0zAB54hlktLaERaSSiS4CB/+E//Adrk+gzHGSDw7e+GesD77vvPsjL6VcVUmRIDR5emXzA5wceeIA7mxobVzvuSbcFIqmcTsW6qkoZeCD+hG5wu9SSiKdnY6QTpcpSIcJFGv0EwUcq5ytlw5BoLSpqj57s/tO//PKt972nvnV719BM48btZgDe5R6Aa5YAwSopkpfcu5T0SMHbd0yP3FfKXskeCpnyZx//zk8uXeb0IXtZKXSUTXbyvT9Rnb7KjIFJ6ISSKyuWNeYt0s9BkD9XJJd49Ysx9+zP6B4olv1ko0fvvARIlizgz3KmJRCKS8oKBqjs5fLv2tWliuKluckRN4KdOnrgdReELU431ZbNz0642nfNcpBAtRzpiYTYCpx1AEBI23Ot+AGQiD30X9wvs16DPoBdAaburPdxqrNThEwC+GRSwW+2Rdi4f2y30iYKgkz4uPY1nfc/ONBnYBLCrICeYKl6laKoDD9t34SVdJPJMlhqmXCgYx64ycYWWLQxSJrJRiie0JkVgHngQBzexdj5BzrPBgUovDHnCSxh8dIy+KoDYOb35ZdfOnLsqJxsp3JdbNPnPUQ2kKTYblzht8E33GDc7b/83u87JOCpp56m+XgFDZzRbrJH2aiEZldxJqMuHg8Vvd0XLaOCOQRSYOeT2rWh3BfISGCePAbbQQJh8o1YksYsDOTfeGPMIWjoWVY2UBhShvDS8oIiOgDfyO6usbwTQFWgTn4YgqxS7GKJmIBwiw26e7sEbVav45V+BbYb0uJVkEDEpjqSK4CY5V7dPT3an+27diqrFDGBw/NAGJke5POTuk9+oxGpqbnjjruMAaldfgzEisJse97hwyccYtexaYt6JWKI4ysG+3t3bNlqdQq50CqiFDTpYjkJwwwABjqU3Bdjeeg1z6QJ0NUcGRlifNLBn52b7+rq4VfdNkCCOpmqFnnQHOhpYd2rg9vI8VADXku6gjKQsl/8wfzktdDVdeEiVvOZmKwIPFXkK+fJtye5y5+kKc/JU6flp40SMRMEvPJ4V0oizkCMpIDCwJHRYXymPMDCRCIypYMAGoVRMP1Ju7SPQwODMDS8pZbUJGkNyQvypKwIyBopcMCUculSnNfknaWIyXICxwABAABJREFUx8W91BIh1ZUx7KhFCAwb4uRuqoIKPFGRGvXKUAcOnigrHRBaAUn6gyF+5bSEQtPvuLu9e3ckOwIKvaqgDOB4wfCEGA5oy2BIfCIfXTsk0Hxtrr2LKLUEiPkkpQUNHEaPUggoi1GwBVBjTbd1VhmFyASSuriQgeTkRIy+YZGqoeqBtnfFSVlOmPjTAw7pIxmBEhErRToZEdDA4EhZaUzQJXtUnKKCJgNJgS+zimSGlSeRnCCQIFo8OMA3SRRd+wVW/vQkTOTJYZXJCBrjkFGpDGpRBO0qxS71JjlKARk+nrw3HvsM6CgJtZ6N7iOFx6CGxg2qdCaJUKm+br2AUuwO4w2NzfJTEe9iDhQKGclVmMJspAOdokYvkOPEe3u6AFcrgIAgQCRNjUCQB4pkRqgcgfyWD8OVeMYnp+QsWxc3Dbd3bLro+MjpqcoKd5vWWNP86uuvu52RCtbVVN1ww3V8N/hAYTTiEYZa8OkuVcMLnRa64kSUkYlYaSdGoX+KXBoewx0K5HddWcz36cE55wGc0JWpCSd78pKwhZLLRywXAdxkj2gpE8miyAa0DU0tSQmkg6+hITjOTq8ba82xWiNqT5KFTDrQUv73//3/o0HhQIvyA22s07RQWbIHh6JgiG4AhiCNdETqsEUO5shvGoTSQPKBBx54+umn8YEG69oSBzJl86uBOXr82Pjk3C233bJ3724W7kwbyOuSgU+IiK1YF0tZ6C5TB98MwNHDh7g578QKporAJyY0QhJ11F1B7IWhx3kgOMzLi4bJnSjhQL7CO4JIMTHmq9Ehd9pR5KMICbjH74CJXgCV4rOS6yF3pJGaFufM2XNEAwGJkASTeaMCjdIB8S4K1w3ApZjYzU7YkI32hz1nE3zefaWlkMdSXyGs6rvvuce52pTcXTyw4lZoggEkLgkTTHa7BwCljJwVGB9wDCgB3f/AfrphcAWSHm2YJhO2+M+M8U0V6iKpYyeOc0w37ruptbmFCVA52SxpgAz8tfHCmKR7GNLb3RPd4LlZkoKhPOB4wEEp3mJj4oAuh86td5xvaKwH9juPPRpcWhNjRbZFYixWQ7W3b6CpxQCPgaVy6zH4SpggDSj6gzSMhQAIANIZTe9HPvIRFvfcc8+RPg4I0HAGPhBOjljx9GIlD8Yqq1NK0HiLFa2NlD/GCwBpbm0xxU+spHDH3XdRKv0QIqOueEUDgeXE8ZAO+BM0egIxsiZQdoSZ+IBSwmKDE9MLx071fPovvpQ6AD0jc00dO2aXbL8veZcZAMBV7ffql9yfPqWv6ZcqpmxZcpRK6e+eP329+jcHJ1cwe1kpyl+rCSAsf2KpJ2VAsodE0otfVLtFcW1+oVg+By1h5TeX8nfhx/r7VFHkvIz8u3UAYudt9kT+7DB+f0nMSl/uAFw+0FPamuXigjXz0+O1FaUzk8MvP/vEuZOHCvPm8t0YYP7YZY2L0asEJoBkoCP2j1mFWCDkM7R1cWldjOVzaM70tOp5IdIJ3lFO+Xm6EC4LMN3uuq+sw5BxiVbgl2ZLByAmfNbG/qvg1ZLJ2DjsIVi3Gm220I8hu1MHTBsjg9X5scPE5L6vgmi2JjEa2Gx6XTNBtdra2mFFOemqF46IWko358wA5eH/DTz7hY50WMjDoIzRqJ2LQPLJM6efe+7ZhaV5tgOI4wR4V4E1ezSwBbgdNRj7Z3/2WaGnPLa3zi2sOAkXBHkYYHLv8ESZABHVIKAGcK7DLZnr62udZccc1CiFyXBlHr4OBxgU9whD79BjQQbpHUzEkEG+6647kYB2JolQvkVFIFtahUAQQHv68Sd5dYsAxUYywErtGAWaPKI6TYCwD3oichx+9rlnzCoKKNWrq8Yb8IG8kGEkbhmj+ApLbXlLHp7IhOOzC9GYgmn8VeeEG+RvcRu9cADWVzjs37+/Y9MmJy/Zd+eT57579/s9euI4Z+iKVRlMZkMM95BcXllhZqkwTrEbFF6b17WBeGPcIThvJtZSAsCpA+/krBiEc4ytG5oXF2K/KefjqaiswhyDxzC0wgzY0UvjRGDZLS7RBLHf2KVRcvSEnmeLNPCcLPBKTsrDnUrhJFEEK0uASBw5ilAJcEiZh8coLyRIlJAByp/8Z+e58/6UjodI86uUrxDjELDdn1iXBBc4ZNv9gZWiRjhoeoS8MMHwpOHESgoyBFu6urVlmEyyBEqBsZGPVdCvihIh3n3NFGkBkGhWrCCfjZAXJkJZNkuLdD+ohLlrkIGCD5UDIeEDB9oCK59A8CfJ4kaqCEOQ2bC+8VuPfdv8hv0k1Bhb5EQCON6FE0qhGvJMGA5bN0ekDqBGxAlyvhKo2q1YUa8zJFEtyIQV5H01pgAr4lCv5hUrgDX8RPFYroCHLqEacKrFRhwEj0CZgSU1v+BAABVq9wJtWq0INHCVM8EfeUBO6T6RFMIVJ0FYKQgmNDysSUG/3vEc/CRNiYB7JCbhpmyGCFUBcvpE+jKoTilgMRDmapRBpdTEMLul5kkZEibgYDi0MVZmmChLRVUdlD75V78LivKq+e4zT8OsvT3WHG/fuZta2//6l3/5l2YAxAcGd8ljejKGBkVamKvzJA8itffYpz6aja2y4SCbP3f+rBFu/oV1wdsvdvNoalQdsREzwuRHGJY11NacP9cZQz4uupuLA0OnZkILzfi6jte0rxYtjvZcV6lPb0z9+ZeeNyKCQgrHkMQc4lTIkxZo0iEJK1Wjy4v9Q4eOHxGyW2hk3Q42OZ4FF7RVLspR0cJcDAbblEac8ivliCGDyjjgT/iE5l2MXTWoy4QaukLn0ELJTMP09PcZQw0cs4MRkEkwKgLQO+DsXERFBf/bf/tvlNgSJu0u/IPMoqJEBRbBWUGuVinxNEb5U4bUneU0MdyxjEqhEbtIVKLMkBQ2EQp/Z9HU6bMXLEHhuTDn7jvvYhvlpbE0k/5x2Z1nz+CSRNXJLx21FrAKH9FLXZJrox5cBuD+xF7oqRe9aCRimiQnDYMbrPj98+d7duzYzNE88MADSsmGLvD/9E//1DU0pEPitBAomAtiMQRn8BAnWSnGck/oVe/Gjq2kkOjiPqSEgLKVdvpLEMY6HPACZ2Bra+KUX+xKFpI4jyeg4blsKlUQ/nD+9ne+4zAbm3qFm2nhoIqs01WW/iDETcCUXFfKnw898EBVTQ0+4CpoHpjQZC8QiB5CdvIGxqKC2ft1VklP34BZ8ovnL+AAGSHWDAAc+Bo8Z9nJGmFo9SrOnDpzWjaswH8ZUMdhQVWfHBuZDxFYoiN6QAv9qamrVvbSaEymnTlxXFlBBurAx6vGpmbBmDCouaXl4OHovYgeSArOWKS9UTs89QcgbN6fW/QJUeyRKLHl7rvuUC/Oqxe9hKgICAixNoDEhfhAUYbUzXNyHsSYCaUytYJ1pGnmh9ExAR0A/DS5/y//5b/0C0gMcmddd9iiF+YMRNMCpnRMk04o0PMyObN4qnPgf3zub3UA1rfv7B2dTx2A/LXFYUTvdBFYbgYAJwH0e/VLeg8Msk9+sT3LkqF1VXpKfJf8uQzpJQcnFUmJwBfaUZuNEklBbFZDVOpduse7X1JAtR38dhNZMCTRk0ClIgngFbDfp8tBmVli+CVv2c8/uAOAk1eWEoHglB4LeQJYAFpdce6CW4HXrswtzo6++dLTR956oaxgpbQ4f2VhdnlxTkRurU/2ZAOHptQz/MVei0bHEJdh5X53JKPfcn8BonkAXPCXGdiV1Tjskh2ZB9A/iol5Sw5CN3QdCv24tDigmXJYXqqvtgg+zkhhJkaI1Itr7JG3pajW5SurSLB3ORrm8rJSm3AYC43FUqWUpYfukddMciB8CyCadtoum45DcvVCZyMy7Et+jyO2+QQqDQ6z4kWVPXjkEIfWsXkjm2I1FhCCtrGjTX5LlUKeSI2taLGCTsGq6pre/mHTyyQOT5rPsojMn6ABpTHl1tgpn4Yohwi5SkG/Am4oYhHsEXrMkM9XI78B+eQnuXecgfZrr7+CHNd+bd++Tcwtg+L2PTNzVcDcUa9oz3oF025iNs2oUn+CiTQkC2oh5k9CgQZU4eMIr67uC1zZ3XfHNDVOOuQ0DaOoQv8V7SJ76Ek3hajIWVcvl1VVVFfpkIDMpYgrtCbY9Tu/8ztcFjNXHXcRfHfuaiwVrjCjollHzsUL3dqC5196ET9/5EfeQ2rPPveCkAM50qPfubKqm8X7G8JFWv36RunnLnQ5h81Zf5U1FhQsWOYgoFeRQ/352xg4CJsLZ2tHH9b1Dgz6025Dec5f7FKXriOq6ZLVqfhgpVpCD4aoIIigN9vEiD8kC1ufAKQetB8E/MdhAvKiCm4N29GOe4TO00qHKqHXN6ynVzIApS6/lBYcmXl7pbARi3xSIwxdBJaUh1BUAbg8akSCbAqC7xN8IObPdWUxkm3sBu3SIUnQyFEwhzPgVAtYdBm1VEpdYax65LFVLPYAmIYC2S1MMYxVWIQQ6KmXUnmSfioIMtLkTEYEKxxTHBw0bt665fSpTkvmqI2cGrKUmUy1swwBhvJD0gtjhqEODD2h8DAsyOI0oAC0Cdgg1E37boYP/FUNGggcieKAw0EpcZGWGmfYFHY9++yzmi1YgYbP9LDMsXrZajH0gpwIVzvuBbRsjEb+9C4RQOJjhoTrXVm/NBM02fAQEO/gy+xdiscnvErK40/pEEYFAlVBE5DgVyl9hcQEmT1KIUftuRegFCcpKabQSMex+SkRM6UrLgPEmJtfaEiBJGjg5/31f/23/hZ14ZcbizTbmzdvQZI7FxRgMOx8Y3sE1sImch0ejI0poBAzmlVAdXBT1EtmImO8BpBCqPXCxXNuBnUeNCVDHrRklgG/uD9kIBupWIByTmTH1i2Od1paiF5a/+AwCenSOb9cB8CGjzvvvltn+0LXxdgZV2AgLdpFHSHdD6tQdB8RjDtCBz7FL9/HawCOVJUyDBsiG9ta+oeHLDO3AgdKFgbC014xM8y4M9QfJzxop+irUrVV1dbw0fpFlwEbKckeaHs3EuAX8ijycBAkR7CtmzbeedddHLGAO/FaOg1QOxv2IrOKEC7lu089YU0ws8IfNZIHlOTHH3pMoVEkP3PV+5JOWeklYg0gMRJFDL6SHbeO4WiEs0ohA0k4uM5sYGiMWCEOWwv/GT8RK9vW4oApy+6njfEjUApxe8xY0AS1iOEMAxOEItCAgIrwCj8RQtd4Itha0goHtCCKymI4Kp7KTo1ABTR07t3cDCufFH/j1VcwTbqAGzdoDrogzAXIQ6DwBIq5Sty5Z7ebGwCkaXQPYhQM6+CgdpWqUUFoKAth5Fuc5R18Kp48KVpASBywFgUOysINsfrs7vXUvUtOQbwr0XGcQlvKA4GaqmrkU63QByevVTgeLs9R0CBwQxjC1P16oEQP1YJeww/4Rnt1LaxMNRnNXULSeIPOlfiD+DzqOnzoECZDm1CMzYPmnFkPDtMf0PABqsoiH734oyeAvYzlPe95D15t27H1mWeesZWNAqwuxi0/C/OzYmsZMLaltd1oFs+TOgDg6wDAnKogRCzO7jAEWD7RmJ/immpCYeP4hu26E9guD2xVhyjSkQ6+shRSZu8E4av0scE4wwTmEvXSFWTp7FHwpxYGYvGluVdcpQCKp7NiiIwyQAnOWIdkM0i8EIBoJz5fyX01v/hc16gOwC33/ogOQN/YQvPmXTOuss0v+r/sAAAOQ0/uJfcuJT1Skgb6M33NpfszpaTfXHrKn338Oz+59ATqStmYpTFpRluk4LAnFUvZcqXwAcnGtJcWHagfDYnH11Sv31zOvwtfMJPI/Ht3ANKMQV6WXwhlTD4eFWWIWYcfoX/aHCyYyXcZp6s/5iaGLf5ZX1kw2H3mzZe+O9hzrjjfnb+zi/Mzy4sLkMhARAcgDkuOf6Aex/NngXuM73AgzuSJNR+qXI55AGPkyyvzOgASSDOebAZAyEudtEfMxNmfIMwvBlQ7gTV4OgCS5WWt4rxMVWIKvjSbcy8qieUHGUVrXPQebqo4hvHoFbUElVJRY7GI5dZaNKoLlD1v0tk4Vdci8FeM0e+l8VFfKTN7Zw4eZ5OIe7yImH2amJ40O6ex8q5sVWVs1hJVsAKXAshTWVEhuq2srLCxHkwbH/oGxiwxYfI4BCu/whT2a4pMWV0OFEFPOodm4ab2wio+bGOJLAVFUPWbRgQQy3Z8Yn1ZUFXIOYvvP/WpTzHwiYlxPl8GJI+NjeCDwcIEgZ/BNE6mfUMLJsBHc88JqBThEMMrZQX02gIFuSBEOfKI4zIebKxE1eZOUa0xUpb6hiMbGraPQtXwwTS369x/30Pdfb08KuqIQOvmBb0eDYQwQ8OtUiRAiefq7e13m4qOECY88fhTYoyRS2NuF7lw4SJMnCknv4U6qHDQ8EBvn6GIG66/7sjRY4DbQmNeWrDQ3dtTVrrO0qPRsUtDI8M8T1WtDVerFrjPTMWZpOSFxvFLEUCzAZo2M+2Omkr5eTahP5ItYBN6VdN+Y4LZlat4wn5lwDFiIhQqxGwxilD8GVawHJZFOcHkdWXzp+qIAIZIMCyVWi4+H5fMh0mXM7lBcvcOFI6piDPEIhqFPyr1VQgOYEKDO0ULIeKJItBTRI1sTY3kSGTbtmz1JwFBFWQF6Zuv0EYjiUNGESLwAGJwLwZWsrFqlMufrY0f39DYpB1xyr7qtJIe584rwlUjFnVIwwRIMhB5kE/BIKwKliWdQM29r80vEqWokQrRBCTQH8GGDNDzQAxR6IUD8l3NCQiStXcbs6E6FaHLsfVwKCktAwRiqqMScs64CTprm+CWYiTQhFvCWm06+GAqiC7vGKuZwh9/qhcEiAGiarTgkheixxbv2OWTBwKUhwGqAu0e6ElUVqlENU1QRGaQPeB4/KkWefxCGNMURDjRS0l5rKDySaX+DHXKIHiHg8z+9HiBs4c+8gpxokI2GQUUxFANgkrBlw4fmGeZA4G8L/0fv4l9vsnBTsRA1113vT/1qAJkcdETTzzBVcHSqnfg3vPQw/hFmdQqnsBEyxmRyi1ifYpglGOPCo+YjGvQp42l9pNOg3n6aYtnTp865QIRO8fNhXBddvq3Wk4jFM2uBLYa2tbb2ZlQHYiK+2FvD4BAQVwlnOK/LGbxbvgWX9Y3NcoAGXKlQ5xs0hVMZEhEIqaRmXPRjEXDu9Ycc8zjQNX4E989Nenk/jwcJ/6L2f2mPgk0iV+LV11elXXeQnexSEXYJTOSZcCWzEhKpUSY2N11aXLchhFu8Z577qEK1EsGDIGJgEZYD+ekmj7ZYenkUENUKhoYGnz7zbdee+P14cEhE+SxWcf6nOYW71pHfWULeMYnY1kIEzWCsn///qTToHkAZ9JMC38Mu0ISOTprS4scYPhuOJw8fiw5XJ8aG+rE5Tjj4OOSYmMtg4cOHNqyZbN7C5zsiUwLcakLcz3w1luHjx6ttIPHnpAsDLVlimjMzJpvciMg/iMfsSrNOrEW6q3SM/5fX4X5URjxnBRPc2MTIGgnAspGOrwVa5SNvDAnZQZf0+XwPWj39PZTfXrsK5QooYe4yY5Q0JJ+SUceS1Z4NBYOmSQaiaSvOkywU1ZmUgOKLIa1UCNx042vWcMcvaMDb73tq0YCQFauFq4ZgT0Xuyay0ECcYS8DSocGwpcZladsmA9VavPMd5/2bpAemdFNXbPqjKrZqVkNh5HU2rrqkydOnzl7ynozgyuaFhGgLTBPPvm4rrX9Bg8/8l4KzDkSAawwCliYMAeywCJcBZmqiyF+7dd+TRumVxMtk+U0cQVmzBfTh7Likpr6Ov7HMJcOAENGNR9ncQXIREZhwATfEL6oRaiBaWYA8BYDpYODdfZgyql/qIiLfnwFxDoua48UB4pCHj8VG0XkYQKN9Q3Pfe9ZmqnXagUUCBAji3Qih96OdU4/97M/qzEU43FjtuWBzC4Rm1QIsaQcLii7D4jO0A1SJoKh0cmegan//udf1AFo3Lirb3xxQ8fOWUMt+UU2jIows/A1rUCJs+2pTYSv2QNV/6bfy0nZn7n09ILqlO2a9FRE4jXpKX8OYO4ll57L7xMkjTgaEPFVOko91xRJ6TLgidFJp97xfjFMvhI3HhuJt1yeJ5KCYPRKyf0GC35IBwAwAbfHOZwYBIdcyRjvD1bEWP0PdgDgk/YG8CO+O3NVUF9WnL88N5G3MNlYUzLa0/nkY1+ZnxxbXZxaXJhZWdBSLqWzDSCup4PiGKshidjjmzdnNCWG1laLC9ZqF8weGnxh7wbHOUM7A7Ak2yqtn7BoEiDtGLbon1nZ5GdWxAZNXREjmbTCETNGyei5sVenuNAioJDp2Ee/mc93UpyV9gV4T5dEy1SLTSVPAgLaaRqxSxQ6kAjme5o3tPo9dvgYHWY7HL4TFOi/RNbBBqUzVWO7OvuY5HfX3l3r1zccPX6Ew6HVO7dbkb7p9dfenJufuTQS58N4NC5PMfaRkQf27z9+4tTBw8crq6o182aPrf0/d/58U2Pjdddfb1Dm6WeeaTHIYpklL1RXZ7TDzGJ5sfUYsWSON2CAcIYJk+QWiBjJyIfejh0amjIn+7/8yov/9b/+nhP6+S5HcmOT0xDPma63xKj7Ql93j7OWHEsgei4pjGVIznc3BAFL0NSivRB/45IHWEsixXN8r3b/X/zzf54cvlPRHC6M82IAzIEV3Mz+Q6xj40ZeF9U8pMQ//cxn3Lx+4837+HZ6pZ2KFqG52WgI+OSC/+TCD5CIKkh873WxvhebbTs2H65VvW///bzfieOn5L/9rju1d9wOOLbkmWq4+cZ9fl0SB8LR4yeBclQHWdCqsUuXaKAxZWZCdh74T4yNKgs3oadReMg0NDX29vRboY2ZOpw4QNpIoANZ8F0h6sVkosciLUV6Rw62YAJ8AAFZwwH/0Ors4boxQTo/KQ9ny61NT0xKFzvSOvDNjcgAW9DgL4i0Kjv6xqsxiMmp+g1ddV6vq1onJwFJHQBlQcs8czWp+QQrv96VIhSM5aj5ea27svMzsxwyiRse4k8sejZDRUMcFG7BEx/urBR3Jc0uxIo+bZZ6wZcTECoXtU25sXFAK+lP8SFUxy+NMfOigiKmYvrSic/Gq9s3bhTPNkQ74pB++y6W7QO59557FpYW6mvr+TNTjXqGIZQVo+AL7FJdNEeQQ5E87A4OHjxRlxoZV1ISGqptbaircyUNDSFQ2+1mpuPUbyJAPtk1t+gfxrBdUlodSJAxBwQ8oXiEo0ZyxCt5HLNOH7Q1ikjHK5nVTj9TTK+gnDL4lcEvn4AtIACFS+r1C3MFpcCZosoJoBT9rOTzsxEeDUH8qRaqAhThUhK/ajHgoYWw59pXfyoLsYQtaFL0AJT14iFiOuBw4XlHM2d9OTkZLI2lAPCBIQiyqQVLZVYKYnl/+P/6n5m0YxjVyoRERTQb0ta1sTdzdqIfD7dl36xr7Qrz4yxO1qIaHVYcHBwZ9KfNiMCRjQk7O41EyKPjE87FnDMtKxzUzttkYxy3qooPHnBx78Iy5ZsYmxgaHTH2U7e+Yc/OXTSJDPDOgA+24oXxRdwn2rNnYhoUksnFGxJAg+WAOpG6s4yNv+CA+MGLF7rQ5lw1A5xShHcp6qVkP/GJT9B7x4le0ePoPdM5VWSiWuvIFMyyKNUv+Fi/Y9OO+Zk4DCv4G4oRu9ww0XQUTBIfR0ZGsULwR/MGB/phLpyCs44s8xYAye9Rl+LYqyAM6aWdPN09560GFK7F3fWLS9q5of6BF1952fkJWkqGiksM8ud/8RfamlvMkNmsZMADi2y6MGpCxjfddIPh6qRkFk9hGh5iFKJUd/ZMXOKrUgpqhIYSGL7wp7NuOFP86Tx7umOjOx2bG+sbJ2cmnK03LVyddmvGRvhQNUMr5RXrTh4/debsWYtcscJayXDr6xsMZY2ODLQ0N6GdbvnkMh27He6883ZKxRLwh9nohWM4Ze3t6aOErluml5hAWH5JR2ZuUQiOHFqeFBTfUquAHDEoc0UCfiKBA/Wis4dqRfjBFL7jPJLhjD+qxmESxHlwFMF/vob9c5QIp9LlFWVzsS45vDltHx8bo2PtrW1yGtVAkck5uFHvD37wg8ePHjMZ3NaxyYmWqhVw1FbFBiAnc/sdHY69JZTQNN74pUk9NImlZcVbt2+3SscZ4dwlljY3N3mHxfzsglCsprrOsbA2erpQ89LYhDkEQYzGmtEi37wETOg21nnBAXTxFLBFNT3cvGmT6aO/+PPP7ti9yxSJZswOGYrHLjZv3DwS247jsgK9L+uOkOMpK42RVDzXaoIDLNHQGV01NqUpwh9Mk4f4zIQYcSHWvbt3qtoJS5RKuCAEoYRwcPkO5jiUBa2aKbI7fvQoKejXqQvbsRpwDkQtLPFzn/tce0fH/vvuU0FzUxNf1T84AGdP6kfhIWLRSDFoDnwgyQmA4FPf4NiJM32//yd/fu/DH6xr2949Nt/csXN4YmZdRY2On0GWtdnQc2ZtlzsA7oRNf6I02WD6M5eYS7/8Yjj6h3QMZMg9OSBScu9XvyD/6j9z7y4su/rTDwLM5UwvtN0MkiBA22ZVvCZWmC6g1ShpPsXmUvIdjqkboMOTbyQ/G36/Bkr2ZzQjMWZp3MjfMcYfuLvPK9sHnAi5Qo5zwcNwPFel5y/bwbw21kPrf+SvLBWuzFkIVLg0u3Zl9mtf+NzoUHd5kcn0ybzlRcf5j0+MCh3nFkFXTT5sFYRyAI3La+1xF+gXOjbZwD6eWAXEeIXxRpSN08uzPD+3tDCv10Ql2L5F3q6Jt4ymoKjM4hm3r/ByczOTFtnrmDtWQX+JvskpP9v3lQ5be9bUsN6wseFhx4KyDnVRaXnCA2TzS7Sa6qIUf5RSNX8u+qOTZr9tE+JMaLiCvua8EAPk93SGyca1Ips2bdm4se3c+TOUmd7KzH6tR3/ppVeESxwLMwQEKG3YeZ7CHkoXdU3OtLS32Sw7bKpvaFgrsKl9Y2PzhpdfeNGCVV0uGyeMOtu95toEZR0xw5YZL2NXnbrYF+T14phtsmgY8sAvvPCSAOb9H3hEz1oYqgtk9s9oqwUbQvZTJ0529VzcumWLMTMwjVHxtsNDoysLBrCbtXYGnpB/6+23iRqSw/n85z+vdXRdyf3333/j9TdoR7iRGPetr9vSsYkTfvXVVxFIBNomHDCcwRWYV/zoRz8qgDYY7wTSX/3VX/2DP/gDrsyl4R0dG90aTuhKIQFvyYX/EYQweR7AEBU24tTjjz9JKP/iX/4/5Xn99VeJycCfKMVj4SLv8xM/8RMgvPXWAU2oEXw8AUfzTL7YIiSNUfzVOEt6/fomq22wyDslQaMZOe5OioW+yfPYB+zFam2emcLQk6QY2Vx6XvZphluGEimArzrYIio1WNp9bRaPZ7GQPQCGinylKuIfCMuGZMt6NUY6Ttwa9UMmaOCIC0lKC6gWbVZtQ/3C7ILdhHiCIovc4Cw6Uq/MNNa8luK8BMjYiBCgaCbNh5iKyM6v1oRKN1L+bADIQiDnu/AqvYZ1nWo4P+dCDaEUH+J8JEvXpmYmdc7pQAKLV9BTtRettu6u67ENgWqFiRhwkc+84dz5uUMHDtut7wYMV7BRFbR0d10wEOagEe97du22yc0RsSdPn6ivbeCvdJudpbi6tBqHUC2vMSUFc7IwcwJ/VWgFECXewFv0Fq8LwVE82qVjJv4NHOOMuLjbS4ZsEVm03fhMJ7VUREydfEUCVvhERYnPCyZ78adKCQivnC8MiEdmLkLVRO9PLMVwVflTNi+pXa6sKIcM3fOnbFpDX5VKTyhVNtmuXmjryhnWjc3CLpZe4wg1Gx0vb+cwAEBnHGiWqEC7heiiwTSgA5N4YuQn33xQAr64ECeIeCd3VZvLsjjZnLGIke4Rt9oZFFDExGNgIAkqQq9U5SVA/uV/+Q1G1dLSqoHXxnAoEQnF4vtQcb1/2k/ksLfLGZbLC6t9Pf0MhYWjFujahlpMcakjhpKo3nm5cYo4cmuOBpQWOrw5IgP1WaEk3buYEN5YLJYGGcsw168QWywBLbgSOQSUMo0IY7d76B4gCYPsr7Q8BoVGNx/9zre1KVTQ2C0I8ugAIJsXI1TWhX6iRDAHhBCD9nffffcN+24mSgiYJKDxYGp1FO8fHiBpiSiyWJAelxSUGnyDRkZdFGFs3h0wF8IojeUQgwNDfrn0M6YgTp78sY9/XDbhDk7CwZoQ2CZaIJbVFRNPdMLC7/qGanPX9EkR6En0Lo+4U3E2L50IBKAY3tLahpEWMknECmLS0+jp6YKeWuATB2lk832o4IpFaRc7L5w50wmy3sL5znMYa3sWbdAM4LnbD0wC6EPjNpS27tha11BVVl60Ni8GGMqKy0w3czc4g4e0Z35h8eCRw+6s54Ba2tq3bdsyPTXmIkDuiQug1hp19sZpolfjzMDoonRD7VDiZhvqm5qbW6lscmHoTban8aCH9NgtZnQDRfQEmSI/QHyCMzVANciKUyS0wFmf3iomtBOKZkZmsgDBnx7C8k6raYgaKSc7l0cK1a1fX2fQI68gj6ktOJJnetbe46b1TczWfIgjli09Nkxj7k7gdO7suRNnTv/8L/4Ss6QeHBP4wq25mVihNHFpEn9MDMHN7hQS5Ia1TH/wx3/gqgS6SqCkqdMlzqaNyGE+2A4TTEApVJnV+MQMsMjhs/yCTIexKCHsk8y0CKUYyyO8+uJLAwN92JVXWNDe3pFfVOgrh0tJ8eezn/kzsfidd9yBaY5/1TSwHZ1zxQ3Gg0zH6JVGGpe0W2DymzBRnXfVHT54CJIb22JHzcT4WAwTNsWhctSMUrlb4O1DB3XridgVG/KfO3uW9ElHBjBZn8wYjl6Lf6gcRaVyEuFwsbvbPJJVT/D3iXCpuoqwFygpkAeZRllI4L2rd+jg4XO//98/pwNQ27pNB2DD5l2j4zNlFdU6AIaXY4z6SsSfZgDSn/QKhz25l9yfUlLi5d+rOgBXp8Mn8mWDLjk4KTGBuubXp2tS0p9xY3E2k+sXtPSbXuLDDzwxYJ+pMRYtWiofJ8+wJE8Uj5A/nmiiFKWOBvbfueIrKxiTpcgc5TT4scwmVimkmnMvsl2dktJ1ANy7zBWYaXBez1rByspC6gZcPHXkyIFXRge65maGi9ca91qdnBgxNDa/6Hb0uPzgytREApsfxr66RrAWelIYSynkQJXmwLs2t3BtXiiBGatFWwLigHahfGlsAyNki4TyNadUXb/aABk1ozP0zaNQ8ipshx76U12slRKKwgeGh3DSQwMZha9MVSmVsjLKT9uNp9Bt8ZlNapaCaK3klwdDUmamEQae7XnTaVfQip2siRw3hWIelV8ybg2Ih6EZFxP9szV4SucHdMshiavr6+plpuSq5joMTKhLU6II9DCEk1cvQmCouFOQIIZwLtdogjU5ohyjJyInGSCprGWx2kEMuemmG+vrqsw3qkh+DoEPVLtfJKCU005S5gqs6tF6lJfEZk35r7vpRgCN8uir2ApoFEnU+MD99xtu27tztzz93T1IMB3KZiEJf8RysMD+1E/9VLJilmuJiwaXT5CCul/91V9GC0EYA+IHVKEUF4QoXlG9PA9Q5OVUJcX/9ouf1/pY7rhn716J8hgDticFAxXBt527d1m1aDAt2t5TnUWltQNDo2IyLBLMIVMVmpKJqWl4Jj1xoAgmA0WC2nqYYIg/HSuCIjyhKrQSnk7t85vUMrVHJuAA4SE5Kylak6Rd1Al8ZIJJjvgjm7mCbJPhUqJuo2uYN2xImiP05wDRq2pnxCklv5hEMGOQE3zSt6AAPtpfYE3mI3bGwozsUbU4EA7zc7GiI2mIPxELvgfOlIEOePHVO0NjZkbxrd7BZBhqkiiPEQY0jowO8cwqynxvjHnDR42WD8BTccz3p0RtGRFQMzgoSDowMkKnFlRo+4SxPuG/nMaaEWJNASBqBLa7+6K2GCj4oH0m8LehJ+IrFsTnG9mmQnqYGZApwANz80LjE6brG1ub2js2SgFqoH/IICDP4BH344PMgDBY0hQtwHl0eFROfEYC5CEME2SyAjATixK2EAB2LrsJGBv9qRSiEtikz0RMNyDvUzBf3FhUAJS6Enx1kT72wkR1HnDAl1OKJZ1Gki1oN4LGOwlifNUcKyXQmpiMGFjmNIYDh5idW1dpdg5/dCMFMeIQs3mOXhSKSykriQ1LWM38YwnlmlWH/qXJUvA9aIQ5hPkTTbCgFKog44OCUMr77//br/qHv/BrvgnGDqmEhFrlIxryUwGy3apoe83U+NTBA4fBNbxxuvMsdsODmRnipEDOnRTJvfF2DAAoYtCCBzfrJEOGaHRZ1G0AFfuA5V4T39WlUs/QyCi99OB7UjXnCmNuRFqZfiCmP1s4yOQEWCbsLDX2Lg+YKtUMqsXCJGI25srk1KgWkaGvlhU6jvPokePGjTZll8NRR6Ow0iGpy66s1X48mopwwwpcf2MO/HWII2VNTFjbhUAJ8AHwwaFhtePsuc7Oo4cO/fRPfRI+lJsbwnSy92JxBa9H+Rikh9P3oHpopB8bAFE7UVEmWgsaVDl3+q04wskPIQ899BBFT3rpVzb4wFceS8OVHZ+4hBz249diHtMgOl10j50Dfvb0GX7cjbagWQogG5uEpzlTbR7tp4JNzfV33X3H/vvu98lsvF/9dfQKO6Je/s+in7x8mnrilKNUTxlRbmuNdUecu8e59iaFHnvsWyiFG1rSZgkE4pX5NShpyPCTrJkKPIHFaizCDW0krYWq5sojssc0zMR8rlYtMJHfL+6BxyC9yECzuSSGhyf4qWo1EiXWhUAzfwQ9GpJsDLEqsnbR8LzxUwopyhofdTHD8GC/ywouvv7qGxSbTm3duvmu2+/SuLgNVG/z537hf3J1ALRhCzJCqitrgOK51KUbQArowtvlhaWi0mLrfM6eCyESH7qst1G1aIB8UQQxmKdIFxXgGL6SKDMypWOLWshIjaSmFOC4IZGJGUt89Ovf4B6JqSL6OLX1TZEnbh7IW8sp6wA4rts4n0qzbYjzco2ODkOVdgFIzymevrEVO8b7wYEk1rF64AQ3tiZHvF5eKqcOQENtXdP6BghAiRqLwyztEJABaLszn0CURA8OILL51b6i9JlnnnEOrJ6woS+YSxeOcNOGndivSomGNFGnLMlC2K90KqQuMzyZt1ju7p34g//xF/e85wM1LVu7Rudatu7RAShdZ+3mD+0AhN5mT+7l6j8lpudyYnZllfcryZfLpq+EfnXmlPgP+rXlR37uyO87VnENtJjozfCPpmIhZoGzsRTyj3b9Mj6XT/7h+bgrQnnnLgB+ehT5O7Uvax0v508VJQRkSy8pMf1aBbQY8wYCeksp1zgVdK1LZ1YWdAPWleS9+My3jx16dWKkzxr4ksI105OjhGicJNYgxkFAiZMZ2NVQGPpjMkJF2ahFiNu7MSCeWWfA0n8dbaNHNs4awHZ5FkuvrIorq5yONDFtwGuanmtCmDy1oT8eeNITOuMdfADxi07ChHOQeGky4hUcoH4szid/eqdpjJTfSEDkz15MWvanvhb0lOJ5wPRVTgV5JK0MaxWzyuD+YDvw3CWgLnEkCFa5iE5YE4FRbM4haJybExGyPp0B63U5Z4YAIPMHOcxqddV4VhojQLWcEhGCzHUlpcqyTSnHjx+F+e49O32CGOepQYCSM3n4H7U7kn5menxhcY6Ng8mcIcBIdfXF5d6xTiPrxQNhZ2M0N7bCBEXlVZXi7wOHDvYPxqZYxGrfd++MmcCGmjrsGhsaJgurBrSC1m0DjlKLTLgL4YQxBZE9rEgEi4SM5hh5ADs/HJosHechjzrMwXkkqAX5mn5FUIotZhKu270HNA7TsBdnmPjcN9DLpWhSQbDIBDKHDh9gHfkFJafPdPX2x9H4IDsxEC0gQ76mrp6ApFMP2wsxR10Zw2OhPFXnNgla64AnGcMDGSvWpCT9gSc2WoyMwxAmRKKEJ2zVRbj8HjhqAVYKDLV9wlajVYD4ZPEVIKApLmRDF9w4eWEcaMAaNrESmGJCD1izo5ChmIDXNTTij+Fzum3GSQYIo25sNJYVUQayUGmiF3y1UBKPFAUvK60l4LNzYkf1Gn5StXR9Z8WtUuOZAQGNQ5AOGr45gBEhiQO4jUYkKy4R3xQkEZm9syYvbmiGG4n7JOXU6ROQhw9CeHQFzUf5qi2WwQaPNNOIsZgmmxpTG2cWwp+W7EEeCbgqv9k/92i6nAoO2GXrpjAPb6MdaWjEMXlAAEZZhChblp39BSWkEWgCJScNJBEvstEfpWRQtSg6wUlcBQEoGWCo0mRHRAAOaKFLfbEdOSrKmmaJSTQ4JlEtSAbce9ReCIfiGMDPdhGIzH3l6/CNkQacJeOVcd6RzLyiORPLiWIgTV8uWygOji6cVre+1vpet1VblRKLeVRuh4bD8S0Ssb8F52kUbQc/oeRPaGMadsEHjUp5YqDXA/sUPMEYkf50qj2EnHrpHLrJCd2BBQ6f57X2jp2DwmVAi5bgj9+x8ehpAQ2awWbWS1d0VtqcMjluSUOdPMRDV/WstO9CW5BVlNQ007wVNaY1YXJiOo8WjrJhvSjQMhiZBROQdlkLwsLMLExfjkV1+CKQosGItErWsLENlyLCnp4+bov3AZBIjHUZHOWm3c6IBDN9r7/xKjxvvfVWyg0zLEMFPnosXTXWVFVT6QABYHEQEA+9wSVjb7CFBlWYmJzCZVLUhLlrXSI41EXUIrBWEEPMVKIUIbCl/ViX/IjBLGWzQ67o3zqZicYQjmZeTmMS3IfZEQNdjid78cWX+W4IKw5/FOEJu4KSURD23N3TJbDjNyFzyy37XJtgV7vpRzKNSgsKjaSaWbAVVdDPbGCIn4wNA1XnALvHvv11nQRjEljduqEVZLWoTkU4o39sUK6iIla8GfsZtQCot+eN/t6dO3ZTKVSbczAZl8nX0PImTLCxmTo6uGIpdhktk/vGjZsgAzInQmrgS9dt0AJRQhyGifYJArhHzeTEIKCUwm06RjfYngZSEfhrrghIWKnPgC0aHtloFHx8JQ5c1TJJRzJCMAdYCG+xD3VwoKGpoa3NtoSyirIqVVvd6A6HB/e/h/329Q2Yu+jsPH/mdOcjj7zv1jvutA5KvcbFRa6OJNNxBw0V9EffRkdCL3ri0vjZznNufbvQdeG9732PM1hhpTWlsSYuIc9pIi2Jz+55JqMFzbpABbffcRfcMo/WQGFQjXb4g4BGZUUG+GmkDWloRF1lZYQX6MJPzTb1sFfEvoLPfvazt95yGzYSlmwYS8pJk7/2ta9pUxHiq14W9TCwhxBfwTTWjjnQwLHtW7exXDrm3aZGzkUjNDo8Qgra/tOdsQO4uqb6fNdF+IvvlVWRGqENoLLU0iwNT+0T9qJaOopww0UB2CKMgzwcCBoCfhUHX39AQX9Ckga++uqr1XVNwkXFPdI98PTuNx5/SUkfso+R4cqf8T17ci/x9Upi7h2Q3HuW/XIerLs6c/p0Tc5c4ru8gP6DoN4RcgLCNDJy4ycb0TPaHUtLjSSBkx5/JkwE8hkLckR/HxE5v//HlbdYkh8F4lMOh9zLlVxX/Zu3IpwPt5h1OUT2DupwtbiOR15xUUPLxobhvuWl+TWLUytrFosKnWixaLQgnpgbzhiY0MhbLY6Fl9H6ejSBCQGLB7R5aohDgCx0NvOm0SyKXXdGc5FAbRCrgTdlbEbdYASPkVOAHDfApHg0lhaBTBW1WVQogpXCCCZgJE8yKHkShGhQsivYNV6aDFFgb2+fzBpXZQEni8QLLx5GqgmAAONSkCHw8+sq3CW8ibWCxh4lKsLVq9qfFBv+2jXm/+CDDwp28YcrQxejBkdBMSJj1HtPlpjqQgKAHMLp4ydk4+Ehdv31exm7LofauXS+YsuWHcJKIX6oS/YE8PlYlwyObBy+bLwNNPzJxLSwLBQcHtj4hdOZkG/Tlw2BvE3cep5N9xkgELclTjbUNWAgjwltC3a1s5hp11MaePJJZwBvmS2vyC2owj4lTADk/v334hvPrPMDJQAhrIdvwhOjYOKTFLLDrn/1r/4VzkPSPoovf/VLDXXry9YJwqqdbfDRj3yc1pkHOHP+giVSjRviHIKDh45djAvUY9YX9zAAMuldpUiWKDZwxRDSsBoCoqgkLDl1JuGDTJwx3IHDYjW/REMDfZJ/9FIglhoR6SQCZ5jTFpogg68woVTEFAvaYtFRnP9GfBuyS7LIgg802IPPvlKJ1KgpQjFBVpzvBdZaZaK04w4DoUfZPPAR/CeFRAWK1J703CeYc6R0VXXIz4wlQmHvEmUDdmA2YsGkAPLry+C5T5wt+LhtHS9iFaGKqlDQC7VBnQyqQ4JavGOdJ1EnA8xt+ATZwgQLq/BcJGOAv6lpPRodeo4KgwEWMzqS3HAF6zh+/KSwB3y1yAMUinRO+ASJ1tdBnu1AG6M09GfOnUGa2rHXolno4WGyQfhIhJ7wA39wIxEOMVz1p9p9hSTygfIVRcgkRzjjgE/jE1PQkJhjphefpCSeo1dmoBSXTqshAwFYySAdDviThAIlmTETnz3p6pKFpRVL6VL0j1iHqJohEULQVh0AFSXgnGC+jZir1hHEiVjCbItiIWO9BsZYmiua1aExbAh/wIstpMzPMxphkpP5QIk9CpA4GTjDQfjEAFGXDBCGai+QicgJHX/NLhNDfl7cgVVUqjulabAe1/RNbJ9i5ydOnMlbWsE7i5cSFO9acWeMtG1sZcaW05jvIzYjnbiDVVTZ4jD9PHUIf80QIUpI3da6MUaSsk4bh4Bsqzejj1RYmByHGuHNSGgDDdC/wQXVURG9OdjiBbXoHejt2LyJGDBBXaxXbGS1pOEBToci+iTqEh0CiFjL0iorwsKtX4fS1q2beKjXXnvVqaD8zvrG6GcjnyoI5iiu0fXofGUKQV1CwEao4pIm7VbsCsd9T6QUrLUBgH9BAsEnVZOfb+XuPWQs/DUQYnOCqnl5lEaPv7ZKU+qKxJjit+emfr1tN3rSdnPrdxkEq6yu37pje+OG81oXUgCEzikLMiYb4CZI4lAvEohZbMcNWRrkCFcdFTemsXAk6DUiXAfzAx/60LEjR7hp+gENxy3TZov29MPF9jG+kq1TPH7kOJ4rJbAeGBji4+iqxmpqatJJOLt379qzZ/fI4NB3vvOYzokq8EcDQ7jbt8egFDsiINaoDSJKfQPN6i233KH9E/bhDPuHMAOmOcqCT3yYiTo7XP/qr/5KBifGaEXwmQ7wg+AgNou2a32lUYSlLDOjEsbbIMzaCRo3CBHVoDFOBPrEMtUlGlAvcTz66KPv+8D7Yz/k0qr7Rbkq86rbtrVrCwX9VurPzsT6VFZgnSv8obdj+y4bak+fPGWF28iQ/Wc9imA+b7V1SxnXtnPXbsur9GMtXnjllZfeeOOtL37xi77ioQEPrgdn2Kc7JdybgwmaA/pvZartcRRYUM5EKSE8EUVPKJJSBEepMFkejEotEE1g57bc0GH7Jc1tapGwCEN0gL0IMtCuLVLWw5sYZ/MVDuQObfzxrvcIDmElPScC+pNm8823qtSibK62Y2ObT/093foAmE8iSqnFwMazzz77o4+8n/ljV1hrtleM1BAoWBG7A6grTi7sEQKIgpjwwqMrxahRTROISVnvFBulhEvPwcwMtjIsa/Hy0AUIHgh70vu7/EIjfc295DJL+cFEX98lPX31S0w5OH//F5BTwXes9xo4clIDiYFPDC9mq2WyTNhoLBCj7PyRELsAUu/lHZGyIurKf2mRVHDkMlf+ftG/KmL/8qJDQaAC2IpFOhYFrWos14zNLtY0b2ybGnfF+EjvmZWF+dKistX5GAazUVk9gVR0omK0wkssR1C97Q1xKJJjgBZjp+6aJdOssc957eIqvxbrlZcdfVNSWE7TmLMtWhpOY6IUQ5vifEbhPMhYhA80IfGHnmg48CeZiU+Y5yu90jamzgC1T1JgF9yCrqmywm5/aizgqO1wjQ8gwfmsnUqC8EtLIUCZOSLaLj8Df+655ww+1tRuZy9MidKq0a+cmjABLiVXKeM1UMVZsb7Q87l5QABUL7R5GKVkViQF6wxHenJ0MSd8+qSOtCX+sGWSgDjkh6XgpvtwPNCjMjYtcxpqOXH8GK/b1t7GTsOgbJaYio2GPmGpwBpKGGIzkhZHB4jb4Wb7BgbUxNh1wLhKNsg2McTtA7xNeUm0/hDmx86eO6d55aaS/4cSrmKXMICf9+fTTz/Nkxi2cGIBejVhmIwtzBylHgwkWfSiC87qwiitmAtJpJ+/0PXH/8efHDp0xEjc7bffffOt+zZ1bDEMbKuVHRQOBYGhRcJLa2KLVP/gEAUrLy8BNmkCvyEsI0Rb7zUcSSjQSO94ogpNM3IojGXDSV7K4jkdoDkIxyIpOCbR4KPBJwQiXwDIsTqy0a/jTC5mJ6FDQ5RCavLbxY8o5KgFGlIABIq4gU1htBqxkUTU4vwzjYslnTLjmLgKqsrK40o7+d1XBgddYO9o8rW8LJZ5wEeR3ONPADFfLfJQTtwmF0hivoXZRC9RNnCghBtadnh6wX8HS1Ba+T1YVFxY0FBXCzhf7SDBkqLCdWWl2iloKz46PGQfGlDO1lUKNGSatRMEugiPZunK+6WWltTKz3r0CBcXZjl12n793usgiRain5uZnilYq4rxsVFrTyqq1tke5pOVP0Ybjazlrc2nGPoG7syBmLXNU9ZPj49bYdLT3UdeSUzWBEScc3lMtoDF+VN+CEPDu5TEmcQ62qIWQvFou3EbsT7JyQR8lZlYMYeM0OjTkiWI2ahccwzRlmKyKymmZ2IwHtMwQevGOZbYqJSNkssDjtqR6evC3Lwp69IS253XVUFWlFVTA6CpTu4wY3xMCxiarSyvVMo5B+LA1uYmKEHV0nHescYSj2onNUULrlNjHqqstAIT9I9UIehiy8yKOQrPpYvkmQFl0YEklFDgpZUw70xT1zAAzpUSwFU8saG1RZmVsdiFjTzdboaAg3t377m8VbyxEXRK5ioimqGrR7rWxHNVYErHTbM+TkrBBiiCaToVKBwhG+EUr8E8uD9NhFp0ilBen3WXGSQTwn3xtNFo7yrlmKgvCLt27uRzuS2unyyz2kuwj6n4pdw6PbYfJ8uBs9FHEHgom24/8MEftUyFeIgz6M/uH9BO6K6DI7NlIRYO6RHRmP5em0hiCJb9yI/1eGI/cxKzP218BMGfCIRtOLU10SFLD4ZgETSAFVMyOb6SAgm76ZPq9BmANZMFZyZE0uAjYWQ4IjN35SzMW+g2SJAYBSbtr6+NCI8asXCgMmaGQ1GF/oBTKwEBE293794J3h/8/h+++ebbFIKxOW1DHmjIIIBT1kC7B1ctuJTIwHbv3XPLbTczUT2N5599QZe0uzhM3bk3GGiXCcSEY1aEIVy9KrrzzruNKBtYgSeSMbNgbdHaEneerlI1nJGNPhh2ssz0J3/yp/GTl4E8DqAiGSqJE6UIHny8+vmf/3ktB9zgCWG00w2KygA8XjzYKIjHDfVKDFWZnqbGilAnnJQIWtjP/LzWCAe86IDhsPYe5jfecMN3n3za3dLUXjNAo0jB8jx/kmnY6vwCJDVgkHQeiNltjbfdA02WtGYzg3RAs1K3tc78BkotliVKrk2lcDa27ZArMxBYjQoRQ9hUNn7wxBNPuBkN5rYEmJZBHbuDQEVltTyowBk8YTWUSjqFobQwFwQQhzkr74BUlJZhAtnZwMNCV/LjHEAXwMHZyd9IBkT7BL56/fgH3zRRIKPxtWyzMtwQgjk4hlJCVDvWGX/CEOLDZFsw6XfofHYBAoMST3Rs2eoolu88+RT4NEdmQDykg2RCV5foX0Cj/0P3PNiCQF/BsW7NfC65K457gFMqZX2Cm/FUgoAbbkBMHNPTPwIrn/wq4lGjd7/xiGO/H9Oq5OoQ15/vFuZG6SxDmgGI3NmTS/9hf6YMl3P/ff7J+gy5Ul7Se/r9QQDWt0tEKfFF0J09UnCJXAxHpCIypBcTxA45+cEnl+GaT9n6n8sFcjjkXq7J7M84Q2iNeuOwHsP6NhAIuSyINKxTWb2+prG9ZrBvYnRodnzOkNRakxUR2WezBhmGTvXJYOZH/B9j89Ef0AdAHXJ8U0a7Z8QFZO6Vg7XgsKC4RONqAEw7l3pdCurp04rZRRkDFAhUiDIkh0OX6BhlThyjUbmH/uCeIiwOW9TLb9BnKdSPinqh8OAgTpPpJaGXIPuqFKtkWXwIGzGgozjD5595Ie0UNJg262Ot6mKqLFRFojquj+l5Z4MsyDEP3mECIIShzc0yQKDC35rQr4pxBxgCxZpsIuKpjN142JQemVCMjXzyk59UREFGpxRfgYS+/h7DCvyPGn3SEmEI8lXEpUiUDXBVv/XWW2hnbvwhc4MPVDUKvEoAdASq1iprmww9cg5WrZBRb3///fffD7dk8grijILwef755235lROLfuu3fkvV4KhIpXyvF7QTDc5oF/BcA4czIgdcxTop+huPPvaYYVArp3/mU5+yQBHHYv+VbU4jJtVPGLF68KGH8wrzn/z2E44SOdN5wVR5dVW94UG0ILM4W/4BPTDdFg64pgGSgmmihBLWbd++FaPoBueMG1gHT1xy6HzgPBOhthTig6E8dmbKwwMrgmpwCMhXgkOaSvk346zcNSAmqqXgCfWgQga00euBT0FdPTIhoBatjHiG5ki3QoQu0x/ZZKBsgCetxi7vflGklHZW1VbVEpa6yNTXVJ260EIhVS1nQhi2eiyoYGD4H7aTXT6FV/60kgT/FUnuVxEP8Zk5hwky1atGRThzPBRi4YBKIZOsQ1mgMvfuqNxmEaoxJmMTTgKwmAUbDT35TwZ7V4x5W1IePY0pa59CHPCBv2zqhYPdp8BqxTAh6RXpU1qjpQyB8nin8OaRBAmw0uHEhMQ3Y2qIhQz0Ghub8ARYQEiNmPwpG/746iUJEaOwOuReXIirEFA7kpOUaYjMMoDDKjGczQLlxZiXbEmdAFFQTlWDjBwAZZEiMyBkIRFnuM/SbMe5SUdeCmRoLLpIMTvKgkcFAKh4yoqNT/Lq+IPk4pIiO06HRwZuvOkGobwxFBiqDg4qkt0e6kuTU9QPT1JUgxB6pZGFJBzIy6ckU1REc5txYRa4BIg2pKH6rVvM/88IBA3nV6xbam1pu3nfLU7rPJON1zIGN33KjGx1sFgKhMXuTnI/iN0CvIATzcbHJkha3ZyXcWIZnDLsT+14khCO2GqjOIA1tVWCUSmoghzEkG2BCvY179pNHSUKdzx8LpsRkbRvar80GlfrWWjU2rwBx9tbdzk9M0bZ6+vsR2lva6HEMtvjb+ze6QdWulPNTZs36y9gHFWACUUhBqG1U5nPnu6Eg6pra2umJ2MZSTAnxteCRT45ScUNpmTGRpwCZyMLjqtC7GXv2mpr7KGk6AarCFLIrYt36NABFRGJX0M1SSpGQNHS09dHlUkXvWoiLQPkkMlMJZYM4TCOqY4mWRprSN66fD6FLPNcbRlHAczqBBt3Gh0ZVgoziTXmjKZn/+Nv/qahnW9+85vCqfd/+MPshBIn62UfdIFGM6cvfeXL6OroaL/+hl0mdZwUo2EwfmyAyjkGRpoT82HlcFJ3KJo0EPEjUweP52lra0cIVw5bOH7wg+/HWOSYwdBqk6YtDLp8JhlFnPwIiqBBrIwNT1QNYdDM26hIsE6b6YOtz+TI4yAfXbgkj1KcAhpVQZ0YlXqZpZhYY4wWeXxSKZbSBw4lGa1SannggQe4FcucCGL//v3ib5dNQoBKcDHqpWOKgCC8LKgqaG3fqPMjgwbJEQUaNhg6d0VkrwE2FTYyMrpmdMx2FAIyZGAdvrLhPqxNarV3dubOu+/SD3z9zTeQDLiK7Gn7sZ/4cQQCpc/zN1/4PIbAh90ZEcAQPDSYJzNlgLbaGTBbIxREyczWGJSvm9s3Yo7EhYnxaA+K43xP8kWL3qaygAjd6a2TpiiR4Ssp8mOFbGSR1r+lVhD5niAwP1+coSI6puzbb72hAfaCBGTCJ8lINqjyyNb1Ul2icXQV322xptCB4AyL2spWU1d70837QDa+FSPVBWt9dUgoOOIDhqZ2oKBEwXCPh1IL3HxFnUQpkAk7NKWVRfwSPTJ70vu7/+ay5V5S8Vyp/8v0qzPkSmmtr3r//usPyaxTcnn4//tZMyqu/vPqd6P+2Z/aJ6FwvFItv1jBtzjDDDe8kKl0gTZnnOX/wR/pyidepd5C7s/InEM49/KDICI0ybpZsafXFgAxel7MVklbW1y+YHZ4bWnDho6Fmcm+zoXVvIXVNeZFFbJgMhrYiAACw4wWC/SjnfM5jjSFfZxzaiDX3aZrV6wT4Aodye2EozhdanFp3Gk/Dhh1BBBNjjMABPduVVa9TkaM1FIYkLElKojNnbEUIalNcjiMWjY+hB1l3Iu4R56kYBw48xFPgM/dyUD3hoZcLFiPwXgCJobQcO90nkXrt3PCCmpNeRh2zTzFGQiVx598F+kIUPgujxF96fKHIdgdkSFz8K23QWP7UrgyhiAP5yZFWVR416PQi1Y7Z7WhqdG6FxbKVwyPDKIaGvv33+cFObY+Oj0LZMQiDUXemTD1AI2hAeJdYrJ9Ns5FaOL94szTTz+NYwAa6cgOeav0CaWGY+0clUFBjkjVfJQzZIwEYZQz4gx6QV4RXgImf/4Xn3vmmWfk+cmf/in4s3dxkpFqXCLWUbtvs2P0FHHsqdM5nfVpNaY/OQSxre0I5y9cwElzpNMzC7yozh7P437dgcHBV159jQNH1H986CGDmuarnTfYPzDoviC3hY4OjVutw5MAZTcM0aA3vNztd5As8UUgOOagNcuSa5BpJIu4cYbsxAMye0emtUjexQzUAOsoCX7Cv7evG8kekbRfOEvnh1NBML0I67GXBO0GIVzFYSsb08VnKOkqOGyavADXYhrHhSGUpFvjJP5zwq26CDGDv4ard8QCDcFJmDCcilgFY4Q9DmNIj1pUgUCKSoXUQs1gGMaQ2QUN1CtyioPhZ3WJVeT3SWYiE1l6QTg4lB0D5U/uF27SYa61pYpe1KJ2mOAVMmVAIGXzp1BHF560bdIx5G+sempaqxeDgKJe3ScrOUpK8YTNLtl5vDgHaRN0xr+i9+JQXVET4KlxJBqNCzaQjnOLSifGT3eeZkH+pMn4A382onbswuokYp+8I8EDVZojA+qQ4xPO4GoSqERMUC9tUdY7zsQRyU5TWImF+66YtGvFaX6U2VfL7fSUBPYaIiELcff1DwIip7rASTioRWYAicY79nrUKJtR/7gtLbbwxgO4iVmZjXk4w8IILA8djtFpm0UFeiOlJcXsy7YNcHhRDrCyYt3GtlY1CJGVjVqKtOwLvMHkBTNm3c3m+9raIIP2pBVwwwSE45gXNk4cPnnyXv3mp/0tB6vW1eZZdJyQ9NwLL4lvnKdLUc51nhfN0yfP0OWNKbNSYrlzPJf0rTs7z5AKDTZQNzjUz1kAS11Ki8K1Aagy3RmkClAY8MDAIKTxBVMMgYMMB2Q7gTi8/5WBWzSQAA2zB0B+akF4Jn14VRyhl/OLc20bN+ICRUy6aA26Lji/Y+D/6aefgQn04LBn93Xl6yxzsgI7pkXgJkDheoyR0GlTHBaqU5vQieU1zjek7oalXJgFMUjSIcg4jq20pFyemLnODlTCsYGhEeEvdnVfPG9qG/chrF5UcA0KGnUmD/2QGLPJtpX4hD86AAcPHrY2Hl20QU48NBIAsmOPYQiIhROowx+MBtbcOlAoZZ/Il0hTYZj0zMCHT4FeHHNhiadu36IVLFjHjwsK8V9FMrArrhwQkRzyn332WceBLa4sFhXnOUP6lpv20dP19Y3gOMqe03zyySeRj40sQTwn8PVujWSpk4Iqq37zN39T26m/BD7FoGrWvsOKU2CZx44fkSJdETQSDRI4NdqSFEAtmIYEEbx3ROEbHwpDleKtdgjtZgY0oqwO4SBwE4bB1Ag9mo2lUlQn8FUvIKw6ccMnf6paTmxnpf7Uy7LfvbA4NJ8TUS/O0ByxNawgj0vJWTBK/AfEn2aE9Ii4FGrMI4b0h4ch/6u/9mvMwV4XzgZLQTMbZjjAdKAjPpGml2KdrnRSgPw/+2f/DNsRyJ2RjndNJnE7QlSrrCJk0oSUIbEUT8gLqjSTnuhKff1rX7n79jv27NnFSF954/X3vvdHXXL3mc98hl79L//L/4PaT4xPUh7H/LEaO/JNcXWePXv06GHkOzjPFIQmVjbcw2fwcYYqgo+BDFnnREWk9if/5x//03/6T7nuaD6HB+3Ix8a2jo222UHjwOEjv/wrv2KcCMFYpyxQiBK1fPnLX4a8wMXMCeBAQRWHycKg44//+I872A7beSVlmQY8/Qk97FWE+CATrmlpCVfXVTk46NL/+Wefv+uh9xXXNNsEvHnPvkuTc2uLSt9lEzDme0gz95slXE7MpV9+ueoUoJQ/pcPNy9WPlCxD/P7gI+cPJkrhslPB9DUH8B0z5xJTNn8qm4rn4PsTc3BblyseozG5Yle9MBNa56HGOQiAxNUE2ZMA5sDmil6dbsmO1XJY6WCflfxCJ08tRTcgbh8oLVq7MjM+0neuomB5sv/ckbdeXpgYmZscLSpcdtGX2l0j6jcbBQwSsBMyjlJwe6KxL+tiY9XcmryiwrJY929XkmZ4eUl/o9hdQSKXmNhYMQrj3aJYGYxNOOcxr6jUvj3q5IEzL+Gh8979UiS+ghZhjBf+QTRJRakZVeTKpPMYfvkihiAnzBSkkMoaBrZgJoupYuGcKhSEtiq4O06Jh5E/Z5Xaiw3NXFZs3+JeZJCfYjMBKWSkLgalIkqeHNeBN98SSnqn3uBzDqAlWryriH9I46CcjL76G6+8zDnAU0VMNfPh5RQAVjB0FQ1QHCzy/SnecquMQJEzkQ6sX8auZVFWoO9FVJTwhLBPt91yO/M005smFrxDFUNUwag1u4aQVKqIZRgYKDqBJHZ5hzAXZ+BfRfjDl5oNQHVy8viZoRHjAioS22mSOHzujly8I9zWYRh6URyGTt0oKYsdibTbHkl8M4Rk2tC59ca2HCd68vQpItBSGNA5dfIMWdRW11kQihses0aYgG9qqaiqxmHIqNqAHW9MLmi31wCSEM5YEQ0ihkPVGioouUUHUal1QAWYnDlKwYEz4SrFrSkOGkwYlz8Tq1Xt8LlMoOWcpJaClcrPPcpgZyM2KoK39ubxigwtJjn7utHoXbqxNvlFJmAyF22QAJEaO9gDEAoMDSjJKT8BwVCl/vQJelRaI6suKpdIMERoxsnhMfCEvCJycirgbN22GQmKJ43CAbhRM2jTJcNqSUlwL6Mr9uL7BCXS4Z9hRbjauziYJjviTxWiefxUkV9RSsqsFk4AVuDo/Dc1tEBed8vQNXwS81HnfDnp0NDiGNwwEYwiZxhpKI3CCwPoj2W6YJKv2h3RgXxPZr+xgMeLWmy9USMdhrBs8NdyqdqfqpPBV2oAeX+qLmWWASa0OvEWf1ChLr+qwDRAwMdY9RrMAge2KkW1x7uCpCYFKJDxEGTRvwjNmh9HZ+pUACUW7e3ucyyHDPwbyFBFaXVsL3EQX8XQ6JBAAnzIAOVTEr3TSiRaXQ9nXgWGytpjUFffaEkoHPyJXghDhoywi7zkhDZxgCOD97yv/Mn/ihieBWsMJfm1oVNsppfMMCyqC34trRA/aen6zM3P4h0Q6lA3dbFUGm3f/vajH/jAB9i2Kq/buzu2Q61b531yYlb1PCDI9qRiij+5kv7+ASRBSwxnN/BlRaksF/vrOPKJGIFCiGpdRAMzk1PKYqviG64svozQsPuCfeXqktMB88Zdwm5N0Cyt4hQp+tNpbnwHJKlEaVmh/0zt4bhwv6e/z3obhxdxC4DX1zVYk2AcN8mMyN2xqi/LjLXz+sBoN0vEBdvMgLPurvSuIDWFg6j67OlTPBqPwE1AABzpuAcxeTQDpAglcBQ3VmrUwToYiUSICYwfnrBVNqI6fu3UKX7BKm2sJlHNIQ5gXWoGwHcANs6oRaVuiiFmoOg0o8h0smB9Q4w0kxeXqpS6VGR7N/ErTkexTuKJY8ff0hy9/bpTxx0ppdP5/vc9AhMHzylllE4Lce7iBfpgFMdmUKU02gP9rq3dCG26tXPnjmRjPIL5Bx0eVZBjHLKU7YahHpw1d5wQpgZekGmoTKOFyZgmEVZpoF2KLhM1YPZIwDSKhDQP0agRl+SnWurVViFcYwlbOXEDvYJIpIWiZ8eDkBSl9QkEVR85fMxNwIbwKapPwhPMp/b8C3xwCRzIAAuCx4rluhoXWcRhBcg/dOSwPOOT03YsPPjQj+y5bi9ldlKQs5V/5Vd+xfpFXSRdZFWri9S4Ubj97d/+LTLhwOlQFbySqBbZ4KZGOHjHMSqazFhm+kPE7AIrvPv67/7dv3vwgftbmzY4MJZe/ef/+nu/9Vu/PbMw/2//7b/dsWvnRz7yMe6pv28AnpomEFzNs2FDk7uH7f5IjoDrtKecfIjALzZCErEqNf9gxgPJvA8jFXVtsj16MuLy8rLoMuFqaGNJmZ02vP7P/fzPW+plBVTT+phqBEFxuzi6uwfvuGOfTSn4CXN+RmCBLhK3eEA2pgcZ5JM1BEgTDuwFRTQTyTJTOWzxe/zUudW8ir/+6rf33f3gcnH19Jqy8vqW+aW84rKKXAcglqikQJlHzUZN/MbL3+0AMId3TBenvmN6gqAUOOlJ2TRmPyx/Sr/m1+AGrkpMv0B5T7/X5Ex//rBP2kIPIB4Gkv0ToGz5JBr8lOjPVNxX75Cn5LgqMVfqChu+j8M1NaY/L/9GByAmZIT+qQPgN01MaG+L8paGujrXLk5WFayOD148d+LI8SNvNq+vWJibtEpY509MOjM75dCywMGNX6t5y9nlY+J+W375Uv/FIJGZN0GMITFR9+KCIRUBv/ExzWlZqRsSi/UK2KCzQfUf5pbz3JbkUYQ34BZYE/eYyIQ2bjAWfzKH0LHZGcaIfNygab4qK5t+pnTmDIL8/gQEX+3L0rYwECm0MWVgv3SVTflTpQwhsdp4p0MgnL3jT51nUqC3vDcbhAAPpgqhreIcDlUXn509dZrjYlZs31miAEqEgxfDAYxFP5lD4PxhpdSoezNqKs02cx2cmBgLnqqzmFhjhygF3T6GKAhA2H0m8FSjd9GkPFBCOOejoJekEny7/NwLyJoneKYmmIWacOZ11S46f/b557gXzhlFmnsTIIjyrlJeAk/+4i/+4uzZ3p/7uZ/gQGCVVM4vVpALRone4KYVUOqhONSu0uiYNs6vKjDn13/915EJZ8Dtgl1YWsORyoYJRw4fffrZ7/EzuIGcn/7Uz1g7gG/WiPMnDmxwJcv6+hgbJiwybdrQAg3vyD9y7DgXBw1geWx0oZGNZN798sLubJ3znAxqj7UD7e1mAMBPXCUUrKtcF0s+UKo1x0Bw8JBwgfLV46s/ZZZuxMOxjPwzIYqINnd0wJwb5HgF/RBQnAamBkUt/jx+MgInK0tQwdhIRycIQFEHTMyLkYVELMqEXoFpFA4mvuISDkPMLxcq6PdJLaqQGW4aAh0AGw25aA+JMIQ4/cKynJbYNUcrJFq+nwwK2NGRIdLxp6/qxUBFcAYHGBT4EhN8v+pFk2ZXTwAouoEPzqxM5paljIJA8xV0zM36hsa66gY7zrXClApzWKhtiOTV2t6mUuPtTM9xnzBEyNDwgDbUAG3QEk8sgsJ5LDUXpHY4kJ0lJ5ip/6Pe2ey0GPnhTzTamiQ1LJUIPS9K+VUp3hp6xFvMVLninsRbmeEPrFr8SvfiEAL9L5+oll9wlMVYFZE+WkgEPipVJNkaT1Zllr+qxkSHIb+3337LdeE66ojZs3MnkwcZqq4XEJEKbp1MAhPANfqwwgd/qgXVoim+AmQDsiqSh6qsrBboK9IKGRLTaIK2GLaJZGjkqCaLvG999n/zN4kaJ7YZS8cXKhPjU46UFziayndvkUkJstQrwEY9PH4Es6gXdNF8+vRJmFlpJrCju9zHgbff1OQn9TIeb4CfhBRhYFSfgaFB24RTcIKZ6qwy0inXvV5eDRHSIeMTsJLBZkqPCQ9ke5TFACnIsxu6qKSQTkBJ/55AsUlFahGECVNIVM5xh6tn1xps3Ni+tDzHstCIcYLvTFp2azh6ttn8mpMtzRvQqnvvty2yzhUk9XVhb9DwNDZtkJ9C9A8NNq6P92ln3WexI/6gXYfk+NEjRlXpiq/cOi1UF39ncQs+kwoBEBUmKChFgGXu2/z3xZ6LBrl6+ntsAhGAd7R1OJW/al2VXc6vvfzai6+86EyeT37yJxyKiiIahjQmoQqXR2gJQJPoahXAoaoWfR/ariW1DkdHAg6//Mu/zL+TBQ4nA2PGdAWBkKR2OLO07NDSntcN6775VgzulJTuu+FGF05xHFTTZYHcAVDYTo1nDCqPTFjFw+nYByVY52i0MY4RANALvbTaj1DYdlSa3dRGQ+BAf3AjWSNxG9eBAJ1BnWy450+NkPnu5LgRKJGmcR90Jgma2oD23ve+l7GBRuLyaDVRJCdx4D99sJZJT8YnTCMpBolX0vt6B6za1SvhoPVhjO9RKul4qNlWBXZJgZJHkXRuur6No3vtjmVaxvvJ2u5b999ZnvvTP/Mpx9XRBNV97KM/xrBDxLZqZbvrAMEHCoYWm3Rx3lduFPnSvUvxQqx4xbZpOv6BhqsETabqQqlmEnV/9Ed/dPddd6wuLjEsdB09eWLnzt3/8bf/34pbXwSqF5euEoTmFNWtG5o7O8+++cYbY2MjRIO3on+ag4rEN4xFrx4U5GEYxY2eVlYQzb4bb8BeC4hOHT+xY/tW7IWhjeCu53NA9W233wkxSxNjBKurm574ivPmIqT8zM/8jMYPhqm1UJY2inW8INyiIOpKiN7RCwdl1cWEpeMbqfmTMtCxC90DOgB/87Xv6AAsFVXpAKxraHX6X1Gp21IvHwOaOgA4li7E+mH3ADB/eTykmvuNlyszAPHtytfcu1KhBtmTElMHQEIuT3r5Yb//d3UA9CNUgdWe9JJ+HdQm+OfZMc0nv+nBbchjaSIhffKb2PDD8L8mPc0AqM9hahb/LGXzAJbsqFrrWpi3Mtjdmb8wXV2cP+uwFOs4zh65NHyxVLxtoGRmanXJzuAiA/3G6zhbtesAiP51IUy6B+bRZ4mVRdmpaIVxKkZMc6/oA1TaC6wRX8tDLcY8QGFBwFwwCbAcewYyF41SGsvKQPFLnfxJjVlQsmu/cWptNtHkl0GBzxv4FSbSQBloPq+oID3UcLS2iHViExdWMFWgKKSv2Eg5tRQJgq/KxpxooYPth0XDFP4973kPR6dt4kkYLMuFJ7+XuhPQ+9rXHv3Q+98reAWQ8wSNB+B8MpdSL+BOw/A8A2SiispyTc6HP/JBQKQwfKC4UC2vE5mhlGRtSAgHIIB2MwDqRZFaeFf9aule+BNmzsrkFEmwViYGPQ+2oBQ5sIL2QB/r7JdfTkcyuLXDePZHP/pRToO74GNxgPP0oBr+H//4xy0EghgOgwZ5BSHp8dX0IzLxEDkwwQQPL+STc4TkUSm0+YoYsF9avOnmWy2ISCNHtsMJufbuvR7aX/3619wpJnbV+o+MZdd+idpHRicuQTk6RZxbHIibnW7Hp/X09cMEi1Sn2ZdOQ6BB2pD0ggodFoxSNpN1I8855WrMbOIdN9iOdB0AOTGfngACVcWlI8qf9IQH04IkaerIaDFfeOE5QMLPZ9eiqxeNhuHlB0rVdrYj3zvxdWze6KvZVNn4RspgKNPXdLtT3ISd+UO6RxUT5hD2kjwkZUMmiYMGK49aYC4DKXAHLhilEookcfuq64jbjorS7CqI6lhKnK32YRpO5IK8RERpMuCjrFaJ8qgCE+gS4CqFMLboKfvkJFOcoRu4LT7BdsNqUpAObbqhiIUeDfXr33pd/zaWempJxf+QZEKqM50u/4nTZ1jB5k1buQvVqWtosL+8pBgz4WBkT6VwANBBGppOYGlyWWkMBwuxFBGnos6fKIU5/vhFBfLVpQr4+FNOqOK8e1tpu/ZRCr7J4/HigZVED+YrmBgLJYdGFq0tdICL0wzWFllqW2q9eIOVwK45dK+wy1LW5FfWVLm7ZHh4yKIZlwbawUJPNBrtba0WLOhBt7e0xuDI4orNvhbX6SfbFEB6awvz91x/nQPKu3p7IOCh8PBEJieAZCnm6zw2XloFZx3l2PgkJcEKaoMJ6KUG8PdLEB4UJSVEi50xG/1j4zkuWNGhF6SwrfpuKzAJizuUQGBtx7F0eRyx2tLaKl3coPFkGEkt7HLBC5tDX3v1VfNFAg7bdln4jt17qA6qPBTLaL2HSIy+c9oZZvluStq5a/tdd9+BsFdff5XXIwMRErFRLIct6gxo79hYcvF6u+BDO5z1zHJbW4sMOELhkgX65Z46z51x4RUIwCpoXIztN9RX8yZYADeezj1EettqHBroM2ezfdvWvXt2Gw755je+7oRdVPNlVp7IDyZse3p73eZeW1VtBscgXDhc9/MssdjQQo6GWlwaH3WgERYZiWlrb0Hv+QudJ08dN3kqqjN3o6Uh7DgcI3/1wvlOkzrtrbYd15hcsNffWWxOju88Y61brwnZ7Vs2r6+pu+eeO44dOf67/+k/O4TBYcxslecIG7adpbTMLi3bAMhbf1C96LJIA3OdDPXUU98VFxqtee6552g/9OriLq4NyKET7tYxTE17KArfR+GskmKNIuY7br3NMfNvvPY6nJ1eZDp+//79RWvztToPPrj/1JlTL7/8CksrLC6n1hb/0A1iNe1A+ljBC9Af+1ocl+wMUxLDB/Zv2I/1yqwj4Zf+MDyC07RgL6WCBu0kXA2ABzlwI1yZeVUP0acwkVjpJEHLQ2Ek+gqHpOJ6jwJlfRVdCJGoPJrhBx54gD6gCEB6qw9z+MBBY2k337wPBGiw/J6+XjY2/OrQ62+8xnkYQzJujeHwdyLV5MRoS8sGlyWfPHOS7W3saFPdxNS4tY9G1qm0wYE5AffIyOPffpRrwHnz5khWL3ld6O42w7dj9+4t27frl1t59b3nn0cadsHWWCBzY9WIEgQQqCLge5HoxSMzeRkvAdPTeeq07haxptgd96y3yXoIsYXLqYqkjJky4K0alRVJ8x20kUFhtU9EQMNBJjhGB4hsfJza4SMFq5H/0ovPgyzqct+69NLZUpYSV8pnSwwBcSwrpzaeHQz3wpe/tHX7NoN8hhUMZelIpCMdWJ8FwQb+eSiLx4GlA+hStRcWTaY0UArEYMWrQMw7jfVpbWHEtdL9hgVlT0qR6JGQ/rz6Jfcpvbz7r4L/wPzwCZSygvHyrs/ljse75rn6Y8p/eaFOfBAzB/kpT67q7AuTj2u1VpbWxrkW4ZxC9vJbSx//CaZjkWlwLv60+VbTkABdQzUeXpMSlWZZr6Q7DEjZLGiPdHs7yNNgioX7BcXrahtaIux4e2Js2W22K7MrbrUp1KCZm192IeTljpMdvtGrRmPsI0CZ/Wlg6aZAzYio7OJ5MwPzJgfsh85Xnw6hwMt5pMtCOdeTaH1pIHWlPIIVFHtHPjg0J4XpuTYb/KTYVFp+NpL0isUxB3CkQ5vmexdlUTm2wHi1YlLQzrtiDn9C4VXnT5/AYRGGRDUBnABzZmLMDRwvBJF8FKOTTb2yvf32wd/4jV9/+smnfNUYgay3AE+Gr5ROMl/E7fgk+IYD5+a+9ttuutkKW2sGAEQjqxdlvvHG6zAM5Jei/wCgX3vPTpw4ZWuc4Ja7cwQZB2ifLYq8i9yOHj1u6AwER5mZulQX2u/bf69fhyPznODr0WhiRK533n67o4FYK5I/8YlPaETEXGvOdVbVRMD0la99lY9yh6O5U6jG9d7ZJAlfQSfUqIXlf9BOUI4P5s1kSC5OLewdS7kduwjwU19i6uK0HYYcgjEURzC3t7Y6UQ3HLIj18tprnEOevbMTSzEe5Fwo78ti5qUVzorc+UC/hpKx2vQs5ghA+T2OXS2OmyJi9Wa+JXQMydQmm7GIg5vwPyUiilzSn16UAtCDIu8USTYVeeTUrEgRLSABsdw+mbgrSdhDWDotjntRMAkIJzHKrxSzASjVcpGg6SagDKFAyUVQrMASKjUaZIIGLH0VjwmfdBLGxx1fEdc1+KS9QxHg3rWY1AZWiS6oQh6qmGwSwIsUSPKxIGeEr4GhRCQoYjDWL9zkuevO2y1YB1nwcGlkNKlZR1u7i1nBBFCpYhNcayyXnZ+8NG6ptlBtdGgUXTaO0+dN7WELZ8+eVhZMj3IGiJkb2enVW6ssMCgrMd4Ux9xVVtfwB5RKzrKK7PjykmJGqnsAK1rKNaAR95xMKD8cKLyBPJIFEH8s0iZrTMATmoa3kIQPhJGMLYoAjg8A4oAifgGRgr+AeMcQtaRS+KA6BfFBEYYv3Z8yUHiLweem9dBmimw7Ly9eXnBLyThZ9w/1OcdoY3vL4txSV+/Fs6c63SbEcS0vLY6OjG3YUG9Zxw17r4OemY2xkVjaZKbHxUEWCs1yikUFbtT19YVnn6Ovbcbo1+QfPHAQmRI1p6Iv6uEqLT1Hkx60wmzR6VOdawujP8OZwBMhqEZgwpZ+Jirg70FOXs/Br2l6sUPrYGOrxUmg6yjyubCxK0B3iFaJkofifPe107PhDZU0YO+X6TocECPMaIAuIjPAqU9L+203kb91Y7tRB36HsdHvY0dPwImui+3cnU5CEMVxMI1P6QkJDqBrZBccvgbk5qZYB0KxUr1ELqhUNZ+rL7W+qUHV0KNkHpJ2wGIaiiA24zdUkPCQoHZkNtRbjBRgMUK9cKY6rsVWF2xN6MJNZkWsTlbL66+/KQTELHznsDiyzVuycwNWYrGdCJKiGMXHcUcQxGTI+JhlJ9SUfkvEffTilQlWK55VyrFKp3C0EBpiPk61omxdcVmJHqRLh5201z80UFtVY1Xb2PCohrp1Q4uv8zPRNH7rW4/BjVobb7aHCVf5F5hoLcjb9E5SXLyilxaoPfnkU2zh/R/8IK4ih2d0ibogDIYOBUgYAhtRWqwZMMprdezaibFLdK6msqL7wkVy5Lynxi+h3QhBc8sGLYEiXK3FS8dPnrWS3twO9QUfQP6orr6GyDSHvAbWoZTN79lzHadPqYSt2M4XEw1zogB4hefaJ7+YLBF8SHrhScFEXVISX7k2v4alyQXOPIU82KgsfibOYzv7B0SNhA6N73znOyQrlBeRS6c8VBTYibEY5GtsjuW2IOCb7pwiaGEXI9lYRRZpr6c/sZCxpEBnzwGghK5/I+xpamxmMjLTOu7btVYnj58wg+RCsf6Bga5YxFmp3WIpRIBSRGEIT4SZRGlkTuvLHKgfDtx43XUwAVB18JRZKRyQH9OQADFA/uzP/oyatTQ3zU+7cLFFiDDukJSpmf/x2c/89m//tj6M06MxIfqYzjjLLiF6+4032Zf+OZD8rxU4woKw6OlpOqMKkKkQ3nqX6BOHInFDS4txV7fIvfD8sw4bseudscgGc4MNWlZHoYkDnHiGA2aF8ZDsnnzySZ06vSxrhHSxTAUAyHjNBuhFkIuQi+yoLgwVIQuS9TUZMmJxCStICjfQ8uabbxrsNwPwxW8+aQZgoaBiJq+8qmmjRGMfRqriVHuDflmYqmxampL+xMngRvaklx/25zVr4nMFwVMEqn7TkwFjMp74lZi9f/8l/XnNr+3jgVrWCPlNpXJlr8mcZUgRRqoo+551AGh+qvAKhBScQy9CZ1/TQ5QM0G+qiwgSCf4MFiHKtrMrTw4NLz6l5KsTs2mVwCTW6+fHGaDpUt7IaZZm7VpnD69ZXKgoLbadECfnp4bPHn+1+/xxO6qqnN1VkDczeWl5YZalOY9B98QMAAtyUVgAdIHj6prZqZhpFK1w2HRA7QihhBYRmTqvNOyCzStLei/2BFPX8ooaBVkue2EpzFAiMmHE7qgZIEm3U57JmdB2MOkwg6FdTIz6JbVXnUeKIvJrZ+0BMAfOU1FO8BUEFkyuRh7F5ZcCFN02YWokNa2pgIAo3zp4vlo44oXxqtR4BI/HeKGhmTt57HgyDS2CgSEPsEhgQVKCsVk3hsnIZnphdnJCQRXxHiDzyQcOvK1q/hZ6xp4YlEceQ37gnzpxlsR5RU8wNht350AYOI5xwtw1Vwm4STnT67oQ5lCEL5rmpvr1irBP+RmmadILXV0333qLBv1C10WHQPv6mU9/mndlyxojPLTsUxAJOBywUfNEImhJ1s2/3XTTDcwZwjCnmZgMOM4AhYdIAAQt3jENWPcRYfLv//7vm8eGYbqY1tZEEN7//g9aoKWZFgpDb2R4VCkBrpgMZL7I5kisFnmD/73nnsdP6WSXIiS4ZVIOOYIGW+u5iFUeyBhTphVCcNzDKHzzQg0mxyPEJJSUqKxP3hVPWkFXSRlA1dlubY3xrbfeTKBcWWNDAz6AjzkmK+THCsrjimUpVAs0S3NVlHTe8cq+enBpLFNXc0+wEu3IgMkwSXEXtZGHHKUACxlfYesdTJnV7k9tem9X9/jYJbSrEZk+WTZMkSxdwytDYMoKkkmKHyaLwd4e1oRGvxLpFRJAAz/Tw+hFAIJAxX2y/k1FcGYvPjEHrYzwXQNt8keNmh6NAhtO+BvMw73RMSc0Gkgqc+KhDoC6TgmWT550yhy8jW3SZMejM3zDG8ZIIalGi74QQn9UJw+Go5e4N7Zv0rLQnxg4zpYVJLeQdIx0kOMdBzyQVxAcokeXDoCvGZNL5cnJmkBhKL8qVAdnL5ZI0ARXIirrE3pJHyilSJk2ygNPyokzMkC7pbVJ3JLkXrWuwq7ijLd5s9MxjA/t/oFeszRCDoTgYUQvA/38mPhnaHBEcKK46s5fjIX3hB6TpaUWt686/b9voN9aHCgSOqISRSn+kSJ/6EB21SD0IIP2AvNTMDaHaBGV4H56ZtxqMEvkhX22cg8OO1yy1rSqoXbD4YC21rWa9B+5NHbjzfuM8SMPQ+nfxPgCdFiaec/vPvH4Rz/0YbxwBDjZUwxjIXihFkPjkODBbrzp+nOdF2zBwVbswHGKKg90QROocUDww3fn9hgO2bV9BzXFiFD/uP2qEHf0lohydi5cv7mhrgsXqSz12tC43mgB2VgY4MxVTQbc1pWX0/eCvIK66jrEY9n6uvUIobiCs0srZnZKHZxz+GCXc5dov4pwprmp0Zk/tm4LL7hLQrJeQ82dnefsqpxcjWlN+qpeeZw+NFdXQ9J8VlIdOgFVmKtRxGkESDBENf2ZGg8+cnlxfnrKaJzgf7W6tso8gLa1saHp5VdfWphbNND1vWeebtywfse2nQZdHnrIGHY5J2uX8Je+9CXm5LhP0LQHsBWf4GcyV/PFBuQ+/OEPf/vbj6uRcmuQ8HZ+ccE7IRIEBTI6C0Och/CliTHLLnENRaA5lJfSmGHAio7YeL7G7jwcYOgFbpDYYGZic0PjBqvKeeeR0QGmjnYidn/CI4887IIBXp4jFt329vWcPHlc2UceeZ/qIKwKyuOhJ2ox6qNGKBGrlMR/lgYxX6PS4WHKgGl6UB5mIEV1KPICN7qHHKGwl2SiMqdOi86SBticgzaMpPAntceYpsulATt25BDdNhhOFUW0Hu0KB7g1bwvIWkQIT0xPWB9y5OgpWFi3ZwzM6Bq7ghXG0ky1y+bI5NH6WsHJrTfvsy5IcddXfuMb39AAezcxLRuiMAHa6KLnaIH2s88+y1MM9PZyHATEWDjc5N3whAcBnIsnX9JHBRbxa+6MQBe+Ydpzzz33C7/wC6k512/ncx1OCj09fTSCpoMGzgMP3G+EkqtRhBT84iFGecEQxTGQqkfxWBMY3U4cUxDy9JnhSOFBiHXHLgsXd04YOXCCR2n4zfTpqaeeMkzIrOSh/GhHMiD8uCk1vEIXckBDmirIC1h0hXVnmw7xR4pHQY/MeFK0WjDpcvrsUZGvXq8+9lIVUhPCVyJYf30/KI8Mf48nly338u6FctlyL++e//+Or8hMtMQYD4DZ72XasYVk8cevd1qKyVfj5t0T/H1X5siTUL3yEveARUqM2xuI96/JhGzJDafhki3RwFq7AmwOXnVeY0Hp8pZd1zl3waKLOTt65bZnIN9EdzqqVN8jQwEWWUXOGLXah9t3eqCtAuqhBmYGKN3s/PLEVAzC2YXvikaOWlhSUVVTVVOrw5NoUU4GPoHC+KVUzFkFqbWTBytkYHSMwuMT+LSRNSmCRVKYZ9I9rItuRYwFzWIgTwW+bCDQdtA0NP40+pCUk2HyE0Cxb/6WhlN1v1o04TWwateQKW6tC1epOdCos0oVgQwaVwAHn8BXK4cMc0Ew/wCOT1UlDtyxvEFwH6vmOjvjEGT2YhTftAA/KTRXNkZwJiY4ExatYBohBt+fiostkAka/yObUtasirl5gKHhYVOaoiFA0DVuI6CzaFRRWsaK5Ye51vexxx6zy4jHNqqlOHbhM8KRBiD3BXPpILBorPPVwJMquBSBBF/HLSBZiAMrGCIhYQI9uGE1zyYFql0nT3AaVoPt/9GHeYDOs+edfWOpQ121cQrHTK1pamywi4+/dcObI5La2tp5qtSsGD4BgRfi9iUqTtaQvOSsP/fcZwG99a6ESILq9cDKu4f+eFIHQE6sIwsZfDJgjzoiwEO7MMOfFxRqCyyXNWFiU4YIGwN9dRQ50XDUeIstulW4gTmEKxEQhKtd2y8laSkEsMvEPLB6x+qlBWZkzZ/Bv3RNnOfBOQuraKDihs+TCpEOhGGoXrj56gFNjfCXEuRcWcLuk3QA2YiTKH3VSSMvaEjct+9GTYD8alFEtEMJ8Q3kkydPUDxf6SpuCe5oCG6D5heNsp0+HbtBYILb7CcqXYphdXKnJICQsvyWuHj4f1McgwMxqGhw0Ao9E0Q2+tENBc93dTNBg1nOfqXPTmTZ0FC/4AzhwjysXq6PjgeE8arCLeFXtgARgQVGulW+DnR1IQpz1CsbfoYEs1O5pUBDi6OgRCohv0HrutpqjPWVeE1QgE/DDRxrGQWZBLdzRyw0CA/COi7FvlAU4WHE6END0AbQAKVWT7o+lQ3UGly9EautZMMNEuTBbG1iDrqCqramhdBUtG1zHL5ZV18ryHn55Zc4LdGIIIiS6wDDf3h0zJYJK3QE/qqmHhOTMdhvANqArHmSvoEhqJMsaCQIKx1/nStVi7ExHtUUg6TifLPP/Zd/JhP8rGOmcHa9WOJizHhdpW1DlWOX9HviKlxL+W1ccEariFl5Raidi36DSXMzeOT3xRdfNP9lbOPcmdOkhQAe8LY7b0Nt8kF66hiHBqjDD6dc6qEs+gkJ7wLv6hji9TXZBi9gVbHqrEGn+kgCQeBPg/1JmsZCJuExMcGu9JAQhvvk7S4qVod4OXVfiZxdMbn1dfVqUZdOCBJU3TcYzlr0bwsjlNwTXLfe4QDxKGm11g3X3yTKgc+LL78C4E379uF7V1e3snN6ZNlwNR9NM6DtTnIE0oxkAABCiZJ94QtfYGD79+83lqOgUvKYyduyuQNB2izuTC/WsA7X4Q4vjhSG5mrNxxEHQ3bRLQ0YGBwxsMUg0WtMFGO14/TM9AJsuQifIIAhJk8t1tCWGgG0PEilwjLcZmAya6whbC4URbwVikx7G5YTT8WMSkFRf1+fk7dtt6hZV6kfP31pYmNHu0hXKGnZGOa4/HXL1u011fWTM7NMHTmqgCdoOgA0Cj6qGB0bkQIfA8YOLWbMHR2bVYrnhE5xlQonmDW9eJX8lPYG07x7UJr4qYh3eqWN1EIwMDrArRCogN5XWKWRM+kQSP0u6qoKezAA0RKQlI4BRaUk2oaRwREwoUoip86cobdw0Cx97Mc+LhF/4MZW5AHTpIrJkpkpZK4wbH0bG6B/5MGHaJqqm5tb3a9MBxDlhgPzpAVFJYeOHhOlkghsDYqrGkU6JERGk+FMpSmJDOyTinaePm2JLfeBOdJ9haSymnYaCLjxLZPa5OWd23AUoiVAap9bWvzyl7/66//6XwHlXALugA+dtkLOHSuTk08//fSPffRjv/u7/7mmuvrmm28SkWAjN83WgMJqFuEdAtiSrMafFu0Qd11Dw9nTJ/HQ6n8r68fHRvDnq1/9Ktxuue2O2MU7MQV5l9khrbmpyewEuZsroC1CBFMueIt7eGiu433ve18oW9YaSWGSBARJOHAgvAe2o1SKF6XkJAKohqLOu5hk+cuPPX3zPQ9Nr5bYA1Dbstkm4DVrHYbrNDUTBNkClyz2v2YGgL8D0O/VL7n33Kc4le3Kk0v0QuJ+ScRverJcEt85/xUY1/4rBKbqUtMvUN7T77VZs7/pYPZv+OvLz+UlQJGSar8MBPEBPBb7JAz9qgUnPWzwcrbsm7KX0chYkj5lAC+zKH1NNea+AmwBVlqDlGWO9fuplJos8XEosJZFc7Uwt6CVXrsyXVk8M9wfO6MunDmxvDBdVVaYv7I0NzVmEb/xvKwhYh8FTsADWEPlsAFVu9/dlgDmJwQ3DqoKB+BRBt0DlxDl2xC2uGCdMWWzQpoKycC6hd2sxp+Mi6Ojk0DRLr/ePQgZHhuVIhvtFR3K5k9ipWBKyeNP+kkDccypD8aYTT/IEHRmRzOzOy9+FWEUYAJFk+WBkpMNLQGitICDIyeY7IW7AEiLI5t3BstLQMzMthdOW2wkXEYCYwEWcBEzG+QifIIwmHv27jID4NSNlG5Fqx67qh9//HHLTUFWIwicsHiXrfEAE5fi1DXuTu0aixSIAK4x4gwRa+TeZCAgWpP2jRsNc4DTny2V3tjSxvnYk6Fq7DXLB5PHv/uUDsDP/OynOjZv1iwefPttYT1PiO1QBRkoJKAluRERMJcFYX/Cys40rgZ7WTrk0c57M3CgoKc6BZHjk7jHgfFWI7/wwgtO8LMiwIl5N91ys9UOajQt07Sh2ahlZU21838MNQpggKVF4GA4sOXrLBNfVlyt191wo7o0Q3g7rTeZLX0kHUOQhj+SGlA/OqagdGNifrMzoJa1bjBEF3aVFsZ6dxX5ilgwMUdxtGt6II/25Cv4wObWZn+OT43LzLXqSskvnc7YWg0HXz2MCPdkAEcH2+McQl+9q5EuQNuqOMI12UUtJcopP8UzyAkBIRa6cE/VXignJMFBi8xyqpRYdStd3GnzDOBwAERZ0xUkYnJbNqOTiHWKv1YAzmb13TPT09PtXXFM8EsT/KkKmGiFMQEQfwKIRfoq6gVKZtqioswKYijduVXeoUeyYh4qjWNC/+bmDXoo6p202ebSmH0Xml2n2dhNZ4zfGLMAQ2Y7Ra2NKS8ucpUdNFTKfTCuZP7iCphgiCp0n3ylb4bGT506bf803OAMJb/y00YshT+spEA4yd0AWX1VjYV2kCEpX7ERl+TBEC9ySsRSjz+b1jf0OhZlbsahKeEb7VOdn+MidVfuvuNOJ2IbIrcCU2hlTHmBpi9GwEh5sEVx8zcURl/FenKryvHQAwc7MMQJKlV7XX2D0XM7HEjQVDyiaClL1EsSnDnjSCxkAA6BCHcDslhdOnJoAlTxDaq4QSIqlU7fQMYofMCQvMPf+xOVUSAb6ssrbLWy5HqYdbAs8brD+mNXwHwckIS3tmIMjYxZQW7CAiCBN1j1dTXe7RaHInemv75t2xZitmDaEb8nTp/QMvOtfNzFC11eZBbjqh7S+ivwg0fMbxo4H5uw9AiWiEkZIKpjTcwFefkM22AnsRkGoVuYZYOlBs5QN06Bc/DgwYjDNrTCFv1csFhZutCUplIarrDECHW2pBijkQMH7lL3WlupRovrcI2wTc3o4wrWL3b3awPICaVnOs/RDKbOPfE+ybqCe739HCv4sLLlpb29DQk6yoDD1ruvyLedhdR5OqCoFwzN9XR3ndvQtB6G1hzxnE7ij+G1PAOfJUJ/KcIwS9ZPnDiGll279w4OISQut+O2IIw6B7AKs2AIN4utLCzzSaVcp/VhHKIBBUhCm9HgpH4OztBUVFhzGchkS6p8sqtBT/TM2VPbnFakXVxdiXUl2aSkPsTYpWg7eRwSDAHZsb3C255p3BA3pFBrctR5UMJXyFzsugANsiB0AxV0107rmWknbIyR1C/90i+BQ/HoJXJg6E844JhaPEmmpKw4w/OVMmAyhMEXmHr3KI4P5OsrOACSizhevVDSBBKiPDhPJ+kPVIlJN8CfipsSdQgDTWAhIHCFJ8+cxsyjDm3YvPnW22/Ttaiui40xRrl1AAQkSNTAQEOkbn/2/vvuN/F97OhRlxWKOzDB4+6Fnu7ulo0dLW2bRB9JbyknJQdc1ZCENkHAGY1cEo4RT3W2KUJ19JBtG2YTRmMOhaG9P/mTP6m1TsuZQrumJ3dts8+h08zSH/+3P3Hq6+7rr8OoE6dO6mVhoLWG6HX0p9b9lpv2/fmf/9nP/ezPOqsEaQbh1IIVcPCOpREuZPcfaU0ffvhh2DoRCw6OZnjjtVcocFlp8czUtAkrOf/6r/9ab7auodGNyPML4WIMGeDzyNDQ17/+9X/yT/4JnAU60LafhEqkPpuYhpdArBRUQxUOhEvo4eInJsxoIZwgknQAkV8eJklAQ8ZKpvO+8u1nLAGaXC6aWi2ta92iAxDryy2a/IcsASK+9GCjl/TrJdcByKWkF9bqhcL4TU9WPOsAZFGwxKsBpvdrfy3B+Ed2ABKkrBuQdQA0W5KAiw+XU6SxDv8FJmEbmbHA3MOgJGK19/SbXlzKEBCu4kAixNcfTDdub2hfuuF/5NoTzEXgSMrpCnkNkpNLigpLZ+eoRHH+8kzZ2vHitXNO7zhy4M3+rnPu+i3MX3RRQGHMICzF6QexLMWhotEBiMfNTzFlsWLSwLogp/RayCEHBZudmaIvTgCNIKy4qLYmTu1wOlxyFCyXtnAg9IQyy08b6RId806jUMToRBjpK3/I9NRF62TzKXkAygaI/FQUOcNDtjNt4YLoJ7tWo+IYSHsZNa7qnAPCWCBpRtqZJ2yXTclJdbkdAJmwUuIe0bkXHoCJcb+KWAYAgpw+MXaGwGtBQIPoBc6KQ4wVC++0dMcPH1ILnCG8aVMHKlgW2quqK7jEc+fO6tgn21GKzZqFYeyQEbfBU+iMIdyjqxtNs1uayO2oxeOrQdSB4Tg3zOUwUrZt2sJHDfTEnCRD7ti86fnnn6+oieEnt3cbvJHTVEtiIClAHs/RIhv0ON403Yd1WkPoaQKoZJrz5Hmg7RNosII2DA0S8anYwtH5pK0ZGx3eu3fPE088yac9/J5HXD7DBYjyjB1pgrWJeGUKGuSW5jZATpw+zRmKLGEyODSCUnzD4ZOnz5AyQpBfmA2dgq/VwEzCoiE+ZWvloukB0yow4p6ciLlNZGImgGQhAEWpT3QAKCkoBRktElMemVUqw9h43BDv3mJ/gmnmXKKvaDdjID8Rexy4h2RlVe1IKzUix6/4lYpqIuQRU0ocGY25BeGZnFm9s0rTVcVTCpQIFL1QItCEIZWDM61wacXo0LD5CvSSb8LcCjvFH/nRh+kSbMF39gnXjTQTaR2tgpl5ukrKunnwB1ZduIeiRK8UVbBdlTY0rGc9iXyJ+nvQ43VIH2I42bC+bv/+/biN+eAbUxfJ8d+eqekZZ8+409fu59def0sgK2DQFTYPAPjGjs3aO4ulzA5SS5alI0Z2mAkrM96kn3hrUIAroAOOw7b0ydHtcICkXwjDCpnIR4UHizz+zGCWOo+MKcmDfOSoF3N8pcBs3MMVUFcM9G4osKWpocSxxVmn31IkK7pAtB/IrCXVwXD7uNtabfCdtdhJGHSxp1uQCQir1AkkF4d6MS7H3J471zmczfCzIGYCK7G+a7/w01ZV2uLQQrRwR9yZAcnQh7FxeLpdBapYqi12rok8EMYBn2gOupCJIrSDiSKsBg03vOQ9+tnfgMrRo8eJ37QCi7KG/uZbbvVy+qx4t9bhogwDi/WG6xrWv/n221bg2XPjEZT39HZt2bQZuhoWi9FPHD1mCRBeO4jA9RZnOs9awDE8MrShKfqUFEh8RnJnz54zMCDGFYdBImmbQ4e4BiPfVl8wCb0cvzLTPK62KEZVwtdwlBocMvAY6NEEIlU6erhCTgRA8SWubdqyWRF4bmhqoXw+yWlaztIdfJe/vGqdwQkDqDyyatkyYdPFWSjMzdZWV25oaXMmT0NTzH6aDTRk4qiTV199dWNHx0037aNtrsSSbjTFsbVcgNljy8JEhypibwY5cJ/3VxdjGyTMoeEtW2J1XXIEFonv3rNTDwdbdADAIVTvsKVSNFspK7Yt99BZBF9LuXP3DbZ2AZi6TAJuKBMq0XZ2ntX7wnylPB2b2p2/tGfPXlMHnCyd0xjCh06MjMV0IU5SR3ZopIEhcdb2QJts/cyn/1SXFMM3dbS7FtfWn6rKdYYX4WYJkLr0xIy7V9dV257PF+tww43+mXPwFXyc0VHCee0c5cZtrtx91AIIMwbGY6zpvPvuexVBBR83NjpuhJvWskybpEmTKDkLXBJzgUZfAfEVWwCk0KiGP3KUoiS4TYGTouMbgVIq3PCi7cQuYajidANnYIgbTEK6u72okHFB0HwVZINs/B6Sb771FtnZMqFPZcEbodijwWQujY3KI6fnjVdfmxyPjXG8Ko/j5CAUhbEtcpEOQJg4feHC+qY4jYpPhJ4GCVFUF3XPPfccjaKW3qmKXiJa3PTs5D4YWn4T5hr+NsaMOVzMNKwOiFLMF9+M0NTWVPHpBhuanPUxE/Ohpu0JlNszjjIyFDN1InKgxkfH7rrrzuqqCr4MQEG/iQjQ+A7cUxBRsolCpBinp8MgsFkQeEufXAb0/AvPtre2UVQzae4BuDQxbgvEzFwopz0eJP67v/uffvZnPqVDZfAG9wT0ZgaQD2ckfOLHP06LiECH0EAURlFpbgs+uKHlZhrQkAEo4iAUjRn2aj/w52LP4ORs/lcfe2bfXT8ysVw4uaa4vmXL7JJbY12IZSmmw+ZjGwAlBNCv55o9AICn9NxvSsmlX9MByKUTjXey8JueDMK1HQCfcpDf4eUf0wFIAIX1lyPyFO5fVc+V9Ky+CKazuY/QmwxbmOMGZmrpvWryUqgh3Z/SLeSJ3lNWTw5/3xL+WUoMSQj7JcXdM97w2XYMYKNc5MzW4aztHzBw6AqbMmOsMWC0ZmF5brjeqsa81e7zJ46//UbfxTNrV+bWGcRfmF2JbZsx3h8LifIAB2/VhKmZBMlTDtu1Dy0WJ5Zkq4CsHBKmzxBx9bpys8BWgiCQP4IhBaZX/mSSfAIF5iW4OAApEtVFTkpka04+4Nz4+dKiuGVTccpP29mCd/XBiq4q5089eb1WXLVzjAfTWBh7ds6BNtEopgCFB6bqRtOMRmuRZ+emeXjuhW8x68jWxCWYrAouRUzM7ozN+xNuWgpV8Bg9F7t4D46LS0SLbDwAteeWHSNhLsVojq2N45dGz3fqdcQZaGwKcJD5JcgPDPZBWxFksjvkG9oP31tcBv/EB56QZbFovxo+SCqOXZlDWHZWhKManDoC4ZdeeFG8ohaX4xihRHhUNzhgmIqRilGJzLgAbI2cRZubly9Adz0lX+h+AJPMD//Ie3gPYyvuWbckho0bO/BVi29nhkpxmPlv2bQRo7QmVEifhPhkMFqxc+d2OsC5OUACwpoAh/8gR9zhMHG3RliWnGYAbHzistwSVV1R9Tdf/MKHPvQhTsMDZue5CzpdSTcU1TGduDR+/uIFCKO9ob7RqYO8qMlIEYR4DjeEK4YToqO7tCTyxlJNP+5BODa4r1kuc1VvtqdWovyycX0YCKAFInqaxuDIDmfQBbht0LUNtbjEgwmjyV3DRNDMCAQaKxsOkwghQhWTRUEaVnGhvjHVhQPttZcsgpD8/Ib1TVK0j9pGu+xkoJlCT02a7ohf45uuS6MVHsDBpBUeRXp7etweoc9mQNWFcTCn7Y4VufueO9EiftNcYjVvT/HglxESC2OaGtZ39/UeOXjIlgwO1uS/jvf6DU31NbUsaHlhyWzfutIYAYTq9GTQLqCycmxs3MhjJY6h3Q4Wwb0R0kceeQQJzEFF7mmlsTEvE8tAZiuqq157/c1Ycz7rhrA1cc/m8Ni2HdsNGrpk2xKgkYF+Z1JjI4TZDrYDjjo9fW0uMVlZRx8MUbFNq51b2zY6ZdG8hHge1XNzxvV1bKyNGdV9M89j04LRVL0JzpBW0WQYwo0+0BNyUQty8JnUMISvpEvU0ifBnntMbr/tFpYCB0VkllNMpR9lnQXcdIb9CWEBTENj/dqiONtarAIaCOmBszididF/IgaHaLAIOYSv4fOneSt/iuUwyizpwYOHjOEKD3SWDJfo6nCAOKlzC22qxdGpXQpGeQeNiUFPohRi4hg9eT2vfg5+w1YsWD44ZxMVVzLcuEHE2MwpW2RJKlbY0GxzskracC+8AJe+UmLNgKkNI/Ho6zLiOxeDH6YWLCxTGZV16Z5TioTjrJ1GKmi9hPNKs7A4hvkTa3CNEfIRuMAtmlIR05hPUKMilFLMIaeyOgOk609l77j9drdJG0TBffBt8KLlfBMOHj1yHAS6ixdOIIEVyPIIO7AYO4D1guOqS5+47xD5wjwqqI7uhyMsbaRVStXWmBEhaijYkaNHLQGiWO7k3Xv9jSbO9JeEQfAvzFtjBy0hEfO27bHLWV3kJ7IxVH/q1BkNhqppAL8fK2FX87ds26pGFBvsUhH/LloSfFsHQvb60HYCODXIfAsuVtbU6fZhC3lbsaMfRSmNn6pORYai33jjNf6I2qFdmzQ3HSPH3L0laF7wmQbEoVTZ2TL+pArOgKKC8ne4g2x+TmvkUcXunTZ67cFn1yHLj+0SOW6/MnOy1NdcJfXCGUSh2i80wJTHu7LYyxjQ6Tyu4ydP7N67V8hA5W699fY//fRntZ08Iy2AHlr4U8uHMBxwHVRyFEqKztGuUVSRTrM8uMfNQfL0iZPISVRo56BhWypxw5ay4QMNND2iT8U3aRGjs5HNRJsT1yUQQMfdfkvzFhTKyf0RuoLGJfHKVIDZkm9885sMTE9PLKtFx23RA+pkFgEEG+fmeBxuXRWV6yqYmVjN4lZe4/y5i8Vl5QaiGIvlW5yg4k888YQOgMYYVliks4obKtVDMEx23d6dvoqiNJyVVTU6FCVl63Cbe2IFFsJhzgvPP6fXLYZGr1jswsU4xc8yGiG4r1q+9k0dc9Mkb7dlnBz67//9vxfQgw8zPXMp5tNTDEFSmenFxaKMCMBHH33U8L/MYFJaifw4tElETgNm1FKen/+5n2vNjvQ1IIE6es5puu7aTKBTWXv7+7q6hexb+CPxKEGIb37xF3+xt6fbwkcxWH9fz8a2dvIV3tXVr3djAPlCjIitX0rmqRHlEb2jCD44dq6rb2o6/+tPPLvjhjvXlNd3XZpv3bZ3dHK+wCRhNhoeI9PRDciEkP04NDr1AbgjCen3+5+vpOTS/zEdgFTR34XP7VxdS+7d9F36lH5zWP2w/FkGEfZVHYAcrFSvL1eoiDcHa9pVyzPn8EkhuyA6rjMv5LGxlCjpHlMygs8eZeHVBfHQSJg4qAew1AkQ/uoAZL9uPomZhOyJjyn698IMycsgEY0KGq90JzSoy/M820rZ2pXh7jPH335lsOt0wZrZvCWt16LxBGiZFuc801VHa0wJRGBUoD8wM7c4PR9LiQz1gQ9h96Dr59n+e/3evda/EVZ1dYXYl1HTfG6cDeZI43xQSjm5KV/9iSceGNbV1HIs3LVFbgJrCqZhpOSqBoG689jmXTFAd4HJOOzBTUmmx23Rc8A0x2sK3tiNRaesz9izy017e/p1r7Zu2sShiTt5M20cxFiW2qMFKS/nKGwCpuTcHf/QeeH81q3bjBceOXyIB4C/IlboodRoMd8rpBaWZSY2aoxTYHBpdOi+++/hnTgNDoFd8K7eTfZq4xRHAgv1nrEx34gsaKyY9+PiVN1QX2cExwYn0id3LIKJPaBoFKSzXwPAXJOZT6G2zgDk496iuPJ85Nbb7xSOnzt3wVZgfMZMDhB7icVwtQXx2nq8NVfg+Lh77rv36OEjLksxpiH052P33XJzw4YmHNSU0BkAW5s3YJE1P4bbePWPffTDugFZxG8Xcod43VeeAaUOV1CRCVPR4eCw8Zqhe++7n8czd97d3Xf4yLGBvkE+rb29FTTi48rgphb8gadmq7u3Z2hgkGaSBWUwLK7bRq8sqUIpMsEXTmlt/Spo4QMMabWRDlzSfuGkDWE0BEAs5fH8MjkM5KK379gqsLEgWe3pMkqVGh2j2zHXlR0sg2lq0fTr5PCK0OBjtZvStU01tTEGz9bQKE7Q7kgXQxOchU8FxQ5prBaJWVgBCJ/gq647mVpAIlZmHexZG2HsnC+FJ/EZcjIUTRkgae7VAAAtZel0WNV33XUHPywAkAE+1h4ZcDEbLTTkJix1Qgu+GfSxWKBwbZHr20eHR3T2mtY38f9jWq6amo72Tbv37jpx7OSLLz2vA8/lomLbzh1jwyM62+rFWySYeWbUpiw8cBO/Smxv69ACYpTmRj/z3IXztTV1XA3cDCTqRegAKF5TU4tX1ii4CcREwoJzuJeWHA+DOpwnF7XcfsutRg+1U/KrwrGYdmCvq6glcYs4IoKanBFlGbF1PI3F57jNt1jebNkMH3LhfKwY5xO07tZjh5eoq9OuURbw6RIdoEvKjo5c6u6J7abuV9NHja3JRUXiAUKhEmQEARECgcLZgxugYamGz+XQVgmyVoonEWRlab5RZvAthhXVgGOMgAay4n/+z3/NymFgnUEP7PTc/MUL3QcOHdSDaGvfKMC70N0Fc0V0CFUhDoQkULyNd7WQLFDwlw6CF1GuqpMO57351f/kzZ1zBDA7v2iHAWvXV9YZaHGlcOtGzYkhGhX04awDt6uqzRrjPr7z/iQ3PNCvPhthRGD6mJxReUksyLE4B07FooeKSpbMgA11a2a6L/Zwxjdcf72t34cPHqJeZSXlLrA0q4ARijfUxmE+GCdgwkcqCHXAyRiqiCRdifSV+VHBzRant7cLNK1rhw9y5RGd036aSiHE8wAmF9yQXUOLI/gikWfBKZBZkd8kZsXRi0Bbi+pq7MixhKUK7+iVo07mFhZ1WHt7+86edxbWBSvfaWrjhibHHZmuc7ipA9eRz4sZhxLBR1eKdQ04mKWOhpGlNRuaHAHNth27NLQ2bVwaHTbysWPbVigZ7LEQ1rFp5gINOOHJxfMX4Hbm1InF5dU9198oxkW+EdPDRw5qCVy/5QGcRhrCQQifRfaGmnSTThw94e6EJO+77rpLLZbcaRQdvYrVkIGbmTh8w+SSouJNLW0aZYzVBnB/oRvZshYtDZj4g3UphffhRADhQHFM2MqtIxxM8EELzs/N6ZOoPU15337XnSMTY256FzkYQrPiy/Ik20s0SJUVVbKtqygnR3vDUGFKRL/WEk9XCxp/ZipGHaJqi4I1qNnBfEa1VaT3AquIiasqnRWgEaLiIa0sD5Q8n//857kb3u3OO++EMzOzFmvz1k0FhQ4pXHCOKuQ1Y3asO8dXcW5CZhvwNVdf/8a31J5OYv7Aj34AK/SWka/9wDda7f2557+HXZs7NqnXUmACckiH9KmZcCX+JClVyCM+oHKAJLOUQgSkTB8o47YtHbpwL73yunmwmuqwROcq+mqemS4ZcaHV3Cc9EUlbtdfV3a0Dg9UmcJh5RP/t7cShC8vvmBC0U9xEvx6gEBwc/ot0zLMb+OGq6D+2UBjmRn/sVLFkn+YnuwCW5QodoEqsKvWghbOTmNoYyFOV5O++/e1H77v3bhubqmvrLnbZqVzHXs52nhsaHdMD0bd0jXlsexoadJRuXU315KVJ/uS5Z18wk6BzpSFUL1eAq3DDt6mZmSTKUK2V5ZOnzy8tl331sad37rt7tayud3KpecvusamFrAMQi0iu6gCkoNlweXQAqDESPLmXa/7Mpf/DOwAgZ6FwLuDOQGNLquKa3394B+Cd4fww/GNM4QqZl7sBWQfAFA4ZxVR1jJzFQiBGYYzN9n2Y+tPDzyubbFxT7d3sTYC7AtBLNrvg72uxMowaHYDsDocEQWljZ2vyii3e1wkoL1opWp4Z6Ttz5vAbXZ3Hq8uL1izbGGycz9CUelwKZmnyqpM+A5G8OGLIYeizjmyPHVyx05Q1WU1LzItzs/bhOT3dXWELi9rEOMKPTXnIUTakQZUa82P+jAhJ6OMak4kJIwhSNLqQVIpPU4Xeuz4HlWYFXLTaFeclKKTquFZtOc1nqr6qRcPMzBkOUP706xMMNVjOIsmsJA5eVK9mS1Qqj6Bc6K+RZYkie9bEHq0bLi0tO3b8OL8n5+mTp3zl6uDp4Ev1jo8FDvwY4ARnNqBlw3rsQhoaUcHSjdlhu2MBAbfeHaptbe1SoAQCO+IT9Df4DTN++HDm9CmJFgshX/ioLn2YaDIc9lBStLK4cNONN2jQeYmFReu4CiqqYweC0XQN2f4HfwQtukZM3k0yrNXBG3jIJ2jvfNK+4CHvqv/ALfN18MEHvoKDMjRz5uJ5QaGTaQ2z8QEGDb/+1a8JpyxQ3LJlk919L774PPRww2nomg9LGQWQBixgsnP3DqJ1dKmWt6Cw9L57729o2jA8ZMjS7uXR6al5ndvXX30Nf5CpLNIQQkzaCL9SkAw9aHtgi7Gp90igqLDgAJOJBldLygyrxSmxkDeFSwryE3pxftzaK/agCQmasU7JppTISKIWaseObWShRp1A3TomRp1kBpxH1djJTz20Lxpu9UIs4TMxaeHKWRXRqKRdoLHE0MNsI29xabnMyPWnFkSpNYsR2YMGZ4bgK7Sphz4AmXow03Jhid6rKitqqipAU6lulbX+uGEdC7Td70RbrKzDNBcTwEFjocvhDFb3vXDCSN62bYcephFYbZk1HRoabJefKmr9gdVa7rt+LxcKLInTcPMXlAc52KgnA73AU+/FdkBd+rkIOP0Jfyi5F0y92X7IJd1d/LEuXcsrmpMny7amsalO82qPLP6YWYKVbZPR0GfrBew1giqh+4W/DaUT03MY6Ow1C2+qqHKdKfBqG2inJ2cGhvqPugm0+4L7i8srygyOEJDRLsjAjXFhLDcJfw/xwQJjLW3Q7R0bGyUCh4Js7tgoPFRQKR4mWRwqsAjV0EuaI7M/DZSfPnWcKQNPByxygaTOGOnoDj3zzDMWQUlHuPbOaUa64h2bNqqdrKW7zM7lxy6NwHMzXoxodDxWxLgKPbS3OOIQjtmv6uBAeSgebkDML06SVPKKMviakdDz/NNZDwMBDl3S0XcqIrENDI3oIZv24l9tRMAORi6Wn5qd07WykRnNXAaggk5VWkVv1FkDb2z1sW9+Swf3vvvuGRoaqXCSq/N8lpZ6+vrE6Yb0us532eOl7K691xnpd8FBnMTS33/qxAntvX6/itgYjRGiUSPexMCJ8EhdJI1UOsRB4LXVKdYOO6rSyk6k0khBEu4GYQZ4PI6yz275prhCJaZRYvFoNtUCDgErBZqH71Yj+JiFWOzzYrV3u308C3P0SdDPE1XV1JWtq9D6NTVtILOh4UsnT5+2JofXMJ3E2MocRNXcwh6IVrRMk8zlSYctug4ceEsVZCl89+fO3Xtvue12ms2fEurEpTHqIrAjJ/OJZEZBDDwLlagDhw6NS5PTzBVYGsk9ifLt0aEf+GNN5/DIoNiU4WGFwVoNp2MTnGjGO7NbNULj+uuv44tjuCI7+AKTqEdigti6oarGagq0w4GIVQQ9WKmdqhGBujCZjvrk1Dk+SHFtjD4rVmvteD2JVAJvOTugqJaIE7cf/tFHBseGT5w8uW3bdpGQUQ1BiDlcmft6+/GwvqFOm+FkhswjlzkKurzSdW+1qQF2ILGccfyzJbDZFD8csLrr/AVdHZpN7rv2XKeZwXzIQDt5QJKFA8imVrACDA2tJmpweKC2rnLzti3DA4OKMH6dLld4yGlsQC1WgmnnGJjFqSYiUNHf0y8nJQeBoycj5gy4tcpWHPHB7ErLQlIWGOGAtRDw9ycOY7sRC8zBcwhrLElNWaz2K7PAftkQhTDWOr3CguWlPF2g+cVVVtDd3SNuYDXCiDtvu41oXCKuA0BCTouiYEDFpXvZueMIFNvRkO8+9QyJo1SltMVXlksNZCDBMJAsXoEhMYlRcEwgTuIErQp8sAYMpUTjk8zwRyDrowZoBxaHIY/zFOCll174yIc/iArX7uzecx3PY2Pw17/xTVMKoitMKC8rJZaCNatWM2t4zJsJJh579Ds33HSjtlAGLYdRH78UQI1nOjuhqiwqjBR09w6trJZ/6etP7rr5npXSmpG5Nes3bp+YXXb+8tpYvS/6jQMiU3R6OVSV+PeO/ong/w8dALXgtt/0JPSuTrnyJf7VrFz959Xv70gXFuTS9eQzEAHBwlky0gHwZL34wCEGjebNt1xeDisEl5PPl9M4Ya4u4XmWOVKuPjb0SoYoBSxNYHS0TvHsE84bry+ycXxlcaZgdbG2orBodf7ciQNH3355fGSgaO2ifXMUXg9NA7pk3NPsvMssqa6q8s0MCBOpcmxuphIgc51iVocTtLZsgFLB2jWL81Psj0flzaSwMmqZOOCFGjMuGpt54xjGApoVwBA0Gu4xqauddvWGFkFBpSy9oIrM35+N6+NIMUWQhkAvjJHaq0jDBLKqGZT2go+isU4RURBATZg+9m/8xm8wrs997nOaMJ6fkWpoOHADIjJ3bLH49hjj2XfzTf6EGxxMRKvxIx/6EBfx+quv0HxFFFS7g9fskrb8AKUiDOaDz9KZtiv51IgJULLTla/mpeEGbZbOP/OTbAoHRIEMWRQCbXv5EGLNA25Y5uGok+WFeVME/QODSGB6xOqeb6Wuv+EmuBmr0rioxTCNQ5l0nCbHL3E+3L7qyCjxDTQMFwQrol7FYSvidDxxofvcSvWyxs1mEPezzz3jbkHLhjvaNxr5gk8WKq/EWtNlh7u3mfR+9tnnkQC+kQ738DhVzj30Zzsv7r//gfUbmp3B2NVtv1WvLSiaPzMP6+trCQj+yISJthWL8IGMPHjiIQsP6mx6xjH5ZdAVJH0P53bqzFm6odXDNOsgEmPlnJsM140Jmhs0ypkWO1gsQFtkpm+xFzy7flgV7lhQOw6EbmQPhuOGzhh5cbBcK7BCHbgZWHFWZlLO0E+X5WZrmOHW3rHZL3HDimfLSIml3rMTEfSLhtFr/0mUMk7uOqCqCJ290hwCIhf1wtbhM7TLEJs4QcuVBR5W6VS1NG/ABMNcNIeDoHKGt2zDramuMw1O30ykC+fkJGU0dmzcBB+qDhNNuSoQZzhcZwIQColeBkIBgDWjQv/FofIoCxmj8j6FdmXrwNeVR39MHxW2QgLvNERFafdpqkg3wL0KFZXOj1m3fcc2mOswo9eOUyZplAETzneeZaFqwXP2uHHT5pq69ewrgvvC/CL7P8uKLY41njA6PHb67KkXn3/pxKnj0mvr9Ywce7MO03SVkuZAVX9KFWCiyHA/xhpSEoRZOEDniduhfxsaIzr3rizJyqkgzkjENw+JJFnTmW1bN/lqMAtMnXYA+4cGyd0ALM7bhY8DRvdB84KB1ikDZZ0Vp+FAGu+CcM5RV8EzPjXtSDUTpDA3hkLEZlwhDCwm0BYmDCspFJI2SoGPqvGWKPmWvCf+9N9L0rlvamk119Dd02cZnD8ZHulsaG4VgelJlVesA0JA7dpFDQQ8QKkoEyXHjFgwaCyW0A0OhNdwtrFAwfGUBw4c4gWoHb+nOMFDAl/q69azeeyAkFkMAkYqVRBYfPFLX4mTdZywOT1l4sxmIyuPBUNnTp32G/tXigrPne101qvpUZjffMONgmC+TICratcl0EXOYnT8ErVwViP0VKRq/WKMePZ732MqeA1nvomiEwfmQg9HFPHLZXvg6SJ6k4QuOqDE5lmOnTjJ2FrbO9Rue+V6/ripWYto8veQJUdHjonFBaa2fuOswN3ZzXii48g1hHTb260CgokF37QT2s+/9OK2rTvuuude1khFzp09g13dF8/rrmjRIGa7MwjVlbGwxO5POmcp0sHDh44cOow/jotyC/TQ4IDu5AFjJEYC1qyQloUoeNje2lJUUmpnhRaNhoEjfkWp02uQZocALnGs3IGQgJZgpmhvfGjEckJMo0weiUmHUOQdf2ACSb+prEjOMa8Yy2iRJrz2690jYMUuzPduNMgReLFUva253rKtOqcOjzoHlohwnb5qFriMLVs3Q1UcyYBNw/GM5qZoP1R1gfbu2s07V1VEe2x7DcgeymMtrycUz/7d7j6r9sWsKmUV3KtPmZqVQQxFnI5IXbALdkXVurr6qlvvuM2qHmvDhEvgtzRFKKADAB9VR2egoIh1bdq6RalLI5cUJyA5rVYiR00XLTI4R8qmmKFqtMXvxWw33oWuPhoFN6jCSkHIMF0LgWiIuWCMJWg1QsxavJmpcYi5/DJ2P+QVzJtlWQ13LyY3l2L7yssvv6SHafDmvBM2mxsdf/zyK69QLdLBUiqNOTDhY2I4//0fAlkKd0mHPQaZyIjsoAExThNwbGE1Dpb92Mc+hmMMFu0cGRqNmLIFbR42KiiPcJzxKgVtdKlXNADnf/2v/7WDX2+9ZZ+cQigewxb/z/75X5ip3L9/v5zG/HWQYtwtO3vKtl1lte7WHuzeu4dVqhdMhxnrKQEivOju7eUH9Q1gaCpmYSlvYnzlr7706J5b7l4srJxeLXUK0NSCcKEUyZTfJVPRe0qP9eRZAJz+iu/Zk3u55s+Uniue/sxlpuHeKarf9GTFU+/iHWYAEvAf/E0zAAjPfUrQrk7JffLyLh2AlE3xq19yJEs3AxAQsmjciYaRcpmEXO1xol7qAOCw5T0eI/KBTKyuj76E5+oOAENI1V31G+RzL2yWMWIULmVfowPgeoYwwCXB21RJ/kp5Sd7cxPBI34UXnnnc8L3pt8J8h5IsOPTTyL6C+KPf6HYxUc5q6P+yPsCCW8CyRdh0B266jjFcXVZcqOu9Zqm4MBZSS0eCB8L+VGkyBIqXUJIBdTZfstmILbKrfHyyhR22YkA+kMJ7dxoJbwwVCtnWapV/nG+oOPNhMuDLCSznphafGAsHDqbxhfAg2QCkQXcXY4FvLExZDztibjwhLnGkTIawcNraFzIS/ThFWsOazaSajcxndAIapp28BDREmflrrAyODVER7py/qC5E8Zkm5wUNcJBu3EMGVajroYce4vcQxcC5L35JqMd4T58+KV0Li0tELXDZ0rFJONPf033+gu2I50FAvqE6/TGo8oF6EY670IKgmoU+9p3H3Za+78abyteVQgPmOKZSfgyBXBx3h2RMU4U/4SY0s+rIqSYWY8RCldnZdUK6iirHYGCpmU+LiG68KeYfNECaobGxS5b773b0xeAgyGPjo3/7pS9ZL2pHVk/v4K233Fbf2GSa9LXX33j66e+Vl1VNieaLoncHAdgSkBeOhQ+EMw4gnETAhyQ5erFgxTtp+hXtUGMttfSDh49obUk2un/FpRymRNA6T56BNuVBDupApoKZc4vlzeB7tzUR1fKbuBA0g8BDgpwrIr4iJgGAqIP/BxzOOhViGHP+4PgTwgtLFq9PKQiCIxaQg5PkwjTUQnxQdaiSRfnw8ZXBy4nMyJOfesWX+7rygyP4EmjbXyEPifDGIi04a1sNzWCUphwfNM8kLo5Hb3Nru5EXxTUHzlmCFbVUS3dXD4l7YU2xMiI7R4tLf/G554wxzUzNLi7H4j0aa7mLG3EiCC/Iwxi/NMpqeMea01gVYUtvTx/IAIoALQXHAd0xQhd0SQwVDYaYVaiemoZGbUtrs5DPZgPIAwANHQCYG28gEX/SH5AhZiWqCNb5NsvmzQT287Nu5y0sKaqrrh0aHRazHTt5fHz00tTsNKcDE1JjquwlqYd9AhQmvdNz76aO8EG8zARU5NgcMY4xVn0toZ8NHTRbmF1SYoGZ9TZWExlOB8GRPrRina01Fh6bDIG/FcL8TH3jelQbKGeDAhlyhALFgAb+EAHFMEpO3Cxdn0FQNzE+CQLv6phBfPPiE8cNT/NmkPQghFbgJNkBJUVLSjE87BpL6QPdy/vi7/4qTtXYCbF+gyjczh7jQI4+6B0YBPOmfbfUNtSrD1upo8ivIzsZAPbh5FdXoaW4MT+xo/rOne8kKntb7Tuk1rTcqpKu7gv33H3fAw884BNx8nTnzp3Ha+jKE4eNjo1ByGo5izeKy9f19PJC3e5gAt8KM5PWVkk6+MhwbndXF3eJtYI7UHCnwgRVSQm/ZtAyuWk81f0F+f9H3X1H+3XcB2J/vfde0HsHCRZRFEGCpKhCFatatmxvYst2yvE/2Wxia/1HsjmJT07OySrZ9XrtdY68liUXWcUqpCiSYAF7QyE6HtoD8PB6x+stn+8d4BECScWbxM7mHvKH++6d+c63z3dmvjM3XE8WRhNnNJcXZ+haZIQwGzZE4ZqFdzjIrdNv0DALpSSBWSA0NzbkLS7UVlX73Ckui6qVcQ5S/8CgpT19ofkqZ4b6lJikJt9aRNq5Mx2sSLylCXZuZG/bOwF4KC8Q07OZ+D5uXazmhHgZXUbDEiAJAxrwlMkHQ74Dt/W2DAwcQaflCEa7YsXq9b6plJdnH4Kj9JzTokuz0CHcP91xJraidl40PWa0UyFbvZizyLPHhZ2AjA+uEyeOm8/mfykZbaN8e/d+iIdCu200jpWUCePeK0oDYffahQMWERM4/kSRV7hh5tvUTurbyNFDapMEqgyJsxH8xHk6o2c/33nBp+XNr+3cuVsG7QsvODr2Dpypqa7lsrUNVRaivF+qP5odgqZdYMXZOKPLwTrC1e1J2ecmwMdtn6DCICp37sJ5f8JTHwyaujBPQ2oIK4AieBL9U/ufbGyqlRkdnV9DI18Cc9GIjW5WJwTr1kB17SdPnbEyZsGHLHIW4hxxnlfrhnNaN2sFmuVXWS5rV6+hNo5swpCRbOuPdQ6cZIcuaLMXikfl9GdEjEVo9wpWHArXNjdjmLrAR0mcE/h0OqRofhHzuQ9LK+YXzR06MUAqAPurb6r/6VNP0IfEZ7MmTEArwYRzF9i5kTb+68ZIHDfg7KPUChNZUgZO0wUrMzQoVRhuqdfxnBScpow6ADFcGXAsEaTpfCVVpLf4SeEfe+yxX/3VL9u6rLnNW7bZ9nfw4OGOc+f+yX/662RHEKTAS0hVu3wh5vWtxYpI4Mw5MGILCAJ9/LcJR8QDB9iaIEIOURIo6zMA6Ome+Pq3vrvjrvtm8soXimorGldML/hkbFHsAcgGAGYQM9KwJwLgFBBzNYne5Ztb/lx+/o8wANA0ubvcaDc1nf5MWN38+/MHAKlugpNq3UzvzSlAds4pYACQFX5nAFBSWKJpUZ4OQ+4MueCze8MAwLmmwC9LicHW90MSTEpCZEyD06BgCZmo6jBPfaPF8vnppbmZ/Ly5krylory5Q6+/3Nd1YXywu9iT/AUxw9LirEQfM/bOFpPAaQyZk1vg02DTMzYRzDrLTwyh90KUVvRzdfU1RQW5c9MTJYbvBXH8gKZhqHUXtfTn8hN00VWXAS13QaM8UUX5WKUqKOCKKb8n3IKzVrji5G3oMytAB/3XNaAlmJOdVkzPWS4AQCXalTQ457fhyZxFkOAor9dTOKZ4LkQiO+fPNj3pH/KZnQbTUdcmxvUUPLmOLJYBrcB3d0PSXme4cSYoEqW1r2hdnI9vPwmPWBM0VLdN+YUXXoC5TYcOPWSkfEvmhEdV0Z8wXpigHWJ87MoV7Vyx54qZRFPSQi6E21tay8tKpDnAEDkyHoXaMIGnY+T1cfzV2QvnRSM7d2xnqjqyD3/4w23tEbtji4vxcoxuYBW9Z3MzOJDXkKVgYO3m/Jdf+xpm2sso9ETaww/tM1h7/tln8NB8t11/qkBSVGf8ILvJMZ+mHbGFN7Zga902ws3CgmPHT2/ftiMOf6+qP3jo8EsvvdJQ3yL0jE2iRbFqbfoAyTgFIP9JdqkvgC2S8RPHyGt4LDwYTEhfggh/riLeSgHi5RQmQcNR/Y5XGDjQHWvFqiiPUiIwBKMDvn0JfgonxNlujL5SgKukTpa3VFhn5Bc0kynkAj16paKGAHEPpejsFiMEJCZIOokEMzXtuXxqpInTot/JLsnwSHN5aylM4IsWHI4NPdkXyrzKJl0j+Rvhd+pqa5zyNCYjP/WJpm9Fzvp0gpbODluoZtYRhzSMTVyTV2aaOVkNzOXBeQtzb1evjolLyMBKJAMxntjBRSWFxT5maiAKDaGwhcBGewhaGrdu2mrSanZG3p6jM+c1ap8haEiBv8A34Fy6RIscgO6hVlhBXW0DohSw0VtUYMpf/phX7AE+Iivi0NvSYVOlqHYlEsA3i20O0VcC+DC7O8yX+dqSnmF81Jk5k91dUny73PsC0vTkjDboqoaIgzKThb09msY3KmR6S5jknEaxn4lv/HQuYpWPMl29HImUOQvlZZUW0yTISFQUzToTxbBcmrRUZ0NTPGRN0KZgRA9nfiBGayEgx302UdRkPgacuOoeFWLURA40Mm+c74QaM33m16zf0kALttPZNL97Qw65DMaBmVrGXAZaqIRf3Si99Rw0IkYRVuNe7g/+8L+dnZ+HSpQuLsb00rJI6ZMOxGh9TBsS1FFwwFCNBf3peDO6AgqCiNxUi7omULkbAwDdNof8V3/1VzBWpuvKJbpr37cEFcuUKnJGQhkhIPvECG6lo+Oc2c1PfepT1kedp2qdBnJqGZISgyr+pKxcCaZ4Akm/vKovDB96/U3sSxaOVCzmVamUC6oCCwYQkZDTXbJtEJTdE5amMC4wdbELsICjxb3mwA/ZWyWprLp95w5eySiNlVq7JFEjrDDXxVyRSpw/lO0BsIcDWAAdV0vt2D8L92tyBW76kt/+7d8Ek5CI+e/+7vsSOfjQmCOfm+s4e97MB2FAEqpWlHQGWEoJzO5DDKMQ62PR/CbzMNyEAKpvu203ZjI/JeX4cLh8lgJSKnHMaEQvHh/KyclVjEMhRAxfu3YN4PYquddbkDKj0orkeCdaXug4q3MFXxkMpDEECqaYjAIZF1EmLPIcvQroPEiK8yJTb9EOGZRSdBdyFFNFXfpQUCS1V1rL4BtvvGnRFjOPHTvxla/8FmPwrSAzIn39vZp2rAFuyO1Tw44LFzEFOdmHeAwpQYattuT9exVxeU5OnbN7saU8jlkIUH19YVf19Xri0MwLF7AXQDhTEvwE1sJP/1CPj5tYM/FQT0XKXZeu6G927thtO5o/77rnA2aGkED5LT3bMwwm48fhtJ5jUxS5X+2+AiuL+Fq57757GTYmwm3t+s1KQhVdoNE6ETxlhiQMKZ7n0CNx4websST24BjTNqibnVk0rK+qqdMBWEMD36BexeaGeguRPoVji4JO0QAAWHDMrGjIpWR0Z5ZrlmLrkr4TfAwkppdfedFWEEhChvRppoow5Gg+85nPsDgqSjG8xT2vDLHcIIQSwhZdTJUOA4sJBG0sIRRwMqm0KHgODvT5mJ3cTStUjz/+xG/+9m/bIZOld8dW+CaYh/lMcRenT52wBXzP7XdCBpkkwl1oWk+hXVrnzxbnGBbFRgs4WPrrH7QlYfFPvv43O+/eO7FQnF/ZWFzTPJdTkCMCNLt9fQAQCep8ZTYAcOqmm+sX35fulm9u+dNzkerND5dLJteJ5CiTXVmx8KdpyJHdRLh8c/V0f/NvCqYJYvnhcpXlJzff/PwBQCq5DMHN8gqAV8spQJ5HfpS2ERDXTXg6zif27AbaaBR+p03YNsbFkxQhx8AhdgG7okVLAjezNR7FzgFaQVKARAPZJTFWU5REbXYX6fszk/b+lvqi2/zMsUOvnTn25sLUaGXxkuNBc+dMK2TLDznxSeBsJaLA+oUUOE5A66bTqIHcOOrByaxsazWwKFhyMGh85yix1C9jZNqMlOYwW4rKnzMKaMDNdkaoJULU4hAsfEBb2i/9dAOCTUZsRx8Bju8PeKJdHpJRuNe6JpgMIDyhe03oODzhNySueK6utDepdxbVRed8I//DBwLiFxA+UxdmVGOei2deucrOyzrhuF+ePIpJ787JMQOlsB4E8tyCWQYZU8yHJFHngowsbdsoxeLaPXDgBagySYTom7Jxfqz+a1RnpDwkzf+wOFEUgAbkINjljDQz7u7t5ZOkh2M4bPYQgY6U0RU6qJpt9vSb3cz5g//p9/FHcxIhREJGjoxXSSLmT3AeV1GHCZrgMdyL6RXg8azj6SY2bNgkbEjTXnyOz0QKraJnGRlVMktejY22yFy3YbMlAunRZLd95zYjPFOdI+Nj5y9cvmPPnVW1zoUrlbDU2Xl5adEOLsfK24sZn53Rm5MvPLEOZLjBCvJkGmLNLqgTAYQBd/XH+U5xSqFajc0tyiM51GDB/J09rKMq1jnfLts6pbxWQnN8PcksbF6cmaMM/jskCp/BMVdClNwmBNTFXijhrboUAFeD+ZnJeAKIwjD0XMAIEzjilbx/lkWBFbYerDzReIW3oJlTV5HFIVOugefuoaRPwXAomVRSDExaZKu37cK6VwMAeOo30Tg2GmdMUw9KUlMVnXW62CycJVfjkr2goFm1FrHYkm5IQNC0To3UNUSnc41a5j700EPTs1P6sXMXzkpjsVLtdCnz/YasvIssD8cgu6czDBlLrN7rC6AX2tUTH69IDEErfNCIBIcZpofWE6jNrl07Tp0+icztW7dp0bK5/lQXSxxpAIAcJCiARjoP/7ylPJ8uLS0qteCjB58U+l/pdkyG9XyHtHKaw05uGRyZW7SZZ7iswnqycX58RU6artjJCEpnRCswxKn/+E8i1MYSpFEaDkCVFJSndUnH8JwOJE5CXhnKr1PbsT2WxRDlLaZxFmgnBQMAEk86cPJ0B25rRZcNMv1HCCqk/XiOe0Rtb214nnBO0WN564bc5QgYgwGoaa3AmboCS43pmOqY422mJNF07tnnv8nkYOMb1GY9MXHFqtXitqERJ8KP8PwqS8WTkeRP538pyX0oRnsMOVM/rXnr+/ZZGulSEQdl/smf/IlEl5Cuj5J0x6fCkZ1mKLVqOLJ69VqOCZtokjGNYQCM77lvb01Dc15Rln2xsIChqMpC3iFxKgPgLBAgdEYAu3JccXN9M4Ae4jKpwFYQrLm3Dh1MNpPkAUPsgAOzpFXE6RdbwUmSUEyZ5NlBFjNZqezpmd61tV185DmqTT/s3LlLXaEZpfQJJErMcmBlUoiToY6W8GgJsKCZbbUoTCeoPpaaV966dQu9QQhPgXY3tjtozmZWBHqILwJWJ8bAlrTgBk/pQH7N25u+Is5LFy4CjlicwUPDTR2Pi67Q2hDl0BBK2bn0WUmeZzvOoZQGcLIi4+KS2OFgOgnDU+9Fhfgjk7uG8I5UcmiDSxkXYlMxHMZn7ZIIZDzE8HhYWqQM7vHy9BJ6/kSat6jzXIsEYewBpkw72Zc2FpoTN5FjTPxXf/U3BIIWIRumrV23BhwONONhDlGaeUryBU1zEMYoFy4hR1vEVFxYZIQJJQbjSCUi1qJ2dRukQ4tMJrFk/MRqnCFKcIA1fq6ukybUa0MhmAbOmzfYfDavLWGrmTle6fkXX5DOri/fsWsnE7B3GTPRBQgTRml311XNSWBFhTME4GMuxvBPMhmhb9i0zdiJ7YHJ8PgjQKCEt6bMqZlO2thYug6K9uy57cK5DtrrVDuLVzXVDUItH/12ffazn0PL4bfeAmHzhvUWcIS8p8+e3rp9mx1wkIGqSI5oIABDbhc+HASh+NMKkobkgNEWgwH2CxnG4qJ1ZuKxCLb4iQ8eYiZFIm5DI4yiaQYegKsLcwqvRUQpgBZzXTCktJ5L71JMoy+/+souB2Tt3AkNJekD3WCl9MciAOmcPnlK3d07byNWxMIHJjgpbY9HQg6RORiF1CgGmVpSGLU/bb7kD//dX+66676xubySuvaC8tqFvCJBbDoGVK460YhSDXrTBtYsD+b6XLtX8TZFsemPm/5Mz/+hBwARbWdIpt/rjepsbxoS3EAtYfvOUOHm58v3y+Skm+UBgD9jBQSBKRq3rKRt+mo+/sYAQKM6v3Qpqa4AnLA8t1nPTfIPMRmfMUpJ+UHZgOemcVU0cmMAcP0UoJsGAHG23pw6lMqStbw+3/jNy52vLy/pu3ru/MlDV8+dWJgarihYsEkghgeC+vw8m0csOMeYRRUZDg5FmZ0T7Zemj5cvRBairPP83MVq+2OzGS/2RRthCG0tUhiKqlFqzKV4ywHSQANaqsiIaDgtpXUWHIT+PJ3gQ0XBuplgFKGdZtbWhDcDFvcSQA+ZMLXUBLCgKRCczDYysiydIFsGgXXDE1ZQoupaB1OBxFgVw8QWF8PZVpTxXQ/svd9DusDvsRStmN9jki6I8epmGcS/u2/bqQfU3OVLXcYVYPJpDpjmH2CoFRPnKDJQB9kkBTz//M+/4awIxAJl/l4xJzcgQeyFFZKp1JKgw/rYL+uDoefJOQhcDOwLS0p5D2YuHpIoyMmg/c4797Dll195STfEWrEO/sByOOhNjMIBXpd70f3Byj0vIY4QbK5dtZpz4Cp5DChRS40ihx8mLIxyCt3QiI+3RIGQXXmJoZ6dTjb4Xbh4xQDAHgCzJIOxyc2JSl12/FVXlh4/dpTEkYB8Pg2TcS9JkKTIxRO4EZlAqSH7dAy6lPThMG8FJGRNA7kjyLu3RRTa6rpWta4AikzxCqVUSLxNl5z4BwiwCJEChF7dkwLmdMgIJ5GmsIpwSygRB74hE57o1bQQwvGDVuKxER+yj7FWUAOQncbuBs+17hgb5TWkjBU8cJikV2Itsq6qCo/tIBbDM+IWvHqFOvGYOTVpM5abIOOVXo9SwRmvHD8tfvA8mjBFnpfHA1+6cvnpZ5/+6le/ikDcsNbk13O/cnf3799PynhrllkBTdswICf5+MkTZ05J2M778pd/VR64GMnHJaxmmws35ScFyE7g8AMLRgLj89Mz58+eEyNRMxRhAtLwWV47fIBFowu3vYKz+Moc/PMHntNLOnLDK14KS4YGBvDHoVJYjXt+sYXO6MkYlPPPTD7aCeDTS9YBZuamuy5flaQkVcm9CHpoZHB0eIw31NVL9TGBJbBBUaaW9u/O4hKsiM/Rq57jG9nJbdmycROOkawCmAZJxagW0VNsROEPZIRnJtnD+S9K35q3uYLmB4bVMRgQZpu8A8faKyr273+WINCuiYcf+bDMD4ZDbSiGMkg2jrIVWHUzGNrSqKYxQYdMl+LTKdnFavCQMXoFLCQVTs6HhuAzCLlHn/hTJ9jQQizu7emHjYM7gbMMwdR5fjbgYdqj4JBzxJeUlVy6eElLWkEh3YKBRRmaQSpYQ78FvhoYHrCXtc+x+i54GzsSoYaMa9GgMJ8Fpw/cfQ/C5IiPT03v+/AjNQ2NNAyDBBlQ9AooaPh1//TTTwtH0GMEQrpOEALQDgHI8IPCa85Xrf7ByPTwkMx4K5OdmmYDxOPCXK9wQetoB01hFLm0gmt4h1+2mf9v/+u/tGigmPMHmDZXyEHICCJIErUNAK/wFAdG4nCeXvdJbxwyhTN0cf/+p37yk5+InPjNlpYYc8MEQ6Ctrsl9TWtUByAERybu8aQIQaDJWiyyiIp72GsvmClQgzwYwplOIMHOJ/YjbrPlQJwtpYTIhWusq6uH4S1JolXAlABhYam0QQU4EIVhgjSzvXDGW1PHRw4eunLpMmQ815PpihQmCwSiNyxtaMgvzP2GhtVUElaihaKn514pj8/AwtN9cnxS1w27V63xtQedRLkBANX1hUdd78kTp5T/1Kc/mXGvFKjXXntFi4yC+mEaZiZQmiM+2OIM/O++++5zHWdhi3Wy6u0zo1dJEwidqrjIGkoiYOxyQ0Z4Dnk9O0tnR1YVnJbc0xWz7+vXrleeFmjoqaefhrwvEWIQdtmUTGvQonVqYACgXeyiKvyFdkVWJOvkPk7/6pUruOGYBHJHgir+VJLT1ArfpKS4nPqZLPzjP/5jJINpdp8Dsu1Mb2S033n5ku+hskQ5grZAfe9vv7Nj57biAi5G1sSsjtBEqRlIaKhrlk5HBb5WMBYT0rIjhCmAhvgRakmsGCg6MWdv4K2jssHLZBVdTZxBcuKwKvaZeChtCRuNggxmKIDmiAkzEWUKwABAdeQgM9aXJ66xOGjcfvsduO2hTxOY/qK0JEKmPnT98ssvW8MxAckphzZWV2kdeiGdnDiQjsRpMsI8z1g9bQWmpLzu2nTR//5v/2L3XXtHZ3PLG9pzSqsW8iPPTfpnZLyk/B+zTHGuPHe8mJ/7H3YM6P9PBwD4RmquWwYA8TzbRhzfB74xANAjKkmILt0iVSHi9GdUz2b3ef5YDcguCqYMUCpGj3u9qay9G8cEAc5L3DgG9J0BgA7XK3uHxfExDgi3IMI3IJ6orygaH7h09PUXrp47WZo/VyUxaHZCfyzBAz4x27kYe4vJESby8pfy8i2yGwPILabPzDlvab7MsUFLMR+ftJcuubTIhD3UK6MA3v6kh/EqJzL4uUHayx8qWVJaTqUPvf02A+Tew2p8BzPb3cvhFBXmc8WYo7CKLBc0dsFA1MKNBBaeymiRrnqCTN5DMQj4kydHkSoeKsOVwYSL4LT1Q0JnPlm8zgtpV3qxgM+AWMWykmK/3KNaqvhGqSRA/gFkLtfyNur0C34NAODABcHZoZZ+GRobd4q0jlWHkgIUhDfUx5SwQCpwKxUvVvkcm4smeO6EOqkKrU3NsAVQK9wshPfcdTcPwLEACxMu5V/9q391++27qcQH771Hn6skV+AX7d5qWjEVeRtMAw3f9EoOXdSK/g6GREYuOKOklCTmj9XwudTZaSLZuqITye0Dse4NINaJKWkQBTQBd6Wrd/OmLSvXrDXxPzI65mzunu4BnyrvOH381VdeBhaeJKIVrAOTpJCTvJYnnBU8eXXferML01shu0/OwUFdLDXypBsk7pVdfxjuuQ63rDCcngtwRLmSJaUEcSzVyiOPPIxGhVmERWaTHThAjpiDWJdaACqjgF/qoRXRnlGkgYdXmoazb+HxhPDEFp04BgLid2T8WkKAOGqyrau4Bx9Da28j4c4YIS+G3NZS/HK8pi7pxuDQgMky3ZYpUHgO9g+AoIDW67OSmSL1+5ID+yIseviV3/oNZ/Pz2/fdd59v8X7/+98nZeIzDEOUHSaCFls1ou/Ly9MFt7at8hUIBUA2TIWVTQkQIGsJ3h4imUbhsEM1HOJi+cnnveFANKhjleiFD1ZguPLuqYd7CBvMyH3150+eeFzvYHcohNFuyGoGBdU7tm3VItgKa0j1BshU2WlSNjF5zU6Dnt5ueDj2LNLaK8tjQ3ocYW+4ZGNqo72dELBTEQ7Un6QIFBCsdSXczMGilP5ACW593T08BuoolXbdE5+mvSVufMAldVHnMmVqw1tvb5/DRbwyHALHCbkKON5HVHwxItsxDfEJqpvzGnS8VeQtW46L+AE+IqLAJDcfZGGsYjDEOkqiNXFI4hUSqBZNgyTcNIEz4lusZhRAqYJ7uT/5+n+vUzc+MwlHBYFDNi9mUi3UbmaG7NW52h0jYORxkbUNtZZUuD90gqIN0M3ceOJGoKlKCmRHnSrsW2j54Y6Jx9yrhhkGOFQQijDwaz4grVg5gdnpsrlSO/mVGwYGJgKglAoDhWA6xMXYfeu8cxw3q4B9999/v5K0NiU8UAJVKJ8bjSoGK1QAhTRoB6uyDeMwZ6UaRa8LmwS+Ohhz4T1d3RwfZ03J8HBLlk9CbM4hHhgaVJgguTlsIQ+t1zpQJRzgQtJaEzDWy/iyz372MyIeURFk5OpBTGHmbYuMuuTKM/vyPMiCb1Ugg+2qCHBhniwK9yqF1IMxaoe52VzlIe9PJ+eYgmW0pnCwTnzJJh2/OD+X45saeIIEz/G5uSVwsHCm+xGo4f+XvvRFOISuxBxcbJimymI+TKNqnoOMP9Z2oAEZcCCvaXVRDXNqQ78xChzsJR1v6QYmKIMbMMd5Uu0f6i+rsAdD3zwjQ93Ha9k4mAYAglEhx5e//GWzU7qNc+eiC+nvHTAZrwlCF1liIEFAAwM9cUPuIHPctBFdgg3Ia068TvWhh42SeRBFsak6bwsayNmkTmygMkjV/4BjHcaypvmBNStXSTz96KMf7+vvB2RgeOTQ4cP4qTkOWtwMjYz2WIazgB3EVpTCh0slC0Ew2mP6dH7+b7/7A127RvWRQm0sVSDFAVwY20a7lQqqa0HAk9n4vnffkWPHN8bHgCp37Nxt/orUBHJ4bneNQ6UchWg5RILHyTMnfSzp3g99yEACfHn/6CULuiFPEYFrVq/DqNQo5ljD/fAjD5GpJ/4kWciI/qkZmaKC5rtRPflQTyRZwQfC5As4wvUNpAyI5yTL2P2Zulh2LbiT9mDE4uxRczNwJheKYWPJpi2bwzAWFr73vb8jCGXwRyxqK7XJXmrMjmBr6QAcUyY4bFc+rirJNf3kp0/suv2e6bmKP//rH7Sv3XotxydV6mubV07MmRErhnZMXOULVOlApI5kB1lKJ58yvQLULRcNueVJ+vP99gAkj6SMiulyr2PIagV8BZZ/332T3noOTb/vvpYL3PKKydzy5P/iTxvxsgvAGBHdGABIAcIiMR3hIp0UlApCYtQU13IzPL8/2ZQ5jpS7RQTSC+J/8spWD9RLCC8qkQ0eBB5q8Yqeszh6ZX+UnJ/FhVgGJBk7NRbicE9/aVGkM11dYkZuarj7/PnjB3s6TxcuzFZWFI2ND+vDoOqTqJSBikqH0/KE8ycKiyS8UkJBASDNDmAw5Zm3OD0RcTaUvKKW6kIVgZwzBQOB2dJeiIXyzc1z/hSbh6TV3oLsz4uXL3suZGE+BgCq6CYxwXfu9SAK0E8mA7J7bbEgZIIn0NSKqIj2sgLbrkBwQQOr4eMXHMZCq5kVW4anFFAAOSIei2NZXIrNuHBjxeaPVeE6oeeIb5CVt4GHQ3OCe2d2LhZQ0BB74YNEV86ZvUDPsqq65i/5H53d4SMHfU6e21Esoco52zmmLTP36LUJGJmmZrFaEgRTdezyTicolJW94Ey/bKKKuwPzscd+JMtI/2JOivPkJ01wfuITH9++Y1tn54XEcz0yQQCLXhxwA0/wcQa2yRHZaXD50iXcwD27MeBJLqrLDkAgxqbIwXMiswhhE6pYk59UzOSxPlvH4bO4zt/zuYudtiCXVevgXnzxZdM4ZztOnz97sl4yaE0NkpMCgAkfAuWL3GdthRN249NGHR1nBYDw1Fxa6VKLaJz1B0lA8KqlbYWe2g2GOAaUwkMGt93gqrla2KbT1ZIKWQGmJ0nfTGMRn0t5kLEFGmopACVlPIGMS1vyNmVuOn8Fu7hZ4uCQHQAPvi419C0nV0nVUQR5da1okY7PY6uu9/bcSYzwnJoYJ/eqinLdqBuDNK9As4HeeI9tEofqcOAuY8CZHRpzRD93+DAMqbQV5tYV7bft2W09GCY4YNO5Vw7t8AsZ0Gzmph7UmDmYmb3zAx84dfqcbaL6OyQLczE5OnHnTc3EQhzkpQ24Qb4WHblWXsxCYogCE9JRAJfQomBiIGJBUIApee4bBah77vln9ao7t+/Qx4l8iEaIrgdHL9aBTzTo5QGdkKUBrk5ChPhNSJINfvIyKgQtxvNG++bjDBEX4QKgzX4YjgQIGD9DSdOg6VzgzDyxTgFxGtzmZ2L9jV0og88x8ZcNmCGpZ0emkvBX0qVjkrtnWR6Sag2NjArAvFXXIFPERflNYjdmp3W5Zzv0RTIwSSX1wFWkMYcc81pZp6M6o9Yvw5aYuAiBIWWmb/5UUhVvYZ6UH6gM7KQC6ua+/N2vMTx7pYlTOarAsI2GnSOrjiGLvShYRirWOXCBZiCJtNyYxIUNbQi/tma1e1XAkU8smIs/8wt8rmV8JOSNft9m04R7BH/oQ3vxGn4Uy5mw+IUA53nnWXisKIOZtsiVnrkBSi0Xmr1yJeWgXlVlNfwOD2iaxCDVrDhdYYeoZcAib9ICAbWZt42sPqYFTw+JVlDrojEiDBKFkiaARV1i3O27b3cvTPfKZe/Flk2bzQTjiYlPwRMSkvi1a6KlbUUrtDWHRQasQh9loPeRjzwiqIU52q3RJELQdbkzvvurvL5aYowUIMhoCFHqkta+ffsQ4lAjFe1V9aEZXwlAFLbLA3GDFrOx/sQT50bgP1ajThP2SE1NmneLLtkTcAT9Ei7VMnmjJARoyeuvvwpnGr/JqdWr4xhWOJCIYsnR47x+zjCA+Kg1hkBYc8DiJ8ZSKdUV0wp8QEsCAlw3Bo6S1EYenqCwosrqij1549xQZo0xOHSqUgx78nLAcUwBgFJDeQP8ARAadHLdhvVkJ7I0DyFmhQYmMyRyxDFNZ+gFJqTpCTPwJCEpTk2zO6Dpcek8JPWCvgNgKcXSB/TMe1kTP3X8pOYkdoG86/bb5ENJP6AMuk1MvtoTDQFCUnYFYaBNwMGr7GDckaGQXVoZMGUBgdz8mF/hFIgSKyDPXJ9//nn2ZJiKq9CTMoerPCkBtTTKLJq2yd3sFwvQOey6PTY9G+9QMx7TEUOydbHRtyNef/PNTVu2Wlfhd4xXzRPAhBQykocMYh2jxtdAgEApIQ9lBQAafCXRaMhDFUkTUdjoV3X67xeNfnlnssBP6HnLoOCcmlAdVzliwDHT5ZyuNw8epFe3795Nqx1NgQOdFy6CrBW/CJQELNdz9+23Y52eWtDjSzQeUlcsgo/zDWgacQDI0ailP+YlTCCtWr25d3Dmyede37jjzsHpxcnF4srGtiV+rDx0FXoUSdhqsnnRxk5TGoX5izPjTqIB/OZLMdfNT5bv0wBg+e3NN9iiGMeSGnK/PAC4uVgCdcuT5T//YxsACPMzhCPovzEGiNOTUm8hcCcm+uPCYff28eODmxhw+R8brw9pAgLJqkhzSM1mOAMAW3szyKL/Agk6Vma0YqGm2LmfU6PlBYvlhQtDXVKBXu+9cjE/Z7q80ungEyakEpM16sJ4g38ADTPkRVgQ0KZNhTlWAJzSMBuZgRqlbGppmiKxL/cMIfxtlg8AVQgbv9B/pu0eZLHpy6+8BkMnLfhlPkhzLlCigmdDgnsmACZQfqmiJugnqwRTQ341Qe1prM9fgOwGKN4JNKbNBvlJFqQuPE3JGwYkIFl4UDo9EwAFcwYA4hWYWzFjX5cuXgDcwiaj09HYAyBLvq6uVjYOT86cWXFXV6x5JgRkXStv0yEadR8dZ08zVcuKMAEf1d7OzUq/tNbRBkkJIUgzAECFw+vM/VvbfeSRR5TXiTdk02TYwkFt3boZN6DBE+oo1WWVd999p9hTiJncBQyxSAE3IGgFGtqFJKo1pPszY8rXqM7nxOaJ7EAetbKuPs6B0dPJU/eVWbOzsBWBiMxSvym5XEQjinJmydP7n7cCYADgGFCj/R//+HGfTPB5wfZWItM/xoe0TC2ldDV2apE+PRElR6hXLAE9PhHgUEVnKhEZJM24khfmuxzDQEA0JJCX85Cd+QPn8qLAir6RDs5ATHen+omTx/T+xOoVF00VqQ3HyHpAUxI0oJK2gOMGl3RJyuuk9Fn0x4Y9vsynzXQi2Ksh3HMqh8JuzLHqEMEECkzDFWy3huPXp/GwVLo/GVkAUGDblk0i4xPHjm7essl0MgypK01wVD+eU07oacVX7brjNIvzcIOJ/Wwo4tKpitPV9bZbtm+JjbNZ0GlqGxyt0WcI60TOnD6rJ4U//sBfPrOB2YbscwFU3cZImNABbVnXBV91WS7+TAop3bCytEQmuSvsLsulScUyYw0/g9Ik/cR2fa7mfCCOJZqfxQ3ZRKhOA+aZqYhr1dKuX9twq8rKLDi7N0tFCXHVLzUWvBEKMv1JWNhLoOr6+KYEIBhSRQqDq/SZJpu0BcT8gTI0GTJ+iduOAoN5N/4ETfnU10NJSX/C3wUg2o1AJPAbNWGOINpuKx0rvlkKYLJQwgCzXZTV2J56OIJcFgC2YBcb526NCvxJfM7J1IRvdhmW+JwCE47jm/NzKBE8qQTV1SjSXNAgINqOXR6q7k9wNFHgnE3HPjgnSQRz6vQJDnHzlo32LIeNFho3y8SSvWCevpLUAbULifv2DeSQa+7S0PAgF8t3Dfb1I9hgWjUnuvgPf61gbtywLjVJ12mbhV1TOz5l9fQzz8JAMOSJ4dfYhNGY5dxY7TKJqCErqDSV7AXWxOOLqgvFkb+hlVCjG+c9y6ZqW7nCoVdmk7GeF/OdPDNVJh/Uwk3clzZDlX2yRMUNmzYCiBYqopXHH3/8Rz/6kfnIBx54wK+ohVWQvZJMYmR49LlnX6ABDjSkNI6V1flbHDTNc/LUqbs/8IG77r4bH1566SV4Gsx1nD175OhhzDUIow1kpvWmpkbTGbwDDbMrAIHu4QYSHNauXa1F2zvBIZ6Ja+M+CqwAQVC7x594cuXqtY989OOCP3r23AsHJDg68IfCeauXZk4mwGxk8USjVbWxjVJOEy6ZKc/rLqissDBUNZF13vZM79yx46WXXvzud7975NBBNizSeuihh9avWwOasZ/wzrd1mTQjxCLcePjhh31cXY/105/+lNZinYa4ElImPpLVCSnmXhU3zBI5OEDJ0I517snRW+SPXtMfxAyZLpwoVScCao177FNbVuU4Ix0ebggfTQvJFRwfGduz5w593uaNm1975bW+3v4vfuEXjfewqLZOwoy9bFW2qpoqk0vkKGLwYegxIKQAqyhSWYlAzGFCJIUWT6yDb9+xGQkGANhlDszBAuJmLsb59EZuelneyWm7OmYnzDIYg0wGBjJoTz/9pMjb4X0SYExbwkcXTugwDwXLdkGMXRtFmrbwjYazTHr1O7/zO3/+53+ejByXUkcObWXM8WNmfaNcRknGFXjEznHJry65urJcJG2joUUSfObZBbsAopde6dhcCmuFuiLWGgvN8QpMm4+tM/gMIeoonree03MC8usJV6gYYbmnnx4SkAuvQEMypcJPlxtiQiNiIQYg86IbTvDk47bt2ElF7M8BjXO32RdnLE9rmpcEn3zt7sVhk7vNzfXg6Evwn8cw+/Dgww/RFjYIsZKyMsyBAw1pbW8bHbdxqresJN/XNn09bzqnbE4oWV4ndV3uqR5dmOroGCFfTkGR4wR4wRiJXp/jBv7vdUWN7Fq+eXc1r/DnlmI/p/y7Ifx/+yThHwgHEddXSJAdwbyoP/s0mLf+sqKQG71Yru6AdhFNyhiJ/D0cWLJWgMfC8CAolgdUj68pxCGvBmKGEsvwb5AcQwWTqDb2zi7mVBaXt6zaJOaeWVjqvXqhYCFvMb+4oCRDKVIrWUDETxQJ7BsQYj6bnssvGpmZ0DVzX6Et2Ryh5/ST7tFnasNTkRS0PXTv6EN1wWFuFM8rFx2mvdQshUHGF0pSWhCsYQOOE94yAQEE60hgWZm6HjJwHRmD0p0nswJNLe5CK/BRV1ClB9Q0j5Gsj/vlJHEVcA2JAwQ0SIiJHRFelmiksFfqQpgMmIlPoZ05c5p1MDoTRlpgqhlFuJpnctHwh8nzTspwudyF6SFlmC2souRSHNJvIhNAhxZ4wnfBdtEZUIsLmzZvdbjF4beP2oeKaSQerMg8hlp8KbdTlc3QOTEGkvwwPmBg5marQPOnnZSGgpyGFQnqIWQU37thoYjlUXGTbUJYAUel6FUddwZJb8ttQmtoLCuv0PjsjAnUWHPmN/ChujZWNnQKphf5ny2btyLBbnX+X0VM0wNKBQzN0B/NTufFMDayDLCUKglX4oi9nHmlBDaQkX+hYpI7XpVmH4FCslYud10l5WBRtr3N4I2P1cRw36CHOEP0xMeFzs7Gl1UQ7iH9cWMwRbVUhHPCP0Xt2lLXlpDs0E7jhzw5EbiqwwVKdctpBCf72kOFBwaHbG+AjLeRhmqwUegg/BrhR7JEZRisU27ycyulAyhJjgYAcNMbGocgzROfqgw+zExbIdEHmSUkRJos5VVMH0B8ibKyxue1dm6xACWvbMEeWbko8FfMKTdqYSNNcMIPS6+o2Gjp3tva6kjvIVzEWrLZv/8ZpzgePhKppM5Ix4ehgT5TMZqQ3EOv4AO+jxbjgzI6soW5JYM/sxDjzhuaGFNSK36VJBFlmK14ygpBVMwW6vUUPhOB1YZ12CXkZQtvvv46VH1JKdiYTYASjU3PQkqaryL7oqViPMXIyz3O6L9w1VuNAhhY+e6mL5CYa15YtNYACAQYMhVMtsmxUEgYMnbn4AvQrarqqS2P1Nc3Uk7/4aeZe50+Tlq/All5LDIf1z8YB0wBZaMRBAhU6N/V3SfEgoMDeM50nNO6itagGA4OWJTDfxvfZWcY7VgzpD+8q0xjxOKMVQ1xMXUiSUwjFxdakIZqN/SWJ4FAIlbr2OsKVj/9rT/gqG3ztah76NDhFSvaHdtkZGgEbHDvwiP16RbGjY9ds2AkEZNtnzl3FpY6frERB8HmkT0+GXMAMq4IiWfEqTWrVk5OjBupYAF0YaaPP3r0GM+YfCUbEMdAlPOS0Dzi80BGD9WOO/UJyfhEvBNy9OzxieaiQvlcenqpw+YaJRXI/DWWsHBGolzwU089hf5ro2OChu3bYoc4zNEpMUPYR1NdTsmEQ4o2YE6K4jB8oV6Ug5ErD23lrcicOd1hykoTDFh/AE8u2I2SnecvtLS3xZbZxgY5Odpl8+BTYjBPnz7JAqkOsGXZSURox0zn8yRmArJjR+SESFEmXXu6cQ9D6MTQcMxhQwlRf/A//y+f+tSnTH77E3OccdATyTzmXM7qfrc6bXHH9pLiwhGHD5QUyWDDN5+Omp6cwD2jeSb23LMvO0AGQFSzYWhk83c+zRtzSHSCmt7zwbuNlJSB89nTZ3hbqApGsVR5KClJrBTArBLqgMKHFPxhctYVxeoqCElPlES4J+C7qCBWMMtph/ZNcZHzNNzyuD1DXKItQUoK6+FQU1tt94hOkYIRMPc0Nzmrtn1hhIK9upm/+uu/tp8MWOM97k8PpzAT9efo6Iit0rgjlwb+WA0l7FUYFcpgqUFOmvDwxOjAHte7776Ltjhdw3ZetlcpRYnMSsvp9sEjh8nFJ6vFQR/96Edb29p841YZ4s4MrBilr73yqg7JagxHU19bh2lm1wAXqyK5sbndL8yVxzoI4J7qZAoTGHqbvD9OgmB2nxrYDYQ0s1+bt2xZm+0h1uvDSq/G39lag7VnTp30aQIHw/FZ/BSp8UH0hGsDUF2Q5ciFDRcW/umf/in8SU0GkV8hAhy0nqSjPNEncZMFRrFH9otSVuZPXRQPQlWsWnBJnkvipxsGkLybwkjTqZimpZGOrTMQEqFNjo3iw/e++7dktHv3bhWfevoZcbyP/Tke9O57Pih7qq2p0TQkA4f2j3/8YzkYtiQZ6lAGtEgBokiYFjysrenp7s9ZLHzsiWcXiso7+0atAOSW1RaV+/5zoyG6ftE4MJZccvJmFxwlme9ssqLcheUVAKJEb7pw+8btz/x7SwqQd6mk31TdDVEm3V5eAVgudvNNgrtcPf3JTd+4+Zl/U7GfeZT9odl3P/w5T0yFpLcAvmcKEIlQHrJAjuAztv3G9Q5WEcDLGDEWiCsCoISB8i7RP1nwJOFMHDIQiwBZGWOGhesrAMZtVAuLFE/4py0ZaQUgWgNzIc7vz52fzpmbrC4rKs5f6rzQcerYW31dJ2vNHTs5/tq4j5nKcxPSaUW/KyLUtABIv+NcIEluzsRcnL5WXhI5GBwUuaCLWvp1z+fAwZ8ufyrDgrAT5lai4KAP8srRBDRNDi8/ZqzLjcsFp40xGu/vt680sM3WxKi6S0PeYg04KjIu6TcakobnHnrMREPeYoJi7l0MREfjlSZAYH3ueSf4qsXvxTRBdpS2CUtexbGGJOVT9IyLN/M2EdV54dz3v/89Hk9Ievz4CTTyJHDmRcE0F8gMWTdvCT7baW5xqnvshYUqHiopQPSKj2X15hGZuQ3z3opm7G07cfI0KzZFook7br9N6hEu8VRH3z78hS98AUBudmFuRkdglooncZg6Gvk0XoLjQql+AeaI4jHc4LwCACrjrejKwriH+EN3qCsuOQWEs1291jGLKyuzz3GSi+hHMUMUZJA74AamRlTEe+FS59tHT376U79wx90f8AHgquqaZ599fnRkwifghwe6C30p68ZpP0gmMrhhFAXQfUAGRX6VMddeXdMgx9J6O543NDZrV0OQl1qpsFrxZGjE1ElSD+OVDLdY18JGGF69GjPomzZvoANE4InRhRbdkx1NgwOHSYVAwwQFtO7X2yQjzCcXJWm1Q8aVVxjrhGBacSlvsx2sDBGUdGFaAksE1EmIbwCQpQY4aTfG6iJv6fI7tm8z+HHakgNkaYUTMw3YVKRLYMp/hZLaIDc1xLK5JolYCEtLvdLX2L9r8vsTn/gEfUCgdg8fehtK+n86hifA+NgZaeKbjNkdt+3pi0PS41vO1oetHbGjzVu3apGmocuMM4SvdMcX0GSIFOcVmXRTHlFmiDKtiEFpnBSXJdHRUie20Jz4p6ICNCQ4fzNMcWxct2XPjF7jxLFjrMknUzEWen7x3Kk5MR6dm7aO7UBIa/U+OW+YLZWgubFJDOns75jy8KnBvFwnI3mSdjERE9HYHA8fHSvc9PkQQLJWcYYHYAgiT6lEWojt+BfPbdm8zTS6D+kyqJMnTB3mOslvaHjAlD/pCAOlrpWWOJS0qrQk1rdBFgxLX0EFxup/ZbmFFHymac0aIRz/45Qq7KJymjZuToMZWNkAbcaYJzQAqKmqtQJgBAUIiVj5xm3s8acbV+IqfROHJFD0E5PJrsCpD06EnLno3LTaiurKq71XqZap7bbmNrtIyaysuMiXF9moCXzINTW0INicga8ZWLng4nEk9nQv5pCi9CmtOucV0jirjRMnTnK8NbUNlpBBE6nQhg0bt2Afk/NEc28dPKwugxeQ7di9a35xbuLamAUA80mCfrs4bNUQ+sfBiNNsY0HHYJVAhlfMxTuq9tq4YkRrjy/HhAXGhd/57ndhOzw0RHExi/HTCc0xNm3hhZK4j6GC/izoLPQnHTIBTBLsyv3HPv7o0eOnfSqSKlv3fO31N3HTupImGBV18REoSwq7duycGZjz8QGLRwYAJvVlONNC0xEYTdEpkK8BaNcH1I09WIqDbmSvEcyaFWvuvfdehRFibg2eBtkmFTgpwwORLkwMD+RfK0CP16xcueu2nVYzjp043nX50uXuy2H8RYV37LnNIaZg+gwWGzMXW2MyvLp29aqNPq0LB4Kn08CeOHGcO77rrjvuvvtu7VpYMLn+2GOPsSIjIqurZu1wEqVWV9JEL1/GvC0Nf+wTjxKc+IxqGgGKj52QyiYxjdzfOnQE/v5sbI7vvkGYlmN7XDrjArOFNpfLo0WdRczIg6JL/BGL0pwb5TH/jTdeU4MymCzhdHCJmATomqCyD9x//7e+9a3f/b3fU+bQkcM2WEvUkZ+6buOGK52ddhVYrUYmhEkQfJggxxO48Sl0UnNMjmiiox1ecIDZ+TMd9MQRgfTTh0L0i+Y/TFQ7/lXrY+MTT+5/Wt7OIx/5iM9FckMwNyY0ZUATHn30UT00OzdodLINfurhsNqiux+r0EjjL/AfZ+CMBDrAHasLiBapH93gZNU9e/os2ykpq1izbq0v31JVlhxde7be4pA7I0rQfvKTx8zo3P/gvt6+/rQWjBZNqIpX2OjoDM1piy+j2DRQqhupIUcgggMwEbIQuifhi28kbqnC25IdXsHcp9otjsFWDMFqIKOwxUoBeup7GJQnWsTnrAtvJyaTmMTnIV4Jj5ycQOf373/2wYc+3NsfOwpuu21Pf1/kQ0+NR6KkAYAuBysMMHx4ErFwIC+4YQ5HqZXCq0XN9Q3XRnsLZ4eLCnJaqoumc0t7hgauTY3lL86eH+ppa1/ZtmI10kYnSWkh1wHQpvRi0jGWX4ksXTff33h267+YkB4t3yyX8OQ9H75f+eWK/7HdJELwxVx9mqR/ZyFADxro4lrw4TovIg5x3BKLFr5Yic2b863qONw69EQpv4wrqU3UCh76T5gXsDRhRtaawPU//Jlng2/+1EyMDurrqhpXbXacq6OenCo57hBS2bLF5eYKzBLKWi8pzJ1ecMrhArdvgWE+b97wDnzxYll26gXlp5x0iQJQZrqa8PHrCVX0CyUje5aiGA0XVVMwQRXdc8ife4oHPYVTMEfxykqLKTaVDquMte44kCAjLeig3uwIwNTdin2FEuMTk/2DQyCIGKxPasvxPfv37zd/BDETexrasWu3DsWcqJS1hLBiw7PDLNQsAWeVCNEFaIIrYw4u/ZoBQGWl4wGuHTt2XEVWaSZFxjW3zP8Y8CssSuFBrMxFcFAjCSJml7gaYN23tsTKg0EcH+iUC17IRCkS9HEz83NnL1x07uTGzZt//dd/XeILaFLvTDMJcPUvvkWDCQ4rFaA4W3v//qc3b5WzVFJk1rq+zMRd8m829Y3OjjFwF5x5Vk6Ascs+zTad50gItkXH2o5wofPipfMXO4002lf4PEKzIUFs/FxYhIYNl8N9A5QKq+HsIBfL+xYNeEtsWRZW4pUCoyMDZCgTkYBMP2cuOjJb6EBFhQVS81+RzGkGCiug6gQLTkwUQliAkLKGcJXfXrdhY9CVLSI5axkJ4PDDzlUGnPJ4BTFN6EeUVxhAUZrLN04UUJ5epc2yjpTQROp6BGEuDg0cbjlFz2ghowhSnXS3ECqRL/zPdk7K+1eXTsJQKEInoaGAZBWt+OwnIDaS6nSY2uT4mBkAfQRHqvtVzDzg0UOHiRsyzJZEVq02tbcCwgWxJjPnOBtUiKxAkxaugA2p8HH8A6k98PDevr7e9nZ7fCPjCEAcw3/4iyclyiJfOIGr8DfHlJ1ROSt1TTr+ntt2OxZFdOGrc9EZRZ+T72wiSmvsb2duIRMvkDtXR5cQSygz0yOOk4EVN4M/ECZQ62Fws0/XBNsf/dEfCdicYwp/rAbW2Sesj/RJmRr7zaQ/o5MVlK9bt5ZNGRqt37Tx3g/cc//GDZa7bPO17de5RPZRyHWfnSLWXOllGQccWW7qvzJMRqduMm5WrJLvHGzNwRB84hC9IJzpjY9dFSPpn3VeflevXuUs9zfffAOQ8XGaMC/WLy6yAcnsuyFAucPYzPqTJmjCMkfBwFZdqWj8jI8K8l6FxSXdvX0axQTC7R/ss3Vbp4/kzBYW7fM0rpMuUV1p74RoxCh60gBeAo6hbKhQNuWhFVUcPkxeKYQYHoqzkhRARVL43O//6e/hFI3kB7BPBdw0w+2MEVF+sofMWih9LCh0X+lDZ0VVeLG21hWYaze3+MChJcZ8MQ5w8uO5CxyNdHnqYlIOWHNKzpUzjjNvvDC7YHcIAZC+RY3egf7Dbx02reTUFCv+be0tpE69GBVvG4LPkjhhCO9k8wSQKYewsqjC2KKpGTKKWSVQRl0USUlCpP1Gro5sVlvIIri0E5Gbhp4pB1MUxMy2qZFJXHEJ+BoSOGo9eDQ3XxxfQo6+hJGQEKdpAt6ZU8liBVvK/+qv/ir988kkQyaLjDDBbkzjJUgRbqFMI4PIoU/uOWXVdQA+6OvALEGYh3JLnD2ssNEJDG3sIewXXnoFz7ds244oUzt27vr4pfm7TDkE0KHxRI4QCX9wdlBuiuPpDYuy5DQ7uVhlrJKhEUKJzWFXWazNYQI7dos0doJjwkF/qoX8z372syAgiiZRdJcmYGUel57A3JoATfLWnBPWJUnRM30qPpM79fIn5mhaMXTFZcYuxwK980/NV81KEDCEpfGK2ZuPFp/4JkG4KSs/xze6K8scVlWIb7hq4gdulFPTzzz77Ec+8hGzxeYYTpw+RYJZ5mLtpOnk2WmiJN/UK1NROskh4g/NSZ5CZ6ln4phsUowvn+VkaUhtJk1a6aeINus+qw2iLD7I/cIxYwADgPvv3+cwXNSFt5qJsEBEojnGwt5izSo22WRCOXcOAq3tcagu9KiEkR4Vwg1cMogidCiRsuqotj0Aet/8829Sqk1bthkAyIK1vMtPwXZgoJ+n85XyCxc6dm3fcfDQG3Yq083RsXExByGCw0JRR4JasSxLZ06dPGNTlwGAGSx+01vJfhwWsyJQfgfnFcZ5oQbrSLL21oXnYNppbnRHPegGgSop4Y31AQh55uC5rsWQAJkbN21pcoieOZglB/mVD/X1mkSxkZEOQAPhGzdvsWoFz7Frk5s2bznb0aEnt25r0sLgx4cICMU5TmBCHg5CCL4FQwA3SNi4ZuWZg2/tf3L/4KQAobJ2xcaRmcVrgihj8SJnOVgK8NGY1pKqOtH/nLPmlcomESkAbrvSjV8k+H33tbwC4NVyGTeuBCHz/u+xAnBL+dTW8kPVU1tpvjzd3/y7XODmh+7/Q1cAlo/oAfD9VgA4WAoDuE7WTHw2AAj0UmwuHl/GIdah3rliRt82Ng9QB4LIKow6tndFLM4orlzu0a7pCvecQBSzlvBekKmET2wpICkjaLRrw9pywXxXx6un336t++qVWin0pSXjI0O2MzokFi2sCVgdIR5aIjM2NrdlStmZEZrgUZkegDSHo/MLk3dfdunQYSoNcQ6Njr3x5kFPNmZn47IFTywl0VV2hDAjEGCjI8vOM2DjCngLMov23K9SHKACEg0jgLT1JFsj8tYrdsR1syzTKwrzJCyRPmsLY2IaKz9XX440E15opPhaWZV9RhNveAYIGL0zTzG674SwYghzGjytiyPVBHfHDM0CYgX7wiVNCCB88V0QJtqAEnvX2fmYjfKiI17UirEFBFOVzz///OkTJ60AFJVUfPnXftX5nig6deKEKkbveHvwrTfU2rh+nX7BwAAhghUw12/c5IkCyuuqcCZMuKsLCXBAlLe6zg9+8IMKW0lgRQISsobwubPnpR87EHz1mjV0xlo6jknEx1s3oispxAU5Sw6n1hxoFVXl+595RsqAcO3Q4WOOAf3gfXtFVCZwn3vugD0Ax48dzluaNiCknEhOVGMXf8JZwV+7nJi3EHZvotgyrYARhpjsPCgPYa6PiymEbKqILk1MzRAunvOcrQ2xOO8hICRIClJI4CZPBu3oVV0mknuqqF2ycAOsniIpCT4gUHOIohj4o4oCHlI8afS15k6yE2MBV8YpreBoPeBbGc4WB5BTURn7Yh1eR7XYIqiR+jk7VV9d076iWTgoae7qpSsiEZ/0FayHCApiEKIPhbw+LjvUfXo0O47p/LmLnjspn104RYqBOABa/qo9cpevXqEG1D7i3vx8idxQhQ/G/sVffAvthMVFY4sxiZw0e6aZgCdUUTcn9fT8xctf/ep/AwiOXeq6kujFczO6q9pXlZdS/jhNziAWenoo9LIn6iRSQi85ak7eP0qdiqMrdy8UsX+MIAzT2IVFSWXGR0eURx1eQRiG+uU9eyJ9yxPs0s0hQUigIh1Qhn0p7xXCkeAUCa1zaqwJ/6HqsuyplpJsU4/plbr2B8v5OXe2UzBjbE8imvP26aef1l8zTPYFpicAwgrTbO/2gVkjCUIXQZ3JvgiGD4Fqda1aku2JXm9I7jBsbm0tLsn3aSNrg9DAT2iY1Sorj9UM9zyGkvAUipSXRKqY/1EHPlpc+OlSEiapJA8DDpEhB2Nz/5ff+xzD8HVV7NbXYlAWbQyYPcZ9NVXwa5Dpa2riGEsxdhsEU4iquhojLnd1M2xb7qiCVH4Q3nzjrdCYyK0qCUO2dVqy1MQ1+qtDMcAT49qZZfglvJDKIofJ2Pfk8RO8UndPVyw4ZKkRWoEVn8VT4yOkE1VYmQzMQb6Ts3NNGc783duHDrMoh4ooL58bzZw9HAxCCIOGCVM0h8VQJTPTGKJnE6Iw9Cc9wDvF0KtRJPgc5dj0guUjS7SYm9lAHub29fS+9NILKgIr4DYAIGChg3P6pyd58FJsydQl9p9hFMgmyEjUIAL36UqixSEMRsXH3z76xJNPh5AWYqGHg3v0E5+QTmJJwRBLE3IiOYhLV67qGrLvjjsTLNwTJvjl5eEPW1I4fvyoI2U0hEBRZrMZ7DqsGNUijdSESI7jxkwpK/RGmhPMOSySZZxkfe5idAzsX5xtQE83WJ3nTEgMx8GYAMABXl7T0VB9U2BYV6djMzCgPJo2FLRCHeZXUhI+KTscDQ6S365c7bQiJAHBaE7OgNCBXYAjfMP8hhjaTtv+617vKHl157adXZe7fHLBMMN5+XDoG4z5GIf0a9dubHGzZTKjF2GsTTGr2lcYAGAvJdHHoBHyavFudAkb6ScMk4+wL2RqcszCijkALRLHujVrdu/YjRs21KpuOUVWG7+MkLePH2MS99xzb/YVbuDZ3iTO02EsckQ3ubtXkksiGjP/LP+HP34CHGqAaVr/5Cc/SeuwWhNcAKlhmifcMdEYBBbkxtF7Zr+scbW2tMl6MMdKCvGhlWtjrFLPa6G2f6Bnw9p1CJf/6vxZBOK2s5mZjEa1LlCh/1/7l/87+RLBL/zCL1iy57liXTL7UsQLL7xgd4exAekoY3CiInbBBK9AwDc02qHLseq6PFEAFXZI4zmc0YXPmSvsI52PfexjvJixkUjl2viYqG5iVLg1YKVCj4e9jh2RQGViQOAogFu1eg3fVx1ZGYuWs3CPioLfce4sQRMu4CdOncINANHFdRQszFw68sZbb77e1T8+NJnTtHZrfmVtfnHNnL2h1U4I1T0WVNc3taxcX93YKpVcvndxYZwdgcDlK/2JNDfvvpYHAMsF0o1fEJR3w46I0r2AOIMQkfMt5VPh5ec3vc3m1rNqN/8sF7j5YVY9Gv37X+83AEipPqYEqaJYIaEnIfrGACBayM5Nut5UGgakYtmBqtcJzD4ccD3th1ejFVI33eANvbp44QrLkj5H5YzJYiuB/vi9TmEiXPqJaivdnAAtwtWaspzime6zJ984f+a0TakijjjhU9w/PeWcE2v0mrC8qU+RHMtDOs1IiRzZ65knhDo9CfPLYnf3boCFEmflckMjyY6287S6DNzwnW9qLzqj+eiFUjpfRVv8JGcCCNfhFUMAk81qiC34k3J6qwpQnts1aeOPJFX+zCtgAUEmbkiW0zfBkw1aMEwDZrObunC/IjO2oJuHm52asDJZpjrpaAt8LgsCPLz0G2XCX8YcWfRKKvIkFy9cyjgfsalgGj58Mp31VSCLb5CEHlbgs2UCcIz3hVAb1q1ncQcPvSm03bR+w0OPfHjD1h36YsVAM3TXellJTCjYC6HfNK3LF620G2d0lL8yeJC1Yg0J5OQi9AK2TukdEif1Ap/4xCd0CiBgiJnpNIzhdsh906YtsR2urDKtIQknMGpkbJwETW3IQVucn5PCxQXiADwvd1367ve+9/DDj0gT+MkTTz+476Fdt+9ZmM+trqn9/vd/cPrUucuXzlc4RiQbEAKFBJyEGPIJgsSxDnBScCHN0NUAIH0PhUKavVQr0YIu98pQG/vOPQSBhhgAAII/pO/yNrounwAbu74UQFLSRfQIlMdAwjDGHJli2tUDqsuvogUougSNhBKAWGo45FtxtFZzkNd6ED45pTy3mViKFilqCbFEhSfS5GiRgEA2e1OdIUC5lRZ5dWkAwNydnX/7bbf19HRbdDIY0By1YXeImpmKONhMvEGmyWmO2tHMKIKzk/LnF6bHsz3NkDeloEX4u44djcHh66+/blgrpROe2NsVCwKTH7p/L7HScB+30SlTM5QKJ3zgRaMI15oMQzg4AqSipGry2iT1oFeSUmm1XIls8BAzArYxeMWNaAs/PamrrQfEUpIYT2+rD5Iy57KvA84+nEfzsdolSLCCYfocjRBQHUthrgkdnF6PfN0jE7eV98SyjokGBqsYdc2eF6vllf334DA3emIKGDRCkWcr30ouIv9ApVGtpAGP+IewwAHBq4SS5oDwuYIzHWc5Af2+xQe2mpdfKKbyMVxIGjiBb6WArWF4flH+1PR4fWM9wvGBr6BRJsagl+1lmhNR4zxfwbL0+Gjx/S4L6tQD5EQdPNFivo/L0gQ0CBF6gY/1h2f/9g+UkCwJdSLRqgjYehzsPaGUfmWrU4uQxIJcqZghBkgPbeHJYMSUCF0l7+GRMYR95OOPXuq8nFILTAwlFccIAElIqz4ngX2Y4k/zrCoqkyQUU7GLguARx3p22qty4UK/I10l1VVVScoxim9saDA+FlZb0zVILKuqtkB2bXpKGgyYdOirX/2qRREYyosSTwQfbRjILqQRofBC4E5ZtQgBkS6Ov/baa6woicqfqHB50mBzw4rVjKCxPvbXq0I16SJGG1Vzu7KWeTdxW8yjuPJy7ApgodIOh4Yi1k86p13bf71npZTDEDbM2FfB5xdQQed80tVKhfkbLuCVl16uqKo2Vy+C/9SnPi20qq6td0/fTMZMz4xbkwIZBMBBNtwN5KuquV3J1hSR1OTJuVavXNPSFJ8jKcovXLth3cZ1G/IK820zdfKxnSO2SK1oazt/8eLlzgt24Dj/x8oM62Ja+ioTvfRSQ7JrmAfNo2rEh3uG9WyYutMw+W2sQhUaAknc0AHwjAJcYwaXupAkYoy14CcFSC1/xsmzEaQuKMxdmirUnI4QUZn3jFPYDKjssnfeAMgXL1+SP2qRWgAKyeMnTlBXg2No4KfZo0ynZ3KMqQry9HDkhdUJOJjQxn+eImECZyrKb/b2dhncEb1EQAy8mh3iIbfPW+kN23fthP9rb7zpQ3gyplQ318wisIIOcPTUmF4xDU7dBA0b0jpLC2e96HyxMvM3lA0a4JjkduP6pV/6JTLCQyXZdjJX1gh+e9tKD1m0lHfVzRZY2782NYFz5I6rIrkf/fgHH37oQdoLspB6embOFiJMYAIwwV6vDGCeeuop41uCkzlmtYfekpF+11stJp33K5pHDs2hRQCSIMPhYkgNbuYIMx2LjFgai/m4ShzId8+tK8MKtK6W9QpT+4Quw03cUFFeeuLYcfFYc2PjD37wg9v27Nm5c7f1EzlLBUW0YpYxz81M9F7tunDpsuqUA1u40zyOUGJ0Tc2xY29TG0GP59qdHhv4yz/+17JBCkpqTpy/fG0uf6motH3NpqqGlsnp+aWi4ryC8rncItP/lXUtLSvX1je3xaGOElF8GSBmoyPwvZGEggfZZR9dxNhp+vv6MyLBE38IobKPCZslzBfleoJel3/cA5YNGN4ZAKRa6ZVf1w0418cb4KTnt/wuV3zX8//3BwBUlEVoyEggJ7ZN32gCrdlnA/wuJ+4opij0YI4bwrHgSdwHRYplLLWkIKV+yjyigI0CSlmTiZHBsSSfYPh954IA/cdOEYluwn1wdfZaQ+lC/vzY2Y5TRw6+Pjky2FRf5bSg3u4rVWWlo8MRcLM4fkMrcvchDgaro6LQoMA8jPkpBzHTn/izqMhzjkLvo0VNyM+Mdk1AzExL4NS0h5Iiu/t6dZzcO/P0zQGIumGAba3Xl5f5DUZBJ5WBBsjRb+YXsQVWozz3dbrjjINcNK1F/aMq/AyrpMMU2EOvmAzIAmU+R9MkwI0ooLw+zvIDg+VJsBVMETC/AULCR0MWmv1qXR/HgvSeOo4QTk6E4HALe1mwPFJjepJ8u652asWsh18+MLx0u4XO9tWrV3IUgpUf/vBpAv70Lzz46U99xlcUdaZEbIaLL3KJxu5w0k7uEv8m/oe5JF8RAnIMY5As244Q/SmgAR8+WA0+5iBWFqXhkKzr2IG7sPj6m2/I2+a0FeBwVMdAZgU3H2TiSB0N50AwAkKdnYTUUAKIc+KhrR/U7htvvf6FL/3S2nXrfvrT/Z/77OfXbdykH9m4aeu3vvVXb711yECxrbkmVotuJKQlQdhAGfucyyJ3iD7oPnRkWDo1PVteWWfNAarJK9pVWOKcn/w4+QAhisWAZ/VaDIeVjmkyO5VleHDIhKa05Ja2Vss9kpDtwZPyYNbccyPV5tamhrpGkhroj9ON+V7qxzm7UgcEFD9Pbv4kL+zyRLt2ujhtQnk6RiW8kilniG2YDRlAYGIXqb7MvbfZ3H/+/FwM2Jwg19rWYsKl5+oVxuT0yN07dzg2UxpbW1urKVG9vAgkJRoxGYKDoXl0SWDbt2yFiYMZsCUdHi17wvId0YsZrJBbdbHLHesoGNyctgwHcvQr5cxo0Pw9ye658wMsQv9LLVFBIUuypbPQUN9KGhkhbmZ75mwHkjdv3jrQN2iABHnsJYV0hLqJFTpPbxArnRRipEYnfRVHejlGiROEB+2tbVrP3FHu+uxDqNYDNGS6mVwED3LG/Kmw6nptV2KgtuR14CcTSJ5BAYKOtwXFnjN86WeUh8qFpOwREuxPx7Z4/aNpXIvV1PXEiVMmQCkFZpIslZY5rJ9CKYCGfVlMHVMb0GA7von39tFjnVcu+3ybT1c6rheBsrURzkX51e/BzbcCAGcU5nlLK2jdNfMoFu+tebIFu2IjGzo7NYfSCn0j+ysnB0NkZJmt5n79ib3EFGhkkTxo4FMYhHgCJWS6z/3Lf/lfGqaTn0dUixQFDS2trSTNeclgY9v3fOheLSHy3JmOkqISg3hjNaMr87IcmefG69IV6PBLL73y8Uc/+eKLL+HmB+/5UFFpCZ4qACE8hQGcQPbL+BkAXOEEIQUoFhws+Slv/MporQV19XQ7Wcq0tHAK48whgyluSBtwN2/bauN09NKZc4eqGO5v//Zvk4ICKJGR8Zlj0DqwDEBqnebgoCS3gkGcAm3j3OHslwAQ67nypuRNAGMweYDgOa/NQasCOP6YOKHrFItaYOi2zZuJf93a1QaQ8i/xF8lkr7BGqQjglquMHNCeefZKOevbNm8inoMHD4o/fXSDqxocjgie8VgNoHPnzp2HMDFt2rLJjh25Mcl3gAysvlArxk4y/hWDBp6H+K9FNA83B2xcszQzPTEzNeu7Hj6a9uzzz91z9weYotwyOmcZ2r18UKMjSm9QpGE8pAlwNqIQ3lEvHl9shwPMGBWaxhln4KCdGiiJXi1KuP+VX/kV/lrvgnCunEdIHk150+cmrjznO3hG+7hdAGI+Sl1JE4xtPSGg23btxnb0miWyZ/To8WM4w7kgGQMhSRbut23f7oa/EbgjxyuhLWgw92t8YgQMN/6OWIFFDmWz72VooOfE8aP4bwkIP5NPtPCyas1qHyEWHWSmWNA30C9QvnSx0/FqGHjxUifpa4WeYIgkUylN9s8Ywlnl0HkgOXNhMVyEvwEV0cPWVL1fZg8HhAOCP8YqtIvU2IKZPFrnQr5ZdtMnPA8JyqpP5bFdihGGoJdwJ6fjg2ggEFkSgY3IyHnmmadB0Khlvd27duGDh2jhHjw3usN/rICP6XaCAND1xBNPWPYhTd7KLClC7FiCMJ1X2HoRcqCEao1CGJnsyMDmi1/8IttBqfEJJw43f5pBBFNhQwUJWsSU9ApMquKVJJCFqYmDb74lkaC+uTmvoKSnf6CswrptfFYZdZc6L+7YtulS5wWHQKxoafnR979z5ULHrMUQR38blztXPi9/wWk/SwXtazbklVXml1RNLxVNL1krrLQIUFXf2tS23tBAO7Gb1Hco84VHcf43bogCnZrMd8iIEZ/4nizdW8zOnKEH+jx/ep4GAAJcYYWIVkVLuV7EefnyZ25Ez5nyXA/3VVy+bnmeWvH2lufL5W+5wb1bnqQ/U/V3vxJtQ9KlANSyYgEhqI1dvzHdGdMsaQCgcEyivwNGdX/6fQ/4Bjs30BZfpQIRbWd8MngTBxw+dET2ebAt37H+Mea3TpmgXy+fxQHvtIel2a7l9FbTSwszdVUVC7NjJ4680XHyYMHiVEne7OhQd+7itDH38OBAY32TxXbZQ0bpNMSh+WIadk0ulNO8ijlNjXI1rEzOIcgUTwH2LvovLMrzLcKy4jJ5wG1Nre2rVl66dMWclL6T0Zm44YtkTjJtbkpM0t17VXUXdUUavjEik4tpEkSQ7TkDgYkyWpRGcvpsB1ZrjgdgEVQdYsqwcbMVTI/7MgzQW8XibexHugxbJmOvmiRStUrLSsz2mbk3TcMJYCNLdPAXD2ZOB0XsyJPnnnsOcD7Ec8EHz68hdgqUP7PvAfvC2NU77tiDNEYNGb5deU5eFaum/BLXYRLqq1/9XRpx5uxpS9fHTp6g/Hv3fkiPo6SGBCJIswip53JSApcle56nHRwYtuHsxQMHzmXJtM8++2J1dZk5LK2b+McZl715F86dt4ZqAPDkU/s//tFHDQn4E69gJRGG00Mg7uG8oMIuS+rBy+G2MKe1qbWn9+qTTz7paIeHHnpIkjjXJOzt7Oz6wi9+yRqC02Clzn7rm3/59tvHxkaHC3OXKsutcRXijIRgWhEB9CI3M2l6QmhFLpQhRjLOb5WqOrfAHbmIwCue3MnudENEJESBlYckTr7cJsT4Pd5SNGJh1nGltnVKY7a3zQScUMFKskONTALG3K2Nk0aMVZGoAwI24jbFgBDxaZ2wSMFzcsENT7DuxJkz23buqKmsIkdvPcR5nKHt4OjasCu0LMsy0JnKb+K5HMsEZmV52ez0pGTg/r5eaVVrV69sqKsVtjreOg5Gy86Nyc92iAoPkEMDiTgLBCMvn4qSCP+gadAGemP7shutm5e2+2J01LpupEtR0bXrN9Kc1FU9/vgT4gGRz8MPPzwwFOfP4r3+RbfLXjCBNCk/nuv1nB5q/bTXjmen3MYgoVGCg5BSW96K4M3Y2t6KQCvzhospijBIFkTbIW0gBho8iczHra1aQAYJBJVsMEgozHfQEFkIsleualu/fq24HD46fRKke0jQLnHoMZXHUhDIRRDLsbgvifFeBIrMAf4jw5HT68auWMr/gbvuRpp8bLLbt+8hSuKYECSjEWrm9eX9g+aLug7kdfX6pvKlSxgOsgGhlZC6mnoThObikx+mFaEqvlsccyLhe3HDK0wweJQNZTthTI+IA2am9F+6KaM4mqkVdRUObY9958IQo2BTIorFykZSYABdCoSG3zhhj8p5kvtn/9Nv6L/NYQvjjP9MMe594H7oOoacRB0LyeYdsQEcfTVLd+70GVGgWJ1ems3VErJpycVLXW4scDCbzktd1obuvOMe98Vlcbgv8iCKNiwgeEio7i2poAEfaSTBmIT2FcAgfm5esC7d3dg3dvIV5Av65WA4pFIiONHaTsH8HADqYyK0h22YroA88RiEmBAF072PUeOpL9ixQCSAZmsNRdeo5zTbCA9WtF+jqPCcnGALIN7Btrc/svSQQBtUQaPnuEk2+JOUDxyxkUhIKykgUED8xHcrz5WAEHO32SGnSca4wZXQyDdef3VxbtZMicCLQX7ve98zDMBnzfEL9tqzCilROAa4U3SGxwbi9KzFRdTt3nW7Xzl+4Ev/AL+vp59h4C3RTl2b9NFrr5SHBvlqkRApvejchM2+ffsMZBmDEBZzIEOa2gUH5qGsAwNevfjiixiiLhIylFr4d8aDY/Rp985d3uJb6qXwgamoSPatMEMAAQAASURBVCieKw8yzdZbuIeG/CwKoIC2VPdKEAlnFMEZnzHBW2gD6HlTc6wUeUsnqaJ2ASQC/HcpBhrSwPEnbLlIchFuolQtokEvhpAIBwS4RpVEplbst7trzy47p0XJIEv1MVNuUhMaZrJ10raXaMKsA3lRj4L8vDUrVkr+0yIN8dBoHFFYQTqS3fAQ34gMh62cwEpPSckBcVE8JRFFmoaOISPLjj6IU0+LGwJCQYGEBAoTPrew0JqDlSX3YEI46WQSEMUjJiSYwQQN/5VBIzhmgzBq//6nIGltkih37tyOyezo7IXzXMl5g6ELF+ygsH+aF/j4xz/OyQJIl1TBQxKkgdplkuY9EA44BdCKHhpRaMFJ9otMVR588EGvFMZPMbE+FG7EBELqw/Bc5AE9tKMaaRjs3nzGYHeXPf1rN2ymrdcc9D27YFdPfmERRjnOa8mmkYUZZ0xu3rT+lQMHfvL4j8uKYkHALm3CBVa78zn5MgtnFvPKahsrG1aUVDcuFZXP5hXOLxXM5RaXVLfWt6xoaV1pk8A1od/0XJ69RyVl3Ggk8FiMyIkkeL+5xl9u7EwV1XLCwljMjQEAaiJiVigeUIJc33PJM6SI6bcs3kZaFFqOj9MfN/25XCANAJb/XL65UePWf2F566Ps7/esCHNXFpFHL/J/OQDQqeAAOt7dxHvCVyx44/fGoCFrJAYGBYWlZHr40NGIkmOUVDA3y9kaIwEeJCwDXL7x8F3Pc60wGwSUl9iT13/m2BsXOg4vzQwV5c75noNV15GBfhOrBgBLcz5DXkUtTR8Zz+ASpdJne6JtGmuhhwqNjEaSBrNiNR5ayl7MkwvrPIAI6UjYnJu1bcL1xS3lDR6gZAmei6AhcRC4QyrzYjrNWy0ydlrHn6glCGA1vFNKnADQCVfibKEhI9IirNgXepkGM4eYP9kmo2DsLAg0Oxz8GhhAjx5m9hIpH+vWroGnuTEdpqa1YlMNgE6xh5uJdt0NumACFPyZJ9tncWlhljfT6Nj4yJ2373HQCL8EW44RDsQEDrM1oQNJ/SZs1RUGyAv95CcfNfPKFQCr3f7YvxA9IKolZnsCbVRgO4DDgyP7n9pv90Pn5cvIV0wTom1eVEmysFeQ1zXSIB0TB6aWeVfxqz/hQDRhVpmGcwu8mdAiyctDHAPz+Mn4WuXdd99pXkn6IkJoEtrfOnyUB2trXYlMK8QOtj596qzzBqvLfew55hwh40u64EixIFMEol0+llYAQTgC7fHiasw44CQ8dTGY47nCQgIkI4H43GCCAplWLHBcnvC6SXuB5Zm1yDESkxtSQFcCYqoAq1HnOUEDDjE04oAyYOKn1lNvYpLhSk+Ps91MgCqW4EiExwc65uLDVaSZuhIPrRQ1tTXNL86X+6Ct3nBUgk2PPR7O1Vmcn5Xq01BTS4ebGm2byS2VWT47YwWbsLAlKRXupc4RW/hzYGGING8TKwx0NARJUnAupAGDAkRztSeOFTnw4gs4g5ECSFohqHAkOU3W+yumIgLxEIECrfQE50HGOk0bVBimOr1Q07jhISDy+E2qDgz2d3ZesjZlOby5sR565rDEVGbDDDb0nqSwc+eOpDAYZUVLtws4OCbvKbAbo4KJyTGHe2A+UyU1XLIrg0RMI6LCSjvcEOtyI5nLCpAlAzNTsHUqEbTfPnQQ5DofyHMIZFNMyFr5oR7SB1gmhDFTrI9MR5z0DzkNj4raZjAoBO3uHfBW+hYmE7oypmtBJkpwYOVXARcbhACOEQE8SZkuCQyca+Q5HVPdKTguNCpvPhS74sZz04PZZeaCF2RPnid+KgOa6ppWV3PpCe7BwcPc8y/+OXMy82csZb6ZCM3rB3LZUovTBlA4KgUtO5Bb5bamZnYimCRanx3ECK+ofse5i5kXizOeRscmbCoylmIDYvSk94k8QSGM3SsGml+qib9E4ga91RXh5nRk5tvjUyiGPDjiuIOGBoMyc6M6E2HFqdPmWTrOZpsWbr/zjvvvv5/rtJ4AflTPzTWTSnj4yJColhRMsscImyYJwD0GMUvRIXKUFCfhOEV0YZlauENsdQ11OO5PXoOuUzXMAV9dv4AgByEaovd0+o7s864CLFz1ltvSlrcawnRPtE473dPIkGzuklwnzhca27btkHzFIxPHubMX2Im4DTm+hQ4OXnG7S5EUOdd9tRfOhB7asBDpQI5BNIpobmxhPMjEhzUrV0sdoVjyWui6ktpFCAR4ZPkhagkxDxw4gO1kR5SJLbhO6MrTYA7dQ1SrKLcHFdiCHJI1YkGO+WbGmViBJ5rQIkZhF60AR2wtokUFvqm4eUtM1XMQqsAfNM9piD8ZIYD+pFou4lBs/YZ1liA0DYiKvIAmMFxhDAFBSX0qDwVJrZg3cKGXPht1IBYcxeDjhuKpmBr1UFb99MSopW2a42H/wAAmGEPD5+z5iwS6JsuRNdLlaBDiI4tmelrbYjysPJxRBGGHWtIZhOMPJ+6teT4dnj5S9JDIpBsQ0LpLb40WeCZJQR4QvIKtDVipf/Kn6sAyDcXUghWhKKkuoSBcSTPhiuEbIADi2KmTx59++ml2Q7iG01LzeQnQpH5V19lp1PvY44870Mmw5E//9E9/+7d/m7iBQg5aGBHNAYfccZVRTM3M4gnma0u6J/gaQiAEVPE1A8MkewlUhKrkvRWtXHlsZcEc2HLWitFqpLkBGaoa0iIhmn0f6OlyIlv7ylXnOi9Pzy9UVtX5GuDcbHwhRaDdUFN5bXxYCFZVVvzd7/zNpfPnzN5H1sqiGdZgvtOK7SKZX8qdNLjPL80rLi+oqC2qqCsorfIpgNn8kpzSurLqxtr6ZocFFJVW5uQWzTghlMneSGKJyWwrAWa9swMxTUi7xLcOyIxhwI3wm2q5xP9m+zh6N0YLLgG9GmgJcm7c3PLnzc+VX/5z+SaVf8/faPS9rves+48zAIimszFDwgFTIJhfEIdyHDl87P0GAMos47x8kyhb/hPj7ZMTE1dXllSV5/V2nj159NW+y2fnJkeKfRorPls1XFPFoislT6b5eHuuqBZNAEQutF/GwtAkFTN2GRusj9axZQovFJicnTC/KAalrvpQOHd2XmZcA/3hPeCosJRA6m1R3jiXOZuVVIzGWmJlawrQfxMuylBmfl6/a3zLnTqUjM6bA2Zu2oUJ1wq3ZK1egYNkjoItcJtwWLNqBbeZyvR2X2Xj0rXDPeYsmZgYjTngWPrjb831grA4H+5FAKQ5Xo5zSAaFBDcAaguxmlZr46b1Rw8fManioaE7zxk8ydZp1eXzdSJcK+QVQNcD+/YKkHBPEwwQCayMw3FOoI+pmxRIc3+wRbUWHbNy6K1DLXKWFhfhrKLe09F7HAUEFDA/ItLSqNANVo4NJDV8Rr5LGWj4M0VCPIw5pvSEk8EfH5Z2loG+GyTFoKFz3L5jh47p7IVLvIokYGKtq2+WYXji+GnJN3ZcGgZwYtAOtZRTUBi5Jak5q4q6CfcElE7R8Rki6+0iEC2KkHAVIaQM2yQvVCRasFev7U+QFfNQeYzShIa4ShDI15/qctHKqOIUI5xU2JVI86fycMBenIGJkukS1R0/ddLGNpqJJy6YyxGACcX2Z07QlOOrNbpjVWrqqu3w1RqU0CXryDc0TVA4JNAAwPOp8WvGTiawzdlJyyQgcx8nz5wWe0CA0DE56R7dwDT3lFMIoSTGKnbgmWfhqWeCfLbtfrHzchdbEELQH7FyKkYxQh86O62puQFKLWi7oOpKlGIIVPENfEyWuufIUSbmT22NDA1aWKOTLNoJ+YBgDnFYylBFB6pX6u+Lj0LSYeVthNYWZLTllCos0pVrAotgqyGWO78QMTrmiK9UYY+8B8gEhFjL1UQGvVSloLjEZCs4CuvRLl08T1jG4Wxn08YNZhUb6+q1bqEp40aEN1CVHWDGmR05L54DkdFkJcfWdkfaFBTEsr/si4yx9fQH2+kM/JO+YQspeIsDDBAa9Aee/uQKlDccUh6ZOOA8Lr/ukWYspzBU/eqJlIkrRhO6xUigdYf5Srqhe+lPjbrBBGiriFcFLBlb8R0xenp6LInN2qIBQKbNBYiXQYkMagHva2vXgZJCq9HxEU+QhJuAQkAxONEDhD3/3POa90k/YBl2chAwwzu6i+mh0NmOWNR6CyxZeiiMcCSTcbDxrlMpi8aKLLSZKHBGgUlBWXr2EEv+4WUkBYmlzF+aiaSCd9xxF1I1CgcAqbJ7buX48ZMmNT3h6UxeQUArMGeoniiDCY8//jhQsIKh5yDgEZ0bnwjddYMEDwmAZuAMl8ELAx4Cjm34cXn+0osvClKBxWhvGViSU1IydYkZmd5mllPpQ2kWlJkf8uVt037c+MpXviLEJwX+HXwRsAIQ27Jts005JWXF1j2ZHypo9tDAMBFIv5TOsW1LfNWYp37ssccevH+fvH/BH4CpH3KjPGFxB3/xF39BwyDDNRt+UABvyeU3f/M3FVaM3FGtdb9IANYxAkTMJCCP4TimygN772dOnuD8dZUqKDBuwW0Ie0K/mTpW4BgWyQbxhMqhiKKTRbJnjPUWqz1xQdKfGt2/fz92KQO+3gXVauGzFgFXEnoIgQPE/MpZ96u5l19+WU4qQSCE4JQkApJSkV3RDVJm2zWVpeZRzGH407YTDen48ce0EDhK4oZjqv0SkKX5NA1GVbwF07wc9RYEB+TcHCvd5obl3H/qF+LraXTVQRbqAs4aEcLK/EnlkIYQFMENOaq7wTHPlXEhyhP6Q8pUMXUz+I8P7lVJgsAErPOLD57DX+6TsHvfvvsBSW+tIbofzOtXy9jMQBFADSGTfAnRBT2cAQpniI8eUsvEK8qAdUIQmLvBB2hrTq4dTaM/asHcLzIz6wvRgOyCcIKPFtDIFCYKIwr+ThV0copTz6y3xCuphBAbHQdKpC0bZGoyd3V7++hg32uvvmTXTWtjQ39Xt1li8CMUF3w7zNh4PyeXMo1NzpnxHR0eKywbrqxrrqy14dhsf97YaN+V4YHx2qbWFaur65rz8qWAm3jMOgpJRNkeVdN8IntIOo7G4qw+xN/Z8dCR/R8jhBT9azibYk8hf7ZEcGv0H0Buupb/TDdQTS9veX5Tjb/X7XL1m0sH+u8zYLi52M33AednEU5v3xO+Vz8f/9T6zThk9zEjo6775ZubW7np+aIDN3IL8ozRx5cWy2tqdu66s6Og4OihV/NLiucWp/OLyhfzCiV/zQu6F+OIKjrPDEHgAxkNm2JKXI38QWpMYxXg5Thbykn/p+cjlCR/mMifY1+u0RFuHxgdU8zTswW/ptd5oZm5mNlNGktpQQaNm0pDCOYG/p133saazMrbvkLh7VNiBan/Vtgr8QRtT04eNG6WTSVDTpk50GYmWmF0DFBDszPTbNByuRwAoABkd9rac9sdQg3GiF4FYOKtV8lz8leaU4xTSn2HP9evX8dtIipZro5MYdz48Y9/rAvDJYX1nljU1Njc2yfFedgkk87BK6DA4U53bN8ln4rfAweGvN/QkDTaLlPCot3W9naWiwN4aOKDjQsQzYLZpQysSF0XYELBWgW5m98M+8sUlRSCY9nsBmGpyEnqrBXAijiZI0e294DcLb2hD5Xu27fPK/jDTWEJa35xEn+wdMQZGwsL4jMAcd6V1MwvzOEmDxqfCQLTHO4sp3xocMwGPJxJzzEWdSoimZjghs+YoLxW4KyAmSByJyxPgMI6PZqZU2V4RXCUxyVODBqw9RZz3FA/DWGdJiAMAnkprwmg/Dk3HY5UXcuoOKMiSlUMfZidVd0Zd1ByLoTgzXBU+r7uXy4KhE17223V39vHMZr5Hhqd0PU88MBeba1etRJLoWf6X7fodG+81SL0cEYrlAFpxCQBwRM3HDul/cY3vmHCy2ZS4lN+eHiEWMcn4uw7BUJhWlqtI9FtaowtNgR2Xg4NARmaYKJCRZfCCjAf8qLtyFSARPTOekl6SKtt8sEWDGEjZaUllBbf4LZj2xY36iom8oG8uhhiNzUmg0YZ9EjaNaNKCzxELODwlC3uZBTl8cFlzzA1k82rH5R+LN8Hh03/qeIrOuLA8xcvwRD+Oq8KmXj2Sa5YQQ+tACS6tJ6ftyrzMLZEDFFLT0qKbX642/5QYY+n+l8noXMR1Jw7MkkHoOiDwQIIDoGiFIaQhxVsSRm2iV2eK88MKa1vOimPWL88XiI8/jHfFYerR+6cX7oaqr5k5jcWEMDxl7b8KqtuKuzXn+CrBaZauf/9bz8smhdMyweAjBd26VHrnzzxpEBWWAkW34hgWMrtvtBxFrjbbtvNa8gyIXtSgcG2HbvFqQYtWOl8IwI7dfIslbUrWXmqgFScchGAhgleW7iAQX4Bp4hm3th/zB47zEcEybuJWYeHQ4lyc1f48LLheMzc2M6Xa01AYZaAWWZx3HPlNNWHGCiNQYhWnCusRchrBXrY0da+ImkGRkBPXYUFNASAIyRElYFCndgxgv5sohHjvCU2iDBaFzPmGQHUCvg8Aj7wgAZfLIcsqRGqlYeAYZUYEczkVlQhWlQb19nEwbvBE8DkxymTWsyAKgs+6IdQkmIJ01vbHaPaUlkNcsyXK4bzzjnRFiYLygf7hxClxWeeecYOCukK4i7p7ASK4UApxknRLchLrHzlldc+/elPUgB/sk9ccmmaaAAhRHRxcLy8qRcjQOxFizLkDpoW5eXjJNlhFxpJ34VSHEA+EhALeXgikFGNjF4jCOR7y7RgRR/wEw8xU13FIEnrEKihzksXsUVz4EBDuKm8Ml5hICB+VQSZdFQ5c+o0H82FkYLBhgIki2TDd8AVJkp881AT/EXHyROmM5EsGm5sakEIV84B0Vs8sRqGliNHjiKcy6MqNu1pHUp0Q+FTZ05r13PqIcMU86W7iY6ZtTGYxXFTlchJ7jIhCQGX8iG7bMMJPkOJUCIWGR2Fv1cwRBeEUxmAlcFqloIV5CIWh5uUFWCRyVrpvHyt1159mT5IfPR87333AX7x4nkCXb1i5RsH3zJzKRwAyhqdhtCFOUZKfB+KYEWOgAPF62nCOUjLwkIv01CXQGn7D3/4Q3tsIANJik1PtOsjZbiKZB4WOd7SPbbvCRwgrwxBgINeNK5oa82EUhAnTubmi+1ggnx6fv5cR3111aq2lnNnTrzw3NNjw0P5dqDOLuRKHHDAp1XQFOxaAVCzoGTWSZQL+bNL+c7/MRQrNNdYVF7c0J5XWuVww3xPiqvtDrYxoLyqftrpgdRATq0MOXvsciwpUAyjjjkjFd4mJbl4kCf3PZb6QhwuCQEGC5iQVEvJeJj93nwTRd/r+T90ChCs/oNSgGKJ4/+NFCDDKir6/zAFKPYe5LPNeUlfi/NTlUUFvhF2tbPj4GsvDnR3To4PyfAuK1aElAx6F63FOyhMGj3tIhHzf6inWpwDYXJQFZWxaOYhDaR7XLiBndPEpUnR2AsXOrkdA0niMyPM0PSnBG1MSANdnjsJkQ4nv6TXpasaosOcupJuFJMKz9Z4PDvsVZFX5F6L2uVD9CkMgYexIpe8FpR4J4bJ79nkynuo7rLlV1qLzA21rnb5lO+IxQ7zuMrzbJHR4QjUpTwxHPgcMs/DraGXySBWJ87oGKmL/cJEyP5LX/xF8QPSuA6OS6MwISmRnIhcx+dcMpxBFJiZJZoyj6PKncaIBLX4Q/n3+iDs5SJwTIvOtGAzlq/vv28vd+eAL+YDDc7Z9KcASBkAd+7ehUYEYiAnI6SzeuZiGtry614TCFFRGd5PQ1qU+sg1GYfcefc9BgBkDVWI6VC67UmwXFniBJEGaWY4YDnw29/+9isvv+7UsbbmZisAYGKC5SQwXSQlbQuZhOWVIT4I5GIrl9VEZ6lx+C6CxjTF4OxGSeXRlfjvF87KYKPCQWm23U4BTeAq3mY6NosKrxIc5xJgiwLk6yGYRKl6cg70B1jl3eC20Mv5HHblcbwQSBn/SnKV0p5RwVqh5BhS+dfocHpm64oWE1ikv27dGputcdLQkQd2nJ0vRfpuDK0oLyvV1QJiZQQa8uOVB5YaYDKs3AOrR/j85z+v2LPPPos62bw+QtrW3EriYgNJ3Sgl0zXrNqBi9+179ALEQdAvvfKaX0wjEasgHiqAG7QOx0DGHKNBZdAofgAcG6EqjUnk5iyZ7q4r6NVTwMTxIIqpEogtzus6dc30xJF98oVshcUHdbEUPphMK7SiF2NlYt3UtNYt7yt56XKnFl0sQrs+VeGhDk5F3z8QilA2WQi0BcDosHzhyhmaRTGx+Gu/9mtwkF+jOapLcCJ3FV1oce6ftyzFxDS/QY6e19VLJp8jcQNXDcmgwT1fbwDBAICg4eA5Mlkc/JcvdXGAainpLWT4Ck9kNCjvUpJiqIVAF1fjPukncAqk57w/B+YCxOU5xFygYSngnuCz5pTxW+B8QKG/ovp7ewAwur6snm0kIZGEa+369VAHhURpAFREycaUm7ZsNJsoOwXjBiWnDwzs3LmSD6IKMDNhTMN8RQ/jLPQ4jfjUqfgIq2GG2QVBlXPNJbdkxmYRbZFyiuHlt3DwTb4p6wMHKMnNqTJPXFpiiyrPouuPTyJPTSdXS/D2XAqD5HURhtVG+OM45+jPzCDjRGoOiMKJNTHUJmnRJA3ADozw3J/WECgZIxRF8XFIUIABUPpGCQpNDhpth6fCmEC/0eUex5GJdUCpKOjETGlLXJiRADVyKewtlEDAQ7UwEOu1paI+y6cZNEeUqPCQ+ZG9YkhjtHgCgjldpiWcrb5AgSswXMgOKwjA82zXueRTPLcaACwx/9Zv/dbE2LgTM0+ePA4mfAAnU4kxqijP8mVu6AXZhooapU8yqTynK7jhl65IZTHRa30AGhpFAg+CFX4Beeihh2xCZ0Uw1C1hIw3mF3Rj8Od6cFhFKAEVHtksflu7cQILAQrhFEngiDqvaBpJwVbT/kz61tYenzDUHDFpSNMwJEcXgCqCrC3IYJpadBpw+JMjRdW6JrRlggFimub7NEEPAbQ80lRXZyeoYpAXfSRVMfhx8hIEfCcMcHiC4BXEHIQHB2Q6rQJLNUHlrM2BsLU5lsL7LfgWFHAriYf1tbUWymkCCJpGIyDUBhCQNQEUFU2ihDmOJdMjEVRjHTWmM1ROYW0l3VAX+aA5scSv5yAcOHDAKNHZO7Z2yHPQECAA4hLkfeOZmP6z/+y/8BwmRE8zaZ1WeOeED82EJ8031gIQddADHAQFUJE8ANYZaQhokt9URcW4FsPdy8RQF4ZQpcPqasKfIABFObmX9BbmdjQJ+itLnfFdic9j12LCQ5qHs4Bz5mdXt7de6Tx/6viRedn7k+NlFguKCg0ADKxj9Ef2rpzFohzL8aN5TlzypUUzW4sCprnZqWt2AuBAeWNrRUOzoyBEQuNTEwsOUZicKK9pzC8s5VPznIUZSUAS1a+H8vEPjY1s98ii516tBghN7ZdNM9h0LysScf/yvSfL98s3y8WWb5Zn0H9O+VT45//e0sQN+P9oKwDRwSzj4CbJ/904e564ld0E39zcwPb6nwlOQADTLnJp/cbGDnRamBufnCurbt51x4cO7B+bH7O8HOE8gQmyF+amne/hQxM2joBAmTkBFkTifKNVNyYja1yw5TkVpSmi3xknIoxP0DRBtggAJr74SC0j3IqUzpCwiTXPKS1QVrlVp8/gMCVAqC4nw4vu3buXG7FE6cwArxTTZy3rOaMWcyjAZJiAK1nxsiEn46J9+k33LMVWTvgfPPimppubGtmsLxIZlLIILUIJ2ieOnUy9ifJh/uPj5mVEJ7wo/nGAqdOBOTeye/NOkM17QAYaSGCSDJAHYINyOFXUMUHAE6/4TOilMo57d6SBeWVeztFHGzdu1jvbMH3ixLFEIxfhdIEr2XEImhOg60d40cNvH4GwcQXf4igzDfEhiQmariiPfhMt+AxbF7aEH1hY+NGPfgSOb1+CrAntfuADHzQjq64pSz4KMrqAf/vHf6x3a69rVMX5T6hWyz0hIlDTCaznJOIV0pBvu6Hnbjh/x+F4BRm9cVXQF5e3gKAdq/3Js5GFYmAClUQAT/eeUANMc/mTZD3XjQoKU+ABAtlRSMy/ciGSJ8EhU4W1ol3kw1Yt3jJhDiAV1Y9gi8KEqKSDPbSrjF/Qgmny7fLyIGnfCxbF2ZSTEw1NDlDwzZwYuypBtTt9LObkCYPMle2tdkesXNGOcGmfQk5O2EEjqU8BGaXiClqKqH379pnTSWyEOQkCqFundXiITMFe7Masb/IEF8lCrworaXu0CDSdIAvyBPeoH3r1g9AgBSM6YhUSeKj7iA706lUM9Bk+ZTh8sQe+6VawC5JETjFYuq4KyfDxEFfHx2KRBGLg4AlCjHIhoxXDZFQolqSJh5RZjw8rvN1z+x2eiM2Yj7UZw1FNsHVsTFJwg/ktjU1SznZu2w5n7ULVOWAmxdTFdhsKxb0IhCrPU1VTJ5V7QkTk0L56CQWR0YQ0BTRNjuJiTsB+Wk8YEb8EYZApg4tQSB9pIdAsmidopGWIRc4CxAzqlAnJZivPqFbGvVqqQNgTvIC8K9Ml4WXceKUMCG6UhL+K7tV1r0BqNPd//C8/+uUvfxlVGGeAhadmPQGFtHjixRdfAnfNunWiLi4GbZNj4zp+rWONTcAppoGfbz1g9N1330st5uaXGI81Ct2wHL5MHk4j7r906bLQ2hiR9SHKKFY8I9lpxYqVGzduaG9f4csf8aGZ/BzfdrSn3lZgy6l2xBuznu8461z8+ppam4OnJybN0UkTQoYjn5IH4cvS2e0oxH3BD8Wi2d7e96G97BNRnH6Kh3AEhvQYj4gEHi7QMJ0O4RohEY9iJ0+fTJrKXEXP9Ak5WKkwq/CLdpLGTdpJ70eHY6GWZnMHmuARjKxEVNgLMWx0AyysFPOFAh2KkTAIIey6Bvx0A74vuWI4gYHzd9//gbYorhVv59pCABBBKofLzHz+zKVBDjdtgVXdE4dmyr+iISY40wheKEy+ENYKa3T8C7mDhliGYdoGl9ghVwsf5FvdUxIzGZjoWQGdjTl4vgACTE5JM0BgIlyjGG6okCafWJFLW1jEWrzFYYT7xJ3IGHxVGKHuU3XYGugzD1eYfbZ0pYpiqmMCHIgSfDfgJO6RiDEJeWECDD0nYq7ETAY5Qli7mEwEWEfp3auik8M6hXXhBDQ2NEgB8Bw+wn2ewnwAX2mpJRx61xW/GqUqqvilZg8++CD4lmkx3I233b29qCAvTDt34bznrCMUY2raeQJadC8vn1ZQIRoYjixLNoOwKgiEG/fhYdflK9wNddKc597CWTGmhyGQ1CLfQWQKKGYAwPl6Rbf/7M/+jDR37thGRo899qOHH37Yxgj80QnC3GlaUnC3bNnGXxjZEqLq3mran5w72uEAVU9A4IjZPqNGGjUgFI16hV5yh4P5IY1CCV3CETiYcHXOugVovb6HpIlSElQXh+kMQWtCLe1qHbagCbgCmcIS+ukhoVc663BksKaivLaq/MAzT3eePzM+PCg0LC7Q78WErTl5IXoMK/UEMaPnO4OxDOBcINOB9gT7w5/zeUVzBeU5zv8rry2p9F99fnFVTmH5XH5JbeOK/PLq0op6i4wL1gFyciO6z1vKXZjRUGQYxV9MVob79dw2HlijaBFWumLlIILRyAB2eXLLzS1/pgJpBeDnlE+1ln81sXx/881yczc/NGgJhmSIKBDDl8AqIOhKgbrlFCB2Fpz8D18BUOUdBNLBprmxsXt5BcC4OG0C1hlFz/X3Y45sLP7fl+T5/9LC+DpH7sJ8SXxDfPa1F587e/rtuckh37Fw1ntxAfc7XF/llOdqn85ANRo50uQHWIR9QJStpjaChtTXUlTa2z8UroACMx+nw1FLR1GzMszxljsP1zcTPSh99txJgm68ZQKpZDI9K30aVYBWS0twoxUDAK1U1dZAg+HQczhwC/SchmMCZ6K6G21RJEbtWE+/kFGspcli4xGHDHIy9Q7DzcupiLn5mA4MsS5Fj+OMdvjwbMozWBM0HAJLZ26cvNb5Or8gaGLnru2ctu/aM2EUMS6F3bBroPgiN+yR2yc7NOpS5RrE0XDmkPNzlfeQH7CMAUltaRE+DzzwAPheOR3IJsX21la5lcg3zfTMM8/Y0/noo48SAXwGhgY5Q65YK5rgad24kAM4DkAm+d6DBw9yFzDn5/kBwwDdRG1N/cKSXQ3lhw8f1HTH2dMYtd6J8r6cWllD4uNjk5AZGIwtCsePnbLgLUQD0CsSSYITdEPVhVgnfmJmes7tQMA31xX2Cko8rWGMX0/QS4h4mDwSvnFZnkMPFZ4Dojp8yCI90SsRtPKI0goIdOn86Q5NJ8L9qQryVUklAcE3z+mkyyyEk+yUcQ+y5lAhEQVA5RWLLynRAwHWkl5VHFC+YcM6iam4LfdVj/zWW2+YgaersivxMw4Camigh/qgRns7FxZ6e/usdvqTXSAZ4SiK0CKLefTvOK8tBJKF4ZzDQzFk09ZIwrEaKm2MOOSiwI1S2WZNuFQdwqn78PkoFLnXA9J2fBOliP5xD+E0n5JoBRVYBMjDH/6whrAOhCuX4/gg95Bxkk/qwXXWtjhrHUDlpUHBGSuwzkwT3EAGwRlZeKWumDEhr4A/lSQIFevrGu17FOdgrylcNMLf2UpuqBO5Y5RNrRYJLfHiDBz0wUBBDASEBAeyjBq+hZQDyeLiwaFR/qquus5JPegFWV2NWuHG2AvnO0OC0qiyJB/3xJqQxwqYgMCBuFgHKjx0pTLYqEBbS2syWFSnM5fceLLs5AMl3HznipWHdL3zzCeiszm4hL/naEl6nvt3f/RfUxcVhAhUCmiJjAIjx2Ox/FOnTvMsm+Kz0vHhdMh1njvveBN5R6o4JoORoM3bl155XWRjucbz2bk48tY30vDX4R7GcijkCDRJwDRAQCyYww7EwAlYpJKWAYB9LW0r26zrQVEVmgRd3IEYiXoIKxx0QzBYtn7VGvrnLQismK7zjFpnHISkOlrWrF6raWR6LmtFdahqAkXw8TAT2JAYlDaIC0FWXhPQ4zEoCj1gJDyayAYaJMQ9QQzKiuGA1v2JFsGDugB6mAJi0+GwUpLysQEwVeFAQ9R5rEiCYCTfA4ujigGOh4ZaqPOcVh14/gUDcTRCw6EkhjxxntHSPBuOgZmTrtocrTMLPSmAoFqIUHFFa5sVAOuD1k/QDg4MQRZ2sz0sRRd6k91imle6H2YgQZ+MxM0YC9Xf/d3fBdkNjbfGwpjdIJQZe2jI4Z4JaZGdQB73VCcm2GK+QT+FwQ1/4tJABIiFxgmYDx8l4WbQiGm0CBxmjy6FMQrJwLrBHBe0UUFAEMtG/JHORLUMA5RXC+2+iUKgboCl9NpSABrqolQtdTVB+pygYnNTscZiIASZqppqcBwnp8oWeG/b5hQLdUFWQLcEMnPAH8mUmkZCOB2HhWfbcAndQchEjBbqYRzCN5UVFWsXMiBjqSkTWBEQ1mEUgBBTngOCashlZBQ/DaLgkCzOn3QPA3EAi+CJz9gCoOpNzbHXhSygh5m+SVdXWw1bvotMy8vKBPdOAfrX//pf/8Z/8p8aTpv0soGebzLIgRjSfK5FKK8J+FAJFv3QQw9hMra7iAx6JI5XlJO9aEhzRkEKw8STNKRBvjly/HdJMECLNTFKRfn1T8lAcAAVmCbmUB6vzOkjXE/vnnatXNGmwOS10erysg1rVz31k8ecB19RUtRxpmNFa31/36CQCDICxEh0ZG1sxgCAg5uZFvnOiwPjiJ6CJcn9uXlzjplfKpxdKvLhAYlyJZUN5TXNRRX1OSWVvv9TXtNU3dReVlOXV1zGfcRxONb952eyGD0GADh/I76PLsGfYlkBkAEAcqJhpw//7AAg1cpKXv9JT5af3zIAWH5+c5Wb75F285/L9+9Z8R9/AACNtAk452cHAEZ88z7FXOg7XTEAgHZC+N1o3/zcAMAK9tzSXGGuZB9jlkVpW759OMkq+rrefP350f7LS3OjNVUF5UWLPAElKSmscFIkXaJmcOFAqCXpUC663b4iDhug5+yFXon7u7q7hQjOhWNcbIo/iS3FWQKuijwy/admVJT7VWB8wrduooPzp/7Jc3DcUw1t6TTpvwEA82Ey7SvlIrdIKeFn6L9GwWSeijFneu5Peu5PcFhTYDUzxXz8aZpp7epV3lqui7XWkWETIDohk98gI8EsbwT9w9fDaL6FF+Wd7rvvPlRw3RriMCHAv3Ev7l97/RUj+draGvzXBDI5H+TofTxBBVNFr1kthsmJachnn7wC3OUkFi6Fk4GqeWWUQsz9ypXtuBoEFhuazTvoTOCjW0ndx6Of/AT+I0RJ55akhjCQ2fK0WvQLGU9g6F5JnIES5kCJF+K++E8lxZk2BDmx8etf/z+I2J5mPlkmsPKO8wpPOD7FWV2+0vOd73zn7SPHDVtmJiZt5eC4dHCqAGgCUtPINCaTKKpdDUXTY5ryUQKsimQVZZBMprikLHXCEKJRBijP0WuUYtYstCKbT/XWvVbQyEn6dYGMySRCJVSUHeVJsCLbHqkt+hMeLNscIkLAVTh6iF6nSAVnyuJPKOGMuDobBNJnU3LT0n1lTzgDbX5h1hdjNm/ZaP5URfg4gQ1bfHEF8y3/mjnWldfXVuOwzYHSH7Y7M933ghoaeO/U70NSGhicaQ791IRoG5kKwFanj1gf1vTE4TbcvtOxaMiu225XEm7UzH4AOoxX9JNxSagpL499F1DShC6S5xfF4ZK2QIAbzUEaVgOC8IJs8w2J4FVfb4+SMMGTTRvWKYwPcYbPZPT7tELFXbuk8sY4CgSBkxtUsxHchgOHg7cMH0WAECXk1XIMNLB/8id/Qp99i4bm6MSJQBhMIm48QbLN1cZUQiYBCTimb21oQQsIOMMQwAS5uroKVymJ4+QcKA0CHyIwIE2FEdjVdVWcCSAFxofi0lASmNAEBIKsiueQp6jK46FXWoGwSwHP0xOyxk/oubJZqetzB1a4lUzFDF7jbVzWuOaAdYd1ZESd3GsCTErilXuQiYb2Rus//OP/Bu+0DV2Z6CThuFz02yKDL/p33Hw7+1YuN6F+x8lT1AKvOCz5ke7pkFoVVTGKaG5u12qVr3Jeu+Yb3SbKjRIMBVO4liwqmrAFZ2zM5AQgtBN3tB6MLi2W4G4+FYM4aINRdkWBvFJLMWElVUAMTDSESKcSKUAwYib00MKenj5rFOgExNSfYioyYPM32IQ5qgNisYkMKLG4n3SBwge/2gIc1XhCqEIAkvMkeXBMhBLpItD+DzyBORUUTfLOnG9vdy9oCEQafBBOughXDBy/CDeKoEDQXrd+LXePbyzBrwIeOs8HwgrA1jY1hBOhIdOxYycMc23RFkGhxhoUFSRLGycRy4Fq3XhR7KUu7t3/ofsEBHoRqVNJCeCJZK1AAEWUQxOQxA1YIRnmSS+BZeoCMl4AH3CJxuAnpWF4UMVwbFTYJ1EwRHUXR8BxQ1gBYPEKS5lNUjh8xof4Zkr45AoMJLIDBw587nOfg4lihEvxIGl1guOAG9aJu/yiVHPAoisFndgroYVwcRiqHJwqSNi5fZsBEiGqpSEChZiKWnSPUk3QWEAgo9a6lWvTKzgI9+k8GaEuIsncXKeAa0JhASuZ4oBIwFvm5xefMdZEDNywDpfYDt7qlcHEMSTUVtQoljiDUe5Nq4BM0FoHULveps5blb7ebrUgSaCAIJPiQQl/VMFJEMAhFORoXZ4r3fujP/ojOPBWmDzQ30tMDrsjC1vSMcFKmNk+03vNba2HD7/te6WO/sQWEFzPPvusZDCS0gqA6NXLurcQAQ3REtvxEBrQpocGNtZ20AtP5ZEAH1RgCLYX5OVirxtCTFavpLfQ4ME1x0ygKuCgITTWIRmrVq6Jpb75eblSlnCdieBol9Ur2p3I/e//jz/xxeqG2qqTx04VF9EERwTFjJ3pbPPzZq9F6XyBf3Am+85XbBDgdXxpWFuzptRyfdinuqjEB8IKZ4X55nHq28vrWvJKa5cKS5wTulhUWtPY0tDSzpsbRdhdirf2h0X12Xnn2etfkMOLRGPZF8DiC+wxZxGIXM+4vxHgehLFbrqW/0w36ayhm4stF7ip0ju3icnv/P1z79i7K00OuRGbZ1f8834rADiZVgCuo/ezyAeQ7MkykrE+G0/TcChu0wDAaYq85bGjJ00QWo3BNLsqDAiF9FHkXRf/k57dDN8AIIZV8VUSEyoyzMWAVigAms+dmXz5wE8Hei6UFswO911sb6spzJsrLSxYmjccK+A6yCvSoLOdvrS3sbGBSsiUYNFcAQVWBoY+HMpOzUx5ogq1VIB/0Ie6T8V4SPcOe3VTVmGCJnpr0EzK+OXfPNG1wV8oz9ZMx/B1DHP7zh1UxTfFxCLcBVdJezLg4Q815BcO3irGoLRia7sb1bkjp+JCdevWzVC1LUXMIL1eRAGUMrYEuFm3Jr7nDYhwih2xfabkggywTN7FUSCNr1u7bjXIw8Mx9aMkxRb3QEn/wqcpA6XkTJIX4pDXrlgNE3VF87Yv8SegqX7kyCGt87EwlAtEanhiBaCusvrY8bdNCTB/fkMBXxODP6rRaJettgDRKKEISTXBmSMcRQIAT1RRktuEHjT0X3pVPgevLMV845t/bSrW7N/v//7vUydAdORKjk1MA3LlcvfHPvax/oGRf/Ev/gVrd65bdXlFX1+vYsSkmyEvZFK24ydOaYXoOHnIaIhwNVFeWa0wuaMLK1Jv6zmxIkF1JfFKAdzWIketolfJ76mFFeCTPhFgApVwgUAVUTE5Oo5vwMJZSdzAWxzwCx8XmIop7F63AhkzysnqpYep5QsG+n1lYjF/jjktkMiGDetbW9sMdThVKqQJUlPYQTrQc+NPTvXyxU4oqQs46kzGO08FOUJVSMKKEM3oeWIEpffRExEEGi0I6/JomkwwEZr74NLsnBuUgsYxojFan5m5cLETf3BVu6YYUQQUsaZQIbFXdwNJkJXn9nVn5jSNJzdvdjzRFWzU39FV/Z3PTStJXU2YFhcWUB51JTvJ/rByJqWcDlN1/YhaCJEoByVk+mgdDkMj6xAiqvacEEIBciNXxVRXxEhtK1THDc21t69kAkTMmiBvIDE7Z0FmGlt0W6mu6mASru4M0yAmkkvqvWHDJitUTgHq7Ykj1GkLsQpBbTWGDyrsUFIRyQQafzpEvjiWDlxQ9RCcJGst4qeSkskxgRQUZiPzkSUUS3ZK8sUwQZfq4ijPAfGn4yuQQASe6JNhgueeEJPyLvpJwUBQXkNYAQIlZKe5/8N//oii2KGyWXJ1bPtT1BG5GGQTMCRMnlN3hLHe0cEhumURhG6sXB0HCOCLtm/bcxeIPnus1oaNW1BSV9vES84tRL67cYkUIGNwG7etQxqaWjN0X1vry4sm4GfPnDntmwP9g/022izkxHANDWiDlUCEMPCF8DCFUHEZfM3R18b6et+igjZ8oEEhBMrIMS/ioa+mUTWg6LrvOmXib0n2jCnKIwpzcUTqC6pVIY8kMAW8yvdBy8x5URrso9nK0BQYqq5k1uIxMDUEt5VONMy22GOuAQxjSMLWBEVPnlFDNEnTfo1fHnzwAdZCz+gKXTdHK2uIAsHEACCTYEyr+0oi0R47cZTVCdc0TXAGUwYA8OR8Vdm6eQuT8grw8pJS2X5OxrBglxwQEkCAEqVPNCbFCh3KvnwJLDjeoh0+3qILgaCJ/MiR/Ysy2Z63HhL9lk2b3ZAOnuiWEiZEgzn0BO10BuHahR7Bbd2+TReFKI1qSNelCmYSJb4Ba4zuwknFCIUO4wPgNAEynlNF3QZ+ahdYTDATlpY1zHx89hc+Y+Gb+0YgPqML1S7I80doJybWbgocq7394J33wIRMIePMCjcuTciyojbWuFwaFdSySU/kwioAfjot1xMN6UBoJurgY4SGjRDmWLdvxcwyH6wgPi0mhYEV8hUGBLc5FPxBhece3rHnNuTguQCaFJRMWoEz2tUWdgGuMG3UKDuVXKT8L/7iL2qXczxz+iSr5KJV14N9/etff/jhB7U1PjIqBcjeG/5LrwlV41jR/+/93u/pdCm2wR7+oF3ql7daxHB5t34xUAHopbCDjuEe3AjOBROkJbosPacuHEXEBHmvqI2G/AkxfCZKb71C0fjEJNcvFPABSzLqunypramxuqrMcs+pY0dOHD8izaKsKH/WiYJmfnTyETj6L8i3QxeQLB0oekr3EZka09qLkE5MiMXRQl9xcE5oflFFUVnk/0zN5U3M5a7etD23pKqwvDavtNym4QKfXq4RzNTEkCE7Gsh5w7Zz6jnm46uxVk709FnGjLAUa7MjQuGQqdg7Qb8nGRrXf5b/fOcmWz1/58+fLX9z3XSPgHc/fL8n/7cHAO+Hz7uf/2MMALKllxjf4fRSnPWUb5V7ZvL1l/eP9V8uL54fvHqurqbYPD79Hh4c3bV9l+6NloqYKS1JiXisUbt3plAY8NIS58M7MWQBH6JooLdUkcphJhXNvibs38jPZgUsyyBEGSvSFBsE1iQS9ZYButx7S59pso2tPJ5xhfASGo4BBJ91uJYlBSs4cD6agK2KSnIpoh04eMjulrKPptkaR5md5WIMb7KRIXsLZ0eCO73E0fvOZmE4ugw26Iap6kfAN9lvfkThZGXaMhVilmTnzsgUhYwm9IBcbupG9ZIaApl34qU9tGQn/nHPzKtrqngnTeBba2sz+PjA/xiHuOFLkdbf1/P6qy/zgfaWmkQAkI37smlybpyGXa0qchF+MQ3HXnjhBd5Au5rDOqxW2PNUzNzz/v37zd/B071D/tZt2PLZz35exotW+CJA9ByqlJRHJu3gwIg+4kzHhX/zb/7N8FBwY1HEkZ2voMsz7Ynn+GzVRnaD5tiyWjAnoCRTjkEnRRNgAgcQksjc0xb0YlqKjvTdWKHfQY6HCiiJ+R66kIOTYMLQc9CwSDEDAMQCSy4YQk8gj6vcafKH4KiiIaBC0E4Zzj4Hi6k+WGAmTZIzwKnj07AeX0XLQQYz9siqZaSTfRzD1HWsewSLCgu7rsY2yMG+fr9J+nCDj8xqSVMkbnYvWQGU3OtuqCVUEUscoimgdCjr1m4QjxIHsMyJrtIfhPg+AxqVAdxXGZMpYYJYlfrp+tNbEBCFfGDd4B5KiQYy+KCjkYmj6wdQiwrrp3bv3K66AYn5eNGFraTkTmoSAun53EIsIAACE2Dly3nl4vhpCIoMGLAITDSG6GdjBlAne8eeuyyGQwAa8qUhjExDelEEwRlzmiOLTjPfrtlYnSNlc0okCywNEf8oozo14JGTiQ0Mj1zp6p2emR0flTAm5YmUIhsKeing1k3BjThAcKMhuQPQDoxv5Iy48dwvs8JArMAfnkG3iEVZRxdvowAzyC4lDSRCn2MnXPR3aPEGHLPtSZ/xh7hT4KdFNyAorK6SiEIa+Ll/87XfQRIeeWE8BHUTxq4KnWFNjePU3DdlhxVin5o2niDeqqLnPuIGIqmgUAcKGx41eFddB45PunhiiY0qcJdGQ9JyxIEmhf1iBVdiY4TI1qwq9glwNe1o/0td8Y1eafxsTYvoHBmR/JMnQKQxlCPRw8yI2TFYFEKjqvT6jmgWg4pHWZP422mslMBDNBI8prQ2R9KIe1WQQFpu6DR3iS76B75fwBkG99G2og0OimEWY0MLerlaHKQNfvlc0vJW4TC8y10vvfSKDBMOGmLmUHlVN7xqcC8byWG1G3SZnn/72Nu+1UddjM63bN7mBpwYXK1clfimGGaqi9UEzJBgCzd1kaZdWePiv5HRYW/Xr13HYCSKA+JQJIEpFu3YZUCxE5kaxQGgIAx5bFTFr4a4IdRRXzeaww2KqApf4xcOGuIIRLFuMJCZGQZAxuhLHIm94BiqAaI8FcQKzNEizUvKB4g/L3Re9FzAp4Au01wy3RO2QglbVKemcBATy5ZhnEbsGoqpi/zIaUkIK0zc+icNESKU1CKyH//4h+c6zkoq8Yqbg6exBC7BNhQ7QwB60PanV0LVoV7H88XmYMjr7AlaExDzATscEAjA2Ro3iWjLVN8Lz78IT+57xaqYPNAoQnhtjLXYARnkmOO3WKwJFmTdaefOXfAHh0krrzoVghWVUIYgQNYiHF58/vnNmzYYbFBgjhXCqV9BoJIUAJkade8VhiDQNwil/u/bt8/ADPJs3mHYGGiagJL74rF5lM985tPk+NKBF2ydtFKVl41gSYFTg5W2aAsboSqU37pEiu9NAYal14QN4olGeQBlDK1R4SHcgNUSqSHKjd8333wdtyGMLgWoljK4gS3AMgqYQwzymsYE3EORMY9ttk0NjcePHtmze4eNoFcuXnju2aeam+p9WWxqfKyluVFuqwHAmHXVtAHgxgx3loMWu4YgGT4u3Gm2qTcLnX1JbMZXpOIAAUklRXmFZXnFVYsFZUVltfYGlNc2ltY0ODjIJwgcelLf3FZT3xIZRIv5kbqSV+QDV0JQPZ+VTFQTNNha8RsbBoTvKej26kYov3yjfFT52efvtwJAuKn8Lb/v9/yWYunPnz8AUEZmN19kzpz4/MkB2EFxfa/DTagmaLdgfv3hP+QKgCbM/mQrGKJ/44CM5z7IsLSQOz/91svPjA1cqSyaH+g6W1dph8AILayrrk3TeHQpDQBYEyvgNSmYTAmU+pf2UvLoAqosYIbg8IHGekUzXRSS+fiTIasOiCeU05HTLEV1QtdP+QXEE/u1PNQladfZ4Vqh2+YCvXWYLSCaAC3ZLLrYV6Y213PJEm/ZSyR0Z9sQPZE+x3H5DoDCTnPXY3LQTuDRHIdD5ZTs7x0wAcSUmCo3qDkXz8wqH330Uf0Cr8KEmZ5OwZmeV7u7H3r4Qc5EN+Qtj5rQ4JOBxQH4M2r+hwO0RWRidOz5Z59Tne8SgjtdkYtm4MBKOs2qFAgHMQco3cH5s2eAskvQfIda/LZM5eSQ8UdKJB5qkSdBlOD+l770ZR5AR4NFmKYuZ8jTclOQ4YvIQgdHWPr6ffsespSnzzT48ba7p0tHIy5Rq6A4dkWPjU4YLTz3/Evf+973TDAS3FzkcMeF87yxtpyeqGTMCPgMaBbr27Sqacz33C9N4IIgmZ4o40ILxoKQnuNSigdIOXlg5BAHD+xPxdygVC10AQg+EvBtYmRMK27QCCAqlOQVoao8JEHGVa0gynNIEqvvV7h3ceM2kllyceZhc3MTMclNVk53Zz5E7CTVx2REYQSZseitXczXfVMnVCRWeOfShMvHdPV6VF13o12t0yUKgxajPhe/TViqJ4rMZwECR72SGSIydUA2Gk3r1dVVmyNRF4GYINHF7hET3MllYabCOAMrhHiIgXpeEoFkqiKOIiIrDBCmBuWlxbBSRYGH9j0Q+McHlyIFS3VwYGU7AE7KPVMMYh5qxb5f+kktRdpKKo/hadijReqtDzLl+NRTT2F7ZuyR3K9uTXWdoEJJdYG90nXJ8QE+n+csf7zCE/yRmY17moZzaVkFsSJZo1093a+9+saEZZHFJUdUiGDtACbiBNmwDQQGpRVPcAPhLgtQoV7ZCoCHKHWBrC3CTa0wIrWgqrz+xXK0CzS6oZiHqhhao1R5wGOtdGlJGbXQ4gbCngOrpFa8VYtyJs2EvAuqfnOf/sZ/x6j4FNqQBgDnL16g3O0r4nB6M/ShtdmH7rgDA6kH996v2okTxzVwuSvOMiM8HPHVWUpgcZIenzzVAd2S4grBcUNT7ECCk7dUyg2EIMpn4bgndJE+gQlXtNp74EMq0hUOHjn89qHDV3v7K8tKbKuyhXFwZL6htrCxpdnmPHPbjrmkUuZ4CBiqXKTMTmoEZrb9dMmglg+HHiTxgsNC6bWxUdgmo4UYZESfpiUwnW0nrnHrhIFfCliU8AsmhVOLADQHIBLoljIeAuuXrnjl1FCz0fL+/cmcnMpiHIJG8VmILbswR0VtCeLBf+XVl6ANghw7HYBgHZfMv5OiQxuTPTAhLCILhJAlCBAgfvpgiRBUiFVWVXAWSuoqYkFtdFQyFRYdO3FcRf7dQ4RoKGs64mYVKQfIYCKKGfCnvLNXLuRATItqeUt7lOSeTPzTEMXQ+Hv/7e8K+HAAKDL1SseDpTokhQFXyy8E/IYh5eexQH/StyeeeIJGsUCdByaDQFheudccJiDzySefxk9MUNKagBvuSecHK/BRl4qhmueygOkz23AQccJcSYpBxGCaPMMiTbuwjsohGY0njpwEBG5i9DvuvNM21uSODQBgK1ZGKc/mIjIYdnf1OPVPeS1CRlqeMZvOEkwJr37NF6lpN7EA2himq6uH3DEQMhSSliqPLjSqBQIm0z2QUffUU0821tYJy770pS9xuBRMQ6SMvUlwQKmrsD9xwKtvfuuvQJbEzztDmN46tkwtHoA4pABRP6kRbO3Qm285sGzNGp/bXuOVRonStMeTTz75+c9//pvf/KaZOabhl4bgiQES0RgA4Ju2xOge6i0IS2+tGA7gCSm48FOjaOnoOE0foIeNJOKG+LROr2gdDP2SiCqEgnwMudx5kSBKigt95cM6wM5tm998/bWOU8dOnzy1e+cWB3P293Tr/2wJt9Gqb2iYHzSBixWJA7Fd0Ukps/P+BTxdsvQxxzU/a34kVwTvE5LTMwtLorjymuKy6rGpuYW84qLy6qqGxqKKWttrlsz32yhQ11pd21xd2+BcUZuJfWTPvlRZLiCYLExZmNkYQOPxQdxIVb9xaS7dLt/c8mcglK0AvPs57t0A8zP/vt/znyl044+fPwAIrUgdUsH1MDRGzT+bAgTSz0E+3r7PAMCXgFnKu1OAso3U70HacivpZvlPSGZUxNaCRI5dE/k5cwVLc68d2D/ce76icGGk+2J7U03B0oxULcdxMgcOFgRxAAVj4P5MeUdiVspGVeiwG7w3LAgjzb4FSUXNIyisUdVdXrmYmCt5IWPKVJ2uxta7LK7ic0xd4YZXNF+aBD2n5AYAbMc+Tn+C6aKNftUVkXCYUGDUgCvsHhqF+blpColxffADdwe0nqtcgUEEU3JWURrVQJLL5IXWrFrL+2mXvQOStF0tZg6OPg5uwmhUhH8bHrDo5uQsbgEOf/3Xf61FMyPJ8yjDNvkW+R4CL3zTlTz1kycczudzhGYbAVeeqfb0XgWZn2PvLhTZc+SYCmU2bdjgSV1Dg77ADUNubm3hB1QE3HwnJyBy8IT327dvn08umBSDD2x9vUusjxvqOomER7JegSjeTA8CH2iI3q9cuUpR0Xj4yEHTWxQUafNG80VFvT0D+vpv/+33n376aR8F8YS7wAG8xXCYk5dRO0mNjl/zHBC0m5T0BBXpVzGFVVGdTyNBJT30REPQoNhUxXOy84tMFRWAeYoB/OkC0BMX6ZC1OSPcsAJAGVJFyqm6C2ORGbhlV7pRXYvmOFwlzqEsLnaQpVYc56/Kxg3r5bKBwOcUF8RmEmgUFuQNDwxqji9VEjC1kIAQLA04GbZuSB9iCly6clXPaAJO8ja3D0+9sMIKkIjw0YUbkE9gX339NaKUVg03LfrNK4iMXFEKyTqNWS3MYV8+qebtxFjQBQ21oBHPs9AuWRm0oeGtJry1fwPR1h+SvbAFTeCMQMVqmGjEEkeyUOVVJDsbQqYmZ0xhwFy7QJEe1uEw4Rr7wA29nnuCLjekoIsER1SwefMW6FE/T3RHBC1CsOcHY6FqXCGBlNU4/4qMcE9h4Tb4mg4dKC3HKFGKubCh0RHTKcL/iSlTsVJupvEXwMTn7EuFJBZr9amnAxDJ2oQSyO6V9DZdSZ2YCf6LxnXEChi35PmevTAxU1FBvxvUEY3tRnDGz2BpYezJ1LQqgMMZzFQLUf7UEJw16gYVHKbnqnhVIFrSDI5jnEESAazJWeJifD9PY5DWQIyUc3JwyoXL6uOsMiQEKNmQ7osvvybEbGhoEd9cuHjZJOjCfExXQ86vS08vnvCWgoIpYYuWY2vZaNibL8xOUKO5xZKycvptcyuUPvHRj3XZJHDokPQg2zpsYyCxvu6eyYn52/dU3793b1t7uyDGwA55w0OjqEK/MY/YxiFWMLSqADhO+V29ynGm631tkYaRqIeIFaIhSjRD4zGdTnNJRpPCL2UUWLVmFQLxAfC9e/dSd7P7jz/+OMzNZ3CdSCMPHMATN/LhDCTcgKMWJwia4BJi+KywG4wFTRU9F/jr1v0anyhehANrfOutg7w5LsGZ/folJ3w2/ZyXG5mFpEsExqnJ7E0hiUjIxddD8EF5uhgydkit3qim5sEHH9QWL6wVjpWY4OA59FgCpcGQmC7KLrhRHc1hhcKaA5POIcdDhZFgMKNYCiJ9C5YtiSOxAp74oxZd0hyUeE86zbwFjhCjbFaNfK4cb42yPv/5z9JIkb1X/Ccl959emqeyiOEVuzKUwg3RJ+sVd1I5iIFMvoiiVIolkwAcglo0XfSRj3wYdZD0EFdNJTz11E8NrmigKMETvawCyJEMMzMdIwEJrxggKU66IW3fsXsHtCenJ8orLE8No9qCFd7om681X0sGRvd6+vos/cHf9JvPXmqd9ghIfXvhk48+ev999/X2R9oM5HW0Pr4GJp7TNOxSC4ae6Be5M0309/fVVBj55IGTqIMJrODpYjWYiVgVyQX/qRbZ/fqv/zrRIE1DovOuK5cST0zwa0stAmWPK9vaDZ4taC97B1KjhzhMS4HFH1qnLolT4DTX5YY6gW8mktSKirYTn7kqbFTYW94J28kLnuYDGZ3CoBGrX84dcD06MtGYPDLOsyl12WAkrU5eqygplvA7MTa8VUropc5jbx8e6O92yDu56OSoK3awYbhVlpXP+gzUrPP+ww9GEpBcHbP0DgcSy+rUdSlexPR8eC28QqM0kqqK4qrygunZhbHx/sHeq5W1DbZPzC5MDs+MVNQ2OCwmJ77auGR3zmTjtYXZmaraBoehc9GzC3M+OpVfVCo7SMhPyTPIEQumdPv0t7aWb6Lhm/78ez5Ptf6hf29Gxj1+/UeGqlP+4ximWOaJK3Z2xNfZrH7nRJqcRwX5RZJryworSovjbAbypUi0zltWk7rb4uKYHzGD6G3oSSYOfsBUaeT2EOpsJLbpNbyKTm0y5qEAoeQq0m2XGzBpnStQyeYCGZSSQlC/9JmC6UGounuuyVuJdkpqlJ6r6JVO171XCTh79JxW61+KCvI4I26NMQp6GDjMQeYBGPjJ48cRrgnl7YbkWmen4xxqsTIy2RS3wNBYva5NFfbOJWqdCYskuBRU+KQCdyEB2myUL38naMhhm+5NtAPOeNW6cO68KX87pymFxXTeiYvDYfseIW/uWXN9ffER+p5eIX45Z+gIIOScPX8eE7AaNPMgWAFJ6OmVdRw6Be5Oj+M5bsilIka+3YypKF1HsHXr9u9//weWEyxT/Mqv/Bop8A8GXJqWfQdJW5BFRVw0NGxh8qQ4O8FJ0/ggQCf35qY2vZ5JY4SgDsML40tM1+caBOHujeBksi/mRHjnAgeE5Gw1CmFIkhHCoZoutdIrnHTDjatCQEqm6nwUWeNMdMrZJx0VAAQOLpJVWDRMRfEZNMXAd0+7QHC5wTpX0hmtcKeB2MioJ4111rhi17WSUjrkqbsxkUIlubqVK1fI0O3t6VZeRYdDqwJV+MBfLUShFHBu001CWygCDUf60BbdN7SJkpJgu45bMEAPYYi3kXiejaCQYDIXLcmxj4yOlVdUKo9GkyMzszHEDcKzHc8wSdVRqgBkAAeBxbEFQvRLQ3SsxtB2fEmEsx6nJQX6erqbGxvQSHNGhweRY4sEyzWILy8t0+WBAzhaMBMcDGEpViBEthCgbLZJhFtYmDWdR7vKuksoZ1t7S2tbszNQFZbAYnFatIxAM/dCKWzpH+jr6rrc2kKNIz01L/d6dJ4yYqw7GcY5+4sCHDz8tnhTW5XVZb6FO+XYMFtvzRhlB1rYxOQVkQNi5JWxZYb09VzWBi1oIVOBxC43qKAtCuAGolgiDpOgJwwtJ2b8Yn0HSx3Pg//hNAh3MnSYD3HpBckXWMUYghswQXaBrFimMHHKpUZpBarB9FDJ3D/4nY/zHW68sM2DC/MlCVZaU1sv6pqYsJuq8a4PfIDMCAz0HN9WjsFx7EQpKinE6IzO2TcPHsHlFSvWQKV/YNjgvrVlJYQcPKI8DYOouAdtVAG7qSA8mIe2SBRmbqDhs8lwg6syyAABX0DwimoKJsiPPThHxRDWc0MeOOAOUmmDwqdPn8FEUxqYZV+KX8h7bqG2tq5auEbkwhQsdrEBY1kIcKm8J1qonSbgg3HA2peM3WIjwDVn6zAnZTpETHPgwAGRPbbgZjIzSNZW1wu2VFeLUf27f/fvjCWSzETeQmdNQylhxYz7B6Uwherjhp7AMODw4SMogoygmTfELtYImm6PdFgIrJJ0YSha9YUEf5o21srC/Bw+69Yx0By72QDrfdZh06SsiJDTVwsO5mNwGCio8gUI14RXyEQOWSQSsI4U6AbaPdSQt/imPJbyfWySXBIQqAKY0rRMUKmCqy6I6d6IHnwnbamLIqBIH8nUJml8UjAIeKVdhT1pamrTLgxxzGgNOYYx5AW4Wub1QVOSI8NAob/5bxmrWlRALUjqCwHEENgCrjnSRLv+RnSav1iwauVqzXnlXEmkifjBr2+qxxCfuvMKCSDEmCG3YN3qdZwDZPCBmnEHmMNykt0G5LpaZgJnrDDcL6+s0TQyCY5igKOkAsRk7kqPbvDpXhMsgrrNTE4VFeZzcyjSNBege6M21NITv5qmBlj9k5/8BDc++rFH8dZznT21RF1VZZjqsWNvm+b55V/6JaKRHIcPZv5XrV1j1CnngIvXhKEsLiHEyAQyDhNUjCqqAhoeioqs6prtE0wYXWiar0jKCeekPCii/JivAJiGE4DjA67AXCrnP/2n/xQHFGPLgOOMwpRKu3YM9/Zcra2qdJStfGIzXOvWrP7RD75/tuP04sJsdUV5X68VxaKWxobQxmzfiAkUHgbaLjBBpgCyRbLtVtHx8/4iRlfEkRJ1so92aUtcp4edm11yhp6NSU4TLS6rmPPpRKfIF5fWNTXzeE4GWiptmsnxRUKTgVU1ja3VjW3FZVUKzwUso4q0CJCC5vjVjftFVzR5080tf75T4H32ACxHDKni8u/7PV8ucPPNz1kB4BKUvHkFIOsbpDAZ1QTfXO8geYOcdz9/vxUA3R9xv3sFwF6JkMn7X6nRG03DJ+ZrVVhIIXeeoZy+bS5nbvLNF5+91n+1pjR/or97VUtDae5CoTNBZ2MrZ/JI9JwV01uWK7WA0EmMhijgVxN2dNg7Eh8RzrbQ0J/kbTgQaX5+8URJus303FNUHX+qDiu7lgDXFvgiAD4k+Q1RBUtU0bCfUdgDQF0BDwRufNAQNDar02Wb/FJqQotGl4oxK29NToHPfTHDI4edInKt5+pVfYT+Thxjwg0m18Ym+AqIcQJMgOnpj5K1MkzVTQQopiEP+/p7RC31DXXcvioQ1gdBTJfEcQHLJFXhNGDFe8ic8+k9oSX+cCn6CzhwO/wqBNDCd13t7gKc6xYAaN2xK0o6oRlwz1HEJOCPS37NWXrOe+Cet40NzSdOnMIcbk3rYjWoPv/88yDooczFKMl74KTuG8Jyhp2vLsUUAvC0qxWvhH5Im5qNaEbeP8S+/md/gcD2tlU8vK+gYIu6IFuzC13KLgkq4XMKzInFBLwmFPAWEDrgHi0oIhfOGTc055XnnqAF7fjmT12DumgBxw1Reg6gHs1bzs1DOKqiJCCOgFFX0+mVkulPvlR5qGrFL0FoXRcgQNTByd3SRENdrT7OUT6ISMsvjgQFAMJDw3Ee3bWxcYce+DN4m52yqGlp7HDzxL1fwLllfbRIDHudhskzi3Cg/cu//MveUgb89KeH7uGPYbACBNr1jU2Uk57jQ09fpFITPf03AEAjXsHZPi4lkeO3pjJOGQFN66ooqRhQlAE3CDdpKUkhee/e+/R31ybGwPcnlYDg2MiwXxUDjYlYnUN+TORlR05XVtWCBhT9Rwj8TT/RH4RlHWgJUHKqBZyhnNm8vha9wnDCgvD01KyOD3zKbD+2GyQrSehKTk7EKVuA0A3HSnguatdcaVm5gOHVV1+Hj1UpRgGlvv6h8SknTqM1LN08hd/YHSYWz4+xpWkAEochOOanjMFIRDIaZYA5jmnFKw+1SIIa8gqT04ocbNet3gA4IMqk9WcIZDhcd2txn6a8bmSFeEIQ4LMCFzQQ6PIccH9mKMVkricFPALQWINB+ki/00OxUX3N2vW/+Zu/aQAg6hK4cHDwE6+0NjaRqDUAGu+MFIy24EiBvE1iFra2ta/SvJVbPJVKwSVRGq1SAhp24MBzmkvLlIJvDsIEg4GNkTaNbagvdHiRaMmHLdBv2Z6WYwEk777zLv+JLGnz4YOHzLPuui0CI7yDtsJI4kc4FmxFNUcJRxg6ZsS3Wujl6NgwP5uGjDDRCh1SXQhFuuYY2Jt76QqeYwKYR48fFb35k3bilYeQJ2DAZbCB8Mwzz2C3jBdMQLW9DEpiFDwtaMLEKwUYoQhJWgVGoV0BGmwQ7/sRSFCX7OFPNdetW28YYN2TZyA2ApPalDQAhzGHRyIprxhYeX6lFAgVzZFgAh3Ec/MHBA/53v5+9FpVhK23pMDnuufZRYd4BRPe3yscphzJFcLEn2hBdWpFQ94SATRQRHGpThK61mkwmNoVp2qXdKRUAUtPNEEfMJDHh6R5oN7+HoIAH11EDz2vyELTGKsJtVxgaprsJJUxNhgqDz6FSQqA84TrKycKQ0ZdLX7QIvpdd5joIiYjHNRpiLC04hf3AOGDrN+5MRx1GM6kSajJSKKFgEOUAJE2ANorP36FYtTW15CmqS+EU1HTb0LVmFg05WzvRHHMu8MTMr68iNtUiK/hemDFE8vIutrTYT7HEz2xsB1dHDfmuw688MIPf/QjWOGDdXlnRmjx3JkO32nBRlLAUgNpVNMfsqAwGjUyxCU6gxDY0lWeiGUZ55AvQsrWr8VwLIV5ZghzCovvHcgIIKWybgY94oM5xhpICP15eWIFGTM1zQmGF8s+ffCdb39bu/v27duRDZwEJYP9/fpdsZLBPfydSnD+yhUPN6xblxQDtij+2te+9vu///vgAIvhUfLGhgF/KqlFn5r3bTVz+s5Wc2idns8QzpPZuVjW5PyVgbPORTc6PzddUuzTvI49kGFY7Ex0JCggKSiLb9XIvLGYNjL1pZtJ+ZjJLcoHyPqYSTBb7CprKqRyXu3uzVuMaYVyJxnOXZsaWnSyfH55Y2lJzdxSPj85OTE1YXg9M1vT0C5rKM9sIhcfU+aR9q+ieenk66PVv1/0/J7FgPIcNwLKP9gVCGdNpOa0s3yT2lz+c/nm5z//B8MUL9K+bsOS7L8Ynxguit+D/f5jDoQ+szC/kJ/Dg0hQof8eMkNYMXnqaqoxMIw94XF5QpkL8p2eIarLlohiUj8Si5UKPazJki0Xo3cEIZQqGzPwop5wgEwmwrlsQ6cqzAdASg64MvSZk2E4Krr367kbWCnMypRnFAxQLU5YE+nP5sZ6Y2Y+U/y9ZVMcb8L5J5ciOAT/ttt2MXkECgv4pdMnz4AALAjM3yyYBVK+i1fRs3A+8NSit5zAwGCfM0E7zp/7xre+KbzevG3rsZMnYKUzYr8W5x0LBtrAcMxhl1aUd5w40dW5UJSXa60VPlzojp3bgDWTBfMzZ+JM8IbaOu2KkeDQ39MrTxYhCOSFGDhnvnHzJn2HVnCjbUU7DmMg8sVb3LVPf9522x7brrjxJ554Mvn8z3zmc5wVb080cjwwwTyM4RbGCtlxUhcA+NFjRzB5RWurELmhuQ2EttaVWsQcCGg0CQ43rk1MUWPtusoqYksGfDwR/+OPG32Qy0Pkw01FDxGS4TDvzyQ1jstzkOFJpqCRAi+NNIVTea90jriB0uTi1AJBYVWu9F8hRO5Uu8lZJQ3BSQVUgZtaHiYhguncvqqKKG+iGm6aEy7CR9NnhgayhWgHLi/qeQ0GCnJyt2/dsmbd+tTz8v/KE5A5adN8wAIIW6FLcWk5JuuaVTNoFANQA/TqK0UmgEMG2sSNLVAyM6W8UZSehURo/ti1WMhiPTMT8UlprLs2OeVLjmhPJuatkhpNXEW4+6wTjw2+OOlPhGhRATEumG3NLStWBp70zUmmso/TZyhKi+OsKpLF3kXJD0tLYglKOzo2oZNV0aX/4Qm0CFvTjiDr6VSx911fCSudoB01Tq1FGvaK//0nL7ihsc4rZLa0NOObWlqHvGJBSHZQJGwdAQGyhkDev38/3l7t7Qvh5hYwrmHfs/JZhvySHBP0qonJMqfqS9rCdSqhFoAJAtEbWtiB7Yn9u4Sb3EXSpYQeJScFr3gA5ECA1Hqv9gfk7NwCX6tEFF6B5iMF+OPGq7TtLW6yQEiZdCnpifukeAq4iNgT3MA3tOd+7w//K/Jg3lCxPZfMJDKidN8DD91+x55jbx87ePiQGI71JqSF4+IMnyo3SrN7w8EpdNQrWFkLee65A4aVMnnsG5YqDQNb2jUPV/BV0TDrFboxP2/FTxjKIYLAEoz4DfmhwZvAhOxJhUTphEbhDYhozMjDl0GkPN2253a6jh+KAYjXCnC/Iiq+g+TISbRn+z4XRuFwz5ZZjEY5tbbEoSGqwFQgSUfFlxLj6BloSX4zzHF2VrG//Mu/hCRWiN0tuZIfdJ977jlwYEiHcNa6xPjoOLpgojqsEOterAkIrnL0SuIGVoCjoYamRnOL5lUcQbh2VXwTVwoTUE1NLTBHCNEIr0nuUucVo2XuHiF4fh09rjY7PoVFTflm9WSkY5kr4l9UgWGPUWp2zEJSDtqLWEaOM3AzZ+Ze8Acf1OEYjcUc3ZYlB4NGiae6TrGvHpB7FIpFKDVvPmM6bewWBLsIEcBnn30WZxDFKeMPtgAFMQyh2cj30W+ImdP62McetfBg5hw7aZ97S+q8rjVYKSUW2kx46CSY6ESkVoXfwbTwaBKEcnJ9sQtYFNFArXhFdtSDB7Fb9EMf+iBtobF4TtZIQxd1Ugwm2EIJk81TjI898rG62gYF8DzOD4Ucyy+JD09Sv5GxYXG2xXdE8Yam34oLimWEmKeBGxHgsHaF/g7sG4uVgFjZ5PLoIRycCmoWYWJ6Cje8CuMvLIQSJrjHJcCRoCf7jd/4DTF6kHptjLajF5508p/9s3/2z//5P09VxAEMh7AI1IyXWv/kn/wTC5T4cPpUh0obN2w2Z9/X08tFkiyAZrcyKUzu3bsXBzy3uR9k6g0mhnjrGzpOEAIcx+CpaXSRqVeWNGemJr/x7/+9h7/yK7+CRTDEFqxACPSUARYtzz//PKo/+elP+1wbW6OxxvkiG30PX8x8QFYeHIWxDhyt6yf1OSY+DQCc6C7Af/3VF6eujXtSWmJvsYOc583D0A0VoWTMz8kWcbHE5LvocjmyETLIdtyFJ4x9VyZLYr4gdpAZxy5MO1yDymqXsCyjTU9M+ZigFEfbt8zom02ywVegb14nt6RyKq++YcW6huaVNl8NX5ublRhUXucjYhu37lzMLbbPQErxgnG2DQdZ4C7MMCDRNKbFjmBt8tM3rlQmDRjSs8hTuin4TgU8oUU3Kv3Mv4T7M3//3D9+zgrAP/QxoO+9AqDrwp2/9wqAFZbY8ZsNseI2vudmvBcrAEW5c68e2D/SfamyYGm0+/LK5lqRu2+ELeXNX+3poR6Ea+aPAqR4jo1gqWicyeMZpaAAlGJyIlaf+DGhgFcMXyhDtdzQIlmp4PAblNkT3tg3ayiwoIGeawUoTbgxGKDG9FD5I4ePghBBXnl8IZh7SMUAdDEBblzTjMU9QwNcyOXV6tUr169d23O1m+s1znfU5pnTpx2MyDOI/u++805DZi5UPIsbLELEZr8B6+O+OEMxvUaZLTfCvkDWPcl80P/qKa529TS3NF7tufr4T58QzAkpECIP0FSXHgSeVAv+ydJN8F25dFk+Un9P1/zsNGR0T4wUdXpYscKbb75h9sr93n0P4CQDRxEf4gBEHQdoNBldIOvRzFLxEny+E/Gwi3PAK32rBXknJ8qHfPmlV/krwJUHRBiA5yj1G/Y4P8/hcqT4rPdJ81n1DbViVqsGfBfXYeu68cOD+x5yNuGPfvyElXprm8ghd0Dc+KiLU/NNDSCQ7HAbfAfUkr6L6JEPN78KkBfkCQgVOkQoaUUVJT3JasQGYoSrQprKI1mnk7QLdbROAe3CWBW9ZBYQ5hTnxZSWV/y/rhkoQBRTMelPiqSxS+vKsBf4UDwpJ7RFsuXc7Iy2rly5pK7OydCLrGvrTBNVOehPJ6pFWawyr2ScNzY3Gu7AW9qRVkwzdXZeXLlyFYo4PZwZH4njI/mv7/3ge/d+4N4Ll3RzUzjsV2RlotUSvX6fW3X8BgSSelA5oreBGJ6WtTEScGRCzMlXY8NjDvDNXGAOHFwQ44tEvMaWc9MzIlRH4TneVLgvQa7j1Gm/t+/ajQn23VIMtOgrK8vjKGGqhbGD/b2a0I1iRWtzizOpCgsiUeLtY0cfe+wn5knVgjbGwgF6NTVxnCseqoIhXIEdlbz18eNHzZGJXuhwIsfn/3CSBRGH3uzMubMGBJJjHSOhV5UvUk1dqmNxTxeDXnHXxUvxSe+YwWtogBv+wNNUk+/WV1TVGQaQpXkDUwTlsb5kEm2xsrwCtuZ16KoLz+kFigTM9nqil6/QnYlnBJjCifHRMYG3aKpe+lNevrVE33SibFa8TXrQUjinTcBA+VOeDu5pIrk1iwA+mxtyjZlcDc7SL12HStl4wVqTiWNlpYdQXstZLHTSOZy5r//d19g57uAIaqGojzQRzvxkp2jbqV6WjcBVbM3aVfW1ksIHfLsXGKhI8qNkPmBh2wRjpjTO8FHSjDttcwqNfH8sgyi1IC1uiz0ICNBAYBlzIgpxz39t3Lzlanc/CbExFsiogt3O9c5ieg4FHMHo5s1bZW/qGuiitKWm5jjZk6IAAqw5QZJOlqZR8Z+ZAz4IgYJ7HxxVjOuhJd4qZp7ehAePLMQx/Y8JiPWcR9Cc1QXqDjfmKoTlBHlbzhH3zb5o1HN8xS5vsVtKneG7KhQIkBgjVVaqrkXNYRqKDDm48szZlW7YsoX6rfRJMpsma2o0jWoYAquAY7zgic/8mu8FC3AHh/qAxUbT2wZOGKWA5jKHdX3OKXmiJCDjTTt4LCsnH2SQYLIYSoIkTdhMI6Z0cou2du3auX79pqrqegmyVEcAlfV0mVqX+7a5r970XL585dSpk7WxUTXPoY7KjI+NiHSBMhBCcnKmtAhWDIxe4SHgXnGsaJdtYiVroH/I3NLdd90DAWm5Jt3ps722UnKFsBDwRQ9xubiwub4BvZBUl51v9lFuvdHBg1iE+VeudhG9OFhD5CXAPfr2Ye2SCIeF4RQMPzFKVIpXimGmh+oqTOhUUe+o4zTB4K1ZvvXr1p3uOAWIbokyGAmA7KK3gBQVFDs6IDETh2kagCNjsWDFtqkoCboMrmBI97Zv3xp2lA3GlMQoVVwUFeZgUgxNAAgamY6NxKEHXDy/9qMf/QgOpgHICzRAkACIe4NDMT0q4L9iRdvLL796//33yak1P+SSeEM5Ua05RFE/F41FOAGRBeBY5N6YTRPekg4zVMY9CFinIrm88tKLly53fuELXyBQCHgOAbwlbiS4NME5UumHHnqIj25saiMsb8VS7a1tCLEwDmE8AVwPjHarXpxGTNLML4wOjEyOjdbWVC7MOfF/4KUXn5u+NlaQvzQ7pS+MeXHKo3sz5tSjOPHdl0c9pRLCxFDQrNMF3CAh4y5fGl07frqgHH8br11fii2RRiTphdvFbYrHjZKC2NvHd1B3bWahsLplPk8vVlpeVV9R05BfUjmzWHBtLreovL66sb2uZVVRRd30Qu60RnifwmKIKU2NjYtz5mfzcmI9FslOw9CEuE3OTPz6RLG/XVlIoS1XeuAXwsv3t9yg9JYnP+dPRWMAcgNw6pKvx9+LMYjKZg2tgiiWFgQWdULGBmAmfG7GKjV0y/Mbn6CMwOg6JlmKsP1w9PbkiTMEIVPGb0F+7P73Ya/3RPid6re8zqa7sjFAzMIGAOlaS3PlRTmvHni6r/NsddHSzHhvS2359PhwvnNAs6201JKOUeDMvphU5CHwQvpKJkztdWq0nZ5MTtlYKYKMuUMmEKaYLb3SEM0pzMm4YSD8hvKshA6bmQKZm8XDm70cyIzFK6BISsZLGEjWtXmoRQYOPvsNHGJ3VmwVYLPshcV99JFHBvsHnH8lb21sTHr0NckHxikcpzmjFWYcsj0GQpOLly+NDo1qYuWK1foOiN1///26Y9ES/dYdiAvdaIJYfOTn9ddfu3Tpcm5BHg0398URaQ5bRBvwUUznL4ixwM5adVLcnXkHK+QP7r1XvoPCuIdeDfl0miwARMl3NeRAo6kH7EULn0yOqcMyhHAyksiBI8VtvSF8TOiQoKiAQ8BSVIu5jFja2to//OGHkaPvEB1yNcSnY6WVJvU2bdjIQskiyLEbQQpHU+O3v/3X3N3HPv4RnIy06zi7/YzzBg8dOvLqK286tpnKZbpXjPPBCuftlFc59oBEIElAKNW0ip4sX5omX2+xGr2eK6wJ+pD6LA8hjyF8b1Y9Tg5MEYuSRIxdqrMilGoXUR7KPjdPDJPFmUhj9hw5YIKv6/Snh6Eb5TF3BgfMwVLaZf6LY8QWYz9oWNkU/LAsWfIw4dJNaXObfBhp8mAU5tjRE1XVFcxM7zI0OrR5w0aujTrpjKB91113GKz6FIzW5a8+/eQzdEE/++rrr5QWl5nhKihGQolvJG/fsRXOI+N2o9UixzQcfJAGQ6Cs3vv1xIA0OLwQM9yYOTo+4mhan+8QprMdx26ZxYKzyLC3u8cwbM2q1aaru7uuCvEtiRue+mjxmnVry0piSQQ0k2vOFYL/+bNnxTnIJyn6r1/Gc/aFfFkbgnh+1SDQBDmF1y1iOG5Dj6QoIf7Ah1A81GnoIrB665YtqfeBc3VNLSaL8lGR45PjuXYSj8GnubHJx1KvGotcuSyLZ+vWbYrde++9Oqlvf/vbX/ziF3/42I9x29FAhOgV8akLSF5BoaCctrt0AcJv5/ToW5gzdVIgKQMpUAn3nrStaLUO4EhuE75OqjAQMlgy0rAq7bnZEmlD7m1xciRGqPRU7IFJRGGXGyaJ8xjFq6Qm/KKCaeuRPNc6KmhIZCSByMCMKosjg87UgHDaJIhtD1LiCTH37Sf+LbmiCpcBQqetxhqg5S+//HJHx9mvfOUrx46d8Kf2TIUaUNJdH6ISBEhuwfE33jxoduHEqZP0lepQ657+PkKqrKjesGmjMQffwYRwjZzcAJWCM55Ii557yDXwZZaT1q3fXFvfaKRYUV3VVN8QZjkTYb2ui/GIgPERC2gAnvI4IzHj7gsG1TAhMJK4++67qAJqPaE9fJ8jd+Em1UHT69bGZhfFtEsnsrdN5PqHf/iHyAEHN3AZ0xXQhIgBTwDULtJgQp9ghTl+abzBgFqYAwjt7Lpyef3aNZmhrlFGYXqsFcigV0lAQNMKqvmxoydPmM+WwPbBe+9pbmqZnpkqKihatWqlbybIixocdKTXgC3+jh+kbr19PUK18xdiCQV6xriiN1Epm2HkmaLETLlGNUeIKmXTJXNpACDoNwDQtNNydBi8D4nobOzGQalB85nT55yM2NLs5M011i216zOIQizDYtlyVpiNmc+dO+vXlxw4AQtBTt0hCyzSuqiXHLHikUceAZnjTu4VqgThCcE1NDZz9E5to6nURsiraTNeaRTBseISzN0oLMSwfbOlKXL6yc4uW7pHOhho2UXFjkBmnIqm59iyoj3iVyst4nt8wG1S9mTfvn06J8V0nwyJTXqlC+w4d0ZDxnX+ND5UQPesq6MhSlI5JVkHWWvIpBo3hNu6IiTTXsgoqRiEzbJACXXg6/8gqUBn5wWdgVdED7gCFElhVcBJhqZ8wo2tHj78tha9xU8bSD73uc+Zj1CMeQJC/XRC9FxPnKgTUZI1p2btBee1LgNKGcMDzdFJzVE/ACEDB79oIRck6HUooQ7bczjggEGyX4sMGMhMzCN+49//2b0f+iD0qDT5ohfaoCmPe1AVDTzzzDPWviDpW1oN9S0HDx+ZnpwwSbNmNTU2to90IDfUwBSgdt07DS30f0Km2sTc1HRR3lJZacF3/uabuTmzS/MzcjgpPEdHNMBG1r7x8EJMk5tdQQKeu7AoFcAWD6Hk0opiarnCkAvjUA7VPVRYFZfCyMQED6mWKlBSvqKmXvQ/az+xVd3iMtsAHBOUX1q9VFi+UFCRU1xVWNFQXtdWXttcUFo5n1PoLBKn3wi47S2Yn5vy9VrbUoviTAaLGbxofK4MDukTjukg0f/PBwDINwBIl9kSp4rAE5LpyfLNLX8uP08DgOhXsitR5zYNAE6d7BBbGwDIwDQA0BEBntYlUvnl32WAy0/ixoRTnNGpWqBoFkJn5vS7nKXZkvylN195pv/SufLCuamhrub6spzZyVLuuTjLr82Jo7FYKKMjf/qgJ2IglIae8OGe6A4RPjToeJPIBiF3JsxG6IZajIgfU9gNxfCQbrPW+vpmhWmIC+uojTKAecgK3GiXf6BI1IwSeOsEMG/VBVwEwypBU5I/ZLnUnjmA43IUvC2PAqjGuvqNmyJ9bnR0sKG+XvCDFoZm9pSRmgimn5cuXWHjjrrmClg3JMUcNkEpqQknXUNDOiNXgJwAnn244+Of/LjomV3zSCbvYrG31hp7vwkL8w4vvfCi5w3Z3i2GKcWyorTASq/EG8SCA2Ln5ctgfumXf1lHZj2Zr5ZHzJmL+HFg4lrMjCT3uGfPnWqJSvkTxx/DM82Vzs7M8ScQRoWIUIfF7eNMR8cZronBKIlFEKiurUoWHdwrCZflJEBbk00zP/nkE3KSt27bbAMP/JH8xhtvmfM0DDh29FRRYSnFE8YNjUQON9YRLimQpg6R7DRNQCTiOYSx2kO/3sLZDQQ0TXxuyJTHQ53yCiMWK/5P3v4EytPrLAy8a9/3fel937VY+96WvNuyHYPBQCAJkJD4MMmXcybfQHLOYDhkTjgnJ2QmTEggIQkGbMBgy5YsqbXvLXVLve/d1Ut1V1d1dXXte3XN77lXXQjJ8pDA5LX877fue+9zn/0+d+dUATl9+oxE6En3kgoanojpa7+UNtQjQvGQuNCw1L4bdwlFQ/FuS8HUaAuYMlwbvprbCzgn9KzwbMcTGdRVVl6KJ4JpOuB6LHkwFsLmzkVQ/DO+WX9gDPTOO283/Co6gqSpFTpGDvTZWgCgNIugaYY6W7stbzl/Lu6pNQ+DFbpzBpnx2TpsHp64XfoLt6KSYgGlDDRHhIMVaocG20G78BGBad7egUXlMIEYIFaZutbiwP5DGneRiarRSD9JQfsug0Ry13AojoE4Vp2UR2MtM6LoGOsQRSgoBds9CrJW0lFKvx3wHPNQXdwAEHCMUsSDjcCSAvsNExh0PP+QFLziGEiW2ge9TbFS147TxKuYuoGVPX1tHU7X7VPWWDDIlFYY8MQTTxgiDOtKQ8wUJqsWuvRqvC/V6wVwD3bBOeuPimClav7Q8GthScxm4630nAcEaKgLqqjGbfgrq1RZQTgZL2j3Gz4yVSfyZHQk6xcnMQejlK1rjPkNiHnklxkcj2yYIBHHUJFZRNCFT/7nf64kZ0i64SM4vLZOmLF5CJkEw1zSFcsyWvIDQbSkZwE6OuW3aMeM4fefehK/HDJI1Sw6fOaZZ6yqdCIYCJu2bMEOZMigLkgrC2nqiRFIzek6AFT52PGT7ujWG+PZnXFLt2AvA05RcWTAzUGlxikpFo0RrQrAiMSfuEN1RK7qcsqQB9M5C02enAJfdb36ym7ZiBMvfAUZFb6iFz7gkzcewRCPIKmXnqcFsFJO+MMZo7wIK2EFGp8oH5iBZ2WFgVuCBJOQdAl0ne2JBFN+8LMtwQR8z+CwWLD08OGjFvE7/fJzn/uMYU63eGzZvM3gulOMLIZR8+BAf/Yj9jaKaVQqTt39xluYSTq49GM/9hWM4qxgkk2Fvho6FbBmJUCsvRazczM06a23dlsiYtiAQF1FTKbI8Th7ZnzCmFC/+Zy29pbNm7amEyF0GyZMy2g+NaimYm3NdAfkW2/uPXzkoIaEwsHn7rvvRg4tUu/OnTtVSsUx35+I9eBVMGFkDJck4jCRiSnxStW8DKuGOWj0kkCpqfMNHERvwAPnsV0HN9flT9ZAggcPH2K3P/7jP04rJNK9IauAOjowmcHL7NHomuFRHHraP5rDy1A2lYa4z58nJujlHbpGIzBTb0HxrD+kpjkBHwOhREUxEJ4IhD8IvnKdUqCNtFyRfExajYbkYQiaDJyUgQ3yAipTBL2st+hVnVJvv70vzy+BbIe6pUGUGQRVUGB2xH9hLDiKgK/jjxAOVCkwcfh3fud3jI4wFhnIBT6QV5HMdEMeITvmo5ohA0sHVIGZ7D1nUIpeyf/c8890tLV+7tHPYqyC0ACNYoMGPe6VeuOtFMrvTwNT9q5YYc9ykWkUXEVCQGWdLItqNArqcYaszRtcHbjqdhMXv1r/486vPbtfmZ0aaWqsG7pymR1pNal0UFEYcGz7w/mZceOC73YAfAUZth4SzC9wkxnyHi98Q0737vEOYMBMRRQH06NUMME8dknFgrjTERCGT4srSqrqrf8prWoorGiYul4863iY+tbG9uX1LR3lFXXXC8vcIVBgYN0mBGSao3DURzqt2RKhVG+YRmwdvvFoK7xSHs+NtPhX7e/9c+n9w9KXMrz3JfV7BNHvpr13BsAMBQ1EEtrf1wGIHkp63ofS0p9LL3K9240x47+E/40ZAPrz/10HoLRgft9bLw1dPFteODUxeKGztabk+mxtTRzN5OHoaBdDoP8s1LsjrVmTCXTmbOaDlfmkVdVPE6thAhfhl9ylU35Owy8NkZMuUWmqLo/jKqgHf+VXfgbiV43IT3VNZlfmz1DFohibMOCVG81AIO2y9fLqq6/yD75SS5bCOvgERlHtYPOaqhXdy+obaiAgiHLenUXmvqpx/ZrYc3/8+AnABbjKXjgfB9xdHYpbUNi1UzHWrVsDbQ00TPgDLkiDFWikgzTaOuNQICYP2660c5f3YLzf/rM/B9O5n9yXa0o4FtmMlDkgq9pBIzU1PIAYETfWbdjAt1jTK7iEglB+0+atIPAepo5vuXnHF7/4RU2GFp/b510dqogQY6scvibIBPv5cxfUZUcBV1NRFfumKJI2VLsZ/ra1BcMxCpcGBmOEHn9gZdLD1MTu13b/4i/+otGEvXvf4rTFQlOzc/DBn+PHT05Nz507e8GhIwbidcQMcxp+VZbQiQmSsiGcvFCnFiKAlT/xKrEr9v5CRh45pZAv2Yn/sBFPMJxk/ZoDESH4KvKhFYD49QlYPPcrLCev7GwNrHKY+G8MtKxQ+xgLM3zCBIlaW/n50oBTHesRBP0QFmrD2QA/lDQ68OnuiolZImBZzsiHPPujD5aE0R/VaQvyOL3FloaEjOuhhcdTFlYqRRFNEGDAHEw31Drh4uSJ04SLZJQGZwy6pA1+GzdvIj6Ee1TvCFpfIZAbbjChChNUuJdAq23Y0ycUqRR87/B3TwXIcsqGCYpjo6+QV4T/R47uh1KaAAWFMhovGQx1qffpp59mvBRYW6m9QywcMrdl9s57EatmS2KWl0TQCFd1WhbFsRcmGO7RAYBMY3PomJx4MjYR3XU5VWf3GP6wCKIU+PX0nDUzIAzTwZZHiCW/kBI0ROGSBxoEB2G/0k3+ZwTklxkooiRBiTDEBHlUDQf8Nzvg9Lx0il1sxl164C9/NgHtsuIqAic4OWy6Mpp4ShjsSoGHF5xBnVIwVxAo2QKfsdh/75FTKfX6BT8/gHgUQXveU1H4+rd+g1ANpWMrg4SrqYFsmaRl7IGdZ+jkoUxtbQ1B2qhKkNbQQ2LFytXEzPfpy9522x1ottjLivm+S/2hYTxjaanYGjsggTyEcSXQUkqlyVnbZ/nuuhcIHz16/LnnnkMPZFxHoFT+Knpj27fdcTuEkQp+ctMxxIsd3i32goMgEFZiVnzMWiKS8I5r0JiZXmA26pVfCqXBqSyk7BmR6asqICad3P3J9cCcG4IzHPBdQTpNjTx4KvD1As/ly7q5ZnEt7hEMHcUlmFNZQDCWouCAr4QEfnVtFQlLlHnvW29ZlCL9rjvuzLyCAw2GJ04yTlO0WlucJ0I0CsdVyrkzoXPnLjCbu+++V134hicAwnB2ZoEFQpgbkX7xUi9XtWvXLoM9yhqrSDcSMg+Ri6C26OrQqFlv+gdVDy03HA4yDMmdPmVLhrn8qnhr95vshH8UdOIMrgJLT7CLo89AslUoqLgBPqDgL9ELbmMRaMyPV5JfZ9JUTOK8bX7zp48fMxSBJ1oFy+YgRjEUN+yG7RbnEcQnPvGJLBTs0poqi17ZwEeyPzGQvilLTHhFFuJjn2JcanSUzpAsj8MxyZCrIGjzGNQG1YCjlBogwaS2FDSqlxp7xyJlQUAREvg1OWELjmzmXlk+BNgFHwoxnPEQHxHLJjMGkqkYGia6eaAp8uKLL3rRrcJnWGnztBmCZlOT2Ei+ICCBWJWieKSMLeIAzbbNzf6k/EmmwWpIYg6wEnHAn4pAHh/k9AkC4JM1VAlFB0M/9tjxI1/+kS9VVcdgOZWm2GqUwaOUFM6B4Myc4AyGV1VWHzpy9I477zYdrD0zOkhpSQBA6oJSmBAx3tK14eGRwYErZYXF/KWzgJ575sn62oo+mxDnpxzll6LU6DkY43W9DNIMZ4T3otBpbS7hpq+lWcQo9afHi0/4g/+Rf2GWAsjjE7QjJU0RyIMEiWgHHP5SRscmZlJAX1hcHteB2WJXVL5YWrWoH9DSsVBUMV9sKqCyuLLWXQHNbd11TW1zRZWWzXIhwOqUqkJIChT7ADYfsJOD/uCa0D+57PiUugF+qUR8+JDnh399X6Ef0gEwJ4EzzqYIFr1nCVCeAQAno/Telwz8felLHYClnHl+w2w2JdEBSMswqvyaAYiDUz9kBiADf//vh88AlBUu7N/z8lIHoKuttniBvvFVMU5sjJkC8yQ4r2qqyNxDyeviXE5REEukNpWVFXW1yoTvoh45PztiFMxBS49Y+Y3+UlHGwu1YKMr2VZE1Cnx/eshFhuyKVSQDWnS9FKF24FN1D1Nl3YJdmdkCT6IKQGgLBPRo3Uvj7j9L82dmI2Zat26VHaNiY9A4h0P7D8h58OAhyD/66Bdefvnl++59gFtoaKxTte43aEIKsSkcAL/99tukcx0aeO5LfMl+tDXIR6wF3X7hI79RFa2hm1YRYtwYvZySgHn4mqGhyzYFshoVaXcMO6tFxAfhE6dO8/NV1bWs2IiJ/X7O8H399VetKkEdqnHJmUjc1BNPPAkfF3Fyth3tndkJx9eGuDBBE4wuCHisdoAtrCJPUUyww5avcB2QQdL6aif0Nr355pu2ViLN2M3psz24cfDAIeFUVaVYeVSALaejMjC2c1l35jCH70Ed+RIKsSrlCTtNa4RwWE58y5JVL1fgT1VoQzlDZaEBiF/0yi/d1ahKeTI0ibESJOKEONlCLRTJ/BhoUXV5VWlBhBDeCRcoaqAexWUwv4o0umcNJ2gaIyIQrFMbhPi0Yf06msx5wr+8NA6ItEdWWROUSkv3cI/K7ty501CR49rQ4hh7jn3Tpo0JtwhA4aZhwvP+/itWhmOv+/aqaqs6rHzvaneThp0GJKhjbPXO1MykvRNaaWc7t7Q1X5+31NEiwcKZuekD+w7uefsttW/YtNFpitaym+McnxxzuIKwxHSuNhF65A55fGYm2TRQjYGwlejR6NiFTDHoiW6GniHmwIoa0De00xCtGHZROQABIUQPgC6woc8aWZqMIT5JxHmMwhNFUC0nhy/Ru1X1ml1H+4EDPQCtH/OCafy/aEQRKPklfRphfmnNmnVwwEkNHMF5JxH6QFIEIUXV8ktXhakSQQKU5MlKHonpUSOUAIckaLSIPzRtEotEU0uBanh6sm6wQVRoeaGt9QRzfGyyprwa/jQfHFDB9NUDAYQjBzKgKegTTGYXYr5LIh4q6BNuQBt14Otv8yqqgw9CVF34O1/7aTnsqJBVECkrSrxb6EwGghKWKS6kUqpPQc9lFmJSlVOTQtjVNXXgOmrmlVde2bHjZhWv3xSlntn1HMG7I1CAQiFIHZZQ98LskcdUoEgtIISbXsCHlpUtCkpRhc15WM+urPfHhatDwyr1p2kUA/881C////83zOK7iQfa3JAdMmFcLmdLM6ESKYlfTFHj2jUx9m/YkiMjMDLGcYPEgGMfjmRt8Kf8eGoPgBciVCo/EBAQ5xiOWkMPddCGf4h5LI7Upc3OXQYZyVDiOCg3OP5ELAheIOm3vdOugVigiW/Mya+nN1EETqBUHMNUXvDNSmW31QKOb6izbj5rD8i20vIgWYLmapTFHF9dj6KsLpB60Tt4VcexTMuR9xg5gcvED6EgwVcwly1fnRWIxmSLgqQUlIpBhYBZdfzKT1611XUUEf/Vxcv4Fa3SB30AikRt8BD3CJQIfLXhhb5J8SdlY4RKwVxcC2EhuJiSKKmpT4K4rrZWu1qRrLr6xgYws8HvfecdFNn5RCjmwXU8cIkU3ATpRR5VQBIJsgElG+fiT2LCYfkRyIM8+9wLuvu+ckZQos8K0l5fWSwJiuypjUS/cNDTBh9kPMcuedCIOvpMyghBnbJq5JTxx3Ym1cEHUTLLidv+VBY3xPdScA/tijslQ+cHFeAYUXPAP7koBTFVqxdk3Sr6I9EnWgofg4sOpYUGrH7lV35FN9j6YEKXWS3ZXtTuK0yIg/Igh0zzNDdCck4kQMxXTFAjZHZ+9MHW5qZrwzF4LxsvkWqMvocXwnrppZd+4Rd+AXDoYe8br+9et2FjWGsafLJdm4iBAlML5t0kI1C8imVslhqKg2ycnJ+e2vXU98dGrxUVztltfurksaaGGhPfYiRzS0Dx/8J8oRjkLbVFCLqIDEMIF85q98kLlvr1nmWkaltK/CmbTx7MV5BKZ0r9yTClS/EusrEHJV2NG5t9jQaJLWYN/C8UVTe0lFTW2xJgjdB8YanVQY0t7TVNHQ0da4rjSPKySZNizpc0xF5eYUbZOqQ0uGZO4XpaZG8tu/YlNsstPWrMD4nfeH3/vz/k0/uzRt/D8989A6AclDK0pZf3/bmUTiDxnlb250QdgKi1KK7g+KvPAGT47//98A6AJUAH9r5ytbenrGBy+tolHYCFqTH7rx3WRNUpAN1mSnRDD4vcOQB6SFHDm01Gp5EimZ+xhSyvxwj1es9JHVwBHWDvoClIPfgc71p5eptVWgYORBXQ9pVo6BVTApm+SRQNyNmS1t4Yk5LCbWrF6JhwR0H4MBaM4oUUsfTZgVduunC0Tlu7tTmeWtpsATcDZ3ENtXWCfvPcEHvppVf4ItYNDcGccR8eCZ5W1jBkygY3Y0yQWb9hrTY6mwY71d1QhHU7UEEkrcFS6jOf/jQ0IA8ft04BBdVdu56qqnRadyxh5cHgmk0Gqr2XLiu4ddsOVWMI/6xSHQlbfQwB4L/8+OxEAbbJUWzbtgPPJSbIEX0qpc1tToek0Rzc8KBifMoNpDEHG8NYF87DjSfxtLTHPMDRg8c0KIjSSvb2xdoVUuPrei/1iRPM81hHb2jAWJh6hTp1jbEWHOvgDGZQl9bqSCSv/ICGOXDwJzniG0nllgWjPD5plWgIMjXNXqQABWZf32UYgpyFDgJr8K7Dj5nk62s6xCFCGnMDE8PjOgBY4U/raWEOf1lMv9NYuAlOcEkiiWth29tbTR6a+8dStQdu1+c1ppokvLrUeyHVFWP89oZDo6NrmXexgXkYEyao0DmMeMz1bXH4Xq9fyha61OAKGn28CaOPK5atFNzbRamLaN2pYMla9JgYTOvFrR63E2Bueq64zFBMbMPXYVizfs2Zk2eOHDt28vjx9Rs3Gi0XtVBgMY38ZZXOhK+YdfR+2n6jbUIp9KCELeiFACoYgnTBCSqQjPkupKRsSvmTUKgrS8RtpofhmIDDXrSPuKTUwYP7aRT46GJiGIi3Wawy+BMcjEW+SpP5x2ZOecAEPOSVLoe1fYthQgDkNWmNEwzBd+AQG7WMFii1q1oR7ThaQPCeqwPcJ/A7uqJzGwVTFE5Vwg+kzeUw4ZGkow5ptD35zlAXf8oDoMz5wSWYwAd18BfTEqLqWuqb1S4FnAw2SEiNHd3I8JWFvHc6Zs8bGWY8ZQt3FBvKG4TcEj3yYI783lFROLDvWxbzYQ38zGxQd4qIs/rxkGCZwvf773/AcKBgRbi8b987eGHtAyi8DM0zjQJFN5MRrUO+xNaOG+ewDh44LKiygpBgVIZN6gNZcaO8EMIX1Er0Ve0IQL8BW/EIldX5FzoXFpXwWQcOH3GDYKyCLy0fHBxavykUyAPaJx75mINxFKQ3/mRCToQF05H/hIFyn5LUQgNwKrZapf2j3I1PbAzaZJCFTajAQgab5E9PBOvwxCJgiSH7IP6UFqpOIggqkoeLHLo6qF6ZwcRA/OF6iIF7JXUa4x0H1OJPZScmYk4NGrLxd5TVtQUQoD2Mp/dcbFGVjWfHDZH92g1rBf6AhyCnoxuX9cy8FdyMfpGFumiMioC97977k5eJNXyTsebaLHl0nU2XscOm5ljl5monJCiuPfKZAcATkhCTSB8EbcCSJqtTowFm4mOi1Gjk2ijayY40gQWHr6dFqqZ5kAQK/jJkfV25ao0/cU+9Ie4blwXiGAeBdXiuRjpJIls2b25yd8ZMHMoBskOElBW7e3g1OS2qA5aykQUkFbFvmLzwJHObxDOvSFYGCMOcMwVNQcH0b/+H3+E6g5np0RUkGvhDWzZ6iEwiUApF0KZLQAFORn5xgx/BGfnhkDkGsk0OFiYpmC/eImqr+Ezi8yFiV4NsDq/we//9D9qMoQeRFmsWPPfcM2J3nGFEOGb7kdr11tALMh1wsI/eAqWCP7Yj08khBC0yoHsqxahHHnlECuawXAyRmWigBGHYkpGCXrCCGSJQRT5BnobgQbYF0T99/tjHH3ZVkqWoNNnkAB0AHzK4qn+LP5/5zGfwSinKyTmQuEsVnK7jwcbYbpvW4UBmdnpSo35w//6Vq5bb9uTKFdsfDXa2NjQ98b3Hjh45XFlRMjczYQVbSRGXPWwPgL6NdY9Eo+tKT0pLwiNruKV4aGYG7sWfWV395hc1otEjLMcl+GAgtOmPREWQL9H7UhEZdJGLSg0BuNcmNhKkI2xK3BWw4DyaxZLC8mpL/4X+ugHFpRXOB9IZqOtcW9eyrLG1o8TC94Li+YLIb3GxVdQ4+W7of32uyO0EKT53bI106OXHOxz8ftjzw7++r9QP6QD8wBkAnCiLZj+VS1hlgHB7L+SlP73kGYAP7gFYmgFIS7Gr/19nAH4wXR/eAagqLcwdgNLFCXsAutvr5iZGFp3aWVRCdUmWRfAnZC0UpxjmtEmZ2vN4bJMdGTKiDFRAYIY6+okc+bkF2ZgMxaaiFENxtiCPDIJ8v+Czei/cVHZlikiRLrMqQFOFBe7QaE8HavEJFIy9UDm2Q7mg55031k555+2XdXUt6+ocGR6y7W/Fym4pXBrXb/ABAvLsfu11yNsyC6tly2JURb0u9GW5aoe8qE6o6s+nn34KYhqInTt3kg5QIEDA+I5K1ahReGv3m++8c8jVI0YZGI9+OJSR7zRPe/a4AmtRNqw3Wd2dHYiFQMpmS7H3g/nbw2nwC8lM3ngf3FS6bv0ahg+CNlqlBjKwzh32ymIXHBgUxmIRoTs0kBWrlCPCCr9Xh6/Jw/HqUdgbSgoclMzSB/qvLO9aib2o5v2+8cd/rGCWEScDjeUrVmLh4JVhTDBUx0u775vlZpGB7wWqIEAJth6CgAbWaWU8lMSfnABRSsRzZCqiRjzkb8VhuKdeX1NfzgbZ0Jz8eI9dD/HEyhCJaNE9Vgv09Ihmxg0wx9pFxa0hx0zV+WpFvheNgnTVYTi+aQVGRl1902amTqJP+DM4EP0f5FNdQypyyoBFDk3mddkjzgPr8njM542ty5VZq4H/Nu9hF7WRky7HKindvYrK6YlJhGMLBYABTNDr17ZU0vGCXZD0ntUb4cb+tAiakm9/+zF8k646G15xnuZgoFhR7YUlccQcaKIXqKqCcmoHNWo0R0ruEoi+mC2YWIPhGi/6SXB46BdWmK92fMvMyS2y0AVRbAoCKoWhnP5UC4awCGgoDjf4J6EYKYuGL8vUr1Caa8LVtvY4jIs+OC3jJrfXTU4aeQRzbHRKWXpL4uCAiRxo44kXoKTgPy1VNWQEpdJRBxpUKQCYqJCSi0ADbpkWHQAQljoAErPigYMDogtoSESdF4rn6+zEDFCQQaw/4aYKeQg9E0jJ1Zj9EvgK2j2Lt4QFVZj4Cr56qZNfcoenKqDtvXDPY/+azzJeksEl4mMiTG5iO3M6tvyiP0d+xI8pdOv48RMyYITIwyodZpO37dt6BYIuCHb4BxKun5WNdPFXWdirGEzWDhuhG+1UBHkSLXa70t/X0iTMElddNqBicxkT0x5fdcLJ+Njl/iuvvXaoobmU5jkvySEGK5Z1/Ytf/ufURRX4wh+50Q2eaflfBCvw5CXB9yC4rb3behVS50aFqgaPaaRhFUhCw5M5hWvYJ7/pLNAAyUMCZIAKvFIRdQKTwqGImTEAcvLrk2xPP/00xhrzsAcAYliBJ4r4SloAoreyotym3sEr/UTCnOAAuMOz5OQOQLbzVO2q05xYSvTaa68Vlpa4/YAHpy728sMWZNhqfJgB+UoBX9VeoHG5r5+mQm/DxvUAcpGuayUvrsdXAwDZbukfI4enYW3SRxcREBYk/SpIATAZ/kn6x/lr7cdP//TfaahrBEd18nuRU+1qpIh+kSMFBCrkq7EiAJkffCiurxKhrTrsxStlvYtZvajo/NlzVgWtW7NWXwV8G805DujBeXlaue54AWSSMm5kj9DYUJeVW0VYhyKYgKY6KSTlXQqskKyIIxQ0IYAwM0Boo3e6yvUjkFJZlEU0sFLWKNSatSZMY4sC5GHiE1Ei3y/IBCEn9tq/S5d2bL+5qaXVeNhtH7ndylqycPRWeVmFcexrQ8NHjh7u6uy2Wt5JTY45O3L4qDy2ZBjpEeUbF9E/YclmA7BLpbRLdZAkCxwQlJPIa6+98uCDD8INA3/913/9l37pl3AD2tAjUBrFQhGe2zBUS6RaWARVoACRCGcVgc9VcbUQML//0Y9+1Iip9QAzLjkvKuINCB0biRV8xyNYY2Am1zs86adaQHbcPraQOJUWC7IgD5aawvZi+/yyrg6X2MzMuuNlXE/gSl/fn37zG5pMhyg4/FowtG71Kl0jrSqJmwdQVoTvvbjIshy79GK4BcJ+Ye4rziNWikr9vveRggQZPGpXhOD8SscQ3JOZPfqEcPhTRQGKunIQCewCf1tUWlBU5k6OeQsUisrdH1ZWVVdaUWmZ0GxB2XR5U03r8vbO5XUtHRW1zQWlNc4ImrARtqraghCj/g6xiYMs/ecw+2hY340evEHDr+r8/o08AnnAfuAegB/YARD6//cuAXp3P8MH9gAUFBqK/u9YAvSDqf7wDoAZgCP737AEqHBuZGzg3LKO+sWZCTqiA0DfqFrWcP5Eq0orWAF9ZhfEyg/QdpyniUu9nayWCtIN+RkpHaAAnAO5KMLWQOACs4GAQx/YONvxwutmdwcC2bELf+I8deoT1F69SrWExXQMNGBlUIs82VQ1LtyLRfkXzp01YOeQxJbWCNnFMDR+cPAKT6tHbeZLTG/ZCQgG1/gZO2L18POtLwByFDBxTpdaHNVlNAEfoMcSVQRzAwRI40Mee+wxLRaDNZAHN6VwQBU+KZLjj3vvvZt5AkWUyuIhPpA4bNGFcEczazSHrkYTxg/oPK5ctQr5zJ//0SrJzxzB5ysEfDDkH3ADDkSgFPXXBuG5uQJOZmBgaMfN9iBsA43b16bjvwVd3F2KIsabm9pRrbPBKb388u577rnNETjaRw0LQ+5atrymuu5UzxliFEuo3Sh7NnM40DGsyLZPuNkvgY8Q/PT4pAjJIhbJmgOfyEjtSFaE41UK7UpJR4JhAaUIXRHORIp4zyexKb5hBZINqMuvaiGQJRxZ0yAjW+DAHaTtWOBogpIQz7Lc+++9FRMMfKCOOEIE87Og0yI+2eW4viriTBR3ymY/FikL8/CnLWrRbMkPDY5d2K2gDPDkFeSBgAlzSyfcmiTCCA6n8eC+3ouwcs8tCDHWf6NDi4FwU5GmIesS/cSTZ3Y9a9kVfRah2e+BURpN4Zz84D/7wi59GxqliFZb6yMnyA78QBFlMJ4rtPWeLejO225/8skn9VhgDgiVUxC26lI7Pgcb0/gssUIYB5ADKyxinpkEpRTxJ7A5UTZaNzjIDCN8vXR5AKhc3FCpvqOhW+hZ7EUo2lPxtPEyFWllAIGMXzV6JFISaICDsbiKIvDxnKSyO1/KGdJPB2ThBq6q0SfQSCGYaRTLGGUagQIQWwgL5h5oYIhS8PRIV1yp4utFMKGrCvqqFJjya8d9VZcUGHona6PwVMVJPxJhqEaZlfL4c8l3AYUE+dFV+MIffg2ndINBIUu/GlwmSoNt3+nuWi6TdLhCywuIWOCIMVUyOWK4eClCQ8PSrMWmVTEH04W0GTpYOrcxe0NIhP2nyVMxN9RpCe9GU6GLTSrSASgtLHATkNBW2W07buIRbPA6fuq0QUC3guv3n4wDFqeOHj8JJYyYm5n69Cc/9fDDD1MC4uGGDFgSjM4074ZUjsOeFeQ4QoEWzszGnVxq9GTH5xN2QDtxPq78wDgUwUdKZWUM9/J6xE9BsxLIo6xSyPQuAx3iPvDUAAzOsJlcHBVirOz+VOQhCQ/y1UKVVyzrIAgCRg7zAN+aH2aGaX55FCngq8WdeeZA9+x7R0dIZhZCOhiIcKCExMkkYhuTB3y4+dVAwu3c+bMqhaHZEqvS5c+XO5qsJFAQQEOs91OnT6OdLlJBLJLiQRHZqUsV0uGDh0888YT0xvoWJLMlMH2S4itoIOC8WB8fVE2+uOdXHohRd9JBI6cPW2WVykVUxzjB8eLYihPHzDmeUDtlczguB63FImVejfTtMsdqTSkfBBpxW3eOjaoANhseyHjoQY5frFaRRgW9iqRztePoOt5Tg0SslIcmQ0kILh0aJKgUtlgr+fY7e9RI09Do18iKdPWiEXyIeVG7r1//+tedOeuWxJLiUkMdOI8DcAaQ+GCFKPqg7QQBA/Xu7rzrDm7FmloZpDAWOgCTrEvEJD8SYI6NQGllTRnnr6z12Wef/Zmf+RlFaJ3M4EOVYitFfyCGNL8aZnKEDPKz0vI1oJEOtqsOSkSgIi2ZEyf2vr3HSL/MmI8nYg7zgdpsfSQpdB4t2TMAUl1RhQS1VMfx6rHaAUtl2751s+H/rZs3OnTq6uBAwXUxd52m8ht/8PVLF85fG5pZs6bFhIG7V7RxYYzaKs9irNhJeztjUk6DWlUT25swXKW+S8SrjDbG4pjHJxk8csYcd4TF0egiTeYAm/onfhEuD/TEdRpy7AIvc8MiaXyO9dzazNIyI6DmAWYWCqZ1aQtLK6tsA2gqq20eLaidK6t1WUBFXUtj+8rmjhWlNc3WCE06ISjigfDNhQW5A6An4G8mEJh70uf4WcJ8KeV/7OWHdwCCLdF18k9UnSp9fwfgvVhlHHLKUnruAHxwBkAHgKyXjgHFaZ21H7IH4AeT/OEdAJuATxzec+3SuevTQ0MXTy3vbCgrmK8oL2lsiOiEi2N6RMly85wbmdIcHiCbpz+JnmRNLknEAynsFI05wKK67AgozoGq0GGKTWG04z7RJdA4DbGg92xxeOIBjR/g0HiJYyeOA2jSgfnQpTRqW06Z2U72KkIfGbxnq7l44YLAzqZx5921d7SAZlGhHq01LGwQGmtXrcYoZ8El9xWBrzNntc7d3Z1I1owyLu0dnAXfaDexhi6Zc7wlvhSBiZ6//8QTPJLQn7/CJYRz4CIeGo4nKJIOJf0K95Bkm2LpRmR8Gp+MGWwMQal7fCG2Yf0mnwDBOvZoQE1xQxK4Bx/BKhw0FjgGYRGJF5UqqIiBQmz0onXgqbDu1tvuQBFkQLDIM5zV+CSeO0FHWGLe77vf/Z69zhd7+6IKwYEb7sujgevq5sOWA3Us3eCJUrXbAaguJMiAOnDUgj+kj/NcIr4pgmoCIkeoykasZAQyxeDKfIUSeimAP6kQyBQMH6xjAIpQQI6GNsaVws+IuMgrjMuYwsgQvyobnk+PRqvqAZOAOjrbZFARznBgEBAb7N79urWUOBZxxUA/BA0u89JtLXFcIU9O3A4Bgvy58z3oam5oBFB1EDNPQql8IiCNlFIYjquqkwcOqKNOMkPYKUn2Z1oSrl3GFoMoodVXBmPgJiZU5t3BAT40ZDYLAU8xFyR1qjFNRaB959uPkZ2z/jHNDmIiMACE4WfOmNXu+cmf+rHuFd0yU/tskjQN3bTLQ080H9CDKtKI9ebtO7RckEGmelEBDYNNEANTHohACUCqSI5Xrgwglih9RSN8sJpcyJH5KCsF1R7ZkqFFIHfkWIQQ6lXLrR+5HSHEShDOxoKD5lLVyoarLy5Ftfdcu1JYqmo4QNKjapnlIXS42YOkFmhL9EmKzFkD1QslKgRUxsr0ixdDyxBGGiT9iVLVUSQpKEIpxKCqlPSq0kp8Rp3MmOarIuDLDAdYqQVRiivb0NTotgdf1Uv6qlZEHi9KKSIzHsoJVY+KCt95/DdpQwZKVMIOV1CJDyxmYQNsVQFL2TT5Pnn3JIl25sE/w9KW5RCttUeJESNiHfcLQl1ohQxzI6iFBFZiH1WAGTJQpdLsZfwpvxUFZSXFJ48etVqAa3Npn2PFnK2eTvwucXNncWm5w77Ntbjr142GlhjB3KWsa1atfvTRR4WSSMKplatW0AkhDQNWNSI5fQYMB6yZmo64HwnYwRdgkF8yY4cwJwx58AtkKiJ9y5atuInXOIJAKajAR8iTEGOTiCLUoUjvFit8siWfAbBP8GVTSnWEBD21qwJwzcOBA/s3b1zLYGUmlfx1+GosucZnRQw1eKGvkL82eNVljUVlccUJlcW0V195Xe2Mimi2bNmGfBOY8iPcu+p4VQxXHQQQpT1ABXywxTv5sjROiqEikEOEbUVVuQAaAhyiZiwzAQegjcOKQ5vUQPCi9rf37Kf9gJjoEBSqFA/VrjoqS6y4AXkIA4JMI9yYxk7IRUEYqggCiqtdb9DiE38a1dagdgrEp+dELSiCgB33EAZEKVN0QnYeDRpWwNtIJFF1BYsLXBL88Uf7pFKJmCAbbUSmd8KCgzyqGOx3+Fc/0WffRJT4Y1U9rLwQNHFjIIT9okVvzYoplCIQnvoebERwT3weOoB8XFKXTuPBI0c3b9nx3ce+pyzOQN7UE1rUhXxooEWvQ2uqrueff/4zn/201pTxAiIzOLo99JMUICC/DolEFckQDInbl7ejFHutycEEc1neidJUCcxVpGr54fP973+fnkCDdKhWDuW9y0Y9cEMpknrxxRcpBpWDpy0iE2NOhhpl7Dob9AEObnKAtnVT+KZI1m0GhVdw1pxA1eg2Ak1Ps0RFGAKjtqqsurJ0dOTa5OhwZ0fbwuzM3j179r35JhXR00hqc93BQTDk9hWnP67T8cJ68EcH2JVqIljvxJrrjVrSg0YSAcSvBFT75HEmhl+ZPRLJF1gZcEkROCOThtA96XKq2KQBEvTDMSfrsDvCFLINSZg7V7A4M7c4xytZ6lNSWdO1vry+o6Kmcep6yeS8zcLty9Zu6Vi1bnxyZr6gOI5dtuDEEqDCRX0b8M2KMEcvkEFF1jf4SFHdBx8ZPpgoRdkPpv+QDgA/qRamRPQGbr0rzv87hSkPii8BXHpZqkVKfqTkJUBmbKS8i0A6BchFYFjae4EnmY618Hi1SAEC+A88BvTdsu/7J3UAoojjf4PyOAYUlMKCucqSguOH3jp18G2nAM2PDTTXlzkFqLSk8NrVa/YBycvvueAzlDbttKHJ3ukSKSMZtlJ8MrBP3JSBxqqcxuK8bFJYmZyCm/ySXYQRNHCwi7Fnl5K9Oq3mA/OjOP0xMGGKkmnUNTTIT76h9mkk0p8cBbCsTAMBWw4zkKmqemfvnuamhsmx8Y2b1iUPPM7pGbu0vJ4f27B23a5du1pb28S+WmQoEaNKeSerBIeuxToin5inE7rZGtIg0NHRZgmlWtR1sbfX+JdFPnwUJ6BSXlGr/eSupxk+fwsT2o45Gi+e3yog9PIziLJggitYv34j6piVGGDV8lXZ9ZG1qJEOHT1+DJ6AcOaAkwIklVUX2k25eMFqvkKk5Xfbju18O7PCH/aNqzw5Yj/+8U+KY4zu8286yXjlWHQDzN/61rdthSQXGmW9NY+NhzaSwWfz5i3w7Dl/jgtNhyDHSCVpEo2GiXCRz8AxH3XSMU1ZoNALN7yCA3Gjl2NHo094Swp4qKVQxCd5uFlOXimfDCrjG8j+9Ina6Eojx9SRP5UiBfuOci1EMD8ZvQVoWGtgaBz+FFKMDSs5Bf1uadDkCT8Ut4azs6O9trqS2ydWCCDTKiG4qTrOcXfWO6MtiA3oINhs29HdlZgTU+h33HEnzJFPUUHDAVW/99cflwf7LQpBApQ0zxhSWhSHv8/Phts0IoNXXtQixbsOntqtBsBbXLX++eSJU2Ca/ADETlFlZU7Sn3Bew8c/8VEn28sJE/pAoygAmYIJJSWoHKKohBSNMs1EGjl6zwykPDSBIADxwAE5GkEE+rOtrdX1F75iNSZIRCMN9KeCeAs3kL3TQ1cJDQ6JmGN5uUo7OrvZu1powmCKPRSX2S4mqCKTl7ChWYasD0ij/9lgoaQK6eADhW9+A+HpUC2Pd4KgD0kZYsMJaH49EiEmjxXLNqtU17176gYklZI/621WTvQKUQBXBFYnjxyDBiDS5ZRO8VgZQjJ8LMV8oHAJMqIrizjoNlQ9ud5smOrKD3yURa8aC//4N7+KQn8ApAJlzO+IG/btOyARZ9mAq4uRzYDZOXFCxQke8kNFnOHSHM7l5VdfESAa3LJkom+gn5twBBtE9QshR9Hl5yK5ALEF3+Hlv/23/0b2oh94wAkaziBgcCuXL3N3knWSk9OxBs4sum7Atptubm3rsIPb7WtYyVPkgd5nnt4FyK/+6q+CLyTyOzoWo78GM1CLs1LIhcGTH75U18SQKk3CGl0OGmCpiT8R6Kv8JA1DEJCZJBeKrgopmEN16CJ9grZ3ieDksl4QwqoZCY4jx9A4WXrJRoJ7qlBqSbqXLl0sKlyor4soUx5qDaBhQhlQB+djR4/qC/HyQGEmVJetWpkvnCIXnpHIDKVLFySBYBE/zeDi0Q4fYlaWmCgQlKz7pyWQJFmXUFJuKis90yWPCM+JyzyMR+3INDUmP7jZwFg1aFyMFB7KpKjLcX0yugMHRYSYRC8b1kkHnIFBkgvAT6XMPPgkJ5ai2ifZEEt2KqJImKkIuRvPvmnHjtamVp4IPsg/fPSI2lFHLc+n+wLtCkij4O1f+MIXiBJkZ8+riwTJ1NAXz6Jt0FUQ76oCjZisXvBpMj7rVhGZaUF9E57C6JvhJc7TYjZrpZ5++pkU8Q9+5CO3UEjBnI4lJ06U4OAeSgnUC+okQg9YJMAQ93r7Lre3dV+63Hf0yDGXe/ReuHim5/Sqlavn5mcf/dzn29pb62rrrRFx7HnP2TPdXcta21qcx/Od73zHqANOwpbCUCFjJMSKBIxSI/5jrA6GdsJsDUq1x6b4nZeHxiygF154wbA9dUIdV6ggII7rwWRKjp9eYEg96KcHTLKwbo04tEb6EopYqGMPgHkJ7+AwW1GC6vgHVYODcGWpKNwwv76mduTaMPMEX9t45mzsteAWCN3WMbd90eyJ8REncy7Oz/W49+XYMTdN2LaB7XiP2OBFim4Bp8Ou9E2+NTZAL0Rsn25h9seNPgBi1SunGuEPgscL1kkByu1yASc9XqR4fJUHIYj1hSjBSelm3ecMbxsilyJyVHvOj+FIsoEMXH0BXQLR7Xxh+Uxp/WJFvY0B5TVNpTVt5dUtRVWN7g3YsPWmGXeuLBY4u5b/AQQzhapmRfIMgBQPTPKzhFtOX/r1den9vS+ZuvemeP/hHQCgBPxE9sEOwBK0pZcM2Z/58aeXVEXw8IMzAP8fdQD0NNwDoANQXnT95JG9PUf2VxbPzI5crqsqtASoqPB6ZVnIzoO64HBa10G4NJ+HQSzF5t+oCZX0oi/IUXCeFIwf8MsQ6HDWARZBEJwkk6GUpG+ZJM0HFigckKIu6pf9KpOXXzTD+8njhjuOxdyX2mXIHgZibFZFWS2NgLIjwAGMY9v7LukM2wS8bv1qGQYHL9emdSxcpQwvv/CihsbIoBppMSdw/myPUEkjq7p777uHcWn+uXojKujiwLlHwahGSkNmj83F8+f0PeADgkr5RsXhsO2mHQjBIimMNOs5qlmG0RAp3JoLN+HgtE085Bl0MzrbOsFRERIYmhfm0NreBlu8ZZ5eOOrc9ChLJbkOQw9qMUKvFeu/MiADunlIC63FvvZMO9hUtwUnnUItvw4A5N/cu+c//PbvtLd3CSS0bpB3qzq6XLZgCBVv+RxHiPLGOLBhw3rcgwM7ZdHo9XiBEkb51ccAMzfBWZmhlMNxeJIRboBJMfI7Ejxo5CX8Ep8/0Z6XI6oLtqpIeSIcjNNd5uf5E3XxOeB4x8Z2B4XNOvwxen1m3iQ6sE3Lq70QCpux8YnT9uiVbd+x7c6PxHr0rGbIMbFgFtRLZ1c7yTpnAH8mxsfAx8b6pMDHT50ERMq6deu9IATwrKvgwBkHSDACxKmpdRs3mNXVzsmmiF/HHWDI8NA1NFpyZsyRFcDcL0wU9CATzriHOhfSJtcYXbK49Cr5UjZCpqZ3Hv74zjgofGAANCzCGWj6EwSikVmlIENPGxdN22uvowv5mEkQeCgDhNmUR7umdpIyhWYQrKur8/Nf+ByKoIcnucFFQrZWMD1oUS8gVNEilImp2exvVW0HC1A56tPSoAUQvHIbgJcQEG9v03MaBIQwsHQGVnQPNEiqF4bgy+NX1XwTArP+5+CKbsABKHlkhi0IMkDJEtazPeet0VcQqvRTvZnPqpCf+GDFKqXLL3FieBR86ZQTPiBjSOYSCGrBN+zyi5BrI8O6ceYUgAJHiirkIYVsC148GatMe+ET/+l/zQqnAmcMBwvTjRUGcgypqlRu6N5///1MiFDta0mwYvW2nISkO06VXcnEIPVX4/DgyYlPf/rTtgQJzhiMUmqFB3kjCboCCHbFDQn4sBhA7FbL3rfetNfy7jvvzJAPHTkmthgZHRMG2BexYtUalVZUGb0etPmdh7Xm6flnn/cn1piHUovEFSuWq0hUQOE85KG58pCEtrSmttF7Zg3CVe0XW3kWAwkg0DmlMF1d3NwDDzwIVcyCIZGQuhcUUSMF/SknaKjzDm2jX150lowig4aoRx555IEHHsjtQTAwbZHJ+Fi/5PQ3yyEk4oyvjMEABRYBToQWSWfEQI7ovLr6xOkT99x3rxYFBAf6kg51UdDYP5ROnDhFavCnVYoLf3fufFBmYKENiIp4EG2A8JpSmin2FcLcvcSYamyoN0IDrOLSoa2UPobxaTBlFlvDzYPn/mxv7VAdXuEDAxBqY6CCAkSJKpXHr0/sB7ct8taMMV0cy4wlLPgrYqwLu5CjiOZB6xKtaUVcH8hTq9cOa18FvtBzi4bip86cVh1Qv/Zrv6YKsjafrpRPeTLUSlOyuOeeewS1akcLZ6QuwHVgiJVL1UoZ6xLc20fBT9JhvSMu3aAa/ecfNIHWTTnh3oEbGIUcCpyjB5pDKLiKfN4BfOSgFGQ8N1W+d887cHKOCE8LJvg6Eu517+joUu+DD+5cu3a1RQsvvvj8F77wt9SC9q9+9av/7J/9M1XQt6yQXlSnCk0dXhGN1gL/OeU88iT6V+9DDz1EuBQGPnAwDYVRckr/7d/+bZMDuQnkQeCJb/70ECX4hItvRved6iOqENDA5HL/pe7ODjsTzEvkPvyf//mfi0hIRxWsg4gNoWE778FJubxweipsUJt3se/S6Z6zqNi8eauVxkbWdQAmRoZmXXdaWdZ77uzbe3aPuwSjJMamKTNPiS580xMAkIwAryiLmzLzxlkb4DhQkwAG1eVEGub7ShzUxrsHHI/i+WHyhvM9NEQemZfsFAeSFseSPNmkk6M+uJU/4nYDNaCZ24/8xvrT2lMrGwMDY9tFTggtlHGmoGRsrkQ3oNCegNqWmsZOHYC5oqq4/bO2sa17ZYeNXFVWUs2491HoKeyc1Sewl+A9YT2gGfMg4K/3ROfpQ04Bih3ZxqL+8gyADpFJ/9RxeDe+j/IJn4B0411KfqR82AyAi8Bo1N/gDEDU5UhW+ymjWzNrBkAH4MzhfbkDUF9dlPcA1FU3mFkiJj7TTK/frBIaTUpCuOBQJGpArRw4c2049k1RS56ESsjgob3USUFaTQ0Ygnfq4V3rwb9pX3PbrKwXj4pYIuD8CcfL+VAzXUamZAbg3fY+dbOxnUXIqTp+yYviAPK3OgAb1q0dHxtprKtftrxTpXqXthBaBcPcnnvuuYKF6wyfsoPgai1W+dILz1sdx3+aS7zvvvs4BE7DmIsUaN9083ZeCGTIG/iX/7abb0Ed/rB6Fg2Zg4cO+eU9qL3LtmDOyWQPw8fmRTjEzazQyE9e6o2R14cfetifxoOkm7HGmWjcr1//xKc/5SJLlYJmSIfTw4fEnFhnxR2ZqRAQWy4IDSGEXrxGRwa4HT58FHUPPPRRArKGSOLwyKjihiAff/zxN/e8bSf35i1b2YvWLTxDRPLzVsC6a8wVqtxUbV01mDrjhmkwVo11NfUy4SQMUcGt8di4geH4D3nw/YlvqOYlJKJdol8OFhW+4o/ifqPO1PcjUHqCV5Z/qsijiOpAsBkwtbYzoWZpB61A34v8NOfq5UFgSZNbxgEFRUBJ/RqMTMENHy71xfAKVugIVZaWcN2GzuRcXIhVLjC3NpJrpTZTZkXSAfBESf0KLXZanLfcVpsFN9EUrb50qQ/hcAvkXZqQ2nGZQycry8JradunY52MbJCMrl46fAYr2FvSnCHaknmILRiFGzDBNPk5sSTrMB8xnrE/TUBuhbUmt9116x133M6a5PTQHHTJTydxgxrjEpZm4LC1AwFz6Am64KzzKeQTnCiIw+B4YI51sIXJ2nURV8iJq6qDA0LglswErZZVhxr4jT9mDR6UOcxBNtJEpnjVnuWMWGJgCWT8qS5HPlgH5XhTOVGNw5pXtUCAW1AFGiEJcuYGNDyW9Wc9kQccXxGrCAI9wErxC3mJ1slbNGUewXt+QIBt1jGVYoicJE52fhVsrKkFP+skZKABIHKwQkWKqDTXJZuhxp4LF+xbk+JPKIHgAd8jBUuwy1dwpMe7mjL9aKOjwmh6xp4lCim0xnBSWAhIBvJYJkWWzAABwjK/NbWG+c/AiYD1G71QFJ5i+7abBL52C2AcOmHDVoUOvAyDQYBJMcOcSmEoYkDTudy79x0oOVJKTxMm8pgBUNbqf+nguCfYEdsiCVeguh7v0Uc/d+FCrygHSaqG54ED+1VhZg0rkapITOen4E/jhiIbLsge8fLLIwO+8KeQoaCwFbvrnHgx3vnGG7uF0YRBIzlNUZSy3CL9UJxKYRR6OT5CgqFeShoaj5aAWvukefiN3/gNS1ykC4tprU9ZUWw5EQ2b2JFNNwZK2DJq+ZprOFzpV1qqFp6dVTBICJzrvdDc2oTbeAUr0IiGCHyFoT+du8wRoEhxhkRkPAvgegUyAIXVHqGbbH/0R99RPMeFhmcgBlWchB62cE9IU1ApgtDYkBr7gScugU9JpKsaLXBTC0Pl6OmZP19//XU5PcafgCIRfPOpqzO61MhEnRS/hEvx1IWH0lVH0emPFEI5vO9QNkKZW4oK5SEsJI+nS3agqlJVE0TW5IryUtVB1XQTcrBdx8nLb/3Wb2kmSRAmENBZVUS9tpxalwmIYJcDdDqb2cFLfb32lo2Nx1J+tx7SpZbWBoyiq1SC/quRCBgLH+GBD35iIAN5+eWXZaNLOPPk499r6+wyb0708KEh+iF4K79seMiBEAf0IWnYRXUvvviikTYks0/c8EvcxvJRR51UAYiqMUHtRMDJQAa9X/7yl3ESP5UC0xA+4cKEnvzJn/wJKcCBpJgJTPCBRaiOVsgGuHbIFD8gyepjt08QuGp5XW3NG7tfJ3HplAGx4PiKBL+opmCUBwS102R7EqbGJy73D2gVKp1tsiJOCADq9ltudX4P9NyVZf2fgc+FmemayoqZiTED0si0/M8RPAK1svlyhkCFKIAlQD5pT3lJa1JdDU12QlZwcEAGfiP/yhY5k8/1CwIMfTUqLN2f3j0K5jxSsAI0xXEM/vigFtv/iq8XWgykD6AXDIgZ94BcWgyczoX/QyNaWK7w+lxNaeG8vsDi5NzIpWEjc7VDNY1dNsZYETnce2ps6HJda0dje3u9mz4XC7lai4hYgYcsPJQhP3DLKX+d3+hJGM9L/6S39wB7t8L3pOTaI+HdAjDJn5de4tuN5933nDnlzNkAfm/+DOF/+DeBssYhAHjPWHvRd/NLajpneMWvOzC9vMzdhLHsk+xISnaaT6VJmSizczYeWV1TyWr0wkxNOYOb4dB/KQrSYZmZKgj0gXvhslTEY/AJqrOimJnQf/jIL7Mi1EYe73Revdwso5DZhKR3kwvkK7MUeTyAq1EpmflMXlTtzL8jhXH6zLkueujwQ+/d3V0iYG2lASCYPPjgQ2ycZ9bDWrVy5ZYtm6FK/2EiCLaCFG5iSoSzGkMwNJyNux7mvrvv0b7YklpZUcl+qTGr1J0FGVG8n0cirwI9iLmfGwTAPZDnzZh8WUm5kB1u/B6uSlfEEiOu4MGHHjpz7uzk1CQauSytlTFxpCETdaYp8PMTn/iEs+asFJDIyzEB3DAuA9o999zHP+Ak9qqXFEpKY2/Yt7/9mOLiQuMvPrHjgYFoHK3vM/ttHgCBwgPOX6ITk2rq4j57f7rOgfxFaPBk1/CnA3BDO17xlthIeWCoLjRKJykMBzAULq0CkB9zJNIEmSGAsfyDurz4VVB+5ACCLQb0JIKDLR5FfJLiBSisxha8VTsloYEo9YkgoMFzqpRikKPw3cFofROhig7hU0R3HUCr4Ganoi8hv+2dEMNVxCrILZp2QRosYMLNgqwiyIQI09UQvkJDZih5jhw6yp/OTM1eGxnyKzSyUU0VWj2dbcsa9ShswhaZBDtra0aGRsanxnVDyirZYJmdT3YYoFlge/b8+f3vvNNz7pwBmlJzB8VlsUQpTW1hGv2EEmKxEd/whG1qhtAVRC0u0j2EG5sTqCBHIvSM7tlbCGcBvTaagNALml8NDd3QQGNjDlMxikDVqDiRITwHlqQDgkS0TU3OGeDHPcLyFT4E45M8ikvPvKIwE1PT45PR4OIbDqvdr2ywgr/akYCTcAY8k4BGkx4QyH7AJ5CxOtLTgTfE4d0jD/G5d7m0pGJkfCzDofncBTvygkCJICuuFH3LeY4fOiwCB1YiCOiVAbFyqkKNEjM+uXYHwWufsBpFgICMhIyDFI8/PV4yboX//O/dY/wekVIBQrx7XnFfv0hhXFO9bgNzFT+Jic0AYLQwfkmElvuCZSpECkOVza58tnfTjluUvXThInQpAe4jyS8CDCICjokeqJBK9i847t4ro8rTk9NsCFNgwrP4ioP8Jkk0t4Y5MWzY2tVi5AmJcqKZI8OgP/zDP2BLFy6cwyB1SXcrMAfnRWXa+hjJT75D7TCXB3DM8pJ/hTVoUQt6T506LRglYJ4UH0VjkBQNe/eiCO0EBJJ8Fn2yZYrnQrhPNBuvVI0bNDtFSAvQ4BEoMcE7q9RWVUsK0SK/VosUoT0+GosIlWLSdn3RRcoKgpC0tPzd3huuGggBExrIScEPScdOYtwIOQ4M8D5CFjeEYzvSskHiPBwgasbjox/9KFtSEUXMCvTs889pS7BX8C0n0fiEOuoBJjmq0TtTVEpHYmxkFLHkAjhtoUi4GrSUloKDjR6ZcRh8nOnu6hD1yikPvkmXE9sAyZqA51odWAm4zQHUVcaCOfgDa58JdffCL+jJKm5AFtsJRccDUQh3EzCegwayDifGcjpoV1C3jRqDTJQQgBgvUVfjnivxwZSTN6gkPeK9uQv94qamxomJyfb2NjPOHR3tRlZQRzrgU0u9RNKhBt6JGAfUqF6ygFI0nGZFGppcZOFM3Nxj1P6RmnqNcEAsY6I4l7dz504tvZRf+ZVf/fVf/3WyAwoceOJ/NAZpeFItNMFiHswhDpgIekzO0Cg7/HCSygHoBUreNTCq/i//5b/8o3/0jyAPDoAaZn0kL3CgvWSNkO9973vE/Uu/9EusDI0A4uryFd3WDzsFSD+K3PNKJEqlLPGpSGaaDCWIYUVFaUlbU6M5wP7Bq2Pjkxs3bjJ+dfDg4fXr17Y1NY9cGyxyT8PU2JF9b/ecOl50fc66yLmpccfjiKrT6fsmYMV+oT/0ExoL7mUxMxt37frPlcEFxRWpN59uRVAjnmcTRh39Qbgna6B0j7APNKR5pC89VCXbIzHhLTiUECE6AKJHvYSI9edjRMdneaABHxhpJC0Eongayzg6ocgYeokdvzYXTc85ksZkbXd1gzms9RPXi6cKSgsq6yobWmqamivq6o1bLhZYF5FmJN+zPFctfyNP6kNYR/8usHfD5xRN5xmADy4Bgv2NMPv9cTyOAZQ4Fz8ZqBmAeP9B9wCw3L/+DEDaJ/0XewCWlgDlPQAnD+ytKJq+PjHY2lhRXrjg9sKF6dgb5yEgkqSHhEXKWlv6kO+BJmgTZRSjqqYO8xubmjkELYXMnDAlocbZv/EhbAGBfA6nR962eoImJ/LBAZzmyCB/rtRX5gCaTy1tMSnnOAg25SsE2Dsz4RMUl8E7z6B2A0wMx4ANNXLje0drW2NTXSBcVqQp0hxxvAa/3nj1NW2lBNOYLIJOPnDvfSJOOPMPJipZN1BMUpDNYLkRI+7f/e53uDgO3Kq50aGrCOEw4QDI+Yu9Yk1IHj8Z4xH2yUKJr/CVSrOCWNU5MSEDl/vW7j0C9Jt33MJtuqQA/tWVNXjF86DL5WXDY6PvHDy4YuVKDQE3yh3RAdOkjFFEjkAORHuERYoIzdFuENQSWffKO0OMLPRqWBP8jVCLBV5+5TVOxvJLTblNgHAzlCAS1RAwz6tDcXRMYUFxc1sr20fIyNjwiZPHuRdzh6LYEGJJTIbLnJGUQlgQ4F2lEEoOoUCmD/70S7gy5Gw4oAiv6EVOkuIkMYcm4LnMXJVPWKcKSoJSA4wyEI10j+I6nH5lEEjUVtSQIGz9CU8qpJQZYKBUalgBKMTiMyloTHVRFxfihE2qKDPVmpDqcPAaK8tqzQ5RkvJYzxaNuMVXFke8tXcvtgAo+CN30YIqbFZGb5zuH7YwreHWmsAHsXGDb3nV9Ny00/2t17f81bCJLdMm0ITQYxOjs9Pc7rzhGMFGZXmVWfLuzmVGHi33dcme09ss9zh98hRRuq/ANWGrVqzuWmabcj3Cq6oqKQNkoOehkwyK8gv3tT5aQJzEDWgwWO2dg851Jo2L4TY2avieeeYZJGAIhoOA/5AHBOEiiuMnjoovqCK6gBX8CCpQbfQKA9MY6ErCVQuAw6OTR4+csroUA/Hfsh+l1I6xtXUNNJOdAltaHptAME2p7vZOlVIA9UrEMb9KSZFBWVxFnZxkDQHT+5hPNFJkoFHQRppSnlwvJVEKznzn3Kz9TUXsC+ZySs8VqVQ2QMCEnhcixpCywuifY52vgKMCcNWRJvjKho6lhYhY2td/+e0Dh7ShoIEsA2hUETTvWeUUzw9aACz8xr/5Bxp7FIKCHZjSc+YcDn7kI7d7BwUIK8vVh07vJn0SwXWkgiRQes6eR0++pOnixT7+8YmnnhQ033vP/VyY0T2oq0JmRVDlT7EshKg+LsBGAOSXJEC+9eZbiFlFMmTu4wLOUh35UcKSUeK9q7OzvLK278pQd1rwLR4lfkBefvklztGV2vyRB2RXY6COwMKr3n0/+UAGfL94DRqUeBPc5L9IBVFSMNG4xa23fgRbOFkU+ZNByg+lZJMxM2V0JNxfWpgRbqW8UoDFS/K5iKU3kMFe+BtkNX6s648cKQRj7POmm3bYd0Xhjb9IM3xghMsiBPcwWBtt2QlNi+nRyQlrNbmF0z2nrGiCJ9NysjUEjPXCx5pnisJXwhb3wMcra68h7ETU7C+QzMCQhhucAzxl5uj9SWqwIkcn7TAnV4zVN9TaY3Bt+Gps9KmtkgIrjtv85vC1Ubs2XVbTe9EBdOexCxqMFnyGij+sl4AQri7vmIzVWhH6TMf1FKCBM+yfxOHGO2QRwBwy5K4ZQNT2LVvrayOUl05Z9bZVQSdR534JBDa1NJMX+CyECKBx+NAB4sDb7IvpsDbSV0QBqwglNKPiyB0IGI/ZuNbxQYPhZ9OjUiiBDx8Z5CforCdgUmPTIZiPUdIhg3tkqhaKpxmz7gg3JKoLS/VYHEBm7Tj8ZUCvRtELWzUD4DoF71TLV9xTl1l1Enf8P+ThjJmYpjfL7OWhkGqU3ycV+Yp2m7l1RcwdQxjnfdXeAIUbuakGASGK6AgZF8wUeWcXyMT8OCTk+99HmhOEfEU+UKzJY1Sntrpq46YN2fVkmeKGsuCnMf5KfQOVYqB6R4auurnZhtfauqbpudn2jm5DcE4O+eQnPz49PnGl/1JJ4cLY1YG3Xntp4NKF2qqKwsW5usoK8T/JUi9XJM7HAHMs9tH4YIIlcvhZaButmJBhivIrLOeIto048ATCMvgKN+TgZ34yaTIsLf+TJz+Qlw5/f8qGHEXA8fg0nq7XcfmwbklagLsQ9cW0QQkk9TpjHsAxrmYB0on+0RGIZaOGluPWsLnrZXPXS6cXyytsSV2xrnnFRgeCDk7MOn6vqb27taO7tEz4GAN7HtV5AuiHbwKG6l/9+SEdgEKTKR9YAkT/8xIgapBrWXpZ+lNKTsy/eQkQri5lyB02Mxvs4q/fAbAIAUs0kuAvLQGyB6Bwfvr0sXfOHj1Qbe5ntD8vASoUwszFWAMh4ic9gmSIqiQGlbh9JHNxAGpomM/0rBXGVXSChcophSXSJX9GW1hYqJkjC1bGVOkVlaAjPrFlDzP0iZNnUNDLDCE+GfwCZQOVIk6+prq8McjSuRSfRCcw0YgcOnTYRkaDbgIXp60d2PeOk4vrqi3PiIjQ4QWmeg1AsFCOa/OGjWKjV199TV233XaHebMrAwOGJECj8AbTYc75UGarO7Q4INj8YyUnr+uTE6Wrykob6xuoK4YIibjBVWvX8DNv7nmLz6lHSaIFCRYz+G1ojPvIZFD8ztvvAnngchyYK8aJxmIoXKimx7xieUnppf7LN992G3ag0dfeixf4Af1n9JqNlmI42UMK/KF5Tr4IiwxeiJkD2vCoPomZMeNQR4+egDldMjbBvsNXX4+RVDd6Ki4wNchu9Z1BHv1vbQRUt2zddG3kmiMZLHG175a34AAmRoX4I75qCwiRsPh1dWkjwCEOvxTG4500MVYKJJGQHWxurTQTyhI6QeOq/DLjoSEAvx56Qs9S8Qj4NObeeRI5NZG+hvuykKOkwigMtshMo2GiOea6iTV0r6LMpKu6QMCKznYH/zSYB5AfGvRN1YaogNVE88ycncSqijjUwZ+Yad+nlbKQR45ukplnaKsaKzBhzKEwcRxWhJWAwMGcErX0Lr8qSLk/nTlL2SgAOFoKwC1jM/AhD0oxh33JCUMttT/1YnDGBmYRlxckwxP3mluaDuzbDzFw6AxMyFFBNfoqBXA8wRySBZl2Pfv0LrpKdf3JZGDrE2RSLfqnMaUATwiryw13dF4GVUASw1kB+MIJiWrx4CSJU3UAbSKdnyu2Rl02GcpMSS+F9U6WT1qBNP5cFagA1tVC8ARcOvLxDS0khXBgYRVSS7tBUIFqjYKCKlUF5MHBdjgrKAP8M/cQjgN6a2WllQJ0TIOJDArm4gIDOeWXTXGJIHiPYxAW4uAsj/wS1Q5PGdSIA7CS7iFcvuPcxT5LvOAMf9CUzbL2AlvZ1KKU4v5Ue+F//NpXMEthHsdnMnPmDwwopQqsVEZwjsnOnDmr7rbWDsX4RsOrYCHD6hxBgEEzxJuKkmKYwaCvU3qAdXajEJn/BRMoKTCGTTYtIhdGWFhMiqrGd8NtvBsKhY9GsKDES7MHS/hpiT4SJwKCujjNtq5lF/oG2zs6kYAqQQzc9EF1MKzrkIJf6NTO4QUtsTt5bt66yuvwgafawcFlOSGW3UrmPvZhorL6+aj2AgJt5m11A3RCiJmGEblsOg/K0mM+feXqtfphTAUEYSKitIswVxY/M+2Q9C7AwmT9WF7A2lEN3xSFnZuprnSdOANsvGXHDrHBiRPHLbi64/bbHI5mMYZ7A9raW9DFCwvQPeJdf3KaCEFu1k7pEKCEFMtgDGxVigQIowXtOgDy0yoU0VgmZ3gGH3rjIIjO++67/5Zbbh4ZGd2162kh70MPPdjZ2WW8Vexk/AlWGiHNbm/vBYe6MC1sJFNgidifyFQLlvJ0zAkyWOGXp163dq3N+TAhcTWyKwjDDQQqgY3yK0trAdENMCOqzeLX6EPvpZjckMfXkbQR1nCsSolA7UjDbcfEAY4Q1OEAabJzrJaBUknU7SEmo+PkxVd3tjYbJqTJ2XplAxxKCuIqPYGhsTQCRRoPuW/fftURqHBfnqxjKH366aeNbElh6nieyTEW29re6XpL+FMbktIlfuqpp9CC7ebKFNR/cIoRaWL7n/zxtz7/+S+qMbcZXuDDKJDsBXBI0j0bcrzQKJQePXoY1eIJdsFMvAPuBQ+R/wd/8AcPP/yw1loKs7I8AGkI8VVOBOIGfEj/537u55bsjlzUQnaaWDvy6+prhfjZJKGBn3LyIGwcNGgTAW+AHDsO33r11fsfuLepud1ifQdLDKQzPQxVzk5OjVqOe7n3Qs+p3p6T0+PXykoKy4oWa8vdihAhOS88b3TtukZaAGiWtkqIJQakTgvTMdwSHxYXpxdt6QnVgoBf/OciPJEh7/NJ238J0RNK6PKc5ItztvwrJ4njD1HKFlWkAI526brxOjIYh4vqFxf4IBCoNmgGEyFh4F+IytYALimKw7N1CIpQUyQ4LZqcKZicK5wpqr5eWV/W0FnduaK6dVlBTcNMQfHMfGFX92qmql4P/EFRNayyIvnzfc+HpUPwfTn9CSkY/sAZAB0AtRhyQPV7NwGXRI8riFmqaOllKVFKflIVwU8D81LixZNOATIN8jfVAYCPYA/g954CVLQwowNw7tjBqpLZmeG+mgrnq4w6VKOypDIzk3SsD8IWekE3eLx5Syci7AvDp7FCNNNxszOGV+LQNmZFe9mRX3akdVCWTbELEtE0gACmI/hQCoJalKI2MrBH1sGZKCIb/ecovF+9NgSgY0AB1xgpCAJCFFSFbExGKS6CgRv4dAh/Y33dpz75cQsohkeuag5cHW5l54oVyxmpuj75sY+bTxO5IYRRzkxNbt2y5fiRIzQW2sJr6UIidamRu9AFQ7sJat6Vv125YoXt7EaQIam1sn4G8m/v32f446577sYTqNIKSMLKhjqEp42SQ6rmsZsaGpHjJljwOVnNdM/pszt37mTyyo4Pj9lTsXzNKisIYe5xha1046FIPnBgHwwt2ED4yy+/iF1KCe7bOtppIFYwWENIRrXOno8VlYcPH+PnnfOBOaJo3szQCZ7bP+PwNy2U7tWqlWuiAUq3i7Br4zh9zi2dtDtfKD9t3Mzk4NUBMw/LcSOTTCjqAsefGjt0gY9e3ECsT1DFAe8Y7kGvBw8VAYSg4Y+T+KwIrmoTpZBsBksQWnW0kLMUEEAzOqYi77h67x134YOARHNG+iAb/4KAYTu4NTU34qcRHGXJsb21zUxd38VLKoJSaeInQfhabrYrXa+uxurKCO/gIGS/dPni+k0bz529oApiMgrjeH7aeOzYcRnMliRXGcPPvB3+kClVx16/arGhwvYkOOvFabZCaUti9ZT0S0KBixeprj+RjC14aEgR5tu2b6FIgljcMyTChfoE2tz0lD6NB+GwRSzafZWC+TgvD6p9xUwIkPuqNFaoAVK1lsuLzMraAKOR5ZDhJiTQdPpFO2EqlWFCLGi8ccWvRMBJihXD1ld9Sx2AUZMaabTOQBEIcbRzOotFZs2DBwQ1kjUz16mSIkO2We8YKGdGHnDokawUoOJ3ISIHKJEvOOiVqGoiUxBKIGO9dC96C85Go6iJkBivDMmmw+hAkIHQWZBaFJFHpQvToWxS/CkRYmQhJ4rU6F0VWmSCUK9+vlFSVikxQ8C9qDf1b73LD5RaklZEH6PwlW/8GnR5BNWI1FmpOMZaKs05bghx/SrpYeGiC4Zmq8GKZSuMLxonQIOxf8GQP021OBMW0NHxWKv0R9/8prEHTXB41dq6tRvWO+24pLzMhqf6pkazkwb8uto79Fcc3vCd733XdhBHE8jpaFtHYSLeg9ceFwNZ+ymMwH2qQCaGasRw1TWu3+k+eerMfffcN3j1yoXzvRYKECSx7dixDTuYruCPyVVUV+GseR9n1Z4+cwZ60rN5CwRpnpw4SOEwi/en31jsk5gd7SEAvsPSq+pqSsx+VIHheCKowmsyCKZXxvjxbbffbtz55Mnjrk2hxIZd77nnHrQwEloFFBYRgIq8OwYCMooD6yuwq1etMl1gmAQO+utCw2zbsD1z5rQ4ihGyVbOB+pO+Qp7sbNVCgiq4RXun9MX4H6EvBdUbNKlqoZHJPn0hcZSqZYYG0dMJUoYPReGhjLjokmXlFrbCDY3+FEQap8mMyipBrERTVVlx8OB+s64uXtBzxmrxkjaAu/HuLCluwvSiCRneBg6X+y5atGrisa6xLl8e7tcqw2OHj61et1r6pKW6BTgpLI8ZW91O14Gxk7/1I18iEQoAJcMsftPW8Nifh41yStGEmKBEEYnwF/AsryjVoZ2amSyzYJeTMu+f1heaMRT7GnFes2rFgw8+QDcAV4qsyQIEVxCoi43RCpznvzITjhw5qh21RuumW272i728tpDLEJw9+Jzmk08/NThwxeTr+rXr4lSh+esrV68iSguuKINwHOdJmQjwnBL6U+3gE6Im/NZbbqNI9JDQcd6wR+Jk3H9J6/Qi7BAwPm361d5o2+++/e0/+/znP89smTAu6YuiWgQvReiAM1SFLTua2uI9FNExKdpjjQRKrfzhiP/u3/27/lQdhVe1CQGzVSYELKCvq6l2ZlHmTC4LSbzFIr86DxRDqwMIhIsMhi/Mb9q8wVVBtQ2NV4eGzEqb0zPQaimR1T7v7Nl9aP/bFm6XuHBmdra+pmLB5Y4lRU4Si91UhUXWVHIIBl7t34It52iAzjyAJ4Lu4iKrFmbT2RP6iJo17VsEsOb07AowG2CZsBFH8bTmJ2bYOOC4GMucgt8YULB7N+U3EyVw4TWtbiU7uuSrPFqEaWtj09Zw8LXr111GNh/zpx6LgQzzWfJPfLoBhv0Lr8/A3y4FN6CZvw0AlTUWAg1NLIzMLo4vlhZUNVa3L2/qXFbV2F5SWT85W+weMU9NXUNFZazUdMqlo4+0CuzRA9/0r2mF+JdWpD//0g88w93Hk8JxFN34Lr+vykWXKmeJv+CJK/NaJKJk6d6VNWoZZL+nlvdV58/8LOUxfHXjXcH4mCqJTpDIQ9g2OTEDsHrMkEByUQcN/3H+r/AbkDE84R6HfyYIumHFiwsVxQsnDu89fcgxoAYP+pwCVDA7aVeJDan4nv0VYSU/Figi0/le0GM4EnlX6qA3PmJp2sQUdWUF/Dzro9X8XihYTMStoHIsSPsiTAGET9WO6D05gZ4+uZfGOVFnz5/zrjmvrqwyCSno8ZXOmNphPk0tLcb3TFH29/UZSyShw0ePrlm1yppq6drWTvXqn6RFJuzrzjtuO3X8uE4lty++Wb6sS2/SABDffPniJeGFkSKj9dBTRUtzkyv00KXB5TTMHpOmF62MmUNulvf2VWaG2VBfe3Df/gvnz2mmaWxlddXVwaG9+94xotHcEmczXLgUU5f8jyaDY9SauMrAnyJ1zuT40WMc4JZNW4H6d//u37m2zEifdEtP+SKtoZkXGRxrCAgPDBNMxmoHAPReOOe2FPGci2mB1XaoFMMvx8antKLGOGhlzZmzZ996ay+jdTq0W73w/Hzvpd5zF+iA1o2okGYUN0UC1SuWr7K4ilbwFXje2Nyw/4Dl4xZlVZmv1gcQqK9ZuR580oQG7dM6IJxvJ2iY0wR/wpNk6Qze+sUHpu0X06T41cxhOMXIDyo8coIGsuLpQBCHAokChf4x6GaNGQ74KrrK8GWuLC9tbW4aTWN/ascH/vns2R4KZhBKZM/r6lZwKXZhQIlb1snQzbPmgmShYe6db9Ga+8qiBZ8WxWjFjhw5ZBS0s7sDx1QsFuLMtfIkhVIxAPdAKA5Q8osP2iG4oV1EAR/7LZAjEmAyHDVJKYWKK0NXhX9W+KAFIZoPmk+dNOhgGmbSkBlhkNOwLJTGJ2JhPe4RUGwBb2xyChweinANjppDcMTTnN714GCLI7kqKva9/bZ3s0nI2Lh+PWiwcgqPivAnNHx+7vuPP2GkT+NiSFrL5dxweOrmoTcv5EOR3gImYxcqqKvRoixlYuq9cClHLMH+qiojn4YKZVMqHyyryVYXJFGBQ7ylOV6moVXFKCj5xQ0c0O6TEQ4r7uE0EBtcTZt/vFN+ERQ4toMZbuDCXTtj7YZd7/V1jWk3hVZmUithUkhnjMeI4mmPJdHTMbXkWcfsbYQfyIE/cuieRN2+4AxNM0c+N68zbNmVcU9MM/nDIfA/pozEG9o4J6MM2bM4NkpkWk9AsBSjiFJFXpBmlIS+sRojgdFWfP+3fymIm4/FGxTOKw9y/wMP5AIGdYj2rnvvkS5ggn3P2V47Ke4w5O9u1InJoWuDugHmsxbmF4ncfgu64d6cwavXDBBcunhZX1VkJixjtG6bi0GIuvoqN1S7i7m7i1g5C5dcXB7of2fv2y4yaKirRZivPBohkYHeBfZNjE8FW9P9xviSUSVsZyOQhKlg4qYijm6EM8rx0XQLsDKvXb/e7blr16/zyZGmuIAcpZAsBaUkiss0JjML7xSnCo4jt2k1JjZ0tuZm0yZF3aZgaBJ8pVXnCnIEaBQY6br4HR0fjcvLThxzCRcgDz30kAUb9jOpKFmOznH0KeFgbN4qB4kMQEfCr6Dti1/8Iv8LE7gpri61EyRT6ezscLaDYE5Zc+XINN0Y+mGS1P6hvj4TcDJv27zNvlW9Na753MXeOdsABt3iPtHa0r5seZfDcXGVK8xUIIS65D9VYVxfpQyAFhrWZWk0VYpNvaJD2aT46gVKENC+Uu2zZ8+dPn2qp+esRmvTps3wtPRJB9hALb8sWLLVgXfWFMFfV2Hl8lWDQ1eaG1uGR69ZV7pl2+YD+w4ODV+t0jFoqNXZs/pQOo6J/7Q3SBP8ZYSZDaOFNsJlEPyxTM5ICjkapOU7LCrj9I2U33TTdgfM9Zw7o8HmXLgzRwlZSYUKEbPDc2ggBdMyxalB6ZI/xdmkk9wwGYEkla0IyZo3MbFVKbF0wPQcIUkywjcxwcEZQDALqJkfuHz5dE/P23v2+Gq8JBylA31PngRKC2pi2p+As5rf+73fs8E39z0E0zt37mxsDumIv/WvhBcyM3QpXIOjePhESHR3dFtnPD46uuvZZ+974H4aDjgxMQFaLbLRPOv5WG/AgbJfbGHqGhWVCs21E/iGNM0Grfvpn/4p+CQ5hp8C/x//43/8u7/7u0CZrXZZdXdHJ63GfHZBRYU46ParLBV94IEHsIuANNU33XoTT22i9uSx4zDf/fobm9atry6rsF+2rKjwheefPfTOOwtz00I64X/s55yfMZhVrEkX8rj7VyDt0SjFsFwMjeMYvwYlyd4luJXAGfyLnCFnKlyMMwKd219iDJWGCDT1H9wYYAGS99g8LJ5O6XE2AtAlZaCToMYpgmaDIvMzoBWVFuncl1dVYAUmwEftBilUqnYzRdyxF6YqVABWOol4tF9CVs4wrRQqpyu8LuZW1jS5Enh0am7ISo3F4qqGpo5lKxraVhfXrVworS8sLouDg+h6Y0tpRfW8eMfW8MW4KliPxWEcEXOmc1FhAs33PSnEj/SYe4joP4/6R+CsqYgF+jaC2ZqXYnOsk8X/MTzvAUCIxkmzZCoAD6PUB/oAqVRUm1+W/owd0O8++JdwCACkVmZsxcBHXJhcYkbOsGqE45ABPdfxV/lNnaoA+BcdgCByvmRx7ujBPZd7jhXNjZRfny4vnq3QdaJFc7OGmekzzdQ6qJEDhC2b0n/UfhMcSYqA+Qd21He5n/uinHyd+W0mwCj4Oi6OP2EjGA6Ur0yc7VwdGsYpa5vNaFmpz8M7ufzIidMP3HOnS1gNZhlAdfrttdERv8oyw4hZp2e0dEIK51l7N/zi18AZb6MLYduRVk9DbpFSXa0x4wXDXj/5U19hp4aBDT1YeqfpvNB77viRo2iByVe+8hWTcvveeburrVnbrZnIGDoTHck8jKlFUwq6/QgxrIB8Ulq3bs1v/V+/+eD99+mHmU11SJGh9C3btm/btqP3Yl8EvfxyRRUOiAmdJDA1PXnXXXeI5BRn8kDx+VRdcPnSSy89+rnPmQkUwrI5riDz3Jm4+GbqAw/VaMhJnoGrg1PjU/whnAUkBhbdUoyrQ9dGYj1kCqGsTD125PjR4yfoantX17rVay4P2Cg4SrfNOfhq/xUfNT4Rw0zBzLJKAayYh21YZ6s3YoUeVre2NJmOnp8VsKJjzkQ4cXsJ+00PIP6FrV+uErZSWK4/odR/5bK2HgO5O6UojBiatgjWdbEMavDDMpMsPnuohF+MY5cOFKFLzg1j/sShOE/iHcL444WjmxgX/IwopcWhdVSUc4a2VkZdhCvAFZAZ4lTccElGoLOju72jVaUG0YoLqXSsuxZcCiItu4WVjod5IRugjSvBXI0Gv1avjnNBeHJuCnViEoLzrmpMZggIOXO2RxWEpTpLi22bcXmrM7W17yjlxg2E6grxGeAbprAm6dZbb9Zd4fBhi2M8JOBOLkICDcE6uGl0ANQMFcxHN0lI6jjBLZs203P3eBoIpf8XLvZy5qvXrlm9chWL0CITiiXEwDJM8d7BQ/vNO7Pkm2+J7aMaZVWcPnPSsjQDFhR12bKuk2dO463+KiFOTsTeelbj8MPTp2OclHpo7nGbKpJIhPEz81pkuBkUEyc46A9DsIWUOQQMcZOXASDRKdz4TfMDytITOiBnFitBEBnHomBY942Dd+RUlkbhFYWyPs3aDWNQFhVrNMQ/oilrt3QX3U/nLFPLWFGk+UhFohFBJukgQRuKw/DJ+gYBBJIg9qrFuRqW210duOIeN17dPEK0FGWlhtS7li/jnXghG7C1o2bwbMSlErgqNlGFlhN8kCkk1TVEnoaG4CuyuV749V/9+6SoA00nlFGrbd3QWr5yGbKV5E2snOFZPPof1nr29l60DoTIY+RjMiaG5Olo79rz9tvr1m8eHBq+dKm/Y9nyc2cvGhG5fKlPC42VMKCCHmDRz1FiMdqwlRQplg4G1RFgGeHmd+ShahDIeGOTgt5V58EgD0mMXBtldTD3NcZp0mCwuuyPES3ZcE2o7U5UrKok6Qmx/GgMKuSQC5ngI5yz80hXXL05xFGXa4kW5qd3bNvinkN4ij9YV2NTCwOwKhEJ3BkhqZwN0BXxkBUDRoO4D3tZmDr4n/vsowJ6mkfLiZ9IdFQgDEkW2trc4rolnxDlk0rNu8kmKpUCoGxQgrCvra0tDbFvuNzQKJ4bH/JJqBraU1llcuvShVh8ZRUpI+lsJ5POrtVrqQs/Rft11RgJEsxIoJ1QqBewWcuhpHZnC/tTpbSCB8QQxsOihN10w0oYPJcha224v+vXORRwfOXuNUJKMbaf//mfl4gumKgCcL/UZujqVfG3UiiCO9EDSBPCa6SZLDoKLMVQHAfaGlvhqVNLpwmISmgApGvw1GjoACHwkZmA5HTXGWjPP//80WMxUQ4B6+M/cvutmZMY6+hlmRuam4Q+RP/1r/8hk1M1inQ7afXWzVvwAbbB29SNlsEDGqff2mE3eSX0ICMPthBxBNzpakm/1JII6AN8rGqVTeOtU+1PNNIWU1i4AQdl4alp9GsQnSs3SKb3K5vMFLLBKML1WMSFdsOrMDQvgmPaCZiHI15c5Pd7zp0lIEzTs8JVNWqkv/PYn/s1j0RXtR/qUrX4zComfj9POuMbSp12CufMcBHJP/2n//Rf/It/IV376tdYsV/KhpO4Bx/oYQWU1CXRC/WD7SOPPDLlyJ00Ik8/TeL1X7y4deNmJ//XVVcdszlj/zt9Fy7wSmJcDp3BRjNj9DtM4d0h7JQYtpwVBlZePF5wW0w5n5bkICo/Ckr3FVY0x+NP6FEqGQS+egqRatturLyPjoQZIYTn9iyvURZ1iRnEHShlXJE/dTlyFRkHKqdsMCR5ocApPUhWo3Bdei4o/vXFPWAOqiksrTLvPDmzMKXX4lbI4vqV2z5a0bQsbiNxp5jDM2qbapvbq2obZhfCrcfyRJhcn0vdgHB3lDyFRLBITwruUwcgR/9Fabz8PR0Aa5ZuRO0xIZNYFyk6XZa3WXCYJuXhHGijKENdyvaXX/6i+I30d3sVqVT+iR0RIBWX9Jy58Jc7ALl3rO53hfueQj/4NXVEII20MEBLgOQzZakDUFFcePTgm32njxfODZctTJYXzUUHYHFm3pEplTFxhzo2BWEc88t2cY9i82DETTpZ2zXXLIU006q2RiLjD33i9QFRUE6DWcErcWp5WSh5Q5y+pxTPTLW4F9bEQvkEmZUSqUiXB5ypNJsKpqq5XIaTW73MbTYLDjypK5u1c/fakN1QDZ/7zKfA0aBQy8GBfg5EKCZzfW01n+ATQ7tw4bwDQ9ubm04cP6p91LfHHHEbA9yZbomBmOrgwCUqjkDo3HPHbYcOHeDfqKdhTsxYu36Dhqy9w5rMabuiRS1ir6NHjovM7NUZuNLHQj1ZT9AI4WxceGJggqdSL3L8aeZlZHDILWZmEjwQhqqF6Qh5++19WMdgvvSlLxk5JhQuyxi/DrxO+Pnei7b/GpaCc1lFLAjhfTFKxz2xNKICu850YsMQBTvpoJEpnfUIfKPngr2wEm46IF/HbHJyQsff1zi9zVXCKUglTXIB1p8kktkuhYf0i9XapuraKpjzjTDhMKVgPjKpDd1QRVYkWHkJP1kcCyrMClIhzFHQfCFu+BP88pII1/ypUZC5prqitHChsSGu+83tFJVQHciqyxqL0hR2T1IqjOpetkqluXb9c/XSE9jqTcBN1YS1e/frEWmkUUh6D22jV9prVdMTVeMnfPwpPzSIA0p0AFg+ZeWa1SYEqI0oxSgYer1PTgiiBM067QVtbfXCj02btmzevLGxvtqy5IwPi8A6wFWh0c88wWQaojqssHjp8qVegYcM0BYxYhECNVKIgkNmpkQUaU3k0YEknVdeeUXzZxSGdulsSDdHIZxwzCsgbBJAtTM0B9dilxUH6DKgiUANkZG6F55/CfDGxla1XBlIjaMrhqanrg6OGAb1wBaQHLdQRdgiSnGlNNZk50+n9HQvWxGLV9PBoBgoEb1+lZWIFsQimSwUkWF5R7ca4eYBjfURLtySyGIxlbKY46FvVtlxVPybPDJLlJPg4MZyMUQeFqSsUkRMVbxkyLgkv7pk9utdZ48WyQAUAhGiMbThwR4YeMqWlntEI5i5B+fSsr+4eQDySCj8T//8Z2iS8io2vOFXqIaME6dOshnqjjuxsiJt3KytN3zfWN/YZNsS8z9x7LhzaZZ1xTEgZlYNAG/ddvPMnA150067XrN6g9DEuaooESFBFNnQgq4HVVwM+uGBcjwVOKLciDNTEU9AF69lIG/S0mOTJ9MJCE4pZRjPo3OZDd54jLLGwNi8DijO7t7zln7nqjVrLD00V4IiAwmKIBDH6QEJQcMDpl+JomTsoyjqMjx/sffs9OR4dW297nuWq8lTyFy+PIDqpuZW87Z6eGIgBMLKqCbEQNAbdiADA1uxYiWsHnroIaVMYqqaKRKJgRsOBFFxtk+aVMITGJqXkAgxspCO+fIzUS/6kXjZ1d1hPg6vjLMSIfcXejk2jnB9IUQJwBXBE56vc9WaxpZYkMpiUcSoYMXmFVEdi2JvPAgMQz/imKYRML3QJ6oPE/yniCzTO/+VPRdWyAYCGZEgaLyMT+o11PTkk0+qSAbwxbuqZtKKmGVZvmyZeAsTIONXKazjHWgI7iFfKUCQT3yKDPXHNVvOI0NvUs5CV8mQryrg3NnVxWlCDCbUOLoTdunV1Qu4AdEEvvbaK+CsWbfWolvap9W0lZngDHeJMQ1lGRLDcEKHBkVlWjoA2MVlo8t+H8WZgHSabNZieGxYB4aIYagKuPFQqPOnBxXEhBBVQBhKtBorEAJJ3KAt0tHrk0o5ffBpHQZCXjag5Kf/8ruDU71Iw1IkQn6lFjRCfP2BSyoy5xazNB3tOC8bdaLGjCVauPkZ0T9+Ss8HjBK6IIDTtO6Ww/VJ1wKlHARZU0IiFvrT0i9/+UegpxcHPa6IiD3wZCCwoidUC8JoRy/uwdY2Bjqjga5vrKOBLjc9dfS4Bra9uUUjbcP4M089eenihYWQe7XhbR2AZLt6WrHlnUNQI2LxHAlZoF48Usjdp/ga+wCtLYkeg/w46cF278iEAJSAVVyGDNOgpk+WugDM4rzrRSglG8gp4gZc3G35TtTOafoElEftKgU8Q/ObH/AT8uYXiufjAgP9CLnMMYTB4pIDTKyHtMC0sKQSXOsy+WW76GcWK+bKOhs713V2rSiraVgoqVx0j1V1XXFFTUNzeyH3nOblFuasTVoACjlaD1jlJ7pBsdgnj+zntNQBQEiMrgevBPr5AyR1ACIlxe5LHYDMosA5tSW5A7CU7Ye/+Po/rQOgrtgEjFpN0qK1/kVHDuzOHYCKxemK4vlKlzEUzJIi35fJyWJlRFjHxEhHincawmOEsBxPecODsSCzeOyRC6LPxkEzEDXqIiroxRIK9mg2iftl8n4BxzdWQ8nlZwuAYyl759CI/vqMGfY41I9z4zkBkZ//ZGvMnx0xGShxGjLPzk0bYDJG+ImPxcpAoLiC3vPnOBZWzCE0N8bYqlrUbir1bM/pw/vfZj7O1pQTBA+iOCg18rTIRJdRGDEWxx4Uzc1wg24o27//oDDxjtvvPHvh/Jo16+hnV9cyU5cnT55G45133mVU/6T7Oko0xzGRgiLQmDZnAo4BF50Nxg5z+DMNHEBXaWGRX2hYmgi+gqfPnBWkvvzamz/7sz9tDA57zTZAkruurKpxQ7ZRf14L/sZeYe7kLF85S7+20XsYi8YU30xjFht1do5pOgzARJlevIWsZl/hAHJFSbEj/uwGHB0dyR0AB1RYiAsf9pjdlBcS4dbwhPNUCySJDHwysobeLzHxgdKJwCO/DKiWQpGyCoEmpwdAZeGplDzu0pBBNjibe1TEHI4mzx05dbXuq5sdGR6Ej8wK5odkpVhsg8nwIWK+lxSwy1IDPMnqp6GEDIepFMzDA1cY7T7x4osv4p6ARAgIVXWJ19ULAUoOQ800/6yXSCugTbUg7J0W2UIn7n/++Rc1B1TRCf4coWRooMIoO2hZajA0GlJTbQE2eDHHjuHgA4VXpMkcEKVeL3jr3dczp06sWhFnXcggGwLlV681/WyH8qACOXLSakWu9F3W3on+NWdbt2+HBrdFtfg++a0lBAom0rVZSrn6DeFopOcWtcqJ652dXVaI4Ju5IphY56ZS2mv33aqV68wJK0hehCUdttTYn94zGjDBRqjqMMQkVcxFh3BzKVWTAlr8KVsmGTe8BLbzscwsVR0KwGyXfE52RCqFLXHI1rWsmxWDH6TR8xR8gowhUkgKn0lWZkCUghLccNijar9kBA2Ye1dKYiZEihc9UDOWwMIN0yRCiRb5E9v9aTWvRyl/OiqAHyv8P//Jj2jpaeSGzZtYe5hlRZmJG3znOJy3RclQpRgHZ02elT3WNa5fu5b2WA25YsVya5Hp1qkzZxobmnsv9T+486Nv7Xn7I3fcaebWULc6sMkSIKtxzvWcPd1zxpzA2MS4cUD9LRMohnEsdXCAmlaYR+/vu7x+47qLFy6Njo/UVNWu27C2qaHZcoCxkXEp5aWuWanVRuuDWwRAZJQSfF1UxYnBcgXIaDqsMvLn4DVLLofN7xj7Vyn4W7dsxzt5kIMR7MqDOtwhgMw49OYhW9pvzN3tT0PDo9itlOp0AJQVb5CZySnv+E7MwVoTNKUlUrJEzWk8/fTTugeEYehd1H7zTbeyc9IlddPNZMO7yU/YnD7REoHIjHFqLcDkI6DEsyuSYBquuCDOEAui7s3X32DM5hCa7JJZtZq6WExlJYOYSGZUnDjTc+DYMXsukEz/wBHrkz31FX2a/vbIRslEkPxF8kRb4CMl1MValzilPrgBQy+EztdgOG1TRIAIDWzBOtgCqyBimeWv/dqvSaTKUjAtw3SW2V133mm9I2QE3ETD8clD68CXjfeRnw1nWYSuz8akmAF7qs+n4J6ZdDxBkWHsl15+WaKmzkobCGhDYgK9VMjr/rxa8hA6U+Mrg/2KOM5s+9Ztd9x1p41QlhjZLWwiUh+AP5cTPrghs4VtkAGfo7FOkSAIC1F0VXjp1DMHqEEM2pgPNxpOZBgiJxEgCrHyc7vSuSGyAAFp4JMsNZAiD9149NFHCQLbCdpQH5j4iRseJpn6NXFMkPw333wrmDoARqfogurkfOGll0w3WYRDbaBhOSnGah602V/44qPAwkFOjksKDbTEmZF+73tPkBTcIOyrLrd6DUa+/PLLpiz+5b/8l2nX9BVfCdowBcaqGsmEQjrEjWqJJPKnf/qnZG2Qj/JgmonIphZ7vsdHrg5Njo9pByZHR+qqKl958YUTRw47hcRKe+2ZrReGDwA0cG4JEFAeNPqldSTl8Q4+KTDS/CmcXWGJYze9RMCrsGX31kWyjOumgw1uCQ+cJG7y1T7XyGNHMYmAllbTaPihL2aItt+DON0kET5M6Iwj+XAjLcmN/iQWZW+ruMwZw2yG/kxclavYCqTIMB/hi2WgcFNKWcOc9iyYr1hwW4A5D4QUly4UVp0fmCmpaKyub65t7axrbi+raZovqZxeLG7uXG75W01dve0Q6koViUGt49EvidbIsxTc5z//X39j+VN6EseCvYARJa56R4V0/F2CE9mW8t9IfV/ih3UAyOVvZAYg7wEQCKo/NgFjdcRY8+VFBUsdgMoCh6ssVJViyKzG0K0deI/nfpmVIIOUCQjmGlTE8vAcF9PA1bb2dpoPLKUSGrEyGpIip9iWI4M/LS2QASiuUvNkXIzCA5t9HZjsRU5GLQWeUSQNk8cqstIYSuTM/SrOp2E1BARVsmkROA2ltKoEYX1wd5e9j42z03GWA1dg2IgaMrH8Z3/fRVE1JwkBayz373v7tpu3D1+7qjgXwTkDC084iKLQCA1+AOESmaTQ7XuPPXb//ffDp7oqzqzTIN50U5yzp43Gopa2Dl4OIcZBYo1uQ521eYyPrxCT+cUT7BKcZTYiQewOGq+rUj1RXoKVYiN+ik2F2JZnGK956KGHtA7IwXAdLVXg2IGDhwXxr72xW/SmHbEY1boIm6Z5dYOGVkinKasi22s4ZOgZUTdkaGzCPk6YWDhnJt8KRm0nAfFvjNnRk6VFxa7JodvKO/eGySiOY/xVdnR4Qmqk4KEGyIc86jBtbmFWeIozdIYH8yiSGBLbpj3oYuaqI1AP0SDEnxjigWQsDE5uSkFDkCTe0hSbO0mBo6u0PrwgOj9ZTzQHGhqfzKXLSLKUBA/Romp5MFUPB/4qNSohkWuib8hX0PoIkJFAheCsRu98u69wyIhlbGmXnEFP2qyFw7ihbfrWn/2Z9WPv7D+npoa6aEZzPKAnrI+kT6g4MnEPadZiWOKhoUC1P8EEjez4fNAwB9NQAYhPmIyTA5cuqld1UrKT8UttfPKLcJlxD8KAGB1jL8ePHvUipGltbxeL6uTQnI2bNsmweesWeqIFRCn1jlbyrjshDENGSslFHJYWq+Jyn0385B4zG45LQR08Dxw6bBYPnv6ElaohgASRDEsBBwTIQAw+CI+TbKZnBRssCzMlcuYepSCgIFAkCJqCHomLs3HCGD5kIFKUkkddIKhFWV/VAg41GB4dNomBG/4EECgPcvRJsJSgc064YHjmOQge74r4RSyd9MIMQUCXd2VVF7XHDHlakpqmQ73ryyiYPZXGkSgRjkDNr6+Fv/XPviIuUZKR4zgTQg9sPA6edbw6Ddv7ztvoETuazRBwNLe2Wx178dKFbVu2Sjxz6jSE7E6xSmHFqtWHjhzdum1He1e3bQDKcrJp02+jVtFYolF3d0ZzE32XLl20/t5MR1+fGbtmMaLzpOzcciGcdZxjE+WV5Z/51Ge27djW6jbWmam2lraBwQFdYtPto8OjV69dlWdyykxHcNDqF7yzVl9raT0l2fCz7FxQZQLXnhK9YDSibiDuBrmKHBrPReId5P1JbLSW4VEguuvd+M2hg3ZQna2tspukEq8NnRJVQ2OcUrxz58M4Hle7uTcujWRgK2EcOHxIgEvklBjtEX1a3xe3ohzPOdVInLmfzW+K5tUVJCS3QmOw1JgK81ZKNkLip2AIT+Mc5ql8RZoWwpoYtJhx6+7ssu5cfltwuIOx4bjKnmfnmq6OjVknQz/gnzUMTOEyFiEZTHwT32uZWEXSsGKY33333QyPuoOJFpmhTSUMAqFCEQrqxYNkXgxDkO/P7Lm4D+YKPsMmCEzLSqkDwHtZYypmzTbGbOgb90f3wqrTrbTsBIukoK6pNlbk1zVGp4VcoGEdmiKAy8ZieHbIw1DiiuXLr8/PGTYT02vGZMYNCBw7dkRF+w/tN2X7kdtvtwlp203bLUxYsWqVUUZMQAWKGBZBUAAwn/7+kxjincGYE8AxfCMFc+Yx0ZvcAWLlJw7eHMfwx7yBsmqEG7FSMB1QVkANWCCJQBtp4vVcKVbLD0kckI7VGEVhYI4io8lEYEsu5+hYXuRjCOY7PQNkk0veP/aJj0vkcZQ1Ygjyf/7P/9n6K+0imJQKFdp1KJG+lu7KwNXTp6MvCisuANVUBdstfP/a1772r/7V/wEBYBEltiBHCx1oBeHSHw8vj/bQtJERCP/bf/tv7WEwHklF8T94WFhgIkLg0lBT7cAqozHDg1eeevIJ+zgnx0ftOmVMPBi1t9Le2Ir+IjjY6KE/2AIBLxiF26r2VYqveAJ+On7HqLaxYYmMX2bF4TwFWhqb4xwVlfndIXzQdAAIS3AO+bi/K43dqkIHwESCKriR1LOwUA0KgYMaMwIBKw0XSYxv6QEzo+1UA1jZehLIBwIxKmOVmsd5hZYI6iIUlpQK4lU3M19cVdd5bXx2dHJ2sayqvqWrvmNFVWNHQVXdgua1pqGuqdXueKcEwUA3zyrzIueD/eXHyFVOWOoP5JF+iVb1+82IeVnqAERitAvvdgAgDFuPnPi4lH/pRf78LKUsvfzP6QB8cAlQngG4dOrY0hIgMwCWAE26aejqANOgfiTFWhka0hgRnBkXiXMsbIRHJce77r6btme3ZhaX1chMq8mQrbF3jkIYyjo00kAdP3WMIXtnFOATYnbXzAr8XCMItIsNhkbNzHImQCnLacjDlDCcMbJN8Y08qpOHOGhWXW21hZ3HjhwChM+UaJABwg7/ha2OAaNjxVJMFFRXVezYvtEGW3VxuVDlJeAgg1AbLVK8G4yHpP39B/cf+NTHPykP21+9br0qYIJX3/jmN+2ds2Zv647tSOZ/nO/MIYsvJ8dGX3r5BVE+1wQHzgHCqqDYfuHvLCAvfD424jaEcYa2ePGrZ7Ju7QZjnMgX0LurnqtBgb0QbNkZ4s+98LIr2Sz9g6EQFcK8md+Kquqg1Eo4u1esfQmNdet2AV+tA2B9ATQKXACsra2qMTStiLrcm8sbW8xpCZANe9p3caElQHALTqYmI+NGH9CCRWGtaWEzjtEKx14jHKsVUYUiRJalKRHVKvKnIoiV06pQeMopm2AjUx050/4BbTH4pC+PzDY0VlfZzFaRhcVnatRsnaKWVgWblNamAJtFnH0sF60u4qaBwJKO8EFfxTQplZOIalvs6A9p4rx5BnngKTM8/RI3EUsB0C/RS9cQ79q1S5MRJymk6ykoCSGSApjUSeeTyJCjFrUTsRhDTEjlLFFTF6JQ7RNtUS/18GfQ2NAgM75Bm+7NOcowjfqrGrRsRJKxWr1kwQqMguE2EqTgGLngA5gSZeDO1eud4djbCisREdYJ4WQjweeff16Lz9WrgoQhYF1ragu0IIUqOnO6h4GbRbNYoK2jy1EZ8M88UcQ7fCAMMvwD5XQuiwxIsAdAsJeZCRlIyqmId4lIzvqANKCUbaiui65suncICUSJUVhErHKiAnO858xY3dltRVN0BggFqzO07DrARB1yYKVGdal0wrq3FKeFvqWmUEEpIOMtlNCrXgXhL728LBRDeggl3RmldlSIrSTKRj2sngNK1Z7C3/uVn6UcgOYLvYWVy7qX9w86bDhWRuK7aRFwZXWphCmM3r7Y9nfuTA+SrJlmV+5Y6zl7dvv2m2yJZcbDI2N33XVPS3vbpb5+zZ/mFq4e1SMMN71TWdzHJlWoneMDX6I/Z2Zmjx3r0RegYT/1Uz8lTFcEuniNMKXQCSssk4hB5klsisUFA7dGA7XzMYI7Gau4oM2F8bY9588ZGwxLY6XLlptlISTsVhmsaBsnRSTQAJmQvMNHBsHK5MTYhbM91jjqDxw7dgKSd951l3NXqJoupg5AiKGwBC2Q0cZ0LTf31wYy6ZrShD84SpnbESSdP9dLNXkBtOAGIT36+c8ihGb7k9uFDHHyF9wETKAndkSInIBs3bpFTquA4I8tVqh7jHiC5sAliyLNAJCLKuwJxhObsYSozr6Dm4EcLKXrGA43VoeZmiUvvnITOKwW/V72iQ+wEmXSbAyHsPZVTjEuNEBWlhwRhFcI5NH8evfwKciXmX+hecqCphTETJ84gmDXrqdk5sjEjqiQ7pfeww0cxGIg+NIhduXSAFFW1lT7yg/yU7pzqGZ1fKg7aFSUDUBZZ5IO9PetWr4CDkrJ1tHRhjl9ly9io5EPv1b0TE9Obdy8yZSRrR1r1m0wvxxOxJOQVzBYURi7pjR4ahy43M9Vha+sKv/7/+AfWHIAscifvB7WcWpqMT5huI7s5JSiLvqwYdMmQsRYbkuimXSclGK43W5vZQmL4n3qU5+CP4SJhl6RlE9OkQLEhD4P2Noal8WQHdycMODFIlqlOrri/B8dD+ptbagZD+/SHaRFcNBGBU9lPA+jzAA89eQu5klpicASYRVRXYMupiNg/iM/8rdwSdUZAfuiHEkhJzmyCL8UhjRhSEyPP/44PvzDf/gPCZd24RU84X/27Jn6urqKsiJhrymul57f1XPyRE1F2dTEuDjZsL6FN+ZSLEhECxvGjfzgobrI3a93Gijdr1r8oiXeNbvhjiP0lxZhdvoVfqRZU7NfhnPEIrp/sUSHQvoRkgMLpP+cY4YWEtHnkSGNINioqs54YhA0eXYEqggC8ngyGlI8OWf+9afNWG5A8+QgO1WU3LeFR5a1poU9FjHDeuF6UWVVg+B/cnph8rotARWl1c01rcsqm9qLKhuLq2oraltq6pvKXc3jYKLiUof4zcD6xgwAPgQr0iKftAxIWxlR11IHwPt7+wB/nT0AUdONJ9PuLy8f1gGwE+BvZAZAN8xeCB0A1S0tATIDUFNeagbg4smjizNDJXPjJYvTpXFy0pQ7mXQm2S9bIwJS4ygoMK0mmqy0HCnL4lW8UCzuy+NPl3+QLA3hiwygc6ocFyV3jod074oXlcZoOuB0Xk6uhnWrgnHRDdVxAvRfZnYBZ35Y5CQnM+ejmLbhFd4McI4FWPWqQrvJMLXFtplZqumYfTl5D/Y1Z5FAOk+Qgz198jinx6w+9rGPDQ9fc7iOq4QcLIM67UV243DQNnm4F+shteDIN08o3blAZ06dPXb0hGiPukLevch/8Id/qOBXv/qLIBiq14BkurgUJtx7/qwJVUCyB87eO1sBJqjFYIdPqNNaIYcJo4hr4lKw16AhfRRLZMaK+JevXKG5xhzoHTx8dHhk3NS3hbhhZanPIOjHPVN3wfC0gMqcOVEaJRD1ivJ0SxwOhicWCxmjNehrmZ3ikDQDQPpm+nQA+BbNsRkAHQdCIfGsD7iBk5DkAFWBdVgBHy/osidbToKGnl888SeiUOoFHISAQ9x+yRfWGEu1/Kl/Dyvci+rSYLwUYvWAo+lfs2plfV0FgUJAg07EFBWvtIwYCI4GFN9kRg5tgRhksRF6hJX0NPqximt6lDWERP1oAlRJIb3HenoP7YIk3YMM7crWqpPjmGn1gg9PGe67/0H1ypybPBxApvweiTRZQUqYZulFayXjN3bf4YNgAG7qVQsMwQHTk4HgycjQNae4eJHCRvDBVxXhldaNTmrsaBEFQyxZIN+GeDV6tHT4QIH1ABVB0dv73pFNjWaKtFDOLdclcLKFzPhgd4ZRLVzSJfRrIZDq/EtjdQAIVwCsBYjbJNL1ydDOiKEXS6GHImzJnFG1RB3QqsqadHfCuK9EAxPVyezJkbRsmM+cVeF387qYgpMTyWgUIBFW4kqpijCcsfuViCIGZw4b4VhHLXEbSioCUOAnXZ6MEll4UZeFq14yh4GVn5L4JXq/CoIjswyY7Nd8CIYgB9/0n1WUYWpIpXhk48UpCXKC6q/97CcQqXr2TzyWWGGlrotY4Y++8Y3QmAfuz5zSrBLSspUrtmzdaqiWBlu7G3YShxLsg1xX9zL7LSzge/jhjzmLdN369WfOnrOhSiI4OEhCEALNA1ecxR3pyPBk3p075xaBPipI2BJxlnSFF1Jk9gJbLAAB9um8DvKIo9y04K2WOjY0OPaYs3bDnFNTlMUgi8A4i5jhWtbd1tWJoZmPkPF4hwyAgh5aQlTqRY5PBGxPnsOtLAM1v5njXUuAYKLNwEG9o4yn/ExI6Awa81YdZqJItv7LVwA3GgSgesiDouC2IzLNvTgNkzD0qT75yU8yeAWxFNUwQQUW+Qo4ZfLn4cOHWIjFLeY64EbzPFbU0wDTjqiwFIoaqY6bkoFDdCwUjwVzD/GzKILDOnYCH/BB9qdf7xjb3Y0N8aAXaVBSO1rkcSposjFXkjnJp4s7QAt25aYX4ejV2oHjwXmRqDwyMBWeiLoburDuxMQiDgiIMdAUDXzUTkyEC4gakeOFihP6/FRMtccBKekOP9BYtQzaMJpjQkkVIPC2pDYxPmoIzsAnxLDR/JLpWJj7k9pYr64IohyOYLW6iWXd66sjY4wuN5zwgYmjJVEXGuWJrZsxzqfe0+6cPH38xMmTTmMweGPIn5jwMEtHFR4qx0MhSnujFJTMAGi/kYC3zh6V8oUvfEGQjWn4g1iaQEnkRyAWXTh3Dlij78T99t59pPCRO26Xwbp/v/gGDqSAIkpnCmmzs8rh3i//8v8GZWt4NGaQVBdG0fbTp08SDdWyE91J3vYGhGdJ5yRAw4IfbNGL+OpX/yFkqHFDYz268M27MN1XNIIDMSoEFEqh+u///b//N//m33iXLgMJ4h4MB6/0r1+z1sT3yJXBcz0nD7yzRy/CuZ9zs9PiaPtyReras8wTESVk8hP8Tt4NRVKC0vQnznikyKBPEJsClYqNrxrceBcExOogJRYKrKuOTVzuuUyQOUa4afvSsLxZdfPRsTFLA8aykKODEK4IHlHFou50rgu9SPMbld54ltCAoceIo/6Gj2StDhFBPHHgJryTl7F98cbsrSDB6qMIOi0bKq8xtj88tTA652y/+tK61sb2lUXVjeV1LeU1jXYFVFQ7kLrBoqAxJxH95Q4AfPAJL0wFLHUA8kt8sV3yxjzAX2cPAOoCWqL9vS//EzoAaPvgEqDqspK8CTh3AIoWJouvO9J/ygyREyyIMiNM5+kh9pMsF0R83tm+kCXLyBQ+3ZaNrmpwleIwyS6WoKRxFh5VEOCdB6AnazesAceLFBorvz8pvxAEQO/ky9WA4IU1rVy+gvuV01fZmIOCmj/WRHm8h2qkcwZl452ErQMD/SYtZRYaRnAw69DkVXDmsc0AIA1KrHvXrqfrHRpaVVJuyUuawwHQV7QArmnmBj0GR/UZjHwZa0DUiy+8tnbtetAAN3/77LO7OMwf+7Efq2+q5xygbUibLfAzbB+ZTFVjZCxA7ajjhNWCpcZBHB2Bq/ynZgv3uER+cvvNNyFWHkRZ6MZk2Jd1U6IQU7XsjpsS+zoI1SFRmvq6+mYnI2sHVU06aqTeqEjjdWbkUoc23XTLhh1sYlKGXTtGJEy1vIrzDztKY4Ioum7L1+xUdBSc0VdcaFGxTcA6AJiMOsiQAu5x7KRDCiSFWD0BCBMNBPRV/Hqy1Kg6pycbjsFQpYoTq1/QMES04yU/AunQtFgrH0Oq8pu9AcHsI5eo8bI/YfXKZd977Ds6S2SkyTCXqy688mTjgpuqCREEiQ5xpCQkCAdTH+o1zmVqF6NQJBbAeZWiywONynSjueK++kQBFBfxi7ZxlTrJTJoe5KvIWnnNMYEKMNQIBytbte/ya19kk0cR/GT6Os5z0zPOpCJiGqiRgjz4cNbQqzErNvJB8y7FEm5UqJc+46SKsFoGxSXK4/GiaqRB2JCllg4CyFm/cRPRRNzi8J7Z2Rxg2LJilgPh1lBo9N2rChkQLly4KGd6n9Mk2bdDoDYjUMtckZVUqBsZm9CjoMa5FNKIyS804AlhFBEN/GWmP85fcuIICHBGpkQkkLsAQ36IcQu+4hI4fp0fhFKIqRc0+ZWiPNkzAI58daFXLbzQpf6LskEAEI9apMsG+QzQ+3sf3R5lMUo2AsV8X6UQNEtUi+oUzFh5MYCrOmBlzgQKgSkPY8FPiiSPPxGliQSn8Oc/sZUvE0kYJjcKQqVo3rLlyzdv3moLBdnAEN5yolNXurI6ujWuI3GDxGuvvCKdyzPDri3SJFneZKFG38CVH/vxH3eXBHGOTVj+EYc2wpuMoaWKjLcUHPQpiwcTMWt8bIrrQZWBT2px33332fwBpWwAqvaJtLgVKqUD0N5p/Vyn9dmiOiuCY3m33ZDXhgUG4KATm/Jdd9TRdkkjsvZiU2WYE4MaQUYazlIRdkt4aoEbxCTaEeZP1wjIzHJgrgMQricNe8fJbmnVChJICIEcJaoFcEZKzJYSzInjp5g9n0uKtbUx4yanXxPQ/MITTz0hhlOF02B0UVSKRdHR0gNbsSIzR2ZMQziNf/zx7917793O5lQvWcLQpDOc/crGuxlsAQF6maKL/QN2Q0OMhvHDuihoFO/y3YpnnVYLbsjj11EHgDBOiQBiDj7jEubID4jELCl/KkKCqlOQemGaiBYt8oPslyfSrtAiYTHurVmz2kiFY2eyf0SRIpoTZcWsydPFklwP6oDlQ6vL4jCoV994XaWUXjC9fuMG8lJWRawBM32CCXrNuDooYzGdGw2CATPygomcpsDQsm7NGtzOh2dz67Z2mC76/tO7QEACCOA01Tc4t46GKBULSVJXk3x1d53XNGS66doQbLECk0XV+nu+wpZ8o3eR9uBS3YcffhjhOgAgMDEAdZzwX1nSdDSQr7RFLQ899JBP2OUT7c2+Etr//v/+D2D+7N//eRUdOHCIeij+0M6d3/rWn+OJlfe4TcnxRHEI/P7v/1cn+mdff+58HPdG/eDz9tt74Cld/+RjD3+SIeB/VirRP+UhnTVrVuE2+GhxWi/ccBtYi/2IA7dRQSvwkLflEFwxBv5P/MRP4BsholeniLidHe7qSoOU9s/0nev5zrf/1Ni/abRy3TIeIM7OC+9jRAc0LqOirNIvYj1elh7cwCVKKN27x6fIY1V86q6ntBuJaT8WDtBJvIIwPGGliPFFUQh3Lb/RQx4ouyMEypyjf8P/qEvjfWV2K+G5B11q56MznCU05PQpP+DbWCKDSqXHhQCGYdJsQr4fJ2eWwXSTx5oBSxqCiuKK68Xl7qYfmymcK6kuqGxYKKutbOioau4qrWkqLKsqtxu8obW6vnGhtDJ3AAyBLjEnv9zoADgmX0IKm3UVUgcAepJ+4AwALkESDh7ZImD5QJQvxdf0JTow783wP6cDsLQECBp5D0BZ4eKxQ2/195wsmh9xClDx9SkdgIX5SXF3S2sTcdNqIkYag6LeXATr8CchUmwOWR60jDnmNbbLj9BYmiCnPymkYQQC4gGiWU5n0bALLmJ0YkQCI6ISflkNpckukXHRImqsXiE7D8mPaYM4gezZWDfgagdfmxVeOvWcg6i0vITUnDOxfv26q1f62RSAMqxdvYopaf4CYEOsREWawYJdu55etXL5yPCAc6o4E3N90PDCaaALmeALy/hD7h1daDG5XlhQvv2mW0TSBh3e2rOb07jllpu0O8tWLkMLXcCoAwf3a3HwikVbQEvcYEqHOd+CXl5Uo4Y6/sGj6gcffJBLQabzT3GGhtMr11la6mP/ldOxGR1+auscFvbiiy+mOzPHbdBxymJSulAqNerPa2aJhvvUbbD4SilTQJBPA4NTJQUx1m6Bcbig0orY5cOK0zoC5E+MDJuP1SFi+rU1VUZwY4ePc0JVn+Jd/IS8h8Tlh6d0REkX8tIQANWlUin474GYPMTKEWKmPz0AIhCfRRr0AcLpmVBQWw43RXSltBdkzYc4vmb9uo1r1q56+flnjRFYYiAGAC0H36IXRUBAGp8JiOrIDj6OT+W+vNBqQSeJGO/T7hNuYnK0uVCFErQRJdpVPJiTzmpTUDYKJnigG0QDGoRBwIQoNWeSIYJyGiIzQetf8fMya6RSIx4mILNfzoyG5e4omMj3C6Aq1KiFRTUtkgI+cpTKJ7IAKFHtdFg7QrdlkwgmtNmRr9iLaiOVSMN2lLbby5s67cb1lBXLOvtSKUOoqlOFAVxqqVLLe9RmKolp6PGKRbECdSI1kvKiOGfgkIy6hhibV1y62pHgBQ7ewZGT4WApTPxprkDALQM+QBtLVQo39Coig5ze8d9vfrHp3ye0g0zBmAn2aiK5F8VVjQMevJIHdnlBjXRSyzhANb8ALhFnMBk+HipnLxkkvXhUlOUom/AD30CW6M9cFhxWCAIc/CIkWvM0/k73NFxQAhzJ8JmcGkdI4f/6Ew+KDKJifbFlAAEAAElEQVSPGzdVRchrcPHhjz1ijSDOEpWd+Zie2cTADOEi7567rKScEhIBpzIqRwDO7ero7nIPrsM3f+bv/J2KGOSLi7uNQ2S+Y5n8HrVziCiEgXe0YS4yPDoAiMnkZRn4ykjAFykaqMAvQY9fRZwA3dFFRVs2b9zkYCIbSuwnNr9F286e6cECTJcThgDqkMDcqR06dKqm7nSOwHAIiz0ct5ysDmS8YxI64q2NLdgqZgeHUKmjfUiMh4pQPrcIKYI5+EbLkcNfw98j0ZIhf1qqAQ3TWJw4NCzPsNoNAnwuot45sJ8g8Ycpit6wBb0IB5zWAq4lkM1XROHD8nR4MPPmUJQi0WZL4d3XmNYRKYJwEAhUXb7q1ApiIYZMWOlNeRBLCiJUREnHBFIAAcdMeBKTuniHHM5CHr3yaJaApRKYAD0EYoIiGCVdcUzwCzIIGRpygIKGGQC+77XXXnUKkIlviaxFJ4fBY5Ei3B+2g5DdEJ5TbvqgAyDRoI6OBDT+5E/+xCCQ8S0FMYEYVIE6f4JpukYHIKEQA3Uu+QK893xYo7EZDGd4upRu31QLrFwq5ax7uzOxl25cG4x4GoFgWomCZFur1YJMjEpSLREAeQechgCrTwVVZqn3oicAQ4tthAUoUpcNx3yQRLzCYUJX8Fvf+hbO86ro/bM/+zMLgchLs2qCxbqgB+67zxSWPwF3IoGGFl3+bO3oBMQebw05M7r9zjuAIhpNjoK70vrOhx/eaaKJRGiU0TMMz5w/dSouCUI+9VjWtdIUh1CHUasXBMR+7/HH/vbf/tsJYFycRzSAYDsdIEcIIJmAAKeB6pJBn+Gf/JN/It2jIP/ixTFwgwOX3YzW2dF2rufU0997rP9yb1N9TaGp/OsLBjutkgEwu05SU0VVGquACXZJ92BdMse/+JGy9LiDi1/FfPmB8uQXoJbeZaY5QBlstSYYSB4buKpKilftnU/HfNmM4fnPiDkERGOK8CFyLoFaQgKjfPWnnBiiUuIgesNjHvl9RRGYZQk9+MhjBWR6YnjEp0LbHNOyQ5sRisurr5dWziyUjMwWjs0WVjR2FFc1ldW3ldc1uzWgpKK6pKx6saxixbot1j5HWZeHFAn1g0uog79fCs/azH3oH8W4+Y0OQEb7vUuDMF/BfAwoTQbQE6xLyzAyybkUhPPL+/7M6R/WAbCF4sTxM/39V1x1aYQXC4uLYBhzjCKM9wJ833sG+y5wMjCtAldzO8z4xibgfAqQDsDA2VMFs9cmr15qbai8PjPe2CDmKnFePg1kZeyLUHCFKrJi75QcjWyNq0e1qq3/JDX2Lpu7WYhMRbyBs/PwB0+kEyCvqCAgjrG3Kkw6J0z0fALJ8iq8PZ/GoEAWULJu/go0aLAgziRHKlwHbVEcSlTIi2zheVJ460+dRstXXPpg3J0RcaQOVeXzVW0YIrbJLywAJefQ0FVn3r+5+2U730SQWm0ocaEcI3I4H60AnMHP84fIr6utX7F8nVb6u499h9N+6KEH+HBHVmlJjcJgiItoXn31Vcuu4OkSMS312dNnTAKDbLgh+3akaWs4E6WYv1aMx4A/DgRu/G2yRPValfHGm7tra+qj3V8sNCJi19w7+/dxHc6jwgF9UpMuFcacSyuwUTCEY7jhuFXOzAsyOTXShHwaLSxra4oAzspsX2vqGjl/UtIJkBO7xq4N0S6XWzGv2FwUvzV2zshMWJAML5oO/fSnEW5IAg4g2rGLH3B1ERyohIfopcOTcaEREI+KkKmIRI9Fzf5UkM8nNRmEvP7kA6Qbz16xchn3qENirJZ9OuVMx+D+++8nUFWDn1sTtaMRnzWyebw/kVyy1pKB/n4BgAaFiOPCQGdlxsBcDJSQCDj5IiCgnGCxdccO+mZUS3MvA7RZgU+IoktSVIEPhKh2BO7f55zuC+TOhcqDLtMUtPrnf/7n5JHIjWluvPhzx03bHDwNCDLhoDhuYAKVpqIQUxfapcusuws3B7RgNcxB8ILhBE1SUJLHA5o/FQRH7SgC040cuCcPLS0rjykpf1owljvY1bV1WSUUwXZj74LedFLFVWwkOJM94DBGFKk3bSWPMXJoW5RuL4pSMAFfZhlkJmVfYehPj3fIwK2hqSXHw8Sh+cO6TC+ewNODWA+iYOixCwUHlJVIsjigFmYiKJICsjyozgXl1DTrP/okm1/puKEg9NAikQORjgNwa2lrvzYSV0CAjwO5wwYlmYkDZDmzaMBRVpHqilhT46tSFNm72mWzJxB13l3EpCIZZI6y/+p/+ZL+lg8RHCxbYbrE0hSLtODRf2UQ41IHw1ndMVSkL6vDbe3Q3IyFGTUOoBzoH8Qa/ogSWyi/dfs2I1Gmwz/zuc8KOz772UetCrSsjWA8KgYkM4V4/Ak+vLPkSAVOvINBO9R6x2UvRKWI/NjngbqoS0GxmtNdLL7jMZyM33v+/L133xNBar3FHr03bd/BtNiGgornmT5bBzgfV1xz0Gr3SX4RHmETM4bSS/JggfDkW/X73IxEKa1T9gk+FMj5Qh5tAO1sbW8hDIlcsJZAHuiBzDY4UMPxcBCxBV3lVU8++SSuynnfffczIbqiRhMvOXomDFsLdLq8iLQAAYoeqJR+ZO206M3wqXe182sgIMHpm/gv0YCNSjOXQu3GJ5x8ah8rZKiOVgSfMcQwMPKhhEYP49fS5ICY0vAqcmZK5UeRulQEAkrxykPWjn+RaE5TpfIoiCKipGp0zgN5xSFJ4/HfcJEl8v/pP/0ux3nHHbcZo2JmcAAEjUSMXoRrzPyJ8zgMB5gXLRRqaczhyC/o1JvSw1RX1gr7y01eaeBlVmP4gckJum4cjjqRSHlpsU/+RIXFrpgDQwfXMkKq5dAVPWVnvGY+u5GaliJf7fqOULKVgqZBDC1+fd1+83Ycy3aLe4AASKZYSpdwg7B8RSyHqEHSV+HtIIPDGkIMeemll4TjmCkPvmmWFCdGouG8nawV9Q4Npbb2JkeWoIuJrVm/Adiz587pA5sqVVC6ugSsb7wRp81i2he/+Hm6RC1J3xobvzJrG26+2SRyq3hFZFBXWWvlg+CK0mI+2Z08FRuUsVEt2lFgyQUCLIIcsYJzgBJZAPJHf/RHKgKWilrphCEEIQ9yJJr/Xea83cb68ZHhfe/sOX3iyNTYtTI3R2oO54y+LJoBAN/iHEwTeaLIQRkYS3OyhmOpDB5fQjvTE7mSr/SSOwCK5PxyevF4uZE9gU3F/cTNQRE0x5hijB7GEI5BrAgTzcOplgQN2Yk8kUCvDNXjm8x+VQdyxk2NEj0SM8IZByqXX+THDWCNRwILmcAt0BMKe4/IWYx+fTY2Fznw7LrV5aWVReU1BSXVDgK6Njk/U1A+X1JT2dhW39pd3dhqwcNsYXlJVUN9c2tTS6vFoGM6rHML5RVuUI0dk6oIDDV3QXnMAMSCtaKSvARI0g/vAMgAw9wBWOLe0kuATBne9/I32wFYqi6/EPmHdQCcAqQDcOXc6eKF0YnBi021ZdNjQ7U1ZZZrWLRFjeknIDSWM/fC0smFvOgnq/QVx3yy05CpSpdokEtOiWSXzg3j/SJMMUpK+RUEmS3wKfRfOuBETCU4NNrCvQDCTkGTwk0xc3EYZ+Irp+TXn/wJTLhBQDCTJ5FfonfhnUmutrZWo1gieFVIPH+2h5czDqVj78IM/ieUqrT0/Plz2jvn8G3auAE0jZRP8AdKD0QV4GdLhLP0cA4V1WOjU6++8sbAlf6dO3fecdtHYGjPtBZN1YbAne6NMztu2g7nnp7TR48e37plG9prq2qtERq9NvrxT328rrpu7769Z06eaWptkm792qzriOL6vMVL/Zfc8WRXFaJMiarXJjejUqvXrrfcaHp2bsA9W5cvGx8DU8fbbEBjYwvcLN5DqcgMK+Lwn9iXGfGft+xtSCTFmZVOQjXGYW+APBVVteITfkOkQ2pirIWZaTtrWJaJcOuj7Bk1e2NPDvfF7yGWP1Q1G9dEgi8FZHJRbRaNHgBMPBgIf0IPuaej3AO1PLOX5roh4E8mp/GRAUzHA1IzpyAaRFBKWGEw7pFHHtZH8pVcykqKyktLNMqUQdMGJYoKN5/4XjJFBXq5Ha7VnxTMgSGiLxD8OTBwGVhqJoMAXkGlkNO9zF3S7XBWizHb/fsPAC4n4BJlJnqIQZJKKEVPNApabfXWVDf4U5dHTqBozp133Q7DZcu6BcAI9GiJDK3KoOpYApSmU3J1IMCZCYDskYhL/oRJlDITXlIuXRGf/CngkcGfGR9IUhWPF6XkoXgAskSkqRqFhkcFG1bnekLWOjML83aKg8D6zIyOjo7YUemyLU7aV3IBQS3AgkC4+kVecENB2ugMKkLHFtngxkYoINwUAdC7FHqiCU5FqGKMSnuUSpoZ/UPvlMcLnKmK9JynyHxVSlEqBwYIUZec4ENDpcrCTY1I1paqzp+UDRyc8WR+SoQMsADCRLoB99mZ67Y6MVg8Ac0n6XJCJlMtMacDGKo+Oq52bMdhjBJ/hpcocoVUHL2opwNzD76pK14sxjNLYvIF/bFEuKenq7PbutnLA1f0KNzgOTE5LDfQ6oujrOcWGsrKTxw/LQ6wlefyFbdoDRhXs/Fg48bNdHt0YvTBhx6y2Og73zl8+Njx6orqNavXCReYq4lIimLFnop7TsWNbia0LKozERgTKTOzcWvkwiIzQAB0SYvvdQ0F/xhXizc1eYE3u8ICoMSFtfW1DO9K/4BOmVU3AuiaCkUrn3zi+7yzuNvxo6o2o6Ng/5UrNp2rd8f27bgm/66nn4aM6gxyYLouLdO8cP48keg6ERWXZ1mhU2gI+MKFc8TTlo44cEeG4xNIhZgRa/qUAPRKuzo77YMxwmEvsohz+9YtBrJkc57SrbdYLhlLmwy6cMdtrS2igy99+UeF9eRKccOep6fFVTRG1R6c9078eAJ/2ZzkyfsvW3aFyirym7/5m3Z/vbH7TYkQwGc7ycRzsBoZHj1/obepqRH5SOMCCJHjEMGDBqaeCfMTlUJJEdb+yU9+cvXqNfJjIHtGsiLSDWl4D6ml4+Ew3/5dikglQodS11NOLJXNnyTlq0/g4La6BJdYaiCEHZtfMZjETmAFMjLhwxjIC/n6BtoMzaqhen7t4NsHQD5+6qST5uUxIn72/DmnVWYaT585I+4EBzfE3+45dpk0tlgDZph7fGKqrLHexczj6XxMxZubyh0Mjwmp2Y6pz/LKqjiGXmSVFpxAG5ch2drUvLyru2jTZi7PJmCtRd9l63muvf7m69pm1aHRL+o4JrE+TwoN/NEvRZT2Rp+H7plPW7Nu3SfSOTnqxdWf/MmfhKH2Gw7W6eIME1WEy6jp7HSmVhx7PT5BoIBQCWcsYzgW0SKqgr3+xHln4RHf0OBV27wkWtmviPzYhQozAPKrBdvF/bDCMeJQ0LotrQL8L/dfKhi/7l1HzpCWwQIZlBXx6OqLYsW0FJ5QiBJ1eQgQpbQLE2gjlQMfY2HC1zgyoqW5sej6/PFjhw8ffKdwcZ5xz06Op5WxhoUtjomgWODJ9YnhQbAzgM1jPjgZlLo83n31eKf5Wfn96WSQ9C4OiB5CsgkvxqViySMNzPlTjyCVMmweq1oNXsznw0B5dXGmI67lRBr7wjHEyh3eubKGX9ThD++YOyEZprAPoDTNFV0E3YBYNVeUru+NnQgwMRoDJZH4vI0JMohmU4BtkwJyAlUnspWVWx2km6fnQOtMVBWVVVrzU1VWoy0tNNR5bW5icbZwbqKqum6x1B1J10S6s2NXXRTQUN9YUFPlbsvx4atWReNiAhpxfMY0cQYKP/gJdqQZmJwtU5ffFfjgS4byvnSU/WDo//2p74O8VJ0K3vfJn2SbEc5KIjNNNooqkTXxIV6opZxswYuvWlwPY6G6JEZFKbOj59gIcyN0pq0gHTY6QDYK0h/6rwcLGqu8PhWT+wYLVOerT/G1qUlxhu9dLXKqxZ/yM38WJNrjGRTU5c4RG8PkJeTxUHX1MnZ59Bne3ruXIaxc3g0Nn+Dp4TqEgDxDe2sz4Fw0QzbeqkaHv7cYdxsYeO75F3KztaZZO1IskO1IR2CrAkpycm7O/j144KgzNBm4nXuiZ2PtmKsrE5fQp6O9wXe3MePFkIceesiNog5IOHn81LPPv7Bx/Sa7+IaHRnovXdi8cYvDuJ15P86cLfV1aM/UrDvFjJjZadZnc2dTrN52311TY8N//a+/r7dFYIwuQveCEit/GIOxApUKOcgTsazPkzsAFvlrMIiPkYnYSJng7BDlBUpLSpUlU9LJtiiKIVM5DdjopMmoz84JYKzjIF3kRCXwEBAhhHdtIoZTAA/mZO1Cr5bucv8hfXzvWiqskJmgZTAjobiHqWvW/BKQFVOafFGKMVBD49YtEVZMIRqquza8ft06ALH9rTd2N5r3TAtcl69ZzQ/ra2VtQb7eHayyjNSVH6wDin5yMs6qriwv0wg64Bva5872cLbHjx1TS8ToC0WDwt8rllpZjDosUKb+RpHIHYtA1sRoNykM3nrHE5VKBwqZk6OXtbP6GH4hSQNtyVO1PZOmAlRhCqG8q4N7xOvhq4MkTllByDZFq71DHkpwgDb85VSdT+Z+xZAaGmaldjlRpF5GoYg/5VSFh/QzQM0LIP0Dg5RcS4L/UlSWO4Ra5f6By0ClhQmWx7i34bTDc90AwEmYa8qQZYCGKliZ6TsIECVZ5O6im6AYJpSErIIfUsQTRdQlDyOSGZzk3Qv7ey/hFThQlUFmqMIQzvD37mWJCjKtKoveBZeiiD/hoJvHP4Sy3FhsyXuADwEZXM7tBRC1KEhqdAxY4TfHojhtURFkVOo4/qlJ10WWyOyRGUq5FhkwPFeaW/aMmFF/Tbnzf/0JsmwdnW1hSrGfISYuEgkxIQk9GQqf+fpviP/EghihA2wCzhJgzTNT6eyyQmOKc4R9bX0j5NitS7eAsFiCpF06yT3a+o2k02d7/sEv/IJlBsdOH//RH/3SmnWrT5w+Zd/Pvr379N5Ua0KotaVl+44dLiJ3kqbAUJ9LutMrNaicq63HhmecEjM2Pr68e7ljQGemZq6NXLvUe6mhKf5XZyp2YXFoeMiNbS1tLSbHLK2trovBMAPUuOBa6a6Ozv6+PgJ447XXz/deIAyMx2ihm8BFcNlQH+dFypzFSTb8rIh89+6D69d3f/nLXzZSKxFrKI3Y6PpsbIq3tEl+3lyTr1OB9Z/97KeJhLaTk6NNAWH57PyB++8H34lJ8sumb235I40RgbH81avXitH/9b/+1/TvF3/xFznimCirdDlrJ5TopYdpiRoNCEEb8+koOCCoTqnB/oG8LEROEpHIFfrFhJdffjmCsHTzH0XXwKBCYESyzAM+HuolM4HSJNrAI+gyWbWCUsBpCW9t8tF8tFKKywkynYt24soVKEnUsAl5DVBZvkL1GT9tASrDzDYPZxWhC/5qR753IaYoSIOKXXpf8iiiXpB1kBgANMDhnqAqHfdmJ2JrvKO4VeTxvnL1KnqvRjQKjsExM+BPCOPSuvVrbr39VgLT9MvPh8LH8LOL0pwRxAXobdKTc+fPOhhbTLh+00ati5zEh0zUWdgBDTcrYyDkJXLuaFQp8i3jsNFFdfKwMWzBRl+JT08J/3GYAmh+yBHhlmC9tXcvWlTtAYQSggNnv1itMyMna2STVFe/0USEbBSgrDKm8/T9+feR8Qm9Hcyxj8VG0o60CZuj/7M//dPa6hodCT1YgTthiTZIzTjfiy++6F3X33Q/DjMKCy6NJ1BvbNf9WLlqOU275557UGqHNM2Bhho1aRD2YB03DgjZoVFmqBIrAtWoFhoIFICMBeEb1qxuqa8+f+b0K6+81HPmRE26YV0MZX+eTjt2pXMzYh0LX5IG/hZdwW4LH1bE1xsTzf7EdmAl5l8VebwrlxOXUpTywDxnyPmXCjqEwFewicnURxxjbGQy7ahJ3nDG9t/kqE2az6DXSAYdUMQvgDCRjV4BS5qepfRUXRysKa/2CXLi/jQexH0UYrXFCWIF/QJE6OwElvoFRYEPaMDCRJOW7goorm1oLSitXiypnlwonLHpsbK2sbndbEBxTfPINChF9S0dy1auqWvumFssHjPM6eQ7pzwk/oDKuccioFg842qwd/tOP3wGAP5oQSRk8pOZ5n3p5YPpSHo3941/8k3Afn/gEqAA9YEiN4rGv0t1eQkyTMGQedxP8O4SIFPd+R4Am4DNAJQVTExfu9xQXTJ85VJpyXWxRvD5hp6QFL1lBajjECgnLWVZlJYJ+GT9p3RP6Pd0jCKzKXMCIkDvFIPEG+rDEfFyQg3HMYAgTxJ3GA5/K4WzUgv+qZor5tBUzcRkoCSMiIsgaJaldjk5NC5Cfun5HQ4U7/nnnmWAH3t4J30wJcgGbZLX88/u3WJJaEA+DL+t1WKn9WvXvPjS8+BAAwSVcjv+1OtgoapG1dNPPw2Cqg2OjE/M3H7bnZ/+9KcNKoyPxuGh5871aKcsHmMyJsGUpdN0GPmNzS2DV0fWbVj/vccef3PP7n/0C1+1xtWxAW7mOddzfmxi1Piuw2nraxvMqF3q7evostIjRjG5QRv/sGjo6vCbb+6xrobnsPoXcJaOehGbrxhiUBaLVA1PrNB58I6f7s77C2VIi/il25FvkYBlvbkD4B4AxQEUB2GUUqNDV+0D5Kut9nXGgFW+Wl4zAOr1yKNFI1Du1KoB7MqywyXypQ8EYdKXBJEgp6+EBQ1FAKcMHhzOovci3a0mGgvbRJTK9/8Z5lORRY/6qIrzEDYuq5GTXL16JX8OFGT8iWTtIIFSHjn9CRPcwKw8bMzNfuVHv5zCzbBKFSnIQfmqOn5Y2CYR8tTDobUTU9McjjUroGm/RAuZrkyaIvAHJystDdGwblq3BSHAhjhKYpoII7XLZ3pOId8Jzg7pll8Gv2A6qole6XDSTym45JdkNB98vmx0PhWMnpXYxur8rPaZb2iHAPXAImrswUOl0A44bLdt24FXLFYIKsCmtBa9gG9lgHAX6028gcwBa1/cNI4otgAskanIn+B76BIOS89GgUuwsmDMndNolO4XCYDIzB6FFhLlURc1wGFMw/nraUs64CB7UMGWCQgOmWmA4Ko/yU628eFr8JdBTuIDCnzEAqhG7JJNFXJ6DM355E+QwZGSOYMQxcGBABYRLp7jD7BuWG9qiQgKzpleVagdtoCAj2MIkVOKgpbDZcj4kBSmIp2UU2QdIwiAy2lcDygwUVT485/7CMbZmG/g+dSp0/CGsL6DOFx/SYGTp3tAtDJH7lJjiyWC/onGukbBvQ46IY2PhUsV0Nx7/73iwr7By1/72v9eVVPJh0+MTjTWt5ClxcEnT5+yPF13Pw5+Kiq8afuObTu2O8BeEGYSLSZrFguMTzCYoeGrXIzxBheBubDp9MkzE1Pjhw8eccmo8TljCq4D45ga6hr92qlsgBMj3P9qBYKw6eyZMySEeErg8E5eyMGRzzz3HO7oZK1euUIgCGEhGsbhJrqoFI7ktTFURJTz8MMP89c07dSxM2h3sDEXKQ4TsY1Pju3evVt0pPjmrZvYHpHTEswggz1v7pWidjAvnA99pfH6HqTPwz733HMw1Bv85je/SfxcjnmbL/7Il/CZjfHahKSITVoecqEu1mZIQRFygHJ2zfmz5yxD4vcN6u/cuVPXGS3wY/8mygiLGlERaFApATglo4v+RJomgWLBLcWLEeEhE2TpfBMviVh/5iL4YOwE2poNBIIAAWz0690LF6CUQJwIkKxedkgWLAHOiIIGU0cIFlHx5557Vvy1du1q/IetdpcWevfrER+DprsFrE4pplnZ8rlPfhYVZmAwBDdE2JRHkWD+5s0YiDOU1qN2/b1zvRe6l3fV1RjbiOM4b735Zh7U6UBwcMR1hBaFhW5QTspfokm894H7XW9HFoJpvQV1sU9onDl5iizoKqFgkVow1icBHYrwTXWI4g1DM5I/RY5sSuEV2n3duGXzjptv0qnGLtlAwB+GRnBe9KA0Bkxd54fm4M/hgwcbqmMVkE4mZbs6PIJkC/3A1wHQ24EM0R86dOT2O+9U0CjR49/97scf+ZhFXInVkySrXuj1D/Tp1+kr0pPe3hj+xwHGZZOZQzGE+PLTBLLesGE9qjGWEM0beCcLnzAEdS7v5OIJV0dFysc+9jEr2WwlBBBuqPAJQ8iLnrQ11c9Nju5+9SVXlhaay3POgCX7wjfNPAtKAYHBBfv6tKrzC9zrfEV5kVc4oxGLvOCSh5jyI92L9PxoGPOf2OXxvlQwvyzlR6AHzJSnRHGRvDtidJ/IiKTgr0E1Hq+zmXIGqOnxmIzCgVxQOm1XUQYlnQ74JIXrMH1hSYI/jR4rHJG3AL+wKGLkHDdon9M6eJF5ROVFi2NT044xFJbaiWH5E87EFG9B4fjEdLFJgNLK2YWiaQIvrdIDqKhrrWntXiitmi8sm7OFuKy6pqm9Y/napvbuKYFQBAelkMsYYhP8Uwcgs+qvtAQoArQb7F16yeWX/lx6CbI+EM3/dToAS5DzS+4A2AOgA6AuI8d+OVDjxU4Bcgzo5TMnShfHZ0cGmuvKx68NVJQXGsUyl4Lw7J0oJOUnLGpPe6VnWmi1x7tFg+TOeP3pzHVuxDuDbWho4nkoBs23BpWFMsma2qpNG9YbYyb3DAfArBhcEDjUABzDXjoAvA1DjtA3bY5kNTJ4B1wpFbE1lkJ/cuvgk6qnpyaNCGzeuF5E5dEZoFRcK0IUGR4aZOYyqMXGK3bhYAPjTXwjV8DTSuGiWT3Xpzgn6RNDVumzzz6rxltvu70l3VQ4dG0wLZWZ53O4u/Xr1sDK2kh8c8ydYUJMc2LH08++oNF0pV9VbdWnPv4pjbj/2TgnxaIg/+sb6IujbR0dc6m/pr7GsDFsuT7XzXM4Fy5eWrF85XPPvdDdvXx03ETiXBrvjzNV7caBrQsH1Z4tSDCQOSOgc4kek/R/fJYIGfYl1HIXhoX1xWkrpENGxAliQfl9JS8XfOhcTIw66mDIlYLuMnPRYd5DTKPwH7c1DfwkZmqVMIpnxhycF33CqrYuRjZV6hNWEDSZwtO7Krx7AUcGEvHYk5Damoh31Ujoy7qcbdfBc5oWMJlsgT7qjKOTL4ls2bQZnkhWHRy08tLVq/mDCctVL1R9Ikdu3Elh0n3FDaexwUF1iSExhcVLU0v8o978uWvR7S08dPSoHp3GPSubusS1YNIQLbi4n74hGVGwLZiP8WaVygbnRKz5gTFhIl5pu7Sbil8divgStiPXRpHDlCibFwpMqYDKjMWZHOZmrq5etdZiHhqLQHnEpiIHNOIq5DNjpSMKPrmII1V8hTkjYisAXro8wMtO6ECG7yUL+2wd1R/HCgGiWYwpmSWnl4I3MpJiqAtdoLk5gRVDDCHWtiiOb4ozIjn1UvBETpXirQcmUMqKZyCOLDDcV0riF8KAA+XXuwdFMqsoGCL8nYiYAT+xiN+wEsFX45JoB0o6/mOgqr1QZv4KBNRhJpRUDY7IGZIIBArnfZJYW9cA/wojlWkuRTrZhdOYns6UAq4uSHq8KOvUPpEw3cBJNiUntKEq6JchjbE4L/vd/e6kUPhPf+IhcE/3nBNo8opoMB1jVQ+HSF1MMCXejSDbNgCaV1VZ5izh+pr6l156aevmbZUVVTKbr8RfwXp9U8Pho4d+8ie/4r4ka4E62zqvXR01+KU4neZ6sBtOaCAtVKnCEcUe3IFNoieGurN+4JeggmZTKRrvK8aBQwU5XDX6c9Wa1SSdx4ztBEAkrfFLEus2bLjmIOKJ8XYXUDc1ynxl4PLv/cff1e7il1qwibSQnEaAyumrsIbRCqkhKX358pXbNu3Q07sydFWi3g8HvXL1ClW7W0qYWFsfS7uUIi37RQnAuEi2kNCwidiILZyFz4YNm1iFenE7XygmG6m3trV/8jOfzuQn3Y1hKiSjVynE4hI7JE7TuLBtbYiNJm/t3SNYJ1r2wGsIzjIP7X9CJvb6hRVQ7Aye4NBFvV6JObw20eFPIR3gtBMccTyuPvfc81wV7SQy6YJyfkSLojhKPZkKzEGgiigTVrM3JGSvhIpsKsSHXgVlYD8qeuutN/e89dby5XEoBwjIRIvqOGjtFg0EgQ3ADb0aM3Ce+f4ujvv+hx707qEYunxaRLhBUnObX0iECJz3KprPBALLEh5+eKeLNF3zirSbb9puHsChzIZuiJ7QscsuDoLQnEPGEVIMEkCfHPqJUhrFjLN01I4W09O46l+EqxRRFAYmqKbeiCJxX71g4Jr164TyJjTxgUd45JFHkElXf//3fz/PsTz//PM6b2wBJ62a1TA21zUYPHZQFUyMzZkdMlmzd987HKsBB9F/+Jry2EL9H37nP5qE1af96EM7tTGq4NV9RThoR44egjaWIsehuOQIbd5ncmzSgLF+ClGaMrLoq6fnDG1BLEptecRGmOMh3aAh6zdsQh3l96cmCtVCDd0AtJOLggjnIuQ3JyDi37/ntf17ds/PTbc01U2Mjy3MTFbEouFpQ7u8qvDJqkLLNGIbwKKpgIXCgrnCoogDwFE161AdVlN77x5W4Feil3hP/YGcIlukpMAXzooD4smlMhxamvL4aAvHAqvXBxBagB9xyLuL9aOfILg12m9lcy7oN9C98agrPqREVfgUfzC3WWvzRN1xp0CcwGNlf4zBR/Pgu7tAQVXW1L2pADRcnZyIs8xLisUadkfYFR23FltywOfNXZ814FhUVlhWXWgZa0HxTEFZZfOympbOmsbWhaIyUwHXdQxauhpau5o7lxWWVJiOVDcpID9zytUBwab0vHcGIHYIxPbWCHQybpkWZMibOfbelwzhg+kf1gGwS+wHzgBg1A+fAfhLlcao6rszANKXOgC6kEsdgJLrYzPD/W2NVTPj12qqS6myBhWeHoac23ienAGqms4TNP6wDiximGUp9GEg4Nu7JJzyifczoY0tnABXpkMms+KiVTc5OY2RFoCJdQDKxrPJwGzZRYyyu8gybbjktexF4Fv8ib2cW66IJXILPJtfX+HDJSrFNjvaYz1PZXmcOQGydY/ujYIGcnbt2mUTMBtkm9wXuwfnyOGDH/3oRzOqPAmHySWaxbUpi0sBnPNU9hvf+IaI6u/8vb+7cfNmHWw04kN5SZxbIL92xOlDwbLF2AOmYwBbbYTxo//69T+yJ/fhhx8GR3V0RgYujsOBRtY0ZOIkgH6tUxfynjt7QaNmwNVN6fv3HzTh5n5fdmmhWownxor/GGUP3xWXrUYPHEv5Uixlw7yKABTA3AHwSb1wthGrrLjMDKcOAGQt1dEBiNU4KTrnr+Zt8Zlzr8eMjTxW5RhAJDsdSP6cjDAcUarg/VABeb6LyNSDNLUQcVhcMm3vuOoXK+TMjQI4UkiKHOGMXUYrkW85FtrTor9it305iJY6GZCpr43j/6mhxoviG2VraWqlM0FL2pOmZaGi0FApihDu0SiTsoagubHxzKmTxlI1l6KawatxXBslSaPj01I8FDsvX9Ro9hravHSZn0Ijf06F+GSUKq4UlFCKKAhTV/g7IkmHilqiDlEOtROX0hnrRryjG2R8swEA3yCGgYbS8MrjT2qpcYG5P9WIgeqCIW33jkAIVFXGhkN1IRMCJK4eL/CBg0SQYU4JAUFLe0eXX0KhmcQvgtULVUq/0Z/ifsXNCQCuRjnLK6L95Xb9iS6/WWq0C3BVY5HVNKpDl7FCDfapuAn0mHT2AkM5ZZMZkvgAExJXoyKgUWOUqpTEvcjsCUNJPVKKISc0IC9FM2rHqY+Y5hPGiujIUdXI1CgDiDOqzrKOguV5bd4QBBi+plNd8lAnEDAqswUy6OLbx11pZdwqneCkONpxT1nxHt/FWUGD6EmBFilVn3oLskFe8woyHJAg4CW43IVBmrKwla3wN3/578EPIH84rDeYMo4jjM36Nitro0/spqTkEAV2s9oXp+5ozs6fPdva3ObkLyNqwhrGfOLEMfcJDg5dEXXde/89Ped7KJB7bkaGYtIzkEtzoIRtqAB+GUusye5Jz8xMpfOzaKD8MMGOzEECQwl5owTxnBGxQcxk3+CVIUzHGnC2bdmS5Qo4wcpgvbiNQd0rVwgNUe8I066WNkcHAMilsivczBznedEorGE8xAkBVZgw6bt05b777jdOrOrz58+haGpmUjb9WGgbbIYkD4iheUimsb7JKS6YCxoERNUXL/bByqJ5p4LecvNHBO5U1Ni2AWyrWQauDFqzCH+Z+Vn0YiaUWDIE2BtMVAECrZJnanSc03faWgivsPCP//iPf+7nfo74EIi9UAIKq5XSkxUXOCUnezHdANrmK+5RYlXAhNWxYUx46qmnUP3jP/7jtbV16sIfGJqS9g4lqsxDQYAJgYZ8zASK8vkaepUeIgOQsVmqjo1yIt+6f60dQjBEaKepOXlSXz9mHggUGvRedThGL6UzUd0DFfmqYHtTG6dJ0KBBW9/dJuBcLxpdKQ0B5oEEX13Lyo5BRuPFS737337n5PETYDqaZuvmLfffe5/dDARniB1dDE8Db3IJ2g53gzAM2ZIJZSnYCzFXhpE4+OgDX132VSsom8wy+IU5hlMAMKGUHQp7BsSJwkaxGtI1gY55BQRu+gnqQiaeKKXzDEPvVth366lW1xqWk810tuk1a59EZ/a6rFixSqRW46DT6urG5lbr/r/xx990AMWP/eiPrlqxEnMgo5cPAdKByfkLZzU/8KQ8/FRWaVPqBiJOnzylRdREmYKAEjNCgpzK2uIP8/Pnz0Iekx3OYB0gtXn88cdNXNBYG471vrIOgIkKno5Fq4X9nj5+5LUXnp4cHbIEpqbK0fvXYxIgRsVjxCad8RenAVnJX1hQWihW9m1xqqg4DaKnyF5zy9L9QgZMOOQn6VeE4EIKXz2+SvTrYQgEkdNz8ZxBFn/KoHFXVnOCM/Nz4RY9RGxDiLLJYqpwSatogy3+Z+EqAo6c+RecJTSkMEYBg/skZLMyzED6ezoAsREY+VG1OPa6MewY8onuTnHZrHdbohdmHW1ZbljfFQaFReYE3EI/5WRLK3tKqq4XllipNDZbcL2iqaS2WQcgtgXXNM+VVE4ulk1dL1mxdmNFTWPcGmadtAPmbUJImyJi+PzG894OgCkI+vHBDkBwJz348L6X9/2ZM7idKacv/eYZgP/hDsB766XhOgAfdgqQJUBOAXIMqCVAOgAL02NuWbKd3BIy2sKI/PLSlJP5EC5hsdysyX4hzO70xvgchowb5tvpg/zabD0Fds125LSJMOdxVpOVaxYC4TB3RxNYNzjsHXwhskiOdWhuuGu1qzd8RBpcBIqp8pzy84qQUdwnasBd83gMjfk4N5vtd7a38ngiPxA+csvNatc8gVxVEUc1GN/l89vb2xiaBbRqB1DtMOdsNX/I1Arookv0yU591Dmid8Wq5ZevXHZyNzJhzu/hdld7h4ITY5N4ReRwsKCXp2XajvFYKCp9aOdHDRwgGYaIouVyYgv/jAoU8YRq4XLPXzj3/e8/7oxL8S0H0nPmrMjBigVjgj09Z62ksr1Q9M9TanCMk+G/PYNgGnsGHxw8segKA02zhHGl7qhPuDS7MGtyzHWCnLMlQD7mDgCjj7UUaR+2JUD239TGZVJxChAXYwlQc1uMLeIVJmuzsA4/uSk8wWpSxgQGToJeKm0svtEB9qfHnx5Ui4sIPXzp+fMKStEVsZSxraU1De66rjsUzz1f4lGybmpqdJ8DzC1QFWlZ8Czb8WMnyYtYc1Bo7UBWM8hIVx3G4oMMCuq/GjIwjQ437XJbWysSYI4hps1x2KI/ekXcyIfP/MJiTW399ptv1oMFR3oGyJ8LyoGVCEN1aWg0yoKlgb4BDNRUkoUtc9u3b8Ufneies/pF00Iv7Z3+DDgWD+tztbd2DA9dI24wMQ2emmA6oIUlu9y+JJIjsqcwPWd7ISYbMhWhdRhI7b0jipEC4k/cAEELAn94WlxKu0SZVnjxrCA77UCH0boJyNsUwDwJRTr7xY3MUnBAQyAE7I/3FQI6tytXLpcIoFChr6/fABwFYxoopUXQoLrKgoNM8DPrIOxFG6GsPNJBQ6CcqiYIL/QB39QOZ2W5K82Y5kM6yFjnsdJbF90LAjNwugE4EYCgA5+FAmeMAkct0pkhmQaxyY+hC/7XhkfnHEqRlD97JGApgKq5CzABoSfoAgTOFKCpNhal686hDqpgWrAjhTLLb9mYdw+5yABm4f/vJx8RhhoadKQ9x2S9vuExzdbw6Lg/LaJT0kXcalUBWW7cZAsgll5vbmw6c9KpwxHnia4rqisYCUtoamnSkN111x2btm5qbmicctJ1LOqMRTIg4FTGlezFl5wOyBiaBSOAY9q2MwpQuFQoSg8FTXNV0MU7PhezgAITv+zQlQ2datdNww5MoQrWUhGAHrJF2LqoVv8a/9P+lViZuCjo4VjBtpwj5p6EU0hTVkFREbulr7hM7a5cuaqfwaeolCDrnJOcdnMbBDG9QHIOQhaNZHb39V5ct2Z9jgXRK9SDjHEm8waCe3/Se1MBJEFUUsB0OrSqFacK1BSBntaOdjGBqUeJ2eC5M5mhx31jINyQTI/J+KWXXhKZGWC2UQFDsEstDv/JGiMklohXVMrDV6qLFkEP8tBAPooI8WJvL9pIXC3AyoBBfq2M0szAWb1iSg+VkAG20UQl70asUMqCUAoJWhSIUSGQydqfIce52Y/u3GkvNSPXHFhmZrAEnmpEqQ4xxwEmutgbII9+9nMmYbwDgl5AgDI6LgOcFTG/rixMGIb8cq7bvNGvr0FstVHAAtPWA1cuv7P3bdtCYH7T9v+Hs/8A9jS5DsPem3POcXLanCM2B2QQEBOYAdOCWK7nUDb5rGdWyZJKcpVLKulRkiVKlJ6eCTEAJEASwCJvmtmAzbszO7OT052bc87Bv9N953IpPlDw+7D4z3f76z59Up8+fTrdcvjwQfpj/zudv/HGI5bF2EpL6Mg0ihPIJWgP2VEqto9HaHJ5amLS5IOBkH2fVsfFbJiFbpURMwhHcH3TzOOlS1dEsa3PHBlxlUyTxnz23Ln2rrhT/ad+6qcwTTAeQEcDIQGl0pGGt6fPfCCQJBRsTzxPzsiTwXIlocg6Ud7/kQfdr2W6w2hBVMPxsv/0n/5TA7u9u3f/xpf+Nkq5j/pO+9floTBcAZvdaTLx4Rvpkw71vnr5UqtQ5eYWhde+SERZHhRLRI74pksjPuNz/c2ePfswlnJeOH/pm9/85m/+P39rZmYWiz7/i7+I24JVw8NDLnI/eeoEB8JBF2ZLvvanXxnpO9/V3mRly8rqcnNjrf7MIgdjKsxk3leX3VfhUCaB/DgtU9jPqXoGALyE2P6fHG4Ikyw0/OnXA0k67FcKA0HiHhTlvbaoi/mENBiQKGiaM6Q8FhrFGj/wNX+GL7W1CIkBJbPJFpqgBm3B+WCKxB6JqFnHwDPhNMcv152sSZzdkGIBkSLJeoNskU9sYuDsC9hsFbr+OMydQCT4WrFlQZgARGzBKigsr29YWVsRudxcWy6xnyQoj1mCWEJUVBL3PooyAmmPsffi8um14pVNMwUV5bVNcTpQc0dxZaNTg4wNaps7Wzt765rbbBgw9tBPhKBtzEoDj3j3/5337QFAWu6YZiegpEp9IMS13UBfF5sLRcF4kJDj916EP9Wg1PaoK+eIwsY4FgZtzwCYuEhjPJIVGohR2d88AxBV5IoSQB389hiGswO4OCmGbq0ZLJ09+c5Y38WitZn5yf72hsqN1fmm+irulx0mcZvsalyBGbHYrSL9H+2KyPfCsr4Dj8WJpQttErchnfZiPcH46ARjYvysj4g9G0VOeY9DA7V0W0VMpwV/ije1UDaKW0DHaCY9pEUsCZ1kwzlDrI2WwgHihw2m0CmiaJTMoTrJ/Hr36FaEMyT29HbX1zVoI3TKYf9aouftt9/U6nu6O62yY3mMtM+dPqM6LxqvVXYqOnBgP09OFyPS/OYbb2izQlcegwe2caB/8Ps/+F5vzy49Dr/cvier7fRxbJQWQ5ObG9z+3htxyr379I8GQCzMs88+y2g4eKCytu5X/6tf33/wwNJiLNHWj2gRcPbLRqGORLR9HRnCEfIXf/ENp8fcc+/dtqPiiSYmHNzXP6idtba0R2sK3ceKWFbBiScj65x1FvlQwuy6BaNcKwbVNHZFL2YG07Rlrp6ovkuCSXF1XTfP5V0Tl6yswGEeyFKEZtYpAF2BrVW4pi+MndhYUsNMPEeIB9hQ3bQcwgt61eJuhgCbnlDw9IS+pZPQdI4MuI/Y3tBo8X+NUUpdJdMRHZyH+Yo1hGvr4iYuGo3887OM/M0338geGmLhLSagl6mneGTkT8bWiMILQ0ev/MKNoQaQJWEKcFKXed/997e2NH9w5jT4jpM2MWaW0W40G0MN5Oit+5dq6zk/JQb+6EIOBNQCIGOuM5VITDyH7HyrglkzKlM1cbhngIbo/pxI9MabrzkDij489NCDgNgcjP+joyPTk6a4x1kivOVjeHRqpIYtqsMlxEJeEZe30op8TzMcVKFSqkL3wjErLNRMQsdii2nc7+nXuxR75Sqrqr/yla9Aycx2wr/cVjXRNjFNwWhssePcSieiVJdGLSeWkhXlJ2gZkOy5yVz/DcYzHbitC1O76Nvdd99bboFZWrMkJ94y/vBRERLgQLEl+vWONKoXfYG2Xxp31ft1aE2Ej9fijPtd3T2Wn9ur6mbYKsex1VaRF3yAwu3MkN/6n//er/3KzwEFSb08QQCIY/DBLtFhpQxT6ZKLuNkrlop1IhczY9xvumRaS7cVc1mFBZPTM2LxsXhva9P6hVHjEIuld++6+YYbw1suKZWu5WZ8wNe/kp3mAiUvHsMZyHjggEY+JjWgt62t7U6vKfz8E7c4VM7NnTfcfBOZvf9+RIWvXO6TSfiWIAGy/jm7CHwRJoCJxHpjBp0iPmpprKEoBRmoxqQfCIjv6up8/PHHD+zdpzKtyCcykwcoL5SGtwc/CqphcOulsBfuCnFzMEQZxPvvv08wmF3jJtJpyBB/lhNea/l6aybbdATmyoZUVphu0RW2XqWhnfmGtnxXqDWg6axoLAbKKUZiPPKgQnFm8b333tE4EQw340i2ktHUf1ARJthIiSkxxDRGhYBuk9QpGdIQkuxVkR1LMY2dHgpHseCGNFoCc7gdP37i0UcfVRxFL710rL6uioVrbW+D8/RUzDpx/i5fvUJRDIK59YbyHK8TJ866+kz4jSktKy91qszdd97lkErruQEnAox1vGl5VTQhGNc3NSJc7MaMRFtzTC7DhGJozIwOtaM0kF9ajPV80olejRowjaUopKzNswiQhBLMzXRz6CGp9RKEeLAFIboiXgPgOICBhK4gTNTlHQ/U5ZcdpB6METb6SrINDY16ATUzpqw8z57HadRnm5qKLEiV2QvbQVJPPv0UvgHF+SYdmQWoMj8hj3Yc9mKApE+CiVKy4RsgDzxwn9O+4+aBigoDzswHYRjrqY4cPARPY2I8pDaK+8p2MIpkDSZaII8bTh2wWEgjTMs4wu6YOTTu14RMGIhScHLS7hqzbIoYjcw5okGnq/0vrsTJzW54yOF2J1apJSJDZ09rX3wnLKVUJ068Z1Ch6sXZJTMz+/bFGt+jR4/CwSog+dGFdYSC4f/oH/2jc+cusHc4+dmf+jT7YuuPVsNdgKHqDADuv/9BEiE4rUBMwztiLY/jHw8ODkikgeSLOiIGGXyJ8j///POqPnhwP7oMmC2F+g+/9+//7v/y26dOn7l8pe/nfuHzwhI8EiupXFOqPz/+7lt33HpTfXXVS8eef+Xlo1WCpgUG2A7WCD8eBKLxSFGj9cQRDXBfb3Tz65bQ6N0tw8mDAQigV7v2mzFMfn50zAQRUHS9bnqW6jhu6224FyLs4XbrHCNqyD9VHo1GdxxIQCwihgaAfEHTOl40Z5pPq6FkEZB3gMGHnli8IuCH37fJdLKhdiMELnk84t1H5XitfH5fdRD50ehgAohtZNspEIqIJnziAcVUiO1uTD+GyyTyKZhieCkbWOoVazWuCCDGQzSJL2tvVFEpAldtmXBgUF1TY/uumuaulcKKzbK64spmVwfUtffWt3Q7mgVRpRb5FgYtO253vKZAV9DIKzeCShbYQCGI9TE8f5hv/5NHAtYsSU3OUKQH/mkwoV9IlEaKdDYwDwCMWz44dW5oxNlxZn44arpDZ2KY7vnLIUSG4/fDT4aTf6Vvs8xII+ETNce4qoCOvv3aS8NXzpcVLK3MDu/urFtfmiouWKM7czPT6UR/foBzCCq4LHocroJ3wSwns4Xf01CHRo3dEYoagq6UHgrm1DbU47VGSn/sxWioNTxbG3b9ZXW17lG/Q1J2NjEynAtdlZbFD9ZYND389IRaJp9VohAm+ywAh8koUpZMc4xjeSXmEvWMmps5XiGDyFZaYiBto5GcIkr8V4dLX7p0gaMszjI0OKLZGoe3tLS++85xABX8d7/3uzfeeAPvH+SKdM8uITKwzJ1RwcvHXsGvn/3Zn2ctDchNb1bXuJxrlDPmmH8cqKqI4zizbWdnXnnlFVYRBG3kM5/6tFO8y6ut6RUfjdinriQhVq2LEY9mXZnHZ555Rj/FkqPaiHrPvv16f4rHmcNYm4A1ZutGTWcBS6C6RcsgdbXyMy9aO9PtkyIowig8NAAzEKJXpO9Pvz5pniYKnQqicfjDmhDXwThBME4ZL6+wq3jvvt36CzZNfOHwoQPW1+LAOSt1y8qghCGaNtMKMS8qDdWK9pgGsTElGc/k+JQ5ck4h8cW2Wk5Iut3ItA8ukTI+GI6TsLgEMjRevII20TiwlRRwSdzETLtOhOPuzGWJ7e2tVkawgYLeeCVuomrswgSujncEUio0wpB59wsH1YlBq7GXo1leNjs949Ihjhb+CGYNjQzZJcqJu+3WW5F3MZ1M3242oiVWN1FO/R2uegiCpqHIe+YknEMbrR6tCGuvCn/xTa/192GINTNHjhzSHxkJUC2NRS9vFnxwcMhqhZ7uXZQ2U809ADmh2oNMC+C5KC+++KL+iMukgwbNBnFs1AvzQ1vb7ITeq6PRUdLJZoPdtIoYvdhCGCvLjtyt5CnFWT1xQcGcWIZHSJIDExNHDfVlFbGZR6sVVmusrdG5E7SKJGIgt8EMHrBcf8HW4eG4XlNbQ8K+AwcF46yhl00VGIL/urzoCguio6SQ6pKuXowCxIGBonJssiM4rbCtb2ygeab99+7eQ40FCi9duaxncxspifAEyIvOkix6iRWX6BsXBZMxQQYy5QupyEuKIuVDPEUT1mGrOG/BhAyt1xcILcEurX1bgCyx0mTzWs4h5Jup8cKlq2UlhZ/57E+xFjC0e9Y2enxm2KMnTQegIUR1qs5E0XzpSMYun9RL+3Sh2K7ewl/46J2YggsMHPnJ6mh/a2OYUZzCGvy15x5DyU/TMxqjN/w5bcAIG3StC/25MuuAVSOAoSYcNxn73/93/y3nCwtwBNNlTiq6lpklUY0ZAvvSPzj0g+efd+hvVji2zDkzP/fzP5tMUhRPkw/bGwQNmBbnlyqKy9ta2pEHiPamdg2SaeNEguzP1NhitgVKGBqxf/1wWtGFOm6Duig0DhgboZEI2VPHmHBAoXrw4GFyomGa66kPPtB6/6v/+m8bljhRFBDdnnqB5ZqYqtFRaQZes3aqURXYSB4a+XPPPSfcDqyAjbGalmbO5r133piejnv43BVI/xREPm5TCDiPT0xhXRz0+dprmGwrgtkwpsdzYN/+AjcfuyKgIIazzi8SG+CeGBfSjPmlRUfq8lGqymstH0cXZppqApNV9Wd1ZUyBbaSVUaI0MEQsVvDzSFYDgyrSuK0UN7BaXoY5QWg2MCF6QSa/lBQtyMSNDASltEIeJphc1EjKSoGAFUePHgONgPD8kUce4WrzfTBKNxkFy8NNt3yFi69jdrSUXpBpkIF5gh4kKaSt2ECpEYZqAdCD85Q+VoKmuRFmQn9pXY0itkmQKboQ7hdpGqd3AfU9Pd1MJzhqR51SDIe6QFMwNw0qQcSAm7m3Kob3qTrEavNau2yUB6MQKD2bGCmw9eebb7wNeZTiSf9AH2nmFZzvv39cEXfuKm5UAB+GUs/mIjztkwt+7Ngx+oC3iuMh9SMvfP693/s9zdMsGeqsuqmrrhItcCCaeklNkTffeRtPbrrpFvigEaNYPpgw5Rvrqx+cfI/nhnXEilEaHXtHiwgIJijSi7ADEAitXlv53//R/+b+oIMHbxh2Fu3y6t333e9UQcjw7N2J7ATfUyfevue2W+amJ/7w9/+/5aVisUv22OAnbDPDcQ/+oMEhi8xXf0aKeO+6dfBhx+PZPr1DxvAvPQyGX6XyIzKuwUah2BnGcTaTYH6OH8XF19SdyRO5BbstvwknWtetSVhdsKFZLa5zotMDAdsSYMgakBQXEzJJ3Juc44QnBEDkunthLuxJiMEA/4EV5QpEM8pR87QpFnqB9PXHn4DnxPyrWh8hB3fLSlTqT5XCJKWHafKeH5lliDxFxWtmCGySWN+MUPaGGYLyspqmsurm9t6DxdWt6+X185uV604TaOlu79lvp1PBhmVDKdhpvJBw4LsAThY6EikhjrIY9kS9aXE21iX04qLiYE+aCsgDgFi/5HOSghfPhtNNPSlY61+OjD+U+/AAILYmr/9EA4BUb8DbeeHsxXQCyeFferHLWgU6MVN4o9culuvdpoe62irX5u1qRWyhNcuaD5OIOmbHC7PDvPBU6DO18u43CQJ0E0TRoCg/VqhXQ5Zfp0bn1esTs4b5nF1txzIxBkcbkUHTYByYLK1ey9LitEe/WcSBc2HB7MwCl0WN3EGfZNbH6wovXb6olakRZBaARCDQ0dauv+HF2hYlKHPx4gWrR6gbg8BkcRfsqvzggzMnT56qr2vUoq9cudTe2Xb/A/c5VMOWIcs1zeOJAoLsCjZ2jButXfNcUVFfG4v6Flfmoak6jVrV1ACLVP2d73yHueOpoMjyVPmZDpF1n7QKbJFT4BsJmY3Hj59gQs1CYIImZ3zCvGgyBw/FsltmE6/YTHC0c1aLrUAsNSMaqyqkM4BStEgvJIUnOKYWdcHTr6qzOACEMPtpA8bE6JBWY9NxcXnFZlHxqkF/ETe2zEpxqyDEDkjfiUYFG+uD/MJJhwE2dMTRltH16KwhDwe1kJF6VQFtWuGruuDjJvI4HCxM92ZdHBpUI6cBmAMhiDjhuWyQFzljprrQnjFmNjlFVSdPvE9J9h/YSwr2FgDINVeEAw0I/EOLrsU1bR5dvB4ESt5pGpFBhvnFGU5O7keEpbROPIcP0ehwwc+9DIaACQcYPvbYYxRMuq7fzBfT7Rh0m9/YFYMogTx31R85dDhuLK1vaGxuMqvMTTR7YMmbALYzGMl6fSO2k8K2p6dLf0dJdMqUEGK6RRrIyMOhq3MXumQjXz4hZqbIcas5IotIX3vtDfMtkGcEIAasuRhxZS2IXtlTx4KSJn+G3eNEdbTHemP9lxQqdO899w8NjwEbQ0txqeE4xYhZZ+QYVMOs5tZYdmE3uVMcDWInxkbDbymIS2woD4CaiSaGXQDiDzzJGufx1p/mCwx3ubvaOOajl6Z5R4v88sgJPjEBKJ0+C3rRXmQC5cENgtP8jfw9invXxNQIII+GXPiNkIM5RqmdaqFRSnhpDQ38agBVR/2ABVgzAQcE0vRLndQODb8wVDArp1JYKidsqQQkM1aUTVvOsoMhPsijleEzEgBBFMjScUARXyXCGXVAAS6bT1Cl1YVf+KkHQWGtYHD77XfiqW8iu4Z08sEGHs7cAQJ5Cjs3XQYN3i9DAwQW4AVwauKXqJIl4k7hSEQBS0OhUcJfEeA0FoQZaFCh+jJnvhMGpEGzZrP/2iDd4rrZkqht/PzP/xw0ONsIMzejuBr9ol1HOTEc208hJlFFsBJKwVbvCI5eP+3oJwkhW75AZblji7jk0f4Rjq0Eg2M4AGdUiN0qqC4AabY1ZMa4EIDw9Mwc3/1/+B//J52BnkFdgYWdT6k7AYrPgBydAgiAZ4oywlIwRCTAbi3tSlNhdm+95capseGp6Qmg9HxqgRVG8QUvXLiUjQ5MkIljIHBInYj/zHe+bST6uc/8FIJ1IXt37X7r3XeIzIQgZbWZqKm1hSk3ozo4MCSu7CoD4JGje6CumKMWJz2GIQ4vx9gxdEsirNyNRZnQol7ko53dVwQVECNHym2EbQSIasr90Y99DN+IT3H400ttBuGqI2t6QvWpluLKAms2A3W4nSHTnMaGWB9J+CrSafnKo40pvMmpT3z6U5wujgs7iGnQgK2B08MPP4wilapOXeDTPSmY7yh60uEZqzo4llZV/YN/8A8+/elPR4eRvAGCUC+Ainz8qSf1FpSNab7vvvvAPHbsGG3BCiYMCXBOMo2t+tSFV5IHACCjEUBi8qtSmiYPmFQluJr6P64nwsX2fMU6JFiApPOmcnoRviCm2UjnnSGzgqiqstZyf+R8+ctf/uhHP8oKC5aAAKB36wv/43/8jzj8+c9/npjwqqYyds9jAgnC2Tzs0OgIC27UGq01rV/0gkWA0O3nfvj9e++9R4o/FUQvfhI08UGbjVMLEyO/P4X5nYvc3d159uzFS319Tzz59OrGpl0B0DM24ERPjg63NNQyyc986+uuZNrasH7a0SKh/+gl9KzDfjNnIIk/fn3ysF6uq0Oarx4Ddpz0p4cbJIPMfnkA0PNIiCm7mNZc51VYHylclJ14uw9lSAfjc/2pjO284VIbHqhS70kRVKiW7O47+ycjoy7tQi2hK2sbmjPMYylqcYFdl8Yk4gUifDFvoENheHilMdIX/4/IINISYtsubH5POIfHnx9UeBLVFoKzO5E5J8oAJTj4Sp1U7fEpaIkBgKpjBaUU/WKMmEyhFJdvFVdVNLTXtfRUNfVslNUtF1a4PLi2qaPSKaE9PQ5rUBwLAAxQobbUUnkelC5K0MWMRnxivEwysAEZT+MAHN5+T06/AUtgiGXXHwOAQD4R5yUJ8v/PAYDiGerOiz9/3ACA8/Xu6z8a679UUbS8ODXY1lS6MjtqBsC+n5amZrqqn8I61kbj1TSoNPWmTv7EXhkA1zXoJ6M5pl4fz4lck/TolUFQENN8Ta1yVBtx4Qf0mAIpoHGVdLQAMshyerKwpAQ3jDs3CsctTE+di4lHRRgiyFTHhGGrP2ESg8B0NRjrPTM1dejAQf3ywOA1MVdBaAsw9DIgHD161DlyGvL99z9gCYRZDkI0xcgYXrp4EeaQ8dBE8PO2OpHjHMVDDvFjSF9/n9k8f2rp6IXnyy+//MILL3A7fvM3f9NsNsPFSoBGky18YhttosykUQ+T86+++ipz0dDQCILgIJ5AgIXR40ixDgJjsVpd/oyCaQCgr/TKUKjUwSoMlKrl4a+rCNMw0K8iOR1b5M8YYo4XZa3vWrQD2yxPSbnAvxkABMRFeFU1DiJCl7t48XBxYW5idMQ5jiLcLnSyTBtw9txYRRUQVjsCASRoOECYIFStIptc5ZHocYVfXEoUUVIrC4wWwizAyoIxoUxa4c8z505z3zm4OOPWeSbXg0VPP/GE9EMHD+rFdLKUBFiknfkg5vDhAz4a/XL6dVt6av0v20teOtAsBf2gFdtCYC+99JIUphhwyHj0Tay9sqKrgHjXZRgHWr+ip26qb+DZ55nq7o7OXXv3nDn1QQQlLaZxIIFzyTS1WN+5Ud9Yr2qNApLA0nmVYpGJMp0gD62zqx16JK52JLve4Uc/el29aMeuVO8uzQQO1ga/8vKrOjVAXE+BlojB18U9qdgrj4e5MwiRARt1LnSGFPQvGhTu2yl+4eIVJoqvD37fwCAHyUXHJr072rtooz3fMBmbmFLceIYdcrPn/ffeoy4patFB+9VFavgY7l1dHkKMgcecVfKFrhWQQXef86AaDmSBCR5SoAkSNSLZOlri/ICconFhgtahLu0lN2q/aKfw4O8MALL2amW6Zl9V5Dc3OsjQPSwFB4ZUTwqFRC+TQkvlxA0oaXoef2KgJ7cL1gNwaCANK2iLh/eSqaBXCkJPqfxAXkEVyQBVj9qpvV/p+dEAwYee38L/+qcfMaZBHkEa5dIGMsaX733vByDiiIqdmE72mIJHA0MxlgU9Mw5hQGOHP1GlCOgAqsnQEM3ukDWScTkEGVNCq8wPHzp08NChWCRsnzLr4N5BrqHtrSbL4jaTDjNBrm+50tf3p1/94zvvufu3/+7fdfOgkbQuUSzKeizrAa2PKrUIoNgOoWrk4aZmpmoXHeO+FCRYTQVh7JOemB5hQgeM4iPGoQuSTCokMQJF2gB+Ze/H5aA465PwWfYbhI2PHnuZ5v3Sr/yqKlDnNGJL4nDc7AzC5fdrtoNmYAup4Il6AVERLuGPgIT5MiuwQfAn1/HGwwcgIieLI8ULTOBsW6w/IQMsh0E6GXG7mts7lH32+z9wl9mnP/kpcrHxgKYqcurMac6r6ULMtIvgkccebW5iUOwxCndcg4/15anTtdzZ5S8MB4cp5JuuNvSCFm0GTJVmFslDmbRk5REiEQTs0pwspDHSu/e++3RsUPVAjEJTa2rz0z/90zSMOimSe2IFqZBdNDKAD6D8xM29sT3acE6KgQ1GfezjT/s0rEscHJibXbACkrHDW4zVHvAWWAZRjRoMtJljvyqScq0vruGQDkl6CBNxFA2MesujXooBefykBnrNpvq6B+6/n1hhRcQYjliDE6YKHIz1qzpyJJeYcNuIdcBY5E8Ie1CniNoBxyKQfc156CHHUQpVxElaSvR33HHbH/3RH/3iL34eNwaHBpADMffKAeWS9o52dwm3iJEgwXwa4LDV5gGkzP/sn/0zfDDuevDBBwGHrdAXsJDBbWT+u3/372wYIBG+LGTQqF1Aj2T1TNwLS5Nuv/027FUdnM1lYRSuwlmKF107xHwCk8Ftb2765je/ef7ipU986tOiSe1d3fBh5oT/x8eGneZzcF/viz/43gvPfu+GAwev9V0yAKNiZA1PDyCUH3DIwDOrX/71p0cEK79I5FjKnF749fnf+E1D/XAWvXMRcx6up0sJDQKikgKzW+rl6wpHx9n8MZ6OH223LBZUxvgwOgyk5QFAaXHEHZGJau0Lhp7AJ87m3HadM+YZPWUTJsnPS12I4nSVXGSQMz87eXIpf8IiEEnaAoegZdvfzlmCqJ0HEKkyg+wJ3HJK0K5quyVKTQOsbZZOL29U1LXVt+2qbempdIdAee1aQcnSVklj9wE3BtizVFZuZeqGFUe8J64OUGYGxNIdW15eYhSDZ5ZZF28EwCA8cEjef/wbtwrEEyu4VZyXA0X69gyAAUDKFh9gZQZAsG1nCdBPMgOQi0cVCezOy48bAJgBePtHrxgAVBavLEwOtDQUry9MuEOCA2dJNBeKSpMI+aaOrMyfFFujIzjAM//ZQCcksLsSs37u1MsssGa0VDsSntBkNC5tR5/DtDIsWhA7QCi+6o/VpSzpUBu/RAwgJusunDunyVMtHki2DAoaAMipuJzCC6pT3Cb+tpaWgWv9liLmtSVtba2+ikAzFJZ5W/+j3oMHjrASQkB4dfSlF4HtaOs8dDhuhJRiISgTp3cQ47DCsyaOCQgP7OrlK0xE7+4ePJECYQt+hB4UsXrz0UcfBRl6cEY15MPXLNgS2eH98T5RTUfYH43djCviIH/y/Q/YJSMTVpE/x1LZxCkDTHCYCfVon3joriqU4gzWVdXEZkTF4eMWdoSrVI0wwROISVej/P7EOvhI5OW46qq3uyOaQNoVurCybiF8Q6PofIvTf6xaQbs1tGtLTniesfaQZ2JP5ejYGNefAgCV7baOgyVUC7AaLGwRCyWYiILKZgmiWKElBRkrKmktNeWR06kkLAbLabqXmCy+pxj8VFU8/NCDbDJ7qJs4tH+/2g0ycEyHgOGCmEh2wCtGsb3qQkjGBOdRCoennnoKb+Emj/w//OEP+dDgUBjDCWCxCGP9mUePdA8oMSDpZpVhaAeL+tRL+QwGnLBjl6h3yx3NcKGO9bSplpflnbI+8ujDYYJSo8MBekJRqQHTRMek6BHokq4E8tj17rvHoad90RmIEZzz4aDqBSc1EJoADUCwlwSZGvJk78y2m78WJdEejRgpBpge+oDJcHbPtP2TZ89dNKhVkI9nFgv+nGTLWZkmmuYcKHyjQFixd/8+q6EEbgwxiAwzIe9RL65iaSYHcAijxa9ZYguxDACIiTrBWTZlkZ89eyQQBFCYDAidsSkLqyVita4QdRK5OkgwPyM+jhBOBawwzRRaKhvdHLC4hCE+qRoynkxp5gwuAStcZd8stOXBGVjJphQtwkMYggNJAH3CgYxblj44nHONS3un2CDATSJo0ebTllGclOKT9qt2xT1QIn+cVwoaSRdCI1QdAQk5TOuIZWiE/FpeNRS5RPwhm3uiqZSUycaPxDjI0QygUYuJSFKKonDRfFIcHjLwJCCtDrUIJM7OzRtG2YE6u7Dwo9def/Hll9uM1OvrjFZtrXDfA8rN2EOI8t145JA1WMIn1b/2BZtg/j//4T84FGZ6akLfbJLLSYhx8FajA9pqQLdJF1UGmsKoyJYSdGq0+q3iWn/yzL3jCxLI2LEw8FREjVhMihp5R0cbesWAjHRfevmY/C5skw0yNlSZB8ZBGzdvvvUWijs5PgYT7RO2RkWaEmwhVl3fYJUYf0yE2H94QjBejFVECx3nAiBif/nXfvXQDUfEYMTRNZXRySlRI+gxezCBsF7B8/hjj1AC0pKNs05GXFKcrKypffCBhx577DFBbGaoo7VNNEjPTJXNYD752OPC/4z4s88/d/XSZSeUWpHMxBjZIxlKDihiKCvK2sTahZ/pisfVM+pFjlpYcxpGrHQLf9CLdgxhg3ADh2FFvsiXGUCNAfJIS62b89okkeKyZRqhCRzmUooM0TdENxmGRnX0JKoWhKgJTx0vVWHVI3USUEHOR+5/QAyjp7tU2FstqFAcFRQS/JiJTsf2wU1m6XCjkLACwTu0nV1DrBCQh1Ygx1csBUHtJjSMIv7h//r3rQG1q8f7zOz85StXZNarPfTwo6zGmbPnn3v+RZyRGSgYEqg/PYjKLVbtoOWmTqk86JJBLfLTKJEXjQXJvG+OPjSgpBRyVpaDM5gmzif98KEjRhAWBcKfvrELRgKZKFhhixoZaA8e+uoT+NQGsby5E6c+oB42rkCGB54C6mx+oYymd41qmDNsTG05loTKxtxkfDRY7zJAFXDUUQOD0jdee1WX88QTT8ATRf1Xr8g2PjJsBqC/78rdd9z+7ttvHTv6Al/Lwi3Bn+WlhdStEM52LA3m2E5n/NIrv7Al9/wwwP7ECk84pREjiYU6Bg4yC83nIul7BAhFwsX5cC9GCuG5Ov7SYiAtbC0xITYAqCBtL447t+zt1A2scZ5ip756w6lNObeIsmzLmDD02QrM0hiflm6uRpAepkmSLHsEaz2a6ofxx1uDGq4ktyzjH7glj8cL/JEv3eP9Qy/eY1giMacrAnePPIqk9Rf2N8iV0SywQyi8yog0rwuPy6540WZxS0XVwtLEVN/SwsSoc0Jrm9oqaxpKKhv6zr5XN71rc3VfS0dnWVVNWZGbg9fcBkX9lN0ejnDYDUU2Rf9FBmNKIiETYX4v2+5+/BWEfAj5/Bq/Py79L3P8ZG8/ORw5kw5s/wCPXS5M9cu8SpVCQLJRXVZLUIAaszkSNRCtXqsUaOerSklsDwkrld/1XKIzGlS2DxqXUjLo+O14oSFgaile6L93qqKs6vKTawfKngqmlTd5+dIFNeoWm5sidm5hRjJT1arItZjfHh8b4aqYBNPZWbPKjGgfzKyhyFNPflQ7VRw5+vtUS7Hgve7vIx95uLa6jgZaFyTna6++wlwcOXJ43769fVevclX9py5BaycEKghnwdpnn32WYdQRPPnkk/wYJHDjYJjtKgPLROhtLfi2AMNyI0YJAjSTGwmHixdPm100AFAEB6woYDYZVWvKGaXkQaI+1r3gqRRM9i4nI0MQOIk6hMPHO7B4km0ggJABQX6J/sQBKXIqIlEtAiqLIn9TDoqJrTJckem5eemAo902egWdym9cG2sxuHrr6w7nVx1MSNAqE/jwR9k0OSEQuKYt3aE/5so2WSfVRYzGVyHG1pYOKDkBdmFxxj8OmbFaFj6w0rXZsfbFL/6aeXCZb731FrYxU+oiLb0GrVORHpW1/8H3vociteAYnYx6Uy+Gt6nXK9WJywCOJTFPP/00TlA8NOacejooYRQHEebeZUO1zsjDn7HuFyg+gwC5qbCK6qoPTp764MRxMy18pOrSaunee3fvsmbYinxjH4FOSGaw2MIyMOwelp9LihBLv/T+XoyYONC3334H5KW89NIr8NH1Oy3QpmFkYpFOjb+dsWU5Re3Zjbg7Yq1wfsaG5gX+SYpz299su2qcBEPZIOBQGP5MVU2D626yxIUmeCwQs6V1ajpCe/x+o46augbtETlGYrZZ88cYbIrBanrHOvpgodnycuBDcwgdTzDH+MEeAPaSAmsFxEdSRIO9gFNCiZnVSsmDz831wYoMQXuBjDyoy8E4K7HpG+C5IKeFl8vDlIE2eqRnZaYnoOFtbgiqA9PT3d3sHTMJFAI2msLz1Kn3cRtuMISGiz7wx4uy7vDIckcmxZCop4aDUnCDPCVXC5gZVbz1onaJCkIMENlwUgqmyQkUPFEBgRKwdPCG4srIRzz+JGb+B0BT7t1Na5tgZrqPibTMFBKIlNMLknJj9iuFwRKeZEzV8YUvfAFMM/Fw5abkowMUgQfWONoc75gGC7/gBD4UFZ8em7C0TgZ6xh1R1vYp96WbSSA5PAKBry9dEUbK3bqyWVahbJZiOtG2KKu4/jtLAkAvHkuAOIvKakV+QRNxAJaRFfWHiZXZ+ENCMlg/kxyjmB+IhuHgBtddzcwbe9gLAWZYk9hOEOF/JNsVWePyhtKY88pNAhCfPNDDSdBQYYGK1ms9pUpfe+VlDUE289JqtweF1yXiizPgW99pXpJG2j3T0mxFndONlhcXFh55+GGNwZXjaw1rWohugHGhFMSBG1YHiQYZOTz/4gvX+ge++93vfuMb3zh4aL+oj93exEpS1VUxhvZCAdyRm7WEfhSVDGnY8qhUcwIZJpnVMOd6QtVQBEP0IjT+QlyP4KipJbrhT++Egp8eDquWj2RfUUS7UqONpgImYg1n8ZkiimdboUGm/X3XdEjmDPFK88PzA/sPOWEWb6GpOOWBFbR1V5BErxSKBH+gyNdck5xGI5xslXqXXxWQlyIbULkfopBSfuM3fsNY33gMwjipCmiwg0SGk2jxGGxQYATC+aFHH1EREjyIzQ8cIJwl7qu27R00PFQdwiGGZN68NYvicHQbVhIxFmI0nLqqt6dbemwtyFVLkU5V4KPF6rDNq2S+4SpakA+IFKqCXaKGH/vYx6RLYZzViIGk6VfVIOBKuJ/p7D82F24yE6X8XlDBznqRUyLg9NmE1Rd/7QsO9MbzE8ffPXzkRgrgPg2z87t6ui+cPfPGj475VFlaLQjX0lwvgM5pVDw/6oKhX0/mz067ACcQMDGYlp7L8OGcivuzOAWnU+koLjHcfrfDrKzGbgDWzYEGpWVO0ySv5OCGM8i9LUiUcQnVonmurcIqSPcn191IYHnZ3eSm7uLIOc+ak83MiduVvGaiwOgiHtWp2ldSxiLVQVhF0nOidL7EDnpefJLNC+Q9+VP+E0CfUmKA9ad3KR5/QkxZvyBH3elks/Ky0s2NlRi2iNbLF+QXx47gQpFLEwEbiytzK1MLK/OTy1bFdPXWtu9uLG1Ymh3pu7A4Oz3W0tnr/FALOOGZbhuLoRcUsii8ewLL63h62Qn2k6GPO3muv1jlGImZZvl3Xq6n5Yz/5d+dSmXdeY+X/F8k5v8nDBPG+OOxkTxDxyJqT/csNdbtUXIpWl8edVN+mk9eVFpTTeqxpeEzCHpGBTMQSp7tA51nljFKQdkyKPjkR0sMJb9+rSkg3jM+4GQJyqmUfXm2LXHuU3OLqAiHUCtmCtgWuy0pkqbnKx2F1dT41F133KkPAh8cn+DjiAXBdbdFQc+oEFHmKi0BYtBuu+N2iXF15lrBwMAH7777trglV5Jhcfk3gViBHQa8cN0hHUzWS6+8rDuGMPfuM5/5DHwgzOnUQ8Gf6WPZPEwxI3zHXXc6AtWBB/ijUlSzCSMjo8eORRtnc7h37KS+BpPFa4FtarbJIda3IB9kDGTsGHzZJDJlCmpaAKoxy4tQ5MQrReQJatJZBQiHeeYD9pKCWK+mCqZ5VTvhlzXQOL0jN3bB5nKrBtZXCxxtVFNZZjRIFIJlWiCjzbQCxSoCjvnMLDgeVEMAqz1eHYhPQ2QgkemJSR5/iMYR7ytWiVhAEiFtkXAFW1qiB3FL0iOPPGKhwXPPPcf74e1gBRPtyEZP7ln09XiuF9C/22YhtGRpNM+BVSdxjIUVHNhzdYFAKBCAJ7ZAW28lG85LhJv8xAS4XgMPsUuNImv6XxuysbR3z26LooyPGMailWU7Vts6Owb6rnXu6rnvgfvdRdNYVx+BSMcKR8zYyvWIu6Eo80G0F3OovefZZ5/XxZOCDEyNm8h4cWrU40Mv3wNjGOzAd8VhSN8IERVLy/NEaS1lVUWEEQ2dhi4Nk76DuXDDoMV5/OodiRX/8R9rJ5TX1tHVPzSKqJrqWoENtDh1hxrYvtjR2U2FHI6iFocFUkVWXGRGfMc4B8Kwggnm5KbtHXys8wsT+PsF07UzlqFTJ3ZVKa0Ah4kVP3FbY0QI/LMSSle7dzB91e8jXEEP5VeXDJhPKOB7t4LDJ3F2mVUBlETkMzhZjlm9pWdzIV0KafqloviPqxBGKZjK+hOlcFBECs5oKKrIZiGcz/T4mmtREGTvEFYW5sHDZBjxTUHSkdm7bIj1QNWT0/2WcGSdNKSkHMa4btxA/XkXm28VkFxnd5cVjSKSLiSj3DaR5Jzo98LsqhWWiIGiatgRlKtGIvXFZat6LAF0nRDXAXIoN9uleTh+y0Fsg0NvK4UMv6+/8Za5+0N79x8+dHB2Zvpa31UMCqOzsgKUpT49Xb1G3lkYWpcXug7g+6dOXrwcy41Il3ionURo+DWXCgi+q4Ie1JXULS2E9lNxUtcTmL3EDoZMONwIRE7NnrIpDltaZb9RdW0Vtl/pu6zvhImTfTVgUlSXQ6zsB8co8FVkTQLhWZ6I6dBTEWGQK0bTHvk9KAKNLrILGr9Bv9Pfjh49OuZ4+0VHSU6IVsLn0sXzmHn4wH7uQBmj6rSpslLrT0Swqmtrz505Lfzr6jHBibxfZ3Qo9hXU11S/9+7bb7/1hnsiDu2LZYJXrvY5rtRkDp7/p//z9ysr4p4BLZnIIEPoGc+Mqi6KJuEDnHFPHu8QVpwHSRAiSUhDC5uVw0ica2WlKIsoOPgTvZDHWPlj4mJxUQcGGTrteAbdFQJVgWn4Y4mygv/qX/0L4xPdGC+2rb2FGbJNc/XMaVLQHbKkpjUIhZQBZwrB11Ry+9GEICkDnPEKHBVBOONDKxSxwJFaQlspkmKSJEZD2ioQEjOccBOCiowlDIANAmmRDGjJlOaBgQ71L/7iLxTXFrDRJwqDgbDCSb/+VDUgaEedGtkWaGC+FiGOQj0M+sXhqB81AFaeCycvotc8m0pZMOzS06AF07KAZFYpsMRBCrgHc9xQteWw1nkur8zZoEygeKslqh0QrMNDoYC3TrxvkaiT7NwadvnyJSMTqOKDDAgER5AMQO/Ep2nQAXIB5/LFS3HzWU0tBOSBdnCssty5K1aSdHW2f+cbfz47NeJoh/m5adrCLwEZqh6dMY+IlMN7dYZS+NPxjqvQS41CmhVMoS3S4o+/9Ie5mXIXbK3Z6M6kKpEexdK2++Q5x9onR44I5iirh2PVNDideky5iUdwzWNwzidbFwWHi+ajIKPNcJu1Ey+M04JEg0qVjW4goc3dtgo/cErODK8OWrF8SG0JE3EjGXkJ4oxmOWIGI33axjKISQ59Sk7+awCLB56JIdF5wFDVOTHnzInSJfrkEZ23xim2AMRG23xM4qZe1qLe1cW5ksLS2rLSqsKipfXF1emlyQ2HIkzX9t68WbpauLE0v7GwsjBb19rR1LGruqFZuD+IF+hJB/+EZPyd6Nlx+kNkac1PVHj9gYwZC395+cvU9GfO8p+lXy/3k/6r+A6cv6EMjuOMDHiY2ZhTWIDVqtg/56sUaq9NYZ3O24smky0S4SpF4YWaEY3V2hc99+udcDU0jZp6AwIlvxI1YUEeUYzcB2kpMnsHWR61ZEwAgYamzRBdGxxUVkvX3rF4dHRE/oRGDdw0eXjy1MHRnWssdtjrSqzsV/XI6Cgjyb0W/lxeWXUq0MVLcR+fWK6NxS1tzXpRp9/IL4Smn9JrOFb43rvvFDTRPAn2tltuFf4fHhnkoY4Oj6nxylUhldv1NWhhVRhqdvKFF15AL26g0fHEzB184CZabMklhLV9fTcPSvyE8TdCcIS8dJ0GZJDOxWLrWDYmC9XZTKlOHgEJDLF/BQQ8UYtDNNWOWDmj3aVBNS75qkjOhpnePfKnbqIJTNoYTZPzGrI3i1tVUMLIilKVOosLBORYAmR5lcs02BLFDXtKyirQpS7OPeVqaopZHZKS36N2MvWnF1R70mxe4czMPL5d78hqLdsxccpUEjrFMktBW0iTx+gsGvCZO+NzxzQgDesmp2ImHI08k9OnT3GNdDEPP/zwLTfdoCAEaKAgpiVY/mSobb3FfmV1o9hrgpECyOPxIr9seiIw8ZmyedGJ6Mug9MlPflLXg0CdoOXy1jOIT3DbIrCR5rodGvzEE090O6LVCfGWnuKC/6z/KyocHRmzgqbaFXoWL0hKYQ4230ym7ebH3ztx8023tLd18B/sfoSh+SQVWeqwUbIxPDik67FSBjKU0MY28wlIpvzUn7yqmhudhW1gx602H/WRjzxo7RLTDPip02cVAdP6BjdFiHMNj45OnLlQ39xs4SZ7qxZdkqAyBaCHulfp+EBkuK0WzTN628Ith/MYwVI8aBAilEiN/qDIL03BOqX8aUl1fV2z3REg+JMp0Oi8y6CWTDud8Sf4UkBraagHFj15tAYl8FNbjgYrp/zYBRTlxx+OB9kREFRxQC3g0Bmggm/JnkjxIg84OKC4siBgh+LwoQ9q0RB8grlsiAUQOVinTQHlFzJSMjdA8IKErDNanBrxByFyAoIPMsvg1yMzBGSTX4ac39fC3/gFs05hvPzBuChPs6nv+fMXnMQCb1poabIXygcPxEAOF+SHIriUWN18ZXBAV4360OAiEh2lxPbODqwhJMUzVV7Qr6nwDmOGLl3HCFTc5bGysqunVy2ZI0jy8P8gALG9e3dz/rzDEPsMSFR9/4MP8J/eeOM1ANky+UXiDMqzKjhj1UsmnvxqbCFK85K4qb2gJf9pDb4UsufIoYIwvEPS+QP4pSDMrQKEA38CyTig3V68eJnMQECj3UjVNXUuerXgzlGdzBYHI6bY+TVFhaILFrTYxexwd4twnFdgvO6sHgxPihXzniPp/NpT7x9XY3dHu57AlhQEum9E7aYIYmV0aVlnd+/AtWuhZJthHXxCoLPYdRUQxkbcY0MVdBhoeXWNeuNoqaXYGMeaexgsMtJtGIHICQJpKggmRuEtAXlHFyCqoG3kKw6toEfnSjq+qsj9CJiDCTipnwMW33L/wYjoojjNgNAi+qMIhYQkrVAdb9UuNFPkJiuMxL761a/+8i/+Eq/3tttvYewc0ykWdfDA4TgkLhlH2WiC6jAtKyFBQB6j/PoKrKViNApLDXIQhWSti3qgVLwkxzCsKdIjolQ2+04QqyD9NLdrnR9ipWT11pCkYy+cIe9PB63iM58AQ3ySjcrhJATwJLMLtonSWD1svtWnf/Nv/o24kZGJi9ueeOIxGdhxtGSG/+AHPxCcw70Y/qXj6ik5NP7lv/yX0uWhkDKr0btRCquB8+gKNpbGGcNGpByChz7yEfyHZCJnClv6Ll+R7V//63/9t7/069Lp1dhYbG30QB4O8iMBRViBTIyi1SQug8kfkT/hfyMS4oNzY3OLLlm7W11e6uxoswP4z/7kjy2vqShx+m0pLcVSYsWE/JLfIc/cYKlEjxpzpX79aYzuFw5+k28Pi3jSx22/05ecQSatpqTIQSVRdtsjDQr4diVpAVEMNrKZU6/1eK4NXVyIicrtzIWb5W7hNVgrjSngNFNQYEgAVsz8r4MRoz46DD34g4xvHol47skplDAnRqQs4R9UJWYGNknx8AGcna85nduZKoqIKfgeLzmnzPnJCPiVXl6Rpi5jvBAXFatUHkXSFmSN1tF+lYYyiy4jMjFSUlVQ09a5/+aefQe3ymrGFzYXt0pq23pNBTS1d1vnBAeXzpYhd2vN0Uj+dEZGLOhnoZJ7n5FR786TU3bSVe7Tzh4AqPDJzbnYkP1/aw+AqnMV/zn8H3MKEDG89erL0yPX6iu35sav1ZuUXZqqrymPgM56DMhZJzqmnbJFxESH2WoSYa9wTH/k1woN9kLNdEOXRytYEqqutWp9IMjGHjIaQCmbeoQIJfLLIQysnJq5PJqPFiEFFRpg7o8UNMuuXt4D+CSWm5WywtxalszNLdG1Q1hdEIgNrWla2ydNNfU+5gwFLE5cuHDO0lxjfnYSOYCcOnXavTf+vHD+/LFjL1Ies+YuC+NgGM1qvPZH/ot/+f92kR/gdnx98Yu/LtBGQFo63CDw/PPPwxbVkP/Sl74UKpuW3dMuRsDREQYA3ELqDQJfm8Nq1yl77hR81cDH2AZDQMAuhBjRg5zVmE8GDmcN99RLstjFjjk4JLQ3jayMzdWY84e5nhYGDMdATvABZOIQK4MiEcZdC+MMnCk/a4QLS92MXuuQVkXuu+fuV195afeurhsPHVhwu6ejcMbGm1s7HJWFseROynDwTmS4pwMyBEK4T5TEV4lcWKCy+MxEZB+D+BzxSS7y+GTpHQYiJKjY3EI49xSe1urJz02C4fe+8wxnxlIcx62qiKmXOegqjyElZTDhjDqsI2UE+oSTQMmGWMBxj7bIKY+cmQP0xDts5deTEgSJyEPWkDetR2/bUtyTRKBEMwFXI9XFT6C8+N1maZzrNmcAQCXgzDeRx2p5kM+fv0gxHrj/Qd2ZGDSsSIROzkxPUgw8JAmsYCWAspAYTHbMn6QpG/fJmKS3q7N3V7dRiBX8OM/YE93wkKHo+OVLV4HlSTnO1VSrPeIe/qFjTa3Wl9u1NsHSstLcBu3DyjiojuFShfYLw0vnzmYWqRcOUvCBpGCY2yOKpOT8Bo1O3DcAkIif4MuZ4dBwKdRPZ4q3hIKTAaEovGR9HDT8yZ54l0IE8kMGn1WNNrX4V0V6Xnria34UJE2+qFIab2YjnLk0KHJRBoGCAyzGeoGbd588wIKvSK4Fqkw8VIHyqAvwrEXqkpmgIe+RU5GMHslKB8Sf0hUE2Qu04ewdthkaCIVf+Oyj2gPthCu3xpiypsaS+mKqacLRCipwz529gNGqVFLoCHmgqwO4rKnA5QzqVlainP/wH/5D6z8sp7NlR9mcXwaZkaFqzJXOreFQerDD7YKGbwI0WiCJyqMip0R5UVwLod8qgrD00OA49aPwjjvvhKpll9KhJMWIBjnga1FcRFKXX72KXLty1btPMuOs/Iwhk0rA3ALcUVFmnAklXBM0ZD6ko9qTMJEcmw7pk4ZEKk4LcUWUrUnmUgZGRsRiDdlQvW/vXmpllgi/ScNkj0FijCjtWWH97V2G6mpsDlYPutCOb2I3FGJXd1e0B3OaY2MDfVcVMgAQStm7/6ADvyAvJ0KU5bdQL4LDMaf70ydXerGqFHpwaKSovPTWO+/Q5HgeQFF0mflzLxw9Jo8qmCFmUbPXgDFEcRLEMfh4wUAV4ZIXKRiYNQkzs+0+c/YsDtAfbjcIKlUL5WEscBJwj+N3mJhcVtCHHBXBcMgwZIsLMXuoUaj9U5/4JL/TvI26Lpw958ILA4A9+/Yqi1hYAe4T20Ei2ic+qIi+UQAYagmWrYAvQsA0q4KgFeQfQwwQNZJ1MDZNUnkxREMmIFTLXuSseEBRUfnVAqavOMApZ9lt54U8HmILDnihEqiT01fbhrKqoEUV6BoaGnB4H/UGU7AHSoYiWf0gpm2yFFiKRf7k5Rvxq5pEROkgZoKI6PXchjcw1PGAYzU/UF6ANeYcHY8rwY1tXMsls8uC1e5OEQgY/RqDuTHH/L6KOMcC+lo00ZOXiL4qHDoBFN6qNJsSCPhq8Y+DqoTIsdcuKPC5w2R64dxZMfF9u3q+8edf77t8obG+dmVhzro0a3AND0osW0vhFlzCCqRhnVqwS1kM8SsR06R7nIkvp7z+709lzcV5ECKbdpFzSo/HsZjpADiZd9LFfWIeIEWAdBRIVoU6NAezwbb55EaqU0g9E6QEfUUWQ+7mi1LYKGoMLICNparbjyrk8fh6PS1stBS/UpCjU9ihSzY45hYUqOexSLK/ATk9eqJcF4Z4pMvvydAAlAuQXIWhOyqUxPAonfZKxYrleGJDQPDMgqUSCxE5tWYgnYtZVlHf0tDR3dy5t7Klt6CqyRlBLg9u7tjlIqW6+gZaSu0dIW07ndOAIBALoLdgHjz0ZwJu8LHNECkfflDvz78+AMibgAeHR0XrHNW+cwyoGYfgaSJ/5/evvyBOosf5SwYU/rSaPh8DGqu5tgoEkJ/9zjMFK3Oby5PLM8MN+vHlaceZulTNMSNYrQ3SXqTBXytjD7FROiZTeDqMk+Li0d+WxTIDrZueM+nMCMJxXgP0roicnjAmEbyPAwDyJ0DYWwU1fBjK6VcejUVLBISREQtQu0RtnKWSwcl1gu6wAsQ2M62YV6fTkQJCfVOzPGwL2ikGbB35b4rAUXVd3R033XiLAxsgALjeOaZnNmOBTbLwUyAY0jgY8aabbhQaku373/2ORSxuoXr88ccFVoR79x84glY0f/3rXwckh8+YEczxrpUBgi4WGwJmGC5dvMLO0l7IP/vss9apWrbBOOhLMSd4F2vhgnZ5YK7HgrZ3WGWryKnEcDNXwDIsIZGC4BIOq8Lw04tK2Shs9EiUB3D4Y5qyMoCG/6Rnf+/MHC9xletfWlZjLFFT22BRuKpvvfnGq1cudnW2iv/PTo8Xu5bVoUSVNXphrNZHIAooOHPfYUh2UPXp+9//PooyGs6fZPNJBF10AyY6St3K6PAQHNhVpe64/Tb2lmhI1hgJ0wwIfbXZQ1hHXP+VV14ZHx1lww/uj62DqjARAT4zOzE6BpoiuqSIdjU3K4gtqMYuCqOf8tWfOCC/r3CIbj1xODM293emqTlLoFFawR28sviHEHEtd0NIwFUMRCYgL730EqNNbfypfwwRrLmFnGYvcv11B5RWQRaE5Te3Y7ujAR5lxkYVodf6fpnXlpeJhk6C7OGdWgKkP3K2AnIee+xRJAh/qh1KpqEI100R+lwWSbsfGBoRQ3afiq1a0QmY7VrbtFIH1U4BmltarK6toxVCL4DjDLWxdAf3AAcZtKHRIVhBCQlzk0G+bMTqUxaoIggHDzn4Rs+ph4eZamxoNkmi35cZk33iQlAt3JY5GwfcxufM8M3VFdn8Kb9nRwoqUkSlfmXIn+gnlVAPOGSnRv4MNcgNiucDMibrvqGnamAVR4X8IEBDKQKVgnXwp4rZyZSZJuTtuPCUE3D1KugXozg5IMhG0FROClSz9LHO+w4V8qg0U+TdozowAYRn4c8+dbdvKsgOUyIy/AOEoZlCkL3RP3krqQILCYBWAVQUBEUiiF48yJAN2UD/vb/39zTv5bVlJEoELfOdouTqQcZQiSD4GmDX1y6cOX3x/AVM0Xr9StSlsuYyq1FZesA2+UTDmltbeNsUpb3dcu0YQWbynPIJoDMtxc1JFlEu5rBbwK8OY804PZbZBASmQU7pGi1kQM47AbzjKc7yrQxb8RRkcPz6Fxqi76iGu6Y4Nhr3yJIf4bluyIhzY3W9b+Da5QuXpudmGpyT0Np8w6Ej1XU1i3MLTuBfW14tKS9dXVqxC77CETGxVWVaVJWLjxYHXVmAODw0ACVbADGOpFcWFxgjRwPp76m1lMSZGAVCA9KZEC4CW+bwL2rnk4NBx6YmTRrIz/GFusyQ9zS1tBr78jgZCLKWgl4c/sQnPoFMDQzJ5IjtWE1AbBBrFcDTya07GmYSF9s1KvEPOUkWH7CU9pMa5oAGMuSprE8PP/wICaqU3ykRhzkhEOMow802f2UdhKfN2MTsLCM3yDz59FPUSXsABz5wICYptBRMrFMvfOCMe7U1EW3KXjX5wpxQ/CooM6JgK4XJgyEOixB4YCIFN3AVbkBhCFqUAhPtMuAGJrthF57+pLfS5QcNApDRRnghkLSQCe2IMlvKS4Qwb96gLl8GDAdskZOAcAVu/pQHeh4Olt7FZiP5beQA1gs01IX/2KU4kmGFsa7opps6Bvb9hhsP02sN0DQaEloaG4j19JlTGml3p+tsIp4BT3aWbgOb6/VCcKkDaIIwcmDl16QEKtQijih0AUP0mhLq77s6OzNFLY+/86ZeoGhrjTuztjRvDy5vEnx3GypOiPnxThweleYXkvJ4h5in2kV+8Wz7iGqPJy3SyOnypJf48W5/PSWPP5JbmWqJxTGo48CqOebcvBharywvzC+PjQRLQ+M5uBxphwTFACDWujA5Upy+or9gn8Ql1Rzzdcn6+/VEPekBcwdtleZE1bEGgcz1PoN0cjZqkNN3PkkHUKWBSjJ3MuODDKDhT6pwu+PJiQY2cURGqo0/nLCOIh5F/NoSLTzGIIRxSncaWAgqVrpZVlnT0tO663B9597C6pbV4qq51UKHhLb19La2d5s/IU04uE2GQxBw0+MFzFy1vQZe/vrzkwwA8ilALDex5kEX8BnUj3vZSf/rAwD3AJC4FazPfffbRWsLWytTOwOA8pItMyBmAJCTKdJIsRcVXmi4R71kB36izjLl4rRtMQ4MELCQzrBQHn96YQClKO5FKUA6Ozs0drLTFtgctZAas+FFHnZGMEWKNquNaJ6agObJQLEeMPHn/Q/cK7bFdKhXFaxNZ2csVQVEXeVVsazIu1pcuc1CgmPHIcOmE85Mc2krZMzcAruxGtcPC3br18A8fOTg7p4eg27GwcoTC0fFF2z1UbsNPOyGM3P+6I++AnPN2YAfQ+DAR1ERWwExJEAG+ZChSDPT84bFbM6rr75qRlQczR2l+mJLXRVBNUyofSYfenwi7x5My50mR4lqNbe0AagumPDaWVQZcEa/CQ5ClNVGcFgp/MeW3HakY4g8+pQ4QrCm0lbO1bXNkorqsvJaO/gaG1rMbEPpnrvuGB7q72y1FKdwcW6y0HyfZmXNd7p4GGk6GqQRSq4FTOaO9RbOQDvpqLEt7qiKWyZJM/YipKPP1atLxQ+ysHyfH2rSV3HetgPp4xrEtACd24pwM+UY6+Ae3oHleZAX9FQRMeHt7p5YsOBBLHdcwSxHioFwzIQe8wsB2CKZpGTGQJLCJdmYcb+4B1udOKFz1SiMHsGWX+kcQGiDgOGA+AXWV1iBo0YikB/YK5cpyGneharRKxoNoBptAzj9wRlKziDpg3h9qoaA/stl6chJmjwNE/ApniuYZLPE45Of/IR69d30R6XwVx2esEJQMrszPmkybdWEAFNsktAi87jPZBlpyw7LiiUnNWbkitzkzZYRhCZpl6nqqAo4ucbpuWlkqsh0WWd7Fw5jhYpg6B1dyMFtGbxnM+sdSvwfN+TYagwgfGRWFxLQTpre5ccuFQGoiPZCi3yV4pcqgow/ZAes6jxKyenxghUQwyX5AVecwjAUsslARY1bfCJiQCQSimww9+Ra8NkLHFSkFgMAf0IGqCx9YxxFPLleTFaWQDmcO+kSPTJAGCgQYJXbEbSzPuSKcrpP+UWpws8+cQcuKAw//TJ0EYBHHCO/VMEnLg6XgjDU7Qg1rISiFktg8IZH4kKEtrW3LACh0F/5lV9B8JiZuZFhMD3w9kuDs2eGYBjs4ApF+Q/s2W0TNPg0QOxfM+Z/wM3aqVD9xjillbHDXHtosFVnNjkzbUK81blCaXINORZ0sVyoM7rVcJAQ22lLyt0bMj05w0O64chNhqqqgwP8hc5pHty0E0LFMjVihWAk5TIeXVrISxXDbOUb16i1lnzDoRtghRWK4I+Z5969e8xeGWa4XcTv6PjIqfctrjvl4LZ77rvbFmTzZHb0La0slpdWGLGuRdwiNJjpwjrH8zvVDk+4Wdju3CQsokz8WlVjUf/AENyMHHILkahqHaQf3bnFRUB1tsVoZHxk1KFDmLNoV8FaxJU9ShlCgCNb0FtdE6WTaXaRMBLeeP31rH/4LFDEZmGR9gNJdWXhJpMR9ppAtUJ4AhJKnZapqUsGNgsEZVWKz3QJ2snSxdwR8cEBadAQ0aQPzqxQ8Nkf/FC2OKV0bMwwpqq2htRYhGzgGD5FoOFPslYvDQTfOxEAojM2ONI21KsWEuTdAuuFFknn9INvdAF5f4JgRakzjMH0Jz4w3BqtZsx8wBDV8gCle8ZSXYKF7yBgFAihIcXF2IgPdAzVOKDvtMSIf0+X9MSChsdPvAefz33uc3fcfif4GROdKAjMFi7ddtsdQFH1zDF6ZWxmEtlR04JGuEfV7VDUicqWeBXWFlbEPjxi+Dn+6EMPY4VDRVBhfCuPjXF2QQz09+kGujpCH6KNb8QMrAd6mAlz2PqkY8MBslCXWhw2gnbhf9piUgqeXWlJw8rSwttvvnHDwQOnPzj1ytHnKWtzfa057uWluVhSkCZS0nR/2JesMxlPEHBDFdlWwDw/sqlUOv25/my7+4LgOSVKhd7FI1gtAvWhpehh5vKjjbidStw6WkJQuml94NzM/NK8OLfo2vboPTk5MfYIj1Q0NcYSEUaKtXXFMXesBQGQYUIvP/KjLyMvJRXfjtPz6qN4sr/SIUnf/MomERP8goYDnqDBbdwplOCTimST7hcfMhB/UjC/wPLCHYaU7umKSYAYCqQuR0W+Asv3deufGoGycra6vGxpbhYcdwWsFJZtlNVWNnY3dO+tbu4pqmxcL66oamjt6N3b1NbpwvV0qYHVDdsBMzhADmTHlEbViQkfngeIG39pbd4EHIuKg0uJj7EE6MPHgH54BkB+gy45PbnIf/aeE3c+seRZhjq+WFvkSTMArI8BQMnGUuHajAFAncNmVmYMAFzk5OQVHNP6so4h3wv20m3NjWXw4Ke2g9m0lJRAZTc0belI1nYgoI1Te4pE1rjhRVuYmZnWKgGXgs8yy+nRQjUiMNk05kKNLJ7HnKxFjPABnGtozC+nskL+kMFh0Q2PKsAUu3XgiQyDg8P6fud+Um+aIBudEliTjcayhyyMc1fIR0TZc+ORG8BhRe+995577rzr5KkTrMf582d39cbWLC36nXfe4ozeccddJoEfffRx1iwLN/Wqozo7IlacocAoXRgaUWfNXHVVXd9A/9e/9ufCCj6ZGeZLMF8oVUSvl1mUWccLzDMAMiDHg/nciLCQ0xGpxZboFdZMlEXHBIKhC5575CQCjxd/whmx+R2xaknc3hifGPG1UD9cVWsGoKK6vqU5Trm1u8mduxbhlrsbwO6e9SVnAUFjdaPIfdCqY1rVzMqxaThPNBLxgTIQnJyqU0tj2sQsD84szM6ZfCYseDo5xzGj8huGGcxRGEVCk2qrDQAMIbDuzttv42Z4UDE1MSaPNsqRhT9oKMJzQz1apL9QHAISYYUzPpE4xHzCf8zxTq/YDKjm4tiY68VGQPCBxcZkmYHytbImnDTbj400QCMs6ZmZuOeT4uCjV3Fq87c+99nLF89zYOg2bSdZ6TpToBxuF6DSfUdOnsEZEucEOUrdIM67tVKUH/JWEFL4NBRp1XHAOeMjTxwZsjAPjhuCeWFk7mA9Qa6ZWVt4Nzkb1kpYRuBcf5MioFm/qrhtlrSdOYG8P8kCGg4CCYVMls0gkX5igormZ2OJlIeYPF7k8QsxnCEfv9iLLvKlz4YW+kd5sgKTLODYgl2K+zNXShz+VPtWWsgqgyd/VSlQvAK6RB9kg6EaCZ2DpqA9IUQmMySJkjGRSNAS8RaZMntRUF2kjNvwyTWqBXDi8GiPGXM1+kpAcsbStzREAUEerg4CAfRI9wDrPSOv+UjJwL0ALh0C0iEPJnB+czYcAzO8eX/7AN3wKJKM/WIlEDkT40LLkRSJMYcUO648XiiK6kHwKIW5KgCTu5P0eFLfDSsrrTFkzpbg+Vnr4x3DU1zA9sX/zAjVWF9YWVZtCU5psXvL7aHFTWpBvRz+yg29ePmSlZCWm3d1dLV1tFvS4EZqyJw5d77LRcUUyvVpc8uzM32Mu3TGES34haHmkbJ10wAcG2x86nRhmZEPPoeJxbSDh/JTEQ2QDhCtJhaDKPFCGh9LyGJ8pnP0KyYKPWckYBpKPaSixTIZOD45MUYf1UKh7A/q7uxwaoUYxPjY2FtvvM4nweIHH3iA8+W8GvObzvXXYMZHF3QytNZ4c3EzzB9sswhD0pvhf3hhWVBnSqu1PAamYbZYkMlJrEYjTMQk0GibvQ0JLiMwHWy8EhHEgmIsIiNi0McwXkJWiEIIqQEFc/2zhn33XXfhA4C8WHOILB2dFmCm1p6s30RPO0HDYV00nYYwAJjjF3APvxPO/tRuA7E0acUSGeyoVN+sbG6lrr5CFyB2TbnPWBszgYNYMnET8L69B0wBc9k1Dw4x/HFbB+Zh72RWF9JAoPfqEuJQVh5V65u901K/ZC0bkqnT448/riniMMWemp5HKSCwouTaCbQxluZQA5jDWS1KUWxdyfjoGMdRZl8RBXJuCMjJDQwV6mKRn3/++W9961uHDh245967bTmQwaQHMRErTrrXUH5/qggQ+OMnmGYhVApDmU0jQIaawZaMEKKI6oCSCIflpVjeeuutt+kY4GyiHhO8+NN5nUYaB+M021gRBNX+/j5sSZtmo5MABIuoU6ZUKXmIHk8os0PAMig6r4HYa84tdUZTW2uzCwAunj/rvP8iQwYnyS7ao7FQVmv4WWkV3PzCYniRyer5RRR6oQqa6rxL9CIl/8JEinSPRJSmcbtZrxiHS/nwr/i/E0UE6SOYH8DiAUfkUniJkhdx9gtKXNYws2BTh8mo1epSqZGVncxj+7ycRkW8aKKEjpa+uWp5RbjRBWVpPJAc+owk9Dzwz8gkUIQQdjk90YJQcf3PWMQJJQKVLptfnzKxXhIaMU7wDgcPFuVsOX9Oz0WwSWKc22QjMG/YK1Lj3H2Qw45bMisCko2DGfmFxRW72quc819ashUXio9aLLg4O1XVPLznyC2rG8VLrowsK6grL6yoj/tB+fcrNgEE/4rC2uWZjXgPGf3feiC8jfNfLZYSA9rO152Xv5px+y9fUbedP9i2XRLBwQrMTMNIDMR006M0ViJlzu0xN3aJaJFOFl7ITrpHh6jTM9+LdUwWIJoVERCWr37JkYnwVUG/EqPKJH0y8gl6bJdAg0RsF1AQjVKd9s74aPgOPbRLh21hTC5etDTyvDYOPauPmCNjIZk1OgW5FK7jdeYmi6EII+McF1hZgqsxGvfYts+fSSNK7sKsqnU4WjGAnDD92t69e8A8f+GssxZsWoUAq8jx1aG4/f3wwUPs9k033yrQizTF2U+Wh1VRCzRYVEVAABATgiGbBZr/H331K4775CFJYTos/tEdIAHJOEAgXqRgDiDWsqZONmJn+Cm/8JU8e/cdMLBhSdic1pqYfWVI5XfGHUnhLaHIL0XVXojJ4wVknQuzJp3nB21Kzqcvc9FHUYo2agEFxXFWyvy8YPbqxpL74Korwm7IPzkyvTodxzwAAjgm44bqiA9FHhyAAPgQkEHPol8wQDDc0sKQCV9TLnpz4TxDJFFvODuXorWlnV8xNBLxHYwV/zbniV59ImhMLibbgQYasGqUgl26HzpGZ1QHE5zRxdAuPJeB0OkPfoKAn9Tv9Okz7L8USPrqgbMqsEUe1ekoAccroFTU1Nx06PBhoXtBCCN4w0PrMSyfsogWtDffeENYdO+ePT29vY3pDBms09D5OahLV4SHCOD2/tmTWbgYJQKLivCIluadK1BZFauz7rn3Lvsq5aE2cGbSvKBIJ05GzthISrUyNDImYFdX12TphMs24yIyYrOrt7TMYT59/UNj43aTr1XX1rS3xT0bIyOOrgovlhvvP8oFbdRlMokD9wzWEJtVzqytzB6lJGKUFw8uaVaUUBG8haf8sTh2bHJ6LrRXinQv+O83tD2tk9GKaZpKE/7Ldkb7U2KoY3rwXApH0Qs/AZwMDYYaI0woHgHRcxKk8FnPNWGlIY8/5AXVrNUyqMufdACcnV8Q0IIEiSoiFI8UG4MtY/HQhIwqtFWKUmAzZABza5Lfu18PnmwTkHpVWKkLIdLBye/Bxs88djtjBHU4YYGSJmFhn+0aUVEFYzgDPok0VkdP6nKqW2W4AF0QwcUa7yBoCb/7u7+LGKrI32N2Z6fnhkYGbQbxOzNlHcLG3Xfe0+WQoc4eCz2N6lbXV5xtXFNXDWBTa9PW+pZtsg6u0ntPjk2ePnu2olSsp6K3q8ftAcsLyzorMws/fO45szcwR79KsUz/ChMP2gRuSEVjzoIPsktK21vbjr/3LjNlkhZPjeYZTY4dWsTaTFFZsilFQDoGA8Xa2GIp/XP+WGqWwbiiUBdr/hg1IcYnnnginX3rULe4VRNpcHalCLXjqcDWEgOTUKdOvD8yPnbTkRtefOnYru6eucWFrna33XW2tnXYyUDqrAyBQTuLJyKdaeSHLt4OZmbGXrx0vqwi5JcfMUaNH+GkY9aytbFJ4J+7ZtVHHM21uGAJ0Myi4EcsJGWpL166xE1US0tbB9W0hME7tcB25zVhlEkzWpvVnaA1cqEgOuBFfhMCQtHg0GM8B9Noh9A9sNW0PBBm+lkEYwCNUEEpOjkKk4rUyQOgd5XiYVVlhT9ZOb8jQ8M01Yny999/f29XN59OA853r1DRrHUEoXb+MXaxIIYBzDGccUB1cRVU8mP0wRqVRPWiC3rgwwR8S3IhbG6Xm1tZFf0B9uodjx07BlswFcFtOFB7vFW1P8mFRmGygDTktUDpvpIdQqiEzKrQPk074KrHcNft7Gy1Dh6E119/E0yzWHCLpRpxPUJsU4EwUGIVwF64eM7YDIetK/3sZz8LYb27gRlFDl6l3TV+sYLUhoZHnYp3x513seg8QlvM49irtdhC8d7bbyn7wP33rq2tijIZzgiUmhK17LKmzlkEQ7BVLyr8yokDqNZfCv8brrCnKMKNnp7ewLOq+tT7J2anp+67987f/Vf/QpikxNywQMDqkm1lanQGHzZi0fzCsj2pmIAWv9gOT+lecGDn8adm6zc2s3o0+BTVltmoAia5rFzyeLJMvVjnmf7Mu8yyn5r6wtU1kznmH0TkZxdXBJ0WbQ/dWGltrCrWJDm1m3G/V64F/Dx+iBDzhyYUNHNH4vgKDY8XSAZ2KSySE6XALaMHK9LPRMnmk/dMlxcpsuV0oPLjT4yVLpviOCMdRVnHcqIUn+T0mLTxNdAMjgWlHsAddeRFtlxcThA2VldqymNyX79ros8Rb4XFlQvrWwsrBS2duysbWxvbd7ksuKymoYJ30drhyrDVwjIWx/AChGBsXApeQOKlZTGM+clnAGxCyJuAzer9JEuAgoz0JLoydenvONk1MNnZA2AJEDEZrv3gmW+Wbi4Xrc+6CbiydNkMQG1VqWGdkQwp4IPyqAjy0ynX+iNwmAtGAMOTwSwVZ9HcEYhd7D930FfNFkszJ0mZuaDMQGkX3EVliUk6e8hfVNZXLZQdk5j7da049RqNZuE4/bbcaL/6UE1Vb86kqMiwwQU1NglYMHj06FHAb7jpxo6ubmfZWcYI1UKbXOMgY6sBp0UcUDMcwcVp1NnZYivRpQsXLV37uZ/7OavPeWjQ4O6PDA1ZeXzzzTfCU9zH6kGksRjsGtyqqmuxxUnQBiQMMoRl4/SzURCAc1SbvFKgPjh99j/9pz9wLKR32fCB2bFgB/IO/8GlQE/MeHGZZcATnkNdOgfGO3bhjN+Y1S0ru9Y/yBpLUUTXgnVMjfxZWBLV7quCuaxfDi7DzrIBIgOJUPO6xppoJuVVDixcW3cbd1FdXGXbZrnMbbfeODE+tLI4vbk6b2CytDCL27Z9CgUAbiRD9OgFma0jLDCBYqu5cSrCpfnFJQ4qbTHPTDRCkDKjuqGh3s46CqOpWjvgfmX+AIvNng+NDljBxTKDRhwxMdtYJ0w2PzOLjYwhLXJQJHOKRUIwa8txBhS1YVGhx7bTOmAVlwGleEUD0e4hLwfXELciRAOTpMsRekARcjwgEwfckJbh8IvOfnD6xKmTZocscHbop37z/nvuraVJdfUWdHEJXEN02823gN/V0Rlhr7SsiP1gp3XWgBMrTFxM6U9yUYUlhcILv/LLP2vBIqFQSBLUB5ngohv6XPTm3sFXOk9a8wtLpZVsTgmPTkfOVrNCxaVllikCaye3WUQ9Hg5wriYmXNgw4YprrMAHK4OARSl9BMrMuUS2UqJ/1CWbhxeoo1SjntcnfMAljIW/5oAnaCFiJGCOGQBF8EQewAAhX+mZsZmHcuI8PmdVqa2MuBjIHmWRjBV4TmGUhRithrZSKrXInLgtG09oxwpYpVDHOOhhZfAVnkm28QPtujRpABSw0Mgw1agsK4EKsyjcA+9kbQ9PR0eXoV8Gi0DIqxpiIAeKqX9JfPIlHpX6lQIl2GaSUZodFQWBRawX2bwX/vJPPULbyFUBTSLYMQdPcYgaiZo9vHnOVAcXDACsOrUCDFxq6hdc1ahACITXCAKgQP3jf/yPfdK1LczP1NVX6eYFLawmtH/86pVr3BTr+uynNNjgoO/Zvc/YWsrU9ITj7rGGfMEBDaLVVbVA2UdCGPv27ff1yuU+tXteeOEoh0GEjMg1J78rq7FuDAeTCxsqYsGteTvcDsHU1roOY8llEumwZ/tymGOM0GIRm6L+0SCVtYkHm3jzbuZLswJojaGhr4YFwFI6Ba9cusqY6j7xxz1cXMPisuIIUonUFTtwI5YlOLVqaGSYC/XaG68/+fgTb7/7DjNtToOzu7y64ihcsxwWZQowAMgWXGepxUgxlIIY55A4WD36YQIQ/6mj2L/8AkgWLciJuuGhofamFuFBpzdaR+R4NHMXi6tL9ixYKp6lDr5to6p47oWj+NnS1i4gBDIITkOMjqq2higpAOCqUy+PWSm8xVVqp+Uj2Qv+q9QAAFsoHA7IQzpUUH7HZfKwmV2sVp0XVcCBTipFrPiJOjktQvDilZU8dMB1bPV6Ox2YCVmGzOXzFgtSUbgBAlXQ6KR3jccLc2Z9mqoBh/M9d99JRjCXoka1q0KKCmRQNV3VxhCFcMO/W26NZTl0m9KChhDNm0HXW4OmlC7QsEcGxbkODh233Vw6ODKgAibZHFBXZ5h6h5hEdbmw4o+/8ge/+Zv/I7CmUw4dOvLQQw+NDI8q5WQtv86lgKoi3rU7hOza3YPPumcnPXPH8dmfOm8QKDbmqFdF6KKE4xNTt911t+UcBoFYFOfeLczyFl955aWVhflbbr2Jo8DbsK2crGndtJVjs/Mtba1o0SEBKGYJmh5R3xxa8dxzeGVMSwHCOhQWtrd14bDVPsODA431dZb7//mf/WltlZP2ijfd+Li+5vQ9SzsB2XIohDsEa3Q/EcmT4kkNMPpgYJHgIRQPerMOOChanmz9JZJCLNZPLrg/+br+L6f0yF9kaJFi6gkIZz2BErFGtMVNtsOWL69sjE3NOqGJE6wDO9DbWlIQKzeQLE6iLnDA10C8OE9zB3jA14ULHsem4lJ7Axxg5z1iZoWbBvkWBzlBVBDXZIERC5umvSsCNwAzhirKNCKZepBsVhIZcCDTldPhI6dScmpBcsJNyraRSUNQjLEdLjFhe5iiRQjuBFNEPWI3MKMEgnB1dKKMs0OGvHgyHJ2xnXhCE0vrBVX1rXXNXTXN7RW1zeW1Fsi2lNQ1Ne65saS6rrg0lszhAGQwEzKsgSp+8gGAUqdOnhX/+3GbgEHLHM4vSXBetxN3PrGleQnQhwcAMQVqX8oz37QEqHhjzk3AFSVLxevzjXWV9oS4lQUbqSsSGCWgaDL4UrLxwQrp6gpfPAJpMeLSonWoKJUnc0yerCc+abzeWVmrSQGXjVnQTOTUUrQazZDdUIUmKUX7kpkNPPn+cYZFCvmCw5O2kkQpX9lGnaBGNzg44CsPz/VMlk7RJKstbLQjRypu2S2rq9VD20ZNuzysvqCHbLCCH3/qSf7QwtyiWWtLqBnbznQjJ19ZFYa1fjP+Rp+TE9NOTwcNAiynRi0/Q4EQRMEEql5YSKbv2LFj75/8YGBgkLsGAoqYIxnwSY8AN4kUGG/t8AYTOThmzo0+Z+UBCpPFsVGn9QGrCq9OD1Opr8xmjLFTNuz1+CqbB4bg+NNXYMFXnR55Zd1RH9pO5Wahjs95x+vVNTqCZqdm9/Z0XOu7PDl2bX151lBwZXmutb3j5lvucdAo9wvyTDcrB7imBzEvuhg4wBbyUvijTtGk5KSpOqG6dCNYHPfU1tLqeHr4EL2hlFaGaez5rXfcDP2HH35YJ4jbuPHOu2/heSxYtaWyYJNKMBzIYcPFzn71l36ZmvmTntA61IFJ5V599VWlKBIO594WAgzmrl27sQWfPfAEDQKK+5r1U3/hRRGZsVdm9VJOLdfowjsy0Y4iArWONJsX9YIDAfaBp8Sj4LYCwruQmdeWeTIzG26uKd8nn3xSF9zYUDM5PrS2ukg9BL7lAYSfhiINREUsll8UeQB3tk9ja9eZs+cGBoac1ITkuYXFvv7B8YlJYHE77ImFjcXmLdlXIwt97qJfWgECtzATy4giUzu1TstXqoHMzL2xkXHGWaIUv7RUTvh4V5ZwPV78iUt57QZbTp20Vp+0KVRkZuIq8Xm8YBcMlYqzUdMDPg2RH0uBopwgINbHrPn4j4cQiDBfMuMZecoDVYqnOPZSA84GODim3samBpDlgZJfYCGAdrKQDjIgsmG+FAMAx3AfP/4+GUnUiMCRLaOaEIg5uoyq6jyo23kBWR4Io07zh6TMtI76qRconwp/7aefUF6DQZ65QiYs5zOKUBjxnuamVjQA4eLFwWv9TBYMpAOhPsUVoalS/Am6eOdHP/pRJoy2NDXWTE/ZCD/PQiGGLWM6DO9vvvlW3RuWCmxw7vl/9qFb3lNdX+fUFzsQCBU0PtClS1f4VZYAYUFHHOTV6bREtfj65ptvLy6siJ6jhBQx1FQP2kja8QUpIjzLm9Rh68JxgUduKqqGrU0Pz8ahbErx8Dj9VVWVyqJaTgZQdXUNtfMLU4YBVJakrXLwOFXIr1l8raLvyjXOoulBjYrR5/Y5ztJcBZWh5vLo/0Wl8MiyvheOHr3jttvMEZrg8asXMnlv9tFSOzKz8M4UGzfXHBnEOIvebaVC1/DwCLngucjE+tpSdU2lrcPUGtWc+1jHoIrVNSt/5ianBRBENqYnpwwAHPkyuziHqxgijwM2aGFFZTXD8dobbzlMZmQsxnWgaUU33niTDWS25BIr5qvRQ5Vpf45GZGWl05TBu0SDAbONIONY6OvoKIywlp75VdYL24Sl1A5MKiSWRFUUp28kqHY1qsIVOTpLDpdKrf9DrJiKPQyuXbPci5WEOVAejRC20ICA4hqPZoNVUmzDnZocp5A5iO4FGrBVkQzgQxJWqtY2iAo+t952lwzQA8SjjSFBQQoGsiGiB12UWf77778XhjoJJOtdUO3R1P2pRlEQiqoiZl3sx1L+73732//Lb//P/CgCRePDDz+q9onxSWgwkQrSedUZBuMJoSCtu6fTXASwVv+jjhpDCUwNgQYqDkncgzB6jeXuffAhy20FtGW2x41bYJHSmTMf7OrqPHLDIZPB46MjttTimN50aGSUq9fY3AQIaICLHWIOej0opcaPPPKIWmBLEBqFbcZGYufPnWlubNhYW/72N/+8poJoJi1wrnBkWgTw4z+rtpxAZTmJUzi2eCtoTs8OcEolEWSPF9XlX2F77zkzE+E9ZxB486IrZVs+XETHweu3BCZyWnueHoDBsft1fnl1Zm5pfMrS0/XC0qLayrL9vY1lxbFGESZpL0wMBsBMfYrXQCPWFF1/BPF2sEv9tU9aKi8fUXCLAJX37OfHrrmNaLzXS8e/6oIUyGrMD+qk+OSXZOWXQogUTDb5dwxpxidnjvxOVXKVYrBFVBzRsU0T0d6DY17NOcbp3o5OUsjXYjHN0rIKa2PM5Oqr7RKw5Ne2yKUVXX/xhm7RDsq23rqWjuKy6kU7Aw7eVdPeSz0Uz56QzN4d2RF4pjmHvPrfnx7Wxi805EkvfgXolS00A/BfPAVIke2CifM7f+bE+JM0Yl6mwAAgv+Q9ADrV733zLwwASjbnzQBUla2Ubi62NtXG8Kd4ewYf93IbYXCwNLdrDM++l0ZnNTPGse1svnSZcTGXUiOGe5fiq0/etUojO+aCB+zdONx8o2yaiSapteoIWCF1SWExFBwZjvtYpMjMsdHGNStq4KJfbRYoxVMoI+IXIpSj4xP2mHH6dbIW2+CsBSlEq71H7Klwq6a2mgJMz0yykI2NDdPjI/0DfXaUGV2+994J+Hz0yadYM5BZSDPS9ErH5DfGxPa0pEPQ2Ra4CYTL5kVXxXrwhr3gFfcCkqb+HN1j8sNZuGhh38JRK4rYFl4ZyTJEeBJGvijutfXJu05RIvFRYylUeh6nDMY2o6/BBzWa7GRP0Asr2ojD8ntk1jFBHn/8QkweQDzemW4HziwszyGDQLaKyheXOMQb5ZW1FkdZeciM2QS8ujRVXV7Y3dFsGaAOdGScuWJdBxDIi4I50gBXKWFlLoFPOmp3opAbPlwvBjHmQSgDVnAwTtu3Z6/+Anptba02l4AGn1tvvfngEfGymIxl7W1TApboKY+gkHLmlUiZWdCgkI+K+tpqeuIdTwBkcuGG3sHBsRtuOCDUYg5BNsoJiImI/v4BnWZmi3SdDk2DuUSalpVW7dxKRfSGIGT1U8STFRW9+iCeEnKIEtVkhGr+0rWr/SpymKzlwRDjdUPYp4985AFdmNM8ccYaOb++bqwvX71yZmVpEf4cH6pCGcIDsiUmz9ymc8n6+vpRh4fCnvMrGwtLlpMIx7iMcuri5atqF00w2VLX4BKjBsbE6i2hz/K43q1SCMXoV8NUHCEkXhsLdcopJ/LtOIUbVUeRPAI4NQ6BragmC6ygch7ZPMhEiGxgQg+NmGywAeGm1lgzHDqZBn65gasOu/AQfNTlXhXJ7D9d9WT9zCZaHgzXw3oSPjEgUSlvU3VG5rLlGhVUu68QI266gShGgKchPwRm52YSmdtbfSBAssrCnM/AR6LDmK8ifDPStvrGBiGkZdETgdatup1GBE/FVQesh63z608A0e6RWQrSYE5FvecXJIdh/K3f+LxvKqA6Rw7faAkyAiwd0aLl4LjgjugXzBCg7sGBa8rDhgxgqbNjUhGGEUQQbWB55bd+67coH0Ufs1Bm5BqXRE0yIAkjOHPIIDCYAaUWoKSw12MT41a4OtyKtFRn+gNDeXV/+Id/6GAp2ThMBrXi5ejXWaji9dfe5jp7IAMNBT0x8GhqsYAHMtcG+kGQE87WKH/sqaftn+3t7Wa82DgbJaGNg2R26KDrhKONeacfSHOxlptPFpbmjJglClSq1wAAOQjZs2sXLkdQYY4aFbz77nG3e+AeughAHgjLT8ayAfgnf/JV7sEtt9yMFVnhBgeH6upFpEptBcMcNKFXBI9qmq7VQ2G+G7DVa2yNyxTOzK+FUp5YbpTWCymCV4Jk1kQee/Gom5P27tptd6AOAFcNokUq7cE4eOSwP4lSwAkCrmd0orB1fpbnsSMcXJirjhUwpXZw/6HG5gaNzaqpxfklvxZxmVC0cXlqZnJ40H2IIxNjk96ffPJJK+2sX3Iikw2KujT3JABIiWk2hckqRDS4gYeiZ8wcebl1xbBT4ASxrS3NWOT0Ou4Fw3ro8AE7GXylRWYM+/qviWSDjCjrC6cm1Dt9cP8BJkZ3YqbFEqk4EJbbEEu6t8Rd6DOu4o8YP32QCA0vuX1CjDhkoH70DZLUQ12wIn2fsoLReXCUwhlYiY6bx1QNIOwy19mvd1qU25imJTNZEGWK9x/CSSPbPXtDnxF46ODh3ODff/8UlJh+g0oNgTGljZqhg/9M17777tsf+9jHbPByZG1DcwwzEAJ/DQeqbCjx2fjV3zdw4803meJ36pTYFRfB9LqQocVRToezwEx8urK8/PLFi+yPoI505025udNmUdqLzGefffa2W25Ggu7cjMeXv/zlv/N3/o7+Jvd2UKalOTRgzoXX9OZrr7z9+qtN9TWWu5UWFTbV1/FQ2WWcpPBEzO4bUvrFCnyQrmXhtic3Cik+ySwd1TAkMFJgxbIhwxbEemQQIyJfJ2uQL4+T9PXU0j2yhe8bbgfft0yc28BmZnZhcnp+1iSIFYWbBUa/jXUVDZWblWXhdlOPjAk8SR16wlewooGgJVAiw0VWAIqj5yenJ/Rs46nJiSln+DqQBIAsACFcbUt+1KkLmTJ/mKJcVpH8VQaZFSQFoDDEJy8S5ZSORqDiuiOudfL248B+zEF6csFX1tO6lAQnAw+2uFWvJJZimzewmiSti3a0Wpr9c3GSe0I3Cle3iksr6hpa2iwBKm5oHy9oaNt3pLPL0UAVgrNxq1Bdk+iO+frk/UdMN6Y04wmhYHl6lxibgv3q0aGEhSc/OOfM7+ISG/u4toFNMCQAGLBEyZ3f7cGftL+aHn/FyUzg/eUSIEMBtxUg5/tpAFBWsLg0PVRTtlJWuNLeUs/m4CE7zz5kOxDTSWvrk+MTDJ2QjSu0HOFgDpYCaLAAOzdTOyIyThKfWKUaLPGBA0eKQRzePfAfHh6ipWahHTLhNydm8bEPtCJrvr2P7qDVisnHeTtUltEQIJyYHFOF9Z1an1bmiiVSBkQbIXGLEwxc2dV9e/bzllhCS7vEZXTbhw4dNk6gipU1lRa7nr1w1p3ot952ozNvYwlTmmnXPDVegRL4o8KCRu4dS+5hJaorBbBXMMEvXbJoXrxGx4FAdSGBUaKNZtEtake+/rfRXX7c4dhTEatnpeRseGUeAFbgIKe5qQWqHhbYJ54/pdS1cKiQZlIaWHaVHsIKf8zqxYgxDUhkSLjbccHgWUrgpsVedyOePGlZ5jK2sJmuUjRI40+a6xUaZttLyqoLSyrt0XMDcllF9L+WNba1Ni4vzZaXbNZUlNRUl01PjOh0nBdq9R8LBj3Ic8I87g8lKTYQSnSALfWnTqqhqXlz3RrNQJUS6T3EHbICmPLGw8B2eZFJPHBg3549+9o7mjX6oeFrLx17xZBbdwmIWURk6oRRba6AUBg5BbFXQ7bW4TvffQZ78Rz3sgG3nAYaoRhp0okiwZYQRSZ5ZRLlJAUAUeqXqhh9gRw+0tiYbkg/IloHMVUomEek4CCc7UQ4xGSDg55LpXq3F198kdk3YBZHcLwg+Nh15523C1kyYmXlEdIlEpyHLT1Rtqmxdn1lVogWpdxd6Xx9Fw3LL3YJjn6TC4HDYrcc8L7BobbOXURvrD0wPARbQOgTsdY3Ngl08uDpTC6O5+KjVjaxxki2BItnz8IroiJb5fFEp4bSzF7oYUVzY4t6FZXHg8++ZsuJabiKJ3SSN6tjtaAR27tsrregIA01VaRPB9MDDY+U/Aumgm7VYARYFYfIWe7Lqogv2IVi6VQ0pZXVtFR3nU4SeMTUhoYsrzXAwHyYe0BWBc6Q2nWHKg5Vh6q65myCrayMSUtHsbmbaWkR+c6W1bsZFKlFt8WaqctX9VovwLRCDDkETdzIxAcV0Qf00mT4MTjCPKlTi2VR8qCXAnhIH0UeXJIZSjL4Expc78Kff+pelHNEFEAzpLnaDHZG10o+mufMGYVRqKRVQuTJ3YIKQ80sCg3KvDDHBm1h51NPPHnTTTeAyc7KY+Ot/U+0kGoai0OaayvKqCJYKogwapeRgx+BYRPr49f0EAhw9WtNOZ1WHN48PPktlNQ8LDu7/fY7aTMZKy6nxWcawOTkVIt7pEvcnquScEmh1NnRfeDQQeJhy4hE94CDovWK03L9hMUhqmtqbHC7B1BT02PtnTApV5ZKcY6DrnRoMV4bAFFK+hd7MZmz2Yh9tMSatjhuWU42RQpklIXwlauXLF4S3uaVQtWA7+KFy9PWKmsDRbEBgwNK0tR6cKgfi6xP8aftMibI/MaiheK4rM3wjCtDFoBAwNGZfrGLobXi0May/Xv3YS/7RWSqtuRj1gUFQ6ZxPeUEjTS0AO5dr56YOYknQQujuzArxm2ezebsju6Ons4eRzDzquYW58QeaxuczFazvrUeZ4eXl1B0xwcdO3qUFHl8VuPec8994lLCzEw/Xx+qtuFnw9fZ2RXXc6ewIvfOmnX+NAWYnpjgzaFIzJJEdFnO9jbUWXYEzdqmtYy8NA6x/FxYemUPhCFLX3//jUcOGd+b/XAgmkGOvRZYQcroEtai/bQOzVxnekUNEE6FiBiZFNvCMw6Pwb0uEJ6asYK0kbnEPRaWHspJiL56oSd9cdrGeT09bNkaa/rJS7ZQp2Q0MRMbDQtV+oMf/OCGGw7L86d/+qcWRKkaPjBxf5zjVgGUE3r2JKhC/2Tf84njb8tJyTVG8Xu3IZueItMDh4/Qds4uvYLG5atXDh04bDDf1FzHTqVOKxj4+7//+zC3KsD4hF+tq+MP6W+gx8VnUNo6ui30RjhMzFfcfusttE7tf/DlL7v1nSogB0r0x7iaCAauXl1dnjfnNHD18rPf/7Y7v+anxsoMuwq27GCidaCl67PCcyJu69PwGbuwmouPG9TAw/SDCXm/+C+FsphrMS0cPuT2kn4OYXCPiQfEcC6W6JQU2hRAGy11Y+a21lfAFFNcWFy1k626psFNoXNLqw1NLVf6rg0OjZnmip2fye1wSkxrfWnxVgzIjZI8WMf/sGKJ7x2LXO2DN08lOh4rcMIvRRP0VOGXvw0NOPPJQWCvrvsH4bgCxWPgpvBsUuYYuqTMQSMI8ufHV+kBynK30P9gS2CTtkZIz0+uwieQcS8YGKcnhbGWCJ5KPXm+xlfp+cnpfrlZcExF14zNwHdcSNARwyr9somLQp69IABFipPd65pre29cKqooKK6oaWzv6N3f2rPPAqE1i9HLqjhG2KL/NijCAUMwBmdydg5RUA0f3TxGaGO4do6yMAAYHBotLOb82ZjE43P8AYzIcUNPkeYqtn/1L7GsKuZljf/oUlxEFhAFDmNc5yC2mAHA3+Q9FBca/WxsHP3+d7eW5xort4aunN7XU7+2MFFmUCPSYZZkZd2iUXjQcHbSIFC60AYnWBRwbXld5xo5ixwbWjQ0HH0zA6i9owiNegSa7EEXWYS8k1/FLplubXILbwunRy8QgSE9N7UR1JEftzVV+Vn25cVYuFhX7dJ6HNgS9lpdX+ru6WA53jkeG6JScLCGiJaWHU6ybomEwUlDc0zNYeXk+Jgzu5xcq/cRgrUpRkPuu9L32htvXr3cZ5bP4pDHnnz89jtv0mSytXEYBt9LkM1MnXXqlAFKUhgEpPlTu7YjA19ZBpPw7A8fgivPSGqbutHXXnvt4sVLiEWFPJohJ0Bf4/BlROEMev2yCfIwjCriROpMcYy5E2xVi3bOSht2gYmB4FA8pTz47E/sMnDF/6SHm5YB68X4oHW1DSQSp0GaPZxfshg4Tm039Wej59a6K8mm5yZr6yppf2GxiiqNeTdtKYpNmBUzU2PNcb155czEWEtTg/0HTXW1zvRdWFqbT5Fd1lWnA3NU28ILBxRhiD7R7ClbKgObRM+WVmK87V5bXrAugv4Y8rE5dANR994Vm1/hjCcWfx4//q5TX8Rlzc8w+/jjKDrAdVuE4k/0srqvvPIK11Cz44HguerkQf6nP/1p+GALTOCTZw+UZYTxFkoW+MdZmelqKjmxHW4IARkchNMKX/VTRAYsMw6OPHiuZ8FzdlXfx/nOFl583ZGM+KDPovM/+7c+pxSt5rexKejFap04TPTaejQ5ATQp7cWBL8UFKxOjI/pKusEPNE9ljELQswuLFozZJF1bV880cfZ1kLX1jZf6+gkOJlxbuoFqjwyUh5sLZxoS8PPgsCgCJSadcMMA0on2dA1pyCQFL+jisNI0E60eAPGEoyJ/dn6wlDmSQREvuMSd8EBefq3eXIfDxAHxiT+Ae3ADNksEPgrCEOSsnNbzkI4wjFhvhLUM5nBJb8gToM/iwo6sNRWvR4uBbNiZ5qbtldIcA6LRuMAHVktRHQIpht9sNtk4TY3fFvs4BcgAd95rXBhX3tXTc/rUqT/9+tenp9Z272nRicujIScxhQdrKgBdXV3dXAvYqgLayNQ70l5CSd7LQjrca1Q6kuGjBaODBHEMlYqgHZJeYt741z/7OOQMPWHJhqpAdFeKiWLccco4PMEaGh1RxovZHLfeXr18ZXBosLe7mzNmC6CFy270rK6Ku7s/+clPdrbHWiVL7fWEgmR2rwCY+csfpZ3aBm3DIBpJNrScVDzkapk+vOEKY3Kl1hIRr93ymDnW8PYVqdKh/MPnXhAwoOtIzUVsq8UaPYHimIJ9fEc6Yac/EkRAnYwJIDG3NEbDMwzw7s4ARo3ppKnzc3H4rqrFWgZHrpkbp6N6PZc8kJ/u2FVejMzu3bv0sBxgytbd3dXY2IQ/tdUNbk5JSjjLM9clwIrKmieiuxDAT36bFJZaCGRocCxfDocEaCR7uypuREt4hPoG/CE/UW5aZfjZs2u3iVo58YHy4ZUOE6rykBdDapQltMCmYJFszAFkcA9/WHyC0MgZFF8xXymWwp9e5KEZhrOZt6EJIyOE5U+cNCDBfLSgkSXKDcyvoxmznVKXxWoWRLkJ47HHHougbJxLEDNx+nRVmIc5eeqDhqa2mjrrRyoFd422ccMC8mghKyvgO7ASVg4g4PsaF+gy+RZqzw1eQ8UZhHgQyz0V08qjJrVz3UnQomh8y0WAZYsNHWmd8/gQojrYpszhNHP0h0eHdEX8dSoBgWzT8ZNBJCyaKb9E/JQBFVUVoUtkIVBHVTwMN7bAxy88QwppHoB8aRFv3i/4PAAiA9kmKj0KB106o0zuuYUrfun8ubnZ6T27elva2mQWg1eXvp/IOnt6o9OtqQNctwUZjDp8yImc77W3tmC1/CbxxYcAF2vEdg/0tAVCpW9AWSNbXmEGK5rV5UsXMoH8Gzeg3XXHHZjJZvjEXmORbBba9rmOtKl+a23l+9/5prWgsxPD3e2tU5Oji9bY8GWKC8oFbqrqGES2glxcQ6ZefKOZehEPXoWuRvg4QtkpJdxrVHOMS2JpKDcR/rF/m2/M+5czxgHxKGZPgVYMiFBwQVVZiV6ZS8PRXFxdn19kkatqGppdAurk9Nl0pU4OUjuuq7aypKWuwrp+ziuLpJWo1NQD3Kgx6MkexqgjsEqT2qGsUInxg5fAQFDeVz2QlFhuEo/vwXBfNwTKg6btiQsEZhqlyB/5tkFFZnSam8gZ/CmDJ8ORLQPBPS++enwKx/2vPvkTDsvmAS3nzKDS8DOy5K+5aP6kCuk7tGsL3P7ajj1l9W2F5dWLq8XLhZWN7bt3Hb61rfegiQInr3PeocInE0WO+4OsrK2uCaccU4gyIUdbDAKRe/KDM0PDEzsDABYAZ1CcYAQVGc9ALpGWX/J7xtMYwAmmBE0FNj80AAg4a+vPfe/bhUtzDVVbE33n93bbjjJZVrS+sMwTEiItCOudTxZOZwuaAU6UxpJOTg4OoNe9b/xs3R7N166l4DYE6Dxr4JdWaJIeXNV5Wxng/GXLVn0Fh+B1PawvA8gLlcESVi3L3nqPzpOn3NbcJnjB2i+v2aZfcOXqRSdC333PnYy2tT2rKxu1NY2usnK8eH1doyWe80tzAkP9fZdLSwr2MYCdbbwuRmBkaJQxf//90/3XBi2AWeZ7rG3oeT/7s59p7YgDZ+zp165ZG45rtPf1GMb4E4bYRdbxqbZqbHzE3nhDXJaBO6PnfdsutHfeCU8u4kfVFAkVAGIR3zoW6F6fiSIUfMBVdo/ZAROZsmUrBz6Tor1IxzrM8Ul+bPerrHTs9eA2K4RpaucPBLPq6ugnhEHGW39ipmzgsCGQIRTwhd6m58ZoV1Fh5dpm6fJK4eqGazcdpm2rrN3SNWur8zoOC0XcDWZACYHF5RU7nXIHkQESLEFf67+qU8jtJU9aQsx40xLi5tZ2U/1EH0dmORvEJOL87K233HTfffc6httM9Ztvvk76Oism+iMPPSAnj1kVWWnhiQodpUCS7gbVKMIiJMBn3+7dXvJ0sT+9s8lkAYJuWgckOkN8+OMrxXNCJlbgA+lARk6MzfzUC0DAO/5kbquXgyFqKbijiyFZ9crG07V7k3+Fw3jObQBKP/XY449+7jOfFnrDAWxBiF2XbBqsoA04/sCBW2KjrTZq+djUaL/Tn5WNk3wqzfO3jo9NW9jz+ptv1Tulqrae+TZ404tBddKqlWiJGBhi1WniOQWDsD8zu+CP837Rq1J7wDge8sBcCpToD33wCRCJmXYYKo5qxt+vDPwiL+hSRGbiwEN5vCiVqxBH1/YdtaIKGEJGBjzBW+8ZASmqUCkclOJxAehRIykgmRbRHx2u/DLQBDmloK65sV60fmx0OCuDTzDBf+j5ivN0XnHVYayvMa5a37jp5hssMQAcq2XwAhm0KMvroBiQUbsqgDp/6TwcPLIZgvqFJn7SoqTMEZLwJzgao+0ZGh/XGEVwQLX8KAIKzoDomX1SnRTRFzUWPnn7PtVwfbgjV65ew3RhW75FTKIntTCSUzEXSjam1JGuitkaY8Mhey04xDXVedpvvntXr8NAnn76aad5qswl0ubDRAQt56fTdBQS4AOuenQ63Zy3CkVtgB7jFJKMhJhU9JCiP/MgAcbWJuEyxpEBxNBPXynBmXMXstNmjtW6arV09+xSEPFKCXT5qqUpZQyjz5JCHkgAwaFdmR1yCgVTIEtNyMBIhgbgINNnxsyIX5MYGxvBeh2fjZvGbl1dPUaYoilm0Axfh4cHdUJYZPEMdgELzqXLF+BMMLinIFogI491PTBM6lJaXRUrheSRH+E6Jy8asDV5eEXt8AG2Ojm0a0U2VAmjeVQBgocHgYewxUDrHym6/BjuxGWQBUXkgQYOaC0Yi/mGlZqBxGxKpFAjKoilel+mBAIc6wcffBAERg0aDBzMqbVa1CUdQDycmY+9yKpQVrDBGIPr590eBmJiDjQwRQB3CNK1/oHvP/vcwODw3EyYuV6HpHZ0OLuaBWxMVsAUG8hOH1ZK6JpcamrrLRXRVNgpcHAjgQ09JiNSdiYDQpCGCWivdGVCiuphKW57x0aMtSkZz+35Vhew4CtF69o74xA32oVG6kQHwEcgouTRhmHuHbZoVJ2wN5gwgZLqrNeHCa6qy4wqcvyJM2RNIYkMTNMLvmoRAGI4TlokQIIgU1dU6MgVYUCHB/q7uzpuuuGIvVNyAqXIhYuX7QcoLImusbGphblnCQBk2ly+u7I8qwEqDqUf/vCH0o004Ak9ECgMzDGHBkJg34GDwtyhPUVFF86d1+oNXsxOqOXxxx+nNuZ5vUPJr9nPiZHh2fGRns62F5/9/uULZy1HsT7GiXuOGWJZxVdWzGEYAxhvVwjUhQvLjeIzwtwDK6zj0OY/wYzIbzzb7r1GUVzGw9QZiEUkJz+mFuIrZEBjWOSxhyGGAbz1gk0jR4pRVFxRXF61uLI+ObuoTRuBnL9wGWkmEhSM1WKbBeKYzQ1V1WUFW2tLJm9Vnk2hUQD4cGOO1lfD1HJgfBVzjURnGKUnMSlciuxSp1FHoOhvVaT0lC9d1JKJ9Rs4J/cd4SB7cn6y9ihoqUrOrHYvvtJb6b5+GAjQqQoTMhECzM8OYv5Ui/xq8et9Jz92papiCUFifqxEAl8tAHrPtaDUi6OC5lc2G1o7mzt6KuvaCiobtkob1ktrVgsrdh+6qbV3b2VNvb40pmmSROiYLVXKWVekVcbih7iL3bkDRU5tPfnB6ZFhNxXqWkpteyJTOIgA/IQDgKB3S+z3xw4Avv/MN4pXFuoqNmaHrvS0VRoAlBhPbQlRiSPGRKIGQuGrq2J3He832b3wJ1CNY4IR1GByYsTlqwjRRlgzRbJJ9ELtmRe/CNRYNCVPwZZdbdMIkR8bNSVqpjjnXY9pFjrZ5KaQyGaBLrehtoHRgNLauktILtTU1xw4uB8OdhERMve6rbWjqbFVaINpJIX33ntHsJmn5UaNxob6yvLiOeGpsdHXXnudnrv9ZmlxjTPncE2nWrkXpaSi5KmPPWUsc/HcedbmgQceEGZiuyyMZJeEb8IxSj4oKze3IPRTrZ061lNXC1umnkYh8MTxk6x0a2sbruvdPOKIzpMJ2SbTiiFU1OMFW0RVsiLhKrSZLAWZrHJzLEnJaZ0UlMrgYUi9QynbHx0K1uFbU3OsF8hgQVYEwnoWvM0iyLXAUC103PYoA4Dioqr1LZuAbXwvtG3XeYED/Rd7uju2Npfb3WZTXtrT0TU1HvFv69DNnUKJBP3SClKCvz0YrLoqRLWEnwD3GAAIfZYL2W7EEQucfxh2dgjc1j380IOnT3/gdB3zRVY0xEzv0nK4dKYCystljr5vZkbPgnXSEYIn9ASZPBwHqXHu1WtPVuYDnqhdf4EniP2Zn/kZ6ic/vvnFEIoEZlNLO9r1zgBKhyT+yK84iuRRnSrg4BMjrwtD4zPPPJMnsXHAYIreihaDILPaa2PXZcypWufzP/0P/z1WwB1vERs7JC1tNrxPKxhpQoagIoNG7L9y8fThgwd1ZG7ctMDP/KpdeZbYLS2vVFQZoixfvHQlQplplGihMsVGEfQytnAIRocowxzlh1xQxCLJSevghlHyZJ2Bia+ZITJIxxApsgGSDsCNG58UR11u9TKoSPHMqGikyUvUYegltRoFDc/MpWcE+D9kBw0wd37l8c4YK44J+ZNErMAoBb0gCmmw8kDADgUzFYbrGQiY0KYGHu+Q8SjonatA+mo7tP+AbX6cEJ/gL3/mFRUK7U3XCyBEi6YM4f8kXwt1vBQZ4KMVy0z0GKWXgBLygRI18b5//0EDgIw/JqhUL6Eu8xwUDxx0mS7IiPkt/Ds/8zRAmfWWh8Ngwt2x9o4Qc+yHi4Wzrt/2q/2onlVYXF40GqY3DtPRpwrlTk+O90QIvJEvgstmAFBlYKSrtLSLLviEVBgA6BfGAMIGfnwgMVEGQh5WRiRSHryWH9fkxH3sxkSJOKJdaXW+4gICLCDk32tyWHDhwiWbbKyKTmRH6OLylTjiyvgVcKtEuGUEJ5yEEGUFhNCrFuy2fRLmzk6mUral4gBuem9srjPxJ15C84T2BwavGWa50UB3IjBm/Cp+7FeAcGJcY3fVfKWlIxoMJbCSh5zgCXlTh3CguGh0LgRmYrvu23BZTuTQJ9URBFYwrPfeezfMs8w0D7NLmMA15z0zqUy/R8FQx+SO+MScw4XtYJ6Ct4txu5nbN/ATAnKyOLx5HiSWqh0/PWrEDdrmXX76BnmYGJ5JpEMe2EIGLRgLCH4SRDQAEiHfdC4NIPyQqD2dsPagzams5Hws4EMdEixVb2hs0sucPHX6e9/5rsB8V0ebADkvFsm1lZXA7urpRZcxZRSJE+UdV9oGAh5CAweMJ8lF1R59OnzI1CfqpGDILsJF4UuRqT4bhtgFgrIWQRpcASWnCSjCwt6Dhw/ALXNes5QN1fJTHsXxzTsVBVAtpt6ij29owAoqp3Z8VjUVivHepUsyG9mKwYuma7GGBL6CL7M8mKYDoGaYSQRIsPgnL8xVnVljK20E9Q0ATpw8BRPIQ9IgCv9bOzqB8g5/c/RagSM+nDnY0lwrNqhe3FYFErj19EdxslCjR5/nHaNi4Dc7h4Ekxa2hkPT/D/7gD770pS8hRIsQZVALlQDwwqWLY0MDB3d1Xb109lt//mctDXUldsM70ndqrMZVwEL3qd9aJJKVrcKSAlYiAoor0a7Dslz3NVNgJbxtMFOk35cYBviHBNPp+7xkliN8yUhMAwBAzAwkv9/swPWl5lwNSweLS51yySXacgtsUcnk1MLg6PTCIqNRUB4zzMWr6xauFLhFr6Wxunhz0fSFgQjAVnfT1Yp0zYhsaDcAIFZQ0cJT9Z7Wp0WvEPH6bS88DQkCGS/xmx89qEKOJ/Zn6H566Inn+l/xr6/gEIcaEcWb9khXOZ7IHBinPQDSvQThwZltmBwymTPMXK8MXuTM6TufcilDGHVRLX/6hKKMQ07JeRT3CQK+xiF9FjEVl7snuKlzX01T13JhxfTSlt99N93eve9gZX2LVepuExdbFfIo4c7HVYlhPz0AqkFgBO6nPjg7Mjyh9zcA0BuRqUD+hqmCxM5c9Q4CqMiI5ZRMtYhS0Qby/3/PAHznG39Wselih9XFsf6mmq2VhfGttQWrEJFCx1BEb7Vo6oEurUfz5OyCjCG+OmVLcLeivLirvR0HpGsR2p22TCs0GQzxwhnV3DJpbD4911JkZmwB0cpwjKUVBtTSgeGBGZBrlQLNIllCY1aScIlYmp7dDECPIsLP5vGYBV2VJpYJN4vMRhlEt7e3dLa2OMJqdXFudGTgwrmzLjNxwwtaLI2y88VQi6dlSGVd5fT8nAmH/fv3cUltWmNs3TzDmECY25o1hLYz40yE89P48/rEl196Ff5W27NgRjryH33xJTbBUYw6gogtajxbRRbzuHyT9qA36yfp4Em2ouxYKExS0axCFNiSFfvKAMEcfFbQi2yqY44AUZZ1RamOg9W14ISpZJFkw2e2FJmqUJFsAMKNHFkhotFE7BHVX5sB2CiwvNARQ1s1lk411rtvas/untKSTSs/TOrVVFRZa6yI0Al+QQ8OFEAtor2QceSgJkDWjDmHXgrrJzg7MTk9bulBHIFdrV+IZUj1EUo7/cFJ8/zu8eXAuM9RbyVopesEh/WmLegiR1UABbKy3hlzvadPaPQns29tCt0QDNIdUBuUPvXUUyYEQEA4MvEzS013g3yb9bECq/3JUGOgDMpCSRePQC9Ik+JdNp2OPB5YmWOX3tnZLf3AgUPYCIj8LJlOzQKKc+fP/j/+my995jOfYmPMO8kW21Qm7DGJrQWpY41dByDA0zItk/OOWrL7is/jejjabstK3GCzudXR1XPh0uWzZ84Pj42p1PQv6edRN7oyT+CJItRlEsgCx2gI4B5ckm7VqDx45VcGDPGCA36xi4Z4QR3gEn01fSERw3XNWcF8AkeNAAJ+XXOiiGUgrsl0RAJW0HbigABG6RNhBSzgHomAA+LBEH9iBc1UCxL84iHI6KIzKgKYwmOpXQL6uwarVmpraS82KgsNOACoUhyGJ4R5ffLQqEvnL+jXQJMNKACxAjJQApB+YqYa/Zn5M5buLSYd0leFgnoE7PJVXfYvZFZjHU7C89y5S94RggQIJOTzvuQNCEiHmPMsoqWko7cKv/iZRyT5xk71DwziKQysTVQNQMwcQEw80DgotLbvQDiv/Vf7xidGnamvCzUbIbRt/a+CTDED+rc++xl5tHnWSUgbTH4McXq0EHxUHQwwET0J/oZGkiPNMpOTKCYIUEKqqvGI+fBOiTFX68pA+DoMGbA8G67k0mrcw2oeQIau7l6SPnHyfTFpsROCBKezp1vMg6PJ9Kua7MmyoTbmSlz8oS2JzvLRW9PtfYRhXT9fRQdgQpnXbo2MEaBORZthkemKhZU6RcNdAyzePKIG+wdIHaPZ3wMHY3ZFvSSh1yS/WPd/8aLLu9ACAfV+/OmP4wBdlC16kaTE0MMHDFejPDJ4D+9tblaj9wmBmEPxwZcZr0xWohfOHPdOp6HdfDPZq9EGADUiP6sjThI3hxvz8dkvttMkCkdTIWDzg16L7OTRBiioPIp4hyRNBYqg4a9SVu/994/jJ+ngpOUBfpEv/3PPvyhnS2u74ZAMEiGjic/OLVjTDw5WvPPmW9qMmLeusbosrJUZd2UrSuPISMcU0HsRTis48ZPEcQzV6DLs9IsiaIhhq5RWwIFOuxXNoJ8Q1QiInlhBmeHvq18iJiYpVsDjpD03Dq2iSECpRUEiUBaH4aPGDEqKzEgWEaRv0JaOY+BgqbJkhC25NcqsIJTUiKX4DDeVSuc02MWO53iiSQvMaxHeLShivm+7+abWltBzmKvFolkdj4roxsEjN+DGwGDsyWGsVI18Wjc4cLWzvU0RHRtKGRpiUinBYTjcCJc0ZVULrCgSKriINrBQGOH/u+++R3Mz2pDTXBaKIKzB4k/B+uqu9vqv/fGXLe4RDepoaRwd7C92CJgzQDfWrN+SWUBUxMFeBfEiTjxZYKN0v0wNmNQAOSlUzTUIqyKRlOmAX1ni1xOrgNK/yfdlpNJfbGUYLE5hOJ06hlWztFpToZ4yhgGbBSNjM0PD65XVBcWlXPxwQSwzUAo3bAIuLVg2lwRblfKcA7c00ICnnCYM4JOHKLEm3WA1HObtx5855A8THc/Og6ZEUUTfSyOCte21KyYFvV5kVtyfGZb3/OhnVI0/0lPvE/POPvkNfNJXL2rczi++nniYwXrP6YB4SSyK4YQn14XTEkGQIedRkEpIydlyLcrGnxtrZnCBcR/jgpXPJdX1bb0N7bstCppfL6lo7NioqCmpaew+cEN7zx53ElPpMjzLRzDlUYrxWizVD9Gf/OCs5af2+OEWQeN0WgAU3zKqO79eoBGp6clU+P0bBgAc4Wf+/Gu1xVsV1i+MD5Q7bmRh3GIZl7VnerE0W1obCdCrxVFvbhLcMrfpNottqcxNR45orWjBbXrOZmod8mCXJu9RRFsGxADAYhOONVZpOCrSrCi8BoUA1fEgfeJxsp/lblaybzgpgJauCmecZwsgPLSrd0/EwmL3nsm9OcNNdkaNnW2dps03V1cGBvuuXb4wMjwgmrYwN9vS3Ig3VCmNh4sEXPU7VmU5YMWO7UOHD2qz9nrFNse0w6qntwvakDcjPTntpNE47AWTRVuYMmSKSR8+fAM8nUCAFodxu6nJeXqU0OZLiHmxh8qcNpUFKj8g4AxUMRP5iIWzzIDL4J2io9ojZ+68pPuTocYdusfuyY9vEqGB7eDImV0c7x5wGCUIZF1Vl2xSzJfPzI/HkteNUkuAHDO2tGq5cm1Dc6MBQHdXe1Vl8WBfnxGAMWh1RfLqNrcMk9hMwoUDm2kCA26OR0uWs1CKHb3qQotWIkTIZsYhE2trelLR2b4rl1966SXzKjwoo35nqekKn3nm293dtnNYox6dOxp1x7o/RkYp+LPktMif1AlFjG3uJcWodQre9TK6OUQpCzEvGCsdNPkxB0/wyqYSQPDBVyKXAXDqxODryxCiUqjqgNh8n2yTdZiERThygpPylBiIZsfD6VKYTwlprA5XZ22B2S//8i9h/vET77qozsGmaDK9qQc0POvq7NEKaZpECxlsFTPs4cWZGXDUh0ZNGyxjcXq4oK2FQAaQDhWEqnEXrHDAYdNowVuJ/oQwKqAKf5SiUbvwwMonWiTR15xHh6Us3HCABHXWvup2kQYaYjNkZb1IxxZVyO+TF7/yqxr3QJZi1ZINCeNTk+qSSP34NkD5U1mV0jQvMM+YgCB4DUkiU7s/lfILYVJTEZBKaT5wTjpcaQbAjDLOgyNRnuDG3BwBaYzAZv3PinH+/DkHtAgZZw5I1C7UBSznE0D5oYReoIhMP25eUnMGEFhTZTLLpjrznFI86DVzoHYF4VZcGMMqecDUCaPUuwez4RaL/gk4zWQq4qXwn/6//hthSDWplTMErhcfmlpagSMSk7+i1Owp3YKfW5mASNxfsP0URNNnKLG9jdJYD4ybv/Yrv4QwmXNPqe/EBeaA34OP3n3l94TmXWe9GvHag4x8aA+ktTHxFfLGcSJXCj04CzERcW2MkLq7wtHHPrFP1lctCMRf84awgqdTgChBViMssAEA5VbtW1/oGgvywFNgHe+ozYAMq3Nnz4KDuaowKcLdVzyLFj7Q8I66ZFxCD1AEK8jDh/Pt5iZ+G0Nw512302PuFFUwOeurzAghLEZZBu8X4tgly8fbNNpoFTyN0lKl/AIIL5iQsbqUpQcNNtcmRVeWpkhnnkCzB0OXgASBZAuVTQ3jHrSt4EIvmeISJqMIcAC9IJbXqCxGAU46bAQkkaagr6CxU5BndKSIHuVS7BfcYIhvOgJtG0B/OrJmB1XxYBqMyrn5efAVBDmOLhVRW1iECRm5uASj+q5etjDuF3/xF4nA3AtO2lAW2llSaHMM5cFAEGigKmgCzw22cDCTS8uZdeKQ355Zp9yboB4ajLt7yVE2dlmbl4GGs9QicFxwtKBLEcUFyaz/eeed93gC+/YdeOCB+8TJTImGNxLLTrSlmLjXZ2tm3i9eOAc4ZPDfr4YKAQpgXIEiMtWdvPrqq+wp4Kqg8JD3aDUOBoUMrMgU02DC5moC6PqTP/kT/Hnssccc4IghegsqPTo2oSAp+O0bGFSdhX5kodtmy7xYoLwuHjo2qm0ijWThJuBHpYkbZHyGIVbI7BPuucGXztANc6/f+c53+C4///Ofl272Ef70TTao6ioY/kP79jz/7T87/tZrHe2tBesrS3MzttLypyPo5pjJMPS8c+rmpCkHdCy7biIC+elRdTjY6aFRvBE6w31XKhWkKeHLoj3n8ZuyhWPqhdyT08+ds40znMwcfIfhlg3qwqiFpdbLDg7PuBWwTBQ+ec/0Mc0bAGtnWKX7CmorrLSI0/QJQv0BXD+WHoKwnVy93Cy4xen/ZloXzYlvP0kBwpkO3NKKSdjqD5IjFCF8URLbTzO9fjNYFSmPfH968acHfL/+5JgDomr5pZCRx9dcVgYvyqrF4wXlEnPxAJSAZMi+ejJ6+ZPf5Jj5jSkvtcigLFSl7JRVRDqihE43l+Z1x9wOA6pFkyolVeU1TfYCdO67oaS2eW6rdHa9uLKps23X3o6uPS1i5wlTMCmMX/IPPItK/fX+qdOjQ+Nx9U9c24VlTh0tWFfHTzYAgBV/68fNABgAfOvP/rRJL785tzI5VLA6sbU2awaAzayOFXkRAg98GCJxv+R8UHttFuEeb1qcGxL37emFsPbCIDACeg1Ng3ViKDQZjQVbZPAbzLQNnUW28jidB8+MMIYLS8ts5v6DB1XNPiilwpgHKImZTEvjmKa9e/e59ObECduEFrRxDZM1GBi4NjM7EU5EJVNnj2+dQz8ct2CXTz+v89K54cFrK8Rhsr7KFqmYoQo2OgNpXWQ0lC22wFbUClqzCZYRwtyslbZ86203p+mIOOyfpXLkkZ5CfAHJDaaw001GrKiAuw793XeP21fw3nvHk3oQXMR3EYtpJmnj4qG0JAjTJPjN+okhKpUZBOlshXcMpw44D5RHHnzW17CHug9WiOEK7qfxLZOFb4wYYfmFlfzZOskgUUVKeQDJKYIUlgAtmP1YN9KoXFsvsTRdQN8AYHJicP++3V2dzf1XrtRUVRgAdLR20CCrU5wRpyIP8iEo1kxS9nNgF8z1SuyALsAnAr3xxpvFBxk9x5noAV9//UfMGX6y6vfcc/fAtasmbP/5P//nzz//owMHYil5TbXLiPZ58SAB2uCw1dBGtVJsPg74EwLyfPoTn6Bj1JKOMbMwgRUeYiCeUxXqAA2/7D8O6HIEUpjoeE92QxGQ/Yld8AcZCQDKD4gzRcL3WN/CUnxTowPTZSAUmkln5AFfQdnOnz9r8/TefbsgaRUQfnux/0EpPZf+3VBQgJ9XTOcpMImLJ2oaBBxaVFWru/zggzO2W3H9IzJvoXg28tfDNxZQSYUttkAyPwiBDxyQiRzv5CvRg2PYjiGQVAUqICMdPl7kxExIkqwiwAJC07zjg2zefVIXMiV690hXLxKcgUu3nUHiXX7zMAKjZC0/V0f+zFJlKSoE4NbR1uLX4xNCwMk1yoO9WOrxIlERoV034lgPIlvGmV5BwFfclk06DUEIwiX6ZNW1rk3V8ktBsmaSpY/PSnkwhJLIjIPGYpBhQOhPDM6FU5IajI2OA44ozMHpTDWu7+7lYFTANpGwvezKkBwaKs1nv1InqqigPCXnLpydmBo3UeiEA6FuFUCXm2IRJ9azRLEiqJ6nUWFsRIYiPqMjI+pzs5XYPxagYWZm2owOetSBQewgzLRtX5knATwCUISP61e6r9ZC0GBMRIZSUFEcbfwnFlMii2ZkYjBARcgMHGJjRIgcHJXKo/288+5bTJuhqgU5rXURZphfWiYGJGhKijhxycIS0hUsybol0XIdV+pevnT1zTdeVyn0ZKAcnR3RVi3RggwZHD9x4o47b7/77nuz+pINoVpo5CtC1GsOR13iQA88cAAc7XZleQm2qPAOmWg86YJVkqLchO3XnlJGQevy6cH77zMQdy3Uq6++Qg/sOUGpRUdW4MlsngGlOgH1GkzCzS7bsFatrbjnBTTTlMy9MD+2f+eZb/tl6QwGHA3pfAULQLmGipO6/JgPYS9sVlLmWItCHHpE+D/88MNUBwSipyIaiRoRK/HWW2/VZQJCUvD0KKXdhr1KoSDvBlbYKD8SDLqgYduSIklHNwC0wdI6Anwj8bHhIXvnfuHzPzfUP2D36u/8zu9wmu+/9z4UldYWz/TNVZbFttreXd224UCVubFQPK4QoSfWhNZUar5mEBccQ1keR59PzUyJOBLxbHWcdwGfjCrkYSj6AgHjDULBWInoRaYOz6aOp5/6uMNRTp384PjxE0dffJlNe+LxJ60QdwCdMBmtWFpebGttp3v33/egNS8UhjePk5igo6VRasQTfMYBk1GqM/VE+nQVBwiaRaMzqqZF8vsTExDIWFNyfCZQrFucn9NnW8zePzBEhZ62o6YqlqIZqilrbkr80FnjGo71DIsLM3t29bz55hsAshG6fxR5By2Tr0a1QAwrJPLa7bE1xrCG++yFCzD54he/yKqqun9wEOvqnL1dXmo6YuBan8ukLUg4dfK9lobaxdkpU1Hj8wstDR222DkAOy7NKeRZxjmexOEyMkMLtYgeScDwiPkXxPy1j9DgxMauTp6PAET43NsOMRnCMNmA8HTjSWe5Og0+DolM/zEQMa0f+HNdSww23BppcnJqxo2TWGUAYKy1IlYeFcWxkeGViq9mnzwlBh+43/Di/HpHNU0wryAnHPyamJUuagKFwD+eQEk26R7bUiXBPHM10PE1/LJwuKmTdE9QjMCUGKD83+c8ikivAIITnEnue0IgOJYzgiN7FqJfJf2ZH5/yVzk9gV/KnOv1K9GUbH7xlTaqQh6/PnnJpTLzA9XCrQYLl93vYKW5pSCYUVqytTJtW/7pN4fadh9q7Nrb1dBeXLa2PtE/4FCW8Y6mtu6IAJdXQhtu5GIruMCgkUCs/CksiWX8BSWhFboKjPlL9K+Tkf7NyHjNJHz496/ku/7HDr2ZavAZrrKiGEsbxmmYMmS3w+GplnkxdFIoQOYDC2neVcTkwoWVelpeXXnbreHkZZNoyI0krWN5aUEpDYHNwT23q+uX2A0NU2btCFh807oZca2bJLV3rJDH0iPIOqLNQXPs7vmLFxiW5qaNipLKw/uPvPTyUSuW4aMrbXE0lXObN1dnpkfmxmfOfHD28sXzW5uOPqsrra82Q6C5bTrat6jIEmDA9QL2W8CwpLRiYnq5saHOjNZrP3pFk7/nvrubGupmpyZ5IzpHtuill45yGh580LHu3TIIxMAqthxw1YrcVzB6/txFMQKDX/CTEHnwsbCHe2G1tC5VWI44sNRXLwjM7PXCqsjpYfewwovC8mSVziLwDrIeEChs8ZVRUpCREddgeHODAlxxOf1SSI90v+rKllCvAYK9D9aRGgCUVTbYQyEgoyBxqMuLIgAanRWsb2avQyhal5dx0w3B2QBALaZc6ACLmvqjBdIkRA9n192gPr3y0jHcM2/P/TBamJ6YdOURHYA5HWtqipO70aJSasY5UQRYvZV0YP0psxedJv159NFHjRw4bfw+SOru0YLttBG0zFKEe5GZZMFUkW4OP8mLo4ZG6cyVFi3M70+cwQodN7sNf4FkA9SW0liRi8+8LK688PHp06fQqP0p7uHlww1jVcHl6OrWI8c2Z2c8tNW2YSPN8esUtdRpusl9SYA6TR1UrG5snDxzDoeP7N/tpPK3j5+wBjm7/mEzqVDJpqlftbS02jjRgKIxV0SXxCIfVGMIWhTXcCCZxY0DWXlkwEAcM1KCAIowXzZkcr10cF4UgRWOgZMByinRowrvHul+szKkhDCMlEftrJN9C3WNDcbnWgcMMUqvjdWAg6AWiZ5ci8TZ6UnYErTimEZAHswHH1c9MCF0efATngsFc7w1GeRnEKiQdJmlqEU2nbIRoz9VTRCQkYF+WtjGlzHhbDQlpbh/kFJRAMyZE2NYDZed8uzdfwBnCA5RIPgah9eVhqkHTa8HsnGyXzYZ/mYkrEkRi8OWzGfhZi/Qs18Xw1Etf319XavFBo5F/rXPfET7xAhIAyqfMwHITGUCDxjHU/GnqUirnRh7nHLkFyPiglvnTCqi5RKbmKSys9OWDBV84Vd/gQ9EU2ld0FwfUUwveAFFGo9xWQ94PxoGFnP+AnLiKRYTCXeHADARWw2JoMGmEABPFEfAQRV6aI+C4q88JPcYwEcYSwth+2RwjClGaNIwpA30Bm9IxShfXRD2lRH3f4Fzuui8MZBVEc5WaysEeL29u2KpDMZBTF04QzbQhptfNaqLk60KjHJhKuXz6Vvf+tbtd9yKarQDovuRTXFlzQZkzWsTWDUnnbadmdMw+EaFPhGSLgbGEylKGdJhkcCASWTMRwXE5EE+PG2/RhFMaI9TjLw7fdLX4YHBPfv3ffSjH52ZC3UnX4nqzcoUursQx3XhAzgY6wVuEhGIFR4p6sUc/GQr6YmqtVLmjBBVhF72RSImpBB4NZtrjoVw3e6sCuGBLEfQ9CtKXe3vn0jblAHct3evGtlmEMjRPl2Xq2PjR59+ikJrhLAyLtVrAgVt87PS1as6DiYmJ8wXsMhXVRg+ra1sWhxv7GFIQ14UzBokJBAEJhCizIpL99WLU+C9SPc1taJyBoIRf+6555APLIY4YFse4xbHg1lBbh+blqP2bOu1W2IFSkwOIaSpiBrpPxIwEByab+RGD3FDHqM1jJINA+X54Q9/SOW8y9Z/9Qrlz348eelFBM3pBvce4dilXqymnMTEYDJYdN/IjdZhr68ELQMRwEoRqqJGn6Q7yMU+49tvu8VNCiq9576PuIuU1qg6ept0+idH8LXXXzWtB/gf/p//sWBpuqO5zloB0aK9e3pGhgatWFhcWFpfKTDlrv/SgWtBFgfGSgjueSnTv72UE09UzTHyiwko5XL41TnBygPJ62vuQwryMyfA+IU5z558c4Ap+a5agPGLOceS+bnlkbGpuUXHPhoAlJjD5qXbAyYKQFvckGFxlHO9qpm89UVzlDGHEM53eMxiuqDmRmcAADftS0reAyDGASm4gQhnT0Iz9g/A8C8XLCXPGzQ0Z0LAB4QWeYLVaVMdUKne7eGB/EF2gigzfZMzE04ZYCLFryK5djmZdaXyI2cGKIPHn4B4FMmPbPlaSp9SPbEDOKMkxaNUhgyOTyZycJNKizfnDBqsbZRO655ZWV8uKF0rrm7ddXDfTXfWNHes8EWKqyuaumqaOjWiquoai4ZiD4VhvWD/ZtGp02eGBt0SJXiGJ4ZTDnm1T8MW70BVdTu/XiC8XWP65KsnlnrFCqZYTPafnQLkNuNvfO2r7bWVm8sTW/MTZgCa6kprKmJ4YeiO24phpicAWUZYXikxu554a3pQd2ZEcsPhg1YpaGhYocnIjyGcA/rANuK/RGYnt2IFdZ8sEnuSm5IM5sbD2qQJevqsZVF+5KhRLZqShq8t9Pbubmni/5ULMAuZObJM5LW9tQGDHVpfU1s+PNJ/5vSpy6ev6FjLXRtfWS4UPzvngsgCLr4jxw1xVWpaPoVT7YcqXFrbrG/qGhmNxQ+GKNDYc8BtNLsYYs333RPHHTDBD25tb2X2WTznlHAlmBEz0MjUs3/zm990FDX+sIXSdYAwF9mFNm2yVI4ByQEeHMAWf7I5KlILgFLomxQvcNAXWIhH01IzCTvjE4aAxp5joyoICBXMoHS/2VRivlKZ1V4UZOFlAzz/6V1Bq3dmFyZsLV1dKayobiotqysscVFUQ2NLk7GTGYDVlTnLOGamJpwCZA8AgHZomJDBDZIFFkBaT9vtdqUMmKCn1oxgLg+U7LTW9V+7enXXnj2W5nOjCV3VunZK/vRHn9R8LIb8t//23x4+fBBAQ0Q2HP60RXF2WEeGan2uuAmw4OepeF25DIf27+cU8qP4MJiGLt26dBDUgqVhe9N4BkC08yogpnvyKcgpLtbbooU4MBlu+mK/6oUeuvREmWMcJDig8bFHn6CujDCsVAeahqUUxTA7RPHsDzG7rlIC4qWrV+RX/yJaRwqiouyz0GKgN7/ofhVLqp03eO7C+fdPnMQNFsl5VxCL4H/M5FeBoBaGmy9jablfZcma2hB35EwhQolQhTyl8utdCtL8mnzAItLxDu1sneThn0CJFmEXpfXVi69egM0pRAyIdMW9wxBk3PO4Btsm77bODl3qsWPHQFOQ+OTR4eIAtJUFR1ns9etIWWjLkOslHTwEUCloQIlV8aecJGJGe8Ao0XEYaaefRJnBwW1UsBukA1tyVAVQqrOqHE/gI4OqFSEyjy5ejbJ5FCF0PKHJ6kIpWjQokAFsamyWAiZHRZulBv7k/Fino6wl6IpkWqSnvig4bImgGiEADTTJIBEmhZ995EZ/oMqjvBwWPMjClWQfwJLvoYcestXPCejWkezeu2doaNBRmbo+Xz1QgfpHHrjfUgrokYRDS3gkts9PjY+pQ++bRQgDTMdcDYAw/KlGxPtKct6xI469Tx1bFo9ff4KZjfKrr76qoErvuusujU3+OIc1XV0kg0EUv8raNXmO3HQjPTMbydZzSjALaaru67uiXucayE8MgfBmIdqra+tAM7oyTOefkSiGGhwDzm/ToqCR2QpIduNoAyBo98ATUTbIOchSU9QHaMMPfuR+kxjEjJ86ZmQyo4kJRBMmr7mlSVjUiDkt2Yq2CiADffVqn50MSlFf1VFUpQSraupqG1ti0RjdUt3a8gq6MJDG2PILQ6vnpSvC1pi8O3XmtK0a9JqWsG5GUF6QSV0AgTMOcBazLDiUUMUzggAKCfJACUuZGyzCcJ9wNQtdHtzLW9DgIL3vmtsru4hS5tvvvFszoG8UwCI2GYBi83bt3aNerjN75NZDWt4cMxmNSmH1yRPvO5oa06Q89thjHRZUdbSRhUEtzjA0WsLuPb0yI5yzhHDpsPLJSiqex9zMot0wUjIf8PCdd96R2a82byyuFnSRBb2F29x8NE5/kibE8Cc0Nq2VxxbMMW9IWGph6N2VzFViPVWnFGT8snT4Jo8awQSc/uCAOa4HH3wQlyRSYJMPH//4x6mQAQP4JOgXk/2pUgoGlGzy4yTdABDbcVgRohGkYFyW7UFLJ3v6xRQSee75H5qqBk0tMoBJ9Lht2PypT33KNIWJiKeeeorIwNFkhf9tWvo//vXvIufRx59mImmxcCbvH1GW/Zj1Pnv6g5tvuuG73/3Oibdeb6sV54kzFpTdstu40NVO4WmFGU6LfXnxYYE5kaXldnhzOJDgQUvMKqZH7VZIA4Iov3kA4EvMVWyydw7gASy8VYF4szpqc4IbAOBEnCQ93m3t5a+67Wtywjoy37bPmucc0a6iON/HopoVFxPVVlfay1dpi26hM+WdWBOgAPB/lGRWw9DKIL+pc3GafPQE1lT4lS2+ppGAoY3HSlFY+S+TgIqcjXOW6cqZ5ZTBA+Wo8PoTINKj28INj/wgUDmPzH6zPVGCHP2JP0QskgUdADVqT2CYuh/0gpAfibnGhMl2Z0bcvkoB3K8nZ845FfFniCAvwiwsKC8rdks6AsG36NqugM3i8mWH1m8Wb5XVOSZo/+Eb2/bcOFPYUFBR7y6mWr2YQWlN7fLKxtTcguNl33jr+OTUXInjWReXGWHHzU7PTrtWwQBAdflBnZfrXIn3/Gd+MVL4cUuANpdXvv6VP2woK6rlJ08MNlTZejzbWFtuEy1RZB6iCMewGY0eIQDNhFb7ilb+zZ49u6oNubcimqjJa6SKZGRC+dM5QpoePudGmqxuzNniiQaFpdqp26MUNxZnE2gOC2PESXai/mZBND201NfWO+2nssy+LJf9LKKL9+/2DCdTVVRyIh24d+78udOjw4PlRVWuMSlyBRUzb+S6tWpCJrRvY3vVhIlrFGkgBjDrxlol1ug7CjCiVz5x29g0e9ss0YYkj8Y8dnNrs6UakNeBlJVWMOkOimTNsiV0vIcVzjDHIsNX5Ot9kKy46G/obbKHuKGK7MZFX5PUCStMV0qMuFhvL8TssFSQ8ZFBug4FBLyVjRrjKnOKRerCNI8xSeY5hVRcQQwnJnlYTr++5kf6+PjY8tqcWGlVZWNRaY1jQKlVe1uXU4BmZ0ZtAp6fm5ibmmqsr12eX5yZjCCRQw7SeZXhVSNNjWlN9bwZAEZSJ4gEDQs+4J87c/a9d94R+bjlppvN20ghd7VrkUyu7XB33X0Hcrjy/DPdusCqg0N4FPoFDVDnRdb4DBrkvevXOLL0Cl2YRlss7kEmILJ5UI2rubuBrW4O7YrroYjASU0XLl+GuSp8xU9dAPaqjhPy7W9/20YOi++lG2Mom5QtJr1x29DOTdP8LtMsQLmsgk6SLGhZHMYhrtp0c6Zl51LEMtCo28RzohRc0l87LUrjve222y3qs4DNqTB9jhMaHRkdHmGQCZOhh/DE1IwiXDkkWwMIghr56qKfLkcWWcZqosdJxPpFNccAPqrIjizdQDWdcUebXgwE+obS3OX5hBW8FBLBOqz2Cc6kyXnOqiiPT1Lggw9yYq+cmC8Fz0nEbpDdu/Y6fpC6ql0tulqMlRMC8mRZAC5FOu0VNoqDfRIExAFCpshRacYfpbkW2mVa0QCAahE3ICBwlmCFFnVlPDPaPiENznnqUh7dNIeZF4Q/BIoQcvSSXUR1qcUnk/LaMoDea2IQXasilkfkHH9ITTZAcNWLkBe/PaEduiczHOTP4z1SYHp9hYb3rKWFv/63HlYZLJVHv1/TChjKbEknfSm0TTO2d1/DYGiU9Cf9g7Sc6vBycP8+roZECqcC8nZgjsbW0lDvftxsQykcRfeVfntwEHLKwilUNnWZPBKC8UARKIm++jOzSXHVYRzawtcvLxczFprFOE337PlzEHO9iLJMpYpEUfDdwaCZxf3XrqpHKQJ2lwewgS23xaqyosBKIVRDyWOlNf/Jwk1loeFXRQjxDjLk/aJXOjXaFvbK0rWrVxw5r++xE0AbowdohM+hQwd0IaTOjvBRlIJGnamACvvuawlFvTJrDPxX6FEzN1lxhQf6h9BONFTIsubO7tjqkHnizB+KBRMwzWmoqKYyAjDoIiNVoKh/uP+NN980qiEp2uyMAteQUQ7s0kRl9usTBUIyPA2ptBZaSOkJlN2BjHfhDXXhbjbr+AYHvwYA6oU8pbTBVwZwiKmppS21+ZjGtRQvt3wI2ILtZj48lHNoKA48tQSIKGFFPWw5kkdd5k+wVL0f/8THHMKAFpyjzPZj4JKzmdlZrQ7teEJ8cMjSdMnGzPQcZBTRqokMOUChUYMhF+nC6gSHRegld2V13uKIYngNjfV0QCQvL/uR3j9wTdd7+colp3ZIF58zlSbMYzQFvrKAw4Q0MSSrKw5IYXDRpTrIEL0i8lCVXASZbBa2Ey4yCUIbxEZMZvtgq3fBQIne4Ulv/bptlIbIQGpKvf3Om0a1xtuKQwNkwlKdWvj3CM+GAxqqg9va6rK9bS+88AI+fO5nfpazzkXQ/fpqEtSKvrmZKbuKrcybmZr8iz/72sbaYvnWWomVPOouKrDsJ450DJ/ZDhDmKXnwORStTbipynplc4VpVQ/RcK6ghBto5HUHjPTQ9vQVIKuING2zdhzi8PijhhAKN3ctIss74eGMQZFjTw2QbCkThApfviQu8hK0jgGALZt8CjcqFm2ul1c44K/cepb6Sisu4wIBNTMkAPrTQ1iwMqiJ3+SghsmQ6H/XBwCy+WrLQBCc5ysiMxigbZtRr/LnIpE5OZT+ZBxS8l/+RLHgSXDDA6Y/fU6IbQ8p1UJ8lMd3wTuqzntLVbOH26OFDDlDyED8gpPAm3CPmfEdbGWTLkUbuc78D3GV2VmM0akgaakzXsUFrdBKnQQxujdrbbN4ZYNP6ho2S4nrC2va7vvkL6+WNwqCTc4srG4U1rW079p7sKW9Z2F589irrw0NT5qt3Np07EYMvhwzU1FjjiYN5K5zIlOdsb2eto3S3zAA2FpZtQfAAMApQPYANNdafrTgClgHlSAddewSYik8M4KBmgOVYDbzRaeYFobLWoLNiCXJJg/CpWd2ySw9819zYMHk16z0DwBqmGwdk6XJx/0GBmnpZEDaDo4tOawc/VfQ6iNH5GmelWmrumN8LLEW0W9sqC0to+4rY+ODly5+MDB4ZWtzVYc9Mz5rAKAlGfZiftLQuD55R748bONmjDKzbbrS2ltrB+Csy6GYFnKwGE5kf/rjH2tqaY41usWxTY7ThnbGp6iwjP9qjxOSWRt+oeUA0oXGOEPO09E8rflnMUIWJUGszTxsI86gQk6coTnI9ElmLGJ5GBM8Z514V/pE5lT+bKzYK5ml5DyyYZ33rOcWkOKe6uDD3iBEFfjsnchkVqlE/JRCcwv5eBvuHHQYdPnc/HpxWWVLc7sBwMryTGuLm4BnLGZ3NaSb3pbml4ByyUxeNk18gLCBLCRDypWHGBGnxAEvsNJpWtv80Ece1NTefe+dgf7BfI4wTsjM0toYQBAZGTzReG+9+RZLQD34gBAdOmJ1Rh/72Mf0rdJBxmcQEOjd3TRWgeqGECUnaHiIUVQFpSDLrJT8OmsZdPP6Bel+VYGNsuEMh5szoJfkj0rn1eAnFr366is6F2QC+OCDH7EhGHwS72jv8sL/YeqBQivVFWd3Oi0U1Ci/RIFh0OBGfI70ee+9E3fffY85qx/96HWrgAaHhkcmJrn+aIeb+SJ4lrt5Iq5qbQXEgB1YmKBUXUzHnl3dmiSYAJKm/Mp68BPVXmClOkTpQI1drUeSApRPxEdpEav1eRQHnPrJAL500HikIDOMIPgFyicPlPAWQ+BJsQGnVC62sgQoDixO+/uRDCbdg4lskIQ5INI1bZ/8OTU2KkNu8hksT4kmkI6ckFQjoeM56XPkXMZnIZZEuCnuAdYDSRly04A/mP70cuXqVX4ICPLAMGdAC/cABPhDNTMkE+4cYcClePghGKV1g+CAYIzUsAhRBqBQjYHaf+JM9ALIVEqXCiu0pJxxcKJH7djlKfzC5x4I1BP2/kbhYrTfJSiCODc9Byjs8dcGvsCyhKs6B6LM8oBFR5FhDAooIvFOS/jt3/5tg+Z333t7wyFha44uKOCFGH+jinIjg0JgqLJEDjNVeMAU5AbHg4BgZ3Tb0T14wRovPr3yyivq5ZsS28jQUFNDw8OPPir/ALN65Ypdv4qMj4UCzcTxXjXcWSJEAlmeOnHcShKVCn4gFqX8f/jbTKyvpPCsG3zon6leOmd8YB88WkCWGUMlQkYev9QCXdQULSqCoYtmZFCdnJZSWH/ivLY33ngjje5iDaWZAaciwR8E0aHVxVjBQgXhbyhCkBgOMuccFRhle4Da4SOoJpvWiEuyqZGSQcD5RVq49aFqVATVVjBAFaOMkXv39lJMMIEyJnFaMP7LBsOnnnoK/0GDksypNS7qScERmUYURznaVjoxCkroUpAIPLl2VLS1Nq8sLtEKzBSegpIAjCJ2SgDukFYyQrVKZYC8o6khIzxGE5gtdo3DQ6BwUJ2+AExFEIjkY8detL5FXXC77/57Dh084l4b6OnlkaznYwf1LN6pE4R1RC7qonEE4dFUwIGMGv1KgQbSiNKfYAqWNLe2EByHjdUViuI74YAOl7rRDiNs2msegz+qy1Pv/NwME8y5p+dQBZ8CoFRshgKrApkwx1XyVYV3EwK4Zx2RqvHHe3CpogJ6WJr7aYxVnNR4zyaL/Um9xSOwha3CkMqyCGjpLQzeTr5/nH9PoCbE9uzbo4OhPKqTgqWIBR8CXhgUuk0lMA0bqYoz3/79v//3lv7X1Fn22XLq9Fn4M1CmJ8eHBx1A7iLO5vqaP/nqH/KSttaWjQH8iqHHACB15Opy/6p4fxwImdbrQEyiXys38A3yYtb+jJTkXvtFnT+vG0k80LDljOvDlI0AZ7qjhNuZrGk+YISyxSVhXHCQZeYDj47PLS4bX8lXwGF1lG/Utr3n1fJv6SuFmyscIR6Vm6iqrFPlBJXm1TVho/VSatx+rg8A/Jn3AKQZgOTjB/oRpMxP2ucadjxFQiFj/B/QSstiZaAnoyEzYrWmYEKiNks86EWxmY3V6ELkzzll9niXjR4SmXdSI8qcSOvIzpNhypYh07QMP/8pc35yuD8ngkzBcnE6kMXnk3QIgGC9hL2/Iqwxa++/zVV30trmLadp25jTjwEft9wQy7mr67MbFQsVnT033HnDzbc3tneaItgqq3FzsP+m5pfPXuhbXmcZ6m0j5C2wV3EHsJUCJmHSk7nk9a+/5MS/YQCwtrD47HefcQqQALoZgLaG4vLiVUNTSzJEPRgTjXF01EqbqcxJwReKrbH4E2ewDR+0evdnxaKQJCa/mKBdaIz6Mn/iEhEzs5qtT5GeDhuBnpbuT3nsd1HE5HJIbjM2I1pj6ddp68xRfV2tMSi2M4XgtDW3ONvXrI9j2iYmR0YH+0ZGB6YmXZs6T3sBXJmP6zTkN/I1TI1fK8FiJLvlgy5RjN7GDI9BsuAYl9U6O61MB6l2rYOik+M99923d/8+89iiLUiweEN+YcKRQZe0xkERwBpsw9wAIFEdK/uNB4wjIJ8eF0atTU1PUnGf9ErMDq3DNAApJAXGZ52prygXdVKqqrYqKzMSwnwVRECaTZNBjR6EeA++hd0TjY5ZF4+c0STSPICvipMgPsPQn5oA4IxldZ0NKJtlpbWrGyVT08sFxWV5ADAxPtDUWOecnuScLmyurhtw6gKaW9tsAmYGdQowYRv37NlNEBcunmOxmVM9BTOuS0LgjTcc1o/u3dWLRVf7r+pP2DZ04Y+zVkkTvaz0+Ti4Lw5zbHU00+bWifffC9alWbv8a6Y3DHVaXczmQ0Mtugkve9JpEIwwevlIuh6+qR0C+nT5hdgQTkuNEDANny2gVRc1hjwjr4/DByLAfxAQYhggnEeZmQt/yoaQXFwGEETG8VDteCiYmAvqoWiZHm18ckwIB10GAyDkfgRWkOnvH1yy93Bl7dLFKyYTWB7rs/nyFrhk/TeaTr1MjJ9RBDFWUAolURxPYrG3C3OWQ2EUwRx4Ikf+S5cu33rrLZgDSfKFtgwwdIAkZ5pjJidCMAFYrQ/zcQ8ESkVw2Z9R0H5LOrOjWirCHEWgQVKygQA4rgKY5qUreCVASSdBlWKIejMCSmWrC6Ai4Bx/+y2t0oNFqvOrdsigwp/e1Y5eORM0Y3WrH8Mh3FF1dZELhisiURV6bV0/marC+jqMggzPjXDVLr9aYIVYjMIfj5yy0SIBcYlY5BEM0nXoRrQnvrbFEcqiyHZtrIOD05zsjQMSqqqzXEBipMeEYbQ77PLoyhWkJNArfOjWcIBqqmrl8w1tpVbSptkHxQavDUIU9EBxzlqLsEoGO5CTmdIDqjTUUQgViTZJ79nT/U/+yT8hD4cbvPfu28nNjsWR+IizatXPEZVWio9Gz66q5nZD2p98RC8eXAAw4R9jAFxQhNhwjbrgviXX8vwfv/M73/3udw8dOWLC7uMf/wTEzpw7C47FMzRgaHRMKfLGSmVjwWt53JhNkGInjmaDPMfC6QeGN/AZn4jRC68UhPK453xrYjxWyyAfShhi7EWc1J0nDaZ0ks4i14zl5G0oCwLmWH5jDoF1gBWmZ0cNxwRawYGYI4C0dWKrrXH4bmdWdyjpupgXXPLIr3MypveYtRDigADyRTUQiD9NDRFrcS06biBNvTo0X2keW3LgyAFBCczPjqA8kKeaR48ehZu5FJyXGUArZAzwmGWspo7WiH/uc5+Dyeuvv45AxZGfFU4VBI1MmDTXR8jfbds0xxkC4OuHVHf8+PvHjh2z7JaYkEbj0YJkm3eNy/uu9svJbBGKLkF+mIBGFuRLT5gAqiJdq7Rs7kc/es21LG1t7Q8++IAoyPzCLLZzW+1p6+/vw97eXsOwmMo4sOcAC44tMmSFIVYkg6ZGSPrNLOWX+8QDNGmekcxNAJkyoI7WpVrWaQvpg4Bv1s/46k9CofOUHKreoS1mT3m0F7TIgFd0G6+oCu+f2nvHRjJCIKZlM0Tc0IYY+H5d+4Un2EW1ECgbxy0+WQabzhoDRGwb6772ta/pjHt22YleD6Y8AKKIyLJCaibPPvusdUeyZStGyl/946/A5BOf+IT1uQ5sQbLaVTc9OXb6/RN7d3WtLcyePnn8Ry8f3dXdIdRVGEZDeE1HwPTwGsPSxXk54TDbmlgiZM5vSx58jiSFR65jiN/k6gmO4Dmu4gnOeZeuXi61X6tNQi4+8Zs8sas2+KtJKhjji5gu2D4IZXVta3TCOR8kGK4PD1YAhDNEpBxWnXKZFr7lXLZ1G/94UdazwF88Na2yw8gwx9IhEFUxMmkAE9C8J9VY3YiuC0rpKbr+Is4fZ8krRSKKJhzjo9nDKJvmAzXDDDnlCa8XgfnBNI8BQJ4/kT9B2A7VgwCy4oRI5+UEgVwcbZUjpvLL48k4YBB/HvwENYaUnoy2cdROovzg5AcEeQKHRF1+5zgKsWbgdgKvrS5axsv5tMnb7aqZRQjXI/B6Vb20VTGxUbVV1VRR21he21jb3NnYubuxa091Y3tda+/r75y8NjheXlFrUQC31OITsbHVjeUYRCShqzrX7hcCOfHDnyjSj9sDsDq/8PILz1ZurZXbGTTW31JXWFW2sbm62FATQyatVTNkcUHWNNxML0XjJW3Glh1QHXL4CuXFsVwYH3IK5cYfOGQToSkpqElmo6GIoLHWIUUeHFDKDAAIDnHzVf/uk6AVwcWETUWFObpmnqmTdtNUodtqK0tLNtYXhwb6Bq9dGR0eMLnVUFdt9cQypy6FLVYdX72yQjFEEtUiLA1tL3Azz8WPD66lOW3nX0HB7kvOGVliKgO7ZoC8WSBctc85NWZLe3fBZXxi6vLVazxFu3eAgrbEGEhH24qRfFtbh7MjuRSYgxyPse2SXq+iLA8AkKAgJcQfZRku+CiOG7DVnP3Jzjh/EgSsoLfsMMZ6wRIF/akiRfDWk/ksbAkZxk0eYMFhu1gnyi8RHNDUC4iC/N7ahgoDgNKSGgOA6ZkVA4C21k4zAJsbizPTExirV3ZQfWdr+57emGI9+tLLre3brhW/BZzLly9ZjZlv8lYdlPhgakGI3VAjAwNiKxQDj/VQ/G959INIs/QCYkFdaneoRoW7V/TXYlU5DyrA4dM/88wzLDM2os4nDoDQu/fPfeYzOhrrP/X4ulqmGI16On0H55uKyoNR3LvMK5EOrKPMwOqYoAEHRfj9Ei3rlZ+n8fDDD4stZh9AZ63LJg7MxzTshImKuPW8IGBl0DUIfFnO4DJp3p6CPb3dEnXNOjUjk472cD+GhsaOvvgSs8ODdYJ+SXnF3NJcrPVLV2qyxbjhKxbp8miINo4n5KXPgqpDBcRIzMQCBRMoYRq5Y4uekQrJLHYmv3phm7ypQfQCCAL+oJoQ0Yhqv8qCQDRY5J2YzDzLDAnvHu8qAtCvPEGXrXppvyyAu/bYJaL6yBCNKJk+X/ODM/DMKqcWL4bf7W0tO8YBV6FBP2VTEQTwCpkqkplq6RmFSWw1I0ePFFVAW34F8Z97gPmw9Um/HAqZtoDTNBAIVBUy+xOL6BL+eIFMbhRXr/UpC6DMFuQzVGLg0FaLPRtGUzDBBFKWQug8fteQO58PBAg7bii3KXkorzzKwkSQWaXYDsnCTz283x/pXPVYuhMEpOhdZ1s7GQ8NDCOYZwMzdxxaIzgwNJhXIygvEZcVkVM/DVePyvhAf//v/30vm+uroyNDNu7JLA/PDM2ozY4RBfLQEu2BLlLr3fv2/l983XeQ58l1GPb5/SbPb3IOO7uz+W7v9tJeTgDugANAiqIoUZIFk2KQRFt2lf5QsWRX0TZt2ZJV5ZKlKqmssiWVSRlMEgmAJI7IF3G4nDbnMDs55xz8ed2zC9CW/QXut9/pb/frl7r79evX3TpTaEDUg7z8IoWBhftSYKtpoVBnLRbC8MWxjRfY1JGWJg1zEHYdIJHo8jBinF2fpnFN9aUUsx5yghJfvA1G5rVMc8aQusQUa2nMSsC5Ukywuzo7DFVkD74OC7ZkRoGwBS04AD7Ww00eDw8T6jRdMnM2kRaL45r3qVMPg4kJaMmrAf4cE1e6vnH96pWx0XHpimOaaIzceikEjdFsvCAcztbluXas57Ltgj/JFwUT+LgQHgPRQOdgSC4e48nRe48Oj7qVZgyqcmabWy3AUlAk6Im0Sfwkl3vvuc/oyffMCY0uPZf82qr2g3AcUAqemKn2rK9ccCBLJ3q7glTNuiWj+cUlIaff/c73qXKO+SEOk7S+/l516SKRc+XqdTmtC4GvhaaWX0GarhJXOy3CeTsedFjcVNYK33vvg/feewca1o2EpR07fsS5xfbgq5QFJY/G1ta0F1WJdZDUEUsEGc54SCg0TRvDHFVKPHfhLObgAxLE0ujZM10Qkw1PVIelqJaCby4SAxktqM6gEIhRcMA3IwFQ5Cg/jaXw3tGLRkqrdr2A6nRzsAJfpZAEwScvEqnkvv4DDnejn8LwqJzTdaBqAkAEPLU6Tdquuu9959tf+OIXjXbggwkaJYQSkgnaC4kojo3UT/+LLrFVppHPPfc8BBw+QOXdcAegQ0VWluavXjz32EP3v/PmK2++8v325vrN1aU49DMZJawQteMwTUOaTk5sA9ewsIXYuZnMWp882XbGNPLN04CQbfS/MTgh028ymMMokSHNDnKWiLWJe6Mih/U5NrpZAT8Sb3SlhQLELSy6CSgC+QO8COgIO2LOwwA29tKUOcpHZIXrgWprKgS187yWp4uEoZskGF1zTAzuWJ82AavbwIZ7sVPAOTCWO9J0IOOUfoMWyEWxtL6BCPrpMRdAvKJIBZmCqQUoZPrqJXiQzK9UNlYABCr57lN+ci05G3k5HIJdl04FrJEIDhNN2aA04XynXESvKitP/irDnTwRwrRXXao9F5E/cT4MFKjKLJtP/qJ4UqIFbRk2wlGEA+KnYq7iVgEycENAgrhbrJ7fKKzsVojxqW5qr+/orWvrLda1bVc1dOw/PjguMMvW8OadYtWmAyNMwWxiI9AUU6S6jHB+Ae/un3c//f9MAPjZ3nnzteLakgmAm4Drq9YbasvWl+dt9NDiaD6KnByh0el1NVv8p5V+tQ5tEK1qRK+TorRijNUt6xZk0OjkUVAD0S1oWdI1GdmkE6E/sQiSGcLSSniUzL38yemgCbs2RwaXVpkdbiyviuzmhWxsqG1uaqyq2BkbdsTnpaHbN7bXV8xInfIpOoqphL04AG21hHS0MYq15SZky8thA2G86Bezg/gawTCh7ugxJXPfBp2IqUhcwyzEqjAzv3D46D26jtbOLvEjziDSi6JFeAxQVmOy9FXBAoG21QC0C/hGPr3zNciM41zaZmZjy5ZS0PMYozGHbhvmcs+GdSBjJp5oL2DqZ2TDBLQARZ0UzHrlT4otXTaJ+jOgZLjLeRyQExq5f5ZZ1WThV6RGRbXgL5PSOvcACAFy2VGeAKwsz4yO3NbSe1wX5WCl5lYOCVJz8aWBW/8Gmp5Nz+yCxND2YqyREhyxqh8yqDiwf18prmEO/efZxFh9Oz64b4dGGR0sJgTJlXFypSLE67oHh4Qa4g3fcJZusEZj9rhjAkpVpDg3EBwY43pjTitLxEBx+SMw5qj79+v2sVTXnR1eUvDn2s0bemy4JfLXspMOr4wgLH44GEH8SVHxnFxu3bphJCKv1OHvMR8COiWjj3BoMOEJB8h44sqitDcDE+CMCvgYFLjdKMK3v/U9y91CjC3g9/XtI+BDxw47vDsLlB6GKFcivk5AuEEQWGrgK3wARyCdE3PikdmDP3jiK5SyznjHLkMq6cigYXIqZR0DLXcFSmEgsIDLrKyUZLAJDFuWoiKPzISlsaNIM2RUeGHMgAwU9IwO1rg0HDnhrDplgQKQsYSZEoMi0+90+awtlJTBdkoslejxAhRZ8AjAh/Ik3obmm2zYSiBRhD04MoMMHy80J+ekh+iVGXP2BFGKwCR5/CndL+AKSgEkOXmnyMs7yCIbZCivil5CZvEIyCR0KDll0btZgbpAkD9QjROESzwLBrPcv6HXqJsRkCefCORPAJGv0sJ/+jOncNB1JzJCGjsst/ucZnGW0ANFf1LEwwOHDRL6dIOmwjIDBBsFGTcaCW0mMNhL/LVf+zXs1s+50GRlcUEfDbKH5coIRhtRwRuWmjqeEqf85mog2AXoq0/o9HjBPtQiAKqqUxGy6S7jtTatsGSLqrZUInWrV3TFEh5LyJ1QtGFkPLw1RM6U0OYxyAIuUenwKaXzFuO4go0t04annn5Os6T9ELal2KrR8WNHRZFSUGhAWH4tDf4QBlMiOF5wCeYItF0GjZgDE14HzVXzNlGxDIIWJMiZNZ6+WsAr1dY5cUxbVS/I4C/FkfMb6E2XQNejF1iDmYmKXS1T7huengUQ7QYBnQXuydDR2oZeVxAriDkkIrGyuuLW0G0bgTAZwrkjyP0LEjAQkmb/6GK8Akj/zp65CENo6x30TbScLDiMc8+IXmBJECEgwK2lITbPwSE4UIjNsrih9Xb39nm3mAj+yPhYlh3cbg7e+KVf+iUTJF1AY1M46RWULo5M0+VMC2u7Mq7S1HKg6ooptzNiDu5BGCF25f7Jn3xDpTpkmmbhIk5daG+x3KkpDl6/iRyaDVVSM3vRdOmPFEhmYcEQNClq3D/QT3D4z0uEq1RdZ+3hjSAFOalWhoaB6B0dGaH2PhEWzrDFoUTH5FSW4v3RH/2Rvl5FWGdjltUt0x7NBw6aKBLAwRl/IhwagCjrE4qmpqePHr3XVIPrVCIjAUzdFwzFt2O7gAeIQYN02oQVpzOF5hbmYQgftWsgJJVhSmH3oxEnMfxf/at/ZQPZZ0yq4AABAABJREFUf/Vf/dd19Y2qNpM02aYSzsl1Gokjxwb6Ol/73rduXD4/Nz5cW1FWV10xNzMrxAWq0erDM7GpazQN8A4xfMBqj5c0BQiDBt5+PRJ/cgKA90rBPD3Zgx75hTwYAyKzuOdQoWhHfrd2wvph2ST7notuzZLm3JwZegpe4WtPxwPtIcBpIfrIzbP2r26tCf2vqS46K80EoKlk06deDGwoRUU5xp0yeBclBIJOWJ15AmAFIKEZWOTHV2UZTEhGhV956TMd8KsXCCpSJ+mTB1gFic8vYvNXiR4ICRDHpJ9MlO5PDSHnVwR8wwq2a2LBCwXSmAeml0xyhqyIrwE5PV7Un1NyInzyJ6h6QqmSH0i6srC0sVs97AK9roKmmOHp2o1FFnlihSitzZRtbcYVCx7u0o3tlc3djfK6strm2ra+xp5Dpc7+hY2q1Z2qrWJdRXVjeXUJBTuUV/wSQ/bOBEDVGTe/IPn1SMyP95hL2mf+HzsFqKZY/vYbr24tzNgDMD14xSlALQ0Va3xYU5OKU3t9hQ1+Wn22P/SxmV7MQ5D2RV6qWF9eCyJSvK8UbNTAddHaiFYjg/biV4eguAwYik+0RREy0hEJmVJLXOwSK3VxIKBV6wC1HefPHujdr0+vEUjnTrnN5fn5yWuXz1y9cq6BIV62JcIq4vu3NG1Gs9bvnHvY+SFZd0oYkvmzYzLJLo3JbbFidTOsrvD+QZvaJ4nTY1cwRNuxIcHNGOWVbstqaGkLA6bUODk1M+zEfZ1jW9sYv8POprvqcQmllCsHeTIgdBqGXMRG20sSQWxdqdYEQI25/0Qd2j0Ixyt9nZweQwOSYd7W2QZZGXAp8zOYkwIv8VlikJd6TgjQKEKmhKnqYL6yukq8JSB9kRTFZcN8xS2pbPDqrKyV7VbbA2ATcHVdQ0d7tw3mI8PXmSF9ve2dra1LC3OLws4W4h7Mn/nZv2SypDgjwYhmHNEKoe1gzbu1UD2Vqojd09Xc5FZznarBQusW/GD4FlrJf4AoIgDKwaLKstrtZjx6cODgoTgaUR8OQ4qnrCIo0idLAUd1Rj0cMwRw/8hggFOdzl/nDCz2goAPOAlJPkcjr1BhI7i5B5g4kLUaKGWVApkssF0KlEDDscSo8P5ARikuCINIThejTxw89MZioLIXL9i+FVqN1URj2NJqoOHSUYk/eusdTqfjx+51GzQz58jhY7ML8+3d7Xbm5QFL1Uq5vQfySQ1j/GJCQEOlPsVgZqEpreWqNAs32JgOf5eHJsjmBQLq1fOAyQ7Hh6wGoVvpQSAIKEVRJgqGijc1takOZBJJtYWh6F2iP2UAWY2YJo8zeW15N4GBgOpol5zZioA5zpCRKlStLAjiR22TsxEREIOpX6aUzgHCYHpA0KaSqsR5IaQEgqPnEOWT9oWf0FZKRUrhm1o8gMNBLJRGEMcFpGUTKKnFV9mIBiF+IQNzWCmC8KraQFilWb5qoTweUzv46L8VAcejlJmwi8F5FqAEjmxI0LxwgzEAAUsWXnBJC0UXhAvPPxQnjXh8XnW6n3N40kZSK3s4Pj+7YGIqvpxLWH1m2HpzZhapw8m90MHlpaUw5lqaKX1XZw/6tT38ReTjjz7iuGW2C3ZIIVnWGNsackpBHTaYpSJwJJqr4UUcK576FCnIhivWJEWJY1kBwR26axbunTcmDaghYPySWcypDICzsI1AWDA2OYFx3PzOeLIMsbWx5oQfGVyYENC2dENVH31ymregsqrWNpp777sfsVihLXMzMPJlS0yOAACEmEtAidQJSbpEf4aABYptx/IWtfDVbiFuAHabr7RcSuazKESEK2jI6mzv4i3CTJgjBAmTUxPgWLXDQJCtV/pkWc3WHEef2PDW1Nx68/oN3lxIYotrs6CHhzjf2dHBCZ3RC73paOVu4uTWyxCKR6VkR/DIVwRk77Q/Nwx2/+wM1BZFKApcgRV/PLqgjWqa4NGdSZdIUtBbmJnG7ZyHn8knszjCNa/WMTnEziMFMhLffvvtI8cOx2XNw6PCUoFV9RNPPu3asvHxCbrR09ePXa4ih2oakmILnWamAB6C4CBUoMAkVgceY4JP2GWe+Mgjp5588gmWGuXJozhWoO6VV14hDjY9/ivrqz/xQdUwd/i11oI66Qi3KsJYBxOZasQWNjQuafOI1Wbc50b3jCseOOCYOQB8wAQBySCYAOCt/E404rmx1GsJ2GAgA23HIu0lGJV8GMqSI5ge1txDDz3KyCYdGstv7cnGq54Jf4RX8gOdP39OkVMPP3zuwgVCt9hF4mDCHzJq8RWlOAlhmPjzd3/3d/HhN37jN+5/4EF+fBOz+04+YMLjkA4bf3neq8p2e7ta/uff/G9qK3Za6qpHh24dHejDByaFkASh7kQs0gDHmJEMSejRuvzAgYNNBh5cPuP4zeND+qzL8y/vWuRKZp+Pinsoxt5yACsknc4TAecM7qLYBtMfx8xbNyhzzszS4qploWWzRfFH7n0In1DMOaM78mYOYu5QdDPBugmAe4prqstibWB7J1Y71c1Sii44IZaCDGESBZm9vkcQkRbuK3d1+L2phyeQiyfM1liSiCcGZshCPn9jLsfHZPFL9B58SE9QeCebUtLQmMzoyKP2BCrKepg51jvpm3cioz64BGHbszN82iIVVjIoiAN+7z7y3HkCh5xHLahLhIeFB5lEVGTIBctNjbALTpjpfBBT+mJ5eKJ33O68IhZF+EpsTo1D/neNcsWyjcLmMp5vllUu71TOrRUWy2oqGrur2vqf+txfuDE2f+byrdnFza7eg/sPHq6pa9wpVmwJnQqz788Z+vnPn/zN+ITw/z8mAIJm3nrtBytTY631hfHrF5ZnBx0Durm6CEPdCP1PLTSMG9qqORvqwNfrakp6KgckU1ySb0zBrqqTqJORqGFy/eAS5iuu68Mlg5TivmoghiGf8F//47fBPVQ6wHSMAYcFrnLpyeyMDq7OjoZWp6CI7792/fwnH/5oeOhqeWG9vq7SldQirFimMatPy0YU2RKcxXf8NJ2lEZtrfHB23cTeRBup42tFlRkbNNj3sDd3sK5lgkTLyMi6gFWCsmJVWt6qWdvamZtfdgmCdSlHiTe3tuji1pYWaKs7icEUQplI2NFZWdFKHXg4/tk/GMJZZgOMOSrotEu/ZHDBFrXHWJkcFoanzByQfZJhdmFWTl0llcsdWtY3AKVklcta508PB0JWY7UqrqIMH3rsFRnIDgQ1ehdW5RQgZ0u4CbisvG5nt7peuHNbV5Vdv5tLZbtbjiBiAIwO33Zy7f6+/dTg6WefEzhhXDDkGUCBEoeCavN7dekVYQ41CKtd11rc3GhvCbvN1EnvrfN38ZGvpYYYsHDXQHDg4GG/yNRkhZyV6muz5jABsUU2A4FR1TBk0BQxS6MYGwwJTGBd6beRpmqZVcHMUFx3nWSxZVYhhQZ+4Qtf4IbjecUuBT0ZYb9ygpBHClJjjOUBQqW6aExGppauZ5ZNce/6GxAwE5/39e3XOvKCv7k+PxY54gMgmGCYSAPf4NWr107e/7BOcej28IEDBy0TCSFmdNSUbPsNSwk/yY5cCIub3EswKkWzwFBXZxQGGasz8llnQnvvhA/QEAhDEj5wZoFDNTniYw4AW0MthBXHKPA9yqoXjSpKA3Grr8rCwYtSPnmUgoMaMR9RKPJnNA43k6SeW/6sckwCoDQBqBJZxk1FarG4sbK8KCgDfDB9ks3wDWG4AeuXCQR5ZQldUIuugD6AjO0gSDeOYymFgQPakZwaWgwTscJrY1U0iz2vhAxwxkY1qmVsbBZN/lIF64XOiJOFRgojipUxFXENKQ5zRbBfYm4sSFhfXbatx4TWIxGGsLLDmZ5QbKi6UQAVDB5lM+sKX3r6gEz+oGcErQLDAVgxv6qkrxNcmKZEaMA4HBKJQX3lB4iLTjVZEosr4Ri299zsUI+sFAtPcDTvP2zULbiCLYVaNCMYcvilCH4BAqHMKRZSDK1ITHqWdcKvk85ko7UeqJptu7GVh96lFjNT0/jOEwwrOrEmSDgNlubTrmJxjxLiTU60NMYYjzV8XC4yv8QED6lb9aBRjqccGR47e/a8vQEeKAwcOFhTWy2ElIJiEeXT4OFFrr4iIdicGC2RwPABZxj0dNfcg/5hl1/+aR4FbLl48TyBkQE4MESC4gYD+02gSt7scPnptm3NnLXJqIjZBSWXE+GEsluo0ul/8tHH2Ku/QzIe+mTWjaWKS9Gd5XAUfvGa+pKIeTWyBfWJDHqH5KAlnwsk/+OPP0405C4D0ZCUbAYeykcjYeVP/gliIjt8Nkz0dfe4MsZ0GROENOC5liNoe35mtqu3Rw+CPwnbKs4b+BMBvYEeLgl0BRPOAoRIhFxOnzmnIh2WCJyXXnrp40/PdHd2WptwLQ2mkQVyXH3FzTY7PdPe2cEuWVpZZIgzLOmqWf7Q4G0bP27fGrRdG6VfePEFGmIOoEbc8ELxCAWe1JKeZCGSlxcWp2m/bBDO7RDyOH/hwiW6ka0BvQCAGPLUk8/079tHG6EkE86MjY1gi7ZA9Ioz9MGnqBZyIK+zgI8JD7nzdhw8ePj8+bPCFO0aiFX4WIE0p9W3Fl0Gp5Gb07oYkJQxTQs3gU+rr4En22hicsyaD4AffvjB5z73OZwRYKZ2yGMdZFgtRBk6UIwOdGDgIJS0Y+L7Z//sn/n0y7/8q04ySu09nAG+3rxxTUiM61GL2xvf+A+/N3jt0srsZGX5VkN15fLCemdno9klL7cTSHDPxIJwVcdUxltYefAh7LaI6A/TJFnHwUGPnOlJ1idnvq6L8yAWZIMiaPjFAnkiK7+vX521IPRCcc0V65VCyStW17YW5pfnF7nSYuOvFQDrOKgO8SXLPBphRdE0uLzoxEq960ZVOTsJNurYEiFh+3RiAzdRXlqJtTu9qmJxZnhy6sdiBQuGi6jaDAD740knFEEq+kPZYBtGUvSWKg/b2q9PPI4SCZ371kdWu7mHBuWTdOa6Fzkx0K+VQH0ddfJIsZsrKko3znghFL+Zc379f2eLb0xHb4IaKw/OIJBdnebvOgqOaelsx70eM7Ew8XzP4IaM6kJ2aX8CTMDHc4O00tUVZdVmTo6z1rpgZx3PYWI8q2lvq1K2pdaIMzQNCCjmABu7G4vMULFAG8XqxfXdxa3KrermioaOlZ2agyceqSy1Xb4xdnN4vFCsOXDo+MFjJ9Yr65xDAVRa6rFGg517vv+QeTwRQkZz9ITidMhAtZZyyJIyUS/c9k9LQ+Mb3//u0uRIZ1P1yLWzM+M3OhqrtjcWn3r8FBlgLT+MBos0h3RpoRoXJUGsk+foKvRJJDhfqHBTeLToKqGY4VrKDzy0RJBu3LgGAd2+vExfDhQr0SwfcTV2aum7+Ezs0ZY/S1DcFDvcUq4+wZF3HCSD16+eP+uC8+tOqikvuoV6fXtz1ZqWWYE7NDRhtyjbVmNOyuNs8kqOQjMIaIu7e2l1U5RbmY1km2w6WucM65hxWeIXzrzhUAohEzFlFf1PV0zmY5d2eZV7Fyprak0bGxpbCyKz3S2QApyiSaUNUboXlLI7aTXPrnT80dXQaiOaqASdmM5fk8A9H9SojSDTuxrzn0xV7i2Kzq/Bro0McWOxjZh8FnFkgnURuBlU9XgxPRehlBqBFAgoSFf1tKqA1Z4qhvhikiPdS8oT3m6NwoC2s7vmZE/xP+VVwkgaGlu6WDE6AHbF2vLcur3UrPnqSoFf+3r7icAc+gevvnL6k0+dRWF3HGjccCSltyRNfktWHHpVZDCiXw8cv8epNSYMhgmCtnzEdHvqmWeYy8qaFRhkgYWtftUodujgAY3Ig3w8hCQqnnnmGRThpEGNkwtbqCI3EAUzh8HA5YW4qRNMA2gy/8JH5quYsxdffPGP//iPuXUefORhv5gGLNmpiy0EbZCpq6GE7NRroDGyqMKLqnUZnFDygGwNXDZC1EstzTu0bpXgQECpAZfTR1iEvaD+Jlvp4BvWrajPzMyCzPdvPDIwLcxzyy6YAywsCepbZj/wo9Nz8OMyqbjsb7u2qs51aVx+4s5XV8J+0w3hhkEZKC8EiiH4jPkeTPAObWN9TsdeXk7DGUlpFNxYTDEnOBGYGbVpqOYvMqWppbm2uka3LopL/JLlkOA5CiNmrkyQhUfwIoYzUFme6vKOveDr1cIwi43+ZrN1ZhB0WYPQkRMmNC1NMWjZgq5aizWxjVUxqaGKlVXGOOPa+tbm888/r+/DFvYXyKjwCwc2G5NA34I/rh5yPMn42KR3q204Y+0lDizZ3MExjXp+Yda7kYJjhS6lJrwXt0PccAaQRKg9o4g0VcERbzQ0xwh6HcKQloBkwD1fpeCznIrDIafb49HZ1mo1BE+ymZq9vXwiLc1tJOgBR9gBcRAEnSl85aceQhJVYFAeOXIUZhot5ZPDrcIitbQHFahSSSzb2Vrl7VPYaO5MVow2AabKszPRp1hYs1GVKfmrv/K34YcdQ67xGrxhzpqtKNMp1hipIEM2VdPjmEukk2eM0O4XQ4whSCdlwYF5pxM0+SJLBUfHJmhMQ3MchK+XNLmfn55ig5IE2evgUIgWxGskWgLE7HqBIopMA6YmJn/ll34JORROrAAcSBGz3n77LeaR4pqoeuV3C5LGABOdgr6YNQZPTABQEZ0g4GqhK0rhFfy94wCq/endi0YBGXyLPQlx6YzT6+def/1V8OWBc7ThzfWQ8eYm4w9YXYmy+i/vQhDNoOTMh2OGpm9uXbxy1aFf7GZ9BI1HLyQ9DBmyU6NcsAWN7D/7uc/RHhdhyAx5kEnB6aKYg12YzwjQBUBeQdrgFFzxTi994UWjHXZZD6WUylJQ92Vhl3d9lo5d2InmqpSxHWSNk7JqurhqOzUCoYRFuk74M0w9XprbnA4au/v1ZR5ylw2LohUtLdFAmC8t2zqyfeqxRx879WjWTHqCuZBBI9plNUrN2A/dUGpvbUODs281rTwZgDYhoo4ngC2e575qj543xWjZ7ysDqandkE1kZjHaJ+oInbAwUEQS7aIzpAYlvaGvbETjnEuHOMRE1ExMjLEtnAghwkej1Zkre+NGHNisOgcDWiJ44YUXLAHVN9ThiYVjXef0zKRu4vg9R/0a9HVhTGJds8b5wMmHzBj1DXRbvbiBCiMJdnmH7ZUrl5GDEONEZt2f/vGffPHFF65dudrZ3YWfwrmpsVu66psaz1+8cPjQUc4Pxxw53fm1114TeSVgYF0LZkJyKUb3O+eEH2dpOPbnD776W+4fDX8hL29YKOsRqMA0240TcpHmIQ4qg2PJLAt9CFBsXG9hrcUT3s2w5+LBsvhHWqxQxT1MuVuPyP3ksvK7FQfO70T8o0o5pGmkocL5XYurDU2t+r2R0anJaW5hG3ljNUAPbvhxohp5AxzmL1DCzdNMThCYM0B3ttYaSjX1NeXra8s1ccWVC8TYwXEukCmMhoIWFSbkdawmAUI5jU/6N7dNbwq9NkjQltTzatgQjHCW+Cetc8iMokB5K8ysbOj4yrSiPPwPMQ1IewPCAlJntvWDXcE5kNnrGJOYwCIKLhkxE9/8YF907onNhUoT/sAjAnFwMhZjKhiFRVfcyyYlIl5C93MLgEUMFSD7BSlNDCIx5m5oCHMzxJE8JBF5EqFUKbPZGEna46BJmszDB3+oATJJTd8leNi0yzQAieRteiZ50ZnRq66BKxZqmlu7DrR0D+xWluZXd+cWVhdWNuc2C/c++ZlSe489wSsbArhLFY7VilNfTfFIDuFUgt95k8fbepfZ4e4W9MwAYwKwbQXIkRdp1YcP8vsvv1y2uVpbtjkzdn1m9Maxgz2NZmvri80Ner8ag7eOSB+oaWM4KjQi4sBGdOgn/WL5/NQcemWgSH5xz5hGMqwoPZzF+cWlBb9ayXpsfV8ttTUas518UV1V6mzrFX/S0NDCOU9kk5Pja+tLbe3Nffs6m1ts0yqvK9969wd/Njt6m72FneKJCSEkUub8vrWamgrxrDAMeVh3No8L3DZkgzOE9Q/xhV5txwQbwiRPLcO7e2f+Zo+GkrJp2lRLqzMH2NiO+KMKVwxUVEdrjWBI+512uV/c0F3f0CzeBQd0/rpZbQHluSIR/F4AVztN9mLPmUolIpAK0UNoeBQMxUz2HAZKBzCmJNtbymIneo1Pfk1mdNVpGZJzl1IZZ11Mrh/Vt5RxRPn1gJCf/J7bmvckmlgHwwH+2PWNZfFpu7SvoW1uebOnf6CxockFH/Ozk46Aam2oM61yAkTItLqGMcdJdPnKRQ3IxjPtBBDjizFOz6kJWHPU66EijMWWFojK88orr0DPiLmvr++eexwtWM9jwrKUx3VbLBYQRkaGzHmMKWvLa9/61reF8qPawKTn10tDnmHA05c5TOus/Rr7nJF6c/Cm0/fPnTnLDSCbgdIo6YW+Pffccw4uvzl4C7f//q//OkOFxpoD0w0ZJGICzgef085DwGVQL23xSR6EmFfJg/xsApEgSfHciwWg4vipuJxEqQHwx4kgoCrgsAGMgzgDiNHEKJMqTb4NpvxWhJo49tomES0oBUxxzMdkT+9nxNQXcr/q1R3MrcGSGiQ9nPqsO2O9ekFmP0BJugwogg9MPD75U41WJCaYjKJbHTWpGPKgTfEcddplR2672aFIGt1QuDrIOM0S8YZe0bfobtlahqo7R66DbJqNCdjC2GAuxklxNptZAqqIo6JJ0MDNdrUFg4PbO61Ao2aHXM58AI3yWpnph4HVnIrT1uhlpCZlfCYYsjAQw99xnHxt7KXoIdOk10horEl7FWDIcsF/RJBY7OnSYGMNNz0xHqSoJMwf2B/nJeIMjQ0SxFovr4xPjmG1FPLFSY883lmeiqLx7rYHODAmseSeI0eIAFh4AgsUjnFPsOQJmUrnxKARcrrEn3nucBJ8zCr6+/drphiR26S5r0mhatgftMHaTW9f576+7sLuJu1BuYEHTtQChO6uPjJ2uVPiUcuTTzzN6hXQ5qJaNZEsc8pcU6S1KtCgiKA3s2SkIht8zcw8fovSxZLa8sT0FJTcIcWtZnZoju7CqBuuORS61BJOdKOU/fu9nZ1c9mxNtKlFEdxRF81GuaoxggrCiinGSyrq99CBAdGiyFHLY4891t3TCTg9xk1batDe29eNTRh69Pi9HDCUFr9kzlqVtVSN6NWBQF4tMnhXChWqg4B0eQgaaYr4yi70i+m+csDLoAmpnSIO3rzFgIM5u/9Afz/qXInl3URIZqY2ww4ct/HVNzU71Yf7AXUgmCMBqEZWI43U6jxIwFXVgXPv/fdhtcyo6+7uBQRAeJq7kx0/t5yK4AA4TtSxpfbxxx/NdAng8Ulmvefc4pI+y3SI6tuOmRswnrhWwe1UBKoKDAFT2VwKAmBKJxSlfOrb32+6LxEnlcU0uBENTZMIf/0pu1nHhD8K4smXv/glbPQogo0qkg1nQpRpsMd8wL3riFUdM5O1NZpmgeWnfuqntF5/+qQ6mkCT5VSpIjSEdLgdwDTt0bz9qbOWzcERCuIVKxH74WkNneceStx5FJilzoAgvsHbN83T8LC3t9tygc1dhOjmUH4gbQf/nQQFw2yvE1ZqHU34AyZineRjWiuz9V9tG0o9PXFFA2F97Wtf++IXvwh5f+K8OFEkUHJstI6Btz45DXWgt/e9d96xYCK9pi6uqjBntfFDHPCR48d0uYbx3/39P3CgEyYPj44b6nGytbF+c21hYmRoX1dbXXXho3ffOn/6o7Xl+c21FbaomJCwR8Omd2kRUyBMSQ99I3e/+T11YtmfFV25TkcKGy7lDVuBfRpPWoK1f93X/In1l+GwPm1glE4PdLg5IsgsRSCKAOGyCm6wrYkZp3GwamKQ0RzEV6cNAhuxfxh81nM4mMuriw5K2q4MgOLa15vqqxtKldsba9UMX5PTuP034V+Mzg1O9A0OUZ5Z44aDMJpNS9SyxZuc8uwtU6QJQPTV8u+xIk0DFAnzURR1rF2E8kAZEzjo/W5GhLPjTQEHOSbn7DU2G+zwSu0yqgXue4gxhSOMKtWR+Y1/WLdtLAywnsifjHsaS6NoERX1G2yviBBKDfAuk4OuWJrx5N+YGOQJgNEoAwRynfcuRWcliyLGJqMX+Na1MQ42MQnIR2RgkMvCaktSyAw0iGGOPasWCZY2ytY2CnFTU0Nna1d/VX2rg0GHZ1fmCqWW3oM9+wZauroLFXWTczIWWjq6zaMNuioQGV+IrcYWHixzWdapDJd2TACYLSYKoT7SXfX6vW9+c3djpWZ3Y3r0xuLU0Ml7DjXWFbqaLH7GwjQkoa2FQgx7NRB8TuRHeGTmEv4Y7BuF/dWFCcVelE6ITEPeYoM1VwKXk7mPglro8sYqk63crdINdtx0tja211U3soHNGXDeXRP8iaX6iv7+jobGmosXz374o1drtxe2VxZJmUQ8Ies0noKGmVkT4OkdAngeQUFphzrxQd4nolEKfFTA3Hsq6AsFcqAQP6v2ktQr2Oe/cjlMKKzQmWiZYxbLq9lVptvrm4WOnkNijnR3w2PhsbZHGhMWc3xpOnuXWqpXv+QMR/1YudlKss5z7RDwQCmTk3tgeCPHA7fbw2wUw0Jc8akgVL3kzH51WbprOUFDYHg0kmtMQQ+wQCnl8U5wXmQmFL9AaR0VnM0NjeH+r28ZnVpsaReZKeSianLstm0V/d1tWndzq+NJlk2fOBzN20QhMlhxVe06SfZ0lr4qTGWRgFi9Jc1iWhv4+FPCqGhu6u3qXll1WskEF6kw2ba2Vi0M+cuxHOTOnyZW1PvvfWwXNSdgdrFhHUL0qDp/COvwDcTGppdfflmnXV1Xc+99J37wg+8x5tToOmIdOMfWPceOofTy1atOzHv19dfMBA4cPEj9sM6MSq/oa9RrspJOBPaeRyvVGQoBURedpyTih7PmKIvA4B5vE69fZ6d3cTAMErEtdMoEgId9d6dqcTmmguaoHlUoCDc1golMf/oFAdOsZHByEItPJBUMvPMQLqywF0pGTPKFj0RCxGGZFQfTV4mgebyADKusFZBH8vraNkMOAoY/dOnWIKAglsqsiAcQNKpdjfyD0mVQ3EDsWV+LqCf3OUDNi+It7oBMj9UDuAlAUER+rKCNzBVwoqAnbX/PJEckgEOiCnvx6gDAKqLbShFGFZ1c2HtBGqPUUI571s2ctGsrpVpQjQkY4gHHO4Th491vfjfG4Q8oiAIHbNJEOMhWOeQJjLDF+l1aKhECAM+e3piEgE8Z5IEMSqUjCpJMGnQZ9/HEIsTxY0e4VGRQUZaVbB6NNOtJrhpKHjhEtLQ3SGgDwOk31SqrRU8BBkArLIYsGy7O2OZh1c+YSwmORCMPFGzxwsgJnCmvNUFu3uq66pX1iPCxhokkjETqCy+88NRTT/mTBlBBRp4btiEqgIFfVhVB9vKizqC9q1O/D43xyQnheBiHPJuTHEns7tTdsmFKUuNa+qZmR8D0pZA7NlNuGIB42Kwe3AefSLDYn2bwF89fxMdDhw7iKcVio1y6cuXW7dsGPGEt1hYs1QlTNJu3noQbBwYO6U0UJ1HaY1aAJ7j/ox/9SC2w0uYF/IEWmjEzg4cIocfagyIh2uT1gYN0zDR3gidPPyZcv36Vq+DAgX5s8VUetS9ylaTJJVazeNKic3AALToXveEjBweIVnXgsw51N3K6Bx5dqqMoivitWV+zmvH666/DEO2qs/5AEAp6T70EP0R/3k+cNe+zn/1sedlW3BeYmveYGag58sQEJeG089Ld04NSi4MQCE3VIBdEwkUQoZAq2umCFlXQqKbWFrylA1pOyclOVXFABIPeiA44DsAKM3EM1VhKNOCjiJ6YGQrZxysZ3n/3ve9///v0E2MlUnRF9G7+lBn/vRCxF2DVq3aaoIM2B6DAr776Km6oSxHM0WsrpUa1iH3SqyJQj49bYLi72uwZJnL+63/9bwjRYXlQtajHAYVeJvHC9CxxmwAI7FGpIc24rP0bNO8iYKpJ6LQLn/2qTqV0Bm6k7BM+mMO88cYb5GK2kzHUp6haJwnJt956i0pQA8KCueLmMyariJWCXqAARJfuaWRsTJ+SWzimYYLG5U+ZTdW++u/+HUeICxdJkonIa1dXU+14LvtQoOhC18mxQbNNg6SCgMceWa5dNkqE/ZQ7FTgclemRAcm5W0FsflGjF+keGfI7OOkJD2I6zJPlGvlVIFv+FiBTRWEGh9UZzt7kHubj5M+snl9cm5vn1lU2/s9IiKoYh0xlGx8ZjgxZuMFql58jDVE862Eo7+GZkFSWUeI1gch27nb42FTqEyx4Q0DnswwrncFZriLY+M+vHQTZXI7FU9nIQhiOd03MUZdbZaGE+UGgdHT6kxWCTGslsdwSR+ts8V6h02AahwZhQxpQY50bVJY6c18qjNQCkMc/3lPOuBJtj8fJaBIdsbKoFotIsY6URxq2j3mpu4+JjRGBtjTRUpOc6E2U+jcGofwgc6scGwNfPwqArqsxMEOJCnl46k3etBlCcdo6l2I6/tUcEY0xJzGpiPFia1WckIWlhflJq0x1TSvl1bUt9dUmCesLE6M3nZe33tV3oKWhaomirS2RJG9YBLAwf3Gd2nFsh70PW+FioST+C9zkIbVNtstmTXmZCMhKh4EWd0pVxerYAyIMIB5UI4pwNDftzuNPUoehbkp6EnexsblBougBzdnRKQqi0WZP58GF1encD0eXJFC0rKxQ1dbdxbPeWO88z6aaqjrTOze3uIK9rrZqf3fPkUP9FcXtK1dOv/Gtd0aGB8u2l9e316pij2l4Q4KtQUKWRVxEABM1huaknZEkwqxQrdFW4yMB3YUpHtFp0IQjRbepIAmDxGzgd4icaa0J4WaTlDYWtrTXpJwWBOLya8I0symrmJ+b4czUk4g6IiYauZkOFwbTAOpUbb2ESCQ8oTNYZOHGL5xlwEmPl0yIX+lI8EhEGg7r0FAEPip8RZquCRV6bIl6V3z2ri+VWR5PVlelMnOU8gCe0wGXx59AVVVbmyu4bbpQUfK3RKVk80JqLHJGi5ARKaIswLci4TaXfX09whMEYBiV5NSPMWsFVMDHMhEm4D7BMJ+N0cYaoyqEHRZkvOAhZv2j2gAhanVqYiyNjOGUtXNPd6qvPn78HvXKk/mAdagzLOaYKC5O8Q7WDcwrFleWdNFqfOnzX1DXuU9Pq8uA8tbbb+vP+Xe8nzp1Sh5j3/0PnFTQPTYuhoO5FA+cUUciChprcBJz9PxqR5qq04JGTNqhZ/dCssJjv6V1H+9ygiCwBuFLsFlZHR6aWFqJs/NRhMGqhrz8smEggNIx2UM6nqQM0QFK8Y4Wv/70QvRe5MlyIREYguxPiUDlUkx5OEM46zx+ygManreUrLV3Mg8gEJJKKIHvq1FPNvjTH0Xg5gVbklZHJ5zbuCqMzdgiDMy7snKqiLfLdjghT0wLRgg4zAb8ZKtYKVSRaDq/mSJBxUFCrHNW1DBX0n1kqAPHSiAHH0HX1pfkR4WxVYQUBFREryz4m7kozpYAH87w9ItkwEHAZGC9+60qlJF43lYE2zwB8El+5GAU+FgHtyxfouHs08FmofsFLTMQt61TZaGwInI6O0RBv5DPfMBYn8BUr1pwY2JsAhuByuQXnrmvBXcgQRVaWsJRKjcWIJOMc2u01IhsTmiINTXWWvr0CUSzU3qjd7JQlNcNTIzlbG/r/Bt/429cvhzHyNQ3xrEkMsMbzQw4ogUWtVLA0WxYvepFjANJHnngpC6qpb2DJ5j8mEqd3b34yzHD7r6ZLmCaSLxWETJMMGOMSP4D/NIyPfCni8wpjMAdBAOOX4T05hs/VPvAgf1Hjx8ztAisbG50fELrB++/69iEnu7uuQV3ocw+89yzvd0973/4QUd7FzliIlSprF8PWWIf2rVYLRkmEokEG59//vmQcdo+hZPq9RCGsmSjIKozB5B8+/YtfheLUBFUkYYKmR05JDOfgcctuRilovBStLULVphfXmnr7PAJT9RIEYFlKPvFbSoIHwhIBwQ+amFreiFlDVy/pm34tTPEizo1HqAQom1YBnFyt0uLM7azcwt4hRbArTyQFI+CStEqXSnZrCrA0LgYQQ87uyWTqFK9cAS/Li0Wd2cK52QkjgRhV9LZu5iZ7ObALdrY9jZZe8FDTLDSChl6EqxwbIUohTSKW6i1gUEzRstLL72kh0UvxIgYhhQdk7W9waHbUrQBswVbsvTphA6+WcHP/uzPYj6wLHgMlA4NVFMemDCOUTY0PCgPDmCglUlViNXhkNK/nzwZRwNtrcaSCKeSqYL1Yh4jIUIhqpUl+HMxqP3NN39oQptNsYjNSOuwwGpBRAlJFBETK59jnmv/xRdflKhxIspZ5ogSS2pNANrmmb/wC7/w1a9+lb698MILQME/a5epv0N/66oqHe1vCk03rD9YR56djyps3hUIdOPGrf/wh3/4t/7O3yZrG6+jg9jYsMrvul9bZw729Yijfe+t14ZuXhdLIYh6x9ZJJhu7KgVGREiOSI80AVAvRuVfYiIvyMDKr8en0GA2gf+lIcEvC88vocugs5U5eBHDQ4wQ+Ym4/PQ1DjTke98pMB+dM+TS0ykNfjEsU1nCTk43kcWZ9ABSJX76ZOyH53ynUFtRy3HCfxPgdtYa66oa62u4luNyq3QIQdhIaZGHLY4O8k32cQw23NhhVMViiZvFjCIxhJBRFEgzbajKln/1OSbP3mMAcHVutl32zPNYNGDFJtLYsHE+o4rYJZJZ5VRX5YkDsgTHEJXhMHtA8mcMYRYiwnwPi9AJL7LBDdt+8pfLWz9klseekc7HHSv26xvYrRZ2DBK8JPyjxkwHNNJMI0xSX/1yMSRsw06VzZNFDKDeLvdpUjwJ22IKLC631gC29h7THAWxQWBSTYObg2cW14VqFCtrG1vba5s7Sp0H5zd2xybnNnbLDx67b9+Re8uq61YsLxUrN1iqqe7AJFWdTr6EabBwuyj+i5TjA064sOD1732nWSXFjbGrZ1cXxh6+7whjvKmhzrRHF6QFQpLUMuH+RJFHDUQAiPToxitjWdgjc3DYDJAdfWfPg/x44oGSIoo19/Q2trRqaGYDa0vLIqKL27v2Tjz2yEOtTXXjwzd/+Pr3B6+7gZ6ToGplac7aEs7EWJ8MqWAaweelAHgk6Wf4fq17MEZjQpkwzKOMzBkNZema3sBDcPIjzsotrdCmkOCE0CgY0yeqyFgpM0EjYM44GWXfLjPhL9hWAKClVySzF3W0Ta1xs0301e7GSYcjW2PXp4V62B6SmjP46vUbiWmsAQRKgMBKYkZyZGwyyErraTpGPbZOhtro6BQ3MipiRDZSkIg+EC9Ak+jxAojHi08e1RHT3f5coIcJgCsl1jaLW+U1t8dm27tcat7SUKqbnhi2jNnd1jw7MyHmj2tXKTAZVV0d7eoyJuKnpiT+Hnpxxm06CC4O1k6n78usakbCp59+gigXY6HN7izOowcfPPnDN9+AvwOd9JwEivlWiQWC291DXQyFmGAcYV0wUQwiBiYbwAy1HP+IBdz4Mj03I1jo1GOPuIFRP3/v0WPGEfqGRQoqZUezO5uNTYxCs26J5z89BxlVG5L80kN0sWcM0/5ElxTDt0QDOjSoZgyshjDxUmnPm9FPwLtNsPahGVOWYnuG0WpedQ49X9uw6B0ypQDkRdmyFKSEQialJYUsCz0+97Nq/YkiVYe0UhuRwoxRClgIA4VqMCEGDe0xA4EwtJXFZ+LIuq1G+RHb2NxiY4h3VRuziAkEtQDI56iURIoEIG5LlMH6tjwUDCgZgEqumvK1lSUFgQrWLS5gqQBg5/PKdvma+5YuU0Uo+bqlk9zdbYzDRaKT9OjHQAaKtpSqbHr6seGug4zOqGzbqdmo1wuCYSsCQTNrbWZZWzUfW+SH9cA2EwgahNGLGzE5SdiqzkowHGJ3bRo9cVNOMqKrsQvizgZu7xiilJUqg5tGio38g2CyWLCd/mSBIlMEgZxqZzXhjOWhcD6UV23FTJ8rJ6L0LBjeuHbTyriBXW9RW11nEbSRR8Pq/9//1S+xM5SHCtHioE4SGbAlY/0qGaMElvke1va2Zh5ThDGGzM3Ctt6KlQsTBnjcf/8DbKZSXcMv/uIvMjjITN3K0hLkQZ0NRJvlYeERgxR5qAvuA6KT/fjD963LaHXST9x/EuWsOdQuW6yhglWVtCE67NQZiWMaunXLVQ2IpzGQCSnGZhQnf9mzHxNWRhW61M7VbQkh7oqtrY0eqKzsnuPHn//MZxzaMDI2iumfnP7Y3CtvKu3q6bw/mWsuWaBvcPaABhSGwE1L1tlhF3yY3XhogoGNeA8NOflx5UEgRZdNSsYnhJ3GA90iPbAIRrTQwX8vWlFLutlXSuhNGof0Hf6sq64RQ19bV29IwTH4wAQnZaMWNBIEWo5ML7hB1WDC/FAWTyCgJ8dPKGkbAlTUZQELFRon/jDNP/3042OHD3R1xdExypoAaDAKorGmVK9nNEfKWkEXI0McXbpstNTr63Rgi7d2LZHUtatXO7u6XLFteNWvGJb1T9SA3KFNfygVxDDHi75Sc8JV3aW6GO7qkg1u9j8IuMdAKGlL8GQcWzt69tln6RVO0sPcISpOT7R5xJotPPfcc15kwBDFBdtQKuLLfnSOHFySXwxhqT7CvXRz+EB89gMpCDc0WnkSiapzj2C+jS0kt6WIMieTsv7NAUyJWS+Y/9FHHxC3qYLtGZbTvZtiocUWNJJSr45McwUKnlJcx2uVCfloRCyBkgs0DI4EYRTR7IFCI+B2hKOXvKAEMjTwATPNUc+dObO8uEQBPPv7D5jQ2rboEYhiTcYc4+lnn6kvNaJocjqmOp3ut3bf5NRYnd1+1RXvvf3GJ++9YxvAbnhYXQe7uZujC8JKNlTtCviMPiON2VIg7/GCPznRrwd8NPr11ScWefymJywSK/vJRyuL9/A2+9UZxY63gBOWQLHKLi9xP0z/ze3C+MTU/DJfZZnrpCw5iqXRF5ukVTkeMew2Zo/gkxjDw1Nr1mF76tpmtXgGQ9rOWl1V0dErghXjOBVu/HjCXk947mGeyAnnFkygndya2yYQ8miY1FKRKKbi5GyjMB7588MX7E/jJ8LD5Z7+QbHOKX5TEIh0mUGmvYI08El3jFW6AsTLxtYC38CDtYmFiZNWOZJVFPXGq0d+bwSRuvD0G51rhBvpt5lVUK0C1sAf3EhrIAE4nqgBIWnmExIMdke0TYistirC/SGZkPHFE9MYCMdbgoAbd/lgAmBxAPvjbKUIvkqs29yqrm3gBFjdLFtj3FfUlFfXOQJobbvY0LavtrlzZWNX8A9fbnvfQNf+Y609/RtlFaYE6+L/xU3BR0QXYaJ3018Rq2EnRlx7FXPRWCCxvvz6d77VoTMurI9ePb2zNvfIyaMrizO8DLpNfa/mAFudqrajLegAUaq9kBEkkeCRIWpJiupPlfIOLnGSJk8ETsU29fTo9PRREZrQ2skAFau/sji/4VKkmurD/b37ejq2l+ffeeu1K+dP11cXS9WViwuzVpjECrsqHBkqwcNcEXs8cTWYKR1WWYsSe11MyVKP9iB/Fg1WeyAgv3Qk6HKJIwkIaMoZAzQtSwfq0Ku4jYJya63Cu+mCFS8zR1phS0dNbcucGYCV8NitKxxpw9Ufvf29WARPNS4xHNOJf5bgggOx/ziOP1cjlDJWfjPrMvdgBVSotHCO1TDZjUHY5RcEeYAljuxaAkr+/GhTuXX4M8H+cX+iQ1NKLfrqPIWQRyU2nboNeWF5a7u8dnJ+tbuvn4FrDXN6fLSxVNXiQJ6pMY3D6k1zc4uqBQXYLKTbRIUT5Hi+DS5B5oJBOfYK62/VAnldCfEO3rjx+c9/HiFXrl5KCO9Mjk8wobQafx480J9GqPDx03kGz9LyKk+g/GhRnAmul9a3+9PQxuusc47+t6bG1t533n+Xi+fkg/c7/JdmCm82IpiK4BKUrFEbLE+fPcOfxaQlIFiN3Bom3FDWmGOnpgtdvXdEh/aQGs4DglLZtOLV5bgBAAL4ydoU9KK3h4w1gFu3GYW3LfvLIHrCYoDhSTxF6ohinzH4asQoMLGdunpA9nhJ1RZb2Xsz02r0p2xAwRx1MiiiLFYYuSDm3SimaqOqF0ASGhEQgVFZpWnIXcWWgYhn5hZyCuBgohohdEZcg1I+qe7uJwhXxG6TO52YAp7oR+l99OTyQwNPDOVxIJ4b4MsLJgCGVOmcTUDRNFRHN623ATBNgbzDTY0mlygFVU5UcM4mh9ryifsfsJfP4ZvOIeQvpqIQ03DOn7siMIwF6E+gclm/MsAWi8D0Jy6pwgRAn7S4Ets2Qnw7ceO1WvxJM0FAgmxWJBDikWdkdAgoCEPbCz1ELIByYqwqxJ4Bgl4K5lcidYiLO42Cy6sT05POvPfe1d5po1wNv4Cz+XfKhBn56rfwz37z79AtfSimsz/ITISLCa2NNWrl9WSyMK+983uZGqyuLCJT20CYnojATADon+4GJYY6qsC4/Pmf/3kNFdNNQUCGLiz5LBmgzDV5qBSOM/sQAxSAoTTbO26gHBka1oAd5mU6rbk++PDD8v/onXfBsQ1gem7WeEEFiW5tddWlixTAJ2qnCgW1SWaxivRBSANZOrbCgaZ2dHZ+5jOfMUgw1nGcEdbZ1S4DGXgoDyZgMZIBAY2LC5cJgyxxHzS//iQP+UHAscwN7xKvXLmENGhrrlIyZAD1DiTEelOKkDJP8PbI4YPgYyMV+eEPf4gut8fLgGRf2XLcDFYVX3311ffee0+eX/21/8ycD9PQC1V5kIbP/lQjOJQGhginlMZF7nd1QQP56pFTHpjwcvp9/PEnYUvd1aiRGMA6Wk1YxV5HzKJjXoH1FYalxjCsmQlwyDaeF1rB1QQmHNDoT/jjhvyESzWxUam7Njq+2VGLsblSKNFpLn9t1SRHWZWC5tfUgoBAEJUrDxIw0FwuV+qXaEBGqYqQDH8Cki5gXGbswkAuGSsncNMw4CDD7//+7/uqIJsbXfz0hmcSwTorF5ipv+DLWFics8mS+BhVia4tNhs40NYlkPjwyO2jRw+fPXv6M599ThpQdomRFKcLY/3xx5/ABMYEWswQYEXxVCqbsmQh7ouqmCJKsVWGRABHAqLyjgLFvWkvZGQRQ05LjWrPqFJsJGsvbKPXXnnlSy990XrCfSfv57E9d/GC2d3C0qJhYGp25s23fmgtLhZ/rdIwzIrljQ2lqxcvtDY3dXe0fvz+uz98/XsrC3PVwqBtDSzucLVb9AynRxoIrNuIzRYTA8/84IYHtmRNfHf/RF1+MC0ypHUAL8kYDvvGQOE3W8ssj4AW8ftgpF5PB16096ta6PfaRtn6xvbwyPSGVaVykX6ON2FVWE5Igchl9uSwTMPvGUgynsI4LjcB4DgwATCxKdtZry7fKdW5FmzLJT/mB2oL9NJ2W2aVPzEwtd+gBSbQphiGwsANxBhpolXK5l0RgsuGcoBJVg7JYsKGfXXoy8Sn5YeYnUST3FQ2TwywRF3MJd37+mp4iBOEYJUU8xfTfHEowZPMGQZvevxLHpGaakgZ9n40JXoFZ7/4DU0YQthplvzCnOJJQNKFKkkOQkIcaV4XAsqS4F5K0fBQ8WSBBnPTV5DTukQEO3lwSXxVHsM4uEjEBkrr7xBSdBUzLAWLd7fXuq5k4ch5U/NL6zWl9sa2rlJju1DfpfXdqeUt1wbvP35/U9d+8wQXitkGbymADSukSAB6xBvpqs0LeNqNkLEeFZMDpuUrf/ZNE4Ca3ZWhq5/WFlYff/jE1OSoo5z1cswFrGCraWj6Xj0JhcdzDRAVhCMlcwArTIZojMAC3kkNNHjrLJ5knaNFBrzVBRmnGlpai1U1/KYbK4tcFr0OjGyo2V6bX1+c/e6ffqNUVaBihvFq+8sLZca5hcX1HeoZ6xnBw6w8YXQnxzbIemBMzliRguqYKFlA0mWDs0QFMdyvBxyi8QkhwecVHTgEw3rTuOLeBunKarf+cRVBXO8dqwFwsC2gqrqJ8a5GywV6lX39/Q4DzHH/GiqwTlyJ5ZN0sIky/Ma5Lu8Q9sAHqvorLyqFEl7Jox8zTPTuOyBRtsAnkSBRdf7U3yolm/dMDrTzDhkUoRTm+VFQN05GigClanWpRUtxA6I1icWV7UJ1w8zSRlfvPnaag8s2V5cbS9VtjXXzTu0s1WztWheNKE0BHuB6oez2hhpHaIIgCtyBuUMSQVYdfIz7etcTx4/bpsWLzwFksLMJ0JRM3MVP//RPMSSsAGAa4iBjJMJSrRuXwTf4GjE5/oxBBibZ8AT+IIPG5axPPnXqkSefefKeE/ee+fQ0K1iX7mX49pCxCfmPPfE4Rk1MTWILr7ARyqz15ImTyPfgeWaRX+wyTHih5Kr2ggSs0wVZDOGx0sNbGxLoGtObQoVOwYaqixcvnzt3YXxikkQkGPGtUlkiBQ05uA1VtfjTr3cwvajaV1LIgh6dGMlNCZI+QRgDCUsD8aciSPZubEKdFOhlcUvHE2O3F9AYJL7ehewd/ghpbG5FVMIwBgjA4eNREBz5VSHRI7PahQzmglD1VboW4JO7IFQts7rMD3UFkJSfq9s8WQbA6QM8KaR0gwU4uJyB+FUj9/mGi0J0DMsR+UayDLbDR4+wH8yTM134YKoGDvtkbHTC/ZN8oEBhF5QA9oIh+U9c9QAlP9xMSAwirkWiaaA5gkBBADEqVhnSA09urtwKFHElqDxsORjSASkcmiwocQGMFpkZTj7xLaqFBlJIglAEDpiDWIm5igzfJyl45fFS+Bf/8NcgRwb4xWcPIr03H6iqrL5xY7yrK6IpCI75JZHlceBgPyJpv1KmwqSbFmRqOzu6WXsyqNg6wFe+8hUUqh5A0wOJbH11yyBR3dIhpH1KyQsZ2GcnBF+LmbquQBVhwg7eYoqhzWZrcE4+8BCp2CFAfeWnNwYhQzTIsMI1X7HenzQAhmhRl4bqkw6drRn9SmVk8EiUGSbpN/zNKiJX9haxBZmTkw6XhImWielAgZ/NWX0EzvgTE9VCv7E7ai8vQFvVSMMxeLILdTQ0yQnBEpUiSKCMVRSLQjB/KYQaxXvASr12CJitYqC2B6xEwgaNs8FK7cGUHz4y6EpUCkNVIJn4kRNKl860xlsGH2RsEqA3HBiKYIBfBoPah4ZGyB0JOCkkUejL+MigtU46BPKRo8cx2Vf5uWANtC5th7bDVdUCT7gJNbHTQB6q6aEPAJIsKbNoYQUTqLJlgYrbyvbto47yKAtb5jK1wf/nnnsO/uxyVjgg8sujFt0u6vBHcQUhRkambdBTC9KwBVf9ycGPNC5wKWQkDxcLmERDfGDKACYpCyXK67bjYxOO5pT45JOPn3zgftwWb+VPdlJ0oSnO1aAsLliiUD8EcrDs29d3/cbVwcFYMLnn3mN6bzBNtCiYK+QI6+DBQ7TdaYOkH17qFIEHE8ijFNUQePjhh+HpFx+0DqUQi88ERS4olcfSx1tvvUVzUIftOIlk+SkPOKh25MXw4NCXv/xlg83BI4cB9ImSayyQEWna1hFDAgiYbPVGsNT06Ojs5Ljr+QQzfPfPvjl441LyX87Ewl+VozyT9zJMkBgp0wSACRZDJiqk4HB+SDwI+4kH/v5i+u+9GB7EbqQRhTViFPPOZPFVngwKcyzfs/zYfuKtmZSr6zsLiza92xxmVyOXScEKXF1DuPVd6g2Lwhb7gAsjbMQ8ATCksUyK2zFCVxULtTYtbJsJ7FgCFPLDoWDFQHV3n8ArjTQpJciEGFnHsxnYxDB/h1jWDqFwqnpk9Osv84GgJU4NdShaBE5YKkosSiD3LheL0ZHTX061ARqvOwWHPALmz6iNFR22O0vLAl2aAKTJiYpkyI+9P14SkBgd7z4Jn72/aEXC3rml7m0NLZXiSSgFKPnSWBn57xYM+IUtdqZPElWRLA30+4seJIdxmrTImErJs8NnCYj2YQGEtoQZ4d61Xa6sJbbhbqFydZPFCxEDuQHXAk4zY6NYVVfd1FZZ2zyzurW4VV7V1GEdoLqxra6lq6K2cdNqQBz8GVMhDheschRKzAGCD37iNCDzjO//2Z/0uQKkuD54+eOasqUHTxy+fu2SMyI5Eam9RqSJ5X5P16TzgTMOUFT4S9dkWDv6fFuXXbkl6EXTZi/bmMOeMQLGeldyJXDyae8e1DkTrq62uquztb+no6GufGz4+kfv//DS2Y+PDuwbHby1vljW0VJsdFiC8wFdENZQP74wb3zBMFVjFG0RvQ8HyIQi7c00wury4Bv5ws0jw91EBeEcudOTPwGil7DMFU0sicwcWBtRUTQLRxa6LMA5Tg7q3a3gvQidKa9eXdt1NRiA/tQrHjp8mK/eCQzmnhE8QcppO4TjOhyDiAnsoyxurFA5xKCROSk9I6ZCqEKG1qUVwsA2aLnz+JMIFDQKeLk7UIYs0o3gCmbyAQTcrzyZWGUzGOkmAGLX6dLy2q4JwPTiuhUAGs5OWJqbammsa28qufnIYSAmQoqzENwFYpcnZAQS6m+ZcrlJOSAl4RxYdXW0MTmMNY2NDVZo33knhl1GGKPwyNFDzz//vCChns6u2BJQEXahTkAG3S0foHMIjaRGfJzxybhs+DayGMj0+cZi9LL+fYWDlPWtdeaHm2/QDgHemccffYxqMaiMcZgs4sDw1Njc7CgIw0EKrgtnU+ofooPIglA7tkgEx4NYPbwt3dqfjohKpHWhKhO58PXPL1y57ES6weHhEeGUPqGa99JYQKIwBMoQA0kACR1A3EajR43ePV48rljTCuDg3S/MVa04DEHIeBqFDbK5DSauxoa9rHJKhVK5brKhIQtduno9UPIuyC8riRSQpaglxs00T4MqywR6ynoHSpyjr6DBBHASn56a9GsPgD8hFv1AUyi8/NDTRuQEHAQYShQpikxt259eUBo9TTLerMevLM93aOz9EbsBVGCVug7BF4wDtj4IRJatU53D9NSCsSIqSg/kswkkA2RQlKtGhTzC8LgXrcyrGvnZxkMODOeFW6RlHHpovwpVycWpsa+qhj+q5WEgycP+BBPrPKwsikcEYLa0tuNSliO+4XwWLmjy0wygpPgTPjhW+D//178vFVWgiCEHSGF/2uAMS8aKWs0jsYmWC/5hE3B52k7DI0KfIGQ6yqFuYRFoDldeWzPRf/AP/gEbCzR1gK/urGc4AktoqR5kDUm8Bx5FU1lfd6zKwYEBTimNHJHsBDg4YxXkT8+c5je1xIU1OjL3jinSWKo3nVEcPeADrk1olqogCQqKFvLAMtIBRKpEq9jSwYcexGDIwOL2ZiUrqMYsQqe+jI+POlAt66WcKDI98IvpSuEYY8uDD5D34JIOHQTVyaOFq9SjFMgeqErPjcQ78q2Pie4AU3AUEXqxDuD4Gq6GTBctBMH5+jFf3NmmvYTCnmPV6USQpjrIECopSM9UK0Vj9IDdXR0QyzoxMjLGrJSHzrFFiICksAIQDGRufuUr/8knH75rw6g8wJpuIY34ZLj/wYd0ZB9/8olfQyaq1R4RqTUlZ+WqDj8RCA2Z0YW3MJFCXtiCpfLg5OmPPsY3VUvPnX7WBA1GWXhSdznhgygZ7IWAPzV78803KYzIfkQZ6VUnGymbbmEvjcI9m0mMZ/pKeijIBw4SIUxVcjcNAZCRBiD4JgDvvfcB6YNpRDv16CMK6u6BBRxifEawcjIIWhobW8Py29y4fPmSHWaC/l944bOXLl/Q7YCvl8AoLQhiR48eU9ZJoEqZ2JMUJoPJQMcZdZG1QCbpuZeRQiLGEhFQoCETbqDRIsgjhFajhUAxDXzpWplhI5hcGVcOZ1YbsZ565mk8D3Fvb//mb/7m//A//k/qRS8qbOCem54avHxpYF8PP9Lbb77+6YfviUDjv1xdWWCzxOnADpt3GVDyAKnFCF9VW6dexf1iHeAA+vWORg9UYZVx88LPlBNTrxijSM7HGlEkHZDDEr4zASgvOorS3473dD7d1kb54tL69IxzmcuaG2si1KTS1aRVjS06znKnHXJ/VpXXUw3ThrhQxQNSTACKu+tlFsKtYNTEKsZadcV2Yz2HnwNu2DnZakdWnpyEjU+pKIPN38jM+AMm76YDadzJmojNFn/yeGqO+SCUwNxALLPpBT5wB2GOSBLrB8nNxJ0c1RGiKgTgEhpzTorc6k2nrISpZ+094rcLNtLolASCh+s3r7UkNO8YW+kCQdVlhsuTHwCRE2DTSEnBPPbuCvAhRY0odC95pHRcRnww1c/jgepc1pilFTrIshoCVXEUW54AJKu1nAcRZIYsxACGMOThpCw/onUVOxs4a4KssLPDveq7jOvCrVmeNIRVurW9urJdUVmzyP+8U2ztOdDUuX+9WL28Vb5eKDV07uvsP1Lf1u3kULO9rTjXqWJzw3QNJIFNeQUg+im9qv79tW+/fFDQd9X2jfMflK1NHT7QefqT98UJyY1e7QJpZIHtCIewPgdWWXW9eNjNTqCgPrykitSXwugkatotG+W0Z8kwx67CDXC0jp7WtgMiftrM8G+52Ov6tfNumehobZgcHbL9hiqsL2G6tuO4qaqYBwr+t216O5zEcFCpOQbZYSOs8C9p3d4OAYlr4VkMh6sH09CilPykCQfFydFAIB2GkbibaIwzHCKqJxfBI44Yrku+Tvon6s1cQBE7WnbLqy0LEKV2GwvYcX14Y2W6+DnmcBsmsKG7bBpDtHeh3BmZu5hAw4MbEPObOxP1YqBeSxXe4emrT4aqbHP4U+cmgxcAQVBL0Lu+F28GJXSRkccL0mRAo5xKKaJgLJutLTvi0QrAjiOk5lf7B464a0jg+9zURHNDdWt9aWJ8WAdgTIeGPnNrdVNMF+TVxTUuUa8GJYG+7Bq11JVqBvr3GyshYPvWx5+8bzPxoUNH3BFkByBuC2WPftWeiu3tttZmIzKzx7u4UwtNDpR3AorhL4cWS1eXJmYQUWOWl7V6iYYhfhmbxNDFYsGuL33pS7L5U1fvADf+YMOrEcpAYExXNduAl03teQT0J36qAhV4a6RTVm+vaiMC/PFHGKquxmP6PDU5Y9MXw39icnro9tjM/Lye1hBvx4HM7pyz6yO1j/DcKaIWOBsK8UddmOOBuepkUC9jr6MzzvImFHj6qpXJYIhHjuJKcTLKT4hAySBzbolQpfCy+UptfALE408QAJffb9xAkmJisQgH0Csn6UMpqz3CgVLKVylC3XyCgHqT8bkVl+np8uLOxCYvsvFJGFIVxG1XBilLr6CqxpQzXBtCb2VQF5HFQmPa+Nrc0nD/fcdNC7NlosEpaIYqDy+nJzv7bbeAADQYUU2N7ebpAEISdVTXe0YeXRltKTTEuzumeBjZTFnn3TYAMhyiq9nYZMYoQjPtT8hyx0k6LAOzQXGiB5kakB0TAqXEhAkqhb8XlpWIJWgAyKDyyK9quOF5HkFCBmmAUZen8C/++19VpcuhCJi0VCxoTMXmoyxCBxoSjDbAew0PvZcgMzl5jsFlh2Gx5RI4cbhmCNoGD+9TTz3lT/otg/rUlBUi2J1Wc4CFHyn6lLnGT+xaJTuoMYRusZI9irv4Fj6i1TU/VqCjc/V+BEOWMnBq+qpFIV4KOjGX/BACrOrgSQAwwaPhkUB7Zn5Oy9Q+efoZfLkgNBSXB7Z4jYP6Ye7s5fngBggZbelgUibaYMKAcNVBQ5skHp9sxmtLYeihOmkaShfRzqRGLxOQSKSrCJJavuh4v9BWKQQopcAVngD4qDd3BGo3bqPUVJFnWgcBGrCvv/46usAhqdwmfcpdp1o8LOrmpjBE6AqlMdQxMRGoL7t86SqsDFSyQZs1D4ef+7mfnZ+hXuEPIz4nIAGO0u9///uHjx23cHHMgunUFOlbi4CtCYATotwz4BM49Af+cFCctlAbKdiLWFVI92IEQBRWYIIi0Eam/Fl9WdLQ8yfuwce707plk9mD7WhBIF7JmZUKGlnHZKPi9lQp5WvuIsEhcSQQN7AgKOVT7tTceMKpg5nw/OCD91ZW86F1sVsXS9VlizPOzM7EfeD2U+kYm0p1vErukTOm/9mfffPpZ560IIBSRgN96OjosuDjXhXqZ2qkRg1YoJEGDP+sEhiIt0hwgYBEuGELKiAGk+7urpyNyLiaKLaWQpMRhQRoKKiICQCYDjJyLyVLEkvJV3rwucEFIsVvfOMbn/3sZwkIDhI9IAwawIo7A73dr73y6is/+E5rYwMHy/Dt4a72BjN++50imj7pv/yCPbwLJvYb3P8JQxOqGaBPHpLC+fwwNKgr6ftTEZgwa2VgXUnUY8LfyoA8CjoAbqts28H5FlJ5kxfmXYXofKoya/qcNQ5saWlvcQXWbhl7Zs0h1BHMX+BbghWHethJsXoQIUDFjaVNe4Hqa6pdBry7vdJYYnht1VYVTJutACQ04ydQSuEZysJKQwzC0hN/CjUvE9No5hMjFjJJWR6fLALAnOolwsM6ByEUO3HMPCRoTL5e8doamrrkZAuGzqfpBDwDA+7sO1UDKEFBeQJaWprwp2cPpzgHNGqXIf/mF+9agd+7j/zxvsuNZ74R9WQIkZYewWmqlYvrjWrBjSzMqeLir5BSXvSP6bHBmgb6anZkPAUBH7LsmObUyaSK70qIlLUVMy+7LORx35FsRvOIR1FTdlHH9WoV/Gvrm7ur7Ozdyp2qUkVdS6GmqdTev1aoKauqr23ubuzsq2tqs8HLfQKufNqJOaS5ZsT+e4AVejg7PnH9whmXADRWbs+PX1ueHqytcGD0guPcXcGLk5q5zidTnbULFVE2ndckg0RzE/zmMLZN11ex8ho+QWnpGqA8Nmtac6dWTCvt7thAf19z/cTw7WtXLtwavLq4YJlX7HiZiaVVKksTVse2sSquqXDGeA2TzhpPxInYop4enMEp3Fa5GvP2cbLzqM5XmhZ4pZW96FGTEzTS0zEdyJEtP3sy3QmLwenscFZKXYCHdtKsuKibRRXAUgiQtiFqq9q4AkJINt3FUVElErhm/8AhMlpZXRNSy/dvixOhgawnJ2KchAM9gZIXEPU2ZAEfKbojv96ToPcmXahTEC1IUFAenVLOI8UnXb1fQQO8KlIysdFG0qOgPhMVxtOcArjZmrPZ+f/WtoqbhRpnst73wEN2GFrWLsPO1fkGJ74vzjqLxOZA5lkMAevbYc+lKTq1hXPMwGIe6DDoZgaXu1/0ombCqrt67XJfb+dzzz3LPeUsCaODwaghTQIXFyJ0nv+FU2lsZNTwZF1IAJV9iXQmtyAdMsaChjTdL+7h1e/93u8Z6Rj0rCPhGQb3z372s2wDaw7IR2BwaWfHXgQcQzXjATdw2MPFef/9J3T7PpmIGmRhjg/GesgYWZhqapdfovzxtVDmKzT4+w0fp0+frayo4R3RV+lRTOxdXG0kSv6X6O6IlNyhiiJo4xicwaFOiMrAQYOnRC/GFFV4IS+PRCxVuzEXBByAKnkBKKcUhhDRw9BDATw+YTWxetCrnaqLgoGDUXkcR4s/YQKy/LLJLCfg4EAMPjJ4hoZHjLbqzWjLrLH62tvdCQ0v8uuXvGRodMMeP2uKuKRSBJrkI4cBwHgT0a8UKROQwZTzq72tSYedcdD4fHXKJZENj3H5BebAxiJbeiJDWQWDWQYII1wV+OBPvIIJNDzIpB7KOj+UjztfvuGrgyf9oh2ZAsOImDlHH3AfJ+GgEiRLxxY5IQNzzFEFT6gXj+J+yRGB+GyPilLKqhcO8KFuPLF4mHUGEA+wqfRO4Zf+wgNk4Jhz+AGhjNvyiBkUBAsy9xU9wtCVsXfdIOITuOoCEULOD4CiPOwq8sYFXcnf+3t/Tx4A/cmI1K7Uik6YqciLX3whD+kZMxAEgw0PDWo8LCSYBGKOvmqKM86FavhFLdk7nlKzNFfGiNmZOPoKd/TXhAogUj0yK856gwC4oKkOCUaJOG58J65DFyLiGGAeVjt12HxokahqqgigP+2Qs0UKuxht+IWnOIMc+HuniJiQ+ZatT53844+cYgtCAF1wkB/Jmd1SgsKVFbVkDy5yVjc2YQiatk328EeagG+Q4eyTRSOYAwgBLNVIJdIPHQQfMEz4G+CMCnnoWUyZ0kZViHkuXTxvI4si0lmJWARV8xDrKvTepWDeEctBDtq+fb37+7ps/4A5DDudKdPdrZ2YANTWNzhq5rHHHwfK3gy0gCPP2XMXLB/rBCFPKTEWLchUtR5QNmJCC4oo9+CNm4YUyoAtqIN8lh0+6LwAVBAHVApbifTKUi5ktC4AwcFJiTQENDAhY9aolLqQ5nd2fg438Bw3sry8KJXbkhefVKRe8EX264QVNzY0NNZLsRzMj87sYzCZ05LF889/9qknw62u4Ue72FJ8yVV/V69eFvf/4EMn9ZNwoHeUxISXHlJwFTk8FM428ej6CQ4JqjaRNu00VcAr2AJIGbwgTR6jrKtnMA1dlo+wiED1+xCTiNtWkGVTnN5+4QtfYPPYaqyDhr1f5120tPMMif68iEB7Rdic2ggGKk5d56cnT504fuvKpVdf+f7VyxdL9vRw/y/OccE7ZxHOTBqMCovQqYBpAGDzKot8vz7lpiqjFykeTM4vfmVg/6WeJTqmMAyjC0s2aNpxmIaSmABgBSC8Uhzpbt7iH15d2Vpe2rDFVP0OnKfnetSS03yq2VNOB12PPY1xiypDPDbzphP8eZnDs25isDizNDM9ySlbbuNvmaO9ULZVIxpCMDnJ/cSTu3XoRU0/MQFI+BtmaEvukYxDRlm/Ic0UqR9swBaP+jPVDqHElbSkoVdNBdPEgNslOMP6SPzBrgTOLovoWpUFy+Mr4B4C8JvYFb93HyNMRDylkeBuYv4zI+A3E+clTwDUrzrQpGds/VJyJIdo8DJNyGmXfZAuutABJx9u5IVXAN8pMKcSgjkxDRjio+wIiYvV7BgJPsTUym2acXvxBh2TDgfTGDqgg0/jeFljhAyRePnGdsH/13ZM42q2KmrrmrvL61qKpdbdqvqyylJVg6squ0vNnWu7tW7WdbVPzLdqwsqMiCKhL0vL9LZmd62uuDF6/ezi9K26irjMLm4JTXSpXdehlaEalYwbKHmAoWxaokQhaeaW5JW0J2Yu4EfAqRtj1laSKebczClzgAfuv9dhekvTk+NXL6zOTk5Njc8vTFvecE6VnsBmEjyMx04FS0abJnWmgLi3WxPmq6YREz+IeZIownSOFLHqkRJtJ7HX+vKPpwowl5ilGVK489zNjOtCyAJUclpaykAavWI+6eX0AEZeTUIAli0BJsixPCLoKO0Oly5OJl0crMlUukpHI7eDmDtTcc1ci9NdEKuqc+1QxTeao6NWqQduBoucx1csnZ5dkMcnPZUnc1u6d9l0VopLlFmPhPBSfbN0uidRLdIBl5+kkEKCHkV00cqGu7RoZ/nmbnntdnnd8mbhxP0P21vo4L7NtcW5qfGK3U3hCIw8k1I7GWBSqqqz6KcBkLkqrFIYcfI0ngWvK2Hhq8I2X74VBm1fb5dsHp0wBPTeFhAMMXrI3CGDeeTQYR2vZYOmWOqPK5lhiAqYI4TZow/XuzL30Wggi463UHj22WdVoT0YzmijzWmy6YmMzoQlv7kBxcYEFRkTRR+yl0bGhumhFKD8ygYghJmnmb2UArZ56Aw5FSs+/vQTQx6GGYXd9OFgTUguLCw69d9LcFjAW3i7Y7o4PDwUephk50V7CRMrPYAREFl4ZPBVijM6858+kT66pOdsWYhYgS4GCZTkN4EEE8I5G1QpjII+yYBALzgmD1B4mMn0qxZ/hmhS4ACE4SCzBxkK5ioqjQfJoSwRGlpuQ31JKacAZYDRrQkITetRJhrOumXY0BFkqhdw5xOSteJy7u/bZ8wF2SALPVv7jh87qHdXKQ3UB4aFORdhM05BpB6KOOKyvtFG20UbrNlOWj0ZRA+SfP8IgR58QMhKksUNH+lcD37tU1EXbB3rAh85fT1/9pxESNJALR/50j13ZQQ+euVkZnCF0yhl4SNFpcqCjNUOicFJyCvoq3dP8CfdYUwcSmG+xwuGF/7CU30gsj5ZVNQIunY6c5A/+ODDLCp4KMluD1PMgvLm5tnzF0ziYZ8lBIpH3b6qPrdhzP1H/+gfqUwpUYq+whKKfmXL2kOz6SvTVmafkAdLeqJvtR5FJJieotnmcSEIWN1gzeeIbSSpC3x00nvEMFIF3sGEUagW72qJmPUUc8/kkp499FMzkxok5DmhuzrjQl9zmx/84AcGL9n8qS0I/iEJiMHEFhOXQYAJVYTACrsZfOqSQbclP6qRAB/4375xU9dDb3DfYgiYUFXcV1QgPzMBZzzYaCKjhecVwNa4t64dfOLo6u5GgoeQEOhOclWglhFvtoYn2TQHk9Tk+d73vucrmJgjP9nJwP3vMj3DswwYfuXKNSseyoIvfM2S06VLV8wf6JPMWoIOcWZy4/HHD4pB0uQIGsmUAT9v3h56/vnnv/DSS2q06IIQCgMledQI1BtvvIFqMrKBQRdGbSCjuAdi8mt12GXBQn6JRIxSbMEEvKUAXrAXKzxe5ME6F/R48Qm3cUMnqDhULWU8/fTTbHSCABwmZK2UeBK/mE+TAUesUpBBMjTU6BfHtB95iJv70NwplNn9sbFqSUW3BYZeu3qDGU27kKaFP/7YE1TixRdfhCgIDkf7wQ++F9757g4OfS2ItQpb66IJn+Q03YhVL8vsGIU6paAtD7+Oep988kmVQhtpisipn4KqbeqZOSZnqKMPCPFVToTDwfvXv/51egXCxMRkXX0jEVgztvN94EA/HwPBmbc4yS4pZBhDLEOJ+OPQjK6G0ne++fVzZ06LJhZS4wTw+urapcUFa6hql9kv+49Fm4tn5vvNf8LWg6tZjb14pMjg8ZJWdON8HBmy6SMFTLYLMUUgQrIwoslEoHi562GZ6IsLK7MzSCyr5rPnwdrd4YZI1rZ4Gmaa8Im4n4vVxIUNE2DS7VXJfr8zAXB8hw62srBdXbXV3lJjAuDW4PDG3jGI4QNbWPjNaIQpFcj7iSds7YjhyLMdvS29irUsbImjKBOlsEr1ByExDUjTHLZXfgJKGu1y94gQbEk5i9bTHbcjXASknJjTseX/8YQI0pNqDAz3oKd/8p/YG3WlJ3M+vzOufMo4Z3p99TjNDEjpbAJNCST67yorfnkcJh3FZUvjdXStVmBQDZREK31SFPenCJ+QZgT5xH5ZMUuJvWGJ6rozT7SXNHGK4YoZigEIVoI9ygbZLlRtF6s27dYumQA0bxRqrQxU1DY0t/XUtXXXtx/YKFZpxVaF4vgwFo2jJsqrLp09PzE8WF+x21JXNnL9zM7aTEsD29Ycr4ozPrcjJCAtNyuNDnrwgS3cYOLdqgXfuYd+y1CqjVBDu08c0mIzJQVzzRyL8PCR/trqigsXz51+/53iwnRxk8uWobYTJ9bGeU0RyWaGbLol5J49ppNG6KaTRVxBXUcdbcXdM3rw0PgGgcQZ9MRsxMNST+oNpfAm4i2wniwFPIc8nD0+yZBVzq/NvPGefIs2WSCciS7O22wsrQPEihS5O+lFUEFc3aBBRGBZXJsXDUl4GwHaqV1dG5eFVVRqE4TOJMdn9bJTVYqN+hl4hvTvPNBLuMdghy6PlJq66JBhq5vSjWcRyKAgkvW3QAHgXWaYi0dCUSbqjsrtTYNllscT3XgKUteSGmprRJTtFKvWdipnFjeP3nOf/YGN9aXVpTmnr7oZWpgW6QhisxCqFg5SZhHINNBmytq6mO9xu3W2t7KXINC3r8elblAy5DlS0vH/nLIi73XROltd9L/5P/610YFx4pbSo4ePKCKzUQ/tTH/E2j0CPeaEftsYp2s1RCITEwx8mMDjIxuAeGhfAfGxTxwVg7H6Dl/TEkjsV3Q+v7Vp2VwEe/3qtXMXzl+9fsXYDZoxxUSCX1JFIBs1sp4YQw2COvNkBc5dvznorneLzM2tbTSfR0/HuuYww0Xr/3TPMU0r1njkp/bQNv9Rr3GEvPKYK5E4sA560PaeZYdwbLTRW0rOkxGQzZ/K5j+xRb1kl9td5hXgeQaY9Qf3jG6Ao0vtuMREyQpGfzNAOXONGQ3AIcyiwGGQ4aBGZam+FwrGfgMBZOcQyGz8kuiBW9qiFX2d3o7jxiHhJOUTWSAzKyqvPssNJvhphUddTMR77z1+9tyntM54C74lDfldOyvnnIM1UtwHA1Ab8dhDpF7TZv9HLMJRB1V1qSJTkZVH1crKzPsgXZ+IWDLVe/oEFO5NTUxKoHX6Jf0mzmfpyIlGn+RBD8hYwf7kDVRWipy+whN8sH2VIl3V2KW49GwQygNJ6fKQhcx4Vfhff+MXmYZU39+iz6m+KQ5KwOHxxR26qwtTDKKj4+OxyX471nEEmBiYHHkPYzTLkAWGWbjwj//xP1a3ItbiguRkxIPmJfMRef6Eq8xyeoeWGf/NW9cF5+e5AQ0OCGnP/uCtIXA0fn+qXQYmHWg6M/UiGA7oBId1xdbkIkUwmBrnG2+8kacE8vT2dvcf2O/+I51eb3efwGijK+X91svfYqmIzNOz33Ps3hP339fT1R3BMOur5hqqwGXQvPillxDAGTJQYxYADlgAX19Z1oChynDUm8jpHWI8vhhFADJjEUxQ7V1oE4B4Iizn9R++macWFilfSqa2bAYbGdAis07VsfQSyS9miukaMgz0lcjUpZmh18QUYmrhyjq4v1/3S74YnidLecJgyA+Ed8rkF+5FEMhhD4nIGB+fe+SRe/HwoYdPyUMreKPLq6IJ2UMmNubhh09BiS4mCZazf1HlGFARXe++954jFTjiXnzhBQYF173FYCOGyFCdBCRJR9kc9YQiWGlpKJKoLhQhTcPWYWEgzbQ0RrhK6TcxENMAwS6lvFAPQFDnk05Nny5+AS3Bt7RFGFgwSc1X7/hPFj7ptT0gDw+NnLjvXjVq3eYk1kCwQE6tLpDZdEXA6iuvvHL9+s3+ffuV/amXXpIu8sERQLYOezEBwBmzrMTkmDIZoOEvIhOcg4cOqE4GLcufcMNtwaAaJ00mMmwkEZwkCJojpAtdwsBQZLaGUWQKbUBMVLybGGj8ZmhGCF5yJvWhg0c4n0y9eMbV++qrr1I2t7lhUWJOm1KYqb10tjS++qd/dOajD1bj1oLK2ckJjdM1htzccThYehgT/s2nw6OUYxPOnkQXEf3YQ+krivLjPT/plJg4nxIQvPebpwQxqUB+2toOGnJi7Xa3uFWsW1rbXJhzBavv+tOiZWsZkB+Q2cvhQiAR0EIuWnngQFVCWZzvY7k3/Nbba1v68ZrKguj/Um1ZZ1t9sbDu8A/mHXqy5xVSATOd06/JKP7jCUA+eZPx5C5j5yHF2BcI00YPbD3+TEQRIks3WOFx7hA4PzkBCIVLEwzaJfRdQaxTXUQAObB/dSPnzol+U/ZgcqCWHkVUlOvyNVolOfz5XySrFi1+fb3zG2Z9Bqg4xOHg1/yloT40EyIpPYjyolR1nV4lJiRqTimx+Albq4+U1pPxl8g7LJvTMJSzvVdmKMmprfkqhAwueI2QqOfOcK53ktNjbclsK+K1Kmt2iy4Oc5Fb1Xa5C57qC9Wl8urSrpscxAb13dPY0d3c0eZ4AWEuosNqam0KK3368emp0ZGqwmZrqdwegMLOfEONhYgtd3LFIk96NBzVEYrGpVlp1B504UkWNzQ2ueuNqXxvcZ6g6J0tLmJxfU3solLlwQEdQMfY6O23fvTarZtXa4o7Oi+b0yMADFvoEy9YHAi86fQzDLBNIR2IWmUmELOMzbWKXZFFTp6NEBeVqt0wjY2qVi9JBSvujNORkvygcJYzy534pN/Vh/xnqFpqepRHThNVv2kbTLzIw9pPnDflNQwxBWIyT+3trEgNOg4K5S3WXjRw0jOxqqozA2oyC4zECCsKcdsI4Bcb/cLfIKJbY9/oLTFTf6sv9UmNvnoOHDwCWy9qB8Qnf6Jdd6cLzcTq5CEPH4PO6nqwwgNtRRKMaEsgq4IEfZJTjQY4rreainJOFHE9i+tlU/Prh4/dqzZB3q6AuHLhnBvlBNnpAAQTIlaN3KHWpKBHXPyrSQhx/q8umLPGKOC8f0cgaL+6XNjaSaf7ZTHoNv/oj/5IvQ/cf1L/TH/QznNsEAdNzw8xBPLE+b8Xj37VUJsdW5bQlUV4JkERLwaUrrYOYtUH2mWBD8KxmR+Zkxx/JmkxfJcV+LNGh0eeeOpJG/DE8nDnYeOv//qv+2pc0LcjTSmuMX9CybvB4vDR4w89/Oj0XBzCgYECuU1RTBA01Q8++MiIy49qrDRtMdl3ySmK+nt7QdZgPdhOCtDzECuKwJEi3UM6urXJySky0saRpgi6Qng7O6wFOKBRfhnABITg5JGiIqsfeCinbH4NQBgOiF8ck19dagHVV0X8SoEtNUCLP+HjN2l1zA2IIKRgs3syAICFFZZqjvJbAZDZE6L/8aaamPwKWIMbo1HwD04aWWQzAaBgQBkWdSBIMLx++OH7q2tLbkOy3gByf/9+Zp7zzQT5fPDRR7nxalWc4lowiehnWP+gJUJi2plx9if+qEgeRMmALX653JgZDgkAHPIWsn2FPCnzQeAM/ZRTBB58AEeLFMjDM0/hwMRbpdi3tEtZedSCsRLxRGYdWa3ozdrqhrp6MZhGNjdSuxgmTrgQ7+C8b56YyvL62pI8hZ//zIDK7rnHcVjHsZ4i2sgIFpxCqMl8p9nQRZtlwroGV6ZHbAaEVI/mrBm+Qg4OCnr+yT/5J9ID6cUw+wAELauR6pTyi2CMwCy//mQM2XS7ur4iLFK/SHs80s3GEEamYaEmJxzTStVqhMZ9Jx9AcxaAKuRXKvNRvXcFI7/QDgEYdo/QNvGrDoyvqqg2m+/q6Lr/5MnpyRm3ATiB1Ox8YP/Bjq5OWzGaWvyYfsWuSsgHQ9xWli7AyzLOHFAp1fSVXWW9TYSilKzrMjDXtFv5Q32TrmOUNgCO1UwDCQdMBq7jR5T2/9Zbb2k/wlvlVJCMEaY4mK1NoSJaGqZptDhJD4DFTJX6U416JWaiJicAXZCHUQZ8iu6iKKLRVandCVYK8vOhyKwjE2XC8/YPX/vkk4/8SXZ9+6IBqM663uDwCJ3T4OxPePbZ5+EJH9kYIjCJQImdbUqsc7xy6fJHn3w8PTklgMjiqYO6pbPL/TpAN89cs1cj6G9qYsjCXHWIpfQgowuBiPVcvhjHqqrCHAAr4A9tmbnnsYVc0I5qv6AB2xmbViyfdKOLRvkkmxdCB8SDFX6lSzRKIQ2vwGTBm38a40E2KlCe/fsH0G69RRAWlppigD8+NAJJh0Yze+wEuz10y04yiCkOw/BWxmJ6janL7Mw8Pu/r76W3oEEDYv/23/5btjvhSoRwJoHIoAdh3BZ/y3A3tLD+9VaUihyRQ74wp8B0iQi0+eg0ywr1DS2saiLGAfslHEbh3AB+o6y0bAYwz587J5rWrODSudP/4bf+d24zORWJi41WvdPVCp1g4lXcMWS8ilMFk41IfyIiJD2QufvAXJo//cLEA3+/PDQ5xC6S4kgh55wEbmymSIlBPwKMFIzEneLads3ErJORDQZ260aoQG5NpbrY2KQWIxH2RjcmSoZdo5Ew6mHvN0ApFBNjUSMmAG5oqqm0lbPQ1V4Sr+5aa8iFnczoD8sJPE/sdEAdKypZ1eDEjM4HAHlzqXRgmTRHYkYjcwNL8kvOAIvaymh0sdH4DiuSWRbLocqysuX3BPCwoG0bTTdPJV4pgrRcMEhID7bkJ/PTe5SNfRR4h9vxl/fgQhyphCgZ9n6lKJXBgiw9QGX+b4SBKBFi6pKsT9ZdcwRTHzxHZrD3zoir6SUOBAD4+6Q0yHzFfi1jROE03qRm6pQfB3qarwWvQcr88WvHsOIa9fbmhgEofZWPnVq5tlVwFUChqr6qtqlQVUcZlreKG5UtrX0D+w4eaOnodISQPa3FckekV3/60Znp8fHi1lpHU/Wlc+/Ulq+Lw3d7XTpkM9yWid4wnTU6NiurDs6YhV4YygBbnmANx1cTgBnhrZNTIkQO9u/rt4tpoK++zs7m5etXL5w79+H05KjFqJaG+vX5BVYSsIl6hNNnM9G41i3Ma6Z4DDoxNISCOR1pdZkQyAdL1Stdlw8TPUBib8gYW4JHcY1vXHLHBtK04S9DyhMS95J5CEIu4lcpl/hE2Z1oTYyxULoQC6vIGkWAFeoTM7Q0T6DfVgFiW7YdzpTU9WQEXVZhHSCu+HO/TX0zu8MEQL8qhD44ZG93WnDAN/0kEiAGE2MEiWcqpPiUxyOnAPnTI48MBK0gJrMldFmURwpWIAdsKNh+gDnwpBUZIJjepcigoBFBpcrqZun4rl3A6zbZl9lrvbReduLkQ6HFzgwu375w5tOt1UVHLkXXYLq/FsG03ANGYfZDYxOjRRvcaQ5/YruzPh955KH9/e5XCbvKJwa0ei2UZP8Ic/yxxx7T5TLEObnmZ+NoKV0x/O2WRYgxwhSpo6vdSGfgQBSSQdA5G7n8GdxLoUHMkswHI8Ia9wbvZK24/BDorEXy/f2MURB++7d/24lAqjj7yacgvPDZz90eduZKqaevm4pyWSoOE1X/wR/8AcPMCz2xLGBpwlCiLqO3Wx/HJmI7LJnzVXkmJ6asNhjZoUQHQzvjUgt2YxzOQ1dCyVL/A5+sXZgPH/C9RJlk6/vqTx52qcgkpoCeQkKyvOQk96yWhE5e4MtGrD6pzq+hLXODaAgXTI8X+WFlBFxcmDe+G4vlRFFWIejJoxaZZZPZC1RVV9/QyGAAE5Kqk8fyNX4aAFXnCXysLe9NUIsdne06MA5fHMswBQxhrPAQEPbv64cYA4DFKPHtt9/SKTgDiu8UJiZUIccUqOM4B3MhvUosNFXFUj9ocIOqPEmjYo7kJZibfL4y+BNR2JhzLq8uMXHjEK80BwsQYtTSlgkeBi/UHgPdPYBef6IO20DzDpTaiQlAD4MEsRgCuAzyq10twnpc3aCX4CDK14FZ7XThV31dLJhKMTzlC8Jim4zR6F/8d7/EJrN5nPzEFQAkehVazCDvOg6Wimr0qsTQ2t6+uLJVqm+0lR6idFc7R7+c4Y+MfQZ89oJfy/723/5VHGcw9fXsI2BAGC46ESRRbp/ohxoRnMnwiylogdOSWOb5CCkDFm15AuBcc1rCN6WD0PN6pwTUkWOJDac44NA2jfGuSYMGMU9iYg1MVBdFluOoIrTwuH/00ScpTGhOLXECYLqIDhNE44PMytTTOJ3CxViUgwcaBFQr61elRKLN4EDuJhSZnBjjP3R0gE+UEv6Q8ZAfm4zYGHP4AHkPIKaPhw4fZZfrjBTRJojTxk1B3sOjI/BRxPqQTyB4COLg/oOYhtUIxFifwEc4aL560ah89UldE5Njv/PvfhunJZoA2KJqFiTcTXU93X04ZjuvVoR8HRCwDF9BFOLgufzldKSUhoFGhLR1xnSZiulr9B7wT4zq6+7swWQ8iYjGdKcbhkCAOr799tu6LfU+9dRTpIb5qBM/BzcAvcMKfO/yIzYnSkcR6igAlsLdS1YhkOXBWPLVaBHCuoWeDD7l9RYzN9rlE5Fl6fuqaj07JKVkNKgffkIYYmb8LHKqm671nX3ttddoO04C+PnPvwQZm+RYjWQR22N2C76ePXf6xIl7oHn6zCcWwxBruwoGJpsZu4q4ZAxG+/JKuDTuzq41k7/+1/865IO01CPTQAhLkQctV65chqGlSbUQDUoJy6MKQ8J3vvOd5557zpBDuAz66dm5hsbW4dExW8eIzNClj3jm2afUaPUTe+m1iibGRzU66vFb/8f/NjN8vcGx+iw9t2zG8QV8AqHSMQEQ0x2hApqhc9m5c9iOm/SZGU/NyAXzPd79Yh0ZYY4nJ0I+DA+X+KaYH/nDbU3QyRYBXIockSsdXwLC6kZhYmF7Zs7RkW4fx85yPiU1iAjj74aIw2rh5jEqhS9fcORG2uhp3EnX5brzlifT1/WltfHREdprAmDu0NFau7uzXF62rZMGKro6j82RbNy0DRfyzGO06LHjJ979X2LYzZGS4vplQyUqoniYwnvWsPcgUOsLW5wXGHf3TPk8AaB1tNpYqqx3D3bCpK66NtY+kqkNtFLBozBqYsLgBVgP+PJ4iSlPSvd795FNBn96yb9e8juLMBf363ugn8J78lRfKTUafP161+hEOeF7GAphZ4Z0FDRnUrsGYoyTE/KU36+PYU6b5dbE/FOHEJZl2Mcxf8jkJIpikQUo3yprq5nDPgsVSoOV+ymTtyBFpzgmdGO7fMt8oKKmoqZUqG5a2KnZrqxzVWW962K6etwhUFPfwvvx1pvvCM4ubq/t62o5f+ZHDbV22y6m7bf210YHpcF6kBBE3XFGUk5oaPXQ864RaRfULFydq2u2/B5zD0tfnxPtKgtbM5Mj166eGx68YtRmPfKqLy+syhwzrPRkWzv46Rz6FMYT7Eo7DlOPFTNTQR3BuzBogyHpCSPJiyLmQdJh69fQxHIwAVAWYtCTDcCAmbgXEk3y9SeQHjJ3jaVENYXWpe/0TUG4KRjaHfniT9a271Zw7KCnfaRgrSz2LxYrLQtYBLCfg3EjflBUhSlNOPvKRPmGDzgBDNXKY1Bo794pRhFvgM8QRpGccXxTCumkLRLhkDgTLk/dl3eaIyekvPPi1dU3WGPQnzP4dE13wQLlMRzo64DCDaWcAVTc2Vxyf9ba7sp2cX2n8oGHH40jg2PxY/XqxfO7GyuxzR6m5WVxQ0JVOSc8z7a7fm3rUqfTGuDq3kZX3IiK7Gi3vzF6JcE/RnPm1AfvvmcsY2erUYP1OE1YD8yDms0bxHK6ZkOWArGunaUDAj8anzF6Eai3N6zrb5GcdCxc10gmIo4KL2I0LY3qnCenp/v692GF4dUAyhFpsfe5p55W0GrD/MKs/QcimsxGRCYb6eTUdbNe2BtGE6MVyMQBwzAwyqvdKkanHI7pT2YDlvJpEhyL33gkQBQzyUKrxF4tRUFf8VaKX4QA6MEEf2Ym3C3iK8iqAxyN2UaXGYRsGIApD1AKpoYfBo8UD6oDl3Q0Iq7idgg0rTAgNqsWxCYnxuXBQ2D9KScGAuVFevAwIekl10v1keBPGaR4tyNDpfUR6xWDlIfqox2vTEnc/GZobm9tU4RXjsS1NJ8UcRDfk48/QRWJRfwPc4h7nmKYs1joUq9geLXMLy7xOIvSjlpKjlJtjSWgHN8bp1qtZLT9KuKRzWP4pj84lrHCCoi5wU8TZ4YD64kJRHqU1TLlRDsW2XaQuUH69g/DEEMUZ5AY98kit0qlKCdhgeE3Ho2uNlgtczS3VMo7sB64qQKrWbZJE+OMoMK/+Z//c1mBFjc8OhrCAA5cRjAZ28hIq5jvEEKPBrC+VbQrl3WlGjwFgtkEIbUjEnkS2cqnTp1Sn0bS3NiS8UMY6wcomTM2tARYCAUehYKW393dOTM3bYOOIpgYo/Gd4SpZV1uL8xEvhSTQeLZUurgcGyBkho/M8AcTfO/S/YlUXIMMM0sTdU94ZxzaaCQwDgc7nLUFpVdeeQ0aE+NTfmm1FDBdmV5TAjk2tTBwNUWJRIuPMkCYJpGxtgFhAEeGb9fY17izRdWwC87yyM/U805gyIQ8Rmnh5nCaEq8MEuHp08ChQ7LtHzigNVoxpNxjorwnJ31NJpP409362uh9ZGMFMmq1pUTCohT0wgrh2AJPfLCWIs57aIhxOCjDgQMHVS0dPoxaedz4hgQFkcBq1FRcBMYmMR+gJQYMwL0DOLe4hGkGFmaoKSIuSceH8dEJRyZ7wX9gTa60sVwddpG4/EjGfAi3dXZYYlYvNLBLFfpN9Sri9ABzJKfbkhFkcEApOXWLUiBJr5QiRwxXisUMN3GQ6sJYMwH4wEH3SpmJgxJCG+vgFpinXzm9gOwXHzxIVosIfr58LwZi3DAz1R0wzXXydjx/85vfHLo98rf+1t+RwtMMuE0C7kywQWjw9k1dHynkCQCLCC28JGSks9BMeJ68618s3b766qu//Mu/jF6PIh6aCRlyRAUOKHv27BloP/3009Bg/fuqKeEVNbBnHe0//dM/TXPwQSm7Lam/+x81K9z+xje+5qt2g+r1tRXwWSL4b0lKW/7Wt771xve/3dVY7eRClqgjyKpSGEkc/Bk7gLMpGRH3unTGe1jDbOKt9bsTgLusgxVNi3zpgYzHVxY/j2zE9iRzIeI9kgXjiwub/CbTN/yj0uHodL/RWbdHsaF2q6p5KLQ7J4XvVAjk3wzDWrcY0RTlOu34vxQOdFiFPR+WN9ewEIZ68SpLs4vCKF1tLgTIkm9LY6VVd2fQlFwlGv75ZF2lCYBdm3SJSqT4IsqQjLUUaxQkBM7RFyfrOvEkGVKJGxLTNCZ8t/EwlEWJBT5pqoMojyx+cYA66es9mV0iJ1XlxJYUvpGtwxgsffVkcw1FAeGOckqHHEIDnTt6m9/V7iVn9ptfsM5woJSvSbtDzzO3cSAwzuEgTMFckcrTMkgatqSFxPNjg63GwvuGColKosgngzJneBIHOzg6NArDHtNmvSNW/qA5wVf9qqCbwq57sngsbMuwAmJmYPOqCYVQDo5y59ovr3FoM2bqijXN2zWtK7plNqxjdRz3EpeIdbhd8PbwhM7Mps/eruZ33/punTNjV2fcXa3jFAinc9NLUHg45A5ZX4R0aGtHWRY6h+gkxXQap3Z2+3p6Thw72t3ZubO+Mjcz/uH7b22tL1QW1+uq7WIGY1nwW6m+sL4lSp4XP4SMWWlrjEWfYFOakOK1ZQDHAIXZoScXHeYLd5I2q3b4xM6DZND4E//9pyxY+dcf3qGK+bLJHxK7s6DhxSNnfrzz50XOOII2C5ESBATCMpyRUDS9mHKHNOiHuRHfc+CD8UqLQWKSsktF4zBT02aAKpy3DqSVVcfuC5hjkXHWL2gAqTH3wCrS+xkNpWCsHriqpoQif0qHv/zaNWyzOPwZ3E7DpfzasjbDVX8XuCJaIp3R4XvXiekz1ejxp4WObVfaOQFgq9wEYGWzePKhUyYAZitry7NDN6+7ItwEwHysui5sMmyxttuZYoBxwp44zHG7E5/okSOHzAF0ZRqleHHNDtq6X0MJ698wzf7hE9XlqjccN0tLYREuLPMNOW/baC4Kn/luH+cjj57SnUIbo/TkKPUnaHD2qw9Hjq8x+gg6L0bsB5+xM+AtoZtGHz1+rL6p0VKtHahkyDzYXt/48MMPTTzuP3nCFq7TZz/NAR4gC0YSiY3tuEoEajRoqgVjmQdLeFOoGRu3K/QmlU3L1M3Z7eI0CKXk94gepvykhqkNpUbFJWaEqQ08/UrJigeyd7/QljJ4ewhDPKF1SVjyo05bI0SPWvwJghelqATyvZM7OIqoV4acLgVYf1IGZcE3l8vKI5tH2UxddihrsBKVwmc9DCbM8QLcCWHygufVcVJ/1dzMFGCKa/id7W2kRpeUFgCBXKMnq0DmMN52dsgIuyykHD967OWXX3Y2CSZDjDU/MT2BFooqM3YhxF5qqHJaa0T6Eu92nVvnoPBmWPoy+dWrdhCUgRWqqRYBScF5vJIof50zz5obnUMESX/qbVGUOyhn/+OY4mp0yCCSvfu1mRuqXuTURgAETXVUTk4v/gTNr0r1d50dbaJ5IYnhqpBfcVV4FGcn0GSfAM9SK/zss30ml6xbqTDWEix/4L7JG1Vzxoj2ro9i+piq8haMT8xxHqBZsLJIFgJUyjybWmi6dJRV9Pzzz3NnOnKefSbwgx7zaJouAw5jOGEWMSOYHak08cASGcxEgXpmwJqihpoVwiYf9KAWzZRgdGg4Q0CwrdnSyZ9a19RW6YrRiWxMB5CYVQQxFYEgv0esGGtMXarWX2OcjkNgq8Bv3kZTPQYTtHUEAr+IQ2fll2azX1mZgEODOMkDsuCArBYK5/fmjWsM7hP3HpdT7ZQA0yGQjnahrNHLIwr3KDSGNzQ0OtFIdwFtid19vSRkWwIOYZSJZq7I8WbJARdSXJiNpVX1YqAHReqi1iSKz9LBgS22QNVUampifG01igPlUbuOTAfntmbFrYFgpnQsohm0c3d7nTTVrhbiNlHBTLri8i+1WCdLE+W4uwQD6QnpwMELMj2nHoroFB2xUrQWT2Alp63G1Ann2fKc9EZTAU68zvgDZ7XjhicrK8Qbm5zoGMM5sx4cyHhkwHbVAauDUgobAYe57psWwbO9M67OBfPLX/6y+WfOACWPujAQYkAB4jH0SLe2iV30h6Pl+vWrqgPZI7Bev2AnOk3mtWKUd7Z3JW/QgiVFfmHiHp8cF0zMwcPvhDl8aJZuYtLiWsGWVv0+EkjEMIN8krI0YcFN2yErhyV842tfB1YeFEHepesaGsveRIgQv/vd7/rqHXWQMQH4u3/37+I86aACNxqbuRlmnZOLNNFBsFWXwy6UDdVdWRXd8elHHx4/dgRR//Af/sPWBo1kbXp8urlBpEUzPC2XOkHI19TExDSzRXRhYXhTQEYGW8aomTHEJQ+FyS9w9uKTJymXpU1h3jpcA084b/JQ5KuceTIQtpKdiUzvXadIrc4t7CysWvgSRcCKYUYw/YEwcRWoneAyjFk8ydRHGsJdCyDCORYorDOYoSYfJtYJNZxx8Uit2YK9v5tN9eU73IeOHtoUBBJ7i/VjpjzwzEZ8uK5js0d4ZMNVnd6hGVMFBgWDztIH69jqhzkHgwxCnDvhesVamxIYGNEA/WMMCO8pIOyp5PSDOh0jBecVgwlzyiZRXUtz+pOIa0KLYcZXQOSMmu88OWfmc7bvcBAOe7/sURIxL0h/q/MnvsFZeLeN1HGKk5mPnMLzYMbXGKFiQneM7wYdHGYeltul05ArSjYlJEO+gTisYisH1ke8xJ2ZgEFOoGM0VYUdaM2wwZCULaKq4s5NHHeePy+XTaUmP1Xljo4wcnLl2i9hOkbCmUCSpS3M67XN3RUH0gv1xIbqprrmzlJz89pu+fTS2qzI5EJ1oaJUiLjl6vra6oP7u9996wfku7u1jET7PHkeMFODRVVq1rHApaOAj7HfJ/2JX+/wY/gJLDceHT18uK66amRw8OrFc+NjQxaOijsbsXxUR+8JdAWz2HErmybDEe0Twk5HnNJG+LMtLJgRS8TV2ukRm4n5oWMLu/wp1VpHXCwt3E4/sLfCJvYMYzHE4A3XdEac1meJQmlWBDwB9w7npJkyxidPTl9bie156vUnZcQBRegmWARH0FBNAo05gJKmHybcErWXdFtwICL6zU7acO46X8dRYPYzhE7aFlAjho/+Y50OQdeKaJh4jOwW39iNdNlsy693aqAFQEADhCcRYDs5ZRtFHwUTcJCnYzd2m6LYA0Bn9LpgIkGHnAQXW6TkJxdGgkqlIxlvXfbMR7ZbUbe+UyFC7L4HH41IOgcDL8+Pj9yuKthXYPwq45VXSgOqr6m0Xg9/nTPj4tiRQ48/cerQwAHb4fS3y4vzquNx8smmD7LQ56tLPIEhzK4/qEJMd20/GyQd+U/wRhZuUBGG5Eh9hUsjoVRfa7ekVuOQTeOsdjQ7N93bs+/Q4QGe4/c/eNdFkATNBkA15tiqe/nqlf0DA3w09z9wH2erUCVjsc7ja3/4RwMHDjCQjP5WGF548cW7tr4hVT/p9obbN2+ZNljlMI5IxGEsnZ1bfOOtD9Y2tq0diDISdivIFgnYzl1vvDbiMFdEOxMKwolgbiYG3OzAxX/SYYD5RNa4B0+sw5DMTP2DM+uj4SVhZbnIIJs85H5X6DI4hNEIGK4C57e6JYdXV9dn95q5SmyZXfNu5c20MvTbIkxNjcGdUPylashkaPCBFY0KfU6a4E/VWXtENVTVyxZnrGtAulkNxntfTy+dZGwkc6hJHurLl6+z4waiWh7qao5E0Ei4794ThkuxVey9gf37WXccbRCIQKeN9emJ6ZuDgyxAVYRj0d0ZjU0CVc1dzewQy0ER3mVDTPSo6XIxcUfGsN0dwy4vJ4NeIet1Vn5EMbB29APi68wmRN5TLZCjn03uCfWaqc/OzTg7zbuoKeLwSQ0IIW4i84JFXpCszSDBi0+4hCfGIDDjGpM49GXLGgIc4OmMfgYDtcJVOT06XVUDhbdyFv7y5w/gtQP4fcMFCv3Qg4+I/4HYyPC4pu1UqfBilMfYOT+/zAY0eAOqcZofT89M2Veu5zedco02IBT05AP3/czP/EzuCK5dvqQ50bzcBWhvOdIuy5vA6CsNYGhC0ek/aoFPqZY7ObYXo0qUHg1AqnkmLhi9UsaIEVKdHdkd3V3WDHxloIKGdzI77AmFpz8+rRlghNpN9F0KfebcacW7e3sZoyYAeCcbwZhC2LoqBUyYE4NNvKwxO1zv4s+ahI/G4yskebs1YNW9+OKLEJPuSLKVhVm/GEJZoQGf6CV3Np3CoQ9Syp9oJDwKr6yLUawC4AZh68ahqt4PP/yYmdjd0yc//wUuWXZnzuKe2DPF8ZPVm7UTH/RQ9B7mKX/cDOAFV+GZbnTVNccsFvJYqiL5tQdTZCsVXuiHhpE80FPlVuPTpmGRMB1tHYCIgA+VmgtPfMSTxXymC12KYD5y8BZncGB4+LZDezxmce5og5LFEBzu6+uhUeZLL7/8LXOUv/Czf+n9d9515JEN0043Y7kSjUFKXWhB2vrKqr079hOIONbSnESGCTiGqMwoMG0VxeE88eA+xxMIkBdTWJ9LP3HDGiuDG9qZRRjohfRhgmokZGnS5FxcER0XRkXDSC0ETOaFzFgt0eM2qqtXr7Ae1Pfu22+3d7UbjQQ6Hx6wTWLIcvvY5ITd/W0dXRq3A1wZmADevj2I7V948fMQNtQ5iULLtNr44Xvvuw0Ax6wPwOrNH70l7OrYPfeqjhNIDwVn01EK+dWvfpU3yETdu9mUSTsFvnLpEu8ZKv79H/6h/qulrSMTSyIH+vusF96+dcORFzaA/vf/3X/LWGssVa/NTfO/BiE7ESjJwwsgMrWC3CSxxVdow0F6WHx3/MMyKIJL9AonZfDJnwlaZKPAduwxtfXFu+Zo7IsyMf1hpjP1lpl44em16bB6YWnVAYJLi6z/sLcTqDBxWOS0FsyswKqL544LPDmonWpczVVZkaIXLCwsrwp2Ko0MDRENe7++qlBbXWb7ZuwAthoXBjqcARETyRYPYwVdAjngFmb03hOnhXpVm9lAHKHIkg7jP/YaRJiH3BDkRuXjNd8Bh6lUXiRHrn3w0/gVKxiAICcz07sXjMFkj3T45J4X03J14TaOFYMw6faeOzMnNQMIA/8LvmztMslNSuDADJUSvzgbuIU1nX59jXuV4ZyXUP16N0hF1x/p/gs43PrhM3Z4Tyyw7EWhxEAMXHL5x2/INqwBkk9qYhYRdhvM6QgdyGqDLkIhNXwIhpt2xMwqtKW2rhG4gEoARjm6E8GnsWeJpuWdIXH0m9UhJmpMHRV0XUBtobZxo7xudbd6q7xmu6JueX0nTkSuqe3t7jh/5qOK4lZjfe3y0hzrlUDxVnWcxVpZjHFl4Q1ZXVvhjkEOJ5QJTGCwvdrRVt/f09XW3sKTcvnihaGbNxjGDc5521ozbxCn5sihGr7s4ClHFJmHqoRqx3p1LPx60Ilky/ahijEw75lNPsWGZO2GoLEgXOxWBsTd6FM5vxkIsSeeCviNaVvamJT4lg2nxEG8SL5MNao3wQ+GYxf+aB+xBnZnvkhnCR3PLYOwgxOS3OYxI/X4Mxgfih1ze9jQ7bhCj20NSEQ3FeAopxaqn6+sa1jZ3J1bingPnMRYXV9dQxxCrUuxIlgjbKGmyvknwmQ0K2MB+1X/I5s8xgI9M1kQrqENMTQEHOmewH9LCGgTqxpaiRxIxSOnfpupakjSqyNZohoXFue2Nle6e3qXtysWV3dGppdOPf7M2qp925Xsr5uXL7Q11u1sG7shErfD4oOzxVzsdf7saafrPP/cUw8/ePLy+bOPPX6qu7PDQc8uOtQDG1vHJ8dMAESLGsJgjrEmHoM3b8GK8WR5WZPAhBBEOqoFwu4HcOkZdTIRZAVa8hWywErR3WnuIGCVK7dIQaCPe+L5rJnCeH7t5g1w/uJf/IsicZODtVHTmZtdEJjEfjBUmXgYIxhOdgBzYM2zq5aXDXAT01O0zPm4n5w+o6dqam4BTRV4RX34g67dvDm3uCKk0ojDfenUcv1S5idVNKzcHTQN0AZ91NmBYDEEh/1JNJisXljyYKIRnvIo64UckRlOjXTyL1ESrpzO3cJtXjRIypxbX/RpppOmnwYALd1BwJRQCJcmzt2wveXMexMYv/ouOqNH0hcxWxn58ikOMm1USxhF7s+Zi+MxAJcCGTqmJ4aAqYVOQLOw/qQxEHpzS5N+IUSws9nX12seJZLn/IWz3EhCmutLcc4peoECWeA3up577jlUcBTyrLGIBAtAAEPUNT4+ofY4k6e66oEHHjLgYt3gUMTW1tTyS0RcrmzuBRNDiDOLDgk1LVtZRbV9UKZqHa1t9lsbHUIWW9uuqEOnTep6FNwwuyAg1SElU6o3QCD9MSnVY0A1WmxZGcSYBFY24a+3IRRbeXFea+byQSM45nOkTIGx0byE/RP793hhNjYHDh3GtA/e/+jajeuKm3iHMlSbhIQ3XNmKCFCtKnzpWTcArKrJ7gfdTYghtT238TqeaNcBZ1swW6+tsYRUMto1tcR5MrAPR+PmjggHuGoqhgfpTn9iyrO6/tpf/3ntXHRQV3sbNQhvbtHMZoWwmZK3Bm+YK7tkzhxaipyGAP4wYA3s5s1UnIELmXYM7egw20Z/rDyZF7pLyumK6TABZa7fuIFBpkwUQrQGdyy1Nk8S0cJotu5DXWBIU2mGhU66+Pqbr7sEkhfcdhnADx05PD4+SZP0Pg2NzSoCHxOUIhUzH+zDO8ggjdJoeGaN+hGJlInAtOq/+lf/KgNaxzR6+yYfJiC6PkWUJWyBOKDhjz9JH59DeIz42ZBfrF43NGl+qvNr3sX4+/jjTxl5xUKQ42IpWtjcZCrf8MSTj+u2kAzJPJ1VCw0AGSa0k9Sl+IpklbZw6qcjOM3u/Imr0tXnXTYTAHomA11UdnDo1gMPnphdmOOJeeeddwwXGsCnn5xRHec3vQ+fYszLYws8cmJG67TmdAkFkp3IJnHw1g3NrLOt9amnnhofG/mVX/mVd955G7eZaA6fvnrtxmc+8xl5sRH+JGvGDCVo7OvtwUnMAXN9NRagmYwnHniAyWxjOq0lVlMggfjYrgjGLi+tGnsghny6gWoCzZ2afg11Hha/nBo5BVAKByAvv8ywpZb4hkAIeAEEAnnQMi/yjm/4A47f7o728bFhowxo8HFqxN/8m3+Tcwhk2Mr87W9/m11OMbz7pWYxi65yhldMSrs7u0xOzI5IWfdhYnnffffqWUxW5f/a17528PCRvgMDbR2dtEvtP/dzP6de5Lzxxhv2fllV8w4CJP2JQG40S4///J//84dPnXrokUdMMmHuZh9OfRbytSuXRaT29XR8/Q//4P133+GudUJ4pR49rLp4jJcwUbVf47pfWoFM6X69S+Hozen5V2J+sDS/yOk95w8z2PY8bSIODzImmKJvga/dhcuETb1ri3CFLX32/S7G9ji+ee6fPe93rgIoDwHdqerP/av9GOx4nyOAua7k3GPg+f8mRoY3N1YKuprKshL/etmWEQGMyir20p6hD74n6EnLMn6TybTHAQOShxz/XH3pD/jQjZzu/W4GSxBiKjBSIjT84qqvkM880VgkRkVpXZilmEboYFf+lH4T25P9r2wgEZt94wnzbmddWempiH/Clvbo5aWE2c/RmzCKqUlq1FEwQj/kS1kRmWz6gChL2OBhxBAae6KqoGdj2kqMfkl/Zg2F/JJ8Y+rkhRfNd2Wj4lgXiq4GLKVyM/QiUYrvd1DNFq2VE9beXvxAmjjsnWBjNpSwCdQVz1YtEegr40QdewMK1Su71evldeX1bVWNvE6V9nuYSXAxXL54Th/bWMe/tVSVxBIGLnqC96z1cjMtHWZ4jKpY9RajthyMIb60o72pvUlUoe3E4xOjIwvzs4x0ewx5cDmBjCzWPyx60d50CV6ARlcWVoDem/nEFM6fwYww9YO6/Iky2AdL1RXxJAJljD+12VzEL3pB8ATheJwg+/XIGYl3HhAyfOmpxG6lu+rSzCp/CqkkgbLaIiUtCBADIHpFjxWABDYmAMEl0y91KmOsKbeUFOt1ZKuWWM+padgo1i6sOv+aX4wvPJwsekt0Gspjhy/vMvMuLVCwdVoam2amplvCjxuuWSMa/ccNj95Viv5KPwkZI5Q8jFqbEbjMVWfEyT0zHnqM+EYlna2uWCeWzVOLE7097czDoYmFjbKqyYWtBx95QnNjY63Ozdy4eqFHqF9hx8nlJvU6WMbN+NSkPqemquKnvvSltdXFlYX5I4cO7Ovrcp8PFur5oDSdTt7UP/PLQti6q5HImOIcYWjLpe+1RGus4VeWjelvmPaJWc/K7OrtMu0cnRjXhTH1MEGj7GrvuDV0e215xe66/t6+bPDpo8am1DZr0AHHxINR66xJY40/pVtwRqxRD/IGMtG/6YzR7aGhYbbWCs+yQ8OK5Y6qO3LkmIFvNR3w/+EHH1NgR7vZsFGqb+Igw1tMRhqehyhjxb4LabJZsScv3kkDkzHEYrUFEAaGiYcapXuwHf+Jz7gTs4skLxiSmssVsoDIVLpHX0LT7IfFEPoQqpomOjKol7kIAY88oXC5t0pX5KIxK4aC4CinxYn5j4lCWrUwq6GxSMATbULxrDbSkeZPusizPj/j2oElDmEjqY1C5vbU2UwMfC2eN1XfksKURCyHgySF9S+xN6DHsIEDU+2NN97AGRWRLA2HAFRppjaAdVJwj2sFqtgimyYCN9ds+ZPeSsEWNXqwkWVCf2CIqEw+iUNejcACrhSlmpqd0b2G/Z56zkx1TBTSAw4LgRUq5NUncGBuzwFkoGEzoQmG8AUkInB2etIKh5LYrAo9trBprWbgwJFr16737zvAPnr3/fcmJ6b1mU7HtAVN60BCZU0VhyzbsrMn4lkqnGVuAaWnx5m4VcqbvKJBq+eNj4iShjYjzcz0AtLYtHoB/oDtWNPbrN7gO3SpU9z3IRaKXSIxyY8GVCa7udIMgT87+ZBiyNGUXDKlgSByZGTs6pXrb7z+I/0A/+499xzjVyabzgM9fvlBu7p7sUl/hZXnL13EcUf5Jvuv2cHnRj6K4nQAexU0vzPnLl6+cslBjb3d3fhYWyodv/cE9QPFUQ+ehaXlH73zrqmO1iLMqMsZO56mNoIZHBxiOYn+xyzHImRbUBeNFwqaopAi4ZEuGYvHoD3eOci5ZmFFUTzasBApw9KxQwd1pNK1ej08PV5ft/lhhjjLCrN46yEwv8g0LzIpMqbSNxnk96uPYF8+/viTWqaQRX8acO2mtaf2w48+QqYZNTPXQoolCILM6ohqtHhA8NWvluzRzxo5kAAlAuJ+Vq+ulvZjr44jK66XPC/E7YNHDl06f/HB+x/wruHZUDXiLPydgsNnTM/AhDyGjI3NOdGM69rtmQMH94Ms5FGvcd+Je774xS+ODQ8pC73f+I3fEMdy+vSZUw8/JI8ZxeVr1/0+9uRTsHIo0/TE5CeffvTt735Hf0Ax7rvvBA7rf2N/Z20dPE17DxzoT2yOlX01Q0AXgDRLsZRY80MaffAiPxw8XBqEotfDH89v/dZvPfPMMxzqKPXgiSI40N3VqaCHxSAbCBgOMu0gBekme7TaO2g7m3G4qnVkhFB4vQlNoDBYh1gGvb5DBnR5MIpJBlRLTXi2CMXufqBAjg0MyzGfIQs5oQEalBQHTYMX8PMLv/ALpq+6Zv5+n2L6mi4DRrs8uAGU3Sy/+9Xf4dU7cuRoQ30TNCxTHtjXb2jRv+tgRVLduH7th2+8zgASPy9ol2OD+lEPcHTmqmYeoSLbwqrQnKEkj08eeWPK4GEnpA7dJ4+F+EiMfjwCoyMOJYxI5gHOhl3DmEmmSbg8I46oyHqzY9b+S8vTxn6BKaKeGPNhwyRTNcDCKsza6Ejjv//3A3PV8BFwcnCGurnXul8ueDczPMHICKtAD5gs4RhRPHpGn4UAIZbtlvpeDJElBi1rC3598iszznsYZeHWSi3XN+mJ9KA3dlX++SfqSIySDE5iyx4cLA+nq2EpPXKFUZKswViRSGSrN7Eh9xJmO2Fqpxqy3RcwPVKkpxIhgiibEPZveo8JgHTZApkwQMOczWlQShD8hnM71q7jCUx083EXsv2hhpQkFQwHWGNheEWHtm3ks2QRzm/b3rxrklTRj5yJmWziYBHAoQd788SERppCEAZMeAty5j1eihdLrvNitWUb9FQEx20ZJOOtEvNcLJrWx3W4QmHc9RYc5gyLUBm1h9ktHlLASzLIVdDcVL/FU722KmC/pbmuzYlqTXWOjhkfEbU3xOCLyUNVpRBjrFReHHTEx9vRcecyY6NsbM27M5dTlwdXE0NijweWKRho3yGcMkQ74elOyzvSfU0aFOa3P3W2fj3S8ydODmzOKUmgMZyDLH9+VOolVR6152YBXBYtQKGQPqf+0azQXgA8SUhFRblsLDfsKYJ/wIipeiYnqbM0aFpcty0/Wg5PeZGDMM40MyppKyliW/Uw5cmqi7N6DCI6Ct0stTBQ6j9Vp2vVC+mE7yLMQsqCRrvyitAledQnsxT6o5P0AiZrDB2Kg6Z71G2COesatvGp2iZ+k+z3Cbtwk4WRjj1x8Z9mZcuTwZ07H16ciQJfTB5GR6fZsDYAxPC9s63fNj6GWynd5BUSDC2tiAUTy0/mDekUy/seOGH40GKVgiSU4H/1xnV70HmaLVzPzi3of+h6c1u7X03UPOnM+QvnL1wQOCSCt3/fPuxlDPnqAk1LlV6camTXsDFdQI4px8TUJD7E9pWGxs7uuO7dSPov/+W/PHj4kMvn2cAYaCxyVboJJY+qgYABeeHSlbGx8RvXb7EI9UrwhCFm+tNQ5YVSGV+kwxljcc+QZ7SVKKf5wPhZXi0GXp1BGTKKGMs0B8XlV9zgoqzawTSOlBqiIAGFDZoeDr/ImRpC6gS0sOhFVUoltAiCzrJWEFezmsWv9crwyFgc1sPEI3or3YTNZb2n8NkfR2l9VRZYUo4/d8QPVlq0cVC7q+6NxRzQatGNIEGptAgQHbiCSHCaL/a6qVNwwuV3Lkv3CHvOdtqV3Wsd7V38zhAmXxCInr7RVcNVWP9acYq6xpa1jS2+JjqJmbQFJ8FHOMSwC5LQUCneoB3CskEYKFyibxLBp8/sgRX7lZMXI/OEt9qldhCAhnN77k4kKKJSEAbN/k1zGwBRqhdes+HWWm7Ztn0OVtaK1TXibrQ+c3HTKCTwgxvQm5rruTiwjfKPxyFR8109vff0HadmenxNgM5PT82GmB44XNbb24QeB5Y7GvKDD2719cWyi+OfWJ/GPlEey0vRWUvRKzgOCbX4hX6J1ACpAGm9DCA0w5UBxzxNByu12p3NxOfBJQzKMDCw31xWKzV/BYCDwM7mixcvW9HQPSKAk4AmOT/epQkdbSycVsyyGIivWjgzC08312Oai1/02AUNYspv3bgp9vrQwEFoQM/SgqkC2ehS4lCwgpsnq8eGxpbXl28PDVHB6dl5ODNPdaRT09PgeKIJbMZ6ExJwn0XlYYSJyVaX/H5xBg7YZfEoNzONREUCMN588022b5wKIvzaQQcri7IRHh7aF0GTsI1SUhRNzlRK1GBbR+vw2GjKFlZjWu8T8NMkm0u7gLUY2N2tQ+hHL7001Hz3e985c/asiBqsho82DD2PcBeaxMokFIY7WUCMmBhk0mULtU7+D+l4qENRi1JZfHTanwZ9a8JUZHZqRgrF1WDGRsbJxc3BuoDW5jaMkq6U9UGa5+YpV1Bp2BLNzuHcv080XuXVNGczf9NgIBMhXvNzX/mFX2xoaR8eGXHP+uEjB02xQFakKdwScx98+B4fSXaJUXfzNIo0cOigeHqUEgrTjXQQiBuaoQ7aCgBjWgpuaGDIkc2wgZnwkY0EiUxOTFZWM2blW46gHvREHh1QIjxcUNkPpJRsQIEJAesYcrLCSW1fT7fLZFaWFnj9QTb4gYaTfmmFGeDnP/957FUXNDBcONDqykY6mbSTtoyPjqlFJBjlsRhK/QTp4I9FZ3vCOPgPHDxkzuOuPVMLt4CRl+gmA4NOXHXQAFx+zAfcn9aj/vjrX/+lv/kr8qOFhx3hvFPTUxOjw0NHDh2cmRj997/31cEbV1uaGsx4+P5jy1wyQHHDg/kGPv85rNyfzAkQyBZLkaDBWlL0kt7jJRWKH9kg4NFS9IN+85/MtvwwMHBS1xz+0t3YBLzlItitsoXlTaq0vBLnn4gEZtjFakECAqyXn6zlbnV3X0wZsgNWtKQVgGJV9YEDA0zCkcFbVgBcFGwFoD6u2xXSwxkZGJueWFWFpAdwDlPQhIoYCOP2JFOZpFFxqVWaAER68mBhC92gPwThXSkQ5MlPQomRG+uEHp9yfr/eNQEZ4sNPPMHvMIIDvjzgyZyf7L9PMP3sGWfeoJYr9Z5yBvIQgJEXpRL4/Os11cj4TzYhEaSy0ZvF5orkKwobUr7kNo6y9gKknc0BLSQeXnQjB3WFpFB+EJiAmQ8opQ5ScIyS0wGZMcdX6iddkfx494DMB4TlUVGIIjijr4APWnxPeTBwz6duzmGfRhjiTqrZLcbJjxt88u6GKLk0QEi+eaqzmdWlXn0Ckw5uEIAYWx0+fkPhtiLWX1AC9Fvbmjrbm/nBtbLZ6bG5yVG7EbKdEbUns8/eAE5UiFksAZDCcmoiJHZpmIAlZmYSEhUqD6pzivegKRn3DCHCYUxmhcl6IhtipeQ8WJeplujT6vKKbIDkXy+5CnmSuGMi5/Fnqs4ZshyusdlXIlCetNc3MliP9cgmEStyLUQDplYJWtJV0/1QG7NiDQNgKwGBSVIV9zNsFEXoRVkhJeCQHf2PvQLcsXW1HC6m/jFY1gthjYvt7YfWdes59WyS9U7y6yrpv26KjPIoiaVwM5PQD4RDIDWoTBRp6jwNN7pTLDJY6E79adhi6AwP3eDWnl3ebu8dWN6quOf+hxxTNLB/H7t15OaVnvZmXg0DrgkA9XI2w8HDA3bc8ZJ++vFHdnPfe8+xzdUll1+xGdhGcNZzmuTDx4jM88z41ru6hwt6MDGaCKSOITIdb2g7JuagwjhlHYD30zT0wuULU+MTFkDaW1oN9voNK70CTswrBJY0tbbkI3EF5Ah64TNWo0E/jy8G4ocfeTADxCI1egxYundDwNe/8Q1eNiHNilAoPaghL3VXRXu9nAv04cengZKOdVoiWQjNYFZ6CAjDmZIYTvpsADiTiD9Vh+EKynP1+lUz9zyC4AZhSUzVlcNEHjkB9wmLSGlswopKclH4Oy18ab4ysMVBVp0qYsnw7hlKKzGXkyG0LgkdbmrxDiuPTwCqRaJfIvNXjBCpHYX+pwVJpkXSnJjyAagWliFBs6EixibNNJzqixDhfLhnuR00KGflF3Vi0Hfmphg/OwGcL3I31JauYjKANE1xZember3Tw4ZSXHkxPjmlXil+TQC8GIixUYSIgv6kqPRH/sworEMmNtJ/YvXuq1bgARxXaZcOkz7oee3WQFo86fQCYAEUaQcUnsjPT4dL4CQulvFd+BOxkFmlkYLxdranpgUsrQkes3pJ0ILHLPsD+cfffJkReOzoPRSnob5Rc7t44bJwaU0YjWKQoBrxFYyYtJRR+IufbyMVM0NzJl5Vaiqa397fDz/8yGWxlgL19hZFCZFlK+BKxC3VhLRSVEf/Di24SsQ4/ViWuq+WIR56+IGjhw4xSaisdQZxbzOzU4xjJrjZGNvLOpc1NUetI+P6tZtUnGhFfFMpTXBh1qygqC/gyBR7iDCWrgg/isl2NKPQUAWkmVLfuGYf/A2bLWACAUcJcNVDT6CRQUJ/KMRjamIaKUylS5cuzMzH2bFhB1vP6+mGOb2hkDSXnCgoLlMnC+KEF06OtLeBeIgWH6FE0nooTTdZ9nExgqmCrTy93V20FCjTLBrJkGBQhWEdah6NDbs0zunpKbzSiOw6BxaTgeWxSg0pbDvLryDrMcXH9/cfoM0OptBKDgzsn07H7LCVmYa0GSHA0kviZ7a6tJzZ6l06KnSFOh1siYlT2uFEF/ENyVmnIYYcISWUzJQq2Ucx+VaE1JBgaYm4b92IY2oyB/q6+7BFE+1wGVkxNhLhRqpugetaL4K8L7zwOSskEmmCGHQKxj4+cd/J9u4+3daZT8+Kz8Nq2PJVO/Sdl+L27VsQY7/C0+k6N28M2o4sBXro4svnhtfGTEVAM/PEf3Z85h7+Ux44M4tgqy3RZOTjpz9VZAaieHYp4RU4aoEeVcR52WTGIk3RO/zVi/N4IkxTBuqk1KBwuuJuW0t01tYTVKF2oGgmWeA5wWELLQVKkQ8/+dhhe5w6h9jinqlplYp/A/b4kaNw1g3SqEsXLvqVv6dvnyXjW7eHuP+xBeFiikwMlMdw0xK0oFETQdGHH35ol/Czz9pwfy+0IeO8WvWeO/Op8azSzqdS7Tf+8N+/8cr32prrmUMcZHocQbIMkLDMUy9PcyimXwgQOsuTxUlkmICHUiJU4M6TMkeaRx7EevHxx5nTJxsm5czmjloi6oA5VV3nnPH5pXUTgOV1Ad/Mudi9ULZlT9iPqwANtz13X/Kfd39NsGNdLYIat00AnGdy//0n9VOjt2/bamgCUCuopdxtXluiHACLyG9DSzK7IeNh0AFuP7mvfy4EKKreYffAHEVyogKNRObXe35g4pM8Hi9G4fzRu2z0IfPkLv53XxIJERobWAX778wl8nGNKdQV3Wq5Q2wMoqQDGUJXnU9EtIfHT/6zNw2QhIQfQ0gVqT/Yy5bKL3vVpqOKwN9eJ8FoAp4EMlGaLPVcb2YF0nQF8YhjT3KHDx2AGEIUjC/JUAgkkndQQYOC4dwXPEwZUpgKvsVmjFgxR10wIg10SXd2nABqtZqhHxdKlJWvOG7PEKPLqKxzTmh5VU19Y7NrbPnlss7rGFUHE3+K9Y++17YqttziQl9P58CBvvqGmpWl+fGJYVskV1cWa8tdlxEeBNXpCUUtIjyrBJQ8MWXV9SeXcEQ7lKXrTdJUh3B9ytQpnjl29zdeCua0dTHjTNZPVptMoM5covdcPL945++QLT8ZZiSmCGyJUjI/JXrBWhOAWBvJTE6xA2gJmLZLJV3lz/ACPlpMXlKpAAIUCTH/BWpHaTw34429JQFNTSo17ypWNxSrGPrh/5eN7cZuX9/Y0sWRNxuA75BYPcx5febwrVs45sEZUoYMi8qTiYWGlEysFMVFdYpl1X3pYHVouh3dpg6NEQOIRD2Y0cSYC/j1G1fnZmd4THarxSL0zC1v3/fAqc3tQl9Pl5NDxm9f7+ts3VhdsEThXnPyT5Px7ZbWBpRfvXLJ3gCtf2154cnHH7O8oVdTC+BmMkFyTIPckhajOXFbg/UJJx0Oq+8VxQor7IN17m/t4lB8aHyYvx83eXTZxREk4cIm/Gc5GDucPchgFUPhGEpLwSksG+eBNVTxv2oUdJXS8v7gDGLT+FXECiNya3u48yZnIkgVrzjXsJoLhv/0O9/7gQHErBPrOKQxh3Qs5zpGP3aqJPtVKRUZ1DycXAYs6WpXEZVAsgwTUxOoQBF5qT3rc86jORhlPIQiXX7FnbKIsUCpF+YgNNXHHMMfaPHIw5kAQlJX3QSCIqRHunr9epfiBcAM069ETyoVc0svAWfviY6OJgCOsswfAx8DR+txiZuLHUBWHCH0RFdt7POn8VQrAwPy5jLIoZk9Ha2sLF9ZC9JZDnm6xW0nYl5FqFOQiqqOVcltrZmqNLcmLDIAsqA0gUwj+Jwf8uMSXvG7Z+bAP2dQJNseIEj0yAkZrDNppBICVsUxoggQeXSsfnyNBpvsZ1ipRaJSS4tzpdpqAqXvhL65ETtzWppiG7ez+Bn9LiPSNk14cIwJhAwmrlhAGxO4U+zzX17SxZc5Mcoz5eJrpxSux14O3EBm4aFjBOMQmxK+oAdnHXuCF6JTrH4wQDUZF7WPjo65+ItjftF2h61d1+TReVAITimTM1zDSq5JRbJaUxuefm1VZujSSFXgha/gsw4zC5iwTjQ3RcOCTz897TZcDczhoVU1lSbttgEpwhKhHkJ2NCEXPWmoaiJ4zB2bGOffFvLq9gDTCYc5kmt2qxCMtTOmjhdMoUEaoUmhP4XuaW+XL12lMQKUCeyZZ57TBXBmI0knDkNi8OAYw1ezJC38ggzBEBW05ReYAZoiiFKXy2V0lh3Of2lthZsqxNthNGgwN4dTFhz5TYfMnQyEpcZ6KySYKf/sTKwTRYe7vu7ITqakACFrCyw8HcTw8IjPojy5f7VA3MtdCWP0o48+ggClgXCugk4IEIKSI4C0k4xkxlxZrNYedHNSWMaAZ2wNCmZd4tAgAEJXZw8azWoQzkrUazDE1bs4t0hPwMENHWrs5UytPS/XXLl8+Y033rD5mwGdm5mNyBjIqubb691/sH//gB6QmMxArl+7gjkc52xTM1hi1Y74WuAMBxzguYSheYWmK5Ff/MS9cWrbe+99ABNoGGyM/hCjhzJcvX49d6baPO4rhScUhuhRhPMWTzjgVWQ+QCh3Kg2nFLFCBrGqxplo9uvrOEBkTHAVsSqmp8bpHc6HcqTrkLUo4qZI9IRRrh3SChxWi01CNdUlt0ofPDhgwmYFgIxOn/nEdIv3CJ5sFmxx2RncFGf5XB+8/fSzz+lt4QyaqqkubD2WmPI5P2o3m3J+2aOPPv78Zz4HAQMPbnDt/PD1N/b19egg3Hr5w9de+f2v/rajCMx0I/5H/Fttjb4lttsky5fUPImOOE4Kc1gjUiCZvsSn5Bn88SguC874zcoWGe48Cc6u0BwvmiuA+Kk/Yq9zOu4UKmbmRd9q07GHlSlUXuHIXI0hjhnNMHLV3r0gPOPw53+F0Ahf2C2vdKfmlgnA6ub2k0887eiMqbGxWAHIB7lYxwI2jYvW1Ry9GGUAon9MT6eIBGz/MZzjN6hk/MTeUYQl1y89SHMA+YIr6cm0Iz8K33lc4ChdSmYgrZMBCZqGROX8eu4wqeA4lrvJezAiDMdGgjziRhOWP1UYfBBni4s8r2aq7BUYBriElV/Z1J4twlQEJw2fkSHByYyNv/lZEg7hv/eyNw0wmKXuCM4ecmATIkSePJR6T5y4MxsMUiOk1eMteTcoY5gCcoIgHSFypSpURP/rJEhMRWJ5ISOgXeecGQgIPgVMO8HWw/5gKYGpgNmAmYDd45U19YWKGuZpTalxcnahvLqGD4sVB6CcBnvSM9m0zGUvuONfGhtsWXWJx8zI8KC7Pix81cXuUTruOKBgmweXoJ1ftX60AAVH87TYqghU7D2LVW7oZeq8yKNglqk/vUOYicWa5CbO3MiJIMssBT9zXX4zBOkeYQCZOYk/IdzMH59CJMluk+hJyNJaG9tDSZicuSL56a+cJBfvybrKvFWK9y1rkxYQ7IlpQKh0WqwIgcvDxAncfDQXdatGjTjjONwpBOfMIAsF5ZU6w7y+se6c381tt8xy5xmdZ6enOO/0jfofDAHZuGBwyfQCmx+1BLvKyoX/kZ9XI50HmSDr6xg3OluZ9Zzo0pkbI1xkWVtZ6LSYX9XgxujxmZWHH30K5b2dHQvTkyM3r3a21K/Oz22sL9umAgHa69AawyB17O/rbqwvcf89cPKEDVEWwEyH9Ks6JRzAHwwkbjPJgYFDglf573APGrYe66uZK9HnMrZaWiDJv8M6NF6cvXju8NEjBw8MML6ZGREygKumGSurfqWkA0XqmfJiFPXtenWjAwIBxxNDnsEr8wp4g4UKfZIT60BmzTNLFLHIMuuKyaILjias9N64ddv007Avs0gzzKEpZn12QyHKg6V55IrBOmIfmvyy+TJLaZe6cLixuRHtEnVQHpiwDSBGFtjuUSprXf7ThrRsbPgzKxXnLB5Gj3knkN38WQoRa+XVVUWOx7yHJE12IkgklGvXzMSRIUYH3aMmFnqV+2Fw7j5JW6Lfg4Phm8IwGmHoT7Zla2uLOZ34ENnQwjECK4IjrzxJwxs5JSa6mAd6TC6GXXG8PIyMBLT4ZbzJg2QVqdoL7uEhQ51u04qMAKY5u8bUgDjmbM12E1w6W1NoiDwqija7GWaDd+yFiV+4SfGoK2OVc0qp4emMHTWpt0o9j8zRdaaZEhyif09cpf9kJ1RtZ2utIdO7saaPo5EY0tsX4Rudne1Wn7p7OrGCcgJy7dpVW1C8a7b0Z2p6njevpc0RtzduD42IfncuJNnMzE4DjkZFCs88SmzcfmyaCl5vm3DEBmmJ3d3tOvPpqTmeC3JaWxVtWcZrq+tMpyPFMoc2xfayxKFJYxM56etEVtlVhTDprO3tzVgCozrYwTBiEZKNRsVWY7igmRkU9l86FOIHr70qmPPG4K256Tln8Pd29RqFkScs0wFMZjneDWW4rziphJgb6nVo9e4XaSBv6ptmXdt7p49RCNMxOyoJRvQYgh956CFl9ZXkIYwEwE/PnLYn5vChCLNzirxmKRZIk0giNLGJ8wE8SGCPBjJpiy3MKSgLmzKZzGjAPLhzs7PiDPuEAfb0qAVDdI6KmGLCGbfBVBAos6/U1ZctrISjWjuXgdTVy/fvXWvXa+iIYeVPtUjRKVNc82tFMobyqAVMKXzVTEaLmFm66kJvd7rFjL9BA4AShsgsHUwvOl/amRuAT3TABIC13dnRYROwbLTN7chMebX709InBGKZMu6sjYNm5xbDYQMaMgkUQPjQTvFaOk3x/X4zhnrPpta2oZEJTR9ubAasfvlP/tRMgEIf6N8v2AZkI5SNS0igNtRd7Ip/oQpJs1CPWhD78EOn1HLr1m24YS9rHgJwO3bPCQ1A5kwpJDGKNqoFbuQIZ10k2RG6udPNW9fNDZDAzlY7zSRfjCIL8OGpDasdHDS2NDYM3rq+vuoSgGNm26DJgIGqVhwaEFNcdUh+7bXX7nvgZGtLhxUAJJhuDd8eUvvo2LBRwekBdN5oA1WaCZSO6er1GxU1tU889XRu/zoUiEFP16O56sVMALAF5q4mIJqvfOUX5uaXdaQ8eI5YuHbtytDgzZ966SWjstOo/q/f+re3b17r6midnZzQLzN7EKKdhucrPf4Msyk9RJ9f4M8pgahMiBypp8bOeHJBvzLI7wWx3v16N/Q6EjHSwioLp0r42MJNXlxe25qed8MfR3RZxJCXx+k/andcD+slg80I3P3Nif+P3zwBsGtmadUttk2GlBdf+MLg0O2ZCYfuxQSgtqqsrrhd3N3g3E4oMZnTAARFDl21x44AhqbjDhk+SIB5/IYZ5T3Mv+AJ9Cl8fvGbuZGYs8eZjJgTscGVmSZI0bDzn3kYxhmPUhmTIA1L0qgT2AggSDyM5IrwiPvkF/vSb/xpSIKG7ioPljgcjE1PyhzAPfL7TSmxZyO9oHZPKDmn36gu7Q/2kp4yCx65bBSHzx19YAAnzKM6zQoGGaa/5Ew9WBj6gVl6fJUzA5WurDx+q6rDK+mrJxOVf+XJ9aILEFV4EoTYbKdsRGfxh6XJIUtnaW3DItJmWYUJZKm5fXR61qX0jg+wuQYoRdZWV9zCXltT0eay9KbSQP+++Tm3DI3MzUwwEEncndYmnJvLjoqy/SQ6Ug8c1BbCCuknBqBQ9IU9IaaLjOaNVW+J33vCypgjLSf6zYRI0Q5QgiUo8iSif/zjc+ab/HiSi2vOmV1ROCmA9J9k411GZT2KMKX0wDBX5C8C11kpGHqSzmxRkRSjzN0tJFkKGltWDxM5/QCRp+LJh28aU1bcJFI+5vI8Ldl2c69T9BubmssrazlB+XZNAATuzsy6iHOJq6SttdHUVE+ux/PoJFGhar1uJsSfSMNhD+NBz+BXBvWiXe9KCjLkHhscfPPOcaNTdTRzS0NtXVPD8nphu6J+emnz0See1XfYzr22OH/z8vnG2vJle+227NzdYl2pam1dD7xtq+E9x47oEvVq9p5xMx05NID9mAl+LHSyfuIAtGoXu/b2xtUxhhVGgo5XVy/bxfMXhDHDUKJO2EseVnjCBGvbfMq40wxwAVMMqCbB2okJg2ghGxHt+oqv87OGkugVU1sQkGwcBwpp7DN1Gc7CyVVRoTOXjkWAcwOybVaWV2W2FH3h8qXxMTdV3SOnk1tZX9A2ASA7cPKhLCBg6d0xCxsNGXiLEKOSdJAlqsX0zdiahSURHzzZPiGprGygmT8YkvzOOmA03TNFmll7+fvp0nyEe4T17LEkYSzTDQAQe3WcMRZTR9Ns8UvmlWkZlqd4Zckxl+l0nCrtMVxL5XZKhFMgK0nmUurGIgVW1IrdYlBGKdh83qXqcpEjPpGXAGlFspoJBMVAupHFBxk92MrqQlO9E2xDx1gsRGkCRiJKySxRWYqKP6qjukqBEFXbJ5I2M6BOuzTHysa9zp0ZQzogZK4Ci9UxiKeDLpWVwvzzFcPBzNSpi+JFu053Jpo7gK+Jyp+6z0oDKho90vMxoPI32GzTGPuXiJLb1n9ggCmwnDmRSRBq7oBazZ1wqfSJkyc+/Pgjw64NumPj0+YzFt4Hb404hMlpRcJ/jAH02RGlqvZ34elTlsCazp+fb2/XiZR1dzWb+9oXC/umpmY+dQonK77QBn7QodujI8McmRECxfp3VqMZqj6TeEiLbw5aLEmgEcP/vX9frwkwe0v7oSW5wctDq8iD4x+dL774Ij8rJ7ENBucvXvrRO++wQWWQgpssWLTFwm7EbKzZLbC8ELePCSXSk1ip5Fnfv3/AgSod7e10BXmkZqGKKhAwabkdTV0am9+PP/zIDsSTDz7IhuNrl992nN/7vd+7euWa6kzB/TqOjJak7qwiIRx7mwiY9hAPITL3mWteUMT611SwC70miWdPn9VChJ1RHRMeDmvcsy5BgZh99jpjIyBoIUhsWNtcG59w4QhLxl3T4ro22pwYHDeOxam3orBkUyQNHnZPLkI4zsdJB3LRKk9uANSIqvkTP3FbkDq3AYStAEiXiA8QsCyApYpAmLVKj/FZWVMpQoGDQw0MG7bWApJ1l3r5ROJhwdc3KKV31gLVpRTcOC2gjVFolFM67umL1eJ4LPnNAfBKBk5+d5fYbJspdWkRoVy7fEVjNsrCxITKwaADacuvJqSHcSof6xlYSLITIEwQHjcZo+7NN996/vnn1YvVqkCmCAHiwHwRfrIRECq0T79Ihhu6IJ/lS0t7ertI85VXXjF9Qots4ECDZmKUbCTlQYuqhawxKQ4fPEAosplUkBG2gCznu+++CwFBTeYG1hks3Yj5Eynq8mMRX3jrpl4cY4Ep5SgDEmH9WGvmBaQnlHNiavrkw484NROvQFCproT+ELoWofUpiJ+/8zu/g/Z/+k//6Y1bg07rsrrn8un5ObdavvPiC5+dGhsxKv/gWy+//Kd/cuRg/+VL17paS0wfY6QYM6aPpgomSsGHMOeYB8cwGJPRZc0WsVQOM/QgUjJbZM5F/Prq1yc58cef3pEDOrhRxB/OYLC3lfVcVjHOZ7u0LfjH2fecZ3oMKwPiUhqqObb/IxMANf5HnwgBYqVbBF9dNwFYWF778pd/+sat61NjoxHzXbbpIqf6CuddWgEQ0berB2MeJUs4mb/aQhr+M3CIeoGtJ7wvDtB0IwGXaHpyeiYzty+ZfcGrO49+O7LSK9orp3R/BleTwyzpTjjFJeYaufJ/DMTKROQH09WVdTk9wN2ZAJAUv2VKyeZ4mPYwBF+LSOk/MQFgv8WVVUUSyEUy2eyPVCr8cLkKv3kagJq0C4I1vBcyDlVtGVEN6QZuNiQMVedBXZQL7108We4qyl/1fjgAK7/4hnAKDxSHjgzaS1Yt0KiKx4ts4OR3RClNMawAgCkypoKdTg/jsD8+Xzu/iyYADqmcX9lsbO8dn+Uh6ubHty3N8farlkqXFx0J78wr17AcPrjv2y9/c21lfn3NMUEFfjfdpBWwteXVprpS1KpnCR4lV7ohXxyjA1a4Ldxa5sDTFCQdSxCmS9I2YrU2/MdVccMJw4Iryl52q0mmCn4Nt/iZ12HYPIDjFXpR7QWjPLoIlHpRC9rvki89obOnnFnlpHjJ2fJvLhuLNAE+HgJh7qsp6EAJnoeBG0NArpcQww8jRD72WgRKZr0BP00hmGkBOU17QEsTA5pfWBUiWGW7VNG5gZq1E9D7+g909/bZEzA2MTU6MsE8NSo5oMbQX2oodXW2trQ2IVZ3jbrcUScVgnK4SEMH0njnKxbp3GI5K621ZqXKqqJjpDD6QJ02vGgRonC+u7PNhbozCxtVje3Lm8VHn3hOY+nt7NywEevsJ24MX1uapzWm1QJ70GtnkSHjr/21n9clEv3y4gJdErbtMk8YqiI4UB5TDvYXFvX19lM8nW0mwUjEFMGQI4cOswTgAG3jwtzC/NDgbdzyfya+AYXXGZ76bUMPnssDZ4+yakEUKTBYOS0NsDhg0LEXz8CnD4cJs9zwoZ83fPhTZoddz8zPwc5xt5A5e/a8QZydNzo+yQjmG1xZ5YTKln2ErduGATcaq2yuVxtUtcSsD0BJweQwgZKXUDbLVHDwYmQ0owDHuzyGGKooG2gKghDagdc21dx5jz+j54hfnyEpJ06KlMMBibR7aXG6ZBdFnHIeJ6oZrdAOFLBwA0EtMmehKytFTmUFpsE8p0jzLhuDkTmHt/KEkT03u762wGKnzCJTwPQigDyNknFSEC6BLAjFyO6xL6O7vbWru40DVBVMAqM/ZEBTFpJqkQ0OuV6JNB8TzHIJBea+WtRRC0axE7RqozCXnEqkKAVJ/ERptqCkyIxGD/6ADIjqvOe69IdysuAV5Jukb8Cqy3HCGRocdBP4YfPngf4exxLV22SRHEAgax1mlWihEhBwDhJMSAuLwHHkqvgxBq39qzNzVsZ2ZuYWrly5dfyee0UwhbyKsa5ofFCLBw6Fn3mpNSvN8JArtMrERPjT9nPbK+kNlcACqKNH9SzmjvZuemOk0ZzNE5aXNnjh4Sewz90Wba1xpsrCQpxwYgpr/vf3/sv/ApZkA90333zTV9CQncXgl/KRsQdmbntzR4nLLFAYbE0npfgkD+uPwOpiqUFfhlmOCiWSSRPM9a31lsYWEwNIWqMQk6fpOtcI66mmLkmYh19frQSamY7bd8xmHDVtChtdpAu1+Pa3vsPDakaT1DEuPtQ47Q5ScP/+foIkdY1E70AGeEKKKFIFdZFTKZIgubGRMZn5g2mb7kyToJ1MUgHgpgrm9MxKjg3eBQ5pisfqUpfDl4AFn5ZDDKVUX3G0k5MiOMBXcebcWRdyid+nMcSRe1tS9PgTA4HSnkkwiE0H0QiF5C0QI+QXnnLqcdSu51IXEcNKR/OZz3wGaXCmFXQLLY888ggFNRVho6PU/leyi4YaJ+d0KeVFqBO7GYFg6muyM4MnRnHTQpxBIzSQhlHK8iE59aCrtzeDwpzAub6BPjiS70c/+hHkzaymJsetBvBzu8O4sb7us88/7xAktSAKZMug1EnPqFJBW2oBBM8NS7xil69eZ3mrl7NcfqwwXcEcVcAQgd7JjhJisSahP7PGIlyHJsSCwM2bgIPmgST+M+gxH1aqnp2a7Hbwv2lJdTWiSEopykDbAcdkXAWc4HTuhH7PfScqyqvj9JTtONrCECLDvv5el/KeOH6PKm7cuAalFz/3AmS8DI2Mfv5LX56aifBHzJSIOjjkGRc8sVHwD244flQeAbXWUewzM9pNjI+60ujzL3yusLN5+9b1f/FP/xdzKnthRT4w/QUz+NXJVkbISlhdHp5cOITCF4IiLxpX+k0WPIGFZzFyYpdff6oU0zDEoywd8JsyZgvGpSQr8khmOgraYBKaQZj1DQ7NM5S4/8O4C/NFvAVAzhphhUWPnB+g8osafwJsBh4JRWHMO2yUurhjqVjDXvlLf+kvX7pyeXJ0pMLNKqsLTP+OxiqXOon2QE7c+2sU3wgr3IMKAxiUg2j0BsnJKvIScUp5AhB0RV06mvR4If3InzIrH0xJVqxc/vRkbHOG/HuXItBy1V7u2G85e/wqqrh6lFKh//AjIRvYOpfMeUlqVzTjDKxS2VVPCkkckZIwwmAH0UR1HmBBk4eRKjHA56jTJHrvYvMY9Xe9/mHIpkdBNlum3bt+8g4CMXCG7NN8AEzpdFIGVg7E8qf8NeNpwGNp5eYPoOKZUt47CMiZs8WJ4Gk6lCFArMr5vCxSKhtBK6FO7ga2S3WNOm0VXGpQXl2qqOYSq7IpaH52uqa28vCh/ezFuZnpwVtXTRQdAErjnAPrWDYTEHKnx9QtgoA8capVaBs2AKZrQjrzHd9ihskPXmPfoSPryzbWInRBASKCPpYzkJBi1UHr0COGMjs6NPkOUYpjHnR5EJsp8o5eVYCvr8A375FYGZaTJ39VEGoYS6xSZPBJSuIzfbBiEw3Qp4CzRqvVXtCUvKQqKgDy4gEyeutd+ARAkIGKD2kacFdvffMuGUwzLTF1WB3cifO8xNpVtbZ1udWEs+3a9cGRsUkpTFVxWA6rYMeoIkzCBNxvflFR7nsNHIYqyOOD0coMam5hUYyAr6iQDbtww6/BCJmIgolPIbDoHnaaG0sLy0vFmiY3Pu8U69q69jnCTxy4CcDl8x9vry0UtjfqSzU2Rxo9XQE8OTX2V/7Kz9l1JkCb3AWM8z86M7HN7TRMbfdCCJXZiihlMxxGvI29+/btxx8Yvvrqq8w7Q5veHiGGy+ygZE589MnHr3z/BzT5sSeegLDiL7zwArThyXhAYGYgHIDCScgbHYRIcYFhkT+RT2fk5MQEwWOwNhcyQnmXAdGxAue2pYUlxo/B4PrNm4YSZPHJTk5N66LZPALkcoSCqvHWhSqGCaUgIEMIIIVRGcUk0j10yelrZF5YECkh3SAlM5ORVeDdiG8IU6nMXiAJiHcjYOx7TkIBBDTvot7RyJscnMwX+qabYdPXzeamWgdwBRUpLp+ggcrmCvkqkoGAnHmObCkeTclI6sENLUApZg83H+qkGL4BNIN36L9mpBQDCebJBKpmjlJAtFibMlwKOzRiym//z9LczIGBPvYAhpAUxDI31OgF8yVCDNWGWiiZoWqdWSh8zvChw361f/jIoOqe3n0IhxIEQEYLDJHmASpXgYfyoEJ+6QBCQDYxQKoOBprHrISb2O4KVVM2BoMLQuWRE1faW9qbm0qzU+PhLvu/yfrzKL+O607wBJCJXIBMZCaQG/YdBEiQICmSIilS4iJqoSxbXtqbylXtZcr/dC1j1znVZ079MV1V58w580edma4qt7uOu7rcZZcty7JlS7IliyJFihTFRVyx73sikUAuQO6ZSMznG5EJsTyP4Mv3ey/ixr03bty4ceNGxPJG8x5G5AC6lGJsqQYh5qchkjc1l9jF6Nu5W2fPnhsbnVjV1kkKWlrbbZaj6sy6K8uiWfXCmRC5/ZWfzY7m9957AOPsPstCtSEmjaY+MLcyCw0umOHFtq07BgdFFLQyiE1j0Z6mddhvPG3FinW2qM7ylk9r2jtujt/41V/6xa3bNuMyRAVzK0tBvO/YxIZjc/NlEkTsoA70t82r26hTiSFXNmFbnBDcvmW7jLYGgBWugROr8caNoetXt+3Y4cwjAGlk9y/+1PPMsm3btmo8TnsR/EqUXT4xbywU0+cIoveGWgdKj6Cq7OfLAPOsGQgsgZIGrOmy/rFMAmsxuc8hWVuCBBoDPL2pd/Uh5ThffhkO1gTEgA2NeyYlfZWG9fbqa6+wtr1ENV+F5dci/vGBrJNayUrjyaZdaRnlZHJU25DUCEMLorKreMFKpWhdxEsMDJ5AqeIDSZefFs2gEa8YlGxQrg4EElzM5GuvAwZAmJX0I5ubB5AS9JWIWDBCsDCT6cn29ZIo47mxFMx9UgTvPv+DBMisRZsQ8JWvAv89KB0aoJFvZ9bqaOkP8mAlUqCVg411/+qadKGLeBvkMuJtvHNt8MrGDf0XL6Y6MBmGkDFV++ijjyJEcURGFsFXDG79yvjkhHA3e7yC7FsVWkVjFNWM+crFK0JO9WMCGTZ/LZmvaDFse+WVV6h7jKJNvOTUVwsgaF04/Nu/9ZutCVxfRjaghCEqS9UoyxuYeHbHGQ/uG7dsFnLCVfPBB++DsGfXbqBoMTgIDlNxX/3qV7785S/bbVqJZmw+8eQn12/eIpxNHSlX7WCd2lEWBUEBfeMb3/D+V3/1V71Eo6kqURAKYv0PD1392P33TtMpc9Nf+8qfHj30gQWRyx3LyrCy3Vo50Mj8Owmq/X2YF1N86VqKDEkjqSZm8QNRBWrQpRRV4KoZ0pqqcfnfhUAIRE5zSACJBRBZk93I+jcLOT5hWxe2phAewfbp5wi2veBzkGeJQ1DonUsRSvRzCbmlv8s5hhObXQcAyxtarRD90pd+4ejxIwMXTIY0Tt24vuL2dJc+YmG6yZF2zK8VnF5EkBBiFCoEiKMhcbsc5MUxqhzdJ+NXNFL1ni9Smg8FTw8VHz+hUtgQLeyBArzzxkPN4qGm9NOzS/bFXEV9l5FI3osTCZLZU2IG7LDEVQ6i95U64tNKYP7ilSz1otbqwxKGwMdvJ6+yiE0tURoJ5Jbeg8sbyZa+8qCXailpfC3lJI0EJXmeEQoger0MdoUnHmqy+t6AAa01S00DFHbQA/GLLI1GahEQKJMV4C3ajhUmwFzriRrWx1uMkQMcGKJRs2TJpq9WA8/MLZ+0NNAcj92BxJou8GnF1W2cQLU7wysBF3NTtgrFBRE8fhcOk7JscMAHlMov15JAo5EgNCoJOkYzAHomEdBocz5GMaBrdSO50khdeK6crFTUKgpp5b17fRM+lGuJxowYMYRSoiu43iXAMdqJIpLQS5+8qcDv3D0YGXrPqANKoVxCeFsLCnFAcfKnEk0S1apEBUkoFFnPUKSS/1uaqkAUjTl1PUCpYoxuZB8TH3lgZxzTKnZ4zdrRzLrPLNxuoJ2sQXM6L4T5eigJ8yEuOMMEW6g+d12Y/oj+VxalhzQMhLDxA2tGufBHqQTy1geYgClvbRHSOGN6gd1za765vXuhqc2+X2vW2nhi/brODucAnD11dH1XW293x/iNYd0rG85Eq/1Cxkav2ft744Y+p7329HbZNIbH7fjRo9Q7o8QqT4Hd5y/Gzc9oEWEAAdpbudSsfsedVad/gRUqOro69S9o8VMRuCk9ovQOlfNIQzsasdSFLtml51RipdngzhvvCzcy8CtNM3tNgoYVegGEyg7s4NB1FSbsh/7XzzLa5ALf7jO6bwwx/eJeQ6zz8/qoqNYwtjgiq4Wqg4C23koHB2zlrcqV3mUZIbTBRIIOV6+kZ9GxSum9uzSyAyiNirBjkrw+ETsPPglehWpbORlJMs+alX4QOTpHMXh1UsqnQmymvFxsG3gCrlxwfCXOwHvp8sZFhtUCUNDQjMgGvhkjgUwwAJmemVjX1e70cF2LvHRv4W3gc/+Rx3qeEgtWhSqipbXR/pomVCRWNOC1X8bVQF7akshXzxCIEm4sw6ri5NXRwNYl70CxBxQHwrbtmfOBHg7DrcpwpUKhHmSRAIEe8M0bJWKU7M6aQEulUXx4novMkxnrQgWQiwqW0XtKX2jF+Oj1Nc4JKssdaYq0/uI0sT8K8wNX88rK7xkbxsyvbGp04itDSCCZ47b0vJr80LURs5sq0liQQ98eRHKEYxORrsZjx89ahHPo8DFyz5Uj+A9zBPPjiQHDbSEDduGciNseGQiwFJUQEFwCqrvC8b7efpJ3fPgkiSFSdUGwsBwuW+fBnRGF3L+OgvaJtDBsTGF0WuTb1bV//93idlQV1gDOl/zDN340PTkurNxsD7YzebmoRT6t6Os7c/o0phBWVlH7qqxcWd/bzxwUs66lkePIE5+nja5OnnzyySdXOy6uc1lrc4xsc7+UIHmWyyRZIh2aRLevQyw7z+oOEVYvv/J9CO/avbuvr9caTcyFsLb07W//rSbqgYkpLB4EoxflKrG2YW/IB/6obBxwkqx6slHPlcHBGzexaoze0ekPDF4Gc8+eXT193b/2D/8hi1wjZ1/+wR/8AVlUwZ/61KcApGuAQjXXCUtUKXVGEnDjJSqYQcDvrsVioEuJ0mNgKqWIHVH20k+k4cbQ1SvqW9FG+QhEmvSqX0gJV4c3vrqTY85vBrEdaQYHrrY0tdqpU3CINCL8xKs4Kxo+Rp0k22y7UjRHXFWV6oWvxX4aFlRhhdZrB7RBZy+YzykLpsnVzfFhM0851H1Zls+bGqxhoTdvjKpTEOyQYz8vPa6W77wtetN988Y+2wDR6bt278AxMs1K/t73vvfuu++0t69BCLXIp64KSCZecdppSACiV/r6EoGGdioxmE9OKktGPwkG2RYChG9o5+wxPBD8g3tSEjP3X/mVX9GkX3vtNWNXLh8Fzc4wP2zLkFUKRkoVLFaTFq1AIwJcbaogL3GDrQsCVgCrviRw4jeR0EXhrSGlsZOvjikxXuLpOXXmjL2AMhlVQr/wShHIUUH6JKPHn/u5n4M2UHAgOY47N/Q6dm2ImnDW7/jYzCsvfu/YkcNZIc+e1T8XY46tU9S4AQA336JXkrzAkHCSk+Lfj4KuAwFFVMdeU/YKjB+pTAXH6nVhLNODohdOG79hgLDiE0FO4SU8Qn9Bud9uYPqPsASsI4prkis6HU9gS8noYgbKx9GbVzGF/KsjDEYvOyrvywXD+qA2pYeOLfhp2aacUMtTaI1fzmyeuTkmE/HOVo/JsmBfSVCZcszohls5jyx7IloHGt8tkznPgCtWKiMTNhSaQo3JirDOeCHoBe36e8m8804atFfE7twrqrhUP7m7KtVJU+YAMLCavnD05LXqdmfhZbbGVrw1S7XiYlhHs2G8Ow64dGcFSCJP0FACUWAfaIWcFBqAxdavxcblXc6BZySislYkalnZ4sNgGEM4JYUoO43Ii2LPwir8yT8YJAqlADWuLEgSJhYdtJWCRSWBuslXEsHw86yO8rWgZ4JeG9EMK3gvCxxIFbocxlUpdY4bfJcZsIY/ajHjgATBLFffEi3YX+qWoLzYyqIK1OX0xOj0zTkbT69pd7Kv2RzJm0hqMWbnVaohnwFALQ7uAGNXCYZxBnA6bFdhA6YYPrBXs59s2eUwAkauYG6L0Mi8uQXX4ioCE0w8F4sTWYWiCHnKiyQVVvD9gzkXDyLF4qAcyf3DjLQn0pL9cH0xHCTTMZK8L70u+YwAa1EOpeSdhzWQWQ9mo545Uwq2lpLdBr+qW1x/keIiJ2pA7USchW1EqOHtv0wxlQEYsU/wT1mWEmnOs3RRAXDOeNiZGbbsVWUO3hS/u6ZrbXPraoFjJklcVH42TC0CDHHcI1T0Fd1Il0qAWJ2aC1epQYVmjqUc/ISZ1JeXHuSiMzUBUuGugoAKWA5UPc4ye8M2Wc58a3aZ4QCwEgj1Pbf8tkNt779v37e+8ZcXzp+zxtPRopcvXrBGK2veNm8IzAa91YTJDEtAITY4NGQf/bGbEydOnlY0OGfOfJN9Rdvr3fQdtXR97oMPfUyHooNmcBgTMkWRwGKyLhliNL/9DJlfte9Gr62KeHaotYlxVtwIisQ3gjYmOM0uVGM5OqqE2KziZ9BZ7L17vx6KWamizag4JfHqtWHLxMQa2WgxGiwz/EwLO+Xr3zMBtc7Kg55+MNmSIFB/TS2r7Oen16iuIgi7cNsbJoQOThEqAjLplEstwAFv8VC5IPip0UOPx9aFNJ2RCim8T1D30PAQ6nRDPrkgZtmr7MDWOvKSZIFGAPRKly6evTWXAZK+0p1AqEtxgfpxKUvTywA4uYpSM9yzSbNm6RN7EhAyo0XbxIZ731LRWBPlqBzjcAETCKdFqgxQ28qFrbtgW62I2Ql/kSneIBk3psdv2Atfd6wPVaI3iEURUwdRLsxhnzAHyIM6MujSVAp8Y3Jq1jKkaAmyEYCSleggzDSUtcmm4mR0gXNHpBGIikJRIABL9nz1rMT6FX+YSY4q9NPLD95/F+3EtYQaWpmVJuDSJCkCI+lKsnLNyWDIxq6sS1HLravt7Od4PpGWxthzR48fExs/Ne0g3RHhYVSGWRECZbYJmdzmdT6W2kFUYH7qUVM/N8xDcnDb2ZKBZePUjRvtxJN5HDUBe3FKU9PLnJTKWBHHrGATZ+ghXYCs78fMTUeOHNMHKDX+Cc6/hpU8vqph25YNX/jCF5gvWKDyWL0eEPbzP//zrDdFMJvwhbUksYjp9z/44MrQNfaWgQEh4y2FgE99PTmsTl5IG8WoTi3Wfu5btm8zY8OiMqPiAOeTp44r4vnnP7+hr19rpFDsfBIq8ERlz83bfUVtgQoCcsxEDw5dVVsQMOlmqKVtqxuNh/IVpE6mYcvYMswQKsNPDw6EMQEEVrXAepjUAS6e9KzrQSZj7srgAOEw4GFeg6bOqDWQk6anR4vV3kwRdrSv4X0XHAUI6USIssDXHMgc/Nn9ZEtL9mnvvn3UPStKXhCgDRn8UZfSlCKWYzWxUDQ0PNsfDWn4DJQ0yPESYyFM4F5//XXmo0/es5shQD37Cib+c8xnZqC7BwfM9krA989EpudlsaITGqxyuEHDs5Ex7slrDNa3YaOaotHdzaiQK0ygmHDADgkGGMV3MO2rdkVBY6aGpqLZd5CnPe1fu7ZLcNTVe/bvk0YlEjB1F9bE+7i47tkWUvSULCpIssNHTmzcvFncThU/FYFeLn9jAIMrkiovMxrhyFc1Bjk4SdE///zzLGyBTxJjoIKgijRMkwsc9/Gx0fa21ptj2UuLAKh9RKHd2DVU5MCKcYQAiL0+2dF5emrOZg4CY/CZJ5EA6yqkvHjuPIT/wT/4VfVr0IXDtNLnv/BTPHBcFlYRkAeU1lEEvumTvv71rz/xxBPolRIEVaBorZpLXACVufKWlStI3n/6vX9vMGbHYDqELaHqASch9TIMANbLeoGD7RK4vPdc7nmrCnTYGnJNiW8+SQaOO7Z4qHcJquIWU5L5n+g43uzm6ZlbwxZcjLOhRe0XV3fxdsfSoNmgweAwUiljDiXWoj96Dxqlu1p6WLAWhDFjSWL20Fq52rnCP/MzP3vw0CEzANu3bzxz7NDtWzebb88uX5gwA1Ccic6DXHSHApKrmNGkNJCLM7gWQetjgRjl6MVy3SnaLzT6eecNJOuFKb7eeV8ffMKcCsTdT9lrenq3vpeyWHjF/luw1WAbZjIQ3X2qPId4DUok+RBW3XiPhVq6BLVCC/jArmiwFCsO7q5aWR5UX3mRB5UlfYqjTTLyS124KpLuQJEutrEsfsrijcQu6wgqHG9qFglcFW2fPko4IzVB8rnSqfsKAmuSDpRdLt299+D4iTESxI4tHncjCdZpBJgkmg1wMkDihKSwEU4zFWDvGg7qW/NZxiejU+7RxLjU/QgHIvwEq+KjUOhJrRRRPaadXHCLtVwGAEGsDAYia6Wi1AFlxLbAi6xLKN25xOAA4gLBy1oRlZNhzkfI/yhzJEamBK6a9w7VKtxLDAFcMgBxXgUhCljvCYksqtXLtK9F1gGAN2luIhZY0RlS5wrJxrpAJb0ro2v/0JE7ofPdsy+VHPcCP1LBAqFPWJyRTDUZQz9sA9Gq/Xb7a67p0EAMwWQ36AmSaTSpPlflQ8E5HQQNSSuCX9RUDHeSy/9hiFjT+FS55E5t3sEEaeCHmkzgZOfc2dtNy5vXTM6vsOzANg/93euc53Bt4MLTn3jI+MDGx8x9E60njh199JFHFLfvrj3a/Oiw9bUrrIJjUurIYGuLHhQ5UevipUuOMzOZ8LlPfwaeui0a+0dvvsHHx1h8/qe+QFHT+e9/+CFXuu5AX6Bq6HAC5r0+UcfnLBeWjq0YxXHZuc5xpUxhpwE4Idisif7x3MVzopLQpY4wp0atCNzSfdQ3LC6diJAV3dOxYyec2aRT4KbWmSpOk9evsTgxpLu3R/9LHLCR7woDu7t7SaDTSvFJv4M6yZTlk7zuqrPWQu3rJWASMGErb0mdxC6luJgx7A0P0gCr+2NugXzD5orFX66OvHdxCIIvBAgmXkpjQBcMu7v77Ec5e9PxCz5FQhhaS4Yv8iV2eV8voGAot58eQJAJPlU2DIqWXsbtoBTJyEWOW8isQ65KQZHtZQYA3tipHwm6VIlZqayvB+69R8uAsOJAhpJnnOTPxTSXEkNC0bqQNmJFHr5J7xOY5uvlkgWGnOr4xqLA0nporF08qtjXu5QQkEYpsld6/cR8n7DFLpG1XiTQ9Umj9cvLBOKGFqgGsATpCrgb5ma2bN4o5qDWrOz1dA5gyYkVU2rN6XIGIsAY2DCbGaiIMi9qlGPyBJKWARhoW8kAMSFw7gpDIJF2X/6//r//bwyL69eHBfFfuDAEyfX92dNdRZdaDIrWVsCwp6eNDXrqxEnFUxqFvOhui4H43lTGtaGItQk9lIBGdllXrJMDB+6zVQuDBuOQrb2xZhSvzSNVcyJqUCF/mk3CGUs0GDsePadOnHbXYMbHsppER4L1XPiecU3E7COPPfrJTz5BVYImFN28Ge/p17/+l3a/cWIAy2nD+j7NKV6q0h6E9nswt4anvjImB69eVT0QM3Acun6NzlKEq201ouapg1RbOUNXoZKxj9mITMYiP+PgsCO5clUGo9PqeMlkJ1RkqJJmrYKXOGbMY8LUSzaiBiPWkF1NL+DVyy+/zPrEB+pGEeX0tCvKhY/E4ssVJ/jMeO7q0HW0Q6yOEHw1ogCcHGtv8CGsBFcbQODWLZsoF1+BwnZfATShEV02P6+pcH5zRT/zzDPsYxBGro9Cu/QWjs4ZwXxsBFBnLL29fYyaNHgsFd8lPUpVaNe6hDmhSylOZiAV4nKVpbfGbWrXcEJ3tX3bFjMPcpgBIhtVCrFXpLZkNnIFyjbMRIJyoK65+g4fPkgFG1EguarFffvuMUZSZYozjjV0MW/LBNexkeyha6OcRlKSVXQBhV6sUDt4YsWtvApUNA64c53Ck2NeKWCSospzdHkprzqVAChTDXYBGrxy6dyZUziP/8RSMk3RyJAe91N2+MgFFPi656Grw5PTltPkyAgDVATaZVV6+yOpuEcffcTQyHtVTyXtu2e/0GPdLSSlx7RKNd7+0R/9kRKNpdUCfLxHhXox/Dp5/MTO7Vsc7tHa1PCDl1588/VXnfIxbXaPER4LO3ZDtcBUASuSR5s8uNi/gKgs90WX7UcHALGGfE0bx8B6ea6XT3DAK/iU7DFxYqDcXkYxJzDj9rIbN2eGb+TEX44OfnSYlE32AWBTZHGCjI3ZpnARBw9/75mA1ZdL9wwAGDDO3pm9ZRvs9oXlTT/z0z9nIy8HDe6/Z/e7b75qANBgO6Bl08hP2EhsF3oCdrEqchWQ0AackYOKyg2WEpy5u8OU/x6lWnrSl6t+rcDCnSUD6E4yD2C6S15fllQl5VI8T02j9NqNQc8zQ19GPMcrlxmaDACym/tiuC01YlTmgmAFrk7B9VypcOLhHXQKsnnvgbEa+EVsQFZcEEN6YQNl9RM8i/OeyPnmZUVEicxv6BEQACuoguoiZRTjHRx8XSwartmoUItMryapLHWQo3WDybSGyRL+2HXLxp0KqqDqKFH/ndJroRBQn2VQ6g3/tP3hYyQlBkO/LX7XztfCDp11isYKvIHFCSVsYFSKDkq5i8KQFQGLqIKGLPNjxb9AZgxDZNJ31jqEJp7IiyeykB8pEeWlu5e1LYTCpasmUFa97mSsTaYwtpEFaeDjDRLY8eoOJ+klb4CpfJDRBZrLe1oOD2RHoARMdn07CUmnrGF5gn1GOGW/29vUBTyNGMHAxgDWcGWXRlVDW8Fo5HxXrvnyfM84Favt1tLIcNMusJoxwf3vECnhvfos1nQ08JIeqKKF0gqZJlSewhiUujO61yfBCZRbrQ54Kl9i9PokOzTcvaEk3T1bBHx7fsZw5ObcslWdvbPLmMpt9x940JKn9pbGi2eOffGzT4/fuHb5woWTJ46I0RUaquG9+soPWE7sKitD2GeXL55XllAW1G3ctGn33vTU/es3lhjytsFLA6YLmE1/+Id/eOLUSZ6jT3/mOchD4Jod06cSYW+E5c4gce6S+SUr0zRaoMT6kirhCkBfGxpSQzbYpyvVgXV6vER9/f1ODWPqMEZ1CswkGlvt4YbIfvVM3qj648dP6qM1Gl56Aa4c+y4IGItJqSbwR9w2Kmw6BAJozDjioXcTkcFaUxHS65rRyE7ASbaWHkQ/Ja/ENT0IlwcG3WulV4nyidnA6tBj4nytAn0Zw0DdtXW0eaOmQFaECjUJo2ixAFXMZRcLoBQQ2K/GLEitheKevJK5o8hLJZIKF1AunS/BjxQueh+qNk13w/5UlCG69qVobxSEG8MjVytAVABIeMijNNhCDzB54cxaUNy2bds1kTWrWs3MKLGSphL51HAMTBDg4AEcMBUhNMQ5zro0ZWEjG9qDZNAzDAfTg5RVPavW9L9lVTECYVvvYUhpU+7ywlApvubnrYWcVUX9lAM6CDho5aTHFU7IDSuCZ9Zn4xPp4tQWE+FUDid5hV3Fz6KyRG6FwyW8vKt7XRrUwhxfNim67rQrXvU+019EoJNf4PTZ8zz1+hFlUXfg6HNlz6GOaPmVLx2wXPL73//+66+f277NuLNFYBlmGWuy9mRpjijGmeJuXGTlgmwc8VAUAo31WVm4stk2VYwkPDMQ4Svt6ell0PA/iB4hBps29dpjkY0FFqtXBfDCMrDIKOsNpkxq7GOwaqj0BAUXmShuKjBV6sVzqLvofFxWrDh7OKg5HvrxyZu/+Cu//MwzT2G0Bi8XhXx16Mq1q4NmA+y8bnN6TtPtO7bhC95t3uAosS4dlGfdEkuRpjPXqyKhwcPkASG+sqrJjZGlmsMvRrNaZOcpSM2ghSQxZwVvMAGrSBERmxA5j+kzn/kM+ZBLFYbjWW8wzfRHAt5qXaREUI19wbZs2lpXGjHxaaKqKzVggyjwSSEOW7Mrl0Z+7vzFd9557+y5C1o+bDVvIshCxTeEKF0yD7JoDJgGATsgoUVKn5CACZ5RhOG8HUJc1AIrHz6KRhTHGcJZFJJdunABDsQAnJ7utSrISAYQdcoYtZSO8qIxlWWrOMjjDMg2jsDhkRtZ4GKsArKlGzipMVPcb7/1hpUGylJ9at8Kci4m+0igQvOAuaaEUqoEtJGR60Ddab2+YiPJhg9k8PzsmXNqHDIA6l8sTVO6vaQQRcyqAU2bG6Gpu7jwMwOYEEYcrpViHAKUhuolrhoRqR31i6hf+7Vfs0xC/SKZcgTQSdwjw0N6FIwCU73TeqQFTCjBxChXQRBGuzTHT510kDby6UD0WgCkUPrIAMBk3xNPPGG8Ss8euPc+OkuFbt+5672DhxwOrxJxEiZwVmUqS/T/b//2b0NVQZAnXYqgLy6cO9+8snFNm8MoW996/bVvf/Mbjlo3KuBegAmzgmtTU2Vo6X2VnoCAhBZEW6nBqt0grMbhX+9+3rmqkVF/lgSLN6DqS2gABduUxj/d0sJIw4PJaVGGTBNxX8acwVYW7tcVDQt8r1bnxrwTkdLYZJbTBW4FeAfsnZd3PkEvhkzCeVqFZzgD0BnfP/3Fn333/fcscHnk4QMv/d03MwCYH18pioYBw8qNTW+SObYa1uVKUelj0F6tP/i7KFEdjrhPPkJF5+uS1SU9/L0pVxCEbKDQNqXe63M+lOsn6T7ypj4SUl9Bc8kFDRx2J37eMAiCSfFCe6muMitcbBc/Y+oR3TiYmMi1JDpysVslxcy75pbQDPJSyYuEKAfkkrEMIICjnYWMq4qCT8X5jhj4Suf7WVgWPLnh1RhjEp7ghGWld5dRWTqtWqKv3tRPVGvmpnVgOQwxHZg0gLgMACq97l76hA+pX11jVmnkEosVFpUKkyYwE35g+ihEYRZW8XGxVoXzFPixJySqVVXNy8xBCF/LuEWuW9NTYxlO1dit4ikPNsWUB7/OA9Q3lRwzrCxm8gx3pgIV5GswL7RLo9xqQ3jjwn1fK38gWUmrACk02b3RWFySMeQpbS0Tk+WlKl0AS8Mcr7nc/ZQ46Q08EoCFfqMgV4EW9LBC9RAAHxUavkkiH78N8DnYyylDH8FNcXpz+49JT5+4fFULiJUXnCyFBsEuscudvW2sJZrO6WCa8mq7ghoEEMREU0wz4BbHqxCq2IKJ0jvKFlhcAl8ttHd0Lo3H7tR7cslSmQYIRvlJ1KenbjrPhGSMzSzY+ml81vkMtw0ALI68PTXZsHz2C89+8oN337Avv5GaXGIqvv0331Eufyo3vAXTu3fv3LltK59L/8YNaOSc4ouHzMrmFmG6uP3jN9/Qx1Gw3DF37dtLyTt7Hj4W4Cqf+o1Hcn6evtV3C7M0HXTReOPkyU9/+tP6BT2F7PpWMsD+1n3oE/VZpvT1C//4H//jGWHc8Fm2wtddu/boL2yvQrFfvpwlXhyyzCRs1HwwiX/+8pWrVTYw0JxGxKMM8+rOKCLEkUkH6Np0ecxZ0qKjAdx7GeEjY0rJ0oIEn+ibdJSqAIY+0bd+yss8kN57coVAD7pRfZCf3ssuL0YxvvAtgl0qN3VUFgGTMFm895WK0snqzfkyz58/YXQIGSmBqk3Dw38HoYwoZNfSI4TNiRMDXwutuYiKEGhAGPRwkDfCUPdWSieWibJ6gU+3oAsaum+zK6hDsn1ferr7qKzx0fiX9eaAAIsnsiiOveEnxJRI2JTuvcGodqQnw8bkWtoKXFk6E3UhDTgOR8MfGQueN8EEASgUgeNZGj04lDwry1V5pefNDED2QJXcFV9ea6DGVYGuVZaoNpcmOTdtNI/l4LqTH6kVhwBgNT3w9Zvi7Q321ZSvisDytZZZTtofb7XuQLuU6dIAKZ2xMZNqNWaIerS4AEtnMynRaG3Pf/o//pDH4N4DG44dvTw/P75371ayjtrbdmRzho8Ssp+Rsz+mcFjIloOre3sjmsSFcF8dHIIBkdJIhB/x78J4zBkWZdaSxTx0bZBz14brjC0ie/zEURWmCEz88OD7r/zg+6LqHdRMjiWgZ9FrBKUiOY/Q6RQNIf87tmzHcVHg2uq54rQ+ferM4NDgup61f/ftv3HcGCAO4wDz8sClnp5127dtsx+curH81RLh9995l5W8ffvWIorZM9jWGuM3b0DVKh/4sEW0Z1qPDWeVwocfvs9252zmsweEdauWJEAvFD0z/ZnIjz/+OK+DNFo7qw5R8IeDis8ZCCUsR63Z+GV8YhYt7Ej2NHVBmp3jIKbv/NkL585esP4D+UjGQyySkl7wTHQ4rT2j7r779m/ctP7++x+8Pjyq/dM7LomFi5iOQIL04EMVYjDELoiZQoIzgSbE9I6X7hIbdRg8GE1RefTF66+//vTTT2vGJ4+fIijA0kr24KPLWpp6kaMSyailq2Kpxu24dy1nCGiLho6+2j/stddeFY8IftfabpA3bN5Ce5q+JJqr2xKV5JOU7OYLZ884UUv07si12+M3GoxnldLf29fZ1QlPvpteA4NVgtBW9fV0Xxq47BgHiy5onps3s6UPM1JVQhUCVwYGySGKKFMSqEkoS0GqQEpooAWx5JN282xgoDpkVBDuYawV6gpCCEHFKLXpTh3TJpzusjgYOyOcouAGL18CXOnYqwah7ZNndadLgCQW1dao4sBRoTpMzzbvIgwwgYDRqYa3edtGggQI/EEwlnjmmWd8hQx5gzlZwjS1RrS8N6SEJMzFKYnC4rJS6MEPPrC1wf6794nDGhofe/WV7ws/tQorPXX0yXKdMxcfs5LbdW4+AVftJQa0uPdK/C8lWMwUDVy5LjkoNCnrlbjysjmMukvC2F7RRKwU+NccCYWnzGMvMqFuGwaw/scnFwQmaNEMJFKARvM55uXj8BBFnfAkFwNKqHHswr93Fcgp20MtqDyL644PmKLlkcaQGAvFg1jUUaeUCZe4zeIxEW02IpccZYjH5GInxeccmIyv2M4VdvLF7LeNpnFBmSEphlaoVVq++B+64UD4EMhxumIbzRtkKyAPhU1B+85V0iabixi4axTu1Hpe3U7vG1s8SKWXKqZ8MTGZb/x/rK9bEWP4ukOSmGkODKk7Hl9lYSyesoCDbLEaP4qAEpOmHPRTM6IhxcJBzQWSoH71mFETItKjyKAHyjLSMlpLlSXOW5biUUb4onsvNBTDEWKu5ItPLTv75VjffOU11F8WkMXrr9YkyHHNsaTDrgI5g9P0yxGJ+LB9uEX8EgSfsUemOxIKDKO5KjSTNxgKlhrYXZ41Y86nsXmFE2FFTOnqYtpG0lbyIFotgtLbfMixZtn6uJw9FSLG9YIDI9nwCGKqyE/FYTgy9a3FOgm9EidlWdUaODG+Yx5VwklJMYhxIIZLuUBTq6jC1ZgahIUJKiNr3gBDvx1JZuittA5kOaXhtBslKsh7d3lLTYVFrIcwtpSLtYFbJDnyVwY25gfgnkFEkWAcxIeoYZH7BEwaNWx5dSAYSsUEUZtKwCuWnr1kG/j9laf2YINli9abmZnY6NBjITWO30yiMqpECxWngQNOodF77jWlB/B1Z75iGsFzL/xbHERBg46VkcqtTPAcxhSbjDKk8dgubZPzrV0989cnpm9O4LzEfD0zU6N8VVa1TU6M/uiHr14cuLxl46ZjR4//4i/8Dw8cuBeX9O/Aq1Ja2rnyYPLdvvfBB4cOHbGi2XSl7pKP3VmqzA9KlaWjX4A/45gZAHl+U/qcbhHks3nb1okbY9evDl4fuvr2m2/YiYiKxjJdD02rxZw6cdxEtPQb1/c/8fhjmzas53zcvW/vhUsXmbPxx5sTnpuzS6Nu1/bQ53Pe8KEzZ87RYix4pRgVW+RYJD9NFdM0ExWGS7BS1UKs8V+3rsvTR+iVbNiom8BkTJMMzjoLCUDz0oX5+il5K2nta6yvzaUiXB4UgZ/y6vIwCt8UIaNc+G8NgM5UXilT4RoSebEBXbFVJFOQffzgDwhrGhsTU7+05hhYl1wkRMUpEQfqGwC1RNKNTED8VMrkJMM6GoOVDme7iKf0yQxF8BmlRqYVbeROTt6oouINtCHQ0upwyBZ9uvlAvDp9+tTw1ey7ilEuHIOGn0hWTfKiF9Xw8UYRHkZHx9M8SowAE8qDYTDPeQ3R1I6UKy8qXLgtVy0dAmHO0nRWhV/pDZByaYw4hmxNyv9FSWfMgxMG3G3tq5xSrqLNHTFBsUvctS3h4zeDmxZclorhDNHFNH5W0iIcX0p7/KPFxgdXLg+xra5dtIvJNeMEIyh6sLWF73EVbK0wGRsfM4aTxXpg1/LHH4r5e+YMNq3o7FgnG4WiDAR474oSzjq/6AG46tUxcWoycfBGUVhmfkGFGU/u2LEJErjgJwOyY81qvHYUH75bHypi6YED9585d5aZrh3qcbQ3z867NhW0fceu++69d/OWLZbzaZYsY+haPKgUI06mFLCqX2SYByoOL3jCOFP/6x//X6bk7Jn60z/9U/wZ14evMfV4jmnOCHHnGhYnPkKMzWR0zj6GleA/TBwbGTW+J3y+0iOs3h/+8IciglhkjDzKhU1vFxE8YR2imixiGbBkEY0e8EeVu0gD4PYXFez07rs/FlNYfbpouT48pC3hp1p0N4Ch1FjwLFTN+L57HgATSmauzXXwhRtWUUDeoMs9knNr4froSEf76unZ+XPnL2/avBVRPskIpqEqW5bLQbOXFm44wL5XtOIc6UUrKcsnDRuldJZ6hDOLs6oJPxnrPikX24D1oGZlt8wLjVH6c1kF5ZRZpWSoPePg27siG+ndFuzfinw9AaZdGRx67bXXoPHwo4/RPvJ29zgNugOLRIAIaLP7lTUklrGrYsjYkId41OUWgGgY27ZvgQwMMVPpXoqwZCCJ1jkh9G1F4+TMtNPWOHV06TYA37Z528DVAecTnz539vCRY7ikFWHjk08+CWfMV1m0g2cMxze6QLkKctfqqnZzxyK1jCewRbs5GWKgC1FZzz77LD4LKp0cH9+xbYvBRujq7iYwRBTV2GKiRsrIZ1nYIIGLq4xnVvNRKaYw+fsxTJr7DxwgTkjjoLJz0drODqPNN99+a11fv21ACxsH7rl7v3Xkr736QySYi0AFnqjK3n6bNqyKcLJVZ2ccyy6u+Sv/7b9ZgMUwsoyeliIzdUUVKaXD7BdSPcex6JasVXhq1Km/6CPvF42h0t6lYh2yCaPgIFy1FaZVB61Pi1exPyRwLaxoHLNcbl7k6JTQf1bcqlZLI4xzMiXN8oEny52CsL+HaUVZlsfoWYJUDSVYGZsUg3Wp6IqAX1RlnLENja1Tc5wrnfaC/OJP/6zz7ywweurJj//5n/zhioWJFQvjbRZ/zk6wZhjQdy4kxCtRLBfwcaZOCoDrZ5QbJd6Qg0LJKvn3U94gWS4mVCxl2mfxgihjhU1j0aZxRyCHGXGU57gxxirzLdhSYnpclo1SuFrDqvQxwChTuZxTZXwRzKqRrMCCtgGAsN+oO5+0hVjey+NMted1xnXpPORanNyAkHZqFCMBCNHc5fKsLPT6hSikEY8ksDT7dhMhCkG4Hn9/PO6wAJlRKj1natIHAdwjPpUbaNIjqKYY0u6sVoJmKriYrAntzVdH8qov09iF2LDX6uJQgTEZJ6gQJXuvOKzQ1spqwHzRSHSXHjDTPXTE958VAkLDIWVw5JeRrWrMjj/zSs9xCgAKumNUEPgZMwaZZOIjjD2hHD5cG+rVC/O8hHaAQ4iVVxzV6AWkFioAPTgUXcGjhyjpdfo0W0Wb05E3H3LFWovYFTYHc0CgVWRJAkBSXB20Kihfby+UY4+jQ+lymkcuSkPIrcVT4EREl8YA0ueKfAkQrgOPjEs1qYhgovwNil3ITPOpV6qsci/yGDL9JBm+EhXVU/HxHp70/cSkZmV4k82LA8tGK7ejPeCO0WwDw3vwm5pbLOXqXNs7MTPnJbpQSp8XG26SXgUtLF26UFEJySEDRYRkiWAtjaBIhfReptCiP2kMs5rmbNi5N8Znmzu6LwwMj45PfuYzn9u2ZfPU+NiJwx/s2tL3/jtvWvy9aUNvR8eaXQ7e2Xs35Tl4eQAkEy6cR7zeiKUixAYziRS0fefuvXffozh6XvhlPaeIMreJHN6oWSP7dA3GLasyo97d06PjgNWPXn9tlWmFFQ2cbhYxGgDovHQoxIktpFvR5+oarg8NWTrMapszBmswdszm9zogQRpnz57XU6hFR7KcPn2WFYADNiOqfbc40Z5u5kqntYiMY2ctc+iQEPjrLGK/tqzesHmTtQd6PX3fxPSUI520L145daR3wD0VgUaMx0Dlwk3PRaioC5ejhFRTrZ1aQRBDow6XZQIZeSWW0oOU0vA4q/FqUMEk1W/Gr6VVr8RU8GwVtWccu3p10IY99hZVKN6C7KHio/YlBs1PwKEno+eqbYDVZVerIytMs9lGWqn3gADujZIFAWlOacdFY7jHFHawRHPTyPAYV6Y3qOD/0nErAlE969bqGnAPOewu0FCnjgD3BgIeIIZXsBJhRWNoUvhj9TaHZqyC4naBOSuU6qElCAk4UJKdMlEoRimicg9dsuM8HSglNCq2nrMDgXYkWwZI4bA2TuvxjxAeoT3pu3lbin/BJIYFomhnmyFNgtKGrBJOyNzA1UHU8QZevHyJAueTvTaU+JfW5jb+fhxBl5E+NLhgYAsHOoP8q01VCVrfhn4W9fJPPh5KbIUrav+NN36sF8NV0fym9M2tyKZhsGshgWQSPz4ytXnzBiKFyNA/t7BhQx+ElM2ABoowMWtGR+d7elp7u9eOZ4x1Uxe2YWOv6Qla4+L5S3SK8w/0tSw/Sx5pepGbzG7Yrd+y8d4D9ykUcqxYqDsnlcbCXyWqpKpH1AdbzVcRaQwz/p7Lly/BgQVGEFWw9qM9gMxy4tZV97DFL05fuQR0GABdzwKaWxnPTGe+iVFLBPVH+gEr93EQNRNj0zabV6nK1ciJlzTUAZc8JwF8eIhfeeUVDxzAEPrbv/vmY48/Dj2YwCcO7wsXZKRbFYGfwGIXRiHH4XFXHdd2PaM9Je7ds48nRS6bFDEgSk8wgRzmEIVq8GYq6+zFTCyI13/iiScQpVx0QQnzVSrr0NQEHwDBVYpx1LPPfFrdyQIfJQJO18Skbm9HhewMU6yGmGfiQuA0XdmlJ9bckuCgHTKygGBg406xYsu99+zbt3eXykeaOCJcUpDBEurkunhpALGQMegCE/o8H3S6ib0uOxmt7apxafJa+4FLjOkjR4+qDoRARrOUyB7U7KkL588zKIRX2TdKF0HynFlgSfQOQVNjYxfOXWR8dbR3EnFrsNCFIcpSOlRhpY6QgBxc8gnfMt3U2Cgl5lStRGYk9okvAM5eSu/lhg39UMIWLwWlqouWlfEfSKBqRPCjy+gRzvLqY6geGV2yIMEElNO5GeveCwH91re+Zbdq40NDVpzcummzsND/6w//6J//0/9J34Bpo+M3pQRn69bNeoKXX37JGpmf/dmfZSvwe1qjIiMbSiMXX9TevLJt2cKOzRu/+tWvvvbaD1qbW65euWx3cjNghs3qmgXnjpkuDy5nhXiu1V1eeq/xxleKUfVCGkxc0tP87jF1c1yXDo36jmVAXtSjlIwlGtNAWN6Z+RUjk3PjdiGwP/9t0cwZIcvOGsTtgI09HIPFwDHOxSWr1KdSSjXFWB1RmgWZ3BkMNYFUMtLITmES/d/Y1NbU0v4rv/aPXn75ZU33qSc+/pU//oPGW5O22WhZPtPkDGICOU/Dptcp/U4sJWZG4BQTuZLpXtGjLmo6pZNkJLhVXmVqo2DuLq+XEAz+tt1EjtYDMnsssxwBjR7mb30fPlKsxeTNACCmdvo/F90dl23s5cCMMU1XFl8brFCN4To73AbUT/zk4/bJT+kLXbnr3ZNdTqEeWfoQPcPK17jIc0oq1mc2vlEoG0s5pfS5eWOAwo2whdGZQZoaUxb3r6tWU7KUS4JUQVbY5m7IU5+VTeUmvh+7s5R6BdeKejSnCrF6FSCA54JWBRg0CvBwUN85Y9YqooLaOhAtyQAwSMoQBa9LFqUDnZGVLwU+SY78YA5u67zUnRnvVGPmOtQwsBaoTPnrWRaeEJbqPAs29jeyY4DCzSil4OiJY44TKm0EkiDp7xx1bbBhzT/GqgtmN73hKgK7YJdR3i0+3SpRctUrMxIVFxMuZXuc1CRUmASBnFAKQCDgpU+e4VDxcXdJ5o7AACwrMZCg2nFFvUd/l4kUXilp/ASBl6NG/tQKDXOKX6z+ZPBLA2odaSCWEFr2jFup9gzhyqUMFjFmJBZl+aR5vWUrbEy5trt3VXun4fjo+ARFSg0iAfPVLPwL26PD2QNe+uQCzht0+VqfqVbUkFVU6+Kl0XfQnPpo2ErW0d52bfh6d/+mhqZVL//w7W3bdz/+xJN7du2ykdzXvvLftm3Ue7Xds3fnzq0bmhos/FDpt+lkXZVIBJiY2XbWCnyAZUzrtYUiszW7e/t5qfy0VzoxsBO3ot95922aXGfdX7aGw20+OOjpqmSBJAwNcYBin0h/+sRJIwFWioIqthBGLINYyH776vblKxtPX7zYsS7L7fRHlDa6yMnw9ZH33vtA1eGGIf3oaHpGRWgy7e1d9nv33oSBQaypY+421YQnOlbbHFkYMM5TNzFu3zzdgVDKvvVOu1qnMdSwusr/lfzEjrmdSVyrLg+31Z0G4aVWAA0MRyBGqSBoI80FT++RxkgoHaKpv5qYizN1xFBe3RqjX1/jIsJwI2dFEfEF2IHepDei0r5UNEIwPwIbBHL55CUIsCqexAy04IS93utDMRAr5GJyQEwp3ntp8ONQIDukQk96DPGJY1QTtdmGjUEZxERFXldBVY/cZUt59Q6CosFUlq/KwgFwFMFsQzgL20w7v+TxkyfsrSQligRBOPVOrUGDmwXOGW5HPUTI4eNgqZs3b0zZ+bGgGuVZBvaV9trKqrSD4AEVGGHCBChcU4qX0ND03CkDQ3SjF2YPG8A4NhwuRryU0K6rDVUN+BAABFFpnSZMOV8aw2qcsVesZoVGPyHW1RkrEQc61maQJkBdXj8BVMrye/bGcdKR4xvWrlvXqyMxfTdtx9+FnBYhXk39vv/+ieaWZZs29Zk/PXP8TDwNCwtEB4VMWPLkMvUD70uXLsCPtadq7fR41+6NVvAXJ5LFLrbXzcY7vGOK52JD/MR45tf0v9DF15sTNwauierpxi9A2G3W65A5YoEGb1QVC17dML61QxturcnwNSqGFxx5sIUbZSQNChle5Mx7pVjqwNh1vDHrFgLkCgKr21rN39FfPMEGAFbuwITQUq38IXr33u4NzjyRHRzcZAXCwXMR+4DFa9iyvIUDjYwNX7p6efdduxRNPiAspcuCfekVSgY8KJegsBGJrD7XewhQJdZXEEfbnKr7TseYM6CWZ1KyOstVLTtlcnpeUAk2wlN4OosWK1xUEiZgO8KreuKcuHz5yuFDR8wTMcEthFDfckEAx0CDhkauvhQEVQw8evQw9n7soQfv2rPXnrLEwEGSTmzq7OrQwDJ2dbL0+A0nPExNT37w/oeCDuy7Zd8zTDDUAQ0fMNmICyakQkGkFmJV5lSNWb46fYFpZaifYbSNI5Gp64bb5SsDxjBXhq6i8a5de1Y1rerv6Wcry2sq44tf/KLaVL/gVyEkh2QjIliOYGwXH1rCkU34SIDJVpu4+4rnLtymO3AYbl5W3GpTgQM+6DlwCTcQYokC9BxtCBTqsqBlcnzPTmOebC2K+YSBHGIsCJhgfKguZPegCD4saDCGbJQF+Ks/fL23v18C805UioxtzavNM+zeuQt/mCfCIRXkWCvb23kA80//9E9/4zd+A1sS0Ec1z4lGbdNDmwMxQpufHL9326ZTRw9+46+/Zb9dB6UnPtDe+ImtIGP2wBT7q4GyF5lN2eCPjmY6VY7d4Rs+kIf//5feM2nJiZZOSfkVsy9Wrf47rJOA4zYrixqamB/T87evjpmAsXNZgiuKhSOmO6qfUaAIQieXwW2BGVOSEWU8IIELyTGyCX01QlOteSNbqTocsm3ijAGAzX+sAV6xsq2ptf1Xv/w/vvDCC7ZMfvoTj/zJf/1PjQsTjbcmVi6fbIVqzCCmW4YT5M3dFaLKJEzFoWAVq3HxoVrGBRlTATWX9DgvY73o20X842xPrMTiFcvelbEW547EmFbBVttUbyriAUNYqNJEkQZirFoeL7gZchQU8xVK7nF4f6T7zJt0QnYhy9ygTzAkS6TUHwibkLA5HZ1W3sdzn0mH2VtdHavl4sBPgeF0/MiYe3uZPbjC/2Bh501hl8zohmT3siYnN7Usg7YglQnhn1w++eEeBAoaMi5SbW/NeKYL/IJtCioPZFuuRRqLiz0oKdBAos5sZGO7GBBm8yWmiNAawcsQ1BWhCqgAz1ioZK+IFb6VuDUvS3GLGELTyFF7gJ7si9MvgRdhhk81/dVLRdJ4UJBLrdA0n3Ab28I+wyvraWr8MTrQrgZtUWIgXJyaZRxSaqqCorwxR0NWKBEjyURaoUZzErh8dYEcNIpyru/rfZHYTJ3FbvOzXtIjcemXL3IvSoiXGVuWOZbCutgwtV4qB0pDxsdCfzQAcW2aycF5aS+Bm5Gne6rPiWVUgRAIUZ23rbzRcbastgx/aPTm1FwkTNmlshKQDQXPyJGxstoDFUdDmg/nK6F7sULPqEulnD174yvVLWPlTOjI2pJWBk1jU6t+8tjJs/vve/Cxx59gCjN/jx/74LlPPtmxemVHi+DpFVM3R0jmpYtO+bysG+LkEkNAh1fTmaeWBmbK67IVqkSdCHa1rHJi6TRVbF7aeEBx0NYvWzzg7uxZn3i7IM9A5KUyvoIn3HSpXWs6osNthWdDz3KSgG0GXSwWkTl6qJNnz7302mvrN28yqCAqUfKNzq0bsd8gPAFhBUFGpEP4kwOSm+fmMaqF5aoTxwrvOV5xDDTZVZbUOIbh+iMvRYGji/hhe0b+pUfzTAvrhjJEjokZwdNRcqtyNssOsp/4LL0uLL6tcnaNylIprBeSyZxTrt5kzers3YKuOn7IJHMJfeF6N56UkbMJPtCYnJk0AG5ri0+5yrDSfVe6ghRHnCp8D4og/lCV2EQLzWMkLzqltKMZ0RDif3Qrxjy2Y1Gz5M12JAZhtLpc6cHXtLNe7OuqCNudcqvZjESnzORQogSirG8vzHV0ZrRDJGAIcwzUBSPHS8mwwht+QDbGxOQk/5r+jOPAyzFrMvidzXkR4/SjmW/ACvuvelO4OmP8TrSQ7w1FgczCqCgNNFKyuZfLJ9zY1LdBgmH7apZjBEgjkn0nRRB2pCrRgRiKFA2HybKXPFGsRfikjbjYaZ5ld0EMIdIK1WIqm/8kPL6qYrkArPxnpeC0cqGBbywcEtL42GN3C7Ji9zj76PTpk+fP33RAU1ruwnItBxR22H0HtjhrcSIzJ8PIoCmgqyI9w1jxwfPGqMaDBj/BhQFHcOea9pHha5hAlrz0iWHU0ry64HQLfqn6+ADCGg/Wym/cvJE5yGw6c+o03/8br/9IWUzGxx57rCqODf3r8dq6MnLgk5OaYYKDlXGK8AxnQox4Qozd1TDVWrT5vr4slymsyaLy1ROtoi8w1OySZnDk8CGNXJcDfwsyyJ+Q2v4+i0dVQfbDQiAXuWd5XeBjKCoEHWHp4aNHZm9bBduO2J4eK8odCutgL2Ew05CnJhxRoWqpA5fYLX2JpgNhKAlDNBuA4RDwZm3nGvDBQYXwDW8Qotuhf5BGu8HZaAEc5LOYsYJKgjYOYKbLxkQHDjzwzNPP0k0iT77//RdBqMyUi2ZESzmerIU0OEdZPKExzP0H7mO2UnM0hdlOVlz6b/ZcQ2M28JtfcLh6idrveOD+A+YrRq4P0ggYCzJUzYESLAaZxq1pKYUck7wyg5Qxd1dHtMm5CxcY0LI4TVJtmsR0eS/L5o2b1nZ2mY3FrksXLnav7ZmbnlN3qgxzQANfC7fng0JVGW54D1S9rNxQFygFbcuWbe7Flb6GT52XxRBCy1FlVIDhpYkUy8pVXxV1NkDRcTa85heJgUVySOyDH3tAM1OK4np7TBHE36MIyHiPRnWhskqPkjgrtSaXNOmCl9k+SzzbrKPd8cEWpbpU3QB4SHjj1R9JAHO5BJ0YAACiHZgUUn3/5b/8ZzWiV6BbuFZxz/I7kmAiSJXpJ2lAjoQ33njd2mx7BUCe52t2peoY4UaMaWrFjzOTFkNRWGNRuyWSPUYDUK76kPelx4WPN/XyzKub98Ikor/yjwLIixLXwb9rUxKvxUbqzPj9JyeNDHyNfcOjwXr3nzwFKmvsjlkcD6+fCrJ8MU7R2J1RsenJakhrEEkiFlGiQTiGG5c3G3QGnZULyy1SIi+Cj1uxlIEVnBkrujzfmebemrFt4ClRERkOaXpqzb0onKSWJOE3oTpSgCwAAQAASURBVGvR6mop+8QXhBdfxvrlPSon7IqEqGClT5YEcztHdnGcgJWVTqB1vgiMWDcsmnQs5Niq6SdiQheCF1kTDkLCr8Rd56rIJSUTNyo31metLER4Lvj+ZNwiAbqMJ7JJgxOzSoOqdVqmFqI9pLljAoJJDKUHgplYlt3Kp6zoYncdWBRJie4IqnBIrYobsQ2Rr0lVCIQjmoKh6svwoZgEUOUsYGNzG1dUQ2C5IO/SJ1X0MDBk6lSgZKuN1hZyXgZK7IakBIlI8EcU8lVpioNoeBPOJJYmQ5syCvCMPaGiDMaCU4Fc4AAgxItgZNQUvLNAHdPzvr6pbP0onoX0wopkUN3s/pRroSBstXR5KQTNgeuOAc1CTtnmQRx8tyLNDQ4yoiAFZg9+k2PMghgQLEC745Y0UdpQvYOn9HfQ8OC9ywPAQaRcqC9/yyiytEpp4IN6oNIAMwOjblFHcH1ScBUDhKZFSKFaqXoJMtYvRZomiuIyGs3LvKrFectEw2wCbWfxyekx4R03pq20CXW0KLVJH0oMBwoNXeDLrkJdtS/zQP16SSA9S6MP1Yy9AQTa3oNAB/qpUnReuh7br9sPRmLdKBNHluNHj0mmUPu1nBu86pyha1cumskXNsNBBppkTipi01O/NO2hwx+qJvypDimq26fz5y+8+p1vf/nLv6brNFFgkzdq3NwB79vVctLL0aOJntV3CPjp6+6zJWRbxxrQIKbLYAYwYJ2LCppaDpONfASR5hylbKCErt/6rd+ysRtKTZgbQly8cEnfzSpguJvgNbxV7WvaM+suqhPYYfhnv6A21Ol9FEFqkIlwfOMKxFheHikjEAyh5sbhEeUnQKi9qVMuEgcFK419UgFYwa2EsYqA87lzZ6RhLOEPIJohVnvWYdVCVRlISoSGeuzeEIcxIDjDZpb39q3MsKkmhqaYLxAM0KXvaO1o5xZe00pO0AtPWSKNRXohDz6GZCKpKb5X5fLtR0gwjR9oJS/w7PTkDOlTvO3aqRrRSf39fZwdxEfC9rbV3AOiZ/WA3/72t1k1sdPaWUozd+3dw/ZY193DCjVZQWxwqfTXa8+cPsfgaW/r0CTt6QJz5gTcUJrsrW3r1oZGn1QZvuqF27payFjXVCBY9KEWsqEhTZIDCSOH6MI88iZao9KImSQacD/VCxtSsoQnVTeYhhZ9uvzG9VEppQHfiAXnjR/wUI34ygdNPmucAh5K2VT6NejhHo6BrB0xjXjGfQWzyobs0uB1TuMdz/7ssvs6NyeKaYaNxCRGmjmNDz/8UGK4Geoot5FJRDIkxbIzp21G7oyhBK5QLohRUvOobbmaV046wsARgXaqWnn9mkgJ4ruGscL6lIwNxIL0DFQxpmdqrWMfp4P6qNaqNtDetoZqKhb5EHPIlALZFWuFxUQ8CkMQKNdKiRkwAVMMHZF8144eOmxkZnf/e+67d/uWrdJwXpEnmFelo0SmMzgS4xTgWr55CcTDUCkYRLIlIw3sP9rMwlY4Q1Kxdmc39edIBWmwj5XvABQNELsVgdcqEr9Ukrv6k0XlVbBYpyxo0ClnLpx3uCDmUBySsfhkRK+UvT39mzZuIXzSF7bbMrKTgHgDPhZBDP7SezaPGaOw7OlbwmbSCAnO6I0hxkPaW2G1u2cIV8TQLhlKvQQEf0Db17UXYoZwN2+M6zRFHw6PXOd45rih5NONxtO3IG6sdVXLz33pZ7QNbCEifA90NRlgUtfiMEdDZruTdZXuPCVfbRCkOFmggbFigSCvdKM40xqINUlqsyDaB0XiF7t7wjfCY34GwiAL+pLXV/LNQMOTdV1rrVtpQ9mq9tMnThud+wqlr33ta+5YLZoLu8gM7mkwitOYMaFvQx+2u1QQpQM+cnwV80MYDCNpOgrdMMAU8EsvveQIC1+hDRrlRlQwENMMJCrJMipOERQ3mJxPN29kTglvCYAScVt6NUVUPKMrmrrMO9GB5hb5MP74T76i0F//zd9I9+DslRVZQo0JhER3QgIhb16JnLjMgBE56HlpwtrIHJm2+olsONdmzlqRMUf/Oj26t6v9te9958SJY9SNPfrM13HKiMq2koQRDiP+G2rUIIBXMsGL/neweLGcsBql7njlXvWFcl047FP9aiWI/l+vX5LHrCpfYlcxLIq1HfPaOUjWb+fkwbigwhNAmO2yUtxMIGrdjwK+GItFG6Y3uTXPBgPON51XScAmMRCwm1Fwg1yGBRmfMOtVjf3LwHSS+Ur/zMDpStklojH0NdRvLOZFhNlbWW2UGJUYl9VOKjgVYirhsZdKDr6qWGg0T0WCNVYMLJjhDwykF39NQrTWwjce6TkzLJ7Bv3MHxIWLpcwUi3Bmce6+iQouJqcU2rM3GQto2ou0lhpZmoVI+jKfkBSBGULwyL3qJQKJM4br5W6Cebnul4tZrctLLEmpPTYI8PTkRFApPmBGOhGQJUfwqKDS/BFRSSikLFrkVVRgH0wS9iOELN+DTSFPlnyqeTzF/lBTixMIPrIepcGxkiOs8OAeZpZk7pWu8iClKAWKXXhMGUncuqU1RW+0ry4QVKLSy7Cw2uYFGRBkd5WCFLiIVX1ZS3QvYz0rl+NPQQ5MS9FJVWak4w4vWSKHNa+gplRBRkTpbssF/xWcnJoMIz7dYnE34Dar6eZ4ttT0T8WmteQKKGlghTmaBiT9hAIxWqaXd0BdYVrFUxFSBsPCVXdXgRPWMR4CscjA0utw+E4az7FEi+tdo6+fpJfLM7CBXGDLAox/5KccsyZBcCU/NWURQ6kQk71KsQDjDUCM7MpksI1E5tucDJAjkeK7wQHAa15dMKJcd954j196DbSrUHdYSeaSkZb2AEh4WpYTUI+E3H1dT++CiYnliZuVhLpOR7N5w8gwx9bp64OXZm5ca1wxd3P0Ko0nhh6qtCsDi9tOEdQmGwCGOq+tW7cI8gFBr0GpKuvA/ffyEJ86fUwWpig/r01K9Bp6Lsig+LnnnrMUTYMCSl7B9zgJMRA0K2D9lBJ1NL+atUyRHhaSjqi79t6tHV66MnjyxCnWv4h//QKdWSPHKEaYMExxSUuV1/Q8ozAcz/TUfOFfQ5aETEywbViK3vtaBwDYxcxAMpWIM9DjMuc+hw96OYzWr3fOvfiiUVXMnmFa2XgQ67Aa4TDRsirbZdfZoQI5+IAuwFWcr1QdyGY2lAtDFzS4vHGgNMwJ3Q2YMqBXOxm6Ngw9CNcqRgKw1JR6BwcQRVQDFEtTesOKiclxDLdHIgcjXYshjEzTCCub1pgVsTYSq418tEQL+u/avfPFF1+wcJRvi4+MUWFRxLZtO8AHjWqGBq56D3/Vd+b0Sa5OfNODI0odgcZ6xl6WAF5BCXpsFZZMOsfizpYmHSfnvIPHyzizHI/taMBE+9iuyUsQ8n18grdCWfl1K4kRWGiMv5KaxWpZ3F3JMhXLgcmA55J5aZYJJw1mCn/iiXDVGgFhdnKKlDHxij6k2AViiY5bRibd1almV921GXBNTaXQctwYsfegInADesyPynbyAAttAVbKZdyvfvDBhxzVhHEPPrjGYMtah917dpqiUnn2/52aNhGCOdOGDeu6O1pX2Hg0Pm/2EOjiVcxrQQIoTAcR9iqGCGIiabbQ1oAB7QTr2NGT9917ALpGOR/72MNsKUFXMDYFofJsI6tErhxOb+tBDPKshnawgaW1dk6hMqm9Kxcv2fFG+yBw1kezoFmWMGdCoYqLF80QQxsu+8TLSzKMfpSOBkJPMsmuGUJ8sWc21tgZFlOcN4dBukn4ExTb9M40r6IqBy5f3bpt2+atm9RWdR7MLzSsW7WWXdva2GIrpVVtrRbq9fc6d2xZ57q1TYNXFCLqRpCfqO579x9QkLF+X+/6OqVj0L9r126VTaHS1ZYumDEQCE4CFK0JUUwwHBpOGLpwc/wxEYBBhstWsNNrAkigjUbkeJBAi1UjHlxe1jkE1aGa0V4mZ9rN1RQTOTOMJFVEkLv1zTwfg4NCWW5qhCYxvvO3f7Nz+1ZWqUaCdVqOmRDTERREhHtlQ6YmJjsVxPo/e/ail9eu19nJ+GMuXb7C+bFz1x61b0M1JeKtu/Q+OZbYAGB0tBdP+rptztZ7NTsWXDt35hxLl0LEZLqQBaaHctKGU9XEUIhsUSOaq9Zi3II5ds0ne/hj3IVMAqBhG3io4nXnuvbdfZe+yHFdjoT0iVBZvIsQ9Qsy/B/+2ANPPP6oNzT117/+1yePHT9+5LAxAD+Q+7Q9rGZmsI5FDhfDBiltdTwzOWVgrI6UBRMkECo/q4LzUzIoEUVfVZMRRS39T//kz+x8+ru/+7vW4JsmoOX33r2POrMjKg5jWl+PZesjdA0GOYha0STZmOdnfuZnYuuIhzEkjmHdMD0zNXz9mjWAnSZSGhvsSvSDl1+aHL+p7fCR0I86fxrTGDZm4O2G+UYHoLKy05Vz0d+eZXOkh4Cne7kYJflJ3xFIhcTOLpaFu57I1/IzTmo9K3nL27hgde1Jz4Lg77S/mNWAwoObW3k7hfWAz+Zm9sWkyAggcLJvqUIBgShzUoFxcMR1HEsEAxP9obOZT5eWj6agMjRYtMnZMGJbuJa5Cdjk2ZnQEKBFX0WqW81WBTvESG+7lHQA6S+VVUrMcxRMXE4ZxlfyC56FomK3OT3RMcIGL7gNI2mYP7BOMKyBSjHmIKTeY8KVbU8wt8JXAGilT0nogpeS6RrCQGjJFs8GL0oxXblX4ca0rGOq+IldxWQs3311BYFy1Z8hbrHuFrvkUopqis3KUONLFLjnrELv5YWAtz6lwWJEBtg5a8+bSmCJQkqcCBZEJSmtlJpaSOmEAdz03JlXiTgaL+Qn2mOK5/+aI7wCM/Yu4DKWuHmpYFKvZF8sNxCCT3GG3XkJwpTVjSWNDq/0efxQoUKH4j0qirhKCFkwSt8bnofYuLANDTKl4WMxwCnUIrG+FqkPKw1F8T41FQCwT3CbjhSSFLBuXFsBr9AicSWz1EthkYIj0iIjlSUmTdipShahJJ6NPDaHz8mUgmJxF599Hgv+9JsQAhEFGQMgrMyUiLyPNVyuImJlHWGgFAEI7qXK/HVKNJQt6Mg7heRfxLQsvfAuHLi9whZRdrQlyP5meF1lvgzZykxyotYyWuZPpKNwtZoX+BwNEPmMUBYGR0Q9R5AMpg3q4Tyfz3yfen6mSdx2Rbp04pVMrKPENDGdlJcY6w3djkC6EZb0uZ9yIdBXrKBFpfGV/mS7+ASCZFSuSNHpoRG7uzRlRa4dATM3C5/YxOO25bng3I+OdtHSYm/a7Lx55NhRXxXtJ2i1LKe40LH6Dt0NY4g46VB0GXbJe+NHr3ED79y+Xf9e1gycoeF1Jf/qX/0rvZ7sw80jtHFXh6Om0i/EvJ6dH7h8xVeoYiOUFMd/3NvD2NiAIsBtM3pt9CZ/7PEzAJ9Jh+Xs5uZW5rcVu4iby44qjA2bVi1zTlOtbp4p/Kn4M+hwpr5na6KasjPHu3x5B0Ikw0MWFwMRkr4yDJrWJSBEljU5j7KLXM1yAwnQWm6bljGmkagBFoJK0fVU3xa2Kw4oMF0+IZ+5rArC7rY1mtOtBshm48gJ3ieBW1nwWobKDSuMgYSxTXNLDdn6wRacIxAjVLadMakBbO0EnUOlFJev6tpLBYkmmBTmXM5lpwycI2AxBgZSnkePHm9dlcgfgU445g0jSrfCOmIE963P1uciq5HPrFbOu++/owpQyt9v32TA9ci6bK5Pm7IoDoskIE5sBpIAE9yQDLuAAsd7u2uwiDjklai+HGGjKov+yCw9ebbiX8rqTKFooDc3GadbhW9ppwd1hGrGFcbaalJ6oBRXQNXN69VR1vpzpKo1NSs9tkigGULbVZtDqniFxsL0M1OkpdDzxswmZ6zx5eD3ncte4A+PrVGuebIZSxKcVgaN2ojAJHVE1PxGLeWeu+8lVGwhvPKpURT+1//yhQ0b1m7buvOtt47cf/+eu/Zsfe/deHAdocx/iWpYrl8/4efU5OyNoYxgiAiS2JT4ogy1Er5MTzOJyI2vnln/1ogS/suXLmgPDEowi3lkfXAP65+FxM+HXywlpBjY1xmlMbtzLsvm7tzAZFogkMUuFta8/c6P33/3Peeq6tAVd/rkKarttdfe7OpqI8pMN8APHjwp3mzXrj78tc+9dqssoyX2bl3uydiG27VrQ6oT8szH3Tt3KB07VOTli5f4U7VtakLAt202rRxAKWjahmRyubuQrIIViq2svZrGGJb4yktHKF3Az+7db5AwpT/88CNqhaZgxqsA0DAKyapTpUJDMgqFUnOYOYkBXzM2AIgltDzzPlQ9VjOSq0bAahd8WNjea7HcyUijoRjcBF01aatWnSqO9IOvHquNi3sumFOnRms4o8p8JbpGnKBpG9/73vekUToZYAQDAmEXsJV2MoTqOnLAPQmwWgK04I/xDBFUKAxxT67okvbdttLXwUAMFfC/Z+8+mH94+NBbb72FaTL2b1gvCsje+WYAsgvb9K2cwFX4QymbTLDygeSI3sETwkNOzP3hGxcL38OVwcvta3AMsVoLrzlBjT23d+8+bzxPTIybHeEhSlRB441/8S9+R7wNT9Kbb75pr30IP/rYI+qLrEJM9418hKAUK6AxbtnJ0mbJBABj085LdC98POMekpGmIrDUCZSGrP/3f/G7aRQz02fOnXv88SdIiLGHlDAnFerdG90S09mpeVZu4cbTTz/tE8bidm1x7k6XHL0+bDvqDdu3GYK+/OILdibSl9ICmGwTYQJCU8AnoTmpUD00yzhv1KZJRT6dGHRxHkA2VqM7tkvsXh8g5qdLHanQYglIUOwRwwAXo4C7vdjzPKmmVmcdcmK7Fz5loQux/hfNVvVQDKEoLwBpwWKFFsvGTUDEivhsEuRh/0YqrWAkO8vB/ugJnC2boBkLLGKU5Y+6JPWbfk6C2vmVQKlE0mujjStnbZ3peI8kyhqEICM7sCmi3FVofQg1aVn+pQQzQB5KUys2H3wSXrLcGoCSPoMHQAq01HVyMYbKlRHNUhEVLMhlWCV5Gm+eM4iIy91jrmJoSaQcv2r2anCXzzHHUkhs01Soh+KNThcrV/nipnpjQcLFpi3ikNWp1p03uZLRzzylH2IsxioNmSvmG8vmkKVcA4BSy8E5PJHLg094UxgOfdtuKD+fyteaZvEupVyVw5WQkiYpS7nhr/f1XhNDqWbxUKURXclQsrjfAWhlJGTUT1jFGR8xDx8FZYWfgUtCgkkpYlH8EAxyvtbBCeYZ6hQ2Sxk5KpWvFJoEkmx5zwXb8FYaXbK7K0Qb0siVugtYCMsFYQ2f+0+XrOFzKhWsU1MuoIRNFkhpHTgoPWRwScvyMKtyEmrv0yJ/fCrFhRbIuGr6+uA52BRJqA+FnMWX3iwlVnAZzGRv2Iy7XIqVoLZ3xblM3BlrYIrmpapLwyrMDIZhZyTWGDEmaQYahgbZHVZbbXImgnCOWPAuuLnXotHlou68hIT3SPbGA/5wl2Ja5Ruh9QZiNJueq3roYEXTUp7SECjPtnmgineu7e5cbRsIG1+2oR4Vtv2hnPt71jTOTxkAdLTZTLP3h6+/ygmtB1Qp9m+Q3RVK5+eZB4cOHaRmuVd0RmAyKycnxpRuZvjd995yEigb4Hd+95/T8C9//weAmIaF+b59dy8qmYbGwctXLLbctnW79xUyLyysylovR+5MHTp81Dxtszig1rbhsRt//a2/YTuj3Wko4bilX62rW9dmtl+5JgAQIt4d7fSzZMwo3Sjy6XP7ebrL5L2lPZjJ2MYWGVEnfQlon/Axlc1V1xZ3qioT9cEqNJYwNNXwIc+iUDv96/v09fom5KPOG2xXU7pjMHVzuhuJZdHTKQgfhoaz8SgbwzU9Ma6+lAUlERiqtQhVeoS8t/p/xQpWHyDSVGGAG85XSUCUC3CfvFS0zb5v3hjhyTLXovEROZM2DmBgc+7YsYtxgnQ6DIedk2XGu71tFZmGP3YJH9AD2qaJK02dWhWNB8q9eOn8th07sBcyuvXby3qdNAUC5yaznlki/mrPnl1cpmwhYyRHG9ENumCOaRtasmOgh3aY25kGkq6YN6X/8hKHaagQWFpNS3tjc0uMftwojTIKRXpmPwTE3PkJYSYinnvTvCL6zY5Hqk8WGQUIGIEw3gxLjBnVbLXdFaRn3rxpU3bcL4H+lc/yMl9VLmhQdXmotYyKJgH2HQknqQ1QvSjdHbFqEN98EkTtjVzktpElbEsS2Jw6eWHnjs0XL1x9/YfHBf8TI1MBSOKJX7OmVWOzQP/QocPtTd1ZJTw9/cCDD8BbC0k1ZJIiG9iTKuS98cZ7ag6LWT88UvaisW0ovx3JNhIQV/PZz36WUS4xjQMVlh8EuDDdwdTsh6Ym7bY7em2ImjRnc/b8eVVBM+3ds0ttnDx+fHBwtKujafddd5ma4cDFPqbhr//6r4uGZ3kb2SOb0OMCar185ZVXDBKIAgEl67iGF9euX8UFEwEWi+B7//pe9XTXXfuKdE5yeBrxf//7329p+ZEsXpIqhrVLo0Wm9qe1WGOO70aFloqu79xoT2QOdVV44N7735p6e3Bg0IqfK5evvPaD15Wl+ZlvYXOTBoTDwBDCdMTAlSsVKy3EPFRHkzirq4pgEa5qb7N1Js7gObRHxm7wiBAIKWFLJnAVYr5iIyTRZfmvCBnipYj7778Pad5jkXaujfGJs0VtOnTq1ACwGAUUnmOXAwxM5tGxJnaMxeWSRbW+9toPlGIygV7wACARp4xMyFpXBALZwmoIEEQMJ8oqFzg4+OqCHj3C63VzdATDXbbxcWSj801Y8A5tsbpXesjzgju0gd/KRp/rN21c190PoOz4g9uWF/NhMJdxkuDB3+W9n4qGzMTkDTSy6bds2WQNgOZNjCmUS5cu8p2Y70KpyT2nNGjUqDOmRw4cfvEXf/Hnfv5LOgma5e/+7u/uu+9eLx955BG8tbTd5Cluaw4wQZq7vKjQSjGZOvBGXj9VjTYPW4ipLw31n/2zf0a5vPDCiz9+553f+99/n3bmHHIRSMM/aBvSIEEuwimL3ZC2bNm6ceMmTkic1Mkpy6yrNjZ8Y5QPTmynjf1PHDl45MP3V1nLvjA3MR6fmVlRe404qxKr/dR9EyEOWc+2BtF/W8fBYamIv3eRTAhDwEWi3GWsFyUTX2rsgPypZhBDlwNIuhInjCfxaTGUHfckWoe/GHzpOTo9AA6UiRj2gK4s9hjwJe4/kxO6E+qU438hgRArb3MOMY4a7FAij+bPwidFbC/SaLVJMUOYdwWfBcJMKkyJskji+pKGi9LuhitEWhv4kfbmOY7hRTTYMcWoyUAkAPJamASSoQUVMSLMs8IEOCWpfilqPHMrMmQqQZ7CmfyFsNkL6evlfUCWi0vPXygxujzEakwXEhqNnbzzNnAwp4AuMBezx+O6dMWtXUZoAVKqJl7dDMySyMuSMDgXTi4TfIbJOCaX9BiCxwQgBUHHVEox13xJmLfVbvMzWMBkSUWnrvFIvYp1lTDOZHdsKDj6jE9iUGqZSaxcd789QAsOGAfGnasu+K4ykMQlpWR3nr1ZpKvwlnkTUChdHDJFVvyni6nJykhMzJnhPUs6dVvQS2VV4CkE2v6U4spLt5iwfKOFZ6k20Eq1x0J1FYxSX1jnHmbGKI9c3qFFXnhVcsOulJjoak3YsBOrmTr0gDesI7w2MolVTdTLfAmAdI6CaoUmWVZNhGHKL1jIwDaKwYe64LfIhGDi8qa+D+7BLy0rFRtJqzMPyQuwF0gIDaU+UzFAL4pckXoyjRhyQPDjlZcw0LTZwsk0GW1JKYWRbiuMtZhyWmKzHfRaVzc0paZ4mOXyQMYKHyKlSvOSqVENl5pAl4E567q7PFC5dBoN6UFGyags72khmpxdgpV6E50GaNx/sOcxzK5fJdYI64CikPWkc9NjK2YnDAAcIU3DcxxYWEYzU7A8rHQyY0BZqo5pYb5dXr5ItUy9ayX37t9rZ+e79+5R4s5t2+Gsjr75V3/9+utvbNuy5elPPhXL7NpI77oYlM3OwWGzxqGLmQ282h1da22ZeOXYCaHVm7Zs7VnXTUAY5+xm54WdOHPGEfAm7tHIUQslHnlzJjZDFGIASTWod7t06TI9jwO6EraiYRGO0tmQwZASdZiuCpf0ufDESAzX+dqwWg9lRgbrZL+R5bvjOmd1R6Mi2QgHP3VhunjWPCe6YCTs1SMjB3NUAVbgJNxAVh3qTmekyrwxcyGUiG3NnpGS+iO6Gc1lQOcek1fRljHC0xRNe1M2KrWjJy1Uu0UwISMtBMi1Y+NulnAPeSRYmJ9eIcS0yY6l1ifYyLWTt7v0iSzjVrMR5pW5v9X5zPSUqFe+u9513S+99OIHhw7ChO1Ei5HbrnWd14aHVJztBMUAOy7JmIrwKELt26hv29YdGzb2r+lo2rRlszXfjl1yLgTDvWN5g+XsnKqeLWFmZA3bFip2Y8LGoIhLuhj440AIKbt7CY32XrlqYbVtbdMTJmRLvWBg2JF1QVmzZAYAe1lN1foHc3giE2KMeCmRAI5zgZhY2O4NOBiFmcpKcY2po8lWI+GEdZEByeRyXRvJhuYsT5WqCJQKTrLlk6g6Cgv7EvzL0LH/TTnk4Xqx0GhAVpoduxSJKLW8/KH7Vh08aPOZBjLBVHIOgsiR06ed5mtmbwWj1pjMroJC7oRSvfDCi3fvvP/553/q8OGjnJQEFBR4M8hamjPDon0CyhyEIhGnS+wcv2f3rqGr1wy7YeO9EIjnn3+euuBXJi5asjYmrwkdJepSvEEtyhGMNrkkwALEqxssowtgy7v/2uu2VVlvKtInQ3D2kxkfXlV5OXS9wSMYFlakJnh2NX5aow5UTL7AXJASiRckx7In2OhVQ7JwtfK3qjwQ4PD2229D0icWsMpWkGajacFH62WMQnvTlm3CEni6MQGqx4+dkJFB6RP1y0TmIfAJEwgE+8/BZFSBDb/gT8Ju3riBLkuxsXRDWQ9ejM5lly+cZ0cCZTDQ3bOelOAGJhjVyWVMBcOHH34YGt77il04gDR+ccMc5WI1PzrkfcUToDAHacrl7HenDTEBznNTk95LWWuTLErsIqOASwx/5CsRM2ErL1p8olbUOyUFeYKhBiHgJU5K4JP3oIlQcUgzKccEw3FfmXVGLDAEDb2qCXx4SqBX42cyIwR5BUmM21ClbVEhJchgQkYzgIMh7vYdW9jrtsXEDeM9UZs+Qb7WHSBoUR3uCNG2u7rWluV68ZWSB9AUgatmHvFBCBnuqRFFA6UJXr6QtcuAg1D99yhFNZyRA6XSzeRcSXD8LFtG3bwylF3VPvHEE30b1hMPZ01Qryz7zrYspPmbb34LcAOe3Xvv+vGP3/6Tr/zpP/kn/xQESggOMAdKL4UfVwYudba3sWttNf3tv/nm+dOnVjetsCTAmFwwlPZCCW5anyGT2oQzJLEFGi4PaKTCSr/vMcKACd5Xmcyr8vLOe18WPe9SWFZLumLOxBxMqIyamxcUPj81qSChUE2rHGUiAGPRIqmWCWDxG9qty0MpwUbLuZTLsDR5YAAQ237RXBFckfXWzo5DQtvqrClybmepOD0jn4xjGKeaV3ey1bn7d+299zd/67f/3b/7d1s3b9q7Y8t/+P/8vxpujdsDdNn8TUvsY92zarIi2ZoEBTL74m11j33GvC135BAunTr0bC1EDtSm7fe5J3CAleVOs/lqsPIR5sRiNryqdLm7lOFCHduGNrvDeY5PnqrE55cBEEzU6Z3E0ssbppSrWtgVjs7Fg8S+BAFX2YUGxwAobQSchHrnKxNcaEfcZpnYIQCULQtZYB2WegMfdwArKHzQF4rsaEY2w9d0g6tMfIPt0fnvbncGACQmg6RYtItiU5H0cxGBVOLi14p2XSPhpUuaQl+p+o/w6k72kiANH7YV4fIpwEFTKchxqSn8kACdVjrW7NLUq5rFFbFQUK5abgZxRf3iD0aWkXvs14pqZVrNGDanrmy7QFSUkyrwqX4lOVFl8AhiQRiQyExmO2kVaxgyKvAeBKlKWQmxk74iUPynmStTq9SOBBUN95IlRlh9qKXUr0pX7k/el7EJxFyAS+mSpgb8SJZwJotTKwuCaqiAlXahIcdwEVFkDaJ9TuKijgwsEri4tWgEPiveDEtuLWdRGkzbw6+1rcNp5caI6DV8ERUuCXorbvShfqR2KOqI2pesYBWJUhxNKIGy0AgffJOdLoWYl9LrTKky5t2+fXd98MF7UzOzPX0bf+nLv3ZteNyank888RSwb735o2tXB5594tGp8REhQGs7W+em48DWwzp+HgQqWnQrrJSlZzfX/vnPf164r+7ATx2ZsqxtG7h8XiCKrli3LlDToF4EL6PZKTc6o77efljZv0GHxeCxoTMTz249nFHMj9ff+NGO7XzJLYYBvGNUAV19/tKl82fO25RGRqcmOysZO9hmaKfKos2cfb6wQEXDpJ4EbN8dBgkIsDUAVtdwhr9ka8xrlB14vGGG6XqwF9pesnaYEEZtnoHFxjNnz7ETFKQn3bR1m/fVbwIgZEDDW1uwuOsBdUBw8LLCR4UuVWWyHHR/gKRq7KGjih3WUnzV5i7lNduMzxwGPPRySSBAWRFsaJejWsEkCfovWKl3F1AuJCgU/pKh19W2qqmZq2YmISu4AQj40FAXIJATaOtPkQOIZwLjxAO42Y21ChUuXbiYHVSZOt7f98CDMuISx7TwcghM3szZR+Cnmjo6FBFjtaUFMt4TJFXmMrzxU15RNAoyuHHXKNBS9YAxgme6BbtMO4S32TN6ziE8cAbNZeCXNLVrS6PPWhmFMtUQixwj0lvTWXVtnMM0IlQqwiG5yiLtcGCbgIA0F44JlRLWb+EK2fAGsWgklqwC2EpZ2SK72ofA5JRpcxH/JsazLbv02hHuwQRW4GuV7n7Ky3oMqgf2ZlEIjriIqc+YhS9KUtNr1xlemOhsMpRReebUnv7Es+LkHnjgY07WIAfQOn16cOPGtXhnH5uR4VFvdH4EUY1mx1OHco9PfOITT2pdZmpULScuwTX5ompVBi7Ag4nWva4XK0euX6dSsYMcuCAqDTsbMSAjm8EEN9iGpJm5SwNXDIRFkGvSL7zwAiQhr2gzDHDAhaqPKr8wnnDAge3FkczoxFkY+op96tr5waQBXepMAJmAtsuDV6RRGdK447UHOOCsGgVccdCTxk+a4oEHH7IAgORBT1h01W6oMLxRK9QTJpgYgRhi8dbw0qhS9meeeaavu0fdnDt7Wo0YT8a+HxsrhWa+opJs/2W1rlxZTHqgGjS5cEwCGeGmdD+hqjFTFliHvVLiG0satnVAJRlWIEfdSQlJpdgCloRhFMxBwEkIkArDjMoHQoxFpZYToTg2PgGgClWbEstShRJwXy2lgo+vcnnv9N/Otgh9WkCpQdyDniXRkkkg+AdbKGh3P8UMcTVRQFDShJDpvWdlESezHAghP356CSvbNm/a2E/Xq82XX375e997ef/+vdYzwDwVWroi9YJSoDzo8ngaVJyqqdqB8FuZjVFkDzf23LUL66xp1nIMEQnGhbMXgDKoc0esXKpSdphUY52AYbX1J5gmL0xo6j/96p8B+PO/8IuOoFa6A5xtgCQXbnz3u98dvjby7LPP2veA3/A//sf/8MWf+WmyCVvHwhtnejCk6bD82jl0Kxtmpsf10kePfPj1r/25NUirxBzH8MgsRCgqxpM7ElzFVozhpVBf2QDNDfEueK738jIp1bK7n3//Ml9iIJG9PlcIKyGspqXYDeINxV4kJvCmpdvLWleHHG4n6w6KwZSWogiGb/GPRCVhfDAAKF7jXLyNja2WjsGwGmrlXlYu2u2KOK3t6iFIvI84b2wjrnl+Jrs3jE3MNja32THvgYce+8Vf+vK//bf/9qGPPdC0bPav/+KPp8YGVzfOrVw+vWx6POaLc7fs4GNmgk+Wsc5gAeb2vCgGHhxv3Kl172MSQVEMUOLGFy87ykTtw2DJ0x/+pDPKhWnYnkCScuXL0kU1+ikBbAmVsn1UD94w+Jb2p/+JsVutaqGPctX6ArI+yFKvcAwI5cXhFCWu8FKxixa/Pxy6kknvzk0Z9BYv3js9SqbR3H1Ntc5NZqmtFRyOLCph8YxXe3+5sldNLhtXszEyxkAK8mZtWpdQukWr8g5iFW0ZKisq8hzfQrgqMhV5OsGFZYSEJFQe3kkACK9gAeW2SFRNU1c3lk9Kj78N/jhk7h0+9f0S4UXwFoX5J1INN8kgBq6ULlJH51eEKw4fxaSm1/17cFWKkr1UkL6Z5EQIqpzXRMUReCexIgCMjJURl6zQLnAWScMBtRH5KvBBrpf0Urq76puKpHt9GbA4WK7adhYRC3a5SrLCB3saZjCD56ospEO45M4AuAwd84UVRwbUi7GMLklUOdR9kC/NZUXDjfHpzAo1tjQ0W/vWaiWD3b6Cto1ErAJe8i9441ljJ2O10MKhBPdTs/oa5g4J1KilqdRBhrxJTJNLo3eQl3kkjbANu9bYIuKTT316y45dR46d6enbcM/++yn877/0vcsXz/3Uc09fuXR6/dq2seGrt2bHOensgjIV905cjfzfeg3WfHr8bdmejpPCG52djol7m59HLOPTT3+K/QArkfpQ0kezmXQN0DCWKVbarP5LPY5P3mQPDNqium+D9zC3yYdoVVoR2hcHBk6eOO3c3/EbE4LvsSI+7ymjF/PzsyxUXR7no4ww4Q7QO+hi0G5PPv0XaFS96AYdIjR0gp1dCVfWM7ILvUGFZ4aBT2wDTFBB586fZcnIC4KpQR2TdgFze+MQieqwCCbFu48tNJAuSUZfpSyqKf17tWTAkVJPChMJ6MewsT37zwSCfR7iU8hlN1H6uUCetSAeaRK4BC2zB1QfHMghVrPfvPesUC/x1ldgwedPWtVsPX0WH0sDOASg5KsBYe3x5cIE2REoCwkhGO4gYzJOXr40AA3KW59r2MbqEyseM6+7D4dtK4QOQCrmQGGCskJdmbH0yYMS4aBoGPpZtwEVi+trlee13T1wgJ6Umgp2sZbBcYpKZVfBPC1LTbkrECjrmz1/+tOfhrC6Sx3ZNSuK6CdaukwkZI0yyGYtYAhVSGIpn7unbdu2EhJ8QxRowJKlIgnKryu1oudVouPg1nZvGBnNQVUgwKQijzQfCV6tF4nVIHKAXf7xAxsInFel+LgiFKwKVDnlaDsRugsUXQVeCw4ZHx3TA5FF6THBg2UTuDk4aBjdZw0UscAo9qKXrU3NN2+M2rjTm1rrDBpLGykCo31FGEZDLpyamDBZluqZjr9THUORdVVbC0pwmQklMe5UgYBVg8XUqzvsKKkxSKxEeVnYTEMtVinIRqT3+IVMGVEHlAtkEvPEE0/s27sHZwHnwRVco2jGPfY5fZYIXrh8ycgbtoK63GldZqQGiSJRNJSFIBMc8N78mrLeevsdil52+IthZhSqdZTu3LkbbphWHQAwgRs4+iCb3MAZ33jL3O00Dw6MaC4ChXaKDHoutJthCJdKrB4S1JfKRp1nmEujXhUtF4bguS4PH7QWMzDea1eKYKHWVgQlEFQigN54trew4pgojthgjqzt6YbVDQF2s3N2QOMkdDqhoZE9r4euDG7cstlQCHDyrWooJhWhUM94GHG/dcs2/NioUETBf82qVhazVd0g8DUqVBYI8NmgQkwUfaG+IK9+tzh9fWrG2ekYCJqWo6bAxwFWda0mRCldhXowe2NwzhVhYy8WlWk+C40pboG55gSZfZ4ND+wrzAfG+0LqDP7VEYCyV3k7ciT7dULys597Dn/Ej6FL6UYXqo9PGT8xkAo2rmD3+wk9iMFB+Bnkv/SlL7m7fvCDHxiIWlpw6OiRT37yk8995nMmEbHa4nXlYs7502eQaR8OA4xtm7d873vfO3nm5Jd/7cv6XWA7utYBgoG+9vWsMwAYH73es7bj+OFD3/zGX3JcGWqzr+4YMUWzpO9fbNuxsBcNSp8KRjmhlt0lwZ3LJ5faufPGgzf5yTTXk1HdjJSFsp+lbWGt27Wu6NZt6tFsOFHQ45u4pTztbWhj22LbJbamYgIGIdTGE0OU5wwAMNbF8G5oaax+Wa9TIoxpRE7rlZqiGS97U2Sorzj4I2ZmalzcxLiVDCtXzS2s/Ngjn/jZn/vFf/Nv/s1jjz6y8vbMX33tj6ZvXF3TvGAAIDAAZ0y5IaVSg0RuWfqGN1yF45MWWbgFcCj2fx2ueFBctewXDazFIUoBhbDikQqBceKWzMW4lLFe4V0xFqXBW4KTxEXn8ggnlmjRfM+DoptFT8GmWm7F0K9wfJWxcGvJ4CsDldKD1wGAJAAnZ/kbc1368jPmb4GfLtCzlzDRPK2toj3FiTgkOj7oXLGnC0FSLV+ZmY1iIhtXBi5QCd1SZZGF0n2m1EVbMyWC72dFu97zcyFrjuuV1OW689V7L+q9PjA3w4dipHqvIJi5M8hqXvdaIxWIsy2xVnpMrulxQ3rNquC8hM7SOhDwJVuq9zvYhn7vy6fK7DDQReMiiyX890gmWr4uJl2yxeFGuKTUMQcixDMqz2UYCJUlIItUg2CRS+WvNDWBbB4q8DtiI2MBV2oYYaV+pZFLlbr76l7sCq/rpZ1mo6E7+ABb0/vspXuFUxglYWQfPPKVJ8afFmsiiI0sHnhqekVTi07bKp9beamREukVXbr7YmBV0qp0ETD9LG1PJdLqVBntqmhfGbW+0gaQkQCjKhp6Qwngwzcnb+0OzOh+8YtfIKsbNm3bsGXb+YtX+zds3rl7jw7l7Tffuj50+TNPfeLIh+9ODF9560evjg1foZDZJFu20s3CuzvUgyJqKSbziQT/uv6FRoUVH5ldsB9+5GNUt5nFk6dPaRG4aYVr19puaw7XWS16fdjZUmMjN3g6HTRpF4dzF8+talu9dUt23BbjoK0JAWK0vvrqqwNXBPMM3BifZATrDxSHi+LyTSko7g6Bi7U8f5uhTK9LxppknDDfVLK2CGHMxA27TLooA72kiwmo4eqMkIZvOk1vZMA0NoAeyq76DAms5s23Y7fLImN3suHS77B7q4tWobU7VooEEABTmmQpEfy+qgWXDsvY30tpDABqLWeq3ERtOexWLrDULDbyYDJaIHxzbPz6yDXGtyGTPWabW5u2b91hDTEdYy62eSVBWuEuurO/u8Np8UgA3xUJKa5xiKGObEBV6QSJ2FTLRxoWMAtT2/cgugTt23aK+++XQGiD97oOqOL8xM2JKuTYjjrMceFw1clVadRPlVFyhTn2oNPVL019ENfpctaBNBLjI5RUEcit2X0uTUl68ga4NJDPXCwf+tSEZ3EE3mNUanB5rCAbm5EHF4TVcoFmqYMuOBMyzAkwXcy57du29PR0d7IYuqyznT537uz16w7RvUbhcaIK7Moav5wWZUuYcXbZxJTNcrJQExBFK7cCV5A3rMTa9CBZcc4uQIYy0iFmZeOylubFdY2y6dRtrGG0gBj0zs4sWD9h1K/T1JwgRwJZRZ2da0+evGJwYper/rIZE9YoCXlYec8992pdBB07EEFK+G49k1Ec4frFOO9hAyfX4Q8PkiHibkjkzkkPlFyEQ4kepKRQtCjZ4cxQE/lGFpmDiCTHytI4sU+rYNMbDBgUamAKBZB+wRfZCZBga7rAMgsVw6MTr/nyFRQEafNsOfrVq69aUKIB4Sextu6uKOsVraugkc3P+tevdjYtI5igGR6g5cknPoV1kGEWW1PigsbA5UvHjh71EvJ2AmW8ar3tq1ctX9Pm6IMdu3c+9dRT8lY8neUKeZINeQ/4wH/J2Y8thMOAByEaiepEr+rEPQgjGbfxAXUuhcroAYswEOusTobShQuXzp37If8HIHgCDmQsqFU6UDoyIwQ81Pu1j4mNmaeqswnf1IzlVxw9+iWnHAaqzXRvnLy/t5+u3F7W/SgR6z748EM0woR2u3b9OpzVDhmk6dM25uZ6163dsHGjiQh+0bHRUSRfHLgs8I5rZHvTTmEl0KhjgGNHjhYRajaBgFhdgipTL+CoNROyiKqDBxxQ6dqPObiZ6UmBngMDV2yns3//vevX9x88aOmX7Zyv0m+aioCru+++Z+/eu0xQqSlM4EEhXUx5LYpggKk4HRUqGPpGjmUcSnbieLAlkQaMLoxFqVGxorEdIXgIFPS8x/lvf/vbhI1H6o033tIlbd601aeu9nW2YdWSFSQ9a8RYxTBPepOnxsN33X0X62xudpoK4xo7euzI2XOZc1DXegZm243Rkffe+fHZk2d6e9aI0aVeFaezZtMwkjUKCp95xmyHoSJcPrMCihmWfoU9456HpSvPxfdcXpdbYoJREatAxEDdZFPYzy2WuA1xiqNZ7ZQACdVdggp8aFzekk40pche4r8zt+AZfrq3soA0paPYP2aEgwpicJTCckvwNpNjuV3AwJ+4YdRdZjOKreXZ/pDWgBrpM2l54k3VotXiB10jY+0n+JenIvxN0dfU8q1lM7PCYwQsTGdzIQYOG4bqLjMAwdkbId2xkSzNzewA+1eJrB9v9B55n/hoJpV2IBgmSXOuVCEwf0JjMaJKu0NIRk9JT1WFD4HDks46HEdsAJ8+iedLrWULvOV2IE2tFWbIFkZV805KkMOlpcuXlFenIEqQiQSmnIvoLZp3xURLssBpyOEyRJfzQCRuU3PT6taMOhg9wcz+LgsrM0pIKFTkZ0WTSkgwF3RiAsZNTW6gEWeb1+FEaCt/MSpMyv/BoP5l8JkrMHcUliUx3INxIVDT88b7O5+S16zpnJkKg00Ws+ReuIFdIJYE5VUGKqU4FnpGKf4xm70MOqkv+iliVXK414f8KglKDZaaLuwMwxn6PhYIUF1ktfRqqnA+FrarYute7G3pU2uVqEoX7oRBS4sQQJYdnDojVIoLRd4U9BKVUZniE9ykNdhWjlZbWMZormJTBA+KpfGq6gKBCe6KBuD9dS/s8qf+SzuSLH/iSQpwyKTCgj/war5WiqwZNWK58U70R8LIsm6Hka/J5ygk4/7GeFKWN7aIwEKzyWvMERWfjWZK+DIO6KG8BE7vQ9jShMv5vl7qu6nQNL0yXPHVhZOamIx0uGeKVDLbOXz44dEDB+7++Z//WYuv6Hn7QQCl/1rt7OFi0YKvv6Fjv/edb6xd3dzZnmD3hx9+yLqx+CaKA5sad1HsnF+nTp/wDDu9mRJ1eboVxb3w3Rcff/IJJ7JbbGTTZO4tVqww9ZMnT1m7x9W1b/89PWvXjQ1euXHpoop9+plPQ0BXTvPzxtnn4/XXf6Rjs6kDW3/Dpi1d0zOcWNeHR5FjOd/1EdGko5BXqDfy6uD0sA5DEw117vwZQhXul2kQ+tqQA6+4KbxvXJlN/CxQZOCKJ9QxVY7Z+hgtjBZd3nVxUcLqxW60TDuXwhQL2o03hShILARBQ6scU/UuGWEioxIl8NWlc1FNEMNqdeSTLN57KRCyVhAkuRjhFq1mCS8LdtK62xzY2t3V6QE0Gw2dPjlBp+iH5xfmnYXc55DizrXretbZ02+GmEzNTE5znE56LguMbucws6EMUaAElEtx2B7JuZFVIt4rTq1BjE42kGZOHD9xUrUStonxSYteDzz4MUaOntTkjBUgrTk+YvDMubP09bqudVQrWqp0gb91y1qgVD3qGC11dMrkF46uaByo9ELJQCI8LFcdAPgJDi3gKy7hhpUsMMQ6Uo293nvwpkzJJ5DPJ6X7JLHsDGZ3jPdGQS5pXMRJ0arFNyj5ClVGHWv+7Lnzq6+NCMMBE1c42h5+5OPsdgXSciYNjHO0aoGyq7MLmZV+LQqFA8Ql0ByVkoD80hEY/qhuF6xgu/xLn3uYLVJwmhsbTRSddIoHon1NNh9VQEIGb9+y0xDl396ajUoM3UXU/dXXvyF6e3RUkHeDuBcW7z133wOUwBPNmNzTseKVBgeufPKTnwSQNDPdcJCV+eSTnyJSbFx17I3KwAUPAiGYpJ41Wp8wRTJXFFkWvlii2omVaAv2hqcrGp0i4BPMpScHEiDePWJa6JSYuAjk4M1l6sHQGwDJARlihvrKyGOUO2QbKMVpcvfdc584Z6MjB4Nv2rSFDzb7ahnNzGbbKX2MCURGP1c9pz7tTb3ilflQOEODhEGDnkWaQhmI5hNZsSbpDHsgcPe+/Q8+9MD++/YTa3gqXXq5Lpw7k8mWNRlBUWrJcvQwIIYE9E5La2ItSIb0kGRnExQ4g4A5iJJL9SFBtYKjNulWg7R4/ZrMb7TC39SqFvLhh+9by2GE4r3xj+MLLKK161FH15qujk77GOgdGEyaOvVCB3cAs6aDUsMlhvZXv/Jn5rYgUJWFQpWOrjLySXwhbwSKYA5VOLhDlX/FGnws0qQ561WBZ7H/jHvVyq9AWH1Czoljx/l+utb1vPv+ewg0XYOrLHLVp3JJl1pzacOKZmoLo1eKHXLQiGqYEAkzTpiGJ6oAYuRNetMR/CgK0tIMNljw3kCelJkX/tSnPqWUXbt3eHPw4AeKgzaeKxQoZ8F4xnl54QMBUq2OBGKpFKKrBkGG3l/+5V8+/fTTZoeMM58tm0mbOlrX20Nn1Qli9PavywagZkBp84PvHTxx8tinnnlaI6cyzVO8994Hx0+c8OnuffvsiWtjy872lldffOG1V15qtPpq8maaZTHsa9vGpToGwBC2GhmAiU+6F7TUS0OqNq6f0t+51NRigtLWFlMziBMnwN6LP5VNZS+WOWfdOdF5enZ8wuhjmRVumrbiFMSsJWZsFEVrEeaLXCDHzx7jxpItxgVrIrgFMQaH9yxFdlL4nzcu1ga2F4OEERrzTuIKKoH59FFDi38NTe2fevZzz33m8//6X//rn3r+8/NTo1/9b/9lcnSgbeWthtvjK2YtwhbPsJpppBnqoWhDiouKJqr6QeUU81pjKfhlCiLGLR93wl6WLsh4rGjjdn1AQpLGlKmDmbC6Io8O75NALWQAEBsrSZeVkxNKbah6XImBtfjptjblmdVX35R6idl1p14qnDAt3ALwI6WUAQB9yE0NBltd4kAIXYt8NgCAj6Ya/TUfnMuu3/Ylg4QDsQDmw+eBjFM23VgxKG2MXoqLdx84NrZTCSvhi0WUD/lWCHH/6MWFHOO9OMOkd935WjXwUu5kd2ERwxOeKogsexMTtFw1b73LZdRHEDJoy9k9sUgywouPmZxEh1hAGF4tkp8aTK5yuI0HP+uVQWC5QnLhm/dFMBb5xvWTjOWqnJHSrwoj9yXhVCjBhEukqFzI8bcWNDGRMIb6qwzXw2/fLcL2MnmXGmkBvig2FU4FUtHO17qZFjO+RG3VNDApyX5SouK0KWDvyEPhamgBSpnudzhRgPDrWxIgV3DGhOQtMsOdzOelc7Ji0qoLQXW6XQ4wjtI4mcsFVqmoBr8oXt03dslOOdCulHKVZOd2atouRXjja/RDKYiBWx0xILAQ6HM46HAt3FzX2zc2Pv3BoWMPfOzjj3z8cXr+5ZdeHBu5dntm/MKZY3dt27R3z9a29LeNAijqbKHSTQgLBNDh6jofeDDbAG7Zspl+Bp99omjFifBy8vqpEycf+NiDRw4dPX7yxG/++m/89Te/4WSqjZs32YfQXmT0kbW/ZgDUisEJzW/4wdlv8SgXrInKPXft4xs1YDh3/oJAJ6wwvNKL6ft0PcrCGT0aJusjXHDQDXmvK4EkJxGjmEtUh7J18xZMw0B3P/XI8ESLUCjTGqVeljPMgII87+fGDZsASc/psNshfe5JvE0/W7bwLxMAqQVX2WUqsQlQwnAoSekOmVoX0tQqi1wsyXxT80oVTHtKI7FyDQ1Uel9/D+rgIFBCZDhUcSwU2bZkVQsFbaqwtak1x9CJ1GxtstTRznQzkzMjN0bGx8a972xnTTiEa41onqGhaxqOaAnLAJn44ieMRPi2oWnShmHpRLbMJE1k/YDlzEhAL7uFUScoa/899/GRIWdg8Arjk27R/6a3Xds9NTHtNC6mETJlQZdkBMBzZWZlhWfke69yvUGmZwMAl/Q+Vf2JAzIaACy+5OQqjaUCSbVnY7oUZywUMePlLYsVwQFELnOuqgCBvtZclIaLcDIq9J5S+uwTy8oYVTuCEvuzWDXxGkF/587ttphnJxA2DkqOOOhHBppa7OgsgXoEhMhVUESIvMHN+0p+JdazExBOe4uZYc28UwwXOH3RidHFSrMSPw4zVa8NJ4hi2fw7777T19v3zW9+gyYan7CmgdmnRfGvZ8tIdiePOAhKn7w5MTczz24WXfeP/tE/YipBDqmheJmz0Ow/c4+6RCF7EQIKve+B+3xDNkHxk9DYVZzwApiT1menGibjq0aAN3g9PDJGHUAVHO3BxZT0Cfvoncp9da/VsQWJ7NlzpzFFGoOBC+cvoU52fuViRy7DUMBlv3bN6VejfRv6Vb0B1pHDR5mGq7Pn8QrLndd1r3WiGS+aLb0w0Y49ZkGpdTM+83MZz6hF+CCEHzdtI6eQZEFMa+v2/fvvUbvFGX/x8sClV9/4oRg7CbDOhjpcyCQMo374w1fBIRP0oBXY6IU2VM+cvsDcFGrC4tTegFIvSCMriJVX0cr1jANMWyM/5doldmR0eGY6usAgUUR9b896wfGOJb92fejM6bMXLp7nN6cuaUCVbXJRNI8dnEzlckF4thFAy9wtrhF+VAqxc2133/oNTt4mKSpajUMPpX1968XhYSD5pnkpSpUISQNFKf30bKpKrwHPprU20Gq1mwSVrYPBMV6qkaHr6NJVb9+xSw06WuG++w8QD00aXSCzmD0ASyFiDmlT6fj58ssvEyS+8wP770UaZKDElZJRU0uLBGqK/35F14qAbe/EFj2p5ZE215+4GYDQM1/zw1dfAX/HtqwZuDEyKrGdByLTYyM21bSzPt4SGzCJio4KbqpDWdYce+mTxK+99tozzzzjpcTPPffcnr17jR94ZczAqiNUMMPYLupdLdujl73C/a/KVLEuwUuDELOZMN237x5vZLFr6dlTp9/98dvC5Lp7u4cmx5jGGnzcjfyOpdc2IBZRC/9EWFFIcSgyR9KXGy0zyPhkfa1XOLB0EYyPvlz6dJvvP4bl/C0byGAREz1nmWSbZLJkpy+WdAY8PNiMYWVza7EjZVfiAr2hc48JKQSfARq3PUM8aOVis6ygtHSr8IjJU0xtf5iYfImLOATJasmxyqlY6DgInDEdogxcJffP5shTc/RjDJf8K95cy1s13hgrCd6LTpNFd6anc085AV7NtWoIwqP0dWUME8SSIKgBwoRkoINgGtjbOGwLPile+88BC7G39BFy4TrrV7Gey894axAvK8Yxo6UswdOpVgwkOUqpq3BTcel0Y+u5Usnl8uBK0bli1OZP6a4WH1KJGWa4pKx16u4ripVixqS1Id4pg4BygBWc1AxmZ6ECRLiKTVKL9hKhCHxWQSO5QFOyQUGmSZaqqaAWj7J/7G9JC//lwYc8kz5/jAEqkh+lokp+EF1CtRC30NSyCk5ljYQOeYFDWo3JnlkmvMVahrICM0JIj72yodmwpMwBFLIRn0pJ+HJqAPZK9VNqg9QMKpi5pajK1eIIlwr5EqrGgpAOR2+ZrGWMoWTa3XEWK50QQGrjhk/xJAMUdY03+adKPMeZnv9yheRSnl610Jpb1mloIxlipX0lTcnoDuFapeWNtEHcM1BqL20pTA8C5Zvi8iJwylEhMpcEIRC9ZVhuhOo1K6N+9KvuDyYlEsI0iX3LSG1FQ5b5ZjG4sSuJncHoFG0JpODSMkufOSobWdm9hScArRyORYABkJLcUsIUIGXrjVom2DCnCRmL0fnNGbD5xEjSc2G7lL56o9Onq3V5+jLeIpqTZfjQww8IwtGViJ2WksqVEhxAlLKmpeHxxx/vaFmhzLaWtVQx59voWHau00vyturxgXrqqaf27tsjO2KVVZH0PHZz/OrQyI/ffc/52d998f/72ec+/U/+6T//P/+P/2wraqa/AYDoZQOAVa3NROHwoUPvvPPOlYGr+qldu/ZYyphBUeNKK7X40W7emBiwn8/lK7pIVBNjOxC7Wx3IHMcxpOEDOwS7YNXW0QZ/PGEu77prF/eiAQCRsKk+PBUBPb5FXMJP0yDMA7kGHaTT1jY1vSbus9bWTRuNZxIXzX7TX5w+fdYBZMw50xFC3dR4lSci4SoyEKsJA/2srPAMn4qSZ19xuHZtXkaAc4CAOO5UqIas02PLKM/A7L579ic6enmmCxCi1ocmJ1Y2LGfqWEMi7Kecql4keH72xtgIDTkzNTt+Y5RjfXU7r1+nyQ1W6ubNW3bv3qtZxDXhcNLs7ZYdOfnm3BXEKrOUkSXT1ZkdM9d2r4Mn4TFNpe3jst1UnbTGekEUk4zhLg64rX2Nilb71J1O2eoTci5jYRcjPjO6d/hQR2vkqq+nt/JH3mJIA5kW5wSkxL7Q6DFKMwgHViMz6QVpF3ZhrQSYpiCVrlDPPpFGULzEw9uzibG3eQ85d7EK7J4EpgSBPJ95UaS5x/zIamwtZbUtZQEuHWnmTI4csVX9oAN/hDGbn4sBsHxB7MPcgp2LmPGLGgPM4vC6ZUu6adP3RfiJVuVDwedW49C162rZ8KKgboYoqzSgqGwCwI7Vo9NU2iyLSmBvZ1uXgjk+oSs05LOf/eT5czXaPg1e60KkSzE4WCRtmZ+G4EhiZD/22GMMOOzWpNUlcwfjyDQ2yaJuGHMQZfqgnwrwiY2FU16CACa2MuZAUJxNue7ad7fwbukltsMPA9onjYG96I1Gog6AkgvB4As1gSSYgrM5s5B59swZw3oYKku1IZ9SN0IwuOzNkPo4DQcIQ5A9rW4g7B4jsrPTGzAhj2PGA9RlYxsHgzUiUVJahUZ7fXhIzcHERVJxAybKMpHC855drRtWkF1TBN/97ncZjhvX96HCeiYwjZEL5JydDJSCDJ8Yvgxc5KsRKsmabNlh6w18DAYIvcTYZQNW234pN1UyNwdUpgunrkEAS/FHSlWgzXBdy8JS+tFbb2jLUs2InrJp101LinOImGXceglCT9tQOvhJzI6fPIk1FUm4YRolXhsY8nGJkCjUhbGwlebmxI2jx4+l7lY2aRgSGJvjpNX9EN60YSM86SB3nwRYXx8Zhhht7ivIiiAnBkhAeQMOQiKZZZWIDsCMNcXK6Y5G0uKr6kYdlz+Aag1WGAKUOjU0tR/a+ERGL6qV/f3ggw9+5zt/+9nPfhZ8IgFz6eEJJZFo5EroBDjSYzUaKSljGyoSSpQ7KSVRxmYcEhKQKymfeOIJRrk0iqAh5DI7iYdEUYvAf29eeuklLJVF66glHjp6zOhx5+5dfg5cvrh108abo0Pfe+EFyHSubh28crElMT+seb7zKPRYOsXarEo/BlBMjWooYEa1VfJSt1BZ537nIQkKPz1gZvkSSEWFhZPMAme2YLrnmexmuKyxxTjTXnRWYS5jWUvMdIxKrhgkc54qKLVR4EcFx4QqxaXA2HLFli3pYlNVWijXmPI1PzMtmNMBasRsLHPQMAB89QKUDyp0VrBEicfg7G7IgRns2iYzFdSXVcxhEHjxutLiDdO8JlDTTWa0sMDmKZZtInvC0cqKci94GQAsGtx+0vFL+N9ubmAeZzgBt/KPURprhpklJe6FhHL5iTdGjbCNZatmypDAITt4YhldIKcW0zfLqAZDWmHmUnG6ovJOojJuqfChufgQJP2f+nLJXDP6azaYI4XUKyuHI5SNI5TEw+X8Ssycb9IDRdUlnivjyNCbwnLVBzVlb1drORbfB5fFeswbF0LlcpcnRCvA6rKyT45y82ZJHjSimkVKbc0zhKmU6Rs3SsAKtdhYzP2kQiyFACVVWXrYWhdxB9gpkHbVsjwDFSDF8UxOSmmpqcX36QEXHKwCwQhdoQ7sKpnF/g/mKWXxSoUSdgwjSIrI2No9e0mFb6ooA7rCHGVw/Vsdw89YxR6oxaKLB9ZMglwVvQzuklPRy9r0GmXUUciEVKnvggYIFZEKSoLC4HAYkn4UoyJA/LuTsT7IiNOSRkVkGBewSZQrDwUBEOQFKGKX0ngTCEY5UduhR9o42u1FaZAvPYFdph01zhoOMG5LKzbKwvhFo0cS1USP6fg8U1yu1FG80RnFYaOqVPWard7HT+mr7aW+vKc2TUH7pIv3xh6XJ08dc7CXvXREzpogp05F2xr2J3uz3T7ag38JDdAzUqSCPy8PDOoudQpsdIVSvPDBEGWxX/XvktHMdjF5/8ODYzfMcCc+ZOPGDRcvDY7fnP6tf/zbvupkE6oyPXXhxIVTp04U/+AC/fw7v/M7gor15DwCjgkavDZ05NjxDz84dHNyslNn0tPblT18YvyYHNDrCWhXnPbuGdWEE25QUgX8uDp6ZNL5Lt2u54mRcaLiAeZkrfAtp1BJj8Devh6dl0+AqFBjNTBZyQjkPzL8kBGlusiMmF0RWiooFVSulUx2fMA9GeXCfO9BkkteTFNlKkJxUHWdO3uGcHgvixMYfKWpJDBuERTALr94+QKxhqHuT6LWFh1rjFd51bVevmm144bavHFwwq1V1tQ2IF9xDi6SnQlcKpBpkV1u9G66VH2oBHLBrVpZuma2CoeZKqASQchm62X7ePYJCLpmJZoP0eObB6j2j5GDvcrRpXfGN0RV4XSXHvCqN5DDMACfQFYPALbDh5uGvAHrp0btwU/vjas9KxSD/cQ9ReAMGzCVUsZRUe6ZJ5+UAO16eeTAYfumre64qFAJAjDB0fH6e8NrryzAIeYrBHfu2F2az8L1ayMQoefY8mqNZS+uVT4+fXrAPe9nppcbkFAtBTd3oMCBEvT8BNwFJZj7mUrp6w+XmSMcBjzF8B6fGL2RvaSps4XJKUMQ+VeS4IbGuElOnbYbzOpHPv6QMYDqFoptWKY+iAd5qpHQ8qpCeJNB1WP4uGXrZuV5qRkgFbsh4001+nHEezMa2oDlA1rF5q1bYAWgerINrRg3daN0LyFtZEak0WaIxEAX+5Wau32b6HhpXOGSTCORHXDSo4b8ZCDqVIiy4jBibPomvnDcUjQiml588cXjR4+L3yM9Igwfffhj//Jf/ssP3j9oXT87G2mm+aSHBmhoRDV8tA3ksC8JmUUtFlGsbs36ZrsxQgmxqBaZN3wtUxzESX1UadMC1d7e++6jhE1BoPrB+x/ANH4LI98nn3wSGoo2nG1pXskYBSUCN5s4KMJEQ1kYYPdPsTHIRziNxhX953/+57SnlL46brmr09gpJoU09JO8CIc/5MkB3QgNEksmeS3sSXrX3ftuTtisf2zo2tVLFy+fv3Du2tD164eP/O23f7iuu3nH9p337L973967zQyOT0yePHn6s889a71UZYtCC/4XjcdoK5xBgsEJjnHqaANC/2+Mj1m6jQPiQ2hV18TN8csDAzt37Ag+S1sOwwqqPW1ttRF6Ztaj+vnnnyczNs7XXIkHlaEKvKfWXXLZ82LP7lVYTQBUGQE4e/acIfL3X3pFM4CJqldTJIRUtLUnAGJt81rAMQSXwNQJQV5TNLkmDVRFanpQEHIElSDTBVuJDUhw3mBS9QFioKLpKhqeBiHemGzBh2gRx7GZ707cEbTHLMaGxshVu/m2HTl0GKpPPflJbyw61wY5sSBjmGfqWaFwIEjGFaS9mYf31tzEzfnmNiHjNudON0AaURczgDVQLJu46diFeWYEaPnxOMYjWPt6qcslh8vjnYfFD+UNkNCIWV1sPiTzI8DEBL4+QqQq7sGWRWwYgOd0V0JbCizskjE+1WVGvDk91JVXxbjxHLwWsvLHntcVgRQdu9OIICoVwGiJYkIDVtOUAJ1oNGLsMwQoKMBqsbClDFNc1EucLpaszFmYzMqd0w0HRUT5Vzy/BVEhPmz/YgExMMur3ORliRbTKi9p5bwsyCTx0lUQY9qmiZUrVqO8Zkog6bkm8MZV3jBiMczUQAYeXiIk7vPylf9MejwojMoQQpyxu4wFQKqjmH1+5aUf7tqv/2syfb7yCxBDwIJVMfg4iGUJH8o+9Kk5Cp3hjzu31Sn+mAtQrVZZ+Binb0ospdeA9gTzCKEJ0sqN7ehe2aDa8Mpz/R2m5QmBt4kFIgmJC1bwrPeKbXAv/WVSY9qyZZMTTMp5Qzm7NqnT+L1y0Zzx4JS+OIR7U+BkplGKRXpTX55TUxF479MCYFEmDYrRH3kr/PQ1A4FygUy2k74MUvS7RBXvCxzF6fvZiKZQ0iVLhkHkP2URpEhi6rGq2dkVs4CEg6owDFhsWVqNjLIWk2xxJIBRtFnFp7JFinAvw936GqQw1lWGDUYdiwC9V/8GAkUeYOjZVeTBQDJjQpB8Lec25BHcDBvSvvwfxDLSTZo6HCI3C/NTNvbUeIxmUGc0mIFPpl0sVyx8x+EsNaGEdCgRtgCLbYSBHmBAV9OxVF/BJzeoAlJVumNzZKxKksrVX8gIK5qcL1+nxuCTkhlHu7788ssXLp6lJsw3ez81m8GD7lt3o0RA+MVPHv2gY2OiZy1s44s5fvyUMH0bjUDg/fff1RVS5vYnvDxwEattA/r973/fLtKsl7QkDbFxlfMkdE+/9Mv/g06cA+vkmdOq+8KlSzC3YwQkd+7Z/aV77w3TirFmqwuziQxuCvn0ubPDIzfp541btlgppwhrA8XnMvx1qaro1jxHw2K0AhlAJknm2mfIIgSNOMe0Yd+Cj89j86OGNy7Y6UfcyZGuE4GotiaZhxS7Ch9azL1fvz526uQZKdk2lpbhDWn0j4+D2FeZBJkQldaUaZaSNyaQmoJAEYnEpagI3aXuBhVeKlFNrWlvW53Ir9Sp9GTdyHDGed0Cwudv3RwfI7Hryy5GEiPEPhVpVZb+m1VrWG4TMOS0ZuVW/PqRk5mV4zdujZkKL5soahHKcsms0rFF/ytlwTkxutDQFyjaAIPxhGQ+He8ZewNXBz2M3bgp8gryaOcbOnPuvCpTd6yCDRs2WUtWu2kEYmZaYGmbmK9fRpRyfWJSE0V360BKRUS9aCJVeuWyeKGqjmTPyWUqyWRCy4pb2ZlXWWpHdUuDFjibtPFS81EK44EQIoEMr4kvv0GrhBVhcNdhVZSk9ACC2gRBYpHbQ9dHoT18fZR5b2LH4luzo1mC29o2O+dkUQFv8YDo7XlM4jSxpqtMD1KVtU7BhKHBqgdc4rWHYWtrpnwztyceK5SIw+DjXL2qLEi7PTU+gXJ9FO+/GF+jOo1ULWLWnt2bofLOj98zBKFMOJpbWwS3NbBdOHAAEa6khThULz3KcuPvMaocL5BEsH7/93+fe5WQMeD8ZAz5JG7ELpnQ0mhZhCSDbPGOm5dW622rVos41xfgO9lScybmDABGh0cGr147e/qMoQvttrqtTUd6qXihrXNoW9Wun6LnzFS+9y6nxUqTemxE+6lTzIhf7YSJot5QisX6QmHEs59+zhplbQm263v74b9z1/bdd+169NFHcJMcAM83zw6TRfS8ZDoGsnjw8CHQzJ+IOljVaivJdURZrSsRa1evWe6IAFRji1Ci6dNnSR5ewe3K8DVGnsH0tm07vCHrZl0IAe3uJxExrbFl02YluoSwr+7NemiuQ4Y1XikFf/CNjrhn390PHLhfRGPVcRwVcZzfbhDcj8m0G/tbufhMWKv8yQhJYqFd60KIvvewMGAmtQ997GFCiVItCo0fHrTE90MTDiAD4n2HWTZx3QtyTdrmStiA7YrQbgr1+tAw273SSKDt5Y9v5rIE7fQZLPUlqIknSHyL8QM1jTpzWEfPHIezM42Jk4q+9957MJDLZ8eOnXrGt976MaPciYCmzmShRnt7N0XJljVzoKliJKDO+iEmGAP6oY8/Yud+54MMXh4YmxjLuqLZmZHR65evXk5Ht2L59auDneu6SIr9mp2zYs/U/8f//D876zwn/nZ1qg6Ny2qNyZlJW7yt6VxLK3Kg3hjPlna+EqTNGzeQUs0bM6lFS8HUBS4R7771Gx944IGbE5P0ZmfZ6K1q2Hvv2Y+Bjg1B2uCVyx+8987q1maBXoiiho4eO+asgKyK3rr56InjFPmWDX3Hjx750WuvUkoIHBu/2d7RND4x27baZnyxqdlAPujScZWjDnBoR5EVMzF2oi49BnN2fM/7qDbinD7dT1cGDLHzWaCxU+t7d70JemkXytPeb6Ycp2YUwfqP/xVg6wCiPppa2Q98HWwoxSsXFvynJBlq4JBn6VVWuZWybTHpb8zVoC6Nlujyxw8CCbgL0tTa4ifJEzw23Rzfx4LVYbwUDEAFJCPbiQ6yueWKhQZhqmyY2zMNdpygsosHXy1oWLHXitVi/hbhNH3wzYb3IIQzZTQQnoTXS5c2ssiuomylVRXxnMYcCjOZhhXhgC/Gcdi96KeP1RhCclQFlNQCCxJRyZL6mr9tOI5uK5n5eAhVuBSWqFnOJz1RaqcoOrxPHwN2/k9Vuuo99pyuE1IFH9UjaTnelS3nMJNivoTYUkZsWeoLS3PugXkSrLXbkiuDOLItQg57FbOISTjcYCuQVBmsywAMZilemUuGqXFmRczdh5Utq1RKOM+fnHgejIqpyq+BRFi5Sp9Mxmxotayji9dTHUIJy7OZYxln6sMYH1mfUCa4wSF+7KoYl5Gzgox6wBDcgxKNpCzDHgn81Hd4q6qmp2arICIGOek5gu5tpkPKKqgAanV6CEvfHFmRorjSpMFbpMaZre5iJGBxGY5GVJfxICwr9XvLWikTKtX3imGjw1M0R3NWOeXCDXDQw9cJi5am23aHZxenHaZNlAGnGkoBGcRQ0KxyJaqaO9WNf2FyOO7wV+MrQxQ79Aha11gLL4pFjjoDedpd8ygsyogIYslKqkAuowvAjY2sl1JtTDeq25JfqKo+q8YxBsKGeXDOae7Lp/m69BRmVDBfXooLA+neainiT+Fsbp7llYyGXFl2mZVen+Knl/omvQyFX196YIf9+MdvCQBhK1unzsrvskU4D/H1EUtSrNccHRlmUk6McTs6SnZsel37mUtnD7739sb163/hF36B+POFgW/i2qACNJ0Ln5Gp+DiYh4epKVoat0fGJsSK/PQXv2DFF/8j+17Q8LqOdoRS6Wxlx5bZf4UAsEk4+xk2OMbR/sbbb+sKcYNA3mBB9a5iikRUua2KLcjuzeiVwbKwgqlDyEFgPOjQGYEsO8Qyl9d2dpiQJuiwZR7ohwXiFTlPnFJRnvHd4o+feofhkWF59YzCothOejAnylwp5+pYocdg51zT26pe6V0L2d434oH/akvoOzvfG5Wlo8d/DOGljrLkn4pnOnt+dna0qXjpVRxDF/me9bbecaPY25HA6+vdBfHLZS1ftZ47OxJ0bcV2FyXasIJwmKBTkNh9obaiUm+OOoLqqr7Ve/sKQlUb1MXjNoWDS/WuOADdK7FKQMvoyI3zly5aXR2v4fCwIZx+kP1jMw8YVsG7bj3oDedW9ZBbKyti9JfQxCqZhRxQE+ON59K4Q88lJRZ5k0acK4MoV/yPDgSeT2JvWfzqS2RXlmmXa3Isi6ehrfXQOSqxCHwUftfaTgVZxa0ds1jIIeaoZgl0YZivXCRzy+IAQmRhUnpfEsycOHVmcvKIEzaVe+XKVdMLuhWNRnpiJtKMeiJxxRW+YI8iFhkIyw2Sc8L0auSwQBTqHUwNcSGDqyTQXbmVCcsf2Gk19LSmAhvnpZFR6BILozHia4Qn8kHb6O5ZS31oq8OjN2gY3LeowMYz3hg7sc0RUB3kgLBNyZKaOH/uTGtjU093ovr8JF18pZBjIWnnPPf45T1EIeSl4CIyITLMUmCBVkY49h0hKKY2CBDhtvWkZ2LUv3FD9J6whJUtRWHlCFIdBJPasMHWOuySgcHL586etVqWsL751lvGE8Xv293X3ysmBBqWYyqOAoTG7FSCQFQwfsHHG1464Vn0BflTKwamxAUrhTNLc+LkSX7uLCS4cMFmkpqc0QK1S5Jib+gRYVeGoThJJ4rM0YwJNGgEa4nwyYGBS+3CUlpYzm2KAJ+gEwgjNpOhlpAa/PkJJYdjW5M6Pn2Dap92GIcNpCYmc+p4aaskA3pK1/B4SNBCGvm1By4OcnoWoTTC7sR2zYMglvYcOyPtt6npBm08CvJy2yD4SR3AkIbCMTVLxA0AiL4HmLBiKUeNEPfOnDlvlyu7KET1TE658wdYntfRtuby4MCm9Rvqvgp2mLp29Qrj/i//4q80ZqML1Gn2QCmLig+vVq8uTXvxxAOCYRu3gUvneBvuvnu/pcMk7atf/Qopeu65Z6122rVrh16Zhionr3loTfbro1ShcT950AP36U6ETt265QyvH7z2yv33HcAWx4qbYjpz6jQrhLoaHrU+YuzchbMb12/w9Quff35N5xq8NVlhw62N9oYy7zQ3feHcxTT0Ve34TbHTXqP2iLs21LGmjfv/ypUBzGGWnjp9trs3gWGnzpx76BEzMNl2Ws1qU+oRGy9cPCcCzc6u5q8vXbhgckkvQSCJh+24zpy97G52+J679549dZKsCgSdGBv+337vP46NOFXgZlz4pWlQ7PowBgLW6WyqqUFZqOs7d5KmHaUrqPosphKTyD+2X2aHcxVTMrqPgZkhMyshxo8v/syx/oy9yyDZ4g1HEsfqtk1nq5d5nysR9jGo6M34E20c4Ue5Kih3mHhRUud256sIMLgR3YJhrCsy6Q9mwuIOId5DOC1rYf6m7Y6XNS9b2baipeuX/+FvHDjwwL/9X/71b//GP7h64dSf/Of/OH1jyB6gjfYui8lkEQ6PSMzFWKOZPohnE4vs1kef0pmIwZssbaUoVwrFWcnH7fkO5vSsn1pWfQiftW7fEwkqeEjiJNCTAYtMQ2IXmCCwtPIjLnNXHK2UZyyx5E+CSi+AOFCfy4RNAKoR1iLsQFWlRb+HOS4pKfHKtzpurxWaTzHrctFIMUhVacqFqTXc8dSW8wPi/w3CyzMdKhyWrQFanMwFswohazztUkkLCG0JRVyx86ts22pTOI5NPaOOMeZjyjK8DL24mb8s55rc5simnmESofIt9VigG1moUNNSdAikvEOb7wYlyiLbZchQOuFiWZtcLaSXMWew5TbGvfRt0oOdwstVI8rMEuN49WfV74x644BbtxlYqSZpFYjJ7i4iUK54eeIRKzZrzGM2RIiBE47JkkGLu51aUqWKKBdqi+8vomZl/AI34oplrc3LdcYaKT4nwFkTwAhjTXiXJT3uVLT3t/jdkWP00myQkE1ai0MGIDFPK/Ro7hwtqCb/ZfYKJppdTLEyu5gxFRyCUMbLZSIpckkaTd0vN6TzPjv8KCwVFFNevcyCachc5N+HrHpw0pdmUBZxSRf+NKW/o/mIKH8j8pta4/hQXKy4+oaQlFErNOoFESIqh/Q++akFyWILZmCrp8OZACByfmvsLBA9MrYzWXzlBRNju25d1+49u0TEWJE3PjFjC6CHHv74k09+iofu0IcHrw1e+sTHP/a33/zL2YmxTiZr4/J777lnevaW7dQUqn8xn6x3fumllzjdSCyuQEO/sMbaTEdqrl3Xv37z9m17Mu5bblPjCcOeDf19q1qabGinw+JcZlw6i4YPWafPFhZrc3147O1333vzjbfhzEFLernYRArpfYRCMJjVCqOImJcWOrd8pdXA49qxormfNDeBNGxukwYMYz2R1bQmE/j1dcQyVpMd/yWwxK6ASs1C2BDCeee4l4jly5dYR2yhKwPXCCe+4Z42JObYwJmMahQEkwpRHR5g60oNLmRje3UlvZ4F/gZ4nWvWiMbR/XEE2LFQ6f09vYyfCIqDY4rFDP8Y9cxKPeONcUc8bdiwUY+GTL0nDEkII7Wzq92Alnhx2goltkjVZun0xNDgVaqPu9YzP53hMf4zh9ZvyNwOsDgDflqizjre8bFqZhgaeeMiuvkDjyJLiFLLNooWgRGbKmPgbPUBn8xdlUYKfz5KjSF2URkkAEDAMAfHKjAlotdXAOFmBBGVWELNJeMuzNFjK5arjhIexUmfHKVvjDg5yceWKhjKXAHZ5BZ2EVoV55hX9ggesA3VMgOA98G+TFqc4jALTPdatOx+6gZZlVLCHxwtFEUSRPHQjNm42ak/BjWz4t5pp7g4yvvMl5atS21SgxClg6MdIRPtDC32p2eUpr6ERlktWeY8l/+r/+nnXn75ZeNCxfOtmkTr612PxN17dsJeOArCp2eYT9lSZl2PWZhlllMACj/O/g8/PLK2qwOniEog2k0uQ9t0G2pFh2HTVCeVkjbVrKXhEQP0ySef3LVzD8JUs7vqd4e08eWG/l7jfm+wRjWoVMyFmxIxhTTgCAIq4yS7vTzaSnHw8dOYFwKg+ckfH2m4fZs/4IUX/o4h+/FHH1nbsQZY7vBi0Nsuyvbz2fvIjuPeywRVhiZDDTQ4i7PygDRjAMkgb1QCPmc24I6V1oS0Q7y6ciXn7164eLkKqK8+4SRMXPUZjcZCvODuabHsh2VWUTcLaBMxYpwnbPHRjz+uOEGSCD939gJbvaenlyKzVLRp1crh0cGJmUlnnavmHVu2al2sJ2GPTEaBUoZ3hsUqw17F1DT5uDY4Mjhw1dQBqaKxVQr5Bvmzn30u+JfdtViZaMRYrcvZJDUBKjQiCGM1KrRtzDfrJK+fMPRAmwtoJNZ1+lVl4eqjjz2CSzKCYKSrsow6ZNFyjAxnJrOUGUPUmkIhUEUcf4TB0IPYgj/SQM9J4Du2rD9z+qR9k0AAR7kmXmlM+8MaNnhjSIkoGQGEuQG/ooH1Uov20pgWr6gz3cCOHdvho1zzHtCjv86fuwQIHIiQDokV7qWKNh5SyxQl8lFK+GFozUD2N3Os21pjjLFjRw61t7Xs3L5DOB5sR3JKyy3rUuxU/dLLP+hat/bhhx+xmMIi/QrHgmtUCOg3q9PVsUYTPXfmNKnr7VlniBgIo+MzCyu6e/vt7s/y62hv0977e7q//rU/e+ftt6gSNRa+LctmLASbZSBq5c6uPhAG371epVXG2HTBuT4wQ+pXKetFoXlT9Jp+sEAoRpyXnA+EgJrRRvHQQFcgAK+qMaM3BWCA1Y4BVwE0w0BJefa+lovAWrqvkA/+5fIztmoDL7XvUe7F+AxAl03Z3OmVfFs010xrW4LfMDFj0qFtWUvnstbOX/kHv3nvgfv/7f/y//wnv/3rQ+dP/Mn/+XtTo4NNK+YMAARqcjurRjo2I2ybGq+INpwiVkbpK7OLLkiAY4miaacWM9ViHeOlXrzCEVd1a8d48zPDA5cUOrr5wiTcSKp6lU0eTccn40cGAOFGBgBN+qd8KvwpAMMo7K0wKwxcou54e503VSOFavqSLzfJCmNKpxjWFTyX3bYvdeCYLJXvdvGmV3uXxW2DHT7+DAgz7VAHBg32rTcIWsydmkBrClhIhCvDMVhQsxhEgjJIsFLLurtmFhL3YvYZLMFVLJ6JTM9DjD87zj8GK8tyYZnF0yUQh2XJxo+7H+sytjNsVU5yF3e48UEK5Ugpolqpu3OXslZJ6CqXBxeAZSi1yFJfLLSArRFO8mYQiDueIkuM7KaVq6mIImz85WWyhecm49sMWXi3ZfVTwyqCapQ3b1yk9QRWGXIUH33pkDOIUq4cksieAqfto1HkdglJ45xFcUq6kroSUu9mHkq5bsEQZ8r4PD1awJVLxiV54ORybkNaCgJBwIE64JEwcCIIiyPAlLVMj8ZzmUE9S10Af4YZkG6wkDFnayi0BKVmgOg1mCx5FY7ZNC1jMUiWeYZFBJqiDImEUhSnUNEh3sDWy0pyvessahYpaWPKUwL62ZjBnb7VBvnrQCh2T7ZHpLd9koyniYdIf81Qp67NHtuHrmf9Jhu9U60ff+QT2uPJI8fee+ethx7cz/Hf1tp0e26yt2ctVctFa6sGxemvX/3ha3o9tg70TAIriD9IZKw9QBWky+aybW1pO3fuglUzWxwltMZslSEWJiXWiCMJ8hYKz2QOZOaiTTIuX33jx+/yg7CA2QYEG3pOpqFbHGMKf6ugZLF2C+2MOW3GEtmbkzctV5CGL0VvQuCtU7g5NnrgwIHtO7Zq+J5xA9/QzjbDWEDgLPTGXX1Kw2LWvSpRF3/wyOFqn0jIz2BoKa8u1VeE17zQKzDTcr2MbFiqOxV/8PoNG7rXxQO7Y9tWad5+842DH7y3c/s2PKH6BO309zLK2c2wX3AWo7E0WSAIvLrYMjedTTm3btpqXuXQocOA79l1l+ACHTfHKYOPmSEBPHWaLCKeRNkRLtBa91oFVaVQvz6J+fUSVuAwaiGJED8N/6QhRd5EcZUuwHt2nmfshYkHQJRXhDQGvXJd9E3ttSW4cOYc+BL4WnMRA/YJwpWIpR58ktIdpbo4gwpgwWGEMJ3lhb/KTX9RdlgBHJJF4BcGLlzUFBQBTsaru3cTHniinfmBfCcRqXoVZJxgz3SLTImXSnEhDQIl5CrTKeraol4ZFYSZfI0VZ6W7YCiNCyh5YeXCBBe6vIFAqnhkzHvoYZ0sSCAJTBoJNLpq90tQ0yOn8a/++i+E8WzY0OlIASitW9e5d98uDv7Lly8AvWq1zUBbe1o6rg413hwftRiou3f9oUNHLKkzXjx88MjWzRt4M1Q2BjW0WeA4ZxXO1q1rUzHTM/x19rW1mN5XTCfSDFkNz6D80sUBxGtI2jlZxNNC2C0ReHQxlsEboshQE8jmNDXqkcYotG/DetQiD4S1ayJSeD1x05xILAy0+Xl14DLXO0aYpbSR7n3794uz/9j9D3CiR9TGxxmj7DkVTNdoTnz5uEzsIAMgH4ARJyrsy+5EccgsLBgYNLCkiYjhlHGwgqDNdHNXtGEAfKz7hTAaVSTtgzNV2fGqkPYzV68cO3ri5e+/qEqUa3D1+c8+q0fkS3j22WdfffWHEkcOsqPRcQoCcM2MeR26Gxq37dze3JqZnblytPjtzbYV6+WxwF4ZDff9ND/F84FG+LAAurrW8kzsv+8e8oocVB89mlmLv/3Ot+FAPPgHlw+lR3QhRHUoCweK1GVdTpExsVhhpixEUxwnCEoE30/xPCYKcAPV+APhF198ERuNZdau7TLW0gzefPPNjVY325y/txcmYGqHAFLT0XQtLR5k+dSnPqXGTS8Y/ZMBUVougyXA5fIJQ5566qlf/dVf9eylwcCrr75Kc6lHVW8498jHPwEliYm+HgcVvgLiSLtC1y3vawUZM2gP9qY3hJBGacReenzwE3yItbfHxwNbPAeEQDoB0XvYXrl8GUCC4Z5p5YyIENIg6Nxen7wV9957X7FFIpNmsYTJ4xgISCAtRiOHDh0ST2kkY8bGnlOkx66PwuGsJJueHB++PrRpw3obJ1jeLXqKQjK4p+/Zdky8242R80SRRE/HwPGz3KGTy7NSXJ7dmAr+sjCaG6I30Vju0ug1chVAMRxhKAto8T4aoDq4RAdQ1CXr3+uVLTrytgqBxskD12GiYWSlWXjQlZhrEY4/S9cSksUiK4abyQMfEUG8KXrPKdqn4lBlMoPv8hLA2cTUNkzb8LHJfuTzpBYCVVBrCTGxAdEDZNMeK1ZFDAr6z9ovGmPZ8jpTkYnmurYgqanL4uFmB+PJzOwMg4382L/ITMniACDjoEbAYwXKE/0bKgu6ZQalevULn+tQqrJxaQBQM8mZhiYcytfKHyW6KnXu+VqUmJfoKmzVKUfd3+GnZC5C5aUr0lX4gBV6ybllQkEY3dQFeyP1HnYkVoGhmG0sRJnULOqNECgltVWQBi0oMnqL8AQH9au7LaUnVaBlzTffv8UDMVkBE+KYoHklrpwlLCUoX94Uu8zWbRoByQM34fIOk8NW5fBzRwqDeSYHIqMGF54xp4xCIaPEennWu0GYXAToRxi4KGplLBkKf3JJKF+R7hjouYhE+Z6hjHf+xAhW8bG9Uhz2qOIQ7shU1W+4kuGsTKlJwyffwAo9BqHxrJdJmjDbgD3y03BrCh+AChDhSkkeHDyEtbk0Q2JQm0AOOEMQ4i00SKMME6Txs5g1+VomGbL5qvmRQKlxWSjJXNPSgCGGPbEPVJUXMv2F9gpb/ii3jHJTJ+z+WPtcM2rWsRiZh8IoXn9aGRkEn1cx2SGb5RVIDdoeNAGa0DMHmdaUasUxsYBF2KrwLJWbk9Trs5RaHzELj2KyuMUag175meEEHat3plfBd+cjp6XJs15An6KgNjvKl2APWlpG9jSYipBReh1r37ps0fHh++9PXb2On7ohu4xcvDy4a9e2T3ziE5lab43D1U6SejSeJuYEyHZTaW1e/cYbb4gofOLJxx84cJ84ZzPGM7PTVITh7/DomPFHQ3PL6bPnfvDaa1cGr/Vv2NLZyZuQSKcckJ61qol70Tu4NAY8aW6qO/k4D9goZ8pm4qtvrxaqoHr0OFevXjl77oxWiUCGh85R6LU+C0U4BkhhfXiLS0irnu8zB8/ioZrSeRl1YJoIdixVw6rDBZPqWvap8gRzZAGTMnSBLGrLJ2Xp3WTRfbBcsVq4aRH/TIg5t9jYi3AZEZsAUQrHIggqi+l/6fxlvOWpfOC+AzI+9dRTuKqNgHb58kVxBIePHkrjKjpcofpH6zrYJ3Kh3R1FwaYsaYCzBzMtHsiJytembBQrjb4YEPjA1py/6lD1SDBe1hdL4MKH2EtlzUnUe/Hi+6odILPKm6l1D17ihrLAxEC2Gc5L7woq5VIWj6kQo+ZVXIcxzRXsC1CSIV/p3kDDV1KkdCOItpZWJhbTRQIDWOn59S5dvkjAvJFenIszheRFgmk3YKdmcsACNNROAZtlygmlthODk5diDhGoNB/JpCEG3vtZ26AsLgWhSAJf/URjBED4Zhn8yAWCNO5stlo6IHUAUOjO6iOXuYl1rBnnFFlOqixGydp1Ha2rmhgo23dsdj6vqANisLLJIGxWxw+o0Z5QHKaksbZdfX74g9cUw7tJvJyyajW9wA+TJpM3JwcHB0TXffa5z+CaUpFmxS0TEK8tYiA04rQQ7Kf6A1lZfMz0u1ZBVhBGQBFGXiudNS+Zw30w2evizxDvK2hF3LW5DOlSJQ0GxzOzNzOfwBJlKqgbaGAHViIevVhvJouYGrWrEkyGBjbhiY1+jQP/7Gt/ijOf/vSnvdfUibKTJpRY5c+hbOAgAYT2Tit/OrmWVcz0xNT4FE/9tLtn+yaOW2U6OX796rWLA5euDQ5xMJsQ5Ew5fPA93eF9993/xS9+kRlNoKFEuZjSQBE0PAviV8rhw0e279pBDsy+mSBGlJPGZttmjRglO/jBB/3Z53hLr8PYGtYbDMpOA/Su67NDmUaFJyAzN3fs2IalpKEsY3pXiZooI1tBmFMrovB2jSAjkLFaeguqkI46Bj33mGc8VO9mAHRMnr0hajiz565dgACrBn/wg1f46WVRxRkNl6rHfz/hQwVrh/IqGuvQKBfGGrkZYlEBP3jl5QtnOmdnpgRcqhT84UWApAkBEBRHuT/33HOyoIX1b/zzta99zXvdibbHjaEuCI8izAMAi+GAKBcQvPL+wvnEZQIOZ42WUoMeBeETDlehclccJtA8OkhK0SBHRNPde+8S70iodG16tA6D6DVr+G1Yzh3GXet6hLECApQP0ICSgrZt3exuuTaA27bk2DW+AcQ6MWPztq2rO/v0Oq3NOVaZyOkznCeACiY4xcpSSBRLucvOohECFiOvjOm9IR717gGNVWt4qM/umTOIxkgf7KsrRt/SJa9HCHuvFEGGnIVGL5RW6UpYOlGF8qpoyVy16ALALwc5Tdu2EeY1ga9Y52sALl2ea+kwoBOVJ5n05bYIVttM8pjyuWQBnZUlqMGAh/lAH5n7IsZAQdvXYsilINZakIfNMvvuEWOuJsuapDKWW9ZiSVOTRfDOA2Ft6yoED2R3DuupDHSUYyd0Q54SqY7MVJ9aSBgO1hbrLXj5YQyhHCMBixlKlI4C1AB0JCil179hpp++eR266lBpycCtBLpXWuRxyeKnPpiBpgRp8aewKMlB8zV4lWfvZSlF8GKlHItasUXdSZAAnhySNmctoihFNZpYmFhiifmem8kiVMW5x2AsV0AxcxMaXgYkpWLUqTLMnBjvYRUNw4hVJQ6EKoPKBfsj2xxZRrwmsbJTjMUAjmWsf5tRYCLmU8rKta28rewj/1SUhukluEImqsccDi74ew89LmYk8wYWHL2I7KB0pSGqrSiLcQm0xC4ZYedef1Yg7oYDZoXyOc7uQK79KzgikMPfIoS1Egt8LQAQxcVqB5gIeF/+5TE7jmYwFtjlQkhE0UvAVQ706wecrIjVrxLUKxMzBWFF54nsZSDByJ4VhVRVpU+FdmNdDdJESqnrLMQV01OqTCMqQJRFGae1LF0Tk0JfMkChKIzeTNewWvGZvRSCgMpxp4kdb1nZTMh8SU0s2fQASlGRV4lVH9JGno0ZXDoISELPvZIQ+Sv7UOs4KDo/fdJTEAYJOtas8ZIGxvmMr5YuB2961EPpR/g0yQ/IE5PjXm7fuWN9/4aWNtuEZDcVcPTLigYTenq0uemJjtVNnEFvv/mm5qW/UzT9+VM//UWBQMrSOwi+oNX716///Oc/r4PQg+g17J+xurXt8Y9/fMPGfjvc2OiZljb8qHVkJZgVAyfOnGX9nz57fk1H52c+//zRYycM8PSP9LZ4DrRyI1LsIgggpu2TExttgxB6b69gTRW7LmeH2W1aL2NAZNu9nTu2S6ABcV0JSdKedH++CfDAbXzWFWaTd0yYyHtxUBBm4muG/ALemL7Q8zpli90iryrwVbXjjNKh5EGy2oSr/KgIF+DXhop5LVp41SrSsH7jZk7SVew3hLS30cgmw6XUjfKPHjuRGfh0mgvxeFq29+ijj7Ne4K+a2IHDGcXEENI+VGsGGmXvV4XCWV3ASrUyKXX3mA83UgFJYQXmk8fH46tGxfr1+s+sjSQ/9+4/AHkXIOodH6ptwMnGVCAG+Al5CNBkMDlz9jxhqHzTaUDAlUZQJsXA95UsSUD88MQz/ri8L0WEyVxdDHstCAI+wQSSroqSBAolRSDAlgBs27Jl4/qY/jCRRc3ig3LvuXu/BQAQXlgYVOK5s2MmuzgcheeYxSoemARWuRQNLGjaHwhAYRTUPMjuvQdEwMGDuzQhqlyokN1L5BNIFHnd1YaHArpGIl1l8gft2O6N9GonZJb1+tIrq3H//r0oUeQHH75PoBn3DMQXXnjBxrSoctaV3WAoDnjKEL40NJ47e+mhBz+26fo1e70KBX3+c5//znf/btfOndQSI8ZKW5tjCUFZ6ais0RbxXhzhsDdA11o8k2C2FzYxB1lsEHLBFTsEGjkYWQJyIzHUDcCgy1a5fPmKn0ZuKgA0lHPcguNl/Btant3sbAduz59MNWQZQyRg1e3R0RHfbVcY3i3M25WFKJMzMxKDg1c//PDgxYuXTNyAAwFoqPh167YzQKvsio3j7f761/6CKtl11x4h++SP8UOOsZiTgEwwxFQDO4mPMYaGLWYXMpXW3rq2e0WXLpknoKtjrR0wHZE9aUAwMX1teEhM+eDQFf4AiNWVtbpX5ume3XtVjBrv6Wm1MBRzuDTIHPQZoJ1re21bKfaDvSuuwSoP9a3h242YZ9SMvAU1KtTpJKwcDgl8wCtFwBaSyFTXOGxv3/vuu9eBuCAbHrjsk0AKzYlUe0jt6zQwyoUnGILzyHexpONxb1wOB2sAxCZBWF0YrfnEJlYKB4xBhSK0fyFYr732mtZO4ZJC7R9KJNJD5lKmpjxryRhLJKqwqjsM37C+f+Dy+dMnju/ctQcf5Prqn/8FZMTcq0TjFsFCFsTw2JotNb8GgnPgfVJlZNgAnahU5Ldu2+zByE4tq1nvXZ6pEpKpNnHg6tAVTQ6vIEkSoKfJyEX74J6WLIuDxhguopX7Be6sW8dPb74FhNVtQjuW6ZQE8KiF3v71th/gtdDgWktPiScCTGRXCyrFT+ON9Rs38K9Y907b9FocvX79+Ez2UHMMXF9v962ZSfNFp0+d7O9dyzLghNG3J8haxy9uJTLP1+t3DBBgtVCYw9/lZ70jxIP74lVSxgtb9IWXMHHXqdCVNaW8LjBjnd8ykuTDi3FFH+KG95qkXCWV9hK949JgmWUg+FTa7KJnAlZSel+vmtibWi6E02eWi2RKTDgV4SFELfl05c1LVN6ec1jRbEMTjV4NPilhRdrJrceSKnEhscwtVpu1l7mju20aSF3GABKcI1KU75MatLaZo9/skqCCLHfl5iwjPbhBjBVsGBBMEv+ikVM1OsewmnLCMKQGyQw20GjQET6Hm8VDH3qtJXUVg5EW9Qu0MorIECjfywWg93J5U1lRMsEnOJeX3HgsuXT/pQZUuo6BQkvC8n/oDvDbpmngRYazV3tWhxgC3M7ePsVBjinBXPVC2FBArI4RSeqi1AdQGZBhc7RqiIaVqIiUbn8bIgGsk1nC8VZjUeaKOCrb3ckifMZeyB74p6JsDC1F6BjBQBI2IQ1Iriz2sYkA1pJhiiCshExRnyk0Ol8FZ3V2YWw4i/JglQUDUObRjOXqGZ8zHTMHtxzwrHeKwKYaSnrHlism6EcqMRg6ps5CErRKX+ZL+hbbVM1Jx/dmmFErhKfQqBJLItZQgA4cZPRQKtObWPkle4om49VLSg4Jv34WqSErNKM+/bSrQHAPmQEe+8T4p7S1kFw4sdgywjNrihQHW81C+gzvaKaEUhl7iv5LFWXt9kLcZ5GDIodpJbKZknAmLkxEgpmgMx2fKR2hApYUC/RPYldWDGg1VAemYv5S05bYZE3mawoZPAAGaEXOlwsAK3KY1io93UgcvHFJXC86li71tdrK7t7DilJlJPlU2mx8q1R9DJFsLV9GrUW96JVoe/qcDcqlZZGhNwYUqgdiLuaRnqK/t/Pgh+/bGWDgwumTJ47evXfvlavXn332WR2NblHt66Eodn3Ttp079FlYpD9iicJcVwvvvu4+w+zR4evnTp7UD0IPPkx/zrXX33zLel8hnSSgb+Nm6uXI0eNOuelY0wkNmF+8eJmRJn0sqBVxafFfufOTSoDk6KSVK27Y6WHwEj+ReV09jgGGjhLT9KdwWNfRpX9x6dz1g/YhxQf8CQOnE7oD1TA2Owi3tnTkRCNKCu3S8FryEtArLWVtgEKlBFkpzB5clbfIXUKVDBMs0CVkdCVLFwP1U8xt08p6HEU32iF0ft6+26L6dHaAiIt84aVXVAQZ6V7bDZpe2DrN0fmRd999R3EmFCSDMGzJFk1jI8Ei5xlaYxEmVJ+afGwDwVcGbF6SAUUwrvhc7BCuQ1e/3pvNkAvM8xfOogVjjc0YGCSnDJDm3//goNrXxatZEBDLa+gn472KECTNSnnGOpeNRUkCmLIPD2fqACicUag00kpTIAOmU7i1ZetGqEoGmc41bZaFOHVHiciJpVS2YpfF180b18d6sb65xL+5Uxo4GYOpo8N+TXXUtHfvHi8JIfnZvYexLYp4cU6szO0I0FKTqlLNaLiaW4xbxcEnrbi0Gm9cyvWzJIsO8QCNWhyO+aqg4vnxmEt2tABOukip9F4C640HWVyNn3jiMcvY8YzoW5CENaKyVVIaWbGJ+x34tDFRHHBipjgy2bYzNM/PfPGnz5059+N33/nUJ54kPRvXb6JrdAA61SMHj4gEgqPI6JdffvXBB28++eSTDO4PPjgomMFI6IEHHljb1a1towKKBXKWzsDSpaPV8plHPoEMe6KDYIIFYwTTHWrCe5uQjo+OsMOiJnp7fUWeSKeaWP2Cpo5NwfDO+iSvASE2kR4MxV5mLjgs1N277sIU9QSyaS8mHfmgSE0hyfWNb3zDROH1UUv4O73RdBmdJNunzOWWblKhME9QPjXNnjKlzaaKs8X/M6dOHOeuMWGLhR29Pbb03b/3bgMDyGiNImTKHFlEWVkYYiT1mc98Zs+evZHOMtFpFeyGvn7Da0tWV7WvYUTu2r4Df7aJQb91a9/d94jfcInEZfOa2dIVIdCAEBs5/ImD6jAboSMwV9Pf1z+dU41nBUcaZlC9gwMD14ZHTQFpb9Z8o454YTWxlKzOFRrjYldlL3kiYWYPkU+k8M0bXDWEw8ZME1n1Mm3Ls7bPfe5zFgr/8R//13//7//9xx/6+L333kcj47yvZmMRC23VhxX0lFomigACrnSVu2XjU5hgsSz4sKK52PcySg8ZJRIPmlRBsoBDcrRM8E1AmUQmb+K7vvN3fxtfy5p2O/3bHchXSLoUp6LBgb/ENBHdapujbdu2AiheE3qSIV/pHCRMy4sDF+zeYIOIoatXcva4TZqzntIGJmvNDgnqHRm7sWs3ceL0pL5jGaCLcI4M55gbIyiEG75CVafmZ7TJ5s0oFeZgRb6WAk+tT+V+94XvSDZ+Y6SZjcrQ0I+n14+1qn0xQZHPpoNbVbs44JLAmwhkubzxt3yJX1lKX10e6idfVUHNWJNVaJqnuMziXUokfcLpVmYWFXwigbQIXOljYhyzzMRYF8dDUKwGTklcS3Svl6Llqrhxj8WBXxJrgB7cJaBqFLTofy+opiRGPR8YFrASYlolMVNNykqOhqgtGCRw9Rq7QMi8qvotl/nlTChoBzIqn21tyJOFAIUnhQmNmc1i58sawzU+XhQYdukB2G9yl4KCe2FqYnoKOShKRadOckX5VgLdUV2feastCk30SbmSrpDsK5RqStBcsrgnLiVxHlLJkjS2RFCDOKFppJxy3SlCOcSMKwRP72SZX55VTKbQpVVIWfDgqXgLnfAc2yKopoyPXDSn4thGiiuVg12SxZBvSAEGkNlES03Gf1yER89ivw9yt6o5s89zzkScnXSClNEGYTVXxXimAAu2t638zcAgYzqYpODIhn308FMNMNlNJGVjBYVkeJY3mmrZ5I68R94kyZqvEJWh0IJJ0eCTT1nIG/nJNM3SJYOL20J2CTzXKjIv5DmcyaRBdFG+KqJkNDPvK52pX0trMbqQzcSHYjxF+oyR57wglvjslNYCLZJZS8FAXCO73v+9C9213gO4XCC4JHOneThwjViNsYsejq+T0osqz9g2ApOBENT9Q05QzISI3BIU+uwT4vxGcYuwkG+xfKl5TEr1sR5DLCC6gKBRUIKL58oBD2ihowpWsS/5/qHnpYuuxjHV7auf7pUQ6tRLOo1ASuynr/m0LN595NCEOmXAdalg+gAHn6h3hYNJ1VucRhleGrjskMpljYK/7TqYzsXSXGB90u//we//h3vvvkviX/qlX/r0M88McD62piOgPHWIeEg/m7iWPiiVcukufmtdTE9399mzp+3HwJUGPbPETH+UEuoz5y40rmzef+/9EzPTlwaGNvb38XxbDkHLya6ngGcdybS0TMLWQjh3PFOQB9wWzy1QV9evn9W/oI7xh3l4AII5bfxhU0p88cI5dwMDIxwDiVRV1u+uXM+n1d3NFGFmdPckdBaS0L5weUAnpU9sbrKQyVAzFYRkF8h4iFK1j3ZI+gQlPY7GYE3F4NC1/TsOaDZ2O4SSfseEEotfVJX1sjUwyTpBpSvo0qXL3G5wg5XljhmDjQ1bfIwEvALWfI7iANdR9nX3bNyykf0QGSodCtlQR2IxUpV9fRgLQ4oFISqdDXb48MHBKwOqWwKfJHZnhYIpJkAytjsgkFEEfNClqgavDOnTIUBsZNQ/sZpUWdAsUTcm4T0D4pIdTHk9Ayi9u5fu0iAEf+RiD4BmoQWle/b8OdEamCNjTaA6ahoZiRMSvJc9cUq3OPV7608MwXBVw/u5c1cGnIqzFSm+oZceNTJ0mOz0bCaapAQeGqDJqA3CREFqELalvtIKPHjvpdqED1ZgozuEMVl2iEngqzucDXFQKhfxkN3lpSyGxErUKCCjOAVJ72q0awrK4WcpzJWBQRPszHTHKasMZUDOdMf4+ClminpiU/as63/u2ecOHzx4+OBhcmcw8Lff+tZuZ8peu0pprWzvtMSuo221/XF5xKmY3t512FHlSXNlFyJe5Z0+dVYtMlPxFH7YCg18ZC0rCCmoRZUBpjUrPhEgnLX+XX0bh2J6EvBm9PWODY+cPnHyzMlTdBd2YLrEpmAiESp4rgT1rmwUtsRw77HCsqkZF86cOUu8oKRQ+GgSPPi45pPmartJtOMdLlM3z3/hc1IeOXzs7TfeNCWHCqVQuFQtJsITQw0f6WTxBewWfZAuW4/g7pmV093Z5Xl+Zn7MJlijw9Nz9jXKxCtvgKyfevKTn3jscREjaMw04NwcVH//f/u91pZV/Nx33bXPT5VK/5hOoDr7+9c/9tjj1Ks+x75M9o7SlZrbNQWwAtspdQ66TBcbiEeq+IxMaKF0UjwNxRQtMSMuBQLWr46M3aTT7Vm5YxfL+S4DwhjNh163bIzqhABRNj7Brs2bxfOY18vCjMKcMvl1O3Y/GVWz2EWV4IlK1/LNJ6o77/m2f/mXf9nDqy+/+pWv/Kn0Vjg8+eSTQrMwXF5CCz3ZNQcbqZXWPm6jVikHBwXbzVBVEhAkdcSCpwtoYYySnUfnb/7mbxQkIshMkZRVqEQfmdvhdUg7KWcxnjt31szAt771LaAkY4VPTsyQc2TLgkBEIVYWClRZ+j5anqTB0E9TChPTU/b/oSspTdsH+WQltOrnV+nu6ePxZP1b6GaOBM5qra2p0XyruiPk0EDOtWvZDsjGC8otkY7Ld+zabQCDkKIUGmCClrHRa2++8aNjh49s6u8duXa5qUE/yoXJ8k8/H1M4+x9qKemqjTSFLuOeC2lZGBC3ZZ71Sf5qT3y+6dOlonj8RmphuDSumFbgFG++DJ7d2UzTk7OsYcOP4swi2PkWJzELKIaRIUk1dEhiArHRGDj//QWU90rRPF1BqFwe4k0uxcnBL5y77CSP9zoWcNZ71YwRDs7jWzo82jLo1YKw1CUxroCgKwx1YUwUYnjOGIs3ykgpPURVnVrZyhWaY0wWrGMcYYa9QGGqA2M6xGVaivAqJlflR3znUTLIj7WpRGo3XHWlXhJbEq5idcxQED5ypQjkqMFKkWZS6ZWGJAObr0sWWEmTeo4+KbQgq5j16iDFuQrV4aqCpedCN/IpVrAikgba7gg02IefLGW7KC8zEWBskUFW8AEj/HQF7kcgmy/EnYoqULpNA4EZDjc8zZrRrG70EmmxuQnQMnW3YO8ElWIgwr3OdL8DuYoAvlrvzq4tHFsZfQ9WsWOJFTs13AurM37GEqw2CpEXMjG6U8M5Cib8vz1TaXT3HxdE5a2KQEVqPGFP4VfBAUD74YSaEJmRQCw2g1aGFAha7nzZtT1jkVjSBoLZqkhacuU3nGL64xhXdOyDtKdACqsNBRaaZrFlhc0llejCBD/DgPp/ksqV3wFRBAQEJBWpUKGpiVQlyvPBStm0bSsp6B/634gNIQk9KY3IUETleaNCUFvzecEBlXnnzBGuFGPFfa8mVLFdlgJfUzXxRYzCSRgVOfR32W2T2hUB8LUdhWbEuHyOhRAGJndUD9IkTostpdN1PnopFxlOojL1ird++kpp+wSaDs4bvSejNitNy1Xs48WdahTKFKaKtVOrEvT4J06dtEPdpm07CRggdCn/FG0pl16JLrXN/95dW83m+Zl9AzPLMcvjbn9txdHn0JBeD26kwgaCD+Cw5aJa3dx06MP3JdahtK3pdPCiLo8yOHNxYNPmLT29Gwy4N26ZFL02MHQdtKsDV2wxx3gFk+RDXxXT23oBz6TDS0469qrNplltzpBp62iHj6+yaDUKUhHd69bS816SRcZM7bAERFhMXGokxh/82UXC6mRkFLgLmT579vzQ8HXsVSIThStAtaWtFSOkiFymZxkJeMVixy7eK/2pBAKV8KFtdavzbi91dPasW7vBvhplow6L4Dga2SbqSnyB+tLxyWtPcp0RgPyq42VapjTJBsceganbF/jevqpLyBB62TbQ7u3vYTPofP9/pP0JkN/HdSd4FoBCFeo+UAWgCvdBggRvipQoUqQoybYkSyHJbts9M93tmY6d7fD0Tl+e7tmZnd2Zjp2Ytnsmdjd6Y6c31tOH3e4N325bY8sWKYmUKJHifQDEfQMFoA7UiTpQQFXt55tZVaQ9EXvEJsFf/f75y3z58r2XmS9fvsykQ9ZRL/JchgaUx1+BtAwN3b06dMW6ByeI7t4usuHqZe5evqqpbQbg2xp3uewaNZLS8jVSzdCMCtHIjywwrFqHsuCMDrCtCKO5ZFpYlUwEMcjiuyzi4SkgkWS174Wqk11MP2iP6gthEQQVd6QEEz6CT9DzSem44DR5TziINwsSfALhzOmzeJri7D5YWNwxsJ1/DQm6dPGylTVBYYpQOhOboGlBo4bi0pWDMWXXqiRWeuF10AAfArCSV1BlhXqWCsWrR6XKfCNzSKxXfaDqZJXs+QmUomtZFhYbvv/9V2DPu+b2wt1Ll4ZOnhgikBfOX6ZmaQynT52TWUdpDqEt9XZ2v/PWW7Q3RmubU6lcKv+bv/Ebn/70p2Ml7eptbd4iEom1RmX0l+t+P/e5z9l9T3VWNr0QZJ0v7Km8EMI5Bl2Tcrmct8gHSfXCPGeplqmhInhdQwYQkdQmxJXLfQZcN9tbMhlCLDJKF2TuNbu1b0FB2jxtVWK4kQBjtMtr0QhYjVYz1h2QVLogfxXYmsejkYCgyAfbuXlir1XESlTNzDxmoAolZOWRhj2qkEBvyJAS5YTBSneo65ZLP6tjaOuKon+3+a61p+WBrGCS6bGJ8TDfVubeXtURSWE9ePAedbF+ZPene3y5Ntb5Lok5ceJDw95nP/85pbFVnzl9DvLIePi+IydWToEAK8fO3F2+5WR8J+KQiW1b+ySYt9DOkrbZrtYO01BtmCTRipWI9WZZamo0NWAz/+8c3A0NxDHr4xVj6YOq/aUvfRGmsiMmsIgDgk0RzlDa1p8z+0VqWtKoMpqksrkEe0RXDo4EDsTVaL/+9a/LqEbA/rN/9s98pYVjq97cJAEyXhBWBcERiPL0yjKOE3rwPVUHNBKCiTgFE2MABjnACsUs9spOSBRqxLTU4Kc2QyFQxwMHcnsaNNQOTBh6ITAcQwG0QQVw6RVkKwscJNDpqzVpFG/A0N1yXLPYRY8H0O2PktGitvZto7gYGywZd3Tm1jmDbWi1nK1sqqn/goxC1VFZDFmQRApSipVqoSDDuwpaRGrZzJ1x7rUfvZoZyPios0opcREt/yMv3cFGwzgjbOTS7KwVogssPFC+dgR+op4ihPriGUzrhKHqQyWBLNKoYFFgk17eGM9pbytG+uhQjLxGX/ECMFUACtjKpnSXBUzagvgKs4JayyW6IBAkqg6UlEVpSY+IvNXKi+YSsH4qBTDZKzQv+GrszDBrJcIZiDpGPKZwuJ+2KafZIiM4G+5GRymE0r9TrE1LAl+kEmvVpZSR2xZcMN08MM42PElySE+MQwqVGFmEgjJ4RadO7TItYe7HBqsD1KikyUGiH2mfwIfW4VUYUUIYQZkr5AE+nCrgo355qdWUplIsKeAQuq7OgnCG5opRmECTMH6pl1pLBlQ458C7HMqMYqobo2yBHM2MApD0VkHieB27kUg6d+zJhXPSq2Yt2lMTCLjK1EKKVMHOrgUTDACys0AyA5D1bcfHq69lKxNbVWHecgK1RB3t7Y5arxMAuiYABWSkxZlq7S2uTGmO8MUCHb0eJcEGFiKQSe3dbhOZCi9USjW9FwnJyA6eiSvxlyM0MY1A8czBtMVMIEOWxmwvALOQOpxCutUNLZVM5Vhn2cXyFxNQzuAOL2p4tH92nESbDaTMyk7Coi6ZmohMPDU9iRhx9axacaql9ZZQk5RUq5Lva400pSFVUpVap0UIMFdHT3BomFQ77ZuS38jxvokuSB3NjCOCb92poVHm0ISnF4nNqkDmDLZf24RsZwuiArmpeUOz/UJlz728JhaQrqsikKm0ylPKIvzeiZZAG0YZkWWtO7o1gggExte6CwLyEPAUX6ElYzFXSyavMVdvKVw4f8lg56U2VS+AUzAcUV2mBN2qbAKg59RhXrpMiaDTL/Y5GGHbNrXQ86OPgiQTFPo3/+bftAdAvzp+cwTF2zt7eFPAAdim5UwYvBjmBnftND5a8oaVPp/qYqzc5eIAOv7gDuOdHk+n2tqejvr4qVPPPPt8W0fnzYmp8RvDzvE4fuIU1cIMjIXVAW5UEf22Khh3bERUwe6uXmPf+HgcFvDdkyRYiTGo9e+IMiPGOhKEjVbqQu1mj4eeq3mdI2fZ3LI2FJzyjmK1dqxywb8YBL3A33TIhQZ6ZPREYTH8A3xCkCpCRa4ihwYdiqIXxVESCm7jPEvhw8R249rQzdERX+1wcaSjA0WNMghyc2Q0I/jyEp0H0fT5vBnwAkomBsjLWlt+bpKMZqXiSuHtjHe0I6eKuDSNv6XxzphLGGBFYBRUR2rshrkYP72zu9k6jN2ua1AEu6pPVd0CUL1uxSEjQUFoTnUhA3pQiVXZtA1TJDOADgzuIgNZ9ikSqEQviuAWjAK0CIO4n4BLhmpVpNEZnhJjpXp5t87Dw41AYoc0NYGMqOFdSh2jEtUCPnQ5x5uim3jaCI8mpmQF0ZOff/55Cl6hYdZSruRerHDSLUl0RMirqa+kwqm1YDL6A6KaSoEMPuJvodVtWMENDr5Ko3RfSannekDn9AAglO5JE/MTKFipcq24J1C1aHK7Curv/kfPkqoPjw0xxO3c2e8Q+pmZ23v37iKLcEJ6eJcKt2Lwzl0DCzNhBtBopJ7wsM0XBAEb6PHKoGPB/qWXXkrFFpYQHw9Q5NChe+U1PQLTWV2qZ6lBGjE0QhmR8uz5M4gIaUWrFQ8TwkFqxVSOqoYGbMLn67WhK9v7tupgiAKCwlNKO0sxGCaHD9+LvLoMtaXfO4+Jfk+ibBKCBhVNFbgkOYnW1lIVEQkH8DGAhKmCd3sYzD0IEJz5E4s0AfXViVqCbtCT3zlC4zeBcCgqAz/qAyWLUiRGKChBWHa1UGVlAa5v1Sk5LUhngR9445ME8vIMgh60taVXXnlFs9ehq4jjdX16+jOf0UIeffwT6kugDelnzpzTi6msy0KUqyDFoYmulF7EjmCKDysMscec6YXo5ByMhCh69cm0dXuerTpntprO1ubkLgguMdRrRHaKD/ctxNeFQQC/CJWdA8pVHVVQTVMmCKChurDsY4oaKQZACBzYtw/FCCjK4CkItHYpUQmvzQxJBcxrYGXf6sDNcmSB1iKjelWGahIaPzSQXRHSExgwXfgFOMg50HZ7/y/+4i/+4Ac/sFVAHwe9wcEBtNV3EyEoATV0Ndq5RguIS9+MN2RGXQxb0CYsJnt+SqNqbCdXzp3l+69i+vr77n/g2o3rVKi9+w6gAwOSbVtmAtzWBnbuNAOxYLBlU8PItWsIolDsUFkTaXSg6ZNzG9BVXAeNHbYFczA1LqMA74l/9S/+Hw5UurM423DXVdDOEZrn+cJMGvXXOF32z1FVHa5IYw0byxisIMBRA/3VV1AvwMmbXIKYJI1LCUtZVWbSjVjvFo1XsYoaPtkV4hyz7Mh9ZzFhciILB+kNoNFrxVRr0NozOqguSIkfDyL9hFVB5yMVBzI+UbBqgjzXjO7SF8tW0K+56hP2zZtRodEBoEubO25vbP35v/Y3H3v8k//0V/7Jf/73/9PFW2P/7f/uP7s9Pba5YdEMinM0tNmo0MS4r3I6CmSh4oCf+TrKlClBSGFnJCva0sp8jlI0oCJatEDyZhSEKhGVTAj1YpyOVFNQ4/QYaGv6YSEpxS/VKWsFEiXl6rORWy8i1yzrTy+F+IEjoyADInuxUdbXGioRvHsJEgn5kslICTxWN61Q0MlJ8q7lSnqyV2OSqbjTgM8txzXObLmpkxADdyFL2WSclCWIrPjo7tzGWiYhoYOPnnoPcxIOzxRr1mIqJG9Xs1PbGQ14G5tasvE8glfPnYwuDaDVSdNr8kzTdrZTeVcRTj+r8xDJ4F+Lll1IriLGXnwqCazbZqIi+AmTMDHndqbq9PhNcVcJ+3C7IJy1kJg+GglGnDREUqn1CSqPxe7aLMOdvIEJCIt7RKH0MEWGfTKJyiKnBBWrWnrqRXXK3ALHCU9GEAgXEqXrBqTC9KwhMTZQ1wWkVYauNpBaU/ClASH1KuspBhA2elf0on7iV8yKcxI4ITf/CTNk0Nw4Py06gjseX9XiKJcj/bOCmBALaG3pEoMUfMr28NbmuPoIIpgwBI0GGmYUqYg93JsyPAmgECo3u8INNWQJWQtxK9q+6jmNjEDpvT3Ti87d1r8pXS5HrBtikF0yVjgQDJS6dNch8ZDRsdufr2dmGO7v27Zhs2PBVx5+9LH+voHde3Z++0++dUeXvjR/74E90xNjjQ13+CVZaJhbuNPZkSGD7W9iahJAY6giuO96MnQZvBRnsPDTpiybUNwF2dHdo8cbuTnOotfa1tnS1nHt+uiV69d//MabbuKBGHd5Y6JBZ/fADgbyNY5k/VndITk6clMy9UKB4ipZZL6YN1yABS/UcLhz0eTSl/IdHxjc4cWiwoF9+1l/kJThnJEUfXATem3t0Vm9GPg2N+cYawdlB/Oy2G48UuKWzS1Kh5uUujGJSRqU0NZXjNDhAUhbNbbuPbCf8uPS0j/702+B+ZWvfGVrTxdSY2Ux195WNQFr1AKqsg9ducbgLAY0pVD3zdIZEPzkJeE8kgcfOuI2AxIlcWd3l9OWzLIgQxhwQUXoCUChGMQAh5tIXFDoiZPH3/3gXXY36EkgpmjeQ6p2+dIVaCtFfYmmoumcoSELzXIOiTHW+8QkZ7akamZexlNjNzJiIWgQUK4DtvVF6KwKhLDKJDn0Cd1UEzK4RkElKtDWduEGsjS8jiUgor6ChkcS+wSrioyy6Jk0dp9IgiFeSj0JUsiIFxV4lXYEp7zRChiruFShhhjPMnGOiUdiLQmq3hXnBUGc07iOJ7BoEiRXVtAWEUCgwwio6l3tBuxB3LGDCiSNKgMloIYEqCoBsPCvQpWfX//cHhlczHz27HkC41hcKil/r507Y1qWDSrYJo93HU5XW+vNm6PeUZC8QvrAwX2YgQQwQGIqKeqgy6VLTmXp3H/wHrNtKs5Xv/pVsyuYKZv6tXfPfonp2EiA9Khcyxq9OaI+6ukrNxITA5SVhQ6n/rKbZqC7dzX0cnfBaU0tfFLOXzx3+tQpc5xd5RwiV06Y9M/O3Gptb7VL3eKOZa8s8Uze0sWoDnUWXeBPNVSEGARC1lq62iEL0sfTIwcG30IHejJsyZ+abhvgju90/ztmL2fPXXjyySdBuHjh3LatvXxgqrRBG56CqgnKkgVk9FQKETGXmLM0H5bHHqlGxAslCzVWckzknTuEW901AHOA3//93+dnFNWlwOTrpos27ly9NoTstgHsGtwpMhedtHWoHe3HFQHQ8O42b9IpAGUyoKbMh0JJFuVMBQV5tHAvqEH9lTiKvqXB6elvfetbtv6QCmThJGO+Due+rdtVR71Up1ahtjckCvSyyC0LHExeEMFEAbt9RQGRalpFQk01Zto20jEMWGLSAhXqmIDhcj85ypA3X2X0RCUZtXmi4j0T0UOHpLEJG+NI+R/+4R9ectpaCXCzD0T23bvj8QWClMQAAu1tXWRM9yfhl3/6iyQKZdTdwCfX6dMnwfdJDAoPXb28MD1lSLt5c7yjs5sL0Ja2dho/+5ShkIOfMVjtLNTii4sCnKvQtGH5w6MfmDujs5kk7V/dVW305k1oGGetPiGLKoiMH8LyBvuVv/2tP/3Tb/5R44allubGyZsjFLsc2WJZKQa+dJTVrqy34mNNfMieIL4G7+jpHeQaU+ngWRLG9Jevq5pHNBdWcgoBwaJAQFV2e6IoQ9QpZj6dDuWsgopiQCFYimKKmLopPz0rGmaPNZmnBLVcicCsMfVZ83rGR249fExtpWv6Cob063lBcZAJ9XtlS9dyc/fixraf++t/8xNPPPXf/+qv/Ff/6B8sTI/9H//LX56bGm5cXsw8IROnqnoiQpY4qKSgMemWAklr5gP4HDQyB8h39+5yA7FusEY6H4MGCpQXAIJPfTeHjm9ZCWCuGftXK46QSV0qiPCKC4nCrPRdQq2XFwCSfW0aUH9WqjDR1ZdSSFhTEYN5ff84nhJvaSIr4YhQM+JoKQLrM8GTKw5PtdCNja54jTNHCXUCUDHxFJfEa4xLjMQNfPbRS9UqRkiXZGqHZF54wSnaZ63+tn7F5CR3KDkpiLV4YyhcxhGEQGbWPBZwkxbcgme5uDdjDUuESYynD/Xd0gXDJweW+iSrIEgJSAQ5PIqMAV62hJB/6lgWrwqbY4Su1FhaXh0CkxL04lnkE7OI+ooh+YJROdU3kaq95PrMeY0albyeFfIqLWKvXeDRhDjI75MEgq8KWqennxWZMhOqcu7jR6FCq3lD9sKI1AwQ30KHUGMdDkMA6Y0AWytIQYpDmZz6jzQR0iJ+8JEl7oIOJNiSprGGfBCpE4C6uJN2Yf6knJSeRRAdYKpTxqn6FZX0nzPTk+DoKjUQwSdZlFJ6M98z9AAl3ldiYLkYnnQXPT9BFa/LlZhNyrtSaEj2bgFiYN1WTiLRO2VqvsnxoN2ffuYzndbyt3a//OJ3rXM0brz76IP3OSu5tckkqMGyqntwzOLkjfJw5TLgjgDS83/1619Tigrr3mGuLGjcsmA+PcWXyLEyTXYCONCzreP9o8dfe9NlX0eJgPV0S8r7DuyHuWPdDHwXz551MaUgRlePNd6xxr0lggSoZKwTaYgxPTKE8bNNN8PkV465lDh2vHmeOQ7UzkGWP/mFzwOFaAI2aDiqL8btoKhhjPPzxogRI7f/esc/8I0jWFMMQWBHecjkt2jqCCsG00WCCSu2ecMNXhghWQztfDCyP/7oY+DQKyRDKNeTuWjMJhZmBNNGtlv6dGdbu4HPIAgrDQavWcusWphfmesZzdnve7q6C+orHOTpLqx6KkxtQCLpqUz0w2K/TxMjEpAE2Zh77fqQCTbjoRHzSjZC5HDwyENHl+ojlMQmtqCBr/o3ro843VwtAFR9dfTe2tFhjmdzMIIrjlZg6Ub6IlftsS2UnZagkVJYUYEQBGSKvsRFbGMaR9io41kQ3YhrUioRT6GqIlVi4Z80xeuGEkuQzIjgHKbcvQuU9BYVFES9lIvkSwNb2VGeU14YR+1ziHCZKyqr2p5UR3qXmsENnApQXoqV6ksmiPeumtoOmDBUBXz0SUpPX2fGJysEqIoBs+IMMVlkxEdEQw3xqLThf/o//RLkqC/mTa4tO/rBhw5hZ8Lh+g8c84mgPlJD0fkzna2xeFXsTS7Bom8Vwi0iIqWQrkMQ1R9OTCR1X6kzLp977jlLCigikEXubQTRoUgm+hVRFfOJ35tGACAUIeBZ2wPUUdwkWJMAGYCnnnrqJ77wOSo+k3NvV6+m4CbakZtjnNHOXzrPL2j/oYMGKh7v7ls11G/v70cFLi46xzV7f9RxZSmo3Ep4R2ODDPdCmqhPIdOSsxr38LQq+1ZzgC4MkeLA/kMI/e4HR6mP0CYENHWNmT0cY8RIIzs8AdSvoaG8yOUT7vqJjNI3t7bVfT/QwGBwpCF/EpNRxBejvhD2ZAb4vd/9Q/Zmjo7KjZbSsHLt+g1r46jX2dNrfmzksTzpPmaMoOOa9qAPIg8NXQFWudDjtwcs6SdA7gMkuzCEgMo6CJkZQIPHcaJv2gJbmLgWXkW8l3nI72FEFT73VOogKN86WU0rAhdtakkXrDiWj9IOOxUBAVS1AoAm8EFzNVUpk0OkqO8+KYKZ3OSbns2vzJYFwHH/j//4j1EYzlq7WtTGKbsSfRWTyUA26cZspVA1MnhZCa0LU8dPHAP5ueeeZfAQiblwAG1wIAdxQgYoa0Q4Ahmc7erKWVp8rqCnjSGvLEc/eG/Xju293T3E21CBQ73uxtu23fZf0OyrAwcTVZzQLszNszBN3Ry9Mz+nCPBPnj5lCzLx0/ft3L0HkkiKUM6akMW0x1THtV9TkxP/7P/yfx6+PtTa1Oiq+Lu3Z1m23MJcJwBVyUFhFKMO6DQhrGpAfTwguO+S1Zfa2qXEYslWtbSqDhbixzOFurRhE7j6XEYmKhRUDf4GkuI3Em2GAqYscLzLV4suT71JNBInVQSxou58HCuf1gNk1gMBC9hV/NM0BCk1ipJ+ddbhXZayXfG2PS7LzZ1LTV0mAL/wi/+rJz/59P/wT3/1v/jlvzs3OfLf/Bd/f3Z8eNOSI66Xbb4vU5eoMvgiu9vBUQMoJTrLwrOEeqxiCqL9xyjO0On/0kXWumTm9TEi15rWKrB6B+GyjlFwD/Ii6uBUstOCOfKEjGZZuQis9LyS1VB/wsRLpZvn2sdMMIAFTQKRNc16gppe5FqwQFRLTx1XQ1GUTdI1B5hHcmJLzgDANkxTxfkop+tYlUl7pdjaFFE5CRDQvPxNYh4ThXFF4abzZooVOtHns7E3/TZWmRKzV2OBk4Hk9ZnWLbvjm5cXFywTWJFpzEYpho1lOy8sQiBTHFugEb8g/2cnLx3WlxofmhRzdf7SbwvdsqjF7F3qBTtdY3D0r8xXISCYBSAkGVgTg6o20ZuX6uCq1qqpu6t+xoUyKhRFubLA15odbdf5UumMOBpHmZBkklMwCS9q0Z7y1ngvVVQ80T9ULTIfHnwsBGAppX71U13oDp6ZdFecqk5fdRfj7mLOBFLrAi8+UpZfcAAEyYsAZC0OGqxUYtS31kuCWgvtbr1QuEhJD4aweFsk1SLIFGlMdRxxtiX27HVQCqx19AI4UF50dDpPL/rkusqnu0NkerwhA+X13qOjwxCrqhKkDF70ipbWLYZRo1txeDLHaH3yU091uWdle9+L3/rz3IK+cvuRBw43bWpot9K6cpfJigMmXZyp5bvf/a7jg6q50FBldy9knLdvWIGt/lxQBV20sZVjBjZfvHrtw+Mn33z7/es3hk1b9+w7YBzYtj17WA2OOnBeLyY9xM97FSHo+WQMohAjTq0ysFVIikBmrzyaZHHCwUjFo5ivctlXc8exgAaX/+Df+/eNcXpCoNiAelyUW5yLJKcjcVZFq4uXrygUDSHv2JBKQAxyeCuSGnO9ExZf4523KS46vKqM41qep1FejEHqxtWYzIz+ytVCjUSwNXYDbi1CLRHf9NJ1av4DFijJaAJ4dM9Bl2/uNjiqL3cZ0wAa4cjoMGzBxGXzqKEb1w0B3o2kLHpyUQ8Mf7IABQGkoNyrl4EYSrv27kErHjI3hq/b7WCegNpmUnXao75mtMQGAmSDDm0nJ4QNzdgHOOGhdMviBl9wYBIVIkdmZecrj4y25pZy4zCjZ8zKai2+SjuUqjxXOBBD51jpy2IvnKUEp5SbOZ8XVCItdXxXQQk4xcsIICqJ924ZDC+0CcjILiPrXj7x0duce9xmizOIvNXoII3sfAHkTZ9pglGupYcbTthFqVCE8hXlMy3MUk/8HWDo3SfEUXcA1dEanwCg0iXA6Nru0BAmcilCkEuMXI3f+e63SD8PNg5MN8cmXWVNO7x4cawrO0/SgCn9ixPxxwVRGZrynl2DUEEmp3Z6UZhamWZ5weBr14akUoC2LbvJLnJYEChNPXPQSj6HXaK7SkJRYrgCZc0OsfReiOsrnRsS3sHh34I0ak7zo8BxSrGwQCl0bYXx69lnntt/cJ+tmZbw7GSl5p89c+YWx975xelbU1ZF7jl8yP5NewMW58/BR124suidYA5nMup0cOpyEb5WMw00QjhFE3Fphked3O9I/qxD6X9lZ2BAfR0NfGRUBbjpaM6eOglzdVEjvZ6UxM67insvkpHuwLuAmlz2vSBdZXPYX07PhZJyRcoOPo2TJcMC1Be/+MXTZ845v9M9ha7jcY7k7/zu7w2P3TRm2ZRat/U5VvLMuYuGWGjs2bWbK5SJ2f33PQAyWz6EQb5w4crx4yfxAh9Vih3aOsOe3Tvtg164G28HHC/djSlgJImhEzXEWOv4xCceVxFcOHXq9Dtvv4cyP/jBD1544QV814AZsIkpAtb2puJVQCHDN8xNCqYBqgwNhEKxKNOtrfRgjVO8jNYEWcpJgm7iwrmzv/3bv/2Zz3yGg9Crr76K5t/4xjeIsiJ46cETJgoVdBl6ZVYTNSLoqlPWTrNrR+3sG0Nkk1n4Kxq/PvvZz4JG5rFJGlk0CaXXTsFPxEH5WgTEzHkc42AC6bJnxzOYd9r1y9jgH8tEzr0tfHRQAnG1yLe4YcVdAU5YUC/CL7vzo2DrIAFFqLiprNkFYTPdUx1k4e9kbfJ3/u2vnz99qn9rtzNGXQi2Qxdz5/aGLZz+s3tP08YFOhSc9TNwBtM7PH1TdA2QSU9QFhN9qkEyCjBzPAcNnygGEsvl/TZboQ0G/DSy4zA6K7OLAcVnubKlhXqs4KrnlVNB5INILdSz/iRjUgklpuQoakQtqEZCuOJcU3oX793L+nP90JSacRWgjfXZt8iDwXpFgsHOgEU3kRWSseDSWCiDzmotiBhWc+pdWclEdiKnsjLedhlqLKYG3fnqJJH4qmpk3xWa0FYT6LsIwHBDIw3eZaAthYd0BvJo0UXJlthXkZChZmOLl0IWeij0TJjoZ6suKxWCZxiRUj6aTYks5YQaBBLA9cTe60818lW8pyB9geAkAEdaRqnMUUlQ24RraEkJvEt7jhYt0P1WUbWSU4i/RvkCJ+UmmdoVHbK+r2Gl3NSXek67LLPGWJqTxXhVHE78ksguXe76aM56u2j33vIiWdkUDsS/Lq4vG8mi9muWCV/SGyBOMvCy5AigElI0Z7yiVirW8WqmWuVCsU1JsbyRwQ0mZlZx1s8sdpXy5B9BuMVgQpnOZbccYMyNmTdDtoSgXQpGZ+kFUH1psp/ZVRMNG9lFsNI/Cry61K+llPQ8XirlxYOj+EhOUbjFc9yXIJQooaaXskSuypL5dv368ciaUgx8PCvwZMx0oon+nlqV9i5zwXqZdysulOTSq1UwMUcjC6AhskzrcGqJqqlGgkZERphOqKpZcflYSNZwx6lBGaxBIHjE2pCht9/Y1trSmD0YiSxz/loL8LUsaeoIqCDE16PqtyfGp3SGOvz0in092ESjMkBw3DX2EQ59NddNwJUsRtiyqYUpcoPj88r0A1g6g67b6qhrkRXEN3fptmHZXv67J0+fe/ihR8G3Rv3kpz5pzKKG6mMff/IJA5ZlaMlr36gIQMBnv9aLnDx77qWXX/ng2HFbTPceOMiv1RXjujvo0ZJVkHiOj45x0IY/HNTXIEJs6uAlUgUFaKsFVNVaV4RiLL6AUDOokIpzxiYcDCRaw66dux97/FGjADyp+pqG1Q00NPYZzpwUo3s3XKObQQ3aEAa5eTluol4UNDE6qSBLC1CyzqC4aoCDgvcsNSwukBUDGQ3Krt+WzU3jY6Pgwx9WDpjWUeo0uPowhLR3dW5pbaZF2Cxk7Z95W3thcTNawUp3CQ3NBVvtTo/IF3uQohEBPT0hrBfFIFnQxIuAepABgX6F16qGGpQKFr2x8QmmZ/seTUJMTEBGUoTVoj2RhdrtYA+Do3dyxRdBQVWAvSiF/xOyMC7UUkKHbGlESaHbgTTGVilBQ/Y6PEFG9UEW6QWGUJUGSbkFVTiQ9MkYXYcJANVdxoqSlLLs2bNLpJS1l/YUj02IcOXK5VCsrBWw9wu+onNOW+rqQiiB8iIl9lGNHEavCDjgrLorSNCh4pQ5AO2oslsuyXwyPVYdxFQLIqc1IR2ydLd1iCdmnlVsvMNZSshIUOQkmrx3MY2dXS3tHZv7tnUwwVDoJ4dGnfy2a3cH5Xl5JcdHWlyiykJakPnN198iNw5jkl+RbZ1d2rVt6WiBmsdPnQCUxHATGp8a37lzN8w0RdWwSeDRRx+vhPDuLCdI/PjHb4ABUZJBSdVzqpibgSVDeqqhjAiqhagnAuKldyRTBEpRZKng3//+97/9wov2qLv1ePeePZ97/nluPw89/KgjaU0APjj2vgN1XfDGb5LbxsTd8d2Du43RSI80qKlSasTCjWTsHVouyDYio7Ia7du1Vw9CFJTOl9iVWZZfYt6+NTM+McYF9aknn/juy9//8pe/TKal2bylhQ/czPCIs7owBnB0w2AtkECorEZrGKM3WF3W4RI+lPQJNfCpSiQ2233rU8P88vUbQ/pnDjxUWBvGR0YnNYYjRx50CMBb77xy+sxZ5zTmOE+3GjW6HzbmNsP+rdn5nO90c8JpS6++9rpq8oFhDqFGQ37HwM77jzyogjDkAYW2kH/jrbdfeumlLY0bkZE+jc7aD27ijuozydhnaf6gj5MRv/bt22+B4dnPfNZXaSjrCIWS+ln+93bWKpQHG9NIXRzQnH2lmOkKTG/sCVY6xE+dGlJxPj9ohbMEXcWdElF60Y3PP/dZ0ARbppEH037rt34HDWnnBEZiA4YO8P33j+7YMQgOCnsSjLfffhv+CEvzBlD1lX7PPY+pLOnSelU22XftI2OqSVAp8yivSROMkZFhRDCXVjU/0Vy9nnziCSrFtRvDBxwkyg6z0tDb12++Dq/iBbRol5cqUKFvZW3XBRGLbgq8NTO1e/dOJq79+w+6P/v02XMWryanZ1Sf+jV2cwKhcP/G6NgDR+774I3X3vrxq7ncful208aG+ZmlyY1j9H1k1x2gjuYAbXQyO1c7woP+aiR4qUG8n9gEmRrK9zyA9ZUCQSvi/h2jalGIwaz2KknoUSKxA52zFTiXPtE0onIrzlAIc6Bq6VQgnyLD0eQ4iURfEZQrUsoaJBZZs4ivoXxKshp8XU+sMZbIgPKynjc/i599zNk0kbUgjd4jpWTSEgohPkWYDnZnwdUKi01Ni9EZyi0zqGT0DznuxAcU+YCRFzw4UpqKMhPoUuKvhE05LVN1rA5Q2TI9DmaqabNBWQkJ8kXfkyWgiirJkSnEKfUSU5BdVemkqUEk5GsuMaXWqUhFCXW95NZWxxp9bCbAraYm9lVeAkytNdKjVFxnsm815cksGV8Am5TrjDCEUghhor9Dbg15QKKMlyBTxaosCmVNATvByUk2Uf9IWqyOZKHMEPIJKeTiWUZeqNK3i1ZoMpgjgvKFso/KOOQ/wtu8qXELysdSz7oPcDGEU2thh0AhYQi4KktwRsTUtPwnjWkqmvFKk7fwASd0fVFJTFFJZwRBLXWdZoWFnxgHz5XZeenJhwTII4YeZQLJWIAAzC/1q87HJ/PIhk0tjO7cHzgHOBK0sr3sHPEdqqgOCkJk+s0ryZzU/8QDfA5BJEfl06ZMXQr7Ci2z8lBJjZJJKNFaKK8ReGlqrD8Q9UQdPUBqXh387KvJOl/k03iSVZPSmFK11bawITtgUDONlfE4yxFpmLb12xttNqYbcdSO38Q5UrFxtuzagqp+poKrNnulgJDmAY5JWdE+dUW5k75AB1akAHPZJZNFz6nj0iHrrokomHpivbHuTjI9LVsM7VyfbJA0phSljf07F6aCYA+AINns3bmmVgkyWCsodc4VvO1LubuMOd/RbG7Fuiu5Mc4YatChlhmSBOvJX/jCF5Sim3VyRdWZMgrfuePr3ML88OhNJx9+93svzd9eeujRx7cP7G7v7AJkZvoWIHDjhWFY6e/d2rZ7lwVy0mDIgCEEIKzK6O+uMDWqRHD0J0s/CPMLDiO6Yk5rj6+f5EDFDTSy8A4F0wjl3lTZVQdlKAm4bL5huAm0Rg7oU8qSXsXlNQRLzJNkTZacsrjNeBAyYaNrMpwai1pLdyZujoOJXRb0GTGPHzt6fehqf19vT0e7BUAcoZNsadp8/333Oo31+sjwwq3Zhsm44TVt3tTidrSu9v4+l9vQm7kBt7Zsyb1DzLgyDmzfbi7R09tFCXStjaGtu7MHs7DJjnZ6gglAUM2EJC49PsllYGXyVxdEE2gXyDh8Y8SmD5u8TV9dHnh1KE41REUyFTfgGsfRwW4aa5b6IG1ApUBGdk8MNY6bACjCHjaU8SIe+xBZ4BzenhugO2BCKkmgr9qKDcwSK4jGQh7SvIuLPFll/xQkU19Fw4fFkDGRtVF29dKfWAnzyXmKXGroCo5ln72V2QUFAxzaCDgswPjLsI5TltzEEHVK46bGFm1Db11U9PQsRiVMVwrkjbyR9mKLVJyWpaZlbpX2IoFIX71IJi/CKhc9CV7NODs5jUSSCZLpQrRBnzBCSiFyWNQDyeDWaHv7vn07Zuem52bnGze1PvnJRxyMZn/mO2+/n5JW+KI5tD4mf7BoyO55vX5tWPtRVSC0EE0e17UHVHZ1n8LMQJQHP/zDvAMHDpFghYGAguyganXs6HGoKIgoaIevl8C75md+5meOHjsGGh2RwRhMKr4jcQJq82aqpPuhlKvC4Kv5T/7kT33mM8/6aVLxgx/8gOvImTP/gqZucnnf/ffStB566BG04JGh2rL3b91GMM+fPyslmhJlTmyqYw4NLAwJH0aQLfIBDUIvo2TYaYe/lJWCalTaXrOfpNB7xUcvhjKkh86q74AhCQOWhq3uCKVvKpOpLqWHSVllifOWr2BK7+ndigrIGAwsRpBILHB5Qnsb+CuWPjDssSeeOH3uLPT4VnV294KTPmdhxmkPAOZiTlwrJ3lb/EHAG9fHnGSqYTjP/dFHHne8aZmm91KCt2/LNmvejbdnp+k4iABhTorqayzETbUAjdapLhAjSZo0rKryBGdzM5M3VNJOfUU6iE1MxHxiMqDK+/btMfdQHSk1FdlVXwVdEUBGvRAB2rbpIjZpmWLAxyaTPWDJFTpjq37kxRdfJDOcoOAPz2psgGjt3OXFgh/96EcPP/wgSlo50fasSzicyhKQxCig6PrzV37lV4A1L/r85z+PaAQJtUmCGpFAewBIAjQQRzLzD146Dz3yGEWF1aVva19La/uPfvSa1ov44WbDSk935+jw9al0DXODzqidmEQ93YeRqbs7owWywOrk6TNkBh0UKoFCkQVh//iP/pD3bn9f9/WrQ55OhpqcuGuL8q1Z1zDp5qwXOWSEl1YGwkjOlmaqoaDKQpVhPEJ/CRQnSKb11fRRD3UQNXnRs9JJ5GsspsYqvKNLMKvrzQXKVPSOKAirOn3Uiag1UU48E6IGlj9RDuI/Whv7RwnWEotRiq/rAVYi/fSMHrgWCjHpdtFoKv55Nixl3lOCjJm7fCzQ6wqO1gQQiToe4wWPdP2v47iMDmDK6i9ci65mqEodjSpqLVD2OVeroATBpnqPRBGKS5Ja67gB8dWzIEYMckePxDXL+rPo3unxoF9q50GFWopKmuiEMKwMWt7VAxDolcShQn0h1ShWU9YslYDeJVhPrxbeVzZsLg42+jG1oJ3TBIMaWOVIzsxbpJNRyO6FHHaJ6PS6jC7SAlsDUfIJa1OE/0tQldiULcNEcnLmGRD0agXYv21miPUM5vN3rCHGxBFKlst6mC5j68cIXmcGAjCLimzWQnLig6VUHNuQtdmi0yohlntEW8M3RIZ28CyhIjxzd57mI1ehQKTUSKOa2U5TiF8IWxFOxvk5K7HQSkxJkLyCJkkA9E6R5kg88CmJlrNxEc3iE1cEIyj5qrjyPfQVCkVFp3HJCo11huLdelkifaq1WM22trWm1KlK3WodJRCZZCUAYrIQJ6iPfiJbJhj+UeMLi6L6w7OWKDOFPxWK7HnP0W1VVEIov7Ods1Q185D4XOkBa6uSgO0f8ibACZGO1BryNa+fLKpIV6QoBBCDgEJtaLWlyKpz0x3pRfX5+jrxem/9eVaMStD1wSvjS2OuTIECdoA2w1XGXL0tudq6ehnIAa/QDGfWSKXRZ+reb02OOsTb1rcdgw2u9BGv96YGKtSQCjdplI5PhjZDEgRAdt6LS3CvDF2bmp554OFH7nvg4e0Duz48fvrDEyeYtxxlrhMGZ9fOwUW6vOt4NzcpHShagaEK2sa1WgXSqiDjlNoZLAQvKMP04ATuOoiwzFE01BE7bi/MUwZAQEDEMSRBUqVYggGUXnZlCX5K4zQ/8PlmGystKYhUR9xx8BghgVtxj7DP0PFOcZSAtjF8bn6WvKCnma126wbhaxfmXEUPE8d/z0xPsTwNGBFd0fXAkeMnc90vp38aWjSl/n7bxs+dP2Fhmy14z97BBx/KPkybJgm4ilNhy2x+dcSEDwu3SrnaEnrBs/iZQA+taHGIQ6PTBKhGRmrDX9/2bcSw7t81RBYzv0xhKMqYgEVIbC7axKqQ9qH0p59+hkXcV+QCVoygLPUV4z0c74zyLaOBDilQVV7oISOAWE9rpS4qCAQxPgkIrgcwrfCO1HDwU3YsSEsp94ESTj+lFAgSsJPTkz5xXvJUupRcjXBz+/YBqiBHd+ntGISbxJyjbGxxBLzeCeTaInQV3tm7PbP0XvxTtAUyT2K5pnMeUwXA/dQuvCAv+sPBT7D8rHIC4aGLlyu2qq/QGrR6lZJRpBfJ1F1GBTY+/ol7jh078867Nw4fbrvvXve2jk1NupOZhfjQjeujDK5uN2ppbZydmyQcc7OLgwN72zszw6Z42SZqiwrbKs3v8P33ATc83CKZo1HMGXq29jLFsR6itcTiHXHFagsPEm9PsBmeFQDKPRutCiDBjsGB3/iN37BOow4CAoFDHOleaEpovv3tb8tFXeMlgos23LujG8nA1JL/2t/4D//Gf/Qf4hy+/st/+S//+H/+0+++9H1VpVO6RQuSTPEogl5uZzDhZnVQhO1H+O0UW0C2bu2lVjJYkDDEJUbXLl9RunkqNfS1114buXFDubDlCs9vj9s3tB974hPsu+DwXZvMPVkbbSdyNND2HVlhAAfd7z18Py4ikQtidSa29FBwnSHF1wVWEMAkgeZuhj9xcxR3g2dxQCQ8lFpeJW4yb2vt5vSst3797bc0pw8+PKb6qMTFllufgQ1Yvs4wdJCSaTSzNtEklIYK3Lx8+aoFNfPz9949ZuaDJk52cu7ndr7nJdxtb3FZBeHAI/qwlwKKTf2mHoEI6mvYGMiQdxM5c1zND2skE4OeXI+gRECR2uSbhV4kOpAW7efa1av6X/ub8UUCELjimBhA8nOf+xwhsexDd0cQuZDLMWTKxVDAHdYEsiy/9Eu/BDEQOImx9P/BH/wBTinRgdBchiRO59LXZxpGUM0wPc+dP6N/uXr1inYLlBkdlEjjr/3arykRNLN8y3Nq4afu+9Chg2qqteCd2nmSQPEo71SKc+fONzZt6eruO3/+oiy6eOtgAC7MpXew2caK+dKdef2P0V7VCO3TTz/NXKyC+lY4EG8dBDEgHpR4ZbW1tn33hRevXrrU2b7FqNvaYnvkBucOOVaRD0R17TWm0NIZIzduylIDAjLYMIwQXe9gQtiLp4BWAk55F7kainFwc1lkjPlXKMq7ZLpvF48W42lUehvvqHPOICouFszqVIsoRuCwthLyUkQpKDpPKY6G7hKuoh9jXVKuBdiKX01WXlbxiXZaofqT7mk1FJNqdGvosTqbOfASMTfiVqKsHPK52qOZutSKp7YJUKSbSmSyGv2V591yOR3NN9WMvZOLQpawTQCKQmZszAjDJb7B6mmG1gIcWIoqusrou4z5wZ8mbtYJUsoY1Er1QxOUiGZOiQp9qirmJSstIYb/s05SQ2hfggRJUxhXn3764lkULwibqfwFszEjSykFXRMKme3aNFSDSeOMATyksCYgRLmGrbWTzDpqWebykAlWSinIJb6gEakoCp+KltfyNHdZbmgOi/A73wHGGNDlLjWJOGVuqRi0sGBV6KAhu5XEJXeLcx6wyMQ0INxZEOFjmg+3VA/9gazoBekSgMtX2wMKbgqt8ZVymeWkUqbHbuPKfI48wIf1VIJUJBp5yFNzuRYNamAWtVy9wwxpwuo01fBaoEV5xj2qMRpzGmnxTizdMtakpgBK41mBy07yVD1eVWX9h1sCbTpedRiddpZzkDJPKtRefZQ5A6aYsAEWGFlGcLzvKptqjMgUtXGDG3mRPnIVZ7yULjX+q7VcaaJhHUB+RQhN0cwgK5LUxyorfpLSpCjVLysdOjadnVNA2jAdB+M9VXZXqwQdsg5PaUuZViWvVqCuEYqs+iQgjn5MX6qVYbosSKfuOsban6Oh4UkCXTQI1Y9AJF3H6CDSVz8ZbkGQ0VNeyhBTS3Mbk2IKUnodaDxdcBbaFpQUJ6X0Bogf/vCHENDd65wNjgaUYyeOw804BBMvUKVXPPLY42OTBuRZO4cd32xV9sq1t7mju39Lz4wF7LhGf1luzs1PTY7z5aCukDKDo0KrjlsRYBEXU8dBw4Q6wpOZZvfuPUYH7zx/mN7JmmQoZoQyeDlN1NhnMgBPKjLVorOzy6CMC4YM0DDK2E0vUBdjHA5GAu31L/tEVaTBtROFifW4M1KE42j78ssvE+mu7ji3oIyFMRlnJqf6nEK+dGd8dJyPMoBWd0duXL8xMsxXYn5u1lqH2c7he++BHuK73OnBB49olWrE2QSLyI/iLERcunh+bHS8NKUl+zDhzCvBVO3O7F1nY0hGIzdiAmI8dRrHwYPZIii+DK+TkDE/GXe2yOS8/c1YjwJK0VTR09Dj6jf6F5MZJLHSO+Zm72IrbYqeFlDqJbGD8cPZIm9V5Jw5gAIiWVDH5k0n4k9F+xIjKAj7iBz2VVnFEZWSBUwSGAaVSZcYLzLSWGiVddYqe02MO14cYo6DrS2Z+AXzzCIiolDGI9VXNcWBTOFk4FZo7aa81FKMlhIAKz0HY9LLFUpFoAG9KmmIIBB48kDtEQmsutQq+KncQiUdVWYIguwSiJdF6ZAXKQ04nt4VJ00mo/v2DSwuum1vdmvvDfsB6FzcWzSlWzM606VMpVjNVigom7s6249+8A6XkI72VtcbaRhqqRugBAOHtZquvYwaidMVKWQk4IH7j1CpWX8ho3OQRd1gYPUH4WwOJuiIS1gp90QHZlYtgTUNGBsd1SrOnD4tw1Of+tRnn38eQihEEAC5cf06xVwRWggPQnRBFHxVK9PQf/yP/3El/e/+7u+cPXuO2Vjfoafau2fPoQMHNX4eHOydUzPjDvREIwMqCevZutVum4uXLlDu/XRskSMAxkZGPzh6bGZ27uiHx81kdBiXrwyZtr7+xlvm4hBwfNiefbt/+ktfgac5AExEUjrxT+2wAefwFT5q6qt3eOoc9bP82tVFSrzUZqxv0Mi5vep1dYVwdn6ZlB3dXdDHRdOii5fOfuUrX25ut0YxhVz6kbMXL7kMHEw012kzywHI9uzp4pKpKXNZi496Pw5kq+OiAZHcuKbkytVLzc3vUkYHBwf6ereaCThKCIM2OHWhZ+u2cv4jyMSdNZr+yoqxY6AXkTXXm+PTp0+d9w5PvT0ZEDhXqIuhlGupBmC2EBf25k0d7sxwbVBTpn+PPvKQfewzKjA9/e0/+3MbbwgG6z6iIUKRhyywIBQvRNzxri70ZniaBuACCqObGcXnP//5zMS2ZAuHNDYqfe+l75w4cap7a/e502d8YjeCoLkopR8+nkbbcop/cS3d6EjsBUiWfzED4LsphxqRZ4tX7mr48O13GVaJGTp86lNPm1c4LI4blcOHdA1f/PKX9c4g2xszseCC6tGR4euHDx0cvrPgmFqXUL/83e84HdlChJ0DhjDHNHEZkt2QK6Ce/aqOY8Ovb/3pN1n9F12qMj66Z+euoWtXnDI5OJgr8Ogz+gvqjtE8J1UWfwYdzdyKgxQjKujvSVTAFI9QUEIQwUvRUnyh4UXpyT6+qFSNUZ/snmzYcCtnVqxY/4+6RJEhbSvWZpc3FxdyGeGZNUmagxSrSk8KEmJ0FSJ3y5oVqY7lhdZND+NooGulJuRwSnyIeqLHoJoGl6g7qyFwCub1d+Ctui+n4kpPiN/tgpMrdUfxHtlsrVtJLseLZmDcwD5ho/tcmbi4L+Zwd6uFLJdBldUltyshE4Tqdk8HndLVopNW3XGjE9CoVUUV49aBQ6s6ImQgFqqVmUxw0Sk2LDl2UDxkS1WwNDVSFnhIQCkyZRGDRGU7b5R44OnMRZ3jgxVfmqKo57j2mNDLt0olT6eQWdioCzJG9sDP2Y6x5ScXVVURSoruGTjNbfZZQRupFEvLc8xmEFBwfhdtmaopNXs9IAQGtkE/OONg2BAVMsQmG7FeBxn/yn8VuyIDEsKA6u+EeBcUYomFlkwTs9XZx3LySQefYp2J9ZPZuQaXysGkaZOzs0xjSQjMFeX8FlSDoLldfHsiMbTXOClVPDxNEoJaFZISn28s1lmxsXKVXxbhrGM18ax0/23ZKkfyC4Q8FA2CZhI6pHaJpDuREGg4pZO9Q5fiawbxeNRngrcyv8BFyDZVtnFio2cjYEqMn1NYDSZoYQcmkxW5YEWFVoVC20xdFEQC5Sp5k8snQRpBU47vVsrDF7zLehPMQc6EsSy+oWqy2UfrOPbIAZoLil893JYICCqlFGirKTHXH5jJwE0ptUTxJEwSI0wFmOSZa5QpjW2KLXHfV000kUW37HZzWkU45TRM24yzWSI9V5pV9AdCkkLhKllHVydZhTK5tWnYnsqRsVGNlDoEDT1/Wk32QcVeYwJgQNGH1zHRGGigpP0of2jouh5+//4DeiI62alTZzQhxztu2zHQ0drBAd2KvXJgpfkRYvsJ2E1279zV3dNvcfXmxKQO8PU336Q/QBu2DmugFTAGeVE68RBPAfi//dq/sm9Q4pa2dtB0L+rSnmPiWMr389wxSJ0YHeHSqU+DCQlRxx1NO4ylTr9RddfBO/2ZVVt3iZEu29rW12+HHjrorrP82OAs3+Xbi7dNlw2OSmdpooQQFgd70o6MdzR1s2QWPVd8soUblLUswx9kEAe2/U392OF9YnqC6Z3s4LifdS9U6pKp17xZttZD5CxEKwupL1+8MDUdFYJFbGtPZ18Xn/hepk8es4BfvHSFExTW2GGhamH94h0niZerxF3oMX3u4hmiAUObkXHq5ijXgHGNpa+3NVzb2i8v5dWgzI5oEr+5ZQtdhbJLNj/48DjNG2Kkzh4gvsrvvffej374KjpsaWs1GzHv0vW6e4vkQA/BTSRIHJ2bDkmqZEQul6NhkCqonc6EcJYxzHECWozLG9NzQAMRYEJRwSaS5sV5siZXmmdpGmVzf7mJDD0BUV8yRuS81AYCiD3fRltiCYIKeo7dvHnq9Fl1Ry5odOY655xFrjj6gDlGd1ePT4QHvyDMqyUYupS33DYAcn9/H7SJtz2uVJ4dOwdlrENzxiJXuDretExm5KobAAAHkPZOG/FXAiwgFzoQSEosKAW/SkuModa7gLaGEZEgqLUgvZ9KlL4GSAqKBmTDH//Wf+oAcsJaJqDjzopFcR2yvtHRttv6tqGGzfoizWk2bdxya3blzTfe+6mf+ilkunT5Muu+eP0C7RZ1ONljORMp6quM++DcSF2Pgunu7vnqV79GrOFqrPGEIhpBEVrmdoooWN5hHh6+foM90vPy1Ssanh2WLqvYvXfPFz73eXfFaXi+ani6A8evIwNoRMdTbSmmyE1cQFZP7i5O+hseuc5UzB3w+tXreiW4SUMn1g3t3kPt3KX3L2pfPI9dioE67FaOAEP3Pbv3VZceVf7CF75AUkmYAL4SVYH3+6kzJ0eHx2q3QuOkyzLtEy8sqWnQ2jvtky0fiawhigeQDQAOioM2GipdFaBnjov3Jio+SUCU9Y2aIgkg7dQsJvfpmfnf/K3fvnDxyvzincbN6VnsQKXqdFsCa2nu32pdNXdJaBW2Xtmx4JIHvonQgDniw5YcK46oCWIMnJua22i3MLegYWmCiX8/75k9Os+dOYmvIZ3O9FT24OvWdWEOu9EMUcGyiZ8Rng3IMn/t+tX21py4v2v3YEdbO/sEc5AFAeutVSJjKWQRobI4ka45HmV1jq7uDnaqFCZFZiNmg7W9VWmxDGJVwSiMKWIgaohSI9XZ2tsro3HWeeK0x/nZOXy3Q3d6ZtLmIT3kF7/4RZ45lBTYOl2h7PTIvXL0eG48hAoONukivtUfNcWRs+fPOUb24Ucf0WW7npB7lUo564CJCHr33neYv4kNJI4xochzlnzrjVfvO3RQS/jD3//9pz75pHWKd957z34ylzYcP3W2vbvXtm9LQDhrzDCRpvqjTNPGlf/7P//nN65e3Lx824mfhSEeMYOpmoCV+Z1tTP5qRtE80vg3xiYnUB71+6Sl+DGljyBLWFpyLXGyJG8yt7UkDc0wRzQuM5RucZQo/dlAnArQRECiD26mo3BP29DayJkm0rJaircSUmIWHhIqQ70oUXHl2MCo+jgM2WgHuBMtkE5IDU6HVCGKlyXK61oA22stojSFdF7KKsAo1EZUh81vamzvW2pscxXAV77xc1/5+s/+4//m//Bf/sO/P3zl3H/1j/7ewowtE44FzGhhN5tmDpoxANigmtFx1Q0mVSinm9fioqfF/pzZrFZmthNNqmh4MKJLyViDyIKPBPEpqu9ylamUmklOO088rdVP6TNf4xa/7BjczSZc6k99jN6Lf7xqNm6gakRvDj+jD/uqK4eClJ7e8Xw9vVwVGotG/VrheGpoBecQVB9YA7Rxf5WDOSggUzFP9aijhQQqQkusqn8leBTTMrBhIZhCNEtIhMvFPyfzuxYTHAcQmFyZCDo5VluOi0LDCusMo48jiVHm9uJSY/OWy5euNjp0vy0r+Lc5RVt/n73V1LDUbN+S5R2++oFvdhfkPx5K4XmEZR8XRS5DhO5jTES3spm1VmdVMuWCQw2lEqvCXAjiPZCNBT4ptNBhNSO7KYcHooAOaVhGwJx2GleBLOKHwUiU2RD6UaJ8vWtfg1YnLi1UCzEapz7p6xIyGShKcF4Eo0xN4L0Y9bV5Yg5hUIKMiRCAWgqaCw5R1PbTfujfEbQ0OoGc53OpjFzJUoL+39daKZECZkqmcXn3qWTJd8jTpGdjVI/qrycXVLrm9dTnq3ipY7RSGXW5IsltR2tbtxMMrDZvaUZ/Mfrd4bFRva6Yrd09vBaLG/wcrR0o8HVQJlZwBEE3C3/Q8EgHDl99rE7edoGjx97VOVOA7OIifr/8D//R4A77x3b80R/94WOPPDR3a6azo9W+ppmJCZYG5jPqyrvvvOeMELVjEjKm92/ParAymSZ07LUIutq777/3T/7prw7u3Ov4bCi5B9fauOHesc4UEjWF2LWrQz6hAy2Crzw7mrEYH3jh3Jy8yWyLjoxqKmPOZJTiS0BvMLGTpk7vnEmqalxIsBe11RFHrA+Dz/qt+lBSHd62ZoB+LuQenVmksyECAsYIVsVQy4nSZqEbN4hkep+cniAPOlOYUZMUATgzqH3VLEe0TO297gy2m85dRlXGerraBwf6xSACQrGjGcUYxHHZ/QD2utB49epwg6QTL1juGYUs0eEX5EzqWJn8caalcZ5uQPIhhkRf/NKXHnvisYGdu5ZdvdG8haJLyZEFC9z4RFounr+kUOP1q6/+GBDuRrQ4Thi7d+0p0mhmzsVBJVa3l1BHHeeoChQPtaN/y95B1WZxiD2i9kKRFso63UkRILBTGZQp/YWDt2mkKu7iPG2p2vWQmt2ZzkAnpPVp2lCiXTDhvfnm2zQBh4jwm1CcQkmggGXEAXysRxZZbMUEPw1nwzLPO+KhaDFYQ1BLg4oTkbpoLHoNz7Q76Tda0u+cJhM5ojDjgiyEX15TIE+UJ/xKVLpcslCea0rvvsooi5QKlUBl8dALMQeN9LKUSE+Q4CkmVC1w8AgBa7v29O6rl8Y//INvspIe3L8Psbi47Nw5oNE6PsjEd1t/jzvUNeuO9i22hKO1Cd/gQO/s9Kxul8+Igx2dG2MByaVBJq9qQoNPHRo2tbXmmCDTuL6tnVRPd3NAxTH2/D26u/owzE+qsDSUYPtBEYTt2cx4YPugjZJqksoUdyikp5ZJLFfUu7s5sm16ZJqBdmTsZndPb3dvJlgIUXmpYsBiAL4qBUsiPXdXHn/siU8/9QzC6FDefuvdo8fevz48gtfuZz567EM0Jxa6J/JBkVIRJGvcPKx5zM1rhmeo7M8//zz3MrGeNn2iMuDo+8SWLV9Y+AkVx8Vb07MmMCr+u7/7u76CxgGJtsf2AIJKobl3woTgEP7BD79v9GQysXxmniP4VCXy+vCNU2dOg29RhbC2tuPriiZhqkSVm5q7NTo2XCemCMJDVWVdocjaYKlufOT62LWr2ifKs1joZXbtfhBlEBAOOEXiOdFUxxWV5Q6U6txZ6ejuZffkAOwQFbfiTF4eOnn6PM3TIaqakBXLeNQM7ujp7Vdf2u3M9HhPV4eKW48yU6V96k2YFy9f3mbL0eXLF3/4g1fYG9Tr1vQUoWTUYeQBKjg3ZA1udnHWxQpMRL7io67ZyilU0d+4x+KElWQA9cg94tSm4uRgEJDXVwqKNqlq6OlUqKkpS8wTmQa4gbKj6572Lr0Ao9HAwPYqJ1a7tE3stnLFJ8/+LeYQn4auX/NECwXpwdH2zLnzhJDurpThUd3rtrlpLn0TxEkavYlx2dqxg4bdaUohv3rp4u6dg/plE+PD9xwitKr+0AP3R90/d1b3/fa77x44ePjIgw+xhZggIcvc3Oz2nQPf/c4LN4eHmhsbFmbmMpdYCxqzUNsqgqgRKgkacJQPE4SNpnMZOaJMaq7R2JIMKUr6jN9s8aTOIQ3NK3ecKIrPiBsTgEt/NjbNLxjquG3r+aOZRzmn5OUElLgGUHeKyld0kYIJZAQIQAyYovanKzQhSJdI48l/CWApF0o+eNI1GA/hU4MEUZFUrmhg0pRMVSOJrd3HqsbU7GBIqkct2mhmBUWF1ammKAXJIlNcZRj6WSHjdcPXlkJMH6q6XWrnu162wI+PSlWwwKK/x6CUaRXnQ+N4iLlG7bzXn5CXyRMRAMmIKGwqBpuoxXGZRhzaoDRFc1ZHeGX838x/KVbe2K5iUFf3WLxTcefOAJNjqMu5oqlKlHIuJNmq7T8Vhh08GJecg1MRoP9hVP6jlDj/x5Yix2qW0TFEyaJNQkVVjJeVjdnzYBxNfXWwIXKC98jQWohFN4gpoCw0rHKHnh7dljtU4Wi2AajvonlZNulht2OIY3mBKvw5PypUqERLfUuokfW9cDMVSHklZ9D3v88pNH/W0yNACUVymPyjfCet6ZasPvlgOQsgtQ79i3eo7PlUmF4hpCBIZoa3CrGOiBKKTMcTI7dyUwsqc7ynpL/rDoq4vuiXohlzPMoeZpUF3v+aS5DxA4nIXliWZgFHX2tBnqlNRVZxDu5XXKlEMdppUNrexhW+4miSCW9BM6xP5chJiFmlvcpAmFmCKgiAw81YEAyLlNa6B8USau/CYyJ4rOoKMY6CA1BrV4cVD9n1hKDp5QpBoj3UsQkMkQZK8WBuH8wh8RL7qf54v3B3cc7gVBQXhl6gDEO+uiKqubVlYe6WPlx6XbqRFXmNBcLoqG218eoE05nSPCv0sRcuntOJ0Ae0GgxFXWJHV87xgywZoSLA8RixoEdBNoO6MTwyuGv3/oOHYGukUEGzNzijHAVq6PoN2JKWP/h3f/TeBx88+9znDx66hy3HaGgsUIQsoyM3dJ7Gbrlo6sY7WqB3ypYx6PzFiwgrYAGfW4M4gH7KK4sQPNUqFydHY7M+b7RFXmO6iqsdZ+NLl2OSl9FJOWVystGYUo4j0woaGJl3xSn0Dqx4RzsThRcTIKChKtx4C2AHqlpwW7g1Uz2ZrTP0dtPiuoFlANyxbTvbIvSYHRj/nGmBUD5x5T179tSJEyddkmDEQPmcvdPRtWNgEKpHjx47euy46jhXxPk8alG2gOG+OecGKXcO7DCd0uyZOK3t4W9Xj3vTWl2WYCbAoi/v+MQEPvZv6+tq74TnTWvo4+OsdT7pis0iuIVrsYhnQ6Qi1AtuUjIQkVE0tA7hOPJNvSGXOR7NoXIEC+40NNaNapKRQwWhjNV7Wxd04ZkoL8fZoTMG5ZxJ2L/DDLB/YCBGdzTHR7M4GWVnFmTjplsCzrhu+kda7Abp6t2672DczlEPfbhdyUW9hDzjHTXD8Ksu/PEp11b7ZQ9ryn5cgi0LzUQk5L14Tk3lpikNobu3h6WkTgDECzISGOUSP+jJTk4MYWxQVH9IEmNpyE8NMPcTrTxR1U8Si4amW2Jg1VSOBQcZTM1fjOAdnPoTSgoSI8jYeOL45d6e/q09M0fuf7hpc+sjjzz0nRde4IznIGSH9JfFweybcarM9ORMVye/6vPzC1MLd7MT2U47Vp+ubjdoNO3es+Nb33rf8K+eOiiipnFsaW0wJ3ZVMNuPxjM4uJv2+cbr70Dl4Ycf5Yiv8fLbvnr1MvaoD9rN31pUJTWHH9TVSkFaIL9/L7jFmQe3OFLTiccno1OeO3Oqzr3wm0aoRUl5c3QYmVBTzM6B7QRFLdzRS7/k1ubMGVMp/jkmmvR1N0HxDpd+5taMKZCGiv24bl5lAopMssPnueeegw+BC/yyqcgn71J6gTOuq8JTTz1lniO9Gpls4M2rr77qLEsIwMfuBShVgcA/iWVUNAiygO8nZqsyr3Tv1FCrhHXyAOfHHn14F9PIViaNDEVREUpAQGCZ5nSH+tGJm5uanb7BYMDBcSaTJakQVjK1q8ARE26CjsbX9JitnTfP01ObdKachWBrYkD1d1y+4jQwYipgMSIz7W/bunXfgYPOjroylPVBu/HMo+Ds3Bvmjfff/2DcSZYjN3TZzz//PI6PjZf2NmHSNW5AM8/Vxthz6OIamM3lo7OjKAC4oskGtmrIRmCHX91zz8ENG+7VU0Dg6AcfFDHbyGokMb5b3URMONij4RPjBIQR2d4M03kdil6VvR8ly/WT2e+hGXDLMRCyjpMKnUsVGFKHp+aaxIwYW7Sxz0HiGk+/sJCCs2KYsxNplC4tefzmGIm675790CYwhw4eVJwjaOnQPVv7boyOnzxx+vro6OOf+NT05MTo8I3OQ/sdJ8Cl98NjH7z47T+fGBvpas+enpgPoxGstuHC3vwkIYJS4UnsESpGQQNbVEr6RdDIcBh7ZSDkD80lsFIjf5kpKfeL0estF9A89Jc5nsxYbFXXqgmdgR4tDWWDWqnfz0numVpkFkCpAaeG9C5FFfYCsiZQg68pUYjmmJAWUugjAYSgvvY9ENiQ/fTJsyRcfVRo0q/Hl+Li/GD4qZHrJQZOaT7JHNUroKLceS1jQuIVsaTohrhWwCoe0rxRChfLFCd6LcLcuQ1aWLumZhEnaCB4kA/l6VirvJCmYpgD7ilbMcw2hmo51BJ26RmCRUEK6lFFouuGRAWjWgNpUH51JadGrScIJwpJC6gAXH+RRlCLigZMfKr41E8yQrjGg78eWV9qrpJDxqLPLWf9Mwc5lVBKitJZ+V5yxdOA0xK5KrLHOEiUECeCCGDylX5JLiUK1hvEmcP4CoL3+vRzNaZQpAqQr6V2pWQ/PhYk9qvm/Vh0BL5kWs2igEpZFZfYWmopJ0XXUBNHGw8XiFJhUlyMYhKrYS1tPrc6597MpuBHBLJAFl2ozMxMJzNJCEPRHrEzhSrUA6GyKlpxkQTiCTNUSnlQjJSmNCsGcoQwFo38KcTOrItvPXhcjZQa6qKrlpI0OF5p61311VQodJAmDYHECtL4qVeUrFC1YhR2CLKIrBlBJ/BGB30c4326iWh+vFYSJAZNDLuGxkTtgpahAtiFxfgXVQ1GmjoN0DfqzJVL1ajKkIIiNvGDamSQcuyjvJYJ+LFDUnZDKqVHQbt25ZAMgwLth6JrxfjRhx5gyuMjagjjnXvuzBlDf+heYMquiNvzGx2LIL8RDRDDjeGjJMi9Q9ijdG7rJAgoNi9atWGii2Wsq8Nx3jx4oaoicNZvGw1DvqYmu/5goggxQmiyssJDFUyREihFqBTwFFPTqN06hZVlwBXgoCxDkmPpKRUwUWjNblinOQDOmmAt/eS1U1euDWVp0JU+A7uw48qVIbXAYpN8KS24KUjettYt7Nt79+yCUsbNHh7zrboxYzc7KfvgsQ/ecx6lSjHQQM9oztarnzq4/wCFinszG5Z1GJ0w5Z6LKzPugTfefOmll4xxXBh4Ix84dMCKwfb+HU6o5o86P3fr8oWLtBHGSlXYvW8vlye0sCBmzmD8fe31b9s4YVCmTozfGDGquv8ANVgD6T8Wzt1vo+JsV2jNWdZt81qTGB4Hagpt2Dq6lEMscSIbdDZ8qUS+NSf5Hbcyi0ENtVbK9n4neO7i4Kx2fI+Kib8fg5xDhL8zczOtbY7u2QAT4gFDSx+UN1KaoXZD7qQCje3fcMpUiubOAnQuvgudeOIOXxuickOjCLDzfLKOh2KCzZF+prlsim89ZHxSrhf19SnNsgSTHy2CjmGSenth2vCrOoKPuEb4AfdVdgF/oQol6PmqIJEqK3ghWlX2qoBJoNl69+KTtqAvkaWKoiJUR0Zf14WTwVFx0BMZ/B9+6IFrQyNnTp2lYEGUKnD50pDJ1f05Rn1hdvqWLYfmRvI77MnU08EA7V1tBw7uRcrnP/fsjeFha3d4dvzkaZvaXW8Ev2tDN8RMTY8rw26iG8PXDh28F0Homk7/pNcShbfeekureOyxR0SaelK2GCgxxp4lSqpIVDDLNP82tYKxSgp03Chk3d3gq7CUxM45Y1rO8PCN60PXxifHH37w4SMPHulo60BD21OGG+K9ye3CyKt5+AcyxIjOgQO5GvaZZ57GCUVrny9//3vqRcWM7/7tuy4csZioFDRFxxCkcB01xBAdGaEnQAa5xYSmjY0QRgfNQF4IwxzOHJBeeOGFN998E3wZf/7nf57munkl5x5IoGep6zh1MgNDEMRLA1UTEjKhx75y6bIFhqvXbmhkNnL45AqMqelZN8JKjN8Gh00kfjlmeXcQmk7rL6pKCiuU1wygSpgQUy/w2GOPiTFR0cNeuXq5pbXLMv3ynU2zM8vXF+NSRaoEcmY5b2D7Di+If/rsmfMXzqKDPs90wm0D2wcGIaBwbi2Ic+3KFZ5UI6/+yFrJ888/bzz60z/7ru7v6vWrn/70pz/3uc+BBpl4FJZZHMzrsZ4cFmGC2hLwQpqbucUvwvoyTDRdQZVBwAsBm3h2fefFF60p3HPo0J69e7GFDic7TFgCzFIsUuHIsfc/AFnnqC44wrvRbgUyQxjgLz1QXNe0ZHTGR3xHfyjpInVb4pULX7uq3JONYiRzYmp8+8AO3kROQzNiWRDjz6M9m4DhGlWa05plHQO9TSMuCzOpOHToXuskR4+e3TGwLX7pehOXFv/+712+dK59S7MlGTQUcOcvvZAHJKpBdbx4Un74aUSppAYsF3dn43Zi6PcZI/UwJNNw5EE0PJnhdKG3FxosGd1ZtoNgEx+H6vYTDZbhXKritx91xnHsKSDqghBQJcBN6eBDQ4SfnhXnmqzG10+1IgiIyAVMNA/BT0GnX0DmUeHUn+pbM/oJGu7nSW0opmtKFSh8aYqpVZJ4zaVToyxBOB2ruXBmGqURFW8cdCke0ooGmY93XO0ac4xJdquU+YP0WnbRizLFkky8II3SFfGX8E8tEC9KcoL2Z7oTEtKKin4FgmLRxgsiY1RNWRKvEg1YcEhdspVq+lrpgwgoJO/Hc/kprNMZYjWILHA4WK4qgjUXmD4pJdkKqPrEQS+s2pUs3st6hW5yldGJyeJJSvesAUqZ37C1+SdBlOTApxMpKDIjxIwdnRLdHJ3pZyYA6zO00k1hakVPGdA2tKGPwqjleawFH+prfamYrGY0yjZYeolVWJq/lFI+MRR7xJEebp7eg1xVvdeK8NenSp+SK8BKZFJw0bftu6w7aVpaGeIEFJ7je6Ut9tbs60RWTj4nwC51UKofBUk4JH/5XiS3JCxTCy0qeVDCtQmmToTQZuBgpSyiH/mPrr/O/fruJ0wENNcleyogWYuWn8JK+PgLPaOKjcQyaZ4ChvFSy2EARcECXBbx+kMAACxjUNzqlOUnh3EzwLtxTrEVs4VsUHT0jV4MAbgvmYzrCHs3IBY4MfApWAyayE7b9smQxNmGHiL4SU9FPnCYTn3i8WsEkR3Y2v8rQ/pNuVaunW+RdYKHHnpQgrKYYLNm2nVpUhsnJ6a80cD087R5QwDrtetjAddjW7A1EECDxQfmEDMsGtYN2Z4wRAFaiifDqCwSoB6AXtROApQRD4K6G20roaTZvWs3VKGtvpQ80xtDkrHDICXScGYw1XVVOuCtM1PnOMvPcTzLZlOQ9b+gaVkprjk359hHYME8/HJcErNxUyZRfLJGR0fOc/ifnqSv6l6dGePc04HB7W6fvP/+w/zyTUJvL8yxphEMWdLXMYgsZr8KZK4PXVH3T33qiYmxsROnT+3dt4uq1tbRapnCfQ+35m+ZNfG7Hrp6FdpPPfVJlmz7B65ev8Z7ylp3/LRv3/3aT38FcNoUDvppGnp7+a5tvj94+fv8Ta3P33sPJ+57iB9CTUxN79q9hwqngk4osarv+PjJ8ZjkEUShkKQdSQnnZmf4MP47qHRLs+tN2fiikFjW376dqEQ/6e9DMVTSgRupHT176dK40XlkfPT6lWuuiL1rxxfD1p1lUstW4+kCWWQ0TEZcbbxfvGN/aN2qC6XKWfILLHzwnHahsWA0iuERY2KjE3KK5V4MZqk7hhIAOMviJ/yJHNULkpojPysYSqxqBIN0CcpCUumFcLxIlDSCjFXMfALNT7m8SK9cOoknyJpPbaT6B7kAkVIRQBn0DOCU8NokwZGg7L/Pxp7GG0M3He7OOOp4H5tgd+/af/89D8CJBy1be0sb/a11245dJgZI9qMfvYbicwuLx49/YMOuJQKaOgouKO3O/KOPPaSfY1A3vzJNP3Do4GOPfeLDo8ftMcBR1YAiRHftSkPiXk9E/vRP/5SHjPGa997Zc6fV7e7teVWi7wpI+corr1CdGdRpqGQUHC0Is5FMuThBXzMT7e3e6sKv2Rn7dD+gxly8cG5yfIpVq6erd2Cnw39s1tGP5zQQVgyq0tjNkeGR3EgnOOwWw7woiLMN3IihOe4bb7xJTaSs69REKu6b3/wmxQ4FtHM/kVKlkJV8oDXc4G/tE/7eRWqrOORFGkot4FgF4L/7d//OLWYvvvgiBth8gx/AWvRERXmBVa/Kv5qXMImpjAfQNP2TTz3dP7Dzhz96ffoHPzQi65vmyg3b0DAgMzXKCPjd2xmyNB6tBQTCUKUTKBi6eUSThptezyy/s/OIye6ly9dm4uXPk34ZnR0y42xQByCYObmsW/sSyS7S07eVxyci+Hn+4hXn/1OU9+7a7VikqVvzQzdG7fi1K+Gr3/g5vSVD+8jIxdbuvo6t29u6eqZnFl7+/g9ZQQYGd7A6aKuIg6oaGA0PbvR+JSCLebmunR1dlw1+mLWlWXO6fvUK8eB41tPZsee5z1j+0664TrJPoB7h7nAtV1MsOvoZKoWRSLdrwHLKE83eXmdL2Gz/emTFASslOliUJPlUBdNRVP30p5/ZuWuPgUE1sUO5pqyoaozMlIjl6c4ChA1/2tvNsTGo4riTE2COpDPl4FRbNRwJ9f7RY0cefFhH3NWzVWUN47sGB6zV0L9Onzpx8cKZ1mywiObOEZIyBKCgLriAlV7AFOOnFzFC6Resa9M0KRSUCh+jGfhJ2bNVTy7BJyDJleFQLmM9ndsvp4kYVuItWbwWmf+k44SOC2UCsEwQ48Ki2Cg+CQUlSn8pPg4+Sg2eaygpjYkihaqCkv0rWRIjLrgE61RkPaCzWBDoTL5JV8AmpTTJVqpTspe6VPj0pwy7SSBUhFL/Euhe0dTshrfnl4ZKsQzSnFSigZdcUcpkNg1Yalg0zVG0YMDVvlJTylPpPa3eJGNpwr7GS79o0ikbCDSn6cd4bAOoCkc1NEzrBlnmdA+JLpblJFaHMgORplKs4B7kvRSoH2ne659UyLs0NVmNB63+hKoE5eNHMBUlUppaqVKvokkU8agAC8HrozHiJlbIwS8mKsG47uyug19leThR8FTdHBBFMYX4xmVaY842dAe5S5RZakrtFAp6xcF8BHx0gWcVSkTyNXKZhSalY0z+M1LRrjPjXA9FB0q5dVmsVjziFaLp64JxCYotydbyFqr6gRJeVUqJnOsgVsCrs+QVTMlS02ewrLzKdIiAO/HYbhpKNZQLoWCbgpnVVMc0XK3VM8Qz2tIuijxXBmWDhclBINvOsYpmLTRAgvCyvqnsYbCQAkiqKR0cSKYcyRq8cSM6h/qSbViBX1mfOpRGZUiqL0mVWidIk/qWIIuQ17AtUHVrxjUZ/arjF2tkTpvglrToVKWN0XSMsDrKxhxVKQ1osnjaxgS4vNW/VKuhkTjthbojklOorrUOiE6AkN7xD+KZ4W9Np4uOw05zRjRTdn76xnR2cf2wbvbMmVO8Pvbv3WNIysLMyvLk1LgD1Auece7FORYWiOmxEQU08PXGlF2mYXvPMgimn4urmwPZ6qGZjFQGmnPnsuMWKAMKjdAdLB8eP2ORlmd2T/dWUxeX5xiYjD5Wa8PfDY1H7n/Q2ORd0bQdx9EgFwEsvhixQiKUJ2Q8CzKu/uT3EKwEIwul2RwDQeoVmfZb3rh23dBUxuI49uCLiiMdDcf9SYiDyAAX0eWRb7K0icEdfHR2QpFRRhWSfWZq+7b+D4++j/gKUjWr+Pv37bEOT2WiG9vFRwIL6ZZR1QRJu+VcA082Eg6Zpb/eaBt0d2FZBtzmzV/+0k+0tG6+dvWiRaAnPvkJ3aZJhTGRU7714XsOH6LF0alunpkeH7rB/NiV6dlAv0sz7949fvSYho71xk0qKCExN+AgwCfHkcm0KB0rzy4aF+IwTY5MzFS/GjGRsaVFfGxt70CNhuIh1l6OMWzvaLObiOrP1GiD9c6BneaDhuMqFURdccq13gJPVwapCKryhda8pqYnF+YWdFNGaipGS5yeWCnbzF4WF9zYM81MTJXc1NRCgYPVnZzKZFaWmSeCc3DSgzm0TwwZsE18fjZzQqME3rHYiVBN7xIgrBe8EEMksHV07KYZDlRVqjSiOCB5UV/QwFGigqpY0qbkIlHia6AhQJqqKxnB5mRhlzfgK10dVCDpFYcIPI2VjmjmeGIIkqB0kH0lOaUVb7KRBHyVEqgEiuBOwKVh/tRJ6zpXTRbb27o4zDgunUsMzu0a3KVZmikSTj3wqTPjZ86N921r4joPBM0YKnZ1EQiFoYkLOainMFNDXnXmczDYsX3QZhMksFTCpGqeJ71zn7SrL33pS47kV7FvfetbegGn0RMsEwP8U64YDVuzNKmQnQqIuxQ4CqVq0NdVTBq+XOfPnh4eGx7cPvjZ5z5jm+b1kes2+46OcwC5PnbzhnMDXGzd2dbpWgjEb3XNUlPj8eOn33vvHed70tVwQlOvep4JpTNYn3nmM48++pg6Xrs2ZLaggek+7ASgvuMEyvDkQUHvOgsm5LWetGFLb1gosTavXgKZwAPIK4WYevlbf+tvSY9b3/ve98Ynb2KVGlWTs5mAc/Fpir6quLwoibUgmDxA1RaocxfOX716bfZ2fATBxAIiBZP0RITJ2iERofsv3zVJNSC58QKn0QoQNUI3NZWeoMgOQ59qXUBgnHAsmoOPbI3QxZhF6ukkW1hcKM2gUVnuXXH1G84CgrkQ65ntsp3o+Ikzem3HDKuFnDt27XeeKTvBQ48+oeEgmqJNJjRmi1QawLHjp65duWppTsdx333zB/ZlO7aOUc+s7mqN7LY0YT1ikknFmfSrAppDnvRDWzIqtQQi9d2sZLbtkhPmf7NQ3DQET05N6C+IqCynTp2Y372biLr2a3DnDj0+AqIMaZQAtVUHQAIAW8CRDh0wQrzx/uboTawB2SdizAZg7fL6taFL589ZXdUj69/NPbRn1LFHhQfAB8dPObzPgL59YEA7gr/mzHnCiYpWGL/3wp/v6OtxJDM/QaeNFFU1A8nHAwapO0wUCls/1wKzENcRgw1NpNq5mbWrs4q09IBqrNU9UYAMJA0tK1usLRthNkefN2nyJUVFfy1ahYdBgijRbulKW3LvZJIKINZyaw8Fkxrpp7D+yQuA9VlrIRmxqQk+/vSVhu1Z4YC/Dod0iVwPtSxGYmdlpGJVlSnQKTWkuxDAwFZ0siTwTS02sW+Vl4KeZNnq61vOP1fTVClUQlVVi0pH7Y9qWkKVriQpq6illll4KcUGZy/LmywKBztzgWiPCos+WwlCXXN3Q5LrPB3epCynyBSddlWDz7cSNKZSChVagjAUCqDUr8ry1Xst1As0vAuVMmIqwct2w8wK1j95AQc9JViPXOcd80PNW/kShatSt1glZay5pBFUT2oExWACF4QYWa2gNLekgzFuFdt/Kp+M0fhVgyQtbc4WgXAps9ASv5omohKsmC3KBABbUtLHAiAf+/URBUTCRD2htJ4EqCoaEeA1colar4VXmXwSI9QXT+jUZOu5fIQKQx4uqkEmw9mMLUsi9D+pQXZtl443qQOQJBQIob/8oqVaQ8QXccmeFYG8mSLw+N9wh9JtPUvLK7WPk5WXnOeIn0aZaP+Bbk8CNMokASi/1+LTgeMprATvNWB6lQTI1JeCWxCljwZcaZhw9tVPucpRlbEXGCOEmkbHWPsfPzVkP6WnhuqurXMyierbjV9VzdW/ZbwwYpR1e0AMiDLKImb4xjAzqsG9u3srmYcAPx/av2TGCMDjcLK93wEUKqIXtZKv/ze9nJm95fQOaIBDxWLV2jk4wFhhMwCrNji2GhpTVBny9Qkae59+G0pGXtfRcAHxlYKhhzcxsGCoFlqLkV1vjyYSGzIkNlIYa4wLQBmGDAHGF/Wl/4lRnLoI6FnLUkH097NmgTwgCOJiJqXLCD5mIVShTG5AQxZ6iOrAE3y2J6OPeU15blYcVQFZOOtDADJ0IQqAUhzI4+wkpmCSPHJ96Ozp4z4Z+3btGjxy5L7PPPM0kyjdjI+TVRFURS4GLx5DPV39/H1r20dJSoiK2JJKA4GAEZMNnOtZe8eWL3z+OYhRbRk8zfEcLuJg7XsPHkIWtVBc65a2wV07EbxrrjedW3oke3ApqU4LjUUfoa5cunr+4oVUp+xjzvi0oaGjvUPndPvO7Vsz9jrfnEVCt86kx8vVk41LjWYgKGaJRoxtcuiAKVBtq+fEtLfpsiq1J0ZH7AaBvCJYbO3m4sTBomVIQzEEJ+BOijKBNbiDqbJQsD0Vo+lO3rGDJICGvDGBNTRcunDeCgAm+qonxMRg1djovjbJoARm+ZQG7h3XxHunR3kiDvJKIKX3mhLRVIFIMGWaBSlFYiTylfDUlBRjP8XXUIFUhL2TNNAKkdMw4UNKpcQ1MiagAPj6UULhnDO7cpRYD5nVfFSH0lLFtUhdTJakAuRGM2Sty67xjs6GQwfva2/rvnBp6PTZiw5pssDinJnRsbNqCsR9h4/8jV88aJs5qy+iQ0gdTLnKfGvUGbpuSLUdx4FQLrjGgCuXr7ITQJEyR13Gwv/rP/u3ZTvsfu2irbVdNejTlEXQmKhNr728/+4H0hB0+2ixBzTcYi9HHTWp+rHa8iCi5MGKrz/npXsOHti1a4f5XHdHuycz6qED+x9++Ihp3c2JsQvnLl4Zunx19pKp+z1H7nNp8eDAdudkUdNNAlVkQ1e3g8Zg6O6J2ZlZDNNiCbQ+2pUYu3cNisGnymD8JhZEX3bSc/H8hXfffiekLCe7U6AJE5aoC2OqxTjxJnBcDzHbfJIdXU9Evu29/tmf/Yb1VnnVSGUtRJLLl19++bXXXlMW2SLEluFsk4Ckn8hlgFy8s1j6AiLFwEOAbJrxGiBQdOBmsYDGMIloINCx0lcJlmwnb0/PTIFGjFAPbrbkwNbHgmczdCI6cUdiDp+zfyCGCStCORqiicjzHGMPgJ7zPAgTs7t2wTuQ56WNzToRR3DqmGjYuiTVtJdmfOqW4rYP7l24Pd+7bUBnxFONb78TGOym5vdC8P/Nv/l1fvxHDh+2Y4SFXl9nqI8y1BjFpamltadvIy4QDJRkjHcxitpBG1+o8v4ZPE3VbDLQMdnKop9Fz9df/zGHUD3p9RDp9sxMmywag7FSg1JB/QJrL8gO/xkeHVGW8xDMaiCf5rrxJiE33QLBBfDob4UHZPTXgxscrDnQNEZvXLfsgMvMCT3cPReyG2FXdm6NO2xndGz84YcfoSyjM3mwhZqlacOSU0RWPjz63o1rl3cObJtvWGrf0uirQxC1cwEm2FSD9xrpifIq7lliXP+QhKW3yXq0flgvUL+SK2IRti9Gt9BBUXzubphnE+DKi2uxzxRtj5XQclHpV4saRCEuFt7oZDaurpaU48DX0YCfUqrndMzsawE2cM2jolww9yNnBpYQG2cUo1XdxfGY6zB9h1H9WcCsfvFef3pavqNi0SZivV0jC1rQLVdTs777F00rswGLAUW3jE+G6qfwUM5hkbnAiwwos9IzJW9YcawnajQ1FdegumwSXdwm12x/RRD/gk2pJTgFBD0ujj6Gt4CizLH3Fj6u8zD4uruBY1Jjiq+kWEW4kIsYF5iQ8RE7oqSCpuySuKKtkKoIVk20EjHfpUzOKJcyxkycUlJQDo2N9lX5Ad0YrFdxkALBS2Wimi9vNOULkYBCDVXMmaTAyV1xDsaSUxDVrzHOVpkwBGNb+zgcqkVWP2DBsmVxbHOzGQWhybUNBfOKFRDw8MhqpYmrw4hkCFKpOJ25FvMXn2spkir1SgYkT51TtypuJT5f60SikLRgnDwSGaezNE9a1c6jvCRr4PmXW7Rs9F0tK7ymca80cANGGPObzHBkK1uNxW/KhCnwQYhO77jTMpFDVGCixIvO2gXQ0bD9lDxKBA7ltKzUV7CMZMVO+mAF+sYNkc8gGeFjnFJqoKvtkgNwPwpIn5qYqBSHn8pNUPQFQdTlCMUCJcFqVUP5SBqtXWK3YQhQMzZVzUB3YTESH40O6pr2GDpHAdBp++rIZNTRD1sB1m0aIEad+X3jBjjUemMHvUQuQ6TuSAKjKmi+ilQQB3FbqmgRUtJTJUAZSoKuz7+OzvaDh/bJqCdfuG27cMfEzUm1MBzv3D2oE5bSGJrBdFPuUbm7WPcpsNwsTU6Mq5CbdaGnOIOUjjrEzfEsM9/5zve8Nm/JJivKifrai+C4OQX19m3jgCBGLmOoUUPvbVEdwjr/SgqfvJcOPLodUGJQFdEECEMsQlM6eUVQDyQG7Z79ucWSl0FGvdJNQ4x9M/Sk9haDscOMm+24a+vH/EMHDhv1qDrySkl3AtkgboS1DsM4Teug+VgScbYercky/uHD93BYctEkappNwQfx7V3Jwf4ZH3NtAqfu6xNDw9evOTVoPqbn2A3vdt3ht2PkgsyoCf/GBt4+kDHwycLIxUPAXl6HlLClUj8QvLG50X5liyfMrG7C2dLa7h+DLdYyGer5nLdHc7O1kpXQkrid3/3bB5z2M3T12vDI6LXrN8Ro+7QFFnmWg073lbZ29m/tpTAQqshhWSxCK+8cf0gI8qI25cEixrlTx29Nz+CgdSHmKxXBF3WRwMDALeXRRx9v7+zmvWK7gKbU40TWOAi1EktNyZEo7P8kShvAlsnGSW3cOO44NYffWNvXKLXM4tmfTS+ZfePS8tKPX3sVlWCCxWnaRfdwml9371a0AsonzcpX+AiQ99RelEX58dM7GjKcYJCfQpUHiJUccfrHa/UAZ/2ruZOf0qTpFa4BqKz6U7yvqg8fOGhSn/7UJ+v92URLZJVhKp8ZNVmS3le+YUrEaDV01nLj3j0HLl+5dGtm/sTx06+99mMu9bTYzo5NDz/0uOuuJsbH7GLWUY8MTxy6995LV65dGbpqiQTDfu7nfm5i/JaLw06eONPrsNZ+l8+Nvfjid//oj/6Ekg2za9dGOP1XRdnhSvv29TpYff/+gzhN1UYIDR6Kfqo5RV+WsZGbVGEvFF8Vpvr7ShuTDAPox3yBpIQhsvJacyEzlyvXVCCZVscjUEotAXpUcKdAAmJlg63Xz7Hx0SuXLh49+j4I9gFzYRLJU01nxKcNYc+fu0C26HZ4o49mZnDPcza77N5NEOXSNeA34IozCeO/hGEqCCsFiSf90BBMwWGLVRi2aiwps0NoUx+jlxcbknaOT4rT42hyIpFC5Ouvv47H3uueAXXnIyQNA7+VzptOA6ZFjo/L6JOUOdO0ucmessp43CeuNjnSb6CK1FL6hDiCEgVCAD70iI7a1Z9cd+Yc83RryrJPt7W2nQN2erFlaPM2GyiUHx6AzDrGXVno0BAA00zGvA5x9EqCC8eYvYeu2yKS45X0gNv6dxw8tL+vv9fwLj29nwq8Yc75MyuOannm2c9yoL/n0AFXvpkKmlhCLD1Ck+41A6FR5cL5Sw7xREzcv3rpcjWKoJWD0ySm4lleNEggPouOGtkPZODIAMZ+3xZrB/S+9rWvcdymyiN1pQmuwQdnwUCoK5eHnnnmGd238Yzvvt6W9yQJ0XqJpUaNpxwWDcV2MOhn5215nhz/1KeetDK4eUMOKbKBCUCNzWDupKknnnhy/8GDjv0hP84IInKbGzdacp2ZuHnhzOmBbf2TY7nlzTKqsyicK0KXUZnUqARI+ovUaiHAQUW8eNaxs3iiWnfQv0mZBDWNXEWXNZAXxbSoSo7RNyHQ/OkhZZdRYMaRoZSSS3+whyNhhCQzBnterBgzH2M6gLVcwuO9CFEegZCyoqrW0j3F1PcUkOts0gWjuWfNIlIa4uFFTCqz9hSjNckO5nqoAB24JBUNLb48sbpm7UJeWfyOtpIP0aX89M+GLZ/KVwqZEooi4oN+PhZW9lsdMQSitYCzpTkqpa2ZVsjNtbnzxMTrfFXn29CMzXh4BBkqoxnnGZLEk6WSPZgU0inL+gOapPkXaig7JTblWrHVLruiDTcJPNWUaHmBJSpVOjlkqCLvWQCGHl40+frT0yeFlnJNiesCQugvXqhURXj5wF/nY42nd5WZR2ZN1Nukj+6+as6EIdwqnp4+4TbyxuqN3ZabDTHmAfYmLt5x9Cr5qenL/CFaoxNAM/fwXzH8h1LRtmn+eUviRAiZBviRmQrelEJVoSLgs5iSLBT2svrE+wDzNRIBSP0SAQicmk8CLMgzzHGWjMmBLtdESF0KH0tMgRpig1HARkacmeSiq7iDWaQwzZML32PAKNAxyYsAVbq6wFiPEdALO4JaIVepbCau8Ih8pZX648mrOZzLdpYkBlWJZE7fDUimCabZZAlOJS/vHP14ilyrXjIXLntCAIsFX8VDT4vzHsSKdOE+EfBOR9T0dFZ6Nk2mptTpaae+ypKmUrwaZMFHvZ94ReghZdGlQ0wvrdu3VgyO8dpX2rOWq2f2XsslqOD4adRzzxFFtw6mIyM3jCYqwfzPg4aC3d6RlXlXnypaCzDs8tp96L4HX3/9DYGJ1CFsyoVGFW2J6ApOqNcTuYfLINbXt3t49AYMUUIyL8aCU6dPsbhpF1/96lcvXb4CVG/vVgbjH7/53rbt/a1tnWqtjgZT4yDc9M8MxrKjj14XZSAvoKeq4W19qR0yykgJE5VVHDobj3yiwRuv9+/ZS233Lg1MZIQk7qCJ03hkATwNudx8DAf6p3sNKLfSY5D9u5635mbpP2Bevz5E06Druqzp4QcfoL20t21pb6UYHDFQWuUmVb46VTIT42J+XxHdAAEAAElEQVSqA95eZcsYVMEqobjmYle8wBR8ZhLUCCDmkgDWVd78qsCiSntREfM0w59tvhFuQzBRXQkfObWaRWhh7O8E4MLFS2hoCchm5Ymb4xxsSJaTTdxD3Dg7P3xzQlmtbR1NrR0Ia/imUaAJVmqkrl62SAsr45eZZxVgmguSoq3nLecMjo+bYWIZfe+Oc8xpbNWxIhPVpISYpjJrgWjjBra/nbv32ygtl2a3e/cO/gZOtUE6lAdzZua6SiEp/opBdtKLXJqLbagmxjbHyYsmOZK5zD2QgvAqtJarMcFTFgH7pBGgIVKAUh3UNBlKBTjalAS1OLMU7+or3hME6cUU0YqqJlmtFI5Tz1xA4Suw4COjLDW9d/MxKqgn+DKK10OY04NcG51cZBK/NFgMAk0poAFFyKs+A7QbAM5reK0tHRcvXoUYrXdz45bR6fFXf/wmqXVx7eH77z/24Ymu7m23ZhevXj1vr2TjppaR0cnf/Le/oySVVIyjnw/sP8zENTkxu2vntq29/fT4m2OTlGmeEvh97Njxhx58RKswU5uempELWp4s0EqEk6AyKKJWlXYqQJ/DM6UIuII6XopP+Qhm9PU6z3UDFcoAY+O2a8mW7yyODA8zzOuPAMTa1uYmOHjvam+ztvhoCzf1lmtxwnPbyJCGbUmI+u5IIpTft3/v9h3bdMIKRSw9FBs29x/CJ4beCT2RvPlhgtCyI1HsEzt3KkKV7bbRaNXLYpwE3vHM8+zZ01JCvvS57adPnyTThNK2aQooEuGT+moe+iDxnvTgaLdzc3pVEMwEbHh98hNPGBwc27BIcy46gjQ86W/dmlla6icjquNiK6Uszs06NMCGIQ28jIgZjnSedPcqYRCuIqhS3kPiWIttwzCcx9ph8UStXb/StLmZmeH2YpacSM5ErgXMrY3SM8oTO5YYkmdJktHi2o0hYNFEz+VaNBAar133aG+/+M5775qnOEnM6ocNAw7E3HjwXk2BN/zJEx9SMDlxmmGK2X/A0gGTQBs2ObDVNNKCphsDLME7sSZLtzsGGJdIs14bL1StesnS725OjJu4IosrAG0XtgJgNzlU0RDHIQZT7cdsygUO1H0XPSuFDLuYTQU//elnTFZ7+/sw0UBibQDfUQw3wdRvUfvYSJqaN+p8Z5cWf/zaK/ceOuAA1vHRG1R8q14Sk2FrYnqqwcGdPB8IJGl3bbIXqr+tCzSUF1/4c3OHFnu2t1h4SWvnu2mlSe2gV7zQKXnpXwCEHjYJaItZJQGdNb2JoRZuTOPkRydQhu8wVGIZk8fUKGa5aMUUFHMqP818LRdSa53jLAkrI7Wn9EvgpWPSF27YvOH2irvBGhZv5zxW425FhnWGwRlxYFZXBRRHEbQhEA4FjTh+0DvAwho4Ox1Tekeq0WwkTno97h2cz56ZEpxAsqq1+KTrTRqkSLmZc6aPK4cP6jAp+hi6ERax/WTxzVfprSS70cwlyrxLTZWNxXeWFkqfjBLptblTNjprrsH8c4F/PvS5IRQKGeBSf9hqL9Hto1lGc40SljuDWMqljD1I+qJbqh15ZC+P/qWOFLvqEOP7rVvOiKDHR/uBW6lglLO4z6NbqR2EKzeViSOeq4AL4yAshmXd0xcp01DKMf9+s+J4AoBI+ZwsuJFjgoEVUAZG4X0Jai+ZSJ8qg+CQl6Ji1gzGYxcACcpqbk3/BivuHuVS2grK2kh0YIYyCWkDad1bWmyu3MQIAJeV3EuloFqEZqWEgjxkouEqFDXwYVOTa0q7pwy0d90Uu9mhINhrAQypMDdIwKIWnNopaHP+FH3aU1we6dfAjZys8UrR6kWWKem+4RlQeJn/PREJIU1htLIQZwnPsNWzrEShB1IHcplDBomSLLOdQNOGAoTXQjm2teBZJptWh5QQe3yqq35OynYPHRqqOexCmrIVpVAj7M7WmtxmZyYO56L3F7phJOoF5yoNqWrYrPO2rhAOGp9kUB24lCx+Ir4nzQQGIWDxrPPVfp48tVi9ZLkBVE9gCxg/CQZcgKirvHWATXZ+/y108Yws4PM+yuQ4W2WyFXlVlnJFJc08RlmBBX3P7t3Gd72rEaGro727swN8ZaEk8Ucig5HOXNCX3p5Lm9/YkEu7QEd5naqDHlnunCzE5M93v7Tlu0ZtQ+SVi2x8dx868sABpyqPjXGaMB3TxxI8SBqLdbk2hMplAKIhUCuNszpIvr5nzzq08yIXcycxbN3a+uKL39Et0E0vu+z3xsiB/XsGBne3d/bQyVTfpMbTiCA7lFh/2LZgomGhszi1U18bGTwRilVfC1U7T8gYvo0sOAYlChlNFwV005A8d+Ys6y0S1dFhMsf4xO6mlDJqL8mb83/mXO966zqlYHRcZ+6rQ03At4TuHMyJm2NaKkk4CO89e83srM2PDM/de2jflcuXtQ5IqnuUtwxVrmqNY3NbXy+aZB0hc60VC+SU5a72LhY+aDPVxUx5zQi4FXNNAFosCMRSExcvFODd1be1nweB0bYXdZaWRsbGb7NPLjrLY+jKtetXLlwen7LSojNe5DyGVu3dfbr9HDK3xfQk1kCzwYJYDHBmtoRBfZWSzpBkphOOsV9nZuUckQ3fnPDpPLQgCpVdlWiI5orAeu7bmmiTUVOujyniRoHmzY3Ts/OnT5564KHHaC/33ne/FYP333u3fyuyWHCIVxVFS7eMMrAisZSHygg/sXt2YfauiyCLy6sBF7+M4wZuZalafYGGGbGMXm6OT5ppognykiLzCepHuc86h62r9db+qLI2zW4sfiX4gq0wARwdSEshqh5iVa1HEDHQI4T0AbV2oRNTqUjp6zoJrBCQdKGhBJLJlQV790NLvCRmlrB1bOsPVuwFuahhg8UkdOP6IpcwsD1eKjDJ5i2VdBTkAw88YUuo3j0l9W+nnfIAt6GCyfbS5evcgS46HejuHZ8W5pdvjt9yfMv0zG2rJIwgtqTfuD52/tzlA/vvtY2Ygj58IxdMnJg6RSLn520VaLA34PTpswzkThmyQgRvzNBOkB45kABB4QQ5wwbh81Wa6hckUp2rEHjR0lAEZZlk3nzjx6a/yI1kVDqyIhfHIWtApqR4YHWMT5Ht/LLbKtq02KKvVBb2a+0yOp24tO0liQXw0QWD29s6LMy9//67KF41SASFGySphiYYJBgaOik+hd7NVVSEyNIX/ZSYxCgaq3C08tXTJ/IEGaLgefXadVopBEwqlG5uCgHVRxDlildZACGsFNiqiB1hW1o7Wjrc1VC9BjejoY0BZsJpY1lk1lPE6mOYsO+H50YGJod3b8ylM3Cw1YZl1NBs1NAEo+PE7UEvpGNLB9dS/P6xW2KzUHd4Xhu+jiY9Pb2DO7ft3r3TDCH3kM3f5gDGfo/mc7np0DHVZSm5mR39ogPyZSFOVgpRhjxwehSDREePfgg5c7PerT3Z0d/deeS+w4wlBl73xcy6TGF21klHoF4dukxReOjRR02NUMPWFGuBCsWCgwf29e7ebUzEEXw35Bt3VYnkSGyOa9sAOE79l2A3vLdlV4kaaZLaHrK/9dY7zzz9HE5pQdrMtevDcrGsYAHuWKi9cPFydUbEROs5ZkNcGHWpkj316Sdsk/rRD39EReXtc/XKJRUBdm5pFt+lcbL1tu0D23bt1b3pT7VAAMv8Sv/R8uZrrzpPbXZmGhUY5B2WFXVMS6WJZMVDtxj1S5fBCBVVaG2Elga2EhRB4j2M40UZ0sEXHTEaQulZCrzSyfKjSqDZbNziHnujkiFfb1xu+5I4ABlP/KmhTADEC7jHOFlDgZ8fJAQ4acVIU6QuKAkiJagp12O8FF2wzDQKWh5agcQ+Sa92YHoXr15EUUz9WYFLA0LDbcu1LPABv5xjUaIp5kd0vchxCaL9IwjZfwtIEiBKUXypOXwjlGNIiOXIvJciaEnBRKaEAERadyAUKNFbjRiUL3AwpYxX5gyxMBatzUktCFcMyUUhy+bjoETsFYqD3lVNqLiVSVMZvYonsQRKlFLFK+3rU+L6UqlUfxYIifeiQ1C19SC791Q39QgZ/QG5hoy8ZfODn/L6WgGmUIppCQEVX5OQSyAjnr5Ikit5C2hJEslpnaKMBuLBVVI0wgi5r2CuBRKd/KV0ynB8IMyRdDYRtrAXUVNrufBOCbGxg1ks5YXeKVeQFKHW32tMfap3GJU5WglVT9f/lROsAyvBM/Sx3I1VNbIWLR7avpCRfNd5+pwghtINLvSzibhULkqwzXibs0YSrP1f03tWOCrnHQVSXAQjq0uZImbWoSWl9MgjunuVoGw15skXtgWB1bx3kidJ69OLTsC7waPCXv9ay6rELz1GNv7WUaa+6HujjJYtjBqRiovXxXmSIllAqGm86CptliS9+lKNzPmbFFMDAatv5hjaRlMGR1ZhNZBS/cDUpcsrmiTrOet4JwYaCjIyGuh9xfGljlB7cxMHHsuq7XRNXeWdu/N+Gmimpm/C0w5JPT9tpqe798LZS3/9r/0icTaa8zHQ7fiU1tSwzOZiJDKxNZQvL92xrzPzkOkJmakNNEhti12P/nXs2IcTE+ds80Vz/io0bFOCHTb79vZNzdBkxiCMAkihY6dsGEGgAX9PBDHsSqBXVwtiYFxWF7VWUzSkfiCXSEQWA0OR4BitHDvjlGPeO2pnSNKtiXRoPWje0UFFDOs1l9JZDTZsjLkTs1HSsM6NW0o7m02Q8J2qRtCGh6/JSAAZGZ94/BNWP+gUcgHLfYHvEeE8eWKyFDct5bmzZww98Jq/Ne/yrXvvvY+u7/zx73znhWs3rjujBZsg/8Snnty/74B7lbwXA30vLxoCYtY0dSteNwjlbqKR4TG1M5FXFzZlQhLWU0hka2lzjxAPHAoMbRuVQCao6Z61qDJmOT6FOGrSNHrLPpYnbNW9OpZtu/RPguTwDLTlaiagCaiOFYwP1aZ2c09qRzFoItDi0h2LYwlKMASYartGDQTr/06MXd5oTsXUPN3d2Yb4GFRZY48AFgvgA27yg19Q5eaAaT/91S/39mcrCPrzD4ezNDKa5JAQjEZV0ljlnIZz9NhJigSDIGqAIyVqyEXmUV5FQBYA8VOJgEhWRUsyAubpJxlDa0GMBOimIBoZX0uYIyZhoB+W0lf79jpJgBLrs3gVZ6o28yexgCjOixKpN8D+xE/8hGYCjUAt15ZpR+Hjg0fu8+HC2SssO5D2Tutz0KRxgbPE5z//E6r69/7uf3b6zBXXNnPQ4Cp8d4m/AQW5N/428Su/PTl1q7Oj8513Pnj//aLYbUl3g+1zs/N4o2EjugqQOWhppbYEaJnoQporXaCIpWrOpZ50qr+GgZrUL6DMU+0DriKF35Q/FfPS3RnvoKuZNY+h9XtHjyEW+Ozjjzz+iZ179rIE/4t//evPP/88Dzmt+s/+7M+cCkmNc93Ywf2HUBBkIo55invv3behZJlCn0UcscAdIBa5ACFAZheQxCp3d+CE2ertlQUwXVWru3nllVe4plmmxGCLjPA34YEhHnjirupX+VNHNVrvAnYM7nz66adBRgfsIQ0YQ6TEAAJDuUTKDjfrJzZJX3E/yIXLY5NTUvpkkqcW6KygtLXojrFzcTeOFYyQmTjrvFl0GslWvmfcWTFfNxYbnn3RMVqDM2Bn3VkX37RlqaUtpiDEgRlmykierw9dvXul7I7vaO9y7XNX387BCHqESVWnnPEwU4wlU+zHc7NTzilAMZNMtTBaqJE+VNuTV5OmdjlJ7MrtHLr65htv9/bY501L7+/mtdfrdKauudvz3X39JNBVHxPnL7h4xH0lYBlSt+8YdOzr6TPnHA+mDeOICwiVwVIL5+zz78g2eaQmUboTGDrNVmdtEqLNgAlt0zNN3bXzZMZoQfjTlRTV88bImHHQSgXJ8Yl0GTPMH175wQ+RSKzlb0eEv/XWG3/v7/xvVG55iR/hHUSwz35h+a7WyFZEZpjcHWlUV5BcicCDpXNg++T4zTdff234xjW+ExQ5wkDFoLbp73TrlHGEqqGwwDTMqT74RTlIZ1EDRpauI3qET+F9tBBdYlSHovHqXIpCVrwTovHYgtTWPjs5NX+7KLV6F07PpWuWtQCIFJk9ghntxMHG7rCM9ZOWHD0VPdOXK2PNYl3QKFgV2fIzX6P0xGxZ0gY1MRVdwhn5LNNgFWHVL2DJmGT+KSdqFjLoZytwQKQpyZac40XbCxoFpfqy+mSljBcQBACx2yGlG6gyNxAyLwJZ7xWwZCnaVuYOUR+j4NWNvDLHWF5aSVpGMuZryFRToy2ulkt0uYeILkQGM02QChvlbrmlOTKW40ClLmQTmZ0VsQiXkpMxdCM8CAJO0FkL9b08i06MG4Gf/wVPcAuHEp8QQ3U+Vu0Q4PynHvAmPcESriqiJnSn5XQPK0uN8UMp5Rawhf5ZxkgRJd6CBpNBpgtCXGik97H8rMmMZXRSZntiS0ZSu3QnasScgJJKg1fy8qLSAaXSRVpAKQOhn8lTiqvVS2IgCvxgUmJ1kOU90BCt0KO0lYrGx0gXWJGl1ZDy1kIRcp9KBdGsVCfpi/kcDAnX80Ej7+UhT4z4GdO8SJ/msx5ijS8IeMIO4Myny8pCFhTiMARyjPTl2gTSkA5XUf7Zw4Us6zJQkMmj+vzUIggZ3oVz2Fjce2qF/JRAQUJFIAkKecE0EnnWIFLfYkzxVBruyEIU/ZTRBMHgQi1QQ9zU/0MKjrr+zbELOZlggwOg9e00c7w2K1gcGyXVIMDc6KabMjorS4yydKfG5YJXfPz0sbpcX8FnEGzbkvfpybFTJ46WG+7tCd6qsdL8HAghZczY7R263PHRsS/91Bd1m0ytlJN777+fS7Dz55Xi3HfdpuAGRjiYkXl3EiBPyzDLtGqj8ypmrbjenMjCr6Mn2ftsx0Kibdu2G4O0GMZxJh6nojAHwNYFlQ7pBA1Z6Bi0AvVCmYMHDxk4EA2tDAq0W/gbc3FT7RgQsfPM6XNqBzExvhoM4Z8LMOPm7Lr3HveSGnPuGomydn6LzV4pJGPnjgHnZcNQluzo2piNxYBwtHFXroPIcW3LRDMDll3Ogzu26QsNbcLY6PD9993LPktXuXjuPI9gAB2I4kwbBgzDIGQ4PNOI2Bild6eRC0gneQ/fmnpk+8NXr115/c03PvzwrPteW52a19a2b+9+DvSOSGGFPH3mLMceasN7H5w0DZhhlDN1ub1AhtFBBe/esWm4xe1PkLQ7N7sBWrC2bdOWtpgTy6pItOyY/iKHvd09GDTr4tDpaReTuRxswkXRbig6f46F2+EZlWJoGC/UjTFDZ8oT9zNOHisWfe4YItOuNCapLO1l5S+6ts7AzuXFO+YVLXSMbO27Verbv7LUvWMrz48tpo5kkg7gJjXLUEcefDC1iHeDHX+5S5hTg7Wv/QcOuNHMvghfo2E2xCiHqiam3Tm9cGbo2nV4cm2hLioFp1rbuiZjf8T3VBM6tVWSpejSGW1MgTZMT6fiRKIuBpMxiWUHnIzhlFwKRS8VL1pKPFc12a62dmM6sKoMYCUskvrqqWWJQVhYqQV18djRD2zfBd9ckf5T595gbu/b7njZoctDMIeG0iXWtBvNlhyVCuDpMyf7t2/3ma45N79w7txoW9tLn/rkM/wtDt1zeNae+fm707cWmhZZBXLMED2PNgUDawIWHJwbs2f3XvQi44898qjmIQ0hHrpx2RoWhYwWqLYvv/yDHdsHnnzyyaoIGothYwWwYq8aCMHI7UX1qh1XEaTTeUEiqdrA+iSog/0jn376MznSqWzxrnozgF4wW5dk+6wg5qWXXuL0/9jjjx8/dRIE6QH3BFyvqL3BXJ8ll4v6aJL33X8vlN56+43+vu2WEfU7BAh7KJooy1kfS/w085NFG3vuuedQmUxIxu1EFd555x3qo5/iQdZLyoIxyqr8hlW0/KYcHFs7Grw0k/HO/wd7kAjLIeaJLHKRDI2zr39bd2//2YtX3nr7PYkNAVXypHR+NCA26TGUmmcw+hvzNVoFmYM5zwbL1Rr1CI2UMXVaWaYiJBjUVu1hAAoSO7bLCqAES3djIKk452V2eqx43juAVaW6OrZs7emU6hZ//Fu3TJcnxqe4+rEQ0HD5FcUDeTEzGXQIGTuZ9T1yJbBr5M2xnRDMtH/y1Lm33/mAIxCYungIPPX0k/07diAjg4uzCBzBNT07ZXtTjvTa3Lxv/0GqKBdPLlU7HaD01FNxZJyf0DUztCC1FQhcUJfR4eGRkWG4oKE+xFenH+Re7ulpMVAisdqY7GoHyUuXr8p4z8F7TaBRgjDgo6f7Eh5++EE1teL50iuvOKTIGofVWEqpW9SlgfP5SxfVlLwh38j41LYdVtiGbG9wqOrC0qJO6vvffW3SVW0Mkg4hpkxEIwiPFhbty6HJpZPFTQE0pMB9Xz2F8KLwSxF0i7oL2Bt1GQuJAB1AMu/1GeBFFcZfLgROdCJvt3MXsAlhUelixo0CWtN7giY7NaY8y3vRKuBTUuVBEhRSlJhoe6tZioT7qlChoupFTE0gxk8UJrc1l73kBfnUtGasNcUyPz0VKoHEgRhVPHSwO8HTD7QDsYJNdnUvClpGh0IGy2WQrtRIAnoUpcenuzG6m4YoQg1B0NvqhlNa9aYoNmNadHS3rKElFBRQf8klfKxDIIREBT3vAiNXWuHGZX4L5thFLbf+wkUtGiOrrmYotlAvczPMFdROTEVSEbUsP70ZQorLh0JSXP6U4KtQU64/xaxzJNiU9CooHlj5FCRSejHhjiP/rX5EY/0oSOeHlJ5V6a/krbO/YFDFoOjokUBX/1rhWSz4c1IqfCGX6kWbdLoNfSCm40wUNmGYGYaxYGVDDM9iMq9NSTxoJMIehX6EjtLy9S+Gir+nr7VeXmrwU9pKEC8i1xNXGApFDPH1Z6U2kn/sa3LVvBGnAiQ71bEhk6ZgyP5MXqQqvA7IioySiXaontkXIP6trSHEEONa3zgrpblnJSHZDfjyCyBApuKjdJSBhv/NqjavuE4h7nXZKRCPr6T3tQYp/azpxWA3ytd+wzve6eoFL9Lo6PT6kukE/BQkNhx4Ktp2T7zhHSR9zlLxjwkAJps2fXDsKMra3tW3w81LW7Uc5hzd3XvvvB1GF2O5MUu71qNTIWjJXow1PkXQirwRaNa2uVvRrY3m4ik8XV25ovWNN38si65YvEGQ4miAoKtVtI25yjL2WYZ94sknT585xe6mZx4fu7nc02GTk8Z7jU8KT4ZrQ9RW1adTgcOIy95D+6e0GYwMaLQ+1R+/mR2fDF2mG47VNFJQ+FREAMSAwkZp/IUP4kgP/0pYIwvkJYZnFS219lOayhQpUQ954UADYRAwxNRFZkOWglSkaA4XEce4Bj7vVnqINHxFTEXgr1ynISnVYSKgcaS5dPmCAdO/IoiO81fo3PXr137v935P6Q7oxD4EJx7UaU0Q7fU/W7f2g6O/Nek3qMHtl3/5l+kzVEM6EoPsU08//eyzn1URNjgL4H/8zT9xtIeJHzJiJfZPTM4S1zpEUQi6HNlUXFDYxWDufMUMeSRuU6PjO1XPxVqsBuruK/cQtxCpvt26ziq1VU4p/CUMtVYqxJsNrdyJ8cuIjHpcz7M+wIuxrE1ZI2F+QnboGRRUkI3MvCZGGTg50jcWTOv+mxFqnoLi/FV70yM2LW4xe/yJT/L/PvHBWwYApNaXmtRRAphrTGKdJsciyam4jwO5y3pnHJpp1W3ZLcpapV6aDqMUWGG3+0u///IP4ICSrIE4Uji+ybGkizPTGlSVz9qsyIOUvA/IEiJAXmJFYD30sAxx/JRYAE7Pj9JwVpZPZAO2q2lWthiMOKdpGkRFesAFjQJkKeGmUZAcRSAa7+KvfvkrzLa+kiglSgm+r9/+9rdlJ5CMklIqAg7S2L3Ocj3Jhe7y5QktHBMd7IpBAwMd0zOzp89cOHv23MmTZ86cG9m+rUfXo1wWDZMkld+ChjSYjStmBw4G7e7t7u0yz9O52HLBFX+Y5iEKiqj5qU9+Wut97rnnUfOP//h/VmENjGuNVTzvMIMfmWDMhVZFEXC0Vj1PUou1aKQ+AKo5aprfnPjwKLusyojnKqPLnp1b2L0nx5IiWfWeV9DXvv4zJEnGn//5v8p2a9rzzjvvoY5y9VYCJZDnkn6EUV+k5q3fe+aZT3MH/4Vf+AUZrQMQCEA0JGwD3BQCDpgnMWbjhxbY3NJEuTxwcJ9k77z7lqrZKHzl6rw5gFos2oPJ/UY/xOVxuaVxwU5658+kmyMowKqso6ycAgR/0yT6aK01rksAGpqAPMkRf2JKjIrLm/bwUTAu+pchwWeuqQ5aMUYYX/RKxqcM6xmo6qkvGWmMJiCAJo0BoELKLw0rGpAhc8WSnB3xLVvasUli1E514ph0CQTVzwmzmb62dW7r044t/jgHwLZgjnXkz1G40TvnFy3mMSO57APdcBPRnFUcs1Cu9NuGg7v27FdHXxWhC3v1x2/BAGGtxhzaf6Bv23bTANcLmzy4y8GiV1eumj5MIHVg3/3uS2ztlhE+8Qmk29HcoVExO2UFw14Ihh91UnHUtxy8oWEK6bRnUoS8RovuHisJvU45sBqom8PrbHiYyMmtuEA4LUM/+vhj8TWcnkY1vdn+vTuPH/uwr7eT+t3ftx9xHIeKLKSI3n/61FmNngOnZYpszGja3Ne1w0Fj77/7NulyQ6FFA+dYoIOgSyhDefo7SIb8axobCpMZZIewUHiFS/hYDicJq6P/AyIL1vvmT+EpFoaHnnKx2U3cnJhdcJmruUf0X2m4xCC4lTwKjkKLdBQdKPp9FqkLdnn4qSSgBGhIXEMpKDMTacRIJtT09T2lrJ6f4DWSVp8FUGY7vpY6BM/6dT2BnxWUJxTiLrWq0NP/PwKFxUpe/RRV0jCBAnG/YTYKOmkCchYdbqVhfpE+5EieUnpVE2Ndki8GaZVTw1KiR1QxlU/uoJ8Qf460rqpK0uzygpK1FnjBbAaMtoOx0InLTAmhQwzxoQCK1frKJbvIFFR0KfHeU6Wy55jS6Xc2ccCwqCMFbogVeiUkB/zKC+BVPV3DZ40vctWCaumejGqreaBU61hYUIhGeApc/vHZ05xOBujVmmT1JBSPRg8L0cX7JRFqXFVSTwvmrOjAZKqABZzuo6RShNn69ExZZDDKrWReF/j1T61+xURs1K/MwcprHuuJzW6FWq9QJqJOLQjpEkoGYrCWJUcSJQPVPHHqHiGRLl1mdPSAWi9GOvsNcScMinSk+piW9KmjG471n9woZSrlZlMvblszw2JzPsCZT8xRSVOmg3S7LJVofblww+xW9aXPKk0NUAksoUw4QFYQXKnY3JcA5I4fQpaeAsISBkxKT08emGtzZs2DW7yeTWciJKUmQNvCdUx0mMTaESv675QTP7FyqC18SgIbZGzToWmaGDD0Ug110Vv7+/RALBpzt2Z1+wbr9rYWrcxw4OndQq6LEekiBgOKoUjHdBivjZLGAZsCDZoyqm+UmLZmTjtD17IpUxenz9d5qoJz5dlf6D2uKHVbpV7alaObtzCuO9g3J+vv37tPlQ0f4F8dylnS169dVYQrZGbnKZ3OJpnxyQZIy1HZjTg2zqHImRLGI/PPwcF+49KN4RG3Uk06yGh0FE3gY6DR21cn3jC9qGio5wXO0rgiNwNT2dhgzBKv4rimOtBWIoJDTIyKGKkvnT+7e+eAwWt9HGeHEk95oHXQuwwlEtNhkOXchUuIRkCZfUyleRnYKwxOe4czeXbv2bvbwUkaC7TEz85MfPfFD63KOHyPS5YjzyG2bVs/fcPYN3Tlqi7sa1/7qkpx7iBvSrHiffb8eUe5QHubQa23z77sG8OMY8MqnqOuNm7iwGOb2AILGlf/RQs7Ox1Z0uMCnb6tnd1O48+kjuQU4mjYOQiXj1MOBOSq0LhJHjsP0UQtx8dGLznz373L12wOvpkzIWdu2f9gIYTAUu3N3Dq62jQsvVDpe8idnmDB9fMZt5BRN2ElVyj7yBnJETppeP+YlpSGusl83ETaLQGbNt5aipuNEmlIl68OOdGEru+IqHHO23ZNTE3BUO28z09P5cyfuyv0aHOAHlJt1/LtBcdLqp1iGfuwidxGeYnxNFss2C1hXXG12xZrGMIhxOnNzgjcV3HoaWuMpmyc5JPwcKfEXHQT33+33xP1PMEEynttC1VsajsiBjgie19vD+VBXs2aqPBnNn2iShGzOhPTAPftfVh60MDs7eoGR6FwY/OkomCuKnBZV5aSwXdnlXamUM56jS5I2rd/t80qQ0NXJ2emNDmtwr6CwZ2dlsz+x//xn9tGZz7gdCmo6q1M0TY3bejri8eb4QY7oWVP6JNPPpGbVnXly3dff+M1VCDi1hao4BxXTMG1HwbZb3zjG3oek2wVsNqg4eEWZc/WWzoTAR25cd10SmV8RVCNxE8NGz/UxItqSCmBusk7M5VbbMWQQF+RDJ+UVWmELuiLFnWJTe2OHT2uo/nE40/ef3+WfgTKPUM+UzEIqGk5yvUFcilX58bPTV+GpogIuLwYICXMKw9Y62nt3/ve9xTqlBvoWrbTF/DpN9l6+eWXv/nNb2I/Px+EghXI4OAoArJH0Dsh6d0nk4pnn33WdMUCgkq98MILmKRntI0B5uCjQGtL2/d/8MJrr7/Z1hWVVCQfPPhYn60ChDIC3ST6AAuefr8sOyi31gLaegoIAI5N4mHrJcHYuabhEc/kjfkwAHHd1EVGJ5FJpwG3tTZ1u1dhMY56jKcM9Nr3JOcjNtfGzVZOWpobtzR1r/Rk8NPbKnd+7s616wztGWlqUHGlSHDp0hWuOMdPnjIfcmMDP7x9u/dtG7QPqXFzS6wL7BNnz11w0uCBvftshNIDbnP38JJTAqbUyxm19xw6TAIJjO0fv/7rv66CbPCf/eyz+CoBbhJ9NgDTCRYLyGhgRMXQIiXxkEaLUhWMxuUdg4MwxGsAiZzE5ITJz+KP1QZ90sTNYeK6e2Db4p255ZXWI/c+YN773nsfGOwffPBh27KvXrmWjK1t506fsineKgGW2yH38ne+bWTWUKgbilN3TERPiVXWA19Ivif+0MDRxycowdCLn2FuCRI7lIneYuG9TgAKnKLaFDVRKunXJgDYzaS0SGGJcba4HVNfqtrauBI7cThNeDLzS1Dc6tvaJ18TWY688B4UiyLrmZyuVyxucsQG9Srm3n3wsyRYfVT4ntGJCpzgWXpGKWVBmRoPsvhaKCxKxlpWsKzg1lXYClZi9c7HDRRxg01sn0KBQ+Eq+jc935GKMfrzhKFfZoCXxqhA8hVaQ3AqpfsEOMgBVN4VHfyjLAUfZCjKaPRF5Vu40YCiURYSxvvHsJVN0quUqbVDQL0wSObAoFWYtSBP1S5H7H+ETylLMi0onKlk8YRk+cmpSxJMkSWzFfxR75qsVqTi81HGMjlcLxcQ7+Br6al5CXR3wauv3JpLqaEGEZY6pTAc5MC8XLKIcUldgv4EK9EgpGJFZ+YvksslMCeOmwjYO7zpNjKZCSm1fi0VWZe7ik/6oop5kCuhvtQnHGqN6qea8n+ZTFbphfUE3iVb/+l9/WtNpyFia2FFIghNASJLeYkAUNXrnCcF+ppaUL7T2ky545qMApRo0kgiIuN0kITQyKagskYQMoKvmvVD2XkdYJl1pEHqe2xE2WQTfZGg6KaC9JXUNa8YElV6ldWnYUX/ZlyTUtvUB8ZhIhtA+4waehXlQtRXnKLHaQ/UfRDUBSYivUhhzFIEiaxakY4UkK6mcuCJw9aL+qaTZDsDVnodu4Vro6QRlizJW0qfd8uQGx3prFQmY6vOVmKfdMhUBS/Gu0NcjS0y5HraWxQXHa+Zgq3GUhsiK9raCw05KtftKBL6XmZmWfCLYuAiS5gjjzOs9ZAK2rvHlkKGec4PrvvtQLZFms3SEptO/44s6dcOVqUAEQ+TqkL4iXqqD1XVYTuWxoAuBpXUUbIwvkzAkFd10AGSdMcYlcqtO0ZqQ4n0MjqpU+0M+pCX2HDvaWQHCkMsTDNmObdxfmTWGjhX2Q0bHJi+8dNPfUqVrXhwtxnYZmtpH7aAqUQWS0RTKHMhcyot1fYJO48vXjzPeIzOfdv7YCulSiGgGinuxKmTJFMwUzI/MoXYuXvvvgOHqIKY29vTf9+n7zMNg8KmzcXxvSn9Zg4CimS7RdgoGgdO1KC+YwXimErNzE47TZveb8nCPG16YtzkD5OkjvivNLQ1bjBfIPzWC6xFOSkn5ysXq0Elo86Cnx32IUtxmYyx6U6xD0QYi6RpEhqgfttTt6RZ2UiQk7qWnHueBZWevm20Lxr7qQ8nOSJM28c4NwdOYVy2RxMSxYlVKXJObjmlc5yYdG3Y5OSYPddjuYxILl0+YQbN4g0IWEm6CIO/6mtKIBIZ0xrL+htGaHH46+lTdd9Af1+JBEWOGGgRgq8ilQ4+ZNabG2hFetO6ybbTT7UO0uInOISH4oGV6iIZRpDP1KXMVc6OjoFTee2FHEosgbpII71c4CudhqmmDP+XHJykQVq94R6j2jQel15bHWtuarsydINNtL+v0ezQvRmEj4vH7EQWv7J8slnZ7du2bd3U2Dc5NWZqsHffTtX+4Q9eoUY7SN5J/HZj0L2U6hCbz3/+pzCVX7hqk3uUMrkv0n9dN8EATw9zTqI6w0GbhD0UVabSVKHQEyj6qg2CdSikYZt3m5zZ8ys/ek17kxGJxcuu+9Dz+mlRTxGf+cxnJidy/KjtwNzRMKC/t5+KJkZrcaUA5N18Qez4Dpq/skJb8rKrhg/f5z77WYUSiCyOdHR4wQzFmVZu7+//uZ/9WSy5PHTZnMSWHY0CU1VNm5T4hz/8oarBX8VFqhRuoQnGmCbZGC2vKovEJDC//vWvowaEAbFsYr3i1VdftbNZdTrbun/yJ3/ykcc+YSr9Z3/+7dFjx0zU16XHWKxoDUFBGkeaXD3dolxQonZkiOwSJiWqvqAI9ZJLcgMd9GJAI/WGiaqVFkguUnZ0w0q71prDWyztAaJd8tQjuixLccZYWnFSkIUyI8i5syetBPKPVKjOZXvf1sYd2/kBH3lgo4mAqgnpPWdnmdihoQuD0vStuYmZW0NLwxvPb+DX09ndxnOmraPFzQCOJNu5c7d9Cg4cPHrsQ+Pgjm392UrQ0SG7eamqqQuptK6JO8ePH/uTP/kTfGcr+qkv/oTOiqMaqZCMOx7yIrizvawMqI6V4t6ePogiji5SMrzQWrAMZcibn3Y3YBbegWC/Uo/DFNoPPPLwfa/84CWYo8b5s2elGty5WyN39ISUeg15LXdwUqurnCYndsAjuIMdqHCoDZqd96ogOABDDOJrusoV46dQPqaXweiwpjCrvEskMnZYaSUrkR4UxFVNRWKslBeOzN6sPJtswSp+X0CljhtyP7kzc+SSLKFoaYQg0NYUd2j4IosgHob1XaQSCppJAAdPBPFV1daDSLn89KyhxkhVIWuksshes1Tg3r3U9JJBkGxGG1qL/IugRLNJRTf9eIibf2oEgVA7x/1sWG505lNQZeGNR0eM8uYJWdmI6lNxqy+SgVuf67hJUILz1wvoUrmwIvqf9CsmwRKURqUKal1Ix2SMjKlTwjqSgKOYnzW+PvO18DrT8swlsqKR7iN0gGeeGjhi0CrBCsBCGfJklrse6roBzDPKZkq5Wi6sSAaFXUqgPAPRSzaqgh+VFOJkTdZ1lCJ7mza6rQKzU56UKBcIYbcYuaQhV2buIRofx6AsBSmNeMgiQVGpV1NuLNtbK8Kl0/lISOSUXgChvnwM/1KRkjbg868QoZDiI5VCKlUuuYNefQvCq6H0dmZqqlPqU+q1SpMypfNO70nq0jb59BZKFwjAlZN8WPFd8CC+CjisxbNe4pL3dKk+RPSQRpecn8GkNPDCtNKo013HTh8ilAUr/EIzJZdKkAIGuC3oH2iFZcGqvOhS0FYvJHhZp1vt3mtrlTLlFw8Ng5dPfmp3eB2IwXBDrkfVwZfjpAkdo7teUUp9mr5Rx6hrtQRSvcYdqn57dl6LlFcywyiAtbekcEDD2C09lvkKggnF1h6+0RM017Lq24E49HIGJAoZ+wurv+Gb8iSjXIZIJdozsP/QAXgePXbMYOqr4gwzV0eHKcRLy47UnCCVKm6N5eb49KWLPA5uG0Yz09q40eGhhw/ff/HCFQOTkcjmRUMP6wyf74MH77Hoqy5wNiJQ6YzIdZRfN6/CRLxpTxWJzo648SCvGLhRpFBVKb5CGIngKRIyYDJU93Q6zJTTSE4IhRJLvytuUEaQDCgagtmL+4TMzqihyEV9ZxIFVk1th+PDbmOuRe+F9har5WoqPQ/U7dv6/srPfsOpgUwWKathydyKygsBP6lGHIckc6YFXdSCvfHonXfPWs+5eu0qRxubeT/3/BfUoqtn05kLF3cM7lF3Cya9W/u9ZG2mrW1meq5hpYlibbKUPYNl8klf0OCRxagRZRA1R0eGr9+4fuWqfbznLp2ymEzjV0E9h3OeLHPZLNdhHSLX2OkaGQn0dyyHztthfWtJr5RmQtQF0p6WNTNtZhgVn25sqGniWKS/amyanp3TeLQP0zsriKgqGKUsRXBrnb/r3oPcwrmwvDIyOWOBpb1p2T1xcnBPQBabmKkfSKEIptuerb1kDATbG5gnl2eXDx665+KVq3Zq99gB0JxZHBcjUjcyNmYlAHd01BVTBbmU2cYAjQsQaXBTr+cpkITaEolTjSQeAu6IF7yosqLBEQ+sd4lrU0UIaWZm7mzv77MCQBIgLIGvtZVB3k+Sz3iN1BKQWCrNxUlG8LK43xhSEFEeDVXFwig/6c+AY66qybjhpz8ZBzhO/8KBQ/eetQd35+533/ng3vuPNG1uPX/ukrUV1wOfPHkaQrjljiYzHzxUKxg49ovUGnNHb7i7N9uVmV3Vzf0Uo8MjBw4d3NrTe+LUaUWUEyY2/Z2/8/cmxif1q5CDATwElefd6OkCX8de4p9awZq+xY5uxgMgCGV+TF/MUTw4oTIqoNpozRP9/MVzZpWjN0e4nlir8j63MPsTn/9JwnjowD0vff97f/6tb2OS4sibpphcvb333HsQG6hbhB4jVIrfGF3Q7Jbh4eyZ81YPneVE+3choaUydhJ7jnSxZgXdvb28IW+MjBjWTCXdABUleOUuOzStXQ+rOHiCj3S6PMXpBCvbqh7JB90anK5DvPQ4JDEFFHFgYjMxvsprqoMg5lGmgi7EdnLoysbNx0+f+zf/z9+6cOWqjZ2yI+b+A3utgPV1d7KuqVH0dBJWThxCwCJ+0WNUHAHFEKnUtwSSJ4Gx3L+S0ghdNIyY5Sj95ZDNDEMlsjbVcs4G1yBwBPkYc5VoONERE1fTAJ4/ApWC4HJ24uPX3tlr1lqlnMhNmjjevMlTCNPldVgddCCg1lBFK0M2L0akw7JB20f4ZbaaWMdDyCwdy0jIPYcOIrWFTo5Vpidc2lDbwQvoqf989bUf8hoirf/+v/cL6mur8mQ5xicOY5ry3TQq5A0L2tuQxWT45OnTIg3FTlyGCdZcvHRJXs1cZ2p9xr6i2wu3/upf+frrr7587IMPnGAGKAhf+cpXHHh87sKVyElTS2d3j3m2fsfJd1xn7WX61//Tr/FVdRUw42BR98MF1SQnmKLuisN9pSvOJ0SopPCCLCF00W/qS+4sKds2fJUwOtKqvmSkj+ahL9XSND1MmXXx+WLDwpIJABU4ajdnS70JnmNER1srmOmBS0gpRcPRQUlZgy9FNoo2U9CGuVARqxnhgYZwroolBqJ8rVHNm8SxBJmvRANiRFAW+KUKq2ZLmBvJQJZR8FKBRxgpY/Epb7211NTQ0v3TX/+Fr339r/zTX/3V/+6//t9/ePSd//o//weY70o1VhO1Acd5BbAGv1CsdLhBWVdbVr0MRTzEyrZdMqvG9DY4o14tt+QKWVSo6m/yihQDYWCdj1g06TIUrSqQsXiXFmcTmeU3VtvYuuTSuFy/ktajHghYcrKhyWzPjNzRoHNGTmbenuFAceSTo2Ky/qQ2ea+Ur5H1vYwmQab+LEXV5uo1xYKEA4haSLtpvsBZBwutLByuCpoC1iYrwJVQjAKb7KIwa3Kk/gp9ckurhudMBF20JFg4MznBY+SBI0dQ19LVIoNE6RHefutdNl9rg+w+/OLMf69dvnRnfnbTyt2FW9Pqjku8SkOXikPWTMr/WInQJd4TvdbfYV7ruMbi0ETw03OdRF7LNCwNKoRYo2dEodBK/MfT1zSEBh+UVX9m1c5aXFndIubZgVIlp5I0vCPtESEV8QnKXswBKDWuoJI3OkuwyjABQ+KTvUyZiZVZa5mCSQAlfU5pEekGzU5MyiTLOWdbWlL3YgetdcmPskRJS9O3a8viAayah47RrjwbuUw8rB4LVYGgBtUEpWohlBfbvaiu8Y0uc4MqFZABrchzxkdBcQV5DWbJlcjgWGUl6KxKrtrlOcFiqf/at3//PgfibW52kIZ5BWsxhYzdRA8MoAEXtvR+0Hjd5GSOgQFdaGleMeUoCNPto80Ow7GxpNwUTcs1RHpg+wzt1uNSghFOYMMia8Ja+p0lkxa2yxYYGmgoJ6bo9g5khWOTerVsNkiQ/ihqLQxUb779hh2u6qhoQwwiwEpl6VKe3nVlemNB/2yQVTX1NaiZFaiF00TkUgUp4YxiiC+L/lyyge39ZQIQGuvbKW1UGiPdufNniM/OXdljAG21S4e5yNtqbmo2CgPgstjfrJth73/8sYeVMjp83QWm5IVG1NbawqRo2+7wDVbqnEyIXBR4eWECsRj++/o+OPqeIqxy0Jp29PddG76xc89uji4OtCDZrFw8pqxXm4T09myFOfUaX4wXEEA9c8PWpnYdVtit78pZ0GUL2e352I+nJrizWmoYG7kBebJuImdktB6Qmay+QUgPkq093JmMQ3H10e8VOSfFftmVKzbWJ0TMQJBOWwuSk4aiVThtTueZ4rWismsuwDPO6aXSnWWOnQn+psXlDQtLG579/E/NL9kt41pDMrjxrotPp8cJBvpgijq2trRjjVZANvBTvJrCFIUnJ6aou5gLF+w+c/7cyROnVZ188gpGQyJBB5DdV9nQVlv1orVWvUVeRchOGGRMj1XM7VqlIhRqJkZI9OxwRg1zbO+eLJnpIw0pVo91qvpBm/UbN3BMoc7JolAQyIkQdhQXG+UWKnKMV0LWbI1m8LHCI0hJBSJvYnymP6sIxMgPUYRw8P9rPzVg7eNzX/gJw+rZc1dOnjr7e3/woyMPDE5MzT777Ge/8+JLPMhVmzK5tZd79CjNy6VaUEGCSHwZ7/mo6WjqmA06w6dJgt0eupuJ8VHFXDh/keb09DOfBdOdzgy91NzRm+PgUHYwxkYO1OFIlc15DZvYhq0DuCvEuhIvI/Uk1uSbnRhwPQKMCL3Iq5euAkXGpriCLDf0sDC0dRCJG9duPPf8c7o+Hm5mpAcOHfiD3/sDOr0j+iu3UFC5FA+Mp1+iEQSKjm5SmMmAADtPs0YnyfB9tJP90L33RBvmibJhYzxanC/jZiJ7wN1v17DBRgiaKgrATatWkOaESohDMqwq1KknNqC+Ho1wwIFDFFlUC957fqq45geZCKstNWXbg5Ti33v33UMH9jzw0COd3dtvzt7+9d/87TfeeY9mzTOTu31/X7ft1oYY44tBkrKGSrCq/TgIwvq76RPqVTmGHk6hgAT0Dk0rTS3PVS0wL2me/kSRqqphfpb+rgBOu4Uwqvrpf6OYdzER2Gwny0gmxiRBQWiCAp6Wv/yk+aCM1pgL/qamrFUCouK2N2f2oXmXn20tjnPeqmvGMsHSjRmpT6oCE+PH7j0Du3b2NTWzcUVtVShSWKrifM8bzbEJQ0NXZudumRXo8ixekbS783ffffs9gBifrH2rpkkZymg/9mppGghCbFyhgRcWk5hjMPfy+TN79+xcmJ2YnBi5/55D586eUpVnn30WT5mBB3bsshPgyJEHT54+OzEzY3Zx/+FDG1fuvPmjH77x6itdrVtmJsYcHopRsRjS84qXOc1TTYtMhm7wrxKIPuRQjJRihJCxGhJcs9rinJaM0PpZ/aFlcRomM6s+ZH4+TtpbWjspIpNTM/OLy7qUeHArNZ1osRQzKlR9okwdglJhtCfCFg4Dnql+ZeU6Vn76WlEqyfKQBbJeJBNUolaEbOjoSlvPUKrPlAQe6kGiaolyrb94xwLABbkqBbzTgXILzMpGJw/f3dy+uLH1Z//q3/jM85/7t7/5m//w7/wnp0588L/9+39bj7+8NI8Ydl6lKoaCopYBUuBFfRciG6VEX6Pk8UWKSobIsIio12clQqlX9J71eC+CeLk85fSUYBXbcqATmBXy2jPZSWaSrXX94RAVl51tU2P4xnrmEjJDQYYH2r/xr9h7C+q1RMRUnHdPxRYKe8+omRyZNq4G+MqnOEGUp59eoCpXzYgdNQas8KtorqYBGbojDEVA10rPYEWxVXQ+b2a2MUZvaWlvbmuPA3GRBzxlrdTFPfrIw9Q+m4rw2PBB+Xzxhe+qupZr0q496kQvnz/b0rzpjr2AS7c5ips0Aq+0quwqrUwSzTSWuRqXd99RzP9ZxxGgrdy/GKrcrsaprLe1px4lE871mPUX4hFyllBZWSpdDuaqqkyZiCqx5A7xzQdKMw1BhIJO9uwW8oYjetBCQESMOi5+PWT7dQEVOnIrKfpu/QqUovXPEnghUewl2gB1xu+sAdWeOdmDHjtL7V1pNWoBCPphK8sl+tmwlCbmtCHuOo5PT+uLDABrXPauNzPcgKBGJgDuVLcwDR+QJTMMSeOrjIJIGY0XEsvFS31zUybn8ONGYkzEcSujWvuObQM2QXFiGWHgGR3jim1OmO5aH9sQA6Re0YqCTls1DbsWBMgM/ZjpLTx2gXVM6Qt208tP2VUowzrEDBBwMFgYUuk3NASjsK9Wg3mLmo7enIhR1pBKwinsetT5ufggDQzkkA+nO/R0d99/5IiDWX78xuu04T179xpTqHcqBTGQK9mNyMbHwC/eF6AhCOcQo3+uwipnkzjsDjKqENWYTXx+1U8DHEZ0R3G4n8BaDlDUcSlRW8+mcyW/BkD4jI4Nw81o6Mij0w6sW2qgb+gdmfmdbmId9zPPPPPE44+gJE4uUWXuLDKqOg4IVpkU5aSatHlH+CsF8pevXDGYKosIOdymFLcha/Hu6+B8Y6dmTy+y445asA+hs2B0A1BvJiPqAYi8OiMb9tDQjTojbPw3cpewmx/mihVNSzfeEGAqR47kN3joV7kIln6PlFVJ8wthfco8tobSbLyqeK5F0cvphBvLFHe1qWYcqfLvKa+Ugj8Gy7zVlbH0bRFltTDtu7Ww2Njc9sgTT6HholnzhkY3kW3ecLcpxxuWllKMaxhHWFS2UganrImpLP5qPi3NrRzP2B2s1ZhqvvfBMe/oqZVpC6iklXFnEixMWR9bvJu1mrVqgZExD4K1vccoWZq24rCDhPAfcvMdbmopatHSZoGIH29cpHLaCjNT4yaccswuQycg2xyQVcZiEGjCBDJ0yHyAYWsFSho6A//582cd0oqPczPzmg/0tG4io3RqufYlxiQlOsxt/vb91BtASF3jP/nv/vGlK1f+6Jt/cm3EvuyFWwt3/+W//u//1a//pruwEFkKxTcvpzswvVPTXYM72mKCzVjlH8rC0pTRiwbmSfHld+G7AtxtZVPm4PZtfkJF9vbONq2RPxE9SUYTMfYGOh4GzNgrNDPT1WYLkYtjYxqnbSvVXFb2Kk/0bXuUrw9fE68mpLOns1cnqWIEGkeZ3p31Rb6PPPiAPpOzPYKqLb7c/8CRPfv22vJs4mtWJAACSR0BEZdlyinEN20X6dMdEAtM1bviBCpbyvBT0Xbo+ko49BeainaFeSDSHdVGGuTCKu9UVS+qT3qghx/Sm8CI1OzVF1gtVhYdn3arPzVD0NPZP+7Tz/zMz6w3RVmIjlxu6r5w7hwxbe++ubixeW7BNtkNqMkpTRPSWcSWSBrTv0SvyR8vJVS5qU8RdWaChuFvsfdUOaP31eQ1119+ZkNwGX/WPqTA2jLpXEorrTq6S2m0UCV56igoWtB/4aZ5gWvK5px6nBEuY5L74dtam/u29oY+s8XBbnLSdi47HBzPaABjbtP1Vyrp8vALZPfNmcviCIrdmrtz4tS5V179gSu6mP9NFA+4etr10g1Ovac1NnT09O5taV6cX6Cs6wIg6BDSF//k26ZsEkNY52Uix8vZebo4ZXXPQhYhMYCArzmpBQuXcVfp3/nOdx596PDP/Mxfef/tN0jrfffeY0gzzSFjmoAFD7Q1EBpQ9x88BOHJm6Nx/tm8yWY1k0VG0XRi6dOQLTYQ5yigAzlRCgIpV/BOVKQjDDDEo/WQnmVDw/zybcaklTvxedcDW6Qlk8Z+azxuZ6I40f5dCLdgt7BecpOFuJwIQXdJ4JaMOoXhDjEDGUZw8JKyimmCXcHso/KxshJW0KvIpAIFK09B3vpJ/PqnAtBxollikkad9MblXelFxyx5PWqW+ktZvtYAU5+8xxvbS9L5v9CuZJOg5NL6Cv6xKLk4POpX6Z9NTbUKhcIwIicxaIGQQmG1CrGCKWgmb/m6+sRZGYVMtdbyyri6klBYBg3VX0MmGctYCND6JKcMhFxeim5Xa6d8/0WvFRkX441LjQEiQIunKNUXytSMioBU3uHjKySLXlrIUapDU1RqqZSyoCqNoZTGLzmAwV0MadLu/DAhL3jGSSVGA6XyFSry5ikURIK/0pGMNkMBNVWNCovOcuuDyHCWCVOyn8qteT3REcmhkOzBJCF9RmitSD4tDLIq7ezhCM/87G0DWAo1GAZbtWUdoqYEKyxPGYU38hcWFfT/Fw8Zk7JWOJb7j1IU4vi5KgD1pdAndCtfPeHgZ9T0mjelFwp/BBb+ruxw0loNPmNZJDT/wtSiA8mv6vTDdQzEhBCRwWj/njo93QUA3o0d608v6CahT1lTK6JnRBOk1RJlJHGScdeukeAgoNOtaguyd1p8GWnj8Q9aSFuk1JgisXGQVireV/Jir1fGcrxRA0HBUtOALWLQNVhGjbLlnBPROlIgKOise3pUA5ku2mkQit4xOGDAcvKyGELdmRu+uFDHNQ7NxkYz+JJATyuxDFD6W+sDtP+Qt4F7zIIx0QEl14Z4ONxBq7Iy30VtOnvmxrnz562cKJqGSoXi5bx9YIemP2VW0OAE0TCbU4PaqQFdojHm+9tnzp1GtIHBnAHqzEOnwNmvZ7lAPVGAfqaukkHb4CgNQnlXXUgWkjTwW7/XfTXN0a4cOqnjNR6NT9w0YGG9WvM+N6abaEEganHjJgdhOI/RwI3f9Zx7fak0dGyQ+cEgI12CkuBozLHJidGJ6e1u3erpxhcetqyOCKugze0MNSwDC7bSji+NsVdQGUmGnMrVOm6M3kBeP0EDM37b9lLvGKTJcHThPmCU7OjqcYO9JRFjikrN05jLAG10A8S7SBLFR4vKRJVyEdeHR4/l8M6paTc0LzIp3bWeb1suO7qhxHQ6q5VFQClkxoU75cZ0tc9ud8aoImzomv5H7MdVB6KtjTS36B7KWkGZRyVJCaqQXjGdSX7XeONTsyLlNItPTx7beTGcuSMvl92Y+SrRkZXmFRsbm7NEt3GFooF96GCVQ02BUkfLZQTVuzvxVlaoBDmih1lydjK3N7DFkAdO7+THehh5aGnLznVruUApUpuydm2V34kvpWLBUuJ81SNqYuXYYgQQb3rsqQvUghwiv6UlDVxDa3APT3FYRQjAU0px9YGe9HihFEICSaECRxaiQlxtu8VoTRHm8spSpLSREdkSB7WH8xiG6lfEkz2Cqn3RYRRobmk0lIUG3fhLf/s/4dTEvP13/sE//M3f/J233v7gd37rt4GmG9tILhEab9m8BaM552ixlp4FiCKleqqwyhJWJ7JDS7PxFUrKFozDuhXSpiY6Aq1LAk62HY2ZnqqbbSkYyrcqFBFsIeI83+SMUm07KrITBZaXu6FBCDUb8x5AdEvgiARz5HrMA2+//TbSWFmmmitRm6HSKSLS39Oj8t5pikpggoaYxNq2eLoavQ0Elmc/RV5yV2vZvg1nY4Sn1us6ApEqa87NWdClBJoTIuAZJBXnCRlfdW8aj+rUWRfqi1e6lOjghSGfRRlWrB2qIOg3QQZfJJOGvVD4rVNjM6jUg7AXAO0ktlbuXPnZ2xumbi+DSWqdfL8uH+Ck8y4NpkoMxdJX8uT58RdCI0Dbp5rSM1X+eButef7fPkt5pY0W3XG9CBWvhRaYHyFg2umTWqMGoSVC3uUy+ZESSnjU1t7KDjW4c8DQNjfrEOI5Zy+QLqwv6KWJWdx0pzMnfl05RqDe7l17Bwb7e/v6y962phvDY9aQzKPtKnEDtCutZm65YGHYpNEN8M0tPeYfQ1duKNOctn9rD8urXc5uvqV5ZAxcWW4r+zKNQ3dvu8nCRWezi3dWOrv7jWffeeGHn/rUk0cOH3zlle8P9G91qJLFaLc1mruavo/dHedNdOnShYlJpwu3G/Do+2+8+mOyZ43L0p6enBJX9gAXPcM5aJspt/EmqdRAVRxHDYIqoKR4T+TCSZ0MWgmSudVALxs/Fqociyy1hRdGFmoQs9kZjC5OZnrQnI28VBrdbHQT5zICVKyVVTQqs6KzRGtURNQ1fPFSeUQ8oEQUK4v9XM1SpMtPwSeJPbwI8kbFK8H44lMq8xfFtfrG1OzrTznWC/KuIGG17mgZ3eojifKJRJVCoh8pMidOGlVWmCdysxWMqlpeXki7wUK/tGoqlwUlZQ+uTs1dm9sUgOl2wfcEwYvIWoQXP4X1nzV9qWPlUY3IU5q1HyuLy4tQEyNUDoZIhchiaq0roVQKwVhmYRSl294By9oZbBMq2AyiJVRkvEYbD56SrLJSOSphbEbCkjYMyrCdEXSViQVkYMKkZM8IF14Fh0SAIBeqR5bTCMOEmlKu9Zf6Xn9ShQ3fWAImJlScJQhm6aQSlKLKLp6nBjvEQ8Ym282cKFCCmWYVzgIhOMoS4Kt1zPs6ZQu8v/xYK3S1OD9Tm7AxYf3NS5GutQ9rX9G/ysZ6gnUcvNQgrRcJqowVbUhMKCneU6hpaomr2db+gO/VJ3Twronpkz0NBGtJ8lcCAZL6Adb0CGrumY7YS6zP9FIhgIdplbAy6nw0Qa1MF2FDfBUtTyOdNDph/SpGO3chw2t2Z2ZjgBhpvAiAqJ2nonWG9A8Dt+wSsOgzHMh4//0PGIwgICO9yqgksTQwNKgJKsXwx2lk2MWOnR3gVHu/xXwnASpEQTZeyaWjUBy7e3bTXbvqknUavF5ufGJq0wYbPZf6t+1QnwvnznNTP3x4372HD9PFR0ZH7fN0rM3Jsxdc0mzcB0TtBOO8UZ5Zl0xRG2BCnzZHMmozMjq1xhqB0uEP2zrK6HhlUZ2CT6xFlQXxzjdqLS7wI+CqoAjMpd51drQ7zh983Q74lVYmrjj52MNPLt/NLgIAo5C0NHd25x4xZdEEGPvRk/rEZ9URedYWTIcYIa9cvYyyTsCfnm069uEJ+pjFEYeRsOY2t3Voi+OTM2GlQ8w2twyNjp87d2F80vFKnSBDu6mlbfc+ewB6c9RPORNFRZDCaoyFAp08t3J2ZvjDmTMeTlHbaC92GzJZQqbSgWOP9SMKsUDgVBZKzn7koZKOKG1J76SH0NLd2V4NQ0mGAiSh7IzTytIcBE9/faoJ/BUTW0LpD8ESJKsvf+mZ/HonbofOyNboSXWZwCtb+XcZI8rSp1yAw8ltdQ4WlMUZoNbC8Nc7InAxQHnJUIlBn+ZQ5ZxgiCTYvsKcGZ+IokkKLZMHEyZAvEfI7+S22ZnFnCNkM6T6iPS1JlArL5qGvIAD6xlMkmajxqIlppmUNiveO7Dae9VpJatZYILst3mF0XKZ98fGzMFESoyG2YkRV/4Wvgx0UXwvozMlP10IBOQldWXbDk17jslSXjGgKqvMdmIAavzyl7985szZXXv2/bvf/wP0eOihB98/+uHySiPHlptjueQZiza2xk9aeTaV29ECKCxZuBWjGtQ5kvy5z38WdLgCTe5hbAZ55XJDV2e2EP31X/wP/vzPX3Cu5fmz57b2bZdyYEdO/8yC1p0FFSpUX9KScRbdyZ9txGYqtlwikP6LVq0fcWMIgab3wgcQFaDx2+9CQedIU9kAAdo/9Rp6YpAYqsjnBW2MpKy8pl+4j2rWDfh+cObJGVUL/p+3EEOmOH7Q5BzUCHnTLXnVSB+hwWAn4VA7vISMTwpCX/q6OcauXYPaOZyrSCGaT3oQRcMBblBSETNy1dTYQFA1XYBPeAaIQ5Pk4uaoL1AiKoFQhYP9eKE5B7iMTU5PTs/LpfvgWdne2uJ4t9q0tEwSV1rbaksDzSd4CusvMPSzsrUm8EnQq5SE/789at6P5xEDrJjaBrzXn54KRQ3E1zoIJRuWNK4yXJX4eNctSCNQdJ1SxdYJW8RBdrJrhYeYOQiIkMzMOLLzppbMk9JhTgrdPhBXTq2CYPR0d/FBePe94w6cQEDxDtXat+fwzl2DWtH77773/gcnnv3kE1u723NBVnMUblNBva12hRFW+3QZlHW9nk8QdtHxu+8ftx/m61/7imvOTp048cD991w4f2ZwoP/0iZMPPHi/nnH0xnUzWJV30v/szCznB0PCiTMn3cnSHqOB0OJaE1VaNcMjEZUmnSjfjwYLFMRJkK4+vVTSoRIS6Zz0YHQzjYbNv7Fc9M3FgMuVmUKhoe8OWdPBLt1eXNa1886IEsi0vOSegYzoBidPPS8GVY/M+KHofKPd/YXg0OrCo1govaxjFXauqU31vWSTPZ1dgJegb1x7jQSWLNFCUtKK82HUZ3VIwJH1IIv3ml4WPz0DtlCqAqyl1GTEYz1SvDqVn2V9soWdwrJDOhjPlJyiLXBHeVIIIpeXVS2tAlyHtl614LwmzDWNnwKxlLi+A1UyFpW5RK1/qgnUAPsKhVQqKqMhQa4K8ONFV6ys5VktyfBa0MbfUtNgslbWatEVPkt3pZNO2/hYFmYNupkNscXEVBYPFeqPLftmFSzsseDI61mrXJ9ivFQcytwkJZbIcBBETAsR18LHcgH1Eccr8JJxlfs1x3pZq5+iIiT4qcczAdA3kjQipwFmNDaiN0VfkSAcKejk5f/TBGC9uPqiWmloRXWoMSD8pRc4F8B5+FTeV2cvFcMauV61+pN4VEjIKZmvNaxnqcRch7wOfGYm2qfuRZdYExcpjfLtpwBOxdAzmDWSAZsyc6KLQuXSvXjmRL/iWikjogFizQHd0heFrunYYejdhIvEGVN0MBI63EDjoE/YZCedBRkameyKUnRFAExdLqbQy6k+4hUh0AQOHNxr8HUDpuFY/6ybtXYvF/O9Shnm6jio33aDrJPQGu6ygs1YT2WUMUxTyDUEC/u6crgpdHx8rtgf7x4+fM8Xv/iTMGEb4qLaPzA4Pjr+J3/2LZo3R/YnnnyKkbuvp9eWZbZzFt9tDOd929q7t1KgDYtGW505rAhRNO+2nL2DROInN03r3qFnALVoYPiBpILof6qJsIKUyKuOaOIFJQVaJyKY64mhhcsFJlDQQ5NrV4ds/1te6RDT39rja0db863pSZZWRKNIoAadwfkQyMgIePHyJYoTEQ7jKCOtXc2tLVhkMeTwfbzk7nWllzP3IGNj7t4DB1iEzAko5c5Yd8g6amvRrN0GL8PFPfc9RHOwhZrtiXVD7aAEMpxhm5Of6DzpS9HYTRauub1ja9zlq1dMpWwIZu3lyOC8iltzs2xJBgu9hp6Rxd1MxBZe0EhiUfvp26Q9W8UxLmSJRXxDkGiMtbcqwwotXaZPRC6ChJIxINSX/BADmYwiHolY/Z04Ipc/JYiXS4gPnEcZLh0V6mNGvPSPfJw0k4hluoSVLKTnVjI+V1Pj1inlhaevnmiivehbBPGaDxVL3YhKtHBnDsYnOY1IYvGS1eYJmiolvkx1avUyOYzlKCEUgmCpCH3SOwxr+mCfipfDVe9kXgGmr4BXlAgG0aLEAiulZ/BzR9bUZIVMPg0DsNVDKvTIkfvhiezgazsmb6DpDOZmZqUxjSe2JJArhI25+nxprFGJBFxNq0aqlMbPfvaz//F//L8+e/7ir/7T/+H8xSHe1DOzHFUdzdY0PzfvDADlFsY4ST0qFElwnlUwK0fxVOQUSZelyGo/8OPQrlZerBNxCeYp9Tu/8ztWCb///e//0i/97WMfnrRpiC+N+a41FA2jraW1uFIZtciB4jZQ8QFRt5HRG1byXLfmABz7fokXQojXViGgzurjqStxEqgGb+NstbI/+uijCAQlT8YGVZAepyFGILhNcv7jPgmBLneSb+2ZnZ4xnyteD25LuuurJ4bJKBd5Ata70iGshev11DrsX7udwSoE4/3TTz+lndM+JUNoT8lAkBGeMJfeBIByX/h720QF2pDEDN0Bw/9T5b7kF1980d4dMRC2smGWgvhsALY4cJ/vtxTWuggO+CYApOfWVCxGkT/to4T6swx4NeIvPIHFO2kERa9n+QuJ/r/4oVJSAbL+rC9Vvn0VwK8vniajVWY85ZPMAqYEelIoUZcRCpfxl1cUbg/l4gy+d9ll39PVsbWna9/uPRIYFTastOjcvMeut8QTKtbSK1dun7t46a133yP9/b25CQ+znE7NQWjDpi3WsSanLl26bMO6Hes7v/ilbyzNjd+anR8dm7RsJQtELcTofM21ENNKNBo5g8g0VeO8fmPUWsQD99+nQ+vv7ZltinWcBevypXOYvnNgkIw5VtmmEtu1LfZNjk+1dXPJafrut/+8v69n+Nrl/q7OidEbnBIjhya7lhoK+Yv+7yj+OySBalYosbqwU1i0wb0lEsbdsuiy0YoohXcydvL90vmYLenwHXa0vKWBqT8mG83EdNZZCnrxzVv0knpsCOsM9VjpS0sos4AGhy+LKCpGHfgzVGClZf/CqdUNHriDLOvMBa2Gyt+0l7JLpIgg6DplxSkomgckPWuFi1QkFYAVjY8/S7nxQ/14ZMBle4sdExZ8YZFD9pHLLBEONaX+IO9J5S8A8FGKHtpOidxxiuwVYVQkuWhoZmCskb2glHX88m50ikhX6fbJXsaaAAC0CDKFgADWdz+lD8YQK/iU7IUS+ZAAMRQAM/8Ax0HYZApU8aeO56VCpoGrHMtRVTgK5nXArHQrc56PdPfQNpKwwVoSTFXHovtGtU18ri62ao4i4UiZSNARQwlgDcpkYK3ciql0oYlldfojcGsBXbMjTbBbqNYtyQrOfkLdvDQLMKujYTlytRARBMVJKW/JkRdBfK2V9wLHKYEGthi09JD6AUYo3WZZwVBCIXKSSpwGRB0MlP+/Q0UMmPWXArLW3Wuta56lBkRqlRfwL2inSSUvAqyFAmH1oQqBUkKNSuJykr1nFR70kaymNGTUZPW5npG5nz+j+Zv5nTbs6WxmXNR3oXrpOZzXx66dwLym8erZDL6lIZNuOxFZNpjqtbu0EDImiMcfjbHZPT8c2xrts4ffiltacYFqYiSFmEEQ2kbDpsYtuVqlrc3JM7wM7ATV9enD/WRYo8GzSUkPE5uC6VVUbYo4mm3r67Fix0zmrjAXtnBUoJEb0hn+mfyNd6YE1X6HArjPSL5n334K7Xe+9113mBy+7/79+/YxSdseyFPazVnnL16w62nn7l0GmbfeftfJ4mKMvHqGosIttbTye+8xlOR406UVFUQTam712jWGaglagaqhv5HUU9HqixoU99X6lokWlUYnb8LFH8lV4qqPFGhKYwYHBS8v3W3d0tze1uxA3KErF9xUtmF5YXDA/fbbap8Ze//EFOAnT59BVYoa9R2qTbqGcmiURQmJ8QU9KZoHDt2jIfCouHD5GjOWsw2wFbbItdVA1dc3uPvgjgH72TpVygKFp4GLMIDAZXz2luMjLZtH8LCD38fo9cvjN0fNVQysLm8dt+/VXV8xgBofG9inDFc0fmJsplE652InjnRboTNs8VOPJQhM463N5bpZI7nOyhJzWkVD5FxAt9ojUlNVsGYRj7ye8EkbdsGFUwTrkPGxppH8ay0RnAIqUmoCoH+TkCmMYiOkk+S56AygxiZ2Db5pClLTUDtmjmVr8qzo+hDZaRGeCEik0akseyw2NzuvzywxlVIQrxxFI6OfEoMz6yikhgb7BoElkLIrD1OwnvaYmXXBvDZeT8iJMLTIC8I68oBADdOtAPhUfkbAJKYimhDWhoa5stSvSrTeAhkMVZxdLrQg70qHiWQm+VRuoluVUhri3Y5s4DHg4ZSM8DApNVeU0Z6TtNz0q/bTtleZz85XPi32OjhsfnbepK7h7LlharkryTj4cPdHu8o/lzUZsRQmZ5VCqBNl7IgoNxVH/G3bkKAqvgrTVPp6u9jOmVDdV/38575gjen0aRdd/fiTTz2t/TDGO0yRNsbcjihpfum1MrfjrhSw/y/q/vxJ0+y6D/xqycrKzMqt9r2qdzS6sQMkQRAkwWWGlERxJFoRE2FbIYVj/or5A2zH/KoIhyXbEf5BMZZsy+KMQhIpkBwCoACQBLF3o9F7175nVWZlZmVWZZU/33Pe96ns6gZISgpbupX1vPe5z7nnnnvuueeeu9/O0ij2dCZDiGk5Gg1r8Igu2z+/yDITzJLWB4DTqZoMcTf58ctaU4tNxuxl5FOf/Yxy4JGWVEQ0cFFVMTjxVNV2BsH65saV66Zdrn/2U59Ohc+dJllexqDEQX5dLmXAtaaWWRMRrEDcQI+0WqEw9FHVvJachHDDEyqlJeP8yol9D4YQqPZogPa3fuu3FE3LHFkkKNTo1SuXPvr8s4u77R+aOThln0gmDZbuLOuNz+/LzGM7CWEOIfKKnvhLpHgGPw60dALmieAyGcbC15B/lWen5Vlp5SmWV66jC5HBAZUa4ZPkKsUQhhJPr55Zppbre3NwtbzLuO4NbjiC8+ZNt/j1YvTsG372ubMKQktIAnFb+WaqquaFpqzdyXb7jTfffNsNdgqac1kJCdFE+QQ/JetybDtwnn/62OyMLcJ3HWe2tGIaOQO6V2/ctCvf8iGLAU1FUcR2yl28cPn6zZu/8qXfsHjtTo6o2v/Siy9eta/4wntO+HHSv2aPYJgDcosmv3OLHIfiCnf3AFy+dHGvzsqDLOBDtnYazx2KqntsTJKZZhiDJYYLGFW88QjP6NBBiSCMX/QGUFg89xn6OYrDBbmYqWHQoOxh7T10NWvOY6MbcdUpNBOScJbTI8ucqoA6AWVhQWeVSJVarTMZCosnewnKKURRulj7iR6BycjjAgUBfcCUp2e2bKEgGpV9lB9l1/Q3NtkBJaF+rYjJOcH2hLxd5x2JAgm1wOErjxyATXLSZRACy90I8Tj7VMPRdG4nuNmIh6LAkIhxow5JpTKS5P5KLBuyXz1BQ8jDdfTB43X41IEBintY/MKf0Mh5pkeRnIZdPJ3T8AvHggdMAzw2xUEpF7GZDVjRwIHfbfdAEKWdzkxRBok5mOV34KRXiPtpWCLzKjUylNBxjnAGfGsJHp9GqICiVhlU6WRQNG0cOd7qtk6769VfFv5X56FwVmrjR4Uk++06CxSBVzPClaHH0181D5dRLl8bAY8okHDFxUbzvifI4R1Y+1GeKNXbEQKmP233DEnUp+ilghwha0yeuN2QHbeLAFVMcyGNvOP0K372K7TA2vFrzn3qrwK7rvVXSfenEeeT3o7NGo8DQIkpHThrGjWDJgodRDfNclmlwOyz7sWo4egeIgASRe11wxBlhUiCbFgQAZtwMqPY4QdGhWJ7WxhUMc0ZM7eqPOXsNUsr6/wGZMiINSfdYNHYGiwtoO2JNJ5X2CRnxC9LeednTp9hSMf6t5S4L7vVDmpbX3jhOWSAZ0LQyZJwzvpXvvZ1bR/V/fFPf+bmjaXX3ngHzl/+5V9pSj768icZ8ADefvsdDagCFhHlJfCPEM/xs6AQabq0m/JmrGWf754/311h1MqdlkLS8MuvBqDtLUnLHcKcvcP8tY/5zo3V248eAd55dIdz+Wgb+xepmmxuvG8sZte+2enNzbl763f16MWlPWSwpyZ0AOD3alhLtyJbPx/EWAQjiVNnTisjJZ42a28mhZy3w2Y4fPCAr/sPHdNunTx2Euc5l3Yt3V5x1pwoNgk2h0uKwkOSsLYSNjraHgatpLGnOzeu6EUoVgXUUmfkaHHf9OLJ48oO32TcgIFazQDTIzDGxJbV/bb6vxRqFAe7EnLaRz9EKSAMnUW2BkjuW9Kj06KjxrWvQ5HHU4H52oHiDq6/dizPwYmodcr0t2pgEiZImOpR7gZ3EO9oRMQ3fpJjZgXk3Oz0rvlZ/Aw3rNupTdjAiAGpUMQIVhzkR0J4jl0I0J9wMKjGAYy4QsAAMMACvo61S2sIZ3Zx8I1d4hbF7AcF6jXURgHH1FQndHeNWkCCb2Sgk0OtVeqzs5Y0z2EmZHAQG0R+9tOfQjZIlBAquZMFImq9HA1gJk2tEQVCaYUeK8mypkavK5MbhvhhE0sVlyK0Cl0q7Y8Osf6HxfyJT32G6f87v/M77527dOrk5dW1Bw4A1fnQmFjiJm3zY4z1GLVb66JBBK/0KgOpCRghpKXBtAa/IqFNnBFrPbfOpIF2wwCnTp0xNm+uShbRLWOK0V5pbbg+6IadYDrDj7boj7vLtv/qxGb/JfnatWfyyMFD0lVm6CHfd7eyZLDnPljSsGENSgyiE3fL9BmRhN5wAjpTW+rQAyWtP0gCmhcKRriaj2DCmNIiVpKrnGCrkWazqGgAowhxQKfCExPoO7N1UmGD0jKStvLERh+U8EOASBjk2hi/bgBI4Z7wSBRVIFECRgnpNoA3OdgyR5chBkBI0gHdv1++WLav/fD7RsN2TMzuNrZcC2m0+ogxrNKQgDn+vMrkuPq1Z3iVYsMErBrUcKA6A4XgyUeDPRk6qskfDI4hJXR7ou3XCnS6ndwQE7uIplg692jLAsqc1zFpzzbZPXSYjlvMKM5GFiTef3DvypVVUZTLkSMHTBbzK9kr1268d/5C3QR5W8jMXAZ77m3cu3XOeaD7r9247iwE/S4K3Sk9785cQMs3vrn5zNOnlOOsPqhLEOsgzrX7Dzdur1jB6iqTd955S5VWcMdOnXn5k5+1fc1AiJJ6/fXrd27eqEMwdth2YxjXHgMT62rXhXMX1Xk3Eyvsqxcv/Nt/9T/vn3Mv2Hs6CS7XO3380L3N9YzepZXWAWAQaMmNrqTUDK9oozNV2sqx/BjZG5LCmbTN/icSeDt+Ma3Yon9RprBzNnToHu10oSIr0chvpgrup12nkiwF38VWK8kQPVIviYz055n/EZ6RhUo0yo7MSgyiWEln66GSwlivnlxFSe8xEaPteDMyVGJY9pDNuGUA1Zr8USIaAuJGhpEBtOWBv19hENgysz0kcQqmx43Dw9oDUNFzoRRPbGbcC9ZYio1ceN7HDisCWdGFQVIYOhdptDrR/uSJAwK5Ib8dRQgP156G71f+fh2eFRB+16TI9q85IbTYEFIowAzxRkWZeYjWjutB76IUiIGvxLAZ1wPLUaFflLn5yEAtEFebqhwyI+BQFT1b/KyCH+cOjwzbNfqkUHxoInFjYEjzsMMLOFEEWoGMH20vMhrwV9E0mGemN5rokbyOGn4RB9dJD1G8hlhCWdvEMyRpd8BkRl608wRPKXBZw50SLp7X8OEYw9j0KHGCrWW7BS6vJVHU4hj+8S+6w8jSgR0a2qr7LTiYRi3DqO8hC0PkQJZLgZRrPLwdDpLY8PN4bs++NquB1S+fgHltzApPZru6QVVxDcFm8YBa4wllUmOu7NnD5AYgLv3p1WCw5Yj6BrQlu8HYIQchRYGLxiCZ4J0WAPSIUmrEikeiHj0sXPvLiaWyUGuenWshTZUnA8CWKitPJMxS0dKJyENPyg6/+QOUau9E1zs/cmje6k1LZQ2v2LB66ZLTL3L+GwXL/rxxI0NjLCRx3czq1I2bS3fnnHl37IQsaxzpmGeff8Gw2q2bS6/+KNcWQaubYUEBXml/jaBbCl/1PptCq91P5m/dvI0GLGI82XPbeTeiju3yDkBrrpGFDR5ks6sYFaHZWGRlXDjunTlx3LLslNqjBwcPLD519jSzhC5kph9YnF9bWWReO25u494+1dDQoTORmF4YIo+MBANDzmVHw8L+A9blKDzXMe87YHdudgAao8VSt4BRrHdX7bzNgBHCPvO5zz73zLPoB6Mv56QaRa1orl6/Yb7lASs0sz339bnv3F22p/HalUtoMO9y9fJFLNKJQ7mtC3YVb63fm1StJsuQLXNQXG31xsqyXDQ3PNWG7PfdejjhoDwCweYYK2SVGnv15UhktwC0kaD0Y5xKF5mMFLbEVh8gYtninXZt7Kq10UJl7/vg4GmngQPIHxVCp5njz1wfwUvt6KERcpLbNIw07d6yn9riHVEkBBvCLINWym7CJRCMaUpjxSmnazn91okjWnAzWM5hF2Vm+sH8XArX3NqWhSH6GDi5YtfstK+whSEmkR2k4ywl5mjG152YC/w+bJo6r8A6dRM60t2wmNyw3MMUkwFEXxmNdu6Sc93FRgsMNnWKh5nKMuR86krH+ieW7Fv5lTQw4Ywca23UMlc+Gxa3HF7FRB4CiArpIiT2JVtJYSzVes89DzOBY5pFlwa1942k1jm2VihkYtAI6L/5178H6Z9967uf/MSnjXe+e+6S7P/c57/45utv03A5lNPUSVbOPIT62tpdLaT6ID0yTXR4VBxLAF2/5pIj0oYgTPGJlBNTq1Zk8q233/nEJz4lGyTYbh71Z//+A8CqqOyz3uMCOWSYLjywkJ4ueaY6lATWYKKaI6HutPEoPJ+auYxq84YwQ8UjLVrgN37jNwDAw7mXQDiqUgb31uViLctLspqccY9lhu19hby5LL+SUBK4v+uF57VrVi6qVOClywr/hV/4BfrOSUfy+wd/8AfqJych3QBawKXfpA1CNCsq4aKgQZ9EdNyHnGYRhd9XzFRCskm7WXmCbGBIFeg4IJQDqK0Fp8RSh70CWFpZfrQ3lwtCMjoeo+tNPUUf2mF4+kt7hldkgMJDIVL3lHGv29D8lbwDwieg4XwipF+JjVxjtYwIkaIsI0b184oGrYUnPwJ9pO+yFJFFkM597FTbedkculVgDLpcvLR8+colDMf2Q4cXn3nuabd4kEMD9vgDrRlUp0ywSvlVITtpWk60DUZTjp849Mqb77z65jvqg3NF7fpwk6KtaUZarIfdtXffwqET2hTCILazcdFoSdv8LkdrLX7/e9+5c+fW3/obv+HEhzvLqweOHLeV7rbjqZduM1vU0s9+9nP/6v/zu6++8tZzzxyT3ytXrhvTuXj5hg2oBiBYZRpvuiZGfsZQs4JCN7uWmGJM1IonGyCNfNvs26wHXErZsSjMi9JKux/mBjZtux0CevO7dzmQ7b5GZo9lt8yILXvjDEXlYhYFPlav8MdoLIefZKWkIuly0vVnss2Uldbc1EUpopSOElTETUOXlyeSFZZSQ3kRDzAWD6waoMJfC1cqF8I5heI5Bgtwu0F+0OPr8CQTRWyRNvKNrPYiGDBsOAOVZoD1aBQknCQ/YwD4OptDKzVqlpoMBLSnwbxKRyOIa0S3KwtUEArnGYCb8uZGx/Lp/S6oCn1E3afOQedPeOUVA9vjI7DApx1N1CTnqwwRSJlqW61YnTwaCdP8gG/uVYmM8kijSq4wY1HjNOzvzGk1KhzuXI/pAQkmyQmHh6vc9dVmoFO7KyQPr5YVV2aqPW4s9VShE380FjGKIWAQnoJCvH5LunzkiuUkXeFeQWbEzWb3qRltCu3BWeHSjauirrMHAT7pKnY6gZKEqp/wDX2vDhRtu6fTFbd4nh6qtdAACiaoUMLxDJzhbyT4DyxFNyqmCMYAz9NgvnZ5dUT55SFXWkOO31c5bQ8ZazHz2ulqbQF7FW60D7ChPkg0fJXRbKmkajgJOVhokFipcyJ2zdXwidJ+T2AQwmZTjMNptI/4jMlI0hTSrl4rxY0mlZ/T+lguYjxFq+qIM00YK0TJQq6XIRbMkKBEV0pE/baz9mB95Hk8AMP5qn2UNdiQ55WHDkEJ7W3r4911dh9r+J6NWy54heq1H//4T/79N2VQcjS5A9qVhepgZIeVZh0R7mnNAfDAprmMwT1vFVDExrPzAkDWDh12aESW8gqHBwBUTAitg0BxNTTg+eG0efDCufdmrImv5Az3LMzOsuo0N6/9+NVohhrsZe33covZWjuPmZffO+cmGXPMZqfPnH7qk5/+jKviM264nHNTdAaUC7DrDqq+dAEeZ7jo8X7uM5991h03Tz8jF6jtQk8TtrUq1qwrwjL7s6nbf/vmNasebly7euXqpfPvvufUzqVbN6wBzQTxoxhRStgisMnpiekDs0xpulB3RvMyuWuHxSW11FBvJKM2FJuR3TzJb8b+UyeIeNu1UBFqNRNKC26VMlz0SpRFjR5WxPQElOZIZ1QFUfqRvxq9yW/Vz1JEEKbiczLYnsEvBCSHCCLBE32SymngIbD6BVWfPGPGNHk0RHpo1tgiepfN5Szv7GBpG0MsZU1iSV0bdRAqW6/kxE46MsBWJsmzc48s8pG0T/NW14x7xZlxUGEd25frL3ZlnLtECySHTkkA4BAMOXgVAQEEyGsKrRoj0RVrgyUv1YX2Clj59tcsECiLFKkOYPWUHbWSyW0VAyhZQ6qEBKYX7TAmDVOOp8u8E5yyA7l0uUYFsyhOvXJkz4SrWh8trTh/89VXf3Tl6s0Tx88g98u//+/sg1y5e5NAz8wuSAPL8VTdeP6ZFw8e3C8zdqmqoPriVBJLeuZmtiKhvvK5gNeY8uyzT+tJvvqjHzHCMPfnf/7nv/GNb/z+73/5+RdeUHnYtXSH1faXL1803yTPyu/qtRjxquuhwwdQL1GV0AkrVD0yfFIzlZZcSYvfCZ6Gb6kS9V+KrGRKwSfEpNjm540NeELF4SxOpSLXiD7Vg1lI5YSrQjLV1mEv3Tl86KB+HjyoxW7kgWH3s/7xlJoQCCf8codOrzVKscX0xytdNJRA+L3vfQ9tKJSuXKBN2QBQnACaMKwQiJNeBcJmzzRSIQSGD7Ks+6S7Yjz26MmFK7ez20Oh2j0k4tZmFiOJqEbCr/6pE4gcnAzy97MDxZUjz+2vacI+zGFCB8MwIOEZoj8RSS6eCOlXFIriK87DyY+BXJHW9o1P6TqXDYAVMVAjwJnABZapLrrFlSiNhM2r+LBX79G4qX4j1enwtONHD0qCoF+5nGpjkWOodQNu5rh3m3u7tXzj1de3jp44zty3nUzlsU1gamPrztrW3tsr97Z2x+43YXB4j6GYpZUlTZ05seU7tx4+uKUZ0UyfOHP25058fv/Bg3vsnHM4ARFdXrWs0mjExMyeFz/6knT/6I/+6OTx/ZS7OsnoVx12OEWAboqNTo3iQCZKa2E51bE1s9dFP3E0Hw9dkZI0JFrahFkk18osEFhpnOM+E40y9Mas82u1t+OEdly9tsbaYbK3M2JoBSWh2p0DJx/0yokRmuoMdFGiBjypkEorXGjH57gGk/YApMQxXNnhsLIjby1IoSpyElHhKekYGS4MuJSXRqP0OADRywXYJ2g7VocK4ekQz/5KbliOitvkDgDURvJrOiIaNQ0EyHDOGavmqA156P+EP5zJmsLTaZkgrwThBpC0RnWhLnptGpJuEVZZTttuhAjq/kqKHN3a2fFJYPIe/R4XThb96Y88dlaIppUFgJeClbNYKYGibfsTjNANfbi4dD+w2oo4syjetWYi2pnQmxOQwWmP19eWM4JaeQMQV/20nKNfvSDsFz0JxRaOpYWCEE94+kOoywLzvFYxiRAbwI/zmrdsRMvk9e4MQ2b+waphYkAYASveHOtsIYrF0DMzrlgimpDrNxGSaKdx6YtiHaPX1P2UWrRW9DBakJJCFJrnA1vjnTlqgdyuncbEbHoFxibL2EeO2WsicTLMBA/SnyJPMaVukS5/vgCVWf3CfOnSiTCkkNPKJotV7RpUONvfiDnMzB7EkxBgiVumqif6k3yVXWI54UD2y2gSWLwfRRHoFZKO3l/5oUz8qgI0PAw4w+NZ+MqAiAEXxzawK8SoXFllD3TBHQFYQreTqWu6HELDnWSC6PPP75u5dWe52a7dkU31RS4QozGCUAuSxuLRo7b409Su3NAREGK5y9zcYXEFOgWewTTpYBqKrhYzGBRDIWrs37t88ZKLYGlaTZUkpKtoNI5yYdRWCdgDh2rW889/4YvHjhxktwOWroFYhrW2Gz1aQxTig6Ex64T/9E//VNL7Dx7aM7N4+OgxlrxF88rRgOi3v/3t8+cuapHJABhrCjTW8gUnfXv46HH9B3oG2c40siCaMPAzM1DFCJTrI8ePaUlFQerMvn0McTS0+QEn/nCGbzTrwDTiwGBg7Th60RrKIwcXv/gLX0DGG6//WCzZNMBkVT0eAsPSw0cPaYlk3kaKty++K1zSswsLR46dRLC86KUYBYXfAid5d3xF2Tk2aLlnZubllz76mU992q6GBeu5nWGA0Zsbmp4cU6e+7M5W10sXzofsm9fffO1HtxTPlbCU8afcGQAs2IP7F3OPbm6BINORL4MwquX6ugLKyIiZRRUyNZv4R9jUHej9J4RV+6LHs+lMtyrxI/a0N3WUmkL/14x1tyTRUTUPkLqFe+nxl2sZTvSyBzRkHe6Zypma9Ng1sKegoaLx9Cu0PjmfxavMNMKKrHxcGLxXGWdPRTmlcN8apYnd7heJqqtGjYzhP798RjzKgZQXKkU8BfLD735HKtQXzgMGSfKVAD8YkKLTRFLXspgGEZ2oIZL15aloKCbIzQAQnu5mlI7PXLdX/Ul9hiaAKJKf1nsiBucuJ5jvV3fUC6JInuFnbTI7UWUqz5PDiu6gmlJS7tAm+4o2V6lOONhGLKhQa8+BYUHh12/cksGQt7b27nvnIeGnMSY+/rFPLS6cNy3FkJrZt1/39PjxEwTnG3/6rdOnz1666OSo27o6Sst4g1usXRpglQtWmiNrQjW8WMOCr8mmbLStUonGlD1nobAQnnoqh1qes+f8/HlVy3IXrY78A3Ytgi1BTz/39NlTp2XewCq9YZh2bf0uPFjvCZVdjjLJo+1BOo9syydViRioMEuefZVbFcyWBpwVBa/lXDiYg/v3X791s1toTGwCGgZf7LW1Ngk8RWYD7pe//OV333n76TNnT586gTAsozSZiTKObEmo2JJWVOF7nSOGD8CQAQmdomwk4RUfgDU9QqgS+AVCReYA0H0cpWauACrdCUoNNnkHoIcDoU7Fd8wfXr3sTuJDx55yRD6aaRY2AZz372UPk9TL5RQgr2kVf6rDmSe+fzCkATocch6ORzhPGtAPcz59WPCHhwHGBDjlvegfP1TVLF0vkyRhpWgSkD4SYE9DXTP7pvBHfuX/+q3r1NMEc0/venJ6wRDN7L7790+pC7dzFtsthWJRkOR8tZ36slGTGzfffPe80nHxinqlUOyveu/cRYVLYIRYb3motMDG6vJTz35E85IDQ3daX2ijwAzr4vbKusk4W74UxN17960eOnb8tBH3/+V/+YorCNh8Bl0QHbum2GKtxp1VtZ1hsWFEI3nRttt4s9Oxp2sGPGUNhZ7NGTnzWvmL4pNX2YHJ17mZeSHRrsBtVN2diq0GWT/F7s2fMmojlPG580HtOojNUFyNKiyNn1WJCSnyROEwpGCK7yVakumC4QHALyVPYLKAQrGLlKjvbkV8lUD7RQEGrUBgwpE9LtORFHX0foIvnH7jpBIRyXYJHR/JdxYExTWvIKTuwDj9jV8kidMiAwZI2smvWPwVO55OlKeBO8UG7pABsgPBC5cjHk5gA/Sr8EY1YChPMoQlDdyfOlbnVMj2dL1me0js42QkOxoM59QoGnhpjm9UABjmMya3zNkXnxq5J3rEBM8PeXXuRuUY87U6Ab6C2Z601wHDNk9xLPiDQY5bskTE7rKeBQuHVAmR4dGyMWH5UDgBt2u0ArdpirBxcA3fr82fZHGs03i0Dvc31mvCCX/klKrHEzAR5Y5YxTFGWda/l8bs2U4IkvpZIYHnQY27NmSupSshVdADvJCGrFh5lLSH21xnsz8NzaJXSHwCAK1BQFG45KWMAE9+rQPI0IGb5XiEaBTE4mz0weFKMLHtwXMdTpPqPTZSNvBsGFfSbMGmBWQQSFcFbNq8amjAdNLSpWxhdnkOGEg0LpCgnEoEKZZAxIPRIGp86UaNvpYLWLdxgH1li8CpyVPLrHmxtF7bigxTrBfPn2MqGMYC1vO6YCQHDyRWI3MIefnllx2zce36jQPHTrlMgNkEgBnE6qW3bZmThHl4JkpGPet8UuzUgFoKD7/TReQUDbLQl0uqj3Jx1B7lmRkZR7OGgEcZoFN2NKayhl2yye/JwYw/XruDZBPoxt2lO7eufvnLe6wERnkvw4DcaCYw/HEID5Kgsn2Zi+FucEKVeZiD/2lpn5Sj9t2rTHmyQJj7L77wEdjcL+kVKyzksP3CxbvIgOHm+iqCIdQFYp8wITxX7yxt3Vtl46KThaRE9tp/vNNRQjPG/nXX6Q811ZJCKY7UDtEgJTrVniUk9Wkkt9KtOp3Ko0LoEdu9mWF20pSmOC741FnjSYAJecfwrMV4qM3Xqk1jT0JwxjPLdcqJqgZ4mq5uWeXnfGyPHPHA0278yZBL9GpcdT0qUeuAetjl8XgNiolqEo5LH4prVCgUm/ipEZhP9rg2Ar0aw/VqjaGmSR7v3c8dc2wwy+ZEV+KiV/Pj1KPRbLDSh1wXTtEQVNtnYy6W2alEIueZIEnGRY9dt5kDbKTiq/pCCElpyw/ZkPE2YhmQxOO73/4LyEFK5fadW+ZmPvnJl3/pl37p8uWsGHegFmAAcoTD0to7M0lW1VaohPjEmQxxo10VTfoAKOli0ombePVHbxEm+6RJrXutLb7/yv/yx++8d07RHztxUgJ3V++cOLVolbNxTca6q4nT37x8WZKitBXOVNL7xCb1p6rcLURIxhL869euyLzcSoXp/5u/+Zu//dt/R/7Vw6It5xDrAb/1+hvf/dZfIAuq/Ys5WkueI9Yus3DJR12VJYSOtFlTniGEwdcDBw/BI2msV1TW6qgkeud44SsuQMiARiowPEUwwhA/ZkEmBFVy6qlZpvWQnr8v/fIvE531uxZUbei3+AohGiQkX/obEqIBzcVQZ5QRJPpqlqxIGusR2bpVch0XHzBHkaOTCpNxDsHubtCVQieu4puvYJSuUoQKwXIKA8+B/QtHDizqc0zNHtp9O/OAXfBidcUCxnXd8Klymnr6oQ49HT54vG73b4/V4Z7NvX7lLw2wHXDkb7APftBoiRvlUqnXU3GoIWkva3ncyFKpuOpDK6/wsN1YiXQjKpKIhih6ZmDH4v65tY21e8Z6rJe6t4yMrId+uOXM55l9DqmItFgKqPisUl1aWp6YnqMjaScH5JA3Ww5cFWkSTFuC4dfmls5dvMrDETkD8hbRszHpAKL+9DNnD+xbMA1nLlTDs2PPtPG2q9dv20wwM3/giivrX/2xc5eN6aG+9S9lh6RkZEdmJLQMjzZj1tnFZJC0h0tlqR0OjL1ZGNCv5HY7V4kZ4mPr6jPsnrQezOLD1fVNbaClQSZDAHeKYTIjLbOnj1zv3XgQgoh2oSeJxBE8mhyM4YqBmBHlBQ0GSYlSQ5X8gBWgBg6B/Npjr6Okpcw4A5DAgBUf/CjEZAdYu9BTbki0ifEUkphWm5T+IolCKi7kUND2zNDq944qeHJhpqa6jY/lrTHTxdLppIfsC+HvtBosiSZfSTipVY6awgCb97GIXnM5NjfF7VedvsKTgIodj4pZYj4qwQEPT30ukCQ2chVYHYwkZe6h+ZmOk+lSkZpaYJ1HHlmuWKOGdiRrCUq4HiUA9ueQ5RgncS1dSE3ZeW8KeKTCPyIQywMclwxGnoo5pRZMVidHxSlRylaPHOBg783w0WuJ1vtkONlPzEYc78hXmQjTQ0/SzlNV17VwrW0Zqe6ircXqmlEtfkANNkud7Fce1TcIk5sgGQ9t+pQEh4TGwtwhldAoUXJSUprXijF6bJefpjZp1AIez+S6XEMDUEEE9GsDaE04lPikEnFNVT81NCG4yS5U/Si7v/DLJ1DFYE7J4YbuHJ3KGKThXDacDoLotMvc7IK226keisAYHyPObiJg2hfNkyfGoUqhpMHcawOrerHD2KDwthXMgbvkRPNkYsHA7uZWpsQnpzKL7lhjVp9z6LS/GkHEakxpJHrEALOViM6ttJRBA3bk0IFqOq9rwbGOga7xEiIJhjLDoM0GIb/zO3+PxcX0QdCRI8fefOe9b/75tzSFitvCFhG7rTxw4BAMhtCFy4VOE3Od0tIie20yDMWKyI+3Dn1Q5tQ+O2Qt96JkUQ3OWAuDiSgaDACv2l+EgdFA4xIMyOM21lZOHNp/6vjhAwvzH/voi3S7jGuvAZC9I0cXRNQNRoBxpjsra2Z6d6c0djIfranSIBkmByObyDDX4bZsRj+j09aFXKmQYRRnRYTzTH8TXDdvrIJkabxTOw9lJyTdS18lpfbo4cSjDZsmYx9qtJwmsWHA1xTOZm75JR+55pHuQERMZSVb+ko/mMqKPBMSj/yNmpcSOKFRKflMrVI9JEw90gQF0r+4ngiNnBvZ8t7WdklpvEL4y5Owfq3K2NFHugs21cXXBujkC0miDE6IKqXtKqI6uPBEHyQxREZzV0egph9SEaRuebkJjKlHo728RFd1w17zkYD5MYdtL3KO53+Yre0Ez2YJgqrj40cb6qsy5dgVcOoAEJ7Z6RncfOWVN+0pBaDsYFO4FsyzFtwTrHy7K6g8EyuDX3uMfbOidQOUI3uPQOoteO01I4wKBOhIWAkCkl3nHAcLA81dmXA5dGD6M5952W4BXUHCSRhkRY5IphyV8Oy6cetmiy6OdYikqRbA8oXZiMQ+sTxD9is/fA3Ruavs4a4fvfqabqWar2P9i7/4y67p+tM//7YQ11SszdnPalHdPdv5wItP6KEGbK+JXvvZp047Bkf1s+TGXJzK6StbWUWVEFJQqduNOLqp2WHirMC2nnn2zM9v/gye0jKutMDoy5euWgHfEx9mD5jXxgNURWJMvwDAGlxAxpWrWVvPXIOTDoIQgzwxF1uli5U666q3ToXqurC5wByzctr6sIjG7l32axvQcAyoCSNnewkhRSaasrp65475GdMLscLhp2vkGpFQGcKHFjHGKqgAXQsAxjlsuJHHZg7yWokobDDogUc2oyKrUcJJnRN9AGuEeJCHeKhIANEhCuhXTjIrCo/lK5fOvUuO7j/au/4om55hIzTTeydXl0MAGA7d7eNROzvwJz0DUq4947cnwZ8A87mzMNTeJyJgwhMh/QpPuRDJCewnWTRA3rqlQmLf+6iiSgi3/AfDpWzGU0Md1ychgSLEGRvbuWvarEjqrbk8m8msTFhdWY7ZUHPpBxZd5D5r3sly+TffuagldCukltCiCi3B3j1RAWZ4FFaVV/biKHFqev/c7IN7TnV2lPO9i1evv33uwtRMdrZpST/3M585c+rkipZl5+TTz7908/bd3/uDr7x74cI+hkhu26VrYmmFxDjTVvOqosldjIoS2tixuWOTinPScw6EqyF/ueMQwwHrV88BD1Y4IzGv6VZl+aIJPwcZrd/bsW9XhDyTvVXVsSTmz05j9psWDQMeMPdQjsolUeo01GVOuKYspOWW97Jmgkh/YDywjfh2gKHy9OpBkQArkmvclCmiltVx+xQ0mBaMQpZpj86OLCTVQlJ42iodNxJVWcDocFh10CwU1kWOpfmU1BMLjRgUXee2Ndb5A/wpyaipKhmStERl0JOrKCNt2P5Al/MVMK9wzwIfPTotgfAUbL425ididVzPOGPJGrEURFyHNf5GGJAKH75ieEDFKTK2gWWurHPNCBx9JT9jw7GjgOfx7Pw2hZ6ctJgEll0nsppXfwmsKA0w0DN4Sp/kcM/0P4qxPuGpMc68CaqikygM+V9PExmc7yUY+pYpAi5x3++qnzzieX8prCNJaNYJDwa92D1uJpphUtb8vKWRsaR1+LVxWVgUV8lUcvWq9uU31MSD20nEk+x4+oN5G5GxL1qZBroynAhj11moNPIQjAQYuH4V0l+VlECY+6lYYwZn7DBNOH+DDU8Nq3CuQ+AJ3Vwtw6DTmlFNauHZ7PYiU0TVVNF1OOECea/ddmc5AKOylnk4+lBvkE2SdYRpkTPUYvxxZWOl2JLFdbQfwkRvMUOMQE+Jdr4oDe0aC4ZDg4FpTZVGjYmjydbyajEtsNQcy05H0Y6b5JcpX42XacKKni128C//8pcUn6b/xr1bRv20g//63/zrdy5cunN3tVPUyhsKlCJrhkLW7rMBkMRR0dpc27Ss2De2w67SYlaOYs0zxeQCgEA5AgyhEEIAG49XSFCITrTxyzskrIhuZGVQizyx8+HHPvL0J19+CYBWQx8KJRAaldAtYVgh6cbVm+z15bsrdN70TJC0btN71+tZWJw/cey4JhsfRMQZ/SDYrOYKPQ82l+8u37l9K6skzp8XFxOuXXW06XUnqiMMhQxyRaCNc6aSE1O21u5lX5eaUPUv6zt364PoGoThsevVgUhumlYIrKSIP3KtoqpoqKYKDB6TQCD8KgaNoQ2KIDkNPfLQ+9V8rAEklBAWZHjVbwyyZBK4KLEvubxs8/Rr4+zwzo5M9OvwHGWzFG/X0gEVGHvJtKeZT+EqY3xq+e5de21UNkHgS95CXD4rdDNCOEwU4dH6tPXYMgBKiELs5g9KJw3x315ZVnecGOvpLFswe6ezVseVuEGykTH761euOivScL5mjLQQJEZm6mDN20/3uoxKTiMvITKG/+R8eeU2uRJChtUsyREYI8JIJWyK3ld7353B5NhCO8htDSX2aLOVn+SglmFsEzDmQCmcmY0qfFP7nHSSXJRKUSWxQhJUoh6Nhb9cNGTaymhUrzqOMw5jVTWYkQ82rhNzZvTf/Jt/02mCb7z59v4D8089fermrWW7LfHT+ZYUEotZZcBTiFCsA2DLUNd2PJIfpGAHIljDYGzloXqaO77KJ1vKiKnpNUuYGD/qgM5AVf6LJ08ex1zFc+bsqV27/iuVxNCFTwpe9uQHr30VQsqx20oPHBEFZvVEhVFaCJAuG05a2KH2qvl6Jqq36DSCM9oPHTns3Beyu6H67pnQ/07/0i5wwwnuT8pZyOYmM7mjekLIOsdQqUDI/4UvfOHv/b2/pxvw+7//+9YsemXfA7N3goQhA3O9ol8sKXItZyQABiMcaONHEk6iyquyhx9v8UqO5Ner7IDHT3gchWrCgRV2fWn91lqGUoozRgRWa6pagu3S6iCAIGQE7Cc7YP1x8Pxk2NGXAXLsGWF4IuL46xPB9EJoK3UUT7mCqQlEvtIgiE+gTFBusTkyYFG6Zry40CkYAS49QJRbmuE2ZaX677HkeDp2vPJVpqpx7nTHTbb+Ztb/qMt6TVYU//znnH67tuz0hDp4zgV0TqUAam2og6iuZswyxUfkWBy0wUvPPaduzy0uOPjTRuCpfTrPsvPw0vWlffMHHGp78MjRffP7v/2d7/7Fd3+wsr45uc9ZHFGKEHVu9yRrtFX0rNMUZEQVSGFxDy1XTXGTX0WnD6OISZCMTIwPVQRJtqsW+6WFzURO1vmPD2kq03SsHw208QtDtC714cdGaccc202vlzloIO/hfTnCCv8RpuYWAREb2gHqYK/VFWTMJ5ABLgee3xNhPonCAUvUGpG0DoeNDUa7Uoqv8YNCTLcNfmKDSqXZ0tgac+ErhoSmwHf5Il0TZjwjfTspdJtTMFKvoCIpg1dNf/iThgxkVQRIvZAna2U7rc5IRMz8S4okybVL0uQnj6jLhvfk6AoSiQ1BWH8RUXAJzl/ymfiPscFZwVELYV5A0uXtlTPBCbyA8ghsvUZLeymOywxf6W7FiySSnZxVLSjk4acGf8hUGn8tYWkDSNl+MBcBQEzHKKApQVXWSSmpcliLIU1S3oq2+pIyC2HJbNbCpsWUjXHEGBD9aZRKpxXJLn1IfFoeRhRWHgtd8li4Re+BwsQobEGuFPJVha9faNOHjYaz2i9iTEtbXa2Cq7zhDD4EMvJQbMOZSKfdBJEHdnThgU1F463d9JHqgvdbTnqE/3HuRqzwjbw1W0JJOYF+IW9PaC6ZgZDrisMzfAUMhtoXUiDsgxEHhMMvXCxPryjmIDQyzCOk9AOzJsdIALt3jyqxFcfd4QHDuvw93EmzPVpZTX61o+Gwspan+yyWXniIal+NCxjyxjRNKnUHpyQ0PWJRQLaZMTIYURKqjYvZYYxaBxUClxxndE+Iw+6OnzgqCnvAAmW2BKtdc+bYSiqUtWvZtBUK7757zqZhjTLL5tSp0z5l5H7NasmdL7/8ce34t771LfvxvvPd77PNnYWPKsALC/tNJmCH45zNS9QI3U5jgddqBwKALK00yLjleL1Je2Rbp9k3I13tLJp1hGJy14w604XBteveTnYYgr3KHctErhlkWnDckCPEa3zb4DEDnJ7AgQUdD1xUwq4TPeiGlwOHrl61wOHy22+/61It2s/hA5S3EpAedjoiRSfEeUFMOraH5t4wIw6bJWEIuZDePVw4ZpcnMlhIGqN766uKPns09uw+dexwbV3TrmnQu5e7+chI/6YZAOW9w7T0Vg1+yyMJM0pi6Br+dqoKUqPfFH8qKxeZH43xqwlqUqpx5Ey1amWZSlgS0/Uyc7cQjQXYHZMRzHHjEoypJ5lO7kQrJHJLVIWom0m9PhLz4KpBKJxP+DbXr62R+okegQm396AUwON6MgqXbdJbL7ET4tQejKmEyKoEKARVA5iegiuBM8WEwyoa2Wgry+vivgXh+6JZt2yv0qbiJDJYj6L3duV0mTmDyLt2uQXIsnUSBY/kY5GWVWa1G5xMQQSoUFU3tVrskGwoJ3ICRQfTYkZ6Dfsa9ZcKK99guhFhdaePkIJcOKORkIjIbnTkDxKkRuNJFxvlQiXF/kz72wDwICcjyYavGuouH0hYBWwPk4H8CJi4dfOOo3m1ERbeWNCONa6HsAl48/7WrTu3HYR04sRxHdlVh4oLuXV7bt+cjqmMqbSMVB4zWvb1X75y0Yi4xJDFoFeX0LRnj7myeVQCtIrm3Xff7qX5YNQxjKBSkETXPdph4VqGqe4uO02R7ZvTciTB9TkeBEj+PeVfRAlZnYbvigenZL51kKrVnQHWszqMVJzt1UdQsZ51OexYeuPHrysqdrzqTfXg+L3JHBAEs0A8VQ/hubOc8zopMhiUGW1FM+KaQlWQqJX03/27fxcxEnLwKFS5p7imBduCb8HCaxTCSXFYPiQ5CgV3wHDVaK1DIjuo0p34t//2337xi18E4BUfAMiFV0eM3V9fdb83/8xMDyBlj7+Kh40wfNAh9YOBT4QMMOUZVbYnYIZXKQ3wArF9+LTdg0vbXwe/6PwwDC71mhvBwzZEDGbZb/h6jiLyj8BKjcI5uMnFdPQNuRt0f6DXmwof48OUKAHgEYafjH61xcXPmgpl6lSHo4dOq9jWyWoyieu75y7IgrgO9d+8t87UUBak+s+/9V0e2vygQz0PHVxwvKj7yeZnoXrv/FePUvEH9v/he1/58z/9xuXrt2zJmpum4KJLadZWHNASIBUng/bMevNjTusqew7dWvNSUjKevFvYYLEi9ki0OZacV/8+5c7spudrYtQwhWtx1jeSmIHvFAsMGTTPLbARWaM/znzQYO/UeMV8bIf7cDpVEki6WzHrAy4VQwzkyjwyyJZkT+n65NmU8HAVi4LTIzVihPC0UiUpo4F2Srxj6a6I2EnnEoOHo5kNXyHheAAMDv0ceE+E1lu/xl4H1iGeJRICS9nbJoEVuxyTqnmL2Lwfa/gztAqV7KiadOpCGm3jH57I2A7ML++dl4GSfiUqQj7oYp9nwfwIDwwNA09lYXt28kXb5JnCKyYXl5IdQ09yvK1BJRVKQQOcdmjAHxRV3dAjUBL9VEANA+/2nDYNokiuor7vgQw40od4vxMLYUPcokpBpEDTY/NT2fSElgNZYaO857UQAn6MpUIap+cYf8rFl9Ezw+EPklINTmf2jt21e8/mpCqbljUsCmiiyG86xRkWjGt5QFfTJmKTNBAWFtVBp9uzu/0rfxVHwiBMQkWnDArh73Cc5zRbwsEjQ9VQj6qCZEhyCOyigUpEykq4iJ0EbMlODmjXa1Ojo/x9qq/hp3aKn75rSJPleuBUgXY4x//V7gIEyKYFz0x3Ld12SiRKDWq6mSrCNTfIk6Jw2lJjJzmvCGPK8GvOJAShQMh5atxqgX3sxA7WkvXJmjnT48ePH9Ugyg7T/OYtl9hav26p9BICfvZnf9bopuxSxTGac5D36nvvff973/uBRlDSJ06cXNt0j8GMrMGvO4EqLTvMGveocWuUc1NBRnARNjOXgzKdz2LEhsJEoYxsbmRCvvmJowhmXsujvKBBkwsM2m7Zx8NAK/DHZK8V4aIAgMoZE1Y3GJqTZQy3dIAaX7p1x/zxn/3ptxw/rQ8zjQjndS4eZFw4fvH02VP2mjEKzIRIwnJiaw2YejdvXEf4TX2dq1duLd2wyEoWyAVScxnOnsn5uX3S3drcWFnbIDH7LC4iYvr2Gb94RLkw87KgT61/+Ihgt5OXiETELOZyS6DfHPeL0Tt2pws8Hv0FzAnnRPcsceq6CEc8u824ui98BxsjrhGK1ZACMzcwrmXow9gCHNVQfiqnQyp6MHAVPfqh0y1CRqppIIkHNgoneUkSqYh1AkJ3SQas8VBKIOmbzjXMAkUmVNC0tTZg7p5hVwo1ghFIgL0qAhEjFXNWvDswMGOGRB1864dMOjrKciHLSQ4sLDojyFZVVBEDSRA5sipdqJi7ZAYBCn12Zh+0Ai0yoAc0eSjxtckoAb5DEERk8RM59CC7SbL/m9FI5nHMQKFKxKFK6UQC942636hSF1jO0TpubKMutAQ1iIAoRkWURywFPVPXD9m/nwlJsXhxd+LEyeOXL195+GDDSomTp44bij524ngM6/tb15dsmlxjMGC+XFP/m+ujplr25EoHQCZN+XW9wgW6FfV4QRtDZeWUk2vRZK2L7TR2M7OVja+zmexSVoWVFBNqcW4eQ91cQV+cPH4MPHN/fXXt9kYyTHYZ2aYaHM0uOQxtgbBBQEXFSsXG4R2/8tAzUyQiekXY17/+9W9+85v/7t/9OwaQeRsYzNkZvrC87u233gImLoJpGa4w5TFvycfDzE7ykwOFpCRanUGrQwKz8oNNushAs+JRxkIAKKEqdVEjQ9b6WyNk3lMstIGRrtkcbCRPUkcSJMob/f/4H/9jgRSoo4qwFAbI5Voxw2myy4JN4dDCs76anY/tgHWLVZ5UGQX/Uxyc/bU9ifWT3QD8k0FGX4jXh8IgEhIawF+0x1inDMCVRGAirqnQTU/8Y+BghievBTP+VIZFWkDDGRkQsYidirS5FhR4DboqQVMwFPZPThnJMQBjEChltLZ8c+V2TaW64nHv/MwBZzxDu7rmCkwq+trdlTuuemG8alpc93LhytXLN286D1QNPOjC4YP7z545YxJhc+Ph0u1lt96bBPj4pw9P7Ny8eeltNrrxKt3uWguYcuSiFGKgqquqlrykfqm7GqSyEFAaYg0rmAGK1bVlLEG1ik2gcnE8IqxR/q4Nd3fyxoN7m8HCctPQZ+Ik/BEznYsHGo2o0ke7M7SXbXwcMgKjQRnPfWtM4NRM9pPO4ReJmi4GpjuBLPCiJ24tNEQJp8Q5FIJsYJFEFMWrplEUYOIBE5c4e479I7SNs5+QtwveioJZRjCj5+m/kiPI26Fl7IVXSk5Ayp3f6koNgW9v26D3ioA4tG0XeQQONEgUQKC30dkhCBPYz/r+5APaIahzUa9px8p5g7n4n3b6MR861oDfyIav9ceTImveioqC8OF97pEju1PqNWbWESEM/gB3lIFRBCMNcKc1pNvkDfQPlBRAZm0AFOYiq17RFNoyePh4GEIxFGC41A4/yQB/kZQnB9vwrIDHgf3aAONP4UZLTofAljHBsTDtNlykyjsZYGdWt5sT08AxM4BlHTPRyZjlSBhaqJoefp72wyzRcMD4d2bGyj8m1Vdgg8B3RMBcOFOdZy0rsDZuGqCUdsgAVlU7xgEYDUcDiNvwWCSEYgfMwzUx8eT8dXxLBSgiU8MMdACQolZDixm07LBecWSN/k4sMcOd6fqkm4Yig/qXLmZvXiEJ/2VHgpLQyIICDIbRrIkZaIYZgEYNbazhblvNrAqUC82QiMb1HJmmEfyd3/k7xssM/GsfNXZOambTC7fYmPn+kY+8pKWTqL2sNIOSUkwyfuHCJUt//+Jb39YIMvfli0mki2GsUxOMc+yHlRWN8F2Nb3opzjvPKiNHvXNzFvWn/u6KsaWhxBAZCYeqSwNC4w5eWj6hH2Z51P0ABj/6NfHiauLZD9gCBs3CcUMGPZPog00rp/BoefmOkcEf/Zj9sOmGmbNOlT541K0FTC7HfWa+wm0/7mo34rR+79KVa3oq2pIrly5k/9mN6/AwOa0wsVmC1JRu3Gmbn3QN0BBeVzqbczbq72ipbL+wgSN62FKOFIT9tARoo9RMi4rhWuEcDuC5cs1fCjmL/gGOKm86wd2wjqpwopdEARXF69gx9NN5UGnS7SiHV37hSq0rGe7wxBW59LAfLmBxUThMwXhr1neMPDVOw9hg258Ak4uotwxqVA3wXfOlB5wziGi4wlsoveY+gMcukLVsZDML3tjELO/RGH9XK/JgDbCC5lGmZbLmzBwSuLlqnXl0a5CUfRs1srFBTkiF4T4e3TOJxXC/vGJZzvUbNwgb+QEgFs4TEglxZCZyuS+d88LjxMvL1g5I1Fi+fjLpYvi1vPGgBHvZh/qfLb12I0gRASIaqWdbQuWTuiuhngAUXYqqDIJT+2OrK0TzA1m2tNdhWHv2kB2B2kXRybMZAJlFnlO0Tlhuxo65cOG9lz/6kemnz37+859//Y3XnNfpdjCqAIkOS9lrbvHhDqclrq9sLOyblRl5dtH3wvycO72RpWd8YDGbYJClRxvsVjM/2u0a7G984/unTk2yffFC3nBK3WaZ6Fc42MjsgSvBkeKMQNMWGmwFrAJYTDm3dx/yTV4ZhGUwbdwfzQ8kh7t2bqxvUAUUgf0TJIm5rPevvyHPWGZbgldZxTghMuVuYHx0PdO3/yJOLNQ20wFYL4SGLmZqQlxuZnaGtqKZ5ddXZHfxSMVifdh69gANmAsJj3CTemSAcsH6+Xnbicz73KVAcIxgY4LlR04+dYCxYZKTJ08zt55/9gUbV9Wsm0u3Pv3pzx4/eeL//H/6x6+/+eOvfvVPXvnRq0cPH2NlHj6YY1+nJ3e5SvDm8r0904sqosOqlO4d5FmfmGY/hpoqb66OLMZgKi2PvJ/uMPCnA/RXOEH2s0Oqov5Vog4wpHOUVtTOONlIbqQ2YhoFlhV8hiBiV5TiGqIHqiARoprWc/QRpOWbqZzQ6Llx1KUruqBdu7eRgXANc5ZdpDOtSjAJVCF7b103pGXMUv1sjxL1UUbKaYfZ6YX5p1968SOUhcK9fvPW7eVV0UDoX9x/4Kr1HcsrMfgdx6YPcH3nLte2OzeKBJlrcgjb4kcW6wC6LOhSb1VUG2mc0+/IUbkrpchmsMAHdTJNYxmEcJSn+a2JzAtUs42SutCdSaHLbe41TXXlfPf07LyBf0rUIJAyV+809nazKCOuKpIpzHDV0YBYfO+2mr/DmlNiI4XwsDUzxRF9HctRIZepRvNmAT/+B1No8V+VInexdYTgtCfyPCkXyKoZSxwA4ANdro6ny0I+J3KBSepZHZeZcgsUc2J179WwX80iJWtSDfXsst0qp5f2s8c+nWL6IAce6WeMlH5REnrikaymdLfjEid3T1Jau0zmQ1e9jghTCZimxciQkU7U+a87LVr+iuwsvtLtSQNEDqvdlBUhnjgjVgkkYw420SWdcJir48THgIsek0qnOIQLITvwqqkl70kR08rFdE5x1HPwFBkJh6rzGOFzQc9ohiFUDg4AuDEjEgxf/0U8qlDTAwsBVZzG9gKQ4i6BUtCpnp7ktNEWxxoV2ppH2mCcyZxRJKYFpvqTWRE0sk1DRQiI4SATcJbEJiOhULyBdK+pdpEzYbEsIj2BGbHGJ0IUbF1j+ApEAAnySSkQQzhJc0mgRl0mdm7uJH7CMw3VKGUegebiYGoZEykGczqKWXBYRFA6yEtHITN05CErnTLzITxGzM7sBwuOzOrFEIukW4YhsRrgiHyWa7Ilre53SDEgS0PBcGintMuCyZPEMi8c7poJXWyWXtUI9Z5SclTBvbUNT4WHO6hlGrqnXp3X5Jg6Z+nE6HAYYuYIrGGednk5q0JLhxINlvaXR7oYKFB754mw4jbWZE08e0IjpW4ARjZ+wsAi4ZFrhrsoUFGJIoIn3gDS7t+6OTs387nPfe7v//3/jbEpIu6INUt9jPEBhk1zaYBTdOtibOXrvsHevVPzc4vuILYuSLtswEXLa9BNK2xBs6MGWQLUKUosuKVFmTXSgkTTzOl7yCu9yjk/ZdXhm3syQQFSTmVQE4/nuIdalngM6NIDqi2q7HA0W7y5bivjLVmWEelCLglfYZBlpoW8o99B+/N7H12+ct16lpW1ezeWbjuSaHb/0c89/8LsvpzBbVjT4lISZt7h5rXL58/fW15xKwyvo3uuOk56Xfmtr0nYShEr1yyI2jttujY7ppUIMlfv3FIWqgphto/JbIsGxSp2izYY3SZ/7FBQQ/K5lunbiE0BkRwfYUCwazIo3T17p7ryRGajtWri4KFTfWBNHVcnW1s0N5jBjXDQZtU6l5K30q9aHIS1eLe01GvGl6pepK6mxqpo0ZpJXCYC6d1LVfAo2oTkDaQfs1M+tkvI2Jkh86bIBLZ8VsQiOTARYMnkmXrimZrqFVg17IxJHct7Vt/IoEJhjxFUzb1XfhpDWWst+VlrJRhi76BPrJtRfIRBJSU/xI8kOA0SJWKpCEpZBfFJN89ddcpdN5VDZ8z0usFabUR71YvVO3uW8I1MKp0jhw+6hEs/WVfTjUMvvviiJ/1h9Y0ilahuISItJPHKprfA15VkNM7ps2ccuQvSVb8b9+9ReTTdfefD2sk+O89utISZUbKQa6HDMXLLqenKB9IJKqWYh51eo0/sFtG2qua/8qWfNyT/9DMnTz91Uq8d+157/c2XP/5JN3YtLa8889Qzr772ozNnnnI6yvNnnz66/6AJrOnpQyrM5Yd2zGzdXVk6eGD+7sqjt9/6sTU2jJ6nzp6yx0V1tdxlemrm53/u4yrnyp3bsvH8c89gRDqkEztnds/grLLRlTDLoSbr3M/OLVBkYhnEpESJ1L2NdQuy9Q1UrkXXhzk46d4GFQjGUmwnk9IjpUnTc2JUqPL6bDYknTv3nnKioehmczj79y8iY3Fh/uWPvfQ3f+tvOs7fKkOLrlyC8OBOJhYVJEcIlBMPPSguTURpUUnOaTIe7CsFcfapZ3BzanqfOkm5njk7p6gI0bHjJ60YUfemHjkSfmnz7tquiTlg1LSbCJ1W6diA/QcPWGSiuuqE2brjaU2hGaz1jfum/vbNLZh40gf6B//wf/fDH/3wd//F77Lib9xcMm0zuWeGXC7OzV764WsHj52ZXMhtfuku6bY+sB/A7ss6ZchogWnf7PWcxF7rPdQ//Om6hH6Ut+Mv17Xucd0bhVZtHOrk4BlFGv9ANfb+lX61mOBogLT56m1KOOZIdqmW6zAWZprlEOX/E7QlyogezXrUzggEnGETb7AmLoHTREc9GHHPGrPMi+kSZG5fqHGUnZMKkc5T4qzbqAVenx/ZFzBm065oDqfIHV04eeKAQeW19czKkX9Tz0aZ7pmjvXsLrXdu3NjnVhUHS1/O8raF2bnpqbk9excmp+0e3rNgQ966HQpLmsMH900v3jah7EBSu2ssBMWD7Ejf8XCvrcDOclRaiEu5STmjP+bqcMlgnwe9x8ZN9d4ztbq5e2nFdRkZCSIDrF8dnlgoQVjro6f21hrv5Iu1YU/fri0a08p4Z0aMikBOCY0n5Mn1zohN9Iie0mZGmzAAeTmsVB8qVna+thr1NNBCDgPD8l0jb22EST5k6pZAbXiO3lEBVX+nC6gm8hYFBKWbKXdPZin3xK4s3ap/6kKtYEqnLIP+xpDSrqTrpskx9LBrclH7oJ0OcdYn7MhspLpwd+WeIxhW7OnXR1h9MDs/i0JNubWclHBkI/Z9TudIU4VCF1Wl80wqkv2YsB7+Ih4KAEqyuUsOI65Mh7qFEk7by3GL3QtPsGJ6jD+vMTINQ8MgPFJH1lJN6i9yCdFI8sPtqpIuYSTSlUQ/U099SfOWcslCyQSMnaaLN9HLheZ6zXe9/oxhIcJfGgNPZZ/ckf6d6YFwo2RCVUwISeBG8SSNKytSKcNaQhF4AJ6GKi1V2L17UrdzYkq3+eHefbN31+4Zp1QXszhFTzbKJonKPv6KaPhD0RMAQisJNqqvbES8RT4DTptrPdiunXvsy09iclC/9YRHVQ5VygS839FTHS6iKpMdnoyITgff1+Fdj42AG8we0iYiGVNORonVohxwEvMkg6n27OmEikw1lNGRzp+oGJ+z1cm73GV1dYyJCOoDfTDjCZPKHZfSuGc84UE1wCVI1RNozpN5NqXokSX5L4cY9TFWCykiL+lr72bkb67brrTlNJ51Zqk58of3q3ZYf/4IjzQlzJhpVzqZY97tsk/m3COyffPadct6nCuv+0vmPBUCZTg94+iOjfWlVelK/eChHN/JKY5UvRrk5veVytJc2kzKb6xKnWHlc0YACY+vAk1HaxYF+qrZtRDSbIuLeJ2nZmjqhWef/bVf/xX3/Dq35srlCxfOOQThAmAGk+gf/+iLBrYy7P3QMd+3JWrU3Ogh8+vc+Xe++c0/pbsEWvns2A+xKFj79BzTrJF1jVYb6Af3Z731DvOzdWofcSJ42neqVVxlpqAMV9pguN+5OtO6GffUP2s6zTHoLThlX15qe50G/+6aRTub93WZdKJMFLs/OcMSGZiYkEEJ4SUWMbMs7sFpPQHq5Y/++Bt31reOnnr2yKmnHu2ZPH3k8PzBxQfLt27fuH77+mXHnjJgbt9dXTL1sb66vnTdvFgWfzqVzYHgO3bMTj3aOUUjEr8H9pOmpcowHb3hsWPykSOMQUdYJJ2q6c7ZGpaGoOtzRDq1PGre2A+jMC2oOlyOhOYEOHJZLhIyKPaqRRRjdQFsFIYkNTzf9V/TjaBvamYhcuV0nMg8AdNwposdJRBVnAihWQKZZSdvYvUsQd0hEQMfTAzz5CwSJRqykZjOMuTp8WQIwICdXAOGa/uzDnsYBQrvT5IhJA2JEgiqR8FH3UrFaUhTJIfHiNni/lkdur2TGfRBPRM/eYiTmWh7z1qlvyo+m5tGzbed7sRYkYTSN5IvVksvdlClBrX9cTrtS8t3tD6yqN9Humz/yAy/tjvC4/DQWZt9DS0u31nCNhpPfbFW+O7ybdw4duTQ02dPoxZDbEHQczWzZaUMC1NJ4DlKrCriR4ntihn4nXK394RhsjTdW7vvP9ikEV2QZ3rISppbzjPcM7WQGmx0Hsqs2NfetcKBxHCNzSjQOgKLgNuVoyIgaeIf/MP/9e/93u/df3Bvpz7D3j1G3r/8h/+OGXT+wiV9FK3y0q3vGrG2L/alFz/KuLm3erf/LHo6tH9Rh0FPIkrwwf1f/IUvsKcltray+f/4p//M6n3H6rNRUCNQh8mIuCkzXSjVkg5RnWgTXKCEzWMyd2w2cLWCHjt9AUylUZIGs20JUC21mTKggNfWc7JBKn+dqQ8bJLLqaysmowV2I3lVGNiNAPBKSwgDD6TStSCHOgOfwIeZSZRfC3I4/TNROHhecbLnhQuQIJVCoXc+8YlPyLV5QxMCQqhF2PQQAIsioXvr2eqB0VjMOToIft0G6XpV66V1YP8hwERwdj6jsBiAyWGd/vt6JqFmF+a/9KVfffbZ5xWSC4Z1uuDPbIb9rXunF4+e1fEw/CCuGqzPOuN8kdSPVDYejg7J3hDqJ+ZaxN0nDgyHkgb70CewJ8JheCJk/Pok5Dj8Q38bSYyVJMFqZmRuw0yJxCApvVJP2nGkyBL6lzq6pOLHyhpcAg0axz7ZkQG+PbWHdDSeWmvbSJbmd3SUF3o4/FFqnuWxEs/F37DgXs6POnJ44eiRRQqF7CkvvbgbN5asN1hxd/2N63Q3aXfNzcy+hZ27zDtbS2p6ygml+908eX/ToXXrK3duOUtAtV9dW3aSgAPrFcrkrq09D+/tytBOHO0fu6Km9Y0LYo0BC1YD3blh0HxzfWvn5sM9Lv9jqVnlwLL3JaNWu1wyFpMnkx/oxcLYZRoW2w3WVUbmYFS+FCN6GKwQsEYjVNApFJ5o7Fj/uAcYOdtdRi7T5GTOIaTG+g2MMOwWUsg7iRSGiqvE6UFVVUtSfA2HbbURblExPGqrWNyenTnSYZScbMGaXsEGNUOhp3TQOi6d0ubR6ZR6P+1mZPyBSEGGSJglEutOurJqERPlL2e1xilVpqyj5AV8scMzfla3dbgoQZVHkQQee1Xb4B8RmZ827HhCeVUgGQfwvmfGmMt1x7WfQNAWc73kH9bC20LsGQz5lr8EesrICA8iyvWrjFSiI8IUZUXveAEZMNRLDOqYAaE5JeirySTPKvZMcZTdO8IWDpQpzBNCahKAbDEp9KJS9ruz11BHAr/kNMvVYwdkVUbhTOF2up4+xT9yBiSzLSN9ztGn5BTQ6PvgGb0PPwUfONWb4wkXFRBxov9SHWpaAAHEUPaAGBQLKFGtFdH8Wzvv55MqRhnE0GLVhK0OAiwhZz0zETJv5skpgcoL/uBbykIs8mt4r00qyQHr/PJraFq8+aFV3JxfJZ8phJ0PHAcsBFjLs7gqS460f5jVyew0KwkOTh/OMDBEVVNkjf7hNCWnn3oKuFipAqXq+YkCGDRzKIEfJIPeSBkFJSJIqPgByIK2JrYSOSgnRFOlyfNkWIDUYmrINEYNAMP07r2sfEdVf+EXPv8zn/mMOWoLGy5fvvDOW29AowwOHzp+9PARsWTcKkrrJQ4fO3r69EkVURsqrul0x4QgzA5SYJp+4Shk8S/dvqNvachM82pbJDqRIVuAmQGyxo39BhRwPEOLMghGc9kZBCk6y+fNN19HthkMX43giGuj8NzifoMR/JO7XAycPDJvJK23gA/j68PuicIAWJyfvXr+6qPdkxdurFxefnT4zpZO18UrSxMP1u9ee2/r7vXNlZvme9nkmq37LPitB/PTmRjlMJM0RXVFrNg7hgWiQLhoTP8JBilymRfZepCmUZSKlSqAsNIKKn4UcUesZ+tlkeKUcnvkKJHLBWxsuOdSvQ9zjIRWOjHtuZJ+T7I1gA8kJaFql2PKU5KR4lHGiKeQQsWTLNQQRv0G2LEV6XP0n5TIdrJdOapn/BxN3B7PICwXJajRiFYRGFNB3OSfN2IbbCXnD2hZ/o0Y148UAAwqFgiU84PEHyzVLpgGg0D5ehrUIS05n79WvhkVjmBMZrMotD5JVxwe9p3mXpSZ2bnqDkcaqbtcx9ElQJFlaEALmFVGDrkx2UaODywc0E/oOktQ4bEn3uvqvVzjlcyFucVVTdQm+3ABZlsW7UnwBYx8CVFK68t3L1+9phdbxucGml0PzYCUl/Rdq80j8KhVR4i9VCQnBACTQ44MSU/8j//0n6re9qfDruoy0HWLLWg/WevRv//Kq6Y2DHfKwIXz750/966pDfVTzuXqqafPnD5zUs5UNj05JjuzW9W6ePH8s8+eQai6fXNpWa1WnaSKbhVbzxspjgeFAQtgu7uSGzT0ByjthfkDqjGKhXf3AKG+Msol2kUoouxJVH6MuPL3J3ljjotLkbGVESZR5V0yEYtEiJhhX+k4rOHBOEoHTslZp8QjEGHZqXPzpiolFxYUoZyGtVLo29/+tq/2PGQXga05jx7JIL9egWx6RQyWwsbfaUGIqi6S8H1mRnkIgdMsUkq828VtFRv9CIMKEucL0bymIDROzgi7cPHy2oPwBD20s9TByCk8naInVtj1x6NyDA62Rljh/fYhT/AdOng61oeAFvYPDf9JgXAiqjEP+B+/Vk0fwn8Skv+A8M5y83ngNjzWIHr62gCDZxASnCTJnpxyZO6nYd+tG02Ucr6ECTj2hrMsNMQK1PROhpbW191p/eD+xanpOe2S9pqo7F+ct+Fcv9GhEPOzJ1kfGT7ParqVu4as7UZYv3vnzrolSARHGgYbctPrFMPm4erdZSoqVogJgYwLRbRY7yIaxWKNx+hi0igRY0siGNFJS5I4bDFZxlWUG4PV7shIGhJqhHFEcnhVk1x3CrotzaSBMTnPOxozbmBO8x8+TOjCahjhdGsDM8JpZV87afpaQqpAhrcyClupbBkByokinOwkR2OnBg1xu4DytSgJtCZEFa6xHGOK2NjkNWG+e5UQOL3sxlPGWDgydiG1OgAx7pHTUlGb5YImqXTGqyORo56ekNtECnM60WLXKKKfGKEf5nQ1O3gUrepsQmocLRwfI+TJUG41cPzNGIDtkYvG88EngA8NHMIfe6JaNaDkJbVy/Ew7ixtFSWWy8HW6AdT4755gSSjQxNzm0uqN3RAc+EhhTGcfhcNcyItMMjtmQgU+ZuljmA/m5y8LkYq0pBgRJdrVwJMK4UgeYg9JqOICUdeQTTyR14dQP8gt51NFT2z8b2xCIOEScfcuK7y6tkgdmEARG8azdUjpkvSflTYOghwhB5wppi1dasB2L6FeShnj0fYHcJcV5Yzf1kjwi6imaL98glC4ttXTJyGeXY+QgQ8APFtyhKC/KfQURWsoru26cFJWANDgkyenqe1Bdx6aShbAqLwsLA3QU0+dOXHi+PUbV7/2J68u3bphafHszNTp00/bA4AAY1basrDr3vrLnziJIxK6cPGSVtW4KbPBxOzBg4ct2p98cN9097lz5xGJgMtXrz/z3LNzC4tt91v2ZLyEwkQDkoYsIwa8p0+z84smVQ3W0cECUWgJju25vuaqxekZC4kNm7PbONrbaf2W3SMSByhuRLo+WVOr6ccrZLMZJMS/z72Re6f2z+8zYbOx69y1Fcf6bxjfvLB04eJbrx2ctK9yddeD1Z22eGJbVH6K1fSMqWVsTHGX4uWJes/I+ig8ghDjOKyWUAMHvlyXo08jJIWqkOQh2KfBdXhHHJ4CB/9myfkAL5w/Xx+DjCpgR+rUWfhc5gcCGLnCbk8yOdSm7akELJ1bdSMd6VESQkGng+FbwKvX08nXtxATj2+q1/s+jOn0qbsXQVUQFEr6ApnAjFGEgUA8TdoodAfkeVWs/BwPGHLSxhUwrtMWbliMEFlyVXtT3cBwnaVXy4e22rK1RIVYdm21lJ/Jd+69C0YVMkqdy0d9pMeZX1sucQCmylQt2UsDauSZEm+88WN9P8KGBgOHXFOVITrzqrb4aKJKg0TqJnKrF7JGMEUo9FxLrAAyrCaqUAJZHaLzyKYk2iMEsE9sE2DyC7OvPJhgCdADJr7ejPFv1xj5oL++z52o+6xSW/ylX/olveGTJ06ppX/7b/9ttsv//C9/l7ELNVwqnTqMCKh/9Vd/RbgZAEtrrOnnLAFiJf/sz3/hjdfflE+EGtBIbd/KtloZrwxnFN+WeRUVlbqPFKj84zvCYBMLC8AgrMupi1lcCkuumGE+wSl6qySZp5JsOeLpKNRHFzw8tCc/eiShUyEXFiZauN/MglyFF13JAWbEHzl6FG2SkCKj3IH9qNJN8rSnGZENLzoAXbFPfepTaGbfc/grHE60AZMoJnOoAolaaLWONBGPcNiQKopOFA9e8XeZCUGny5JPnjj23PMfubv58Pb65p9/+xUwJ06dHDJu1pH9hxJ9WTu1rK62DjqiWU64pOHkUNXMeeLZlUrgBz1PQPbrAPahXz8Y+IQ6GAAGPB/0DDD/MR5Z/tDoammHDwDt8WxHWpQL1woCsCqrKFu6RDeEENmb2heArWOKUi9cuWhCdAYqqq2IG/du2zK+xw72t95WEfaeqt7jwvx+u4jcA3PkyAnLDrPQUwu+tmre0MCALSLmqG+vOydqfWaa3Z+bXyxkyB2EEzupij2PrP+5oyh1WtknFBDuUZ7KVr+GTqy1DuzkOjyBDZFDDKazumorqx1kkL6lkP1kvjd+y4PS8mfItj5C27MTMMueKDKeiOVwg1C1LI05mYHGZlcgqz8AVmsoegQ+cROFE9cy5AFeLH5g0DYA4PbAAD9jyXnlPnoFA9hyAk8uSTDAGFA1/S2WEM7IiRxIiBtQlWdofdP3gK3h8bY9Qjp1yHk8O8STaxjPfvUEM/gbYPvr4O+0htfBgyR+SNp1OLIUZ4+QoSJFMm7vgQ2pt2d4FXe7v9EKGQIHTxp0bBk3/nB2ujzb6ayoo5xS0wTFWnWz3YUnUYaInfTAfBIUmI5fLZxSSEgN1rMeYiSMo2ds22K1bTQMxLTnr/VEfxeZWFJEISdQ6y1gwBxiyileKWMy22abqNhMQxRH0tiSAEljE7ezI7880BhE3SKEJZNeG0/jb3pKG0STiFIq2UaULasXbF3W1aenMyqcSQmLAPesuoRydd2MjnX+nlo5W5DsqBUdHqlTI1ooyp9Ts5oMuqipki6CjYh1petAsdQjMD5pngSWvopV7ZNwDZNnf5KQ1oeTnAax22KaTbup9fSVbXB7+a7W3PZXM+eXL553guWZ06efe+5Zw/4GDaXFWDfkyaHWukjL/y5dPffe225av7B0/Zb1zG7ONQq2fnfd0iYDGc4skqnFA4eczffSxsbNO3dipoyH7cLkGibQ+isFtLEBmpmSWHYMSo4rvH/HVq21uzTiQZcnTc3cuHn90EH7Dw7N7ptjfelvWPRjSlS+NL5tDMDWnBHddi+v0sIKDTECMMeB8NKiS4zd+5vaO23Icm5h/+2bKWH0WES5b2ovMc9A8oMtS5dNH+5+aElntFMqr8a+K3PG97nuYz+u1D6yZxRNu+AtTZjI43rRgUJ4PFN9x/V9HC+/SrbDO6JnuyFi4/EU3oEd4nX4xIO3gRlrpqCm01MKVfGtoxtr2oZMY8Mlb6qZf8D8FbUkO1UkGq2Dg2JU/5KXRCzHr/oipMO8cvmCD7R49UC89SSdL9Ez9LaZ7UwihldNDH/4UDMtobw0eaHJ6vyG8drhnno4xnC1KYQ2Bco03b8fDp9MVXkSBsJJKiQBc9mfGYxWNaow9cBrhet9w/BZ4ogWkoZCRqy7rN2vZ9RKXKjIHjkhzMnILptGeqYln7oDwIPT1v80wQ024kPVAuly7Ez0IAYqPXMUwiaJIV8+cT4JR7yMyxe/wMT/+//bf2CFiZFveaZibizd+oMv/+GhAweNYWYQem92wT7/4kftCf6TP/mq8e9D+w/JsekMy/Dkyk5H2cOI7/zFt/WHfvD97x52PtL8/Gs/+tEzzzz1iU9+ksnxi7/4i6j50z/9U10CdjDinITzuc/9LA8uYPTMdHjN7xrt06eesgoGZjVTPcQFpraOh4w13aqrKgohrVfYIoLigpQ3uQKmPHwCgDD4eWgKOMG88frrreBgAMaPKZAzr+lKeg0fgIkiFWjhxDuUAFPhv/SlL8EMAPF//ud//pWvfMVEAetcQp7C/+zP/gw2/R/dIThFwRZPuhIG8iRRSYOhEOF/8523ESZTbe7D0OKlP8CCFFcBA7BnXMTnn3nWmaSWI1+1wHAz0ymIbFFGj1VHy0vXDRBZTW1lCz3vWEgrRif2ZDYZmEx5trig4ae4Qc4GDyZ/KPz71cWHgnx4YGPuJ+IbaEhu8Hx45L9+6ICw0xpS7HwNr4NH+BAFx5SLCqZmGuz33ycAhA28YMNnBKylQrilpCf3HTlx8rCQt998rXr7OfFJ8wbNg/urDzbXXntj2WJNs3YW7mpcrRfKXcV753dNzk9OP5hbPKaVN7pmp9zd1ZWN9ZXVuy6Y01yuWgXochZLBuhQqpTmy7oLFNXQgxTZ8lYHxlgu7RrFybKpJQ+upHzoGCALs602QnoRL4qV4cze7DJEos028k47yMmuHUa5bCyIl9G3rXEiugotcXPKShwITwOLEqT+wDPLy65KQpKsKOEi9YV1TBGQXZcLfwbMQMI5ENbl3MjBZOagg+rZwA1vIaLXFAx91K3aCGZHLZEyZfa4rQqxNbMxbtcifpFBfaayhJDX2YGN39emszEnoUqin51iEh474X9dJyq0250QSLKiu1waYYkKSqlXm128CFhB9hPsE0l3480u4WmcgyeoOu4TcaqB6bAGGMAUH2kzeYXtKBviSRdMuw5sshWaFfjVZSspSm8sXSwwTWqenfe074ma7CWw/GNPXsp1ko8THoc/8dupdxKjiOOgSvlJBIbpyR3IzgJRVOtJ9MYqgzutdcduYeOnjSOQGeeN2AvxSYvtF5IBmGJPeIk0MMCcFoqD3xOk7Yu2uusTqSxZuJst8Q/27Hp4Z8XVs/ccIjmxey9dQ3WY54K81Xhr8k5ay4USnzy5TrHbL8mB4ecAcBIFUBXQlywq4MTSrmlzIfeqxQGvrIFpO3wSS1zto69wdiuGeOaB1tkn7Rc19ulPf9zw+T7j/5N7NIgIE92Cffjh1Fv43qs/XHIJ2e1lunRq36ymemvzoQH6aYOOc/M5KmHpzuTUzNKd5XPnLuiUZZszE76WNIR3WciUgecpR5ObOV3NTmK0aU9pZwQ7+90ePB2TI0ePKR8l89mf/TmNpvJ0/s61m7eMTrLihNy8nbyEI8UTGZ/LIahR9YrbOnquWbd0M2NzXq3DZMM7zcGqin37D+ilGHTBBGDWaGjPmbcmWVnHTnOwNA39rM8a71b0Ee9MxkbERpWa3Iyn+JjKUeYSQkBqWWSGaQg4YhM5KZf3ba4DPRvAsx3jZXvN7tiefUjGAD94mhXiDiE8XLZgVcqe/Td6b8KKksoVa1zG7Ayr53YNlZqcwahG6FldllJl0TPCq6rXZ/gajNpt//Zn0kzskSmSJGFAV1LYleVFu7I8DPc0x2M+2Nsw4ic2EhUi7ZPixmpC7gleCNw+CQnnH+jI7yTFnP1LvjqrihCKDtjuYjAsRbI3vz+y7UrZ3DiaBtvJVIaYHzj9x7L5C+fPX7mc/oNRvdbvZhORTYUGT5V18S3XbYYeexCM6xngm8z1NXqqS0u3kY0wktmNUufLSQHJ5v1NG9Oly2pVSWFwrZzdova6qHcgfeJAWmrAkgQzrtfZ6mE/+oTDcHpdvmzgg859gOsULeqAuePpAE1mLoCPvfSSVQmWOqh6LZSeNt2ij31j7B+VRv2l7QjRs2dP28+as/T3Orckq3rYxM79ZdqaN9AfMPPAicKJTl/w3Fm+zeTxivUYx7Bu0wpJsocGeaBoQKr/ogiBvGnGO1EUEgKUVpeoV4EEBZEwsMV9Yog3EiGcr1Qbg1tfSLcHToQx4uGx/gcG/HWagRPKKKgvfvGLzhQS6zPuZX75ZSFSlylfMROdCGav6+0gjNGvG2BKwbFicDLoW5cRHeY7JEoFZyRkHAUZQtApimzqbnmSVOEwgLeqxHYQdP7glR8/tG3/UaLTfe6u2je5uLGRLqkTsPfct6OVirfDtK/rSN4lARIeueNvnsD8hMO0IWTw8wz+4et/mCdVtew00Qechb7SrSq9PXykJ/7DEtsWCwfUBwFdfyTRr1FXFT58Gl6FDJTwK80AlskEG6nAScCKr6Koun59JmxW/mXBAG3/a7/6iyqL7p8ThGwSU58VvBq0d3oWrJOgrl67XiNuam70y3PPvOA6atN6OcJj7/RO2mf3pFM29h8+sq4zsHLbWWDOv+5NCZa615nUMR3MhLEB2KpaGkcFZj9wrlFDT0ZWK3fhJQEzj9AMj0q3USv6MwE9oMKCcc4c9eNyDs2VPYm22ckpJ0OYwMHGL7OkiEu2qy8BCXXavOIvMM/ifK2ehARka/BEQVGNZcLZ8J7tsAJmNavxe8JmViM712pWV1yBcSUirR+iB7acWuoGCJmyrSgbfLOYKenAoK8iq8lt5wLOTo6nnXkYjGBmVB+mWrmCGOCL/khRw8svf+U1AWA7fPD06+NnfR++Dh5ItjvwXn3VFLC2h0+P8WzzNeTw9OWDaDtkeAIeIUjvZuR8HcKH/ArkvHI8zl5jA+kdKhnQzT/CMMYx4mdFSlZNY2e+vz+PepL6pgbl8tUjnVd5TaNOHqoKjXENxHTWxsGPfyO4j9/e52uC+5lKMLKi0soSA6BChidPq0QJibJd1BlA5imEc8B87VheiR5s8PATPH4bmK3Qa6H1tWF48MrYizZLKgRbFIEc1cG6hTBGTNmvjcendQd9bD3MEZ67Jyw3fnQv49MxUufmcLuVDzwN74kwT7VA3PZoC7hW+J0jCfkKEoY2BdpOghZtXeOQJB+eHHgEe4Jn3zewiICR4ZPknnr2WW0c0dBg2tfoQGQ7X7VuFlKIqJ311YZmI2hW+9jR65Rk86E2HGbOMQepsY1s6ru3NrFuFaM71u1DMvpvcBTNzs8wUXB/PTAZ8FDVjaITlV07TI7mOIf7W8wdg/G+GBg0+r94iH0/a4HxF77wBQ2l0020uawRLbsRFjaD6VkVCwtrcHcnm0TuZJaKZktp6OVLHg3UtMEnZOXOEr7hJKU8vW/67ubW3ul9okvIQiM0i35kfn5m5/rEjnX52vXIxHs6WhoBll9ErSpAdZtxxXvLec6q9j52CaZ7WtK8dGMT6Fo81mD8SpDjEdISyNOvHS5HkHSIZyPsp0+A+fu1n0IUpWe7QTfwqJ7tpEb2kWuSNSG1VrKjq05ErvwZRI8n/5RJIIvMpJhY48ao6l4FZAZjVKfyPs7IB/39iUXanxphnkWhApIFe2WVl0ASaJALc8wCNR+GWL5yAkUBgHKOH2c4VhbBw0b2p69CeAj87L5oBmhrpUZOl4JErJXbdzqDgDlF7NQmvQx10VyeW60gk7QlAAuzC5jjFlERwUncOTKpkaUJVVVpUa1Sby2BffAzBSkksiQQGWBgE06SZYHxSfbEZVsyaMlw9ViAj3IdIUyfOXMXbEWvKjIWNU8QPPHuO+9Y3qR6WGh+5OhxQJ/41KcdjzM/mwu/rMC7dPnCyWNHb9+8Ic/GmPcfPwmXTdNSYhJ4GgNQ06yIYrUbrVfVf+ZnPqvKsZhn9s199rM/84//L/9Xn37hF37hV37l1+A3mfKbv/mbeuTwgzd1aMgSifgiG7JkaT+tYXGzCwZSHrt32VupkYhwm7jZuSPH3DialqVy30qeNXyRE19xhwdHoPLkF9J6Cp10lpK2j1nF5jAaGKFh+ktF7tBmMKMjwgaYyrPkBm26S1ZF0cas/Fd++P0fv5atERYOyTvMhw7uP33qxMc/9pIoyyuWjl2zAInDFhmXXzMe1g4pOfQgQ1w8N1IixenZXBKBHgR0iRIykMhrvezJiaIP5tPN6zfcO2gj8tbE3jffveDWFSpGRkRBidOjHm6lP0auDfpTo+TFV5hbsHBD1hpelJ/iWkQAtOcnRxlriJ+C6/2fBszvDx69DV8Hz4eC/XUDFeITURo/sRM+pMWzPafNugYomJ2W+rhEV/UWiM9qlEV+wBS9sR2Ox0CAcrd6x0ob+9ymJtOiPP/sMx953oT4PRvbbHr58ZtvEXvWMs3p+unl1c3l1WUy/vpbb5unJhiLrhuZc9fMNMHTW32weW+nm8in5+dMqBuCsMIRLuMcO2/fNw6QLXQZOLT/zBgYzWslqjHfXCKspbAEO2pSgqMVBtHKlZ90EzIk6/whmQgr+pnftNBCduUGA3MO91ObOIKUmqhzECl93LoUh11PqSUwGpJONcwgiZstYzkKJ01XyBmlwugTZkYF6XRdUgsB7Rx6QEzZ4QJbOdTXzBlSBFsMx8TAbBaPQaScIopIgQmPS4bToNbIdw3NylJwd/q0YtGTnBQnKuOm5qt90S7Tz+wrn7a7ynjo9x89Iana9kYsOONZ1UesVJLcE64mZkIJtPWpn9gfZicnwZDApDUyHDS8aSUGnOLiQ2OWtNcx4/KW8DEonKVZO/Rx8Ch1ndVR+o0sqNqHb6OgESW+RL4JvFaq9wCkbBMjUYpaZCSMkPRr+62Kj+FWZa24A1FmtFhhoOY/z+0uCdWnYB57BkIb+Iko26PHL4kmTHQxByKJx+DnaQe+aQ5wOextDpcoJbpc9ad+jqfsk5ZYXHt0ANrjCSd2geenAVScfoWzpdTTyT7pxozVDjT6rDGK1J26RVssjRTnQC3mp1EBsTgaBlrZ7FRg5kcGsiP9lbqWUXsqsOssmI7iVTOU/kEtGgYmLh1CnzAxmk5NEmBOQj6B4boP0JAMYkjcgqux1r1xvpAV/9QeAlgIYh08HFscAe+6Fen8+cuXrhrX39h6aCZUSuYX5vfNHTy8n9Bbr2O5kxkPGxH00y9dvporTO8/cJmbmognWT4mfzkPgHkddXbj5iWjpG5smp61ODInJjGk9s5kpsJKf/pzYfHA7TsrJhCsm0I2/7xbGxf2M4C00WienZulRYz3LbvKq64xliPDcKwL7B1xbPfOhbl9p04cg5Zhx73yyo/WNnOamZ3DVnPQaDSVbO7Z5fCGDd0GY//0XzrtljPTH6nZVQWJVsls6R1nmqlfGfSnlluyS0xyIhYbL/JUEkUwWpJpwSqNPCpQuF89wK4geea94MGI1ZBCeBqbp9HgXoAHjfA8+zeyM6pTsd7L8RCrggoQfV4pZJKXjCVCTWWM8+ed2q1xpNLles6J+1jX5Y0r2vJJ9hnoAvibzsHTMuyVe0wYLhTOJJ12Ic8wgHX4MALMNPJUWOzj+bmYhQ73hT1w1UZ31RMOTJ1Cueojic4CGtRTEYg6S4mN6lO3YixVMGIJtyJMLO2vXTOpUzktLdkR6GNO7Nk7YYU/e2xqwgV5c9AaBJydyWIzffSMGeVMuYeEk7SSbHF/9de+5Mmh0xhW1fgMeWvsmzZMi/x141vL/5iFwMBwuqMIY2fmSJLaz+MJm6TlRVyWakiti0dU7eaGkAkZwyx8Mcy/h4WR1fYP4LC5UcKXL16iiFwUYACbOSuZH/3o1WeeeVYF46fnW/uk/uyqw20OHPjSl35JJ8lV3o44dbHfP/pH/2jf3Px/+9/+t8b+yYzkVB52NrZy+jdWH+nDu0X461//OvP68FGLH7aMvuse6EXgITtbDuVHHpDOWNetR5tXeMwnKrMuV7mibmSnMdNBrcVMFGCBWgoJW4ra8sqYhkpEfMQjcXHQE3nUIr+4nmYApAWVLDO7kYRFov+bf/Nv7JlWosiz7p+BjgxqZd9sVgoJ/KVf+iUh6Mc3EwIYgi16R1DZPGB0nwc9Tz1rf+8z2Ev1QAI/kvBT0p1xsbwCoJ6cHGyg2FnLS1Zo3TOYkYJDp/kMWZhfcJna3p58Ixf6FEbaYkWVw5MWL9nBz34V8tPdUC1x5kMhB4AP/fqXBnb0DyL/j0T7wXQxqgMHzINnCN8e0iR1yPCkaNKvjA4aaVtgGfvLVTXGpuPUPsUqOIN9br118FzUjSH75ZoVcCAASZw9cfqU/fBXr92w08jFOczXFJYFQIuZ8Ll158a1m1cgcfTvgYO5XNqJW4pRV2J27qCmSEIEYGNt49SprPxb1r65quzushPu9IpdCKbcFbgRBqsHMm0aQzfaxfL/aFGFWZsKU4N1EnbmiAOWcCv4ylSUmoVkljDWwCL+ybUlAUxAOgtLWHL8Dh7REBEt4P7nQs2C175LZdQtL2HLiEshiVbiIpUZe8viCtg9BYJsF3rGDqC4ADS4AKNwBTiDXx8leRm57YUOypIXbV8aPKpZ1vGANay9q6dAfvnIU8YyYhU3uZcqKF8eMOAUwnAuLGza0DWkhTZ+FPSzPfwgB5jtHmzt6NufQ9wBT3+VJksI2e0EDm5IqOOOIN7fjoLZ7gZISIR7hnB9qcxZpVAGJNs9DSwEO/iJbgwW20/sMoltmriNzdeU6TbXIQoee8LH4lL1ATI8LGa2AQislPkZRCMraUxBRxm/fchvkv8wJyLXBYncBhGiXOR+RFgRzO9rCrucV/5ucYil8abOUEUMJCSewBo/PwANc8uGQWixOOFCqGWuMQjRXojFia7dMb+zenddB5iTqCeYdtqOrgIqFEhf4Qnz3QxVDVAT0Gn1U0Sah+NpQ8FTFF8Bp7Ev64EHKpSMaPBTMwnApHKz5uGlqOUasgwhGLHA8AvXhjrp2/C5Vhiplj+QJFYOZyBeC5gsPXpk0MoOwMuXr5ZyiFG8vHI3dW2HCwQWT5w8yYrQPl67cdv51zyW1GvONHlsR3foaOWsB0iraqvU/DzymO/aUK388y9+BDGdClOMGrF+GLbF/QfRqa007gYShRAG89wc2sB3owyPxQ450nFnljOxN7DF1/DKuqOJCRjc1XP96lV+Zobot27cZUhYd7x7anb+fmZyFBiNZbM2bYPtEzsesLCy5c78mLsFjABDGCWCZ3HF6WxVIncUrxDftc++16ewhSVLVTXk9icxAI8DQVTwhApAc0A4T3/tWNv9HQUAj1UmIjWGfoLnUaaeXIMNHtUlSVS4X2jR52tLQncAEm2UhQldoABHptXuonZbByATANRZEgyZfprOfu+nVDoLXitlv2OPHqBRrHoVsdb2pwNQLDNjnDFQXz3VX0jAZAQ59tqoBYEQ5QqLzPiqEFvO+X3y0YSSEVUwBODo0ePYYh8OYOPjhFlXkXnZwJ7QGhQWVfUyJk6QjAaqZgicnZ22goglaUwWmPk/gse21PGTDBElqydOnHLNBcNSdbPbr4sA/hu3csg4IUenK6T1v0Xkl6OuvCCRRDIFIrXFFU55h4pHpio76UhQIyq7UenG0PmFkEtc1wicP3fRNxFSN3JDxz1Yzp4+eePWLepDRXI4zw9f+b4zPd979zyr1G3BBg7fuHZVxpCr3+9eIeea/Nqv/drXvvaVf/0//ysnbL795uuv/OB7J06dQY05OPcDIA5nVWPmLyKsw4PcVxiuX7uJFD0E/rfeeoO5/OUv/z4lAhglqJJDaX3yk5+8evWy2qj3Lv+2SC4vp/3ALDkEjJWAZVhtUWNxUCHpY8gRxokim67+BSxdBYwkKcIM2Cfh4FsmpMgvhNZgx1EsOIkkEisJ7rd/+7d8NX6A2ldf/SFlAd7SQ+M0/91/999BgoxuRUzNiIh7pKEpQbMpFxGTxFa2EVNAyFBIjhjSB8BkkE0YDUtWumgdyXLz+jXrDum1dy5dFah/eXc19wrPpe+2xwbyxYUsjtSBVQNl04gQuYEKcLuuXZ7jgNTFwY+2DwIIHACe8PyUTyAHzI89iT9KbkgoX983Gfo4kSHi46Dy/fR0nwD2up0D27/+JPzbYTotTx2A6q9H8w4ak6jQ+YqyA4lqql8tkqah3PqVBX2R09iquYmz9BYzxLm4zzx76tnnTtv3po937fp1t2FcuXILbhaF4T8G5+bW+sVLa+8RlQePSOyRI9lPoq5JYu/k4X0zBsN2zW/eO1K3Wlp96BCiG1dcUnx99c5ta1HdTMzENqJINmgonkmzAzksO+SQeMYC+rOEsY4pNH4TIvVxqt+oXidfuyamZ3RLfDHwnCEJR5EgUogjdrUQNdBpsHMv4XctvVR6aay46nW2FWy6VMVSFkxJ0lo4TnzLnmXEvrFMt3Vznv6rdoPpW2wqvYyxcWkzd+7dPeNu3M10Vij1sJ3xYS2cRb1ytLm1ac3Puos5pxz+azpCeUXYNBpJdttT38Or0lAqxtL5AxdDP17UpZEetYkJpGnRIjMG39HS4sRD1fjKoYQLunLFnJFBDOyxOJX1KaTBKt8xvIS0I1c8Y3how5d+FR7GefDUEosOr3RDAJw9oOcJzD+A7lrw42sDJ93yjZDmbeQVHAyPUw/cGHzkd/a8CScd0XAjbVImrPtWByrUQdJYRO3QfjJCtAg8mzi+rKjOOTnMG1NXKeUSj+BvY7pELilWUbyPyJARAsoVc4pIvh4RHH/Kb9OvHIgWyw+HKUMijQASpxJ00QxRmjOIH0LagzDMdsSUSVNXc/FDBbgLgfJPBnePrEY7e3yPTtgVkZBWCmobJ+lk4Zozn4aM8yDMQk2QqPVstCwJNGjRRBHY9VHE5KWs/xYS0RuDWOiXomquVfXk769yoTjAC+l8CVc6nl55tEo8DQNMa0XPeK0Wdh0qxHgKl7pceFrly/p3LifaNF63nWi8sWHLr8NA5cKeJS3vsRMnNWfO8zG6b00/A93Z/9dv3DRmYK0/E0Wbe+DgYciNhz7z3B5jf447d1APaZncO5VDVXbt0qDbQ8h+QBJLzmCc5liKbAA8AcChB3mYAyFnmf7eyb2mYO9urph6laMb165nRjZtr4PW09wzGHggyTroHTv378/NX7KwtprZEgjx87133pKEaQLH+0kRN4Qjw6g/bQLD4vGnHPsyt2/6u9/5i6mZfUZQdt53cW+s3q1HYS/9YTC/ax20XPNfU0CabfRAtlUd6KHpAh/NoO7HQGzX8ITIn1OocZsLfFwqTdXOVFjZbOBx1Me1pcOHZ0cfgGVK0mIp8UI70jwdKLxWdAYc1ZUXiiu/+OYr29uzZmn8qrgBCm2te1SGNBMhGEuNiEmO+e1kO8maQDF5YoPWCFWNqUmnyLC0qVqKymGl3jkS/XHWaq4h2qIppzgVogzSLAyq9bXU0EwQVxQ5UqCeAkkdT1dSgWL1qxD9t1t3VxW083z/9O2vw+wKLOJx/sIFMnDfqaLu+pjLeGtQTey0+88xHpp4jSjxUzgGZjVJZMaYnyuq5+dmpahQ2xw9fvaEGqruPPX009pEbKFOreNwQxSEDrBCvw30J48fpbsuXr6MqUb0zOS7wEodJ/87J/ccPWKqLc5s1fLyI9Rev3bVJXoSZe2TK+ItXxICQ+x5wsOHNQqwO424DgnaIJz41V/9VUBy3iwQ5G4zqseeeX73laUjoqwepom1HsZKppU63shwNbxG9B1Xoqtt9oGF4ZVtatUQluEdmYCZ9c8KN+Z98+aSgqFKUIObMo9KWTIKomBlg3v+I9kkIAOh5PZtXNAD6TywmLFYlBZWz6DamQN6KUr0412rUX4ri6SipCk4GYRfRCT5BNinzFrUqAY8EatywgUirNWiHEBItSlBsQR6og09sgmDcKmb37Tgh1IQ9+ChLBmSa4nKAhjwwqFHjBLqXgrtYz4BNoNAONCpiyhpEe0lAIwbkUgnF9W4kfD1B5vGLZwIO2er+sOROhZXxstsMD4a001yGfYtMyv95XEtag8AHpQP4Z16v8YwKgCv7foVznHAX+NX3I44eEQeELbnr4HuP2PQymYYO2ZUaWoG62SuslayjNo82atRoEaGavXhaIx857w2aOb48RNbL730omWy16+6dfimoz8Nu2fb0M49Th9wgN1bb7/7xpvvuLEm52To7lrYd1hrrZGem3db964dBzbW7X4jqMt3bq+6a+DGdefGZg2xuyE3H7oaa4E1szvXrjGxqc4QRJR2P5wtm4N2U/hGxcy/O4T4/vqD3VazxuRM5ZI1PZMaaMjsKiGq0sw6VM6KJO2CDdBwW8rIWs+TAOeA+HTApJVnpmxLNIMwJ2Z0qfrU8hAmVZs0yEml67uhMje7hubR4A8IjMwSeTU4LgFxktAWPW4q2rf9qeEK8ZX2tufO3GhWLZ1EuYE2Cwbb7zmES0nGhSTJckMuQsX4a2EatdyY3rkb8ghsQNhItoX4wiZIi9uBnkP0J2J10kMgSE7EIaSR93McyChM3+P9gXmDrQO3PyGki4jGrhyFgk1K+jFbtkPyQ8tRcZYFdPtC15GflOPYLAAAzpRCVonRkTxi/kSUT6Twl78WDx4/sA7927Oc1IpLzb0GFYiwonOny+ipSn5xuQb21GoM/gYGxumXyqyvngNyHi2X6KRF29Gy6lkh6QNT8p2oBsJrI8c6SKpmZegKMBitjBBxRdHIAtZS8AiUOnikAmtSEaYR8YpUIUO6/QpYEjB4cgKlohIC6+ZPXOEiCud4DEUZ3evpaI0v/Np6yxXt95M5jbW2zA5gJvsPXnnVTqe0gZtb2v2bFuLcvu1IrqlZw5Zbdq5pQFkFaGYFmAtlGITsWvwgazjQTr4YHstLtykby40co+zI9Dt371juJ8SFaDmPxO2nbg0vbZMNBXUhjw4DepgZsOEqtsMvF9DCiWny4pqFmb1ZJaWNFgKSv/L+0DhLCJjI9gCNeEfHMYMLjyb2ZWdI1FHse13sPXunH21MZFUHBZU9AKlQYbL9SF17t1XDqFEdjyqOdUMUuZAuzbHUCZr1F/k+dpC0Q8vYm+ox/s709zaSYTjbNSSYhmwAgeKpsx04fG3PNhjeEcLUx20DB2m3qrIEfy94LUrk6HGUvp+9JvJ0DErN1ph9lmIaXRKgvwMcGVoCEfMShIWZv93w2p7htb+OiG+uRntkkRgVXTzUyo34SSLmp/fVXEsm31owsIgAKMoBlaKEX3iUW7bwpqKBIS2ebFoh4oIRS0Ew+XgAa+msyLDygt/QG2N7Xjtqmd70Qjqiqdapv0TSArlPfPJjrr/QdiNe3bEU3bVfqoe04SR+KgihhapTlyIlYqwEveoIwsiI+g2h7ezVrcqwlHFwzi5QIqQuu/kW2TBIpV5n5Y7yYT2SYX6UwwBApkC6cvyhjjJKVfu901Mx9+1xfrD19ttv6eirzB//xMdogYX5OXa5Vv38EhIf6NzDqOZLFV/QalT+d3/3d9n6Fy6e+9KXvvSNb3zD89wF3YO7qp8ZN1ayAXJktcIyso8gSGBAn2xTbWos4sBbqANs4plnUcyJBY+SYDcztcGYlbEa3qSMAVX9EARgnyhUD1VCcwmUKXHhlDoiOa93V1YstlH55VeI1DEdZhUePEpE9Cl8yJjorntZnbhsRy9qaRMLluB3uA8AIkN3zp88+fJLL/3X/9V/pcvx+htvvPLq61KBuaVHLIRhOsplFiWcMX4h0uXu1LVzktahosfR1lOcChVPSEYXpBxB6yCyz/3MZ2JNTc0ubjH344BxvvJLAisiKzsM9WYVIkoU9nYHoUCQPJyInvhQbwyszBc3fMf15ABsRzL4fRr8H/RA1QBjD+j3wfs6JPfB6P8FhcgFXiK4c1RqLheou7bNYZxpVTUHafLxkeDZF0kVGg3Rt3bHeyykCab5pIWMW8eOLZ48foiW1OHTGVi66S7wdReNZXjJJiunUD+8f/PGksu/adHNRxuqHuk9cHC/mQEX8UzbVrJw4NjJU64U1R7bS8O5ymNFM7a67Bq/ySxtj4VnralirRuTJu6sUHCuMjFCxyxIA0xPuH2YQUzeUI/45LAcj2jJcYmKLFfW5M5RVLQM5MwRfcnxOCijWmOQwbHseWh4tUTjSHc3nkHA8nlsOjc/+ykJjMLEmP+ZKteYNax5dBfJ3jP8H5i4/hDxMRCXnw+4aoSeDLXwQGOVdmlMlewCUh9GLW23VfXsyMYwAlB86Ix0flBAw6IVTwCoZOoPbE1asasax8St8KJaVczsR6XoKQwHdbSCuZMOWgCB9uwU81ErKMhvEcy/zUkoqq9wjEktKmN8JGbqe75CkHTiENWe7c+kM+aM9HzqVGRyiNjwXtsZ5NMBIC0OuFDEJT5ZLSNirQUKV/i3p/KfxC/1AS1PyqFcUfVkCiGm4BuSv+jMg49J5wwNsX3tcPRO7Z3qQszYS1nenTuavLH7yjVmsbSh2gKKWrtQNIxU7uED+7V3QjQo4JmzbXOruL3aR6CZPRnIec67d1qKoGlQr9FDZ8AsOX4aIDqkNrZpHyXUBKedGpfU9myjs7PZxMMjlrTE4kD62tRqlbQ+yLZpzdS0qWxpgWwALSkmMZHxSEIOoHOQ4HsXzl+8YGnxutX2LkVZuuXwAwCPCAPjYfPWHWOoxjUyu7Jv6sSx45TW1ctWPKZyGOzUT0TM6t2VpTKG1AgahUaa2rtHd/j++j2L7LXTjMzJCSa6uxc21zfWLb0kRu4U0wKiDVdlypx53Tn7wOQEDHIhd7YgeLh89e5yBvlVUzyHp5vsqckcNGJE1+Ds9aX0B7CdLeWrppzhOzFTLSZljdu1BIjpZeTWYThU5YNc6U6LOKcNH21sHnXtsFTlp426yAzqhGNRNgK4VAQskvHR+7YGF83KC885XEoJpSEZ9Uu7sLqUu0wbpoubf+xSW3VQY7s/rsboSe1LkY+rc3k9giyzthRD9vGP0WTwKKB5BGakMex/F5LtK/lYmt2PfwVpqtr4k10RaQWyQFU2/Id6pBLlKIEFDENLMs9j/EEcwtuFuHrxAw3MHQ5PlyNUYIK2NOqAuRE2fvwE0BH51QCFbmzOPbvr95JhbNe4uXGqLGeRYo+x7IPc6Id7ER/ev3H1qhrxxS98Xom88ePXnOJ99syJyxcu3t/IRlndg6dPn3ITaKq5W0gnMhvJTKtx81vaf2P/wG7cvKaq2mzn+CydzLZaU961pVCx756ZOpDFIGqiRb8qnHH4XdYGmaUXQrxPfPxleCxSstLcEB5abRVE7bS783bslJ+7teIdkRwrd5+9CjpNRF9m0MRZ/+MbdghhzmINo//QURvc5517w4yw3d4xJD/84at9Nk6bs7ryv/iLv8gK8Xru/Lv//X//33/ta1+zB985P4YLd09MwSMuJaIKw0y+hRjkRqLkKvVst1XTWKUc4gRScw0gD6LoM6GQfe8rxQQgMKZ5Nh9YStgaShRdAj0NOwokocJTXnoFooslpzyHDh6EFqT+hhSxTH5x2b4CxFhvwwSXX3FFNKdp0mdpaXQSglwoRenKKQ/hgAokDMimms+cPXvhwiUJwS9Ecg0vFfQgHiQkuk/SEiiKQ2HAowSkDGKm7oGkLS7CE/RD4iktYLmLZGrCTeN6phhLhlAOlfveUUV2w7Sa4tmz13ZQU2K7TLdJFJJmo2c79AjneHwVnd/T1woePTp8e8gT/p8CAFV/HTxJIbVxlNYTqP4Lfh1ZYsnBOLOR8zDeamkaSo6ZopmcpEmFU3vab1P2u61AoWKUwqaxsswLwGXhDtGanHE4+OH9BxcW7e2lElfdMH/7rgvILSWz1Uf1Jvw7Jh6yBpyicenyRdjmZnojyvSxI0cJ2OLBQ0eOnzCcXzbD6uba3ZuX33u4uUreRHFGVBSY8ScDinunMvzv7q7ofG0VdZwh3smpjDwRMxR6cl2mJF9O5bGdV86OAycUpYVKX8UQSgq6Xdd9SLjo/RK8mhwO78iwEKj4ufZLaHBiCUy7mukUJmtaQc9xtyqrGrp1L/woLxkzSFeCLe4TTlpPhHhFiuZJCZXLT6fbJHXoE88BYIDhQfaAPyjHzZhwfPRsIis8+CpE4kmu8TQSn0QeQtrT8Ik2dqJz3jyHiBWWhDq8MQ+oxsB+8eFxot7bNcIhRYHtN168436sMTm5b0ivVgJ8KDD4lg2Fa+zfCbSNucOZFGwRfwLH0SMDP6m8Ou5/wBNjBlZgQklpeNXZGSc9NlOK4oFynrakiT1/yXjarI7bYAJpZvrZaycEuE1nybXe9tTcpPLUcT24J4qILSTEwbnxxgLdZrq6467xQrv552ZmLQPUkO+ZmtBUs2SnJ6ccCiSKVDwbFWK8SkirBy3nVUXoJhKYpIXILz/gThSplEODeUIlHBINkIvAeDprXkXUGhqq17Ay/Z16J2L3VbRKyys24Jl8cEpPTtm2FUpE84387hK9fuNtR3ku33Fq2X02TcbLH+08cPiQqgoJUsWSLuOJX5PXlHTS6PcVJKdl3JeR1awv8tUopANRWEC6ojJqI1yGOe7e9QlXza0auzDOauzS7+YDJ6+zevWhHXw0vePhDBvbuLQzA8yC3nWW0NqKET0RaUSJYpeNdiixzpmDFt8Wax8nVuiS5WLHsltA7t7jSGXGlTvUTXtO7tjtxDZmOvPGdESsZF3HHMlQjnQwjyPe6qiGIFuq7AQwcB3t16Um3S4IMYTIEcffxS2knQISqNQClrJKRctPeQRyDcMzjhQhEcGwTA/eAy7A0cPXAbKD4ORRc1VLpAxJx/Id2wkZchhXpR5qod9KpaTtYJpnMVBpe+zyZrY5d9XTzhYQOgTKyhLS+5jGCOrgtlM4+DtfXuNSiZ3zkBRcuYBgDluwkehiT4bZbCrXGakmrKtMg6Gn5Q2krxL1hBxCReATwQNP6kifQEMYIpJk8FyDTe+ddOi9Lb/s9a9+9Y/1q5j76suNG9fpyWefM4T+NBuSxCpl2MgYj4Vw8B88cPjFF1+A/M7KXYvwz1+6FK7uyDE29spTFy2NlARK8mmnNTXG19Z8sgyEzKCWn+mLYNkxHJ9rQ2rFYJMnIprFVZVIuArbWYaZoSg6l2WFgHxDnK2EHKEH/Xf/zm/D+t3vfhf0j3/8I1YpMJv49d0/+fGPzc5MW5kDWF26fvXKd7/9F0a4vbph+F/8v/7fjHlj6obi7Wk9f+lGy7dqRtVADqEM6FFJBd1i3bieRYRes/Z9Y406cN4l/LLBcJdDwwxCPJ2B+MJHnmd/o1aUpTu3baQABglUAFjwn/3sZz2/853vBGBpibUtRfqRx+D6SzWEj1pZliMc8VT8lIsKL1EUKkI0C1F4Rl/On3+PHzwVxOamsNR9EgWJAvj61/+EAjIzoOdgLawsAEYPvisYmfKUI4v+PaHFemUsUKKeQlAuO0YXdLdEFIgAkqfY0AYASeiUzdMnj8uU7OT67J09tBDR9R+k4vTJRAXgjCzbwGYoZWI0Utuo+gkVIhOzRF9EYtCvCt1X/sE1TD+HwL+K54NRIK7A99Xzvwqq//xgqDlciuTUM9yjJj0M+leJqLHJrCXQBdBTr1H5tFbATP5qyap7RkNxpMKTdaHc7675WxHdov10/WracX5u2gYP24Fc27fmmhkziEz4h1uWhNELa3cDv2bpz1LusDz/zntddzxpGRvHj504ZcXq3bNngRMzp96BzM3Da3cJzcwUg95eBbRbWf+IEJjDzGJNsiYDu2MfROWUqCRf4xEXeRlES8M2YclTJn5lKYdkgAxjmCyj9iUMKtb5DfcwIyZ99o6lI8oRP09qvT4mcv8FiT4JJglLLMGaG+90vbN3TafnKrVaT5KyKTHOzEMVi6Te57rpel9QyJI8AtK+Sq5pL5iRxMJZaKvl6XKsZ8F7yG+89eoJVvVN685p64J1dG2Cpj+o+lOI1DJC1X+FIqhyeFLsgGLMqI2HnBPYHs9GMkI1hJanwR4ntO1rBybFwtCvDS9EkTSskA6En2c7JeEVc2BsfBRgsLWnIYuqqgk4kJ0xlS2z9DXvgTmdeqcFmKctCSzJp3r21w97dkfvw778hLDKV5r54Xsnup3m4Wt9Sj4oaaSqVpRzf4WHxyCsQF9UAiaHKmxGvrIc4kUET+1z1DtIzQE/TztfDS6KwkhVN5mt6o2xUsbGzNQ+wmyHoz0cDNmYH3WcLv1PV0sirUDt3IuE7d7dViz80hWOEp7OFHiu6WniO8sdIi5iUOIVbT7RJXJHaXC+yoUGzg49w1VaWARw8GtBRHQSsUafAW7vryYSASoyJO+8947Nfhp6he7wUnazXo8zT+UjO3km9ujnaO/gcdgZ8ozHS4Xjb+agwQbUjzz/LJoh5DZrd6YGVIOoZe9MoVzF0EEQy2kilOf+QwftZbxzd/n2zSVGIJPMfsw7t25b1GhCU4jNKyTS6IExX3P+onSj3GP/K+tZ82MgVoouCcYEHgD4Y9WlBZJbNVqPKkk/2rXHyDd1+Ejfyl6vR3u37rv9d/cDOi2aJHOe3UhQLmReiKabLhiVXVQ/pZkMkgG3tdQFLQhLEUui+a8IOrOEQGC/AlFH1UGENbBP/P0EwyO8v7a45mvSD7yQ4WvH8tpueOVxnISH8DylVUMqoaHG+wMwrrDgANnCUWo0dQYQ6YkEs15rDPSeC9J2OvZBHGP2j+5rFeyACI4okhBXzrv8J/j9bvjangYvnpq4tmeul1Glfy77po2MpyVdO+9q5kcgp9RwFUxXky4I4ZISaE0HLuK27icWZfYtR/unEUwPVg+G9a+TWH1pXUoRnaa/fHtJc+zqupPHjtdI957nnn3WeL0KkTVp2lCjeht26OXEGqyfn91HdVos4zzAG7eW9K515A4cOOh4WdK4cmfZDgSEmROcmZ0WUV1TsyAh9uoUZcI+9IrOrulIFVG9QA9YGQRfGc2Bv2B8onvm5+cUpVpWpU8AHoYXsBt4BmHgnKBjJeysYWYo6wEd+vSIgGjaCMSOnSxd2kfyYoFkHwMW1yKW4yeOQm2Lg01C8KhuM3MH4ymn/0TFiOLNImZPiVI3AFpzIdRXaCTx3HPPQaVrJcO6E/pSSHfNlp0AiKTvnKT54keeP3/BKqDICmohaQnGC9E7q4bSZRDjIOFkGLuZ45BL18SCvg1szHr6C0NlEx604bLNlMYXbPAFgzbEw0NlwMzQF6JTYTIEc2L958bEhyARAzkknmA8cRz9kPNIVM8B26k/0ywuQZSuYoOcehVXutACFojDnvotIiKMmmMFZvRkYmbNft/Fxc5y9SwPwEk1oU1cZ6BnBmDHo6wyLMmGpx0wZYcwT05gIpa+8BzCfRJxcHIx+N/veR/Y+z/lDR4kbfd47cAO/2CU/7xD8OGDWW7tV4SzN2O9Rr1Glfi3c1wEFZFWB0dX4QquNhMMj0y6L9y8sMub90wtzmNa7GK2vrF61e3iubcsNWUWHNg/tXvXrN2rJvXubWa0QGdgbW2KECo7cmuxH41E7kiUA8kMU5F/WkmvWB1ZPHAws4kLU0ecmXHklA7tmnsJNu46A9v2s1iwtfjfIXeMGpMCTiodrRQqQ2EoGiQhr8Wbh1OmnFU/BLAzRb90ZkkZ+O2WuPCKopPsGLUwgdAWx4JEKtR0fCWfxLLT1QGwGDJrxluuEk8XS9SMuSLGa0NS1roLWkf94A+1IWFuyO3PChpjGMtt42zxFybeQM/2uCFlnLpwJBX5o1SKQ8itZQCuWRjXuI7l2TiHKEL4q9+EhyHpCZiBfuH9tT1dEEIaYCD1ifCOIitlYY+yPAoszoBvJE3JkBwxc4O90YfsASDmsXJipgwAYnVEIVL3UYeqv0LFNQCPr1ysojAmW5Vjzj+mpQH/0icO/7Q4ciN1TlrSLFJHjT3UTU8/G6bz0uXVTBDCiQ6gQ5omIcIFEjzFrepxVt8UeB4+Ce+xKu0aXa0mCoeko0DpIJott35NZoq7GyDIQWoZqRAWiPs4tnZa1LubvQSbk0AbLZpb4NUUbQrMnl1rmrAhU+DbNUlSh4cDJhYtweN1yBpdIRwxPkHY/l//9V+nPeQFbQCMfBEEEW2c3bx/j/HGVECA9vGV1370+o/fuHbjJt2lVOetS5yez6r+7FaYcUmAnZkMBs2cphnHdAAQRjtJCxKkwtNc8hVh/Gq3RpDTyOKPdNnizABf0YkeUQADy2FmxCGrTHbojmSKyQKEpduKZ3lpg10lxIiBGdadM4+mdBn27NG2iihfVJoMCtEQGzmA0F5J5YKTqJJW6L83GvnIFl8rvB11HwmfNM68a2JqYsfUgw2rw4130PCx1qPbSlwi4qOKUDpk54T9Dngetj/cMVzWmV5ftQuCu+JLGgI0yDXnVRTPoogB1+OAIxhgHHifK9k8OrA/WMvZLYvXJD12mDz2Ju4QXa4bQ5419t9gZI+nwZjaI3jTLDNzKlnoVJy7J7UHMBe63M6CR60CMyyfxoaDJSgbQyDLka4hcLtHr2L7K3/jGGGpVwgQYE4Akfdk2Ax41dDG3NHlK6wv10jqa9rxZgUx6HCyAQo8ACFdBBIVroCOHJx/881YpB/7+Esvv/hRxjdJfvGjL9gJr2N/a+kGKXKgt+F58OS69QDkzL833niT7E3P5BZa988w0K03NwZ98eLlrlyhTi+mjEmpQ0X+vaqScsQQhQe1SMJsTztkbtzInICv0dNVfTxJtcrb0dU7JiurWxQ4JywMcuYQjCJ0BZtbyBaHmJt1CA+8tiSr2HrUJ46fknML4nXuWdgWJDFVb96cceLnocMHQGIQTjmWUBXCFKvvzzz9Ecqi19Z3jWVti3vlyjWvPVLeGgdNiLt1/bbyiufWLXVScmop8xpJkJ8+cRLRU4v7795Z/toff2VlbXV+4SBd5SvWYLGMcNBiAfqlS5PiL31hCaMUz58719oHU3BEQvoDIiIeNxUPYuRdKhAaTaeg3YEgOYzGevufXMfLLvdN3o8fOfr3/u7vOMHgz77xzbdef+OLv/wlGYdN6rQn5DxQSRcZMNNWkMgpbvuk13HwyGFfUSKWr55dVNgo+/yobYSKwMGjeyedPTC5e3rh1mrmQIBJCCTmoBAfPKXo1bNoTkWVKNeBctokeYLnZNwTsE/ETXjD8HBicULa88QT7BMh219FV4JCxh4vAlolbgf8L8v/IX0AWrVyKb/y0jzhNRik8Q7nKT6mSD4VQEZuNATaqSoZoDjJYrX/lraxz7IaHTv+c1IE7h08sGDEzzq51bs3I1S7d1morzd4+OBptj4J4UgEabHclrBBFKuEIlhf9ecum8sXz7tT7MCR0xN7p2an3UDs7s3pucNz8wd02jcPqtpWOrv4dG3VcaI6BqsG5dbW9++1hzckEgCuhQQ9aplyDK3lAlGdGWQMJQ5MnsWScaS0jh6VfnZCCzACpOVsjmSycnBqRCWYQHi48BA4My6TB9lAIG7D6wOY8sqkb8qg/xIDmBJIQh9w29q+x99icUuwDO7Er0Sr1MA0wSm9slOV96hqPI6/zZfTaSLr24I6/xWAV36Tq/e7DvTsfAW2MMAjBLMH8DB1jAFQ1enwKlHGDjBvPxt+eG2QpJIEEou3IYdP7dkeKITsdYnrAFhaUdFHcZ+A9Ir/lAsgYiPWANCeBqiU30d2p/sf+dzOik4oMjPqADyZU8BdIjzo7KRbnmPYkTQ1tfLeXJKdzoJPGeAZG/Rg1Auf+is8PrVfu5DQst6agT5J1iZAa060MmrfmuM2qhu8pvoW93yCxCera+LZuVsbDSMy0KB1o/ml6KkRgVB04YGsHAnRTlVCmY5uc8Frh4DhukC72oIx6IVU4XQIMH5DV9o7w/+qJHsFG6XoCTPTf+nWtYUFh1/v88lNoGwDNx6KrrHbuWDND3W2w/omqxvd0yHKkUMH9H4YOtpotXbfzNTsTC67vLN0C+UcQTXo6ppVBGijTd3rFcggCrV3KNQ6gz+wf9EyBPnV/Nk2kDNlHtw33v70U2dAwmDDwOz0AXOk16+a+r/uXhXLfezoWzywf3Zun6W0Bw8sumXF5mR56QkEGeSMJBugxU9FIEWNOKrkqF9r6Cbbr5kK+jQmHaMIbIo33WmD+8ReUwSbpiF3ZWw1RpmvVXkVShQCiUjZmmyN7QZtMAsnZ9k05dKVQX9WjG0jI12sCR03x9CTiQ7Z/oQzbcS26l/pJA+ST83N6JJKF+lqMCtP2x+VTcBKhIrcUXV4jK00DyWYkMpilVqMCnnYu28+Cj1Iqo5k+D8CSW0wDXlQElNFeKa6JmqALIEVHs/jhECPyRs8/bW+NKooL3+pOGllMoqELURdg/No02HFru1JR6sxYwu/UvbaLALM3wjriYC8ypS0fGoZ8xRx/ISw0tpx3522Tz115tOf/LjKqJqoC3ayfvn3/x1BZfQ7aYe5Zsm+dlutsSwNWot12XJQOSHUKLZRMlb7rp3Zbfzqqz+yx9WF2Qy/kydPZ7FJJhsYcjvN2N+8md226oV6JIO0DgoZk+oaB+DQoSMA9LuYAToSpFfuAHMtxtC2rRjL8+BBfotUZq7euDh1/SZQt+AcPGKl+glrc+x/mHLHxr75w8f2qfzf/ObXX3vl1c2DD86fe+uF5z6CL0x0sxjG4NW0GKmZMdmyTeiFF57/k6//++Yds/va1Ytvv/OeSuUQT5tv3njvnSsXL51+6uwLL+QcX1oj615uryBRlgyN79x1hKWO1zImFYME6Qm4/mRy2iqgib2TQvQ3jhqHWFpSD626cTtKdx708yksuYJZGaOBwxGpKOx0aebc9j3t9fatJeNYLvbTiTfhcv3mtax/Zoy5k4kpfm899wsyvnbPvvDcU4qWg+HP//zPof3KV9LxePrM2Rc++tKZM2dR/tmZfS9/4pM0mrzsm9u/rjdnkc/enIXnlE/Lsp3ZR0eqFUIMSBqXFWLi0JpOi7MFwi/LnjoVcs2hHBKCYg5EdnASfpMhJmFMpD7as/7epeu+yovWgbyK4imWcsyT2nEwgjkAgxNjV4gj0ACEgfekLr12XE8DHrAUinTk2w+1EE9wTz4/RP9AM3KdES+Dpz7QO6JRXm0oj6H/C/+tIig9mPzKoL+H9FzGOGNoFacyIISFj+5t3DNI4qIAGkFRWOohjuJQp3CmFhWUhk0ZMbmis5yns7jXHJ61Yb3Qa8PcnBvtrTIg86oIm/7IISMNmQdw6aYN5iREFyAq2IR35gc2L1+6QOxIEWFbdDHOvEvDHbrn9J5Z0m+Ubm7/IQtPTOxrLO+vr167+J7GlczYo6B8SBeCZYqKiJhlgIcGnahxipKz8fC/ryxwwKKUI++yFpHjiT8retg2962MVfdpTGDCM2RvXN+kbfgUoz8/YWmcddDQ+gsxkZ90mIysGecB4U/PAJiv8hwnfvgvGNDjp/n4J0LyVWqwVYck+Ksq8SQrRYBnu6IlqbTTEiZWphweP009j6YfqJY+S0lnSiMYDngYgsUeqWgjoZIXtoHGUsXEB3D1THbSqiFMWpWl0WOU9Dioc91gI7Lqp8PlxVv7P/A1GYHmia9CtkP2K4pdeBHO1IkechvZKNqeAG54JeugE0JgFK5CRkyTKa8REaxI5qPxagoAGt1iVz71czvWD/VXVfOl8KRzGKiSgvyavvJskUlqTOzYJ+NSyh7M2onpJFz1VEY6hJ/8eCrRXN8xYW2MUsAmZ/+lYTC+loVNSU3mAzex2x6zyEGQxByJLW75PvtVOyWESLf+L7lKwTNFGCRUrsroq6aEEQmrUENGMW1xL+dr5cQ8sZJ0jhiOkonoPNppGeCd5btgNO0AnBTaVUnVJGTqhIHqyl/M0xp/NcdIoajrniNbU3Q0M1A4I1zwtLWt0XGqh2N/2ASaIeubdTWyT3LjnkMPXcHHStZYX7x88ZVXf6Rt0lJbLGAdLnNkdU0runF7ecVa3YlJaxdzQjfMN2/esGbaQIZ2lg3t8H5Jr93L2mV9eBy4u7aapcgrVkGsbD7YQtKyYfvVNSw6ffYpSBhAEnLyJv5MzWRrrHMEYXNliqQZAKX0ciYSnERgIXcDHFAKbCBxZQoZEtIfYLcoWqqTMMuXu9hR7sBQlxZTR/zG1m6lDb5FhyzOLxgbnZqZ3GUWZi6TFTZ0PrJllIJy8D8dnuX1OQvIwQnGHfC7jODW++pWFFkkvRoDJxZIQp/MB/w3ZNinwe6ZjA5UvCqD36jDLPWxZpgEJmTQEgWzIzeXf8CR2wy4BE9b66neST0jTJgStmDCEI9AEb96TYsf8710BUpkY1QXOmroz9epGdLu4CVs1gZkpqgZrj9E6OhiPQopynORPaLbbLiUK3vWJ8clCXKa4ZKxg90M8HhGIvSWdupnAwVCKk1mtGmqX5oj509P7NFPJgzaWO3d3OIMCcHhdrLJ8Uu6EardqEzy1dCYppJ7g2mqgLRAYpTMEXqvZuPFIvxG65WdSb3Tzz996MCiunTr5g3jZw7jIJbZrLvoqNDc5doNpRW7hO3GzbtEXt/RIDiqb+f2nrvO87h06YqOqBuB2HjM76ee0be0f9WVtVPIUAVaYtFMJjkKgST7xGNEQJVXOxifNBEMpFMFeefcexplt2RnCdLWgyMHD83MzZ45eWrx4AFax9mjlu4tr96duLV2/8CJs3c3H+kxOC9nZmbjzfduONvr8IGDVJbdpUePHrlxY5kd+YlPffaP//iPf+1Lv4YpGutPfuJjb7/x5g+/+91f+7Vf+5OvfPXNV17dN79vfmbf66/dd1qoErFpn1g4q+cXP/85x365r+/syePszb/4zncx0e19+/bN6QarRbPzO3RHeC25cSSq1c/8ChPHbWJ0ex/7Rt0+dea0wjv71FOyd/nqJcp06c4tFZ6mceSq7hZ2OApFrbJux9e2pegsJj0wiVIBb/z4dUuMGD36QKyGC5cu6WLtX5x3nSqVT0fGTLcsc3PjhWef/eIXvyDpt95+41x1p777g1yG4Ebxc+fP02Cvvv6WqYyUpcpfZs3Bw8dZ9s5RjfV/f9OGJwrOFhB1m5BTc8DUOwK1p45z0mmjDZ1EduvGFSWnSlMr5NV5UJgsm2ZRdYr65rW1g2ZIlrIqmHLfvff4cWM/hJvinlbS/rRkVX23DHuaC3DSrhZHk5RwFVltedzG6xtsNwhSrcrK2rF04zpQfJARO7j7GRzFGeH8UlGh1W/VRtOBse26rrZfCcIpv9GPVYFb42jFZFBgaCkVmXRT+4IHSmSmeY7ySv0uvdUo3/fMtw+4RKZ3PvTbB4B/esCQl3CmtGGeNXbBdicVCgiMyqktIedj+GR6gJeNGD8Ea4yBVpcnb+Se5+GODEUIwHOhWTLKAuGqpHzKV3WJDtqjCFLOrA1XXZoFCpiDIx7QVlYer99ZuQ0Y29G2b3byuVmVJcsPaApi7xA+e+X0bi033bHlcLGHK0uXLp9/pHb0iJpOvqm2zPlb0rrL3gOLAxZ2Hthx9ORpy+shMQFoAt1qI8dAGv24t7FldLIGoB4ylZAv5qSLzxz1ULYO/mjXkK80OXqQADCPrNhNxkswIhyy9EiTed9dAAC4GFPZz5c9Krx5VkcxrCAVPhKhXDX8YHbugJnWCctv6eSHOy9cuu4gJWd8pCwyVzDh8Ow0pJFVYgqLysPwD6KUQWSl/ONnSslfBreSKvL8wBaE5fFs1yH8rgHyRFcMRPlCl7cMRBXlaWVTgqHA04kamKvm+V81WVWwM46fGgRDEOrZiYW/1oapJwjkwi4OFsgav7f3O8wPVeW2eyI4kkVbReknLpFOBdTwnSnc4kCGFhmXQkVLojtt/I25q2ht5ZuYzsoHqEgdzax9IirkRrOn6RWujcd8sg2H5mfjwaYGiUoBT56Z0SybbJRkypp9uh+TaCcpQL8+Bm54JvkPuuguLsgVdUbnS3DQW6IS9koedhXMquPdafKJa8zeDXb5jhw1sysCWeWc7K25iMdyiiwor0BGPAyPdlHg4jq/koGoaur77nnomqeHTFfj385j0DfXWRBeZZeVnzZpOUlP7hxBaFEv08QQOFzWeMc2KlUn5WjknZNOs2E4rsCfWfsMVaqEKvgkQ+rhw7sW+TFW9uw1XQeDKzjsbpXx1JPq0fmqEMFaB6jtUD0MRZOt6rNnDnnj7jqLRaIs8vsPssJemYqrSMxvM0qURY1cLsBDx6vox44fkTVi9tTZ088/98ysAfepTEJa6DxVuxQcPKJorl+97AzOd987f+X6lXfPX3AM+fycvsyiuck333pPPSAPOgCasBMn3GN4wLgVM3tx/z6n6imZuT1z9hddvXF15fYd3Qanp1Md3enyNDR25Nhx0rJy15URmY3f44rN2CR0mIXR80qWmbmO/1YBOalgZp99BVZTnDt/EaNQK8uYU5PxmTI5f+ESSAy5u5qZf7SpebSRTZ4G0fRkiCSTfn1t484dK4aWbXcGgxuzc/vnZvcrcXcCEP7bJkhXrm3Y1zBjyZMl0fc1ATse3kPw8vry7skHMwtz9OXa8l1dZBsEmDEWJhJVspmKxHlFXZQB673MbuN0aVVz10poS60rMXSMHznUxLpozD0AqirAiajYjMEA4yZiJhEBHQVwpSKUJOaXaEdhSCuAKXT9ioca91RoVQtwdS5KV9VAzcMMRkRhJhpHN0TFZweMulxWfmoNJ9dQJjvco13ku250THpRd6m9u2mi/FVNkjab3rnV9zdWHU9nzkuDoDBRKcGS5fS/xQ4CLrOd4Vn+6Vkli3kkI0KdHyCVYmvoxKhcsBORi1m8un5k/8E3lt6iVy6ev2ABiFl0LYUjqVK5as1bxmZC20PrKEiJym78CfKbS7cW5zOxRjh0wu0i0GYZv9fB1gc2hK2WaRlv3bz8kY989Mjhg4cY+laxTu548SPP6VvSEpjDPod6/0KW6Fy7lo4xvcJGt0QHZ+YXFgzvsDyvXnHI/hqr+/qNWxcvXmIPu+cH/fhsqBoe4sdPU1lxgzadcxVBT9ukHPVBaB9OPnr67DPGhI0DwmkOwY6L9ds3NTJUCC3EhrOWSk9i8eDisRPHDXkv373DImWVUJux8P7J/+3/jjIrt2JDLN3BFJlXVX648Ro+L+YGPifSXDFIYbbioy9/zOj7H/3RHzl0UEeE7XvzxvUffPd7zzx91nUYsuzI3vWNNTPy+lUkDoCFX8YS3Xd69PCRe+ubkMwtWHZ/2vAiu8SqHZm8ceumLQTYp8eTiTCSYd386irBJGeuC9E9YNzjiJrjqCJdo/nFOdOIasvhg0d00e1xtJ7eehrLm3BHC2yiQDhQ2VEM+gM4iJn01AvPPqcfJsNPPX3m13/1VyXK+AYv10oOvL4BeOcU/fN//s9de4pC8kFLwkwvHDl6/KWXX2ajKwBdOErEbW3EAnlSfOfcuyhEsOzsW1igEIWz5e2snJ+c353rk2MOwk8QkfbcM2cMxILRgSMQcGoGbD6uFdd7rly2wurmjRs3YcOKmempfdNTFNba/eV1Fs6OXTN7Z9QLenzH0UOYAzNH36Ul9J8UV5i8CwfJ41lQDfkh4bRTpuv0m3dGmjM40/dWmpRAvY4ZmUzicVAO6BpzP8lxURL8hSAeLrWVglGrWy2RklT8UBkw4eUJ6H8GbjuvBnK2Z3MIbM8H4DHIF8G0U7JGv22LkvDRa/UMAjDi0whu/Hls7/lKJYdF0ft+a1chkysdEk6NSKvnvpLag05Zqb/Hjh2iOFTwe24SePMcM8LohrN+sd1JdBvrbJP7X//aV20QIPkkjTATThLIzHTl166puf0q3OHjD7RsDhJdXnHc1LXLl6b2TKhdurKMeOMJayvrCLBvyMyR4/psGzZJmZJNLuF54ECMLcvfae5qZnQYNBUqQj6zT2O5xjpphpgd4Sdg/lf3syymLJhKj8HkWXKvoYv85dYuYzB0bnUdw+iBb7ClCCSaoKzYFadC6tn+8RMAtEgYF0vqS6KN35u27c8M9QagWz6ASbyegruBfPw0ueDEkJqc8BUtj59Y50WWKsXR07tDT9LMjZ2vj9vdcWD/Uno8OLY9GCnc9pDCn7omsGzdEfIG6/DB368dnb+k9330bMfcM1si+wABAABJREFU/u1xh+hqfKY51PSwVknHuk5RcLQWWlgd6RsjJhZHcbGfARGdJQKininKChl9ys82V8MgCqH4QAlmuUEMVkYDzHMLs/xNpB8UEjC0zc3PNbUkViUqyWVS5JZJ9nd09WQGsHl0mKlinRww0ZI1vqjKqV+e7B5n31npD8CZ0mlMtYB1cgNI1wSnoB0OzBlMnpxccW3QnXSWQGqVjJlJ3aA+YrRWWh/HBfiqzsoiTlnRoCMBFQDtGmfAD2WaMJ0FFpVPVDRKOBjoA+2FJgy8o8dRbqwbPRodGWHWgEGqEFf8Sc5sBWDEmLH/wud/vj+lR8+OCBkb2iPme/A82nr9jdeqA3CNCfEb//XfMEptNex755xHNKW9hv/okeOSmJme83r91k34zb7nYO06JQ+FuNE5PXriuIzL6UBVBi9W1x3rYS2zndSS0EG5u+asoUyVi+XiMFf4oDwjtOlq7lQAhjZh8FU4o9wEp+yYV/eEfGbLoG325ulXE4Oaa3yEQsbMUO4a7f37D7gbQHFrWGGGjZ/Jr1dq9N99v+55d74zyy9fhaawJm3mJZo7WZJ6tzqSDw2rG4xLTQMQgzUNdPru0RCplTpu5FMbURYzwZWQbui4FqceCFExKPO6UiyvZacGoRz4RgFJIOgEqNGEXKw0+5WGFyFqWGoAAOul5NTOrkiviuBLbGlnUqRnkMzoGBsdhCJaWQfYmn40jJggddWFKIqf9LqW+ZVaqVbD6UHrEspdD+QFt/dMTrEXrl+7lrxXQ48wIuRkS30DgwEhDqpSR6E5nIlJILCd/AhpFyWUnPnJmg2sQiQwrBSqrWDtre/aUOnIuV4SUdEgqhRosNgs7VQuhFVN1FTp+s8OnrQ53eSacrMsRzW0noU9xmlaFuZmSbsxcbbrrevXDKa56+bsU2cOHd7/3HPPugPLCnm0GfS5s3QT5Omnzhw48NH3zr0j+p07t9VxV+WSydRu1+xuutnzikVp7CDMWV5eMwNw5crVrjJ6hOBnDyVFdNoo4+AaeLTLNp26SougaqCtO2KLknCVV67VfYKqKlFU128u6dtowc3awd+jk4a/WaT8xBVDYLZOieoQOLF/0b6BGxfO39HnMVcp+TSlO3a4psrSJQN+b7559fLFq4cPz4v22c99+p/9s/+ntB12iS5DhocOHT52+PAf/MEfKHUJsOmJ48raSoRgZ+YjLH1hBNNo9t0aRzl1KuP33//+Dw8fOaGMdeWpGNkjVsZa1CadEaJ3+86ydQ4HDhySE11unR7duFaI6FZjDVXO3Mv8CJtbljylbg2iPbjdW4K8SjqbhHySKCmRf2cEYS4+8puAufH970Oio2JMfm5xwZZckG+/966vR44f++jHXjbOQX1cu3HL0KqpA6kDgDD6m6Dc3zJ0evRoeC2KFZAAXD1o3SFOKnW8kjvF02soKT5+hOEwwmCAzU6RKPUa+xHFmBiS6EZxP/mJXFSuA6aw9W2w9wffe9dgz6OJqT1zi63WAeAAhKPq8lhHjML8cKk076tIo0r1RDj6hXDo8VRzOno3Oc1DBSGznDYVW1Jfx6k3MDDRO7l+Fsqq2OO6nfbZApnYFAlXiYe4UVh5jTVQ2qC//P/6ieZOcvB4bf/2kIGsIXDwjKP7Te4qfJTN7a/vD38M0NHHz1E4zjT+9qj2UcmZTE7Bea0+QOYEFBlJEwhSYRGSud0Thw4etWrOmFdrjTIObDJ5QEcYEXz33bffeectoquKqX0zczMm0K3eZW5IxQb+IzOzJ4/RpTtWnjYWdtdYmaOEjN5pI6amF93DubFpklQrQkK0PGXn5eQX6oChn8FKbNBEqONaDRCTU9Mx/Sj0ciV1JXKbWb/IniVj1LpGlrRlugD2tE2avsx6iSp3IOyUNkhrirmnHCCr+jASK6/Amuft6WeHjDn8Ib/B81NdpiL+UzgZH9AMtAlxEIzXses8peo0Ye9/JoPM3f46fNqeBXh85UYI+cqY7mDPZpJgLJXzCmm+JRYu5ucDLkkUo6Dl53hSfJXQ8BziAeAvwCfYa8NrSjBfSy3002sGIx8/8y0mTnpRVeahTKzKQBFJ8sSKDBqDre1brAFymfpSmJvC4Tnwv4kXHv22S63JKD5dLTut0zQfnOoGP7DQNjp+zZKDmLDqndFVMBapQ2LLNACf+GtEOGhFV8s4w5WxHTOSYklAWnEI+1WiABCiTscYY3WpOsye8V1jkCAAcrE0EMNTQvwaKR4YiATzY8jX7Py+g5P7jQJqOBAb2uq8cNa5HouukjX2rIdPfOJjFjfTEgb17tzJPQaGvj2tXVHfxaI6NLVquq7CzPSsEEuZzVebaOBRrzXoCiWbFnYsIU9rZXzUFiNzI7Lm+PMd+yIDKPSqaWOBwe9VHrNr4EFmlvBCIboowAC8zMqUKCjPeR6ZSM9QlFgwtCqgx1Ci+ezSAcyBBCMcck4IzByEpqqYqAa3w7G67hekrpjrlbTFC4q/Vi75ajGHI0X1PJWWmXVxNYMwIyDzSWWXS5Tjx3mwyDCuT6JrwD5tAHlGBrbnwIXUroSQ1HR20zE1m5rObQlyfjLc7R2XdodsyPsZlUoknKnJlMfl1GIq0TNVQA1CGGBpMftHERN3h9JJIBltC5uaZu7j4VQmb0O3RUiteJOVHXt1e0K3/3GhOfn4iU5cqWSOMkM1uefXiJRARWb0hrBOruuCZl8cEkK7BTvpghROtTXVOJmTc2lYlD5KacQoH8I9GQsDkJXwlIUk2PSeMi5phpYWMEWZ1XqGuFRnGG25caSPQ7bTk1dvcAcaA5665qYQDPdbAIYIPd5YYAatzB7WcIDjfS6dv2AeXNXQ8XPKtoUnP3rlBz/32Z9hmtcq//WqUI+cUmOvprUzZPKwNSAzlmnc1xBzZPrLf/gHDhY1f7i2tv7Wm++8+ea7hsVNQwFG7KOZdPtlJ5XFfb3Tex0vyQaWhKdFOuRfM+7plEs1U7WiZxQaj1zrANSMtCLAT2yhZ8iyk0kXT592Qr1dAbSQszFZvqtSNPmg86ODctTNHuqD0wI5eWNGa931dXTWUW9+1vSEAjt86Ojf+FvP/E//8l+yEyxfsdDK7hnzg7/923/7f//f/B9+9ONXX3v9x9/74Q+W764gy24bk4lnTp09cujwN775ZzoJJ06edaiA2c733j1vRlLVysagzQ29LvaxcX2r7ZTKCXMVx04bkkcfq9c9wUoCR5SurOqlkU+51Y3Lur1JXD6sd4Ej3/zGXzz77FNKTvE/88xzWEm3crKKa2waVJkJYoKz+AXCg4k0lDOLzAbwd6nbF41ZCh5nnM6GM9SKgqSk7BimvaWIvznpaNII6/xbbznw+Jy1ktAeOHwQqRKSriJHMJz6cDKigCUKm0+eYIinLXLJ0c5cLEdkRVFmqK2i2r2yvJoqWX010an/T33i43p4m4/23Fxd+9Hr79z70WsUMYFIPakxddxR8CoCuR7rkXwkVakyY1c1+cPDG3IA6LiKIFWuTEyk+ppiSAfAkSDxo5Pj4Ya4PO3vuHkWGcOrclQBOTE7oeEZ4qoPUJ7/2IcU/8NQDBFDc+nfDtn+hLlfP+gZLJgPAjQ9Pyn8CWoHNgrn71g8UeRlO/LjvCIgLTxEiAATDKpBzR3gNbLUhKrn4CsAagqxpy1Vt4zcE5tSiEvZhH+LQDl6yG3mpjpdfrfHjeKPDK3dN+8+uXfm0Mz80SOnVEM1yg4lCuHG7bvaHfo/xlrRSRYyepQFgQ7FKK1d/YGMIJX1QcdpuIxliSVK0xkVX7Z+5zoZJHixfXKOexo48GPnVX7VHdlJmHUEmSUgTjoZhrIEjfqifI3wCR4O6VbbBgqHJSi43WPfOGT8mz2Oscwa7QeRj+Ee/w4wj4PK9wSG4atm1Kd2VUXSKtZQ4gAST4jeJpzbv4nbn7Z7RvB4VKDNmQ4UAFK+Gn5A9TgJJTxOK+bLOOkBv5CxJhhVap/aiQgzl2jjiPmN7kqKmnOL9FHcFWeoPrUuInMmyczwLLup3gWBrXgFEgRyVyxTKaTITxDSqJPIcknOqPbYaidarZxBckCcYbKw/yCF3BjoPXjEggQkf9csIV7p8/ZA6MbGPGp2y9ggSmh+aemuQmWEGKReMDxeNQeSAww/hPS8toY8FxUjSsT1ydGJ1u4Owt/0eMID4ZCXbn2QJEfd4vA0tfiRE/Wd8nf7jqZWcyMW25q9ggzhU5O7Xn75o2fPPs301TI64lNE63IXFk+9/c5V2IChrdtKxtDP/tzPO3ugj+ajMWTC4lhZoIw0l045pII0wFQLPOLafKjVa6qwCCrhyONkVR61nnKEY5CwPi2AES4vnm3l8ADgUA5M3iFJ3qPqNpyUhzbcMMbnk2YXQulqwUXphISLKApjMqV0L0wQArMGGYtkwtlEbCG0YSaq1tYYq0A3t3K2T6ZbGbbKjoyIiDyDD1ish5Zj9ssM1UyTrM2JdPx2SFAHNMqoKkw0TEx9cSlFdrvt0vVChDMsYqGYmplftR2ZPXVJwr1DIJnyqUWa4LL/CX1mH0INFxQ1RVwpwi2DlUdToFWJzC2hpjswrnScSJfMwitGY1SkI9oyWSv1nLEWhDVAE0/4lkRkCsJOrnBjYN5McQUoeXapaF3PsrqOddaMpH6aHzFobf1qprD0k90EHwWawR3rTkObN3hCRPAUj8yQEH3ftRGRcgyhQBCX/OJAdAUZsVHeN02dgtauEQZSXcK+F6A9L/fW7pkGU8uto6hDdFn9dl/ootvLbQZsIzvrTYLk5t1NvQLdOvjSPq7ZSn7505/+5NTUMwuL8x976WXNlhUin/7UpwyiE2PdUSS1hWm9kGolEC5VwOA1QTZgzXR885239YoJmpN+3nn7PRfjIs8sGZKc/JOM1T0Aht0JGBOSBFoaY+0JDKJLwtj/n/3ZnxF48kwyAWAR+SSBYHLg38ysDe6SNmqNBsXqiR5fkQcDxhqSNr4vBPKJE6dPiW+QT6ghZ6Df/+73vva1r9nxorTsYlaR1E17K85fumj9jHsAnn/uhU9/4tPf/d53yO7i/Kwhw9d+/Pr/8X/4HyzktciJKX/qzEm17ur1K3Y0i4oLzAuM+I3f/C3DivpptgS5/kCpmYNjjmO3hf522DCgM+0Qlys5LLi3Nsn8BgzA0mNk79TFSbKdarZjEknMaxb5z/zMz/zdv/O/AqkwvvWtbwmUeboR40zn6azLuVES8zWYK7M4aDbgpZc+dulS+lXvvpOznNR8PGUeuXuge3U5B52byOp8vSiJmk8lW2b3/vAP//Dq9Ws/+7M/e+zoiQMH9rPeMd0cgq+tgpUopkuLNabMTFMgBkxE0zkGBw5YL/HMU2eMvMqXiqH05EuBoYTyU4ouazM8ocdYXYYJVzeBNEk4vceaj1gGShQYbCKGzrICEcmpUXr/qrlPKPFsB4annx8Mh9/XITwYq2khLgIlx/F0oHf5isIrhxKO19dRULWj/KO0q9RgoERjFRZpTV9rQ9U/mLctBRki/v/FM/Bhu4e/X/uJsOYGzxAyeEZqfcz/IbyzM7w+9ozz2QU2FNvIU2URkLGHQY+fRDoW9YPRMnoMbzmZdYN3HRdHqNQyzZZ1jb7SOHun9lo4ZyWA87sMnj///LN23hFOU/zEDz2xe9Kw7bh1Y+nqxatC1AvAxw4fWZibt2DWyFr6B/7pUMwfPHb6aTX03Pm3s5He6nsdDwNAFH1au4cmyzVKirwapuhwwqO43RDUql+GSmxqPCejUslx7PCRi2TwMu6JDmmxnIScJKSE6q7Vu+bjGP7ZipdWNWNJacketJyFaWMnlrT6rTGMv9RvGunyFMiI8++DGF5SvI3Kc/AI/BC0Q6QP83Qd+UmxOhzDhlVSujnliifbEBKG0YfK4Paq1+GNyrM9pR4ex+9A7zydo87UGGLEjAFsHP4Y3icu5awtHTtgjae/tg5JE96M7oUEEq1yjQWkCPLWz+QoWY8b5a5fqpMHNUQCSsmMCExygyMH+cMqFt5MDkxrV51QGEloRjq1OBQpRUcVtx7DPV9VnMpRbHcwAmFmU7aqVPU6U8JFhJlHiErkZBsti3SF99nZgOXdgDOw7BRgsFots5qDeiA0vqbh8Almiz3h4fep2q6QkU7xzvTquVTwOu0bwcyLThcsDzNeimhALXLUfU2MkBkbMKqrbGhP3VSdjay71lTzBJWEDPa9+OLHX/roi0eOuNXHNPySdoeWsAPylVd+6K5MbZZ2M4uh61ANBoOidvk31SG6wTlLSZgQGmudHJTs2Tt98sxpg2+x0R/uPHzkIP0jrvZTEy8KpVVry41CHjeSxQmywKr5YPC4jrkMw2MnrN9ThsbPZD83DFsDPZVVABn/3h3bgFtdXnF0EiJZZrAt3bzuWB8HJLhAZOu+Efw050kWZ1wM/OD+pBG4rcgWXuGkJ775ThJorKVlxkcWF0iFIWT94u7JOYse7X3DK0xDGGBPSdeqxAhemG/q5tGDjd1RSYycmPux5KVD1hRrxiwiKVE1HCQRXD7L0eguhjB/zOEMjWQOQH9xvC0+dq9G2lPCtp4XWnFT4bt6AEexcMSwKS085G81aMCUIrabHJHo13+gJBsyk2yhJcPrepnJki3vYN7vgrJIrWfynlhxSdwEdLImsZqnyqyC3YgPYwrreOtvgaMaQgxuTjxa3biXXkdV9GJGkHOQFE6NR3R+8lz4q0qgUH6RGMbIpD/gKdbqk6eW7UilU4h3nFWT4nq0trGWm+J32MP+YO0CMcy9MdVxCK36c+HKxMThw0dcSMHoZ8arG/SBxKYmlzVyVnV/+tOfdsSl+nv86NEXX3iBbOgo2nxibUhYvdOhNRdJCwKuXL2ksqh67777DmykEQwhv+To2y11ZJ04xRjeenT50tXz5y8wOLVgHCxMPvJvIk734PPPf8QKGmdh6W8YlyfYnnbev/766wag2b0qI+sar1Rnp4EY9LeATY0+csi9WzlVjD2MHpKxf8G9BOkPcIvzi6rkjWs3JtjKiDPyp/sOVDWz513y133bs9taqMNH9uMwzirC73zne44GdPal8QPZMwBw7sLFldX1b3/v+7gwsTeX2h1IpUhh0GjoQHfOA96x8/SZp3Q7TKG5X++pp59VQHfurhj+l+4rr776L/7FvyDt0v3N3/yvLZlibSPe+LeTTGwHlGcKVGbKjKE5TbYyhSNMp06eNPxg6aFcTT07ZYsCYD0Hgsz4NhqhEwJAhwT9egVyB1J9RiFznKiZdvBK0K3xOn3mJCFAudyZ+qTL3nv7HXpEP5j57tIx4QDExfqWM3kkrPIs3EzNu+fPIV7JUSVwgsRSHlnL/MCBA3ZyiFh5UTz3nSyk2qZWOIzMQuvDh5Wx6CgXS9krp04Rt7PQjAqzk81unXQYqKzYfxqbHTsOyQsy9OtDj2ofhZOqnfpULgUzMm0COQ6OfwiHln9wYPg9pdLwgLlR3HgCKzsA5Gv4hHhkeELoyTWXAAThGEO/jgKDqxEH5xiVdFPr/yNdEv0PdUPckFX5jef9CLe/Dv7yYNGIde8Pf0zNTwp/DFEl22ADr5o/zfPmMACloCwimVUceM51OA/7xPxjy97GBn0zYqxZduV09NjB4ycOa69UFoN/euz63XaQKTrXkCJGu2CbyvUr1yGkSqgwIp3+7b7ZPdOzE24NePjg5U9+Jqdo5XZOc206y8s2H5itc2mZ1o6qR3YMrqznhjKnKKatqb0BkREyULaavYxGdohJMhCek2jwWuv7Qom4JlBoUET723eVk1IsyA+GGl6tHmZaiBbWoCjv4OlXGDqksXkd3PtLeAh+nyfUlWts25/vgxu/fDCV/rI9fLtfZ2d4HXtqTG5cgyr6KGtS73o6ZM3X7STB4LXxjJ4YVDWjXxuYv53XzuA4VgWXuc03zlMoTBNergkQixO7CRC9nVeGICrSQSvODxGrmhd8tfQ+Fr4YJIWk+ZzaxDcohVJxLCXg8lGmfjoEEi+iCsX2B/J8UAUEUk1RoGX2IY/GbqXNP0QhntoL8F3FAIjlq2beE2S/Ss8rzCpFdN2OA/S2W7uBeQEDkpZmHqubbH8homhoREGALQaFuK3P1GKtnmbKth0D1JiLl1Ss07+64yeKVDxVQ0/YtG5CRORQ4gkzj/FICflUfnPpmS7gGDeaKWNdPnHwW5Vz+OD+F55/3iv7CMHaF/mtfD00JS5rrgObX1zQwtouTR1Y5P3e+csSZEJghlU/bJ0+kwfPtMX75hY0fyjR8Clx3GD6WNEEWKatgY2MRMR2Xr16rcOljnB12VMuNh5u5lymGv43GKdBDCrb3hYWtJIY6FMf519lsdsQnguVGENFyQqataeywE5qhiS3NWSmRbbQQwcA94zOW6ziXBSDr/zMagcnG1txTAhrzJKl+9OTB/cvPNqze/0R+2x6IlurU6xSN7ztCjXI+YNpK2vfbQOxVd5JIJzBeMtLTHExtKOUxEyrXKPdpDuCmxLO2hZ1M31VAsxleNRTRHoPeWULZxKpxLOH8ndZnqmPWuDC1YaSQ1xFd9Zh5mzRphN15ILRTYRqrrcMtcysZtQ8kwRlh1S9JMnISsLNtHHlTjrtWsyiPB67kCEt2PRh3FqB4KRk/dPkLnM6KEMhas3kul9LwpCQTR/8i7CGfkxIFkRGAwlo9OnuVMa9IhNASXlakYwxseBzTq6+UhQgphIM5Ut6jx46bB7CYhGnRrFQFdali+y+JUtabJ9WTlbEqUYWneGK/v316zdJKUNcLzoCtneC1KnxZ8+c+dSnPnnligtqz/2N3/iNMg7vHtx/4Hvf+55DHSXEcov9XhY8daFiMjtJnU/MQkKL5p6Munl16drVG8zgLMVZthRn5vDhoxYm2TTa8owl1bwyLV0InoPgLUX53Oc+56ldhpzFL3dqMZWCpTnVJsv5HhlVt6Rfn0y5o4fsgUeA6okSRQO/T1p2VjFjGIVO1bXhLxMlarURCPsMLLxxgk0KcuvBxctLtrK46mx6xlFEOyRsfc5rr72uXt18622jd87KfP2N95597qw78+wvPnfh/M07N40ZAGCwstqvXbl54fwlisrOekPmL770cT0w4/13bt9mVc8vLB46eNhWWWXiVYV69dVXv/UtjFqbnZ1/6uwzSKcKsaCLs7SkGkr9kbzoJsctyaHV/xhBScm2eigvb775Ni2g8luhyOYGiUE4cvjQEdjNDOLj+r01W4e9isJcX3nlh7QGS8JOSDxVBvTiiy++hGV2bwCDH8tsApY7YPh4/eYNnTMea5CUPTynTp6hpFoOdNSYR0jKYqFta+uJtdrunCOnKaCNFQX+3//7f2/PMQ5TcaJIFPf0OEXksRZLv4JFZfihOwDdh4nGKCeDXPu7D6AmGD4oa6s/VuUat20gR6HFmeFVFoR3rUtlGzvSxjuANYw2iVoB9KHwI2JgrBaofktFloDSEsYBQl+tQ1WowRkdlOGDSrZbef7ShxX0lz2C5D+tG5gQz4hnUumE2jO8JuWCD1x5moEBfn/4CNFPCQ8z4h4XQatHQYOH3+AcPpMW7OXpp7RICwknJF1wwtUgYI6iKt1OSaa7IFxNpxnYK7XUmDjtcjz27NyZs0+d1hm4uWSBWa4X6KqhZwG5cru7fvf2yu03334bDVYZknP13Vo+dV8q+5z6t3DAadyqiRPL9AiMxND4zrLY8mfQlPWAmwQjq5yTx4iWY45iGKZR0Y+JFFQHoJ9qPLAHRsQQ7X8VQXE1Fr8aJKde0U9cAioFPZsa36vwUaEkobEkd3Svgyvjenj7yz0tB40T9IiebRXnL0fxfognMGgsueBPx6hekt0Mh1WiGYHL97wlX1V9H2OErREqlMbjNaAFHDitf+KN3GNzvDDC6ivgJJyfbaCV2TTTldlGCyrvlUSLYuEVE59CZwOkkS6XeqRAwTfc2LivN2mmJJvD/ezwWPqREviS/ULKuBFkn3knpORrdVaEIXYGtycbx6WLrlje9Koa0U4FIDyNCaSKM2TBuDD4DvEpncy6Qkt9wVIRO5vieuW0uJ4UO1J90ojo9PK0mW7kVcSMCuuBVM17uOFIPWPP0waDGM+ebdXDJ0eq26pdwg7/iZ1q1DYTaWzLwb5p2mCDX4649hejcilBLvl2hrbR7rp201ej/jlJ33RzGQ1aeRtjGSjMlKeePmX+W5/BsulmkSJArbvGnaCinXIM6eq9dUramU2O8755+44T+M5fuCghw5k6IV/96led/KP9On2KpXBKraQ6zAbN2sLriKE7qz6lniq3XZBsOVQgS3y3HE98NWpn37z12dnN8/A+09HiWARbjDFnuHRxATZt+qGDB+Q652EYy9jMbDmEdw0mruW4ir0zk8oIkxEjnBoUKERmxVI08sXT7NKfir0eUTSwRksZFTbnYCZjj/KbnnSHmU2wc/yWZ+ksWWd95c6y2cmUzQ6zmmXQW4RCzHSDmPR1NgN/XiMBbH7ClIobO52EimstS65BrO/qYqanoEsVMRVRXWOVIhqsJLwGvol7tLbSqKr12J+7g6F/7KznKSebUuf6U8Kqy8HQFMN/o+oql5JQF2EFWecfj6pijP9oaLx3im/qDRrDp1T2Eb2helyj62sAavezMR0oZdHhPKlWHIkLvOK0Mb0GiLM/wAbcdAlGOx+SBleLjkSBDpakiF6waXZY+4HysdgBpLsDOV+0KkgtYa05GZtVDD/t3W3f/JrZE2tQFdm9tVV9DwvdFub22VsuiuX3OgYbWeeOkAe5j3t3LpYmIeTHKe2mjlSWE0ePMfR1NT/9yU/qJl67dkX/dmbflBM/b1y9ZhT7vffe0dapCEePHWZbi0vUnRKJsXoUpJRM6g8u3bmtBwJA0sxIm2dIZaRxYocGVDOKQ4w90Xm0ubrQVEqPMgtUWmIJhxyLOkUVQSpG3ERBia3w8Eu06JfyKrVgu45nUqyl7OxMAKzrKD6dA6ZtTM+FA6or6/nXf/3XL104b33UxYvnrepxdjiDWx8AdmmwStEkq2xiy2s+9ZlPnTp1QlN7580VC312XTf0br+1DsqmeQpnoVoIeOLUKVbyP/0f/9k//IfTjgb+wQ9fe+a5F6iV+++8q2xNRVo45Eos4/ovvvCclUnf+94PmNR6DhQoE5oFrCYb0aenaCiTDTKjOdLaYYFsfP7zn9e7wBEdCWBygU5PHBNIcVABShujv/vd7+pIiYVlEtWvoteM7pMVgiWc3zyOjgEuY9bh/Qdw1g0C0MqyJ1SQ+GrG4G/9rb/F3Lf9wKIpO4Ax0xNaUtvsVhLG+HUnxJKQKPKiGFLfyinsbks+85nPYKx6a0YVey1tEm7WVdE4ekjS9hhEgs0p26ejJ7dh/w+smZ5ObS+zINVm5GIOpuaU4wfWX3nGMFE7T4Tj2wDgazvwuDf4ATTxqYYDdDV4A2Z4Gqa/jzHlWCd+2IRTTgUfQEq32vsRSRWOzlTs1jgD5p/qKS1bcX4q2F/745BLXBz8PwXLGEYGR0XQwOPwJ6P+pPAn4LDuCUhF33zughv43N3abuogEQsAIwDLNXBMIOrZa9yDjFNVRAzXmDBl0mqI4uiqg4cWRD+2ddCsvQq1dOuOCmIYzyljUzv3RoXHYHp0fen6rds3NW85VHf//hP2TB09tv/w0aMTu7UBJt+vXblqHMFZoroSdrqoKRoXuZGYhi2ZsnA/s+XFrodbbg7J1HlRrmVCTZvCWdbvTTehpDi/6UXa9UhRQzOW+PczbuDbh3qaP++P8dd7C/1/NfeTIJvhH8Sh1JpmT2zylNmSgmQ2gRrq6vuVn2WcOpVvRdLgSbxSDts9IC2r/GCiQhps+3MEVhlt5B8asQPfHzFxhNSnfn4w6qim1IKMwCcJItLFLDpZyHhfzgJSv4NlhCkDEIZIy3zJs7oMWEJkWNmxn0QY+EBdqzIUu5aFihazNZVXMMTSE6mi01EaaUfreKWugUXb9nn8NYTcOSL/SX88HqyBgCSrTfSuC48uVtdQydlQCnIzt4Suswuh3f1wt/m2ra2rEtPGaRo8QSJAa0X1wab9ojYZASqd07zuZ19lBv/Coq4gDx8yHWRBQgJlMPnflZ68DjCaNWE+CTfqbwujT7CpbsiQlgb0mWc1TU+dPHn89lKGDCGRKIcY9UuzqIVV19hst64ttSZhUmQEcO+sZbTaZQ2fNtHGv5Onz6Dq7DNPG0zU/DFrTp5ylHB2SBsIW769Yiske13S0HIIw4YQv2W+Yn12d04NEYJs4/GHDufoz4xOHj5M88ATa6kMGnGZ1b4CliMsyk6GqdhtAIy+Yaks6Al4MpJkCmTnjh9+GHIzx4PwU2n6hAyxYJNxDm1mfEBmzYD1kLa03t/YPZHBV+m2nJR4pN+VNUDGth13YNN2xtUtiCdM+oK5e4vLWDdRzBC/IfAHpcLypgIbfo7N7QR6kcrMT8PhoxWP4kUxpoJAl2cGSerpPH5rykuOkM2ZmZFFJCGHHJMfMQgFESQILQOwkBrY1amMKmQVEKSpIwLLdBdRUgTbcrUQKIK4yUPJG0gs6rchJGnlpPx0jJERPu9M/y3TZ5ZmrdZMFMIl6fMkInHmwfrqsntFoDfUg4ZU+HKiF36kJQfpC9UiqvQqMDG96vw2sIgRgeTdms/RSRgK1w2Y+yZ1dXJUq21oxqKIkOJ9/tnn7FOFUCzreSRr5RLRwjedUkssSkgUHtN/0hL8Z5552gqXn/25z/3e7/2eTa/W8uyb3etaKkdfOuRG5UIG5msfWXdqkxDksvrUOAPEFtbCTIJu3LplyQxpw1xDc+rO8TOswf3iKl9iTy9B5ThN5qj6xQp9+91zMgIVkWO4En74WZLNfxHJtiTUNZw3reFULj1j4SxhqCCULsJ8RZKBb4HiCsQrEm5MIUc4WyV2a2nZmKwKYFj7K1/7mtnA+fk5U36m9S38NQLhvA8FeefG0rkH58xfcM89+8LK1etvvPWO83MUtAV/P/fJT1y48O6Nm9edH+LYrxxMtrnl4HwTJdY5mT1Dq2OBrKn76le/yjDAKSWRXB05LGmjEabeLAHqMUVdpTfffIsWVv/1pSRBvVqbaG+xHFp9EJ04mfqpwFjJDs0U7lVHBVt5HP/DHKELiC9FgP7aVT0v5/jrLOtLFy93+bUC1bLi8jPPPPPFL/4StmD9zavXdF1ee/31v/jWd0BiKB2HVCKlC/jiiy/g7Je+9Etf+MLncfx/+p/+ld6OtJQK/tixgemi6FxRjkqTQa97oPwkgbfAAJgzVSo80Mq45Yvyq8hpT8w3HnPmzClk/5N/8k8oiXfefvNv/dZvHzp+emk1qm3/gUW1vqPXM8aQP2WcVy1QalcqFRF8wtOvnts9LViNsMO3+7drAQgllmpfGJ54KIghOgyNxJPWlwThM9ziABlIzIQIMXjMH18s1HLRjDYSjfRsPpQrZFHljX948mj+0+UrhLBxgNHsKbrndmBfvQ7uJ33tcGA84peCbG+iQiun6rn66bXT6meANDnO7+90Ax5zpl+H7LSFE8VYYES0AEdgHSgE/uYKDGCE9ysRrYxGQ0az58A4k7zMbqM8YSgZAOxrHcyj3wW/93SMLR3u1cM+kvaQVwY9GK+JVXotkBO7pvdOz81PHT9+2OY20kTaTV/eum0D8WqiZcQI6VtuMXQPxjvvvWtuXW09cezY2dOnDx88cOaZp9ki9gY4OsjJ362S1PfbK8vY1TmqMSmM0OblMp0stSUqGkBrj5JoilIdWbm7umfuoMEjRwj4KBwrjCZQAjxQlWA6Qjs5sm8+42naiirufnotsJEADIGNKtDFI6+cJifce5+wFEQ9VLbHL9t8IvZbe4bXmK/bKBn8PO3fhiNeOdqOQdF45aqB7CZ5tOynI1poux3DgJbFItl+JXud1vBVlCGko7cMb0dVMBH4NsqbDK1xI3Gud4soY8knlcJrEZmxAwWpZbXog8ZbnJ/X1tKKfeiNemyKaSbjczFD9k7kBBvLZPEdZgqh8dv9anl00R3jhkMhETeAx9J2bGc0XI7295elFk7zUADWkekDWAsxPTepRbNeZsb2FXfJ5fiXLMGHB4f/v7z9V5BmSZYf+EWG1joidVaqytKi1bSYxnQPGjMAFsBgCOwAC66trWEFn2Aw4wNpfCKNeIUZyXcaSJCELQyGBQYj0SN7pqd1V1eX1lWpZWRkZGgdwd/f/ftuRmVl9czAFusZeT+/fl0cP378+PHjx92p+WtZbj0i+dox6FV+ZsaaUTmiqRSez4kPQoOLeqmgwUsIhwkICVARTNKDIjVym9bWdkQrwv2oaNGplz3rwkf6R5C0QDnDrUS6htcaolAxa56gdU2s7QO0yWR4UNcmEJN0K3/lSq6hDboEyqXl1avXlpm1sPjX7wjQxjiZuOWGJf+9e/MYKr2s0dZ0nSKTec5bb73hZkDAj4xN1GydZ0LKV687d+cNYSCZoBIYG+vs3p6ePWyw6zxEuXj1pZd/qi6wYZucprOYT+gB3pmz51SH2FExYHl/eXEFruQDVAADm4Nt9AADcoBqUpo4Sjk+fZz1hqHBOHjlyiW8DLtzEPZLL/3U2qJBnPGhpRzJCf4ArsnpICp3pXFAaYwURoZiDoEPiMmuiV8RkdL2d48dPjw+FpNdn4QrvTYr4BGIfGJXmKanMXEicpcbhNZ2tkZHhqxugl+JyoXU9IvYOK2PDfazbdAnN8s+Rq0gOSuY/o6erDXs5FKPGFfv7OJsOB7urLI4FyKzM+LQYA8hGH4Qnc5e+iywhdjfRXGWAstfwNQbe/uGyNkgUYon4suKXllwyHQjjD4jdOE6lAPYjyKFh7zLr/dMEmyHSIARV25ZyvCR3yrNOhATv+Rfng+Kk71CGycVbAT04nQ8Idg4uYUTFi5Ulu+YSEXg33bkTq4r5WK2n4UG5SeVgnSdPhctANbqSfqlM0wZYWWDtPlQArM/QuHyTgFoQ+lGCk8ND1OHZ6a215amxg67hCQEQC9s5rzmPqXMCWFQKfwA5ndnH9OvtY4NdGhCq1FQiDNgLjx+4bHHTmFH773z7rkzp+/O3WbhiqjQITbARujs7GldWB9UIlmRIT0ZT2dJX9vYtlLFskZWhks9mImOOSpjb7KrNS5IJUE4/4qYqlA9hTreVhm5kRLPnTvnsEkZInV5gtOQqiKRS+fndRzx9VDhOovwublLwyNj2I8N8eMjo5U4oV0vQANAMpnxWvvm0OjA2cdOd8uL9SzFgPSKhHQYtV5x59Yt1dOCLjQmgM4ennZarqXE/RMnbfsj3drWq9s4UQTqrZxZ5EA5g0Mjp04Rbs9ubIbuRVPn+fnLKo/zbm7sPH7hydOnz2LQI6N22S5rP3WjEiDsKtpSgCUYyyuOGXUt3+Pnn1Q3e6VVgKkMfKJwKP69b/7Bwv15S5bmSS++8ByLf1K7+ZMxBiIkUS6zKg1p1UUpWhdNyB8z7Z8aEgHkhGxO5aGpnOIVXQsmiCDEFF8qVTt99qyCvvzzP5/JRlkVMjghUPMHUzFgm2x4FVP7/c2/+ddJ82OjEyIrBZdhMmRyZgKg5bQZACwX+EQvAlTPr//iLwhXQXjQNuBRtOaXA88bb7xmp7K9VtYBLFboKvD9yqsvL/3gR0+88FlN8/Z774MB/cE2MBqnV7SUqWEDGUo1a43jyS+kvjbh1ePJfTL+zw6vXw8+D+Z/MNzABVdN/mDABPFWAqVwUmOl2jzLlSdGWMkTrcwEqt9TY3nWfA56IK0wVSn02Yj+vtYID4FU04pTI9RnjcOf9O20jafIJOVDeTTZ8uAXwiSvGdZ8krCE1U95bWO++r1y1d98rYEPPSFHSANtU5By+X2CHzlwMNNEazKpccoA0YQBJgmLCwdM4kLJfuXgGT1TNO9eEytTitjHBpILF84xUHYRkr6G5snxOg4m4PI7ajnMRCdaWLjnImujvjHg5PGoRk4eP0oKcbsfgtcxqWSGSnfzurGekxMIH8ZF8Ql8gSfWQgYZBBytDxEwy16AwnDYdnSZA9DfmX7kzKsyFkSIBCkNUQvkUr1PPiCkjZMHH6NZO0BU9UNEwQdRWr6C8k+EHgj4ZOb1Y03YfFVF/tS0TWwH8ojXV656xIEbjdKOk67d9rd+Pz2fBxGTTylUUM288Xzaa00soaH3AdUU0kUq6ZtuxyoEI4cmE6lKYKsWCY/BTxSaGFQ+FVfiU9Rp5f3NtWgKDSrhdJm0p0MZ6/Fj5mF4b0yLI3j1MX7v6R28t7hmRZRNj9PX3ciKWE0LuZHx6R5HhNqs0ts1OTHibA/5oUxC9PpWDo3BYfBk3QfwCE9ZUpUhILpqIJXSsZ3Y6BtKvFZXwRYispg6jtFEHOFCzIc9XRjkE70iUBXB4fY1jpyxa+M97Ziv40NZUiZ50laFadO59uaIfb3J02pwMeIn9yWHmDPt0y4rKi0IHjkAgN8gYgRRqLGjjgh1KHnztdcJ0G6xFS6mkc5oJ8Sw5fRqk3P2rnIGkuS9FgMmrGBswRIA5Iktm66MTWQ743ixrTd9ItPfuJVTPcgJN67eosvEGCABTiDToUAcPBjs7KIEhk9wm4F+a4thIczrs7kObJfA0C9Dm/rKRXg55JR0F+bflyFbBYvyLi1KOFlcuG9I/eEPf0gkeu6ZZwKz+7/KFggYgAoO8DiSoqXNWFAaxauiCUA+CRFNhhK64wxUTtro78sFRD3bPcTHqEzIPeHcKD2dn5iZp/BOV1kNbK7mmohSWiRtRZt6pEk0WJukCeX+ZMT4Ob1DRiiNFh5BITMrnI5YUMZeZrPyjs4D9XeRxzbcq55WEqO7D8fjB4Gpq2dk6SwW5MKBbKEtNpOAUHQq1RpKilicMbZYyAlMNfQ8vcmhShkeE5RZgW/xeorsrT4THAKTY8is9He/LYHBFxE+zcGMtP4nfsbLDCUcCs9PObkE5GXXTqbm1J272+vYf0YMlzvqAzSYZQMxAZ9qAMcxIvT1UKR20CAsrcXkNRDgJJqkwO6NDKnFwyJYkpc9nKUKh4iFFgbkjw45IOgFYiIeVGEPKn/tv6iO35k8CBudOB6DRZAbfU+ePPHW22984xf/KiH5g/ff1U8NW8QzRE4of6rIpagL8ctHJkpRhFd++3rlRlbUZWTu7gjUSkgWE/wW0uGJ3Q1uAB4xjZUWFszV9WwXAOh0HZ09luYMmkCq21nVBc2QXdXFGKpfkDzlK8Lk5OZjp8/q6abGaLLuLNKqGBUeYwoyMzNr4c0ZRAZthDg7O9NNPU8HLReTCTrC5YUVS4Tqdv7CBeM4lOiKtgR88OGHrM+HHZM/dxf9oE4UNzQyfOT4McL9hx9dmhyfcC3Iu+9/+JUvfcG+4cWl1dnZY1/72lOa4fvf+8G7777viuO5O/cAp1asBdxPzD8waEvivnkSLrC+l0vOWGCJwBZQz2T8o7bkGcj6zd/47bm7t//O3/lbxAgH/uAjbITef/9dkjF6sAkYtyJ5QwTsQA0GBMuygiOvcJQGcDrS3TnohlD3kZk2sNy6fvOGUihFtIE4TvZEf0hKramR3njtTYedkwy0Cu4ojl1QcqP7r40qN0wHS3KNMabX19Ov9xgSZXV4dvb4sWPOiircPNMhCV977TUNCdo/+/a3LRiB33wpSzzu9lpfR1iimTMYlWj9UZJAyg/l/pW/8vM2TmDOo+MTt+8tL21ltgBO1YTkwgFKp0/vCPxcq6uUHixG7Tj1U/1akx0MafyfjF8/HQwvHfHR7OCRZQksKunSf8FDsjO62wJqyTKqe4Ldoe3OzQ1rpcWROE2tVcMbVOhRnlz9Ch7AHHTJoSwjytZX2Yqp0T0Nyk3VDlakwplkhcHVVJ6oqInGI0KeQazWxdVUQe2jnqagiCcBiUYCjfRZ+GAUMYnu/DJfZBHhKb8RU5Nh8oynIqQGxB/Xjskrjr4pzzDXgJrVD2/pGvVz4blF8onySV0Mfr4VoPwELyICUud9pIPV5FQwWArJg6zJ8KHo31OccVAeuC58Wp3noy+kPxOTAp6xMnfxo6uEGXaWRDU1wMzJcgp+4613MFgDNo6M21BFWBw4evyYJJLDdgyETOgXc94XHkuPVYYOip6YAlEkZTvboY7syWMv1jvovuKOzj4wKczn9LjQvRoHSapiBuy3VleEWmtB1X/w+SAwKGgwJIpU4gfJqX3J42DCmudf6gl1KaQ0R00IsT8jB3Tva6vQVm3SzTV+UrUUee3+/nGF3MFsJeGaEIV6LRVvZZ6mFdLEKJHra6KVcA0aywMjbzJLWCHCSLyla+Si3OokSaoUIVrmjSrO1VT1q7TBarpza7XQq0EBMSDsHPRACYogC8UpspjKD9ELEBMx57UVs7/tgeGpva7enFLnuP6RicmpaVydRAvU1eWFt994ZW1pIfsh95z34rjDXUfxg1bBkcrLpN3gbbyrAj1PGXHY5YfbqGCtBch5fOVqIIasLsK9ykGGBezI5tUfBlJWQqpSQyBS39ldFW4Ko2jgCKSJl6fhGTrLngIGwUatHmOfQZrimVKMoJIJUV/P2kZWLTa2jYkRdyqqASxnQr8qkI+Nj5bZzW34yxg6eXjWivqgYleL2UPp6e61HZ6dntQJ9UcjvoV0WwXEd5ivtMyOdMMf/eglQxWJ8dyFx21YdBUvrrK6vmHwstW31NpO/exlk6cRPL29C8eOdPX4hSjswAYMF3KBEAwUXg7XxI8Jdk4Mog+mj9cVXCRI2IABxr3EI7Y8xBfYhf5rVy7LTT7XrlxlGwxvuN6Xv/hFnAQGFGvEN6WBdvBAXG0v0SAHliTEVTy1pgiesJRMCv3TxFtpMtux0hwGkxEpE1EEyNoblWihEB7yDe8pkwBG/Y722T6EDu2RxnCUWKgAIWjw6B+o24FeWydl5UsZO6xK+udUqNwEylRGtEAi/146jGxFPmQ1yCIWKYL4j6ZNAIqgv2caADpr4mXU1CkiFIXbFTn+QbcVUPqq0tNLy0seYvgpR/sEypYrUQvTaPfBACtlAN7bUUooXBUPsKjSLun47Uw+9lvHqUzcuXSa8jX5pCtx6NCRNHUHF+Mfl0rYh3Gou29wdMhBpNvuPN6m3tmxoGafuvsj93ad1YMRGE/2zSl19Oih5BtmlVKqtGOQgUAtTiPEoIrFP6rUg/Z6Du32Z3kNYyF+o0PCGJkQxdvWQrjySdMjA90jsM7NyVMXIPUR/3Cit9588+2337Qy+Yu/+DWWrY6RREh2A//kxz8izrk2WJmKtm/+9u0sPihINU1xiY+kUIgyybGx0ydGSi7hMXqJQ5+OBwDBvPTixcv6L2AcQM8ilx9T9Arax86cBw/7uiy5Ly/roTTCJEOiMsKWP/g5vUxBslUosyUY4yEumqtQwRNQi3oQO3XQTu/42OjU5Jgm0nXCsAmduIZOwinSvnddDhOZmBybOHxkbHzYYEMPQXQbGhyYmZyg99BLTV+s42xQyG3vX752nZ7+xMnHWM/fuDUHmgtPnLVYc+niZVBqcvuL3BNuiZaycHtXz6QAuOV8cShwXpUKYNnuJQaMw3qcrDQ2mk1LGI1ZIXn7zOlzli1k+1u/9Tv/w//w3506dZItzZe//OUvfOFzTiR0kZZNwNqAI4gzoFeR73//h1qRqATv1QRINfv7BjY2nUwSjkArjx9pKiROuMfAeLzCI4BB4hVzMf3qPtM5OhGpBfvAHx39qTF0YOCRYGTLYMeMQlcPrresKdtLPmfaB5kQW+cepHx0o6ZmL7ZYaN3f/M3fBK1JJNN/T7kBCXUCQEIqrd/5nd/Roj4BT10sJpAb//rf+GVqlfcvXX/3chaG5IP+Ks2hXjBzgC8Og9GFddT0cyFqFxI/4Gqgp7CHvj4yvmgHw0u6wkQO5Fm9Nc/GL/MaEp5Ukvl0EBqr84lDvgj+o1rjEaKloihoTwC0plaAam0tH67Wt3kmValvA5FMSp4R6GuSg5+EiNCEPOT55KeamwxrzAoAP08NAYmvnmJGD2SsOIChJsOHPM1rA0ATUj01Q5QpAr+nUjQ9jlqrIBrXgCECf3XC62thmAcZ9wPIap4VdSWngpMcA6eZuohcYdwZB6DLDDtzHkNQxpJy2ARdms2FWN2T5y/oX/SLHNaGZ5Xutn3s2Iy+rDWv3nIR4u0PPvpQx8FnTp96zJYslEw+mDk8jNQ1PXdv/q7aOX9AEkSOM+lZDhYlfJoMUTjvR/Loo1fS54w69hcT/7PpV9NEEvGItKozqPtBV7FxMIS/Vll9MjHL4NJKJZy/PJOihles1hwemZtPFZ81zsFnpmDtPIXX5J+WycEIpdDkVGGomRACqiKvFRio/W83d6I/wh0stA7MH8uzpHgIpErw+A8laBq9gFFTteiwKB2K9V2AkJyrEZrIXrnmE08r24Jt0dGXaxITJyF6eW+Mz9yT1d1DxGZWvbBGhekSJvLCyNjkSP+AA+wn3VI9Nm5v2CiRLAV0dVui3Vhf3tuPWEGqcpKHlV2ElAO2t2MKj4egMZTpqaWUhNXzkFlbHaFojguorS1kpa/FtIlTIzFRL6dfoHOvAbesG0slE67UTycNuhSeHlRW6UKmmVaGRSD4ioSas1QVe2DkL/Yq/QYFRch8ceU+5pdZUdlGBWaF1vgMSvU1RYhmvNObDBnECCfty19yDMM6AEHEUDs5NT4zOUV1pQ8CmaEFJy0dIZ3lnTsfXLpyheYFbMYaWkn6O0KvHc45wXAjKCpL1JlUdO5F+MaGifXqCTBjHBgglh9alI5TCxF+/NSJNfeIxwVdFY21+tnaVxbqVUpCXd6GIwoB+UCyyDwsbhlF3Lx+Hbsg9Isjf+FMHkEiU0Y7lkz4BfqkfY2kSlG7ChicqLVXaQlPYgEZAKz2s+23SPlYGzEdr9PinK/qK3nwTOPe5c7B3INSawRmrQwDvh50OJCMTRusWGFIkudRORTqtsFplxrD1DczFeMZQxEVx0t7B3v1aUTLX7KQjfbusOvak5kRsT6EhcOE0+EzlkvjGhgU5DUrddql+H0qrsQrzKH6CqNIZA6E4tSn1/iTQeb1eX5iSC2JHvGArhJfMVHcpNfCZnAYOjFoA5o4H/AzdHVMTM9Q/SCq9TWaJlf1mUN27/d031u2fNSD50eRHSa+5+J5M3WDUJpB9pmYpDLBLcyAX690rmtMAGILp9A04m7uo3DZFvMqghlqV7P+wQEA6COYxtDokNUnnMHWcxhn6y9DFTPs/Oqv/t0vf/mL3/72tx3NaIYckzC9SC/e2UaBdsUQDktfGCJJSnX9+g1lmTkTnqmtAIAUVVNkUIUIu3qGR8eMiKb8zOBRE5n26tXrhNs6aMp+xERoYACpP/HEBRCurG3SEZP9dHBbaFA1TT3bcoSNOCupo2TlqrLJPD5jjQJ1y4qXmAoEuCkLjHvEVxjAIt3yYYXJqNo9f38B5S2trFGgrK86MWBYFh2bLFIm5Q4+p3pnU+/goNtA7ly6PWWjggl639jc3Mqdy1cX7q+48Y/Wha0h5QsVONOgof6sR5gf3759E5HjOOPj08D9xje+YSerAwFtIbh2/cZbb72jPjYKcgZtOCIuH52ZobDRYMAg5oUO98xU+v7G3/gb3/rWt779Z3/y67/+63/rb/0XzHIYGOCWyEBC2IGyqcmcMABm/ILGAkcwLalssaKMrPLiZz9nIQltCdckYMMuNJX2U4qzyaTFxDSbrHS006fPqJrzgC0yiKMtNY+E6gUn2CnUawy8Eg3dvXvn3JkLJnyKFg0dVBx62g/9xS9+sTJHr9L+6q/+qmjDI6NeSThKhDRJUAA2xw5K+NiYc1Q//MEPvqdpce2vfuXnVeTipcu/8/vfunRrfnUjEThVHpydQrU6gp5mw0n86Li888vcs7qEt53w+tp46pefEb+dtJV/enIT9ChPk38r5z2WkJXdFBWGocO/aDSrgI4D6NgaIQukRWcRQdNXW3OsFJeTHkRPFVRVQ2j9NFsZeimILVkV/UtKqz1Qx1AdGQqpCfOtuKaan/TUCOLXT43Ha822jgrCq2vlWH6E1Fc1EK2wqdZ3yX19qLjmVSSZezYhBz21w/ta80ceJSRmBkKCsrLW0UTgaVxNkmdaqyGAOnYkVgaZBy4ctziqmwj9JDEMW28M/wUihn6om4LWIImGnRNhuKpubWWRoenszNiRwxMil4E8w/BHly7TbPV09DgSjhiZu9oXlzqXFvE+47d+oWdlaW4SpY/rO4+dPa8UFcQiMDhHM6+t4OJrG/LvUHTH+s62zXEMlE0A2Ggsry5R5HSXNXFTQI1tBCoD5aPJU+awcRC9/KE00WmT2v2ioqrgrGCk4kXCgvP8HOhZD/D3v5xPKz9ou1IoGimQg6fAFRYYmjnoPpEkFMU1cRp/5svF1SS8jaeJUyN4TZHplh/LR/gBh6JkEKFKKgQZco+LyAuzNav6KRJ9yap8yhe8y7W5LGLZZBgsyQmb2w6C3GfvteWQle6+rqHBscGhYeMJpdrElJXujk7mGw7Td4NKp5vmLUMxLkM3uWCRcpdRAR3izvbG+mY242SBi/xFoUvBb2YRARrtYSAADiXn9EKSefSyRlesA3ECMjUoAwTKROcaJZGLCZCYonG1ykhdBEKZVKJxjBikJSkqi4ZbeBXRbMpJl7HaSXQW2S2l61Hty1lu1EZOtKTZcazW0EoGLH+De/Yu9+lH2J0RhMMApZWK8shgb1w3bupH5Tkm/PDUVHrtVg6tFz9HMnZ3sg/+hV/4hajOy3bAIg2v3Llzm2dlMXedPvn4kydPnrq3eJ8+j3S2srZh82IvEFwqPJLSe/sGALkSs+at1DdHLMZiBxIQh/8q75UMKDyrA73216aPL8zddYSitAGmy42n2XlJwIC3cmz4kOYo8Cy7n4cuj6mDgY/Kk4JsbHhEm5RVkYF6xLCn6qsa4uGRlc5g20BEyo0NDT8ynAMJsZSQVzGXykWIfX1uQJiZnhRfKwvnkYlnMsmMzV4KTVek10RIHE4H6B3oT68vb/Un1S+Nm4Gs8AvcUBK5cZF3K8sP/wCd9qa+6JwpV5FCpBJ9gFB+/Nse1HChWnpIKh0u4m1mFLXDJyBF1UW37IzHEeTRAitQilBYAgsj/oSkmIjmoG3YRalIInOZfNd+XZ8ZnFNtSTJ+lbzjjSthxffJR7CW8sKjStTSkXLUQKx7spqXsSXdsGCp48bd+0EToz829N19Tpbd6+hGNoN9JurdK0v3KPKpA9dWF4c73bxhrVC2bZD8tsD3a5F/12BhjgdK0p2ehJZsrdjZ7oyeaJO13iGEGuOr5LnXP+VM7BErLZlF7u4MdLsUo5fZz8jwEM1sbmntAsAy49XRsWFLzPP35go3iKK9Z7hzemqC3aumvHXrxocfvq9oMifCXli4T9hzGmQhPLtnM7WGdrtSR8fHFxaX6CFu3KBDvnVv/j5SNy1BkGRg0Uzvjx47rO/jM2Dgbt6+Kx+YNAdgPCLEJ/tdjYmoThJ0m2oWFQZEyhDfIJRiLEXAcotItv0TFAmojry3wmBcxlVGhsfWN1aZA47rezTWQHcgjdf02519N5NpACciuTIOBC6tUhOkoxszY9JTLI+ZyOKuruAhuX7us1+QCQ5npebZF158/523zz994ed//ud1Yz3WzO3mrTvqaQzHMhDI5PQM/msKjylYCijqipJtOdZGha0Dah5d4P7CEgFXi37lK1/53ve/o63QC/bhuKUf/egHbiRQPVXQ4V0agPdJK7LZEhyNjma3hxAQQs1A/6ADfODFZOYP/uAPKNdN444cmSW+84tG0MQ0FcqlY5saLS2ZjkM0tkwRANEaQJyPPvpAziNj0cErWloecF7uvIyeVMdkBsZqPrWdtGvFMw5Latd+pHknF+D4ylJftv5QbU1FQzq9VH3hWSaaRo0uX7n4r//1/4Q3/N1f/Xv/7J/9s3cvX/vd3/vjf/vvfwOEoKqdUz6c5PpgHG9G4lYvEdDuw+CNE+Ip8JOf6teH4idNSVXDS+p2F6zfDjwP5lkL8pFJX6AqTiacQcgbjpukJTOvLa9ujS8XMRomk7zwIE/IV1Oog3zV57xSrdB85RjmwpEFJp+SW20Ir01IzapmK7C+HvQkats1X8WvrmbbwnY72sFfEUpt2JMmhU8yEdZkJaS+Hgz0tYnQeMREQjIpH8OFeWqe9VnBKGhoDWPiVFehaLKqr83Htqc18WgnCd6KwwqSApOCYCE2nBezpn09Tu1KuKlaGVQ89Z+9rWivWKhKZTrWFdllZ3vs9LmzK8urd+/N18OPmXDoZxmSYp6YzTn6DiEGi9C/sOnjR09YpeXnep1QPhwm6GLKtXIvz/LGzsLKxs5+dnNK7gk/5o0oKSPefhiuUYaAGWm+oCvJi6uoaBDSBAqB2fq/Yqk+RWg8NfKDJD4VgjwY3nz9ZKCQOpY2pcuZ/5H51+Qw9FCGlapKQlULXQlpZxIr2HSYNqU1OTclNp52tvW3Jom/SVs/NDnwlIwjXzSZJBCbKV24BnrlqWSJILHROiEXWFzoAsi0vQwpajRJZJmMIl+OO+l1c8cSNqWz/t/T5cq6vsFho4Ezo2eOjU1Nu+0yan7ymb0BPYNru3uL9+kQ5RYzgOGJWYvgOxsre5srZq7shMwgZG3ByYp3FhOK7A5mIpf4YMBMsHSuMmoDqq/8GC8hoPIWT6xYuMhy8BXj5QTKx3gkRDiklZhZJYhlCWmyGGshbDHZ2giPUhis1q0M26VbSYiPyRmKoAFUBqwgpCjUq0CgI1gkp36rGntpueRWtN2eIohp5VnmepMla6M0uYHFPwPdzKsHs8rhQEPKsm9/+0/IHCxUDVUjI8MsYOWmOIOdbvj22++88cab2CnsxZh/w3n5ff2DQ4omOem864sELNYW9gTP2HHIAtsGvO6e1tKHrNRIbnCiLuoFNk92C84KNy77pKaAT4llEwWYLVPQf2EFEAV4K/zGZUoftr6Mf1RweGDQlMBQaDJAFOOhEFKjCrlWCJLZEXRm0JRDmWMERcoSB8BK8eQHj1YWbaEsuYOzfq0eTzHlzAHPUxIegqNTUOPZTW61vWSi3ARq+aIIUalSs4xHXIT+9NMQue5Zdv7uZT40ktmOssILdRmmjMxhqa1NBgurB7miy/r3g5lz8Fb7YalXEdyLvl/sElLnBego74HkQW/lxZwLJOVjHlohQUXz0YpZVHpmB7mJhSI7sQ642nAHAh54lQkPnmx0IEEjF1M7XcmMOs3t2PBMyFVZ1y5dvrNvWD/QT3f3u9wYrAc4zs2UCXqnBob7x4+cPHZ4a33tow/e2dzLDc0jJq2lQGCUmQaGH55KynV7WW1EJETQQoHUtM7UrJuMka8kNMvL26sb21tkMORhoKEyQE5oEuSbReo/eeI4/Nv4Ojd3+/qNy7/4i79Ioc5ejgDtKi9FEIN1TyREGe84CwWhBIWqGmEW4ZFCjV3mCXTBSkG6aJWISjn+k5d/6tgbhjCS0HkWLD1gmDWmQPN8m/YBaTijlAc5iZFMi9IUzaE60YCt9Eotuo/+RX28sRbdhK9orz5FVhyHX6EoTh/BEJBfJgDwyXrejERGQKv2JMhQ1lsOSFrZNFdBSIz3nIR5b+6agyZGx6aYbE9NH8XRVta2VlbX/uCP/tC1CKpi9s2w6dy5xwcHh6wnQi7T+REsaGOLvHt/ac02CwcOr6xuRObu7Aa3lSKgANeS3zCffVudLhfMtkKB4IFTsGnUf/JP/gkU6E78r7/x6pe+9HPLWmD5vsbjVESr0BmgsEuXrsBCXQeAuyqOMwF6/sXP1OWFY0dPOP0ADEqR8I/+6I+wYGZXcE0Kt4pKDX/k8OHbN28LAQb+oqFBu7YR/kVYx4xkq81sk4BQnNR25Pk5hy6YaN0TDgxpgcEvpnAXYpOc5ufumlnCLphN6ZgPqbTmUTVM+dr1Kw5N+uM/nvPKhMskyq5w0XDDr33ta6+9+lPniu7+5PWuoVGZQ68M7SXYogH9uAujiOJNxyu8QIc7IGqI61XFG/fJkIPxm2g8TXhhL63MD0aocTzl2TxbEYqkXgrHHSrEmEUHm8ukwiIMjcUQiOijh+MSRf8Raka4rUyqchEcRc0Gw1JxFrvc5mw5GsU3riZUkuSNvyTNo+bJU3NuPAHmE4HgkgIv81dgSa71r8Yv9ZVVapTMwwEx0MxwSiCce60RWvivMfO95ZKWk7x+qsEF+HwQXuoavgyNpX2D59IDIlLUCCW54Af5tv0PcFhzLrqeTABKhIBa01aywdKjsDHdN5qVqtqBxk2M9ZfkOHVs/i1pGsaK9F/0Z+UoO6Mn81+nJ+vC1hgpWBAqQ0EIERtzoO28de1GXUZA/7qJPDYWl9TtxvXbpA0JdSv9URd2a5ELTul/KUVHD/WMbe5u7hzq6RsieWC+Bc9BSOxDS2PymJHouyioVgrArW8fp8x2fTOwqn+lN0mqK9XMo6b1bDwCH+C3ifczPW04H6SrFIhXPDIdGIiKVdCv5QJETCzcE7D5K0O438zAykBbmj3001ShnfZBIT55acLLW+LXGAc91e8ZxV4KL/8LloUhOU7XarJqsk3VyvVHNaSJIBy97myFror8UWhPVp3dDrncZ9Mf7bxzNobtd5qYPjw8PsXkZ9fKz6FuQv+yg52K5su09L4B3jDePzgylOVirIAGbHXdgtDdXhuL9jtlMcy6cGu5R8fd2UJsIbOiZsLwgZSBsUiomkC4HLAOvFfVhNDFelVBmOWkrZI6js0vAicTkT1FEK4nql+trJriRsGPoBKnQQU5SHx7eg3T5E9ivD9lkQw9kbR8SEri2yvHn9X8bC4r9VDNYvypdGCAX+Zg5jfGs74TEh1T5yGn500wqGUFVeCUs9pQjtqDQ0yxwQBojhWFNBXnjNou7n3++ReNOM4D/OjSO/SUSFMyX5nLy8YEgOjvniwmRBpYX64yvcHXKGkFWiRVqyDpv2sba0ZwCCHZwh5gYIMwVxFo6LQh+N333gWwCcy589GCEZuUaOZWp1hO1WQ7YXpgckKjAJ8x3trOskZtKcVBEQAoNWWObxDFAKO4ukTvq8ienMjw46lGWscoA+DG1YYTDQAZ10WjsizbOaDOqsi2ZcxD0dzjiTmNqVB+8sUqywxIxRvGABg8qPAbJMHLbxf33t2Fe1ZQo6wuUzil03Xp5vWIhTDa0ItfCA6XB20FrDI3T6+AK+JwrsOSD/s8T500mRZ/NbXfzQpTNPqRCBKzREikuCLuR6sTf+n+NYfQcHT2iZNRq+3AxAuedsDHfmEjvKkiomiEqL+D57KqxlwcOu2YM5OOJr67x6Zel5p2MIPq758enTjsltvHzswczon4I0ODG2srk6PD77z52r//n//N3M0by+t3B7udUhVUcOHXcS2WFYIpLatxQ1oWAFdXz506lYM+iy1xen0YTyG/zU27PUGKR5BC6RRUQx/YWlt9+823dCnKAiRkPvnuW2+/++7bbsUmfxuHAMZPTr5y8dLVG9enpqdZd5PuVBzzIB9mf0t3N4t3pCuazkj0J5qz5Ll7776b/TZs+OnIEZzDY6MKFR9gnD5iR771LtDCEtFOdXRSvQ0Zyxnxy5mfrC4O8q5EyyMmJMNAXfcWwqYOL0J+kngFochmDvpIiK2cUgpL3axWgP7kU+d1y5XFFd1eLjDo1luSLISYIaAKS/AMcu3cnZqc1ni7+51mTl3d95kAMenhrLUp6fLFm4+fO+bwUjtmnWR/5uzJ+fm773/wkduLn3vhRWdbPv3s8yyTVpeX7Hymjukf7BsbnlXVOzeuSa7/68DRScw6dH9gdXlt1WKeuxh077KCeeb0KYs1ThY/f+Hc7//eN3/v9/7gzGOnWXcdnpl97PTIrVt3nFY2MDSMu7noUD3td06NevvIDPKHNa2CIxBMpqYnrKSwHdJCMPD888/qkKYAEA2/eM2b77y9vrJ64tgJvQIzwGgsiPRs9KTlRh1esnTrztzUzDT02pZ1+dJVSJuamrGpGjb0WqeFOqQMtPfuzlN8ynNja/2LX/g5bMP8YGBoUC1sITh85JhBEAvu7uvxtECTRc9cdhge+vLLL33729/WIsgC0VhN/cxnPudqkss37rx36aoNwSdsPxgfe+31V6YKMel7kYDKWFOkglYvxUnU3VPD83hyzetBT/36yPg1ySfzKZk9/Kh5PhSawBwAgIVksMxrAabyoJq/tqAijN6mOKvyRdjBBPFpXKcgpmOfqifTgwjiEfOiWQmjpTvUoelmsrLsk9w4Hh1JSPWn3IIHMGjW4s8DShrkVM/Dr1VZUmCueKhZSdx4qr9+9YzFgaA22kVrPjVgNJ6atkR/+IEGAF+T6+oVe0JKzvqzmqqdkakUSXFTQC1P9cKyE+JrRfjDuZf3AljIo8IDZCgMT/nYlKOqe1lb7gSaMkyR8gd6uthVug9nZXUBW0eret869Z1NeKvMcMOHAkZkvDh7qjqH+9z2c/Szz60uLZvPczYWGuZUlDGPXW8R9Zb11zA+JgSMiKHg+Mwk+WBs8rDNP3vO7cAMttZEyxgH0Ye6rK/vMCU1cmPuDuCOCVNc1EStZ6yyAnshA4E8UvNY3qiWUOlAhX4EVpcIJZp4dfxRWg1sR/nYb83wY0HqL/+CBV/l72vzfGR8NcpgWilTUmUH0lKRdg71teYjQ7xdFTLYawMpyxXLpdBadGnUfE3x2VRo12OsCD72L6u7ZcOhjpgv9Rm2QgIlkkamCRAFfjlFSUlbWHFXviox6vvsYQRLgE7PzZJMTimUwuF/e4d67P7b3qfuidnuvtWCnpGZo8cHXPs0NkEQtfpMOMgRT129K9siuMsLRDENMh2NEnHXeW4j+gLTGQewm74FLtyls/PosRPry3dvOAd66c5S53bH9kpfjnwP8NRAHJ4gofiDAzm/j8qc/gCURFsSGjIFJBpeW181fNI3R6Qo5lg6XdLXTcDG26I8pgWHDSOEPPF/1wrluZmVYevoxlZG3kSNHGHFUSFyeuQhmmDGH7E8LYXaBWsCkLUCooDuLBPoIs6C1vgCWia7/RGXrGxk/US4jmFbIad5jOYmBkA1AjriQ0aWtxm9pBctLhICKLzOnc451OAHmwyRgUx4XKnlrJyruaVonmGeQ6utwUOLZXBNoDIWWVTW8UspixCVum/P3V0AGFyRE/BYXdswp9eT5kXuNKz19Tm5W5y1lVV9HCpHR8bEl/Pa6ob4WsWo+/Wv/VV+IktlOGqxcO+upyPIVf/iBx/6RITyNAHAEOQPbJkbjeFB/l652i6IxljhuGEWB8YbsAEKm6JmKoaCLG12SDNrzg525lJ6Qg4aNtnj19ZRXJSTVo04topS59Ha+ho67+vqH5oYGMvVSyRJ9hEWQGkGUzZEZr+DDqWnp9tokTQ0Yg3PCFMhf2p0P/ML9+XG1M3mCKtSJIx0lhy76XKydJDq4FDTyCKIajs10mO7HAiWHpzuqAaipciMqOma2XKgi6duiVfmC2zRgAEa5eRL0mZgSELhCS7JkmWbO6HLRCoUIsuibi8h6YKKS6dLhOLkaauCisK/+QMGhL7005zvtWejbQah3djh2LFv2Wm0b2j46888PzY5M3vk6MDwGG5g1Y9aXBfepIzd7VpYcgzO9sLKzsr6fvfg+MyRrv21eaN9qWTh6MGqunSxfCHEZ4Vh1wjSR0wHnWOj6FJdBuwVAsUlAZusopb+gQF7Y5ETwCfHxll2kb6oklmMWY2jbH3jrbePUQAfmfl//e7vmoH/vV/9FSe1vPv+ey+9/BP0YJ+q6p09cx62sT+m5vI360QUuXfsUNc1Fi937rjJiuhfTYOQ8YjDuEa6DIsEy3uLjse9aSXT2TKT09POrnU6GdEU53VJmT13WyvZuWAP3f3F5WIC2Hv3jmNmVhGeDk4GQNXgB4DqYBR6t9s86jRA7xgbY7NjK07mrpKIqX2FsxJkUEvoddKG/nXoxcdz8wjB+ezZ88RtMjRUDtG3lPM0UZ5IJutm5EBcXVt69unzH334HhpLx0MCOV9l78q1ubGRXJKl6ZV3b34eiHZIg8ylCbCJjsnxNh599ee/DNDvfefPiOwM+/h1NjVRkDPF3XHrrgBIsfdP+IjrmjWm/eCDw0KI0a4GYS8EHbY38BOmnUTkvgdnE7msV6F4ENhAq3LqjIfCiIbHFyzK4FobK8t379z+8MOLzj8+fPSIVnFfgcqCEH0Dnsv+m3o8nOna+vr8nbmLFy+aEpiowIYMDbI4vm5nS8Pzzz+vFgiLiG+NEoF5PXrkMPsyHVfLYHDqQtxfWIR0Z/iM2aDt0FcLQaaPJx47jWRj82fDIsIvB+BoKp1cccD4p//0n144/7jpCgu502dOzRyeHpuYkuS9Dy9dv3nn3/+H33Y3OuyZujgRdWN1RQ40QoYcNCF5FuQe5VLNwjXqx/qakI+bTDThwc+j4tfkn3yqwicDwVLzSU3Dk7IQiCkVZlLZSuE32OaDxPhLrkkvXLVyq4g4WSrAKAozqF/r00lqYObgRB48nmFt+GOZDxhgqtNjhdAe+hpeVXhgTVgjl4Thbvq43OKSbSRKXpRjuQaNoQd4rqV4cjWTkiCHjah1SRqQuMK9RAlgJUOPlktISxMfmGtW9WnQ5amupq1PNo0m/6EeK6epMV6bZZ8ysrf8EFiKkmHKqpnU/Ouzle8jfjJoPSK4CJP0T3LWiAfzt4orvlKq48+gWo5tFQLCQFoEL68ZgawalO16ZBSdKMsC+te+Wzad9hAHAG2fk0UN2rHthgc3HMWGkbkQ814NoeNTQDB1fvftdzQu3YQ5uZUxfcHVY2pQ/7Sx3LR5xskCEqYPHxm5i4IWPUElO2mvIqBVAJeBPa8VFfUJeCGpQpmr8jSuhrfRnKKbtDwylEPNJB9Ktl7hpL5+2rPiGQpFkLn53iNjZhuEPEGnru0nKPmN1fVZJtJAiRDgrMz6NVgo/8xYy7QB3UaG8c/UsvUvKr1wFXy6Z2BwYyfnMR05cQrXdvij/Pp77Y9yFkL4z6/8yq+QVDt6BijYLJCzzvgX/+L/6V4n7YXfMqewtZQZxNLK+qBboyenjh49ThOH18NQ6AqAkTCyiyB1Lqf72weAQWWUaeOQFO+jKUEh+NIiOclxd7i/i8nrrcvv37n+YW/H1kCvo1d2mAQM94+IqX3VwlMTg5ZDQhgmmhEOQnlqEaOGbpW9LqGTtDgnWVjHftnXu93q+3JgZw9j5PJKP+LLHJj9xTLFOCYtyZhSUEHCRaBfG+q3TpGlYOMpgTvMIb2WIDt07PgJ7IXKWX8g6ZLLnclz5PDxmACZmPe7ViwbZ80e4NNcm4xLT3fp8kdWmL/whc+bRziYzon1Or0B0Zq21QDaJSKAVGrMo0OpmlcitQPFi1ZrXh9UdwgBKg8hFfZrjwCzVhafLK064ri2ynl6slIjkpOq0Z7KVk1h0jIOxiUVC13oEMeyOeGDbQPxSJXFkbYuRyiLfGNiIFcVlxACbWjEGYgW4L97544phE9GRhnr6ZmKkLp12jI8aTR3kfOjG3KDZ5UTCPdVlDcJ0S9yTSl1xV4aS3NqH6YfWhcjAj3iQx8Uj0IcO4oFhG0dOnT0yBHE2T88cmNuoWdw6gtf/caps0/19A3/y3/5L4/MTl1+/83d1XsbS3eeOHPyjVdf7i8nmlDudnb0zN2ZHx7st3PDfInsq6X4o8fc3SWGTk/PwgMUIcsocSLN5wV60wfS2TPywnkN5NeLjUi6R7iPY638FF7UfmY6V1kclDap8vVQxyYTzfTm2ArCiRYJGrt7UT6/Mj3jMRvCh0XuQB5KTyMaZcIQy6HpLO50AzKJyCQnkdVHsbs6hPl8bljep+reVET29dr8OmFb+uzh4+6HPnL0mNskHNrV3TOAkzgIzL4BG/V29kzb0u+URSQyGerv6di1n3V785WXfvh7v/NbQ91bu0s3+jo2tB2OrGjsWddkDNrTP4TanKjp+E6d86knbCHbwMhhCeoa0kKWXvUmISrO46m02CWRPo3OW7sE15XlxVt3btrY4rBHenCC9Xn32Bg7sli3S2MFXaaiE2PjmIFU1pGg16ID+nctxutvvuF+K7TqHmmTbVVWCk00U7qtjR00mS45PCS5HQjk8JW1VSfzpL2ZoOesY0oIGjBt200mNw0wYWB7lvN2ijSP5tEMudrMRvdxGRkHDMOnSbWcUbixzCBIdCeaBAP7OTcM2CAwuWWMY1Kk93U/8+wTgIvUuL1++sxjMGIOYMoiOzWUEp5HRyaOHTsq5OKltVdfffNzn3tBRmLalMCaUI8+f/a4mMZvayh0DMxjdNHKQfTEn7z8GtmU2ZMKYrMX33//wvlzDLPee+t1PZ+2+63XX9Grn33uBWSxvrW/uLx+/OgxxYEPcTK0MjHiV6ve8QkiODNHfMTU2U4wU3N7evFDraO/zd/L6gwqxelWN1xUHvNiFaSqt7vY5h9fCejwhXs6u1BzViIwYUgTRgu0j3cM4nAuFyl7E0F45vw5TSsrehT8SyaO6KGd/OEPf/Td735PNG2BCyvUHAColAPi15hWkRRHWHT46emzZxiWkVqIm9re6enbFy+a5GDQUV1Ilf0uOU/RPi0oBfm/+lf/yuQHu1Ti3N17ly5fPnri+PDIBLCnJ5zg1qnmGHa6jEO+MnaSaIoKAg8orEK9PulQsySePjWeRPuU8DoA1MjNM/H/Ui5KwbC1yp5c8CR1YVf0dgcEoAJWYWvOmimmBZkRRY1hXuRf/AUgmosi2ocd8Ocj3hUOGrBKvSp8oouYVfes8oW356snw9ZCZjCd4aQ+lW9Er8ip6flTYEsIiNxQnUyEcwdx2CTkib/guRZX3pNlfeVJhLZrMmkCeWpgfQJVWTVQBxGIo7Uz8SVFea3PgjNvEV4PhBfUCPoLOY3yALyPp8gELINTvgeSqlAyihV/Git/qXt+QF78RbksavkspTECjxnLMeV9W1vZvMhhHcQdTUXoL6mydENLSpdJ8gyPJJ3cX5zbvHX5ooMdKc86v/71rx/q6SZa6kp9w4bybdv8jV5Hjx/ecRJKOVJti+7FZs2tDKiZwgT5JGCpM7hmRM5tqcZgbQ3HhsnE8ZnTnVVDYKpVkBLAyhjNk3ht17yKyyWj4tr+By1eW9DTJxVM7Ee4fE1ZoQQD9iNiHAzKRFl85RbloBmzhN4L+aZR5BJBIzmm08WfSeMDJ3l9aTwVA55yMv4TrzINLq2bSbjQYk9PpKDpIKmTEfEif6GJzKDStwtcYUwBgUq5d3B0Ynbm8MlpFhX9I0707xoc2yRy7PVBqzxLfCDILa5MNtNqYWnlWN0S3KHR0HeZM6R9yqRUNS12r+/kZomcNuOcd1fiumPYoGOajJSwVkXowsXkRwmdhqcitlYjnDS6CJCU0SRmcFkKi5OyGJMQAlB9WhDImSWU9QE34QwQiUIPQXCJjbEXxhKZQ7YKraWL48hymj6viRBNsD0t6h4xcMlQfvGSyKuEyNzZOaoiR08+ZgJcZgg9gwN2zuUcraKq7nJQDn8MfibH3n/3PdsWN1bXTpw8ZgPv+cfPWeg2Qg2XA8gBZnwxtPIo2uKJY7nee//DDz665NSugcERZnh1sHPjXvBgQuPWveK8AqNiQnKvQ70w2w1LVbYodUlUQ6G+pnfLilhv3NQHYUDrsxm0HYjHfbBGsZnp2fGxCcf/ytZOg2mbCupkzDC4vkrZJ44RNmRWsKqZZDU6PAKSCkyv64iKM/m0H9HZJlWo8nQokImZAZHIa9ZCP9hngwjBFb4hzgnxxX6JOAF+5XL4D+avaiIr0bmlSodbCCSeun4Eu0jb1YOCdlUwJxoU2EAYDCmudFQY0gN8eYSj4BBqQCptwZApS1I6OJfuWvogn1rnTKBCURUD+eQv9Nmyz7EaoLMJLcqB5Fp7sNJrktBx4VEBp/zJ18yeJZL65gASd89OTImT0ovTxv0dcM5ofqWscqVHp2SH8Kbm5v9DQmxYjuGnXpCpiNUQc8Wu2NlYpxvsP3lq5jF65QtPzx47LkCDU88BnZFfrC1MJ7b2evoy4Qe+tTllZ+zOWEoL02/7CUW4wypNt8enD0/OHlu89VG/PrJv/uzOSV1PZQx6yI1Vm7NiYkoEFNI8SZ04YBbhOindq1ZKvijHUwJNjN5QDb9e5pCBiAiYROf+7dtzbNE1paXs+YV7rv6lof7eD75PWJ2ZntJMZIapGRts9l2EZ9iQj6MoKIjfee+DtGb2we6yQ3lieubU6bNI9O78wtVrl2/euQMYDLncApajQi0ubd/fNgdh8mJkMjN02gULlQDZEdsETj4cy1kwpLNnq0lqo6C8Fj21uqoOul1cXj124qTk6FmlkAKLkjWX9aytmmWQ+FlVaSwTCn3a8cRidv9v/+t/9H//v/0/3n//+vFj9NHr6IIEv7T0pgQyVYbi9QQMRZH41Fe/9pWpqTHQA8KahuM45+YWTp8+UXoFNnofIswLQQNisx9JVMN6ouvTRnL6UocDfMy2Ll38UGWQytDoyOH9PddjvfveB0889bQT3mzlIi5z5fSwoWeeedrUgn5CldbWXVKWytDJOMWLtae+fvT4Edp9ZENlp80d3y/K1SuXyNlscgCvCsT5XFV0d27l/sL25qCqWU+8dCWXeZk1ejU/0BkyhXKDNE0AQy664RwnUgSE7u6R0UGHzU1bNigbjn/5r/9N8UWGAVnhSllmvb88d+u2md9HH41CXcbL2qM6b6msONoAwaIJ4Xdu37145fKXvvQVLNInhYKT+GJPlgiVY94tVl/0HyYwf//v/313rOJxMLbGVPZQ5/VrNwIqpUs6YXpvuENxyLTlIv9FBHzIlRZMWPV4tiIk+SPCgVQjN89W/E/5qcB88mNkDwCV0ogeyk1/5wrXa8WvIBQwSm3iE4U/EYurUeqrZ/WIFc6YlyIIlfxFFxmG5VK+hJPxeCIXuyx8Rb0qqI04F8JAHU9BYEvgFifRKE7oOWROVVBcLden6qlleUorkEcsTy7p25ht/IlRXOApX6unFfPAV/mAsJbiWUsHBgJQlk9ck0OTWzuD/Na0TUiN81Bg8/Uv7mlyqJ6HIG/yAWQtUYTqr/GtGyJgq4wO87HexgiO0tfQfObsWRFQtIYrEXJsH2K3OK/WAjEW+cAD9qIX4+EwIKRIJ31d4122HhH4lhfvObPPDjAmJXikrOh4uOX7KxW2qJkNbMDK5NIlnQweQmPmNDE1AUHRk2Vch8OmPjy18ap82g5vql+b2msNOeBJUUldXKljpk81sJ3Nwd+GRpKkIq1mfjBS468RmleemnkqcsDV0msVqr8+IZCnidiK1rwXsIOmtvNFHKmMpBl3K5ayYlZQB5P6mAHebGTPWgOhxx1GjFX69/dYxTiPctaMrqOrf2vH2M+sZZOJRIQZRZQ2kbiKMyRHZWmTQMhbFiqF0Jah+8QOJJkZ8IioyNpHgKdPE2EzwdvZHeoblQEKQgm4t3EKZuTJzKdIIComXQwRRHC2p7xMEYlrMjEz9J5NXcjP4JWTOlOuND1uKsriAA3XpjrLE1ASMNrMPQDWnKz8FSywy6fcSy3AxOipZ5QnRJtTdOBQ7cN9LLusWGSmBesZZLVCKR9z2cmJ0cEBkw3TZWopsoEBxUBpd68ZrjtKLQLoDsYL2ihr1Ma+Z770laPHjrBe0F/IJRzcWV4QzbB143oMFaj/SfCpRY8DrOfNunUlHY3ZEjh5pAJ+BtegkR4ltQF2MMVSg7F1cVLJNnJJd7b2ZWzaThVE88kavAay8kNnCbeBpzjlEkQUndzK9cCCRRAuK0eXClYWGQAHAI/kwX+xexZNCxb9Q3iythPN6pOTk/qHjKWMQnYyE+3ucrqRJ02nWlC4bi3vaCX+wlUyhspZcTIHvOJ4gsNymKlX8AtxzBQWIkIItChWM38uzQdaTqB8uOKPqUqG3mKUGwptE60k4hgFVZllBDGBDAd14mapu7jKIVKQP+RTMvcl+RHjo/mSnTqzN04UJcrU13iqYoK3/JX1McFZvUE80tZJHBVn50BsSKCIuRqPVs1rC4JUDVZs+Ui7lLM1rPiZ38AoKDPdjl2en2CYytSBjGfPPj0ze5QS+DBbPoYbKhir952RsWmUTdan3I5WPnJ+6pLpmXe9ocxMVCT1L2p7H4wFMKzCLPpOnT338s0PWbWHjYRFmJNE6gGy498cBmdmAJR0me50KHMK9hu6OPV3mgzfyRV7IVp1dG2XQF7TReSHVoWn3nv79LYC9SltS5E9M/W43kH6Nw+kj5eWwC/OpQ8vOZ5fhsS3SrqOxbdx9PzjF5CKU++sZbEcIQ/KBMWqV/9s9LwoltShdMdjyBMvIjqiwzqT13nRdpVCAebajdtzdy2WygF0SJpqWPd3MS7gIa2GIyfZymSFiAxtQUP6nbk8u0Ne1CU3RuMpa21ZVjsTKbf7n//zf07uPHNm5vr1Obkje4WalNhRw7BJX7KkAlCH+cAC7vZbv/XNU6dmCPEKw+WlBTFwHblL3JcDv5IqL/A0NtPfL96/p0hYdiiB2i8u3Hvu2aeDxEtRclgxIH9/5zvfe/vd95iCzR49Jp+nn35at5TqC5//otWTkyePw6EcHNrGaEr1yi7hhZmZSVYx2kDftEuBaYAFEakm2CPR13TZFZqzAmLbaYCi/V1esZKAM1JR6JAIZXFlGVRkKDOWKPInYlQAocpSF9Wz8sLVSqkR2Djo1oRqZ+OvZRBIUBFfHYjuE+2LJRtWhveXF+/PO4t0ibiPe/7gBz/q6u1iU3Tm/JlKkXN37yICFFNLlDRUXXiicOueGLTicPn+U30vv/LTvtClc4HW+t2C3ot6QtympC44kyptX5iLVXLSEXgyWLZEFZ4HTrT6UlPVp5BwleIeDm9nnjjFf9BTkxx8hsF9woElKqBwwpSSiX8ADsztkbsM4AWEwh/q3KXF10Ruiq7+JGwDIySDqi7MV/BQflt+4XygKlEePNiVGMAMcDqSJk7swrQrDWQcLBMDT85AQFC1oJnuVZop0cs+bznyNE/h/MmtuIPhZhE1pi9NDIDVilS8HUybaJEV0p89kWL1h6dYxyzDlTg1eY380NNrdaXc9svHkzTJH3z+C/uatDX/g5WVRwnMgHcwWuPXQ1XEq3ohfp2OyYVX8cMi+2JYCPPi+GSqu7y0ubS4LKZSMEoswicxJeEnduizCs2c32Uw3b0j42OMYuQGV0Zv8gG1DamBykB88/zkQBJAG7RJjpp2jwxFH0JN+/qtLvDwNWDz1zaqz/rqK9eE1JT1WT/x+14ji6ZewhVUynpQ2MGElYiaPBuPhAejNf4mwkMhiKeG1AjtaB+Dth3Yojfxa3VqePHDUaurVgBIub5CDo9+JMnHq6NTEBv9ufMHAg3RBm+nyfXGWjeWXd3bO1EJOwOst8/yawIzrElCUZIViiIPVLE+S5vtHkMGib+cNiVfeSeACyiA6e3qZWpBbqoJVJ9QyRqz+5DTIRGb7V4UPSRiwmV6NllRCxdSzByjTAMMGVvuvnQcoClAgWXfETgkYHo1R46UyU2mPBGSCY3FjJAVN8IhYkBF5PxC2Eo3uMAYirX7K80doS5LJWvrsSwHA4F3h+1MUUTG7Kl3uC9LF30ZGrojglNdTziuZ9jidI9xilbcAEq2MC4r69btG+fPn2P65g5N44Wxw+kRP/eFzw0N9K+sLhusVY1tuydoSSGsiRxsfevmHSGV7wGWjK0rqUjtUJVmPEUwuEMuv/jgVyKs6aKWk9TCMErCqCRB7tFVRfZ0dDOPcAk9SB2UVoAXYgIjlV4PWnH4VURBPslffBkyZdCCzoASTT/1SaD4YGDMIxUY1JSxhCSFe6yrmragO1e6FQdwCsENsAXubrmYSStIqAjZ8lTdKo/IkKAIrnISBUkuJlFJ8hiJdEcBoT4+SQICSWRYq1lzEFL7AYARKGBi6ioo0q0GRhupoCpLZZoJKCWyFEiGZcQTngTFIZVQU7u/+5SVASJ+RuocSSG3lJdCSx8Pycs+aUoyHQrEmVoAB2moddZW2aqV7ekKQXWqiTA0vdZUNU4OBhyLZx3d/Tm6VLnZreu+7cj9dn6yaD96mOGerZ3Hp2ejae11PFf3oB4LKF1rCbrQ0vC4GzrW2AvGQqFMjoEPcIXVemRmkv1XqF5vCsewSqAuukUuOeilsqYBPX3u/Fuv/GB7edHGLrEgPsyl9LQyMqs1rOp9ztoiWPdud2yurrRoHjq0Wq1XqX6Eaa+IBNkgLV+FpOFMC8sp7a58tpHVLVgEvOs3rp44cYyN960bNxGG3oQerCdj5lY4pFV3SvrJ6VmUMHd33i03JtLXbtzKVcNtNbp1bd0Kns2RASycIhsMjPJHR/UIhmyJXOYGMeoT0xRcx4p8ssVSzzKD6dIGLqGbvPPOe5HS7YLL4QFANnpmMkzfoEdYtWh14T0356Dq2NDiFSZPaIxUb6LyxOOsm+53O2DDwp+edvjwxE9/evUzn+l04ry+Y+6tAH96Pc25rQzQZBcsnCve3MAc4A/+4Ft0/+ZYTIagQJHMB+fvLkAlINQNWZN9Efov/dIvvfrKy3b+2XdrAjA1Me5gL4jDC2DzN37zN5GmOY3py93791eXFseGh1YW7yuRHPbRB+8pfXFhviydjJDIRKawYYJ9/OjsH/7h7zN91HPT6n09p04cR8cmA+vWBjbL2v+W45acHtGZyVfv6P74JBkgZljOMnL+sKOkx8fI8QpiAgLUSgSIaMAK68iINtZRdDbVgWcrhhw/1QvrLNqQnHOinRxcvbNT9gCsIIKJKSeYmoBuTO3Mdl0AUaeLkgaG+i9++BFNz63xm4yXxs66HSGsUCbz9xfXbtzUyGCEE8yRGHT71pzrMIH0yiuvmQloXbQCsfrt9HSPw7C3t/ZACB6MVj6VX+CKpB214ApN6xh60ae6mrBJrqatjGqG7Wz1yyZOk5f8G//DnibhgQ9il85eWNMDESp5g7ZGTOkl1zp0xwa5uIfAKT22SRFOV2PhJDUUbLJtINQowoVI2DyFUF1kyTZ8FFONGk8Szt4Pz4JFeAxrDoQUSHsdtsGJJp8amUf/q9gWUgNLHi3k8Bfm1n5tVzzg1QTtp5hNtu2w1q/8xVcQV+H3QaAu5rVxDcxCHsrhZ7wqVMKfEeGRn5oiGs8jo9XABsKH4jC9gFvdUAdEyVVAxwczpWdWvrdc6ojqYwnANM9hbnSMBmOUb9NV0da4tGREN8HZ9RFMzVddWevR2jrpC6+g75HaIoClgLFx/GAH21EK60vcjEfaLOnHlCNyBiAj0KXN49IurQo8AN8oXFdjfW5hoOCwnTyBDzmJWYs2gTUvyOcEPsj6gC8iwQHXNNOnxQftgejxNjFrWs/Gg+QhHy0LqdUsH/MAUs1Hcq8Png/lXolZ/IywkNbCU4kV1O3sZtpcpH+bOkj/JGVWy/qclZZ+6v/o5bNEIIS2fM/2WRADp/ToSDrw4ocrRUVXWEm1PLPHOQzLkn+CC8djsWNGkGqnYwKr9JjIYCRFBJMv5FZHULgy00Zk5w7uWk9eNj3JfEAvZ7jdS10tQ8MyiwYJYEAfN3yiKsNoJ2WaxVjDc91JVDHEHsAeY9OMFvZUPObFmbQ7UB9OoAKMAg0lJBwnHxO9ygbQinBT0H47iTt7ewARks2h20xRo1aPSru329KVGzHYkS4uLxHfrQnLViPap3j69GOukP/CZz/zmRefP3Hy6OzUNO0y8s68qqjeKw80WFul/8H3f+QJMDkXkT7i0b17Lg/OYhp69N9TvytjYhclnvE9KCnFkZ+1Ef5lqBVS2BL1cVpfiZw9aQIRAPghyroHOVkOj5umnDsnWyot/V03JDmICXLiD2YsvlJ8Crr2O9gBsclWQTlrHvHJXtbYfZK5GnnG3KN0HwltFCTjkunNgbzK2WwGgXhmWlMMvg30SpG/Go6PjcmEkwPuASGS8OBIooPTQI8/CBEuveuXJIQrEKbQtvanYkZI9RTspQcVcRm5IVHkVZ7Fv+ViinIFW1amcuHhmqmabZbSS9V28uPab+kID/05+Zj0H9o22a3xkHbeYuWneFcx6JQQkdmBvIAXdOW4CJRsaluGy/2O5RW7Lq11pYmjkO/SanY492zs9th7bhFA5nSOWs3WFPLSuccvuHzDtNlElIqswGlSfGjJXb5FZbbvJAiTeVtlkBEzPyZDIIEI2ha28plgkNa3jcpqrKOl36W/1UgdjkPJqNttRD7kUih3Tx05fmr22Inr71zVVdLjqY6wkyxFoTq315pBZMbecSiyL6qQvzYao5ktx4Py13bk0XyV52tu9VVTG01VUC3IiAKZYrB5cX5u/0BOxGFz/nu/9x9RgjsBXP5FAFPEMZg4fvy1195Ak3BOmSAaOnHohe2s7737ATOn0TEHbdmckPOsjU/21kplw63z/YGnCBgEl56ofzPec6CQ3f8io82Cn92e7oHsCaCjMl3d3LHJZ35+gZnQ3dt3QeuYKp3VV1jKtWbDw4+dOR0y3ox6GvVqaipvSi/VlGH/QBRqzjPlWOV4xlS9GB6t2Mz61a/+gknGH/7hH9tp7xDO7A3p7V5azlre8IjdXaOyGDjSe+nDG8yqWAq5HMAng6v+Q4tvSKYd4fR/2Xp1a/HZx8//2Z/9GT51+swZ6wCuv0VZJ44dffKJxzUSWA3YtAtWWPCoazdvnDh16s2332Iq5iRipnef+cxn3v/gbetLbkODSjWEfWAoRR+GqV/4ha+ae6UD21l/Zw45uIWBoTzMatZQqJPOimCHnIgFtCHK1T8hVZPzQA1+YT20oIJ90bqcgWTZFLKsUouJRJQoJscDAHUUDgBF1IrkWIP+tcG+HOjJCbSq0F+YpiSmHEh2bGLSDE8jWXNAwzKZmJ5SnLj0H7dvuOXwunUlOZNRsLkvfO5zYAOnzNUxyy3joyHQkb51qtKoT4bZU9JcilO6UmSWUqcWH3GzRjQOn3AqUsPAxlOfUS20PxwMF6Ei6pNJasgnn+1sHv4CNkEGak89N89aaBvKEpRUVTo+MAF4AGc+t2GufsUB2MD/50qynwRMSBorklOEpxoBifFraG1RNJsJx6WsgVoBELnip3pEExmKKjCewh8qqHmteK+vIh1MJWEN96yeWkoNP+j3VRFxbYJ8KJ8GEh4JG9du9nwX2EQ76G8C/1xPk6rxyL/6PatrCmoH5LfJuYgXMWFSoww5iHxoFM6LTJ7ZNiLXG/AwqheMzo6jrNwXO87p6Rk8wScyAQYibbhtbtmkbdpZXVmlU7m/eBcrxCp8qpulGC6SqwSmcc2ii3IxIgu1gAl3jmcWFjlAKZ7KBy8xJnAXB/jaOgZew85Drn6qz/pJorYnhCFPronm689suyQ9mFvN6pMhD4U3hYrJD7dNPk3RukuRAEK3Aqur+YCz5tAOLh025BopJr0TBTrtI+0dgVjkGr8mb5VVFtOacBzUn05v7Vq/JlVHNUII2e8JV3CCU1nRDyzyj/K/mBoUzlDBqHuH6rNM+cGfL7EIINgAqSxRpCez1VZQ2eNLNbPhPrGddRoofdQIguUaHdUdo0Y8hnBpkUR091Hwb5FY8wcOxsuRb1iWMknYJovDjNplkmCAYfmD4yqo8AqivkVnx7PIDdcgSaNkK4zR6zOezk6Y2APhJ7RJ9KGdHc6pZMBAipXZIZkb4DJsu67AibfD2TyQMzcZ2jiBemV5w+nRd65Zbbckbsu827hKV8hVoxO7E08+9bT+8oUvfZGkub62TM5TOC2hsUxNdR8qQOOIM/pI2w73VBHCt6fVewSvUkWdRN+VXZKljmlW/UtCEYx0HEAlgVhESywh04ANAuXvBD+BYgJjfHxMTJ2OLpNELkNjpapZtbZr0WBndOOUInMxeVQWnJ5py2Ili7sRxaTSPWVbM1cp+WebYxHEZWUCJ1AEX8hkxD8ZCqmcQTiAJQE8eOTmqyekAekqk4RiBla5hwhKV7uSW3KoVavnDg2792dyut95Vdth7yGYwsBBy4HnAKmny6PvSLzIyFQwU5ZWJ/IpM8pMCGSimeidmbs74YC8nqGk5nMwN1VIqoyKeoe8/JevqyZ0ndp/A0AZ/nSbTDTTyUKn2e+r1xILFKiy8qCGKOtOFf6sAAxPzIhsG6uGFb9Y9PR394+cPHpmZvbEqTOniUNDg8OKxxoxR4JH7HNUn1UPdLkbXidx3dX0uDUyGkkIhEbApqzO7vsrK2bpqUXZQUEWkpVOesihAmGPQYfaRTIoCwXaWk/x3bTEzgEWzyNTM6fOXbhz+fWOtXUNzpTQrLLFM+DYlBTgQUD21qOK5WiC1ldXbgkGCXrgeBTE8QBGc2t3DupQCFdIZaPjEPIg1mY8QgDo5Ktf/SoR99SJk/x6sRwW7y2S+FGRVOubNAirVgjuzN1dCsmsOqml0hW/FtWzQGjZ+aWXXjIAIT+kxUAIAh3+GSs+nYPouOEeMfL2tvm8nGmWb91On71968591+exPigUBFGZdFlBxTFNPlxY1W/cZPg2QLBMPbdyYliI0u6lzFL3zC4MkdOTE/qjw45MZrA1knP3R5cvwvz07PTlq1dv3Zl/4sJTX/zKlwFHQy+LThZfrkce7AOQPszE0KVZ5n928dtnMDVzmHhKXf2jH/3orXfec04qSZSiwkrmwt2lDy5eVAkrAC+++OIbr72yspRjyJ598sILzz33b/7Nv37l1VepumHQRERVgUoZx7pdoVevXXvttVeg78knn3788fOPPXbKaUwkY4hgZm+OoYLmLni3ZvvjP/o9O5x0+xOnTqoSG/1Tx20sHrdoYHSRLVysbubUYG2JBThnik2aScL3v/89LUezDiOI+8XnnssKQrFEFC6+p8ZzWhNaCTkW4x/NH3rpzRqNVmyJEWU1MLOFsTHn8CA7wIuj1YO0YqcY/lgOJpq7e0dL6GxWUZ544inoRXNqDQk49fOOc3ZsXG8vAqasMp6hKkUvOMRtYsLcwK5mdZ+YnL49dw/jBhgwpg8f+eDDDxFT42CmunQ5Xe0TLvypuiqxlSh6YdhLcRmEM+fJCw+5qobz15D6+mlPgD3qUzT9gCxjOiVFcgZf8vzEJuDoOjCGB/CER9TXpCoMMQkLeDzVXwSA+tYOKXBUeErZeVQn8TbthByiq6hKL8N2RHmUIIScxs+eueSVh7f8tD2apkIiXJ71kwy91vAaWJ/CU26Bp/6K3w4ooe36NoGNp5W2DI0CG4ex1U+1uJqLbGugZ/XX8IPPGv5pXw/G/Nn+Jod2hog5KTzrX/UXFs+LinwuMRKrg2CuO2dQsZ5VcBhmNtC5vbfo3K7hzjH1krPOXrq8k0nYSvbpklVakhbH1NMhREeYmZqU5/rkuKYQk4p/aXVFZH1Q7yNq6LDWSD1d6SJnVsGc44SoFnbGYjGJO9TIujBP5QNKsX6tOqXxA7ZWRMi6J5EVPSXoE64iBGAHm8ZrRuySPEbJRfRRceB9IoMENOjll7bJ85GRD8ZvElYPQj2YRFZ5bWWY5mji12g1Qg30bKoQ5XmBRAgRo4nGk5ByClwmBmUhLoKx6kYql79xsNV3kq01A2epuUJC77K1hl8ju3hLv0sCERST3tzGbgUycg1huwmtnixb6sMKLSylDHkpS13gdnNnc2NzxQRgr6+XBgUqqsW/5qWoxp6JsgGeRBEjfpNPbVFEqa7uAWqwTvYkhr5It1bSKZLRAzty+ks5M5lQLYKL4oSPDY5CFsQKY8u2lUlMTJL5Mw1g9O8gZMc+ZrmD8Nc3NU0DPYgODNXYvjM21chSvye6NTkxvXVMvhPFacpWlhb21hanJsfBaqxxeiLytuRuXev0mXPOqDFEQuKR2cnRkailQtvDTqyOk5XJs2HUuoHBxVejHuUdP5Wo/oXgIYyRAnU5evcqCfonDBiDDOLGMhCqZqlp2Dt56ifv/DiLqEVwN76bUSjRK+D1MhMkT/Ghjo5WDkSShQUX5SzIX48mgvjkOoIyLLRwKAR42h0+IUbXqAYIPksic6Ow0nlUUEz4V1yBa5f05aIe0XReODSqOuuPpCEmJ5XcYOP23J2r16+hmlMnT6o7p6zCYSI5yQ140vLDjySGcjLG0PDo4npUe5WueOoAycMJLDDkoQreAJAV9dLfVQeB8iNKTxNQ0yd7T0UxL9VhsktGnPDzj7EUtIWqy9xBCeE8MpB79rsX9RFM1b5hcNBTc5lumW1EQGfSE3OaGAllV06HY2fHwUaiieWrD4yYmPX39azvd7kadpb8NHuU7vPIUYY9R8fGZ7Y6ep09k8NUNjec0hxb/75ha1Pwk/pkXUGt9XjLB6rRNbdw3xvdpz8zaBNUEzczAoc3Qov4CoVekzl1henAntpgH7yBWwXtDd01U3YapMuRLIv09llXIJKfOvv4Oz+Z3NpzkPxi6ljFCJmml+ewR42gIYhtZsiri/dAtnBvlXwsUFuI54lsOCHoAT3zgAe1IAAReFBpldwMKC+++DxzledfeBZwgNGDCHImsSTJ5fvLtMauGfno4mUdBEKc8V9ILtdZ0D+krG6LKClFnk7zZKftsEq4XF4Lw5k9cgQl6xfsShjvmQNQ6i6uROGu03GAMRlPQ0XoNT6CP6aRDKWMYjgXq8F8Q0/Le3fm7vmqc9kjMDqc88EKEcYaVpdUirLUlEm5PQDgp0zw7D516mSpeeeli9fdO/bjl364vLRKqtfhVQ8oZkJaLjuU15yus0fQtKrCdl+nevutd0EpR9Y7V69eV0kd1RQEMRB9E/mDDy5fvvQf/+N/fOqJx//er/5dh9ZvrC1Tbvzjf/yPLVLgAl/84hdhJ5qJRSduLV65fo2tlQ2vP/jBD9CUZnjvvXfMvdxSjsyKDY7rBl3ZPGiLhhqawOl2KmaB8vaPb+urDJMmp2JCc+70mRxPPpAJPYLAQDWHmMz4ZItP4QLaG89SuoTOi9XegEGY6Aqhmzsh3wxB3VEYKEvyilZsEVOATVWGPW3vqRQjh1snEJb4kCaaOJIoUVoRAGbuZWuUCN/85jfNo0YndEhNmCGWgzQ4L1nlJpc//dafQBGubb0Fv5TK6W9GTksBl65ct+dY/g6cYtygmtVVKi+SFtyEKz3SiVzDFV39PIVoHxHe5CxJohXXeOrrQ89P+xrhoN1zy9y0UR62sk0+FaACyCPhbOCppXhWV9JGXmxcA5U+L7C+Nl95aOzCx9o8HT7DJssIVONrlOoJJJRqkT0yUInj6WsFRl/1yjUl8idJqQ0m1/KUwBotCduxDyZsUvlYM/GsniRpl14BEENISKc9AtVw9W3n/Z/xF1Q194c8Abe4WoUap0LOz1NDPFG7J+B1JR7AV/xjWvGWYV18X0vX67hy9brVrqbT6bDVkI9H75CKRs2BQvrg6NiKzHvvzBuAeHB4/VGWBDwe2hcoYluhX8vB0+UeXV2jdobaGCArSRCDgqrDJWqNAl8B2Gt8hSv7fcjVOnpytWl4IKtscAjSapUVpF5eM6A+yqGzJGyTDb9YXh8VN2HNp+p56LVJ1Qovs+4imn8srZdKP6LVEtWah0PvVRjBTsEloBZKsCMKMx2QRNXETBFJDklGVn8IMn771vwR7KgBHBrr4PC9Q7Cif1pNYUSggrEFQCYGdFKC/OVWhGwwZCaRYpOtojN7MPyJkqoTCkpU4VZyLKKCgz6lRyMd2hHTKRSVBrSpGnlq4squtS8PmIUL5IEBTUNbRIRj74snm2JkUdeRfzaPua7SJsqefkMzmcvBARBS0pJBslvYta5OlKRmTD69fQ6etJSP+9HqkQegCMUOMvTvtMUgJ08BJ5jscPD86saqZfslp8a5RYfin4GIyYYkCnGU9eTYKAhppkgShIsLTz7xla98xSgMXMfjBmb2KgT6/b3ZwzPXr1757ne/awShZTTDKZL0Nl1mxaoTLF5++WWCr/6FFMdGJ+8vuls0+m8MTVakQM5Yr2dJIucqENdWFuLcITKNtKrJAVKnkdz8xOKMEDgxVupNxRjskEtCvYlG+JAnBRz7B9lKUodX5fLLv5ZlmgAMooLWsRbgE6f6jngXPxKMpTznB5TtQ+aTXu39oWIzesIwCCtUSk0LlmY1+hv3a792DYNMZEiSUYqncEQENsYePslZoHxwCZuACXHbHe4DzlQEqE7gAY86qlFI7+NOSO2oIdHac9uCPISbUqoqIIk0gBQ5irEQCdoub5FnpTRAQWwUB+APjbR6oP7lJJ9abompLzgtF0zR5RcWoz9mPhAuBUjOvvRYzXV39ff2uKzq8NFjR4+fJJSceuwMXkheIr/ojVl22uuYX8kJR6VXdbLvJ7nJgXZ/ZXklh1ZVnaAuQ8UeM/XsSLW4Wmf5MJEK6cV9kWpswQF84zJTCbAWq1od3OBa5keRviz+6bYqvbOa3d4mAGwzO3sHxqenh0Yn99ad7ri+nX6n72MIYU2KMGXGU6DcoZkWlzZWqJBiRmcnGKoAj1YWTUvBNnrgqTSgiX1KFxjoOzw95eoJ5qVkzjtzSwMDXyAImpuzvxFNi3PO79fd1ldiJOxQGGnTubq7XHPv1CA5O1sAdWfmhqtlYWonkwANzR6ktFeFodipZjOACKhodbWHUCrPAici7OrtH2AUaMO+uZA4SA4MMIa9KEVdjHN27aJStROis+h3tuzqGjzCTRUMeHqznJVOG+5p1v1zP/dzN65dV2j3L3z9a3/6p3+KktY2Op59/jkrg0rRPebm7/rDle7cvX3//sapxybNgG/fvCWj6clcrAAFUKYD26H84YeX0Spe8MQTT9qbe+fOvZMnjzoLaOH+/NDIEHaDidSKZWAeHb15/ap5FRDVBxDuzJqYmsSTn3j6qSNHZm/evP5f/r3/TZ3Sw8WN61dVUpvRfDgTgFoCy7Akpybk6cfPnYMFVzaYmbn7wHGa62srb966rkZWJ1TEqgI9h0mLlsME7Ni+ees6XgAeed6Zu6V7wx2+Fgoo47GZq3OC3TREKLhy46ocqjSg1gQFcXh0WBQey1H3v+S0Y+NMtipCPZ2RQFXTTxQKTjlrjLHxUR2gDjMi/Np/+Q8ck2zZQYem7Kf+R7wmXfJ3NYzzi/CjX/zGX1PWU089o9bimGBEfHGQydYWc7GTJ/b/8E/+RIYKhSh5IiyPrPcZWIrMJLJuqLJc0/0CRjlFAQ1VCUPC6hJSGE0TWbb8vlaP50FPLVeEg4H8FK2JV9I2zzLAZd4vfgUpzyJJw1KJXiXlCFllXFeZAFI+tdhrfQucyaTFE8NdfSgmByLXzFsZtpInUEgtuuZZQqJHqDKQJs2qf2oaUwHBhBYxlVMTZgZe+ieEA4ADtoYW2GRY8nwAQA2PfFKKlqSu2idXrgTmW4FZAJqsr/VZ0c6vm5Togefgp5LxgxRKrzmILy2/EIVKVRPy19j1lb96mtcGfp9q2ge5H/BVwESoCRvPJ/OviSqd8DcFtT2hq3Y4QjXUpYL2tQBf8+tTGfBCw8awjP3srqM8s/Wwr9cuK/1XH5HIDhyRCQCGUyedUft0Dw3OPJNLSNL311yqknvFxI+qeT+zAi/7d+80PZRodurocYKd20WgTl3EwRwkp5Vo5eO9uPCEnf0BVpiFmEslKrUEfuy+FdKucm0pePPZym2aGfZyEGpGiMw7i/sY/ktIG1H1e+tZW/ngp+qvyUWqniZCE14/CVcdWumaT80UbJyYnHBxuBq/fvI0lggRLjkWrflrZPRGp1i0vfkkZhGXHfpB2tsfHGK3SYu3MzBoDyUevMGzvbmcwwB3dinJaJD3dlbZiji3g80AUQPtRkQw1kWsDMrUScnKVmIZ9bEIQkcJy+wieAVvlIj7kRs0KzC0nWnGGOGxp59xl97KgRbbJORhkvxGVjXy1OK10SXXx+Uw1DeeSzD3OhwBZxiiLSW/rq9tEZ6ULmvzSgqcjk2qhD6CPuBzeVkx+TBZoMdURFYcaMWM547fKRf9qkywZ5Pl7qGdjdjPOLPfjTQOHd/YZFxKH7lFFCIPIg6VHR0azC2hE2NOUDJGOPvniaef+e//x//d//n/8n+1bZ3E9uwLL+omJ06cMttYWlxhPURP+L3vfJd8b2X+3LnHrdhf/OgyilX9119/nRStL6iyYd3yuZEUPd9fWHrq6YkFw3a58QbMkEAAhcjr15kpMwOm2zLlzsGAdVZw8/YtGINDrVOHNoa7U8dP0BgaozntLjJnOkcPZyy28U4LKk7TXPzwfe1LH53NyitL2ssnogVoZevVdEjmAg2gCCsUWZhkbSB10anRCiQL6e+OEsEqimFafKn0rJpEVjJUIrBVhBjjEzHA6UA8eAK/HHASaSUhnGgUlgIim0tAhdx8IvB8eOWGUsSEwJGJaUVDo/zFUSnReNznBSIqYad0a2tFg73FHQpA6XcMLPAaOkRXw4pFUt/toPDOWfQxHsuALhqsmhjYJhCjHSaHlf9H261v9G6t5wQesUjaCJ8YHNu3Q6bUmaVmPwB5v7vL3im1IJVOHznmIlGXD0zPHlHHvoFB6Q356EHyFXcoOi1vn+beYlpZbCvsOWzKCp65AHGfidtAmSqnZhlyAVaYRTgh23W9Mx2Uv9RYBv5MQHTfBOSLDlM+JyQKhfTpJOJF9FCod2RZJ42eIjNXsLIzMXPkxc9/8Zv/7gN3oqrVyvL8+NgQ8jC/tDEPviBCU5YWPEQr6kB8RwRlv3OZpAXawri0uDYSmdNkkhC6kOjwyNBjJ0/giuiEypXKmyb6vXffhrqf/OTHkli5gHbYZip/7vS5r33ta0ZzabFviwBLi6TKsK3sCM1AFkPxEEYPbTjYegw7bgVxzAzOIzewqKr2RQNkd5BU1pR2ZwRYLI0Xl1csWuoOPgEbv9O/CMCmOuRbxwPcX1rBNuTAKUJ/peyXLZqUJPuJosfI3SYhwrLMzgKQIuALn/s8ybz7T7717aeffubUqdP7+7/3+Pkn/uTan7z44mdcE6Cj0qbr7bplTAbv3cP6HbArUJeTtQ4j4z/90x85jowZExT/+Mc/Hhsbd3rP0093UDmw5f3Fb3z9N37jNyx8WGZ1pcLRY4cZSWFpR44fW1tOxytjiHPW0mM1GEYDC7UTqkC1TTRhmJgYRxY+6SGoViesArGWc5qB+BxaoYVQSRY4dHgOP9W6smWVhLjTW4oTE6ZUQUxOnmhCG4jskwPTqs29lgPA1s6WM9TYODrJx+7rof4BBL60cP/ewrzDHqB2kD6H3OEs5IrozkPsF7Slc4cs3DB9xCtRKmFFJ1eQaQJyseFRzRUwf3d58vC09saDsZs7t29jxAhR0TbBAB5UkAxOvEkFeczepqesovS4QMcuYWOg2kG+mNnq0GUMpisIYVUOgrr4FeEJAE4m1SMkqQ5InD5F1hK77Woqz8bji+Reqwd41VNT+FQ9yarEbJ41XEOIU/UgJu8Ciw4xsWqE5lmLUE71JEbJvHmtITXQs3qiCGjDVrPyWj81OfM8CPStXUS8iZyIPMVfIAxXKp5WcJivEM/qauSaf82k+ms+nvhdzc1TNZqv1VMzP/hsItRAr3Vw5RHSOK8Vz8m2wNw8NWuFTWSBTXh9awIPemomQhpQm681h4PPWm4NaaLxNH6fGv/P8HwyhxoCeGDUKhgXOOHkfnyxRgAAblCdylb5uVQhA27IJin2rZshaezSwYCUtkwhiUscFRGdpO6vp+fJdG9lRds750GHxmQyHrDCLKu3MsLxMCsDg27YYlwFlXeLABQtC2gMWsoyAHdmF2PxR+NjLPU0lTVamHDDhsrJU7eVpydXK/LQU8vVzlib5uBXVaiv9ZNndQ2qvYpQA2tMSXytEWq4gbsi9qHIXtWxxhGheiSUQ2K2c25nT3MfrmFqfBCk4lcDavNIJuXPXK6st3Xsbm4sOWJ8de0+e8n9TnsA0lpdPYbhIwZOIkHsg8raaOxpCqcqsIeYI9dnnhdbZtbAyTFThYhoEXaoBfe73dQIt7XKVg8i31CzuaQzI2hOXdOyhWxSI/lh+yJrCE8DBN4rghKdxUmydfi+T8wbJIkN2UAOyyeaoaihrtHgsAhkZLj9jl5nCUQkKo75Qi1IfF3Ypjo8135BW8IcUwELH732Gr2pIzvXWAFkMDJUscOx6qxrZ647OTVNjUWxVRpif31143Of++zZ80/MHDmKJr/6ta+bmRgULLwPU+DPTBtHujt27yzff++dt92O92u/9msGO0vxZgLvvvO+IuRGCDa+qyPpVh1pzxF/xrtoN69DEa4OCV6Ns8pVFfKQisAVPFSiJZRQUTnUqE4M1I7unxjE3bh5LcJxzGayj05y5crfk8grW5mIQISQlTy1qU88nEBOG0lFTAerHidzBEku0zqS67OAlxbYspqcmTB2y0QME3XrAKJxlWDURfKav0BgQwh5Ru8mjbkhWUJOKaosT58gFh4qE6C7FK4g5ZubWcIRWTQOtKWR08Ylj9aj1CNE5WuL+WYh62P90Q2vIIc6BiqHXKzsPsddR52ude4zeinzmXJzXAoNttZZeZGUY0AfEdZ8gLBtxt0xODJFKnRdSuahRm/LRBR/PX1OEhkZdarhrKNpomCdmNIQzuU8FIWjvhbhHsdi/UZzyFAvx/uUjor9184YRWBWHfRZ/Tpqi4xjRYgv9Yw2rFY4RxtlVBOlWOXUqIU9Jk3xMHCq/jRKYYP1Q5uFg6nmJivZhQEovvhLehkbcnc7p2aPTx0+cevKh1YQ+wbY32fSoX1LQ+Qpe6xRTyOj0/ZkKIj2SL/Fc9WibDPq7LD2K3sNTeVHc/3YaaYwj01NT87dvi4zedCjj0/EBuziRx8weIFY8CsIKuAN+dWVsUtXrzDMXlxaJrmdfOzU5PTUwmLsMmimJmeR7pA9pQyHEL8ON6shxsYrzcjNqgJKrjRM7kDY4PFEpb4COwOfI4DXYoyHVBAD4qRt9jUNXfbYgCT4qsYjlgTjMmnkSs3TGDIsxytFvYjOnQKEpNjeE567v/e9K+YNxETT7n/7b/8tFcX3v/9D2f34x2+6aZjBPx2iz2tLuv3KYH/vyy9/NDLScfjw7NPPPH3kyDEzJHm5/Cwn5oyM0n+4UkR8JeGJEAcIRepy8r/w+Dl+NcSkso5ZhlLJOVsFdhbuGw19lbp2WjiVla9SwYk+7Ag/KJO5NT5cD0bExHEuXrx07dqr+AXImQBhB1KZ5dy+O68JwSBHTw1z5Nhx1R0rVkA6tjxtMPfUMPr8W6+9AdGU65b/pienLNrOLdxz39bhyWnEYxxYWWMyucKm1OqSWfoqJf/qok1HThkZHrTU0Lt4/y54rl66fPvunHOecsrk1q6Z33PPPOPArDOPPQbCrCmurzExcrHghx9+9NY7bz954QnoM3WZmDzEpAfwmi0Md79j4d597QcPNEhuEZZURQBp4n537h5U+IoiUUolmmC+CH+icVCk9gpFTjhSeYoYFiawOtFKtykcs/RY0dpdOp4kCEW2OnMYQTtE2vKt9amJjOCqk/MDT3QGCajshHbCp7Kgr4+2oyUomRa1O77QDi/t6GPNUDWrx7PxpKCSLCEFsPqJv+UpmbfiV2Ek8Vq8KRw2GZQSa3K2k6XWgvxBYjDdFokq9oLwFsh+W66ipSJWUPU0TyEP4CkpvNaQ+mzl0v7kt2ZYw6u/PlvYORCz5lCB5A95FFczafL/NE8FUmQRDhZaiz74/GQOJdUDVLdbXnBl7vG0U7U8bfjra95qKjSb0oFQYhhO0Yn97NgRMVrt1Mkcu8SJNUXNVmsVUVRTFWFMExsgYhteDCepZBMzNOK8YNpQ3AY/YUhN5sBnnbS2vLhyb2vRqVxd164wygxTGx0ljljk1Qc5RetTUkmSK7d7jsukXjlkGkHZRBtUjFpTaYQFoIxlnrUi5YjrSjlgxnkkp66jtVH3R7qmFRqPaKrvtYZUT/P09WB4zVN/V1x9CgEAuq3PEj2lS1XRWJ81Ws2qkpCnZWvxJBTe7gf1VaMkQ3FKTqX5tKYOnF4vf88yDUjj6GSwtNXBhnV7g24Hk1IoW62VRbJ9zL0a8OI51L1WDFBlLhopnxS+w+q4p3t9R/JaESN8UmV6oLPaMbcTI64CZ6DaoP1foy/txDylN+rVKpftqdmIwqEVMY2GvkIYPuwsubBWp1JAWJEADEY0+T6FGhgBlYE2kxCVdbkSA+bCIlSh1kI4BRC9jPHeYoKhkLGr63CXnZS/tjwz0AcJ1EOUTeHJmHfMqbsMDcePnzKQIXjjFHJFKmatF544e+bs+SPHTj529vHv//gntPujE5MgfPyJJ6emZ+1U2FxdYm5hPmNJ+aknL1AW/oT28kc/IfgCldQrsu0xjv7zmtsxRkZ4VOfqlevmCTFWqqawxUSKf2JimvzIwln7QC/8a3d/xdRni6W28NS9GO2AsFoYO+5PM0Cm+jq0BJHDBlS78Ef7qClZB8IVrfPKlhNecBaLWZ2u+sVUfc5kQ48TLXSyt2eNwkyGGCDEhmBPGQKD8TeMaWLNpOsJdOy5+HIAA0FKzpPjEw7lq7V+4fnnCWeiyRapiKlEfpFNAMAgK1/1dxkCdWkjzcSJKX4FRrQKvxAOGNWjRqhcpMICEqo/EK/hTysXzXl2vBDuiTpjI+Mde6y61wlB5EAMCdMAZE//6MBw9/3FJUon595kEC/kq1Dr7Hfvb7LOYRQ9ZX1qPKZNE1MzLqA9fPioQKbC7NXBVsx4Mku2fxbb9D9HW0Q5Ae16THZ9ZOlA18wYh0WGlepFjsbN1D1Vao1ZqhdcVR1ePmTUlCBDf741I3krvgjiJ84BJyackP4LuuQVTEqt1IzcHjV68XsvogmW0n302Klzjz996/oNJwkN9Q+vLc+zn8KVzV/NzXQSaCE96ZkxfHF8revbyhGZGLaFXzkjQgty9ssSxolGiN26Gb8pcQ7/GXZEVe/9+wvXrl8RmXH7P/yH/1Ce7qHSg1aXQ0umFkBCGG+88ebVG9cntN34BMGMAKnF9Snxz03NWGd0GLxuYdfvkGukymWvC/N30VsV+gvyWpNJ9ImoCgsKHXL16+aqjRcx72H2YcaHhWEnsb7scgDX2u69zMZFllzRdij1WqBxXmvBnhCNgef6XVxaCBmvrgADkxGfNY0iur/+9SfIyd/61p8gVIfxO3Xnj//4T1DdL/3SX/G5dIxdrOT+YlYAHLsxPjY3OzVL3+AU4ZdeetknXcUGtuEhB/Mvmj9IpZ8Q93VXwDkFyIk2ayvLGljN7QnCpBjgzg30Yzq1a9kDUeqQfcZHjx5WSRHgwtoHDig39XeuKoyjEDFDK0WaF14x7mQxXSjKhzu5hwsXMBlwZbqJ7/ETJ2gvzJNwEOsPl370I0zNZiVaED1c5mZUQnBGixs0hcC2cPnDH/5QPgA+duqY61cOT8/kQPG+ffuEhw9PsXok3AObDosew0UBK6s928NrkIvaBvu7z5977Ny5M7gC9sZAktbIucVK//53v0dEGBlyhuekdQDbwh2ga0EDeACALnOym9dvgKEcCDV9ZGYWwxIOVygv3cYBXZwbAOzfKSMfHMK8Tg7ziQNHGd1xBwZGhjF86hESqmgHHXxKpZuhnAbD8CzOwWfz6aHwGqcJ5Al7+nhar6DHvdN8hSFVmadOAJoJQ2BQjLSlCzyQzku7J22bwzaA8XBt2MDcIhKBKbS4mqqGtGPCS7h4eFvhRPJoxc5rmQyUT8m9ZJUGqMywAFNTyY2DvRqHn8ezZtXytDP22vamljVJUyhPDWnCG4/hP2mLU1bbG+TVVDVmJQB+9ODJCUE/njWJkKa4xp94B8IPRpCqeX2kpyZskjfZPBR+MO2ByE30fG+HfwwtFYACfBrWgh7JxKvI6qXFjGd0srqIHGCm5uM7JPG3VqdzUEjyN+wZ1iQLM+k9NDjUNzY+MrM7ZYqeLra9l7n5ao4m4xwXbLHTxZCkN2oenRSTwZHwDT2dmCJ/OhycSh/EK3RbHElL1Q6rOGivjldkrirdtY4qiOZZ/K2vNc7BpzE6o2GhzxouSfNa/TXcU4kVAzXEK1fjAENgpdIaKLy2bfE8aOWS6IEpmoRCKgnxmBTRL6gY3kaC8AylkTCcAlL25lbibECqs4LCglJsYACjZ5kaWKzs8W6bbcQOKwAdG8t3qVOwZQ776tyndaYQIhfkJuaILhw5e7eT7ufQZjfLBDUsQoySiTM0g7quuwacJLVlTcaia2+u8qUzTa8hu2NNuXmAFZhzSXu6Bph7DvbTs4CNLLGXnV9FbxJD6j3HQeNVsjZGaHRQiabFnRFtYEZL1K6yFYFzZIl9kBSzYEQGqIJOOjqtrS0CKwU28hCYoktLDfd331u4LUc6L1cIlwPrHWlLBO9liIykHVQzMjKMFC9d/ADt/dwXPnvy1Bl74NAZJMpqZGIYMAQC9TH6GRnOn37m+qWPujpiNvOd73zn3/27fwdmZ/UYUDQlwIqgEws3NQI4kIjFIj/33HNO7bu/tMxvbkyOJ74QIKzkm34s3mc1asKVa/JMqBlGExhUJK1f5rHqCxJIIIOSChjHCtEpSpWj++dEsLRGfBWtTEWyE0BPlAnVpsjgN9kAJ4yJY4zWPcSEc5VlFqPtxAGhuZyRUdEVpcJTzaExBrJFkRolW8F/5hiKMETquTbdiUkSgFKvcigThlzyxQ88zVTlFhN++JGD/FVTKt2ffvPDq28LdAgZGLhaL6CCytWyogkELcCq44/ymyod4srIViIgRX+Gn871zIO2BjacP8t4eXnMndWH+pggy0UOW3ssBXRdxzDOZP0wR8fqP7aVZ1MnvePXv/w561Hl/JExG1IBSdMMFZl3IJFcrLG73jpIMucRSU4bqnDdBDgpIhvwVRAZim98C9+MNF94DokDfUdl7zOASx+uVawRamUTpVSa3lcK2ZavjaeIFjJ0JFEdQX0uryXvirNaLOqqDC9rhUpTYsBqBw6NTJ698PSrL/9kef6mmY0erNMzCCV2M4SzXWB0fNx2VXzJ4lv3YKcDc4s6GhVEcHIKv4mS/uX8fuK+q/AcL6nRhZMV2cqNM9nIJLxqTjMPhFK0oWXJ91sb2bMBqxaynF9gQ33f/F2trwnhGMHgEWBeWl794NJP0BiPQmePHNUpdD0hBOPaKRC5rHxF/JyCIA0i+GUIOV4NbTaystwCgwgsDBGtCEhUtROtyFHy0UcCGDLTx61HW2Aslqv8xXgyV5cgch0TG8GooaNOnrtfe/1dKgz9cGbmMIO0/+//73+2+Km2v/O7f2YjjUhnz51mffjBB++9+dYbd+7MHdrrtbNJRQEBJgltfRgeihIO9HqsrOEhs6XV9cjcrsZ179WJo7/8y7985PDMzRtXFzZzBSMluiR6prpV9UkOfFJwd/fY8Jic5YYobbVWkHw+85nP4VPXrl0mlzvwiNCsznQlZi80H4ePMN45/vQzzxUwumymdtzS3fl5g7fdyaYFNEYKxQVOnz2r79AxQZWZ2OKioaDM54oR2PTEJPxOjo/adnH29CnALK4t3V9cdK/w4PyQjQS6GsGd4Z0uMdDbM2Qrw7iDZmMcp0EM69hqWlHb6PCMT606ryxn34w91wNDzzz9JFqmEsktBeuHqBbfeevtz3/p5yANDVVSUzUcR3os7J333/NkdITpUOqwR7JS4au1c2Z0agQJWd6bmmJnJQetHlGDuKPhiw0lki86COQUVwnLM1vjKpGVAZ6/OsCnOUoXT69LEu+JWh6t1ybckJKvRSBLhLzEWfqoHs8D5e456UyIUpBvkdBo1rwV9liKwBcht+FBIknue82kyU1Ik/8Bj2zF/NinJmEt9+CrkKazlUwCPlCaJ9UNh5XmBycKE49+iCvxHzzkU8M9HwFbG6J8qtUs8dvBLRQ9yK74ain1qXGlrS6Ya1w7TY1WqyPM9/aX+Ourp8JrTF8bTxOTB2M6+FoTHgyp/qagT376tJCmuMZTYzavbaQGt6CoTZ+vWVhWHV6a1GwAYDKuGYBaapQTgddW6gRJFH0xh8/og3lhei4/jLLkkL2aiP9Q15rL3qudRhFHWOtZFVYuXu8J24Z2XS9MfGmpdCt336wuXVm6ePlSxLWyhVG5x44chwrL7uP2UJYTzaXF67GsmomeKyt9VmAqgHviHaWj1BDMguSA41Vs1N5Wn62R8EBrNs3xEP6Tcxt9NZ+DIfwS4mycr/WTkEKMsJOAJlWNUJ8VwvqppsXk0mcssHBFis1vXopM3xl7xZIzNOePsLLPFjmbaZRjw0TGLZvjYnZAdibI20gTg+PMxmOw3CdNLvfNZtLdTTOkrQx1xDt3gEbDjwSgLw4eM3+IQJrWLQQfvqdcImm5vlEsrLWPmUX2QvYhg/GJSW2hQZwKrkHs1TV1EYLejB3O5iF2wxYByehDpdg1MISRyTwjU7c5T2gjthaaMJwhYpGSY+XlWyYPDswg6EepvJlZodt+Vm0agL1dxW5mfogo4UBudhfOTI/ajmkcRFGWFgwBZBFr9NBovF9cXrxy7ZJh8bHHTrKsPX78pEtnFH5/yRLCPQY/IIReanyj2MzhIzevXdVkhrmrFz+4cvHDt954bWpyxgBKzAUPTaQBGtgIe3x8wsoTqIgF01OzvtpaQMRh0gNpkZ9spo8wSu1o9rJKJz3UkbmTaZmHcLvqWUsvLy4Z7rUQLTQhI/fvrKwudGW7Gt3/4mJ6gdrpVk6Y0Rbqre6AhIdQ164rvWKOu+XeAFdw7NoZkv4CHs2hMAIbaEuTJb5wTr87PDsLTlUDkhUAbaCTwol+lLOdyoS8dlsVBPHRI0dke/vWLa/GbEM5MNj/QIiCoN5rLVe2aiQHiBICZuViAjJfgPellS1LUL0jSuQApkA5SLJZNt3JRw7ScupFOiWm4V/+0FHGOnznUDeOoCs5FzJNPzDsWD/S4P6hXltJjL+JFTo2nWVPZpWgY3N7jypxHIthvz9zhCQH8kG16B9m+M26ER6UCFTUubrpNJtNSw3yUWy6vkm17UrdXavra9nJXqRM9Ct+2Y0SDlvKxTjTu9KnityQTpyZhKlH4gSyzAXiAmSrK7bqmyyEh1kX9VMqkk+yS1iAqX/BTQSkUkwWGyTT6cTFJqLTgeIyUPlQhiyBZRiwXWTv2PGzx46ffnt+zkyasRMyMds0jyT3IzbdyplZBDH7jkeGcq7u5NTopK0a/a4fiY7crkhnejlsBnmr/tr6UvgK3DC773E24z1HTYqMThwmidUTOE2tNbS+7OYGbeq4HyilQadiRorXb9ygKTCj0JoOsreBxQikddgI0fyK7zZfc4x79+mKlweile1hlIVmIFC2VEZIqJKN6hLHIJvzCaMaGCb6py84NUBZCBU/8XHpfrbFC88n033aDmdYI6pYhllNzA3cWplFuoPpdVkbWtXIMAch9UAzuQVdtvirIXF9c/OaRnYf3OLiVn//lkPwoRJHsGUWcVvFE/vokdlnnnzx9Vder4mJqsY57EZhvlLD09nbCeCrBkWRb799bWi0Y92xql2ddji98cZrN65fWXFLwnvv4BRM6vE7VYJHkbUliG1yMssBKwxi3ZAe2tjfD28aGIDTGGsWFUuM+dZWX/rJTyn4QSKJ3Ojmo5Tq2P/lv/7XgYHCbGW2h8Guhnfefs8mp7feegt7hQXOREDmtP6QqAzPqfEJWTEuMvOhY1hacfimWXXgFB9TwFMWFuY1GC2gNuO0omfZx0/703nx4oe4EpvOwZHRk24hOn7MxNxo+d7b7zEXe++tOZW1nsDUf7BvkG6LTE/ZoHYQaGlSWmWp48L8PfW1N0AzL9ydZ7AF1a5R/PD9D6DKBADfv3HjlhVepptDI2Ngw3BNLXAhl9cwIcUM5GACEI6TyUksvYJnlJ7hp3U6m7aD3upgQz/3bFw6+QFXX0Xm8fRFtvV7feVvPAf97UCpwl8k5yAPJEXCJ7Vlt5ZPoMl3/73Iv4hxPh10wmsOAnnqJ4FJmjwi+T3kRCsRWvHra0IeFJU8paolNxFqtq3Xkkn1e37SQab4JUkKqp4S0Mo8SUrN/KasAqVUNbKY1dP6WpBZQw7iGXcocCbjIKq4ILKQYo1f86whDyK3W60J+Rkemfsq2xTzCdck9KXx8wR/bde8/CxPidyOUPGfoDZufAmWSkhpWtLD9pZrmjArDnhQTlzxbFfWYvZOLO5jzhGFVxla0IXDEwiLaRdtkM12sjZKbOcYorR6/YCiI8/H6Ym6uZ6lv1M0ePJz8K+fEg40ChWDmJgY/hD+40AAo4Lu1pN7BpokUuHOQtacHQGU9rIMED4Nw6lehar6ir96QVpTBTkfxz+QauDBcH4lSqLX8wPDK0911V9TVSQUrLbYgjheZcvVQtvp/NY+mgCfjN81gkxqnGJR4EKgnApax28dWiwtkk1u4Ok4RFFhQSHNY9q2s8kcJCuRh7bSXFXxSN+fu8PMGIhPph+UX6rPGEJPilW0xGRi8LdoRkZEr4LtCpjLWOUPNq1jq4eD4GpbFCBzF43VNWOcPHFI0eCnoIqetd9iOT2VuuPPToiFK0dFECzkkCoV/Oc4xzKjMGCvri8bjNkbJNuNtW0HKJJ0i5jonqehwf7p0cGxkYw+JGbb/AzwKlO4nGLjlteWO9Y66IdASzcMJDfNf/FLX0CKdvvRKU7N2L45Yk0fe9/aoZjPxeTA8/wP/+E/MAFaWZibv3Ht0N7OxNgI6cK4bDBFsUQTYKNSjukZXaDMEfali2/4atCxSmD7O70YoxjCpBHDs6zTrxH6SVpUp0YPQiYBu+wacIHArivKfIMiFSc/1WkziJRi/NI10APwFG30LGYYea09AgKB7ZNBHDypUdH9AVhyOyWoGqWRvymESpIHxEfGJCo4FF8j6lAGRxUx6wgFHtqj4kabxnd6KKIRkGhFZ50HOjlFjCZCLawuOuKD7swnSczzlStz8MCzcBByRCNw+gRytXCSowmhuWElbwnLfqLYF3FBUBlbfZUPF9aTDvoxh4iBTNzfdNfhxpYNF9Rlgzt7lqGGx/rWciwW42LLYtnB6Dj5iSn7kkfOP/64yUKuMhyo2A6h6m8bljYPOd1l32ECSqwl6SaHWP54KYMrecnkCSXoF8J0LlxQ8uqselklU1lzPQngrcAOq+GWiZ9MCZmxzs/W/qbX61PZ7E7hmHwTV9WqrC9Flef96vty3c2RoGUCULppmS+nA5mlFHRJWrmG0qEo64ElN92+YlLOoiB4BwGdO//k9UsfbC7dHnJAkO5vp4Ll2yzrRe3IRIftE2F3amL0c597Zsid2kVrrpUJq/c2s9b0rT/5I2IeodEh8khLK/tqDuzIWJ2CSKYvowQUpRU0Ls298GjXMxNA5/c/2viQ/PnmW2/JZGpmVtq5+RAh9oLmGYpJyAgLuTrHl2hmYoo8mN7pRLBt+KhPPUKvL/wn/FkpoK0s1NN4Ii1IuFoLhwWIYy1LzhzkAEkOKq4zufmAh20FGCSx5218hJ65LNxRpmxEAaFcTY+qEb+FrREWgcNDNvuu3Ly589RTswsLd+wOLub7tinQnNjxsGnll5kUdZeOR4TVltYmTJwoRWeOHDY/xojf/+iiUhdXVmcHhhyHNDKyNzXbj4XNzvbDOMmbgsB+ixNHji4v/xWKYMyC/MqaSDcDljGTc4bOxYuXfaoCvR7usHy8iWmPEH1MV8RGeAQeOzbx5d5+kODX95dX7i7ch8HchT48dPPmbTNl+o/xscmnnxo49/gTv/KrEGiWv377zk3ytCsI7t6+AwsDfVi/5bc1DYYIVPD73/0ezKqLqxUMWA6HymFnvT3rWeRfBaQp/L35u/BY8a7QwgFCZ088fs588dqVq3O3bi7dm79y5ZK9ATrzzNTMsSOzR2dmrUFTohiBcwWO6vX1AkZ91UjybA4rmxycM13pQxQVp/5pNdvmhmgWVVbX6R52ME20DfIbt27CITqm8zIBQIVWnIHnnBM9kAO2IsAZ+ItrMYAiOCI1DjGlkz7KiZyvB1yN79mENRF4xH8ovHw1LkRFpycDISJABj9l4gwtwSUUTUTJRCHFFU2CoIddLbeGitb2ROkRxlsknoNpmvgVKp+Kp9g7tjmawBKt1qhKSPFHVSF+yRbA4tTaBfriaog43mqfrMUlbcVP4ar87SISXvJsqbEl9MrxSMVTI5SwgNqE16+e1VNj8itXkurqqyRczaHJhycpSxE/21NjNvFr5ObZZHgwq+JvtEKlWZsELU+pdfwtTzNCNgXV5gNgYkVYrI0SjFWnpqlXUUQJ8YqWanKvmUEGFSgoV7LS7LRaLuC0VrvMNnWrjByEj0iLhehSYnbUGJd311sispwdJTc4Mnj42GGf9EGszCiCS+AVS6sW3HIWWNfifd0KE5etJ78umU7W65KBXseI4dFYDSlkdWCNiqa+VgYiWy6V/ZkuVSuuemqS6j/4qcGDwOok4lEWcHhKaakvPzTWfDxrSA2sZMMvLX8T6DXxY7oQp5cmPZfjLnsi17ecglJWJIRI/31BbdBP+o/wZJNujzsSD+WWGaaKdc8sCVaBjgzf6yoHaxLzK4wR5va3N9dI+boiTmaHrJsPoyyyKUR3MQgVU4F64IuqkC6wPnApU+tubm/u72w4swdITuqIqrHgBEKwbq56MqkAcNhl1PMRf6nodtnD7NH3yywZU/LvdVD40epRumtHjoiJ8eLbrpxZW503Iqus0hVDpzjhDs3uoRNHjhg26P9IibRFwVPuDT60ur5q7ThvKCmojATjlcIJjVF4/bVvfINt6p07t+5dvorbb2Wz7oq6Q7oS7VsZ6e5bXlx39jddHR3+0vyd/q79mAp07J0/e9pihcHF4Gt0IMQb1GrjloEjk7Ejh4+dOH4KBmBMnFt3bjIgIP2YRjEKoUGcGpjoODRu0yRjWS1Mw0/D6kmWyOg5MIK0qk4R2DIh35ifKEiN5GNwhyJIFlJ6R1YYRNNBxBdeidCrr55QID7h3mi1vOrO43kkKFBZdUSTFrZ1bU9CC/HIqgPIxYeu2elpCw9W7Y2kjMLNxhnckgec6WdObh3eCG6vDlXZysLikiNW93ahwhK6Erm0wN6e6QSkgY1HcZBjSmAyQ6F75dadte39xTXB0cKIzKMi4tSeUptPCCcEO0I0CJI8naCybuWXctN0MvNM+sjeQRvNO5l2DfR8/q/8HHUCYx7SGymWebJ0KMIJpPy5qqiXiUGE6TpEDkwMZqDUWsUBKaV0djG0DiRlTMj4li4SnmqfK/2x/SZaDfDRgMRI2IS8jjshPy754JtaKnJ5m7tmmq0uNUpyz7pBshbqH5BSEvKVvHalwIZJ6DVBQUR1JkDJIzGSqrUyUnpqSuPqLCUggCH/lFR4eNHxEMg6Ox878/jRYyeurd3D+Le3Vlmm6a3k+FBRP63NxGc/+9kjs4eHBtyCZ2Pqrj5j1gr7bDiKKDuODIjFzo1EdZoJbTI5hBC0B/Po4e7dO/i8w69WlhdJTeRkX9E8qhAB9m7fu7W4nGN/GKBg+ERZO8BMth0dGZosk0ZdmJ+1R7ANMx17pbiW3T88llEjmzQQML81BN3ECCJE9Y1T3X2dzgJGmSLjMf6gfHTMIQQ6BI1U1pbhDPGbbUh44tg5ryYALWEPiy0nhMpKJhwALIBIKjw8YX7uLspxmzTcPfvsIEydO3eYCT5y18E4xKDO9G1355bm7ix+9oUX/9v/9r9RW7t5vv/91w4fHjaRsvEKHEuLy2Tbx7CTU6fpB9LgKAz3jPbFHeBPHDsyjViWlxZhk9iHvs37la4UPdkswmR78d7C3O079N/qhhFRjc/P3UNG+rberALV4gWa4EihZkI2ELvuuN5HKIRFzJHuoxiL6t2dvxMqd85P38DIYJ/+g/+6Q+CxU2eQL0tHy7Jo0Mi4uZ6T12zymL83Z3Pt8spizqrCIfe3L7pY+NKVkbFRiifHlVoigERU7MRcJ8dCOvpAQ6UD7rz97vs4u6mDjopFYNM4UW9HnxkRbgInJpejR4HnyLDttOfGOsEB3Zg7chg3dmZxg0f1sXiYsYijdRShRjqRuttp2L+5NXg9c9O9Q8tUWqgnBORUCvsQ9nrJR1vdGziKhsMsIIFZlD9zVvloEVQCBsBzEkImgkiXa5+y4vUhJ4mQxDng8VqjVc9DrzV+85Ra2lxhGCCKmtQYHiSHydZoWcZEcilGfwmf8oOFYByeWiyDcdFO5Fn8dBC+0kXgibKWHOOjv3DtTk7pli6sKk/Wyp4H/mUsUq4uo1zPA6DyPsIhYLzSH5GtVsKzICSPQF2QE55YXCPZpd7lK/1m1Bt0IhkNUnY4pkqWr9LXaJ4Hi6+vMuEOhht/vPpa6bw+awQorVgViDhrDnVe1mT+aZ4a3nw9WGL1y7OWW1/bMY0Q4e+lMmHbem5l3tqlNGiatRUeamhl3E6eisBIK7T81Co3z4QZU+GPbWN+mIFm2EDmLczkaGmr33KKK8opWRKyoNazFtG6fyDAFIsgdBMrjk63WjqOvtvtrDV5zcP5Gqtb0ffrKdS3rACPHs7eJ0Lm1es3cS2dFOekGXLjqi7Z9CxTdyxLiIQ4sgnAaLFv3N5w5su6E30dWMaP00VebVG1MRGF5lkGvwwbDUJadRTUqmM6cpsC4y/L034TCOBKopJXf5DXJoZ8ytEfOTGc02uKlr7kxn7WgTb0ewUnFv3DQyJRB5IAVDIhCkfiQ3pkamr2yPt1w2DJEdbTmGqRCqQteNQrAn2W8iWVn/CWFWCAJeHHICglx+mqNm3IR4PoN9nRTTzQ9xgRgTAaqOy7TcTdNG6mN94UWbh+Wk8ah2ruuog91/R20nBLnfASgwAWu+A+ti6hjggnDnugi3IUS46nlBXrlDU2lV4zDu5tL9y9R3owh8ONizQZw4OKEMbUhmmTE8093O9Yu/6cNmF75+AQUzRZGZjVBrgBESaN3E74TgWxZJWDgNjHK8t48cWvfPn5Z55VKBsDISBHZmTrpeXFzp7B0anDuyv32T2bq3Rv77vQ6uL775KG2Dvtbq6effoJ8zHzJNCiSxRoQNFUxlPbGZFurPiL3ECPZg4wOTWuecjxAo1uCjUoq93d+blNck0x4wGDagrXcMYgCY3jTjjxWUw20DmtfG/XBAf2dAgdU6+3IZWJDssiCzfqTIBFMLlBLbetBVE1WzkQlQzuxkcAgJk8UEbzXLipizlbSKCRWltTZNJaoixjKJTZPssQlyhN/GNc4LAnWu3JqYnZmcNEJQfCoJRKdyYGt287ufQOzvT4+QunTj8GBleXwnmVQMzq6XqNv2CgBiUFyRqEIpgnII6egcG5+ysbt+aRCmzohYAsg5ScOKNMntXpFYWL6zEZI3zRI/K73722uTc4NvPEU8997vNfOHX6PAPsifFJVur3VjaUUroFhbzxywGCGSC6+kdy6+9ep7UmZG4yw0DK1NVpQnUwTeGFquWPtMteKf22gFi5ATVwx74K1ok6CNUrsCoiUPpTTvzptgXuhBTRW54h3oSHJYSAE1ns6smb/8WhbZWNzCHvaHDyDBfgK3mHUZRSvOF5SaQ5JCmFl/cSmvyzdpeQpC8DI2sNE+5x6Jo9dvPaRRfWbe4sk31X11fQEsOnpfu6Z1TmtkPvZUnqLh0DgtdbVVlHwId52FBhzhwyI82KIIlGnxgdQ4rvv/vBex+8ayprpcssX9FTU9kWZYy2brO3z0xtq3dw6MLxU88MfMYdZ/fuLly9cWf+3l1txyaUFO+ibxZdA9tZeDnkT1/rifrVtYJEUzBwFf+FgbaWZ+sEQLSUxe3v3L9/l1xPJmJaYtnBwiHcrA9Epa6TmjQPTTsiLFNrBjCeqqNLWV1k4CQ3CNTT1M6OcDIk0yAz21u3b8D/YydPoW0bRftfeOEzuqib3t54/S0pze8prRfm7zOWOn7yhKOUpEH9dRHv5Zfd4ftTFK+jPvu0HbYnzJbI8X/0h9/q7+l2gYnGunzx0sTYJMbhxqsON6A7H7qz+w+++Qf35ucOH545f+4MZQJMuG/OGuXq5irDm9mpaWsOO33bJ2Znx7/0xV/5O3+rzAc2XOAFuWDzagy4O3fn0sWP8BGHJpjwkZuPnnCqT7feSK3Cdh97ciCW3TSogeXl6vISsVvbD4+OTU1MYkOW6jEgHJ/A50if4cz8+lGJu88gkL6hf3T4zIWnNPnwwLAFH59CfEw/KUiY2RSVw9zde9gEPmg9EWZAojg7KKDRvhzHB8Gs5iO+4w5pyL2cTjB1+Igk91eXf/9/+iMafTd8dXf0z45NOep16f7y1MS065/NAczP0eLK0qrdE/CMWO/t7GLfpkA9Q93bdIq0I339N+/M4X1WfCg8Ljz5+PbFTcIuU0TsGAE5SKCnb8gWIn0tPSxdstVFveuaeBotwLqblRfu6ZEIVEGcs+Q80R/yUilPfl8rjyucIr03eaY/J2H116fX+lUmNUITrYSbJm1bcuHP4OoGHIdImK/0DsKVpFb0o+OLzqP0fEcOo58sMlYhnykAVQL+iKjE8L8VnuXLKDKyrmI6ZAnVjF93xfrJCuqQE3yBGn5VOUqLr1D2JSiMqCxvtr+DMK5Ert4ize67VgRdEQFjALvjuPE+c/AwzghLVVaJ5g+/rJgheyizsrkM9OFlkUKLFJvs8d+8YdkFqRk/Cg5bhZYfQNXcAlFxjQe3rQElV8rESK5NHAfSaD7FgEK4HoQgAVojyPNB45VU4tSQ+lSHTBxq7D/nWVPIIExevg8ykp5mN6SYgjPPARCfmO16tSEqOqFCsdpLj1MmGMmpRcosKHVUdt+AHs0SQ10cgKEw2zlJqDt29WyvE8IQkFJoDAsNFsAyK1FqUVEdqEiRxrzDetoEedBG19Yq1UbMAcF/O5p23D3DmtFgXGYCo4N9VNGGEHwSOya+4FF1JkB0Mqt1suh8bjDMkQv6rJjsGQYiF/Z2DnWNUXZLuLGaA6C3bXDc9+R3toMMDZ8Rb5lbwELG9YIs/RjEYI2WGhgBLDMck9Ji0Udz2zuQzXxcGrc0rxqkZhlNIj8nI/JMOpvDwjNrIgOTpmPHraZoMy0UJXdwkiwqkgRGTK2ZBPmuOOxjguKCHhdj2XZFCt61Fpvemx2i+uY+Zb2OxfKWqmXTyorOGxPnQ5t6p6WZwf7Ivn09qHZjh1lXtwMcU2Dt7mkN3CB1jHCsv1VQHMC8uWUf2eaK7LqHJiYdCm7zH/Dp+Ahj1odxP3ewQy9LHDIx/rZL4RWu4erMdeIpod9OWyKjzAFOhCdlEpaiVlV3Whu6t5y4Qhbb7iy7d3NmPvutnCWyaVwwpmoWyASuhiiXyJNley2S22OmxR0xiX/CGcw7bsqoLy6CRokoqohqynP/8V4sYKPkZsibfT4xORoY+Nt/82+KpywuGAC59YJ0ZBbn3SxvaI43NtlHdEMradjgZHFqrL/38NEzbpbd2cjWXlSB3BxYbuyXj6HwkIufZg8rhSAo0OBlqLJwZXB37Mzefh81leHe6EYMklycbGwcbA0BgPRKwNcFDG4rK3OO217dWKeiOn7yuHkOP/NXU6npmQkTuRgMlcWUcIRCh+gqR/tvsN629aUHU0DhyFUHoS5VTQ1BVZWic3igc9N7Ln3k2PK5Ijb1s+EwVjJ3LlNUm7azVRyS4ZwQ5Pnkk094utTWvIsAVG2+kf7mxjbFZ98AdTsrngGGEfwGcwsUhh6dV4NqNTOQM6dOPXXhgleCDaTplKYpGt5+QURu2N3ptKvcfhKNpVoxIdNe5li6lf6SJZ7enl02Rypm9to96IasIcd/9/Ukq3274JzUosUHNjsGv/Y3fs0MYO9QD6K9wzDHvdI2wZS+G3SVeUCV4m0opMNi2pTBLPMRn3W4XcoGMRO5sKqMceUF1WUYSvcpIfpQiQGxiVDaQlD1tDp6DS+hJbMazZb7zDjIB0WUl4tGIxWvj4yyLi6clgpje6e/x62sFHYbuhe0YZNDg2Mr2NsaA5MxoGBkRoHkIiuXfGkPVpQWDkEW4OICD0ZtJHUwAD/eppdEAEB6fBhXv26y3zf44pd/4fW3Xj+0272+vGRrDvFLr7e1qK+74+zp45/93HOvvfK6Tft7u6v3F+xHLXrPXGMSQynCt+N9QmllXVRDK0unyO7ZMt0d7Bs4d+a89tVfX3ntp2LOWxFSsb4BugnHPljPGu7pWU9ndlDUSFf/tk2ZC6sbvcO7kcMwp7Iq5Wm+MDBk2SGrWwieDV2bn0Z+QGZ6dNScphb7G0u7i1ViBKQaE5aclVwO0doxatjAS6dQbPp7TFZCBwYrxE/wIwvtbK6uOEO2e3xinMX7yVMn9nbvG0FOnThJsmVTR6r8/W/+7ve//33iukO6MC5WMN16+ysv/5RgSooFTTnDqNfrvflVx12Y4rv0xMU4gwMj3SNUDZrDzCPNQbnuZKH33rvuTGF85PFzF3q671Lb04s5iKHHjeK7DuFepQJRAefof/e7352/uzI7O0xXceHcefcholUs2Flbbu4JACMxbqODt+dV3Yi8iNWBPHZG2TPhtbRcP+aCedFkmMfrt6+//hqUSa4VncMK0aiIzoaqToYU9h0dZ7AozBuSaR2u37wtB7iQJE3S108N/8Zbb5vrZynDbom+cQSq56/TwG9u1T3jKEDpYQemg8bl7m7oAgaywD5khXrMualAzpw5t76ybLeQ4kTGHeBK/CNHj0puFmbQ+LV/8A+g3Xhza+7O8b4hX8VEo+jDtMpta5Q0OD3wnEaKQVu4FAGrwviOHDlsLnH5ytV5VycvLBj40C5IIgkXF3ETZqm0I2VR47XC61fPdKwSRzROZYvsky4IVJkLARIHHs/KbwwCIvM3TjQuM66GW6Qrx8lfVqWcBw/JvTiwRaNDTj5QaRgAIGJrG4OUsArBYTFl4dNHFZHQB+sG9RluRWFreC5Lk06GVFaRTQr7KJdr4EtR+RvzS2wQRa4j4ideUa0WfwCqiw2UFOUbGCqctRaenPyrB8TRdXYWm5NDxq1w4sg7cZR/yjDEQ2cyiSSlyPDNlquZeGaSFCjAlb80V9rAB2laeEsGbZeIxQms/sbTjlIaveC/hojG1Wg8rcAseHirOt+ENZ8OwtkULRnM1bR/wacqJNtPeRrR6teU+5fL+EH5iMS4kHyQQBT7Ee0CcxEWzQSIWka/DE2hASWKDLslRZ5xtY5itCqbGUIYvlGgHSHISbsU7I2PjSADPb26spy2CYBem/C6c0OQI+GxQQJH5iIdu5cvXa3CB32VJCy2zQ0guYfYmzPH3IaEk9ui07s3plG22Ybu7Q3tjDF1YJJOu0x3YLhkZbKjB5ZFBWQGFtQYfTMgURZPpc1c1JOLONOlfKoRmmryYD7qd9CBSoZ0IgJVO6kAXimdPqWcbplPJVzklORk+ujZi7IgeIlSP4sDGaij+yw4bqEY3fsrKr6qtIetdEE4JgWAsjyzYKQF04ipnIySf8koQKWQdBAtE7RmySeuGCbob/sdhpiu7l3Xm9LjQFQ3gREKersNhjlNEft1NnYnvYDTP4cGh52eXLQdMsxewyjezAdkm9pBKD4QkyEH80eta4F4Z31ZDjTQJmfEA32nVL+jp9NJGlZQjesOYdH+Ub/RvVE/t/CTSRZQgyw/2KYiUkqhPSUaSvNHx8vkm7iYjQedSMjwbFm7VDxV/bgzrd1gbWsu7yCgtY2tju5+60dGKnr3taVFR1Dvry1a5p+emmDQT6q2bcAoyc7WYGEQlK1BFgUC0nBvGPIVbErxCYqJ3cAQwXhEODHuoBywOXZboFHP0EmwhhwR7Cg1EI8Th0lG2ZAQAzkDotysw0u7tJJhV1nSiiAa9kPXZjLslbRF107u10yW1ADAetbBppcv3TbcMEMA2MaHH8on6zj2iu/vTk1O2jMHQln5qi48npxXKHcGvn4nK+W6aEft6tCvRCRt893oWBZSNAQ4Dam+GnOff/55OfCLrzhOlUFlYOVXHX5DoTPEthFFF12DCVtVT8Rok0CQJ6E1Vq3x50nOKGvtIdva6GhBa0dlo7P0+tvq7Nvs6N/t6N4s62K6XyFMtJkkGSFq5yh9Aho54dGop8clbt4f5T4t/JNxFRbXTlB7b6sP65QPvig2w2R4KXrudsTq+tLyfYgyydTzzNFhGJtgctPTa6VCt1l2XOFA3zhp0MFLmJZ2KTlTXbjw2GIRblWVMqUm+dzKv7WE63s6bJ5hHb6Ss1z4uL89NjV77qlnXvvRdw/1DNi7v6esshfLMT62SUyOjx07cXRosHd99f7E+Agg0YPGRbMIj0ylaTSuFte+EIkexMFl0LS5Dtowb5k9clivp+2R1jKRxUnKPKcGgILm19Kea9R2tg/du79y8eo1ageCPnv+Dz66pBTAhAqwl7KtSP5K97QjSkGhsLJwJKRUuaNO19FwdRJCsh5JMz47PVnM6rIUpjOurix5lhusVSXGQhHRahfe3VU15nmf+eyLcubc0EUp39s7ltJ3MsVlwML/u7/9OxQuprvdLrjo79+zs1xKe0ydQbm0YoEvxQORNY7eQq5FzrSex08cW1mhEc/RvCh5bNjeuDnFENMt6uGSrkem7EHlXbGAjZpKTFlZ/mM/L1ulPPXUU88//9xbb77O/r+c99aNiYeZbKyml7r3uZ7ztV0OMz58uPdkzujEKegaeno2cC/y6dnz5598+hkszNoOFMMIBucMUCcZW/FQMRdcM+EavTevY5v9yx+i8XrGdpo5N4AsLTlRJ0sfq2t21v7mf/iNF198EXbMBMwlNABTvO6BriE6g9K9EYFerTWzG6q3d+Heoi5v5U7MGmHNutDa6m//9m/fuXkLYZlyWWbSRHiZzQtiuWv89OkwZZBYzXnnnff+xf/7/+N8hCeefMoeA3W3/IK9Ws20n5keBaEYQJGged5AuRZkb3PvlVdekS2r0NGJ8Rs357QOFFS+4FkdhBeP348JoHkvo3J+dKUi0HsqhQNVfaoplzghwdJhO+wDiQ2SRoXt6mqt+UVryhWnZBgqLxm0Hk0+4tJp+pPcSCT+TkeMK3BFcdK5SonJJBJdRk251yLyrXz1lFBgCfjYA+uunzxrdepnrzwHk1R/WaNs5dN85amupgVM9UCeQ9So1PM/09fa9TJFaecPVGoXCaoCNQ3wgEkD4FF/qat0qi9xWO4Dp9ygou2a18bT/pIq8DeR62t9CudpXE6AbodUj6d5UU2bZ6ENgTwfgyZBLdcU1A5o/X5aCqXXGJ/0PJTDX/C1Nm6NzA+egyA1pYR+msHtQNaVSCSpMQ96DsSKt8mWJ4Rani3S6sipwRmu0+aJiiIYvfv9zGdfoAFw6mNZMqTFWaRhteeP2p0JB25m550DKEdw1cFh6mJdnrYm61Hs3bdy5dBadvlQQMYSEn/TzUk2tXQsH2CRVwHUE/1C5ZkWvegt1Bh4BcIqo0iU5QJVFp3zWuuo7ul41PQJ8PbAWYU4GK1m6MkYsRRN2ZepZKvDBgNxNdvmWUJ0hPQB6lF/5mu4DNO+WlImD8WaOcezMhTWu0LvrXzanggHMYqKS0P7ab/ssuZ2lKIbY83D8diU5Ssxl1ae6T21Qg+THvOWfRagRFBwRJwsDijRSVIyOBWKlTBhpOzbzqBSEG4Ctr22rKqy1ToZb40cNPu9XRg1gZPEz19Qmgphm/gkLMmnYiygFteEeKtNUCsiHzycwCGhoccAZPTRmiTOmtaz8Zglsf010xGC8MDcN5SxD9OTAychG2jXCVPP+Uq2NtMQaF5R15BBCE4E45QLmVSYDfSgDVTdXTdu3BQHbBg7fBq8eMTX1NBCQDeXWF2JypyzMm+a4eAN8X2Vj5iGeE+4aoYMhMelGkVXZeQleQf+lRj5iGnsU6gq87/66qsogjkAzAgx5RAoQxAqRV1kIpXkABMCbCGSi6BBCUZUqvwCa2vWVDUyMIy/MpRK5nKjHBRZfxS/gJnJD4/qGOWbcvlFRoO64yazuUKNiJCoI7LcxMxe2mLRlH3qZgIO4si2lkqqso9rXqUiHnlqAvNnzzJRrN9brLK+oH0JdSGRhSRhOx+peJPvf2aXkak1j9Ffg1sdIdfrbeW0qwlnKo1OrrB731xlX01N6S7qmzfdm7c8Nuomt8NmylQeoNXLk950Vx8xg2K4VzRzMix1eYCfWiH1bZwQqMADdTuRkcdzz77w+o+/l57Wsb+ytjHYm7PUwkOKSb0nApAKoaFVFFL6IDWue6ic/5QlPXFIU0hCLZCl6d2tG7dtGjH9uHPntlu9EKo4IjjvnzxnGjwxPQMB9o/M32XVrUPcvXz1uh3ActA0+rJ83CvN9rNWQSAnk+oZGWAZntkIV6m0VjD0U86rRWY8IpfwfXuZ8T4hxCXxOdW3/XZ8aiLE5lvRKfSV62VlUbjtMMUFSVavB9X0+MTLL79ERI/13e7uiy88R3q8ce26+Y+yum3KhQj1UFUVU9Xh0XKz3X6ncIHg0Ly379ySxdr68vCQzSs58H5m+rBDM0+cmCd526KE++BcE6fP4BqEKj2icCVqewKZHr03tEf9PfDsM09ZKIQvt5N88MH7o4yNRlgmtRYElcUeUXHIgQZGt4BEjXrv/oJdMXbR2uvtFTat8vqnWyKkikqlHz1+zMqOBtbD3ZCMM9JwQCVKU3Mdm+vq7KOjE0E7ISNPGSrFpd+qYH0EUrAwuKN9B8nnXvyMya45Lsq2sGjaY6qH+1gCwh8Ip1QyOq/2G+4ZZdD53/93/+Pc7ZvmHrXJ4RBNKB2WHLTsmH8l4ssgd7K4snz68Y9/9J3vfEcTT45Pzh6emZmeZbn4uRc+u76R7YYGaKMM+iFMLC6aRkdrNbSxuZjtT8sg1xZygzr+QjQNp0hIszLAX11lGJ4i116nb4eMdE8DfFnr4AEYx8P5hFzEV7R6VVdpFO8WXkMggUc4x9MuML/i1KeVjUL8rS2JNdynWkoj/gqvLjvqDvBQgSKDRxHVw89Vf81HteprgT0VORihRG/it8x+aqCn/GtkOdRMaqCsymt0EWQIfySnVDYqn0DimYT+y0NHAifhKhX3P1n9DKdQyQMtDhde+8C1si0BFRLexlPjHXw96G++Cmy7aCJbYJbmFl6jwVLFrWfjyacDyK8xf/bzz50ASN4U2nh+dp4PfQ14FdOlvbzCHEQF7gJtydajVbWHktdXX0WucRrPQzEPhmMmXpVSC6oxo0x2KGUK0nxEKxkiNh9RXQyQyslArlOcoUiNiczu7q2bcwQ2DAS3wRsWl7L7HyuP7qNsI9YBhYz1j7D2poCzPmxJAA+RhIJBDnIHSTGhLrORHCZI/2phzU4tOmt6ppY8BCpVrF2S2UaFvAU/Qo6iBrSVsAN0g7GSf6u+/FwtlIFP7QjBeGELLQRK/Qk6CX7r8oxnLIDzKp8HLvbBcTAWG7xgL9LOQ42SZKHVpK1+z5JOyg5nfeSS310ixTa9U8zPDYNswM02xp1tYYTc6iQ276zFbCH3jgUmGUYcsEJLYiDGYEmGgfLIis0OcMNhzCfcD2vVHo81MBYVNhVzUAgA7WtoIDaXKgQflWsW3LTwU7ENYKVVjDXAg4GrQjPpnNaf9E91BRaDhaGhVrapdUrMxuEdH7Qp+kGTTgEFuJggtMJhO+vM9Dj9K5iRk4HGGRiyAjxI8HCSLo/hT6AI/IozSHEgcUKDETNbgMv8R3MoqHJ12AF/JT+GN7TmlFYs2iJGlAlA6HNjQ56oVyoxJVSQV9X0qUZAyb4CGJ2zFABARI7h4YsffiCmRXj7lWemmeMOsZI1VkooH5Fl5Sk+UGUCUcpqKiLDgvbdckiiwoNtT7XzSYk8MGY8hUZO/tISIo3sAmWoFDiUp1RQEWyUSVEtgl8SNOF0jcX1zXurqV0tVJvoZooAf0Wp/DNIZCmADFPK+/hDQhWRxhNy6gSAv3CSJBAoTsmHaiHdpCy8lVQ+5Muf4/5Ckf6cPHxWdFuRh2NwgY5n7+2333r6mfOnTz/2/vvvXr9xRUtR82JZTlhxFglp1l5WC2fuW2NlZlpq+6z+rRpyZJG1vb+dhdsICTr/gyo1FU9ZxeVbQZdPhn2zdFzLFyYDBNmnnn3u1R9+h1gYm3eTfkuAhVSIRmjYTNVCG8KjrtWvic46bDkviH3WPnZKayBT18vq70KkJ0ayPSXrvvraaxbAfvyTH5mWP/vCsyw4iOBzRP4782y279y22HbH7WyLi6tETX0w9FwOc/d0xmMV7ZBNUwsEg0KAz1PpRNEiVId+EIDw+kmgWusozIMYm6Uu5RY8Mj+ClA8BpBBq5vPp+4WYTVKJrPP3582f9RLzV5K5JbU3X39Dxz96LFdbUPE7qFd7FXLt6r58+Rq6zcXIZcu/TK3s2HeLRQDUiXuecBOF1CrDwvd6ux3raVDpeOaZc9YuodXF37DtkK4CtCqFoRjgGPMA+uSJU2ZUDPdACSBW+4BwkiYLeHsAGEQRoO3ax1Xh3RBpYmC77dHDR3Cy6zdvOCFHRzp34XEW8McHTyws5iAn2gu2hlcvXdEnddb0JccmxJ4nPRDL4rcCEKa2y0o7FzfgI7p0euWhXhNV+BIHwOJA2ec//3l5GoMzocsNBqv4INamXb//ne+aDJw8yXDJQQ4uNh+xZ9cwY1qJd7HFjwVWzp8CvOXf3IWOyty2rmG4aGT6s7Uac0cTZhYmxO+998FXv/rVL3/55x2hyrhOre24sHvp1VdfN1ezcGJS9Kd//K2cFGepqZ9pwbS9E+5fM+O6M39XtpWG1LoQjL0vGQM4jVg9cFLkUp2tRYKVEA8+a3zxcKDqlzPj1iYOouTqK8LgqdHgTcwajqsKrDFBxVOK7oRe4fxNCH9iZv1aWuIR+SM7K3QzU8Z0zcjMyZlVj8wjFlTgizlQKa5VaCpavIUT8tVwOorMlQ/CCWy2wSHNlgQv+0TOT/VEPA8Xrq5+KmUljoJKwkgD5dUzg39muTYlF6dS0QcROMSX5245bpJfKf7TSBQOXpL7/qA5JGy/ige3ySGLHqnOx/4qGOJXwNr1DYTtNgng7b8W5F4lkW1Jh/GKUMmjjDpFaK5oSeLiav5tUBNfAv9r+MHnA1gOhvIX2eihsPpaoI23IL6GPSLn+uFnPIOH9pQ1/qLqS0WLP/VooaKFn0/LqoGniSCHipCaVRPOg4xTQClCnJbDzZ1CVkhIXyzjJcaNeukUnVBBL4DnWSG0P6jnkIh4bE/OJiaOVJ5uoCJ82LO0eP8eatKDcInKnTzxLqbyWIh9Zr4W5ux04ow3UQ0U+3KBhN/99SgyzTEMre1pe6FP8ltRUQNDfUUhFAEj8ni0iiHv9MPiKqHUOlreSm3bLklK3UGO2rvZxcd022TS0Im/EtyjyqvNqSCemjRcKKQX6wEx8ZpMNEuRNUM5RyIHid4ja5JOpbs21WVOwJXjcXiTbaHIeCTc22VUGwUJ9XXhQ/nBWLY3mBlTlVHf7xlF6fTXnavGXgay0sq4bgKx7ByZRq1YYdo3wDl8nnjsf29P1+jAUJRvbeWuEokvpnmFHsIfAjsHd7GujvhY2UKQEEgDcOAvJFQ9pSHCB3zSlIY2Zj8kWgkrOzVWwnOTQ+PBzKGZlINLuOlYLeRgXHMMhaeipTLWZGMomzRL2A4ZHRoWTt+J3hCbCNRbExOTV69eUwU5G+yo+TgUZWQUiGRwb6OecQck4kjlyKtakQBj4lNWxeUMbEddiSD/YKxI/15lS8hQO+Ecj0AAc8R9krciHKcqTyEiG+hNKoBBI8t2i2wHFTWyhDAjZ0XL06uuYYAGaZ1y8FTYkFK/2U8Z+WqgJF7roMADbK6CVNHlABl1BHmNr0QR5A9C8oBwISQWackJMnLsSte9pfXtRQSD1dd5qbSchKY/GggDgiLrAJnxFjIAXnW10RG4VwmkEiKXShgCD/DGhAlpTQDKDAAYXNhfcWonRvX/Z3y2J+qlCLotldo7fuzI1ubG3dt3L19838LV+XMn784tOJb8pZd+7MylJy48SRtLaUvadqmxfU3QoPkBD0tlpm//jrPAera3UseHgE+92h0nGCjaMSHpZLZS2MZG1j+0r0X+2l/7a2+/9hKNR67wKweA5lDT3h4bvVE7axliLM7AwsXunQQsr+rNhFsCKimLbEZos+ubFGpC7Wzb+/cW9HqAmQmwVXnz7TcQg9Z88803WGnOzbslYAXTMFtA0U5sVaFDxSpCI6IrkKsgmJGrJ8JDQgLBDH6f2OEIr044k2QdwJ/4+ggQCJLq65Mn23j8JvI5i3krxnYWlSNndL6f/uRl/fM4GfrILFpFzKUT3/nRj3+A05Guia/qorPYketoSZeC61NKwS31LIoidvoYYPf01DQQAcr4G5tg+mFzv32tkAUFCFSXY8PPznl2egQS0fnIcJoHHuFChvYJ4Cl2XivQoh71gOqVnu+Ou43LVy5NT83UykOQWumtriYwMDolP8cj7GHTmXgRojHlqWny8XuWCLTuZz/7WSchXL581c4kEzKHIVy5co3or3riT9suPD7+05+8ZNOtvipnVTaamgFiMQCojaHOOjmHWQh0lkLnWt4r1iAITrW0p9zo6jAjPNRmXGoYk4G7t5nZuBv4lsUBbYxtOfZUNPoJvG9qOizSjEADuDkeX8brugeiV6a/15o5fmLDaT+rt2/NHTk6WyDp+Yf/4B+Zg62vbeL7q4xLbU7q6Z2Zmfjbf/tvE/dvXL3xzjtvOeMfiZsY3Fu4q1LXrl9ydhMA3FdtrnL6zFmr55pcpeC2khe087eIKz/eMmLm54Cr761nOE6rs0kAh9FeF1fD61NAZVXNa5MfBPJ71nL5a8HaorR12GLjfHKmYknb4qoyLCap7n/JxEMSIdYB1JSHE4JDliStnAXWV8+DfpmLboOGaUD9VCHxlFvNsIYn35oJG/GCiCbkoKfJpKb1KVergMjph+CUb5nsVK1GG3LbpZgzRJDRdYN9zXCAwVWQ5FydVDJvAsFidMVghQhvx8pvEwcY1d/2pAJtf2JWf83Zs0b2FJ7PJUL1NyECm/xLlBZii9V2UtTAv9DzU+I+VOLBoj8l20qhj/hYQa34qX6dr6mpBCVztf0UUEqWDQANZqpHeBMiYs2fpzZT81qTe25vrmuniGWRW2Fb8kwA6L0iZMYah3KZdB6/+DbGyc3SK6ZBwqdWZuag/+I2nhhUsUNeRjL4JGY5MjiG/2MyHK6lmpibfDArTzljVvhqScv8etM2+Np1CuzNzFwnUnqZCWeNQhdLZ0doZfZSMSZKq76qWWWmkqqFxopwT8Sdp18ZlY+aqsFMclH/ItMb3SwakB/KTnjK0JB05gmV1eSXiwxUoc1PIX6QiSqmfPjlY/ujZ4T0svOtKAmc6KW/7KkkUSqsy81hxvD1qLDNAKKP2bCTyzke9lU7tTPH1xCbY8gbcbkI0JQNER+VvEt2HXSNalTDOfIS1wKcESpKlAh6JlaZvBRpk6EII9jomDP/KjvsfZKLYbF6+IOeTLpa6hLhXiWo3NLAZNA5e+6ckUhrKk47+lTLlbzmUHOTMMlRReGQPuV4B9Uv0vm4/Xvbu8R991SOjw9rH7p9dTQ6sKQnCaEuw7hXRXA+OeIGOVWiggHrDzSd5lCOH0WEwEAe6sJfB0TTUmUpFxhaoA4HqiamkUilSvxgTP4KUgulVFe/qq+v1jp84sTnkFmtwrPPPlslftFGp6ZQtQmJhAZcpchQFWxNtqZhrKdNq/TvEydaBczTeYCopBahOPnLUE1VBMwQrsoVQpGFiCNzdZREWZz+xZmNSEWdBxJwiqyZKPnt7utZjs6rhY1Mbw8R1Ow8sTZknihyvsZiB/0aKiR94HzykghlsFNoCWkhNlR2wPnElfzyDL7qS4vFHYj6Ca+Enwj7WQG1Oj8rxsFvh3bm792e7hqbPTz1/gedb739umnX+NjUiWOHv18umqgkTTJ0DYaObBrAboVQKA+YUlb255VuVeAMMhuAD/rFr+EqLlwsrMWP17WNdWLW4xeeGB0bd/EFM8l9Uz/ico/ZWjdDNYSBGxDvnP2loQUihrW1Q0gIAaAZ8hva0C9QGkINVayuTU2O0hGjGAYgtP4WB156+ZU/++73Cf223KgB1Uk0Az122pNTdnvdt5DrMuJApUFlhaKUpWvIk1MLX9EeinIejqJ9Ek14TQI8n2q4QFAJF0ibrY5eORmSHj2E64if+9wXgEx4JB4PDNx1P60cSIa/9mu/5o4wADjwSpdRustnJ0+d4HeOlkmtDig3mSAQYLitZn9+fkGDPeZs1bNnKrNwLtKXf+4LUE8Anhofcw6PZY7dLrzAOalbziQ1YXa7FtKnpbaZIJ3Q9bTrLnWxuBa+pgLjEyZY0w4PhSYxFxdsuVhh4Xf8yGHa0iOzM/bNmWth4jbE8VjYswcXXh5/8glCtib80U9egnfV1ufVzS7s2aM2Iaxg0Lr1xFSfxXELHAyetIwS6zSA/kNad2MJyYiccxWi71dtOMKtzX5MVEi61uDzXF02+2OM5PZfeiY0ND057sx+MxASH55pLmRJyKoKtDgm6ObtmIX99m/9rpxp5gBmWYMp5MnTj81MTuBGzAq1kK5qKmJq19cbncfs7GHnudpDZayiKTDDsUeAlO9aj52sUG9R7LH3tUWJ6uHzX/isE4FMBhymZowfGRyZn5/76U9fBYP75GzxfuXV17Ddhfsr0GUxo+kn1ZM6F8YRCnuIA4VhFdcSsFscp8TPl77uTFi5ylir37Mmqs+Dr7AqsEZrPF6rKksTVFcILlBVu3+vNr/pL0aQlLQ3YtoqZumqMUvW08uwWQv+OC87yNrKEFjnOIFKl4wGOpot42P+IiJE11l4eOA8CGSqE5nkY+H1FUz1Q/KIoJHMaHWINrQ2+jkG5plVxdL/wW5wjylDS+rPj3+qVDLibZVSs8qzlJQnV/IvTI6CssSsih6xWrgPEkodP+aJqFVcqXL4ZX31NGLktTRt9egOgTFjlu/F6rSUKy1yTVCBKlk98ASeT7qql/pkeEa2R7maoS+f9DwqurBHlXogakBsDxsaK7RVXBOlRkBdj8xK3JTRDORtj0AJ66fqrzHxSq+VmIVUerKcxR9BOIXkiUrQAL8e7SmikwFiauFwj4xx7is1GQjnrVIL5jk4NC432xMF4tc6DnGEw8RJsEurS3u7S/t3I6fqa8QXrAwf45HK0sKg88OHoi3GA+kINteoCSKQlfxLkUVeB3wL/haFhCqBnHbX01LpAruqF5qRecWDLyVpIeBMS8jrNdsM2/kouekw5LRyrtGDW462Gp3lyK7I/y3EkuZJaRHpSyk1ZuAprswQUlyYdwIzkdbPlBHCDeVl1pAzAEx3+iiGDajMj7dNhuAtMwCHq7rKKgbzjj5eNzgxOy7HwzKSwuWSsfGbHsjAqgmKHLhP6M++7HIRrxDwaFGZlFrmEYTnxtDY/zm5rUhxSCI4MQfxX7aE56CjIC1p2thDorWyWlmgIcxITIo1fmk3bLwOYQZ4DacWla+2UPnxH5GdpiSafBjKMmKq9CCEWemrK0uL9+3TyyQHOdmDJprSM9l4nNnOeYpDcNKgy1W4VByo+LkKCdoTElG/NJAnwEAoXGRMrwoiEElyqAX5JELJLPNMVVNHA19FSxMuWi1X5NXlTEVI2Oo7MjQIJKCSxg7PTlPAVSkCqDywIaEI4qss2JQrT68cjxKllTPAPENeDugsvYz0WfbrdhDmKN2iYy31rVVzVZsc9CZKPZiRPLRh6lOmZ8K9ylAcRbjYr1ZHYJpcm1sLihlY9FySJHlXTw6usJ2Hx2pu4Rs1E/k0DrQA4MqndCifSqBu1cSqPSJsJ0tcbSceb6vKSfe/qouKMGdp7F/+6MPdE3SaHRvri1evfHR1/wp2Rzzr6eyLrn3lQw3HalqfKfBnUDb3hq5Mjbpy/lMGy1RchX3Ms6Kh1qcdkvD6BwUkZ3EgeHN1s6+zQ/eenjnqlmbmk30DPUODffYcOB/JNVCoRh9HNhb+4KoUpDX2yFTmAGCj+Cf9A9gnoiOK1SWfefqC3m2hQAjec/r0GbIo+lxcWmKCaW+DvapItz1Tc8rtaO066ogGFKTTcfw4ObJBq6rjK7olUq46w7cI914rzVQPOHUEVQaMcBQlFT/zTsSFugmiyNnSQ6aV6abpCJlw5vKorc35BUxfj3fZnR0ZVy5fJpI6CYDI6jpa8Jw4dsTAQVS+duWKQGW5AS2zcWVwIKMDYLgiqq6FjnVdd3SZp7zw/HPs6l577TWfNPaxI8xYJkw4yMTTU5Mi03Ut3J+/291j27emhtl0sF1beEcZ9A8N3r99O1fnzs0t9PR2LN5jlThmb/KVSxfxHzOccmiXUyCzUcOa0Z25W2Rc8dMeszMUyfQ/hGw1h1AQA+Pln/5UX33ssdM2ODv1wSmwqVu5r5tSHM6l1cYZI7tzV0BXZ84iqMzIgAy/EF1HUAlVX84qYkYoUEwtBABPzML67MyMe57PfuMb35AQPB989BHx/fXXX8eP7Et2DIJAe3MNKXQALh+DLvlgtXUXAYQYtUWDZNnaes4DSDyO/Wn38qGltdhjWfqUHBLW9tcQ340b14RUwjXrw54+85kXLDuUS39z2NJ7H37wh3/0p3ffecuZbwCr5OJZaUil+Dm1qJ7mWd9bTLHEr58kEZkI4bUm98rV19IbSzfla7smz6Y4Hh89YdtX/sqnYJVfiDsm5SmCdlxdiqGelXiR4R+jsMUubJThQ3ElfxWJsPKQ871myHPgk26T+D5xtej6tTY6f/3kWf1gafz1Uw2vqWpILYufLFyFD2iNfpZesuwBqDkUwcKinh6KY+E4ueBAWrWteVZQa541STthC6oIkB/fN9ZEqPBUSPgbTw2vIZ5N/FqW50EP+a1IpWIFsPy08VDzeUTIQew2hf2nempxB+H8T82pla7WTrYhqTaeSylpX64psb42zybyQ57a42rC5NgmMyyxyYpHtGRlNmU8LCgSU0CeZQ4UFTYQspgFBlbqEsXRFRIi6VMLlRrF6yrBtuGKGqira1w4kYauxCI1Xa2F9UwYoreO4GLlEO9Wik5kAMBbwl6oUsp1NqI5hoGZTw5gzjHMOWOuFAHgsLVCtfoI4BnbBaZMX4tCv0CXR61I7aRqVD1JixV0HnJKXqbnxBHDt8qWqUPm3UViFl8OLTz4UUwk/XiM98k8Y3xEnyLlV9qy/TfqqAj36TPBo5zrN73Tm8QEbAkTXlxJL9fOxXt3DZ3GcWP5+mouuAGM0gjUup/Jze5eDh1N6VYEYp4XlXA5mgHOaPpb0r/zoKGlZIuW0qTKUXLFWxSIBUa4st/AUoN131SqHKilXugh+My6isHlAdUZyFVWVhhdEFgcj/HLirzBxTly4nC+aF9Z8WvZisYa3zPAFIdcTC73mDWqE1HAujMjWPtNvbhRzdmLI8MnGKsenkWx3EcfXaysGNmI41lnmHVwCdjF4c8glBVjHQDglrCkuYQLFIVcnuYrtwRYaihfcw6lUYwQVtm7VKgRJzd+iS+VcEkqftROiIQ8GsvoSRiqgZ53bm0bMcFmIeLWzesWBOQgKyHgVxGQG6BhxuBu1NbQUoGtulKJdElSlRI5tZBKcZLUsb4mESKymBIKAZvhmEFBzZM46FXrRJAt9huSay9gyJMIxs/JnOxF3neJBrpFGlV1pczy3RF1vXQ/zovb6QgGFNc4r+khpU1LZOQRihVSGv3hyCHDh1xm7jWPktH/qg/SP+y5i2p4YfGGpn7q6QsmodubG9ev3V5c3njiiRdefPGzNpK6k874CP2uMGM/ZunK7AsDsUZFHsrQ6dTEnt7ttZbJccXSQ/WqgQ/qV/SqNOE4AZN+ssK9u7enDx+5eunDjdWl/l2sjH1Rl5umqKfJqMNDA8haNHhG3tpUO1Za5RGire0aRVfK9YpgrZgdO35UiY6dIkPiBUePHHfaVe/A4myuBdxzNoP74zBn9KNDOJwoPKesNcmZ/OYV5fArFFGhH/QmUIhC+REPzlM4d9YEEKSY5hgiKFd47bDI2ysNUhNHNMkdWuPE6fJpuW4Pk5Ai3hV4jJrIohvrq9QKZGYbkq2VOZOGIIoNm2PcmLtL0tb3OQcAE0q7z519XNcy+7D88dJLL/3SL/3S1SuX3nzzzXNnz5x97DGLbrdIotMzn/vsi6A31tAM/PTlVxntXHj88du3b+nzlz76iEDP2NDReJCieufOnlb222+/g/tPTR5zftrinvOJBpVChNUM9gDgzH/8x3/4+Lmzbkf/0Q9+ODExfuH8eWf4nKBHnzksH+3BFgg7wFVp9I+fOgkv+jXW8Oxzz+EgOOFTTzx51R1dly6Dkxre2Ar1R48ek7bfXS5ODOjMtSaorTI+vMP0D4qpeTQ2lY1yIBonyZ6VnPEc+kAQKFtbygfW9GocRBOaXfDYy2uv0i//8i9rM9ZmplNqZK3QCX9uMbt+7cr777xrdlTZhwZDBMR3UxcJ2fyIbPkVi9TwrgG6u3DTeeHrrk3b3pK5dsVKHIsEvMXFBdZF4HdikgazNcr9Yggvlld9/Rp1fPzVgF5mmdDOKU4OHIKuLCJqvY+7+t50rXj8bzMpDdpO3sqiZNXOrmRVon+MT328hLxVSCSrkZv8ixSRibLRuGus596d23ZOLy2zsbolssVktWAQBRUcndxE0Vch/VK/jKac3DRHzbN5ErQLb1I4hlzs6YtGvcJvQKDs0rhek0WxfzVuo6hak5R+0JUDg2tFag5JiNc7uG1pWcc0T4ErDpkxDM0FRqSBHFBapaKMexqjsOo68NdsBGgdGedL8TRf8VYumhIgJXU88YpNoeRZUrSS1XASRys8ecF24ggp+PeauopiF2KDKEW3cuIrw3N9SsXxF4qoUCm7lX/9WjPnjyFFyeWhcM1UQz7xrGiuz0AQR1gLkh7hNA24FacixCx4BlYlKjRPhKvMVLg2TUxWJokZeguuFGBXThScQYJAcVKxtqsxhXDtUlKWXulVLE/OV35PhVZPzaCGV38saYL3vB0ooHwsWZXA9DKfc6ChzLOPzW+SIRhSom0ANQSYqJMaergMk9NTsxQ/ZDNTAkwaj6Jp1eNVfGvFNSn31QvMOkvEWURJO9vfbT9oZ9eY6mBomFhhERmBHDgpPoUCgAVSCOmGQlxxCr/qq5qJRstb5KhSB2iP8VCmMRASQTwNoaHNSBiaW7BwdsH21p5uK09SEclH96SS0xIoWDNghgCWrRwoiYjsJjzOZrfLlhDAWnJyZpI6gN2NjZBZKChysFRIV5LaLlXvRdhUio1q2C+Vk6VR2e46EoJartAAegWhrRKIVJeET1I+K9f+EYfJ9I4MTxAMc5aPdXysxw6N2BXt2aQBw9bUlVgUEKU50++KbkXPCmslDxSSyEoaTWQhrDRrmlJc30y5yqTpAbFV+CFZQ3gaCIzKRgQIMRYYjCBZnBCPrIpTITGr/6EntOdO0W7HYKxp19mx0e6eaOVJJMF5T8/xI0dYPZPzKa+J3COj4zLPJ4cHKTGzyhjrf/jRpeCtXOmFckBipENF8pcJB8kGTY4HDKjOjIUijMxkWaXGNwEwQDN1FU0RclMW+iE5EURCV4XN+iRzHbbGEU2DerJfE0cOxjI3uAqUVlmEBBBCEVDNkTwj1pQzggSCVjQCgMyN+yCBUmgUKDcDpl4gc8V5Nc7KCkWvrLCIyImohB6BsuXnGXJDWTHbkKFUksinzj0M9+Io9wHAIbT95Y2WoKbWJgLOs3ezzX1tt7dv5qC3MdPNoZVORx0IzasRtIBWn+GhEiD9eoVYRau1QAgX07P0wrQ5YuDAUxaW4q/5iBwdfDsCjCd229Vo3kSrYdXTvDYR2ilav58W3t/Xj4PaLE9wZKZBcCJxWGYDuf7uvJOf//kvvfHqa5cvXjS1/qW/+leHhg/fm7tn1sMSX7s4V5IEA89z8wtE/5HRMa1puoQ7oyKT74NgVBjqM9VscFEqmyrQYO2zbdsyvNEv03OMjU+yAvrW7//+xOhIFj47Drncbe5m9x/98R+cPH7s5o1r2BhSUwrcIhLEgMhr5ggPYPCvoEo8CPDozCTZYetQ7gM2R2VQdPHiZYKlo1+QremxiYOTj8jzDgsuaSN0aUp0KBN+ZXnVcOhQzvxa1hO1MKi5cCFLcETZGlkcMUU4duLEpStXmLUDkrmOp5bVbZbuh/xEAzb+5oJaWakLZTFGKNrs4aOkIj0MyQk2GXv7w3etJxNiP/roEjJTFjL21HHIn/AvORj0OE/3ANzXC06cP4/ocS6Kbd0Zgm7fuDl72ILIkzdvXv/oow+cqa/z05K/+/7F02dOmV6oAEcXznIGHJ3juTwZNzfV+PDD94+fOPqlL39h4d5ypmIj4xAxPjF6Z2ONCD43R2tw6xu/+LX/0//x/2DY8/LCC88za7n00Qdf/epXf/LqKwgOlMIxAnMvZmSqoZsNMt/PYZrZA2dqrzVVDLpBywPyZ5571jSAyT6ZW4PBmpYTeW11DU7hUbburDByaF0sAOqxCTnIX/NAEC6AeSGLyqNPnnzs8qVr2AcugOLxPpHVWkyZSKUIM0hpP/OZz5gAIGozu3tzcx/ir5cuzmfLyOKdO3OOlOJeecWNEgPHjh39r/6rf/Tiiy/wX71xxeSq5/hRYMC/ijA9pFpQHRgW4kIA8ORitYkJSHbqNCbs1AvaB1uskQJgHG1aCRpsjYNwiGle/xM8JYcHfOQvmwPcNlA1nmRSxO8aogjROCKQCZjOk6EemdN0lqtVRbh0+Ups33IXsnUeQhEEG8jFHwovTRVl5n/x72c6XqcBCa3fUmoUmfUpTw3nVQSF2c1TY/oaX3H8onHePL22XaRLQYGZHVuysaJJpIl4Hb6GOeeyc9t6YlqRlFnmTGqfa26e9bWGgIFHiLyiNC4vD5Vbk9RUntzBrLzWHB4KbwIPRlBOYGpX6pH5NIFlIiJ1K/8mXAhoPYXk8wFPff2LP2srfTK+8Jp5KfQRTVOr4FldQDxQKRDVZtNtK4zygWoF1WglPCHCOYFqFD5TRJAKT5Oh1xrHs+bQeGrM5rVGq4E/81nx9uBJHq2Z1KcuwBk+MDpQIXi/usDOjhVnw0z2/wBehfwXgmPoMqoQ6/X2UMdDwO3qGhSFyYkIDmPAuOihSBUZRFySin5bbZg6yqFiRukVklrf+iT/UozBYGn+TtvuxBfN/MBcgjm9VEICVmmAIDCac6Svw2RK4aunfiOmeuVL2Yzr7sb9PbOartHhDMnmR+lCxASaOExud2fx9ryrnDZdfGjt39ONx6sZCOQR1bvpaDHEl3vpsYemp8ZSZI9huKrQXJxluZzFkCVfJWdFQVp/xUYpV9Y4etU4CmOsjQpooNN50ylRTSGcgqloQD/VwXkktDadJIvS8bWRMdjwRyoy+gAABrj0ouJEa3t/1q/MKz9RhDwNAbCVFoBHZ1psbtx3FahJ13aGOeF92dWQq2YMMSJzxjjjoJGLMA0M0YxfXjmvZ848ZqwkJdNhkXMMeYZC6ifr/qDVNCLXU/WQ0/2lxRBAjKYjx9RRjLAuT0OkakgivphABYNodY5BDjPIurgzYk3Rj0pSvwqhuOUHqrRejYDGX6OhTKCualVVrY7dlPeArAO00ZMek5Obr0ASLiuRIwaYQG9saAKZgA086gvtsKEsceQPYJ60WfvgpsYf4SErJOa+fbl4gtSOtosCSDax/imzXNkiMJoiCwSqhtZrDp6V+K2jpQehikexTdk2zd8k5GkC/9M8cjiY85+bSY0PFIwlhxIQ/C1a7u1vba+TZm7dvnzh3LGnnn7irTde+a3f+q3Llz4idzkoxRW0BJXRkSlioYsPXQRwZPbwlWtXp2cOU2VqdNXIiKlv71ocMYmOAi4T9Ue52hD1S9sfK1+6iVymEMKz8aJ/fHL61Llzc9evDk8Mu++W4nfmyBHC6rEjbIH2zPFzQ1yZ0KIKTYweVIcwpUERlfbyqt3FGR+fooFwVyNBX6B5tmugNCWlSxYryiKZm31J/wimkg0uKq1X7iDxeA0fK7JlpfZKt9M51D8W8mjPV4VKJStE7rVmAshQjlWFsrkfm/YJ8PBvQkLnAgmO3yEI1W6SRd6cosu65N7EaLbvT4xPMRcX02pBV3YGZU+LIePevTmsgmypC+gLhNLulcVlY4ZFPW3mHHon4jstAY+4c+PG5z//WQfbk3O+8uUv2utG1Y0p9A+Nrlxf/sF3v6tIfAH63Lb7p9/60wsXHje9uPTRxXvzy8ePx2pKBU6cOGar6rWrt47MztKq/+//yT91Sa5NBW+/85aCWAFZSVBzWh4TF5X8sz/7s8yttvfYIz1x/nF3Fjp+VSfL1coQur0zMjaiREQpc0MOXnPqxAlHBiG7X//1X3/ltVch1/L3l7/85bPnL0Ax1KdbunuvcBmvStlctyFsx+1aqoA3oS3tgY+4wdkcV7/06frVawvzDMv6Dh85JsNCHxFSUYz1F6UUrZIjh9lfOpFgTTlE1gxCe7sOpDp//tzRY7OwatpDx+ZUZjAYssxg7y/eMyX90Y9/MDQ44kzh4ZH+bCovh6YZgN59+z0gaRsaTYR24/p14KFFs2dVxkK/+c1vDo+OT0xOESzhISxyYEQc9WqcmI3/L+tp0tY8m9e/bD7iN2kb8HjCEPVb8hkPCZrQnIfhENuNPGHmrLE4o5v4GtG4Y9qNodMrFbYZEdbOB0M15GNNhowwKPqWyEktSGuhTdHaOmNnLIBxnyiwq7NG2cTkafy1M2PRgK3h5VO4ORA9AVZdQI40UawVSlQfsThsTY2SqrRGPKl3EBM5v0hOReCXG04VOSMjA7CS6mN/kpTSa2789atcZJ3cSykfC/dNYIAvf8kznsgzUtX4AabK2YHgAN6SbT6Vn2IP0S6ilJWPrcYFSnWNp20d2Qr/X+IHtAG4uIaoeA66gorESMwgMM5raK0E1tfEKE77+i2xEo2nCfEq5xKr9ajRPD8ZXhZIEs0nEZpUB/1NIM+nhaOl+skTCbSfezExU4nIqQ6niaVHidZpDxWAHa5XxR1Mg4dCICymbcKBTQ04JrOofn3FCY8czuo2XkqEXl1x7fAGwaVMgeUa16CU1FxD0k2aesUGriW7VEiwMjIRiZzlWmHjOd5XQl+TFewb75Ee4uuKAYC2SX9Rp/09t0v668qi2Tbh3O9Af49NvMDDCcsdyYx6qICoujdQrnuCy4k97K6K+Us2/OU2IrmFyw8WvX5Ol7DtIofCEcscUGMCYJ22lJm5AWFVhaAuxvPhCfqdiZbmhxMXL2zg5E7KSJcu3TwVyQwJ4Kk4JySBbU95a4nxwsqEMmEVexUVXv//1P3ps6dHlh/23X3fl7q1F6pQAAo70N1AN3qZ6aZmOKPRDIcSw7IcDJukxqHQH6DwG71g2CHZ4Td2hE0pHApFmH7hYPAFaYkznLV7erqn925s3VgLqH2vu+/7vf58M3/3VxcFoBcOSYcfFJ6bv3xyOXny5MmTJ0+eNEMRPc2YBF8oAoBHPGAOF1XDh2OU4OdBOYarulO+7CYIT9nUzGlXsjJuaJeer3EFY49yUfBBhVpMFhLDLfnevGkXWhbp5UInwgqUnkNqCMRM6Uere4+qsJyfXyRt+GQG5AMRvcmiUU4dpD/KoxaAaZ0ywayxtGzCWLcaUaBUthEkMMGJQTti/JSYgFIb5ROnJSJxbAC//vrrshMnwKZGkomqxQBDXpGWVUqWWCusBFhUKKEWq5AgqOwVE12IWZBg2aN10miOR9VlamhQPhgk8wBP4X6qNNN9WeF4m/5Z+tL5QB3AkRIZBoEQopDOOomhqxvF6KTu3gGEXAjvI69q+Y6AQlXlUUu62J8Sc0Bo4upgScB4Kd9/5Ze8tSHNwM8vopmsBvS49LndENxx704NERGTNOnKLH3x2Pmzd8eOvPaTV+01fubFLy7MTE/fmSUKOsB0/fo16Dj3yNmllVUD3kiHdqehbIFoGYtpjCqmkhk0DaCaAUwngy5PDSSM9+hZs7whEOPbPQre9qPHT7z4mc/+mY2dIUpSOyotyAA50WvbpJd0dCS318mI8hEAbOhHPm9Qr6oJzW7gePbZp1FFnPgvzJImWlZDFegKpWn37PyijTGcSHs3c8gnJ+kwW/9IJpWfVGps9jSyNNbQnq8CSqsJACBGXfVnjUdv6BlnABIMa6l3TXn/7t2Mpv247hHPRYHpwOaJElz6bnmjHE6LrPJ9zcDp6Dxx6iRZnewNFcdPnOKl0/HUD69clYAJCf42MDjc22dZMMLfpiWO9QGFBHfWYZrLyyH2EyeOu/mSE6W+3nHHYR2TRURnma+srV29ecu9VZ1PP8mlvVM1VAWnTh5//PEn2KvcvHXdWHjssUctEZ0KoNe3hwJu0vzwYP9/+p/+p3rCoObo0/U4bFzt3mbLd2/XOLIMgFyuPsnsDIHYNn3u5ZecGDb8iHdc3kMoT2G6wcDTZpqc8ZF4QZISNSG4f/AP/oH5BELdLchE5wc/+smPf/zj23fv0Li89LnPIwjdb8cQccAyssZTdHBlf4CEMglUpyI4gSwJ7DTen87KzK4CrTHvaUYiGZMSoXhMcn2BdWFuDKFe4rGTOos7qfJf1poMdnNpebGMVLIVZFht1ySLJiZDisUg6Gw4oQPkhQsXXNqspNLkvum79wRmZ2YQByCVhoVZGr388svDo+MmdjsA96fnf/Lm62jFV6XBg0egPjVc35UF1PgGOzhI9tBf6SVolnM4/FDKX/JnLaFRaRX/D1zf1NECfl9J5Cq12hRZxwBNiyoiGJdHwFBKSqGDswRSwpIHkj1K4BUrfVRkoOa7NqoCXMO1kFJ+SlNs812TAaPWe/hN/jHykyBCOwkhB5rSJjdDFo04VhYpQ1Pa7UZGo6+tVRddy1FvLRkYtSLxwvUnRiig7Gal0ovxsyb+pHDK+Xi8mOajxoNKlQ2wPJ9Y5kNF+ZnqS92Hs9RkJfrh10GzHo5vVveRD1l6i2i07uBTKsT/H6qxiZNm4CB9/krsqTHp3IJCPw2NgtFGBzXzYsrIoz4yyoKrhLEcOk4jexPsGvCWuIYb1aV3wS8SqjQm4YN8jXCNOYh/qLEV5AqnIvOAqllRMRaKpFjFvizj0koya8xXBgb5v+4b2x3VzDhR3svJIlzFROvOlpXV5Y7FWEV6yA94SxEQo4obzQEr59fbaTq0PYbtzm2Zp3KVgLV4y+gwMwYTXcZfZJMQpfe+awnAFvxGCA9+Kt4MB8XQxnuL9OgSAoN/CrD+tFsgVxqiGCOH05Xebhb1DjgY/NygmnuN5unb9xUYx8ocjUYTFmWYNzZYDi0EFVix7NXc+tSRE8K4KgasYaybutppoyPGlZopFdK58dJsq8FYLCZ2pBkGRWJsO2gB6GypIwmPvAzB1KIJpTc0M38Dd3ma4fI18TVG/wvTVgBNAwN0kc2BB/9mKNOrycUnsJWKbNmbFCJP1BIOv2td9R1klkdjlGpTRYyOgR43xQnAOFEaz2OVYBrNcefY5Uf4gE+HFv8AAQAASURBVGwTB3HHgwBI5MV2dMSkTJg2QSvKTGdmRDnCn/3si8gDnXjrJSWYJZXJU4hkAoXSYjBt0qSr06j+ocEib+UiC2DKopxaghq1VIxAXWaYZOWAE6hwEzAKrJ/YbSu51kWOkcUjr6+kN8sGQiclHajAoBAzpjA6F9YQNCOgjXoWnH4CADDCClGd7MBThQfkCrEeE6DWV5GU0niElal1Cq/xINRlusZbTyu2vbt/z3WlrhwuKxgpS9aYfKhCMyW2I0XGattAqNkbKb2Xl0+eSlJ+QlR9mgmaAbnqg/QE0Gvz0+GA0g7/fCiscDGp8SDwq6Vv26/7GLCEwXS3MT2GSZftWondpbWbHJ+4cf0WYUbnHJ08ur6y/Gd/8e2zsSqfd23WD7//rV//W1/jfYvRfl8v/UWX27dcVAff/GjwvA+3xdwPUGkFIA8HhGuMd31qKnd8NGbhNK19dGziqWee+6u/+Abdv46yIu6wS5RlNoVpBxrDWApJEMdJ4QZ4h6FhPKJrRHju3CPU/OxcHFymKWcKGf5Dob4dV8s3bt6m2ojtpcNPzsmwdETeB0olKf0M9OUMQO0vjWrGoAc/vZGNR8D49SZhyoj8lOmnx/UXhiQ4RQYte3voWavjZSQ3f2WY1FpQj4pksShz/MaAKwtUZNjdNjL47js/dVuUlcsrX/zikYkjbBqvXr1++9bdmek5Xjdd3kXTYTGvy8qGXMwQ18bGYrRnnFjVqdI9tK984SUWVEwk33v7LUcCaBbcLQi4R5+4QL7vHxgCJ8UBwZTGHJbxjkfOnMJGixm9y5J5e4yo6/oARnOPPvKYrjSG+boGqzXDpcsXmc2dOHFsfGzksuvAhob+s//sP3MY9C++/pfOPLzz9nu3rt+ACKtwDGtkJNPS7Rs3rfk0wHJOelKXGQj6oBXubF849wAFOIiv2BmbHDW++vprP/rRj/78z76uq7AAWg3u9CHaCgEGY1ZtdlDM7tbo2HA6eGudvse+iaq1lwr/yNFjMsI1/T0Wz+jWBXBLS/NHjx43yQ52d83NzaBCdk39Q8Nb62u2xyjq9BBSwyHtQ5bu6bJAQk/WHqBywADZWR1iNK6YhnPV3bl1996d+/QTUCe+Mj4abReP8wgEtlMnTlNnvfv+RXSgOarQ0pBI4aEi6+CvgfJuTBuHWYD0P49hlCKaRdUCveVqhv+GAWAXXmqQEPZhjruEXF/X2VeEHoiu9aXGKhtGke7BhrMgOABGDKg8mejKHFN/zs7P1CEH7R4kAZNihFWNVoVjUcEfUcEYdi8jySQD+9AjJVmOoiEzLVjKP4pMp74CWuSwQ48hmW3fksjnaGtkTfsw/2pGX6tAXamocP7SEbqjyI4+E5SITNGSCgSeVFPWIX5W0CoCGtCE/SVJ4C+I+Uh8zOtTeKAINDnqENynJEFPgTbvJCqqxXw7+FQKz7fSCx+LrylrcY0SShpVlBIefpXmPByZ9UVmx1pp82tKyIFrpQe2B4+ftZtq0gNo86smEhBZ4uvbQQCWwY0pXJRx5DF8sDu49VSSqGGkIY2iavmHSmtgxqdSeKprBAoyQ8xakYwVU2LF6MGPvRuYbNbQCGSCVyj0FQSm46J5bgBT68q7UL08W5s5A5NEGLBds56IawT0oaE+UxfeRcQp0wlhM+cAGNFxg7m2ybfBclqdCSXWQnYTFWsBgMcaSES6ugxYWFoubbCe1YYQUXkjyAjsAMEMQZNRWSSkIkQ1kR/oAxvqTe7SoVllydtSt+igXS9cu/oh+3EArq0t0RmRxmnoyypCUTGrM7+YQ3NjVNSFUecb0XRUhjP4FRL1WJBQuszASku457Z62N53KMBoy3IlGjsfPRUqO71OPXTRQcJw0UHixT5Bhad0SSBHgx3ZM8zg9NUgSifnV54yuEp0LTkrHMrFbB+IRajepidiK1kzO8xlLGP7KFB2Pz0p56NPjfH++BPiLyNV1bTfMfvJbkhYijkyM1oxYZdRkWWYt7FUJnA/8eRTz73wIqSZWTzMU1xlSg/FQBcDNCuZSh574sLx40fd/KM0lFOk6gfjxQLAjKzLtIhpAeQLAMB05rIBDfRTvQqvDVSgudhErJwqxxO2kIqlgnnQwiNydlyz56CdjOurkcbk0qGkAm+dqy/q8JRA1UqTGGxKllhFtaUaW4lQmdaF9kCgQgJZSF/SwIAEmulnIbwscgn/pl2yTe1xiRXuXflDrdcnMYaSJqjOTn1373Dnjus/svngk03WQVap3V1rRZ6CllJXJzp2y7c0lUpLd3yEy4kBmASeZiua4UIajZeelODf7GnW2wz8/HKayZoBOMkwzlFUSuIsa8lI9JbuxP3Jj/96dvruT998fXhg8O/8nb/b1zP4zW9+8/MvveCBvf/5j/7w7/zub5KYnT41bHp623v7OmbmVju7RmLDXwadFV6GLkZ3gIRmoMLpZzMmAdwohj/YCPZjLLiSebe/u/fEqdOOAvOMQgVotY3OrQ/7TPtt++5Ssp5cXuLGZ1mPW7c5PDA8Mnj50tULTz5OwGOdwYX9+MSonpqeuTc+ylOLUtqR9ML8SuTAdTyzg+IfA8IygwGqfyJHgdmmG9KqDzRVvAEVbQjXx0/pvSXAorend2bmIm97lJbIlhbKa9fqOSRAPG6WQ6nBA2Sh89jOMeckqeK5/b1DuKr9CiVoLOMjA6rQXt8XX/nyG2++NjQy9p3vf//Lr3zZNW1TR4/xXET34fxPd88qrzlxHdfp1kho3HVVWDQuYCAUEY6YP968fuP90aHlxQV30tPIGu/zs9MGD7Mqt8+6EMyO6vBIPyn2xo1bmAJdfl21/NqvfRUq+WE/e/oUGfrtt3/m/MSRiVOWMg4pSwPW5eXFJ5+6cOLkUa57cH+nQn7rt37LSsAZgPv37vDqMzDYcf7RRzWM4PYf/92/C8uuI5k8dmyjOAl1D8B7FyMB46fFFrxjenoF9kn/L730ktPZVjaZ6hBWlMFHv/a1r7k0gOJcMzE76xy4Zlj/1ltvGedACuN77DHrAZGmFlyDuC9vpSHc7eatOxn58d6Tc0g6LHsvvb3Xrl2RjIWTugpn4RBtcLOz7b13337y8SewOXzKgxPJgoNY8ynfY2woxydlVl2IMQYqnxSISnQkqPz01TIJu8S0sDwUiQI/+5mXbDWsu8Vuc2N6ZkErUotzAIce5fhVS6thxTa/13BzGmvG10AzfQ2IlL4Zfijxz//ZqKg06qAEf/PIWAP1XcdArSu5So11GBjPYuDQg1BroMbIK40HAXjXosw3rbbIWAsX/83NT/CpL+BWwNvjp77Q0RXOWmYThjqARSq2RgpULNbILAFSeS7lqbX7aiaynozgb/siunbaSq4J8jRylQIP11U+NmeCSCrGtgTK9G4+khUAGv14KCyY9LWcZlhATAA8tN8iDoSA+3j6mv2hQizMDtNJs/DDiR8KR1D8VZ5IuZ+4AAijb65t1PzgaRZfoyQT8KrxFWN1bm3GIBvx+tSgM2CNGoFKUeIrGRjUqMLPoOyAnJRQC1RFDXsLi6wxRcTPF9GZlZIs4U95y1cTe3/kQaj1N6gEaqUCZdVrbVAlRR/UEEhscEsZ1UgOJm41Fs6c2bPm6Gob7eYPPj7HzHn+CVy+dAeTp5yqzqQ5kyOIMtNcKV65bCWbEmhEZG+3kdnWutq+HI02VTLJ2d6A5QHRet9WVwROWvgY7wHOiBSf6TA2PIDJEupg/BqZou3Wp5Op3ku70qiyXCb2X7l02f0xHb5EbN8UbbshFoEehjxRbZh0Cf6m7ZFo9/2kes3IJcITtdvnZhcUCF/BW3FHAx7hzu6oFYJsFKkwWnntK3MtlZq8Cs/a3EOnHsvNXW3KyM0A8S+Pj/WdZOX55EgLAyCUvrFUgSA0BhVYjamBDos4gkvXnpVS1Sn9QI8jILK+DweE6wOfB8Eki+RRYtKE6IazKlaXyQsBb6/H1IeNIyKHKJCYQbyVoJwqy9Ytbsb9X/va18TDhsRkcbOnWzsp9zHPzOzMsMzoyySndcfhDBATk1lJB6nXROmyTllCLWXBqfzaRkCqCBggpL8PzMUEV7G2I5QGOYG82P1WS6HhwQHQKsHk6IC3BM1ksnt88gAVMqX0kCsUoi0md2Bogp8VJxpVh7kAzIBZYik9SlaaSOCZJrQCYoBXH8UqwVO/AthTS4ZbkwXlAfWsDEpgo60zFK5AgIkxX/MMbo6xHBgeGjE21lfCVQBW8e8tsf+bMRolTnx9xGurd30Ooj/1b0r7lKeUnOqaAQl/tfSlcJhho6GJ4NbDUXQxw15YpKgtFucTjz5y1oi/djXeUIaHrMx3r1273NO1d/H9N6eOnbh6dZ7Nyfr2Lpnl7t0bSCh393V05zBd+EKew0A+BK2f9UmaevlmluEUhdTgHXubIWynTD/72c/+6Hvf3mHxXzypeE+MDVFA8wXK8OTIEc7uhxAJoiqO0fZeePE5XRylw16sgN548zpi4KtlaCCWXV3d/UYuN+t271CiIYKF6F9XrquOhoU1B9D1EdrxRjAJF/1UJSSJURrKUYt470JWWE8rdTkpRTIDCpzaJRnNL8wAD3nLqzRkI+POem4VkLgiwWDH9mTELqPDKDtpKjZIJfPz5s3b5FMXW8kCPvfhnjx+/Pr1qzxl4sTK9/jEPzL+nyNPajV6wTkxEU9YTHLcIGArgF/ex88/sra6fPv2LXBQbN+7c3v86BGHmOhVScwmu8X5JfyCa/z0zV7r97//fcNnYXH266urZ8+dhhD3JLfsWWCwRJzBCP7iz/8Ucm1QX7jw+Nf//C9+73d/e6C37/KVS8emjvz0jTd/9tabv/kbv8WS5sWpY0CcX+J6dYmkPjszzz2omKeffpo6y2F+gzZuBVbXzQr+whT8qp0CxrA3uIxz9kIYohgZWds7pMLvKcxqEVQCBhLRq7b7KY2DBAa/n6jkw4sf0I5gK7I7RIVDPffcc0x0ODvSVVG67O4+/cyT0jMuq72r3so3cVv0ZC8JMcAKxEpM4cgkyyoN+8vGvV37sRE/WTc5fmF5yl2uztM09boIDFl85oUXXaVsF0uTebWmLtGvOo/tnP1X7cWMrHB0mcZCiENbesEDnubjZzRGv8rTLAFa5Gv+/FXKaKRt5q1FicUmvCPglNmo/E0VyN1g8bPMwKSdIub4kIlkrfwtwnYm7kzRnjql6TiFIzA/Sy17sCEg3gPvEU1KmsW9ZZl1mbeh6I1s/HRIQ2l1cDaGaBH+Kmwff0sM2sNZ/PRIKTIthPNDKFdm/QWqClhJ0JBuxfgpewVS/qgqI0tA0MP/JFZHjW+E1VpPHH483qSiBFIZlBv6AvVnMB9Yvcu/UmaNfPBuRBZiKiXIkq+N+DS2OWmluPJoC63pr7gAKKy8UcDhPwWpjSUQDMFSRVRFtXezy2rYXVMSKAGQgbP8rVn8CjUUehAjYy0EeUhvRHuMLO/6yRt5eASk99Ria6AJpFpKzEHzCwGUqptJPh5owPbxDxUkQCZFE6XkC5Y2OYcaAvMAvwYoYhIoA4W/a5dGBpi2/dn52bacfDU31LVuD3tGxb74wueoMLi+thdss9v2t/aKVy9UGhUWx1kZZ5brEjM6MaFh8B6AGGNInaG0u7Q8k1rVEfc4CCv2h5gwR50waz1iVpajlBo07loSx0GWySiHIwHp8VUaAct000H/UOz3bYwTsaiYaHCxbtoPLM6VkQAy6nUWtmCsU8WSSZlWijHp+AyGSh/ZCbFRXlbcdCLNBUDmTNbA7E0zTotFkz85YJzVS9gHYA5GvfHifFLu72isPw+GdsV7KD8CiCctqaOsUEj9rigLImGcOSLy+DhmDlSorglq872l9MBRjW9+PfxTWJrmW0BViSnYQ584GCmjgA/eOBOcvn1zmo0EGWV3R9XQborXEXJJACpzh9rN4MDTd6ahGlMStJiAiAXiJdYRJkq1qJd2Hv0YJuGZwwMKFGY3Kxd3T4rVWYoVadYmNGsyYITRRgE7awCRCoET4o5yeAGSHRh+Ujj6CpJkWQ9tFxpuKGh8AhIRzfQqjaIwfLWQ0pCKJqgL5YKKYCMxSCSruWQUkJd6NSLBgVGl7CZiP1F2TaylIbmiIdJwkBMStAgw4uV12owl1H579/pO+ne3paudnyXxLNCcmdntc88oRymZ1tfWh0dHmLHxrBTADmY0WOUD3659OrJ0LgxUUgKzCAmQRnmLyFNTSfyrPvKWwkOoNfDzS2gmawak1wvQxxDP0DMSHEYiEbHjn71/w0lLCoB737zj4INT+Ubq8amjd25f/emb37fotajkM/POPYr2p1fXNhgzg2Fm+k5cUraS/qkcbErnemALigJYfQsmAA0NmP2q/zL07Hc3mgNFtgYp5o0rrO6VL375e9/5ls015mtrGzSqbYTDpXn0NjOKXgcGnMHBOpAKcyY3MvHOogdRI+MR1Tk3iyDVSMTAK8SgGW1HnO5ZIStvFoHbaAJBV2tsCmLYiODjsDGELSxX86lkpoTAWTSP3ujTQSYBdCW9N9qQQL0AA4/sxoJ4MRIbC31DVt3D4kunYKXmpDaHRufm50TSZYQ+Q8MZsMiYY1tWoRc/vGRE/NEf/8n4+CgRXWns6t0BrEw1erDDKC7Jl2pVBHC5rMHi+7q7HHt95uln7t299Ud//Oery/Nu5Thz5rQ66Lz5Cf07/8nfi8sh2oWONlzYbuDM/WnrmetX56emesfGh7BPtyegYmZVzz331NrqFlt/tVy+cvELX3hZXTP37v+rf/VHf/s3fpNHRTpSvXXtxs3xySOPnH30Bz/68ZHJKSZPtDwOLtgNmZic1Fr9BGumQRslEKTlP3711UsXP5w6fswGhS0nw9VNBXplbGJ8dnqWKyh2OCYLlKdpxmcrr3PxeZefegUYFjmwhUogxc4ApGCU4IR93ofMH24um1uY587HWuKHP/whL0MWDLB89MRxLMx6QKXKYeu2vLRkKWcnBJeheJPMKgLN+YphVRbsMJbzS+yxbJuoV4dJo5znnnvBaHG3sEbxSUamZ72rBOcftBpI2JA9K5wOy+5htOocTLFkcOrI7Oig/XLLks0j2etTCLHSogHbmHUOPj74m3nOr/xvpZJ/B6MsWbKwzdZ/9pcTTqqSNAFPLTlTY+TLg6cxkMtPiKrRGIcZXyVlzvIn0Siy+a7J4L/G+OSUbk4dYTwt+zSd3lUTacoWH6HIiSJiUcTaKAzjOpBQV0q2XkqDymhED55avncFqU4GftavaIxmkFrUkXrmid7CYizJDgSvyBmBrbyrCKMo3epftIu58MUJhrQ3TCtqjTaOuhkEwFuFK9EHXBgFVmBEJt7w5zKovtPS+I3mAWWP406ltHC7npYGcRpV3vBcYyryoTfllKmioLb2VO0Y0UF+YSB6UmRY1UF6gDT6IqEGl6lFHfRRioFPVTzoRzHaXopNfKUHlAIwmQ/UOqXEg1cB7+DHg7+6OnqlBxFCxWSc2Y6ilFnnx1J26fFCV5BuJcw5fO6ViaqYQWRMUlTt7h1QBAavWBgpoSFVp88OxPraC95GovFo5HqMNWlIipTOOIB3ZbjQpj4FB1JCb9BnDEQwR16BHpTwLz7fkwraPumtLzKELaoe+o/kH3op/2XJFd/4aE21Egb+UkntUy0qfZSCUqdWkIeQFVc4GS9Z9+6sb0Q3pjWsfeDn5vUrWs9Dx9TEpL4oLiPc7si2e9YSgxzMF6d/dVBAwvTMfbgi93jwXvGQYqqd6D6iWD9p9I1SqrD0bJwAbZFlFbW/02myKLtiGRvoOxQI0vLIlS4z8xQtrFG/vxdPx7iaCcWh3meevkCmJ4OBQaOYWS4tr2gRBUtgKE5I4UQKMzWYwEJejzwFWfQHAvk/RpJQBkNGir6BL1jy6IBgL4wtKFWUaUh65+psYuSasHQpmEGYcpLIz+A7BaVjayckPk/iDwJaT0SS0xRDk4exW8igLqduq+hZYSDMplvL07BrLFCh2FrUwftBTVqBpPPOGYbQuFoggARgAEUltZVNb11s54ROiOUD6QIMvPeo2oTCPh4+daXCpUT2xHdCcAVjhiOL5TXcz1e9PTDocuEhXR/gi5H92Gj4holIaXDHcEuvjQyP2H5QFAWk2ap0E8PXuPtUnXjthQpFecytajdZwzzJxvxLPKavkYyuzWF1Xz1BkQPZZQvCJ/Qpvb0pywx8OTZdFqP7e8xOCGdHxif4gzI7AIbprKqd05Me8YBWQJM9ijRZM1QAudx+ghDxj3GdPjKsLmsFkcnlIFk5wgFasgHgUatPCpHFyq7zyMC6lePCSiGNHbyHf8XBod615bY99mm9TIBMJObmKHe7nWpn+9LVjd4yVPEiVbTgWmWRWmRcQB50d/4qNjSJqKQNtWWyeChNMz3y/vlPRcLPT3P468fTB5kGQ7YHIx8jXUt2WCRzHzt68u233lxcWH3kzDmAzC3PMUqZ6Otn2vWTV3/M5Cwrh739P/mTP+XW+8mnn+e3Q/8auQZa9g6jSw1aDj+HW1qB8a4JfBLWR+EmYUFGWed2h7EQNvfIY4+yzMm+ZFcPT1D0GSPjE/b1RrmNsZwvt6YgEkOykiXjjiqnoSIgKVk88NzIqtOxR3taDtJYGPT2Dy6vbPCyRg6wr7ad5aSGRSXiL21SE+bCoHDNaI4ApUyPr4gHZdb0xhQiGR0e0Xc8+s8sL2uOuYYrE4RpHcWYs2WPxc6uEbyytMqRJUJSoBJMUErjuSGHS/kp6s6pAPsqVA5g1grAcP8lsrqr4XbARsHw8WF27194+XOWBCY6SEDb0jhY63Gofx4ndZAnsRzgMMZcWZ+Z+TbIx0aHt3cNvKGjJx9hHeg0zfxa7gqAu+/d/u6lDy/TzgLafQsnjg5rGDsqjNqeIW7ETo8Ha8htbZ2dmHyEnhrxDwwNMM3k0f9LX/y1N3/69u2bN3KBBN+g9v8iLq/yT+Qe92MTk84hUK7j77Pzc4898bgzGOTmb37rr/UZ0B2mOn7yxH/0d35Ph8E2Qczp7fHRUTzlvXfexZCuXbvKO6cyjzvpVmgOBrV2bnaWAdRKsbaFCMzRV70IPAowq4XgumOTTdPkwOCp04888uh5V7W3tv4G4UDhOKbtG3i8tbpy6eL7CtQNY5MTHBaNH5kUT6afHJt89tee1f2MmuCELVARlayke6w1/sPf/j1noG3QqDScyYqr11U0HcuLOcakFrwGW7doc3ZeY7G//tExb4BhqceOTxlSw4N9DlU7mW7etQBl76U65GWa39ha0yJ3ViMzsJl8s2Sos5hE5TFgMpYa74TyI2KNKGKn7+aXxCU6H3GAMveV7PCfIedPptUizkhVP1VWVr7HPPUgliCm6MLMckEiEwzgVYYLRWQw5/ki7SdR3upNneZ191k6+JvfADK5RpoAXfhjbMQbQrnfhUcaSnv4d0nd4KrNwSlQRAKAkwIzz6kA79X1VZDl421zY6llIQuVKuASAA0WYwk3DyilmTxEDQ4MqW4nJ/GZD7XvtlJzduxEECnyppKLbsMvbAD2Cn7V76GrawBmIxIMBQwCTBoVaw4KjI5us1TKDxgS2/LIJJDvQWG6BxKKKADFrdy4i4jkkbLKv1KFxpmyTKqEpmhJiiSrUrNb6d8iRMpQ6kreBpbLn6C7EbDvm4+wn3+Jh7h8TZ9GMC3QiSeHVDLgASlZHnpMIw/FlJ/hmR+Pl9Zw0KQU39rO5jZ+HrXTpXeF7W7trA+PH1laXhsaMcD7LZrcos0JHCMQBKzRJmsDQQlmIPk8dRQAuBaM/BCAiShWJV2czEaM9nV5ZQX8Fpn8PkcoLGELTnuVmkB0taQ7eBexEgeMTrj0CPxkKRdBrcZ8PF4eo4v499Bbz2WZVaVXtrakjvTAXss2+AUOY09MVoI1svyN8BvpgkZtKyMoUGYOysPAn10/yZlZBKyaSERqu/seh4fGT5+aYiZuyuRUwBNhKKrTve4wkD33EMOJoiHTk/O1+qPskEAy6aa7S8VsgXYHh/oJVg4+ouZjw1N8J3A0NDA8QkPE/TpWvLy/h6HJ68wPBQj2a3C5+4nfBBcGDMePV66Bz+6mO+XXMr+CE3PPWixKWeM0lA7yCr8APBMmEq+ZeKB2hUYL3UDHAc4agYIyDIsCP5hK0sIEkle3dLV1DrAe93F1zZEJ90t20SbQxKXKQj3eMuSfZVy5ikFjEglHKFX3tbcvrm+MT02ayIi86G5xPRJ210C/28jSh1HEy42+0HNhaTtbgSWkqNPSkLoMcOdUDaTNyRRBJy0jiXV1LSyumluvXrvbQTe7uT4y0Le0OH/8yNTMwuLAyPjtuzefzKS5ee3aNQpOmixCSRV0cjh4j/n7Oo7grVK+ZRXPKYh7e3UJNfnQyPjY6IThMDsXdTvl6fETZ012krl6GvdVBusgs4yDkS6EokHXsxYAxPo6haVAt7iUR4drk3J0qOpMoIpSNc5vFhNpYpXLfo9ckqGB9Or+PlKUkqAvu6U40xqKMCK1j6QIMW7hJN9Y+UxNHvnw8qUVDvh5gWlrp3STUS5yFcSm4p2dcbrPXr7V9yjLxCPmE+fOgKerl5lAV29fVjtmIkPABo5dGWYeRr35qNW1b8UNIMTzRM0lYffmLpYxNNg7t7Tqy9d+4ytLq3Md3e744xGEwNZuEX799h2Ey1fH4Mjk1MmzNy9/aIWyu7HV392/xo0Mq7iubkSuneBxN4P1BWCsgY2CQhjILMRcaC1kil1pUeM52AYsUYVPHHx58LfQmZ81W4r76APDIuo7yRo1JSoJy1suaxm7hdiSJRhLQ9/oZxm4DY8fvXv7+vjEiS+88mV929/XRWqbme2BtCs3bjx2/on1LT5n9NfAo098dmR0kiU9JJ88vfujV984duIk2cq41tdZApQKDwCNUFHqT2xjbBnimfuiPIgssbs3VLTa3EWZ+t2mGuVHe9eLL7/809d/5ADsyMDw5q69qc6792a4Bu2QoSjpNdZAiKfH9tb5mTmkTu/uE56g93u7nBJsvfDU08iP5Ekr7aiAAw9YGec57CrxFxRCrUzCND9FHdLWzhg7Ij8Zumo8M3nrVSeXstIGNj6OE9kecTkLdiGOazJu0/Bbi0tyvzkCH7VY9J44O6aJthuWcjfUKkDBfPvmLWMBhIZqeG9769BA/+KS/bNlTIZHZ6oZI5eIQnP9yOmT0jBaAVJpdW7MwD+dq7GSN9Ao0G18eez1MYrpYAhoNNbBpmkyhzH39y8tzC2vrD36+AXrjPfe/8DB+K/9rb/9hS++8vprr5478wiF9AvPPn/x/cuvvfYGX0DgUCUacorCEWMXJkA4eVR9TzzxOPW5y7k4x8SMDPBzjzz60hc+/4UvftmcTSK5evXyjZvX79y6OT0zd+cu76O36eEwUNr3Z555DjDUGCfPnH7hM5+7N31fh2E0c3PzOMUHlz40XMdHxywE4ZcCkFs5B5MzBIvuDv+hObDXs7a8iuOnD4rzHxNKOEVBkIarDpwYj/T0BLTyOIvy8RHzJY0+MtUNRHknx+HHT19lASopH5Plbqhua6JLdkpyeWwRTEwcqZxRseRLm4Mgf+655y0k6DxktL50iMQOvh4CUpnnung703MAA6EaQSWg1cyHXn+DI9QBVNjTOzg2cYQsw3CLHsXS0NgoA6Y5zhvzYoiwTE414F0fkQJ1UmlMLcb2ARfQlTVBAkmV0ppiTUZjhmYtqVbkLVl5Mrs2siSyMf02AJMxectzOGD8FDhTmoAiBAzFoi6P6A+O6HWBbaQl6YMiSsbKRhpg1JIb8aWlJXWDzTXrFVkrKMBrcppQ37a5HH9CHQsLka0OsmQDt7OjZ3lheXyqn+0WcWfJMjgqT4sKhdn33IKZCCqZup2K2ygrKAWQD6Khq0V1tuS2GtrnCqRBzLcHE8ON9e2cE45qsr59V1bECx1MDmiHUiWmUeTk9Fi2P4oQUtuYVHmSpXSpfNAiZW1FBESPr0qu4ebPClsFSWQNSBXsp0cevA/HwFjJ+KC0ZrG/OKCrP/qkZ9VYNCsmHkCU/gZLBCYqcTPGru0Xq8b2bvuzhjPRtDXW65Ab4mjbL4vAFhzQ/kmoUd6PVpLme5rxKbw0KSy1IdGJS65mGgn8TLISMtVh9YVOzWKgjjwa6inJ6nydNFKlkw7Hk++V9JF3SVl8TFVPUwdv08NDkB/+2YTtIECpCKZaeRKW+GDU6rIBdclf0QF6pjydaDoaYwbrIyhYo+W6c++utytHCjMLoeJ7q/urA939oQfp0DwnIVQw0WB0jO6Nb+zYcV0j3fSvrc4v59ykztBl0Z+XMgHgUWxGVDmxClDaIuLoPmNpHjzIsqOjrJmosU3WUuUpGlnVBfCC29KC4Nx/yCHj4eBpdrOKDuIefDYerYf8jgDuRxlFfktadiqMI6PYzkm2GcsJW/sbZRlZ+j2DLU8qodovgmV0+dlj4T66aAUffey8u3jtH1ogQV1Jnyx1cynsI8snKwXUG9K0YMvYCgOyawE3HsAh575kS0+CpUGofi3REfKsxB+LK416uvq6OtcsHFr3KSZap44MULS17J47d15eM4grepy1GzlzhjJbT4FBp2Ak5hq6KnolUz+Cp21Ti/+sup597gV6PX4bpedg0coNQOY7t8/pCsU6URKS2OdgZ216dsbmQ/SiZVkO53IBzISlLl0mXvbaFxUbAPAJEixIJsZCbwpXLO958pJLgOQ8iELIAOY+Wn+lsa3PMXf6jp1tO1XrmxtzM7NsnOztK79O3OZ8xWq1GGIDKV8hYFa9d3TYjofmGpnsaFmoqxp6qc/Gx6JenZ2bBpgdFcCU2XaNEQF1PpDYoCmBJ6n13dWV1fmtfeqeNs5t0DKpyy3MbqbZ27J9VA7FFB0WGFKp09YWAf1DrDJQme/0GNQ2BqR5UUUVM94BsTyJzP/hJ0U0riQn6pOfjO2/waNmoH68gGZ8vCzGLibSZIiHrBKBpG1ufnFweHQlvpv23vvgYlebW1kf5Wfm3GPn9E9re/dnPve5Sx/eMC2Ojkx19zoX0XZvZsbU+ZnPfM5ajkcUq2ti5KEx8nEoHsRUeDL/G4MgLuqR9KrlXE4LtS4vzP/t3/6tN9/88a07tyefesJo+unb78zfm+5qHdvbypaUR10oRIcij0obBDMx6EEDUZHd/9de/bGWouK5xaXhIRdCLxG7dSSZULzTpAqJ3aD+TYe2oMzsPBqqAarwqAK1wmqH1ni5CrswalYJeiplbCBmYXaOPtQ+2EbPujZ6pLT2tPCgfiIec7IMVESrBjKnVajPtP4mdZZwEvBdf/L4CYKiLTDC/PL8vOU7qyeiMuFTu7jeEZi+n+0X9ldUGwaVEtiPLC7Nd6iHG68jR4+rW6WWC3PzM/dnpk0ke/O7rCK2NlboX5ZXV5z9xaBtQd50wdrtO3gAM33DfWpw+PTZR7TTKLLaJo247gNy0ArZ6OKlS4ZCZ3fvnXvT8DM+NkHFs7gURb45Z3Bo8PEnLzzz/LPYOJlYpEHIKgMO/+Ivv3F/Zo7p0v/z//X/JvucOHHS2sVluo898cSZszklbEGzd+furdt3CyeN/pWShWcg9Iqzr62sj4wNDzhD7bjGbgu5eWryaHYVtuItwaMuHaaT8DgdYARiiPOL3ALk5hQ9pKusATBKMdLoA9tf+qxSkhIee+yJl176PBTrM4/SvCFBenmBh5NqiP5DZ/uDpMnYLFp3YsceTZBD+uUUWfUUCcFA5ZJq1K8YtEIk89Pd6wIOGNCa/NV3vntvJhx8ZHQc/Jsb81pUaK/BX4rcCBOhznCTQqO6KbPmwc/wmBKTtwT+RcAqKpgyeYdPyVpmcIFoAHytWs7ouWPPWCoVPKg+v8ucn0C+pujyBIhSdf6U5N4fCZQUFRhpBOpX0NVAiXwQTkUHaWrJtWmH8wo3n2YhzUCj4aX5kjWr1r8Z8KW768AuWTKDmzL21zaOdHZRnRoUpH/iKmuIIDLo64Inls8sGqDQwh7Hr7QRCSF0EvZBPigmB1niVwSV7PgKka/o/PLKPFE+kwHK7yCtdNmBxA8qwdLAvOWp3QDvxAXKzvpPOSTjiEslbckdcANx5CC5akUpqQFQI9DoglJF49XEXv3tZ2A9+HgQ+KX+NvvrQepCA9kqP+iOBrR+R61Q6A1LLnroBuPGbfnjhlMT8gFdASlQHYItPw+emqwkaUSK8WQ4Fxw1P9VcPtWszUIOUUUIspmsmaCmb356KPsBII2/D+VqfkVCzfDhQDP9Q4Hy8wHqmi3m5edw9hrW95sbK5F9sz4sQgcKKcPryORRRZHmDQETD6bkLYzFyVuHBmVY5iSn0SJcblFZu6/PjsUmV4xrsSPXHWqF0ooE71qvGBzVE+YW25/9royX1u2tHh0rGTmsPqmrkmzJWbsKYHlKjBIbNF2LPnh/MtYORk2hrEL/GU6WRtloQz6QTfxuJxhGbsxqklheTf4L8E1eZ6t8OfTW2eY4YDbuuzsm2L+y+bflS9HX5t7xHezDhpOfRpkzDZpSATdv20BoQOqAZTZ+pLIk0Gie0dMXTA4MWXAIxwAtqEsv2bKyKW/qZG3e2z9Ed723N4fDkGk8Zq7NtWX356yuLDLicVmEDXYDg0ht7s60Eg/3SwRcMxFloYlDBzkZQjGvs8bHJzjDAEQRX/pt5nOhSJtOgCCOGxy1381obvXR9ea4q1cu2YQ35SkKAHq2ttGUV5meZiqwDkytQBVEf6gTVjK6kt7P0eEh2QUQWDVjkEVGyZRD/Fqbn7VPRTEfKbAeQ+altGWfMwzLL0fpBvtguGVsold6GdUqYD5VfsopFEVBAACPWsqzf+fmHRKRsD0w2W1EkLGynZgbNJxM6dJZrIwk0AORaTp6qcDtS0FRb6st96yLhBlXWQtpvkorzOD30yeoWKIBXF2SsgIDoBpotjGJi/ZC3ibpHgo2iOXf4h+Fg0GBzUAtvPnzIBDkmUtccZSWWu6UU7P6aGdjj3h28tgEsz23bFsR/fRnry+uxMXTzl6bu6i2Nq/Qe9sxtWPg9iT93n9y0H17TnVCJH1o2T19uE11PVwHfZZBhsfBWNfzDL1gWEabJiglaIyEsudUAcMKA5hFetvTF9jYUPwfffKJR05M3blxlbyE21TCq9yMhKZklKyPdC45CqnYGTpx4hQRTPktWWM7v9FruN29Ny0NrgAW/ClKqIzGCmPWdQWNxRy1nDOsZGxUcq2M2JRchD1yAh/BHLpkD9aQkYxQx/6R9hwBHMh+RAQ6CKeD1NaBAjFJtROP7dGWFWmU1y+9/DKV9ONPnCfQMyW6P32XMpo/zGcuXFA4tBjjBpfyoUtFlM6q0N5sCPR0aq+fEnRw5w8vI8P06BhFTvPY6DWYQUwzTSbGBVz5ZpPqr/7q29jZQH/RVXf2xAZ3v2103Hnc7avXrzk67LQqdYBrFFwbTBDHPa7fuMWD6edfebmvp99+y+c++xIe5R+nvfpDjevuOl5k328R1mFLkavNseGR5158Qc8+98Jn4AgF2ECA1R/84AfE8BOnTlGrwwgtS09Xr67SQ/aN2WM4KOvNTTX/zrxVfPub37aNPs+b3dry9sb2zs2d1zd/pu/rvYbs6W0sYCOaCe9wxEUzKnG1IdEcc1QFJMAXGCxpbCLhArnvZt9FcTZsesHKJ1I2NJ3G2+UX2C5EMckqHM3mAObIVZbDx8qBaC1Si5vYvHE69Pfyyy+bWFUPfgk8wKu8Sf9Ze1gw6D/l6CosGB9xzjh2/1wkdfd+8YtfvHLt5lVeeKdnjhw/ES1wYR3y1qfSQSS8B9OeuDwSNAPCzYzFckEEs6FYpSBY77IkSJ4wpsKcSvrMhZmZElVivRtj1xdfG1WUiiTw8yCz/IX7lHIywmsgKQ/iK4TNTwJNmAtDaBaeJAefUr7G4AilpGZ8ftZHYoH6rjHNig4KaaREnHpKd3h7Uo2S2xwysx3UahFN6O+2qdfZwyuuiKW1TVOpxSdFQJSBezyUReRyVs3bDIiN4p9tXVCDgWQ1jx3wLqDbJCgWYWEWJrPoKAlOsamhL9KYoE6x8BcgLXRFJVDakk8NmOuf0hAAF9HhoL1VoGnkSJZGHo0qJT1Ai08iFXUQeFB6jT9cWcn+IEGEsQYxHE7188KftgBotK50rpZUgMFVJ9FGf8RKjOAU3d4eFzIl2eGmWQJl8khrCsYKIDVBLacZX5vmHW5wKH2zNPTQDDdz1UATCc1AqafxkqsWXn8fLuRwsk8Lf1r6w/HN8EMBPx+KUUszRjgkZS+lTGD1UyH2yPdMIoFtQoVb8403DFCAOYAblVt+Mj/J3KlAdEuf105NS2XLdZ1zx7nbO8/qRuY8RSkTzlMpK0eH4cojTJ1I5V8XABgtYgoaC/HWxPS0qmjkFSqkW/94U35HSiAa/BLv0uQ01L9wtlIUovKXFMthCHqiLbJEjwBJv0uIjOlOKLzswNkQaHC2SCU26aKdb7UH4uznJAPNqalYi2CgdWePwY6Bn3UETb9JPU3zFCOyBDJe2uxdx64hjGbbO2wDYITqIuZmTYvEETlds/ydfeaZzNQRqjvoGtqtvPSCS+DMIGOsWs+eHu7tXl7sdo0P14KaSZDe3thaJMyX47nmFHolXaYWKs2BoeHBs2eIAIzA6Ddpl4pUxMyjXoa1a5k2NTWpf6OaZE1oVy037KowDT19+pR2oYcq/StWx4KnSlRGk68K9BVtyCilqV9biYncv5I3fPITNmQx5ZUBHTG9QkuOUZonOCleX03NskgmUuFSCitzdGxMGqYT4RGFYpWpsd4qpRhWi8S1KJFSeYihWDGpf3zshNIs5iQbHOvjLASwYixytQh5qIJBy8bmXlt3/9Zemtxtz6oogzXNpkZ2i8pBUvBUaCvlA5h8dW91Sbx69d5+R5d1idolKFBkgeSjoYjWsh7/2CPjx+ISEar/5C+fmLwRCbzkfcBXBVPKx+PNdJpP4e6bZjKUYYHhftKlxblnn37ixeef4/ZnZWFuaZs2YMPtcn/xjW8cPe5Q43FNY3DfPzCMBngRQ3IfXro6P7c8ceTo2Mg43Rm4Hdwy0H/ejAEgLCozZXSQkrKAL5AbrV3kT991qEMj/izMzx0/NhUT+cUlU6z9MZcBLy3k2rsqPsmor8m0YrTFA8j66DgPi8bZmbuhqLaI5jTv/IRa9ZFdWQFFnRa0wXge+AKR8R5mUp7alRJUSvMGWx0OIlWkj7mbhxDwRAAoGVVH2AMSdb6wkpUTaig9YtxJDzYZj05NPvLI6ccef5S3ImZCREHkkyHWumd9jj5n70+vsU6/dMk1wKquj4FM1lWCKkj7oBoYzIXNVh2GW8djj18wPjXHj3JhW9bohre+dOHDvXt3h7dH7OlY9GI0GMGyMwOdrc5VO+Xi2CvH0ju73IZxSTlL4xGp2cbJ6JiJ18EGTtlXlhffv3h5ZWllcnLKubQ7t+/9zu/8zpGJKZsDY+Ndzm0s2Azasv0X/03cRVlau6LsvffetyyxfHae6ZnnnscBv/Yf/CYWBkgWR1y6WkcOD47A0uqaTShmYFZs+0x/OC/yxqX/N//wPyewO0WxtLK4sbbpPTdDlp7Hd27evnvl2o0gjgOpoaHJqZxVOM5v1/DokaNTMEU6pxQhvsFpNsF3tpFgzj8dOxmNr20Z1nDWOPavbZru7ZoRbVB6Qy4HS5n3igUkyreo0LtYs7kCKfyLf/Ev/+v/+r/WMZgdLoYD61416m+9IB6ViEd8Fy9eBEZdPIip6R3Y+OZffWPq6FFanPtz8/QhGChfA7YpTEPRHIVIYzySqakcZ9NGy/dKTIVqy3RXCdkngRquAdN05iTxWmzuMOIyG8soWS1EpuaQNQYK8ynDIjWVpzCk8OYHjxKhM++A8tGnMKKGhPcgx0HIYIjs+xEmkfwBCZhVWCuJsXR/CzyALV8bcFUYS0wttgwtheRXI6WvD36KplgqH0uuoCG/dJATXeZAK0Bb4cf7BvD/gaFxWs8TPQMpEOILDdimIxNJb6gzJAUn48EcAcisSfLY1cVo5QD7bEIpnlgHVtWgSsPxKtL8SQnZWa4iC7dCgM6MGJhUWhYG+VH2FirYRfBQBAQpipkBtpK5peIyieEwrVdKFirNR+E1XAOMbg4+1Uz5Vauu8er3s74PUn7CX/34CbFB+sPxhXyKgcehDLWzCjmWbtLWspMiiU8K9047y8NopGZNrtKaJsCHA8L1OVTPw8Far1hc8aFvzU8K+fgn4IlsphGuyQ7HPJTrE3/Wcj7xU7PeZiC1FPQASGShk8CWcI0XV/qrRhqStGjU36DypBd1R5lo3fQiTbhqeQhg1CX0m9gUbNOXk9miFM2kKIMTBcMdPZxATLS4lnJwyOZ8dChDI+tbC7LUqTpVlAkbu1OWcjz6TST0pvtcqnjgDOBwwwt0aUBphL/1SdMMIm+krIGH34n7aIyvRO1G1gjuyV3yCu0RygndtG7OHNGWq722m7gerOTJwluxleVws2pXfHNjC4s+evy43WkC4Wo8kReDABhJ02KK5jHiu8u5I92QYvGDRun7m+DPKW0IoXDu7onaO4K+rQTdIbp8il+mqkKwPcWMxC/by/wdbO4yLnIoM95a2AwQLs+fO3vtg/ditdLfF+Pn7W1eMe7fnQaPaY5mi4br9NmzbvA1v1gkGDF4EdEzWfgc2GtZXuGHxy7OTldnd18/dyUOzhJNmCpsUaS7eA6uHPR0soRUsL25R5RRkmlOS+FNn5rR1GXaEqOjiywVstGPOtokTvdv/tU26YskRPJu2OJKZi7VHHmFxycm5FIgKlKgeJE+KQQKfbJfL16AsY6ixiZGzZUeE3/eDj5uwk/OJBSUJwvscYauQHLeRjH3teDj/zDFrpYT51u4cTvNrRUDFdcAY/aRrDrwT+dlYDI7Xw7stWXrgDd1BcqrfI0V8K5h8XDlrOH6xPjdOzfgxfyHMxtLkvkoZZJEP9SiRuw5XJrq+OOPPv7YUwd1+PjHn0+MPEiWkVEKPBTIt0M/a4LMFzrdmqQ4BLYcdjc59zXd/X1TrlPj1J5rqO6OVieh//Lrf33z9m3SP9Xt8PDID37wI/dDTEz2oigrgZnp+Flh84GTOKOBnglXmYyKLd4BXA/+VvD8Ns9Fo1cgq8ovNJMFSUwas9Ai/lkAOMPa2db9m3/rP3jrtVd5k9dBl65f2Vlb7u6IPZi6kJAuMx3rMkMATQrITjYjmKFGYYt1pmgCpFgjlARLdF7PsIr2B8LKWweVH+Z6XMc21MEkQ92foyPFGESlulW/dnVkCaqjPbR7NPGEZNIV4kRgCiL9GoYAMNAQA6EeqIXIYaft+OkzHMM4EeqGU2BouaFqmAObupwxEDl+6uik5lz58NLlDz587tlnrly5onCNMtaKlBuFiy4DmOZjy1U97QyAQjpu3LoJO9iCIjzyiFVNOUizzDTUWuGnP3uNKTwzdzZuL372petXr96bnsH4NFZiBCIjf6NKt2qiHocUq5PuqV4LqPX1MTK3dt67P/OHf/THPV3df+/v/S+I0XiD4adLSFROENt2MESByEDIliMA7t6/jwE4psFpmB1AcFKioyELDOvQOow1kiyeyYMgRtLRITFLwWnaF6bvY8UIl4aD19ShsZGTJ08Dg5gur/JBSzqnwncpAwH6e9/7HlEepcIyMEIxxS+QCzP1ZQiCXT73Uhs8JmXWcXjUAhIJ2iExWbpuDo/KIp4bjOJbjQIDJEhNmbjVf//f/T/UcurUad6E9Kh4HWDZM5WzE5EaK7dKi8pRYMokuAWMGGDDcIDv7HzywtNWzi5Efvr5z9yfmf3Xf/oXS4srTMC49tOuOoCkbDz6JpNmfh3+JNyMqfHeJbvZTsqyFR4tnOiImz7VostfdOmvZGHEh/ffKz/yMaU1Kqz5/BCo/5L58AM0P2WpIAkL1JiSxVdSiO95ytdaZuP3QWStIoyifMirFtX8WQMHJTcqPRxZ621iRsqaWEzjiaaKDI//tNoTw6c3yPAs0fdaBwZ70J0jyICl2fCYenUrRkWot443GSEDfap/w7Nau7b3WhPejfuOwh+qki/CErZoeNBBFvST/skEkZDILeUthmvmICWoKSIUCLW4ykO1USWmYrWiLynVlXQFyQ+1vaYXeTgAlJrscHwzphnZzFIxdjhBDX9q/KH+auSqHXjQ5clYYmoVka9ssRQWLKZGItXm4YoaCWg0BPag66ComrgJ88cBaybwqQlwjdSLzUifPIcT1081pn46/FVYZK3u096fluBwOR/P2/zaDEgj/NBTM4psfq2BpM0mU5rma9mkLLoDdF7k2JBb+QS8Ioy2DE72Z5FajkUip7a2XNhEJHINYvbEup2QDB+2t+BfpsCYDXTU/c+KGZgUiZXJWCY8Bj9Sh3MbAMaWGqsVlvRJWTYQMFXxDz1JcECeNfDgnc2fJP/om9MpH/SFfxkLAROg6R22OOZrm71haxm0OZUfU71SqZTJGf1IGGLb9OyczRNLnfEjR8ePHKeoAqH5sKqNjbGsE8poDbnSkbtSDELqsqTKVH7bPOgfai3Olswy8WTTyx9qDwMJJBMtDDgjNqu6gGERxtR2a5PqeHuH9s1x3BZdQWyoN8USVSfHx9//2QZtAu3XyvLClZjoRDNFIj8yOQmhCqObsNNOFNDpWhqdWm4PXTNYBoZG0mX8BHbE/F03mYDsRpuJJCbCCGgpwdqEpWQHc81NkoFeyUWOiROkiNcHj4zipS/iSHyWQ6nC7925RViRmHqYHxABQkWgpdAtk50yaeyFPaACiRLUDmaVqi7ywGBuIDbbOiNHwQcwX5WvNI8SRoaHBWQMLaWH86RPS++4ZNXFtuRaZ9bFucwHNePSuiLl7EUSOHb8KEHQzOw4e0yb2ntWaENJHR2cdG/y1L66OlKhCvAtaT7YtB4pE+iYS+2srabSsuBBskq24Ij/MqMg8nValwTR1IT1BLwy7mrAW4HNcDMgqjHnNqN+iQBkSqXAZuChn4fiM0MRbEicW9tujF6mweIV49FzZ65cep+ztKMTR69e+XBpfnF2Zo/WGZuzScAREzONN958++ixUwye33nvkpXA8ROnzz12gV6A9xem1gy5XRy2sDFHDdCUFR6CvYKBNxhwRnHBgB6PjBoxOyPE4DDpdgoR+o9Njp86cfIbf/yHHHecP3PyUuv++fOPLs7ds7RTFOKRET3Qmeom3VrnYoRR6cpPZDDQTwq1x9XOOr+vd4R5+MraHPeAtH4KMY7yFJqs9ENdGkGpcCpvH7VCSo+fKkIGwuJhcmtv48Tx40jI0QKG7kacBCWZs/jDzo4Xad7rCKnbT354SbQAywmsnfjA9XZUn+9y4oXusABQna0DY7k26l/8i3+hRX5qKa2EkaWfDZZHHz0rEgbsFVy9dllRusZg6XATLTZyd/oubQGShgu8BlVCLZFlZ2wEF2JvyL6JRAJi4vidO/fo71nsaLURppTpmRnl8t2gX1yUe29mWpUgYLICPnqX4ZHhe3en7UH8wT/6R46A0OXbG91eXLh3/74xMDIxhvohTDxx2UHes48+VtdqYbUzc+oFfXaSGNvETDCiMMfOuDdLSMOJcbW1l3dcE6xv6ZLYiiEQ55G3Nt0YEIWuvFlgFbGqePw9//hjTz79VKPb2lpZWSmKLwMYRCUYlj57//0PYJY95yIjp4UlOo/jx07gCCPDzMycxh7E6umB7Ars7qyaSntdTrHHL2o2KwwDed94441/+S//JR2w5x/8g39A9aJHsWM/SfnYVhZLuWevva/4jFO74+2+xuMBRslvgKLGJjV56tiRkbFR20DTs4vOKW/svANgoOqClB5HNJF4/MvgiBY/tHhYJlagR2SmlkMBuUtkQ+pPrsJxSqDwiypFiTcWE4ZdKcoR98yIKdZklTKLyKi8RJUP9Wu+ZBSXpCWULOV5ECgfCyQld6m0CUzKOwAsnz0PgJQzmQ839uHEJUfJVFJWSOr+Rv1Uqisg0IfVRb8yHjwGhVtGLYPtYPZxfryxwyR3i1Poju6lOIYzu2TSq8d/Otp6HCC0y27e6elo7SYsjB7IrS1lB5yVXTEAC0/BVfJv1zHECA9GA9xFdNWLYSpuPgAvOSmyURyNZzEA6iK9PSjW/C5KdBpUmgZ6hXvntGTpm9BJCs4/jSUDJK1caX7KLIHyN+WXovIrnVX+5pUSDp5mOLUU5dbBlwd/D+d9EPvR/mrEl0oO92Pp2EIqzC2LBCNlEFSemsukG2ZKbC0AqK5+bULsZ01ZA3BSQarvmrjiMXzjk57DTWiWVhPW6oSbgcMJmpGfVGoj7nD6w8lCAj/3aWasATy5dKJc+afzawHehwM+5Od+HJxHXrdw5Jsy0rFxGyWuqVq1tRdSSiEhAV/IRfDMwUK8FoRxZQ7LaQHW/85ous23zLWyYNQZD3RvsWptIAeRS1/1HTjbvp18Cq/97bLiPaArFR88BdCD+IIKX/w17RZ4Yhvw8ecQqT74mFOYGp1W5l+41UEtgdOE3dZhFbSdG0UjrrvuwN6cqgylMgzqasLIa5NscvzosZOnTOcWDvzBEOe6eyMIpj7DMmw461Iii1mHmsjbLTfmRTe75zQqM0KeaUbGXXAADm3x6K0s9LkA42U1PZQL7/Mc7PiZBWxdk8l2HUXN0qKtKAZaXd95ZGzEV9vyNpTv37lx9yZXE/fMEi+9/FnyK4Hd9rkZzXyRk0ztbYtzEfrd4zsxaTkwyEWHA3UWABgCYZcVgOnbJI5CKNn1JiBFkl0UIqN5ClxEECQhmZ+EB7O2SFThHSo6MMQ35UkAOSCUGNLMXBIrSmIjt6Y3iv3c3ckBPBQSaUQRZvpYCUeWktIjQJMaMjDYyz+7MaQLMzj5Qbw0yZLMbY58Wmw4TKxbSHjqzQwboYo557b1kq0XksPWRuyOnLqEbxcRYKMaHr/Q5WCDAsFGtmfpuU1Z37agNIUrbdWuwcqK0mTv6kHNWQD4CgyNgjclEDfLiiA7HgG7fNUK0ohHTNYAUWv4GmKQQN5agvC/3adZbDNQy2/+bAbEE69j48AvDgy4JpbXqV3jYW94qJ+L+a3t9YsX31tZmmPKyqz60cceO//YBUaxV65eZzazuLg0M72gEH2KAime5+at/VrjobF/aGl+CW3nxNxHn+bvJhg1UIc5kkCfjv3GEL49czQSchzc8ZW52RkEAPneHbubd27fWlue63JmYYcTz2UUK4e+0AWoSzmqRSQegUqcqnBfgX50jThX+qwCBamJa0oZ/XzQg1GT6rks8PWhHU1F6U0goQrJhDGChArz1AqDDrS3btycn5/V+888/TQ/PKzvXGvODYJVFuDl5l7fUndpccvJ/qWlVaizJOB1AGug9/fE/35XN+dXWsQ0aG15ZW56BpKR2fPPP68KBK+BoCVeMtlS15/+6R+78VbzI2D3xg++xxogA0/jgSgRiL2hFY8wQrRnYd5K5SZDdqsNQ9iVvd/+9l+vrCwrHUK1y7FiVvXSK0QLPdpueUECVhlQlB8s7MSoXTN+7/d/3xCk/6YP5Y1I27SBMG8IaYD2oxIxFeOXr15hKE/DDU0sLlQaTsBXK85XRpEY9QKbmqgvkneeAkW2pLVf7aP5nLEtsXGOHdhxQQH1a+0qRC1lBurQ0Oj4uEII6D6xZuToOoygKDlqycDzqNcD7Cp8cw0pEhs3ROBKT2j766+/jnqkAcz5Rx+X/Z/9s39mbQe3CrcP8Kd/+ieGDZMsuytqhMZasrw6Qi/CA7RgbdKDUKTsC8srPAi52cIC0XLLpDLAg5UV2iHZq6Dd/I6rWKFmjiQw1bfYTwuH9WTZEBzWEtLkKkzmW0G7mTGWN8YpZYfexelNWZFY2b57i0+O9Ls8mWQzgz54zLN5avk1usYkXFcspXMlwA1rhypMmpq4FtzMWJLl06fHPxAQmoU0A00wHgpUhIeeDkZvstgJJa50RwdmVjRZcNaxvbJgruE7DzfLvalxbgwz7j8y4FutTIviz6szJtWBO2g8fmpEjViKitADKlpeWTSv7mxuxLyirLK8k14XymNollkBRnhliAhfnlZVZlGgCzKFRIWUXOE7qSnrNc0PtqHT/7V/8y57qIlJ70T0lb6+SqAgrXTTx3ElQX1qLuFm4ODL3/Rvs9IU1Oh5f0Xn0dRaQZqq9taWHAHWDZHi8jS+pj0HmUtUE84awBmaiWtH14zezfga89DPZjk13s+HAjVXja+JHyqhWVEz5UMx9edHoP9YiiYYHw9IezhS62qMyBqfP9npXQR7bXvU26XhQN3kyiMEH8VzSRjJiUi/lLsz+UmMxSZNG94tGdtx97BZQprjRORc1g4dTXTAMFw6JaxYylJpSAuzxdl0GdkvSsBDqy7JdIs0HpXW48sKqTH1Hdh0u/oEPglHJcHhHAmHHxooJSNYNcxiuKbUIsyb+ahk7fx/4eVMSSEmHqWMxij+qwVR+F9L23MvftY5NCdxTV/4AI5N8oeErq4BJcSLq0Ec15Pu8RnB2N0LK77A26hR1RjB8ho76BBbecqAB1SoFgPxN/8Haf6UMD2TnUNWQ3GBBV5Hhkp6MwhF0o3r19/96asL0/fmp+/WO1Cfe+FLeopBqSmDWu3cuXMAu3PrNitaMJvCMB++6UTiaXTVtqkzmrq6TDQps7u7cifKdV1pDvVoDmHCJA7ma1eu412+0miiJVKF6mSs3Q1oJXtXglGanyZHb4kFXOAqZfYE9nbNlQpXNWMkCfS8VjMfYEEPGHl9JXUA2yfazWCkjF+zs/JlDE26iJflML88lPHFQN/xa9pD1KmBDMQVYl4no6mX+E28URpqVMXw0IA0iJRMpiFaQdtNkuHxHPZM8UwPOroHnNTwNaB2Z4VRO0chYE4nIpwHXAjGyMtZA1dopQeYHV2L4Do6sn6pBCnFr/405vRfMSMwK9gP5ft4vL6GATTA9IvAtrO1vrI8vzA/s7o8OzrYu7bKvnoFG5lbXDh7+gyzCJY/1sEra+uff/mVL3/lq++88x5TNWaGf/7nf/4bv/HbF77wzAIHlvwFmB/3nKwwuKJ++rQn6Cx6rgzdMga4NzYm/UMJy0vTyPXWzZtz0/evXb70g29/o7e7/ZXPvLAwO3N0dJDye376tvMoff1hRHpHl6kIz0EwSAWd6HfvKshpo7rskqGBM6fP3Z+dc49flzMfex/I8pEdgJB0mI9HUXXjVMlQWh9h8WpUlBjZodFWlZPlg739DPEJ5ZNHJri0OXfuEctsUz/h11ixROeZZ2bmPnUzEzvU0tXZt7a26uYyC2+ndKi6C7RLaBv2xsZHeJuEGXVpkWFIsWA0GSyqMzCJ045fE/rVRfwm8bNA4azJQQgIdGjYYSzLhR7DDC60BzT9Y/0uGojswCdaaRClNXbtmLzbgCdGRiVzUJYXMEaeIGNIaIAZSGp1qhVYVmOG9507dyuK4YIy/cUXP/sHf/CPVGSxu7DAVH57bj6lA732sQ7QYD8Bajhpz9Sxo9I7h4EEue7Uf9QIuIbBLjFGABKs0bo9hZRdP3hMMuv7nTl4V74+qGCYVsRbZPQwG4zjsxY/lW8XArQqjYunfcaXJLk9Nk6lIeP9bR0Yk6bBFxQpXGODaNsU587NTE8LKO+tn/2MNRErvmOTE+5JULLaVWV1BEjdrxViMHYlKBlI0pw4cRwFh8VcuuRAvV7BVS23rAqseXQkhOhvkRoovTARD/9XoHb5iW3haT5197Q5tkFvguId1MOh1vdXeUzLfodai+YYoRAVhZWAFgvhotC9WB+aqjPWdsqGli5y6F+dkQuNQWDEaqWoT0x/0muCSGIkMMRkMo1Gjp4qWUou0q6n8sTmIG/FC2SsA7Ika7BLQHrEPBRQRI3xFi4JMinWHq/7Kn6WohqTZf0p9eGAShs//ZH9oCLVKzjZS3wzkPJryw9njFYrec0eSBQyLR1p4JjnbFNhtnZGMoU8rrIhnEaUsVZxD5oaIx8FObGwytZU6Rep29pxqP6BkSNTJ/SAg3Gu6WZii948iNwIVZU5BEjGf8kHgxYBZn+HC7fKmePoHalnApVNit0dmjSwIjYqLE63ONOzgYbqCtw20tK76Z9gqTTdxNXYzKyYgFJjyjEXcDYmuVRxgLeDQC0BhTRzNXqwlCxHeq35/oRAliIfeRo9UcqrtYipATAW4adzf70Aj2az6ZwNd5+s3rE87WIWqJuCivjuCF2r4ADgg6IKVOnlQ88BqIeiPiVYUx7++FD5ld4+nqCZ7PAn4U+Lr7zxocSHf9aMzexNwk6Zhc61sfm1xlTMiNd6nBnJxnjN4Cp75VawSZ/VZLTRJVktQZcwAuns4xmBVrujdRPj2VqPDN3hcNsRuhIkibQ8tYqEyvzXPhDqxSmxC+Kur/CDv2Wa3F5lkU2nQ07K1zJVk6bAf9AdgQSv89NXGWt8VA9RMz9YGPjZxIzqmj9rwDv8qZMeV4EGQBKHQWXdQuJscWTB8cTodGzt7e8y8aatbtkziRi3gQHbdk6M/2WXvGZLvLV9a7vTvnIb95XdI3Bo9EcsLvwNnEXYs0TK3tSmncOyioAuHZMmKJOCw9+MrwgUifdfVaYkkNaU4fCgjeR+gv4afdiO8xhOIm3ziWk/YWH2vsEOpe730XYi7ARn/uOjYsz6QHnmmWeGR8fNNRroJ4c63uY18ykPPjqu6CBW7OnbL9cRksG5NKatmgww0pib/FSFt3nzxIm4Cv3+97+vc82PVF3Go9JUJKB/6ywMNqUpVoySJYaohbkZLE4uaQAJJ5AsBh+TjEZseGSEmsxdLD5VeJRM9JfFDAgAyUCInEh7pTdb70/fg+2cvcYCyrUhzv3duXPbnMUWKOY9a6smt1G3YGQvhY/FwO/uTRNm1gnFigl4SiM8kaIIT6yISWxRQe63LU8vOeOiIWCwjaIEGQFQa4cWmz6q9hUUofOizWQfgV/vbeUwgypc09zd18l6Q9VKSFFmBBtPNi0Mv6Jya/DTxp9P5g+IJ/PuA6pXTOMJIf38pzDAZqoMDoVlHkzGWiSa1CKNzVq3v/funfuT40SRte31zu31jls3r3IPQ2Ylgr/yyivEpJmZWV50+M+59cYbjjt+69vftfI9efrMf/C3fsuRUSust976qRHU2zNAm0sFTH5145ZJDVoiMhXvArG9K2xZX8OV4S7gAZypEDj0qj/5yWux13CDQ1cXD/dT42N/+7d+4w/+4d+/cvGdy+++LRJSTp84efzIKGf5++5S2d+vUqW21HUvnKezUn74iQdBcvrqh8Ctm/dYZyCDe67HJUC6yjnzIIkuFnFkV3Mlh0hUgcbhDv8HjqAgx7KXZQhU+w7lJ/HBpoGKPG6XZV538vix5eXFgd6e+3dvY9Jc1ZOub96MUT5jew6oXL/DDITm98jksTu3bpSS3fO9butA7Rqoirv3bs/N3H/v7Xem799TckZKkeFp/UmPstDOo15I03ze9o0gYwd4fIAatmhbr3WM2MfZ2nKsuBxB3jEGQIakrFzh2locjRpKWGcE0PVNO77SG/k0My4RV5yOZ0vP/YDRqLWEY+IsS7yhoS50DwWGNDi+9rWvhSD3dgaim9/qHhnSv2GahiOvPQVNAMU4COW2I4N38kpry9Gp43pCpbqgVo2TqktrJcDD5arZKwX76cEgKvaFQS4si/vt14sBov5GUrDGb9tgMY2yhwBOIxaa3DuGb0qgWFuN0HT/7v2jrkJbXr1vl+meJW43Xcut2zeZWfJhQXx2L4rt44W5+aMTUX4Y/BYScIIIPDqjepAFLVr3Fajqovd3dwO7riLngTEc3JIAN4QBJO5Rmm6DSXQpr5UYUGmNyHMgNPnwNEPiYYOryYy1vE04GosLqppXLPuaNB/Yut1hpyls2vKmbHcpujDzoIEFs7TIRSjU3UWgJJYZHhG9gl/7od0DWT5k1szMCvisxizi+7oi/ZWBZFpj6ppeLntq4Sflf+kbzx5RAbNrTOE15eG3cqQU0wzUr34K+FTiE6fvEnPAwEquxGhyTZavJX0NeHs+Wk4qElfjSwmfUO/heAw3a80qW8T8EHuP6tmtLjkQkIJC0/53FiDlBociDwugDYkTafmqvoPVR5qmWX0DOOzOQC5vik2etw15izT3Z3sjdFYWNrK8uRS1OOAMQSyvTWQa+gK6s33/WnZXlxZtaxGAWWSYUvjJb+t0K6d1LPeCzK0ljswXEEuDKDJDBzFdiNIisJfHfObXYbyJbiJWuH6q70aWUmzzUw000fhQmvrz096KbWZsBsAr3gP/Wb+VGUIzxEiTZFHWfmRaTGR5moFPq/H/X+KbDamB5k/I0YTmTzip3AZvEWnYeqSpb+MjwsfBDkCV3TMgSoxyimYg+9oPnnZrWlb7mZuxH29Kf19rvX7BtLDFL7mWAQFo1Js+OXhQjPQlZaIkPviSv/WTTLUjkixEGr1dwFZysbGRjMkQALRGWTXx4beMHjGH34bntus2IvQbo/h2aCZu/Vo69/c66MQXl++YAQeGj8wtzDhrR9/SutvW1zfEXt7NlHhjHwNWt5v19XL7EDkf92eJwB9MluPshVoNTARZIcFbaUda9h0qo9rXojCoLADy9l+k/zCB8mhnaWniRTQ5WyXmmsabWsXwppOpaBGTdpa+gBs71r7jAjoGMnnvgLRRt5n29tJZmMDNzuYatqZmk5oRVzHpSGxuNelTYzHEVSwJQ5NgG6nAtik4KkwY6OsjlxAA6hRZp2afojjLnnnOsCkqIm9h0X5GG3UgJTfJT4fKq4oyibccOX9eIcQJc6UzAEoAOQgdnILyzErlALFIsIVQCsAKD96Lft3EbX1CzpudnnGLEwgtNVWhfHI/TcCtlRXsW/nOLYCNVGDGlyAS2/hI5v21NcKT+VctyhwacSChi2NA3Nyqj8n+zPxCFgldvc4AAAAcmgMwpQGjOt0QjyRk96hLJbrLfQASZCyEBvzLbKEr65Yw0tCbyhH5Kz1R/f5KGX5RYjCkXYWomgGRq2vOzq6zrqY57HEn8PjIB+//1NL7g//P28jA3UeEtFe+8KVZhyRWN807Gnfs2AnXAv7O7/wu1S0nlVcuXR7loerMqavXb8L53s7m5MTY6vrKbouFPYzxxs59S0aRQ9uwCnvRV6KoTRbROZUaF7bFdd7pMyfVODV1bNgVqEaDmx8NKsxmb2ukv/v+zSuEaZ1Lozo60sdJEW1waKDcAaUcopGfHl2ppZUGkA1Sn753nyc+CVjM33KL2Mz0m2++Pjc34xqHre34jLHccjzc1SeZK5mXr6+Z+lu7GytkiIKNq1dmrlz+kMSrCuPOU4mNXG0ULM8tZKBtbbjn6tKHFw1Ylw94z81Mzy/O4cvLKwvs70hlTsJTEHzwwfuGkgUvMChrMCcj15IJSiFncmIi6+Gez4GfrlmNLuqlFEbGuk9jtZHZjuHzpS99CUrFgMFyV2MlgKXc4uLYE2y6L5BdP1lmZmd7eGiI1Tz8GznE1XJuNndhdky00aAvzQPR0ZBOqvOhgb7YFre4xHjZZpBIi1gTwmDf/sjgkDuKb9+4TYyJHqCtfZnDn452R55zJLmnl2aEn4GISwguAmg0zArUjKNHJghEAsAlvepRoPMsa0QhCQhkWb21sa9SNxhIwyrJ4Ec9BrPWspfSrxopxp6A8NxcjK6gY3RgGOIobk07GY5tbkWJ5qaQu3uVQ3wOL7uvGcjOQuXSZtb9S0uzLgLs6X/6yQuEL65FzQBwd3LqmINF9++wPGs/OnnU0krT0EGwvLZmqCtNfwtPHbHmi+uD2gdQDx4bAyYMacylOIR9AcwMFzz/+OOyHD95UmLtsh64duPGa2+8IZLJl+1X+jYS3BJ9z9qq4QYtFk4zcwt4L0Ivp1jCfeHKUs9Ocf9AlxVC+9FYSGOL3qRKlnMWAxRIdWGQ7dFdm5uOpbIrzT2UnsiH1Bu7VrkRWE2VInOPDZzZg3Yfbg6nqgmxEGfDO1I+BlBtiE1qmWITY5xTIBpHRSwX3XjqFCaBR36xCTRk9yZPTAfVT5JI0EhWwjV9nV8Juz6W3lSIL/UpkJVgPjWqaHzy51DkwdcDMA4SJz7T9sEjS3LJKy7eA5w8IYuYmctRYIltT+S8V3Tz9SkFNDg2wgucqdpkQErIdOK3UQTDYWf0ogysEw+z+50dvSqKR6q4yc4pEX2HwpeWF2wJZR1XrIRIVm34Rqu7afql47iWmakdZ85LrRhQN/0BsAGG/EhQethGTpGH9LWFPvVjhLP6gMQOhNJqSw/aEUzUGIHDkcLNmBpo/nwo2aGUD0popCkRteCAKlQAEBACtUFEskwjLX+L2SVGwQwlVA1DcSsRjYX/IlqGpko3lc5SxUNtaQKWT+VHfR+O/zcI/5xaPrG0T0v/C+NrgmYyWldMA0vx9pgFVBfUZc9dZDQ7yKZ8ksn2dLZ3pM9TWl4TQ6xAEbJjWBUxt4j7CIagmeyIxiB3LNRZrKIpjDgrkH2oIL6Uk75MNbqhPDKG7IpkSVg02dvTJqCZrPCMWk6ylOQVct3qqdlTUHkSKDMctUvSl/jDb1JZjS9E4EsyWtw6o5whii+1gSQ8jvMQ63payeOnTrP6PXbiBOXL9R/Onnrs/PFjJ7s7SMsxQSGdkgzI+oDHUamUAlUBzlv5mm+ctrLsL7NJYqq06o6BBlMMNnREeRcqt1CNOFge2M7T4FTNzyUywEdGPFiq5Vd5sN2sZ8zTZTlPkOp0eNDU1N5CA6THdFxHrvFxzJfOLshw2yD3JnbQMRgPXDvDllNyrJj2ds0X/UtDqmOdS5dkrKELDTd1mrNICCT/EkMrn9nWRUiXL182+0hj1jNbyQurhqS3cOhqd9cMVR/JrB8UJbHdy0oJcnHADwABn8KkigcF2e2um24qo0RYvkpjHqyzqjA8K9OjKAjf3FhfnJ9b4eycgw3C0eSkVoDECb7wjbKSRKM8BErPZRD5TCHgB5WvTmCfPXdeFmgbGh3q7eqdmZ/RZLdD49O379zhentwZJx1l/TDk9Hc12ZmTDHmdHw5Ay2PJmg48VcabXcl2PY6kQC8pe8QTRkIulGCdKYlLU7nZ4MSRP/iR+pfnOhQCrUf+vUgWMGosIltBALJHp10J0e9LsTbX51fmHntJ9+fvn+bVEYqWF9b/dpXvzo8NMryZ3FxFRWePH12YXH57COPknYoUvEKct2rr/749dffVNTAwLCvHCa61rm/t5P/KuRHlHZZlUp1a/p3ecUmtn5xsQbZ98Tpky5h8nVlad3S1HIyE2NXryU3U3hgkx9NgLxsrS7GLgvOAc93y/Td22Ti5aUZdBX0lk0kVKdndRaZipSMSgmLKIGmVZfJKwFimBg/AoAPPrjEKMMYsXwox2NTvEFfnFS55if288QkJuVIbrqsA5WgIlXcvH5NvSHycgG2KjzGgw2oGliYn730wXsgnxwbd9SEYoPUPconrx2A7k7HqE+U07CLyyvgnJ9bOHvu9NEjR0mM6/ycriy7cxZgrvxC+Rm5OzFLs2fFfuS555577bXX4F/Gn/7Ulssg9oUzgEp75SLPI0gLCU/Hnds3mLBsbWYjBsDkwl5+fNypy8ikWPDHPWER8S3DZeD/nnxvN42j8pb9y5TOLhEQdkmBfUlYsado/MYrz34LCOKXYGqCyGJV9JWvfMlK2G5aX699WPyRM9OYjoLe9iDc6QOHfVoHW1RkmagPbFhSWrSsO2G2AxLXCYs3ks1iXH/KwpMAd+wTo2O2bLLQd1/a2vqcM7jLKxhfRVN988Ekr32qKgEbtx69VdQwGYGILJJEWXhAkJ82ey6+8/arr776a1/+yuuvvmqN9LmXX3riscdxFosSThZcwG6DcnRkKGIH25jiakqXqAgCbdFqGrJWFH8NyEUDw+DKgw5C1tmQTb2AQV+aJqDhOlW3UcP4iddQzNgYEemu5WvXb37zr77DhJOsJz3nxOsbWw6KFFLOkMDovHWbGnWB6c7qy0oOBryFxeSKdRavFqktThOMbrn/nCKjo5sVq93hqg6xNIBM1ukCMRmKR2Q7XuUQYJZ5GNh++55T42mXt+YYHiknMGwQxsQgHrJzPhFEXYvTZvXcwHb5mrBHGLQPBWSqaSqHzHjLU0qrXLK+G4kexCvncGmN7+VP/XQQQ2L/SMoKgK8PlXAQHwFUjyQ71UM0Xptoe79tS6dbEmVpxaCighnb3njgOsibTAmXDQF5I4kERZEeSsuKrMZkKEsHbWGQIQNkJUF3v4VlY9aHbXTlEfAJHzT4NzgldC+5Tboyg2I2zmO6bd5dJjYAOOdy6p5s5rSfAWeYE4aUHf2J//Z3XUtmxIpBG1hyNJ8NPKexD2EjLfnYU9tQG3u4yTXh4ZhmuASaXXxQYomAAAXWlICqAbiDf62uXeBdBywOvbefG3lk8VVBZDy58oQsa3/kd62jGTiosvG3fm4keujbr/jz06r4tGI+Lf2nxX9aOZUkml9lr0/FWyUbfKZiCVaxXgkgDFGHdC0+I+i3VQ8EWVSVp3wV0hFBo82pmjJGC3V6yNDOSqBRXxkINa+YquVXKbKver4SGTLOQatdInJoDOeQwN9abS2q9h6Ya40BtPAKqmvPtkVfutsfk2n2KGu4M+753IKXxaAjr97iDcWh/hESM14dA8bsZjAjYzDQvb/X9bmXvjg4OGGXuPXVV7//2lvnL7z4/PMvuEaScsYoBp8a8HkOUR2fcbzZUCnWUhlCnrSOEtiuNZzFe1eGdsGA01kh2tophbqNsVBZFgZFGVw/NRM0KBCclAphF5LlqGFpd7AfqacxKAu159gQVwQtrsO2QTzkelT3E2c056sZykxEHaux4CTfEPbNSq3rUV0bUnrBHrLyqZ94BIzMut/qUgfvJNiP704aNrOhkwwdQ+2s4c0kN67fxHYsALyVbG4ytUlvVWBU1r7TagGRHpAox4RF4CZXCff3Rgox2Zku3cEksZlOvAUAvMG5+dT/4q1eqpgObNWpy1sCxfrqUYgtCBegmigpjft6epRMeacceaUntAFASoKRvAJmQHO0qz8xcKXqMzbf9nqMBvPckaNHIWppccbx4rt37y0sL2EoSM5cyZuD0yLa6Kn9HsEQ3ZbVjnVaBUxL1cs/OA0Zs2OJLVZMjbh2mZwRRa6OQka6Vt6yGxCdkaFQKeGXeZf9rF8m4S9Oo6cy9A5NxEhME1wVvs3hVJd2ZXaL/onqe2URwkPHaVTHb//278zPLV66fI2O77XX3mRv5ppUhgZ//Md/zEj9uWee/sIXvnDv3vRffuOvLlx4ysJ7fGL49ddffffi+ytri6vrq3dv33V77dDQ8IUnHn/6iadOuaLOndZo04jOJoANRUjbt3IdnRhFmcAkWlNOgRblIwg/SCpMUZidmSRAhWBcaLu3m42DkEihrkKJMT5EA/IiPKRL2vHotaGBQQKyxYCfFKaXLn2AdWnF/K05mn7wSOPBA1jVWqjYTrdEBCG8hFCtYRwOoeSVjSdJ3ITjXWc7+3KXMEyB4ZknnypH1dqtQCy2EYBFjiUW6c5X2mrwMNlQiwAgJ8cndAoFvxW4lTDApBkbO81JEfiNF63TWLIfCcSinVstZ6xZxKG34mey886dW4VKc5rZ8CHZOgSscAmMmo4BErxLQFZXsJT+vi7q7dGxkRTKc/l2TuiT77MYYCFEuFhZuX/vHnI/dfwEAeKRM6dsXrS27LiCwd2EXew/+HFjopADCu1DBabpezOkDYeZ/+xP/lSBliO9fV03r16OWRXC8WTGwXlyAjg/WzsWFmddkKX/tBDDNZCwCKLwnVs352a6nakCt1XK4LhtWWcP7tC7uLZjfS5nOMxbWNIgYy47Kxatu3suLvAWTxWqKFQLoR5Yg3FPLCs8KisDWIyVxR477CxGlywir1257Pz78uLCBw68ryy9+dqrDLtY/z/2+ON6aWZ2Nku3sTFWcscZRA4NKqHyqaoF1zrdQ9mlCzE37VIyALwxGK6TePcHGIbFigtFikeCtpB0G7KAFr2Q5U1HtA544rPPTXzucy9Pz8+/9/6lN956G9jKl0uvWRcFh+Gc2blJW2z9G6VmbCu8rc1dt9AVsx+38UWvXG4w0AVwxR1E//D4+LGzHB2gvGS0p+yhINpgfDafEeZihTJ40MIaNY0FG29LERiN0MyGRibJ0cjt6R6WvSwNCJpJUOReNYEqjMYD8vrXOwnElMj0RHmUWmaOg+4pkZV71qiaUXQJ5HNJH66U0g7zsnxMfPmbV0kQP8eY2kFk4+tB4QfRhyRIIlL+NQUdSQnx0Xo6IxFZn0FKzZYZr0x+3s2CSkmZlesyQN0pwDwdTiqWRBt/rzqOUJ4v5dEUGv9kSgVVWHNhBvfqrawR0ElZcsc20bqrniKYn76/0Wp9SIRjosBnQD+1F8bNVCn62YhLmE8KMfGQlpmJ7dGJAstsFKMiVtCRaYxH9YKk9kwzQOipsB1+52tpfUn2MP4LwpO8GTic9+PhZrIUVB+nKzopY9yumjh9jc7V5U2IlF44zM4cDMcVtWWKauQ+wGejtH+Xf6DuVyoe5J+cPqvAT3gqnTc/1Lb7GbYZMT6iJ/kz9iRKtttb3CWTrTA3EqpxmERWUAnAZLTFkUca3SyqILOsovS/5hQIsyKwo6vAcO3yANCWgBLSH9HHF4m8AKArJCllphVKqOXgUNia1H6GwTiGsLdp2WsYETllKeWkcQWNCih9WTpXIQ0gQ0jtOYID1MjSMQWz3UXg945D5nIzDLUHRUdVfsR5Uc8gwTg7RK3OG8CEJoO5a219f2LqlDsM9tp6B8eOD4wd7x87sdnS4+4+LidsOdsxBb0q08qyUMmCv/xUBmYbIPnJyQ6bVGAv/xc8BODC/tIkYciQ1lM6XcMTXcW+g5x+VrZQNtiNVtw6ORQqP3QUSRF66JUMhxYHwWDLPjJmDkGgLfswkXdzo+B+6/xS5GCPuYbQ78BYnaRs+7BmdghpoNd//Xfu3iNJQCyJ3wijudZXZLDJ41NELNXeue3SmWnTttMEJ08e/9a3vmWSMm2lot1yyqjIXqZoP3WW3tTdMECyN0mhTymJ1r7SBHsjAGlMeQUfoRAmQF6F3locOahj3NkG3nYUQkTjfgqJMBlSr2SK9SZAKOf8I2fxQMWm0r19lq6yKBlaAkC54YEncbMtnqg/x8eH4IRbSQs2A8BGN1Mg65PXXnuD8Q/JZyqK2IETwyNEMcJDTtnt7c8trQDbLAmHziyDZIXMQ/hxY1BbhyUQwFSqFcxF0lLW4eUCGRACFTYQSxF86uhAFDq8vEISn8Q6Cqko8/CDCPxs6JsOf/j08CcV00wdivUUQkuA9BXkc9HFAMdtqtvLu5ur1P83r18hNBIMqFnPnz3vTC+Nvi2xL37xzBs//dnLL33BAuD6jasaTnKN8BPdcuvU5NgXv/Ty88+/uLiwzFvYubOnXnrpxbcvvjsw1G/WeubZpzInMchjPRBMmgARBx3BlrFMNuxyvrW3+9a9u719/cRFfAyVYiP7nIJub1hBcsFIJ6vG7TX3V1tXrDluawnHhlZHoDqdpaeUbpX4uc99zu6QMLGYVI3mDWpC+eLCvGoxoanjJ95487WBkVHHbJCNG05MeWvLnFPFiJowRWCmA71/z9ZB6YL2FiJt3+DAyWNHh8dGn3z8iSPHjp4788jk0SkeqHLhKwsL4nVxhIU47TmhLoABibAWRUQ5fO/TPn+kJjlJt/dWlmYI0iIRGzAYSvGcAMKnnr5giHE8nDVAuRwNXQGJcZSA9HKTIa1Xf/zjHxKeGSB5jBRNro4KEDmcdDz22KMKunHjFmnVAmutzcK67d69BaKhbtMDE2ND46Ms87oybhcXidfkDJuBGsMgSfeQLTuX2/UNbaJ+ho6+fleq9SI1UjTMJldvDzH3e9/73okTU1/+4ufZrmzQX5udCn9UNcZF9AG39hgtiAbxcb9qIGmt+4bNJWTQ2enpG/s3rLf1peHi65NPPu0qVqj0iFGg9kOr2958DSlxdcdz6siIsKGeO1yLaCCNR3pKcZ9YNUKZuoLHshmN9JUA+7w1/ckf/Wud+tWv/Nr4kcn7d+5ev3UT6R+dmiJMadTywiJIWWmTPGgznF22trOwc/dZhUc51sdgsJJRqeqKyJINzd/7vd+7ffsmH7p4IvB8qpxFYwNa6WzJcG3gwQ/GbRq7c28GniXW4sygO44T5DIIrEUuHaQW4rnmEJgy33Pimmkg+l3vqOvLDoqw9Q8ttsvckqWzd2+JLQtj1r723pxrGcQ4MYT9vTOZT/Q2XmmuycaALgCw3fLCwy0ucnoVUyCNxgYJJFRSWRWYoAMp6tRBhbfFuPPQE8lB7WE5Zab3SVBH1DSJL4+fIsskeBBVZ82D7/7WefRwCSVLM30CB+U8SC5Uq2sGagnNn80A4pIyiSly+NyBS7NrKzX8JvxqSNqZp2p0nPmOPCT9wTvN9DMWQA+exmwnwvwME7ARlR7MmSeUmZK5B41IruNwZuCJJ26vzC3hg9Db3dHTN9g32Dqss5wkOzJ+RI/YoQJn371BNm04CJOv9TUz4hYK2d7b0hQHrgxgSziTblhvWb9EgHSaoxhxEXwi1xzqkdqWtLA89aegQEnWnD7yuYnGGnjoZymgMeuU8IOIUmF+HhTbCBgCqLqjO7UrjeAKU4EX2zoY+xYxWVEV0T/ZD/BfS0uhn/JU0D/SgE9J+W89uonGh0r++fHNrzUAcqSQ0V2eQkWNF6QJiYZAiPL2SOy0WbBXyEnGkjpvvBD5Gb2HOg6ph1Bq4po9XwttKyo2DaWoFB2qZ26U430iEYuUaley+BKTIY8mmV9sb3bs76wTNRGhnVNZiHjSgDlgH8CQEpVSyF0N+LZ5ml8NMaVBBCrWSgaDjQhgG2BZltTlTQEgknGIHT1YpRi9melTJrgsvds7els7ehe4uGvpbu0awAaX1nf7ezojZanpYCuvgBBX+hWYCOpJAblhlAALmNkBKBSLPxTn7kVKC2UVcuerC30WIi1sT3x9ihmRcS0WWOIoSwrGyiLBb7wAe1BKgdwIplCO4xp7s4okD7EfcK/tPvkkS/R9HnA002RvfoFX6HXbphmWwG3TXY+YiqBkK7u+a12L3eyqI1QVzYW3OUUuf6s2UYw+ld05NSf93n33XZ5zyA9kKeKBeA/8SEba8BaWveLEFObR40qoZCAB2cv6QV9PZoqPzCMLSVpLffWQ1cyeRKhMf/qZOsxFpB3t9Pf0GatLy3Xv2m4/TsWFCp9r5kP5UUMh4+ICZKBfgTEApj4o6wHkSsRyddriws1cvkxAXFsle2i7adqC6PxjT5g/NY2GBRiawDqI2pewhWGakUHe2T8ciaozsr4mRONm78JFZsXKPLXnSuk2WjkCqxLEGKBKM1BkyegrqzXbSWaNEFHMEfR6oREpftGTsddklL8o8S/5HXi6QOIaYC9uVelKacIY5+TuvH7iiceo4G/fuvEbf/c/vnf7HlHtZ2+/39Pd754JFxO9/NIX7UFT9j9y5tzd+7FEZ/9D/X/kyISBefrMCb03eWSUOOMI5527NyMT73ZyemPZRrJA8Llqgr/RnX1CfyGoONqkX1vl/XBtbXJqioYxjtdjKxEOBnNoDL0tz9PKTh+dGOH7H9qt1nY311pbtm00kVW0SL9ILuwriQtJIwY9qL2V5tmP0fmSmyWm6r1/f5nNLA3D0MjonXJaVw9abyNoh8gtCFm5G2skvUfPnj96fKq3u4+lUJYbLbvawiqP5pVwRz4TozU26IBNli7iah9mqbyFhflQUdmdMzQ8WmGdjOzrY+RKgH5QI4nL5hesGkfWmZZGwmWJFU8wClE+QyBZPGpBzNTK3NK88cZrtgXOnz8PpWQPtdRmsr6M25CRwYFyBobEvxd7rD0m+tGjQxkWtLy4tOeIRkcH88LhwfMbq2vU/Rxp0vzwhK/KR06dTANG4nOAisGBUWi7f2/GaYGJiaksJLa2R4cH+W26c2v79q3jExNj/H/RfOgALVlacvmgf4vA4sdUpZYsyEgheosHLobOpBpLAh2jzzE59zwLW22///77qoYFefWr5ZQ2Q5xmQ5mu1WcgvHvnFpzGSMkeaZh5IZ1YWbN3yvaciiprgGX2T2LkVe7S7H1LumNHj7iS0FH45YV59xSeP/vIMxeegDQagMfOneU66okLFy6+//5bb7/tMkjlvP32286qG/Zg0w3hj0urCnZDnqZ56krUp29+85vjrMAmJ2yBgBDLsGOL6Ugjr6LwRwQBS7Lr6dfffMMaQIGIcmZ2Xry5ywaE7mcYJX1ttbywgS1loxz5VbmVbgVxQlZBozAsSEQej3iAcbd17nb0bu9TWsQX9MLGGjs/BcjNqRy27DhIR/eQLeIOt6XnhPv2sZNnLQDsFFgT2hj0b2dj3Rrg/t1b8YNDtcLGwHqWijycbY8qTv2VxaQHy+NnjUmSQ9yn/HrADQ8yJqYms6AprUkpSs07zVPMg0fKh2L8bGTHakthzZhm4KNgpNAaQ6tkxNgagWokh7Q8Lutw7jqFwXsWAP5lEQmI4h8CkFWdr5iC/lZHO7IFid/5/wAYQbvwOZSZyGJQlM1/ci3xwiKgANFomy4jeNhp6R0Iv8mR7F2rEP0V/dnOth1BTk0YLne2t/FY6kA6krZHt7q8YP3u1MeyyXNxaXF5gWptnX5mv9Oenrw4nv0iIERma2th9YwDgKf5gBYg2llj0qQyWzR+lsVJDTfb1QyIb4YPAmnsR54SUee10uL0UQ1UBGcezUpSXFZHfirKfO8tEr0SgX3xPXtSAe+jEH6UPA5XXdtZ34fj/z2EC5yfUM+nxZOWaupmAgGQwwQ26Su0eKQJciyPDqwypII03RceaIras7MkLhpuo7Q85XdGknWn3Ig5Ofyv50mgikzV6sFPVFTwpTT+7KNfiCTEniNpDA0mEGJwAm8xsqisEo+8EuBgMUDbXtvh2wCvKPO0clJgUS0gShkNN/RLvYJn4oThz1G6ZwFQpCdhVUTcF1koFA0YdHmXASKcMdjVHZ1x2hBwjC22PUR2SjU7+G2DA2NLa7Mu6dvabV/faunuc/kMkTItDB5Smie4BZ5IeKP2st8fJlsosqeIgxnXuiFMI8SLKvPOAy/+C8X6EXRmhOdJfCi1jOqSrLABsenELANKAVqHHdipo5cxgabetKu6jsn1bf5ZGiUy1vt7BBeog2d4YyGAZXHQPjM3TzzqJrqWx8TBb7dkZkMTE0lAemHdVLhcPNpxnKcHc9lTcUqhsdyEpjlZNEYHT1InYRMA5JVRGNgg0L++klsUJS8AdJ/m60EgVapQV/0ksWQ6NsRZpjDCRthfB+6UOQT5MTrY29zvHhzyaW5mFnkM9g8oyKXIWn10fDLZTfFxLbXDJKN0XIsFj6bR/avIVT/gVLWZnhUYr1bjR47QBmcB0N0NM5gtZbDVJPQoR0ozry7iUAgA9CR+aoVHB2gd6ZOIairVTKvmSuRaqvlqN1XU5ohPVxqApfcVq41SpHvrEyqT5Fd6frUMav/E0mvFvh4OAIaothIXSWtMLS6++0ZfV9v1ax9O37tlN+RP/vUfMjG1mrP5wVyeAEUOsR1CkkEDFkhIQhevrvayT71x85qjAsrn55qpv4DbpufmF3721k+PnzxGXGYYQ+lsaGAiuRyt0/qNcLjKbMQGm52oEWfBhwfucGlFgrZlNZhTKLoYfbGBtZ94f3Ymu92dnSTg9SfPEyAdcCVMjoy4CjaPphGlSHr0s8RfNKBHKhEiPGhxC9j87IxOtz4hrn/pSy+w5nHnm8uXNIrATaqcnBxnNROG6XgMiWt9k5aacwAa0Oj4d7czXjOqXRqdpbqQPSv7P/YwNIwCbrt1b6tcGsBEDEhU/VR1xDcYAyTSMqYpCBwtNogi4LSQrF0fPEjRbNFiHWVbjAovRzeda29pGR3O4lkTNPb6zRt0x2iS3Og4u0iok8wqRQlIDgb0hbYbdNreQWLrHup4/LFHydn3Nu7RH6DhE48/wkTk5InjdhBs2c3M3Ltz17q/k3JBg3BgSFzfWr99Z5p3BMeTxydGzRawE2uiNQsRZlKtg4NnR0ZevHM7brkufvDe2LjrzRwBmXv9jZ/y2fSzn72tqzxQQKOM6RB/0c13v/8DTYJrbWA5p0laQm52X69dBbO7xhhZ2IfGoD62MRT8ADPsLOg3t2bdXWCMfvc73zcP8nA2cWR8ZGi0u7fL8Yqpo8fBbfxRZNmUUSPVSGFMe66wFgAPq1b053gCnJpNLCcsLP/+3//7tggsMK9dv456zELcdlKBsJqBR7iyH/r0U88+/8JnmJeS4JWDtubnF3lddQ5Dt5nR7BvQq+lgFAZ4afS3Cp988gndY8WGAekSbFqC+3fvlQ15JlU7VgTIB1qQiqUIG7wb166CTy/AngGNXvsHR7p7cgdz5drKl94KjcmNUOExjbGd+DKh8koQJuswTU7/7mYl7p6E3H1jBc4NNc8YmVqiFcaDi+EIFh6XTWQ/8yclXCxFAYZeTU8xLkHNpE9SxeNPv8AWhZ0c06mVpQWotrwuuuc16/kYnpq+Wnt2WyzHU5qtiIAlgD/6Uhhlmf0KgysiYJkizZphYY0GJlnyeYCGCHMUuTBRkFdmmvQ1u0QCKTtlqsi7ilFBY/lZA6beOvsqK/GkSQb5mbsJm8kYSdm6tpi9rq1udHIhsrawT2tepKW8M/Qz+umNTM5GebZCLByUkpJiWuNNVJEoAkuyJIM5S9PSK4QZdFyEDzXqKcVK6GuRcvIDc7HRg89kgeD0RU4nupe9l02Ek0kDOgcxg5pG0M4Xf9jO8QzRmB5wef1E8bKR+f7WrRv2dfAFd4IaYvQMFoEUGNH4lkuQgofSFQLGByASU1CZQFmc52fBUmArTzPQSHwQHzlSpkg9WWwcWDsTsWq+xlv2ZsYSoLxw13Y0hAUxKjPOtB8mpI1pN+R6pcuCTk/etZDDgSQI7utzEGjUXpZcsFv2yv7tvkt9qgPe3+iprX6oXeTJKDKCkrTIZjGmXZhMpx11kfVTzmex5GnJVVMdrZ3ZVNpFeBFmS5dCZaT7YAieGw+aiToTtUqlcHgm2YRDZPD6wrt5WRPq2XK6EQR4QW97nyKgUs+SYo3KBGww2Xdlp18emwTV2MRZgAi4WGMHzZpASg9kHNpsrDubxq+aWSaqr86u0hyWqUGj5mqcxJTIRqf0vgLcp5BFngpbtA/JUJ7asoDXEm9IDtB0s9smybketrPH+bSYWMTR/k45FWOloxip8VisOLKdH2G5xc99LZlCs8QXVEbPn44Oqam30FsE+oykj9JAHAiEbA8IQy6kH4zVmELTaD4LMq/yV7UGYgaQrN0d3WJNDRuYMHd9ayvUbeQKEwo334ybMQZCgyU/vkUUUFO0Bs57lfO4NnaHB4fLCoFRwRyGAM/VCz5Fhwn25s0bvAra8zfzmpTJ0yY+8RSlYMCdRMpO4MjE3dVF+PAWj0+KgRwY9lDrmt0kM70KlLVJdu/QbRWXWeY4ppZm2qPe2qwee2RXSxszXgYS+gPhuU/ARRQn46tD1SKVgHFVN3dal0WoLSa3JiMjPoIHh0G207IMyGMnhoaLSrjfuQhTxvYOf6LhQWX3bJUaeHV1cuqIt24RjxNWYVEVWKIDiPyxs91l2oL0YBhBLszc19saG6LVwVkahU85lmiuQP/oWlm7uRAax/M7bZSmUEJGq8ePBgeqv3+Z9wMm9sukRlalrsr9Dr+zqERMaNBMlRnfAFciwQaQFkWdHS1XPnjXaRFTAkTeuH6LuPIH//B/Oz45NdA/1tHZ853vfO/02UfYyxAm2OGEujZzLHVomILVUpN72YUPP7h88tQxp9HQ0rvvvrffsnFkahz2ZjanCXXIFUn3dHbxRWt8kXQxAqKywUCwWEWsW1yodxt5G/vb4T5FQQDKSDGOWKysjwzbv+q2LOQKenF2luhneiNO2sCgUUUwiMHi0A2wVi1s5ck207MzDohHFGYktht50jFL2zxHR4/9wR/855gittBRTnKjT+SK0ujHGdjZP2ILxKbNksa+gZI9SJekB29UtBlZ2xskKWMDqbPLhmEHVfDbzHh7ToeuaKHE2CpGPTNjIjZge50EZlCj7eS9akVNfUy5akDB9vTd6R/98CcWMEaT4QB7Pb199uK+//3vE+6NSmg3G7PklwaFORZsVj916ozVlAR6jUt6zbSlA4qO/p72DXtfsx1nTk5NjAwVgZhQZIOm5drV9xYXRozhUydPZF7ZcYh76Patu2sbq5c+uOywInuk46eOHTs55d4Ags780ryOn7tze9hKbWCgu8vZo/YnnzyHF+AU1gmM51bWVv73/+3/EVjuFjjz6NlLH3yYEwnd7cdGnMfvdkc0FbmBR60x1tFhNGM03M90QHtbz8aOTndAxxkOpz6WoyTqbLt99+35hVlKz5Gx4cH+IVsweDZxn06k2H3OfXj1cg67IivOm1rcHDyGYw/Tjk6M3717G4+wnHz++Wed2nYhF/i3Nmn5bWzZY+i6d+/+7PSc7iPqff9HP3z+2aedip2evT/zwdzZM2eOnjyBJu/PzfN0OjI2ETp0QaOjl7YgDaMYRHa86CDZiy8iGgOJM12GlTrAas+1KVeu29lYvn39+v3bd1QHJ9iiZQDDyq985Sv4FE3t3Px8GHEYaXuuLGlpOTpxpG9gcMMxJUy/py/bjg5pteyvsKnqyI2GxqdtcLIjAACEWqtEFH1UmeET8JhYfcntzqFRnk03tvZG7PbxhxeVEjuozC+mKqwAQ0virATCs8LeFKWcttaNnH2KLFhymPlp5so8RqW8vz88vj8chUj4tRRtrOgWZy2eL138oG97gzza1jvmSPvWxkpXj10/0Nt3JdGSNpxPCFyZN8sU7l0EOdVGaJcgA3I3AzLSRb7moZ4zmA3FKA/Kik6rDUVbuYExbK2wOODGk4zhmhlaQ7yLjARYHDraRDF4YPJUtiitDcoeQGFQPe09XdYxbRyu9lpqdPK/WiBVnNFdTgiqSJl00wY4cINOn4JCs1lMhMzbEgeCvGsKjapQYhNgzbtAADNK+/hDHBFZUbSt15XrMXsS7vfZnjp+1LbT1mle2uG5Yn3DIsFaRnpPlh6dXX1dg/awJ48/ohxVQRo6xDLY3Npjv3Lp0s5WFuc4AOsv/Sif8mnbsC2FeUdEjimCh/u2yBkQiDf5zdSIERr2pwvUmGm89JRGwrtFpWWOViqk8T5oIUhKML2TWdK7/Jee4Yevp3+ZV+OpKXrQHldoO+OM16C8bfbYXFa0FdNo+MjfFOFp/G380nUlNhO8b7q6BMi1Zu0QfKr8pd4ZJJ5Pe4eYak2lSVbJRYhMHPzUZqYzeKgsnjrhzbB98IlUUB7pJUYePnmqJOSnXMQ1gVTSSjdpV7qjOLqLKiOjtzzw39HTq+vIUe4y//DqDTesjwwP7rtuJuWFzFKPPo3AnP2lGMqXyckkHNcBEGQA6MCsTUPVJM4Mp1ApgZjBDWm53bRE3/vIo+dv3bn5xNNPuLXSWrazt4sZsb7pHujJsbH2FkfrqGAczWpbKjJ1NCb8W/fsbLdubrWu32eQSQmd2RFpmSaPjE+iMEe9lnpXO7sH2MMhMlNSLiJAH0oMonValqah+S0n8xJEblwflYaURaex4kfkb/gsDUeHRui+q1Scv3ectPvu9IwhhBFFcDdYMrzS+pBQWVnJG0ylhHDDhvhWSMbkApPp8zLWYVA41B49TIPkDgDIT9sO3oUa6xq6fEzJia6eJUuo/GIiiKt3kQx21zZpJ4HRbtNO7+H58zPzI4Mjq64QouDiqnw/rjz5BzDkWUg79UNSoR2nS+KKhF6GTIGVmpWsB1j/2ou5dvUKdRu9oyuLlpfmV5YXzOOIBBqfvPB4SKi91V46cQTiIGVhQVt3+cq758TR1qaLO8ni2A85XEYBMiDLqqOnTqsiK4dek3AHZrKwQD84eOfmrWgfNhhpHFleWiDK0KWS+822jX1IPl6LpkzjRSJ19aJ8D4lcgR61oH/xArR1eLjzi5Sg5HgNIejQG1IG21UfHcy6kcvklp3Wvv6RlGm5tO1QQXt0yBur7Aowq5m5afR2//7dAo8lipMD8SOuCohm68s48u7VWzQpDr3rbhpt44GObmNtaW93s79XLaxcxrd23RTWvrOxNtjfQ59iht2kcXMgmBmw+5vZRBSddE7Rt3bavqcl1pvspsuSIN19+KlUezimET4gyE/49ElRZZqp3Ar1ILKDd6gYDxSRt24NTTJp7srpjo21neGB0Rdf+MLli+98cPGbj5499corn8d77k3Pfv2vvvX3//7/ur+n4/S5Ez/80Xc+/4Wv8Ba7tbPO4T1Jhobz7Xd+ypj+d3/3tx2zWVi6s7B0i+z3/oc/MSlY6ff0hv7PPnqesNfd0ctrY29379LC2shQDKsy1eMvgVO/WXKTTbje32Lltr27kSmjo5WRNmSahfjnvXetbWF6sd8lC/ttU8PD22trR8bHmPU7Dk6H6qTr2OgIm7ZLH36AN87MTts74uTr9KmT+pGycm5h9ubtGxwtkkIsg19++XN/+qd/ujC3aDGJ/MAzMebm6HGirM0Np0M///mXfvzjHw+O9DGPEMNA3XJ7YGBQ4qFhTufHj/VOYVP4hlo0FZdkUaJAW0/GSOh5NydJCHsY+NGp8XByFhSxS4rNjzsJrEot0u2pOlx041bkVb7ebVi1tHWyAx8bYzmy+857rqH62Z3phfn5JbMhLTyDcAsJUgV53hBw9wLm4/D8zZtO8Ny1j+cCsrNnH7UR4oKgNidRed/k+350dGh7aw3XMAAA9+abPzMYuXZ1UREh2LXP1ihx6bO92/lU+9FjR0gLTMS0lsilJmOedEvkpd009hhl2Sdw6pfuwdr68rWrbh989PxjR4+dkvj8Y08yKHrigitsW2yB2N+x8D5+4tTq+tbASGYje3hWaSfPnLO0oLqcHJuI7sisg5PutdraW5hjFLb05us/vG1RcvcuNbyLKmBQXvBXTqQV2I1I8kHYXG8v566+YhZf/vKX6N0vPHGesUvxYbp06+alH3wntpKxe4t9Hlc27oQ7T+107VqbKkyTCmQ9gSlQgzBro8QfGZ9YXqIzwG6oFTYGh3oNDNKSrgq8mZSzkmXVI4bENDQ6cqSn75FHz728+wptxsjA4O0bN1ho5cBKORp1+9atP/+zP7PxYqPHfpM9Kc1kGfXY+XMasrG6gb1nIubyjDOHzQ3OLfa7wigjRBJbM/fgKdHQlpFcoCjnO3lc8jVzWpSoHUwlygSJTuQsin7L43ySM/MPTALffx4IyR+R2EY+kPpSPgVcUid5SZc4pUWIyuMvnpYT8CUFLwr9Q4x923pGaaePHZ1kla7fter+3TtEgnh8XV3kw57jYbeYMZ7T3wRhy23txSoidIK0nQcjXLedbwfSCUZlJaBrPO7mNKKMH63Isrsjl28DRJcFHJ3hT+RW3Zs/XDtrSmTaWJgWyYYkyftB8RlXRAqNgDGZYU+f4t5pTO1c7Ypxjib7B6wkIyZAaISl/Ipokj/Bjne6xv/uS8r+YJQsyLo8SVa81KmooKt60migPcTz8SdCbbrDl/IuvZukgIxY7QPwIM7bUkQkUJFBs8ZmwBUrwnqZeNc7QNk6PGrA7e08+dRz2aG0JFhhG2hi5WLPCnbNwR4imi2QnfWsCtSTvScLTyqacp+LuRlTw+b0BcI2Hgv4cBtBR7vBhlAIxEIP3mlJpoTQc576LqTlBzVppoOy4qutzq4TjzSJzHoqfSWxQNAVnCSrqmoJD8qsMJc5zyRTpP/ApZAGwjPpBLmNd8V/+dUg7RpGNLXoh96H00ccLI89SSotJlZ14YqGgrNi6kCWPWhyDDSRq+6ofLjmrW+RAlIS1GQsslCuapHSg2dGJDVPFoyEkLKcDOOUxnrVhDkwOvH085/pHzt28TLj1PWN5fkWBuN2paLM97b6ptvfo4IKsgopUunRqFIy21Gwjx/2Qa0peTYNhDMqNAVcCJu4qXob9EU866IoLawiluvAUIWXRhiY9COtu6zS+WHW2bGdTf721i637jABsGveTfknR+yXHB0Vtd/djRhpaNo6V+12GbNDFt5ZFuXQoPlC6UZhqBjFp2fSpoxRBBLEhOAOnlBIRkpSZcQFUaWnkrg8JWVjgddYQBbiTPxBn5Y0D15lNdSgEM3UUymtQX41WSXOSopw0QhIC/gGt31Q3kdChYygXJbaDOgRzj+K80gzPb3rSwvoB/lpASoaZUUQU3tSnCVzBiMfFJk44lN8iMLLfWGsSc2PkslFx69KGaG00CbwcSwm0Tm5y0t+7CvKdb8oQX3siXS3BWdhtiFFPFk5dc7FgJCoaVeMqi3Z5u+yPholf5iXqb2oaaryS0b1Uqil3lbydLSbQJLMNhPK1vvKYYkBm2KURmhD84QzlGUHAy17U/mLHBobH3QsOObOndqs7S6icsDX+AicXbCVswomcfMlPqZqY4mWUO1OGqr013/919XO9EWrtQX7AiF7tnfev9g3NKynlGO9gUSdq2eizEEKeY11mg2M1SXa0px7tdnS0tvpdBV8gpOaDV1vo4bC3ABQp8nwLMF/s8d89Cs9QM9Tc33qGzzIAUc1poynnY2dhbV1btAXlpb7egcn3VnZ2n7mzEnqhkcfO3/3/v2+Fb6Sbj/z3NOOl7kudnrmflwLbm08/sS57Z2Nb337GzSeo2NDp06dmJm9u7a+uLW0YaXNt4ulU/GWtOkUOmuDlcW13c0W4ubGVvYTywA28Ucr40H/zKoMGV3c09e5vLbIeJVqDJc6OjopARmPRqK3o4fDxp31RXqAq4sz5izNQU56QZeR+k6fPMUoo3M7Um62HXCm4pTFQsK9THiXrmdbPjjQ9+UvvWJ1XW7CjXGOfTbEMD489OyTT+Fva0vLv/W3f0MZrGmPHT/KJhyJEm75ESa2sV8Z4TPKBVPr25ajLm9CAmzt6liwikBxxh+Sc/UvTE5NTcKqLTUjnOUVsdG254nTZ3Mj114sX0gsqNFMgc/xlEM5fuv2fYP02rXrpFOshoOczbVVXBpxMpbUy+Y08KB/IGksJLz44otf/epXrV7g0CDq+OpXf/1HP/oRjnDjxvWYqq+sXHjycYcGGK7gBdTPTINsVVReYBhwXwpuvHZhbnZ4ZIgDAULb++9eZpflnAsnm3xrORKOucC19YBxu3R/Sck8DNy9N808RkvcYjg0MoYCrELYIN2/d8d8sHD33rnxIyaf/iJKRC7SD0aMHeIyOovkYERbUHT3Fr0Fo4XHHj/DCiJ8bXXVpIjOrG+ghvtLmIU4eFGCkhjqwcXRqUmk6ecrL30GhPyK0oXgGyenJm1VzfV37+wcIaHKizP3DwyzaW9t775+/SrcEX8spxxY8RXSUNLg4CjMOPrFHOjJJ5/KgHY3K4cM+3HladkD6dxvIC93D6vdxiwyta6AH/zaihCK7EX8R7/3uwgLhBritLTV5K3bN2bn5967+K5j3S+++AIF7PvfvTg6MvLc00/xibW2vkz/Q/I0iTKZYzBn2tNST20yaZROxIKAMT/5uOKSFsteAWCMJi+JvTP5JuB8XxVQ6/eMNyGISqgsAIQ9yvcW46t3M9wMJDXSKyoigRRXnoRb9kw/FrV00u3xknUs+jIUvbt9/qnnbK5GpFx3HAuNLFE7w4l1HRSaGOwyWVaZMKKH3tlZ3iZ3apr+jZflPI6GdEcb5GoHUgWUaLdTybpvZMRubSZFQ4vwVeiCs46sFc1G2lTmOxpGgg2hpgiMkpJ6igAomTm2NrDiQ4N8FVMiswSATZiVh9SRGTPyUJqdRhdBPOGIAolOXv8fvEuoEWGuKF/yamQvv9PBn/TE3K48aVukEucLk1Fx3vWp+Q6HP16SryJLIQ1CQthQywdbvGoNjE4eOb7/iHmdpi8TG3tHB8FxsbnZ7CpiEZZg8OeYsXNduys5kGRQe1mS0R8j7NrcTH+RulKdB9HVQN5VuioR+HyJr4JOIw05rUTia9ERVGoHs7FZr6Mg6eVffSLWmVlLjkx7dbbTkzWQ+ipI6aPS596ekuHh179BfDPLg8ABOYmB8GJQwmwAQSLbWE5TktrWhJU6NtMFrVlHhYvgGkZKGX2yYyBajbN5Cqr9gm4STMTYoh+AosjqGpfqFEq06owV/ZnTZ91myiEOhrM6P22jOXvZ/DowacjRc93A780Gg4u4dss2fFbavdTI9gkBgcicNqHhzPHJoMuaC8CGU+T1Qv3ZXy7klPka+0mZZccgwYg7BrjBziyC4ztWaxE2dq3C93oHyGbMfw0pLqUp/MLDXdBpRhHa3tucn7l19851PM9eMWXK5hqFrMpjppZBagwKR0nQ7NOgAEqS4tAYSqfIULrc2zLUCgJrywD+Gz8amPL/PT7mvsnRYZ0TiXlrk1bLSMy6nRPtchjDFI8AhAkuwGMNWzXc0GtiCvss8TinoUpwj/Pz9tAeIlEs/VRGWWus4aWUizUvC/zR8VF2umK0Vy8Uesxsq0B12ZGWMpxidRV10SyoWjxly+LcPHHCFEzWJ6CgZ7WErkBILVlOgICZop1SlErH22ZC9y4Pp+0UpxRqhCozMhWYeY3Fdr81A6uDsgcFntTCRV2xDuLJcI0lhyG2G8CAVDV0esmmtEWv6sDs7ZEAqFBXO1GLfAKJOckCA8BlmZ0VVf9whgzVMh/ZC6vLjk1WCgwCw/OzglJIHb9A8ohx9tqOmvgy8YYqlQ/agpl/rzSj0o8/tdXiSyDKiD4e+9v32TMzxkEM586dYzFx+uTxGzeu1cSOln7/+z+8fOXaD3/06itf/OqJ4yfdRAtj3/zmj60Kjh2fwhQcIdC7VNGzM4vI0CyRU5H9ex0940Oj1vBccvHsueFeMGdvHL2mc6q7jtxAhovlJLBZg6HXMi3G7pLl3/6d6dtwqN9ZYluG8RI5e+/uzuqilTxD1tl715cXZ13Z5JZbxyZ1q7WrR+/oRCJis3e0Ap14sFIOZRYXsvHFteM777xDcEWBzz77rMRWy7aniJcogX4dS+R06Oa164YMR0TkKEdmsWnnQknfuDqHmbOzC5wXdfcMOLCEOWOm9rgYpfFySdHC+a7TONTXbvV67tkXWK9RvPGH40K79z+4ODMdS7yfvPF/KZNCdtGpmDPu5pcQpw0Tbwse0qy9MV4xNYo7Ucf7nKcnmtLjE0GZWh2ZinsYDZHXFGGwGzWawCCfBG4f5K5D2cbn9Mwd214kfsP8zh3X0N5jsfbY4+dsY928eSse9jPpGuE5pE1pTls70eZy8VGT0bKjhCsrCF2tri47c+YsnOZS6JYWjMlxazFEfzeos2FirtXTl0sfNA+amHJAjQsfbDIwVFpaZWMzf/HixQ8ufajAc2cfffLJJ8fGxzTSGYSwJFZZxcsNG4zRgd6N1UXaflsQ+szuDIMnDp6sk6AAsermuHYqor81353bNy02NlYWeXHqjOnB1uy9BR156viURdjJYy66HrAeNebZUAJviEnZSRsAR1C8wukGjOH3L76n/NmZeOU3kRnqPN+oxeUL8n72pRdwRuZo0F0kSW6Ycy753vSMiJMnLL1O2Q825vXf9N07ZvbozFrDdkHoDcPKpPLXtW6kU4ttJrMwPMDqpatXbK3cuH27s2eAGO1rHD63rA8MjkTqK8pdXCQ2LVFdhSn7ZeqzIjAO2YuUvfoM7yQPOzb3mjjNypkeE1+eypWaDEIc+EU2HzHN9CLrzxrjXZM1IxsJyH4dXdstHSvbe61YwEYundA0fuoDbxtDKAAcjYKRPrLM/bZoKXlRijtHoN3qyFkJu67omHqGWtpZVrLLyrrpbc2K1/4dmztGpPSsm+XsGTRs8gdbJj9NJnW1d0ugwuwl2WkpWsZw3sgQIC7tAjBkBnMKLQy6ii42cSAqiSCtPNQP4kp6iRWiDDKOYArLSqyIRH4n1wHSSr8kfS08ofKYMNN7RDgIKVsENRyzFjE1/uBdclQRORKYsotQGQAIcGI80tR6G+8IuwGu+VQAMDgBXQxRtaNrgpiE5G6HLKQ9ptfO/h7diJ7IpSdPI0CngZBt/DJYPi0uzDAfYmtoXR3itCSwqbnF0x+EV0zCZtDaREUTksOAMe/6eHx0tOWQcQEyruiBShpg6t6yl32e2oQIogdhGz2pLD0oUsPz6+ARrjEZADWywnaQ4MHfh7qp+eEXxtcEB+/oAqmiq6hBowNpOKEHNjSHuOwRjjBUlgWud9CdwXy53hv/EdBZ1c5NvPRSeoJtti7FdA1TTTnNxrY60sprjYER4yISM355/vzjoW3Kj9V4YpmdneaJwcJOnB53IaMuwwnLQeFoST1ML3OwrT5ZZ1j0oncDiDK118XUxgw8WyGYrgweIIAwTcvfBGL1Rdhnc+9e9tHhod6O1WFWIxZ0LCfD+qJDLfIlQ1sSgKWP+hijmzXQmJuAZmbn1lmnrG1YCZS1ZY+qiQBRD0dV5GHwpolOGAgXSUt7yhA2toSAWEZhga+EfNXvcKhlehaciSkd0ezoXz5Qs3t7fvlcf8OUgNd8qAM2oQ0BICGB+elpmPFUypHGlCDx0PColPrdFGnTz8G2nG3r67OpIpe5Kc/aJlmB8ar0EutBM4BioZXkYf1AqHL+0U/AS6O9yjfepBFIAWtryNUJBEYOCj8yNfHBpYvKN9NRSTYBlrEKZPTnkpGYxMhrrr87XQ8b6N1+RQFDPHHFI7t2TR0c8SwCXM47ghMwoddiGlRhA6q8NYuUBkuwxFRymzOZ4N5P8wsCUDL4lSO9eG+PryR+jkgZUfQODq1t59yz0kzV2qul6kJBGSU7O+4NENOxuMSDJA+KFLYKBLzSCmxbnd0hwjoiavkoJejNuTXBf4dk8/MLBwwggdAMlCbqUJ5dukh958+dnRgfZsd/8b13aPpph0+ePH3pyg0LNGRAVCI0371z76WXP0fm+bt/9z/hhP70meN/+Zff0Ny3fvYeuZmgTzq3c0K/ZyEw3L3PloTnH1XQ5zpX4i61pbUFs6oNfgsoKjsqA1wGq8ndNW37oyODmztOOm2R72nK9/Y5m9y/tbw8O33HxEgYsBIkBuxvjzCz7xvsRXuEQyShafqFqKY3LWNQGkrQ4yjKIzL7nwwrtrJlJMs3v/nN3/3d32WxI5kNASb1UxOTKB8tKQ0JsYgDXjGZ4fBwn7rEgLIaJHYbO24hWFrbiNuXiSPuErYajaHd2urs9H2UpBwMxhw6NDhm24FYzjvqakdca5KKZUehmP5nnv+MM/1UbCirjrjJiSmQwwgRCK3qqaIayogTfuappyv3qlK+JmuLvDUxoxukCGDN1F9Q0cFLkZG/vbna0bZ39/Z91l0rSyaD2cH+bppuTvQJSRy4Kp0YbVHC//7OlkMG22MspbYo7/n5mfjMiy8Sf8kOp0+dIbHZVbl39zaLJNQ0u8DRWDtLzZt3btMQfublz588fYq7qJsL151eWFhccrzZ4QwGjZcuX//Lb373/IULR6amPvu5l1586SVDIvsgHAHduHnyxGnr+7AA6kfu6JeyDKI5HqOQKM4K/NRa8yJdAr5gfMpelRyAr+O/bB/fv3PrlguTyZMb6yumPVqKSx+2feYznzGHOKDO0CG8Mnflbi3Oz99870rfAPed8UyqZjsAVPIWA3/x519X5vDwOJCYU/r6wx/+yKrpyrXLw6NDrHekNGvDPprQf7wo4Cm8rtTNGoAxEfOmXXHfhP0KWn8pCf1nz54Bv65V5o9//Cp51/q1zvcTE+Njo8Mrq+sDjsF19fHYaRJ1bXRrp8ueMrNBeJnfBGyjFy5D6xVzFI8/5CdSbwT+KsujWh/QDUL2p8hKSeqpXKDJC6Spj08C9X34a/Iceg6naUYbxjZv7Lbud/Rst3ZtukysxYkBTDQ3aCgtTgkd88y2hB4wMbkBNwq+AYcTyqRsUkPBGK3ONXiIuTazMRSom52LBPPhxfcJMZaRpiq6gZEsUHfFdGdLRFxmshyyx0t2XFq+3etwkyVQmapjPpUnnEJ1GiqApzQYMpS1tNktBqfHJwV6BKTNWkHWooWMEj5ZSz7CTkygSi6vEuddS5CjlJTEHtJtpvCE9EW6TyBhgSApz+G3nxRYiTx4pMp/5ZZWKKrRhxM0ADuotQCQIvGImhhf8Ij3qJVHr8hF9lkdr2Smki2XlE9cw53txLJ6ZA1b1g6QwU/HWX2Eehn1rjsBvjR/++bNu/duOx2etofuABwdcJCUNUHgj4I4TwkXxSwYSkxtbgmCJtZkDScvoqpAQDjBoHmgRV0gCNg5uOwvbk7P4p74YPag8IOi6rTf+HWAVonSoR+ptJnkEwOVAD7x0ydGmjnSSDOH9gfePCKjGdrcrGyNmgP0ItHDgNMmmGDhYGhDwE9dgCt6VyzVQkp/kcOsAQyZrNtQgkgCPyRLTPCnTLI2ZYFqHT7Vy/90p8Ubs7vhkTmHo1wug0XhnBZyU0enDC47PVCSscjx9v4aTazhF/Qo2xiN0iAyfeyFu7pxF8eQyi7Ejh1t6tLYaMRZD4AdyGLxQ80Plih9jHRr/8GBno5WTkBzgYUz7GZIlIX6osdv36eC3tnf0uND/a5w2Wjp2mkf6uzpHOnt3Lt1Z2N+/u7s/Vsd3QMsK2JdjmnHIBDyGH7wc/9o+153W5DHBrFQg5bntojioBPplU4O0lAlOjxY+uoc2hPxHkT6iZ34cyJD1xk4jSd0Xp5KggfR//b/mox0MRIy1xh7TDnZqyIhE4q5w4QCKiJOmGchcpQmbE438AeG4u5PYj8NXIMXdfmJEsyq0No72H9k8qj0pjAzmkFGyuGIk9dz60Gim5KVb7GIWKxcgXH0yMRC6/7q4sLiAj1priBQIMElh/G6cgwAVji6AJv9AUAi09Bz/MfmwLcCAaZGcpLSXbYDJORqVj12PHsXMFgHgmSgUiDjCjAYS0qu+FWglSVdqzQbi2lvf//2VlmxgEckHsCdp3dtPhKqAwqopD1SkHmZIAUYBaa01hZqYPqj1jVXDWwjZuXgXLDkq1yqyMG0bd7Gs7b3C8xhmkXDTQXuXgkjW2I0V+BngaRDDhj1A8L5t08hv0yJUFep9yDA/ZKF3Kot+BwLWVzhrb+nu+P6lcsUrDDASvzGje8PDI2cPHXmkUfOsvGen0cgy9/9zvdwYd364YcXn332aQPi7CPnr165TrS15X7pw+vEXITa1df/la89FnF2t2V9i1IfC5EEGuNinweNTMNlLi0jFEu0SJubmJrYwth3NxYWp0fH+u7dnF6aW9xaZaw+88jRY2tz9zAxCwxmLKdPHn3r3bfJBhT/uqOOcVSt1yqnRfDA8BMMSMtywgFXghJiI33N3J8eHx1DAPY6XnzuWSVAhb5DYxIgOYTBgM0EJwy42ijWR1azbqcFYs6ajoxixaxnWQgr886NGxiuBYC2hMG3OBY8SXPvJDlVGg9dJEHcEvu6cKEXjaLMscmYCSFy4wMMFdoPLl6y/Y4+YVuxZZhzMjkMkmJ7lrs13HRH8S+97Ny1CxBcIYEci2J1NHuZDlsqr7/+E6VwqM+85dhxV+Ad/Q9/57cI9J1dFFEb3O0cPXpCHZgI3fN3v/1D12gs7G1Y/C4szkNcNnN3tix64BRGLK2uXbuhssuXrz7z7LPqYwVEc+PIFwv1xZXVm7fv6IMPr1x94YUXDGcjPFuEvPNsWjvsOvHgpo0hE459p7bOLPtWHXDdFL22OF+al6FL58hOxP98HbmlHR9RkXgdo1M9QZylV7nPHJD1Jz3R2vLYqZPH3IcKWSKnJsblcu5bN0eKnJujVNZnIxMTWOrCYhZqukkJ0pN4NNAe0JtvvilXHSRGuE9OlGObs/PHHBG2zwKf2AetKHLJqRAunJaXpcdioFFAd7pckKTi1kZrZeXz0qpXlI9ZIUpL2GpldPbsOeo6A9NSGwDOadnXxIZau/uWbt4GtgVA7+Bw/8AIYlKy/83+BkxMLYimsZgOQ2RIR+Qo85A/2Ky0ReVvugv/IfN9hEVURlDfyVY+S+cJ/zqIEV+fZuaaxrsZ8yBxy/4i98ldznPvdmaJQk9fzmnumxuGwns4EYppzp5vzkqCfHttg0zAU5RKNT+7w2SA3lYmQYSK3i4Hv1smpk6focnxbG/81u+0OeBm5/HKlcuXL31w7/4tGDXlcPpMHIx5cMQp5xLNNXV24DTaNm2GIjjLGkrrqLuyMABRFdmjeI6ux/9aZkSndb7mf7oxPz+KvfRC/XTY7OAQRozJ+uujiNIXEfRTZsmealJ4o3NqJYfftJwHH5PK3Cw3aoEuj8LrU4op6tgk+ISuMXxq+voulXu1oupWBy5yNCD+g5WWvldER6Z8OHXoXV748RPGEBlhtX+op8+loS30ZKsx9uM164MPOCuPqFVXNJpXYDL/ZXnaaF8puqBSRfXH4bdU4gFTFmkRf/WZTmKastm6KiUYAkxqKQ9xM/Jes/wSLiUWaBVn4Zbqy7uZ8EGykvbnv35x4lJXLVwLsr1FUDDSodonPEEAVdaZCWEM9MeiGmOhv3aLud6snahpviJzAU+aX3pN0QUtqLvN4Im8LYtBal5tIJY3qm7MJUhpazUNuFvTzTq0oONjR8SdtSVaDClxYlwIC3Jxe4yhFzjeyHWQeXr5jex3Ni5I0+FWtpFjLOHRRTT7lgGuOzIqfeWYYq1cT2McIRlDWSo5DLksz1r23CnDiHR/q3NteYZb6p2N3A3U3cOv37ZFhJFGB+OYEFMWO7Sd7UW/5cjm1jYDqdHB3jaHiXraTRqrW3F3ySE89zYkfNvsTIiYcVCaRONRCAZ6tBGoZQMgyIQxMRlYjW2pkA3cetfRHa1jA3U/v/c/4Wst/xM+/DuO0nEmDo/LWKoLb6Q1wat9OY7vq9YBAbF5dDcCM9dLY/kEG+4QJU/EtqG4xjbjm9dkMZxNlCvLazRr0isBnw2vdRzOPJsTrrk0E/Zi8VfcmSNvU6R6zehqUZTypUHJ5nozp7CpmbpA5eZ0abiVVKBiA6dd3+INdnBkeGg4DkWq/qvC760uBUrvUZS3EkyyINevYogiZlhFCcdhxvb2xMQRbE9e1bFAFgNIjAQ3K1I7fwndQAIz4cGs+tZbb5ElJFM1PHgMSdCan3j6tgBVjjndgohsIVe2ExgvOSfTEvso42Fta811FnRMvkI4qlAa/Ah40GTpB/VnloE5g6S6sKszzr8jYvk5hQNDpWBrBvy0ncvugo6HK4irVy63tp5yYvKdd39KjrfNC8nO3vzt3/oPT548xSXJt771148/fmx8bAJmqJWp0q2jsJHJiWPf+Po3r1+/8cSFx04cf2R+bplshlA393Z4ZGVdZmwePXr89Ikz7FuolQib9vRZ4lcUgSdr8lxOSY/E/eX85asXLeuuXvlg6sio0+r+7aKCLV7IGQSQ41hqdNjTMcvjdahXj+hlxSAHjdKbJD1CFGFMv/ukr32Sin6WupDcDA9UvQaF7HrtW9/6loASpNR5VR42DZ0+fUL/kv7JwOifxO98ia8ECrb7ljGIFTslDdpKk91tUXzqKAp0qJ3RHGK2HyYBkKwc0JUCleCJNSQmf+lDkYiHvxFZbJ1RFsclZlab21Zi7lqGbYTqTA7zvzo2NRlLhmdqfk0zeBWl4QaFR1gb6anDvG/emrbELUJDy/e+9x0A2ccJrNYjc/PwpXRoYgjFgP7JJ84/+uhjN27cEHPx4nuKqIPt6ImT4F5bjVkSiRYQ2UnuwKOzcGe8LZ5yyNDCZfixOffoYy4nN1u89dY7b/30Z/LO3p8+eeb04xee6XZ+ubWNnru11XFvVqsDR44ddw+XxYrZpHsr82UUoib7nd1hSOrK1qcOy8A7eCxuYFDVaFRDbty+5d5pKx/GH5wXKfP2nagfbCogAjZJmII9KKfNRkYnbBzTFMd1Rff+1Mjg/ZkFBC2ZGRkGOdeATYoNlZq2YdMZAFzDGoANO6f+CsETUZLu9JUiADaMFmHemgBYHeUKgNCVhpZMGKtdBmShU21KQKkSvvTlX1OFhpBvrGjv3Z9BSfE9OjSIZQ+NOfXirF5Xb3v38Pg4Tha0mGThgJBWrIzMz42JTmVhOtgNuTNKr5iXRMwNY8r/GfhR6ul3eSoWEyxPDSSFxDVN0uVryKwE6lsCkSVhAg89dLRRx5Wb15CgThfOWl9PIhdwxX2OYuWlJcxiZmAky1+jyxvXN0dzwWct09HTT6Eili6fZpF9BPtPdGPK6R0YPXrikVOPPE5ztfrajtsbnn76yYnJMcv31VxknAeGrdQ3t5c7WnEHjIVsFKidTy4WFq02izQOvlAZwHRahJyoMK1K2CdrB2kG4GmijMScsuVSSinYJFuIhxbvJh7qT294Oxxfw94IoJm4GRBf0duMaQbMHPVT8136jNvQhvRfUyrB08z18YDuqJHQLFC7NbC3ZzveX2K6TxlisZotN0QWOxMoQEBu6Akt5UZSLtRzDsZ98XSS9PVtfAe7/SVHZWx5puz0bqHWovkq57saoMF342mSXn439gdCGoZ96Lw86AdJK9UwSSSPKOmQggmvAl7wnOyVMzzgDxpWyijYCsHXQKr4FZ9PzVB7RGkPAqQNS9wSE8DKStIbY8EiNIHpPD6DLdSZydhwt1HhzJGtJPCUVkdqKV0awmiWry7JyvInQhL9pxh9Q5lWwCj7a3FN2+3cnFr5Qp6bX84Z21hd9/QPqt8+J9XU9tjEFOcKfEDhY+aPTYJ2Rt+2ZYPFQiGQwC8fmRsbNHy723sweYW528Ymg9vSsT5jKxs3hoc5vDQ8vR9ViFlze5WfiJWl3mzSkPrWd1YoR7OIlMO1tp2t5DkethwSaHcNKOta+loN55OIX+yx4RHDcHOfRbjRyl8A9VG2IPi14vOWWygeroKNYAcp1GrTzyLqUCiLP/F5cLFsGBH7Dy3vk+lv8DRHXAl8Kp38DWp4kBVVqMXb3NTqaiBeaRzhcKevPitSMgLzNTFlPbCwuGxylBix6UYsEa6E4+Z8oA/5oc9i1hdBv4r4qNFAUwgFin/qlob9n3UqRbH5XtdITFvgTMD04iKtJLoy69mYLaVRFTAcGAMRu38YN5kqGVljxxSb+gVIJmXGzt6kCOCp3pgn6fBcpAnSKEpFIETheVA6zz8bm/w5MiKZn5s1HYDTwzZYFYpiIyaRsVOnRZnskHTYkWptHR8d0Q6JQa58pK5wP+nj/NRGco4m+0oIM8vfvX+Pf5KlNSdgOA/NWQUgMaLbXLPr0mbVym08w5i7M/Om+bPnH5NLQ+DWA3IlywKScE0cqzB2bcqxiBDlAwb1oGv/fYUqMGprBsADUGPcyvzSB1eoli2OVhfn0Qmnk1/60pdodv7h//J/tbq2aX319W98k3r3zOlzFLtwgm98+9vfVpQzk2iAuPnMMy+cOXMKJp95+kVv7iQ+uHixvat/cWXDnv/6ysapY4+YXohj3jrC1RXdpl1sg18SE66NzH17lf0rqwsX33u7u69jZvo2NzSuAD42Nd7X1fc+uxmLro4WPoImpybn7t3mCAMJWdOqDgz6XQ/rBT3wzDNPoT3xQOWlVkuRuZ9PPfmkqknVHpHf/e53relQEUsDIgTVsHIID4iEKwKypdmLbEaMlnd6F67Cw7U6Cp3NLULs8to6WyYCMLNwnqbIhHUlia5wT7ncgGWDgiBt/2uC96jxceRhPKITSAMzofH9a+9F6O/uNnyozHi7Pz7lRoJJo4BpiYBeW1qYW122zRpb25C65e4uS85Be2CGVaVtB4OYkHR0qGTcMEwtRvtTT9E9b968dR11OgHsugWNhDjTkhRqdYoCHOxPhrgBHb05PNS3MjZobff+++8y5oOOYydP0Iur1/KIPxyfnA0k1DLlJ626JIvHIrfo8T9q1XXu/KOwY6fW2HBXrt2Q8+c3ofiNV39iG4FjOFMKCbazhaFcxIfdljTg/vQ05qX9kGtrDeIETBz2KSvfqXzBW2IwG3W6VjK5SNikc8myg9OyNz83o2sZde2uOJKatREHcKtzS5b0+oZK9e7C/e65eQcSRiePElcpM6X36e23f4abjE+MacXy0grsW+YgI/OLFdFTTz1tMUJTMjgSX3h6BQcEjJN7CEXAIs9i19vE4w1vRMiVstto8ac5FlohNUqS9XVnAKTRrzJaA0jseINue/zCBY3iJce7bh0K6KasB2LdA3NcG/uHMUVTl335yDpR2WWJVCfASAWJLnKbmRn3CXsCQ+U2UPdQwE9f6yMsgfTeIbXys6avybwRTI1pZhGwAODcQacS+EnYm2trINNbmCO9aJEKsxqRscgukdtW1qM3SiH8pUWHR/o0V9MjZlvWEt+j0Zm8LQe29yzmYI/QPz51YvzIiZ2WTmdm1rb2nnjqeVRDhEnhZQ1jvBsVbjVfW8l2zczsfUsCZqsYgXNajF+CNOJC0SMKp83alYUJs6WOPf+YFR0IjgA05lJyhBe//B/MFMxrGeW50kDqa8L5EqG6bHOUNzHXV0JMvhw8Nezd7BHhw4/4+qnkKBAkd0ScgzIeSDFiIgF9+qNP68eaNwTmnGbmWF+iP9VAi3D/idNVYrL2YUlOO2M1loaiPORnqt1rp7qNoNllRo5cpeqsAMLKoQa7kF33PYCvyKkVgAMCLL8OFgCQB7Cy9A9JgKUmpkewKhNG8xUfUqYKv2uKh97xhFXwkFdz0q2Yb5T5UI4mZh6Kb8LwUHxNX7vGpxpQAS5kcsDcwQ86wyRkGYqOrrQnd4Q0bhHBHmUc7O9D2kqTRmKPGg96p7FOa9ale5FPMbOKusuSK8MDhs00O2GMCmeR6dQEBW53Tz9FCJ8eQVIssayl7QJx4hR3yWPj6bVNrmRbOmn9cbnAEP09R/kRCtXt0HKUw/05FYpuYZQfbqxdMaYlPV4bqPBqkoXCJdI1AIMBEtfmNmdfqz3DMcRDHoolIKEsdSGObacJOFMWodWZC7KNoF8JJNpiErGw7HcBn1m3rDBRxD5bQd4ZHRjQ4FaLdgRXuB5QQi/4DKoIMjMUPvqI9IDDk0AZhh9N8ot/lW5N3vr4eRD8d/sX0/OgIog185vXlhdxztajExPC5mUt0vuIwfJOjDlaDIz4xD0OzJsxjx8/6pNRZbqhqrMSlIU1l1ymHnMfmRol0N1KYFKTuLsvh30VpQTsVI1ImIBozjUDYqX0fSY0FclO8HI9AZIxzRF6VE0eGhsdFaMEkJuL66Z9RSMFO/+JStY09QIDPJIhD7Vj2qRMc5/EIpVAIciD6fjIKHMOVZjP5JVYRvsA3pYBjlqWNmYhraWayYDAfK0cjZIGMCZiP30i8cuOvEkUGqUJRBRi5va9WY0FlSVH+0g28egV6wJgayH3+XhGJo6Q0qp701Be0bCotAQi/gPb06CTzAv/v3/AA42H4Zg8Mra0OHv31vS777312c8898iZ0/fu3ICuv/qrv6Q0j/8OjGN3//qNWyTdY0ePk/r0qfZSVJNhnnvuOTLPP/2n//SJxy987rMvKfnb3/422oCHtdXNq9dvEdZc1qTO6elZ9Gb5bquRtjSTcHT22aQrU5mBH+UhEY6pz6UP3z16fJIjnBle8aenBziFOX7KcWHAEMepC7VC5x6dOlrVQIgHAYONLpjHTPe0ggSDVYXu9hDV0L/mMyIg+gsgRciQa/ruPSlp2ZHH5cuX9TvgizFmJ4f9FkWGV9bAnt1tFNLetpXhs7g0Nj4xefRYb/+QeXG/36mtQToXiklZ6gEYRQEeK0PMSkbb8Mb7juzotjD7cHvkisDAA+3OW9vbrMMcbHUwVirSuqNHJt22JCPKLOr7OWnUgnSVMzjUX4E3amSx+aHVHS889zxCf+yxxwxI2mXnKRa2g5TLly5pETWCFQJefOr0GXpQrmschLjw5Pm4p5yff+nlzzq2/D/94b+yRLl/b3FopPfcufOWYR9eusJT9/TsTZcFnjl72lB87+Kl5VWXaLRBrtbi3ViJkYBWAIdQ1PjMkxfigaWj02kIcpX+0IXsi8hFwl3rq9o/Z4toaYnaQh/w3GvfguUdOwDt8RillXYrgsAvUgxqgFBvm52k3iMnTos//egF3Ubsc2Xvaz9545tf/wbScRLAeYa27v5b9+9evnFPOZRCzzzzjOkG1TIq0xMsq+AXACAhQEszOTGJZdy/zyJtTDevcoy4mpPg1a6XjaKqNVbPUUULyKJTK1Nzecnt2zddVufgPNIX39JyBIE5vYzssOmJiX1YYhNGGsOPYH5xOZcaMsUNGO1dWONIr0VnO91rLHN5yrMZTk3RGWdNGTwRZCMYRDQInkxy5vJ9VlYU66Z58ojFoi5Z39zqK0JYUhXU1TccoqqKSW2pSC5JPnV6K2wuCZslCETgLRA4KWaaimLP9k27/egtgrDEYYON4ollQrmrDNwBPoJaIEcVWeKSG4tmHgsqjk8yc7MQcj0CC5TtfcjZbmm3GncVyJrrNOwqmwiKWKgYw4Ev/77Onv2nP+Pe74iAqCVHRFyERSm6snTl0ofW61b5UWCs2T3fIX9o1MLS3JHWrphE7+6hNzpOvexwpNtLIoOqgIRDkm+wd22u7SmNUFF+5h/5JdgRDj65wfTWCQ/Q1cRzDTSJuYn2ilgdoC0pKEuyogEvgrHtQTE+gdnT7IVS6Se8aiEf/8AcPIjlM7bxrdGA3AdVYtAWGLJMsrLLSeXO1U1aQKJayKnXzah9A0Ul0UFxVwIIy7Cy0ZGrGOjQAK0kEILBk84uT35Yax0sNTWU4Jg4BSRxTP8t4rgBwUNFVo4pvcIIqdQ9ZZ8l3iOMOByARY0sUqI3yQSMYp1WM8KSDjW5p/wDui2lBZ4a2cDBoT91XDS/NgM1yeGfCvEQXnE5ZFN+PaiI2ApIIhF+SF2E3QuPjY2ySNS9YAORLIqFLiggSCCJyORig48MrrKuSSCoy2hqEDbtFtd5JL3oQdttPA4tr82xxIuJbWzi5U45llYhM0Lz/v796TkbXpNHjvGExt1KmZDc3afyLbumhbn12ZlUj+xAoPcxG/H9pkoHJRWLyeNISsWIbCHAPOY23DKoKeYhWfDPwb4cJzVh2X3VidiszTxI0SvZy7SHziuLPYedtqVFB8+ctlozF2BFPXjX3v760lr3IKmOS6JcBUR6gJuMAbMnZGiWJQFOgViiBEnrDEGoKV75w0/qk9WGub94i17f2jOlA8UnrU4PfdIj/SdFKzE4r1+9PTorvVH6rmaB4WZeH5vhXyagQCTHhwHwFGuOQDDCiEenVDp3ZINCvZarUWRZ8SgKeQvwfUk0j0On8ijEBK3qKlK7FIlgnLHQybwypmicc6hUTNlPNsXs++TYHlMH+gG3oZKZADDQ3ofXSUlLSkFGAnYUwZJyiEEbZ/nlJmAq1+w0dXezvI7Kf2/vWK4bo/EnJMXsnisP0DKGAKp4HWbuU6aOM9mZ/tCMcaEV4JEF8OiH1CVx3o5/trdZAJimNVwW3lKMtAhA8QrNVsemULT+0mPgVpvkN5KQAkGoanhQl0qVQN5QPrq1JoExQFpy3Ll/x/a7PRGrBnvXKER62aOT4px3Zu6pZ5/57Gde+OZ3vo9Q2VFTuD755AVGUgsL88QnG8827e1VYUih/FCqC5j7LN0489CoCLyHyKNJEjDcDB8OQM7hn83wp6XXopqmJmgmeyjQ+Eq/ur7qrq7pe7fPP3oGbDTouoZB+T/6R//oG9/45n/xX/wXGMvQYLs15NNPPadFBHpkRZwlZP/+7/8+5z9Wi48/fuG11974crFoePbZ5ytWn3jiyT/84z/54L1LL3zmxSNHjm6s3tQXWmn3mCN7JmSMgqz7+KZfWFjERrAvWnA7MY6tTowNXbl8sa+3/fKH79y9fef5Z1947923zpw+ceXdD5YW5p21RZ5XPpx3Q4V+XF1bdpMuUdiBtGvXWVB3Pv/Cs6jd4ePKb+EQpZCGERj7Hb0gsW511dfnP/fSq6/9GMZAhbpOP3Vc6zSTXRNashpBWg5DW65UKkUJW205Q4yBIEjsiAtRzIiwYQfALuUCt7mtrRJYGBsjJiAlABJO7HmgsejZ+GzI7csRMsl7HmSmZCpgYP/hH/7hb/7mb5rCbtxYlQB9yisBxSUnvdmYohBpa5sYHXMOBxiuaiVk6jgloEmXgZC7bl2/hnUY+B2sfQwGPyihmfhbkXz2s599772L5Huf0QGV9nz3PBRYN9iM+PWvfIVf1VOnT7g04dvf/is+Fp966hks3raX7A786G/tGRwdw2I8zg2zXRm3FBiftKiDZU5Yb99109aAMqs9LE0iJk5kcR8Hd13EV0TmhCdTzjI491xqqKmaSLDAesKgWtv6CXC4EtkaVy9O8fWNNBqvC8GgfAEPjGMW2u8gY2+3+89yuZ/tKgm6+gZf+cpXX/nil1/+/Jdci2ARVV0QSI84jHNHtq9ecT2KBdWMxY++55FSFQP9ccDU2+si5DnlS6w7zRzTC7PuuEkCpv9FNwYSneQNmdJ4owwdAx7JTHMWD1iM0uqqTydJAABLMhk9UoXZtXaMTY7dm7ln5h4cHrcWokBTjp18RSUR3Ssm1O40HgV2l00A06jG1jmJ8YplQJx90s+KiiRtVU0OMyVSlflJijoQ86CmPKDVOsFA+kkPzH9SdCOu5q1vUYQFs4gFCetw9355O/ZjSRAL+wg4isKomwWaT4rYUwuLuB8ltP8jcB7UGr6YZJqZqFyLmb/tZH6gWwjF/Xl+EtCz7on6PXp4ebz3110vV8mEWruve5j92dDE+PbWU89/VinOJLAIdJSVWSHLUHtE169eG5+coF1s53W0p5/xGDq3nUzeVmyyFJBxDz8IVchPJBFObQSP8l/ZzSTsg6j8J9bfvDGaLNK0Esz+y7um4US6kTq/td//Cj4sV+Rn84HzinY9eDiyGf5lAzzHFgQHItCDqvFuFoBE0mwgSVN7SCdohmPDfOAa0AZmBSLbUSDXrgCXPkx7C4QVWjF+1Rhv/VViIskLhHhCQgUtOpEMxK+VymAetRvpVmllhZDNlEKxlIKBLiXaxWiLcii7vUZozhBjOsI+mrdUYRSzZU9FtZDyBpgnBXzSI7r59RMDMqX28tQCUlxj2g4GPH4yqhAwkGtLBUgw2P2DtCWlV1pYGEKzzBoTSssFXlXUDSkaSxn/yN7CLKuGPCE7+Ldp40aunX3eH9NtIVUmyPBc8c932XDX/o73cLGOg2NFQVrr3qYylKN8iW0m6GW0z7Kk1dZ7T6/tCgpTmxxdna71yUZH7RTcSRYwa2HcRcWAVY9YrFTeks280rpOHRplf7otjhTb2ntxM2wre0fuhNxrs65wkYbEm3aHCQ1Zb8vAiMjqn+YjXqpygjAwwoFhFZ3BQ09QgRRUghAb3fEgic5+wGIeRP/iUCn2k0nlF2f+5VIUaBtVCJefWVOhZAVEJmATy5SxoIXEbB43GaErMq7EEgjbAPcT2szR1HF1FBCIHZw0VZl/zSs6CwXezt1Bd3WEickkLj3i0XeyW2YfOTq5utGhdjEOKBrpTmeZ5kxnupju35gSKazq9FJnRGpVkHXys0gwwFOsmdRFIzKaDdVL2lMmhT3YlKAKJchLHpKYLQAJySdwglZRFQ9GOelKvLwEG8lY1CmT7C7NvJuo7sR8Hzz0dOEQPIoWI37plSO9xAJKEK9Sbxm1Qtgb6nyqYRioix9VGz+k+bIPHTsiEiHwnF0c5ytle1tjtVTvKEpeyhFZPB/t8LC4f88PGPSySpvA1IB3Aq1tV6++N/+qe97ufv7zL9NwT0/fm753R8O/8Y1v8HFkzcaKwlHJkbHx9hW7blFuIA6iKq2uhv/1X/814vna177GRkhvUwadOTNgefDBB28fOzb33/43/6f/2z/5v9ugvHLp8ocfXv7aV786OuJi0HjAOX/2EW71lfDOO+/SnEIpIrl6+cpPfvzXy6szFD7bHAHtbly/dtlRcvrUx06fn5+ddo5IgxC8FiEMOCeMoRadqNPp3clUOheB6RFDQ3cTdPWIgP6iB69dr5ehRQkeeYWPHT226jDqxgZxn8dIlKAW9MMmytCg5ZIlHKsgc2hkmPm8Zs4vr5ET2fYs3Lx77eYtVThIFTqfm5MSDIjZallRRD6LTI9yQiHOjpaLJpxmRJmSqdpawrqoeoPUY1JmiOXoQrJIhm2iQgpdfecn+U5zIAFtwqSHmG3ooXCFW+3ATIfDCUbQD37wo//yv/wv/6f/6V8hUYu2Aa50BmPHD9CNDQrsFjeAaCf4WKgbQq+/+ca777zHruby1Zvvvft+zEDbyKUDdoSd0VR3xl/E0LacN97c4BjriSefvnL1OiZStz/Y4QAl9/N6YIhkSlra2e/v6yK/h51bEmy30A8TYzkRIry37rQO2R8fzUlnzYZBQ037zEwQsbLqSFK8DYBTyRAKC/CY8uuGe1GMzS8s2lW0MmSioBeXV1YlY0QyOj4xMXXUnjZTJbk8NAREYxp9z2OPPVpWOIv4Zm9fjz0BDAWRdZMX6QlaI9yH7FpbP/fSy9Z5nNMgLywMwS3Mz8HkF77wsv7OrB53ToPKB7O8zjawlGA5zb+ntZYyU2D4sg36fkp63cZDlPU0z6i2DQwDXobcPuZsQd+AIkc6up3DNAkGaSZGbzaddLb2UkzrMTIhZZnezfLEKbvxmeyRxC7UuAoMHZmsrcBkwZgA8IkPrH5i/M+PDBMpTzPA459RkvuGkVpMDEEOSOIvCDOArAabjyEVoGtM7EbCsIuxh65JrN9yaU2yGPpSW0waigTF2OdEHUgkEo7RDtkjszqWl+0DuQt6clE8BPkTbSHfgT297T2Eifg1s5iiAR0YmZo8cTbjZ2f7S8X0aHZ+gW90SkdX15Fmuk1Psd2JSBpfOcR/V/EGy9FiFjgzXEuMSPBZhxSbKyki/IMlb9CZtmWIoIV6mTwh2ryLyOYdYbcuChJWcsFG2HcqK49wMFn+lNABfurnX/FNWqz4h+bQz4HUVItJz5WFSH2LRLrBWwxedVygonUm1iJAv8EoAGjxwPW/VAnDf2Zj8UFXfpe2ikswSURXDNrQ17NZtEmTdwghP5Vw8Gg37kf6o3/NS4dzZa34cEj6ZK5mmI8FeGzH0tclVyFvxhB8tQkEgNQbYOojzUHwI39LixoCcfNDzX74Zw2LP+gW1QUBiQ/tR/QvLFOdmXhUhwOAnKwVLB2gQPZauATNWg7KlByQgTN4c1QmCPDAUfAoiwThiT5T/McpThSf6ZrS2Ppu9IeOa3XYxml8Q0WZkodC47aL0C9neRtf6VCalNxv6s6NDpzETICsTSuOAJAhMkQBgslSIkfiirraE3FJY3026FxpUtw12ZpuIEla+I+7JNK/mwJytdduW9fWThunEFvFK0BuB3XUOAf61buPZTu8xQkQzZFxpK7mU4ZNoqBFJKR4h+OUynRzocq8hRsMJ4kLl2mW8m8UqHXVdy2gMJ9GWYUC/o3KbbSiUYApz2MUKEvv0K/nxP0hiZlqz3wnDVc+Ji9TuTlUjPnIyCAQFLVU++L8HL2pBdqtazevX7shDXHBqoAAl7G234pgclJ8I0eKERIJQQkqJWqYm5RDN6eW+dm5JlE5wdbBfKiYTcCuAlE4IB0RrIQdGYsHv4EB0hixCZ2YBGUnO9D37dHK9vWrSwlSygsS2YkG6lI1Oxw/awLdx0cgSUDJo2OOQI9IQCDSfHn5ku7t6TKh1yEmi6EAZpCLweGJFnBi7pZY2zVWPEgEJBW5N29AZD5VPsEFhtGejbRMOtiLQ1wOP7ke0YUoVj5bWwpUtSOzoeZyY4lTaPW2UOxI9jyosxBkNBt/E4LQ1F/6UaNWSF4DpXM/wvHqpy9+8Qs//uF3Ll9+b3VtcXRk6OzpR9/a3/7e974n7+/8zu8wknrr7fdOn3mU+L66tsVEQpedPnkSSRjgdgW/9KWv0Fh/73s/ECOXkxVODkA4Uftf/+t/TUD6jd/6Dfcgff3rX7/47jvU0s72DA30Dhyd/B//h/9R+aCaOjLhuJ6+uHVzmb0G0VL3rm8srW8suqZWbx4Zn+BH8sjk+C4xCJdLg1rn5xbnFpaYF7hmyg5A4XK2L7Z0PTkNAMCzyBQjMdKtdEWcOnbkGLN2hid9rirt6kDe9iV8dbEX4lQOAx6ugexrkSEYMaMKEiLrLw2na3I7joU4qey5F55/9/0P//J//iOaiK0cFxlgKskbzMnTp8+eP2sFwkpNsYoDQKV2ixDwIF33q3R1dLnBwAEpllEO0lA7qsgMd+fWbWeIr1y+RLBETvowrK9ojtJ2hwcWl+zZ1THik5IttwV8Zd2g4T7Vsyvo3NeO/+q/+t+B4B//43/83/93/wMX9Uenjr/77ntGmmU0ZJlYye/j47TpcTFmMffP//k/p5X//d//e5NTRy9fuu7kzeDA2ODwKMU/OOKWIQNgk80d9T15kmJClzx14UnFnn/iwjf+/M/s7Hzu5c+bcYGC7GMLznIxdrFOhGYuAK5zcSA2y2yv20WO4EBNPjc7b1FAqWAJgSCcLlDCQjk0XVsIoVrorUfTH0WLBk3ISEoP8dhHI9EaXtX2DNWC6rGP/oFdnT0ykDO+Dvi65SC3SW5vHz82ZRdM3qKWoAnmduiuTnrkzFl6jrt3ZxRuAaAu6gAbTv2jw87+Qx0wPBgQS1cYvnz5Q0RvtxKo+km1kKzLu+1jlfvCxLhbURj2IF/hugfwWjo+PvHKK1988smnkODde/fsyF+7fuPqtRujE5NWa64ZGBgaNcFG1qf+I/qb3dopwDrI12GQNGcZ6l6RdSNCm07J06Q0vDQOd10l4FP236MtO5ggPzGQ8g49mnbo18PB+rWZhgQhHJVf5IK8ZU6kWku1BVpxEbz8MR9LUZh8IorAlugSFkibyocmLyPokxrIMGHNRSGt1YTKSNJVQ6+5mRlj/ZCCHBnM/VVWyPSRRYUWaFsx985NS0CHvXIlXIYZXYDbkAgayKV/Nz6PmbFZiW24gqCPMpWg5iHu6jSPGSGi1M6BsYdPgYxJWQSmAJ+5On8j4FkfBMwikNSPUV0WiQ6cKMznNCigk/n9F6RFXskCo6BNScFLQUsJNMPlS+NTiWykqfG/8B1hEioPMtV6K+gP57U+oRAm4oWMNCdQazccFuQ0XmlmXKWm1ypdKqcEU15NBB8lHHGt4BOzo94OSjNe9vatVtVkHxYkaoroiXoPtrBgySiTUeLa5FjEpQscSm3BMvEAErdPdBcpmRlJtKfwqo7AULtPZMkeGIQ/6QnypZfMW7iZvsY04w99TeJDRSUj1i+msJFNA58sglEDGPxlaDSSy1hissqSq/n4nDAgtVqwcX498PgShIeqgFrmkbJHHBjIzGUDRHwtqpbjDbc6vb4ZqEVUz7NLSvcW0h9tOeQRSPANkOsKfNbXvkHnxzKnigSSxEFKhns2JDISUUXWNmlNFrhR3zLLyc99R78kMugBa0+CRMX3LmWWVR9bQbuULa18gDvzG/xgpIWNuDlYCzmUsqhp5XcxQyyjJyWlR8oAKchQR4mrmMkIOtwTEtcnBZSnJD/40Yj7+X8alFAqalT2UCEfrfNXKjy9/InVm6EqwSMkW+jcoWTBreV9feYsWcz3eoS6kcRq/jKtmCsJ/aYbdy7Lbov76tXLzCdc4yqlGAbH5i8Ck5+kWbIsvSZxlnysQNk9hmEd3WoPfdgZ2IkJsj42wUngTQCp2JDLnFxnQGEjDRgSIyFdpxbJ/DTMDYEqqJF+pAzVlhW+8jUkAkYx2FM2AjZdajUh3tGvwb5+Jx1BUgdUmaNj8UyRKxJBKpZrdq0DhtJiY1xcu/gpUNvlay0ZeApXl08ifZUFbdYmRL0aOk2xaU5lTWV/QI1SYhoFq1cdrgCPZLWPLGH8FG6ipU55Cvm0R8pP+/SrxVfqLy1VZm1yBaOGD/M9p69/+vprY+Mjr7zyeYI4g9jXX3+VEpo6kp5e4Ic/eu3d9z74P/w3/+c/+/q3vvxrX+tlLeaW0vjJyUUltUDNhDrFIhtCFAMT2Pv+97/L9oRdys/efO3UI6dGBvqeffaJnc2VH/zg21c+uDy/tPjk40988OE77PWlZ309Mjpw6/ZVJrnHjx1By3ML1ntbbtjlR/z0yROuKHaYaWbxvqWCQ4Db67Gr0c8nTp66e+cmv0BWGhBOKrPuFQ8kPQtvTFoIlvTrOsviRAchcj1OO4EAMLYq7EnvoCDSFWORC21cvVIec03Jy7/mIEitRorZsMrJiP34OWQuPjx09Ngp8tW58xeOHT+JwkeG+804yBtOgGQRIq96rT30grWHMAil5ICITf6rP/gJ43ALSNsgsGdrRXrHKqDXbIUy1S6jcGao/f2nn3xSjMJr54o0tXkDXnsFZI9T2rY2VUNCx1/+xV/SB5w7c+5rX/1b/+Sf/BMVcKK2OL9oMQA1PNlcv3Jv98ju2KjD+7vU/3OLC/07vT/6yU+smgk9k1PH5maXuyMA7a+sO7SzBiLNo5XhMnrxzr3Olt04AaAPdaFjV/f77773rW9++wc/+MHzzz4HxaBk/YlVDWafLvsgUOAcsKbqFfayKnVSDUZik72+WQVrTojZOQ32D2s2yz6NgQjv2mbtRHkKh9+KXPH1qwlhdj5bgXAkgYDyLdkhXWOxtn6XkHR33r55C9ZGh0bvs+nj166jw5LD6vb8+XO//uu/zsGJUc2jf1DJuSaTwXtx4TQ6OmaFZ9mDXa2WHYCVxQUlO2EMIcjL+Ye+ni7DIKd8kYv7EqhSiks1kajHroslQeWDOK9cdBC6mA9mkSqSbHXdIeNhd5Lfn55dXF6dnvu/3ro73UOEBQlVcaTb7I6T8HMaOIKWEV9cd/9/ifsPcD2T6zDQBG7OOQAXOcfOzWY3m6mZJFG0JXm18pq2nrGskWXJHu+Ow2PPjO1Zz7P7eGyvxuuV9diyPYrWUPSKFoMoUomx2d1kB3ZAN7qR08XFxcXNOe97qv7/ww/gogNFeQsX319ffVWnTlWdOnXq1KmqULcbL5M6L7Tpq1oq9uOxkjHd2mSJ1mAcdKNaMk+JpMkVnvxa+SwiVwbe5s/JPZPQZ/iTFXGNAEzeMlgHVoEYAvVbdkLzMMyTXfljoKcpPf0vsbDkERE+a+lw0QBJiA7OSiwEI8AEpBALQn4mycTiAHPkBEhCOqbwJkQ9nJZiowAcZKHyzRAQimOv1ZidBrYbkhkdTIIMUJOBU9o0/SjNBKTiHGYSPzEpIQjHe/GEYeEXHhKXEwlWlkia8JajZOgzrwDUxpG40bqqyFSPFEWYEpMSFKb+R16pPnIRyoNLqQXT1yiar+/IRZ5RhSFNq13liFYzdCehKuo3g04jSkSIbTNLbnGNsoX8BjHFDjm+0qlVgJQiCUPRoGJmF1rmABrqnGik5ETw5ukbQ3HTMt3SF4YmRcoyfCCjSblUK6oxqCL80RFcORkzXh2c7AGm3k2bHdbJ9si2hOV9CKBllxLGi4bIMDd8igCZlGPJo/kyjBzuU5QjlyJaIZpNSSMwJczWMoQ3HEP3oE3ASQhDTuYJS72KLsmP3cEnqk7a/FdGSxYJcryHp+z0cbuEvMkObhrTsIN0lTrIKfCJFP6rKU87rCJ54gaM44REnNSllNVr9IvUglG/4lGcsD4kSsbdHdQa9GLtgMU1bUghxYzVPYWBgTzSLpHEBzSCGZxd9ZGfNVhkEROFwAONqKQa45UlnpjGuzDI1gJlcfBGnL1hEkJjBBoJw2RYA1s7Zphki1GURkmUItA1305tVDJoEw6ZyDKKUVlRKe73/ojsgm6jDrOr9JfDvvdf0KKaUrlASa/xMJYXg51WYALE8l7jtiTBF7UYUIyeBCNtAcMGt7AmaxbkRF5BaQKNPojB5YwGYmMuZ5QE2J2mZD5AGF9l+iTZO/HQWnp1rTlkSQGvohmqxhLz2lpre5u0RvxMq8VYTJfPnNrZGWwzgDKiTc3OBP7pFCCp9uzbK3fxUU5LfQuDojC4SUffQlVvFRlp2PChEnxSas/wOHLY9QJr67TC5AdlB0ehmCBKSHfWnBSu0X2qQu1o1734ZifQgHB0qNRqspCWyJiHYPA5sj4HGpjWvmiPXEbJvFC1R7WYRaehARxaW+O7iYHIGoiYxYqDiBVx4ixpoy30CxejX843gjRsJtbvnUDeVkpZZfQKj1IIgX9OH8gkB+fhoSs3RkZqSBOra1/7+lcJ7o4Re/Tx9zgt5sLFq//z//xPTQt/5md+dmximlyMZBg/xXaL6jr3vqpGkpVKe/75Z3/6p3+K+QojIjXpfgAG1Y+/99Fz518/e/o1O0+uXRv6P37rnMNj4j6whfnXXtlq/USlXb70+n/3t/6vN+bGJ8evX75ydnxsZHUFizZ9Ysq51NrVtnvnjp3bdw5dusZMm5y221micW3WMllU6ygUKTHNuCiDQnzv7++FjymZpvGpu9u+zSZNrBlVwvDCMLpFFYCYSY6PjXlRJzChTLfoRJaWEBsDpH9rPx0IVQfe09jS1FnfSIBzlTFlv/XNhuq63r6+7S5+3VzDKEhM451Fg4VFpuDsbmrNRnbs2A4adT451MHlv/Ebv2764V6wD33oQ1u29KPAxx95jyK4G8pU5DOf+YzIO3ftSGJwsp1RAPUQ8n0wc6YnKI18kycGypvbVIRmRnax+b41k6sblGanw5S9ZujqdUfePvzww5/61Kc/9KGPfPOb35LYATjvfuSxqMfFq02NtVu37LBaaHp3773bTp09uW3HwPmLF1hBdHa4LGbtzLkL+6triaMMSKgjGRDaD2heHyPr6iq7+uZ6t8+s/9iP/KjNAA8/8i6XW2G80Vc3rzOgIcvqjY5AHRq8aO1MdevtZ0zZa+M8XSKamcCWrdvMTPR4Ei4ia2FpaqQJIXKTaZihRG3KTnly8VSHV80GWmgpLNKltVGCiBMFHNbLBEhMzEd1Yxkoct6p/FiSfZ/j8yNDV2JC1tpiMRE3I/pbPQHTxAtPdNqqmrEcoXLN+eViPgDOjh07LevgpEam3JEyVkZG8USwuGkC4JOBC/V4qASIwTB4jMKnA4wBxIg1pHoYGblhwXTrlm2+Rn+srjGwoi2mh9qusbGJ4tq8qK++KWzcDdBILJgIVmxQJd8baik083AUJtA0b/4lC20rHPbiJtNMlJLEFTCxx2BIOUV5mIHS3VwR8y0jREzYrZts+NWYRDdMJdYccEFlCxnDlxivwx+sKKWIVFmWD084srxRQK3G4C1BYrU8CERwwIkdDsQmYQEGYUSRAoForxBeyK+RKhRFwhiwhQIrai8+SuFuGdOGTDn6k4TWpsyXmuvaMUInSTgXX1pzYKY/pk3IKWEeWQOAtrNUGwj6C+OH/IeChajuVMYQ+imKlDZWBhTEdsiQqOxbFRK7m2PvRpQhnekORbmE2QzFun+hi7J6HkWTNrTm4U0FSEWWjsv1k/3pa0S4zVXGufWTikpFSU+V6qu1FK2k+qJQsA146S2kc0PcSpzknlpDJ7UCaUkOV1LmhF5aG4gFq4iRG0j6jHY8/aXXIoSnQI9Hl1HfxL7oSqmbBxolEgr0spNII+MRkgBp3A0pM3an4i2hOMmqRB91Ikm0iJjCcyVmIEJ0/ARhg0pLqVLhg5aiCEVMnuzPpSigRWh+KT8jJDCMiTdnqm8nEsrCBFzNvrA0h6IV2ScpcmTPzGGkKlx8jaqLFYBUhdEsyhyUpmhpwobSzHaYUxrPKCGJTrEEGHZQUQOw8JS8yEhqeeXGzeHaG8SUV8zfQsmZHOsMrIOMLn+XvqtlTFUuYpZdBq6a/JksyNmcJJ35v9lJnklrzy7L8EGENG+OVkYd62G85VxmfZCCg/xHpmxcqW1y81dMjcRRMVCyskP0jyUg4wJaFeoZpY6+D4eg05KLVJy3mD/hEhu5xAxSkkTfG0XZMCzqJ1VaKbscSWARW7EKf6qOire38mbIOVaCWaIm4WqMzsgI5eQoQ7+dABxNo2io2tMgYhgy8UNLff1h6kDnhdIY9HAGL2e2LC/MkxSAMpDZCys826YZECPTmLqBFiotQxjrAvfeyAXRBn3iXNDgSwaunl4xRgQiaR4NkYQOFfkxlF9dIZdT94LJ+p+k2L91i1SkHLmbAGheG22DtcbWnNiFoiAmFWyHdIoZp7vNLzBCE8L5yjjJuGL249XQz4HsfHrYhtCWLkrjhwl/S2s7D4WvOFDCDWSaHSSVyGSJBJY/iaNO6H3JXrS8imPsVnWqFChYzcxOu3DSqRtqWF6KHGirr6pN4tAPChFTIKwk5AczP3m44IS3sYao8ZKLCN8XV0GcWgfIDDl3Vf4CJZ9w8aNHjwwPX5gYJ4/cuHThAjGUJPbEE08cOHT41OnzH/7ID125NqKhrCm5/Wl6Yvr40SO2TCvghQsXSbfa1HLjs88+a0sAgjExc+TJpUsXHnjwfiG/8qu/vHv3lsHBM2n775JphkvjNJDNWecvnsQGHf77xqmX//Pv/OYDDzzgipEf+9E/9yv/8T9YlHL778Lc5NnrwxROz37nGe3eUtemRTSWelYKVhLWrMxMerpdFDAmRO40sA5xIlB5pVzX4pTr4qsHMhjLdhK565ttbDAcK+k8tX9cs8UUM5rb1C5u2HArYVVVnHYQZ6ktiaKicoOaC4ATm+arahYWpxnP61NHjh9rbGp1YNLk1DRudObUBZe5KiOqcHSkXgATcyqvTgI9c+bKwYM7rXjAEyi41axXOQ+GY0B15swZGJJCEadenog8+jWnCBTKpsEO6zcvhRKaJBH7Ly/x29pbZCFESyFyxKzF1UmNG2l/5Ed+7LHHHvvUpz713HMvkIEYSRExc6549P33P/jEEx968cXvOuXG8j4TrnMXzprJTUzNPvP0c4ePHP/YRz/6/Asv2TZAPKX5npyysrBoREEoXVsHepoat2/p91UhbcF5/dQb9gNDBZdaWmiu6mJPxQy+1aA0ekNBl370R/4cnmAmd+VyzJtNS4k6+vngxUsU3ohscOgqNq9zaoO2jtZDx442tATXE6KcurSyaaEhxFG2GlQFep1wQ0pt1drizASBXZ90pJC629Lf393Z5kKjtuaGTauLq0tzvV3B7OanJ7o6WlxgqspA1lTqiwfdmABICKZOLWTfPvehNt9zz73EiqHR0Tp3qaTZCzLShNQmymueiobwZc+R4evawHW2Z8+f27l3n3WDAReB7d5tvwHewZjqxtj4ex57HAk6i+PG6HhTcxx00NXZI8eR0TBEww6tdnb3Oiy568y5y85ka+rogjMFG3k6JF8CVoiYMepFHw+JM4ZD0mNiNHiNiOYAaQAyuOKjYsdomsXxErtRzAAbgDZmTkWEHK14VsbPcdIzxmN/bHv9mRnHXwiLJgMxjKfkMVoktAIfGceMwOeK/IWErC84s7Ayehn/mBqE0KQo8pJb1ET2h4gcoOFCQpcxGWHZyEFY0FCmm8EOwK2qsh6FWZPv8RQ7N8QPcFVV12fGdSq7w1kgAGX62hBXmtY63oFIG+JTTDnUtoz8hbQeOUZFC+cnV8BqzT69hDtcYZEQiXnNpto1mn5rE2KHVBZ7CdgHbWJS6qZboeHPX8MfbajFc02o8pRZqo0oYbntIJDdnSHlL3f7hWqp5rM8lIaoVKtRjd7gGgUsN0RYchPgmNdjq4zQUzWHxjqhkys+PVMjRBuWUpfFyoAWxUkEHBWuVPw8AjUTuObP/GD6pC0iOL3KJhKQQ2ORRN5qxiaimOqrcOMQvgwUqcUZEQZyaTE62wuNGjj49eGRwWvDDfVtSpxdVGjZYSxyudOJclutJoRjcnJbeE4bBFaWOJVV5OyUOGXFsqLFai+cCR+WyC9dmYB5ka/I/CArfhFYZORrdP2owVSHKWqKjlSiLISqtJKjiHG6t5V5laChfE5f45ntrJqam6TWGQKrhGYSlvWX0pCj7RA0YTsThqFBF4mp7PKaVQAek2ozq7qG2JkdEwUIRC8Le04OzlEPmik1lGyCnEKix3/iq0aINkwTDopTM4YoL8mvXsdzoHRzbL6HgDiJhhIHkTxoQPX4FEBSF0gMJEgnIFS4xF4q3r+v3px1BllGpJRBbp38knvP2885gU195tY0So1ECQ3uI2WgbNBkzibQ2ZaGP58kVO3IJobJdO+viOIbU5g6Gnd8NbJYN0B1+pQkBCaZOHrHWEk6CUa4mBSNIWYxliDihBF/LJpnA/q031c7IiqZBuWkK70Qc2r3wJiy01N3CxqoToeQhlwS2jqSGXzIOqYECccG62Hkd9r02JmjVRPtW0BgSOSAc0nWkRfVXyitQv1CFah3G35lxwhKoYyzzoMFTTHFV0Byj6dBHFbGcVZQIotJG6hySKhkCcWBEhYhJr9qFD+mKvSAVMtxCWxsFQCBCzQocSgmLQKsrxI8Y3C3nmD3fKpG8EkynuALh4w9LCZRuTySA5Ce/5UemRJkVnhyxl5T3wnWAU8I04859992Dq22a9dOgtDHP/6DSqG6FJ+gLD4j9dbmLlzDlNDNq6oUPdBnZ+Ih3bp0lS3Z1NQEaZvi3xkqH3j84edeOvHP//m/vHDe2f3DIzcG2ULonARuQ3JtTZ3730Y2uSAijmdgVDE9NQqTz3/+C8gjWS9WrS2toV5ZHNi3a2jwGmnx2IF73Cbb0dpGl+bIxO6u3nuO3+u0p4sXTtu9ydRH6bRmpnNiPTLTsl4VhyNfaV/NurwQNmYmz+KLYAVjbrrRDeUsYtA8mmIQ5ZO1NG26kKy7MVUmSMRxHQ41NtTWG1bEcfstbf8zz3wbU3IOobG5t6/nyIH9TlUirMoFGurZOZnv+8B7YUJ2d/erKZOO0Noex2EZ6CdvjF+6cNkh+9/4xjf27N1l2y0TMwU3G4kJABu0ZP+TyVsPJSNoFKsZNmCAqaMZ7JD05KuuYJ1B+wouEAJKJ6OaifGRpYX5qk2PsrVS/sWF5UcffZR0DaIq1pyvvv5qV2/njt3bxqdGX3r1u9fGeq3v2jI7Mj5ppWZ2fra3b2DbroGR62NMqJ0xpNu0NzfJo3p1eeLGSPfAtoEdO0+fOWOg/Yt/8S8++PC73AyKsmgKdTnYuLd1ZXlRhxodmxi+NvInf/xVRaJ/lbXmb25tqa2uQ3nOH9i2Na4NVgXKn9b4bDxrunj1cmOzOb4jw1anJ1xsHsyLvIG9aLCZWOK3eShzgAZ2pD0dLQvGDMwCW6mNveHzM7NDVwZlimfJ1whoB8bp06do343E7riWuwss9AGzu+gqFiV6YhVJB0E0rmTr6IwjZts72191pFJcLBLXWGgMPTzG18SIHYlo6VC9MTOgs4cQtumQe3RA+WEygrjN/IRDA3CzvcSYpnAT80gzP1Mb2bHbdMtmcDHKhtkpjQpzUyh7pJWV5GMQTVdSlUWuELJ0rhjK85ho0AytKINZfNNwHAJ/bRia5BXKECCADC7AFZ78+k6fRfLCU4IJqZD7k4ifgGYx4qakkwKhpB1vyzTp1ktjObCIpDJCmasmGcLnklNk1RDqycgyR/IkjGWJqSR1xCphGCckLVQkjUUAdlEW78KASq4kfj1HLLe5SS++JculxTnGaEn0h0sIMAVPF9ecQPUrCBHIj6oXSQNqFB6ZZPyhw4dyVUWot8l4hGk7s1WCRmnGDaLVWFV7YjqEqtX16kX7LEllcZyTBYGAHmCzyAMTQCvq5yZaOcu39wy7cjFTNQcETRfCVKCdAUZuuRFYmzE4tIE67P5NfBfWHbSXXMpK/QcVqvK0FTPCggJT7QTq6ighnD38XOQSiWQgmdeSYK0Th3o4RYj87WNxkkCsP9hsGhUWaHIm4asqnIAZM4M4qzQdEmD9Wp/CGdxDYsbiRIvZaXOAoarqCUItgSErEUVmCsaugaFcbq9UEI9oO06RcgXLsPAQgwOlRLswDlwUIZ1QaWzVzhHCRRIxMZJQbeIYtKN04PgJ0ZnQ48pR6kUoBMkliT9KlLLJrwEkZZTDUUAY4aurICUIRBYxCbXSRxERY/qaOrBE6SxCDAd5s5eQ1jgUg0c6usFOCzSGXYOAXqNcqjK6ScgHIW/HioE0KE+30Ry2525y8ZRwbWldSpchETlxEaUqF1RXwjDEpyT9q0uYJLEdZE0FDlrXvOKoC7mb2/lPnE/dNcQRtl5peSFmLkQnat3adH9tXCOoLQILy5eWFIKtxGTDsk3QWaqBXBOwyy0ksOyUSSVFM958Jm/QW/qS3972M6orVVo5RbRB4gyBS3IlyskvwYPyelo0VLTbmzxBCnBcepYgxPvmBbak5VOAUEtIpFHNKyGa1LmZIQ7SEYFhhpkfMtA9Df8aXe80YzCkDl6+4qIbdx05St/yO32f4UbNkxU4awXa0aTOQwEtQc/NUI+EXTVluwhAwUpjoxEI5GoVKF+DlEP2yQoYg69IwlMScglTX1nEoeEjN6A3OnJDYNa7y6W6qcptSZnkgBJT+eO4qNrgKkmzH5NAopKTmkksDU0tQ8PXQE7WAaGhY+lELkPq4lgcCHqmU4jNilFfVGxkUzKGzg6aVEw1WOxSpVJTXh68cvb0GQbJlJRmxfYf0ig7AUaxLU8YuFVjKIcctGpNIG4hNF2NK0RhCitUaLjRddS1aZgOptSSUEbOzM45MyW1WzzEReq5Nf9sn7EmFjnoLTpwZV4x8AUm6ibWPDnNwaDp9774hdYW9x+TU3d/7nOfv//Bh7rijCZmF03tza5p2/Tex993fXjM1Gjfvj3PP/882Q9pUYeFSf3qku4Vok5j8/4tA7iTc1YaZqZeO3fJla+Pvffdy+szL7z8LLN4eWlQIykKcQa3nSr9W/pOnzpDEU7mPn7PUbKJg/hujA7/wi/881NvvP7lP/i9kWtDJhV1NQcvX7xSs1b32P2Pm5shRQZXrXv2jY5cszWblIzpoKh9u/fgM07GJFw11ccxuIf2H8AGL547z6iNfnli2pHEzWT6bdt2OWxna38fMRgZX7v2xSuLS6yVvv71r/f19aATp846d6ilPY7B7dnSPzo5pXKYw4nsAghVKgud0d21LhL+oY9/gmCmN9XU1jvd0u7ZlmaKJEayy2y5mbehNAMMehZy/N57JsbGnTEoRFugNwSzd89uC1h/7od/6IkPfYCAbdXLJGdmfqatZS8LP32DJEDdZt+pebIOYuAIAbKxCRecmQJ/od3dGlY2mPNY1yJzzs3iC2F3s7BIhqlpa7Vxtu53f/fTs3MLNAeXxq446EbjoWlrIk899eS9Dxz79f900sLH/NrcwO6eixeumpc7+8kIeejIQYU5+frLWEtnF/OWuqa69YEtWykImOlrVMZwJ+zjeOmEXvQXfuIvvufxD1BBLLH/mXOqj9u5e/rqmhjKnzl9urNrYM/uQ66RwC/ymKH/BwSqAsVK1xKrffK6CIyCOB1vZm6qs7WFTnR5fg5BM8hASObWtfW1KsGOXKsE6cgdZ/ZP6L3m+TNjprNXtJPOb4ZDvMaeOGsaGuzQkeOsfdwXu3P3LsxOJx8ZG7W4IJppwFPPPJ1wWb8yOCgyPrVt54721kZD0sTc1Nj5ifmVhbHBy/kocc3AacIYD9aDLMxX6Ey8dsUaUwwDh4/fp1CGUiVULqWbnIijjrMKAf+VKWJtaWaWWTszbXpjY6p9q3WEhqbm+nEKjJZ6B3VMTDnaqI+kYv0zDgCNwwBDQRxdOiu9QxCIQY6owRloSBbO1rBxQKCRU8cXXmV1NUbNPBz6ctMFqO/J5YTl5yYd3fTG8Q82qjl5xR/1oIE7i8UwiwEwXGmYhNQd2SaVd7KLUcwSR0uRvMXMM4YoHvcAEAowL2vN66ZfpBUs2j9xc2l8x+mCEYaVcpIwCTfkDZ2qpHYNhphqjShCGIKw9WL6G2PJomYxFoQxajrqx+jMkWiwWXEDIBt9BU1TlsAzifiQEE6V6TcPkyli1H8aLtIcJfIMyTCkCRAIVTGrDf2mfk5ajKKEuGB0iW4ftVC9mULC8jPSovaWXAIs2FcMRWYYyiYXpL9DF41hKn2HNBSa2+RgUfr1w4sZ1YfpreHQ/ZFYFDkxzT5jYgPnoATeaGXDeSzNxDNENEGxMRTAVDKlk2/4kzwdla9GcC69VQ26jcoc2nJnU2vLAuFWI5j5EjqXHFzjbd3ltGGU4Jht9wrGQbdyXGMXTUwUdWBgp4kComAcefHCFWd/ue9FTouBxCZzOqSU+iiSYWdeVZ9OLDNpx53MoNEYD2kohOblldmFWcxE0cgZxA4kJHoirRW3psraeIqSDRJmRyWptlx7Cha9sqZqdnrR2oTF08W12ETkQKim9u5NY8OqKCxb0jGaqT6iwvMEjCfqM/6F/Kwe4xypKGqqzvRZDMG1jQ2rY1M0JtPz8/Rb1rLNYpdpidVH1ab66iY8Z2qOwLdORtQBzJKkBrDUE+UZc5VoOfSAotO8IEKFWWpxiYao2h2lOSTbED5uxFldaqippwZzNpw+4lCIze6WaqhddQnf4jy1RUw0HOfSVLcwT5GhbWqwQbM4mWD+5nJqjE2pqmbWYQBrdjBaFd7eqpUaqmmIl3WG6DUEjWTsqB/HhMDyLNpIcn2sIQtBR1FJAIdXp8h8JVhJzAFiti0XmbIsMoiYVtBmxYJEsFIJ364rTQdTdMlMR+IvfmVe4mmp12e/kiYhMXCOHlU8dXwx8lP8tBIe0wOoIkgrKShQTye2OjsupJr6RtptTxyBjsiFpIsLs9Kx9F1YDjWhK3uNJkQTCUXzlCpGJecCLTkJatX9v4yPQ/SzFXJuAUtzio6v2hRTJZ7xU6GS5wzc8ws1c/MxJXAGC5ljZTGEFd0CabiKaHxudCrtfwNKC3Is5m1M2L5jK/FFJQsHlsw3vxQmNFpAG8d4GcKTQ78nCW329DIkNsEgqZCTTIT1fZG1HaGNGszReUgl9Ud7teLswcHhYccTOdWlJTFAaBMFzEjc8Sne8I0b5BAslMRGLoDGjl07zSdxqlgMr6k19p67fHli1OUvk3gvwejgvoM9/X3O9KNWs1bQuTlOoaX8n58k0K9bGCEFOuSwbVMrRQyiw3fooVWdNqeDjas21jdT6S1Mz0LP3dXJNGXOhIQ+wvSEpKQOQ+axo33FBoogE7SNfKJfl588qivR1Nt+bEiz6Cd6A3AyCk+iMr/4aFg9kUk9G5pcVbTeUlM/Nb24fdf26zTsVwe/8HtfevTx9+/Zf6Q6jrW5oZumxdfq8+cv9vdttdlhYmz4wL6dLtOsb6qrWaoanx5h0WAXCFN8ClPWGOMTKsFlLNX1zXYjrRw8vv/H/uIP/+zP/XXn9LironqzpZs2sixqN95dvzp69NDxV18/SRYNCm9quff++wmZQzdOtXWvnjrzgr22WNYLz7+4fduero7eK5euNtQ2GD+MkgNbu93q4XCZvu4t594YX5idM2fE+jxdrL5YA1qTbcLjN0aFcG1NzXSsDGWOHzvG4kNVM7+k8NW+x4/dSwyzK6G3f6DJ0hJLs9rag4eP2eHknmoU8kBPD8HSngHVZv5gAiOt9nX+tQn23Oz0ubMXKFO0Nb5jmk2ucHWGMuILhjD072gRe4X5T752Ymt/Lw5gyckhNExn9bh5o8L8zPC1QWKSA5KMVk6YFc2EgV2IKSuBXgfRJTA01p12F0zN1ugdNQ5CQ4Rry+OTYyRaayxt7NlWycxzJq1X3ri6b8+eeUftT0+Ora8sG28sPX/jm9/at/cAAZQ5kN2mtq3aVG+aMTEzUbO0+cb4tdEbkwtzLnBZP3PmRF9/lTsdiNHnzg3d9+DRM6+f6e7q6nVOcH21/nPijZNxgNfapl57jzp7PvKxjz7wrkeU1lYLOyT8qXdzZfochwYwEGKMb6l4pHZCP/EJSVrp0EV1eLVpizdp273CrKb6+uO+5AnXNSX9xJatW/VzpICnqC9rgCwXXZ0bM/7auMMZtzI28wMLmovWoit2dVmoMLik0yqaHEyk+NTwBiENaWroBC93yXeyIOsJgyUJLdAcPX4MuzEveva55wCxDA2+jVC+YknElOa2ZleiE9Wc/TJl/mWbhSF23dXFS8yxTEuaKK5okNm/WtegIjP4xmhEMRD3FIJG3McEYYuYlAvLxuXTJpXYtO4crk2bAr0FO6eJhI7erqvC1LgQlUhMMZpRORurYxucqVGe8iduosP7HnYRXBIRgg7Dj3aYWvKFcFwS7CLS23B3Y0x5hiPfQCs9AUtoGNfyX8Kn5E9DW8SILGnF4ie5zK/Kb+k3mGREuiUwvQhKWVR+ArH0p2sFJilm4q4pF4L4re72d19DcPcvkqZ6y+hRpgrnF+441QwlR8sw4hm2PD6nr6q7cJo9YFWw9ZLXcMgXYGIgiOmjFpUsZgdRlFue7J4DSliV4JxE6UhMXIyGjcyUlysyfeceyEfmFYgXMHIlBIY5KJclRFUEBdtwMc9DUdCKSgz0fYtrl6ItNgJaQC/Ihie7qMsYwGLRRrSAnsax0BOH4VYyrVF+ecVAGtmrCf+CuIMCAy2x9Fwiy9e/9uSNsQkmfE3NLSwJerp7Xa4d58vHMU9R4Igff0GMpEBrdXh3YiPgyz3MVXRBom1wW9ufQgJwBW2oEkMRQeNHjg4YYQePO3lSfMcl58BGOXN9BH1IGFNTpAjTOMaXGdiKwyzdsiIk1efGjRgJkyt7CsJDXcpfyib16xIRClID6pAWWKqEjrjpLwbfYMrBBHLHi0byWmrrAJel2PRMxC8ovmY8Qp7QOqH8VPZYJ8iQUwSrk6EOdaQWqJFz6CCi5NGLIr11lpKgHuQRTRZO40b7JjaCkjh7uNigIHa42ekU9QlMegIT2JAhPJVU9Zef6UskT19goL2UNzpNaEPor1ORowaSs6R8S8FTsrd4ZLpOmUbMqKWcXbneSukzdl54wpydu+0Z9e5/oBifEXmJaiJuOPUjimfqB8EnohYSPWhfdYfkJKZtD7PkdPluVniZwxlrSCTGMokMshRPeXAkzjrJlY7ePJA2zUq1P3MDjmUC4I7ckxFVrSQOA9XSTz/9bRIJ+AZpWIFDLU5xRlqyoB0SzDzdfIgyAk3d3a6oNVMJUp2ssVyODIx6JgkiwCcVyc6ckPDoZcWHKtlLFjLSwYUQmg3xqoZ4rS5ibhPGfMu9Wwmjm+ZYAqRFeM0Nmvjwb24Ls2nrA4pAeGBiYIQlAMAtkrBfmqfZqd29d+8Rc6OmFhFM83ViRKdczt0eG5+wLsKKaGbOkiGrjiBLyJPjGRpFoRinY3nJG5rddBCHdtQhOF8jjliJvDOdIT8HcWAnSe7XpjEO53ZMcf8MHtFxSk5GSVcTm5s1HFRMt83LFGpmZlJpPvaxjz3zzJOO1Ozq7dt/8OjUzPzYqF28jZPTC7PzK+6BNQNngXPh4jmNZeGUjDsySpJxQmP13Pw08sNxU2OND2zf6Squ2bkpB9+89IqJw+v/4Vd+6dlnn+of2HLowOG9e3aRpeadNHXtmta5cf36+MTI1v7uq1cvtbQ2nL9w+ud//mfnF8f+2b/4BzMzNzq7mms3N64uuZ7swN/6uf+etPuZT32GZZYRwcmRlp2Ghq689vJLbIraiJpp7wexEPFk+Qr1Dl65Eh0k2fkgEuVFJDy7du5DIda7GCw5tpEH1RGJ1QyBXkL0acUMvfnEMGB+ZrG3Zys7dsXXWQCZm50/e+YcotLdWGi3tTb39vSATzInaZv4uWuU5QvqFRlwumyNEdSbDoKLWfH8PODiUC09fP8DZH1DliVW/WhuIqx6RAlyvbAAMQlNkmO/RNxttwSaE1BvRP1d1xbQiHmIKauDs0yD0+YccxjdDfkBFDvhRm+MtXV2TU4M22lx/tzFrQM7gds0EumrarYNbOuvG6tps+TRVN/RPnv5wnBPV9zVrMIsbIgD8862du2n92K9ugMB3ZzJNViDV4bsWR66NoLDW5Q1aWOMY2qmO9VW1Y+Nj2mbpfm5zvbWuWkH5iw7/HJyhooqTiSANzQsuKgR1Y1AmUDttZazZxfx3cQDtSmG+Xdf/wAGgWg0jwK74O3oscOJsqPXaWY9WXwiNVBYAP8rr55Q6ajBzb/UAKzZXNo3e23OJnRUooo1jwjmMAA6caiju8sMhB9YmTIIMw1AKOJoHh5tac0kji1aWnb/rDksuybivcuiDVe0L8NXh+NgNHRkmLNus7BGnIA27gklmfKrQFMXdatdEZ/5gErQZsQOZKcgnAwpyHgMCIoDVS0oYXN78LXKQSLeSBUxsoaDeRbmdPn8KiQFxqfCk+K+g0fkspHL4Z4gF3FyLhtF/36GVeaY4d5Wuko0kOKGeWvQDcPVYnDv8jegwl/6id9U2HgP2ceXkmgUCSr9Rf3EhwonPH/KYQEo5VAZWBE9ckQheURJcQPBcKUWr4z7Z+KXVcYtezInFRYVGEw1bEsEJozuQCBCb5JH/pzhRC0k4inSxDv+4mRMCs0FglUQN1tnoyzGqhKIdrw0QCGfZxdhySYoJtqkLXKSvqNl4yS1oeGl1pZsoFW7frh6enbGqhoZQiTqPfkmGFIFhsG/SJ3WZOJNzwrRzkA6Y1jvMryHVlISYikJyn5+a7IkM7RFrxFwaoPMTBikjqaJUoXtB1CpeSPAUOoVH8jHJur19BnJJckuxUvxIzKQAeN2T8jBFYGRUFR/EnI+eWoRuaSyBGqR4FYXoTm8nEn6nl9SBrfG95ahVQanDG8+ik9RiWms1fVC6EmLbzk7sX1SO7FoVU6aopcmAIBIhVsSwnz3mhOWsC2/Cs9fi0wLj5gpcrRg1AoEYsZcKqdUfDnnIsmf0pOye8cwcqrAJ+GWPbxwjhnTrS7IPDl1RSBwszKbL4s8eooT7QxPZBFnFke5whKO3jPkWnY67K1RXR5HCP2S24WphnVYLpkpRg1L5yrMHJ6fiJOoYcLQ2tRmBydyMopZcjREQsRAzNSbAhVAr8IFGFKBSoeSh7LfgA4xztIWmAayiOyCFOqzZJhE7M6sI5QI6aIMg6CvkAYHBMO6KQJi0HOs3zTXOsO7AyfMspQ6IRKJDzfYMgSXCpIwlJcRFjSfnHcimkCv8+4BSTf7wpZpu6daggNPKoWzzQ24USSVo05SlQe1SCVahDB6S+yOX0XLHWeIKWXMKrPAnwkv6E2cVD/BH/Jr9kQTp26cXovuVnhytt/bsyz6V8xU5ZLFhlx2cNGDClGNJO+XXnzl9OnzeBKbyYGBbWzr9+2tZjb5xutnGE2QxAhCJ05cJBOzkCHrX71ycXZ67NDhAw11bYvrC+7UqdrMrKDui1/80rve9S46U4tV3T3dTz75x1evXt6xY+tf/em/dPyeQ0cOHSUHvvCdZ984+erQ1asWQxzXc/HykEw7uhqefPIPLW7/yq/OnTl7srp2xYn8O7fvXV/eTDqyZkUtf/LlVynstTK1LqmZq69vs6O9o72VwU+Lg5tWYru52iYrKy9SZNxPaiJYkrOV1Ce0gaicdvWhD32IWCtEu6MQ0cQZHQuLOKRCDsTtUK/cSXJ6FvsC8EFeXOwEFmkFJZSNEUhxehwIyBXZNMVpPHX79+2BLSem3IlwThximu4VzTh6/vChEP96urovX7gcBpPEy3SfN4SlirmGk3YJqC2qPRystJrLeWPaYK2gtVW7CAEZziLrrbkvwEExAQTH1xrbC1pb2ox39xx/YCzZMBkaLYhIzBbIlGL4ujunZu3koAtzuBsT/MaGkDVt72C6Y4FW///u8y+oCOJyr029zq+saziwb/+RQ4cRipNir10d/Oxn/wsd/5F77u9obKCZpqcz3TdZ0GFYHJrls6jSD/RMSnS42k3C0EJhzGPk5eYCh7maVqpoZxZpCUKvSYQ6siyoeIqkqZCjUsFcnWpOCXEBpIxHqCMRBEKbYRkI2sPMVXurC+1ty7IIkkjumSuUTDBzZZIfW5GLT2gLTDp3U7CTJ1790oULbIRi/ShdXNLR1Tk1Me2ABbcdbxnY2tvdQx3I0sv29O0DWzEpSzZUg8nWzbWVcZixyoBABitfVKXxhESaZDWoRBCTqTgazNYRO46xjvrm4GVaFy0qoCQGySxZoAxgS0MZPpTePTJ/wVx4sgNWptkfEZJKqRz9bf1Ku2G8DcPltWFkgZXxDXM3o90F/s0It/siC9ByXjxcDskR82tlSA6/7almbgvxCnSMRsklwOnhNaTwzMRT1iFoqtWAEMrQsrulXFlSS8NA+Xv8asbK1wLbysBKf8ZAESvwKWHlRykAvPkpxYNUJYS38JOcKzRGt0UuKrnw5Bmn6nd2ZKjDkurLrFfCkNdDas+jG4RLU68ITk2W8UxVd4vAKqQIVBzdwSClaKl0bA/oamNWLBeTgVDjhGge7ZfsvYIJcJoBUKKEbkWp19LWUT91vbW9Y2p6lk0jKcS8QG9dmcEhYzk1UI1Nw7S4UYeBQAiKASY1WpLDwhf2xGysdUNxpu0pcgMoPlZxEaGFPnDgQLseJm8BQyuHoVpASxMZSkDO+TyZTStSrBSmRUu4+5Rr/k5PrrqKr0qZ30ok4cdfDsvJ1QDWoVDsIorkkC+AiJZjpnaLKOlTepYxyZGLp+QFhMrASn+O45lpUulYdKu6IqHwUE+n3GMlp4IwxIlGJK6yFaGtdAJM2mmX8ax8FjlmTwE8v5bKpUgBPFcsb7RO/nRn/FLV3wZ3w1cw0UViPgE0ShCps7dIIXhDfxGYPTDJyQtPApaIJiByESFj7imVljVCkD3SSeVLdFcHDxzOI4iqtSwVtB1J0F7AiQoPQ/ZIFQr0lRU29EYTTuug4Wgjouvqqm1okV9OlczH5eisCxuaTAP4pWXqz6OBjOOGWsMljxEq751DcoY2W/5yHKCMaHCIcw42xW468O1+IdMAJcQwB1Q+T1NkX4Ub2TevlCRmfVKgENKhTieJV4ctkti8wtmTNAYHpQBJPQAOB6VjF8BDaCH1QSP6bJyjGoq/rHxVV1JRzUmoiuAMPgjR46PeY6OzCJxwETwhibKjipM6OSsOIrDCwTBRAwKIdYlImBQEkmcXEdLQkDwRVnhKMf5UP5GvvzI3gFnKYlOciw97xYS8eiaHaL62Nsa6MZ3r69uiCm3RdPXTwMB2RyCqKKcacmaJlluOHr3fuYyDg5e33neUhYfKIfovrq6dOX2GoVZ9XcvD77rvxKsv/dAP/VBnT/vvfvY/P/PM0846dr3b89998qtf/YJznEg5+KO8qVAZJNGfLC7M9PZ09G/ZdvqNEx/5gY997at/yKy7pa22v3+r3BdnVxpqm7SgwzEHL1x+9N2POoXeJl+Wbw67VWn0vK+9+goDG2YeSFDTo8CYNCZFDtpGALa2i5nbK9qyqpbOnuiMei0ZOSrU0TW/9Vu/JZdt27fSFysvqVi4VGC+65FHHTYzcn3UvI/wqQQIKVMX2RXhmQPzaOSchRHEokRNbVtYb8SN3aivgXxvP4AQa1G0yYhZ88DT3uvhoWtYHqERWE1DMPYkrKJwraPlgOUEwgf6ylTbsBQ7DVrCxEbrigkNX/UvHkn0CJ/Ml7zSidsRFFptlE0yfvb5Vzvam9xc4A4CpUXnq+v1WkQPWx2dcIJpU0Pz+spwc1Or0qJdKxGYg2vYCOIWONTvlcFLrvi1iWz/XpfDnTZxIvj+8Cc+fvHypcmJsalJG31HDYL25shRTYX+u7Z6YWaacUsy6hm3TueiBH2SkY9zyqAopnUA5XQzgSwix1bzyDoLF2fPnlaDioRGlU2zwYR6Xh05qFM5hXgibhSTSHyzJifQ7Nq5xyfTKYJ71g2YVqpHhZJ1KWFV3DHeuWMHPQqj1bl0VZCvHJ2Fk5qQxe5dOywcmiHAwVTKXIhhGQJ68blnzRloQI1YlkcsIBw+cJDN67YtWz3tcndkq/sHGKZrMwA1RuZ6CoiwIAAxRc6rAfzo1Sc7hKFkRqDLpb+w8NbM0CZyRlcOySeL8UESKSRYThI4ClYCM35s1F/w0Egg4ffEa1RayuWtH5nZVK5RvHWadx4jSlNmoMl/C4gipPDc8rni5a4RMsf0uex0vjTqxwAgDAxNkTzhv5vLMYsYuXJELjx3S3hbeIKTGjFlnb8KhFXmC/zcbane2Wuy99gwSRQ9EV7Jg1u545NReCz5MfCwWdBYTquXUbhl7pQqMlEdX5q6Ynyp+tJrDpErTxFBl7JfNs5fmom1NLGpzFmvLa/QLNqLocixAkDKJi56i5E69pJmB9PUV8JAzoiwtnqdrTP9TWNrW2tXB2t49pEGn5SbNKKzyg0MAcylDGy8ZmExqmWto9cC68zKguMKWgk/U3FLavDZkRHrrXSf8WejqiS+qqvmdJBAeo35hZ6ucpTJJ01GexU2QCk/fJ/HXyzwJAdspROWXwtPxWt88j3SpZpAmykkAjAcbIReKS8wZEHK13JTRpwM6u0/pY1kZVckFM5VvmJWnIhRCUEk4XiFiBieUJ2G9jRqLT3ikwlTYjXCcMgwO1+KlWSvBXDR+POzyDS/lsPLbLJIU/ZEvslFrZVdSnsT+XLwm/1KIuuUsBSt0v9mKe/4tlFCkNVRsvXMFQjv5HLqnDVZl8Vplb2XsQkNacWql0+msUTTqJn1NaPJ5IRR0cgZ2+oMQHkFoCudUUhkV8kpeRWjHU5FS0jolVEY8szFTcCh+48rtuz+qyFqoCs4k+UamxqoQindTC6MjHA2VloDcAZ8T1cXCKJxmg+7oL0XQgEHYHNLm0yJO5wtqLC6MRyntaQsqnVVe0eCesjZsRvFgkPsMCHciK8UxCYLcfAUn3hnwOzrC8mPVCByiFzpjA0eOao2CFAC8niVShweAzHpyspAkhTXJSd4SaISqPJcnazby138PPhKxWUgajiDChSt9SfhTExOOHbhf47sc5TCfCwWNM2Ey72PL3XbFL9EzNn/fXhGNsDEgnFGKTwJbmymamqIuzCdPOAA6uCo9c6aOPHKyT/5yh9NTc7cd98DH//4JxobFqanZhBVPqfSWXkc64kLF89rZTcc19Y5eG39zLmTDk8ntExPjVTXNDPbXl+rvfe+o4tLsxfPjwwPXd65fYvtc5uq5h+8956p6dEpG4YcKUViseSytOpYT/qj1qbWPTv3MMZm6jE2MjY/M+9G6sXlKUMLCdOUld3tc995fvjqyME9+zUZah6+coVtz56dA9u2bRl45BGrYK7TVc/qXFurbXGoZ0Rmf44HogfhcbAAPpuYydVrQ7Os6lmrLC2SWr/70oumxBS7J19/HSXrFKjxjdOnkMR92+8TYnEHnMtXrlFM49eojuZaX5AXmiTd6WimTAyK+vsaNbVtqM6/oQM2aiywUVeDra2NjZ3OWV1j1UHIdKgqow8MsKba8gU6RXt2rSCwOHekuspswZxDiRJZReuJwHkVyNmTcPLkG/oRNGDrrlgYJul3Hdps3ljWbN26TSAka/KZP3OLS9+2eDrpAAEAAElEQVT4+pMDA13M4HwABTjKZVvZaOFpB+j3kSz11vb+7bbLqlOyKdHWetzo6LjsgbZyfeKNU+p0S3e/Dg9OW1sr0fMjH3ri3IXzzOYM0kReO4aHh+IeBLNMxisUYvbIb+3rdQpsGL6bjpsCpnsB1abWsX93aOiyA3mYx+iEDBCVLXpyU0N7xy4SBpmeCA5norzDcywakMUVWBwTFXN9fRgolApP0Uz0NTZupfxYDL9KFBlxoAyIKbvkPNYmbNBlqi8yp0SGTBzIfTMdPR3oG48AgY5f8+zdvcc9JotHlszlGuvDKN+5ChcuXUSvKsoNaLZr2CLjidg6u7vslkZYe/Yd0CRAqTE4AIiqtJxGkiM0lMgkkh/yWsQiauS7vtLc3lzTWG+KqT+zg2S+zIUQEXvoyFzBRYT4CRGqPKolj/KWOFEOhzxP4QLQn9plhpjBqE8e8D2NQBvCzl/zp8C5cGXMi4C38kQ3yDmKWRTqFvhlmAJR2oYAK+PfFqH4xJNcZKPu+Ut8viKBwOKtsly4jXDZe8I2I+x5M3aR7E09RUJQiogB59Y2LdBInneUyV0j56xTqUvtaxqK7NkO0GqnRXuzVP3Vbj0qSXJLGn7yekJQakw8hfvHX7hcIZ45JHtKRUvmv2mLcxq/SedOm6H1d0ejm2eoh1E+yiP7y8UumThyJxYwoluILIyJUAhCLh6aDwubGqbQdXis8ydM98OQX5LoHYzVQ7/CIiALWrhEJhVYRQ5JTiUDsGNYWJp3NmZjK21ZXe1I7eKaA+xqN7l+KNqbcXnMYEJ8YieMXSwkE+dQSQZDTw5sF41C0RBlPkPx7+6sUMr4EBlF8qiuosIr/blmhCTPTQoUEoUufpI38E5KPps/3aOZ+eGdDVxKFVVfAp+Bx7OUUQ6/+cxJPHMWnvw+Z5yLeF45Nel5M5ckjUlCIsqBBZAMJwc6/V0q7A2fpHZxbGCw7jI+OTsZFZ6caeUr7LKIlgqWOmyKFPDLWRa0WM66XAdFGd7EA5lUrsAzYVLkXngivAJkpX9DwLmifLpZY4GuYsLUX3igmolTgxodHPxjJ57uoKJst1ZLbFNNKpG00coYF4NZGv4kNDjGgBKnvoSpgYEeEMQpO5F1AWvvNGU5C6cfgkmy8TUPlE5XiAO4UptKLqXs4Ef6B1n/F2jcjMG0hfVDIyGBXwi/EdnA7YgYwAkDctENZZpHVccWGsqdKgtgdkzwIG9MhDxJSC4G07R2sRClbm4GtndLf1RPcrLOBTT6CwBWcrkUlSAEGhyUUmA2CqJC3GHyIK1phRqQVpENyqhWTCq3DA0asuDPbS0+CRaqPLm9MgI5QjkObULMbssVpnRBscEdc48I6ij3ujs8gPypnHww6JIuQIYBrMBfsyzPlU6LOn36rPkAiYjpyn/7038jbQiZb2ttv3D+Ms36+9//fpIVRSeNOPOHvfv2EGeffPIb3/7Mk3/n7/zcyI2rVy6fnZsft5PiwsXTLc0d5ChbddXK2Oj1rp7Ol1956crguXvvO/LlL32+qX5TY+yLbFCXduuam7S3tHZt6Sdqt+xuW3C77uJazabGkyfO2jxy+fzQ3/l7P/eb/+lXUbJ5gnMAnnvuuZ72XlLQU0NPDfT1OjuouytUwEG3jqO3hXZyhhitqGllLK6vRmm54ZQ9zxs1k2bFijWcSrB3hRWMODTOQH3yk5+k9SeFvvvd75YE+bW0HkVFoTjeVM0q3TmQltoOHz7ssCBEHlsp0mzZdBSZ89sggzJPvPLaSy9/9/3vfdSJLiauTYkLsouHA5WubqW1lxxnsbgQx7zUucYurqEweumv8iUWylpB0LBX4reEnBDIe6JPrruvG1UTpE3AIEmq9Eqbr3eoAbmIE/OWpDiWKuxxGEu98NLLH/rQhwie14dvPP/CyzToLlMM7Xu9m2tn3MXb0d7tNHqd2/0AO7dZEurr6ugOi/mYnDdETs0myr3qTmPQGTz9zLeYwezetffc6dOKYRO3TtjZ3tHbt4U4MOGI1KkpCZmxsKVJ27ic1mS2VGMzjWFUBaBLqOMgzc2NPT1xMVaLXc+Wc+pahA8Ph4VT9F0nfw1d1YSZv+zevSuzLawKVk7zfPnll3IdiWAiYI+eE74c/qUiJk1s0/0gmfvQ6zdUN4oMfpgKrMUcLkz8m7oho/qKDi/ba1eH1Kmqb2pozPH1a5Hp7WJuv0qeqLM+YOXITNpBYyYJppXkIRM4m4PHHfdjk8vIyDPPfMfaj+6k6kwTTWb0KM52Z/WW73+Wu4zw1lB4zC455WjClom1ZYefwUFbKkV9QhK1cXHCfhgwxHiJl/ifpgBpPE6mBmF+YGMjBWne4pm2ToZ4RsAqMR809rZcpYlLZYLMViBQGXjba+Wn768/556ft0EuAt8kjiQbolpZGMnLLpio7pwyylJaquqyEFAgoFEKv3GCHwQZZeeVR7NlD3/2FE+eDV3ETENFhpMTlnGL35yq8GwI5HsIBLDIK3sAQY06DnNBEwH9hX1j+ps310kIeCAZOu0Yv4NOOeSXiqDwUZOoleysrrBRdZIGLM9IaebqN6khQ9pPCFDgUF8ZRnli7A0XIjdKl2Xo1iJH4y7ocehQ+OVUvdS7ZasVC15WQJOzM/Wur6qtaVmLgR8+VCFzM6z+SldAaK/IX8liYhHqIriYXuA2YJpHWNiMbd3i8Dj1qylYlTxVCDzATLJCzAECDIzXwvoF1WDFoDWzxk4dlt9ihtrxxExkGuUpO6/ZlQNkWNm+qfYSXYlQjgulQIsDyhMmGKwJgLwwugJU9kTcMoQyweYs4nl77HLigL6Ri5ZNlBxpK1xOJ0Xhybh5jcBYBghUw5/+vHI5MuQxw/iGEjIJpQ8RucC8IqQiMMMTTUsBDLPSHgCVD37ps5/kIsfV5Zu1n2C+2aOidgAoaqvS/2bJK76lJIkhpEKpuYRRjkG5nJqz3KCm29qUC0pMJq+1NQ7kNfVesNdOd5xbciw10T/2+3LCSSdgEXeMZYqJjPVWIQZchZYdus3rxqkXL+zbt1cckY3a5sVU22QacwbHkogpayNUd49LVUMKN1bS9xMKATS2poP4YtpGEGGsA0ORg86Th07QUO5wDpnqO/yGMwmBhVhXX08e+2wk8kn3MUw3UjKnuzUNqWKyLO/s7ibrQBWSKkpaY3cukfKaSJA3UgXGA1i5c/xkggzKMoIz0AGxIdBwPDw8Yn7Ctp8QnMFK5UTFmZkFEwDzz5xcYAYLjRLoAngwAw5N4EPYTG7BUu5ZACPIOhmLHCl5hQsykjLTT9lTQVsVUd+hN3cQJS5lYZEzQ1AQjaj2aDFsq3Z1FyGQfGJL68DWHdqOXtlE8uiR47YBtLV2nHrjDMNs9fzqayf2799rA8D999/vNJnzF8688PwzDv0aGr7gukz7YOvrnBFs9rk8sM3Jnmcb6qv/z/+nv/Crv/bLF89f2LZlG27LznpqIi5VaKglUNUvzm6anZyxU6O5KXaBk4haG+sGtm9V4U1hkmZzgk3oSxYBghg0Snu7i5VIWshjUCuvr01t60c+czNTceHS3Jw0YiKALOxpcVSK9kwGuJjsOoVzfW1yLHZ9dLZ1iknX7J4yMucf/MEfkMqQxKOPPiIhYpbj3HxJwX9jZCx0zfM2fq/Q2MLW7Gh+fpb8lqmR/lkWpk+yBlYENT81Oe64CUnIWzi9I3BMkMwiPBs6O9c6WoXLYnJ8XBqjjYuhUKAjcLQODDWT4sAfTK/IQw3IEZJk7KHrQ1Te7Jfy4TeiaV+4EYZ1eYQtxFMpVJdPNc8/74avG/iGW3GtrWvm973vfWAZs77zne84aV4Ttna0yvvSlUHjWWdTG4v/j/3AD7k34Mtf/kOGQ9JOzyw11Y8CHVPw3t4De/dduniRAb2dE6xfLl++ePjIMVY79i6z1nNAUldnu0mQUrW1tk5uWm/ojFvc3BlsKGUuc8N1z2l+Q3EQy1JZT1/j9rU21SeV8O3bBwL7mho3AeferjoUEqVqJyxDvasCtSOOKsOSRMDl6Bi+lRw4DvYRX71897vfRe4OnCJzaySpeDzdUE1ax1O1xIQbVewrSMoA0BRTneCkcgdKLpYeZ0ZnLPc4k8gKKTTUuybR8IqjhaSyssZusqG72wxKG8Q2wJra2fngaxDOrBOewKJaBfQEIZdIcuIIhMXEPx2tbTbgK0FBAUXODtpYXAhVWFNM9w0WwXrKX0Nw4cd0isB4TREqQ3L8t3xmVnJnNKDyp8rnndH+/xVSlLTw3IbJm5RLnd6WKgp7a/qUvFTnt34pvWl9cfKTJ7sAm0z3RCqHxa/wyiauBOhrjhwtXXYCNX757c/wNwpeka+cUGa6e4NkZrt6jLEoEd8gohCEE5ISRTlFMDCS8dO/KCTGl54ghpyNckOS96/8dFgG8V2fCbktj7ymsIFEunOsKDJFnPmtLCjzQ9yPjGKeQcI2DwiZt6q1o3PZ2vPYJI0AHSTr/5a21pGR61t6e2MjQdwNZJNSdvhMCBzhksIvPQCMXudkMxPyuLGBysAOwRjfwwbacjbpOsoXRYJrli/dSVRHgLBmYaaNdThtX9/H91qspobklUUTQkEwrlR/UVucuvWEQmVz5vD8qTK8CKmMwC+LDATkHAfgSkLJ8YtUt8F881epuJxF9nvmJJVoRzUmV3zNkaP4yeWv6jO1WqkRchwqWFFC++tKl5ghxkJNhJQz2tBTESiLBCEoS7pooER1sVqTMQcrA5QqR4oM3raTCv5Fjm873cYRMzTfSp6gMjhb3uVKPN8nDsXK1xNRGo+WF1emJyf8uq0LmUVoGk2K1jF+CU+YhqLNV8NKUvpORq2m+GrEcEPoR4pOds8jo1yCvJNVvaK6AXdmOmYUkjj5x8grgiGsv78vW4mQh4xrRK4s2fOTEySXu0Ff4ChlWOhKQ3KwB4DfOA5z8wMDH9wAl3Uavpeo1Yg7Rj24Wi2oWYt9gDbcy1RCwjqwcFYEHmhzQEkrREwCnOIorHzB9HRFlEDDscHamTZSAcL2mNUtvwggsG7gjOMUk+Q3tcY+BMJ5ZpK7EgSA1S4yyi74V4VDd+W3EnlIklNJiAhTg94+2ZQkvn7fHCQw1xITiAlemZ0oTkZG3SqRyswSzo//+E/QOc7PLbuHlHSrnthSqM/du/cm64clgbg8OxE3ZD3++GOOXKHePHbMPcGvMw166OFHFKHhYtOBfQeuj1x3BLCNqe9+9KHXTz36jW98hYl52I+sVzfWNDsbLuy6NpG2GpyvrdU09d/7u/+I4JSqujoad33mf/1X/5hFUHtj50TV5IVzl2sdvepAzObmibGxPbt292/f7oxjspztKIzN6O+RpzUjJKFc0FYubW37snZXqXLJIpyyKzWHtmWE8NAzCkGrFjo8dQ3k6ooAxOlWXVTBLoMC+V2PPtbT3ceem3gmORnVhCKTnAj53AgXuiJjQx6Bk/DuK21Da3M7sHJRP57TM5OEfkAyncsLJmYFc2YXa5uIpspIcJdvpnAI86M0+EMYfOHgIG9+cMxevIoDPns8fiFEYp8Ccn290gWQxx59/KWXXqKr3759Bwt9axaI3gTit3770yA++MDDcXLT/DyL/IGt21kF9rQ43HT2C1/4ogNizW9On73a3lm9c0c/PM6ev+isHHcZOCP//R/4gH712quvMqM1/z567B6TiunZOai4Wks9yltRpdIkW/odlNRz5tw5JWxuac/Csd6Fl5qK8SgShbmyqTsJedS19tOlTVowaoHi+ApnBeY0oVeBonnFx7q6uvlrahvvvfd+8dWIknK2fRw4cMhuDxchA2hxQO28/vopcXp7u3UR9/LGrpSmZnb7dPtYA3pKs7qsgF9h6WVThbqWxIwQ2UFPdUNGs+Uat1imIFxudZiI41LLxuaWuoZYaVUoTM1X4ZD3KolwrAcEOQpRFGcKUXuYdNgtvbweU3YN2dwZ4oXIllTCgkHD18ZBGVam0ikncotKKA9+MQcQ39W3AnNNklp4EtuPyHc6RbszUAhesmH43eLLEc6eqgKecGbmfLfIICe0N8xh40CtYH8FgDwqM3cAQDiBnGTKXrzybAjobuEwxkENtpDPLmqVOjeU1km+LYPLeYX8mzKNvMuSAeAKnnEQvchLBDDLACK8+FR4iq/hoUp3QXAuUVl+ElNTKiMyNkPlUQnAqg3wU3ttUGSfboFcflFtZe8tv0X8XH+lWtxcxThb0RiSblpnUmDN3Si74NopR3+5dWRmatJ2lgULZbV1zhtpr4spvWMAbPZ3Ugmto7HRLrDQcKoKa1TWEeAcY2PgQchpaGmlRaCtZ1nDkkBPoT/Bcw4dODg5OlIu5pKNAgHDTCAEJjoKJhFx7jA9ZxhV1jc5v3/fgW3HWwIZVsjY+rg1yeYmxye3xj2GeMdaW7u2qZ6dth1/qa5a7YW6TPWGvWiVzhIXZpFCPA2W/QNbnfRFMnA6KJztZrM93+niuDMVkx0CGtZU37EKDAWpFeRAD6Iv0+O0d3bgM1ZOtBSuldhL8GgNm3plmDXrL7JWt5ohOm+ZTgrCSB5Nr7Y0crRaCLAaJr2IDyx+KEQu+F5+rW2sQyR4jyx8kkumzAQNiNzo+ed2Cr+FINIWSbwIwkCBD0mg5AsXHuQHJo8dXMooAmZ7dSjMRyUxCMItUIJ8Tdr9oCQwT0sBQNHSBaNLC54GBRMAAAFH3SUUyx25hPltyKVXiOXgVNjwhicFyQEaMTQ2h2AHmdxrYgZbSEk58Zs+ZQCBBD8Q8b/kylUpdeWcq9K/IWDJc3h4qjahQ9cAMaqALZwhTLJJVWdwjrFmfnrK8T9uxiFPqTHjjEOujbMiq141RmzwKiGwmoMjyoIGiOQEEHNUry1NITP5SpvvWAz2axb5TVynJsaAQmRjN66bJLe1tNuYFovzSelGcdbd3fnIIw+DD4iaAFxGcUXoInP9Obbd1GEGfTRgvCMwaUepeCQhbEFD7ZG2/RjyyFi0wjYTkgp0EDG1izY7d+Gi+CKPT06DkzpL8ENCwEo1qjCv1gvdQhAdp70trD4aG5oJYWnVP3YJS6s2KJihp5MSuSgB5JiIKnZzpjgxnVDzkGQW8vh73zs0NBLjSsJZElWEdZBbIKNWSk2VGXKS+AG3KRMopmtU5otzQVfIwsSVylV2ThcNm8ZkrRRP6pJEQpl2JM+uRLjl1+/5N02h0xATuEYmai18HqtrzO4xYRz8Jz/5kzkLNcb4AGIU6KxybIJQTEVQXroefqYvKMrtSdeuLdTVrL/rocNHDx28eJ5m+DTm7/KiM6fOSfGdZ5/uaOulpx4ZvfGv/rd///zz3zl67OCMs9Fa2l27xPCE3G/5BjtyFtPmptoPfegjf+kv/SW5IIwL58/q8kxLnvvuk+9593u++rU/mF1d6GzvWlm+wKSDnE3f2lTX8IH3vPf68LV5hoK7w+Z+aPAywsCB63sx0tjKTN9qhummxUuXB1ta27EgmiBLr4qDfkTW1lgmyU2bdvf2nj53+gc+/kOyRslziwsunHEpRFtnB5JGEmqhrmHqc5/73F/+5E92dMbeFfUAyIUL5/hBAE1/AvmRRx5BYDu274rbtKbHv/b1r6A64rFVLzwQYZtEiYxE1Sc8CcPoHKjpqVm3FI2Mjb9++hQyNtGNq9wRUlMjBKxZ6Z46C9La0j8gieyO7joOW/YjyDvjoLuJrAXN3C5fHpTdiy++rMiyRpY1ooph8Ovr3UIb/dM//dNPfuvpL3zhC3ogAd0igLGNRCVfAxWTrO0923/mp3/2X/7C/+vF757ctWf7/Q8eO3HiVbhqY4Ogcg4OzZ58/ZTjmbq6u2nXmNkeOnIYx3HeDjsgB2ZfWDnP6EjT6u3qWrHhp5rM2xjsj01OtKzGzXySwM8TGmqno70zC9NCsC+inVoOlhdn91osd5FIjHxozo4Fz9QHw6KL2BAqkzCXTFJybJeNWpNKN1YLgHPHjx//9re//cUvfvHTn/40mdt6lkaCgJsR1XxbZ7vMqBPlrWbRE+SQLPiaQMewZwgQJGXpU6toG05bagwFlBGYUokQ2KezEVB2T2//1WvD5A+Nh4kIgZWm4pC75pRc7pILUUvYDYGPJ5iclSAcMO5wKal76ZPLukYcMGTcZCZhRlByQrJPVZS6fdafZkWQz+UI5RQ3f+/2qQB+M+qb+8q5pN/S481TvKOvICp71EmqgfzK/46AvEnkBBybLukLA75KCxb6jll0dN3keLILKOXA/Oktn7mwiY/fEhdile/5NZ7vEH4lkLfj13P1Kyr5Vdcjux/IOGwfcJgFIdySrbAOEitfNUwLW7DvsC2sb2pr71IWnQiSCJ4TTd8JCEnqFc5CzbHKOOzC6IRD8kWWXeogDe7fUXWGcAYCq0suO2T0sGz6QGqJKtrspmR3R9V2dfe1tnXYGHj0+L3W0ojdGP3o+BiWZfuXoXr7jm2uJrx+fXh0dIxlKj4DKBRi93HZlesBUTmurm1uKTZE6tS+w6fOTCeOP4+9k7iiEOGu6oMehmGi7TQFMm5bc5xoHsVbX3OnCUZkqhKLHW4iMB4z2SbubSQKlHOPX5Dza+EpvgopfyzFzO+3hBax7/CU6TCT6M3n3ZKX498EVBnzzq9qTNQUp9QLcnzP7LkJKDh4vKmc8JRm2iU1ao5WJCk8lckr/eUI+Rc4lcRf6s4FtNLnWDyqTP3WfgkVNicvoL11sncSAz2LLgtTE0pcY4SQEDE3bTJEusfCOZlxlZlbIR2RUceoNbZ9G1mMpPTxiNOrPmXcNxiZj4lmRmZQYG1LCjKag5nHx9T1QjnKgyQjz3SwntHQgKukvd1bgOVEEE0voD73NJyl/Y2t8hqfGCUYCBTHpNlgR2rUL3KvcVEUzEHwavscl7sMPWMIKNX6YB2phaP+h5UNDYZROlFP9oXgQ8MTfE9p5QJPnswf9DDFNP6KYOIhL8hDD1gIuzTNOKur+goB/kyr0ADEagcP5NWJcEKROOCDCY4QLjeHp/haAoZcvMYEAOMRMerN/5Int52gcgiP+IRRSvAUvZwkJ3zng0Kk/54dfUsy11S0BANGPKkH3oS5ua2tPS8K2UU9cuM6ysGJT7zy7PPPfq2udpVoazPJux9+16mzZ9hnuWPu5Re/+9h73o/8du3YbpJJEeyuzu6O9pmRsTpn77Q1qTyy0+LS3IGDRx588OHHHnvs6We++cd//IdkuanJSU3kWJfVNRtzX92xc+upU2fmphZaWM00t/W0d1M079h3wCQGfIdSsfIwUWFms1Sz5GJdlMDsAt9w3o5T45l1sEB3wmZvfx+jdMdIstyOm+ZY26SLCLU4EtXolMKU16YyCMm01qKB1k+UsGrYEs0yCIL5/Oc/v3vPTsdjanYyLWMfgUgOsV24cAm19PWdRGm7d13r7umcHB8hUY+PTbo1+R73wDbUmvxg/o4SMj1eWlzxNBCYKliPsig9PDImI+SKgOnlIRATnoUFTxSrC+jFMgWf/CwO8RXyovFrQUROxgbBZoknnnjClODJJ58kZ5IkFRYQx+dPOP+qraFZUffs2/+3//bfHti2g/3TxSuD5iiGsVB0rax2dna57/b68PCF85f+x//hHxksH374wTPnzjojb8f2nRcuXTLuD10bdZz9fQ/sN534N7/0bzGjY0ePfuA974Ol2wEps1588cVtA9vdKKHB6upjqk1utsRjrLSMbqKpJ6j3dAHupETqmvU/qkNMPqvKhflYklMqHYZplJhMhgwQGlftM19zE+7yUrAD9nzo2A48hrYxf1mjmgz1KkU+FSAWQPUOZnAHu3gXpkZG46KKJz78USaJlkTOXbikTtPuZ9eEbbFmZIawY9s26WJ9MdYTO0GT0TgLrZVxke1u1fDsdaBtOwTdJI/iEOXFtDKQ20PzUMmAozharrbOXT8hGOGA5gxYjCSalse8UB1qbPQnRBIHlxFE5LWwvFDdYCdAWJWpH2UvxAW4ka7AdAtTGiyzeJp4UGYoJe2gSVGoA8kaHqoGEwomlbjSzZ5e9mVuVX4r/cb4ycbinbgce0No7wTMXeOCfKdTYwJzmuLrXUG86QfVizEGsy8LDQHY/3coWGf2elvdRWAZzzfF4ubHhE+MHcGkk/ARCxQuCk2vCc3bePfNtH8WPquYUEKPrO3mZtzpOT7tz0Uq6WSDGL3dgVcdajnzZzfDu4EEQ8SY9AtEDmFd0ldVgfPYibQU8n+ovTUiBtG3bacTC6rrmu34wqlq6xsWl+Kgbl/DptjxYq63tge/3gzDdCKOAMZerdGFkiBmHC4Daoz5QBw50jI2MT6/vHj9xsjs4vTI6DWzC3en03dgKeyT6cWpoOO20sUF0xq1a4CPdifg2ceQbIwonyxlWD6g0sOyLHI2xmzdjcV1Zj4JqWBc/BJWU+E4LXEetlW1DXr9ar2D1eJ8BQwqDsAk41JE09LhZUFk6RxS42/Rjjy51e7iCVpMLV9q24iW/uKn7HzL3lKkjX4yfaax3+dMp/Es579Rmoow8FPkyCd3jTLAEJuivOVJXcYEeZC2+EOZwRuiU2gz/MUiQCW0ilxyMXJAZJRc4amMWPb7mEUsJBDFia6ctoQEAuVchPMXryW4ZRBv/lt0wwygAFKqwjdP/Da+Wk0h2qvC2NMSvCi6EjLL9WmMo8t2fuLC3DT9rK8Lc4tJlTcVM8wkKBMmgpJD5U9pvYkI0t7WWlXd6qIAVshL8wt6D0REdp6PzrgcQ3Osxms1gYhWP71xPeySle7ShUHhoBnvSPwGPeZskMFxjYb6NcMG8XOLS3Lf8ftA82q8023Bt0wHjrKI5uwVHg5P6N2yheRmp4qBTwi//m1YlJfklwcHc235lJhKjZ5vShFnZ2X5O2k9dckoQtKtimk8hSc48ors0mGDxlCfVAtrbKMtgQludGvwZNQMGiD8OIkBWqZKByacoy4s3VccwAKOmBwkSR5eYzRWPkQnQRByuKKdsYTUuYIm0xcRYp4bJB+KSzFLnQ5XL1JVeuBQ+fqWfhncEeeWEJliP+IITcsFEb2Es64oOLQUYZrhtPb9+w6ay7n5+6WXX7x69QqhaOjKpYceOtbT1Ut14iaoxrrGjtZWiyfffeHEgw884gj0mdk4S2fbwJbOrraluWlHnzgEMpYJ2bJ30ug09W9t6+pt+KV/9y9JpAzMYFFfV9W3tbemHiGG7f7B/YemJ+dmJqVti6WkuSVjh3o28zSvcMQ+2VczM3p3glB7ZzdTCLdLS+4W6tbOrs6O7qnZGceDhuk/o6KJKZuP8XwHzmprGKKEnr5euRt5/B0k2h86ZBGbuMzQQ4sjcrs6zXxeeuXl++67/9rQdZjoX878VC2m0MgeJoiNCG0bJ824OiSFoi74nz5zjl7r+sjo737ucw899OCOHTvtiWWd1lvXh95YfLP0pv0mmaPPEydeuzE6bsMxsVAuqg5JZQoHX0n3Hzjw6GOPoVg5OpCa5hrt6VmZyDWc9QSdyZ5gMwTED5TuY1YDNzGp7WODMOsdYq7e9fjjj3/0Yz9oAvfRj36UCcqJV18jBFsLGL426mD7vXsOblq2MNfq7K8rg8NVNS7WrjEvcX8mQmQmpKswVJerwdOgfW34+u/8l8888q5HDbrTE9PEd1sObAI+cviYtW8osreBgBmPxTzdhp19T0+frm6asdocWgr9UN2lDSiUA3Gsp7mLWtCjHEcVHXXRUuHy/Obl6hkDaG1SjjgAzZogzQcNIjO++bBGWHSYqRP65hoWVpCCknO6tCrODAJMCDDSUg8oiSOdIy+HQE1Ozzz73HdfPvFqPXGinjVYsxPSPJkLb9u2Hfdsb+vAK9mlugui0Z4XE49kSogOYKhW8RrVjSHKi4sulVYDTEWraxYRIh6nVbSrNkZ/agatZHJBWJAEKhJS2wyPmm07MLdqJe6DkFFtdSzcx7opp3uWWIlG4JLEko6u9yLTeKYJADIycYi5U6oyn3i4HC3wexsu8nob0SqjFLnIqMirwhtxg8sUbgOGVXzbwKMOitBUIyFV5HJF9VQ40XJIEf/teKL+EnogvZ34bydOxtNT5Py8M9VdsjNQxDAf0lLZ3Qkhp70LhFKyN/9ahv0Wv4BE+9aQTTbV0Xcnh5iNyHEyUPoag0gQW01DUwstjDkt5QbyxgckRclImkcpUl+Jh64hJHps1eaZ6dFde3Z7ayQ7W7atj5tZnB7IyMck36IsK57Ghtq2dhyglnEC4346frkAEte8b940M4u3juOVVA8uTXz1jdevDV/FK6rrql2ubsOSfY5ZQWIgtI9taSU2S0E+XLmzJMJX6wkpsstc3NGh/4aU4nD0JOPS30BbL7ZO53gBX+lSZhdnurb2uNMdK5MYZ5iaCBUMJhL6C9rQuCrESXBMmKrzNKC83eFmE0OksiWK1+TxyV8m9UC7xBDKJchlycmLhJXQsr9MRbk33XxuJEBEigIUT+HP4WSXMrQMO941q6f6SRwrkvP7HCHJH1CSy2mytXIOyVwOThG1oioKf+Ep5XfzJ+JzIVeFmjPUrqpKpkFcaRYtrggZjRQ35J2bAN6JLyWPR4ZZJK0EWOkvItzNA5SJIlRzjwiEV1dsNU+EFwtNBn7DluO2mSRT/mt8N85bKtYRDTEi6IvkADWvC+zbv0ffVBV05UY0gWg4TtONg/IWdcPYql62g6edNZaxEJJ1zt3ARP6gSPPHAUXoh1uW1O2P08SOanXxE5dzN5BZAQBcXlAy2PFMTIXmS6Dn2Hgo/gSCE9d8NjRX19bleYJhVBYOQNTfA89k6K8G1BUkPaWKhNF0YR7GX+AJUjHQG9ONm2BCwFALB+X1FcxsHSSh+Nu398KECoD+DnD9lEWAygeZ/QDIOJWEslb5GQHRhMCc48nSc2CTXMw0o1dGxxSvQJgnOQXxFwWJCHe4DQPviPV2AjYAXiRTdn55FR49JHAqYVVOu17V37d1dm4au2PaZYb5wQ884Vy1f/UL/+zIgUPnmebXWFeZeeGFF1HI2Nj41cE3Nq3V2BFKlazyDh7Yd2P0musCXn3pYlejkxJWG6leWtqaWztm5xfOXzx78o1XNRBa7d/SwTZzemq0amyRMLe4tD5xxZ7hOUs/zGO2bd2+Y2Dbjeuje3fuMvEjzKANbcpDfE/N18iGRcuCphGIwqQ7vF0BtX5WzgYtpd0mnopJa5VpXhOjagktPWlQJ+MzYicfIhV6pUxRpNML5y46viXuI4tjN6dI2Nu2bUVgqWs0Xr16DXnQ5ILp1F0jlM5o/nDgwMEf+uEffv2119i82OxLb4XMRsfHL54/z2T2qqNpk07XIsWWrduo45944gnw4axP6YageQUZWcJZ0YSTYGNZLOw5YyuOV1/NZiGjWvRBOmhlfM973uNQIzXASsqrzT0zP/mTP3nuwoXPfvazrsXBHci+JhM798ShNNTDjhGlWGtubmcjdM7cZT5uGzZiWdR3ss/glauXrwwN7Ng2fH3YAnpre9ONsYmt/f0DfX1YyejIjfrqmu++/NLOnbu3btn20R+8h87ehAnMsK2/cenVk29Yg4M9VZdplbLNTC+YU166dIXWH0dQmBDKt/YpCcFXkyBNbYYYrCErIZv+1DfYm8aRGiYJDHJgMjfHqiy0fkIYPxEvCBIsipTZUcG5yrQuCAgFAvgLKYRfxWlRLtiHMbkhKloNoKqxsYkLZ8+4w9pUb+jaddZT3/zWM3FFwBywNaYuzoEifKAY2wDUElLr7OqRBaajZMzO5K7BnEQ7ORWtqCymLEgqx4GGTMXJrSu5yAouZuZQo/NM37rjQjSsuWptbmVJu2ZORIVY7rRJiI/9jkl5ln7ASbWUlQreEE2pM6uKeI8QC5clg9oc8qd/ZpQq4UCjcML5K7/+6f1FjjzZgamMOVMhRRY5pHh9p54CeHjCdvOdAkhlLzPcnLgSvbcJTtEi/5R7qWIr5idF9WZPet6sgbeXxd1sIDaGg1ciRIweWnTwxGGjIapGwERRz5rVOnTOyZ3kMb+8MjU7Nz413RTX8rRZ1EXt4iPsXBu31smaU+RYuRNr8FNKIFp/wj1VXTKsizt+Q+pvqTdjYGi8cH3eKsFqbd3ccmAbawQMD4h69fX4xY3JcdQ3OT3BModkUt9Yu7gyP2utcvOaPZQzbIpWNtEvqGFsZ3UpPKSMXGmwsl6m5xAjbctZrlp2ACB111L9kqUBs7K4B40iwD+lTxoBe5LZMNSuVe87sFtDYG4WYrvqO8N+tKHZRjFzh81TIYrShsT5NuT/tIUrCCU5WfstKoQ/I1N4Kl5TgpA0Ig6kIZ+DimeO/H18lrJMEItceOQO5wJtHu2bCSCipeKpsajM9JJRTc/0LcEC1W/+xJ+hReoUnvKMCNnzJk8Q0teAhaVnqISyLLQFBiko5Rl+AhDd95sArPwUcwXnTiVFQwoPaimBKhFOZfTvxQ844zn7RVJVhAY6E4lRQEiuFuTUaNtiI2OY5ebGOLpENPp+c1GRVT4tbE9vV3t72N+TWuyGdQKnMcggVZsO1xIT2sjekwYNZCHQJfQLzCMO9S7bemOjqvMJHAMooUpGUhFWyFtyMZaZeltDSwiHjV9CJqZ/chT//MXLlKmGXYjBhwBn4JNKZzX8jk1MWtaQO4sOBk2dy6tkOPpaaQNg7BOJZpI2O4KgPppPThRCRFO66uqwtqdYlYTMyk6KYCCks7OD9QGhTRHISSPXwyaZtCQLMobiWCwh+UEJzvY0Mx4xxVBTMsWgQJOF2vDMOKRTDHwMjscpIxwRmphorEwLqET0m+QqWnI2OlnYiU9cLld++poDvx/PTMy5F9wOL1bD8pCE6nkSngUykEoJpA2DBdeaTk/PMCexDmCnqAWVv/ZTf72pbvkPfv9zK21Le3buOnnqpK3DM9OXUODxYw8439NcddvO7Yr57W9/a+zGSAc7opHrnW2trDGJWMQP6nmHxdDQ1zU2uDVidPJGS0uDqYGDf3q624l4XZ39dYw8m1bqauq3ul+gp8cOK5KYi6TsWqF5Jb5OT4yTYLu74p7gI8eO5g6iOVRmNETSPsQ9rat9O5Z3CteCHIoyyTUBQH5m0QcOHHjiiSeY/SAGvFoqtOGJEpJmOXaw2NIAZv+WLbKwPoCn+YqkQUNOeQgD1oCm4zDTt8L24osvOO/B1s+nv/2dL3zu81aPd+3Yed8D99vJ1rdlKzl5247tM1PTxGOmSgjeuoG0qh1BZkkVreqDiFOnANy0BGXCmY09vb47lUWz8H55bjAjI3JnR5Wzm6xRAzIzPWfudPjQUakkr/n5n//5P/qjPzp6/LgCW36m9XeujpGYcExhb+puCOwfoCzrb25pPbn4xt/8+b+l56iLS4OXfvs/f9oCBIX64NCVxqbmheVFa+yd3T1G25deeUVdswtrrnXf1vRHPvyD+/cfGBoaBu197/sA7Nn8KJXVGUxzaGgwNtHWxpnZJ189RQxWNpVonkDxwBJL8cxMbCTCPoi/OqS5Djlbv7MQIaYGUPvKkwjUo8rFIsK1rjILJ6Pzq5oYWVPv0pZetZaSkkvwIGB1ftG0pVqWaVN9i0uCrBQyM6AtIsEfiXur7+Fvb9EqISighjNvnLl85aIzoWg7XESnLGfPnjdJ0ECmBO5cMAiaaMHcYhBjMgYJqMd6RdCjdai0RgkHWXsqu5aDGzwhqaep8BQ/9AppniMik6a4MC+CErvJhTL8gAk9gEvOaJS4h2g5jicnVtlT4gUiSJKj5U+VT5hUvhb+EHY2/hJRQMsJb3pSoNfscpziGWlEKBhPvJSZUPr0lo8iOzH5ORkpV4JUqoGcdf70lgBviwCd+HdzjC/JIrdFe8vXm+W/NerdSiv+rRHzWykwfy3DjF+fK5/F60ZAIixH3ujrhvluFFFYEJXtnOTeFQc1I+ZMz9ZYmf5ELlad7KG1GSDWpixA1nX3WNttmJ1bsqhYbUWxtmGz9bqYQZi+htUxq1jKtGTEZ3q8YosXgWy5hq6cdcNSS4ttx+tuEHEEhFEfY8He5xYc7r95btZJ0PNLVTUdC3QW9C6Of4vrwsL6hvVOvVvuX7A32O6ulqZ6p4zEIQyzTkoPSckZhjgVG1MmAK7FYT6oowX+mZ7LBO8V99hkxSOFe0bHtJpcE+uiQ9cGFd8haivL9a44MfJs6e3b0bp9/6F9hoTNFwOeiYLVSguLcf+AHfv23LHNiJ1etaGctuErJhIhcOTcN3wWgamCSzElySQTP+kv9+5SqDTfk9Nr3jJdZRbZH/0wCxapotQSpickOmY6x4cnsaGCcUkXSUs/qS+rnBxUIJCjeI3w5ApPEedWT2W0KEjETwVS7VAolJ38GZRn9Pe36RKGxXShwD+BugmkEmCl/y0zCThIF4UYj/iT8tse6uzxNOQh8+rWFrsrGczTdG/tH0gngo/TiRKvGdk41396eurq1UEjF0LljI8sj4ElK3S3dZHpyS7CiQGeKytx+KIBCPxkXGPubDl9wWZ9a/5W1bRmzlqqpKSMjg+UYcunNJyFYKTFuWsMB1JT+wR4ksI7jbySJBKJaufRrWZHR9nxtnd2xaCWzjqM+TMrEFeFpjtWg6LSXj6BYHoFk0xpxAcNwpwcad+wBQIZP/TUj1EewkptkG1tabdMkXMXX7Z0sQS+vXv3eyX8iUb37xmWDmGgOGGBTnKVKVM58sgahvxcbhchOVCc7G5OAGJOWVoo8Em6SBJFMVDzas0SkAxKXoWH//vkblJjARDC/PIqPJnwU+45fvHcbIuHDectzbFgS3lBthkbnfh3v/Rv9u/un568/vobJ1j4jIzZSRW7/AevDP71n/mbSIZxdW9fWKR84hOf+J3PfJou9fjeA/U1tZOjxDDXqDs0socZiKMU0A99f9VmNwQ3tbuOaW0R9z7laJblydaWjhl7anfs0JqM0h968EE3VZw5/UbQ6mo0MZU5GmhpbhKHDE2QE6gFUYKW9fQVWWZ5T5G1vq/Z5RrQLgK1rJjIQPK2xRb1gIo83YqNhHjMWGyCZztHfYyWxFcbbGxMeEDTfZw4j8LlRs4EStYHDx25OnSFKQoy+8s/+VcAURsETqhmTOSr+JKHzboqYwWb2kUf1L8QGFAc4GRyiKFqc1S921eqcwfVCMwdSikgQ4Ak3JojwZnczkgJnjAEREjNb//2bzth9I/+5E/I0w7EgI2Vgr/7d/+uq9I+9X/89qkz51m7gH7l8mBbR6eafeqpZ9QCLI/fd/yRdz925vwZBwEdPraT7dHUzNSFc+ftylcLW/q3yGBicmp0ftQluH/wR3/46smTx4/da8bz9W9+g1EQhPQo2vpWdoMMB+MoiDDiPXTomIXED37wie3bt5GkbXFwFTNGppC6McjEATWl8FCFxr79h5NVcRhBagMhvgKl8IqnUnLPN4sSn+WW5Y+mlmZ+zlchSEG17t0fEwbtwS+tT4A48GXw2oi9A6SWpGrPfV4OaxY6EIbO29HZceDwkfsefMDMENNbXnQ1yazJvxUF19JRfrh8wHN42JkJ0xcuXnr9jTd8NaJ5huSf7ngLCks7M1Ab0oeAFoJPpldF4+C5vrI6MjfCT/q302HWrULLpXmCJBycFZ4aPxkchG7GjLWQ9VEs1EuuNDo5kSAkLJ9Cm0K5Wp4YlOOVo280CuJYGNibTAAy7QJx05OOHlLPhbstoz/la4ANJlaazGSPeojg5OJbcvm1QOxt5quS9Uf/weCPpwpIDfo2IeRo0vJsyIbfEZzbIkfJtGiWpsrfIuy/lguWZEHCrl+7qpbn1TzFNqpOp/HEsIdN6+YoNdVetVU1ywQjo2OEi6XFZfNv5IiqAPDkD3uPtIOHGT2bBP3S5S7O4VleiCtUzLH1O9NZdsAOeXCzL3ub+tnahuY6R7jbBzC3aIlhkpqhbWl1dnHFiidi14FQhPMoWtuaaDAnZybrmxyvUr2ywBJgxu4Z/NdsBp7wXVnUT71G1arHGL5Vph6c6CwO8mpt8WxvbWcNAaXq1bAtxNZujNU588eWh5jp1Fe5nKmptfnl775y/cY1u9yO3XOUblJBHGFAJAvrxPrmuN80Du4KvQB5F3GmXEuPyjZMuETArR6oxV/R4OEr/tIHIWVXCe92vzgJeg5P/lTuVPLbI3vP8TPkys85XEG4IpwfEyulymlSZQovvZUDxUEAmSkVnyKwiFnC6maZRSsyusNz10+5L+f4RUbJE+18B5y7BKSIUuXCZjiippC7JHmHwaRcpLtsuhiZoEwmQLFhRn2mTBUeryNbx2AqMJ1f3UYCIHA4vhB9knHxLcO9sQNi9gAkOg+dveF4anSSfko/VSEGQRCy5a3hz4B+7Vpc1mngMmYbsESwti0yCMnRrEMmUrGZZnM7Nn7DoJyRgWoMYcn4R17i6GUCLeTLi/NJFzb+8oBJciJaqR66wrWF+ZbW2CpjcJRQKrl7pgPxYsFQINsJKsBzZ84Kh5gCWoTPkIGCmIITwlQFOYxQmIb7dfds0l4LB9k5h9SiGBQpgk5Bcmh4ZlTpRq8ND1vUh5IcfcoNneBEU4tW2ZhCcu6eGiuvF0a81B+lkhHnPG/jrggFmUWEO9yGgWKlRr8j9t0DynByZ7wpD4DjU+6jyVPqrQE/NIhi3sRKIEpgo6FBbVfdt2+Hg3NILP/4H/+TT/+n/31rP43n5onJ6zsGdph8fvQHf+DXfvU3vvTFLztr0YSKRPfUU09eH7nq9Pme7i1XL0821Te74/TDH/1EW0fXnv37z144TwPye7/3hfHx6zaoa66l3k3bB/osJVsBWlyNi4Fr2mvZIHFnTp/W1juPHXv95KvanbCrZSn+1fnU5IRqoMtH+Wo7qCWd2w5nNClmLqanaMGxmQYR1VaWKONt+ETt4vuKNsiKw9eHPFEdUAqOohKhxnnxtEy6lR6hj7D4t1lZNOQREvXCEuEemZNdTTUFkrfvvf8+NiBOIurr32ql4uVXXnXF2ODVMBMCE2JBFWlTjdy7u4LO4ZDxB00HFO4pUw0hCTyVF2IE5qmJaYFewbE8IqGO6VXrKDiTe6pzQISLDKua4WsjBh36aef9M+a7Onj9gQcecqIuc7/tO3fV1DYbm4euDm/dNmC3sqJaUiSVsju8dmNYz1RNlHAUdX/8x3/c29ujj/V2d5tCOLHNuRxdTvcaaCEgWc2RMfUD/be82JXt3RcLEO5PZrDjtE1lVhIjYltLw9DQtQP797tCFN4HDh2k+9+5e9eBfXsJ7trG/cxPfuObYxOjVouI79pyYVPsMdJpAeTUlFc9mcKAWDA/EduxTaoam2Prxt59++ua6jtbO1o6Wm0DYVYflxIZ6Nerpm1Xshtk06rn5MyNGmv6Lc3btg7ML4ZKAzJGa5e0qX2elqZVFEO1maYfbitrVXaVbsF0cmqixYKICu2IZRTRHNvk0sMWaxftHRZMyPEWMUOS0P2DapkBm0NC0yrqOHrFz+WmP2JDiNbdAmbYdAPAOuzNuSpKvYhUl8laoSMUOVYZwyXL4U12K8YV48gIryo0Cgg9UTuKv2WgFYpolIsTJ6JRSGBIFc8silWGBFsgqnGxRI5BbPi0II4txlc5gGyYiklD6DkK56s7lFJ+Rdj35IkMkkSeihKPQC+57wne7YlK8MNoOJZaci6umqKpSJO6mBikkpgQpNoJAJUlLQCqK0y/QrYglvonVJcut0IR+66eMDSVUYIWi8xc1KNnJElT5fTVizj5A4+/u7XXneEJEoqJ1n6Lp2xdeGca6Wo/q/Q4FKfvxFkqcfQWYoz107DnjiUshwQtNrd1xwEA6bJGBqDV09OImcNh0UoWghObA0K9VC3MzbmDz96euemZidGx0b4RW9AOHnIo9TI+gwVT8ZOLXLWOH+jbW7s6YCIuZX9HR8vWrX0DW7ZY+v+lX/w3yysLTqZrbml6/dXh/t5dFFFz85PqTq8xuDuMVF822BBl3BwzMToRM5NSHebqjZrBaqxrO+RSGoQG1ehJ1RRIq86XsKXYtmAwGRywycCF3vuR99HB6PjmQefOnQRh21ZrBcMOv1tqiTXAkt2/lY5ov8hI8sgpOX4ZlN9ufqqMExQgBvJMQ3e8hWmCmX1sLPYhSAHmajN53tEjmiTwUhm3PJPcGRkFtPIzEA0/Vhfdooy3AhjqsIWk6UzBUa7YBlzqU2owsA8nBARoAx7FEi/YY5QkDuNKNbRxPQQmd7qEefCiVEeqRRQsicFVQqCUQPG4/BJxy5zwTniVIVEUZQ0KADZtbBSSk1fGq/SXOmll0Jv4NR3WWR2tAOe1GP7FTiSRPWtGljqtXV9rwzvZyPQzutKmTQQU0okRivqfghCtMrExjBh4jObkGKCMQIy0fSJM6LY+GdTMlk3gBWoiREu4AQ1kS2TM8FhBEJ1FgEPYF0zb0BkaNFYMwundvJJsiLu2IejXYyNjniAYqXli1pJsgdS29UCSj7SS6AnmNATBmjUdwYli85vbmOEthVEEg2E33TM1NHfIy0eGuc2bHDyAIhUNWGd/2QwklCrVBCdwXo2zem30VD8W6TS3r+6SgnlvX3cuoFqVdRrETVpCTzE4eAVMiom+/t7amjpG0VeGruUSZW6gIIyOhMCfbtJrTAsS5XimSovA8JuWRdvFV37cojb0dX6jwq1qarT4GPRZJngUf7O/R/tWuKDbwhX0WUmrG/qLJBt65Kw5SmOx9HpGWoKNX2/Be6IT68ytYWVWh36IkkgFNZo9Toxd/+Rf/quf/9zvHDhyz6uvvnRteHBiZq6ndwvr9oce3H/x8gVC4MJFpvALly6dF7m+qmGgd/vmleql5fVtAztb27sPHbynu9eJ9Dvuve+RX/jf/nlt9ZotBn19Her46uVLTc0tozcutbS39W7pvToyRMbbu2/fd198kR5168D2vQf2Xbs8SMwlNS0uULePwxBuhEBthHLc2YoS8mWsW/r68Wf15k632K5dUx3hLgJrbSHB98S1D6UbAwSSlVmwO7we8Eceffe27XHJ7si1awRmx4yCb4cNxS3LOnuMyZkxxjEkGRs9d+6C034yb6Q9l/v73vcBW4dV43vf+z5zoaNHjxPlQdOPNbWuql9odD1ROEnbXWZeQcv9Qv9CMtTfOqzKF6iAAiVEsdrCOrb4pv9xmpCJNCmSFd/S/I0bq4NXL7/38feLcOXyVXanDz74oBW8mtdeO8Va5sd/9IN/9JU/WV+rc+YvYXtxYf3pp56/cvWqLsE8l9Xc4sLq5OTsylpct8EUBzehNoOr+R9SUHOtdfXLM3PtjU2Xzpxhlu6QvmUi7Nrq0vzUjn37Dh48bLiZnBglw9fVbh69cW3nLszIfoX6z/zOf4YiUyLrDHv27GMYQ8p1mtR999+/pb/fSQGnz575/T/4MlbX0dk5sHXr8Xvu+cjHfmDPvt0WX1Q6WjSgwiqzG9QJK09swuRPDT5x3z24lSoTjoyt+JsYsBsjPS/a5B2ygjUXpyZv7ux2iHEPpd1K02q7kwuX4hxlJNLb2Wm94vS5c8BqCXDaWlowGiciy7S6xjWEHfqG6wEwOl3c8VIsDfI6Tu3s7NlzZw8ePtQ/sIUpm8597fowkwGLrFahTNE2L622t6rD5k3b+tPMZQVVOZrNIEJZYzpjAmDjxPXr18wmrcCiLZOEq0PDY1bKVtwqN2+NjFEzqckcqMmB6+vLtZvNdxeaG+Kgoep6HKZCBiUypiFcf2ZLqkSpUHEAVqaw2L9JFK1gAmV/adAMtoIxpGckVofBeOOsA3yNzYLpQDAJnMLojDPiVME2gp1wSANXCx26D9LETAV6OgwBIdIVp2476yKGOXHfiaNstRKEtVITWca2A216YsJTHgD5AzLz1/z6jqDDh31LIBWjYXRzm/B0XKgWOvcopmuWlT1KbVSI1RVhiJxsEB7VFdOCxFEjdrxGXC4qpgQph5TCU/KIcLuTIC5SsCqtquPah4XNSy6X0rZ11sQsYhqcWNuvYQSm360NzaTv3HQpQ+DlC4HUJgE8hhw/CWeeEuXAXNkrn9Fit4b4KlV7c1zQ414UEQy3lpQo9czI3c8yPTfrqI7phdnq2ga8IdrbrGATI4F5SJrIp6zZvE3psEICueSSOBijqZMNazdVDQ9epWIw0zBUb/nwR0j2TOWtEVdVkxBmCDYk+5VZR0O0URk0VrkTfvLs6Ss3ujqvX22fm97/nWfG8NZrQ0OY2Njo0PDVJRfyXR8cnhqZWl9eb6UEnZi0VZHsNDE+e/jglkUsk7poE6OL1F9SkaKqIFRTrayOMrs6TKF1/fi992A7f/3n/sb/+I/+p8Fzg//D//I//rN/9s8aW5vmJ2e7tvX9jZ//m53dXS7wxsGvXLo8sGXr1atD2wZ2dHd10SucOXnWCkFN9awGEQGP0qJmHyrAeBtlL4kW0XoiBALJldsrUVLIw2kKqLeRkKNFIqa+FrNKFbS+GXe12tDY3qGDCGGcEcIc3pjOjMPfAI9Mo6OUHuWfFJKmEKkPIRuEXXrKyOl7hDgEZphAx5ZedHbdw5mvWtkwqRSWaHuo8RwQPjPF5pMw2t7RSO5iEgYTXCiyTpKzTKGduERoMkTgzLB0FURvhhYlskq+GUVksUpNJAwrqiV5Kx5B3RoRzmu2i6okeGKEkUttNaOzuvqGXCHaETJiw4WEpjKif94Er+Q3XyBVdmb+wIZgHlw0kiWEaWQq4occWHIKcTNxOfCuv/Bh+jw/yxS2kb0y+nPaXXVzg4phQuYobOxUzyJntLY0kQJMsamoVoeWdf/6KmMR6iJXuxJojMRAKA9huqrGFX3Xhm7IVY+oaa/TsyeT6E+cEF/MuP8mDPuWkZ5NcV4oxSBj/Z5OzTili2lcw02a8sfRFKQTmi/KO5E5/XlyahalRREawjJnejxOyBBCd1ZXH0ZHlrMFkbHIbQwD7EwWDQ5O9u5oazUa6P7Xr8WYLlA0X/OT+paCMwvxrJA05ixjhIvnDuzbb92goa7eVWN0djT9sc8QF6qqdjbA5ctXjNEsdE0ibP9V/Lwu4YxI3SG62Oh6X38fJaApQ5CwIwHm5rYODLS1z1s8NEeKEU/91NcrSKzykcYc1tcct0QpvhKpE0QTMr12xg3xQ02FEuI8cRcQdcQAXY0zLzouWB8I4oxZSJpEpAlBvMIsaGljOoGB79EP9e+38UwjrxTZ3YQZFJud/PIgEE+oJ1oNJERG0anPxPC3aTn0I4klBphQgbV19LqO9dEnfqi/t2tweGJ+dfNHf+DPDV4bcxSPM/WPHz1yefCUW1Zs71pdmu5oaZiZnLl44bVtW3eZkf2//9W/+NjH//yBI7FKQC/ubJyf/dmf++V//2/s2KxvrLty+dzAzv7BwcuTS8td1UtjcxPOXxkcvdbV0b3j4L7f/NVfe/zRx+yfqKqr39bXd+P6iHF6W3/s99WdKWFZWRp9zp0+o1PwXx2+dv7UGRMJk0NTQU9iJLWsQXNucszAcfbUDffEk8v37N6NrZEkt+3YiUv8x//wK9t27T134Q9MJin45xdXe7pa1+c3vfrca0IcdqTRieN0UiRDfQECDz70EPOeYH2xux29VP/on/sLv/iLv/jLL/+HH/7Ex187cVI4/Th1sYmHJCBw+h2HWuxq1iszbUffSZom1Y3kcFeEaqLKoyNYUTEDN2nv7GqnsSZtHji03+1sTLNsxUHkr7/x2szctEU5Y5B1b5f89m/tq/mpv/rX4KdD6YdXB6/pz6++enJiatrkqqW14/XTZ6R0nMXg4NVt27eTmYlS8wvrNFtO2iNwBM1WVaeFePLGSmtTo6mVfsJqHoMdvzG6fUvfyPCQ29rMdTAfO8FnpufhahOtLtTZ0/0TP/ETrPypCix7OOHbAZrnzp9XMKv7KsJm3D179/Kb6Jh/Y2Ff+9rX6Mg/+clP5qvpXM1gdcJprz5RGKig1sY2FWQ8pk93hk82+HEtsXmCKZcFDZsttvZvMVHTFWP2Fuv1bfxGXJgb1BUqaRaCI5x+4w1oaMgD+/b5Grws2UcSQbRclDQdsSyCImh1d2Lzaw8xzVheOXHizNlzT3z4QyIja58GBrZoTkLF9ethwIN3wlZVAGsToFTUAVibGuB8AhMLtnKChhxqout5nZlbWq+unZpbPHd5+JnnX6oan2jrbtQHKTWMNXpn9FRjESYSrty3gSuJBHhFfgkpTIz8mhhI6uniJebw5k+pCGX0dhlIzAEM0QEy4Bv70kiXsgjuFJyFxIdTJX1gzjTS4q2Q9B+XDwwTPqHhC82IRJH0HbkAkdw7SvV2IgfrK3H00BjG2B+jvAJHfcWneFlPCx/RCvBPLPxO2Cllkv7zlIDcAJAhNlV8Kb5CRP3c1WUgubHhkdegc3PH4kAIj1yJAIQUl0JkmBs+VXcGG19jGEouSznFE9HEyADdiqdOtDgfcrylqtrW5oWG6oW5yeGhurjbKwlehh+1YVkKYrBTYF3AyEfZpx+B5AwD8wEIYHDGUQ5FhVAjO0Ny1WaMw46hSxcuCiGam4FhmjQchtroTY6N29xA6+mUnY72Vvt6By+dMzO346unt9sJuxfOvWE7oW64aW2xp3Pbo4886oSxzpYOB9j94e99ecuWrUQpS5e0AOCrTnLq2uIqjcb8pgU4R+vECoaq9j1++rduoX0wGDBoxEYeeexR6iKv9Da/+Ev/1t4q55a0d3Xr188+/8J73/teyDz11FNuPjROuGaRyvT066d9DTrxRDuOdEg3gkWfIC0o883umVqi4nHXTyGma8X4ScILDxEUZ6gyTGrSIM3kgkbKLkPLz4rg8ufSb4l1JKlDUH6NZ4kigi4cEBl0EVZcPEHCTi9OPUM/t7eaupZHZ9GkOjkiwzd4ok4D84RDLjs44Sln5GMATVGDV2Tsxc8uPr+1k5fygekwV8jlTqhfR9bl3lrJM1PfTr1ChIh0dxeCYsQMLYiYgepbpADrlrzuDju+BGuPZ54KqdhwIBhBqM+Vy6gxPmWD4FxsOF9Z2j6wlSrLgBK9KC2zG9S8ckZMfSdGzFbHVcXRgU7mVDE6Wq5MA41UInAEiyStOnXUKGR+GtolDWeczfgDqM/GAGqcSmsO5KdANUktQoyAnFmufW3GR1+hGminEzbDcrWcNfNnoHQH8Yny/DqLyEIAhJ5ULtHDMYjZwtXACoFjMTbmKiNMZMpYgH9yfGI6nZGS5yS0vBCWuyFYQmPr4OXLrqciY4EMeRVieix5sIhNmxy0bUMqcUqlcepxeW4RFvxKBD4Kig2CS8s1DQbCIEdpc6l5OK1folHEkIZFz+CBKRpqyXF4MIBEKshSgwqOwvrxTBTKk4k9glOdixlKmeyy582fpahv+ZPHi+igt9EuVi3zxFwCL670E95UurB86OoZuzF8fWzq/gce27Fz/0/91U/+7M/9tWe//ZT9ryh0tGrt1MnXaaPt1iDV1LQ7gmnm+o3xru6B/+/v/PZXvv61f/J//38cv/c+Ki1qgoGBvldevvTCC8//xE/8+W899dVXXzu9fVfXyBjFeX9nT9fo9TGn1ddtrn38A+8nUrDuJxmuUiQxrF5Zmp2aautoRxIMv9AMKnIaDyHN6lBPZ0jViIpiF/dGGxyi6rYJtL15enL02NF7iLICCYxz8zGVtZzsxt+HHnmkr69fLmHzu7mGHbp1EJNPlk5uBPsH/+AfIFFg9RdaWmSW6VZ8BGO7+cT4zJa+bUxgCMwExqnJoGqTaMZRRg2iL4W47iMQDUuCPtE2xDxB0x3Ah5WvUd+4arKjE58HqcDTJzEB2bFjn2sHgtSbG4xH0pLz9WIrA3q6vQHz869LUvPss8865P7Jp59yttHf/Fs/x/Tnj7/y1R/9sR+7cOGizRoO5WAkZzo+PDykt6tHe4Wlt9Ua27bXTzd4+MGHIPrVr34loeUE334tJ6ZTV4n7s8mmZWx0ascOG5y77d2lb6CvZK2rA5t5U6VbjIAxldsrJ14zoWHPa3JM9NdXKTPYY2kGG3GEiKwVbSX5p//0n8Lkgx/84COtj0qrOqzyuPlBDzdAa4DtA9v8qS8Y0hmoIxxB8kfMtKanhq8OnT79Bu1IdV2tGaF54d5du/HNuFaa9qTRPaOhllL1+/btcc9od2cHbb3qk5fCate+njBbEkGI2lfReIdcZqZmXxu1c7zPJyeI08g8+MAD9r34au6rxoeuXhVZAW0gPj9ysTcJB6oOHJUWvCztCVbJ6idnpziZ3VBm2N8t0CZLRzC1tHVQqykjEsz6UvUgC8QZzEM/XU1m1JW9VHjZicmV3yJhxVsR/BaenMYTVgEgOaXgeHNi/pIHWmWGJSTFip7EE9sdy2JJUphIG4wSWndBf2PEMgK+ZU+BQ6WniLMxiLuHBi6JMeei5ohROoVNXLGUNFogdH4kxeySlVQqi8cd5YnYd2QqYa63wnNHlHJu5XrOeeVQ/uwpgNwt+VuF34lapNDaGyTcvIm9ob4Tx73FGn7cDaQj6CcFPlJBKTvDpzhJFAvx15G8TurwtHtf/JxW/HS4QsxkqAD1C92QZgGzM2DrGrqJyMgP62DGzFzHEc/uD9BJR0aDBTuiuau3h1RD8e+Veb3jA9733g9wn//s5+3X39qzRUJLuQaDA/t309/YYACxhrBAjkMGAYdwvGTcsydwpGi4BuDOmp00QLq/acDFixdgjuE21cV2w8uDV5pam1zB1N5qG9k6ZZJjzS6eP4cJNNQ2YHEWJ7/1zSfBl5FKwFWUSH+XaeRb6hUxR0ZNMUOERIit0b8yToUn8EqUf5unMjD7A/WNXBFe8pRi5Z+U9UapbgsrgAjXjIwjYGtVOnBmLJfmpAl/3DHpRIka8EmNqMsI9JpdghDenEURmMNz9/IsvZbLnisnJ7n1WQKl3gJmOWH4kl/C6J9ll8GW8i4DKr1u3C1KkQAIUH8GLvBMgMGvzAK9GTh8TYNFPfGltaWZVYwQ3cTTSEoYQmCQ0omSvsl5OCFhIDwkJ0RXdQaFOEI4nuxHqyQnQ5hcPL2KH8+VRZK0xQHRhKB/badjiiwLIpcQcCDA+SSy19yvdQ0Iy9EzxP109iiPhLH/MckxkVe6uQxAY5xOITyXVDEBB1BxBHK+yjp3PYXiAY3SjZ+0JyMSlUqABgaSi8++3yHrHa0dujD80Z0Dgppb41ZXyaO8DjaxNJkWJeRIBpuanrVErxSqlANN2XmgkV8jNL3mkPzMIUV4ERghZTKpjFPpL+DwfF9ciWvcCmvDwCKKflv4Q8t1s0uU7AkTKUZJ9B+mTaZ5n/y//OUH7jv+a7/+740Abrz6+le/wqKLBSirFrfubt+225LSvr27R4auTo1Pdfe3XR8ZbO3oG5+4/o//yT/817/4i7/2a782OHjpoYfvib8H73nl5e+cOXXy3uN7Wtu7Ll0eevC++52B8trQay5fNxn+C3/+Rybw+vl5rWwBYaCnhwjBWgSeCEMbqU98FRXh0lg0bLUp4hei+cTBljnG8UePHLp0/hyJ0WDhohlLWNRGItDYgrBjYEARBSIGajv62rNnTpmLHj10eOr9EyY2ABLlwQQ1eDhpYXllbGoaAhwtD1P5nTt2OW7GplniaEyD40DLNVMIJKcv5k4EPVMIp+OYC6hVCKBPaAMiMj+Sjjzy0Ji6amqCUAQ4nsswl7f9gIPIHRDEzMfoZo1CT9QRJGdA5VmjH/7bf//LetcHnvjgU08/HZYEayv/+l//ax2ODft99z1AXW4Z4oEHHqDKItfqFHCVClqmAarM2T6mzd3dPYjZ4jrkqLPjDJzZOSfFdrS06Ie2tr704isjo5P09UND1y9dvNLeGXcdV9XEqPD+D7yXiG+ETtwh1hzVo+aRBfgi6Lc6LRssvRE0taAhzQQ+9alP/ZfPfVYtmNw43zQOMkqVpXnEV05tr0KB4uDsKTn1W393z71MgyyaspFwPOjifFtL2+T05MLcAkt//+yypTeRdezoXV9BDSYzrB7ZTqEDi9ezM4uWRDlKLAMy7aCq14TpVKFZaKh6uZtK7tq9QwMZDggZADosCObHjh8xoYQndYpCcanewAgguYBCwBEnlyIizS+0NoY55hREh5eb2uKUXMoPNTkR97WnHmgAw4tCytRpE59KEieYoBVOZCGVgfkthdwSs0jylp4E4fa0OaOMW45QjhZDkalKSAWhdwsWk3JPwemhWjHXhP7NwDf35exVUVHADNOzMiQH5pA3B1j5NbSauElUHXUHGHBT57cXuTJJRAqGWcRR0sJfGbHkD5gIKjVlpCx7NoiagnL8yq855DY4IhTQKiN/z/6M2G3J1QUCpoo3TLONWbNTXQyNka66C0Hf4KHBVaFqKFswI3hOJBhy/GiexxM0vRsTzH1BYI7m6St2QWoXIW0WDMNlHYEQwChIIncPU81duTpklW92wSg+5+ZAe2gcZuA0UBsC9coPfvBD2CMdkosOP/Ubn1Ko2pp6+xstnBj+gcIxZpdjvb6ypKWya5qknjl27z1w7tvST6rAXqwDUJoQbPt6uqI8Tgqamt6xayeO1N3ZhR3px5QaTn978utP4tSvvPCywMzNPZXLq7toJMyFTYRWohmBGZMNPYkWb84KsmyRYiK6m4J1ZVkq/WKWIkdoyqicW4qWQ0pBlQkjdplWbwvPn2yPxDXLfkwp9ommdZ2EFbKIrhQuXV6ePGV68HIbzPicXejBNyiaj7clKb9GsoyGxsswQmYpV06OVrymCLd31wy6MoMKP2Sig6OQEvCKjMveyl+x3oKB3BobxUUAQQFrlEvhAEI8HG0YYxMdBtUZoSyxOfbH2EfayOKC5CofNSIzHuNUVoKidgLBkYMHiQjIEv2LLzLIniRpfVCIdjRAG1vFN/YheH1R1xPokzgkeACB5RCwJykHnuITMwJEOgBKTB0h7Hks4CVUcl66Uq1b9JKpgw7Vun1A2swTROBi+E3n+ymsT+IIAQqeoilXqgb1wMBsWi48GTFfFU2IUiudtJDPUwIeWOns8rX+Jo60MDdzFRnwHDI5OUU7mea0UdsggOwZrZgbJqOYGLhAWZcDbv4Kv9Vlwo+ZgHDx8vNmguS7NTBTXI58W8Q3ewXeWFQhvt+MfCv8ivASH8g5Rnjqq6URKhR6FQXnn4zVp4XLly7YbfXqide++Y1v/Tf/zU+5qehHPvFjTz31jauDl3fu2M/q+tVXX3GZlxMg9u7fNTZ6Y/DqyM6WgdVNtXZCbKpe/J/+0d9T5/banj7jBMj6f/G//j/n5+bvvS8Opt+8qWHPjgMP3/fQs88+Nz894/oAIgJzOHs1R2/csF9rYNuW3QMDFPP2W7LmghKVUm4mjagjhLZ0ZYWYjnI0Ym539EzmtHPAITEdDnVIRjgoWetLRU3jPEzLXtJC0AmnDMMQebsJ56YdVy5dWFtc/uiHPvzZ//K7O97zWOPO3fapUr/qgDGTthlgePj0mTNOIEI8a5tqXBuFgCHGJkWvgQOiVWkyTaJfLGQhS5Kg2iYjQ0Bt5CJkapTEJ08EZsiDvNc85TbvTqaV00JMadA89b8OSJA281F80jtpOXcNSWq+/dyzVivZtLncl7WQrRLMgUZHZ+UwNDzsIgOGNAz3hUvDOsrYBrnQ08dWobBVwhrOnDl39OhhFwEuLgy5n8vubJ3CllarCk2NLY0NLfff9+Dly4M93f2uyrGZmAnQ+GTMwi11qIWnnn4SB9DX9uzd78xQS2rKqa5z/8S55KimPvaxjznnSExZC1Ep1lbeOHP6lVdecUbQl7/85W984xtq1owHApIrMLW9isPXVLHIJO9UuXFB3ezC7OSNMaI7BUBzWzOj1GSuvGbRkAVwTT1z+9gwZO8/FZ3qO336lC5vicipPg4U7O/fkuwWcFqY67Sxhgkxv/ZaUWteuXKVOZAQhlVMIGCiArEYCz0qh/GqqZQDm0vmH2k3N1Sz03g4Eb/knioZmXIItN5ppNqjuck1dz6ZbYcJ1twMXiRaLDxnDoIlhaSKhoJWKjlL9qMenuwXgZPXRvwqf7zrM9Oiz3Ln7hqv/CFnark0zIVo+5JdQowzyYGQUeLRHMGq8Kzy17f8TdkzJYqikzYZUPDETD32C2qkwBC8DDX9lLJ7S8g5gsQS8KdHhKUa9JZwjJVTKORZS2qJiBI8rbIIXlO0+FZ2xgmhSTWagoCFKm/hKcfc+DcqTR6RIly8JhcFLsMRwF+JSY7z/X2apCIjvcxlgBagHK/pgOck7YdqwaeEUQkrVeF8rSC9MCWLOYB1POnc3K53W8pbZU+uL8UNXmGbbi0BN9QR9A6RsQLRjOX8lh2iLc00/HcmT2ebk6EV7cqgBbel9fEpwhB+JUaytouj2U6fOr91y5bdu/ZePHv+9ZOnoEHPaL+N0wV6O+MwtFis16PS9QVgc0UNF5XGmM02MiqWRx55xNF4rnNhk6mb/52/999jGr/5W7+1Y9d2npefemH3J60tjBtmKC/2791DpeAVdx7odbP9qeGhkbCyThMAhcLWZadckWnkXHI5Xy+VzSpQSIFS5WvETB9yegCjlpIr4mdQxauP/G+jKxcpSp6csHhGJumLX/w8jXmYZIx8QjSirXkRR6ywyAknuldIculL+louXRFSxBE7ljhvjZyxydBKmN36k+HoL3LmB9531MWfkLiJRvqq9wYLvenKvexmSIUvAdGRi1pXkMwz3jRZBYQ394LPiROoJqcThaYnSSrUjQYFxIP1UU8hJJb+OiMRQdws06tbyY1HxBqpDKypZ0U0HQqtkkXE9ElM0HJ2FKsgaDVxPLNTM0bbfLYKYk7omHGEE0FCwDm5e9Vnudo4HchO/jC2yY6+X0L73mAlO2iYAPBLEug11OVohBghYiIkcYBSuhwio8wKxB8bnzb0gxM0lG4UlgQOtLbiAyLQK/i5i5ExmPPoFbWhpDCfmVUQMR34ozPCXF6GE5kC7tORo8cJPyLIIiOc8VSHXiubJr/mEM/CIzx/gkk5OIfd8qyM//0hnVvAv92XSt1/5TjGuq8AIY5K9uq/nZM7tvU019MxN9rq+a9+4f9zdfD8hfPnNPzOnXtds2LJlOnmX/nLP+XM+3/4D/9vXT31Da21bd0tZ85ecNjyloFdDvthqG0geN/73v3SSy9cvnjFSTizdU47carcghtgHPRw5vXTVy5cWV2Iq9bdpT5ybfjo/oOrjlFoqO/p6hao7RChPkEhawKgMgVy5EBSLwrUfEhIm5LjTU2RMUeXeuni+a19pXM5J2dmNTTpUdGy1l98enB3DPtDDMssQ1qat2/bStY/9cbJrf29r554ubujc/TGdTfPXhq84pgKB8Cwhdm9c0/r4eMt7R2vnTpNoEXSEHCaS01tiyUTYFlDQUMgEmXKJF+BSMsApCCKA3lfeYKs0+Q2F0rNg4b+9SnlOnBgn7RU3A899JAI/I8//jgahq2CkJPHxybjaOm1uF6gs6OhpqOr01YYRmxmS8zi7ZF1TM3ho7taOzqt19CfmXUR0givKog0DCdH98gyE6grkLES2cMPY4eZHgWVluZWFWGV4cKZ06ran3uy7r33fob7A1t3QujSlcuGyR27doH/nWefgdxzz33HjJCBreMLQEjTjLhjj/GPq5hzLgogazjIUX35dPzI0XvvvVc07Zo/efIzE7LewY/NmQ/o7SD098blXOuri2vNbXZNEQpdunx9eGhlyC1FuN1mR4s7X4jBqi0UzjuyHvKeRx9xW5sZDoN/ajlTIEbD9O4W+sUQ0t/fY/uE6Zriq9bpqTA4Q1tOXLInQ0m1t8EezipHe1jVtGWcRsZ0AnXaRqMJJZGW04Seoqle8YNjlq2MFJlIdOP68PJia1Vdw9LC/PISu2RMqj5IhHVvbPdMPCgPOmmcKHpp9uRW8+TAz/HlmEMqR8TbEt71NdSgMaJnUDlafs1Mgb+IADvaqUQmMi9jGQNkJM9zlRhucRohiaeEIU3+mEG/6bOIKHmly4mE8BThGasc+KZQKz6SGMKsPgR91adkJjDW2WHKD3aG7y2Axw6IHFjg5XsWwStDKuDjquWCQ6yowEiWaqMyauEvilAUzaccWEAoXu+WcQHtbXo2xAfGpPhY0AnVB0PMUJwbRBmrzU7TzJUkvUAvZZMRVkcoEECvQRZpXJRKpxAiPAdKIVru3TqFDuWTniInnNFXfQ0b0dON/qR5nESPcCScOE1hfuOI/8XrI9dM0Tvau1whiVE9/9x33eXugLY/+eOvW0bQtednZw4e2ufAfsoCe9T03E3LwXNzHyk1cUVzyE4cHdBRbjb6U+1/9etf+/Ef/3H5Mgm1S+rSxYuUTrsO75mxCXF8fP7q/Ne/+jWs4/jRo+1tbZ//3c/+wEd/EGvNpVOiLNkAO+9AstyOuZrKz1Kgn7LzJXujuoqXMg34JCzXKk92ObAMIH7LX+I3vaePZcA3X8p5pZCNHyUI6WNq2by0GxISNJQx2F1su9MXoolRTECNjp52EaX2DjzKTkLenFk5LH4z0pWo5zh3f6ZUGVrAy7UVgHL9FFmUXyOCr5UA80tl0E1/mipEijvchoFibRT3jsTlgFDnABQnxsQ+GptU1CHnu15ggECHqtVg5DSd1c1rtUsx4vhq+CboGJo1h74jCTnDq9GQNJy7UsbQcCm+4utTxdADOCLXvwT6pPlAAMrCjm5iGJEvaJ7o1ngHrCFY1jSORnmBkggBgeErIDkQwlLR9/lq5Q5AWQdtrG82DuauPT8XC/46hSQiCMzYipl7vfjw5IdSpE1HhfJIxY8hKKl+p/gSwoFcETJAqjSnGBEDMwSf3Eic0RZCtJAcF+Jin2iaQbHelpEagA8Eco4lnBPyGayEPNnva67YSg9/JjCfgrzKhFzEyUnyMwcWfq9AFs/vgX5uJecEqQLJ0nv5Z6N807cgutKoVFnY/ft3ToxaXF21x5oJsqt6LfysLLu6ZfXI4XtdrMQG3d2xJ187a8/GB5/46NXhEx1djfc8ePza6IhLXLdv3/LU08/u3rlXm/76r/5HiwDLS3MuCpuesO10efDy1cMH+28MjZw9fU4TuPuFLWh3d9eO7QOvv/qaueLhfbt37NiG3TA/MS/VD2hY9AqUBlvkB6zWkRY9oHzkkVtZc8AZhZAVZyYnnnnmGZHnl5ZpjZ1chFGj6kw/jhJyxR5RWVpnTDzz5NcdWTm/tMgcBnAy54XaWgod9h1AsfaUC8joChEyB9VHdCX4ICQSKax0AfSmj4DPz+WOjNR5qIklgWQmvBQSB+shyLysp18oDpJWUkiSOXN8MxZStAmPV084KJE4SgpPcGQksKbLptuLF6zYD+zYTtfGrkWTs4MX1e1cRnEbc9nrG20feeQhWDItMkzCNdVm2MldvjSoj1G367TsrxjzWCVQbOeBKjZ1F/Mj6vDFhSW1s3dPaBFgYNBFN/YiKAbtAucwUPuP4WMG75MiiQl1CnhVraaqq9ts0L06P2uzowtGp6cmXjkxKiMRYomgvrYpXdGsspTNbAw+NnnYD759IO5y++7zz1qsaG5sYLmIj3Z0tR/cf+jQkYMDW7a1OtlghSJlnfV/V3ebM4JcDlrvrJLqamc5YSAOYyLV0Fg5sQdrWZyf7uvbYhpi1/XoyBAVI2oz4TSqNTe3jVwfdUWdCQA6gNuObdvOu358VqHDyNiOZ20mo1hUqnJXi/0SpQED5ppEg8E8cxxEwK/smg2VaGm2URSi2FZNNYtMqv9pEjVM2C6IVrjcb5P4hNVFZ721J5deBapqz7IrALxdj4SEVrGzRt8zp4xdjWXmlBEQjsFX8LvbhZJQ5UXidLqfuAEaZD8Z5Nt6KmpO4JldTsZfeDYMf1vQw24lBt3MQ8FJfNw0II674Xzi4uQ6IkUcZlK1CV3d4pI4EbKOv1sKlhR5pZYCRCLws+cWALe+FOW6NbhUCUXyu0W7LdUGr7epP8sxSOllb8UvWb02VIZ4F6PJZQa883N0+JT7OofDYRxDk504yIbch6+tqCjCTCJD9SlCMKYk08eKtZUcG13WQ2dMR67zktF91U10BzFjRhVHSbknxZn8Lh50zZcDyZy/Oat7En2MIokzzjr6A9fatXcfzuvkh2984xud9v7+4R831bIebsdqnJYwG9ckzTY32Dm2QANijUE7yigP06V2zyWOClh3RaVdRPsO7j945JDOrgufOvU6+IYQy5XDN4apVD/8oQ9+57lnT77+6jPffsrq3fXBawePH/yjL31557adjPpYu9pH2NnZkxsLl8BN4GmTlAyiy5SyS7r8TMYVhKEmM4Xd1sTxmj7kCJ4cSPlZBllKm1+LrxEn51rOO0WIl5xXEb/wSJLxrwwp9YfUoDaCiKCZoODJL0lia7Wb11dQU57nJfwwRH+BBMvA5DfJzh0sPEJKz6CgiFW4Ive7eCKiT0oRnuRPQfHgiuLl1xwmXiW00kvqoZXhd/oDYHKF58447zwkpORc1fGkrIqKX3XsjzHRSV9GOtv8HH0bx9stLugyBht9x1istlGX5PBBYDxGIkOnMYjf4G7QMZMQLTtwJTQGoeqckJ8T6JMOyK8/Ivtt23ZInhHTJUVgwkAqMDKSYFpawgrXfFvP0iOl1aFyfJE5+Jh4CNevDegsJQQiEpk6405GekQWzUFOPT32SoIgibT8AHry5ykHxLwC4imJ5LphQK6qwgo4RVaouVndd3G+xgVIYfMjpkBr6k6MBJCfraCpUFzovRScK0BNT6sloIzaCpqo3upW2CABLo628Ef14KlCCge37OdJriDbTIZFxAi/+fJ9991Fn2Y82iCrUHBtELxhkJLjJs6GdAiPk1V3bt9lv88rL53YuXOblsTFO9p7vvTal6X9737+bzrP5zd/87euj187fPzI8trszt07/tuf+ZkvfvHLp86c2tLf+8KT3+3b2bVzO0uVyTo3A8/N33Ps4CsnTu0Y6Hl+7FnHZmo+UiJKIKA7Oh07GLoytHPHtkP79i4vLDqeBuGsLMUqDY2rHPM+eM+MucZtqK+NQNcora/OTE+OjY74FPOB1WXmPR/5gY+9613vYrTiwAZkQJgWed4J1ENXSeUXL54nW7NwIW3v2rn96W8/5XpdFG5V69HHHhO/q5uiuR2RoEArBrqkNnVM6paBgWP33S93y8vojogLQ4QkRO0h0RuWDtLYh9JY7gFrfFNMnZSErKPxyAgF6g7C4Uw+RHv8ipzJmz+S2ymX17KuXWPv5BBSlQaCTypNdhLqWTWOn7ZXmsw6kbYkO5bHyDeubPNhYPPxj38crucvXGKoY4oDOQp7F/TCG9Kk3pB8FxagRRMgg0cefpeGeeGF53yFEAgP3nvPBz7wgc9+9vO0LWqEBRLp3BKPCYY1iNdPv/71r3/9sfe8++mnn9650wwkVm1IyYqEI4ipMLq0zqnYYKpHMwp+wGUnd8cWKYb28ISe2VX2WKyAJJxBdp+zVpHw8OGD7S3NqknFCUEcL77w3afmviW5ChVfBRHctbcs8BfzPAY2yMSxQURulYADmOooBcjBDlLx5civTnUB1whqe9MkmGOyiumTBjMv0iQmJHYyCHnuuedQG7up3Xt2JGOfEJsUMHGWaD+viqOMyp6ZC2gNtVWN1Q6Am+rspp6RQ/B+VQHzlH2wHoo0g2Qa48pDRerDYmbqBzkQLbsc+D0/SfxGoQxMxea6rYSW8xLCY+6UlPs5ekoVJgkhTKZJEB8kLcyYhabxPglAldDe0p8lGhmImZ+VnrdM/uYRAFcKmPFgjVYnICgrxTJBk9ZXT+NAWsWI8YAaOtYCGDnEyoZEG/HZO3KFeQZ1x5eNAyJ+IbxUFHzj2N+P0KJubwHmFt9lZxQ2kDmqqtfmqtYdwG+UtbIXVZOc6kl/0Tqc9f51M4BwJSoC0GRhcmwCVScXlKDLpiL6ElbL9XWxcwax6Sm6CasEx2rr0fqLg7D0CyMOJr/SsHLj/EV90GTbNensGLdtGzD8YyyvX7x0+PARpzizSGyub8JzHOx2/fqw44Ow4aXgfhPd7R2yXp4Pm4dsm+5VITwD3fTUYTm9+zd/8zfzop+vx44d++KXfv/d736XwxX0349+9KP4iTkAdur4FBG+8PnPstYgfGAgoVLq6iZWZcgKhQdSwObqklHOrnjy3OlytA3DA93kxCmiFZ7yx5u/PmVMbga9bd9tYAMUeidcxN1m0Y45QkjwERxGX5zeEaJ3MIIaJsA5NzFz5MrMi5DsKV5vQk7V9Zb4S5j7S0BIFVSAkrbwp6zfVoctkLyt8m4FVcT63j0lgNFEji0N3IIQyxWbesecg2movYxceqI5uAFUBGO0hSZ0qOPoKcY7ArqRyyeCiMHF0wgFrq/COcQpcu5iXiPLJFIbuIHK8rcF0RiHkhFObk1JQgG3daskPAQDACWRkVyMF/qvfmrMBZmHwR6sMFCv4kR3Xo6BT3IArXJLLryoSdkZ8iCTn2LK0VeRBVqN9xSo7GLqm4rvK4TlLqbuL6GygwkyG22BBHbFMSIDElmn2zkxH4EGZSgBJbIDxHyVXGX6pAgC4Qm+TDkwsyc/E7cv0bNPXFGKitfUfvn9jmeGfEfwf62AGK3wn+i5nK5SUn2loNwxotRKEFwqyu505gMHdo2NuxV2em7eYZK7cbMHH3ikqSHW/vfvO4So9u454Lj5SxcHlzctTLupcXWus7uftG0NVjOdev3M3qPbzV5VNeuxqfGx5qaGq1ev79jaNz+zMDY7SIfSuWUrOxkDqhVfXHRo8DJjTufRO7Rt6NrV3u4eJ7uY7IbEuBL2qBpLvhpLW8Mz8eyS5Rs6kREpV2syYnfsE9o0ZNBNM0fXI1idEPwkJEBqDutHrtW9PjJiuon4Xz91EpFv375zenTEwHHyzCnkYSA4Z5/rlSu5I7AJR3XoS75GJcRDTP32t78NPTSmICR1uBEnISNrGYm//8De6Jh1zTH6pOmu+DxIkUcugEMP+eVhMncrMi3gMiKHK7gWUXDH/MBfZCEo32iVe4FqqTl3/mJ3X/fWmGxNL62uXRseYaPi5uzt2/vGJye/8tWvyzIXfmY+Zjlpph4jLnSFS2VuBCGlgj3tF+jwFu4wPhnYVAEJE77Dh48+/fS3IPe+937AJujR8YnxiRWitq9kdMlNU6y7uR1NiCbBMlQ39nH27Gm7GbySzjUemGzrFd7dWJDBfCxmKhs8oaFRol02rZlOCNmzZ9eHP/yEyjXA513e2lW1Q1VdqCbaQedy8pAPEom4V/nsmTOn+FV0Uhk62LeFX2ET46jSYEqHUnfv3qm1BMIqP2MOsrLZZW1mPpKIw2QI24xjR7dskaNAWMk91cnguXNn2FNZY+HUm0DrTeydNJ6TkTSVEOXlUtGcezg9u2nNhITFM3f21CkblE1/jbDWrUx8m5sah0amWrsbOppbL1y8onrNz0wQZIqLqU+0ouXQSsYBfIHZKQWYKST4FCckO4Fc+e2W3yK8MonAyuQSlEPI9SEem6LUxSpGTcjQzuIL4SDgl6OFx+wmKcmTZH1Lnnd9ifj2wNFErMUMKu57oF10ynKIGJl3BZopL5ny3FXWgcCd2QjSgoEbq4XUFb1alaJFcB1CXPnqnLMYDAJ/EwR5VVfHwGleFhqkCM8IBGzvCZnwpxoIjyO34yd9LZ4pYOMHCFiANI6vjSsZ0sq4Jo7MktPu/BlbASn8ZtEKBHLkO58ZTo7mmZ1omZyAzSGiZefqPya+NINb+vqGIBQ3dC709fezhLFvsam+keShVpAfapNEt2IRZ7vwJpfiOcrPkv/09NDgJCW6g/6D9DvbAMFtYopYbW0hrnDHMS0GYAiYBmS0glycocaSmKmeHjs5M97X1NPZ3UOSVj8vvPAChtDV0+2cAOeKf4Puv62Dve89x+6VFjMhSrkexbwFgx4fm7h2ZVj9GQD0a6L/ilu96qLIOkhUkfUeRkGpMg0brV0dNAUWOrp7uy6+YAW49ktf+uKf/MkfG/nortzN8Pf//t+PaK2t//u3nm/qiFN97eYBQTfsdFng1CxCUfb5zbGZQX1CWH9XM2y3ZRq6gSCqaDUReATyBCYouNxPS55bXqMLp/BQuvNwEmICXrEEoLSBwBwtewJoATa+xFvxvE0dnsJTjIB9szfx57L4pkLUm+I4BQExzjtCOjkcz1FmtK4WVy3fx7lRyhjTaZWgdDINMAlSIA9UqoPcv7zpdzc1lNJWIqCAKX6J1ANyOFHCxakNkUPwi9A2JD4gCbPKuqaWzCShHUCixVOjp/TFo6ygSEAr+hMcU/xSdgmraDK1kbkrD7Bw8Kod8Y8CpmhcpjHRfPUqMicOv1RsdI3CLsDKA7/e1Lh9u31rxCs0ZtgixYLIOsipd9auCR/6GlCGSA4cpIU/AGXwIqbHCJ7Mh6zbx6fy9CA6RRKyRZaLI/hovtSJLOCmNWVn1CYw6KOyyAgDJQvNi7bFkcSyvyzINLqqnksuhKGREXCDsqLJFChn9Iiva5DX3QgmUxAgvG4bYZPV8hBlQM5V4WvGTUsRDKAkraeqA5zwIJoIymjQhxIPfsIjsiQ8sJWp7DAfMXNbWFDXi/mFtPfY27Bk1MDeUwALirruus7V1Q7LBTABR6m1BWicHDMQ/oxnRpWfw6+27dg+MR6rB3H9UWvb8nIsQfgEt9S28iyRZ0oRjxSUumci/iK80pOSVwa8pT9T5gbRUnalcGAzZCwcqWZ/fEt0r4JQcertMQ2N/qG2PWz8qqseH5uyHtVYX+NIG3sUR68PO4LZto9vf+dpJtMEm9n55e7eravrtZPTc/T6/+if/N2zZ8799qc+s2Prrr17D6ytVC2GJfpCs7OkLayvbpqbnURp7lucmVzARUmfZLC8r5I91/Wha8zma2uqe7u7CM9GCpKhbmvxWYlYeltY0pVNYNmGC9FkJA88QDSERDRFMLipzQl/9Ed/8K6HH0Z4tPt2yo6Ojjj2BvW6FOzeY8fZjyAnX1Fse1sLk075btm+ZcVJP+srR+89hkrJq0YQE4Dm9gs79+159cRJHVD8mYXFydkFJNHT0ckGhIAHzj33HDNJ+MQnPqF30CQjXSRn5dwncwkkLaE+YswSH8WSKoVrC6SLoki/pEo1oyMrl6dwQiPbfnDQISndfpn29rjUj1QvsgHEHtS83E1YnZkZqyE1s/qZnZu38r0wN0/kdQiGp2U4W1Q5+eUukQTmZhdwygwjQMowJkAzUjHUoQ31a3V+yl4Cl4ykWwZjQnbZAsJpmxJef/212dCr3XAfQXtbZ5ywtbxKCFT78IM3pNWgCYBiR5dKDliB8tIMPCRahVRrUOLUCz4lvhqElYoDROSQG5qa1BHIkFEEaTE7PJEwTEDxKTcnUKpYQqwBZB5wtJPq9uRc5OmSEr1dOFDojx9Y8BNHnWLnQ6kvvnbat+9AbU2wsH379oqmCc0moa+RJNFHoAdtoCTXHmEKfM8R1CkcGqpCoc2RzDi/853vQMnUzaRI2REW3PCjS+evEklG3VSMSOOk0LAGIxJ0dLZfPH/h6H0PuUoZYU5OzQxs7dMl9RMbblWjTD3lDjENh/S93uzYXt65C339HU5G3F0g35YgcUCzgWCFRuFsFVOwm4iMvQRreXsuLUZEVLnDgSc/C2Tu9Lw9wKVYSQYJuSNEj5iexGpAUvHnFYyIJiQkClnHWyg5g1Idvx6nKuNHgm+Wp0Cv8KRENx9FQW4GvakvF7Ao5pvGfbsfC5g8hV/XyK9FSALnJo0ZVrI+IlcdirSp6+EP/PqpQJ1IIKIl+FIXbaquN+iifCOLTxI6eqemdpMF0Mihyv4WOhuaHrsZa43zOogcgQrRJ5kvo2fIYLuEZ1TN5ArxYVb1Tc16Cqx0tB/4+A9dvXrF9lyRT71yykJc9z1d+ldmLFNjsaYMTwB1KMSYClWiYV07lzTXl5Yq2o/POcJ4AoD61Fe+8hVxSF34Eo8iqw1F1rvhBU5je8hJZH25AGpgATlwTgKZJAIj7+R4hJTfijyFZfQ29kTorREyHVYGpig3H7IoU+vNwO+TL/pH7sClQpXhJsm+slCKnqT8VGqxioIn9ErJKv1lSPFbRK4MzOGe0WRlhnBbhFIc845yvpURKtu6MvzufnwseFrhCsRQb/CBtNsKDRQR0AZ/pjFPlIxEpUIhuYsJ5MTJLAKV4pemorQn0rIEDdXhygoibHXTPUv6pXn2P+Q2HUd2PhkNeIA16Og4epBAsrgsdCLDjTFUXqJBkkW8jMRHz6BlZWT01tk42k6OcMtdO+OZR17haN0TqkCJCaaMZGHYJXzLzlfId7Z3iMDjk+yi0zWFHXbMkEoqvKAKgkcUqKnJDr3AKhnkSMJlsHAQKLkngLD15K6PjIugCMoILCc5/I3FOSEPB1uRUy4tKjODzfGxaB73ENF4YguSW99XavHBbOvsUnBSHV4BTq5VCAPumduIR3zP5G4OQ+WQ+BWh7Pjze2Wqyrj/NfwqXzbwz0WAW0YyX7gXX+i8HIqQomBSLm4poaV8iSVKyGCPkWUI39OTI8NxfOLAtm5nnqtt1mjOgWQVaRcoBnvtGtl669rmhfrmhRMnTjEQ6unecv36aNUmdyHFZTLGEC3bWFdP+cLu05LM3PKKq+Kd8uygBRPIzavVV65cJKa3djZPz4wzmKit23x18CJjrdMnXyfpHdx/AIbGETt2tS+pLLNlgpaG05qZZhC2r/ykduhRPyEqzSr805/+tLVcn5Dur//6rwsPgTiJxCy421mC7Nk5vTTXZRdoUwszV3+79uxG1NB1hj6qa25pUwrinExRkKOK2js6QAPEkOEopLxV1zpGbW07SoPt5qrY66LXeJIbnRbz4osvkleFwIrQDx9lsbRC/wU44TBGz81xyLUZglYQIq1o/GRURAsTg6AZvgLqOCxiVAW/sytq2jusTTRJUDtvgcvGuTBtsB3W6OyuXNsg5LqYjqcordua5NmJHUsQyUTPGsuyJb+59naX6XQZimtchkvxWuUSVjb0jZYjzZ9m56ZOn3mjt3/rpcvnCbXuJrhw6SIewWhXY/DQf0FXGRwQpNhaTh2pcYFscVg/QVKWJADLhwhOKuGqEttCu8qvnAL5lc3hUGguThMIG744LYSUhk7Fca034LEBuqPryJFj/MrOSav6tIrW4gF2ZOSqencfIRxEUw/w4XjAfOC+ByfHY/2ls73rg+9/QriavXpl8Pjxe4npNJmuYLdHBF8gAIxcn8bOEIgN7FB1iv/URExOcGkzVHca8itdlj+0rjNi5chpORAgo/iqBeT+7naropur6hYdjrIpLq+enl+rXlm3ld6OQ6fSdm/ZXru42tnfc/bcedyquaE5g4p803jAg/oF8hSfsqccGOWtdGLmSqgMLPzEboBCp5b+1Ja/EuhgDhExP8OTPqRTgGJUzi5oLlIQAvMTbpL5KAVuExDepjO7KmIWOOdccngGyl94ivhvz1OCKnkBnyfwLjulhXnME5IJM9ZJpMzn9sWEJk0NKJpSdkG6uKpnzClu4h7QMvzC8yboiZPdm8T53j4lsIFWlCj9Zb8+lwCmkqZIOoX5jvVAy1AWqeiFrFO5y1Y3cJrWgYOHyQFUDNbX6NTpdXRSSZB3TJNtZpmdBHDo2mU9kdxsZNcdJqdiu5GphI6AaN3R6yIe6k9dm928PqXTqWMuapCVuS5mcY/qiJEQNURN1WOPPbZ9+wAWaZHXjYF2+lE8Y5EMG00Agp0ziphdcCKN9Vz8p6W5QcuwMkiVrwmibKloqbilR8zhNbn2ouNwm3hbh0vH6lw4CibOxu7T3D7ZSC+KSEpbdVl3bY1LP8wFFDWoZT0ObrMVIW4lDykwKCHThkwi1+Qil/RHFR4NwEX/sjUi/BpGrEpP0F1yKTz82ZOjRczkijil2Pn9bTwLOLfFFV75qfRaDky/JZ4TTKJE6FHkIKqwDSy5myVPAUUu3ir95ejxm6slR8jPqJ9y/Ep/Ua+SpHmiWJr4Zp45iwhNrsjxHXlCSZo6cqAgn9jHshmF51IHsaYBy6s+YggPT9lh0b7KLrNonsy0eXIq62B6hAHDeBFjXMwHwmhyfHysq72JZXNNd7d5ru1qsdstbcUBW/cxrIhsoNHjAEd7noAYLjm9QDhkKNt1QNHy14yA7kOS0DuEQ8N4rd8hdZWEdA2IopFUmOHxZ8xJCw3sfTZVD2zdHgjUN9h5ryw6BWic7ECTo6cc25JJt+T8s3OlMV0BKeAVF7bCZcoPCIBZvhECVA6BA3worBVKSTNuYoKp+MZ0iPEI4cE6VAiONDE2aThedg5KqA7CiYAhR22YqNCEhvwQNkKNDj5ta3HPyJlzZ48eO2xh2hl8bncyZ8KpcA+tmZ7p5utg+YFnBpg9t/m9ZipLdMIbrwL/TF3pRpq75AHPjGpmI4FRLLwGYsFq4i+GdkUt83/cKcg1O2lp7B1s39batGtn9/TM/PjY2OyMDZM9v/3bv4/xOgYm7SAdcXKjHdjXh0eHTp1+9eTLRw4dveZ0+HOXpsZnHeOgheNy96XluZW4Em6eWX9TB2sKrqFu8733H1XPbqd973sex36f/MY377vniJGFUdup07OH9h26emnwRvXInl17mfS4DAuF5BZHJ3CwpbJJg2kyZ8g6LbSzU+lQl6+0daiasG6CQUp+4YWT6OQ9735U8g++/72SkCeRK3mM7t+We/a9C+O2uMS8WqlRGiEN9RlfoIpoVQuRfXh4BPkNX7s+2HvFEaIWuRnSsx957bUZM0km+leuXCLfk98AR6JWHsCRB3OVXTv3AKUj6Gg+MT7XWyFsLUIXkAX4cjHBRqjQ0HfT4EUYDkHXXJi6DYewC5cg6k9CB/e//PKJkyffoLOuYe1vDRbqVZvrnFG6MLM4tWrnQWn3zGj1OKBqUJY61fycmdNmiIpOtRzHDK+v6R5O2W7ftO4QVmSCfRFKRauvIZLWHj5yaP/+vXAavDI8Njn1zNPPNjG5bWpgnAO5ppY2Bcsd29oHMZfMrcmDkpLgrkYUWNXrnzDRfsIxI8soVPjkdfcTi6yFsDCtlScPIHzzm9+0+diyiKZVHF9Fs4BiaSrzC3AUQ7m8iqBytQF9BuFbRgoLK6QwcmMMNBUNE82gVXJtPP/888x1TBBNHNW+XCBjPcENEljD5rHNoYVJpyZrJ6ix82EEBj0bjBQZTE/LaA5LN5WCQ24/HqVAfyhGqaEhJo8QfM36SvW6+cB4TV1jW3f/3NJqXX1jzdqyuxrGNdz4GHuXp771jXvue3h85NqAWRMSmbM+E/WTCytThY2s0zCDRNSAZ9lT6u05MD/VW/lrilfxSByhLHFUyBaSFGAroidvSdz1PeSqkGrw23gLDhP8xTSgxG3CHDitz98O403emeDECkIqFDQyJimgVExp89dKz5sA3PBTuc6MFlnxYzXgpiPO0EHl95yXZ65w4kbetSd+jgFDCAWeKUGOH4EJz8JzE/qtvqIstwZ/v97yakySguWUip2fipNxyzmlj8q4idyO0lA+gtOn9BqvyM+0nxLC/rAnn3yyo6V9bmZm7+49cWphyC/rlDeYPeJ3Vn/qaLNx1cZczeycjh+dJQQpa4xTs231NHaxCKB76ll6NDQMSEiaWsHeLrxFFzNCYMR1tZvt5bKF+PNf/D0mzb39vbbuwApLSQLEmk1XzuaRBYD6Jk5gIIkTSdO1tfYicFk3WVlY/lwJPG44wSV4dH8lNcWGHocBEphwqqgfBhmrq0YF3obappm1aRNdFehci1idTmYVPuUsck1Goo1ckXVGQLQcs8JzkxJzHBVXGTnHzHllfwFBtAK+RPG1BKxEmynkJvx43cjdlp3XmAgnl6On+ssB8c2/6B3O0/JM5lU8xefsyQkrAyNOGGKFlFLEr4xW+CsKGwCK8Mi6/D9DKD555c+1EQhWuIq6KIVWfI7pROEAB4fjMaYI5+GKCIFYbH8PlTOXw3N8fuTkmXEoGDgpEy1tqlk1raR6QzxeJUG9xjjjl4MY650gzkbI8Tqbl4UIR/NGKCOm/qJvGlaMKTkjfhll9OQCPV2JEwIlA5/eJwlMEHOOZgT0KjKPOFGKtDgQiCUnUBfzlGMuBeKXnQjGd9CgLVzC6OzzcRsAi2lJiV86JsSllZckYsJcZ/cU36uyyFrknK9n4QReu3aDFKHI4gAOjuzkqx6ESC4yaLmMipZI3neDtUtLQstNEUN1baJEKUknStQhSyEHcKR0iwiPmQM0VA4M4akyFTCjAYfUyNHKQvhzeA6ET2Vges2dTvQ3c5JXfM7+eFaGVkR4E+/GKRSqSJPzUjSES0KKXMq558ErFom40t6AKGNxKmhDTXVXVzPCuHjpiqojzIzcGPri73/OqYxPfPDDjz32bopXKzqSMI9xvHzDIP5vQ4gTFzYdPngEo7x2dejo4SMXz59nKaiScWN35dJ2b9+5s7G++uLFNwZHLpOJOxvaz146bRxxirs7VbTbt7/1jPvm3ea7aWV1O9Oc3j4tPjUbShnxlQLxq3C0wSEAZMDBhPMqAkeoY21B3DJa/eRP/ri0ZDxN7PAihdKnjGYuzLBF1AZQE+X9Rw7MLMzPTc+xWlpeWDpz6vTC7EIcCnT+EgGwrrru0pUrk2OT3X29h/cf+IEf+NgrL79sWw6CJ3yjSYfFJU6zifUp3FAUnFEjitIijDzQFRsQCx1wU+V6DeT1RB5x8vgiXBFQu75MwUQclYrFnRAFEQisTiGyQUo/klbuhifK7pqZWff5Rb+SfTBfAy/BXXuHypwqLsTHMNMMYqhWX0ZTd8ljWaAnhJyYY5NyU2ublYsV+xnI8eb9zS3NepGp29lzp1bXGAPEvr2Wtq5Dh/czi1eJKrSt1W7pbtUKDvwgbVLByIfCD8bK6TkyMkwdiIygjqeoLzFDIIjjL9nx77UJGG6KpJxK4RiE0Suh4ZN7LFmRxR2ZtnmzyYmaFRgWvYkjIGp6Z2IKXoIVWZUHob4huJ6YdiY1xo60qp7erapMCMYEvlJrCRE1oUB0Yy6FYggBiUOtOv8HKxEn7SlqcQPY0LXB2Zl5swsqD1MjyGuJxHpiV7QJgNsSokLTpcVCfDK9YT2Z5xu5nQDUB1iebdu6pckl564PW16vc4BrOKcGza+srmiC7q72d/X0/NFXvvrwI4+AOD0z6VI1B7BAG3x0rKLkhVwA5O705PDbPklShN/mCQgVAH19k8gBNvbEBrTEX9IzqVu8xleTgcDKAzNO8TbmVxHhTgduKA+S3h2jpe3wZ48EU5Cw2ClKXaSE612KVkQu4vIQ8wP9cDcrJMFIWkRZ+BocvyRJRURBsXwa0xqfoIcKw27SlwRFRvG9jFskiRqIUaHSk4I3fkTklCTH98ptHPX7F1oqdWruyuyqahnXzujUzhc2gWUWyJjQNHXbzl3NDY3DQ9dde26AhQgItCa9TQ0OhKS4nFkN6zisFInaSTE/x5YwVmZDv1IbogPO1NTTMXZ1XHbJGj9WOek/rDOAJgJpS5fUN1mThwq02mG50bPwWb2vv7/PNgmGQLR9TBJ0RuxvbsaUfrqxxliOZ0wBEmuGm0MI5dcC2gt084HUVoCVRJwofgSFRSm0oUQC073kDiseLRq2kSthgigOsNiORCQLEhwStWLs6F5ib669BC/qJLvcUGESV+EEehMhJ8nPHJjj5+fN8CQeRJIyeQTwlMnNmCVot8OsBPh2/DczTbRXvErLX3Jxek9JXiyHUzCaYUWcYAh88SB1RI8oO/w7mENyMQyV/wJnjSVJOeZNsg9QicZK6XINROdNcSAZv0GHkTbNQOK3Etv0Gvs4E4EVcDKACgZw80tOHkJ9TnsntIQSguFKDZ0mANkvVZQ+uRhq06CWQQlDkCG2LoccjE/i+4DkQVkc6+GJqYScan3VBABBG2TPXzhLC2YANZoYWcDk100MK4YzYA0KnmBmz4KLeJOdqrLwyBT1gkBtyIO8DcrCeSQBkMfgAhldHj4GZQM0UJKLIFOpZMqvX8jIpEV8IXIXKGR+Ibbb4YwFer4qvk/EL0eqy5EDEPCcSkaKmWvbkwNKIEdakpxTJ8BKEr0vaSLEEVOJQBaBR45OigQMa48/MQzYxor11QMH99EOEKcoFOoaKBXqSA5u/Lh6dVAsZZSXUucmyzKMEJ+4HCgvIfkpkIfjKQJ5wsXp4eiSL2i/RF059n/1J8wz8qoOMoas2tRdCkTo16KEaWspbzkcuaeuZC/i7MzyUmyYtFexpcmKSd19x491tjGcrnJFF7W64+CJWRjyX/krf6Wnv+Mzv/cbv/Lr/65/59ZjR45/6+tfc2T+Qw/f98bJ18fGRsh7vb2d+CoxTiOSlCZmpzt62+qanDHV3NPfuX//HpLlyy++ePrc6w8cv9eia09HDx3x6uLKww8/zOaWuqe23gKOi61GkCKa0ZranQpVMQmfslAWPQXH1qbyovPp7ulBwERkSmoqXT1FbQxs7RftxsQNT6CiM7kUen5ucPjapJMY19ZbO9rb4nB5Uybq2Yb6zWzqxjfXN/V39j5w+F6WolcuXvrd3/kMFRV8WOPoBfJ/8cUX7K4xn4SbTG2O9UR+OimiUo00zrqUV7jJ1XgHT/hw+oivEpJFUbLIPrldAbUrHYlU/NxAXpX0B3/wB+01pVnWRxydbxeyU0oVmw7eOpraWVIX2smAZeQ2ehGDE2Wj2mAryBTEhnqKuOjAQbBIfJ3eJpbAjDJ6sUFaP5cKRTiKuLOrbf+eLaYENiFog61Vm53SapetxTcn81oxbJxrnpoMY0Hw1ayErto14c88QpmF4wI8UIcxyycFkDu9uymBBRE4u+kTMqpAU4EgCYAoTB35quRe1Y44QmprYvYpXBYYGY9SeGYNgTjCRVa5IusCajM6QnIZT/AlzDwFP9J+piXyJU9YzTF5Onnyoo0Bprm285pQEmWdlQY9TENe4KMe8GWKbZLe9QrgAYFD1HA6ZUxLI2UVK1Aqi0G2Kftkb4C5gV1ETmpCGIivtsHGx0WbOZTKktYzTz3jcopLFy709PVNzy0dPt5d4/TF5DLjVq7cdsBmJ/fCk/yljp3D4VlEKKcoJ4zfDb7mWr0tcuUrgFypYsvDJGoKgYc1RxKyM1JmcLdo1yuh3OFXDEmB5XwsclFk/hySE+XXOwDcDNgwAhhOsTAjxgdJ9jYvQjn4oL6ABW4OeguBIVFUyAHEHZqNcIEP7q6yxGRukgultOlrYJo8gXOuvUpP/rThMyesfG4Y7XsOxIwKTADJ/vwsWpkHRXmSyykfjfH6iDjsW7Ak/RfdkiFwK8cA/tiP/djgxUu6w4XTZ+cZKzghNHRvbsCYAwFbDUGh2olszRioQKcJoVs8Sq+vrWKoOOtOGVZCmtiooAPCip+4r3OzQ2B8iJAsRFgBsBQgDZnJ4T/WBK6PDOtQw6PDwaYaWuBM5W95uqe92xx+uOma3mcSUVk6fq6y9qLUqX9EK28KNtLc3qo46a71MYXFQhXf+RX6HMSgrRKwdXHAsU+KzGQCAPOmBvoH2Iakws4412HAV4DgSSmbMhkLrMQk+4uQwiPWzZhpWpo+eYTzicuQc0gOLJ4+laOlyKUU+SeHlIIyqMpnOWEpLF79j0xvdsb0GghkT3xOsVTUmuPLsilXmTMAlKNliCly5M4TLV5yOMRNV8r7joTlytS5EszINUUK9EJ6KVgECBk4T8YzRS0Ap/qNNDddhV8vCPilhGW8AETBnnKRTHDOjsdxnSJzGZwQHq8IJtN2Iv7QVhrRjX1OD8SCnHntLDi0V1dFTI+hCnVVr4e5v6OpW8ir9XU6kXETQaJ5pAiC/sIvlWj6o1ykghWH9nyS++zUFA0iPy0V6UcEJMpBA90CYpDNqfiBAgSeOriv0MgecOToleAiU/DFAUQIyJ5CvHp6tSkguERXlz4IGr81AY4/AxETWE91onIMtcIlzDUGCMcfvTmZPut9cIOwVKIByEFVKhHEVC0ZGQkb6mqpBfGNMGeIbVp03DjA+uT0jNpy1pH1eYbQQtraW+zyN2CffOONZ5555v3vf786NCirKKXjIJzhKz4nIyE8ntlT6Q9cE8/U8vE1FYYn/W7wyADLH3L0eGZfOfzt/G6cQqPIIjvVktsozNopUstIpVLANv6cORvTlrIznBm3dZ2WjhZ0Shm7Zes25Pr5L/wuc2ti25EjhwcHryjoBz/4QVZAZnSag3qX5/H3vOe1E69evXhx57btbBzOnj7V2FTHTsSF7rFDvmZ9acHhJxPLQxTKU3a9btvepy+MfPd6Z0+bu3hn5uPcnrQZJLTjPoVCx31fE7G7vZnEHZvQYvKsdCLwIyH0AHchCqXt0AO/fnF1aJju39EsaCYNQAsnT7zK5uWX/93TYjUlikIYSMhuFoI7YRq9Aa41Q7okGK+G0Zqz7+p6+umj4DM7ERf9NlQ7PKpj6MawO6bkCD6RL9eDk3LaO/QVZmmk39ItkATXkG/XNhsQoSqmLATKWhxIeiJvgShQifTKXEaCNATIjUL4czQ2V3rue9/73p/8yZ/80pe+9K1vfcuazB/+4R/WOIRpOm7uIo/GcEXcUjnaT2eLsTAUVTVUIKRlqIC7qb7G0tjaeunqb5hJI53pcmdXhwEVK6BLI+NubmCT0/z8C8+aqO3YOXDm9PmRkesMgSw/Dgxsv3/Hfc1mXJ1drh+WvT18qq+9fXV8dARnsHncpIpWo3V7HFSskF5Nof7g97+kIrQovoa8ahvqFV5VqneF15YqC/+KKltbt5XEgn5M3hkHOz8QKbsexTKlw1rqzNBiKSB3OW0/NRMU6ZWTHacGGusbrl27HrOc2PkQrsRrrOm75ihMMZdnpmIdEErbB3Yc2L/XXXiPvOtByNgXQYg3B7144ZK1p92791Lh9/b2A9LW6mCrRjRhBmka45wElOSVX1WgA8VBN9KCbyZjAUsZheNoprCsniy7LK5uamuP8Oq6EDXCyHx1+Td+9VdeOPFa/9bt73rsPW+cHD123wOyRqjKgg4UKhM9Ty5IfvUse6KvKyyXwt76YektR/UMT2IPJf9GqTMzyVnkpySl17CVDQihBglROeAldDYCdJcwgoEWxL88M1glzdwtpyiDjWLeBUYEb/hVCuULsKVCe40CJ6yDbHKtKqPgUPRT+RsII4FoATU6WMq2KFzKK08DIgaXYpcaIsC/Qyf5O0zxZtETAkE28Cr/Ff5SLYkDzRjONtGKpZuGQqMVvUO/0B95aNZmpmfdD+i0zYUwqZvVHdbjDIK6msZaZvrWwXSNoaHBtJZogK8fuTGsd+Mk/pLKr2pmccU5LU0dYfqvqqNDphvBAqHkLBvpJtYkWzvaJBFHV7IYqmcZ2vGD8YlRnUhLzRpTZuavLgyhjr7OXloJIZTRufKTqBB0mInHM7rYrS4Vep22ml57ZGxk8YQzumYUCvPRi2Ge+Elc7YdRAGuRAZcTaCUEPSi4qwZ9cjg6+KDBSg2WPQE+XCwURMUjbIWEQo4Tr/yp4JWeNAwHonKMZBWeCE2UmT23PVP828I2eL1bNJgWsW+L4zWcuXOZMkVOQSX0sr8UUiHcA1h8uhP4zU+Frww/JyyS5OzSa9QJl3HN6SBeAMhJ8muR/HvwgCBVAZYny8ECEYDRQbvnGrs+HEatGBRCzS4zK0M7jk0iyQI3Pz2fIc/6FWhE/MnxsYyYsZ/CigBsFNZr1uJGGvda2o4/Vyk6AIvyPePr5s0GUH2QiKCHcgJ9kotUxhTECUPw9S9PMY1B8ETVPhmSJBFfoVjLQtWr4gCiaFNTocjLeYmAqAWDNjs7hmiTeWfUDLAInoedhydosAVBuLTQy/3UNh49WqB8RQNHBfKkzhV8XjiERYaq8IXFqF5yj6L5KlAELgMBB57y5eRF1zc2O2liIpYvocOwaGyCVV3V3tpiFbG5pdU+vcWhYYKEMtYwdmi3vld74sQrBw8eMAEgFGaEwQqWH4tFiKv0l14jR040rtIP2xyYPZ7ZkwP/jJ4pyxIylVlQxJSRwTUgzqwykM0GFD7FSzzSEJj2NaWlkgAllMIiFGKadHW5p7srmmBywkIrmx/mDt/+9tNf/cbXGf0T+A7sP2RKwEqLdLu6ab6vp/fw0T3jozfOnp6wdcuslrYZoK7OVoq2yamRqbkxZszL7j6qrnOQz+z54bnFiY985ENkszdOv97d1eUsdTY288vz1XWhLbRivGfbHoTqLjBi1cXL5/qWe5EoARIdYtH8XWET1IGEJsfG0SrCRnu09vawnPvW0w7JcfQn1S0SQj9aXMwPf/jDtgDYn2CcIk+iqPDU1emT5o/kZ12V6c+a7W6LKzpRbQ1NedX8zFzN2qaOppbh6VmXSVwYPbt9767ZpThvFAJoEp2bqE9Mhp05TGjJSX2Ee5BtD1BF9IednWEmo28mio27yVjWmQnolTJF5LDlpy/WO1xro/Jzv4CGyIhKLpT9zybHJpaVDZnTmKgX1KytLKnuZifoJXWaxEYsknCIzmmtASrR5ZYzh2IhE32Q8t5xQURzza/J1aBQ+7XhATMLGWrZ/F3Z7n/onn17dr766uvXR4Y6u7dMTk3ZAKG6EY3I6giWsZyyNuNwjJbWJteB2WFtVsA2F+8zO1cFV4eu6NF79u6CyaHDB5DC6NjIE0884QkB9QggPHEBOGuzoNV02itPkh7W9F762ump2VXjEL5AC54Il9qtmkLWNMelPytrJh7UhuiI8R/RljLAeVZRxjRZN3CYnKhQYGWHKSm4r4qemPX45BS2Mm/nFQ4vmkxN8o4dPiqCJkGOrj9Tw0qskon462PLjz7y7ne/6xGrUdqPOsEOhHuOHXdNspJ+5CMfAV80xKGAhgd+S6LsKOxwhF5bS7tosnQbNjuLSxcuYrCrS4tX3N02NWnV6dUTJ44/+Oje/YcGtm/TTamd4QsTlATtShdXB5SYlIqJ2bzuLAs6EbXh7tvsFy6keIaYnthFJag38WfGkyVg1a+KIt84XCAU6RpISOZQ+ZcfWtEQb89JnyYPASY76XhyM2V/hhRfE9i3DTvS5Uqg40cRcdxoqcYSBwyIYZEcc5fkeP2mtYGQ3tBNKjgGGumDV0XdRXGjmqPcQUtZzAzsysAFvqljpK6SJA+wgUWKLcwfaPk1F1ZNy+tNod32EUoxKzZAp8HMa8kvBI6e8kURmDXrGHgsrDims0PHcRYoLhzCgTVNtWBDcE31PceP6dU19dbflz/00Q+ZANulZXus7hDGPOlkYU99tqfHyWjE/ZWx+anFhVW7WbDd2aVZa3MqiklwlMxMj/KSCeOK2S80NoljvsGesqW9lcCE4V+5ZvCesiv32LEjyOClL7700P0PsGe4NHTREgF27vYwgnhzXcss8EvLUWlYNXFf/ZMEaCuNjckuM+o4yh9VGq2TXrF76xLbtmzTf52whqcdPniIRsdmBLxLNP0dWEKGusI0JmcnsYUsc1JOrc6GRTIWF5WsBBon2p2YFMSQxl9YaNN4TXkHwZYbeQNPRLslQlxKd7tThrDCSjArv8EgyCeQiLlqyd1GMPnVV57KZ04IQM4wosUSWbAIxg1RWYy0fC3MhVN/j24fuYmr0FKX04MiTYZ1ux+S4sWMooSkPBPsqDn+JI5EbcV8GwNJSChyhgZzvY8/85Y1aqEot20fElPRZyU9gSihUuqiJZ4X8O5wZYYWJbZHN9dMSixylEjIGnu3pViIJpuiTAdjGNORGUMCsoLB1yhmPMXnsyzrxHndhzRgnEYhBrVQT60sun5qZWl5ftPS+NhId2c7aqU0jXHBTb3VISWvNzXQBAVfTUKzp8HLfjyFY8asl81OTVNeEY+m52aGrw71bd2yfavpd70zdxij/P+Y+8+g3ZPrMOx8c8453Zwm58EEEIEBBEhYEmhRUkmkuVuu2qotSy6rbMlVG754v6y2vOVPW67Sh9VKNr2ixbAWkzgEMAOAEzA53pzfnHOO+zvdz/Pc94YZABQp+z93/m8//e8+ffr06dOnT5/ubh8chLCiIam/0HEhZuiBmFEDJllxwdMqAitjmdHNW1082FhxmULgyOunB6icXqetrY3LgEVmneYg7jLatJAhDfxBc3wz3ZEZkAlAvcDJNJFLArSCTLFnheVVAo/SU7nhJ62LgQlh/VEX9lZWJjJQCpIrj9pstmRUVnVEAkvRSdTeo2bZuMnNlt8u559LFy8vLC/V1jX1dHcyhtrLpFAZKWrrG5vgBBcnoZDQCYa/87AhJuYrxUqD2+IdTB+LTtFLUje5k+snhQirn/F5APeWIKg7gBoQVGgZVwgkdw8l2RSvGAfic/EJ16k4Fyj1LB8cIaOLM4SHmwOCk8lkON4gG48fOf78r7+YFWUaLeLzT1teXVxZXKfmVh7UbazuLS6sryxvWuCl7qOGW1K4S9K1aZZ8sqmFTZX2qfLCmvzX/9O/QbW2ltZeLtq9A08//sTlzy62t7Q7uLJsp+zkqVMdLe3bLeGWxgvD+fsaFD9gg9zoGprqjE8AwTbZzwcdcMLE+HhbS7tkVLKTx44yHtWePDMyfMuwopl4mVP/+byoHc40TmlQFbSbC2XtinVylDuPXUPDPae9s9tuuKVVxqbVyZmpo4NH6lt6Wc+dN/roI48cOTa0ML8U+9YqalAAbjRnJmIF8fgP7/y0BUgPcnImMrLoi6TfEwhwVgVvvA1PJ5nCHBqAaBvMT8PVhSGJr/jek7lvvfljibm4y+46GveCEQyxRScOL2+IDQdO4F5biUm/dNbqXMnFLTZmXZs7tjJU1VcJtLd07B9YEIskTBhcBHVIi93eUDTWc9Zhp7DygPR1NVVXr17qH2ioqdtZ3VxgB7OOh4Oo+ByzpyamLl260tPdN3T0GD88s+uF9bWrVy9PTo0+/vhjR44c5T5k4ATK6UbJCajl1Onj+gtt3/TxkUfP6baWikwEUcpEh/Mvh7DpyUlGOO1N3CAHW4WWJrNswjLYS7m6tb+9Hwt8HIUdNGsdgNSiN9AkqsvrNSfSbnGYjwHYvgonqzvjNUwmYJKqhC8SI+vWHhUkpHvuDbK72BddOEHYye1Yk7m52auXLhO4jP3EKAw1mMRw0NfhxjY/t7D05a98xfWlM9OTRKqr7KysLS4s2NSSWdMVhYSeiWJmX6sY/V19TsXaOdiampm9eOEK9x63AsDfUQbc9dpammtMoF10MjPGU2h5emT4WhObBY2rvaNrcWU1PCIqtglBrahGBkJNb6FH0BSZs0QlImTtI0buqF9WeEKJFjZeH3obQyXIdNA9ov/LQrDFh4KsIVIkyG9jsRTxk/oc3Y9deJ8eTcUCNkvPPKQDkVQDab9IZgWsQ4/qaIKwNhPGocmFaxnlqqq2xlKWhAUprKjiDiYqROB330Oe3RcXEWil/VTSO6R2iGwLpXHBQhBLCqgnklF545sdM5hKgWlcTHGRwkQSZT2Zf5JYja3DQbv0FALFnzp84cOhPypBDgS44FblEL4G8YQIUIGZh0kLcva6hE7joyHnEIx7gxl3RJEzsI6dMPYsBPUSSOUETHZGZaXF/OAXRVj/BJogYe7nDL9XseNCFiNBc90enzN81tPVSQ2uqeYrb+V0gPXFHJXoMCq0NrdcnLpgOw1jxtLqEr2nt9+1iQPk2sLCprsx/HjvnXf4JzpvbWR4sraq1l4r77rqusXZOacO2/hla8HBzm5vV+/G1rqbvAhimGiLFRKsqfn67REHRRwZOmb10wJnaHvbrAs7lMTVneWd1e26ygZmUzZMvBj2sDTQ4SAHdqqxcY4PgcNMiBWjPmmrE+l0+zvufa5sa2o7OnDUkLB8UHHhs8umRTLSMUie7a2FTZsI02EGMUnoaCeRaDCGCvQkpeJM5A27BWK7iv/hbkKyx4Kwt19r8kEfiali+MrHWoPukFovtU60STGgvTBAsGb0rvxk/dhPifCo8V0PBga8UHb9ib6qNa1A+D8pIfhxN0EtMUkpkEpXSBDj3nf0AcaFxC12dDipzDKna9StUaqAnljX2sa4ykDGfGaAR4Gp6eHqSltR9zWH+PqaWM4ucDIeTb0qEIxqUc+rmYKoGEEJv6ooxA6n4/RYnVg6UFbt/I6KpZluIkSQQ89KzJ/o4rc6SQE2asT3qqaG1rWVzbqaRjeI4CtVCdK7sKKSaMXFSjbnjylFfvR34ysRKkB0ixRgjNHwvG9qqmtRyVTWeZIoG5DKDmamJ1z8YvK5uuZsPj5fqMI1J1wsSC0dIU7VdrB5czO2d9uRj1uriy6iwxOEtDFpf2eD/m8agF96OpvdX2qRnPmfgyjSudBz70ZaXtjeJNUYqrkFmFbQopZWFix/WZKz1a2jvW3o6OC1K9fbWtx6d8zlGIYbx3YtzM27SSbdw2HwDPcJKMXP5djeln9iI+qFKYh/SaDa6tZg+6OFTuq1T9GCaawkeBFEQ5C9oV3YR1dTTRoyCzpYD8UMhm3tnQhoaNOV6D3yKlF2icF0aMrt0WHjJtUnzZ9Z+mIXgcbgYmD0hJISdTG5ZPFoV+7Dyu1oazt2JI7PpsBNT05AkhcK+A6jZLCUXnshUbL1V/PWYJwGFib6pplPqHRpSQQoXVADYROItTW29g304/Kp6Vk23MVl9kwbF50aVkXDjw2yiatq6+qXV1b7bDpKK4feOpUmRgdtobLaD88rTgwrBEVXwGqlJg5OwWbFbqkXBNclLSPhnLhPj0hPdI3iOFuIKv5RYjF411+1SNwf1fFBMgNGShEjc4wXaRKSyzdb50uV80f6EBqRC0I4KYWdMhMn+JGZYYuJEd3qE8eqOkPjxtpWb3d/Q23LN36hUTOBfu3ajT9/5Xu8ITQNpxT+M//vf/47AwP9c/NT26s11BdnMdbWNJRX7JRX72+Q3jHJdzYOy/q6bVQtTS0nTj4yMnJ7aXFxe2N7YWq9cnulbHN+5NIrQ4ODp48ddwVQdUPM6BZX5k1w8xmyernWxB4aQoMyp4a6WFmJhaiprOOZ9whnCllvb//5Tz+28XdueubqhUsnTx2fm501dC7OLcZ4BzNXAid7PNIRmDt7ENloqG0Yn5rsaO2YmJk5e/o0rdIG8iruR0115Q3Vhqruod7lzZXaylqY/9p3/qavn372qYHv61//qi4PlAP5XXvMuYh9vKevF9eJ9HT1dLpN++LlS7/3B7/vphq326c9n3GaNkHx1NNPmvw/9fSzqjM9M3nz+g37CqykmwhZZlE1ExZWb2no/U8//bTW0Xd+/3d/z5UGhnWtENxNQGswM4dcpAZGKJUUYJzwiEc+/cfbDC98gXbiGm2GK32JIND8troiELa2/m7/K6ITjRRPzj/jE2Pt7T0DA3EJX2dHP//4J594bn19XAU805NTTujTRc177P6enZvUEhpJlVRAfH9/H1bTLfUcb7MW8ZY+IGP2Mzc1CQcNRtWeX5ijWH/wXnjJSwPzD99/12LHl7/8ZfMhQw4HvobWzqq6eu6HVh4tpPLbdtoUclNeWAyEdW+KfMVBlenE8sbqwd4GgwoElE5aoUmWcd7I4k2W5SfH6NXaxmTOMcrnzpw9MjgEPcjIboOyOSKmESMxLnTb6OXr10+dOYchdAZsavbp2Ne4U2521qm3IBMNfBV8sjB06uTJ6fER0Jx2qLO5WkK/WljeMC3Z2t7bWFs3zNdrf4sh7CfcDMr3Z8Zuf7DDhrFy5ty5oyfOVHM92oq7oFE+8A8xARf/l7too7HKTjJC238m/7p6WFW/4O3b4SdLh8Mx94Q5cunSYSn2hC4ahoYQdgRsElj3QUiD7ufIuHuAx8/kNhqzt/RgIU0WHJzuvb8nfRLr8AmJ9tM+iJI6SSg7ZH08Qa1QxKkeYYWMqAxNIJmkYmqTInNBd75GTo+Iwj+VDbtLEP6nfJJqmKR4wiParAA/A4iiA9EQ9zGQpPAXwC7RvxSIxKEhee56M/OgccCP5owhJO46KKcQOH8jGdjYROL4v3DOdB6ujoyTqUSOydIoBlq8TVDW1jU6rZcD/KOPPq5HPvLIY2sbG/r49Ozcd77zHWP/H/7hH84vLk2Mz/7SN77dXN9w8/KV5YXFsdHhsdEJUshCpbmHo3fy3I9tRkfWOgYhW5Fn52eeeu6xg6oD2vbaygIl4M/+9E/oDRtba3SY2kqXEJe3NrVTuCl8pjTqiEoqhVKZjtGcqZvnQTIa+e6nsb4Re64sLpty2JDjo57umV+c0wsd4+BdXRv2zrk5d4Q3GyfbO9v0ztvTw+s1m/aNcaKIA7DLaxLo4CtAAodYXQkKxzsU9Tz6qmjGJfDIzVRsrLuaPj4Xnhi5czBSFlN9zgxXr8SB9/SLQvYiwOi8ET70Tpkia9KVEuNHB1dwyMnoLpKHXSl6SZrEiKQ8pBlJqjm5E4p7VD+6UDRB7iFJI8mdovCWJoyVufpRpnolQgWre+5/oxrMxBNBATlSJSInQ4DySkB8RehgJ1BjdXe/gtOoJ9E/ykm1VqksW9JNQ4YRSqDzEf0ri1uKtnbrGuvcTFTbUMvuTv9e4uWwMLe0MLu6trCx5s5NU8eYAdiLEotnuzFn3Viz6h0zCo/x1xp7HilS5aps1KOL15lmkxJxzj+ElLWAY+cXZtnvoWSYW3Qu1t6O6T51WwPNzczpaGyQOBBbEolh+962vT4msU7+Q8o4C4sDQ9okwHO1VDUkkkun9Q7WTeZS7/xIZhogIydd2r9RjypjPEIqoOgc6KMiEnurCDjqu76yIsanknD2SRgcY1zUPBk+DdCsfv3bveQHE7uBPrptemClOLqEegUOycoDoAfk7e152KqaeABVmeTx+OmrvNSG/FUy2Q2wioatSGiHUAr0uBXFxQJw80BJWF5Nj+aaiw2O/uT0MSCMnuBYR8Jf+6a6SVuXOD8GhFLnySyqQ/gkiycQSnyYhXP6FcyZ4/PPz3sXoH3O51zZ+z/m+MNfg7U9h4YtOgAcuLCKZjkqArkLqdxM4GRQOUBbDzkQvT0ZOpm5+EhWWbRxJ90K1fb2rTEuKG+//Y4NqXiVbvrNX/w2i+0Pf/T981MLhLz1pOXlyYcfOdvR0TI33+xqtlA/YtNcnOqmfd56422HtOutZsrlu2UTo7ObK/tu16qratIjsJXrhG0m+fiTD+1stUOAYoSFNB/UsKgwPVAYr1KoVM1PvC0e/9ADXeRKyWSSttnya1/7Gq8eXiH0ybQQZxrBO8YqRwh5WVws44ZPq9/0ZLFhq3VaVXLKoAivpT24ttQ6c76ls1V95bUB4Ma1K5RVBBzs78UDVFbI8Pu4efuWUl577TXYWhuHFRbFk+hzZOjEb/3Wb/EfYUzQQ81X7VL44IMPHJpvisrnRldr72h96KGzG6sraSpe72Bb1iWanqM7dQT8zLjmnoF2yLQ0OR0VMcBnyGeSYaKIDgkbKKaOYUtQ6P3a0qQhxu10q0iIwkodSXxM0zNnEOL6IIoQYBZ9Kqvs8nFy1qadEbSiy5euLy5tPPpIS1/vgBOgystqKLhrq9ujI1Nheq+OS7KOHTuiGUDj6sMHxoSP+qsZ8joIyPRp5CYFTBLMWlBEAh5N8sIEpdKm22rtRESIhJspBBJ71Ig+YY7hzgXh2M3v2k1CeX5qfqI8NuGurRuIHNHNjkkJtqLhBgMXq5bH5aN7Vmd5RcnIhhQ7IZKLFILAB8JolWOUKFJv18x6pqOscJv+LRIOBJAEoS9xNEr7RWTU8Mu28NbWf3b+4uTExNlz50SOT8xYkHLGreHRTIS0r3KUSV2cNGKn1cLK8o3hkaamBfcv2n29srHt0uGtvYrqxj13kSKUsoYGj4bRgrCjS1Zu7FbVzM1MXU/uQzt7B03NrUNHT7YdHbKqCSZJI4tWwyJ+ctKoudPhc/PGGzTMcOf33aEoq/gcDhfjHvxXytKTU/h5T8DPiCzGPxjQXbEpeZqaQzeZqA0/eqZGD/xzARleUnIS8AeK0gdXl2wM1Qc17jwZyRxZVK98zRE0y7CXpoIj8g6pxKYykkoWqQPuXZX5KX98HonEfw68B0QHkHiiax8KpDBK3ckhJv4RFUGBYtOEhuRg7CqbYWoIa//ZJ11VHmOn8QVnAUuXwPN64srqMhlNTjU1t62ubLW0thuDdV5ihhx2aI7OZc2d0zy2hAzFnbmIU+b5Tz61MmACPDk1vk39cAbx7g6fPQOx/hWdNG33JwR0PSJieHSYC+nJU0dcKHP6ySfHRkdiJIgFpzKX9JL4BnyFUtApU1s7zk+M6cPhZggapifRJF5iPKWfPioUngigB/nkdDgI6L1qQViRXVyHyXHrAy4dRzkKYmX5jloYrRjSpAENnAwTkDDUpycVpy/75LdhNeALShyBiM2Z4jN+Tz8EirEpkLRo32MGkVMX9I5C1gf8SalLQCQohVOgVOoDshaiAkIxGWzz4OJt/VS8GORKSR74iup4Pg98/uQNDu0gAilpKXBXxpQsYlIg5U04JJ5OQDL1Spl0cKNYWvKk8lrpptklJSl0PqnSfIOqoZXXVrc0rlUIquHk+Ni161eHujvn5qdXl1cbmxuXLX831dPap2enHIC7sRX3ZK5vrpmvmjbQ+UxXMY/uEasZaeTFJ1Dy4OfgomQ81olsaldZhUvGTm8xxE/DCk3C7UL0196TXTlXDDShMxlrFGP1PjzswUF8uqxcwGJFzGkkSmpPtaHWsOUr3pNdvxBWlgS5W4GAw73FAAWHjB7E+geGgPLIwkJmBTDURrZ5jjTR98M3GAcL4052LIO1kVEkUJDxBhYc3T/r5T5lRVwRCoWM4vQR8cL0hEwodVdoDkM7g5JRgLP38srm7oIFjxjUPDDyyK4gkZLJGFSlDja2EEoqCln/bIAEIamLzkUEQdPHOIL24pGdXsTmAYifgJiZQ4x8jGloehTnk6B6CZTCfoqMnykyJyt9TTnu4cMM7y/5RvkvyJmRkUCAtImUCavi3/iRw2V82FOy4PsUirdJcoKf6wRIMUBtCs9YTySgae2HmwqVbGDwyMqqtVMTxYbduTlrvIMDRz788MN/8k/+y6HBpt/63/2D27dv8P6Ymh79vd///y4sWjucWl1dIoxNLTGXpV7UNt0dGVk6daqTj6cZhUJrG+JGyOnxifAF6unVpnDja03ZC9/0nZ0jg4OZ5eADK2THZtgJz+ceEUIpuYrNLy74uuhAnY31wb5+A83kdJy1H6fMHew3NDfoONjW3ButOFrjIrVb58lkar6xAWBLc5t5KedPaNC8mRGwnEmLc/edYUMLNVBw8fjWt36Z1zdpLIurfS0JzjkSZ3GR/mZMpLw5V4aia+CAp5kA4pqW6OnjY5OpH8dOVP0F9ZwmBKZlLiKEtd3dxi3WXdMtwnqPu9owIzyh19jQzKseDfU+Kesb2uBmhLV0xVE1zseMtFicwNuJgDbTl3VCXZRlXJXNwMznt7YJCKs98QARx2ORFDsHzS0dVG4zNmXglZhRxLCxV11Vd/ZM1+KCnbuil9bXdoYGTwKoqtKosyIcE8RWoSMReucvxsKQwV4TZjqqgMQUekJKC6kelDLF0cg5IjKiBYngbjMoMUIgFvyJOTEcCRDXqUGmFngllzg5ueVMV1zcVFPZWN0slw3pSnEPPGcA0loRUYWa6ssTo5b+JTBg4wYo5YoDlWgQghWHKdQnj9OD4emBIc6AtgoappClsSUKktG2GDjjVJOt/v7B1fU1N8bhJD5tI6PjphqmH7duDre50iVdnoqT7D5fXFq5eMmul3becO5w997dr1zb3VtZ28JzsU0mliEPIGOAh0ns4igvdwCTicvy/JyiVxZYJc0HJnipdaSTpyz1iDEOEe8h7/h6GCyKWmChWydZkMPR9e9+8ih9+Ovh8N1p4xfWKqkTUpYSf04gJUjS5X5QD4phYGUtiAEvFqqyWFJkSWFKeYo4E2z5X454ELz744piPUFNMjGl8dPfgk6fqknaREyKvz9Qqq9PpXAYJwujlei7nlKau2OjyNKT03jngPjD4fxTVCn94UApSyFZ+hajWlKxVCPHR7JUop4YSZJugdr4DSORDIQpqa1TiJE4GRAx+y47muGWoq9fkP46hd5kvdIdf64K00PFgEfk9fQNAJhPV+A/4gIB81QnZYnUqUm6huYmPE0MM8DEJoDkg6H764NWDIjg2jVu+VWsdFDYPdhoqm/YadrY3tz65KOPHZ9SVV/H9dk5KV29XUtzy9smAXF4kPrsubbYbqBC66UGzgQUzIGocnqCDulBB2G4eVBArQlQdaT5IYU6qrU1XPIEhuC0tTEFLbo5heFfWyuclEYuKCCmocYTtE3qsRJyuYCnQB7UrXAUuCRjUUImMIo9OwmzeIW5W5cugsnA0ufSZKDIn5E6Pf5G+BCUHBPwcmSx7imm8CqATp+EI2kBmoElKqheiOONWoeJBuNS+mKuQt4ShMMF5XApSw7kjIc/5bDi8qdSIMUHesiEODk+9TrGXZiETdcnFoNsRUnki/RS2hvirUQikm7J78WIiOl9NVKPDt/87KP3l/p7HT3BUCTR6O0b5BFL5LoNMdzcGUfDfpB8LSwx8yKMuyCC7Y3reg3rWK6yt8EIlbCNfpEHCwJc/6LWyxXIGMtr62gzBia+8n56gJIovBPxs3MqKDRxo3aM15gza8w0BkOqjoY/7Wk0QhlSlYg/xeNYicHx9VC5oXOADCufAMx4Aiggu5ZllROfR1jdEIbSQwBW0gjLKCBejaCtj2SuEAMOCaBESEIjY+urcF/7gLf0GbLhW8BjcE99LZyLMnzZxRfzUgSBldwkwbkm6+YjwtHpEr+ZjyjUZ1wgQLAoBUq0NGXBVqTq5ybIVVYRYyx9NEib3K9hruGk0crC0JBSQEyubP6Zw6WvUoiRRkqP8E/z5OxRQDzxt9BDH9QZff08yHfQCDjRIvkNkRyOn4nB4nMxQSlQSpM+3nkpzqco1BpYGEsLc/7U+nGUYma555579Pr1dv5+f/7nf/4b/+A/4YlOCXZYuaPYHn7k3MlTQ3yLVlbn/uyVP6mualtaqnV8Igfzzs4OXvLOyaEfXr1yCcdyyKHIttQ3LzlMsrKSA4jS8QNNCWFxaWhB+87HnBtnaVpZYRzVJDGNS8xNo5OYM6dzWsKxkx97YyP7sjHs6PF6g5RBpGli8vr1q8JcsgEn2lWBpwb4HMbTYOd08cqWtkob0ET6Crbuw61jeTmuqOLJYlUJKTwAvvDCCw+fO8tB5vLli3/wu79nhIL5xlYkMGPhr2OfW+Y6znigMbrPzM3++J23VYebqDoRNpxuQh93cs/KCl7FooYbONKEPQY3XQCVrBJgZj6lgPNXQrGamnkV5E3jQGw864RTqCI+OgRJkjwJ278nLTczH4eGmsYdHd7iLUEX0/iDsuz7G5MblQmGSG0PIUFxmlxns0DjEEDTj9W1aV6GTodlFOjqChHz9Z//habGtomJaX3eZENP1gnrG/U35veKwapBVDB/gjTgeiMUgSUKVVgd6NbKIvVIHM1gRw4a/OIvf8MOWnt0KAE3L1+STEV5ZZHi3X29luabWltef+vN2io3TrebGCoU/LT5h5Js3N15+YXnlELbEe+r81Wd1mC1z+l+DkqSBlYwURaJQwIwHappkD8JSglkl8Ch5VBFd+ktI3NJDH5YXtU8Du7UchpmeyedDxgAayZmZu0Q4H8/PDo+UzNHyqrdJxcuAF1ue2JjI+MMIFpLZVvbu20YX1pb4y26U7Hd0NQ+MT1j9yOWLCuv3jsor00avYaDDPWCWlHf0vStX/3m0ODxxbW1Tz69oMlPnz378KNPLln3sMinJkaLqlj/kim7deZurUalgOrk8Be8pS9l+YJkASonLb31zMhQGKpzXh9/cpEPKgb8w08pSer4Bd+AXDGjHNWI/e3BJX1e8VliHpKwuR6lggQOIxAekocS+5RT5oC8hzP+JcIBIcHMoEoASwEwhfPzxfClyQlKgaBQRMYBIxAW9I9MEG/Z0Kdwtgl9iHyIfwJcjSu5k8WyPr8XXSQe4sVVhpqAiXTDqur2tuVX5nBivbmpk1O4PX+mCqS2qTup4p/uQz7Iqn+NTozT1zk9nH3knPUxC5ZVzll2oK97OrmbJ5fkmfm5nmVnv8XBJu6Kdz6Yujgjoq7RnoHb586dWV9bdnYE46gNM3/yR/+Wu6ShZafZ+t7Ctos7eDRVV3ABdGdBNoXcQ6v720vFPbq8x1diASYxLMWFADXbu3FLN0OG6kOJoFBZohn52rs6Fyxwzi0wQnR1dldX1DjzwAYt0BCWBKZNCCNXficHIMH4VZwgovUdBo18xaE6b7HNH9OefyD9yvOH4HQ8D9A9tSv9TJ/S1zvgSx+/KBDYpUeiwwGUMYnMqh5CRe0q4pAGtcsVVKnD6VNkVL8UebjUYvS9X/3OyUqB0s8oP6GUA6gRpIvkhfhQpFJlC3m5eaRLXpPNOnQ7XylrDAry6Ai0DG+GP/fuks/OpR0fGWU/opW0NTXMz80QXdjM0tLyAsfMHa4hwV1wqCi3zh67UvKqenKxYGZKqMLAv6QVJheR7MuObnx1pIEbRjKvAAcv5YejggAcpqajpwkjr2rGWkI4qBTmA7pSqkGwlmSpFnH+JkbVBQxO2FXXowFT5Z0sAkJOKaA5DA0gG7+MQZnV/dQrfZXFaIW9JfNJQbo2bc8nmpNIKcVAPgMx9ik09whvOGTGgJKwt5/eSpcxw7S9QQV1JYOy+IwAgL56MiZK9ICcgZvVUOC1QrqBw8YSpxitQND0STwxpRmjjdIEDKQ8hQgJVlVupynhAxqysKBmNOhCuVx0VTWle6tRKUyVo5mJz8jDU8AjgUfAJ4+wT2nWGQFPSpW+4ooiD+fIv6Z3xqeEVamUjGH+mdzwCtVxn3txfIyKh/xIeBaRTbXL2QCNSkR3Ti51WDUBieHBBcF7dLPRiQX62OmNLeZ/zSrBmTMDIyPzugm/OE7W77737nvvvcdDnUODFqEZx4yr7GB0ZOSTj+ftdnVa49kzx7ArDiRRh1788tjI2DWX2p48jdOs27V2tEOAUdw8mJYYW27WOXzuMKVTdzhKdLS1uzyK34+VO4+FX46jLni2OuHqyI31HXvMOYHcGrn1yOOPcUKxWz56kMo5U2Jrg2qKG3Ev9jPGzc2u6J6cajAM9gbQBIB8sHPVvJvXE0N2X19P7l+AOOVyZXHJGMTjw1UDDAN6CsxNGHQVyjg8dADmKm/7TH7+a1+31YT7oOkE7TGxWRAWAgZQAPN4BwI4Nuw0OkG1rra9tTmdNVduv7UjN+nD7OBpjSt6geUIMyKLD1YgSDO86F/spgdO39AJPcxUqbdUWi9IttRg7jQhqyOIkJgGIMbc2vhL5siukjXVDVDxFXG0Pol0ZOikfjA4cMLExYyEQ5K9v488/IS+Gqrw9or+xnUQBY39y8s8AcLJh64PIBbxzvIC92gGLaoUMdF0NTUcCZaXFsTQoT1IoG0wTbYZZDsEwYFXkOm111578fnneFkiDqGOBLF0u2c3+hbj+Wvf+y6wqg8sYaQstWAb3F7m61BQ7pGFIPBObV8pPcjqC8ks/uS1iwDWEvBs9l7fiobhbwPardsjc6NjzI2cO7Ea9QkBuRTNzy9cvXKdJwMn/pOnT9nkbk3x8Ucf5Qy9vLrOHdERDkSR/+viFuXY8FTX0LRp4mmvyc5efXOr3VRrG2E+4fBIUpJNsIIbFyM7Id95883vrvy5hnVN+stf/XpzQ53haW9rvaq2gZ0ry9C08YHmduDQlqxQwg3O3sH6xe7u5z1PpDj05JTeiZcOfSgGxSeRGMDzk4sTLiYplOvn4cjS1y8OqI6tgdJQOzL83FgZVC6j8PbHGUdsv3dK/mLY+WtKXaRJqYhizij68HOYDqVwDsgrkBHLWYQ/D5nDye7Ah0u23CTq5TTepQBscriU5Z6f98SXvhYCIc6THI8tDoWHgJcLj/ltlTfXxRvlDXC4zhjnp4CYcLBJ5jQzedunSEl59S9iPfXuPVdnWAEQyTTAyIGH5dHFqM55WYCU8OTFPaBIZymZTy2/xhygvk6Hctw3ma7Xg0yaS6A4ONQ01Jw7eYzzwbGBIV3HBj/C6taNa5IpxV5hFeBdQSM0lam0P35ru7HcvL3QLrnCejdQOQzPAhWK7KqasIUYgMIxDdjZJoX4epIPJC9pplIElyo45HRucZ7KCGD/wMDaynq9tbu1uJqx1ClivTkVp8j7bPcoT2iE3lAsP7dvcB3EUnS0TvxfiIluEApvMvkH8oWPybU2JcuvXK8ULuQ+/LEYTp9KZRdj/c3ZA/zdYT8REIlUOWtR0gjrlQLeWaUoZU+BArQMyvv+J6cXL1D6WgrngFJyglIgpZT+rk5qAGR85zEZTtx0DVOUuDrQTjBMoS2QOxQ3WJP98GWskYicXFtZmpoYmZ2ZNnjz84mhapfdbl2FlchfCDQXoyKAvNgjDlOzqT6mGwdVOk5Cg66bkESfGH3kAycChvjw4YRZFJpwjmGFyU0a9Izi9vbwvMdoFZyf5lcxigVsi7lBZNeTogYPXghI5nGJaR5GZUkjWLjlACKjjoNdpZcRNHyrID+V6J0f5QJlfPHk3sq6KYFhLvcFCey7M15nDL1zxkT8UPEly3JAjIJyMrOL3G0hICCLPgUlM/lcFgyh7e1TxkoCCHjT12ELK70vaf8xp5LLWwJFmL8ABcmMg4CfuRZpAhZTJt1XTJr1acDYXsygh7/EWDfwRhXtCnnCBwQJvCEDf/iEwS49fnpyWAKPQv0sFa2F5Zem9DV/+uJ3hlDk9fhb6MhFyPdkB/+emPzzMCYBpPgkhS2SiMD/OdrPA1u5Uqli4nOxLqiaf5beEpBXxi9tEZv1MygOY+kWqaWl5dMn+yfnyqh5jJjnzj6cKFw9PbOiRxGcGA3M73//u6+//hdd3W2Iwy9mdm5avDlZT2+3EeHs2dO2dZkesOu3NrWyuLA3mQY8fPbc7ORUcmSwurXtjEQeMlpMz33uS89DTMsaETzaHUt40Ke3vbfuWB0+wY0k9tLK8v7SvpPciAENakChMUJpcX5WrrzMZQIPWjR36izY5oUXXmTmp82y6yM5GjCxc+Dhjo8C0LBwIS/9k5+LQ0hJFMfEqbv+cv3qNTYjDDw9N+tmLrxtTOzq6TbeYTO9QK+emJqkGdLTZFlbC9N+2hEat2ahMyCy4GVfTdEb6+tOnzp24thRDi+dnV1o6JatZM62w2dVYtVxlqajh+jtjrJVROx+lQ45THODaWLLitbTH7YVkEW02BCQqefrF9YkkcBXjxuQsb5ZBWnCnGBOJZKNb3VlPazK1VxZxpDMVhydfWvDjKTL7gQfLL8YHenojtoy0puUONNTNZyRdPv2CJceUzcdm2wCmXT4e3/v7+UjfcwNIKwBTMVUwN3DSZPYd96T/q8h+Qzwn4GG7HZLoL7ECu3vG3RN2vTUWEubQwJwWAijzMc0Z3ypkdAL9ReWnGI0jcS24W7YrEWcJhKBj4cwU6pR+FaCoC4ZQ0zQUF/rSDWCOfT1gyUiNFxsauvbqq0r8f7cWVN3B5LW1Nv/76CMyqqKhpraNRsZq2vOOi2USK1zzMhGd29fb//g2MT4zt5qg0MN003jjPe8uGyLxyhOZjEZ0M2I89W1jYOZWbspbGIyAdDM5kKQVDVeU3aRH+xsOpXEdMKI8uEHbzvyvK6pdejI8SPHTvT0Dmpv8zAsXXnguMbdVq5ZKpZ6e+7xd42Wpe5+dyCnz3GHw3enuutXlJFL8S6KZilyZDGA8Mr/aVBIwNOYlw7gT1IrNJ/4F3v/krzyKyDnd8QkSUpQPOB5cKExDJDvCc9UgxBbnoRnUSgnaEqVoAQ6EiSClgKp9tJE6ijsbjokGH/5V4m2iruLpIFGCak78FUj/SglzgE6RK5qfCzATIGkv8UEwK8QHvYlGmFjj52VfTFhHsuCTDeMQ4KqK23hdRanjkaGOPGgru5ECIjm+sYmTNdI5EnpEw9EDO/0vfaKVv0XQCJMZ9fxjxw9anvMwuoyw79h2DGadY0NxgBaAoa3nKqHQobbhH4K27bqlrGR8a72jrfefJMy4/SVU6dOEDLf/vav6ho6r8vcXXtos8KOXm6uk9QR1gzIC5fodpiGd0iW6EC2ZFGTJYOfEsgrkkBQKXWhITHAWLFkvvjg4w+dBKe+p0+dmZtxbIHjIJlaCNW8SVFR8WQgieZx+Wbwhn/ZsJ/ZKDM0lTLQyMwdnJTVgpg5FMPxPWWJFg0ei0E6PzlZ4cfdf0p1T9HFDIWiSz/vznPoVyoqFYe3EzFjQbJ4O4cY34oULqUNsOlHvHP4EMg7wXu+BrFSxnsCoGRK3glEOr+o+gQCOaeho6xQ8pOazmYVenn5nqVuW9lFQtIwH4FY44odtAYZuzy2N9avX7vKJOmcHLvI3GGvCzA08jEj/kNEpNEhdgbLHGbUfFIuO0ywh8XW3GqUmMAez0RCDph2PMZMhBkPS8ezv8WZR9EsTw4XcuqUSmUNRil04oCWHvFipHT+XpxXt7ZhkLFiFokPQu8xLkjvDHK6gqETc+qG+FYuQ7ChkzLE9Q5AQDKRfcpg8XMMo3F6T2jSvnoi48JceVm7cJwhuBuLeBQvlOBPZclOnerrwq/JJzhie64JygVHXhXO8I1oei49TEphjxHfGC3L8toqDJUOfwoD3EgVyXyChjehAVuRHmCJCyZFDzw9Akmq1CJ70vJjlp4fKPG7Uy4g+iudQrVgRJ1aXXWq+hwaKJbdVEtqQfVmdDh65JiNToqGEuQ9uRQLM7CKJkyPQH78EvDJU/iU/uS8+WtOkLm3kO3f+w9CPRBGCY2EUeEVLX4oufaTF24+B5w0XgqLzO8E+V58k5YUPcrV77EBhQZCuzQx246tX70DvR9fuGbTKv3k0ccfa2ppYKJcWVt2lVdVHAPuEPjNV1/77vkLn/b2dbc5Va2VC3eNjWCh65kxLiw5kiuObW6oY1Zf7VsbGx4z8bZ1s7GrMWzqyW7r+pV8hAxJy9YzMTZONU1Xgbn3qYLV1R4XIwurv4pobU7amo9MaO/swCew5ayHkXCIzvLf//f/r29/+9vnHn4YF7kXQgJsiTnxNuWQYrm0uDo5oUYLXJhsZOXkg1skVoUAH1uNHeI5f/78Jw6AAVCcE8YunD+PgIxWuqF9zBy/PdYuUMbMWdG2yeme1NG6hnre9xBGTGBNA/K0rrqq+uSJ47h9bXUlzNjVjccVf+SIE+YX5qcvuFbt/Kc009SJ2gNh7bsf6+qpE7nmj+vg6rvvUvh3HZkUC3b6gkTKRg4t6K2vSo31FaNXJPmjn8QnMfoMhEy/w/5VYZNrnbwIRwKJVz3JaJkI8eUv/x13ENhKwMyvSm2trAUEB+qEzuRgr6NHj8juDKO33nojbt0qKyODQlKkg/YSDtHbL1265Ex92oMGVtU84zHEGq2tEsZprw0N5gyaELfBwWP5xkoQLtHZguJ1dT/40euNDuusqF5a5ogfSzYaiTuNlpCxpraxu7dJ4hANPBct23KlrLZ+GnwvXnoPULkUadSaBEGQHObn9OGHH8dcKbo9qUL55wlFQlXNzi86zKSyurato5Mct6xjxbGxqdGGFM6gvf399BvzEAeXxBlS29vvf/Bh5tHVtfAtUzqeWNs0VYgFtcnZ2epaxwrFAeiOLeLdmYRX2FbRwabJqH+51Qxn5DG3LDbUgbnJM27GjQqLSw6qvXr5yks/99WYXzW0EHLJo6s6SWz1i0fppUBJTuWYB75L6R/4tRSZQBUgi4xcSUSWEuRA1P2eqJ/mp+aqqguhRSO3WpakmKbxPDA3PDDjAz99XiTE4kmfczC/c3raRYlW4kvhErTDMcJFSEGH4s+/TL3Bz6BKAEsllgJf8On+NKXEEQidKZIIx5N0JiRFZL04x+WvyKmDUOKD/skrxvEjJDsbkOkrEw7OjC2wleUc9h577DFbu2qrWxoaW8g+cHQlPfrWyChoDhUlYW/euK3bkgbCdGj2An5qVUuL7l23FGBTDTnAJmIrMF8JhWJ+ejYPC2gQGj09nROTt08cO/nxRx/88Idvfe3rP6fXnzx+lGJkR9DIyOjm5qxdx6qkx1GfYoTQd5PSU6xRDIQi9Scxhx8I+6lEMioLB/jDkMeqmGs3rpK/pi60FviT/tBjEFpeW4HeSjp20NjgfGuzl7WlNU7a9HJjkuLiSfrgfcVlhsnW4vhIPhPOKZBZ8nCOCIdKkxgqY1v6XJoDlGJKgULKn5EN5coPOAIlaAJqIybqlJSSHL4nTSl9io+yPy9BKaWAWtzTKvfk8lO5h7JQc/y7E4OZ84/kFsRZKhohNgM4rziOfEFb/xuurGoBReJv2si7urR48cL5yYkx6iaNn7btGB9n7Tc0ORnW5CF2IkpKldzZCh2Uocdp3LoMs1qs7wRDKTZC9jdaYZZe2OODEn1iaJZeDCtc5E+PmQHWlSQtIMd+PCMR1jVgYXhLFMJKw5Pw2XTT3eqqXiZrnO9cWWkiihU1gqFEpLKkB0EnMgEQk7xq6yADoDRgYmnJkFFKATFQwt4Gvjz2GXGkySOmBEZt0PRi6SUGUzdM1IgZiE92u/kpS4YjI8QoQIrT00HwU95slPXTNQXQ1n1khwbFS7fSy6Ct+0gGlHgPTHgSQiBPAAAhVdQLwAwZtFyvjDA0ggh7sZiJ1CKlRDqI+Wl7kngIgwwUsB7Np9buLZEmE1AAWKAEvHMgh2UUKIVLX+/qGyk2pczf/8reYD4QVo6HPMSEPcLpieQZW10iB1Qtpj/FzihxCSYSlcKlAKbmvFAdsGPJK47MTvNGpNscH3/ttdfoG04B4hJjEcAJaSdPHich2XzZpG3N/R/+h3/BTP7yyy9/8ME7kxv88ycp8ZrAMTThUHJQ0WhHQEN3cqzX8yvGJydiQ2tFFbcZJyzid1cROAldxxsZGTOFxid6LmRgq+G0oxrlZtXWwhrdW1hPoShCpp0LUbptVy7n5b/44ouOcVfBibFRELCf+LZW11l2B9NubDc2jo6ai4zfNsAdOTpoh62K276sIthtda2FVdlp9grV27hvV1fWYWYesJDp6o4byuirP/zhD+0jQKvFlfDHU4p4WZSFyU1gTIb1AmcNAa4ulPuUoBba8Pfo1zrdwtz2Iw89ZEUQqKC5xZA0bfZJTQHJnG/GokbKlaYgPpQkD1s26DhZS3NTSdTZMZyL0z9z91BP5VliuH7DMl+rmURHu3fcfPn4E4/NTM1I0NXZ81u/9b9/6MxDVmdW1ldAMyTqJtCmZsvulhHt7xifL73wvC7nUHBXoj317DM8w6Ynpokd1ZPLqK/COCCXjk0tFNg4AluiSiQ62h37yGOPoSZsH+nsZPA4fvKktiQmHHwpb2420OAvC8iUj+rGlr62TuwogdNVccH6Br+mQk+W0voBqR+9ne0nJrJkgclSuCTlNiA95NVIsEqkS0Jkc72lsUl2yJjszszNPfelF6amZ86nOR+mYe9hXrSUYxJqNYfST6bjTG0D4dW1dejBCp6xmmTs2XM0soOC6lFYXs3pqAX3B7R1dM3NL5oDwGFjJZgAypYdyCczpA8//CDrTLpQb4/bywOsO2bsc7fXyRzatRWO+zlz8mhPR9vI6ER3/wALrZHFKUAWvg110aULAi2Ch/Xa+H34MVqmRxxSoLMAfHLAl5zWz1JYANpIhFDmT/w2WNVMnA9DLYVTrkOolD58TgAnAIWNjcngK1e4hFgWYIffcclTEnwKSmUVRuK87n5/IXzdNHcQqVg1AXyioHiSNnY4F1Ic/lkKwyqS3ydbc6T4EjI5Sym+BKEU8AmBUs+NYcmDRWX35NIlQIoMM+qV61/KnwJySZyxEs7FqWLSPcoWZuOAXWB1fIdYU2rJSvJFAVgy0zkJVttgKizXmnvjYXLn5q1rsmhujnn8pHUBgkJ3oAR/+tnH9KzO9gGXXSjRHSX6u5QWEkkVLrs6QndPJyA287C8jI4O86sZOHac9k9oSOkToa/vUDVIYpCN9JrGlfLaiHBcXJrjZyl+ZHiM6fO9dz9gknj1e3/+9//+33/iiSdtRHQ+w8TsxPGjxyEPmgNGe7t7162pJUUHATORQMuDBxIp2lf0EfZoen1TZR1W+PyLL+jRV69esWW5t79HLrvTdL1PPvtYMrlCZZXx4ODnvvrVf/fHf0o7MQo3N7ZaL6V1JtYNYkJGWF0M0cY5IiMtTsiaTpoPV+lQMUODDP7RsjkQ7VpEOX2/+6WlqLekGRHdGyRK5r1iGuV6MucEMzxgfI+kwRiJb4v57vzNaKu17OAoLn+LLOnoRg2BeghiRM5sIx4N0VkWpUspo785nLTkkCoeRBCJLDmjXAriQQsjHAMC1iVSfAUkA5RG0+CiTEz0N/oA5WccdmY5IiRDXNPBKsjAz/FzaWnVfSnr5fu2/nV2tDnFTaU2N8Iat7K4YF16oL/3wqefDA32OYiWmdNa19bmGjHN5h5HvjmwPC0Ppopr0kQrpginRjo8JCYfoXCR64kksaBTkgNJ0RITLJcYLxYtgzCRi1dSmBb4BMHHooA6Kkhl9UoVVDWVamtpoCWUxeF1rq45MKDEvsn1uDq0vqFOnwVZtzVKKBSclAsBozik82gg7IRESC0BCmssBUmPAoqQWIx4CXJADCJrVkCUriMYejSi7Fbso43Sfl8/pfFTKbIAKE1OJpyttqx75AP1iGqlUMWpAg89GWXJ8ie3vo4jjZSS6VnQpusnlSDWCqzGSA8fYXnBgUNmDG/dKiMgXt5kXQ1M1Fo8/GVE3lxxacSDQzioF4cNKG3uxRFe8orZ2I45P73NMU1owkdaeqIJEHmVZcOSMDxFgq8gtxdpY3mhLYsYxHYGMcOfBKHpFp/AJFXkczpcMd2D/irxQdGp/6YP6uhvEDCp8rFzvPjkFYD8S78rRt/1F275NzgZlJ8xdeafVl1zUL7r+EhKGXLdHL6N03Dp8RNDnd1dBxW70zPjWGWvrH52YXp5dbmlw9avyf/uv/t/OpGROfi9995hv19ZDqP+VrpO3tmMsjPl84FY39lo6/C9Tcs2Hm3UhjjW8TuusNLKLQ1NGkullGv6Iaa+MRaIENkwwWMcepDxVfN5a27I56aHkj7CDZsDqY37165cdqZOb3eP071ASKpmneUsVmZKpuYjcnjedbQ1/52//R166euvu7Xi+le/+nOY0019XAFZtxfmpm23bWtp5HiDvW2SvX1jLJYM19aUy6gNQ8Cx0Oj4mIwWtHEatsEbAvpiY3Or84jg76dyFYTPHZ+Ku1RcTSGvI+hfctGNmXwtbjslT9UQcM0JlunKDvhnCtBdujo7dUPHZOuaQSw90NsDljdRIyBSGd6gYFBk1cB+6hhHjgy+9dbHR4+5v2atq7ujv7eHne/suTNkhFK5zP36r//dJ598mnXv1q3blht19m0H4SRxrObkEVqA9swzzzD2/8Ef/MHt2zcff/xRbXzh/KWu9i6d1BDl0Vpqi1KmRCiOUsKOEPETEJ0QEKq5gPprTlkAkQZB5YW5B6PEUkuyL9r3rS7PvfBlqoZPNGa2t5sj42+//fbCwpIsqqmCXIsFENShVUhBz1e6eH1YQZ6cDAQooQlmklcRFr+uXr/JkwcytHY9AbvwSX/88SeZedgpzY8lggOvKm0go2P7jRtaF/C5+ag1GY2SSkF/Xkj7+yuEVjQPie+MRXt+k/RXrmVLYeCUzj7FywKQxqYQl1QowE2PmUP29qPtXPTWUFfT1NJkYoP+x06cfOv1H37w3ns9/UekcTeCQ6Pc3CTlv88Dn0yKDCT/vAdgYOtJQ50E+bknzU/8KdeD08Ty5SEh+uBEpdjg9vwjAwy8RH0e8DTJkYbOIlkEKCnRXcLoUQL60wRkKRV0V3E/G5goSvaiHfPBmGf4d5VyH4q+Qsk7B3zPNcKQ3PowW47Rf5cXl/LYpkdYfdQXcFpWQYjT2Oq6HVqFmTKXd18BZHJAKDKIfmwx9PSZk84kxuHMbEbg+fnC8R2LCzGKk7Ihmrd3SGRpyD7FGeDJSlu1hk6cxPDAeisFznDTKaRx5LNSxSg6OktNTUd7p4tdvvv9P9OVv/e977308vMffvBxf2/n7/7u7/7KN7/FqnL82MmxqgmdJ+viFGl1AVa5ub6Aw19ZKgsT8SCLQZxMH6UoUQLd2cQmDjnlS5pumiRkkMVyJXmlvmTIwJEBR7wZ55xqalbT3dszMTapCHnNaIz2YJIMSem3SlcYkhUHmcLDRfPOmpX2KrDLXWmKafPfsGlrzfRDslLKPM2/O+1fwa8S/HtgZXKJTChEjXLK/LP0lQRTKZE5Bm1zW3PwFuNBLg0hEuWJaP6TAKG/T2LEg4z+SCqS5BcvGebxlQ06a8/SgINn2PgdD5MWS2u2N+NEHZ6ZHIQcpz06fEMaZhoXdp44fvTqlSvN9TW3blw1Fbh6ZdHhhEbOcLW3F8W0X7tpprCdHO7AOfxgFQoOnmjAQ82bI7/gHSQoPthFTf3ylgVZdM9tR/67q2h9hUscbdJRvEhhD71kuZ/qT8IiPZaFMzAQ0Bzx0Tu3iLfqZ0y0AhqiJwiIJmMuV7xCJYuGWFvLxEflIKz9bzb+81JYW8tqlr4jMp3DUmBsManE6MIAWuIjPZQrvVE7fwLfo2gPZECQGFhDJPjwgT84cul6erFFAMOZvB74iPdVXjjLKya/xUTATSD76xLwOUrKBS4CXIHmmWaV4RTkjboGeZwTYqWoL2WcAy3DeRIXn9dqMIRGpnMOHE4p3k/x+VNKfOd7/PyZ+ONO1p8tpF6lDIcnAFAncBzn76iRw2+cXoxJNwb75m86FV/z0V8JTL1PwHH12OwXfuHnOafroAra3dtwDHustO7tDw71Mcj+4AevKsVFjShNL21rb7ZQjHP0rMRU2MwSXNylXZmOjent7nv22ec//eiTb/7qLx8dPPpvf///9/C5c3uboWKtrtgFuWByrmdpR6exWWfW1kYQRqisGdJ/sJD64lufyOc0Md51Lbc0vMpt0s1atWajN+NMWfgj6e/4SkbsNDs1qS7JG6Xm2LHB1bXYMfw//va/BI2XnbmEsszAnXGk+m4AVB2neVqacJSoMPN7Zgnk4uQDjvNGVRZf4WqQvbkqNbW0wc0MmWYrxvj4pS99CQ5Qck6A8UWf4FyjOATXcO58IiLdKGCN5bnnnpOACmoqjqchpkQBwNWaq7yK0CFDfKR5HjkkjOFiORQekkpMtOpHMJPMo+NZ9xwYaANicnJhcKh/dGzk13/9P37//feNcOqMCQy37tCO+4OrWPUWrfyhs7wutnIppmO/XaeH9Db+Mqw88eSTTNSd3T2w4Q5lcbyuLky2RAAqU/fVVrUZ9XUzubRcaB41NcpCEaTJDQm+GRU6wpzqIJmMmRfF6KXydnR0rW1uzS+vnDx7jrsVRkGa9z762G7ar/3iL0qMw8BEKeyyvL7hIgOXs0DGAwiYvqKYEnVXABWBMpCBkoc2ZMpIgsT9AntuQapvbWnbCBchm3UPrNvWV9Yog3YuDkoIFLOjjc2ZtCSqTPqWW8BMVbWrIpzlGmWn4kLp3NvfjPNLt3mdOleOlVSiWAUz7Ll5jXdEteXUZpJxeWXJCYMoTzzbzoJ0hKNT7MqaGtpa2vZ6uzZXl3HAQVlVf0/HtauXvvb1X9hY3w47Vh6z1PBnfyAsU34LlAiVAxmesBI0VlKAQ6BLn6r4s5VXKuW+bJiXLItC7vt3X1rYRn2N36na3iFw05Nj7s4RfaMilnpEZ5xVhNlDU+bIu5PHrwT3/ui74kuEekC6nxSFDorwzk9OXvwVf0sxAvEziHNH1pfAp6oHslpDAiipGllk2js+7oTDWzhf52Ke36qrpsRzbvZgXilzp9AXTJNJA9nb7Opvafrkk0+0sjVQcsRXm3ycqMAiojuAQ7C+/vrrp04+YlpMBOrvnIb926eAhRmJwNkVCSXmf6sHcgnz4eVwEXgqxkGfnBsLJ4+HvBKvIJt0IK971jW2La+sLSytWYU7c+6h+YUlZiN78p0KcuHCJbORqQn7rxYGemvM7HkGltXE6YdRetI2tKlwlJVO+xGOOhd10xyWJikQsTeRqCVDKJEkYWNzA5ENjlFhcXkRViTn9Nz0X/zFj/7Wr/1NHRb/cM/45jd/5V/9i//RTTHbW8z8hcbyCRqZwZSe6gp8fPfH/DY8XwrTgEApz3hTQOLDHBcAkwIRgSJnh2iJeBWJvw9+itDy11K6UuABuQ5nyWHvFEC5O1jlyBSfq3MHpmQIiGfUPSULtV5TKgzFEBOpc9Pkto57hc0/8Wn4xsSag324EvDVtjV8n6dvVWHVl7gUthWMj48BsKbMPCGYPE72DCnLW5f9aK6rs3Z2wSWJjcz/Tu/kPLmzueMAjrbmusnxkY62Vld1OWfDQGs0SNp/kjZ3KpfJ8oD+dRe9YqNdqnW8TBkyBUp0yAFpwE2gpS9myQTJy0+pBiLiASh12NCkkS7IVVtmfFhZjIV+Yk4kEiWNIdBDK29siVx42Cc0F8nklJtGpAdkoDw4OsirT6bVRQ0hUpbN9VUBn3gs6/P6nD6rFFqLvAG27CDOJMn3BDNwuzchKd+5OIOmn8BSsKQXCVvWPbjhBDGaGEB4wspX5cKKYgCgBNHWCXM/AaG0kTwiPSD4JKVkRId3JgtsPb5KDxSeSvExh2dMRANFpS/IKFWEzXFS6W4UDDLCyhtwD6aSCGK5ocSXHvEeP3O9vP2UUrmxgBzclxo3JcuvnPdQxH+4IKxKhR2eAEAYi6vxvW/Jw94fFYn1x+hOwcgWDFp5jzS6b3TH6Ysug0Cb8+c/Gx0fdtAn55/Onk5eNpoAma18zsxNzi3M6qvPPvt0nW1aq4vUy2yqVzSPBDZM2+P3HdSMq913Oz0t8fDNsdOnTrU1t9Li3n7z7cXZxYfPPiwB9mhqaKLEm2kw2cakrszgso498CT+HB8dA1aYBj41wZN61ieCOrM63vv4w4+ODg2tr67aa4zHh/r6UObD9z+wtjN6e1gyLhTUSzzJNYiDt31l845z29jo6emmDyoLE4IJT1lwHZu9wY7w98zOLH78wcUzpx9i4Uq8x32+sqWutb+lOUxjyR/PZEBAoVwY4HP85Onm5tZTJ07ycieXIM+PFPIScNi39uxYHd10bmbWdJ6TeHtr48T4iAMnONyGe1ScTNqALHRjYwofFnnNHEzMcDsONMqiLO4P2kkdXGntMbGpd5oWBwdr4MydKk5Wmtb4eeLEwPvvX+7tqWVB//mf/3nH1/zFD//CGQPKGBo8RnS2d3a7okslE6iQ5lpXZ0ZxirsSH3rscbX91jd/FcDTp86i12qL3YGxv1ZiRElq+hzDAHWBUi7SA0LW0TEK5EHQtGLMFuTVLcHxU6H6PxFjtqQs2a2hrO/sd/X0Ts3MHjl2vLOr15j9D37jN80lCLFEUwv6cTATdRkEF7/VOG8kHeyt/VDNIx58wHM7CWh+kUgEN1ZAm9bho2hXfJsEs2VG99hL543EgQwhvyApsXiPn4pm9kPvLJuEdC04wwr1snRTnOaIu7rC6zQ2snG429l051EFV9PkFUoVi3Nz0wRjw6ErdjUQpk2cDFwebLdDc4PRxmFy7sa2oeRP//B/eeyJp22T+PlvfOPKxQuPPPq4zZY93QN6dkbsp3nfI8Nyw8kokLOXqlmCJkZ9sV1OprIxZBWSl1IFCP/HQPmAb3fgH8qQg/dgdN/3eyNC8GW0S0jAsBS+K3nsC3FyaDzQ9gjcX8H0/Se8cq78zmUV4fwMxH9gGRla6Q1sKSx9Ct9P6zCIlqBJo4HE4HyL66QVVxZTUxJEd7ZwiL2ZbchBlxCxPaAD/tdlXCk6MTluCgoCEUxbw7o+mS1cvnJRSszJUPfjH//YcOvcg+mZhbNnHjULNegSLEqEbe5WjTXVdAgR5Knur4sZx2N5wbTc3j17X3gRbW1bu4JlqMMW/jdiXyNkdBx9CjRobJpTHJQtr+sgzvzeW51fdTmH5W42EnMJepWFSruAGussCuuSMgVkGUOJSKoJlDIobyQK1k0kVRBNXEGZbgKLS4s0IdKJlLh941ZdcxgIpOe2B6AujxS/9rd/zV6m/9O/+j8/9tjj5gaffhobwqTJQGImmqYfBgHCWi6IRJsVu8B9AfpHYJuzlwL5p9YGt9CFimkKn8wB0CXxQylXDnhH4K70JYZJgbs+FYtKfyPjfc/hyACdHqn8ze9iRFTeMRKkHMqnzhXjUWbFRPIYFHzSviK1tdOlLXEyqRCbfmJLAAl8yTCt4ZPQ1iJAkcPo70kb6eTmCmwnedjFzQd40Lz77tvnP7ti66lctvQtryxcvHh+bXmpx7aT/Z3rVy5y/r9xddzI5Uh6TsD8VFE+FPTYNhAVSZurBQpNKeYnPbmn3yOvHkDAQ3BkkT4Y21Na95NARcSgTE1Fo03A+3tNJjoU2qryeX3HKGBQRjqEorerviEslJiGJiyqx+FMMQJJGSgMQ8ACKFFW01FSTO6ewvnnytICUoOM1AZfw7R4ZensEkd3StY3pUCPt8nysqO3YnYH4fxI5qch2CoZ4IojNOTSaiCbAAAIvmRi4COXZLl0ibNckkURSlc1Ujmp9VaEnPDONsclKSz6dKrUz/SX6DXC/meaA02j51EYJspSkOoIeJSLbeDjE0QxUtl2wbVdpCHaV3Di230PVMXluuTKgiwx40n+GQkUcKgbJhgxQZcywnEkJ9iFPl5kjvibuU6xCcC/7wsmd0AcChMS8SF/PPQ2H8BzOT4wyeGDuAl+eHgCk3GAYafoaGns6+sdGx+ZW+T1sPHqj6a0AkWWZ6lTLJ3h8IPX3uJ7TI12OBVlHR8S8qOjI7b7KtYVRejAKovIPBzoPjwtGahvXr81MTn5jV/65Y/f/+jWtVt/7+/+3ea6Buo2E2wcAB3ulHYghCmBvsOAPj05RbHWYeYW5h0D6mD640ePsTEx+bOyu6RvdWP16NCRxx551M7i4LG9/eeeeVbmGHd0+NjyO60h+pPlWguuOdhxbU27YD+TIMInLy/Iq7PkRQ9MJR5fYWP4A8Xi/PSzzzgN2DyE6k6VN8JOjMS8AsyWttbB7i7GbgNr/+BgZ3u7tSimD/xJ98TqeNK8gobJGk6jw+0WseOszopYwrK80eharc3VUyePK9ro7UpbN4SMjNxm5ma8k9dIZ9+C4zxVy4K8Lk9ShAQL1dM1uGnAE4Hx0qyXqDWHivUXj0iyw5vuzjzOvPU3/9ZvfGXDxtT1q1cv/+hHP7JxXoUNbydPOMty/PqV61zVHUS6MD1jRLTc70x9MoJjgMf0yOZdNkJTdkTk6f7RRx8zWzhqS/1RTW0xJTlilubyYEo55tD9UJNOAFXkQ/RxTTu/yLOVqc9ZgI7B3t7dn56dl8AczeUKELYBF4nFOAW2rb7ZHVigmbo6Uen8Z58yhG+sr1VXxyEkdbU2sMd5+M2NDehlgqHiWgd9mpt50TejMumW6BvKCu7U5N4qroE1VVdHFxWHN7+hAvJqMTUVpxtJUxjdQ+Fwlgn3tRC7ukptcyM5kCwCYTKhiOj7zh/CPGYjkuXsRBMXJAcsaFrdzfGlxBzic5hwP7xJMnbEKI40CfsgGUMoVZY5V5Qipb4gOx8KEASB6tDQEWRkVRwY6rt17cqTTz9XVb7X3dUZ4uSQKDgkFO4ES6HDFkRg85O/CpeSCZTki3hDup9ZyBTyROIHlnoYxn+I8D1o319kluYES+4RufWF70/5xTH4oZSgRJxSzM8UCJKmPitXxv/OO7WCn8XnZwIcibEcRwIMRd+mY6+uOYk8lHuGfDBZUtypl4lAuee3f1BmKW/fiqcK4tuW1qbh4XnDsJ0AmFPHN+U+ffqUrqET2QQW9oz1bRLAagO2NJC754uwUxiqJvvdOpkIAmnV09NruaA6juw3p6iwWqdIeAX3QI7U2Ngku4mRzb19Rl9Thcr66qeefvYv3njdqpnDW3htToyP9nZ3vfvu+8wqXe2d1WXVgDCeOBGIws6QpYNpEbUjMXRPXdsjIOZ+8sFNTyffyP0V1xymLQFSfu2XvsbcoF6hPFVXECZSko36/vdee/XIsaPEzvrK+rFj5ZM90z945fsNbZ1yxTCabK5p2GgJU73IQ289R111WwNwNHs8jpUp9B1/iPI7SCYPcroEvwuRgb+Mh2qRQBTyxtci/9yB8FOHcvYMoQRKIIULRWRgYkrMLxAGpyhavSOZGBJX06cmCPUrP0wheRDFbGK85dIoxkKtbDiUHm0xia9kJgJqPu1CnzCCSGBI0qRdnX1xmt6aBo36SqOxqX8jw8Muiq6pnmXV46M6MNiLnxobamemJ0wyeQa3U/1X5utqq1xqGRdXJponzHMzBPJRhbt45E5baDMJ4sn09yY9ZYocifI5ZxapQYrYAeBfNH/+l5MpsvhEixafLIIQxBjNU9l1YftbO5DEdZhwaXlRQqMnOmAQoxJEkAvromQidQFvfTAPN3qcT7hXMv0RoYJWaQ4sjUf/BSRujyw+wOZ+6iv6gwMbaTSHfiFAj+CuoPkztuAbcqWBgAR+ekCAaiTe3VX01OwMaCB4S5OrKz0Boq2llz3j5qeRzjuloaiAkSEJ2Xc3bWhNmrzjenCZT9EiqkYBhS3gwIIWiyIVlZwDM1io+gQZiXUfAY9PEnsg4B3FRPvHk0ovEDP/RJ6cHiiB7XTeF7ZPAO4MoQnh4H9ETbp/aBfFCUDMhBP4v65XplSGXphaoFqcfFpYagx29ZTegW7qAxGTZwKBoe2NzihnasQyn3xy4Xf+5x/97u//z1PTYyamwyNXx6ZG1a+2znRxpb2zramxfW+35uy5R46fOHrmzOnHH3uIvvnh++//s3/2z6pjThHkDQpTbmJt2Dag/XCOqC63l4Cop2ghKa6mkXadPkuvoD/KRUOjoCcvoP3WlibTh+Fbt9y2S7w60qe1uZmQ5+PB8m+CiEu314OZeZoyGDD/a262XtYEjUVuWzRkCGbVNXMYGOzDY+MuB+CeRHUu68aZMKypquGvY5qNjPV1jdev3BSgnjfUMi3Fjb94gJCpqW5ktqeChWCvrLBCYtRpbm0xFlDQm1riNBqNDqbzf/irmZ5iBt3Ko6a6dndPl+I6Otuh3dJsL1wT5dzBoNh+c3NrLs79tI85nIVklJjssoSyNL/AModcZgukn1VPN1Nxvwe24NgDXQV4Y27Dn4aEceolhUk8skJZlXnaEtBHjvQw+RG+zz771Pe++8r16zckMAF45KFHKLX2wL366o+eevypJ554ihncPc4GVyMsKitC9QA3FtpTRSGwVKFK7e0dds3yFbL5WRrVI3r0xrAyxjwprtGRHZKoSaCbOXz88cfgtLaHNo8DpIG2XPIKkBeaClbSm2moC+/bnr7e5hb3BE+q/Oz05ObG1q988xtYVYk8AfAOpnNlBdaxsun815mpCQIUNAlAwBBQ9SakQPYIK85b6eoFPXxpwQFiyhUjo6+QgbzWhZ5FookFjIK542iqFQeDxolvsbTKZAoCLKBEUhOOXJIsZxelZJj/D+wzY8Sn7miMisrJGRNTHkycMaL57D2va6xj+KFHpdvZawx78O+zTFNbawJGKcGmC/Nzzz377JN9A21dvdeu31xYWZueHMOvi0trfQPHVFeWn+qJvn+vZIJGzitw38eCfAzaJYGWE/tBp7m3xICTZFER4L0J/kp/lzABtVSFe0tgNg39sor6r021LH7AGNrO+97EX/i7lD7qXqxgUCWR5Quz3vVRXjnifQiOFGIishgQLkWKuwtE+qEuuWyIpaz5ddDQ0n7r9g3iQ1clpIy7DvvFxhKrO/9KD9bCt5QtTG5WmTUMMojzpa6alWPyyGoeqZqOwx+X3ujufDCF6yyZgLKE3mbXezKiwwCpZffW/XOyWp6ou3su9yWRzYWN/3a+G4hYijLGqVHCJ8HNL6sOWPjeG9/41jfb2zqdoIvz21qb1je2Yq87G9RB+Ypjkqfn6qobnFVnmGE61N080APHAyYM/YSDKovJn4Q9wsQd4eOx25g6pdeLZKYyQmQOMaXh9SA7QdfR7Qi2EFD/9J/+0//mv/m/vfTciw899PB7b39Q6WqO3IjW05NWig4M1KFxBAK5ZoV3Tumdc6TAHRbKCKfISOD/pGGmWUQpNvPb/T2umCBy5jSFmBLDpMBdn+7kyfjl33dnjzjk8s5pSu9STKRIaXBCstSGNNO3tCOa40nuAIY4XxEWS+A9Cfy07sQFCFUxj08WjX0S0C7kcJbJxiljBAMzwws3XGywsbnC9A8lkha3bW2GcxDJbAByA9GVa1dcFsSe0mQHoQbZ3XJ23MHeVk9nB5NxR1uLJi6KL5SPOYyaBUPEKBkKXK7O575DZyqR9HAqeX+G/o8CpcyYVunIxJmNyX5/r2q3YovP6O5WUDLi0y06xlOdDGdiS4SSC4noAd7S6MvA4NXM+aopJcIiZqZ2LsXbIz0ItA2QNY2fknlnZZrmZAjzaEGRYEoc7iDpAT9olaSWRgRNOxII0pMh4EgMJe149MRxaAjDxFsWxYEpGZiAqQi0FQFPaRAWPL4/fmbIsksmV8I6FvGY9dNgHr2bMQ0c/FNksxjlQcMYUsrrgaq8Ac1BYdWViq6rbcrUVrT0zlgER3oAS4+fOQYEAKVPWQiQODA0/yylSbnyrztACr/THwn8LbZ3Dqdfh3jgcPrPCyv3gZ8y/PypNAGACtpZ+yBgsdE9b6QMXk/xEQ7IFVZlOztd8zrZ3NLw7FOPsNL8u1f+ZG+/o7Gp7qBsu6GxBsdVVZf39rUPHT3S2zNYV9f9j/7hPzaOcBD94z/8t5jz8vnz9HJcpHrYoKWp2bnpOEGvwjIKYSKtqK/o6+u/dWvYeQ90pLBvhjDeL4vjDN2Hm+aQyUai3Zsd9Hxw4AA6UlrvwGlabcuRO4uOYN4wonnoZiiwsrRsf6oseoRFgyyrxZv/G4DI9isXL5EeGry3q5vFih2qo61zemZO0bZQzs0uAcilyEkutE3+PdCOtYgKI065k+oMLhzCFxenJTtz7qxjQzE8mrd3dqqCcjGzNBYlVB+/bYYHShzMgw66jrbDm974Xy5bJvSItFnVmaLYcoNhw5TAtZJM/uZg7tixi9VmBE68+qO5BzBtrUwZrfa+E4+kZXRLXUW3D8/1WK0y+OXlJ9N0jivReSixhtcg/e7uzMzKc889xH7/8ssv1DdUm1UY7ay1Eq9Gd0Dn55a54pAIEKWmP/XU05SEkL+3bliLgTE5S9f87ndvi/zOd77z3/63/+3Xv/51nlIvvvCypaKTR48sLi7Ii+5aSEsYVjUPmASEeG9STKROBdroeEh8Il6dpVeu/oxAtH+lI7TGFqk/c1r44Q9/eO7hhyD80Yfva3Xn/3z729/u6eo0Y+G76Hw3hUrPw9MBq9tbm66Hy8QhTJSVRRsSQQMC5D6imdiA78EWmhCXOGHQ0sQrr7ziVFOY2JakdEeymUsIzMxMOzjKZip+coCYvDnC3zIKOlOeMERDo3WGLms0TjmEj7LMKQFXLtcFK53snHIRzJNTMxevXtu0DY6ErWdKCeGr+hrVEoO8clm4yI164cIFzYloDop68cW2hx56ZH5h8db1a489+tjw2GR7W8vwrev9g8ejk0PlL/Uo0XN/VlUoRUIAGmIOxWXl4AEZS7nuD9yV//7PP1NM0cYhUwn9z4EftitUZdHCvQJ6bGVdLSb5ggJjuL/vMZbkuFxQqTg66H1pf7aI3ASH3zl/tE2heg9o4fQJFvEQ6RJqKL6Bc3NxMo+jl/ULzEyhN6vQ02MpNk2z82jta2K2sD1YeRs6MuAnRY3LELZk+3/44XN2vmJ+kpFYBOHsudOGFKMp0wWqKsXgSjyszcTUPcpOW2+jm4fYmfFTKfWW8sv3zHGrYwVglwjG3jDxllIa+PupEwhvbe9+8slnJtNMDsPDoyeOHfvs0w85A8zOzr/80s91tLQ6KHpybFKNbJ9h5iEudLgYSIrKKLB+gpwDYPqEVrkUYYMEoUcwWuJ4+LFHxdsErBd/+PEH+rserS+zfhBQKkgEbWxtNLY0fvbZZ/hHzO/93u+xaZFFjEGgeUBQCjIqtNBejBLJh9vXHFOIT8lTOPwBi5/u9DXJI4l3ancrgqUnJY6UAikcX3IgRUh6KPWd8J2Kl0DlQAlIKf7+mEw08ap2KFcuMIqTAI/R/FEgVT/oYAgg1uz59DXr93xY5ZGG849c0mg4wl8Cth4y1k9wsJa2w0s+CeNGCsra6o3Qd3cskZPocU4LQ6CrwKqr4hwbLRJPtdWBffNa3pL8ZcwwzRXkCjG+FsdQskVmg4WqQMAPeUNPZIsJWhVql+uYKRnTsMKjOTRo8Wewaw7njLn5QCqsACTvfwD9i2R00SgrPYf3AIj0ZLKou1zmsyYA04uzcqmTHiETWuFkKVXHm96CtvqjSLVDUmOr8RQEb9BKWQxwsuRkoGkdpMPnNkML+Iks0usOwqQilx5vP5Wud4CjOAWz7MVsOOnumR4QADwvtkumCEjmBAByeICJn5G9aEqHpwNPfNWmGhH+epOyxBj8EsUCtp+lB8xcHPQ84jNKRk7wPeDDBJ+YuafEIeo9CvUW4+Fyy3dMgH3WAw2EkjFDLr0BPxwGQeKcTAA0CfJPb09Ont8pIjaUQzBeMRqHih3B/1We4FXFR9mH37TxHANhgiW/xYyMjdLutAVzz49/PDM8cmM5tqGszi66qGuvuaXerv2FpcWW1sbRsdtMxkePPPrGG28E47W3ckrR+J999JGBAEykR5vM+dHRQm6UOSRmY3eDp09QNR1SjwFkxCHhOJGaNVjCBbXRecuqZg8o34abUBobLUcPY2N6F5YTQ/LPz86NjYxiUT+hoWEuX7wkcOLYcbWwXu0Ei6GBAddHkuFGHMzf2dXu+gsqq2tqVjY25xYW+bwYItvbelpbWHL3Txxv434zPeWKAEaxTSZsfUE3cX7wzgFn1CoKrQ6C61iJ8IMdyhiJ3r+zHJNDVaNx+6dS8ZA1FZW0TIzH2haOLU18Riya7ZnKr+9aB3MXQJ1zDz3ufnUPNoXWPr2OjraZWW4/DTqL+4lt3JWy0fpM2EEO0rn8boOtZcwLqzwSABplh4dcbBISzswKURRJE/W9wSN9775/6ey5I5IDNzY2/OknH+k1ri7+W1//6re+9c3LF65cuXzjuaefGhzsHxudCt26vp75UA9HUGLARZgYHHCmuOGRseee/RIOOnE8vIYcwsp7h18Bv6tZh4NsbYbZrKODEIeAR3sgCEu2+RyEFxeXauubrKGYDH75y1+20aGzPU4ig/DLL7+sSZRCI3/zzTf1bUSXlz/YrRvXzefGRobfeee9/+Q3/8GVyxd7uvnqWP9Zxm7qSsM2V/EzTacWeOGjDBJZySTtCUoVAVZT6c+K0DBwg6fx3sqGSFoRJrOyI6UD4GTPUhJuxIbJK4aQhYLi4CA+V9yEbDzGW2TZzGyckiQvmcHtiYyT0ieVaqits4ZCajM38G20Wg0yNNRLS8XN8JWhElkIq6m2lCJf5dryGlaDG0Xkq1/5sma1v42YM3lr3a9vbTtx+eLHW3v7V29cPnP24cXl+ea27p/FCIVTKCeFt0AOZ3UEbgEqR6ZA2BxLak1kCsGRn/QrvajjsePNU9RTw5MhvCyTBYIF2Iibw4ffRGzEF3BITg8ZGfEJVIKWBFkCHqilBCkqdKxU7k94Z3kc3KulkFdAc2eA6S2sIG9aaUAmwRK2+RSFO5jboRjYsvjmNxkbeqx+F8ZgT6Jdfpt857h73xEf1xUVyJ5qWmwCkYaZlMNf2gTEoPV58zutgIU8kSuZEnNhnW3ttqarKQYm2fFheN7X1GBRq0x6Qo0jrRjCV+NWDerR6dMnSXwQ8D820zV6e4e4Ib7//oec/vWLVvvi29osVelB7sTsG+jbOXDv3lbaA1OFsRE2xHFnl8SKo2RMTseKH/5/VIeqco/1blZ9ED/V0Qp7BWN/q11H7mLd3nBjD6swm5AE3/jGL+5X7L/95pvmG1rK+sMH77yzXb47OjrecNJtxC6Fb6E0pKrHEdGsKCquvt7Q8OT+pXbSiMz08c7PwtJCVVxetruwvHi07aihiMricRjAD37wg1s3bloZMNkjAM+ePsfp6Pb48NitsbKdsvamtrfe+DHxe+L4caefuWQGQJ5MWF1AWUmVLDRifEpFe/ub3ilUVAtyglL8oUCJOWN0LCULjkiu5NgsuS9EB8AuWfgXOyAwd/NeTnoIeg7eQQhyGjXYlrEuuiqwpCfIIq2fRe8IrhTlFSilEDAhBqTHRHRPH1lcnXZnUGBjMv1De21FfjY3tYonM7Wa1uEJm7V/cwPNjanwjMcnMT7Jm412+MpgHCPl3l5tdSWhYrSTgBR3PF95fRVRi5+dC8SFxuZynDE3M9Hkop2qakYWTCsjO1HYxcIKYKKSu1e0B+SDWGqVaBExqZ3inUhceksQ+dI7iCBlMRxpSrlSfBCylCbFBKMiXFArxKsHd0UwRfFyscGLic2E2KFGEV9+4IDd+m3L1OGw522wILGiTdJcAgJiPIYkqgF1B/V0XgOOS2U0UPSB3V32tUxPyXQTMQSCvumAYGGUQR9qlrefhsjcefU4EgDK3uJ55zrssibOiwm2lMu4bICjkxkor91kIpzjAegTzx/tRc6AwB2C1uJ8C5qonaZ8Ax2l/emnn2XXAGAnJ6esbJtFS+ygDThT67VOYuaQxmpKVwkBmOLVnaWZygOrtbUF56zb0BmjfGwJj9m+6SDZJUzOiMcM0iDRzl7Y73Fp0CusJPG/WoBjbwm0xeRuKz5+Jmkbamz66Ygbm/i8/dQ0hL80uX+Gjh2/uKyHkAm/GwAMGhpKpWNwL3XkBDeYJlL+VT1ZoS/gEGUnugU/xo/735lR74nHmEODR+0FtU2U8viv/tW/Gp+4vbW9wnGkraVpY3OZbjq3tsrP+8tfevHZZ58dGDp2+uyTba1dVKulxfmOjrrXf/ij9Y1wFzeeWMDlxblcpilihwauQ7fybb6du8fOnR25dds16itrW/39g65ayq1Zg+41BwSILQGuoHP8j2s6dHODm9OZ8WfsNCgvGxkZBk1DYx5V0IKag+hQ0PLigpNq8NLw6Ih2Vy7zOdWflWfgyFBHqwPtw67PEGZV+czZh1Y3d5aWV6ipWouhIbH6nqPnsDRWd9aiA+8fe/wJ8QMDQ8vrSzV1doHGcpkYh1F4Jwae1GVMJPiP0PtF4nwshiwOPDWYmXI01rZiWv1XXh7v7Fvbu+uurB0fm+bip5VksdLc0d72o/ffk8S4Y36FN1XhRz963YiG40ZHXF0SvKr6nPPVosq+BBD9lh15YWNJBTnsFfDTvB02Om+iPnfJ8r3Ng6NHT7Bt/+CHP+7sanYszcDQYH9fF6WZKWFrY+Xc2RNUXieC9vV28sRaWpq/dGlKHw4LTVm5M7yra+M8YHabrp6m8cm5o8dOxT0O/N1XN+ZnF4h4M6G52em6hlqnh7585KhbuvuHBp3LRo4zqsFkfHQcbpqzzv4e9DwoO3b85OUr1xzW7whvLbq5tZ4cnmILeXVn1/PPPKsJ+ckcP/owohuMCS9yx66L9z/8AKVujwwbGCDpON7h0TF0t02Eny5RODk+hSZYhEQbvj3ikBNTM8o0GQET96/5Sqsw92iOCxbbrWS5n8Xuo+OnjiMpnJvqQ6K5CRoQHAZz4tXtc1ub6VRBhsy9vdNnzlr3IEekNFMCh4LV1t7S3NDoTGeoru/EDQbOKMP0+h5kV1ZXaTlE9vj0jLNO97fLXWKHbVxE4Jxc/GRZBqf+/Esv0YTqG5qIMBsKNnd3yNZde4c3nTg0d+3atdqGxtrG5uMn+4cnb1y+daO775jxz5NZEz4Qxg+ErkD+6S3GO6STuJBSBBJrSeyqxGqUfN+S5JA3NJrESEYqYiv2TSYFK+SXgFrjByUUJFqYxgN4GryM0iH4gAvFKFTYKEiUFXywuKUlLw3lxVBJVLpYh19dmH+tA1ICd7YtPBvQi8ccJ7QTQDIuOUZQ9cCLQSJMHb4nq15I7SgW4MPvmBjb/qPpXeYBbd4wWlbvMVSoYyim0EvoQ9tWDCbtuqZGR28zlC0vLVBinMdqUCl3XQp+2HLgfaWrzW8N3+zu7HHib3dXP9FJECtCx8QbINKiEkGClEgdulqafFLPCBDGAs1g7IoS1UR3dvofYnME5tVajVVVRbenYxvAgArtNrdgoR3TT7Mq4iVaGaRIlpreqQ7NbcjZ80Qvdlpdvh5SqbWFgGPCwagmvc52wOeNzXXbuxvXrl8x4QQEG0+MTznnwbkPrsd+6623b6/edtSDlUB7awims6dOY2mudysbXB4b1zfXl1ZWERtL0xrIAbNWPUVHRvNjRwb1dzTBLdkWotDbwzdxu68c5fybnJ52IqNV4LiBpqL8/OUL45PjH338gbJOHh9YdQvLzJQtNL1dPbHEuuGsZ8deOTcm2hyN6AZ269bUtSEp5s/VrzWeGI259qWeG9PXkL/oKlorlduOcHvkxur60rUblz+78Om3vvWtzz77hKzb3u7f3Yplw7HhcXYj0P78j16ZmplmwjGQjFwbW12IGwz6+/lSrjTV1RMaHa1tM+uLRh18ZTSiaWEnlDdH1Ce8da2Y5sYTrVQMCBWwTV8KioIUScuXlnLhFsy6/dkFTbm0YvIVI1BdZTjVGBaisybm4EoYSqEfYV6PyW0cvqHg/MR6MF+rcvcbKojcQxZfIimikFPO4dHxArFw3dnd3nTIojFje3Pb1ormhqqttUUnZ1gGb2xqJ1qVwyEnzBVx+PkuBa+imiutRqlihmVgu3X9JstuKsdp5TGO61493Q1Wx9s7OqyCVtfXITU8Z6emnT/CUY1aNj8zCyusool8cmBaTAS3d3xyLId/iuYho5UZr52bplv4bs7YUMcDea/CQfrWqN2qMzvfWMdUxjnMkQtxy0qYgKlvah1bz0m66GtBc2tQMa+JpqF2xjtiD70xiqgsEeOtOVMDEloh17yILm89nyTyHy9UQP2NOYUyUwd1tHq4StqtF0NScrprbWvFyhRxSr+DvxnXWho7XGKgIeJ8norKpoaaUyeObG/3YkUNFXXnfdfgpE4z21RI2gyA2cyF4gSklkZu0QSBibROoYdaAHGJ5er6iltn8sIywhoroUHSwsaJd2Lm4oitBmHi3YxdWbE+4N4xwodbw4FTSWOhxl00RCItBH0gI0GNzt/SrKFJwpm5edZQnwDRgm0d7TxZnaXBNMqQSWVRhMbl39PT1W0fJiOo6rS0dj7c0kF19tDqIZPMKppDbyEF8S1VYtdtU1R7qyLoXdcQ935yZGA93HFklNbdJyHLaQw4uIqrj74AcUVrdj4YxhUq0oGZj1M8YuCGOXnYre85cKyatZRw3qeBGeJNHe0uPe7EAiNdlbMpY1IBjlwoEIOdDfiGmyxnQ3iH9p95JvdvYfwRYoDJQQABAABJREFUch6j5B4fs4U73TzNbRKPpVlEhO5+YHV3ROFXYs+7viRJLyY4uSA7hIJdw7bkr9vx7sqQfqiRhhDEisRIDA2xUrfX1+ukuJaFxUX3FAULa+W47RE59znE9/d2b60u8cG+/MmlufFZPs317S0cNtZWlthK+EkfP3LcafyOnXvuuZc++5Qlvnp8bKKxuZGT+/T8zMlTpziIttS13Lgx3td3hHjs6e/XYuaVC4tL1EEl6kj2NBpqdWydYnFphm5pAylmgypVis0lo728FMfWizRwY1euHLOzM0eHBsguLuK/+qu/atqPXKfOnNVwsuBGZ2Q5HLKzq/vIiZNGIvw/szC/XVm2XWH7QWXv0QGjoaYxbMF8cWGZhn328UcRxzJk9YrTeCrsxnHEjCIwqYmrt8uvuga6TH0b65tODB2nrYGs3xmefHWUvK7hlqqp6fnLly9T6iBMm1URQJgLPU3JZwTd2lpbz5056SBJ6/PitQidytB89uwJjMcgPnR0bWx0AuuqEbCDRwerDLfK8xAQGhUhWFYE5EdNfkWwF8BPCuNcs6WzhEdsnQ6EA6CoksPDN86eOkmSf//VVxZml9dXNl/40st0taEjfe9/8Mnps2f4n7S0tlFAh9p4wTZSl5FeEQYIAm2FMrsSJ2BurK22tLXD2CmwdOv2zi4Sxyd1pmpEf+vu9lXF5DUJ6evv5z7llvbRkdtaqL8ndJR0IpLDA2LzdbtNiE1NFHQL9KEkHOwvLC1ZPQBH/X/0+ht5bUGnPX7ilFL0bXSwLsMStWjJWE3jkmy3BcfOYxnlQkq1dma/RmIU+e53v4u3JOjq6XP26i//8jfQSrzFCvHR87dipERDaeyPQWGNqiz6Zt59aFajUqD5YolKFkrPM88+JcDVn8iz6KNEFcRbAXA3fCItcqEh4SEj3QgEOq4JT+xV3D8w8W1v7dfvTF9rGyj5jY6l7amsxsCOs93Zqrhy8ZNPPvpwa3froYcfPf/hhd6h46fOPnbukdNGHAV5cok5/AXvnBx2hEESFmHVDnUgIZwBSZOU9bDJEBsJWn6rERGXjYJZyhx+hzgCJ8RjJItQQitEYepCobtl6RTgkk5M5mJlRgCTZLQibVE1lRjAIpAMJ0KAOck47gEqyL0s/QpvREwViq9J0hWAhKqT2F4L+hbv5CKSdfQAT0UKbCwmxrjtFjd4m31ZrDOKQK/KXR3s08yQ9m5XR+9b5/YyO213jWHSOGprPxdDd1GYC2tiTGKf93Zs3o8nUSwHlVUgV8UBvSvCSB1Ct/TE6CE+nBQMZzKXvuRArkspMtW09CsCaYm8Eh/ifP3OYAhhWpepPcLqpGaq+Jr5j6nVXV1uShobGzl69Djb7ezMvAUxnM+Xh0g1dlpnY0q0OkxxogegXqMdSwfrAtEhKsoZbzSZLuY3rtY94aAIzS1SD3LqiEhLCooT09XuRhibhZweSNg5N211bHLM7WAw/NGbr4+PDdsUZbYLGpEXJ8xIxH9rW9uVu2HYmUKOrMMnBJxoo5jhP7MuUniEDe2qEMO2hkwEFPAYIA2RjlqjOtQ6i7c+jj+/du2KziugveTqaOtocvDo/BKiQaDJVLu1eXluET7qNb81Oz81K8wKRA0AE5PFm2YWO8wKT0aj8CNmf3kqHoyb8TkcyMkOxyfje0wccmSGFm9MIS5tfSiPkj2YH9joAhREb+xC5kgkAIKC1cyNI9Gt/PM1LJd6e2yjJPDxdkxWYoquRubEu6Yv4UYffZimEUyIhAAiiAGF7OKNIxwEPQh7fEtDC56fdIP77dtO54CnZViko3O7RCWm2LLvly/ZxmtLKEMa5336XnoE4Jzfvuawn7nKUZ2oNdI6idsCQ/CAgZgiq3YEq1k5kRG1xQ36J6WQ8TfRJGiY5kWARIfSCggV73iALQWiw6UnR33xu5A0dVHhQmdOeUItS5VVhnC8U2rKKHZVKb0vnmQWZffx0TGARoG9rXXOOhxCD7Z3Q8KgUZqlQJKATHMiKi0PxtBCAMiMjX4Bs6y8paPNSSlLi7Hs7DAOw67x2uYfCocxV/hO+kCR8FsDH2jcbvAVwCFaUFPmYRpYpPZWqIddzwJDWow3UsXeOa7LeivOAL8tbYI0Cpt7pMq5/ak20qmo8/0O9vnKcsMBhxefcm0S8Va0Ek0aMSEUQwSmbuIdRxdYntvb7mjvisOLHeK8H1YqPMTQubW9odvCzaMukEcHKHkg72cieUzzxKudyNMnT9gy6nI5McgVBMQyYbXF2MRF5Mg8UGCOzB4xyQ7bS9pSWwArZfRKWaJ9M9+kyV/KyaST+ktCopQjVgZEl9ghSosi/4qe1KQZVmlAe3ABRiZk8ag1Zzlyu4VZ02LrXiXq/4t/8f/5+JP3NjeW2Tg+O//BieMDm2sbnR1N1u5amlqPOPy/r4/xcWVjpX65eYMb2sYascxwOdDXO9BztLWx49zpx4cGTt28NVpR3YRMa7s7/Z1tuqvDytniq3tqWpud8F//yLlz1gq319es1DmhAtPZjWHR8K03fsiDnqORSz5czq6x9GcWJc4jUGIyxzBtrXExtk6BpTFl5kbMa7uHe4pZiuFc11jvoAjvxbkFl7hvcHQxN97aXV6f3t6wXa2qf+hIpZ2raQ8SPqRh1ltQampkIGhubTLri9l7xQFbswtYuaoxG1tbwzUQwPbMZBcvXIbeiROnSDlpYQLMwuwCTX10Ypy7FFF0+vQZJ2c89PAjVjBaWsz2dS7cbtf7vEmLKvA27ezsqoleU/6Vr37ZCgbyYm+m6qzuI7hpSXRAdxXvbc/OTWedM0w+5AMJgpWV7W3qqAPAD13Yq8ghri9Q1EpuBG5u6dAB7COq2ToYHZt2c86jD5965NHTJ48d04GRSQ+3OePVH7765ps/7h88eunaza29stGxcasHHmv9K8sbl69e14qGawjNz88Czuji3vRIwSZjm3Pyx6KXmxWI1z+nlhZR2WQj67virbNAcuzSJZNC7sXq3GghL534BvP33n1bdoq4N88ZxUlAWthupHYcAELctLVZOuSGhBa3bo8FGsncFG2ULvNjN2IrhCS8kA8EKkhjU9Dx4Yf7wDErgGoWFvh+cbHNCVDwv3nzFgyZQNA9e6xqVAI3GGR/XxXQ2YgjQCNnJJAYntGdDKiOLZqLbSI6IlByCZCqipMgRFVMz2IVxSdvADFEe3ubljKRYp0ltT3gcI51IcDBahnmvXTtOuLPL85tba4zNTnRAvV6B3odRr66tcdkR6+qqm07flS+O+q7cJYHOXD4J0z89DkHcrLSG1aHE4uHPKEij7AsSZfPUu9OplLocCC0D08yzPMdy5+MzmDgVQUFIml4VqId53vGPMN4ELiagUp6xPcm3Qhc0jPBy3Z64bz4GTgF5PwO/T1+5SdWJ9IDE/NBEi6GVBejlDEU0X9Mm+MYSkkytagokTz+hCw3LOnzejvrmlZ2SqamFGm66HAxtfCJicwAgxsrqiysO318C+eY+dGy2KO1VBoUEtCgRIG0QcW/7ANEzn44kIEVoKcfSMf530TY3iT8huG3tprxqV24VHwp9Z08+KmUqaw+JdIcgNKA83XAjuQVwOnOqeqk0rmHTlOtqutqHLXLUjw9v7W0HAo6gniSLXOTcp8lgIB+R0rmIwtwNXMO9zwdxAyEx9FBWa8uoD+i4faO81vm+dnPzM3aunDz5g2emvXVFcYqTMK7o625BW5b1aGp6+BQdV0KE4Pttv7V1NfRAYM5koYd3ErBD+7yigknUhQ6YKJM0n2DtZjw7dzY2Yp1QnMbMyX9Wo9GXt0cbppPGJ6yg4MHAh+Xp+46FXFZHydYpmcXpcnwvbP+fbhtDzeK+NLPFAh+K8RkFkw/Mx/mBCXgUIKnyNRt9Meke0TnCvNz5icihtE07PoUYFFh+g91XlAl3H0Va33pieEjqVPkmambGS1bqy8qpbOrbEas2LdgESUoHZy0qYTReoV533LVxn5oXWapRF8WhoQtUtD9IOwseIvGrE62YvE55zBp/qDayJsQiVeBAlm8HOoaUWrSfL21MGgCKWOiW01YVbQICAIeAT+lCaCZkkAXnwJpC/EhynIaESn5X+8r4+mtHXPRiKZGqmPbJE6rZY90SqYZU9KbhwYG1Qju0JJeR5NeAl2JZpAkDMaMQcQnMDUcf5jG/kY93QwcQI7O0hsuiThL+grKyj2LaYK2DLJIaRQEoAcQ3VZ3FpkpmbGFAI+DXJZ3ftizPOS3NG7OCZ6JhU3+eDEKR8dMR7WAKVJB3uAwi8TP3WA2OrTJmyUCXrGWJgg29SCTsa9mDwN+GC2xh5YyKgXLxxM9IG44Vh1dOHdSZalpLhF8FfSGWGACXNpxaUVBAo94hIUM7bLIHXf+pjIOs8ddYV9lPJwmx1DmcmMlQMHS0XTFTp3T/2/hrfolNDJlAtHySrtyOrqqf/lXvnXh8vmjxwbPn/94cOj42YfOPPX0o++989alS5+1tjTOLy5x6gpdub5xYW7ZotDy4kqDKetm2e2qkamxxfL92tPHn3z4oSeXl3evXLuNlXt7jhw/eeTG9StN7Y1dHW10HwdSmkuS3KSmRU1Mz7qj7ai8p48fe+mFZ91ptLm15tqPYyeOazhMAOG47KWsjPonhlpLVmvV1rYOfMU/0KYVLNs3MOA8npa25jQqVLIbswWPT02//e6Pr125fuLU8a98+aut7S3KZbCzQEHL5yxHUDkifmnpFlCAc4o3ChjTDUwebKXH8bk4dnTARB07IWBdQ8NgXK0Tuhx3nZaa6pl0bo1egxtpa96q49Cx2JJTE0vBLtLBkFiXb/jNW9ddAtA/0OveBeeo7k3vDQ32Xr12kVJ45cpFA5AWMSPynppyHU3scRIJPaUbd/A2Y1zclY00fkiHoaGSOsyepQpwJRWjSBweBfPQXV+RLvZ0H9i5bz4RTvNMJuFAX06JiZ1S6jY5NXGk/+jw8O2uzp6PPv6koalldHycp9TEVHhk6uGY37qCwZEWBQGWGduJbLr1kPupZy7b6WokMK1BEaSkTNi6ag7gxCXiye6CWPXo6WlqbWGbN5yjl6LdJqY6Tz/9tDR5JOanqNq5zqopzKZIpXjmmWf8bGxqgdLiYgiyJIvCUxBPK5QIMyySbdAA0xt6zS2tCKU46prszz33HDUFTLomiTk+PkZU8fIPyI2NknGEQENOzABaitIMskMMNCoRiffZZx8BS8tB7a6uHtXMtk8cI0b6XHoWN+pIIoYgC08EKKNh7OLC+sioCHYOC8E0S6ItLrJxmF1zEzdu15/ZqM7JAfCWpvqh/ie6OtrPXzpPJ1O1Iw47qqy3QVPFYQ5uSTzdEz78NY94Yg4nzunFeHzyiPGkUAFy8FLBpBWfNLfvEbr7CdU/aWTZ+kilCDed5BppqwN9JRZ0yXN2lVDuLVn6WBXaC5CMfCYhmtIcwEgQA6JUnjyhKGr4BSF8d8EJ2xyVa1EI89HecgpTYW6jRsglQQBNlRWI+pZgWmEwX3D8gYHQInisHUVfk3h6hsfKtOMyU97wDds/qLOoEyeRVzNmhYETcI3O4CWLqWEB+CHcxJAF/o/A3U8m++e9M86+lgKl3DmLnxEomsT8xGBV1Q0qopP5tDSyhM850LOpYO8LFz7zxq5vvvmmlPCn1LJA6EG6AG63tIWfcZ4amfNrt77+rv7eXlcWRt9J2wcpDfR+HI49dGQAlSssgXJRj/4xpZ9MTaQ0exYMxUUX2OU8uXZQtmP7wfDIbVNZiyqmKPV1vcvzc1E1Gia7R1JHOJnkxoK/PuKNW1gciR3TLeKI10BOYAIgwPSvZ0EGklpEWKQH1Bj/kzzhYqDKYiCm+kDx/xGmWGg7LgY6eE5p9VaJHi1OA8kCNsKJ1JmdvFU5FxHIH2pxyTJzCeRP93zVZPfES58TA+uTiiBpKi7voNAfwtoXVnp9yCvNkCWTPubHhD+Gp/zH94rGhsZNey0wZ1KXUYSiFTo6gzpTXHhIbOqtlKgwvu5ul7EgJQQC80Q0AYA19Nj4bW0aoA7ifkNdw2kbrmaXAJOYTNrwJ6+5EC4K9DBJYyODMepx5y9ns7u7ahJHw6QnSk1f80+tlp9qe0jSk6gRtFJBYbwhpbAYPz1wCFoRmgmOGIh5UiUSiPQSc+dHTnrX75/wI4GMbIfSHQ4fik5BaPirLjLCWW/UIdh0bFnYD4dXXbKJw7tLi/G5WRkhk4oImCqIG9EcPcExIGLRJJQO9FB8K7JiodxVrKZkeJJDy4ajc1c3NCtPgFh8wBtMhYROkrfCcgGLVrJ643Og0E13gKTG9VZ0ppKU1kIT1nG8tXjd3BqpXmDVTi4xUKJRwTMtjO329PcB6Af4oMHc6U2SxViQHmH+JVlckBkO60ah0gSADg+FvPZIzcHLGjB4NngstkOYcEati48h2/CoFrn1IQxPXJF/ykXvNAFAZzlypSDgET785BhvecVLDFTmLj8jQ3pEekR4l0aNFJM7S1jJYsC6k6OY8yf9PVzK3Wmz/Lg77mf/hQLwVKP8AKBE6NY31S8uHZw6dZK0vz0yTt784//iH7/40rMOTHnzjR/v7FU89vgzP3779REqeJjSt5rrWyvt/C+zhlBZVVa1OLe6MD/V3tZ39Mhpw01fnwnsNCpW1VYcPXoEk7U01LC5aRRKGu2fQ43TIPCPS+lNADaWlgj/vS2ejRp+ix3q3MNnVu38wSH1dVZll1YXuVU3t7bhJFZ+DqhtnR2YZ3ZhkZY4ePQIvqitb6ysqLWY6f7bm7dvXjp/6dbIrdmp2fWtdVzvTPnvv/oDMrC1qZWbd/iNh36oKrGbBR30CHzV0hxbYhABL4EvUtgxvLGfNGm8+BzFYO6RQDLGL/uGdefoemFr6zt+8hi9MS9oOyAHqTESsL4Sjy7nUZxCtcXg0Dm9YXpqrKWBR12N+UBvn6ONOhlK1EhHJEWNlYQzyWxJpH+g2wTbERX2I7fqq+4JMRaCnlg/tvjoSxQrQ7jq+enOFF3bpneDgJ6zvDRPVluv+6Vf/tp/9Cu/bMb+47fegA3l1bRfP+3v7/0b3/kbv/f7f3Ti1MmJ2ZgDUbJ19ZqFZd0Y1dzKaYjRt5ls6/Tmg3RzZ33csgYTPVYlu3vieKbwfrXCWF9P1TB86qLoy84HjuuHO3q7rRuqPA64Oc4zrI91ivvN+Nik8MkTJ0yhegcG83Aro2Pe+DgyXqoUsJrBbNLmpeXVdZ28cj8EkKmXWvtjBkDYRQvV1tnLMjE5NTk1HTjXxFVfIAALFGSgHUiSyxTO8GHYNCeRUgzOANimXvGUB60lMVJbxKSgd/W03x6+pQhnu0rgImsOP3FEz/y8JhAfGFbWmIz5SpXQfoQwibBt3/UWGRpOCJZ17D3oG+zl5kjkDQ/fQkDswv97cX7u0cefQEZ28Zrqhu7eLufcOdt9bXnOUGFhhLLc3jNw5NTp1Y1wUgqXp+jIcb+9f1nvxLJJDEW5Av4PmZVGW1EhvArSK8Lpp0AMURKmfyl9SDoaRQJBdvgvMsbPQ08WTymSakvrSFN2yVkXYnSGU3JT5lEaRiMAYzwSaYIKS30/LopStMycgWIxWFeuraH1F0sK1GPttVRq6NCeXHR+K6j0PWISqpEIYdGfokTdQR3UNrz4qolTHrlidBSTngprMnDQmthVX2VjmByfsGyMv5ireLLiIpNqnEYAOv5EX+W+1dgUC9kL87P4x4yYaNhYWVe6ggOJtLCQGiX9+pxX0P/wtCTw07TxRCCIfyeQouPnPQGsHoTlNB0+MLHJkvoePaXS0mq3OTB7vLAZNHcgwotgoku4LsOsmCw2D6dh6E2ry0ux7f7dH5PjXR0dZgKtTc3s5bUNvRYEouOkYVKD6v4zU9Mow48Wuo5mY+0TRiIAP/zoA7cC8+AnhTj8EGoEv56iI2CSWL1dWrAy4OAd/YiBaJcJZK+Z17HvQClIBfVBWJF7dJ2myiZeytpIHTFQQ42rNmIJVPcJasUuE52VxuCt48mdSRh0grMTuuz707Ke2J+zl04WLxpTdV5CJHZh1DJIxe0c+1sHlXWhfxALJCwRAY68ldXJgTWZohWEW6KAVITEGsv7cCB/Skmgkf8W3pIV4gs8Xmh0zQSONyIowsRKhXJlknpNs8wdIcykOlb0+SBq2rnjSIpQrMIAREAiDpfoGA5YWDnM2GnKVLFnE4FV8ToEs3N2MzlF6IaKCMJFUUC6BvXAutnY6Oh777zrFnQTeZuO7IDSlYgdQzk9lm6mCrBg/zVQGT5hSLAS/qBYFfU1i7g8BytVWQXhlt8ic7yfBYIUY1QfPyshx3vnXAI+IZGvAjl7eqechexF8gadA/KhZBFRKKwE+q80oCzVyS3IXRWf6Fk0ob2GehzOLGK5m08sJYRkonXygPHogPgtBrV0lojsRgR11BFKXJFroYupuJmcALseyckOiqitzXzlXbxNNIWZLhEoGmducS5nhFWmmOJ0rpiHpOMLD9NHymT3rc8jINnsa7bKdHXHQdWZOfNuJggHtslZS1hKC/J51I5kaUpQl676ylXwyWr9wdJC8FrY0YPzePWmettRUBOef2hiChN3oDIrhDOgXNBua2mubI+dTsIBjQ9SVWV7K6+WZkSjvYT+EP7KsaBXelQQVtJbbTbNULv8lKoctUtKm3hhJPII5HAO3POWviDkI2WMsZEvAbkn5f+6PzVNsbohGTMyEOUcqrc3NNX/3/8f/+zdd989c/rk0NDAzu4mN53Gpk7K1EG5jXPN9mLwBuQnMzFGo2su5zDoKBqW/4pKizp93QNPP/3cD3/44/6+o48+4gi4qZWN5cmJmc4OWwjmNF30+oN9cwYHQtg4xIIRxzQaFMrKeMLo2LOTY66T4YB6+fq1hukZ7RreZWUVlOlZ+3n29ttb2/oHhriqNre02LNRXl1Hkvf1DxgpiGwXjXHNMFW8cu3y9OSMDTCd7V3PPfTC0MAR9vhbN26PTYyGS0tscKmUkdrc19uICPpU1tmEcQ4fPBb63r7uPA2I1g9zd5iivKPKqQsjICKwlCGIcZOUo7WyoOlf3Ne5mMoYjJE2vkqWpVMac2j/sVOZok8jdaz29WsXjx53pYBjjhiVeCCTmc0GREsuLv3z1lZ8kwyOOJY/SBWDOtAeSBQlQsztsDXGNuON/9MTzQz1XUdtONq/6qFHHmtuqV1dWn7j9R+ZGxAlzF1qRVlBOH4+fJpJh6vXbsDm4uUr9sg6d1I41n3ShqHyHcb4vfBxZkiwHa+mjpnWlurpqUkuxf39Q/Y+R88/2Fe3/p5uRkRzAFt4a2przH4+/PBjDfzy175CESZxaCpKt/sBqcL2XxdXkFLNVVCTqCDJ6A7q2+k4UXXJHEyoKSK3B+GfKBHjB70SQHUnO60b1VYG8Kw0SG/YtnikplISB5KJ1B50l4Ejg1JSrO0tBk3pSSWSo17Lhaks+QLJYve6MW9je+UrX30RqrGqVVVFhBHN62sb589fxDRmbwhb3hzIKGJp2QFHVrFs2q61y4EBxjmvVUvkvIGTQYyBJ2Zf5LzhliZvtpCYMsyWEN7fW1pYmk97ANYrDrZ//OYbLn8zH56aXx68cfvxp57PbFDszHd0DjEQzvGH3xFJRypKt3s/Hf5dDOfElK3s9einToGMST8oJrr7b1js6fcxD4zL1MzCzQEM1Ar2JiBpKJEmcLGPsMqYBawjAml1xhv/qLCp3HCUp4eEuCrOB6Lon/RIU0qmITAHi0J0h0QWkKOA4pNTihGIrYVYvMy9G1bctm2LbWyK8zFkNfDoYLRQAAXkpls71aqvf9A8WnuZM5ghYBs8I3HQJyoZFUGzbJwulvlT/ZUtZ88YBpRU9xx/GEQpRgB6GktVJLCbRUUs4tOOACOnMPzRo8fwJGxp/2+//fbRI4Okwccff6LiMBfZ39Mv/Gd/9mdmNQCaP1C9CSzH4/Kq40BZVraCt4NcaSkS6RSqmxt3VdzQKyYbFN3KaGlLPMd689hgdX69IaY4IWyzINGEmPDNB1ysXUNuVZbbBeRECHZOO+L1X6XoUDpahplqF6YHCo2CavYr+ZJiJ08mjlamMKi7GUGmXhSWWsFbGqKjvrEuGihJ/9ya+ppxRJekBkXHTAAl0KOVhRrSSxmabtI5dHnHWUBJaWCKlCAjIJcnF5oDmV8PoxHdI2GVk95JX+ib0TdAyxyr7ugsfcCvQKhwhU8zS+OR/mWNLSoYnSY9WNO6CCIHcLRFOof07Zv5BK0d2EYBRQSzLckdtKeOBjfthdpIWt/QGgpNcqJTokfRMCEMhQlh9ioksphvKNU09kvsV9sQHJ7ZiAAmUUw24iWKhdx6n+JAyDQvWCiKvVh6Gb1zHZXlgbf0Aj558k90UPFchPR4RhafJEN/j0COyZF+ApLgiyi0SIaZf2YUxMTnn+4JWSZD5Dic63D4AYBUAWLwF4AS3m5saxX2gCUevZqbYsFOA2EtRNYWulh+VCFTI5E9Vph91a/JJQm0Ne28oaMxJwZQI0gALL61xVcMcJqAg18qkk9+WPohSljRmIFFPVkUJFJGWTwita/1WE+OpO6gv+xSYhgwxcdjgI8bfGNKbPBVigSeg5pooIw8c0mUHr5p8cTX4N9wglWWNErxFomXBaw05EDCRcsGm4fZOcleYJWFUKUWVwuVIt9UhMBBDSjpvOhZ7VyJ9MgLmrweRXigIFyKFIBA/iQ+IXPna/5Zis+oyl2IT5gD52exEGl/2qeEw70ZMpveG/sz/wbfo2reMkNSE2jICvZ8G97Wt+idzzzznEXf5cU4jMR++6///K84FfqNN9+rb6h0eBdLP929oa65o8WdbsEtGKC2tsEB788//5Kb2i9fvvKVr/3ijeER7jed3e0OWjBEbq/MdYV7Tqs9kK7wMESaoc4vLzEpVdbWVO6GJaLNwnQTUxuJtPvCC91S0gNv3Rrxic7W3tGjodkTNaU2hdvS8ioNUxX0Ak4QE1OT1NSGlia+JK2d7cYaBhxaqnrZFty83Xry5GkxFp1xCFBgOmTRxcaYIu3F36Spqg5VvmaziqCjyksjpQ7Es9LaCeVf52ApM4YqF6tzBEJJFikoQYxjtp+WsJ3lT5HLTIg+LOyJzQ6Y3ui64vmc60SOVFK7K1cuHTs6pMOKoWaDgG+lF4Yqqqi9nzqpgYlwtjxYNT4xZZCCAUlt90LudVazFSa/kV53xIGwBEIkB531xeW9XWeBNw0N9MzOTenXpik//MGrBnti//jJUw5IGh+fpmqHzw/PlsZWh3OpquGagUd6kyfeGsiB+mliTc+o2mhVnUb7wZ1D5LJo9PJVPJGEmhxxeCwxNLI7Nsbl3pr2BRaMN1//Cw3MtQYX0rZd0mYTnv3OdniooUjmIhUJqrEXl1U++ujjhmftHaaOKueOb1MsXV+nCZkHrCzvH5hy4GmF0ir2nCzkWKKtAwK3ur2z22XDSIHWpCuCbKyuq5fzyIS1HKXffUISaBuU1EhYIY75T5cHKxRAMgUyIMQaVnX59Nx4T28bq7F9jfDs6xsgVlDSAgJySE/oEJQAmKcAtbA4VddkBh0ytIZJMaky9Ej4KxfRuEJCyZkFoNHMzp07h/lmFpZQgypj/rqyvMhl3SE0PCisf+0fWHOPEh+Oo3A7yzib3CdvQBaZ4/M7x5Teh+XH/YmzgBAfOmwyFqQwGRyKOa2imL2kixeUHPF2YEai0EDDD8H/woxGwQO0Cn4GVnVpqLEaEMPpxk4cAmvJht+PZmRbNoH2r1hEwVZBhQ65pegoKhWXJWNRPvoa+MZHWKd/KTWeCWQsMHJvOKAIx5QDj2JIstscJeWI9Q1jCQjkkGV0/Ex20Y1SsvBylgf/ZxblrGLQ1XaamKnbsub05ET2h2EJUEfXFGlEzaSC8IYNXNK7gHvgefeTmgs2xb/pqx9yxjtVrRQ4nFVk/pkCcTa2sVP7E44wVCmYK10XU5f5hVgNIJcxvy5g3ktKWt9j2mf3gLzb+vYfkTDt6J2foYYf7LWQ2qam83Nzxou5lfnbY9NKAUdn1C88zo12+sDqWjgfy+uTR5r1jfAxcMJDNAKrJ9OIHcbOldoAlrMBzOkBsbvawXPR5Y3zYSiq2t106Jb7vlfB0TLCrUePOHeIAVG9Ors7cQ8hx05vzAABhShPtAhAtDCCGJ7EU86FUSgR0OuAgTFGkZV1Y4RPiGPhuK66bnUrypI9IBTPUhR2JI6KICMuDb+atByhyrktlAimZGrt0z1PTpMjU+tEMAWiyQoxh5ovT3JLCYDNwElTkd5UM33Ev0KTJ9BwihgrUCQgRlYLTnS2+WqMnXU3qYX6x998D//vryw6vm9OjfxRKUuphhbiLk5Yir2BDZ1d/QEVFYuPomGCzuz8VHom2t3tWjQK5t4/MPghYVbvuBphubDUhuV6mT3MrMKwvLMZZ1ttOtgnWDF6aKHuUU44JAUFEx2ihYpPSkiMFH7LohMEnZMd2tcYZZLOGgKkeIutZJ5E3RyMNxBRbnrS1+KPv/6/IeU8WjDVQ0URHx0QH/IlxAQSC+0bDX2STI30nRgakiIroJmotkZDAelRXhrDgz7kRFQU1+Ay0gqY/wHnoGXG7WsuLtgai4cvZswnFSexIvR677A3JWKKFMgMr9tn84ufBCiJoVztxTzvjBBAggvsKEhWOWENQQFRQVbZVIvQsy0YAmgWKpog9cY2kTOp4+iifVLY/MccNQZBX/xLizphsFeoNHlWSa+DeQYFuK+IgEREmZ8+gSwms4Svhm/VF6MuOT61RhinAv30iCkFYAqonwr1+JSfHE5xkAmmzD1EykLmACEoeQoVM/5v5C+ClCoSzZGa2FIxpiFI2SUpY+1tXVOTcZpZb18/PfDZ51568u233njzB1YALBaub2w7g7++Is63sDaLtvhwe2NnZc0pc63Xrt2whMyJg/1U6wS1G7gtuMmxNRrDtNCgv7ezvrrszB1ftZQkW3ubDpTpbGvr7R5ymNelq1coAK4Ndhk8OOiYluJj5xXethVBDD63bElqOSmxrHxjanp2Zm6Bsu84WkdgW9P0tlDMfMyzwKF2dMWwMTbUNleHM6GrXvAJxw3m3xCQO/b78Xo04YzlSrv+0k/kCSEmPanovb24ygFEQOlqp7/I6ydH9DfeetOcgeQ1IYdzcG9VdC5z1fq6JoAkU9+mxjOoRMk8fepEfK2JKtQeHbBg5nor/YIRnOQm3OAsgcfhvZBR5Z3tRba84PYwl9aGaMDTWFAfU0DuA2lmEsM/zHJXzPEaCX7c1ynQZ08ff/ro0y6s5Jb7a7/2tx31c+H8RcnI6GPHTs1MR/tt7MxfuXqrpb3t5u1bLc3tfKVo/wlCGPaY6/QOxTpfyTn8U4aA3W0nL5vocBpydDe/AqLCLWPHhsKyLiPGQjWlODtocGjoq1/9qoEhGd9XabEk2muvvWZlQIWRSSXlQko84wBpu7OpXIyLqODGBJ/o1kmBswkjwDKDqC+JhCAgkFCmFvq87KYfTiXiGASaNCyJsUq+b/PDqpaWWLy30QRuAT9spXOK6znWh4zaAz4M/ErR3gAmG9nKmTOn2EMHB11/tqipALFDxSXP5qzCRFhTYwvtn1MTsLqDIkDA/EtrK3oR1R9DaH6c7Z5jkkqY5rS77s6IGnpnV2c7a7UZNqQs3q6tl9M9mxvr5mcmTaVo0maBJ84+Oru05ibmaH2oJ+UgRFJ6BBTx0zw5i5Q5i9z35MoJKPChS6WRuJgAWxdU82JM/CUUw6oQ8tG/GN68kpJ34ApkrZP5MxgpyW6aCgFk+q5vSMvQSif3SWuCFsrvA57PiU21jhKLT2R1zXg6qlJQ67gTFw4IrgjtUoItB5Q85vlrxtK1VT5l0zNTErB/I0tSptdl1OggcGGXxRzAm1Ib/iLJiVYRWIgaJIsaqXimkp9J+1fMXapbCYH7A/e0RUD4wmYtpCc+Vs2W49oU7IHZIKvTeNvm7vL2gf6hyalxx947lFOlMOH0jJsgO8z8dWE1IsJMD3Canjty++bo6Mj2Vhfh6Ib2ifGRoWOnapv7AcTbZBmKIaO6e4RRVfuikrAuI0zqk4N630bFmqSaX01VBT5hKSBN4ry/DS1KUzH6O9mHcKtl597Zzceh6HfAqo5ofVPR5ElXdzcIcpEP2yur1o0S2ODe1JQF1SpTDGU8wvmnTg15uIHsDSDPGDHmbxIQxBJDHihoZ4A+iZRYY8slklAtK49115jdpX6Xgfskpffh53BMKVwK5JSlnwIl/s6Rqp+LOAwzp8FeSQ3xi+0nlsvKyLNYabOBYscuC8xw+9bV+dkpx8Gqo/Vv3uc+AMjyHw1krrqxjg2s/zKLmAQCmQvyp1QpIJ3OGXNY91murun5jqtWkFage6Mh95VAMnmHhK0jqWXkvA2j5gbmbxyNtKmFC30bEFUrPfknnvEAhaO8PX6CaTabw5KhtxKZRdBEpJQe8dgP12kaMPOe5gzT+6/8SVX8GaBCSepUuWRi2Au7qXrFhov0+EmfXV9emJuZYY/MKTWWGsmYmTD3AqAEck1RQBoJ+tJJekSSQU0CkHmf6rw+GV5pLWLQR3rziHqNvrNJHZISZMQERLfCCbkLo6r4rKaLiY4Qino84MBXAhwmu7YBU+t7g5N6KPANwqCBKb0+LiPeEFlVWQ9zvVheXTvrn9GG6YJniSEcwIul4EnFReLEMMICsm+42DU8oVx6EMsXYOrR4hWkFMjL4hOsDPREHLCm8O6VAlkaQOSNdebktyRxfiQrPaWYjJWfpU/3B+JrzhDzZKGYWnze0HV/9v9gMYhzuCyIBmG5l7Q1U6IMW52dvbaPMznTNVdXdjs7erTSmbOPXbpyaXFhcmVlv76xtZ5T+ur2+p5jCbdbuztRvgxFa3YfeexhF84uLC+Y0D/6xKM/euuHN29eb25r6Giu5TQyentYj8cV8y1xGvWJYyedHaThML5m6u7uNc91DgSYIo8PHkkuAHyT4lZK9nKjEkOtIUlzmPQq1C5NFwhqZaZ6VkUPUaN2bIsg0F3DyMhLpbqqq7enuy8OuohGz7awnVCYifDtLTvQlklycIwpTzzxmIL4/8DQ3l9pLIxDbHlpnSHYbIZCCIgh3viIdCiWDP9tehkEYAIUIzsnfH3Bo2pQygoDyAB6yxIsEjvmAx9ZeL0eP36KtqBcaPT2DvhK4xWJYtheidPT8JnLwxDzejVfCSYeZ3wpA8drAe5CVFVJyVdzbEmBY1PX8a3if/XLP9fUXOcyhcX5JYtollAsZv/F62/RDxzzZ/8bN/tLV67Nzs5NTMxPOK7DlK69kyrQ1Ng6Oj5mcqU/Q0VxxmwaBSdu8taNzdaRLdy0tdqFU0d5ZQVHCJY7gkBrkSO6p5ZbmFvQBjZeeGbGZ/ga8fKWBr1Ms37zN38TiRn7UfbSpStOI+E4JDzlqMXZuSB3dbU7dJHMg22RFe1cv4WUyfRTb5hBLAMQe//q+nbaV2oXKVNgHKddm84rtACU2wCLwM27va0V9xLomgGrYTJ0AxnCqEp2aDDzN2E6N/wthuztNZZXccfsxDl4wulK0LNSg/IqDh9hq2lsKmrB9YL24g7trT1rkDVd+46MjGS3h8dc79bb20nGsTebCCoCSuYV9DDsaAUOowyPj0NYv8UW7rx3N5jqm/yAALfq6phDE3y7pqnOj6dpZqOdY724Oaar0HASsLACh3ASJmbj/xjjgzw+JSLFH42bEoQgLqUB09iuy2EAN4NAptx2BA4P21swCSCs9hh6L1okzP1mU1UOFtg2l4Y2usFZ4SolwRtvvIXx4H/p0gW0ZZN2n4MjobCNkU+CsdFhEzYWyno2neow0vOQ8q+rvWN2ZsYd41Yg9Ak6NyBo7jsuQg1vDcp45vRYrfkv/+W/jCqlq6nnFxZwl9Ex5F1ZXLeBVSSGUh4MgjjhMpHMV6LMJCksa+uNdbV6r+4MID2VvirMlYhpoaGxW/ZMMXqzRTJLgoiDSiwclpEMPf7BqqpWv4idsibvDsdmHmOnNvASDnwYl1cWwNlataQTO91hZajJrZDQTy4NRXsn5D3ic8A7p/TOib2hlOoVwgVvsLjhAWioCBxkQTHVT8I0eJXw5V7r/op333nf5vgnHnvit3/7tx8681Ac2bG7LSOJpZczLlsKcMxAe0fv1v6i9oaEVQ4KJYSwn38monazI5oSacXrK8vxNZWY9R+c4BMJIJK5Ec87xQbzi+dKVVNfawcIfYGaYCJojQVWDr1VS7Qyz8IhjmOyXEZowIcy29rGV3INl3BJBw0ciekAFmfJwFi5Ul6sDxS6gCZmArdvg73fhjA/AxmHT6d7XtBfTE06ZNDuMYSyozj514S8DkBWapPSJhlSW8wKx5qy/SwbQzVJDktS5ubQFlH/1GSYKiZ/xZ8pLlKJCON96UltzebKQhpdO51zoLjMaQKAYxKVpYjp1vKJiQpWEsvcoEXp6RQd3db5LTNO4Ygr7Q3ZOxs7G27itMq2XxPzrr3lxVkybWpi1NIu9dmLzeKhhx/DOczpTtYEJw6ysN93c90KgtJRmDXXWipDLpOebq4gszroWdZXF8SGD0oBsuUigK1Na/7ow/yKchYBCJMqh6byCExol1hXXiQCUEaVChekA/4eYbV1irVkipDAFzHsfzDRPsJajRyIQuPUO24MjZE/CJuYr0To1DWUkmeCuWmUBbKlSPH3PwlMfErQim9sn1TVwO/OE+EMM/dFP6NqKRI1YGunVsyR9uJAOczvvbq4ML+3Y/U3tsO7WLQ6TAYY3H62DMpbhDYCDQ2FxQDlEaPiHrXWn3WimNwldpImtnVUVdEhiF8oaDjpxWAbvIKJ9+25TKpw5ihAwNSVABSDhgira+R4K+rqIuxBRef2cDuIdqEGBEuE5t2cLGsSSJmbg9AAE3YKZdakJZDYdBLTC9yMnZyoxn2CuUerMVBoi4wk9vaAGQwVLszswjE4+ooniQPV1GL2vaVzR01gaavLy0v7BtOMZ6RMQx4gQbGasOAKQ0/AWz91yCMRIawh/Mylq37OC3P8CbEo16J0mmRKHBIg2VstWhFsviaNP5WnyHii6MR9+Y9PQAbU/CdCqZkEcqXy+3B8KWUOlNLfE1/K+FPGPzAZ8xytQwO1UEK2NjSrOiKaxPRJKs8v/eI3b9y88l/+V//8//J//a+npkc0er3z4CgULbY4xmY97n4OVL54+cLTz7xMbtEt2dwN3jW1FQvzM8113csz8zFgcx3f3BqfvGYA7esedHC2gVJDu1jEY/0x1LyKSkyOSawYkUXWoilRX3r+RVZp/K/NTfQ4aBCM6t7T22W77euvvz48Nvriiy8ZhV1biWs0ItMwpRzDG+bsbUt8GG0HAd5hlU4+jWvsY4gkkpVomMPVfuJ5XSY3MTj2haZZdiWbMj7Jw4iK0G0Cn7TFEdclL/cR1ttnnnlKoXZ1AoWGHiyEu1STDgCseGhk/GlHBmUJaqsdJbLFJUe/c2TX9MyyopVic5DuVFfvypm2mtoW0GRUbkzKIaqb6Vqi9HdNpfdS5YVBkdskwT9kcpqWxZ233npLkIhY7bfKYOBsMY145ZVXfumXfqmleWtxYfX4sTODA9Ury5v8PG2ejg7AV3eHs00odkE2RyI2N/OisS5nhIm7ADRX6mA6tmFVPanyH320ZuZnj4Y6QwmGsAKht7vX1lvCwvH/DU0NMqq5WpgvEnBmLyEQ08KHGqladNGWFhMG7cqe76ssiGt1mfOjBIAbJj0ivSwrigGTgRUDQYk1yzKoGOXgA6sB9gnFj9iGGK6uWBwRWCRUTV7ntqIbtdu2DPNLaGA+BbFaprY/ePPNNy2xDgz0VIQaQ6bXgmPNS962VttrKhlccZQpAVSt02omAqy5uS0OlaksM+FxBLkBi3YCbXwAT6f9mCDBJG4I2LIhfqm5+Wp3V5tDFUbGpy2YKLqru4OLfHdnmxUA/iuGahc7MNdVV5l8NWjl2EmbLoq6p4dDg+xAfOh6QiClRzVzSr+CgkmGeZcEikB+JItAjHUxUhKehs/IlQ7ixcwB1jETMfOIsgg5I3tLU8vsAvaeVUGfqGsaGpH1SZ3WUU70EkTr6u40fXT6P1lqZ6GZ2+1bwx2cBdtbCfS33nyDw5h7O44OHWlsabMB0UWtDoUcGR123pfmA1zVwFcdb2EYWgUmR3Dad7/7XY1ujo4DPU14N7m6SoMHEB+HCyORvKqZ/YryT19BUxtpvNUxJF1VdDpZ/PQ1FxoZ04mu4lytbfiTNwGcVwoGVk3r5aSq6nvrm7CiUxoE9HAPCIls0cuEf9Yn54WVjPkNn9xZfMKBHlOoDJyub41uenoKbtDQ79DQvH11bWF0bBi3v/rqqytLKw7a+vi9j6anJii7XHDc7b1FLWfutn0vjhWvj2EzDaVKLBUqBvVKaORARi8Sx56PeCJneqCUCGV3aeQSxkDsZgKSoY3I0DfTPWLCAuqiKVFYl9e1YRLXvpid1ps1xfRJPAxzI4Kf8YEDgCCUnoxAYHOIbvmnT3mkliuhFx3Lf9pfAgAr68NslpFcXo2ZjCfnFcj1jRJT/Be8csovSOBTRk/KnLhQSlhVYjOf4zvJ3zK243BjiyuuSGmbeCl6KGkVeDl8RRaZeOrtkHRdItm4t1Nl5s+DMxa6Yi3XkB+7eJnY901jlk0jdOXoHeqYVJlUaPLSidOEQu+zmq99woVDx3edT2yrN4cB9i46+8FfKKYWBRUp6pqqokcF1Fz3XLX8SblB/2IyAT9FtrW3SY/mKK9ZRBJ6HjdXapCsLGZ4kvkqJbA5i3COycXld/6aCyphcjhBKVlOc/+nL4gp1ehwGqV4YOIxB7A6k2cCPN7EqATJwPXAwEq0xDQ4WamNQZhcRrzt0VvFixSj+gJyibHx1dTCwj+paEjC+WB6G8uI3GxklcyDnCjmXI88TZOMKPAI+GrQlAtwNEc3j1IgkCcAPnmgr14ChCE/25QmzEMW4GWMuOQZqJSwgSfMRZokw9YZgJa1Te2amp0GycBTU9+NoWK10AOm9KiXSo4W1N9Bk90nPz2JpKF1mFpC0idvuTw+0eTAhIxHdTKeIFv1mJ2fA1aMBIoGAWQ/wZTXpwwhv3N8cRnMr8KTESi+U2f3I61166yRKJrYdFI4/uWUxdyf+1eyUrmfm+iv7QNk0YUZwzvGpSQfvFRA68/OLlF2/+Nf+3X3siwtro6NzjQ2tDG4VNoXXFG5uLxkM21zfdsTjz7lIE5uYP/Hf/ifTc2GqdRAo1IswjxL65xlUlXBm9360xrjLFm9t+/SMSxi8qoVjZLESjgvhtv4ntP37Q0zHmkmoERqZXzIQd95Bt7anZpuoNeazHmuwHCmPFUWJaU01EqDmU0btLJk4pkIaerSG/imJ7nQN9HsxOMZYwrHbymJStyo15iPozdLE92VDXd1ZRNH6XAuGMaT8JHF2TZf+tKXYKVE3RAovc8nCdJRC3FGEAICixW9dV4Tcvok5OVSiqKpKxbrxkddvkkjcpS2M2bW0M1eU1xaX880FktbSu/rG1QoICwkVc3NGN3RMTFr9+g1egiMW5rDLiJgBcfZbInjIRY22bHxUTbpUydPmAaMjU1RPqD1nb/1d9ibH38sOhvVdmnpdksrg7fJ9yTPGqKkqiYccpioFddR2aYUuZgGKZaGh/AHNfbs7yMxFyC0S+iEYNJsamhlWVVB9pM67n3s2AnbwyemJvA8FVbDG4nARBRAThw/pc0YLLgPvf3Oe762t9sowkjZE+JvY8O1RuFLHn2rwkZYswDUd7aMUQP1ac/rmxvIx3mDzrK+scm4EpQpj0M5QVhZWpQXLyrRBMZoBmHUxWpLqxZZZtDBJ/dZctyHOfcoDcZTXwNjOKxMhers7G5o5rzVTF45WYEDgnsu1BEO9E5bRNbWJoaGjtj5YNYIIL7q7GpZ3XBKUlyJ4vhbMBHNcOYfJrCupJ9AzMiAadBtYKDfQDy3uNrQ0kqgaHik2NvZdH8eCVNf18BuurqwQuLCH2+5E0IdQbjnAVA76ahEnBJRJolQc8oYQjzSx5tCwL0nzRAiJkRA+htCIAL5EVIdb/0xbKvpJ7UD4FQdultIMplu3brhAC+rOLqifmImICN6uigNGV955d8xJOMH52nevHmVWfrnXnpZt1zf2pwYufXh9Mx7H3zAs62jrcX9UVYkn3/uuWeefMoh8dhuYW4WfZbm9fwqVk39Wfu6+0N/1nDXr11FTH7qVy9dXJybbait4QGBXzQBjiViLClITw1KVQ4tHyVVUgUjmIR3nE8kJikieWDIpCOMFIGLsJx445VjbQICaNrIpdqbDH5pOlHhiis7U9ZXPlmJPngQE3czPW/sffrkGVtsdRfjF8iZpN7CQdOf5cl5SzlyM4nkqIbaVAj0gUBgGM26RwIIs71JYzokUr/z8HG0RWtsZJyBwNTYXt0jRwdNvNNpX4RPHY1NrU1hY1APHdPBCIl5qDIoGFyRYtAya42+hsYflI0hRbKk/6sjesVwF42wy9jPGAlJHARPW0KgBJqfxhLhOM+kppo+BIYweROg9pw+3BAe53v7TKdpQXIHTPUCAmylwJkGm4BFa6YnkzfeEoQ7myC4pV4Q4184uVH34QAX6JEHhCeDKbO6jFB1gah29B1BTAAEconewhl4Kq7wEpmeOz9LX8XncClQ+iQgMuMmELRJicUEZzo6hseZo5Z3uMYuOg6PiKAWcX/UL8y3bafjkbGw6MrL6c31lYZmp+9bFXRsB6+qqJ5uG3qKKxOta1XTtOo23W+wGmop0i0vuy7HLoxQoXT2ZGcpS9ONwEKMxrMPgNeVebD1Bqjk4wFK+EuXHxo9GOGgFT5aBRtEdgzMiSXLlRUI3kiP+orMb41FaPipA6I/3MXkCYBeJVIyD67J4RI0KVErf5VFvJ+puGDdXFDpLeb+JyWO6HsDiWfuT39/zJ2MGCs9NHWckx8ah7NwGSnKdptYGnZqKtDaYou+KQGcvXVPMofkMQbRYHKMSGUZGfVoo+rY6AjSxY2YyVBtULCDEJfaj2jqJppwjzZj/9rcCePkuqWtGOkkITk9mbYyCuAlcCDrnUnqsiY1hk+hCnH3TnRkl2MiL5MWZBqsASSroBU4Hd+AxcBvTOdOCYijQaBq9haeP06XpMXEMWIxf9hIGov+JgylcB2DWjqwYTP8kjxh/g/c0pq2WlCDlIi2INc3EnWxHCGBB5JBCjaP4qKBKaj0oFRXF+StjMFIsU0xtCbAwZFRvLz6UW61/Jbg8COy+CSuiB8GixhYwcn9WSDkYfz7CY/MKXGAyoGfkOGv53PaPBUDIakQ7RwjeRj8DJgcgVzg/dRTz/zF6681NrTzM6iqrx27Pd7W0tDa0bpFGm/vGINPnXtI/I1bt5aW1ylIr/3b/8VQ8sG7Hz507tS3vvWrk8OjBg5tRBOYnlkiQpvt5a1tWF9bdhx8rc3vjWFco7+1u3OxuZkHN7d9OkZ7Oo2at+rlyxd1EyyEV+lIZPtTTzyOV/AMbDmo0+D/5E/++Dd+4zeoE/39fSQGDjx//jPNKgudIUaXynCrpkg4zcIIRM2TrLevB7dgVGnEYyEQcCZOID/m5xZB4AIv0jHxZsItre14aXNrQacYn5zQByFsNYkPM+XT9QiIRu3BkdADBKtLT5f2zp5C2JVnjV1U9IeFuUXyONxTKimiDe0dXXVudgozR7lOO6aAiQk38JrPpI5h5pXcHU1KsCwmxnJUT70allK4Y0w1ELqxkbZhkhHzBLXiQaFVOVTNcRvXI1fi+D9ev+z7b77xDsxIcAorFjx9ys3Dxza39q/fvE1PtSHCrtfQPssp8V3ZVV5BYRwyhMYgjZJWG2wDd1JQ7ODWPOZeGobmZ7ARRgKChoMNhJViGLh6/WpaRoy+2xQt3qwUdXPPs3pZCnED0WefXnBgKJUaej4hJZnlq4ELQNqWSBKAcLTQLCyZsA5i+1tru01vG/zyCQ0+3xBeWghN9Ozp05ZFoIFEOmy0cep4ZmYDR4bm52PvC3ah+jgRVllg5ibUAOrFX8XUS3j4w9tqqkBqKycK+DBTagUbqQEcHh7BKzJiJj9x9s2bCxvbcXGSOY+DSXiekXWQR+HmtRZ7IWCOQ6z+7jfForYmd/aTQ0Kb27pM/4Dq6emmiawuLRpHEM2i2/wydYfQjEXzuipLnAVl4rCIULS6Q0NzeMDBJ1pZpGS57gJZ9HhLc/hnISxdGqTN9XICQOQJb+PkHOprbqD4mgShe6McAjA+MTI9FZN19ySoFLKrpgMfr1670tHB9rz86qvfe+nlF14689yfv/KnzEG3bt/WhUzDKg6ImQo9vbmxwZHC506foqCcPHGM+Hjv7fc46uE5LkOqoy10Y0yC7QHHMJYXoP3RRx+hErmvXLix9qudBsWH2lTA9M9TqK8MSb3wpqdEZXW+RIr0JRQR2cVraIV6ggJpCV7YWMOYlcfGdOVZJKaK+bSYBj/KCr6ypCMLCE7lY7A9MnQ0I+ANmiI8ubj73wDeHylGltKnHMhvUoOI0e4qSuRpAnN4d83xj9IKPT29tEhUEY8gpkw19RWnTh/7o8k/1lvJRG6zf/vX/vb8zOyP33pT92Hxxe0W92js7DPuOyuri8nD/U8JGZ+E808VFPAm6QwuYS2OJ421fOl2nGFSs7nlnrvwMA725KGiPG5sTpNNT+RNM3OCyBiQ29T8ivZPAeU4xPoQHg/pMUFDZPWSTA/Neb1L2Brn+EDkB31iH3GRvKWAxKlBwtZIHdncjZUfkeBk6ZGzZ+Ax90ndKpcinFMWvpYKTtnzp1JczgJ0KXEhptjgfmZMBBJ9mO3LyF/L6Ho8N7W52emp1MusyyoaIfZ3O+Pk0q0NV6pZZCfn0DX8eRyJaKslkcEFTYF4gHGEm43xxicjdE2N3TgKipOn9wve5Ng4PCktOKSD2OGAczhdMAIbof1ET19LNSpWMLLkWpmuQAyciGC5SRXJ6SNRylt65wCwnlxxb/5a4lFes5qGx6fyEGvLy1a8Kw6qAj6AwprLG5cdxueecC5CpIBHeu970uSfpfhS4O74w7kKYbhlyIffSJSnmpkOSOFBxqQEhw4aaMdcC98nX/nkq5PjiTUiS93z2MRgZLiUHpN7AJGg1znakTeWdUKNi/NPar2vX722tLJs/Q/honclEplIO85XchVHQ1WDTMZWpIAnowe+sNKdW5HrpVyPLB4xEvgpjZ9EprCMgMDBcOkAMbJly4K4FVq7xdOFevRCT0gmax3pqES5sLNcHgD1a0AAl8zPSJ0UfZFaX9i0n3BL0YVXbkHZUUMWQz/JplBAfFLwyso6l7HGRupQuP4qwviu7uFlkRaISA7Zc8XNewtwCwyiNoXeKF4aT0oQb80ag17it/w1fUrBYuKc5fA7p4RJBlUKHE7z7xPO8H8WCHAlG2IdgF6UVgLimvqpifGhYwOODPidf/OvX3nlz37uKy9q1Yuffnz6zEPMmBywrRw11NSfPvPwc196oat78MrlV7/5rW831DV+97vf+8YvffOtt954/vkX0LVv6JhlH8R3PlRXtyWFxq6egWpGHB6kQfm422t9eWnk5nUWOhNaQ+XiEsG1PzA0eObUaVsujw4N4lsYOlpsdWXl408+cbcMY8yxI8c56Ws7hux//dv/E0pOjI45wMNhCOEith9tPT4yakOwmwQ6e7rtGnYEgtmlqye4Cvf0dhsm8AxGNfZNTIzBhAYojHrm2zjTiBP2VqbnYCfdKAZx+sbzzz/v4AoPCD6pCP3EtgSMSjjnfuoTaKx+2EwuaxRSah08D2fqn1kNT/Kx8Slq/Pe//xpeunDhkrOJ6ISGbAdvOnaPAfrs2dMomU7/3yAnXPBJidSzgnxAkySZfS0cKBJc2iTlXtmuH56z8FFV3dLYJn5rY6e/d6jPRR0D/STJa6+9puZG0qWlWWJlbXX91df+gquMx81t+jBFEwWNr/A2z3CNM4bHIpgjjEgh0MMVOM9v6PTmQ6Zfx44dlcWaC/srfFyOoOvS0wGcmJiizDn/iD6huwbYPUfGzvAklAbR6Sgcyrq7ep94+unegQGqMHWcvcHSIsqqrxEEKT2qbHN3BhLdmJ2KL1roxBXuFKVnhziIMyk2jECNDU40qndTPcwd2Q4TGCox5pNNjXT3hWUN33z58mV1p9ZfOH9JXcg+DWnNw+QhaVGNfmKRJx5/xtt8zlmjWkHDw8c9z3gXkvzSaCoaD5coSBEOruC3ozm4VsKydWXNnlFHqdkrzIdH34vZTQV7TD2VBSuoJkMsalBtDXg2xxwdGrLe0tbcZMzIbe2rAALSL4X1jfsf7Y7bDCo5cSSLf6y8G+Lzg1w5UEqT4YCcA97Z/0dKiGWJ76tsTEtZRYI/XKQEyicrJwLIqCcsL62wJdKILTrLO9jX/1//V//k8ccf+uM/+aPR4ev/h//0P/30k4++++/+9OWXXnr03Fn2gLfffvfK1aubuztcxeqrqx4xmTh9ElfowCYR+N31VYhs8MDP3AFtvNYWSK27mmRyZVE7TaNx4/67pF7rpRRNy42EnPEU7xkdg3rJbJNrWtIZompxXHBUxHOHCHk4CR+VoGqmg4B24AMtueEVcXcPwl4V5u8QCsmYREun9sbtbzs8o2S07NnTbQwTjEdtvA+XVSr0iwM5S8IhEmZ+ELCK6p/2AtbPnEwYl5oXiedZR3MgkS2xGoovXvl0YLDnm9/85jvvvPPxB584hvB3fud31ldWLZEhMmam6akkqRr8E8NeuH+A7B3/QhpEAJ+E2TUYJsLeEqfhU5nxJB94AiSmOpmNoUSV84akoYJuyUYoi32B6MNd3YklhH52NtSdydxYjjCd2tqw9ehgZxvRVU1B3robOJQrvRUb6HHKT/DCvJfpUCg6jrNSm3joCGzZAhklhfJwyxMD/o/CgXnoJHceKbUamAlsKExi8s8cuMM3qQivlLIQnVIWPxz6Kz4rGylxfBBQevoZai4MxIWeGDZ43oaO2Fm3H10dXa/Jbra5bk3F+tOCywTnZiatgzpazDzhYMdkaStEN+rmdRLuGdvhrOhILF6RdszhDUYUvUN1MlLZEhYzjuIDE0+g5MxWZzpBUKdK3cRYEM2O02OQ86EKunBOdDXxS90tfUz1KVRbQiEdxltTAiUL0e2dKh6sYvQV1n3EK9wnpZNFkgjnLN4QkzjH5HBATrgJeEqROexnISbU7wc9xTm5Mu76fPevw58SwECjADl9K4TTshj08gMxY2tl2R5l2DJ/DFdpSiCePZIXvwHIcAOAPogC+FljGU/FqzuYGaxBCpxgWTLHO6wMLI5bKDg2Ma73thhl7PBL1yrZQNbc1qpamZiAK1Rn8QbtMBtnuonxOBIezhIrl/VMW8ScUiuYhYKws7+0tbJftixM0kpDxHqHo3DxsUq+Ei43tPdYL9UXfQmmTfYp2yNCRFqW2yOfC13Jd1qBHh0Gr8RygKNAQiyMd0Gv4uOneBUBkFiTMuv6kEQH47JNz+CgHggyiSdzgoIxQIRekSsIDo/qxL3RE31VqfyA7yn+KvzN34NNYmILS/USlFHmexPfl7fYcQ6JpnvS/Af5GVgrKOoSFQwfSBqL0PETA8ZWY/ff+PZ/9JUv/xx3erbt/t7uP/j939natsIz+/jTT6GtW1krqhs++uzC+ctXv/YLscDz0Lknzp559O/9+m9urm2tr2xMzczh5L7unvqm9qMnT1tY5k9q3ZIVdmF5ZW9r/ezJ408++shLzz+bGGS3t2fQFl6aOo+JVSeSSuMq3DrLjGXXr12zDW9woO/xRx6dnpuen5l3gdJzz7/kHCBnTP/Zn/7xSy+86KgYJxSZMITxt6KsrdVBx/aIOX602jIYzRkyPIjNHOhH1FRVxmaGOeZdfMSka38C/cHxaDiKrnzh0kVsRT5RHsRgVNqywYUnm66n2bGWbQBYi/0RLzXVNeE08b7qtrIsL9vjtvjO2+8JKwjvSaxQcyGM6mwlKcHHCM8++/QLLzx/5MgxR3Toc9iJJkkmt7a24GWDW9i6uMSYOmgbUICAK5bWpXnOZCO0vb8ahikd3hyb3GppXZi2JDw/tzQzOzU1PYfj7aG/eXOEwwy+X10JxwBSm5i9cvkyDw0bfM0j7PXkjOGEOEepUKgNtSyCdvbD2wAAAXkcoEkqDQ72m7vwx4XuctpjBAgV1gyN819rEDfWlxGLlZFyLi8YtgFG5Q/COmvaJry/tsUFn3VCFRCa7JudmSUTNZUeaHogIzie3D0gQJoYQnRs0nCXtCaZbIZLD8EHx+Ymh103xhDlVGxTl7RvDw3RVCrlOvXFHMNcDT1zC4HvYFfY0pYUbZaC4MIwvHV72LinLR14ACVrlPzksEOeMLhHyayNx1oWK0nWWCgnd5LHbaWjioxtMaaqWt1yvVooSzLTPsa8ldXFutpyp5hisL1yJxXWGtcRp9blzcnoQtPd249ZUDqIeU0plBXP/cIC9XCFlCifqaTQ6OrJAJ7Tg+lRuvcDgUjmK0IJBOVik6XuaTNrGLpN7BML2LAoUMkDFPXwriW527dvkuYogxqaRk8wmZ5yWObE1Pe+930bKq5dv/L2O2+98id/4tSjq5fPf/LhB+PpNF9HyZ196NzGquWgig8+fM+C1YXPzi8tLMdQtxLHRtllzwiE/kgBITMNFRQ2cdd8ZmsqrkQ8qdehHPJKjNmiNTc3Y5SqYf7ZyX6r8kYdSb1EB1WlcZLhSCINOPFV/ZMbYhArDQzxJz1IyvqF/Jl6KYFPwZPJIch+3100UUpQkYuaQ2c397/0PP07+o5kPuV2yQDvf5fKuv/T/TESmw5pC+RSU0IGh3j0fURTENOBchHKWzNduXrhwuVP3n5nxckMSOdidHf90rDtBLh65bLRn7ZpYm3ypyw1uGdcy7UuoZFRPfz2yU9+NcjhWNj0Kc0V4ggOu0gdANoQ0xWzRAvKbBmW5tOpIGaMZgIw1xEs/ytaU8Lf/hAsTaC7FyZpws5p3rVjV2PhBHXX7ktLwS0l3EqBjCdQORCqfn6i9bR4YZ6Q8Y8mgzxlM5nbC3wiUeosOU3kKnafe4Dnnxl87p3CObL0SSAiD0XnNJnHinkLanEuN7OWCRmZbJt1OPFHo+jC9pZV21U5M+Mm5WlrNgY59GYns1e7nBsYPyt1iX+ShwoXJ4WWHWB2W9LtIYjhMq2yJhxCoIZROfUOZM/IxPROsyTCwIcaZuoUxqAwt0VDh4jVrqGJhkU6ogL9JFtSRRUeCsfd/SVSJDIqRYkhYdKatnIB5DOAfTCzR/V9hZxkaYYbUj4jnKkq4yFyFnpl/uSdalH4lWsUP+5ul8LnlLgUzgFIpuS5hLvKEZ+/Hs6iCAKXVuhTQrLwUf0hbSipTZo8JlcdmKOtKgef81FNcx65VJDskhNvS2kYIs0A1IXpEJ6Z+VmJLZBIhky1YZqJ01Jxr77gvAp0A5wYhAU5ZoDWgwQAB0cgiFYehiFwBDxi0NkDMcdZZ/x9pZR75/5TW88ZI3alSaOxxXvgUBh3mBvTUQdKF4nG0AZ20zR1K8z86kUnJ56rKpkyYw1PjOpkIHIZH4GCNgw9CXxM+WZmZ7w98JSMVJdGEQSFNIDklLlFMLr1ALsZWdbg46ssKGy1OSavwW8hWOAjfYYZPTI9hdYqtiwiHHpKHxP7RPrIFQKj+Jb4TqJDIQnyp8MB3z8v/aGsP1UwIfBTpZRIj4Z4FB3zRwG3/WD9mMhPTY61OialrWVledXdLJaAlxbXb958v7Wtu6v7zPrWmltvnec+EVr4p+6zrq1ruX5jpLW5bWJy5pVXvm9l69Xvv/70c0/zC6qpa6bOE9ptXb0OkKAX06Vbutq5IJpBRoF6SlwVF32fYuD4Ry3uBhY7CDVunMlTVj42Ptbb1RmD+942rcAuQAdFdPecZCs8c/YhKjgFgNg3YaBySIYxsLSqaXQBozAOoZQCSKMLQZS4XevjiKw/YL8mvuXmEGWx/ZLItLETy8ilK9FCmblhCw7LCwlMwQBZb+L2rArUXUOSg3aUqDfranocRZltlzrgeKWmph3zCvEm0mGFrg31z6K4ysKfik7nxJ88392fE2xJIFQ6EWN7YjJ2KUjmKxEQNv40imFumnQs/aEh7d99tDYWsOtDS2Wc6sOoXFXGVYZ8oV7buzDBFv7ssy8Qs5yrbt1csFe2t7ffngwVsOH+0qWRp548pYYw06l0QkMLlYuhs6qiFpPGoEtbMqJUMoWa55dZ+EB6ZAR5Z9fKu515cRjT2PBtSvbu7hUJ3Kyp/5taIcf8gvN8HOQVwzkODBHDRQYd086Eo8dOkXGTyesmjvPf2jp5/ATpQJBpOUqbGDZ76BnY5HVTgX4rAH7Iq3AgPogzMrgOU3TM+6rDU1yTmwrCqiXZkmEovTSGLg5YjFfXr99wAD8dgldJPqHfrXi8KW7evB1w1K2+fsxtciNjA7alNjQr1DUJQbQ4BbLeIKhRtOvQ0FH1UqLWih3MK0vYzBVgNnmYZli7Xl6PfVp1Nbb/WoJwq12rtQGJzVPxqEvNt7YW9UMz1+b2DisMdC+9wgoAJGXUoI68xd8rsX8m1Fmnez/wQUbpYSiNigugHGbNB2bJIsZbD1EX79Qc90JKMqyQDJIGrd2tNctPrMJUhyRtw/CTGWZicnp45BY/H8XZWaFxee1TGVHPMzoybIrV3dnxyacffOm555wp+ad//Ecb66vTt0cb6p2K1Nze3GRuwX0efIfPXjj/qfNx/+SP/ki5vPJgqNaaoWq/ii8hbKmMAbe+wYk9SrELPlaWLTbUhJ6KUUkcOEqWvOBiwFBTj0p6G3zjR1L9CcEgRaIGVsyLJ34lcxI+j03b4uGQOTaTLlEvRr6kUcWAGn6wYYwLKcqWgmcqHdmVFtOjpVIL6lMZgUxzbeQn+BII/PRP4J6enEUwoVdGcGgXACUQyJHSaP2UpnAAGXFmAmA2ziLCl1MnJTpa6pthC2P7R1F7eXFB7QBMWqa92jEjCohpbPNWBMilokvhUgIxKph/xr29xUcz6dQBLa2BpBOljO6SB6lROSvW1u7bGxtJC6xOwQFHLehPRBJnJAcViDT59AMOmc9xBH4HnHQW6QE0DP7+hroeHO2dP6ldShEv2SGTNJy4XauAs61WadocQBLb5PYqZEyDvZSeDFBAshz2Tpnueh2OLIVz+rvSIUR6fAIT2TLkKDdIGkd8rttZ5KRqvphxc0boMSDYG0NzhylDv7cZgjN/DHb8qmsqyuMqsBjlgxFJ7/VNp5M5Nr56c69wqoxRo2xxVaGp1bxKCx3G0VD1U8sYTWwFKXfLg3mao3qS9SqoCrK8OgQ8abkioj/EE1OpXKd7DBaRKz3qiPwpcXQfAaBExjTDOJg4WYwnSJyILE00WcwBQvX0xNd0rTiQGYIYAemBSvkK7BqACrzxgGbK8L3ByckOBzKce96SSVPKmHPFOz5EWn89kMkPmelqFzdckBKEiOO19+2qjmU0FIrmwPNqhJ/1UHXUL1IV45VpRSJ5+EqGY53j0aLrhk3KOCgxv2Tbe9g1Q+xT3/b3Yr16bs7IArInWjdNtyRWaKCR5iF+5oBSPLlfsAEEYunROMKK9omJCm66m0qpI7QnxsZjv3i6OgTVQXNT0MrKsloEKOvg9TXhcub8wDBf1lVUNYRJJs1S1MCj0NjSsIM2ZFHY9cQY/ZVi6meVPtBKrSkGNXC+gNKhrV5wEIBpoqR+HfY1YHOkZLIkCoX8lAz+3jm7WuTW8knM4SeVGa9Mg8gSM9z4h02ieVNq8UIZ4OHsh8O5XDGlwOGv/4HDofmHuFWFGAyFyElt2d7aaLeeg//bOjq1VeXGVlyndbv6t1955ee++nJPb8fwyCQPjhs3b8/MLX3tq0//4R+9+p//w39y/tML01OLa6uLzz7z+D/6h//FhcsX6l1619FOXK9v7bTWNmkH+zOdGsmJqNXSVLRarIZVlx80cVVtamYqYgyl1mc+xxh5fGfG70kngeJcrcAtwkhKDcd31NDuro4XX3yBzoO9fWUNN5xpWVxnIDMWcIm8fm381s3rHZ1Jkyw0egWlS3EQuHnjFspjKNZeLEcS0kKQBV1wjlkHBR1AvAkgHVR/kSxv+bXp2axD6ZB3JaJ17NDu6rniU/TdJ2vLr6l4R+J5J5L416LH0s8nZ6bGXYHc3GjnZ/KAC/OWo7kVyx4HPmbW0dRU0cqNDjc1Menins72DkIdu0tk06q+dOahh2ldOJhDy6WLl+nKIQUaGq9evAgEuGhhNdH+XMrWZxc+ZQV44cUnjKATU+MyHjt+BNVcY9bZ3umkZ0LAmf26kkGisrXW6gZ1NrjfsnhMcyuF4md5eWcnf6E458SJ6fq2g8zoP3FodNm+aY0qPP30M7H+sB401VG7e14isW2HlYXLvlrRVeZjpWObto2s1MQnn3nGNAZ8583cuHZ9ctrm8jkTsywWaRIIEXtqV1bVCAPpSFkW1HOqofnVhU4WzRmejrYtGyjKHUjHdG1j6f58zCtoD4abEB8NDShjweTtt9++dvXGL/7iLxIxzKU0JJIFcyAj/CHjGuqDl8odmkSP19jgk59ba1w75tXFzAejmEJYtAXWjRJjoxPGaSccWc1wS4W1UWMoJSRZgJKThN2QZl08FzfXKGGxA6yljpXaesf2fllDY6vlM4Yft7CaveilcY9efV1rW1dHVe3kbFyuVF9bubYVNfWEfc4TDifx3Lx+FZWQtzVMwo5C5ae0vLA8j1DMSiZGjCHefmJiAxPa5oyH3xw2NFYcKuiE9p1tp4lblbPhOs3xnClC2llBi9sWiVQHBn/22WdEqI32ija3OX3m3HMdtv/b47/n9In5xRmOUK+99lqaH+1ePH/BcN1SU7++vD4zMfPwE4+51MPAsbnmttGGmanZUydPfvjBRxDrTKfnUli1FN1Rf7CeoEWQWtfVYw0PAjqhJtNwmk8kFpJALdEm7S2zjzUsWObkWioJPegnHUW72DBnkkVZigtpw+QsjaIFsLmAyBAHhSePEzEQhrE0DZkgW3mMZGE+taq2Hp7TTNoUNJemlzl3bH/zYK+pNrx4gQEfJ3hgghsrnOobAwkMohFjVctAe7gx7g6DkCMCQnoCGa4FmxtNLIicwh3Jx3lg0zm/sUnanDs0pfLyleUla6nuIMTDVdVlJupJ9GwuzsxBzFLA8kacWoCdiAjM2dxQHyUkhJMKXSBB/qPkRKEgo3AJK4FkcabEkRSRNqiyj4YhvtGnOp2jj2iG8lyFrCelsTuqRu2FdmgJro4POoeruh4kktQmjjj6kEtWhhBW62OPER6fyXCoAyaSBHbpH5kVgeS0zmDCn0nDp1lB6MeKO7DKrPqxehgWW3uzqMmQDpLm+aEcUdPing1jZEZYAo+S/MwBZan7oXdogfEtA9KqxbAYzCmrf1FHv0KYBUZxDWKxZSM5MlLrHYRPXMakchtfwZflpWIv/LvIH3p9rHlWx7EbezvV62srliydNguoWmZPKhOAkDppuxQfIZ2DBQTAVetrq2uhiIWT1i5lQKqobBJXlqNZx/Qy93jubWHoPUSSIJi40l6LUP4kRi5Dg1WxmEhVRm3CwqJkxyiFj0+qJKNRohW11X95VwjDTaRlBT5AN/XYF5ZBL7TyTbnDJ9o9PXQGZVQ79U21FK3NuDLp+NAjfNj6goKpFeXyJF2xIBUDpUTrIGnm2BwV1YTLnXe0IHU8vSM+tggVv+YshXfUPT25B0RQLu3nj1KDOJot6cfeUWiQKHKRKvgWM9NPTQWcgIyGSRkOP0MJ1Bf/GxPFY2mNA+0slHICb3v/sASVXydDiJDXVlnilI6qg2q+YZW6B8YCqrxsgz/YOK5gOExWiYyGgjBSoJGEHmkmRlkeuQCGteFCWRL4qm7gM/7rk9weNZf24ZaH3yJvyEN2OmkxRDKLpLOJDUA6ssNNSNhMfEcnMGs6Fe+gLkRuooq5dxKnLI1xwscmJufQzCJjXxx8dvZiWx30cvWlsaIQ5aS7PiXIbOCrTwhlpWNhacGOBIMUSoZmktZPpOQxEP0s2CDe+ohHqwjJjhfyEoHo0IsVmZ4Ip8R+IQfuFhP9K6lD0aqFrwXuyrnufyshwbn/y70xpob3RqXf0Xnuf6Lpowb3f/m8mODTwrJ2JInRKOXXIq1NjQ5VR1KO9S7SWpub/ze//3utHZ2ra+u33r39R3/6b/v6e5ZX1hqa2l584ct93V2amH31kUce+vCDdyhUly9+yq360Sce54GyyFVxi7Je7i+eb22s5+BezUKxtowSei4p31gbI6xDLBzyZFHH5lqOJ/QKzNne2XbuoTMUZwyMT25evz4yNsoO2NHV+eaP33/3vQ/+0X/2n5NgC/MudHfS41a3S5xqGwhKmuPo2JgRv8ex6x3d0lDVtD7nYbgZ4Nj+Kfps/LjF7WAqS6RhCoViIYZ/LcV8rBeyXVLk5hbiNCFKvHhoOwHBT9ieeeic88EZ+Lvauii63R2d3O0Yqmbm55ygbQ3TV2RkNJmeMw2fYw6+dd1BKNfOnD11/ImHuzu7Hn7k3K0bN3v7+25ev9Hc2nLq5HEar/4busTyivn8QF8/qVhlioM3bZiYnpmxfRaiTzz9hD0NLuYaHo8DARaWFq9eu06k4nh3lA52d5fvrDXWNpAszzz3LJ/19z/8AEIdnd3zS/PkZO9Ar3N0L19bsQpcV18NrQ77Wcsqr5y/6k48lCCYJydn8t7/1KWxvqNg2EerWI9IHyQgsk2yyhcP1pfryXuchKD2GzkO/e233zH/mV9app+puSNHOAsZTogdvez28Lg+6cYuG6GPxP6BBlXg/eOGLWBXN5bxgf3m7OvLU1OmfHo7iW/gIfQkDn/6sHXGyINlLSzQo7J0M6InNLacV2CO5RT5Rx59WDImasKO7Vm51ERKgZulZX3s8Sfto2hubXNe1fLqmlWT5bl5+oTpk2HM3V5LK06XWahvbl1dWhCv0JA4dXFYm20V1CwIKxFYdUeDEyfP0ptdksCBx0xwbmHRGvvo1NTY2IjRldPMtgOnDqweMKI4WKusb7CXLl61UdfW3mEEpUwO9vdCtamhDkCs2dnToYfMuj3AzURlu4+dO1HLAwV318R1aWRlYt8dvf+f//N/fvnqJZ1wePj23/zO33ro0UfYaC5d/ezipfNmuy4gwxgW+DAWZw9dAsVMBrzxLlDHjx6japuDnj57xtUfzZSwKgb1MoeOIOPc5KRKAah73Lx9Y31nfX5lnoVoeXuxvb+dIevGzWtrs2s9uztPtj59a/RmU1ujcyAWV+eoaO+89eM333zDyGpnNptAd3ub3Zx8TgzSFz67TLvb3t876gSh2RUzl6mx2ca6xvV9l8yGlG82VsRkr8J5oLoWUtBj/LG5B9lLkTYMmH+2NDbpeNQXHiV81hyNRS4gFXcUFxliFNndDOd7qCDJXyE0llBXYpwTZzQ1UEtm2HBpObaMsTvFRJ5CrpgnGCqMlVgLQrqrgMGxuanBoFixV2GROwwrO9vusCABSRPHlj377PNhud3adjgRl3d6jrsHnJ/Lc6PWvhE++rVxxBOmsoHc+KoUjwEby+XOxa5ndgdH/Cmet4/A7PzM8MRId2/vkcF+PZ0SYJ7MTrO8ME9umNjevHHd9Sh0+o21FTcPjY/dHuztXN0/0E+51lVU1fHDsRoQe4X3g52wNDSc7s8g2VwfNWpwNUSctV8X6zJ7DMC10d0qK0JTywogeqGO9cs4vsOJSTs1ceFMqK2NHQ5ZW6fZhqXTruDkUUa3iA0Gsd2zxuiDwXhbYkL3cxG7gM8sTcUQtX+wsBB6CfLqdtYtVXBxYZn5P+ki5fOz85QgQin1vor2zg4E8cBZWXA1VlfXu0YRllt2lu4dbLLRuNVW3yfr6Vn/f+b+O2b3JMsP+96c83vve3PsHKdnOGFndrizww0k17vUSgxaWyRtGbIlwxAEEDIBGxJsCbKF/UfBIkHBAigaJEVQ0tK75HK5gTt5eid0zt23b85vzjn48616nue+93bvUBb8B3/99u/WU7+qU6dOnTp16tSpKoQFn5arCMcrOE2MatG1r+7bRnqDh5kuGa6/K6J2/6XlBbhVv2c4Z4pFQY32UI7AzOSizOIogSziCqAfhD/s4s2DT6Ip1ief/YrwxOWau1o6pGHpV0pvbtTaJEyWtzdN5ilGVIOkt/UzBUvRy16UO8/3HHo2TxO0dmOXCarGVz+dhU4f4yithZPH0MT4/OLq0PAYBtNDnfLBtWhjef7kkUnLMHPLK/Q3d0GOjR51nLGzZQgxgrRjqJttFj/3UjbaO/kdlXlAmhsc9TR6ZvGaUVb92rCrm2fVXV+jrbdv5zB3CnIsjxbM7N1CjEwKrKVyyE4HLBtj3OPTE80DA+mtxKljn/QLebmGoUwpTto+ZxQyBxCYuqtGQYpUMDO3/CW9HNHHYn339tMoVrEVgRwlCVTTvaXyLtMZ0RL787M0YuKlCYSAKwGfCigXIAaMcPmSgupj/cIQ2d7T63DyoeFRSi80mPrJGDqv1Cz3+zubHGt1/DLNC7bcDzGAw6INfAL6INOS2jXhl1r4XZ40g8JKxQON7mvLXErZn1u7z4ooxoFR0oQ3Yszv2O3OMgJo3mKwvUBLtojXKVAyk54i8VStEK/Lym90671d8kSymlebcQf19hAFxiw4x5+iL8eYYlo92ogZLXlHp49Gq2T9y8pEe+fqyMTk/u4syxc9XXOwu+A07r6cyBziOXbkKBcfdTRCjeaaDr2cwAy1S70bbRpsy8N1WfOhB9kOH4f1qZrEJi80orWtTVKfwUVEmdtEtOrOEhB38OQFToxXzokkQQa2VFLdyJG6uzCbn/MOnc/sxZKvjKgQAYVQ6fmFZXT/sEeDW7CUZPWBfDNY/m1+QRC/of3Q13Se8GflJQH09AjUStVP3vVxvAJe07sfgdPKLlnNXt+oGPGRMsFEMl0my3zsDUy3hmW2ZpNFFXSI2PLW8vGzx5DLgDI2OfaLf/rnn3zyCXz1u7/7BzeufsADd3dr+f13X8PRG+tLf+Nv/meOAiGmRidIVn0Zi/Yszt6/cP7M9y+9d3xycHNjpzPnSGGP9ePMpss0xAW6U/ZrDPVOHp247g7KjU1q9NjEKE2VH4pBiilwaGQEk1B9T589i8//7C/98o1bN90ZxZD9z/7p737t6z9D39vc3hjMAUFtaxub5LazNzburTt1hyuQQfP69Zu45Rd+4U9TYBwZ4ixRVTaaXLlyjS7EmmnYxeTGOILF5DODSDm/HzvRq72ZXbCEZHZ5YhtaEzdwo61G2VxdQdvVzeXF2wuGz0G+SAPd/BrYT3r2ugdPTfH9xxs2BxydGu8ftnjVQRmzvZW/CX3gqpP+2ztoR+Sd0651WCM41xfScmF2zoprl4F2aLi/DLc5x/TYiRNUit/8x7916sw59k7jlvNZF5aWmIoHrOsN9rnzmPGWId/Keu/KMg/5O/fuqy1Du7Pnb60v0/vdUEYYzM4tMr6eHD9pJJ7lFGQT59qypQv7g7l98mPJ6Mhdg48BjrahVksN9Izmah5a+vCx40eN8ROTYyePH3evBDv67bt3mZ9f/v4P5haXHK3J0ej4iVMLS/OWjbjZmLRo7w8++pA94vOfdzFH3JaA0hhGfSJPQFlvvf0GQab/M+i6mEuf1P20h3WMEs5EXwevnV82le11KxSbtymCuydpgNvZaX7LktXMvcX5hfXNtZwkWA4W1N4n4D2ZY1k1G48Ijly18wALQoAUAUGomSwuLK0cOXp8Yys+lJjXo8k9stBuuULhCXqA4nzyc3LcMdaDRA0VUVmDQwYAHomcwLJkSfWh3Gf866LIc2ba7DnIxFfdIYPPQDcN2NvPqRfWEMhWrDx7/SZuM3ngCHD1ysf3pzf7+0Zgi10Q0MhO/Z2fn3nhueeWV5fMtTY23FV8jf7FQeZXfvV/8Y1vfMMNPQvLs1u7a3jzrbdfdfqRydtqqjb5+GNPOLJyY3Nlbv7eu+++NzN3z74tDR0v/M21559+bmV12WXaRgdLPtaRHOywfbAL/vnHz965e/f9997r3O/6xZ/7xT/1p/6U/dD6p67Iq/4f/MP/DmX+xGc/N//ExW9/6xs43magg9FRF1Xy2KCWZPym27nWgDbpaI+4ixQpHFWFaI2AwgN6TnPARr88KI9WrXANeIss8flKIhaBHmFtWCDvovhn+pDtn34TgUlcwRTpWfI2gNRwC3ICckRgNrOUbymoKb59kaDAbch+MpawK4PCAes1NsPPNhLZRafp9Thd3dvpUYDVEmvV6DB4KRqQyocIZH/WBnAsCwGLuC4JxMraKjLa7T49O9vV182zbJWxxD0v6ysMb5zs+re65ufnrDL1dLnea/Ti+XOOBGOWoaqjO5hzM9YxKVL0hA6LgWMjozjQIWf2aWFIq2a97qPu6VW+FKXGeUE14015qzSyFgesGAeLqVdMSdugheR+Z6izlVfP0gqqqYLK8gk72ZJrXNdUvpIP1n+XFheF7SDH5Cvrq5KZG3hLFlu28oJPYJhKWNIDCkw9VMeEjrIkEd462HL0iFsIuyjRxV9af+FiLDGBA3hBNKN5shchk5lKrNx7poKJbTFbk+XSJrXdd1ORAqHwZDhAY4VDKgHqO3IzrBGuKDF+hy3rU/VV5vYQ0tSgqJ31k6b0F66NAT+2eQpN4epGXrPUXN1gNrjvZAAuqDtK3yepnL4Bjg1xEC1Fai/TBv8trzlIB9nbKfEXLjhw66lzp89wGzoy7qabTD/wAL3fsngqXnQOvNpOg9/dMXFmnWLn7xhyEIejs3J4q1HJZb8qBj9ohV5YK3bV/CEmVFIr1SjfkiitU/7xKc0Zchtr9h3mURgg7NXGLcQkK6pqILZTHLoP9rOyV/6gJlCelPHI49MnI5MGqPIheYVLmwhWUN4tsK2Y+jW4C5WnfEqzSOwPnJq48VlHxXs5U5D7FHW/MJHpmookCzNbcfG3tmUtV2yA7OUOOAkwMJ4MWxd+Jj+b7V7a3ufySOO3WYIiQfNAz2SosrSe65GwwgGKTqLoigCAPslYY8ARb6wRqeuBIMHAcNbtgfVVMm/wTVdWlxsupmwEckmZGmmbnj4hQPCnlW1w3NcBINOWjAC5roOqlCxDxuf97sEBt45Csq7dxU5P18/Oxoy8ioOesGoadK3SsimQN+axWJ27KCSjgHd00J/gyYJW1i2UE481oIZHJihtxIAijOSgifRuPpU30naVT3z1o3TfRGHImrpyaeNHvjTEu/zqjfoEAYkXIoQTqlZd0v1PeynX80haPTh100UyKuUj8CnhIZ4uvxOH0U2oJawMWaIefhX0Hoqq9SJbEpveKqBODNs0E0u1TmzfLG5STgpoP3n6tAMhrSXRt++9/RaLuM3Bf/5Xf5X45Mzygx987/d/75/aFHrt+sejY7Zk7J88ZUfZ1p1bN3nsEN1mhNP37mijeOXupTGZKog0yn3MNLHsdLGI37h1y6XCqj00OmTGdfXubSOmsrQ1XZeCjqfCjalo7F/Hpk5A2vwTu3zjD79FcXdO4OWPr6oQppKFYuyNPbgGMPybA3zlK18BB5fatInl2KbxjzfNTS7s55MHb7uIC/t5kC52Sl/7s5eVDuZr7OPIVtrGjImQsjjANUOjpTmLHQeGqnz56sfQkNgDGmRom3QkG6z5Ry3sL6ideFlUDbfr7/CJal0uQ5BXelpo1/GTp6an7zEMnD5zDqK2BPB5UHt3JkMIcuas3HKCbrEb6Zi2ylhPW1xYMuuilNbWdcIH/yglGWOpzfsbnOqdsXWCH7DVir3ZnZ4+E19KfxcXLX3J9TzYC3KFGEa7rCpamdRDUM1SAGTotgDqabyoZqxNurW7HEMJ748//nhsfPL+zDT7N9wuXbrs3EYIA0jtQCOH6DOmo47m0ff1ZW1mJFC7rKgWhQCegCMU0WAVGMn8BI2QBAdbsBjp+W6hczzo/KKD8CwYGXSy0Y3aShJpIU4mdhCyBRvALKQwb4OmCkivyVFcRbQfBUtdPCB7BJQF7Nw8838uomp9gpv0X/rC52EeFby0uhi1o8MzDY8MDUwdP6kU/kYfX7l8885dBEmN2nKY2s522apiRaDbrQuD4hWXsggs1I5kz6CC7DibIDNzM7nC4h6+ZW5WcaDZ6uyqI2g2tw4gT0E7feakwHsfvp0zVd996/HdJy88dmH+yuzsD2cuXrzwxpuvEcD37t4+dfLMrXt3bEZRuflZS0dzRLIBS1tYqpu5d08r63yTR484ttYymT6pQ46PHYGMyfFTzzzJEfmff/ufqxqV8Uc//vGzzzyztbT+p372ax9/9KHpsXWx/+A/+A9++5/81i/+4i/+o9/4H0wc//E//k2zIl8fu3ABJxwdn9h1XKOBgzJB923vUl8E1KZgFsJn1FF9kR5UFetnjWl9qoEa/8jbp09+BQrIAIlIbcBvZGwI8cR74OD9CMxP/pSmwMyXGg66zUekYM0F4OXrV3DeSz2fc+CVDfYODFVZQ6XzOhwbQAxw3LEDnxGwk0q3afGneFQUfZdXHpWaNBro7GahyY7lDoLPyoh9nL02SF67fmV67p4tvFzycFIWXtvaTQNWHbzQ32NR1S5A+6u0o2nYOnPF/km2AQM3K4Ht+LwFrb3Yvc2At+IQBvctbawN6CddvGIsFKyNj9R6PHi36l4I1ahm/VxiGm0nxs/6CGMhYWRpxQggNmYXqaGlIUgrHG/sQUp4hDvcqldUQl3eDBlHFKaQJ9M7kNFT9/SmBMuoExLZlBjTfnLfAlqYrbhYSKwPqqb+AgFZ/ATc26eyv7VY1cr8RJZHEPZT4vr2FQTvwlbo0PprxZSPzQSPKIutb60AsPWpJKpv9aoVrD8llsZbjbZRjYAwpIds6SY0E0sujFikERKVhFAMllwjt1YMyWOSoaorn8+dvwjI8ePHCHbLH3YlkWYBGapEvWO89ET7t5xC/hd3LHNTn/AGjc8EwGWzoXolFNCNJ50odQmpPME5/5THp2ayxr8pq7ijKDdHpaWE4ODRiHX5JBAf7nQyg6kYn1Ten3B+ZkriD2uEreTKTMqn6FXYDz819L38bKHSRK8V0QjED6sU1PygtgV+87d/S8uboCZYnlYABqrgacUHnzxF7uRI1sae4NrQ0qu1NHXIAEeMR6DkioIopY6Qpiksrfla8I1BHmlqwCduEhWINxy8AZdeKeBIaZSpfcFXP411fnr8rJhgEg9QSpRXWDKPnzHaFGg1Eoay1OLyoTxpneZcgkrR3TYgWnpjnwfLgQMT8MULq5q6e0PSqr66enN7BlYaWNEEBLgxwzxb/PpiAkAhqjCsbELNal7zUGC5oKR3p9UfbmLF+frJ54+LT0p6PrbyLixdpFUFGi7MhwrzEGSlfrKIxHxqvCZQiUNcBJmfhE8MB+A3JgCPJG5lbAUKJklVcUp8QqmHxVX3UGUhqv1goK/fKcLOLXz66ednp6OJri5vDw1M8kemUp48dvyb3/z2Zz/zOdqY3FTBsZFhK8xmL26IX1tfpQeakWpiTOgsYnotBhibnLQZpH0nGwgr78U5cX/v+9//vi0jGo6yjhmIJpqY/Zk4gUbUaPEyhQaNJhgJ1t7JSRuTOGGSHdbuzW9961vPPvusUuh1ZLvqaHHZHSLy/HPP5P6rF16gsdAwv/rVr5pdqJHENCuFSql0bCQgO1bEeMpNF2ueZGM0YUPHrlH5huIbKQ34VpfYfyltlYehRH2luwPF/qs4RMB16Mz85/QLfsJ2jSpCNZ2Iw+gkLLF3Fse6uu+W+6lg5VD+MwPZxdrFX4UXeLt1g5XVtXv3narOliY/VU/ZijR2wQbtj0xOXrzw+PrSmlj7xGDsmgbnsoOiMm+++XpMzDFwHTiOVKeiiDvH89pHH1ORV9eX27acWLTjuCU6CW/lvv5BNVQQarLKqgksLddtrDtsOFv+z59LD9Qzecvcv28f74xubsfqM8+E4hY+XvjMSyBIaeKBKNpMGGWd2f+Nb3zD0g+C+mn3hozYgr8QFcfVvUQGgtKN1A6EMpK1S1+prOViCyw6OkXWaOGYKsYwSyc6ofOgshA5OHDx3LmJoxNo79JFe00spojX0jzASLfalt5i0pDFjUfzazbtocoQk6zIGlOdlQZDFFUjMqiwiErhda3rJzhQ4uF//uwpt599eMmBlSs2/fI9QsMTRyYxfT2ebGN5yZ24vWZd/f2nT5/yFRk1pdrpEKBxeNBkE/a5TEzcuX0PZ1vkoY5r0J39rsefeimb8Tr2LGsY/q3Q9PV3Pfv8Myaxo5PDZ8+eefWN13/86g9Xt1adnwDa6NjwzZvXhweGZ+/fY3V2QIJdJQzGBhSz8/nZWZMOZ8Xy1OK8YRPzzMw0bwqkOH/mLG5m82PSUWXIXL1yZWNrDbvrQoOj/UcmJ+iZxyen/u//yX9MtWX7v/m37lx84uILz74AMWdh/f7v/rOPPviQb8xPf/nLb7z2KjGOULv72dZZ58tVCALeoF6ZA8AZ/T3i6yNcI/1sBVrhkrbx8lUreNenxjaBJK9wiXwQJrObkWU0KzmlaUU2QDf/8f3w1wrzEORmuib+BDomcbapXk2OUOcwG5bT10gTAcO3QbrKPu3e3zcc/irH4XEn8B92BwR7+yqZsvhOYF0Bh8aWlYFlRpc0VrY+8JfINaIGvYnOUZ6XuNSSlL2FVgYOjk7M2xeS85RY/ga3dw6uXLtB9T9/8XGjJ1a0eM/SQv5FR4q7dU8UqeajxNYTqfBpT01QvxxKnAit7BFJDmgmdIhzYews7q7lTkNLyhZD3aEm0wGZQ6Q3qVcLHRO5zE3EpLNE1Sha77YxPoJFkzlfRHYkVZwYUosMYVNVFpiAg+kRBqGyioAH5PTQuCvlLN1inQ0PKAso7xqWUTJvecV41+FTWLLWW8BT8woc/hTl8dOekiMdwUdg6wMCWkFPoYqKz0EzOxVZdbAEB8kc3GC7P8Q9G1tOV+ElJG8cMELv+DjodDFKo3Fb+jJ5a5IHLAjqLo01OjjUpoFG0cLTm2CjJuoWOEEjhwjhyO4AK1sfnDaT43qqq4OUaEK9VWsFWs4L6TyPVDqQC8VA0Uwe7aUIAVlQtVY0mBT5wDrta83iXcMV5iPA/fTV2yNhDTxI31xmKV8DoBWo0B59H2q+B0BKrvqzZq/vmPwz73rwwF8FPQJKzlsXaFZKhXhEpdWKbo0CHk2gJ2qXWosWhjIK42cJPNqiUWhpFzJZKaiHveUF0JgSDN3gXIDLLr003koRqd29JfbIRbaQKj3L2XvgqcV5++qnLDW9ACAN/mx3binv2azdAUXt8xWnwQ07FW5JN9FazXAny+ude9MigVUi+D7BUxHAeoQ9RGWeAabZDroKE5VPxEZk1Ebm6grS07PDmDtiWdlo381ALBP1lv4DskdBoMHWp0dbtnCRNGHEEk7BUS4+mfBBjDYA37tMATLHVIJOVflZutacMtOBmuhB7gehkKUU2opSeF2vrp9a8bUK8Kwxkj34dEgIB/nmI8En0/vYyijgZ+2TyVSs4Byx3KnKexBtbXS8ffOmE0wufejoCNsoV6nWtP/TZ05MTHCwP0GL5mTBNs1/k6fN1SuXzp47zXjEccX4QZczQ6Odnz97Wis71VMt0tBl3ZVmzFBvQ6Wp3+goQ/EkiYT3aF8evK1hDWFkGj3EW9sZ5tTI9u8oXQtLuIU91JD63e9+l2VZo/Pyd3cTzZNyD76xlcmSH519jGYIqshBWiTgekpuFC5XBVeuEIm39SzFjTjesjwZaos8dL2GeFmsLGG8DEOuqV3J7gLbNWnAVF8wdTd1hIm6sNiaw0AVJStkkX5SA/ysnaXyPwTUxQOysFuq6hTCVxQAsMvOeCLFMSk5EieHYTjcFN32b924oV+7gZg/OnotLi9AZWR40KW4auJ4I+QGhQc825YYOAnD7+jUEcrisWNOd4qHzVvLr/AHd1fC0oq7eEdnee/08MuXJZuHyBnIOXXV26KvSi7MO31lf/vkKQSaGM31hPZrG05eeumz2sC0gZ7qwFe+BD/8wY85CCG6XN4vvviSJsQZLlueGD9i2kBcGNpw0r170wSQLjQ8OmryHz/RLE1S0zW545kyLppCSQAfraUNwkzh233XoFkJwM5Zp8nBQR0UHech2M9Oq3BGrLsXSSxeWQwdFBrqDmQY/mESaeLq8iKMVEFDQh5wxYn0NgFAbG2mg1O1OSMIe1hr/SRlOLThNnAkxsGAvPLKK+pyzO6C4eHJI0cO5mYhrO0h37HlfEa3X007bGtvMU7TEZo9mUrCQ7lJQ+Davdx2ABN040Z14bGLaiqlcxStzPDC393POE1wud9gfdOuaDtuu+/eu72yuvTx5bXhEZs4se6BvThyuSjXVPv+vTtsx5zFLOc5Yd/qj9UKJz47pk3KDQcWte8tLy7PzE3HKr+9YyqFHbn9mDvZDBMeGOp3o5wtVjZzfnT5/Ws3rpG8vppLzM/NuMjMCoyTqd57561/5Zd++dLHH7pYpL+va4aA2BiaYGN2otb+vnVk7hxFOSgSMxpUxK+yEvo03b3KLM1RmjuDayvQCtc04nFEeZdQlXFFzraANH811BHpKhDv1iNxAP2LnppGrj8uYRJYrXIS7UHHxpYDkqcnj04xq1i1c6SLxTvc6OpOJTkb+N79uWjw3d1WVC1scxEK5GIRDyN2uNcwZxSw0HgT0yBIf+XqJUyiq1ZB6TQHEseT5SyMzUk6F2HtbRIfuzurbAnLK1NTJ3v6c4GgoQrnsJYN2RW613H19u3Z6XmCRfex7dOhk/rIyWzdeehRevMppK60qmQv4WbHbOSSWEXg77e3hhaoaTAnRxKDhwlAbgejCuzEhxgbqIJOQcL0DvfxL7EnBE/6RKDhfHplzBhIwaW7yAHaZxMye8gO+w/g0rMVDpr8u3BjLRsuSTCQAXHfAH9B2nRpPHZz/jZx0fZxJ6vNmUMerrafaiE+SJYJAPgS1PjKz5UT6rvmbYVbgcMwPxmWrKYEVinBA2mKd7jAA5SKJ4t259vsVB/bLqzar9lAphpsUTs7Awe9lLDkdaJOUaTJEzMDup/JPMuG3fYaF4W5Qs7PuUqnLIJ3YQlr9Vt0VRKsIhNSmzZgRSJoj7k/2mTZvWu3WJYE4p+hS2YdpiAf3CrpMlXJ3K08lVCCAp4a8JYHScOyZbYGuIeUwyYBW5jBsGsOUjaUP9ooVQsDDxjJNZFcORIpaMcUXYHUQFaYUpHGxENkM74GP/2dLM2HbliQr2j40vjU2gQsYWKb8TWfn+pYohPAqGZPuc02U1ZXs8W2rbmr/Ae/phEpjBrihUtrhiW0mp+AYGNvT01J31KEnyjpLaWeIrtVGmGPZB7APeSMNwjiWxBK1eLoW1OCVhtFAmFDmKLr4FizBFA5wFRJCpKLu3DtoYa5sJyScxwtl5a6sp19MuDPLy2CwDJFfU+ufkPlcMVKPJRgDhlhpErh3Hobc+BwNRzAJxzklTIHfEQfyOAoA+3FXgMxslRi1logQG2CWjufPMKJTBTGwG+ttiav6l9N/uBd4ITHkwHLeaeLZeoXIOBVaCU/omPET33CrykvySsmtd8Ic94OUo2MdbwL5zSS+dLsQUGZ7G30KuHG0yrR7xpuBerEuvUzGQoOhQOR0x1vCuIkmbM37Dwi85584pnN9aW33122A/vY1HFjDdu99WTfGVU58lEtHB9/7vQpZd28O21fJeLbWnbn1i0S5djUEQJXOWGSYlPXiKqjeQQoXZjSG+eIhIaH8lNav8HbWhBBIEfmYF3cIsGv//qvf+ELX/g3/81/84tf/CIPW6q/AVGh9HLiCzRZBPga0aqp+9xvjHrUSL7ogHsDKwDnyiHewnz6ZWQJdUCORqXRATI2NnL//l3oAUsP13RWPO7cukHvH+zPcbRHjx6z1Jw5Qzm5DqqvvfaG+oKJFUXqmsIs8u+9/6F+ZDT3JsNb+qdCyWT4KJFcNTTNzi0gS7a5rjrooJPjfrYbA3rx4kVW4RdefO7q1cvWOOwjjOrQ1TnY30c1h6slYBdyYb2445UNDUiGBPy5qfiECW8BjgH0RVvH+F3RCKeOn3Boy9Gpk7vXrjmORk+9Pz2jLJ1Pj3VyJez5fK6ubDt0daQcVWahYGZvQRPaDwB7mNgF5CRH/gxui5Bedg7wZ8+OZ6wqElCdpXRYkNkI2eCnhqRAM8apuSy9/YNDg5yP6NyZkyEcitvTqdXRWl7dqrKIsCzGv80Nxx7s2Al6dGrCSUzbjskk1Ho6Hr94njujbSUOpXIthbZkK+OzdPdeVPz6wAq5sYU6YmsImKhV4ah0aeLZHPlrF5EFGmOtPUb9cdftbB/o7XcTDw1478RxMVy7qVpSnjl1HGJjE0dQxpF57otWCsjAsu6ePnV2a2/3+IljNrjYwYnhxHtgoDgUk7cvhxgMYDt0M7/SgtDD4pzBeFkddNuSEHLdXl09MXXUIC+lDXOOdnnuxWc0rl0Hr771iiOnyIzFhQXKt5u0v/ed75w7c8o8UL9FfF0ihfayrEQEb++s7yxyl3JOw/bQ2FHXuvN5M4Oie6GzlTIC/Nq1q2r38g+/b1/gV7/y06dvnHzrrTd5Zf7j3/xNXlVsIv/O//H/8Df+xt8kkr717W/QPf7X/5u/8vSTT/72b/2TC+fP/fDlHzz99FOv/OgVrLO97oScqIMaVzJUKt0jkuzwU9o6aQS8pT8c8LM+rWTNiIyUFWbNJV6akqxI5khtgYbYFY78bD5JV56KSTP6oX9bKElYP7QKeiRX4ovU01g03dnZGXO/nlPlbp3smWscXGOKS++0Zr254aJch7uv2y0JuFwqgnkEFESmGIO9MYM3SZdl0K31e/fvxgukneAYcRcsJqKU6e8r2zv97ihxFtZwm1W1tdWtoZGJgf4R4npoOI5nIOt6prgz0/Pfnv+uzbjLWf7KusTE2PDm8DCmLc75qWWt2uGaVhrm28OP7gntGlfTq4uy4FwD3q2AZHofewblUuK0XHnEqywF3XRRv1hdZmpJ3U1OzOoJ7FaZKm5kBFCMrM6z2Yk6laVVMe27nWOj4yoCeJ1BCfskrK9JADF5fa0o6RTmIhV7kZ5aUIXvp/RKqW+RzYqWAbtwWk3/qe8K5FM/ifTVA7LxuEUJ5YcemZ+EUxuPwYFXy57hsI1wdGXOZhyBnIMMiGiUzNpIvDF2t6UBs6jplod6XKfIfEHKmSFwD+suhBSOM3VXfCxRILXeY82NFQZKgNZyxdPjhH0u6x9OgLFZMtcyWmgI7lTvLDXEu0WvbmQrzANOJaZ3fZqVCWvBNAUVJo8qlemiiMT4igCSoLpwjazx3uVnK05EHr8PpQQqONenKFwtvGr2fHkURCN5/edB+iY7PPS59SPlAlWIVnGonyDjEfbGexrAihfnSqY1Vezmb1f8BHRG4723NKqc0afwG44l4T0CWsTQALgAsSAgpfQIKAGWFhZZUypRmC4kcaVwWKm46AhAAwTCxCNZhSbgAUcCgXSHMt0FSgA+ImtYAFhMYjgYLWEjNVdDcAxYBhoz9jqiBeB+DHbBx9kSfX3D+8P0MCZVRSurVC63tkNbGlU49GyjCfdUhgmQrVJ4SwOxWnFGAHWq2JotVAhKFPBUbFNuHv/mEarNIVxrVL8Ie0TFDP+pT+Foo3zW4dLW6ZNheCzaEZtFo4ca3iqEOs7pis2iH4FaMUmhBZNmIJQ/nDJoNSlfw630MNIvzI5bMa2MUn4yXLK3olP9mshszU7f7XUXwWQpRjcfGRw4efzYQt/64xeZMkdtEWzrYKnZvHXj6vVrVzTW3Py0c3Ic7OqoiR+8/B1prl29Clrv4IhhjpmW+f/cmTNVh1mam3YIejluNI7NxK9HT8CwDg+k90hGccdC9DFN7Csugqj4Gqb/FIt4J0vZa6+/ydjPov9X/+pf5eL+8ssvU97k1XcgT7PHmcI+vfTSSxwQqnneaoAi6voA/gRfMhxovEOG9Moi2FGUo4R4eFppV3rVUZdcRV7cNLArJB2xwykjVvUFw+Yi/6If/OAHgMilh0KD5uYNDUte+FlAvHIhA1WfFKqmQFX+t6CBhSo+7HfSmFHQ01wNu6AY1lxaPqdhE/3nn39O3d599x3rL9ZcsjC+ueHi2N7urkuXPqQVDw+NrK4vtHfu3rp7TXq3Wo12D46MD0xODcNPV9zYbptfml1aXWBB6zzQvRywuMTjc2t3yxo6TbarLeeRSUw1gSKfMI3BFkGlVxMc79beN998k2Ks//uMdnq7ew3+6W//s6HRMTc1qKeTX0fGx5xSKq+KeaMmsDRhNLWop0bGdS1h54PGQA5AensGCDQm8QiRspBnyE5vLvLOv/bHIhkKSm+kWFpgUD96jPp/ZNypoGUXn/GINcL5PcMWb4gH1wlpP9rq/MLi4PD4osWOtTUQQNOopkYqhQ/8RPp4HVjRNpPYijqu2VBmzeKLCQmLou3GPf1OunTIjDUsWDkIVbkcYFwJYQe6uwdqB9bqjPw51WFXp+pVzayLlwcRuEaRfeoro+oourRLJkhGY+XaySIBDy6ftHv/0CCnLzrLhj18W4tmrbfuXB0bH7D439UzsnOwOTIx7MoFSiEHNxLp1KmTZOPc7MzZc2ek4U5k9CD5gKZMCeiiFgGKDOBDlaNRFGLTlg2T5qcjw86e4qO2ad/qxpZVjqWxibH703d/+qe/TOp9/wffJ+y4l12/chWDmf3/p//pr/97f+3fw4pf/ZNfsaDz5luv8w37vd/9p6wZ79jVvbX73rtzdmJWQUf9rnSgJuAcj7ozDuGQpkSqePkVASXxIwGRh+Prz5KmkbKmr/E1JTAJNIsAs5mrgYwYTNjKgvit8CMBwA9lb4TVQrJWvHBwIFl2NnnrG6KXVlfumQD0DUjoUDDTvBUWlc1t00I6D8nLiXVwZJggNtx17Wx3cg9m6suNWiAdiBRgPOtYWdYlJWNgIyP415meEY4iTQB0NNovZrYsSaZMTR7Rfa9cvkwMWdi0JcZRezo1/udMSL4gw9zMfUO2qaDJ7dbG2ugIIXNKHyPOKLzbDxS5kCGoNEaNBwNMPjQJqymR4lCy0ARh0bOSqJWyBnzCezQJX2mRclIv81cMBNv7mRWDGcI6OjerZPJFMQ1TsHBTjbmpmWJZTgh2RduLQhPrjuVVvVsNZJRNlyfTPDITPt4ivcHXW2ECF//DQvzhRxoP6L4Gz/KWoEkKbCOX9gp/lbRRzupXASnRoBQVveEw5MPhklGugFWKpwn/cCrhxOdEHZXNIVQscAcxk+Deg73lJWf/2NgjN7rtEJHIwEppz5zdUWZQbs7oDW3C6ivLm8jtryCbBW6RkgpoFKuFgNAwHWKmuPj95L/gn037hdwmAaScGUpnV6jqU+NJ7amMMU82oxrM06oUELJ4o7804jUTuSEQFmv80+hTKa/5lC8NsBo3IVOcTIvK0icsIuq0SPmkXVI9FuCiieU42ABSdAVRAw8h3yzIv9U+WiPSMsErGZMrv8KK+QddsgrREG2N9KUdW9gKqIVHIKyWMS3spKMZGXVJTIjyVemRAJC0U2lBTFsVi1puKbpSqIIP6ZDRI0uB3OBAA5kUIj21aGkUpBQwRVZQFA7DkHfnTpJ5JPNJcRUBk8b6U0yK4S9XnHDowyyXcIO5MU48EeQBSqUUpBZ1NJdRiQuLK7QXsshQC6Bk4qkBJFgd0/0EGUCg6IGwstRkG4rEFTHr4z4RcSEypTITRkxu2PRv9gCoVFt1UCvzlppLEyX9Jx7FHeLQxudENp5028xqDz1p5vTnpPKhpMhPf+Ik9E9NjjE8keOffEo3ly59pPyfkJ8PFfUgm1rka03jn/qknEaGglR++/Ig26Gfjfgq3Bob2Wt673ZOGdnVypfaEVIri24X4dfk6PXVpctE5d17NxaW7nHwseZ8fOoon2FmZxd1DQ0coeVf83Nj9c6dmyyyiK91tKbiuOjgjbRg0emd/kYQ44q5BWdlLrEUUME4gJDSkJdLMgwjPQbAS356jGvYhoamUpzwT5w8TcWX3tl642MjbBJPPvEYGyXNnjsGD2dGYQzGuInD333nLdo5jQ6zSQ84fsM5phOGTgBRFeTa6eCsUDt6xSsXDpWly6CTMzbVzRWwruxWuuJcIeV99fI1l1ZB0hmYY6fHWOdNDPA/oukyAJrBYstaqXqmDhcUaOj1INdmVBCyRLUuc/Vbt++qwtGp48z/XY4IdXfA9vbk5JFx8x4dU07OPEU+OA977e7d27rPufOnGW1MzvjxuYJLg6nz1LHxn/+Fr/3+7//+wuL0hQvn1ArGBA2KoLmhEZlosVZXZ+fn+CQ4ZoSKyx7n2mRkQh26gprzM4cZiaLQE450Gurj9+UYYA2gjfl3maNrA47g9nqj+Be++FNY4Vvf+d4v//Ivm5w5X1JjgAYIGMinq2sDMUohZFAcYtCjD7mYLeK0yEeKgTTyolQRQJECcEA++r8ewZZnk8fUsckRB65Zplpc9q7yVBpzPs2gmhWCRiLN3avGFaJOPMRroVLNLhoSZoUJblO69hCGJ5ZifmJ86WpzDEWbFfmVraW2lXyitXgoVc4aAiclTh7BZAC2dVi2Wbd4jhrwkVHKoiLEPSEGO0OrTmYKvBflGzBkUbsSH41HGI/65GAsVahcO7+86ByohZXFybHxrd0NZ06tcGvYdxLUnC0BuOLchdOnzhxXonY0HH75y1/q2Nn7ox//yGKrSaqKgHnlysd4lDOZCYjiwuvWpMtiq6lCL3W0OyerYpKrH1+mFH700Yezc9N4b8paXk/Xhx+9j79x1wcfvn986tjxI5MvPv/Cf/Qf/V8X5+a5A1kIgi3Vk3KpH40MWUmY2VzNtXwWpszn1TC+wY0n0kplPc50QSWPGM/hgHAlTj43n0/G+CJj5HnzaaZ96F8ZwatFHP5Q4sN5n/x0ONnhsJQ1l8ia63DeEt7jRoZjjWEanJR0zSH2xqWEDyLTvJ0zWUdKLAQe9sNI2l02j9ZRhGYCjVEBx2Jp0oGgwRL6pmW9wuHbluXGhseyZLS2bix0VLNy56bnaH0DA8532T5z+qJpsPsKFeRQhjNnL5qdrq+vkF1sGe5MwRtOx7SiOD0z5+AgPJnR5Y8bkQohYOUxguZdBr+Kan42H/iriPhKpdrcwnpKdsRvrCFe7rhFkb24Qlo3lObIxGRi7HoxNe2P2X5tJdagkKMA9FUyBbnzQ00VoVMpthYU34NEtTllDpXS0dyvVwyHaKhXlo9gBHNftUXCe1wyYhCt8T55kqg8wj7Vdy1FdLBpjvf1Z018OFwBtuL/uMAfl6wqHCmIwlHUYFVlpI+dZGPtwMGBFH2aEEVU73JaaLR2mnn299OOYibJ+BqxYy8QxymyYmJ0jPOJihewUe6lYR0wUOndkQmF0CqbvhmBJi5OP2WhM6f3u+Qa7bUZDgmGpiUNXSQoBpdSz0zpoo4/6NE1jIAgy1d/Vpr4mTZNowDRmIHX6oNyOKX0fv6xxtoKLvhULPI7OOKovB48NfLB70+EWgkeKV3C8ingWmkOh6U//PiE5XRt3Mgj4ujkKCMLlXs5RrAVX8lb11zgdh08Zu8yGdBAgKC8NxZFHCmRzk+FpkWKFi6sa1T4mNwjBgRZeMzLIqaKFPHyVu6VXoA+4E3sSCNlhVOLM474BGePohVXIQPr8VNijKFG0qsF4S+LYdQjC2gKbTw9FLNOR6mcf/wJ3Zd+D4IsxhFDA1QZkgCRnXTy0xtiDE+zs9OkmWmh4tJBs7oXzpFGehMAUySfIibDIBzV4pdjuiqBZGJUGQ6FrWD04En2yDct+IBJEvMTHwOl7l66VM4dMlzgbstgxjR8kD/80BQIfkQkfdpTSg8P16cmEYatJ0DKu8b4KVDfNX39mZWIdNykbz1Vsql7K0agpj8cU8N6r6LQwJEgVqdsU0Tg1dUlXT0OpPsuX3J3ZP/4xMntnRF7XNc37n7+c8/axjkxOWS7WX93F2MuLdG2Uof7U20dNEG7cCwkC71hDP/wtdbKWtSh9nZ5eVbKzH+Qq8noCBYmLzSQeK0IbUyl7XQHOOMB1cEteMzwxLHlo0uXP/OZz7z//vsUSPzTUu0wMLd72iZ88CGAitaVvB0EhLtAxr30TJxp6MRpYsDHaYpWHLSVuLqyBBRt04NEEtSMLNpW3Rm+jR1iUI1c4lX+la98xYW8jLPygqkKGBsayqIbg6AvSK9HK1otTp4+VSur1aSRXmXNPYzpfkIMPnzpEUEuoGxfW2eQY++Dyj/5J//YSVgvvviMG1gNk27AdOffyGjfxOTo+fNnFX/mzAnaG29imU+fP/GVn/nS22+/3jPQvj67srm7tji7iF5kyupmO5oe6RlX/uhAfJg+/PCjvqFhSvDpsxcef/zJb337+9ad7UTu7TZO7620Z0MGFh8bH9IlBwZ7ifVI9f1sITp5bMqEXgWQhm+SSjqMbmFx+Wd+5muc7f/ZP/tdFfMoF5V5z9jYaozRltqv0Nc5iTOUGAm0RBncszQprEYIIe+RI8fRd3z8iNuFjW1ajaDAdgODRvf+b3/7m3/xL/7rNlXjZOSWheqPAiBAjEokRsVNsJaWV8ixom/3UP4ZK3E/LcvbugS56noZASW6tg0nfe5zn33/vWtVOKISUYWV4QmU9tN4GthPLapcDakgSr9am0tq1PWNLTRRa4OvikupvnJBJg2Um9fCMVHW3TzABWRry9ooByrwJcC+p86OyIX4tnt+77vf/9yXvnBrfubCk487+c/peZrDnuwbccfvdBg/NMhKrIlWd+/e147W9e9cu8GvV3NPjI1iYm79RyfGtzfCBqpActgW7l8HtO2vuii0y2RvbnF5anJyaX5e/3T3x92Z22cvnL5198YTTzzGqUnk5W9+BM+7t24/fvGxf/ff/Xf/4Pd/99atG9D8/Je++J3vfAfBTUUIbr0uZ/1u2Rxj9OJtvoEIHmhq+JGeMfXSP1EDhRFLo/sZghSPEc0ASdK9iqpH3lL6CpR4lNdkwiYYAhxcKyuijB9WQhCTJiMlOh+Gg1B+hg7l8bP11GRKEVPfAoHwxwh0OFcgh+ELo6czfpywYjvU6MikabPTt5jz3FowdHRgdXfn1vVrLKwriwvoplMPDh7XpwhNAgjyBIefEMBFuif2w1cKQitTbhVnfjh39uKzz2xpXBvLLQgISDM/t6J1b9y67+C2W3dmof3Nb7588YnHpWFEwWPSEDfmIATr+++/feL41KVLH7304vMOSwgz82drz6n/BgctgjNzUUVXbMN+eldSxPxr0HKBUiEjFcVPYFcdClHG3dpTkqbgDGF5VUdPEYlopoW5ubQ862vZtmT1uYr72elpZ5WK6XN5XLGPCpsYGVTNww18FtawFl2T9ZWfYHwN8hQbQVdD4+FMeOvGbaWTBjlI8yBF234G4UCrZsMczBtvB2hWrKRHfLBwpiroPlD1Cfo+yeunN1JIU2wamaT5VL8K+ySBp8YIyO7BJSW6vEqwqAtRfEUhDi+b3BtQuFopdG+XKqIZ3jU3Ag3S69vlYlfXn7ftLi8trq/Mb64uW6LVc8hkYxhNySqlovQ7oCxYcxqnoRObVkZVR5ewIWegr2dneTUSe0OEhaNB9F2zUeRIxA7CmhikhV3UpaaF0FbtSn0JTbTPXQfqnY5RaqqCqQh9iM6qWUqVSx+qSUq6Qgok8kMpkiRxmYaF5o4xjUpHMUm3lcYMRjOZzvjqJ6GBLD7JqwURJIZ/JT1Q7cUlWuLaoAHSnNhL5+cnHxk+GdmKgZ5wFEupSsMaFuvXUpZ4JRQJ0JQDKiVGGqjWpy6eREh3Z9SnEBjfBvuGDPmSqQvOxGx+SuMRkAx8nzxwUPcaAzh+RhBFAC6SQNCjjS+SBZUmGuhJaIBPpMiua2NpkImXgsCW7l9VcEXLq10k81Ty+lQ7QgUoQcUHerXcoZEBMsojBpIwMazLS7HylkZ6JeIxjq1SiIG1+TjyOELRovH0NGtIm8GZ0IaSt5/Syw5nlWM3cXyKjI5IUGvjpQQoQChZvCqHGEUO1D0AJgAuUWIQVCjMnawnMbQrJsLwkbc+KuWTLVVIdPPObUdzuEvPGWwc68reiVQWnhAOQ+4audrSM2Njyj+FWuSkwT1bHfCG9HkOGU2wqaSffCo9W/HQqA+NvCytFZtKLSY8F26WoAbS88qkpbJsia9fA6/+bEGuAUg1YoJ58dIrvwvIhLCqS6bR8O7d6XfeecsNgE7tm5gcWVud3d7tuHHzsrM+19cW6dZvvPbtY1OnT0yd29xaHh8Zt7TYz/l7aEx3dfunSx6cJo9/DFiIjt80aMf+oKPaGb+Ojg5ilccfe8y2YHZl5lm9gd6jOWCoQQUMH5oei+I9kqpykXaXAFiqnUNNeMT8lb/yb9D9bDDGb+jx2GMXKBLiWbq1NRVcb5KFQUPthMHBD/QWRcBKYgEl4lu2UawrjRhpnFvoyNkrV+bNMZj5tZSu4aovA+6Xv/gF+OtrHMtZPA2+hvLQdn93+v59BSmF75M+lYNwcnfEltuVoxvPz96/e9sJQs5qNzEAUDXZSXPXahnQ2e51Se70oyND5pi06w/ef/f73/9+l7NUdQ36MR4enxh1m8D6hsyDLh+jcrFP86PRSW7fvTUxNt7V23Xq7Imjx2M51gFu3rr8zLOPPf/8v6Iav/d7v/eln/psiR9gkv/GN2ydbvv8Z1989unnrl+7cWp9i9/OpSvXXbKwuLSG7nPzSyb4nMLU3zCgY5cDYbqecpPZhdOkmnqa1AM4PT176dIlXffIMSf3H6EB+zOVdMy+iZpaqT8vJrJpdmZeMm2DLqyPZI3hGd2xLKIgKw8bWi+y6v9aCOsYo/3k6YAb+vqzNhQZp791xlltoLeHqgECq7YmlAzpTSvQNF5GZRahebRrBFlXT//A8PpmnPiwCGaSETQFwSfCYisOTuIhg880p0nCmbPnKQkWGJ2R6nDM6dkZ10tZyrEx0dFJ6DM8OuRoJ8Ot24vdQnfu7FmgOH+p1EHbKo6il4hQ66mTx/3E2VjWcrw7O12SAEmUxN8IhScKTbYEXFTsPi+R8rorwLLX7Mwc5tvv6XCQjLvVP/PS89euXeYrt7i0QH6520F17t2LjkjYWsrjVM6/KtnLjmcdUk1RaW56RvWVqywBaFYSaTTmD82NkahloUD7vn1A7hYgETTcyuoiAwvmQUwGfsl4FPz1v/7X9TrtwsD40UcfgYlX8U/dj2+dQV04onA4NpkzSK8u5hRUtPWk5zTfrcjy5X/mqwIJ2Ja8K5BKQSmrUfDD4B8puvWzBlo/H84UOVvxr/F+1ueTyTi4mMz4agpkUTvG2Z4eK2hz8+02qdsTPHX0iOvDeeET/WQAbx+ts7A4b2MAF/8zuKu32wECDo9K4w4N0Ih0AeyKPXC71TK4YC1ifGlp7ebN29jYfIfAciUfJ5ETJ04yb0ivXZzPe3f6PjdHE1z40CZfeeM1+qK1RJp1NZnom0XTzuiofVo1atTwU4lYEh2mAOIcfgiQKsoLzAZICepP/CPKWKIjeKytOeRAN7GeJ43eB3kPNbbDWUZl4E3GTOf8BSHJAIjl2z/uiyouE0BZTtXXsL2OILKZMkNChVORxPblp+9pWU9CzacRU/9pvn1sJSulP8TPNWuNb4L5F/zbAgKZGm6UW2pnhIztsfC2elui2dvq2u1rbxvuPTgy4hB2zpxmR7Mzi0lIUc7FbTv0Er51OdQJQ+S0kuyElayBWPHB69zL7CUuNPHeitIOfmJKuZAhLv2kZtJ5E8sHI4sNpl2x+ufagZQYSyjFhPZTNxoqK6sCh6jUIpfIgG2SuhUvkIJiX9OoKVSAjDIPMheowkrGGqiJJWg9h+FUAXA4RrLMER5q2Ae9uJWyBa0GDguSmqb1/tTGbX09DFA4tSjHNGG8jXXLWa5Wi/PuxOgkxjbolIpnVBJQRwOZLD7pOIYMkUaxVKFpIhGWwE/AYaLL618yihHwiNStHMyg1wvgfzEZRrPrZtd4JLvifNVNJABHXsX5KVmtnUiJRUopBg4eietbjDHaG0xFi9fRBAzfDkEk+Rk1lFuz5/LBPI1Ji8GoamkqIqNS5DUcg0ZhMIIzZOARFrm+fkJxAhBTTQWRaXUAIgwdEzQykgktBdKNIDCnvdhD6BIBCFciAItMVMraoN4qVcPKEqjvZmQ4WfjQg+ZFykQnDwuVqWULWAISu4/NHMEqBGitCcDDvPZQlpqrFt36AHhl/fq1xgNef9ZA61MwNCUtiR75VDP+C98t9HRkC3p6K23qG9/8gzfeeOXEsckf/ugHFuS2dzlR59QJx1KMjrhftW5bd1I8u/XSxFNjc7PLpfT2mdkFuy7Pjp3cW44VH/HJGRxlCqTtsGbwLQ8OqbXADZpMbJXPEovxVXYJpMX5+KRWxJioxe36wFeGM8Z4A5xhUeuDLyXmqboldsJ1tfsww/oJMrCVOSvNJQBQ6fBUqLexjye8dblr165IXwcLkfasWs3IlSn7XOVX6EVyKZQuROEkrHCjms3NzegfVu6hwfKo57KBEpl2D6+unmSC1qOPHp0cHh03TaLIuVJNNYsJ2JG4/ZY1bDsu9c1VBlDTC0xyuo5PTag2ZVV/2LFPY33l+v21CxcmrRPy6+D8btyXlLf96VOn+5f6V1YWPvzowzt3DP/sPdb+2r7z3W+qzKnTJ9//4L3sWli0zWjv137tz1Ksjx89fv3K9azkHnDGmuMJcurkufn5Rf606V39g04pRi+KPmlsCB0fH3YozdGj4wP9fejCJqgCZu7mQxcefwJdXNdFoWEkst3WOJR26O6lMr7z7vvUXCdjEg1u3rXMfO36bWHCxODhv2xB412zHKskR2R+ySgogTtoN9dX37l5ja6jk2sDNNIMmjxNaAbQ3WF/N9WTvfnrX/86ZVcDWPShLsNHG2t1AU8UicJqZVSKq0/9ijPEkxc4hslBETjG5AxbFF7pNpQSjQxzTLkz87PW/YbHRvR0u/WJ32lX9c4tGVc545Dt5jwAWpqCP0cLDFQOeonhCliYg+8TdZnXmBh1dCSoSDWy6oaxdGpVOHvhPOZm0r74+GOqQJKSiWvbG0+++Iyp+dXLH/+lv/AXZu5P/6f/j//k57/+81NHJq/fuvoLv/ALcKbhLS+t0imPTR199933lueW6ENnz58jqbX+j370I91GKbmwulqniNUyHvuHggVPu5XTCg4U7+l69923Xct3/cY1pX/5K19k9f/gg/dcs2E6wa3ExNKsiMavXk8+87QTYC9d/vidd9754k99GcF/6//zm1bH3nvn3eeee4Hl4IP33l9bWav2jdq9kbdQuHbwiNHW04g6JKzF+PpI/OGY1ieBCvmT0GpxLTB+asEK+XDiGq7xFWwtqL5rfAtzkcI1S03Q+iRAq643KDFab+7xnHNzk9OQu7ezAWA9w5Rtre1x8d9YWeTZ//7775alww4Bdt+LF8/bZGK7v4HT3lwr1ndu3uAKmQK5wG1t2v6OabGKXqZNSBkcpaFx1PrmxirL+ZoLQDjI0Ta2XUpuyCN+3TdgvNzessa6fO/uTZ5aFmmoeC6LwJMEEDiuaqgSu0WBWkfUPUyZ+rUZEx2iJqtE8K5PS1mRssaULFm9MfAwMURYWCGGVlbkYuEjWN3ojVeNurqAuUqR1NTVKLOBoyHVJ+7sRt50Rg/gJgy97jAciAGJ17GURAx5zcMNeub92TlD6EifU5UA8F0Hzrkl1bRWcKv1yNvPwzGHf6a0fFNs3Ak8DRUztv5GuBVIxk+qDwVc0jQDwvVnwUAwgqiKqagfEG5z/SbrxYqdR517W51trtEiPnPArr0cVm+i+pR7dqnnRYxZYQijm2KhIVAgoFqBTzsCMrXMz+ykiNXWY+JKzu91ujFY03SwRUtZFlkY51EKxCpKs7AGe7nru8AKTURoFvySmPK0AvWntxhPZRs/8Yk2FeOQKpFiHOpYNqY2JgD4U+1aGcs8xFRENh0iruKpTT7n1Sw6E6fATGSdnig3fOh3DdRMyfLwU2qWfMGygWzJFTVR0lTdeKeyaf2wYxJ6So3CAx4/8W8/18ot2yZ7t3LCeAjpk7HAW6UIAuBwrAYSECmlQJqyJBAvkLYrAenpRnSIUKygJ72+D0IpP1fECNs9pmi5DHZSgqBcP5VIyAMiLLtHQX7a4GZg9TODVFlizRheFmMrWEBqAISKibcE3tLrzipm6qkUY58DrJWrIMjIxQbgLczPUbHqAVodiOWFJyXB+M7ySzbSiliRzANBsGMQ5oZoWGUkbm+3tq/Qck5o1LtizYvSWcKmVnHEhSFhoQgw1Uiu1LP51J/eNVArVcP4DlkSPmTLr/nCBIVnsuyYJs+vEgFAZsRyNTisZAAn4+snn0ZkeMgT1gqcJvcUbMqXvMBUnfrTl1YgBSdjnsPxNcGnvws26aiRJOogFP41L+sf7Pm7f+8fvvHmK7dvXnnjtTnrM9P3bzz51JlTp859cOk9zjVPP3mCSfT6tbsnzh47cWxidnr9+Knjs/Mr7Ft9A0PdvasOgeQJ3z57P8pM0bVwBZ9EuGmaiqSKlJ+aJTNJKbUpxpMeM/sqJWWDvicsvvKhUUxYi9OiHRp68sSJD95/3+D28aVL1efHnnL8A7JcBg76kp+mrVACWSn1k3Bl5moglhh82gs8MQkdiacOA5QR06hqucBYbKR487XXX/7u9371V39V37h39y71naqjZT/84AMsLY0R2QSEXi3v8eNTx48f4UISH42xCT+LhZSWfvT06ZNvvvOue6sc19k23G9vQp0A6A4fX/qQ8FXbDz98Hxc/+8xXTV0y5s2h5nZmNk530UNhPzTcZkLG39pShZmQNtDBJo5M2ug5tDD4zW9+/Ce/+ic/uvSh3RWumdJ1bt2ad1cvWeHehDdef1Pg7Nnzbubq6b69ufnjjRX9vG1udv7ja7eOHD327PMvOPpFTfCb3a7YG8lY5jUehyeU1TZkhV0VR2wBGRoyY0fo0qX7kNI+EvZNh//Y4Og0TwmuX6cSv1/lFANBmcxka7/2iLDYTZfWtNpAwwvbUw1nfjhsduwOXFYUjRDOOtTlCg/tdVv4jRyE28ECv6Pnn4MnNdc0wApGtgIXB/pwua2EsTzuO001ikV75+j4kTijcIMuGj8OwIXwR1i4VebzFX+ID5Jl0wUiJE1fL/ceXy0b4EhKUv/gAJdqNJHd1NBMjGJNuC86NG1zh1vL0sqqi0lUhhADHFcxTRK/i3MOhYxH08z8jPUcaCDRUHsbmCPDY9hxem4WWNr/17/+dRq2imO4THw/fK+Hyaan56OPPvj+t7//zJNPvfP2m7ubGy+88JnctMCdwiCTjcsHt67fsHTxmc++xCn8j/7oj0xpqIn6iZmkemGtQsxID6IOcE9C+wfuUzt18qRCXQ5g4+9rb75ufU0TWJDSE3h5Xf74Y+b/N15/CyH+rX/rf8uF6bXXXqMSvPyDP1Lu1772NcsFpgFmHW5qY4954623LF6gGz0rSkNThCkaYb09hyNrTOv9Ez7VNBLUpwnnAUyErYK1lbJV4mH4TQAP/q2gWr8P/xRuAZFA2LuVoP6s9KTX4kyn0jMAminpWGxuXFS21t0PsT40vKNP8eG/ddMWq0Xb6U2ejx47+drrr5hIuyLRBj5+/bKev3CWL68FQOaU9z9498L5x6xKScNWMTe3YNQfGR383NRnTp08rf3fe/f91bWlE8dP4gdjMF7i4s8pC4acBl3w7Pac6XszZ0+fWpy99/GlD+wfdWarSIP44vzc1PFjq6tu65tQBXKgdRBQrWCrmmX8KOOIqNJ82lV/I9fZOitBypfGkIYslSbe9aumwQxkdGUBCTyy6CaR18XnOCdv2YhcThTxZsrhLRcGarRwY5yWUamJzqFAaR2wdXDQVN8nMD3EizSAe3TJIFBGI2lqFQpiXnkOI19jMtZ+4gnSDz81o7g/JtCAXL9+6rvCaxUlDQz9RIrIwFQTflF6nO7UfWA3vwNA1/e2slvJ1VLFXkkeZqiThTK2tbNmK0gaQCtkIUAoap//QUwAuFKqUvwkKhkkRIDQ09mPgvS1bakc5G124WY6z56TQ2w0rrb5/e4oS1o2/4ChkTJHgGv+8tTq1EDrXelf2iGtWp5MMyRXUz/h4F0SBIKf5LDmC0Tc9gmdSRrx9V2SPPQzoEoCcGqyVqASpGR56NUCmLyFW2CRyKIaVvSalatlNSpSExeSJz1lvbM/DjAoR9S3H8SoJKNktPSKjDe2lAXr4lUDkJFdEXKJ8QgQyyggmTA6gCysmUz+BSjTctXEeEa8gRXAtGOBLH3NIlK50sNHjFwKghjgAiIrkcUbubx9Kq3QaBRpWjjLXjGBs2Sr5f4BCci4CpAwGR0PeknpoLmBQXY6RRtwQRZQaK2vBAglrxjKgxKpqT5RUEm5sbE4h3A3NzIyY6kgV3XNIkEmL+VaUscFO+nAXDAfnSbMhF0exKjtqogaUIpHuL7Ftz6hLfqA4F0Tt9456s88D14RY7TpsqWtcKZehVtLhyqdy9wl62StrA8FVK2WW2NL4TGOpcpNfmplSEklvhXTCsQU0qjQA7ZvVaSVrBWATsryTlRpxPJiTbYI/Nbbr929fa3LtqK2zZMnzuxszXz4znu7mycvnDrR+8Q5R4Hb9mnv0OycIyWXbBlWX1KBz9QG/0MbWtZWcQu4OFAh6I+GfkLeT/XVFBrLV+ZSFw4gcP3ka2VyBAcBq+CoFm8AgpGiP3R0/OEffvPZZ5/3FRzvz3/+83Qqnyo7YRKREtcESqy6E21NGuWybWEw3IUnIVMT064VAQeanW0KvOMlNnRK87nPfY4zBfMlrICyo1SHotvwGrpw9pxOd+Hxx1AAm9ij6zI1+6c5Ix+dmrJn0gEqJ46fonU6G/PylexmobevZUrc7cye/vLf4sqifW6mu6NDg3Zgv/bj1773R9/jWHXq1LF7t+/dvHOz696d2dGRbgcunTz9FCMf1I9MHaVAnz53lhxQsfXN9bv3757aOs39Q/VYcNbWSeZ2br4G/pMnT1D7yBFTt+989+U/8bkv5ITHeWpB/4cfXuILu77M0dD+nm5HcNo4d8dNsPfnnnz62RUXAvBbKAdBqpJWNF/XAByRIWfYvnr1ilMGMwco2xAR3YSJcwwHHP5znP7Yv5Hsxo1bCO10cxTUdanFi4sIjgo2rS5rxLBhGWlowzyYhyNuOpwqZdqksshHTjEJmNJpP6DKzDwiVZthlHv37zz2xBOIyHrK4YTG2dftctyOW9dvRfzY0kgBz91muVWJr2+5Rs0u6pw+BBr+88Z8cDA/KTsGc3EBvQpL+YpxTC2QwjQZPuMTR0aLtd4ZR+0dK0ZBOJg4Va7FlEQbaKTCRtdGplHFx11NzZIwNIaDhGbCRojD/152I6XtMeYDgCjaZPrpJx63AkA+9vYPWM2YL+tQkmG7oaODk6Ze/QPWJH7t1/7Sf/f3/t4TF8475mV2+j7bvwMTzcHGRyNwVfDZ556H+fWZORe0Xfr4CsPwBx98NDrOb2SFqmTBMs7PWhVlDDM5S3D3yMTg5tyieYhZqRYXePHF54WxHD8r/G1NFh+ePnnKFlRLaN/4xrd++c/9uZ/92p/ip/T//Bv/lWNq/uJf+rW/9tf+2uNPPPVv/+/+9//+v//vv/S5z3PmHhoZOzI5tbK0sjizgNQavT7asRUQrk/zY/5FwMPpD3+S2M/6rvE1O+iyCIf6niLxGslKfE1WY2r4EbCtBJ8MtFLW7Idxa4UFPDpLHrgYLzIB2I7llrjeN19bJ8A2OvlB9rBLLy3Okm8DvRitd2Nz1RUd+NC1Hndv3zkyOXr3zi3TYOdBOdBvYWHJab+LC1a3up3Tyqvy2InjWgcwTNLbx6lxY2Fllui5cuMSNpuc4j43fuzUkXfffZesYGK3NGQuzR3ApmvHRi0szowM92+tdy4uzOjLNvfvbI/utPPQpclFKHOcU5fDdGgMGyWqNmT9Wsgcetefh3OlEcoTujShAU6BFI1INdK/furm+pEhlINZpZhBHIsaTSKRttNVo2mC439kLmuIurKIOOsV7V8/wv/U0dW1DBsy6rxWhpMjk4R4MDfZRyCxcISnxIcrKwyl+i41+PRX8jefwynE1Z+twOGvh8MSKKWQz4DSeCoxQyFuO1m6QQb6tX4bZwwuO/5M2wb7XPHYpqlki6NE0VB9V1Ex6ElwujNENZRY0QzRyvCfkS+G631LBZkcFB+faE6UKnu5yFuafPEtiexKX8IZGJXY8Is7peOXQkttVR4lVkbA6f4emP+bdcq/NWmNSZXLU3+q6UMqSknqu8rUXAQm8VWBlCyplhYsf7WxhNUoH6ua0/in5i9vn2qLtAKHPj4UDJTmU0SJsgozN2qBTxttK5UQVAVaNWrxdgsoYmmPg73coqpde4aivoeEZW6gdrWBpJG35tIKmFn/FWkol14ypRgvvP306LwSa02PjGLq24ALsmT10awC2hcNpVGWZhVTA76u318H3CMNUD4Zp+pYWRGr8OtbDJp4O7wvg3U57SQrAGU1+8TYCRhiGdkVB6YhlbmUf6mAp3TJxpKUMLVeLZRIpWNKo0LBxxYytWZHYp3t7o6XNsJLrAhkad+JEqkiPT2je/sDYizydbuwajt+HSoumQCwzhdBH6i2GqL+xFcknV5VGjdVhAA4mRQz6Oex9BR92VuDhKfSCzFcBE6kJB1YXMR8RGODuTM7TfiTvFcRkK1kaKDjZ/PRa0opKSTAKs6x0pfnoSr4XjEon2r6muyPe0c6PEwEKa0EaPBvfuu7o2MD7707OzEx8PRTFz6+9LZB6sVnnvnpr37p+o2P33n/rYuPnaOEXL92fXj4KI+Xgb6jjrfme7y45B7b3YGh/qvX7hSSo3pap+LjjYh4Q0OkgbYyrLB1kx/Wp7ABhtHClDUDlqbUuFQ+b7koiiS5jHDGP9jpxRdftC5Ey7p/vz9DaDbRusNr5c6dW6CmLgcH4FBXsJy2e/EznzUrUAoFUmIAMRJkgJJMPFBWkwDHcojAsM4RyLEuL730IpTAu37jqoWma+9ezhbmrm7uQI5fDz5d3e4Iszi/srKMqm4zw4aGELdDuQCB/d3E/Ny58+5mpaSbahuqVIPrJovbytqKgX5m556rebptODnYs2xw686tt99644Xnnn3huRdcrjzQ03vh4tmuP/EnLrDd6hIcAD58f2n/YGDq6FPDIwOEMGq6XYjt8NatmVgUo7aunj559Fvf+qHDl2h70/fnKbLqubd3+9jUiQvnn/iDP/jWQP/AhQtPmJQsLlKCd3LS9m62tgzQCDo6zZTmFpZu374zMkigqCZa5f90hNKx8cSdO/d4C+iU1FArztkBU4wWiO4oIVZk6u/mIj+isJrW0rqak03dfcEVjgbWPOhr4kHN1T+1h/lWfKSGBpfm51SNSbKsrYRFrAloWiXSk0wJcIlJgk5v2uoaOZJxdjbn5ADLSO+EdCuJumTER64EyWOSAwLn6dXcMp49wb4qpeLjLQ2UVAQQAIWVsrC0pDpwE8ZYGAgzwVZ1nnvuOQBlVEc/MZAwmBsbc668FZY4lRo/0tGVPeaIY+DEE3PL88pnGDCtXFxedHHxqTMnlYsvyVzQHPyqdPBh4l4TSFb2Vcra9PrQflZ4FX3z+o0rH1x69uln/ui73zMrm59dgKQTEhR0u/2ObenSrJxefu+995xnqr5MJuYSds0ADh/e5xJUUGXMCszs6jYqMMO44vf4Eb5NFmFMsn/jN/6HhcU5m9OfuPiESeXk+MRrP37FBs0Tp06OuSH4+rWvf/3r/+M/+g2zL+b///43/kfXGP/pX/qzd+/fO332zJ17d00j+b6YvYwNjiCLyioLiTwQqDjUQCssgQc1anzrZw14H055OC+YGLbGCBMKJKeAHHIpsEBo5fj0QIXvWytQ09WfFSvvAqqBSa1UjfT206OydRzVNGVooGa1cQmj9LNdra4sDPRrMvs0OicHMuNl++jv6511doF7VY9NLi/Mf/s739rb2n32xeem797hQ3Tnxu0nnnnyjVdeH50c21hZn5ia3NpeHRzqcZXD6tqCTQU6+5Vr7+PSJx5/6tjxCZ33w4/e+fjy+0Zx+3N6x0bu3bv17ttvnj19+vrVj95+47XlxXlGePxrrCObDfpmy6wB0C5EezBktiilwpUOLeIYyfI1rZnu4KmUqYGaMQ1RMiKLePDzcy/LtQrVzhLwNEQx21aZ8/rse9DNM7i7eSVmyO7u7H6G0APgJVxLSbsfUpj0moxBdPq9tr4BTpaD5INOKl65xqeKFVAyimzVxWCoFvVrMCycJlCL9v7jHil98q7Pp4YTWRmwmaz1b0UeMoz4dt62EOBsI5evteOw8PvpqasaKtJrkWnPfCa3qplgMqyk7nX0Nb8inbjydBBfxVoJyRQZFbbC4adbJ0D5HS0nRQtWxIRDHAprcZKMyp/5Fy9Iu1B0s8zY0CsAqUVQC7nA0QEByxIA+Vm5o1WjGmg1VkXDzxofjSmPrdVBw+NH7bwlEA6p+ihUAU9BTVUp+ZrP4SyPKElgqp2ErUCt7Ke+U0pJXAAHGU9Sluw1XOICTUAL1p8tSqqaSMK8t6eTLuMrkho/IaErGNlxuNHHoCOlfuEngW8oAUF8JRThX7skPUbh4ZPyCASZpscOHOpg5J2e4ybs1ey5AscQUGcRIMtVB7WKmwQViHhLbsKHY2pePQhw6etT00hfFrR5C8b7X3HAMtepoOvkxZgpCtfRlq2aNwVBZDiQvSaWXjJt6jFqA2gctPmS2qAKrLDsTT6hHjhsxxDrLhuF6G3C7g/B+QUli/2Zis7NMatxV5Y7FGjbiIsUsLWtazXrW0yNrAHQPCUmSy6yFALXxUPrY9QtQCySh/qBwFya3TJF7AmxISZ76Z9Neh4u7pGwsmqMEkvJeQVqc/qfcDPNI3lbGQVw2+GUPzmLlKWHJk/+TFzitCRIddn8/svffuedN3r7mMB7bt2+yk578uj4zeu3f+ve7/T1d6ru1Us3Jo7SQ8c+unT1q199vG9w2FYLx4LZyrizvzU6Mua4Bg4IcNAiFUlNoH2xbmLC/I3lJtc1kV37+zn5x6faEBX52hwyanFfZcckIIjXLxz1gysMcy+//DJFjlSvxmUMw+/AHFJiU8cKFg/cn842S9m9Ja7ADTqtSSkglUVxuNmLnzoIlBjOeJQA6PAfnQ6/QZiByX5X2SmrNqrpvMeOT/U6vaOYSCyhqAJexeTPPPN07NxL9rVnSU0WaTAVqsd7c31NSMM7I4TfCL6ZOnIEGZ564vGf+dmfPX3y5PWbNwd7uS8NdtkcuL66sr+788Lzzz773NN2TMfl/eNLk1PHFGbiZAI0MtLNVNbpTln25fbuz770mS996Qv0rVdf+zE6Hj1ygs53797M7VvTLqJaXFz+6MPLHJLa23pGR5wCPsdzmEOytRF28tOnGOFHTA/Mh/rdLNChAeIKqixDKdK0d8UkQFN0O5iKEVvmADR15xLSaJnaHfXFAQ9pXHRK6bx15x64lFqKaSWT+dBgkUG20nJ3QUoNo2mJEj2IZ4uLybS6LRFOOBXLtYa7kbacnrmn7TGrSuk1pKVkG1u5Hy6Itbe7ZFwjXbt2Qyva4aAD4/EqN8kOP7WrtQXNABM18tMjI2aVTAy2kFerVybQgEemjq1tbO6uRPmQ4GBmFiZ4BQ6YTARQPsFTPGMC13m3g1HyyE1+R0AhUdfiokLF2Ou508bZ0VpDH2u4jJWDoc1hw1YKk1E4Q/V7L38f07hhDmLcnLCjQn/pl37p+p0rpg2XPvjQ4ZtOTvid3/7tF5993m54HZlh4vaNm/qDgx31EDCvXr7y/Gc+d/vujROnz6jXyZOnLQeh1rXrN0eHR6rgUIVIkfIYwyVDE9WHrXsAYGWViorPzOz8n7fffvP9d9+xNXNqckpXNO28dPnyr/3lf+Mf/MN/CMC/+qv/mvMA1OjmLYjc+qPvv/zVr3zln//+H7gz3DW0wJ17/vytyzfAr0WjiUe4QduHZZl4D7A1UNN415+HP7ViBNLo2rRUB3A/TQC0FLZJlmgsYKbCJZB0rUDJ9OBnjfduBVqJW2iIqWHvwwF1VKjHQUxEj0UsYcOKgcJygD/8YxXA6QFU1PaD3XS14oW7srx48dzZo5NTr7/5mt3/p8/qkE5s7CRYXffqfApt5N6PzbWusdExh4vaoWECYH+2k3+3d2IjrFOCV179I12SP8/k1CiR5G0ZymEOR8cnHOPLxWN+YfrU6WMk/8bq/tHJ8eXOOB7o1LZdDbC114P5m72jUqDSpzZAJUWrMfKzfFbNWndvT6WJ7BpCWIw+G7IUHwY6q+qQMKxB+pHu45MtQFZkTVADs/ixVJip2tb+iAu5M5qnNTF8McalyWpZaX3n56TZC2dl3SBd2yMBgD7oF7XP1iw1Uq6KXgptPsL1qRES1OeRnyLFHH43AeTfGn84cPhrKyyZsqBXTwGCfbPwRu38jLLuwCVkpINH38qes+Yau02yu8hH6mD51L+NJ1blQmc1iI+YUhw4KTTev2mORDarXEkmrzTlk5ThWKLf7IGeIMOBuVK0huj2paBGV2pVJEUkddSK+rQqIlCKCA5KScqHnxpTojNdqU3mp78WfaQhpTVi8FROjFeteqWJm4VW3kwBBUKz4nHfaDSKD5Umshica8ZH3iovJjUq85iEowOmTBwfisYLpBYBnYdqlFRNmmeE2stw2d2ec8+sAKQROzvcI1SrCU+DSB13UkqZpqZTlMfgUhvLUK7uyIilCRaPIvz0IIj03kqRXXppFuaXJPBTvDR12JKsZpRGWSV3LFa+Do8Ni1GE7iaLGEMPg5HRp1anQqu5vDWCNBhMEeB4+wlbj7HPgdsinQjigQS7hvEFZ9Rya9XqO6Nk8cWlaRn45MpxBXfvknTE1/DQKAgseEo0m5UFDb0p/TBVqCoSJnDu7RuCDGXUVzh0dKyprEIt70sm++FHXeojsiDf+ChcqV2aOdp9YbF89cnVWwJp//B4nQTbFm8YLbPWTIwbcH7CP8AoOglKYrjVB1fUXPXnYQiN9E2mqj8RvZX+kcDhvA/CjeLKQTNwbpTWdvPOjbm52Rs3r587M+Ui4Lv37hs9BroH9rv79ncOFubuuWto4ujw1vpeZ0/f5z//Bf2PkRc30us+vvrh5vb+zqIjUbJQg3lwFeYRUIva1hAQUKpGoSHkcuftnNKjdZCispl291Vzi9GU8gpoO2qYUkwLdfyjE0eBYYb/6pe/wsatFPeWeihOcfTY2OQGYj9UNStXsEmztMSzRUYAsRl+ho/upkSMpFDdQaQV9Y8ufYBtra6bYFRdn/+Chw4DpV/8uZ/nhs04hTllcW0t/3b+FmqkRMvncD5ijjQ+oizmFGelOLFTFWi5qIGHWYfzaW93aHiI/Ha2HtWfm7RVB2OgEfD1V3/87pvd9CgaWiebsIsH1Jw271DOSbOE7p7337/E4//+vVnOHrj87p1lm2mXl9bUBzPsbh28+sqblz666vAs+2JND6bvL0COrZFnji3bDIE9k32XL19dWlwbGRnUnYYGR+zX1aJLi0szPTOm5AOTXAO3c7uMbanqOTLMeUBZOXl8oHd0bBAtmIeNA47csnJss8+9u9PZdMhj5sp1p3RqVy3+8cdXaP84VnoqqaY16PgEFGx1dTEm8VvbG3FB7qQ0b2gG2oA20zNMQrgVaTB50V0Ax5Bj+EAjaTn1db+p672IATNN6x2jYxOWtulbGonsdv6KQdJ5GASjiZcYUqkwlt4aDA2iGoVGrpG4tBBz9l9rWs5IFy48dvf+fRL5+s0bGMgnCGA1EBysCQeChoWS8aNiCIKp2uCAxaZJ1eQsm+XFYpLBYVoaB/QNDU6cOLp74LbR/f2bB0dPTZ29eJrMxZ1d/d38Plbt21yPI+bm7o62MYBYcTh+4uTF8xe/+Yff/vGPf7yxu/bsC8/uO8lwZf2f/uY/OXvmjFs5Pnj7fXO2v/yX//Ku+8s2dy7dvaQsiwA26X546Qqb0le+8tXBvt433vtgbX2Fiz9PPjvrMGi8DrP10UDqFs8MBuqFTR1HZcQ4cSzX/f7hH/7h888/i49zKdXO/l/4i3+ht6PnN37jNz64/x4/tNPHTvzDv/8PvvOd7/yZX/qz3/3mt2L1L6dZu0Kku73jRz/44Rc//4WbV66dPnUK37//7gejAyM5bkjr2rhn0GoOq2LKE9GhXWBFtNZw81OVVU2JFcEpQXCupy4Uu2Psgf7HmaWV2U9Tt0wESROhprSVKynKkFDfzVIS3wrXwKFkVdp6ZygSX6WwsMAnH1W2IXUgdzsPwgSHEEBIHcNRxn/9fCTyz2mOZeykl9O/LUHyznWJiUMGrBIMDfbGuXBxaXBtQI/44L03dab7dxe4yL38vR+3dx+sWfmbm7O842hdIs8xyDYdXLxwgZLx8Qfv6krkgG6129tJ+/j4ow+cqXHtytW56XtPP/HEGz/6obWJu5tr9hLhbey/Pr0QjHhn0q/MiqNrVzrX5gj6qUFRjDQGghcV0uQGmXMplUkKhxUDGXFmYC5kQSrTbwKvg0kPg/mdJx6GBzbyI+D+boydMpLHfuoR3nQJgoJ81iksZjouFa3qLgBfnTRZ6BlFlqhCYdRV32LSTr9kIdb1/S4OAOv6aaqG7t29UskFNzEVF79gqPHzszSuIlqPlHojJTpdujzI4d+aoAZaP1u5WoFPfoq26Kk+wwGVEUN/CD5R1UiIYpsrLCt7heAX3LQvQ9W2oY6UsXu5uPpIQK7ub2fENdIaeQNFPV0yl9VnBo7SW5pVi/ac5mnMjWlQ2iPCwDJihucsoGR0ZlTaU0I0Bm9WXXwhITkcPdRUoBBMu6Q2KqIp04XTEUkYH1tKRqFrSa2kMgFIlvLUQECIyeQC9ojb+BNZwGngGG5MhjOHiyZm/qOalVRlf1EASitzEApvQiqEbOpJFc98L6EmcmqSsj/xaJFMGSKLPvmU+QYGZ1ZIJ4BvLb3WKe8UU8rhxaB1cCDmz1DSMWjK7+foUMyNWsdRrZwKwrFF+Va/CkX+NGdVPfdzOAdUSZIaKZnHIOWpVajx8hIF+g7VRLmoLYHIVlgpIitwEPyU3nCsl+EIPOOOEB2awjLY797TzrXpDVIZnvaWlFFPV21gy/5vOskSubm2rr0BMYAuL2ecZdQLi2hu188pYGhguD+2M0RQdP0EYQ1mByM3CaOPeCoR1f/+3btWAnkZMHfcml+CpFYoFaFNZFsd/cERQOrIQ0M1yUxC1Ym19CKsilck1mcVh3qYGiNoCn/wEaOg0qI6kA/1LNtynH++85Iq4zqVg0iykJZe4jgts2zIZmuXd+Nyaj0A75TeZJFfl6ocH3EpEV4so9Qjb4X4SpgkawknX9AqxQeF8rNgC9Umtg20689MPuRv1uhwILGf8pR6Et6VYVNaedr3qQq0jj/5lS+///7r/FOeffp8X2/ntUs3RrpP3r89Mz4x5NrbWf678/fHj07Rz9s7N3b2uf2Mjozuyuj6SLZCvq3zc9M2JrFLrK+udrVh1KPZl3iwO2gzUXFc7O+J/XTfGYUEPom6a3PcOvbzmARiALdaGc6ghYtqZzEFxRK0NGlo0jhB004dO3Lpo4+OTE2uLK3iye9+5zvOY8ST7KocwfscDzU0is96B5xt6ppIzoouT+xg1xSen581qDgxwymab7z5pj0lJK5Z6kcff8i7wVirXJiwX+Mr5WJR1jTc9vWf/zlbKyHAxVpPxIfcc0x7fDInMfkxMTBbUBFf5YW5riqe0giI65twI9FK/9t0muc2GbbLbdsFsty29bixCWbrHZ44rN6GvNWlpa5f+DO/YpplOnL9+s3JqTOvvupus+1Vfia9/Ww9MJgYn9QNtAFd/8KZ3vXVzZGhMcyFAssL68rr6x7Z3nAl0AqaGvk2Vrc7h3qfZzYeSOd55dUfXbt+9dixKdq+w0AW5qedOCkX/otMidxopzPXYbttZW+gf8L9HECxc8vuoA4VQxE3ol2/cddMfXzs6MryLXdMOdV0fROEHYZwvWBkdFwurG6uZvuz88g580CbadnTbkTbZBSxYbJzYTHnhOYE+rv3TaHQ4vbtW6+88ophidKPpjiDbz9u4BI9tdeJdjqbc8cG+wZn7s/ubO7wI12YXWB4cD4GP9aMY3h9v52cs+xAMqSPtltjwgwWfZwxHM2ATc1FwEYUnZ8QE88pY2Bq8vzZU8oKNYos4zykgQkXa0U2UWBGnyToya7oge2djccev2BatbtjJO56+50PPrh0SYLVjfULTz42ND6879S9g44jU0eGTwxzMrRAv7a1fOnGR8889+z9mbm99X02G7KZ2B1uG3cuj90UBPG9OzPdbT0zt2b6h3rnbsyuLKx+9+b3L5563FrCz33tF9574/2f+9lf1Iet5Kja8OBwiDO30NPXa1nqxNmzq2475t5Du+JQZI9P7iYjTJWjnQ0DxoUqDo2mu+zNptFOO91cXFuaXnzi9GNtm/u7izlBZahj8Fu/882Z2Wnzq9yHfNDx2JlzSvm5r/5Mz17bcFfvG1duvPjYUwa27/3eHwb03t6dy9dG+gZ21jNiTR3hO7hE36ODMQgo3fkBWtNmid6ePhwgY1RBC2pEA7Zh33PsI+HceLRi9LCIv6guLjtLBQxLliI1tDFYRFFYstECG6ODMwpMHDFApJ5X0fAibctfOcQwKwJVJHpnNMevBXLkI01KSv/6L7pA0eBL7uABnYKPmkqDkqpQTG8MtPiva3hgqH3vgAOvtiZlTGziFk3XNGp29Fhb4lPBLc2M3775flMVPXRn9UevXbGHfGzy1O7exszsLcJmbXXaoN/VvknqOSaTRWBh+jIB8t6lD9fXXrhz67Zlyg03ojvze3v7uNGUOa2v76N33tFlPnz7bWt0loamGDnuTs9Pz6zqYqvrL3/7W1gif91dlheMaoZw+wd0MeKvs9c9gfYl9Ld39HLWP9htN4rTzkKIvdwOm/pm72iUI/P6HVpDuKudI+T67o7D/K1m2EduDyqb2Pb+5pGJI0ws+juNn+DS9dEZLby1phsBBEDGThNHpnY/+IjEEK0DO4767v035xeX4yzETkCJx4s4lQqIkIzimQmkfTMc4oHQOXMYSitVYHt3r0cJuXGmvUvhff1qR3jhN2gEg644YUdEhKu0N1GRtqx/pZUDM0MYRxujn4sdBi2VbGhfwlprUvQkLlpleBVlWo8PwvUNv/BbsGx4E8e0SLEoV49jnqj/u3vd/eZQJgO71bCKpTLmEVBd3dHPt3K/r/tRIaPXmk91deyiHjnKO2J1xVonrT2zoRgQQlkJcWfmPeqSHsEXdtmoaUNUviAD9TNuQ9uZI+1ub/RZAbKPd7etp6N/dWuNQ4Ujh/Qi0jzzvOLZ04GSZBkJH9pmCLDRiAGKedo2wWwPZj92r5DP/hAlLZRASGsOo/MmrojU8j1kCtVrBzXBJD00JvUXgXM9eaLa9tY2Vtlp1rf16wGyN7OVAgdmKachHlLNuCipfjp3WoQjVBqrmAOgLEa8f8y7ShNHTYyyVj6Ul1yBXRgrzSqZeM0kAHGM46k/xUeW7hJobiMJGTNUsbNEGNFsVqymDvYNs7+cPXmMoSzObabDWfOKDcQCoN6GHE6XiPTLTDhauzKUZVj0jsLZFiWJ+Qlp+PnzNylTRmruwUBf9CrjKZZOmgJEU21sbxCD0EAQADV9kC7O+oZvn8R4e3zlw8ljM3xirNxvG+gbYN20WVHn7xrq0uuMznDhNuzAcedzOv6BY5GMKru6to467oIyAQATAkZXSNOgc/6W0XNrd7933/HH/Cjg4ztUkVHRZCWUwPH4xFOou63r5NETkqTQstKut1KJpDdeKEJ16GfSqzLzmoB4jLK5e2Cbn+MEtRf/iuXFG44dnF1eZZynZug92EuJ6EkTHLSHOAtNFgmjuGsq7JDxJYdnddNbNrlHs86AlbmskQkHZYgIo+GBiApavqB1iTRQk8HDbxk3ygZuTKYXeKcwGZNZ/5e+SNPE+y+s5cHy4c38bMSIBA4RyvdwZI1JIEcq6WsZMVHG41Owab5rlsPvXJdQJgCJhHBg5xkfHfszv/inf/D9b1y/8iFr49XLH+w5D6qDobZ76tiEUyU4flNvOoZ6oiB0jex19I2OHbk3veS8eOcEzNy77wz142Ojq3Mzw1aQc/iPc1DaVpcWnXjBzYUQ4L/dN9S3s731G//Df7+9tdbfw27RxuuB9qwuNGbjyskTx7bGJx674NCRbHMHB5eSFZr7xLFs+y4rYNtHJ458dPnSU48/5qYY22ed0+gaWly5yVsDl2TfV25CMZzYQ6JJjb9kvRmmPsp2i1jO2rR39PGLrsY5f/P6ddoj6edUPesSxm9yWMc4MjnJwM/4CxnuLRTjv/v3/57mY4xm5YzNf3SUM4/VCRcsri3HuMo/irp/+aPLBlz1wuG6hp6yvLAMeceoOg1LXWg1vf32zVBPbZ/YGxmbwHj/+Ld/52d/9utf+tIXf/t3fmeVXG1r+5k/9XNd//R3fvdXfuVXZueWnnzqud/6rX/Gl3V84jgnHKfFOD1vd2d1Z3N/xanW3eneQDu4M8c0R5JljI5jGgOQEx67YwyoZmzXxvO9YRdkX3/hxedeffXV73znO6ZW+5u7ZNb9e3fMZvTYnm4+OXFxseN7azt+PnTxjc1lp/oLaxVDoBpCnQV96tgJO4BHRsbSHbv7zOF8cqC4r4QbIUg+kja6bo6WMzb0MLYZe9zPNW9PpO6tt6eX7Fq54/dPJnSzFyIiciv3zp3bkLEJteiIZg79FoAuXuxZXdkQjr7S1ukij6MTPbsjmWYBmJWh4kig1uoOMWPe8MiQWSBCeaTxqCDpQ+nRcxYXuf0v6UgsploXHCIDytygdnfcjB1/SpuMnTK11DypStHWT6TRwKnOKhWnz7BkZcPxO/xnLMwm5iCHyHKunl1anDw+cfPeTeezabHV5Szpzi/Ovf3e2xcuPv7m228ROl/96tcc5cnBBv6nT5wd7h9q2zmw1sAkPzI68Nqrrzz//PN3l1Z3DzrOnDrzm//oN7X1zZu3SFzioE5OYK5SkHjh+edJRtMw9aKQxYuiaP1FfWK+yxPbI13D9ek2R27vtHVluVkcG0in64dYJbcOJkYm8CGvOJS5d+fWf/O3/pu/+L/8i36++sor8GewYZxGTHvH33nzLTRB1SqJwEe0hL3LEdH4gR3Mldp2iVggImclVjzjjQcZWXYz6hOMWKSh/cv9kOzziTitQrQGyUmd02Y0w0DDemM6UYyjMDR7LIIuLyqkt8Sy0KEVEmg6SkHVO4kefnwVYRQIS2QsiJyNjbv5ZOSI4k9WZK+bB7/1OElzs3i8sk5mGuEa1khnlYsVKcNMjxMdNUhhmN0uhwPayzbUT0ofPzVFdWY0d6Dt8tL8sL2/S/Pv3L1lm8lqW9uQK5vaD0YnRqYmxteWFunNZqirK2uGmvGR0R5UpJVxCbt63ZqMQ8cunj1zbGLcSp39SRnh9najRDpOaydWZPNXeqQWIrkPuO7x0smkiZaTGVYhSOoZjVojheghPYWsuD+IQUxjo9VV9aOOGCQzMTDUhFChtj/h1l++Jr6MhtIkgB4a3F4vrNd94Jw1HZ/tDW9Y0MOeIKEwAmkvGeTIrtXyaB2NgWNRWQRKZxyFYIJpuaQO1nkXRdSaJFUV1dKUkmiCEjBtyCAtDELrqSyBAuI94HoK/yTwP/OJjbtMAxojfakLtgi6KNEo/jDwWiIkpEk4nAu1iHnSBt47nboSI6hWC0unwpo6/Q+Y1Ca6uOwdXbpapwlCdl80eTh6NlRSttZJI4aYWRJJgYVvC50wRZqrMzRLE3rFkqwT0Sf8zilEibYOUPArKYLmAzwKDqVpglTjEelp0DgAdBNcnEooP2Ih/k5MKxhFYfbSOPghR76Xxg2QMsWGXSmIWAvantpq5WRHe9WMtyF40quXQOCrUGn01DTgInkSn38FvA7LBDFlqoCDA9XXFCGhZPhqY3013ghbG1nbzvL2umGr+LlTnbNqDC3JtvXutn3emzkpfXenfUtdO5ghjVakh8O4g3saKBNvotUGfW8HLxgdMyQ1jeihWqYfWdEyardkbzJaAzctK4q+EVBMhGtxLgIKBIOpn56akZWKCc+RxCvrOSQDNUbbXC6kS1LCMiHxSGwsO4i6sdG+1T46Np6uRIqulk0Gm9bxFuEDGW+5FAo4NUhG54aPuebJRv6yIgGHDBMlcXWNSJWzICBredr3mXIB8ViaHx9tcBGYFgzZQXjFFV5Nk5cDP9YHxiYAB5a7kQBQxgI1YEfATE24D/4NqEZ/bjSxX8qvhQYZU2HiWE+NBEpGWbxcf5hv5IRlwzaDS7qO6YoEFV5hisyNpQ5LlTIxSyCUcN7pcQ/erWD5/tAL9ervRwJFAIThW/EB0pRUD4Fo/qioNBAqkXo6b+G7txmCj3d39d25Pf3C8597/fUfTk4es6JIEtT1K1NFBhBqxubWbt/IQKc5YK9DzLMakzmhbr+zvbQyS8Ua6B9k11+aW3DbIAFkkfno6FjmKYx6vZ2OsxvocejJhCmGURLDw4JewRJBV6HcYhjailqQ+MSMXqbtjOy+mv0uLy4c0FZlGB9dWeVavM2NntIZzXB8/MTJ42Dy7TFSM3BQx3UiADFbFK35+TWmWZMzA1UOmVyQy0TADlU6sBO3bUTR6BLQ1jAthqsW56985SsVT0AkoJtZaHLgzUpuD7AF+Y5pgN0CFOOXXnrJtkn2xwoHzjJiSNyoJxIkLvZRX6ZtywKA86/xSXa1Nf3GQF/40pckoJa/9c67Dska+G//2/+3hbljx07If/Pmvf7BRWECQjbMVubwuZASZmixt7VHOqCPDq9dFGxdRU1A9PZT/MjkGP52k8J3v/vdn/naV2GseAiBYNxFC0qk/l/7AFoAri38RNPjxy4QZ6+9+aZhRxNQzd3T7Ouxk0Njk0ccbyj7/OKiw/FdUeToUhsKmfQkgMBAX//RI5MMVVXcxC8mjxTZPIQ/VGeof9hGhYo8mQclcwnpzUkAocUiq5k59KpEe/6500BIVlb5s0uB6owyNTEcVFnRYjwUFjTsKOuMEqiaB0AJLNzAASiTIrMODWkCoMrT9++iauUedJB+bX1J6U4y08Y1nrVAueBQ6M+wiPd2LW4sl4Oekx6HhTl3Dc64kBw0AFHzdixB8Li4c+M6PuBywzTy+huvOtSJAnnz2nV+/EhhwJifne2YaD86dgQ+NDW1MPs0tfFTrU1M8ZCABThow79OAHQA5QpDANOjm0dF1BqetUHV2ldhJPIIm/IDJY28YgzANhBDT8pf/qVf/rt/9+87D/Tv/J2/477Yr/3c1xwtitMo0KHPhkPYdKg95145d6LeP68gT9GSI5Ki4JXNEnVTMqJgSLMdadRFR1W0BzrSFtyCHslbxmb8QwJGahX5TNHnRsIRIaoOVOm/3sJGI4oMOgT/chpGiuYaUdgA2BYmRX08YIYompSiGk8li2Q1UGNrWMPR8Yt+EwylKU8GOV3DOyN285EAbelExvssYpRhraQREmOMkSm5oIp/jIlmvE7ONoizJdjgzq6PwtP3srPlwpnTq2vLDC3mvbPTuQNk+t702Piks3rv351WJhPcsiv2NjctSlJBTp86gTEoce6F5c2jw1BKSHnejQp1sK+xK3L7oH+/2zAZTCGMYtCirDA2F+2ZGXbHHZj+ymiXysCettfBM7RMnNIoGd72Y5lnYm8q5aWmaXFgPcjo7Wd9StyDV4nMWBjiFZXUN0xoyiGj6utxGjddOHMJ/fgQqMbI+ADa4VCpWNpQQCne6uidcgqfp8rFHimNGFqknyKDSTGXivTTW3wAlYrU9+GC/n8Jl6lTyZASC/4CCdfFh2ZBrVJaAZkaKUWVR10oZbtb9pVy1tE0fSa75F3CJXElfDN56qg62BgH1npVgK33I0X4WZ8WBAD9p9wEQljtUea3KakhVGtiaWhirXANNOE1iFng5EszvtA5rRxQsKq5Ir6jCgSatz4S2WsvTTk1iGhJetSToHQ7OqaEoEIvwIuaRzMz5Qv3NJ7Aj1yRuf5T3klfH0VF9fdXJVJJ/1CaINNIm5mD05DiJkIcYStdYW/XxOyAERQ37/TlcAg0NwaxKFm4wYNS5WyLciVl5ibplX2EGO95/dQCKSbMUdRFaxEmxtcMKCuregdQDTxZcMfH+W55TI2scRGAPvlJFGcdhTFWHcuDjCS2vOL7yx155IAvOX9gs1+vRx8ju/QUF4MsahDUihPjkbKyjXigFhcWiC9OFJnwMOEVASIZzKXUgYTZrtoHUhFYRQ4z6ne1D3b3D/NALtM6AKGa+hbvUOFI71LQ4vICCBLIK0GoUR5DhkjKBtzgj6SGPwloMoSR5UgpxUMbnnKkhZsUKGTIS0yj8YTK1wYXJNyIwQthhyZHlPjmNwslMVThrhIDz2ayAi8vSHpXjvKuhbZikuLhp84IHo7LrxaE+qn+FEYo4frUTz/5HfWjVqaBapnltrX/6r/y5//rv/VfmmqvLNsreOSDj64xym1s7ttAZvWX1R8ttQADkCNj0DZ6VBHOECgrqa6Rwe20neicCI74uNq4Zv3RsTmyVGzxnvtZuGhjLROAnPK0kzsZ1zeYv+C0b7mMykGLRCtyyrv2msqNVBqqAvVM6XCg59BjsQGwOEQaD2gghM9jPBooAqBRWxxiqRzzSE9rp0oBQkECE+fAltOQr/gffGvmmMpPuQDHaZW2EtP9YOVhRrdVQHHGZZuPeQrJJS93DCqllLJAEhooANrxYydgSH+TN1aVzg6g2E+/8a1vulkLTRyxaLEC36ZzORjGrMLRjYxh//wP/hDdjh074sDOGzduWt8HWjoSx2S0yMnQi8ePKtXeAoTZyczMHKlx/vwF1RCjPLMXfjgeGPO11U72UMPSKKuSskOxGnS1JbzVRwCWt27dZIHACtVb0Sxtdn6B19TQ8KhJN5Xu/t37POa5N7E94AA7BOzUZbIoXbFjiF/L0JDBlHy0GKE7QxshLJuSX1NTORf/zs277i6h9EPMOFYJpw2grbK4AWI0bDWCrWRuFzajUTV4SowCPAJR5vq1m8gtMZGoUjhSFaz6aSrNrMpFjOQlXnpo1BaSSzNAGOkUMTyUQ4EkUAQEJKajA3LdVPHWLVt8439VPB1VwUUP1GLAXeLgNvKRsXiAKcLikJt5B0ZzvWtXv+MObvYM5m7gsfFhvdH8B5eNjI+/88GHL335c5YtXMWlM5g62ltCq6aAMda56BAm6xsrX/zy519++WWVrcsseA7vQkmjw1AtUKkGhO36hYOKwFykWgh4tKmv3qqmw3iXJ+uwIqVEJc4aSIcLVeFv/+2/Ldkbb7xh4ZX/CXJBQLtwzADHrEnLQg/1ZME/tQig5KpPLQD8rKzmqOaM5SZCBGhhD15YnLWi/RnZjBAUTaU4XqJ2YIlBqG8BYArAiAwZm1Z5E4BNJhmPr2oBcpIZirrSX0qwnUFCAuMvVuR6C0ILbCsAqMStQh8EyPgYOBtDL1KDXQnu3VIUpA9r7e/0d/XFch7Fjn7gyEXDq2QRasGhDKvM/+SRWYDbWFDVYbaqnyyZ1efgPyuYBIoJqrIUYWGN05k7X+06euzxJzEb4qspwYUN+Oa5HezyR5eIJDsHSIelhcW3Xn2dz8/lq9fUeGdva2djnSMLD0hXPTJRWeoNJ6REm5JjI8zPdl71KOcgSG6y8aYNkYv5j0JiTNAGVpYKUWO4zrQm412DoxIqYbWo1KvED8HKU8mrngXCg1caz4St5JJQmFBWd13caWBrG2vITHL61MrTgt+KaQVSVPmRQHnqJ0GQYehdw0oU0NkEart4++qpFWnBrMUVYA9waH39iQG0LAbyoo4kpUGgyTaVeRLXfGAS2tXuWWYmLeDNJK2eGxuHMbjdFui6lNKkD/ixmZeCKs6pTpPs+YrVygN4K1ALqqW0CoVOQTJvKSFaP8VEH+3XExj+Fwry5gaNGuRnSdDMUkasRyJLxuQFQu8vJSSILdXOk08lo3D6VyzuOf6hVkF2AOsWCoKu/GyUK1wrLWN6YCFOBWWa4OvhCYCfzQc0lY0o8NRcQe1BONjWmJLCdfEs/qssg8whtoRZYYu4czx0f45r4mNAvXGML6ajnPJKortYQQnasW5E8FotZlLXowvndcO25yCqs08eDsr6OIGgPuOW9IeHSUuyg41KjGTehlu2hcy9crhfD7gmGsxsdiJxNeQYw0xh3Y9c4obk7avxGqaMmksr2UzoqUMqMU5ZibgpO49RoI6DCB5KM4etrQb54kBbxDiZZizu4Buc1Q9ngVts7KSoDerFsf1trEXOh6LmQnDPvM04YLQ1o+nm+8M65lpaW0/UvM11mcNpstI3FVq6YzR7Yx+UjGvGGjIThsgCbsZibcJJvTSxjDU7aZYGevhpNmjYufIlWolMi+ZRsAtJ0rOYP8IIvtZ5UHhcwjzSFpYUgxUqmFpMwiVB/VkgN7tMI+oT/yj1E3GJUJEa30pQAyS0QA1LUDAKcq2Ymqv1TkVTE9QtQ3OSqlUH19xf+XN/4e//3b/T3sl7dGhnZ+X/9Nf/b3/zv/ovwh7W3IxHjPD2dyFAd++IdSJnveynixm5tB0GKUpyz/BY39LyPE1Ao2gaaFv/0jpoiJd4a2q13rEBcwR6xSIvR54bZbCm4CkGd1Vmo7nVttPplSIeNKMAzqwNShWh+mN4yo/OQpuieFSdTUYxdOZjJ04E2l52gQOi+6T0ctOFURU+eh+mwkt+/vRP/7Q37x5lSSwjxJRVKyiXSgHrgYNPMirx5u3bNZ4pXOk/+tGP3n77bXoR7Rq2dDPppTQZYGG3Q+D0qTNyVXyI5KrHKqtm8cl0wmyDQmWiovSuK1eumVK88/b73jIy8lu/tW2X4uKzZ3Njq92ul/LgRnTX9uAiKG5AC6hbEDCRgIpw8uweZG5RLMT2UohQHgAmH2pOkRUDIYQQqESHMUIvLOT6bg0xPjpq0q1JV2fo4AuWIRwcOXXiuFO5uJoePzlBktkj1jvQ74gokNn+6eUQgxWlhtghsOxxzL0SDs+J230Xq+fmmo3hHXqdPcEQQ2h5nfCqndSlKAFx1ocbnUkbSKB0YDUSWQBhUsaDV2whUGu57ty+5wxl9dL2nGBo1VH5i8+ct3hFSIZuIJsLknc1Rt1l4TYDbCVCEXA5e0FbnNrbw6OaHA40H6A02IUL5z43/Nn4Q65t0Fw3XPxgZ0dZSAKKBuNv3SEn60vd210ra8u37+TSNdu9M31q7zgxdYzG9vGlK1/5yk9vZ/fEXl9P/5HxIyeOHt/eIOR3qdcLbm+6fW9idGL2/iwbsIu9Ln1wyRIsV8uN1SzasDfznaKnwV8kjtHFHC/ZEVpGasNEDCGs1nq3NWk/0UFiOORr9k/20Ei1GiAM9mbyTFayIzW1cvpuuym4aYAtB5VWKCMlJhHQEGgCuAdYj0I9Nby3ndV8M2zbTojz2YXMLiwUWtrjWm1DUEwUcbOJpAITsxJrypXdu/X4UIsI6GxjsFsALqwUud8AAh4jjbJKAnOMbGsBRC4CTZsa/EKtqDExvD3ygC+mZmkVKsZwEP2kUbMH8p2cUbzi8nSUUYLEtD/BcBjfFWI2A1OFWSynUbKROjBTyzzYeMzOmbkVN+CaJLPjEQ36GhXVrc9YVUvZbS+Ajc+eH5LXcU0WYh3DAa+Tp47fb7tPOWbLu3b1ysL83P179zA2/r596xaUdXynhynNWVXIbk3ASGkxIFtv2py7nLUIs02fVDnEQS7IZ9JC9eeiuXXAyIfc2xsyZSeACUDxMIx2RdqoU3F4rc2tgrW+9aewp7ZaDdd35ZNojGVkymhcTsfSkW0dAARTaS4ooUZjfCz0rxnr+zDAw2FfpW2lzM/yqKPKthCAIbL4Uky9DyFZWz+fyuNnC34rshXzLwxEq1FGXScp00jchLYFqQdFKIULjf6W2Wb5q+XWZN4Vq6Iqo1AYz2GgLEGUSeOKvqqYinJB0kuhDx51AKFR5UNIN8E2TJX1Z/0ujEoUgQAsoKNYRvtp9JSKDLytd+nu/sDHHmF7f61AAZffNb6+mzjInfpWyvgUNCOpMIAxoj5+preQ4QgWu3+tnLRCSBOBnilpCtAtUrhoE0m4uxW2KD/JJKDYWkaD9E00mv9COmWUVOJQteQTavB2TdgQbn4Yre7dyeI+mUbLXunuZP7fGhqwq8tXwiDms+x5yy4Jdn2RPb3VQBaLvpaDqTLcmlJYpcpAtSkm8B7+VTn8NHTo6R6fmHTaJoU+PcaBV2Q0AV7UZxSk4ptInDt3gbmFf6C3KQFFnpZPCFOm6OZUaOJMraKSl6UkYhOpIUAWobAWRMWqe4mEoa/eOEECnchePuO14dhbyfG01CBZ9MReJMyGdW8+nxYWrVHZuEfHL/I29HPwmXchKIHmojrnhBoikcdYpdWivXgqib3ToMU2gduZLH2CjFGYiKPDIQlni46+AYeRuNgU5sYjVVASiOVMjk9p5FJ64kugwfYwKT9TMvbAJ8Rh/i1PUuNyXHroqbKyRuDA1peKc/0p3Aq0wq2UNZDJx6c9h9O3wgKVext5a4f/tOyNuBihCs+rXySM7utIIzCMmCOG0H/n3/73fuqLX3n3vTf+V7/2Fxxh+X/+v/zH/8V/9p/sHdjERZsjfjdlYfejh2CJju0Oh8UP5ZJmNO6gEHJ6dYro/IJOFrunRoegJqisEl6y/3B/n55tcgyltE7qGy8JwIkxs+XA6uSpkS2/hVXS9yldBoE6daQ8+IkH2Ih9kl8MNtBkhgyfBCJ5tGln5+TkEb3DTzzgqxFEoZCn5v1r/9qfp81Sz5588ilKC8Ro7b7SUen0IEMg/aysL6mIGJonZpNdpPQQOHZ0ykoCII6rmOzr7xvI3rAVFt+1jLCqsreymurv7h0/eQoEe1MN+sdPZRVCKSYGzq2hUz1bLiVwir2LVkEQX1YCt7mv9T37zHOW3m2rX11Zf/zxJz5ytM76en+7iVrjFj3rJBaA1a1WD2YeBFJe6c/xojt79pw6e3yyPIci+gydfml5wVRJraQxAaDYIZOeQ4KpQO0G3uD4RKWWjOOUm6za4qzSWGeUEuHgip8EGCgpkgRI9tnEwcuEbECr+xRNx87X3l6WjLGxXAcYTipHH8Ct6NM58QPm6c/9/ZrEPEF94SMXowLS19YyQ/DVoaiqg5TSyL61NWvaLjvSY1PCFE2UMj42KdC2sqyjgwyUSnlUR0owBWpMLRdW5kvi+TZEmrOylnkbIEpHnyeeftr6kTAeorjKhYZ4ziRPLlu0cXtZWYqCWxg3whQNr9y8DO2ZxWnwXfP8r/+rf/61V350++6Mu0ueeeHF8Ymp0ZEjb7/5zpnTF4aPjFqDpalrSTdGmfWxdCMjo74KIqYSVc3x/EoUhowqiFEXeGLZWsEiJSLgNL1ckJRdpIoLw0qkT/DcbN8e6B8XXyEAq161LBeDq7UVCWyD2motHhNrYj8VJ4v2klc8jpcXTIUqyCNQns7tvTW7yAjUwgx7PHBM9iQOBKdaxv0nLpu8RYkGI1Q2LZWnwvEG1lslKvK83rgfGYH8hDjpnKNkiigsyVJxmr5qVgh+anPYFgdjs00EKUKoKZ1bxQlUCDVjDUcjLpVqJVOUTyI/+RgHKUnVA8iUpkweInYhWbIEVBSYqBj8dHL+vWv1zDmp19ZVKQmWjFAQhSUkRhyhYG55fOpYZU5twcnNooe2g4+1OFnSOguLF89fuHb5ihmd1QC5eP7McRmaGJ+NryGdM+RCduVafyt+UEEpjRIe4ZibLaQGPrLUJlK2S9Ka4Z93Q9hozz5UJ8GXgS5bA0MRQxd1yYBeDocJ/FSuaJlyVHKlvs2nxrRIFxqkHRo0lyqc6bbJRnOnfH/d6bglXYOGAVdB/eT3I8mArZCTv5Tlp0DRgng4KbzxoAbyllQpCMKen1zWT/iKTr4eQlkwM0Rc2aBRPofD4SNYSmsWF53DX37qHBJAMcnSABmFJaaEFVQL8Q+ZrivKFXMJfG4VAVoAPvwkTTOyfK8JaqzsgV/jvYVr7uDVDEMsuJXHV/8+8m4VWNPkTT0xGy9clF9+Z+bpYajId/UDM5KqrGpaGHV7djBJj49uQ/5UZDjhN8OAkCHmRkRDdI6KYPNroJeyAr8+Adh4fPO1JCiRrU+1FKlqdoHyKR53VH+DBQOGVTJeCK5go5m7tLndgQADgzbSWYGMcsyTeneX7kJiZzwqt6JqUEvWlHW6ND2amKLWZ69NeTQuQ0PfYPbapdHbOnnt46gePbwr119iYZMK/mBkjhibfG7fvQuygHV4/bPDlglLINmyml3mxiT8qM2sCXTZSJ4Vhlj0IVbprHZwM7h4at1hSFZX+msIZ4WLgR1UMWB1SCGHOSSKJ7wdbgdCHRRss9SfU6lYmzg4ZXDxaAvqQuAoNbNHbURTzMBkxKnDkCIUJ0ZAeuOgQZkA9BiMPCjpusmZ2VmrGUABazyKiGuog6Gh8COPuEiu8ug5EXmRx8UX0birBcJcSJu+lO9hiDjxFjt64Y5yNXlCAVNA1c5WYZKJNdCMbDFMjX/k/ZO/Hk7cSqlG4uu7laD1tRWTNDpSkS3qlO1oeAD/4qOQtIt//srm+s/+7J85e+bi6hoimpL1o7j5aX9fdpxjiy17EXs6bSojsVCYAjAxscFTwBFREEB2SrsARhJeL8f1Wv7SXq1HfHhpbyd2J7sUd6Mla6YqY/GVvMKnTp7xxmnSaweRmt5X6wy0C1zCcR0ClQ+hIRkFEjNQynUoRQSHg4NLlz7G27LAqlrAxfvKd5oapmiMBI5IYXmZwiv+lcHwKkqKqcpVLUJZKEbbBIQ7Lp8ICMAEhkDhQ+gxjwpQrSFjRqELqKOMVGhl6cJSAiKvCa+yJGaU1x/5crN315Tydrn3+NVXX6ePAsHfSA1v35t/8rFzM3OzNrUjB0BOtkH5rFKVaYrMMADdTzgJqsCdO3cVzLoPFG0J9ugLJ1Mu0wB+wwzYNgDY9YxYAmouDWWCURxpgPKEURhSevtOnBylCduZUFcSVMDSGwmrONk3tjL/hoOOTwgir3MNPTz8WAjEK3rEEuHmFnUZZXUzFLRKWAsF4eTJx/ReNL11K+RAQZMkMAVkL55K65N34gukcfrsFR63wZpPUYQRRR2qyAVbo2IRN11cIdeXMyejOPuqRuLrW0o0AVl2YY+ANNAAwXENAhhRpCqIsaoJh9dff71yrYxi5Mqn7e1z584YhyTQWeCP8pD0iShkkdFMVrEcE+v8DMfoHD0y/u1vfpMkdq20C8q+9+3vnbvwxEuf/XzHQc+9uzMdU1066sz03JFRG2bstXBH3crE0RGU1yg4BgLoL4AvNW5KKS2ldOHaXtofVsgCE/EeaWRUfQnEewvXGGvCti5I4EErHY8gBlkCAw+Bi311BzMrrQMZj7uEqaSKQx/pjR9AUV5zKUJDFYBJFTEhuEhCdmNzY2bm/jwHlU5iOgMMTHq3Onf7DUIdjlJ1qIUBTiTBBHgTVCiPheBs84BgxWrHMFsXBDrat9a3aKZwkBc3euDvMQeXSxbQ6BQBUx4oIVsll4gaqCWWdyWj+IwOCIYUJU00nmayVEr1/aw2yArZ2wQggpFiGZ//bM6so0QpsZRbsJAdGugVnLe3zF+cLYCYmzx39/YtCvlaGNYUa7C3x/aTiBhEVn1rBfN26HfF8sGBL4Pw3r6jytxMPjN9TxmW2sLJ+3u3r8dPbHVTr+/iB2CHMr0fe2e4VGRO8q5qXNQuMweqPJyhbJVgPw5XbPvbNiTGI8iWgAwdrH0ZCMsAiunVOOwEN0+ooaWbT/3pXRggv0ogiQXCjYmLqC2VbVS4vTv0VzUcYuEx+l8G4pRdnwpN6tIaAfHIk/JL6lqQd0kcCVDzttL76YkFvVShwk/2omfXZCIF6icB6ROfeZBA8+9RVEqaMsqWxBVCYelSYtUZ1KpCy+QMAlloypPKJsKQ0yBpLbdiVTlc3w5nRewEN/+n9Zp4Auin9FFcirKSggqdH6QpZR1+NZApdalhiQFpDgUarkGH2PvD4rWaUuWpoFJofXBJYX6/Ggn8kxx+NmISUSuSKHWKgErivMMneoenksJbWkorJaEF00CXcJE2RfBHfdbQUJWRkXo3Y7StTWYEtnVmniF9fQgiRcVPLxWp7xReeLvBKrWORSGsPUVWeDXaxVeiId79LJ8dbYNudHevrbHW7HE/Nk5MLo30RpNtbrJr6/5xhqWJNeM5PHV5RjuaeldPVlAjOiyNF1kNE1WQd3R80r5YIpN9vJxB5xqccqpab39cNYiczo69bluVuBhlUiEXBSjb/Ts7lMkkb1IthtJmHNtwmCwMmQ8hUE7MdFBbal1aE86F4GkFGnYL+WoL8ynJ9vtMOlXNCBhRl9bSH6wUZsS0v0+ajLT20LIwU+OcJlbGBeO+4QOQOntlwQ0p/Wa5N0txOlfhnY8+/jhkKQu5PqG4cEWMzuAkOH8mMfw87k3P3p2ZHRwdU1P9RzIISAl5gFFS4JNPmCWT1jwJlSc/sggQxvMAkH8KU6RrJln+YkZhIkmW8JKncEsC5SlfmjCbkc1vhcKPROZnzfQpHxJVkCndpGKTuIp5Qp6aoL5rzKe9VQG6qoCN/UnS4SiO7q6BoYmRDy9dP3b0OFa1MvzOu6+ZiI4P9U2MDMPL3Sy7i6uUEmO027m69rudHeQAemO0fkDIYFkrQ1W0aiwqBNCaQEMIVwp6k+dWAMITZV1LQomriqWX+KrtZuemwSFbdFj3M2lBDEPT0NuwDRuozkUnBFl6eWnSdHeaCeaUBVFoX2zmIplj6bFyYVEWWIouNfhzn/scy30w2d6mx3PgocQKU6VgKCUcgMJjQEEeZF/FqJGvkAHfqMQZRAwE6JA0MWmApaXLRTfTawDnKw5bRUAMqdVF1RRtSIO/7GImp9Lv4CDNxccfo/rTjd98882ub33rWw50v3dvGh3nZu94nzt9XH1ArOhSQCMRio8shMr2/Kg+UvqpVHd+ScxETrk3L1GxsdEJGlJ9eObUxO++++4Xv/hFkwFlwzhbCYuTPeTAgWht0eMnTtEi2LahG1Blt5AAqkngTN5id0+zSRBGKZ67sutOlh2RCUDN4bIEkZQ5NCWKFYp/1EhFwJFMdnRUC4/WBVARwuATKJoTHJg4p8xosbMdKaya2mZ4OGGJ4a8fgyzgIlsN5mzWjs44U2pRpYCp5QqeXRpSfMEz7V2Lk4ZDp0h8IxlUlUgHUcpnP/tZvEIRF7+4lOswoCRX5gNluimNcRgEjQ2BDudn7+0g7MDoALelvmGSsc2O4fk7904fO3n1xs3jp87aIsEmc/XyjamjJzjJr61uLs0v6V1ON9LiSrfApUuAiS+VIgY1VBDfqB3SKbTWXYsIwAfy0qMVjoSJsEcF/UQiaWRBNwAzi+txE/jHknmkkaum99bDbT2fnr6naabv3lNZafLuztwdED8REJ7gAOuRvXKF7H56w0q5GI/cMR6Snvsdlq42l+MRuMCu5Eex/dsBxn+paC2QJCdi3QMMFsFIi/f2YyTydq9vt2d335kYzhHKyZuLbavZdZLukFlcbUdCEnp+Frwa4r4SpJp/fKoEaaWpAe/6yChQ5KaA6jTktEjt2EpDqJaYfFWiF05KQdFoqJaiCckgUAHWjDEwVX3UxGZtnRF0YW5Zy+IuCTj86mWI1t836A+preHjW0AmJ44WNtD0cYSdm42UwNMfX/4IabQFcmsGeHAzM+EynXAfKcrYw5PDVAoWGqpKJQAlN4rz7uFLYGAuGzit/VIRMIx6ZylAPokwUYR+HLT4k6Wh0zQWA8qyr6YXX59aR28/U0B514CwlIVQlVxpBT/xSe2D4ZDibKCaYiSnU4QjSokVviyeCr/GHH6n9KI+1gTelS2lEa6cKXuYqtgFhH0KxOZTfx6GeSgsMeo+qOyhT//CYAoqk4dsuwQlv0pcCTZeFe3DMfBCylqRdAaP7kEbK4bPwo8PmFAy1fdbqpj/iioDWuW3SvnDwJO+PK1Iv4RTaGFf1Cu0t1U7jVB+KAD6tQmSvGZpvQVqHu8W2E8GFIGSEpdAUM7aSAMsXZMqb0CJqYLEI4UkjLhrYpVSaq8sRPTVSqIt8iwYVF5uIU4cKyaYcghQKZ6235rFpKhPeTJFqGpdxaq+JVRcSiy0EBDjEwVYB4Q5vd/hulQl17nY5ri3szHY2+UARFJaz5VeFajg9Ee+8nX0XHd4AjlZhAasdCaaOa+3jvV0B6CJMlMFr/blTJjRQUcWyGrBGt/ajFMaNMmK/d6bck8ai/QJhgSCByji0WP40Kd8pSH1tmcZFj0dzmJmYpiDZ+GZRpeswGGeWhYIJX3uDabriwdHJzXS1SEVZSKLyjXAal1BZZrBzb88svjqzfwnpXEThLR6GZ7EMxd6mL1qjMSqAEOYp93b2qoXkIIQwQAtu1YeGBl16AkXIJiAqY4VW6v0AnI98ohMb8J5UfmZr4vdIyKtMLd/PJnqOIIAt5DUGXS0TxE5kheOTe/9FOCJLYWqziOBT0UmuH06mPBbhVYDSVmeEO3h55EED38MgY1Xhpg4Nek7ce9MHXTNI0cmZqdnjx8/wWtZj2Gh57vFYayzx6xqBF1YbN3UbJMLT92Tp8c2drtxF698dYGGRhno63aonPbS4n7WyN3i7qgtDnY3Ry0lFG/+rbUVq2Bt+9vcWnjLIQ9tSiNqSr4X2h1n6uPGO8A9KlW4a8s1r8zTeg8284ikvWBXHvZ0XfHC9EbcAhS9hy+NdW/4gE8dxw9GVZANr0qBv3i6Lqbi/8Jl31fxkomnLTPhSwOaUjBCLU5B+pGK0JoW5+O3Uovji0GLlv3FF1+EAwrAR0VkNOswxTUlMFKjT2iVzX5bSvFTGH0AgTwgTACqhoFZ/LsUpv6Aasha/PpmnC50Wtl8CouXA/X1QZoxg4N6qrwiPeCaCf/Vv/pXT5w4aXHhP/wP/0OTJ9t51UptTaHoCtRrCDHuikcICCG3vQggg2O25Kf6QM7PgZwxj7AZuT2qp8PCrcV2UKpM6Wv68vaW47pESqmGmtLmS+nFMFI6/EuJX/mpL2s/aCua9oHWr732KtJDyaIMQgDl7SsKaEth71L0rgmAE1HsGwYHeqXQyGXwEY1KL1LYW2P47Thg9QJHGiKspIltBkAxPkFDiwKuFuKZZOGj8eCMFDLyLNM8b3zve0rEBICL10wSqKDsRfy6I72PvDYHhe3AyHAWNvfbiOn3P/7g8WeepOreunPTcVnjvYOM/eNjRzZWt3iy7e91LC06HOrE2OikIWTU22GvB23HJo7oJDimu8eB1nGY4Q7EDpQbW3juHHTwsYKJPuWNulpIgCnKqoOvVttQj0yzzyrx7RHWkFfNte11XyW7c+uu80R6eocZw3iM1oP5JWZmxkLEAbJYW1NHfO+NONiGtQYcre8RacItIB5kATRBRk/9KgGrs5k8j6qn3XswPV2cBbfaOJiwGLnSKJ1l1z6Hne2+0ydPAeIAW7kyZcm5SVirzVV6DO42k4XCuzsWWAbbLRZt6xAShYXK1E6r8XHTR2RXOqp4++pJbYp9CGLGJEh6KrZVzPoZ4uWd+OYTOVnUIPKoqjIwaQhsKyeB0nhaQpnXT6IipS1WFVL4QeZa/rflvaiPaTLd3bkmO7vrzinp7nXmnZbd5WuJnWTHnKNDIzQfpI5Zjct/T6/0FrsI6MkjUyx8zmk2fvpskhmW6+un4sePh2vRvvNzlxzOVhSWNg4EGN/9HCqrU1qjK10EcdIjUEt2zWBS5fzfnv5u3gskvlmmMcD9e46ZRz8aisqrkJRI6p2ZAwEUfT5aCLQTWS5cxDm1rzksPJLUYf/WfLcsy6ZvSia9SYkwUvvpna7qc1cOFBcwNrz79ofWQWtbAC6SHVvgcIxfFRlNLAW0oATBmiZZyuNnWKsg7A0InCso5VbhUItoAa8/MXYV/abvVibVpeQKMjBCT+nF/ISnoUAlQ9zVPDqqbAKZZBdSRM9D1CgZIaY4qYIgF3a9udRdvKp5ys45To1aOrwdX+9clVg2vTX37VAb8Z96dfY1TDn7dlcU6Y28qozkqqZRCBaYEIPGSPG1+kGLv3VZOXQFl0ItvxHGndxOsv1p2x0E1NBuxliyPdNK2iqjTNbo8EyqKCpE9mo8+CehQrJGlNbXMVJPCnBSNomZMDxLdRvCnKdscZMl+fsx0uDQSFAsln7buJCorI/Z1so0vG7JkJcgogJt5w8XOxIMcCu7+gsH9tSoyIHKkKlCtQoDVEbDyiqmH5bZheWFJ2pn2SWrKakBNnM2pe52sJuu4SuCp0n29ob6B5G0q+tYtZcZOJykxygAY5IQd4IZt9GsccXfj7+putQnNCmF1p9pIL+L+NJkZKC3Yc4SqD0FysLYHolVzSmLKEnu3JuOfUqD6tqe9MGyUVJegtc2Tj/lhbmTx5AIGgryJLI8NUsFDo5yFWE0JrgsmYMpJWEroKa0C/ShiKuXgKp5V7pZg+CwIC98iDhgJQbQNEATe0z0gyKTWTnmxWKAikDPJ/CpNNLLzn8D8nQS2MHKG01koVGhGPQUR8mTC2LSK6IGpAHNG7fLJcwYgtoqa8aRqwr1rKy7IILLi4a4SAAMgglCJF76nxZnIcHb6aHYQdevfF5ZIRvL8kS5NmCUcOMFqxpS7uH4VriAb/16EPjj0tdKPUjXDLUKUkdx9R3xGLmtLjg53cxwhm4mf3jw9u07LPobm6ucfLp7Bgf6e0+dPePEe+oAhmQVcmQ3NJRIkf3Lf/JPXr521wKyPdju1UJnNm0ZHX+lXUzAIMC5Rbzm02Q4f35mzc/+0RE6Li9V5a+vLpI6DnHRapDEzlReGZWywg9/dcMRLzDnBoZPcKIOBQ6busSFPbc0sSESG1B0YUWVxSR4w1eDps22U/a87bcxeTOWwQRw/GleQWNUcc7spKyylhZX2BauXb3BDxlwKWl0lBmYSKZGioYD+Az89GTjkUikcFmNRbSh4ZzeywvGWFw5zbk4BoiV1fWJSYCOO24HekeOsiPHHEzxNkxzpGBUffOdt0fGJ0BLXZaXh3n3tbUJHz02ZU7SpVSgi928zRVRyGG0Fqnx5EFZUwW+ADoORuS/hhSwRwUpiRKEUGFKP+Li+J/92Z/9R//oH5G9akUMiYeu/cHIp0j1qQoctVtG6UHwaBUnm6q5m+sDHLMAAQAASURBVGhZ0BHRA74ncq8M2PL6mR8006g6iOhGKenYfckL6kQ87xVKWVHDerPYkfEJ8zmrAVY5tCIg733wnk4Osd/5nd9h9avV18YmA3BWbi0I2h591S5YlUUHKVUcDrGTlOvQpVd0+rOn2B2IzZnZeW0pWZVluART+mnBJcmKEFFxIwSCwNbpZn5C2BRIpILWN7aMPaYEIAAFjYmJcQwhMTgUOaINwj45JlakVQ7sPz0367YDguP4sdMXLzyxsbt57fqt27dmdodzxx5P7IW5+eHxqX6LAHv8SfqOTI6aW1kLJk3IEBuybCkmNBxwBuFKBNSAmLc6CnggUJum9VNMja+BVrxkFX+10y7eAXLQuWUIK7LJT2k8NUsNpHWb203EqGP2fTUfKZOhPPinVVYN1LeSaN8mWcePTn3cd6W/vV91IKBtq/UnQ2/8xHIMkMgIU7IqylLgxvNVsIOTDwne1bvLsmWib9jNWE/vqaV7V/y9EzBa59jKPC2sDtOwhaGMrTStyBpI6QqOtsYg9GgytTiULK3gp+aOnV3atGK+B7hhIVXLohl6Zuzgz7Oxi3NM3IzihqfSpSgZXSzEuNrCmt4kO942Zyk2UBbEXAFDRmgQ8VpT36IPWNPb2MSxDwYYRbcqRe2Aj5aO3kk7aD4SIAhZAWvMoJF4w+iqFDX9yzYLpg76jS/ciV3cUQ7so/JUnsvYmJpFzXvoAfZTH4nEezUD5eehpIehVBwPx9Sw5JXOBdSjRbfSHIKaYM3ySWiH09cucDjjJ9P7KrIAbJD3J0B+qFzkj9oYkOyOFTI2fyR7+Ym+jXZMcUE+yRSsuXVTkjxyZnej3UY96pvJreV453YU2zDhJ3HWy/YpQH3tuzE8186+xyJQnP1KLfBhNFphj7p7BCpin/aG8yGsSoqKfAFQaZIOiMnxZivxYVCH+4u8NXsSUKDDmIW2DSXJWEfnjWpLquTqHBtZy6MIwyqd0RgcWVQONjBgEWnUfcpObjWO4SlzHX/UY5EFyVrIgzqKhEM+pXcWIsNBDPFziKt9h2OSNenTCqS+HVFVC/XKaFg84iQQM+jG1L39+zPTUdHVYsN8IHq2Hud8HsOEx/BItQdfL1N1jjpgykvmSwk9Mc7NqABTTLkS2BAmCxWhIgZsEafJK4Zq1e/kn/KIMXIZnhQqDULVMbdmBGcjRwlnaQI0ObyRGWEVpFBZDLLgQ0/LSr+21jUbI04m/KQEQxj9DFhpahaQ07RFGAbt9raRAebYTG8MoG7wdI4RaZaBfZ9mtjo9Pbu2NqfRDPdOmlEKLICCMLRD4TJAC9Cu4CNeDMjwhMPK6sry+oYmy4hputu08oCAeJJVfLw9fpbNJlHTs9GkxopvfmQYN/QmG0u5HTphGX+EnL/Se9MLMEnN2egRTTD5l7AFLfn+pXm0nfECT1E5zHNUm1VxdX0121eHHGeyu7m1yvNmYLB3dm7+6rVLR48f3dqYpsk4OG55MXM2QoXd9P/1X/+trv7xn/qy+3qHL54/54wKR0ubLpM8dKQjR3aIGjfyaiPTAm2hn5JOAuI1FtZiBhrsO6ZZioY7hMwyamUpDfM4DUdJls5b7L8C/sRj2goHKGkwkrdbuuStWgdOwBjS6DbUA/oNyIUH2ilm1Peqv2EP6OFViMmCMuklA9H1FSE9DgeTvg43OGtDfiKKE09dlMXSgTcI3lIqlCLtKwgmIYDBkDYrQJn0SXFHjx6raqpIYGX8qZ/6KfEQc/4MIDRhiYEyz8kEoAg722EthcSGHTwSyAmbMhu1IcqjhvGhSI3942WKrIdYy6DHQ8Whpb/7u797//70a6+9Bm/xBI5eCpSvtmCqoSJpt8zwkKudvFJHlxaA+g9/+ENkyrbX9R1ahh6rdBShsCo3nhhwKooJDaEaJkJLPiV92YukpfIuimalJts/ldrkhTfChx9+qP1QCtpf/Zmv3rx1XVlEieZXBGjqKJeH8IGnlBCGGGG65UKVYvZTnfrYSUpkTx2L1xCZL9LwIKWfwDoUCIepUaFe2hXTCBNSAKoCZkIE1VG68HIzY2UgybQW3IxCcPBTdq1lElWZiaCOeC/HbnoriAhe3dxw453tV8Yx69KsD1aDrRKz2F688JQDn5zUetC+NjgwZmrmNPfNLd5BxxiHcqpruW00QxgHDAZRSlfzqYIViQRaYVQS4ykEy6/YICIUY9byk0YqBzO/WnvnsNKxCeky8rZ3Ome0DrtF2po+NSxexuCqGqAhqhpt63BZF9RbhSq3YmI+WJAym49mKR55TdnQJOK+3chnvsfajeT6j8Gb4dJy+RqZa9Jork4VpjYXf1rJSx0J1Kg0qRxoMNT3rG/TMcx22cKdb1utZT5J510foWxnLU3ceoOCkEzFFXnxrUD95N16fJIgP/Oq7gINOlcBj375GDdgCeuTZHGlMRKoicNS5EX85AvmKlqZCn1yF976mk31uhFE7OQTmeOc8KRltzJ7x1cu6AnOxSlWucLI50wPBbjwxx17jvkbWOMcuOkkqjJQQbw58hnGQhUoompMWSErnKCEat22TMWsgkOs0ekXDgXM0CX7ruMLza+2nPYB3EFXDNROBjX8ARmrAyCpXhFG8QZpPKmd/5udV9by6ycpl4HfZOC0XcHYv5q7AoU/nGuyxrsQtMQnSc3+yNtPRUtTszTw+7R/aoJW9sM/P5m8+TUGxUe+HsanhiVOINTi85MnWTIZSL/Erf6QMX+Fh4reXGrdrG5qXp6gF3NkOFy9jIwM1VkBcE0wezxuyc7THHoTDNE7HOgpCBQSMQR6SADZFRR4TbIL+BTcylNLFAyopINh/dLgq5pXsmaaVKocVKMXd/EvD4994iFdK+RaC8gFQkSTnoqxSpa8lRKARHi6TEEyWXI9Ux7WBLCxh4pkLcsI4fZ0B0Wogp22btRYWTFlaLR+VLfMhxo/C1eUaqX+wV+nyL+N+Y2y9YzGJ1/KX6WEtoKxsTiwskQDH4ItP5O/JipB8NFThzLG37t7X/1gSwQ6sluysYlY8Y3vJIKUqhbDWU/WZg1DkdIUpUz2nGyRzWnC6XWGjvLUgryNrj7pprQsxRnZSVqWQdJ1r5jzKp0NVRI7GGCwr196d/QKGFLhUNUd8gMUafCPLAoRhi+YfmqC5jCXDiVybGKCLrG2smaSMjy6SXmwE1deQ6TEqULTC19iz+r62vLqkvZ1G5TbSGNWP6CixdLBZctcA4bGDuofQi4uLPasrTvkI5Rx+uHBgasM5xfclLLFHEmrE68gZcKQRrVajg/h+KQgn8rhxuGr1CIdK4/q1LdAM1z6YJO1REqvdqxGeMVf4V+FE5mYOQTBGEV4FgiJaEwJDksBjBT5+S/ZU+plHA2HF0cgXOuX43fWNNb2zsr4qJvptja3Vt58/Qevvf5DS1Xra4sGZodU6G7SII42uj83d/pc98z9ey5eY21YWZpzgy4z3MnTR5mxNA3taKd/l8ncBMDGGMwmL4EjML++Zofg+trKoNuvD3IiJXGBr2x3pEdRC/l9aVYxEWIZKvOVSwKBpumxK+khl7wUVG8KJC2LG7Yi6Lf8cMRTKTn98LXR3iDoESLxOeUeq0vvJ04gH0CAMJ4B0woQDIW1m/gqISVjBMdyMlL6MRvVWhjL2VwKOKqKxIcQrrqlUpj5oQpaVTj1x6eeekp1JKu+NgvLS6YiXF1U+Yc/+lH1PjKC81kaGRvt3xmAc1euOtthFDTS05nTD8mHvt4+BDJFKNjvEfijo0dLHXZ6SgEKgwFiKUyz8f5/6aXPWnRAIzdqWVhReTVEIxVGFJq9piKhYA9jFVMimisOWghhQUQY1Z5++smoyJ2dfP0oX0NcEwaHqJPeXb3dNJVsLTzg4eBIx9hpiqUWWeJ0ARNgYRUxNJCZvbAmRyBYoaMBzHnnV69dhv9zzz3HyQ9p6O1KRAsIlyl9zgnT0loFb7i9nHeedoIegEUNS8spXAsRTdwkQPMoVHEml8JSglBbrk7FpJSrtjpQ8qKG9A5M9Kmm1OpmUIQ++4QpAmpAT1sur6zBUENaB3BuDyCAeyzi4wBl9Qz2s3l3D/TxFbJoTe+3dYZb9UD/aGdH/9UrtxeX1xzU3NHWy6Lea7o4eoQrTqcFN7fy9g+w6FmT02PVnHIIvkf1W0/FvMYL15/lrU9GltWYVoIakF3dW1yLl5DXSrj0Pmms2mTCYjwViJ/iEYQEVMc6XgLY+lqBSwCCxHhA2/kql+n2wvws4W5qVWen0kyMj88tzGZrL73SuXgsMtmJqTVzohzzuHEddMO5YaMI8JzkTeLWRieUSkHlZlL6VdDMAw2pPb5WESAMB58wI8xruCRpjHPCNWPNWyvi3YoUAO9wsqQpkxPQCqj6TqFlMkBLMMxLUTaLRb/xyzBBg4nignoyMBRiNFRiXDc5hS/20/buPbQuCZKa6qTFmukLg19wiK/B7u6J02ccLmjjhE1cvX2huQbPcUP5nqeYgB+0HVIkc+OBAbYKrTxIQvRBzzKoaa8GtzxvNob/rU5gbOsAFlq3OncsSqJ/4Adw4CW/o8Qb5ZRfZRCNUtrknGDTfGoW74oMtD2augYa2JV/wPJvYaeAlSAAE0y75In23Gi4/Hr4KSkevB7++Cm/WkXLI1xT1EB9P4BVQpBRuHfwL6jWLD62frZAAanla4K8q/avkMJCD+JbVcMZDV00vbKs3qhpxB2YYnQu3E+Gs3Lx7hO/vsdjId3TUydKZmo0IehIT7JJ42Fo8LOWWOoRIlfii/SpRD5KzEMYNmohmcjUqyg7FZQ3aNBwvtSxs0cO5XoQjCguj0JrwBs3ZvezVM0JQIGfPru2zqCbBD5WUovErOwpAhVzXKJQXLq6tXj/7j0Cf6k4/sZbstizUUnXUH2LJTbLZjWA1u2t7UBRlyxkFewLTjBpVK9wQj7lCQ4o+QDtJsXSzRt1j1Dy7JupWLyI+ml5oIex5dTpM0Qu4z7DFlD8Ywkw3RxAEoC6X8e4UkwkYhvDSHmqkxKTmV+qoOmr0JBLXj+95YIbxATSyuX0w+3dLcxQtZ+Qtoh3Y66MwhS1qmyFY1xqS/srfOIXIUkHQDrCJ61T2NIbZG+kpocpiOVFQpMjFis14Yxq/hnLL0WlJ1uT0X/TOdZWaXZ3Tp89pxjxSE6umDoQxgwXxkfoc+NkIiXoHJ/EK8OdnoroHIpHg0BFQK0FqAfGVgGf0ujVr3p9DQK5+NQx3CZLTEplZSDIN0WELIcfbYRZK7tjOjJIzVQKW/hfSoOHqhlwKkuibpgiw54/UlCSJKuJEyo/yjsfGjPLEv0/5VXh/E9J+T8jjWq4sZMp1vhnlsT2T1Q4u5JCZQ+eM88ZjqaOnHRi3Afvv/bNb//OnbtXO/nV7myhiNknR6p2znTSLS65/dvUyKG37n9uO2BddX7g0F77Lt5eXVtBcExlpZlGxPbmJFxFGPD0YIw30Nu+trRiArBStn1iJzxPKyAz9P+pKUbsKZqxMAMFvV+zbO5v2RIJE3MA7Y5KVK+qu3NaURYuxczYgEcJIzqtkmKmeT766LLptSz4gYaMVRRHtcPSNBAiQi+AMzaQ10jH65WNny5H45WYFg1hybyF5ZUGnNopsKJjRv2sXQkaiGNtSrKXX37ZV7WmbVb0FEp7vHDhMTHKQqKM5WV7DJiKY9fmHafnSAlhYGHFeca0eCc0zXVU7rno1l9596G4ATvWU+c55RhvvJ55QjyCysqF4vUZvkdcjVUVQU1i6vrF0tJVujW04FeP63J5QaF4lH56rZpXoiC0GLUCWU+Dk6VWcxH6Cy6qOwVj49nfm1m7r8MPD/J90pTDjhmxDWq7K54zWQdgnLTEGb09bvj+xKvzi8+/gI9Xo3p2Xr92zVTx937/9x9/4uKx40d1XqQkhuRVIzlVx0qCehENKK4JB4bZCXRectv0wlTdLo0tcxgN5oQiaWS0Y1J7hIvLhESuWh1tkK+lahpDvJjKJWSin4ij7s7fkR0ONWWYYC/zTof2aB6BeIP15XQghWrIslE9ExvpWWCso0GjU4qBoeyp6YFwOy//1ZWt/r6Ro5MTq2vbi0sbR6dOjUxMsry4G+/Y6aPjE0fd3OJSbnR2KoTqEcbeSnR6Ja8QuoCKxwhFhyhixreIuSKBtJqnqEmkWIRTGaIbEqMKcuiBpseQlgik0VWNAZnPdknnY+MpIq+hYFFZ4o7T1BX0W51O+hTdfBRdg9pUwNsjUlPWMCKj/ZGjE9dv3TQYGM7GRkaXFuYdXYHgcfo52O1FKze9E7plWT8lFl2xCNwigjMGq4RadEOhsIFUJEjq3noqJj40UaYJwaQiEqzoltIgUN75WXOoUoZ5MV4ZPaJMRdVDlBKZZHW2CbQwUpRS6itz3UZ8Tp8AN0NF0ZH8ojylatKQv5IF+XSibL21bIomVBu+HPZ4WJmVzGha01e2RMBC0vasbHEVsJFmsK/TfQ9tTva3MSAz/+AHZepUzJZ5yvAGi9TrE4/lTj4JcQMzU9ERPBQA8zSLV9m/zNPLKaX7bpnKlMXxK+YrGRyj9QZgqpD/ohiVtqhlhkuFKilqofVDDYtHA2/VKRQLHAGPBOWfkNHXyjw1MuUanw9ZqSu0+m7AbxZai25gUzizFNrQXw9nrGFfDz8Fl0ZTSgDO4VL8RJYYg6M4YoP6lySAlPSPBkRqsWgUhZWTtARCpgLfv7Fdl78kjpqOeYrOUQpX8SpevI0luZy6vau/p8++DJJKDyIroJ2MUVMg4JepHcCNR6SoquFtFFTD381W8FU6b0+LFPVnjS9Vq6BS6wZQXSiMkAW8mhg8KWFYlKoa9+CtTSuF5Nf5aq9Va4uLytbPgK1vnUW2og1EjKsjiQqss7Z79vd4rVhyt0xKmIes+wc3rl+PaWZ6BlDGbE+fY6+623vaHCxmuGw8aolVq7woRK5op8YQSE1zYqLDhhmn/QwpElkeAYiErKliRFz5WjgfJYkXyKdZ4hWRPu4U/J09l2IODI2MTx4xkFHtWfSA3Nt1p55d9gzoTufMDZvAmiy4LSB1pJG4RkDm8li7cFBEWWjLHCAavg5ZeMVSuIxVSEJGyT1DXLnDBgYmYxl/G0Pw3lAAqYTpoj8VoYuDQOwIS2ylz7vyhnopA2FBqGOln5KBn7LKw6JvBX6ME/NAb8727OnlSuK4U7MqC4bbW6tOaXYym/8sTpl4mWwdOTqpflSa+RkHmG2aAMwvxsRlUCx7Vxh8cpQf6jJK1lGYxKuFQoneAn/MT0mCqni4oVW4wopHMSpX/PFSZRjpJavvGhBuPMW/X6VQMSNB8xHj8Uv6Ru+I/Ca7wcHoBVoYtQbrzEHyCJZ8SwdvyEa//iV6MtvBdpHoiOnI7JyEsr06MtynaZYWVmZmb7z91ivvvP2qDYzPPHPh+r1rXd1DtkLaULWb82m3sybfaf9YL/PqQvssHZ2m0sOk7zyP3ezcwGDaiwLpRFxGZxlpNSePHcMAI0PZDPP0E8/M3rszOTHmnmpKHKYqAgmpO0+ejDM9J5LPvPiSttPKmRTvZ0el9SJXR+sQM7O8zjbwBrX2N3/zN9EWS9CeGZGpztxmKLo0VWlGxydcg2tiSRssMnNPLsYswo9WzLSt9OPHs5nEXIKaDU6c4NyAsLiIqTzavuqu6oUVsRysqMp1PEKNj684j2hEStzCLuxN+Hg71uXcxccuXLzIm31pde3+7ByYa5tb127c8bXOHxSk7i6WVTpyqQiZAOFLly4rl6dd3ooEscp6/r1UAYe/k4ZXr19VmYHBo2xyG1tWNOZgoyaTo5NIDC5s1EeaU6fOAPTqq6/CEnE1SVXurVDYFgyy9FYGaNs0coSWhgaMiDz+OQUJmFEBKLuxxdaEkiYzFURpjjEH8Iw0ynDVRnAVTYBAZLxPSrSrnIE55MF5tiA75OjD9z+A4YXz52mf3/zmN6dnZv7sL/3iU888LZkYSiBUNUBpjy30YtBBes5FNG8AjTUmHChgOuHuaMlo/1RwlYItZMLmBSVE9whjTRmF0USlxAiIEQ9zwNVO88DQTwlQwE8AtQJkhG3ssD0cmdBNvJQssIAABazRqFZWrVUU8hW4LdusQVkfsPLrFLbekbbcirbeP9J95vTFz3/xS1u7bR9+dHlgZPzkmfN9vdnPQNow7YLOhG5QMUKYywxEY8wDvfrUcCumVrP1joxqPjW9XwKwgrkKoqqw3gICnHe2i2g7NNodLkW4QtZA6isjk5WMnpqsJpAmDV2U4FpcTSCMhqZ/BjZ89c7b70mDsK69ixZlzM3KPpu1gSwwwM6uZVboHKZPQEhR9E0jas4uKHqnhGlZJRZtKaN1S3AXzMpL5lZFRChX9aVk7q7pK+atWtTW9LNySAUUuDAoc4MEH1Q640Rimk8DZjwISnyKtAs4vaMMNB2mkebCtZVLETTgDEB6n0h9WZjxQxiTYjOTyYJSzhvVTBgVC9v9sOFGPNzLeziHKh/YeYlPjD5olndwzBaJFs5BrDBqwVCF/AVDwDUZUQ5C6UeL/b2Dc+1zhtCaw95Ksk/rcL9aWl5Fv9wjWrbqylg0mJjJgmTV5kp304yAP0Kc+lMT5CkdrQZpbD7Vp+Zq/qorABlclUiga2MF+dpKptj6U0x9VNDzSGQLYDPVp/xb0xzO+wiQArjxggaSeAOkFofB1VwtOMkQ7n4oTSt9A1z5B7T6gIC22F4guUtf1mf1VvHyGjLTI6unlXlzBFqb+QGlK6WXjNRKvIdybB2RIqVFvBVRgVTI0jdaoTBDTVaK8CVPmSMXfKOdG7MbDC9ledLvkqrAl67GFsNhYfuStfUiAYQDthRX60taV5ef2DVS2zr1iigmSwEsGGKTTIEQgfw/2In+R2/GnE4HQAFjwe0b19ma7KQfG8oteIYto1C6FR0GFcokQB3SDyLG9JVMfAOtslGpLzZOVxdduKjUq8Fv0OGdF6yyOTtI+hrduFhDYgugzJc5rVPT2XDQhUEomkyahDt5hBlh12P77LrtOzH8g5U9qPp1oWvVfpivoCeyyupyznYcXBVaB6naZN5VmmlQ1EAcudTXw+zm+kvAhRFHMgEJ6iBV45XlKRXcN44yl5E/hZdCHPEe6YUVJDt8ZATKEo+zDLUanyJnsO3a1t/ZxTl5eGyU1BEvxpKyGlFbRoZlzUPj14UtblC/1AJRKAw8ZRlfjddMnFYS2ZXxth0CylcpRSkakhArjZN+gQFUpAbUmuTkObmztEgAKgLOssDTk0DhtMpvNdK7piE5oCosJk1Z4mu4liUrABihwEgy7S5VCTReNXsjMvxewCghoYdSHs71yXATzie//P8npsfxEsVypqpUSfWaX5i9f//Ot775By+9+Owzzzzm5Fhb09Fxb3eZGX12dYlPx4i1aYIaH8bc5ozXncmjxzc2zf06uT/Ql3XHNob+9bX5hTnwaaoaml7LDD/Q0/vic8/WthC5vbvB38R8wcKD2ftETjdJS2lZMsGMBJtRCajsVEpKrBPzqYL2xTslKyXu71LcpaE3sr1+5jOfofGbCfACeu+994yMOOGHP/yhUz7ZuG/evoND3LRllUDj4SIpqbWwws9uEnBcjyKofH4WNfj+xZ7HJybHqJcSy4vHAMR4MIQV+BKLlJj2JnJoZKLyIfjqK6by6gsvvKCbUKrNFlTEhMSoagVgCt02NuADLELRD6Pouki3ADwydRQbS++ryVaUJSJKI1EVYKO3FLNBe3EsX3jssQsKs+u3WKx7JFCZ7fWoDipgFQNlleENOZsSaPnS0LyPHzupe0uA6Hfu3oKBUtWnVkle2PCjksV6impbT3nsscf4C5Gk9v2Tof5IFKLPpkV1RsCsdBYvRgYagpCxf2h8XPVMrNlHdHJFMwmQCNDTfndv37Fl0Ukvfv72b/82ZM6eOf9zP//zU8dsrrXLdhahPbjTPQRqoXwN7/hRjUEzhj8jwfLa8vTs/bnFBe1qh7QiSjPHWoBiWdzrjEmyyrJ07o4ORAABAppHhE8SwEGkB4URvRLNW9XEaHXp0QS1RWoaY4y5rZRhUDuldvMVnbERK2zlEnkpbUur7lLwcWNxZW1i6uiZ0+cmjx23PX74+lUO1YsL8929g1NTJ4eHxndX1kYnjvqzr3x4bFxBfHkZ+okvw4BFHqMh0Ubx9gk+ivOoAuTrW6BGektQ0/go/pOPLCggpVrjPziLgXN9hH2KvaOMxLJXyBVsfUsDE/wFhfKXgmoyby1OqIqQTBW8jXEO6TF6bG3aBtBpZiy9Pm9FUs+peQvkGJzdwadpmGWsAAGAu8o8I7XJf0WkBsNoVEbHSgGlWiZIuPWojmTRMksU+ApSurp7hA3PtWjvwwEpD9WlSfPi91JJWkqvmYqykmoqpCgrhQ4VHDLUQEjToIYKxGKMWzyi1bTk5Xhjn61a5xyeVH/fcBtRgMpWkNSlGHfxKr6lGbRx2OlmETQXKpDVi1VHRSs0/Yyyr7qKUJmg0Wyg8gVdfA2HyY6ItJDsPzjYd144bBVHZpk9EEUYjeTRxS3N5+TwA4dG27idfWSK44KgR2FKBeeG6SblaomttmghBpcaqYia5vC7EraVyyfJVM0DW+Hg3frcDDRr1qhmC2Dze4MmfoLgaSV4JKD0T31kfCRl/SkxTgGw5hLZSimmhluBJgSg8ldVvUNwQrgW4wnI7q1JW2kk0GGxBAuHQgnY3i7iK2thdFk8E81NNyjTcosriJZ9NNk2NlTQjALnkQRTRSaHz/09VITIJqoP/lW0p8XhUesaRI+sCHOHx5QW2paY1AULhb8+8dQiWvSJIClWScvIoJi16vTwLvnSpjRAaBNTBLKeG9uOLUy5wSKdyL5VoFywRdBwQcXMo9yIR0c4GUOFTpeVRhmco3CQ0UTp0lckG6gigk4pdS1SyX4UVx/1kfgwz/ip0PTMTQ7rkUwA0hZc/VJlHdwJnSwC6Mzl7qW0FElHgXAx3+CgM5K4RrNru0Iy/bQ4XgICxyoxnO8lTMVW3dpbgjZpu8mJqfBJ5jLZugZfb2NlCOgxPlrZgHCxjxh7zNOpFKhnoA+qu3uuFsEw0qoUrDCJvOjA/mJQI1IpBjKiM5cBZkQBEklBtQnkqulNABjtOeUjm0HQWfJdbgVoaycigkZwyxp2d1/077oDcG15pZwhnoXfjBE0FELP/ui29r7+QT4NdAm0ozAZL4zhjvdDao0OSQhDTNFqYdj1pmDBU1v6Qy/a2vDoMHsoSkoGYajK6IlRpDxyeWo4b60TKQiTPDW+BjCIhIWdM6qEY5KvkaambLxZdkp0Zg//Mj9xDNUmOBNfRpOnBWDS3O01OvDOu6+/9/6P52ZuzU7f3NpccmLn3n4sy6xLXbli2ZJ83DE4MHd09mPa6XuzE0c7XXnLbwZAs9nurlH2RNTDXUZ24gXbYF8KKtrhNLTRmpojzecKib4+yUwFtS/ax3pVBHMUzO29K5evvfLj13ALvtWOWNFBpTx/rR1pdKXQVOmopgH64X/+n//nv/7rvw74r/zKryiX2FGKEn/t135NR/OIoT5iIWZuTC6L82OonVXvlZFl/PXXX3W8O98TiSEMAoaHs7KEK+/Jq0RfVU23OjIVvRqGqiyXt84CW5xZnVzsHBAGB+nsIXZeD2jwl12hgNtgjRqY1mLawPpgenCW3xvaqY6XBYvR0XGj7fj4JGnmJ2e7C+fOM+3bBgA6BwAcb7uGoztWl0ydOWBNmCFJRp74qf6O2zLtoNarvwmQymgqevPo2DBaWECBn7KhwmsI6rWd4KeSwqqkCHAYNNBRhVHZhFACNvoe19QOVbkcH6nlZbp4OY+lq/PoxCRpSPUnj3KRNLledBR9dXCY+T6rJ1evXfsTn/+8OiNTueAsBg+E5hFoWyeGJTbfeOMtFZHYTpF7d+/arCCR6djM/ByFxAMTVgJpSHk/caRwnSqorKr5qRYO9soReDtURfbOXvZfgyDB4vpEYpjn/fjE8MlTx6n96AwNK80aDG7oQxSizMlTuxab8JZbGLfWyeN0+prGdiW6LLM9DkYHT+Y8DKsH2fnRP8QG0r+1s++W29NnLh49fg45mfqZQawhbLUvXhwas0ogL8cP+7fY/rk0ES1BHi451C+LEkRmQ14X4ZRqfuKBT318FTj8vf5EE5USL4EAyoixcxQFDgNs5dX6nvpTgvrIFfGJ6kWnzfgZSZm3JewIRSpobJ6Jo6CwwBHxnFo5+X3/e39k+oSRzp+98M67b7Hh0VzYKhVBIDcLsERvnIhfe6FxvvgfYDG4CVORRgfdTveT0vW02ZdaBHfe0PMAWP4N7FoFuoQq1+5HGgZeIVF9V1rV8SPIFF0BPqE5hUBbxEpJ2c2oVrJEaGkeX5VZBxrpA8fItCdGH6RcoEEnc3Gn5QwJyz5sDAa+NuWPgEDaFb9khdZ/DsztZiZhMMskVsnW7O2myo6qnO4Xpb8TFgwV5aK6g/0tp0RyJcLLXN9I6zoaBcPM4oJGrVpiipIuVotGPWPl5OGj19jCw/GtHGc2NjZOhi1zvdzecFcwsw1r3o2bN3E15reyj+o55ajUVC08mWYZVlCsOd4qi8QiS1Gg0ar+UffM6Lg8FZpCC9WqpdXbPWMhYnKhsWBhhlBbVmNXlofAQKBACBNIIF8wKXWM0SGl5IkROROTACkRFVojXGMOv+GrIsUDpdH0iYkuUR5Fpu2DFvrXvt/81kwC+2ZZEteCK2/AKRzcgBTkKrcUVbO0kQyyK8+ae5R4O1uwOT0y1uiQicLEYry9SY8itdzvpOtm8/yWsdMOGv4z0Mc+MV5kcisHokS55RWiYR0JM5LRd9s9nTk9phTolWxptRStE+1WSiq3IFv6XEgOSQ1VUPWzfK18hRrlU/qF//EVgJ7CfBVIgdR8RUQ3H3BweEnNHSG09kV9uTuGAmEWUxnNmBrpaCGv5Dtb7Ts96SlK4WWzZ2jVJK4QYZ5vXzUa5hyB2K0Rzv45iGczcE8fVINY1P2igpb2kEju0qqpo9YNdoV8pe3kDsPKVNuWd0uOReEqsL4Gedq4sckpBKePTcmuI+BRT5YsQ+So1BJwpmHtxuKce+AApiXeSEbB8qRM/N3BFXBL5+oyey9WqgxpBgbdZSdwwTfaOYyF3Z1VjjzTduxEcZouI6w3qWIjv8FWgLZhYGLLI3Kt/BvL8ACAitOXSaEK3E9b57jxDonvW4OGAdqgr1wZvQk8khOmeE+rkcyQAR8JDd5VZ6DcGJ2j7gNdduuxVZBRrKYSw9X5q44Xc9h5fEo2dw364+OjgIdj0c20NuoKpSLGEQBwJD7MxJYY7Oiya5lrJEFHHFmR9ybZUcPNaysuMFhfo0IsLiyhahX8iOTg4niSRA6nE0Gjsrd/5Uwzh5NTF0+YN9InYpGAyo799Ggiu/Trdsaa0okbkKQNAyF49jMnsvTUAgoYI1Uj2PgnXenhp1GuyEi0Au3hBK1fBfPWrxqoUv6RyId+1lx5Y2q+Xtq+t6+33GnkQMyuEarJ4Nnjx/7cb/yPf+/yR+8vLtwrs60MiwuzcyeOnaaX79gd7PxWK2l9g0ODo5ZzHLZkd7r7V01DNyJw9lfs4tjePoL/2/W+5fm5WUe0ZBQyrrgpYm+LI5Bd+SwW9QisrbVlwpx1lCKqLJ3DSdZFq+yybbPIsJi9nnr6MbwqDUs/PeH4qeN+njpzRMy777///T+KFuGuKysAv/qrv8pU7agbnEPFxVEvfOYlo9VAWwfNjdbuTZuVHks7ipQuR3fXF3Ag/lf0U089Qz7KuGzBIdZkPSNdQ/dBJPrpRDnlUxNaqyvCtfv2rbsKrRMSirG8dbJ98vRp2rVTuk1r+X0Q0C5adnB3und75737s+orJQfGrP61dy0sLJJIG+vbly5fU5ytxjrC2tpm1/Gpk37jKudq3rxxl+2SR+DQyMjZM2fN3ygV9vDcvHln6tiou3XhYZp05cqNL3zhhJmDg12dMQT0+fMXWNl//ud/3pIHFCHqDEq6l0lVz0YXUirCLK0SCO30E/0cNGJLb0cFko4zDDHKo8upnbq23oueyIflzaJoz6qkr6K+fra6tmYPT/d093ub72tdHgwkiyU/fkkSAGtD9MDw0K1bNz/66KPPfP6z9+dnlAjs4tKsBDr3m2+8TVrqdCwE0LMfSAKYKEjRFrrpQ/SlydEx64YayROZQNvuosZ0cBdK6zlBpbtrcmRUTc2IxiYcs0OMcPaasH3Cqfwkml5qoQZVKf0w9HV5aXZ2xq4D6PQOD40ZdgBHB3NEbCGAPsTE4vys8yUGyxEEKEAOosbExCSRxCJFRDro7Nad2yxBrCP9XU5V3+x2sUVH3+jkMaepj9CqjGZdWVw0PRqfmipShzjosq2KgqqsCKq9nGoMQyqoEy+jcEeQYQjCJoI4QMLBMeGQY/6HYRmag6Z+rIblUxUEETDibacw5viadZsyTSwrJhHuhZYZGxiEDC4CIg28KsjgC4oE2lRzWHIFy19EJtmdMJOJHNAmrKOsNYZbwxLZ39HHTuOUOVv6zIXgfObkqft37polXr16xX0Ojh22r4jYb9vtiNuhxcQeg3AUE1VoKJHpQlmCNwEzzXDox+LC7PbGkkNBV3dWCSiL8+0dUKWumElnAgAfyId/OnwrS+r8V2JRzll73p98tLNIZETsXD2cfcmmIllYRy3Q4BaPjvKAHy0t+NFURGVC5dFtHYdgcGK/hEnxxVCqeVcnC0dcZp1BFL+FHfsd4sffddAzqN03hgeGTGxY27n29nTnlCRauZpmozgG3twmM5zC3uUoraWlkbFhmzmWlxYNmrl5dHuLpDYs66q58J2OHATwcDEuZnYBechG5SFno8b2uqYaWez2cSDpTtuRTivra1ub5H2nlfad1ZOnzkydmrp+88aFJy/w3Pvg6ofusOONBnOKxaLbTMrx8PapDHT1EPiMt5BznUxsTG12w0OiGxnN5pAhIx704k56MDjSm94MxXaublyYbGVAIiuI/bQba74Ge91B8zMPjblPY3uHrzs2zQJTbJaMlztMrw5PcDm0rud+sgzW+BBnc1Hby0RXZbUdwSJL7cJpndIvvNNw5RHIMcpW2/ail+hhTuvyRd4QkArY6XRzG9G6LGRbXqTT4QRth40KNEpCLDQ1XCGHa/VKPZEuq6woElCP4IFkc7yPqsnStrJugMzNeorO3Nomzq6sjxlD2vh25RIfl7gvWq6bmBy+vzm3vrF80NO+v40ATgK1NBoMV1dyij+jFaHnsAEx6DczvXjk+Mk7t6c//6WfWVxe6umLNyNSqDJXcaI7tXVkc0fb8GDvxuqKOm+uLjENaj/JoKpDw1atIU7bgw0eporqgW4b1xFtAWST0cl1DZ4z+paMPa6KMk8tTyUISobY3WWqj7Ix5hPhuCASDIUYEpmZEu+KdVKABtY1sLK3d7Z/bHVjd3QnZoK+9oOVmbtjvZatQicZzCgVur2z0ba74dLF/W6d1O1faX1bjDxaan95lduNnjC/NI9huEBs2vKq2tq3uHHWPoGxTK8jvNhdFB+BL1XokwUuA8j+FlVzZva+A59tMPBYNcOIY0Pd1Jre7va1zY2OjEJItx311OWphe0nHO7hhtGledMFg5lmQvkIE77x5TEyan0EZNqkBjnGgn4QGpVBx/FA26Z55Vyg3a1sw9S47LKEGNTMhFITiFbWKjEby2vGtcHewROnjp89fwaq6D/cMaQ0UwelL60sapysqzgvaO/g1JnzxrLZuRlNxMLKMOY60HSc9mwCNPnc2F4niYZH+iEZGdSf/cE0RRMbR4A4jcAyCBzcFc5cQRwhBeFtIzEbsUV72EJ5hafu6gZbBR3DFOX65ppGZ451bSmwa5vL+x1bI10j+gL/INsSMjHo7HB80P3pGePXaNlgmiuTI1Jzz7GZrc5P27TR0Dx4bn4WxdyDQOvQbqYO9QZinRqFeRVjtyykIFfmzfsoxCbYO9RLDUSKcB1ldm+nl75zsIGwLHUb26tDoyPOLOKQAsj58+fu3btvmHYiAg0qHF32o2txDWpH5/T0HAxZfDPxOIiRm6TShR2OiMLaSIyhWyfitMw4u7KyaoWIq5jhnic6jVMbKWhsbIRDBFWkTDwylBfxknemJo9OMETnqclq+NC7c3hogvCZn5nF1+fOn75547JDXAf7O+dm7pIt+rLd8jOzd6n1TMPHT1y4d3cOV5w4cdyWXWyqUa2iPfvsYx9fvW7+e/f61ckjx6/MzOTWoHXHGna4cs/5To4ENQPQ7o6lsIRj1+/wQPfeth0CbQP93Vcvf9y2u3Xn5g1kMdjlgurdGM77B4dHhhleXTYVJqG7U0kXFqdv3c4e4qW1eRdg8ue5f3+GwHVe/sXHH5+ZmdZfOCn94Mc/wDkURZrqwmzO0zRvefX1N86du2CMkL0QMGRRkPD/l7I/ffY0ue4Dv7vv+35v7dXV1Tsa6AbQjR0kIC5DDSmFLckea8IxmnFQ3kZh/QsORzjCYb/0W1sKR4jUMiONSEISSQDESmy9oburuqtrr7r7vu/Xn2/mvYUGSMlWdvVzn9/z5JN58uTJk+ecPHnS0NMdbpAfDx1aATIWq5dH03e+8z2GddTOe0M5OsJ6lKi5Bo7jXnEScrK37OrU/wFBe3oHLKIoanh4TO1cxM2va+s7Ta1ddx/MaFr39qHpX18hP3xAnzZoa39P3M0TUTNL9H0DrbgUtXlr1368Ge6NRGXG/ZYXnn/pT//0T9n+n3rq6dt37pJThWFdmF3AJS5fvshyjydB4uBgL4VD0WPD7V/84he+//3vc/XxFmnCY8Z8by8fKYoFpgxNnmAxhH6E60aroA9deqUlPrRaQT2iJAEO3GgIoukMfU44Fzq0qxOeb9686ZgMDlMXLp5z1K6CzRF1luUlZdgYmaP8r+z6oWlYRtCtsTRnUxHLfTdOcdIg5pE9+/OLCzPTs8ZtzkG3+4Hl49Cyiy09XVjaztYuwRrkVEkMrGuAFcCiRMhfPcQI5RJpsAnsAFcyuz7/2uu8CbVa/wl+rQmRx9B4w4mNAkwY1sztpUQNmCC82atQmCOhLJkdWFGGUGYp8zXigBaAwVImkuNjfUPjauhpgLSZshApA86MO8AVqQUmkWll3FpN0m/vsWoZ6y+3n46sSWaJipaMYQPYvl61mCpMnW5SZ+yQCY2imQWMU0i8JZrLG1Zfklr8reP8yY2fuU++vyZ9PNuT1+WhS5KHT25qBvU+Kazc56JicoHcOFokLwJz0Bz5Rat9qFOYt6IU6DD/Dtm0ytNI3kSESJCktF5BZo73cbMOC8YdWWvGHE0jTEe1LhRb1JlTUxmqICmailk/CcqM+2wM24ILbGx09feOjoxbGFA7mxvzOnlFfp1ezEJcRIv1kYGHPh096q9JJj/1euEKDzBckWy9AwGwJ5k7wCPpW5kcVlLgjMWOAuA+zzmERZHgEazt0SjCxGOejkqQHLFoFpeFVnIPQaehtwflNJP8qv9si7NveRLYvhhdj9XFsTWm6k4BNkTuBAFTMRZaLKCmAwI9tsZ4XExJEFDkmNPePF24qL0aYSsDQnvSQwAU7tDwiOgcunIlsrY00C6+/NUvCeq2uLLs0L2bH3zg0La//7/++9/97vch07E+wmSp19xvMBGNzMEmTpsvsQutLfgRNzR+RPtEfUpT8U9I843Kjtb5ucdU1/6+kf6+YcD09fRbdPYh9jI6NqR1lsIaOqJ3ZaiyU5iTM1xCBkEnMHGE0oforTZD672l5+RtscRWDGQYFq1P7xj15esnIytdDF9REsuqUenB7JQl/DCzcslQlgwVfU/6MiT+y6nWVUeKEaECpArm3H8sFTwX4AoF0hvyxBEQ4X0+wkrzoBB9OJ1uYpe383VpYW5tdbG3p93MaVYhWjV3NoU0DpvQJQzgjdqipfRHeBNJjP7LTeb+/YcDg+IOjHoFOfJAktYCyvDMCIVWFBPBiEU7ph/DCjZSdSjFmyzRFykzg8KYZy7ASXdl39rISntXX/MRAxCiipudFVHLrcGk/gqxKY5JIkW5lpN+c5/nOJhCEApeot6QY9ANVA4KNsRplp4GKaxEYutoGxO+WLDIOHCfDMRmbTw1ba5vPL5P9o8zJ3aNMMBpktregUgZ4JCYQgvFl6A3N0aAaLsajmsZk+mxkH5Ky+rKYQ7Tyxhl8itqfBSlk46djRUhJ8gxBw3RcomLGUX+twxRhHV1KSE4TT8alxTFJotzC/OzS/Pzh4msoo9iCZcHsjIi4Anft6rZ3LS8uJhdA+TUrFcw0RhNQesmdmcMGUghiUqfMSSlM89mAT9r1UAl3MhMBpAQM3qQvA1ii1bsxhPoItOweYlTZFbyEOdEGGZGtg+YrIIBkRpjNq1XEiHB22fRvhVxQidmZuTYSj+O8VLosOxUwQfU276TYE2YwPL8MrrApVG4/K6iQRjcJCdl7OxuKIrivn/Qub1D6Ttos2Wi0KrMQi4qUyXLy0t2JjbuZV1LFVm/hyDyyXZEHa1jynMsLf1Nt0KiViAz+M3kmpSrQQUDZU7J9OWJCdef8i/RVhgl9ve2LJu5F6etsQX8m9iwY3GpafMLcyafztbOmZnHAtcoiNu6WWNnfWdifPLh48dkD63DM9Pw7S33JB9d13GSeY2Aa/TBphCora19WkG4auhsMGRAMjgwTAfY3toly8zPLTvR2kMgV8jL/ZPLX/vwydtfvWFI7ezuEWoJepcWFtU7NTa0sbn8//i//9+2NlbnZh9OTI6dP3fZmgxZFX1NjGzaH6oJkCF0/NLhBqFxXgD37Z3+nm7rzBxB+VE4g87avo6DH+YD3MYGXzEkKNAsrV2dbaaJw91tPqPCFC8ubM1OP9jb2rl4frLJhN8a6TTa5tExgRP7cQYTRehw82Btc233oDi9NR7bUPv0088cN7Ref/ZFnEasyE988pXJyfF33nrTWDM9ABec+nqHaZDx2pmFJ8e0BcZoa1/IwwCBjlBjUQBI+agUKeoFChixXki9nt4ovZwvLJAylJBPcGbMH11R1RQS6oqjeJ/xwiTX1daMuai3s5tK0LgsTO3ysklx9Ud/ia+Q/lVJBE0UR3E1W9t2t+KhI9WOqffKVBpgMoKKBVZ1gFRsiw0NZM0yF8Tb0b2AWSCgcEfWyXqY4JIO4OjRSN+TR9Gw9Y633nrvb//tvym/BmsbmT629pdfhjvlqJLSExpNh23avgFxNAnVolNOPPfNkImrkEPHgKIQmYeHhnY3thj87j+8rwGwBgBTvaolA9jun2EzzOiozFYPichH+4dCAxHklV+KdOC5wGHx8bo9c9dqnWPkNjasNpb5zlKpJU7rjNh+q32zzFTdpeec476jyJ6uUewgoRGcddrdGfNqo4D6x422rtLIunLiA83JVXXAtpIIft5pMIMmJEsR1nf8BD9cQ0WQtrYjKKcn0IIapEpJCuG95l4/1ec6xpiRqEwewnbJ00eJUg4u5uD39G5zxESSm28Vi7Fre99Idn5wa5BBOZDgr6zJgOsXksgUTEkwlRATE5ZAAabdMrmYGuKEcpoUYsLQBAk8pR65z16f/a0AnP06/Vtb9Ne8MlOVWcRV6fVetprTtZKtV/WJ4nJfrm6k+qRWk/xnOd3XBNQn2aCIqIhynC5OfNzcWtvp7PLEZn/4kc31zDR2Kp+dNqCsO+ssDhDyhDCyQpcVCe6+A6PDly5esWXFL89petR/vMy3Clcp+wQDAGLSpxSzJ2X+yg0AavL8DHxzkd7kk5A9c8r0OalAtnRBEQ3KJ1Q/uMjib0szy02Rp8lPKSa2UZglVIBfkscnWoGDEf1QFEU6gpUBvrJKcuAJR0RntbKITYBKFIDewY7OHh4RCN9wsJgrXGgko6Y0EEHSakJVJanS33p98sTPpNNm5TEY5Muzs+QJoefhg0d6aer8OTE6mEKATqS4cuXS22+8yVwEnbIbaAI0MF8d7O1m1aKI/opCnzpFOZBT+4g8z6hMWtFvOIMJ3gmDcyJlGX+HexubWyy/TY0HPV3NW5uLjSfncF2mBFM1bTFRbnYOOLPTnO2GxMyVDHOEGfVAfxkFpVkQXhDtCr+Ft0APlY3AkUnCSz3v49pWdF4S4o/A7al89ZGs8uQDXRYDQy054lf91k1NNZvrk2Lrkyc/ZXtyf/rKn1J4fS7DaYf8ohNOx2NFKSKRKjfWy1KRfoXHDteK7lbqyOywzT8zoa9tLtphGU3U7R2FGBQ8QOYW7LDq3Le2aj6LH6r6T5MCtBQmcSpvn6DUjYEDxdbDoSE6q8VBuDczZE512quwjwn5rWPszeQ0EPbViPVm/z7aYg/C4gjY0XxRawRuzfUmowP7D5tLzdnLbyih7KIEGRRcAw8HR3q1zspqDwuqtfiBwUlnL3a0MtqB0/TJPCSxpxDpmai7itFHYzwkNcIzFKmfo1ubGst5ltmJj/+SUaIQ7kU/wFJgIySTIanGurTlFfgi23NMj+b+Cz4Z6bR4aZLV1AJ7taMN7TKkYsihUugLKFamt7qmm5tLS6R2K2/mIJOdbGZ/in+ZhSjAq8jVF3ALS4V0lR/neJiEJd+qToHapa7SRk+iFQAP7N7Kj1r8USOqkGQGgM99qAQpGC9iOkR5uLG2Kk9/b49tfRC7sbvFvmDJHRgkDa6dWoFyCNUktGq/ULikVhRCJokgK7JfiZmoZKXpHVKHDAYpU6BGlcFIViSaZ4MTH0bFVmDcyAYYhwzjZg6pwjE0y1ttIerAhnmctBTqbcySNTDShkKi/BdWNze8AoOiniSUkH7x9Ox5uc0PxIYz+4dpp/PT/zEQUEdtGBXViO8uDQOlqcIyxapTnJv4bCTMYLeTWDGu7YQlNLyn56YJBg8eP4QQo0UVH3xw8/0b7375y1/Wg1YXsei/+N63n3vumZHBkeXYTEmlJ3Y/Wu4kUo4ODywvb/Dl1lOszzm/dqRr+vGKtd7aIgVW3nDGIcgJnj1h9qdtyp8zBvWxRxqLWQrrvCG2jXFb3Mf6Caz/47/+5/pLLBZLaFY2JsfH4Bmrp4cYx7axkjXRhhuZnTFfHGxOhsfGG+L8Zf/8CcMbNGk1GzbFlZMRcXJ4sEtPAQBRWxcxbqA6vs0hwEhQ/YPD+nF0cMDst7KRAPQDw6MOP3WzfbDV3TdkPX/KAXMDcdoxykTsOdpv+IM/+AOGbK5Iuh6cXPkVwnvZV+XA74burp6hQaeD9Th5igBAAai6KHpDV5Laxb9RJpIw4fqwDg2gkquHBgc6O9pJzpCLL+0zO9nJUIJPyOlbX51SvtXHg13jF4XzBEGfmKbA/etO3bb0GRcVJqyDvZ0tS4EQKP64yZRepDrDAc0oEIl6pS6VomjlI0PkZxH8wvnzLez6AFU0nxanCqO/np41VW6zqB3scpywMcJijb4teSjNRwahzbs+1Kms+JQBxKrxVgOEryGqql42rYKdMiyzG6ziRcleuaczaCcQayFQDIyR4WGr/LwfhdpVXXG5sV7TQdL/yle+hOhgnGilEKgkg1i/tnivIrqUoupo9Eql7777Lth0KnuAB66VTcCIikBI9HcWYGd7QN0d3PV2dXkJ/e0fZFcTTosc796519c3pJuAKrEaKRn7UwiXZRVpNZ3SQQrpQ05RCGSPnTUcE4pRp69gHyWtrs6ryE89XeFXCJhbW+c8rJ3kK/fKlLxVArTAAxK0SdpDGz4sABnSXDPVju7LHOA2u12V7JOOs7XmWkhcRiL7h3fLFqYeQdKgYuzCE2Mv8x8PivDN48bYWIqaKGPMZCWBH4xgg3XXJ6m+rT/du3HVlif3NcPHr/IoTfKw3tSv3JdXLsmQP09KC8+srDU3/7F72COp8fSs1YXoxb8zjZREcEWfGgdjLC6e6y8YQwb6peLKX4V46FvGpExmpTloAyX76bjlxqY2Po6sFIWEQjwVMx9vkYd+uioNBX68+U/uaytca0vll0j/sThalD8VHY6d5mXjgR6LghEJp6xvwFzu0lIxOzCR6AMl22kvx3CvpY1xdCrHasVxJMJH/OsYNO0SMcpWhazd24kTFgffmNDjKgEzsG+E6qF9SgBPKmyGc1XOfQr7gCu7UOgKtYOetKgSV/152qjTPOk7tZNknvRpvfHw3Lmp733/29yTpDt3b9Wp+t9/4xvicBP/tta3BFznV0osS0NZlE2lCV6q78zZSAT+2XRMfjteYUTdhDYx69vaEjho91go2HRAWYwRUtmJn4NDnVRykd+bm3abWo/wzKYTS0O78GupV1HozxfpIJiphBfbqyc0heLbZLxGLeN6AoLy5Iw+daKmpSuLCeAJNuqN0tILJbmR5IRSYmOopUULQw8e+pNPUtgp/ZSbMIqzJ+X5Wb0enr2qz/N1cpYMbnJfnpTC80ryiYcMqqAFMk4BJGaX7q625aVZsjThlh+jQ/PwPPojrPjcWuNeE6ttB2oxKLZ2o6xiZfa3/fqv/zr+vPPg4fDoOHsqWmLnE2wsX5bkRgmq80l96CplC4FgNiWcfFzRxH1HfkygEBPU58RW7tKoecvWAmtxdrJxn9rfbTJPe89iHDatdBp74XKIojwnHuNxSLesgZwwr+IQHDu03Df6uKG547ilI/bak5Puzg7+PL1Zdu+zEM1Au7Oxaiy4mrAJzWHy26bwfoiCvyijJb6Nn1pBUTQK28pAtVxC8iRMW5w1jbezFjMepEOyrqF2YaUxXvM4M07U2MjNEfa9UBhDD7GZPAdRZQHDaglHPIgKcXqIYCQ3CsSvsKMCQ8R9XRBXAGs2h4c9vRlZ7L4UYD0ChbH+xN/GsazWZ7g6qiMHmbv6tcEDrTAWpdWSFe4eVaSfzvrxDIBwUTRQJzXXtK70LDAKUQVavEWS04THGgg8D+EN/ATtikA959uWDadxHdqxBkKl9XS3moWrbgkGBZpSUZoPzXd++kTDU872tgxCum2f8PmJy1lh0e2p9HBveXl9aGhQQ3j9ARCjU4j8RluYvFUkbkCOQdwgufIcTC3WRsy88gNVgZrjlbMy1RWL4Nkwf4L/0nPy/iLJL6kFHeLrXgTxZwNWgSzZb779FkmO5zc97cq1p5Q2NTX2/vs3gMp+yrqc+C59PbfvfPj40bSwM+QTltY7d+49//zze/tt4KQBv/zySzdu/PzipQtEww8/vMl6srpGlFngBLW5hi/G3Xxiagqx4ZkMncVqaRQYGYeLi+vsYuw/sK1vfwH9L+7qfOpaSPMXV5l/5UkmIqs7lA3zkoVWJhWS1EBfz6de/sTMwzvFOe5gZNjBpGNsuKUH435sfWOpodkmT5QJXVxt33//5rPPPN810rM0twyQqoB5ZVrVOzqX65OBiAVFmGmM0xSFsr+nkwOAHp8cHe7teWq0rLELizswPCT+7cD2NlKhFCyvrXPQv3Tl2sTUpBLsJ8FtJIKo7ebrq1t/+qd/TuL66le/bMiT7g737VRetldT1+sgvrIEYmuREod+1KuzkLSeda9R8qCuz3zmM55rpudhuXH+3NTp80vLOBSgud/hEHqftImusCGiAnMAL5QcRJ5te9jZyc7Gem/keVH4DEMzRDYH8zH5i+9+j2uMesHAaSgeSO3taN4Q8LCXiyajA9OdLex4e4Olb4sKfeRUsSwp01rS3dk5PjnZ8plXP/W9730PiyMAKHp4ePTSpYucec6dO8/u/3h2Jrbno33LGVhAxsbm9uuvf+7WrVuCHGmSQSjRcqhKZOK//Mu/fO211zRbJ1UifvzgAaOCZCTbzeC5cmTwVnVKAC6t3ROII3lR1zgycqCErMJZmhxOPjU1eeoGZ7kMNysuQ/AFrU90DDBYS6I7Pnw8Y5zYPK4uo4iWyctP4fmqqWXynAXBJOjVMbLpNh32QMx4zqyHB6tra1Qs60pEE6tCfT1DDjbOgl2JDayDYVXJtoyAULba8ZCAQPWTSVQcBplNn7wE5GSyDFm3tgsKjYa8Mnm5mns8xOLL3BFgKmtTYC1Kj0IOyKuvlG/VMjF5DsAeBu/FKik/M46gDsYS7tbaFqMFWpFkM7OWuvBlZBD5Qr1GGnZQ6MnjDCFuntEoOb3EDJcUMLCIkpSD4z2597Pef/z65KEb30rePnn4JKcnNXkCTvf1lXuJnur6JMOTmyrH5Fr/QW/E2fzwfYqIoS84hTTAK0TzTfwQAi1sPKRE/rudHWaLqARwiC0iQjnkVJp7I0WN7qU0gK3oOKZKpSEYvYOuxsbPVbpFb8pRiL5Vv7fyy+m+3gAj90fB/19NGdJnKEqTE5Yk35U2hSIyWwAvTsL5V5dutdvz6kJz2jn5rmDDN2WVv7oAkY0qblN4aRS24wbfTNmtLcJtJar/zrZRx+SHnbW3sSZYA2qO0x9mxxnJGQDipvEyDaZOZ3cFAlS/lYkt2mStqF5Lm9Lc/PzYhPKksRUV3iZDTlvjp2vArba0DD169ODy5avsUsyly0tLPtnd2sUi7IThro1E4zdiKa3ESCGsOP4HkiOCHx/hkqaQgwOBswZGxFnr7SG92Rr1xs/fHhwdi3PJ0RG+s7D08NLlF5cWbZ+a39mei0hggo4v/gZ3MIrFaa8VoSpyI2zoG77y6ComN/JTobPQuIGEhotdwEQE73HFDmb0ooMmNLAiP31aKbbsFck9w0ROvCd8Ea4jxxSswlj66PSrisNyDbKCLv9O0y/huXDCszf5m8wlx5Ob+jClJGXo1fxucDFE7mmJ/bON1LEdy+xGAQpH/nG+R5nGU3StSLlNnOIZXxIMmc2Dma7FlPnFL35R7F0inVx1vBiMpTZ4U11qzM+SZAiHyj6lOlAReRsjxNhQH0dvDzPPrW2I457NFphaTF1Z5D3aO7Brvb1JzGKrvLtrq1ynmNJDjZBJMTvQp5bddJNBnL5AIPHP8xZDUEyEhiBfCzgVtDe39dABxJMnmMuJIxCefWSA7O5sLs0zPq4pwHg3/YUznEQ01AhxA/kh0EMM0tQBpcf7TZTlonIDzlq/TSNAQquO7DI8bcsJEmAxvRmYmzupBkZX1iyQmUKKGtZAGFW9nJU2vPKJ7RKCHhKOTQVs0JiYDpIBMpUWiWp/t+vcFG1aHbZQaL8Ynczx4KZ2aZbFjfCQjHDnA5BnA4uyDcNMGcdtdgedcsAyhQSwkpRfbzxxX/knnmcyRmhgW8tJT5mYAIOiVrhol0EU7trYwProueWcEjC1BeOxlUgHWamIewJJvyRrOxsb+l1TYmqMJNPVA1RoSe2GRzo7LlX9E33ACOLK5rE0p3C5bGoqFlMMtk6sAMDcCHOYTCZsW8UIXWUFI/0dG3kmC/nL8ybrkKOjYwQevUwBUKwM+jdzadE3RPewcljq9SZdKQHmV9Lpcx3OZdK8VjIpwz+06YpaA5JdnL29m+L4rS4TBB8+ur+2vkT0f/XVVykmd+/dOn/u4vr68u07N9fWFyHkERe01lY/GV6NkfmFJQLV1i7D4Fp3b8flqxfaOpp/9sO3EIYMNgnsrW+/897bj+cfb65vgf/zr71ucXTp0TycdHf1Amrq/CRFQivDltBk/judW8qTwsSxt8w7H79m3vnlJ94eb2yuOKnpwJJ7S8Po8OD9B7dnH69Yc7h956OJibHPfvb13/iN37Rmcfv2XVjgd+0wIkxADrEWtze2yVr2Txq6rPdifW6ucusXBLKDiChOPwLTfd19orv0jh4eXbh4iesHp0Pi4/bGauaj2Fub4iC9tc9KxYY9Pjk1M7eIPIiCx01tD2cW0JbTMhZX1ntECN3ZpwzMzS4QUOlXPOH/3/+v/ycCMNhtyHRalGFopZwAxnDW28sSndTpaIvjxqXFlZ2ZaURSfUGhDsWCEMBs1prsJ49KuCUbwLOi0AwwYlBLsICOvu4+nMGQbOvsbWtus8nefLdlz0RYQKJDotaDnQFjAH1y+7GewzrFJNjd2fqVL7w+NjlBuNXFunU90SC3lD85MSUzjoI1sDvY5sli4svDPbH4Z51BQNCZnJgwAS0uzK6uLrWw5dNySBUPHzzGkw28gaH+Z5+7jrvxlOhcs5t7m/89jHiOv68tb9JBtbM2FZ3x/GGfJsGbNv7pP/2nTO9oV6gf1jjYQaPAAhK8lCGQpVLEB+PyGz9+yqYNMKjh3CfEVMa5BDieGB/r6e1mR2J6kTnUyVhXEuRmKjbwDk6UpnyCgkF75/49YXxgissU3LJwaL1x5UsjDrXZg7hnY/RxYkhBmRmMNQAYOIJ1P2ZRCoad4P39fbhEhDxWmMZV4KlLY31FWdJ27coS02A/xgEW5XhIgOR3YxsL64bJSsu03QIR9mqmxEQAjUjK5IvpmGK5j8ui+LgxKL9AEnS590LhkKPFyjcMaFkUIT9xPu3FDGUDWno8Wxqy/8MTzM6qosMzwBxWU0Zqhrb/k7AjQz3MlJBvsLsCQ0coxz49XhfJFNHmlK+Vr3yd5P7J9eM3T+4rrlw9qane53r2sBZy9j5wKPfJzyc3noPjV1741nPYdpUKbMmCwCT2A5BDAnymdVWgd+K9yJIlwX95VUNX9djRWJ/71hBWbE1oVuGKVUIt0A30Gv+be+FKHkJXuaZe0yL8I2GfWHwvHRcRiu3hSXM+flNhKC3Ixbcyw0I6ywpAUwm0VxwhvJRB1VEJssdDOsWtn5nQos8V/9LgInqxPzLVLTFeKVkbbZLW1dbQmFUJOOKweG5THXEhP21iJkK1NMel1fjJ6OJF3cq/Le5yZCKQkYBzmthZz4aK6rx2ShVyqE2N0pPGuleRn6dQlftK7Syx8wuzgkRMzzwULxjzUeCdux9lecPI3uX4nZhsDuCBZ0xRGb3cMjh6HhM1EEb25yiX1RBcwduhTTLrR4c766vNzvk0wC9evjg6nh1m9t03txyODHeOj/ceHy3vbC9sbc9Rq+L7E8ks+0PMW9HJ40IQVATRZw3JmK1yW6qLQJmV1NJ8owRujuO3jI8w3qeleVJEUiw7uXRthOesGSoTnHpcoyqWMnMxApFWvSNqkDeZsj3M+sYvElj8qFC5Sd5yrYXUV1BUYc6r8uLseX64L5h8MmqyJxtjUR0KyR5qM1NuaC/5mhDIRCwYKw+VsCiN40RFxo3LKaEmZq32jm77K77wpS/ZcL8wN8/dWzhKDM/StAPcNYfCqFhVSwWitLpyKtjwCqJ0gQHAHO45NRaqmWVilrL5OFtxkjJBso0pLy6LCDQ7e61a4V6+VXTKFbii+Yjigpl6UlSAXEsPpJscCgk/rPGRI8M3Oxpbt0Ux7RuZpEbsbm/ubG0aIDvrm2IwmG1MIZtHB2i+n42x+E/Pzs6bUJG0yhFeSsNK1Y5EVWnCcEdZ4WTCnhTzW0RHuPIJfiCPPtAcn8i+i0y0vcwB6fAzvhy0QEz0OOWl+X4Cwx4dN356jlPVcnAOD/1UlT0b3KKiJx9F5h4cHnQNYsqEQgL2idmkq2vNE/cSnBc7pi237QYc0g+cGce4nHr1Gy2RlyNGkMhAnusdEyvDOX5ohlIsAJSjNPeSKjQKgrXZTzDIQOjf2FrvbG/uIvXZz81LIYF6du2sMJmagylIlnrMjMrZZaoILYcOC+2EdCVl1gLVq1g5zcWnhHR8iPo4F8iGjdUIj8Mj4l+MsSEWUSxL/Z4QJ1AX6hWwhjlIFaBVFBwaDqyK4qwrnAIQSEpC8LqSDQinpwF5bjavH/oWpk5hPYM2WNPDusygQbAak74/zQXjGsK4KVQJt/jpmRnHFLDB3ry5ffnKxXv37q6tLROR7ty5wzUDPN3Zk7NhXYigBbCh4b7FpVn7MPsH+77xjT92ktLP350nmF28mOOV7L798IOPGHAJDMTTt956a31zhRwC2qWlOaZfa0ElWFMPXL344ku7e1sk7zKAULJpRrsCanniWsD3sUb8J69Y1vjE0PTs43fefoPafPH8lKWJrez1b/zH//gf/8mf/BEPkR/+8EdW48nBkKFSfKYgT6DzEIxIMTrIVWD+jfWsXRQDTaMIK+ztZGiy9eWrV3Ul7UU2T8bHGfLb0T2Es+jb5kv0f+vtW/Rbjjp/+C//1Zqjm6r7e4JNt9El0APM3Hj/AzUiFV2ChEhoTvcTSn9yfApl2nHhIQ48MjigZDlDD8VRZ8MO83KCbw7Ro+q0JwYjsOWRUx5lwlMtGZUaIyr1uWxvv/2WvQ4Ecd6Mez1bnPgxSHKk/RJl5d/kglvEpKuycIWjI/4vCg/5ATWxuRp5F2fi7mQ/sq63mTFycmD3s2z2uKraIXl4KIOKbRQiTXHJf/TwobUOo/rc+fMcsYiI2mBbcMs777yNZQDuxvqq1QRtUytbPqVHt+GJ7/38bZ4P1CMzMQ7I8M8RRYwdxn4AkUcfPlwUwMcYoXGiSBoVDyp7fNWRQlpb19dWdne25LS2O9Bv9j2YmX70sGioqDlcYH9XG8hMTlNxYmtvzySTgNkN9xepUJsJFVithrFPpzMSWba1025OEkxzm959NDPN6erevftqxHcZjRq29yyeEXwQGJbI8GnLMXqyG7h2jN5CDRJbneVng5NG1dMlJFlkiMcz03hIzjI8fFQ3Z6B+XesroCrB+DHvUMnsMkWORqkGoiEbcPGyrOWeHPV099p4Rq9gw7WWZ373vNiksFDTkjmI79aOAjUEJGnb6RwZNQlTw1LVlUFXREAKiWmr/EwvQ5E/ubMfut2aRjb6iFixtLE1Nnl+8tx5zyNbxJqcIZ3Cc1GgOTYyXX7ne5ahbLEhTGLyYmnWSkvZ5Yvy6ZOf9Sbf1a/z9hSSJ68A/PF7P6X4sPxyqs81H3W7V737/IzwkVm9XNL8mjx344r71iel8tQu55PeqQ8JaoVNExHi01LxqbPsYkRr5gADhgHIVz6Wk7nOAlwt2SwKTcaiUoO+SHvxgov+Z1m5rBqVAvciPsWyW8opQgj7uu4jMSs5Qt9flyoRpo1lpj1thd5KPVm6wAjSaWlmCjXrpd0mkfwhWgamSDbwFkks/EY9vLrSvfl9irR6AxLEqzwKH6GyiLCBLL4QZKnsXYwJTVKZhQ//MgWQsPZ2O0Te0Zqqv5aODnmY1n6501Ol/soqRG5rqn1Un5TiywRYwIY9J7LxicRAj3P4x+HnXvvslStX7919QHM2lOZm5kgGUeIajqxum7TIUa1jo6jVt8pHsChWawmGMRX2dh8cdBtra+sry/tsw8vbu1t2Dbd1WrTtc+iFZcXXX39eYKG+gebB4baxCb5C1KEmYRa4GI2NNi8uHbX1WIoV8IZ4pQreECRFbB3nzAitrndoQu2QUJhShiEWkr187dzWYzyG4u0Dlul0VuggDt6SZQgnrXJAOqxeBKRcOIEt+PFamRiCJym44LZirF69rQ9lduOr/DxDdXlyivbyXPZfylB/eiWFtM5SrQtIaV1JiPz4KItjmlzIJlNRk22FJBkbYhtb2Dn4jPKDEPHGDldWoaevPZcorvv77JGXr10HoTGCm/OC5J1drKcQgCem17xVsvniF8wtOyMCUlDJSYUyl625Js4BzhfZmtLYtLPtSDpD0/+4qI3gEV5hChfDRynrSB7tR0MVRMt/oDRK0DA+a7wQsiE31sFYnTiZ00y41DCyQogQtUMJP95I96VX6Efi+/LiktDT3d3NHQZJ2WMHRDCbPk2LLPC6IeJwtlRnfjKO4CvG04ww+nVUJhvXI+8fHyPPgtKyjKba0sUKtMVGDtQEJ4UTpHPlZ6aCKJ9AmCfuI0qXNZk0/DTpyUw08mM4PJdsUYD5tZVtqyNWAMqnyYxrYVmZYcW1LBG69bLngawI7ghAXcK4jpJ+cK+W9qyC8AiN/zxFQZBNK4cNPKSLpcGa4YFxCQ8qpG90tJ164Suz9q8Q/0YnUNULNtRl8ppfXJ179OAgkfq4JIUYiHhxam04WZid6+i21T+mwe5ucTU6rU7wU7KkrwTFarv8oC1oyKlJ2uK+ElJ9JScNbmhoFQyS2ZAbs4VBAOgoeTys2KithpZ927fLnA5Ub5VJKrVszoxIE4ClAFmiqifDGXPzeemF1AKG/Kk3pfk+UYsUaKGRLObegPUC38bFhKsPr2jkoFD8yLttBCD9Y7KPp++PjQ8hy/mF6Z6dnrn5x3fufkiyEo9LH5FKe/s67JiYOve8sPpXn7qAp33xC69r+JWrl5iB337nTQzTYsJT164w4NpxPzjcL4jWKGPxAf+Q5vnZOduon3rmMoDv3Lk1tjvx9LNPj0+N5fCEMlUVasy4yYwK4DD6KKt/JaU1v5KMAQ4Sba3Hr7zyCePYfo/3b9jTTCLq+7M/+w/vv/uebZsWIsZHRoXiIDTSWLKXwQCMt9+xzmfAnH4042DnmUczQq7iAG2tcYwZHgzNRN8/OL584fIHH93SpwRRp/2MDA9tbhzZ3pAFLBFcsyczZmsERkJjjL565Wne3iRD9MDurE/RjE5HeJBANGdfJkOSUf/sL75jXDOIkxC2tjZtH0U/FADojfEsKVTEs0ntvIAEmZDTKibJXskIXh9J8hiGCAM5KVx1bjwkcfT1dpvyRLVinxi0v4gxIwrAME6iAgHT2tFCR2eLVVBDreFYSFPWN7Vb1cQD2PtVZMkM6eIOdgMscU+SSrw1msadj27BZyZFcIad4nq539/dtEEOlK6PHizYGkuraGzoFvQzichORQarEPUcznn4GLKaS+43bkm08Eh7w3mJuW+88caNGzdY/amnWv7CC32Eb51BS/v6179ehX4aHuWM75Rj+zY3SMZJddgoUEVkLxIYvOiJQCwyMel8d/vypfNkZa2FRysgWovN+1Y2Qw7z0hlIXC9yBoLx3e29h/fvf/jRHRyBkHPl8lOt2UskoNIi2Da2BETeURf5jIrJZDHCOZW1XvQ0K4MwbbyzfieGUmwGKytbmaUS+4KHBuw1d7eVCaPw4spuAI+8uABV6geYVIkDUAIrWkMIYNqbqIO7zCh9ff0gLywjZOStotToSbkJp/BQggoNlNlzRKZktbiHK/zIExONt0Ue5TjsK3jLXEh5k80r7GptZ88KwIWWy75VXKSKogYY1eWfMiM4aBM3JXMR6dtElX/NnL3bRCiEfHDWBgLpV27+0z/lL9j4JSmwfvIrz588dAP4kk5vPEnb+bxaSiyQ1G8rVK5wVe/lrBDW762v+JlRyE0grQ2GEYwZqGXvFL2kxloavCFaV7SHXPNR2b5WO8K9J8AIwgsSLMNZqeTU5VWFgZ2x8IIO1OVJwW/QpVKFhDAqF/Xol1NefWzyUL4Un+RiD1G+nwQweUocnbie6EVCjmIw6ogZpeGuEX3K3AZR2koG1wNcnJTgVWSEqiF45WyvYjUEGoSgKBEu0R5zHhE/EPiSP4TgnHISA4noh8L/d1MMYx5mriiTQSa2Akltk69AkXoCxmnvg1y/lWu5O+umJ58Eh2WTxuLSPHAwEPksvNrmR/HGGB/ce7i0tAzIbv91lNNWmCGLPJ1uDa1m/ZRpnaD58NGGCYCcst/CIiiYxi7nGp57NPOHDxt3tga2tlcbj3ZfffXajffeE6766acvPP/CU0ieNjcxdEGooR9dmeLZ58SnzNaqRwv28rKG0pUt6cRXAZgRZfR4ZHrOcvGczgRWu9tzTQjtHR7iewigZvZQYyvm8a9KbPBwSmZxAWeShnlzbca71kVGOE2wWjo9wyqP0kdnY7Nm+Wuf1FFzWsZf+VO6LE/JWNgmCtenTDNuaCyEc6wM+OKgROCmmEQdQNKJ+0p/aeposcUis9qJOeKK2A8LiyvFHtogdjMji1YO9vfPzM+w6YBX2WpMKjvXFaVqVxhTEXapNw0IYz0hWYmkJdiqoSxq/3q22O0gSPXTjT3E97LYyrSTwz2K3b3I+hGE68gpdrhojnDHAFJ0ACNOjQWx8AynMcDoXmsatANSRmG1iTd10tdP5heIs62xc3lulpGa/yzJRjCJonic2DvpUHjcs9VaR8ZU+IbCDaLspbKRF97MwlhqtnecGEpbe5vWmSRDuijPVBVDxR6svAU47cqUb52g0o+c4Vv+D1dJQ4qdytKKBeQ60LzJq3zrbNWt9eGBHqoQMoMuqxWMHHQD/nX6gqufPPqanchQDaoTmCg8VhVqBH/6orNLB+kWKpCIF+KuJGaThZZwCOFKovZHKbYmEzUrz/t7Bzz3JJYDBkq2OX72zQJzO5HTsYNCCguQ1CPGkn1NWxtrw0MDfd2m48PNXZvZzF9tY6PD3T19wiOCxCmF2+QycTrF8RSFOdGBtsBpBifcwEkdYm7i30ILLcKWVnii4SQ86qh5X3N8yzrnibfM9mKHyE/igDFWTq9Up7REgGpzXvKeqDuES/JGW1skNqZxlSpKHgDILMUQYoNB2GCMQaZ0XaAuoyacV8+WnpJfLTW510vlQcTo5IGmxtN9xuKdCI2CNywszStEjBOroO/f+Dl7R9P8yb37pJctfg03P3hPc8xQnNseP77/xS9+kaezf++++5Z5x3YpQVju37/N+YKzg22cquZvo+uhko11ZHTg+jNXUa92sRNbENDLWjo01P+Zz36ys6t1euaB7ayVzUTyTzJC6oyTSemvS6f5Pv4KMrY3V9+7+a5+sW448+jh2+/8zDLN5voqUw4ncKxTaMeW50JyKytrV69egxztKm65Dqs7sdd2cWHJQpDxpdcoANgvSEAL/x1b7YJYaiC1kAuf2OWQppsi5fD+7OiioXnSOtAz6ATgkRF4fvG55wcHh3AZbG1xMYfvbookUWZ56ixpanHOsU8zZhkPb31400amr3/tNwBv++v58/F+v/3hB2Tdne1N3wqQE4F+82yxorcLwVur0E0oVqPU7gr/qsYeFYsyXcnDmmD3w7PXr2Jg049ntU6fyk83R2b1W5Mz3zQRuS1QEPnYppcW55Uqj5N8RaZR2pCwVg7k3d9XPqIjx8Nw2+4OzuDbvp54ykgVBvkRKhq+dvVK8FyWyxiix8fHaD6Q1jIyPMiH56c/+REsC7BqVvvWt74JYt9fe8oRCWKCxND+7/74T/hmRXQ+SuQTN6hNcW5QGGM/+VublQh09SEyQ9RSy8133wMEiVlmoICsjJx9PqNyaon+U53xBiBrHUKSCGT20e3b+k8GBXLz8q0y8TVX4xnifGXFBCTf/YvvqZ3kQyFw7hf1wxkBxvPO/v7isv1b2ZaxvUMYik1dwutEJCP0ayBIUnV/78jIMJ4o/MPulhOYV032essr+Zl/NRwf0QpIpx2iAwqP7tFnmgMejMwrBcrDGAVmzzu7el0PDk6ZlNNPZPDK55Ud+1B+pKIoJXiuEMm9qmvJcOiGdc0aH6WLxmVpAlpEl5CHhxkYlKMh6A+LjB59fPjSJ14YGplQTpbuxS9locrGOOM5ybQXK0SEyKOd7S3B3a2ZHDcdOCOYmaGzqaguRSEBjD4tSDNDhG3VVIrJxJPSioriOTilevPk+uS5nPJn2jiubkvJXxsLCVpRuxj8Enrz1hNXaHH9q+njJXur/JqHzOseKqyowihshOt1B5+K3d7a1hw3aqHlwht3QHgBCeoi9wASdUnCvAGMCI6Hyt/TmSPYlCynEsBWqVFECBHGakMKAGdgEOIK/DyNdfET8BQFclcVlb/wFylfBik9hYTyYTUJw4NXwVWkn6A3mPGryPzl9qzt5fNYG3WujPDWL0ZWkUuUD8MYkRayUzfsURJ3ujqyq4FU0XAoqELOTbS+lj4K74+sSRyxKUSsAB7z62vL2JCGZ/w5FCInpDJsR4lVcr6JvSGrKBJIkLbnnKgrMt1TyiJoZVEnzBH+95v3O/p6lEAJp6VjPkwd5sr4LTYbAl3siw3HBx1tpmRDzwARbqYpQbyaslaWek8aNzbW2enYhNkNFxbmSOXtnYO4thmOdNLV2728sjow0reystDR2dzd1Tk9/XDq3PjB4frUudH9QxuCx4gADtATRa6z21ESDYcNm/2DY48fz69vN0xN9uDIWsFHoLu5Jw4BQMzmY9IPoQ0UxxiWn1pNRoIICLI629qT0N2JCFCIp+CtrB/b3tjZ1tvQbRcp+AlXPoTnTfHLi5wRNBbvZPjB30kDyAOmYUyq/V3v1e1npXov6s+SoVBgRJGov7nUp8UMLGAa4yLC1vW6huJEf1EXZmKY8FsBhlcq1SAAcM4wQwnMbG9fzgfDTvcOudwiMyLUZP/gF77wJT7KFlepCHSenb0l1h37aLdzZm1DZ44rwaCsJ8V5FxeqwxkZqBEvZdhbXloVMX9wyImN25yrHe+0w0mvBF70rT4Xioq41dophAVBWxwlOlj2ZqI6zcPgJC0CsxpDfyWl6RU7GTWnLnZyykOYRWdEZGZXEpXDBnaOHCbaQxF1krpdMVub67Yw2gSsK/esITfg2I40SkR2iocpnhuSiPI0CMQuWgbUQVfp4GY7+GjNUW1pKwYvv9Pss21r2kXzCWuLWIwANpksDBncIfn0VJhCls+yhkYb0qC0w2FkAT4UpDmw50NPCShGTb4oR+2Wv6EL6qVsZtUcCBDnLR7tXTx4TYsIUnk1iJyxZqSXdLTn6O0yeRFlIkD09cWZlZejU79tZ6aikOrbWw94Y+3vml7sCoJ+PnMAaG7r2tnctnU+LoJtLRZWaeQoSmjF/t5uCoLAAbEraZ4t5tygjg4nzk1uOEJHzJ90qBUSMZOykU/YdWA4H4kM19XTZ4EdSogf2Lj5ndS1tmo2j+XF9CdYCEEfB/YJo7KrWd5VsDY5m3bC6m2EJXX4hClX0u9qITZgzKW/jlCgnz0dnbrS3/6+QSKpz+WEGQj3lZxqVyn5xAyL78bW6oCwnj7EyXvAGPFWZlzPk0gnxVKpEDfhDNnTbEN4HFY94TzGScVI0vsEnpdeekEGRiV7dmF+eXHuS1/4HPdpjijE+n/2z/7Z/bnZ5YV5tbPgwjfQ4IQj1bs//9nU5PDIcO+99ZVHD25/59v3wECQvfbM9f6+3jfffJO08NnXPvPSSy9++9vffvXVV37ykx+PjI9wzhsZHTw/Nf7O2z/TyZrMMwOxfvaznz03dREABFxbh7nCGzTkJhLsjqgJ/b3QEqmjbLaGFiKfz+ugQ1fQ6Mr1yIlZNz54/9lnr/PJEn95zwIs3/O9rfv375KFzWlGGV7xzW9+82/+zd9l1mFB4SIhzOVgX8QtoT+dIS3IpoH2wnNXKAzGGs0B2Bvrq8AThttGeh4lK8uLOlPMLuchMObayTHQN0gcMi9NjJz3IYM1SU6gGpYiRxMS5yAH5Aph7gSwfWfgLyzlaGpkQN/p7f/6f/l3X3jh02jBqpFg97rPoGj77d+K+HSYjebyG4xikuJdCl+zf5rXk8PMistMpRM0Y/whTiI+5c3GV6dj6XryA+MVgtQWMueF81PuURrpy/AUaJTyg4DhloJvTRvX53xoahYDT07jupDnKk2GJQ731ik+15aWpqx4sDDZyGXWQ/xIXWPBUJm8vpuZWdReRMi8Lr6/t0zYnrT87Gc/AxkE0ROsSpjgr1+7iq6NQMsCy6srzP+tHOmrj/vB8cjYGFB8b7z5EEYkVdaHnqjVqFCxMXDx3DkRqaAelGRZnyAU+WUAveUbN5ztigo7QBpDxCsri0VnHfXKgITBwZbE/dSGMKzCzQ1XOdmZNjfnp6dn6GdjoxMUkpm5WTEr9DfOT4Ahb4MqspzFGivKsWm12IFsSAOSHiXAEQMDfk+VZCzc2W0V9B0p9LYk4hJkRalqdxyDHYnBAyxRS5Spdm2RUxu1tAx1ghdm17i2uYrFAJRQh1aKdJdxS4twNWGEue74x66VZdnz5y4pCd40TlGKhWoFBoze3oz8IpvCFdR5aE0GEfPRVjWW7CvqjkgHradLzJEsQ2QbG9t70Un6u53a1Ihh631ooR/kUPXEliFIkWbYnAALYMYaE39jvFaLCqscn0OCilzrjfsnqT6Rx5N6rTeeP/nw48+9TSm/LMfU0jxUisySeqWaub79z7oiRZ8rp5bgp8JLkVFgggV2uxKi0UP2PMQZbajAHBNPSfoXhbgyORnVukPyE5OqwOSDkupP1fmlrvrTzZOkurMWp/kfe57v609fpeVgNkXWu/qzCG9x2vFeo4LAWkOR0P2MYhC5hw4TpCshZhtl5Gw7sRIZMjVTRbUKVwv6PJPjRnGY1QCCslV85EAq4sMgZzGIcpyLFoFG8BpuhjY7cnaEPXOmr2Cj1HaKZMXXKipw9dWTDGc/08iaQWapth24QEVyfrq2NsePWWS06UeP6HKOulO4OBVGgVE/NDqwOLeodggxjuLpF91W61hO+eG0Wg+cF9d6aa6rm4XoxGLW2PiwAXT54nnRveyuu/XRjU996jnS62/+9tc/unXTGYCspG+886O11d1zl4YHx4bev3lvZm6ekDY41CDamkMkX3zxkrgAsevmHzxnbKsOctwYOBoFeFePUYvRF8Se6cbwr4EYZs1A4LM9KZHOkV9lqjm8DP/MiIb+6OcJ+xSvLHkK9k7pwx95Ci3EESL35Y2LqutPN1L4X6ArW8bLmzwsg6t40ETE8dNDrMC1llPqOh2B+pp1NuJb9t7an8DKG4ZG0WJXtGbKWeulFz7hQIyoo8FDyvR/LUSJUSnLP09q+bJJJn2ww5ImOPLcOjG7KqMsAjOp43/hQPTDxNXWvQRCTtkxsogmhJoVFR8tknM0YmEjoz8rytVPV+SRFyXVV55ojDzJFrc3EGesIQPl93X3DuuSvt6WnQNB04nXp1/p45MTU8/ObiRFnN9UsrO7T4IRG0Pvk13i0il/2hynnWy5c8iUgYQJ21BCjSlLhbb5QqYmgL5sWIg/klrSCiMw4YDsvScsxzaBvrS75NWcNEPO2hzXfBIWl8FLBQpa0NzBvihd5hSKE23ZRMrKSPbkwQTPWJrZUyGMdBXtnphElFBZfa0Cc+vs6M6kLDDi4JDJEqYV0ygCWGtb37lJAXP5/VsWjbaLXxxu2wrrRpatww3TFtggSslmT1OSYmHeBhJJGI3Drn0zGlnHRgu8lIrIZ6qFmV5reUf09jE+QlhHE/tbB27rczKATjD2lVzbDuAqJ7Aw1ueq0LQ64mBGf8lZ2+WViipB6z4/C+oS7lOBoPLWRAkbhoJ/xCabJjw3GI1Z6NIopUkmX0+GRoZZ3BXiiRrLfBL7LqxaBSgZf/UCNkk3uerqMI0y7nxFqyT5D48OPXf9aWZc5d9/cNdYsA/4o1sfuD64f3d27tHw4MjQSP8XPvfbP3/v53awCDr58idemJuft5rz0Ycf6NntLVL7ant7J5ny+Weuv/feDbatr371q++IYP/mz27fvTM7N+1QWtxPY1/79Gcot2QWDtrWBn72xk9Q0Qcf3CD08+t+5VOvcqmHPTTV1c35Zs8G1M2tpb39rYePlrQCiubmHzq5lMYFP4Q6a7aYG/eQ119//dvf/Q6Ufu/7f6GxxCUW5L/4zp/fvX0LrhpOBHAflE0GWP3hD3/42qdfU0gGY9id0wb31hzKNTe/tpK4mXdv34PVRH8u6zy72xuiChPEBC1ijHcQ8O7e5sLcHDGVp9PWRnS/tRVWrU7f6twH9+8bS1C9MDtzQH7eyf54Ms7Dux/VHq9URCDj761DQKtHOM2ZTigS8wvOXprnSoq9J1qA0Rtn9AxY3bS2bGv9loZ09XVdvHgePZBmvUJghH6JbuATz5VJOjUoQEWAtPzH7tDXey4Wt8bGNWfZJio34d6vBisbxg4JFg3JgOTc4IfU9STBQ+cWLY4he6rr4vI887ryCclaRHT2j0xp9NMBfO4teHQl2DRWUZQEIr2BYxiyvxsROqLlv/qv/hff+ta3hP2xMyYRmsaGr127rlzRowyDxw95wGPFmYrSW81tPg7DYZhvi/M9dOh+jd/YEulyVZsNWiDKT4sVMH9udto2aqIvE83sYuK8Mma//vprIJMAasSurSyhkmjYDULD9g/292HIKBvQ6uKTR1XlGeyeLscQuLz8WNULVnSam//nf+fvUfgwZSKLZR/RNcT88c/ObtI2g1H6qasL58dncKsbN9975ulrn/jKF9DNnTu379y+SRekmCLlI7z3KAejsv1Y+dBue6fFXYW+9q727b3tx7OPaX42o2i7mwz7o/iWaLKkV9pOnBC8Fq8Ek8DJIX4qgir4w0cdqduSdcO+/uxOzuTCE/VICJb2hw8f60I41CUkfqSju7NS1pJDlJGGZmq7cEwycEvQBTixJ1o0+HjwuGmd+w4OpFvCaMoyuC6IVG9TVLvFWfOHyvyfZ1aA/QQ7B2hzS7Ylg7cYluhKAl8oGTC68kxg0w9JIdJTgaP8Lhc5/+pDT2SurwBRc3siPcnsXhXl2S+ey1yTRz5PCTSV/5zkw1qFb91X+ViLJM+h1HyhI9x7YgsfMisTUOqAaV8BQM/WDwOBYVB8gdC8XmxpS3trAr/kXp4n937We70m1ZxpYWmvJ966B4lrfVsqOb3ElSY++fnn/al1EB54bpfsxXoI1HwKFDNX6s//yVA1CHKT5ULQssvKZgiozo3a7XHIlyGIQgyZm44EXNRsmkaBMeBjhLFecrGlKLCieFOS1nqrHMjjlBHp5Ukywvzz8Cx5U28L8tPdfhbB9Ky4TI1Yxw5miefkLSAbhC7Z5BZC2sBbtMJZfu18go+P2PgF6DCICF7yoyzWWL0JKm7/Q8P9pk/mf0yztU2Mw+PmHUY7ciNjicNuYjTFK37wA2x987//P/63N268bXcxhDyau3/l4tMi673xxnudA88/fDTz3rv3xsdGXnzhUzfe/+j2Rw+JMSJDYukciXVgaVccyqGLIoVUKyGDP5SSUZgNIayb0I5shKvEJ4MEp5N19RACYhrPSQWFoiKI6KY1X9viBUvkq4JhP09Fh/RuGUcQV3o7iC1g/OqoLKhGygkXm7lV9kIq6VOdXpgDqTW04XdJtSi3bmqSDasHvMSopiqVGzj2gB0IPHB8MDo69PInX3n2mWcwMdw2c8F2rLMlmYCRQUgy9GscRw04XdADv6q1zhNkWXD+U125Lo4zmXK3ZW19k/9rZxuXr7LOE40YEoh0yNvYaTFasxkhtFnGkWbgtdBTxju5WiavNcFVnnREGXQ1f1wEAYPR63gH/FnWsRFceNkWVndf5RAY6kHCooVXNO05+rex2dpyZxejWgJ6YL+TjQ0L8zEMm4zKZgAkwFhvgWR/fXs9BgbOTNWuAIjsoxZ3OEzVL0NS2YDJT5q3DtRJBlvsMQVUq86lpzRBw2VT0pPeoTpWZJYGRvZFReyFJiBlajNkqt/UTgCnDFi4oK0RjA67ko0hE/5trn5wLxH5NCGTW1mE14ktreswwCWrRyDYVt5xMVRRe0KGCdlpmjLx+n+HakzPBQM5Q70YJnHQDO6ejKhAXmHgVKYmhdVYRCuHYzCFC9IiQ/MujQifaeJ9blQ2Li2zoOkc6DXMypTNVntIyCMzGD7apTRdvbO5ZWGI759xr/lPmFtQi8ibowzoOFtg5Qch2Dxh6NFYN+WTmBoB5n7iynhFnWyWWOSBFveBMCdFZn6XWTKVW/siZ2OIBEJ4Q1yeK8dXitLeJym9VpIuNq7xABQC+bg6dotvsnYDZ31l1ZWVfXONUO5U00FeUtZhGd2Ry6dezvZccZnEM/jX/8O/Mir4jl9/7tnvfOubBKHzk1MXzk0QHgYGBqcmxmZn5u/MzmB9P/nJz2z+/clf/pCKde7C+SuXLtofNT7+rIUFnfij7/0lBobCn3/umTCBhG9yNMAqm/rszMPZ6ce6b3FxmQ2bPoAi5ufu0/mdzk4yAaEkw8LP466pu/lVwsOHt94LAazO7+5tiNYGr89cv/7CC88hkvaOFirfZ1599fGjRwjAGa0Hu83OXb3x3vtPX32ag7szB+EEJIhKvTbeiIQDe5trqwYgIkTAWSWli+xsHO5uMVetry5YorN5mmdR24VJ+NORtgxjvmPDQ3ycbIB9/OD+5Pjo6NQUSX5hbpbNF6Gy0xPxCLSF05JJD/j7dbYP4RnOkkUqt27fS1T+g2NwzETYWyC2oRWc4NrVp/Sn287OoZHBocIPo93ark2MMDDQbRHf18nZuASKJVogDDLbT37yI4ZsFIVX2FEgWx0yWIQy5XEDmbHiI7+dPTtps+d2OzM4BC4uL6Gd8xcvkE9sOo100LCBOA0c3SFy3dholxp9bknKQMWSOFBRJNQoARVu9Rp+w5Rj8eqtt975/vd/aECRMyNiYqCkf7zY8JifmyEKmynn5my+Obp9+5ZeoHUGvK0DKgfBF5TYgObpe13lZxjBSJzU3fiJF0RItVNbQOLW1qXtbQ6+INBsfaDNnI68gho1/vznP5cTwVEMrFw6mstoiXThRG5nF5eNOMYk7YIVv8PZ5jsHiwuCmWrjmqhY//Z/+gbiMxTV6xkDBrUKKynBBOIlXMc5BNnOCI8T46OEoo9uf0AP1kkXz09cuPAZNgeyBVEKg1Oag6ztSVpZydYQjr5o3fSCTWgUsAkfdVkQ8IW3hKeAM/RaTkCziu2JzvMJ1cU1iJ2f1yKx2vwPJDl94tLfN1S/qqhTu29lQAEwBgDk4hNMUAaIjWFJKtmIR5QUXeATMyAMaKa2wyeLKFuTvsdb2Krykq3XRMObuZVzS5s4eM5ASFCHJlOhhdx2urVyAmMR38u9spNU/eSVt56UXEX4KBmePAwkdZ4rN+VlLmHNpdiasz6pD937yr0bFbnWwmvOX2KrT178/7pRCGyossID/7rDQ7UQD9Tj3iThraPiFKbvEDMVzmsfSkDxSbFKxxwCpQXre52cZQoGfAtb+f/05y8aWF7lQl7htFDzpOKPJQA8SVpd6lRrZEk/SSgR/f3LBbix+Ba5JyboPNK0goSAWl9E0krXSP4U4H0UOZVeZxk6xlSTMcmQYGri5KKQk+5pofgne3arKQrxUB5iYY2DLwuncoSJze4lAzHSVKt4ZFm4LB2lwqTawHpfr4HhLKU5ofkoPOABXM1fIM0Fzbdh5129zKIJOCP6p+mxLCSS6RE5XSmacIttjn28Q1qOEDbP0bUwxL0cl4FNG0yI3+oo3d1UzeFHo3r7e+0iuPLUU7i5TTSXLp53DsT0zPRrr730B//8X16/dune/TtWQl/5zKe4wAoB8ZXf+NzdO4/2j7Z/4zf/m8eP5p595mWyOOAfP1owiJCMqQphVciDKwpP9LQk2TzXHTCvyemX6qdUMHWapxxpDAnySG4QnoyUhjS79KmvNMRpNUrAPM+w+Iu/MijtybW8OH3yi0yFQiqd1J6oHVbB8K2fqnvy0JP6bX3lOdg00DWsinAcdVAtLL6Hjsth+79y5SmGDFzYMikPDusc5Ju0WggrDYnkf0qNSlO49tba001FtMKFxoUAF++1YTBvC+MymbRF0hesMV5kDmQDa7TKDCMDOGQPLZLfKZndOIPklAgDdkkQ66GfkpvTJjfadjlE5EqIzAbeWENtvN4dqHlEarSqmoRXDIidISWcDvN3o42idEg7rcws6M0b2cBGjDZJu7dnVPk+RIo841nnTdIZleH0kXFp22i7qL6R8fn2Bzmx1ZyUNWJjLupCshYdgPFSgYXOCl2d8RkNgWRt9xYaa/tsiQCMqo86eVkEFdourofzU22+tAFP00rmBm03m1RWxhaYKXR9XVFhC8WL1QGnztlyb/R5bvYxNr01VZnu3adHguoT8yBvGuCa3QgZQDKbG6QKhwfJJzCTxtb4CsWKj5Qcq2sllYTaDUlx7mrI2uLKikUMRkw2LZXy8CBtmO5rya4+hHbt0kxggEEVrrV8tUv1fjpyS7Yd1xkZDD5UAvkPEnzriQ+D3pIoRU+eANU8gMhhgLzLRUcuLVIa1HG7QuBkkgReFn4t6wYZv8hNjXhrJTyF16QK1eShePvxwLQE31ACajmJOXFj6JxUrq2N9ZWl+fWtVVX09PXcvX0nVFT0Fix3a3UdNXFn8rb6oW2vr41fuUJcef7602T3G+/+XFh9QLa1d3C55sKwthzDPNP48MhId3+3FQM2Ed6P9+/dte+W8dxaIy787rvv9HT23L5394uf+zyfK241Ysbf+egm1SJhLht611cXAf7w0V0+VHAoUJsrvY7JnyBE5FXarY9uuiGcQP4bb/7Egt7YxLnB4SEGlx//+C9vffTh/+xv/d7m6srtO7csAdEErl25evPmB2RcRzC99fabFJ7Zx4+450MIzkFORcc57aKhiWsWjFGFOb9DiFN+4URAIce/fnTrRtZ4HZLcQT+ZMS+KN1p8MzuNBKfbGUp0UBMHwn90fxqp4yLvvPue8m35o43//Oc3rz/9NGdvRAJyw3g5qyJttMQPb91sae82WXEP4XdCP8iW3Jh+Yk0HA6ZHJWCXMEaoWILicKOAEx1qcKFe5bgaWX6CnK2dRxbS0oNwxcmsoxxlwN8YjUEpbHjrdOcsju3uj49NoZpbt257hVyPTzo27OVYW9/ePzIHp6Nb2zfFJt3aAi0dAJaQt6t6aQPp2pLIqFpHjPQL5ERHnkh/8iffoF0YQ88/b9/IwL//9/++5b1337EDY3x0zPFspnxM1ayG4N782U8EWvKZtQd0zCI+0Nd+6fKVt9/9OZLWMO0x+NUBSrhwAztAcQPK9NbWFhKxDjA+alXhmswIBVJgQd/4yhNjDLH6SsfAIPZrYYv6Iaa3JgGdHrM1u+BGZADS+fzcIhyhFaKzXf56YHZ2zlSkUjoGp39fDre2U3Sq1SSNZ+exI7Cwxew1azymPjY19EyOO3d4aHJiFF9AoNDNLIMWWd/M3oeCW5/EKjm/tABTINRGHNMNC5972AYhjqHzzGdAghP6t73NsGLwa6CONGEgG/npKmCAFp3hrQ811MQJw/iLfoINhcMMfqRwCyPQyIHM1ecKN6R9LowaRrC1Ez3BsRXeqtqag088CYvb3eO1LWYYVxfCiUnFrKDao5PEkaRT79gs39Zpc9pu5wk3Ohqj9YCujd25+dWd3QglhgQIlVakmlOrIYDBH6Z2dnXzn0hPcj65UZx7BWiFP6X8+iRlnlZWCq+vav4zev7VqjIxllRFl3r1gG3v7LlWZ4pSF3msVqqe3BS7NfaiB49YLjMXM5YmfBeAyAFMRtiOchhngdFuW44SivqkQM/TjlT5BNI0pD7/xaOCPj8rkfhQ8qv8I3YHCZLuBlK9YjBZ+ybWEHfOcFJ04ZSadqVFuWEZ1K9AQk7ZPChVm28yBTxl6sciOcRIBg11nuPGblLmlsuVnTTPubHxuN22A44+LI3q9I5XCyTxj1C4WZrw1Rb/BNY3zQyopYra5CK3GCpa9UvLAQEjUBWwAVMmyvyUU6pABs4UZjdeJmkt0pQ08vBAXP9SEYtg94ufeAEnEelraXm+oZ/JRMCW+OBhuUZhb0OXT7j2Wae2u4Y3cV9fr2jpTMh2cTFkOHHpwvlJ4xEeZudWO9psmB84Ot794Nad6Zn7RJnd/e2ZuZmF+eW55bmnrl779a+/duP9WxNTE7v7K1/+ymtGH5a1vrZt54hNllGQStI+mMbv0tQzktAi2IcaCCXTeF6am2MBeN0R6XAgm/O4Tnpl+tdHfLDNTG5KIcgi7ge95bjKygNPyzxDWsXeaY3+JIX2JK/QmJuyzlIEThRQCAYyU07JU8m3tqI+DEGF5k6TNoZ4Ulo2rSb+BH0w0RKPRJ5+7oWXnn3+RRyYxzAHEKSBO6XSQnWu/oYaYpjXu+ohNTKIMJSQcPGobEIgLMI8Dgww90QoHMx2i97CJ23JOCjupcUBiCAkVmPYprJcecGya7shkR4ATN1nSYZ6W/khLuOfxpTBF9Kzl5esoIRsa9YwgQaM9/0DEz3VG0f3pKeX2SzbumzbNTRXVm2/28OQ+an3NTZlFl/fCGK8VmSOL0v5HmhX90k3x8J9zkE2vXDBsr8opwFkji+ARTGqgyCjnDtNCWNlCKRp6SM8On5g2iv/aSDmMmaUUHoEU3KTGn3lCQVAZ5k+4FMMPSYwdlZ707UK8kUdqV2P+OUJxyvay/JyfCF0nInPzOttqm5omBgfV1pNPJWVD7Caaosh1lvPJTdW5o1DVbvPCWq8xststbluiSCt9lyN6nWvHDSKjfD7IUzHnCAyt4mPAtxi53GXVpu7RSRjfDiIlQovCNoU4luTnRRp+6z2Wqwm4B61x7eKpOheYwuFRPmRzTzrI3QYrJ4l962JrpZRU/HDFOghgBGtr4p/yAkNhUQkg5mYuiQkGMiBwY5XG+iqXT6sSfFnt+A3orECrCMzkWaqHpcjdFIs3yd9He1zPONrMPv4gc84OkZkKLGqgzGQcATv7EJzgIFSvbC3O241x04VyvOlC+cMSZTw/IsvnTt3wclii/NLDlZf29ywTQJLJiaKjyg2icGoc60FPXPtmZs3bvCS/1f/8l+en5x4842fIuw4z3CI3XhAwn7m6ess4Pdvf8D8wYhx4eI57JeEpsk33n8Xe3XVI7Y4CdQOjN/6zb/xve9978a0+A0bi8v/4atf/erf+3t/T5ijf/Uv/vnDe3cZvy9dusC5H5cjSuliXYlgbBFeW5ovUSao+0QOujxxBcZwmuxnReahBIPk0F7EMMz2tiYn43544x2rjuurS5jq4vyM1VPzl1PAOttbwDk1kU2yX/rSlxb5gi6vPvW1F1ZX1p/rG2Z6toT1ne98h8b1yVc+8+HNG6DldTM1Ncrwp6/NG9ee7plhqnf0mp2RovuI1GTy0BdU4sPs8teDKJCQgQDQGC0YP6f6ojFdQ3hD/FpH9CXWoiJVeCVVGpPn/r2H+5OHaAkpKndnnZfphqbBjBPKRLq78tTTqhBb0lmKP/3pT21Ru3DpwsT4FDdEFgefWHZSy4PH03TaweFxTbZxAyNlbmAZ7xvoZ5jSR6PjgCf9RUEd6BtgUZqdX5yenf/N3/6d8zEgM2X2fvqzr7fQXYxNgNLwoMBYsuJAfSGy8wjq6R9YW7XyR29kHdi2CbWv20EhYU8oADoMM2ThZ/DS0EA1rJYAsr46NAADQqaGHz0MD1UslYBcy02KxoMOfEKrlsdbnlg8FmG8y/HgxQpVRl22Ep76yTTm+DA8QtXUCEbb9rbu2x/dffRoGlsWyalSWPjIYXYmaLxE6lULG4Yt0uemRq0cid8/PDRIBbxxcz5ikhXK3eMYOqhX1hlsJ6dJlY22C6sLSAdsdtW8/fY7qJkKqI16F/AEl1JLGKL2qhfpJLRrlnIs7e1vbTJPxjwDOYhMc6SwqoaWo04xo81niU0rj3ZBiO6AK4BALO0IZlCSz/WIiqBaK+RnPVGFSj1sbjFvtRRLGa9WC9uxRQnkSeSyvI1Sy3GPmGjMLVJGVmYuxogOJ9b7wDvRtNcdAikUlwlQnpIqq9QRsO2Bq1f1moJKNr/rK9dfPDxjsqd5ygsfRjgyzovIWzP7rfx678arZCtGqY9/WzP8/3NVCMqUClSB3FeufoZvZwIw94R+PIc9Xclm52cwWUjac5l1gaKKmBAzj7cpoSRolL+AfToRehW8nuHNT8knSRE+To3fftU8rrWlCvl4inxtySAW/4JMv1NXhCjozzMPgi3N8X/sfT73Uy0m6rww30hi2BAg8k3opGDDXzeRGYgqiNH+WvndE3tQe2e3FQAIsa6uUSUKULGI7uxv+dAiKIHITZYRNK1F9LB8XlMaX5KfWnv68AwDfkJXTR9/Vb5gVoHkols6qJJRjUS5x0LcbC349c999oWXXuR359uZ2UcMLkPDQ+Bj7DNI+VsYgGlrVu23faLtLDc8JnsOmBL3bNckg168dJ56/6mXXzG+zEA8W770pdcPDjd//JM3nnv+am8/3b6tb7g36x8xyLUvr88N9Y9cvjLxX/7Nv/MP/pv/7ZVLz/7Wb/2NaXuC1zehBUYzR6VTIhhpTr0+aV3td88Nc4B5q9Mr/XiIuDN4izuQ55itpFhjkBRakaMou+LY5OwJ43moBGWqr1bk3p2clZbSxaGPEHNeFTt0brAv5FFURDc1fwUyUHFGiMU9wKOQJ2Tpw6SUHV0sf5B9Gf4q5QnBXv788y8+de06dmq246fvkErlhDvZQH3W0T6uersagZJrFIBqPD5VAHA53Qcb7BrcD4wTWOpq7motpOQTvBJtAsfYI+SiUSPKUOWQemgzKqHKupzYF9p4Vm8FoF4LzRf2iAOeJQ/Fj+ZNO9DTJcYVX1GIE0qoicnGCMI6M6cFIeYjFqX+/u69w521zRU7GadnZx1RZ3yC3HQJWmyWiREOlQpON0CySdFEgNiKo0grYRGWKSnZzFxSxlw2+5Ze0QXN2Hj0wqIsqTlDUtI8PygASg76zpiPbxVTh4xnoE1XNrGebnAcgc++/p62IWJAH/FZglugKhBs4JUf2lGdGU2vaYjPPSSjmMHdgLxSiwkI2uQ0+3hYK3JVjtLAULNxTA2RlMGudmzTc2XCkg/lVIjMrlVGv3j5ArspkCIw8M7jWjM0aAfu48fTZgY5jWVllzY2UZUdk1Vpo9ZSQVIRgGu7XGuPA8xXIPFWkr/WCwb3qpMTCbvXigq8+9YGOp6OS+/II+GpMlAAtJqEQDvCVdj+IASbFUlI1WWiOJ34fJi6ygBUbE1KkHQswZ1YwLs9HmLNO01sg3ZHCBHuENmGRm8pamQG6zX4vq5nOGBB1I2ghcAOK67YhcXM7v5nnr6iy4wXRg1wvv/zd2yBHR4c0j6mkJWlxeXFxW/9+bdUO9g/8OlPf9pgefvtd5eW5q9cvLixs3Hr1gfTDw/aGtsWZuYX5xd4Yawur/CuvHThosD5TMBtYqatrAvKfOXyeSTX4cit3p61tVV1Pf/ci5QBkjSJ+cH9R7ry6pVrImC6R0gEjM985jO/+Ru/7TTV8fGJP/wX/+Kf/4s/JINOTo7jEuPjo7qgdsr8/CyPKm20eKaBpMQRSibpiyRkXcJCm9mHQHN41EEVK6s6qEIoClKJTrJyHSnraH+gX8D65fD/o73NDSeIrS7Pz37yEy/1dncq3AGX46MTkyNjxvbiyvb5SwnCwyJ+stD6X/zu37ZIwob/lV/7+s9+9hNU2js4zKlUn+rr+eWV7p5+Y9DA1i97+yzdcYVE9aPDIzpUXzO1c+A0MhA5Sv7gg0fUQs8J/cYXItRfErmiPlGFQURYJ84Z++ez2XoAQtQom2OIensGi7DRwCwFXYTbhw/jytXTM5DdaIe7tpo3jBNerIJ1jo510yS15dlnXqymcwzZeKH9WJxeWV/hPL+0uoQ/I9fSqHUgWbMFDGHyhRdewtbU4iFeZVKzzLp/7twl6wIrDqJDqesrs7OrvT3trDJ209LMuBhevnSVTIywZgSRxW5aYvKBDp1B4Jb0LsGUWK9HFYxM1UdltBBiQOLPUKC3KKMGkoRodD+zN61A4wEkka0tbNlSoBB6v0KgSUsc1mvYIz7tEcXZlZBgyFmvsDrBMhc+vLfPBAjCGKUOD2G/vSFWB8u4iJVeAUjtT8iOg+2VfeEcBTjoFcXYSQpCx8YTPws77Ww1hEMozjYYe5KamkD1/s33vDIM+PLqaXsPeB8Z55R1X3kiZxn2zLrx86vJcyjyPA+Ps/HI1U9twVMkPcQCyNtMW+QBLVBhA6HIHCLa2XGDgLz1lZ8+x2kVazQaM6gENgJT457pIvo6MT8Gr4w3LScs7Wybk8ygxP/ICSxSOQPnSICFLivXTY0iqBCe2kTB5iAqrCiCU52KFKKi0n2Zwj15kurz+qpen7xyU5/Uxj556xMp4sYvDKj5SLbTV2X6VLWEb368wP+se6WBHLpcdaJvoTfSTDAX8RbyYmsodgi1rzrru9jYg7TW+HGB2ScQiK7cKsETOStsXhW/3PCCyODlrQzlIxNhMCaP0lylIk+XqbhM+UFCabLSnjS8PqlFoRXoTi+l5Ij4T7LJIJni6o1GlS4NEAUY3WZ6Rhfal6/UjmvKDBiiv87k+8P8YpopdinEQMKI5CYIIs4rZ0gCC24Q1MK90XBQtFT2uSbOu4Gz6DmK436vCp+Utp9CdPazPCuIcPFQTghHmoGzSHVgg2rloF86hTGNY0AZLwoDjWn86lOXLTdfeerywvK8r4wMEVQMlqG+yb0msrIz7beHip2MMMuknrDaIpOUkbV/yPOqeX1jVwzQSxfOO3SEDQwHwzdfffVTn3r1tbv3blojHBwZ/dIXfmdtfeHf/E//o+745MuvcAfq6ehZWpvl/X/zo3f/zt/9vW/9+V9ubq0SXwUgpU63NScYKEzKn7bAbUFIbbjrk1RQELlQ8tBVk/m2kHMtTwsg4gnDNiQQmQ67beXflS9dZnN/1hKFJF7pPKjLICmjlFPGYwRGN+kvPVCeB8O1aje5lydvyRS5kWQDMJJmZbcqinVT6vIwQzLFSmpPsYxMMT2i4XQQkVeyNErYGJ8S1OG5tkShxigj1bHhsvLX0+6UgBIjkGdBKEBKqlYvjgpjqSP+ElHw9DLp094zTG9tNcNNTmE9EJYZt47fCjBUMAsriIueYAacgE3wzOryC/pEmBLMT+GArNWpIvCX3nGvLoVjpJJiPSjzBaP/Nn/fLIIlAG4Axj99dcw1zq6+9XUxN/h1Cng6ODyycGh1eX1n72iFc+gsIYZXXfw86xJbw1FWvKV0YGObzhM2KOuKTDPciDTHSRcF+aqO0SeynmGWvpZNn+NOmAkjju3AvJ4MLxstgvyiSNV2VcUg4ztyfFYbZAgdRqA8sXFOaZ5Evs8boGXaHR4arePO9HFIFM1yxD5Z4cHmAzSgKK2QlIMX8BS0fU7X+WlpGavkywOxJhr9BQwIZBmFSOUDgDBkv4bMtSg9pSivNBaKPC/5w0j1SD5pa33waFq4evc+wYOVSdJQEMYZ5DgOr7lB1Bfl+KkcoyDfFYE+hFgc5xQbvlFEeXncKEHzfSLCN2alfA/N2qXHQ/kEAHWpIdNqsYAqKk+2T62z7stSVSL0SxgO+CU4FB5Q+eQHRMgReM1RcWVvoVpkUE4wqPq/LqWuQyr/Fi1QAglR18KGg5/E3xR60KjA8zg/0uyHeFs0teGyaIPJXBB6LQKWMazfbdsgR965feu1114jvrNggoqj+ztvv+sAdWZQ+6NGRagdZ+ifnHk8aygTn/hMqhR3JW+gNrsadSBmOT4x+ejeXX4fjx8+NF/OPX7UIxzi4HBv37AdAYBEV1uNCfeCpz548HBycgJgM9NzYpoLtCDMuj3Emwlc4+fCpUsXbRznrMNGTJgcGx/98z//c74XquY9GlMvX7ujo+nHjy01ONJPVAm9YzVD4OaMFK58tG/OqjmZMQsCvJlR+S5vvZMjYdWtd9tkgyJJSAS/7k6bx62BbOgdV0i29kUBoB3tbK+rzqYF+wEYyG3beevHb129fKXsDSPrTrE4dfb3MhwsrG785CdvGC+feOF5H3b2CM2WQ2Mq/ZDN0ABL8UCf9bEWIGLL0JgIGnH638UHHs/OkdZ4d9N20A9gEAKM+Skmksxu/ES9uBz800NGRyZi+k4Amwi6HA1QkX6kSpGHqdOPHj++cfMDA9X5ZYLas2Q5bmXa3ujNLTRsAyr90EQELAelP3jwCFE5Y2R4xJESw4LhxNM7Z/ac2CwdgLd3sVk7lXw7M3tLV3pI7gYzJsrW3fK1r/0Nw9tomZhyQvA4Hc4JXxcvXuru7R8a5TZ3PDuzCG6iNljtTKWZ4TxqrbMUCoNBzfYz0hUSx1P05+Hh6GD/6uJ8d+eIdmLaaNdXxjOALAldvfrKyy+/xLgOTfqvFkLoR/dYA9XzCXZ8wrBg993C8hLRDjbBA7PrvNsbHGA8Y4RaTwCA2RgGsQaLWRgi5q5YOQGJbQEKY94XGXdo5PLlS0JDOvRRvGNbftVojPmHF7d2tvV0YKZ44omDHppbn33/1g2ru8Y/f0Eu47uz8f8R7Tj8Ead3dswRf9IOJI5vlAkmAkrylIiTOtiNkYyHgo2IT/+hoiCIwsLC6I0TeayFyEBMwTRgCWYi6GxvI6zqgmkzYUNTR+wj5DoBlxVsU6qIczkfgOzvvHkyX6ZgFg3RC5lqO9q7q3mJloLFEfeIHOygFiiOcmpN89buXkdrNjurVO2mHslyUiJUF8kAkjPThcWZ1CP0nCazZuyMp9lk9rxyQtcnP+sTrzypSWPd1ELqE/dFoIoqFUsAuGLKieFTkTXnX7mePa9FnRWo5syUsR62HggaSQAypUScZbjyFGBwU0ygptvDhDXAoDVcsgAHNhVpN8qhPxCI9Y499KIBBedFqPYWggM5XEvFSgdOvZnaqwLgR+Y8ApbS0lv+lXYXZufRxxSAJ0hQmBKLzB9M5nlZBPcXYGVVwGSg2+SyPF5wyEQbqTx5o7Rm/DGP5pU5MEFg2VCTxFpgxKUA2zLlW4UHdmMWevh4i4UVIchtJEsjyMI3B4V9qwVyepOXwMtqdmz/p3Llx26AlOdSkVpK/pCN39pE7oEoUjN2BzJYDWqZUW1hoADsicK24whHAYeIWQ7nELnr3PmLE1PnyZqOMGRb4ZHY0W7XLxqmTqciDprkb4ghU0JOdik4zzt0zHDYajWP/DY/c++5py/yXvnEy596842fd7V2/qt//j/cv3/n3bfu+uidN244hV34OFZgjsddnQNLiwtGImKYmjx3Y+fOiy++yFGSH6dwfDoUHlGRlqo0nVPM52lhuj74qT3liqdVDhCcRdQIqdjgIDSe8m3KUEJZNzYZWvTJ4EQUoZ+ixeEsWw6TP97NSI6aoaFShP4os3DgCqHoI72j9ZFFvdXqAklGJlt+9gKFosIyeDc24M3ZCbrPkA5kzTFhyBByKilDL5TbJIKaB7Jkh7jdIq0dI2OT159+TqAFFhlAx5uZN4K546TJJIBZAd4/9JLt5LSIwGZy16gMAQgDBUmXECQbtkndEjZEFAsLIIKwGX8aMDE2xgMAGTMLGosYAf9gOHFkrCMFSJxa4sBDwxoahTdriKeaU29JzFmUwcGtfBcbSIshGir3w/DXhPLv4rnzZHLj0rF4gg9225nWLGQN//49ll/DwUuc2ZHvhkx3X/fyGkMjT1cHiF6k/GysrlFadJUlf2yZZzNcGREIhuIEjdaHCbYmI77qNCHnw0kmLfghb2Pm5prwgwbrbi3c74Lk4kGU7o/RqTA+cO+XnfdZgAmp+UAbdanpVlFwA/+wcZTTujWozWoyX9EcZFaU7e2tdWqefkGvZUONvQrpWNUBFRhKrSzIQ2zNvVdZC8msFGms7BzgqyBqNpFDrMzx4omhVl/wIyp9FGdJZyTFrUhC52E+BQA/1ZI+4jmzve2VQrIUPzhg7JuRTeJITX44hEmTtgy+BYaNc74ygoz6dF1JSvBEUaUKbCQ8pNSlXSg59xoRm0eOA4PmTKz8iREM73ZzqxIkgMFl8IkKjdNNgVMiVAQNxXgErU+MhrxudJ+fvHQIEs5PMvyVZgE+bM1OPz3j7EzhYpmLC588BbcMOgWSZVEVUaDLWWkIRhszrZzoJzLZ1PlJnAodWxXi197R1W0BSH9Djqcy2x1cMLlJ1+ZGThGoHgG0cebUiYlJY2dn++BTr36mtf290bGJ4ZEJ0xm3nIqfidExRtUH9+9xyrdb6sObtwa6B9iQyJoswcQHAleEq+bmc+en4Na6BLrihoA+xQXaWd87f/4CeuPYHG+L9hz2CoeTk1MEXwE6n37q2o9+9CNm3If3H967c8/CUzB8sP/Om2/ZUkV6FoLVcbBDA4PCyc7PL/Kl7xoU0R8hiAO5LhoyVx6ThNlfhwnMv9u2z70Tceoh/j8UT1rZcU+2khr2mcVi39/Rx8wE3JyMTeDZqAO5ut5OMmfWjY6PZ9o8iiv70WHL8tLCs9eeEkhYDH/bO8VEGhmKjZXQ/4UvfAGS8QQ9hR2xiD87NWVKQWNxRNve2SQwiLqb7TT9XZ3dnP7Yr4UA0ikM+d2oeWAAK2MLxpwNDJCbf5T5yiufRq6qCIbLZvQyd7StrG/c/PAjSi+Jjn4yMRXdUhPGJ8/Jn9PFent/7etfU8t/+A//QTT73//9/w3vXHoXhUFRfOCdr+KT9bVpnUhk11lQpwqzoRKEoYd2vcAzCOqEuLUeaSsvif+rX/0qixhitrnZ2ppPhLNvWVxa0Xhf0st/9sY7Djm2iLm2uX//0S3bY2whHBwZmXn88KMPP9S2609d5ajUPzAANXB06eIVq6JceuYXZq9cvCQALc9dIVQ31lpG+jqNrafOUUYd9DHkj0PIbPo2PPnhmGU1/9lnn8FMI1gjmXU2l3Xk9eInP2VbMK8m0Y0I14IoPXw8M8hL0D7jiXFAFzw2byX4UA5l4ES4vSNyf3NvXz+yNKrtAImE0dDIYm/64fHpWiSMreWFBSFeUc/O1gcffniTLdLSCU0AK0AEWCWyoINaV8KIkCnuKxjIK5/5X/3xv/23gi197de+wr6BZaysr1kYoYwNDwzaNGPacEw9jdl0h0uyRLKLKArVIpQyF5hO2qiMdjL4SUMdHOr2U6QCoXP1jWZu8PHb2sB57957MDw8MjA4xJs56zC94rl3ccV2MguIihGhoa93eHN7Z3d7RQhBC/GNFs6bc/pmW3dOUDLBtDR2OM2zo6vDqDHLYPwaG+OrfyeW2MgL/I6i1Fp/PD5YR2QqTOznxma+mMDIZEbxLYkN61QadjRynah4cUZWFsFQxIxYfVRR8kbQwRkZqowHyS85vXLDbpVJmQptMsPao6vmnz4TAW9zb90OdnJDNJni2ZvP891fk6q4kxclg5+pXRMxtY3N0bFxPmBqiA97XE6tKsSX3Wk2xMRVkYatumIniKkY0kQDgAoqro4zhwuBnL271KfOKIdGBClhswwN7H5/Z4uMSybg1mg4GWyNbebZImkVutHvEqogE3ATzS7dIsDDQ0GFn5nsa6si7gdLgd8TOgnMm6FATJRK68hPgvUXCTJ8UbZkDGa0154nknRpPpp3iKcTBNHiDqvV8vK8+A9ayakUMTMUWsw82oUQ8am6IpOmUxu4t9siZjgXeEgxlpJIhZE31GAOZqhhLShEZK/AEZ05cO46D5XyYHTJieaaWEackOZUFpqwOAkwoNE6pI5ZkLEPLbAFsGsdHm3u7rV09vDZJ0Jvboni7NCo5fQXY3NvH3PJ9NLCAcmopQOn4YNtt6S1mpGxqb6xcZOH+PrPPPP0Lt/HiVFHj3f39zg+qOW4dX9rZ7x1bHHauT9OE229MDG8trgnwgVXjLl7H7z28guMJ2//6F2mhI7mka2VzpaRqbG+idvzNyZHJnfX25eWZghswyOjFyavfuNP/vznb986N3V1d+vwnUfvDfaNJFRMVkhi0bRlFBIieKVHc8BF7b7g8NRqyyzKBsOjQJdG2ErGhuymqDRgyBhWRcKugiu2lJmtr7/14b1bC3PTKkGTe/sb41MT3KqxR6GE1WK2oAsR4+qUo5yS4vFpHKmoch45VWxywiQl7DITfH8fgQaALft7X//61/vGx3Tcnv4r0naAJFAU6RuQdODN1dWl9e3hgf7nX/rUc9ef6e7p2nJua6K1NnG+RLb83JGTFVMy4dbOqsGM7lFwZ1uXEpyLIPQCaw69jhkctSLPsd443Ym+TPhmuAEncUfFPV2dIF4XVz4+Lzh4RiZIERcZSoA1hB/Bl8mmO8f9BK18f83K/Al2Dtus/HHooOgb+Ue7vAkiA8VJBrHCvHGSJ7ubQp+vd7Y1D/Iabmk3zSwtry9vbk2ev2rDZceFFt4Y048f/dbXv3Z5atQotCNcJ8I5lnh8uKcJhAyGN8ghra/t8fotW2zNF5AfPQdbjEdN2ILFh32eweu5T9doK35HvbZJYJeqYJDKTtLw1jDB+BjpFWEkjw0Neii/b1GCbOlfjtc0Ex5EHJ8NT3y+ib6HW2Ky2JuTLnp04NbeBp3lyErS3rbh6fONhEiP848uFnwQTyPIohOSCgYIReYVr8jb6svhpmXLI9owbZkOYtmzcBHv91YwI9piGuAR1k6iAmYQXc4gq7402Bk/aqf6GA2Ic2xkSFvSkKMTQ6aNhMcnyma14lXY0ykifJajZeDA4GrJBQJ7Tk/PzH7iYPU4B1Mo0DTnHrSSAYJ4mAjdo3DWHG5dRAts2f5AQ4YpMApki2WfeMOjN4zWUaGgSmcUAV0JkK8ED+EY44r152ifWD/cOVbWkiPbmQ4Uy0mGCILXicZBrMd76apZj7JbM36Je5RFJTAkCwLb3dEVi87Byd7WHoshI6GBQJfA0du7BXVceur608XSmNCqnV19xoW4QKRJUQ1t5jPqTSPIV6s12fjFgGDGfijyN8FJi4aGzl18+tkP7zyYvHCZOzgUJbZVs3Ama84CgysnQjD4z3d2jI2P7G1yReYv1Ms92efNiy09fb27i3v6mHMHu+TE1Dn2x/HJqdc/99p3/uK7Q/0DfOHQwLVrV/70T//0qStXNR+W2PgF9CQyfetb31peXH7rZ2+pFzAox7Rl5EEUEylP/e7OnrXljd0WO3p2yeLssc2NXaSJ2fkFhoO1ld2WhnYOnaJNw5m5Mpx1j+mESXJfvJbF7U0tNUOZrDk7wYMgoNCIJFjz2K/45jmiRz+S2oUZJeBafBC0gEKys9EF93Pz6z0tjbdvvsN5qb35YHt9/pWXnrEKQfadGB546uI5ZCMh8m9/81vi0FggI/ZT9qiFhsZg36ChCo1MMGRsZNDbNdjV1l96hGnkcGV5DZ3s7lDqchwN+4P4yOCn0PLjXloUusY82OLEN2Ltezc+6B8cgr3PvPa6fiQsG4mITfmQD4Ho2QTE+PviSy+NT0z88Z/8ETxfODc5PNhPvRHMGmCoXUo/9mbrApnQSRscZ6lgrGr8f6yc271TV25R9SSbyugwCtdxVy5fRCQMBnOzG6Mjl154/tkEaTIA+MIKxHv/4UNnuRvWXb0H5y5esuggdqQG8MrScods86albirUQwPVt/RIzJHf4cLc/MVL5wZ7++bnp21Ud7DLyEB/2aN16NgOVWgkCvYh5y72mqtXr0ABooR9PFCT9JBafvijv6QF/fy99w1j3PzGBzevXX8aUfb29epmCDKq1ejbMBQRG/qHYjfJ3sRclRAhvuwKclCyT3hamTqwhnFBNu12Yts+OhRuiPGH6J8PE5g//ltgo8KoF2tWUdbfjkzzbe+89ZYVJeDpdcfcaAUGNzQ2LL/BTCXlt+WhBqJeJ6EQLq0dk6IcRaGDDV3c1sC2DM6yZlXApm6AM1xSZwQjoo3FMSsH9QnB1nnu3Hm63b17D8J8s8eajxy/wdhaANA/OEhgJNAysXV09rS3ddlJgns6mPOMLcbvI7MQETYRP42NWN78NfH7YXaVrHzzp4U0jaTwxuiPpkzpPo6QmZR85d4lr8KF4tEE87nTPaWomtnVw/oVdl+//ZUrAMBirP6Vf2SglPmk0vqhn/+xos4AS8aPf+VewmFLCYAkGxczW6y0aYA/ksFQEyGNpEQ+Ztsm8EpFfotsp4lkXE0HQ4LpnH1oOslSEU0qpkaCiomgbKFLtmgCSquZlaZJFUBQqT36iJnbfYEwkJoBinBfHYpYiQNE0QlYg2siXaDvPPb/KWo1zc/EeUwfJ6RsTKyxtpIgLElxdi5zV1ZpPKWgHVIO7W0w1ybuuAIT0zK7RGJXduOaNXl/FBssRnfSTlYud2ZACwjIhiSBBmLblbeAyMNCDLSpKUXBhljgHeJLZHRwFkjsjri7OEeIDuB4z42dbYt7aXfLQxZt63/QZjCTNeg+jlWCcWdYtGdFrXthaZXqYVwwQzYONtJbKDO2K+ys+OpkYLBH1FqczZwxuzD72rXXBW20ckYzx++Ywi+dO/f4cOPi5Oj044UXn38eCLc/vOWUv5nHty5evkJDnnm83trStbfbdO/OrG1ADU17//D3/2tD8g/+2b+8d3emr3f0pz95a3l5o7Eh2jKJMzKn4SgCTFkzZLgIboPNXCGu/Mx9HxZcks6w4lQEI+R36Him4C1DLSKFth8Yy4cnuI4qYABxYSMIx8DMXNjegj8Ro2mwFgWoshYdiWNdjtEh1B5hBTGTooQ6DNiiRbex0dmqYHtbWy9DRPOga2/vNWt9JhtAYrbEr/ffe/fo/cbeodHYOkKy1FjKL1ku24O42jNe9vcPMNBOjI1MTJ5zuDgpr7utIwdCJSEWgwbXJTYqQNuVpG1payFCEB9YREUuMcSQEeMyYfoIhRNQ4BDbxNc0jRaRAeWc+u0d9SpOBTgeVIcci5MkipLqq4rb0OrRcV9Xz8hAZDjINy/gw0p+IjXKjwhJJGQUeSxfUN0p/OClQLImEhDHh0dNpNBlvBPOORoxDI2OjdBxOCQ/fvxQH4ZFHDVw5lZ+OOGR48GY88Goew2xwh+ow+Qa0b6LkpxRdxrxiXaCM9DA44O+16bh6S5kAZgz3uuJ3g+3gqitjU3NkQqqw8EQFwxBjjaHiedXPsFQjVYxfwxhSI5AL1SJvcWiyNLQEn7HBCRZIouohFaVSfhXJmAqQ4EfuPXt7dsfyVr2j4WBWCuWWad5RduDXjC7lyy1GP6mS31Up+NagqsSCFiqUoWf8O/qnrVovagfkCZPGCmB/timvv3e/kFP5FQaAYjWpWTe1ifZbJhuNSMjOT+A48omrfyBAcaCxADAUry1y5NnLb15PS5qR0TKDvBbw4q/kJ2RPT5UI/wCpqDZ8siuSivN0DgrnOiHIVCOoKv4+6WXj4+5J1j6VXL8QLACg4YYGhyWJGuWobKJIL9LHfRuQ8ThFsjTJ5VLFN5Z/M5gAMdOP1rJylIhACrNV7zp9s0IO04gXQAVblAoSml6Jy6gNz/66MWXPqUjrQOxsRr7ZEFEyP/eDhmBzm9++IH+y0pXw+jv/M7v3L59t29g8Dvf/jZdyKm3v/7rv07EfPTgYVUeQE24giVRbtnDyF1TU+e113A+NzkFABloBdbBwO10JNzm7p07kLMwPx+T69GB0+D4/PR29Gw0MVcvkLv6uwY213fMHU7J3t853DohTOMKjuJySHWWow1x60k4A7pBSu4hyvnglDcaanqkKQ5js7Pz5CX9gWxIbCc4YuFceVL4g6+g7s6dj/Axq/m8MwhlLzz/qXiMNwv/NeAYA/C3NBzNTj8Qm97xUz/+8U9FO71/574ShgeGV003W9sGF+MdnDPpKtGAVpF+/Oijdwj0Fq/Y/lVKSnRys02spnKsO+MwTmhZNoAxNAxyPgWPHxPsZwy355594b/7777Cg4bSBcM268/Oz2kXAlaae8sFDnTo6MpCGaOJ5v/Df/gPawxTNmK+LTLIj1btpPWVtRckhoFgVlNTPIvmvvnNbw6N8o6Je3kFAG2bjlELzaFIlfeef/5ZPY6n2Zvh8xZqCdFWZYa0mcR2gctP0WA4ljSINcP4TJieeTSjViIFNJlCDEWCHG4yMjYBMnUMDQ8szy2EdE6yAXlqzFmbu6sLS9ZomGC75ua01hCdnZvzOV8j8PEmQhwj42Oir1kb0nMWl3Gk+fk3uC0+fe0ZSNEHcPeRYB3TTrJY8pW64M7Vykv/WIKEVqXCDXTDO1oEpAw+11Uye1WvoST+tSK3mQOc8diRQqzC2wdFj2/PkYSU7E0diWUFNS1t3e1dPJaobjzbZEZhuBK3JZAYGyqSTaWeu/FTymDdtyCIwXGDMvMbpCa4Rq5yhYkwy9AWoluYURAWrt1dDs40jVhkWFy8z/z87vs3dYGUwsglDbZb7ECRds0trIRfxIR3aH1AX3jecGgrGUCOLOWCBTyaL7mpfCgMKVNIuZabUHVshHoy/F3yEqIaE/7IBBPzbyYYxYGSf1ExmWSlnS1Iw0jSFtUjXJbdBacCY/7UWqCilpA6PSuPyx2QAtrH/8mCrZ89UV+YZykqeE2BfyUFB6VByRYeWipwS6510hAPWiJF5LITAgjJP41G00Tgo/3yNvceW2T0igAvjwXGtqxHNFhQ4WoMxBRhBuU0zxmRnS0rvwoKR6jzaOAOzkkvUYcK4LIkARmjp3thELRBeepV53gSz5vKMxRXMGJGzydhI1JtW+60AW9h/Qta8qBqKLnj45FqyZEanp4IEbIfuhf+L50qAbQ8l98vJezu7VhtFXyaW0VWSBqasMjApx54LIQcP4qyx4BdkTRHOYm4WqYfGfU+jhYIyo4O5Rtcgnng2rRJEyJLoeGDSRnv6ByJUk9aD7OWqqtE8mal5ZjI/+T4hPddE7EPtetyooRRjurNIjiS1UUGAvn7evuG+oeInNuHx7NzD0cylx85opjEyWeXwClqEXmyp6/bnjBmbFO/5Wyj49lnXrDLbWZmYWzy8k9/+s79h9M0dXh4+PA+v0knJpN1FxYfr60vXrp47nd/77fev/nh9773nenp+YH+UWt04byTV4TzcailhRVaNlwas8ShoKqkTOrIp+iZ9YnOZ+7QFxBBUuoQ3bQZS0m/ZKI37oJsA69QRYYfu4AZXSdn3Z+dzLVsqz2OC2+jk62FcaBLIVNGQPvBWMhiYE6wTO5S/FU5Yxffqj6eyijlyI7WnDRMqoBM0wZU8E1XLBj6R3mMDk1MTYHEUSXpR9DoZSljP2NBBrBm5barKxG1R4YwnziBZNP2mQcUjzHNMyE7obmEPEoJhcz0eMYIguJ4mYNknAOjhwmgG4gHtRAX0AauEjZnB3ZZ97M4aa7upnMUUdWEovcBbjnRte2o7fgkK+bAVm7WLY4d1pbgE8oMpZfTnXyrSHaZwvZTvAzrq8v371pU3jpny2Nr86bpgh021g8ne3CT7N05jBuMzEaZOPW+BbQATZ965UWyF52CDwKB3kPAW6kmVDNFMUP5ab1VFbGnd3fQH2jkIIGB0r8RSoCnCyre4F+tnkgFYPWGJLTJK8POupA2uj9rl7/ldeWQHoeVxPqQ4Vf5qixBO3ksx/1wg97dadyNqz2aQ4EtaECBBMjka8w6jMwAAJsmaJQKgCeR1V0DTUmlHy0DHmiscuBHewucCRxiEizcvxgSUHDRwbTUV+jHVZIZMpWpZledjpDCiOg2pV3IWZlAinBj6fXIBlkWNL0iDOIOK50xznYYKDFNL0qIT80EpKLYVhHJzLQoIBuyDJYg6xAJWtSOGMLfhOFeXAgSy5CFJrUYPQB2kLChixmx+DIJyg8w35IXu7uYZrdME3AcLnhqFQlmSlGnqHePQyZD1N+8Co4lkmNT5GmEadsKtNvaWhuuC6NbRVuz3GoOholTGgaqGJK6BfPUOuFQ5+ZFeyRsZGsQtcRDxK7rcBELDe1dTWS+mUeP908OyOUIAh+cOn/+j//4j0UstihBxGK2wQ1+8tP4u58/f/FvfO3XdSHxkSrz7W9+kxmXiZsF2pLDw/v3Zqenic5vv/mG2C/c2ASgxMS21jeeufY0MUyzHLkFgXrHq9nH05aAIC0sKHacg572nk+99Ol5J2E1tb343Mu6fml+Gbk6YDgLmFaJd9ONWkzUJ9BHjVWodTEDrxjmYI8CCsk6VA/mfHU5Thr0cl8vuxI7RVFK9WBrxDzIoLE+/czTRqUg+3OzM/i/zdZEVquFKF/JZCqIhTTwIGQNEWdTiBqObZ7zoiG18vO0mOwMNb2/vTOCdOHcXIo2C7ZPZHjpxbi7F8nthHDPX0YtXT3dllOASHrcZGWJzRd15Ugo3e3Y3VdeeaWQfafOY4BQJurlcyu0jgaiLSTtAHIt8W9kNLuHUQctMwLq7s53vv1NHuPC9H/nO99Ru3sBabRLGcAOBo6PPdEKtXDHAh5fJlzXeDW6lQYkDcc2bLUX/Qnla7hX8reQ/rWQ5iGKKbPQ4uyiWDq+cR4XgnMSG3RMUwC2tuyD7usf9JmOoeIazPyWFKHDgCIbmOxpFzwViCuri+xMc4urE5NjRH/3aiHxyyxZ1uH8A6HCf7v3OcHaOrXQ+9YvLN6hfkZ3z4HuCnrbzLXTTwkWVKfnJMqQIYEEFQts/SGzz+HOWzl9pQQ9ATw0NDU+IXaswUNXMzOyLJhR6UxPXbnkW/ZgHe9D0CqTHjZ18RL/fv0EzjwpkSt0benyCKlKVgVlw41v+4ci6EseggSLVun29rrC8f0QdDlKBm5h5d6D+8uroRIossuis0MhjkIb9rmHcmps3DQyo4TszKCLi9OReJtoaGkaOA0esO7tZmYtKTOHhrsCLwZio+dMePSwJjnzNrkKG44UTeYjY5JN8k8t5Z8bD8MEMXDvi9ajfCyryLcyWX12PS0nwznl/EcTK0hWrHMqsegYJ7b3kTwwzrP7CFKs0R4qRGnuwWP++KVroAqQv7jWPGQToj/xrCgAXnOfCdw6KnyaM/hhc0LN7O/CaMNhDP9pUXYZxd7vFmETgApLtwTAPzfTGx7KeUOKiSdidzk3KEJ8lAGdVXyrTMcqgSzrM5x28HSaGlUhE0ORm3WZV8F8BvsZkspdGmseMFsEc25LOsuTBYfyPHhIo+vbIIVxMaJWugDgPk1fNBH3UKOfYDZYUI6Faq2y+ZGNnCq84+i+zMBaZ/mCdwvXDR+mFJgI58uVO6QVEngLketW9EY99r+vjDsLVh6qCAZKfwVXJraEUCtJztLwfAsYhciJqnkAkIKsACwuzVjR5dfJmLdxkiEMWgFw+nv7TBU3bnzA54R/rfh1uMfS6so+a9LuRu95DHr3/MVxk/ede3d7+p0iMuXsTH5BlvUwsYaGmAZv3Lg5/qUvtLV3Dw42vf/eBz/92dvT07P3H0wzseAPGrGyunTcsDPALbVln1+Axclv/vGf//AHt7/whZcIt+/fvuVUxPXVPUQUcUWCo8L6oMsvmCkpaIdpD7Sy/HOqaPwfdF/JgDOgALZYtiUrb3W8oDX6QWNXsRbb0hPyympSca2J5UlNjf1Dw8KdQaPml6LC+pQ8ODqUOoP0aJJ6TjxzE9XK9OMop4XYCcho0BXOjdVgnlZQ9kp2cJUokdeNPgxCzRZvvAqxky2j0GRaJf2PDA1wlccts5Ex5xXEShdqtrwob6bvcBt9isUJGIOz1b00dVzEhM6QLwI6jlpMSOpCGniyEpCikWhEom627ZQXJp8wMhrrKnPmyBImz2s/pUpFmuOmr49SaXN74oRQYWyBcSUgEy/IuKyJILdawi92YmwcvjksorGjPWpDs+nTKkm8rk2ZO6dCMGxh8urSHAesknGJCyQDT0TFwJl9BX7B8fBnoxUM2Inn9qXQXGjXFXIIIdjDjAxg1q2l+3LxU6P0KflPIXpPHs9l1rk1eeuJ55BQ30KCpPZIi9kJ4vMAH4510rC2usJVP+GSSrKYQTqGT/vWfFWRpi5FpevKnj1sRxUxZ6dzLZtYbzllGjLJg+QME+NICTK4AZV7qHAjjzYyL8qpfMI0tHjruWLVVZNu8FYerzy3xIfsa4bN7eDQWUxmT/MpIbW/LzOa/JKGswtgv7k3UdufRl8vy1Osa0yTTGZWcuZ2FuqSkfiE4FELMHhf+Aok+YrHT9EJwQDHitVIAEg0ZKym1iiPBmoFgOVEn761JVE5HsojudnatTM23FEq9sZM9Cm5tK62PSWX5HkUTet04RBBC3y7kddoa0k4vjipqjHzXfhvlFh9LjeEGUjLK4vcWlAXOy60e6tMbwkVrv0Dw72hr8Nbdz/cP44Ds2KErZmYHL9y7aqgLAwYJPvV/ThKDYuScnjE2P/B+zdEox8aHBQCk4Wlr6ub40ZfTy97xzrtq6ubQ8js4xmjYACxHR0MD9ANdh3ra5UJWoxiAPdzNtve5ffBv58kdf7CebZa+Lf48tGN22bVtob2R3cfcXf5vd/5PYPom9/8NnmPRx1Xe8BbG7Tu2dPRu2lDSwlmHa5C6M0OdQNYjP92uNAjwltpcg6KLo4nuzsbceqGH7zUBB7cx31OyBkYFCeH47TjAuCNzHn54iUjl1llY1PLEizO1UQDn2hbXHz7cX3rXsjUmzc+cn3jjZ8Cjx+7PPK3Z4EumsCVK1e87e1JoB7SGeRQ77mCizTK/1Nm/I+bBko3tNGSLa9yUubd66CqLRt6Qzn8qoWcqUM5vg4M9XOUwq8mx/l5bkEmr33E1NXTyeUJtTgkl2KjvXqq+shUgAHA5A+xcI4nyOBqTaN3oBdRoRNPXPG6AnDOoYIQ+GTLRtjUCWzNT5GYVrVwYnLytc9/TtwDO4CxM0vtQndC1sLsMkXUYdRd7V1h4yciB62T2rkak1l1OQhkI0M7ruLK1YuWTLkAba6u2doCIJaq5XUTNvNJ6wi7Vn+/z33lW6P9g48++u4PfuDJ6NjYF7/4RfmNLC49Pd1HaNGUxIDIjdGeZeizpAjL6oJQGIEL+Y2FWKrS3oQkYn00ivAhQoBwRqXnYtfRYFijPR8fsa5FnLd7i+Qm5K2jvxGEc9DEhZWtCP+xNoWVnMywq83OLRQXj5g9NBYMhhldRZ6M3rIzycOKbj9/+sYbvpWA5BNdXkuj4Yi6htQoD0hkcXEJAVGM7BLr6evEk4cGR4hWxB1rQEdbHHB7lcZAxR8TvGmhCG498frKwvhRY06h2AunkA0nVpd7yQ3ACrPwN4p13uSp/8/EEy4lICsTQ3KaWUkm5pTCqQktEVp9kynCdBNh338yxNOfr0ADA1IM6LDNROlFKjpLfvjAxbR0aqCKeJrXLgWacDqjAn3Xf+Dysz4pvNTqKtGFYOKLiBrly1+5agv5KvnqVZ4I7jlck7xG8NZsnxBlwKf88Oj8H6GINSZ8NquNkd1FwUkLoQSSPYYcfQFH6BbADiN0OmZxjjB/sDhEdLP9Ok6BFo+sHJ/5/HhRcaixdIAUaOWgsH7iiidFYkhX6lnX4CQy4mnfBcdoJr+ePHGf1oOqZM4nNRWBNNJd6esiZxALICUEn1BOgEyIk+yKjMiYFpeYEnQDzrz2kDACktXMPzgYi46JO5OJL+2KLgIJ8O2pUrlkdMiI+MkEJmxNAyrjMyxYEzIE0KFazLF4BTdW49SaIdhMkxpaKUTZhgYhETAgZ24kuvV2dW9ZJxTcgIxl6La1079Z5izWPbr/gAREMWPKhEUcmcJwha6+vXph4tJXvvwF8ewccEGXYAy/fV9gk53ens6uTu6YRyYBrUMIPDPfff/Db//F9xzuh9dubG87Ioeg1jvAQ9VOm7YLF8ZW10TmPXz8aJqjwaXLo+KqL8yvdnb3v/TyK3/yx382OjIlkker3itSBTgljWW90wG6qnZl7RdUqJPwN/iRzYAlL2l+wYBzJTpsToFMu4bwMwpROjy7KneZkGtGHxYyRQSIrjWigXjxxnyel8GIs++Ew5SU2pNQeAneg7rVXKQdVBENj1zJaSlssRhKrMiQg23DcGo8QYrbCTr3AfhJ/zQ/M6vOo+c5Lt1OWQ045CZFmSUJ2ZbRFinQEAaP8QsJErsg6hGWzOeMeqej8nQqwhCMk0hRsfiVMYIM/FxbXYp3OY+1NiiyEId+yZqmLXbTbGbA5PFMYJvGQoXo81SthVtU3SQsBlqKYwaNJfUYtRm/Vy5dgA+cI88JbG0tHLKFRBArWgnCrusaAKDeWIhPGlH17uGKD1XdPIFok/z8/nd/QIYQs0VO6yxl4o/ExoufORM/cbNh1xErz9aWXzQQnMKuqEb7Q6wNxJbP9naM7Yc8jCiciB9CXkRwJ7ZSy2uCmaAoBJMwG6gIzcC5qyeuMhgCAM44g+gyqjzERtMjVm9KyXYCDPT3mN7otLFtWyLjF1LmiDKH2r9EKLGGRo1PsWjHc0vKrox3JiyTMoCLRieU1hpy1Quea4gECfEgL5F8tktw+jrfVXwqEDDuNUG7njSqPocopVV2kSXAwlzArjRcxSwZYBjMd+KkzuhmhdbSFnfAlEPOoMJhpPsHq1s7uOZxxwHjdDqCgT5c/gTfSE+1ZcYEsHIOt3ZUrUyQix7lIQCUhjEyFkI3buUVUBEtMJCYLnj8OCse9m8ozXyNFG2osL+CCIuUw/uKaudDhXvLUFl5tnqlYkxJ40SwYYbEhU2bMQeKdJM937ows5KH+6Yix5nHFBDvsaW1JXiDPcyFWsahRPMJKCTjonRkpwHkahcTJoAdZfjiy59QEQHaqgVgSClvvvkzDMboVJQW2fvA6YDIdOvmByLezM9MOzfd0q7Tdt2cP3eOWL/HUfrIPpwuYq49sutrK+Tsg51dK5f0q7sf3XYeFi5EiLQ5CcaEDcXHabzwI5R9GfGseccj40PjA2OkzPPnzv/Df/D7ar9z+97a4uol8RxGxwlyc/BAlMeWTDdk4YKZdGXsDoZqDC0xzR0eEpFRGi3cVXBnrMkaRZyIjtdsbsyR6tmtLjZoMyTrU6S12t6GXGNd394ll9jCNzgwqsS19eiupHSOJCYd/SX2AE8Ysxh0WQH81re+9d/+g9//wz/8wyKnOWrJ7ouMRHiWQPLBBx/8+Mc/Zj/Bkair3jIH2FIFXQQ29gWnT2osIzZLvGinmID1DU3RZKMDk6Ouwxtpc2szYWEZFDmfO8/B3t7tvW0823+jQ6NvvfkzrrlWcqbGp3QirQm08Pn973//s5/9rCpQozJtVxBoyCuaj7bTN0CiH52mbByRio1xP7EIIWJD/1lZ2nJjcQDVm6DtQUbD0UFp16z+HF3wMH66B7tc0levXYuji4MBdfDUxDlV2tbtg2qzt3/HvQq81VUxUZcz/Fp7EhRo127Wjd3u9g5Bj3bu3O0fGDQUwGo8OyXOkpPSoFVjvv6131hYnHvt9c9DDRaDi7715jvT0zPKJPEbXfqAwqAxMihB2xRCAdBCr0qrNvk7yiDJoJG+VTgWpvz6FSC9AgNMbWxztbcLcV8nLcQHa8srexhsQUNMRB2jV7ZwNNPo4YHqLHHDEmBAEoWymAQ0QbEeIjsFwoakBPwaYKpWTpng0wRVmGtAmHtx0w5PEDJK4vW0uLI8NDKMmFDVzrbIVln0UI7ytY5AU7gP2QhvF3jUMWNd+KeFirWmjeUVa4WFs8e5uxgCy0wAwprwmLAZqayzeRhRs4CKd+SxZNIvzgnmmgiLskZ4J3U8kTWTE3v0NdJRiFb4Lr4t5k4eh6dMPIJIyivFuv7HU9HYYimHbaxDqjprZrgiHpzBTJbAxoBniviVq+/qE/CriT+SwqxWxoZZJ1FCVZiJZH7RJAwnfs78Qls6mpvamQeJCnblWcEg00fYNRVTfDgUmk3KSVjUWms5cavkiV7Q7ggK89ZBom2hecgjdARIPQ4zIDFZqxT3gWBIIx55hk5M0q5kHXBn3ovqUjDskl5JypJKfpbmlydRakqCdfen+arqk+9OsOB0azGXqkwy6yI8c1VqK/vkjAXiFiuISUK7Vtc2ezranfZxsLu1yl2KyeVgl6RZK9KFdCjOFXAHZC4kaE/5BkWaU46/kFPhCNVV7egZHbr3HFOTAIA5ENw9pBrQp/ENoxJJl6kxCqC2ZPbttKczoScI4wAv5L2HF4pfIaQvTRv9S8oPZ9/AvKxV8c46/sTLz92/d0uZf//v/90/+Xd/+vZ7NwcHesXYYQqQX/MfLD187dVPWfImeb7983dsO2vt6LZnYnR8lIonBCdmMjZm+ymxRg8SDtsWFlYSp6S/e2523drk7mbT7PTK+XNXCPMk50hyEWki0+huOHAfHU9LQsiZ1GEgBMeXhZ2+knbt9wiuoM7mHRRog+RoXH1i+GSGADAWgT909SR+c517MhybW+/NzAmCxExjMggNlNLg3GKzukJyGeRh424QiFg2NCuv5CwMJH1E1BwdH1OsMc1a3UG8T7Q7yzQtq2tL7fyOEmCHItDE/48HrfLa2JPNlMX5jV2PZ4vyASTOTFHrUHu4HO5S2RTa0BeLS/H6jYaZ3a54BawmenoJE5ABEtYRXprw/aaKlQUxB2IjxSA721opgdAkD2zIXFm6ej2EKFd1KTmQE/KyDBXeZR0ehWPCWu05A1xvS8vbb79VGOwQeDAt9EYssGy/dxx7YVfbYKQ4mxR45jDwtHeG58YQm6RYkxRWz52McwOuK0iDec2Rq3pHtAbWscOjGdnqFAAeCWCxWGt09r7EkwTmJWPB2AFMAC496FV5S8rJfuDTTizIqZTgCWT6FkiKrfkB5gmidVOoLV1QjR6ex4MrTiixKhMQKeFxUu5o7R6mULdab6v4qaO4zEdZYUiXlqQKP5Wjq1XBbFx/wjkU+QqG5VG17FqtBD+9daiObnIjP4R4Wz+EED/rw0rPFX5+zIRIsxt82nno21o1k6IbPhTEc6VJXhk0hOAMq2LHAR9IzM1ISE2AQBC0AoxWtEbPfQU2V2itAKSDIvBbZklSheRVQGpOjUqAZJ/AD+qSP95HHR0+IcPZmiuzDGDm222hUkRxqh39GSsM17ALwGKL3RFQqfxw7zjRFcNW/hg7Bn6JzhTDSuaEA3sBeZXGpnHKMbKkf2Ir5xE9Jf7VmcYQwMZ69u5nOc4ZiQc5QkT54NGjIIcTw29h9tHWxop9oqiD3k4HYDfhXqGBlkd4cKB8vjoUiacuX7H5de7xNAsJ2cxa8KN797HmnnZxOfedu2L6MG+tLi5vrKzluI2j4/nF5U984mVbYtaXV+99dId6gKvDjKBIb//sDbLWQE8v8ujr7F6anXfVBKb9Ox/eggwV/V//z/8XKEVLrojT9qzoD9PTmdKQK6wurXZ1C1TXqrqwLbvAii+qWBOiPWV/5e4WlzRiI/tCe7ODrmbGr5134gFvu6HhQYtWh4dbkKB8PahUm6dF+rFN//yFSxgEI/rUxJT5zXFbBDlyvK0OlhT0y9RUIswSOAmTb735cwZ+hRjpDgBWjt3MRkG4S9ExRNMyNLTdyU4qMu6wIzE6L1y+xJbNWo+RMrXPzc0qnMlicuolXS2/biJn23WNupYWV8DGxSgSYlOr2C4MCltba0sLyytryxSgC5fOP9rcvnv/zle//GvLq0s33ns3KMmRO3uiFUmYg2GIoelfI4gvOnUdY1ELitUoUvGqk8YeCnv9wEgEKjJwo6fQMN3GVyCRWQkaTqBt+fRnPstB324G8yuD87PPPq9JHV0zwojSn6htCB2/U7GJDjuieahpemYWgWKdqvchho5kqSm8/69evegwnrn5af41VvRlhlCDOnFU45bEM48tpmeJBnbn/tWnnrFqYyGGZgY+wvn41NTjmXkuGkxcqJ/aurmyNnX+opbIwE6jBJEiuHPqEnJEAlfZGsJMmyhjbSwk7Ef7JYamlgulCQtVK9AE/m2fePElKLDOIvKAbcHCe/vQXMdqhQKYhAEMWQpnA5YmJi+Y4n3ic1dF6Q/dbxggEcDUJ25AGMIuLNXnMq+txY5Sa9c0or+p5tVXX6grCegPtxTrkBy8uLxy5959+4BLPw0b6rqWTcDcRDUhIniuxjCsYjVRXU1ykjwsmG3s8+hIqiKjnBJ4filFuz6V887emqWqMTpiRNaU86IItUWu9atOQEWYVliZI7NiT8qOdRyMtYrT2ssCd9E6DPP6r74PGRQOSYIzb7UIKvHkHxZn92P5h6viilEwMDgf4I2AVtCvXr1n70uRp+IXSP3KLlTzIMNFk7boTABl8R0ZwIzSj71q6fSPuQFWCdv+HTW1xUeC9YduYAeI8KGx/fN3bjn0w8MOzo0DQud09g6c7Oy1tHLdMzEALyE7Mh8T6Mnj4WwYDiXBPoRslyBc8m4CQCT/pPyJ2pFNt2XS1ZDSDsB7EpCiBDxJFQkpnYXg9Cl96axvLZETXzHBeFEGSTqIjJ0VBmCIKbKxbR15TYha5hOfh5CoL13Z8EOTwbZIhRxywG28SKzR2He8mIpAwOJWBHufEuQy/YMfMgn5KFxpNWlnhU1bc7xIy5IerElmpDswNGR8saJhfiRcupdyeNnGX8QKoWB5jOnkpO4eJzhalzejW1+2fmlrJoZVht4my+DQYN/q6vzFiQm+Gz/50fccPn/h4jg/hZxnJhjf/o6wV9DTNzJ4tNtGbmOR/dmPfrqwNN/SLhrSblNzJ1AB9hu/8RvzS4vYIx+01pbOgT4LBXtv/uzm9eufdIAAQXpwcGxrvfm99+984qVP2QswcuGcNR8ip/aiTYPd9FBoHtLhPxp2xHB9kXkjplxCLRaBa1ltZ/jBuIm43V0D1FRtV05o8kxsii5ZEjQq1iviHx+p5z75isBr77z98w9vfVDFOExcRsrCWSHKydJ2EuJqFn4gWpk8oZFjhxBHXHP1i4JEOWM+oyCuW64XtG59TRiNRLtOsDE+j7Zt2DDbTtbhmYNk9rY2S8HpX5SiL9oPsqyRoo3zbNBkZ2VV2Xfq50cf3WGRtSqiQgKes0j6+ocE94YWnwPJcwTAY1int/d1IQ3ncEVjLe5pFCQpreuONceNn9uijtoA0GZjVRLk1HJgGPOBZiKg4Nj+gROlmQDkeerqZd/aB8iWqXS4ghPRfHePKBtqpto4C110qz2LeU42aOsejMpaIFQX5kxW4G+gOM32ra/m55a0AnnTS/3EqEw9JWZM5IPgh4V+P/ZCb9Vo+IOBXMUyb2aJtIf5GUjRpGjVsTfAdzVkgjy9Bk9ZwcguLOyDs3VQUzSB9G/ZgKsEZZAZjVNkY+DIYEpSZKRak2AJQp1VPAfElLVohdRvC93qnVPzfJiNsor2CGCNsLDsZ+nf2MvgBPK1Qjat0y4pzSx2dGXizKZPlSpZnuA8+n+cbyGzol2BcnqY587QZUcNm4kKrZHql81OjeXlJQt63lZXB5YEAoC1XASJo1kxoztaWMNECMjUt3Y2O2cCGbfbO8Y+wuOTPTc/qxZzA3jAUJThMhYw3AhDhORi4SqTo+qZTtnU0/VmHdt1iqmxt6d3nCdGY87/AjhRZ/34kJFC+0OTmTJZQ7L06iFDjjO+4hR0ygLPGL2pOH1vCRi3tjyl0TinlZasqodw2lmPTrKwHGWpkRmGlGwcxqRAsjHW2tp5QhoU8hw38WSysyVah7EMz7TNA511fDRz//6VK0+RT2xn5GQ8PjS4MjL86OF0lmrPX9TGz7z8Cnre39wRshBzR4oghwe0pzrMdm5mluwLbhxYmBMchr+3OYVrkNBYC7MLi/PzbLoxcxT1m7ZgvwEYsB5qxiEJvKMDBQrCqbmTY/1MEFvbG5PPP6cHyZOXzk1ly0Nz83Bv54XxiDf2i+m5za31sM1yNBj3jXRZscBacrdHFNkYNswx58dHDOvB0YG2xv0Xn73OEo94xviZ5wRx7idO3tgjvRC0eI6Ql549/yxehi1AEU0et3EttiSR8ZaLJaXJqgjNRI3vvvvu1772NTdEc37mH330IVWB5lwodl9sTU1G7UZEhliTfdV37FklagtGRGwWAHPYvujmmCfQifZyH+Lit76xmkHR0ibaAfcb3pEKRFE725u8hIaGrSE026u7bo7R2SdHQwM8Xzq31vne956fYv4atPMWzRNabFOGCkIj4N0QKS0LmFZApb2EeB2tcLWQxhfmlyxB8A6SWT+iZ5/Qi7iMsZmHYst8WuVtVGGzy9B7N29cn3z2mWefvXOf5vDgg1u3R0eHeKgb/+2XrD+2zM3P+3RybBwuqEoQ/eDhI8MebdUxT2FamJ7l4ZkWCpJwKBpg10HDrnOVEclB/NWaxIhVN7B4xDMDMH6bLbp6fvipT746OzMPUOHJ+G3NLXA66rIcYTeDzFqln7RHQG6zqercS6r23KHPWi7GnQ5WdQVGT4BTj2IEmBF4PCm63QhcGIuuGiWPteOmw7jTWekz64V4pRKS1uJbOqyp5cHjWQSh+5UDv1oN6fpAde4hVKWA8V0FQIxUeFO1V7ZFsnNoAkQT/uHt/fdvWuhXgq0LyrcfvL27i+cVyVsvWrpVBeDgtU51yoE0JetLIxzXsGbkJ9HZGXKeRLswW5zF6wz8hf+AKveRoU8Bq7+8zdfIishb9JyYJSNsKBXfb7O1sHg4WmfWm2FaoU+oJV3iS1BL7DaxxNYTOYAXSMWA0irmFSSljsi16RQSUuaZJHIDgVhQfQqAQ9EF96UMuMFFzUXZfKt/ePeZbVTrgzQgJfzqVTOUXd4W+Tn6QDIyhQllSsr3j6FF15QgqQ3b2b5JqG1qd5BCc+dRU8eRyJgnzDwJ42A7lboSpqmtp4m7z1Ez7zxdEDRlX8fw6ORkW8+A4wf7egfWch0UgqllMyI1WtLXcFg0kOBrnylH5AFbBtnGKQDBXmlgRPjaKVhmQtengfWPG0mbYkg6m0nSavcM4g3E7WgqnpSvVJuPGxrWNtm62FpDh95ob+IkU84LVDrprF8sfcTKqxIAictFMhJUQr4O6BKBAeAR6Wx3tuyR5Q7hFE3P5qhK3srXTDhE3gaMWb7ST6AuQ08G9+0ttorGnOat2g3DgMQAsLgoA4TkoaDdia8Q5xH8Dis0TLRCtqlzk8Sr4rfUPLs4y5p1kDXFzhJCLCE1bTYTe8+2vXffe3vq3NjnP/eZ733nWyo8PzX+aHbeNECZX5ydeebpq+PDcVWaW5j7k3/3R0Mj46KPfXTn4dS58YfTc1evPbO2AU2HF89dNcscOBlwf0u4isWFg+amgfERRxbO3f1o/qWXXrl7++7Y6IWrl1+IG2RZhMw6deTvSDz6xVDNYCoCt3naaqS3hAkXJbvKBu/1J/RSDCO1ClhZFhBgCfbQDEIpN6e966PaH+s7JJxjg19IDVWGPooHuQ1kkciQRLat4+vGansGj/3BlhrSKXSMUBRFXcgDrlfgHxoZGxwaIGChBHPAxtrquIOTOzs4TgTLZRXCTkgCopHDXAHsmC1pFIl0YeN2CL7Irsf2SzG0ohKzl2SfAGm4CK9C7GevJ0cCkRwz4Ukd3NNjsMTnZYtl2rK+JRsnVjqF5GAvS8jZlhpdUXY1KhOQkjx4o4eICmFHvMugS4oQXPidryqr9xXUEVIxzEq3tQtCe/RPduX2nvj9EEE6WjketbF4B0vVVBBKllTqK1Nsx8SIQ5G2xL+Lizxjbux/sOpzU0A6tjnaKVUHblXNP0c0LKsrMqjRgFWOAnVHWXk/VfyMRPnVYgCQD8BJAFWgq4bUq8YC2M/KVJWg/Mh/Wm2kUzkJwWYxfI+/yfGhqEHslDynnY1B9CHU2tFHAodVCPetEqo0AB41wo8nEAlCSZnyqKuru6fyGfc1eQVUkADJdOPec0D6HJ7j4lLmWcWmxacGoOCwwJkbMKsx9VKEDk/McXArpzJLgXGN8NaVwOQhQ7V1Kq1wHgiBmdzPbNWWpXS74Fvxapj3uevSNrs1tO+O2JnKmfvYhpqc2AfDgKw2O4HJVQfI7hyPGlVN4aqjjQFXwGLgZW5Nl0VzVnIMDcMDcoIdvau3kOugmy0GFVZ67JECUGQJN7AhtmkQUJQAfaWQetUWd44hAC3NsHGnvOGBcLzLiqQ6zcRFcN9DRv6YxdMLrgBEyH09MW8TjsWpFKwZDeprvB1GkAZ3xtGBodkHj86PTeysrS3NzL3145+yM5I3mED91O2EjcuXrhCl7n1wh3mbGcjo5m+hP/Fq5/3uHZ6cn5rCSZDiQF980Jfml8bGuKqzrlqd7bn/8PGzTz0N7ip3WTvd2di0WAc/048en79+nQx6fuocXs0pz1ypO5hp2mOVbRzon+hqswyooewjgp/2IWJdjL3R8Z21ZeJCRZqsNISKcyIb6sHE8Ge1wqDo7+2ZGB2gjSds78mgiJZIGn58TBHCtKznnayfjA4P0yhIyVevfpZzP0TZ5bR0cLi+vMKRUTnE4uJ8ustCT5Qn1AHPRPa7v/u77717kzCJz/zZn/2ZI6oiifU4pmDVwCUeA52dAnja5SuSW3UfUlfn404/2ZVIZ2jj+vVrlgLklB/qYIwAj3UQq9BPgWhXYHyUBskgBDz2IJrq0dE1hUMLmiE5feMbf2ws1NFqU7ExQhjm4fPd7373c5/7HJj/9b/+11/+8pcBZscsv38mf5n5AgHpN3/zNyFTURYw33vvPVDh9gY4g7Juci2yQfgwhGhpy63bd/+L3/6b6vjJT37KKg+zVlsE6MC76U90HVxifn7JXmZ7hNRhqMiT4dTdbUOPQq9fvz498wjEjnGEtcHBXnGbQPng9l2aOjFraYWHum0NNPne1ayfCnxpTfnYKQi2ad+9e88aPXQQlClV0GdlemBoeGVNEN9jq4TER1tA7t5/gGdpD/ahDc5k0UgHczjngkwAFz70xNW9BusAN9o5Oj7hE8NPFcPDo6wF2w3bgi6dPz+1urbOwMmJRUQkPJX9SzbjT2cIeRfuxvd0O3NeZcoaBbnKqSgGj1b7ib/og9qF/cWzStW6vwzk2AmYGR4+eAxvr7/+OgiREYpE31zAWje3Hz5+VB9ids7sSCuKr0VloPh74RlmHefVV/fNHP6IiO/dfwTgQ3sfysmLsqnLPnRYApVDIXWTqaywZfNkVVNOTep+yUaF57dKUXEqR1UDuLjEf57Yh5tFvMCd4mhuWb7YuyOhG6OxHOFYMdfF0FL4mD1CmQAA45pWsMTHdsbaE2uV5nC3J4+LAdPTOwS9DjBYWd1eXtliHV1e2SzN5H6j2DNrdPGqwtBjL8H2S0TnmHAAJaQCC1DCo+57TrJkyWA1GRwepKOq66lnE6NN7ZYHtbS1O7K+iB/UtgvXX3KFT/xd3xVlJjRTYGU/1iDDUBlpjsQdqt5TKIops4HhR3hKrrbYqPkSnzUX+E+LZSAbHxwlcnAERLa8fI0e2OaLBA9FZzdeIO9aeK6Z2kvFuSnPFVfk/hgP69wvX76qCkDET8WCEHXFqcjsJQo6Au62fWpnbHTUohPXBboNnwJbHoHa2dPs9A+9o43xC+cy0Nwg1jvxijkezeQQh4RWYE1uN9RNgMFIsWrbXUf4KOJQ4vaQtuGtvnUjCcxMFnHD7i2qNzzzfzT9KBZsJGSvitM5L2SEYrCJBNe2MBcGKoMDHW3W5Hry+c997qM7t9YWFx9NP9JVI4ODe8Mj4sjtnWwyytia/Pprrwp4ZgzyXllZXhoeGsC+5uaXVpaXr168MPd47v/03//vnHL9//kX/2bvZNcZ6a1tPVYDRMobGBjU9SKtPX39vNhc2LWNXn3xgN2/fs3+zgF+K5OTzxr7GvvKJ7+IwkMYdukMDQG5esxjgQCG85Z2UgsbU+E/u7F9CnySPBQ5S1richljdv4mXg8FoRyxnNUVOMvgIkMaworCEFRScUnSrBInOWL/uG1mfg79P//cc2QdwofzdwTDthyv79GZE5F53mMYcdpvb+u31pNDtZzy2Pz40Qxb/lc//3mHsTixRFeLfaw6eNaQLB0JLSIeHtFzB2fbX1liUNhA/lkTsAIyOqKLOSWgsBojCEYI/Vn8sGdZAESDkMTS2yNkshHBrPPrX/4KeVpAb3IYQ4J7lkv+GBFhDvbYiQ4Wdi+cvwoREhTggSf9Pc4DspGWqgKwiYkRsGGwEvooJia5W80OQBoZ6cWKkTdcQZqcPe3dcK4jzEfmM2Vqu6SzlOZ5bWyagJlYsXBUCg2fIHog/EPLSO+IZYqT5ta945aegWEfmsK0WkAPM8jszEP+UL2dPX1dsT0pSjLcpHDvTATR1aGQJ0xeNTWxCMKqDCV/UZ6LZqc5OB6o3XgF+MATOe/UcwZC9I6H3krpoJhgktzLWRByzEHLT8Lfzp5oKszCiddnQ4udrbLoUyPCCFLXQM4GPqaMQKdPpAJ8YFPm2NgE+M37kFnA8AxRWgPFtAKDt4pyhQeYN4ShV2aToDwy+MqNAV6h1QuS+0rPXqmoprRB0Xqxwc7AznPnz9ufSgwghhJf1OItZq1k5YsiSe9RDgHOwKC4oh09ArlISE4TQcEuLuXsmn5PbOEDxvkLUz43NjRK1BclEHd8iARI/OhBjbwKYaY2mQlSiwiFqFqYHeCBWROcHmUG4fONfOAc0pC6PNRPg5vkre+67V0qCaY21tYFOl9bXKZ3Hm+cLk/RR1kf8XJrUMrUawYr2YNqWClfbB+HlPNpJOwaXEZktEaaZzxyT9Hmj9ZJ9AoTdVY9QgzpTa2rAFCeSdKHG2JkcUbqHh7rl7PbGtt4UUEbGj/x9HNZFuJpYelGtMNO9kQ0YLIrDAhfM5U0njgdFQwklmjZ50Rdsj87w2p5cSULLyUKOW6OHvSOCZedVBFXL10mi1TTsAM04Mrn2rC9uazBlrLozmzQDsaw48lMKJBT5i6yg203cmMP2cK15YlGOZ6OjQD9NGRPRFN3W1P7YK91tN315Zefe5rLu35566239BoljCCaUDbHdhVPh0G0tl66cMG6DVXhD//gD9iLrSRbJfBcfjE082RxXkX0ZHko7TpX5BVLDW6Qx3e/80PPdTppzR5iRPLss9evXL2MM8/OTlcx+qc/eVMJpj+kZfcRuzMRvL+tz+IV6kVFk4LMTEzYSYxgdPRAf2iMbE8EJU5a4FpeXMA1HVKMw+vwc1OTGiIz4sSSTJj+6WVd7yEDcnYCNQrH3E9epwOA1lulkTxpLEgLnFBHzfOEUxB5VVEyCPrpLRTTCnzoIc5mYMijcLBhpIZ2i/hB8pGxuEPpb90baS8RoGPtRjp4D5RhAZaJdQD3fhjBbX0FuZXPus5ti+PR39vZZRrocdoz1+HjhuW11emFZbtKYE3dTS0rEIcQqVAaTyUyUI39zqYWoW9s19AkR+1CjaRXJK1F6CBxrzrtgS8tATpoFettJlHxlZttK+dLRt6IqYS1Blm76pjFhaVsVrHkxqAVN8qchqO94m0RKfnnKZNjXNWMU0sWAU6tL/7ClJ62ZQQMZghtB4+GgFYrQAIhsAFmTQNSvXoiZ6mIc9gcpMsgohzercOAjfERW9c2HvcPDthSw/NCmGGsjRq8e8wl4/jpZ66b+M1Z77z9tnUub6mFuF7GzUkzRb+W0xaDVNvWYYIbeuItGOAtqeghfnqYuTT/kz0MSFxGnBqDn39wpgQjKD67jW2DQxOOTkBVWoqVEF+g2T8G1GriqAXXKly1XWXYN7cRzDHb7mLnBkh8HHMKIhNKzpclxhKITVlt/UPjDU3tTlLSIZ/89Ov4iyGXD9gxy655SJOg0ROk7PokqbEmT7QacIGvwfJxvOseTz8SYeXc+Unick4MKe7UEE7p0ReE5uCBVgLCWM6CqDr9wMBpu/yFrnICEHtzhPvTeT/rDNbss2HLE4sXsInF5XUAIBUplqG/mrrsSaPLKzN1RIJPxa6l3tzkcbHeucl9Lp7/IsmZVD+T81TiL+zz7D6ySHE8qcBj5aCn5dBzmNcrcsgo6ob8dDH3JrFlBfZhYBMog7Wfz5MzkpsaCVEotibTAL+CtLLA4Ev4URr6l8FP1NvdPVTIJrbD+hx58zeN/0jCgdpqz/PqyPYmb01avEQweXD6HPnDiAIzUvnabbcYp04OwsJ0EZvx8sr2v/23/2ZubsaC/sjw4LWnrlDSiIB0yueeeZF1TzB8va/TRQgFjjiVK+tOE+ubnV3AsoqNvU2TGbx/+pM3xs6N9vWOTJ273NbRPzw6/snOYYEubAJx0mvDsdlXwEF7l4ytTkgeHJ5C9hUbKIcB1qG1gLQ54dHDWRRFjO7raR8eGjdGpmfn7Ie3w1MGJA/PGZrZWHJCDzGW0XZFF1xFFadmRMoqfVSkYJmNaCgyBFwxGPjUiaWoyAVLq9vTM3PsC5gejBHrwWB02OaJ65qWzDemBw8hRL+Etq2uFL+FcPz1jWvXrkafgH9xKpgWimkW7ov38+H09KO7924LiqpGPFAJWegvciTNyizyqZdfciWuE7x1jRV/owjlUz70Lws8AuxsDN+LdwGbfI4j18SQDrQ4mcGIY7SjKvP210C9DHUmCxuvrDzodVHzS6SzEINXOLDJlbijI9hiOU/iz7gTjmSjKi8yA6qjBz+PDil+HW8ib8APeAmqg/+VFW8l96jOc8XmQO+IHoYeZviLvQTx9DtqJmvqLH0AWdruvq+7X5Qb7ahDyVVppSebzevlZ+jZQ4JRgcGzA2IWGErzg4GqwHuig3wrh4e+AlVyW/0o4gsI3cgmeaXAQO/zkjzxl8zEL0hf+8LEZDCKAiR56yGlxdy8tbFu1Ztbbxzhmf9bTy1Zii3VZT0HW9ILwJZ8W+qENK0D22bQXoLvmTplAJXCjTWsGA4JAiDxqnJOeDYDwgYGK6fC1eIrsKX0kuRXReizMYcMlQYlEqBJlkcxpwML/syy5lk4LHg4XT0g6bOPW/tUmn5RMmhRiFJBAkhXyc/Kl7xiYfQTGJ5slXOHbII0eEELvKG+QW4b+hfYWkSoEttNmQgMeDIwzSvEczJPkYazDqNbwOaG6X+wf9Ah5XQ4u5+HxkdhDENQILCJxeYvUyYsImoj+uLly87hUn5hmTo4zqjK0RYPHYJkEQx1kbpV4YkGij8CeCxTbbAhye95dz0zLodkW3gI/Wi4Jbqe3gEkiuPJBrFMGz43e1csGe5+hohM/Nn/kvmuztEg11GqMssxxNw4vJlFeHG06rqeIAX8R01vtinjg+Hh6Vk31AWNxepVB+b0ZuF8Mmgdw3ydzUyzZfILz6fAoFsSGrANUKuk/kN3XmANqDrCSPboySyIn09xl+w1n5tZVvz1p6999zt/8YlP4PxtOB7rVQHpWDctOdTPLM9OQXNbXRZwk+8fS/n87Iwu/sH3vvfpV16dfvjozt3bTMZWHzUhNrti0mW8/uIXv0w4tgKAnnUijko+1oqT7Vguic40ezDbqCWDBpJJ3OhPYIQLdXeJmvPSyy9qOhIiZBOHfC32kRUYqJYMNKSlr8DJ7d55UE5bU5SHqvMWfgwB/eUGY/cKkkEIAHgu80mD4SwnERQABGlV0FUQgJ+y+VZFoDVNcLFTjqEqaYtGmTd9ojpXAFSQIMfEgaqptl3M/CgBn7UVONI/DTvbK5312JkFr63t4nu6f9QT8zOMGDngUxw3fU+03JKuJ1IdWg29Jqos6KsmsUCY1YFcbOf+Wl7AjBEPuuwbGJqcPAfFOjtShx1gzW0H+w5dzRYomSXEjdeDleLloRtYtlYQBOXo8vamXdJN7Gs6Jhw1osxe+wBGk4GkwxBwYXl8rjoTXnAvvgRra6tQ7cbpxeAhlm/urM2KWWsUhQlFgVYdV7ZSQiZm60TgtOJB9NdwLAx4xrlW+wkfetSuAzk1pHDwuFGy5xGIOABX9wDdA3L5OatJJlf9bDYQmGKwv5dTkx0lVk5YUp974QWm8cczc06vdvy0KAA6z2ZzRGwFoOAmcqOfKMBZAG4q0jxUi+SmpmTOF2EFRRCN0mD4ZSY3JPYcTonLILpWYbmOnYBxYLNBpqjYW9g3GxpW19bC4yJAJulTC9DeP/PCK2wWiXpBoCHgYA9RAQQrYG9ociRRu738HaySPIE9aXXGTk/3gCUt/ehki+vPvAAspZ0ZvgNv/IdKcu+vWmDMtf580sYY6Xn6t2c7I39ITsu37z289NSljV2sEJeNdcHhVeZ5wuy2Q5O0H4vjHl/+hwuFk+hSbJHU/aw150lTM8XHnwASwT2oxq3yJw+EsiPxu6kTZ56dvin5s0uiGucTgQfWU5fM5SY+oWi1fIL75cvMyeVGO/1MKg33LpVVcao+PntffqWnFRd5BojJGMObDhI9o4jxfG3I2eywzhmlpAkpo/0cThiyGMG7iHvtQulTCWn+hxHQyEWFA9NgUpRj7aomZlyZJ5SMaAsBZLKvfUGYMbljjwYM0sQ+ikX8kGsm0EI27c3nBicDWOFZCahaZjsUqxUW2giXRCYZunq7nr1+XSxdBwW+997PmSeKuJxtTPHGbjY/HyzPTrND8kJwoHe6njno4ORv/Nbv8db74OZHqBAtiluAdz1+fP/ipauXn75668N7Qoi/+IlXL168PjZ60cGxgie1t3XDmyhstB1ttKCs4ZvbWbmCVVsnu7qz2dRztfT39hrLRO27ti49eES9LJB3rbnDNy2vlDUBVEqip2LVpX+YN5Ee7W/CXpKl/K52oT2IPjocE1C4T3T9u+++470qFJsZvojC27s8VI5tljTfvPbZT7Nj2UuABeFjApjKCYE+WV9bWF0p+jPTe3ObuRPASnNaQg60bDjiB8UG6Xix8Ltjjjy7JkvTFX4iDt3jh/ce3Il1o7C1bDRUuypWF3k+71vb4Jo9OTnBGWBrfb2pLytkMptHTdPkM72GkfrETRki+rFqQTmBO/u+Ojox5O2dJkHMKAJEKztPyOkK8Ym2uwntopUc5J1IL5RWQIQfYSAdPQgMJRol8KZzPKdYcduyRk3DyUTYEZrUaqXBieQnxEqqML9IAY/d66DAyfRYkrIgihBkawBs+Bw+Mfze8WFQKSQ9S44+88ZRoFokfSenVtdewO3zszCSJyV7K5VxHAXbV16Bjd6tHB96S9jROq88UbvkuVTLx9jl9+oUfnOTNYzSUhhPUWeKlqIAACHUANKfVzgxR+8HiwtZOS2rJbUolE45V4W6fFVqC9tzLwMnGTSn1bV16tJ2z1E+4M31EqhcDcm0tCFn48CVz5Xsxoc+Ab+vanqCND1Bf3vwaJ34Qv4Qh4PbSfS33b3149XMmEZICs0qhwQ2vtT6FxgKp2lIUKFYnQVIY0FFsvlW8sSSjMZmQpHI7qHJYFuwBAqsryTgKcS3roJc2ajH/dq9WsBfCkwwKHI8VZGkSrbwMDNf8StmKIAp85daQAKk1eUVRHKcaiOXwxXT+NXrT199+im7FNIRxkk4XrzJCdZ0b1DZ47QwN0fFNZ8DUxdAHU5YACZG167J8/qq3kCOKiTN5D6+6miMnIkbMoYx1h9XxCiDh3X+CiprMkvY2ZyJKdNWRP+MXFUkbG4UAPSYWdz2vCgyjASWHFNyCUEGAMVkHYJ9q9oWI7QnVdjMPhubOwiZ6KBFmuyamduhjQMDoEH0ymCjVbxP8An7onA7cGpL0ZzTfQaK1TVssJKunw8ezL766qf429nla0tqaLi9c21jAWyJZpNjajf2urvu3r5jSYQk6PBuAsqnX3nlysVLKO3c+SnMjZnjzTfffPTogV62+vSP/tE/sg6AHljxTTRoUrHVlM7gK+xmbBYCykUi3//kJz+JBro6e/2ML4aju2Zm7Dkh/pnuGA1QB6nGJ3aiuOfQjsHK7CPdAQX9fYOcYFApFM9Mz+hrO2nVDjD3ClS7Xgv1lxlcIWhyPzugQtgeyqMc9EYQZdwp9BizCIHcT69AyMSDdZupFVv7JQdJmecIBs6H3hR/aIlYjrxtLaAbhLINDH6eNhyYsFVJ+odWhaJj+SQeUGRuC5QAyGpuSemlpixAaNLuXqO4sPimU9Yt6m8NDHb3dGgbccJN6DCGk6gE8pDMSF1WGJRJTzo6esT/hFRBDlAwAMqHsffrp8qJDLNaqTarl5yNnjRYZio7Bg4E5Z+OiiiXopEuFghPLZcyk7HR+sZatnCZQ2GEsdLGbQeV840TpWSgLSEjlNzblaVYTZMMfDxIRWgC3nWSaViTwYODQBR0g0oDASmbh5ijJlfsQSMwbFXUFhYFEEryS3QMrUZ29gDggDiRMb1kY/zKhr14gwP9SwtzlsrufPTh5MS4Gocu9M/MzXKGNtzEoGu1R/5MU1TdxxNgaoL48g8LzPuCBGzF37DFkJRzXg9N51xuWpy/dnLtWUwzSnnBbQXV9CqnfScaYgMDDADeq5j5HCorQgqxv4j/8aqMKBp/90xy2XBh6s7V89gmFdsiDOLx9v7B+vZO12ZU0pDE/gEXggpShZPU6wOtgC1PKi/0M4/oLR4VlldxbnmYbY8qwGYBFLYx4GEKRLlIsXrF0naUE0MvyxhOg472U5DArTVllRJxxlRRJp5Mnj7xophjyxvkj5fbqMTwScyMTJFv45SZ97kFn6s2F03BE5pNfeVe0WGBuSFqlm/dqzF8Mc+lmhn+PXDvxsPCsnNTP0++swTafJJLUnlMo2xzdFX9VkekmGJQ8KSq2SjHvQ4VAJW3l9oELUfModFMCSmniEzNCM998GnzmQ37xfys6Y7LzcAvokZRADIwcYRAwk6UFsaOaOuLo6bam3OyEm7OsZH0yv9GTtACfn1tk+2/r6sTEsyp7GoY9OJi+6oDZlYWWRYSOWx4mNDc0dnC3WWDPr6xWyJSR05h9Xcea1fvICAJ0xLwDfBzn/8CTvWDH/y4v2+so4PPz3L/wMRTT73Q2T28s3v86OGcA4CtnMcL1smSDS3sU1GVTkz/nenlTF3hJ6i9KgCs31glX8/vfe979+7eJpGTe7705a8KjYkksvJjq57EFwsaLIInBBtSKNRahGPNR4dOqoUgWbzDDy1nbq47m3CT4lQJDwO5eP6c7cvsN1wfdSVQ0rDiVu4T4akOdo/aIxNTatpOujoILQYCfFqB6mrvZP/D4klX6Z6tLdi4e+ejF557dnd7E8ulr8ipWbb86p2F+Rktt/xKEDFqbQcHANsEia6rfZCC8sEHlp1vfP7zn//sq58mxbBngFx1xC3D3AGEEshVFXIq9ifcwCwJHPTkeWeLsy8syZqZcgIUT1BBJuHHK267B81Huw17nNfRN70Qh4nKymlD3CELheVAKNOw8Ghcx3LgkK0XFPhDSwPbtn2WM1o6cOyWdgOzYc8Syp7tPvC/gycxOkRfwTCPCJfZj7kZ6wBNnm9kQ0fgbWElILn3DI4zoaFYbQndxgtom8BIWyL9GBcwD3jfhs5D6bEKm56MGs8rKybmaXLIoIxuRUnw4CvtSgcZaRkfLhliEGgJxNCQ/FSIVF8htvrEz6C4fIiczJggkY0pxhxPQ00ni04SF6AIal5hQ6EODLix6amnrimnJlCRGwsDj0+/adO3oagAmaZBDNNbbSY8y6+l3momMJRsOjM7gxZ45krJ2V1mMZlPuYePCykSpBRX2wJ45aTA1haBJy0CMLuSqJhgSRfQDiRgyKxklcofWAp/MEF4LtXnAbsstleoFJucxfJYdRIuQAXs00lWUcKZAMl0LDNFUVFK8DnZhTl2cnRkrsR51OmSnGQD2o3G+hbMQEIMBgXW58nSwpKfSjDgzVnse5pP4z9pc4hkYmTJY9ToGjO187k47KmL/KJAlKKKbFs+PDRCcQldllUtwe/FWyY87goP3wPOuNBZF2uvppZ0hGJdVZ0TTMs+bDAoy0qYQM6qqF1ZW6eoasEM4iql1atQx5Qr2C1z9McVAKyDoIsAkDYjgjEeSPf3svwflTXsJUgjHjAelW7yU83e1i4AoXkPj8u8qvyyAoB4CQT+q04QOIQmRHqIUsr9osHuJl1YW6fhESQSOtuM30hCGBwaZTqcXVy+9uyVB9OzotfbsdxdQqXliJ4WInLkUXVaSsKTuY1h6a988uWHD+5NLy1cfekTrDcgFHoIzDY2/K2/9bds+Ax+Wtq+9a1vWR1Cw+fPXUKH3NK++tWvksuIeZcuX2DFdz8yGrfAmZkc50tQcRKwHvQt4V7v0Fi+8Y1vPHj08OLF8zaN0Eo0jOl9anKKhTrw7Atet87APz+3ON+67NXE+KieUikKURTxT1GI3L3ntbP0r3LUa2awF9Fz5GdAoUBETkD1BK60SJLZWxTlW6hdmH7srebIoBavsCk9perPfe5z+D/x1UKBolSach49nqmlIC+05R6+Vta3MOuBAZ2Ey7QQT/kOcJG3vQmaIGJ5ZVXF6sAaVGMC04Wa4FtFe2I/gCpJ1fMrawJ8mk6Mc8IHHPEfQ0Z25LCiOhxOvYdHq+ZAogdKslJuHiBogARn5VRLL/YErJDSQ6o7PFQy2d+TkGNZoio3pwqA1kKHYk0S7oEkubFuqXxqjCWI3r6cn5kdG+hsc9uQuH8fUtqxifg69Q5oQmlgG4xjqgY5vCszNFpkFxkU676oE90wqwPcW9+yaAAeR9rrBnKS55ixbijLc7oWRR7aRUm0ZQ5BWHqav2Cshvjg7o7oe+enJkllc4sLTnO0C613wi4+ofrabdsf7hwyEVmVMYvob9JdYwnaHi/7jyWVarIJhkuIVuMvLM74asnCOp2tRYmrnAk7p2saVOcmRxsbnnfid/Vb0DRJ/mJ7i6tP7o3P0nzl6y6YDmPAXExywXCdSPJSY8tP2xsh379qaeBWHl/Y5vbmnoEehxfuHuXccntS6VfKd7yWVNsi8AHImU9daypVlepK6ImjGBojtGzube1btmg2zRN9lq2+iDbLgY4dEVNlf87sadL3p07HxbGnakUWIyNrx2APkCTl5FrUgMzSNV+5kSXYCG+jF0SzgFn6CMg1OVnCWMujSPQJLYqt1k+V6UmYoeTz8hzh+bbWUOuq2k0Q6nkChropJfh1CkOQ/SRRqVKg3yxMKTzc0EjxObNT7bvTtgCRfqRPo+PnTxafSUZHuyxBYYsWDfaJR+l0DJpci9oNZ6VVucEoMPHj8ohH3JEyJKMh1PoNNwiHTJFAkXjxnCctwRISIkPwMLRUrVORf4kHj1qOc8YCGcI02dXTxR2ku4FqdjS/MD08ks2pHMh4zTm33AjBdkgPRYBoOz85tuPw3rnH2KhR9sKLnMjtUJr8tV/72sP7j9aXVuysMhMsza+98JnPjYxPPHX5M5PnLvHXW17devxw0UpDd1c/mayrLbJLRzl7lTcLWmrr6o66RWYsSHXlA+T4OOtgNu5+cPPGj3/2l9DKlXZ2fuapZ663d/c0tZ6YqSOvFjcY61wN3e1Z3EcSKQZOQhuwSgX2LysUNgB2dvRR9Ht58FqBzMZNeeAfo6CKwDzq0nG9Pd14LD6wq2OK0F9m6NYcYUZUTcD0hJ6AhMJ+j2cezceIW46jIrzYbSbG09Tk6I2b7wpEJC7exXNjKpIBV2fgW1rClokn+xurKwLS4UI4G+DtlLDW0NHXx+NGQIj7d28P9GSacWANwAiXZvEoiagN4eG4B9nbDegirxpOaB8F40GWAaJDgta8hhMmzGhBCL5HwyKRwk17m0iHyiMEc9QXcidUZ/p0Gv36mqg+YLRgYhndwi8iZ6ZgRARDZiVlE/v211ZZMXk6EF/QHrEPge807VunZPknh6Q3qN4CqpAYoveWzshKod2XcQKBRiDhThnkZWoz6RozodMyp5C43KTBjY1epV+KAy6STy8XMbdMPZHVPCnTTohcyzJwkjJaFWLucCOb9RBsXHKfiaqIU+5Z6rQRPPWJEuSHxN7ObpVaxulq6OaXxmWa1NHY1Lmwg+9RUyLaojMKlP71+cnJqNI0qoqwQPU56VMDs5AcExIxhigbmMHH+UqNFTbXCgBISrtSjoaYfwEss/uNtRUfAg/dFrYQ/CAL06ir5BWQpDShTNZDdPqhfsZI5RAnnNjjuIn+ninlnLJ+PecrDIWoTOaM2Bktq1aEzVgtN/A9F3+Yk6G3a5uW4myYdAR4ZihOwZa+iC+pVN0nabVPcDOZa0cX4WwNHkKTRbuuqAZ/hLxI/kKL5d7ebgzeP2QZYav0EYQoSteqSNCW1RJGUxUaTnz89GuftfRNXhKG0pSg9ZBZp4IYxUqsFDgHHqLSbSCs3SGPt5gzqg2LPkuqy/NCmW78RH5gY7cxq/lYT1UseYWtLy+tIpL60IMQD1RQ8CyUpzeoc7J7A4sZ/wc2w5ujj0jwOLaVNEtk/uH/XXhCLQG9AKDSRgJjnwlXBojCA16zMA/uM8saMXXg1KodJyiD+UGfeeWa8htOOtpsOi9Ok/Cb+bGpuBaCnRfQQVtn/97+0cry2tDEubnZhemF1Vt37xItbCEluAKGnE1GJbYtLS6KpI6Zmp4YEEzMU/a/tYQO+3rjLUmAMcZxFfCwKDE6f+UrX+GLztQiKtU/+Sf/RIYPP/zQkhRisKuEGoA0PEQzTPss/bp+bTWHEvAel5MstLa8gSNxYCPE2z1s6zCRmxAoUpDGIgbDBZDnpi5MjJ93Y/hYoHjweNrAYSV0HZ2Y5N5jbd0kJQOUQnX6xyhuyRKxjbxaB73GF0jUjixxe1waAehCTaNpyA8GVfdtxj9fM31iuvYPiyYF3bt3h9ZtFwTjztTUhFru379rILTwZZfbwoEKmEt5pe/wCGloiATc1SnAEvreOFkHnIpp/6qxYifJw3bioVZRADyBeiBW7oAgEaV92rDglcEGrWxl7pGiwh88eARHIyObPgEAgNg2lGlJunYS4i6zWlRqX7nXMGW68QkWJrk3U3lYiRIwECGzbyvJ+hYSwSD5ymgnarBwGSKowZG0dlAZcsyQRHClifenKE4r0MICh1ONDg+0tmXLhW/5nKEn5cOGStXioase8qQgnb01Rh0PNRrA156OgLK6Er0NJAaGh5oJ9caerTamQ0G3Hy8tzM5uTJ2boH3AZ+yodqA7G3V969nr14z0q5cuIrtL3ZfsLcLjm5q3OB4AVXvLNWNHYz+e1CKFkiJihgH5kwyZQtNxgI8cSA/IqZG2/WlmB0nDK09k9K0ERVJaV4Y56aSkWAaQq0ndz1J+jFsmteRuaN5Y2ag040MV8Ur3E4XY/GzXfO1iXkHumXWP14lQ2UIksWI5368UnnpQDYEsPJTEXa6qcS/8iEN91W6S4GluSmcOYME9sDtuX+QT8XF7zBpEUk2DnZzbAy5jjIidFEYWSNEO5o4XufpZalGPxupKT5Kt/Cv3vsVv5YqJIgK3T/jexIhusshXJrmUgn+7SxXJclpXuaniuycRDAoIMiQ96aazm0hQT77N7V+TdFXFv/6y7GBu0qO6tuxOTHerqCbZMHwg4hr6IkHeKRhOqTzKeWZkukO7a49EvzV7ZveFU/AIZw44UStgXX2lKPot1oMz6qPMH8UsZKYho+sTLvswYj2GiOwTlfhpahoeGcJPidpWZjMBFqyb5paWllGw4WDXEHwJEUz/7unt+NFf/qB/sM8wBMTGps1COM/i/YfTFy9dYLkOxdmXIkxIa8dBaxZkjJHOxs5LFy7vbu1Pjow//fQz0/fu9fcNC+CzdXDc1da9uLBDmIQfu9cuX7oWXQN6IttZ+IaTPdKqrjnaxXlPR4f2oorYsk6Omc+FEF1ZXSCiMz7dufMhERDR/v7//v+AuqBFY3VR0MZdPadlxYqmyBBPNflGRzxp62qnpuoCSRNgQhUwSVzDoLCIdOhBZB2IhVQn26sawt3DkpgHVGXY8JNnCj5TpdLUi78a0I1Ui8iU5Akbf6kVXOQGB0ZefP7pmBvFAV3f4Mqv8G4BwDu7KczqIrj3dF946urV3nI0+2BfvzkPVGYXUFkC1bqyAnwyPzun8OLREGsflQf83sqGcnQExou7YskabRzrb/INczX0kA8MWA1XApbghmNGhueB2aEDdUZvwCRKgpnChUjM+EzO3/GJhxpeRR84N+hicynJT42SIX4Mx00DQ4N+Bo5iV1YjvsqMxY0YPI1H1DUGBJGusulNh7M/VaZU+bNvNcp8h50hAvelXem1+gowbhSbVseUC8jKacM5QVTgSc9WBaBMfF7Fwu2h0pSp1/QpwBTrp6vnPpTHrKGcmrzyMM+BsbvvaihxO+MKh2K5faVpUQ4TIR48HdGpGqoPuZ+lTBDqpnR0AnPwb4yDHxthdr5phRrBL8GtirROmQqBbclzApDnoPVTfmUSGKSy/pnGalRFTi1KCaqSfCuzr4KixgaGVcfwkUyFX7xw/pJaUBqcE+plRkoyh2/neiCmKhnapvZSUihccxSoNLBVFqQ6o8DzSAK9R9vrMY4acxqyvrjgFUEtb4fip2T/PJi1ggQiNAJPgjKaTlHtlYrIFUpm+q2VFvi1Lwsg9sybLzIYj+ITYT1EOYY5Q/Ll8xc4S9uhojOy/YkEamhTeEpMDvOfrkSwSqv0QGYoT9jHmDS5iJxUlaOeFFF7HA3KXxMUuQk15QDNcHU/Yd1Iqpk9cWMwlpucF1FxiD+ECAtRIb+evsHkSAl5nNJCcTpP4WhbEeZC0WppFkak5jS7qiu1kA/L1g44x8M8VIVEPa8ZtNcBR6X8lB7jXEnI1zZZT3QczUGn5AapZ2FwM/Xq7gJkhcjVPG4dZN6Wls01Pfhw/l5ne9e3vv+Dvc1dgqwVZFajNgH9BHlfCR1eunieGX51efHtN98aHuxfXpozFoaHhv78T//suedfYPa23Zwhn/gK2/ap8sxB0qD4oz/6o9df+8KXvvSln/30bU72VgmwGvOO9lq16GMMTupDJ/r98aNZP/Qm+K8/fX6y4YTh+Ps//AGSAYNIORimbvEhWrXBNc08iBeQG2E8DWprreIEqKIOcKURRGGMJoyFIifUCzMwjEKAPTA4XF35IVJOE4T1BN+qwlVOhCGn6mTwUzNRu0JqTyEDjZUhek4RnsvOhy/6XH55WsZKcE+7dTEFkicPJmzi/PmJbLE6imsdBaD0PgWglSoG9LX1sAOjCBm5UWtj05CIu+xpWZrV1J1F4pDS63rK7KKwP1FfOGBoAwRBU9/ACJ5oDdUpisrx1nvocFiCxuOEwlyKSVJNzpAIHqdlCcJIWHcfF4MsArEX4mhYYqbSmFPj+AgBDefPXQSJKlwVRZLWYIiGERnFvsCEd3YtXzoTinTbAhZIZOGEPnYkodPFiH7woEVQR4qdBDYKgL3kphzlUAmUAz+q1ihIkKwhWF5hqfIKPde+sXioP/SW6Dc8wyBQLyKmQiLZPERKYOAXlXegr5eCeOf2LW8l2/z+v1zd97NnyXUY9pdzzjlNzmkzFgssACJKlEiapqtUZan4k3+QZZd/tX/wT3ZZf4BkqxRIFl1FUiQlShQpEMBmYHcWuzuzM7MT35t58968nHN+z5/TPbtA+WLxnfvu7dt9+vTpk/r0aZNLuoaN9W07JfAXfVvnSU0hjwronSU4fIoH0yZgUGU8QGC6TGP8JLEegX8MblyJEp02eBhNiKPeJJkEN2E4+aWzibshNBMvIdJCaKgNGlWeLp3DdNAD39HhdhwEpuXEfeJ1CEsXRpNv/GI/RhCXwd6b25oltlKecG2ranZirHXR9c1VqkAur3YaIj+O7QLuUVFUn9ogP6KZ5BbZ3N2gRjktOpgkHbaspLK2Qr5+GxqWtjeARkkiSMQQR4wgPUheFkRJmgelRNUZVF4NWgcqwpyjG+kK1R+uk8mQlPqkxmka0Un/D4hkNyb3lgr9F7JfJbHqHggInUErqUdx5lF8GF+HPpjKh3XhVitRfwiL5x7++Bei0opEKpDtEiUTC462XIlPh62S/9RaWFdxjosrOhh6EmcM1woTKNZqsiMsabv6SZDSna2xWDnRC7eRRl2QeDr8WFxBzDtOtFgLDshhEnmEVWvdfC0SRdMbEJ5FaQRMdFE8CgqqOV+sj4QxFm64rBWFDu1Ps8ATw0CMhCYQpAlXRew03EBVDAaVC4eL4KJ9m4vK7KJKBsa+DTDGt7u705F57R3dvttYnpN8saOlWY7Q+cUFHPne3Qel5TWWjFeX115/5VVnfYtcOXPmfE1V2/7GXn1to7WqunracJXWMRDwET9mg9qEudM9wq3tgK397YzW8GsLSQ4B6SbO+6VIdHa1vPTyFeu21pQ7etr5qdc2ltNSEIKFDn21Kdg0Q7Q7mnj+MOXQtJBIyK4tr5pQ9J6IMzyKbGkOWKRMTE8GQ58Yf0YSbKyGUuiCSzv8drbCxwl7sBSmKQIqKsCFuH6Dw9QFewrdCd0cFjinwiuZbXhD7mQHAAEAAElEQVRYevu6nL0jYs88NV90WDKo2D5bXqNwzOrCwmPHB0X54s8x0cytogKHzy/Nza4sL2JumCHhYYTd+8Sfg/0DbhAZDQSZpbuYoFnqoENsMLiJKxSAPednOHuxupSvOtyKdCPbkZMrJAxRpAOKpHdQIiOLA/3J9zLOoRJPnBhj16XKYUPNKCQyCxXsxEQOAVCyu89hwQsefBs8vnoOgFE0l8wKc0wH0oKvMqYD0Chi6JA5JMQ5TGWvKyVwDoYjxgJrReH4M9hIBC25ICcINzhkDAFI/MmjoU7FNOoKBMboaDMwQ+CkXgTT0gffemUQYSazU9/Srkwh/ylPg/aBYiA3gQCQK/fEFd+aLylJiOeGyoQEP+7hP1NTzfoLq4fpEECU6ytr7AYXtCnJB29IYAn9e6JwgtBAECmBN6qYmn2V4VchGGAe/qgmYEai3upOYDThB90p5kr9DRaa+4gyPXSvfEaCT9gqLHyDpQaBQAIUPOQBT9hOMUIFsaIY279NxeSC4cPEGVwZJBVG6wlIw6I5UIHbE1Vpqbu9WouYX9RZGd0Mqk9Zm9TA4nWvjwq7AZFu267DWPKEYYzaVSIRYni7025XgqnYLsFkfOqIaNVo8ciZUwL4I5c8vFEk7t2btvwiCsjwR/SOZPCI28JWqc4GDQKbqyHp3IFAG/cgBqg4dKKow+LYmCBEkDEQeEvYCyD96cruUX1RPvcoulBSamiteqkwlcRQQ5T4Z2ZhMeRIksseRoUUgMISUcTmDV4CUjfxKoQIBsh659NK0icZGBaAiUlKHdM416+2oPkUAuSJP+npnriiIYNfWGDChpDMV/Lsu9UAmNxEd1OnfZ4ujpU1hkaoromuYlr6iw9/x9pdsQXAre3NBrl6hh+0NbV+9ukni9PTTt2lxVHshL6v0u02JZbfNBYYqVVM7pTuzo6SQlmVSpsEgL76qlg3DBZdCXlHFdaTKfop+Fy4SrUdAh9//PH7779/4cIFth9UWx8wrO4RDzsQJYMOBQJeYZhE+35ZsPKzUevn5+WzquSqt21AqiJMz2TBQ5QR3mXViIDjnwrFtbzkcxGfzIDmZg1pQrWokRSADfWba7pmZF2MEK59BVSlg/RPb9UMBg9VDp++8gv/akO6rvHJcRaOMG31aYjly6eM34o1pb4Kw2ECka3awigYNiWANi2RXbXEn/V1ku/gx7Rn5bSqinB+JzEgUJ7jh9vJGRDNba2rK8v4a12fZYX56vLy1s5mKzCkN4uTXm+Nr6Wjq76pcWV1XZbZ2ZJZKzhW5hob6lCLGFCgc70UOALZOfCVlWJ8w6ReXbEVADymJc+uXtlnjRFsOrNG4qBKllQVDRh2Eao+QETaQ/OcBCHFJ37lynj8ZNhNRmV66HnwPg8NpycDA/0SfiGIhblZKj6UmWmmFh3ZkOi1xS8PJbM2LeCnpqGxdGGRJ1taXBecKmPkGPwMABXKgyuVEYUm/MFH9rEdbG+OxUEzJkxpiQy7mPX05JToFBmyzXHnAoMnWUSWxOwlsq5asby8KVnqmdPnQM5UQGq4jdAs5wSDYXZ+rqK+1qL13Oyi49JGx8boRpYELHqFXArndnI8YxnRWSdhceRYbMLQeXv9JgOAaAwHNb2XBzKUP4TFAvG1PNfhC5bAJs1SGDZMuhZoTJzX/PUwU55XLgI2zW4MTmHcCgPi4Y1YVb/BVmJzp57m50XoikuyprJ6bmNG3wPVFcJAwtsUVQc/jGhoTUCOh1qON/7GPhLFR6uZoURG4RDDEYhZIspcw0em7vzc7NrqilHGVOwyb2lqFe8VMtHnIVQ0gjOFDmBoygJYDfnLW14LvbC913303UNqU55ouCz0cnqCLHO0+DdtCGA1xUwM9KotUAsJCUyPWVkePJ+uSsGS/4fsjRUCHwUCo0PpA4VdPPNwGTfgzM/zV35zufSQGhQTIZkXyRNr/cSynG9EyuHNvG6hjel0wl/8ELoYelnREcP3QNrK2PizbWshpSDHD1ADWA8haRhiRaXcGIaA2LEwaGZzOO/bh0t1c2pseK8sHTvMHrN2lC9ZWcGrCu+gizQSe9sVjg6vFTFcnfi+XNe0bgIr8l7HSnhJMY++v6XkMK9Vi9mZnetb6/acCLjHDSXZwLQwInWWFu3wNlmUAGFVxAfpvS16NaVFVfUNbXX1jR3t3fsb+4N9g8/GJn7+wUf/5Pf/B7A4GTb2+0LIZkzG1obGpdWV6vLqGIk4kSfGDNSEO4lZUyZXVUZ50LZokWAJIUDty9/i77Qu9/jRsNQAfB8OmRK8bkTMmsgJn8IPCEI4jyCc5DBzltnyQpxngk869mVlfc0BZFYPcFflzTyWlvKWMjRBEJrmJkVhQZlg/UhAIIAef4eqyDUawMSMkp+nuyciALY2ZtdnPMcnJTOQ2Ule/cmJtZbm+t3NjdMnLB5uDQ0OcvSqXCfhENYSP4xVRjOAMRJH4cYcD+YZAxdrOZGMn65mLEMhM7WSswOcOF6wWIigknIW6nYspEYuET5M6JUeKzJ5hMJKu8DAKg43JNwUb29XAE4o2nu/srpWVZhe6AVxyFEw7ojoi4SDZiJuliYGxlEW24A5qTHq5CsNcxpJ+A9ZQhQS5S+mwpI7KB7+fJ/qDqMuQowiEqTMSHvtP14laxM0IAs1wCmwdcAoVEkRhg8GJcDA+qadYmuxnVNqHaf+ATFhAJSaJAT9Kbs8zGjUnMIgQmeP7Oy+T7sins/mNJnVGHsAYv+DjgI7+G4qQH5tL5t9z7U3f3ruSvgItuyJb80L3xofjVNP/akL4qHI+8r9qjgtyLyuiQSvkByIjfVvuY+x8kjqkNsNjTpl4KBcwRiqx2djScg6thHVwQATwLG7IynVEWSFBZJKNAYhE1qW9yOM4cQa+dboHvg1bEBRTEUUhXDDeVNCIUNbnuNy6JPsdiptSgO1/2xkxDiRbndu39ZThkrM+p1ddqy2kGXGktkJvUuPR5yy4Jw3nE9JbFXtfvmDyRa/OoXl6pxfurkYkIim3d1xNFhHTYehERlkj0R7ZwfSpXvAhqmOyP2J5ol5iubi8pLOz83NwgMUkOyUv1i/OpBjwkJ1hTK2zuNC2WRFnmay6d/bN8B+WhHVXVFZCkoBM2SSyNZ9YTOIriIWQw9SpIEOJKvboKIBXQ62IpWErGXJVxJbzXd3LMxmAtAl9JYIMtHEczsrDC2DqxcGiwhHJOAMJChqOHinLOrGKlNYcYmUgqrTW5KAQdgQEsqoACf8MJJHuwua8FUIHJo8vhBfhhEaUahJloVbLugjxFlQSzQXp32H5ZquIJ+IVIlVKZcC+ZeAQy9O24mvg0b8kwRf/OUAdgeQ7cdTdaXdhr5CwyhfN51Fy2UgWfP5K1eEPNTUNzy8fVvIY1dPt47YRK37HR3t1hSEsN5/NEwaNzS1PpucEbR/4vjQjdt3ZxZWuH6opMZF5gMqNTeWGaR/tHDRAv/lb/9Oi1OTM3ys5y9dvHXr5u17txdWaMkVmVGL5zHv9AsLauCAXl21dkQzpslMz8wxBZsc9NgopVlNSg9TLSc+JYSHSBdYXCxwUsy3eqcAXnbjxqc2EHd2dUmkZfb19fZOTk11d3WNjY+vhFsntptzbjJSbWmYm522gwvAyFUSTs4diAVbmuBxPIXKM66QhHEQX8dABIBOJcM/POCI2S+SQ9guO55b21q2NrcHBvsLe5ur1MWzLkO6E47UAWKWq2akwnVQXJLWcQDwhXNnn43JFzEs2ydPFXZz7do1xw2gZghQu0/mFhbPnb1w7sL5zz67cf/hQ6aYSYJlKOyXig8sga9wYf8vZ0xFVW1zWzt/Fb5M+zS7QqlgBCOCxH74CbCnVYVR6OGhhLsdnZ1Wyq2V2j5CptoSmE9VgBqcSF9AgiyMB8BgRItwhFzQ97Z9YyvrXOl4jQmwMDevPGI2PK3NjcDTtA/12ifsNknlqxsdDRvkHnoUqCJ2KPbSdbV3+8oWEuTkuRbBY2cHRPFfOtFNsht9oWrw4eX5l5QnCheFKbxOxKdqMVswOIXzzNlTxphxS67QaDkhdMdI64IM94aNRegI++WdTRk5Nzd27Hr/3/7X/50Jy0EpVbIowpPnz+8dFdc2tJ8+/2JVbYsN6DBMKzHpNJSuAAQekhoRrATkwUc8DM8FkNBWWFwuxSAQDN4qGfZTOE6CiyHHwFuSi/xxib9kVmWSp57FNkFcWSXU9zySpHwYEQ5k5QJsbW4zG/FrK1P8pdb52GDRboQM2xgYaiuxQYSk1cDkWku7U9LUlXMmzGKDCBg30aPDQ0tjDx7em5u2sWwN3urqGnAunj2KmoNnkFdotNYIYu3eEbl8tEI1ijkVsUN9hBMAEGP50hAkpL5jtcEik9gL7mr02KjYuHlFOGjdIijU6Kcrvkofeg6fmF9iyyEz4wEBi/HmaIGk4utgqCxYZDh74mDI0CISE00/UhnFTGBKKYMzqyE3BCweSOsvgY6SYrnQ6pysW1HO/SVkfGT4fnd7+wtXL//lX/zp4+FHErCI/WCiQxduWFNRVl1esrowt7Y4Qx8Jt2Do7YF2WIL+4BjpzGk0LDZUkzh/0n1CcQwnbDwhN+IcBpRgpR7kauD9gjq6Av5vikGT3VGW2o2Iup0BhWLdyDgG33YEt7Q3Uh8pCogLC4NSajPtxISimuu6pTl0wmZzT93o6urBghUL+zUJckuU2KA8wqfOnEZ10nwN9Q9x/3e2tznh9aCk8qgkNhQF3qjz5C0ljr1bzKsdlAOhmgjKNIIkK+jNQHMw3UODIY1ixUXS/2jaTJQazUIq1sRKaenohAPjg3UsyU+RLowlCjgxJy30CQfStIvXsKG5QeXa0sFMEjBs4mtWDTRdXQMkBuQJIIVNuoIbhIdyU0iVnIYcAQKM2XhNjJmV5ePHhpw4KKXmydMnkAJPDRY/PTfLa2CnF6lDjmrClofcIlYPdcAI+zyOJoBL1/Mg43QbaZFwYvdaNzomQrpiegrJ8ISDxnyhABDeNJ5KWYlhgbCHUEPIxsYkwrAKHy3eRV7+xV/8xac3buCunCC/vP4xGgNPSCR5pUIFDfaCO2sIx4Uil3uAmSKwYfyDAoxHcp36FhmuMuoAGHM3LIocx2wGhSEcljhFJ34TL4k1KyRqwUrvcA9yXSVMDpi0iOBYRik3SApD8OY33/izP/szJ546y4DlBXtQQeH2qzvkrt8YmOQcQR6gStehbWVJw4z5Dni/1H3YzsOdZJpn+VVwg3QfLECZGAyufXlcrezbwhRh37HCoIzu40xoILS98NFAV/wGPCzblLsmQxAV4h+QFYsJBXbNRDHDHWmdw7FuLL2IJmEyiDsOaAtWk56ZCFTemrQ75atfm7CdUm+Vz1ZsAcCWlVdWl62eNDTWa0dUJ30I4wMQxUVskrba29q0YkTJRE4H7aJvz0GipOcuIOiXX30BsF9cAjkRrO6tEOgLzFtriAChsuKWxhYR/2QrY9cT9ymdmUMS9yj5KLChuSkM8eT301H8TK5vQb+0C3SoLTQfmMR5kv8ulhll9z/YpRKY2mxyX8krQPqjWOHgZBa3RqYjWMU6USlqMoOEY7Nhmtua+np6zTJjHaY1pzkihkQzIY2+3CLsTw+Jm4Ty5+YN+kFO4Q4L87aYRuEGbLgBVOi4T/Apo4IRK2yOGFB+BLTnVfbMrm9ur29somXlEa1flSimI1rX3fxEeU27jxmW9kXIoG+hlcqbggmlw6+l1ZAO+mu6+WVIw5JlW34fY5FEfygDKskXkHQzX56oHxGa+BGESMFPaobngFHSK53SO0D69adfJzrndEAkJLUqhX15E5fadFBhKmy4giPsSjKDVSbX+uqqqUFJ01PwAAC+4Vf7tAhn9iFjw8ru9yGVcmt7z7wWYKnj7EhfGXpof/rkMQ7gMCbz3RP4Z2Yw1nYPtn0uEx3IwYgwHBW3urYic1vA7KhKOWA2I0elJE4mpENP2ru7SGD16C91iYdebBhKAxtKNvqwAVQDNzc948wTMW/c3Hcf3G+qb6BvMBr9elLX2HDjk0+lRmbwsurzzLUJ1LewkfffA0FDgoKch+CXtNELVAEAOAkVtdh+zjrETADJPUPGKcDsYZYAQM4b9aiNjJCCR7xTWKJeMJGdIGDJSq+XllfoTM7nwjc1Jim8IUXS/FE899I3yzT83/43v617/+7f/OnVaycRh69ge35pkRdvWAjLyMjW3n5v/4CJ1N7WEhmaUmr5YNg2zVSUIxCOF7SOCuYXZoTUUZTtKlEVexsv1x9YQwrl6+seAhIBQbpGn8fPhjwIaYS/Tk1PQLRi4gtp7UYOynLhNGSxuofFgcFakYmE2tRD0aqtrwsRW2YTybozI7q6QglCzOKDmVBYQHlNZedA5xqWsxH7LZDRxt5W6JTtVbHuSF+MBTTsHzsuq44D5hrmF1dA7jQu29LMw5jYFbHvxOepC+GEc/lIQ2547VTEysbXZU8ns20ogE9+cTnugv3FyS/7sgVGtuADMVdNsfBs49reAePYtGHJ0f5p1gyKEKI0HH4zhysIjwltMnlcg9vHRTpo1NOk9wckpmpIbb8EhyOHlyO2G/binZBT8zdtJmPjkZegMotMGAoUTi2GNoRIFAy/V6r/uQatTOqjVzx7IWuMVJS0SfWoRFSzeb2zITUHhBeCeG9TVeqKuIFwVWZpv6teSA4DxhNQkR+q9YuVRU8wSoOdrBR2eH93b2dzM/pWEMJt746vCGTbAkK8YTybPgGHAvaJFTFHooUAMEnA+PWJX/5l8KS1AhVYY4nvvYkY64qyzS2SIGISeHBs5sb8IU3vkuRFE+Hu0ATAbUUN35S6EvyhEoWbJoYjyfG0J0GT0V/txibBhFBV6HSYZRRr42JAtE1Uh6cE8URsQ4lVavou36VAIo49ldIGKD9WXPCpWqdGhMgLNRcXMJB5aiD4mBEcCWXlVe3tLTZJSdUFSSEdLRkEfljbSRsplYeKwo8ydMkSS/KuRj6VtZW1MIyP5FzilT90Dybowt6pGISa9TNg6jSuiu0iay0aWFhBpc2N2DeTBt/f0aLtHNvct+F63oIrc3lsbMSm1boa66H4u6oCHQZHwIBTjxjAumDRrLurube7T2fDvKmpxQr3y3g3S2T2cmyUmeKkrmQ1JS9zHCFEFQQmZ97zVIZ4qPPUzVO8XtDRhr0N+pB8YJmK0KOm2dK4mQVuOMQq/VIh7ZqdnZ/B0LBQcm55cQWE0Isw4NYUQBs6zouFGtWmX7qzCaq9fRPNyR6mHo7kq7rqmtUwpWxAUkQ6kS2rIjrc2dIxNfns2uUrYxPPIITL07FTHe0t58+cJTAcO8Pr6FumsrRJ7R2tAlLsqjx76viLL1wZGXnCGyqtMAIO/DsvjywOaYvcaNzlVk9MgRLLgykChOQ2laDI60D4fqTNBhvuBgNBozyOKRcKBkFLR/BeB0kUVuxQI2Phyjz1gZ9DiEDMLS1xhA0drLau8bvf++FLL7+mGvIpgjlXOXZiMwPkZM0AkiRhoIBh44YexhYW56RSEZNkGcD8BToVP8BLSobpqF9yhgBBnyK0JOZLhEEYRE8812PzHmUjb90hJne3I5TIiCsc/QqyciJepWADep150NJMaSvu6OrATDcXVw0fVY8Mws8zbwlUqDxdaoCrQFdcBduHsm8h+5jS3nseK0NfITAxAWB4m1ZKI1QP8aABJcNwSnCG9mC6RxQQMo/jFUmmYFKGjZc0xWS6R2aueFgcGmSqM9mLaRC1rjUk5y1Mqk5hD90HwrDduIMi64WYSbh/OI7xEXYU/PiwukquOeRMmpQ5jkXxHQlBtgukOGcJ+BNO4I96kdVToEKUD3XKlbufKcp9YMdvAsB9hkp/ga2nbvIngDQWOEau87XB13WNn9GSwtT2lGIqwc3Y0grkuaaq+ppgL8jpyehTMtDzpCCG7aRCCM9Rf0om5MeqmuZ0nU5P5GDFApJkeQycW8iSLnZ7e25hCRy1td16Sm3yq06ylnS1p0wNNkBPTYyPjYwgQlaleRvMKo0ZJFDrsWrZSuEKPjVtoKFIu/DmT6SoWk+yrKRyaB2FKewCtj9duqBpHmUea9/60C861IK9hfUNLYQlORFRB+HqiwTcOSOWJVjup3TUcLGwmpgVsVxXaDsEvQLM0JX1pWz54G8qh0Y1651Lf0VTZIXdLA0JCBoDxm6PXJNJtoY8C7vcyKJTMuArA0Bt+fryo5gO+VKHTrlg/qu3bvIFBgYaNSbnRIIfWAIPnET0hFWntAVFL0DOmNCuSWrhJ89x8jyzK4IM7pVZXp3uaeu0mWp+cob2r1it0JLispq6hsFj3Dgn0BWUIrHWjibHwh4bHAIhceBbZzTR1AX8hDDSn4I4P1iQy6OyR6NjT0Wdcm9JqQnCHGCTd4qyCdWgIz/+8Y9VLgOP+m12t0uYPizXC58d/ZfAsq3Y0I+NPz1ZWd7V3YkrLq8soRC0octdHZ01VZWnTpxkiDKHxJ1R3Mn0b3zdCQbdZKjFB6YRyP1Oz8weFJa0d3ZpmgPUWofNCZAMqxzTAJVtxdzBSIGkKwgpnPfo0lkzpH9vX4u9RXPzCzHn064aqBfZIlWFK0aLj39+1rk8n9+5jUa//8OvGwmCKo61XV417ZqabEB2HvCqnBQQ4flQXw/7gTcPuTv8RXlhWxg/hz37ie+fi5hU9LZWHsfycgdtWEP0J/g0gVxAYsAAAO+5M0bF26AJwQfbYY1VVQYT3NrcmT9YdKMwFIS9Kscfb60YeWujjhMvk/1N5psSNB3OXgQZ/oKIIV1aWYPKumTGYZlIZ2JqcnVj7bMvbtq3Ylsw9Ok+E5RrBevhb6CPGaeghq1wlbHTgU3smEgA9oTZqgBNCLph0jAQExlyVSEPQCbeTkjFMo0eKaESUx5XJXHm5+bwEw5FSFAVYc3PTTnb2iTHwy4nFXzFWVBo+V+Kg3AchLkfx+XgG3RHUiXEdMw9s9snCoABcXgIjLi4cpOk90RIgjA/NSjvjcUYShmphMJC/HMzc3s4VbQquqNf1daI0hUiL3jD88t5ET73RlUq9+veE9oSVGGKIMnPfQYmKhFU+Jhqa0iUJxDU72Av97lS9JoRC7b8RA1uMqgQ6B5Tw1Lo6B5WRbI8t3H6j0MXcC+RGvpucCFTbbvrO4IN6Z0oyvzMDEUTqNRkzpBrIreSelnU3TNw/uJFpN5S16wJWyA0azBIhQwS9secC4siek/bksNKv2lHhG5E5HP1E+70LOzYRTBHucQsFKsiXfKVvBvGzCSHkQh6zvXElxGxrrDx1TC0Yo0ixXnLyTo9p30eJgXUWPPltbS1trU5Mz5GigrOkJV+aYtXIxyN5VbHOI+7OtrSQO9RfZmXupANgMg1Ld27PRKxVBxhP/5nGyutkR0pyEi4Du+Ip1FGSWo9YRMe3KA3WoYOoDh6tn+h3EouVFRIui8nL7v6cFskvWOAzH2AGT6JF2k7omcdtFzf0KgeBATwwFRRyeCQo9d3IdmEQkKQYNEcQhwZjpXxWYaaHtuN7F2jHBWQkSYhHcKFt/qVtJtfkJBAMMEgkvLh1zAEw4lTygLbyMCfoOruseusd35xiQoy8/SpJ3UN9XwnNudErGh7i3kHsWL3737xhW6ils2DPflMHZlIQs3Z11sYhwDCAzJjGpFflHKjzwliUoq99Ylb5gmdmY9MICXaU+3xoaGttVUZrfr6Wto761689oK1C1LXaZMoht0GD9gX/pC2XG966dDNaipAJAo8sMgjYOlwd3vkyeP2jk6BLpJmECQsAbjZ4U63eCFxSoooBQRk6nty89ndJHg6Ytg9FDJg7ExfU00IkjBoE1p34AzdonFMlRs6E7zyLk6G/K/MLBE3hwOXR8oL/3mO+b/4yquIARiB+eTJhgSjDMcSmArSHX382L0FXko/ghEJhElypGgulAcMLeihiBNEcM8W0S8SJmy1WHAz0WxZDo05uSSZ7LybcAVafCZfMKxsmmQBaoRykZpVlXukSEnx1PiY7CHNNTUzpeMbXI+ytlmb2t2tq4qAGKBmmFWFvZnZJickeBg7mWNB5bl2jjDka4Zh5JQQEq5uTSuZWbEC7qFCgVymwnYmR66yBsMvHkqP/+OEwTAolaGCae1X/lSfm+Y1VWEvASx+U1S1T/ypNl4gQg+TZ4qDwUOvVO7GFSOYOLNf40uD1SJI/OlS0pTJIgMN+9MvIlcmhGzEjqsyOktseaIkXNFdQOVSg1e5OXhzKe1P/fVrOrjAoCR9VM0K5/IIGIR48spyrAgJ6eEZdYNyKHBcjcQQAW4IhfrwiQQtfWljGwkl4QH4agaSCz1Hu3zOaQVAo26c9+QzDhX+V/BDu0EJf38SWyS+hTianMKeqxBUzj7KA+dz7oKoBLsLhTX8HdaiUtPRSiLvQxsXQ8kwlIcH0n3/aoxYIOnA76+GXrWBjUBMXOrJGEM8PnfJEwLzYPPKL0ZnZBcWJo2f4CPcgC0nOkF4tMNGnOBLb+FP4wyKtJ6xzsNAKV7biuU45pNfMk4lMEkNVaHmEAOMUW804Z6wZkxBr0UwVhn1VSgXZyq0U7bTcws1GDEXjfj2kK0NUt9oL1lBOptHMyNQB13GIleufk5PBhhBoGS+PHQDGLw640EN/ox1r5hiTgSfy2PnuZLkYGUpVT62vNMmaXJ0FZqYMqa2zSsUAJf8cnoq82qk3LGMU1jo/CX7OXtE3nSF/x5C0DnVX0o3brd7D+5Di6NvXc6WBwm3PcJwI90QJMDe+YsXQu5XVaxubihMWPCbG6DPP/8cYEpeuXLFQvTrr78etJrSY7779ttiRvQWohSACnYdtNuna+hJEFNA3I23UOSt59YZ3LS3dVRWVTjQlsZrRwRMU8ocQ1ltlayosEoqtPqGquo6m4jXNnYSt9nq7GzXBNuGQm5izs3PmDuwmuZpLBrouFD2wsF24NXJ/muOSTttT8VSCmUBROgYh0f8SccGB2wXQHRTz54JSZWezydSxVkcsWnt9MlTQG/raBew+cknn05MzyD6jcgSZctR+a6NNcS7/+wwgKbdbW3LIppGy/BUWwsnIQSxUE10pq+zR8tK6gacQiWKdGM2WtQI9S6p/mpGFjFhuDxjgSL4KeoxndxoK5NRpj8lIRQ6LE4ieDfhZs4OlVQboaFCA+xz604KGxXs3IlYQuRiATEd46JOTQjXYYszARWGE4VpEZqIcS0tHR0dQwf+AifA/KI/O9mjQBSO5yAEsNqQhT0rLD7UKTeTh875koIDbOBhL9JNmSWzMzNqx5TbuzrXqG7iEnZw8+o/+Hf/7+Kyda+t4vIKsbHHz54tKK5o6ew9f+kVBguuxRxE0BpKV0wYly5g9ToIci0SDG48TNfB1horKxYBaSpggEDg0eYhjd1pcqEnGBCxw6byCS4QGPi1K1eUOhvPtaibfr96wkNhxFrbmi0BDQ0NUMVIcfdks6Ih58SXM/GFnxM5h+HycakEwl1uNOEXSH6/eushZTXOAUkX2nCZGqgf/YxPRM5pJyspBhg1c2NZzibdrXJEPvIIZkEWJnWorU2NLWE78YiJUEybpbhz0Fl1TcMPf/T3q+tq25xgINPzzDSnOe7kOOcMiV+sKmMEZhi5kOyiO8Wf6C0xQUXcRwh1UrgCaZo9KqiMg1HCixqlc3rK2EcRssVDmo36GTD58ufWTmAjsMfSEMlAIY4lgsI7t250tLWePD707ns/o/IKZyOcaOLohdq3p98Ls6vzs631tSf6e1saakEcmlaoI1x9DoYzZgGDFXSNIyOjhs1HzEjaT4IS0mmVspJIlB5MMwRMcQE5y+YJXS0i3MITEx1J7ExPDZ0R1AhW7nvrZGUV9nGGJKQ3OL1FyboabpKa6ioH7TW2NbegDc41TlJrj1XVNQALGkhJ8TISeOzQqofkFsewwcfNsVFYoX06HSxiB1NQmfIeohkX2kYegPQwgQS5R57QkR27Yu3YJMWCwBOsIrTtBvTW2Nxqr5igGmZVGsxCS5cSi8xMT9+6dUtuOCXNd9IxEzwugZWpShNUb+1qnwTyJE8uKqoVNuFwrBe7qyki6FphQRd8P5cvX/zG669QAi3Q8zMNDR1/8OAeYiAGzF9f2VmQncTU+olE4ZZaz509a5HcDEKlqGxa1omp2ZOnT1XV1DFaeDpjY4jNP1hoUfHujn23DoILHQt4Ys9003yxdV4Z3dERLYZ7Mx0iYXnJjiz9gPOI2A4EhqWX4nni3hOYQTN+jT71D1UYGtVS3WDbPdjcwC2SgGT1e6LXygRUqc5AFJ6zZdZuCL9muPnbrI1ZvLnpiQkLNhG6GKNvM5wxXokzGAXPswT5aijNL/6sGE7EnQwI7Ask5hGmrV68AgCGzBDrPmt8y2lDTvxJpiP4gYrAiFIcOzcEck1r1ytdQpoJaUFmnruP6Zgy1eisHnvo8gT29N1DZfQL/asK2NZ5DK4+AszQ6xrjIOHNrrRqxGz2+FNh+FGVGoDkTw8zeP70MD4XQSd7FcAS/8wI91Bh3UyAZHHwfF4EYHnDelpY8GGu3A0c0k7yVxRHz1EshmUxGL5JZwHKgE/22yyQtQUMbbmHCj3KGjY1CzCu/EqL+VXUllbPtKW8hhTg7MRzPM/IBLbPWReGlfrixisfwgPdwFu+7c6OLiPr8nn+KkmeAjBDaU6dB/Ng89ZqIs0YE2aQe+KrwEnKaaMv+shtpAnNZVSowGk5CAM/wbswCidp9PdYg+yJiIag+DjNynKaje8rEomsr5WX2PAin1k9rZE2hTz8kgVqMI/mZ2YnZ6YFe8j5T5vSiiPJA4ZEUeDJfQeqV+6hhc8BbO5DOW1ooGJaweCOtBLonIXoEaXf7oiySvf+R4BaF4hlHjFIBUXL65soiLDhaMaEhocfchXTMWyoNQ/4mM25CAMW6RlreBFYAr32f+FU4SuNNP16EHvUjL5fLJR2jiMFV4l/pfYKpRuoeRQMhMsMQkIZybrj0oXQhoRHpgKeGEFtudyjCo/hwX3GRh4C4Qe5mLcGKBgpuzbJW8uZnigcKUqFlaaLjwlxtjQ1PHr0yPzFor/5xtfR6ptvvmmySzlBWBhWvEK1Pn0yPiIHaJKYTSJB1La8uIgbcP9HDurV1RuffibRC8/sCy+8cPHSpa3DPcsQnpsdeAhqx5Hon9gUkjMdPGFpcCHp76kTJ5YWFvl6IAfkcAtg93lAbQxDzOphczIkQOUruBXPCQkqhxOXtmw4Zhugf5UrhheZF7oJH/or0+vi4rzeQYCTE3jhLaDJMKkkjNJdNeewHS5m5hBqNcylPad7SNZnk1PUQYc+ggmysDKqmIrQGa/C1voGVamnp3t6cuLai9esxfyHv/j3Z8+eFiHT1dMJlLUVvV4PdmqpPxKK0pcKWzvaa6srKbKLS0sYvFEkkwCBi1H3sDOzK3KI8FkWCcfcyzau8dBuHnsjDSmQDiSD5DkR4hfuPG9uatQqgUSpTuo1MwBxY6frPlReJdrMlOfPyckHImJjme+54hu8mAlbtrNH19ELA4PuaYoInLojKDvWcMvCX4iwFF6jV2zvsg41mqKHw0OpuZBMGxhTD7tZ0yoxWlk8E66050zHPKvkozZiehwcWkY0oex1sf4oaNh2vcaWZh1BbWC2TiSCqKWtGeTqp3ZPPJ6mnYi/pRAqoHcmjLQI/G+AT0n/JTXSBOcNr8h2yRGdMKaKypAgCgCbK4AxeYMVBZcxai7/2MRs0hFnXBo2o6g8wngL9uWljkgwScW3d5b2ndVs7oWTJlpPgkd38hWVJfsHrtzktvx6qzWIQPz8dZghtEtGS1iZCRQXHABYOkXhow/I1hYoTQsjBsXnubb8m2nDvVaedyetXYb3R0+SdoqjS24DpaT8xuqixROWKhtSVVhFrH0f7YvAo+dgZey/ONCmjGGj/aI1R8qj5NATQB3ezlhPKizhOZelvnSp3GLc4MnjEUUXK+RyGSH3MAUTEsAUoPl/uAcDB+lvlViKTq7r7OFDl19hSeHoY4RPxI1LhIPV+XCsm1ACsgNQpcARPph0FcYOExwdgGjFN6TXwQ6KREuGFAKNkSBINKkpVkRdUVpL3S4XbGNLqpXmpbV1yOTHYjyBHm1qDzeARbC5whAiSVZo9mltwBqvMGWiLHI1m8ciuDiVURChy2Ai+ENdCLYcUiSZbWLExSA56yM0FrMm1gHgRLHdA5GHjpsukbJT7gGhw13tbfiggTPRzR8ThxrtMxoWJ6+FIsQvjCgIOWTO4U7B3uY2gA5kZBO2i35m0wmLBnEVmRbJDC0QyHJnshySSxtk0msixTQvQk3JVJcITwCVrZfhdMBhzbuaWtkRuAKrL168KLsoAW+iCcsZH5t4NDLMhSMCHvVmBS5cD3vOqIq1SlyU+zW5+Qtio7Sg6Z0tGfZJ5Nh8ubVOuTMXgqFVtHCfOk6dJO7obHOMaEdHG9gaG2qX5h3sssGxcvbsmbnZMVk7A2w4l6y6ufHkiW6pnWdmJh+PzPX1DQz2DUxPzB5xiAtVlCZy6ikVCv8aGjxu1U2+jfmjncPpQg9tGiYASA77ssvK0wnNcSRIRA8aWHsNbMaxq4Tih7DD/RZOZ6OPWxTihjnqIK0sBq1CIAMQ2aKcRJ9hOhDvWDpo0Zb0i27wCmAfCo6Mg3hC31LYvmK48srDzEyCkgrJRVtwK6urbONvy4skSofmni4WL23Dn2Jq2Y3B7i0WpIVlYsINSa9FSAjaTpfKXUJSg3WwgfUqccNcIcXBsDkMobe/T444cwk8PBA15aUnjsmOyn24JAyAUPe5DRjsoViSo96Hxhy6Ju3FTCc0UoBf5E1GAAYRY/DWn6mz4VPXYhJMgQd8WRljZJLy0kMLpkN8QWVMPT10pZmoNTUElhxqlkwLBVwZ/zrrrT9T8bAK/OlzN35T10P4AkP53GUFoulUQwYJVJAJBpjPTftVXjG/viV5Mwz5z3CgbGyYre3WpyLkwCpHcUdHF13E9FFGhekhJ6WMGhHIhzHnFr2yxq82U0YNmjARfKgVjZIISEXlDsZUlUr8Gk2qCP6ZVJmEmbRrCPDq0ZwPn46N4icurUBSwnMMNFLyFeR4TiwDRp1Ywtb2ljjuUMoTllRFjYQBl8JrKXMi0lLeBQBOIkOAQkRN4zmWVZt1fHOrsr6WqoEAsKxqZ903NLQ01JNezhOn1ShJ2JOoJYdF9iQIgujt7mkorrt49oyh52IjDoQgLq+uII0AJV0AAL+x84uk2aVwRUE3GiI60lmBXS+8eHF5eWmCf2tmCliV4VyLsEwMNqnlVpwPkVfoIREO4ACUtpn5BS5a+TcpUhZdH96/93v/3e8KrIctyRLFDhABrGsrYXwR9764o/s4BuMJjqEOJikYdIsQUMnUp3dG7eGoip1smboy5vO4wLnhg1Kj7IkC+udeQ7OM6rQUnofPV/nDXCCTSq4kyiNmIcFJ5/HrefCK/I+Be26ERwySS4UuK2BKIj/++B/84Aff+c538MtPPvnkb/7LX3PlMCMx8CcjjzIZDwwNXbx6nvE2Nn5H9pozp087DoVRxCfIJ2T7i3iH117/uo7cuvm5CJc//fd/7oyYb3zrTQvByMNzIuPq1RfotzgG7d+ooRm/N2/e4jUwCMeHjrnhUlVAGi80LyjAcekAmJ1f4EvR/cp1eeCcur7KYxcx4U3SmcYZtVznC6JGCwqaWtsGjh2vqJ5GiuDHLqloPCLVZeVnzp01cdA2shG1QZ2zzUOLly5fYCQDLPTvmGux68O8sUm5gV7LgIAmbgi/QJmYmOzu7kKLqBkRUNTNPnKqvmHAPoyz51kVK1S39q52EOgnq9QAP3o8InZAmBEDSRDtwFBsk1XgsLLcQg/61jDOQhfRGbFZzrPlXGd5Vekn+VdeRdSsLiyjD32AUESQBjf4mg/trvBr/uub524gcWpyEnOgNOokxGLpgomYNDT/xN59KyK5QtOqVI8cA7rsTz0loYDthpwRd+TibnRIiRsdNABYuYlU24pBNfqW1GECGVGZp3QNl2G82YJsIqkHSFC3vXNgUDOv8TCdwrYPReZGpmm0yN5BmmAwcnrhFQTSMMwPfTHTULiANqJdVDJsIFOE7iEhhJWEKX/osOtty3p0wbzCGHplVaWk0IwEK4DF5bJ3kdtSpCd3K6XW/yLEKJLUmEWEjfuYKiQIQ0C0oKlE0TSzRfYTr4ciZf3ncPlVg4cgozE8JOQH1YUA3aNaMRI8CTOCdqux+F9MPp+HPAomEZpAasfzgmLZ5yPpwU6cuNHQODk1IdI7uFxymiqPVUnqZhoEg9YMwVaYojJAnv6nKapnZGgsOBCIQvWM5U2bcWMnRuH62opxgQxKEi+1HBMbK4LUFmsryxttgW1qcBMjnfZCGZEj5J3cDMhAv6Ss3zmKJSC7EvVDg36p8eH3CKOJU2r19q0bjnjZ2N0+deZ4W0dndK20jPsQCvQvvnr+UWJOxUVp2TlpvjEY4aEkJ9AwAuXKM36a85UbPY14Cfg0RiZq9C2kmvIRzxDIRTUhs11R4Ki4pqJKmDOeqhzgN3ZWBY3QL8X2LC8ubKwLJ1myWIdx+9AKh7P5YNXCQ+1Ww9L8/NLKIoKz6AAPFk+Iqmg+9YJZbhryZiU6Nx0jqN1BuS5P9MIYgQ0kbhB8PpGHoKZGI1cP6VmhpKdLfxUWtc+T0d7WiQPwRls2NH1Yv3wtxktBwDD8IrPbBof0kZjjkIhYPft253DrIPbswYbWkxSWJidsffcMcmuViAfMlD/aIWFp0GYXpwNXh3KemFvMmj1Sx+g7udzphkBi1JDmtvFa27D1yrxWgw56ZapytFy6fEVyZRLaGHFDiE4JZ4TQIhmL11ZJYmaO1Yk2R24xEEtCA2OAkdYwRtj7E/PkyaUzGn98nXJpoxdaNYtYFlwq1v2ODw2ad+DHXcBXWZHykS88q64qdSJ4fU2pUJf1lVlBCQ8ejHIR9fe06vj8zBiEdbU7tavc7qCZmTlWxNjTEfzE9HHGgiXgM2fPG7Kbt26nmb1h9J9NTuvg5sqctRM7JYCqyxgd/NsozLI3teTOwydFFpja6A57xO1QIE+LDduQkwcUbmN6hF6V5XFwOU/yZfT96VJY5QojLn/CPyapjBmVnwPAQ2+Bnb54/iOxz/bysjKcBQhYmVA17KuzUh9txEnSZo2cPJZoer90OWtOp1SVdJcVWjvvGvlH09oKsReXilCz9RD7mtjwxpR0x7Gbm5qxC7kZIBkrXVucjzgIV2kRMYxKBXyChVrPMA7lnvGS1g+TSWHHi/PIY/nMFzqlR5GjKFk+uUuQkKdP8C88PdL1ROUxsZOeDVXASMZhMh6T98pXChtrwU4Yh3s1x3eJUN2bULlfWtGcGpRxSW6hEQ/9Wi0IXi912EGEHwRvTqs0aoJJlaS3YbogGH8gFTUoqSPu0XP6qjBmVuJXlEuMhXjSesimw0g/Qij7VgGNJlkZ7BSqc4XHjx9XFUFpohkgoCqjWiOVtNsIfdGoeyPoLdHpT02DChnkt25UgoS0qKfwZrDcUzPoDTGs6dwe7Foxhb3CTHJHFFZVRrXa3EOiDTGKARjYnqhBASDBV/5TSQ9jRpRXAdtukZrdOMHKYqWEAkaYw4UbwA3jH88UeeoJQDhDWGwcoOgV5XpUV1XTUdDhCXW/ub6RglcpV5XoPZR0sCukgjzLK66cVzIg1VbX8XJr10rpxPjkRx9/qLq29iZsxHZL6har1XneY08ewyRogWcsoC5TgpvngxXrxHTH3un5+ao4xZYgJ04KF+dnuR5PHBvk54zN+wUHsh7lzdZqKCl5CY1y2Vik8ovTolvUJMsw3UAQlPQ7lAMUlSiiiJODnp+Fhd9Mt3BrEI2CCl35BkoJGhc59uucwWMPFfvqoW9d2vZQ2fgwEb9fZUhINwrEW3LQ18FnYig9obnFtC0ufvPNN9Of9c5Z/973vldXW4MhcK6b7FCEwg33xOR4Y2vjuYvnTv2jfxQkVFyMLaicqDUjNIWMxFUQYSKCqJsjo08Ippb2NltyhdN4qR5+Ih1UrXmhCdsDjIumkajZYc3B6rSJzDevZtVqiGaLjFVr7KTlxK+SfGwzC9ghYiKfpbSTyitsiPHBBTwqncghhEtzPOJIS2d9mH9VKGxHeci3XVgT4PenbsK7J3BiMpacO39GqwtWq9Y3FKKCi3jElvFZDmUfy0xEmTOoFc3hDyZHLV1BbpoPdcOPHr366ssIzlF8ZuyJkydb2zsePhiWH5WTe2xs9aAmjtHFEUPplDPKIe0bYYhbTK+kCPFHRrbv0PYIaZNVZ1zw5WG0lvijP/XHV/oQIKWsruYzMGjiMalqG9mvlAYafEd7F6+5Ew0J1DhmO61FeKt+CpQ5TAfSnFlsPwckujOKpfV1FAPM1XYIH2oFggSuMgHFhkxPTEXfw3kTO4wJAASm3TS1SlRiVwPHtcz8mCdJIJJKtZR4Y4+3opUMrfmWzQNzQzftAnG+pn+VQROu6ZkpypDJxr7nc96SNHB2lpagfJbT9ccw9MKV1e3JqdgYQGNEFomnhwAOt2tKRkcKQEJNSUgFrl2x2tDO78V/QerCMk3LVA/vbtJy6Y+UTVPG4aDwTGtLpZJnLgJsI4GUBgxEqKOhj5lz4sKdLR6e79hkbR4ntVWdTAkSzfK6JxFVQB2LjUooILxmJmzaRFzQ0tz05MlIoXCFyCwRbECthlj9IVzDwRgxpnRx/ra8zEho6o/8ktn3bLeCsHqebW3jGIYNei0FwowNPJPPnvHTI87stzMiwgoMH2aysxHUBTlMMc19dUW/8h/Zs/ClNqPPem6zWHWVfPm79e2t43ef8lu7x8ct09gaHshMCyx4HRSiODQnTZCW4FO/iApBPYoxJIXHAzlyQ4AeopJy4zdhIFwiibdF2keXpj3H0mITMr79JbjhfRQ2k9LqY8FUUlnDrJHz65BDEh77SA6J8tBXwgETK6OS6/ExEHKWphsalBRmYcJRg4wgA4/toXpsNMtLoQog1yK/yNziAnrOeMO5YE9JvxDrUkwEC0euKcbTYCuSMESMkg5tEQZ3U1K1ivnVIzcBUlyxH3d2dkm2K+yFKUi0YDuokIPOSgXRqB1RnvwFPCJYAS5G8IAE9hgzmNXM1DQaPDE0aCQmJp95bR4hAx66sCAiB0jEias5rTCH/mSOK4AgaXuUAD54DwV3eo6NUp3xbsyUVvFsYvzTT2LlF1vH4n3FWjIeHa0tdETqn2nHdTptJ9VupJERIcfFX+UMoxIrFXvw70yPlnCLbsoUjoHL3iMvUwJAknGejoMbn33c1t5aX1M9+vSxYv39feCprXL0yuzuzqalALuO5Erd3Dhqa21qb2uenhqHPQTT3ERP2mHAKTkxNtrd1tVYV9nT2SKDaHHhQV1V6e2bv7xx4/NrL77AZSCNpAEoN5k43lfmQw9bnJP2DbmOjU9QtiTEb2pp1f2m5taD3c76OCbLbNlDkVY0eagPCkvt34UBLksDii2AgYAwpLCXrjR/DXBwiqKGsjrDo2QmG7/KqN9v0BW/e4reUWHUExYUj53pEwEtHga243zh2D6R2BJvlZTRFmg33dEDmxrrGGAiYhyOkkjrOQwy9MXn5ZVd3XVd3b1nz4XKGK1btt3cxBNc2DLz0Z+sSIt49q23d8T+ORqbkLHmljaTlQg1RyYnp6emZ/nn2BlWbcv2dktrMHBMEp8yn5gxdOWY/IQI2oAx9QBFB8NSCfYVPCHEIG6JC8RWirR4mzgMSjCDcpeDM7DVmVVq81XitwEVXZbuD20RcRq7jIQuYocKu2Td8DkMuEeg9tNpPbg7jY7ki30aJp6lnpKo76iwqUFHvgzbiBO6wsGBndfWhesd6kAuPyterhj1VVGR3ts7IR0II624IQHtRETwmgZ/UgnCuWaa+BwA2AVFH/BfWRT6AO1WaQxoJgZtqdB6FN4Q6bnSGoU8UbQfXeZiM5e1ZdabiUy12tI6lfhcQwjYsYRu4rywEN+7OBcSyhesJt4ZGif3JSOisTHYjhHwykP8uaU2hbrtHwDVEy26Se2Wu2GVZnpSoVYwIl4VPTXecG19D2+Xfh77evzwAX6PJoUG+cXchfzZ4kgKCu9hvpJ9sOleOlQaCPnIiXCsv2+gvzcCkMrLBKdRv0+dHBLEsby4LL/86vLy7OwUI5pkFojg1/+4Snu6egb7+4V6rOzuzEw8A6caTp84mQdO1wJXaUMF1KFzQ+AJjMnhdPvzG2OTC7E5i3axUdDaXrWyvPOf/uN/WJxfLK+UR8Rz0tmCdpzQCVUWN4hUizQyAhkocon645fBgPLxUswHpScpFlMYcRksMBh0Nxo13MBwxhH0ujzMvz7m/D7io3OuhwS9aUR8hZZcivmNwUpXvvUWfVszcXmb0n6lw+2L4thdT9JgyXQc3yjDNiDd9J2FJ+0P0uK55a5dr3Aibzj+Bvp6hAI/fVqNYiEKAq0SGMF7d76w3AdCQTLCO324MLfz2msXXrhyFbWPOrQreZ+7e3ompqfE/ABemBB9mrBTif4iEr+Cf+hvAHv99dcZG5ro6WhH/OKOFBC+Fb045LMOjZR5gPCQNLMBXyV6IMHBNdbtAbAqviRtEHdvot198NBb9wZXQwr7NkRPOifE3IEKlQcZUIP3tj/++GNzMAfRgFb99ElIK+EtM/cIRy4S8l+UPG2lq6cPWBat2Kw4M4Zgqwf5ysoRqi6aCgQowIy9cPGik5DZOjoP6aTInTu3DKVJZrRIfyuDzY1ywM1BsVFEELQxdtzm7kHasRHaEdkeR9va2CD41VRJsxb2s5MAQk0/fdNPr7QCeg/Vb2idJghUnVGGZNIl3EQ/8wTwSjGYSlQXvBhqlASG+u39VY86oUZwCNkfIxEJ0yLUx3Oj4kMbJFSiUdoCMyTKV1RLziouC3J8YhA1V1cWTUMgYZynXMrjHauH2vKrEmTp15/GQOX4qZU2zlqV0JCUkRbdrnPiRAFmBgNAX5THYnxovE02cc5rq/aDz8nEQihgm9weod3v70uStf/0ydbu0fomfanAuSswkK/UekRIW38wN1JVOONzt0dmc0QGmRcBXIl909REB5dyF3A/SjZKHeOaoss6VUsGvSSzebpImfDMfKmYaihQl2rw0J9qyw8RDCerbgblFZe1NNWN83cUF+zv2rnCmsI9JLqW1Q1uSPlwQ+AlrAa0nCuJCsNmkV8yZoWGsJoEdnglBTgI/AAkNm2F7u7du7AUse1JfhjTUMi+jJvyJ2LL/gP1uKKGBK37WLcIYot+xbt46//xj12pPd2dX9y7E0vJleXNpU3dvb2mDfJKCkGML8UpuODBAaWZJetz7vTaOFwi1ta9cRmFCB9Kl75kOtdx7NUoeQxdGYHxSWAxeuJDylSEGlvjonyvW8KOPX6kztzsjKQUq8uLCkY0y/ZWRVVFPclHNDpuOWYyKMrxdfxLz9dXa5etMlFWItY6jD9GmimvOT0I+yvYbESCGjKQaDq6lgwnBAl+r/Lb8En39w/09l26eJHHxYVF6JQPdSdATzlwTHZTAyNzGRrMkdJp7mAOi/NzBs5gmX1WnFCI8AJTnhVAAuV0QJoW3EFLcKnWwhKdzlxgoKIPAok63t3TRfW3n99XiE+guDGzJmEueG7XOroSksePy1oGXpg9Fs4iFVhwhpNnz+ADXCGA5zZ+5513no6PgdmyvUmKzwAPGHApNGZ5aXGgv8/MZa7Dj+1fD+7dhT075Qz0QE8IA38iP85CmJye3nHG1fLqMteZ7bmYqmMIVpdmCIRTp080xu5lEfGHziPs625nNVE93YBkcvyZFcLFmbnHzx597zu/UVFdcXygn6d5Ymzcuckri3vO5xJn3N7UMvxwRPgvqUxxHhrs47RbnJs+e/p4Y63anNvKDkSHpTzf+ssv8ejBw92OLiopMLbWlnmzBns7BwaGbn9xV7JYlhXDz/mPVC5mG/WgtKzKqhfcGiwzyJmOesqJoqdhP4b3LTiny4hTYf1jLkAa3PK2sxNRuLUmFwrxFTjxRZPMQLvs1w16CXs+MBexFsG9I8uHRTBITp9U2B+lCRM/tv0kjSfYhbyQObQgUSYdjfLkeOoEDs2GI7Ucm6wrF2bZDh7QRhtpTmXF1BCjTAhXJ4b/y4+vT449qa2posQgV00DgBtUelkfRoSTCe8RX4hLl0MVSiuuJbGVNlE9Bmk/e7iN9S6xuBBhGkVFcOi7wIFEBVmfQipYj1QtKW+12ZDrCVQnlCiJ4UeTySeqiWg6uQ+A5MqvctPsfaUByl5QRkNB8NC9W9jeEfHKMReSX5cbJSAviJV2NSTchiPWjYbUBjMGPcs1ZbwCmAo545T31kNAYgu5FZUroy3d9Otbz1VlmZoWoVH38OyVGxzAQ/fml3rURhlCn54f7M1rPYMdMzp13K9hwjM0l7UC6FVGhVZiM8Du3XiOC6tZJZ5gSHokb56vou97u/OLc6jvywUYW1qrSBsXsAGDC+uySgwHmOdn5/AQI6eS2PxaQSUIC8G2nr/3934IcqqKwlbLNa0XapA7WDsq0Zd4tbZuLgdbOzi4e/fpz997n4sEeIBP3XS+Gy9eBEr4FhfFW6BCVXCrAMdKjk3AOsHT3tLKacL2LCvZlyIcSasWl3d8rdHJZKZRH+Z7pHtQUPL5F3cxxrv375tbwpQvnq2Wsb25sdF4R8yceJStTWRnYMSrssgYkOtOMF1dQh4hUGw3rquhmTAVmCV22KMvhgBfmDxzAtDxd9XANfgpxDRjQ5+JQU9BEhhLQ0N7efholOgEZKYTxXzoF8zK6IVfX/nNF3/EV1Yiv46BUB6bEpWRZ7TqQ4qlPMvmSn1tNVJhKrz99tuvvPKK8idPHM9kAwzb5FweIgYUKEcz9NpBwfsD87JKAgzpAMDiocuejQw8c+He/fv6Qr4zAJACUNVDbPkE6bqMoHvPjZQBpWaHa78yNG/goTR/Imng5eh/tSEDNoPnvvKJQ0hqGxq1i9Th0GqzhtSpIRj2xJ/whjuRvyrxp2hJxOZGAXOQASMNtw8tXBNSnmhdeXX6JX9L6F42k1FVdUywLRbRUNM4Oz0JRGNAukgdgfppCDRKTfpSwAx8GWR66oNn948NDdhUoed/+qd/ymsy9mwcF5JOR5CciAd4NIL2mfhKDfhTS1uH7oHvIEzMWBTDmTHFcKRIDLK2hsohAtYYTKYKTAEAQmMYktqBPtTgT9+6lPHcJAGwUYQ46PAWqLCjX6BVlSe27ukXlYGGRIEAP1QqIO+S+lWLhCk5RsK9K+lfBRKCGgD3ot+4e6SbRHP2gMOGCa8Y+uSBELuB9vYOliUpoGHQ3hzjrNd6hAEvr+IjMWZsNURsFFWCRihnLCSZxefu37PLXgSKgVFSekeGEQ9dW2cHDgZyq21AbWtpZwDs7KxknhKICufQfnE5422jrgnq+JY2rSmaBqYopVcf86wL5fmr62gPmw8zLbRaSlLIHT2RTihUItHnKfs73g9vCoTeHTOcpylOU9q1RSKU4WCsoMoYg9t8+dMA5Ye56efyfD/O5+NU4tlamo9z+yhGayvLAnl5rKERxPz98Yl9CClI12jSd60+BoRJMmVGwID7CoAvmUMIKi7wN17/mqif9957j3JAgqIQxMZzn8uDWQJRTCRVeGQgMsdXea4/6/s6poDOp2L5pSHlljuQ/ZpBK3RAmhcYbGptmZyciM3lsTTPZReqjxFhLplvRw6EyqtJR5Ei3KnUaMmFcWfsAV55Xc6oi4UyXpY4wCj4oIYVczEV3BsAxBy8krPO4Q8UJid278cyPVhNUjzRGdwLszP6FUR+VN1U1yYKgRufIyAaKiyxtdF/UIMrq0SFvmxEb5yKHCPcfSmRroDTmkhbZiNcTECMwxzHsFyoDmyI2T04wRPTOX3VJMZ9f0+EPNiwNsQsOT5adaMMJ1QA/6XUN8epRz7MGryqmJ8+tHNRWs/wcyKtgsI166DLS9oCAHxIi+ZDSpOVAnwMu3Cq8eryErF05fIlkLY1Nb799s8ePLgPM3ZLWAyEcPBTk0g0kNj1Zvj04sKFS3QiyFcJio38g9U1TgX64Bc/jxPX19bBDGkwQBJaNWYY+FPYpbkmjKetvAn1Ml1Eykq6LIzHRjzMEHngSEuLTilZp2eG4yelZhON1tvZtS63qqWqqrKpqXEhjSOPH12+cJ6vCsXUtjSeP3eKALBE9dmDOyba2VNnfM6cOxBbWFl97dK1yWdTTEDZ9KWn4CyYn5nnod2v239w72HES+w59rgWAiF5aWFOZuHyEusPjoio3B6zMXGRMHCcS//Q4MLejn4NDfRENNP6+pPhRyKDz5w4Jifs8vzM5PgoS7zubO3NT65z4mDxuLqzBlbWNyzbWC6GUqzMzmfjgthURQJBo6FBUV6ZOPYiFxSVcyJ5G4InMlAH2RtHdGXxlYsZKmBJJchpZWOVKypepTSUOAFfOqpwbqCxhnk6lalA6xO0oE5aSZGwTcTopOHi8hOnYmOoYUU2WgdPa0uHyrVo4IyIVmLDf9JNTRnMPJOi/VUOYuupa0IJre3iMOOK8vWNZy7UI1r53o+dPodQE8UKzK1ViTKe+ARg7hE2XwaBQOHmZQeDSwFiTR9d2opo8HQpb9UcKeYKcRpPKGRe0mZ0wZiaYiLeBJRb5rRkT+Sam5QriFKzRmEGc/NJxqqe0rcQp89J+KQTCLCONQo27ZkzZww9dprHQhd8DkUGy4Xa+R3RDwefsaPT8Ijx6/X0DPqWJiRsWqMWVNVGYcAQMCcgI05df/Zs0hz3IXEPM/oFLbrmHp41ZDhcHpKsbnh/pF0HtvnlPS2DLtLXOxBHFG/ZiyF2cUv3vTXumiDKVeWCJRUaRzX5HOR+NaTO3DVbkvjbCSkqDTdJZqFQpAyYAa8qGrnnButgW46NRhENuA18wpvx4gFRUit6wVB1A2NqUMBzEpPnXzHDjUK4dBLplgLSuIj89yoc+rFiX0t6CD037goDQCVwGGSQLsEeSJ2DT190zW+EV1ipl61yZloRb4EHVL2mvfkzPzSymoPwSBm0s9fZ1v7+3fexnUgJVlTMUtUEwgADkEqLSiwpQBT4+c8rakrOnTmFsVy7dsVCJbFCK4Nle/zIMswWV6F7WEuxSolIeG5VIurDdueF2QXK8erSKitlcnySS9rWMDvpuIpsN47tQSXF9U1NV194Aep4ljOVAt7QwFUmV90BHmAgysVvji5u3LhhZtDGjaMCxj2md9o3AjOGOOOHjKRVKuNPlRsZJXlJnIJDUsWQJgdE0iDC1+kKvdHy9/YRzmARzHYhBAB7tpdRjj/5+KPElxYuX75sTezZ+LPy6ipNTD6bMGQ4LYYGDJYM05GIlkhNZo5jJ0+p+ZhxSmbk66+/AR5oN5sMisA0Q0l9GB+f0He91n36gFVEuhm/pApr64LATp855y2Y9QhUCl+6fIkG6635rgD8i+wXjK4MXAHbTXNLC1pSSaYlmJSPRA1yfFJGLToLiQSAtz554cWrCnj78ssv+6qrM6pFGOoxCgoU/s5vvKLtB4+GTePIwdwQgbOcXhZ96MeSo8ELmjXbsUuEwuKRj4LeIHyFD84GX7FuRN30tMMFylvbOlQ6MTVtuqhB7rmpmQVPXCqJdSI0RnEsNF3tfhALQctz1gpPHloKg48PT7dNKsVidFN4FgyifggCtI65CepPEVf6jOngJlGBpJEpD4kjfkXvQIR9BWLi6WQUCuFA3pJGiNWlLb6RBI6mOKGFRQZs/FBaMS6GXFtlYaFUQBGQIN1OM8BYDIEoChYY1GMWBpZT2LZsB5FSKYkrr9xYf8lg6wsMwL6GXCpEnQ31NVQIMthQUdmFROu1dLCz0zMh5KorYumtqNj80QRCXF1ea23rqqiqX1hc+5N//58+/+L+2tY2HXS36ECOoPrmFlG8FZX1FhtjHTLM6WC+OhKdDIU2rnii80mDTw++es40CTeV8q4gohRgF+VtVbFakddt4Y1unS71R6kvbQCE5fInXEUn0+XP3JboQb3jd7GE4s03vv712MJCklmAT5IMxsCjNGswmD3+m4YbC/j1Kw+fD4Ow8uJOMlT4hJms3/3ud8XkibSj/SsDySYqqLAdlk7aOxh9d8FBECQWFsH+aNFb1lkEIBFFaakh3tLJocuvibVzVNidzN0HI8O/8d3vSW5Y29hkXvBOAiHNNaZU4nG64ti4tWXCwveZhqELGYDfAeIZhjwcwDMzXYRkGBFf9iu/VZLGnxh6kE4Malqjx3fEa1qY9qHO4m6MK9Mai6NKC3EQf2wxvbmtGROP+V5QuLKxJSuFrAjUWYYQK8s2qdrKysnxMbyDo13GNOomg82oaQX3MfVMSTVAJngyAAjbUEKsC7t3+dNb+6z9uoDkc95K9z4MZIeBh38GTUCCAUVOMldEr637MAwOku2daVWvImY5moswhDhEjLFgdy48lBH75oVXdpLgoDJa5I++8cbrJlckfFicQ0uWf3s7ekQR+JwoxZH0BOQqlc2DRZ2gsj4Q+4BNMcv0N+98wXp3bwRMJOOiFwQ/5GeAw10SrVczdXTHh/DjRiwEsQqh1Ca2FnkjolQlA339odBH7OwhtXdnY11uBwYFXY3xb64ZLJTm9BfaFYNfugaxogTAs4mx7fXtzvZuACAAeJbMQStmlq6pE5fwa+KQGSMjj+xpQ+qCAfA68wsli4+3MJv74tR6g2iMCLyPf/mpOiFEndeuXGO1soej+2JL5BY4Ojpx8jRZe+fu/bv3HuAtL774MnEuHL+1vW1qdvr4yROmrW/plCFW07GmdESL5qoFHm6ps4C03bev70Rru6M644Q4yYjoRuZXT2+XozdxaZFRff09rBScmVIY8z1SztfBG3jUDO3hqE3H3+ASiyvLmuC0o6oSh/2DA6vr24iS+p62IBbnlM0ilu1nkRrVeSN2mAhzk6nCWewmoxaD9XGCMzWkr92noaIsGhiRZcZygxpTNIZ2HX+7aPtY8ilKgCuojwplOwQ3LblQSmWJsMlYgzjMOdcjtUTadkXCpRkcdEt1BD+qC0qO6J1QTdxr0XBgC0rSJSiCs9NxTA8DyhDQ2cxuR9zoL7lAxs3Pz+myxePgBsEj+f7xXi4M5vcGIueN6u8fpMGfP3+xu7sTtTvsyeJtEHzSCFGpe80BgL6iTuCFjpgCCVC1WYycUHvWNQ2HtkDockNh/Vf/6l95pQbUS3/SC71TubFWwHM1+JOc0pCxc2nUWw816qKmmFPaovErozaXMojTxNEQDBh6ZVSuwMULF7SL3hRjxYHWWxeUIjPNuVHSletnAGjOQ/DQATzPbMoGWgU05IkEwxqCXoYFdu+sq2wAqFyX6TlmNyUbd8KVIMSfOuJzbNySFEEBYwnw0FI2t7gJInz6/Pmzpq2dSEwpMCR9IdJKcEAoD9UZ25rWEOCzYFJ5tjfATIdhGqM66o2agZr7AnumW+67e7gy8SHQ9oD2llir/NlP38bxjh87aa8n6QMGvyIISDEzy4wTB+L3wFKVxASxelpiv4HQRzRt7gh/21jj9Y+0oRtb6x1S5u9uCaQFsM5BBby50ExSgWL5Ig83COEHZpQEGAPEuaaSHokKeffdd8GsdxDFhtRrhYGqF648FrpoYVbIycOHwyiZo4EvF1WbKPTDPCuxRzPFPZo3ZNOzs5yqyAP9gxDGVOsYXkwDAAqsWV9NqwGIsLmxnivQEoQRMb8styvmrScMAAgEIfBmp6cMH6yaVc+mJokDndLrnu5u+zhMNmADGDWqP/cCBrI40DW0AR4jlcc3I8QAGUTkpOOeuMmE7XR2LUKjwh4iTtW68Tn0Eg1qw7ShCGzuacXEpBq0iP/rhW/9qUV9YZ+4RzjachnRzvbWTDP5VysGDszgV5JccOOVywiqpOTzWzf8g03V1lbCsqkFjxFrKF8VRSgdf7O0sGARfldYR8GREzcdFNBiq6yzUWwc297lJ9NMS2vVSy+9ZKGBXBENIbhS5bBgiTHcoikmwdq0GAi9ApA1pfA0h6mEl2WtIuiDdFcbvADUny6AAlf/fejyJ9R4AmyodDiZ5XkYxDEQoblPIcSyzQGjppjI4aTKRnw8LcGuQaaL51oxn00FMMARJ6J7lafU0CBRfeguFGBLYEIG/Iq80ELhjgw/JJPpEXoewi0orlODbxH02ONnJgIY0IoQBh1Rf5C8eZb2+0ahtNbDoenx3NwChVDSPevsqNBOc+cy7Wzv2iptVXp7IfwfKiHw7MMTZWH4qbarkXv90NnRPD06JqZwY3keirh1DZzFdApVJPPkct7fApsrdzPukr9f8FHcZwWL3hLAx6x2apFOQQ5FmYGTVC9z2wbxyOMBEqoM/GkLDvMVn6ohXVr5VUOp0fynOuNKyQcFFVQ7Abq5WUCeBQGVQKzDJM3MYO3OecWE5CCwALazA4c6pTkQacVvvoe6fB+1poYMmLZMM7jK7gcWpo+EzRLuBf6jyh8Kxo0rA0wai+eJDb5JdwOeSWEF0QPrmDCVKSctCKnbbDgUbWrGxh8FBZ999pnIHOMoRh0M1GtmklUvjCmAUUJWpZoQEijs0KBurKNqJQEgptKNVwFNxLgHVSgnDNSHpI2NVM+nQFplSppK6A1R3hhbQxO7v7W1vLsED1T2MAB4ZykolpD94YgDmoQ4FWltd4Sjm3vVwr/6untE/5MCJrlIDFCWWYXZ3Tp74oTwm/Bv2bZhCWlz02qPliqqqufnpp+NjxoLFy6DIP1m0QtsVJ1ZkhuDcuHc6ZBkoU5FpwyO8XJhQegc6vwKl04wcx+wXsx90UdEDyzYl58jHXAe/CdUJbUyVMymkOrbe3UNtfuHW3YN6KH60Y7ZaGqyTr///e9bJqFHcaLv7x8Tsv/yiy9GTvStcKZyD1CSMgVKvcfBSY8U1A7svc1Dc4qKDP9MUXt3cJE8Urg84LVOzcOL9LS6s9MTvIKKNjE5qeaK/v7sGpyJNAtN0xMTsApXzY0NsDQ+9hhJW/+l2E2MP+kQ6Vcqa7VT/lbrWkXqr4npX1peaGlqrKkqJ5NYHSMPHwnV1RaHDY+Rk+cxVcd2YlqUBmhg8MD69Y8+QQbyPNCcrl65Rkm6fv26vWUaunr1JCKZX7xraVHSD2DoTnd3g/Ar/0l+jXPyKbKUtEiZs/CDV2ulq6tTZynKpJEFBI7U6vKOprrq1marXgu7W2tdbY0lBXu2FqwtbW6tLa4tzRKuvI+jw/dOH++HoqD8/i4Ugks7ia+2SvYxPtFiJ7j2dbZaG5FL7+GduVC77c7aXr9/64b0TXoUm8JTIm1ds1jPnUZOS97FhVPT3GynjXhAqotd1suLM6zU+trOnc11wlBEl2hsq51LDu6lPBxK07YhPYDz2Sg+DMU9pz7vbuDwe/vli0vzRBCyJJKQq8AlfJ5EFkfBE2r8cXibxTFJEbCOcIENWzHM6P3tDQ5Oe8xMEbsQEHLerMkzgOkid0pVsAEHYrAn7aJOoWJmkFEzZCgEZgg6xGPiQ5TVTvdEKjJu3K9HjaJBkI256yuj77kkEED0J8E3MzlpUMTMKYM+OS60YtHeOVPWjV9+6ZXjJ461NLfGVrRNx2nL27ZI4zHbTPZMzCYdypRfYm1z3UMyQoWGCTDUFKpMY0Pdfb7A4WHA0EW0i04oUuBXxgICCYVmdMRzLAJJUL34HEwTnfJVT3dvkhG7cqlFMooU/hqoPLQJzRun4kj8zZBbGRkdhSKkixuoys3R9DQ4wQMt0GVfIzewzY6YBRIQHkcMiP2nLnkioIoUJ9WoaOABarCHeLVnxGHSBh5dgD1CGHjirUFrWzwkmBrmiMw2Du6WhyA2QFTFfNepeHuApYdvDp75THQBcrzFeykL+3uxiERlUFjluoCBUAaIs2xg0+w9z2qMt7Q7vVOtvkeFSfT4BQqnrDkL7dMzGgklUrucQ5KGQyYAEABmyxGmdbKNEqolyKFRcpZ7wr2iUQsd3d291nAoYwgYXSGzCOfe3FneseIaMfpJ0MfJLZs7axYFG2rrRVVKOCtn/ubaxtLyPDGJB4s6pepYP1xeW6E6ZICzjqRd3JvyCRNKAJhSpoPmUYBnFpn7Zt9ewbpwmaUF+/oo2b3dncgm7KIUKhY4TOE9quJLlQmGwxQqRuWP0XqxCK51+k9zSxOtkp62YtqvLpvbEo+jdtmTIoqXgKSQOPcmhEyKvrMp+emTBMyhRhEPNxaiowxQMCyC2RLX39cLErk7f/HBe/z91hxART4aC6mfQSXXAu92Z1eP8FqhGdK1GegVQXqcpWmJWBSiAJ6QvNrmvUoakch+ww0DLnQSw5Es0jwdPPFtJgDzyFhrF+oUBrrx9S28KWO4QcuVg3QFIJkFWlEJ64jNSVIrz7Z5Jma6oOD5rNzdxqbc+5zgtnotXQHlh94b9MStkvbpAdjFFMTWNjcW9FTokC/AaXytc+309DR3dnQLMrEVGEXGPrCmegqeonglGwv1EMMWzRcWlxcmZ1CYUJ8F6ZQmZ3t72oT6Wn//4Q9/iET0wdu2VrFVEVc7+nTcSEfacopkyfNoRb3SPDcwDV8QdMwsy5Rx5H0pDkvYqydfSuptDHJa/oAplz/NZ6BjkTomrlQT/szDoLyep/7H+pc/vVWBD9WmPFXoqLAs2HvSooKGnWJ0sEf20P91OTdKARHVhsT96VNWrjfbO6FzkFXqP3XmNEhUgoBQjNFKYxbjREj5CsxqU9Jg4xHccgCGHJMHpXpoSvi2v7enpLKko4NWsY+Z0rGVwZtsoIz0hxubphV8hupfbidly4cffmhRxVlGpRX1qkVS69tW5NdjznPMB0RiQaTxEa1CHElMFMFdwM6XFpVwz3yk3wbqk94PWh32bmZ+ThespRh3qyKIJNlKcQYnXPlbyfCVhwrqlpERnvXM1pIdgdnEBA1umRTo1IRWEEHypfPXrq8h0ZWF+et14ZI0QDiXuvzmP4k3jhkdwRSM/5ewh5L91T0cgtaffpGT33yhBIYylcvou1Rrf1HsvItvZc2h4AMrTAWXh463jvSYsbcpuJjLc9W2dEQsrHtPDJbLDd2eHi2zo5otl4k/hQPrM6ZwDG7scVa/aoNnqoSrkX9IPR4ERUHiTlizkAuwtMEmKUxaSQ1pDNqooXAadM+3R1OEClllZU/61RXuVVjTWedfqcysYXYUVcaMEt4jjsCuHACoDF0QQzBaYKmUE/Vwv6b4qJIB4F25VOTmH1a552QhcfEsPCsvQnBMMQYA7WR+flEcgitgSJfeSDldUdoIJ5kTYbhEVxKE5RiQviWVyAg6o0llASjshx9QNkrbcCWSZ0qxd7i45Gz2gWOkio5wWO4SI2oWdLR2x56TOG1jwxY2ww2ZDKvJiQVMKQm/8CnWNDVQO/DlwaF+KF1bWTk5FEkbZcScmhyi1BJp6LaO33ej0NqY+ViTfIFgcjqa3tlSJhcHP7dIACtxEYmTkp/gGBCoTn/GWmhy1FGR3TO0vLWA7re1uRn0ojdufvrE6odpG46ZpogYhllM/8qlV1AOPm/u1Mn0hWcfhbNHaiZjWrpTAjwHs3P/A7uxqZ4jf/PYMasHBtfE4h+xPGg+4gCkO78JHZRJQGqyqb73vW9DO4Jn+8MG2dna1k75dgqcKbC+selYd/uou7p7eGzaOzvKSsvtI25qbDZCdjXYtaxaRpHhlhmathFssLj0i9u3iAOBGb/xnTdv37nzn//qL8lOWyBbm+pHngyLmGDPPLz3xfzM1LUrVz7a3lyal81voaezfXRsFGUyQrgdnVo81N//f/8///a73/sBXvp0/Kl8X1euXZkoOLhz905rc+vxk8flgZK+cHttubqikE5fcLBVX4N7F09PjNhQ8dnHP6fD8frzjxCK0nATkyhN2hGEx8O9srxiORQ3Ly0y9GvOJnHhuLVVDQyb5dkIxl1bmDOOjdWVNj2HWhnHRpQZC349tpbBxTzXV7aRthRUKg+mIjFkidE/IjXXOE4x1AO6YFpYt4MfgWyHuFEyuG0YqpHgRXkMKzZ70FFSgBxgEhX9Kh7SOqFh1borovoFMzjVLjhmqPiG0ixj+pr6RsRkcH4OCjT7PAngq6ouXTwPZvWjFjCoB8L9Sf+zcC5fixUCabZ8hfh9mEPdoqHkvPQVkLTiLUJFn0Zcr9UAAGW+/e1vO9ECSoIrp/OSQRLI2d830X7v936Pb0WYMhpjmtJmHjx4JBYua6uUYDAjPKItCz5guNyrH4WYX2WT5faZaBed65RXnrMhVQ5asOEJ8KCnXvmW7epeeV0AlXahC+S+1QtlMrsGOcSaSryuyhOLKMS3zMi52QVvwW/S2eqpcpceKdPY3IwYOJtWE7tVJxjSrtFIS+ATPFUTCmtdc5wjpjCGj02BDTzsDRY44MlM1QYTC0YRqw1q8BVbABoz2JDgK/j0IaWQ7qiYEdEjN15h/8MPH5KTgPen5yoBkj66Mhi6aZ4CNfq7tzX1bFqYA/ybKZ6I3Xry5CmybG5uTaKTZCRHg1AJocMipGVbyfZoOseDvsF0IaaQNEck5T6lWNhcLrbzwQiKFgt3LWcmNkzWc98TYJC8vbPBnRoJPmK/4G64blgddAQzwKnglVU4APVaL/QO3nTEr3c65ddlRPSLeiNORh/p/SCRBL2p2RmLHeIgOAioLmtNNL2tvEaHxfkKucMVfPKhWD4wz1RO3DpFIWmqlpKqbTrFe5VBh8PTUwvzc7icjqAixIYzWKCIRl1rMcp5UAgqUwxXZ3TY02BP9tLGPD0EscF8jtfK0wcAqjLomtZlf+pdnolGXG3gNBesiIpE0JCSsGGMDGJywaxpFBKApPI8+1Aj65oDXZ2eqMdcQMm8pVpX2L15pyMqVwbylNFHtOQGAOk3HPfQrDyqo3EBBlW4yA73rlRtSC4PEWHhd186KS4WYik7S6trZoutsQD1GhxtLc3sUck9iDRSdnj06bKTPzc2baSgJNgqYCkA50MTP/je9/VWjRyibHfw1Iqpmpj63CkGCCBNnqxhBy1HWk9Mx3btEuYB8caQRIg0KMf+gBKCMo70Sm9deZ640TewJQYaU8ImFfmwjYHRNAPh0VsMxWRDf/oZRJPCjj2HLE80a3EM0WSURcvcrqGoBqVmbBLq1FWXr0IoRtbtZvXAyZwsWhH6F+YH1d9D+omR4IwX0+jMYLqcSvQCqKpN1nvokSaYcUKUwhPdKMBl0d3ZNT096RiOF1+8htOoOLHmGvMUKSMR2ULaWlpND0zM7KU9FBWXb20frm8d/OLDT+eXHe23X+6khaNDE8feOOqonPC4hxO0orOxxy7aShgNaA0WwCw6A9JNegVJcbkvSUcJmLM+8tqv+ygY53EGfvQIBwyvbXpOXUjVBIvJT2Ic7Y+zFhvl6dtIk04cv3wtmqDyY3jqMVhGDQzkoj8NhLeJlKnAWoix0INUc7CPfCngMgQxPF9eSuYL0/fM3iRjHV4l2mQsIMo9Ghp58ClwpCuv9svWrLzRUcZvfuUJ0sp15ydeuTyhT3M+xR9lpSQKRVYBdeqIOZasBOLcPsaYkPij0ElgR4VpL79nhoBbDiElUyH6qNcJ1fBXiE8/xxqpAAVhEsdF0kQlKeweIWnfVy6qmKZh1/q0iCN1snRNfrt+9ciyltqMOCaHGEwQu9FCUMXGmJDxNPJQZ+zAWF+1cKSGsHx3Y6Zgz2gmc58gm6Rn4GLWRunBmFHgIO3uQjn4kQKUabLGpi5RpRbWd7d24yR2PEzS+5XV2N9G64n/hahIrMqOhbC6wwwyQYgOOnooKAeUbGClQAg7gx2LW97RZs8bL0qDSH1Tm2NG63w9MGldEZ/VHQ9NGRkPiPgkAgukzMH0DRNJg71YwDx24qTeiW9xxO/t21/YsyTseHZh3oexMyTS9kWYOFVGvW4Qs17bZgQGpp+ZLjuHexwpcFIY8btGQX9wFsiEbZvXXQ6UIVHk6zB2WRYeHxy4e++2r3AVSeGMPRKdmpJZoQs7NShjo4+JAQV4cdSPgOZmFgl4Y4f1Ew/66AQ9Hf/FLz7wJ+L50Y9+BCz6HxlDuZfZ2efGyCgbYnWSQzhYHZUi7K99Xs+MTwLe51qJVXVac1kZzmNamZVkpA8Nyze//W0+5+vXr2e+ajYZYlsGEV4CspSfFXn7EISEIjD8UtZ1MM3Wgluff2HD8bOxiRdffuH+3QeNzQ2CGL/1nTe/uH1XIAZHDD+jPYtNLY3WalbWVn/yk5+8+OKLuqmPI0+e/o//7J+99bOfMf00F2u9G+tQTW/jh+YLfuGFl55NzGAWmDPnmWytwHbplO7nuWas3ZsLhslwLG+sGWjEZtoarzSHwoZX2GIyeQxyF2EXfrvCgpr6ZnGoWlcDkHyV5wIIPXTpZq7NDY4uBAgXCN9WuoIDR6BOSGKfc9nmz9WTOGdIN1jFXgEQpiGZYp1LWsmyWOvGKcgLPlmfczRb6DBrvFU3+vQtULWr5vg6MXMWuNAsVKq/NMWZ6Umv/OleozCjKnVy1SEY4MEJ8lbYZRJxyalfhaaVys0dDVEu/WJ3/IOev/nmm8g7YbhIIqX33n3/3XffxQEMvW8hXLX+hDFtgQpRuTyfmZuFfGdQ+M341AUcWyswn3AVPNaNyt2oTbCOzioPJFV5ok6vIM3llcJu4E038UowmPummzKUWlYKULXFjgt1pzAKNDe3wENoew3C3RvwJ5l8oMiFgMV/awKuVIgX6Xh8ni6THXc0N/PD7MsTposfEg6WrUxqwNg2CXViVxQj2VXloQoytKoFLXJlPrGC4FMBLZp0shrjMKaqEdEFr1wq8SHAwKwe3VGVjqjEV07oNdlbmttEDN67+wBzEA6EjoQ48iZwHdY5L7ygOIgqjrnkNZOplgSM9VjGDnKLqIvyUqc3hLJQaovUohCpvMboBTLVlyzTsQQqsxHwlW/JcL7k4ImO4I2d+9TmQ4nc5JQy1pmKgIrY/An5IHcPySoEub64mlsjvogpgvP7pfOQgjEJ9thXq361oqx7U81YoxOkBVeQ39LYkpMBGCvmQ4JEUnLuLH7DMA5dSBd3gmdtSYkLaViHIaC/AMYshl4f0F2BdO3aNaGJBI8DKLmEqGc4ADrRLuDRpJECvEsNlBp1Qh7a1pCeqjy6lC5kBkhTRkE1KGByCdPyUn9d6vSh8VUArhgJmvCJcX/11VcVNh/NaT4ip7qYIHCYS5q5IFdYJUBCKshPVd4CIPGAyJGlaziW+gX+KEmx1wRPimLg11lTB10VfueF43q1LFdXxNzvxNl1MotH7ISIc5vHIluq1EWInsNieHS0u+/E3UePiLbjx4YwI+dY2WKIh5DBN258eiZta2CmAZfuwuTfhWq6dZqinIvMUa260jIEeR2ZJSzjhya9zxftTDs2fbBFAIAyY8oMhC9wunF5CGV6aOkzxUdEhQqk3lZ4DkF5VHwCj7kev6ZBcrtAQlZYw6ZXoXVlLh9qh5qjqlSbkbA0bCBNPLmRFDOcTOTHo0+8sMQG3byGLvZIEEW4GQ6JN/qnejRteFx6r2mwqQGRIF8KAXamgOeOEVGPRk1jChAXgqHVdamBxPsmfh3HM9FJoDRoouhIBsf5+dXhkWc/ffsD+xp4S2zOW7SPubGOXW5RC55o/6weLZrJEVnBwxE95kymqOAfB6K9I7zpV8/Dfg/qjGVsuiQMBZfxD5YMWxBuFHO/8nNlkglgaU4tz389yc/5dPO9eQLJX5oAsohUiLHPEstTgR1WrrARWYajthQja24pY6SE7GgXlRrcGON0xXilfTN+PXd54gKVywoaUScHJd8PvYpvAvsR9ALJDNHUw2DHQQAWQNh8FjHoWUmiJKqIIi6ozjce5ksZONEotdQT7ZIcwFMMrQYwEpQHZOpC9GH6BKOtiD0nCCNiSMSk0jRgnxRJJqgI+ETtyvLIp7Q/ZTbxoEmCB0PkrQ4nCpHmXFgeDgSjBc3xIuGkaE/r9m95zlqQ8hMoxpdDWoIiixsu7MPk4iBDp0E/joxOk2v3cJeVggiBSWBY9CESHPoWmU2iknDJ6yNyDYPH5si2tlMnT8rz29nREcvx6CEtmkBlLBpbr4QTi6GV5U59snVszjLVvO17CHBF+s40vumQnTJhqHampWaPDmqRb1on5XHRKdCQBIA3R/gdyAMygbZNIcOThfFLgLO+uUZAmA7muFljUPUIBlgLFBQBLTxA1Erx3yQkx5lDG+zYMa2cgmwKcyRLhC8tAcSOjT9zhI4u2viFhHDz+oZm3ddrv+BUrcEiJCbGn0I1wMLptRsRERk5zBIrJp3tQkir6ei0f6k8iRz5vJ2o6ERJTzBSSi1vB5Oos7ONC58jnxdgYW7eYrRcVZiDLHX0NlszSAuka1w8BOHIo1HCQ3mx8oIZHBSKpYj4Z+TotfE9fnzIh1nSXLx8payqVuicpKjGNACuqNBxsTSPh0ekhSUS8DRdw9a85bzUkPAnfRfGA2xExQLBzGAAdSE2SGZp9PZ1t7a0E5MvvfIqKhJARd0RAkcv+da3vsUrbCAyH6PPGQVboumX7733Xk9PH/i1pZva1SmLCUqSW4LIfQgAMa+Ek7emFQemqnyLRdhLpfyTx6OGzxEHYocMhj0tHMRaUdiBEtOTcFXCwqHqGXoA64KvNKqPH3zwgYZUSGriBgyMpbVVBMGlAjP6yFnlK7u7UD/6ae7osBBpVcrnnKnzS8v9x08z6TImPdSoC+bdAwYqfOhPxOAXe7emBnsYjCe65q1uQS+A9cg+B91Um1cYhptgGFFhmokp/A3BKJMtkLCEHWcuH0gkt9mXspCBjAJ9AodG1nOFtaV+bSFUrspYNllc1H1vb352w0OweasYzBhW+kRMnBTVDRIF1GagFWAA+BNyQKt+Y4S0wI8s6Rm+FeirEpW7py9ajLr+0cd//dd/Ta/yiRo8BxImnCtUM2ihS0/5U8X/qFYZ7SoPBkhweeJXSW1lANz4E3aU8a0/3XiicpfK1aA5z31oLJQxszTkr1w58Nx4rph1fp9r0UUUGDgPmSJ8RZgmVQ9+oAthT4w/AzOLV7UcFj7XnLf+JInITUzSEzVDEjDEiamKom73hT/pEqatAuZQorGd7OVVA8IAQ3ySrClI+/a3v61RGM59lyGU3CTqgIe/eUgEwLY+OvxVtT6EAc/duNSGO5sshkY9jIqvfe1r7ArI1BHfusCvaZfCzF4siEoNSy5d8NwsABgY3KvZvQpzEwrMzIZnBE/I9ZjaEKhar0ACUXoamEwEw5kzPDLOdaNOb78qoxjYAOBJLgx4n7h3cq22GPBGUNMqRzmolx3rSS4MGxidCqEOo+DYx6ngJGZuWooBG+QI7vCbOh3RTSgW6qZn5zEZo6kJa2ue+FbNfP8qVLOLYYDlUnThTWruTJyB2yQFgMRzhMOo2X2m5+hvRbkyVobhRxdAqGaap4FQpxFRHvz+xJEU8KfW2ajahTRPvIUHHfEnItELlet49gEBEiVLMaFPXBD23FlQ4ezKygthlcPdaUNsakQRTj+urN2YRyDXC4SfYAiYJXhIwB+GSpCMcw4gw1FCUIEVbVjfyYoXbUkH0B+AgK57eksBnXg24UvCAEule9/94p4twrIsCSg2uqiS03Bk+LH+0DJ1UgCozZH1re3csbzt+qNawLFngaLyoAfThdJaWWoSpuwj2c35XN1PKHiudGZ6VTms+dUlmBUiYyB1QcmQGeUl2yubam7viMxZYPBcmBPKhmLTv7pATozIQuNz/kU44osV/4oLdQ0NQQfA8EDam3tD4oCeySAL5lS4bGlgxLypTogS4EmVDtaADUdVMX/Yso7OiY3YwMhTnX7oLZ6rzqzL8mAaeAVAaLMvOqa2yoivRZYuMpFVBpyQrwbWMKZg3uqLWUNDF4WyuRkzr6qmrjiS4u/j/tSn7D9ihhAzIlMln0xKKS0vTnRmj4URBwbA2Qtht1ZExETcirfJO5tGJA6nosS7MmuOXvrCYmBo9nEBJPw6XhtmISQoWgVhOKQ1FIzBmHGmeuveb6i3YVXEr2gcH8Ox7sOqgL4IQikQVVIlvI9ZaAhiFPyfugyyWE+P4VC7tsHmwzw6niSUPnfe5+dCRMWwoRBzHuBcAZ4D2K4WkPDLE9IsAfVEXBCXqOWIFIarcp3Kl3vDHN3NPU7tplIoxHwLzqtO40WYKUyTRoqOqbWcBV3+BLKeFEnkur8pyZyQDO47EQWxMSup/tljUVOFZVXX0XI5sqtqeTFqG+thycTUa5DjFzF2csRIOG3j8Owcx5LhxmtwSXTFSvZETJHRSUft7jhrg1ufXya4gACio3A9wrFuWyanVVNa0D9Ty+iLXk4ojb25ZoucgWH9WomyOplsjzgPsuDI6HT2dB8fHGpuawUP7z5fvTmrp+mX/QfFjILd1fkZ80rG6YP9Hbm5i+Rh40e3dFZZQymPuVYs8ggtGtHggwwAlh7LfKu8lBuBbDS5yPE42qqUAyPMASRnnhofxsT2TrEjR3yC1e5ZpKwss9ZgOAgwp6ybSiaoJEh2CZw8dmJs4hnjARadNweBaAP3MKdozJ/d/Pz69evCY+qbGoeGBlDEyMgTWLVFHatRGIr2K+JbyOTOkm8H6wQIb4FlZx5JcaIlrS2L8wtEC/xDsb1SDJ3pgz1BFCCzpxPcsm3Q/o8dH4yztIsaZxemmDGC7LnnDYuuHXMET7GTAeoNk40qU9ykzvOqqLBkgTgoakZZssKyymI+vKOifcksxev+5j/8++DBuu0NlZvv9NnTYmZu373trM+yikqUQtzg4eoxvm+9/S7tlsnR1Njy+htfz4IW6aIcM2hg6JiOT83MYqaIylv4ZGnYqsvUAYOAWnsbRHAwLP/Lf/7r3/3d32u40CjnMlOWo0x8/NjoeHdnD/7iejJyU2yDhVD/OZ2NYXn30UP2gLMEZUTh4hrs7xOQbbP+2dOnrDCjAQgEhm5CyIVzP3jw8J7jRR7cf2g0/9OP/xp4zU017c2+KGcToSV0/cK1S2afdN0tdVXwUHK43VpfeeN65ELx51JxsdUAD7dX5+sri+sruw6rSqpKDpd21va3Vpbm1wt3Yxs3niy5VeHBJlFAS2CCEiKkCjMP2gH5bHKG/V1Vhy6rglPsbWXpA6U76WANYVGSJoadeZgixe0QkFA1tqjuwxs0moM4tVHwJ+Rwa+AbOIZ7c1zfVaXvJrgbz/2fU8CNy+e8d96iNCVJd9/OzDooJpQG6MrMB7mixq7Tp5hAgLfzBKb8F4WnJvt7erMuon6VuHwlYyyQUJ3cKdk9SetCfvaSicsGs24qoLCNInR9tpAZoaRGvWUx8pUqw77/sz/784H+watXr6qNNUjEa1dhMIE/985M8lVwoZT1uK5eoFoblPoEwJoGUk9vr2+V9JXneu3yD6NKQ554izKB5E9VZf3Yc6iAK436EBMzrEnmhCGhCXIWvn2IXD3J3ac3uALDJbKPb1vLxQm9VYOHuqnveqowgNQcrCAtAdH6fBgOK9spY59oK2vWdAYGfiXkxFehQRASJYV2QKjQUrYttsGSJTvfi5UcvzZI6kV7Z9vcwizdiV2tWq94Ezqaw6MBbwoAHhJg0g0eojId9wR6Qes5aGXwEig6Mxd7BRHAwQd7RkFtNuV7y7MBw7kv8UkSBGxm3FJtlGmXegjg0yePJ4awQg92NBiGAOHbgguclfdlElIgpQ6GQukGwCp3aQg2vMWeNrds+LFkdCLbn+oxHcDzxhtf15AygMe6TT2/nkeoe3KJAg8ACvgT9rifZDPTX2BQPwgjBfTdIljIh452E4oiKmwVIIQrB/LWRqSR4Giz28fGt8n1NQvfNggFB6urow9QpmNFaG3VECMJtWFonlBPeQfMfX1vaQxHRnbehx8qETPpYH+RqQ6eYC+rK8roNYPW7PUQ2KjFE1h14ysyGk5QoLcuA6rLzGmL2HkEdV9/UQ6KTbTU7rnhsHWNlRXqRzI4HePr8Jsckm2pfmWZtlKEOQvaPyqLzR5wxbFIr5B0EqKwR/VAmgliPoHEwinacDIVkCYmYjM0CZ+5EwAKj7UUyI9NtDBoWMzUODAtLq/QyfBfaQQkmWppbaZJ3LjxGWooKa/jIxC1wnFL2VleWO/qtIboJMsBH4oIhCDLPHrOFpKbtsj0chCOCSzyd3MLcIbNeITaGU2ZLZUiq3FCqjg9wGRHpWjFO9DrCYpxgywyZiO+mGIXR9sb/E06HGchdbmxpVkacvGF7ikaVGaqrYlIfcHZHbphpz+Spk+axux4EAbpJ4tCW3ykxskrEAo/gD5jKQigu6/X8Ng/YUjmF5cAb5GaL9WQu6TgV4xqBcI8/KvLYTgZb8/T0JstYWRryxP1Q72qtJL71d7UprCEGAobIfqK7S/e2kjsE/D58ac9zaYcrWJ5ZaGqplakg+WpT27cWY/DTQsERZgH9F5eB6PuE1iUSDPh0BmE4laoaqH2BpFCYGGB1Ybkufd1+O89IYOCXYUPPhi3y93ziyc+PCjhporn5JR192Q8xPzMoit12b1u5ktT+c/4JGnwsWpWUAxTMGASsv3gE0LyZibQogejFivyMXaRbSOslrAVgzV/hWTljJBJqHUzOWMSeWjIcow6UbzDqBxsTpHWKcaStlJUTpxpFT3Q33yFz/v5rX+S8LBEEEw/CqbL8wx/rGWkwEcwmTwgN43jrY6Cj7Qw2FTVfWpirNFj/bUEcnMDmx4DolGTSAiPbUCNdoWany7/htAoKbZ7I22MCWmEXNEhPz6N+pe//CUvxfTEM/MrdxloqJfHg6EoiToAnDtLEw0uH7aNBYfgmNDioTkTIw8PKZISApkcSA5/QwBp0pmJxbZMqTNi2h10H8eFxufCPJxuyAUSNaW0GEQC/AADTaJtSMAxcRZ+dLE0eoaTiKAxcdj3mKTCSgKAhI5IhpRHTxJVGicZj+BZDNBCezuRFA59b7MPzLUWK6HGHYrlxJLpRF5sWO1obzdZvFcnX5fKsUGfS6gPEqimoyAwGevL4jRNCe+X8TcRwBNTM7/85DMcxTrA5ORUV28PaxxKiTF0cvrsmaWVNdxJT+FcYIxxwbWCyEMB3ObygLQs6atjJEPD6OvpEoWvs1bP6bJy2tKAX3jhmm0Jc9NTkGNd/vXXvqYw34U02WYxSWP4rDp6C5kwac5qVKIi+AcPpc2wkkm87OCBQDo0L6DOing0CombTxw7NkQzIFfggVVz49atjs5+Oo0nEZV0eEgPMNP/9sf/9eUXX+L35F6iq7399tsZ1FhY39177bXXdN9Kkd87d26jausSww8egkElmjbEgLx16zatenDgxLOp6bnpGfz2yfCIPevEg6SinqAxNIz3UittJXr6+IkzNcdHn65urLY2tZrVywvLnT2dA319jFeJMBqamqQyGXnyBJ4tdoR+WlAgYsrWGvjEinq7e4QPaX1mbh4YTq6juMQm5p4ecRzmuMWl4wODE+Pj9lCRKv/6X/+bH/3oh6YjBZKKZuqAGeO5cOEiP9kMC2fLCa7Vo2NP6fdEvpotBaCTJyPDkMz1y26n7BoLyHSM4MzCQmNHX//QMWtPlrIkQeMdI/g4jXAAsCkv7Ir9IA10U0Oz6NeltXVI1hWog0lN4DYqN9wmY0iuFF6CisxBoyaExizzZ2zfSWubxAr3CL6WaLJQbTgtRQr9EApcnmauCeIJbEALaH2IOF1aQUtmokrAoEBaQgtFKjMNzxGqpn3lAkCe1/x67ilKbmDp1KkzguuoC4jNOXG3bt1Mrl4r1aVWnNzTfc1xXn95Maiwt25+Pj4R2MPhYUOQCJVENq3wZ9uSV1qG3wbvLJZMKUUoE5foXxVCfVLON5yTpMehMhZilTphjG0jLhHBu/RaT135JtgCP0uK79Jx/cW/vSIH/fpTr2GeegRLfFb5YeYnxkJf6GuKYYDMY/Urht+qCkkQ0umrvAktkoJQOK2YNTVK0dglTt2ogcRchkzuuWCGmxvGiJcWX+KqAD7uIRMu/QSoiuEVoFWtkfWtkXUjegcIgl+QnyGYfjZJ/fBEYV9lePhBjh8/QYHylU7l2tyol021sLzQVN9Az1mcm7eN1a4x+oDFhCxJyRTiKfh/aIMH+Dues7ywKHiBpiQISknlszT3a8+EWYyNk8J0t/CWlTAUa002eyZsl5Qc2rZq2+DL+WZojHx6trzbnr22IfXLnS8eWEjN/nLeBKxMl/UFA3HjAoOH2Je+QwXXrDnCNYBzAgwNZ6ezX0+4mCjo7iEWAmGDyo7MVIjJI+aZ2WnOJvupMCsI8SQoIWX/C/FaUjLQP8QNNPYkOOT5C2fRqnnGx6SktmTDQw8u9j+ewJyjHGkLb+FmI1vJMo2iVmPK+aVdkHPReJhIco/3Ts06pS+a1qgb6iJ4dBbJ+dClgLdKegJybz2BAeWRKEahmzpoeY0BYPQ9iaEvPJQDEjeDIn1BlmB27wYYGatmca45V6519YAtcYNQQfWOIgT/6Xk0CkzdVwZghReHqrAzYAH3qwhFIdk8hakPkcZe6ga1+Ka0pGJpxVbCStJRmlhET7bRe6BMdSCw5TEzGl8BS2jn7Ny8LeqaJ3LsrgC0cTVN8PFYItiSw5WhxaVq+SOhUW5epnJK40XbhCDo8ILDHssGsXra2zsphJcuXbFPMfab4x3U4YIjar2Nbq3NLU4bodROz87IIJ6UrAg1SXSD5Tn3N07AhVBpCmIWxdofw50LLzzQfvOIeuIkP5nDs+NQF6A+kyP1Bn4TuAG08oAEhl9ohGJP6LiZyKAOeg0nkeA5DJge6vaEsd5QXauPCjyvQZYhuEiODVoj+OETp6DZmzYdnW2b66ExSJff0Nj603feLS4pF56E69DvsAA4d2kldPSkf/vFSmmEfk1vZZgC7rEDv1FMiE4E28R9+ja4eNx9qcqn21BuVQw2fwI3GK2/re1aPk4DBA+68NVX7vUCdeovVIAZkfDNd/UNMlphyXO/sO0T80J5NRiLcLpw8uk2dIukxJpZ95E55ld4hmogZrxFB4P1FxIzLsApGRp/mOZRv1fEj43FXvkodSc+9sqAhw87DZxiQeAc4UfyiIS2B36XepJVEN8FFiXNce4ZyxuOk00ldAevpA7yUjQ6yCa6Fpt79Di6X12BdJE4+WebkT1G/BPOKcNcUBycO9EM2JJfY9zWBnQWjSU6X0YewNB3T/QRP11fCfMSPv2iq7hSGj6wsSSAisiDlcdW9TWaCiTrJNFqdrgX8coOl2kX5Hal6zhQqR5WCbTIMBFjgLlwThsT6o7YlVdevkbtMy5GUBnqtRtMiiaKgKkaprMmMFbPtUvD4fvB44CGbgEPyfF5VbB+kFBy6C4+Mb7q72xvg3mUoFOKHT82SAwYea5Htalf+KYnvAoCpGzX00pXT/f05BSEYDJK0oxxRYYVxwkPigLUcsQWXq7i4tHJye7+gdmZ+YfDwzc++xxnW1vdsiDjcA95t/B5laM3e2TZjRAyNTfb3RuqodYpYe3tbTb3cCc4DwWiBvt7xfk8eHAPYO1tbUnzPmB4qATGDIoKaYgGwja4sbFRgz50bADjooWrnFm1sjwjRSMWgTbghyc13zMJ6F4tTc1qQzzG3RjhwGH1TU/zxSiG6RsdpiD1VBNqMEsYCR988IHKJRUZfjxy4vQpipexpgtQU9xI8NfS1mqlEbYNAcUFoiTlNJqo+9nTMWJG0AhjCw/TL5uOjKD1ir6+fus/jx6NhOpTK4Zqq6OrU8yuecTUHDw2ZPWDsnjvi7tf/8Yb1z/8yGm5FMGXXnkZMtntdGshN4KRQonf2B4TE9Xe1dBUz95jaCnj7cijhzg23ForZjg9fvL05PEzfpGEXQHXP/ro3IWzEPLOex9ghhDy05++1dfvTIJj+aj1IdmHRoavXL5om8Sj4QfdXb3CzgYHjt38/DMeX/lXzp45bz2Bt4xrCf/r6ev94sFD61eqgpnr1z+0AgC9QwP9/BBwTtiiTBs9URec3PniXmFZ1dDJ04ae2YB6zTZnrrnv6ugmvRilDABnMvhttNG8OFyVvGOmBpKmHxs4ikUW8AjSIF66dMmQoRNjgX5E5X7xxe3f/u3fpgvF9ElHbgnvA57oNOkRLXoYaKtOx46dIMswWcXUg8Ld6AhK8JUb5EdGaMv8MpvSjI5DHJGNkirUNTdIxas8fdC8+QIw0LpRLcrHE3IUuBM8KL7GHcFbrcUfBPwwGqenZ7m9lQE/B51zb8JYsiFKuKYPeC6YJXhpMLgispxoxG2p1DZEMTO5mPC9sAQwI+G/3CZf3ovI8kQENvXUMqBfnQIbaHWtq6vblHfvof4G3ygPJBg4XYMQD0lxiFUGMw+8JWmuywq7FPZKAayG7plvPGFZqTPkRxhmUQyr9K2H+DMXgrNfbPsTryALmXkkYSUtJTT1I0t/mopYQX4d1UKp0bdRqKmhSQL+SDlQGgoZnBPR+kIYARiH8ks+zDFu9w5r6utE6fvWAjIVT+UqXFkMpz62z3S3j2p+bsbnqZ5QUhXAWER0coRiL00tzX6Jj7mZWfRJI3JPF2poagyuK91meWgmMK8SmjKPIdcSo0fEgWUu3D5UiDh+lKukPPzqMpnKSmJZF+Pa2BZ4ScPgfEEdnH9LC8tGUXTC6vqKYEv3dvII1bOXQLo7jAsd4or6CO3ahSI0mREFyeAnIGwKFy5kOSgX5sqDeWW8MpSYmy0DZgqa1Fm/EM7Hr0B0IZnQsZ4f4xi+eRci98q4K2P4jJ88BP7Eyd955x0FpGo1HZA6xyMYPPErYAQAOLBFP4dQeAgMq2HNDc2ZAnt6+63SEDQUQkx7fGISi0aKg4P90iYjeXNBu4A09DprQMluxEP2mZ78TQpr19gxiYm29957D4rMU/zBEOO3SBSLA5gyeuomqd8VnV2t+qFmJKQkCoFVksInPseuvfIwFwa2DWjUSzdktEYJYvzHkCoPq1CqPJAMihtX4auXWkwAl3f0YFpWmLkA2jv0MevfcwxCS/q2s73vHEmRlxpwec6nqYDqYDyUhpS6CDTeGjmd6e3r17w/I3RhdUVJLI8YoxnhL3PzSzHqR3RuTsz4cYQ5hOYBzgZABte6GxZw5swpTRghnfHb39sXyd12Yg+uCxIhSxO6497QuslUqDDioADHAVDOpozFxjCVxAf7DSdASilg0cbn4gWhGwwCNGbnZdMOZ7Ma/BpFAARf+LU9CblRNbi4IL116bKqAO8GGOaqOJ+MdA9V5R5s0+MTuYMZZr++cmVShkBI9lCjWmxtadreDJMa9ppaWn/8s7co0zLCmd5EU1bxfRsV8nEnfhdqfwIgg5d/PckQZiD9fnlFnL/7XEy7X5XPfczFcs1RrNC+n9gXGLhyvEW68rxCdhkSDeUO+tO+27nl9djI/OUFz+jHX9769adGcytu9ImmnZ7oVCFVGTPVagrkAVsACIpf9VWwSk1NrHe4IqFOcWZqBALsuQyipQDGIeYI/76XF9xv2O9IHwpjo2ocNp68VjKEBj78RmrP8PkUltcW4x2EfcTt0OYrpRsrEEKK/UVGnRLqN5+InDwRWc/3E0gqPOI78mA9FtbUZ6OIpTVnga3SEWdnp/XX3lsKsdxL1BFM1gIOWLVo3Ok6oINDxSKyK3lk0b8gIitUYQCk1Rtv9TmVieFjbeJEjG6YUNgAeSVKkunOiaIBY4V5rq6tKBA9qqunMCVKORREAFfAtvW/s72ZhwJUpjMt340PQaVCsxgOGQA4jp4DTPyxtYKZ+Rl+Td5ObKSzq53YEH0udQBKwMGBgSAuXDiHt2iXWwtLVRsyQO3GAr9WM0rw609zxHMPuWc0J1LF1FA/3xv2apFEMT0FHsB0nOrJN1HfWI82ZufnKhub7US6/stPxEwJSSS55xaWw+KLgCVOgVCJDpKeYbFS6tmO7i5joTakwmDTO+NIJcIyQjvZDsWLigASGIMHwRbSJODIQE1cmJITvnwIZGIxC018yq7BFKO5uDTnmLarVy9rWmE8GlPNWZ8hll6OxX3rW98KkZ8y/UOsvhOc5ITCmI9qM/41Ab3+JAboYSpkKZEEq+ur9c31OBhi/+XHnxoOmhLB9uabb/ocqrH3tNAajkDKmvWNhw/vK2YTYW9vD1+Kmo0mhJNEVhHhqqe73wr5LGwKcl1fo0YDG0iwbeDUCVq1EYoAABWQsshX4N69B+QWPQDxfO1rXzNYdEe6NWlnxMU9ogpWJenb3dPJc9ZQ7wDOY3ZmLy/LNruiNiqssWApacL2Ejvr6MQ0P+4BOs3B3hbbBsBZ1Am+Qh5Gh8Di1TNYEv+99dZbNGwwM2ScmiISgjrLysVajw32q5YGDxX6sumEM7v5iwtGHg3jYE5yLJL7r64pL8obMn4E+KcHmzX59CsbM5idOmiGGvH6WtvyagkjTwRlGTsGDPghHx5YbvoLPANnxCEBts2al195UevIDCYVyIVpsI5Ko/UyZowFaqcaUEXBHykaZXPZ2cNr7Kfhf7VeyjvrxDSe2tqqGj5anlpPbE3DLyV9xjtrq2ulgfW7srYiI9O61CtxBGcBLmEPEG7pLZSSJhwWwhsI1li9T6scpLeZRS32nPnHY83dBleNjU26gwFSlcxxHmjeVsnU/XI28SWXUclkjzk65ODAiHScIpeSl5DX8EBxt1Roi+QaeWU93lucjCPIc29pd3kK+CXZ4MeURDkymsNwsLuUPQIBuDEfZRIzNHCIgLXl3if5UhhB/vrliUVM8BM1PjFMLjX5Kt/T/lVrEM3EZMhVN7e2KKJydTrI0lSl0inMm64GKirKR4qeNDc03n/08OLlS4wflVBUgcetFeitqBBaDHbh1dQLh8mYOKIwdI3fCJPUQdo4fQ3RakiLZ0+dBmds/FpbMeMQpO6TYk5ZlLcVFcGtxAwIHjUi7D/+4z+mEHH7EohJNZJFKk5ZjtDTL02jYH1JCMKJLuMhmvNEJV6pU0TE7PyCeQ0DegfJ4FS/J6a/Jxm9oHWBUz1yi6WRitmkEmVcqvKJGzX4VVJDoGL2f3LjM+tOSiYN0zJsjJ0CnBeQ5rk6OaY91EHoRWmxUp20fLWpGdgujAVC/AlCss9g6axg71V5n8rL8MZ/8S/+BRZqvfSHP/y+mrmwFFC5tjh/CBd9FMCJVsnEL+7dsxJIgijjbCvrqPYjQYuzPXGkuflFWGLGU2TszaQ+oFh1qg0ASTd0fHKY5VmxNNBAFfaqF1OTk3/1V38FRcwAUkNHUIU/NZRrQD+kQBbZKeLfXGdCH5h95p1fc9OsdLwMuY9UuF2mJialUayrqRSHJuQPDnVHJgZAskNAZbBwOT11QamG8sD5s/DSiXDNujwCh4GUPxSPYwzACEKHVt56UKrOCmY5N2JtHKaQBj2OyCYsyQYbo6Vn0J/kSXquxep1Z1evwiqxVY67SMf43cl+BhYpRb9jBDuZFKYSKXIKbGKgsAwjKcQjVHWwyc6nIVhTW1ZfoMkSsPA1XCkVDq+t7oHZ9AOwthT2rdmrQveErCPGqX8SHioMEZxbOqvLGSPAMGi8GnrnBvsyGYWpKayAyoMK0/FkOp7HO5CaXMjeKmPHBr7jcxj3p6axAyABAGkCWTHQqge2ST6ByZ5kQsxVuffEHDYoOIKmUTOZCloKpZNHVWsnXGNzy49/+rbEB4C0Thcu6VyR7+MKf7kHgDG705P486sLAO5Vpdp8uffEcmVsC4gV0ri+euWtP4PTfXkFe3XyX0NTrCqk69e/ymMRcKTVMc2ZpaGsFnFyx8OYHOnKsOmsJ0FjiRnlVwLSZJP2PJUl7CI4J42RI3go9+Je0haSSJPCJ1QozlLRBLiUnWbk883ETAKQqzPgYTMomlYAlGR/emVSmVpUfwHWojosTGNURCYFjqijHzj+3L1jVXAMoTr6wrGKGQHGkjfJJ/0aNxb1mmJhwYJA5YMhFjVI9ScEsXPn1iCvKgrivrwxndav4LBHquTOTolzKJq8NTDg7GfqKW+3oDXu3hs3PteVxoam4P3JO65Rg4CccNXDWI+xaBNdi95BYKA27HllrOxIqYbb6qPPYUnTouAMh8qsfjBhEqd2gFrd4tKCqYfS+nq7o4OR/o/SgNeG4WQuxwjyGKXkbpBJffFEo351xBMeCbND7DgvrBhwzxGUMM/JqWeMKFwp2+oyAg0M9gsiE8LnK6RummhXeaoPmqdpGRqd1a5e0BdpS7rmF9vF1ETJO+Wlq6dXT/2JWb/y2qtISA6H7t5Iefn02Si27MSK6bml8amZ+/cfkiIWyqxBOZGRY9usJ5ZD86OpS7Qp6598y8KsC45YdgMD/QKf4N+SJphN2M6OttMnTjIAYAD7sNMOqI7iYrNxbShgFBI9hECyJCSXiNQIoDV5wSP0E63Ozk0P9naNjj4mkCyh6Cac0FMxB2NEbpHrAHPqKvYCvcYX7/TEWKjHW41SIv3SdK1FqB9OYA/ZeSi6cH4xgneFxMAbMr9/76FsSD/96U+/+c1vog6wJZcNbTJ8qEafsfT+++9yS7/19k9RFBEGIUgCTU5NTQsmj63INQ6T57w4Ykr94R//4Te+8Q2A6S+oyAhf2eALSIMFZmDoi7HI080SCy6H9ggkJKQXMzNx7A53sl9oV4nkGMhGhTdv3Lp05QWNEo39A73nzp9nq4jmAnZLWxs31Nff+Obo6FMKTH1dIzWIr7RB9ur5WdTOhPALGK2givfffx8kekHq/+AHP0BUQDWbrTcjLVrX3PyMJ3Yp0DzMi8fDwwCw+Qoy4crwgdlak0Qp7MaPP/7Yko5ABcuZGoLemGJpuwh5qrNBP2GZb/ziw/cvXjoLFaaJQfEKPoEKKizRoGR7T49M6vhkI8c8xM4BXoFAaU1sb/XtieMn9RSjQskME+tqbR1dFBEeX/t3GPuUORwvXBNlxTL9cg/U1dRPz07ZbyNft7cra8uWDkQpcDBIRSBrytTsVGOdg+fXLA1s7217joAdXMtN5Nc9EsGXyT/hJbiK/Lt+kQCPK9ZM44twllQGR4BJ2w51Fg/C35nUHC6kCA60MD/vlIxn4+NCKXiXSVDKUfCQ3ZDmOpV5VQr84X7hoQi7OhY0Jahd4yxQTYqeL7JkERvw4McTvygN6VLO0AwAoNeKtl+Vo3xKFjbuHg6NkSeoAraRtD9dvkWZCQZFiiKgOK6Aylf6YvK6fGKwCEDv8nQw3VramtmQTHwr6qp1KWkJ1WV3FkFPfYGeeIj3Hh0x+di7EiIY6Fb7XZqbtQIV/tQL9DA5Pf3k8VOd4EK2/8fsiBXpg139AglOTproggopjkQGzKrEW1NMkjEc0g5z0kqFZhNWgOB1EDvCK3BFTWAyqtKuh7AkYa/a1OAXqAqgNB1B7Yqpx3OfgB8GVLWx9VzzyXjziabzBf/IVQ0JgSG7XVREb6lqbk047eY6xbEKgoZJuPIwDwFaIeY8VMYFAEjmX87cA5DZg24W+AQeAGsFg/wFnu4EilK6DqDqhQKqxZryZPdQUNbKwqJM8TT4n//857qvTuIFv3WLqHwCUTw4ZqsPUR2TlWlrazXuoQaYWU/blNu7unGSTz69gZudOHUSl7CtFiTy4Ft1kFdKo0ACT1Iuiqw565dhBSr49TqTqMQPf/RHf3T16lWqLOsRAAwqrwjB/DnsQSxMeuWG2WaBgnk5v7QorF0o++NHww9HhmcdtotyI++vkGM594vs03NpyGke5AJ6cA8teuFGbWl8nquFhsyT/CqmMSh9jHv6gEsDYUGIEuabixCCWfDxPOunme6VkmjF/DIZ+bsdu0HYg56SioNbYtaGYVOWJ5TLFsbrSus8hCEDiePAS/hQI+mQA/Zik18mPj4qg2F0ZR9ROMMNm4jDeAASR1AzCX3j088iBXc6KTrGOwVI+RPiQIum9ZyIzYQCyyYYjMVuSPa4kwkKHPsiwWKBP9WcRRf3r7a0y1xXoXAV3dB9BAr4DIz6dV8Zl1fqN59NGyTFXaoMPGgakAR5fu5btXmusMs98Pwpf6157hP164LLvWopPT4xNMD2JBMHCpecF6g0Y5E/UvLag1lWUOL4sDgDgCc4POKhC/oBtH+wVOyWuODD9ut/sQBbeNRUXcv34292Kc92/l8CuMkomAaxdwMvDOHiAJEi9zlMKP9+FTgEmymOMroA+IwQMPgzQ5KRpneexB7ZgrQfN5GBhrSomAvLSBM+5okbr1QVV8qzHTnjI2uPv9OSxmGMUYxIGhSh8ruRKzJWDBAVrPkv1xwILMf4VEgk4B2hUEKm8UJjbpBTmqgRzK1po5YFgFEDL54D28baYE0vzTNilxanOS9W7JKJjGZxyLoRA5Yb9SdLi/O1NKWGIMQOHUaI3fR1dVmN5X4JXZrNakoEDZsx+0ZAi1rRZSUFcNdU18Ckdds5+RQ2Y3lXhDGSAxp3Msj1QHnEI5hBKjs9dem+r2JLTJBAAcbBbYCkl1ci31nIG4kmKzmcltpbLRaX7FiRtl+qQizgtqMQJ4iNqvITgz3SvfBZqiECfPd2X3rxCr0Rv0PJHppcUIFd4ptiHVk5nm9s8P3sYSD9Vy/qAuaAVa8uLxpeby2Crq1WC4vv6epqEkxdXze6v0frUhWlH537ULEYvpRrHDK9Uo8Lt/VW35Un2xTmucFRL1+5AF1xtlth5GcQRmJYz567wBx9Kotfgd079Y7Ju3333ujYRHllbXVVPQNPkgqDFvudYi9deGR0BAE01dVi9dwGqEXWeXGxWA1uNzM5hemz/GiOt29+LhZImIrmfA7h4EQkD0fuM6UwXBqthKf4mTp7erp9gnFbX+IVFvRiyZoesn8QjBTHNyJ5BGmThhUe/AkJ7uFBJKgbdcrgmY09CqihR5CIlsFjoEFomLSVkB37QYn/lZXK8xfPzc7O+JCXWngx2oZD7nN8WxmciSHU18c9Vs4l/3jkyWy1beWGdMOhY1BNpOmdhu7dfWg4ym3DrjZJKRyb0ggYkf/lf/qfJ6anCAWUpSNgMC5gNn8hBDAoDZsFv1HThFeqBTb3JIryoWrhWXnZuJWnVesL+WcgTp86+2hk1D5XTj45VYRWW51Q1dmzFx4/jbWyW7dvCjix7LbdKpZE1A0zqW05sk0tjY4+kRTn5ZdfggcBGGr+1rfe5FcWPBaLMM1NT56M9teLCI+E9DSzpC1137/7hdmtX5MTE+DElkGItikyOC/GOTX1dGjo+A9/8D2IMGelWmAPC6DEMcsch8G3TYnfdMz8BmXF9tvXX3+NQxHMqgoKjp1Iq3iLITPojD1Dhj8AT3PWLqgIIl6QkKlE1GFUzMikWW048h0j17XkTXRE/Q7d5eHdOyg8syzVYwImAtRBvikwMfYUgS0VOGWi0aHujprGCG09bmlvgeHysqL66ionC9VVSZu7AshS+bj2bDKOrEq2beh75oqkES6sWr0DqmyAbtA8XOGJGtKoHmHnTohTwFjzLMiaBbCYmBECVKg5EcyMH2Sws73OMxEWS5JvHOFoDKgKw0ZGCM1Zd+AHeUAOorStk30kZcb+0q4cUF0dHVulxZRsG/dlzIy1wpJSFjuetL5x4Ex0/HT7wDKCOmP3jjlumiZcicamSzBMiAnMKqavJ/6JfBkhKsMbBRhP8uI55LjNTCkLa2TD3GJftXd1WgyECuVNK5vUgApgYK9uOM+OpToXnEQippQM3n54w2EheWlxGeOnp5npGAsy5nk0j/lD2TAWT+CEkqfRMEzoAym0wbQFs0AdANL24FMxIJnXPlkUk53ucw5c+3l8bgpL/GUmIjmQuPI4Gik2LVIhXGg3h2nvCoRblKCYOuebPuaexHF+i1AiQXora3HQOzalO2o2Un7VoxJd1v28IAB7kGD4cFXggQ1+FMDWfA6ZLn/6yp8+NyM84ds+19pKkcUAQahy5rGAPfhRRj1kKzKjN7j3LSuGvgcAXVZevzxU0gVLOgLP5qmBU8BbT8ppN4UF1kipi2gbVD/5yY+9wgCxHZwKER0cRgQ7mEHLW8fdx1UEmIw3TSDvv/3bvzXdKJP6+Pu///u+/T//j/+LqXbjs4/oWfxUeuRSmxmtp8IRNQc9iZ4DJy5YEh0gKtDOrl/+8jqvirQelqbJS/1j7KFPdfBKi2MV10MTFo27s1mzfbRpg4f6KWPsTIA50FMfwaYVvTBVVa4eeyOTMKqCEGCQmOgfGUCXwq6g8CS8MkiF3/3aiUz3/oYFqEwGc9x4bgqp12dGi6bO/0GfonQpjFnAhYhAfQaZSvk7wUTUMR7McOOkJ9wnXkW18k/Fnp9Y6+ck6huQHq6ivEI+qZLtLc1JuRH7zRULAGN+msC8D2R83OuzP2XYZTmZPLoknIu1PjczY3hc3gJDPxErjqMqA8YM0qK3GoUp7vgwmWKP45aSyeBPRuTOHhJEwYpxB6Mh/c1kZ6MCDU1ffKIXUOFDNyg13/jVtFa06Ff8sbfKA9ivCuEqaH13FwBGRV/c4ya+QmTsNsWU+f/9IuXclqH11liiXR8GxjfWnY7J8GePxg7g6lp8QQ4ZvuC0kSzZmlT3tJXWxlN+et4d8eWeRbiMNJQSg8apuIe2nbLEvvoFm4u8wRGpkfk32xNW7MJ0w4qAmsB1D2jboJMPOj7Uo3y5hxbF85UGMQq4eGc81Nn8MFOXP32Yn6vbty4PGRtQF+4aHyaqzeUZA2jVJxGuk/wZWF5Mj/itpi7jfS7jGFdVrfRwXIaMUjQG52pTv4ZcVA33hikTPwyzTt0/eHDfL3qOKxE2AhCvIp2V0B0+Oc0Rz9bgmBhGlhu4viF8D3V1VUJEudK1H/GjVZWxZBnnYspgGZmUxBuBnyJOd8FBUAKyaW4N55CFKZRuYgGDgvLLTz+li6ApS35a13c2EGittoNcT7VBYJB0voUtXxEaXsGkJDBkJN8qyvGEM4aJQrahUWOopshKFH79+JZF8vrrr4enl0dclqKyMusGAIjUTIWHWL/Oaku17s2UjGqiCN7yurMnGILus0GlazeEmS2A9v7de9evX0fGF8+dN5oiB3yoKpcZxzfuRmHwm9SK6bJW1MZN/t5775nCxhCQRJqIqbbWSBgHYyyp1o5O4meZn3N5RfipPUbzC3z564JGcABMtrKq1qa01vYu/DmY4GFoLcjV3FxdXmXutTfHupzk3rgW20QQxs1bn8t3NNQfZ7KOPn4ifZDEi8YXinScRUffHejtAQCtg8d0YXmOmXB88Jikn4xKe5TNEPTGKc5jx/pDGGa9o74IBsg7MTgAEhjWI01ACGVU993j44iTtkqBEBbC0++tOMnXXnv9F7/4hefQBRu2AiNJSDCyquKZhrq8NGp/FMcwSUal4ES/eOGyQ3bp98prIlwwQtFKirjVOZsBoBeGg0cJDOYRqMCpIRQiBxEC00R9XcPAwBAD4PObt2lK3//+d//27/6WO1+FGCwwSHRg4H4Ko0DrGJozxAiGbDOPAQzJsGdu0YDfeOMNZUgbY8cdQMHVd5Sjwscjo0REZvXEpHo+uv6L+oYGao1diRDI+mfYxMbKg0NVMY+dtP109DHrxez++QcfMh5kvP6Hv/Wb3FgUceX93r71xclTxxcXlnXZKYQutA2e06fPyDwLpeS6ABwAoAw9UgyiCA1Jrj30BKjYLzyb+AD+9NNPf+u3fif4TzoLj1TVcdXqIL8J2UfuagJhwzB6hlIFjKl5p7MGiAKBkxu18qKwseR1tXsB8Vg9U/Lp00hIFfgJ3bSgp7sPTmxL1PFFBxmsR5CJ+o0XFIHW7POVuZblmrHI+AQ5qERtacgQA8YnZhYazuxOh3QHtFoxfGowpvquNpfygNSQwjFNiop8Cw9aR6v+9JxTQyXAA4NKaFrmLHs1YeP56j085PoxYWFlLHANeQJ74EHzqtKcG/DDhlZ0AaIEB9TUVi4uzwmJdASEmTVnc2pxmTUQK5Z8JeGwsZ2RwI3o/zLMtbWlzYFsSUaRIDQHrSiFp9krGTKN8Mm/gAJYOhnyuaaRhBuchSwmNiDWjQtLBFV0kGu/utz2d1jSZb56QILWFOjp6o4yzuhta4Mr44I+RT3hWnBogiB4WQzUCZ/Gwoql1qemZ3FrmyS5vbkKTRm4USc8cGY6CJE6BIDAj9vdmMU0vEx1BIeS1mTVb7gtlEGmh1bzFHvrrbeMMjRiPq7oRYqA1RxWaX9OfWMDYbSwtGjz8fzigpVAZ/9pxT3DI0Jk90KxuXbtRfWYIz5Xj7Z0DYpgwyAiAPeGUkldczmXWklEBS2ZPn0CHuU9R1F+FfOJC3Wz1QVc0+jUxoJAinqnMD+FJ1nVBHyMSnYp8h8mDSETlVcKeZJxAoG5fg0Zo4a62qejo7CvABgsugrDtvSHN5oWaBgle25aGDKNqlNcL4CVVw8sIMsMD6cSswS2bbj6p//0n5mb//yf/3MqiRMnDVcMRFKe/eIKOj49NevXBTOUHTWrx8X3xzH07jvvC9c5dfIMVqyneNSjhyPTM5PuJVzGtayZC/yx5/P8mbOLC3NoRjdhXhfAZjeCUUZvwPYL1Fy5X36R7B/3UNMKQxGE519Eqwyo/HprCEqydPcHmtNzzSjgtRw+/Pqwk/uQozx8j8IsCHgI85xefBVRUaEDICRFqbZBHkywRgtX2CHQQsICrOTw1jhw3ftkanqCZmbzerD12EJgt02xSDpUBwxzSiVaSXIliAaKfThQ288Bhly0IsISaUaMV9pBqBLV+oRqzi+lIxiZHmJYGk1S7ZBY4gsJ93YplwBfV7grQrHeX69vaq6qrcObtAsVK2vRL3QLgVkPBJVXuYkgjmQMuME3AaDdjFNcPndQo1rHB9GEYgmxKe42BUt4DjwkBZ/GRskMv1+04sIyIDABWeYedaqH5me5ThAL3798Lt09fTagVlTXiYPRXIp6Dyj8n2acPrfYEokXMc3kDZEDhtec59fWJRmfnA8gK87zX/5UU1LordYjy1LKG+DXPS8LhYtdEBtMI7ae4yRSp8U6QByZGVd8lX5zdyDEE/SXn3/VO3hAkhwugMhrEe75RZguUlJi8VzfVoyYe/wQKBEyOcgzenOn9MsoSMsI7fKN5As9MJmMoP2/iBZRUXio5lw7+YISN0bNOMaW0pSvF0rHxp9iVWaBJ9piHHoISPqMP4M27OEuig12GmWjNDizNPL8YE3JAX24bztvR0vTtcvn+OcwYlCnlQDSB2OSG2HJPFsTBMmT3N6BUCAlRFJd9eLszPqGhdcSdtjIg/s0RVNvdmZha3PPaDLzZienGOXlNYjNuQGIlscuFhM5/kFr9cFEOdo9lOgI4zBmge0c5CeIeWoMAhsbGNisnSPhRLR54R9HIgGa2uBKAFFfT68tqhCoo2J2begX1CoWaR4H3AmZ4XxuFltZqc3PlvUqYpGxsrSztckjVNHb08H8kBuBoGrvap9yRF1hbGuxXCO1BIwRjHBrA+P5sycdTENsYmTyGgj6hT8eZbg1Vem7brLXx9gZSrMVj6Ym4te811i5apGQOnFbJeGHpwrYKtQtG+DmF5fjlLfikk8//9z8ratvZAtsPJsTPLm4sLofcK04vJFxy54jsJ1gaFbarKESUw7/wWAcX8Z9UlJWQZpGIprIT+rokho07Hx76rV8ZzIidLS2yJMjKvrDjz6w9AEqO394BgRpIC4eX3USLToFWjSQVzHNycb6Wh3Hwbi9oR11GTLdz+H77pkNxpfyR8NWrfHkm9dHAhj8ZgH24gY3UAOAoqd1daAl+XBIH1qww+Wo77zpf/AHf8SuU4yCm4tpC/YMPoGlfn6bHG5UV9toVwbKX9ar5VX97euNvchBA7GiVCTcJYayXCalRfDAEjCoOPgYNL766qtuzA/czKj5peOqBAMTy2vGgc2Q+VPrxhEOdYGMQJBaUVJDaiYOmT0//snfkXDcFzdufiq/x6Url//dH/xbAs8Jbg8f3uto73KGg3ymVpNmIHhHHEihJGl1BTWXLl84PDzz4YfX+dUoVR9//BHbCUM1aT766BdXr74gBNQidm/PqVPHj1F9mA08/YgNzqmJxmUthWXCHrMKSvVx7PEw+//1V7+OY1GPbJB04HHRC1eljneeRWxg3SvmkjHVxSNRRh/eu2sPDNZh0HEhekaAuGU2CZHtpKUTFzFRHRlG9KytP52ewcdEN0tgVV1eulpbqU7rg21NXPj7uBd+tLIwayV2ZWGZc0L6xM7O7pPHBp4+fmQbPyANypbZjZwOdk+fGDL6JCBFXA5eZ6DSqITcH+xsNfEmbm42NMVZyL2d7Z1yMU1NoY2NlaWttdCQPBel/uCLCRMQSIZV3IznpXHA4F6DVIEEYVHB5v6uT2yKd8m8uDAVtrqhZOegRsCA5I3XXjGaLmTgLZr37crCnMCq5pYueWXkjRHXzbNHhbbVwF4FeWakbBB0Kd7ZkiMPtUDA5rY43nVxadoeCTOCAgppfKtMSq1IUoTqCB3YTrqp4Olle7EoQPRSWA9/iK26m3zJttzwsAQl51+j4x7hhbsr+DoeEGYJOP2iR4YJjsoxb01MPA5tR0fsEWrtaF8YXjCyTGUhpjRdpAtjaB5I6BbmTQHPUTj68RwrMH8BKeYKtzciIkDYM6GJlUbSXm6pOMunvlHT0A4evx7RPOAfkPQrvnm1mbl6WpGYJB+HqeQoKZMaGaBYtgcOACEo2UBQcHFOzeIbmU5Uy+HiF6h53jFFbjJxHx1arDARTE9sIaPUaLqPwTk6onFBdca/fqnQcJvRiZk0mjwgR+ewh3LAr4x2MUBVaUt5laAHN4CEMYosUNVPjNolAreqAphvsQvf/uynbyuG5avct+r3Z9RsaSnZD35dnrjcKOZGhSpx+dN9JPRAa3t7uq+M1s0Osgn3xvCzYQPPht7UgEYg2Wagp5BDRFJu4F9fdMoZMn5140c/+pGHRvlb3/oWkU2WoQ3dBCSM+Va/3dOZwOO5womikBkVouDuvbs1tVdFhL7wwtWpKeBMSWlA2ZhfmJUPGtfSCLXz5Veu4Rj2/xGaNuMgJ6LQmHKFQCOUoiutZGwbF/d651sakbljDnFoWHRyxLI1Nxto3UegsMtBaZRaZ17F3sajwt7WMP1VDUqXAiwYv7pN94N0gwo7BlcDhtxWXaMFv7QiFGOotG3iQbEbWLaAohiYoMPGebpJRkSMX+RkjGXECMFcXLL+VV0TyQS0KacnandjeiiACEBptmTYjCVzLncSiu3SINJQOTib62PnGdjgCDp1ASW5kKMLqL5lhWMf4BEVF0nYQf/8Cj+cLoAWBhQAtftM6wD2bU1VJP/xEDUDQF+UdJlvnrgCm8nTn7uMEhIOo9cZIbm8h2AzeHkqAgyWQM5J4HNvtQUov75y6QJyzJMBmzbknkQwEoUbTmmDHN2V0gGF5ZSPbkghQGqKz8N5Hxp5hMREmi5ef5Fi6Rfro9SzJPJz957nX58gKVWEozpU9Oe/qqOaR6UIJ8ji+a8yQoTyCoD+Qma+MhDPQUmGgXsXbusXOw7zQuIFZ91ir4WRuR48dBe5w6XNkR2/xh7bmnqplLmigQRXLhptno0xw1NzOegGAjMOVS69E4oVDIBM+MwW+f1SxjEZSzzPuQ4RBjgtH0O4rvvTCCMDlXgeo5DSXypPfuQRBwOWYTEi2NvhkcAgRMIMM5odnd1U5+a2Zot3AHM0ujFFwpsbNhyury4t1loFKK/oaG3r5gjc2pIwEc3c/vwGjoN3cM519XYZUvz68qWrS0trEjYgFTz30cgwDdpgEmS4KZkhb5ZXIRNcaKGoeH1pVVgl5w58kBOijoL/xTapcmvlIlIETkAd79G5s2cl7xOFdvbMKdzNnLVGJGkJXnz9+kc8QFeuXrKYYJVMp4hJX1F6YQNWbT+SScYS+rPJCQwKPHpkP1yoyPt7Y6NPj504Lt8Ljx2Umb+GCQ+15oDgKZRhqBwVdrV3UBTIQrMGnVsejHibugaLbFrUL/MX/n2LsZB2MKMqYBgaiq8h6O/tXltdNFjSR0iK0tgsz8y6dUVeBrtFpKecnJp2+viTcBE4j2aLXru/Z80k7Df19/YP2oakNrOPDiqWw+42wfB8v5IR1Uqcv7nxaHgk7z9T7NKF84530HeM+8nII2smvV3diAUG+vp7CeD79+9ce+mKQQR5hD6Ktmbltbdj6LYnmbMMQuYrM0kvTHaYdCCXfpnLhoAm/dFHH5FGPqGIY1O67xXg7cpFaKSe3QtsJw91ASXDg8JqI0f1AmtS59/8zd+Q9HB44eI522oxImkc4XB8bAJJ4wD8iYDhUwQelFp3si0bPL7SCiDxXjATKp98Er5bEFp58Fy7HOGaZq1BiEatTl//+EPSKKMUAKCi4qDHGPGtrZdff3300SM3GLIymDzmjNSF4eqvDtpW4dI09g54OiLA/IkqxiYmMHbmEOfOxx9fv3z1SjiXkER1FZz09vYzRshLChNBD36bm52dfPL4MYqC1SGiBLuQiprx74mVYEvwAwN9FiJQIH8LzkMtJGLMffs9CDUbm4kYe0CoWkj9SvJ3ShQLCcaUBjHQ0zX65FF1RbXyPEf0P7N7cnr20oULKMlas12ftm/X1tdTWLudmFtbTTkg7LEiHF3XJHA0GT/++JdDQ4NC+b/znW/jSzBqvYgz/y/+5M+N5isvv2hjLj4ROVU21vBqMxE1WuJG6rKsMHfdDwweW17dam5pQzPvvvuuATLK0IsSLLJBIKlkxhkde1S8NdaG4On4GIbjFaMakbiIJFhFJ1RV5Q2c6QYMRu8LL7ykHnX60EN4CE6Tche6V486jbgazFNYdSy2hnzruQIeGkFQGfHMOnyuKh8a6MmJ6acTM1YwVpZM+jUuoFiVdqxGcQH+r9eCNDe21j2RCEHOKCl3Nuwc3JbN6Ry+oVGtGEekhR4wFk0gA7+akO6Tym7HEVUQzWPXAMeHdQKcjx+PmqfheiJ7okMkUVIc4yjGSM3A5YV3gRNNehsP03n26tE760u2LIKtvqXJ5msOlwjyjMT6ZfKJmRdwwio2VT/88EMY1mtfYfi9Xb3kCzBUrlr1y4oLUbbWCKTg5Ueo9snY0vfyq69pdHltmR5AMgWINFOe+HRsC5auHgzf8wCNOpEOhCaJwGDI8BOcXNMqV09W0I2gSW1QyARTEjewDc9Z4GaiV1hiyIo01rirSqgcaAme1YaKTh4/boXQc2gHPyRDta+wgjzlAePyUD1+tUt7VB6o6nf5RG35E4B5BS0u8CujTraaEfTcrFQg2U4hdP7lv/yXaTiSwrAfcT4+8ZxB6NeVkAOdseMiXwoAw3TWX098YpcdBwam7BWyZJ4hSzqArpHsatBZXcbS4U2PAGZS6B12hM2qzRMRoT5HLRAFh15BqWI+0UF2YFYe9FGF6RMuwRqWlb674McrsKTu7nDxGISbN28JYLGpyUosJs+QOHHi1Msvv0gmygnGhDh37oxV3JmpCXxA6Cl+iMZg8oc//CEsgRnSVK45PY1hTbZr3OyRrfz91L+IERAJbKZ6jOZRsnlllPQlG8n4YYmRBhxE0CuYOnioWow3T2rGZlLBK/Vce+6lFMUvUL/OGyGFmR2oh6gAE83QTEBeBkax9g4nVE8CER5DhkVOsfAsQopoDBgx62DfdGWjWC2BZvzIW0Oot6oFLrT6RLf9KYrUNNNb8hIRQLS83diBMdMLEIJBMeX9CX5Y8znWowx4eImtmanZK60o5oIamKRbGVfAZ2iNbhqzyKmkaR3P6AahD93nQdWu+kGiTq/c4OxQqjz6dqUnwf5g2HMwKBkzI00/xTSUYAiOo1q/ub+AMczw5q0PvWKwRniH6V9WqWbOy5q6Boch25ku9Ul8G8CJLjlI24FDiafAb6YNJaB15YbA79IQrucLol0UUE6H4k81+wVD/v3qxlj7Sit6RBqVu0vQWi1UMl8Zcr+uX5+ZPlRA635F0Wha8KPEZ61NGGaLbAl8AMcGBv2KrUQYOWmp/Qy083ATQSrdNo2pQRGHixn41w4dhIqiDJDx5b2mIq/KKU8UrRIbG2DmvPKhCQDVeuUGYP4GIWbKjuLi1CHyWv5PsybEdsGezSFNLU0+N09Sb3gg9tZXlvfpDCvrbS0teuS0KRJ6s75xZ3Nj9Ekkn2ZRq5+9DrWEQ8T6HGwLuVmZ3bekhaSPDw5gH/zo3V0dbQ2vU/jQgyzO8jZaaYusFyURpFtZXffg7r2bNz7lkbAbCcCWihxZa7iFdRs0VOoQ4oqySh7lIwkxrAukAA8+NYQdDovyUiPggLzI5dVY953f+LbZZXWOx7EylhFsBd7jbgSSBA/nTp/s7miBBEDx6T68fyem1dLixQsX5uZmxCn6dmV1UeI+tMHRJ3pBrqOqag4GqDyI9Yfo6+70TKibOoghml2bxUX4AIV1cWEJJq042HugFWXUg+zFeDi1Y3jkSUtLqwBNnBFWDSWoKIiKGVm1yb8GS0AyrAyG7s52HIO9JNWoJWMKdGWN+H4UWa1jfDblVdU2m/P6Nbd2WEshnlivcobsxx6SEp5scQi6QNfBA2ig2zvrxkswGf0DKWURi91l361pyyXkqEihR4jB+JpXdDH3dM0LF3+H61M2Iyv1+iidpV/C3goAA4lJYDKK4NoriGgf2bd1UBoKg4WrgNzsFkBlDcSMkKxGf/EuE18B8gPasabQz2obsAtMAIqggvSiyZlK1F+6F473ne98h/QS949UmFj8ixpSvyVm8FCYPvvsBhHS3d3FCQ3DTnaxgKAtrRAP9GPo9Suji0UM8RTt7d3z806Hl+OlWUMTz6YAg7RQVOteC1Fq+EBrzmlRAWJVDXoRAIyN2blOXdMRbpfYhJoEMFbpRqCLMl4Rzi5WAZf/06ejtoiox5/YlKltJxUUiaPzEDb88mrT+QhFNElhEudz4cIlHv2drTgAVdOKERrkgj+//vWvm+9ksw9BbmnOPYAfD48RlXaNMSEoqeaII+mc4kz5mJyaefjwEdcyTLK+wGanXXtzw/rSwrXLV5ABf5OFQ5NobXe7o61JlA4dgtTw5NhgL8UF2MIyuWX0Hf0ACcCS9Q8O0jb2Xn31FYNisEwBrB2iP/30E1b3P/kn//3dL77wiaVXp8HY4hKk1daye7hnN16DPT+2JDLzjiLxAP5AoR0fHzva25XL/dSxodoaKwbIu/Tla1fXHC1XXLpTVT7+5LG8BPvb+Ey7QPH6OidLTg0N9slaY5mrprrNLpH6+gYrA7spgwHJsbe7VdncyMQVuC9UnbcPPhfmI/cXUJHZ/NyUWQk5nR0tdhFAZuRb3o2VAAwbMykvqyXAnZF045fX39/axNu5cUgjnAo/x+0ZXaD99puv75L66dIvhE3M+YVhbZESoj8GBnq1TmHQ5WPHz1hjtPHxnXffvnD23Oj4GAPMcdRWCWRxFGjJEyarPfNMPnsXLQKhpuXfUDasBfH6mRSGWNB4SI09njiLciHHMYckqUIigEhzCCZLNpo3oeDUSpKSUKWN4y7lR6VOJuns7kRUQmVImvb2DuzIEpxGXdnEwp8Ja3Yg2wAhaVS13mIvXom/NX1YL/oIt8hW1CLmlks2tTaBRlCTC1RkrHkKUOIMYxSpj7DNHfVIQ5yhhT03CpuDfhU2H5mvJBd4XPBs7ILr1tdpS+QoRIEHAEJZWPuQoxh0aUttShoO3EY9BfshH9WfkeMTlyeKqQEwSNoT98rAIUA0B4eg1SOv1Kk2+jQqwnUxosz3QGtcOEJgwyce+jx1IbyQ//gf/2Mwm1+AwbS9ys1xH2g9EJJcDxlaPdVEHkGYyTqkCcgdhm3BpK7hJz/+8Y/zTgnchsyHfHjQOhrwCzy/Ge06ZYg1AX5tIVGqsxoUMFJ+yW7mlrkP4RRrtJqx5E8mEFDxefd4nV8X7KnZ1Ob4x/0UAHls8G1vxZCLiwfA7DkkkE3QghHBHseks+RNHFMDhzGmLoglMtQJyWDTBAy5UScff3FVJYLMlyY4eqBFGfwTVimbPk9rPEEy8FY41J2DYUKJ12eqkY+1TSdOf4a0ZukSPwqoy1dQYG4AF4pRgPbyYor2KGX5K5W48ZXQID1XiW/pLml2gbuI8cNAsaXb6NIomT4i2H0FpMgHGlltQp9OaA1A1ebK9gDYPQmc7oVN7E90bCw9NDaQaLwBBiOa027uESxAk414AlqMKOLOWNOEmnWKSAAwSiJC9MW34l6orgpkXKtfW0FYEn6lSYU+1O/DBHkscgmkBphLYcXAoLyGlETOYGDAUIzIBhMPtNgTxCoDSypXzL3PdUedAPNr7I23YtLgFVVUWQTggYDK2MEcTnps1nwIi5Yv37hyHfjlO1MhpTa87V8m5HKjcjCrLaBMJhzwXEGn2MeXhKWkCj2PMSgpQab6Ap5cUkcUjvpjoSaUA889zA3501u9g09TWqcypzA0HJV8ommZi7c/otsZKiIOWbrWFmI/tNWzvX1RnrGzy8FS01MCM0wOpG9oYEnAicFCogpn8LTlMSzL7x7LI2lJl3j2XFpTUOkmG0SQN0jgE38FiXsdFK6NESoJJ1Z7Eaph8hxV6zUc+NYrBWJCbmy21zVaB1AMBCKrpNoHsL26CkCGAGabXJPH31aqcjfjT4btynek0Te+8Y3m+gbYWFuO1WHAI4/Af2FY2nJ0MHew5vUVKYV2RoaH5dCQAo9SwHw1iOSopITCJVkL1GUCU3agkyeOLc/GuS39/X2IysF8/Hy0z2fjT81masS1a1dYVpYXTQWT4uzpM1b5yZJ33nqbvyGGz4F6G05DHKN7OeMGGjmJk7zsFvRKKsg/jXeIp8cTtaubiBz2YAmeETMChh+f//znP5eKPohcLqb9I243aASV6UUZ/f73v69ymzIx6MGBYz4hDH7493+zwR6AgiLTjaKPzvNEQC0a8tDMMsQg9xXOaEc4zdzkhTrH7HDVy1Q9M7dYU1u/vr378198dOfuQ3nrFiJlIXPS0oFdUfu2ftBLBgeGLFmEssjKaqhFdbIHGV1px2oqymlpzzfzVcZaBGo3+tJH8M3wGrNVQvdiedLsK8vPnz3X19/D+ymRosBN8sMIghbN/IN/8A8ePXhofMfGRwkbzhuz31wjMOh59CdhdAjpa1/7Wubyxsv04a4jjQyHwUHnegfnClPBeYkQqodKcn/AT6TsfPZMc35JAsghqqm8SMvQWAE4ffqkFf47d+4ODQbT5zKHf+aBxWvLPuaO/CE0BDSMyXz00cfWydUJz1i6mPuV5TWi7s0332S8eUhy20lidMRiGXfuT0ILhLbw0hsyzNgvjBk19Gy6wYbuQIIdCKwXnJYDFfxeaRRiP/74I4ChKF4jdRprrzwHz2iKBqaM4R6MavTDVQwGQE7NTDMAduW+tHp4IGWWOPjJy+fPTUxyBi9jNcD+kz/5EzjxLcrJvIjiDldZTbFp2F46i4FSKcB5a0v702f48AnbH8fGI/9PRVU1BeU3vvd9Eh25PqVJr63UVpYhbxwbYRgsz2HGKTSG2wChDVUhXd3/+Ye/6Orhph/Kn+sRya374IcxMBgswBhQr3S5qrwaB5+emLxw4fzde3fo0nfv3oErG5rZvLCqU5RLo3/x4mXftrS1M0it9w72D7FXZXR5+dWXZGR/NjkuM8ixE0MWMh1GNj05Y02Vv8/ZIp3dvWIRbUaX5tUeXUPZ1ztw7/4XI8NPLl+5ODM9Z7Zyw5iXluV1kCg3rKaYRllT9qNTjIwLSqCUsBvdW6KRZEmPHj8ZjrPNCgp6naCMr4qXiOWUJXnlrVZSM4VTzM7NedLb1ydEyluDRDghY0Ti0hCaUSesqhC6Qm9ubTXu+iuir7enj5vQGqP8DasrK1/cvSsAxqzHP61sXL18RdiluWxqDw0MsjzlewWqaY4R6YLxoqi5QWZITv0oM4npSFplLog71n1kqRe6LzbDHKRoAIn5GpXMTvvEeKGxOKcFinriOIIbn99k8Fvg1FyP1GM9PaanHtFZIVAlKleJbEsEGfIwHSxrRORzOgZUPI0QppMnT8fa2u5em+M1CookM1jfisUx9A8khg0A0BIdR1y+aSKmWiukIVDRBk4iBhYy0RL39jvvvMOh4EPPNe1blKakD7FiMAtgA967778PP0BFsVg62Ex80MKPqlxpYgb9G5356Yiz0h3cxgAppk5NeOK5ylUCk5Dgxofi00TroXk2Lci9cq9+rzBwX7kApnIQGgibOswOwCgpJtzs0IQn0tdycOCBCuuB6QwWHTFM8GOCq8egqMeYZv6jEpcCiumF7jjvgMfq3Xff0TSWC/OAF0YFMLJeYcX0JRay+HtSvmkMzEi5vII0/Yp60sY5hMqU1WI2NrQCVH8qBuFRsrLME51VJzC0pVNuVIU564suUzbsFfzDP/zDbDQCHv5BooM6pePQqBJt+TA2gWztkO86S15AKST4pTrCZx5Wg6J+BKCM0nwKEWGREJVfqcdlFAy6aQUMcxzMOqXFwvMnmvyRC/nXiIJe8xxXbiDC9FCRHrrHImP/eDpGe2l5QZ/1EO7gFNyK+WRtfRU0OuzSMZly1anCgIktnbRhBgDDHRPf2z/iIuKjYgysr0Wuj5QSNIZZbQRAHiRjCkjjnWye8ENrOoP6nW9/y5+uX0e9UVGDHhpyYCsM/kTH2/g/1UABT1STEQc2ZVya8KsqlxvO2tD906VChYER5dLynK+MqIfoSXmlEpZCsVY/8HyipF9fQRSCUH/GmJImMGwEm/syUMyfYFbAV9Q+9fgE2J7DDAyzRWoaWyDdtl6K7uFRMUwxolIrYaZjhS6eaE94+KPmiEbTftx76AbYroyiKJzsmVSDmXOA2nIx/dIF5XMBA+ErIOV+ATJwW1Fh7rHKHA4idEf8peN7WpvbBPDwT1vYtRgb5smXAUjGkQea0gmRiUw58q1hYnb0njnzED/ls+HhY8ZjVRGfrRspBFDTQlYgBDxgk04HDgETPU398hyQViQYFYiK2IONWBcJJ0/oE5xGygvk4VlEnDxJkmoZO1t9CCowybQAFl6WvPgOfmLGW3a1XiBiE7KtrtmOXnYXDr4pdYy1r6ZGZ3NaG1C2srykRaaYuhqlBartbKxywL/+2qu8tlzCeEx3Z+glYlwRCFWSIbO8uhSjYC1CSE+xTu09HR2nVeuvlEV5uVbGBus8xpGEsEJSng44ExsgJurZ4+H21hai12hAFHXk088++e63v3P58kWGB0QJhJAWn+Y3PzN/9uzpKxcvyT+A2cWELTwi0f/yL//cooGVFP4MCBRr9/TJExPZcNALcW9cCRfGOCg6/LU0IdWSQ+LLAYmJZxpGEqYDnJsLklQq88Y33sQrsR6fvPzyq7gPJysF681vfvvqiy8Qb40trY2tbRzzriytoUIvEFWCfAqaxDYYdMLY/HKqAMBQkVV348WrIPR/9Om4ffuffX7r8egzq/2GZnML97QVq3RXjsKSSjKJ2m2LG8CIsUj+UXQEdYzWudmZifEnjtewF7iyoowb3odUTD2dm59l3XLtG0obtswNy549nR3O9xXsodfOlwQSHQsFYozEHjIG8Be37wBY8JW3C7Nzly9fMvoQ++D+/WDuG5FC9I033tBHeqRfeMv6q3p8Tuz5EHMQ5oHTMuz9XwADosUk+do84c9m5WAV1mcs2dCzjZ3FW9q/1QweethDWg7lsRRGgYNDgs0ZrvCMSk1YMwJIpozMz+nQgJjdRIuB1jW2GYONkkeV6eruMNN1DU5AsrSySJpiSobYnKILGhH1GDgPDTRUkNBQrX6jb2nbgWtWQkgsMszgOj1HEyag8gwAI0Ig/exnP/PLTBocHFpe48xDWWbQsjlOl3UvwSu0VNfWUbYcRMUhZ+ht0v3+d3+D41xVyExP1QbJuS9GAcD0P5XAc0jx/QN+4pFHj3kcgD386LEPj50MHcghNWfOnZXfkzOWMmct8emTsaWF2cHuzluf39A7D/VIvxAwDGtFT42XrfwGjn1FNg8dP9bZ3d/a3qGkRvURzAZXr3UBbn0V7Q4P+zWt+EHqq+pMBD4RXIoSQgGN3Z+Smknk1VhHKacQa+jy5assLmqSlXx6kp5iXHpkQOUgdF4UqAyThlCOG215Bc+2OjQ0NynpCRSRhjRF5PF3f/d3EA5+z3Uf8FqBMYxXGUQIdZD5yiuvaEu1SvoK/GaxYoiWUYS1mwWmP/GEEhCGEdc1ODeU/KzqhArcxnOolkakqr7awqbzuhkJgwMDZjFToaq6emlx0foUf6zzqMncRcc/ybNXUPRsfNpSninLsuSqsDfPirEe2ezY3NY+/OAhanHO9MXLly0Ec7brCyexFI15k+Gt2zctFg2PPLQh3nO+RatYCF7mRztA0In1E59AssHC4qhW/MbYb6LoAkhG5L0pLbLCuiaLBsOe7QG3ovYNCrMKrkg0qTgQxvLSCswbfZ5gC9p6IQoO/sO7tLdtFkCdt2LGqICO16ARiOlk2bKkQCKtu6AoC9cmka/sP1GbdRr458Q5c/o0PmmwMGeJPewJdDwBmgQ8JANeneqPT1Ie86yfGDiCD8CIyqHaRJXxRYSaYDAASWGEGlMuxfmoTcdRkYqssKmNiwG18AfpOwJABqjCrM/V0ixBhQygCBdCGJkIdVMTsIp+wKzOzCq1Qny4R2kit1yIRFU27vsFrQ+dQoh+wOatwGyFvdIoKtILf6pTzT7UNIIEEnhc3rpiZOPC5/Z/8fMPFDPd1AylGCmoZBlWWDHYs2ZrBP2jXXwVqj1XEh60DjnempLunbgcSnPSe/2pvJr9mQiA9RvKiT/1y6U5ZVQCvLwYQBmcmp0BNvx7CwyV66NPTBm9w28NX45Y0V8Jwex5ZnVo6K233jKJMj5JYd3RltZdxk5tYFCbZUN6hcAlVCBiA54QGEWXXBMjgczSKZZLN29+Jv1UdIonN+NLe8lWjD99QxdpaLM+VU5T4efwUHW0NGdVpqCiQ3Mst82tb51HsUjIq6P75om97A5OD6uI8xJwLq9opmmEQie2wVN71MtcCdANLWbU1Bi77xVwpaWAUOVd+hM1RAXeRm0Kuz766DrjCV68EESBlrwSYevP3K5aoQ/vw8789g8MkYVZVBseNMIUUL/xFtBh8qN7huP+bthVkg6Jb3IDJJfCSrrxBLnAe2boCFqjaoAuzM29phX+6kNfmX5oQuVGUQ2emDY+NzEybzXwPgcShPiN9tLlK/+ikpiTouVwIAK80DHmsMBrzm0eRB852VzPf+jcYGWsxEGzOgmkGN5shiUkVibbNL6IWWJTSBg2+mkLI3LJMAi6B5XLn+jehUaRL2CCOyRGwzOhPD+KWEr/i2giGfoLD2395NVGA7b22mVg/5PoTL7nCFLbdqoxTzCev2Q1XBIRvlXqdJL63BWi+qycsJQii52xM6mt8tDnIFybgJShmrVNjTuIoyfDeeBV2qAcKYOUNEqWnUx+Zawt6OL25jrdVPRLLbdbpcVqsSsFktybJnEQdYRmRrIGGbKl2wvLRjJEcEOMcM+yyhIRPlSnnd2WuibZL+3/bW5vS9tj7QRD2I6437ciA5Nm78LMpIx4DXU1zZ3tL1+7MjjQJyePQPD11ZXHaR+bzQIMbLs5sB7bgBAA0RiRTsWlDnAdHh7BhoyLlTgsnqR0Ni19C4+afsa8kSasVlQ065nFcOL4wMz0xO/8w99CYDhmVUXp7/3ubzEzaqrLnz4ZJgDsgjvarxJ+c2JwiIbxx3/8R2w8LS0vzqNP2ol8Gs0tIisYYOuO0XnnrbcMsWyGf/dff2znGaomDo24xcT33nvPxMmsDRtFhrY+WD2w3QJxkUAmAsWaqCAyDdzTsSc0Qn5W+q792Rzzg8dOSJoqe09k8LB4cnhI9Fq0AadBRKW6RsCYGlSKb37zmyZLZsfqBDNaV3h9a+dgfglj4ZEfm5i8c/f+6trW3bv3LRfH0Wg1+FKRnU8OsYJPVI328TNAglBGT32RmlNbCIygcj6PzA9Kc4FyR60ur5mGzmBApbGnQjzlkS0Qqy1NdU0NNWIYBDvNzU4CjzuJUuhgMr/GHftiLvqWzgRsmaCMXnMdKqibmbIrd5xBiGtfOH/RW33B8YkBOCchsCbqvueGw0V5UgACqRcmGs5OaUb5mIoi77//cykysXLzwqihbX9KuU7dV+zOrc+fPpHIoZTGY6Tm5fJbKnDcVUQi7e20trYQidxOVC5MSM0+NPWpVMBQP9vbn45aNwqYA/sHhKiUyZF8KeXiu6jRNz+7waOG8WZOJe6ZVcNbbGt+e1u70Vy0J4MSvLn14N59WqAjew3Eowf34c1ueKNsV4HNj3yZphqOwAazvONDCXbokcKlANnUFqsi+ggJ+K0K9Vq+TscqAEqQiX3+mtZNfEkeFQaMRY/sMufbpo3RvTiwkFBtTawMixLkdpUrFuNFAA+HH1976UWdNXek5mAwUxyY71YdJVgUReEbhH369FnYECJlOw2PqSE2QVhiBG3avRcT5/rHHxFh5y9eCHbKvN8Oe8mAZtZkKDXHCJGD1ooEtKMZQyyyxdog9i1FvtBlEho+tegrtVk8kYaV0ED8TmvF00yl+aVlTOz+Azmmuk03JEQb0MEnoyPIRsnQ82yp2tmS39PpyINDQy2NEvVunBgalIUM5BgjGrt66SK7FAf4yU9+sr+z3dnWeunSRTAXHEaWT/v4+nq6bLk5d87GobD/kSuAEfnZ0ycBCYHGxZiePHkc/g0WRjE2FqFchgnwDAm9xi5AaPFHGfEPdp9KIuZYaRuquDxs9WOfYMsWMPFe9CCUZH5z48ann+HhxwaH+gYGGuoaZ+eWrPla+cTJZVW2WddODv8Xk0lNefWlF5WZmJp8Njb++htfN82RqCzpxsFqT3tL8/HBod/8e9+nn6B/ihEFyLFF0i5h4jgYMFpbGslSQKIiDCEUKjbn/o4eoShdW5iPlQREK0ODxRZRyVQgtnhzY8PZ06eovDD2V3/1n62BVJSWiLFBtIQ1PmOAUF1nWzt9yLyjtYuYYluKG+Smp1dmtZJInJ6coGXZgm9Y7YvjZrV2LUBL/KEahHQ67EJh7rMgDxtIqiXElE3u8PHICNlt4kA7Nd3nhskU+P+4+u8nv5LsMPSsAlBVKO+9d/DeA41G+2lOz2jI4dCtVk8SV78o9B/oH9CPGxsv9gfxbTA2qH1vSZHDITl+ph3aoeE9UFUAynvvfQHYz7l3NHqxt7u/fevevJknj8uTJ0+eJM5uPMSQwMB+6RUdRE5nAG9uVjplaG1tZmoKZyqjvLaAjazCaKYmJrCH0TDtCwoSZDTFbBhYeVVhA78Qxej3lbacssIid6MRtcGbwmYOsOeXotOKSkCochxoTQPHCjXUCi6Fydirs7MzPzfLluWaZ9qpRK+N5raZ2YqmIf1KIfFcW+qkWDxPu+ytezoZy7FXSaVqNQdyv9iAql/rjrbUjJk5mh2sJJOETw4dzg+eSLZiKhmtJA5x2/Td+zxqMD+PTbSCYMORCgmwDRILNZCcgjE2NuoeBlgyDEO6mnY1K4EoPqDamjqdlTHJkDQ8NKKkemZn5kTfETcV1tc16BcBYQHgQAfYCy9c25xpr6jsM3A8j8kb+GEVvfyijl5rRU5hRqwxa81R0HjecYGGwtcvjYvubSiorq1bWFx58623He6OBTMPd5Tpbdphqt8NcsIL4xtXERJKAZSeeA5Q6a7ibTJLUxjRSTtQvDJb9cQ4wcK2xAxfSnK8QQ128Ql7NDHfY+d9hPjEKU5qzdNugl4TrwxnCKQYVBVcw0JM0pNAK6Ry6WfiwYq8HhSZrY28g7hQSU1gPpcacFXaqPKwozZgAHVvbqGSOAt4anOPzElHJNSJxLEA8koBjIEpF+cXUytZSdUCyVd+FdNc9DqZP3iV0qCr66nyLmXS8umfPicJSOVPJWlSwmCISgFTG+nSXFo5mKlX5bGFVqA37bgYpnUBPWHrmvNRUvzTuIrZL8QoV5uUaQTNh+0vt4/nEZPOJta6elxaTxAYsyl1ugDgSulr9Tmlb8rT2Beov2/dJ2rwm1aiHqFI6lV9bCEIM9vBMcmWGK7XjW1r95GCLvKgr3Eczk7LtDPvIDOVMJUwg1/syZ5wzxnmF8x647luxRwmM0OcHPB+D2pg9X/O78O49ypFdcwKM6VteRne9KCLfSwsoV3WCnhf7BzQV3vkbXu1nY5qwB4awELQxrxAkYRDIn4xJUTgMJnrw4bJiDqZ/g6qZnwAObcg34yNb96cQVwEBNr8K0MoTWEYaGmsO3LoYFtrY3lJoSe6zJimb6IjmcE8mtDo0OgIAFhjVi0oBHE+hgHmr5OqXEY1jZJYQg48GsoMXLHq5MwXs5VLF8+PD/czZ8+fPed4qffff5/6GBroRzXO/gf379PsbBQNhSxsx84ZuGIUCue4c/cW0wEYi/NzzS1NNDK8Ls0vPH7ykCV36dIFO2ppGYQw92DUIjqOVY8mWAOIj2MNmXw5nmiRnjL5qeGWe/FCtdxR0vRjYDH3i44InZrxeUfHvokpeyuzegf6ucf25hecOXtezTqoBkrckMBWjq0ISb5I0+PUvlG55kjgsNQfqyvY3mLRcxbcwKA1PX+a9yG9BD4MJsxlvE8kNU4FFlkhtIM11j84oPssQpqK2sSdldL57XntCDCTXAcXAABHAcbiPq7B3wSI39E+AXNhxpDcQXReWHjb4d8lIDvbwbHI5B4noyacWxGlu/UXzmkSFSaGl/Aq40FM79m42oIuqENoJZlukObewElaUVkUEN3LyH7a9cQmSJIxODAkIhwm3VOltXU1d27f5aR468rbfg0kX339ZWNdzJRog/r6BsQi/VrR68OHj5o8wCE/KM1JudoGDUUGFskoWM9YXUgVemmayHd2tqPjp599bKsDtrWbC+SmgrrAxwkqkOMrf9JUmF93sF86WJAj7Eot43ORSKneM5pAOETpPpDMOXWT8oScVBi1a+yvqq5RLWBYchPTUxLkaQtaTIbZM9TP0OBIY3MLpoJnnwsVpFXAoGupGYQ5AQASAOgIJAAA8MrjCkkPEU6YXUSr37sH5oaGJtwlKyL3m2JUNPyoBJCYofuJSKpmNdPV6kRZ4wu5uHv3tj6ePnMK2MDDw7QEzPc863VelybgHCkJPuQYjNx7aGkFbDZp+DWpkMxbMI91DPWbSBOIMAoiimAaGFKCYBvOLF2wTfn5817+WttgYEw0DobRa9MJIU+KgRYAmrPMgpEgTXdUJakThCvmT2/ZH37BrHXdZOCqHKg40Cs8j0nMEmdm5K6hbaboTOnqebUGBgbLyix8zeN6Lhu2E88aNjbl0woAkEL3waBmLbqBQ/ao1Sf4t7aG3FKuiQuyz4CYgMfnXsGJ4RsJ4AR76Dheoj0wj5UD23gc440umsBsVkd0UHnfGo3RFFFEEWtaW/BMWTW2NPBOSqEYZ2ztyRTEKOaNRuUzEhYo8ZR1lfTX4dNpoGyKNIpXXwTxYhvJIlGcUvLqxYtnoNKWP00OgcdzT5mQKVzX0/2c+VhZWTUwNIITLE/BNkPBGjgCOY8ZA/DjhD/Xppf2FovGWoEBCtyZgzHUvcowM8nLLUinhfYU2YthRZ2aMftg1hpBgscyX5kuqo10WI22O1puKJuRBUdhReT79a9/bVUW2kVsShcDafQzrMK8r9TgV1uT01Mf/+a3fQP9dr/IWeYcWSFw1r2NtgKqbWKJPG3sMOvasXsnJq6IhU9UBcNqcw8VGMnlT+RWEooQ3eBIQFBHSRTEWtgsfYL/oQ6hKRlK3oXczAV7QHyqCYVdLHG14UyFu552wyHhQvHKymoIpPxVC+1K6k4qaLoJJy6Q6DXyeeWeZeI0g9y8ONbQcx8StAgrMMNZmMMzAIAWyhxIiIJVYJv4EHA1sAx1mYUUeLPrJtkdoaRzgFKp8WuFnGtWW0oiUIqQpKHIg5dcYVS7IEpztfVNpsTucT4xhEYdARWGJ8Ie+tNbXdZZTDI3PeeMMfBr9/PPP6d1IRb82FJJ7bpU7lcH/SZH0cXqLpxgJ3pA5f4EvMqV9Kd7+IReAGS2NRTonkt1mMMv6P0JjbhKr3xsTZz+8tAZaqxylAaNj/UWI4JVvX7NUHGAHWb2DFiWNeIC1OgITbBMy7v3JHad8mbwf5oE7DHnz3ECGNmHeh9qMZlrBAwmNFDG0PULHb41+oIHf3irWl1SN8nXrrcID2YcphfpWzR1Azyv9AuC7OrUOuQHaZP1HfaTJ9rRr4SfItTH9MTSngLYEefrrwsYav79pVOQEH1JzERfxYeM8ORSf3p56IGqQJuKDWh9SwCQh1WnZm8RBoSg9ac6EQnMPtSo+nXZ8+XVNfr4tbQJkanJPE8EaWAFUk3Y3IWT3EX92MwK+bIZyBckVD3ZpgNpmtC6X6OIG42mcusebArIXuJ7degmMAAPJL8ATj/3HC0gGQMhsVyWYvJFkFqPXxc646hUEWSvbBMzVXlp91TsL87c7d5zSlCmeXkNGPoAY+ibpfpF+PQJY53vJ9LtsPNtAs54vQkbNusmXG7FGUoBA7DUmKa+gQe2lDTCoswCDDCMbPNGNZgAEAvkxSsK4jYzCrY4Y17YD5+NYA1EJGlKkgo1JzSNDVXutSudlo4jBPy7Vpe0FQst9DZ73V4FaU7UidM211dszisrLmhvbm5raSovocczCjByVjCtDqqTix1EOIEkM4UtCKrcJjvpyXt7+2fm+RlDLJXXtKVqdFEgYek99U2NzAOV+JaKp8GPHD5UmLvnwMFOgRpIBgmYgnJ39KlhWHSVqtraWlRlTHp4/76DyzAJrwEdZ4rONWXVEiqamhpNlmBJyIqB09vPPvtMNC0wJCVQrdGFzsUhLHKsyE2rCx4afWlq6t78gcb54osvROVS2ZICkcqurh4cwiXPdOON0F8BITKomKmKX2I6CPWS1dFOD6O7njL61QZCLbrnFKfmyAhZ0KgCv/rNb/OLK4ZHRjmqEdoIyt8mlQBDoay0KlweVl13h+p3tJ968Dm+M/DX1Tdiku5nAc/evAIuH6EgGLxeSqLtNZNDSVFtOtE7Xj17UODczNepanQazzTM1NfWtLQ2qI1JQTCsZZnAmHjYzU4Pg4044AGyY7pJrIxntgHwP/GJkj5L54tz8wyOyelpbwkRviV6RIkeUCA1iTzUU702AkGv54tLCzaGIhkYTA7pZr2+d++O4B+rNNeuXee1RHa8zUkare+JcVElMq7QDO+//4FZn37FOu3eUA+iQlix+ARLSDCfk2vD9yJj7Ouvv2bGmPtRxXhMMig9siWA71+KKRwOALYFdxuK4EDohUxg0ySsLiQzVaN+kRLalTRoCdeRkwcTAsyvCvVICCwCsQnwiVQYZIrcMUANV1yzQ8MjfLGK0UAQpZ6xyQmmmFag9M69e9SyGct3v/s923apgsqKEjgEQLqtGasQFm0RWOyqv9oCG4QDTL9MjWJc29q2IdJz+iTOx4gzGUI00jEY/Nhbi6IEGei+hUB01xBCQ4UdEbBhgtTe0WY8VpJNz9r47LOr3/3oX+kaZ6d2fahOb0HlHm5xNYPYMoLJidrIF6fJYF+/Fru7n156wzQ7ssfAjLd6F3krSsopBQX4Ir3KK8zTQXBq15+BgWSrAN4ThmSYBgnmgVWkIbMiaqARAFjLh35Jtw8hRwE4h3yGLytcGbnThFuKjmBAy0duN4jB13ht58Chg0cE4Nk5wEEgVAMnG75d9BTapXWmZpOqPNcQ3KICCDUBb+weIYU2znhoJokWYNAvXIGdkAxdsC4q6wWV4nMmNRrFBLW6Gng42b22WLfaunnjtnsYNiaozQJIb3+fJxSuba7PntmYm82ma2xssthlPmxyNTIySrMaOsvLzT9tOm9lSKc8jOVQR9PMfbTDTnjg+fMeYsgY0AvdxOE2bChjco76AhFl0+TzbmhqFmvHNk3P9sK0Zt7lJZJrbaOdfpF0mLAOQOumyKH0aCuoELiR7BrNocp01iFThIXZZ0nZFsRwQ+yxUBaLLVLitjZbCQxXEStW8tmistIl6RNj3hRR8tgJV9AesArhKkf6lBAapQDRXV4swJgG37h1k0M9dsxlsCJeGXmN1WSBTjZumgB4wj1nhUc0o6rUACGUvM8hGRKwDf2PLvjKnyqnvS1SYV1lIAHd9d1IBGYEQkQUVw+OBSEm9xWseqISDEw2dRMhlDSRQGJyZ2TpfdHHfDWb0M3i0jLdV497HyqsCdTRxO+NFpX4Ezy0pXUkCWa0ri2N4qtkl2hMbBRTiW+JNorrI4q0tLXzTwnJ85b7BlQSi+hRU33s87QTDJJVpVEHa8o+Z0YDGOIWbyPNTow+nvBOg03ooyagK3aRZWXZNCZa9cmTLmhMLQ2A4fP0F6V8ohcqV2F673BJaFSJ8fSv//qvIRxllfcWhCoBv8Iu9dBn7DmE9qfuaFGX/apTMWQS/odv6R9ryz4P9eiFL1WkDZae+/SFt6rQmagiNumG6xrXMsI80VsfJl9FGaDDkW5zqTqpEXBkz0xSpF1SZRjQAZ/XvmeZZdjLGiv+dvHyw8qAwm9niNKidlUIMpX7JNj3ZVjerqSrkXUHAcCTktyeVZwUdEqCK1Kk+FwB5bGI+/ShXzVbgAYLTKXcwxRgH1AZaqCxPWd2Yh1aO/qViGjSbuwZAIx7AAAGDdynQuVPlYNKGe6TFJnqd5P0KOikftUCBpw+dE87Q6NWlPHEaIrw0d8gZFzkBOv4hBikHWGwL62tZ7KS43Bpv7hNRLr7LCpbSXgXvxSvg+rBxKUVpbzLmMalURcy4Qn1+9VzNWsUJAkOl9kTAECv9AmQXPoFySA08LiIq7eK2WFreqcq8PvVTbWl5Es77pEFCWnz/QltAvKJkzsckp8T3lD3ygPJtypRpyfA9ksDqhez8XbqmktkpGIurWhOGf8B1eWtkjY58cqbcEA9003Ejsk9g0nneHkRWoSXgcayphIscoE6WNVmdW5ywLh0Te8BkF7ygbrUDzlcuei/trrNxKSVZRjeMaE1nGTu3tySH2gDZstrhBKUNdbW2mWgO/YJFOwtQ5O6mlpdsyX0fncPzxDuYn4JVyktKjZdgdtHTx7LYgkYXadFDWAA0EdsbIYsh0EMKhvrFvdmpsbv3Lquth989NF3Pnz3268+f+PiWW54NgfvO9+2nZFAPXXiuIGNjqZrhgcHZSpEPrNE4Tc/+tGPrl69+oMf/BHLAzaaW5tZe7xBn33+KQOdJsD2KKJOPIM6VI/BG2aggimGGcDvIZyAnLljyActrf3BBx8YWtwbShNHoES/hcZsnCd2zCq+rf95Bfk4RZANC0wKf3hjDaiTVmIyptSn8gzAAMCumhAmpL9uFoyyvcPiM6ww8dKYkov0Ly3IlTA9lpEoF5K4x1pcfoSUWqXJzR0Z7l/onx91nhcNkxkjoo3UJiTO5Dp67Ihp79zwlAU1yVJWl5Yivr9EDNIYdSKFK0TwFDL9pTYuL+X12Ojrfc5oEYzGmd3c0GjlmtS3te4jRwgKIQJjbFzCLLStgUSUMAdtKtrIYZ/Ag0ePiBshojrMCnQQSOAEbyr7mBCHe67XJJm5ySBGXH8iBycRPjfQmtdhCVbj97//fe3yGSMEt/346LA/OY9xPvf/2Ngo7lUDTqirq/WLvnHWDO7PiOPDep4FbrVIgvCbwsSL8vjHf/xHkwStUAhGUM4T8SQ8qWKjTP/ee+89zdFO2MCpT7qDfIRaJToLFZ7AAJ6xiRMDQJ1+oS/gZ+dmmCkK4xMyovtUImxoXYG29g5rO0wB0jwxEWu5Vp+0wubmMxUVw7ax6MjpK6BwamrSZJ/e1hBLAlsiBIuNdoIxDJPiFt6wrr4bOs+fv8SunTTTGAn/C/JxN8C/+Q+u41MReS/OZH1vtmC2F2Ojj5ZWySC2BLO5MThFBBhEfaLykeHRiclxaDQwQyk4TZhNbczPQaKAYcI8ltmhchgD4Q9+8AM91XEIoaCEMNnapAkxJ/39fYwebdH8CoTjadNCwVR//2DY3zX13P/dXc+ET77zzjvk69jJk/bqYgzIeeutt1jSMdPLzNQQguI38ZqmRroJWiKGOnCCtWDDV4DBKtCia8xuEIojqq2twvNe4QTKBG+oU4UqVwnIXZ372s2mfOu5eTmqwb++Q7tJiEU88wqIpRZ0n10OXVqP8W7N0nocKS3fW2tLB/x4aIasCQFsebkrcLKyvPH06bP+vmGqpjC/kD8RJJhKu9YtKRkjjCFJ00eOHjIbBLZ2NUrXMxwQYtdeyz6SdIXDHmJxGgYz7yVfyYD8et++Tlay1u1jNKWXDMDSkxmghqxUSKxlIjQzO6HOPVn7xfLAz/yC06bnzLJLSwr372uP3WiHDqqwu+cZXu3pekrEWI0cYPkle6urKvjmtK5CAOMY0kGQbZQTJZVyafi8uPYjd8WebFvSR8edX0FtPu/uQibElS8LVnGIeqgjU0YMdv3a1/aSwapeEzELm6+NDmsbEI6sVH0qkqiG+gikKt3HS57gK2XoZw8hkyfOmR/uoUgBv+ioBryBhRRAlNhebzVsqN+3OCdVZX4R11sAIAQkaEhzWM6VUgp6EQjR0wuqNU0taM4FnwD2EIkpBPeYUPwSNwd+IDg6qAJazozxzTffJGXmfphcQ0B1kXltJQSNvbag9euhyoHqcq8eD321mTimwewtC1jQEeyxueAEafzyjGgRJAyNuYVFk2yLH741EdIWTyS2BKEaaBslNQ1LaadE0vsQg8FAWI+Jq5phAp8kmsMuSLyLJ3EXXElRzQidmpkz/yfpmgAqjPlWMfceIkF8myRd1Lr0WewfqOZNIXR2LUKR6IP5mVm7AfkT2dlsavtPeCt0B6h659e9mmFMzVBBCeipahFCQ+nQQy9lHmiLECBCBXRFFUoMOR7o2NrL9EdC1eFapi+dXlFitatSZ6A4WNzZIMkEDnaMplpKaghb0A2h4spVsyZNhtJYFPV7wmzllM/cpTyHKjbNJQk+QTjwuHzBFIMCNziSpe5GB5IycdIEADwxnwO25ynwyAN9WvenbxX2ypXC4LntqrZyEi3figbREPhBTlB5OzxEKv31q1EiKq1kBNskNajE5T7Y4n8EohldINonaZ1k9fcipLAWk95Ed3CMJwijBkyj/4QEftykl4f6lfZdR4DkE09MgqEXbpvb21s6OmUBSix8p1xr1maKWKlgk/owsutAq9/oQcx8nDRipE9BAkyKk4Q0AIl4A2AjK5lMVQaxpvlhz/V77LkBv89dv++dXnjOEmfWa0jNKZbc/745N0AEEuCBF59ncNiEve6J8gCAE/e6oEVPvFLeh+6lR+Ckj2zRyVxWzVHYkqd9VGthCSkcsCU1xFdCfXDCy7DXuUj4+cweYwvPxmqNPBGVvPP5YgmNbIKXIFa1wyPj9I4KwQ8VNC9nKiFMTX91KoONvUpmbqavzirNM7M2s0xylOJS8yUJDVtKivJLBYln7eJhLivKl/Mnd6+ku6bAW0xzoAo8MEDaKk3lGR1r6yPrFNEdHBrp6uk2ujMY7E8pLitOBzkJo0mfWTpm4FlHEN5iKp4jiuo0aE2OD09MDmoT/MhnoCXnx44coynEv9LCYNaX/t4B+kslPBCReKe4DBhl5SU+MfO5df2G4wzPnz1z/ca3jK2HD++baBnPaGQDoY0dmJC5wMqBVfWzO+FEtfCqI5pQud751R1LkAkRg+isc64ypCgsKua/7Hn+nEHc1NJqmLTXjRohO6x83gj3xhWqDX21gjMh3K8xQJxGDHXJiapSha9v29UhIGuvFaTHj55YgZXFherwIURtbIUCQdDgpa0dZ2suLE6z9WPH/KsMcw/ONtJKz9rfX1ZuA4DIyykmu3mpCcDRY4fzcmRuSWwF26cyM2Cms4OKz+570e00h/GxYZukBS86csB4WZBfnJdfWVsTywukVc02iTEOgu137+H+QBF4sP0DHfv6XjCGbCbRKehShi4Gp5GVdeVCNTME9EW4FLH1DXU/+9m/nDwZDxXQR8jHt3iVzNp2qUWGV7qmDEuQVpC3d2hwQDbKtrYOqlUBtrJxFFap+3ASry6dPXvaWIVeJsxZOYWMDyV5Ig8eOKwhuh2bgZDFL1CqtEw6lHYex3v3b3MtHTl8Ah/qTvQrSbAGVIWRCVsaVzCVHqXSRN5FmuIf9iWAGWfAcDgH/tFZNdA9WBfClYcK85ay0mpvdYQYMpJ0ygKg0BesQjYlwmIZWKLnhG5okKzGoRpjYKZG4AGTAD7B5azaQIL9AOm58QsPK9nY1MJx6aEgbHoShAZ11ozzOpSZnppAVni2Smr5XHpGO5L4+egnM4qE+WN/fDKDypSrG/fCcE1NRMnbaWrLQVlJmeUUil2/6Ew3yI3QUOTXvcqhQh/9mkp5SHXAhpLYBDzEihyhoFfWfDiGXzwfkCoXeL6VQ2VuYRaqMQmcAMlDIOkCPAMehiHBt+oh8tiM4xlBEQUe6Hmypn6/6TRGeTUgKA2Mt9c3lxiabF9o9EqjSOAGlVWlwrQST/Qo9idUhvUPD/rrocJKal3fiTPkuE8NGp8zyTJexqwYtCD58ssvNUQYXZgZc1ImqoUcwNAwMh296O1GC8Fpmk4Vmmmt5vRUSXpSDfgKM+Phcxcu0Kt8MBCij56TSnVClO6DB0t44pPr169DF67LzYmoJyCRCBSh98A2ORnJUnTBPQuH+U4QbLW3INDS0Ei/8Z07hRO3T0zP8ALdvnvPNM+i9tDQSFl5Je6yFKBygVvUFJpCWhp6p2fNba26Bh7WoR1E4W/O2Su6L1w81meKikThoo61eZ16+vixvhjBTUeRCfw25iG6LvCbbL96PT67yPCDHP0ylTKB0RbVTZ2iBeTjeU/0xeiJNKwbuSiQm4DoL9p5rgB8QkiqW9AR82Bp0a3GeNMkAMM5GgFbzb5SEnEBTIr11CdIhlsEK0GdJ8gNexryp3Y1AWBEAYlKvE3bZbf5CsYwrV7oGvvb5+xP3yJxQr5897a5syPnF2Mrl0+gBTawim+V9zkAXKqFKBe042RBUzZfQZfKNc07YAKQdHNbzSB0GeZ0RIUCzKSPi1W2JJrOoKBf6QTA6e9KWg1WDx8QAGQDV8wO9VTWyAslCU6xi3BLHCLSIRYAY8+xkhhsa5vzen1haQ3SdE2jIIdqv5CJHL6iIhDCDfjVxmcn84e1CLsE//vf/t3T7i5JjISNCDelHmkwOpylZ/Fbsik8lpttE0UR8FKiqxkMsA0hzEgVkgK6+sMPPySA+hKTaa8JknIQ5AojzQFb5aUw4nus7BXgFFK1tSHoA7QGfE9vkJBAU2yFjigd6PAnGvuW8ldJUj+xzvYWHAjGBa9wcew8K1lciNwvNnqTAwUEKNoNaRDlYTXQ2mdpIYyX1L4fNgU8skBZi/x8AlxQDaPAo+emEBsbixGfvWOtHIPms0jBoEWdcpMyyqu8MGSpJOF3FWUlMqvYam24NjzYuio4RnuOinWao/pNv3ZlAju82kiC23yrHlfCB7/ziGBEb/XUQ86dpL8RyOVyn6oz9PYnzkBgHJyyOxzKImJ0EW8A7d6qWXfWVlYVW15c8srAtjQ363lZUeE+uRorq16LkIkzqWztFlyzhwZRecpSvP+aY93CJFBNunYizU6EgmgRnObtSOPeeOMXWf1q15yVvPiC6kUfUVfGXcxkfqlr/geqFLYku2Z4sAJauUQE7gfjxH9axnkE3i9W07ANNEqmwKS90yMUoRaxL+Sk1DGPVSyZIjLjzGvk3IltuzbmVlRWa1r9gopoLb5V9/Z+cb6KHNu1x/IUT6XtoVvLXB6bazItMPd1Krhib/iHyqptG6oQ3WXvFKW2srwEMyZIMedZWjaLlmvfQnyarQhgBTmMlhK7r2SBFnwkTE0zkk5iAYDhvrKKaoTjGjEdp8fYfGYW9VWVtoeuLMyvSyBdUlxZmM9PbGYGp3ZjzM1MMyA4oSETuNxyDU2NZL5vcEBws6SEjpeXynrEMVv5e7moYUNJuhuBwGlSA9Xf+fB9LqKRwSFb9Ow0XF10MG2BdGo72+s//Zef8ejv6+jELcb1vJy9jx49MSQgEfchlQ3PeN4kiDXsxqInETbeM0H8iTT/6//6/3z//XeFdwuJHujtE4xhc+SL/lWSc/v2LSoFYwOJmDAm2B+UCLVOp2gR6WFbK+ZeeVWFQmzdUwK//e3H9lBXVteuz8wBhvI1+UVBjHb40AFqxAgn0U5FebEDhnu6Hy8uxG5+8yuwMeA5Y3r7w61eWV2nOzRGSXlVRV3Nw6fdQ/1dtGB2dl5TS7HAFfuirKUYSeUKoROS6MpVesCBUYvLC81tTcw+mHQimZopsYP79ldUln/x+VUPRXjZSyrov7a2Tsxnd/8LAWTKkCFHHOA0/oKZqTET1+ZGLsl8YYlAKtFsaeXLHfq9lB0AGx7qztZ2eXFB5Pa1D9t6gpE47JjsbQtvLS3v8ln+7Be/QH2osMRhRGHTKABdGIsPG048JAJkDZ6lIFQ5IHECplWtt9BOkImYX42y/rnWjN+8SuuCx3bvEsKrJGJ1dLQshHrcGRwe1iMOIsO+Le/cB7QUfh4aHNt/8NiVt95jW4frdHfs+hXd0dvXc+roqeycXbJSmtzyM/T2PaeRysNYj9EX2CjuYmETKVBdunRJo2w42oZG1TotWlLmmIJSDh6iNiJaYH7B0X4O+RPXYuiqqqlS7Nadm29feUv4hOHRTN/+PG5vMuIVCuYXRr4BGXIb2vdNTc44o9eae1/vEJYTHG8OQLcYv4EEY1QOwWf3GA6YUJCGUckdaYIfDw8eOkTOg+uo05JSrk17C/TLBI8HCCHswaG+Hj9+SJ0qY8QZGho7cfI0G53vlrxUVp755JNPEMt8WEClypXMyYkIJeSAFrFj3hrZd3ZE60VUp9YpfIyH6MBzA12E1K+EwcODU7LDV1UJ7Z01Q9Mv036v0B169UhHLDmGLfh0pLi0SPTQgcOdmjQ1/fu//3vhGXhAF6xOuOGzRyn8Y5UAL+XsZEm5q07Tcnum6WfKBMbyLcntzfWEYYT0ZBPw8FNQuPfXv/lZpsxtGY0UhfRExlC7t+zXd4SIsRhsrFXBbB3791lnxZl6pI+o39XVbbA9ffoMtcaIQB0LzFJXAMYy/PT0GMuDhWqPrhwB3Ng0MxwKWEJf3QQVGGyz5h20qR0OS4r4WbKs2JMCcepIKatyYuPtMesTX8cuh9LwUziVqSSfQfbg4S0GgB07ZETgnLmTzRIUFOrrO37ga0DrO3dkBBnyGEiJsBcmmN64c/dmd88TVAiVaByxsNAa540aMek9zmPRo6vLglVeoQKN7PmW7NuZuyjeb775xrZ7rgQhwDxMsb0tCRbnTzXt10dxK3bW8p6SDnFEMSYSwjgr5tXU5OS92zeZ25p+dO/ei+6nKEI/MPrraqqZKnjgqy+/JOAAQ3pxJTliaV7L9LrbuTEeIr2R/tjRwzXVlVS9vWEQKFQdP28Kyt2xE8m4+XpxYW5pfgna3Yey2ojdm67o78b6gl0KiU8N5NRoWUmxPbrSkhaXnsTDp0+fJFme8IrSV8ZCf2IAFNE7vOpPGwnIV2/iz0ZZG2sTh2QOMaEWUj2GW4ynNhhoV5iugG956kzwjh07wmgHGNmHfGrH/iuj3otn3cKKUP/VoUN78/O6unv6nHUlqXdZCS8YxgctD4qZA5S60sV//SV00ALBs1Zukkz5ukypJtBu4naQMNiMOOqBcE/oWAYVuqflKX8dd9QdJoci4bKq1YR9wRvTsfrBVMnseZEQd1X2aZ+zZPSLd3djZZPYlZaUUAJMGxJNRTQ1NlphHZ8KdjJh0FkPdYFypnxoDzpTd5jy3KJgc0g0f5rhzMPh0SHoQTvy5dt02I1IaS7mrD32FzKACzcLdZ+JTSI8VwMt6t6hE8SQaHAwEQ2zb5nxAEYLZTbVhH2PaVwKkRNf4hjYceMhiirguY7Fsa8Wt5JYmvjTuafJ5A/KlE8HJA9dasATalBYhJmuusGUzn710GOfJ45deaDivJvYC5qECNFajLDwXnMs+y7ZGAoEAzClyq8mRlyk2tTMpNxNKlJnUmE04fKnXqCLmZPVQ5jFoIDEfLxN1vptJYEU432BXATZOXwMYl+k2lO/6Dd+5SRp0i6bWeUy9y2tyHKgKVSum+r2i+T6CJUIg5Zp93UZw1F3vqJ88ZM++gozKZYAGVM6hdMCiVgmByLuifCVwmTeCQxGW4ygzEcHL2xtWnancLEUHr1w+UpBeX3W3vxAms0UjPSsbIEyBnbKXytiP1AhZlTOeF9Z0rQwBhGcuox3/QpNwxaex6Ag6XtBLFOCCqnhWgA0hjKBkLHHMhN2jBWolxlqsxcC5yGKyQCuQE1TTx/VVJdbQUNX/RIhFiQwfUvm9ys2v26FR59W9IlX7jlFYEZuQRJl+6maUYfpb44bHJhE+yhJN5mHIC8cBrtkGlO3bDsTzGOZRC4utZquiH0yL6M02DbQzEiVeohv26iGBFLg6zWi8HNTB6DVWfKg+4w+4wFbxIKWabuJgw9N+UwszXjM9qyEULLu48CpxUWAivAZDle3Ua0YhGpGYOr16NHDVrmkEzJFEXAnXUx+TrZkR6ZiRXzzWRn5uTEpB8/65jatYbJubjszPwddVZU1TB+8KdBZeIOTJhdFzSVbio1tPMcG7LbWFhh4+uixzP30oLQPnAq0hkGxrb1JRse5+Wmpt8juxvoO9sfh9urYUYB/jBxQweeBdnJE8iKYaSDiQF+/MdtGL8i3NwBdqG9Dsgz3N27csGyqRcbB9s5GRWXR+CTXfrkppNgGg5CpowGA+0ockVAQrWiLLOij+djE9Pw7731orQNlWb2UQGwuyc1ZWpCrcGRyapzrHaGl2MeHpNI2J0QxM5Gtz8m0d24/kJSBj4PR/7Sr59mL/rNnz1/79gZXKE7Ypg4y6LlCK0oC5gycXFUFomiYpGNjFcmuUPQFCVbH1ZYvEFT6bepFT5l5+mXjPPXiT3PditKy1pZmA4OC5NH+3pnJoZfbG00NjXZRM0dwxsH9+zGwLpiRxupSMqelrw0b4MTk0dNIKppleoYZeLx1MDENs+zTZ1izKUmx0dGaz607dwQUgVBzGMmFP8kL/EMs/Y5e3sIzqHjuh/r74I01wHZhYeOKgDYrizcObsFgDoa47o1k5qKW+KVDodzsUxwdmxRF/cblK+AxbKt2amJSGZixQQX+rT4trW7ToYTr49/++od/+D2Brb/+5S9ETTJAuW4fPn5S19BISJ50dbOiPCwpyPnm668wQJjLiacQDrVu9KIBsDcfqsw/+EH94gAqqhudWQ51HJ+O/xseG2W+TM1OdTDdep4eOXhoem7GsXeMS858v/s6D9o3zGbSTYqCttcvAJM4pj+lQUMYTemfc+fOY9RKcJSX6yAEQg65gC4fYkuzERane5oT5AowLMiOmhUTpcNdaqrMZ4zKkK+D2IYU+OrNN9+0fZBVAbcqhDq8ihwK+FwlqtUo+xISrJvBAK0+PDpSWFD629/+1uocoTMNsJ4mRbya03WzQ/v3YQwVsiZF2khvLxdasv1gt+Hp0JHDOsviPHX6tE7NLUbIZUOcYBUx7iDBaRQgMwIMmjMq0Q/kQnekwIcTkgYw38JM7BienV9eMAN8qRiKuFRC2PWR8Qpmz8GGCdGOrjDGTs+P9A48Ex9iO1FRfrGxm6tsbX3jyaOnhNSYK42e9J2kj3uNrCENtGNawzc2xgZqA5jnMMNMATOrSwAMZDa3tly7dk2wHg/NyROncYvDTPhoLbGbbNDSDO57d29hP8OTQ7gtHE1OTFkzdBQd4xhDPu/t0woCXbp8iSzbXGsWxxaUiH+gr5cbURrxj39tE9T3oFFcvoAxqBZfRKlDGh1oG+4777w1MiIrlwnbaIGUcNnZAIYNIx21gAQPHjxSOWvJqOoGhnVQdwyV2TmOhZpqqm8yPmXt4QndzM8r8ivyOcGk6W7M96RZhBZLkZxWJF1VqMNNgFLmLbzpHhqG4GpoZBQe0AXJMKqJ1nc/+gN6AGl+8o//BBiy5kPgUew6pQbG95OupzzBspbtO3QYXS5efkOBRUeur6wMDwd3UapEwCyD4LD79dFR9DxW4t+QwyIYApkBMiWxVjJKbjjFxQ5AbIBD0stEPTs/2wqSAvCAlARQshq8x9fg3rdKmp/DG1++HmXsRI6TaJpn0ja/XRGtB3UGO8zsIBrMaRHP7FEl5O5F/zM+Gu5aU4vG+iYyRWem9oOFfTgkd3ZbaR0CrYoJChhzNsjKml1kct1gY+vMRjTclTD/XtNNMgKlzvuDE4FdlmgAicSQQHXoskVIH+oUtlczFLl8Hm7h4jxbZ2lszSmPQAqozdvViPxf9hyKggp8vs5g3XmNSUDNXlLG8AKYcMEmCU3YPywZyAmHnT0o9gDkFuQWFP7617+GKyQGoZ141AtsoHVYYeHaiGmzOi1ZcwiKkoU6o60hEgBwDp80DCSzhv0SeUAKZ+aUMkE1uuEuDGCYYKl6hT+h1L0mogsZu9Tw9ttvh9Koq4i1Bq0GfpNLw4BTKZjA4bmXCqjCnzYleK7zfj1RWPdcGvOrsJukyVhCUo819+hTLCyYqgQV0z/5+YxJiMeeI7Se8/OCmyNW5QBJ60nqjiggbemSYt7CGtwRM+UtaYEkgSVmAopF7Eui4wKtzndNWAe700jqRDBvk09i0UMNnqtQRiRv01bIuRbTSrc3I+6c6vREdwCGI91wfUGlYcM9SQCVYoiReNnCpAa5GlALGDgDq2lOF/CBRuEN/LPzM4wkKw+xPsKfKeEke1YyTdtPd2dKDcYAFdvWLj/DrkzrznmFZTWtB9Y2X5vy8qix82U+kSLK1FDTiKpOuSYZjhhQVVyb+M98FQDgBAwzznMdVF4wgF8U1inzFt/q/s7Gpsh+8BcWx8RD2CIjG0Ll82G5mmWivfUBQzUOQUzZUQyHeMv5jgCwGoc7TElJCKXmgluXQY57FZzkP6UODgoiLnAyxcmQMGluiAS0mydUA+EBj301CU0j3AsOU70G4UrCp1cwCVrPVctKI7F8PJDsrVdu9BfCtaX78KAel8+jht17SK/N5+mlXfX4hX/EJS3woy2YIYHK0ID5BcXQxXsjpImXl/e9pqpiaW6GoEsRU15caNkqdpFmhb0lzWhlaaGoYjrBt4xFOhEw0tWTbV121BkgTQaoCL2Q/Xpxad551Ro9fvQw4Ikm4WTPnDp+QhQc1m5ubpSfB0hWsc+ePlFWJozE4UpWYkxNRQJyGMRuv3NnL8AAjEkt8s03kdAdmVBw/6GDfQN9BXkFOsgGsjFxdGhY13AgBLY2t3gOVBjgyZULbnf2S4E08AZsC9yes2jFJ9CnPNkffvghpYYT1GD8GxqZmF3aOnX6XNAlWccQ8G2aBTMy2kkpI3LRVrba2On7+vGDhxPTE/uFl2xvCT7pHxySuFNyd2evm+hV1jQ8eto1OTlv+H/6pIcRCbCi4nJ73swQ0Ih6wcYp4RBUELzf1bXY6UVa9UUvmC97TXFfEjqnv+1E8lUeWhsTwqkcFIRbWCIvbAhzi/W1pcnh3uam2hPHjk9NOwCoxIQ5EYc1ofZ4Y2oijrw1EkOIzIyr6+L9Mh53Pa2rrsEVbDgDTEmyCMbiCQCSCbBwXiM6l/OzF4Kgigyo6At+vXAhpdELPjEAK5+wGH6IEosnVOjaKnPBkENwUj40gGmd6a+ncI5LkRt/+tPz1aVFNKIVHj1+2t65r6ikVMq7yprYvokhZd2DpeHBiPs/cujAw8dPcwpK5L/Hsb/59S+OHz1oY9tgX++Bg/vQ9Le/+cQGw5OnznbsO/Sid0DMg/nb7lcbvS96QKg5FwG34sFwwcZc4++/+54VCfaZkPSe7m4B/fUtnWMT02IA4dksiDCyupRnRVGPfAfMdF1m5ZiEiN8UQiCzU4oNMgtRlqTEV0AI60fkT8qc6lFYo8aJqCcnx+xIEywtUGF7FpvyaoZhHffKkE+rSH9pgg2fn3/+OTbwobZcjHIfQrgWPUdllroPuSSoFLUxH/2pjMIKQLKSSIMrWFSmPV5B+43rt5rb2vG5Yox+9V+8cM63iEveBRL4Vl8ANjTY7/nBA/utvizOLf7xn/4xu5Nj69LFy4IVHz/pEoIL/zm52QxTyzIWQHqedX33w49kbrW12gTDJlRJLelbOzUtkRFwvj33nl+9+pmuw3Nedn5psVMjwnQglThE393oIMiRDyfY/wBvmPBZ79OahtL5xSk2E6zG6vqWMZ0qK7asR0W4V0weVyznTxgww8GK3EPKEzq2JbSbYOAf7IppCanLTXjqkmn2V9e++U//6T+NDI+Nj4xDOE8h1BngVteWKIqpqTGTU0HY0MJIkH9VCiwWjOM+bHxH2fuPHhJwkb7cfAPDA46lk5BndHTEghtbMztz78T4lP1uvBWNDeYM+Qbbc+cu3Lx53VCr7wIROjraFxatJg1b5Thz+hTeMIu2wGjWjVv4DGgVigF+hP2gfkV5pb4YQDe31kwAnPbID3bw4CELgApUVtQoLI+Wr9iW+uvgRcmdYZgPhVMmiUaJPOBET/2ewz/2oEgxAM7/8Y9//M4772APmERcvAQkpLG92Fv3PAtcJSBxpAaHY0o1z+k3B6o4V8F6Mo9Az4teomdz9tmzZ2kGbCYXC6g2WJ6SUOUZKYwPO0zVnqc9gcOCgnDojEfiTnGAkMPExbQaxd6Ea8RUualmz94c0xKDFzuA2gO5V83NLcgdSTsiHJ8HIQ7J8YvZeGk5asKUtRqSKTFgOEZly6AbaWC3VDHOtBXo0ZNHR04ccNCHSjCMdSFwWnzAV1Y/yI7kFuC3NggefMVTKHjEDLT72QsZHfp6Bz/8/kfWB7gJaurN8YyQkYvbsl5kedlil2eMDo95HoZmTiSiMKvkfeNe3nDAVuiObClMJri4xkaWFpdfvd42AeBBp2SIDADobZMQgk97QDgw9JoQgQo7GPscFQ1ybjUqkVkZKnrGbskFcyMWjuyBcLUZaQPjnPii4hKnBQnfMHTqqTrpbfuOVCVdBIqEAnecggTfSSjg6uYqk5DbzsUFhnlgmAfWW5YYTOK3xEjIQFdv8/Mc510sbS15ATyxAi0qi5nURHVVjQ95/X/4wx9yUpw+fZaGyWyoCk+/S/d8A1mwprQb33viudrJME2BprF1MrkwsT9d2nDpDyh94gkoCSqNAzjLij5MvzUBSNWEby0Da4gzgMlnJq0VLWilqCTSJ6WVpx+m3yYFYqFQKwrovPo15JR3oMK1h3CtI6wkrfjKU2FY8IJafk2K3EhKqRLFwOmhT/zfE4sOBAyydI6ZoADakM/11ZgL0XpJzXswLuRQf/70uUudPvcESNSNCREI01HEK8WSJl6rWTEAK+aXKGIy0ZzU4jafpCmi3eivIl7IpA/k7W0tI0ODhEA7Dv3WwdrqyvmlGLfwYAABAABJREFUtd7Rqd1i0KVOytjF9Gea+882ETwKMFQQNLop7bTsOiGAApgCmcAQHwYqhrjnWNwsUxZ+sAEG6kwDdIHYMvA9BEBpeQVD06qLMcDSm7zNQlMol1jcTnJoGGbYjYUF/ODxiX1SLvH4ZqTYAOlBp8v6BTA+/iKrCcmx4foOJKShESzmgM1iKNLbdhHIT2KE/CnKLWGDmFJCKZBArqwyKELS0j89Qeu0F7DkQ78u35Jh3/JCQYvPVeIT2hNzpoAJ/iFIMS9Jak75DS404dccJvCSnEQLVBX6U9yRyrPivAjJ9as2N1YsVE2LiNjaaKivLkWFjTW7FOqt3TrgcE/G1sZySXGhb4UMaVfIGQaAKNFxuiDRpzopgvrG5hC33L3mSm5o5IryMiUZ7taL+SQcAYOMYsMMeMI1TAlglXaan+cOEcS1bUziIeMGGB4e50x668o7UAHtfJ/I7Ync/KIJ5d+MMKfcOMwcAHrX0/UEDtGLKcmr5Ct4wPAmI8srC4L1ZmbjJC9LugZCeACwvcIMJkMFh5/Ab7/mw7BtiWN3VkFFdYRFFuTuVVgZQauYrbK8bGCwzyE+lB6iyG7BUc1vd/vmDZsqKHEWB+/U6PjEqdPn7z14nFdU2tc/sLyyZXpmM6jIWmOtY02XlteQDNgobhaBFngPKjAlypoAMD4MfrguLJ49u6fmpkmH8ziBxCvD9Si3tLd6itNM4aRitFTNbS7iLidiz1aaPapzMpRI6/3UxszUBL8+6bCiaDUY7BL2IY2x0PZ6un59a7O1qZmXTlAB3q5Lhl7wgEoSSYO6zhI9U/GHjx+dPXuGNEGIkFb8YDSFPfxsXKd/8Amwwe85Erh/cPcORkIgf6pEZxX2CX2iBiytFdYVhDBSlTfYo4UjYx88fCzWRmrphfkVVoIASyUFQ4Ty2Vg39zt7+uTI2ETv8Mj7H3yIRkOoU1roTInpiXH5XhRgi3ceOJibVyhotay86uKly5YmRwafi2rGAynAJEvmKPjUTctTDkGDKOLDoipDiTLxWfW19Q26xp4m5+glloapcfPWdXASVYJpqgM2Af0V1dUP7j/ynQuchje+zJGRMTgX6cHRXl/XmEY3GZixFknRd0ZPotk2mQiEPcUbhOBk+PEWxtSAAYjD3PSU5ymHAEAxAGBvCEdTqwFQzXfOsieVnPRdTx7/6Z/+KYT7Cnr1FEihZpNMmvDAWiJcCOpVWUWl1BeOvKABvOK0I31CCIBHhAEsza7nGAlNx0biYE6oMGwuLy537Ov4x3/8iQzxf/7nf9E/2M/g6+zsiC0ry4vMcemGZqZnHz95ZBQ/dfqkyXVffy+Dpqa2WsBsz7Nu6ZZppUcPHx+WWEmgXWLogK2mssZgAQNwhUWt7xFzxEIjTQOb1KQOafLrTPbK2mLjCc5sbmpFFLML/WppabX52HzASiDG40c2OAqwgV4ygmmpSsW8MpDRDNrFqCn+zYphkoL1p7VtDGDQj4h5qcCm5Xh5zunQ1/+Cm0Bgj0nE9s56Tvbu9vZWw6MyRYWlj548hVUACycTFNrT/ezAwf3k2by6IEbsvLv377EeRa+xjzeWI+8wU938Z29OBBNan6TrrPbYaqK/s3Ps7EZ9xEh8f0yWjz76COmHh0b9ghPkcHXixCnLO7gOh7B6qEQ8Y27oaNDHT+7LOXbo0GHbsm/cuDM8JBNaHUL7SuotcXTILXcWrGK5mekFFUIOWqMCzsG64NG6Au6DzQoKcKB74wKdDHtohP8TCHGdIxobiJvahIrhIuXJGopwq8tmCxWCUrAlODEwCw+qSZC+AN50wlzRvTQPRGNiKjzf9tRql/VPMIW/gq2lqZm6TuGUIU0ZFgWremxqpNABKHnRhFV6id3ABlFW8olAjDthgUSQhbYi/4ENM5bloT4WeYsYr1KlYSQZL3xVLQdFba21CF/19/VNz9rhk+HYUJ3FRT4Euc2sgLeuC4ZUXtz4yuqEOkV4iYCXSu7//v/4a86xhtaK9rbOx0+fkF8yTp+YksiCaNym3j2xqqAjOMfoyTxETNC6hxs2gicxVdh5xXWY8HaoVrBBF84BcPob8CfHMSElTtBTtKY3wCxcSWHbOr3SR5HzDgb1dmFunsUlN4gwp+3Y+74iKsz4nldUbAWAvGAGn+uv1WP1K4/6avbQiA8MXFTTUCNEPCdvL9ITfK8U4MzSokGQpqKiwZMMgmHDqHNkqE/OKNRRMwKlc0WFAcBg8ydsUD48TcIf6uprQ//qsLqQUBV+IchDF5HTE9pHqloN66FL2EwKhye++v1l5FMeITUMa+pRWEl1ugFl/Bn5JcLVDWIAacjobuohzt5zbaWohw71qNCv+j10qcGlQiX9qbAblTskSm2ea9EnWkknADoPwnAkp5lkQh/FUrsZgV+vfBufx86kYBTwqFYX4F3laS9ofBu48YGZAEgwgVfEz+UVVKpBSbVRpqpCAL3XIsjTGb8CPvRLLbrRhbRTCqcdtNSh3SjCIk66zL8ODNIY2y34QPZm0UTMPpwq7Ke1rZFTRkHKFOZiYpu4b8XOol72rle7i3Je5+2J3IWCtUwu7eHODGy/FOYSWVJAF5OWqfERzeH7DOa8BK3osuu1bB9Cn7fWtx2zsjQ/wyFKrgQNG2UFFvnQrCOhQ7gwC4pyPeH0hEuC5LlN4DAgaCo4sqxYfxXQCoK6h7qc3BwJFeATmVBYYp30Oba3+UDM30tZD5Ity7GGFjMX1jbegI/oJjy7oMuVMok/tUc8NITrEF0xfwJGzSblND4bWmHGgcKKuVSrQkShBbC45JgphJ77HJzqTHkYcV2qcimN7pRJyAYnx+tXhpxwLcssK3l8SYnVmLHJSR2TuHeXqb+V7vWtpYWViakZCAFV5u5s7jB7mGvrGhxUCQnAwBHYyjkhYlOQ9PIbb2hrqH+AJ6mlscnprT3ZWbz+YVxurDOjNSc6RU9x4E9/+tO62kqBDbxWoCZkxUUc0MXGEh1BNeHRLDmrqyDXo2+//Vbo/Neff/HGxcsFBZZSI9OFcZnIGFFghnGsdSzqSBqTEFnnC4rKaCtKYGhQvH7s8FEPdyOnlIbsd5THU4DN119dM7ocPHKkvqHFroOVhdnSwsYD+9tbWxrUYyTr73vGOOOKNmJR0LGnYefV6PhkWZV05jMbO69Cm2ZFVoD+wREn3Emv4TcCereWJVkyGREtlzNvgFzGYJpGIxJNytAOZSUygsyKjHId9wTV1KfXpYKL7LdbNTVwglUcDm0Ak8eHL9yiBO/+s+dPiwoKsUdZacmBfW0FueWtzQ3DQ0Nc+NyKTGFjCY/s1998ub7RpiTuxdKWdJj4+w/GQD4/Mmx45s+j/RlG8pFhEGYuLlUYnGn+Teg14n722WcNzU3MEdoDJFjUhyDEqPpitFaG9jeKs1yFaaELZgZeIjJhExA9dfpEB2kkLbIPgMSc1U1OVk4+ikHKlIEhKYAmz14473lDexPK9sUZtOvWN8SzapeBJT+VVPq2cRl0HXzL/kiH0suXL7Nk5bhxqKOArrbTLTbISp4IyfJNAIk4hEQnEclYEQmoLL1AGn/iKwIDZhDqI0NKPBWEgJYtahxiZOuIeRcaaVTfueNIANRhMJV4a4XTQMV5+N577wUzr66a8xi9XPriT2W0m045eEA9V49GIdbCAsHHut5qlwGBMdzzZfoQ9hRGHcyJpZliuuM5I9ifwFOtgB9g0KKMKhHebFYUZH7pEQNObSRLtYYGAVo+8cTeIe4SU536mliZ0XFY7et9jvNVjl7aBXnkmE4OB8CoaqO6KysqnnR1CQ5xMNaDRw+Vp2eE86SKjv9GCAX7pbNjHzi/vRYbWJWBTAdBQAKSlZVG2I9Gz509z78IVM8phNu37zIoocKHaoN2OCHg/jSsqEcllmvgTWflKLYRjyee2WoxobCwyAYSOxCsLsp5nyyS5CmPQOxdkGMA2EY+aNQXbKkJox8ewwnGo1j4jeXf2K+p4ww4pxm0tHXcuHEL05YVx95fu9JamtuELjiaVySdT0ZHBgw1FJrhBkLgkKHjLJGd1xmtPm7vlO7TrmjVJnsMIv9YQ0O9OWdG6a6HfY8d48YrcerUQVH1QHIGOQixGWajDxkj+NP0npSBzZrqjet3YEOnSFmyITsCq65du4amuC5hm0U9RT48LKCBZAlJGhsbLSutMEuhXZ3Nx+JX2PYzgo+O+/eL1a5E5VhHnV2gG6EaGNAFM/hQW7hItYBHEcQij7gOsVDWhWFgGFFu3ryNozwPtZOcUYNF4URztXvrOHTsbJFhmQrioykqOq4JiyezjpfeI9LD4PVK6DuqsSXgfP/BQ/CmZmC4qHH+8pCLlVjMbG1t5+wY7BtkvN68efPgkYOlFUW3r1+bmood5ACW5hNsFrVNxTGz0RxU/M2gBTwkv9wwgEf+bpHJJnx42/Cnfn5I3bcCoLP72jsMiFJW8fYW5IdjNOUfDhp8Ozk2Tqs4k0XNjCIihqvhxydYSAF00fSZM/vwkgJ0C3Wkg+BHI8HizHuFTQBcn33yFW9eCHJigYCQ1MOAVx4iCg5xAxVg0CKLw1yaveTeJ6gP29xZdhb61lmBofGSIVIl+Mc6WGxmlCzHmfFx6UJMeFJtzBS2DZMm5Jdxyo9gnq1XFqtnNUrD64juGOX9yRNKvoBhIlddUQnJmi4oKRBPLZG6SVF+QWSvYZrPysdo5cE2m/IKk4eXGVnWmSXdt/VtBcNlEdWDhm1A4hbQAiadrYGNjOiFpq0og9OUOLOjIQwaiEv6E1ErKK3t2F2cLAjQV3BhQAWr/pFPhVXtQjncBvt+XfDk8xS/Xikcwp9mqU2ixoXkKpB+mOaxEZ1lss7uSR4mBr2M8MnI4VcflI9OJZsKPNG0J0HmxBB0LzQlaStsbnACgz2svDIA5g/3CzBldMLDJBeRv343n3GTlucywQdUNmLYQ0wF6BdU1NU0UA0qVxI80Idp/OmhP3XWL+4EG7UCAPNhdKXv4BMYwTzJhgFllEzwJB43LvVbWUGDQEtmpFJNEpFtxRlpUkbkCT7JF4tJJ4qRbWgUl+ZUpkxWg5gyi8I2ZgEv9vNZ9ErmWmhkhyvgTV2tAGA7XIJ9vE6s2FgeSdsV1IML/Wm8BpKHQDXfNhchPPAguRWAGV0UjeNUdEe0pT4akzSqFpgHP5G2cuKeQlHSLAj2LK55LrG9a3YhVk6NH1qBK+cECJ9wj7Wwj6mHbzVtyACMfbfg9MRbZwC7MFpBZED/n5FmYEhxqHWf+BY8yBrYi0yCkRCALUiWEIgUoVdgKWFLsCnpQzX7UFtmNRYBbDpUQK/1AgXVo2afI5za/OlD7XpFPpUBgOf+dE4j1MknJg6qualxmZwtLVn25F1Os8FgSXvMjQraTQOlksPm8sSWyLCuqjI5uQtyKQsgGUsGhgYPHwo7RlgDzxnHkkH0wb37SK/mxflZrjvLDoDv6n7ql/Ehjgx4JvcERVy+OhsaWmjMF8/7fML0REcDAGvG4rIIWhthP/jwO7/8+a8siDM3iXN5aamemj3RpEuLC0qio1mx5DTSvwgzFa1Bg1N3qqXotStKgSkGk0Ym3kFN0L/ABt7oxLgCMA9v1A0YoAiqjU9UmyFzcHjIOQyLKwtWimXuF2Le9bTH8Pa8r99mEfvirt+6XVVd9+x5b31jq9Vpa4QUTGK2raIb/kFrLQLGBMA4mo6UEijBQ2jJJLuF1tFUKBqnD+4Fkt2EqIa9zfdNorAYkok6633+oqW50QjN70+VDw++OHf25NPHbKNCES+mXs7yZdNgZlyBstzSxjAI57Tbt/8gYHglN1bXoILmRWhDF1bnmDSiHOjcR31d/SIOV7Yxw+oZB4EQIEMpjjLMKEMdW2XGVBjVQzhkj+I0DAmN/PGahka90FMjn0+04lfMrt+LFy+qHP5ZqIJwLBcTH1IDhuXVDbsOLl1+mzUj5T/e+OqLz+Ftf+e+4cF+sjK/Ylt0HKYtwKi9o7nvWY9dH29djimo6YdGnTvb1Nwm9rSppYOWP3Lo0OTE4MMHd0GLJYAB2w7XU7PCesGPRXOaf9IGP/6Hf/jgOx8WlJSb8bKhE6to/717d3CCbh48tB+crKVU3HQBTthADnpDXBzInMWWJhJWWkix9R/PTVndm30pTGRUBVcYDPkYN1CEKGBDekhDJjUADCpYwACGQNSkHLz1iZIMIG35EHiKKQP/OuVDn5hlc4XQKowhPdJNmPEt+IGhUzDw5ZdfMqD9iViWu0W2lFdV87yoH9EMFpSFPlJKJg83vv3GEx1x4X/m79T0rBUk0dh3H9y3IwIdAQxyNy4d0RY9KHKZYjp0+HBdY4xHeEPTSkICsPUaYKQMC3miIcBbV8GT1pM90VO/+uVDFhWRFvtnngBIgqwVEHpF5xw4sp+ZSxV4AjP4TRnwMNkJOLuf3QwD8A8M+gcYagaJfmndDUh8CyFKYgbPSV8qg+UVNjTvbe3opDog3J4rkJtcGRlkBaDlSotNsFe7up6YeJtg65F1yPbO/X6Rvryswko9GlG6GGNlfZWGOXHymLBhMFdVVdbW1vV1D/b0PNu37wBoBU3pmht8gu3Bxh5gBtDfVhsY7jTG1c++UgYO9QiqaWmiTT9jFfwJV14hBHnUqXv3b1H89lszf4V/cJoZO+IoqOJSuer1yN5KLE2bOaoPei3UNDa2QoJ6tJXiGcaIvGoJLL6iFaERhjE8wYFbDVnsQkFPILmvdwAwtsmCB26Tjiy7V8/hI0cePH5iOCZ6BJYQjYzKATYsOMpavd20ViQgH7MZkYkJrtYXwPjFrqigNtYVFD26/ygxrAzHDIYMeOjufuZIsmVxWZVlTY0tmMd6tTkh26O1vY0jht1Pu9JvPF/oa8nFHEOqEg3z2vF22wZgZ55lWb1wXKPWvdJoS2MLYGxr7hvo3X9ov5kMLRp+h2RXKO5FiLmZWXhQOaGzYgBdPqEwHYbjMOAy0Qc52deuXXcSQUt7uzWcq198oWaOH5H2TnRR3hIsha9ruAiudFkrYIAK4oAZUATreutDBTy0/VLCcB3xZypKeu0ttEN4eu8TvA1mAMOSMF9BrWYQMq+jL/e2Voz4QDXMcZdHFpb12NBs7YFFOzo1Qd55eUAIPJWTff2V5c8T7boXj64qNcjDlluwt7q2iunJz70wP2/rqgmzvR6iM6REs07CT89SZ0SbQvCjmvs11NVyB4AZxlAf8nlSoNEisC4AT+vkmo2P4pktNflpV73Qcx/Ai97yMOuqERdM6gKWXxeLQb3p5U8d8JlfDaAWuOHRpW9JhdtkTg0q8goGPE+BsB4lyMjyEFtRbmllTD1UW1gc/mNg+CRp8H82nf6ZYs2vwr4KA/f/lDA0II6dwhHfDwAxcH4JgD7SGvplBSApH5skXCBnY6nZagj4KUEdYQpTkZpAaafcpjB7iyN9khRYIZ++9aEyKqTImNReHTiw35/A0GKKE2XU4ErhhxwgoQp6x6IEWd1Ng8ViUMK3bPew1A8d3A8MHseV1UVcazorYIt1tTs7VweoHgJGyPlTuWoEaPqc2IuBEwcnMi+i22AhYxdfNZekW+qVGqVVU87TBF0DfXpBR+NmKxDQeezwYSa2pSr8x15nI1JwOm7LAZnRNf3iwoJMXn+KG0r1CLZ1Vj0aogsYSXjUK/rat9I/m+T51hw0HQ/SkvQau12+fiOlcVeD0GJGkcAf4oRr6AT2n97BvFYwRopPlaOIP8GvIwoAjBWohpqaKo5Sz2lkBYCHpX3u8tZvsE0y40WB/MIiSlwxKl6LtIPLt3hGQ+oENPxrSysa1ZARSD0mURiNfuGYxwMWGG0S8mFs+00CrkxvTMcRWyAB5CTxD7tsKzaRZIAyyquqy2trqljedDEje2Y6vDicYZy+vId4o7Gu0fY4AFsQB4mYgRSY/oE+RASVEdo8CjvhegILgfYG7d9/sKy+/tGN23gysc3MajYMQjKUV9XUTs0sWKmkRPTXxIOdarMU5rTUwKdl1kZwwW9gUC0yWfkFvOBa/k4PjW3GANcvf/nLt99+V4sGMGOzjjsRk4Otra1ZjLV4d8zD9QVsmbnYqb61JKJOcUXAJl9atwPoxfN+uWJ0XGFro4sOClpdl3ZcmmCm5+DwqCgIK5AOmIcHIzhFSZWjqdGO/qLIcBHqYCRtlQhqzMxEwVTc+E1FZeg7nZC7186BbfpagLHkGJirtDgGJLM485z21lbUnxKSUV7cUF9j+LF3At7Y21cuX2KYIjS640xmjVArbdmrammZCmGTMfh0wWzBSPz82TO+VfcEwcHsMQtaXjDYw4mYXfHHwsDoBxhAILXBNkZFWf3yHPw47Z133jEQQm9DbY0ymrblQ6POGdB3vfNQeV374IMPEg5pZ+VDxV/8+Z/fivX9WbtJPvzuR+aTgyJ5WRjVdaC6d+fWn/7oTwQ1yZFiK6ecF72DIza4G+MdIbwwP8sHd+70GRHMoFLeZmwnByUnrFlcKpXpsiAvjAs2BOMSGKxM/jzAI7FB8fNPP2NIURR4hnCurK5Z4bFqQ3zpCvaN5yxO9MIqpIltqQZEVAOu8Ipn86tvvmEPETEzHB03S9cvGUIJKf0MV3fv3GfuUFl0CzT+wR/8gaZhA8KBBIG+ok9SpUE2fc58x6X0gNRimFBz7FoFKAqcifRq8JWSFLvVA+VxEZH59//ufwGkOYMNcwkY9b5VnrZPjUKQpEqGPHKvpkdtCHVTjGhriy2g77rGZuXnJkEoqAY5kezVphqBmnRzQXeMzXakiNUxn9GoLCK6A1HBRQuLly6/YSh1fDjtBIfwTO5QH7HMhG1TgUwliSdWgRk2KB0CBgXIC6UBS5CAzQCgjL4rjJd0VuuUgKMJDQp6CpNagR9yKh5btVYPQGXKlIqDOhFO5SBRA4eCanEsPKR5XTSHIjDJWYfVg9zmo/XNC8srFeVxbLO5rDLQAtRIiePc7bCThIOuIweZFXSKaswXK2btHZ321PpT+Ar2q62vt4cAVNxEpeUl5uqkVQB6WZEclCLUIwuZTcDIpF1SCUKbDQX9A17MpMHuypUrCDE6NH7o0BECwnjBUb19L8zrCDtuZN5hEmIICRjSkCdUSYhDR2cb9wqQXrzo4xu2/kldm6ZiJ0TXZSxKHLQIRTL1WcqAJcgEdXBgYssinBtlwKP7EKtFZYhPEkxYL44fTVFBXFNirnF1RSZc5ACSqEgU3H/gwP1Hj3v7+v71v/7XeqROCs3FY9DY2ISIiCVMiFGAuGDTom+B51tPcB14uMFRjY/ZiMOmNwm8dOENUYvskuoa6qsrTRjt3D2cdv7iGxZsR8diS4zQTevJopJE/KiBoW+waqlrMKTbbGYFgKUbtn8SJFNVHWlbrf3CeX1NvXYn48ToXUJhJRsFlZdT4xOkDxIMiJEJJ9klpVM84kBFC9+WlJeZnRq1JZE4ePhIz7Nn/IW6xjz1VsCy8vyJhoM0rQhyqBmPwSTlgwTKQrWtSpgfr1KhnAgYSY+ML1ubr23b0FNohCUUVK1PAOzGn2rzpwIu4T32PsfxM4l5zCQTGKGkMpjBPpbSwlip5qbFzLz1JGVsepIDKNRj4nbHn3ZaIjS/HuWmsJ4KAdIE9cJ/V1xScOzkMWfOCGRVUlbGCOvYfinnlU5KTmIHnRFNtLeULZCdRoREo2HxBqjaFnoBeMyjRxSsrqVMqAumLLZExKKkHZGKuhSCrLSTZiNMpXQa4EkEmSQhQ6pQJlCQ+J7JGD2Ly2FfDcq4Vxq+wJF8GBt87XZNL8/1U2QSlzZGZPDrfGFhKcTtvNpOoIiJh8KaUJUbLbrSqlKqeO6ySRQkFIfyv4dNMdV6Ho0ml3t6za1i6Yd+kw+NprGcrQvReqJPAQAe6hX3OFgTlyigvLeaoNHSP8HjCen1yhOi6zIB9VxDHvpcE6DVKI2mjMuf6aUYVJsARJRYcnmCM3YXBAlswI+5gW0pDh/NkuB8y1bRENStJTYZCRNtj0pgivUnx4O/fskiZWmKveY+RykzMNm8nFK+NLvsBLHaqtKNlcVNvJrNIxvo2psV3Pxyd0ZpUW5TfexscwkgA3wZzi2WUKy8vbXBruRA4csNCZNYdZo2x+ZKSULnI2dC2t+lxVdz05HdX+8yX74qL8wtKS83YcWUTr4AOfGR4sthuNCbtzeSiBMeu1aj87xbG+uyGuXl8mBFJi+75m2LUBXvAhuLLkNQvKR+F3CgyG/63K/a9Ai3uEcR9wYYn4RIJOUJJFFHEXWqBwxq8EvdyGSrC54rr5hvMTPMYIC0FTdq05wCqbyw/n3IHLSUxlhUIdeL6DffKgYYY0wka+OnMe18lckZYunCKgrBixxPW+tGGNv1iovyVpeXHBfQ3tbc2dZ46fx5J1YabEZHLU8bWkKRgcQaDt/q7PQUOKcnJ8z7uavZZ6wKYxUZ1hAsqVw2QguNOV1dOnL0+BEDzG9+85t33n1LYOKFS28ItX9le3nWnl/87Of0qbXswcH+SLmRrIDrtQBqHiw4hGlRyzpy9+oDepzRv//QIeYFJUK126pbXVsvPqe0vPKrb741S1xamW1qbet++vDJ44eU3UvnAxhMNrdhBlMZtKxFPXUIWuS9lXZG6qpdD588E8pplbLp1Z7HXS8src1YLp6d69x34HnfaE19xdSchEivt+VrF3dXVIJ2nAQSrXB1QDKuAaQb9IUWWAK2BRa6z0M9Cm7OY/ytc9NY2a+uqcJvAu7W1pd7umaFwYyNDs7NzjnnywEO4v5hMnv3ifGxEbyO3AitfnkwDf+MDAQV8kDk1GN0M1iaNuiUhZeF5SWpjQyrtC6zGPtBVGtrM26hyv1y0mMMXGRQFLXV2tEOPLgFNrMM45k8mCEI0OISBrXPlce6tEE6OHny7rvv6iD8swshBM4hhBGD9IYutgvbjuPw3v2HTPa2ts6hxM/93/7bf7Py/Cd/8if2V2AP7dJsUxNj3A+22QnJaGxutTANtmfPus1Od15udj9/xo1klDUYV+fkGJvlEkXK9957z2yk6+nD/Qf2QXIKHv2mgJrZWB7qDsWe0kKa4dw8B9ZMS7jc1hoh3fApVYZJry5b4TTPMb/nIJPPimzCP8JRW4cO7LMnlcE9n6xS2gjInOLZVLmU0F9+fhVvK0MPM76JkuOrBNSpU+8IbElpKVdIBH++sn89luxLy2KVW6QcnIuo1i/FdBkyDQKmc2YmnLIYli4lRwYmzilniyEuL2x3d7amrYxpl8sWkGJ+qJp0AmD6IZcuJOiOY0pNtGCPCk5VAS51WBt6IaVZph5BzsLCPIIqMTUz86iru7vnuW8J4/jEMB8Nc4ejZGxk3NBmhxsRFjjBtN1c2ZibmS8sKQanOQU84wcwwIMemSbdv//w2bMXiVxEuL86Oexv3b3DlEQax5ZDwqGjRzBYqiF15OpXX5rAx1zIaSQjwyL0DJiYnwuLfmPUkcrg8HmnIxmWYo2REU/n0+eGSp5yKw043A0KwgnnC65e34B2WQHiCDyNqpMmFrkHVEa8JZk/+N6/cl7Dg+2XR4/U2X8JP3iDLmIPWQVADpUzR8rkA1ha29p+JQmz1DFSBjFSRAP++ref/Of//J+5DHRwYKDfdisLCL5Fu4kRxwaHL0/vwMMLfvfe7abmBmlDcQLwTMAEEKTmMmf5xMR0dU3DDI/VMp1WZ9t6dk5k8rh3/74hWwi7gbihqV6FqF/vgLNlJ0ZEmByiy5X8Z3/252ZZrH1k1U1I0IoT/JCGJe0Qtw/f+wMUQayi/LzxkWEYwBjMUKxYW1VZX1M9UFpiDoC7Uo766urn7tHo1vVvme+oA2MDy4v0A57k23bUd1lJUUNtHY7i/LaPvnPfPiMFbWAW19rcRApYOhJPBydkZ4ly4tlBcS5DMstCGEkOk6E0uBQdBHL54gU8JujRGPjgwcOZ6amRIfuM5YNubGutt0ZaXVFuV/O2wX9j8/5dpy+XPevpKuWi4hYcGSFE0uUhukBaC6FzE1Mx5EmeYWwrlIOgtMBquESl6+soUlFWCT9GZSYvMDCSDdyggj2ktLfIAm9URWnbP1RZFVkZZRzC8TsvrUayxp/1vuCtMMYy4vmkjHwcIaTAHMmH3Drqz82JYd1KL7P2d0nPKmJPkQIcamiEKxgwqXfYcyFLh48cvPzmJVs7VmQPSkIYiA8i4vOw0ZMsIOyV0NuyeidhCOFpzZHhL5v2s8U57K04+Hn2ZQbzIxJLhMi3REBXRUkpcosELa+qLK+pYvHgGZ1SD6KTTQJo5qY8hFA11lQNOsRKssTSsoII3I59BOucrusry/Zj6KBcL+wphpNJD0uQgtnNuVVgu10E/6jZ5+BXPwSaOvoVBQtS7ZqNGz6IudXizOMHYmprAIUd9pDVVd3gsLGIAGj6UXUmAIG76OImSWC1ulStAWV8BenUNzSp3X0i82HXgQPT/B4UKwAKJzVQ0yYiuzGNXXlCtgxLRnkswurFDa60G564SS8wuNK3nmvdJQsQwNKZCQxqPXFOhygqbHjwLcvGPeBhgZUMcpevohumBRnRRFOzNCnFwEN4is9zDWnFWRCElgBjBZ8wzlj5eAKFgq0TJwftRVloRdfwhhtEjb4n6Na0dg3PPv99d7yNtndlTE5PUEZMdU8oelRJNqMUbG04Cls2+lUnIpBt4UCKiaDo6xuQxQmc4s5hW/w64AGgRyw5DVmJch4uFiH89qqWFObLpAs8w4Bprlb0C2kQJQWbXsNfNA7YPGmMeOINFpveQa8UYyI0AIpHJ6ankFswnwFbPpNE4W6JfASzD3mqlef2TmmEk4XjSIvBRrKdJOLjxyas74NcAb8AgGrAxLeJcMIeAuqCCTio9IuHuLColHhhLchEXDTyC1QY9lANeqQ2ELpBSp+bQqgK/HjACAQ8tdGkAFYJJklbhLGI2PPR67D41YxAyqvKJ2qml9NvgUrjew5aWXq80gUYY5sS18i6KIdrwgyWGBRzAYbYYkX6mv+PeBNbXi4nm1kkrauvFh8rE+LG+rLtaEIoDFG4jj1EaGpr6nqfPz9y7Ji+gBZIALYjHMAcwxgPqH4ND5PTMwyXy1feEiyuQXakMjbM6QiDDKPyluFbjgRwQhpu6Wg/MMFznJzuSTnybpqoSNrpk7t373S0txJkfINdwwm0a8/9h09LS8tg2NIEnHOcMM5YG5BvpYKyNQkxDACVl4Xb+3n3g7WVyClunCaX9rAIFLWMA8+ijy5dunz9xk2q1eTAwLY3106+pVt377W1xh7iZJtv3czcoq+M5WNxNHIubweQbEk3SuEueW650mEbe0BvKvLuzdYJaQEdWFCQOibBw1hhEsGMgb+o0CrNjs3ZnC+D/c+fP+uurqpsbWo8eeIYaFubI7Xi44eP7Lz0oQkoEwS3OE4NfmwxtCBAD8gpYeARyaktccZWbURLSx9oGRezMWIwhvwP2Eb0CLTYFYd2TiZiONpYLJ5K3Kny0IgixgashVcBTHZMIQBvbPAJ7uJw/Zu/+Rv5OkmHV4qxMvXFW3zoQ0gAEnggn9Pac8MquauqrXnxvJfihVUmssVjJaV8be9o7X705OTxo+ah0OVwOuFY0/NLV956i6f5008/NuUzzSTjzDU4Zxl/+umnEmgcOOCU05yG+npQ/eY3v7BPH8IBzFKhmnieCBe7Ckj8dl6lgumMWPlJeC6sRmBC7nxowbdUKAMIqJgKp+kUHvaEBaw7IuDxnqCaMFksEW9vW3mg6JSHMaEd8KO/KqEHvJWcxFxF/WJaoEVVWvEKYIrBiXkyFPGyw62HQ/12d5S4IcXwj9bJMLetBrKjPJhS3BombeoQj863TYFoi1b0lTJKUghEhopAETtrvdUEZ82B/Uda2tt6nz1XGAA809KJEkNKCRFlgocoqaX018yH/rp285YQF/wDDJKu9aqycsDwRKthX2enyr1FfRiQ8Q7z8CDqi8KYHxj4FjcCBslU6x4rsiT0GmPT29iYkMKhex96SEGBDVMoSS3or7fQ69eJ8p5gGzWw7Wg2KDJ5M8egx+gcNCotC3vLcqsyn3zyGQxQIzDDMJCtiJz6EJbAMzM9hxzyOGmRj1w49Nz86skTp4xEhqTwX9TEZne0pvnxMKPZGgjn+sNH9224z0uyVHP2Ow9LTAnALHdTO/CP96zPMEYMi1tbm0+7HlscA0NWZjKxTHKkwglO+Kd/+qe3335boJFoWzNkypM4o5dz+oTjybKLveHKGixEybOkgGoBPzExru8CfuDKgKlfGIw77Cc/+bEJPi5KOYrtJfjefgP0EpWuL7hCp3TQdK65oenWzTvISnUjJb6NQWTRuv0MiYBL/KwwOrrBQtSg5tDaLIi46bLJnoeaUz/b1OcYXtMITdZ7BwffvPL240cPYj9O4lmL6cTxIxJ58+Gp3xD89bVrTmlgsiPKTHIKEMzYGUxByRyMtWwor6qo/NGPfmhV0xwD5FiCKIkQwQB2BQiJtFplCnHn/oMjh499/OlnF9+4bE1gcHiEAMZO/0Yb/UvCX0nviGVgFy0tSngvwRAHBOrLkgNyh2Bq2s4y3bECht94o3RHX6g7EmfMQjJaFEIQgtsLafSItsFIvMT0MGRKmS2mwDHzHKHcX0xqKDXiYsV0zNWWaOa0Hks6JIVMqVmd1Au+VRsuhdioLcnTCA+CZF6/Etv8u4gDhPAQe2kdwtVGucEMTlCnz6mFiNFYi4U+IUnMDz1Kg6U3HV9TWXnxwgVL1sYsCOS8OHzsqLibxpZm8kX5qB82OI/UrIDKwePXtAGcKpe0IDODHznC0b3CD+oHrTJnzpxzgz2oMnyL8wEJACgXIqXC8bFJrzThW4YSySUgbEtCx20EYBjTeuYHlw/LwmiRXV0umoEKcFkN0ZhsBwqFPRna9iUVoCizVb2I+j8+CXtUY7jNJ5CrSV9BNBQ4awnKtIc20uyCTGG1CQw1wCSZ0R2wbLDIA4yvcvNjeFO5TqrHh359ixJRQ+LUT+t3DwCZW5UnsapNocIB6be0m4VmTI/8CajhJBZtz04CANhgDe7ExuD45NTnOC6AWmS4kkmFYdwuJjADD8kBw0WnQgCgh89pYW2hlgL+pBbZn+6VAS1s4B71gC0149x44rm3CWA5MoHKZsBo0yKE+NYsGbdJr4b8ERWXHZsZrCZzOjqaYGN9m1zrqWPA8XQETiSHIgOyob5WLmSJCmzkjZBoM4A9mZWlBdVVERCmOe26EFc3YYWOA7PxA+u4EO7s2TOsUrhSm04xU7hheNHwohr4P3xub64kvk6tIgZff30N7paWdFzmuNf8XsYJ3nx9ycsvvHv3XkNTy8zsonTpT7q7eaZN31SFlBCYeCBiZuVPvYZbTeAMcDIcwaNM+OizYdKaZtCRzMBbeq/vPkmLwTAUJWSy7MWrWgbbcOg5LaZFD5E7JSgu1UGtq1/kMGa01umVhxhVPYHbvXv1jo52Ay0A89CvardfbYEWJ2oao8GSRT/1Q6Y9o3YxgjDdei5AiIwtL84zIyzwjYwOOqulsbG2srT0wEGL7c2Ot7Hx17TtmDPts/dw2rW1tEjmw1AYHhzifAKhPqYwXLv2recqxLG0pOf2R/KyHz9++tPPPmP90JjS+QHDFAW0qZvzk08+YRM4DAi0wD597rwY5Xy7A5NoYKMsm5W/QV4LBfbt6xQEkqyNljBT9EKA8sDQ+Okz52DG8onhELEwOW0DjWoWYwq9PkEa6OL72fVaNr1IEi8h4M7L1zXOqe15fvP2HZlkOriq9h3gRxoaHuU0kkuHv39oeDxCe4VtxC72TH4hmdSdE9zW2i6xrAzTxAPmbW5GcdGUOxvrXNeahmf6DjxQoWvsdcwpBQSkQZEBhkEjBpfcoCyXz9yMJey1JMNP1ZLseHt2HT64/6SkkJsbBhjWsPJUFjRSDv19L1hswSqvt+QudjIozwEWEq5GJ8hNrgw7nwf9yeOeDz/6bt/zF4y8s2dPQ45RwuDNpqISZQGCCht4WDzpBMAKmGMNDQC6oH5jMBZl9LjAT/ngNwDjQ1WxCWwhUeAv//Iv/eoysvqWGYEimEHkALNAMV/5HAsJoxodGWOgyPgkMhAOJeTQEHOHrDXXOQo0Qxqg0uIiq1E8H0OjYydOnxKdaoHR9iGbvwmOauFchXBiOvq//+//X+4DEeo//9UvGZAS56UDJ7ufyWJSCxIkIAvXr8Vh0iQUc8qGZDY2PjlpDhADwcICRz7NkAwuS7qPbbRF0IyztCIrDdXGJ8fcIyLKQpoCYrK1gqY+uXnjNnPhSHrWdbJvtayyjN0AHk3gIk2DGTCUv0/Ug1JQ5612qcryknJgeAXVkK9OBMVCXmnRc/C4omTkXZ2vq2VVR/QXmVIAk8O8vkC4/ipPcFSCNCp0nnd+XnG/xYqyEhpGScVMirhydOHv/u7v2lqazXMMQFaKLp6/YEVSGMGpM+eEDHnIAg47e2kZiS1zYXiTLhiwcVn9hjlB1ch08MhhvWN0WjICPDLpOP7BxiQUPDiHOQUPbqBC95UHPCHFV7pmWUNJVIZqaGETmNUr/+jhEyamThnmjMDwz0egm0wQpIFnCNHi9MyUXxyudybY7HXOC2qKl6q75ykUMcWwnBZHR8f2dR4QTQ4Mzt262sbmln03b9zinkAF63U4GfKFDFkmAgm188UXX0C1DUuO5Kypr9EFphUnyxFLdmNjp06esaRJjwg3F2mNGylgo7w5la/A0P34OWUOJBNLGwlSIqYscf/+vbQM0vzLv/yLpt9//wNb26KJJGUCs5sDFYG6up8YbcvKYniyVgNUgyDlYBpggYLHSBLMoaFBz6kLCCcsNiVrxeKASnQW41kfsBZXXhIr5L5NtTci4hMMBkvE3GQGJ6AdnDMwvvOd75ivKozcIFc5fc45qE5AKmz+g2RoAXi9sB7S2NpeU1v/s5/+s/QzBXm5S5E6SRaHTa6KN9+6glHPX7q8vrF55959q/Fe2UnGiY2UeAwVBAuoTa8FwfBZMBAtHWAMAPiWUuRPRG6TfBvcRZDevnMPkmVjc3yB0M1bd26XV1SxmIXmgzNkoaLaBDTXoXuHD1kO/gWNURSq2PIAfl6Ux5DoSWdeFtlCkV5H8BL3P1TrrBFWkh+2NdmkRT2ESYiiYbTL7X3n7q0//MM/5LPjguzqeS7NKB8jRSQ0SCtWz2K9IT+muPM0/uR4ZXWNe63AOYa0oAq92AwABIfeIBHkFKr9aRs6E4WAaBHVIMErAxzxgSOC4AkIQQJUyDQmpseo08AyzjG6el48VxXNhnk62yKHqA0A46PDPnFaHDBm5qaJgY7rEWWod8MDgxSIE1qAp35M5VBLtNa0fLIb60uyL5AmnEP1IYobXdApGgAzYBtf+RZ4nfs7PKmsdCIOZbgL9kCrvKFWE3rKhletMjrouUoy374Q69H+IAOx31f0VoRvRYA420gJZjYLSQMUoBHXZue0Cq88pF4JlXsMirO9AqvaNYbF3TvOM61fMSFAOpz+ubRMeouS9EIOThVCx9yJEJ04gSsJovh9SU2AzeVD1XqeXu6VtE6qZp4kwKRdiomG0JE4FWuFe8BztERdIu35jmMmpSNIjk5QD6ZhLyos2lz9SqpTX1UFJL+WfTTkHtK9ojcRD1rJpy6jYiAx2eaokgQnsSLhUlhDnrgUQPsUpFRf647Wwze8JybZ/AeeyHMcH+7QL823b99MJwA2AQODT5zCjaWOncyyknJbV1Vuqx9K0xKWqgwzGMWBO7XVVdZxnAIm7WPWntf72hscqYjvCScCaTRFFOSDhzSiERRgO452ZqkFpphn5xWgNTmsqqkGMD8W/SWsn5UTMYXJzip0YeS1deyzaZ79ZNnx3p3bstUkY8OmrUuW1vjve573ZufkLwgHXlvnM+ChhD2kUQmcgAqiSBc9iAWNdhxFAINYqMBfjEj7n5RJn3iFTCmnkUxyhTRKQrJfPh5PyCE5ceOhLmhImZR5wEzqdFltynAwx+rY7vBo6qZLQ/Djohrcq8S9Rt2rx68zT1TL3NScnHBwRYyYAWhkk656jExeYbYg2+7dZaVFfEvkQq4VMT8yzDApHBZmgmtH6MTYSLXj6grzjaxi4BST8gs8Lmh0MLCmXXTK/fsPaEldVrktaNV11dsb2+IBhkcmjN80mvVcN2b51rLxEi7Fn9hDx03gj588+ay7O0zqjDhx9vTJU9ZA9XdgoK+hrkb99iRwTvOiEx+qRFQk1AmyHJSue2Lq6NHjFILeU8q8RNgJ7RDLtmdtpXQ02Etb5cCTikq7omTBeyFAiD/I8vra5pZDqfjwqqvqRI7OOZRvZdncVe7/3PwiURNwm7ggMjBGsdT1SytsHVreGckoRSlB7KRF7c2N4jyHHkbENjygQipHxJmAMCA4p1PuQmI62lx1fHQCCZ2zvrW5auXADjcHDx85vO95T9e//V/+jePVTFosr2N78VHcJLLoAMYeCdKHkYwCZGpuzvEFpdqyf5NWtaeFLr5w4ZJZrkm7jCAdrW0ghEPfOqeJv5/4kGJxn/Am/6lfifZe9PVSBvy4/mRysVEYfJRDakGyb/CkhyiuR/rIJr721Zeek1PYxhVQjSfB4Cv0xcxaxBVeeS4IxI7Z+w8fnDhx6vTZ83yH2AD1caxpIUtd+M31b742AfjOB+9L38kqfdbXxzIgF8ypjW0xMKGs1In9WBg+B2H+3jwLCGCOtFey3GZnW3xXRn5McF776mtgUywA4NXD83QFo5M/xgSAO8rhX3LYKUPGgapOFoZfg5ybn//857QNuuuaFg8c2Hf46BEbHuBEN9mg/NpqpqBYZo5bUolcJcih+3jgyjtXFGPQwD9WV60P6RM2Lq5Wue5ANd4AgK/EztHktB8+HxgYcnyElSj31nMEiNs/w5aluXmXUdbvW1cup2tBYKCstEhb4sl0CkQiiBh5AQC0MAIYEMyjyXEH9z4FCU3V9yIifDCDTjFNMBvwmCP8TjNzs1Y5LdToXWq7i8TgRCCYpou4URYR1aKOhvAS69/sUaJR5TGJRkWX4Q0AIIeeuvTReiAJNZ3w1iiMb8mCOiEH5KxJeKYxVIIcPNOQrDYd5AE9duwE1GE20x4oFTcFz7STvght8lw9ZonwSa1BkWRwCLcY0bIWN5rFQ9+9KzYmfH8QZZLOWZsYF7Gr8NGjLlnC5DMVgSCgApB24uogVcM5GjUvLJh7AMxU1tv2zg58CFfvv/8+Iwa0BhF91JF7d+5qgRJj1Vy+fIm3QnlcdPv6XVFJb7xxEUNOz0xCgu3XV668qePph1qBE3wObHb81OTCz372Cz4aE1fE9Zz9iNDOF1OzjjQ2NljSsGwMRZbyzJEJJiXTua+daPz85z/D6pcvX2ZfqNAEABoZ1grgLgIopeZkcqKcmlMmgVUF2G04meMGYIQIYhMRqEYdXdZT+TBVhe4GheysvZCpWGpQwBjepihu3r576twFrqLhwcHK8tK7N29sba4bAiiff/yHH589H7E9NQ2N1NTevIJKaa9W1h1kyPb17ZdffYHHdBw8DM1kA+5uCQw0TITtEeJZMJadOXWK9jOyLC4u2VfO7ejwSgliZBA2MZOOxn7fkWRzmrwf4Q7YNDoX2WIiUNniAPuhrqEJwgGpXwAgC2wwoiqu1XNygZeIsBuk0UdTBZelQn00VNF+EGvu6h60s5P2hMzYRjI7t/DkyZD8hbZG77zMKCyJ9UBBMrItHBUQ5iSTvTlQKiEydMGDkQsJEFRz6sSfMK/vuAKGyYg/2QnA031/gtYrRCdZ/iSzaUmtqAeo5I5hvDenkMH89bVvyMvA8BCFBnL7/DGJ8nZgoojceoxUawWmK7ptskTY9RFxtUgPa/rYkaO4Lm00dhZYoXLmV2EeX9XK8jzm58MiJmCDDfDAGALpi+ZS+RWNjLJtHW0AA57K03hz3dcKCxOPEVhMrjmYcaM2uRfFn2ztSDUUtk6kI9zeFG60GcldJFSSojO2e8ZJZuxZ/4LSZ+gECKiBQZLmcgOPboIMSXB8+gQcilFhrh1R5IlTXNtKhj59rdkw4AAtMB1XCL9Us/phWQ3plVLCvdr8egUGv8pHkqRkrqbC9C0Uew4Yf3rlF0jqNy0GCY0MHYBBWpUgGIGndxzcBgw4wpQ+gWuIU2Z1OSidlveh1tWZMigAgOryxHPEU4zzQx9V5fO0LW/9mdJbzWDTrq+icgtbJYX0nVUXD1OXGI+XQy7AbDOlAflVZmRxtvSY5byMndcrzup0rW9oS6O6yfHsYhXZjVofWtsoqKe7+CqmJ0cePbhTWVFKrag/jb6N7mTnHODuTfKKwABFRssLWCwpLlL73OyGpY3lSJiw5ewem1NRldMK5KYWNdX23q2za3Vw1y6ZN+ZknhTHYuf46ZPH7CgCXXV1G6rMzS6OTc06vmB5bYsE0mgGKgoU3yR2dTYm1ksTShMvh/zpjhnq1rb0ArFyotfW/Ew7U+UIh5AGpd5iX0zsOTFGUwiEZNTxCTwDAFqU9xDCfeV5yh66oPsUq7eaFuoGldIdqsSHysCqwmlDOqiMqtQDe74NlngZfJWSm9MlES2iujw3M2XqpZKJ2VhhPLi/kw9vZHT4Wc+wZKQH9rd6KxDFiUsdbU3lpaUD/b0WUj788ENL+iODA9IBWbGsqBUJQNoykIaqkukNYF999ZWNMIeOHEMnwGiafWxT7OT4FGaymrqytmnLp0j0aqFFdbWbQ5uUAuYxZhBinkVyzW744ouvQMsxY1H72rdfQwLSw7PF8R/84Af07+DgANThHPaBuTCPHSuHPWGraMrAPocEALA73bMhNmu3aZ90wKP3I8XN5vLT7m4Bfg7iycjKE7hZXVPbUFRS19jxordvYHjM1hFexi2pKjN319Q2WyMR47u2vga3sLc7MhVYqWPN8LyHiwGVVzPCkBVDucfZc6YwAnQSBZISAmlQzVwaFRYWQxGl9hBBjj1nVgaYHrZSZL5emJvZm5NZXJgtM0NHe9vQwIvGplqzOPOK2SSfvXA1S1CQENppjQcknDqgIvTiVtywXXRW18zVcQEtwQ4X8gFjcH7mzCkg8QYRKKMUYhkAmALGG1/piycnThy3eobHeK10LVUCyM04YHh5aKjD3vgcV/NTihtWs89xAp43rnzxxRe+MoTor2J+uXt11sVk/OM/+VPBgWurG+whG2flB5TF68C+/T3PusxSUO3dd9+dnZlifFz/5tqVK1c49qamJzGDcKaF5UWos+nKn0pqi6caM8tS5sA+nTUKykhmIxpgcMLVq1d1QbQr/DMQo797slg2bgzezgNzNJqxBBoZvuLfTp04rga9w3iDg0OlsRthghwePRQzW1IGLbozPDS4LLfB9BSnnm02N69/i9NEHnOSkQ5OcScGWT2DWLFE7Gxw4gcfYnj3+AHCUwULSMCwS1x8qwFVdzdzR5J7IbyIKyu8cYYc/fznPz1y9BC3C1+v6as44+fPeoVSODtWzQZagkAcQIiOqIxkGkUIdWrRWIA6dQ31//zPPz1w6NBM4i0SEcf6NH4Ccntn69/9+3+Lp9mLttn4nMZW56Mn3Y7frpa4zPFstsILUH4ZkwrbLJ2ppT/nL56D3s8//9zG1Kb25qHhYWMBAxfL8T5YW5Dd0oDGYcUJjS7WXkyG1SCgS84lG7j1XQS09HAucAoV5yGUQMOCHCUzMDg4OTWFhbxiswptZyphg8ePH0KjLAJEzwD7D//wDxqFVScSEBC98MnTp91Li3KNryDx2PiYYnzGsKEGhIAcA7UeHTx4VB5hcQBQNDV5V97LX/zy5xjYhWktmPzgB98XZ6UXjkIXOhKR9yVlx0+cIrfCTo4cPS6CdGl5ilSyJ51irpsXL12OGEVxj4MS6veGw4VrIeeV1SFEhwQYwGysJf5DpAczk51y0E0ybvKpNvsKhJFwprClTMsZcB7iCoDV1DWYnKR6YHF5LZYQ7ayfnbt44TwzhGRZLrtz+55NwMZP+tmk1wTPGWQCexRkYZtkynTqSDhDyOjwMElhYOkvFuJu91siZ0Ykv99DnfnX5EZGMnrg5Knj5WUlLDachuU8r2qqPLC/k2IxWS2Ub9qGQDJLNvbsohyIGMeqIMbjx4/aYwNCo/nW9z6ii633tzU3Ze8tsNCEh8+fvbA4x4QeFyRsE5TsOrxFBkTnGFoZsA4gE4AN3/jk9attW/IGBvuRhbTu338AVg3TEkiwc5hf4tCNKdbAv71xHVmPHD9WXlYsfrivd9hJgAJ7eJF5fyJWdNnCgpiFQn2fnZ4jpNJZ4h9BR1hUULvseXrx9NFDjE1aKZxgBTlOMiSWzI2ok9c7DsQdGZclswgFMSSydnTuP3v2/NYrVmyWmDMKREcEU/ilBsm4tQsl6TdmOu20NydyK2tdClfPpbWgQOjVGPFzwxSmE2zbFWohogyfewL59KTeIcTU1DgFpRWEo6L5vY0SrGORIzjh1KkTTCwYtr3Hon9DU4Mpt8xU1l0tdJAm4Rjie81thDQAAzfSAOCEGVt4QUK5QbuaDcSCgihJZWwbhnWBspKpUFMS5/hTUEjy7+4bN29icoLmIAVswnXPCvji86vwDAn4zf4gkLvocz/0i/0CysMG5IfJNz4hFj/OpIw8LdtrnF7W3FP/t5l9ah5Z2UnRwWQydJktSJWfzlSgAy8SEmCRSQoRjgLExDT3xCu0/L395E+oV0wBlKARkmDgWHOkUhlgkC4hjuYUQGkPlXe5Ua16PPTrUsCvPy2LesXo/30x955Dn6d2gbi88gsjLkvA0I3PdAEtwQ936i8uKQIYADCEnqpc7xTzyrd+dcefDFkI9adiSGUAVptKVOVzyo5nWXPulXejwrTXvoV6xUDurctNMJ9Y9qV5v0o6N8mv+ullNNvBiqFDY8KA6LpjuwdOsEjrAeERGB2027D3EYw7toCIwdsTOTqkhS6x31Gq/TcunXaKl1MSVYhdqBWGhWo59QGA4navAhuQLna8AGutizG2od4Uz/5cgU4iOw0bygtukk7Koll5hf1DeaQ0Z3nNMOzYb1mmXhaEC3BsZLiqopyl6+ji5dW17deZU7OLemohEmtyKhgy01m+ZEFFJSWQpcVYkZBPYSNoCW+iabO2bRR+hddi2JBePYnrAAPkw7kK4ROZzCLg1nP3mM29Am480SO9TrkXNVHffcqWkMyK5XkxhumIh1CqBoTwrXuU9UtItJvorz1QHeRIzpZGDzUgImfY7DS9NllSVCh6UoH9+zrdi/wZGxmRZTg7s2hfZwtu7+xsw6OiEhbmZwzu/NuWp2SllPTG0GUte2hw0A3jgyLQNdrHegvn5Z/92Z+J9YQ60maabPB+nbGH7z8vt0gW3QcPHlszOXr0GJdEW3sLmTAe0yzCTtgTMvPYANrS0sbKh3YG3yeffXrs2BH95a7j1zGNOHv6NO5ht9G8Vm+npxeMf/ounT9lbxOQ9XTTJLoJIfA/rPq1/qhC7nKt4Cg4h7FXGa+aWhofPO7as/GysKRyeV22q5eOQZycGV5eWp+ZW3Z0utg/SaR2god5iPOamju0zqSmcje3ES7SIMC5LusLJHsr5j6dE+7KyaZJ0/QOkG+y7S1QFcMPwcE7O4gF27Dn4tenLA0NFjny8x3TM/jWWxfPnDo2Mz2Rk5X59ZdfcMcyjoWs+pzKpcx40EXqW7clyJgHk9BEbAgsibhMonTXY7qAZs6sxYrqKiXVQKfjXiMBhKRxaOZ4CkAOaPXLWr8CmAp9jXmHjx//1c9+BvMw6blRjVLC2+TRJ2ik105t1BFPAOATA5JJgleMm7Q5bTE+fK4hZ3zKJOtbZ+6ZhJw6c1YOAEGp4ncZ7lfeuDQzOWV/f2V5BSk6eGCfDEjImrDWhlbIkF6YAFAUDBHktquDxTzcN4g3mMlovbG1Ie0pDBtFUBzAsJeYO7GLxn5rcqcY8ADJdODEojKMhWqT1paI+corVEu7g4I+IZiYKvbpvnoFP4ZP/ZXxHSv6kOT6JYCW7ABMQvXdV+oZGx5BI815q+MuN3qkBiL/H/7Df4AxcyGE8wl442AH6eiMM7syjK/GX+LGty0Y3ShpCcUsvb5eqF69jhtKOIZRAVpcQEJoBFI/FKEmK9y9Rq3OcTabq2NFhiDzgW0BLf408AMYkEouzEYyxOzsSkTnbT165DgtzVp1zrfK7ew0F7p27RrkQAtHfsy+EqvRsOe0V+GwZZWxzRq6VMiy1zSEsF9VK6gDwmEMKUmQG4SwjQdjWLGBDUwI/xgGcnybdHwC0bzyiRZNJxbmGGxcoTmGjH37O/h38DMw7GBGFxuZ9BG72gbNiCI+01MRe2PNnuKlecwSGT1SXYnSEXceOW9fvmZdUCDWWjs79gsC1KJ5aTKokvfaje2Nv//7vwP50eMn1CwQhdPHVMog/7y399HTJ2+//baJBCa/f+8hzBgLGNlgNstl78KhLeD+gkCs1HKizbCCoDobEmGboz1zu2JzAvzL3gN7prd6BEIHGv7057/EkIiLrLAKmRgDWUkcrsNXtlnS9tCbGQGqWVc//+Kdd9+mG217EBau2Ntvvcvbkoo59DI8KAddUKcVmBddPcZE8m4SSMDNmsCPH3AXexFz4sxU8D2P7a2vQ7uqDQXlSqLNyLvpytTUdKroUEGjCnhFI9WXllZlVfF+iEStrdg/PNT/6W9/g2QC8CTZd6GL0zxy84poEfte93eE44/mt/Z7+OBB3A5XJorf++gPnMRXc/iw3UG6eeXKZezBvOx+0gMSTdMnM8meuuLSLcRqa20W5AA/hw50WJvFVETj1Iljo6PhpXZvWuIXntFF1xzvrR6JzkmE471MycaKS+gQ8ovoKkQjWgu0CIcicwvzehfDcUG+egg1HEawxtryhXPnrQzbkVhX3yhaxaLE2XPnlCTUxAEnWGzX1uJ87ADMyMxicGNLYyKeQRTAKAYzysAtQcb5sArtjx5b1NrLHrP4zDRiLts0DDAbDwS7Hjp8wGqqqQV/K6OLYVxQUDi1Mhcj2s7uhubGVFIkS7VSEf65qSl7GVnEyRnJm4LPaem2zg7chQFgBkr1Ec/oGk6gZzAPTNrzA07symsje7XEPjzwtrdBF+ZEFwAz6NWWosh6GiT7xHNeFbIMXe6tBKjEvZptoIdVR9cppglP4ESvM//yLy7CS6wBkEhZZcJ4fa3/YvUl0TN9S/ed6DlALd8iBmWE/3yFVKkqB4p6U/yiBA7QE2XUJmGTGxhXmKj7JWb6z0coklh+GPsFCvKtEvKwBt/E4VX0biK9fkHllcuNCwz/f1eGmIzw5sY2g7QhGFcSJ/mKkwD9VAhO2p/IiSzUbf1HeMOYT/izgeTMIzX7Cgx4SHeUUY90Un5VAtcoR32oSoWQ7nOvYFPH9UgBNVtmUY/+qsrzlKEVQ2/lsZ2HkKMAgDWEw1jVZhmYlZ8D9qgP8FCpAloMe68zwi0tVag5Dmgt5pn3cBJXCvXJism6t9iC/5hMZu3OyNm9SwZcLk87gC9dPGcf+fTkGBsRhHqEb5TXtAQI2iKNYEvilV5BjoFBhWax7sFgv29lVTlVZbAx3QQqVEOvjWgXL57njZjkNpxfqqqs5k/N2Nm+e/um4Cku1aaGhrmFpc2tV9dv3H69O7vrWf/EzLwUQHvzC7bWY02NDtK07cF8RfhVrItwbZAYJMRVu2FkCHGBycb6BmBDWoKumB/EmJqk7QOkIRbOaW0P8TobXu+wj86qBPL96giaIrf+qgRK4Z9UuNdcbkzBCrCKVpRHaBfq+FUnbMA5Vavj6re1paS8GDdzGqpZVhmRPZFGc3vLuapMfxlPraCxqwAwNjzE7VdRWQhX7B1UjrGzovLIkUNyeBmtLac4mAnOTx4/wXfO5HLxEPB3jk86dKlc3IXWY91/Tzb4ReSDqvPAfhMlLhZ53I1kP/vpr4wfFy6eo7jZqHFMfUxis+IYwp2dG9dvvfnmm7zpOmLryG9/+9uyitLTp0/OTMF6mKG8ziePHycaRmV5VyxWwjllJDnrkcNHLcFLwCGaHEL0iO8ZA1sZMJ04eOAwKiABZNrrhvnpl51Xrzn3hWaiAjbmwrddGJPw+tvXuroWBy8sLpuZZ9hUyqcLsUZWBjdulLkFVxtRqFE04g2Cf5TVCupT1snIHY4UqSFSHiYjKAsnOsJS8Wt6jFIu3fOVKIv56SkrmZZfqqpLl5fmfvjH329vbXr86B5p4kKTp7mhtkG+cBtXTp44jQVEKfO9WPWT/44rKJJIrK5IhKeDGiKClvUhFsDC4vXGIr4QoDTt46NHD0BLdRpyeOPAb/oBGF2DqPt37/Etiyh48PgRUJVkHwjjpkAoB55X+WQsp/iTUOAEN0aIVUczLCzQNvjNhZnTy+iCcfWRUmJ9agWEMvHlFxR/dvVLYTMs16bmVnYePofSB3dunzx5/Oa1byEBWnjAONFVJYE0WePS4z3i0WBfOoaSmcLG+vLLL7//vY/+6q/+is4R5ECTGiMlsmjf1wkDyEEYmS+S9+kOi5BRO9g/YCz3XH8nxsfNV0RN1DfWIV+YVpl7zGktQwP4xYteXxFer1hyjICoysTM0FheigFwApZDR0dr6iZsILpEAtrlfyU1eDIUfeYrHnfiTH8q4EE6OXFDcRENHKuVlIEJeHI8kLHG0emFhh4zEbOqvr5e5ubU1OSZM2d580WvIT2OwV1Ob0BH8LC6DMAqVK3dnMQKVimNd955JzXuiRL6YntHetmABX5fwcbU5IR6IATSHt2/p0dAwvlGRA7jDz74zq9+8+vmxiahz0MDg2QCvWAbs4XC2dlpaGqam5m5+uWXDmFggWIVSk+7amDi63jY3MvL5AiKNMqmAaQQGhxi4JVLxRPOYwoEPlEQooiqz3EONmNYQy8I0YG7wXIyRlI/RmYi06UmNgFGQ4PPbf/Va6xLyWC5Zz3Pi4sqEXRmltmXmZsn1m6O5QTbCMpOEs0ot4fT02MCQCUUFJAaAMj1x9DXU6JRXhVZgI0kvPsYUuKY27esEtgi0mMshAoH/Xa0xVTQBEOj4tEh0+Ie4/Xpk0eGWW5srTMlTcnkQeZYNEKyprCTOCVacf+BTgDrIFJy9/DZ64IxUW2iaFDWjQmbhzBpoFYYD8MtXnJBGkQRalxnmKN2uD+Mzg8f3Ttx4hhpJbasT+LDr8yXweGCS699EytXcrpZWTLXhQ2IhT0iKUQQJKDFsZgEr2oOY3gol6vUw/YPqAHaYQzAEOVCXIsngIEltEDx3r6hzJx8UHE51dZUbK4udT19kpVpiXXVWpOTggpLyxyuIkw0Y0+O3ZiYR8BHTWWl5U0wyyvNxa5as/T11RXOLOkmTQx03zzZQCCiqbm1A9qxlr5ADm1PGWNOqknwT8oYLCnCy2SXv2FiYunRkx5sTBaQTxIRieChV3QcTG4nR+6wAXTHEYTqkaHEYUeqIptA4myiHjEbYx8Dc84TXrwkzBgD8C+M9PZaZpS2Ur7aouJSrmsBTtCY7E3dxb1oEmv9BEolO3bUZUFhqT3oSKyMevgC9MKUG4cTZEoJJgEGmW6MiVnZwsXXLOygiW3Nusb6wO+Sn5J+0UDSwdEeqXEHUYVFkV3D+nt2bqxgc1wSKxOVsDEsuDF6Ml/jWBTJ3i1iYtfkzCwASKhG/UkWLFsjgeWc1PwAmO3C4NF9b1mwJrEQTxJ9ZTKAiwBLBOKrnCycQ3hJtJLmK4xfNaCd0YH9q7B7XSNcasNUAPNceTUowxSTJNs+aP0Pw8sQyKRhjzqUyZwDR8YSzvKyGY8AQf5TeGSOaUO31YJBddsQ5UYHtESKNOmtG2RWp8ufmMCNttK28wt4WLNsAl5dDX5SONlpuccEwJ8uHfOJD92kFfrcfXqlzz3BUknlv7P+vdVa2n9tWedFJLWpHx51Z2E+UpRAWSpFAEYbfOxSUhe89TkCqMqHWYWxEcJzfdFr5al79aAf0YVTbxUGiVd41DTa5yr3XDF1assrvQanGlSVNoc2LmG1Vmx5tpTM3PldvIraWiMvijXHWUfzmI5ROiY5rJZ8We1KZZWKFY/1ddMDOnSPajg79x9oY5yPDg7MzI7LsleQX3jk6P7crF02w2CUdO4oewpIwEaeKTiQ4ypoNtigrCFZ6gM30AVaTYv2N3Jo+tTpE2ogmRwGTh/EEuguG/G5S29RfGbb9249oG2bGusZwJSjpO9TFvHLy2saJH7e6B8ek+K9jPP6ZfhXdJw0Zu/O0kGqgRxaOrP8RD8LN2Yo2N60ujumSWws2x9gEhqhzhM3aOQGgaAa3lyw4S0Se0tD+U3fKqmzukOP6BfEKgwq3I8W3gghU1VKEb8A8+tbLfoWV7vxJ1wFMyfrQqZBJgDIxSdqMlJZXldeXHTi+LEe2vfRAxiQDtnmKvjZ19lcU1u+tBAHaUkJX1dVfuHCObBJo2SRRGN0N3JAhXb7+wd4FPAVAJgaBqRvvv52anaGm4oYUHN1e3P5hCzCGvKfPurWX+L44YffBSQto3f37t2trikHrWODHfVKwYEB5JCHXhKv8VqJKPj86qcNtY16ZzQyerGdxDm4AQzfsEsUKQ8NpUMnZOdFWCTsGXhYeMZv9wpDC7zBP1A5EKBUW6PDI0+fDziTycgxOi7fS4Por4mp+aPHTjDddmc5XkKmBukEJVvItEXVFgJ2D36goFWFKAikZmxpiQMe9NErmE+lVQ4IaWqpME+0jiFRFkF12bfmMGZchiJvU9qZmHHGVFWUSVDHlN+/v1WkrESf5aWS/dde/ezzitKy1zWvabGS+ibHEglmnV9aF7ZuJ4ZIPGxsuKdpbQ/QfQvQ9ufgGQarUdyNTeR0lKH9wd17bHSNAp7XPPHzTaAIjy82k2MOeA8y7zMjqExPwIwtf/nLX8IbPa6PnHw+p1L0nYBTLLiCZJkV/epXv0IayDd+a5crUU+V9K0mdNbnqMy+KS6LHa78srItadFhagrjN+X93r1zxydWBY0ie7N3L81lI/RPf/FLo35zWytxMquULNKYZXSHRjb9xx9/LDzAoGL5QzqRVK0Zp7GE5iAfAAqDnHkEFQDGz16ZTNoLwUFLLvUa/+vUocPH0E4eM7vVuWuU1CPPJydiLgonaGQEU4Z28klqa+oIHtPx0JZyQiXpbiBHx0m7zdlApUYUUAnRwDOo4AavgtPnKuRW51AX3iPSEcCpitYE+GU8VDNxs0n00aOHCGGk1yNfeWUtSKcUg2QMSZMTEJF7FKbmIBbbsyoAoy3LL+3tnaLYJWFLsQGSL7+4qnKaU3O6TJ2qOarau1ek8osXzzliK8oqqmur5TyRIGXfvv2UMJ3c1MTB+XJ+YW52fv7NK5f5WZ52PUF3EyR7B4RqAGlpOfZK3b5z69jR4y2tzdNTMw4JQaYatcV5LOP0JzgZE7qsU1CaDB87mEq/lEQd3TdywSFbf2V5kWbD2/xiliXNATC2zmJX07arX3xu+CN6fATWphzuIkm1MtPTFesby3uy+DIlAlm9d/9ONJfLg276tHd8bIriwiyoBv6+vhdyoXB1q8ecufPAvg8++EB49ODgUDKW7RgOzKPaOzvhiinpE66Hzz///IMPPoRGWZA44Dm5IJ9tl0z9llhmZjsPHjxyQIAJj/HuyZPw1jU3N/nFDCioOZ+IEknD/Lj19EsQsjkGcYuh1iHukjAWlTAQyQuk8YRKcSPvja3MlRU1pPaLzz/9zgfvORZtZmbi2PGjSQdjMfnLr65abmX6p0guKS61b2pooO95VxefsXbBoH78Y7aTjr9QRN3hT82hkZkYgoq8SrxjMYGk1oBhUoHDFSPaUn2qChrpECzEy/Byd64JIeuA9T87M7G1tlLdUP9iOiLdpVW1Y+ng0djevby+JQwHH9r6HZtMNiLn2LPuLnOkRKAqB/pXeaaYnsUl+fgh1sSSc7W5exxZjhyMJiV1gcXIm263lXUnQ8zQYJ/hwOH0JcXyDb54990PHRqYWP/5/YOD3OEOciG/8joYOFhrMeK/jvkDRElz+eTB/Uki1tpCbIkwiiMxDFh81ke+CfqQm86ZpHSFFNhV1ZXffiP1SMXBQ4fDTnB6Q6WdtWFFxOBumSbZLGpAdD6X8duqG2zb3GxXA4MT0mwp/OEPHYBTRL0jH/5hlOF5jm+TUieVEU9yim1CIxVbwZhBqbfeegd1NCG/Ajx4C0vRVgaX02v7K0iEgIiBni5zGB9SI/al7N2dZfVg16uwOqwKal2UqfIpTxq4saUJAJqa9OmvP+FBGLQWaVHUd2Q1TnCvdQxMKv2ah6sQ5J5bdVUsVMrSlgq5qPiC1RN4M9wm8RQ+QTiXP3UNh+NDwABjDw6gpJxzbLMOR6MFAOUSl7eF77CBdDIFy6yAJ89IQz1oElq99Sp6ldhVflUFdO3Bjjbc6JXnHhot5IH3FdBdnkcMQH5+4oaJUdyYrhuvMiJ1l/qV95V6YEQTKV1V+H++9CcZktUZsxyVa8vEwa+a/dIyfl1eIVtqD2E+cKpT5R5ynbopryhL5Q1OTQGxIGCgYnlx1bce+kTTWlFM+US9zirjOVB1Rxm1RT6cpDldSAnsbcCZbGOlaNTpXut+vXLqsy1WlZVVytttCWy6AGHoJkEIxmNRPQD4/QTg5c66E+Ip6Ky91pQgn2s5J2tTdvdXz188sX9jYmRYromjRw47dObGjW9syOzte65OFwuGFMGq+cZ2tvAVAUsy7Zg/bGvOc+DpDmgBCZItGa3COeT8lDmb7kk+vxe0qYRzk9azxcd6sa94mCT0bRP02lDX1/McNYvisKQCvpjrt+9ZEy8oKm1p7ZDbn6cO9opK4gwON3pq0yficvz4kz3PNBTpJG+LZT7PZybG5UIFFfyo1ld+qWZgaxer0FNGCPjEjUiBBOrxoWLKYHdd0J2UcHDula/0EVaVsSjJO5V+AgOepx8qk7Ku8qjsSvgoY07iDpGpWbtLbd2F+mznSRXaDCDmmzcrM2NncnzE4GTvIIBtLK+rKeeVf/ONcyRT0gBTue2tdYapjyfn5oT/wq0DZRR2DJw9iFrPTZKs025vvv0OsG2Wpf7wC21lFRSe7eMXFyhfPi0/Ox1vuT0kdb9w6aLQLNgQFry4kmHsJNWUI3Oane0ELgOGIzA5oZ1oC3s0VH5BXf+LXmTl5sEDppFmVXJNiNaoqdnFXDABqKhiV7GqxUU0YnLDFR2NB8AG7WLJ6E2Yo9+llZQqZWnFjOBVT+/A0KiwJfF1u0bHeVZyRSlOTDrMYBZuxewwN6k2BhbMqA2GVQjJHuJVYxUIhRPIoSZkP4mhFFDzmq5EOOhCLOKuKn8SNBhQA0LDCRymxaQG3VhalAxrZysDjZxjb0nZ5rSGOqbS5NDQ4PkzZ/FP3wuHIej1DJaenFnAJJrGPKrlnfYn6x8jWRG2rgvUosIyXz192mW1SnNANaYalcmCYUDUqymB2BIGFjBwETTiKyWNi2k3dRCj0iEpSrWlJOC57d14DhJmkKYdbikEAjy8s/qltosXLzImVA4JbAL8g3tT/vTk6LGTNoR89c3X1GZ7W6fnlvuN0PyC0Gtw+qef9OlOS2ODUVlt+qURM2fcMjA4rGkzKSxkvvGjH/3I7w9/8IdJwH2k+4TtKYEVryMXgkbZ8fghDqlJFBo7I12c4VMAqqZDxnc2rWK32m05Mfn08d+SXBNLJtrznmeUYElJKXweOniQHrAqp7wJAA8oOHECgFmrXAPwE9EsyXCgaZaK8hLF1NTVFhSWbE5NYTP9hQqoBpJ1Bl3GnGDAHioxoyDIeJifnt6DZBBqQtCR5R0TDxrmux99CAAIgW100aK22DSqTcdBwMOAelIOxDBoBCqtACAkIrbnjrfva3dOSqqyAONz926AhG1cWtS15PSDhcnxibra6tmp2fWNFYGUzS2Nph/dPU9kP7MRXwpFMbFPn3TzyMoBzZ8lORD/nyA6drZVRBrPlmgpHU+fOWW4MzpT13fv3RG8UVtXI67VBhv7gtrWIjWQbB42ENfU1+nCR//q+6QYA+gLZILHtvszp05w5dy6fbO4sPjkqWOYVoJIKMUPOPPv/+G/s944s/GeBSI+At8ORDZ3oa0FPJmIIKKYVOojlrBmrQZxBIwKGDBmQTgBMeW48tZlkN9/eO/MmdOCIhjl9jRJKNTQ2ETRWWKigo4dOwZp4nnef/87Ilch33i4MP/02tdfkyRDO8O3OLborFG7UtxG9p6uLiDhQ/oqDCl5GpLxlI5iFRBnuh/dVYuOGuJAsUXzk88+VqEOUrBW5L6+9i1siAiXjJi77tadO5jB5OfgoSPWDIVY3Ll1k+zYrW6QQXrLQaT1xPFTFCPkMKzt73258+rs2fPcB2fPnc7PjWMZcAiRSdwxVjEzf/Gzn6qWDW0xwXiBw4WDDg30Ly2UkGJyNDUxDocoxQvDpX348FFzbPgXdfusuwc2oPTQ0WP7jpyiBOyZWZxdLynMq4yz0CiofBM5LicpgMnd7MJybWOLHD5q+4e/++9HDh+EFkxOD9gPJkidWek+HGdZ2Xb9sSmhlNrUF1SWzd+HUrfRA7BqWwsGwOGI4SgDnqbe3he9z7uU2b/v4ONHD8sqY4pI7Vy7ft1W4KaWVhOYcC4IbS2NADb7Iricvvzic2sgh/cdcK+zUEc9GkYPHD6EfBIxUZI0qlmo8cWvezjkMAbqPKO5rFyAGe+OLXyITgwhBGIRd3qKdb4hJ5LwE0mEZZc2ecZ+9oLZ6z81Gfv+ubmpYzEvRv/FhSXzCkaHeYI5Dgsk0owmnmU3ZoAkNxwcO3bcFTgEiT3jz1DnLKqSOFrbQoRVpq+/+QYXOeYFVmnL1xnitjPA/Mqhusj78pUM8zyczGxMSM+kl1EN8BiMMCK9UcCuKr+EDpe27o6EB9iDpzhRs2GycsRTbpL4+cV7JE6vkWZ1aTk2dhsLbSlMQqBJnMz+mjO3V5sOYkJKHi2sb1jkzLx8usIhIPyy3KQ2e73KlHc+0o3Z4uFQ2Wwhz1mRO5/ptrq8bIODMRn3pFIEFKIC7+Qc+dVL9bsHFgaFLM2w5EAftLEg8IorM7LQMFZITqHzEbaDADa5cwpurEowFLE0iaPfooGhJqxkfXApz3uscpeHLjdcUyBRoW0TtokI74nYLW1IcmQKhaNN72zp2LXbWlJ6OEs6GDDdrGOYW1hsm52Zxp3k29xDLVMzk46yY2ZxPAfLlldCHKKYUDIpddlggKHdoBZUyHTBgyg4xJI3X6ZiKAE8HTHM6DW6xswyw87xMCZAqzu6ptqi4gJDr0/EHyOhDU8GFSrPh4rZ/mJ8QmyKxkq3FqG2sCBYBBWpOQ8dDhcw5O1Fc8EnRw50UhBHDh3kSbInGNdRlFJKwxV4zH2xBb2pabZmqFS79FbDSYwF9QsyIZlq0DX61xIEHLG/R8aG8TG+f+/9d5g7J08LAA1XXFfPi8PHTrnVUFlJ8Ws5GldXKTvgii/bk5X71tsfjE3O/v1PfjozvyxD5vKqzeW7NFdeWa0GjQLA7+DQcMLHkfVF09x8YNBHTGVCoKGEK2IvB5nxp1FEp8HvKwSFdj3iPKBbKFII55TyifJ+jXxaUWHCR2FVuNBIu741gaRV9c7Qr2l0MVeHCtzLz6EGtFDYhZSoHCtkW3L1ZFdXVhh+5PG06dr6Sv7eHLl9cnZn1lRVdj193NbWKuF2cTFG22WGyYaDdoEsxjAKGoSOn6S4lxaWrHvQ0Tpl+xp7wkoWrQ0S4y7A3n7nPZ2ihZ/3RvC3aAf3UcPmRkdrJ3Yyy+eRZX3euXPLEZWEQ/DuzZvXiYaBlh3gFY4y2CNTzJPzssyQ9E5YMKzob2JwV5ZXVuIvFeopEw2EgS5B4bkOyKzQ6MXLb4ogt2Sn9XTdhdNZF/CtLD2UMgwXlFSOTMzfe/Rkf8f+vsE43Jf4GkXGxsbt6oNU+KRGYZIqtGhLXQjXZCGVSrieENGMHYsKSUIdTEsKCD5aIzQUuXRBTG3QIrlSUQKSwsHYe7MTu5auiqCIkoL8V9truVaasnYfP3FkZWnuuEzMuymrTNvcpa6iarl/hIEhqhvOkZ2M0PIEHAkIJgHU6MRo5Ivk7jLLx73vvvO+5vp7e2UoX1lbfvu9d3/5s5/jTKwCD3aZAPvZs25KiU/LOpGwQL0g7NhM0rq5xQXR3vDjiCsRrlYJ6NuWxibbuB0cJj9SbVW1BZDRoYg6sNWHnxAwhkMMadKDpQqSDO6QSUZAgtvRC+0s+jv6QPyYIxfAYISiTzD/iWNHUMfmnONHj9hsKnMtxejIBLReWVt/cP+RbQxHjh211UAWUbYy25ewq4El5zRC8cSSjEVK06pKhww4ydjwL8rQFucUBiUhjcZ49PAhMIiV5qRulFXM5qVnz3vOnjmngFm8MeL69ZsXzl+CRoYjEbZGYSHC8I+eBto8m2GSPbLYHvYYrFL7GV+TmUmRGP2J8Un9tVBnFsSEMrM1DuMHeMCNOgtXKscwxId1xSgkzv5U3owXmZMTfHLUj/PxCW3gc8Sl/f7oj/6ICQh4kugKjsra+/jRE8SlYVxAMrsjO6Zh5IsyxLeqwmw6qDsOk3KZONlCiocx8/NnkpnG5mbNjY+MHj9xFNsrSXCuXH7z5vVb6oE0fbeAwBiC0mMnIumWQ1Z9bku3SUuijWchIXUZ+BazAYOGVBt6gYcNQTHiMREmLEu0s1lwZma+pa2DRD98eJ93nIcezKQGNuiEybEYs3QTivTrzStvWCZn9EMsnHheUR4eWeCBR+XuJYGFZKoIYuvrpNAohXAbGXtedDnTsLisWGazxZVFY7GQ8eqKWtEaMtfJ8SCkE7ezzJzJZYiGzMLiggMH9iPWuYsX0M7AIWbj0MEj1j3s1Gxr6ygtLbMNQLsXLlxidA70DuAWOLl86eKTJ122JdRUV1JNVVWVtgKzdw3WVTVBtb/5m/83379krPZ7MGeFbYhlRUR4o3+kpTKUW3fypwT2ptaQjwFs6dFT1IQoqDZwyAtJcjkkDS4QYq3GFlpoZ/VyhJmCVlZVWFaFAY2i0d/+7d9icgudJgP0uV1hdlhNTY9JUlhVU5m9J4eKlfH9+MkTguU0Ld1zBFjuvIx0dNk5MspblkR9azCkmHhiRSnC1WyqjMNhHrq6unrAQ8pMUUQo1zU02g/xovtJRSTJGZf/Hit6q3d8LmIarQQqJo/qof0HBl68sPfMBIPzwtkyTAj9RZTystj7R2CNF+2tzVYP6MDOjoPDY7MFRTGp4EE38ZAciX5gyYjDMVbjcAPuUP8AXz5Enbtw+cGTF5NT84bItvZ2kZTOV7MgCVoHLDPBadFvv7k2ODhUw3W4ELmAHaMpnoSo2kloZ4gZGnX6NDnn++SZ05iWuw1nsnboh8KC/BwxGVbDCwubWtsc2KROZ8rwc9HSgDE6cI7iLooxw6nSGbt5o2wSCPUrCPP+fUQ066CvIBMHQpEbgk+arl69SmnjKHN80sQMwAP0quHJ3hUCgkMUthwhUFaLKrGWBc8kzsyfuOFhKXrxG63rl6mDjprmIzUz8RfamT8QJcocjQCjaTD4DRsyydCI6LkMwdRBsDAfZl4EaUfvwMBcpB/WIim8+eQGPEAOLFECVIFlvT/54x9Jk2BSZCRCQUBalaKRfMuW29ogW4zwcEDrmkoy3zrXyarHgvrAWLRrM2VHvkD7hzCl57Zxxap9xIDv0L/uAa1j4FYXiAGn/6gIIPcpfmkWBYz4xANwpuBOMIHBZAkgy9LS1MxsRXmNHQdhE2Rnz00vop7ewovjvRgAAai0VXGtW9dg2lv1ADrkqhNSlFazbsRuv5w90BI56jMyhaMZsQiVk4OsLYrjdC6dma6pDM4TqcK4EKggukVQmw0sC2ENOKFtc3lheXZh1hKMaY9NmmwCw0Aw1i4pBoQuRGCJ5gAEmxS6MBvDYRx4Dcw4THuDRjB/ReB0xFISwHw2OJvKwExeWRXyHOvYJQG58Mb2QnInteGhZKNbTNat/SYzh1ci9ubn5yg+LRp3lTTehL/H2sXGutPlmhrqeZStO4t4gms5JRzwwRDBcDBoeNCohWk1IBx4tOhPGtwquTIMC2JPuRBsuiFldITQkMw1fPbTc9NCXdWjmLEBf+MeKu/ceS7nejztZO6lxdneF5H+dnllns0XJ3+NT70Q+jhhz1PJ5Oziy1e7Bvq5iypwDr0GA5qAW/DYyuPC2WRSxz3x3Fut5CbHZOgvplIA/tGdCLnxxHPMQnq9or/ghzrDhCB3o6S3msP9qaT5ShMKa51oGST4FRiBNvSYbMY0bNUUNB+QEMVhgMEAg9mhzsVaMqH1RABPUUFuQ331zNS4c0vycrPKS0UucR9syAT4xsULVD/fNrrv299pAoDWFkmg/eTJ0yQf99JQescgGBodeevym6AV89qxb19+ga1R9cYPkEPChUuX/UI1nOsI/OuC7pDEmqoaTIh2jJKf/vO/MIn0SPAJZf3ll1fbmluM9HIU9PY+h1u4YgS3ymuxtQ7f4vrE8RsfMKRJV1VN3bkLFwXro8uhI0frG5tAaPz+8d//XX1dpc3cGpVztqigeGR0XF+uXv2C/HKuyBFKufOj3L591+i1sGgxJVM6SYYyRQMkSNM0ijCPEUgX3EE+35u+IJBt8NCCmYVbWEIRaiSZMxcGJCvMfaH7ti6xPJJJsoDBee4i/nGy9nInaFGQV8ipAyr4NDuTjk08rlYokaqykq31hZdbKwYhEd7Oo/WWdDMBRStBF880BHa0dqRTerwnFwLwDBJYqFtW0CR5gLeoFpaxWN6hYRFWGMPUpXP/vkdPnpgmJaZVuUxpsCrRZGKuTQvaQ/oXz59JuT48MuicNMGA0iDOLyw9evBwaWVZ69ykspqAW1IOBoFdetbKpYQzFpq3247Gfa4vRi9MS4pDA49NtrS1Qg5jiHcKaTjv8Y8nCojEYDApj/pQ5AY/8CVTR1wJMICvrNffvPGtCg2Q0ttIZlJbX6cVNUi9ggfUQzlQ6b5l0xun2Yvzs3Oyk+m75tKMFqJ4URAdNWRw/e53v6tOti/mQXS7GhwhJC6cg4qXR8rgSiZtVZ1UnpxPmEFsG78UbSwJ1d/93d+yX/EShmRd4VhfyVE3vzhn3Kmtj10oWEiUhVXbvoGRvt5+LgybAa4n4fiQgGQI5wYnoJoZBc0GfnTUHeSDFpEPIgVIBCXglTrxHrZRgIi5/uIv/oIdAH4r+NBrZUyiGDcUCwPUBWzSh0/gCkqpawBrCMVFPTU3tTiXY2hwRHpKQzXTUIYlvi9qXJQLTkuoEIYFDaY7pohCEcBghkBSJCEREuNPJ/Iik2Lvv/++ZET4mnubyat3YNY0GKhr3XTRgfgT+VKl50NYBX/o0mwnkWeTHrtcTpw8JtoUttXAO2tiCSezSZJQkuKhz41cnEe4RfybeuyOsC2Hfax3PsEYkCyghd1iLODvEh0k8QDqS4SAK/w6qNv4e+nyGw4tNtddXV6VZNbG4stX3vz806tHjh22DxB4msNUugN7fhlVqACNLAGzQTa/TnliiyAx0VnAKMYnQmZN6iadtZzjnNn8r776CmastiGEYvKJi538+NPPhMScv3DGXDc/n2usaGDwxSef/Jb5ZKaBY8+eP4c5Hz15THP2PutnHhjlKVjdwcDIjV0RiNIwatAw+IpeTafE68tLZk2eUDI4DczW/vl3zF4MGYCnphAatIiCn+vqamN823qJh/m/6Qr4mZ2fGxka2X/wAJvE5ofnPS9MHy9euMDx+/jRo2H2bhxM9JrCYUTxc0ZD62uGYGqTYSdGEfzWbOEQwAjX3xuWqKRIpq9Om4El4ztetU0WWiamZvRaRvzO9g7AEAQGoKAI+enxgOm0uH9Wnp36BnciujAfmyI0fc5RFYvrdx48hGSWmN0+pJu++rf/7t84zv7u3dtFstz29TFwqQUqSPKsJFNN5vyixDinKKuenufYo6auzngn0MC8FN/K2nT+/FmzFzuzhvtHb9++o1hXTw9T88133u3t7+NlmF9YQB27oqU8wfCGLxyOodub5dOrQxQFMD8mgQcOFAvmxBbYMuzBiX5pz3yAdxtXQ1FKR6aCAQVIKAtjMXwkiR91loojsNY1rJ8wBqqrau1TotakG+I4p9AY2QiqLSOIqGxKgOBIgQAM7eIEAitmQkncC4180eoHjLYEQ7IAwwZeFVlXQL0Dw4oc+H0Lh3qnBqsEwGazUTVCKH1OUuQ48uueQpZv171hBX+ScczA2Uc800r8efnSmzorVDLEKkkju/MyIt/Ub/IZR3FJ8JRcoAJq5qlDzarWBwpI23DtXhXg8yS9iB9t4mH0rSCiHsmb3vrTK20rrFeEGbf5HGp8iCFAQJb8qbEkfiwMLQUkFqT+BJU6AiyWCHbHuWByxMp2JIpbD0GiFfmqRfQ7sgeiASZnSDi0X8u/Lg7nZaruuQMN53F+4esdUcWWTyKte+YruVYpCIa753YweyKWzu/C3LRvAUangx8qdB94akuYKQzT6GZ+PrBBwp0X8CYhTOCAVmYN8MI5GltPXqMEynnuKyyBUGoigfDzPxAb+9I0YTAGjF9qXHdQBVkfP3kIscIl1cZDAG/WNnxIhWlXrAgfpGJWRSDEVhjmmkbluBUJall/bXXxtVmE3KmZGZcunreqbZ3u2KHDFq8N2GoTceFDsoR3wUn8bA/VHQCjl8SFepoSjsODy//enTuGK4MxgH1F8ZkPKOCGVWrURFaSAwOAbKhvkcDmzt37kqkfPXZo125iKT+GcPA1IT1ffX1N7Mnte09q65rFm4xNzElDT1zNXaE6cJgg1i9gMJKHblxeQSZecm9lysCDXvCGNJSsV3CljHs3Ll1QiT8N5PSvrwDvK3X6UK/9iUye67h7CNcF4lRaWiKhMFoAyXItjwkDE89YDTANwNimk7CXjpoAIATra1sAKyq2LFvU9eThq5dmfUty6b55+Xx2LOa9PHfmtIyyKpdtDf+YCwEb2sGmg5Qyra0G0KqZ1HjIVgMtLcCSbmhs3diO4DyzdkqN44qDVpeV1BcfghYkiKUvnrNpjItffvmlhUt8JD2lY4M0YS0S9W1HNj6xRahvRGRUrS8vYmyLBibGFJwVSfYof9G//r/8m0+++Fzoaktbe37I5s7w0Kjgpab6Kplb5cYBsOGH5d3bP8iYM0grLHcY4ZKs2YziyNGjL1/vKiqrWlvfpkxTAwWZCIJf0CKBX9gAv+6EipizMhOCQJE4bGtjcyUj82X2XhvC1kvL4oyL1vZOVLPUAEvWE8wQXr7igJwvyi+Cv/n5BQrFojdvDYWL0PW1dd4KYx11wEJFpZyk1eV5LU0cn+XgsTyqmJwMbKznycRJCiCgYiESagJvIMQU1nW5TlEf7oIVnUa8uWnDHPvAZFjkqIOICYLgHO5no+PRY8dsEQPt3dv3TB15x5nCtoOwsa59/U1be/PL7XUnDzvs2US3qrrB1s9kcaYSbwQkz59DBYZkcCAlDsHPbkBFg9lVb1UNQY2p9LuO0JwCXnUWe/hQ9rfoWkOje/onc9dLUVaA97ny9nF5zlMFeJh0D9XqZ+b6Zee1tXZK/miDuOdC0cwNOCMY8D/96U8pAVKPbYSuYRj3gnM8NK1lLdGc6lcJ7gUe7mVYMBBRE/dqCwAWZG7evIbuVt6Nf2OjUoUwwywFiAELI/vjjz/mx5U3UHQ+tqSTDVFaB6d9BzuvpCBb5LanWW3etNAkU5xQ7JGxKenoHHUNS03NzWQfMCTC5/YtaE73jejkixpEX889VCcHkOGPONOvnABJyHi1wdLmF2M8w5cLmRPEbhmZsmg4jmFhTqTM8Kmb+qtmYsgyw8lw4pXO0jMA4IprbGiqrq53dLpIHmOuYwRsSiF9TPH/23/49yxCwhtsvNsGoS1mIiVDFsCvcmMcByTdr0IbRQBPJ0i/aJ8MJxrLyTRAc1pRD87h+abHqGhdw71MNx9+9tlnGAO7stgIrO0cdbUt+w5EED/TrbmxkZEHM/TAyRMn8LaqeKCYHamGFBxFXZi22YN7I4433rFWY0Oqt/pAOqCXJiGqTCUYePDwnn3uKMh8YBKMj02QC/gk3dtbr/GGXXj+bG1px0P6jp85eqdmnRJQ7U9Qgdk6lbmTT5iM4i7wEjzrGuXJ0iX41sR+8pOfeOJVLC/v3v2Xf/nvTFDZPZojQbQiaobArtoXJ1lPvvOwRFqKCN+3v80iLat3fGIYEa9d+8Zi1/GTx+7cu4v9fvzjn5w/fc7qH+EFIUJY2UBNSygKAymlAjbTEFRLty8M/VRykoMyYMMJiUxFCgo8oM7UXU3/w621Ao4slasKUVAKHevrG/SC8EImzoQ3cucV+5ISUAzd9QgA9toFz6yss+b3HdiPw+0rUMA82mT1448/+fDD70yNjcKksdiUzFeAN7/SIkmEf5DjB5DjHB+qH24BjJpGc+TA4dZ1aUVW8kcffaTPVBNCUxd0l33DF958e2RCnMSUHnGz4hl7a0HLeaEeG21R0D0G9lBf5I01m+Jkpg1wEUh+8etfqfPokeNQJCknLH3/+9/3ljUFFb/62ceVlZHOZHh0tPPAQQE3xTYuc8RIQmijyKsdUaAajXB0uW53ZZlMSbnkCX5ALzWTC8wPXcQEvWBAwJg/oVGar8KSfA5yD8mIXmNacEIXirjXL/D4xTye87Y4CJ4GmJues8Igxnp+cel3Qf9zMd82aKpK06YWyuMZmU/hgbojbp5AMj1GRag2HeK1Ahj8A4Ci/DwqzLouJrE92jICgIupniTqG2PLDKs2riX0ys6MPKTqgmEWI2ZTDDWZrxpSoYGDa5hrTFlPsIcyttobDrTooSBVDNbeIVYti5df/SbYIOSzhgpAaut31pVewSlOArd76FAO6L7UWzeeQKjf3CQ9rYfaoLw8ASWw4FR1cORzN55DioeWm0myP53qKcotK5ZCjFTM/WXzRRERTC8G1fbOEtXPH7Y0H/VoMb5KdvjGQo6ZnGM+90Q4EFHnYGTKq18n7X0mqs7p4JbAbWhkdLHmPjtr37dYK6r5tVkBJy7TMMzotUharHLdCVwkTmLdxJ3a1Sl08qsAbCCPpYsAPtnvaJLkJqIYJEHainxBnqjEBbkqUQM6G8CIImoJmlfGW6LIUBPpiEjKAA//QZS+2D5iWHolAeZm5ELV9K6X5oVrKeYFtVFe5gBmkrtWdmu5sqrKCozpgWRCwhW0tbXxkuDVVpb19HQ7dsT2U5gxgWKp0K0aIt6cuGgED0QiIzOPwFCgmAMSNISOoAKwecEf/dEfGXR9gr28Aj/gvcJV/oRwYAPSL76kTcTLsHU4/gsKcxrqqvi0wPBoePDGrdtd3c9On70k/orPgwd0dIyjV14mYTY6+gqJUVO76Y1W3EM1PnR5BaWuVxmhrfyJHPhbAQ9xqYcEDB+61IYi3oInLy9cR8qklIUKRFReGX1JMLOFOvoOM0gDBA99npJVyXW7mNc3jx6qJqX6aHpZWcUopLlkeZqRecDcXP6M7qeDZl+FBTm7c7Pa2zrsn52cGG1raZTXD3/LDyTtOniM08l6ojQC0wAwhoGNXwGbWROgVQHDFKDISPLhQ0fuP7jLpFZMTJEJizjLm9evoZch39YBOUd97rSH5cU9vCamamfPnZwYG7C3y/yWIjtyyILDioUdSDCdY0nH5i2hzi839mRnWhZbTJSUmVBJWdmbbzXRC/ZjzM4v6KxxggVDBjEPTZfMQ19Ld8Oa4bW18eD2vW843qh106iCwqLxySn2t7CkM2fPC+fARZ98drV/+IHFYZoRMPoL7dCrj379aQTiSkxVBIIitLkinGM8J15vrzA5mEaZTHCvVFJYEFHXSMPhhCr0QEVlka3wJrfiBmNlskD2haDm6dOnMNLVzz5RFR/NwX2dE2Pj+/e12xxhAqC8dFJYRZ3sAWMtr6bBFT9zgBkLCYITkQ17o2MDljq4XZFeYktr6AUFr9V/6fKbgr6mJib4IGyIZubiWDxGrD799NOOjk4synqgiPmEjLu0IuoQHJQ1uB442EmoT5w609Xd29reRvtrnR+IKEnvaI7E1vnxT/6RWk8VEZ7BMA6Q7ut97qGcWk5XgLHp2TkzPRMP1ZqMEcm2jo6e5y8yd0eeKHFclqRCP4jyKiqu5CnI26tCa/jOyjEwq4GpHbKcYxdJARP7RV+/DHfla3IcxRYtq0B2No+MjnjtPvNpN9qZpZmBCebhuYyZIUmenb18+TLfDdo96epWCbaUlVgIBkyqGfUtNuOlP/joe//1v/5Xp/acO3d+ZnZhc2urrDx3cnLq9KmzN2/dEm/p6Hd4KLalJtnm2Nm+j9oksyYAUpuheKJqnPxjGi8SNdMGuUienFsciekydrPvIYGhjxZA1VmEc4/fdJad4R6SUdCfMnMIyDbtEQH8/MWzpkbZdxq6nnaT97raPM/35kR6DcYGq/etK28vJwfckgs1aIXCoaNwEZBSG5E9l7aIt5EpO0s8Z6lJO4Im6UTr7bfm+cKTX391DYpAiOxqY/qLjnPQARXBJ8xeNy0Jhi/KR0f180TQ+45T9InpmZG6vCxW1yfG78zPLTC1HUdNewwPjRAorHju3DlIOHTwsE7CwK7M3ZJv8hZRAnfu3tJ98YF3b9029uGoDz/8EJzCjWRh57zwORknC3Ke4NW7927Th/AwMDBo1w22on+0ou+4zlDihleI8uTi5PS0nMUzAjn27JSVllqpZyluZ/mwclXKrK3t+rqa7q4njY3NgmwVw9joC04E1YoNDL/97a+hF9IQ9PdKHpdacbJlnP/YZlxWXdd8nAyNslevfkl/3rlzj8ACg8Yz3bJBlvdkcGiSMhRdaDZl4HE4knVpSkYwxhdfXIXn5329Dx8+Zknr7w9/+MP56TmB73zh5Bds9++uGPv2d7ZbB7hzK4L7ifDlSxcwvMz3Fmq2NuLQN6TkYQEz1Ln3S3+iFKxiSFUBXj20xLffXsMwJs+4CKj0ITH05J//6ac0gM4iug+pESMFv6+M8rOzMqSVmLAJEZRezGFbxmIU8TnPFLDt94cHawswBjyFtYsodGbK9m6wPS4CgHb9qSSu05xiJBSEbIal5RyGu5oNQPv3d5LZb77+GgxK6q8yHBkfX/2iua3dJgTxReKNtVWY3276oSMmP8ZdESayipn/axECZf3CpYlKD8mFBwDQZgKZYKa2vgGizC01qhfMM8lF+Npv3b0rDBseQBUBJo5eSdLBs+4YD9YbLadvrdvsIcAhnKTMP7avhtgzqMAmjm1vi8ug8tac0wAKpda2dVYxSAMe5QwwaEwR7h54uunC4X6lVrFrmSxn7c0xa7TqIoqJ5knUSWokhHnMJW0cLC1hz+/t7n4qJAk5AqqXEbBCphYTJ6amtahdr1zx4W5SXJo+v3n7FhsSqgW/4B9A6gjHGDAEn4PBBmL4NAa5dUYnIlI1Oig+FtEVBrOILL1ALJRFFHy1ML/iORHDljjQq//j//j/kMT+wUmKTcdxiOzhLh+qP1LsgUyr8OIROMCKPBrwp0vz6vUBuLHR9o6NNYVJj+JHz8mwG3ysHpXoMCjVoCpGhB1+QixAbxD3J98Vo9IZDQz4irJSFgl3aQR6b7/MSvbpZ+eHdz92uSbu9jD3I/DjpYOuGcq0BpsDQ5ggFxfyVBbz0GsdbBrF7gpDumUMcfFq8CeQdBk8rH9zE9AawvXa5Tnzwm8gOonBcu8Tf6pNl8kV5eLe5VXMP3ycZJ+DH+2y+tXgRluYzK84HFhWCaQlO2nzqXiX+CkVKqwMeiujFTb6vkMCNJdXX65GhbvDzGWSuvd50qjRLheotgbogk0t7jOT7JMriwuvX22ZMMtx3tZa/8b587duXLfOe+XyG84ZuUvr37ipOXMA4pdmhadHMAoAdBZFCHPYQ8nir3Y999YOIOwCPHILDKYMtvPEJ4QKnj3kQ+I50J2S0vzhkXC8UcRcLK92Ni5cPCtHFFuqtrpG5gS+//a2/XOLa0+e9oSJPD2fIDCQmSLNr3s84zkEqtw9SDz0BBodYchcw0t4D6hGWWXwtw/1DiYVgxP3LvKMf/UCSP5UlW76UwGS5kOFVeXyXIUiuYaGQ3MZeJRHQ+yhX4xLp0jSPvbUmho4Tio3b0/Oq12LC1a3Xj55dDvC7Pba+hauw5Mnjq4uz8t7VpSf1dbSZLOJ1hmsQFWzvIqQjHZ6l7DTUuqh4RyCT7JKdUI+RWz8npN2hhNsZ8thODu1VfaiSJH56uWmBI5VzIKsHKrBkvG9O3cttUt2xeqW3+b5syfiZesbqvr6n62tL8CJHXcjI5P4Sn9f73rpACwH5iFizk5OcYYUxdOmVZz3e7J3XvQNNDVldPV0Z5+09ziPEhHWggPvPXgQa345e63437opf8w9hvLBAxG+TH98fvUL5otAw4y8XYKC+r/+1p+mKCbzMVXYjuxV0GtKg2RQqqdIGRr5d7loQ1K8ols6OirBKcINgUwHMnfR8MIWIzSLP9JYC2+8xRCoQioaIcQH8mQUlhXKH2DRLOVVqvD+nbvSt7e2tfCaGyFqTh7pfvpICtCczjZ45hKjCtCi6/ETIBntsJBqddnIRHXk7MnC3oDBLdgDGZy4gTRE3BPldWGXhA+V1Utz84BfW99cmZnWeke4vUuclHTx/CWwIjoBMXbyu3c/7SI45mOSOViI/6u/+t/aOw6wsz3Eb+QRx5o2fO973zPy0RJw6MISKbQ9z59ZXjchWV5ZE5ApIpn9rQvCJkFaUGQ7lu3dlbaBcpCbWk9Oz7DmBUuyafbmFdXlFghlNCQ41KgwP7emrpFNMz03J2Hi68w9VZW1hsz5uWV7slpaWpGMynnypNs5CpTeH/7hD81ydVyPBIHwzhra9RrA6Li8FPmqLZohsWS10gyQoLK2MljznK0mBsZKLI2NgrzIJnZWjWyUHB0dp8qsdXBYMi7/43/8j46fs7RM9cmV9OzZbucPUoywmptXODuPi/i/uU5XxKaKxJ2dX5qdXezsqFXPxHhYTmwCck3GURC0fMmMrZgyzc0xZVRF6Dg7cBf0QrtRjjnuGhwY+uM//mMMwIzG2/LM4G1/4gpSI1stcgsCxAAur1TFEQtLvuX7V8z46qHW9RGJMbMgUesGVlEE41rGxorWo+xrxHj4CmPQMHLm5uYumiqx/pFvz55ZlBdR2t39zPLI+NikamkeFsbuXSbEloCFyzNzcjSNP73VULoqi1WoMqoDGLrmHhK8BaH+6gXDxd5NB9V5Tmy4Ns9fuCL7tUA4NjE9Y+8s/cZpEl1NHDPsKjXw46qQaOjd2vbaV19/QY8ojLH7+npVZYHO0GCTfWdHu3UhOof6MmkJ5IywVl/J94/D7997QJ3ak20mRu3kF+a1dbR6jpHwlSdIRi8ZoQQ44SWrnXDLRNZTFDxx6uSbb771+OlThNYjNIoxOPM1Ffpf/st/QWvWpDlYqiU4RLg/K8tLRoYHLFLZmrXskMENKRENJQyRHahcXlril7HBhrQ40op+Ky8u25uVZfmqoaHeiiInGs60MgwJnIaoZu3u3Xffs7bGba+PNRWVSA8YkNMSNAm6WC6DK+xBls1MaDkqRQ169O6778KJHlFBnpub6SCcoB1SqgF3WbbFpV4ht3EB5lnk6gEJzXD3/kOtqPB3nLm0NDo+br6Hpoyb1xglSQeMh1EcUdQMJL8cTGgKOf5UWKMgIbx0LzrqQnNVI0kRLaxRZTC5qrTLkElRau6XbLy0WauKQr5168bJk6eNbkLj7FujEk1a1Gw3ESOBp5wv24KVznIv6y+zCNKwPYu/saGZTrtz9y7HgckkZX46wo9X9+bsFT59/8EDHpDNl5t2RHAKEkmuAXDy4YoEtxVyJzIB8jxyRkduDywEV/rrRv2YE/A66J6fEGD2alE4hmf+oQjM3diATJ/oNTGBBP0lNZ4jCk7zBC3cFBTGwgIGblhhMxSxNp0UhBzOcUcXhdmzbAbGIKJw2NvyZ7Ox53ALGFxNF5H31Fj3J1aH1UQA9zCGRWrDDLH6+NNPzG8BPJscZIQZwC9URuv0JirUlFcSK7WpIXGh2/sboTSpy8xak5JCzoBtlRIZPYHV1ZUIN9AuhOBnyuF0kpWI6QhCzYHNRj6/PvQnZIb1j1FShGpAa17rrRuFPAeEvvkzLKeNTWLD4JVJ2qYf5AFlcZHwLAfa7eA/n6gk0JEkwRQbTw8xlo2jNCvXY0426zabEStnJfeD5KWRzyaP1zyMucK8XPkE0GYrMu4JLXllekDmrW55u7lL9MtuWfxi75fNtzZ/xBGDfACMOUGEQVpU1H8YhCnSBR591MH0xhPg+VPnkS2vIGYvLN8UO16p0B5IBXRZ0L9GPVRDAOOOSypxXTthJ1C5FbMLD9EmLWO64xNNw7YCCpsV8u67QSRHVXoIBij1ISQzAvZkx6KSMCDLgrBNsQgyMztUTDyfys2nAA8An7ClnDtlpzoVzDQ0xNrXdfzYYWpO8P2DB3fsk7Fdz2hXWl5iH5LEjtSQQYhrhwgJx8cfTBMMyp8BKtypcQ81HS2Gw6zIjYYg85tvvkn5ARg4nvyAmfCQHGW4Zi3ngU0u/OcvpHsbNuvgenG8MT8iBqBohHEODI6J0du967XT7NeT9TttqdAFb+5hG8UBA4eeIB8w9FfTWvFWSfd+lYFA0EKFyz1y++WNiIEzzleOmgHpl0qFZ5/Qxf5EFzfpK13TBZSUS0db3FRJj0RbrKYL4nQ9xhaEZtHcXviK8hIcNDa81dxQ3dZcwyxzqGFjfdvC/NTN61/ZDFBSmOMsxtnZmbyGOis99nRd//YbU+faJDYDtgEDYK2k/aXjuJc8D5u7sxP8mlOmt+/Fn//5nwtH+erLz19u7bz3wQdXLl8S89r3rMewfFLmueNHXzyN2APKACvdu3NjX0crURsfH8jM2M7PExtWZjK2W/7gglxdy85lwDpYMUe+AhvLbMizh4rV3tLRaVCRooFuktTf4gYjhvI1VuKIc2fOgNPQy6CnVt557wOGHbfo4sIKf7MwBhvKqZDFRdFZ4Tqdnp1/JEY5Y5eghqGRUejFKlQS0qRkhVg8icqq1VPC5Z6NaMKGcAhBRhC6prYSluRDDAfP613FyXkUnsuqwXfLP2rTmFXXnKY4Tm50ZEy8TUWS3md8Z7uqssxOf3KztbbDAG1tbTl39vTAi+5wSebmDQ8MYgCD9MSIQye22WUsDyytOWoUSwd4m2sybXMtt3V2NkhRtSCSO19cqy5YrsLMa5xMgjRis1OBcCODVm1jk/mlIfCtN6989tlVy+h8aXhMVpPbd++I6e/s7KB8rbRsbG5ZPnIa8tBwHP2D6JziEIWUNLUksBcuXNTR5uYWf964cdM4AeV5tfnOf6CBGptblhcXqVPO++5nz3dn2fGzV+SkgCy53iU5MJwBoMb2FCk1s7J7nj3XutnUyPBQcYlMphWyMoq/s+CQnZVHGq3NTs0sZNBeu7IECgIJQqRr5BdHNW4c8y4WJMOUNYZX5YuDKytCBhXB1o8fPTVPYA10dOzDxrRWQ33TF198Rc+cOHEKyQQ2vPvu2+YGtMRA/5AAQ7baoUOHgcd9juvwPBvrwYN7zIjLb16i5agy6zeE1GWRlWjjuvLKsubWthvXb8Wcp6CovCxPi4aF9Y1t29Pv3rtl3khZYSqN+oRxTHXgLhzCgCNoRMyvh8rwKNIeXkmrQvHbcKwXPDDY+MKFS1bngce+vHLlbUparzl6KSVqBHuwbLAQbPDdQoLa8M++w4chQdOkCTWLOKWKi998843hkSGFaSSCoKe8+OZ1JMjAFJEEGbtEbTFKPCf15jOcjbwqoq3iRPaSIgZ0YmCU2HQnMhAhRGoRInrJMCJfDZZ87733AANa3CsySOUYjzJnvtCsDDKydvL0KfIrXG16cvbipfOOOiZW1dXl9r8txvaSAodAWWgRF9rS3FZUGLlWnFsiwE+dfI1m5swpCJQbim1k7ZptDcnyJsnFxKa2CieX7tTU9N1bd+CcyDfW15eWlJtOk036mpHkDO/TJ07y2tjbwCIU8QBso6HZEQVlOVSl+o5w3C5IiViQhhBQasEEEaGRj+nSpUuemE5Q5v+v/+2vfeWS4Jwa4YwQ9AuT9D+BqnX6RI1WZJPMFqayvLzEaexMXKiwSbuksPhJdxdqYgmWyeDUuGnz3lzHLWW89fabAh1v3rpucnvs+BGW5ejYkPywPGhW8FhJLGNcQUBwJqKTGjDgf/tY6DTgYV1iomaqHtgQorxR/he/+IWO6DUHolfnz13UQbVBL2emr6ACzo8eOQT+mupq36qHg9l5Pm9fufzg0RO9FvBtRqHdj3/zG/oBT7Y2N/kQRXAppHHbhfKZmMCZJg/A+Kd/+idAmnJDL0YF5J/+6Z+CRHnuc5x849q3cG650oeUEh4TO+a5fmlxf2eHuH4Ac+U6LgBLSPQxNjqc53SCzU0HviG6tRceKKtPMgMJ+bPJmzOJiJngkTX7YiFBrIcKmSI6Za5C0NCRNsBWFiPltcTGXc+e01QW+2DMnHBwYMCeT/k2gG1TkenYNBa3pBXu7SxMAg8wwPxgsSA9ifBhfV2jNPx6h/npB8cVuwkFnhkLNfBPSNkSxi9IgDqVQxecqweiHH3DHKCH5YOBPdNvSRpM2tUPCU4RUVvsRH25za02Lyo9T0Dj7/xZ0BWGnClZ7t59nR3EPxHMEa2UlsQETIvqMRlmdPkTAwBGMcrEL9KwkLVtwMKoy3IG0lBJNsJwqhYV0c90C6lRrTkJZIqJRS+vTPZUeOXKFe4e9eAEDyFqYKDf7Mmr4tISYFDpXkUk7XoYXVG//sONP3yG5xRN8UVEMaVafEb9aUY/PfFNgs0I0SEGPlQSuD70p25gI/fYAqXtBWS08u7szfZPMDRlLQUHi0rQ+gr5F79iJrEedb/cXFX51ISjy5YQw6Zbjtg08499w6tLtt04DWtLvLsIbL9mhQtzW+I6+R21C3iQawKNdVKNIHd57l6FKgcYAsC+jijsIQZVwOf+TEumrJOAGm+pXk9c8MPJr4x6XP4MnhICmVzwoAbNyeqqWuLkLczAkhgShRFbJf5Ecs99pIm8wjRyqRzbRCLv9RUaB+pQrkQiKlnDYjWJ0V9tCDFAem4XCCHM3oO3Jq2j1NfXwcbo2GBna8tbb70pFb0zq48dP3z69Mk7t2/jFbMyUNFQwKMyVE4ZMetZKrChXSxFMKIvkWSwcs4O6czXFJM/AQBm/j8otSTqTx0xjHmoC3wM9j5CkUpskBKLYjnCYi7kd7S32+ZBOGWHGh0eX1pYOX7k6P2HT6wkDo2qP9qCSZeqIB9aUuylr1KqIVOgqCAiFqCLwCuDx4CBLcmSX5T1iUr8eu5D7OdGnb4lsT5Ba2DrpjJufOIhflYY5Iimv+oHjKjCKODoFNZzXo5w6rV1Wa/m9ornKs03sxCElp31kl9I5M/Rwxdm56aOHznT1tqoXyYQ+NykeHZq2vYdTQNDo9SHvT7m6IKnVU7NsQBcwAAYyeLL4bOEXn5KYPxf/+LPLRY9fnJ/dWlVF4YHB+DqUnJ6zqOHLKVHlVNTNlFBDqpxz8/OTF68ePbu3fsSnB/Y1wE/1i2tUdmlxNlpBbO2sJrNZypiDz2vTUlRufO5yquqN7d3RIkY54zWkp2BBgwC0mgZsBuWWCdyapiJW7ja3no1N7vIxLRd1XDrQ1Yp252R5KhAYLOidKejs/2rb/5/PP1nkOVHdhh6lvfee2+6uqvaG3Q3gAYadjDA+KHoRJHzKFKKXa1ixf2oDcXG7jcptBsvFMtHrfR2KJJDDjkzBGYGA9dAA91ob6tddXnvvfdV+8t7ubqBKNz+3/xnnjwuT55z8uQNSpoiNkdUwLHQHlkkFvAMDOAl/7RiwX9ubqqlF/lY1ZLZomd/4c02JKqeYACx9BOVWVfGmJ4dmgP6dtq8A25iUy2MjWt7tjA3VVNV9p1vvfPRh7+pqhR9cgxjRKqPxlQ8HYU3LIQAszjxHaK4UYBnCFwNJGVS6WJWKR52ge70TAinANiLA/39IUCUmyeJMeS/cl3wjewucbHzRFaUVcjo5SvCVwJ5ZoTQwhTcXRKmL3/xlcuAWMB19Y0xsVINQ56DJRBLgwTzy0GCcJj3EBrJKVxpA1BmCoRAL0jgQbYMccjLLw62Zq57agpl2qRnZSv2aiIMZdkX7njm1bt0+YupcSZXYU5ugTBlZlZuR1fXsycdu7HxkqCkWzJ31NAsKsxMT0lnHIhsOPDKJ33nzj0VPxwb5VxgIEZpx0SAKzbi3i79T2+k4d+cnESOW4sANqirqwdklZT86urR0TF3wR47dnJpabGutomi6Kt25V0v+K1bhAKuIqHFaW4EE3RLa+RG0nE7n8b6A6ZGS+MBPnISmsSdmJxeWlo2ODze2JCt7MzGeqgfeqC0ErMzWXgc9KlnQscFC07+VN9BDoe4GuroIqj21/0PNnLEhFrzT4MzPQkjTmNbo3swwtraPPRiSC+uqJKiY33FrrRilHv1T/lEpXiguxuTM5hMHJ/cvXNvZHT4j/7oj/zt6AhJHaQDeFZ9xbiQktWNE9ysU15WLb3bGgfzjH4eE2b9geaWgcF+Ln8o9Tc7K2dUFYWpGScDmVP691z9RmDQBTiHQPGn2lnpGT97zojBVxFtFrySPX0uXMvdjd1jOEmG5rlsaW558PA+q53dYqfhFbpSaXhJqszN7d1NXnBluxzRVqxCjBpf6RNRRIR0KMGJ65xHiZ3UeujQ8OCQTBV7M6jz4QN2xgNmnjyxP1wycbiNWhHIwSkGTp1E/+rWx0kM5Oar8h1dEMXRIOa1F+2+Zubm0dRMLVusW+9iCSDpgUYlrRYCSLAA0YgjI8Oc05VVZVJ6lGKzYoYTwH19YhfkHUs40PnwwQMuW0eW79+5f+qFU0FNxYbLpxEXAKYp3I5haF2+XmBIE/IrwE6fOSkRpaXxpN2OQUkEGNDdX0YU9vAxR/Lrnz4YCZNzCWmpQ0/AbzjhLOrIimyC3iUUNA+OwopYRWP/xH4iiq+9/jrGgxmQwyHMKBqLkQTuQKsxThbiwBWIKGVIM/yG/wFvxWFyEDRc7QlCMCFM0D/BrCvvmnjEyzCJf0Kq2L17igREyBhUjVnbqCtKX1xcYNAgj/m5y0sLlJt5nT191ojsbT3PzcyZHXIPDQ8KFV67frW+oQEe2M1o1NXTY1J/93d/Z+NhakKjJgWfpv/+++9ffO2NgqLilkMH77U/zEhOhH/gCZJ8+eWXxPDU8WPq2BHlhZUVS4CEKH/hCsXNmv6NbgP0hgHAgO1xS1FKEVpoAwZlJEzfW9DlA0gLgZZ+8k+aH2JNFoG0F2uVvhJpKBE/OCD4ZItLy2255eXTiiNDA3QOs5+CDXHmmBj5ivYAeoNzH/yJCuAxCxACwxCg0sB8WfbK0YAHP2NdtRxwwlRwxYbwnb92EjoRntLJ6sKS3ljYGJ7YUl++gNz2xhxRBEvbl3oLF+nQFypLsWBfcBfg7RAsFmrTGEtqE2h9tFQbQD+mZsrB4eqR4cFnvOgHuCDwBOK8o40paaNlXm62NiTWdxymCw1AYDycoaWuNaB5PWcVh7rusarx8+KbOGN0R31ZZ1gL62oBV1ZSQMnKD7NjgSyvr6zuZWYEdzsr3YoLgQEjaanhyLTjERHHuSHABqRwHDY9dW1znu3l+JtfmQbJSeHI4+ZKyBfHTwYFuemgBAxCinf17wlxjeLOEOaipR5ApT0kkgQt2WH+QoiZBncBOYh8qADN+FmpUS/a2IDHLyHqFPAW2KuoOFS91TNcWW8Np0GE1cJeBe3VoG9odBtL2C9pKc6tSxUDINBxcv1jYb2JNtjAOTURMD8z69AVp4oLAZxDPXf+bG11+cryfEF2jstAPv/sY/s4hSAVaJuemRLmljGCrReWeDznVPMEamW1G0JrRBiGRoYhhI0YiUSHDLxgFUSoQCqAZI6QAGYCCTPRZU8DhDZZ7X2nRPyHTPATlSWuGtjjg1QAOj4hCKHwo/Z2zMtrO7Fh6xT2Tj6Q4nnoJPKBE+DBm2miiC/aEFea1BfDaezjdWBjFcoUbn1HRA0086Ib0FFQz1GqGV1XPoA3kOcam4t+ouzqFcP6J35w+j5AZeOzHTczPc48S0tJzExPXlmaHR4O62hdXdnmxkLLgQYV0KorylNSm5zun3FfzK5IYvL0qJof45SjcjlBHOLCDmpyauyF8+doWP2zDiGHNmRvQRF1bN68a4xF+gI8Fshf/OPPFHQKe/3yUiSQ2cG+dAKVpt7cWItxIHVjLZS3Z+XvbOfl5La9+97q2iL/1tlw82vN7btOFyznFxQqoEF8WOzOXbl4d3l9HuNlZOXJpYQ/C6GfVLa2GpEIQ3N7KykDYPYEYKxG+Tn5juU0NTYjpXOrMvvX1qWibNTWlDMWZqYXZZlUVtfyZVomF5dW1WaWXEtWrHN2NZjHGmNXg0Z4G3FNFuaB4Z9QgXBIpgKwaWIzB4MVzFSWMEJZRWUz4ZC2JcKeaKBDx1tVd5bcrwdRAs/Vn+UiGhro0ZJPISU5/vat62dOh4zqxISYLOtuZgb7xkazvq4OAwwNDhoOLehikUz90KRWBT4q8LCHFNF3XsXlMlgCN0qFt9xaAHjZZTSqc6J23onjRx0lwvQc87dv3Wk9GA7K/9t/+2+/9a3vUMr929tW2aHhISRTKqCsopzw2hHJrbx9+6686qPHj7/99tuqkD2XZ3zvHpxDkaNgPAAeYu7a+npAWn3xEmNRtRCXKO/s7jMLeO1yQyWlbMjhxScCE8paMxMnJgnI22+9YwuhcGRuQaGIASe3kLqZOtxuskobHzmW2nLogMRLsj/nlhFu8vrykydPF6gotRHkPT0rs6yyovFAI9xy++BznMGP4CAmsZpffPr7v/+HN65f55cNZwwKi91bpAyfsdY2tuweXeOnVV7BjuzzzOxcl2aIftx/2E4YX37lIuSEXW5CQk9fX3FJkQ7jt4I4cyoPDA/Ju2DHfP31FW4po/N6HD56DFltq9iIx0+eTuxxRLvU/eJT05JqtvPyQxYf8kEFhBMo09FbhG1Ct5BD7oyCvRlMsEcP2JxzurMmkZVJjc8dVbV10eHjx0+xbqhGX1FhY0M0CIIFvqAwMDDlpk88jJONxf7WP+YEA3NKS/zjJ2k/eJhQ0+qUiRGZKRz85ILsp4dLx6X2bll97UPFHCCEDxuz6Z9Q4AQCwpDqfB52StL9feTXra6M29MTUsVhDVRVXqWqZm5W0Gnk1G3WddV1LLZHDx51JHaYNVQASf6DIiq3b88QL7V8rl75StWHgweaHVXSrRiyBCU36WjMqjA75r6DNfaiDksoK8z9ydRoaAiedQ/9xSFy7U6fPum4kB3XV1991dTQaJ/Fr2+mvKrYjwcdAlEQQ7JaCJHYkal5fXt69+Irr8qcgEA2ytDQsOSJqooyM+WDGOrv43xRRAuxyNfOVsJPfvITNS5v3r5tt+YVKwJhaWpq1nNb22EqHWVtnt2OoisHuGkJp6QK8jMsiIomONUiJKhCJcdBRlO6u66VDFHKBnNiMQXf7ty801BfZcOs9hElcPLEcYtyb3cXWznw/+rK82czPGhKo0p2cEJ0yaU8/5TcGyLGsOEvvGlMwP213OjHFwQ1KdijorSBbZSCAd9ZSV4h3V6xHlmAcCzFaFIIIVtG4s3Vq1+JTbmhurGhAVkxGMZQMe7VV1/lvJMHyNdLUZsvHYuxdQIb+oEfLA0ANpKWtgGWEliCbWyDJXSFb6k7f3/5q/eNiEvBg/PBgJ8ZkZYh/xTbcSGdIzr9feHQql0o5h9fDXVU3b9mIkTgwf12O3AHwFwAb3T842ydns00Al62KMTV69dkxP3rf/2vjc5e5/g3R0cNYYH+NJA0V+fvXe5WUVVBRpoPtgD45rWbqto/uH8fL9XXVEv3UH7typeXaxqlOwY8u9tB2iEdKwWJnmRqykxsb38oisk7YC64Bc6tUCQL9vChySKfL9QRhMCef0aRb2qo6eRxWlbm9MSsF4U4hD5KikqdHuGz5QK3n1R30QEKqfySeVYVIhBkKCwBDBwKEJGmKK31Ceyw4MqyiNTAtF5zXSET1wuhwA8gNJz2cI6HAQkenOSv2DIMIIoP72bETNrAHloCnmJhQugfxZleuiJ6gmNYjpSZtZgerNKfKO5d9h51RAMgCjyHVKi9fbYHWmgQiiSaLcjMARa84GN4PwMuaktFofGrZlgBe/kAAu2h0hNiY2DNtMGCPt4Fn1CIk9t8/FjKTzqADZAhG5IAhVo0Jcf4+Loc7qawJJOsrK9KoXZpgClFObuoOGCZPqKGVNE2urEEMriZVSWaCOvBP9mF0OdXlIY78/Jc/z6+AxWW0QzqzRHAPhobAmRawqNRvAgviOcVyLEmaeO5v3uRYvye+yBt2N3thT2GZpZP73moK/80CoLl5+f5DrGUAr40hBeh1C7UQ5+yiqAxpb1Cv3dVQwKdtGbkcXuFjZPzJQ7tgdCBLQF9NZgFcx8/aRdCcQmVgjeP2+/F7K42NdXTdMPDYwkpcUePtdp+OO0Jz4Zof9DOkUMpOP9kiIgiSLd3Z9MTSE/oF9MNo0cOJbM+0c58tYQ3msK7UTxQWLjNvMgbteI7ihSVVHiXjQvnnkhHPnz4KH54/OQZpLhPemV9a2839v6zewEzDtVl5AvJGEvnXjGW2SEEUOEn+j36VxtfHFhBtSiZPMHZkTU7HLpCa3B6F7/Bqi9Ei9pF6CitPfGBcw1MwYhIH9UCOjQRZNKPXw0NACovCGFyKEEbG2O/sb6/uy40nMp/npq4E7hp7Z//zm/bnrIUWUT8o2bEW33z5teCHgQMmTAMu5YSnJ4MURfQwiRuB4legEEzGtGT6MbG2maCYMN+5G9lYVblFgUu/Op1mz1Y5UMNJnhCvHRh8MtXwsBUvzMAY2N9oMKIvT0WjBGZ4tl1eT/5m78/5WBucWFignuv9ianw1U+B1sPNTYfEO4vKSzSM7QwcSCBPwbS2Bb+UoISUnluOJuomKdPn+3GJgyPjMlGEBj2OXz4CGe5G1ZUZ0LlEGRYW2PU4gF2Fe0osAD5+rcrsNh4hbCbi87hAbfTG4QL/5iCrtS+hExPEELNK/hRSNeUJdXAGDL5CzNIz/FPhyrXsr22wS2s7FVmakpsWvKB5vqMVOcX8zOzMuzE3Rp249pXoQzA9ISjNtlpqfwfTlPQtobA7cYCCf3HaqEZLZ9go8po7cgn1EJVt4T2t2EytGOIdAKCapaRmmleTLf+/mWF/CQraoAQ2MavUQXN64++2l+9erX2D35fcX3HO2hYNGLRqlEoBcLCjBURJSjJtDSaEADRmZry9evXwSlYgQpMf/k52rgh2008fnWYMnrzpaGd0+X6oqux5uCgFBEVoldZt/MnFzn4D7Ue1l6YaH3eqTI+sASOT+4nOwTWknw6RRa439DIpD7//HO5H2lLaaBilSoFgxaG5dLzK78HvElQ4aSgtMlyNHocyVTJIjsklQGNqTC5ichXoQ8xEucCFyYzXZ/agFlj+i0ncmMRpxo2oA8dUcUzjIPx4Uk2upZSeAEqS0Earjx/Ww5580JSnKdYiCMcmxGu6ZlKcUGdI0GU68DsdcKIaqZGHikZP0EUjiXqdl/YCY+RMiTTBr28DngtvY5vKRYsKoVAzW6VfIindw2HYSJzj3NVGRtLn/IZSI1+cBeQWDACeugrQ8a2BCo0M2tuwrzcfGL38OGjnu4+/GJpirBNjl0NrBiU0rYN1qGsGDoBR0GgK/kYxyTIF1Cpbk4PIzdywKRpslYNoQGWYzqbl1+paOr9/PmzXFR8KRj+008/hSgjkhFvcXqkppYoNRt9QtgBIP9QuXpTMIT5trS0ouaj9iem7Mn9+/dff+Mi+wM1qUyngbc3i91Wz7aAcPcfnVMyaGamr7uvs6fbba/cdlCakZ3V193LwycrMj14bfLV3wSqTsbHw3lZAECs2qk4AfLh0Fim7zMzP3fq9Au/eP+XEEIq33jjDfzMrEImPIBRbbyjPnIpKJDDzNjf3cBUSsfW1de6ExPhuAyUtZE2lhuTU1Kcht5dnT3BCbsfK5EpytvGNTs4pJZ1jg9NnN5Ai8gGI5+IEVjQUhEoo5kpmwJZ43QHMOoDwBfo1thb5m4uGuA9XdHzegAPB7HpcHpqH13R7D8xIRVqt3lA4acDTeDxK82JKGMKrycEZfvy+RdHIqpGP4z7CxcuWErwMB0CeEPgWAwAmfZmmFBWkue6hWGaFhgY1YIOdVeuXIFJX/ykaIFR8AbYysvKDCqk5jmnkoMqjJMbN64VuQEkL/f06RdM/3/73/4CigxN4Ysekx1eDC41Qq3uGQGpqa2SqAN+1hodiHA/+MEP4AGKLr7+Bm8XjgVPZXV1fWO9zaFSBGmZaX/6r/4X5py9nARsyP+DP/gDXNrV2XH7xs3ffPCBwH2qy1v3dyZmp5dWQtKBWcu1MQRaYHh5swZCOLjCSFBEfMDGzkEO/O9XImPWfiUawPMiGhEiZI3I2rwTqhwu1orscCtugpNOO9ujwTRx5mphTg6tMrKyUDbCtSRzKuzpSv6k15GPttQbwPRMHpkioPIqfoB5c9Gh5/Oz8+pQIYqapw5u2aurBGwWuqKvFLrQm90OSjk05rserC9CW9hM5+BXeBbTnj17lqQ7RmU46wX5xTPBJMgtgBnD4UD1OawjkpqscTm5eaZ/6tQpHBKbID+wWnsSFNtY+U8GLmY1AbDSWb6D3j99sIXvUOm54aPXdsJXFNHa033AhU3DgEx7T/QA+tqqagelZ6cnnYsyk+HhoZBZ4divu3UmJuxaIE7nUtNZoIP9g/Ja52YnHRVyPZOSlzI+SZRBXUCGrUUuYCr8c2nRxLhqZDM7V+z6G8oCa5qSDjUwMeCBBB+E/iNVFMEPWi49Vgvp1cA/tQcnJMIOAkRXAv9Ej4CE9Q1mh3+iLuy7iNBAJusVFw54PVyzFqkptLG5LkKhB7Yt6vopIs8LSGIb4F0koQKePXsCckODynVx23s4Y8YRL3xCqLY2QrBCl8BzBapmMPvCC6cdbbx2PVgM0osL83Mnxkbn5qeTU2K5clqa66WnK/fMOnXwhZ9PyEAMgauJWU+zrK9ETsRG1mydA96iAjMWZhDCGDPIlSiEE94aG+peOn+Oq57M0IaoiVHQGjYADIEQ67uf3ARJhi3MWTnh0lZHJJ49eYzQyMSYp4Bsi6RmiXS7QWFwYFTmszDK9Ozi5i4rJN9c9IZPaA0goYLJRnlM/1ABGOP6K7kcQ6NFtI32OI1QaUNV6QEwpgMY0NJodvh+9SKcm6AXtdTMiJ74Z5T0KOUtZGXbo1GUt0uKi3ARz53YVWlJ8c4Wb8eGzNezL1jsM7kcDjY3lRTkc/3Oz8/x/TNc+rq7QO6yMhc5RbxfKtJmsk54R77zre8qja8u8qOnT7CxsdjxVD94rCsGIrQUk2mCyueLL744evSwPZOS1Rw8psDGIrG/+MX7Zhpqv+TlQaxUCjYZi5wKZjfcvvW1k98q4iurXF/fcOPm7VhFdROTWEvS06FUhEedXWOpfBjMbg6t1FQp9VQ8fgCVQAGQJH7YXJHKhw8eMT39hO2vfn2jd3DEDQD2bOAhI+5ow8mkCj49FwqQhMREi8qav25dEbr1q8Z0LtOWKvSccmCUEHxKkHRQXv8kYm5OiBT5hQfHD/zKGeg+GqPwNfb3dKOpHAyN+a0VDNkU74hkndmAibY5LlzfUDc3rb7WpBMCnHkO+0UW3U1guAzBcRrSOj0xSe3COZDgFratoIjyP/7H//j3//7fi7FYlmRUu/5GQWvPRbVwiAVJhPbZ805zIdfisFVlFfym9h5MDblehEIeDng4wq18GBUzwJ75AthcLCeCAE8fP2F5U+tkjVMQEuh9iy5PGD2OEKDCCdZFLyIZlgYzXYfQzzu7HeL0T5xP67jbBPlood6efhWd33//A5QaGhmx6yBHktNePHeeVcosMLpTEF5EdLOTXqhzfeIog4ABv/1f/t2frUo1Wl0DmPwQljGwn3U8QSy6AVfw5HDVA9Wg4MQDM9PzJgc5rFv/jFreRmQQA5tJRPokHngXkBZapsb3vvc9mMdOtB8eVrUde0yGouPliIvlwGMWMMAu3N/Zt8EAJ7ABTKcdONQKz9NTM6oMMRNZtu6sMNe21iOOiW9vusZEGZ91+oEg+8LuQS88YEQwUwLEHx6IgH6EgCg9A5kUlPqL01hL0A54M9KS0gMMGFCZfzElNZmrm/DSMLSHKcAPrtY/kde/F+GN+MCAfP0Xzp7xLg7HTtoDRhsbALcE0AzS60+dPCNWxhAECUXxjW+8LbpoxO4exkoooqI3HIIrvv76Ohz+zm//HjnidsUwTpYJmEAy9GoAWg3gimFHOZiRn/h3+HGxorXGEgN++wpEkfZjmrzhEMLZgSs4OyDZoRp6G6ocOl9cDuVieHmpRNWWyKxTH6ivAV1hx+sVP4mO8j5Ku0+MT+S7FSCL3GgxyDnNQrB2c1e9dOFljPa8s1Nag4PyLsp0u3VhRAx1iBbQQpk7fWQWFiDWqroR0AsVoHKSxEIvbiZfEZP81//6XwlmcJdk5hBtPj1zxIT0hmMqMBZZF8jafbf+qFU/MTleWRoKa5574YxZwL9OXEdop25vPDI+MTg04hBN66EmPAa9XqeWMbbNG5JBFAQCzFseIgceRjX1+t5771vwjN/wA5Ag04ehCQZIJoZoijrUAvqWlZWSRC2Bii4Y3r5St3Ivo9SHBH4wcqSTF188hxbOlSIc9X483IT1SG6YfQ5L0Pfz519aWl2hor2Lx7xLlZkj0kQxQLUSbayIpYGERcEPAKKBFTWjcPz1IjiVJfT33W+8E6IK25u4lx43ozNnTpGLcHLRvUA7mzzuX1+5Kk4I8+Y1ODjkPOedu/clickJhKWbN28ZBYbfeeftjmftzvN89PHHxIovya/jU5O/+7u/S3IhuW9gkByZjtSgClVGkoPNucSxvbdnf/vocUACywEkjHuzwDluXYjZ211ySdHKStvRtpjkhO7ewOf6HxmWatiAl0BbX98IA7gIql999aLpe8iMUeNO/I06ItqUgw+coC/ZQVbM43UICXNnvqelSckKrn0nXVNTZR85tbjsHqTJqYG+Hhmq8l+c9A+3DsTu05tgldfHI4MZEALTGl0/ZJ9+gHCiZERI0xLJHDV0Gs11eGCgvWVheIVdpJnG3gopzpubAvs+kyNjeiuvqtLGTgs70QxWGRqJ/oFwCs2pDC/iTHMnOEaJWkfceUDCIdiYMQAkgkkzKMEDRaxWc9chWodkbj8ACHwEO8pAGBRnRJ9ram6G8Tc0S2H3LOlFS4NRPV70sbDZW5gtpEe1PxQoPeHeOzE+z5OSgknHi6c/U+KfXlickWiFMElp6Syt9AwHNNMEWsUp0INfpKxU8Rl5Jvu52ZmWK1o7NY35Ho7eWlkNrf6sDFe3EZmMPoENToBFkYKEPmZhdMhFddtuKlgzfAllWvpLGPRsap5rBnjPocITF5Skp6apfqV//UCF57ApS3t+esGl2VyMQeFFjrR6a35hNSE2XicAwJpkPiJp4dAYXPX0dMEbkGASzTy0z8ccNoLCTK6c3EgMDOG+NNnFKOc+r8qKMqeyHjyctM0oLqiwdcrPzRkc6KbQa2vLszOTh0cG6urOLSzOZqQk79nUxCshFK5ctyHRFedpdXUlexg1aVVXXmMLGwPyQ97M1AYdmerONuAeq7jcBjzEmGbT4x6ERh1PMBzmI8BQhCnNhS7z3ar7rLPHuUarwsz0pDgXex3t2BNmcebc2ZraesnHbNGdvVieDHub7Iws+AOPDgleFKXYHaK8CGb4MagPVIPQWB7CBvIZ0YsaWI18BxhUewLbaIXx0NGyiriIpQGKeBH1zdpA+vFdn74YXQPUF4I1BM4EjGZ4RBhuY3356aPHJaUFrsGqqnTre3N+bqYyxLZ3MpPcuz6rlPi2ujGh0paUNqPQRwB2hik7M5uTBYTEm5RuugbcCZZQ6qHKKmhQ08dObHqQm3jwhUTOZjA7YFUdoQsXXmW+MAfr6iquXPkawhGisKAYUUisd3t6uJ1qmChm+vbb78rc5Yxh/Xd196uBHRNjd7SdlJLR9bxbkXiX4r377rsRB4Cj3vMYg70yMjyKCaMY4MRVyu38+fPOGDjZSf/alUNTT3e3jB/L8MLiCmaQG+MEDelj/5ELaWQ7+3ubOzMB1dLeI55dGFAIEmPDJJ2AiFENGPAcEbfoE9NBOxSReDAzN+0thCMs/HYaLC0u2OYgBPAEgJBM6TRabzTcgTXiQOHc7LQUzAMqNtdWqacVt7cr+aehvrpLocy8HBb8rCvKcnPdhmEURWlZacaySYiygeWZjxNFSIRINEmEaq4j9gcrFkhiBdzhObn5R44cMwuJyNjMdYEUvS2KQwuu0VXZ0EaaVGJLfGs45DMQcWZtkC7K8M2333r//V9e/fKqiYyOTZjIv/yX/xJ/kA5DsxVwMraBUnT0Vz/EEHUYIhZ7v8r9g1jc5ScfBrn7OxHOdFR3BhX0Gk5v9jDeEkagJwWTLfnWjAg/p5MOqaLYnj9bXFGyr1F49QDJRCgplPe8pNqVLEoxVecBeBZpXWAAG2BOWocSKjs7vts3YmP7EAaKDzpiZn+1NF8URErA0CTkgohBLDPd1IBqIlSi80tQND4xtrEZEiyJAAx4ggHY9Arwi7xjlaCfSko0cGmrWajOKZNN5zqh0HilsJtj4o5aqWtPdRhLVzQATYVkH374IQ8FqPRMCQCe4jUE84tLBdK015uh/UR1QI7vvmiMMaCUoKGXM6iGIzKGIH1YBYnh2etmBE7C6AsIo6seFM0uzMGYluIGSr9QjPqBK+kxcGVG/kbbEzSD6jmiUYOPA/PDFcD0iYJY65VXXolGTnTCd4CfXSjkdBx3gNPVqkJJ3LcOOvIO57am5shGhzplPSVIfHXlslJM5kuaUMQxXv1AGgvMFZ8ma+MBXUEhjIw4ToYxLl++XFFZabIyqLGcGWFUPYAZbLb6UGqzLcKGE+grSyi8yTLFmbSQaDhfqPNJNlqDQ0OKuPKqooD0M+k3ogGamaClhEp5PZLjziyBbUPLb4nGOiK7kUzEEvXq6unMj5EWlepcNYmAcATy8S50mQ4swUD0uzGhF5OERa2+tryk9NNPPjILXq0bN25RWWKVtXUNdhQvvtRYOTiM8/kYuP68Ar3IAYHWAgrZQLAEKtCaMnIQFtgoKS2h1XG7cdHOuEbERVAEPGi0LcEM/tIb4LS46Na7/poXysKQaLw7i3CstyJ0Tya5hlZZUtqSlhYFr4yMjWrDVce4+s1HH/Es6KHWrRQZ2fy7WN3rlEOEduV42K86ieqrH//4x7b6Eo2QCQthWnsAeKaczUj/pvnet96jZ3RFWJwOpyhMx1y0p806x567E1oQqbe/R8+2l/V1jUbkQPEWV0vw5O5tP37wWPoNzAgSPn78SD1Hr+NAr4idQpHPz372M5XBUOf4yeCBRi+8Z6NFLuwSZUgqPC99iMGjsSUazKpaU6qKQBxobCovLWFxT42PK9+0trtRWV0B1SbCfgazSdlUcJZBBYTDgyn4og17Q+SQHjAvTzRANa+AwRBgAACuJshw4q8zQ/uuogqB4xQMTy7kpOVkZ5eUlUKX5BQWztreVkZqSMxWbZSfiFxzpepKgpnzVw1NjVJ/rbm/fP+DuoZ6PCxuIGXIk6Hnz6HdHsD2FV85UCg/Ez55K/2TFgUkNxPdAiTQekgMbcTh1rEcSDM1jK3gKVrYyBk0yv8QBXiLgk5Q2ezELrzloT4rqtz/Ucka0Sc3Cm3DfoYH7T0J2gEHw5HuomMb3hNo8k9dwKbv0X/qTuyDheSSbcrIQmifGB3p2ZNH8KvT5cV5N9KpTUlmsDLOs5wQYw4GPLGxGVlI9pSx2aGKnP8CipoqLJ5gmBbn8zy2tR4yVYcG9CyvXaiOxc3DAVxJ3IsrATVrq1voxBM5M9vn3nugMu7tqtUniU4H7cP+ajukM9lzgd++39RMYcl9ISshup2VnVOYEjxqPnAHEs5pUzBl/1QcXR2DfCpgPwaK6QiSZtYO9eKeRIn+6SkJFPpGwA/ux66i3guzYUX3OvUhUwlWdYutCUhUrefl58C2LA4/AYanP2ZlTWpYJMoi1qziD7N1W46W2FxpsVJQafxwlmf3rDx5Ik+yq7AgVzE07ue62ubBwd6t7fWSkoKJkRGH9oLdv7tdlKeKQrZFQkR0YTZcQQU2OjSxIZRykldKrXz22Se4h0lhah9//DERsr/DbCYIePjEu8iHEP5JPDS2tFsaqQb4gQ3klp/DKuIDXplcURS3pfUIw4hml2Fpl5aWnv3kcYeMg5y8AgKjq3Abxabq4MH4xnimryv9gAoYRvEEugLdI8+hSOozkLSHQ4N67qEvoMLKfvI6aKMd+gL5etMVNvCJMrBXfKL/9MQXJENoPFBUXGwDxrusn+0Yly9WQxaDMv5oG2501pxmEAVy+zeFLeo3OTpG+q15hoAQm7roXsutqAwgi9nS4lJDU7Pbo+Qu26A6y3GsuYkito7++le/Mgty4S/cQibNSygsNvjfF1s1hfDQoryiqrunT/qHINj5F18m9jQ7/x87lSYKWiZBJilsJTYfaHG011Z1ZXXz448u1QoppmY4DEp/MdQkvrzz9jeZ8/09vSLjDoeIz+xtb8lqNXcBRmBYadwt73wqgXcqtK9/qLOrR0DfvrymrkIqt7s6pP6TGnjDw8EIyM0ZHQ9RS9hmlGE2+E9wnjGU9Qy+bQsA0uAEWAWkf5IdUmZQSEM4+Pfc6PgKnxa63yorg0xoY/e2trY6NjJiuyIMTRuHU7xjY8pQNNTXuh6lqCCnpKhYdZ3RseEnfZ1qgrXKbmqsb20JcZW+3t6R4WGZHl0d3XjsyzufUy+0kE0LtlHVGSp0CE7mKSxRyjSJtAQq8oVzZ+lxuFVTxXmQ//gf/6PsdoyDTJRPVZWMlJQSAY2tLf4LU8NCNoq0AU2NH1gGSDky5o7PZs4ilofNBueB2nmyhsza5aVqAXX39iDo5PSUNcDS4q3DrYfcxUutwfCz5x2vXHy19XCbDYnc2ddfe5PgiDbgGYXmDer6Bbi1HnQ8eypJlwnq4LZ0K0GZ+3fvzkwt/smf/nO3Diu+bHmjo3xxTol2J1K+qGplN8VwxG8W3ZCjmp64PbNVUJR//eY1WyNCxDExODyImlQHslZU1CLl02cdcGVDiIGtMdbdnLxs/IB1DxxstsYQsf57fRGtslFTdwpftT96xNEAz0ePHbNgO4kUu+YqkARpUWFBUqne3V6b23Gr61nZuxWVNQ31zYIY+lE0EcIdOdnZ3p2bnc/JC4fCMY+Cf3sxe/0DIdFOZDotPVmsw4yiuzjcSM/AIduImsJdEIXxvEhdgNnq6HxO8CCFVOlSiLW+WfT1YNaCp/SkzAigamN3h0kwOWPOFHA1ghoOWkguVzSbW58mDiF4Rm/Hj52gwPG2zSE1C0jYAJIzJMtLKwuRfB5DA8zewGahr69Xzik7w7iABy1HrBH5pBVqYyUzL+gEnSPEs2fX+H2Y7w7h8JpDVHJ1QnZWEUudRyApI3lhbm7cDjlNBczd6cm50tKyc+fOiv6xX11+p/OJlQnaVYopu5wagbSxkXFTAydqOhqOYb7//e9PhYP7cdzSpCMnW8QmP4hVX98777xtykJJfHPy/n3E8IeGRq0CSzZvY+P8AJwCtGUF9tvcvH3vrsv4QkpCVnZKehq3FlwxjlWneNT+AD65zhDr9OnToi2y01mWMDM1Od7SEgyAB/fvVlZVQQVHtXx9sT6InZ7uAK1NTiT7jpLnc51wBNnyQQdas+Lidw8cbFW05dOPPyJZ3//BDxS5syumUY0u71xUoau3j6dGUhCZMrWC3Lq2822tLaFUv1egfajfiZRcNW+kvrgmnHJbml9KTUo9dfyEkCAC0V1ReUc7nGlSkIxjsS6koZex7PM1o8oAjJHoPZMyIq1r7qrimA69BAP2vZBJmRg6JcnFQzsKNhw9dkRpVm+JI+lHuQCnmNjWNg+HWw8SW4dzUI2RI8hm6dGPZR0CsbqN2W//9m8D2xPP/92/+3cSwICEviYIfpCQBQYDtudip7XkmuqctRNdeaOavPlAk9zmvp5+AnWopRVd7A8fPmyHNCwduY522ZZPn9VVtVY6p/mZyFjFQwgxKcRVPTrY+lNhMwkV8oXIiw+daU20U8WTff2D1tSzF88/fd5589YdwqtumFG47rCNY1dEWN3IFCc8FmYEQ6DR9fB5F0Muqz7N1FJPodXW1sGY+g2K1wEAE0bRTvObKWVFG8AzSEyZCJimLwgX1i8BH+Vw1KZUjXo/JTc7J6ssy8N1hS4WF8RD9CEAqxhR//Q0XaqKfVFJmUUYL6qrkZaRKSt9cTnc5ltcVvr7//wPOC8etj+anpttaWour6osKixOSU2rqazkRKAzKcCN25so6OgUwMwCuizzGE+sGMDrK+5JYMaGfBCcaS5IYyUVR9HY9/DELfcrK8iK66wI5mhl8cSLPlFVo3CIVyzftg3t7R2uWHCTpGbQ7sUE/9NOdxjFx3f84WWogRRcHmWI6He4S40kVkbHMKTX8RyNyUDBJV6EUOxo6TUrv2I1G0FJJkjoV/1YCGfnpvPCKjKkcyhQpNAmwQ4Bt5WWlWxNBY+RKaWkspsT+N+dlA4RqOwc2Uu7+/EqpqlinpIap0CEGvMQBHeoaKzwViTE4yEEmQukkJ/o7Cjn7JQ070bnSDUzOECFjbCU2eknOl8Ngi2SGeIAKCrZRw+egF+JGN+bD0gansX0Tn+KFJM6oyAPcVKOAG/pYWlpEQwg0XNv75iuVCbxLhSZly/QqENrIPZiZ/gOGFEncSJ7D7FaNS9sFRy9N4Sch7KScCPV7/3+P5M2PTc/WV1VVFVdbO+xtbE6PTeR7ZzH7BzFHVMbcm0dBFdVemJsqrmhGSFghi/BFNwdY3NiefU5d+5FkIOQpnjzzbetjgK89g1eF0SDH8QNxsqkEEQiiUJWvAhsWMUbcQkyx/PXWdRORynU0NcfvdRQfOZA04GVVcdcdtmOaxvODm2ooJKWlb+9FytNHKWidDGQGUE+neghOOGf0GIAKAKt1UVLD8EJjRpDLHPEYuyJ1z1EPo1BaEbYAFzaQG8gViSm74vpm2aU4n7F5961i8O6omOO/5oXFWNX6zqQ6pry44dbXTM1Pzc9Oz3+vKODwKsIxPEsHXBwbsYhORlc1RWVUu0xndJMzBT7KXQvLC7lLAc5pw4dzVYAEnOB2AOMEf/ee++BHEjAiNr95BDnmH5EeW18eunyUZmd+UWcbgtL44IUlk8OqonpKfbZxHRImXj09JHQkH5u3bnd1NxCHQssvv7Wmzabzzo6cUtuXmFq6oacMSX/LIFXvv6KXnPqNHpsCMKrT5wCGHgQqKiwrON5t/RB0xcl2uwb6uxVVDTu7Nmyr65eQ24ODMBjAMyA6Kap9Js4VWrEgWrpBTyEa6BxlKBQbV6QTJtTCOD3FjIhHDJRcxTC/OKcGlbiv1G6cxF5S4wFdbBuNMFRFMdJYDHM2pqqM6dOFucrj90fMjLFvKqryksLGb48MkwKuwLHo62gDiZakstLyqF9cnQks/kARCGxqyX1z2qx7lpdMBX2oEyvfH0VQnAIx7/aDGrPnzh5+tKlS2KQPsIVpABB795/WF5UcvzE0YJwWUSis5tyiPu6exgBqoGBWRtq8NSZU2YqEnXj9q1IhQfJAMscFvhBgKX1YJOM2Bs3blDHUAFXouGwB72QQEXwg5IF4JE1ibA4xKlK7OHD3LR5oK0ZM7aU9O3/6f94Qcqg9nfv3jO0+NPS4rx8y8mpUQxm48938OzZIFYxzWcdM4CECqcJZeI863gs3ck9qQiHOmBAFB4oa+Ti4hI7g2j4gArSIIpIyk+M6gpjmaPv3vUrsCkQdgBIYDX6wQy8NoIxuBrz81vbeBAcatPCLwdde37ByspQGkXPvtPM3b39R9oO6VDPkGAUVTrD3iktA00ldEIC8V1fX56YDHkdA7095AjwXqFskQDLERODAsx8/eohbYbfmCY8FID0BQ+YEdUBTq8gogaMJG/50DlIQ80+7+zAGOxvqNBS2N2vIAcesL2IpaHah/X27GnHqVNnYYwvPGKNLdpcY6HWtkMuFmD6UBfOFTrYwI63vzWiLC8Odb0xrO06pCvqnJRhD+LDC2eRZQGboFWDRnJGyOsLC/NWB8ZlZpbCnUtumZCNjRulm1qs9hbdT76qDYQoG6UOIxMc3XnwXecqSdksTIq5LPsroGg3LPSoKFsjac7Kq36GRGdnrJecIMLqEKjeizPTHEZMEtaV6nxTU9Orq3camw9RDtxrSnI7t+Ps1MzUNNc1RwPPrjNyHU+fuG6Ns9Mat7C8hG+rq6rEJNHFEVIsRxsgBFSYb5QJgWSyuMhMxSWkZExNj0cUO22fSKfhOIEsnjgmLMvSzRLwX1KSjEPc2cKAJzsnTwfNPLuwyAdsJSopTvn88mVHQkHobMfS6pr6chLQWw+1DQ/2qatmb8y6gTFJHZxglmNUgDFyBw/SrKU7SH1RJhiQuAv8mAeQxqI9yALCqdGJuzjs7X4Z/RFDKPi/NdObKZAj6KVPmptacKzp6818IcH0fRw15unLldfr6EhKCGUvLC2iDgEhpE71eMvo2Oav//YnzGtpMPgQugzqddzIcaB/o2NXQQPgYWbkNgSKIyVhxFTcTIquesXqoH9LKtjY0GTNdFgIzFBrq42s7FabH64oSNYnTv5X/+pfSU7zllCPBDBL2bHjbYMjw7PcjbMzuMsGAH6sJtLMHOTQp8WFonNpoF+RG8ObmusmujqemVFBcYkS0le+ulxeUSPHhOdFgVHD1URS1dExYCAuxPwPtx2lxh1GIpIAtryS3L4+W+hwIJ7ocQTDie0NnwvEChqYGmDgQQN9essEvYhbdEKc0dEn+quyOPbMck7X3KhtV6aKtrtOU9MFO5AvQBKzJ9s2YTdRnomjGyo5MlCTaQyJF/EJIgTcT+5NDGl1FTRb0QKxlfTiYGl2ynF2zsgIVWwiWSnJRxvqAaZeD9hM0Hd0pPQiOSXbPNBAZb9aOCIlUYJ71HqN/zFbVB1BIBqhLNioSsS1hhIlSPbcP83LJYx0kYPvPobG4TYDeEbMP6gvQ+IP36IQ+G4YSMGynsCXn/TlOTr54pAotOJaDTTz0MfY+A8QkGgaRrWbNBMPXfNmPyoO2N3TMzo+evLk0aMnjnOuKF+lB4s6bn76+Bl9RyMXpxR7C4P6i0dBbCwS2Hr46NKS4oaxDgiH2w3nFpn+Nl5rbj+dmSGltBukaM8hDQDgyfsAno/nGBFI4HQgwU+YWOdARQZrsElhCL9qGZ1UwEs0jWQ3ZJUx+xztIEKwYQipxl4xWXjfkX7AgRwuSeCKGOeVT0vmpOHICXsMfRI5q6Seh4fXINbohNPHiMGmdOPYTshZsgqzqDWAZ4Fu4QLZD+wYuQ9Pnw6tb7isJ9GSwbvz7fe+6SLY0tKSgcFtV/A2H6ibmhjuHB0AgNyZFBkSTl5npMr9x1gRtOyub63vx+3PL8wTUSPyPTBVscfk8PSlL76gsH70oz9GQdaqSkZ4keqBHKDChlmYMrkyBdO0jgJeY/Lju0ult/aD+4cR6Rhfa8tBGVMWV8cBY+OShkcHcJZi2S6jUSoESq3fCtv6gjUhHz6jOEcFD9GFGEMCIP01roF29lyqAC7773CPJoJGdPSsF+EKGj2M8rAeYDLK9F7xXSceGiVKVnPxir96MITvTFhtPNEArkZHho1ysKnxTPEpZexE+VSTsLnirJyfnbLeRG+TnZmZj6T/qQwRLrcnff6z5D9sf8yr8cIL57gMecNPnTjFYVZUXKhn2p/6xskkEAKj1jDziIjhcPoxuq2SoqfoblV1fVxCyvqKTcU07c+8Hp+ekndUUFh44eIFtfzVwndR4sG2g0zA//V//X9/77vfLyotcdTr6PEjbsPh7OPRlBgtqb2munSgv0f6Ch5oPXRA+M5wLc1NMDA8xJAeQmidFOSXXL9585WLr7NTu/oGCZe9kaSjOw/C+WALucB9sP9EKyOFUNCuqKQI/1sMiMDKWjjFgT240tGFcBFqQ+B/hIBhEo2vKGIPjagl6pCgKFPF7Nj9hj0/PKCXaI63hNVFhIXDVO0oKy1uPXqkukoK3P72JhW8IwlrciJkcueXFqna8ejhvba2tr6eLiVKLY2WB9J59/bdK19+xRrms8euso7CcIluzt60LKGRXBd3PX722Wfykn/0ox/95V/+JYyB9j/9p//k+K+10L2VMrbV2v/jf/m9do6v9gf1VTVmOj89bYFcEcVfXXJMHx2vfvkVOTp28phwkGki9JNIUVc8tri8nJ1T8OTp85OnT6M+l0F9afW3v/VdSTuMY+s0WwFXMz0tXUEjuTFibhFsdKBTEC+cPoNhwpnCve0qlacqSg3LEV5XUy3IoOhZU13T0SNtF195laaSFiK+c+3qFeoUDJy7Xd2h3hQ9PBrK0gd7HTYsGnW11WKwEjJv37ne1NTwwtnj9iSNTbWPHt/nGbVUUwJjY6PgAViofxqSIPLcn4o07FRWrERNWDUKDAOVzcQV8p3vfMtwIPFPKWp+5XyVWEVC3TjsSWFhSL5fXJqHCkIHP1il/eFTvGRcRgnsxSUc40fAMPwIeuNmUDeys6czOy/b9lUE9fipo4bwYnxCTPBihjU9uCewECvcEug7BrMN8DoMWyx9gUbM7y3iLsRB/apl6UVJX9DCB091WPHU7mQWMP2pBaoMl/L6exFObGUlPwgH6Q2TexI8eRsbrCidsydc13Xk8DEyiMF43VoONnOa4u2e7t5DrQe3tqX3hOuiaSTGNO+dsJWwg9XacsmlDQxLK2iVEhLIragspxDECtiRRoEZZx5SXICTleFSNqYwFUiiOXqkKgVVyduyyrOgzF+oTYdhBH9o1K31zcl1CRQTDHSnG6EdD6tnZQpcfDDJ0Onp6sLwloyu7l537EC+o66G1icpNnFxxcitwEWc7pIQ2I7omJu/zwExPDrusE11XS0bjkFACTDAiK2Do0rzWXTVIfF3fGTYRni4b6gs5MGHAx5q49LejuRiBgowIgjJAFajErdVVDSYNVZxwoi3BYZJd0mJi2LdbTf3wQcfUEzO/lqbHEjgmxoaGsRm8i4OHzmBT0ywiEM7N9vhFnE8ftaE3l4a4MHDh9u7+8L7svJeOHPq3r0HapNadfXT1dXNzuTa0Nvq6hoY5FNYmxhEECXO0N0dcvzATIORWfoHA2MGD1HNLAjRG2+8gQ8tBJgf6oBNyfuCqUgxgeLQCc6mSGqA3ay3tMQS9g9WCuXPKEk+wfGRUW4FJxl4jlkRSuVoIyryqD2exSm8IDvlo19/6HJxbg5s6V2DYqGvvvrKX08ABiFoh1J4lU7wnLZnUIokG5r5SO70Y+5wbltO6xJq0mFeElf0yaX63nvfFrW4du3a86cdTqwiyr07d9UZ/+///b8rLCEz3tGFjz76SHUWEtQklNzYSAhNmcNRD6aMppDADAUJIC2y5kIBKuBWU10pS3N4dYD0FymvHK8mWPr/6z//P2dm5yEEqsVyKRNnG3VlgSivrs4NhdAcwAhnZMGvjbMoWJrPiMxKJCEXwlbYQ3urmIwpMEM4qsE2ibYeRXHF6QC26FFmPXC2hgOZ6hAyEjZsCUQD1JgPVtDzzi7FOXwUooCiickxExSYd0KDwcb6tw8tzMuvbWikr6DCNZGzQn5z87YTCtrbEoiwUbnS/hinVAqzsbe/L9JJEXgsfOgFgXSpZDkowmCeyC3hOCgqKqSLSKVmoso2fh6ajjMAxBZ4gKdDqAi7cKrAOg0t2MYrOiFuMpEgwebWiMwwggAVVGUCSutIa6qQmoMdXGIYfzXygWV//RT9dTZm3wC0Kopq5l2w6ssXIIJGP9pbNgyvN5UrXDymAIIon67wH6Of2tpNC/mvaIw/dGjZBqv2yGEtB5Va5sBddHXN9n5C0hLzeHp2Tvg7Mytb5JjvZ3x8WLFqBxq8SO3YnhBjGMQclAvngE6kdcgZwb6es+pduGhegSSRqj5Q7J8+0OdDjEFoXngl4r+ZX+Fjlf1f45KmNA+19Kvh7DP7womxhN0YcbeQCkxZ0OBSrNaWh1i9pB3eKQiIDepyepoc6sF8kcEouFkKnQL0meEyS5suoZVQrwEt/WoHyuUpuRyiZO6UFFetri6u52YJIFh9LXLr6yvxCfv4j5Xy7Mk9a8zyikuaN8IxlZwcYVNuD8f1wg0pGWnSVIihzi3ksM02dTrQRsYcuXNQBP49p8LU25oYHaK/PMQcdAS8RRdUxII0AgBReBSQXolLSp2S5dXcQpyYa1sb2/LkDrS4ELH16ZMOO09Gg9uS92ITHREzR/X7nOeWxKpbr+MfFIcQI2Kb6D/BidPg2RDGUkxQSyiCUsjUmH70ehRR0cVMAyyHOv6JYX2J/qoTvUV5GK396qMHv+ohfCIdus5JnTizU7MKXcz0yy++SElOcDRjawO64taWl8bGh7My09GLToGuqgp87myJfZRLN7IRF/NQfCLF0CiE29XfVVhYxO81Pxf2NhSfCVprX3rpJWICYNKhJRLgHMma+qGgbZVbDh5VvRHM12/8rQ5/8MN/5i2roC2EiNnPfvFz1gD3IdJv724xzX//D36Pw0PyhrXQIi1wLYsJmwmtrq4tffDBz51UMSNWmmLKymVaexxzkKcnrureFuJGMd28fQt4Dx6027aVlVeoL3/73n151+7Jc/SZ+iDgkK/uJyyhjtsAUAFuqRWkAS1cwjDTZGNtE6hGhGpPTNAKavo4yisWJM81JkRe35h3QCpjfmmbWQYnURmM0os8IxOoDG3KvJv+yXlckJNx5HDrgeYGPk7h5tVwLj9DNaTkRDGrgwL0OikuLMlpzLkubWlpSVU5ZhAkU44AlVsSFW0T54x05bt/XrtxXViA7vr1r3+NOhrbsh4/fuLLL68gq82AlTviKXCZbrmFQc07PGa/g4LSHswXTlTrgqjRsREeKUae4QAfyQcJ1QIsVPwXpmZQlUmJMEJQeprRpXiS+4O44Xmjm7IlAUKMoje0Bq0sNf3gVagjL/ISbbZtdQDM3WUsbMCjmZqcQBXIjx8dk/dBme+cO3dWuFItl2PHj6AL09C+ntdZdYH79+/W1lVl52S40cI99VXV5cxK0SS69NHjh+BhB6K7ucOknYmghxe5tE3cOgROBAUM1EE7ReGjvY9/YmnmrMunDPrZpU+UaWI1OVjI1Y0xfNS1nF2SzrTGgqIxYABv2GnAFVlgT3vR0KZM4tZ6154+fQI/bF82h5tPHCFjpoPExgl+vIujwGNozAZvpAAMmIe+wmBoZPTRkYGWgwfoKzn6yCHrFgOLwPpr8xazGCOaZ4K7/ClO1TfUqaFJjWgJA3pDawPR7fysngCVaaV/9pbdy5HDxz/55LNjx47/4Ac/fPbMrmY1EugY442yYEMX+G/fvikiZEYWWKLthlSiyoUvIGBZmV9YceulidC0Vg3R2hdfTMIqXNQY1eY4LilkotprGR3RUR/kZi3aAwzUASTwvA7D+mGIWIZwJh7r7uyCBJqHtV5aXGYLpBMWDK+RrSMFm52be/Xa13z5HG3qCljevSWr1jJBUVNHglEGdcUYWWa4H2o7shMTu7oZ/Kw0PLuf9a9aLhOqpLysprZW+RJRNOtZlwNFSwsCERZ30mRckgXPhBp67aP8BcDwcKgo6AvgeUkYUHvxe/lFjLkizlexCLMT9xDCuvjaK6CyXLOWGbImSKvYaZhCKJ0aagQnDI2OAZuckilnHA+1tdoslVVUtR4+kpef/6tffagUMvI5YWiaWuK3iAEjZSsvAlK8f3755ZeILuU6aqXhBLjVACZNIWoVEEBGPKGGIhBaDjAheHAdRyJuDKmA8/PamPLTp88wJ8coqJAMS+jH9PGV+2QS4kIWB8Ihq023HiJ6bw5CEM5ZG88tuDYAzof8+Z//eWl5JU8c4GHV0NqbPQh9xyf2liaiN0eKqW7Ak03sxFhkxVILUC3dIBjWIX+m9spXX3lC7QA1Pi6eHhti6PT2W2iMayL+AptmEDYnsFjL1IgVHj6QfuDhw0dQYUZy/JzFF9sADLcjLpWq5CcnxIylH51IO2k9eKC745kT4y4uf/r4kaTvvKLisZEh3IWIGM/SGWY0Hw5ZqfwmoPT55S/gAb2Inhnpx6rHxCcs7H7Wk598sQ0AhsnCsL9mp7FuUQ0+kYbImCZEERaTAqcPaS0szsPhPiJsuB2D8SXJ3+PlAQmHF4PqxKnTzA3/pJ3UYZN5YXauQAbwSOTIgW5dHwwAZM3NDLX1NuZDopHErbWF+QPNTcB42vFMcp+54MzobgSZjItG3jJxuUZe4VpDC7NT5gHMUbVmu6UlEnvFvEyHPjGcpeHQoRbTxOf+YkiOKmcvsSuhxpwO+3lFP7AEDxgvbDvM38fA/vrZDz76AiWm9PGT3n18yczK1B3tHFAfuSUA4uCCs1N7z60BqIWZ9EaPM7hkkapTMTunGGJOT/+At/Zjtm3i9cZYt86pomzcaCQU15pYrE1VSEUNVQKUniMzLh7iDE5Ll0S7IyQnWZ2/sag0ETfDF9TbvSmVCFqHn3gvZP9zj8kGA7ujRQ5IIZITh/iG/8wnSnvAwIWP+RJm7BKZfXAJewK5rqhxGF6Gokrx5VXl5JDPiZICNq+8q0MRyY5ZyX9g+7hD3U4BeTCHnwizDmHMATtcPjK6DI0c/H6UW8Qfubqz7tRIbEr8Tmz89n7UPN1RiMY47E4XGaqKQhasdqqbv/7663YhYJNr4whZelp8Sqq87bRjx13CtwhjifFJFtjxkSkz8k9AHjze8njpCU8GblRHgqK036WGJNGQw8aG5qhIqG9AmPNzuJF24Dxqi/uLRQDsrxdRHJlwGztVY3TPzk9Sgzw1M0tq1ha/ihPIyakyuTlRfvXhh2pdi4JZDbzuVICMRmy6FxNnMjCDC/GeL1Dqiw5RxBBRsQQGHPorLQCNjIsWCA0YDSIUC5FTJPNEJ9GHpszmj2AY7CEpyCvw7y/SeBJVAb4DycdpSo3VaTEQ9SQKFh7Ghcx4mSRu1VVz3zGAvR0qI006LJPFRYOYpLdvCHfZ5KpiaaVxUGFhcdkU1jZmnl27oZbZ8+5uO5vjR46qzWlQXkOGCFOPLiAdMExkfEzcP3EjewIMbC8BpV/++kO8546J2vrGotKyv/rJ39jgHWptkY47PjF67+EDm0D1cGjV3oF+yxt74tjRE8trS9duXmOeOqLQfKDecIxLVxbkF+RB26effozc6WmJLu+8efO69UlULTu34Omz50ODo9Dor0U/L79Iup0sAIV37bQnZ6aVu6LGpM7YXmM9TlxBiYhm2IseSIVVHpIFl71F9pBWfzuiKIGQDMU14IvFNjCNjpqZNQ5E9/jEON8dW5e24BOllxsZ0MtbOskrKaoVga4ol9PCpZeVkfrpx5+4r5SHj8FETGhIJJMn0Lu29sqFV6XATU1Mt7UcKS0qtmAcOtBy/do1xenYynJagE38zZ25duTYUZBszM+99dZbds3YmynAKXXq5Bl0GRwa5UhjsqPst7/9XZa67AyWK7P70cMHLmFGNYFaKJWVyhNmE8JJaU3Ny8+tqqnkCGTosHIEc7BX/8CQWgVMW/xD18sHgljZeWgERQuLC8wL0mQ3wpwV5H355ZexqItPcD43vUM5bjPlGDBTAVjK3a4MtGw+GINVYfrA5LH7TsvFx+7yhDgzwA28vLDQ2FTv9srrV6/I3a8sK1XHWJRyaGCIQpAL4mqRre3V3ALHPBbkassrYw6GenspSXWNDe5Bx8mbDt1sbdiHH2w7XFJavLa1UlhSNNfZ2XigiXKjCsYmx3ML8hw2rW2oI0QwvLC8iKNMgSess7vXNJXG5JAeHBxI20phGo5PjStmooS21FjeGMWCCSv3sBNOMk/s4mwJWA820GhBugmI+W5tbXKyYP6vrnyu8tzKirruLruIi6418oxhA5tBmvWSMOJ//IYDIZli8YX4DA+59mGBfDkSMzs3u76R4i3kI5siAzZUS8tZlqqe3k5OEzY9/rSiMemsZfqxiGIbhMAAPuZolTUQl55p4liOSTslvA0DOI1yjmibjKfPnqAyNhN6ovpsh2CZ8whaNLBumpe/7g/GVCZVVlbtL7WmK0sJN7YDb4cONActGCtekRMCOLu77jUDDD83I6myohxI4FmK3MrChhwYGFZH+v69hxYgfKJAs3Fx6dDQID8RhGyuCfmGuBNXKLeF2gUwT8WxVOlA84reV8BztL4+RyKMxW3PhoPPixcv8u6Fk3DKfe7LZJCVM8OklobHOiRxSNz+4GFRSbGrYXt6e08cP17vmHpVzY2r1xRac43J7Zu36Pzamhr3ubBsSOLK0krXZFd+bh5xE9lLSEoor2O8uRtrpre3m4XCJIBqB+ScfACn+UILswVItlgSab/xznsr6xuW2oL8XH4c7qCm+jorjupkBFD5EyWM4ZNnCA8gLrN3fHhofjbUTq0ok6hdND/7/Ob1W2ghJ6i8tKK6ciBgOCc/I22y9WBbbX2N1Z+cEliud2yG4SGUjwMdUZwI2Cpw9LC86T17af+k23UCn5cuXbJCiYlF20OyYJEp0Hi4C1ZUC3O+SBUErBu3uCQDXhsrDhOcrLmgmgfB3ex8fHfu3EICETbwYBJrnwaAQRpsxvSn7uAElQFJgqwXGMastafQZKKKpUht4oCnPWxWQU4WeJejh2qUiEWd1kOHJUb2939pvs4mMf0rxCHV+kuIx8+Ogb766it3H9xvO9BkUWOqxu2FlJW7wWldJLoCIfokvHyRdP6RY8eZpNBuByJurkgMjU1xOSyXlJJ67qVXFHQRHOM+XlhaUmeWijB94SbLgQIMsGRDi1f1KW+N1ccFfHXyhlWV4EeWqeBycmLEfBFUMzYbxJJuWsL0KROIhRzo8gqiAMZ3bUyWq+ju3Zt0eGZGFi8JdsJvTryYL8aOjU/Y2hnt6x+YunWb34MU602qMQz7EH/cCE6aH30pDfjE1R4KQCEBVWYnUVdR4uJbOspdTI6B4RD+HsYzungFetHaYWLYiy8oAv/aP1X3j8VjFhSCTBZMh8iaCPTSJ/6arCkbkePYW/hNh8hBC4nlYWZeV68gNzoK4+gHP8CAVZaJtWkxk0vKEpUhJ55ha4KbQ2701h5Ky0p30tlGB44sxmWR+gze1x0+plmgz3iwoEcEsK0BEwVlb/qrDz/KKwiKsqXlgHwN4VE+M4m2TI2picmunn6vMwyKS8otsHYcoIf3sJ7FJ84tri6PTMXFJxUWla1t7rphNGXPQd5tnMQuUU9mZHwMEyADrEEZcoIEmjgwUMI2IDvLYaZwKCdyPTP/SWz7k/bC5JC5BH2kBeLCWHHBs+sJDY42oAWTLyJxfnJoOp6fY2PN0svgiEC4Jk1KGQdOS7FaqB8ZlpkdzPek+HD/ACGHeh1qjyois/gP2XCzZtrPTK8AyS4uVsE1sVUxFrEKhdBD7dj9pITguSdRGenJzvi6CQQJZKcRRQdAuX947/ILshTX3o/ZUrHbbVNq6pnIwtySmpuT4zPFRWU5WYliduIAkTrTSqMuG5FCHxwcevToKR2h2LlX8Nzv/d4/p62kq/IfN1ZXF5cVK+QsUwg14bnlUBsMw+3E1DTKDnR05RQUw2pFRXV+ccnC6ia7fz9YCVsKGe3sxeHUBw8eOtNhuy2qax1luZaVljlaOjjQ29p2hEUCw3EJ9SYoUmHunGHjExM8edlZIT1uZ3vf6YG9GHvRGC2VxrM3jsobWYXe2dk5rAjJvtuWogh6QThisfO9guK6jX4g3Af8JmsiXvHcX1NgRJBzr4NEpo04gG1krpa72wrOJCal0qGKkO/H7bn9dns/fmZiCjL3Y+y7eDclruzb9zsZ7BAyS+vO7dtHW4+6rVDIGL3AwE9z5vQp3hfuGaIOABrBRFzDDO0UMQ40XzqR1KAIS50LVs0KSpyb04o6OTb6rXffYXbTOP1Dg7wj1BuEyLy0z6TIWEuYX66I/S3L7eKFCwSTLEjEk1IulOl2W7aLBFbzzisoXF5aazpw0EERdzsRHaHCwtKKqYXnZVXVLr7d3IldWiaGSzV1DQNDYzxw7IypqeCFgkNIAzAhIumLS8vUw+aeO9OCp996HLOrClXCxNik5AftQWVGyBTsYIfm5WuODJsmV4RIy/TsFBNB3gXcmA5uIW5ZaVnoq4JgkOKFecuD5VBkTMgCPnm1J8bn4lz+uxXKgu3vCp3tuy7HoBzV0nFdOEXwHWsReh6ziM3MJsTHrq0sth05CBj+Kpwpk0SkmwfxwoWXZBGYFv+6zZ4jhlJ6AGzBm52fr2toGBoZY0sVuZ23u1MpAoEABpnygs5ZvnD6FHFzK2dTQ428oMOHW101+otf/OL4KWdAlWzLffnCi9LDqJSErV23ZUvRIWt2xWY3Ohru1qCFoQW57e2hVIzOW/b8LEJmfVN9gx1Cb1c3Y2t3f51oYXJ5O17BLZRGs2Sd2lqJufNbIUEC6oxLRiBkeLCHQ7St9SB/58//4WeUj6MRTB9+C1bF8uICT+30pFScYlu106fOPOvqoHVzc0MFcd1vbuxkZbon67EAOjPahtoCQ/fLzyFc0mPsKyzejkWZxc1r1508aTt46M69e/LQDxw6ODI4JOXXEc2q2prqiiq/2r655Mv94tYVAVVEtCvjKpYuaKs5PDAowUHUmm/X4Q/lhqydTEri7LhhecSFsb8SDgPIU4IidWx2Y3evXv3KKtvc6BxCbusrR5T5I0oiMMwaLApsaspfyzlJt1mycxM7RSMlZNk37LfMtFQ2rgpItmGuVsTAbuy2G5mfkbCRYOtYfOBA9/NO6TTWTvai+mlkinOKIMM8g8CI2INWoTqsprYKykz1Dw5J/RV4YSDqE/PbMzt7zMygLWamZx17drmvTCGnzDG5PmldPgp6hklH5xMTwSh/wQ8SK0h3T5f+RfBI8YOHd1t5+NbX7DHMlKTjak4uit3HQbuZaUGAaaYGVrfVPHDwkLwIbjzIcXZfsjyYTQcfOmwFDJaxPJPVjU3pOvz0VFNFubO2oZQCcUdxehstrlz5kn3D8iY4rFg9iM1EODbJ+QRTM1/wsAFkGbHs4YRO449HzXfeDTe/uoouKyeTQhsfGKour2TkHThQy3mBaWF1embWi4oZUFBlrhVrf2ReB1vbNq19S1NH848qO4xcor9kamNrfWZ2gowLKEE1f1N6WrZwoC8y5cdHx1x6eu/ubWFVmoHrTP/g8ReHS9CCFs5XaePUTmfH85mxMVeuIkTMfijLA6VMKD+RTW4XildJYri1/eCgNOWH9+9jVUULuMtqqqopQ3ElbPbk0WNmSU9X9+z8XHNjo9VB8sxf/uWPleOyCuCTmppaKM3LC1WzQeIJopSVl5JWrGJooi1l8dBBh225S0bhkrWwvcs4cWozFB+3DSMUp8+cIey2Xvtx8aUV5YYejpwSZo4biIcMnMStt7uTH4GeDNkBi/P+UyyBX5zNxrwmBcE8Hei1/WiorcPkNJLh3I5ioEjdzDXnWdkMH33yMSvOktrZ8zwEkxeUuZpT2wmiHD7xnCFbUVoe48oOJyjEOXdCKWd9+S8tVNRLxI3MX95SqwDeKCsptskkPhZE4Y6MpKQor3740W+6+vpFaNk2YxPjb7z+KmeWmXLoZWYwWVUHCkdTuLvBiV74jdQAQAiRoFlxHLfFt/hTjoP2vjBgwKkZJcbCQT61FiTG9Q30mz5rDc6xN/bw8S5yV1SWODYDbG66ktLykPu6NO/6hcLCkPJql04oGNYHD7ZYBIknZxA3LqGDQ8+BYZTx0RFnOSpPnzrUcsDoyJ0YH1dcWJBRXSGZLJIzklhcgvSZEtp48M+ePYcHdBCGkCwkV3k/hDKyFHkLmVoZsgf9U1lY1ImJCRVpoV3PogSwDRvYCfy0k42cGRET6kIJAROJ2rp0Pjtft9YI52+L1N+bmZOCFdvSkCMRlmJlNbvU1YUdZElEjx3lSajLkZ5elF+YlJqyzAs9Oy0kDBR4x6D+GrhAcYrIuSjrk+wlUkc/Qqj8J6p/aX2ZK4IIae8vaNAGwaQfGLSkuBSRTNuH9oFHARe1xs0tSkIqnmEn18KWHTsaiHrSCX9DJoMhIz3ftWqLwSVJqQGAbtIGRrSBiAi+QiYJ/RX958PHj1AI1qDGE2/5kCJINxczAon2nvg1MNlGILlqJBZO//TR0q+gggfv8qkAlWozlk2QMnc4niLESavrq/xMW9uBQW2LcfP45LT1e3BgBCvbXEqRXFtZdTGiftgibjeS1UBzpKckX3jl5dWVBbdv5BcEQ5BvAMD3LQDHD50+e9LtVLbEZaW5ff1CqzOvvfoKRndfTexe0tjotP9GR+waZqhs9opzMXQ0FMnpZPkNDIXI4J/+6Z9S4r/+zYfkkMhhl2cdT+imvfVgz3FhKjksN1rQXyqbY9zIWlBI6vbDRnYt7K1zwsKXEzXXKHTuH1amY46iOrx3ZcUl3X29KP74sctKrNdtD9vvixpX1dS8+sprqPyg/fHY+BQ1mJmVJ796cVk+PVYuodSsUtKVqPvdva3srFRHIPgFwQCNjP4g/DuhaG6gHNrFOD4RKEjnmmN2Tm6UxzRg7gPbTyhO60ERDiG0RDeqlWCDT+iN196wypJSxrf2jipOhvto+fW3OFxRngsGB2BUCU7OSdumsUr397biY/dKiwqVB5VO88rLL73++kWJkthDwAlvNDaEYo64CJqMSzvQeliJlYnNzJEiC66OiC2I64Dkn3bXFhLnmjChpUB7vPrVV5c1szlfnF+y/Mjd155AvfDCWZRy0gsGZPRDs8Qk+ponu7a+jkD19w2eOnVaZNZhpkDc2DjlPB3YsO0hUCy/ianZ8Ymp5dW1wuKy7Z0YsifCxjqRoWhrDVGUL4UFDBQ3KRiGIpOi7wxqXrANNl5AOSpwOzY2YnZgpuUlwHjFvg4GGArCi7hFAp5yd2pxOEfhvurJ8Smej+Ymu+N6aI+N2clXPn9mMnZ/79jRw/yEZkH6aAbH4uVqZWeKDUrQ3HBeEnsHMWW4LCybER9/jOViP+7EiZMdzxUFff6nf/LHlz7+tSPCViDwc647PktaeVxYbGADMNjIskz9x+3tDfZGbce6evqABP8kura6UjkIwBnVNc+MfheLzk1PSUSpKCtn92S49TmS/Gpr5wYfLjcAAyzokBABDquFq3jwHgaDkyqVlaoqv/ziMiPDCotp1bkTTQrsurIOqhs3blZX1lRUVjvIxve5vbXU9bzDsS1WONXHhujtH3z11VcFFsrKQ7lGJS+xmRCT6sFuqmdH83AL68NwULDlZTubW9V19WPDI8dPnbx1/QanSU1ltQgLdTaCz5MT7M/JaVQZchCw7LkVMefJk/Y5lTIxzIgrzlwKi/K7OjpwuFJLZeXlV69cUd4nLkadrH113zmJmHHivanJaZxbXc87X33tontnF5fxYd9rr7/+8MEDzsvlpaVjx4+z1XwPgfyNTWdaeNe+8dbbzBE+eJRCI4scjGEzLEdfcYuqj6TWltpBFBcmj9oBEkKed3d5hXAxN63rFkLa3hcWQDRu7idKADOr/uSEDxtoeXFlYmrKiGzB4I6QHoC3t7edNrFBLS4sevTkkWMSoppKlj3v6pSVJxPi2tWvcQtlwpQZ7O8DleXGqmEJsOQ523r3Hq32XH0S/KYNbwIHmbkA9dSpEz/96U/pEP9EazVPNZBP7nCRzQmfJQ6368cqBIoGhnMDkS+RZ/4KL3Z2dWBUBXwePXwsImE6VDcsWeyxgcnqmZlLjQS2i5TaVNBT51yAls7GxiYxTKXJ5HXAc3BqrqwKUGgpMh+5FywV6rhZsS7RgHmLnT5ZFQRBwEBLFhJNLl/I/poec6AlLjaJYYF56Jy2I8fQk/hTTQWFedZll6XUN9aNjY2K1dg4qRvT2d5x4thJGxUfYtLfP2AsFc3EtSurqkRFTDzq4+vo7NyP25lbm8wpzIpe+81bC9tlpRX6YdkXFpbmZ+d/9snnNdUN5eVV0xPTBcUF7OjHTx5RTXaDlicl9aw7JmsiONki23SgGRpv3byDJXjQ+7v70tMyxVdFkJwG2XPapPO5sxnmzm0HCaYGz96lQoUM1ORhUqckhWzAspJyx2j4sLnGDrUc5Acb7B+49+DeSy+ecyzq9q0bqoG8/PKbX1+/iaakhsXPIyZ4CzAcG58A8yFP3f4QNpRoc5bqww8+KiksPnLsGH6QqR+xE1xJW4TTXGJgRausqcY/It3Cxbs7WzPjk4qHQhqLyyIF7FOnT2pG+/nOR0MWFHnDFVSEgt1hf9LcjK8YJOTrtddewzMWEfghMmhkXB9APn/e9c433sLzL7/84pTr92ZCVK2psf7zzz9HKe0ZMHJyeMRfOHsexWfmF+RtS4kQmqBDKCWccPz4SX9lipqg4yXyhX73d3+X6+qTzz6z0QUgzDx5+ggnOGgoDC4KCmDtrUFueTrcdmw3JlZJ8YH+QR46wTXNoI6AIHHk+hnJ3uLT4WQgzeMh4trC+QLhFjiBAjjEYz6YR4rawQMtPX29vmMAYAPsQXu77QEtQdW8cO6MfRSYcfvocDhaY9aKSjmvZSAWOfGBbelzRLLtUKuTmXYRXrRkYBX8T+H7yVsgQSn9UBqA8U8S7aYmnQMPjbxIc2oMCTgNjTCDZdRATB3NpI1QBuxljclsx9OnCMeIpq79NQStaw3ilNGJtczT9FS2aMg98WswOMfHjUI5iCvaoPAvM17tAzmzGKLc0wlkJmlpSVP+JztybJRSETJ0+S1oKPlV3udT2JgI6MMfbKQQIoh8zApasZF/oYFh7K7Qj696oDcYW66QyIxNZSmauSFAhskE7MyNsnYX8qMnz0OzsPsRA90eHnU0KmRoCQY4dV0QuWaZOhJAp24CdlZDxYBAiYxMN8czO2CNKQDv+odWuI4yh+8egpC96Cf8igBe9AW6UcVDZPNXG6zA6vLQdCg7GtBDHw3cyoGuGvgeMaNDdMITTJiQHk5NcKnqRmqZOgpW6OmpOdctkA1sZ0RRExFmvgqBWxQ3nGPKsTEJKiHZ4O4nxMoc4AUEswxhDifti4tlc86w/qmhoYG+uvrKVy689ODBvb//6d++8dYbdx7dETkoKS2MT9ibmhyMiQ23EFy6fEkw16HF2BgJypLGig+2HN7fi3NX/D/8/d+Njo+3thxSWGB0aJTmpH0M9A8/+1so0u3i0uzAYI+iimWV5URrfX2b5DPd1EGX1JOclp4Xn9jVrbDXiivX2OtZuYXlVfZy6apzWDNHh0dctWjDLyz6/Olze4CZySnTR8SY3Z2F2Rnu0tdee5VXuKykoKoCaGW7LqdaWdxY5V+enJVkIuU1LumNi6/1KRw9NMScwr5cykwD5zg21hdWVsVn3TcXbE2+ZiKNTLLZIpQKRqd0vSDbqeFiRZXlSDLSs0ExPVKiEf1ifSK3GnvoJx+cgJKpSZnRJD9Xp7Ff2BZK+CkQwVWJmtv7celp6aUZmQgn52RhZV2O085WpGR7TuahAw2TYyOTa6uNdbXqabiMikwbwiZ+oL9frSocRV9QMegLJNKIP6EdY0RVDJA8tz5ZwjXTvv3ePcd2SbIz5csr8/yCrAfzJUTquvrO8guYSaBEnOBf5jsXub5x4xrrH1saSJJxy6GDSstFlEiKGE5+XrHTNE+fdO2KNSUmO0ITONbd6cvBzYPK6Vm5s3NLIYcrNqQ8snqMJWTONFS80KoMV3iDkqWyAUMGI8Uf/qk4o3HFkMmppZECkV1tgmFDm5TsMI45AtspZDLuoLntxPT+jjw6mT9T03wtSXU1tZwL46PDebmZO1vibasx+5uOqexur0EjfdrT2Uk1ZaSnHT1yZHNjZnIiWMZSwwU9wPj4aQc17cr6W3fuHjl6HK1ZJIUlhbb6P/4fP05JjFmnpKW45ObGxsc4Gw1CKz0wUMoC7AkVBGCO/IqqOizE2uNfxG/3796m0A4o1SeckpyWUFIUv79TVhz+qlI6MTqakZlpTxCNMnO9OFosK0DAxDqHP9fXHU2JTa6qSE6ynXR52B6tDXsIbZSnzx7TJLxoxSEbxAHF7ubmForm2NEjJFe5glDnLi9nYnSOQVMSuRz+5InTUvW+8Y1v4JmrV6+wzuleefwc3rzalsOyshK6lvvAdGBbSgAxJM7uQVNwWUUrHo+m+kaLGblANYqI+iopq+zq7BYYwXWYk7Z/++1vgJO+xfYkRUsplEh//84dNlCaEKRyz0tLKo5r9vobr3MfpLekw6ddelVFdUROk86cOg1OLJ0QKpLN/OWPf6wfZkd+TU1kb1NuV4A3CIjsKgB/+tlHOdm5p0+fJJVWO9taQJqCnRVfJjAqy6vso5j+D++3lxZXHD9+QvhlL2aHrckj4Hh0kA6HoMN9LLM0NoelGYWDs5Ir4lSQnB4dHjzW1vqt9967eePOxMQkSX/p/Mt85GZx5MUjzCC7bwu54kgtzQfs5TiY3JT8yisXMbzwyJtvvhnMhQcPwGZnDHhCQb1MTU7Chnx3xencEyTjhakn7ABa2obIW0NtwrmHiCSSYVc1k5ho2dnpyIVzLKgw4/gflrj02RdWXlsXq3BW5jK7/+nTR9wczDvRranx2fS0/qNHjtF+ggmSkvmIbt64BS2MJCOaODwAlfEXJ6kxXry9TmGcIIMM9lBNSBBbAHNHZgLRFPrd3q2Sqs50hiiLso0oSn36ySVIO3v2rMoTrH+TtWCiSMfzp1G7TWCTQsvNL/7hD38oO8jOxBYdwolkSNMfHnPpp53z9FTIF3rnm29ba248fdxQ3WSTyQyACiRYWVuVbYBJ5pZWdodHXrlwcXL6gUOuGzu7NXX1z3ufMnYYhQ5TEVLrLuPOdWnOYr1x8S2s8ezpU7jllS7ILaSBXWVRU13V19sFjXymUgyAKphgOJj57nedvL/V8fQZbSbbnmEwPTXlVmYeK0RXpYoBWlySL3Rgc/74STsjOOpJhCURPztE6RJOWEnK7enp7enqlDfBQalnJg2OPXQI1zQtLs198cUlvUn+YWbhRqezbNjsnQgUZmB/c9KL9uflF8Aqj8maKrjZimauwfCf/Mmf3L5xC9hUhBtaKKvbd++gy9lzL0olIuMRYSywkVCCYHdjS9VkeYluXBXp0r8AFGEPeSBxsRurImCx/b09FCB/nGwi+Soqi0CObulDVi8A+E307K+dADzgPai2D3/vvffwKn8Tr7nFYnJmClSWKgoWzukBGZLYjwiIrTgoxbm5OD/70rmzx48epQp4sgJZZ6aEUonPsRPHlZ1Ao5/9/T+wwhX4v/Tpp+4CQx3bbGcGOFbTs/if3buXwPsj2odpWQLVVbh3xL2WdBFfkhIRdFTQKvxQph5xxVqY7L7cWQbb8lb8yuLy0+7+TmaGU+/BeYozeRBAAngBEJYf7SSPXn6Pjd3ho0d0iyflY7QeOYpD/FNMzyhgJqpCK0ET7u2zzeSn+Z6UmARvLrmiqx3atA0Drd26ZDx1myQRBONwmWdqRzEPIMEJe53J5At40BEAUA0eLUGLLh5awZE7WP/hqDSD0HFHNeLD1DhPzYJbAdWKC/Jp+MS6Oms917Rf/cQl0dPVC2b61hCmoA1+i3aOvqwgQ1C5WjrGTj0w+nFq0tjYHOqyLcwhKzMbKJSU5Xwuko/L6wECsHZNT/F96przwJBWFy0T4+PtNgCNeKkF4WYrSBQaETQwBw4b8/Wf2VnF2eeywYBIQfCCmC21CBFWKSc0IIvtoCvdGg63GQXECHPz5m2YimLNyW49mxV9hKI4AgZBCGYSq42HNJ1udYVUftKzPsGGtHqLQq4TD/XjFaanX03NW971k3fh1AYLtNHhdKKxygyeAMxwNvHwBtGeeNF3qBDCRkEFnWbmplLTFL/LVc6MBteJIptJrkZJtENQgTRUEsDsO7vrZXn5EvKsqzYAEnl7eh3bnXvYvqC4/udffPLB+z+TB+2MOM3iwrCezr6ignw3LUgkjk/YETgWElWdaj9uE3fOL0+XFVelZG7nZOfjwVMvHFMobWJ89EnXo7qa+ne/9bY1En/k5xUCu6GpBirIOZaim6wQDng5NV1aVsEdxVk4ODAERZSFsCBUoCODrKCogMuKxc+3asoCFIw/SKYow6KVnUlcWfwMFDeJ2N5gMJjkFZicnJClxTNUUJjZ1Fzb1NSoWmXfwIiyrh2dD8V+VGRV3GI7WegmpJ2Ul9dI/kYUQsGza2lhpKM+yK3IqG9QPUdgmLXq+OemnJSIsPkVWZHJthPV0B2NIDyaiKUharLzpDULzfvuJ22oeKjg+PZulEks+dxjiIvHHOfHG73dAyWFwl/Wj1lsTO3TYtJwRR65acGGB/S/Hzn8YI3UOXnznFTrBPINZLeMn8mnTTX4LVGo4J+OBHKYTU5MDQwOlSjbV1KYXyiFI5xDzVa8Oi+fAyw3t4AQWXjABuEwTGvrxKBMTAsn1enmRSmTjn6q1FRaVCE/TznnucWl7PxC92Yo3MQC0N417OSfrJog97+L9v6nlJFi380XPk1B/z5kBxubi3f9hSIPzcs/oZfC0hi2tYd58U1+Lv4J24FwT4zLShISxfIspMnhvod0x1Tp+rZDLc87nrnfOiutFqo5GJqbmwoL8tjt0veprZaWZvFKAXdXnrW1NhS2FWBCkv7sWYcSgRZX/+Qjh9ihwf5oDTUrliink8kxuzLTxCVom7BWcU/okG4xC9hmX/qJQozKPpfb4srGm2+/myfwlJRI9dtMavDLX72fn5Xz2uuvYhKvq6gDLbk52dAuXvz119cx/A9+8FsYKVoQViCrSsXBuhqHOAcG+2dn5goKna/JhSt7A044WZ5mCvLHj2coCwsSUoABr1J6aamZBlWB0VHXrPQEtmB3Ty8rH561MRFz/7M/+z9fD6UJc9948zXYlsIUl5ignKF9o/tDzI4OxIcmCFTezfPnX8SKeBsG7O5MRCeCe2UVh9raWq9fvfrpRx+xs9GOs5OzkMjLJnE0krOfonMMGZx2YmwaS4a8CPS1tFhRxHJd7CXN14hS1VV5oKZMTQ1YMrivqu7uLveKX7F9EKLIYUSoDvv8SKFhY5EgROFh8StlAk79c/qwVKgR3/119I2ws+PtsuCBvMCSYyRVVa5tWuIMVg2Qg6GuyiUAVdev3+D/XHILw+wigyHZUp+QpFrIj3/8Y9OUYyDltbevj0PRjt8TZOVOshjIMeDaUKqbbWqTefXqteLufvYc+OkEiAUqxMofI7lsawuH7BrltsKRM+cWQtw9JP8QcBASCukH2vsny8lihMQ+FAJU05y726EmBMU7OfnAWnTu7Iv8c1aeS5e+ePvtN70FLdZNO17nLDGwa8qOHj+mFBh4VCV3WSaz1UZFlRgRmJOnT0VNB/acf1KJmdkh39oiOzc3v7+3IJVL0iAka3biwoW9UMt9kQ7RkhNH2oMYJq8f9znqSLCxtSPm8GkuhP3gwVZLKLQDnu+/vq75waP2jz/+FL1cgWyfnZKUwjWALeWAGUQ1Jxtpd5DjQ/pcrjGBdX0Phw3ZEbiTx2+rnJyW6pyecPQXX162ERIGZgRFjBgLYur6WshqwBW8m+w7d2A75S/w5TBd/F4cTlteCD5OQe7IBntN7jg2AzzOJyy2qeZCkGlL+zGY1zPNBgnXr9/UM2L5yRZlaCjXeo1XxTfsl3AdZvPXRpGuwHu2aspBPu9cYQNIyxkcHmpMTg3G8eQIZnCnx927d/zz3IvnGTL27ejOvrfAWVas7OEE/Fo42Y8B3ITtZhHaEvLRQjrx48dPgFxbNd56sBXOoUvBQ/sKrlK0ZmvaG6gsjJpu4SWSXOkORNWWV8pWJUdesQEQL7JhJjjUBUbC+TAvHdGm69atOzIyvvu970lbMiilYUbwQCoBj4sEOmAGvzlebOJ+MmufufnlmdnFtsPHlL379YcfQbWW6kMwi52YITXwzIJXBBOcFAJzVBtD1NbX02Z5BUXQK0vt7bfeoah//vOfi6rhQ/wF88AjyzAAJ0DyxcplsTtz9pwpSEjjUX348P7pU2f5Fm0pM9KzRMLhMFKCdUsFi929kJTBAcrbrwcEhQ0JXP7Jxzo51mMXZAiiapHCxiFRKhKH99Z0xIYcHh0BMGzAGyb3hU0WYiz28ZHz2bD9+WefkeVosZDDrW1amizqcBNgJD9xiar1WVwSzrX7p4E8l0TkL2g9xEhQChg86bvn4DTfKK2BHf2QLB8T8ZHZwPvH/NTGQ29hIAuHn0gx+1mmCQild/KFcV9je/rHNA1EV+jcB5I9oUjDpiVSm5ss3L/frrwF/gx7BRxgPn5m3pmVJ8jvu9ZcuVSeBAxA6wUQ0ragDxymZDC9S+uxqIiq68E/zRYcJgNo1n96ZrZ/uj4T99vrawM7NtMyt7CFVlJjCRuImaSl5SUYPfI8ZO8A1E+2JX7VYXTbCgzKwl9P3NpDtqWLQE1AW8RPjx3Bb3QftAQtAEDlnxp4EmBG40hjswivRW7JxrLI7zskeEUbH5iBSp0YIthIESS4p8MTMYBoe5AYFKK0FOIxEDn38UqOSk0kPCUxcl1rNmNowVVhs5MO2DkuTE1wE+TmidgnCDhub8WubcwlJe5tbq1wKjt7d/LYMYs39+HY2NALZ8784Ic//Juf/kxSGkGwcTPN9Y2F4yfajh8/KiZgbe7r7svKS8/Nyhke7Z9bmdha283IK4iJzyuror/CXijil+qRenT7zlVGFS9jUVExVrGMtbS0OvM0PjatcKfpcM/Q6VES8A5SglSn7TJRgRxBOjvRqclRNTniY9JJbKUzaOXl176+cfHi61jI1sg+R84ctQ8hdh2yAEuKC/dj7GWtrYtJibtiOGUVJeUVJQ4Pf/rZ5emZOUv4/Pw4znOGItwzuL/BWQuNrFWdqKYrkIIxIrIRDmzIjA8UidmFZMoFZcfGJ1jGfooKAI1PoQMYdZAS1ZDMZJFMY9pNY1f2+KgE4uZzxq0MCjsZsk9sI2d95g1tsnrILio8e/a0xEr778T4mKW5aR4pnbu+hOdDFTneU/llGBUqOrt7hEH5VLiUAKMZwwU/0xoMPhY/VWsipIwAgsoXXFpaXGy+vb19ktFlI0gRpgVFk/gmDxw4CDPqHF69co3wa+yt0pICCLF5Y7exOKVRnTl99u/+4e8Vc03PyElKzqysqotcbb6b6RxbbqEoxrKzr/PuLhFeTE1MjWK8nVoAAQAASURBVGcOsj7dtyClMCk5RLrSM7OoTq54tHYkOiprkOBDXugUqPCJItMsgiTOz8NnNFfBAQkpoeTIwwjmbTHCUctIKpEYg7KfxD9kFzAlR/uHz5w49tJLZwcGeyMZq26V2JI0f+Pa1VdfvYAFuNyGBwctzGQKQpy6WVxZkLQxPjXFcNd/5/NuNpatjHXLciJ96N13vvnLX//KUnHq5LGb16+6Tc+iCGAcovgxE4f6wqLIxAzFOSYFh/DJir1196GKeATk8JHWxYVXnz/vIMgWyPKSYqqm341LSUkHI1u+7q5OOUXPnj8nFGbX29OnB8tMX28/6yQxIUSlkbKyoopLxRdF4bJz8154oY65Jh/08uXL1jPMOToy/vPhn0OjNbhEWYOEpKNHK69cucJjYlf45msv8iwODI5YQZ2XMJA7O53oBTlz5OvrV21oiV51Y63TyRKgcJf9HM0M+ZgQyThxmXHApu6jlNremrGkIQpu580yi3feeQeE2pD3NyJ1DO0W/BNU0S/MDiuN9Cfhr1CVL4TIEXSZ+cVaQogoB779jbcs5GE/Frk90BJO2+vZX8NBIJUF4ax5Sl4yCaIYHRLAw/IbGhxWiIkJTeFoD1oNgsv/4cOf/OQn3kJff3WIfPok0YYjdOrbKF4pGYOKswMkI04+PHzU3t0ZLtypr63bC+XVeR+yXLMNq/QDGxfaZOJpbMMDHjONhK2SMBW84U8e89feeP3O7XsSteHZ6PYqDBGV3TE/pcFlY0T5tZcuXUJ9jura+ibmO4PYc+DBgxVNY1SgDYxiO6cfSIA9m+LSYqdI3dA5r6bIyy+9Ap+WdlaFIAP3nIgKny5gBBCwU0QtTx05crS/t0+Snuf5hcHXwBh14q6sohw17W1evfCKSvyw5CCRXRB7fXDQyfILrEBBf4deJAJh/o/+4afRIzRYXd6LmD+GpVKoJhTE88qYYn6mTGdnV2VllYGoxLGxSZd/MQFbWw/D3cU33vyvf/H/qSivdC4gEuxJVlgCuhxIeOHsaYXpoYU+nV6cs4dxxJzZp/gkBWgFnJt9yFHosDuvX0fn8wsXLlhhBQmd7DQ18GOJ5Y3FuFXZv/MO6h862BZcnWvbmE3mRY29Q1WtC4inxpksc+3tj375y18mpiQoFAtUbZj+SIlV6DHa6ac//SlXAgpCI9L4i7XmpkTaGwVt+OME0Oh5ysGHTtAJr6Ye0AIesCKd9vzZU8uH2R88eFhGKzjxIVYB+dWrV5GI+uXLkzDW1NjMAyIdV58TkyO7e1IJ9LoDHEwLPFsaS7ZogB4ILG5k2k1Phuwo1CEsVlBeM3xCEF6XQffwIZDsP4dHxug6ZPr2t7+9PDvPn8qYlKHEgmo7fEhjCyYJFfTTM1cR2Li6bKmctMHqDGhagiS++uqr9Y6TLi/rU0MIIcgWLOoC0vAA/nfbVV6Rc0yVPFyY2cU+VTW15Bo2tHG0VAa8d81IAHN3a5NmY65SNQAQkkAueVtk59Lnl7/5zW9GFQJdTTs5J+0csPUXVvGY3YtjHPoMOIpUIz1z5iz0Eh90VMhKgEsCgiLIUn2M6C34BAanEhbCZsm+8juzMyL+dUy1mbLZ1BCcR/AGn1iaqrn81ZfiJ9rAubo3vkAI9gCwDzBoCUQPxt56qL2LFqRVA9N3ShatDeFXD1Hn3v07eJj3lb9bBExQgunnr5+Ea6wjbnxWEpd3hpEHw0QMrjAY21IPRgSAv54gnLmbl7+mE/muLAeftYydEEhnmPhV2h6QxHMA6SFgMvIC8MLUsCctzSqGpfUAq55QRMYyir8Qi9bAoBOoXAuEy88kBuuW+5ADW9rrIqNfWRo10xjM3H/eCYfDNjctqAaOpAQksf8MiZyghNkxJzgj0QDVABSXEDenHE2Jrxx85mRvwjsSm5Ykt8ShGWeqyCF3I9qouAcyla2My30FJio7KqU8tjjMd3zgRTTIsJTuzKtCGMQjYtmbHkr7ro2/pAVesIWPfwLPE8AbAi9iO/Tz3erioakFMke+YFkPYc3rKAFsSPdFY15MH2VprJf+0w98acx8N5pRNPMWDFBwOjRKcBXEymUKd4Sp4Ri3ErOxLos3zfYpLTVRKWcbaJ2JCMmFyM5Mnl+YtMnOy0HpuNk5CiWluKSAO39ydnxuaebMyRPsUYcmlfk7dvgohpMBwYqz0iSnBIsWdS3DW7vrk7PuZYzJS0zb2JlLSM5KSEuZXZQ8vaW36QWVQQdefOmFiprcjz78TXNr1eGklmUbKCnha+s52TmMLfk5GxnbzoFDWkBUuJoNG0jZSpWxh6ZQIKnURs53vlvH6GJ2N29cv3b27PloTogLFb+8/BlP25NH7Yr0qRGIL3lMvSjT13GIhIStpcUpBn1T8yEifPfOVUaqOLs6kzm5ToWmTQRFsLMzvb6laO7ynLyjSOZVcFdkWFgU8FpYMTokI5+Jo5Qv1NnERNgkOFSD6TnbMLoV3QfbYAPtsQqe9MS6pTc0JQbqP1DEKgAS74i2CvEEHXrFkzDlxHCmBYlVINE/nxbS602JeucccQKHOqiSZF3Pz+fmh+3K1atfMwStLix+Iqpug/WGvAHSAo/TGKx2U5QR+GGYecqsIVAgdwzxt37rt9oOH33w8B5FLNGTPaSBk0Br6xvpcYn7e/HFZeW1qeFebdkjTk7ycN+9f58whkNFCYm3b98pLangER8dk9y/sbC06lwvVM+trHV19qlfMje7rFiibbNgqYx89HX4n+axz9/bD5UN2alJWUn7KyJsKzthe7BJJ5qCyZI7ODTHCP8HLOF/09cGcgTPliJVcek0aNxmMXDqiC8kBxrt7Wyy/oNcxiaRIyP7ZgPT1/O8qKhwZmpsfyfHIQgBU5wv+8VWSnA5pNqF0jfTSbkJp06d3Nhc4RdXrKWzu0uivFlvbj7hTSSArhyi+7CiFCyJZ+Z1785t5qFQgOfgpEkodAi38UMFE8EbCIEuFnhtnKdXiJpBj+5WAq9oZmoh5UM6c0qKiiJemZmdkuNOrXGBF5VI2Q31jml265xQFQPxyJFjRlfGnhxFFQsGUYPLyS3cYjiH4VA8ciGU62Y2LEWu0sSWTrtZ5p3WNbqaLRLHy4rzOBFN0BNxeXYDurvcUbeCV5k5zhqVypG7ceWLz7+8LGYtwTo9JfjVzDHqnQIDJlQxy4toZNYpeYH5fRjBFqGevh7UsSzx44DBc5yJfFp6Dk5t4C18ryoX2ebFwLeQaZdI+fFuStCPyFQK9788KImowoBecQk9tjc7nIyvIJlcUCz43F8yhRZsQXMBMApiMJymQ4sR4YsqW/sNh5TsiKhte0IOETY0fwoA4CqaY3Pm5BnKyjkHu9a05DRV5//Dv/+/nn3x/NnTZ1UhFAdgdyrRy+eGpmZaVlbJfuJIAoBFjWmOvWFYZMM2jJfk5MkTaAoVYM7Iztp1LlaG3F4INWeWZUmeidg9cWaNIs56WJIgqqqqGrew4MlF4JnIhxIgv2xTFInu/O2yIBNNYe/WzetVbgktKj50qFUy+tOnHfjnlVcusgKjGENENXAvXHiFQ52Xra3tMHVVVVPNeOLK7RsYUPlenMOqxo5gLQmj87tJnGJG8UY7oqxuQU1NPSQLooJIdvVLL51nDJmazQDYUAeHAM+SB+yiIoHlWFe8es6hy0lEWzLKWWxYYma6R4hAmtBA//CHH37MElVpNz0rs7nZYrcvCmpPIk2ce3igd6C2odbhH5RqrDvg9k9THu0f7ejsdtbGSTFX6jgn4xZY0QQ6RHkDrz/vDIc1RcmcIcZpMSv7rJnnnc9Ayz7GxqIZM9MLblU/2ORo9MFgruzH8U/V1anW3bq+vYoJ4V9Ih+cYuTEbwSS2ygTrhO5l2mIz6h02JsdCWecTRUqEcYvM8yWxt6jiCDWrzJcVBS1eVGOQI8/FDrzXqOwJtNCExhJv8YXS8Bd3WawNCsOq7Cnc4LQA9LJ0A9GdgK6sJLmffvqpcW22STe8mTIMPLj74OLF1xwOkKxCakyKzE5NT2NR3GgKDmfiWKePTp8MN20/efTIodv52Rk9HD5yJC8cVKWfVzSm/5lM0r2sbqR1e0nVxJDgbdzmlgPgByFmxvN4WMIYcTBrzGxrBzm+X7x4UVHLuw8fNSalxidvuh9moG9QYQanEjn+9VBYHK61ISMdnV1GtLGRwcjDAioBZ5h32lCgvru3DwDWF0Mw/duOHMX/UMqWsv5CqV2onNSwN1iPe/r4cZ67FE+dUhHng398/1vf/q7v//iPH+hHqMFtm9Nz8zxsxrUA6VaGEp2GBETeEyiCRkubhwDzkW1IlKiazufP1KUFlZIP2otSEkyhJ68ghAQeUzYLB5dxKUpBKc0JQo5BK+y33v0mIhrQQ2e3IM1AGEDIjpUbEveTEqWcsb7cVmWyLjS0LRe1pqaZVdogKwaTAKKDqGo1HG5xfTy2CQiJWLBgBp4G+FMDV/KAxBN/qa9g7m7lyL84cewITkBuoFpQqGugkuUzp0/rzT9xlMkipdn54kONM5aIue/0rddhTE3osBsTjItsOWJsGFl7hmG6A85PEGQ9CCvH6kZEZtTl8GL4QBk+MJgpmYCRNPbEkhZIA6HS2mT+yBSJ1CQOuFlZ0x6E0RQOs5UTbzh7O2NxQriRnpfChL2ijcnoE/0sGFAAACwbRRao8goLJienbAD0GSCMmCb6/J+wAQyjRydPn2IFqfAA00N0vTF9H6N4C4F94AWmiAoAJBZZfjT20T8wbAZ8sUelLxg/tih+8hzAkZ7svJl04ZgaoyoxiR/UblWFLzWwSgBAR4hpChbZdgpYJSXHZKYnx2YmSkkoKc13Bj/kBMXsE357znv3b6WmtLz33jfv37m7vVOYVBryU7kbSvPyoGJ8ZHx/Z7+6vjYzM0vC98b2ytb2ytycAoATTq/GJsRk52fFx6WoI5OUnlZUWlBeXTg2PnjzzhUXRyak7BWVZDU2HLh+5Y7q7UX5FT/44e999cWV/p7+w20npMkpQihKMzjSCXXRYtsOldqegV9yNtzIdHSHqCvLRoZHzr94dm52rrGxlrpBiowMjp/puPg9q4jDVYw8i5CFn0aemR5Vqq47Yefe3XYIky+6s72Ojgpurq8uOh958sRRN4A4pH/t5o2xpTlXxzDInKnlq0ZTzr4I5wg3Q3k4mAGlan2QQxcM0SCYfmExlMdmzPmVSOBJZo1ZoC+6I7pX0BfL+YvxURPhcI63MC7eY2cQG6/4+KJzQ+stOzaXIsBRTqbG7Cm2mOh2p431FbVInBn48Dcfe8JSaW6sj0axzNeIxmUmMob4UC0JBI+U4hmw+Qmz6VBL0wEn49Ui9w//8HOrFAvYPkpNRu1lj9hyu15N+Ntu/Oz5l06eYK228Yhvry24NY62A+Hk9IzQuQPZts3bO6sq/FQVlCqp9bhDHRs3KBXn5BfG7Ce4lyo1LVstJBOX7U+yuDU7u7sJEY0DJFLgIVxhX7LuC+RAgi9But3mFtlvaw9v5ghLfiWbhMXr29u8Yjvm6Ccf6osJSkAcseBTEJq3DeY5coHTzvbGuRdOMYNaDjSVlGT39vYoFo7feJoL8kK4jHvM8lBeWsoR0tBYi9ZEWEUdFoY1QBYyd76NMdRRCwAbl+zb02VttkbKGNFGTrm5AFWVHhxCuWMJpKcWKByrndVIn/iTNczKzMouRBHtZ2dV1JYWMascnuMBR9sO25YS9KXxpeGRQfYi8jk2UhW5iohVylALGIuc7rLGwyFyAwBgpAZsUAHbjqXZJcIbslr8ZHxxjSwrD1fHlG0QzLWu3759FwN7RSdSW/3l/u+fGRRihF7ElUDsoMXdu0+bW5qUxRLIWVicPf/i6d6uXoytpip6mRT60iSAgYH79x/gEB8Q+shEAtWp0yfyiwoethPGUKoYH8KDt7766ivY0MB3MgVarkHYk349NzNt3+K5DwSKp0t70xtLhUPRZJlfUHHw4AlgQ7JZw7YPAxSH6J+y9SIYYEAW8u/93u8ZmnHAQgIGAvmJ6Wn6DDUf0UX01Q9zn3kKTTTz97//fUPbvA329SvQ5EI1ZXwQjrnmJKJZa+DFzz77zPQt1dYygm9PDgzE9ReoPlhIQSTaXm/esj+HOscG4N/DZ53PVyP3WuAZkLj524y4P8AmVxWqpSvgH2814M7aWkMMDQ3asZNupjOYMYn1y+tAhV4WPB3+8ssvR1clYb36ukYuPQV962oblEQzd6oAooBx40aokkm4WDWmfP3arcwsZ6yTEvb2nGAmXwikPaRRoRKtIFzleO5SSDCinxDO6xTF++9/oNv33v020bAy02nmDgZuI/wGAOAxfDmGc3JymQjeNV+oxuccf6FNSBMo/uKLLzo7ezHD+Pg0dL3zzruQeeZM0+iE01yBpi7o0PjUqTOClpYwvrLUlEzcyzVge8O+VwhyZu5z1/uAwQlyvluzNjsobX8cahUw1uHNcABWTZIxjSW2t/Y6nnQM9g2aaZFSZgtrf/yHfwyTGA+c5184D13YEuGuXPvyiy9CAXt8i6PoJX+Za2iEpnjPuIYzhDY0Kk7g/jcX/mJ4U3KDFHMSGRck1DXWRTjNnJjCEvZ47BfmqTXOlkCHAMBgVCI2dhc2HWJBtE7Jw6Sf79y/07y65MXSsiIgWa+wPW60FdQ5hokkga/Y85MvcHmSHGy24G4Hqn0UMDA2/CCHei3+yVODELZedvYSO1VNBTDc8tw5gMTeABVdYSPKK4cokmbNgi8pIyu7r6/H8op5sCsk4GF/hRONCJmExRcYg3N4wGDf/s735LJKinNSj2NITZR5RZMK8zOzg0/Q68ikPKOQnSyg4qIigowuzGqYx0g+aWMhrZTVDkg7BzIY3WwQZ0hzBhIDM+GQYGx8xKAaEx9Q8ZiQ36am5ki+Z9HHn37CbxgXmzgbjgwEpz4VZCImKO+foHEpoayPbhMSE03Zx16BztS5h3gVVrE0eklCwADki58eznVoLrgIMBZBooRYZIcvCRWoTWPBqp8M5wCDWfgCbNVoDI3b4zc3VDJwGMBdB2CxWbPYuSBMz8L1iMLE5cLk9jIQ5IAcPGYRnQje07+PhwEhEUOFJQkPIkjaGE68ETCAhHNShlLEJDTeDAEfk9UnbsQtPr6bMg2Azegor6O4GcEtcRB3hWdvxVZXBQc2X4jWdk2miiN1mpEegl8MXP1SGWZu0w841lBYRfZtFcLHd2ERSDekNUC1PsrdqGaoMQZSMFmyge/IYDMKj4E8CeGuDTrId3ErDxHGd4Rx8B88ADCuv5HvoQA24uoWSCbAnNMh3hJ2MZycfc+jb3mOHlF0RGkG3dBHArUBg2qmRgG5h+YE46bgXQ3wAcJrhi0CZ0QEoKQoLBi6inzU6hTlk3cmALPrYFw4lRIyi/5p76FnjdmpGvD5sfWJfXVVGVWorotzpQ7o4D9gRA5ih6CbUtwC9z5EbmJsnDEkv4g6DmcNE2KV1gmO1LV1MXqEHx+fbKhrxit2DuqzLy5PVdeUNh9skFIxuzCxubXmxl++sQMtTUuRsmLzsyvulzx27JSjCkPDfSXFeQmJMU8ePbB6Xf68591vnspOL4jdS95YdvTwhf6+kbLSmuysIhkL8MApvry6KktBbROYsaWhfIeGBxnuxEmCKbo/e/YkIW5PxT9Mhlgc6VYLqgcp5c7SI9jRDh4JEIXWy0hPnBjtXVqec9epBEfnWFLSsnb3Yl0MoDQ57cDfbd9M287MzpL2mbn53b2ElPSMDXb+1k7Hs1BUVM4Y+qKCbi1d8A97/PToiKYuGUM4P+Fvz8UBPGRPkxxERx3/9Bw8YLNjGR+d8AQXeQWDEVehaqi2AOANZ4m8pStUoBHkqDjiw5PpHCTX9dNH7arUH1UFsrZmfk46Lyndl74idTmI/coSSrkbDqPqCq2pV0pQ55jfWgsAUFGjACBBjCHLQ0pimjakyQYgessEdclzrGWo8WenNbfgGACepWKc9CovL9zeVGIvzxQUrXchg/q5w6OjB1rbhkYm5heWXaChsj/RdkaEJkpJzGD2w4MP/qdaMC3HkhHhhBsDrZ0jJ32EF00d+jZ9SIBz+DELX3x8QWU4B1hQAi4uCQ7jrbz8TF606A6Nu98oZudjymZEfGwSVAHf2d9xBMnxzW+89pp8ayeIsTzL3Hk1zn4rwfGjx+ymfv3LX0L6px9/wriErjB6ajBWuGkFeRS1FI5n6xuFZ8U67XCDX/0zN3g6R6jIaXVacrKRwFIK/3x18Mzao1IYozYA77//PvZgk/ErK+KSlZMvpwip0cWp7y8uX7I6nj9/1sUCHLGiWJa3+Nh9iwf8wNKJU2eEMT/55BPsbVWg0yAE14EBSnGa54jLovXwpZdftkotLi/NCiBEgieoRq2H8iN74bwK14m/lLv5OnVjIVlbWoAlNwnoEKvDAJuJ8aG6K12BUiqzufbBNmkrnPxLys8pzkjJIqGUvhXdXvTtt98xWfoAEtBIPzxStCg2O3joQE9/L4a3JIATA0AIVYwlDISmBqLJIRm2deLAcUVlGaEAJDYxWXNk++IQQqfGoun4QlXyuHvR6+L4RgxkitTMoVfhByRGMSLXu+fGxVFgg1IlgBkTeqCCCJGBGEyUc7BEBcHWggGEk2QKMaHMMSE2QUjZuLQNBYUn0d1+mziz+cCAXjrRJx0VytrG7Bw/dbypseW//Jf/ImD727/920I3wDBfgik7KPJipVrgQII9tTQ7e3qju3cwyG4vLii0/8RIFubnzzpA5YSlGwYAjNyOPJ48eRpuodRMQQ6ZdDvIiQm+suWQ1Q0DZgE/n/zmIys1nYkD0atAMDRSihF4LDxoFw3zwSG8Yw6nuhXLocxAuwilYAxr2Rfhat9pTvgBnhHNSAErJ4g9hBlTkHAPP2jh2C72M2skhiIRLdsVs8PVDlFg152dXe0lFhsalqLMQOHgTK4EoCKNrsiXGhLQawX2JC+3oK6x8b/9t//Go3z/wYN33/smQjgM5lp6XhSoMIoUFIap+QIAhqMszUUIwmDgOtG7uChaYuJa+lX4VMwZpznMinncXVVaHIotsjRIn9Qv9JJkQkjVirE2KWAt6m760ItzaGBktYG0RpupF/EnewbXgZ8a+e63vmujCPNKbli4ZdLic8vytetX7YFxJrRwfRJtYh5clxErkJNFM+wHVwcPHqJIo8wpGQ+340CijPqOhTjWihMwBnmBLtEYX4gnAcGZzg4hnyewZ7LqDahu4jkE/uY3v6msCmqfpICZ+Y4i5mUsjlHK0IYBxZ8+fvb6xdc4IMAM20oJwWQky2jei4BhqGAquA1J6ilJjmJLITapwMARz44+SaK5QI750pN6wEVo/fLFN3bjkmISkvp7e2/fvO4CCkev4mN20pKTFFKE/9zsrKDcerrx2K1bd/Bhx9NnONNMAxJUKTJEQjBbHX5FXIyEiOr/shVRXzl4ezaLpimjlHp0iIU0IHfEOUjEE16zOuEgV9eZrMMD7Q+fWL/IWlTVUIa2Q9qbkUMg9IYphwUucjelsSQgwJgFCJwE0K+K4RgFCd5595tkkwioO0LSoZToFeTmgRY2TMFPXPsYjJz6jlscu6LxMBLu0idVJ3gg4AC3hpWOYJsgMCDKLWcpEkqSZikPReRcQvhOWmpKDusqM+yOgBpFOKh0BRJPfMFg0fUUkDSDh4xJz8NHFk24yCyyEKythRJ9GRnmblXS2MKKZE6cowWYUQdZQQszyOq7h7QQVtTY0BqYVOwLpyv9Bjs6km1v8s6BOECstgBzwejE3q9h+I1wHtfKColSzvArimqQxgGV6KhreB4VSwxNcRhVdWFnNJCK1YL2RE7/WFnjYHzIm48LR5VBCSDnOzGoRAvmMu4xNx99ClniCbtbk4c4nUMxaDGQu5VD3k/kAzaI009AGUsk0lh782RCmQIU07/zkSrjYDO6OUXR4Z+moENfvGtQn6CMQpZnYhD6cBZ5L5QuCUZPsJ+8CLOCNniRToQ6Q3toVebYk70gaxksqWlJIooSi5iqggCyn83X6mtqxpoNBUMzjYhTiZzMHO5PX44dP6qiNi3f3fXciDLOwYY7jah08S9+8cmJkw0/+l/+hbuQn3U+ssfIL8odGx9KSIo7cfLY6sYql48ydpcufc6Uefcb34G9yqqyoQF2z83ZWfehbtupO/315OFkRkpcTnbp6xe+6bKH/Z3E0pKqgcHxc2fPW07sQw4fPYr56BCOWMDwO6pVwhuKiGqYMKdyszLraqvIMIG5eeM2DoMDRVaob6c+ImSNgXPiLWyK28bHBmyC1lYWnJBEEKkpCyoUL6/XNYTTwO2Pn4oIU+PQOzo25kV7wfWNPeWtO593ed2xSJxDEW8pHLCzDyHSPeFH1p8FBhrRgpNDWA8taH9MoitU1tLrcIgHcCaGtKIwyDzs7e5ztFZL6xOepIirqyvRnT8p9CbDNDtEXVENW4r+qAqVl5OFCvIcNjdWGlznMTGmPrnnJ44fCT6M9TXvcpQmp0h0iXcwNMrGeoAfaIQ34AGJEgSMX8ktRqUBbW9OHT9jN97+6IEKCUKNLBKZB3ieF8e7a/gnJr6t7TCDXlE/BROy0uk1R0s7hkdGauqaKL6R0XE5Qu1POmSgOsuk/o+0qM2dXUfB4Jx1yIyXJy1YSUbQSKInFQx79L5Eajw8MjaMIcEGKiFmOIQoDeDHjHCsv5pRglGeh2q49eGq6e55hv958gLCeeXsdMOlpMEzIVIRQgH7u5LHJqbGXWr14ktnl0NC5Epnx9MoOUZHR+yg5M6hvlMx927fkbbrgoWmpkZM9fTpsxdfuuAuERYME9DlkdIDRABsMl2yiHZ/81d/Dc5XXn6Zq/WsxG7btfkFJybNVByG+pNK+6tf/QqqkVW02irOcIRYShNXSN3hyrHeMH0c5Vd8kAlue2B5ePnFc2HZXg67yoqyEhjw3LjawyHLhlCYI0EwX1sLE4cBuMJp1lrIhCu7t5AwqiAYYqyu0jmssaKCAo35wzBhQV4+I8yLeIOdZJnj8FR83TVzllU9UGWNB5p//OP/3XDVNep+lTI1cF1BQW5JecnU+PTI4FRqYjpI3vnOdwa6Qmie/sTJpaVlXmEigMcG8p/oi8lXlriBAQDhgEQFU7PgQaP2dkrMaEBGRcBpBPnNFqZoyIUFyTByuhRiSRlOpglxEUJQnox2/MN8hB8aALdEjWBjQT5znEcqeowYSKQDAKDNz5OaFXK0qFxk0hWrwtIrh177v//7vweVboGqH6MvzoSicOYFVLNmFbGwveWLWeuEfiB3dneEKCcv+5NPf/Pt73370MHDOESOFiNPUh8ucmwDA1OxhmbnqwvMpjzzwtnB4UnJ2XjDRR8YAKj8cawoPVOzlmjZ3kX8xjk5LDlgZOflgwcD4ARAmimAcRfa4TQQegt6NYCNgOfNLbEpPWMSEXe48pNXdAWT5uKfIMIq0CtJhqgSTzoEnBiG6tDn/9Qt6GI1N33vBtO5tHRnYxPDmyYAKBbrIMA8x8Ym5SHCYXWQkAVgjI+HA7783CioPbqDykAMCw2am1rQYnR0zEoEhqGhQSm90Zki9/lzL+Xm5rnCglPPuXl+NUE/J2rcvAmlahXomSVgY2Mz40NvEJCKSGVe1NSheCOjmVVAAebmhy1fYV6+LA40N0ecqbYPe9os2CE8U7/64JcwZhb4+fiR47YHN2/fpmHGxyb0ZtY85SbIxhUGMJYpQI7rtKyJP/vZz2i2liZJ9mHL8Ud/9C949MTiVO4mg7fv3LRMaw9XtBl8MvU8wUUeQgIJ9ZDYipnAG+ahZMYsexMTkIY6Wp49e2Y6LDWTOiEs4kXSTmxF0JdxxcXgwik3DQOega4Oii+C0HJxyQJ5ufzlFS2xMf60djHNYcDHu/LpteExdEaWLf7s2VNYtYGhiMQnzRcwpKmhPtwvzqokOw6ZpGWkVVZXIEQUJDzM0PrRj36EvmbkLbjFvZ7DHl7ie1twb2pCgru4vr72lWyb3JxMtRlKS4rqq6tkEylGAsKz588R8CtXvnaK48f/+/9XTA8T4va2I4dhQ+TEXx480grhXT09x46dwPyG47bAe5ImcDs6sp6qHeuoqjLTJx3P8ViIjIlJ7qkzkRIU4C7PneKY7DCO/304QXraW66RGeFYnUTyw0O2IQywxnhXyaAJwqfJop0dtmZYiyTqWbeBk1Xulx2blU0uUFYWFVroARG9SFnBto0ixzni6sdfnWAJmWzSbrUxowhZ1YIPFUT0j0u9HsCIyBo+LHTVapaqfWGnobGWXkRQzQAJWALiO2jRDhXYnPhKRqLhNGN1+xu1P92Rrn/mInrJpQWzRZNMkRKyDJ8A8DGKieB5A9FRnmMn8MCbF40S29Iczir5tx/sSYxkH0UaoxatJ3aQXjAYGnjHPUcg097LAA2KKS3YW2WlpahrPMR2Cg1D++KmUseiFZPXACPyExAV6hvubCdIBb8UXgGo9UZvsopkCCSnJfP3gwROzd8JFDqOTWZ6vL9GhIUA5/a27+aHcsDTWLdg8NAHckEI6XCqc+MiG7wrQeTMA23yPz96810bqI9S3aBEHT2ATd3rmQUDyMgGQDQj7CmNCEvQvbISMhfRT0a+PZrLNYrcm1DEZHf3rfGVeIO9eBsJCsuCgWbeBScJQTmBQkmNnkQXCcYQLmR2Y2iEhBNaprqyCmwimO0P7s7PTEq/4RxVsR0kKekpHR1P+VN1OzI2AsLK6mqahRGmJL9UCpKQlycXrdyVYezb5ZW50aHBpcXFb779rcy0nAd3no6PLVQU148OTb928Z2EeOlJuaoam2CxXUJBQSRqsjYxOYap4IlpS8uYCKShiDyE5qa6+3fvRMkHRebFnjYjhcPhkHIUOIJAOoj8p6cmtrffqiovX5Iqvrw+MWmCq8+e9zQ2tUhQUYXG/letK8UZZBzhk9GxCafxM7JzRACgYnMjnGuxeKApTuBIs8TiSUUqJMPBIS6X++i0EAYwBaxFbtHRUmdbBZP87qBCOI1Nge7Izy3wBfzaYyovmoWhzdRzzTC/7bsPJgk3UqWmOZ2M3FLCBUnUrGR/y26fn5u58OL5+rpqSYSS2u39pHLh282NLeYj/csHiYhsKaJhMfAEu9poISt+Myt9WgPcS2CHLGfMvFzvJTGEEaClEm7AxhTi+CVlZc87utRrkjAzPjEEMBthZUAWFlfUy1WLYGRsfG8/3nlfgpqckgaxYinwkJ9XNDez6MY/sTDOfBMEOiYHQCijFqnxH6QpJWx6Idn0hweDH53ugEMD4VKz8CG8pInS0C3gCTvFLUyUmBRKRlZVVOqB5ww+bSCoBeIgz3JwcEDZwTOnwjbVVe/W9fg9LpMU9bBsLKWOYPvXXr1gwUMsvv+7d259/vkla0BkNIpb5XL5tXPnz5774IMPuH6BVF5azF/OiwoMJfPZ5Wo1mBo846Ivr1xVv+rdd9/FABY51KdGkJsFgCH/8R//0fRtLeDWfPnnXOHuCR7G7fQms9L1VaTJFPzTXwuGzZ5x8QlzWVqQPqHOKgIbvlOncAV1YV2RnDcygpSwYUE91NqamJIo1cE5QKwISOPKXMcM/J3kfWJ8HGAoDjYhEbi9f/umgZilMGldNNBuzJ5UdZzvWit3N+7ubapNfvhwW2ZOppzAseHZHIfCIh/cBZ/23ugrZOQVu1yQ070+FgPzyspVH4aXtwz/W+GMgrJGpDD90ylDz1kVpkOXnTlzSr4EFLJWoxts3MschDoCEjpZCSegyBFEyW/xXLDXxHXy8ccfYxvcRShoCdP0XTMQesW7gAw7yaSQyGua5B3JoAJW4QezQaOHgAGhrvyTr/1Z+1NohBlj4RPUh9KotEYxKSVGexTHxupkrq4tJSSr550LDPnccC77wuhUgTZQYSzSp66RVf/I0WMzcystB9vo6ubmJuqalY/VBbIkbl248JJ11z7BpsoXxAIDgN9+Wz2ZITwM/3rDhxgbtICEVRMBfNTdINXKyQQUoaY0YOgDHhh0BSY0U3ggce5vAQASsFBAaBtDITAlPfz888+pQeJpjtAo/wTnIK5BiQN41MkxNc5jDCaUhOj61Ni78IMQ/im/H8kMJBSwtrYKURY1fN7d1RuhSzgWbBUGIW8r3pAYZ75G4XObm52U5c/TpOK7UBtFpLT/62+F+kUQuBfDrxcihIoZCGgH6Si2Zd2GQ9THFSYrPTqsy5GqXE42i7HYcsh6UnDZFUMONUqt1l5LHNLX3WVld6wO5F6Rz00/A4nRz27JyeUe8pnidtDYEDZIqSlpVFMYKPhB52H4xRdf9t1b7N2oSw5INttKf7Km6HMxB6/Q21YxMi4kigk5DMGPmT2BCtTh7jU1asEmGRjwBlEGZb3jCs3cJNTZ61BHsA4tRs4wAsNNXzrEdUEEMrNJnFwXBMIG1i9XeWiD8/GnxGxwYjn9C1ZbcHVi6GyiHklMMoSb+6DCcuo7hflXf/VXx44d0cxD/fBqRrTTDnJcePmVnt5uZgPcQg5yW+X0icRg0B78RB6bia35JwZ+2tmTU1xZJjdhxK1hPQvT0w/u3zl2pE3dydHBsFVwyweJc+oDP9jaYUvTh5PTp16gbKNKg0vOF0xo1SsoEkIIJ4LsDbBcTVWl0Nn8zLSJO2mjBy3dOgtmZIITO15fWlpaGIRe5/lVL4q7EK3dobazvRtung65UiETRqFo93IiBEyaIHvMUQpV3KAl6sIIRc/KykCosRPzBIQkFoZ062ArQhfNw46FllqZFaWlINQ55HhiX2G+0IW9vG4U7TnjrLNTU9OECMaoehxFT3rFQBgM+XQCHhIKt9a5N994NS7iQdabyQIAuvxKE+rWdz37q3Mv6lbMAVP19HAZ5Nt32WhZ7MBTXVkBkxCOsmnuYIvojTBxZkkkuV9vVCvG0xvupRzMCFNRU2bhRUCarwN2mV6AQUabF2DWD3wwkaUiWiEEGMFv7U1AGztYQ///sjyBjZKSdWcyHhKkMKu1ddSC09y8UPkORrzrObyZcJSPiZb2EbkKSQVe9BOmlcQCHnlZ3vKucQmYJ341Gf0AT1cgMTH4tS/RiS90KEKCxFvQgXLae9FDP0ET/nY0jYs0KO+NUHzNuD7e1VVQIpFzn170kwZG8ZPXI51nqyotJ1gevNRkZ1YJpKKUgp4yI0HkNKVcxslJNd1LFPwSnWE12mpTf4xyO92GuhpKgSXJF4LY5WWla6sr6gPykJkpifXhsSB1Y8NDIOFKABt8DA+NHj9ywnxv3ribk2XLsV9dWWrJN0cTT05NOtjceu/B/fFl/trs+sj1T3FkITn3yKHT6eqspMQ9ffZA3J3fbXNtKTczbyF1fnVxfWRw9NTJGun+lWWVHY87m5sOo1dRMURNUE+WSTWO8TNsSPxVB5o9lBAiXA49k7B9e1EJ3JaPq1cuWy+lu/hP2X7UcS2xoISTmvbHdJ8Lf2yBFhZknvWx1VR6vvTpx6o3cWa7CIxTv6qyVpIowVc7tr6soqK6ZmlRonM43NPQkLW+HSrDIysMZBaGXbI0OVAJqFm8cQVHDN88k4i/nPx7S2N/QYLiyEqWMC2xp9CxAYJCnclCr0V0YW4xyktRCURr/8QAdol4AAtF2CMIvLEc819NWZN4w0O8lEJpbsdLZ1fbNT7JnRVfXv1a/Va1iRvr69zb/MLpM3J27997gKzsJDD4GJfrEUhYjrgZFEjkiwowhIecyso/Y3Bs/OhJLhITE6KrAJyl/Xd+53e4x7CKJ6aPGSYm0T05v6C4sqo+bnzSnQ+r61LU9tMznEzI5nehlp2q5zUJTDUxvrK4npOVw4urxoohlPyHB4iadHQk8gFDwno4QA8P0Ehl+AKNxCH8lJAAvb4gAXyYTlTNgR+ifKqqykNdgUjWH8Y2KWFzG+PEBLeKFpGClCQV2jbRO7mooKvzaVNdTXExv0hWT9dzXvyYwnw2k1m7HFf9H8SCNCxnR806URVuYmJaniVIDx08gG1ECRAFDsdGRk2Q2gWDxAyn64ibbFcn8GyNrCVRbWM6GgDe1M1alNl0vBgW+6Iiq7tAKuufu+QnP/kJFxHzsfXgAe5hhw20tMrycjlbDD/C9A50sOqsssZlEECFtYoJaBngRDR9XEeiDQ1vRmSfuf1ArRjz0jLKjS1NzVqePHP26aOHYrqYAUUsM+K/vuBzGJCi4LuF2d+r167xOwD15s3rTS0NHJbAtQznFeY11jXh2JqKOk/0ic9tQqhoKnRxccnEwWBxdZ8AzyUa6XA/LsaZFKSEGW+xC9EU1UBujtHNktmZeGQd6nHEiJFk7Yzyg5lathiXllhVceEZtKwBOIFknA9FpmlT5AgpBHoIIRrowfITwV5w1rDwNGYxV1WGq5cslkjsRWaov1rqH5nQy7zsE+DHW9yFXR1KdMdz8JuOlQVnIquVmIwgBzGhB2AvatN4/cad65SYloIPRtEV37bpE/Yob3tF2I1w+YJwzOsHDx/r3/QfPWxn88ESTNKCloD4+CkY5tYxL4RDUy2jWyAcFZUUM9Weo9cyxOYzUHg9kooDhyjC1oRtfi1rLvteggclbNtGramhQBYsjijoV0UPGVJKP+jBEwALj8Ct+cIG0rOkI/ISXB6mcPGVVz/96FMT0RgaWer+etcT4S/sgRmYFMBAEfyP0CoCXb165ebNW6YDyKikh6H31FYagahjR09IdEEvPzkUfvnyg7A5Lyl8+qzdTVVkh85Xo4Myy8sLt1yx9jSQmgLbRFtwQMaFDuENubmTGB619TUMBqukvROly7g6f/6ssaxEA329Wi7xrywvqS8SxRsOUWII0hymxxgKuPmOJdjuXvcdVlGZdqVO3WYJFfgBKf3fT5CDN1DHjpEt8PhxO9RZpBRcInRNzQ0wA7f8AvfuPoAiKTSIfvnyl3iJAKIgdffWW2+xB+CTVxiuoryHaQGdk7PPB4fPv/jic08kunDzgZw31lw45pDsd37nn7EAHz96opkUJj2Ax7bN5aw0CUVBHFoOHMI8QDUojUtCMS2efP6sEwzwb1Cl4XCIwmu4BTOfOHEMbDb2zpbo0+tYjm8eY0CCrvJTQ1EB75Ip0yG58OY7fwSO9QTARrcDgZM3v/9bCzPqbW9YZAWJO9dXcJcrFJ60P4QfMNB1NEZ8Xy+M2aYaGjZAjqlIq79IfOrMC+DHXW43E/347ne/+zd/+xNzBHz+d74lwhO7F/ZyFlGdAyYpUVGBUhBiBh5ktAbVxMRoYZF78VZsGMgRZN65M4RvJdZDpgPrpuDwj+TM2PhE76KyNdQGo6K8WKaO6QeuiAnHAr1luIWlRUyIE9SZsBrq00DDlMy2CpsTv5r/JfjJFLkwKTrH1tRfKMUJiKgHepK/IybWDceVjtriOMwWG+sWXkcv+h48eEhX2CpnZlLp2/ynhjt0sIWwjwwOQDVBFrRBU3Mxax84BKRB4QEwCOHzve99j/ijCIzZzQLGuzaEIDEX8kXzhMpLkZi8t6hB2PZPXzT2MV/PsY0vsEQoiKE+0RcFE1j8q2srboTxsx0Vx7/ds2t9trcs9sHoD6Rx1aMf4rRJsSfb3JFAEMqa+ngOYtDsLOxgL3gnaeDWW6h8pDzWxlZUIUa1ocscMAGKMqPlxCuzqLFsHdAAUXCZS3t/O2yAdEXc/KdzQsVnjOfMLfxNUjY4fAm4k3sdScjxNzptlAOYt7C+bo0LoaZN2oORKpNEnRs1hCO9gVNjpPUE32gffd2kPPFBGC3BJhAj15HRbwOte9kOkEvdWIA7OroiGUo7jiq6Lygp1XHSDV4KHbtnSQxFxMWpCakt/McqRrkjc2tNIqC9QN6zJ4+wu16R8/HDB08i95fJ+O/u7oUkLk9Df/b5F+CXJldWmv9v/vW/uHPrKu7B4+xTiO9c6Vld2nKjFKdhanzWo97nn218aaljIlRXl+3sLXfuP+p53vus4/HM9Hhb6yFEa6w9+ORx1+LsdnV5nTplb775ja++VMu8nOo/cvh4YWbu7t66wqNjI8OsB37JnNx0JTgls6GX255v37whRqF2EGeDhSE3O9+FqRiRy6eluRG2cc766lJOZsbkuFjvuCxArZXUcaDiiy++nJqcq6lvePa0w7kxF0MrJ6dgZXdP/6A6dFtKuzqCIz6wRGElpqYIQbk7VCfuHMGBcgxsI/EVywC5Jf/gARILV2xBiRXzi8Ibi4wAGENWUFn8iCpRwf3UEHxCdVTFa0lXoi9p4fKPUjzCkG7DWfMFS+AQnfM9YNlgMofqvPEr6xvKe2kQH4tLHWrdddDdiR8mqUSg3JyM/NyQQ/+8s4OPhy8EhBYqAKA1kIz+n//zf8afjMio/DOkjPLHf/zHG+s7IJydn8GulMX1G19PzU41NAeHEL0j84lxr4GdoaUWLk6fO4/Dp2cWxqacEJE9r4Bvcll5xeT0vIx+QY2Z2ZBILXXeXLxo0+oEjzttzDo3J1cPkLO8ugQMhENNxrppATXUOYkPl60QCpgJeI98aA04MTtSqZPow6gcmReiqOsryx+qHIpQgH0/Zl991TWV/p4+zspMdYCMfnT4G4EMVlleTF0r4INkYSVTBn5lua21dX+/5aOPP9Stpcg+xyi+47pHDx9adFVUaKqvp2rdSOdyuai5Y5oD8p6l30n/HRx0SjpYS5Eq++YOwz52YpSsyerEjDSmr3Cad01H1oSol2XY0vWNt96gBCzP1jA7AbCZLNfsn//5n2vgxY7OELJHVou9ff65cy9o4J/Ukuo9xoJJABhF/zYS1hKBaxGBxuYmt2VB1J079yg0ET/s5xofJ/bcpIuHCZ1lxqIFJ0Lt2riGyuruCHhVdYWFhKH5k5/8tV3KoYOtYMabJ0+eWttctx7nZBZhMB8z0i22MQvAkwXrk3ehMcqEJALp3T5ZmJ+Lk62XvrA/8CrliXZyVedn/8m55UIfJ+Bt+LAQ2GBe53qmljlBuD+46DjUZTabspOI9DbjgyBjcioUDqMCSPRwDvll+hsFddDOX13hF5uEjmfPYRW9iKpZoD7YNAAVOTK69Z5cQBFsQ7IpEJy1jSRcqmc19F0963px72LUjKz0UDQ5I/Vga4sQxNpmKOuhQWfXg8oJscY6ZSq4bXCFfb9+VM1XEKSnrztfkaWSksGREdeXKuYN83IVjp88wZdvSQQMU0zGsQAPX09efmFtXUP7g4ftDx/zE4HWrNEXBcFpXgx0XGcTAglQgdPABoH+2lkxNK0UHpI+Xgx+KpFb66ElUtF9hIuQj1SGILnGPCl0mnUEewi/S0tzdtzKYn9i3OLCIkNkh+tYstDCuLx7r732GtJLa9EJb4716ze/+RAaCwvDKpZcFPLp+V9pAuzBXsFyJI5NLIXark234AQwprIOyvnk2oOBzz//RNkuU87bct5vtrLCoSYhupyBwT48z+j21vbOevvD+4xga6WYsphwUXFg76DQykst91IMWAKRc6VZBuXoEzn//NJn+jeRrNSMzo4lQQBIeBoq6ztTV0V4VXridNIn2UwN6X8zggwMFXm2PgQczj006+qaqvyCvNu37kCaTkwQkLju9q27pEn6FiBxBf+CzZuEJT+xhgk+6kRVnxoJUrolOOGQuw/uj46HpUTEkjmhII17AOk9tdYo6pDXHRtz++5dllJFVc3B1ra5pSnOfg280tZ2GAB4G84BVlwfykU8bH8g3RrM7AqjOwRaU1dns6Qqg2gJpzW7FtcJoWN4lVR1RXNyBjngYTm4deuOpHYFVuVZ8O/0PutzIX28MGx+Dl0k+5GJ/83sd5QolS5I1926fUOtM7tZ8HCR4GT7IjoKSDQMzYapvBj9KFlWVd+clZN788mjE8ePOt6blpR49cuvGuprwc88INogUQ4I0hxdNjUbPMnAR4+6ULmTRxRufUFuV2T7a6Cr176uramT+0QfugEwNzutr7+LO9jqtjc4PB8fsuBMX80frC7HmLxz7Tc01FAIlqCh/hFlu+2dhLNw44P77SNDg24hogdkL0BRJH4eDGgxIfmWKkQJL3sOQmoHMoknKigyZwpSgPApUdW5jHCbgaba+uNHjpJZokqfEB/1hcgde0OfqjhERcNbTgA75L22IjawNhEOB4cAsq29m3K56kvefsuwkXq74eQ3VrJBctrK7PSAiOCBLuuIj38aK8AcCSgReXLqnyQOwzN72HK4Mc557sJCta3QyFVbzHANvKs/+tYsAodUVOBSqpWq9BADR11I0KJz86KTvaWlt+w8+X6U6rM/WGMYc9OzxiVasGNiY50/EJII5/nE9VjtuzuxzC9dgyws3jY4GwFQnZI3utjGgjEFOB9zIIH9AwNKXmwsh9O33sJzFA2wfA9aO3JWOKjdiJcdWHBN8ekcfLpFZtPz3OurqyEdiPR6Fxt56K/n9CYi6QQH4G8vQoSHWnron7gErsGJoiJlrgjVACR68/EcGNHVwj916CfvUty4xE86t5vSldNjaWnZVdVlcmPkKUr7wQRkpiC/pMBZnsKisdEppW/YKHw51Hnw6FSUUsE6JwbglxEhJ0h8RqWXaOfMSW4Sm7el5XmVOuW5WoZ4iH/94S+VWqMR+COpBpYBPMhN39xY/ulP//b40VbCI11EGwWJ7TJ3N2NOHa0nMI60JyemjYwMZaRkPHn4ZKi/172xi7PL/d0qR/e4VqzjcQ+7rOmbrUV5W5Ojc9Nj6ynJjthuqRCHskS0u+e5JDDuBOiVXZCTmxFSjUuLubxc48WmUTmEGgKY7IjsnKy01Or+/h7UgDHJDt3dYf3m6jAj65kz+/hTMgCbAwboC9rQvBBIRbDGRovo/qPHT8cnpwqLy5wlWtvaXl5di3Uh3XpIkE3Pyuju7cIVgglKp7khFZWJGI2MAciSxQzJYMYipAA8veZ1REc17E6otNcA+cgDpFlU6CPPLX4Yg94HGY7ywW8+0S+4gqT5DglANZC//in/WRqA/h3v1yeisPb2Y7Y5ylKS411kuzQ/c//hA6c+vvmNt905c/zEsTu378KMoWlYfE7NMX0A8Gd/9mfC99jAQz3jEDAjATVBhKaHBoWPZJ9Z3pTiimz6Q30GrkF7wkggPpMjWWb/voO2sQmTs/NDg6NqESQkkqCNkTH5IesKzqgD6KGzUziZZjIWE0eV3q3VDbt7mx8TXFgMFkawA0ScIultxNl3ihJgEq6gxXtR5Jg1vMEAGYElOhQSdB79lUnKgiFu6hJpqfOgM3l4dnckqStX564eFZ+SEuNLi0JWRuuhlgPN0luT3ATsjmlGzMHWQ3rj8CA4NCO/oJRHMVyp53hSIWRHrpkjPV3djx4/dCLS6SIJj7a7Av0IbUmjeUT5rt+86VRvmLyquBF3OJihnecbCbAoolBZQGWlAdV8qQU8Y3ZojRDmhXl41m1rtTcXLfXAjGAvAo89zbtp+aSdPdc/u8TreqYWEEsnmhnOGskrpo3hPOHLOdx6xOygFxIkvF28eNEKjXtPHDvu9di4fCNiTgaQICyo4NkSxcXuxig7Q/cQqVl6796dv/7rnyitxiGCK1IzUn/0oz/+67/8u/bhdtKhGUcRqAgd5o/qZO46vbGkMaQp05Fg6+qWsRYKz4Gf0EVXO5M1KFRgA9shpwy5h1EZYIGLMjNhRo44YcQt9+8/ZO7b5BhOLji8mRp+9tAEGfEm7iGQ/BOBDBdlJFDpyneCqR+D3rp5G4QGxZAwAJ++o4WhmTKApElA5ScxFuYLb5A1b3hgkJtA6mlhSbGx3GCNhfz94fe+/7y7SxGFB4/akaO6tragpMidqTADEt5KQOoEunwxd0nk/hkZMcUXeFtS82n0DnMBougBRryINw4Ebbh1dXKSscJuA7/1BaodksYhWsIGSP7mb/4Gc7IeLI6A9yKamj7c+mIj5zvTATPI4RRrxR5lZTHd3V1WT4iyrCjDEF2V0ItGVezIQBIpIDMlnL/sAUOac0QdHTBsnbYIAhrPc2t99cVX9AkqrK7mwCq80c1wboUVOgCnKXuocoOZimDD+fVrN/363nvvAcwHYAVO8kUuNJDRjnPwvB0v4Kenx8EmecSJQWZ9U3Md9+fz50+rqsMBmNdeuwAzh4OHqK2+vtpKkZEVyUiW78efHU4GzibGx6lwNLU6pf4I1ydHH04Q3CZQArBr60vf+fZ760sr8h7lTtNkVhzhGkASVcsitXDp0qfWNZMVAX7rrTei9VIct1M/zXyfPPkMtCwePIMEtBw1iw0oQYusKcPA5Ni4pCNJAanKFWWmU/w7u2FD7nW0YBDb0zKw8ZvsLe+ePXueIEd4OIbzFMMjBG7XOZoy11RsY5TDD81ZVVUm3W54ZEC8BQM4i4dGeADar1+/XtTTo54vtw3WGh0baWs9jPH0Y20ipybL4Q3/hw60kAsihrvGR8dMnKGpE8V/2BO7uzd/9vO/x5bOStn8lJe//azjCebMyZkQljmdfFKHTBHedGgXhvrBD75H4oQxcYWu8BJiCdyR/ddffx3P00IC4zdu3AAMnbMWyuKluQVFRMkVpbuba9kZKQeaGmlaMwIYjdrbP+DIwvxCKMnAtWG3ee3aNeMaRSekjBTbS4T2pSVwPjI86rnRheb2t9dsMt0aYWj2QENt3fziMrT39vdBskkFc865uvWVD39zC10KcorsTMMVTOH+nLSz5075p403o0I0ADli44L5Z/dJQZFxrmpMxbhHO3wCCcUxwREGJB8WvCkAxijMbSoOHjjhtQSDxnBFbPuHBiltbClxSGP9o7jtBOrEFTk+mjzYPzAxNbksypqY4Kiubh3mViiFk9QewxNa3ZHdOFdY7+/p2eppIDJOWgFG5XoCeKCCxF/qCDv5GzkV7DLpOutIako453b37m2StVA2Bzw3bXqRfsAbviClvSKq+QkPAN4X09SPf/oAW2NMaArGhU8OvDhly0CgJCKDEr861CXhD9UtNordaGALIs67yx6Uoy1PeyckORkMxmkTalePBAPJ8T1NzdIlJF5D0KmZaWtEfla+lhYPchWJPGysLK3ArKo6flXtZFOfKXKSUuVsKZbkKiIg+kAfcxCsUpSgnuGhB1EJJ77BDH20QHRiaE1hQSLITcyqg6XASeb1A0IyXN9QJ88cHgKjhFsOgMD6X8AQ8CJ1yPTkJbNaWEJ+pf9VlZZABYPSWpSxN8G9/W2H4S5f/soo2rNvdB4bO+Nvbl7m1t6GNFn9u0wUYLhEXU+dT4T6PwWi1UnxCVkZ2Xvb+5z7ag7UN1S3tDTyviBVUXEOT8Gbb736q1/9yrrP756WlVpdX1VcVgx1bOb5mT1RA9rkN7/+aH11Q6H+qUhFBSd6pUA4DC7PEhMfrK9vqqnaWJpDsOX1pdyM3NSE1IONh0DLoiovK2ltPpmbUT4+okTDcG1VM38fe4LecYbOGYxrN69l56SDmUVEy2/vbIyMDqpOREvagy7OzwnHQLLgHb2gVqmoCLOvr7+HLMGnQ0gopaqdTLPkJG6wUFfBiVVuL0c8lW6m/nROhbEexidne3r7XX5SUlZJ6kiUtA0qm8SCdmN7kwU8Mz/nX8gdSbnc519HI7HmlJRKDK1agpA9979B2QS9fUPpaRnojvoYEtdBiJ79St7YfHgJnEDyK6z6p06QEkhRkfCuD9g832EsC3iFg8mhcJBtcOQEUrya4OQ1JdU2OBwIEQGYmV3ix0qMVRlz6Uf/4veNqzfDERPmHaPfcuIJqMgqeWYjUpQYj3UFGF9oXmprciqYa9imrr6Gt1jxbHqQ9zG3IIc7k3388cefSnw8evw484KAPu3qEWQbCyX/re4Zmzv7qxv26Wt7/HfxbsUJyZ3bu1ukRqoSquF2nCaLAHOqIRMYOG5flVFpXbHxvgYdobEPgfKr2dEjICRE4I8gIVgSOtHAE+0R3feI/pIZ70qaEISFT/m1ZE0vimZx19Ebq8s7jx9Oct7UVre5KVP8RLqO2tgXXnzRjkpFl5GxMc4I2mN1ec3NTWUlpadPn2Kxqf0HvOtfX8tMyVCKTq3PrJyc5TnXZ0xbaCnE0ZExRhhXUGr6jooTx06cfNrReaitFcD84miNDVjh5Be0wBZ+NSk4xxtowcTx3bhNDY2jw0OxLigoDScccB1FwSvxb/7N/wEqrnx9/czZs07nIOJHn3wiXCDK7BAO8wJlf/7zf/CFgWIjRH1jM/atZQ+unKV59OihQ8lsJohCOyOGVO/dmLWl9bbjJ4XWIggU9DNq+NWuTzbzS2eDsVUcF3z5m5tj8EzPYSfH4u2KB4cHwAZI5yIysjPcapSZkb27GTK1DIpzWKI2QZYufmvwU5h2L5wXCOSfFCZItKQkrdMmZT9jw8MDGiV3FG/RVVAzPGPpALN6MsLfLDPYY6ZQX1Y15yzv3XvQeqiNreYGceTAG14BAynA0gQfAPphPVie+fsxpxfhn6EGb4Y7eeoEqCzwFkgFjiYmx81lbHz07r07P/jBDzCkc0fDI0Mjo8PWWLNgdGJma0dVfqX9IZU56jaAnY3X33pd7UJXC5EapExwd0FKotsbDhxo5iyIi+0mj48ePaGFbKfhlCowOgHBHujy5Mlj2GCb44rCorLA5BuhsgWowM9k4QjAWlIjBJd7u7vJLH8nDzpWjJr7iAKT0KsHpDQ772ISyzNtoyvnKGgJKQe+oxRHiS+2yvxNzskAicriL0ImaweNBC3AsJTxcdfV1Pb1yOjuYQIyprlLBcmcxYQB8SxSwwMFD5BvXpZCVRwMbbK8Oqw06yyc8BMJZpaVSUetQAh+cQ2uXPkSuSvKk/qH+gmI74SFSjeLYFg7Qro4Z5XBoswPi29DQ6M7vFWfVg1CPTfXdKSlqkWc+PkXn7FIbtz8Ggbk8lnW3Wu5vrZsW2kFcYJLOT7+lL7+buzx3rffBdX4aDgN0tXblZgQPC/U9dBAf8/zztqqWohSBYHdycsZUZhuIx6h2BDr4muvQpH988aWk5SZQv/OMRMW9SUV/sch+NNnfW2AuSlhBvkkBEAL/PPWNdWzE5xwm5bX5EQQPH/z3W/YMFy6dInRhmmxGEHG7dSY78AI/KlMXE4O5YZnqEl/kYaGobtwMsZwiYekAPlv4tsu52J7jI9PuOuXUDD3SYERbfmEDe27IJnmSc9IQwWer02XuO3u1NTVsgFQbWl+gSWtKppp8l6BXxG/G9euU7CWVTr4D//wDzHmiy+GY1F0LBvx2LGjX3991UEOWoiwU4DgUTvBFrqyspy5b0lCHduM3/3d32US2NEx2Y1FvMydbCKHh1e//urI4RMqFrj5cHZ6ckOp7vISffL9O/6r0IUotLXMldFMV/0r+gB+LjD1J9yVQRZomzORLdP5mlDRqLSs3IL+f/t//N9L8suu37qpjNvJo4f6erst/PaFvAxMTQVCpEG88vKrtog+pswmkexXUxlSjJYXV7VZWw/yAgAEYnNXVNKN24VFAlBwGArTcZBDKd8XbyZVRrLMi0LwZWEu5HSIF5ksZGIt+ca+YxXm9OTomJYmRWVhm9T0UGP6+NHDzBjd6kHGB/n1ogDd2uoqJxTlmRfqvW7ZQ2TnZqv1ww9rhXI5RmZa+tzi6tTEWEl52d5Odm1VtfVXOqvq0ko1QjjDyQSxMQ2ADdg//hoocynTT5Q5Uxi0gGGeEGeMd/78S/QJjtKM+o3LjI/ZC454HywRlxDPjpFA7zt2wmb4Aa1JMf4xI9zrnz6+eEUK0K4CvU5qO03idi+KemNjG9NQiyE44H411UxcnRB8o7R5JHYQLPUQbYE1w4Sif5GIiYfkTr/8f+ajgfFs/b0WreMeXXUIJJL4ro1ufacC9BPVcYIsZouuIPaTnpV08ivaw7s2PtGh/VMn/uISf6ED+qLI8jr9a3Qz1MZ3BPNPHe6FBOVw3tFPANBzlPYR5RjcYJFpxnmuT2jSFWtQWj9tGJ/AWRVnFKik+ywh4+Oz1HIwBZWa3psfGRkurczr6Z1W2l64Uydh+U+It903VnZmdmz6PktrPZ6XOq6kMOPsuZMNLVUJSSECUFpWIHG6f6BLQFBAT9JLZ9fTwkLpbnvsb0ymjYNAZWVHHj58FG7bSc3Iy8u3+6Sb3n3nHRLrVCXPFo9pRlrivdvXpqZdS7EnqkAOO8NVjpXK/73+8tuOdP70Jx9YwtH3UAs7Ep/lycZ2vKazqyszNxXiOcSXlxfc5qu+ReaWasTPpBMp/SrsaKZCvqRCoQyH2BYW1QUPrmUmDruntNSNV6LJc1YLoQkRA+kf1v1QEiQ5bP8EtdmdFeU1E9PT9+89UrBXYH19a/v2nftud4pThnJzQ9JZaWEpgtoj7cY4B7KvT5LgLlWmhs4hU+0OFEEsGrCmNtxUzw9nplnZ+TzeOMoH0YMGjPA60tMIxIZ21rMvOsFduEIztPZPH/xDzPz1un+ioDamTNIAz+ANC3+sS7etB2HPQPUvLS2KkxSXlh9sqndpYFpSKHrLnIpTYeBQC+7Sj2YWfqKBc8hIlMOtcBYzYxkd4QRw8NPQyHDg8MQQwranYgja1YAWhm01pYHY/Aj14bTZ2bme/uEddZGVTAsqOGljc3dx2VUmmfxkjCqsS5rMOmY3BN/MDMCkfsuB4p2whvGg2MUDxpQ1A4Y5+u4DVI19LH4MEY2hnXRAndnBIfHRxkNUiEqKn0xWqo7GsO0jrVPi2/bahgvcjGVdd7aZ68TBcaxld12QZ5McK4l/Oy3rUFOTG0bTQ4A7g2kIUf/4jz+XJGa54q6GmVt3bjtzdvr4iSuXv7RzR9mH7ffZau+89Xb/0LCTzQwd+zMfGHNIOlyO4Ba5raAW8QmYrUZgI+m8VmxcdEF96zFQkRsGTB+7VlSWDw0zL3aNqzeuOF+4xLQhO/oxTeSgVagCeBbnUUt0bn72zTffNN/ffPjRqxdfgXB1ovCe+xvdZDc5hd+n3d9kx1JdUzk7FWJTbtmcXZrFWsNy51parAcrjnWHc2az0aijnxhe4Cfd2iOEDjEGsOUY+FdxUSlB4xR4/Li9vr7x5XMvff7ZF/U1+DA/LJ6RbEyCg4g2hxY/yLTqu6w0Sj67EQVthM5MhPmCoFDhJ4sijkVZ6II6vflAr4cjV67IRWQMac95CTNh4U9MtEuBvaNHjjEpNBPd0h7Ms3MztB821h6f6EdyBTvPiIwhL8Iw4cVaDBFI45kmKb6gOPek6UMCzFA4wAOSuaNgcJqOjvp+5vwL6MLl5iQMC+/o0SPnXjwvMGhTTxPaqVVnUg4jSysymSXerCvvGN14Y3tfTNYKiJo8fNjDoPADnwaiOeXY3r79pKGxBfVtWlT7lXB1/Phx03G5IfQ6VmeOFlJ4IzVmx0CEZPMyR/CjF9oBGKh0AhmHW40pAVwEJ/IW+S8YhDb5W1ubnLjsA/Z6RUW9DlWal3VpvxGcOMr1ZqbfuP7cfepe1ENl5KpXYFAj1Lv8MZ5IkCOZvCD9i/JjciLAM233YQcSwcyenQmjEEgCyGDj9bPbovYQyHZacov+UVNFPtiAf9mqdia3b98S1pDz09/P6R5ubr5z98bQIPEslYJSX1fvwD0FtVcdYmV0G5DWt1SAGbGuqap84ZXzjIoDje4QmASwjSsXm5IyPV1d9+6iuTx7YYrd05YDvobtdd66m9e+PnzwUFZmRlVVBdcYP7EEIQqQtmQPsNIcySOG2INyqy2vZco/e/rELISgIQFT4U/BMehdXgpxfrLjLe1Zt+JmjmzpAXq5/6OsDnvYjCrjDhMYid5W9Pmly7apch2AvRE9vBuJF7EiVEBEYuuO9vq/8tU1bFleXo15dLWxGTc2PltZFc5rkWJgB120vwhCIQicQAowGySDE4HoeaU/+1yNNjiI+uFCPFVMdsKJ+ZPHQzVt/7QtiQknrfvxFX6jUmyEuNVUjLArE0kSqOd4opnNVIYeZBquvf2B0fggrKROL/zFX/zFf/gP/yHkGvz61+QU/KaspQ5JJTnC4Rg7FLy6d8s0x4b6i4uMu5ufW8g/gjcALMgm4fbAQQGKUhVY55cE5HNYg4B3ggVb4n+CbEliveBe+sdVlSCHqz/4gz+gFm5ev6ZN6H+sBzYyMsPVDWMTU1ycly9fFthnAIgFccjOzs44me3a3brqhrDm7wqO1TA5/FeQJcPtYmdnl8AOMJzzRkq9cSLw0JmUItdIw6zXG2LBIdHwplnADDxbJT3x3NK47fbf8bARwvZeoWRtMEBOnGlmF2xTVhZWU+Dg5xUHgKuXLBbqROvBkRIqxVvepQYpFvRCQaPohFzbzOA38KCplhrgAcgHjDb+6gTMOoxaIJwsGNKMgKpuHhiYlFjry88v6R+SWS9u1DGid93nhYKMeMyvBy8SASxnzfJdD54bxU8m6EtYLOFSzl9iomWbSy/UA7HtoN95WpxIZv0TA80oEa8Rs4wMLB+KV+gXNLjELkfXJqOGYNpWmocompOX6zL2lbVlMQ82nAJNpm9uEQjAIwknQ9ADCTzRlRC/vCPzrMmsk5qJkyDFrHSrAow+TU+34AcG12YEGB4I+VVB82oJpCiatPSrPqkhr5AEz82LPMCCUIPpe+4DC54EaCKFqHVlUPD463V96lkDwPB5IB6/eEWlQKdSDw+6u3vULa2uZsylra4ECAGQk5tZXJLF3YlCJE2Zeu9urDpRXbibFa5kn56Yz85RCzZbqAuPQghWdObWWfb9PTGQlKlpRazHUlLja2rLsbIjjHqQnkiJHD9xeG15abCrO7Gs/Ic/+GdWNVctth08Yjso71OCcElxwUsvnp2ZHVcYvqenc3Zmkvd6crSysb7p/AsvcU5YudOSZVoUpCiDoUR1jtrMBWr/Q5H9QABmZ/PWrXZHsuw+USQuhoN8o/O50ipP3IG6v5uAyxk67cND0h+VLORqml+YsvbT9dwtNkUqEtK26GKy1gwshxyQSbBXlqE31d0IdvbI8eRJB0LxVDJ2F6ddydSi+pDIT2NCPc52r6c2o+MjqXshFwLdpf0IuaIIiSKc5oKsurJWgZ+0oJQPImpmUDRFBe0JHi7CqP6JMXxHepKDqwMXxccx5TXzC9J7MUKU7eysXN91qI2ufPFcIElmraR2H6MzVX2REnbkaFt9XdXy4sz/j6f/jNIzyQ4DzfTee28AZCYS3rsqmAJQrqu7WO3YdN1skk2KpA4Ph9ofOtQuR9qRRj/mnN0fQ2m4Ekck1dMatq321YWyKBRMwQOJBJAw6b333u0T3yvq62Lyw/vFG3Hj+rhx48bk+FBDfdPC7ATzPNjXjTTuAQASgRdbZXh0gu56gxN6xIflY0rZZn6DedG/8MkRgVKqmX/Ck1SBpLc/nNy6eesOPw88ll6cUdGmwsq6jbhEe8KupKCm5pfWXRQlQJLk8Ew4MRAmJWlBkRwibeKOiwmLOslj+ulZGbIkY27/OgfdTGWwmRf5EhoMS+91C7awF+QnH+NGGpNoAIauMR201pWf6ESOdG9vuxGFafXliIv2k7GS8DGxMniKA/Rit/zOhLgNtzdura+1Q/rJxYs93d1uLfj617+uoojUhVyXbKSnWwnYcENcI+5s3mEzrb+nJyszQ97J4vxcTVXYqMRabDzjaixgQPKWbY0PHj3mz9n/tfxmzOAcwGDABjBMWilo+2yeUMHcMksCyOF9jo4M60eewoV3f2VH39Q0QB1ql7oAkiEYA4bkr/7n//m//te/6+zqsDcYfP3Ukh//5G3mvH5L3SeffPy7v/t7crUFqsX5uOCChRKRURPF9UOosRw+Bw+EixRiGExiZeafEGsWADaWGLPY5KO2Ng6ouAzNLJgJJCpFz/xNPqhUsc3Nltu37lWXI8Ey2IwCyIhMvgjpSWLG/8F7iOlbXGdqqnupZXj40AEXgT8dfooQDlfs2bXb6FwWDqUNMK4kdvVROlaSse0NmkRpUZOqqakjmLk5eZbt6SWhjJKVZ1vbU1bHJh6fEhjN23eQX4wNgabM6dRMA1NQexEeYm7oDsRCZeARTD/xG0QKvYJMOmEsLcP0E4kweSf1IIQxUpOQktAo/6GyTP4P+yrv+cHjlonxEGkT2JIIIYM1JSOlNL0sLSttLW5NUhD1AuFCJ4CRHavzxubt5199xfaLjen+oUFH9wAGddIh3n//fT4TNsMG7jEFRnBiqoNm3r69mR8WbkeK1cjSG+cJDNgScRHCWhScaEebQTi5Ji++40BswP1yUIqQ6kr6SjCIcevC/3SRqUHX48dP6HD5XxrwbhnbsMhc3+jp6oaigMm5ebWwnAeQcmB/zFiWRq0tD7TnzTDxjKCsgKamBqzLz6NmIZZ6R2KCwHUzHQ6upIB9+w6wcXCuE5lLXF4uF8LZtqVC+WR8ZSkr4EQmvP3Rx++FXfGlKQnYls9x8dJZc9xLzQgKz7sCEimxt3u4vZKYmEeb9g/0ss39vSGzi+rAVFQfwOwQLszOtT9XSkim3ETnpCy7pr7eASeS8zKzO54/A7DIuIIIDpxs29bkpAox+eijj1whwgmDfJ69dEc7GxbS2H5iYjwI+0Io6wztWAuuqFMVO+BfSq0VnX0PiSVSMvbs3SM9F0LsCWhse42usyhyWQ3F4kWlNsFpzaXPC+9/iLiOUzNegWNDhC7scWFR8/WXMnHKAIpQPzUtn6uqliU+FH0SacVCWJdGwlHesi4SvRIP9p/50rTjE1NpsevJg8pal4EZLrYjvwII5iWFGPmso/jNjJHYgHrKTrkYVO01tHaXoui+8gCsHEbitmkv8P+97/7AgT1+kG5tdGAe1zWInuBqoCITupuXZbbvGIZ0wDB4KsrlPU44u9Vy/87pF09asbkS3St+ffPNNyXcdnZ3CQG4ul5pAaJ6/do1QTpS8LnPfc5OqOXQ8V174LO7V7XDENt+99133T4jvkmB0ELV5UVXLl+i6LABhGAMZfTkZQmikyz/ZC+QFfMgBM0soNCwrdHzrs52MuKcm2BI26PWkFLMl13fnJkOkSx7cchRWl4hQ7I0I2T5wqTpmL6L7y1RimLxOM8NLWqOiL6omWXzFM/DTxDJ9TVyanmAUf2KcK521ok6zl40nG235Lik3p4uDfJycwSxzdf3zAL/yoq3j7W+SkMvLoR630OT49euXnU8ybvmAhJdoSmqmbu5wJJ5+clYVARc+cQbIS6O3vCTXXRfMCpM2ssiQZZGOllcCLEhs3ZyUpB0dTzwvE4ChLGP5AuNDWTZZmpIjH+A5Et8Q33Y09EMvpjAmI1xZcMCVmAxQQYIMRKI4Mfwg52wlW5hc9/RAPlWQMEKFDpNrRP6KKie2GaEHDWHC2cXZuOT4lWTF5DneVmd5OfkuYFZcT3VXVISw1lhq0ZPnL9CYRbOopaiJ9VUsD5nQxZg2APVLSxoAE5Y9sS0HfShqqIFKwYyc4IXOSvYEWDA9gSj42lRIXHHFdCEi7zWiJZ7edDeB4J0i7NN2V/Y0Yl3cZ3dHisfR6VlCLuJRckfYgy/ABBilNqulA3fQ6KEaofFFTnSiTWgaHbv3OkaUWrXTTG2g0LoTr35sGiZ37t7D9vg1qSktJW4+NX33nuXcuQjQiMwZApRB42NTWLkFu5WE6AyRyXE9wl92ZHt7HTU0UJ/e2Msxix70kV9edm7dzcvuL9rdpIBU6+Dplhdd3A2GDnTscmjc0XfpIew9EQGT+/ZvU/kAOOyWOiFpUxQNI7ioGY9FCA8depFJYcfPX7IZkiIstfPa5TG3d3TXlxc8OWvfJE+ZzZgGJwkHBEUbME/HIWc7AKZijhKUTPa+crVTzSurqvnH5w/9+rtOy2CFHzWzq4+68/yyirbmiqgFxQWIqvbx5eWVz+7eWtxbrGm3iVlWGuDMqXWoR+5ecDnzr2E6N6anppQLp32cX6XFPmQMaQ3BVB5Ba/SO3iGDLjAj1uMiBYtZAWb4a5om8sXWCJ1OJ/GFDKnVjhwOMEvtoIINs6UVMDoChg7Dv7aK2fvt9zJy8544/XzyQkb9+7eev70cWV5ifPIdDtCG5EWBoPAs41kXgXYHMExFqHVGyBxNra3bCb8NJTFs+XT5My0NlShgK8tThbd5b3DQ2MCdZT7lDyZycXE1Aw5VosLS0JrAsMEEN2NSFOYiIQH06cQcThOFgUhcbQG0Yg4X5KbV8DjCfmFBmjxifBg4i5NJMv4EOp0SDQgHDNHtT4tx0AOgYcOH7DEaLl3QwqQtRL8N2zdyjdqf/7U6VK1Qfbs3gnTvBw1piwA5NBbAzTU1nCnLE2qa2qt8fbtPWCykmj3HthL2VngWR/ycXGXs4NqRrc/eaoWuPOmgO/p7Ycrkaf25x0MWHpmFhPubJ8UUcpOxNc9NRtrqny0MMzWS0D627/927/8y/+nL5BjuoCn9+CHFSD1ZMQZd84B7H3jX/yLf/bVr/B7rKygwgQ9pCQc/s4QFsnNGVLoqrvL4UWTQlkNQE7QoEiyin/iPR86RLTVTzJc1YB0rpQ2e/21N/giC7P84Fyn2zUjy4i+vrbKCXO7BQfLSWLi6cB9c9N2NShsCzhoG5aRoyGTBDWBfefOraKS4r7enty8PNlif/EXf9Hd2TM5Ns6ro/HYV6syqhsnEz0aNWQTlZbevHnLP9m5jo52NT2M4oSQIWS6QxrNYBtKkomdcfxQXFoiYIEHZBgqq7e9eaczOROjYzhzV/MOufWVZeUz83OpSSlOKp84dkx6x7YtW+Smu7XOgSujrKyG+AiQAIyOVBx/hYaEEyKMkYRm6B+eK50D7KgxaYVJjGqyGA+5qW6cRgWRerqdhcKKEsNQDUEZMzwgaKJPMT9unOT1sM5JUX95u/gdk2EUy0h+GDB4LYYQVybpsPHee+9pxkkiidOT4w46XL50sayiyu6UUIvVuP5NAZA9XV2BVTZCZZ6tdfWe+/X69WtyOUjVF9548+at6yq+uzdA3qOQoFCCULonUkN5816sr9sqAcDuFpLVVTvQXCC7t6evm3M8vzg3NjosbaSpoRHkd2/fs5FVVVGVmZVzJ5wEXcZs5u60jOvAZCHwXYoLi1DNzSSWZ9b5Lg2UVqcArvFOnj6jDPeHH34sRV7ux09/9mMmFEXCeYNnz2TtWvFa59+8cZvekPf74YfvNzbUC4e3t3dIZIIlqomYOJcc7O+GOyX3OgZgOnafUDA+QRmeRW6LcJ7NhK7uUA5Y0gsvRGTPWhFpuM4UPm5Jio/fv//A4vyKTHScQKZigfMq04RPFpYPhEXpedF48qUBuktwA4bTL0/b2/ftOkABMri1NfW9Qk19YWsFJDLEKBzLRvozessQITGjoMC8UJlBYS7B5ldQ6RbXAZhyW1sJBd25ZKQSR9mgNlOMxzzhh/7+AVzqRAFzEyN0LQgxIa/jjTde57VjFlpajpOEA/pKhpK3ujrFyOMtxWXmVNaWObXpFexnCPKrf9+pBZfqCHA4aY2gWJfGsG8pn14BH6hQEExaoOvMBUSVBKyvq6OIzAWvPmhpURuQUAve2uT/+OLF1z/3aiTgIyPDVBYa8RZwu8vF/cVpOMe2z8mTp+GS1ABPnI4L7vyDDHDZChIZHNS2NLp48aP9+w+qQcwQSHfJy+XgJdIABKT92VP7eziQznRlCix19/Y59a1at0mVV1aTTblNFy5ciPYQ3CMkv4Va+/M//3MtCRpFp+XE+GRVbY3yx4ePHBroaY9dF+a4YBL7balsauzR1sYGkFBWu3bvKCgSjFuX2aVQB/OBiG5oUZVFiLWjs1MehA2uyup6vqudH/5hVnYuHcKsqJQtCwjWvBajVMjow2/DwyNUkExOwfYsTJPDZwtLo+AJK6g9MoLtkYzvaCzEEqD1T8gnbvwB7o1k2fTUkHKSuBGCSiaFiAJmyAotsI067IW3KAcY8BzXwVt753Mk8KtBNdMmek6/xaxuOIcWDQpdssjYRJSFT4rRiX8ulkLzWKWqvMKkyBFtRRL1Qye4wYY1JLCeB9n5JxMPGyZIGA0RTRMA/gmA+C99IaxEfQghICLrzsCblblHYOkI+iBC3pWz1dwgSx/qQPEBbxkavmDHqMyYiWkcTcYAIQeAWVvGqXFAVGOBw2ERZhuL2mJgGJ783AL7LHrzq5OLgcD/VGNED4QBrCABBqhiWxNhLWj+JlnII4/tI3tLYy0B7ycT9oovHuoN8JpZYtHRxEaSEnhEvJwlQDmz0IBsC8iDX+IXKrI9iCGSqoE1IJm31kpLDQsyjpItWE5wKAQfuwEn2LmVlbBLUJCpNp/vCGaHEzwws23LVrpe9r+j6bpFM39pxuPHj507e+q993+ZnLJZWlaQnEQvzLtYKhw8mJi7d/fhG6+8YXsBrmxV0Vk2yY4fO0pXoh9sMHLmiCfItgAYaHl4nBLxCZynq21btyvyc/ToCe+bo0FDHDEl2QS7OjqdE2X/6FAGVOgFk5WXVtRV19++eZO/SDVIlxoa7t+xc7vl69jEmIQBKszORlNTM21r9dTd1TE0qER0KCpnCJyNQNQN7SMpmU50Ohr3W9NiOxGXANV8iOZ66G5wuyivfe5NjuyMxBVbS2mZ6qIoZcOcXLz0ycvnX03Pyv7Ve++fe/W14sJi5xO/970fwGdN3RYTcW7YcDSFrANqghvtFATuJQxuy3XcAlRspwboRQ1ZtSOKdZrRg0jbOBIaT0uT1IRh4NNDbOyv9sQVeqkDF6nYJlZyRwzd8kB8zmlp3EwnVqvUYQN7crTCNT2Jm4cO7qsoK8rLzbKQCyGrWdnMB4b7BnIzs6rLK7bE7rd3Toiiv3zlGpxbf+LfzCxZ+yGFFGbUV0KU4wcOuH347v17YDh87Miss/yxI0rlFVXDIxPziyt9/cMPHraJvOblK3+2eOP2g/LKGpoF/hlrVPYiNRdtNxMK3GuaeNt3e3RK9VFnbCEc+otnJCYCgB0iMmTQxP1EqDkTE1Pjkp1SM9LKitUzCeUIQmrByjotTpTC8ee1ZcFFO0SxHK10J3Q5o3Mz0+46wRjObnW025nN/Pwbr9vHkEAMTmWdHjxsdbIZnv/Vv/pXCsVJjXBpF+VtCwpmyIuEVBMhWcCj+rXUxkRoGOtn0GoGTh4Y/mcvCTgne9/BAxEzcxBNH6oJWnfnU+Ig8oGIAiGscsO2JriyEjNHQeLW1pbDhw+986tfWHDahVdv0Lv4kyHXs5QP2AAMYmESw3GOm5t22D2UFCfGRlIqq8otemGPJ93fNwgqCQCMKDjhEpycLUSxQtMnPmSeLX7Y3a31HN9BuXzUL1pAjjW8hBCwxfKDT3CIpUF7AgvuesPSIHn8uM10AEnZGvTQkSPMWFW4hCGUuUhNSv3pT3/+2muvMcM2Ks+cOWOOVl96MFOC4Lygw98+dCP1u7IUknmetT1xmpY7KxO0QHURN+8kJYuUyz/etXfP8ydPLcU9Ka0oF0qy0by9san10cOjh4844mVh0NXT6cK4w0ePqJ/94ccfvfG516xmpm3bxoVzvbwipCSJ5sidspwL3JWkYMAzJz7pCtO3BgAGVI+MT4jIIRASKMbPJ6OI7KThCgsAZsUcrQmJakPDNlxRW1VtoG1bG5QQILyFxaXWAJb3yHXs2PHllTVVKCzjxY/7BgeK8otOvXhSAroYOQwACSSDff2GturjDXd1dxqIGDbv3CFV3YUYDvbQ/Ab1QVAbDngMH1JEUGq57iGTYb/r/fc+gOis7EJztBQ/duyItF3mRh6OKXzwwUd8F/qH7XARVWPjNmu/wf4+h34ok8wMBW1pzrGm5kZxPkFHZpbvQgYrKkOZUaWKJEmjmRR8EuQGXMFIIQzreTsAFmk2Y1k07R8/aVNz69zL59FlegaWmpyhAiTnTGAYPmlI2hgmI8cFIWSB8kQh//6d2wU5qTI9JB6o3OCeFucSJQ3YboUWJziZfspEGqZ5iQPKzJ6anCBoJK64qETkmNvNA4NY/M53wckYFQ/YY2VD4bC8rDKGn0HEIrbspi8xzzvH+gpZcZe7fqlKvE2d126pdXKDEFkw72reQwWJmzipLKALkt5uW2clTqlJF0AF4pmXFw7QS26xp2RGhIJce/3111+34xepQXMxNCDRS9oNxQghWM5DG2XoCzNCDPgTd+tNGU1wEl4SSpvFWGLCgsp02CDMINJb5sxBSQnz6i2rboKvMZwjK8P61ltv8UdtuFFl9fV1pgl4nCASZPuOHTd6JNHKiZBryoGtxz/4jSNRUVFJ8O0FgtO7NdXVsYsEnTyMxzAy9SX3QjVMqhoJM5Sh7xD4pS995e/+7u+YRVIWc42sGJP+5E/+5NatO7wXi5wjRw6JJf3kJ2+fP/+Ks0zaSxOilHCvY8dKXlgnSAA+euRINH14oAbNBa5eeuklm2NWmKT76tWr/omOiiD56cMPPyQd/GPOG96TOSaRBJ4JtTbwj2MtUy0yB/t7Rdjk/TqtDu0ksfXRI++C3yiEF5kk93KWVI8dGOyemOr/g2/97vzMvFvbB/vUvF7CGDPTaqqzWdmjI5McaYxnjW33hhwp/9XysAUH4g0OLWDAYLPCEKyhHCJSxmNBOyYYPjOyyXKcf+JGuXacLgLiO6L4Ymq0Aa9JeM5xZ//CAxFOqFOBIaPAT6TTDMENp9yMqHMUJxQPHz3ih6CmhYGpaYlMWAVZ4ccHcjQwovZ+Un0dQ2IbYouCmA2QvvjVXKBXQRqqLPgPNkcmJ4RHweDXyFrp0D/1w3boNjKpegCbV3yS+AqGNADtrB129yYbFgxWrAg6ISFj+B6v24krdkWOG41jIRlw0CNa6lcn5M13nfjgVG0MIFdEG/37btSwchBOW48XUASTn2Jvhcu2OOVgVcx9MwGEId4Gp/hAn+apT6N412x911Ibf8GgjbkZwsdDbXx0ayJ+0rNfNfOE16Jmo4UUWnpCoWov0BW9qOfg/cXFaR9BCzyD2nPn62ipey5Xbo7Mn63u7DFBSxvgGcXSSD2LtJoqafoi6d7yfHVl1VaMDmfmpqkhz2x0SnC3fExemIcLbuuNm3dDn3kZVTW1RfkZ8/PTu5sbceqdGy17d+4C6ujAWHVlDSP64Padvc07hJ/taj2PXfxuLa5wlaUFTuInkfPnHe141JLAIii/wEHSxhMnzj1/3mUp734obdIyQkSE18LIuqV465Z6s5ZOIHcTp6alTLbeaU1JSpVYbKOWr8s4mThqTk5PBuZLjLM/I0ylbLxTmJXVVcTPYc3urn6SYLsqJ7toccFWw8bIcKjDTSbZv8jthpDAP0ql5uQI4cA/h0zeY15BkYgWLC0tzqugv2/PXulmTpa/dOZ0dl7+gYNHBxzMz8nZuWM3OyT1xcYakXDcUG2hqspqZH3w8BGO1SEIXV+2dcsW5IONVaYydjGF1216mAjOwVTzi+GOe4yx5hq/+HlDc+7xmyCEiB3eECMUPtShNhxHjOQhEXVvncCbzM6KUJJlMD5uLTcns6+nY9/eXbaxFuZnRof7btxQX2LmC1/4Atke6R+sq6nFGNxAPCyqp7iB1Rq+cquC1ZQCJlsatkklwhIpQyPqw2rGB62qUPFzZaB/0Bwrq2s/uvixG0k7u/uGhsf7B0esBMrLqzfinLhaLikpF3Um72bqbCGAzZEaZZKj/T6zgCJzNHHzcmhveXW9IL8YnzjZ7y9mF9i2ZWTXOyM3s7am1Don8P/6hgOUY5Mj5I1IKnLnRgZrUfseDimtrySGVMDUfLXAnOUdHx1cWshofbBmwbOtrnZuZqq2snxLfXXa587XVFfAKr2ZmZr0aLC3oakJTkRS67c2iPTPyNWYmuGu8f5pUq5eJOB0BYahiClKJpA/T41yupxmq67l/y3c++yGbCgRu+Ky8oLiopT0DHv0IlinT58kDpxmdted6IYWTaflJA/IE1SQW+IHw0xIUYHLgvjMGBVst0HRiazMKtYHNiYnJyxvmHV61hkGqEMvnCCLibdRXVjJPokScMgWlxS4qKusrMLwOPDunVnZscwPKlg2eFhSXAp4zodReJki+hrw2CKNRCj6B/p1jkDCmb/xG7+htgl6IY00Vp0Q3phpLMvJCdG4vTzy588Bz9miAC15H7Q85OUhWWxFl8i6u1qIjAhJaqBnpsSeHvG3hqcuBD6pLNVECvIKrrTcyEhNJ4mKh4utkpr1lTVcdO78ebunKmguhBTeJmtyhkA0WFLT7p27WHGMCnvUmmD2pU8vCm26dnkwVeXelCtXPiVr1DswPr189YUXVFeUPfKQBYFAR1rVzwE/XHHL4Ie+9U9+FaKbtWttKHDUJ7aESHiSpjUdtJYLcev2Da/IjALAjqbtt2/d+oPf+33tDaESYmd3L1Xw+TfeLHXBSmVNpz1K5USWptwuUufoe3pm68M2qU2oTTqYI28Z1CuWZI1NDcNDg255U8Q2J8sCOB7zpORlFxaEXW4Yc0qdvEsXLy7KBzM1CyrMCfOqMO/ctd2tX5WV9bdu3QM5tJeUZHEHOR/sfYyfl01kaSnc0gUArMjThck7t25TPrwlXovLGZfmV/WsJdi8rjgNVGCVGfeFFeZZCQhGnDpz2qA0uW7xJ36GTAoK2iPHF/+opoCOE9OhlKr1FeFS6YEbQXbIEXqBEN4MLVITMafQWGlplYwCORh8ffEdu46rKxv0v8CIkI2NQBEBsT9KxkPqff/eA1h0NtRcXWhutue9EwzcJjp/ZnqO1Fh6hYPp6+uQvLoyzdnCzNjS0OZIwG3Ngc1KG+kZC4c1kquYKUR2HNGNNCsvnjrLbtohu3rtJs94fXUjdnVDWFLicu5pTa2UgWwLJ+tbpy5feeW1w4eOg+Tv//6/kCl76bhItlXYk9+9CySYPD8/j8NNFbPU8Ey9kya1jLAoK4M3nBDw36uvvk5yjx0L+Z8iIOg4OjKgnMvunTuIA5xTHTbkTSQjLcNWDI+C2nQ2A2l45MYVHQetfWkIYR/Fj5+0PRcKoXItZhzns6kiqMR5swyAE5Hp0ydPIocCl4YTlYcuG8k4EK0tN7C9D+RwEiyA+Ruc45b7rWAQKhY64b6DDaGPHDn2b//t/xo5M9KqTRxUyqL98Idvk1xrDz/pBBsgriw4Df76r/+ao68cKk1lCCdfDcrE19Zt4T9IJxD1y8mV19RhbemiYhYWq4P8jTfeAFVwZBcXMBv1bgjnanAmbreMMRdsDEKc2fqwpXqm2jL++z/47otHX5AmwKeJVKVO0MIHwnHF9uZmqhtF7MCIRPAdPvy4Q+ViPJyYtLm0uuCgY5iUo/TqklswrS6pOY7tYf7QoSP8rnstdwU+srKO4XMo2r6doB+mJ1kB8V8sNz4+QZPjZ29LM0rNzCkqLsVaoiTaNzRu15uU2pfqtiK37D4Iwb2Ezj+xtEgfcbBcN7onlTXVeNVpZrEb/9Q/QqAmJUCBmJQ1jxUaNjMv5NaVyfopMtDakybdaokcAOCMETSoIN1EnnABBydTpFiC2jTu3NwoUupHDdb8PND42E2UOuvU7wwSCxlTOJwOcUPbcZ54VQBC3m9IeDI8UExM18aO4WLJ2DAbsR2BwYXGNo3sNHsHwZU3JJi8AnRjs9MIDCDNvKsTX/TsiQbRDH33iYbDKyYPR/4ZtTSKLQybfVI5A1FjKgM8YEMPkzeonhHSW/r0JMxUvqQJxer/GBTAnoMtGsuv0XfvAi/sXcQlx2+IX4bNGuPCo3OD0O1dr+gUQjcXwy6MIexLiCFpZhcJGexVgceLGCgjltNpCrK0iD0GXVqROuIKs83xsekYVPYVk4T3/Efpy2y2gUVaBLA51ZiA4Ak7kVVBluR+Ww2qTAq9DJUU5OPFB3ce1VQK8vXxj5+1PyeNX/3aV4Rp7TXrBHjAgBZeOxjicwWt5f6mJSUk14Y7vKX1KwslvF1g8bC+aq9j4cH9lvaOZ7W1NYcOHOzoeJ6eCpfyz8LJv+qq2hA0ra7btWP3tcvXpLlDpMyfkrJCqRH9w86ohax9YxEVnUMm5FBqochuchrXDcAig5iEr6PEL2xISmEdWWGxENKCTyAZtrEQmYEKlsA+FbMR0zJsrZWeSrchGL866xqylY8vfqT+cvOeg/JjtOQfOASD+HY2nP7k7dXV1SckJpEleslcvEjsp8bHNGKB4IdlQQh8xQwI5gEAhFC34ARQ7LolbLYZToNL8gnxPA2Aqi1s+xsU7cyM55hKA2yAzyVW0Y89HR3QjsD44fNvvHH27IvPHrfeu3d3YnzUWjE/Fg8nzDbiuSGKdcAeQeOEiWaxeYQ/JV08QNGaBVW9PvvsBvAcnAorusGhumpbJesytZp37VSY8fGTdvWk5+ale07yVdih5h37Ghuazfru/YdjYz2WAYA0I/ADmPdgOGTFsYDEZiCPMeSaLRHevP+jLh0phjHP7QhZqUkjDhVOk6XPJK4uh8plAlT26ApLCoKGWg8pFmKNBpped6Bi1jmMtfn17PR8BeO31NVSgJSV6VRWltoh2d7c4DCfC0/cUYw0j9seSiAmX4Eoubn7i4rtvGFj+5iOgp554aSfAAxF8mqkFwo29/f0shwOt9CnijyeOXnqdsZtBrv1foswuQKUhMi5FBWo4tbXPnz/wosvnCovLX73l+/UVEm3E0DPUrt9cX7SiGyPGCe5PnjwkEvWiN6jx61W7JDAuovkYW9iKKOAT3Dpk4t4G2w4IeKcsCxcWqWTYmwsYSDU0uHdIiLuLSjMpw38U4bb0yfP4erYsRPGUmEGS9rX9BOep7KkRvC6Pv30E9mxYODEP3jwkL236sDSViz2UpBDxI6OFpH1XVzt0YNWHjBIxPbYUaqfyWBiGSV8i9yIiNxGNFPf+/vVonF373USF3GyU3ScVJzA9hAi7o7JQjjuFYulmxWd9C4tUlCgml9+b2+Pf04KoscYI8ZUUDFKqavPZnND3AUkZMfUdEvfnjhxAmC8c2CwfMJXVJN4hyePHj0WnobScIPHehy3AzdiUaPomQdpPUBt+g5sWAJ2Wal9hsWsedV7ygVTASyJS4eIRa5ty5imqgx8nX279zQ1bh8ZVQP+iZsuOLhNzbvF6miqRx9/bPsuN79AOJx9KCsOe7zsnxg5ZDY3h9Jw6xvudclsuasybOWp08dDis7qXEFh1mfXLy0uVXAUWh7cR2JmUsjMFHAVYhqd6BOB9fVCIUD57npGUNj2t6VFkd85edi+43y8pz1DSTX5i/nhCgBUCrYRRZdupJC5/MDS8hLt+QoLVgDrK0M9g1xYD+GEI+X2X/0jnJ8cF6biYIPy0Q8eMBccSzZJENwiioc+kCaxwEPEQiYrAUqJd+st7il+sBmlvUFxo6z0wf7S4YGehbnpnPw82Q6KwlldW/DGVl/W0iIzKzxO/JaUGkr20Tm/+OWvAJ+cksZ5Ki0rHBkdN0eXudpbl+578vRp5BgRmVKzqF2+aLGh4cGg2NuM7MSW2EtPTJAIIM3Mf5DAM4EEqe32IidmplRT2dW8Mysr93bsWq7pyRmagRZliVwd2NPTJTVO5N7u5d69+6R/wAYIoZdnDAMIx0OVQMi1ggQsBP/oAmPYRhoWbrG+FQ3Bw3AlHqEBzEQE1QmO9eFYI/fGpoVfCa0OabZchK5jSSZZDx8/cuO4CQqKsddEvqqmGpDIzTRTLGwCc08NkhGw6bykpNhzV0ngW4t8iUaeUyOfXPxUPxaTMAaekydPwZ5sEDIyOh2OVWBjNXWoMrYPe5iv4rPWitRFsG4LocQIPFNQaKENoePW+xIseHc4w/rNb34TKkz/Bz/4AZVlOMjxYoQ3w9nV0bMdHumGmBmuiLzeMHPEvV/72tfQERIkKZFTkBsRWT+8+LGeod1hlW9/+9t48tSpU9pooDHTSViYJCoCN+oWVABoat7uL++CprIclI+gsRn5q1uMGk3TzkZFacUnH13yoqjltvptpUXlglmVFcpMDW9uqPwzEzbWBoZEoJYXZ4XSbGrv3b1LLoYi1GfPnisqyGMXHAwrrAqej4pAKhHZ68ONUjHtfy6vx9lsNyiM2e4W+BYIl9DPYxEGYhyhiNrkL7U/fdI70A8SQEKF6ZgyssrSw5m0E6lR3chzQU+YJ49Ej7dJewf/I3b7J4mGIizBuBBbUok6lCY8Q2Nwg92clZLqRb8CEq31o2eY9JYP9qbMo078EzDBoVkN9eglHFoRWV4y69wJT+zes/ueWDLJEw4FkXRnJPARPBjRhb58fAeKh+ZmEYM5cAmxWZie1X8kvbgToCjni5Yemo8vsOB1fWJWB/70CW5QYovYlEItFC4OhvaTj0gMGAxEnJjbCAyvGDRmJELRbr/qHxbQhjRq768+vQ4erwAD2H71HVIg1F/NdAKkCH0WaikZ4fiy4lB69ro2csK8YrJ68E+E8Vfn/sKiVDxbDBEwziyaKVfJ1YP8PBWdYM9bblgOhHeh7+QUmFg6/0xNyXRRdFZWHvsRWREWNxBmbYMCD/3EKIe5FUzo6W53CVhJMXdqaXKsb6h/8KXT5994/fM//N4PHj585EWdFJfx5iuHh/pVAOSCcKwjx8JfYvPLX910yamZyqJWhtVtKoUFpcb6+OOP6W1cy5Qqp0jwWA5UQ03qyVEQYHtdh3xglphjpKoPp2J9I4dfOD1jc2pmz97dskF0UltfQ0sSYLNW2VfseWzE1X3puTkFOG9sdDI/z1UvedAu5AAJHkI2wkEgMtEgvH8Y1hXXzT/9Kpmzu6t3eXXDfqtr5GFeJQT04gbVb92qzKhV+M6du+wMogmJQmL1trJVl4rbEACQUFhYHMqGoKafKCNz0S3JRFMGz3cgzcyFSD+QPFQcx8OIjXnxEd3xCY4Fm3/6yYu+h7Fiu0D+CWaj5Ba4s9bJvMXVZVeulhdvbxTBRUAL4KdPHsXn5W/dWi+CDgYFX/fu2i0xNzs3h0iXhApivU5tAtPEn3W0wyTMcGT37NpRXiUzotIozsRc+uTyEdXltzTeun1fMoY91rv3Hjx+8iwhMVXS0OrCSm/PwOjYNAHu6O5xD4CIPgaGYVMGpPnBv5maI/4ECfGhQE3Qc0rW2gOSzY4YEsGweotVN3JawAS9pXoxDmHgkU/Ufy15bXMt7N0BOCMtnR5Rt2fFwVMlUBfslvAGLCqUKgtXxUmCSozPTEtJfPb88Vy43GTjSVvr8eOh/ByQpIqZ8uBgrxN7d27f4zpQpsePHLU7j40FTgxOP6IUCFGBKcKoZmR2WEL9HDOSUysJTYfuGzLo7t17JVSI1lux0HeXL1+y2vNrLLk2MyU1/uDBva7Vu+sqmgctpsUU4XnhMfLb0MCTKD50eL+jIPJ5wNPR/px7gWGgVB09aseI/spX5iGJ2uIH2p/tjCklx2FDLWfxJNJkbQZsOBTYg3Avqv+jn4gJ7XnqxET+8R//UYoOx8jmu9c1oGDN2ouQw4iaDo3PNNIzQmgcDpzJG6ArxNUYfua5p6cXQnCUEe1WacC9EFDnpjBdJ0++wFgKHwahy8uWAS+NWq45fsYD3G7JUT6WeYFvH7exptQ2oluNs/Q8XQNxI+yTcAL0SWwHBhKOnjgugzjSxvwAypyps6gwBeCZix5MIcIJ+aXYP//5z4vp4BxDey4OwkZQIJIl7I5a//A86Gr50JAD08lpqZJJ1Lc2CipE8TNrJ+kKMF9dXUtzWt447LFzx96SsspDB49x71JSM92b8uRZOEudX1AEOQIxJghXMDCmTMdaCHaKa0hJnV+YljzjeLM1r93ylNQ4RRfu3b/paJWr0Jt3Km6Tt765MDE1qCSDK4rM1KQi1WEWRIwWRVyY9/E9YhjY6OjouXz5Dk1L3hkjP2nPD6NyAUbqcTLqxPamiqwGeR4KYblvj1R6hTsIOTgh0pYwgMQEBHotBkg3Be5KXUhDd13BJ2rG1Lga08WkGFTE3McXExdwlYlpBYWaeuY3YCpgQLgZeShSqysDmUKIWBeG1CAm9tC+g2A+/qKrM5UkDm7f1WvXhAN4sT39fTJdHb0ly7jUnTbsrRr5Q0OD/iqfamMeBmbcyhg7xwwwH3xiXHsIJHpzY94SnYwbC4qABx5buxCCG7/1rW/5zvj/8Ic/bN65c+/+fVxzi15bPQIllLOaFh999BE2MB0mw96gxZgCQU/aHpnjw0dtxuEeMYUwAyeEFxe5tNgmw8BAv7dwIyUAPBJnUwPhFMPAwKasW+bSk5j7W/fpp8GNixmjsD8pH8ahL+gi0TDJ1iAWZrYS08xDYgiTRgw6YX6egAuqCL4CBr1oLV+0FIBjc515MXFAykmTABO50RQLwOxkHj58pKGhEUi62rtnvyEwMFbE1fq/du26AJxZbN/eSF9brOr28qdXAYmyRPhf/+v/t/naMDFHgxI32YBWNdt37DI1fGtSWnJPdYgQdAuuU0jUiDhNb4iuBzPie/DFEQ634F70QgU6EHdpQH7hE7frEOMZ5dNPPz1//ryyCuA0uk0S4Qyda0xHGVSMwF+kgUkKn+DL3wMAPgnh+ZERAoJkYQGTn4dzgGemTKEGs9N+6a2uqufRcjBdnqAiPdRlZ4uKblA1RF76sUlBC62+tLLQ9pQwxlOkjrPjOmaO1LCeJij4wgQwT0AlaH0DQzkFRXY5LDJZlijD2aQIL46KyEr8kR6ecw8cMFlZN6BCHdNHSvysdBI74id66f69e/C2pbbOW7BkRMeloEJXhNo/8YwXI34jINCFT/RDb0CRdAXev2a+QwJcQb7Gevvwww+1pyF9j5CPrPDpdWFuvhztbT/NX7LDChMKz4lqSD5ISvE9Fr2fC1V1oY92w3bYIuod6gOOYoeU/cQ2+yfc4b+E2IFIvQLLYN7SzE/eBQfWMTG/eugVD70OdFB6CESss+l+qJClFG4SMDFywpelrTw0JYXtpEfr1hPTgzXW2kc/+jeQV3TuSdStEGPY2QhJk/YmV0X+9WNcB3cdFgwwhGvMNoQHJFqqb2qIMNONVV6405AwYksRuqm98B+f3SlYsa5YOSCvC3oZywlQf8FpdB6y6djKR1rZsQJdTkXYC8NkehA1zZQjlZAan5y4agGyHidGwNu0UMKRsaytGeErBHD02S2ND1sfW1Y2NO6YmR7vaO+372yfet/+F2jFCxc+ycouKivfcF1jeVnB3/zn/0P1g7/4839BfiiOocFh3EB9+w6TX//t1zEWICvLq5yYT3M+JDWju7P78aMntICFrI+9e4kNckNtIisA6fCr/Uo7p07PWBqNj44JUctqX1icyhFsl/aQlbqy5oLbkOA0/GRQ/6TRpYwiEDC0tox3E0tLKjuefba60gZjlhy5OYXq3sib371r73piyN7GPPgEV9BKdNnHH7xvYwAFwSOaznfRrY+zayFInBTHoRcHYuCbGptLyitwRnFRgTLWPV0d7hvmiLhdTzKDHiSxIocCLCjn9LskH8QVgME5DIkGdpQghDj5p3oFqAkMvOGcCcCoNuPiZ/qRMtLeP0GF5bCQf+I3XWmpE4LqOT6Bc7GELfW1wirlxQUA6ep4+naoZJy9e1ez0LW0ZvSlWIWO6E3LRTFse4i2UFXrLCxNcqsDe48BeIxOqTqOTYeOjAzbCSBShQXlzTt2J6WkyeVNdlpmY/1ByyMV0dMz7UHlOTQQP0GHjE1Nhq09AWbnp1PTM03NFCJFYI70C9sMWhMh0UijgRnJbjTzRMvssL5StzguK93qdMl2pwOgxM0pHVEu3iHGJ8tBMWWkshVrsde95RYv52JSwpFoNyOohrCem6PU2rwD1ep/11eXz8xOEEVZE/kFOXFrS7RtUqJIc5dR2LxDR47aaqFG9h88ILtALypRKGBnU3gzbqcEg927X4RqfEgpSb/xBTIVyuD6WFbRHnR6iGysrbz88nkVEVS9kDAjcnTunFtsNr7+9d/m0N+/39LRwZz3uKEvHoFDnZAp3pXMEwE2wY1YCkq8baWammoREdNEYmqBmXTEqLw8BMP8Jd+o71dsRml+9NFFal2YjaOP+rwQhsGk/JPkMfM282BejrLT6qTSfTdOHKIpQ0Vpkxr8wAdlwdgnISI9c+yEkzkWXCsalIp4+eVzOBMSpAkpKISaWI72AwkOJICMjQYyjjSAPQ2U+Dh37hz/CcDEjZThW0ylc8aVZ2NE5NYPrOJ21tTxAOxxcP+B8dEJR33cxNJQslVtBNXfXV3ubpadoXh53+OnT7LzMmvqa3ILwgF6jouESYdceTkOuaJpiDPF1vN8LzBDI9vBeyDyBmXsGhu2z83egwRrJ1sikOxdDHnvbguldOvWbTKLH2hQmbu2DWXEkQ6rFzLL6AKVQlBKyFwkdptObU2d7a/srLy5zEWFu1SAVVQkKTXNlb0ERI4CK/jNb/6+IxAAq5DQU6xsed/CwrxMA6iWVWx99aDlXmlZqZy+6zeuKvJt6Tg4NKeM3PLK3GefXZLKK0J2+85ndhu4v/AJ+T4xONW6ESSeIixmgTHAH3ldnvT1DZ0+/QJnD1eAHxd5SzMfCoELgnCcMG+9/fbbVJzTMqpKKKKAsY0CORo072gK6zrV85SntLuTlixWoiIwJQ8b7JWe0TFSTZQq/0OHSA/nXscP/vrgE16a6izwiRbQ7hVA4iUejJ0cCwDP0UvA1U8AmA02yPmiDWeOuS8Cqw4mOVkAkwaVhO1dh84bmpTTCUnMDi0IBtqlZLWlR7r7BemfPW13aJXPyrWgpggCXw2Q9n9MwfkHgNEtxsWKJakh05KJ5jIaRWbOf/gPf212T5+2nTt3dv+hg/kFxWpTyBNUsOill14SPXnxxItmB3i4hWe2zPJVEkNFeY3kxPKKGniAcKAKKGBLfM4hI+a+ozgcoovJWj6RkV07dhEQK0bACB6rhgQegqlzzWgbsXkSTTPgK2eEGpu2IffFixcZC1PT0qRoVzPiEhiRjGMJ2DPlgwcPp2fkiGlCL6dWS14XXXHixIvCFj/84feJrTOdz5917Nm76zvf+W8SR48dO65nizGxQjlUUuchh+ywYpY6JA5vUDJyfjo7uh3D4F5LKOJbhxVmnqIUc3W1W7hGEX6U5tOVNl/96lcjkezq6UNuton2sE774IMPrGG0j6bMp+ePeULV//KXv+QZQ+WlSxfhykN/ecnUiL/YCR0JAkZid3AUBPJKpW/QtEY3iy9+8Yu4EY1wIG6hPOmHwBWx6pFeMWhRbjjkKsMy0qXQGHzoWACLLaYk8TDpCEySEG97+fy58/+f/+//9uEHF4Vjdu+y8zDy5EmLMyGvvfY6gyjHwbvIKnolsJ9flH/6zEmJQ5KIrF4QpeVeOFyHJdLSnMxx4KKYF6RmT15OtmvOlEVJzcx2Q5XKjXRgaWGB1V0aK5uYcPHDD6Dd3CMVB5moKRCz7+C+vXt369CC59LFjwBPxMREpidDJnZ5SfGwWx1Wg7MKFc5XSJGK1AJNLqCsrKifLKuIg/kaAjKxN4bBZrxar7t3NfB5zJGGOmC7hwEawQBd3uKOAuZ/sL3t0+WllfiEOPFCbq8glO18XoJ6/u7UmnNwcWrGmSWZGqYdouZIDr9khm8EfVjffIKfFEud909dGwNwIAtnghIknISdCFM1GRjxyHftTYZU+ItT9ektr+gZlAbS0liqNBolJglO7mejAUKgsT5lU3FYY355cMrNGSI0jroCEmB89wQ2MRzAnKyKHhrdx6+aAQD2De2nCKHg0R6cQNKtNlCmBFCwYTEnz0S87rueDQ1gjQNItk1WVkyBBJoyjbmZvbGtYltWOEFfuFBROf9PxWXd8sbOTc3MJydl2NJU+kbW0rQbjeKQM3CAVYbYG7Mnsi5ZwoaMUKXl0kQsYm2DnIzn0ozWoUMz4hz37j1yDKWqsjItIz49M/3M2ZMcrnfffUc+w+OHbQ7z0Rc48n7skm09MwaOe6WnjQHMlqh7c/1TJJ7hEcfEyrwxihuPYlDzFYNkQVk16fXQAm3UaF1dtWAql072loJCBEkknRKEMXPHcPApQs+zQZbC/KJnbZ15uYWcDz/RpDI1kfLki6cjHEKgk09Ena4h51afhXnhmj1ZQ0gDJ3w+dX8d0xwcGbh10+HIo9TH9Rs3LNZVP/zpT39UWlY1U1k+Njou+fLAgUObm81keHZmura2bkGyqgyopFCtzAc/4we84S/a4cPoNA9CYzw4wcAe+qtkmI+JANWZEKAiujaeoLvXUdx88RKKg1MPeCYwW2pST/9IoaPqK8tKJImqDvR1VVeWjsk1iW2jlxYV04wOZJNns9YzJHsyILl4bOS3vv47VOHz565wyqWPANnR2W6+QnrOsSMQ5lChPzu3UEBTgaoBFQ1HhgNLxqHFylzfkCRHd+clJqTayVODWaQjK0ehvJDqE8maefmCuFR8JDX+Qg7F4S/5slLF9pFk5efI9spEIxOUbGMpS7Z0BRUmHnRQYZ6f4MSRDHsFBMrGGX86Iy3J+QvmULaPAwC5MpfzoUc1oYzFpPXamkb+5dRk0bYtalo/VwCAguO8ojve06EvupItxr7ahRT7lN8C5x5CF9VmRBQBAByiF4XuRTIoi96hMr6UZT5uNzVmyU8eKggI5/xyKx82nh/MYKuyR7uon6jki9601wkA0KWl5b4CkRDuCenwRHvj0ulYhYWDFsDoiiX2om16pv173/seTvaWrAwKAcks+/fvP6jGCIXr9hkwULscDrPwrvRZcoEiMZsaLnr8m7/5j44QqMTniaAXhiQ1brn2BTf6y3bCFUfKOt9AlfsPcE+pTTwjjxnb4FI8Ey1p6DR4Y4M9FzuEZ0YZx7LulhN0o8k+etxqLocPHwKwTQCzsPDmTPjuWOdAX7gW17t+hfPnz52IDTFvBydg8sSJY1BhfQLbAEDiC+9/QNWDkGGOeAxLa2+a9AwEmjWSwTaG2NG8i4IyFxwFmeTdVgzmpPM9yUvIQzuCw5MwU9o94l476fQJjjU1vcEq0vzDP/zD66+/IVDqfOr4uGvdavwXUuYG+ru6Q2BvYGCYs+7KEf8JeUQCCAZ7GsZVwXd9VTr6sq18vjWQZDTJt3Rkv7a6HEvLOQwHSZ28XF4oKs5D8c6u5xlDaakpakHOsiaYllAghDnCAFwRIpTV0hS0MQXzamrCJ53wCQmow+c4duwYpjJf/hNmQ1azhjqLN6Vsg6cwNcWr0xvKRlJgoHfeeYdX50Ufo8M2tuQ0jI6P6JMvBTMcZX1CdaRnsJMGPC3/NByPE6qNiDSY1gqK1wtyAJsCbWB9ZRT8AGwjCtM6JSxiLfQDq4mqCS8t5hUWSFTMzMtxf0V1bY0XF548YQgg3OE7/O+IUmFeIb69euWG3FcCaFCOorWcuZA74Xm0wEuIaI1nMZyVmeeoIk4IHLJjO8MIyBdePA6N165dBR7W/cpXvsJzNQreGBmbunPz1ltvvXX8+AsmxcmGPe8CQONnT8OFAyyaA+joqBwchoycS89hFRjgpLrp4cTELXgV3lhPOMf56pNhD5ihZFhAwqg9XrWAMU09YHVrDyilprQEEtzCOQZACFIDeLhl3SDBMsz0kdg/8YMhXIluXWT6tNaTpyEVXoNYUFbZsRJ7Gg6Iq0ekdtmB/Ue6OvtQmekpL6s2NdjTj2K7kZ4Bg58sqt018eqrlQBgqR88uGsWOARBURnwrsWlfCwzmBVSg6xWJkCViqO3Z+2deMBcTIRs0jlYiPbwBEMawkoM67ooAC9566XTJ00EJ8M5ZYL/OaNmAQl+1QZFdKsfoxMHVVHAA2n0hkV4xCp+xWNe9JbefDE7o4iBVpVW6tYCwAcT4lUwROi1QkZNPcAqxnOxNwFxzPev/l//BmagUV0Ee0p/9Id/jCX07EUPnRHasbhDYPHRoxboco7cOToBK3wo3Na/MCBN18aCA0vSVjfV8pqclurj/jIWUIxtZJxHkcQu0uZ227Zuq4dn7CRICioMAHJIALJ/0gmjE6NWgzgKhKZGWpkeE6HeQavOJL6KDmuRArwnuk2RmixKeUIzRyiFXlPwCWQNZaYm/JVmQj2Isw3099uCz8/NT3abp6MFSQlNLoZyXIbrvrFWlFwUc/SXOfeKmvCv5VSy9UuJixL5eLAEWXFd323jWxywJwrziImnpqeFegu4319kg0Ho9td8gGUCPuZJQ2ngu5+k5lGUAAU6tkBy/GTamnmI0iYPOwH62GFk1TOxpln5iTSSW2dYIfH11w9pH5gg5GCkUGd03Oj4mCwlR/pgUxtdede4/gkALf3Vj0Gjv+ARUfM8wpoOjeu7J+DROQoBEv2gO+Jjv0rZB5tu41Q9dzbUoQC5T7G7yRDYdxc3oFys2GvoWRap/5gInVtGMUIk1tpUoFTAgBECVww5iqOE+2Hdtg4iW8zW7ivOkS3JyYtLmrDBguFduZAovO4vVGTlJI9NBB9icirU8RxPmB8cmJifXVxdSBofbbFAfO/9i7k5qbv3brs0NbhlW/nO7U2DffNO4jqErmRn29M2MSPXi5JAYYat2xq3bQ35tQ6TQZ1Vr2KxnDxYys5Ml48PKlu07q1wyyywuto74jYTtVQJASyjI8MJieHWNRsDVs8DI6u0IfXEWDIJ9m3EC124I2GE02CPjMMjmYxgOK+iMGhMdFPz84pj5y9DNnBhYQExEMi3BiCZ2B0Ans8omD86rr3VBUK45WBiYlws22LA3R8WUWMqCI6Pc0EePmhB05OnXqivkdyZTv0qWy/mkpVbxwlWBmhiYtLstOEl2E5iQpZUJExNpYvNyyoFJ9CeRpe8j/2wDV5KSonFLWPrPe4zkFA2+lUDFMd7CIrZ/OSfuAKc5JYVOffSWRN0HPDCe7/KSEveWlf98MGDgjzVLUrsiedkZrnXUMlUZVLIG0OiPoMIVl39VvrLPYJEThYQVjd9Ml9bF2yqgjmqGhPP2uqatmd9m4kuH5EKlDY0PPawjZvVlJdf2D84zHeRbUU/YHPVD4BE546MTeBt8BPDGBMmA94sCLVZY37zIqpwAn7Zf1Sd6Wiglp+omI88kIy0VPX8YoXDE0QcRSU1oARQMChriBItT0uRCukU/abLSpPisrPSFueEDxJmpjl/WXOza6rzT02E1VF311O3Nddvqabc5I4DcmpmSrkYBomiN+vK2vrLly65QNQe3eT4qFBnKKiKRglhQW4XwgFZaLnx2fVQFun4cUuI3u4eExQmX0vn7x7FkwyPsBwDTK5Jyu5dO1xxDQ/0m7zPA/v30rb8sEuXLrpFiFLGG06608XuIdYMs3kRWhiGyGOwGqH95JhFRovxdp4Mh3uXa4tebJgUFLO4e/cuE8ux43J1dnSpWiN3xWSdeFEdz4sEW4SP908VcVjRxf4AFcdRQAVZMe+88wvgXb12RZ80EKhVQaX0Jai4Mox5EE96/lxBzAnH4ukKtpn4wIBOjII62J7MojLHgp4J725umpEAsyeC3FpSgDjWHCUiW2FyUikrc9cSr+rBxC1Ww3psbhrd8YnS7351snlwqF+VQ94hivDIBT5ZBE8g07jSpchsfv4Re/rc2bNnz3IFmAl1DJ25pHvNyyah+sXq4fCf7B5AhQxQzIl75fNgS/LlZDY4cTLIvQUkttyqg1NIqHOybQiXceilVPn7D//wbcpNMBhIdvC94kS+1bIjPYKazTt3mwguaty2Rc9up8Kxcmw4+a4Gp6HLy0qlyjlGoM6MY+gjI8oAjmIziLUysnayuyj5zTYGlkB0blNSYnJvzwghImJ6RjtffICBteCcowO9MMZv0xVjDzQmSWIG+OkbCPcfdUKRuryPkd23b8+dO7egkZfMC1EcR5plwEBu2DMxyoOHLbrdd2AvDfb4ySPXJgY7m24hosrxFDwjOutjspQbfKKL13m33DITRwXw6IHzisfIr1/BRg16EdrpRvyDS8kCvtLec3Jkg8XUcgsKwe+JA1QicSpa0C7ZyYm8KBEsoSkW14rERIwrBsRnzdtX5GzFmbMhhC96CnXSsfILi73ePzhaUl5Wv60BWjjBlJh9sIaGKvV39gh1UK3JqTYAxR0mHaNG8fzA4Zykju6Ort4uB5JUisorKLH3Ls5VXlbV2NC0OB+ySVkWDKAEbUdHqKngLbYY4SST0AymjJeEZo1Lj6GUgxO0scwiSSbwBi2oD7HXrlzjiFuZYDk+K/wTag2Qj5b2BdERF34Io25bHjxwDEORKC3RC5/DpBNwCk9hpLe+9EXjeo4rSN+Tu/dPnDhFVwTZmZy0orNAin7iPTsi768gIJP6+c+/6S8BvHfvvvUD624sNzOYo5NFAgr2vuRM0gA2KyRA0KJgk+VI2MWh/LVpBmZ3BiOosA5+EzjAD7L8EVrjq1cvG7qpYav7fV44flR7LDQzpVjfzNjIkFnfv3vbjhmiQA4hgtWujo7/3+OHEf8DnpibC6aCQyxETWlsuPfeew85kAD/4z3Xd9+/c9fC4/Ovf44CMRHs6n47qYbYz+fJo8dcRE6LmQ72B3VHoMwdigDDh0NfXETEFDWBZ9wbyJ2X6zgvIN/8wudNxGXrsU3oJNW/x0fHbW1T0dWVFZyW4UEHtXNk/TlY0t2pDvt9+xhO76hAKMPi/Etn7j1oWU+QopGQ6/CbAF9y0kz31EBfz1LH2npcknPSEmdw41Bs+Wcs4rB9uzLKIWkwLAYE45PCzaFDw0vkURkGJyVAyDQEV3NpmQnTLbzxviBfJrlXJJvR/59c/pRsmj684Qoww6SJ681AnmsD83Q1OV2yrpUVnJK0xVmR/h4ettxs5W/phIW1zfSs9MKcPPu3DLSovhJnhaUlQqKKhiWnp4Jf5ktSQlJGllSdDHMU3k6QBZ1WAhucG9Iit9WWeshMIrpUCWmJ/ppwpF9MAw8hob+o4gNioSN/ESxy9E3DZMzQE6TS0l98YGKER4YGEpoedEBWWJQnhyNr7r7x3EDkhEkwYcxEhdkolIHDShlLD3ChQ0IFEg389ST6ZwQqbaWB5xpH0JqLd3VuFPJDdOFXYyxeVFBw59ZNiF5fCmkSEajpzu+uhvQJPSTEzil6rr2/lgHmZbL+CQnG9Zc2iaUBFAV9NzMHc4pD+sk+VVLqZrIM67RwzECMIFYtcZ2iI+Sk1TfrcqcHeDywETNyaylhRZdOd6TmZaQkZy4tbIp84xXHWeS9HD76wvLKzPrmWrmc5uSEa7duZCZnOxheVVdbVFx849ZN9JHVYNvEIsoyrLK8Mro+2hlEEivVGHGNJaxF/cn+saFCdxNUcgIDrgigO6CU/RgcGOaRy8NRlct8lY4Q+UMIDvr9FnHBCmmUz553wQCKO4AbNkznpNcXHD1SwaniB5g1k++OVJkM6vzcvnOzu7vnhRdO6C0qViUcK3Fcgu9a7AQIH9sQuOXwkYMtDx6qNn3n7i27Ftb9XBD53C+8eDQUD11ZFGpH51mXIU+MDw70CVMpg5OZkc5/TkhKkd5jaPoOGivLSs2X8JBKhfRoZ/W5zUW8HI2QFNXc6a4Nzsce8WuhThSGwRXwEHGRvz7a4ChYwpw+OCTG5PNnTp/qeN42MzkqEwYzYA/5ZgoC9nR22bOjwiyWaTTO7q/92q89ansKh+boY/eGeIszUaO4EVpE10AIWp0TYLA9e95x4oUzE5NTav5k5RRUVdc7VN/dO1hcUirer8rkwvKKJDFU2Iy36gkCYkQfkoWRTAR19Ex+fSGSpmwKLIdfbejb8bAZ6AO9pkO5+A8eIJALqLEsYp3bKeJvE9tdO3cOhazfUcbGOkGc21IhfnO1td/OT5bIV293R2L8xsrCbEP9YVZHgRSzg9sQoV9ZxZORnSCDKAISxmD9cojzYTzh/8T4BJnrYlFeiQwnq0BvwL9XoFEwGIo8AYylF1CF4Tl85Noc9cNU0D+QrDEzqR9z8U8opTxizRTxTPGixvjcfiNbxdhziZREp4LgEGC8ZArg0cOHmqGpWajgLvgEiyJkMIkZuALWM4L0vnhFdgrfLlzLnZEByOzsJ1YFSnOwBBiGoxwtQXkJEM6sGt3rkAwqE+zt64n5iIm0PXhQEAOYKTZmTiyqjYhqoLK3bjjeg9nJGNa5ignamKZ5qZwNgXr2xNS8QtMahVT6J9IL/jmhHtu1CJkbukJQH+bZAW7kphPATycEPTA4SFLg0KT81RVM0r1R3JpQQJSVAzpyGWGe6wwMveE3NDIcF0F7TzTLyMyVx2XJpI2IiddRjdRY8+jWcPAMTprf6xT5xHS4K4MKN5fiLcVEg3UAnir1XBnB1MwMJwiHpLRCKSPivghSQNnTcwYNhymrKsQOMENTU6OFOwoaWsAqrAdm5py02YiLl5QCtxQ1BegGdCenBWUdwh4ebNMShDr0Vn5eDt9LHgtvSaCU1xVxGpaDFnxC3NARqs0L9+rHBTm1NVvxsPawB/NWj+iFo0wQsSzttDe6L5Z2TVu3qMtkQcs/xjAGhSvsCvnexaJaQpeItU7QC+PBBlJawomwwp6hdeghSKALP8M/KhvRE9m1ftIJYPwTgRAFh0A+hsQJ/DD/9FwDS+tr168odUxyMzc3qsvKbt29k5UVBKcnFPaJB4OJY49oOWGJK8bECN64cfNzn3tdn6SesaPrLEQRl7rzV6Caj0jKMHZeXqF8/bAB7gj20iIAhLRPhOucQ/jcLZMwLEcU34JH5gCcb8YnH//d3wUD/Jigv6YGk2BQMMBuN7cewh+2toZE5411JAOnJ46yYAmShRUP1R2gcDo62r3FsyRlFj+Sl6SloYsGMKZPlPWiWQAVJjUDFcgZUxNhChWWQzjUgT1yzb3jxPuA1kD8b/zvLcxJSxANOEdN6CUFlCHMEDSYNCjmoS7effddzWyYtLZetVaxeY7cqifBM1Tox6LaoQj9++err75mXUpgkYA8Tk6NVVWXzMwmAAZIugUnTQXgyOcxIy9G7GTi1M7OnQ1eBCpe0p6YgA2W7AXBMMWlcx+ktP4Bj4NSRvQiltOe/jlz5kzkM3zwwQfEFrQQZaCXX36ZmJgdJAAPc2ItWNUz50FvuvU6dpUapEOkpHCePQlZiw1NjTr3BT9U19ZqE8VZBNGIFVyBhxJm5FUYnJmedy2bCXI/+KJYxU+0LlzpVj8UCDnSmN3nYxhUAFeO78vnzltR7N+7r2l7w5VPL1u2WYGLyllLbNtSI2tapq4S6arfCuGtrSx0tj8Zysp2hDc3v9BtqIws6RsbH4c0SMYzJo4ZmHJIELnAD9hGijXz5AtaW/OgxeOHjzzxz8AMiWHLBVqwmR6woq6gCyp84aRZXEEUVCCHWmSyjxzXys3LTRpUJnODd6UNtPvVTAWU9e8yVfixr+s4ZWTo/dPZNcjUlXHhE2bghH1BbpgPXlDMx47fvrVaIyrAJ/QY83ShEjQRZwDOc2zkifF2b99hvWMAaNVLJCQYwq+4SldYgQLy8aKPxCP61BdzJgDMhugvG0PwvA4j5BmRIhqr0yaN3jWlkcwYgiT7DlY9Exh/vYJfgQQLGLSvp4vnB2zN4EIbys530oLtEAyEJhyJN3U5NBASLaCelAZbNRHMP/C4kGYd4UWc23fTj/6pvQYmaJ1gXKP7yQfGfPfccFQSFDmDkq5C4mZIN9yzZ9eVy59anwhJcvkTk3B/7saaVf68xQL3y6TAIB0D8Cikw/XV9bSUlIT4FDdcWDYU5Ocsr0rpK7ahsrYxU1aROzTQV5Rb6jy6yJlQpSukYEOMrXFro7ggaLs6umwFSBkkrl/96td0Kznecynu3FyFfY4ePYI1XdMIewKorQ8eM+d26mHGrZMHD+19+uxBWmYK8jGlLIfY2LatW1HB7KBRVih8op1VHDO8d89BixY7vzAJRX39PfBG7eIQisD9YkRRuW4/QTKxsaFWlO8m3Y0L775HYTkUhR/Eh/CAGn04u63tCTwojsm0wA+uIAnWTnJMbUY7ZCzy/byj6//+x+87EeuanvmFZfU0RbWd+ykpDQee3EsNWkTxuusFyACQkMMZDSzBSSKrwlRYy0RQdiLUug5MiJpe8WL0T9998BJU+CkoJp+ayu1NW21E3Ll1Y25Wpcuy7IyUzdXl/r6uz732WmpyopwkNLVW1b8J1m2pt9gQlDKu3igC2Sa0OXVwYN8+OhHniGoIvYMQDu0X1zfu24hPISDKMDvIKN/fuWpKSrKjqurEllNvISwVG6FxjstuYQxbmjs8ozQRgG0T8U/9+2tomMSiSrjSp8prhKB7Tk7EdU4p2FvgFrCqhXmhagGMqRtgIt2dXQoC7t2zS/Tr2XN1oixNs0Ul7JyayK994Q0+1kC/7eb5osKY2+04UHwo5sMRR/pjR0PBE/VqOPGsjg7hGWA0IJhZOIFYWhWSAYktNWClaAkUNAX4oSW1wqhoh39scfKGJQJRNRxEShNbchFQRzNk0pWfSCW2MYRZW4aJN8MPey+5xfT9Sn0ZAgP4wBjmMWu4clbBVgPbox8dXr589fz587qCUtzOS/PFWMqzmo65+H7o0BGk0ZjpJWIuypHoiZowoE/nBAiajwZYHagEDW/IjNJtUXGhwwxuV5W7LIqPgk4NCkZKjmLeTp48rZl7ACzLSSI7x1Hgc0uT40zI8YM0eoxKtFNhRBjjMjpNgdzUPZ8ABmBpamrSfKEdDsGvOh+vBSTQa5mtPhiGZ3UILGP2z/7ZP/OcpKORTrwOeA1IDQL5zjcy7pe//GVZRkwEnBNVo0vDRT40QhTbkljLBD2ZmrYLNEYdgcpD3rBdPvyAPaBL9Berg9yLHAn+ovPmnjt8DNT0tAwEIv4kT2oT/Dv9gabqKuoTHW1224JX/VMWb0RukfXU5OT3378QuGVu1gLAfWqmI22Vs3Xj1u3Kqm1p6dnuoYFtFdWwluJRGMMZ1u3NjbZ5rd4pZ9imHACslJBsVVPm7gA7crghxHQiLsU2QNUbvDU373QTj9TtyBzAuTiouWNp30EOzxgD27BcMgcIWmZqir04ziVXADIpAbwKb/4Jq6SDCJip51YIiIIxfOFcvvTSS1riBA9ZOl3BAEL7ayy+iCHwRkdXH3nUkpuCWygiqENriAU2ljAKspIjOsnmg+ImNmNtYCp04/C0D+rox4wAIwgt71T+mARxouS664riCr6+DRnp16apYCVimQiNAUVIhm1sK1EvECUxo7GxWcRKt7LVnz59Ah7sTaVYnuFMd02SjrNnz8Cwo8Y7du798dvvvP7Gm0Kh5lUT9oczlLPDwBH+3VmBIu62ghMpDcITKyERYdHskE/MGx6AbXY2vXHX48eP/BM/eB1pLAC6OroZU80ijoJnXiyc27k3QYSgY/myOAEPUAv1W+vM17wwA+bh7GrA+YP/aNmPE6zNKHmsrtKdk6Uy/nnbSOZ8Mz1AMGk5NUZh3otyb5wEALBJwTOvzHLC94hS5M4X73rFx6TAX1NTjT8NZEfu8JG9wqSG4wSD1kMBAtPBrsaCcFaVIjI7MiWET35xAg4EMNSZAo4COSr7p7WTqVmTmBRUgApihbHMHTZwC9nUXoeAtNNiCiD0BF3oClD5iVzAALmOJMhfz4GtQx+/ip9SDvDvzPHtm3esKE6Lyt+7hyusGWy+G440eUvWGWKZjpxJW0mAPH74EMixE8DwOWWise8WKqj88FErYKzZ8A9G8rE9awcyJSmBXVQ+UjC8NFRqql6QbR8f/7Strbyy8v6d+zPzMxurG6UVlZk5BVxBGwhPnoXI3fDIGOtcVFJqWV5UWkK+3O5n45E4EGSzAINRiBjYpBKZndRV4gYtXnepIlT7CRL8FKzzRlhlQa/n3gItAdGbWVACJkJxkUezZmJsHcgStL2AfDBM5WpAuPAhVtGGTOnZu/7SEl4RI9PSE6BClOdQYVz/RCzfmRKwAckTwCfBsnYI4zedIrCn+oqGMRPT8PElzLMwD+HFWrT3RDMM5zvxiDSFlsDyLhGigHCkHQBtAAQ4cFgmXr1yDdyCN8bVCbXIq/cEUuBI8WYxdELsVz8ZAkhgw4sm5qFOtNShxiI7Eu39Gk0Y5H7Vp7/41XPfqTkfboHvXnFu9X8A77mqJvaJ4AI9ZE4Yznf96wE/+WsunsCXt9zZBBhz9BA2fGe2FTQALdffqwJZoVzuygrngLialACHhAS7AZsbspKkb9jEgGZFU9KcE1BhbWoypIpKXHLgez1esZVECazqYAgJJCbwzBLcoTk5O5ebn/K8q2egr3u2cKWkqFzhl6HRUdAqUiEgeKfl/o5dewQFZb0npSa64SIKFmqALj7BRYtV1WAwAM9m4AOMyKU2C6DCLb1gf0LSeVl5CFhiSvg0WX9xDF6XuAknvH+RZ7tV0iG0KSqULRbWiuLHOhHIYUG1oUcWn4XQKYfAJoDRMXHkn7ETPqCiI/QPt/qRikfTlZdLxOTSJ5MKssE2KLdPSVn0nz3/soPFYkbPnjxWWn5qeiHetQapKa7WtDQOYpCYRGDQ3UBg1ifFwYlBdJpLFSBMYqZgACeaEj+okALkiQ9IEM7ovmMAM9LGw4gf9I+mXrxx47qz0W6wK8oP4Wdcvbu56Y3XXh4ZGiwtLVGvGdGlr2MPLKc2XG9/qAJkLGBoL1psvekUB85R9w1ikxLTtlpVbN3qvMfte4+scB48aiWVHV3d4Yxvcqo8QMX1BMwsj1PTs3AN2PAMuwUkyVL+CXK0xs8Rr+J8U/M9BkxIuyKDEOICRbvtfrLV5SdvoZdpJ84kOC+rBw+FY30xL91auG2sL7c/f2JZVVaU77hNw7Z65nxsZACeCgtyO59LCB7asb1xfm6+p6cbjqRe2G8U13fZCl0m8T47O6w0eNJ0KOUADKNwxylWqAYzbe4vqSCDjJAG1Bz+RAvWi+UwTbTDqNBy6tSLt2+P02U+USSP98OhMWWdmJGZIrqWXEzhyddff0PqNyZ01J7OcZydUvITkDAJo2XNSLGqhKt/rh6LbvoRGsHguw4pokjX4x+w6QFsGFhij4UBj4drbnaIKMsI1+nZuzrR7PHjhzIGjx49/Ou//utmwfPmDWCntiePGza2SlF1uJmwkAXxRSwG58/bn8n58C4qeIUwEgfT5DLiQAsJaVHj4xOYishoIycYYOwxkx+US2IivgKeHtjR9vbnkSwYxU6ChAfPDQdI+XtOmOEB0CKKrthmr0M4bFC5HhqCt2dcskCr6xk7aQYJYvQkSz9exNuQTPqMUlFRGRipqOiHP3z76LFjTHvUoaReFwxRQRc/+ejK5WvCEKDFSPoUgNYV8u0/tJ/npEAq7DkBA6WMphF59qQGGJgEy+kQEtRbbE5phnPTZ75g3mmi7o7Omppqr3AxXSrCIkKF0MOlTy/2OkWznFhQGO4+BQBBcN2ViKAOExNTfvHzC2rX8s+2NzepFu0GRnmGwiIU4yeffGo4iRnYBtHtZNLPkIYFYuZik010Ltp0jGviUOFXVEY7aDRQhFV/cRRcwQ9G8oVMs6pwqyU80BskRR2VyKpaMERmHnEhBDNQ7Hw4PBkN4Z/mji6cHmSFQy/iVS19RyPUoQ+9a2gfogE87Iq+GnB29Q+lxAcRpVc5tL0Rv670BRsRfGWHgDdDsrgXAYbTsKIAU5haUmrn887RwbFHD9uMQgo4fzAwYV8sOGHPaLwI80bHRWCm9AimtDrtzZ1+AKpNMIRT2VmyO51TWlbCREZLnY3Nh66M5d265Oj8y+fkm+EHYD958ljAC1cTeSwBdYCXd+FGkzv3XDF+0EO8FOkEbeCBJqEx9GAikGMg4HHiV5ZWTQokMA9Cughm8ICsV9rJd53bfol8NbT70le+CI2Qrw1dYWoozkXmy2oJ+Z7wVuEBTQm7qy2thYxIrrmMmF+fYBDSggEkw8lQiq/My+z6+vpRk0JDViwHeDIFTrL/xhtvUI/19XUmAo3mODTc97y9raAgxElNUH1hlMIe9BvgzQjvMbX++pXJxiR6s+QwENXHQ7MkEKH30PKPBvOTh7xwuEVE3hrA0IIaMTRQcTIsMW2eQxoOgWTN0Pf73/8+j0JLGuA73/mOwKLp/+xnP8NvdJc1jPCEWcBhpGNN0CLW3aOiJOq/myMcWRFt37FD50aJ4PcuLoJYQMr4UtjFWUEDqRxIc8I2qTl3jmnOxOcspkG9GFOzT9R04eF0Pm+3YSQ06Egs718G+Ccff3z08JGS0tLnbU9oK5dN3Lpzu6q6UrWOTvH10jLVeV84fhyT5ObnQ6lNKoESl4r4VNeFayKlEfJt4JkgewhyPKaQhi/ozl4gHPoaC1dEZk5vnuQV5Mccm3DoAfYwDwSCHNpNMEhHrOwELOnHNVAlRcX5dptnF/wlPtxHOZapGanqdWdkZ8gaUGxQjT5x8dKC4pq6OplDnttnEEafn3HFlKK+M6pCqiY0NTsjRVlIkbiJG7q2zMGeJPwRwUoL+AJKkgOtJobR8TGAsKnvnviw3NwyLYkcuE1Je1OKPc/0XT/mjH5e0Q/WNDGNIYXeQfKC/ELt//f//T+YoeH0zyUyhK4cTdCnBQC84Da6CUIpC+yI2/zVJ6x54gsYrEgtAChfzXRlCJ1AqHEBAFpfAKMr3YLNFwKPKjBLKvSjTeJqorIzMG4BJBQJEq5kgrwnF5NJHV0PZwD0Y3RoXU3gt4fsN8DHbS7FChinBZfegeP1OGPl5OaalqzooJKys1z1lZOWlbieMDQwAjZQZWTlZaaFJChhj9mZRde4Ehh7PagitEkBSRtITEmWV9TT3bP/wM6sdcdkR2f6xrp6uhq2lavlnh7OEWdzVuziOKpSt3ULjfCTn/3U0t9dcOwKDGRkpbc+ekA2RDRjemSF7rPYUVvl9LGjN2589qO33+YuCC3Pdy48aH1ESnfv3guZ/A3L5DtXrlBbO8Mhxdn7La1aKrgW0LuyTo84Y56VniWrb2x45Mrlz9hCi2whYSij0OkIMRgYYDgvX7kE8yqW4AqpZGEJ4UDKotWdjH00yhZAlTCKEMgRViCL4ciHM4Z0pYBQU2ODXXjX10oKb3/e9umnnxx/4bSeHzx8mJWtXttSbn6x4y7rm9Y8Dj0Hx90SGDXoC0rEPzEJSiGu75EXDjlpGSG9BOn9KosO1byimZ9AQkHDm1n4p4e+eJ1O0QyHcrMVxOevxCdkgy0vMziUyIo98NX0xCT4dVtfU1/lHqSqGtc38tE/u3oNfzpI6pIarIuxWx+3wdXUjATmDbOIS0jJzStJTQt3fd25d9dacclNMYkpmS5FgqjsUJdNAQmAheK+K072r9rhMylrrf8uO7H9CpPyMR0P/YUEM/I9cK87cdQNXF9hcX3QyzQkd3huassLi4pssuuMBIbnKLsdzUWbVvlZpQWrKwtuPePxLy3MPGodcFyBhGxUFLsI+cnjhyWFQTtjD3cejwxSYkMOafFdBBOc6BBiAbw1vq2bXTu2g2dLfZ0DNs4SPLh/b14lURujSSFDvVP6r0sQ+/rkntqx2rZli/Q1JDCRmakphDiwd59EaIcOLaSh90/+6E/YG04M7v3gwgesAiuiH7PWhoqsqK66dfOu2eGubdu2Cj1Cl/9YMWpHiq0XVSyRWGJ9Ne4C6aJSukgARRs2GKj658az98QKAJMTU/LC2X4GRr4BZ5rfo39ePlfedp/kEzZV4U5cxEumml548UR1Vc1n169ZNuNAmOG0QYgLBPiO1jAHDu5DT7qWCuUWCDuE/JOY16v/nCy7T6FyDjskPqdb93yBDXkjU/Hxxx8rFSK6CULTFLl8+jSc6HVqg0uh5AEIIZBX7S02mCuARUO17EGO405ayI5lcWlZdm7e4vIKBwWrWHympKUPDA03bm++/6BVmdmJqWkW3Y683qZnpq5/dgO0FRWhWIKLs/EVdYd5+EWqwXDOiEwoFNTYCGkS4pEVr3I+VXOygOzu7vq93/9dQsRZkagNwyIUVCJj/6yj09613kiHKTogITbsV+lDGFWWDirzra1JFCOCQCAx7AlxafRMVm314vzM9eufubycBlDgTx19ukhytctrPZEHLLqshK4DfwAjF+hr/0dWmJUAUaUstm3bPjY6xaCUl0szENZxei3FIW/6dmlRDZNe6YtmWpAvh7BQBpFKxEJamVkZx44Gd42zKCRk4tqYHXqhC20Ge8H6rKxgTqrAh8LH+a0P7pMdvvWxEy/GkBm2sERU7FJKrO/u7fcr8m3EJbQ+atPn+++/z89GeqyrPY8NU+mTQjOo7/BMSxiXPOIKo5gpnWNowTt6GBrhEGxe96v2BFaaBzb24vLacgg7JIkyUBSxygchLuZmxtSH4frkVEnGjsW/+OIpFwq1tD7o7elzKM4mjHPDg8MDoFL4m42WbYjNJK/mF+ZZvVCSkmdsd4tmKkViIDa0uKSIicTea4trzrk7dqLZ47YnPb19L774Qm/fwMmm5qvX7pDoo8eOgB/ABM392bgINWX8tz97ph9XyMt7chN8e8fzV19/xXMSin9IASQwjg4Q//Kdn5NHyGRlYI84kA7+6PzMkhO31JRMMwB7aBT6GZdGvgea2iBCO4wEk2HdVV+/I1Y+9eHjx1wat7yTu8+/+SbgeYTg5C3ZVbl5+zZGdeSDyWA4lIemVEkfU3L69EnLSPNSxsfhBL4NPkQaXNHUpM7msEp3iAKNHGsTiXmKixib02mJe+2zK9z3lNSw443QVkBuEzNT32lve1mm+Rd/8S9wxS8f/tIpINQn1PiKgjpz6iWzMJCZinPbNgmXuy+v2Fc5duSoZQAw7FTTUX09vdZUolfamwgPFT5FEPSjGdallAzqn3Bi4vQwT4MT7Ga0M6dOY0iHuJoaGnHswvZ5S3EZKhaT27ZsFfoBORjev/CehDHrAXFx88WBuNHyI+JnmHc21zrBuA6sc4rUorBHS7FbwMu8FxoQhmNxHDmglyz5Vf6enZpxxkDlzdmpsIuokJceyLs989FhwjpmtxCrfDj1gf3DKmcGnFJwoXJDQ39fX0pqGtP2rO2x2mHXr11B1qPHXyBi4tMK+sgnsHF/4YP3qQLbF67oJiDDQwOS5yYnFtTzgRPz4mSDX/ghyGDMCbHHTtUgt7hvsjoiPV0oblLYDGkkhuBYJ4LgmbbBhF73xYcZ4hAS6rmZubX4TU6GvN8kDm1O7sTYRLkrb9wPYHNDpFpqiWpsLvay56/4T2JSsoMHaeu5qWnOSVfGbfJpiaQdzp7e/snMaQsYOHEwL0T9jUT5+msCGB0ZfEFacgIa330itSJbUZlMGtk/TY+E0CDm7J9mQgC09094QV0UZUH7B8IWJEpAmcYBm4lhK40OIgxQQKkxur4YpThPtfSQguwhdOgQVHrDvro1hG6BamgI1V6uhcqYfopg1tLHd79GKkZ7Q+sk8gL5/fHh3GnII9KbM5H+6nBWgricCs9jnpOHevBXMy/qwb1F0aABISlphJy7QPV4S+eOu/EhYAxaM7NWZT05mu30s/nClW5TE4WainUlEk0w5GCjcVaWjAhzT/WfCLftKT8x87ABJEM4aGJp0dnXMzTYW1lVoAZqR+dgbVX10Ni4pBe9cUdXe/sqXZeTk7vnwAGSjDVdIR5Ik5RE3evHEkWuG6Z314Y8jfzC/BASmHTsZ1iNGZ1YsVCg4aS8TaXZxZOnznz08Xtq4QjX3btzFwVtnVtxWFpwR1R9FpucnVmAHARyBenDRw+OHD6GAqYP55DvOX4wdwyAcF/96lftmSIl7WCCz0bCGlewh5ejmfYeOvlNLVpY28thQsydYtUDL3FkoFcOen391tKSQiJUVeHmSNuym67HgiNguPTZln1GXIYj8fxiDEDjY2NIUAYUVEiJURELNc0RS7h3FgyQBVQt/RqxE6JgPLMIyI9R33MQ0r9e1KGD3ZzmrVuqEspKJFUhPU0B8sADacEFYXh8MSN/wX/wyGHBJeXzrlz6FCQYPigypSjqt4m79Pc5prkQF5+Ulp41MDhitT40Mn7z/sOuvt7CvCJ7QaqVushzanK6cXsTb4yMSEeWoRvCGdnZQMKZomURlwIPGL7DqrHgwdQiEY6JWFg5x5ZMYbcR3VGWfMMVZSTwPBFbIZuC5YFlk7M5Jp6Tk73KQVyTdjnhXOnJF47mZGe0PWm1Xr17+2Z3ZgqHqaK8jF/O8IhjhVBWSqpNpMS4BKvE9Y14osFpEDoVSQUYCKGdxZ6eGI+pGuFtgTfGNVwSx9oxKphWuRu40gAtwOknM/VhtLwu0M8H8iu/Cqqpfu4L+2Sy5sIgcTiYKN6kpebD1jbXsdGkFAOSCqK0Png0Nj7KrEKC/NqJCTvgewmmVQHX04iOGsMqLGnDsHnOXdC/uGxXZ7fnsCQo5aitcIYdAHeRgsrRXgBQ7rGzd6HUqZtlTVkNIrn+XEm/krmF+WXvcjgkwomkfOsPf5+/LtsBiugx+HF7oOW01WxnZ8jTiB3DCRs+oLW8oX+ePn0ORVu2bOU0AIZ4Or0TYc8ux/BwuGwS7XxwJn0SLVewNEyaEfbz3DaCnXfY49bgGWdLYvGIeR02bGuSznHyxdP/7n/9XzrauzyXIsh/kgyDqS5f+RSQTD5yEHChATuBJhtFDXmN+o+8K517Xl5RoZalm+D4EA4cW+p40aA8NgsDzh+bIoHETUYWP3oeHgsp7IhruRJJq3vBzMXE+XzQi8cssQ4cCNvofA5xu+rqRjahs7urprayuqZC4Vfui0nBvBNN2fk5DY3bxu20LjizMS1CnJdbItKB86VE7tm7SyQmkiAKdWYqRIWFIXt7Bl3Bm5omJNyOhawQeMxsVn1duOUAEWlpf1Gf3FnYx6xVPhI7j+GAG57Eq/AAG1x/lOWTkUroxZbk0QoHGxhXA42Rz3xpNkJqUrg3sHvsPA9Wp0UhEx2DAqwKiysmVUs/mSm29K5+wOADLdEoAIPAY007YYwbAYeojw28rjd8DgZIQBft8RJeO3zkyGc3bwgeATUo8OEBJObxg381MVhANeVysnLRiyOFIvW19VDKlTGuFRoClQixFhcr4kmN83dVqMR1ABAUQw6b29KHrPewTZoQQ2w33Oh61szxDJIrZcDqVLyxoWG7YCday6GyicRprq5udqDT0TLuk8g3l12CItNg5WNoNa8VQLQulbyKRjwNQXdTBgmO0oCSIbAx8MIt6abGtk+OzSCfZhAreQ+qBeDt0YFHe7BBLIzBKpi372imEHAC/BtIVFt7lKX9KHaaB068ZXTY1oaU/fpXvkJyKR5SAEX0gGUReiGf4BoZNPfoDM9f/dVf6ZmIUTWORYl/yWs3tEjKyEhwgpXzEqPBHuRX7jsuosUfPmylRn7/93+fm+t1cFok6FNGIq2IuHKBmBvAa0CN2E7XFX6DFlJsgrYvaAnwQLKhsZkXNbbGMDrUmSP8+ML7x7GWuMyiaeqcZdfVN77xDV4+fvYWyYVAuMV72BVCfvM3f/O73/0uJBgXh8PSu+++SwpoDN06348JAey7LyalgT4RXfso2QbtsOvgyPDUcri6sbmxCc5NE9PyfI3ouJS3ODaS+7GxtAuoo5PddK7M8fzswmoeBzUcz5PUulxWxhuGZwRCDxIBKhjAGOiiAAbMQIu4gNwNtbnRSOGxBw9b62qrleDbs3PX7MKimRYWleCZrVvq4AT/gzzS0oKABlLWAkJwOAyIDOoQxsiRm0C9C9UoZVJIqRM/YUgT8dEJlqPhySDX1S6ouIP+H7Y+SktP7wmXIicuxn4dH5uQKK5nr2DX3vk+X8SVBCqMy1uAAZQyqOfdw8NGBAxC+CmaNTwn0VNa6xTL6gvZ/GZstPdy9NHAP73pNI8CJfwoJEF+0Ju2V/zidf2as1nRXChknrotrygjHnjIdxQN299ZOToEis7hzqCcRq8YQifOAHBxTBhPgA8PedcENPAdpjTzlsnokOvgyjeHndX7BLZuveJCAG0cWFSDAQq8pb1jmvEpIE8qLhQVCFnUtAwAAK/QgXTqcAlAuAfAZV0iuGEdhrd4LCLI2iiRYpGwvhlOF6gdOrkx4YpEEiJWDVeeGxfVE9U7X55PSsuanpu2NWPdz7VaXlo0L5WVzSi2xABmuJI1PjFFws7S3FJf7+DQcH/JUIH1pwuhzr58tqayijDTL21Pn9Rv2bb/wI64+OXarTVF+Xk2x0PK+/ikOWZlZM8uYo+VsYmpzRjM1ppW7VDauG1bU3Nj4QvFlCH+dt9kR3eXQ8DHSo5feP+9Cx9c2L1jpzBjTW2tDOLW+60D7nZZ3VA3Ny5xMyUt6+DW7Ra7QxyWwQEprQintC6wVRAKtmcqFK9LCLUp5+xI2olTRQRufRGbQS9+mCeY2BeEk4kIP1YL57/wOWxkdcOhZEUIvO0gUa7u7p6z58/R/nQHXP3wRz/GAKzgs6ePZegeP3ZYfC4tPYOEpyRLVexkACTTTcvNFbWamoYKHIgBnIk1WWQlDzgE66OX7zAPDCpM55ohKMD8k8cZtxrcZbTTJpIlvWEtH6/o1hcTwXhYYj3sXYTMOVkuwv+KjBfkZomF+xDd+VkFskK5WN/1JphKuAqcISouspdiz5iHIVzhupGCgkLF/h3UVlUgKSU9KTkjLn7p9p0HAw7yjAyLUIt2KGugZJCgNZWx79DhzGxFwOQuhNUvd8flywADcJxtwUg2Y5FyUwOnj59MnzBqj2T+AiZYjpJCUVWFwDYcH9iUupAhfGpPgYgJ24lVxSWFbDdnAHwKcrLi1xb7ejpTkuIbtjlKuJKYkJaTnW6nad/+3codbIbLBDafPgln5oTPYdL1wcp07Nq5h/NERRqaOAt3uTPui1/8srBKUEbd3Q1OR6wslZYUzc278j1svqMUj6Snp9vo4n/Elpstf93spF81NjbgK3aF0RJ9txa1duIBOBsKThxlK8lBQ2X10FdIknRrL1Jy/bM7rqfwVTIunYTjKH3LElFzy06E5UCTdCrE5TJYXUkMfhV+0I+9OL44TNJ18tF37tilLo3XRbhZL8YSJzjqw28wIyaZzHLm6Jy19VUzwqVcATtp+rdogRzQOrhG1zNd8wtqCi/RqLt37wgRzdwCvoUAkMQwzKbKMADYiZqqcrFDtGb4sSu5CInya2sYOGB7YYF/aRMDY8ObLUBcx7vjNFgGQBcmJxER58OwY6+mvH//AbW5pWZp4NSBoxgi+IIe8uxdOEobu1Jevs2rr7yO12jvgf4RqwKLFrTA23L8vviltxBIwWLI157RldMMHlCxxBZm4HF833JOnU1JPvv27WUpnCPjAyGTOwRcMjA1PeaVgwf304qwJBpqdhDrfFF1TRXnyeyEjfzFXRaEs3MzGLh5x/ae3k40cjBuZXVR+H+wvxswdvknxoc1EyiJi19/qhrXs5CV3tPXjavtvDvudeiQE73zZeUFMZPsbtdeoq22OerAGGdPjS84FyaxvaPPx497uIyLS/O/+tWFsBYbHedwgxb78TlMFmMDz8KAvbMzw3OC5ECFB/eojq9//esM4s0bN/gWjr3Cm58cpndOxlJNjVqsxbU069u371J9thpsEKESYXHSHarBbyxodHmcoIktlKuXL+FGDADzDC6KwAn8wCS20Qm24Y35KSbRM2poah+tItDFSgA/oBHW9dCkJGBQX7Q36YtYXVReLS0reTuBDMrk2LjqdVPLYYOU5nd4jcfs9K2VM352WmDLtq1cAqFuCO/u6cLbFBR2EoLEp7du3WAH7SlIRYMrppbld4qDIQW2iUAOUT19+iWjqw2KAwUBsTQF3tXZZncXnm0JcmRNH/bEBokzj43uOnLkEKSZBUFrbXmI6yzeDMc008O+cCsDR8nFnZ+RIWPBRSWaOOwRkH379n/y0VXwyH4Bw3e/+336SgaRFQWiQ4hQC3zyZOC2pqY6MzvTi+jCPYU0gmxoZpoM0qX6l60UcR2Sgd/fiYmQRl9SUkwtOHKA8/VgHWuywCMF+OSls6fFsG7c/IyhNBHAMzXUiwWkPeybN2+AHxg2AAmjbfbf+Z3fsppSWctYKnTJHIEieskXuhFCKB/4aWm5b/OV0rAMczyPfsBp3DKMN9Q54AaPENWenfWiqydA5cnPfv4TMF+9dtnom+Pr9AZnAyMZyBB6sJDAPNx31gQ7YS0TIaoU5m/8xm+gr716dhyKSKL2nluKAAGxyKVR4JkqwLSA0TNtRkbEKPVP9Dzxk1GgxVLkRz/6UbR0QZfpudlvfv0bgpKEqO3J0KuvvqpDhEAjdBdK0I9xhU0Nh8pkR2XYlnsPUxJTxkfGsWh+Tr7Yk3hMf09/5dHyUH6+sJAGEDOdTZ92gRfk7ybLY2OOKf/sF+/YeLQyvXr1smpUqCk4rJaJK6Vdp2xBa7MXnrkIFgw8mWAyFpdwhQouzrYRwGCG14MvYVJaGsiUC9YLDh0Ip5I8hw1iiAR+Uu/OdDz0EmYzfSNyRNs7VOhSXztUVsBIyBrUW+zCLj9q4zvk6MpbZCqhM4QsPYwoq2ff/UoK9OkhrIAHoqwiCGCsKmIsMkqV6E4vqOgDYqQ1GM4jpUAHhMS4nY0OtuswRB8pHV14K7JPevfEW4itN0hBS0UwfUR/dQV6nGT72GQi/1sznCTAp38DeS6z2VEKsEKo1w0UfJRYJF4PvpgeHJmYnwhGdaWISHDUwGOqEQZ1C7P+6hN42nvRTx4CRppd9G6EGjB7Ny8jnNr0iu9e8cXHiCYFNi19/x/968eIOo+aqdlialAHqhShxhTRYvfa5CrjitfFjCP4YaaivBy1vG52Go+OTDRsawaYzSJg0hHGv3nrWuvD9Gdtz3QobNfb11FTW7p7z3YJDstL82sbD0nQ6trmyNDA9OwcBQ0GvanfaX2jMjBrZziYNJ26uqXyynBZBl+/tq5O+VH34ODys+fOSYNwOTvHJ359zekWx6AetT6mzlpbHx49esQBCKZI5A+Qjx49JoRy1oDnuuyq4F1la4nanrMoXJnpmeB/uPvJvit0wR+s4nLEgiUyT5nSGuN9alj1S0PSQ4RbC8Dy8oqtW7eZBYApOIzHGMOSBl582PqgvLTQ4vTJ07blpbUtjc0NqjFMzhLysfEpSb0IFG5diMXs2TZbY0gDpYa29IVqYPvrVjOcpnOk10DnCO3LYE9QwVANAJTz0BdtCAn4Ay1jR+T9JTNK8OdmJduwK8jJdv7VAqCvu+PZo0djo0NNW7eBwVuYJHgnMStLDdHycMiiL7lGrXaLuJJMLeXOLAscS3BEiR979/5Dt8q3d/ZPzs5YGToRJAAM1Jyc3LTUTJfJ6k2sUT/gtBhPsR8fr5y5/K9EZTOoCxM0OmhNHAw+eAAk2vv4SQNSoJ8gCElhLr5EkmuaekZbI6pyC5+OcxQVV2gvgeTRo3u1NRJk84rtwEwrOTuMhM4JPHvSxj41bA1nOTAbpKWmpNz47Iaipa6OKCooHgrXAzmclDs8OiYLX+RXAgZgrJ221Yc7UGZnpljWffsPy7zkiQIe0fGVj+eIAmYMQGAjwiGNL5wtLS9cuKArsRNt8DPjoSX9CBisxX77winfuWPPF9/6ct2WrXwvz2PcyI9JxjwxbOS5dYCD1dOt/HYxZ45nc/HjC2QZAIChwWAGfgzhejvUNLR+HHv1nNNg1n7FtxJLwAnmrOxMcN66fsPrBQUniTNaSL/a1rCFXSQ+LodxvFvuzZWrl6qqyly1YTh6VSI4l4UjzvspKChp2Ob2652HDh2YHBc5Drd2AMbQrKk1CW1uce6vQBcixjKXwhk+XgtK8VRQ3ErAHBlRoIqWxbyZbBPxwSQcWV2Zzssvv4wrvKtzOER9zxH0935vH13NisMMPawHCOeW6YcLcvjwURJhg9JDqMY4N2/ctZRy/JdF+LM/+3MASA3HIeOTtjvSLI3oB7LgwGt0BTgseR6zo10Yj07o7e27dOmSi6tUvKDQ6BauBkYFsH1UpQV85yw6YsDhuHzlIik7ffK4BJ+u0bDVnJ+fM8otGuhFHVdt1G/jacVJcfQTYZ9xAmdj48atGzWVW27dvu6MiudokZwSDx5Q2aPger7zq1/Y9EBQ6WEIx603Ynp6jYTjN7+wAyZhRoUWpepu3riN62QvcJWwpQYiGhc/vkQ2uSB0DunjjNpPQDiaHy2gPSicUAAjFOXwBJZUIMFCnkOs4dBUt/563XDC2ICnUYVptbEIdFgFn4v6818jZcUJgxBgCNBiUQ4cTWt22qP+ZmwfSRv08lfcGhh4gyxgHkQnREDSlS8AEI7zn2QJlMVaehM/9O7O5p0WqNvqt/m1u6t/bqZz65ZGDbxo+o8etQqBj46N8NHFERCae5GUnMNVsOrDk+5eEB5i5rCHU1ooCwCv6xnLmSkvyudLX/oSKnuOFfmXQnX8Fcmrti7xmBok9+7fP3b0iN2DwqICHLV31x5oV2nXW7iUzTU72z4wAOfegkCyA892M7RRMdMSHcyEkT+NveGWB2wF6BWDkggQgseCAf+rEgZCPXiCTCFCXFqGFgikZ3ziJxpJdr4vfrXrTvn4i3xeVO8OBtTMBYyoRMisSpUcsRLWgfEh24JvJYXPtb7eIneq9im/huH1YDI7d+4AOfmCutjRrDXxOB1eunTRc+QQZcvISKdkfAeM1y0eLlx4Hy9xxx1FoKCwKGbgW1vPo9TXvvY1K3DyJSEKnk+dOuU7RsU/XhfRx1cC9mbEglvP7D9wCJaAanFrDYZV6AorTB5dhGRT07+Fh3fNmmRpL30A5xMWPIav4ByxoFqH/ikpAM6NQvPs2rVHz1KAEA7yNUPuEPj4p2ppxATDa5ni/u6QBNhk+86I0res7nCRDxkhUyCBOmC7448Q6cqFyrLkMTl9TjQgR7oyv0VL19X54AHshy7kEc5l73RKHisru33zVkFejux5F914HfUbFEWcmIrWzEB98803/VO3ttJYUvjx0PVakDm4NAjPUAESZ+38it98dIJqm3GbGpu+f5qXKZggWvuLhVBEG9oD85gRn1AeukRiP+nBFPyELZGVxdQ40iG+R/37pziUvPXon7CkJQB80A7qiBgcIhBuQXHxgvitNWUeGS/qTlOgew300KRHfZlbZB54BptCrxtruoY4KgaU1DcaeN2stNd19JY+dSWGbsK0A/mhd8xBeit02//CEChnwmJICKw3Z0FUsXRMwaBGR0J/jQ4eOPXQF916yxcfdr263Lbykp8isPVGc/kJ/MDwusag9ZbhBG8U2BH0Mh3PtQQ5r8r3KA6BEZEw1reAeGBKsW49263QW2x9kbhh835jo27rNuCpXWMgq2S/ujhgM84ZARmzItyx2cUyuoQV4cTOKSqqYAYMZzF9B5sZzM4tASbEfC3bLMI3qN2AXhkLw8NhH62wSKDLdQ+LjU31u5q3S36trHKxRaKcYzzU38OtlIDKdQsHG0wkMS4kfM9MhZC8KOjkxAwZKy0qVNBNutTeA/vu3b4j+UgqkSMg2Rluok0e6B1w7kJoB3+rj4HJVhYXKC+IFfaqr6vBN2JmaK3SpTbuiqUIUPDUmdMKeUEUZwcmIZ+nC12kizjt33+AhFhiUJfacw1tCne2hxOQkKw3sxNMRVQv2uuQ9uMLPrHJxEL4smvn9pbbV3q729302a/2X05BaWVNbV3Ds/bu6pqwDLj4ydXRyRnFwmfnXX8nZJunJLBuIRxbWg3hSWNhj/zCIiwE+RhV1gzKmiawlQGFKMB7ohkA4NAT/+SJ6pB0IIdJ+T47N7m+MtvQWLd/9x4X3C4tzA/19ww7UV1TWZxfwEQ5MmI4JUGRQPIV3uCTYK0QSe3ssBW7EG7osMGV+by9m2y7xnpmfqGvfzAuMUGe2Vr8xrzUmc1VZ8RlVrBt9vf8hVUJiObivCbYDGSOwsw+pUXlFAsIMTP4PTdxHwDjMc/NCLuajjkyHgIYFrO4NcbkYRPAmffYxINzY1uDbDowxBXQwysvn50c6vrKF78gD0Rmi7O/zHnb4wfUfbju17Gk9bAnZieKm1hSWPyzn/1s+449UoTJwMDgkBR8p7Dbu7rdrNjb21NSXJgl2ywjZe/uHTImszLT+vsH3JTp3CHg+YgUoi9AZcAijvIXJwAV8jVgC8+ff1kbkwInkxOTqSyrUNqNf6MxnFMm5gKwbQ1Nz9p7nabAzEL1mFnwR1yCeWCtvdvW9vSFEycVb7HZfO3TK9z3nu4nl698gjcEgVSpYo18Z8CuXL7KwcWuqACr8Czy5wv0MWn8KuzqWjd2C3tL6MQ80eHUU6dfxI1w7MXm7bueP+uFK5HLlgd38/Kynj577HgrRrD0dWMG38jdfJTc+NgU62WOmelJb731pqiq6aOguBf1BT/0A5x4rs3hQ0dNh8PES6iocCifSeN5JOkNMxNYaFQ+iNN//foNnVhgM7G+EE8OFjwwzNpAIFPkC/7hUpiRRYh1DrOKTViL2VlXVrXTvmySZt1dPfBsaQqSw4eOm8LOnbsEs2Wdcg44Rm4EHx0fPvHCEQCDh9flzIMyMvY0AExxRuyK2QTFbXbZ0Z2eXXaSDx3ZJ9tJsaXaut5YaylDEM55wvZqLZJll1pKYpbN6HtUwKCotAga8wpzb925AzMDQ4NCHoB0RoGfYdfo3u37Z8+85EqTH//4pxLDcH55cTlppaqp9//7O//NVhKKz86EgDq3zHIiMm24HTLFy+GTRYMcOg382MzzmCuz68MP31eU3AJAh3ACbxwpP8m7wC2+8Ke1h149wEAwaivrr7z8Gsx/+9vf1v53fud3MDDcYnVqkwePV5GAR2WO9g2khcqVJxFG5wogCocVQnRO86AXSuE9CIQ0lJXZDlTNUAcLQYLnaAFm5pgg+2IUeKbk3//gg+q6eoJvr5gfzwcy0NRkSMM7dvjIP/7jd+tq6k8cf9Higqnbs3v/vZb7ienJJ8+E2vPeev/990SyY75XDhFw5MxYEZUdTQEMSE4cO40tUdx38m6a4hfgATyXUTIMKwCr/ASwmQVcwcZgf291deW//Xf/WpCtGR80bsOfQt3VFZXFxSVuFnOcjE3kmaA4TUU/UA4iwCZF/XLW7a0iCrWnW3jDEqbsNr38HBGrcBcEsXV9If7nX0Cmiy+0YfaByskmvBDrFuQdO3ZOxQyK6TBhHiIoPsEeqIDKqGZ0fMUCHj5yqKq8TMo+/EhGNwpMWtXEfK04D/kGCubQPyLZb7/99r/7d//ek4cPHwlU8laDS5qT4zoqvhYGsNNIKOyhkWXReoQjBc4nWKugLGCULYYrdpk+5Mfjf7nGZFx7L1JoZkFX827xHueB7NNpkazhMbNGEczvC/jx2+WrV4qKS23Fow4B5M3bEDMQBotNJOSJ6MevYak/LrtpU9BcqAu/oaPneMxPQI1pRduhUwDjsHrR7LTPdowuM9NhEoPiXt/v3r8PmRSFuUM4FXfixAlEHBodcW+9g7yOLhAo6xD01V5XaAH5QgY2iNCLlGmvgWnKKp+ZDFEJZyEMLb1TSwEFPyGc/ENyaiviv2vCpcXsvGxnYGzF2DC8e/deWkaWsyh6VilqaZmDOmk6wQXe2Kit2wLIyoqKvu6eSENCPqTJxIYKEk2B2EbDDDSt6YuEiyhLu2fgIBkPaO8nDTC8hwTfXziBNwrc1MI2wEZ8VexwfKSu9Q9UvwLeX/+M2qMCighksHERaYwOSFIZdU7nx3T1AKyioI8Xg1rGW+wTCURyMHnBD77rHWS+++IdbWDZuZScrBAml0Jg1yYvJ1eSlkk6q5GwupYEx87IOj8wOxdu996MkxPvjuW09I13f3VBCULHp5Qzryir5M2QOip7eXHFTa46JAqC2cZyYNnoEER3gMe0QWloAPgVJ5keaCEUsuSSBl9uM+QRKeYj+K1nbYRGTdvRXtvWocjP+ATPno4wbVojNy+PXoDuWJQiOdfaMTVlaXFJS0NDnFnDQyiznphYWU38hEhDfRjwhF8dw42FDQAJMEV4kIrkOODhboe8/HTVJ4MjGdtX9f+RSj8BqrDFY7M1JGkYKNahLfUMpzAsbSSkhh3tjLRYjeRwxWkIAKelMUbDrh9WC2aqdaBvPCuzMH5TvLCwqWmPfi68+4514/LSnFPqgY6x+6ryC8sWVsZT4xPHJ6XDLb3/4Sf0MkKHvf7hEVkHv3XmN+FwaGKy5dFjqkEe0fzYOJslZCE+PD1gn3DQcsZO68DQGBNYV5/b9vjx7p277IUJtxBjWgb3o/62plhok7WIGS2SoB9DmLiaBwKZUCTnT6DRlJ8/77VQsYPhIWxIM3DpBqyOT07t27eff+A7ePxkJzEvR7XETvAfOfaiNH9lf2u3bFVVUMxPFmBV3ZaJqbmHj56kZ2bX1m9xbHF1WK7Fknd1TsgxAKnCzpDvIzHMBpm/HAL8hovKSgqA5JhgoHUsa8hOjg+ck3/w6yTifN+pFd2qi5eeFpeZkuE80+1bn5WVFJ47faqhtnp6ckzQa8vW5ubGBmix5eIgL1uSnZufk1OQnpl76fINSQjya9IysqVvTUyPFtih3kiQl5KdX7DU3bsws8QnwAZCBnEh5J/vSKKbDq1W8LAt47QMexfhTm4owrog59Ra8vEDsIFdTitlX0zNvDWjRBhR2k1NWyrD2XNz6epoz87JWIXBWDSCvSSwws8Ua0FRQXV5aV5uNsM8NzvpIjuHaZLiV6urymRx2O7kEEgkO3v2JfdJu5ZZguHgozZlFsRCsjNzOju7nDs6+dJZilUurzoh5RUlinzIxEkZsCZN2VJfbTgnJiTi2eyWYyA5sLa+9klbhwM2mPP+gxZ6U8jW3ZzuODQL3KU+pjvv7LVtJqy58q62rvJ5+xORKgbv1q2bNBpzzlpMTDBICyTFHdvV1VVhdquLbIBCtCgLYwSTMmVw1TmhChkzzp9A/x//8R/LhMIoQ6qnZabjnyNHD6emJUgARUdzQURS85Of/EQSmtwmSFBb2rhQ6vuBg/vhnDsrhGG+Mk8sIaVx/vpvfm1qYlSMzd1PJSXF8ltQRH0k3vWW+maFQZwJuXr96r49O18882JXV6fEMBV1ye/SophoUm+PI7Bi4tUMdmVF4d279+kruc6MinI0sMTHAgMRtvaQWWdVpb3FCa9LAISRo6YoQbBZAz5/3p6dPeIiGyF2ngqtJWCMmbdsqZd8hZHoUtYXt/AYaLbAWikpQv5/8x//D1vY5aVlnAbzramqTUqqLyyQHhZ/9849W470HgaDbNqPm2JQsOmZl+DAHux98snHBcU5Fy6MMe1YAhtbLynh8uDBPSJpIPMyOjidk15cCG6ZAmNcKCFeIJmmnGlDcGh4ffwG1CShvEYPt29vetL2zL4T8eQewVWCxf9mAnsBMCUZrl+/qQgsdcQxMtzc9Jx52T+8dfPGs6dP1FDm6/MSxP7ZGrtAR44c/a3f+W1LI5xPFw4MzErGs22FWyglGsPofCYCAlf8Gxk+wjGPH7eJhjp+ZX/OyWkUcWWPNtYJBMGBTMldAKBSYB6foxpERceaaUIXkVPOP/7Jj+rqaz7/hc855MNT5z9BjtiwiTBt+JkTiTTI5x4VJzT0D2bwUAX65NG++MIpbKDupHUgZjOEEXPqc2jsn/70p2QfnvXAnkKjNSetQnZgEr0gPHIgXn3lFUXQ5xbncJprsirKyi5fvhRyX9fXR8cnfvcbvxcEa30Dufnfly5/4hjlWtwm39Fk7YhbBv/kp2/LfJMCJGjd0dHu9gmnLGJezhKC0vBd3R0Oe7gQliMrkNHdHayoZcnAQLzcTgtLdpBIUsImRbSDA9DXI1krNy/sDN+9ewdCJD/aoqHiVKGw95+YMMq4exfpKXlchEDm5XV6O7bGWD754mnagJ/99GlIDHv99c/JqrLMU0xStWJMZYm2tDgvNZAllXuJcDl5YfeeNYdq0S+urfC/0zK2zRGRuNGK2MBYQLWcwIfnz583oqMOyKfm2LWrn71w/IjXcQKKcEMlTfF8aEusCCS0E8YVUKfu/s2/+V/MiLUFnniBt0yB4Ng8pIuwJbfVEPISPXTFL2wPD9uxkXAhLTOPw0DEmIwzZ16yzc5Eq3NO5DEJ9uP72p56/bXXnH/FM/jZFoFI8C9+8Qukx2/+khEQir4hCV+IFTtz+qx9CWEd7XGLKZiXEdl63ZqyzQSagYPODEmccwskbMgk4aDz722V2H/wnZi33L2njidJpyJwr9fRJSc3l1uILZPSwkE7N/PZgDZxZZah0a64HWdI0DkG6+rtUYwODDtP7KJbYreY97d3diQnpqi1UVZSzlIsz4n2rHV2dNtVdrL5f/qf/h+3rt/68P33OajNuw7IVaMl1leWFdWQ393R+6yitCzeJfdq/SUm3mlpgUMWuSlcy5BTFkrrpg0OjyIQ2Xn0oLVpR/OWurqb12/s3rvHpuvztsdKrQ30dItBuIqS5XXw16BkFq4QFOvaDeRFwK3v8p9srvGKWRksDAPwrBlOAN7qXAh9ehizVoo3JJMXNksJH5jRJ1YxBOR77hXvTk+G7CzfDQGAwnw6PKW2qlLM3d6sk6hyKX1319DyypJrD+W419fUSsmJU9erv0+xac5Y/IHdzSjBbcLTcI0JwApixsBgVImfQGaMMIewHZkKaEEqWBOKD4cpJH+7TtgFaeHs84I0oEw8HsoyOgoYWnKTRRmla2fxUF1xAmj5FZOT9tUW5xZd+xeqjicncRqVLgq5g2th35w5NByOwfQAiHwaeh+RNIgxXL6YFt/18eOH/T29ekhPSSecvBnqlk0VkhfVViwFnEycLWSQmxoe1S0mBrspm2ZeiDH0NzU30yA4j+JABqxG0cA+C2LXwluewBJiAAM8NLV+qmrreAmg9T1UjYhbi0/aUGsI2OAHqle0NzTNqwcvypf1T+0BI33MPjiNqaXkbM+1ARWEozScIzxdqSvqUsUAqxU7oYBnQqgbt+659k+uW/uzp+j49GmbV3RDisi5WQhrwV7QmUnxItZ5+bk1NRVEDjBEUVUfzG1RxHpJjHYABgM4oG4Yh09v37mxc8f2XTtUtMiyKVxZXqo+wI7YxTGjg+EEm7VKelYqN06IhSKgceQwqBdkY4sLaxZZmYYTLAyFwCgU5ZpmpsbNQlELSxNeAtzevC1Lu5gREm21ZQEtGL2irFRKhjrozt3m5OUY95NPbvzON74KsOfPul46ez4zJ9dlzRc+uNjTO+BQTk1t/fWbd2jPPnf6xIfD4rAXWHpx3qFzAoAcUEoGoI54wzaCMgnqV/huUCdArPusUQk8pKn8hdCA95Z3IVOidnFhQX1lqZQkBzsX5qflZ7/28pmCvGxlPO1IdnU8xwliKhRQT/+Ao5muHGrcvtNiyMFNHiSoPB6bnCgtqxBR6O4ZcCu2071EhqgXl5YwXW7ElCCrJbZUE8kX5MPz4OEoEHvAIB8ugiX/VBWHdt5Y2xR6BD/+UafNE3rciwy2eIaHOM3HaZnsjKCtlFJlRebnrF3Tec45mRl2k+WB5WarXtXnjgn9K/8vzenuvdu29f3Ha6SFxSBZ69s3bnICmHNk1S39LuaF3C5ihK62Rw+lbr/905+IAfu0uJyrIPiX4GluaoRGMmWnk4OO6zDMkWMnlBRs7+ps2tZozc1Re/z08drK8rambWkpSSvrK9Yf5dWlipAEn35y5re//k2XWt24cdNlc1StvGGDMofoaDrcJssGaZlIFu865bSiltbHdt5RE/OUlhb/7d/+7cFD+1lZkWzhHBimdmEelhxjs5abm5/iNfIJUJOK0MDU9Hbu3DnCyN0RqiQmxIeskU0/qufRGFv74Xw2RkFP+CGPX/7yF/kcFAVNxf/l5ZeV1rU97rCCQq/0tJQTL55wZhEfWivSPHv3HLCWuHP3/r59h5z6cqLr8KF9dhJEDax5jC5kIhGVthGuCXp7I54LojQeH95GX2vrveS0+M2ETcLIFXAzpCljZvsGfAiw6YGOIlbu62NjAhetbnI6BZVFufJicmFrnuet8Z5de0zcgv+dd94lCFJfxHFr6yutAGU1sPqQr8Of/ORtQVxDiKjwp+3+bdvW4KwnFyq/IGt4tGthcQaQUpvgRBvc66gGxGLgosLiaKESs3DhTIOjU9Qv5tcMGMDmf9tA5uERZziHCvIL8zLybVzwCQCJD7XfiA/GVfwPCUrLii9fueLYANHWmM2R0amEn3CdJEYrCryEyrBKEgFmAUAF8SZ5RYJJqE9ROEFop3TP7t0/+P6PjIKZ/crzQ81fvvMrbpMXXdhsdNeUttxtKa0oHhkdbHv6cEvdVrLJtTUXha2BfezIkf/4H/9aGNtex47tTYNDA4oUGcUc9aB6AY6SXcO9QztRYS6dGDalDVHIJCLjL7qLzbN9EI51ySOdaXsKVBQISbRK0Wfkq3mR3wmTNDzR4JA5IqlzSQIWAOoRY29nGziCSKNP/Yi2unv4hRePEyjUoUK11w9UiExz7KLdSL0hijay5KQ42NbGoo7/or6e2RqVahg1ASCTPXHiGKtEg/FBv/uDH+blFtXHSlrpk1TyIEFrLItwE4Qr3jPKgpzgNGzdZqcxPi4ceray4hvwlUkiOVVU9+/+7u/wlUURJhFE5xTaoOb841XTwSS+8F/BibI0EiDtdWAGLEHe9aOxrVNlK6asfsvKOGW+Kwjz2Y0bzdDbtG1xbv7x0yeKz4S45PKKhBnrc14yn5u6ECCj0wTNdAXz8ClpFkG5/vjKri8bnZHJtlpCVCEWPUA0EFrtAcL7wgsnaUJHPnyHT+8iFibXwBB4Hj4h30RMwRPh7ZgZHbpw4YKpeShvEwyoT5vhfx/NIJP+tw40TbjVp+gAjAl/OHbl4NaBfXuwJp+kbss2QX24pZydUUQjAnXw8CEH/G7fvfP6q5/j2+kcXSLlb4LiAoTLlgIBJ7NA9YrXrfkpCqtlEiE/jZHyYk1VNaq13Lv31ltv3b97z/XJly5f5sn8yT//U/MC6s9/+Yvq2nq35UAmIlp2fvDBB4Zre/rUUpU8UF+MCz/HfI3ioeCVNplp6U+eP3NdndtRLfU5ySdPnHSH4MMHDxRochCdHXG2h5yqexNOYa05aZNqRIiyTPIc5iV6ChrxDJ+oiBVLCXGRFlPoWlJOAIVsFpwWyMTwvBoBa26pGflnakoaFiqtENPJ/y//5b8w+lAKz0yJX2FmzhU0dgPmnXqahiW4dWqIBLO2jmpQtiq2qzlhkYM32js7Hdo03OBgvyxcbOO+TqrVmsqSXogcfgAcOQMG8rrv5Bqto+FQGQd6aFABINqSsFjk+86giE7yamwOSH8SEsXDAlWecM/jy4vyIhWJ83SHMJAePaFQPCQwnpsYhjMZ/O2Jf0bqxkO/+kSxHNBQlCaMzADyK51lJr6bg8799dHAE0D7ro23tDcovIPbl5jdCuENPWujgX5iejyseLzor3/CjAnzkM3cEyo0gkp7UVb9wKkPG6OZPk2HJdDGRxuz0LmHPnowNQsA0BI57xoaPEnJaX7yBV/6eCsmUaVG91C33sWaPpqtba5TBzNz4TC0X4mWV0BOk5LwaDhDAwnfeKi3BPMWbo3VMLXM0FuEFu4vNvJPSPDxrn8CXoDYFqdRmBY4I40Ls3MSiLfUCRsEAgnoUlU6Fxsy8dlYkX6ICsvRePRNEgPW7dyM2EPIIXO0QSIH6+ihlYnVBsaS7M/ny89lXlPFnHbs2O4OXvn9asVQylYikLO8sDQ8NtLYVDczPyWwio6OGOJyCQAmfuDAoXfe+RUXH4ZZCMUc7MilpyZ1tj8tLSukjGxshQ2U+aX2jh5nsCkUt7qEckwpiWCDHwu5T69+KstIVPjypU8YUY4XInIZZdc8aWs/dfasXCBlre63PFQdNbB7flHLgycWAOalB+YfQQFjNZuWEvLZGCRwLrJ4FqWc/pTkbNKS5fq5FPo6lPtdthpzAmJlYz2BLvOiHpAM8q12cjMzzp06MTMxmpGeMjczUVpipZnb1fGstERCag4SUyhbtjXiw+GRMen7zzu7klIzjhw+ii6jsQqhqnhZ8brS69HjJ9Qb1+1Rm93bDIaHR4IgjtZRMcDzgTo0YtFRBNhkJDBuLFQDHkLkIeorOIBn7HpFkquwKL6y0aFlIHHwisKHgKjes7mykJwQjhk5JW/iI4MD6hhw3DHPlU8v0Tvnzp219U8Wjx09qp9r16+q48nw0J56o4ZYU9Nhz4zOirCpXFudA7jeZsjUJNb2ouiv8A8uBQa0M8nkyytsHF2Pmoy3RZk7WYULLEENsXsXyxTSlgiNMvmMlg3uxaW51DRH98Z27GxWsKWrvefUyZMt91tl0h84EPIiSLqeIQSWPrt+1euTk+HoBaszOWWfqv/AoWN424wMqg0/G4+xYV/60lv+vvLKeUKkmAwI+eLDg8G6U+7gIXe/+tWv/uW//JecfoIsCMdy+AnnII1fLaI6OztsvNJ+FAJWwTOa0Uh79uzj7Zk7faIx+YW03bv2JydkPX/Wo5C8FZdlP/elpbXF65aFwjaSjmDgxs27ZtTV2cu6p6clWz7hYSobS9+5c2t9dfXs2ZcstgEwNjLu4fe++wNrbBF6NeZ6B9oPHjmo5pL1A/Hfv/+gwDCFRgvx6a00fvaznzAz+/bv1WGQiPX4nTt2owu33obSzMw0L5D6IsM8tsmxUBr1//w//47lsPB79OTRRpzTTQImBaCKHfLKl4vIrEoEwqgqI5nsjeu3Y44jO7JWv7UsNy9Dh24pAYAUdrIPUTY0VJCkE8AAV4K7N67fev/D9/7oT7/FBQIXTsPwVhGRK/OVr/y6dAJwYnJoR0fpWzq0YodDrhK6S4pDNc1QH8PLvpPx7GY0/DkyEuqT8HHVEsAAMVesERj05HpcuII0V/FlQRIJRSMjVArBx+GXLn4yNzkrbsrn8Mq+vQesLlhl0//VuxekRjCupubq+mCnE0J+XUa2UyLpUZbplUufcePMRZ+qbisGdfPmdR7h4YMHklNCkSJrAF1JidGPU+Ywg5rsOHfHAsBGWUzuwj0GBIFawKgCNzDgFZDwsTTAMyaC/XjAKjVhY+0pEzxvRkLOsjQhU2QdmcgR4eLGEVivBz1cVeNXaXtKT2KJLe5qLC4g1BBoD4FdQyD8Qz+bBd1LtLG09bb+sfTgwJCNFMtgmOzs6uD9W6GpockX/OCD958+azOcNafh6CidNDXvft7R4fiVPq9duwJpdm+wnIi+7/fuPpCpwt4aNCU5vb621nbl2OiwQc1FD/jK9knwUw8eFHfHBrt27cDnrBWcgLa3qxeKCCnlA7fkDv+QSqCaPpjxCQRqQzWh8n/7x+/p1oxgkgbjXdFv/mn62A/Y/moGWg8heWk+1EukQNhijpr2JqtP7MEtE0TjL9JmAslYvae369x5C48Ookrp2UDQobUNepkNnmcZ9eBiBErDotQTMAPeWPYPAf8nf/InxEp7zIb6XH/rIp3gENN3EZj2HLs/+7M/owmN4kX8j+ts0WgPcpOipU3W2qm6qsK9H8y6xibY1LzTr9aZGMCZNNIhWsQ04AS48ooOnXMDj/UM8aGmIAeollWIHnmiumI00Y4u5dgdOnwAbJKcAf/RBx9apnKAJOkZSNVBzhY+8UVvVhoWWoqOKzVl4jjf1DzHljFJlM3gEqQpvrUOzctMRWl5CIhuaHyuT72ZCK4gwpQzzFB05N2UwSyYlZudzeV94dRJvIHooHKAB8UlsDBnGNKIuAJihd5caDPnoNvEmKWIj0UyzkF0lOWoGILLzsr7CZYcubGqVLke9XNz8oQDHNGh8DcTEvGSBYCxmF9kqqyuYp6YOUdClhZnxbYkn/AE8Im9Jh4a/EO+WcsPE5ZaDQv5+ZnJUIxY+gDeg3mPghSPjuI0apD4Ayy0m5/HzybuITGBDf80tH8aAH4gBA/DmF+jjzbmrnM9aJOkd9+8oJ03yR5QcLknXjMlHxOgU3x818ZbfvVdX9p7gh6g8dw/Uc5fY/hEGkSHvpuAv8bSG1A81NLfaNCoH4sSyNVz9NxktPdW1N5zbI0DiBlosSZiW+VgVi1NCdhG8dyJLrB5S7ccZbzin9Dk8DCWBSdojQ5BBoJEP0Xg6dyI+tHG9L3ui4eozipryY3QLZk0KMD0gzv91a19KNnSLiOMgIHYqBM9G1232hgIW3tiLvppagjhXq6/c58RziE2Gj36p2l6UT/+cp7S0pOt+7UxNIaGKvEJsxODp3y9wn1y3zDIgeqfBUUlsQl6sC706y0fIVK5AUbXOS60iZaeprRC+Chk4yEehUxz5/bNTE7gq/27dwlIewXCFajBr7GCfmsU60TMd5G5YW1N/9fV1hK/d37xy+XllaL8cIKQGCgq7D9LMHBMto1yeZuag8smpHTn7gOmRSSbhNty5WeYTsezp5wmgTs5RdLmAEbAsI1pytYVW6oor8FapgyNniempsmfYYH4TNAMP7ZTTATCPeHSqT0Mh7gNTtSnFE6HFktGtBBm43KYiB1hejm2KkywjIEozGbKiBs1KykIlf7Qq7ikQGU3YpyzmmWXELPbeczIyrbjYgsCJH0Dg4cOHnPnaHZOblllleHu3b+kqyjlaXJ6JkciWkp6jM+TGfvFlRALT01Lp2HBTKMx5yjuFZwDPzCAIpjHPyPRw2NmxPPzRISDeZSbGFabaamBS8dGvIuCuD96JYhSgnu9FspqXH5SMTPlSKsiVOEYmXCddU9lRZnvRw8fhCs5ptZjrgVl6QFpf8/GHYSIwdhJKyooeNTaCryxjAzIYTbzKipWY2dpPMTdKCiSp6qMo+SiUJYE25t2SCXCDDhqfNx5rK1Xr17zk/aslGQwPoesEk/MuKtrhN503BOx2BWHjZ2NMfdLH19cX9l0MYX7VSwCXcxiUuK4vf19RmS0pMYFp3B9VZRFppVCjZxss8MAkg9z83j/Q8pEPnzYqujcnbs3JeL39auQpspeEaZlMNzKYVBsIDoI58ePv2A6QpL+6SFJDbWbYjcNE2GcIOVG3Agv6cRc6CXUkeVvd6Kj8znOFEOiHzipokF2PDJyJSxxqkSmZOmEPRzENXR+bM9Bh4FpU9Ms6ix3xSyZDdmUlkkcbs0oIiq/u7tHPQ/dHjl0hPbl64DQEnQzfsMBuw8+/uCjjz765u/+HtEmkqivK/pK+0gzG4V/4IDj66+/sbGyCbBPP73Cm6+qlGEst6Qc28MnSATJRMJee+0VdKR2AFBVU163pc7huStXPrWG2Vm1y+rVRjzT8PhJm+pmnEsXEUoBVQVoYnL0+o1b+/bv4P1DoKDX8EioPikrpn8g+DcyDSKqOaSrsNX+A3vv378HLZxs0AID+wpeAObHP/4RY4zWIPzZz37BG/ZPscZzZ88LPeoK2jkKSgXgHFFn/pbopsAb/nRbIvwTB+zX2WUxYHVXxTM2cQ36BoasJxV3NymbIWpD0dtkUL019j43Oxf+nd5xUkUkwtV+dJeQpE1FRz727zuAOYUBePwGYuXtwMiB0UYPlWU1VLSNss9//vPq2KRnNNoBy85Jf++9d5u2hxqy7JR1LGA0Xl8L9tEOgOOhV698ZqmGl3g/k5OyCh/TZqtrKw57oSa3A3JoA1/QkX8P+aDlOrc/78SHJAVCkM8HV3BfuAvqNfMPpSWC537LPWg3nLQ0eVlOm2BdaTZox8NQHAZ6ST1IUBy3+wtCP1Es2ugWbBzW4Orxm6Zt1XbApIUZhRy2bZeXHWxlghwUZqHcCKGliAAJsuyvr99y8+YNfp5C/XBOZUnrt3FkiL2798hRqa6uRymlsYHKW52N5dzrk69GcdFCmZl3EF0EHTwilsSN0iCn3O7hoSGOoG7pGYJmhyGKNQAexvB/4LrYth7RY8X+4A/+gOvCq9M5ctDzSMYSaQnV8OA7lYJ/zNc60NFAOmd5xbZS2OLWzF84h2Hd2tE1EJnVlTMt9updj7Vr187p6RmzhkmrSkGfM2fOANuqVdQpoE+mX1W51/noNAYUQSZDgIf1zOBiLRMxd3iGeaaQ5gfeq6+9bHT+D1Lif+9SJqYJwhjpwxkhlDWov7wXPrHq7zAJ+VYUXHm9cWwE+MWkdEWpggf3wj9Cv/POO59++onOwUNUxZgoVa6zstQcX6XDpej8/P/6tp61B8DC9AKGlDJUVFBoFhZptPe+PXsEufwKsSw+ciM0UA1noVJRVQ02Azm//8r586hTXlrKyqOIVE8oenD//sjQkK621tczMbapMQDMEGckjun/HGgxa5hnSmAGpdAFfSEB9oQvoZF3bguX0rA/TwVZk+CT5uYmFI8kF1rCTFU13FyHGcrfruZ/+k//yStAddOr/R88huXQCymxhEWa3HIbgzDwgx/8gK/ioQWA4apraoCkPTAAhhVJwUYiJC9Zgty4cUtNAmtvdYsHh0dgT+BPDIArHEQ7Id6IJggwOdhuaLG1D0sylxxlVNpO/xZOPu5JcfTRf1LzmHoj+pUx8q7tEbs9thmE1PwUdELIz7edtpnMz4hFB+AnBAmwPrwbDNbQKUKcv1AZLSBAoymN4MMCmXz0HSW08fGisQHkJ3j0AYE2YYDYeSMNDBE18MU/6RRjaakNKkYyCbm+++t5xCUYRZ+Y0rsg9Ny7OkcDDTy0xBTv8RM55weZjgY6EdLw0dI/RfNJiy8AFj+AbsNFn6h/EzRfbbxC4L3li06AytvSHorA6XUPDYGchvbFoJgmAjU20CbA1OfXLdRRHF4xTR1iJtJIL+gZPTyMGlhF6MHQGC7CFY7ULRnxLgCMElD833cGAmeAXFFhXXlFmKy2ulpLrrPp6hyclIt1HPOv29jqPFHQeX3D/yQdecKXCmdMA+svhDOXEpbGRge6g1eRnp+rzynnOkbHVnrmHKgvqt+yBVNygRzt8KuIsjsu0IhTwgPgB9tTRn06QucQZdCHrY+t7CzrJelSMcw2WdVJ+7O+utqKkeGJM2f2PXPhi9qRJWXzczPSCYi0pS5U203oan8uOP3kcajgTqOxu9sbQ6o33MKhKKMyW1u2Ot/Z0dC0/cHDR6FqjdNCz4IJWV4MxWSBBz8oQjJZZc40vodzZbzgB5Z8RwUsmpAUyGrlyxtYWXalA6bKoqYgGWb8pBOzMykkEJi6cfNmUUHOtFzehI2Ori6hXMmCHGJnE0GYmycDZEpuz/zC2uDIWGJSKte/9eFju/xKtSrkZ5HhYVFxmtLCji8bwj4sIIdsGYyNBb6NBdgiJjE0YhlXM5MChi9gjqiMNwJ7KOofk1xJNTDs9RDKDey6qSSUyYZjg3GZ0XxjKUBp0vJc4GVHzGJ7ZzNjU7drR3Pb44dnTzupPxnbo+SS5ojsunnRdo6MTD3rAc9jbJJrlJgXuwlyTG44iMJOONkKUCCHx3nw4GH08gr/w3PLK0lWSqw4Gmij33RCwClR2YdQ+cc+HPUqIQR7IxZHJ7Y2SG5tbdGD/p887f3pT35G2BM3EsTjDx8+6izpk7anGlsCgYEJgSstaVvGWFAwHKHLLZiembh67RJrura+ZFIcfU/EX10aev+zO5Y3Fy9+hP3M7qOPPvzWt75lsQi9CpA7NSgCytX78ds/tcMmSmfu1qvspYk4eOeQBt909+5dOc+zKA1zZH6onQz5WZk5Tm9VlDvF8ZBqcqri00tXOSWtD9qWFx/aFhM11JscYvwMYDbG8QAsZzpQ4XAbJs8N90omcmigDm7N+mc/o2pSP/faK8jKo2Im6RDWzuqBhkRoQaWf//zn7sth3T0JC/Lk5LKyDNaUw2cBxi74wsK1PLiPdgcOHr792W0O6KlTZ/SMB0QrMzOD+ZeLgBYsy717d+QEiuPy+Gu31CPHhx9+xOJyO3Cj2WEG0oFXaXGp6rEluphFmnqmhoiL3wOG4mLxmiQUf/6sA96cFfYKT53HBnXWAwQ2KPDVpWN7DzuZFwvhhwwKKt8QltGmw+zZYGSAghcVy6jeu2efSMj165fRF0icD8KSl5tvPUNMhMa5MlDE4xeaHZkeKSwAQy0M42HMaVykZL8tzLSHpbLSCnrMcRToVbSAt7E4s6BP6osvaI5knBfLf9JMcrNmQ8OrZcv2updbWu5ynSlhHHX06HHA2Gy3CuIJkVOLCpFF9/7aZYI3XVGMgtMyAx16HhpUdcpxiFw4p6uDhUpN8pf7hVjCtqK8vBZdJSUnWvb4AqumDC2YP3J9/NM1UjCDqTzEMHrj3Tqer4Q8+sJqfkHer731pul4RRoYpmW9eUgUCcZAlPj5DZPCihrY1oBtbUg3XwfSiNW7775rOsI09BUp9lBjhKZ7EYi6tmplEWhX6lSaFQM0NTm7vSlbNV55RBcuvOdgNNNNVNXNtAx2RIEsiJcjdGGhinTlcCjMee3qdVg6sDfs9hgIDMADlXHNEQ550jrkZ7tPE5D4h9zlNmZ7i6/JOPI+UU3nHF9vobgesApQ0ZHIA9gFhSRIey2JIWbmCRjLmirCkm5pEtQ0BBJIUHRaw6oPQVkSuDVTpPSiL0768lkh8+zZM8rCcuMftN5GAogxX810ItlMh42N2zmgVGbQ4bE4FOUPACxhdmhHH+oQqJiNcaSpAAxsb3HNDQctdpx4qF/4whs8ePDIHDN3r2NmGpuo4m3wm4t/0j82ePnBZ069iDFwr1uudK5nG2VOplHUN2/fsub89re/g6zUOHThc/yGtQBjRDjkUpuj9TOA9Y8TAMkckErUEc6XQ+LAmyGc1rXKlTVgZXj58mV8JSfcfEP0cG31k08/daXAf/2/vuMUmcniHAzPhzZH3GsfQzKnVyhzA5m71RHs7dm1GySIqxO/0huICBu6RUFIMK6HUO1Dfwq80/mDIyE6EzlgXZ0hbGR704i0pYMKyG1JBmm6unHjM4e+LBXwjAglSPADrPoVQk6ePI12n3zyCSCNaOLOCpNBWAUbDOBbrgksiV1Cuw5j+ifE73CgCng0uUgKfDL4nd20X5tooImDFlTyFGCytLiI8y7ZQ6QyHFeIFfHDJOA0UxPUxl/mBgAgZA489yGJPX3CrC4CS5YD7FSeI7LrnJ711anpGZkm9kspELXXHfmzWJUiEQL2BoikS3fUitnqy2QgyEz0Hsk5fkIG//TXKz5QQDn6q70XI/j8qgfdgthD/4Q7f30nitrjRViwVPIw+niR0fXRuQaG87q/nqCl1zEx9eQnnUS/em7czCzRZR522M3xit7gRbOAApOPgaETQbLQe6wWiockRGNfDKe9d310axZg9rqHfgKtIVRtMXHvgoGGgmKNERVFtQGGJwRDh6gyPjUh20HM1TaTcPLmxrAXQWUXXmxGeEmOjXfzcsPBefQx0MBAsHD6iaYcwWxcet/HP2PfBXEd0XafSALlyDfClPakIorMzNh/WMiOFaICTEApe7bsqEeggkgJYVb4NZYT5kjxjMbxcdPdncE50APjKv5oOxQY4HHYa2Z20oa1vAvRAuqyqqK8P9xkpMzwiL4LcteVJczLXbAqpbDUAKUTTcfFe2yYDunltZy1jmft8odsSSKPvFuQHD5wsKc3f3VlHss2qld9517x4pKYPE/C9Xt2J0XO5KQtz88wfrLtV+tqdu/auUqwUxRQS+6yn9rRDnvoQqGMjYfijLn5BTxOh9EBJmHLDsmq7DMl7hmftVVxBiLnyIt9QxILn2srodSuuQlnIA1iJSaHRS88E0J3MMn/wQbs3MT8BB0BbErfKYstW+u8aHEyPjICM86as+UF7pEdGnGlGtTAAAEAAElEQVQdsGW+AwmDQ6OK2Carc5OTV5eVJz1J9t7WhoaRiUlnk9w0Wl5ROfF4Opx3txPh2uCpAFVhUfG83ZiNTcd8hYWpfgPxiqKZgg13MR6oA0hTwJ9YIugKWdTrGNiya5XkSokzI8DbOqQDbfIk0gOx7TU7Qilhw9HEk7PTUxR9lcXh6A7bD1eTEyN3bs9qT4CaGrelJDqrFPLNFFJ3gJg3iS4yELhHRreihF9c5CGQrEpkJ+uIkEqvh0OrxLraeoqms6OLPXDSlyPx4YcfshOG4+JYj9mIsshUEw94wloky09I7NIzOvrGzVA5DgA6x2B79r6CQ+S/vvfeu6xRd3c/5ECFK1EY1v37DzKg1leigMDAh3oOf2anjx07oiKFkH9Fakp3T8fNW5/5KcIqV4ymBu13vvPt3/ytr5E+s/u1t0Kxo7u37uJ5buXn33jTkZLPPrsKw9Lj+TEhc2bfAdbXzgadY1l75+4N74I8JLhXVBNMZw737NlL4Zi1NT+Ucy+OHjnJQm+syzMU/DuLY1lQyayIS5AttiUnj+WOi3LdunNP52dfOs9aAKmqqpoxZ0iULXUrgmPQcEKcOdnCRURSJFVwka2yjiKk8mntBrh4TooqnwYz6B8zmzVPhcoS7vUQt8AhCyosnZPnSExY0aGjHRVLbjwfqFlXrbgUWwgV4Gze1czvcRbEELatbaEwrghnU4UeBS2KkBdrCfbVdgHcWjVhs77+Lmk8hhOGp7IEQ5wOE1lH4t2799K6mMSyhyPoGDEn1QGhmdlEp5kRFw9gDPlUGJ49+sH33/+93/sqJoRSctP2+EltTR1TwvvkK5gp30itJx5qw7ZG9P3Cm5/Xv10d8RzksJZgJWQ02XCjq9NSXbaQ6/Wa+vqDBw7bviBNGuAi5LNv09c7ZNsiMy3LsVfSqtKAt3CWoRFdfhd+sG0CXeTLftrSgt1yp28X7d603AvJAIhiGfn8yVOlzzCVaSomCDMQJaI/MTo2MToxNdMND2Azop6BZ3aARy9mobe3U269pE1jTU6pzFNm+hrxTQHDSSIgTAFbfPZsiJ7eb7mLCa1R6QerZaY2ynYLQqeMZszOCmNb52sMDBe9uE6IGAoJiVBqADwyqH9WkoTysSAWA2iPUlLtI6YFJJ4BAzYjtqwzOLk1frWkoS5oJ/90gwRms5K7euWGY6mq4OfG+mdoEJS7JtQKWm9BjlXr06fPZDFJvUAI/EnxQoLtO+JG7VCaOA2DkbXhoWEEIoxKSFu/tbU904MamnY3TcFEeGkW9lL4aB6z8JC8mBpdevt2KOGKuzyxppXyZAlNyoiJelzXrl3r7Qu3kcAqn1glfbxtXOVi//Sf//EnH32icxjj2wEbWi5dumQJQjV5Hdo9F7yztmGy7WHu3t0sRAsY0e7bt+7aSrIAgDpgmDtCA4NTE7GxHTAGVGPIsTz20F+fP/zDP6RCAQ9IywmvGJrz7ayFKBtEvf766ygSEQXh4JxDCf8OeJgOX99Dk93e1IA5dUh1s8JO+yCfPQrQjoyGUOaZsy9RJpIn6TROLQRi9XPnwt6vHqhZE5TpjhCes7/+SV4sWqwueOr44Zvf/KYODS3iNrdlKyfVXULAxo38B0f2g9kK14RvFUQTH7GLZQo//vGPqYhoUFxBpr7xjW/oHzLBA10WCbgKDHjeoEC1KIJD8OuWPwAhftUSNihSDczXBpfVyI9+8mN9IiW1GS3dqQXREIsTPLO8tEAbQwhemp6a+NKX3uLo4xCdeEidmot3qS99kh39I2XESP6aCDh3NO8k77F1Ubll5yuvvKJSG7YxU0DyFgBGjqSMicCzArIuC4tc+BOCvNU5ueoLwb+yKyJ0pGx6csJsGG9i4qYgWc64wsfEkTUwTErqk6fPPDeEh2YHqwDQW0Fx+I6jOJAcHE4j7be5Gp+Tn847wJP+2qNQcZBin3UHYrBesSUvEH33wT1QaVYEQO8GxuW6JgM40nz8k+9rbCP57kXtLYNAFv0Ev75EDfwKPv0gqg71QxRJl0F1gntQDjP5q40XfdetUfxqODSImsELAwY2PcCLbsOLC7NYhAXyoo8R/WoUuHBkTRv/RAMuQgSYV0LaQ+ywFBk2WQD44kUj+utdb/nruX/qM6+gUODcB3ieAEmfZmTKUT/6NHcNfFFf0daYNYR/mkikOvUfaRO9GREa/WQuOF6zwYE+j3VuUM8jxLIExgKzjzZ+Mii0qIKlMVuCyfSg/4BJRfjDke+ANLjl5YSj1WMrGZmSYcI9WTZ+XA9t8SA8yce1lWSJVCEunxMWlxDr9DwRlTQloBJIzBdcs5QKeqTt2VNKytlQZ6hhkryRK0erDScyK3HQ+gbG2A/BOQZPTRKiTucqjkHR2KXFP7/4+TvMEucAT5YVlzgkfv3ji919vckpiljNiBOIigl5bq6v3bl7V5jWUd2e3m4pD0a8eedO885w5x+EDA8OUDSWNJSg9lJpJdG9fO4lJfuufvZZTWXF5LTLuCaCpxxz6KGOdoB/0JoXJNN6EWthIXJIGJbXBNTDHpTIU2pKhqMXMffOkXe7KGHdCMMWJHrwT25oWUXp7MLc5JR9qvhjRw/fvxtsydQsvM2IRS2t2tqSHZSh6s7IxEPd3rh5RzoAJ5LArMf1usHZBpxbfjnCSoNAjh06ChTAWI7BlqaPKL4AG6rxP4Ajja8NeCJIkEaDQFBridiujl8Nx4CFddz8rFyfUBo2JdliXV0Ly2EkLinM272j6fq1q/PT43iMXXzQcq+gIP/owf0iH6ODfVlpqfJKXSZ/9Ojhmhou4DKexD2G0z98+mBFUMEnAKCRAFLNmJlQEASGimIFOUWJUXGXM5dnz541KV4Ft88S21z51rLG1R4zd5BwGuhZo4g/oZFsBI0VPCgpLfn444v2D2T6ilJzmErKytOcVJmZM1mxK0ML9wISmbzidbFS3nbsBp/YNkXCphP7PT3BdFEMwyNzdHrzjgaX42zbtnXx29JpukyqpKRYjfC6uhDhjrme4XbJ7u4+nR8/fgIqYmwuyBf34YcfWzDb1rfIkNek8i/c2jHwouiko7ecIZEAxsZ5R1NzGU5GenZVZa046PDgqBp8eBgw3AXngPGnvRqqw0Rohr27dqdnZToyLmK9ffsOdL97J7iSkLy6tuSKIiR0Yl6or7X1AYME/7RXc/N2tLX04pqvqH/k7mSJQ5ub6Es2ZadAiH9yFmkt43KqttRvZTVpcTPimcXOCUjzyKQTpHtxiaAUQQf7B2Lsp7LZZFpy2vP2Z0+ePbUiRcdYRfPQm6UoyycuqCWK+xVUvASaFXFVWY2q1nDvAPbaa2+w3Hfu3MFFJsXRiUQML2GhWAmJ2dKyEls0PrGhs4GtzwsXPjh1eg9zKxeCu0yfsMpet5n/0UcXaXX2O2i0nLzf/u2vmyDUjY2OowLVeOrkaRfSx8cl8fjd/GAsxHVxFcHnP3DITIdmo5zBhlGVn/Kdo8k3rSyrwlf8BkdXbfQBiWyqjQN7ALMS5vlxvJ4+e6RMTXpqMlUmZCA+qgHT690vf/nL8KAHq5r0tCTHZIdHBqjuJ48eUkGywEk0z5982XEyKT85RG5ou4tHjhxKSNwkm51d7ewJ+Wrevtu+GZ1DxPAMHNq6BAnc4hPmQwIGtjS6NDA+q70CWo4f0Ns3is2YNRNkRCTdGdcyxnDKuUZRBviU5mE6HCOuhlEoc3QxaysodQ6wKxbCGJG/a42Kr8wXG/johMXRQM/0Q0J8smou/FSbgdpIwnW5sn1pVyigPteQcjCWhSWyff97PyRB2Pj7P/ju2moccYaTZAo33snvcHiRyAgfoAsbJ3pokel1p85aHzyOPFppY4SUDsGKqAlCswC8WTMfJBG6YANgLBq5CD6om9Q6FaObpHMgECuCxItewTni0/hZS4jV0nDYA+MRDVpQ0oB7eaGC/szMDBtN+lFxyyuSTmkzHOgD87BkXE9MQa45qSQghB1L0FdmRBPSluiigS8vv/wyZuBr2kf1T+1tv9AqeIlXCpPYVVQe/OC0vm1rywSzNQCfDYGwEJi9669wNbmDE0Sx3kAsovfnf/bPJfHDkn+aI2yYlyoa2nN8Dc2y++s7CEFljiZitW8iMA8eL1ps27r5z//57T/6oy+BhC6yF/HWl77EQcc5J194wXzHR8c6PvvsxLFj+oGf4EoqJunm0vXVqv9+S9qEy4jgBDPgW5LiXXxr3xV+eBFq4xqL5aLBUCdgO4+HI/wUTqIiJbRAESkQwjd9joHFDNiwBIDxob8GBTapx966xaUmAh6zNke/Qp1Fy9R42MSQwGZh7C34Ib9Ib+56pg2Moj6H75gWL+kQM8g+9ZZOjIUBxO/41tB+5OhRDoN9HmCrdIQh8TPOEWIHedP2HYIgZE1woaKyGnf5icaLY11XVyRQWe5aQUmkdIwN95qyD2AMgZTQReRhlWJR1oj/T14gynGmiclJ+dw5mcrOZzk7pqqp/6UIDybF/peWsby2LC62sLKscqDE6RBNhEcvmw9+woLg8NB8gI78BMOQeAjKyAl9oaUPFtES+/rrQ3K8god0Qg35G3UClb5orB8LRM91BV/68Vbk70adaOafmoHBFyAZXYf+qWc40onXfcDjVx+bGwTbAkBLDYQNos69vrIcdqWjWYQ099jxAO8yFV6kgMxOs/8xtNc9N7o2fvUdWghqVXqG1ClHjqkSvbl9yXOllKgh++M8crYqok2EFr8isNd9wgT9nz2NGCMim2JsUi9EdE1KLg6RpovJG+wZ1HDmG3vDEYWwxWEKnggX6S2mEwtFmDTDB4Bx/JHXbjgt58WBwrJuXexT9SWYs1fhUjmuVWQYLGOWA04SszPDmVEb73pmwGxJKV/F8Y3hak14Ns8CLTcbkuTVDA70rm7G8Upxf3JquqwSDJwYl2ztODAYMtsWZiarq8pNwcLy3p37d27fbW1pJcbNTTuoANdUOafoxLkLmDPSwsZr+/PHNL7zA3TZrIJzTvMMj1oDOAyNwVgagidEqgqQWkYffvSBLLZRFmB0lFjKFYAHLU2fhCMfnOtzcrrHRXoK1Fnamn4u7g3X88a5AgD72XVB64mpeViPlyfhGLUzMQqOqMe8Abchai61g0BmZQa2BwbHOlmEfprILVI6zBCxxzlZmS4AzpzkhwqyJttcixNAtQUomDs2NqOfyZklV/cqPrM5MR+X4KbnlLml2fX4JDdFcM4UcAeMNTVjLVSck5tv2WAbgh+WkpaBTBiV5+QcEhKjKZ5EKSgyfVwBbPzgeSSYQRxWFNdSqjhTLSyjc/gtABLTknNzytZXlxMVw41z1XB8llqgOVmuJM7JzVS/6Nfe/Bwl+Mtf/uJh6+SeXc0I/cnFD4xOuS6v4KIFBftpIjdpi8valIRbihUAhAs86kFJ6FEUjxLEk6FMZFYWusiqZDW5I3wa/7FJAKYKGR7NuKSe8CEoaFJmUmfOnMUhzn4oQ6rWipbLC/OjQ4Njw0OqeVC70vK6O+Yd/HX/tJIOsVGc1kiZnlHuM2uga1iyjYItzlV0dfeKGEmGVgtT8b57Lfdr6mpm54Rpa7i0wJaOn5NbJHEO1Z8/f+YJIyHefO7cWYsNvM17cSKzt3fgxRdP9fSI1DapV2jR29DQaCvP7XhK6fE2xEQbG5uUQpf3/96FD3ftbl5Zns3Ny8mQCJ+cqmiMKm/KHCdsJlPAZSVlDqqyPRLtZIOcOHZSnXikvHbtiowCNozUs2eUk+nc+Oz61oZt9+62mHiooDU799FHA1//+u8CVfyCpZEYg1u4hsMD/RWVZVRxYJKEzaHBcMxdDFJswBN21I6eQbmAhBqGaRiuJMMi7ktXsJekHkXcyE4LFRUW/PKX78AJNlAlgEDJ8XMUjGpSPQPdaa2mBkd7pYBSKsufXb9ZVFK6ddsWeUqKYAiiqBq7c89uiA3O1saqrB3lU7Dx0OhQ/9Agfs/NdYN1haXqu+99QG1qtnf/QZDwFTyMWb6w/4Odkjcc06LQknWOn58/aw/5/XEhfPOXf/mXjCjtSg+ARD/N2x0tGKMHIieVUWdieef6YaEdBOLcs1HbtsoeLOblOHDsMiYLVZymQldmZjthtCmBYwnWW299ifMUe2tI0j9fXJiZWXFvjKC1rZihkWGZHBZvDmPk5OcwE3jmyeOHlEN7x3PuoN0Ay05kjXY2sPrO7c1lISDHnm4W5OcW5O9svd/y+OEDC7bGrdu+f/uOpXLj9p1uJJD2w0ckPuhFYK1R9d/V9VxggYfX0flUppnTLKIePd2DK/Fr8VNxDx+1/uG3/kiBWoLyx3/8Rz/96c/ZSTPln8WqOo9Y4vKfsJwUEX6JmvRQ+v3vf/dP//SP3//ggjCX7SAHM+BWsSlbRk4a0KuhWncsvQSB6B+mDSfgCukQxBkJ8BXnkvNEalCBS6Y9a2KPwiIBe7NEYIhZrg1vIZar7pmypMT0zo6eV187v7w4j6/u37lrR9Zntby0fletS14Jxedefe1XG3BVghaW041bt2RnpfX19wJSS4srUSS6iwIBakVFpbgs1R1bx8ZbHrS03JkYGybIGFtvfHHcBWYs4S/dDngEEuHWP40H2681viZDQjlIGoku4mvuaNpuXtYeaiZSPnwsc2HRrEVUHR2PH+c0CyVwQzAbD5Lo8blJKEVHuCgWzCO3jU2EMZBjJ/fE4XBMSEIBT3jNQvyCAcXA1vMw9s477/CLrGCpKTtaodJ//EbbE3t96S0P7o2Mxs4fTozq0MW9/lOfDQDcBj1gttdee83roBWftvIxX0j4m7/5m9/+7d82nNH142AY35qHjbhgfuFk7d///d//5m/+JonwCs2D64BnjUGCIMo/E5NTs3Lyjh8/TvQU8h0eHZ1bCOW8XLhx6qVTvMrnnc8PHz4MP4z5gYP7yAY2fveddxxU6O7ssltFRRw6csR6huQaVwRhaW7WRdcc4RdOvii2+Phh66lTpyQadDx/RiW+8XpI/ecGfOGNz71w/JiJUI9gA1Jvd9fpky+aNfzoCsmMApMxp2gOpn2xZ8tYgwdn4ka7H6TMkpiu8ApUyJSU2up707YGVc/XlpcG+3p9cTEltxuH2IFhqrjdLBTS26bwUNqq3uTu0wm+QLuHXHDKhyyoZMSfAY+537nfgkYOIGFRCYecVY6+n9h9+BTDg2FhO0+k5XDZpSNwsTGqNEtedX5OdlamVNt0XpBUncqq2sbmgDfCaOKoQO4UFBHvsFuqnAhE6VYIEkg4PD5JzcO1kcWJwdGRuI3OeL5aYkpSipQgB47DjT3pmUrrEfdkCkmV8vjD+9yPM07C8QcZi5mfXB6Ghz6g12mML0OGOij5Wxpr4CftI2/VhCHFdw8hCLdF7gJd710PvRimHfNgfDET7+qE36AxEmJW09CMpfHxT7/SPv4CQDN/Sax/aq+B1/2V/E2SbbSxZ+bPN8VAmnlI6sAAsFgPYfHpFeLH6vt4CAy/GkjnnvtEAgAP0Yhoj2lCQrhN63+qSOULGkSCh8C69Ssx9lD/hi4ucyBpDeRR/6CCLj6lL4YIMLNvsY8G4PSc5aB3jG5EwHgdKihoL3rin9YbvuNpW1oOcnlCQgBp3KCyQ/hqYNuWBgYegjUoLymnPkT1DIFLsE6Yc2oydaZDg7MQCu2bHTwQLklzZF6HMLm8plj1lO34TGUpIG1l0R3A3R3tDghamKLyph2kuPjsjJAOKHWnrKiwploVbRVLcpgKgSswGIL6ICGMLi6S+Y0WNI709M72Nrdvzs8tbt+5S7IUxfeLd94VQjBxos6rxj+Ndspr654/e9I7OLRz34HF1bX2Z8+04eDybw7s2x88nvkFxzEVL9va0JiRmdv6uO3Sp5cX3LM7s+SqML2Z9djkVGDg5FDUz0ka2NC5/RDgIb2Nfn8UNfeQlbJA4rbyD+wdwZJSylx/UTdIYOP15iQrHMrEy0hNcVGQHbna6uqSokLBCT1z+LjyFmC2XEqKK6Zn5+DW6QX0tRQRl62us5kedn7AJv9Ph767DJhxgmhwchZFEO3xcL7906/YzEx17kPuEChiLWwGdLzkpjMui1KqAObry/CxGedAs3Qq1XgUKuVSS1UqL+XSFyAW/bhnz27n6rCiTuyuNjZsxWni/XIlFc95+uQxZNj5pdpEIA4dOZyYlHbn3n12hcYxqHGgyxcsGsGGsrgRML6QBTEPIKn7wSxBu1nwirDu3oMHFdm5+MnHDKRdaexBZklfUX6Bd1nct9/+IajYbNOMDlQg06effoKjpqZCRSwcLNbicvt//+//vZKXyMQkCPt5BbqKi5Vt2fqd73xHEojNaz0QulB1UemrjQ1KHLt6woF7//0L8MnfMqhZCIkxGIw6M5OXV3jqxLnhoVGQAIPF4kaYu5lqSdcTQ4198asvT54+jo9bbWjcooCPWaieQUvv3rW3vV1KUqG1hPMDUfTBFhmNH7JRB3p4hNBLz0AmEjtIRwpIh9i29Yw9cTF7PlZlTXVVZZ1oDttpuPaOJyMjwyWlBa4WcgIBsYIqTnBNRLg/G1ZdMeIOS4t+hkLIkLywFIiFLvwS2EZx/EPHOllhhQD5PT0Dy0u8MCqoAN2dls8vyJ6epspWnAgHjxQg7GoNzyLCj9NmLQ8eWgDs3beHzjFlnp+1EB2C0Dj5wYNWttl5WbD19w8yigX54VwHxnBtBS0h58R36g42JIvr1jJAP/LHpJc8aL2bmZXU2xeK2xDP/z9T/x2k53UdCJ+dc865G6EbjZwzQJBgFqlgKtqSLcueGX/21HxT4z92d7Z2prZ2q6bqW9d6d8brqW+cJKeRlShKjCJIgCAIkCByaqAbQEd0zjl37+8+j636XkEvn37eG8496Z577rnn3rl9l49cVAy7trCwiFKtKK/RstWFcfE1oCPJ5ZYzB+MQgwIGuxZuFcMwGMPwrQ0AD0unT5/etLmJ0QwkNii0aNN1dco8fPwIzrlLFOY/Bx7Sa4cJ+6T7iYoEzlwrQskdOMKf6F769s6tGwiHNwSfRJZK7jPPPNvR5b7Ycrpdljr89j//5/+UDIf7g7aRXFK/TE02n4HzK23dvvNXv5KepR5r8cuypShJHGs9Zp22/8A+qV3dYltbW/X+mfd+6ze/s6VpxwcffMTcZLTx+OgUKsBpf4yqsUTDrrDnJevWsoQS1pRdN3zi4c03f8ElbI8XcojDL954G6L4PvQoLzihGBkbJxeYxKC4aQycXWvgpjjRHVQudcc1SwNQ7AQBEkCuutmE8kRKOpC9aFBRAe7wPCxhRwuQDsWmpiXYkYP5ru4OS44jR4Kj1DzOcKQTXH2DZPh2x/ZdMlmRF3smUjtwH5AUFzvgczRxOIFphSVEcxEN0fbOhVMUbW0tW7dsfv6FZ2geBhyw0RSi+IkBowU8rzvDpBA8mLB4f6kROoR+8CedD3UwgKwYxhvvyQ4sYQkYdp7kuedOS2wKzm3bmy/InBZF0homhfCFL7yCMRyexkVUgS50KiESKhgyY5Rqwv+ob7GkLwW0GTWLX8JVMy4jJ6R4D28bhVpMc5hBET6Ot99+m2VJDX7ta1/7y7/8S3xbL/FadDEFzFg3Mu4BbItAI4b5+uuvA9vwsQT85+VmX7n8+UCfxUmWlgeGwj0qWtP4z9/4pW8nfdWyP4YPUU2tk6eeCUvZ7duJqp0ow6Qw6RbRXIZDWYm48xISFKbQDhw8TLrff+9XskTIKg6TkorCDDA8c2mjl/w/d1taXBKFf4TvwpWB+BgpYOAEZlTBeMCT1QAn08DxqgD2/tX/+r/+3/74jxHFeDEeeCwD0FdFI9W7ZQ+tpXF/Ci5SknIAqogpo+5/0qtBfg07Y8S/KOJ2i2deX1QmeKMT41QlrpCWw1KHLCPE88+9iJSW2eAkOIgF7aTbeWgM8+Yv39JXrGEetneQCFf9MZZIBMhjDc/KhyipSQBjR0uA/ujEpO70QtYIDhzCFWODC0wUsysFqmqql1fWeQ78avg6guHYGNA7KmvcS0oADmEgJTV9fpEfNLi2YQBfwY8qYNaFECHvZcBBgrg7bJB47OBevGKEcbtYzTjD9B+5V8Hkowl/xs0ZPDaNFavx4Co9aZ0FSboU9ka7MIjkKsI+WEFJ4yiJyTQFBfGvmvITgJT0UZG5AGhlwKMw0NXSQvygce0oEJXMDf7OEIcwo4wHQT1+1bVFkmmDqlUsIhhXa3DMaxNa4kYijCyo6E+Qg8QANeHPGF/QEiBJSlQRhDHwWgCbYdJ3Cnv2MRx8qTx+AoKWjc7AYYk6wGoe4pY1gk114SEAkxAWbSp6qU0AeGn2BYCBapaLGuS6IDzsBkPjeACtWnoBs7r+8EYQNRcRZ2FIepOeZTqPQlyku1mkj/SuLwfD4zHqS8BATW0V5KvlrJuRoqDwgebtm6SrEjrOD82ne+zIQX0N9PeqK5IeIspLQq7f1vttLLyXnn+uceOGe3duRBsOaUbNdhRKC34jQlA+S7Tw7JuCaKivbbl7A/jBQ9y4+e69lkOHjnR2C+UPuHI5hasG1N2+bau5kKeTBb9lx6707DzJ4AxWwDrV093ZBXv8KzY8JqdmNmzaLIqmp7ef+SUqrrahycAftT+GPfcxG/jM/AKQnKHADILnYAy0ETMTEn7usBb30nqH5RqWqBbRqWHrEJmEz8BMCBINIaHhVGJlJfuj1J3hJJS+kChaOBa6yLRrb4F/ei0xaW5+QW4v7AMDtEzI8JAq25cTnNlUGwVtbiM7QoMQDpx61N0EJy4Sz806qqVrYohMQYFG+4PkDiHoFD/FMgVj3GoAFtflBhb+A0FI87PTZUX5FeVlHe1t7pfOSks99dTxifFRv0rodv/+vbCGFDU8N+fkHwEpyMvhHfzd3/0uToCNyYmJYAiG8y1Uk7syShaX1oZGR0CiivfwRul4xvAgpHcY97QhPqePBJYwziQAsTqCUiMFP/H0K+MM/i0AOHsoSqM2PdPg3G9GZMGA8zGJcBozDSOGKDGAINDcrKQZyHjNx4wD4sCjo1PZS6wHYMYbJtSevbscFLt+/RqjxCFyIxJO9r/82z98++03aRJMCAwGAU9brMF54LQmRIGtQMYJmjOUB/ceS0oMAQwE3GykJAMCtLrACQZF6fsVcpDjo/Mf1NdVWrDZMjJhsPWJBsCdwaLi/WmkTBkZWliqqCabV2YGxwSnGGldmJmfg8xrV6/j0qKS4L0GDEju3L1rOiEvx4491dc/ynVkIhdMH8z05Tmue5OEBYBGSooLqRegIsTyouxNyyJV8gvtEy4CUh5VWsLqQhmQmNohActF7sksiwQMX1pW5SJt58MwhiXilSuffv2rr924cY19RjPYoAAPWiAE6lOwSckZVwXwrK3s27cHM1gVz83P1NbWQIhTBNeu3TCu3bv3WC6K9KA+Dx08yhNvEuXmOHfOcq6WoQZXaF3fUEfYEcXcpndqbHZ2cmnF0j7cYecWG7UoNE56P/X19eOT3BwHo1MZuyx+to58pJYZ3vg4FO4bkn/wgx+glPyJeuEzgYewLx/FPrHqCotK4JbH5f137HvIy77ZRRPI2t7ZAflBaUjqkB3CbXGvU1uUCUWHVaIQ3DBNUIyOJUhWI3CcN1H4BxSJ9ecW2bFzNw0tO4IRUQ4En1zbXyV9WuQqxjPYifOFmQJIq7XhUdd7T+/YsQtCTLuawmC4gpLp7ZOwKCStGhwcsHiw3e1IcUY6n3pID0J4FQ6O22gDmblDAPEz/yVZwxKQpjqFY0qtq6+F6gcPWizYRI/s2BnEh6BJpqwpZNKas8h//Md/fOXadaSEOtxCbdK3FipsLDF7kS6ahr1YVKFIj/ABacCgB7jnWa4V5ZVQJ17cmsGZKK0xUCx1vJQ8bXZu4sCBPZB889b1Awf2WQAYNWgJPvzLtl5SUmqSxLF2wwxZ2gk7bHBlw8o6UEeCl5wTwBjvvferr331GwSTd1EIB62+bVuTLfmPL5zFhGSK5gQqrqBz9IjWkMz4o7u0T2QY4j/60Q9lTwKAJQEvAMbDZhauyPfxxyHQi+rQjtHBtuhwQq28JbThWEdZy2nKglCbbFbxn8wfe0dUCqwqDzmAgca4U0xrnnXGlLJltmpEvwAzQIyB9PZkLFBRM/YRAOzixc+OHz9CajRCHf3t3/4txwTgQYXbAawuJlcFJDSkl2ikAN5TC92xvTmO+r165fLD1rYD+/ZQsPAmDegf/MEf4AdDvnO3BaUcaSV0sR2F7S3kNjc1i2vq7X3iT81+73vfc18ylnDmD1lFlDGp/WSMjjzZYdu1ey/72+59+6NH7gEgL5ILW04AjFCIKQWtE8Df+q3fevvdd6DXARpDgBPKhLICPIQbCMJBnZdgQ0FDICaWIiQRZ5oR9MtY5aQgvOYRLVgaQSAL5K//+q8h1llzaxh772YQN3jaeZYJFxsILTbS8bERCxiS4rggIAVZWAATz9ZHj10nQmd6FooJsRBl2t2394AHWp2G92DsxEE7In91Kh0FUP0Jqs+vXVcrP3K4wCS0W+oobFmlIynUDYTiklasoLhE8iWczN5FJjs/XLTCd2UBkvLL8Uj7J9JDuooYEugEY8TVyAohFJo3vlHWTEcuNO6eEw06WwSYCP62GFqcqaS6eFh1XATPRF6ZFEpQ36iiDpbyAPVoAG708DFnxB/D9lFfK/GmjAdvVDFy0GhHI/7EDT5+0oHRggyImjKL+FVrnhUAkIe4ihY8gNLeh8LqeqOk8mppR1/eQIRe1FLARwFw8st6VtfUC3jPWtapB1WU91M8BDqLAa1Nb/yqTajUuG+qQS0PqniIuwaSmH7wgMGzB9zmp3gsuoYHf+oLWnSEZa3AVKdbCZL34EE23WE1/Xqjrka8iY0SURxl5eGMBOT7FTDsY78qRvjxpZ/0zhiKUcE+85Ni8ej0xXyMd8npJsCDMWmdMecocli22QcIozDsRSFLYcGjLtRS1vMuriNyhWGXxnwAKoY4OqUsJzFHTWnK377X4moMsaSPOtoL8xx9LrDWoabtXlVWVJGHDz88Z7fKIUgDdPz37p0WulKP9Cx0UYhMLhotLAzW1t56++2kxNVY2Lbv3s2PMDO3wE3OFCZRbKDJ6dmmzRu59UBev3HDTMsDqX527t7LGMLEzgBIJrBj23Z+FJ4/epP6cGWBDTUxP06vFhUVujS+UFa4pcXMkhI9joXQprAmjNlgapq0hCgmhIvwsC7tr5nPJMo6t1QWrTEdygSnGpUtpwiMGX5E6Fy+iaWlcCQOuhTYU1vHiW4n2l2t2tdGakbmyupaanpiYcY/7+eg3fTUtBxrpM4ztDC/tebyaZRVS18JrGAHvlEsITh0GZR+QlkfDIlLgYqRopkmRASRKTBgNu/5jCk7qbLdBJ0rCDkvF0NYqmSmpTpvlJebZWeTiee8v6nURoA/NUVaGceQRrOz3nCvSAOK0qoAEzKgfWMY+X9sZyMoSCiKoLkKg0WIM6HFB4oATDtz1QBpdm7mpz/9qQK8jGYgVpqzwv6MMJlSXFLEd0j1mOkNkG4yIv4Y84c4HNR09k5fTJZgVs7NmIYhGWZ0wUJCTU6UV1/9kpaFTNCbwsECTlLSzQeKMbxw+4svvvT555epEbXcIqeWHk0/Jkiohn+x9cqXlJTZBTEE/u9jx47Ds7lEim5DcwpaLdXNFmZQxEIm+sEYzQSUu3ZQk1wbmrhLtqnCET7WJd5BWOgl3WIeLfyefekluyK0RG9v3507N0VxkEWN2LAszyunKKw8dWfLCHpJgWezSLSQmLJ0OXT4FMtbdJNVKCH67PInCqSlp8EkDd7QUE/1A5KthkuGhkecELDBCxt4w3sPmAq2IdZw8AxZ8IyObDXKxuhcDsik4OSxZcSPSCnayu/semR0GMNYsBwEsvZstdXWb3z++RfRiyvUCsGOgbGDnF4yKO0QVdOnK6Lwz9TkHEOQtpmbCxa/cdFR/LUKyxLLUgQGI6n3SZ8TvWrl5GYODnV/9Wtfpv+YX6pjreSkGVlEVUedlOR5hhHS64jCMbpY4dsIAoxlhUYCNtbWKAoGkyGADaJgAAMob48+4OTRI3hgSViWyB6AvYU7whhrjLI8ePiIfVS0RgXZurZs23Lq9KlPL16YXwi6iwF06PAB0RTY4OVXX8WNch9p7fDBQ8NDQ1QRPCMrtOtXuFd9bd3Tz5wSPQIh6Av5bp2HWPC8Hpl6SkKI1lDHoCJp2mTvy6rMqN0bQLLwDP+lc0rGu3fvQXtosfiDXEU0MiiQmE6ffvppZVQ0AX3lK1/inrC6vt/yoGlLo60S4TGMPwQV0sDCbmjYCCQzxStfeBUDc1rTbAgNXezRQwePQCAaOdQo5h4mcYu62sfPzEFMrgC9QV1oh/5kkzVvaY6IIgNb1c9++nPVaVRn+thJzuLbK2MJIZYWXOFn1rOCAipb3zoN966vr7FPYvXLyjQ6/TLHc3Kz6QTjNVjHaq9fu/n888/ZUsD/nH3CnBzdBF7C+iK9Af/MTQwJJxon9d4wEJGGxkBZWJL+hQjTVGTZegycZkDU0Ze6VASpN9HAM5yoCCTR6vI7ufmO7c6hZuPL5iSPGzxQIPBGQbW1tUK+7FKwEciXlcUS1am9a9+IjsSaffbZZ/ykIyPCeHSUgdCx5mVlQBL29JKTwbxhQx1+xvZaM0C/Ig2NCh6qEvCAwdXGCO3if/APckAm+LGlkngjwnO20wUSe4yPDiMT/LO8MRLgGdZ8gwiqGAubNP3VX/3Va6+95mqOleiqQf0ihCrECv/DqvMPOIGbErpALswGlmwgoJGKMvhhJ5vsucm5khzAHp3Pn20In1y66JS4HDXOP3iPBOCkGfykfcgxOs+QaXQagX+ayjecUIDAQFYj1bstAlxn4kAsAmV61RpugTdayEtE4XXxE9UNFbCtek9nl+yfZNMlcmwJpw2vXGk3+Up8wlPKt+JIBvzghJKSCWBAIHckBQhRHApUhKYoGZxP21z67FOkQQWj0LWQMD4p4IFWXY5OlGVDasTqKIjx/IKKCYlJ0gNyXwLVCU3f2jSPh4OnSYl+kvddZnaX+LoZHSQgx8YoDmNQBJIwC0SB8bQKaY1pJ++LKHDtQ5F+YQaPAdWvXsKDgeBzVcigcA8hryGwGJb9jMZmGijTLijApBywfAeN+S8fJREjLulXCA2UtosXGegK+6hu/FoAsQaV9wxi3xpXXoOKqaKkN/GDZ+D6VsC3lzFscS0j14uf4pdxp7CHibl0/aRB9qhf9QgqhnXcC+xga7340zcvXqRPw8JGSXCiVoxN0OpLXeOKwVCSe9UHdZVX3UMMAwwoieRgjtuJ4TSncjyvLC67Q8cHJ3nOcbouOxeEywtLzt0lCu7jMF4LIUyWjUBNYLcv/nNMlDWUftPTswBsOCCxHrHk8TLCXFho+ngf/RjQpeT8bIAZkKvyi6clZmSKOc9wjKS3v19QKc4Irel5PWzRrq0u9C30j4wOqyp13fho4BiFM5bDAKdmZ3r6ehnW7ocaHhnp6ZnNz8md4PDIdHQhq7K6ZnhwOCs3p6G2gVuqt29g186tyamZQ6Nj0svmFhRygd9pYVukyYdFbN478/7RE8cnJieJq7WEidMxOObO2Y8+gXB5bTkIBRZjU3qZABNs7lsCgDSgSkjLpJ6eOXWSXut7EsK1mzYHYQYn4ZezSBTQ5s2NwqbRMXtkbG09xXpFALdYGjSS1SclPQOlwjaILLhJ0lKFq9Gkz5SSn9gzsBmLeN8DFCmGd7SPpoYAo56BQeQYRtlOEawnidCYnZqmnpzBcF1Ab3cvx79tNi7/QPq1daY9aYJsdZ17lkIEHS08UIpbCGMDHrFoRow3J2OooK8QmyRcJckB6KRg9oclPmrGJbVDp6tCqqkSgKkCUdALLdnVFYtz83IIyO7ryA6iWAmsLefaFqgsl/2A+6+mq6NdtilHOGxZMCWZ+PZbaCia18rK3q729ejaeZDbWknLyJQCyIigbj26dFDkSSQscyODDgbNdXeEOXVjfR2koRrmjCazVIlZ0YWUWcfawTcQMlJbV+O6OWIYFX7C8eM93uNI271j99SEo43BqVNcWMT9bAnB/2ETA7M6aQAJjpf094acNiLHJAd0ZYZrpJ7evQe2WTwm3YHhkaeffU5un4fvPX7mmVMHjxwGAPxcuvTgv/7X/2aFgz04Dvlo7LAfPXrsZz/7GYCNNDDYejjCqzBj3ZIgr7QwJzuXTifOzG6EMsGD3MP58+doz6amzRx+4uPFU6GOqRddGFIiv80cPtKq4Jbdu/dCiEyU9Ie6vE2WHEJ3WJaCsgg+vcSB4M4+06foL/OuNYsxqsVdzA9k/WYUd+7ekjnkP/2n/9Ry/46zMKZ/O2MCUeAcMEcOH6uq7A66aHF1fHSMQvBS8k7tmOGs8lg2w9xfkbXKnBWfTejoKC5eYUeIS3lG2zUYZ7Z/gFk/SEOgnXU7GimGz4vHSy1n7O2UlcuqkW2nS6R45nDm4SMHh4eDA177VWXV7usQYErHXbtx1czAMijIL87MctfHClQTT9wLk1PTrkd1dCpDXi+31MuO9b3f/1dUJdGWclTWt4ufXDF1bdzQxKSg50yoM9Pzwoowj4ncqvLevTvCwXEvHEqor3HOCHckc8zzR5nXGUO4y66CE+fmXP+MCJawIszoCBXYkRQRNnD/H6vlzr1wcsmq2FkLdN+0aQPH+Y9//E8bNm9q3rp9dHwkHBaYnYUxaBCiS7qtvlhCQa3lFojytb8hj+03v/WdjvYe4qxlR5vcz0gR9Yrc7+9HsnqLnOxMewLUHQVjGWNyLA7xn5mARAtKRniJ8CrNOl0WNP/SKnN0y5bNGNIGi3h6PP/oURubw9RDG5jdGQdMfIKMlxh53DTsWuUBTHXgfJzj1gJy59wCPrQjIWIeA6riobSkDG45a/7+7/9++84d1JQNHOYIoYhVnzfYwNixAbKKAmLwUR1kNt6xNwqkYfJazrnTxpKAlnPyRJYOhjITg4PRgs/NG+EikplksSEy0mAJJwfoPjLCHMl3R1VhsdBGh5Zb77cQAdFW46MjTH+SgKbDQyNoZFuSocwAle6CDDqmxYP2j//4j7jLOtEd58jKwqZy2dBUJS1FQhnEOIfAsjtxF+zReHRLaUlJQX4+60IkXFi/yesfpSFRMaSDmJgQNF9eVgYVCPr0qVM7du5UF0JgDCNBMtFm3aKXTikQqLMJID2SlLLWGMxZSLNatvTF5LAKb6QSeHDFniawJmjA8CVZxh84cEjGGyavkdIt2NXWFkHQHRi4J/BtbAKiOyrjasVwl7EgjfJ4UmvgD6rg/+Bw5GfJzQlbW3oHgwadHiPg1D7TcO++A3rBSFBk7f17v/d7pmPFEP2H//RPuAinCUgTbiqnzTd/81tMf/3+5Kc/dRtAYXGBqXXL1qabN287V1NSXsGvbdfls0uXcotyxRfAjASjgnCYQ8RWMjEKFrTw9uEH7zvv5AyYvUWQ3L7hWoyqksYminRrU1ixm/0PHziIARivwYyuC/deU4M2LvwKFdyLSGPVhy5GjRC40VLB5IhPjhw9LjEDT9b1mze4yaz5XQOqKWmqRRQ7AUkT1VRWkUr8w3eOfClpGSCBUsiELgihYexnQjiAoQIjwRjeoPpsLAiCklYT6iDEAFEWjUYjWhNV44UNrAKf4Jwcm8SQmdmZzisWZIYEUIJMAOwnc4poDhpA1g5hxmkpqWKH1tbdKTRQVVPnfk8pfCQNhxl00QXeI0E0qrrwAx7scfvundn5OcJiriGzNj0cuSRukCMt24mTwQ+rBZBTDvCTYthawT2GCg4/Y+74TyPRNJHwxnP8wZc69kbHsVQQdZNKDIRGPSCDFnxQyE86g0Q41VT8AIle+kmbsOy9wn6i0ShBtXThV++15r1fVfetVgyPWlhT7kUlbTCo4j34da1NgLGn/aSYERlg3JqmWEFexl34yUP8Jzwgs0a8iUHVnaYAoFNj1FqMnLiWBmPlaCwxlyimvL40RfaoeOoY3n2TQ2IJafrSjpa90ZHxUv2Ugh41ApFi9yk1P8VoDAlcw4VNYfYicsZlCDqKgTEODSaEHaRga2qB8Ri6SAhRVeuc7WLEM0JhWwShZMo/00V5SjaWdmlMLEyQVYpo13w6bzA5M87yyM7NKa+sEJSWUhLcSz6LK8vjExOUvj1w+/LM38yMEPYzODzyzFOnW1rv2ZktKM7HuLau3AVod4wUlVWUG7uspbhz374XGKy07Z37Nx0htlXa+qgjapln7oH1XRCwpeXO+x0ONsgiuu/ggb//p59KxHT+wkUpKxvqaimmt998C3/TBTjQVRpi5X75xhsNUi7Lgb1w5+NLn5VLrS3K30Jrfc2uhyAoEahuYRJUkBvsWoTO42SC87ExB5QXHLrh/kdWtmB0ECMsU7XgjS0cLB2yhSZb4qauruVp80lvt1xGPgYiD/JPfyR4faFuQ8O4+WJq0oI+LStTAq5Zmwmys0dXeKAa/KM7Fo0ZOBY6Y9c+Wjgil84mSk+L6YVVcAgeUx6f4zTPUA1mgNHg6OVNVVWl0Czgz0amT2GBmWxiyqCWF52i3thQjwWYKdnp0n3U9vZ0ma2lw2cIyimpWfB4LzBAU1xHHd1dVIM7PHEMbYMDdce7xmwCbSQ74eydin4yXXlDZGDJn57pPjOu+ClWBX1nCCZawcc8jsYCZmaWfzwXmuWVZA89fNj6uLVN8uyUBP7CMnYP65+lYmuexCngmiF2CYWE6xDS5olNkSf9T5jaqCkO2BAcdQWh2cs0w+A2CTn+5dpgGQC/8Y1vWfKYZfXY29vHyG7c3NzT3UscpDgxqOGh8bTULNOzUTz77Ismm9SdaTY9IIR0QLjJhq/dpEK+DBPazaNmEcNB0MufdTpEazXF+EMpP/HGyT1L4riCIMegpsb5r4cePW7DkBnS1NrBSwlaQoPRpnE4eRKMgOTkMN2uLBupNQBz0ZvqWpu6TfIyOdKgtb7+EBPSUCeFxqo4Ih+RD3zt1IhtDTGjznnxSM0thsyhpAPTVlSWY2EqCOSEUYZWQFoO0QDQS6tQhcxBhDA94Hrs5wAu2CYkrY/2dvQrSxlOtErp7ul/1N4hEdP+/Xsd7jALslR27d5p44glAR6qD+qMzhDAYPHZ0z30sK2DwxXbm5L1a6qGSSSz95CVKdgsgeAsL62XFFeceurZ999/a3BgxNl1bIbZCgtKamuENYXNXqMG2H/+z//ZFj8JxasIoVO0k+jOKksmynGJmKNoVYVpCbilFdmmGABIqhw7fvLOnVtoyviGFr5kywaBGXbkhdrTKqxVq4u09GTxkGOTo0sPlwXvLSzKsCQscNgozN/k8bnnngVh27379hkYlyqyD6Ql5eh9/LijqvKECdyaSkYjRwwvXQoxb8rDjLEzfQDJuWt2cHhgZHyks6sDDiPlEPyIlCQLk6TbUqMVAWnmZLjz23E66t036nDY0x6aBX9ebj5IVMGWNK2XuBfFSYfpS7bcs2c/cF+p6C/U509AfdiTcDPQPCMDzM3NWYoJ8oIr7QNG6mo/gTkyEsJLHEt7YFG8SsaZsC+//CISMDV0DTyw6YUwmq3IjjUAINkfuAgb81nZJWYKk2VLRMMPU1NimBZRh3hyr9IbmzZuZiubDWkzvgMIQalgPY+x+INTkj6hSWRVevrp01YCY2PDmzdvYNXByYkTx/QerbdLaB56iUjqnbpmWMM5UA2EROsOLfAJfcU4Q0HFjNqD8cKPKuxLTIhYZnPDMXYQWhIQZ9qG2fL8889SkzhNzI9FkTlEgceP26k+A6Ek6S400ia5sKuDb6Npq0abetcg5ty0eQOUkhfYM64333yTLmVNGrUJkblJP+D/aNQUYLJf/cRQRl8LDOSGSfjH0oTLkL0EvFFw8DPyFEMv7MGylNEhJHtYDHEvMk8QSTA8++yzn1z8FFo2bg457FEW0fXID/j5tWs1tfXAFh+l367uTqs7LbNbbOlILiioD7ahEUgBURs3oKwha1Z5rC5LRNAnExNUIl+4005IwCqYtREWhSTgQ9oe8rEBRHn5k5/8hAhQL6gATqOwbAMYrOqCANI2igEJXYzFS4TDJ2iqmHmZUY7/4dwAYUz7gHFGDqJ2bd9Gw0puIUc4Rx747YpDkUZ4rBCFya59XMF1DpkxvWw/UjOOY2nB8DEMekGLviy5/+v/l5spfPTuhC7S9PX30zao7w3DQl2ygxa1VSG3nggWi73MrDzzLOsLhAYeDAMXekrakZXtWzhQxDzzVLehmY+UMdiwfohufTZkMPjAtvb1zsqS0cV7pFESBqCOisbGCIFL0RSfQDX6qgWB4UAA4hm8b0OFbjWV802JaBdwsOBbGX8CBWcrDFMIpqSPN8r71RuFyWFcWDFyq4u4fcUUVhHxQOmjCij9qSJdoyLzV78aUeX/WMs4tea96r8GknfBSshLHxBG1r4mg1mvNdVBFXcaW/B6N3JvgKQv3559oB461FJFdd/ewJRml6cdxg1eCfiIx6sjkg8H3EUcSxBCaJHEDBQ8yFFUklHDuG+/xtjAB+hnyNrUo758o4T9esaAxvUbQxKPBS0AwCtvQ0Jh04kh+IDNe5vghkb1BJhZT+FgK5uVfW9tRqk5YEDC8dZsdj5a8OOGA8q2HQDPhNKIWHPJH/TFPcjRYozhmsmV+bHpkYTk1dLyMna8xq34Dx3cz4194+o12jEzNfP+g1auGfjhWKqtsq9V++hxR1Njv3h0zx9/8jFDxAafCzue9A9IoiyvptgM7bzw0ot8APfvtWRkTxR09gg3XFjskMUXWpTnLXMbbXZe7tICt+ByV09PXk4O39jRo8cdajl6+IhMSB+d/dDW5K2b1+uqax61tYkjpMBpFvxtuSLZNiPGdS6umpd6nBazwICxoZHRjPQQPMa6FiyUkpYl935ObgjhIKTSKiI4luNpQwHYMT8xd9Ai5nAVhQBZc5m9spyMTksdcVprZr67s2dscFRQN64T/moexU7GYm/EjCrR1nRwGhlRoeMYIur9hBC4HaG1aSEhdFzOLztSVoRu7QgpXrPC9poRIRYMewa/wjSmOcAb1SPMW4iF9Of2DgeHuwtyG4oK87wZHR6anjTfmyHKwkGQrAzR/6aW4vw8TckQ7D5rGQz7Bvs3b2li/D2MTkpMz83v2hxuMx2bngx3AK9hHu6Gec+EQrgXbiFxGBJCqDaS5T0bHSTmHhBSiLFOad669Uc/Cf57uReVl4RIyDUjIFrVL1MP2EwSla6uDosojQTRWFknGiKAyUQsLJRXtE5YCyovJ4//DKgN9RvDcrfNBQJT2JsKBZJn5oWFqIggN4lCUSRZzPQKypfnbMOmDULC/Epri2N2O69jA5Q4If3Od44hemVFjXnRMSyIPXH8lEtdIM3RXiBJHIRSIHSlBvAKMvM0fuGT82ZW6cnvP5hiTOzfu+9By33nU2zmZGdkbd6wybdNNJMHc9BMOTI0IKrBXdqHD+xHCGcyzBwIZI4EYX5BCEiQoFe+EaYq/mFibt+6LTWd7TjH4DBAFnl9VQ1kAqys/MT161ct5EDuDAArlj/dAuD8+QtXr9ykAbdu28G7/7izg6ZBEQsq6s78Ae0sHucd3QJDkVIObFa7KHBoaPP2xERvLVILrkMJSk80amfXlJVzWTHf8HpFZfWXvvxlPizRbmc+PNe4RZgKW3Dl2vUreIPpZv2AG9Vyf63LATmfYA/w1m9FhRU2MZiAhBQnYx4NfvbZ52gqRmZy8nNmB3Yzkbs4oq+/Fwn+w3/495SboxryfDY2bg2HQWbmGAQWjSYz8b5maLxn3UIhYXuYdPwAHZ22ZJZRj81bt9G9o2MhUI3FKM7HS/pKaBlzn8GBYx8+atUO+4C1IZrfmQe5z6Adl1bX1tn2gYpXv/gF+mJkfOzI8aPQ4j4Tgbm3b97E82xutJMwijmYEaLth0BijWQX2nlfw1TdcWT2q4SXbksArOmDYUFw6msb9GtzYGFpweRpowYOp2dKxGIJR0xPFz82TbLg5M7ddsuKF194+e133qytrfsP/+GP//Effsgwws8QSL3YqTBGLZM4IUM+WAWJUcR4teDKbYCJnheQo5b72BU2dczOzlkYOFyrvGmZmmF3mrO4cskRMSeMSINpwYaXiIxBMYkMgaVLnxBPH5QCqgIoogrENm8NjluTiyRO+JAhGAFQjBsRaGFeKH8RrxYMJCbKpZhk6wZuwYZXWWCGMDgU7uJ1NIVt7Ow4hzSL1qBEMeFYSYFEbNIhRme3BGNggE8/u4DfxicStm5p5IYAtnZYjVQW8MDjG6JYupoyEFBpinSzKW0ogRyorj4sL98O4ax5IZHKhERP0flyDMbkwcDYWAYbDGOLzN7YlSuXEcIxmF27d1il00XErby8wpDhDVa/8pXXzn74Ecsv2hkI+UUuXQr+CK3BFdOfyw94ILEACbH1LhoLI+oj49SgjREkxvaE3aF51pE/ne0RxCJzg14417CxtY262JJ6AQA4jdfQTLho6iclCYjtd6OeSUuBASTmUYZnw0RNndogcq+tirGoIochcEnDQExxM6aJyZ9o0dk5iWToDu02IlpaQkb/69dD3FF1dSlJsfjZsXWr8hAOJOj60z/9UwsAicaskXbu3uVo2Yfvn6mqLO9LCp5W2tJ6EhdhMFe4fPe733399ddBwspCX+fFXS5hx/jk06cYXaQGHszIkEkctE9kiNvOndu5Y3BXmHm59TKzHWOwBiaMlIgUFzAPA7QBijjIJDDv8KEDElEsh9VIuE5uaGLSGSrw4BbMA28Q4oEPMUy41GuEOkBaz5B6Vg2cO3HEsUIcAOPMoTJsa0xId1HjTCA8aaWnpCvSrDG7n/QZ7MTUtBO75jXKGt7sdNnxdjWPpB0ikXCTve7ElAz5SxgzUG0ISIxkWI45QSSJKi7CPwDGQmYWXVNxIIEcqBNMaluVRwNaEJFWJP7eM0XocKMz04SgeQMjMMaPYBrSh+nZGx+t60kZDz7QAX26ifoLEfOwo5afjEE7Pn710gcTAxodvIxMK0X+OehIeY2DxoPGEd5HR974M35Q3Z/e+9Zp3KZnD/r1q2AZSzdDhR2t0WWGo6QqyUnhsIF+Y8B8AwCc6mpfGX8q5r1vaFXYS83607P3vpUkP97Hnfo2NJ+4Kd9xF+QnBoD2Z5KCRL+IxG7DEIp5g1T+hDTPuFDLutCyUx9+Qk60gf8Q/ZKeycehF5eVQhcA2E/aURixtaxuDI8WtAZm324BNjorASCxxRm18MQ2hZNg+qZl5Bckry+HKcL0jyhWoD7/PHah9KssqpmsnHScx+TUuxHNzkyzTmCMPQSx4hxqK+jN+YS1RNELw4MjAHaPb16UynDn7j3yGF65cX3Llmrp/85+dG7vgf0sm7/6/t982Sbm6IhMW096+93XW1FR2bxtW2u4jmRRxAhmE5PTHcydiR/9+KcyFbB1hKdLBWTNOruw1rBhE7zx95ixIOrb3/pNiumll77gm6FKkUmIJg3JZqcsEtzMupN/WJvk3PrQwkn6NqNGheLSMrgdGhlrj85rctvbJoI95HCI08dGV8Rjvz7sEdarObkZSMk8DSux5ZUn/YNgqK0OhmNNZQ0hd3KUOsCN9omId2pG+gyjdSFYEgZiXknJDyKKOhrBaTBJcSAlIhIAjBgEJ1pgwLZi9J3y8I/QsfahcM12OMQbLWAGutg3mPKyU8eGB9FRiLDdAOMtKy2jQdw5YlpCR7Blb2sODeaGZbk3uhCWalYAvMnDdmonVPZ0xssMSkEBPEnfwcnjB48ATBtgP7jygSJMaNqIwYtBUoYk3opuUFcgktwlMTloqoq1sakLPEICEhJKgIoDDb+gqEB6MlyUkJgmGIAgWxWZ2o0ddXQB83BpdFEjKfKZQb7MksIMYMDFJACz1S5TBCKacmrrqiFTXUoQ0t5+820I0RpF7CqqHTv2MDuKi8pgUlZ+QIrpdMjIsnlmeuHM+7Je1AiwYSubC9kEMKMuVxwI9WsKj0kjAbb5zMDNvqhQGhL+nNCaQZ0/fx5DAgbMCmvKVGJ1KUMRP66pa35uygXNwt+VyXXPWmqqo9sxbnEsaaWXBV85C8aMLioqfPPNX9S7nWvjRjfX4EBnQzFeZC0FFTEedj9mLWyCCyA5jNQJEktZL6EOShGWQQIVESZn7ZCIAKQspWa3iVcmwcXkCBuPLevMj1tVdeE2HOID+bCE/4dlPkwcE1Uih5XUUV/+ja9w9Xlv/SOLgCg5mwxIJm7OiMx2gZmjXLqAocE+On8WzACmJIlbhMwZ3ALnGExO8LVVscgTx46d2LRpi/32/9f/9l8eP+7SlMk7P6/IboBwF2hxbI7nAlQ2dsiyNyZ7Ll6x41YXQDWj6xELAR4a9BgYLL8QxdGFAqFt/MTQOXPmjGUPGbThY3XKmKNBWZnNzY2skJSUdKpG8AsRILBXrn7KJ/z227+w2SgSEo0ggWnFaQIGWDWpc16ghYXrBx9YFVTgCsBIUO7gjUXLwsKspmzHkTjK3KQBHijSiBwhn37+SVauzMvBxcDcZBzI4REkIiEBm/3e73+PnXH1ali7vvP2ew6Ug58yJ9SaIp5mehkFPOM3LsAtTc2kj7CjERblm7x+7fbiwrC7DtjuLriwJINbQYHKW13753Qv5mFpubwCt3R2h8U5bsfP2AYPi+VQ2EF2jI1wqqM+KoOQw5V8xej1jcS0E2uMDlE9Ny9nbHz0xMnjFz+5JNmazSsF6D3qhR6enZt04JUXjmhrmbn24YcfwqEytil0Db0KX/r0omfaz7goQ+iHc7aUMcIhozBREoTE1YXF2aPHDrW1PjTZoawkOQTTB61VBxXvuIq4Aj41YkZjVe/evbO4KJxSwzk+5B1rAQ/+1SUUlAxUIB+Eoxd4unt6tQNmR7E2bGjgoY8iKsPhSRjga3CkQaRzUBQpnnOxq1ufZO2ENGYc5FCJuqBswW+wWBcwsOqolx0IITSwp5gWsBaawiSimwoNAYRUCl8Gt74CftXspUuX4AeNoIgOhCVjAQ9iGS+wlaScqUoFYp5BO2UKikqMBVR6NBEQXjsABi7Iyuett96CjcamJgwmzCY//7tWI8LSvv71b9pitVh6/ec/tZa+evXzffv2srP14s+//du/5VlwG6rJxXkDp99BqFMueduAAszOfvTR4vKSJZZ1tWzGAJscGzXAv/mbv7HgNDEhHy0BDBrYCRaqFR6sMaztDQ0ejEJ5GPMn4mJFCCQCkKYjtdjiYTETgv2G/Wmw8AwzqGn5nZaUKNr2k4/vyODnuJ31iWwZ2iSY8j4Xl1fOLUnqVQpdVg4Rj1VZ87gHABtY7RtXrBg7O62OLOcucazoAgKxGW2DSbRZHc7HB2e8Mt579tm+bYfpDFGKKJGl5b7ewTSJ/9LSuXNQWUXJfzC2WZBYUagJyUl9QwOiDVXR7/j4giin/qGlzDQWbMKU0IQEWacty+tpNqTEq04Uk2IQahA+QQXVuuaTQnFktfqKeQB+aODE+io+nuCNRicPvgNnRNfgYVOf+KUCcKRRms50RZ8y66EeGaAY6+MVo/XGg48ulVdGNzEKYpUBUz5aA2JcXTEN6hcHR2p61oNe9KtZhbWml19/e/h1m/HqmdI3eK3xeQAYujVoetOIgahrfH4FHqisFPWoC39qyrOuVYFBUBkgwus3fq+AiE8wRJgIYUsoYTgAwKBeKq8uztAXeWNn5GbnTU0F20LXVJgHg4JSv+IqDWpcdZ/QhbWH+7pycvgDIu0268IG8LC4zGEcqOoyGqgM6OILpJKcLtKvWci4EM1AXPfsWwQpjAlhNy5LX28ooxDeszpnwWf+1nXSWkCdOBWtDYRs4pVGJEaCV9s+LDTmF+ZML00VFBdMjof7wxkhuLCyogzepsemqOnmTU2wNDQwzHZ1/JG5IFTgpZdeeubU0xb39+7cvnr9mqzhk9NT5hbHMPnhP7t8mTfsxMmT83NzGG5+Zk5WUBIrBYrj7WKJDES+2+HBAf57G2IkwuJkS+Mme+K8Vq+/8db2Hbs40DhHNzdskMeGgUMpwL84kOraeuvac+c/dlwpNz/fzuKZcx9Nz8wdOHTIkr2z54mshRnp2Tn5BQ48N23Zxs/a3tk9MOhq7gKFLbaedD4SMGOlDT94EL2sOkmI/0SLxOSsMKkJvpoyWINy7Rr1wfSnfCvLK00n2EPSIQwQYnlzs43IsWZ3T8sHpcWcTEniM8kI/YgvUdB4iSirCCaFsOoLRwVsOrGdlSVoF6ugIWoqiRnQiN3jQ3/R1GiJHLgo6IuVxfystPnpCX+iuoxuzEfUxD9Cn2xciKrnKq6vrcYPhklr0yz2MUSyxhMhRal3TnFM2LS1WeNIY13tT/3akUxPShELi1dRn2omHWBQhUIx/WMkxcgOucCWNkftaJmflGH0o5GK4LQEM2dDqfeMWvDjw8CiSyuNm5pnpqZ5H0+dOilz+dWrV6CdNjd87E21yMRCgHCC44ODw0NZOVnjU5OsWNpt+/bdumhrfQSrAEYmSz4SY8Kw0fFb3/5NkMSmDJRK8uA5cv8nO9TIRDZPiN7G5wjBBiKtbGU5/e+13DYcMxMvPvjNi8poMybH6dOnNUvkDef61evS2O3dtXfb9maYUUUcAkQhZXV1FYTol7sOR0Ubmysyusg5AY0MNUEXlh+Odfb2BbMAAIY8MY2+OSYoUzYq1DdsXFlez8oNGQaPHTsCBqc1jh4+3NnZsW/ffspBLmf7724qoIrGRsZ37NopBN+uGpuY1FsACInhLePvgSJotAEiTGXPnn2yENIPj9ofrq0v9fSHG6+4zSyVMTnku95kwsUZs+4L26zWYtgVDtmvs3Pzjx47ceHShYzMtO9//29eeNG5iyFO7i1bGnlMlRdAjzc62rswPIrIX1VeViOKTE53LkwhgqKtHKHRFCWwd+8+tiyWQ2I6hBcoxB1lpn744QcgZ9qSKZxDAeIlSDtwcL8lJU0uRp/BGsuUKxFMfJHLNsTsMnegFLp4qLTAukUmmQBoV+ARq9179/EsUkSMPEeZzYjYidG2d/8+bld44K2nskRthYVWYWHf8GBuXt49eZkaNtGzWrZkFTTsJnVOvvysXLb+0cPH8CGhxthhS2p8XN1jxw7duSWBZqdJih/O1gGzADyAzMsphFAr9GeefWYtcfHK9aupqWm2K/npmRr2o4DRcu8+JqyuqWLzOXxibaA75kU80Vhj4BkYg2QrJUNjM2Fjx5xwETCgi8bAVHm5RfgQKhzvASFHoNnEqPGql9FucMh0XpBfdPr0c+HXmcn3fvWOta52ZNskvC+++CL03rp159ixY/QnPak8dgJqQFe0F+Gl2CfTvU4dwolRwbJk9rGZBBo5j8Gsxxt2Sx4+bGPLutYaDDQWUXJfuPnOVozh0KvOz5Dlnu4nYLApRGkQKG+MHcyYmRWoL2P8oz/6IyrIyuGb3/ymPRnDORFu2zgHA6jAMmM1ChYnkiiujEMOlBV3LD1g4ghe/+Fh6dGsl5TXuDYxCWXlmJDxQiytCwxcZ2hCLFyYhY79A70sHczG0SCnNq8TdQobWB22rSEhR2Qjl9nrr7+BIaHr4MGDkhzApHnWWECEE8iRb5tUBq4LEj06MgGTMENeqNbYwe89MYEoGsnenZ9wHcbGw5Z7ytClZgpUMFITCk6gzeh2igsFzQ5QhGF6ujsdNNrYEFLag2TDpkZojBc5rlIx6meffw7kOMo3xJoru7p7rRMss32slo8ePaJ9MwvZoqitwB2IP3NGvuAG5+4kZysp5oyfZzbwcPOXMT3sJIem2tu5aRo2brA/L1DWR3zRpob6ytKy4SHH0EPoFKE2Rl1DNSogN9iQxhCMiCqW5ti2JKNWawaLOtDCpg/e9AnHDCeDSObnI7oha+TgwcOtbY/27DtQU1XV2dl+6eIFNJqfDlO5DEXLiwtPesLhnO3NW2iYnu5uMeWlVXXDcnFGISHMOQjHMChOFvS1bdsOeAAMlqB4cYtoZ9TcvWsPtHAiII2wdNOZlFjKCJAwy9TU1RqXCW3vnn3yhUiNtbC8wmYQp8DHLxk6baCAFoqLCtFxcnTEXmV5SanEgAlpGdt37LT+hARjpH8Uhk/YwAAwgGntdIETKekxiRyEDwHJuFCZxJEF6giT+FMtCyEt6AW/CahOfOrQflrb6h+NrT6TUlOs3oBlkMrpQ1GtKA0+Q8LKqOUlHHlQQAdKogcQg8qO/NMI4MEbXfpJdX969lEXZ2vKBwdDqFq6M1kqYwUfl/enX1XUu2cy4PvXTRmh91pLzwgnITToExnk4VCylpnCWAG9sQVFCULAmDPYRgBWQIOqGBR4tAaGeLxGpEFibIC6ELuiPfaueVQ4su1aznU61OqQY56GtdxAWjY5SFkYdBCW5SHmXiEATsyMjYzxPNhZdzIABvGpRZJVoWcuevRzk44e7TdABRcp6w54uoPqvHxRX+HAu4Hr2ogWZkM4nQ8eAj8IeYw4ko3XuCAQDA61/jMSkhOyXH6VluwgljVDWAglh90Mz+xpe7XGPjU15tovizLb966NmJyTUKwJu5SWBCe6EzMN9fUmIVaa65n4uqRBcDGT4YeYe5fSlRbzWxNd85z1Om8WztMFlycXC/JphClvFSt9p/kvJTH13t375gYK1ykF+4byDxi10INwW7GQbtw4Mux+X6G6zL7Kitqf/vT1vXt3WwPYA/3yl15Vt/Nxe8OmjajJcSu3gIPIZNXRVcsix5E7WGzSDhaV9g0O3bp5p6aufmJqtrCorKiweH5xRdZRcS7MR0m4HMEc6nsirx/fJGSiOGct4GEbZuDWoknotmGaGo3FfmUVp2mUaNm5HzHyDAsSjlsCa0hPsbzULeZkfY3M0+kIl5ORDSGO/lCXVh0xy6GO/QGcFrOZAJL5RSE34RY2OcjCRFJaSulgJI1QhXaHQWVFhVvYZ5wBNCN9tL7ixMZwZYXMhg3Y22YCJuGecfCg5f5ditIKB9hSD5gYaMDBgT6iLC4ZzMUlJbvcoiJ9tdjNpBAUp2X8g/ewtHHdvd+C0HWVtbnR/j6+QjI8SehATl+bQbmjGCWC5lnAMvAIHNKOuniJR8ERK4kFoIWCBp66PK+oRq6hGoGsay18Dh88ZGoxg/7d3/+ANhcVTRghYXQ0uHVpSRnw+E7ARmmurq+OT42TweqqGm5j0i37B88ThJBiOGHGad+WMUti46YNsEFLwmGwL8cnJTOxEmts3CKmyHCoXbM4VQ5s8x8zzl0OgKFnNQV1Yij1S70qLMIqUCG6b5sJJdz2pz/9WV5WHl7C+bSEfrkwIUoxBpnge0rZVvWDey0Iqh33+PKDtrW17t+7v+3RY6Eg7tK+deu2ucoeFK4TA6aYI2IiUpgs3rfcb5OtL97EZyQZL8cV2GRnAPPhg0cAb63Lv8vXCA8LK8u4yMQ2ODwgdJFzwIaafUGRuO6tw7rlAnoqaySgyEzPKi0vabl/u7Wthf6xgIwMoIGjx44YPuy5+ErLrFISSeGUlpbJrxWov7JsVWNhefDoQWmy//pv/mrfvj2WSSaEWGref/d9R0tZRUODw3OLK7t37W1v74Bq129Bo3z/Dm/cvnU3qL7JYAso/JUvv2Y4D1rucsJxm4sgIjX4EE9qdl5A2mrwE9GNkXMkh9mBWFBE87AGGCJQrSnZYNEaTuwWRgLI/RF8QCa/nTt2bd8RLnawSKNIhabRwFPT0wZr1bp9x1YSYZsFy5l9KR6t9fX1nn7hees9DFlYWMTxQYMJGzDV7tm1+1HbI6R3gSg+oSEvfXLx+vWbCmBFXCdCwyLc3oiYN9Rn1rCqn3T3AIwrVFgI6yH4KdcX8TPXvpMq6kIaPz1O6OvtNzc5XY2j7FSwWUkE7Nk7IikCfmDDkF3U/ru/+7vMO2IbxWixdKt4JYM7dss2fGj9FlkJwfckCh+o8cocTij5I0eOYVrH38kOFYoHLMKjRcKU6M2rV67U1oWUMtiPHY8TTJpsET5osow5T59++vvf/1u9YEhoBKph2q1Ca1JAKBTGMOA0LsPxUjSXMr/3u9/lJTnz/nsuVpfa4c69O3t2797S3Hzj+nV+rC+8/PLf/t3fCWAFFSMeZogb3sYSGMwpfGMAPPVoaJYWzCwHmRwgFuHz+afOGScwBBlJUATb7GnmKZzANksI5AiqQYfgUWfjhnqqbG5+nvhbkJ85+yGECKitq6k3KwEev42PjDJ5ZcFGhY7ObouHsIN652Zz8xbTKDY29zlWpKKPHr/97e/wKFF0VBPLweIKUzVvbdI7XhW9w4i3Pven0/C0JSWzadNG/AAqLN3T84RuoUDkPNC4TRfDBLwRoTK2hGorqKBmyU/oMUR106gAI7bkCKdRI5xBMKYY6uAQio5DoqZKnmLXC9TjIs0K53NIVw5cpzLYkY872pmwIvRgAwCO3pVXVDdv2yFnq3awkOkjNTXFNUFa8ww53HZ6h+SnnjopImFj/UbsJG7MNG3HzEwnmbghxOSz546gv3zrLXMTy8pBQSK/e9cOaz9rOTBbpRgF8YzVrEkQL5E+Mw58bt+x4+z5j4FhsP7EDAiESQgUmvogrp8IIzxrAb8Vl9j2T2+5e09EqFV95+MQ2Lkmmis9wzzockzBctwlg/0DYctCLgGWV0oqdWG8WsM5SAnzRFgBFhS2x3jgMaXqkWFjLLQQErPE0IIfjYthw8bNmBCo/+2//f9ELbr64N6du1KWkwU5QwkyE5AGExDBF6M16/+B4aEdW7cpIKIBHfnX2js7GzZuYj2SVrYE4wRmTLi0Ii1nXOjLhEALWg4nsOLS05JEqAokY0tJaWiTlswqrCSEkEfl8QM46XwrpRQ2Aac4VYic4hAS/U84ciq33yT/n7Qp+Inxa74xmMzMLOoAAtEV9r3xrS0CiUi+vfdRwJ8ogV/9CfrIwE30jGA+3vtVXd+qGz/a6yh6KeBHkExYDNiK8kZd872W6DJj1ovq0SckL1peXcgrCOPRSPJqUmpiCvm34DDfO1g5Oj4BSPHZ/OzacT5at1JVBB5g1YfDGCH6aGVtWS4m0+TSHAsyOTslTJng4bqDrEjwbOfZ8QhvgrNtjBM07FFQPZxSBsi2i2JMLeIza+prmHSpGVYXLs1aBx67kJPjcUcH/7ebJbMzMheWl/jbIISmZuXTH5YQeA7LRu9DkIDdgGl3f0bnNamGkEM8Nat/dIDd6dIfsUIIAP61xDUh5Pnsv7k0zj74YXkYLF7hZuh98rixevMAZ3l1JaIBvr9vgIpHIBdbBjbKzJh1G5D47PQwqRSmZEyMLqQl582Mm1EmrCa6O0dnp+9v3Niwup42v5zY3hGiSB3aeND+mDYwL4owu3bzVkTYxezcECqnFvPx8tUrew/uzS8r7BsdEAbHV9rQtPmf/uFns9PzIyPj5nUXhXR1PxFWz+vpSmLGdk1VWUZ5yTMnDt+6dVMeGKGzbXdbfvubv2m7n+U01NdrcjXBMD6srDLd3JuSvri69qiz65VXXv3Vr84Ul5YLU5DbhhaOJr/A+tgM8BCDBBcvfep4X219A6sUvSwGIXl7ncBBk30f+cEXdiEoHdUl1QjBu46vRZYiIcfv3PkyVZMC643LV65qJzUzyz9iY/kh85NVCZ5ZW14TC20Om17AXMsCfCzwbCNoFr/hW4RDIzyGOwVXOBGFjJNz7ooqKyouHrEPG0yfcIBsu+vrozOg0MXKXJifHurvcsMofHZ3tVeU5jXUlu3a3kgh0kH2n5MSCx7IoeFWwrt3hTfQDjn5eX2DA2mZWeGikPmZR61tlm3l4oSKi6zBElZXKB08/LD1ARVpypEbFG/jXr/xsDoLiJecAy0pLa+sqsalN29dkm/4xz/5GWYTNWET+8Inl9R4+eWX2h8/5P9zZ83tO3d2b991/cYNuyVX164W5BYND4yKGKPassIGVdL1a3eef/b0p5c+4R8XkfOkr1cOadYp5COHs9P5BSXNWzNlC3TSXwHqktfNQeeS8iIBCc5o+mf3f8uWTTZsKDE+bIscetkEQF4wpMuer3R+WlZW+rh9ynqjtnbDb/7mN3mgeb+uXvs8+FAT14aGc+psg5aVAfuzzy/PL4doPaaM2/4G+zvHpmZFoz3uEJ825XZp3w41uEaC+Q5jZgWxGVQT3NqbQlMX0n3n2982qQiVuXfvrgmMxbBhc9j9MKiFpZX0zOy9+w/BoeztLffvb93BhZAq99OipPv5RbSBNu/cvqm8iZnZDVQDZ9mYj+luXhbYJnRcnCYkExX25py+23KroCiX4nTgzOXvtYl1dx/cHxsZoqYrysq+9o1vzOLLubmJyZ7isoTRsYn2rk6ZNyi9lfnl1LWUvqGxJLtFW4Q6PGaIcBncvX+3uqLakaKunvbiwpLEGbo6kS/Cjh2ZGh0eKSjMlT/nwb1RDCDPBt4zWVrCl5flvfjcK6JWrn16izvJBvfY8GjC6poA7bEomvZJd6ezd44T7dqxjW2Xm51xcP+eyYkhPOb4TF93u+EzdnMy0+TVra2pEAIDTgcMnKWR56qisq66tsYa6fZ5kc1SbE+7a2dqfGpTw6aTx06+9+772jly8IiWT504aaFLo1JrddVVzBrXYGtBZp0tjfUff3LJTqnbzQsLXOddKDztUmvrrl07IkvF3kBPEO2UpIctd6pKrSHnc9MzVvLyezu7TQH5uYWP2zrEnoUEbslJH1/8pKS89PDRw5Zb46P8TRWESBJxCxipN2qiexjGJqaEcpmYWQ/EfWRseN+BvWx9vjdkPXa0qKysCtHNLAKQsC6bialRkVxpEfXKF2Tz/HxiPES7uVowNcUF0gIeyvHbhx98/OmnV6QstqBNTrpvidXW2pWelvW97/4RU5tm7n7SMeZc4sToa6+9RujOnTsnPNrZJzqqtKzi4aN29kF6+qoZqrDYwqfg/t17Bs/Lw8hyYNFxLwvU06dPcyzAP8vDgQpehsqq0satG85+fGZmdgzGrBAsLC2e/eRDZ5rkbbIRMWwf7Xaabg0riIwZF9nCCZPySrlRjh0/dfHy53PzSyPj441NWxIldE5P/9o3vyEhjHaY5vZFf+O114invXJs5uQWQ9xZJYvYsIJaXZK8xV64HApcJSF9Q3Lq5c8umbWZUAgnm5A0CQf3HyCwdm/efvMdmryirNLQbBM97uo+cvIpwcS8SJ/fbRmZX55cWKurqNh14pn29kcufrxx/coaq0p+5+mpkoryhx3dL7/6RYFQ+w4cev75Zx+0Bs6vqhRO7czMcp4jI6npd1seiLXLyM5R5u7t2xYSu/fsRCwzF6VqscoOi7YElwwEP7DmTQROa9gbuXrtMxjjjIK9KDho0tFqt6QVFpTyx9r6E+5v81CqA5SwZpNTYMe2nZYQLLzenicu6xTCt3HDKxYJN28Ez4isA5s28bx/7//x//y/uzrdewbr3Xv3X3r5FVMGR9Xjh49cAkCo33v/VyxpHmKbqGfO/Aryv/GNr312+Tp4Tp44dfnzT2l7Sya20/i18Td/eWFLc9hTtUFntXDi+FPMTXbeYsnMzXufGxRCN23cQGHu37cHV8tqwL5gxf7wH/+nzBmMBLPqquOCycnmjn37Dz5uF8G/My+/0CQ1MjqemZUzMTkt+he0uEsX5BqWXnj+C24bpD8rymvZ32au4oaKa1clfqj4xte/jUlob2McHpoYHZHEuS4jdWLr/r0dDx+c/eA9IxKHifNrajYImLQMu7vKsNnQOzQ6NT2Hfg35BeMDI/7BxoH9h8wClkkE3LAMgUDBOaSBnLUAUcYoht91yKsJqxs2b5ChjlnV/cEZW7/mwdYHAauM6pZ7d1iP7JyHrS0i1szpJKG3d5g4nz5+iPJcWVnFfjIM9rn0Opk5mpCRk9va3mm3nE8taTacyHUpCScvJexfS8s9PGM2hBPyS67pEAxG0TlW5P7R5ZXVmYkpzmiikZE2u7TUqwWbGFkZ2ZQ5U19hNurxo8cStzdUgYYlyihhMceGtUnFjBsdiwx+KbsF+kB+HUSrLzNyWIT5aMhHdWzx64f4T98+akVthpWAAlr2UREe/aQd71lFccm4MD2ojIH51bOPitqPy6vrPWh9wDUxPUrmvYwKBoNekIzqLF3EYLKHlqMLwvQiqYIdBmpIYe+1Y0Tqeta+B7TBUjryJwBgxhUNKnpQ2E++Pfv4FU4pONMzLteOB44faTsYIoasNXzjQS2Ma4+FwWcxZl4BJIKp7o2IdwXCGkzS+rEx3Ak8dYkWMJZXQoQV8HBSoHRCos01bS6F+J519IrXAM7uqGjUXlLTRsG9jMUxnYtlG+rqeAoox4RE9F23taqAs6oBY2ETI2QjhUkWalSd/zs17oWZy+lo34Fan5oKe52MEouKAMBy2CGRVlIKItOkQDZTCNPZnG2w03PTHPmj46NcEb0DvVwOWkavwsLS0QFJNZZC3G24f7SQnNTUVjZu2lhcmD8xPoYz2cp0OoFnLuzZs/eNH7/59NOnlRSjbDKQTlXMZVdP90fnLxx/6uTQ4FhBYTFbjQKyPX3r9l07gWZ9Rh4mc1E2+0ywXf2Gjbbe3L9r9ULnMtd4/nAIsOXHEnJHYdEpQVyjC6cNzTTGlPQnyIkZuqMXisieifpUgJe+aQQV4y0aJIOCgNvoE9jGEnNBlHMgFnh8R2wWNsQwJ8paByrG+4J21JM0QDQF5agRwEhc6kH6I1ORaXfzxobAwzPTn356rbmp3jS2ujS3b3dTTXUFkPjVFGbuq467KEc+GCGqWg56anXVrCMNqzR80oMiqCrGaKT3H9xDaHssnGp5eSFbhQ1ucbF+PXv2bFVlvWgNkDPcYRhCMK05j/Wpha1bt8EMO1VhD7T8poYNlnPiwcw9jFeGdVZ2rhDS3t4+qtw5DWg0pYVxpaR8+ctfvHblM9fDAYMtS1rh07My5IUlaraj0N988y0YRY4r165k5WawOPnz4PyrX/26wk5equWWWbgVFcZ5RjmiDorfvHUlITGcBmOOCADu7xu295WTnW+FMDAwhAT0uPAVWo2xJWHRz9/4RWZuUUZmtsHKJnn71i3G0KO2hxy9pcWFhiySWy0g/fCHP5Rn6ejRYwLJeEJMOchhgSctT1V5SHXH4Yfhf/6zn4EWHiDQUpLsGxqJY3lwotMPdhuiLBCJvOB2BGVo2b9/ry0vhw6F0ooOdqDQ0RroxV0o+Ktf/Qoq+FZNlsbIrcXbTfYJml/vtrQ0Nm2rrKn+/ve/jy1RCmWRkvEXqe4QpUnJ4DQeMlzBXq+tKOe67hvodWxd7B9LUUad2pBZJSix5YXl2po6p31g2PF28S2lxY48FF+7ca31kZ36yvbOxzv37iJxOrIAyJIEsKQsLzPXDqEgIuanlE0yCkCagRsjuoPf9/FjJ+EczHgJNqhEn/Kykoaqqls3rumdyVNTXyfE4m7LPUaGVIN8k0Uhq8zk8OgQGIxCbMlAz8DePftxIPWL2awcdEQMUdZL8oIrCIW6b7/9Nn9YW2uLMqCVecEdBRR475N+lwEr2fqwzZ/2+Gwi2WjCzzasUBnPC8sxru6uXn6fjRsaSVbwrtXUKOPQM7G2t6P3sqKykaEROtZCTu/4ykC+8IUvkJS2h6045NKlT5AAS/C9YULsKiJLeTsb8GB6ghzsakLhmAK2TUsR2BxhttdwbFlZeXZWPuCpZZH65eVlwccUcmjW0HjR6rFMSdflbW3epllOk47u1qYtmyxECYUeYxYKdmG0j4dFtQal5Eg7QqJp9vm5mT1791MdI8MhrOJJf7+KMMPsQAVnZC2ee/VeJSN0ZThAubxsPwdHbdu203i3bd3FGLX+oVSZGkZBt0D+gYP7rNYkZXaHt4U3ISJljDBDMHayg6CkBm4F4aIvp/uzp5//u+//gJrdvn2HK2vff/+MxTx3CTWFOMIFCTVvBb9kVVWl7Cw5QiCmZ9xxSVcQSY5KO8zWAIbvphpoZzHbqrLvQZqMyGn7G7dvFJQUb93OtfxJYmrGiZOnyhsaWlvuuwIP+ToePty4ofbP/9v/p+tx22tfeoUunZtZlDXY7MZ/b75lK09MjkMdToAliUot6pAVM//ud38P5P1uquvvJyD0qkgwByoUNrv97Gc/ARUM+NN8F8YeFGbrzOwEhOzdux+DuWx6jvG2tCKIqKlpi3a4lvft26trZwVV5wyuKCunHCAQqqkpitFZL8CE89NhMRTyFAfGLC7gWefMdrMsdlIAw1MLtAewrVcRCxc5MgF1ZhDcS4EInrl5q6X14WOFbeoSHPKB3I6KYCS7vsrgHxtBRmFivXL500GZD/NyIUoXNiDxuR0/vnAKwc4bBsBRtpJ09x//439seXBP+l0uVADAGAVCpxEQmkcUTWQwFKqrd3JhOHZux4NbLdwd5iUM6N1EQOQtriAZZihDu3xmQG9S5UNcnP300seHj4ZdTTpQ+0UlQXVgPw3yj5h3TJ36ApgtODEFbH260YgUgA360xZcsHlQItInoIUECzldM3he/MLLtA0J0qk5nZ0NOTryRtYEckES4VaDnZ2Pa+sqq2oq796+47xZJkMkK8c5Lt726ZmFjp6eqel55zSbd+xUSDIc2/+yFHKMMB/0CAkacVG9mZH+94a1A8+A9JMHY9eWY5wQQoeAGTKlH2DdUYMB/siO9dIcjSFNwSmWRKglhQxlJ+dolF0zKM3g3E8Ptm/YVkgPp1V0oEUQqOVZGd0AIn4Jgx6UV0CDyKmAj8Lxn977QIqPBy34eFZLMd8+qnvjO56uvEdgTRFXz156VtcDeLQMWs+qEHWrKGXiNr35F4BDWP9K0gpvO3b0q7mHrx3kmgKzD/BU1Bp6R01BQsCAj77MoZDrjSrKoLEG4zcKa8S3Zj34Vp5MsuBxmDkv8riH8ur61Siod2U04lsBL1mH/mQKhGeiHxDOQxxyPgZg1kOeJd35qCJ6ibZQUncwn7i26uBpgH9l1QZljBN0y07PSMrMkuTeIbzM9NwQKRNuwxl0OJgNp2XfmVlc47NOoYJW5DQW0T4AEtdTkEE+weV5iyXHkRemQ1LI+WArC5opKYEn8auyuSGN7e/MVIFY8mym8/372HxxD8DqesLOXXuGx4ZtwqWMDOfnF+fkZdOGrLTE1QyHtmywQcqym+HT00zAXR2dwSpKS1laXKitqrQg2bpt1/zC8i/ffJfCGh4Zr6mta2wOad3u3Htw8uTx5BTpxtfbHnbs3XOAJzWpf/BB6+OdO3edPv2saJNgXKaGJHSQCVcmOONCXFoDzpkdy2tm3DmcA3WoIzw3ePuiPxHOB6HNQ6hGinzDnpKahfaRoUH6kYKAGX9G00zY2lYMApEsqJX1dVW0TBSdGbAIcxBIYQjGJXhrUYB+YYHRrs57XBIyJEMR61/XmnXLmmPbyLQwH5hf7maJ4jY2NDAKKd7mpsbdO5s2bain7BpqKhfmxrdtadadrGExK7paC+H279lLiVNV165du3XdLLum8a2nTq6EPe0ZOs6I1GI2CQxQDGo1CEa1tjRtpVupUWtp8WgY0pqdqiKhtsshyse8rrvm5q0UnOGzNbVv7EbNEJHlDeYJFzQWFK6Y8EzbxoIEtC1DUHwtdlWY8TcQXe6rrhgVLkkVzc0TbKCkpI8/+YTZ5IJV7QvLM98vrS7aurHzZjoU0U6x0npkQbAEkGCe4vngg/exopEht7BRpjas5uYU+BWZkhIDouhQo2BIgZaHkgaXfvTb3/52lwPs/YO8wvKE9nb3HD96hOtaQM6bv/glurMjTV3S0R7Ytxd3MVMMJ04iJNTYRPiv/tW/+uXP3wCsqdTMakrWNTBA6Bm2dQQtu3fVKlNYYMgrxUX5Ap0tS8QkiPyGInuRX//6NzHLp5c/C5N3xJxYEVsKRjLfM85Mb7rwgUbNYk5TDiNvZTVxqH9ge/NWiggFf+fb39GCUC6rO1wB/gvnzyM3YbS7S/8WZueiO0egpWrXk86ZOUwxT/+w9YNuX1yprrIBnOi8ZnJJqk6vXbnGzXb85PHJmXDMWtCg2c7cb/ZF64aaes/rS2twYoDOZOfkh+AEYCvgHC1QsUF8p7ig2zzZMxsa7GCYjz/++GOxFsuz0ydOHH/S36cX1gNbnFyEEzgr4ZD36v3gpplbmEU7upEm5+UVrwpoeAhSEB1aQ30TJG+3IUOLBRjU2UWR+SdE7km/WFWDCWur6ziSMzNySytC8Dc8gznWwNwQctGYJseSbXIWurahrKh0bGhc7MSzz5y2vWDZuWfXLkL6y1++wSYTTDjY188hkprkaqRgE7Mn0B2KjBchGPeOTQMGnALniAxOsMZzUQl7iIsEzzNdFZbCiyXEo+yNpbq9ZSpXLBYPGw7s6uxBBaFKtApkKowJTeL2DZT0zP5w8CAs17NzCQX+XAkiEzbQsChCxPqN6OEoQ6MZfONVKOItFmcofszyiGE0OhLOsEE12mmB8ufvRAW8VFjohEk/34GwKn/yTRJDrIsZSkvCXVpra2FZ7joH4owxSJlicTT8o4ft5z8+F7sY0Mskbp0vrIhugX/SwS4wdj1SSmbXrq5umtUbiLK4iw7um46XKVUzbGpqmmXzhg0bKSh311AR3IwSR4lSZW7a9jI6y2NGuV1oHxab6DgLXWPBHiavvifdqCnw49Szz/dZ8QuxcOZngOLKc6pqdnr8xeee/9+uXrEAk2DG+QT+ePHulAnbAOH6B/qIJPBgyUUQjqvW1YUjmPADpfEcRGDhEyoQPQARLcLxAD6h92wXKwlLdOm+/WH5JFUxsyUrk0dpxngt6vAwXCE9SXc6aGSEeAb3AQ0mDMlaxZJAZE5ff4hdtKzq6EiKbSdGJJVOlLhU6OHNjc22ygHMmicvoAIGaxsqqHc+DgJFxKgIVi/H6fXrN4itNl22/oMf/ACfANjpwSOHDolgPbhvvz3DsWEnKYZl4bMp7TgfNyTTyUIMwKxtKQxy8/McxhPcZSYR+WPdtXV78//4y7/gfCGqq6v5JmvrHyorMGF0z6aOMJ5pyOYGlPoJ0kIMbXrm4BAM9Svw9DNPqcjVVVBYKrFEeUVpnIhM8i4VMeq+3bv7+yY4EJ06sHiIkYz9DNYoWALFZaWR45rtziPMGAjGGKHG6mYTyyqzJ4akTMgszQY2Mz7kUInQS5bHJ8eEFXV2Wo2HldiUxdzCQm2UYwpipQune2G1d20VH2IGKyg3YAhHZoM5tynFAi/tUs6S+8/7+0YaNlRz44vKwVf7Dx7StUsypQcEcKrpNDUEVKdbVG/a0NbaagiUDLZxo7i+cKDZMByyybBbn+k4SjDnouBemGS/4UkffMsXSS5ssIAnXERK3uidYH//yypHGVtZbDILOc96xmfsAN3Hho6acEFc/akbHOM7mn2Dga41CPLB8UoaBli914Vi3vgghjdxXRB78PFGFdD71Z+I4Y26BqBM/DICOFjAeucfSssMdnPUcGjBe0EcHixzAWDB4o1GfPto3D5JYmIgv1816BP/pFm9KOm9QRmdHv2lCvj96SdYVgzwqkOFuv5UXcW4weBrZNG7hza6PU0zMBMbRnLMg4ohZVBa0JT3HtxuCy3Ka8GDXzUY9wgSnhIAaMQHAFz+1lsIY3HtTzQAA6tTRfDAbMBSUrI77ezvqIZKUpXhydycpMmJ2SRjDeNL1vXY5ISW6VAtR4cRAvJ9bNYjURja4optK4Apz4XdO9TPNcDQt+j3Ul1jR4KSolK+ATtWIbOvqyUeW++uZrhWo7iob2Bwsas70Ei63NlZIcVWczmZKzXVDfjbZNbd08nRMj4s8CnbiWdpiWF3PTl1anrxz/78fzz33HOpadmNezaNTUyfu3DJ/F1cVjExM80tcvHS1f/T//n/2tHVgyf7+oelz9zcuKW+YTPQ9x84lJ6RRYYnpmecaRkYGmZZG7MrwYmoezrhXOZrE/PYuEioCetUBxsIjzdqwXyk7AJNTWa+vTF7EXXizZSMqek97akK8YN5FTWuZc8oqDsMAxj6SEw/AkEsxgioTwo7SEGJRwfLtBPILbYreoBSupKmI+qqZ2VmyAsyPTmxmhb2Xt1X4L0DHw71Pv/caZRqf9w2OtJbVJALyIiaaVrDWvQXxcriRCxqjopEApMHaBNWF2XJBAMVSYNTGawNYJMU3iBw2jY1UuMVl3z37r0nPe4urVZAy2pBBQz41fxhgrcpiFUoaLO1X48ePVJeUvwnf/InsrJS3PQmc5mdwezgpTMimiwgITmsHzQIAPezzc7OMbAKS0oFvzkPA41yIcKtKRySF5dX09PW5WmiMU0vo2NDJlGmgMnArAAwH6MzZNwIDKQEm5SIfu3r70lJbWTHUomKmQjtg9GMIPcxadEW6BVHUwCVFbh546bqSrdIPvnVu+8Ae25mShZLES/WIdYJBjs0MOCwO3JrATZiy9uvdDFoYVgZe8cfnj0DzsYo6pfZbV9CtLszke795bDh1pqZ2YZtTPlgvne3pf4LDY4pz9aHSYWp5A2LjRIGlVtsTB7oq+LRo0dJH6qpiLJsyu985zuMPCYmgUK48fHpB9EpOpM9VMCzAaqLqTSCvkxDD0AN6Bob++zCRbG/XEN2LzG7ibCiumZ6akY+Sh6ToZFJpz+bm7YKQZmpmWG0wS1D2WDdPEC0uVflZAz6Z9alCiPz0/ITLCUsB7dLCb91ZvBTOpCzdcsWtQrzCqX+kN4OGO7fgajqikrjFTYiIr86hIuMtz98IDYXerlLLebbOx9aY/BuGjU173iDfVPdyc168dKFgwcOw8mFjy+y9UWdITFUWM8gjahighz74XRtDtYRhJeFDIad0r+as72pqqjOFzKVnzc8MGQ9AFEMRHBy7lpRO/j0h//mD1kbLXdbhGS4bNFyXaAFokviiXn4TwSCP3Xy+N2WOwKaBVg/uC8ErkfLVLEPNgYSdLllBS2EqsMhaKGF1Qt7S0vLBIT8qsJZRw9wiKJsVVVIxcFus0igFTmwyV3YpE1YvX7j6ujoiAw2KCve102OGpQzyqglubBPi5QStlhaDw2XSS1qUBaBmAHPEDpgEFWkiSQxqCMAGKOf3D3Xu7jkGEZFRUisJH6Pyb6pqRFrceHb8HGamqFJbE2GwgVVMTTmtXuFtXb+/Cd0DhGgcPjQ9MsI882FSQRATuIetnfwbQMV4fA5TDIzPKAdsiqgHYoCPIGp5gSyijgqsf5xbbBvG9a5Ofl2Vjs7Hjj3IvIeEki0Z9p+pWJpbnL6kws/Nl4nT4gnToNGajBW79heecsS3xcunP/Wt77VNyi3cki5Kz677UGrsKgDJ06ODg51Pe4UszE0NZ2fl9Xc1Py//Os/fNzWIsWT7VDMCS2OqZi2CK9g3Zra4OiVUskihJo1CUDCmfc/hBk5QX08MCVNFADQF9XkDACsGjXGJgjGqwD2cjOJU09CXKX3ra1h7i/iYaf8raFgld/EnBJ5MOeleHGqmI9JlCbeQAsTFlXM5Q91mkVxo/aepDvkuGHDRqigFs6fv0DRwYx+vQGwBQOEUDjwhuXIHczYubJFVl9X29rWNjY6KmS0qbHRSMX9NjU3XrtyVaILlqihMf8bmzbdvH6DZ+RBS4uDZ/Yt8RXdRRixNN8/EnsDMPpHL3p/5ZUvknfXaxgXoovzoRUt++NFjjwfqpjL6HZypApWwR7WJCxms1t7+2OxuFY0UCp0yujExtgX6unptk3KEe42pjD8dRk+Z23+wANJ9PA4yiNklqENzD4eYA/L+TY7uFfeKRpdE0fLNiwUbVKFJArKI2s8xRAfMktLGOAvfvFz24MmFyID54WFy+SXnsR1DvpjdfKlXx93LFZWFdvg2rNnt5XVhvqNSGAs9PnmzRYOc9n5RVk52b02wdzwNTHCNpMUUUcelIQK4oZn/ClcT6dw4gPaJ7291p+MKN5osOkUwBQg1Dln4k18H5FBeY6NDbSQ3lKzXMZMc0tqqTW4n91S7IUDqcG0hRc2FtElcqxAkSqxYIMA4vxKvMEHMmBpV3NeorRvf/poRBkERnLfKsYSrnsfz6qDSUW1TBuaBaX30O1PP8VM4EGb2FSxuGvfCvCpkoEYVOqA20wach+p2PUbvbdrEWx6AOiRugkOlYxg92vQGw+6o4tJr58UE0cD4eAClRnRKDTlG1rjro0ijC06yqx0PKj4T1cxazZuU3UvDVB1B3q8xKAxQ6ONWohnRDFC/ApOdphhkdjQetRv9D54rIGqd1Fc3rPZoQqio7ODlnlJTKhVHvW1JccdkteT15bCSBFGdh/31BYV5S4uuN41Pd7bMFgvVbMesHYDlVWGxgETrgrmMgr3ErjRNhwsr64stwK0oCYhi0uiX8bAgbEMnL9fNiAXJDgVPDga3AAGZav38NFDTh1pwxGS3LwiwxRBJKtVYVG2IxhyufBC81YKERb6j4Sl5RUOjBYUl2XnFPDbSGKemSNrapX541NHPBubb925W1JRVVJWsmXbHifUDxw5+fm1O04s3b//4Nu//V1X3Pc50DA6wUC3ekZ9PENX2rL46es/t2Tv7OkGDLEEsT+ZOChisIbsvly7H5ZA0fp32QQhVQ4hRxQ8Q3fHq1/WC7QHs2l2zsEAusUusCmQCmZ6EuDAnItLDk3jT8hxoBm1MS2qCZeXcVSYVljCkwjLg5UVmbNQFrXdvGOChLeI4RdSl0JCXiaaX10OYEqml53NsTeyvCCrT768xVZ+YyODw4NDzgNsa2622pPCXOPANihj4Q6kdATIyqtN5Ht6xALR3ptsBHc9DlvzGjcBowIlRdz4umAsK6tJXza1+/r6YYZLxqx2YP8RnmlIQ30vIcToYuzBhl6kwyNGvJ4K00Q3r131kipUzDcV3D8wBCdG59sNWzQ737wWTFeGyWqcnJ5MkcUyM9NB1eKSUu5h7hDmljTJsC2KkZ9BMAxO7uh87EYdAi4SHTy7op2Bjul23iAzmR61aSo1KB5P0w0BBIx+ncMj0ZYeBm4CNkw2umzTMdqvX7+qjNNp5jB5Hlrv32OjFBXkra8uC6KW8HF1efH5Z08bHUW2acMGKWvNgsy++w/a3v/grJSaJm+rHfJqmNrhy2QJWT9Iwwa9Ina03x9dU2/uJ7kuDqMWIJA2sJjZscNMM8Qk9TKYSkEqzc1F4jAxszBmLKE1zWpNR2YyqwsGBC7ljcZ+aG0sH5w9a9/o2PHjjAAdeY/WMKNZ9MWK1ngoqE14gC4fOe/ZWELSzW1ix0uKy4VSwHNVVZ05rqSwzJE+h8UlmnJh8+effa5rU/jUTEgAzBYPBkTjZpbN5s1NVCUXuJEW5cp1nS08UUdf/uKXKCAnZ0wAdAiTXMijOz6tqdz+8SQ6+A7Ddwduu7DYFLh77x5XqppxwKz6yZMnEVrMD21DHmUT5irGVMIOGUbGYiBgMHzrWIMlpAZlMmbocODJg4lq5AKHwMDISMhQxDKQfQtIE2MODTdQdF0dXfRqXloyDb+8tsJ6NiKRgRTa1PhM+8PO0SEGUPWBvQeqamrlxN1Q3yBOwrwyMPPElTA3r1/tG+yzN8sXa5oX4YasTDELJPIIJJaEzViAgRzng8Q3VmHUus3a6VUTq/HGwSRWO+QiejlrXReiGROTneg1k2AYoaCPH7dpkMVvUhgfdwXBgIXIV77yJcWcAZBHhxWiQQsJHmJcQZDxJ7ZnYMUzC7wx8uBTp/SAZok2XpINYmh6wHvx9JCpMOvh1q0b584Fy4bpuTIcdsLDBBmF6YaV9vo6oeOx1k4QNFk+50MUgGI8OBK3q8hQxntbmhulf3BgVjFcxOAjni+99BLTwDo2jpuV0WvjpoZ41crWoVI6Hnbt23uAjNBpK4lrIrNdGWlfiBAd371PUimsbsvuzu172I9VnZaU/MwzzwJA+2B45ZVXqH1otCiyj+TWJ2jXFKtLWGlvX9fd27dWHZvJzrx/zy7NIs4x5wmy6H3St7q44MoXe60riy50t02b7EY+x+qNFx0h305L0EK7dujOXRbPPH3aPoNfcaZ5+eDBw4rdvnnd4l8xCufGjWuSHJBlLGGWYVzSTsoIBMGiLDbed+orJyffYiY3h5M4LAKxrioCX+1f1TdUM1vMO+bTnFz78/PhMKv778TTr65eunTReImtrBuYgYpgw2jBdA8wBYS4fPLJJTlSkQ9+nnnmGcGZzGU/mY5h0qD+/b//934SSvT0008LPbXXOm1fhVfiYdvpU6c/OPdBPk2ytrihvtYZvM8uXpqZn8H5Bw4f2rlte7tIJKd+0tIxD7ljB4XAY8kPSkvrahuwPUKTAuoXWyKiTq9ev+I9BBKZWDsROv4UHGvUtmTh6h/+4R+w6FNPPYVhVmYdjZA9VjglZ8eYtP5mIRhobX1AnxO9WPPbuzMrfXzhI+5zM5+oM8sMXOQQjtgbywxmLRTZ5eIawPx0KbUGVNs7lnlmEHzivTf4EA+rDnJzPdnBwKjs2zFrzVDI6hovhy+JIAjGohY4KVVvSJla9nD6B54wgUZHBjWIIrmZWRwKE2NDsyFOOGHHzq0CHFhhlRWlXd3dly9ecBEq/cBNCV28GD7hHsmlBQeBoChcJZaeduLY0d07d0CpBvsG+vlxmVt2vyzezEewp3cfdfE8jvLNLGF/esN9AKWRezJY1Utsf6B7ZdgCaowfYVjsKEGRGbCtRvNBbLB6qRjI6DJvfFTUk1o+fvVR3a++iSKeUzgCJoRDeI/t/BQgiFykainmJx91dadNEIPVA8Bwp5eqhM6ie0nwurRlYb0iVF874ZBEMGR9U1668PGTGjEwESQhcacC3gMp7lFrfvLGJ24/rus9DKobD82399CnIjz689e1dOplOGa8xGW+DmYAqxtDAnvC77Rjq8BLH4XVBaQRaTD+eKlNpr4Hh6IVAyoYoD20EA087lRTWoZAJYGkpGh/cmijx8TmQmlBQe7Wth2EsMgwz6CanU9ODTiMFzlWrp5ZGPgcDY1MSWEWpcVlWjY6GDKLRwMMG2QbN2wO+2vh1hg8H9bNPkRobGrSEVgybBnm0itjH5uceuMXbxKhwhKpr8KHixe8SysJ45OztVXFtr24NsXxkw1pAQSk9w0P79m5y9BkDta7HKBmdHcWdvUOriXMrienDY9PXb15x1FwHlCHJ1hCsp4Goyc5++MLl99999zufXsTk3HmenZOXkVOFj2em1fAguSAdwTWUfob12+BFvAEG9Hh0/DJANTlZOcYJl2sll8RBVb9Sh2jCzE2G9PpFJNibGXazcykMAOLtNMLBotzNAsnMfY0i0Z4APo1KNJHAbLlO2Yq7xBXecV81PI+8ExyWA/Av1h/YTMFeTnOSjbU102Oj+3dvdNencPqCSlJEhhItNH24C4j486dEBKN5QCgTVSjDgBvlvUMqzt3Nv67f/fvDM2Ji8goL9GjOUNdQ6OdOYSoSNWZL+ZLU4L5yZ4p35sQVgqR4gOqZjEAROmFvcWkUB0RzTSGg5Nh9f7dO7/xG79hn9f0RieiflJyKs1eWFiESbQAXTSHBoEHjXUN9RGHhGPr9BdmdvFz0E1225ZXxxMAOY3By8uZEbn2l2uqyz/77BIfG+QbdaBOgfPc4yYMNEIIg/LeoIDa3d1+4EBwiU0nzVLxlObGDZsorViJaxnSoAKxYD7G/4XzH3GaWEaiiGOyRM/ZOipea+ZL51JQn++WBxeWnFp+4dnnnCA0SZvmb9++KY5lckew2lMWQnZFRwC1DKVwJc7PXVfPPfeC8UKOb8DDnhmaiQZX4Mdg5gmcphYkQy/zq35Dg19NyYqB3H49SCwqYIAhCIdk2UwDgVQ2SBQ2NAsG04xa6PXd3/s9pNEpkGhUM4ROTVoQffdmi9Tm7Lx2t1xROBmur+phvlhvmgtlMktPTb986TOwmdpV94Bb9u7f29L6AHfZOjDxUH5e6sK54WBqZ+SAxwoErc2UQTkkJFZVCFcTtBBONgMVPtFa8g1SrJhRwD+Ax11nsbpqNx/YZnHZMxgK9+7f5fw2VW/esvnFF188eGi/4JCyitJrVz+vr95sOPJsQJ1lKqRFW1tLhg85+E0tpNcm08pxprb7LexgVjWmYrGxSBzpBhWiQ/vI0Kj4kGkH/qIMMPk5+Y9aHyWsJjVubLbDmZud66STjCKiGt55623+CKdLHQ6RUtmsupq83HL3dnZOnzAh+AcVoscWgAe3/OBDllkU7z4TrRPa0cK2j5UqQ9kbqCBljFT4gQ2cZhnJz4csTCVR9aRGHODJp47D2KeftlE+aKoKPmEkYW/Lhq3N22l4GwtkAQzKoDW1Q0YwD3i0ie2trCAHLWDMn5QDmLUmyfzePbskp6I3+AK4FQiIbJWSiuzYsU0k55Url5lcMsWVVIRQ8o5Hj7kepdOlEGzSEmrxwnjA0UadQjU20DVXztT0BLBpYD3Sq8YupgJLf/75ZwqIaMJamnJlgdAds8n+fQeNqK3lLy2GwXDt2g3C4lA3UC1Z0Ysti3z6/epXv4oVz58/Ty086OzaHi5zkJdpq15IE5AsqoENPGwmeoc8sqEJuEPkQn4M/NQzz0HFs888c/vu3Y/OffjqK19adVFxbq60ygzfvKzMnq6eix9/smFDQ3dvuCAMnLRlSNRbXw+lFAgZhHAvxSV+7Wvf5C1l3Xg/NFDhJSSo4kw2SgHVeycCUIfR75ksUPhIjL6cmO4mN17rEIwBh8ikBaaOoxRMOr5eXi5LTctvhHNkQ5qQc+fOGc7CwiJ5N1j8jMM9aJ/MgnDb1h1EoPXBw5KyUiKJB2CDYx48+uX115Q39nlwKZ+36QPMUA3ml1981srB5pVNP1qcQKWnhC1cP3E2tT98hMdsR5dWlVqUWjbTlioqIMrO0OzFheljeQ0zGKZlYWT3rf/5n/85OL2hLS02RDOCiqQgKI5FNe9ff/11cwHI4QELafPeg/sG5SNylVN12/YmP929d5sRSldbCTs6IkpeNJQTzx+e+dWObds1/v0f/IDGMFLTevO2rZSDWjAmZzfxAS1VbNbgJ8KQWJeuwI3Yku7yPp7IFIOu2GYAEnUHQq4T41USzDalg6SHzLyZtqRIB1z5POnpxRvx/MJtZ4nrT/64sTFb3DOuIGUasvDKSitkRMgvLEjNTC8qzHUUJzV5fc+unQ4xYqaZuTnJD93yLj1oRXWV60tc+CiMs6augckuYnbXjhXbBG+9864cA0DFM1SiYRoyKnR3D8k8EuyLKKIE2qMZOSdxYyVTL1jDPk6/gZ7w4D8pTTCoQYJbhhNtwZSZ2xaJbwWgwLdafvetXYLt46W+FfZeU/GvjAMfs5r2NUXBKamWrhWIG48RqgqR8EZ5z8igimKe41H51bNefPN9Tk5PgCTu0RvNxnUBq2UfvXjj268+mtWCj58A6c94FFrQF4r6U3nDIRJe2oCK4dRypL8C8N7r1J++FY4R6D2ni1uKeBri4ZtjsIVmlXGi2ic1NewwGKkqYNAdycFhgNG+qyv1S+BZp94gkgF6iEcHexiLoQ9myzWtQQgaaQeb8srn8Z/n5FniZbKvYV4YRML6SlLC0pp8PoPCvmXMVN68ri/Ld9IiYX+sX8iPYerIJOFHYNA4lkd2e8kGT4NcKNjELGEfxaDiwgEhUTCSLRX716JOfdOk4gI1Jckgs0AvQAUhPavZ7Mw8Yk+QHreFBB3gkbEcHuyeW5e7OIzrDiYBLG2WZBRYnH5BOLP4uY/Pk2E+QpgJnuMwZ02f/ei822qVseSVLCgvm71VSUpFioPh0meXDXzbju12Ud2MJZqOtSqxuoqGwAZy6E3EAQD0SFTA41n7IKeP0NEDdHmDahoMd0BH5zeUNC5IMRZNwRJCoAx6GRdiqetX5q+UFyjl0Xrdd8x1pgFo5FwJGIgCPNQVikA30byxN7SmqmLH9q2SSIdEJTmZ7nF0AiEnK7OivNTlKZC5srx0+PBBMZHaBzbwMC0rCpt4wx6CFsVMe+Z7ClR2GvaK0FUwQBGLJ7ZBjc7wMZvBYlfjNUE6AGB7VzxDY6Pol+BqVYaCwwyAp8IYKKJHgM1E0xfzJVi6j1FhZ/9guHqG3g9Irgv2K4PWZEmMvSf3JhhNwZXoTCtAFEd9nAOHJhsfOsuBD3MYTF66+JmOvvilL02Nj964fvXMGS6rdZY99sOlJoMwV82G7QjuYeP13r6HB+2TX6g4fvyknWVXk+oIn1Ap7HUIOX36NHjsRHsPgc7UwhU/lgEi93iU4RGuTLFwojywvWcnme9NFRQie0X2D7OaCd4CAH2F4Kuyb/8eDQpugTQ0vXjxov3Nx49sVmzliDFhGKOhxfpNmwbONCSMJjmwcTiZpyWupB3PX/gY6oCEvnJpAzXCYcL7778P+UYnqoSA4DpApqZnw4NJNKLLAMrqCxrBDKXoC12YX2tIwzjISOEKLfan7UNbDWYxDlE2KNRZDDDv+p70+z5x/Li7vVUU80qCnBg2Femxo6v94JHD3luQwHBdVZ2OeGGDZEX3jg/09RsakcGKjmV7hhYQ7tt3gETjwKB+15MwA8COHj/y+ZVLfF5cegYrdhEYPNwusb52LezSIDpoeSJYewK3aOLC3DLXCHCvGgLbRUcAgH+4pWd0QRzIKdG2XuoQN1VZ5VypLRcFOrt7uEVOn34OzdmsPAA67erpFMWZmx8OtGAkG6dw6FypNbydCprVyRy3I0mOfPHTT+yKFJUUSveRkJTgoE7Dho1nz13auTs4DpDJNgJgWPZ4Q9QmhvEGnNAFHuN1ssJVaFySlCp27bK11Nkpjz5cOd+MyqKwLL9ZGixstquoD0lFOdT5aKHl1VdfxTCaIoywiKv5IE3QBNPqHTkC0acnIByT0DOYEz7xkvexMWS9apj4UwEA0zA08KaNDSPRqRL0BYmVIXNTIxLaur7dDRX0lZAP4RP4rSC6BE24C/k1QXmztXmnwiYR9OJ3Z8mJHfUsZkZFOeKpBUSHVagAvCUN0nDSx2OhQ5CMf5eVj0+ufHbl1Kln+H3ATGTYrASK1vKMrAhNJAFv/a8wcXaiHWNrPOwGDw7yuNt5EI7IWrXesKTEJH7NL8hDF/HZ5liCVl1XL3g1N79U/hnDkjQCuoSHaUrifNm0HrW1/vmfff/YsR0Hj4TkMPQMnVZWXmKLlVKFeQyvis1SAUWyu+jFgg2JDx/cDzDYhgdKCah4A2WJGDYgDqztgcE+eCD4Vt3iLW1uwEw8KRAQq2uYOXTogDQYRI/bO5ia+WEZj9tNXhyDLHh/iojDGLIJITSmCgXWEs0IOrVe0iANZhMUMt955x3vdQrV2jQTeUA7+0KwxBbnev/rv/5ru+iv//RnrvsQZIV8DG5LQYTAGMaLCkhprgek1ugZ4sM9SFfHU6f3sbJCI5yJLZFM7zBAItjluB3bAwCElL8G8afpQy2Mp5jtTc8AUwCZKEZJVqhrGws2cPh5oMI6kMf4ww/PvfrqF4gsN7X3qG9Dtay4pL+3T0LGLdEVN1wDFOOtO7fpW8KoTQG7WFHX1BdiQZFpETZ0jZ8jNbUPjYzLx3v8hmoe1DVe86Nr40OGkqERTAUJVqQyEVM7RIBudxRK4walR786HZmVkdywocaGFY2tC2u8SMqq8woKrNmkQpIl0vxIFev9/oMnGzbVLSwu5+XkcrXIg1hbX/fqF17ZtWe3HFZCs6gYRrv9TL9iVKGzyenBXkV6PGPb3GdwcAghxF5CNcbwa2zi0rpiQIJl7y0tYMwSqkAByIyzt3+A0BpGXMGDklwL6AE+L9WCGmOLC8TTbVQmmIr/3EcUN+zP+Ff6VEdQqTUF0NWffsUW/oym8+Bcj3/1kwLeK+9ZGfDoMeAxChDy3oOFMr87gAEGcsD49l5r6voAyZ8AMEAv0cMbTelXYe9j+L3UL5HwRjEfnSKbFlQHiWZR3Z8KqAuzQFJXs8TVr8ow3OVzBIwC/uS5iSHXDr3sk5ubpwWgxryuOoWL81TXLItdX34Fyb+Y/kgQ2Z0RjbSGzxSA0BhsJb0EwFBff0l+5F0IyA5DWF9aGbdvby87RVxpmAZApXc/qUsfmSAzwnGBDKOGCaTXDswoY3TeT0+Jmc42HF2IUEMBA6HsvMRhapm6c/IKou/8jOwM3mEZhYNczQWjNlpI2AOxpzEls4tNJ8a9CFoFSL5bm9mZQZZCxpvcwZHRXbv3EYbRyTA7jo5PFZVVDI6OPnX8Kf2aKRNSxsqqau7cb7334PGxE8cpoPTsvHst59s7eoz3cXvXekLik77+seE+KVhPHjsuD+nxYyesp0XFsv6FwmHp5MJwjHtodAzzUF6EuSg335BJCKjYFriLkYQZWHiANFLUsYhHLyoJUUyhynsPD7CkpKbIasxjEOtP8PvGHiI5zN+Y1ge7Kax371kD2MatHzKjsfAsrsxlyXJKZKRPTYzLhpiVZi2x6LiP2KnxlCQH0UZSEm0CTIyNOqi/NFfv5JksT7zdLnLSuN6RSafYW+/meMMxRyITaDFe7OwJM/1USHGgd/CDxMev4PdGdWYZfrt9+y6lhmfoUDa2yRXkYdaUDDRcJCwIIlyDaqrw+fDDM/QdEkCU4StGU0vSakaBH7PFh2c/YouYlsxSRFGZ7duDKQlszhh+9OjeSbnJgoxrh3GPA3VtFGDD7exynNPX22vL0p0DL774MncOnQt1BhtPq01bGmFARfM6rx6TyBz53LMv2Da4c/uuo5YD/YO6NhPzS8EJ/JhdgIfodL7eyeAvfvELez1mx1MnnzIcUxQTWToajhMcAmZa1SRkjGYpMGx2MKCqErpYkBCCmdkccMWaVFgXdJbpDdKsEC5+8gnYaCPDJIw4gYyAGTC+Y17iJCOkWvMnDkQjMwqjHxjeK/bLX/5y3759cItLw9VCPT3YEmyY2UszSl5a1ssvv8w6URdZgeFXyw8ci74ghBmA+VULpuHvfvt7phyoaGreMt0jyHW4sEQo+QJ+4LRLkaA0IfGLr75KML0xtPzCPOB57noSkHzyqVMeLBXEqGhTAaNzGboFoSxAOC1WUHALCYgLgb8u5qXCFm9SdZmPtcZ8+fgTG9/7Q9DCYJ98SgnJ8tGFcCOuE/5g2MONxsKwYzIKPV9ZlNWkSCMwoAv8AMkkF5bM93BLeEEbS7EyemGgUEqm/OzcArHOf/In/2+9s8kg3FafODRltjQ2Ww9QO81buJPTHAEUjQb/kJyRmS7T4u3J8SfdXUGjrtPVGc7VREQZYfpYvNl8oDEkzPFNJIOqmZnC8HCOeQwcEqCITf87v/1d6yLiBjPQhef9inB4Plm6p48+JghKlpetIjcd4gJdVyPzdHR35yI3UtLkeHjnzt2QkJMTjnTLGjw9E044uQ3DRUV4wOIcq1gx4hZwQos2cWn8THtoB3gQ5ZveGI5uk0UvZp+oXHuS2DWk15mZVtipA0MeHBnG2445wieAjZEpofeqSnoyw9qMKQ9U5rLqBiXhMulwdMH8AA9QCgymP+kjtiDEqL5hBqjkUY+40SSiTMBAdCxVC371EdyFpgrjauyNzRDRGxpJGUrDPgwwwn7ayKD2DU0teNOsq+vws/W2XpjXmvrBD/7OLrHdV3fCjI1OalbA3rXLV4ziN770ZYfEbl2/9W//7XctOz/55CKOwuf37t2xCoIii0nzPv6h1gQjwQDGQ0oAANugdMTKR3cWAQg9mLyUJ/40EqaiP3E1ZLLgx8ambAJwF8qNAXKFLRVcHWCxUVxSQH1mZ2c45kEErMqQvv6VL+lCs7jO5AVLaAFjuA7vub8WKzKL4QdnQrtTHHpU3dovUp5hgtM15DDTEdE30aAZ6BDtWD79/Oc/t+UIEvFFspzRIZgEEiwP0JdJrTp84k+DktEBVPCjCw8I6gFCRHIgivZhg6rUwkeuBI4uwFIdqwADeDo1SZkUcCZKEXm0IOn4FqqNkZmBlEw+5788WL9RpWD43ve++xd/8RdqYQC3T+E3u21SVMWRfoZszgobCNFBc01RNarjbUgwND+BAerIPrz509gBgNuN16zhDE1vd7cuVHTsiksFAwsDFlND7mxQqwsn4CRW2odDsmzsVBzlHw+5te1ed+fDa1eHde2NLqzboVpSx+KQxSG3YUMdzc+LK4rWfS/pu+UFKXKfKfjFdbghJ4opzeJVITtuM8B42gEkXkJxsJVXu2ChUCSIl+VlZZDJRQ/zlIDtDmWUd6AINnzCALc2hEUP1sGLa87+RkrZDz29IZbah44LC4t/zlGzJmiJTJIcNNaH9z7qhmKR5Q0yn3gmMHh9k0P09sa3Gd1gIF1hvWhfI176k5T6yRsNeuMT1/JGg55hzUu/6t2DHr13nN97DUKcN57jX7n/dO0DNm/icVlbe7Dq8kZfqnjAYYoxbqBIC2CGGlTHrLoO9MjJ8aseVcGyAAaMYiCBUD3qAqVV109PX6/4S2VwFawo74E6sHom59Y+1JPysKFTLeBRXSiDdbwkzCOjwdSANMOl2Y2RYOidovQs0D+MPSWEsINTFbKHfIO9ffLEWykmrq6J7Q8XESQmzS0t9g4PrieHdRFZWk1YoRCV9wlGumk2Ck2xhPEG/ikNGAAYPQK2aM217KI+J5bDqOWsjxJTcg+TlrGRUWc9XbNbXVur/IO2VuePQaILcTIoYv2I2+CHFiCZRIuECEwCjCFDXUzB5aV1t8+p+MKzLxgvJcJRYQdDAdjLzyn4ym98aSVstKxDHV3v8JAgpIMHwlUv9BGEoykJDEvekcHnnj0FURZNThrAP7pYekEXm0aDIupoOkFKEK4vOpHJTwFpmQjRI5DgT/hHdC9jxgMGTjAQHztfdr8UMwoo8oEZH3+inQe8AYFoBKUCBhym1CuBhBBvJqcmpErAJ2F3KC/MXsTOXYngjJWjBl2O42dGooM3wtrqXVpYXWlVzXa/9MmFDQ11u3ZsP3LoIJ6mWKVZbGt7YCy4Cx70AjbmKXRBuEFduBCuPzQtEXMjkqth06aNuIuysDHGnAUznINEYWMvknt4YbEs3I4pv164w7iv181ZjSQl3C0yH/adPVsG+FgRwadmJVhEYu/7e5zGGLQZBHUMFFwnKMvHmTaxKx51J17cNwjliICTq9evky/lqU6MwfMHG3QDDqdV2ehC+9jiRvHocZu0s+5JwSGqcP+YSpn7qCN6Qy9ELzITVzmxrBYsAIqLKigqQwMMhgchfySV7QFmxJVCha6N1Ab3uXMfivqlZfAzNNpmQ44AZ1FRLPtIDELoxdjWKd4zz15++RXAaP8f//HvDUe8no6EqZj+NeWZdfXCCy/w1nD3Up6uB9KsMVIyGocKY2S+WDiZV/gONQtCFTdu3gAJwlEUQyN2LUKYjA0HwKZS9MLDStIeqA8tJ5467T3SG4JG4ARsJCUojUi0yaA3QKKUAslSs8xksCG5vqmIHodqkm55w7s5PT5hS2fb1i3m0Z3bd1y/eUMOO5uaNiU+u/K5UMDyygpX8tFnAwODiCWHjKH1dHRoUHiP3vnpMDb+hDcBKkYhXMGEap41OSmg1osvvIyXjOLm7RuJtg9c5pKcbFqioczu7nagT+CExoJ2b5CY/okUSMra8jp3GjbWL/sA/xupNYDyeACG/UlXI5lfLfXaHz3+wz/8Q/ta1jwOPLz44otvv/0u9GIDIk/jscVdLHDz5g2OdodV8gUyRoYadPkVSl3abeGN3EIy8KTwA8AHTZWfzxNXVl5zvzXsbRry5cufekAg0NJNqBBFoodAAloCA1BQ0sbjCw0GK6da7D5uCYfm45Q+nR3BR2id8PJLr9BeWHJ6Rp7WVbouAJydCyF8q1gIkoHBpMCiVtpiom7evE2gREIqDGM79uz5q//9f8cDNJU3PspQgyBEhbNnz2pEdKHLm/h95FzC8Mwg0T6sEx+cBvMOMtlu0gWJQySyLyBBp24hUL2wsITdI6oUtjWGdUXbQxG/O2JJMwgwSduIm+roZSss5nPngiAHb1hbeoY6XRAKxutQ/1A+72hBAYb0xgPMoyD+p2fwOdqZFKz3DE2z5QIpooiviPSpwbDufwJXNky0+fTTT7FKRS1Bl1nV4iQ3K0zf/OX9g0Ou+7DZ+NJLr2bz0y2HLAI2UkjKR2fP8SUDe9PmDSPjI+fOnUVQGxUWQlGnC1/+8pcJEZBIs1rbt+20jelkXUdH+2wUZmlOJJ7xZjj4xSxxnGMDjWNUqyzDp2klqElPk8KhFC8dPnyIC4N9+d5771RWcfOvQSMUSf+KFa0KcDWuczMeIpqO6A1Hk/Vis0fL9CeT2pkKKs6uAsMaOWgJJzrJSJCF4mLWcGDgu3dfe+01XPpXf/VXChgLBQJIjYTvgjwSAY63334bhDwUTivRbOZK+y24AvZgBu+pa4Ek2YZ+IdwbCKEHjFHXLDslWQJ4iaKLGYCOsnzCCbBnGYk9dE1VemNqi2dSou29FjSoKSaIwFu0MwqEpjZxMinABigLZm0qhjMRNys960l3rxwGjBPrE+iSyOj5F1+g6DADHiivrKTneadUx6I6dfoMTqARHbG6MhSFZqkUPYpl1Sk8QD7S68WCFu3Q10wU13LLgZ0BF5KoRbKU5wSg5eCKAqmqLKp3O0EU9MgF3/64A/bYUeoao2/4wVva56hinxWVUtG4d8RUSwPQD1BnioRbihQ5HOMkFyQdxSU1cmROZmrJZxkohiamwHtWv7keVnWBtSanZxHUr55TEJIK0DEQ52Z4gkP+E3/Smyp48MaZNOINR55xGxcdYhi/Z8VADDVqwa9n4/GTEfqopQUVvTQk38p4MAbqz09xs0BRUS2NaDAG4Ne1PHijNT/hJ8V8VNGadoAEKUjiJZlX0p8+TgTEnf56FB5E1POhr63Nag2/+o7L6AJLaQ0YwNNmjAE96igGSXXv4wGqpTvfMV/iAAg1NDh3qSKqG503jDwvAYNHbaLpxUfLKnoAqgZBjl8V01Hcvoo+cRk/6YiOQCrmDnRNT86AUOi8bx/FfAiADSDWPFPS+VNZfwXTm0Q51x2WkbMT2MqsJYaVDyXioExicugd/Bpvbt4KAEwskYmNdZKAs0msgUsqjNX0bjveLFUoWmZ5gTCo686R9Oys+eWVD85e2LixhthAEdNYLWco1WJeANgQbEKNjLgkoYREifyJyWRcGC/gc3GZkJgFuRIfPHwEDy7TrnbcqWYNXyn2qKMTpeo3bji04Wjtho0lhcXirO49aPWr6/QkKTMNkAEoLSkrF6IeEuaEDGshp4SptKIyTpMcJviR4VHtQ4IRBedERqb4XTCAVhfg9xM4QUj+DQQpkQlCIBl7AEaqabiCN9/+VFGzviP7RmRqUHx+QmUVtewoTWZGujh1m84gnBg3Y62KlvKT9D6SiHNzijcwhOWF2YLcLJvva8v5szNLGFgIkI7cKNLxsNVWckFe7tEjh1xgzuRtaclGe3S0mMdCkE8Y8TC1Dh7zKO1jjOY/6hjwzD44MRDv2ZGA1KOgNqoQzD5qacd72SadlBJA2bh5i2ZZydI5xOpyqGeIrxfXRTWCnOJzCte+MC6CWEjQXZDKpESQwB5dxiqCHz4wFaEFAKorE6s5pEcjsBEirMKYsI2OsuYz4ghjBmUJB85AhcV54RYWPMxotoWDWJasBmLszhZCO0MHAFStaS9azglQZMEnUKDaB4BJAnuQfQDALcHk8TI7IqWxO/MgJxXm1y/u5WACqkERDZOEAvxYLtMgJrZlgSo0ZS0hxVJKhBUYTKJG52ActheMi9s729uJv47C4ofFn8/lH5yRxMckAXKDQiMsh1hBmyckgN/ErIz2WWAOPBB2uAX8N7/5Tegy/RsLowevsnHhmRsbYo2aYJqu4rFoCnVUBDYAEMgDOjKq/KkRY4d2KUcsU3WRPDSUm59vGlNRrDDmz87Ivvn4mku7yAX2uPzZZ864yxFAVgxTxLAwPBOMjGnGm5Md2JtAoYJmVXdmAABZGVmkybyOjmI59AuTJntB8vBsUBrHG7ChX9Du3rFLdvDunifSCMIJh2KYE9IybVg7mw7DNiB7e/v0YhkJqjd+9gvaRuNwBYGG5mOkiGLIUEHQ2I6mdgTCV3v27aUnTWySgUhkz/BFphilsnlEC8K07u4u3riIBHV9A7zhI2zNjRsbsMTC4jxTUvg1y0ynViamXliVYxGrZGXnc17u3rtfR5BgtRYrf7E6b7/zlhmW+Y1SmBkHKoDf4gVAmDgidWEUPLsMrPz82dB+fuH27YaZB1GAXFyafdDqmEFwqKH7nt174VxImzEykrA0QxbmbY+QcfHiVlWcehiYZUa6DQTPKADzoMVmZETLsT403qXFeYezRRhGd2WuunaKFsovKpSX0p4frDqxAwmECPOkZ2Xq6ElXSKaEdlANAE0hKHhYq2Dwk+48oAUShCEshwMwyMclIU6a4a41BPIT3sPA6moBw0hT8c7b7zlsLSeV7rTvg9MoJQ3CXiTLIREwrtC+n5yiVhdyjJdL2O62pSYzXZvCFPmG42Om0uwSFoQj+JVl8k3VQiOZ0r4R0c/CCWuqa6FLqI9Rg+ralcv8ppJTLK7YJt2fH+Vqc/HTkaOHmpqawQ+TMOyKLhG2NrRpxYcPA8+7Bwbj0YQknSUdB8QzQwW5MV7hTb/Ggu5gowfut4RoSfJlRLz+zmJZOEWTz8J6wrIsDmCwRHzrrbfoT+kHGLhwT3DwA/wb461bt+kQNiIqgwoq/uAP/kBr77//vrHI1m04+BmE+oUZ6td6gO7lfcCiP/vZz7xHF6Ts63tCeJGGow3fWnchhKU77oU9lPWrKiKXvBf41Lx1u6bgFgCsfBBKJWQDAUUIFJYjsPDAAgEP3oB2Vqym0A574EBTlTVkrAxRR1OES0VKAxtDESek2Q0LYQOEUwuSwQbDBqJBwGsNSyjctKkJStEFwL5jwJSJP95wVhkCtKA1QmjzqVMnwKZrClYxmgrMZMQUoAtk0jKqEWFkjZHjT4PShfLBEovuWqGota8p71tbH9IDEYEWbOz4iTvs4OEjNNv2Hbt17Xaje7fvuUFbMUyIjvgf/ufnljdtWWdPZKXbSVh2B5ENvbwcqZvz+p70SmYlSJVCa97S5Ka3ix9fTFpfc6mOfh0RpJmN/dPLV+giS3ij4Iv0MQoiQkiMF0JSHP6z5SRyxaw/NTOLk3ywBUc0PMaCLZmLZ8PzZ0Z6MOiV8a0Y1Hvwa1yL8kVCQhj/6iXaewODHhT2Jn6pLgaCRCUNWJm4r1iAlVQgbhlbKIbDVNSOn5TRo2e1+D+84UuAuLgvDwjjF38qo1mhTs7reBASh40EgrsaTPJUEZZiAyBCR9bN9EJuQZ7WqCeN0DuYW8oR7SAMaPWrQb8CGAD+VBhOgUGdwSyIrt64LibBezxh3H4NE0NWlvIoweRCfg8QpR0PkuErguNRC4691ymQXFygR7XsA2jQ2K0jNUUatYzGC3MhHV6MCvADWKeiupwSl5CH26YweJrTuHCcy3c1O4s2JT2Z3jEr0M4Cl5V3KRfuB4YeJyem8OvE9JRdNgi0AOCUMzTTr7NfebkVZj7Xh7nbWAiivWAZZ42rr7OrYWO1oDQlpVHzDRhCyDtl5RrolJUYRjQy5rZOxgRLlAiF/MxzQsltLIA7FUPbcXIgQRVdQ42oCAZTivT46SH3jsw/ctKtLK2yUR4ldhw8dKimth5RUILICXTw4ELv/Nxc2lBWosHHHbDOlcJcc0jRS3oEgXA8jOW4/HhqUhYf+UFkjTUK+IdbyEdZDUIshBsFRUye4RzbQBQWkusImlGEBaCMj204BgGuREGNRwHls/JvxJGv5iomuxO9eBaN3HXgYi8HCax7rOoyrMLWV6S3q6osl9hEa+lpCbNT4+IuOD2dz89KS6mqLLMK62x/rAA2yykp1oTMoTdaWviaxXBZQtiIX1pckrEe0e2xhAyGScnm5sW5eW+czDCKkcEh2cpDeMD0tKHV1YUFWxjvxLThKyCDeHz6E/oFL+JeeINGW9uwh1vMjjS7a4AMBGYgCsZQIUYXJODr8eFx6AIeNlAFD49PTOkFj3HJDI+OUog8miJB6Ws86fgjzEu1sbQw197+GHLKYVsG8vFRhp1G5sKJw60yMrYM9mvEIeCHDymiNeEN5n7+Qr2MjY9aMKCOqRezAYkqp5ZaWu5PTsy51gD5ZPM0AdMqXCnGOzQ8+MzppwcHQhiMwRrLD3/4I5LeUFNNNG1QYQEKWpsW6N5fvXbDvMWxx+7hP5YybWZ+IbWzC0f51RBMURiMLWuwwKZwUNNP+Nm3fi0xqTK4JZUE7caNa+Dn3gaVyAQ1BEMDhoFl7WZ61rXZ1PRw8HA4SQmTGjFZkiAv/QrPNuV15xNkZGVF9YXZBT0+GRpGd8IH+FmabGrKgeYRxzBHxz5+EiKyAsypwReA7vaj4McZAH5c04bkWjeuX2fZmFlNWmIUA/8LDx8ekL3uYftjSegRggPYBC8168DQkMmelAHb3bEhLC1KqWzfgEvy3r2Wm7dvmT7Z2c7Owo907PfutzDozbJWI2gpO5kY1h6JVwYGK4ZGGrds3bFrjy4oE3EmxcUlY2OjLmDOyc03SXkPkVaAU+OTSeuJFkUyi8IJaOEfbulVBjSCGr4/DRCeWUI+nm1Azi/OXbn2ualUUlEUkUyt7VEIWqisrsIYvEltjx/RkOZ+rDV6r8VZFA+w9PBRG+bBWqxJKBWhAfNmVt9SNlnyS4YGY3rxUnd0FwMFqpEPSLpAOKIHQvRCXFEilRVV2Mx8zyZzg7uS9MkLL7zg/i8lDcHQ/MR/hDHOngunPqanl/E50UNxEsroxPAO6xv+w7bHmxs3gsGKV49hspNOJjr2rSkWHjtP1z7k14fkKmZE2ElHNAwfGyDbrz4+cGA/ZhMHNTgyKNGkAB4LBpH0eAY8EEUnMzHLSiXkzTN94Pa1tSH/96eWwWNQWAIeaE5jAQwe5tRkveEcHxMZFeQlS052Jnq4qSl/cmLcXQfsJG4paOemAa3ZH5BFxYXKw+fNWzcgGe14VeyHTE1PXvjkY8YZzpfJUGIZBzk+OPshXLknAUoprpe+8LIFg4xsck85z00LUWIVlVWm0fHJKfMN6qAjtgSeYyEWkB99JMHXftnLLMkOHjnoJ2sJozBYa2AbcS0td6HIx86bzSKqXqoJms2f2OPJk15jpIpF8YGfphoeHrRWtyy0DCCD8EzMDefuzdswhmpUsc2Tbdu2ExMRMiefOmqWEdFnP4ppQWkYi/nFNEUR0W+Wr4vzS8lJ6Rwfw0O37fadPXsO/qlrW+JobUHLx3T7zk3nYlW0nhkYGpQFCDJJH2WuQZDw9Bs+XjU6IGEYvyKHYhB18dKFAwcPe+bKcaujG34gFk1/+E8/9o2phJ+Vj1dYcmTlWFGsVdXUYCcexqYtm987835JefBAMSDQsfXRQ/bPPlfCTU7qjlTt37MfTfUVeKmsDJ9gIb9iNgyPRsiBssYOXZY3cvY6qMDe4w4/f/4CsLn2YRuGqSkScf36TQSCEDMX3KLp40ePjp84gc0sid08YPlE2QrPo0nut913oIjI7Ni5zdLdDZiiySx+TOWUhq4JaeCTioq4fQPh2QEtIM1fEHX31k0u0fLSYrm5CenmDW4fSzrz3rvOIZDKT4eHe2XTmpXOblbaJ1IzMTV35oMLtnROPvXU2toUf/HI2MSlzy8fOnCYX88QCAVl8uqrX7px7fqOp3c/6RuCt/XUdAeU16orp2am792+hQo2CtlINVW1Vz+/fOzI0XfeetOVgA4R6UIsNJUitWdpYYELB8YTExbmRiZHRyqra1mVT3q6WbZ2blnPbhTjgw9GAGcbM9TlaJ4wgRvWDZv4+ShA1ANFJdwMmSvnodIHrmMdbfIjiqgIKd7TKWpBvQeaTrH4DdJSxzjGhzJS3p8qetbpv6gzHruw6gjdRWV8a1NJD3GDaBAX0J03wZ0Tde2bCeJXhSkC5FbAn+ETbWiqJZYASA1yBkf57BEYMDAOSFWUB4Y2PRiCwQKME1BhcBqRNxqJR+eNhhVWF8aIHHpbr+MJtWBG+XinxjOO3LSxUUdyw8TcA1oqTMvFBSJu54xO4/hSLR9/yqdHkhXQnV6IhI6IhJ8wvY/ymgKGMp6xLJcb+MJ5tVkXuSyE92khb09VdTUa0eAu0BEiboZOSU10yFtT7hmgWaQzo1OI+o6d2x91tBkl8AiV5aC1HjOY48FRXpaKl1nZmUNDg4A3Xp54d4jKoGwWIc8AoMiICiSzgBTm04MQ8kOAvSe0uJkk6xrwvgFGCxiOVYE2CYD3ssXJ860RFovhawddhgZH7JHs3r3HmT9mjfTYIIdYyIcfWdIgZ5pJurxk78w/TemaUtYpRYzQTAQwxx0hvWnMWkiqbyWhGtGVAV7cIC7StX4BCRuekXV+IWDPGHELODEAmvqgoGlAm9iDHsfqmgI/XwsNa/25vuqgTtg1sqNKw4oq4MkWwyewz1JkYCpkr89Oz2JNmndNVHUhvVAVjTC7NOehrrba2QlNYUYgsT9AayzOA0kUABjd+dVkiR/AqbXXvvrVa1evekYaQ1ZAMdgmC9CCN2KONXCkUV4xI6I0jZRjkoOWDSHJJ+TbejIRqou9DY06RkHv7T+AgRkUoSiwJagkN9DIo/bHyqALzLhUTpWdO3fpS2ApCIU1+xVsTASo2dS4SYSJBuWKgXyh1S4nk/vMXC5ngpLbtvKTjeTl5Cfn2IEM0W379+1lNDP6bVuL6DUHoJdxAQ9+eBbBjO5bmpoftnU1NGysqWEqJUgTYS6HKGBLQ//SSy8tLYb4OvTFIcjnQQJEO9gaYVdpk2fCy0OHjiDNytpgb/+g7VqlzNclpZWmZ7OsAqZ8g4UHeEZ0c8P7Z97j2pcFHE7wCSLSFLwJfX29Yo3gCj5BYlo182kE2uEKCdCFPc0CMB1S97//+99zWaby3Nu8ZcgEjQSKosfArGqQs/thkmGhHRnEYVKb2EzjlImBwzm/mooIzRY3UqPG9i7rsDus2NPPPm3GcpjHmWbNShUiW7+ST584brHq8Pp0kjQ+FWwIaJc6zGDPnT1nZciWqt+wiWBaRKG7s6rU1FoOIzXIrOgLqHaTMSvB8VkHUUxaLKewzbWy7vYxaLE7bxTaBM/+gwfJs7TqkAMe35iTTjt79gP513PzctCeFeV9clKaTilg3keNwAY+MXzfWIigMWfRggGEKHALYNzC0OTd0NHS6lJJecnl61eee+ZZ3g1mgYAZIU9imgXrsxpthDIUYol+8cXn4VCMmTuSTQs8I0JB2Exe8iiJU0c19l/glqVlxxLUAiF9KEoENqgLTtBdu3eiGuBBZdNJXR5KyEEm4dYIxEi9e+8O6mMqZZAV56CFRAgSk9uRo+tQlku7tS2cdbb9cu3aDXZewFJhiWtbiLlnPhQffXGBaaHl/kMWHtUKLfiKEjZTCErGGGxceGNxYmDCCI2yhD3zyqsD/T0ixZmtzhzL6ZxTAB6nw/PJd1p6BlbXOICRCW7ZQ9oXJejZLaswPDMzbxtK8qIInuBxhAQD0ZdeEAJUlCQVhFOgzh6jSeqF51+CDbhS5s6du8eOHYcBPnLBkhjJwFFWAZS1ovATYRGDrikSQTbpTPhn4cFwlMFsE+UJyRzPADNYmkGPrHPRJiY7KZewNxv6k0uf2r4LiaQH+q0EXDIAe85q84L+mz/411DkVgpDIIzZmWG3E8AUO4DNvZZDjiSBTe8GzmRkYCgjjQyYGUEOPj1qbX3++efBjB9QFtsojL56If4g5NPxJ9IAD2MMDoiUExm4JoKRPfP+mXdOnDjOnSR83P7b/fv36BY4hEzc7qiAxK+Nm5tv374jua3GMQlQAUP5KKN9Ws4GhdTVL3/hRVSQkgFCdIeIAEAIOwN4QDwPDgE8MIKuiwLAYNsGApvbHGd//tvf+k0z/q2fvXH0xHGXJec6YFdQxNC/39Iqp4g0qTaLZqOxmA01hUxOGoATpXAjEmBvqHOUHySkEsstzS9BiJeYEFdTUOoCwArEr3iV8iRQFJoPf0F9dBe7X/FDPHGTdItScx/4IVMvWAiZ4IELDHUME1q05g1gWh7cx70wAEIrCiynolq2NKkphcHmDTVOo0IgAEClQbKD67RjJgWATgl47A3hLFCMjo2YZ06bZkyAXb58xXvtoBpG1W9yagb/piCHrp5+dDTHcUk8depZCHcBqMTr1vabNzXKFPTZpU8de7MHqJZNDywRj1fiAb0IA7IQ6oq2wro7u3RBDPPmcuDQ3IQTlpfmb1y7yrva/qitX2qzcDtnJUOWB4p1SP8jdDCIhWc41MrCYXKz88NdAJHnD0aQBAfQs5bGhgECpmEkZv986NAA9IefyKGPB3+qQt607o1nFX0jdjwVRQXDcgISlY+r6MiQ4p88xy99q6VB5IQdg/ettV9/lNeO0BhUkZUCmoxcXxS0n8RSquu2SOVV1JrRCAcAP7DZeXjC+7gR1NWv7hT2BjAxtEZh1tGyWgrHkHjwgWIl1VLXr9ClGO+RNKCg8t6veBQ8fiIJ4A9wRsdDaQctm9sgwdpEC7rWJpPFT0RF9YKCMu9lj/bxK/D1QFzNNOsrgrcEeBSGmE1RSdFCyHVBC5zqIRXgarjjM1zz2av3Lc3NsbIAhmyoDCleE4oyLy0XQ1NtkuVDn4nDSFmWflpcWhCqruW8Qk7EQF+yBwxeMZPi4lKKS0DNo9SZwiYk8QOy02Rnhts6jMJREocBmP6yPMib4Zbfx1FgD9is3QoLc6Ympk1Itl/GRyfA5nhFCBcu4HsL8W1Wbm4WK0kT8uuapEfCbWAJ+4gyX1sNPnLKwn43owfCebYZ6m6usRCbnBhl7kMah7rZFMI5UVrbQuoJPqtwPMkBzZVwxYyKMRdpublpC1vQ6PTOg82ZFLznznBnpMnc5ydv/EojYBi9OxvuVywEVI3gMdTR4NWrN3bt2o5taBYwxCENAJBLPjlh3coBhIguS0t3+6OrQ7NPn9rDJV9aXlpVVux074a6akmFx+pqzFtFuRligVYW5/Jzsm3q9fV0Ly+E9eSSHfpo94kXzShA1dnddfLEEQ4GeSSkTodKmpqSRbIPPvgVBWdJuHXbFt1+9NFN87GJGQshug9zmU9LcAWWgxmjZwjaCDWfQh1Xq3Ys/MwlZi+EZj9BrRFZldGzQ0OD5khQGWysE9A34tuQdpp86Z36xg+jLnILCTfzBZvawNG4NJoUkJ+ERKekJmekp3Z1tLc+uO/2Yieb8JLVqWT8Tc3NDXUhDMZVx9du3pC/aHxqnMMPr95/0AL+uvrajZvcJBsSwCMNYCRVxLfkLkTphGOITihW02wEyE79/Qd3UBnJlEFEShyQ2Kmrq5P2dAAa/2uNnQqN1qX5+akl5RVaFtVtTuI+xIfZArZygi9jcHhkflH225DSGxLA4NiZhyufXcZXhqkihBB53ZE1vEqxRJPQFF3CtwrzFiqUan9/r5hgQmHyg3YagH/TMIUSuDtMGlC008If/dEf/dmf/ZllAO4CP3oxUPxpfoJqTGho0IUzY4Xjz3h1ChIkMFJsTGADosrKAGaSu9/aUllTSemynKCdDwkdMQk2hmEFGIW6DgoqJXFocJAPz05dfNceE6rlfuum3kGktMrSCMxbYRo+34IeNZKallmZnVVQVLgojsEVAaUlG+sbGBOdjzuZCzSYawTKaqpHJsYd1HF2vLi0XHiVSFY+OQivrK6R56SsouLdt9+G55oqa5ha+1pV5VXQxXRgAzFJMbzBoh0tZy1kCCZgiyjwQIuS0OUztzg3MTsuEcp3fue3ZQlDsrGR8SdXeh2aqq9vkEd77+49vICwRKfJ72FlInzM5BI9bPn4448QpbyyTEWTigYtBU2iZu2LIe4rKMOp4VH7ljCGjvYAmQukEsLBgNzQaCaONUYsrURS0DBPBCGVPxe9Ll36hK0g7AeNpI3SC3xaWVknaATV8LClV1Fh0NvajyK/beYMmorZtVeuXObrYebq3WdiMuziQghfJo1Bceki1k7MHWok1mN6ZG1/8YtfFAIEb/Tngwf3HG+oq6+q39hw7dqV2ESjFV948XlhS+KO0Fd1XUCylr/yla9UVIR0t/Nz4Xgr34ECIoX1SwqIgyBS9BoeHWcMMdfwBozx1JoHsSsW1QUrVsAae4Ewapy5VlwoyGQi3nEV/K1NsX8woEG0oJP9KhgkLmBeSElNMC7wQLLqphJz0Y9/8k/i8i2NVlfWtjZvJ7yPH3XI1uJh756Jiiq5lUrWkpK7n/TZSd5YtbG9/bFzt4ZQWlHKIpTqvmi96Nz5cwxlywCGPnGz+gMDxjMovAfJ2K+6qpYuRUpRC9K0w2SF7dCMEARBpgQ+Qxe1o4pvQo1XNYK79IKpTp44tX1HBdhY/1YXTFaK+vr1q1rADPStEC9ZJUzZNAmtYtttS2NYNUW61JFFPtkF+6ssIz5VV+m9//57cEvZYjbxPGAT+bZnzz6q40c/+hG+onDsIhoOaxXG9IJDgIoo+AR6bXi6is1M3bChrG9wyOqtYePmTz/73LyZV1SKWyzdZaf5jddeo7AgnJrF5w4MYCGhm888/Sz/l5M2H354BonNIHBrPaPHQ4cP3r51R2wBnYltaGAMoFPVcaMCRAPYeJ5C9m0gyPqLX7wJQowKk7I18PVAtnWIswRyPdmsI4NQZDjS8RNPQXrUssh+W98Q5XSTIIjwkJqMA6vd6X5gHyFSHngSOuHVGzeukV/tQzLU6dSmHJrSLdxBuM4sfljyvcFB6vfpp5/G4RjASsOlQBoRuoa9DQGchw4dIPt8SYYGvfbYF5ZWHdK1n5iRmacR262cEZagTthbhZ45c8bFC0Kgran27t0PGxZvZltpQhbnZzseS6vgUsVwXY/wRcfukE8vVBkAEIuYczRmpqYlJazlZ2eNurt6ZlriEFOnA4dC/wtz85oObknPxF09FIs9z3CrBSaDXzzKG0S0TI6A9gB9ChmSS4x84lkTi+A2PelSMfjyJ60U7IkoiFNJKCMYPt4Yto9i3sdVSJ2KsInS2lFdSWW896ApxTyo4qMFBSgpetxQAek7bgpsaimsa25pFPLgV95nP2lcXR5unxgSJf2am5uH2EanPAIDFTAYQu/+1JePZ98o6htaMaiONKhw3AgwMKjmNe5XcKrrZdxXXEZdwAKbOAWDaXBE+finGKtg0PXqUoioJoqq6wvJtao7PwXOWwxhJ+APJaWy7u1THr3IJ/jNUqMmq/HxeDjmV4jjaeN9l/qT9QohwLB8dOeuM23y6LNEiZ+xVNXWUI4gcrITT1tOIDcHQ3aeq0UCIZiIoYuFOVibmgr7D6gRRwugHVtCZInlxCwf6vCIPAlklRg7kyYAyijUwlQxlQ0NlnIRKdopEp5kgEgPw4F24VRJiNRiQCA1e8iuhtaUoYiEUiAHPx8ghcS1tj6YnZ0zHapodUcUlcEeLkkR02QaWF2zXRbCBIklA0XX2olJyU4SFxGrGIDpEVbrG+q8gXlo1A4VhkbgRCMkhgHcoroP4oJqKcryhEtjcoMc9aGrsrKMzMMSXkIdAKiSmZ4qRN+9kSKimOkaLyupO3H0SH1NdciJIRSyoGB0eKjT9m5BbibCrS0d2LvLfYrk89qN69Fe5O6LFy/qIsJGsfnPs+W+D76qLA/Xmo4OD0IR/Ugv6MIwwUbjGIWPlyYbg/WTBlWn1HxArpY/jQsHDg2586XaQFBNGKtrH1TRy81b1999912LExgjcKqYv62sjRFFRP9rFsm0I0DXtGfU9C/qMIB0YaZx9x3c2uLSspcUCGOazjVbW0+WFBXKhDsxPZYaHRtQYHBoUOMc3gBjLeFV2foYGbVV1empMit3QgLqmKHBE4YfxQcDjMUAb2hkWgUV78Rnn1393u/+GxvrsR4Q726AWJ1kbWlu8m2MztxDF1Yxd1rtaAHYX/vaN6DuZ2/8XF32hNhI7pPtO3eZ4/MLihAafS1BbU9sqK2WDJ4f1BTOCsUAhgkbMGAqOvfhh95oARdBoA+27+17cuTwUdLQuLlpMFwHJMx8SFAiVkSIsvJwqnJz4ybnw+TUAoYIGSJvUJwOsCfoxazgPQZg+9orhyjTJ8zDVVFhmS5iHjAob8CjsDcQhbd9s7qApxgXI+a1zPPsw12kJAaGvWAEFObDNpEU7bO6tGizu7LGair4gKqra54+/axLf+UC63fZdnq66RBuQ3c5Ngwy5CXmCCgoLHShIsA6u7vZl4e/cVQBJGP0mLAtKSW4MdgL588HJdnYaK+x005UTo5NZRvOvU96hUED0+TjFKwM7vY2zTnVlZV5ebnwTwwxDLHVSMznIMce+oIoZNKFNQyyGjhmHh4bnp2f+eiT8+ZFTqqayiqkV34y3Mon/HLOcUztsyllKnYbb8+TJ6NjYf1//uNp+59NTZthqbOrA0rn5ylJJWdkdygplva0XnoMrC6JqpQaBgiNKBsbizSMXggdlyHewCrMC7zEjDYKajIortVVVjsxJ18wpq7ZHVrUEk5DHtWiBh3KYwQIHDJhPnokSv+JRXtnZxdDBF0sSZxbpVMxkk28rKxAR/ihY7WMIXEj6xOWPIMkDKezk36wbnz++ecf3L8HYzhqc1MjbcAMFewOPbG6I1l3790jZRJq4Z/UjMDnBgLV9h90gckByUiFcGZopEA2EXZIMMHRJMZy+rkXdIo0Oj169DhMwoMWXA6jemNjk8K7d++FPdyuZPt4iFTm+lUSg0EjVzqKsJ6xvUGBgTbAt4A0K4nSMXy2sj2oW7fuaM2Q1YIc2p7gaJOldfPmbe62mfk5Z16JyZ2W+6KVdIEKvnELknnYXEqwGjAth8JXvvqVzz79PKkkGRWsJXXrcK3eIRM2UNyg+E30cuTIUeP1bIb1J2e8foV1ffrpxddee00kJFMVkHoxBFNPdU1wMENvpL6KGanf+tY3vv/9vxZsuXfvns6uRxQIdxhTjRQTeaF6BuXsA3eQJQcW4sm2XoUW8OsRCxFb7w2cEUE8HTzVF5lOTknH8x9++KHdBiRmOehXeerFAwzTUTZUUZlOc6hUlltDc60yLiJi9DD/DqZynwKlVFZeUV5R6WQdVGM55HBz5datzefPB6tMFZy8fcdWdDdAo7OEQykPgHn6mVP3Wx5oM/Zu+IYQPICOkB6vKqFRXwDWsukYJLYgfLQAG0aKjfEJEtiwIvXBxxQFEeE9DCbiUcIul7vTTgiKV0EFG0atsGYdrMT/WkAFjUOXgasLGAAD2584BwOYkmAebB7Ahs+xpZJVFSHTTlws3kyLF35f/OKXsSU4KSjj0qlGoFeGtKvXb+3Zuzc3v0C+Q9H1rm766es/J4B5Odk7d+/Z2FA/OzktPtm2nhWUuyY1AnLD/+CDD4CKe3Gd2ZOMaJM48CDAm0nWsUxpG9j6Lm/l4nKLsDxF+Xm5Lnx91NZqg+tRaxtuLC0vCwlQpZew8wxcDC1MCEtZQVK10Gozd2Zu1k/uhaXmxOAYTCxpfvWMfjH7GpJn39CngAcsGL/RoDLkDckhMa6iOlwgJ2ZFgPglPHrw7RPX0oWmfHujER8UisvHvfjWiKZGRkMy2qzMbC0Yj2bNanrRjuo8oJ6tREDljRYK8jPwq5+gL+5FOz6x2OvFR7N+Uh6ricuMm/INJG9iDKCrQXmJy40Rh+Eqf3FxWcQCAuNu2tSIgzUI6TxV8KDlWBPhJBwJ5rpqSTzMxIFL1NIvzsOm2vSrKt540DV0ispwaCmGTdccZvGsLyEJ/1lGSqaBSP+vLoTKUYyPpS/ggIci1onJD5lY9vQjZydgfICNz2BD3gll5pamU9JCtj4MQB4smoQxWDw8edLDFl9fCqsF6/jRsekxCdPGJuSxSILekMkmgY9TSCgjGzYK84WwJws6d2lIZlo6OpqZEYj5hZtB6EiA+HXOPHiI2MPhwkxLGtvNBM8VLYhFFdZHuqmvZ9j18DwierdwU9LBxeSkDMBjEBMVkOqqaygsEed2eE1yZlCyGmi0tEIpGBEFZ0UFb/AJAI3oiJvBMLXjTzyAuFgL/uP1ALaBYSSGcz9pbT26LTtmxZhdlfHBGJCvHUQkWgogqKbMQPjDS6pKhkGHIjkY3nnrjT27dtutJ6zDgwN4wgo9Kz2tcdNG6LNssOJH2z67AQUONuSg77UrV+gIMkENirA32WzcvFn635Y7d+lcHdlswWmG5vy3BTF4JAszc9iBsfRgiFOIvlOzU4GN7saYmZENTqtOAD7zzLOqrK70ezk5OcWUNyhVLCSoYzrOjAUVzoF4WVERIpLRgnfHYCO5D2tUGG6938qHETqKPiaJuflhlo2TbZyywh5AyCMS2/fKW9SnpSYvJSc2NW7CcQJOsADNJes8W6Rsxw5gTE1Nb212nKvYLhdW5LPBMxyB6GYOI2hQzd+/ujLFS4rnuTDIFOkXofGTH/+McSaFOQ5nAubly83lQoN+0AlhgkaksUuOK95991fBa5WUbOKUSAE/nDj+lGgoMT8t9+4fOXK4qrbOsa+p0fGPPvpYKC0RXllaTE9O5KAHBlSzIHE+uy3mhBjPeEZTEepCNCfp5prt7umy/+ccglBU9tbRo24JvUX6ep50kzgxTvYS5X7KzM6UFUwtZRhVMG/hpNkYe/6EB4YFauoXMlHq2uc3vUQdC6lHbQ/hPIbHfjGn3amTT6kl1Or61WtYWkqQmcXZ6jopUAYZsgQH2zPNG8rrJBHu6mzvan+MY2trKrmUKGnEosOMfXauVSy23T7HT6COcuP3EmZgw0qi+qHe/rHxYWlqaS1iKL8QHN64dVOIP+q4FkPXs3MLplA+C64Oy7uMrMyJ9sfJqSGylJ/MWBzKC5KekS2u/d333t6y2Ta6gyKL4sfsmjKtTIFsdCVxFFqQcbiNVSiEQLg5npUDFV5CIIafmp5aTVyzLHnUbmOwyGyKUjOTIYjr088/JaogoUz6B/tm5qb27d3Lc859+NnlKzRXOBc7umpeWlldHRoe3rp1mymLW0dMxcry+stfeBXL0W9uNxd2gv91Z1cHsegEgxJZRNaQCbQEDWY8Y0JA+tgCMs07yM4YtdLAS3JlegN4CxhnTig0lorAJCYEYSSVLjHF9nRCc3N6TXU9VtcLw66hoR57+wkGVCkpDYdc7XSZiQBDDTK4RcKACp8wTLX8zDPPCDRHKXJKgduIcE5jbGzYpmtg3dkpDlSMUVpWLPERU3h5KWz9ufaRwjQKRq3jOs6J9vYOcGYLdmdNvv7662Dbvn2rfkHLTGGLIAcxNAdRvKwlP/3whz9EYou9srLyhoYNjA3haUwceLD2thspzyGvk35NuOJJ6G1+0+ATDWLFhZfGMgYbHw6EuyKNt75vMNhwvQN9jqvlF+UXF4WLRdy9LcZD2JL4+4Kisu/9/r/GM6zG9898aCyYJ4Q+LIdcq5hHxa4nQgcbklKT4ESsWhTW+LCssnS4b7i+tgHnWHuB/9ixI5qlqWJTz3EUpK+oqMbhmAp+zjplfnAflzD08r+IqLGYsQNjU4Uy1AJEm1hNVURbPI81DIWMhYhtaVkR1UoBWh+yagxT4CsZhxk546V1JN2FeSUmbvYoGfzVe2egN1Y4NTWCoHoxA54MvoPu4EpAu8Ul1/iESC2TGiyhfjxP+RNdoJdrwzecYFGjsEV8+67YuTB325UqKC4ZGGrbsKkxKyfk8k5Jy8Srjc1brX61Pz46fO7sB0yt3/md3wU2AsEAvzhUYDwdkURD/vjCeavoispyEsdAAz/8E2TCSDR0xFzROHhINDL5k81t1eSNA0KpKbT9Eghh2+H7w4eO2iJgnRMBd9fICYZVQA6lrBLUtEQV5ueBgOAl/g7AiFytq6+xU6N9gFnb68tJN6B6IDveW5eCkMBCDnhAjoG1zNwHLah0KsuTK4xMviNzw+D3nv+LEP30Jz/6+te/vqWxiZQp7zo5Urxt+67Kyvq09Fw7eEy2f/zhjw3dGs9SVJROkP3CoosXL/V0dDIrWQsQeHD/AYGUWZnp7gVriI7tAezEyRNWsCa+j86dZU0NDfY3bt7o8kqb8xLRz7hcaHrKAScu2v179wls0H6lqwmW3SY229HVY1Krywx3WKF1YnVRNrxgBdAzIuEiiutZh0rOjMQ1WA3b5dGHfR9MB5T2Jw3ioxWUUBfbQZyf8I0GoQygOEkBTIkP0N6ffoVivdCGHtTVlD9VcSUT37BGAOONb3W9V9K3fj14+esqoTrTKTXAo4CPuolJCTDOs+iD2H5iC4FNmAxLRdTG+lqqW7vRCc8po5YyOgIG5jPXApLVguqejYtp6ztCSzDy1PJsaJQajWOY8dBAhXERzBDYKGDzEwA1rjD2VdderVFoTUWow6ac+/Mz4U4AosXJqrBGqADf1AGQRKFoh+QbGv4zhLToFl6uC9Y/ULn81TJ9Qi+QoIhWVNiHZwYPDQ/2U0+Gy60lC3BVbQU3qrzawKCJ8vILu6I4ObGMIk3B3/mkw6k4EedApV5hxqqFvExNBY+yE1o7dmyP6LUUgsm4w8OtriEtiWEaozNPDC+ywQwNWBobDy1EBAIb3lH32MkTjqsKA5BCbmh0iDI1WDJpWWI/0WjwgjhINDKFuPkPLYryC92rYlDsDFs1WJ9d67pQKGJ1sQyU2bxRMpk8FyFd/vwq10hRkUz2YW9EalTkgBzounX9BjSqrmI8jw4NDgia0jKd6JseN6WlZaRaR7k9xIaaG4tVB3bMD6CKORldvAyhVpELyp8yJgmq4dq3QeHSIOZpbnbWyFA/T6oe2aDO3MzY5BwfNbqNdUEFs3eJ3Yb6Oosl8sEAvXD+HGSaR9F6dCJc4WTIgI9CpObFe6AuPJu5zdkCxDJTk5hopkY8JpSZ1tM4hIOTctcv7U9HQCmCarNxSxOrF0dBuAhAlKJ/FTDfuHuIdcjmENGrXywNY7RSQnICK4TphlLBvBtyH80TU7jTxVGbMvFj+HDUu7S42LEkvd++ddfhKnjwk+BairK8PJwDedDWpi8q0l6n2Yujwkl4y7zHD9utrsbsbFbXugEakPm5+Q6PPnf6WSEWrffbmux1Mg3HXbSXGpv+JDFEm2eHbOgxSxAiUJkkcJp5FzWPHzspJpyFgTTWD3db7gScJyUwZQipU18K45wvvvIlJsKf/umfcqRt2cyBmrOWEK6mYoThE6eMJCJEGmegzFMcP//jL/4CF0o5ZXd1cmwQ/k0VDBq2gmWSKU1oE/QyU6oqy7GTud/sBUg+nvGJMRYetPNgnT59mkSIwbV+oBipObWAjRYIWllZpcyRY0cNKnBXTo5OiS30+sSTHGB07SUdS9C4criHmVBbtzR3dne8/eY7J0+dkHa29WHbpg0bxXI6WcF7bIdQatqhgUG7yGvJ687n2WWSjF/cNkMZP+Al6YldR3H4wP4LH3/k3BiYv/obX0bNT69cHRt3d1uxRSPSOE7ZPzSIBPqFUjlP6htqe6Kro6yOSF9T81Y3YVp64SVVCJ3/ANWH7qUSEQs/+5O94r62z69dtTZgKhkjoaBDMK3LZklHMBdSknCvWzAtogDp5tGCglzfRAbDIyKmhSvIISDsA3wbdRdmE4znxoN7bXedcFCe8Nq4Ut79iaQe/nWncToQoxJqezO25hXD2L5JPS3qwfIVwM50UYDcUAcPHH7jjV+KxQcqAs0uzDImKBlEZ+kB0nrSGE1MIMQGYjMOHjxMXi5e/JQIVJTXwgNCGyYVAQlWWdSgs0kkkSmMA3nTHQEka3ZXxEHt37/XnoABlpVWBSU2NiXUBIYtTjww1q0TeASff/5Zqz46pKKqUo64B60PtzQ1iQCpq63d3Ngoa+95t4ClJtPhrCG6zsWLoiNEvMo+CQw26+PHzsc/MYvAgJyhdgIzMrO8kdqFKUlhckJ/+ME5SoY/kDySawe0VCQ4CAp+pg86WpBYD1CM3NXN28POA3McNlCZHjhy+Fjk499NCgjdX/7lXz71lBMpxVj6zJlfLS1wqcz/1m/9Fhjee+89SLDXMTY+IpLnQWuLuR5ukQb2VIkuGZAyaIQeI0dbt26z8ODaoH/MU9/4xjfkY4ET2ylExhixAX2CptIk2AGgAE0l4yOjblrlnPr44ifXr1wtrSin+Ynkjl07rWm72ruaNjcChn6jRekiw6Rjo973asq0bLUACWaf7u4uWQ0oPIJDiokwUGUBNkwKGAY0Cwx+cXxoCKBqaXlgEWJVY9NSzKctOCsKEeEcVVZZlDBB4xCxZrvy+TUClbiepBF4ZrRo6uLFCyjFZGSqssK0yZjCgdYYoOVCP3LkuFAoAqJH35Ascp1zyq/oYmWItzEkPAM4xPTPLdxpuWenS0mihBudcqEzHW/A2/g8LNKij4UQMHKy0lnDeiRumBwerD0MH3twcNhV8Cy6CXWQhtfjD//w38LGzh27qWiZxAQQsgLd8uvQC3MWw8ADW1Qcl5SmmgIG8dQ+BiDpEE7GwUMFeUmvIoSZV+O66O3p2rRR6vwq0u1PhlCwP1NTzKcGCNt2INXFq7SoN5Z8gohiYvkm/nCL1uhrHkQ+uCXX9hngyk8wIK9J28MHIgk5U2QG4Re3IbXJZY779nV1d9+9fY98QYjkCvOz8jjxI+a88NIr8s84507bF5e5AGA2XchDrkudF+jP9NQUBn1PV7jJ5M6t24KIzFYuMoI6jipk/S//5b84csCRTttQ15hTcn+qjz1AaV/85AKyfnz+wlNPn0Iv5zRA64J3ppToO65Dcf7u+4UuQ7C1myK7OzMUCoLJHeJruP2Dxc+zn8KwT0rmffRS6G1Y00rjEzYFWDkZa+sJEpUL90lNC95E3Iy5+eMJvOqOoYbSaakVJZW8WQNDwSehGLSuLoeQITko8Bl7EQGi1XKUmshaQqyLSG0LjxB6pMkQTeTiAeFCKOQDGCgj9prCMnhvei7cnIXddWGJYmDYRewa6I2Q91XmiH8ZVwrfqiB4xYS5e7m6FnII+K+W6Wj+/gBh2EAMcepoD2Y/aVmPxuXBtzdYH369ZKz7E7QkBy/JhM26hY018/ni0tpyiCpxiQduszGrNaA6D+7bnb3+XEtIzhvNC6fZVhanR6cRT1O43OpLFL/La3Uh1YaSxuYzI9fKzDQp8cwUhMPgnFtflXWPF1mz1myulHIGPARTDA3I3hHIIV1Mbs7mwgLUdFRgdS0hKz2zu6d3rjWEyAddMDJIYgXMLbTOWVevr6wmpKwlM/3k7B+bhF0U1uPJp07HwS2WK+MTw0Kf3Ao1OjSKCg4UJ/Gc2FCShWdJpGlYQy+tBOt/NSFxdEIjSyUlKYRcjG9aRhYYWh60obV9c9kz4AfxTXjUPeeWeKv09MVr125avLKcVhaYGjXIFA5IJCUsLxnC4uBgr4zdFaJqasLRxpb7txMTxPxVNm5qtFUiqDKOjcug41PlyS4D5PZduyn9imq3zxTRO8sL86Kqdm7bjl7zM7MySaLRmlwxgotSUktLiqbGxzIzUgRi0Y+oLGxDUna7kGnrqZZJXCSi3Jzs5ErFcjgwimjMaNq8sa31/szUmrCfgtycDYL1KisHh/oyUlLzyktmJ0Zc63v88AGz9c4d242XoqYLeDcnRoZtKwvRM2oiXVVTx8NBzj1jyPKyIrccQBM3kiyFTZsb6BoT0s1b9+QfbMjNh3gHamUf5yUqKs1fWpXgYsxiRg5SdhQT3AwxMjS6oX4jrSJEioqviLImt9y7w8cgLalYYwpo86b60ZGBIJ5Ly0OjI24fdHi7ISUVNRno7R1dY+PTyyvuJFqsqGSV1bBWLcPo0J6+4WNHT92/3yKc7tr1G9JZpEYpZdmy1BMEmsAsS6yORCVOTYxxn7ADVxNWORnxZ1l5pVvb+Ovu3W+rKK1waWhf/+jmpqa09Oye3sHykvLRsdn0jERiV15WZXUtOxAJ37hhG4VOVPfvO2B2F6dOY+KTF1/8MtTZCmOUlG8WubppbmmJ2sUGH378mazCI2NzdRuLHCKQgobrlBN2z64dDiG8+fa7EEjV0vV4nnUi92tH+2MRkwLAujoe7dreTIF2tDEXNizNZly9/LnZ1zYXeR+ZneNBb2t7qGuxVO0dvaTgSe9wZlYByyArM9GxY4MtKy6zTjDZNzVuKSktozb5j7kx3VF96NhT5qqquo221xZXsfqqaQZuKRz0woc8rN6Yay05DJx6YYoZFAwwx4mqVOs4YX5xeXNjCPcUcrp3/0HXGwfHQE620xRu9g2pORYWcwodeUybnpiGbd+4V/qpjNSUF5971kIVt7S0tvER/F9++7v//b//93fOnCM1Akn5iYZGRtklHQ7CJvc5OzQzOz403IdLg3pMTRKzdLflPv4x/QfNuWiDJ2libNxamsoiayxU+AmTdHbGwMAE35X5iVyfef8t/qqdO3fkZiV9/vkFPiwwsK0diLCokG2LThMBBdvcRfRjcUJxV/cjhyPzCq39c6ZmwyEH+pOHtaC4gOLi83GfsEQFYYlYSqFmJCVkT40tpCfnBns0RBWblVdThtLCBDkwuDWvgLE4Nx9Op8zM93V091eWUZD5HR1dwJ6ekrgsN2HdDR7lM9PLxmvH6dNPr/z2b38XaUzGtg+FUPLgsPJv374Jt0BlVQRMtrR4Rv3Gpi1OqjxufzQ6MtbfN3Rk/ylnXitKqunV3icjnZ39UhiMjS9UV9bZ/8AhIrlLi4q5tDLTkx8+uG/FuDS/lpqUzlDfHGVzut/bLVFYQX4WS25hbqq8pGio/8na8oKQrbt3brq3YX1tcdOGpvmFmYkx21Mb+nqe9GWnDvR2zs6OZxTk7961ZdeOr77x5hvNW2qXVs3mSwurE2lZ6x3dj2STeO6Fl/R49uxH167e3bv7qDNpj9q6ensGxAVRj+fPn9u7d5/wD7oU2o8dDZxJrYkxM0czZGHAVrNJHK8qg13npufcpnTixFMSRknTLqL13p07eInbsj9hXaJDfpzBvl6a+e1f/oKTeMeObW+/8+Zbb/+SrO3cxaoe44MQFcMuZFfcuWMXqBqFLI15Ec9/dI4NdOZX7+/dv8+1zHa6GBs4hw9o67Ydc9MzDHpeJxTBnJ9fvbJr5/Z33nr96adPEeexkdSKsiI8wIy7e+vujWs3GW2ms9YQjb13e/PWguxcGXWEjI2MWTD2eFldUzI5NWJrKic3k1fRNg5uFwTP2JXcTGiWOWjv7p0u0pkQZlxQLEkG9Ws+4iWZn1lcXlg/f+4Tdl5ZSSXjNbbXGXwzszY90pgEtbV19jYqKqoXF9aaGrf3dPeuLCeePHH6woULv3jjXUju6rrn2gMOL6zo3ht+wK3OOuzeRecLQnBjAK62ijh89AjjhG5kGjkbObE26TBMZlLm5CxCp3b3de3ev6swpcAcevHyJ4xLoxDc59eK6gqptyYl5M0rZIfQhCQLtvksLl/+TEkszevhpQWnnW0WWX3tNu5Cm2EPH7fdvn275KNzdD5moKZIvQ+34nPPv8wqPXDwKPvIIYL6ho3u6KxKrBifmIFDq0rX/ggxsqszM7so1HNyyuH+ofTMrMysHF5CVoBTHxjACoEaNPvgNIJJ2K08hc6/++57o6Puiq7Y+P/n6b+/+0qyA8ETIAACIOG9NwRhCJKg90kmTfrKrMxSZXmppW71Uaul7h9me+fsnP0Tes78NLM73atRj0pZKlWVVFlZlZXe03vvCUsQ3nsP7Cfek+od5jcf3osXcX3cuHEjYnPDxPhg6VpJb08vDdULowOAQW4xmzHz80ePgoTTleqYKdkQU1OglYGmh+W3mCqxtMYY1QAAjjhy+vRZfr8FKvoyTXNwzZuaF3na1bt953bCbGv/sNvemszSMb/mjhxIumPXTiHXh/ecF55c6viFu9ftXJu5wVaESamJSeU1mwaHhsoLbQ45Y4jLxG2y9K28cnpqxtDdbmA/+9kV7r4u6fe//5DBMbxhzfAoWKpo+qKpqVHv8NVXX/L07PbWvHWrydwHj8Oxx3wyezEFvk+PDw10kyv9Zmly6Y7maJJtYjSxrqaUfsberd6OGqtaRTSEX+jiAgY/OVrRq6LVsNdFWHHFn3MpiVLIGnR4Opx8zpNDHQX4rDxpfYbhLM3nwXjordiq5tJS0jjQavCtaB/I3M/MzRh0cq2U1Ip2dWwK+9MvvVLMEwBrV1WGKpwSvzFIZi+UDIMXDn5iSJsBqZKeQ0cNQoY2tzZAV0/kTYaaIagcCEECTTjGr3SXXvlTGZ97pUWXG1UZHoDEcwU8VNIluIhi0T6bYesDl4dqVpj9Aj/IRVB01SqPUF6uqJJiGNDxIRLFAwDs1N/gbjzmRmEk1YqhjbkNxtdzNQMbqJ4roEJQqd8FQq8UgLhKxCoAoH6IILJivqK6/sQyrwyaMQsMo6MjgDRXEDMrrsSvV54Lt9AZbWlCJXjtq8lo/T5SqE0TkHXPRvgEGDQfEUCoEjUYY/T2DaKYfjcGW4fNXvgQ8UHFjUYWIEHf55IBrJoPlQQ5CVM9BnWi5tjq896+HhHKoMzffAkv86Qz0ws9vcFiMtCeaM633CPmif5AFsDgjEdu6i/My81KSzfnGqZf+3oC7Zacn1KgtxaBMjUvfNve0RbtghUt9nAStpmrlPV8GiSS+QRUhMYRUVU82tWyQ/qOkw3a29tWFpeTDIlWV3bt3MZYyEm18NaYdGU5bDS2uiicU0nTGdMd27dZpFHEEywuNTpnUP7+7//++PHjugQ0F9UAhnVgiI84xu0XL14WeVKJEc7IwBhSyMWPkkpXiorz7fV28tRxdGXQWSickk2IL+4lLjY3bTXzA1Fdqfg3ypNGokLwsACFtaVReHloqLb/8NHHrW1ra6tIF3PQvgcCbP5Up0AswrKhbCu+Z25MFxS3PzPim5bFUDTUt2mFGDARiB+rA/EjEsJaaRvT2Va8kGbDT3JvqIZ9FvSbfGQ9WAKuld7O/YMH95ZX5nUGTLBImNVyfgsLi2zRjYOOCfvVr34pQ0AAjA7y4URY79+5b30qkuo/jC6e9fQ58tbmku+9916tuXyHDlRXOjPPsNrJiw8fPlpYWhMho4DoBmCkYGeRiMyIk3nuz1hfEEpWwysvviQWS6kN4WBx8ODhuKM9+tzz+hJdtVkFERpfocC6RCLdn75hPT/bgMdOxJZKBpducdGG95iydfuO3Hy7UHcgFNIZZdiS5fXXXpGrINAVg3H48GEkpX3ca36VgRzeYQE5N4+Xncu3TtXr6/BwExPt2yN6hEF04dz5M6YyPA+Tv4lh0sZcE+1wj6F+VaWTJttkw1s9H06hPNYQb53f+MSEoDKTTqQHBvsqKsJ+LHa1U15bA/3DmL6yHKbLzCRYXFtaUmRH16bmZjVw7o1eWCrSxTmgjySKVyFHEVIs25KD89JS3KtKfjz/GH/FAsEgZgxCo00ihwtm/+hIcbFzxjbIwbQcyCe0g5cZplMSbJmQbdZLJN2uCXOzYkOJ2AoFY9q+wT5CQmchODI6CH77AMKaCEnm8XB4aNwMEr5sqq4yxWilDd3hA/EwnEWQuj5kigu+7tq5hyKwrlxeSgoX1fYP2WGpH/vg6yERUj9k494ElcwLERW4YzcJaqzdAkJpUbAei06Xq4xyeIyTGUnLewqkBWSHqS3b83Ov9+w9LCBqxoblbGqs14TmWICeZ2F7ZQdlsK6trU9wmdacvXC2eduWoZFB8DPIBpOApOaaJsPBwI7aHsQ5rGW6S54W16rzWZsZOdstOGnGoVR1mxp27txr30Cgkh+rkTn9QmYSHlt2bLOH+NDwxED/CDXhbcTER0Ci6BfXEJxs+5D6oAkG2ZGVdQUeGgJAcixu4iwFYfMNdGkT8HSXyrPzHGKLB0ivGmgZEZUByLIhLJqcO3cWRsTSn81bm+zpefvarREHIOblqb+qpoafZ2OfuoZ6p0bwHM+ePQ+GfQcOkZYLly4K7jy4f3371mZuVggoNITz6Vq27yR7UpJ0wu+8847uycmvOiYA2E27veORUE5d3WbmTnoMa3b+/EVJ2Lo8WYgqYQ8NFzGdueBr5udm7tjeonXQ3rwRRgU8F4pPunQx8pHe+s6bkP3ii8+gz6pXVJdad4FoSCdnFilk/GMWecZrlgF/z529oIBoNFwQhFRoDn9tBRH9OahP/PzzT9kHW2NHjA7rehlVKHT39kg+VJv+wvCSneRTynOjrc425mjysNleIzeZnI7BLi2rGRmbIMDoLOnOQhG8YNsxl8oARutUmDQCmOo97WyHODlnoHRtmMh04wV5YKxoCk5RfwEX80iSoISoYaEzUn+MDmroL1QIYBy3ZEK1BB5SwnOnv/nCqgyiwTTpKTUkHQgXzD7pH7l4PiRXIV+ooNjZyempifcf3AUtGEgpgONujtnU16ifk6BdIBGqEAPNK0IluNApxhBg7uFIYhEZFj5HavV4xcppK+hd5KO6x0TS7nmcpckIaNcTHzLRJjydqSUKIBFao+yJmb3c3DzlWTZpZfoUQVhGLnSmmRu1a9tx8CApgM3PoDmyMDtoAgCKw5Krn3kBp7aYEd/SJvDr/sgDO6BaYglmH/plz2EBAEYmmYT5IPbSfINh0HDRkPhShcu9h95KgYat8h6qAqvcqEQv4nNXzEglEd3GQipXAHDKwMSfokHeIq5+SGE16DFsvwkynyCuXXzI9782ql3/1qKVUpnAEMvkacdjIJgvW/SZYvwWwIgAX2X3w33UJfDIAalHVJ57LDyGE2Y7UAoKQAKJdjWqZg/B46HWfeNJ7IYCW4WewC7+MCZFLAd+4z/V41JGyUCoqIn4lbaQnpD5k7D6E0GgbyN4POC9Q9xX2lWbVy4yoYa4s1Se7HprBUFjvfC2jUeGcQHWCtBtHFUAbcmoh8r7FgxGQ6pVhqBAAblg5218DxgggdlXnuuTQtcdTXb7XHMufwIGqERZ/SoneW4IX4RukgG92gwRoh978C+y65ofHRpCTM8DKNGwyqlkNuIhAmTdmBEj4BhjgWgQp8x605gC2gVPpGzJUql07zFSugTc0wKmxH223pTdJ98sNdru3NVy7+5DXjLzGg38rAd4IEKAYuIxsbxpF/AAtj//1qamhqZ6b8V7nH9mgQRJppUbbaOenCShi7tv+GJhNHIZkTnp0ORMjgM2M7MQIdiUdQnm623GX1CYX1FeZhzy23d/S/ycrVFeVlRdXjY4OGAzO8N6ESA9XHKSdRRpZdW6p2pJkyJJnvPRdQxI9fvf/35vtOkkZkk5wFx2DQepvQgQNqmZByDOpLyUD0QIb5+ZVF1fu6naMEklOh5LvSGIg3H/SpKNYWV1kQSCTfvYPh6Pbxkmv+iJwl4xoJiiWvUI/3DopRXq3ckAsC1cNulpm6k7N2/pCZwbeu3yFaMXi/DViWtieLLrNA1TcTWdFkZrPYqPSvfMwmuhX6Ep7CYJDI3N+D0U+CFozc0CLWFWTafirb3nr1+7ybHAroWFsNCzrLyorKxFtURRMa7TlStXyb/sCOCBH3MBf/jwwd/97j3lJVeYDpI5an2VbYW415euXAabiSMzTnaP5T/ZYMEOaAYA9fWbf/6LfwKJtUMql9R+6fIliMsLx3lOkqPaTZrq2ww24MKdRTTDEhWy1yjGPYKavllPT5j5qVAQirYIj2BLz0jfkMLlml1YdAxvsLKhKwnH5/k1osvIdpD2I1E9RLt147oabMP/05/+1L5JKtd96g71ndC0eBGh0Fz/ip46MzVQdgsNBa7ARn6w2DBSeQXIqv4DHyNNn6Qd4FQhlqGk8kxBbHMoEaMER5qOR1r0BElZME4/pdWvCJ/zBvTHghLOJjWfU1dTGzRxOpgXCQPW6fIOg9Nvp8vScquh2EVaZh5czgBVIiF8Dqpsd1eSjFw6YAkPkh4BYyaQ87EhPZPpsnSbcOI4M2VwjssQT7ZfTK78hOnh0afzC3Ivw9plHYhtCWTIGMdfu3rd1IE9DkiOoaBRjEww31rAwNiUW7mYkiQiWVCwH4QSJMT8zNymp2WQ6rWcRNMjQkWe45p8y+Sk5bQNjkBJ3HfggC0VuLAypqQv2tkALrIniR8ALl29woczbie6ZD5YkuxsyqVOisxsMhfIiJies6sLC7ePPHf46pVrT5916WBFuFlIo77SUum/adk5GRNjYYG1Qdrnn3+OenKHpBzOTM/w0Z87eticITlRP4qNjQ7j4Ab7kUfLD4zWeQbapd3bd2wTf8NK2fCRktpsNwx7+M0ETLfooQQM5UUf0zPXl2SWOFx1XWIK+Gem5c2ubm3exnsTCuU2QO3Bw+DcExLHhrz40rdu3bzHOSM86mQ9jh07ZsCJqlSevdUu0UUlF3nQ3xI5LeIFyBVGCjLDxXEElRs1k1JGz1cS5VHMyC1kfqYEXipMGjEFMMjIx+VYawtxzpw+JwXZ8P7q5cmbN2+ph3qpdskwe3JSnBgwiENHHJ/CJbK7VF5+Vk93u41cuWvffHOGmCnPFulN/KpWpo3TAHj/hka/+tUvqmusZs4qKyt/+OAxvDJLsoVjxRBgBH0iKldQp8NTkBIrbUTyT3eX87DKWj9ts8rZjGV+YVFnx1O48zL0ODbSFJA7febM8OiI4z4ystJtVQzBiYlJ2KEPmFXOFklNYa5FuLVr0TDskAhe4OQckxwqIDQDkV//+p889zlP2g587D/Nopu6aGaKPUxL21JZYUI3yUZSfQsLLdt35BfkMcJGBTYnuHDxfOuTttKykueOPE9VBwbHGUurFrBGfPHOrVvyPMvknQ8OclE1YR8L4TmRFPKPgHZpxjLWW3miol0PdUOMBhLpiBkWr9566y3q4M/InUsQGiM8LoUlmLohnPytvbt320Hf/mV+z54+bfDPdZYMrAYlhYrcNDbVo5K0VXNu7Cl7yD9FOodX2H5joC8c1YIIJIdEoQx6snsKEGCjCFrDJNIUuIAwVlIdComiei54eRULs69gxP6oyocurDEcYpAxwlewiyXHyBZHiBmak3wc10RYPp4ccr0sMlcY2NEOUbys1bNnzzDRBNsoLjocJt85XxaJxanU6tQ0e06dfUjS6CYIWRV0YEvZcDi65ybEwIAQ3/3SGnT2CiIqUYwKoLC2IC6hIASG4QlEv2BFU5+BUgmvXEF3/2VIwFEOjcXaC0NtK6l2Mgsstbs8xHKNqYFFsFWL8sDyoefBPYwSjTSHgp5z4LTiHkV4V2bk1QkMD+OvQOwtTJBe5Z6rx42ju+xs48ZF8QCpZvD6k9umGMceDP5EQT2BNB8z71Z7RuVDFNlbl5Ig9Ms98qsSf2pCgYhbwfSAwVcAAFJMKH967ld5TbvXk8HaM8C7PFd5bOt9rmYf4hkpdOGBoXZcRkPq8YsCqKRY3Lpq2UoapV3kJUykGYvcqFZ5lAehjhl33cRXjEIE1TKM9CVaVxVgIiDDrw+Ju7fuybR75U2+4xeqoDZEwBDjq0JP6DOkAMCO+5yZBptiVomAOUk+aUKiYDmo9JRQkCrDU/Trud1RdVda2bgxhDeIDPSVjIL0YYUZ7FAAJChA31RIPy2KEmlTzKVblfSrS5aWprWy8lIKQwdiSOiGJXeVlbU9T7uJu9ACE8nYAVhVencGUUmf+NUW5wYLeLeJiY3JqWGs7yAk8+zO5JMEUlFapaQQZ+SsmOQJx8YZJVksnJmVZToP3dBfVaHfzcrOrsg0TS/oDgYnGBQUOioti3YhiWM7SY2DurxlBHUkdtngexkpXrp02TBLR24XVHvDGwbIzCZ42OSsFpXDDkFcFA3HiYEOwCiPoli33dc7hG7T66abtjTo3PXNdBBRGRpmhR6AQXlUZSwCg8Lu9blit9hHHjzBI+xjJoiNfgXArKeeXg04bhThiV6QhBADAsDou9Go8sRJ9ybUx6Eh0rjpIXvX0rwFzdEWfVSuLazRkO7KcwXESxRWJ6+UPLS2t9vKTeviuPCNYJ5GfGKGTRrFcau1BA3842ZFEpuCNQrbj0R/IKTK4ea+sKHYGhygzA2CK/xLURNSKpXzzPkL/CrhLllVx48ds7rAmVbUQlL+zNR4w+Y6ppZa1dSGjh/lEQ0RQGsMI6aCGkAyDgEP+L0FPzbpkKQnyEXGL04hWkEEUlElM//8z/+sdVjHs9WGAfv271kuL7aeLrssyzS3Hfura2ooL1qxrygpzE8jZCkI3dlDBKEIjDkEYGjXgbKIxjshCSABBmk0s6lRXRrm6gW3teyGuMLYBH5Ow9Wrl8mbt4YiVBibwEkdVAI8PAUhNpEHpENAqBGDYJbD5icTEkvcowDJ9ErHTCpOn/laE7w3xoDdQDGkxmVm0q8IaAC4ssbg9tLF8wilLfVrFNjkWYswJB5eeQJ9Iqoe+W9Ly/PhTKvMXK4nP35oqIvzh+laty09uSIGZOPK1QvqTE2zh0bSdEhFq+K6eSLRxQJruaGRCixRirQV7qMdx3kDpbKw3n3vN6ZEAEAFhKQQn7TAEeXRMysrOKwmd0+ePGm1cTCqC1NWBtfXNeiVzIxOz8yOj069+dZbD+49lHkZ7PPIoOGQSQ20ZfkdSl5RsYkfBl9OgwKgdZFPnKU+ntBlpolSA8POVfcf3Nm5a/vZC2caRhp2792zbn2iSSS5UvImyDZjSNShn5kh2D/okHe/dEpzTx49VpuVPyhJXLFJQyjJYcIpT2ybS3h0kTplnCUecNy5cxfYfIhcjJUmGAOzDFohbM0tW9Sjl+7vG0IKLktsiG7evAsF2VAkygwAH3dhRJZmKgXEQZWbpCIP/CGA+UVP9WsO07ks5Aep1Rw5oGmxzAv2+xaChIrWEAb0IZyk0VcgJH52UpcKojyxRze9QySxS0RCSSN2cg4MGFHAlu3hyEIQcgFNoPGqEeHajVseigAiWsuOXZoT2SHbTGjiunAoO4GprtpkHxHdN9+BPbQcjr6z2KdOnXrWY5eYDtMO3//+22thgz5gmksJkU2pqpxjdhVU7Jt5Ocuj8WLfvj04a4kRk1JYWOA57AQx79+/K8bBe1Q5YaA7FoCKWP32t78VlefCQCpznT0YxisqKt2jm1CuhrCAqvLtTIjhFwqE+4Ji1gARtAhB87po7tW///f/HgF5PsiCgIwAgMmPFZrqNK6WgebJlctXVQsw5HJQvcVU6IPOdZs2v/rKa8ZL4vcsc25eMruEaDiIpAYbilFD977VnPqxm7zRYq1YAIPF2nXPmMOdnFNtD3UWyuC41qOeKKyNJJ8QhAWMqGSsIwr4k1CpmS3VnC5GjAOJbIyhLTYkFsuI10ss87Nu0zJ1TgHTqIP4dLWEjUFLW59gFEeuWC3CQBEgYoUbSCASCkRnvWsFATVaVGLBQFjASThV5S2fXouAVwNI4uC68kE7Fsz52LE9XDHKKvTQhAlKgk0N6BO76VBjJItLKuzxoBd2cUTVL4sVSIhpGh/MxjBQY0kIG6bLnNQP0mv2TZ0gx2tgaBclCRIVI/yIDCQ6oi1MQXAoEwAPYy7TJn1ErFbIq2dRG4UKWTQkWDnz/yryWUinXw7H0wLLZ+pyudcSqdJw3B6xwzCvlHHhqCe+9EQBr5RHi1g5oSV3htlRzZLc/uVV5FMSJl5ZW+MTTSBKmvNf1yWz24sJAQ5vbZ0u+cteLnNL0TSirdaWVmbDYtN1El/Wgv/PZQ+G1WWuQjJ54Epulj81EbmbhlzB3XeBk557GNqNRjK+9ydQ4/IRqKEkwrlYsbikt+AhrCoPr6PZEt+6PHepLb68Ql+Y+sQ9rfOL02pT2D0rIBwveIAHxALlY0qqOW6FPmgIPZUHeez/4Zb+SXiVH6M5ACuDX8ooqQxQIeKJJhAnZo063WhaPS7sUN5bv4jvUsAncdPqBHnoNSM3VD3g0YqHMR2060MYUU4KA87egX5HxFkHYlGKoV36ujAVtbwaEpOk00xPz8jPsnOPXzPwtC5zQxa1F00AM8BoMqEiDL4i6EvL+TSBHmpI5eSVNwAYtRk18HUsQHGvxxKus4zESSTgmZ4OGziqinLu3n3YAhrLanVXTgQoLq4yaEacnu6nQdxl4CwtFhcWZGxIt5SC1Z6anXx05v6mmrrR8ZGauhoBQinvFk2q0FI8WcuQtRxDDFjfwIQKSYbx//KyRb5O8jI/D8h1CWvbmrdISayrqZZbsmtni9GLMB69qq2puHvrtn68ty/F4idO2O6du0gUUgwPDTU2N8e9suVBFJEjIgwsoEiN4SIsytenj2VlHhjrGwthuin1IaRznLjCVy5dECLRA8mwlJKBesjIacZZigByXbjtorVIxkJ3W13LVAl7GxFYy4u2zz132OdMDAJyiXS3Ms6U1ydVVddKxM8rkF61kQV//PghSqof90XCgITIFqgRkliDyD/A9KA+16mzhgQPZ/FagSAS0f7c5E2nIvpiqPad73z36tXrVoOx72JpzBHIFZD6bC4F3Ug7qwc2QEahtVGQmABRhmlmXjX60UcfsteGLtoVj5EBhQ5ARUDrWJhdyzGl1IusEMJw4s/osNalF5878zXlKysqpBoY/d/+z/+PjRqlDEV65LCFHoZYwJ5JxS9W+/Lli3pxtNLXgtM5FQaRL7/80m/e+7UnvCikwGKpyfyw06fP5uf/EdzVCWZrvFSFJkWlZXbKmrIhQ0eXc8dM9KMnFUATyOKOxbxMjG6fubSmFpH1bTp1Sqrf9SeZjzvIM6dPA1U3QAh5+XI8dNUC8AwL+tiD5Ve/+kVsmUUxYaEeFsWiYsADiYcBbO1iunpYODXjNcFglzCLbtJ+kqPXwUdl2A56pAwtlotltKJnMgSCOPAyNmaYFfnhD3+sc/3m6zPs+b/9t38OPJEH3nxkXsIMAJOyMD1vGwAdJLbyM7DDKSwG+ZZVj1thsmTyM3Q0psi5Lm4ID+Z++eWXu3bvkAOANbWbqjKzUm2QY++itPRkwYfpmfFNdVXOV6ytrdK0+TnKMjE+PTg4ypjISjBrYaKGzJMNfj+T0ifGMDAAQuRSv9whQScah5WDg2GqgVTUN9WbDbhx+1ZKYgpRyM8uxDth9eKy0tNffe0wtf6e3pqCXCvUC4ryv7PlO3DhP5FYvIAgjWDNEC2ayEryEBk9QS5R/66nbbAoKMwaHElv2rLpwcNbDx+3GlwJotNuHZssnfysHPeWyNNlX+UW5GI3tjoviE9jRj2MvtKCT2/zBoZL5JuJ3LZt+90H95ZWFk1/25JyeGjUvAqVuXz5CqqTYb2EHVHU8+TJY2vASPjzz5+YwZj5+Z07dj1Kbdu//9C5s5fAb8P1pqZtBIDHydnWRNTDyIpZ+MMImfPBMuAmd5akkfMoFrtEShiBuGcBreEeGPiR3CNCqLw6BWgQxMjBV+QcI3zLjGCNGD/1wSCFIYithlUKCNYoiaRqQBxkUaF7QWQGdp0ueH7Okhg7GWI9R0ryjBosawZ/FB3Iml1nz64+yTlYbPnv1q07gGelKTTpiHwYuqbjM/0iqVI0xATaJ59+vG3rdr1nWurGTbX1epbhoTASYz3izjcjL0Pk8c7dkDBjJ1+rQezah+NSjHp6ejfXNRgz0F9TATClI8K9UtFEUgSjTCSKFLhUNTIyym7Ub240Mwx3mJrqJFckh1WkuZgi7056t1AX0lFPImfa0z26UU+QQ9xcIgEXTQBDhH6b84J4JiY5xfvtKYRTOh2GCPXQUN6DwN3Dh4/NIlITfh9NkcAVtxjzCxjsBiGBiJEqO+85Oef1GvBDxCuXmtk0dCCrMNKd0SaCDUHQAo9IECQcJHjK6E0AT829gh3vwiQPodK0TFFiIF3KZlDbtm4xe8kiaZGn7sYYA0iWC6tZIMw/S73hooBuDhhgQGpcY1oNFzFLbT4EnmJeMS8IqxVgaB08eXlFCQlbwabH4Q7pEGFHPKw9YECUJ4fqIZ8Kg9kAQP1UHgqaIyq/+c1vPASDYgqTWLj48979x6y9nDo8ZXURwewcymC3elzHjj3nEx3BtWvX9ImkUV+mNwEqMqqf06IwLhs7QZw2oQD4FVOeOvtEW+qn4+w5YgIYakihOQz1udr8iU0hwq2QS9XgoKtI4F5FCOpjF4CCcfzXy72Hiins3qUBv6ryBA7a8Ce09UNyJ5RUs7eq1bClOcqEz/51n5/FtQU1EDhO5MzgkEkArzQKAB/6dcWVYBvhVthbMMhMEmMWdVazT7i1ZjKUUT9+eOK5C9rugc91FGnzqWo9V0xhJdWvjD/RMUAYfasVf2olJpm3ymjXcxSMIVTSpYwK3fiW1kFEhYop4/KhAgylexVqFwqEz02IXqRnCOIro7zPXTGZ0V8rMXhuGCmtj42N6kUVUYOHqqV7MZCo7UJkNQDYb6Ca8zaj5RMx8bXozwioBEDqk8BMbpRToV8RZ2Vg6defMV7adQHYt2DzlcrhS4D6hwbtNoVP/HuFZ+fCjloB8dUEx3+CB3gKawsAClCAzranBh+a8wT6Ctt6AnbKkBbJJA4gzs8PQ2p4zcwMioVoC/cZR2mLtBGttLJvT8gE5W1zOEzxs8I04aWXXvniizMR7HkMgSmTDz54ny1j0MXC7aIUYZoODNEdGsLynj5rQW0m8wcSogFmeu1e3FcB87bg14cZpq9PD/s5Msdax2V7a9o7oqKsVIGOttbfvf9o25amwf5npq/u3rsVxjxrSzYgsA7YxDHXXKyksb5Rrg4DoZ5gd0zLJAaRUAPdtk7Kobk298RZpkcPoaMiABiE1Pfu3dcuZ0s8w0OKJvHd0aR86Fu3rnHct21vkoUEVKlQHR0OKSzHtemksG8xCmB0bKaNTHwOzbejSQapBXo4JsNbHqRiMNMcRrPIuDA6/swYX20esjjeesiysIkQefAwzGZgBFOOg+YrLUlXCQL6xSk2F+8E50JVo6MhPBnllwNbExbG6V0EtoGN+wwZG8r1jEeAnmhO+C2aDHVvu4OwWkMlWIMCemjV8te1Ze9CEFLcb33r1bb2J+KRlBIACOv+cVurkskpqb//6MMonWYpbLc8NWma2ODbscOkhQuFKY2ZOSimU4SCjgrMUGBY6S+VJGaw9hzwGtV5Dw2JgfV7JYOTjdHRYq7MIs6BzFqBZ0M45PXw2LFtarPwnZve2z+oszQ8M2jMiYboWtE72lzQFhD5eWHPJcvTqRWXHU3oDruPzhhBHSiOc3z+6q/+ip7qgRAKF9CZIDH0PGzE0cn5lh+Js3pTnFKJEQjuqwEKvo17CB4Yf4uCI6y37gGD+zBFEJCrGTzshic1tXU4iPIIYmxg/OBzeAm56XUkiHqrS9MWHQcDkCgd0fWrWpXYX8XGO4TTarn1SeEARC0iEfYRSwVYAxbFE74LgrtXG8L+/Oc/d0pX2UCR07od0E74b9x8UF6ZU1iYZ5pzaKjfP7bRphzkzVQQc1FYUD6ZM8XopoWjRcIapDw7gMnoWF26cvGqsAk0ezu4wmH6HpD2EIQFY8xltc74ypXb23Zurd1c+/6HH1jhauCwOydfSCL2zh06/qyvl0Wy/s95BbwBZx98/uUX0ZYyuRBEeXQG6RpwYwABAABJREFUPPnREMqgMG4iGuKQ+bz8XBuANG9rYqgbmzZbejq7MG8Zz5PWh7t2tzAalvRJxbZLD77YfeVJW+vM3BxQudpMhPESFjsbAR9JLx55hRHy0JCaoUQ92wA4AJ7vQkgIBqtCYABmePDw4QPpVcRYxyWc7BND8b7BsP9PQX6xrXh4Vtg3NjqOgFhDx1l0g15NS+7lCUmMHhwaZxspFwnkQikPTRxEajpibMksA1IbZEkTVVWbvGL0yBLdJIoEwy+C+GUBkNHnKgGkfg9GRu/0EekwiFQwj35ZA249aZF9ZABAx9lG0RE9ApcRmqHPKiimMnG1+gItEjaenA4ClfQC5EAGPJOiwdYn7e1tNv4Slw15DRTNXJPVZUyK0aaNQ0RkTQjcvfPA/hbeGjnIRaGLhB/lYUdEWVesBD8HDseltNnT+fadCblSNkBxFhWfUIxcMiqW7dix/dNPDQy61IZ9mhO+QxwqDAUVimq/8cYbWI9ltn0kpRQf8TWHFAiFtqHbWl1FH0T21nNOoU9oIWR559BUORwJNpvzj7/8J28RB5poLmiiLTfUX5wFLvp3kmmUpcy//fd/8c7//fdLK+GYEaxBHIZOcxjHRDPC6Czyoiux2AmnNA1BkqYG9bPeWgc2LfCnr/j0EGSdjAcArELiTTa0i+OkQicCEgRkXnQ3AFODwjDFdLg7dEV3T/7JNnlWM5Eje4QQDORceZEa0rJ9+w56an2XpE2kQDQhcEQFZ2ydkAsupJq5QGEtag6CMWCxlGrRc+LNRhE2cDKGSARxDUFQLwc8gh17OIQWeUkXawZIpCCuMTUUw1lMN42DmCDUOnwFOIDEirJXAKBWYLBr8KPHDzVt9zZ1GlEQY3KC5myv8pAlYHD3CU4hsgIojJhkPn7oF99RG2zeAtsr8KOSYoimfh8GXxnQ6kIXSBIpF2aAz+WJAi5a4d4TdcUlSZuvfKu8NigYbP3pW81omLGLv42/okIBXcY41V5Rk5ommknLifaQl9lsNwZN+MqOXS41B2d1bR3lmV9bdCMEa08HRxYoJr8khkfTtpmwaZBPpBpJBAaARqenZLTzyxf8JicG9zotGhv4U+vAAJIm3CgMESJCRr31uXvoxDcwIo5+lVcyLu8G0WP0A6zRcMVXytB/1cIirtbf6lGbwvG38asAdtQp4i5E1B9D5Suv3JMVNKQhqO3zuBU1mBGIw4QA8Ny35IzEECkCrXJYqMFzl+5QK/EFNRD69adXWvSVGjDLr1fY53NNA1iBCEEom68wsAEt1izQE3O+ECT6PtUCwMwBqZdY2MYE/OrRyuMnYSOUuDlz+TEurN7ygri5Ucy8DVezsjaw2lxJwKsXpkACgDrJLgFVQ0db+0K0t623YNY0lBYX5gWN9KOMBT2srqxi6R4/fESgTcfv3Lnt5MkXzp49LS3ltddeuX37rqEKqmg2Ql0yj8VVpkQMn8Y5AZXVFY9bH2sXkFocHh2iwO41hwswgqn+w8AVrezRHwiYsGbOhWsNTjMJBiZlpZurq8o//ezjlm1bLUJ9/uhxw2Gsc1TKhfNnt21tycnOlN1oRh/b5cXY5Y5Re/rU8bHNTx4+unr1GnWQhcfi4ALrQOcxBSMyM7MICavkl5kTpORBUgdi0tnVPTbSbxvEyrxKsBkdow/tFN3x1iSeX4RVCdmIRQiCKEksPVEhDWXKmRKXDpWBYCKVhxcLCwAulz3IrGGwO1Btbb1XolY3+nvZU+aAeTJVaQLE9kFmV1BsaGAAJKpl0Ikr4WStNARZgiGh3BNiQLrYMikZh448r36OiJRxr4SUojVea8J+xFKxjRkbOOgyIuw66r63Z0DPFXMHTdSJm8Tm1q0bDFx7exfUJOj7Vv3klrIQQliLV2VkZW7fumV6crz3WTdG6PvVQC0460ahNu7g0skKs/LSYkrJrNY0y26H8tYtjS+/eErvZQfUxw/HiZnddfX3ho42eAYwZumKOL6GeXv37hFpjvemvHHzWvOWsNQsckQWJMhY8GntmtlBG/I4bkne4rOnndDJz8vBoHyJSekH9alZmRk5jQ2GK14VlRRrEY76IUjp+LEGVLZWjI0AIrBRGC3LKGF12fIG1C7Iy5kcH7dkSPySfO7bveeLL74gaUa2zU0N9BeCKhkcDklxPqdH+g+MQysA+IUgYroUw0psBUNhQQGXx6Z1NqiWov3B73/PRj1/9BgYbEC8kkQYEnWHxEmIwpjWVxMCvdFeaoI1hHx5LVHvSAiVwXFeoxV7JM2kBz/j1VdeQQemnveDQbxtfa0eSxl6J7VGBLezS2ZzFvAI1+raok4Ex/WgAcKc/JYWNNx4985D6RncRFPacod051CwdxkFEUNNSkwQLLftGx8KSUm7KWRE05Phf011Lam2E0cUZVr54MOPnz599j/9Pw4+e9YjomyvlRdffql28yb9YtqGVBM+9h4UWga2IzhPnTrZ19OHknprgocp+IXCEirc85jZGeoAXw5BeUXZ5Li0twyeyokXTolEjY8P099de3dbjWXz8pysPKbAYSBffnParhaw6Lp7x3CuelO1yi1UUDn4w+zr6gpjiFNXrl0V0M3Pl1MXTsLp6uw+ePgARdCT22hf13D50lV73+EvSDDduekssJrJAA/1kfXlfcPzc6stLWkffvCxHVGM1V9/vfTTTz/HNfTUBJGo27zJNBELg+/WtlI9D/GUVTF+ILTUH9d4zKgaCy1es9gmceGuAFli+jxEK1/5JTY8VCrpW246S6hOcVBSYVILWSyOJAMG7UClAn71PBC5deu2f0YCskP37Q0WpqG+aWY+HM7DUBJ4ZXRVDJ0nWtnS1KQqxgo6E2OTjgTetXOPEbUn3MHYK7J6xwSXkLHOP/aRPvroI72M/tNGO3hHEg3E6LXUMv2XtChvrVHBLwjyvw22DQtHxkfsOgpsE/78jvGpcbgUlxX/9rfvV1RXtOzaKWtUBLMiWlCLDhgkd44YM0r6OCARG4Si+14hqS7JfUS0ETIPWj0+80UvuPJ6LtLFHOEOqVOhGnjzDtNQDwvfsrWFVPCItjZt5ZjaWq1xc6Ob5sZmB2L4l5OZ093Z7aRtzb3zd3+HbqPDQ06SZf9rmrdQoqWFefaNQ7xrRws31HT63/z3/8awP3pg5wzbVeWon4gaTmgdK1GPkOgvFMY1Uxa8Up27RsFmZt6vYrjpYJy5menFzIzR+TkT9TbRLiwsQGo9i+3XONO6Elx4/fXXCIY5GYmgDKCqqJ5TAq0CJ6LXrl+RKWqxFvoPjww6c9NOpiDBev0OExEa7ekhgSpEIjRhnxE2lmEuPhkAG7PmCWKyMzQL2UGC4HDxiT/JJyltbGp2mph5NNj5v/vJqamPP/mEnSHQonFYL0dYDWAw82iotnOnLM2sg4cOWDECBkuxdWH8GnTTIomCps5O2Isg6fjWJeTaMRLdiLEPiezD+3etHvzis0+0qKGqijLoIKAmiKI66QKNZszhS2FphBu/hJ/dgJ2qqJWgUljpgkOeasyFoMGQRQ69Gx9rwAU4f7osYXYPK69cnmCGz7UHSTcIR+cDtmnSeTa6+YNLalOg+BNfeYX6mmOGQKZF93Ff7lwspkQrHirvBgBa1KmrHEtAD1tgGzYYfdiiFORKRpCGCLrCnqiE9fcnSFxq0y6iYKGSalPMFd8DA0gEUXMxFhTG996qIbZu6vSnX9T069sYyECW6IkbcSYPfegTlyd+lcQh9SAFSBQmjp7TRMMabxXziwKgiov5VcxzLcJaedWK+xvfeOLyeUzAuBVPVI4yEFFSVZ6bC4GLFY2eQ98TrSiJdCRJ5QTCc38q70ZhCYjo4D5GM4ZNyRgqVhsilAScCi8sL1VmBF9Ei8rDWlXuPWGhYr4DUrvuVaJEQ12tfX8WufARN+keICHIdgBGTmpMOozQtIY4faZGsEx/BwvUs14TtQDpK52ND3WfEj88GR0Ze+2VV23sIkxlwaV4nklSllE+mCW51nTaEcIew8TM3DepE6ktq6LJ7YaNevGUlBJyTcBo6Tdffe0AKVgIIxEBqT7YQfo0xwvUdGJO1vjEWs+zLjEeO8kwL07gqK6skI8mYimGd/L4CcLvfCtbgkr059o6mWt7yyHHSYq7oBI3a+/uvXSYHjKptqnu6GgXEeGJMpeaQCIUqK3dFEJEUe4WsjA6NBwdJE6oX4A8XhMm2AY9QLpBSXaECWa80NO9IAfI9a9t8/I9xtkvDjFTCBKGDCtjjmvOQ2ZIQ1hz5er1sHxQ8nSUk/azn/2MYaXpTo+XdfDVV1+IvYGTCSY/cRlmRRhMlwNCMqbLj6VL50Qq8IucgMcrNtcEN3FiXWP5AbYgjRAIdjO1NbXVPH5cMn6LBI+VDLNkoGUiWQA2V6crvBr3AZoAPzDYSq1DUxm04v8FS93Y6C1f52lnhyygwtyclpbt9rCCbFVlOSlVLV6wXRB3gw6e6FAhqEJg6z+gA3IgqYpjyvL9x//4H+/fv+srhQGJZSZV9BCMIZnX1RFpkLzwwgsw7XjaXW+XwOxcEQXpSdZcinJ1tIXtq9/99T+9+uqrDtHVrg5vsC8knmKfIwxUpX+FgnoQjbRwMrjCSIQO/uRDA4+rJOdBKzye3/3ud7iAjHx0cBIJDOKd7NzZooA/sYk2kY0Xd+1RknRRUsJgGMPu6ae98jkd1O2pHF4xQb766isEN6zCVhqXOhnMpg7VtwiVl1uInvIcAE9ooS/0QqFwFvehaasrhc+dO2efbFZDyhDB8xzM0rmAoTAYnj92wkPe569//WudOuBV+D/9v/6f577++s6dG9xKzpmEutKygs7u9h07m5AF8cHMuyUAkn+Qxei39UmH48P37jmAUE8etxIG8bPubrttdqp/z97d3CxsUj8J1K4sdlxWDBgYWle3afvOHb/57Xs/+MGPvvrqa3NuWhH61cPcvHbN8gP12INPJonwLbGZysg898052ap0hKhjWay2SK1+7HvxxRfdGEnynxDZypO8HAshEnfs3mlrurbOLumrE2ZQJsIxZ0KY1dU70aqitIK81W+qR3NVISA1B7ZNlqgS0QV2Z0cbl4iNJbp/9md/hgg01DGuJ18ItDKOYkaAZDwABdR49PDJsyiayH+VQAXOjo5OcwLShPgQVmAynkZQYiiEEEMVIAPk3+fSY9wI9yI439RxH2AAoXswMMWwgywLQzZoIsFQEuR6McuLiRMU0J+kkQq00oRG8QLmyIj4XnnulyWHFDn0J6FVP/cF5akzGyUV8MKFc3Hl5CTUmcd5zrtw+RId9DkxwCPmzmAS/GSSvMHl3Nmz9AIdtmzZ6uhiAmD33iNHDmGZYlb8Z68Pg2rBgMbGw0nJYWcOYwbamZLk4RjKnDt7wR7Nr732utwbgwR7EGNrOKsuXPPAu33nJgCYC0lc1hvgi/2L56KEOnwU2ue72+NI9/TkySNDWZMqQYbti3rvHsC4oT/84Q/Rh5FHE2qLpOwArTQYhjsjDF9Ca73KBx98oMAf//Ef+yo2etDEkdhTR3/P8YihcNQGQpFwPNIBURzdBHuiPNurEoocDbPD4FDJew8eIT6a03rl0QEY4MQy2v3d734XeCTZcwj6PX/xgjrR0LfAVsZDkhAxq4GJRh3oM5jaxU07tCqgpK+ICgDUo0W9VWx8dIV/8id/8v777xN4fTcKQIeEQBNz5ZuBByuV9y1gSOaXX35JxqgAPSUqVdWbjf3gaFykLeKkXfYEAOABJ7lVGL6a8EsI0R/AhAENSZ3ek3CCB5W8Qkn1x/ZNTAMAvqKJxMy9V1DQhJKeqwScCPgHG8h/tC8F55dG4K9icAeA+e2cnO1Opre3wfLKwu7dO9Vz6dxFv2r+L//lv5jdQljyhqonTpyIO1m8QDdioCvh3NruwuF6dJ/qMekkBCJu0Fwlr70Wxk50jVKoB90SK0tlO4UYP4p4hz3wdI8WYKIYcPYxa+hSMi7mxkOXtzoGjXkO86A8UXaXquDmIW0BBLcQ21AfEPZORw4zANoyrPC5fAnlqTH3KzPsthaumNxxc5rGb7+aiH//BYBUMWbhhGkkULm3IBH+0ZYPMUO1yAdOT3zo7dDIsJsYEc9jxBXWYnwPI5CDDfoeAk+Xhhoqd3niF+d8Qmo1qn7Vek74AEnTPNeL+IpQqgReft1rzrcxJABWCRydCA0egqJC/AMDYWU4lNTx+1AZ8MSvhKtrwxxuJmlmQ33lFYApsydgQHy1qUpbXolgeSjLGWCKqY3mqBDYKKMtdHCjMARjcfQnSSU0XsWk8MQn2nKRVNWqRAG1Jcv8TzeNn+xPiqRd/I3VWJ3ozzRwziiDqjQn692xHs1NTaOjIxRDzepkAeHrWwQ0j6Atz5l7hNXQyNCg3aAtUbLKQMKqSiyZ1ZZRjWGuQJ17KBNU861vv/39ffsPosznn3+h12hv7zDg6unpNQ4sLS3bsaPFUOXmzRsjYZNg3Cmwv9TohKSZQTuEgCQsy5ie07wjV8hTe5tdDgt0D1hm+2oo0HlNdUVnQAr/S6uwQ5/lATYxsKJU2JhjNDZqtwcHcuWMDA0xRrXVNY5j4/3DSB4q+yVuFzF0DIJoJcxTVhLSYY+GPYnvIIXgjZwRdgeFA6bJyX652nAcHBwimW7osCFNSWlhQf6GU6dOkhmFySo+whcx+W3sGhvH1N66dVNcjWSy4LnZOWSJBVGe5yf/R1VcTxYBmojPrdR7ISnekWObHjoWl6HUocpiV4Akm0thYggVRRZ8wnQCQPZUwkNHJQjqY8CD+xwFSDFz9AIRdEKcMF4C9llTUdfQKAZJeu24t6W5UaPcKZJfX1/38NEDTNGbQl9bzP7w8PjBA0cmxmegqbkvv/rc8l+v0F2LamYN0ccwj4QTPxvAIYXacITXS9jZYsP3uobNnW3tE9NTNu8/evwoLMCPF1Jj52dCEqPPEdC3TL/6SRTi6D90vexs3Ir67SwA95CPXluLns56BJivKG9VVYjRYgHO8koRHxjdvX2vv/Gmcwaksr300ksff/wheTj95RdB6cZHaXFNVSVTbtt72odcB49wPlKsSEE9RAAk7IxJhMFw5JVXXsF3T0im8ogsdigqee9emJIGAzaRIs8fPrzviR2BqM/5C2f5YcrDF3kl2kui44vo6lgq3TzFVAAicZcPcqYs9th4UdaTQIrlYNUtdbAxPApEXVdOhEVYt8rFAqocAWXGJ8dA7jAyHbmF8oUFBTevh7kam7J3dj+15Ma2t5Lpg8DYTnJkpGFzIyFxWgiUaQHhwTKUtKeKvHyMvnfvlrwYNpDdGBsfXElwJFOyaRbfIgVhNm/Eq3v4oNWsFe+2ve2pdWF2AcrJzkWu+obg4CIOyrDbvkpJXk+2qaGdSbqediIClqmKDd+1e3f1ptqb0eiRdIkFRAK5iCaoR7r6+/sYXedORGncE5PjkyMDE3W1dTQr5jg6oycus8PkConUzNMiPLTAESIMRsuOrQxu0vp1l65cA5LNYaDMZVw0Mb6cKF7w0qmXnzxqdf4xhbpy/cruvbvIGI4IGpIW9uTHP/4x1hDUyXHnN4zTbpXzDyQ7mUYw3yjjleNoQ0kzPQaogvosklkUXcPt27eosIk+9ASk0+5sMhZBq49LGRocFmhw1i/xoHEcShgxbohDF3iK9Y1NjkPGbmLG1MRhBW0BD8d9gph+wQZ3EiWZn7IwO3xWjpqxnGJormcRdiE8BBv1hCp8CAv9pNqQDhmxiUeuKlTCCPvc82BUbuclT2AdeajpFiqqkOkjwzo14se88NEpFDmn2n/6p3+qFWAYKJITWaYSn30r5kq7L146HxnPJnEfRiOo3tAAdpPzleXVE8dfvXz5imImeINg52Qh8vnzZ7kSohXWLCEvvdt/IJxJQuVxCtiXLl4hD+bP0MdWszCyUh9SbB2ygI0cmg7av+/AzWs3Dbc0yp4gAvln7ekjjdNBMEdIzQKgVRybgKACLBhkldcKkUBAfhcexWT3CiIIAmDNkXxCGMxRdzesJU+qH7VdvH+UscMYc2cHVUQ2kaKwVnjAbrCJbGiFkfctVfUQtTGCYFDP8Ykp927IAwqrGZrslf5L6/DSfajBczB7ZZ8MHPGnXxxE5+ePHxcdjJ9ghDKq8hYp4u6JVAASagJDWtccqBBW36FO4kTBwa85b184eRz66Ka3RTH1k1KQ+xx2auZ1sAZuBFDohcguOQEhOFUltghT/ZoCOMtUMqGK4SDq2S521+696mEcMBrWaI7OWgcJqfvLv/xLlKc7tFIxYJimkFcMJMtOyACbbwU2ykONDADs8JFD+inBGpwS4B7uG1Kbyum+B/o7cqUk2KiYFtkWjcLUnwaxzdtaVKK8SRhcQyito6ECrKhXbAvto034pUDw/NTrD9+wwggNQz2K0i5fujyPv/dESeU98Ytw4PbEL/QIIqlVJu6Q4j+9BWVcg1+oLi2GfcdyszOVVAfpMXOnFToMoKlpobiQnOPyUM0KqEo9PgebX6+07lqxdchiqNxzVww2i+ATv8Dzyo2GAKaAP+GrTvdRCyGDJb488ZViqo2b8EtcEMQN9MHglV/oxJ+TZj2ZVzpX33qISXgDbD0fidGQ8j4HGC4q4JXnHAjiCFkV2sYUAHBXCThB66EPVUvV3XgFEd8CBvCeK+MTVYFEuxAhsiAntfGTuCEFWA2f2FmMMgDDVyr03CdK+vUwfu5V3C6oNORezeDxXDEPXdol055EjAvTPmtLDoNbmpoJqzYRKi4DWjXQEPqsFYaDCGoXyuzm6lKCIzaRk4JxVZUUoAUeZFlYoRdNh5vIm7Tcx1wzvKTEbVwLvTV1tZurbyFFk+0grnJNg4pPwGpY22dvOxMeZgC0YmW7++SUxLKyUse42FHO2ilw8trtnio80NsXEjA0obx9V6RxOTVTH2ggWVNb6Gy+0eEBZ2Hn5mRYUCWvQ23CqOOO/hsZcr5bVuZGqZgOm2bHxiYnJPXu2r51z95dRiN/+ic/uXXjJtcnxggjgE1CrKMkAMLewEA39kIGlTk2JoNRRjFW2KgDTz1x8Tt1nCqB+4kTx//2b/8WF1TllJtjzx/+4P13x8d1dSHLXAGShvJIzWbRtTj0YlcE7ji+M5ROh/MtAFhJdhwT445E/aytvooZpcv+1IuUl1esrIa5HUKCSvBCKJFXPMVc1KYN7BERZYVJJkZQDw3pGNxjDSuJ9Zrz0HCIAVKSrEIK0ysrQoCfkVLbd/7oTUaZMw1+HolQmWrN0YNQVQyouKMkKXv2OYRVOri3OhW2T+VgoF/6G2YxNPq0RxPqh4jW3V++fJUVefmFF81gGA0CRirXvdt3vvvd7zy4e08nZymCJr768vSpEyfgRUkNXSQWGwuROhwhn7wf9esPVIhx0EETI8zq6oNKoj9QgaF/xQUl+Xk2dX3t1deVRH/0fPsHPzTycfoMqGzOA4yxkVH6BeXyshLQGn2RARseOXvOEKt5+zbnqTlHRs14B1lDNU4MUsfdDEiQmlBhtIcyZ+yaIl8FJXUMQk2Axy8ExGswy1dBN/DgKZCwFQwIRZXcgArurIexGVkiZu7JIaTIjDpfffXls2cvAsCSCd0wUB8/eRRJXbLuGSstH4SC+X8SyKBRZEhJWyjIy3feU+/TLqtEFmX0TU2gf1PwxR8JUywt5OTm55NhoT4zfvzOkMuUkOBbvxxZQx1BcTKJVpJbcEryHvWxJY+DLgx2FuZvoo/l1GlpQlHrhbdhhoPGijBl7wB5/dqN3Xt22RQYpzia+Mg4Q215acVb0XHdM4+c1qAqYERPnDzaYV1EWqpimqObGAEkrBTyp/goZ09Ju3719fUK9BYXllhwiRSIjHoK0ybyqUJaptfDJsAjddxBLK8sJa4tOI7UQMiSA/yy+4addoQA+CdVlfKM6mW9Yl92Tt7I0KgFAIcOH3Z6GvLqwq1ycizama+/IWbCRPp1yuU5FYBFGGVFh9AbEXlumM0PkW/g7SeffEKkSakeQPhOiqM0vMK6mu3bq4dHx4kuPvrWxjhHDj/nHGLxVyJKPHAE/ELOKACdU6de/OLLrykv8cBun/B4RBZjQSWQ7pGORiACNfetjZ6Qhf9qGIll5I1GID5DhyNgI3IEkvki1UqimLcvvPhiLK5yOw0FMY4hkgb58ccfsyT+JMng4RqYjiDqT7u6NM1bUsxb9Zi5kn+lOayPPTn7xVlZ60MnB2vOGtxg2e7dhgv7I+5A4AEJfpXgqQ04REqJSs+zPvqCGkJVxgx4QSwX7HI3P8puMEqnT39NSOL+mrDZMxS7LcRy3983YGI5MuBz/EgUM6TBF1JqgEpb9UWgRQGgUjFN0zIgMV8QJIG0wKQQapAKEg5ynh/SQQRAwEMxTqeYFdlTRhNu8Mg9Rhi2gQ2zFAOtrzi+6lGJexdcfvGLXxAYvHDpeopKS7wlXcqjiVbouDAzE8QkIhFMY/ISjxs3w2JZogUjVAI8dNgB3yIUdOgR7PQ1+OutJaGUJW4OVCjws3fega+vFAaMYi61wZ2FZ8Sg4DmQ9NGe+xz6zBSs/zC2IdhYdurUiRhNMkAaKTjAMPTll1/m2QNPK/FYy41Goa8AlHEKMFhAjxhY3SII3dMCTbgBG0ZYy5FfUIS8npArTXiITSjgCTk08jE7p9cz0KUU4Ec9fZDgHRffntf19Y0T46FazUn74edIHmN8ZChQFjs5QU2F8aQQu2FURpVQUj0UHLv1sHBEVU0zbvOLy6qCFBkDJF4jcmzGWSHsQ0yvCAOaEMtkbl5MHUVd6kUFLSnKGeLj8Qw9IfpGa9buysRQnQKaxAb36nIPFLzBDzW4QOMeWV1EUHmzBUrGz33lreaimkOdpJe/6k+g4zRY9dNiWEry27WwshLi7mYjfBV9GzcRfGUOX1hAszRvw7iYMRrCDL9EU4HZ2TlN+Qcie1EA2wUSAPuNgfREzaAEg0urPvTEcwW06HJPPvzplRtlCBNy+5PoaxrX7UxKejIz5Fba8GtJuor1CfKmYjaAB7MVSFhL1PGoQThDJUjkwletAAkFNO1JTGQ3GgWbV1rhdWGZb+PnOKrdGGxfxRjFuABYDXHg1g1VUSxmt19vVeLXBVQUCwBHvFNJfKM8MoI5rlaBoI7/ukNoGKLYeX06tC74bKpItYZ0ePOsu5saGODqfT3BVvpAlGcmQ2KiRCNN19dvVoYaAwBsftkpVbE7aKJdyJovys3K9Gdv91NEJv0yRoXem5skcwfvENGc2ktXbRIppGTrNzE5nZb+m7O4ulZsbQmxt6JOHNQw2KCIXtiLxbfmjvBC/cil3YSN+LLOviTGCROjYzWVFRiP7NTVPnMV5TwPDfX1O7F50sI4kdfkok2VyUn2sZ1eTE8xdnfws23+O9s7TOk6aMj6vGtPr738wstxzqVNLK9euqzHYnr00/wwKFMUJyc3bmlAFSuq4W4WnmayUDpFamghKTow0zpC3ZJY44OHdyoqndHo9KV8CejcFNbQ+EQaGpHARlEbiafYJJiHjGQP5dEQF6SlwtTZOpYj796z01sE/Oabb4LIOXx+aZ6I2j2aceHZEJDykGub5fxsTrbEd5ImUmj2yu43ne2t2GcQOTYyXF5aIrLu14ojkkOM2VPAa5dIMFI8aSoT8xR2njNDZODMmW/wbs+efaplB9CNjHllbz79n65RizxIXRTKhOTV0EWl8FCxzIzBZ599Jv4nkCG9m0nVEHReeOEFTV+5cg3iBUWFzKKcdUmiPpH5bf8hgRzi+vzRY8Zx9hIGV0lxjtPNB21QPjiSlxPGaU87ux0UBng3ovV6hXgiC4XHR0N8fXF+ac+u3XMLYXRN0ghwbm4ee20uWJSFL25jCqdHmQ4EBjMrdv7Jhx/Zx9WYkCST3vLSMpLMn6abb7zxLSpmkhdPaY3mcvLy09I32EpL56o8HYQawugjJcyQDd0qP0xXyhuQW0J3+M15OXar1IWky3TS8eiu7BEOcVo27CjIrqf4O7O4SJZkEzs99ElbiJzpvXxOneFCEoilJ/pU3Z6GMAu+ZEzHP9g37KA3QL77T//c3tFaW1tjXo4MOxFicW7e5B5ZtSuO8bQEFZM2JWX2q8nJC3uEG93PTFrtNxE87Dde+5Yd/y3FzuT4FOTbJpgFSk1NhiwI44XddM08uPEMNIkuwVg3nYDCvH/HBXgrKf+ll5/vetr+4H5bdlbh5ASnMFlbwyuj2jSoM4dgZ8Xup30mNVPXhxmPkcGBgvLS/JzsidERG31CLSVlvZQCAnb26tXGxgYnuPc960ZtTDEyv3T5cl5B0fDASKB/tP0IV4z+QubkyRNmLH/3u/fkM7Iq1hWwvrznpfkVvqZNYHUNhmHYyhchxm7IMPJCRFFvrYarrq0rKMzt+fQTq9pu3bnz8quvSIG796B7PRs5OW0BGq0hcuyebHVT8gYYsv50Abx3I5OsnGyjRP5BwkoItCn5xpvfvn3zDoFkT5ztNdDRb996h2EvLIxQyVu37qiQfCJOQsIMdePc6Pa5MpZch7Wq2Tnypvp6+6EvVm1ZMNfNAIzwc/i4nhgheElOBLKIOiyMVHm9rBm5ZVQRirNI38mqe5jCXW20HgDobCQAnViAOW3U3K9BBUWIiSN4Sc1pscrBaeL0yy++ovWoxwoxyC7uFJmECCk1cSecQYvZk7zCAittLI5iBq9eu0aRbddGZjCCOvzRm28ZGLCBOVkZhqOXL1/8znd/YN6XmpvWqKiUQTfN4TMYwDLoADi2n1qX+iVtj7TQO70JOujFgMGuwtFFlnJys82G7d9/UA+ypWkrxC9euhLNrz7lGbe2th04cAjXHLDoeWVV1UgwcBPw0ls1NW9RFVthiMv4b9/ewuajKl3WllCIhxRT61evXeYg2nrLbgeoyv/5o+++RXmZfWzSvSpPcuLQACohIHRI3cmTx63aMmEl3ECX9ciOczaESFhb2bd3N+NpBwL/qHBZaXFeLp3ORDR79GKHESOu4TviO0bjR9//AW2a2dKMwuyPY3Acoty3tgoMw0tYYJ97lRN7XR4wCJLa0ERDPqEjhkCjxj9DwvbVu3cE6Wpr72DlHC2iPFXiMcNIYM4wIy87R4yO8KC5ca9hAHhiv0iFwkNYoOv3IaNn0bbltmqwCEp5zjQJBKpLPiee6rn0eoYEZDWWUnixM5NRLwkGKKsc/emLOvXXPlGVyvFLDcrEUXY7ecg6s34sZX2K/cFc5VWVh48+x5SZZXj45LEd0m/dvQNfWyYys7YSolZ4rSQLaYUbMTZ7KEkBrUQ6PCRLSGS5rBCkAyu2bmnmb+jU9DLMNZlnJHG5LzUN7lLWdHAN2xtsWqgYwMgJjmMWOKGM5oQBxyWVxeNtWyppVNwq+NNQhaQLCXzpcq8BdbnAFJeJX3HOdfA0TWG/8beIi9OAI6zKQ4wMeat5fr4yCnvrT12F2hTDKg99GPz+4JrzEkMAPq+gOIqF8NUXLXk0v8at98szs75TZ81HCWOH6KDfsDNMaljFxHBoMSU5TLBqLvSv04JzYeNbXFQa8DEiGnXFf3rlocuNJz6Mf93EKMPUPUSUiW8UQBxP3NA0VkyLlBB2UEDo8rIKSAHGJ/9KAW9CDNVzgFED95BVjz87nnaxPppTD0EEG5jZcWxTAwCgRpHiz2dnZ6ypZGJ8rqQCflWrBsjGsMHFVypHbfOnysS4KOmJehRWp6+UB2F8gRAAnvs8rlMNCvjWn3EZf6oN/J7A3cPE1YTl1TAEt/Iv4Gg9aNI6p6/zUeT2EQnPwwZBSyHxScfP/5ie4H6EkQYBA7PmSDNJZaPBBnf1IKNf1RIS4w9QAYb6KcxZxBtqaR9Y94oBKWVdEpT5rAj1+OEDnaIlpKpi4GgLsBnNM2fOYBPgVaVf4QDpoviOQj7/giDuY7Tt2W0StTBjC83ZmQnj5cwNqVkbwsTL0w69+Ph0WJg9bWMB9VvBqcsvKsjbmF7G4myurfn0k4/efvttbjpMmVRma6h/hJ2y8IvtUImuLo5b2/oGi/WgYEBMjSKCPkZ/jDhIB3gmAxNQ48zZb/DLrtX9A8+ysiXuh9izrIZHj8OUoliy5BN4OZzIZosS66HM5KEwXuvUFUZeHFBVbo6cq1Qtsq0Q8Uq7yMjj1CJvEhmFrj3xCRZzATmv6MasqBBHfIURFjp7yBp6/uDBfS6RTzCUugT6RDl1GERBFEArmDLHsIvtL2pgt+bsJcHXtIM8CrBQelyfC2nILcEmNaCGz7OzF2wfwIc7dfLFs2fPk3GUURUraT5DE9BHT2MVeKEDeMgP/QLSoUNH2lvbbKKytLBsg/njx44bsuIFf6SxqcmmqyJekxMz5ZUVXR0haqvLUYkaQAg2mSEq4WOpDVUBo2YXVpK6nbt3oMMrr7wK5RhxRCsrrUANp3yQKa65RFWyJw97be2ZeXwzTSlJiU6fleg/MjgEbJiij16zLlr47sOFxeWKqur0DWGlk4ZM7mOK/oYXDlkS5RMfCi/hps4JJEitf338IPhS1Bb8IOcvUkZiQCbVAAUA3Lt3F1Vh6pWjdpgdHaFK3IDBL41DW3WSOrj7HL78IZ2NeTY6ZdZO8I/AIBE/T+YDemqxpWUX+XFCMwOoLXpHBWfneJ9z+/bvKi8udw52Z1unAzwsjZjqHmve0phsN9/0Dbfv3Wbwf/vBbwuyCr744ot1674yDIbazh27WTgoy44DA6ry0lz0DlS7d+1NWpe+uLCWkrwBZ4uLysgV2V5dWevvH9RZHD9+qn5zkwi70MCOlp22luG4Ix2qSvMDZARhWNaCrVisA6IRYYqjKExxBFmqqRMUF80yb2uXOrN8fT3d03PTa8srn3/xaUGu/fVLD+7f0/VM9tC0Vc5mNrCSbTHbiTi6W7WRakKiCZCjPMgBicjaam5umpmdqCivfPuPf1T9/nuWhZgNkGHBg8eR5HXrMzbm2FuppLAEa8QCUJViYoTK+Su6+YP7D7CNwwOyiueog6mG3oI+bVEi26Ln5tslqVBEXxkZ8/ajREZllORkGCQIcwk9OqlNB2i8tLzqLBc5Tg4fGJThowwSkQS6z+8BPCEXQfeEEcZx0h78rexstpcl57MaJ5B2CKIzUUFqIwRfUX8E57XQL8/Bz7agOQOOa4STgGmCZSaNSsZqSEq5KdDkRGoLPGirpMUthJyEGIXCFE2UsXSkuCyMwFGJ8RT3QZMnjx/TGnETSsR9pES2MTCnoW/SdHtrq/wrAub4UE42C0+28Yu37SGwhWmBZ7SzspwoyAKwrOyMyan0hoZ6b30SltillumUsZJBE4UR7I+cvKuM0t69+69du2Fp8qmTL7m5d/cBwXjxxVpJI+pEcKFP+ApPGFbhVHFeCebSO6RGQLgA2/DGSB+O0NE1UEkEZ7cNzMBAxiyVQV4ZgFSSIWIxZIOgFYPPgkHHh5C1H4apbOh7qH5vEYq+I4uGcM09yZEpjpuoql07QRNXz5GXRgAGX3BZgX/zb/6NCLfyxIkk45T+RL7r02eMeo9XeA0ozyFCc2kZpxPfaQEUYrtXv6muLcrjRW3cpCwMFMAAjHqkDqheqdBDX+mnCKTRCCvBByGHyAVCssE4+1biqP1zgNre0WYV2bYtWxGEqLB1+KgqULlXCUFCQ2BoS7uaUwlQteIenFqEncJ+mVyCbaU43N0TbxaSx6BPS05dL6JEobBPh4XOaBVpa4hm+hPuyIXLBNL8nhY1ZOWeP7FP0/6EO9eabWBgGUxTiwTDcLS3u5dJwRoMUjl60jLUJgygosskARE0QTLNzO/bdyA7WrsMHvDjMtxxGSuVBzYOxlbCc1+Fad+Y0AopgeJAcfkS6H7Vi764qGRUOETEvfK9G5eH7lGZqrtU6s+obPhRISqo0Cv1hDn95eD7+pOU8//ZHUFy64O5/JwVgSvk4L5aD0c9RFY0xTt1r6x2LQ9fDkt719anpHLYI4BThG2WExetvxRONTbhyzt8io1emA0p+6uLq8kJyWuJa44Y1q7WQQg1F9hcWvRcHxYj660y5ADY8IrLwyUmiK/iwnBHfW8Vg5q3uE441BbTJzQd7QKEsFpRPzlQjzrjSnxFKL1VoUYxWBk3kNK6kuDBbJUQXEIwNBS2UfKn2tzE96rCae2CJyY+ADQRX4Tbwxg8NQM1xo7oKKAetWko/lbrsm8Bo3WVex5/GHLiwyrqMLCxSsl8sVUsgXnAtoWBnR/XbNwRJouM9tyzrbp1uTQLs3O1m+u2bWm+cPnSrevB/wAtRd28uY4eUj9P4HXnzn1wsoyao28Mlp5YZ0BDAqNTg1BJ5WmqrWeJ7t6+w+T9+Md/zNo6jpf/oaTnGBFck9oqWytChGqRFTu+o/n42EhmxobSkiLNacLDudlpC6o56Pfu30lPM92PBKs4bbAIR9tS2b/Z8RRm6+zBZ1COaL3dzxB5fUpiU2OdSkBl5mFy3Obc89///vd5/+//7nfCCbYHJa7CqxOjE3dv3T188KgNRk6dfOHBw/t2LSDGrAOUabsZZ4eM1jXUoSQgl9fk6W6sKNNNhlx/oTI0sUAZdvxmqinl2r4l7MWhwwd8iyP2GmUyRNb0wUSYINlvprGhEGeFkRAjkp9pYWbyg1kqLC4qgIs/mRJUJQakjknifKM8D5ItU4AIqR8jNBenlKAtOgAV7iK55FaxgYHgJWtXDcx6JE5rbKiGkJovqAyDxeJohc1VAN85BHitf9KXbNux3djpSWsYHkj30uiFC+2WQm6ub2b0rermZ6ifP2RWLUyYTkzo5LCL0/mzf/h7wHAjTKP7UP0W56Ek8ZAHb9iPkjWJ6zraO3e0tLAcH73/ng0itLtvzx5eRTT3mvXpp5/W1tQNjY5JHJKfwHIYQVkTsn/fQd6JvYmEZu/fe4iSuEZNOPfPknpphJAECdxcX288KyvAW1H/0fFxkT95OOBhuNCZphiV2ZraPBLXgZUtLSo0ZcBj+P377xcUFuoXabncbwMbYp+20UFCB9q7nhoDfPPNmYH+IU1jh75Tc7gQOdx1NJTHrxXkJfmEimXXnPGGwujjIRFFQ5/b9BZnFdC/Xwu7xHSgP+3TmTFZRSZY6uuQRUk5MBbbGH01NjVgGeOgl7HDiQBVX38v56MgtwD7xAQwVwadsH2Qhyi/UeukhYLzkwiAzqY+uf7K1UsjIwPzswu1lRXL84t5WZmQpYwW1Eq6S8/YaNFFJi9+Q+rKWoZdNfMys/cf2DM8NMIJtp6BLne0yzgq1F2QJYaOz4lKt2/f1PGfeuH48NDY7MxS0rq0e3ef6P6zMhcf3H+CTWheWlp27eoNY0IpLnhtbRhEov5+ZmRErnsYMSIj+FFS96x+ROBwTE5uEWaKVa+xqYUi6xQ7Wq0nnhVTEe/fVF0jOHfv4Z2EnMz6uk0yyLo6TCw9SVhrW1u5YaMq16lTp9BTpjvhJ/O0WOUAY4GZERcSTU5MWSmBmJb+f/7RJ6wWSI4dP4qGPHXpcE/zCgoLSqfDsGVubUWKaWB3cVnRWk/iwPCQKRdErqmqRvmsXGtM56yy1uc4TYw8pKZtGB0bNkVjrKdCZUDCR6QmVjqRxmDzTLotYV9Y0cFFNoK+9+CxTYT0AgZgnEhxE/lWMhIJzE9/+lPe+ddff21ETfAwHTv0gKyNmimp+x/96Ec6LCIKQXLo4qmQIi4p2aD+x46dVJVv445ADPjDDz8EEoqBgVAxLLLSjZndqFBDasZZig93VoLQkkO2y67wCKut6fmQRAFBkKC5tbnk6rMvv3j+uaNBWTaFvAuOBJAuXThneOwgx4W5+UePHh48dHB5KYE68BfB41sEQdING9N37d7pOLm4T7Et0r27N8bKpvidra1PINjZ2SF6BjD+HFEhitYsgVYl7qEJ34jvOaZxTGep88KFnzP+WOzME8c+YhN3HL7ScyQFkUOghhSGKelNgVmE03EB4AE8q6vTVL/xvA0t1I+khJefxeZt3drc29uHhvYc81VBfpHuQIvoyZCrgEizHmYjP/zo9/l5WUhh9kwmldEOAuq12QdW1P6kjCcPrb29FeJGtv45rJgNEdpFea7s+fNnQWJJFQDI7cGD+wGjNpXwnmIB8y0woIMUxqj6BZBTLnSmBcrEbFKtMhfOiPRXUA1zUAacXV3bTOQ2NTUIz+v6jYf1QVDr6JgzpiLhc4tLKiRLSOSJD0kFFdZ1ouEHH/7++PHjnpgQINpm4d5d+7UafAI1yqUTFIBj+tRAE8kheBCHOLkHnsGw9Mvu+yESxM74FiWxSYGi4kLHj9Isi8L9yUiWFJQhIC0gveamAIC/xIx8apphj30kjVIEHc2RI4c8tHDIpmEEoG9dX2bmdBTLmPMVCY9lRru6CVDJcPZrbkrEhIW0WHFiMrgizkKBi3uIM8KVVeX6bpmBoCUt+nS4AAbZAUZcyQN8dQ3YQRiMnf76r/9acwYVdh5MAxxa4Aro6YAbEOMr6L3SnkpJdnxFHnnw/hVTJr78SdrIhBr8xh8qbzQspVwlCusOvUU45zJqVFJBXAGpMrHvLEWV+HZuNuQtRQ55aDz65yZZt2Ec4Q3KM1yygVhDhLUDGvBiLNTv4oKiixYjAEKgS8ccQ6uidcHbDw6654Dx3OWJP/2qh/iqEF5xMRUq7CGkIsA8/pfRgsKxx68AahJOcq9RFarNReZwgojgLt74EzNQWG2axmb3+ntNkEjFFNCE1tHf535jSPhSanCZutCQSrzCZgYIpqpSWFXxt1r3VhNQ8ApsmEsa/ALPc3Aq6bmSymgCzEq64qY9d6kkfqsJ9YOQyinD1PoTGAAQtMMIWWsq9NYnqvKVrACIi4dBraO1TaSTFinjQ7+6BBhpS1WgAovMajcqD5uJRpdKQGvqAF7cTdaH8Z0YG3/33Xdnp0MGOd+RDmysC5M82kU95fVhEn4YGjqpaa3E1SojAMYoM15qphgKGMGzGvZp8KH+IABM2tbLDof5usqKEkcX24nsafuYQWhlecXi7JTcUMNIrktSsu4kx/I72furK0n9Pc8y0lKZHvE7ANtHUuxQo9SSjTMFL35uAVmchBATEGCWK9jbNmTdpIvub3Sgb1aumatpaxb9so+CrKRdsfKK4itXLlksiAsnTx6TvfOsp8tg48CBfV99/pXeq6amVnavrW9FMCGIkkL2zJa26FcsmSQLQfAdQ40o3IDQE/RmdxTmWBt1EBWBPbLtoQ6po7Ob0mEZyYGLVwLYmMgoc0bZMvWQBPX4hOctOMDaAskTNSiJ9Z54ixpgYwG1i/uuoqJCAuj0ETMY1Fk9BpXgUZiogFMlsZxrXRclg0kEZ3h47OLFC+Y9xKgOHQqZ7rhJBqy7QDQOd35eIWlpadkhn0eQBvxXr1zf2bKVFg4PjhTm5f7qV78SteoSRbx02RS0jWLsdLRz1x4JQu/+8z/v2L4NvtoVLNQEeFQuKsaGGjbAAna6ChBaBi+ngtTQbl2RKIsQHs+J0bNvNyUSZGJtLQPgtdi/9dHjB2PObtxUQ07sSYraGoq7aiFqBGna2iyKc+XaDb4+FJyoTYxj5WV/cB8kEeXW2FvGR4toyyNHH/IMtqTEZHHxIITRkfW6Ij26/AfKAmB/4vKJEyfwBXn/3Z/9W7PGiIYvNBqyjBvOqpmE8InJD1EkP54bIoq9rGQFs4mJahu6MgBIkNgkw7gRvvLng/CkbqBoIic8DNwRh5PlJjTCm19ZnFsW5crPU63F/aLEievD6cFlZaX9A4PNuU2Oe9T50Q4RaH2tcSzaAg8kzmf1laOaSAUXyj9n+nJWcrKLIHvl8s2K8uBI2YQCLoTTKI4/s2fPgUsXL+sCkQ6mZSVGcSF+ZE8wAxXiZKIUdowGE+FILADbHIzHw9jW1zelp1nDMIfmQrbowM7Yz9fIu6f3mdBApnO+O1edPMAgmC3YkJ7Z3TW8besOzCItDDXDhUHR4Fk2ywwYMNSNqnCE3NI7W1tl52fDtHFLI9rSBXbJc90W2rKrDiOSKCWNkEd18+5Vi5eYZwR54dtvYvTMVFD5K1euYopdHcOTaPcO/EU6oijapoBUNHkp4NEEwFDMcFT9MzNhno3hBbOdSUwaIIsy0sl++977LDwAGMyOjjYGR3mCQZyoMMedwBw4eBCvhdu16ytdmGEzlcEjKCACTAXslaEyVJi5UBtSk3PuiMpdSoLBjIfPkYvzFIz/StgPR51sKTdIYcRHSUaeIdIFqLCr64Zu8aWXXyCrojkqN2xQzJpmKBMGeqFpCoutwuTHj4X17iJTVFvcxPLfqen51bVrYSyaLoMowQYs129cI8kExgCA00KR5Y/puATlbt++Y9oGEShR1H2bhs2gSsDWEAssw4dhAfDNWzcELDo625XE9OJiWxjV2y+1sWErCrOTFleQUp2CtCJ5QEwTBhmqTU+O1dXUGvCxgYjgkvEFGB6b/su8K4JgtF9BNDaK2aGwbW3BTKkIVEZ3DC+f33OzjiyPqkiaM/WAGils7tWrhgphnwlRTcga5AsD2h5D4KmhoR5bdesCKFgj/w8rmSMVu1EDoZKpSBgU84T58gQXGFWCcfb8ZUcA4Vc89MUC6PN9EY2WARLW7tXsz8WFOUE0GiHKQ7+IN06xcvjLAijDXlETPNUuIYHg8Ni4SQDsJlf+jEHiTvpkaDikL+o0yZpovdowtDTsZDUHffKpRdbJvVdERSKlVsghq64JIo3aljVSBNqBaATVpWko+CWNOIvXSOFPr5ijq9ev8xZZKqipXJDFWyJH0Zjlb3/720YjqtIimSfkKuF7svxsLHfY/teaA5JqVWiKD+sNe8T+bfnY2dWRn12wqbYWUiQf3TAL9+ECcg3hPpTRH9FQY7B/IOwAnhqWNSpsuK4MLx+0/+E//AfE1BaOmLrhPumbDIaTcY6qIA19AwSUkAbCBFpR7bEj2vMwvphO5b31ylcekkX2URtqwEu/cYUaQzcGSM/nq/g5WoimEL5w1LE9q6PpAlXBRxn+Kq6rxDBALEpwQixQpF/cBWDpG4ilEx83UBtj9PS0sCt8anoQbs45b9aHQFI6hgdIEQzhfG+vApwJYQMckwtxJ+pzmLrARi69oVFQ8xY7XZ77CgVUFdUcVjughgL+dOPyNqaGh/4UD/eh2jxEHB9qBdJu/MY1x6TQLkL5XDFSQr49QXPCp1EP3SsJJHKpThQgo8ODg6pyqSpuwleECTyeeK45927UzOp5a4yoabXFYKicWKjfn2rQhMrj2uIPYyDB5gbd/KqTnnvrK2358A/AG0mYGdGc0Z7ZnPBPz4k4c3MwYv7Uz3XQOtIR05razSQ42vp5DK8RymyXV1SCgZPr5Z4o4wXJnBwfsx+zbeZtD/zFZ58yxJDSA3Gbtm4N87PO14ICCAEmxYgRX5uWCzEIQl24tHK6pGvXEHEnj564BxVdZRk1JEUBRhK6LUxcHy1T2ZiWzjlgDTocrDsxCpmWXS1F+QVDA739Az3VtTV6F5/k5WTRt6aGerQ2qXr71g3dm305tjQ0riyvhbDx3QdvvvFWV9czFvmzT7+Q89C0JRzwxOwyjkKYtiilSxSeGy2nk5qcv3C2rrLJ+QFCd4wyc2NCkNsk9l9ZVaEfvX7jcmOTCfeM2k2VzNq7v/nntJQgVCwOconx5OTkl5aUEx8hcPE8zwzPNBrJQBjkP+3qQH+dJcOqn6A7sUHBaJIGL7LhFwH1o3gnW1RtdjId6O/1uYRaUVMCafWqORM0V6yovIgArEgim1944803AaM2NghTkDqEyTdv9i0rGUspC84YkRPd8LO+p0XFW6xkEO8kY1okd7wsbxnxdYlhayzyBQZj5wf3L5SVVTJTalMS4riP3fRCb4cC5qCFiuMukOCL0z/rDcenb95U9/5vf9PR3rZ/3y6fJK6u4/o/d+zo5DRDuSzWrgNITbcorfjk8RNWbmRlZPOtdSrkk0utq+tsD2sStm9tUbK9tYPl1fqRo4fvPbjP0GM9uQUh+yvdAiRmyVwA8IrfMD3t3N9O48yH940BhsaGRyytq9u0uacv7HbPWFMNfTMXzXLPxi3NmzaHBIPLly+uLC/oHRGQf09yCD9Sg8oySl8J0DLiSIQmANMrO7ZyaVEq/Ipp0L//u5/qVATYNIpZQi76ErrDx6KPluJOTk/pV+SnBuuank4SQI5rugd/aghUseXB5Qip0Duw3IYxJcYJQSnkDIeTKKzMobMmu2xaz480xcHhePzk/nLi/KaE6sJ8ErIqbkkfM9MMllP0B9OTExtYkvQUGVkrkjkzN65PTyvKKTITgtSEtr1NlC69qTFoDScJJCRBJ6ohmW+EEIN0IE6tWltd11Bv8yXrpsxh5oihyvgyFEQZphUr2SK4kBmisrgwOzM92/usZ2piWrhUIIV1b3vSDiFHGUjLFd23FnnUMv+hIZKYvj6YX4qWUbDBlmc2QOEvOstMLlBPd8fOXduH7CpbVGDZQ24mOuURMKRjP10ElSLog2ONQG1iQzDoF8FQgE3B31u3bvLtauuqtrc0X7h03uQ45uYtBgl3KQaL7IxwVhE5n5ycUJsC3CzPxaNwnykzRrUEtre/X5KVYOrqSrfggjEPu0ewtehkWWy9f/9BZmYW1WNYdFjAY1SFDyOdWnXemQbVZv0A3wIBxfF8xYeTQIwgYvYhNynaWI/nQRRxBCM++eQT3g+ThVmmm1BMzZQidlJByHwpABc+kDU87rViFKEqZgFltCI8SfaoG2DMA/jq/LkLFsvx0hRGVTcGAOjAcP2X//l/Hh7sp33/x//+/zUCObB/u66td2DQvu/3Pg82B/AEyRARIuZzZJkTAJWcP38O5G+8/roxp2zfPXsCVMLYwsaiv0yWCRW2saS41K4TDGlmRi7Vs6pKXpBj2oQqTD4AAEi4A0GeFsVfXGzX00HEmKGkpHR6Y1h929bR3jc4mJtfdDXkoBYNjY5grrOprt+6zdDRJoEk+EoIsRKmqb6h9XEbcUXG69dueghy/TMG/e5373FYEUQvaR4PW+/cuf29733PDSfY+JlvRDbQUBqFwSHFN2Sy7ojYm6ukMrdv3a3bbLvVRx3tgjITBfm5JcVFogNyrznQhhtePet+uqNla1VlBbeO+5ORmdHfH7ISLL60DBavZWoxIEJk+vfeaBcakoZWc6mpb37722Pj45ZLWYZHJPBXrF1foKuNBYk8AAbF/NJHDDIdPTU+oR5pvT1EubvbDBL5IWbg9yH3i9w6HlFvZSNP201Ozsw6iwOPYCq+QHhwVs0oKfmWaOnvSDUJ2brV/MmaiTvUYxtBgizUnwzoEagksgOG6cNBwABJPQPDgyScZsGaOBFjjjvqqYQFBhJqkwW/eqtHj5/4FjdJmieJjs9IWCspK33jzW+TKMnPGzMz9h88gGi2P9O6/eqxD8eNSRgBvjHSMXFaIUuQEkTo6AwJaQAzpUA+yovK2SJ79xm15m4KPo/FY1ceXIavblqxoDtl5To4NdgBt66+YWUteJWIgAuMJERsEoCklEtheoov6KAAbQq2g7KxWWr0Geoo5E9AIC7IXIrCx8PoSfCG/altr6DhK996qx7P1eC5SpBG85DEBjmg5mFDsB9dHJFqJW4UUNcrxLX59aFtbIDrXuWxXVBPyOWxDU7IUEyN+JeuOX5/2Dw0Yc1hCuYzPVmNAv+QJzFJKanzY1PWBuSw7tlZKwsrw2OjsFhaWxIt32BztYR1hNLCMwd3W7ZrNwaOu1YMPBaSFtxrlPMBKfAAzC94mDPthA+jlQZ+oQ/ZGGt/wtcn9CQeFhNiYooOKIM9gPcnIXOPaHBUswwakqdyv74CJMviEw3Bnd9DPtCQBCOgOS91ojTl5PR6C2ZQeai82gIZovlB9YPNOFK3rRuwCExonFfKEeQemdC3pwHn32ZzBg7xKovwG01uAMwV8109gHfUDuJrixZFAIRsOcji1Mz0hCfKa07rsFAeBfz6U08gRgJCAoDXbLr1TyrxkG+qCasT9XRagSDKeKVjs10dEvX29FuixG2IjrmRlLWob1WVLfnhSC3V//jBY2RHB+MIfptwpuHE5OzKc8/t4gEoxtEcHBhfXGDPHtU31OnpJbTgpEAOcm1IS+3reZYWBiwJKwvzxCk5PTVjY2pRfp79PxxZuqm2mkMvY8FowTb/+bnZA3294o7QtFpAllpDdAKr84Dvra06EoWD1ljfYJMeetpQt+nWjWtjE7MgYXnFAEwaIiP7ztl95dWXTP7C2j5F8oeXsjaWFuVZzPCsp1PKAVOuE+rtm7xz95ZcFzPgFy6ev3Xn5olTJ27cul5aVmgDplnrQ5fDyFynYkfLvbv2rEs0dhofGho0ligvK9q4YX3Ps6dnznzzisOV1tJMp9hrkoPCIRAjcYPaqEf2QMvkxfZdZ8Y1wTgWgNkVHBBMIpOUV5Lr+fOjio2MSC2olYpnuCc32gQTY6owTjBz6mQN8RFbEZmpVTmn06iDhKuK8CBg5ANVWWMxCfopp/xO+oQA6jWpJ6GSF0HA4sifEAjja+pDGNgAU1ctD4rnwBd54YWTzKi2yCdDTHcsR9PDIeaBw4f9iTsWNDPmAlXi8Xt27mA6o4N+hjc3NF26YkzVnF9IJDcCDOX1cNYMjIyNylV4/sTx//5//rf4iOiz58/t2N5iSuHW9esnTp182tn11VdfOXTCGmVz6D/+8Y+dDIoOdBxtrRJhCjg9hPDDDz+w1woKTGdusCIGETZkhhTt5KSU23fROQ/RdFdoIlmLiIdjd9LTPv74Y+tDxJshRYxVxUFn0+O5Alxr2Fz//NFjMuJMTyGOhWKQ3ZiehXcsO8U3YNax0Q/jF3/y0rBAP/vF518KrEv+/eLLL7du3/a055m3JJPxQQEqRh40dOLECe6FKikmVUWWX/zjL0sLS6yd0Bdyg3BZOAfxdahQMP60Mg+mhw8f9DlNZMg3bkgndfYHSFrLysnJddRUetaGrNy8+eUnt27eOXHypFDHs54eZ4q/8tqrDp0dXB7inNXW1j24/1CL5qisdASPiK8YIZnRPWOfHBUcZIoNsZgavn5dXaPcD1Iq072g4DmQeM5y0jufqOHixctFBblih9SWqJBSaUKEXGDEWPHFF+2XP4R35tm5mAgibe3u7Xvl5bPkHxEkSKicY8Ets1HZjRvX33zzTarkc8TZYSvPCas5xxsbWlgRQv7Pv/qllRdoKGnqwuVLYLbmmFjSCE2H6QKrvBIS5ZsxzoaEZjb27dtjp/mM9Oz6xs06zfRkEa71OZn57SNdt67f2rp1ux7kwME9XAB+87Ou7i+//JoUcbloEEoyBfYNvH3npn2Jr9+4SvAMaUTMhBuOPvd8ioNpuzpwOTXVRkNckNl797sJg1lHeifhikTZgJIt3bdvP7pCkCRQc28h+Gd/9u8uXjxPTw1BxVl8zp4j1NLyqidEmsNHBmL50TQKM3QkhO47lQJxuB0cDVUZ/3PUsBKjyScUSDjX+Sc/+Yl2IaGAD7lZhkZXrzC91/z5rOcZFcAvBzwhnVNT3/m7/6HO6qqKV195iYJcvHAOkb/6+jR2v/1H3wa8QalUT06fqb6K0rIXX3zRMMZFrvSNV66Gamfnwj62UjKI8XR0urAxA/vsc/mW8LXPz/TUvHOiCovyTpw8JiJjBwUBI6mu1kPdun3DmDC3INcs99Lqkox2J6nVVjl5o0NcwaEEdIqZZQrMDJgt3LVrT3FRKU28cOEidMw/a45D7Ng78SC+r22yPv74U61b2/3xh78/cvQov8rJMqSajuxo2VVQVMQkNmxp1IpekmCjGLIjqTQF9OEfkzGNapr4ufnm6zNGXBivU8Aa4X++oN1dUTvy32TrjTA+LD95OH36tJEGyqhW5eOjYzNz8zL71WmlqVdkmxwSDCwGp0rAz7gNDwnbpUutc0QgpXvw6KEA2fYdLXHkmwBoggXTuQBbVM7nQ8Oj7JtlBiEeJJQzNMRwUTFOvKqUxykw8NmYaOhMTExu2twAU3KuRfrooaAAe0tzDRSjvmx29+69JMS6Own6LVt3gHBkeMymsSivI/j0k88N4Fu279S5SNckkBI40YH10L+YE6eeYNAuaDFOZ9TeFvapMyAkDyZ27I4leU8Yev/efY5JZtc81wpree7MaT2XSWAG2e5t+kRkF3xkk2V8Hdi316lBuiG2BSMQc7AO0iOaow5+2RPEcf6JP997793mpmb29u79e2Pjk3bkaWzYMjE1+bS7xzpyp9HZyfDB/Uf0nQ5uaW7k1yFCiKImh/ABeUbVF16wgdaLcIROPAuhXeQCqj+xOExtICJ7TXtRDQXhDBkdKk77MhSKMvvdu+HqAc5XcPYKev5U2JNY7RVjeQlQXJu8fsemmoRMSE1eTQlzAerXczPAhgG6iU11NVx5kqS55UWLccOKYZluKiyrKENBgqLOsoqwAibudQA8brnO9MTC0srA0LCcf5vq9JgnWk1cn5Y+ODxWU1ubvjHTBiDWTxSXlJl0nl2aE10eGrb4LAxXdAy2f2ZtwzAi1SzVOknG0chlhWMlBMIj5CYCBmqmIFIy1hsVSCQlHFp3UbmohhA4ARikykrLYWHRpaGDUYfXloebvzA+WbcQpgs8h5Q/5dEbHVLX4H1HefacHtwCGEvKBwIAqAQUzWLr4YgvIsh1GhqUnrg+N7/QlJEgurC+Q7HV4O2z7tDHawWnGWhPpmbDegNswiN1YunkhBwMIyuI24xIeuV6ISqDBCqUnoKPG3BQpHB+Yd54MWysFIY0abgwODiwIT1VZ2sJ6dDgIDmznnJ2Gtbr2aPZ2RkstbOxXsGYwwR6TpJwyKLMrrKKUjXoVEQa4H7rznURSvCgKgEFmzRfavD5558bfpjeYx3APzM119HWRf83pDvAi/NuJXTYegXNi4o2Qo2UU0hmNJLS6fm5sEQhK9tR5I9l6W3Ozl6/bkNRXun58+cRJDUpbW5qcWBueGpc4G09MG5cuWHKO6w4WV7ZXFWelLjS/fTZrpYWEssCVhTXE8f62hp2trayqn7z5nNnztr55sXjL1y9cbXcmR3Tkw/DHqDSVxKtOTZwt6ggPzurqqxUivP5s6elUGyuqbp96/ro2PiW5hZ7+zXUNo6NDS8tztIGIS4BWkHZ1sePCE9JWcnhQ4fk7oikGtrt2blFgVdePk7tnz1tp5XXr1+lBY5Q6h/pe7Xy5bTM1IWExXXpCbNzU+W1ZZNj84wC+9XcvNXionv3b8GCHlnAMD+3Yd3q4qaqisf3wobNSLQkJJ2w2N3dgTtWCOC+LlM2sFWzhoIkjcBeuXxNeJUyGpgZMtER3hXDNDIybiFmVXW5PfBY/OLSIrOxTvDsHxzu7OonPHPziZvqtn304ScUTa+vudg4mHCkHXiHnm7wV2fAE9Xlf/TRxydfPBUFRewHl5axMZvkz8+acUqQ0n3gwLHJMJJMEQshWhJSc3Mzl1ekgE1sb9ly48Y1EwXiT4bRwpjcCFaP+ujbJp0cbCCXkVJdXlxTVQraWzcub66v4rZW1VQ+G+h50tn6F3/xF6g6Mja8rWWrzQaKCnJ+//v3SOPevfvNA01MTT/rsclMb25BIRO/b//Bhw/uVerOFxda29sOHTnsHN+XXnn52o2rGzNSU3rWFWUUyAMxtiRgxgNSYtxQ56XlsHmf7sq0XGFhwcBg79vffVMUHP3z8gvIjwqro7PViOXEuHMJUjY31ufnZsqG37VzW1pqksMleGzkn7M0Ojz85eefI52ugvk2oeEX1naBECIK81cpaQ/uPsjPLtyxdZd+lyPoMFnLEqj/KpOSvgFedhk5ePjI2MSoZfrVtbW3796jgDGD+Fu4JgFjG19zo81znmFWcVEJc6HDHh+beP755x/evaf7J06cSMpCfjjH3BcYcT7iCO4333zNXZYo3Nr2YHXVZgzrzRDIXl5wMHZZ6djMrNOzGZ2dhw6vsgZOCpues/uzYazpnf6+oeGRSYlnVTW1slDMaeqruJgm0L76+ovqiuq9e0NYcWhx/vTXX3rOUSYbwvO2LHEmOQM2OznXNfG0v6ePB9m0oxHT7VVA/CQJ61kGh8Y7xkYQjbW0a39KakP/UDfbGJtKTgA3qLCozKi1rT2MHELfnB6WWKiBO1JeUfLLX/6C5TE+N/fCkzCkzckuvHM7LPxdWlx389pVx7HR610t269dv/X44RPTEYbqraPt+YUhP+fGrTtvv/1HBkJi/yAkcl0dnWacfvD2D5mH1YW1PS37rGkxe6RLetpli5vKinJ7XNU+uGceNfU3v3rPAEC3Qn/NbL/x+pu2FjHzR9eMe6/fvGZSLjszXUTf9iIjw8sOXqivrUxZtzLUj589thlIWZ9263bwfYtLS81xp2/MsP9VQWH5J599RiEkGpWUVkn4gY7R9cjoHWs/5GQbWToC+Unb45TUJGELn1fWlBqGFRWUXTh/6Y9/8if2FTl5/BTEwwYjdQ22kwE5z/73v/vAdk+vvvyaEQInRkD9/MWLGOGVX94SRjhvxP4ABFWsFG3NTjx37BgXigFnXbc1b2ffZKRzRk9//Y2APYFvPtQQLZUesAh4dNQ0xVLS2srEyFD2hvVffPoBb1s+KcGoqSqbS1x5/dWwqjVssVVSvHf/Yb0G71n/oiP7x3/8B0cLU1JGm1SaxrHVzMLswtjsmFlfjkNVRWlKeYrgw9OuR+Y+wUaS29ueZIlQlJWQN9ELngJ8+RRWnTnXb3RwoLS87MmjxwLAiSnJULD9rtUXBg+fffYJp7yhcZMAAaf8o48+MuC04pwzx+TyDa5dvuKYcD78xNQ4z1IgwCRbcWnJ8OBQUoo9jooyw5Hh60pKS3LzCyx5ZGQ0apyjVyJ4lqK8+OJL8KIXBn4ek2FZkHb16XY2eJRU09DYRK8bi8Nq48uXL6FVt53KiousPj9wKBwvuLK27Ag55lEAwtY+u3bu3rxpk1VcG1I3WDlvNsCiTUmVNCV1fZIQ5u49+ziQnV0WfoSg3uSYINSQ4N389BTYUJ7bYPBZWVF2s7M9GnSE/SjTNvIblzq7QxLpwsrq3gMH+WQMPoeBQ8ft5jNwjvmjE9MzuYVrlXUNne3t5JzJ8IkFMOnr021+Je2KD8MmhEyqvMKExOTxiem09AyaXl2T4lBZBy/OLayUlFWElaUZG7/9nT8y3pPIY2PLr06f8e1aQuLUzNyz3sGWlm0nTx5nMQYHhlhCCkNULAxjH+R34SMWaSXKcUlEH/DX1VavLc6P9vdxSMaSk/btaJHwZ2GPjYx8K1z11cOvDWj7ewd0r4aFdTXV44lTnFxeuFllU3bs8N7de3SCPEBOjp1/hwbChuD5ucIQhZVVNefOnRMpwKMnrZ3Hjj13+LmjZoabmrcaCdsogm3RjfX2DTz//AnhLTEofBEvI2aIDEg9C0aLVrBgxk5MkEkzrRuTGIKGhbn6IR0AylJI/POER6uch5wJTq2HJMavy5yhV0q6aLsnTKcbD3HFvU/UTrENGWXURaMIW7yFUYETv1LCkoMwQo1P9LAVho5K10VKWBwt0jEenktfDgGtgxtI8PRDpZWcnAnAAABu+D05Ps4Ugt96oVBmTg7o1OaGRsAYI4JHerzyNlt0VMfGDRbBhArVI1b+r9gtuDHNIJMFNWJEAClpKEhnlORDqaDgrWr9Ku8iJe5V7l5HCGBevvuo8lASWXSNynjlBvwxJWGqNr/owxLpkDSnQNRK4AW9Ki0pALwCXHZ5pKiK+GKE7IgPbW9Hn7Ul6c+37gEDkhge7Zrw4EgtrJqTCQxiNRQOXJCAFSUXGWCAEAlRkovg24DsXMj5UeH65GSdHLD5Hz4Bm5CZMmyxSnxibgM9ZhemvFCHyvUKrLlPoAkFzw3lRRdwE1QcQm4QXtsKVQcTh4vk5PB31bm6MuNbzn97u12N7e/WqHecHBuVxWibKC1qTv+nXbWBUPAVaQd6gy9lMIWWIKVvm+uEPB0FZV610/INR0dlZOQY2oGHZbHAkYAbxCkDS/CXl5XakkVSghQXEamW7VtT1iV2d3ZIpqmtqRFetZ9PdUVl4upaR1u7vThGZ8bttTA/YyA5Z24O9UaHR3LzclaNOLMy6G3IdbXvyvys3c3sGcJPPXbi5NDwwLbtzWwUaRdKwEcmkhzaNo7hwA4M/ezTTxs31/UnPXvt1RfPnP2Kj7dt+w7z9UybMK01hiUVRWz6SsL88RNH1qeve/xkeH5xzhLOqYlZ8zmPnzzRrsyQI/sPMlVmsCxF0G2YhnO6O22yXGjn9m2ZhTkSF9pa2zHLBDdG68WNu7D0ww8/lNEGIxaQOLkM8FgQM60cUJdtMzYupRs78WitQbQ/Rn6ehelOOM+06a0j/Kjb3MyEWcA47Qo9fe5D2JEccs5ND/q+fj2me04qJLFgqLTpjRsTrHfEF6w0rjhy5Fhvj43q1+TLEj9RE3KFzoJzJBvF5Gj5JfNMDJj1poaUYZ4028nKdT4Rtfr8i49xI68gf2i4D76NTfXsoFRg1lZvBxLFBK41qoadu1qMXpCCmzc7P6NL1pDwc73Uhd07otTMISgQxcHhIfMAFFPKzUcfvw9NttvU5ujYqHieqsgbB87nWlebMIxwvkxT82+/fvfdlh3bNC39hudtBkDfyRniTULhnXfeuX3zup4acSijPeKUsdJaDFU3QHwBDBHh8M11day06ONALyolhmSDJ0/0MWVlVd3dz8TnkEv4AACbrCafn7HnoHM0ueyQra4JB3UJ0HIOeIFGa7oENRihEWBgxGYB5DoSEUEFYC04xwTJM/ecrfMKH/nHQNWcwCrfSP1Gd96KqvLkTMrVbSprb3ucmWVCf9CZEkdPnBD26x+baNkb8sgFMohKdk7h/MLK9Wu3BUaePuuNIhQhk4FBQAS1kaK//du/RXyGCpcJrf6lurJKxs7cQuAdevqFrDofPnzEcaECimE0b5WAqQrdZD/J9DC9wAiDmX9pJ0e9o6+yskLMAi+ivVnsnxu237H+eHRsyDguNFddrRIjH+qgd5avxWq1t4WwiwC8nZ8nJ2bFBYFKr5MSkirMDVVWbcjINDrS30uQM7N3+95dI2eU5KAbl5rw3rdnP19Ev+gMAfbh4b3HsU24deMLPNq9cze6FTmzqesZphuHdLY+wYtt27aIprIhbDjDri8nbBxiBs2JwsIxwg23b906deJkf+/TH3z/bavJrXkVN3ciinwtrgMmVtdUrkuma2OGuA8fP7GgqbyiqjC3wDorfTEO0i/IGsAjuxtjsKWlJr0AOltf7kAVS+Rjn8/kDOpxL0xHGAQaPiEp+pMQuo90Ojjyz6d/9KR1YCjscEDSEMplnu0//af/xLJB4a233iKKhFwNxBu+KetS83ML8IsCTk5OqKo7bBRzxIAE1n29z7RAL/i4fM2eZ2GbRYt8TDrhlLXrlIIbHe30sFHrxvMsBkHi8M1196hTMejANDZQxMZbJakASRZ04IYarYEzDPURQgpyeurIsD3EcgmAAPa6xDXErK/bjPVYhulEQivUQTZ8Pzu5fZv0G8SBheGr2KvyMqz0IAZ2+kHBAnlKunhbO/CPPRc+NxtQWV3FbuA7C4Ncyjx6/Fh6qvEAHZFp09/Xy27cvXMLoQCsUaKuFeJKKqgtyaSGkdCGddLeOrUNYTFdf8oPLiwMqXFMfWfHU4vN9EjUJDbXZnhqNtW2tz8NWWI2+Vlaut8W9inaVL8ZlQoKi8ULWG+UKV5a5qlDSrVTE+NffWGCsaBquYp5CV7Zxg1wxzjgMY+oim5qACcgxybGmS/piCM3h4rz85ynMzcbZpkib2ceI+wCKRxr4MFI2uWNtsoeJ1rQARUqmXNQJ7Wl7OuCn5MomGg20nGQ9OvC/Us0naerTgLT22tcakX7LgLJsoHBK8NOg9XOznM4KIjD34uFhONEFEmU5kzfaWLnzt3MvhgZYFB1ZHBkx9bmWbsQLCwM2aKnosKiJqOUMNS32+/8gllocuUT7pzcSFAZ1SeVBGcJa/SGOELemFwaASMqIF7AwRWPc0omt/b+w8czcwtSUiRz6QsmpmYqq2t37t7b1tGBbpaWSnIQx+npG7hz755sE20ZBkCKShp4YGXoJtavh7tuiG7CTivstnaxI5nexp40U+sFmrIvEEYCWhFLA4Z5rgAjGxdThoaDwOfukck9ZHzoRj3QRlypJrpkjhe5URvOxZd6BBQUdnASEB3dxMsJBZKSMJj+MPpx0+rUhAqFH4AEE1+JbQPDDcCmZ8LAw9Y0BFENiGglFoUhjp7ESfDUEjASMDyJsVMhQkBcJZrwNvjc/5pCExPEny4tgtYVP/QhFFTiK5iqxJ/AUNIrhQ3i/Ql9b2MgNepbDxXw3LexcYSXz/0qqX43KkENcVnFfCt1J3kx5EcyssKKNFaXEbX4L5s1KYNuqvGVpn3lUhuQVCjwhvRrFj5EayFQz41P3KASnQGPFv3p8gkWg8Hu5sjoT6/QROtESklgR+SSdBTSKNXs4vCttxuT8H/mRnUqo3Ug6XTZFH8aginsQ5cbRJibCTuNiupRS6oFDBwHgHlw346OjlmFAQj5Ax6uLIaY9NxC8CA3ZuYaApAwVFSVDwmJaRZlwIrFbGKgfzgt1TRMED/ZclJ/jNLWVhItIF5csMbDrHqiAD8jDuasjHSBhPGZKYMNONq5yJqkhw8eqP/k88dpjtEkZrkQBgyC33klRQLGYi0iNzL5EMHYmWIP9fWfPXOOqy20IxU+KytTaqBBp0WGsuPXJ62zUBjxL3VcUABliPLt27fkjRBUdj9wfzHsRuJkMT2aFsW2zWk8eWwSIBtelPmtt9+6dOX88Fi/CcTKytLt23c86+yZXpkpLSzdsmWrMLkQsr3npbeI2Uv4MWCKWLBm4GRoiWJ9g31nrpyfDe78PG+ADJu37X7aa2qVC8QmAoNLpI/BesMA21Aw4LGo00obEZAHfGF2SwqLcrOyRUqQmakd6O8XWdQ/hsmBkpAZzEHkQ7DgJCF0AxLzkpI0QRKoJ2KKL+pC3v/w96yS58SABUdzE8XeVldXWTxADPUEZF43pgZ2bWR4lLetziNHjsTybyO/2JaB6sG9+0wbkPSaGuWPEmafq9YNh+lv/uZvCKeeibCxvz4xFCG6BF7vZcv8jz76AL7GGzKvCBVDT2ipAHbIpFRYtbDDEZEzkCALDtbWbiLSb7z+lh5xQzqrEjKD1QkRqBEYR9X6NZywOp2x0t2q4d1fvxfxqxCETguyLw1B8iv5jTISBgMtUEVbfJRA9tqVq5JtYCePpaG+nsQeO3Ecne/ctCMnKMoEqCW8md0G5KeffSywKkcC4mLnHZ2d0slAxed48Oi+k20w2rI/kSQOkKARghhmqB+D9G1q4Gq7iAQ9ZVhw1nMzjDYgx0GRVyxAWBsr+Wfez5whVwk3lYQp/u7fu0f6RF5ucVLy+l5Ph0dS0q7yCCRqzk4/HZuYtEHKho3ZtkutqtlMXdcSw7JpMmMunrS4X1hcIL3SfGVimPq4cfWayShDeqyRl2gHxvYHrZjIEOEmgrsRXLC89dXXXoY4AWCdEJOZl19KANQpGRIdbOQCx1/84pc0yyYIMuGJARljvow5jYpVyw40NNZZhYkIyO7yCabjhRujBbTyFfHA5Qi/wZdefhls165cX0lct7qSyLf2VW3d5oFbd31iEcdrr71mz0eRESsoPCH2umEWT+TVmBbWxE8N2Kl+cCI1sNkZTZCT9esSDT/sayGlweeyTUfHx+KcJRZJp2lBkW0TJLR5a+/Iovwiq047u7rYWwN+8py+IVOLSqrZuAvKYWpoYsJByyzPpUsX/vIv/4KJfv/99xEQgpxLxIcyl8VEH5EwPif2vBOX+SI5ZgYVNkwLnYW4dXaGga6kR5S0YYAu3lvPefYnjp9q7+xi+sxlkX9OD6TA9MlHH126cEHM0qqLB/fu8RbIoSU4xHLvLgOk4IKblvzss09B7jQSX6EMmJFIOAsYgJcIBxfCwxm1qodRYtYsvJEg4OHLL72KichuHSmHRBTDJIBKnna037gRclqgSVr4SU6nIe2I4wm1ov7U2Y5vMum1+Onnn3ErKXvXU5MzFehQUlqemZVDJdkoxoeUbmneFnPWJgQ6pfYn7U6AsWmcear6TfW8YeveqQxeZGduJBJC2jVVFXSfYBw9doTUsQbkigaZ7mADOT6IiReExDAeK41MUEkN7UntDY2Nsi+4fYYEQkUSHy5evrS5rsERLuMTD6Qy8rZ7+3uEULt7+k3C2PEjJzdXxkR3zzMdn4MIDhzYz9roEJEa6QQ4ZufDEluDUk6ncmBmh801ybwwi+KruflFPQ6oGO2iklLkElBAEDIAdzoFfrX5sLF5CwbpC4i0cw8oC1kiDHbKR23JzETRGeEGWgrYmq+zIygyeqpBo0LgEueoALtteZ5ZF1EP9l8Znv7GrEzGHyloDWA07WYw2tCMqPjEQJ1lwDiwsaU0iGyzWt6qX3ki5B78XvENvIrbYuuIEwA0RDzogpJBx4eHrZL3CpuGR8YN1YQwfKV18CO7t6MT4Z5PJhLhUJGu9jbOG8oYPgpBA4OAkT2IqxZBOOsGSAwFEQWJbhGvIeWtoAzdx2jBJipDwLQFHpOx7733ng4RMYkoUqtQDVQGggroHSAOfuioXOKohyQH7xSmQRAU8gszERpTqdp9qcdSkaLqBbFa4sufCnhLFmMiwh9pfIsWLsW8VcZz9XgF+vQNacY93E4SECRjfTJkPEb3ooIQHTSH5ZUZPV8pwPwhh3rUoMLxEHqcUxi/2zs7tAIw5U1c8qLooT3yRMvJln0/7KPHp5HQb7JAbT5HQaNiWm1GRoUybv2q0OVtDJJ7qLkA7FeBGBJv3XjIl/bQFRcgXoAEBiopADZfeQJx9wGXaCbEKzx273IPoz+8gr4//9AWIVASKdTsRiv8V18ZvhMUA0e9L5lAZ0KMc9gm80FzejWsRS4UJdwmo30Vg4fgCgBSJMAAQLU+R3lvI3MWxjz+jDECj7dEx6WkAYCovJ4VyoCMgVEyrhmWWgF/NP1jyBeGE+6ZVA9xED3BaaYMTSgYVqvE517Bz1sbO5FysMWyrjtBSTDocZUxIKKN1KyzsxsK9uKUI+EEIUJO6nRVIXVnaRlJoUx0I7asJVhpGI3omDDc5oZOjYcVIGPDo/lFTvOdF69NTbEmYcUW/wYBWRuz/Sdl3zRlX3eHZYyGqhgBF2i6oYGaAJUZ4ZhiiOO5g8vLaqpu3rnd3NgsbcZKR+yQbCNXpKq8woSQ/QFNm5w/dw78m2pqTUPxtplm+ML06NGjJaVFLCbUuF+0lzZyK/XfxEMUUxMywn//4Uf001YqugEyLMJh2rO0ImSOmhao3VQxMmZ15nDqhtSKipqhXvk/IWmNB19cXGqeXU4Fk2TgbRW5SIycLpLJnQUAgdEQNQGqbtv8o4zt4mIaVCrRVlvaR0myj2UgIRhMT29vD8rA1ACAmUMi4x/bVpBAIumJekzLbd1WPTU58dxzh+8/uOtz8uOVHku1vC5+IRrGtoyYkeo4yMdTp7M6VJJMbKwcjc008TAxpofQl1y4cE4fQDzAw6aTKG4TGlIH0AoMkg3CFgecyI+3Whcyt+jfJ4iPlS46xdRy3EGuEj2cT3ThaILLYGNnyN7i0mxRccXlyxcMJNlx83bcSmF6zrR+i6rilPoxK4pOhLWYInzkAdmFOSXXyi+CnWoxjpTK1GR50SQ+YY07An39JUqKS+nAdJPUx6QWKgFPAV+BkGrcuH6LMtqTlHuNp7BTLZtWXVVFm3xrYYYMSBQGeUdHu0wqGwXitXnCpPWVWOacuOefP5qUktyyo5nsmZ8SxUdM1IM7pgiA6SaxmO9CRCGIaCivcmCjLY5olABYK4UIjs5AAYUZXvTHTYxGBPJM96GpTm99iGOSE+yC9dkXX+XmFexo2Ts6OZXrFKac3MqKajRv2t5i1X9/W6tpOYcrPX78EOQoIx8D5RVAGTktiKn3tdEQNCOB7PXKUB/kO3buFM/Ww/HXeWzMoFllyqunNNpHEzYQJQVW/QaLuiI31dAhddeuPYrdvn1TEg7J43BIxxefs5yb1RX+F1C4efN6+gaWM/Q76IPpPkEHbfkkNol6aCijFXbwEf/p1+9qcXpyZmvLjrKSiqnpWfm7+Pj9H7ztEzKTV5iXmpJ44/atSkktldWzM4v6aa9ki/HsTQzTViyAphtaQM7VrAsg+fa5cpCCKAX3y0BIYMgwwKpfU1u2gKS2P/7BD3NyM+/dvE3vqirL6Y4FwZSLYMNd6qk8rietHSKOnuCdBfSiHEkzYbkqGsJobmrSsIE2kSsyYB8b5tXZ5xRaDWsLiTSRVDPqnHo7UfmQPcEdHMEdn5AB0NImSBFvrZMZwAPGsBAx+f0kx/PYAsTuF++fi4PI9NT6DW2RIupWWV5JnfmaRSz50pIJHL4yZfn5z3+OKS6gWtvpdAjboeLLtWs3lhZXq6tr1AQj4D18/EjTgCHDZJ7k65t0TPFgAEciCVlhOQ1oCQwyKgM8aojICAVCltON2Ny1a9djD1iQySjF+iv2rbP7KcGoqK4iY5IGaJmjoDSXmZNrE2W6vGfPbuNSb5kIyks49+7bzcgzRHDRFvtMWQgSCuDCvv17AgerKzQK699/8Dvf8uOZAgkUJrHRE9g5uXkASM8IDpUWpcSIlMNu9969Fr+WlIdNKgXgya2d6ww/yBKMSCM3EUFqN4V0fPBwiAxrGR9NE28EXVicQ/beZ33PHT56b+wu5iIU/vqKZKrFCbisBEQw18JTzxGfRPEdYEFuvSXGgCQPcFQ5oyEYCSQUs8vnsWPHIOVPh4jBuq318fioHZFmfEJ+wCxCX1xSumffXv3j88dP2j3jzo0bJrSdnYK2bA6+aAh9wEzw0MoNSKxFBnysMtxNgqQYJQI22ODiBuURjQFEUFgzViaHf/vb38Q+lWKIIEwGeMUYN56GFhWDi50DVKha3fcIdUjfuG1rC+XSsPVUpC7uSQEWr8VqffKEdMmXDTvXOzczWggHcfcqQTSgaoUIoZgmtE4O9REkRBOeMxGANCCkOIChOIQTE9WAhq+88opoHYExmWZLWaSTCAD+GF8Ag9YuQLp4hZl6CohK3rJaIcAcXzHbkEmlmlSLJj30lkj5xSSXWIWqvUJHZdSC03DwlcJ+/enyiYbt4QMNATi0UEPkhNkIYsi3SwvVvpqblyGa/vjhI2/xzyU0pU6AMt/T0pOjNTRqljk/PTVjf2ivbBYhoZYzaqgid42tYbtN0JhLZeCMBPguxBqNsFl4FecA44qADBk7KtGuakECWjLnFZj9Qgr6LiB5RaOjr4Ib7UJK9WhRAffo8Icb9y55/y6f+FUhiikfc9dD5FW/1jXNeKkHmnBUsw1KXe4VCC54NDuxFMYRYYU4y+UCraVvPncfi47CGvWV5tyD2SUDQVUq125KeoqvlCFYAEaQmDWI7K3CGvLKc7++MkGkHsSJIYnwSBCuiNVYOhB0AK8qgBkcya/lYk6Mj4/8656qknwqy8u0on7zBUBVs+ast4ailbVaKdvc6K34urMaPLHhExYQbqFa5zzYniQvJyMnK9NOUAoDNMDPrq+GASpXBgBaR0wXalhX4HmQHvGA/Czo969ZXb5WSFM50AKxofmUmblp88QZMqNF2cNahDQA7WzZWVVWLlcSAXPs1pmTU1FSAbstDVs47iDHpmtXQiqqxTSPW5/sPXjAJg/nz18g48Bubl6ybIvscKmFOccnp3UPW7e1VNdssliZK8zqWd3FXgtiffDh+zwq7Ni5c8exY0cNygnntm1hXSZXxjagYrfMhFCxrCsTLZRfOP/ilctNjc09/T1ExahAVKmiulInMj0xfeD4kRtzD65fvhmnIkgBIm92mGGt2A6OVGlxYfDSTCUt2XzXLMpGKdZlFZUMn7lgK3MEBVn2leV+votgD7tpfe3+/fuetD6CO1ClQmVlZrrpfhpiaQiZm50nOep62M26ibGz0QR7ZGpn9+498j8yNzoseUCdujq6z2lDWLJkY2+sZPt0yf5UAGA01PQlChNDAF+4cMmsl3kMBlTmGCAJZ3A71tZ04YpdOH+RXgoaWW7LikGTTpSVlDNqzB9rMTI8HK15WmltbVfGFLzOVaCL/GAEjQASsNll4GlRZ8YIUiWXUZ9uCZFlt9tdm1exPj9VH8yt/OKLzxjQO3fu/eQnPxI1efToCaS4KUwqN4LjwvLdvXufaf5f/pf/tx3c33nnHwgSkZYjAR32R1C5p6dXWoshFjroWgwaGVIZpXYBggtJZk4kvLEWLCRoZar4MD0j04JRScm3bt1g34vsgdjZ1SC/0RY9Q0OffvqxPoOKGQ0y5ZIEDux/jptovaDV1SXlJdS2tf3J+rQm9Ckrk3c0mZLK3GUaTBpSNmxp0icBW3/AyPC5OdyIr06yBySujJ4b0QgGm0DL4o7WWyKtm/Gh58yI/kyHDTW4uCcwFNy0LQRHxqYW5pfn5pfGJ2eHh8Yrq1Ic2iXHpmn3toS5OcsMJZ/cu3NfnrSpKVPnQsiSzum1pRQy3144eSpedi/zVXgY+0J21oLpSiGefD4lF8QvCTl+4phEF2NRWgYSTr9QCGTZ8MwQa0uHkSxF8tneLlK7RZjcMkFzjFL/he4Iibk1dBDq1oPAWt5LZ9cT2RpMIgugn0ZqBeLBPEJhEwEjfuTHQ4JtSCk5R9hl38EDNpui2gDQSUq3UIaoSDHfvWcP4siKdrgpp5SeknMurFaUpGKdHV1oqHJpIXp9kkB0nZwg+jY/MwEvpsaCB9u2CGlY/6fk7t27rl2/8s3pr/S2nhgEOo8cqEZi7JgZQqnMstLI7YFDhzHaYS1MKJr4dYIBaXVPHYzxHAFBow1lyVt9wyZCSCBByLZAgaEQrDFWX17utjw6QjBbGfTXfzpDF4m4mHJde3ufeS4pCBmhT6gIPxdNciZdpm4sDANCzdEN8UmUt7SSITJQV0AxIlFbW7Nv315VYQHLDAVl8AKXLb7yBOSsonRHRnhLU3NVZS0xilycNIpmktPuKALndlsGiXiZXhHFEEce8tz0jHrM7CkDQWJDZbBA/YDRKPtG7Mm2wYzJ2Jadu9clheWqVv3evHO3355Uhw6lpW+cSZ0TWefx65hNfFQlr5comZWa+s03Z/7zf/7PwJBEzuixCZACs/pVG1S139F11jBI31pla82DITLKmBlg+uid0Zq8R2wS56VWYIOa5ziC5o7FGOQU2a6tompoYOjipcvy0I4df37Ltq3OldeW4NfVy9f0gJrTHRo0Qhw6CE7kVBg5DCu4ALbubrP9IUdI5dERKGHmgSjKbHnc2mrOWTH9L2+BqPhQJ2uLDrjQBcA5rsxGNwGqwQGVaIh1BS2brx43BNpzkDB9n3/+OQS3Nm1pffKIjTX3Hk3LZ5if/+STj9BKOr7pCEtZnjt0uKK8tKezvSmaHjQRwd9VZ6VzxDMzWTZqRakh6yua5Qod7liYK4cUaWdMyBifJPadfGvczoE2fUqoPOdwS0ID2Ntvv3327GmWTSWCXESCIgDv5ZdfhY4YhxbPnb2gS1KYKCYkzB49dtwORe0dXVWVlfYFj5K+F1WoC7AOCr+22hlg184e5yL09hEzsPnWeEklekCAgRxDgUrkCDNagdOHCsS4UCgPEZatYCXwLuYLLrj5zW9+w/h4aIR28eJl/NK3Ehg32nIfoJydNV7FAkt0KB0A6Cnskkmb//mY6PtVjnS6Ab3P8BgcpMFbl7YVYIy8AhwolVTeQ0IAEwW8hQmaEmKbarFf5tPJB8Tk6flQSWXshB1/qyH4g5JWq0oNhFKFcSXw11cxsoVFxTEMoHXwMhx8BR9BWSlTYRkr+zU8bkjqyKwoICoZ9CHLBQwhYQVgqk7s0QTIY/ghGLeOgmBDF8h66NcFCwNul3vlVeVDn7shB+D3ShkkAptXhFsKkEpionkFWoD5JT1+oaNkqDGqUzGXmpVUrZQSNFQeiaDslfIkG+Tq9Ll5D00zBJ6ogbiTDJmRBohCfb71CeANYdyoR1sxmr5CUgADUp3QiU2JGw/VBnIVRq0ECGGn7zTeMWqTh+BVXLPKkYSHjYzmi8EDV/jNL4QhgbaIHaHQBHTA4z7GLvowDCM9BDZccFzUTcmwvCMaoJNIXwEMAPACFVts4yNfAcaO1P4zTDKT6pIYCCkfWi+k40lOThXUkaQuB3Fpec55hwNDg1bOiaTJ9DGvkWs4sSREl5CxMT3TtscJBhoO8ElIdYpWTa0tvXm3pucIA7XRLkHSMTAQZPX73/8+Bnkl4VIC45/88Z/5E+TgsSWoDTFNrDn6QCjRRvK6oqTE9boKiRECdUqSOtksyrM4NNzOD9x9BH/55Zf11rDGBX5DdDClczAWGhubrOekfFjz6Enb4pJpK0z3xbwe9+y5rxmLlDQiuu7y5avlJXXcQeItSWxtZc0w2MAgOydZkoCm8ZGajjo6enleQ+CBnc7PKjNBRr4m7MTvQcULtNac4IlVTExMGoTohrkOu3bstI8kpiAIstBWHNTrq/zixUucEiEoDornpEX/OjURuIm/fsGPhjp+HNSur9AQZ2GCxbES6VZZMdKOSt6CRCuoSqQRRKp0V1cfCw5OVpj3KX2TS0oa/cYCIM8S2Gy6t2rn3LOJmhBT1KKSQyPDakBkppwhYhMYXx45OTx//jy+8CABjEcV0XJLQsjbtgZawgOH0tySSiRGoxuJJZbcX+ChpycOIghpnVGIhKgzd1gvlflnP/uZoJpdO/QEqMeI5eWFMA98Hz68j1x//dd/TRndvPPOOygAO7uguKGnagMDT1dtSBdpLWUMCsVVRUBsBRhcbIEipcfzoLyRpF29donZ2LFrlwr5i3YtPHHieacXGdIUFRfs2NWiUa2oQVITKjmIHth6QclLKvEKMXl+2OGySBETuWLgwZfsxKycrI18SqihLZ7igoaQDg2JkE906tCk3bipe4vkavR7P/hha1tHW0dXdd3mxi1b8vILiW7fwKDxp3Am28sVq6vdlJeXe+a0s9XCvu9dXdbwhDE/kBYWw8I15wno6cUgvvnmtH2o7EetQH6BDdSfAc/ITfYLpmCuwLaHAAYhG+WKPQOevRldySE25tqxc3tvbw/yAhiDmBSD7ePHK0wmhwm9qiorKFAmN5cYBMeXAccX1SIIHhEJgq1mwCMmeUBYszeGVcobl3KRnYiqfrSNur9UEmX2UqRzanKcnbS+iIfx4OFjHp5FA56wYIgpq8fYIyjp6iqlU5suAGtMdx84uO/x/Xuhflt+LMxV11Q5HdsK4L7+btMyzLIDTKSeT46OvfDCCzeuXUf/ffsOUITTp8+aSHzt1W8JOgyNjCKXrVcG+/rsYwEFXp1YFDo70lvgv6PjibGevdoBDHHc5G8pE9ltq2B3IiyioQZvhs+BGnhNAIyfqSRKKkwN0ZAmkmFeC8FAJZ73g4ethiI2jCf5iMlBhDiVjG0Ft4xxI5aoqhIjK8FBzalcYIIjceS5QyytythStEVMlgGFeQJOe1TnpUtXbJjT1tohaKVmfMEmNUhJ0tacWamkxOGRIauJVFNQmC+LMkRno4lNQQFECOKS6ASGEiwAPNPEdPD8uF/Saa3K1fF5KNAAKTXDHT0h7qFMRz4usLV1PWjluj179hlMQspQEzvII/1VmM5yzrDYAe1GOADwyaZNYbM4kqaMMU5399Oycp7cos1hxV7Uz/7o7vkvJBPRQFtTI1NxEiVdQ0PDOn0eufpFQKCvHqrEXTAsd08dJKRgGbkKSi11enGRyBFmiABJGVSFr3GIGTBdj7wJppVzj7aEEN8NrsgzTpEHJBIjMA8M5T6zQHNz5ZtqyScOsniMOWHo6xlQxjjQV56DJLCjrk7IvHFz/a2b1w2JM9KddVNqMSehsh+amXxzPtras3e/wu/95tc1tXUE26gSeAiOp3oWw9TYcHniBk0oMiw05EJJIucVNuGsehglmCrAJmMZmfHKJwiObsQY1maWyspKzAUhAsMOF2W4prRAVT5BVfekjlZiWUNTo0MerJQwi15WXskJMEfBPFJh5OJ1MFyoariI7Ix/RnaOkBBWEm+VA1tPRL8gjiYa1QoLDHJwYjcJQXmo+fU5LMRoUFXPxRhqgiKoTQeHXMjCy0d52qQ8HCka7SNp/nRxmzWqLYwAPCsR9vzRqoq8IPfQ88T3cTmoIlks3x66gOJjYHnolwBhicKKeaUqiEFAJaqSdm9NHk+FRKKXVYnahnMsZyiuKs9VC1s6oCMBFmAwT212O0LHvNx8BTxUpxACfthjRycowYij7wQFJUGiZk0jhDELivBgHLJAxH3FgQSApAvgcTeBit/KwxehAeNeE0pGhUMo3hO4Rw8ksocEGDX43IcQBzZRiJ946Elcm+fCy/G9T1zAZkORSBnfkht1+sRzpFOD4RzglfQts2CgHsMmviUeoDymwqIQUfMKTXD7U5epda0ghcIsiCbMIAeKRSlYaouhCh1VUphOAYBfD934VUDTEISpG8WA59sAW7SVG5rwuU2zBzGwg1OUDxOXIaCWA8gL8GHikjkf6c4hrUtVKqdOYqIq9KevkJCZgAXY9OJEwld8XP00+BWLxCyRQVfY7igANC+iTgiaa1bGTGuAXJguOQxQ5RGlp+UIukusV8mG1PXrwnz0qpVY/ul1jfUyc7PsFlJcUlBZVnH3vhmGDSlpKQuzYldLFjXb/Jhazi7MSlIRUfdrFW/ISbWEem7en00NDQf27++IPDyZCSSKkLAgQJq6NZOQnLJ1ewv6aNSHfb0DNIGL5tyK9o7Ozz/5dNfunXt3752cnF1cHtMB0D17/PP1EQSF9YtqAzncSbs+m0H0CpWiHUXGxFLCRuahO+mTb8jvr29sYGeLy4rPnTsj9ukk2tGxQQ6n7tD2ptKEigtKzGcgPAj1CojMkFkVt+/AfhsvXL9+bXxiXFau5Va6Lh1DalqGOSrt0iZduLSiECyvqyWBy0OLeilw4jKoTp06cfniJTxiT1NTrXKzUce4PpV62lKWkpBAnDUGE2tBKLs4d7Y/Jq4EkiVicFkf1v81ec+dnSwUqw01HQMXU+dK2S2ZIjym9dWsPxofGc7PydZiT3cX4gCDf09QJ8edctJPV3n5IOeD6sPQ0AyDE6Z5Hvo59SCUhzSLsWMZQxgmL1uj+KX1grz877z5FiqxoeZ/xJbI09YtzVxPNzev3zhy5LCRFevhYAfADw9bp9VqrAs1HklB4QvTU2OCOlevXifkjY0nULupaQuy2N5Bfyn9wNhgoH9E8Iz9kUiF++BB0thEwD0aD5gtkdAZTkYTsDGkQS6zH0ilUb0pCLn7BhL8Y2vCDMz0jsdPnbQmnopVVNfQspbUFmhyBK2WKSooNGXPhC4sL8gwMTHCVza5air8UesDWVU+t3wlO9eJy4+wQ4garQRrdVoYcfNGOGWGApIcz/VY2KpTtGnv66+/ricWqwM/oZWxWVdtKr5G7Jzh1LQoL9qaozcOIT9mtOgFoy35lZzIhoKjVbmyzNl5TegF4ShmKbm5taMdtIwfxbeiFJALi7NvvvVGRmZ6X1/v5SsXLZCQpWBTMDZBWJrx6AlZy3ZTyXKKqEMgOUkCQOQBQRAZzKoy5UMmSYLUc6nhunXA+1bf2dszWFpSZdyLpyFd55/+ef/+fZiybVsLOHFhasrcyYjOBZyOh/OwrLRQaubO6PDaKLWvE62OHD7suADek57ObJhYoy8JiUbnF5dsqFZaVgHNnt6+7KxsETI7RLEVnEgJ2DYhFaQg0mY779tSKTtHAg8YUB4phAbo40svvQIjrevR5MgZkIANPXm50OfwGUwNDA+YAInCNCy/zkXIwOxOCqZcOncRLyzgIZmGIisJiXaMgT4dlCOOKWSgsKiED2dDOU6Grcpxk64dPrjf5yOjQ/poW9NgrnbxF/18q+MAJ5mxIJKG5ueb5es6d+6crorv4sPApsZwjJSotidQsNOx4Pobb7xheGm5GZOSk5VtM0SG9+H9e2rbuqVJsbwcgTm2d7m2usrssazInS3bkejzTz/hdnd08MPWWwPAVUVw/uKdO7e0okeAFFlVD01sb2u7c/u+Zaj2jjN0t4QWEfjNBYWFZI/+QsQ5r4QcYR0jqFdiAMeHJdaG4Iqaya2qrJhXXnYTB0cZX0XhlXLG3Eqn1NTM5PXrGAiMS0npxzWRfjq+3ikiJcH4oHbH0+6LV66SdssMtjZvu33zNt2RZy9olWvVcIaYS2br4yc0xWZZebkh7VCCkIAUEeLHsz/f/e53L1w8R4TYGUt32HOjJv2I3QisERoZGfWKceDqyflhu2y+8XrYlHY9LcAyY8JXd7R4y9dsaGqCHuaCgZOg97FNDS8F3UwsiCWUSNFzMM7g4PhkWPLEwpC62YVF23Dx6vqf9aIMQ60Lu3Hr9vTgAMOrt7Iro1EZQWJm7bRjTaobr3RqvEyKwN6iBgYlp4T0Y24ukWhrb1e53iSY0+IiANtgo7enG9ktP+V48Y30+5LK7AKCHcbBdHnv3j1s243rVx2rvLYuyTrIIvEFEdiVleKS4KzTVrKhRduu6UfMgXsSdvGurrl643rs8PhlMHk4SOFeYd0QWumhdBaYFRsu0qiYkRIj7Ab8PC5cZslBq3Ket3l4wolNufl59ty8c++BjvSV117zxGorU3NlJaXmMyvLyu0DwD3gzyhvlxG1dT8z6V1HCFEAGGyXqCIOQlNzagCeYoDRIvDAyW7QDg8prF4VhCBBMfzFTV0hzrISRnRGRLoVfRB1MFr46U9/qoBWoBOEPzp9VWEWHgs8+a//9b+G7H/Na0DzWgUHWF3+RKw/3INYRS6xV2D5hKDQZ+VVhIJgYmc9UQbQPvdK1ofkCiZYK5w5EKgQBMxcdWVYsmPjFNLvCXL7lvwRGgKkJAwFZQGam5OntpDNHLYYCmubpNn41SIYdHKAb2t7cOXKNfuz2ubMwjKE+OTjz7RoowNfqTMC9V+26wGtpmHkVagtWkpLRuM6PdQcXFQLzaDR/5oQpTns8SHYYp55Al+/aAUe1dqhyBPNqdbllV81AMZDX7kU05wn2jKgVwCESKQG6mHmXNM+iWQxDAzcK+lP24ywCD4EHiA9CTQM0XpHGIbsxhgd4CmvWoywLFUZNYPQkxg7BFfyDyDB6A8QJhkehPN9oSAxI9HaPm2BWVvK+Eo9pADAxneLc2CwIJvRU/cqSLylLZoDgzJ6Jg/9qQb1eCj85sbFguOyahWANVMCNvWLBfKB9IVGYZ5LEzKpkpqcJDEgkCEhbADSVL9Zv2X8xOm3cyJSyDbLSEubWJhZXV7ISMuYm51MT1nXbT3o+Ojkalg1lVssdWrFUN5iNfSwFAx4OmObNjhbbWVhUb7ZwuraVNKUyBlrwsNRgJbCCGAA1vE35+WPT89JgaUuERfW7PhbXlqmw7CEixuxbm3dc88dBs+7v/lNfl7e9u3bMjIDNz3RNMVDQ+OIV199VYdK5rksFFv4X23WtJhDOH/uoii+BDomVYWikohmGDA5Mylrmeh1P+v0CbGyS0BZbUXrww4JzTgoXGGWFT2rKqz+an7y+CE5N0Zn4DzkOmjOjmldPQO439radujQEU68Loc7y21Ssw6V4WbuDZU5T2ZCxXVYKO4+g0J6YeHyyd49gsdhK7CHj54YGumcOBCXLl/Qd1qD75OvvvpKV4RTKmQ04w9F2nRv6KkG8o/7eguVKEPlocnSERUyYMmgEGdNTd1nn32G7PotJoxFU9X84rJAvv6P2VEJyhsSsKE4hUdA1aiHaC4VzbeZ2Rm+Il3kUzeGBeQNubTLsuOsbun9999XUkRcL5UTgi8bPdSK0Z0bc/coJsyjfFdnN07hmsiK3s7nMoKQNw60wIgFt3LARkOAQT2VQEosH7TuX/vWKwCDLMTVzHYz1owV90j436IuYUVsij0/hhGCTc3NJvfYepTRENvrkDgaXVEWpu8pRyiWFrZm8gqCyMs/+4d/eAfN7SJCBiSKgIEnjSnU0H6LWEkadTAERgwFZdwrCTa0Aq3RFP2yvtONYQB5k+wEMP6T+llviolr7sEgEGWiTElk4Q5qwhN9NwqYO/r4w88U1gXoKwxfLUiwh4ndaE3yCGCqwSyxHdY5kTduXmXs6zfXSgPj/QNAb6eSRw8eOtTy6dMuYhNtKWYTj+1GxNK9yN7T1jB3JPSupCUEWKBOACMa/TU/TdM9IVTsEtYikSOAjh17Th6XDMHOzq66uk1kFRnVYE5RoJ1fSBotIEF/nsnnn18gfmiOiYTQpVfyp9YJEuqRBDjyOaR++kQeoA1MsezcufOm0SjU4GBIimNOGTekFn02KlCDLcL+9N/9OYqpGYS8QNTGx+DdJiVROsMzrdjcDNgxK0vqjcOdxrVHFEwukO0GDaL6+mYZloCCkNtCSIm+eOGyVL26TfWxzPsFtoM7UAAfFUAi7SIp3jlIiNyKYogCTM+Ms2BkHvzEW6OM4fHjx235hSOGuOTK9lzCsY0NTaaPmDKnDahHVgm5BS1NJOHqP3rUfoWXEZ94kzcpcwY2FkHBlPwzgISfZrmPcO/wqx4fihYbogsQ6L8ER3XiBuTHjh1DE1lhUilwioEiYyXbt8OFAMBLfogF0cKMXOTauk3KgNwrTbhkzzMO8j71kiJrui1GnYQU51uN02beQw0EWBmsxG5cAIkmsAYdYO1P7HaPKR5CUxl/cnzB6UZbjG1sW6gSgjtJqLamlESJJjO58pZpMDNCwnGEYsKxqrqST4XCvHyJUgY8LAOnH2zgRBNyCzyUZAFYWjx98qTVrIJekg5u3b6dQcB6TZM9wobUyAg2EF67esNX6IYaLJ7uAJxewSsa5BTA2lsPaT3jrLAnSIqPULAmm8VRIWBoBBjYdiVRwGQyo4omZpY4xCox0oO7XDKFk5bCTg+MA01ZWl0hSz70py7g448/9pC4Eqfa6srM9DQaZAMDNWCNVrAeA0ipcCnbaMxgKkl5yzfECGx3gxfqAR4uMGXIRZYADEcev0roo+aILkSoiarQB9bAY+fhTh5oq3Y/jfYu++STT+gCpHQrqCReDBiUR0/ygLmaoL/uPSHPyI65LN7UzGx7e0e85ev/+B//d2NjwwunXpKmyEsy/CAP2kVPAy3ttj55zH1hitM2hOCaCiMTcQ54avMnqKAAPFRlJag/0eJw4qyuBBegbE5egaDLi4u6D5lyCkMTN8UWYWTg5BNvNQEFlBF90/WABFJQ4AtRTDzSHNEKMwDq9SUSuPcImXzsHjOwSsMkiRsKeZfZP+25AatPVKok9lAeX3niK6+IlGpFoSSIC1T4E7e0Ais3REGdgHAgmj9B7FbfQ3DdEx0I4HpZeQV+oCADbfN69euuBNuMaBE3xvDRk8eqkiuZk7Oh55kubZwZsn0yMYV/kJvpCa2DEw88YXYBCR3AeB5TKnadQYIoanYDHu36k+8FHW0p40OQ+/WnAsQFuVRCbTQUv/KQhvvQQ8CrX9PIFdsFdapc62BGqIj4c/rF4ZEw05qVGbbS91wNFDmqkKvnyK0MjfLLUSZKEwyLKT2IS/LtlQESjLSrHjT0isRD1p9e+dOv1gGMU7hADtQAPPB76AaEarDplmJo6M8NGwJ2sNDTiIy4Z2ts/oBy8I0JyLoIr8FVds3MZMgqszlMEADJpJIlU5IgLO5OGGTcrKWs8OHBZMAn2dc8aJCo8fGeZ88gHkQuWKtEMZJICcPUjbFYTmYWqATjrfujv4N9vY832ngnY3J0ZFqIY2Wcfpp2cuzI1NioxI3kdWsFeWFqz3YBB9563a4yaI6kKMBZ/ObLL6ynNIpBq2NHj9i2v6mh0aGm6dOpQBWAv3r5su20XnvlFQH4OPmYokJQjLOnd+DBg8fPHT2emZcxaZM5Z7kLE5UmCtrq3mipLf8dVYjy4kN2R+amDA/1nz5zBg1Zjcgz/kL3JkwoQWhkfEyoBiUX7Y+Ysq6tsytBULO4xBiJcUQZxuL+wwf0Xx8p3i9oes8QPzXZgQnyWSv2Vemn169Ld/zqwUMHSL4gjUWNeE2G2dBf/tOvTKfqC3HcglpehcmE8ora8+cuNTU1U22mFl/096ynzzembRTBJTL8bzFdawENGyyiCDsuR/nTxEZ/ZCnq40ePllfCHKCsy0MHD96+cweFf/LDH7AVAlftHd0oAH514oIgPf0Fg1+Gm/1ijCAl84E8X7p4pftpD42g70y2tD0fCvQeOnSYfIrg6ixZOvpy7+6Dv/qrv3rU2vaP//iPwBDghOmATbKjAzv37z/IuTds05BtdqR0yz4Hj1201SPYL6gpxs/22XLAhuKOxbVqEHjv//Z3QQVSbU+8DoPaOlqJIg+G/oKKdRZZoQsaAkNMNDF7BfBI2J7QitALNJIupoZjhNew+/M//3Pe8L/78z+jjLHKc8E959DIKdfE9ev83cJYSZGdkTx16gSynz9/lgON8hwCykvrHbOA8gjrGDL9hF3bVXJ2Xjp7ll3zGDqchbXarMyDS1Nzo172+eefp9RaX1pZdLAUZ0iHvWvPnpiVNiHd3FAvQdn+iq9/6w0CRp1jjY7dOEYgdiM0Hb/VZXaFlGULq6bZUrionLnTSesj4+EQYNx7Ililg4zsWDY/bS0xwW76zmyZlNAxNRryKNaHaSUOvdD11i2NcmD6ywtGR0fs/6MSZIRIbMyRnbeEU2Jv0j+4KRiKgELvBMMhOBTZ5SEY9E0USgdp111UIt6cOXrqLWoweiZqSB1MCQ+RCwcDffopFtNxbw3OFXNphdXVbn/fU8Fxp3agBgvjidx6mX6hz87MBGF/b58cQvJg98Odu3dJK0FplpAnF+062m+Lctysq90sgmu3+NAnrmVJLxXXNK2Ld87BIyGEX9KcxCFUFTLiKdrp3zQg+n/99dewoDisK0whVVFU7uBYGRMTU8E/qKgsp1Ngs4+ZsYwpwT/+yZ9989XXg4M23Kxv3roNl/GCCqDD8kqYgpM/AgWHzJp7sX1QRbndWq1l7ZyedTR734MHDxGMzeYxmHwFGyeelZAFLidkz+79vI3PP//yxMlja6vzzAhWIjvA+PSUiKjQJiaRLhshoKc/0Vyc8te//k1r22PF2DHU45fr/hBfbNvam4uXzmMWe17kCLP1SeZGgKfLo2UMoMwuhMKI23duopKHnEbTNpOTE3DJycs7d/a8c8nRysUlIiQENdHOkNFh7f7Mys3mEjGSMOJNSGdSCR0UN4ykccyY0/iWiba6mr+LWCUlpb/61S9BTmwcH2gPK+KN3eo0QuY1krpQc7R1BG6SHH8iBUQMRYCB1HYf5x9nZe2jfThotzGabrdiwGzYKKcgjCti5mK3Oo15fMho3717G91Mrdj5g9HzLY4EHq6sWDDmK+UJAEPhlYnHeCshvCYP3EeQyOBdXVlFc34IFJITDP7zTKHAmlmLuBZiOgAzzjTAoP5CbwKb7Oe6tQRhfoDpqq2llgqrdS6j1Q4UHw0ft7VC4Vs/eiOceS4rYGS0v/cZ02ptAIVlx1gDW+LgGjjVLK1KbQQJDe8/epj2wsmJ9SlGb/QOLsZ4l69ekd/U2t7ORFdv2vT37/xMr3r27DkaatybMDpSVFb+rN+WWiHo01TfwDjw/dEcF+gvK6eVqopK50WosKik2PhEL2AOSknhJGQhdfpHMoloIITFW2+9hRQgRHNUMr2Jwp4DlSOOmDpifYELjmgYM5dIox5pt+88KlGQqqoQuaZlatLdG0nappZlpphqFp62J5ivVEs22Ae1aQ6hiCuo9Dj0BfwqAZLm6IXmmGI3oAUziwcevaTuhimOwy56HGU0oVG22kMVsn7agpfuEiQQoXSAISeKQdZXBv8hfUVd1CC+4j7Al0THc1KinIeA86s6cPhVC9AVcA9ixdBLpYDGbJ8o4N4iYHukoCZmoJqT83SoakCR3mfddBjCyjuuy0M6TBDBjUCicZg06XiYaM9aDPiHf/yFr5gX0AuomiIni2obHh1SsaateCG4NvwZHBj1VcxgkHBYNaR+cV9/IgGwcQ6OkIrRwQMKABd0RBA3kI2CIkY4YU4DSEp6hSzYBh1UVokP/akqOPok5h94vPJn/FBzbhDEb/xJoESIjrtWRe79iyHRkAJK4rrP3as55gtqKw0wZgs6sAvkjcrHyCqvJCxUxXb781+wW6CtYWiHQT4Ercsrl/p9Cxi/gNSEJ55HjDXgSdQrayI49wmZWOytcVCC8XEYT5kqMOezlJQYFh+bLAGqAgjCLKOVCkNVyZbizZEQZbxNt9/cWJhZg4hLJe6jakNIUgW+UjImlD/5N7KL1Dk2OZUEHidILC4g1+jwUM3OnY59sbG98uLu1y9fULKiovSPf/xWTU0FptlvrrKsikWcGJuwGDEcwCGFPTPj8y8/M8ZfXFl47tBBm4Q6G7qpYfP87MKz3m55NrwlvD565BB1YigpKq+OZPb0dvPnevr6t2zbhXcm9FlAfYYC9NBUO88SJGFqq7oa3SgwfTMV3nunz/4nZgOsV2BVd+zaTUTZU6lxC4tLjljatLnOMXYwl+qGbtXV+bJH8JrpvHn7ltrIJEXBiH/x0lbksy1S6bDDTUKKcxsK81M/+ugj6mC1qIGQTn3X4cNCqrp5ayU5H3aLSFxnHrBA6M4ErI6Bq4FfVA8ujIvVYCZYzJPLOg27AZq4m53mT0qXkoFjlEPRWCh8Mc/H6ce1gcGQJyDrFBGELTnf4iimMugX68NZ8QkagoEeyTzWnPKxpWOM+F76ACMWqwiIFheEHPL8Bgb6WSV2PC7APEBf+BmcPkftiC8FZAbY6vSVJwwiXILFwOPIgdCR37xxA1mQVLgXPHE4MLY/dIGWuXcBWBlMpB2Z2ZmXL17Zur15daWrsKD4xf/8qr6KH/Otb72ulxXN/e//7W+UZ/S//PJzkzNhfGu0PDymF3zu6GGL2zEOqEQIeBx6wUXaJNYoJkRZxB0ZBmsAeB7MA5D066gKQvqHZVYOSCSBiOyL1157PTsvzGbY3iy/IDchcbmvp5/6W0ml/s2bwzkAMnq5BaI+zCavg/8hNkz34YsO6EzFGEyyhKqHjhxRM/Xn/ZscMNXOrtJmosWasb2sKJBQBj0Jnq+Coe4NW+4wLEjEDeqyKveFk3iH7yimQoqMrZpTg14WfWCEsLgDWXODK6t0PHHvnh2Xr9+w56AD8uzcsHevM7barPIPUjTsjBsnqD6xCCdsbut8sYJiKBgJBz8jK/fNN9/4+ONPuZX5OXTEsVztJPDc2Qs6UWMJ4MXNidwzI7ip6f/1v/5vjrFDGVSlmOr0fNfOfU6vjpes4BQ5n18IQX2y/cILL6BbRKtx+3xjhKAs96uirFgBSCELssNU98ygMW4QBwYHBY8A77nU8wxnjnY99Ykn3otxdI+FPenpF1nl9hnXMSq2U8zamMGaCkbQRzoCC6EKrRA5wi9oR5A4FlBTM/E2fjOex0fVmq5cXlvmE6s5MSUsY4ByYrLYttC1xY4pPKroUJaQ+eMySFYzJcVHu0YqjyZoZRBrITK1pYM4/rS7E6Zq0hzZQE9OsJlJLr5AGL8cx50Hxtly78ovyHG4ofg7aFkkdRIYYHO7YUEFjEI9oUFopU9XhsrTPgCAh6cbPOANGygUD88qTELlc6TwLdxN7MgsMvAjBoYcEUhZd/p6fKsGJUujfaiwzxMnNnKP7tx5YEdpG1lKRjIv98033zhoT7eC+MSSiOI7kmoCkBBcWVj93ve+pzYMRQQIYi4xLi1RtlxJ4KmH8LNOjhl977cfHD/1gpJaNE4gM1DDPuJKU7SiLUICa1xzWGR7a6dtqShUaSlelUg9MrQgmb7iT5IoWizMCHGA2bD14KGNhIpUsA94qioBJYsWgGGFuoVduizhtZxsnA1bAtrggTFUDLSUV0evqi+cd75nj0E44YQX9mnFjRXPoKLvflXIOGhUPcAII6XERP6xOkkFjuitaLDcS8/x2i+UyaoMHEKCAtbg2q2CdOm+0Idh4ci57MXsiRrIA0EyA8Cf8S1N16J4EKMB4OKyUman7dFDZiLMJ69PuXXnthO0bDIL8Y3ZOZ989sWkVZHhqMQaYk90yysrvCKuWM/wEgl4ESEU4xZ7UlNZBSPYkbFgyiYMqKc81y4ckQjfQcXQ4RdGIx22YpYbGJkGVxgN8YsOmiRUFemCGqLFvFZS9FArmlabhxLD1pU6T0VqXKdvyaoUZXN9KpQbARKZcrhpcOWtT8wQIiCSIo7a4gs8ZN4TaCKpztRz4gRZwMdNI5pW2DEGBwAuSBn2AE8ZrPHcIAqdlfcKWdygvIupRLSYxV6pR+VicPCKl7qGrX4Ipcs3ytFVv6pALHD7xp+EhkzAwUWdYrDcAAUDNIO46lFS7RAgDXZKcQ8ruNkGFW60C+ml+hE1BzMBRUyR+4Kg9FCOIymEEk5z2oEnTIUTx44d14pIG1Gz7pDEwHbR0VTLS2ow76l13k8UOwkLVvSLaoic8OV4Gas6lUE+uKgKCjik0RhgnIaC+1gs0No9E8leQx/8IFED1OILNeHl13N1oht83buBtfL+RB+/wPAJ9FEvECQavqscDMilIc6VhhTmOEqnViA2B2AzReI5hz6M5KPymqBO7gHjXmFY+NNySVfcrmg9MOImtIiJwPDWr8JekXLfggoK6vHEh0qCx3PFVOjyp2/5HEDwl+kXQyfo6GqUMbbCbT60GhRQv299hVzMqIdBl9aHQQUqRc+9D1njsvrtTBXwjSjDMYrGGP4MoqiJVXqTYBoupFdJebJyLj0tNS9bZuf6lOR1M5MjU+MjF86eBk15SelA7zNpTvWbqvft3Z+elmSj52++fpSdkbW0spaflWVnZYcFSnPMy3YMx8bkxMLvf++POttC8nE4tv3xg52NzcKR5itsCbqG0ksLGrG2TBavyUDbhs5MTuAdBA08EMF5Ark5BeAEGwBgAfHICQjhYafD4o6ZXI6oTYP1gvWNW7an73Co5NdnTjvMLzMn0/Y723fukKcofTC/sKi2rp4F7OzudGaQbTpsbcXci8UYNcigMO2AegKlolxGF/aAIqjioIUOEG3vRFU+GZ6KbQgXoTlgxuZmxgcHHCWrO9R9akUCRN9gv97IcmumzfFGZWWWyqzjSDFWnBXoMFgmfHj/pDHo+Oxkdo5x5ryxL5pjHG3lRtAR6imZZHNd/czUbLbV1tZ69sl7mZO9m5YqLbtAr4n1DJMekaUDEpMENsma1F9PryP3HPW++eab1sdtyMuGSpBd276dCyiOXVtTJWNydGTIn9YbWmzdsm271s2YW2pl1zNNoC1zQfWYdbbP3E4c4YARYdb5xU4V1BgKMItEylIg6kJxQBJjhgsSqYrxoQg+5Fft2rW7b6C/MNrp+fLlK7Des2fvk8cyiBIEuYSdNMckSvE8cGCfnI1t23aw3TRF69o6ffprICEXdvxf/9f/T+dqLws6zh00gPR5dXXl37/zd11d2dwCX9munr9ie1AHhUpvm5zcZrViZUX1kecOFBZL8pnUy7R1tIPfXKzR6WrCKlbOzM+KW/OQ1qemy4u1BkA2C0YIn9uq6MiRQ7aWglFpedgcg2Onh/veD34EBkbPeXXDo9yvGaE5b22zqOOBJiB9gnSRkWd7Q5hG74hiRlMoRvx4bO2PHxjGsIrkh52RYEMIcVB/T2eNZ7zimJJbPndxUdG25kY2CunSUsNxy0RLh0qi+vt7aBCiEe/Hj+6ZCs7YmGbAiUq7du6ZXJ3auWO34aWTChyGJRDuSI2Owa6ivcXGsaOj17Zsaaook81UY5BM2EDLXBCzzMwsroyO/Fvf+hZcIGg6iyHlGWPTjRu3JidsAd4MKfga4ct3p1lWehB1hksOjLbe/t4fya+jzuYuHL5ETgiJyvXZSER+9C9kW09BjKEAQRXqMQ1Xvz57HjUkFhL17JwsAJildMRSdxRR3tmyg/xIgiKcFsybSPUt8w5UdOAoo4n5K61LqyguKqWtyGUbfkM71o+HgctULCMrY2Z+xliIfYYdyP3OTM9aHgfCyZV1JNbEYH5J4eAw6R8enwjhp5raWrzmS1FAYQhMRxNjuU8+DJuuwBfLnEXMnigG64ICaSpPjh09jqT2HUZnTC8pLQaqToG000enO+Kp8K79CZThFAh5Sy8XYnA0qb7ejSQ4cL7wwks///nPtzZtlad0+8ZN0mWkpDfXIxjb2ELRdpBiHGRMQ4YlZjOuX7lq9zPC/O6776InFNFc2N9Q8P79e/I+xkdHfU44CbZKHF+9a9eOkHG5tESnSK+l3kJclkEX3M1jLkRACDNu8pO4xVZpL84tb9++C5AyC4yvrHgxN0W5aI2aLX/gM9SavKuusYhfohi/0OIes9Cdba1MGTHwaynaw3t3qbMNebM2bliyu8TkhH+hWyksYOqNEsxjQ2dkeAhqAmPDA46RmZVhOzw858hIO9wTMCYOIwI1psaxmyaSn4TENZyyXNviEEEfLm20hcP4k8etVoEjPqElJI5ndJ6oaWndp/1ArTplNDpa2+B75uuvhboJBrtESW2P8fRZN1biOMWxWZAuwrEG+O6JYvaYGhk1r17vdGGiODg4AGsfXrx0maUlor4dGe+0PO//z9R/Rtl9ZAeCJ9J77w3SZyITSFjCETQASAJkOZJVLLKqVJJarZ5ptVYfetQfdvrLbp+dOfutz+6ZPbu93S1pNHJVpVIVi75oQQPvXXqHRHrvvUHuL96T6uw74OM//y/Mjevixo0bNzxzXUEsULG9C3DQDjdalhOWqMdqYztIB3HzZnJqipql+ZVHxMLCAmltw47BTjA4nb+RnErmH03ZwdMLbAj9N2NyWLz0wou7YmMm5xdMmvizpa11aGCQ0eKOTrxEEp0kZm12d3Y5CYAo+JI95KwCkAwN/NYb8ElSsG7UgiWMZnD6Xzu4giT6UAvkMQxt1y4FiBs9A351kYy6Az+uMGo2oBMcPIngGXjUv7ui3AHHjpYWI8VdRJUvmfBKEkVenNmYGJtYWArRetgYcgKfR5KBqo294c0OOUiiukXXqIMhvaTq1dIjIAFgbvWAUoBHMu8NAUpNTM4vkXSNGKMWDEfj3rMT8BXjhFwbiAKW8Ur+s/UP19rCwV7pSWXfsABx8OVXf0bsPGZoKKOkpmEBEKA0EgBp3Rg8qKWKPsBKOKMfLaArqtOeRCtB6FhyMltHeXusWvAndDAHUZ0MU5EtreEQNN8DhaVT2Gc7GoAtVQD4iQdfUipLK8F/A3MDJmnsJYsz+E29vgEOBue9rAFsGoAZYGAGGzA8oyVK+xAhvxos4I3Ie1xlRD09AeM42MevkGAghqmwMj5RjGnTGx8xLn4FnvIqRlHnT6Pzq5da8CfYfLPwM7NK4FnLWojCAzbwwJU/+Xp9dKGjKIEQlahAWnQxoy+zjyo2UtVSTDt6UUV5LeTn5Pv2UxSBauna2DWrVhhAxFWPWZWhYaO9sMIBD1SXU8KhusorqSXF3dPtExAbORXg23D1omXw0FxKqmIIsj4bJpB8e4NoPJgIIUunkqqE4UXWqQqgBg0V/QBD+ztPtmXssSjikJbmjcPVzSnuFWfLy+VWwj/t9Pb6ckUZ6/8oE+ra9UuuiWnvaPnWy6+4QCQnK88Y7WsykhYXXHi55ehV2e5SyeN2dm2mJbmPZnqgK6zyeZLEWs4vzYP8wP4mMzQARF+UlBaQK0s9SdIc2LKDd/NWG15FMvIjSTZZomuYOxQ1jsUzEshgbxObiphzeHRU4d0V1fUN4bib9jWypynkURm1qTm70D8wSCimZ4KraWFpmb3OtKW1iTRW/Pjjj6wuMKSOHMuLMg99hAc45+xc26+UHhHOzVisXmMBw8BjdVdMAL414puXur5uj92c1TWGfqrghPn5BZYiaQIq60fcPzez3XYrU4kybGKyqeRQMjmJXpBAhlhBCUvOnvjJE0+La9Bu494moxO1gqP4GEBOXbIqKDicBmaqCvxoTcHBmInEtz/xGwzDmJkJDBYq2CPgJ3bHQsvGBaYyf8tQZFDE3Fiii/zbtz988fw5ikJ5aKHdhFt4pgf16E894n/oJXEiA82OdjawASX4OxThMYUh05SAmrbykcwsK8SZsh4cGB0eGmf0aEFSXMUOHGj2bFCG/PZvQmF6Rjj7U0cPu/ibycKKEspiOHoHKu+jWVJc/smnjzLKOVY5jXLzsm7fuYFbvvOdbwvww+oU/ZUrlwsKBO7Hu4eYR8IoMIVoI9l7Ln3z5Y3bN52gKi0rdi6WgIuV5xSnyFA/vjaWViQ77Lv0VGGT+VQ/iZS20vIM8IC0exVVI++9955wZHR/5dvfst5wSgEzyB9i29p8CQMaVBIGDFYxLhXKFjCGDEhMi6za9FKz1lFGQWEqTHGhlG/F+PYwA68S3KKyRiwp3Z+tGK3lxmK3pcoKqFkhc86oQKnEtqgjKqayvIyGXllaBF5vb98zJ5+W5dwtTuwKnEOBsE21mRSfGF2T0JfkE7mBoR3aQy9jQsVHRrSPPQTw2EVRgF0lfYKQcc4jpKmvC+FkfnLHk/ASkx51i2qMb6try0L+ZrqTA1XMVUNdPVbBZuAnj/BgxQhX5gUvDRbSTOSQ4xkkZ868sLH5RBSf28TXktbITmdbqz0QERd0nU61dvX6tfJSF6kWBO/kyvLJBoebNw1BCw8etGBRcNJ8dhQRwsI+MqI8BgR/Mz7/6vMv2e1OYQFGxbmFWVJD+hhA7sgryC1y5rswp5AVG65QjUl45pnn7DhZSCAltBA6Uok06IgrnDlBSlwNyRY2Fm/ffe1V98SpTmQwmGFCBbDFI8Gw3T/fNIwG9Xjz1o36uirK3+aYNtHIT0YKSwrgCkMgdxpBQdtx0VkeuhQjergXJjWodzAAz/6AZ6iAZNJkqfm9731nYnKclrAUMetZZ4oigC5tYjzD0Qi+RWWhpJrivfay+cD+mvwq5Smfy1eu2FsQPq7T2fn5cPw1M7sgvzAxoSchPjk2LZzrY0JRXwYCKojVtag8GOOSA603KPKLX/xC7/xElj3lZWVgsJWDo6oqKwHsjN0TkRjp6bSfLXVEYVs43rq1HtKbWtOSXzswdEVPT5cx0ttW1HbITbsW3WA2OVZX1WSmZ8qhiZh2CZAAZfGzWn/1V39tnzklOb2sTDqQksKCotWVDXeeLi7NQDVDR/Yh0xkXj1QHau16soNwH33wIfPA3gN82lghv1GB8oCmKAhjuBiZABzVot4w4AmOMqBCRGCQL98GqySSwSTk+CkzsvqyOrUwCAXGxhVARxMfNoA6ZLIAQAgKkwJZ0s3yMoVPq4vOZ6nbdFZRm8Vl5Wtb25W1DdK2ZufmmJVmJycEx/LECSiE4aHhUWlMySb1Qu5IMWHBV1ZWxmIFBVHWEgAAJ6wCnr0CyKzcHIPyElrCUirkkgnHzzyACsPQ3h4wp3nQvgF3gJbxmzegJQXa151RYAO1AOzbr/BgddP3qNcJO+s0w+e90herna2CWzzcf9gaTqhkiT0bYCP6Nawh4+PpEywUnQcJDqRFHTSANCg1YA8JfAzBG+PSr+rRmcvoSBx4ENFPIDTlwbYG4cq3BmFJXZAbr2W/oREHjSBNFH69hBAgf/toSysq+82HDIDASwXIGAgouIgk2M4Ouk9hD5iGGoIa/emVTALRSyWBKLpkfo2+CPoRoHYAoCwKgfHTqqqgvTcQbagejhw5hPb8ebqm61Vkyuu9q6c3FEhgRrMfQ7wKc1Fu+V1x4apFPYJZ1zplLqgCElj2IdWGYBjGyEDVlHY0q3fj169xKWyM8AhIL5X0kswAErNqGak0pRft+xOchuxbSa2prpYhg8oCQBmQ+FMVZQxE42p5D1cA8F6D3rCiVYcEWlIjyKc8FEFsZH0pn4lwI3Y8AQ8EUkYX2kFXkHvwxui81KAH/fr4U5u+1QKzZ33pF+sob5iGr/1og54VA7+fLE+81KyqqnNJAo/xrxG/KmaJEV5HniPghNZEs6gIIQCIT4qjyehi64Ng8m9ENkY0xrJjzksjIoppJxwbChC6zW1tjaaEH9Fi0GJlgV488bQnHWJuFoIibb/r4MzgBfk5pSVFxYX5ifFx/X299lBmJiab6hukhZOY9Oa1S/du33jhpadTUw84XTQyNiqrj5z3hQX5WJ8/CRbzcrJkizt8YP/gyKBrCSQXdSEdpeDOYI7AMOuMSU44JnCNTEJFWkaIcoZqjCFcISs7D8yzDhYvxrW0PoQiaHQqZnW1wO6k+0oHhh5Dsi3LwZEB/3gHq2tC+PXM7DwVUBA5HwKDkuibJ0RsszZswbhDd21dMonV7NzswvxCO5sz8zPCP2obaucWZ+Q4N3OYqpv3N9Kb2AOjwR40soF6OrsGHz96+ukT3pu2JOZBSuzB3Q4SpzDshm+sb7iLtLyicnw0RHFcunhRAG5YfcyGnVxZRyVO2F1RRvGxAHj4cnIyBod4oSCAIAe7X2oMnSakBWwUFhSmJqVcunKNBHH5mHVo/8hEvmbe0h1FT8cpCZ+4EW+jLySjLzRSuL7xUvQNBgMn4CHEvEhqqB3sZIDQPjI6hLHDBbdh7kkXfG9Z7dIP2knmIqwrixEjlBxQsWRnVx2hS+To1eOZ50+vrC7dvHZVxC3+n52efvHFF630UNb0NjocPKCyP7F0RCKCWfoqtWbnVooKyw2E6e++Y5KIfKJ/zcHvvvsb2hm0pLiiQpDu2JEjTy3Mi64238R+8MF7zEea0qIXs7so1/KeqXnu3IuqyL5MHRNwVqD1G+cl37lwFwgnF1yPHR3t9hN4UiHcWCTBsnqxlyzPY1VtDePswtcXTh47zqu6uR6OMF385tKIkHTeqpx8a0tW3YULX4EkNS2hOD1tJyZWuBrgqf57D1rSMrL484gnB4oJRe7oDkcG07Oef/55lDVxRvUSCGGb0sPYLCq9eE+IUZAaRJeZ+9OJsZH4v8g2r/aVj6o1jb///vvYAJVVtIKlxqkIu/HucbW12d/XPyVbjk0uRsr2Vkp8sty7Mrq47E+QQ9isn5sPR+qLVyw1bZpzUZvSsJAWgMQ5um/ffq5T1vxbb/6YN0vWF79WV9ViUzaWTi1sbDnS/5y1JjzWqmwLqiP0tWtXJHQ/cOBgW2uX3Q9xVsATjDE9PYUEFnJcxTbuLL146/UbiabLcbp6aLDfHX/oDk7M7AQqGKzpxOXgN1rFXYEjq0NRFapNe6Vz0zM2xFLTU4REBxHYWLW+hVKOL7F8PPei0h8PPV5eWD5x6um9kaie3h7ZUYJdJfaJK4lAYUX8LwvTrds3HBxDZ2M0l5MLAj6/MEdT2aBAptjEOPixzYcQiIV5DHl5ad06sqO90+Unm09cV9LM4oEBCOEvc1XFK6+cZ+MuzM9yVaIdUnZ2tDXt3SvczrE6G0rCOfvi+i34UR+HmMRQ1uTJTJFmo6a2msZm6Dc11uEBGy/803Qh0wCrWNqwo8T/aJy7h8RpAVRW2tDFMMXkXBsisx00MtIXXzxLD9BFDq875yMLO91iNB6exIrCL6yrr7UMsASCYcofElhX/PrSrdgyko/YZh1isds4X/Hel19/Rcr9iatkfYj6LzBzZWWubYqzZ18EqkNEEiL99V/+NY2ETNpUANhufzNkIgnP3kgdi6mQHm6JgDsQYNt2NAuey1nIxsbqSq47JXNz5P8YHnjsbIYtjtmFeQzD948tKQRHTWJit3mRjAVg5oW2thY9kjijFgaJnwceDzNwLY5sBfswb2genIMbLRVg1ZpNyh/rQ4GjvIKJCQ5ZLayvBe7iF8NgGYQ/Icmyc1/T3u7OdqL90gtnK6qrDuzd19rRWl5SPDgyTAcQFIVRHMNQpPQqrWtGZm6Z4bOyHMEax40DA0OUi9XF8RNHxfTzvmM2GIhNiH88NOgiIgYo4xRmBkc6XORJqYpqexIslnB6HqV841irfHMBTOJnkkiTw6R5n6VElCQDdQaGz2lyamZhaa243DXf24yD+j17LlwYnuzoPn70aF39LvcACDdKz8xIkbhTfq5IFgfYA7mmSB/9jPTugqDTZiLXt9vxzsjOejTw2JUIqKXfqJDCLcm15rduYeZxK0CsAt7QnwZ48+Z1gzJJRfOzGSYFjkr4P0wxkY8hmFOCwBYUaIFVV1ZSzA5hDHivKb4w+wNcb7KmEg2nEVitbulCLA36IKs2AQBd2I+G0TVIUIHugj008oxG5MtyyxslYRKomAq2AaKKjtjewMC0sKGu1lQhVpBPtE0NURsb8Iw0HflVs2p5CNscqmlaUW89+1ZZ97DgPVz7eIljoIBYKuMn31pEYxX9CReMITQ2ftB4Q6Stipy0s1NpqgZ0fm62yQ82QYZaBEDSAs3CpvY1Dhgyj0KsAV2npoVDsYxh4zds+t18pOUnu4JL21aMvtzrtLi0IDJFFTY/AGJ2heUK5jAEzXIcspbVIoTeC1hUFytAPZyyOQAAj6orDxL9AjUYfJGFjfFqRHmwefAScrRGIA3T8CHRQHwUUFeGIjD7KAw8H3W9Nyh1f/dTFAaePyHmQNI1FFGRsApyABiyFrSpBZ53SAabFqAOzEFrLC15qR3eerW89KsBKgbh4EEd/c7PzINQI37Si2cdRVszEAX8pKRvFbXDBW+sYGbp4ghLpygMgPFrZIwuuY8aAYFeTHwRXKr4NVqGI9+DUfgVokCoXx/vtWpj2iouijftGCm8ggckEeA3PCsMfmihUODaBqsEkdu4SPaeqYmpseGxkWGBQnU11TIEPXPyqOmquLCwrqryzPMntp4s277CJ1MTY0JlZNy7/vjx5JgcksEvawIDm1VF5e7d0MVFxsaameZxmTMEVs3O9rpr2/sfddNsEsjMhwz6q2wOt8N2d0/U1DYguEHBDwiJMbaCUubj+OQYVwF9ShPxGxkL/cIQXuJyn5mdnLmFkcxqmK20vIJPrvdRP6N8enauuqZqYHhE2rX5pWXeOIkCTZwRntm+evWyaZtasYQGG+1ABWtElAJskwiqp7e7U19+Qj4yBdvmM5L44ksvQCkqmEhEmcL5+NiUbe6W+w8srnAXx2RGRjYpcH0sOzu/4DlLL0HJ4dzCKL/y2JMneSgX0i+ub2pQgLKuE+KDn9IxR30ZOAnCPBVVu5GX6FECdGRUD6CsUWB4IKnIbjAf82iCigagv0gQi1m2H3zC2CUo169fx3UIAbfYgLYyIdl+F3NF1qzUtKlfqwtVoh4KzNzZ3g4M8ksiaDfUoVupPDzGp8sXKyGMNZV+LZ+iKDIZkBftQK+6xN+zHRVWcnZ2IaIobO/r+rVbLBzUd3URTJqkEfell17q6+sFvB4lns9Iz+anhDpWDu3MB61uRmYq4MXDsPLnF2ZB9cKLZ9gNqhjavbsPKHzDZHoaZiSBo9jIkNSPemTnYRUosh4QEehXmxjsP4xaV82ldP3xowG0EJfME8mgt2ZgB+zdK5ElDbCenBLT3dPOmMEeGrcOzM0vxBLG6C62tvaOf/Nv/s3ktCVruKAaO0EFHkA7Rgn3J0r5yUAgViAEGfETefQnRMnIWVqYx8cPn+TIS8NR3jPGVleP5hWIYvmx8+ise129RHhr/cniquXcZEl5WW52nmSUMN/VG+M4e4zE/JkZu6iEpFSn6JqajnDwPLx/P8rV6A4wI4V/jSenBTULRTgfX8GSwy0gtL1uEwzYehfatLDQYjqE7d27w44TaPEqlkAaI2KFEyhr4KSkxIqKMssA7jonMikHqzh4M6i29hZm2eDAgBSxhs/KJGJ4xkoMA5A1vYOEGHLV+8Z7rHZHPh73P7akl5HGuHCgRbsNOpae5/z8hsKSErFBLtLmdJxLWjA0Ow8+clbyQGMzO3WSfmqfcYyFrCdBTlGbsiDfQE4df9qFd66+MVJw8gqLY8Fae5vkopk39sWFtZnx+fg4aUa3HC975zfvHTp6IHevU6fFhmZeYzEgHEm08UhYAG/rBouym8t37+7o7hEBApMaj+AqHWOrZW1GrtWFBxrbFiLEimcjv+jOstcCfRg1CSIAx2MY5DMKZIJDOueP/uiPBvsfQaPZEDxajnIXa94QyFRgzslJFgyOpTpcZ2bIGRknkPKNN75vYQ9Xh/YfUBjwUU4AFRRpLTc7HEJIShaon8Si++STT15++RWcKYjct71ETblDCuGcWbIMoJ1yc4OTA6/iDdLxrW99iwwaNeGyMYWgeBskhemuiA7R1cAWjpKSGI4MgYHaN+Tbd257gC7vgcSrbbxM/4LcPH+RYrDxEJ06dZJBD1qowM+8LTAPBrQwccTHH2EqGojlnyUHo4WKYBtQgMoz0AgyJTk5MZebU2gfwMlNIRSOmKyvzvOIRZRJ2D/UtbWu4cDhVdF0hw9ZjcwsLzG19VVeUmonkXgigX6jswnPDhoV1IRTNxYDfuInxoEsDYZTdV0IVYcWY2SP+hWZfPOJ0Of3HzygPYCtvGNISJMcH6Jr3EIDRbSlvhKSabBa6prYFhQWKg9L9G1qRphAb16fE5/GqTs0MpaWkVFUXJZfXAo2Bx5q6hqEMDkbxEeDJ4XsIUdqJvbbhSHxIQ400snIpbnGi5TeU3TsCcwGDAajQZkOjF1dAKMjnic7usZ+yBHlW+UxiZGSU1U0pQA2jvKtbz8ZpnZIOmNEI37FD2IQhO2bM40XnH51f4jRYY9rN67zVjfv2+9ZKsv9zYcYZrhLXb1oENIAoE0LBryhF29IkFkAhHD+9ddfYx4hQDiEwsQ2xotqGtECzgSSgSOfuj4RCEMUunbg0HSsNZpZa0YHWshn6amLggE/zDM/GG3049nHW01olwR6Dz7NRavpA0976SdD9ROAoiNRHmEUwNYBlkiQtEww8GsqVRhrcrn6EBUwGTmSpEfSD8sUBFzNqgsAKgArE9e09Cx/cjcbgFzboOJyUpIv0mtj0BoYtCaZPgiFHellfW3ZsKXK0hqDXLMRgz82chiBERzOBNMChuknxPaBKaxjyoEaoNIjWos+YAm9eKM8PIDZs5ZBaOwBmMgHQnwAY2NLsWgZD2DWFwhV9Kv2tQxINFOGbcyvjPkioJqcQnQQwivDPmNHhuClsOoIPngfz77V1SbO+JfewyLBMUp1AembOtAvsBXWMk71rS4wfLwHjCqhxYhr30/KqOIhLTMTGDYkDQL4WkNKjOU7Ujzg04PUELahjcjGImD0GEGDNcM2jsNq/oRPyxYVVdE4G9ESUu+o4xMpH3ZpNKIW09N3aDksLO2KBudiwJXorrDgWjWHionnsy8vLhapL3U0N//d2/fsGizNzbaMhUib8t3Fa+sSDwf3xt7GPfbKpbZoaWnFhMVFBTY+pA402cvpYeoVcSE6iK9OsCYDC7OY3lzgY9OcAx6KGATU8fT0OJVngOCXE9CWrFBaJxO8MQrSyKEp/zZoDdMiE1ZsCsgIW1BcCCQc6zYTY7Qb4tvoxDhKG0wbZmRlf+s731XEqh0PQBTnzmj/SHlpSdRPADkMyuVF2jYPN3LYQ0TYPE1Ns7DBbxT0o14p/GulZwEMdLlsYWY2RKo8lGI8srWtlIlGNEV7Z49NDzmS/vUf/aHdf0E+ZjhhKhHDt5q4gcSMbsZyFJg5xRbf2twgp05ysvt17VIennomox55XoPtGBk1awbDABL5oIz6M0zWPB3NkjAsozN2OcvoX8g0Li1gCdH8j3oGVpYX+UodFXUoB4kDomJ2aOe9Tc28lZpqa+3EUXk5IfxPAqqo0vQ+goFwCAzmNfjLX/5SdDotb67ypwlscSmVmFy+chE/UFAg4V+IaKRw7Y4/KUFgQJTVmvLlFTVm3JXlIJLoy41648ZtS76zZ/+9ABubMOwPNzpbFWAPPGNO+ubry9Q3c8olTTB56tTTJsKwc5UQt7yyJfLkwoXPSb0uLAZEWBnX3Xu3mdpmUzwAmJraKrPjzVvXyfWpZ06GLJ8picADD5eT8JjPv/iMTjBGQdIwLKkHYTP5gTwpPUUiKS5tzhG+ByuB0Y7+U88cN2oEZehfvno9cnyzfm5+QVI1gDAZbUajCyeiKcQtlZBA8AEJCfjZJAEwz1EtwctrQvInGEBYV1XGrSOEj5mVEvY6dsn1TI2rGPy1T57YGYMX2O7t69m1+US2/uz8bNdOjY1PLllalJW6u0CsTkFBIcvw7t071k5s6MY9UgZNtNxvefH8d/r6hxrqG3ELpeTh888vMNdOnKhFFEsgToR33vmV9isjxv3tOw8ocI5P6oi/jf/7+vWbVlN4g/nIbDID9vU9YNOQRFMGnseEJM6vx44dpcXJrD8N3yX0PDIopQvecaER1gK46/hTR40OMNarFj/IDW+YEDxIANUYHmYIIKIcO/KU/Y2s9Aw3MHBvoSwxEVMH4XaiZJy/4YajuRARYXOyr/8RsuJk0sFUChcPJQGjSoO6wMaaxQl4iS5KC1n29xQWFBsaU75uj/Qjy20drTSq62+53hmIqYlpzN2JYbtwlXW1NbAyOjZQU1/DOe1Q0NHiYrSmqYQUc0UbNX8/Q8fY2R96IV+seeB9/PGnEMWWEr6vOwILLbSK2ZMLwsJV7BhvAp3w1g/fhAQ3NoCTmRJgy8h2l8LVK9edYYBq3b326vcNBB4uXLggGUNbaytkOlF0/do1xgO8/ebtt2G4ob7+QYQQGhEl7CYWh6XjEuMJFBMKTqy0nQdgFf3gBz8wWQDb5jPzKOKfXeL2LnDKJDuTxEl3duBgs101ZyiZWiwn52poY/yvcQstMiSZ+8jwGMWiHSaHsWA5rAvzOF+zxMS8Q3Uw6dwpBFS/uvOBdnKbpIT+dqpXV5ZkqnBaqf9RLwyIurKZJRhLlOmjvmDcu4nFYLe3NgYeP7px/Sps6M7MaP+2tCTcSu5XOkFJ8kj5CK7ApUKj8Z7l3NLykp+gSMI36ig9LYd5RS3Ex5lJ56sqqzMzEq5fu4y9I1x9lyzUVFd/8/XX3/3ut61d6UP7bIIVtTAyPJyWnr7HzXmFBTKZ6MXxXJ77SJT/hFzbV29ctyuCIV2Th5MtpDD/mdPP2EygdfCAjQ6MRG0SARcP29dnBYHftIU9MCca7dralMAHrbElmhJALcMn5sHkYkoNXxe4TmSOKcNViUxnWzFEw2aF1cLK/KJ7Qsy8EG9/gBdYju/b9+5aPigw3tbuhDGiaNyGtu+t9Q2kgVIjAobFJH9+dBlGHWFOdXFL0LQ1NcqgONiUR02YJ78EkDjTe1w2YLMSNkZo5xY0cGATN34WL5XUIBr6VVOssbWVZcyTmZ5W2LzPvuWRo08dOXwU+Y8dO37r9m3bX0mpafDjhmDbsIw6VweoEhV5AAAGkNrHGLBqXLQKGPCSX/UFb8xFA6QxvDRAv6I1bPvGzDShYtE50a+MdwWAqgp7AHXAaRRIYICIqDVV8ANVoDubemEDxd/R4amsORWU8wEZxCkDgyQENOY2kHkPbniM9mQ8lAXdQc4xDWj0pM0nq6zVOXfylZfUU5jaMavhgOArihi1NI4Bu9xeRVkCjAqg7Am7t7awU1OErAT3uaSGLE4AsGa42GXXArOhxifGYTXwrK4ILBs2SRswnwS0GpBRBAM0PrgAfTg7nHQgimurSxYJMM5WcLjHePt6uy0AdK0pMiwylYRTOsZlINrUNTAgwUfXRq2kbz/500uYURiulF+LuN79qWVtqmjIWvMrbvOtIuyra76BSYsp62ncheOhFJ2IB9IG9o2sNRHEe/hEUXWhUcQbpyhv6fLa6tbGuhgpb5gAAmbcDOJYDIA318Ii1ZYiAHSnBdVBBS0AM3xdePDeJzIyATohJaibLFZlqMHdFgVPNm10IiZG0K92tCwoLOx0hCt44yRw0r7tAWWwO7n1MsKIkSu8dmzsaDyc34jigWGvgLUyy9+I4rNiOfidu11dXmEK0OqWPd477buNSBur7qhEi8zMMglAa6oqpT0pLcpPj7jhBQ5MT45qnmBPjA/HxuQmJyW6iteaiqhIrdPT089FGuHM3eNjk5zQ9KPlDZxTOpmZGVbki2vh2hTx7NAiIY8BMlvZa9tbIZgHo6Lso8f9LDbu+cWVzc6uobKKWvFFcIvWkmz29veigpyeZv3Kimqwryyu2HEAlYNZ3QPdEkrAvPOyUeYx15rabSULd25s5EUea6jfO54xhjcsNsz+tLs4+KlpuI0dGHj8/DPPnj17Bo1wEeH65puLr36XdzDkkwaVgxAUFtKjjqkLN0b9B4JcydTN6zeolT31DRT68vLknr0HbHGISFZXWO3lyxeZd6dPP/PVV18hmRP5uytKxZ5m52Qwf/mfBGNMjk9ZirpQmD00P7dAxIiwW3LcPEoMnXKLT4rPiE/nfMThhIieEp2Gi0JkTojUHElNTnWgGTAUJd5GfXi4c6ft1VfP+5Oxu6ep0ZAnpkKqZsodqyjPenB+S44jlyLnMbUlHMkWvps+Mjq+OB+8JiVF4SoTPSIo1Dns4wAW08QOhnkorGT6+uzd331wnwvckbhaqXKu30A1nP/tb30XcfG3ZQx+C97ori79CvtpaenKyHSbo5uW40zt6RKw0PapSbwYpiuoFtszOjrG8VBb33Drzl0O/tXVYh1BqYzyyGRO0iDOMdNGdQKqdXdf+vM///eMvf/X//aXr7/+bSY7BpCkjvpiLbnfF05oP2Siu3ALaxtxF+UHS0uUvn1mbtpP1qjKVFWX2ZDffrI2Nx+uyD2w/7A9KwxDMPWOS3GgwtrEZs3NBzD27Vt3GD35hQW2QYWl1lWHfHCP+x5ZewSeiWwlS7zokKKLWZiVLsaDDZtI/Y8eEyUTHre0jDoS2Asn/O1vf8tw0Qsq4zrp7ZSZm13kdXY7FRga6kvI0erKlktgaqtqxcmUV1XffthSVVkjkidrYz1IYlmZwHEHy0eHR+i1kaFRdEyMT3p4vyU7J0+zGBKNzNCkLKLPEwkyQuMZsPGX21vHLRxSjEJ63DzCogWS8pRebU3VxYsXe7t76NLvv/Ya5ePKOXbSP/7y13CCOjJf0X737z+kBHgK0IgFBr3ax+EMxLzc9L6eR44BdPf1sidM6qdLTjNQ2ltamVCu78Qu4o/bOrt0FxvJv3n06DE5bd3yxl43QTgUKLeYP/ltpmdnvvryoqkrMEZ+2C0XAEtYfvnzX5WW7MYYdg++//obZWW7WclGRUv4th6+eq1zftb1zLljI6s/eP21x/1DzjItTM/jsf7Hj9okCM4XaLd9eH9tQ002LW1T5dOhC+HsVkw84RK9itmo1uGh0bXlSxQgvrKmhUNLDjrKkElu0EJ19c5GlFZU2hCALhYwu5lckDW1RCHSJOZoEiQsxE4IN7nljQDyt//hH148+wI2s6NrxSs5owjeb718TkZIIiSkCkrVOvPCWRM9d7WVsAnVvoD1P3+SuHmmEo59PDBQBryGhoeuCCwq0gjtvf/gvo2tDSdaa2rrT5w8dfnSpYbGpl1Sky0udXZ2kS/qzjWx3MDC3gaHhh897oN5pOd+Fh3Huy+YjDsAfRUmEXYGGJ10qZc2LigTegk7UR0WRZSMQCOBSbhI+nZ4wIQqvvzyy1EXG9m0PMZUeF6b1BqdQPQILBuDbsH5SIwhIcRUgo6sZNt3NoKwKGxbS0N7OFwV8dkp443yBAqZ7IhzK7hqR3wZNzEgo8aDvsbHJ3L2FGoWsSzjv/rym737GuN2ttbWl6mmoZHhIHqNe5pimiwLL168fPrMGRpxSurMguKvvvma20j2ufHpWSkonEmw9mttaWdEMr6JmzTK8gf4fOuV7xiCgVilA0m0Gx6AUsCHrBV5eQTTMjsrJLd5BJ+Iqynnni3tzNTdHQOG79YmCIEo0Ebm3BCbYKQ4J7e8XISwQTHcR6TFCEnGgsHmghfpO7kV5t12NDFO0hNisu1v29ew4koUkxyzTWZt+4syZURBCMnlEJS4ArrGx8bZWrzTesQMwe7a2q6tqTYv4wRd0yR4Hll1Tfvh6uj04Sd6ADWjH24IlhjbVggAWmsNeCRIjwxPbEwzeI8l7NhsrI261011EoSylI8p7JtvvklMSZa+qLDEkapNiQIWl1aGR8aoCCFVRYXFc5H7HLUPqyKHMZhmDxw6DMOT08ENTYe79mdJrOT6qptv4ZkRz2o3KKyia3+aOLyhSAlmWE1lZxB1PgllaBXuTpk/+vrGuYRwBRHBhA5/7zzZBVQXnz6ZnNKUBVWwbsFtnLDD4sTE0WeY8uxX4mHAWEHHUOaA+8DjflV0T5V4qQBvAVGZGA/xaoRBsDfRRcKMjMqVpTlabGlhmZ3q/j8JHDsmJu7evqV9EwCdHgmD3jj59CnMJLk4xKVnZF69dp2mM818/403MI3o0j0NTcVldvmXrRjW1q1DEkWNUEAWzfGJqVPT4Rw6t6sbXksrio32+vWrdngTUqy+OFafLK2FDYekxLi1Rab3IgnEczvbq1cvf6UpA0cqc/CibOjGuL0Nv2JrSCAPt+GLX0EYqLRFFC3Pl2tpBkU+HhTToBbwqeulNtfXnBCCSXwmNHVuZhqf8dpa/OEzqMtMb8ArcKXx9bAd5KD6wvbGNtt0LWFNkIvTQXGJovrCFg0qYDIYhm0nvSCWTSJHrzgN3gDZ8R2GMDO5BjIuMVjP1jDc1/YNFGPE60J+LnXh3Mfe9HZcvK2XkFl/K+TbieG1drCXNy8+fqR/lPBbLHBiFhQWpaQli61keFmJCV/ejn8Ssx2L/3YSiUFYRFqEMH2AZ/hIAFp5ypxPsviCfcwNGjrCT8sry7u213dt7gwt9m8VhiNBDgYscjfNz4kzkE4oNdn1GRlEuL21QwimyWB9dfHZE0/F7ArrVzp0eX5yZW5qOSU+M7kkMzUZAvc2NkImCSkqCZH6LjUSVimTb3lJheV7ZpqVNKfXqvTbGPLQ/qeCzt18sra1atPJ3iqik2Lrl/TMbHgzcOEH7jWU85j9hGTXr92mLGi83p3H8oXsrq4jkHPBL5VQWlQoOio9O+vosRN4QBw/x6xd+DCTPRo48dQJvN3Z0W0plZIQvHpCySxANVVSVvH1xUvs77QMJvWKJdLI0ITQ5eX5tcS4ZCcYnevKzEpzZvTGzcvVNbuLivOEIRFPh7vybQUshFUx7WNaCVaW29H5PiO5F9vbOvBGXnbu1Pgkb7G7NhvqQkQsm5v0Fefnu3Vldn5JJhmp8cYmRiqqyl0xpMriyjwpYyLfe3CXmzPcjDw9yVoyHyzML7DbWBXQyygfmxg9fuywlV5dTU17Zyd8SnPN4JbiHbdTgosL8x3trdqMZMKIYx/EiUy1VF5bO//SS2wXHwY0hqE0MDbTlm4lnJevXuGyci7Cn4IR3WTQ2dXT0dbpQIXTmkkpSQtLIVrPEVkFKC/EGng8QRH93k9+BNV2dUJy+QIJV3Ob9zVxtmHItLTyK1d65GYxtTweGJmcDpcT2VTpedRvv557j8H04MG9lgetNMaLL7zU1dPde+9+VVLc9OTQH/7RH4yP9h87fvzsmecftrYQHFYdAa+qaaCpqyPpa8JSIS3D4Wy+T9zofAU0Hjp0uLW1hTeIZAmDUfHG9TsvvvDyndst1gb/t//1f8H5Qt5EuLFFmg8cxmYuFm1o3IuNn3/+WUPr6u0SbwDhM3MzyTvJaZlpuflZb/7of9rbtIdV5FitOdi2VWy8CACz3UB6Rf3M1ML+Zicv244cPcAB5x4oOiUnM0eSYcckyixBY5PsuYe0JMVFBw4wd5YOHdyfnZl++eIlgzp79szd+3dMtFI+paUklBTl9fYs9HZ17q6qXlxY4Zne3oopLipvbto7Nzvs3hGzuwPorsyrFiETm2hoNswcabD5f/SoDM45Pd19XC2bW9sT8wvyGl2/f/fs+ZeRiftWvlSpBKTPb2+dcuHD7vJyeHOFNgV44PCR5dUNuhSGhVoKsLWbj/ONhYlGJwut7unrfe7MaVaFrTD7VD9443sU2uVLX5kFLdtqqs04dpKWnjp8hIqzGjQZDQ8NcDfU15R3tD9886037txrSY1PPXL0OD1WVFIuRmJsjOs9o7Zmz9T4LPyzGCx4khLS3HpsV8F+C5PCno47KGxAu+hjfnmlrmHP9Zs35CKyAWjadurx1MmnLa6u3rh6VMz0+pOqGiHFU50dPfgcHQ8dPM4y2FMfom4oC65rLo+ykvJnnjmdlRlSfd+/L6DLsdHxteX1ovxCevXC558ySXdXlGysLgh+jsnE8N1d3f0ra447j1GJArWrK2slOHrlW9/a9SRMxJtrT4YGRzjdGKbbu56krKWIzk9OKeNOfurYTnpqSmvbQ8jc2Uk3oqLCfG44+npvYxO/jAhycZJtD1uYSn6anBhz+IriYsKSJmJF9FZXQowEouzbu9esh5MlN5NHhl8zXOW6soR/trfWaOwUh+bys9kwdhT53UOE98qqvP6ywrs012pnfGry//Q//fnd69fWeXAzs7irBHnLagW99kgtq54/ffahVD9DowTkwKFjDrH39A1KfJKWnv3V15dNak7iIpaoK3yVkZl9994DKQQPHT4Y/I8JSZE0bvEHDh2U7Im2YSop9sILLzzq6U5NTtxwmKGzPSMtZehxr4RjdbXVuTlZF7/5SgHa8g//4KfkNykxngMb15nFOPgtC2mJhYV5+/Zi/7AfqTebO8+DfHI100iMBFlMKRm/3r/fgbF5MYDK9uLUgCVlklKYLlvlFWUEvKvHnmrhmRdOm/cF+lu9CBOXQ8cNm5xxK0vr/X1DmsIzEsHQHi4eMXGkpGUcOXbw6IkjXGAmsrt3b4s2WXNFY0nJ5xe+CmcT0lOsl7Cr4yiN+/Z++tuPU9Kk/djct/9IV3f3/XutUCpqzjrFaUQ73qD/u7/7e+siq8R79+4bL7vF2sMxPs674sIiATlin0Tq2wErKRVJsuCwhCUobbtXPgDm1+TEkf3NJnoYMCNbV4iUswkJ8xbM5hTRRzDpG/NYNq+vrRky7+PxoyfocyUJe9z21tTIcMKunazUxAe3r2qkIDu1vqoEGv/6//jfU1PjJyfs8yfubG5IHsqesXsJe+48eZKaYdOPgeRAtqQLtmuYpgwil4g17dtrlkHTN3/wxttvv22kshHo0VRy8dJlWoVBjLJWtk6nSJPK9Lf9RT9bHlOzBO1hx0ZpPhu6gMbTLM3DVDAzFjq8FBLerKCvneqZuXlM2Pvo8cjoGEtV7m/7BNhYF82Hiv/hH/5heHLy1NMnHgyPienV8tS0lB9rWXks9VRRnDl52VZ1EqFSF72DAw/bWs6fe3l6cqK4tFwePBrm3oOHkIk0VRW7UccGpl3KmqqKlKQEJkp5aSEXD7E1/w4PeShx6oB+I0p8eRe++hKzieY2FVp1D40ETj5y8lSIiLNco23NynjCwKgV3+ZvOhRCg0Ub2R+IzH94LBjBVoHwaNjQ6k8lsQKp0wfyK0/SrEJUUR73mAi4/5EB0hmIahk/PEYXHr51zXQgG5aDIozBAHTWf3Zunj13bWJ985Zms3NyQQULChg2RrRctlRubmq2KyADemxCPW9NZ09XYX6OG6vcYbSxsWKbWqiDdR1LuLy+2gxhJcDuBIzdgPTUAubz5vqciHdaTBA2bFhK+ucQc1h5RrZoDceH9gSnUXsZqgc7O6xuvQGY4//TM8H9CYe+wUl0/WTIPtjOeyjFVbqAQE350woGZkTlwCQc+laXwoUHxRTwMkoFfVHA9GRYJ0QOEyusTCi5kUQ168XMwVPoP+1rxykuMHsfLYl2XgIVYFr2HCUKUL1kMRUVl7uZzUgj4CXp0Rb56vJGYrJnCAmWPTQ6SMxgZgguLnCQSO4pZD9LLZC4aMnqVms4z5wAcqixgkoJqRsk3LS5sDY8+Fi6Hpa3vQPLQmeYYsU07jxxt1debs65s6ddFw82Owe5WUk7TzY7OkY3VlO2N7jcUlmW9l4Z6MYreF0qD44ugbxmI05EEdtc1xiDLR5iZBxkDJmZYomuMBUk8xO7wbgNGcwCEjzA9s7yElPJzGG9znV04vgpZDp9+gwfIQoqAIdtnb1PPX0KtcBm1YYHWCQQhRyQiRBAClNpSkZF2W7LG15we1lWw06wmS1WI1FkpkkRNEQMCYgehbg8v5wQLgcNcVCOiO2KsdiTq3gckEhpceFfaWk4TMwj/t3vfUe/LEvzNN8MpuLuwkimamMkZcxxtPYrqWFmtT5s4eQGMPN6dX1lplfcwgbx7Ozs4Ni2O+cGX1UEtNy5c8uOuWdbBKUlZWur66MjY+DnC9cLcWPQ7N5dQXijnO8cBUOwtrr69t37LPsXzr5EyljVczNTHDPBBNneVstigj/SbSmwbfmE3zLN95HMsxBbWlriBlxMAo3h3hbJzubCZiBh110krVQCNwnBMbSWtpbx4TELG8wPJIrbS3nV3SLGzmhsbDBqNrQNDRRxJpsXs7CohGdL5ketPfv8afduAkyKQDc1giErK1yKaYkLgQrAUmFebl9vJ3Jfv3bl4MF9+XlZ3HI8ph0dXbyte/bugzqHbgHQ0dVH4aSlhuQYypv8+CMoVmgHm7gFEQXlfFalpbaX5VyiaTk1XqhnOakdPNw861Yggn1RM+KKq4Q9MHDBQtvVq1dy83MOlB0aHh1ZWF7kXB/9clAuLPbuaM/gzOSMQS1MLRlmT+cjeUszQ3hAzIN795dWQxQv5LS2tum0f9cQDWDC1qNtNGfjTMm6W99YlVhLa5JvEhlTsnvruAxFJwshrqgst0OFvqefP+N0wbe//W1SPzs7RcVdvnxZtLRDus8886zUHHI0y0ZCCSyvrBH0muqG7Oyc/sejh46cYNN397Vm5ubdefBwo62F1cvnRHWbthkuiNXy8CH+R2uWHIWPP1bXp8ijT1R9YSG8gTpY3YhME3jbhUQAsxHhSjWYXFyYa2pqdFCZtkGLq1eugJa3xHizQr7jGOuciBIKlxLoHUXOnDlDqVtFa/zKpSuHDh2hY9V1pLuosEwOKLl0zp52vfSwSxhyc3N0hz2QWHUuKosNjCeQBjML5HOwuTSn9GFrW3tnx/mXz42MDtOeGQmZqrAk+h655a3A9khVZW1RYakUAu+//+4f/MFPvWR7CLfIzs7raA/nbg2TZGEAkg5FckGySpPCWcP8XTHyFOc9bHkgNkF2UZAw9/kvbC+UlpQ7l0fR2cFw2ieqBEgiRJG93LzCsEERu0v+/rq6ek4EBhCbUtQK/kcRnNb6oFWnDyYf/ODNH3596SIDjrIyF3tJ7kwZjCTaT3kaHkXYoBHZyaIJE5NDlBRt7+BFvltgd9zH3Dk48Pjs2bNff/PN4PDwvv0HzRS5eQVSvHd373JNpHUFBwqE/1/+5/8zc0RfDqeKGOQQ5Egba5/ADwXxRTBslqV/nn7mWbjy0v1rQinAk5oxa6HCD7L9ZJfLO9x+BW/WIeMcEhOTMxF3W1CtEWQSRoLJq+oN1g3+6bw8vGQTA1oMFhfB/CuvnP/FLwT3ioBYtxRXQDH7Y7gIbpll1LUZwd60wlHMUFYkzq+MH+YyTLKLgMopa1CYRPXsSJ5HSsPsgKuxMRbyE8aD0u+9+h19OdiIM+0JYDP7bKISzMpsqpKyMp1K/JWXm4hXLUr9icl5te/dv2OuIeaDff00ttFFe0cpjGH9B3uCYYTR81u7wAyBZtZmWh621dbX8UhSiQZ+4vjTUBS1SUx5RuHUH0KYSbGfP8mgkGUH5GdmvjJ3Su4AABv/9oKAYQpjJXMwcSXQJw/v37MMFnFkreVP2t4AIQcC8TPOQQgY0EJmbq66of3YuJGhIcacaeOrC5+//+5vvBeVh1KO40NyFm9EXCyFPz4yPDU+ZnmpFpxDMnzyJjs/KHlDd2enW+0BYy43LpgxrrB22dqCcLsrBgIGSDCzgArOdWFZYpoAIfZAWQi08uclef31H+gCnzts41esjvfoE63x3yGcpvbu3UcGLVm5VCgBOx7+nJ1fcEy5NjWN+aXf4ydPiJO4dfdOnb1T1/YtLjBFrN7HR7pwC88jMsU8bDN10kjdPX0Dg8PHTjyNhXgQjx0/0d3bU1dTK1GY6R8q4BzMhgaeyPRhuVfCRkU+h8sBzPeBIXmfM9JS9zQ10fnZOYcss6kySRA7unoxvIp//Td/W1FVQxhtA5kcQyi8IamJoqF+JL0P9FEfBgZZEIFsBo+lGPSiOwHhJ9ik4NQyoarloykyE1UNKAStIRZzYZ5Q6RgHgNI3DRX1SiqvKWpUXTynFx3QCxiawCBkQlIyeoNBF1Q2qPiUorUwqPfsA7am5aPLSiaHJgbdwFJTKXwwGF6paaKHNkVRCAES/7PpwEzYABLJwFkSKq4sAFUgEtJS0yYwh3VRSFM6iqS4cdZ5A2xGGhV1iMJJPv5UxkcDfoUiCDE6wHOvehPpKFQ0It9+Qg/fSmIpFYHuG/aUhFsvFdOs52hfHvyqlo9niIrKz8rSirpqwQl4YINd7dtHSdDqBZICcJFju/hDdZ8oGB68UVLjgPHRnVF40D4m29naoaKjUNlk14tBGTJjERHZ/8rHJSQ5ArC+9s8HBClE4IURbW0y9jnbLKOJDjGQEkkcuWWif1ZoUojEiu9PSrfK0gVD3PTvmCbvCevchVxucpXlU4O2/JYWZnKyM9i1Vy5/g9PABhjMo6LJickFt3wtxmvUhIFYMlxwkcj4+YUV2cTEl41NTGZmhIi1uITYsJGXk2ONJb8no1YwdXFJCa+8iZ+SorMW40KcojOwUGGPFVfcu/fATiuz2BzTTpvni9SKExTidiNRnmBISwmCwJkkH45GmJXiPZOSJcOd4+fjYCstKxwZG75x+/L0zKid4H37D3DJ5eSmt3c8IM+8DpUVFTl5Oc6hCM+QFQCBOrtanUyAc7qApMiA0d7RJqQHSFjXDGGRwNMkBhfVFhZnKXqFRYP83k9/Qu+Y/0w8BvWjH/2IBiFBXvLIbqyFSBJu8d7ePsM0EHODA2d+DYQNiXpKVWSW2Q6Gxr/7u79TprjYsmrbPE/Qtta3OVbUxa6pKZlUBOoAcnl1/ZtLF1EhK7vQippa99Gyil5CY0g/kiIjxNh8RMbFDvlwVVp+OFmBrIgLTpOuBwQFj6k6qmQwNpBQHOnVcuotJ1eoQzgALQ020sCYxJfW6d47UX3p8kWxTOJY4O3mzev4nF9QUpff/ObXpsnGxjpXMlH3cnTQTnJxYAbHB5ng7BjJLoLyKS0xSbM1dWGP5co1OUZuIFbz/v3eeBAuCoDmvY3t7a1sqVMnj9NXRMCvQAU2ZHKV0YGsDZgUZxUVbUMIpwhmF46fOOqNpYLy1L1Fc0QqU8y+hu9W1IiNMoJpTUsUWnxclQKjk+MAo9lMrkX5RbExTvZvpKVmdnd0OsHrtrkBpzcG+wtL8jCGTuVw1rsbEiGWyLOwcSjaRca17LZROpYfRWtRNYUQhJ18RdR40FSPBgbd/Nrd/cgV9642AhvPluDgnLz8za2d6zduMS5FVx8/edKV3Ow8+yEuaeEH4uOUvyg5LXdmLleiLXOSXVDxwZnpqZcu3Q3afj7YKPYY3fboUjlyYe53ur28sipjdQVPQiN6MSYM+U//9E+50GDMM9/bf/kv/wWHEFL4LCkt/P/+v/8/Tz2VYJJzzPDUM8+98OI5G9aDQ0PissycUkRItxn20CisjXDCqn7PPsM06qjWRQVtUiCY2VkUy2laBUH/63/9r3/8x3+0ub0uykteWvumeAPPq8Xpq3phYQGRF7nCFYaIrAQFZOZRpriksK21ww5PWIT/S/pwFGSc3bl7G5asJ0UV815ROyYjFMf/nJf4irOM+Uirp4r+Wl8eGx9mErm9vbqygoIfn5gVVO08APOFQiN9EMVZQOLMzpbB6A6x/EDww6NhK0nOH9HzFy9+LccMN7ONYiJMx1Kq/K/ippyaYHwzSj799FNYEhce1a6KYSTfBgs8hpRn8R6Cf3RKiC5dvtzQ2KxHHhyL/DD92VV32rKq6sHD4LCEEOyECbEN5lGFp7+vdx60VgjQjv+BYRTkhahSFxqHyahT4Dvf+Q6bXkC/5bQyiAIz4GQwvfH69xk0YorYD14SXsrBwW66f2Rk2Ni17OMlNACATxRucTjI4UcBFIcx8eJmG8JLRsLm59QUNvDsg0t9Uy8ISgxJEGxUVlYYF2B8a8RAfjfV6ovVDjYqiyJVUbMGRROGaMmdHeUt80wlHFIWflrgrrL2Q2q2JkPt8OFw0JwhSzAhQRAuKw8t4JDNyqTVIPTWNtTTLZDpgzRK6oWG1DUEAsModEdGmEnARiBqyij0CFHK2+2RPZmZhGQKaMQ60yatZgnI4QMH83NyMYa5u7ggywUTUGFNaydQ/h+uHFpaj7qTigNWO1tbNI5DRMCnp2WLj8UnwDAWeNA7LCEBxAIezPBDcIg2hICTR8wYMTmryjdLGrlJEIWgkSgrSsijLh88GXb5U3ZGiCa6NzSkHfgHA06z+lNGm6YV/3D4+kam+w08ANVPLNLPP/+cTsaKXkJm1PSPzmJGBD/0M60CCRrkZPSSMkR3EwHAGhubDMQQlIE6LYhvnJ0LZ4GgMT4x2X0F8nExuwWtAez8+ZeUlwPQHAQbznfBEh+uLYKJlof8I9ZjjpsT2+xcd6dUyXFiOcoZB0UyipprFmdn83JyLXKAYbC+hbDr1xDsVrU+eMhbZAvIn5oNC5vJCWWwK9YtLVvPLyp0nRK2J1Zgbm3rEHGxurEp6Zks5uI+4lFOZbrJt3GSDXD7xj3Q6mOcjAmIIDkYBT3M2d6Dxksg6o8Qwi9589IIcSG6erCY5gtkaPho36i07MGf8GK1Spgxk7qevfETdjH1KuCl4y6QAnoV9R6ZeufxFuIpqffQ4NqmS4Vhn83EpzU26v6gKVtX6xtS9wQzPS5Y41IGCZA3I8QDkhVqFGKHHBtmo2iHcYPVxNzsCkFf0BDS/uBaizMHZeK3Q5YkTf0OPwqBxxvvgeoZQjzAVX5hvvcYAoTUhAKGDE5VdBEdu8Yh3E+QrBcAoIJffaKgKuxNVIDpArWg1EPocXsnKk7RulghuNWDRz9s3QBDC6YroPqoFZsaj3waRCaF9QUeQuIb2CDxUQxKFfDetVmIqLyxYFlgaBDdHSTSoK71BQwHLfifHFApKykyTPi35N7gAYysdkII2IaI3tgUMViRT4qc+LF4bBcPuVnNGfRdO9uCVaTGY/QX5ueKiJDEl0JxmEHGAgC4tIRxRptjXLoAkLAaVW10N9GlryEWMFHuxUi8kuLo1GWLsG6N14dOsUNHHiIsLag7E59EKgYvNa7T8toaB6gVVEjA5k/RNZp1Bksj3I0qmnuoAKFWbS2thDwhPmlyetxe0+oGtCePj1qQ2E8XQ75jYRCJ55kr5NJLSYyJ3aqrr1xckmynp+9x7xNr0qTE/MLipr110xNZ8i2hAuU7OzdOvzNbJ6YGvhEq0NBw+vRzXV0dURIY0dDwoAylLg9iavCKRZhtEfdbfnZ2ttKzxsW/SxeEePfaetyilt0szUMg1rIkQ0piRXWSAsYwgfLAdyIwwzYrVIQ8jGUlIhnoOO6lyJsa7JefnQ8JE6PhCO9sUItrR586rk3bm7iL48TJVAr9+dPPAqOUk2l13U4L/wc1qrrIGiwUmIOncG4RGBHVH2P+a+9opZFByxowqBdffFF4HshNXXpHJrRGC5ZTYM4nO7jUhy2isDbxpJ+QTEl9RU1qRlVUVy7MLw4MjlokmMB++MMfmPwuXvr6zq27lKwQIKEc0gQ5mF1RXlHteNn4+Ox82FZaX5hnNmkfe4ix8uZR5FaBoKk6uyBzdW2NvAgvGRMVkJtHUsBjimW2GqAtaX5NQEIvcYMWKPIhB8ZeWVMbPVBI49nhwZUWJ4Y2ODTg5LegDsIUUJQgv0L+0MjQTkJcZk5wU02NT7lFmxkrDShxW5hdcnG199tbwYuJ7VeWVg8ePnD3wXXGBlcfX1dDQ5Ne4B9UBBkwrECC4LZgWCX4jAZ1TWy7FoIuQlzOJMs/6tG2pIXKnj32KDKdS7FnQvrcNjgyOnDm9Nnbt+5BNTFh6jFDeTjgn+kvU6fArT0F+Q176jn1uSDNfNLX2CxOT02FQJAoycRp2tMI+DfffPPGTfHfgxaxLW3tRufOb3kGVQOVLXtyB9X/6T/9J2BYDEO1A6DGgih+6u7u/PLLL5wQ6+7to8kF9+MczjZnH90ebtZPz8wyTLqFqYOaYsfr6+qpC2MhWVqgBkUfwYwG9QhXuAUqwMYm5lOora+mhaDLS0tHW46qjI7xbc2//Mo504P1NjcSgE2LtoFledeRcDWJA48dO/rd737vn371tokZB8Kq3J3CcI8cfiqI89jEt7/1nSuXydqEtZlh4ueyslKRlAoLVIuJ3Wx52NvR2ZGZeVSn/Fz4Mzzce4CXiKrUIhax8PngfrhAgOxogXITRVle4g7BKpkcOQvCsmF8uL6hjmf60OFDXe0uF5sRGcWRzxY02wo7Ye2ZrwmmNE2wQbvCHmJBi4GblP/xH/8RPwMMIYgbCmJCYR7Yiq0m0ytyDz92F1IZPWYshBdrlZaXy4POg0n9kS+whQCvyIE0LTM3YRhadK2KoXmwagI5m54EiVcREcSriuJByctFGVmTQJd9DGsG972A2a+qg821j6BCGhQgU1qgOqIOjprqOj8po8dwumBrCwML+Kb3yQeDiYQSFkoPnCAxEWgWh2gKcTVCpQBM/g4lIcEnOlGam3xQB8MoTKYoNHqJAnHShPHH3MdvOAo+A4EiacqM2sdqin4GiZW/906A0HvcJcpTrTo1irlIAgDEMhY5nqzeQWiMyCF6bd+pZ9DLG8KrR2PUrNFBFKh8axYeqGgdqeIYgPLegBPqtKkvwOME+txHIzIpZedk+VXURVpy/OT4WH6h/GbjVJxIY2FdsBRVIG4Kgzp6lSFnnR9tDXNCIHg8aBZNNasXyPGtfdCq7hlI9lfJHV0KKigFGAzo2tYpEmgH/Gwxl89YXN29e89+j9aKIgkY0UWPqIAhUVZrj3qdlBiPyLIo/zDZaRZn/s40QnpVois9/WpfASLP4tcIKcD/eoe3KMDRnUmjCDvhIdw8Xhl0DAvpYPW5pihdWghAomxKWgLmX90SWZopYwRKxeTsRBCbRJogf2pysqwweNlu3r5FxFjZUGT6J7y6U/7osSOT4+NaBre+rK1bHz6EE55dHA5yIyKPhMtqB+ZPHjtOnxsIieju6jIDMqHgtq9fDgOZlEaDD6X3EY7lPWzcu09IGyXg6iF6QYEwInCrD0F4Hd8AC+8C2iDBAdcKUYu+lYFZELA4lfSTJhCJnHuOWhWI98/wTU3pw6lqZ/Vg2fCC3yhy+tiYZbD2Zm5hcdPNUHHxviUso50Lioplg0YMfKyALVvD1rV0yOQWA9l+Vd0bZDN+iGCVT08yjDjD1pzCtCCbm51zJIKTkG3kpZwVVtKs0132C+NkrZGNJz59i8/f/+N8WzeIOjAQ2YmEgYuKd8AurFdYZ25t+hcr3wu8CznGjt7w4yc4iZAwnIL3Hs1sbQNJSe+F1YdwItsW0ly5zlbi1dS0hScyDM4JAIU9TmKB+Kqgt+MX7JtQkeJ3x15SnGAS3j7f3ourWU5wq1NIcKRlugnAwIColcihcu99kAzGeKDBBoHo5Tuya2LnLscCaGvboWoLnE0uIlk2dRetpU2QDo8M8kzIVA2xutiJ3UkUsOiI8+rSTARFVihQGgkEsqWwS3BnJBwo1RQLPwYVCajhWliOfbJps9QBYvE/+MiJAoC55hghUjJSC/LQJ922bl6200Q8VZlYTTY7qkd0VuTO3R15fkiIW04lSKEi8ZjRGS9GJcaeAWwuwZCGCPPapxY5jfC9OVXvDHqrFGOZnn5Ad9M1eIawJSUXUBMIMzgYUjdSlLzpEIlNWK5IyQKjHznqmNB8nFDB7Suy2YJv0OQ/OEgflYe8sfHdPR32qxsb6i1FxYo5xmzL0lko2EfeooLc2enxtExuzZL17iUZkePiJaqLWZibYLaiUVWFa6qGrP+EsMtpjRbzSzOsKPHTvNqCMaha46JQQJ5fkFdZsVs8ib0IXqv8ghzTv3gqLCPBCA3okIb53he00AitrQ9dOYRPHGXxr6erJ9yGnJVuDwHqGhrCcTS6e//+A9rnpiL1kYzUj5zUdJMGpQFpNsTwBhI1Ne1NS0buxB3nI/Py2Oto0d7ZSa/19Q88f+b0Bx98IFrMQW3zfSTVtDtNN1xgGeFJvpbgFnK2j9TZDbLhZlz4x2SZGsLJEpkvDESQ8P0buz+jk6jqNCaaQpeEs88/95xLNDvb2n0LSUf3vu4e1rzQgru3bjvGSsnw7utL/Ks1vhslBZ2bYJxQZO4TSt5QE399rb2RsOdr1eRmOTEwQnFkk83JyQ2O4p0nTn4LXGaYWgs9/fQzZPbnv/wnCDG/4nY67YP332WSVpSXekk7wYbCDCNd4y5craTZwgJAL/QVLpKqoKa+QUQWUwPfAsbsyEtCFQyPsCzXuHM46SlA8JhB9XKyuXlqxm2yC6tuwZyctMdFDRly8979X3/1TdyuhOKishDKlZbm4PSDBw8s5ExIGJhtIQpPp60tnfY3wAakqDeONAGSwGpQYCXYHKwSAMsgY+tLlcI/HVyS3ATbT9AC51tScq86XoQ52bgcurQpX2BLe8er33vNVqGNr5m52Z6+7g8//ogGRdvRCSuNw+src7bvKRRyx2Iy3SAQNhWijWEoXoe0BBV4YFgI2HXpAeQAD6hBHCKhnvgZYwCYCQJX1Jpx4QezmkBaphJnsLQEaZkZWJE2GB8dRWVEdKaTxcMuN78IY6buCHtPXz/P3bHTp/vb2oiYJQoVMTDQj8+lphFMyJ8FpZYW3/72KzduXkMXACgDcoCJ1qC7GM23b9+8dOnKn/3Zn2kWSCzXl156QRguzEvFyCNggeSQA3cM88hRS+0TjRdeeMl6Wy4dCo30kWvZrvRu6rQn8Itf/MOP33rrYctdWpre3rdvb1m5S5cm0ejxoz7XkszNc9jtAICwYx7LiaeeOkaxA9iNAVSzQDgsDTb+RQYlIRJVawp8/fXXTO5AJVAMBQaWKczBG8wg+2dGZqZjo6Y82k/gAzLhPSWBB+0I4RSsZQwbhcJEFD/5zsnN1aDh4E9vGGS2le7fvffJJ58qhsOnZ+ZLSkvOnHmBi8KGsALZ6WlGDZn0FTWCiOx4ZKVvgUqcEcg3OQr2gyNPqxIqjPLoSXcGEjq8uyOcsGezKlZf52q5QtoMUdZWlkYGB8g4eTRSHEKCVNEdAWSx6e773//+0+fO3bt05eLFi5FpYkTOHIteeDMQqoxEqEJnUoZEHh5QnC7FAEgAY3gAzLrGh/CvF7MwyP3KiPegCg40QBLnJWZwZDbYcGlpTj4YHSmrqKhCfZMLlQD/dCNONvuAwZ6GNokA/FjK2lwSK6vNttkQoCgVBvpqgRm3srjg7rwvvvgCnOxLZeCQ5vErCM+cORN2SAYGEI4gIxYssUrvP2wBFQ2PIb0xOqD6lUpEHXhw7IRGoq54j/zKrpOVjg5kybCb5ex3sTTVDT8Km6dU94z/0QgAIuhwqZmFvQ5g8xeU0pNoEaWv8YJKyxBCqkwZuBGNLLOtD69cvRSdxzGeNpWBTAQtLeHhDReScK7l5+bzP3LPGzVcPe4fRAINGqasMP45X2FN7rQG3nAJvKkZP2iQDoElxcCpKVgiknCOq5nI7GYcq80oDyiPzXC+KujOAmdM8xUrpgVjV9eHUYrVSY26bEuEk3a2rqHBCVVOHNuGONauoL42N9aaGhsW5xZFqRAuLWvER9AOQrDHxDZbPzhYFYKJImk6wf/yufOQIJQRnvGeb/ypNare0t28owX4t2fizKSJUq5z+hFg5BFOQAUCA2fAcNe6Y86NeJhEHDn02nAwGYdLrDA0mKJgqYw7/exPIoFdlEEV39AtPQsLnPCgqD7Q2EhMcnoCWbQ1FZX0E9wxxSyolPQTuD1oXwH4NWzt6CJqyKoOMjYu7gES6IUAaVxTJg+nK7TglLABR0cV4OSniosvL3dNo53ESYF6QlfhiO2FoSMe/5BEKLoSgFPGR0nJbkmUNzd2bAjrwlxvJ50lh0uSEs1bhp4AZT66UyA2Piz7NOFPP3k2CqAq4NsbEILEs4egPSPJlYzdm+i0YZhqoYFGvDFYP4WxkPjIkk5h6NWVAppiN3ivfQ0qBv/Q5cGoFdCUMtCoGAXkeWZmWmHbRhohLcpgO42r6L2KUeT704O+vIxSR91oAR15rwDUWQOYzT0oTJWAivCgEfPbYLUNfmsi41bFCjg7U46g4GbgUuJNsQvg4uCkEOuTkJGSxOBkzSe7If2JE67Bu1BYWpyXnxU1R2zOAyAjHb/uWpyfXlmez80pTU6JXwqbk6u52ZZpIeME1BkarqBGCSfYjN0bcksaoTSKJSZppFi/CTsMNjsYClBumQZpBuJXaPGShwyGMSdCMHMZ+uD3p5cCLsmz6tKuCXnEnw6gHzhwiLwxC6QxzpqalBzGrmhWdjqDRrIRG7i2NdwCWFiQl5YUghYl/1nZWhcAJai653GXzEWW7SnJCRW7eQFzxJohnJOj9ODDlvs9nV3WeKgqEzmEf/Db9/nV7t+9+/U3X6alpfI3oz4fHncPa8ZFJ6hw6PD+kyeP26zsCAnaNo8fPwonbW2tKys3LQBN/wAWAWUUqclplIKjJUhssDU1td9c/FJyQNaSNY+DHnACwzTa8PAIKnMb4w35Q+gaOfIi0oEWaxQ0VNPmgOFpxjkZ6VukFVE8IxYAgE0nwLAlCn2KPUxoYLAnBOcC2bVmIay8DQT7AxBu22pre82RWRX5/Gg6QJr4PfB+0cU61Q6uDuYjNgh3/M1HZwVtWgdGjRKKkuGLWCAEFYVognzhhRdYkzZk7eN1dLaJldcILQE/+5r3yoEDqwGlU1ODAwN4hrkmTZ5zR6era9zbBR7ksFQRFySfA99B/ly4E94ODIMAlp577jlNCS9ETWMxEwAJk4gXglUDMYSgwV9+ma7DseqKKrFRBn5zs1UEULG069sUdrWTaZLeYwyxsGGpta11YGigrqn+9Onnvvrqgsjyc+deXl5c+PTjj3GFnOgmzqL8kvY2551K4EGcFCqfffE54m8BACrCBV2AIcv2FmhpCXMYFnSjDxMQzJSOKZl2254IIS500jdfXyJTKG7vC/ItO9fXNozUTGYP+MGDh7RXYWHJxPRkYXHJjVs3337nN9yTYy7Z3bOHlFntM5LlW6MUv7jwmcP6DmdzDDc2Ndy5fY+RIds3xAbzrqBQXv99NfUsp/utHXDFHGBqUOMyipqkTcDWhOxL34iLlyzvIQ1sQVQzMhQWUCHxjtU+biktC6cv3CgIfqug6YlJQ0apuvqakuIyOJmcnrp6/TrfOV1BzFmZdMjTx08wVjSrAS3rXb+2cWAPGG5ds9jWEfJplpfXN3p54ygt25HtrlOJ8WhghLt29RJ1ZGuO7DvggZp0pr7wBnmnZ+hgeyb4nzlljHrp6u6QCUr8j4SMbCAbQSww1j+P4XPPnmrYc/ztt38VnWiMmgea4wbJdGqCEsyNLi4p57lwVIB5YNmvsB0YuVntBzbvP2bZZro3IptLVN/B5n10Ap40BCMlXIDEOXhYVqX+wQGzGAlSBtPSCWxWJiaFAD/sGwJO3i0psffj/v7ikjLk21pfO37sWKzI/qVVzIaRNBJW0X2PCc5HH33E4QFasSXMIEigxnWtUy1fuXKF2HoQpYAcTs4AySyvhT/61/+6aLFoYjpYGqrAIRgGHvWDHCEoHzwDMFXY2bVV1XacRFlYEMIAholOc9qhRuwAqBVdW1IOuiZ6yvNPMbINyhtLEU3RgUgG1aisEcBgD11TcSCfmBgnv9qnCcHsGbnRkfCCAWNHhGiLUkVZu8q0hIHDJJKJsMI8CAfVWmC9YSrFdIqZdQGxPN6ECMC6s67GloABwHde/Z6OFPaGaOvdHArssZFxUgwtSAZpeMxP2se6gCH7kK9xWsh4YQDGgK0LVazAo8O02I7mrdK+EZku9WI1ZK/eEsvGtk1pNw1z/DmkcfjIUT2iPlkm2lqI2vS2wd1BV1VZ56wz+KEagWgbqsaoUZAhgYjeAA+QKirQ0nofihQ2upycsJ5EUGrHHAQS8MADsDkUZEq02Y5DhKrCAAVi+JCmMPSilAHqhW5saKg3X7OLoqjmzAIw7QEPmEGDMKAuEiAx9tZ+FIF4AM+gsqbMCxo3NCoU5DyNdLtZEq70CH4SZKZDkpzc4E9R0eltVBBjw9IdGhzielBS1MDE6AQpUEDXll6mD2366MgsIMWFQVkA6I53gbfXTtcr51/+/NNPuU0RApwaxGOgMgqphDzw4SoPSIOCRv3SZhpEF9Mc4cIz0qmpFfTq4qKBbG9uXr967aXz57CZaAsnKMAWbzcQxjkVxBFCt+YMRhii1k2KuN+HhOAJtIE1KIYmTegMNKioJBp79hJVorIRxSOuYnmpjpaAwJ3aic6O/lRXecTwErNqEFqLCgo9+OB7CwCd0kEk1uVfBpmRGS48ApL34PTc39vL8JpzzXAcy2qXzV+x1AthCTULEhEzetEUePgj8asJY8k8E1Jkhh0oxrIwDxEdythEZhJbVojn1wXDxUspKqMd6cuf0X5Nz1jHx0/eEDzfxhh0KNsqknofMvG9nxQ2QN9g8Kfho5+Knn08QCAgtQCx8G+28F5hVeABTqLdadADGECCj/GWWpCjljYh0J969M0hBH4VVbEWYv1a63J48wmZWrTgPR9Y2JuI+M7B+C/PsdOzUxJduTk5LiGFpejSSsD7QKbeRXBa1WZkhF1gL1mojvDOL8yA1nEcQ3CTlqtAUsT0b22z4B1ck0femk+fjoPHJ+xq3NtokstIT3myvSZ3JxLkZadaNlgzAHNyfMTopO8I96uZuCL7mGZx8wq8WrmxtpeXlh8+aCXnxFugLXRRFnfv3Id/WkDkFj7hnhS8sTEWlpdCXPwkpTT+9OB4MDVEI2xs5ugEGKMj43gA5r1nm/JzQRGXp9QHYoeoj+6untaWtprqkEtOoqHsmMyRicnlpTmTn2OabCa6z6rAsmtiZlbuCGFU9gEk3kmyOJI+OS/XhhJZxcapUqrl57FlERaVedMZHMQeeomxuVDqAPqIltnX7FzXlOncQYLz518SFCubChc4ShHmyUlhXZvyTj7Z2eDUZ+6wLBED/GiEwaAIUZwGtyTgcKKRHcY1arhiiIcYhfl57VCsEQW9yiq6detGf39IQ8mSojXcQE0vc3twJMsOoWJedlCLMnrhH07NKB/ClSmTCjt//jxmpllseVtDQjuXlgMAQKI9xeBaa9mQyctzKto1z0nh2NncdG5OmoMK+/c1U+Ji8ZmL1N/B/QcgRO9SHjnHbNRoipQsFadH7P7riAUAABqGpcVAVB5vU2JsMirFagq3Uziw2tjUdOrUyZGRwXv37jKemvY2CnO6c/OGQHzMg7ugLuKRTRKMLlcTp3JT4z4x5e5OFkPxtHsh5mYZl6++9hpRvXzlIoxp/OTx42ZuggBjGANNTUsmEjEqnjVLHHCUAqQM8JjNs/lYIxQFHR3YMhLCAat2Cel6E61nrhL0OrD/EMXhXNM7b/9m777G/c37LBsEyB06eETjZ8+84NBnU0NTelpWclK6GFra2jrhww8/bNq7BwtpHINBi4WQb5M3k45QIaj3pj2KAiQ6JUcAxhtMZN8ifVH/pz/9AwWQAOYx/507t+gZp0pyck7duHFtbGLK8lebr7/+A8UIWFlFiMAmzoUlBVs7m0WlFSI33Ncx2NM9PRHCqW11Yjnz00Yk4cSEAy3wMzFdWlZ54ulTL73ybZR6//33nj110raJn5gFZgcoBWRUAdKrGM/EAZ9REzM8b22d/9a3lccSUKqRW7dvsqvcmmuPw4a+N7fv3qWmkMkGi2AhgwXnX//1X+N/c9/f/u3fAs+vUWVIkZrLqBcaDHetTIU4EA0SZGjneIZDhe0bAO/cuRfZASaB996/m56WsbPL6i4oRkYAijP0BQUSRkiWUD9QYTX41LCruhQL3GqZO5/tax1oCYcU8tcdO/7U6Nik5YTbeS3v8TmGEd2LrKREQlLege9+59Xm5n1mK1iFFhMyDQ1F0GUgEALamWkz+YzAODb68ePHJInilZQYV2uj45POLLt8zUL3hZfOYUv7OW7MddAHfrSgjG/dadwH9b2BQPrKkCPwh6v0RNuUFRc5yERlSUsC2yLjTE8tre38zY179lo806j2AeHBrgV7zaixnNW7ZuHE2tVaCEX8iaDMIxY8YeF5wQlh0nmyTdhNbW7XEkaNe7U/JGYYs9o5mp0zJf3gtde951EOTBVJN0yCEFF1txZSCP6k/yGf2e0b6f1J0Fgz9I6JQ2EVYcN7UHkGJGHEIax5FNdyFA9RVtEd5qT94J9eMijsh/QK+zbYCAMslT4x768kJSRT9emS1cwuxMXE+9ayum6XYUW6Gg+c+h0eFJIX3FLEE+ZhRhmZDGxfXP7mYt0ex+uzTbm82iBhf6ving24QhENIpxaqmjNt3YgE5D4RwEQgtwZSNEE87NzXWudRFJJR1xGh4dwIHKnZKb7lglA9ZLiwtyskC2n9WG4f0pT16/fJBqmFQoQAIxLRhda2NUhNTZq2KByhcn0gDGsT3QaDecWU6odGIMc1dECVAQWSmkPB7E8owjgMYCBkJdoGkl7IzqSctdamqRohLnMLObYOnTgsL01GGDneC/GIGKCrnB3OKgwMDw0MT1huVJTUQtpyiAKawpOPEAUAFDZM11HZCDToJDSTiZEGQ6G9wbMAFDGNg48G6wWTHY0uU4VqBesiKaJCSY7VpG60pbr7tVXv/fZF59bhJAa0elSMItztvdoSiI7lHOk35D2xm0GtkHMdNRCd2dH054GYt7V0dHYsMeWse70K78n/jfYMISdJ3jSChz8n338iYkY2gHjJfqaiRTcXVHAmYW4REQeIdCycSH5zPPPtbW0CLiQ+F7gU/OB/eEtOvk2YC0iD3bxJ8i80YQ/EclP/vQ+OmEACxK1Dhew5sF4dEPSoEwtACkAEU59BSU0M+NNVIQgVJtQqVklIQgBfPCcKqhoJIZq2GZicogtPDs0rQUV/aSk6kASaY6EWNb6qbigNAoePwdILGn0bo/OITAlYRwDuXCxt29YnAP4BZbxG8XHBee6BlnRvrWvFx9N+VMjykQdxn7yRnfqGgKQwO+N3sHsV51G+GOXwRJ+vWtZYR8PVIxvBQxH+37VhT+hy9jhUGta8ImSDbaVj3YKfj3iALUEY2AClPasDGzgb23S/gqARC15aLQcpZcheB8FT0WAaT8qEiDXsqaMAsxkT13LVnWTE8KOxD9XTE2qSKvA645UWHfCgGAJMNMjOHtm3VVdk07xsz45wsNCZmeLCZiRlpSdlS4GJjk+pOZM4uGuq5VUlI4O17X8fHYAAQAASURBVGylYg9WfrzTY0kJ8RPjI8zW2toqio94LC8tmb0kwaBHWAxwEqWgTqEOxhgxRmQsmIe0AMkmrzIs0Tv37kI45ESqhJh+w3GTC8uMbARpjPgevMfqoOUqMEzaivhFVoBBZogxrtcdfMJDTr696DzVjx57ykXx9uwY5cJO5kJuqzWsxYAQC05f3793h+6or6rBbOYnjGDNaNECZkEvsqqbJDjUxyzsxxzPzxITS/HJnGBatRHR0JDtVl2iJ8zBPiCDAI0OHzxogN/73ve+ufhV+QEJCocIBU0qGEPAz/yCuzWGAYxDbGpJxZgQG88JDXh4sMwguIgLXc5aGNTx4ydGx+WHabUBLfba5Ldv735hD86iiWpgryvJBOTXtGyIBAc/BPP68rrlkOy05D0/t4AGxw/79+/HeRqXaJ+bnJvEMC3eIATAOBPwsIfr2JH8GkRAVlD4QQVlwCzQeWZmXSgOpwX20zVW1DILgDiwd2kV1MEAZgX0orB7u7pxBYZHGuYyTg4b0/PzxqsuqTx9+rThwyGHnC4Esfzn//yfoRc/mDC2ZmUVN1vn0hi0De7SsgsGwKNfWcwzsnJvXLr0v/yv//d//NU/vf3OO//63/yxoWXn5UpdJ6+Uj/JMMadaHzy4v7oaNAnIdYR1wWnCM2TU4REEeTRWDfPoHQfSuS4xJIDKq8VYvH//rsHigfLdZXBrUODH0ow/L/c3Nz9svV/fWO/YgNbE4ECp3U56xTziJgH74N47kE3q+PUhjX3DeQxF2JXZxyzzEpbwkk2So0ePAEZ8CFRPTo3r2mRrehZaoOtASklUm5uNBQMHZb4ZNgPRi2QpYKNZgDL4BaM79UFqlDcvIb1s9MLEX3jpRYYUWhCi/sePTxw9urW89OF770KLq6+FF0q6NTk6uhMjNfDC/gOHsKs0su3tHSRawjb3N4CfGoFDRhUKgtyQqTLAaER4GNjM1uZvSBa7ErLARWL6jYtokEe4dasrb65jS9xpqOzIh1quyaXzmZKffvo5nXDmzJnf/va3QMUbGEktAbIf//a3+Bb3el9bXeN8HqZi1MInjooakc4U4QHw0JZoyueBcwKSZexJSrh86RuNy2VAHikEi7T9Bw7DGO4lR109fW4fJgjeEAqyILuxvnQUZRKasr21VQIo/leYvHP7JuPPapbdYP28u7LSXGv4Lq6weWgZrwUq0RgtxoBn+CDp7Orw3jz41JGjb//6g9///T90jQDLjfaWh5k8GqNJFu1EBzU0NTpgbWv43//7f/9owCn2ARGkWJHBB8P6igbbULYYgPJEay3gZwMkPhqJ5gVBcWCgEVxBJgBEPHJ8GqySptiS4mJRUtZ1/CC4C1nRWvvQqC55oZSIPKYCnup44JE0jiEMuh0Hwg9aQJre9UlTQCnmjwogfkYgJqX0iHb5NKgwmKlKZ2lIt9WvQVHUXlqZ+NVPJk2ufmL7k5/8hBToQqcKRFFkFPSJJQH6ahxVPRQVBQclRedPQILEqIPujXzQQhVaQlNI3Ny8v7cnGIv6jTKVfhWAQ4xNNq1wUNa+Fm7XoPAbiPUTnOsXMDgNWnzDD8Agk3hq2XF/Lxljgjw1rhHPpjCyoIwusAEWNS3CcLQROCcFXkbJxEMc3ZzkNIFJsmYPyjIAPkGiC9/4GWeCtqau3pC9VFdFkVQE0BseVUPWO6qZDgZ++5H51HU6+jJqkzgVpFNsY8IlLEoaBWr6xvZ44E//9E8+/uQjrj3KB4cbfkFBIW0jgzZeYpVRgyISAWMu0Bfz15agwvwahonuXABYyKhRwLUzY5MhQb4P8VEsK03MT9jIolR9kAxmwIO4UX7GhBAISB+jkNZPU8DWncGiI6KDs7dXdo2Z/fsPGLXq4ASeAarF/k6NDZYGnNCWNpwVsOEGHhTccLHSrnC1uTndcfaNrSdSczK1aXgJG/XI9tejfFw6rdxdbizPnnoGyTTOuDfrGvuTrS2DBYCWhVnjJd4rk8uf//mfc0LRdd4TFrjCkFjdgQ0tiyvDSJw1xmLmlkyPOhIhbOyCr6HR3ntMU0M4g2uEqOuDlT1HcQR6/IohcBXU+xO6ww5FxKL1k2LeqOIBOVUHWbQYgBTwxhpPde+VCYogEhyvjAdi6Q1pATR2IbTOdrjNR1/e+1N0vmc/qS6TA6Tz10fB07gu1lZXIFH6Zz+p4qNlQHkAGPGO1vWssJ80Jh3q2mZY0oAKDN77aE0LHrxEdX+CSiOWef5kiaK66sr8bhQA8/EnHeQnPO1XsAmj0ezvisGV5+ifSOiDUVRUS2HPCvsTCXSB0goAA+sYMgZV0UujMARSqgzaRPlbpwp4Y3dBC/xS2EizIHFWz3t1VeRYUkB1kEQbVMADvUAXeIkXjNqzuoFMLhlyTGf0n/2CocyTnagIWWX7mLNwOb7nRRga7s9yVUH8rsY9e2xYu7dC0p+CnGx6wb7hnvoaB1PycjLd2QklOVkZ7e2tlTWV2idXQhqMuqlhDzwwYVnDxm4Ou3Dhc1MIgN07+6Mf/eSj334iSj8yt4W4Mt44xaIaxwCjD6YNPxFISVAOP3XEzibup9+j7hxVpAgkGwTGSgBZ2bU6hWQcyMGMdSHK9CAsEgYoC3XtM0IUSLwXaEs46S/hENevcfomWdA/8+yz5j8XP1v30DWob77s7uyi+5LjE9AIuqzgF1dX5EBlfhWXltghDcbW7kqQ4ytUE60N/wJybcb89sMP3dm5ETxw6cKi2tvb8gty19eXJVZiwRggMRYhKiZbSkfTgC4YspcufwNX0RyC3/3uq2wglwCw0rxB0MnxMG1To8wdke6b2xtw1dffS7MwLID66FEfMLgG7XjIXIQ0YuVrayRXKbKcMHwzE3HgKQTA2LBzEWnnXzpHd1j8/vCHP/zks08Jb35hoZzo/k8VHj3yFC812DwLRQeD41PUWXtHl7qSccH8v/0f/x350qC+YmM2xUpBMtbSHb4FMGRCPubEJ2qZAhlnFy5cgDT577MyM011pmQD9yuSsfhNkCirrq5xBaKTI4kI6xubLIttOvlVg2bEyxe/gb1q99jfv09qdOTqSpIo5vXosZOtbT3vf/jR7/30D0AmS5qjLwRNDlw0aWtvkRq/s6v9+WefcacH7yzaSTtDBUK7aRtnohHR+OyzzxiaZIcSZ/GYQowOj8GVUxc0G5jNFjCvzMJiuIQBwKBiidKgpmF4gwrnATafrGfnpP/qV7/i8nE6SDipC0oNRB4PTmXxr089dZSbmSeY+JvM7E2K5rfPCR7Z7QDzqG9QiI5pC87FfmNjSwXwvPveb0DLn6FWbV2dX/fsaSQUNACoWCdgWFxZgkZyaoUGgXTRlcvX33zzRywvU8v5l18yip6+PjgMoYNra6XlpYYGLZ5twY0ODdKY48Oj+w8ecqK3uKjUCpA4T83MVVXVuNeJF1xcuWk1JjZeWDaHws3rV9xig9CIy6SgpkwiP/vZz1AcVIjrGySgwgD7D5iPN6TUEAOjmImcsf4Pf/t39sRwuN0VR2tgANoJtYMBaAFa48VpWEs7ypcWF1saoTKJeP/d94yRlYC3iaRaM/NTWvYrIjKpVURHAzRP+tW+DTC8scOJFWGsteUBSm1t265cskgzf2Zl55G+mF2RqNqtJzDj4HtUXVjsGQ4cwjSDBu/D/51bN+lD452YHBMciLF7e7uxtI1vt52glCgdMy2hcD83ReeihogyXwC23TCgOk8CZikEGvfsc2sqVEOmYzBffvWFRQiXEMVIqG3ZySvfzRLp6HZgISPkCH+5peWBnRwsagHAksCT5I5BpjzYdIGviLYGdaoveLCO4qU2rupq225LRmS/mPsDV+BJ+OeeplExBoanY//+7/+eCU76MKEyEK4prKjMF198EbVm9EU7UbAFRfmMfpyAXtYP2rdbCBgH9Xx7SZ/MzswQN+TDNrPzM+HcRcStBlrGq6xuzvS7Ej6Cn5II8DJaljMHhT8wSmhR7QMbiTGY2Q1lgRpltkjc4BSE0I0gEa7rV/MRyLWgGKnXJkJgAG9oEvyAvkjmEJrwK7ErmISAa8E3A9qD2SqCvbByoLWY7zjWMzCc88GiONytXpoS6glyKcjgR0luS2gBAOwJANvffBCt4RY/mIYs++kcwSowoC9CDTyNUFCYTZtcPPgNbF7aysMPSOlXoeGqfOtb32JVMTQBQ+odUjSjMflS0zMo7paWNoeAncRGGiIA23QgRTE9PgYeh4Bb2lrHRqfMdJqCYZDAFcrqBbSBMSLTqz+JHlx1d3fmF2Thc5vw9FIkE2MsLwCptBuJA3no8IZtajMODGMny3iTqtbMofbSjc5wwOOCGvzAQ+6noOcPH4JekStb61sOt0CF9jEDxOqahPoGjJECg4jBsMYBZgfAuOgi9JWTAJaAbXTc6hiDEW84BkUPaIHefuGFszQhNtAO/KsrNYSS4vHQRV0NAoyNwSvqdIQbkvCVMzNICSpr8snI2SQB1jZxykvLgBTZyQt5IzNcndbV7dSUk8HR9RJV1tbyECo4szQb7lV48gQD6+jypUvgX4xssOAQfGvbRC3PrBQzAmgjE9Ajw4kwQJr8EzE1laXYDkcqCptYBK8DDvp89OEnmMLQnvGKScgbKI5+e4h+wGHAnhXz+V0ZU6xnv/p48FP0WYMeYBmv6BSi/akFS3Ik9Ku+5Ff2EzC8kYDSS+aJ99GSoVn5N8EWSRoDZgNRWBt+wUzMfiWjvfvWiDO4iUm2esEQdjmQUO80iF9B7sFIkVBJXhJwaYcxrWVg6N1HMYXVVRG6lPfGnz4EBuH5qEGovMa91FS0TBAn22+IGjlx4U/t6IvuwHyaghntq4WWelRLSS/JsJIQ5Q31h5ui7WjZe+UtrBQTTIYvzUA6ZVdFx8KAmJmZDmd/N58IzXCwj+KUesWWE/OOE1TIu8lSdA1+YhzTp3ScjngZjQu7hMyeMXROcOg641tS4gbPMskrKRrQFhbluWphemYiOzPL3av2qHn0HV7j+Jc6wA1KaSnJJNZBZvMEoiozPDos1a6TG1rg/aL9+R58u9UF0sxScEIwjFR3DrE9eBh81YbPgodeozZAA8fNIFHST2BWy/C5H46dOEYdsDgVIJBYAmPD8Ph48OIYKfRSKBrBGgZoU4zqJNWqoCl7TAG/sqjgn2qgHLe3wkoDbnMdwdyWN2DJEPYfPPB4YIBrC00l85LvgmOtr6cXVE6i2wMCle6u3rrh1nTOMBrT0cnHgwM0kfPuukBlS409dY3+AKfsPclpyeW7ix603JfufWJi3PEJGAv3PiQl0Mjg72zvIJ4PH7ZgctbMT37yY/zz61//k+MKwLDOAfMzJ59pbWlXLLKDFeMBJ5sShANZwTldevHSJV1XVVd0d/Xa9DdqS0TwoALWYgHAGGiBpJj1ni4c5uYolfPYRMU/oU0ORLOmqDta1eFQp4tcmIA6Um7alPeAJ/se92sKEfHSzVu3vvzy66SUYCK/9ur30YjeFLB79HCzpE+cglEdiiu4l0wAGNsEgOiMFbYC8PhT2cfPnjxhLP7EpZgckMRNLYVRELHwg18xg4mTjfDs6TNfff31U0cPQ6g5iepseXCfQYzMRveLX/wseJISk1T80Y/fetQ/+OVXV37vD/5wfmlZzM+lK9cE/5g4kV6zfK53b986cezwNHWcklRfW2Ph4S6w9c1NLAQYnjx8a4DEOaiCSICNcWFX9IJn6qioJOQYJUwgZ0v5aWDwMc+6n9h8vhlMtBNamyc8PH3q+OLywm8/+kCzCmNp29t47Jgg7M4evvOIDbTtCmrhVc45sP4ZQ795+130OnLkGMD6esPdnC4N0B1jj9hqlrz09IYjCl9fuKBTLhO/ulIVcwrdMZkx/gz58dCAqA8YZuBGYtbHjh972vLSWBg+I6NDgCS/S5ElFirT3NJXox2JI6YuQ5wZGeeiBHlKaiSyvKOTCWhN2LCnCR5y8oKjd3h0VIy+KjbQHty7XUWTOA87Pc0vq4yVA+ZnwyEoFrVWhCJWqT0xIqYdUSuYH8YcVFCRB+vIkUMeZmemmSBlkR1wUY+mPSMqr6hgR0ILSgWWNjDZGPPyjA5D9nR1exPlrqyMTPiZmpmyuWG/TrgapFHt7GZg+Jgj+AXcvkjoBLdgP3Kxp75B1zymjr8ztq5dvXXw8OGnTz4jDkSP/H8kjqlqsGZ6LI3bP//8cxgTj87uP3Bw/6Wvv7H/JqjPrggnCwMLa5E7kmX/xKE3ROHVFrVop84RO1d2MGju3LlHcf30pz/94ovP8J7tCAhxSfORI8ddFIBe4OcBEfwGPOhCdPbTd374o8/efd9cSb9NTkw1798XcrnshG1wSCAyli5wiP9JtOFzB8AVYWGmQ5SBC6WL7se2i1fq6OKOxWxox8AlBa4WRkFe5D/7sz9z6kbFodEQb2343rPGDM1igHT85je/oWwJApHXsh4NSrGJyN3SelcST4ZO04J/mo4lC/40nG/CoerdVIrF8xdfXsjNzYE0QyBiBi42GcN88P5HSAYzqjQ1CZ2Ko1gcfxVKxFGI0MihU3oP2PBDQo2UwsFmwLCkD1NSmOJDfiENasdovMFUygMPxkiKP3GC9jEDL4k0D4C3aLd6tGPDVmNKikXo7OzGSywC7iQnGc0p5MLKnDkLGKSEWw4j0opXKbfjJ05APlWM512bYObSNUy6RQ4bI42fTHlRGNiyNhuBRCQNGWZoKj4UCDRTKKxZ7PHw4f0wiRcWyiGBJ50rg0ztUJLMFgWKqbLEpJvXbzhD7yayl146/0DGz+VVbiztQ4gdKro09sk2bIt6pd7tRg4OD1HOwKNGDAdpUMobAqg7L030gSFnZy3Gl5ZFooaU9qZy7gCDY9Fo+fatu/hBlggVPVjEWmcKf+/t6YJDHEtwTQK8FcaIFhYAhmAmoigE4HnDToRGV/4MDwxSrViCwidxUdxCC2JR0ajMmkdiIqCpg0cOwwB5VLj/0UDQABHD4PDhpzwgqJLoHsYbsQY5D6OMAcnGpV8XFaMCaxoBDVYXGszIzorbFbN3f/PohGuwg32IPVzdaHRUqBhXs5KZNFxY+fhxaXFQ9YhrkpuYmuYicQgYW2oNaW7duA5XnIPAkIdQ+8IRifN8JKkRQ5aYsw0wc3Q/H02JZFVNHZybKHGmj+h/6XZsVjhBW45UcGFIoFHNyA0DBNBhJNEH317qhnkZffbtVx/N+Y4KgDJw5w1wVTdOH42rCF/MC114VkYViAM98cCv3qtFKSSKNY64CpQPrUc+odZa8B06BByd8r3WPpgEJ3rWheH5DnWhjSW9JWFmcBP4VSaSaO9s3MVlqwJDs7b5Z998dCCRNQPgHT9ifMdK4AhIji7uEC1Ajm+QBxjCdBh2lj0AJoolb6Ij5c9XzJ+h38h+iAI+hulPYPgVkn2ieNMy9UE36U4tyAePYgpjOBWpJH3pVxXvKQwlkUx32lQ4Eu0v2Glaj95o1tnZKDwLCzbI1i3ZI8EtMd4HYRHhb6CCeWISvFGRgWjgZjS5FFAEyUU46KuoIN9pCnVFvFgJ5Odmx+7avHfnelVFZVlpwZOtrUfdHXvqq9JT4t2yad+ioaaKLIvSc5f3Tl1Vf0+48EJ8/+TSnPPvIg7NKJAmKwimh2d2HrHBzXDSHrHX3acrJYgT67Q/DHBXa2Gd/3Z1FbdADhaKDHmTPJMr+IGWKF0UMDfb55pbWCA2zQcOun6LlrGBnp2XzVK3kqZ806eFwocT6lbkmB+Se/u6rY5kXnL5iPh4S1YU0VsYtjPNxryzXVoWXEe4OistWz5AjhC7luyYpNTg1pVA9uOPQ+ILd5vjdySbYznOLVAuOdkFOM1KQBRHYhL/QRFzXi+tLSH1+MuvveFkvuhfodvff+216TmepxRMBTw6S6SvmOBd6WkCay1CGAEDA4MQcuTwUQgRSf/+ex8huty8PJUymlrUTbosdYYNWoybgMGys6QxUkmmbXOQVeNFbopVIJwph6lE0dj8pRAhk74zt2kT/8AnwbSZTyVMjU086uunpAsKbCxI094tHJwm5Ro368QIKsvNwVSWK9YP3BUQZVoS4lJWVuqgCI61mDlx4phisCQQnxl0Kuukye/e7Rs9vd3YG+MZsumTZsTb4DElezBpmWMwNs/ZH//xH3/60YfcvQCDPUjwoBgq277QiDcE2RtDkOxybj6cZef1h3/rXlUsEQ8dOCS0dHZ6kuXqHiVuAWkFqPW/+9u/pxgys/MgPys3z5YFS3pUAsXRUbKw4CxpbYOLhvNyQtSas4ySrtDIVdX19CAjyRjxIeWLT74dLqIKCDQoPK9f46LcmLC1DXV4e3dF8FUL1TBJqGWONFITAMi1Y0Jy+AQtmJiRiWrz1Ilw5JGfFZ+8+MI5lPr4t59apSMxdAnk4OZxIB/aSZYpBCoYYRjJn3l5YfVCh+Bqc6S+5F7WCwjNeVow9qTkFPbBF198aRXRdv2WSVTm8rv3bhMo8HPsvPHmG19+8QXm/OSj37Jdzp7lTVwTuobDmQLAZkwcf/okPUa/cGpbCxmX6XZ0cMgdnIwYWeCAurQSsmwVua86kstVJLr2JX6Yn5sRh0WpG/vISDgsyMQEP26BB1Yy4HEC0kCmAcKb+Q8mbfCjozSUmSG3WE5vd4cg6ZXlhWnxESOjgv+kzyc4jqsKpXNfD6OTwGrWXAgeHm5eK5SyBEVEWddgDAxMnAgvyRpUwofibIxwL7tqtCuHLi3KVCXcvsX2QqkcCZAP7UaNo5DDxR3QxX+JcM7CSr0F1cL3qRplzAzsHhb/z3/+cwY0uhw+fHB8PBaizNYWtjiH10YtW5GYWYLjjo6e504/29bR+uhRv9uXLVxp5kuXruxpaOTqs4MnmzgsQS9yO+hi1JcuXr5/5278U/GYAHiQ5lebMAzQy5evQsW1Cxe2dp7sbdxbXFpGUTg4jSvMpISXdMOwAANV8Bvd6wGrWCb5FbsaBf6HQLcLO8uRlZuDZHv37bty5VpJ+W4YMBC8pa6DTBKWy/uMdrbfKRysbldBgxBo7AiKFbmfoQvRIRkM5AVmBocHaCRO6KXtJbtwUJ0ZWQDQY0QjGABbW6jJmjcjRJ0XGAZ3gQ3mUZPXVuMcotCilr5U1LhirDjMQOETcBOTISsAURQR/JtZtIw/TUPgAYZBgVnj5iZAghaSFfPSqkCP0IKXMBJxU16zJhE798CkybVMO9mYkvOGw463y1wmoJjLkcPY5h6+cnLdSslhHLxt/0cLQMLhiAWfBApsJI50K0O5dXb0Uo8gR3qFEQWbGayJVZmoyMAw/WkIvi0vJSetq6sV0/jmG2/QnNhGwjRJ1UT8M1LlbZdEY3x0xqDsqA8NDDXv3ec6HQzABE9MSd5d8c9JWkk9lBKimYlxMNjz11FJ8W7xgUClmSOTbz0gEYK3SAuQT4ShGtKgyBjv3b9NdigGS1m7KRETKSZY/JU1kAOGiOC3hNWIFG1Z2Qnxu8yp5NHdXY64aIQnDgxOqaWlZtxvaXXTFisZnxSVlLmJJOIjTqCTEZ1cmz0hAUphEhGxB1AhCjWpRIL2i1/8Ql18DnhdgxzVsAG29MDFBo1YGnEJu1Ho2gC1D/MawdvCeDAAbNh/aNxT7319XY19qJXlZefXM3LyFueW2GDih837GhH+qUGY1LL7gIdHhyxjKEA5GN2+vLG1zcHkDACaUlmUEqMFHzJgAa9Bz1aSQKUo/cpnLl7DqQl8AjbY9s7UiROwDcpSArrOLRDNkCPFVjwBMAyFSH50VjAe0GDlKJcDDl48K4ByRoUw0Y+f/uUxRKsbvzc+UAwg5X34hqKo0SwMakcBtZT33rPv6HsoBoDbUIVoeQ61nCuLLEsU9uBbg1rA6FpQ1hvnPLiToxD6jn54R5DGmiWUDfeexPGSr685p0GtLGI4ECqptX+B2UMw0NGDTSy1Ykp8Mge5AtHhRIuFX//lEy3sze8woEH8apHkAbSAVMsowOlbeSU9qIIXEVsZIoEeukAqVFDSrz4q6oeS0ggGpYyi0zmwtaMR1IEiH31FlmbB2tCUAlrDXipqRy/RYWIRKYuUtfYDhcatULVDE3pWRbNMKIuBqt01fKp6LCkqtkP0qLdPYLQooO3N1WSHeeXpT0qICYNwsClx/76GgpyMgty0yrKwqbQDby6iS0+endp2lkWS1fraavu/0uCAxJ6KuOGkpETRizwfbAsxalyS5kuWoskMG4o7hwSD7erudSwGxkpL8mEJPFgUrwIVwNAFLXQcztEvLieQFJ/jR+piVrjVjje0vJ0LCpRl6yWLShUWsGWm7KyMINY/VABPs9CeXRgOVNj789EXhQWTju/DDxhM+Y+6eyKBGds9DjyVllRmVcfFx3f19iAfaOlHSS6mKBRZyfJyXU5Jl1GILuMYHAnn3fXu2xFYE4bPYEeHdbQ5lflFPYnIdxLXpMu+JN7WGJxDcMKSgDFOiPTULFQbeBy2nisrajC+zBIEl8JqqN/ramzDX5jneRqns2iKjrZOuGLMwZ4Vs7ts2euIh3+8MZPJymji51Q2ugcP72mWfx0Xrawsk5rq6qCF6dPy4lIQ8GFS+o7pnz59GlEUNpH7tsSnKI2Lw2xf016HOsbGxilBu116pxwjqcDCOY1r169T2bj4woXP0Z0qRz64BS0FpwsGkPwVKOtPAd/Mi7A+GRwkWTDsrJSu8bk3ZkQkBirSo7LgAXMM9GqE9vRhjlD0m0922ESqAJWZgiUgEOZlQ4cBVFZe5gCURW55e80QVncYoK6hkReaOycrJ7iI2loeWFuubyzzPTfV10rZtjA727CnzszEqawdo8BFv//7v89jzSzQiynwzJkz4FcG8D4YzJ9+9WE9ABtUbE0KwbhoXe34Rk1TKczDWOvDu9k5IUsb659a480l6YE3FpeigzVM3n1irrvf2R/GCxhzAw1mJoNzBNKdiqw3GgBICIdD7ADA5AsvvsS/CGYtmCq4bxH9ueefGQnZbyrY+l2dbbwDjuslJzCRs5DJcKAu5SCzdRwDN9TVc7dQFAxTaAfP/PzCXoeX6/f0D420dfUw0ey8uWn7YUtbUnI4FWOivXPvASrs39+MnZzoc23Ao50n7W1hS53xpxFGFYakCTESqJjpSiLfn/zJn3DK6t83MwnYvX2zLqFr3tfk11Yht/fvA3vPnqaFee8xc3ASierhEIZAFWHDJAVRtDxsBAH5/7sRhalKXzH+HF2APUeiP/jgPer/rbfeCgNPTXJ+Bm4pGJE5y0srhZFs1xaW//Dlz1966RwPEC+GyH87GzNzcxxPmsKfI+NjwiD1K/gBdYAtY4qlKdtF+dLScrJ87cplawNEAQMJxbTYZmV53X1AWZm89oXcDVjVUo1ysMwgR9L5GpFz/NYDVnaiMWtrN10AZ6TlJRVE2z62rT8n13t7lx3E4hPRgqxNaZlZS6tSxwwqiToO7DrscvlSGwoaNT5UjChZCZBTyzC4RReGCK0IeH7b0ZEhq6ae+T45WMEJOTHxcQZL0ODTusVM+OzTp9xPJ7xBMO3Rw4ceDw0rRlPhcMoWibEl+COaIVGz2NIz9FoebD0JMyyM+UZAbXr2rRioDh44gP20QAlEjbyIxyFsB/lVeYXtVdIeIetAbi5B1i9xMzQ6xHGO5KBbk1GfJiGSOlULMDgQVxMuiojSg0J4wC02FSg6LWiZAIKEFsKcZMdHLR/teB/9dXJqItKmycZRlnhpvf3kW5oS1/+pu74RJpvMkBPMfskQKVNA45BJOXgg+77hBNIME6ga1MX7H30IS5z3ShovmDna1UVKuAIheIzFSNHOT5BA+exrbCZ6YuWBJ87TNIrlAGAKBgwX2PJyOKzCtoLVoDRyC/SrsF/tMeTk5y0shsS7GtEFQmtTyKICV+/dJaGxMYl9/Y8AQ6GBH2ZYnxDoAwZw+oZqECoTWQ4tWK1QDlgOs6GmGQrbQ3WUAagvVONY0XhM5W4bbgC2xJOwETfSlkqiiBWIC5L7hwctm8U15OQV4eeHDx4ePnSAOwO6QGIgACZWsET5AAN+6BadageegQTDVB/ZBCGBVd72ixkTbFEkwIMeffuJLiotLQE5BFKJpi2NsJrQCGycXFqGfxjwcmJ8lM27EyMlVyL+ChlY1tYdkgEY+IVmgkezegmO+cRg4grZzcrJx1Fjghcil0hgg4qQ9DKcAEF9PyEWgCnt4aEha2CCaVklChqfk0GDhXksgQfUBZW+0E64gZGKn48n2rCAV4zQNwgCm6Y6rLmsLePRsZ+gzIO4KTFtnr3Hdt6DUi0fdAJN9KWRGIZmVbEr5DtaXuPC+lVXQPp/t7RYrhm/CVpFwbBasP3BgIVZQCelpIJYO4CeXwxB8xLlE0WsrDykQzRsAsMHDEF26T9bECKaXNwggw1dGbtjzyWETK1tJohBdhOZ9OCS+4mU4bo0gu1NXquwl2T9+2TXxuZGzLqjenaZYqQAig5f40YKcl2TRi9xf3RcsOQnQ4uOS9gEd4VnsVIhZfSTHQ9xAVshM4+fwvUCu2LsY6KfYhrhGjdYCIclTUlcJNJJYY52HOmsbe9UcMx4hlWo0JSKSkYx7C8VUdp7YECdae6fEeK0dIA2HL2Ac41EgfQr7BmUFjwbkY9nMJAHp+xBKAIHIUTvpCbnbm6sJ8SGmDlrhLLSQqfIyZ0sPc66NtZXil0j6meee/rWjRs5mWmdrQ+tndpbSWy9W7HGRofl8h8aGCRU5RW72R/nzkkp3e/8AlcEjWB9xAHgGWzOxOEHqRihNzF5k6RZsOFdMwQRtahlAQQKxsSZWnAC41WqDX9KsQx+Fr2t/F+/8xubYtBrBwAfeYAZLM2GdjOUs/KWyNJxMJehxa/NzU0MVs2aqyDQKizsv+/dY9o2i5jkMJo5z4yLXUIv1jE7LhJazCsolAHAmluaC2/BgromVLdXVpSVp6ZljAyFvVr+vKx8AQVpJg8HXtWura1b34gRQbGyLIVLqoSMFWWl7a0tUloIx1fFTQL0LyQwN3ElDUi+hEW0tbbXOmNV04CazsUhYEF+MRGEitSUjMX4FalIwh1Eiys52frZJZVnWeluom6kKMuVZRR4+fDhIyZXW7pmTd0RKcoOe0C17D1UG87ViIO1xhVRfDusZadOGaDYw4Jh/4FsnEPLYFTWGbakZPEeX1JddZU2UfbQ4YNh6k0M28F1DSE+UjQFX5d5V6oT5ovUTxSZWBrm+O7Ssq3YDVd5nDh6DKdhTiFTTh001jfIlKp94AVXlgQdY+HEpDfYIzxMh5wkClNnY26AGB5xPlvCUXcFSLrf/ai/sqrauEjkxMQkdwsMMGrvJiRI9QMwo8B4wpcxoYsShSI8aGv/H/+HP+WNwNVXr934/g/fdG+LYDYWAM1r8ktO2IWvXaZoj/hJbCILnmxibBaDiYoQPfvss5pVHbt65uw0Ij8x4pWkiFHTrGDOwJk0OKal+lTZ2tyG0pHh0Tu371qKgNP8MemM/MiIGQv31tfWi7FhidbVNZAIbUIjJakWqkGaEenLeHGIiQb5eCdNug7YKYyjqBocrlMWoYEjinnilVde+W//7b9ZJPNVHz16nGFsPSCs32q47xFBS3azitG5D3jg0VBOVo40qXaZYYN+cPLHxggloJ3pSRcfzRElblrnOxxRYB9YSmVm55Lr1aXlPXv3VVsq7NplXLpYmAuBLtmZ6StLCynJ4bouO65YUWiNk6kvv/zyr3/9a45h05u+TG8GqEH8bHlJJxhLeVkJrnNyrLqqkgO7b9Nhj835uVk4M0a+3atXvhEfde6lFxzkNmSmzw3UZFclxPU96mWf2U2HFmpc6Ag9benrol/bVtJ6Dw8Mu+cYh//Ff/8rF0pYptpqQ5eZmWnLEq5TkHR2toOKAadNyHz55VfoBF527oy6WjkEF5jsxt7XJ2SRrTDBP7N3b6OLwHQtesdkzPeBghqn1EPwz9wcTNq5oaauXL52+vQZhLTJ89Of/D5j1Z6AzUyFqS8nHqk+HRFVB6wBYNljco6EUgwD5tChI1ISg5ODEmMYCIyJG7L4sZ1KwzQ3H3IVwPPPnbU1Jw2ApTJGciICC+F2BQwNNSleHgq86lfYxlSaos9v3rxu70ZOiFoXo66uk2VbuBTay+efVswy6Zsvv+Ln3ttQz61mxpEL2K9QzUYxcF5YgoDt2X9YkeCQcRoDY5NripgvgGrJkjOuhLrLsF2pX6FrwDuwf9+NG1YRk/ApuUdZSXF6aoo/aCHowi2+YZX1MzIyChXOn9CRhm+i5ACiUZWB6syQYX2eo8cwURZTGSPZVEAtL9lwBFZrZJDCYSLpnX4DMPwYBWQCmMThan/CGFE1FhigObVWlJ+XV+Swjewg0xtrYRpKs4Ecs8sdOAIs6XAeSTMLn7HEcVhRXzbb/WOUGwLwtLlvX5OmxKajhenJxXwspempWV1AO+MYqCDEGASEdDAKIZxSMgrflD/gATk8MAJ4iQxoQsOkGZQEuRkTwMbCQ0cw7VDR0uHwxtSEX1//wRvvvf8+olRWVw+72V6wSmRK8k0fjg8PRQeLlFCK03SnVnStiKA0JOAje1abGldAp/oiFxW7q2xcO6GhzWCSxiWGJHXzSydONmEzZtuVK1fohD2NXOluqRpaWZwl7CURa4GL1e6NbQqO+dy8Ahz7ve++JjfGx59+/t67H4Rt2Jg4EnTy+FECRfEqoEcshyu8wWwAQ1+YATnMA9IKB5OADfzQ6PPiiy/iWAt+Y8STrHykh2pj5KDJzsmZmLTersVdGIMS1gu0uKgLg9lm6evu8pMprLigUORwR3vf7opKJaWuGh0ZLikrRTgRUVQfeBzvsbEzNBpu1DWti722C03xct7z79A5/rz49Ve6M0Grp00Qmv4QnfvWEGLjwuETypkHATNHbEJJtEXS1uEEu6NLi/OsCwA86uvRY5Bzf+A5H2PGaobng7EM2wMyeOmjtI9eldeun3xDXPRXEP+uHQ+a8qsPk9uzwuoSDx+U8FFRMRD7Bqi+8KvIE3ObgAmFAZCSGpSF9zgmaqEypQmbkegUnTSCJAG2aFhPMLl58hNEotk+C3batv/Y9vHMfem3rKu2dxaMFGCgigBmyKy6SMh+XGgt4oV3OBhcHMkJFggwYNRUD2CAYao2HOSPjt2vSkbwF9zzOwqG+KkQMaUtZaITgwdVtKCMoUGXUWsWBsAfLYZRPOMzdfWiZATCEHpEoUBd6qbsilKKhR0ML72BHADoKGq8egk2vYRxREaiC1QyXi8NwUtvIi/D0WE96loVP4VOI6Y/j442w8FcE/PyvGW2oDXhQBxpso6VFrlYt3hPA63xJD87Kzk+NjMtaTGNyWUOLi8ryt9y/G91mWYhRVa9iGVGt4ymKTCDuEa7ENTE48cDZkfbQkwBngZeagcXTV3r6xLjVNpnt6/NTyagHJzwoAoERgfoTyOCOpIMjT7Uio4M4Ze//OWBw4fst/7Tr36pX3wQVYuqG2kEjRt8A9HWgiVUnGuw3B5RylIQ+IpaYR/TR1GlH9g4siFg97Zyd5Xy2Ik/2Ma6bfPY1WWZj0ECq4qhGnzKzSAvEJyH/F4LczgITuQoj4ndtjcU8hIlJxBsQTV3796uqaj84MN3C123WFIEUTYBH/f3Gekbb7yB8yVLouIZ3wSismI1OB23nlD9V6/c1OzQ8IhekpKWhJLpuqqqrqayzqT4zTeXWAZCPxmgAA7G38ICTcGOf+75M0ClRKCdHjRG2p+2YluYnKCITjSRQCYlosq5c+dMMGBYWYxoxshNdmJRAv+kB8+cnAMoi6UtUbu72neXlgBAOnN1MSqFK1OKZwWYERAFt0EZhURAuU8dPSK7H4yxhiHfXKWKZzYxpQa2L7/8UhXGnPcMaBj8zMVAEce2b8yD+iChFtTyxkAMjc1tekY4fMgmgAcuIu24Iw6e+TSIgvmV4WuwEpsyQX7+85/bksotLObp7B94vLSyZu4589I5M7mlQmzMzuy0TeokXPHxh+9kZ6QthqC7eJsItBnwqH6zNR2tO3s4OIGpAX44NFJTCwxQ39dv3YBh2hx43vMvIp+Bm1xZbw31ezQVnWmg6Jsvv2neV+8nQ/MefaOO/Mg0M21WgDdNIQ0Tj/LD8NbVdk6IHm4nICbaJ9shRQF+0B0ZRPpLl74xjXET6FqbCv/N3/yN91Z3BflFVTXV2rS0ZseICDBkXTspxCbu6mhrrJd7athPZ8+eZZ+1t7YFbRaJ5BRX0dvzqLyywh5RNIGVfTY+LwHEQgg4sMF262YIGjZqjG2AwEMjWeJ4SfinWSTuxzCKr776Cv+bnoGH7hACyQKoTNVG4U9UgxO4feWV83k5WXLwktmNNYHUuzs72t3VYO1k1DKSzVuQbDrlEg6rUHe40XvD96AduDWJ4mG8gXnMHWAzZHzl4Kplf1l5VWtr+0uu+HrhDLSIJ/n440/PnXsRzp2JhDqTm8nH2gyEJcWleEm2qLSMzLxwz+sdPT596lltogUGAH5JabGNO7x35szzIps/+e1Xw8MjsA1XloTd3e1Hjjxl9oAcqiA9VWio3d0Vlo2gCHFfm0/WktNshj+xSqSryKx1vl4oNDoQfmDGmp9bRBkgVdZXYkWjoyuiwo4ncVpldS08y3UrOBA72WxEI52mJVsCBfRGa8FMUEHp6cYLYzjBA64LGjsuztppOVnm9bqOrq49TfusWO4/ePD6D35olqFFoRGe9atKdU3lvTt3BND5iR6DatJtAQClSAw8CNcvaSUd2EB1vEFnIpDRYW+N2E3FpQpo1kEOg9UCkBRgwQf3s7N5K6v6xTOsdsNhDGVkcPE08/gQTyo3EinUhhlUj0b/29H1k95Bol8fUBmdljWLW9COkgGPWsRK45jQjAlFkKO8iRiK/Ak27cCzX30US0kMYTmMV9aj4hGLSciZBHGB3+hJ5Z0h17X9eLMVw0p3KtAPJZFMwVqmPWAA1SCNZnbgClTYCR60Y+qEVUret5LKU57RiQxsEIs3CClLDwVzMkPCFViFH2/Q1xiNwjLDOWB73WYKlosROSh4+rkzHID/9Mtf2drVzrFjJ8Sy25ynA9U9f/68yD2NI4qxALiiqhItKEB/2pqOqCMH+coUBh6yAg9ggCFZaIHNqHTsbR1LF/kEIYocFcBgmrUb0NBQrxYC7d5dMTlhVV8iyacri2A6sjGeolhhcZFlAyGKTxCRv1IuqQZf4C7Lg5Sludno6i5KX+NlRRivBoFKfnGLBziHq/A+L1d5hEMRvxojIBHUEAxKXzADTlUUQAUU9yeBVRizWVzpwgAtcbHQ2PCQ5bRRqHv/wV2rdM4p9quQRQRTl0dYACRyK4CvthbD0Xm0wDw2NMCsLs6n9TAz5ETNffqEQtYdVCtz5colaAQS+ho3AaefaQ8jMi7vQQKr/jQKvegXP8NwGCaG1jcIcE/g04i5r/voS7969tKDgXkpisSfPhARfamWjz5gx3svo79Gh6QzLasbfU9EjQQD4RstwJSfvAQKEOODmR4juY835NOZXW0qg6dxiHbiExKj44lSy2Bo2ydmKT8kJ3IBuuA37N65qUGMuSPEgBTcY1GQmMwjZaCQqPEwgJA9KoAdHalvTGMg6OoTsd69EzdPrv459F9FMABbXVBFqoRdDmAYlF+pAMPUZvRbYb9qLQozzlNAF16C0cef0KsYLAUkRn7yMtoRvveAU3GYnwzZYqa+vmQ9+F9CsKlfNWJfFDx4158g0Rd3iwa91DJdExJupoYr1aIqi9ZjK3jzO1Cj1RWOkw4/JSt2J8ahz9g8t/VmTU+NpUJnUjKv/8zW2qED+w4d3E+njw7LaFkq39d7b/+aPwM/UU/07NTkuPWlZcPA40fRyB+D/fLrr4iHZfGa1WZc4qWLVxD0qSPHAMl3hWQmD05HM7ohFBQW9vaF8Fxv5BGXY84Vd1CBYUgmVPgJz0AyFUYA4AHnaB9OekPEXirOtuPGFCNLfX09xstRpDVlIMERRqsLhf2K9ynQoeHHqGmnSOAHbLuwvKBARGbIAsRCJWm2kjjpAQDaCObZRTH2B+iakdExDh3ubfN3Rmb2XDhS5g7jnHCSYTaQ29YFQ3RhccZmnzgT++8WD5L389LzkHX3dB442Lw8x/BtkuGno2PyuTOns3IyLdORw2C1ACpLJlYC1U9DZmbkcnJYkP76V7/p6Og8e/YMcwceyAsLSdZa+W1YeOIBmEQmRUMm9qa08bHgwRJmYLCOfssgyRunfcMkgu3tnXv2hMWneSWse2NiKBG4Zcl99tkX/OthezFyLpDC8quOhGA66aCFxw6Ou3ArhF2FWyymZybxKnza0daIeIP09IMXL10R4Y3gIyPDlnJaQ1NQLbncvi8EtqKaWhQobjRn4BCmPy3GOoEKGkNHylsAoD4ZxE6G5o2PEQk6N0y1EI6MKwB7HPCFJeUXvvzf8NX16ze1gwQWAzk92Z7F2Ru4Hu0qOENpwUm7jE5O7j1w4MHdh/PLK6fPnjHl5+UXkjiXW3PRVZaHDV/H3E2xH777Nqba3JVYU9tghiDm+iXjwNMm1HmgkXmvYVUtnMNx/sK5Fy1rOWWhy6gVMwp2DwjxHlpgM1MpVECCP00/dnzi4xLKy3ZbkNCTHABlJeXutKLosTR5P378qPQ+5mZjf3jvoTfuEPDN36fN69dugw1WgUcYdURevBfxBXUNtbUWXR98+BH/nKRNAE4YTqY3YRInXLp6aVeMjONVe/c1Mr8oWKvZmzeuswZ6urtcbDc0PKw1sh8Oj5SUgBwGLOA7urt0xBw8e/58Vnbu119/7YIIqywyYt4yqP7ePgstXnm9sCNjduIYc7QUKmvBQtEkx+ywWoA9P6mC4nyKDBTrK743wCNxfU1tW+tDTj17FPbU29taH9y7K+KlrrbaWKxJ6qprHBgVFGR1Vxo5K5+7I/TRcjhcxYWvxNFaSEACl7a4Ry3DEl6CMUqGS8IpdvE5n39+wZrW0XkE+ou/+Au0Ql90587XGte+lSfqVFXWug9GSHtaqm3SLAY6OA0quuTABjbEbH9hAGNhpjMrccipU0/jB1JcX1999/btx4/7kQPvGbL5QXxzc/MBLn8r/aWF+dLdZeNjEwTNLpD4wJBzOSPL5h5RFbKCytjPzXdR+xVFgMF9Tg0ybpziySvI9ZPoRKP7zbvvHTt6gv2UmrYi08vczPTdWw/DlSa7duEQ48I5HpASo8K2WEozHYpQ9ahjqQ+NbBQ7twAwUVTXhPM5tv1pBupaODlkGr7qeCYhIRHGJqZnCDsLCYZh2xSvF7VgjyAojNwKqEI56w4tDJaYMIPmIn4W+6KWaoF2kXxf2gQwRurp67Ud4d4nFb0xJ0bYppIOcZNMVCd4j8G0hhsp5w5rToFAkdvWaSRTUlSHwCGuUJhiMRDPhAswjpHTomAmobQrNRKdaiFHYUzrG7qhTpt6NDPKt+sEtmaRxmziV4DxEJNQW+UibMM5wx07/9s6ZXKMj4eTcmZDYIPT/IJR7fuhmnHBFfcEEgCGBnjx/MtU8c9+9jMoAo+K7Gz9ogtMWhMCyZ9cD/rV/szkrJPu+HB6KmB1uzDf5jw1i+gP7t2XHbK+tk6kln1aI7LnnFKU6mS5A5isFnioiK1CIx4WusiaxA3TlJgsQPCACuYFpOvq6UZ0qokAekBZUkzho0V07jYpYEtVcBGmxfn2u9hKly5dAb8IFKMW1xdxfLQQEOOS3oBHMiU5nq8FbIa2FhcyUNlfEi/hkJkFHuZnBcIJRhLaGm6fSAjrCoTQI6LDHhh8Iwquhn/eMWjEOX6NcpFNZhhDXBiOjwtrXW/wKm4ET3JyOJSld9XxAL3HODZqsxi6QEhEKmtwrEw+yGcLxVLH7dRmw6Y9jQ4NTk7M250WXmhjv7qiUjuGDAa8B2xj14LMV7rQIDKZrWAS5lk7ugYq4BGUjUcRYSRalL1JdzkEDFesNVnRlBeXBfNkPOKQjF2WPybYf6uwzfYTGeG4P8yIercUkQUobBwbCaqgmQffcOchYvEEW1NbXkr76JtNbPwRyzh8R/bFBAUCWu6UdHastYcanjVvMEpEW4B0HwOm3QwPR2o2zDoROrEtBJsz13jrRVNwHSGYQUINM9EHX2jNRxXMBLb4yEEZsdfEkhHmDQn0UcWzmHotC4/wRjsOcolOssxheMMFkKK2jl851iN1g5pLTpJuKMaSyHJqfZUHPex4QBwB9m3g0ZHa7MSpPlFmAtKsm1C3N2xDeEm2GeACiuTlWFlNFr/rd+jViH6NJYpeYkmDBOMycgUdKvggjNEhPHz6CWBy5+nFbQ4wiQ+EPdgItsGUjh6povfCpWbhvG9Yy1kMIPcCxrJVw/kKFerqTl37HcFdF4lXtn0AVL+m25ZMEA/3RMyPrD4zi3ME5lBzU+OehvGhvoS47cryYm7tsqZ6N70vOfWSnFBdUY5R79y6Vl9bmZ2ZiSlzslEgBGeTnLBNOUeJFBopzjZqvXjAuF3dHaJr/CSnCmjz8gXcr7EA0MZFWi5dstd28ZtvrJvdRwKNHI9ohEBSYVIW0e1aUd9mPhqBnIubhy4mi6laQOdLP3jp3sMHchdn5WZvRdLINtTWhfvkR/mDE9CP/EtqaZnG88cQH3hsd66drwLkZp2w1zYSWA6X8h3itIkJW4SZonLtKnBhiveV79KVmXYKWMDzS/NhfWm3JiHWKUa3gEHEnro9ssT0dvUKxmUNZrg0ODsEuTozQDVwTUA1zpdgwWAFoOvXr/D22RefyxpmbyEtlZOyAtc57be6vAx75eWVlhyt820M2du37znVStM9+8zzNIJTUC6Bautot7DBS1dcX7q5LUGsDYoDhw6SMoHsjr1YPTp8mZCUdi1yLQs15+wFHpeYPq+g4NXXXxfFYZkQ9SuYfqhdiD116iQosjLcq5wkx5FNSfyDnSLB8dm4XZKTPU1NlF3Z7gr5CosKpTcJevPYiae9xKt0vW+6D6vfvX2HgrPvIcsR+EWDLc2nJSfIOjWM/1GBMWSSJQIuWeRtZe2ZON98803qgvnlFjBLMswJV0wHHH7r7h0D3F1VCQ8ONlGXVkduBH3nnXeQ8tUfvPHl15ewpUb0CwCK/vjRp8T5OKOiESobHioqq//qr/6is73LnmFGTs7/9X/+jz948y2xJXIlsHpp+ZKC3Mx0N4jPDQ08un7l4q6tTRFrb7z5lqsCCKCLFIzUFg12lURXBIiYE+xUWFDMEGcYGRRG+t73vnf12mW6Q4pJ+zBO1OFqah1gBIG8kCEPKkI4UUVKcxJj5i/+8q8Fw/zsZ7/QPk9PV1eP/Q2RuJI4mVaFIcGDCYDjQS8ZqRknT5wylTIXIJBL3vTAjmQz8XSaDCDQkPk0aAwPznYPDYZwEfMliwrbmxgczXXF9bUbVwVXiLsYHRu+cfUaF9D+/QeW5lbMW4LFzYt0FNwiHJ5hQ3AHytHRtG8vQeD6AkBJJFkwqXeRhkBH6mV9ZeXzjz/58Vtvtj5sk9aGEUYVpKalcfZjuaefDvlPb9++aYDsGHoDjcCJD33oTCEQ3BnSlTg7RPNA6f/xv/8NpOnKIXv37oXDlOWSYVvLJdqInbUAqKuzi8DJRHV8+eUXYpDoYSBhCeMlj8L/Tpw4Ce2dnY54Zohhcd82qpnWTjx9UlYTmlOxmpqKsfEhSzi2lOq9vdMY3oZ7bFzS5NRjFwNg2t0VNU44sBS5HlnAb775o/7Hj+2PwT+JkMtgrH+srr6W3QPhzz33zPz8ck5WqUgQ+VJl7bTXxyRl7R08GLa/SM32ZogvZ3Y75lGYX4R5jj51XCbld379julIisMH91vIY/OBQ+CASbNOeU2d1O0yRD136hlCIROXYWKncL7LtOOCwq0n1kJlu9Mon+9//zVue0FKv/3kE4rIx1xz9CkZX45AiB0eko7lqG5IQwsAEEnUgXMGPVuwID/3gw/eP/XssyA3vVhmUOyiL7KzwvmfuempB/fHxDW5aeT5Z5+9ffvO6NgE1WfmspvKB/yDH7xuI4XG4JjwLYsm6wQvJacm5Uo3NDJIAN0vZv2jR0FKDOjXf/R7Fz//5IvPLjDLhKsxZRy9QHcwMjS//PKCZIuwjZONBRq9JPhuOCBiCBEkJSbG6gtawtwXye6PoEqSL8IIjQZLNrEiA9p9ZIQUzJYlxG1yepol4j0byzTnWCqcFBYWoL4YDBtqsDQest/IFFnFjGKquSBWX8SBnGp5eHQcJCKm0nkcktzQhJJpfpqfm4+JS8ovKhyfnOI8YG0IrFLeKGR/8hEvZDPs3r0HJm5EMUYCIo58757GKg6A8vLHjx7RGE5ECRn3oEDz3r1T4dRWOAZgaDYsuNyYOt/+zrfAYLuMPiR3GFL7QyNBDxQUFVpgELmwsH/QUnK+orhk9+PBfgcKyytFDbVmZuVcuPA5nFPXFg/Uo+im2poaBLW16z3bCfboFlMt5OMiSMZ1xiL4Cmb0Ah6IAiS5xmmeaRJIjsyDS2TfisuUeu7ceT5vn4gC2MU1Jk8/sFkCIh8MXwi5q8cgn+o1BLOck7XInS/5RkERe+3unZvYEE0Nx7oFJxsvTYtqJiY87D3pgA008rK2KsRdo681yeBIyD/73OnnmYtTM9MyJRgIGwPwY2OjuEh1GSWZIJgnJzfbNrgkE0eO2sHbNTw2kpOZ5Y4F7rD+x32OxkW0ug3VhI31sCo2tRcXh1MxQMInMoaDk+lpLPCwtCkwPsTUQAsaiRrgyoQENxbA1cDgI13wEQi5dP6wsKRU1gqXovI5KC/5KMDkazKD011dXTP41ja7ijhncmoG35Ji3ia3IsavrQar0Uf4KRCNKvJXCEpZ2wquaEBYRMCRPCReTs/Mehlc41ui+f0YK6zdvbopsQnOuYi+WRW3tbJmnMIJ5oX1s7gTk61FuDeI2fLicldHV3trOxokJSSxTYKa296eHJ/UlthCEGtZ5CLMeWOcqCJvNNiM35/kwXtTHZCwsgwrVvBssJVl6insqgAPUZdXVh2zEE1UXBSCuiYng97ZWGcNJ83Pw4PYX557LYUMiEmJCbAjXogAS8nk9C776clW2B/g2iSccfI2xseurq/KEsluo+zwR2ghNBC8a3Quzl5b58iP5FBz+DhJ2tccwABYcmILq11x4prClXVUvEEtrYalpF/nZ+342FIIqxRcrU9ROZnZ2YGp5Y5Nd2vsujMQViOE3HY2HSlnjXvCwzpsayNcWLxtTbnFrx+x/lfBk5mZIZERdWzV5+IiactJBcgLK6u44vBc0q6EhY0deRVgbHP9Ce4/cuip4aH+hbnJtdXF5trSzKzk2ZFH3z33HL60ky7Yl/AX5CQX5+dZwY4P9n716XvOYMVkZ85urV2/Ftbuzz33nOsDGXbShpaWFMOMmHWk37u3eWUpbLqt7FpB4sGRgYzs9LKK0qnxKQsWc4Na7hR0WqD9/n1W7B/86Ef4mGfOocLlxYXNjYTdZaXuDUBNqf0EI9VUV01PzZQUF0XOdq/eu3Pbxvr4ir1jZmu9DY+Cpia72+6+ramsGR+d2Nu8LzUhxUJM3hLmiy0FSQllyOns6oclywnbRbS/us7gMlDT0t0XsSR9qlsS8ZIhUN8bm6v0YHVtXVxqiH/LTspo3N/EgqRWFACDMPH8rKzGhoZ8gQGxu0qLi0hHYmra9GIIBq3b08iKjYtPtUslLGgjYbukqCQpPvW9d94xybGtacw//uP/oa//cWdHH28By3x6ag4yKXcnqxYX+KAxZGJ3d480mjolOOba/MI8aRCv37jefLA5Pkbwd8gDbWIuKim8e/8O4K/evEG/dz/qm11YLCpPkC2osKx8YnycD+HGnbsE4ZmTT0s1QKD7BwZa2tqW11bJoJh4m7+za2Gd6cx38pONOGnuEuL3Hdjf19vb1t3pGUeZZa9du0HrUZr7FldPnjphyFJvkc209KzK1Iyenm5uTtsy7Lbhx/0SxjkUYlfHbOTKjNHBfqCKkpJ7QojI6PDIyeMnL35z2cTALiN9PDjiQ5yf2FW6bVvJG1YCswazHTxysL6uvru/58c//T1Tfndnz8zsrMvPN8T2pGc27W0eGh4tKCllfMsD89prr3FCO/DD7rctAPLp2blvf/d7Xj4eHPrgo9+mZpj5isSucXTZwjJ/mNhS0tNitysaKkv7+npjecu2Nu7duH6weT+X88effGZb7IXz385Il46NiTNgVhMLYDWyuLhKumnYP/3TPyXdLID+/iEquL29+5lTpycmR/7xZ//IRcKfNDY8Wl1RtTA7j52ctodMEi0ZM6cRbcmwo7jGJ2bffOun7NGGPc0089Lyxp7Gfa6J5cp/5pnnGaZtbZ2LQsDLKxhtZlynPmCpqbHZwGk8cg02moq5GXiYLp2e8GBEfNinTj0zYyU3Of0HP/1D46UK8vOybly/zCScm0168ezZDz58T25+fplnnj5lUmTE42EjpVjMFYcOHbBLgyJlpSVEvrBg9+uvvWqdd+GLL+xyuTeOKhsf5u+frKmu62p5uLuwePjR47PPPBf7JGZ3cdngo4EBifZKCslguIhgcS4pJfGDj94TXNTR1TY5LZvUKFTU17nfYzA3O9sRguNPHeExdWvfgf318mFfu3rJSphfdXBoQhrNlPQk+0Mjk9P2YuLdwruzk5aTJbD6wN7GD9//SJSR4zCUK5WIS2kn07a7+VjPnucWVvIKSlhjbDJ7Pswv6pc1GNIg3rgBjXb2ROYfOLBvJ2ZbiOn5V15+0NL2oEWwyk2RD46CWHmU7K4uLt1tfQvP73/44ej4SEZ2htRerlbHsVBGTJYWlx0/sEnS1zfgHH9mWgazzFS1vLC8v2lvQmIMo6qhoZ5EXL18xVQ9MjL6gzdetWIMpxsz0pznunrpui2g4oLixfklW1jqUv8N9tkyUvNtoG2sVe6ucE21BABvvvHWb957V9evvfpdC87CorIbt2+IO2LWoLX3LQ8e4jGsKD+SRS6TPS9LtsrgPKLT6A1KCf+YgHAgK4rYskvM45Q5+8nWkAtAXjz3UlFpiW2Zxj1NTvXsbK+2t941n2rBwV+muU0krNt8YH97ZwftDQnSYmZlp6GmQyCCyySSoR+mZydY/JTw3uamofHB2YVZImnFcuDQYdMfs9j68913f1NSVsl0douc3SRX58riIAYmb2dXfUNjb18nE18ODLCVlfK3FJFHpwl5+1ysbiAYiR1PO+FhpwSlGJKehaiyRhxPt/BgitCFyytrKO6o+g/eeFNAnaAXw0ELVzhhq11xizV1DW4IYbg7r2dmtx9rbWWjqb+3x+V9pYUFvV0bJn4XoSSlZjz3/Iv0DHuEXjXz+uYOTU7JnLUKWOOjTX48MKo7BRKXlvsfD9jOYgl4Y5cPZzpp5pJmt85D2re+9a2sO3fsVaICYWca6lSUeUKsFB8xcio4Ierl0PycA4RIZh7Zv2+fsLTEpKTxkXEmNc7nuTPfHTjQLALCisCZMtbt2PikFF3wvLTWt7C0ukCx9g0++/yLuUXl47PzbV29N29dPX36OZ2KqA6Gu6NiY5MOj01Pr7pb0XHVO/fuyGvp9m3rOkE4YgGsQuW15C8D7bvvvO/oApyXlO1239zM7AxeYs0baUJywuLKYm5BrgMKWMuCnxVkw8ZurcWSKsxOd8LSpQVFpXml2Uvra3nF5SOTDyFTIjtem6Bm11ddqMwZWpyf48+xwUdLs3Zd2HI7m082e/tDem5i2NHd4bIdBVheeYUFzC/n8nfFxtfW77Ekk8pU0u2S4gLWsEOq+CEzN6+1nYJdevb505aOUmbdMy8kJ8nZVbm7bGRicmBkrMB+WrwrqrabDx16KN2OQ8zUztpajxMFMl4w6WPjHvc/IkoQzkjrln+5oDgvO8eR660d92lUMTPSMlItBoiVGZnLzjN3CeWD8Wx8YQY3gK1KuT4/KfIiJbOOYpyancwuyJ+dXxyzLxSX1Hz42Iy04rOzq8vz1lrWOVwP+FwLTr368JDCZEVNfW5BQVnlMp8LKysGs3rrE1g/sqhCEhOSZwrLQ/RX396THA/Rl0QaKzObPNB3ClMTyiigmPe6hOi42F1hURI5Aos1qRsOPAxkhiONPjSRFqIta9CjPxlMWoBEVo52DEMB/VqoaTM0GwniN5E7UYEqK4srvLYMhgDATohbNZxgi8cnLK8s6DccCA6x2fEuV7A20LJegOp7RxBlZMfAY1xYFYRTxboI2AiFYsXoGLky4a8YIUYhzAZameNsTXsUNJ3ugAwqh/35FQwETiyZIngIKFLMECyK/MT9EG3N2OdnFjTlo7soEqwEtB8bll1h3RVe7gq4lV3BjJ6TkS7tATRqRyNWW1Qk7Umk9S5bDwZyd7qhYjWf+FiLiuDtE9nPTQ05ZAVGyIOMY3YARKQJBSFDcL66Iph/V3ZOWkN9vRvExHzz0Iew29RkDmm7WvLHEKpL4ZqMDNGWvMIsG/Tt6e6DASRgmFr6cIg+99xpnb77znvGbsqh9OnijKz0x4OPZLsnDOC3AEBZ96JjBiCxzOSoY7MyrbQJdRztG2GbL5xFg1UtIJw/z507h3359iCNSsIV7MjwUyS5ChpRLoBhspjjna9WHeoMUNQs2TDfgY0d6SKYzKyww4BD8JIZwiRn/oNJb8CgDG+WPxn6GmFfDo6OkQEEssiGN2RloONnZjdkRjAQ8i0Ul5RiF5N97+DQwsqqscCAPCfO7jzq6S8uKaQZUej9d96FYcFqEHv48JESwU4uAB4etRA1KDAYLN+epTx2Mh+7NMREzv1jjCYt/rCVtaXRiVE+QuABOCpN4DFeFqFaJmaN4CWjE/QiK0ZRSSnNwiFqpNdvXP3ed76rQcdv+G9ckgVjbouyJqG23vvg3araKo3gN+9DdNuuGKjA+ceOHjXBABIYwgJZokCqqq52xBAMdbW1ehTnABUZ6WkERFAZTx5X/EcfffDKufOogK/Uaj54YHB4pCCvcH1jY/DxMP/x9sYuhwWtB6R2xq5DowPW5Nm5WWYXtibFBy3IJ2bDvAWrzz77PAh//rN/hJ/puXlLpnw7GgUF1Ldif/VXf2WfF5w4DcuBBC18bDGZ+LmxsQrW+uyzz8CPmWXBV9husiED3k/W0j72FnAy85f6Em1CUwd7/Uns44ERgRUGgm9VNGp8aKrw67/6V/9KeYa4iYo+wXX1DbWffPKhoC9/gkF5QELX559/DniQANIAg1DMz6tldExn0SOAcS42aoQFPszOdjTNxhGuQylMSO4MVpsqcrkJyBFopDqeRywPHAeeNaIXNlB1dZVZjdpxpsVRdb0DhiPBTNPe0QZ4vnl/su+feuqw7gDDTBeGfuvWHcDQ26SPe89gSSLZhxxg0yraxHIGRaD+7Z/86cTE9H/773/JUcoLsLq8hlLFBQHhdx/cnw4XaW/MLy8Qhx++9Ybf2jtamvbUqkuHWMkUF5a+8857GE8MjNUIx5B/AnYOHdwXojfjY2dnFnq7x3hWaCh+8bqG2s7e9oTE2Lff/qV0rXTUU4cOkxGOAKfMmYZOQk/NzNP3YU3iU13PqrMhjVu++fqSb9ME2O7cuYWrqQVniKm+d955u2nPXnYGtSbE+4c/fCsEDDt5LCtAfCIhcmccriNxeKCkQNbmdHTnxYyeMCF9+AezQQ7kIxYUWZEWlZVZSfNJQcu1a1eWlk3PO2IFv/vdb5uK4YSMOEVtIx1ncoGjNcgFOkcNcdSkDyEHLdAL+ZAJOUCCqVThombWP2zv2NvcjEBmEGegcQLKmlVJnwKid7g/iBLWon73NjbaewceXrXDprAyYAa8TrGWTn2856DVhXWgWY/bkabFOXonXwrQbH6FEGOHdsiMqiCxj86RCTKxxaQRt86DGcLtaSpmi9JYvHeZq+pCJc+9+JK70sHjkKiwrrycfCEfght5dq2XGK/25+UXEv/Nljp08Igd3Z0nltwrLGtIwIEIAWnGy3OPP0XLgM2ModPC4lLn+B/1hHgY3KtfqPMrxjZSMwuqGfvPf/5zDAnPRFsWV7Gdf/iHf0jWGFiOVLa3PGxqbLTzicNlyKDVpVQWKWcZ8/jRwBKzdPuJuwIpBOQzWB15oHwgliYxs1Ad8AY2D/axbc0VFobzrApbcJnB7SgqiXXh0wEwkNy6eYeGB5sMV1Jmuf5i1/YuEYCA96FMLPCsjnSksEFBIGYXr8g24KfXDibE+ZCAasrvrpSALre3/xE+gXnwWDDQluyl0vJqg71774ZjAnvqa2/fviVpj+2a8pJKzv7Ll68wEu18y7PY1NTgbsHy4nLMcOSp4+asqck52k8ql5zsPOynL6miMDmSUbx6IREwoFMMjEnMUMYL82gRRrewgG3Q0fBpRTrTJnxKWpIwBJufPlDEKnW9dZjQE4K5aFkCbHWNepmXbXsrOz/bXj1h5HU1HGAYdQTt0+DRrN6dmdEUdcpYyklP9t7JJUsOXsKxqenh0Ql2iEPkcOt+noGBx8X5BWKMJVOsqKn94NPPXjr/igbpG5qwp6srOBrKip3yYz1blVmWCxkdGQ5RRhbQ9Q37AMMOsWcjgyU41WUQWkFFLUCC3PvokZQh0g8wFztau1SUicRCenRy+PFAH0T589HjfvvMh48cy80tXF5a31hn7kLdxvzsxBdffAKNJi8KSptsLVOAOMYLFy6QozNnzuiOoWK8Efsw6saP5NWC4igHGKq5BOFxgyZCuUg6IPras5cK+PYS9B58iD2B0YJn9FNMRb9aACCMNww1TAa5lCTgNOVBF3hRXfLv21BFTbC6zDcIqaloj8TGszfaQyoMrS9joLL9tDQfYoEAbNrwca7CFKUMU5VcTUyOcu2LLHfbohOoy6vheEPk4qMwBLOpwWmWRIGZK12PII/+ZKHgHIKFA9tcF0aNU3nxleRJEtg3PxsOtTi8rwXGin+BlpFEn1hNeQP30RpQldGd8n7Siw8gHRH1a1wip1hMQlw4XSQlXBTbylvb+NaCNlUyP5mEWLTWJlH8hLqRD8IB2/IjAqeAc4gXuCkKKD41PRxXMDAmKRW8a+dJgasxJybYC6L85auBNJYCopSWFk6NDywvMYCOv//+WFFNVWNjg9s0jVpHNiVaHjxgZggfNzTkE30uTYqhUZFsCHvKorbcO5yYlHLhy68MVp54+8VYDNWqN2tskoxNjGEBCzbSjteZnqoHm7KsDKfOzwQTyh2i5obCvKKV9eXNJ1vO1etLBkkGB8qmLy+/+95758+fhxaNTHFBrK7Ozs3hLq1Jhy8YZnh01KxWTGs7sJURg53s5HBdpKanuFlGIA/HjW0Zrmh3mfHHm+uHpMJMTstIy9xdFlLFbbuCdXUjPTWj5UG4h6WooJh4kw8mIU9zHFdDYiLXqJ0X2XvMqZaFw5FslUvzcwNyqfT2mHWm5uaX1rdEyJQUlfmTq4J3p6uzvWJ3aVVD/S1HRdec8U0RCyFky8bZlcuXjh0/IeDcUp6cP9nc6JoNKW74bM699BJtxd1FNUyOj3oJ4dMzCYXFBfMzs7VV1dTKzNoUCQqaVJKIru6ayir8Lw6qrDhEadv6SM/KThWpEh8nSMPkUV1V1d3VwRWRk5X5jz//BYOjcvduDOg2X4384he/GBGFXFluPp2enKCCnnn2aU56GzVca4xINDWhYjwCbiudliFE4aIioaIVFXibdqOa7TIRbXxLLxcXFb366ussJNOVhWhCckprewdvKyLyxKQkppLbpPgUuxClKcliGS1+kjOTH967P7+yIOGdXPI20gqKELa0tr5hV28vHoguPi2Pr9288eMf/x5msFl04uTxltaHggRq3a80NoIJjQ7TvnTuxejx5Vu3bxLAo8eeIo9Ux57GBvBjoYrKKvATcJxGNXlYWVkma4rBiQHqUbxp17izJQlmaEYGz9bY+EhjU4O0TmGVm5Hx/OlnWULmOfYHRSF/I3oJl7p48WuGlKmXxMGbnRPeMrzNmidfrAQ9wj/EKq8Fk1a2AyHLgu6S6uprWDmwqq6Tsuwhi3+J/GwxC/j2Jy4lcQrn5mWb5uXNQH3QYgy23X/8j/+RdcXz5GKs1pZ2uel/7ye//6tf/QrA/Nmkw4EOOoaZy6Vi4UP18Qnv29/8sLWNpz8rJxs8n372F4LNzCUSeakocItWl50WA4gI7+joevHFEP1MJ9XXhyUrtYMhbQyanoNSTU22Q3XqxMm//Mu//IM/+le//eQjtyzU7Km1Mty7d8/f/ewfBAdurLu2WXK9cOzH7paNLFSDQ5gCj0SYFjzOI/X399C2W5s7oiITRfalpuw/2Hz5ysUCk3NhjnPMs3NTmdkZKRnOWa3evnvL1p8DmWYjfMifohEEtbxh7ZFrioUtotM7d29hbISgXmzfizjs7e6qqq61p2TH1dkkHNLa2ta4d29yairrJHLLynZWRlbu3ka8Af8hLjGjQVashro6q3A6IY94ZWUJgIGloKI3NoRr9HZ3u5HY5sbS4gYeEOPBrOFzkbB2T1PjhQtf8P7qy6KIagXwrdt3GYWiGtw5SN+L6OMhYjEzTag7LVMOhM4KVqY1mQnMsw4mYSoqUYhXWXkpX9fyTmx6SrojN5CAOgxlmVtFKibFJ9U7fVBTT6WYJiwg8SHhRQL0hRZLUJqWxYAtYYa8eIO4WjDJjk+MGZY/oY6hSdAQHZPTwJCsHRT0kizIDWXvHMzYEhubdUyFVuvgNEyyRqboCvzPhGVh4zFBTZYokqY2Nuy3zHTRsIATClDAw7PPncKwyyvzPOJb22uXLn8Dns2tcAetFswpTCjrZ5v5lisyAbLhDBxsTOFgcI+P3ru9aeFz7PhT+gUe1QoMEnf02BFnWMN6KTXp2995BSHIHZvVFGnns/9RL8n1kgYzZ4WKGRmUhrSeOOr8S+covSvXbzTVNy0EB3+c5ZPQNcdaVOepUdGuAuRALCWDrKGpTcGN+ZiDMmlo2MPIZkabZ5VxNR/MKAC2ubkuSbCk57LMoNxUsTOQlZ3DcjDVGtqjnp7BoRGbIXnxrgxKzc/LEXMABtQx1zg7K9Uoc6d53z4AlxQXgwdz+lBHjtPgosdDg7ozLorozt37uyvrzMgIIXRiYWHeEOpqau1fuV8ckwijdV5ucCjcrsUHh+gx2+HKCOjlaxDICsL+gXBNp4dA8Ug0rz/NBdxDnBSUCV5iNQGA6oh+SCVRoskhQR3jAieW5oXcmd7WJdu6proalfFnqhVGampQ4yFPebydf1IhQtJCNSM1acqhh8iRD2rWst+KV+8Wt+qqohekp9kiyrzQTtrYaIggclMnJVBZVQNsiTgxvyPRKMUtxZ000PcITmJ2YtzL+eO3foSfNdXf9yhEOUbsMTCrCA/uqMUeFIUYyHv3H1A7a+v38fzExHhubvAsyesM4ZaylgRqsa0F+rJJHc3nhzc6yFEd+XhwTEDxCeGGZjIlYQP1y69YXVWfk1tIoBxu5PM1LspZRRBie0PTmgWbEDj87zwhbnSRqMlCAb+GGButQwQpDaOKGPc4xp8A8qdffbxRxgPh95P3PuoiW+R3uYdtuIj+D+14b5DG701iStjFUAbcGB0V/YTvoYzCgmsNIgnuwXDYiB1L0cC4YrrQvm9lfBMzH7VQAjw4OAqYHnEAEoowC+eE40LqUmVcohUutbC8tkRN8mvw6wPGNwgpGlhTS1M+xu6zvRmWHKpr08dwZMOkbaNY8gZOfIMtITGoDCoAVSBdL2ppM+isyKkALM4RAS14WssNDY2607uPsWtBFZDQw5E2nWoNfmUo8qf3KlKS8lhZVhgUU17q9nA0fzEsfoBN56KD8rEJYZEmjI2nX7OigoChEWUsaDj108PROopyid83DDwxMTcn18YAWjAcsaYbcyTexRxDA30N9VUJ8a5x6WReyM/EM7Rvb6MGUcwwI46EtONHj3d2doDWEBALPJ7hiinv23Yb9hJZS+lHZw6eC8oCWgR/ySCkyuhQODtIUcKhuxJVhCUFtIMWWMWIFhzhW1ywXaBNnCqkG98TBt9UPKVAW2EY+McSlKM/XZApkw4R4jWZnZkXGQjV6AKfQXrz8nCRLmCGVQcVFjPcb+CERqzICEA+Xfv4k+OB3jFGsPnGop3dXU8/97zYQ78qSUgcAxmamGQl5OcXOBmyuZnEJWOa1AUmdyZJiH1lddX83DTSCCJySKBpb4MjlYPdnXb6LLQUZqNo0Pk2ocxuxaqtNYnOOaaoyukzzzsjMTc/G2am7ODQsoTY12iRuQEtkma2PLzPuXRg/348JvbUqp1Hihnx9q9/bbCiF7Q8PTXF7rQ+zkhNk2F2VmJgUSPhKvICJqboKRR01o0XnLiY/s+eDrEltPD3Xv0O44zfj8UuDkRsNHySTaOzlgyMHZdImRLzqJKCUgUIcvSNZ5QlUA4LwwaJMArGLqzm5qY5eyFX0szCvGX5yNCobKrpaVmsOSesSaYlrPXYzevXuOSPnTwhQWpbRxeMAftwRTgdwSWP9Dq6f++hfkHLwNXd66+/bn4FG54xCTF/YYAjCn6UpxP9xDh466232CvmA2TVJvyQa+ApEC2pKXxoCJxeOPbs2bNYThd6VNKH3ZaTM3L02In9+/dxNgd7cWSITJkFqU+OAn5BXXORfv311xF5jNP4v/t3//bevZDiM2AvPl4vDFBGlRHRD+SLZQBmdGHMaQqbObkkeIFfEOvOzExjfnuA5ifcGxn1gF78Cvj29jb+maamxqGhcPwXwIaAizA2BibL7jIzahLhTOR//+9/id+wOhMDGE6Q86b5E0HR9/PPPzOHSd6ienTfTI/79x8UTgAnxFkxeAYA1JEg39Q4RtKjLuCBDWGZQWeROztXUG1Frfxnn39isUSOf/zjtx4PPLrz8E5lVcX/4//5n0vKS6RRSU1OSEnNs1srsJPBwU9259bd4PLYDGub+OoqdZeX5rFfZHVau7IyPL48/Z3vfXt1Y31mfiY2SdTkRnpmak5uFRV478E9cRG7q4SiCIBey80pKC4uykgPp4YgPyU5HenhGWyNe/ZCF5mil8CG4hJks0tYFw2N+8pLS9MyJEJtraiqsl5FCDoHBQWSaQpj4wpbrKx/FzXiRjJCe2gw0hrhGIMQ7AdveCA6EQRVs/lk9+5qku4cCuQbNR2BW2CMZkMFbOD6dn4Hgm/7DpJpKooONalWBcCAmgwLo+Bz1RE2MDQksKEnfGL//gNGB0IA4DGcQBbYwYBENVLPaAatgSM3ufjVP/0TQv+H//AffIOfuYMxUE2b5mJsH/Re5BpdzdrmR256m8I3OgUwNjYj7D5GaiC4BVdAl101hTsehksGGCj2Jy1g4BlOVNQaNhaAHp3xYVXXNJi7TnH7wYP7u7o76de09NSbt65LYeliQVGall7OS9y4cXP//mbwSxOJgeVfx4q60LI2+Q7JAgPIEDQIKvMRmAkX2Xz1te8GU7gknGaGW5iB6o8//hh7KwO9tBkMk19Ehz0tS6BkJYOIzHokEAGALiQI9p47fcZMLJYyKTmto7enhnQUl0guzAGhC0h2mOf/x9N/QNmZZIeBZnrvvbfIBBLeexRQ3rcp096QEiVKHFFD7szO7jnUrM7MGe3M7GpGlNhSd3NIdjeb7X2XdyigCt67RGYCCaRDeu995n7xHrXvoLL+97//j7hxXdx748YNcHqXWKEIMlGPBkvroqmObOg3eWE8sxgNhg3IkUGhF8J5xXyxefMm1wKagPQu2LwiP97DulCAX1PGLo0Eic19YAYk89dXbIlDmpubDd9MalKg6qVZojVNqynlmGEJhBqReym6iiJQZ6TAsAmeIYHEslKNurTIpvntv/ntUPuDVnpMhecFJ6hs2KC6GNTJOWls2KRTANhnoqOYeNVHhFBTOHhmHxhjnoLHT57HGDo1CmwDHoPlkeoFWvQOKn+3bds5LWV0LdxhRfgpNSkFTQ0T0hypATPasXyUl54XlxDrBNyKlSUiYy8Hx8+HpOhCoi/AdI0cqshibLo9LyeLdrUNY2JySozWYyVlFbbwQT7wPGktUeNRVD9st2csRpbpwtJiWVm55Iwi3kJmpgMiLYE+/cTj9Cojr7C4VG6VcnnHTzwhTUgVRwVFUF872gSMdQAcyHYlVnZDwbZ+oYgpTTstJilJUigyK7rkK0RBIFR4gLBLc5mZXtjQ0FRVVW0IYhxOqy+vKNYChQQAHGvt6O///u95FHpEQRxeWFiE0BrB26FADST6GCSOj177C6GYSaM+fgKcCw943lcv+7jwTPQrykXvGABAibrOvAKUqEHgV9cYCwRaI5OEX2sEQ3fk301PsnH9NSvjAB+Y0oUPeuvIXySM2uhQ4OPMc2FvyTYBckU/VR21ELi0lOtkyOQUSzZsF2tkHBnq1cKAOU6qfGgn3fb6dFAZKc9vbimUDdERsLUEGF+hSQYzo4QA+EmRopi1VcmYKBcrGXN1Tdq3eKrBGj7+IKsZmSGKENpZWh4ZHiLDRYXFztIzdtV3QKh8wdSchO55leNoQNFQGyshzTqy7aSxCbELy/azTkoOS0yxC0TkzIlVipLLrKZb4AAtgBZA5SwF/CwoMQZ8iHL68Ro6Sd7QUMxarEUBBy6kOgtNFhjmszoe75TfDOvUh/ft5mMU5Aapn82wuG/PGRu6Xebu1WuXCRibRqE6QxuIlCyUkIf6MatpClCqZmUPhE1jWzZvp/HhiuokeNSQCyDRoZCAub3OmnnqqWcM30Syum63YtuBwwdszPVWSGANEbElq5A7d+5CC2rG+oszGhzjJ0PJpNLY1Nj9qIepUVNTG+z7ouJKe+/i4pT+JQzoIscEQ1ud48RBy8mTpygCMaHubkX3MvEEaloFjjIbnlVFFg6HhwcoKUpfLMQJiFQh8j3qegSqwbFBSoe0XDovX7YGLWSKYldDkAnAsZALbo8vy7uC7Sw5uLpqcWGu+fZtcdmcrCyLSkW7dhqXGdSqTklFZVZmqnrK5mAZBeLxFgebb92U8iQAE6Qp1p70JetHrIftO3fXBuvfSsmIbccy+vhde3fvE9Btb2sz6ZjkxaUGB/rFderramUTYkLAiIzy05Q8YzePDQ+Z1G1mcn+ov080XfK0tdfRoVA5ccfOvYSFbw11FhRUWb1985ZTweV3kQK6hg0qREAbWtYwiSqvPj6eAQ/siTu3b+E6ngAeXl4NiSiOXEELYiXwYT82V0fYW6AJ21P6gl5oKqFLsGp8YgwzTE5OyaG0XDM4tLQaEzs4NJKbL4D0yPHykn/sCFJAXULR/OLc8OhQnWrHcbHWgizfZedlG4dcf9KwsLQSMumSUwuKpMnKhA11031Qn0WLnXjOlBZ5Z8kxoShBGKUNTSdI7/ov/uIvDB974NKoA4BehoboqvgyOFSLBz/rAc+zrp544glGEhn3l7pwh7Hlgz9VQCJ3kUpHjgjNxflcel0QSepF8Jdyd0CpmgzcPMWYlQR57LHH+FoA1hoLwE8uqEFWFPHBNlBN80AvtpSr48WenvCs/Zoyd+XS2Kly69ZNeaj4eevWcCQ2jhGAN6dKElAxg2QZBYSbqgUUad0P3v/Ijsl3333feE+ceIK+vX27mY1VXBQ2C5JZAGAbeCDIUXR5EgAsOSCB1oo/zWPdmSa6cPFSa5sj/NhPn/PMT376MwqKceOno8cey83LxzCGLwmBm7Rzz+5bd25PjI1Lj66rN5xSbI80jAY+DFNcfgqHVl2JguK8xYWwX6unr9ehV9QhabWbVkesOjyZurnJXyEXi0A2LyAfxq5t2IRvxYmra6sZyXdbbt9puVNbXWlxr6rGjvqyro5OdfemZ2YTk4rDjDs1Jy6OyZ2uZXQyAqDakA0Tc5k4PUMzaJMp8+KLL1sh+fT0J8mpE3/2f/vvLR+dOXPu8OGjcAurGwtCfjPGY5aphm5KZkBgYDn6t27ctooY9ENCkjoFI0NhoRLLybmSqEAbWGnEJOKgJaUFGIkDqaBH2G996VJd3QlbfRR5tmJj7LY8Ir3dDqqQxZfHR/0Nag0qoB3J3DGrklbsHaUg5uSyPuwMYXtuG9qh78ULl7jfdbX1ZIS5htwgV0GaYWSXDhOkubnFlMr6x+r4H1dQvKTAw17XBavdfSAJgbPS2Hijo5OAf/igo6JiOT+vwKavPLvjYuKoUKPzU3FRidYcWWC/FoyROxq1p/eRvZI2MbvjV6yCBJj/5u1buBHjKTtm9RtrOQ1BFpaAiPlISoNKAHie7ZulUPr6KrlwtEhIMpTH1tv/4ksvEU8FcwywMJyGvmbhCE7MywQKzGhKKdm/h14gAaEFNA72yMiwiJzjB/mwrDf2/L17beDxgFfEXPDJ0NAgN4NAWQqwZevw4cP79+3RJo9dFxB4/uIl9enb7j/QMhXhsYYmWf3zVsDMHXQvnEAv+dK7eROlAgNLRioKiT2UD64Li8zCpkm8ylLxLs065Y0WPXLkEDNGO9JWTXA2wVsvUk5qYGgMl5r71I8386vCZAXj7p1mqURGbXa4c/OGSU3+nnWk5IR4DpVDf7Gi/FHx9dKKkIRjMhKJbGm+S1tu2bsXrljMJm6EiMYI9u3ek5BoLXRaQt3dOy0jw6MlhWW7d+0/f/6CcJUVYxu0SooLk5LKH7Z3eMu7eFIdat6spVqK98b1W2RBXwSNPQNjBhXB0k0MAGPUII4lQdZecLUxQj55wS1YHbq4NJh55/at4pUyF0hlhjOK0lJpP92phxGZ5Ttv320xtLoGp49szMjOoLgs8uBzDEZ9sdxwCOlwNqWLr3/96xj7P/3Hb+Ft4LW09FZVli6vLE1Nz+BM3Q2PjpuhZDwBJsf5DAXBM3HmB0pJIQOt0xhsk1NF1zwuz5AODyvqTriaC5qEZ2I+ZXw58fBLX/qKTD+qz94mBRI1KNMBPlkRQcb7MXZseUWV9pl5yLy+omxlDE4zndkMiz3MJvwxLeAZs6GsM6PDmc13bpk6xyemyCbxkYihd5yjd6Pjelkui1mfQFb1BSxSYTaIlUxo60+CtqDbJ0qSYC0Fy1Jd+RDqRjDD8BdwPn6FNU9Gf/LVk+6jH2nxIlpiaxcw7kVITyk2fRcZoYfxfVR9eF4jpJQNSstQE573lmcIG5D0CEEad99NzfrVk0Zr/NgXGB5wjfa+KpOnZS8CjCHrMdv4kMSLpgHtR+rk/KMPZH2HHEbH5V3P+GhKm3qJfowCeO4A1QcYAGb9u+kn9RzUc8XibHqsEB0COyM7JwuHIaH2gysZ8fXViiFpxkLaiTcIoy3r1Pq1PQna16kHvKUj52IYMtRRAX7SnrcYGX5KjEucipsBGlCSwu7kWCWGvCsSo1negkwenhps20GgF8de5mWmqmfkZC87neVhU5fSPKgGu6/mpiaWMlMX4tcsJseuLqUkrFeWOUek8MDBXVJ9MC6XQyzkqSefBJjKDTB2/1GvrUhS06zc3ZtoswdIFpiQzNYt2+3EIqIAhgdDM3biDYFIjHcRi1GYR69HPpYOgU2h04ZMOnMJmI2PG+MV1NeITt00VfhqSjYZuONDehlVblLNJidkoVM8Kci0HhN3+869zIxcDQoRRcz3cVARoaHhgQjag59txQ2EBN7kSX1YBiEn+kVQk6gPCrrWIFrrDk1BS2wk6LMbdJqekko44Ryl1BobGZ62jqxlEYJoUU6wU50cPNkUlutnJhZ4jHAOBmhUFsBGPQ8w60xsWelZMiig6GFHe1RLipJwb0SUdQp4x/zNhjM+YuwWwsxVWyrZVefPnyWXzl2i5WGYlBkv/IN5bHiEArXWHwY7E8pmG4JD7NLEIuymiuxtISzygtxXzxHz79+7myCbzGDY9MOYY1BqE5Mwnuyl2VBb5whPwIvDid84pZv6m5yYNrHJTKD4MDMBVwwHRagef6kHWF03vlDgjKmXsm6pfsGOAsaxYoUFdjWpnMCjZuTJ4rBNEOXOfnJ2eGxUULx2Q70CaqZw6RCsAcsXdFxhfsHY6Ki0EyNFRDIFZqNAZQj0FaWoAryETKCVZ8AoByQIT506ZTIWiaTuCT7kcHKYfVAqMEbjg1/owltwSAVDi5seg162LJQSaryBsRnuepFa0/7wIVHVuMFSC6LU5lq8510UFrbhTtszYCDmVC8SK3Biqiibsah0BAx/wUwJgIddbjh42HIZYVcVzdzveQxjcqWG/TVN4hBNwSoWMiJWkfO1eD6u4R/3okt0BiWMzm7TZpif8vORgOo32bP8FBHiUiKWn/iZWNq0h2oyYoxauSTpMdYNbB8UkoQZ6e/ijjiKUQghhJqyNT17GEI8T94xLWg1ZXfsqTNnGUk8KD6Pnb4wQJBR3wzQ0tbysOv+8SeOP+p7dO3mlW/80deMtLn5DsrSYQ8ethfnl4hvGZ2Zm5pFlK1bt9+6dcPQLOfA1ZjpcH7tyWeevHv3TnZBlkq32QUZjhSenJpYXisWQzly9AActrY2zy/Pif0nJDk+ZxUMwIbzhw+68MahQ3Wk6bVXvwCTTBMsRPkYoKCpEOZ3vvt/ffOf/CEfY7Cv99LlqxxU/IafsQq178Iww3a3OEuLqQL5KvfjGVFYms2vWJQmIVk60ikSox0SYEiqANexW3EsjRRmq8VQFwV6kc8zypEVF5Wq+lJSQi9buMjmtvkpKK7IQaRa0wLkayHYyvn5UIRGSAYivb+weatkEYWJdG1Cx3uewcmtoebvRmpTSTEnDxqR9oGqWb46wdEysrrQIL7F4ZQtEdasxrE9O5hORgsqwpMGSINphz6EFmJCOUAjqLyFUTVIcwKVS2/TmnYwPBkMGiYS+cY2R06cEMnzJNkBG4zBp4TD69elqZg4clgW4mWnLl+Ruw9dP/zhDxRH2rBWh3tNiDarmLDoClsILA+IcJNrPwQCRdYozMJwAgarYviT+8T7OnzkoHPfosgRhgdPVOqhImp4aIEGAC14DKG2ugaoKu3Ds5u6cGHganNhcsUxJR1hgI7unseOP+mItozMUF0QunQHmT7sdcKiKV3AGzZAdLsCyLJR84PwHvUCEs48nc3npI09SdyU+5QIJ/HP0pw5a3p2frjl3pat21y//957hpZfkN/X80hUr783xL+UllGyT7Nj48ty03GOdGX3EQjPuGDGULOIZRTIYciqUbuO8CSunDV5S3ktLBIlE9nkKag2GeLTejQfyS0HKqOZiY/KlI8gSHv7Q9Byqyw7GantEHSLddr6DbWcPMlLxSUV3BjZgFCxsnIVeGYif1GHmPuABKvjSTwWxT9Ggtu56anf/vo3/H9L30wF0UDcIugJM7gai5aUVwivGJ23VNRBfGFHIEU9QKaLJ/Ee6msfV/urOwoBtnXa1fHgyOH9vAt1G9HlbkubsKwlOFkiZnxY4iJCmnkZiU+cOEEQIOT27ZtRt01TFrc1jit0ZOEUY4DK9ITElrhF99RQkfmkugAkt92/j+XE5s2naAexkojoH/JO44FT6gxLQB4aM8/qt/OPxV4TUhL4fpwra53YibfgSQ3Ke/Qsk8/sAxLtYFRsJmSjfaOjKxoaGq2KQyZmU/EPT9oVMQ9ZPkge/WACX5V21DrWJw9ECBO7SU5M3h5wR68u3HeNDEiuV1jzSvRhF7pxqrGJh3LxOtWAzJ701a8mDHg0bO1EtSQeYr9SKO5okwLyjI4ABtHeAkxUbIwNb0Ub1EhsitJ8yzEpkdSj6an4mJBxBBEA1h2jBx75uACjC3Qtpr8WansDkJsRTvAGHuCjQ1MShR3KFqUEmF+sfPVDbMW1NKB3O0XYImhM69sIC7aszAzVD5USEuVi8ymbI5Jo5hZpwGReAbkQiInZ0gj2tX4NZjtaZDMLZFphAJJ29B6OJA62eqo1ejk5yYlhfzOnQ6aSmCfg8ROL2YP2wIFZdAR+2Gwh9m/zkQx/OxMJYqz1ipikuNjVRUsDi7zSzPxcAmb7SF1NJVcyNyN5Q621rzJyqGivqHZ3N6NtraKyAF62bm7yMAZ46snHI7H/hKtXr2Mgh7c61HNiyokEffZutt5rKy0rtGk1Ni7RvDVojS8uTkHwqEF2/eYNWlii5/32MBeq2UZ5CbSozIN8H330EeRwB8o3NBj+YP8AIXGgb+h3bVVVLGbq2FCoHCzrHA7NXra01JSVEloyhj0Mn0T9I2/YLjA/pxSgwouyZ9TrsrUfAXt6+1tam9kQxaWlZIVS0LXoI8UaVnACxnE7hlwUsGEd+katwDO2xDku7ka2QIj3WPDtF38iBU5hW12tqgw7h3gttCJGEt3HctaXSooKbA0XkYVG1uHGzdtYqY626O7swLEm4Iyiwp3bt0mUxQ8mZsp0LGns/sP7B/ftp4vFICmUgJbyUryH7eX9UwFau3TpAnFQllEAngklcAZCOcG4iyS3td1XCA/2UJ/hYkKiAmDPdML2QDuucqhMJ0tyatozVoqoc3xoWctjV67d0BcEQgg8OIxZLinlUJSfJdJ24cIlCgvCeAKkEn0FVPlONt6xI+016urppoIli2NO692MBiYOU5UGp46pxeZI3iHFGkzAgcGs3DwFVa3Oo3KpowmS0xOTkpuY8pz3+bmdu3dZuLh24zrRwwyJySnxMWvZebl+6ul2NnOpCA02oMiOH39MwR8hc+lPTDpm8SuvvLJv3x6Lnrt37gSGoUGmYxY+/PB9wT9Y/Tf/5t984xvfcBM+DV/5RTYZySb+dkZaNWa/UhTa94zBYjDGnF9pm8HBIX8xyezsXGPjRpUCZKlJPCCr+N/qZV8fe26V4UIqVR+9fr3Pe4cPH+IHytDLz8+jf9mvPp7HcqZPDZogdaoL8DCwoAiHMzg05Q655lQIgdtP1nz3tucxnlD62PiIgDG6OKbK8xaI2BnzC7VWotj0EVmbl57E4Nq5c9ftW83kK8QIUtMvXbwi1vvyyy+bHqqqLWFTSrmCPZJosT1xgzSOpXKlX/7qV9GRoMkslzKJQ/zU2nYfDN/45h/Cv/QGcJoLA57zCz//yms4EFt6i7emWTinXZtv3VaGSFSyueWOREQr2t2PVrbv2FpUmnv48IGv/8F3nn3h8dt3btA//imLAZbbt1qY8tIAzbimQ/HvIs6tPZ5rq1wU6XA0gPZv3mwxiRKHc+fPUIOnPzlVrcpXRWltfY38os6eLkcnHTi4D0Fx5szEfPx6pjkITU0lwuFMov5+0d/FX//61/7apW2Mpg68RHCcW/9MSbkCthcvXdu3d/e2nbtEE3/4/R8ovMucMjsMyXTs769UBiQxKZhTqak4BA4NGU0Z0/ol47wFPAYVGNJMR915gHYla5BgriHXRPj8xYsoyydU/cZG1e5HA7kFhVMzVw/W1dFmNh1b7oisZsciN/vU7l5NEXObaPXV/uCB7uhJTGtes37NSeMADA4Mf+lLXzI6pFEa6G7LHdsd1Ktl6qGsnbWSMBnHpjMmO42H8wFD5aIpUmJLzIm1fDUQ3VFivGjv+muwVikxgB7JC9nE4aCCDdc0Hn0L25Dp+aB2Itm2vrL7xd6CdEXChYGUV67YYsQU4+T7q0Fdm/jEVizGZqQlCRnA/0svPs/X3XigST5UUkKyA2fycgt4brS6CgSJKZlFxSWjcWNxtn+lpJWWh7r7IGctoSnTAvPQZjSYQfnI3LDWalw0gNIJZm0+hrGbFiPW59rNm9cNRNaN7XBIRgZVOBVeFYRChdf//M+v/u6Nc+cuOAEb4Soq1SMOZYVm1LjMHxR1InQcYFYpJxMnwAaMwTNg0NoYWUewTT/rFNL8dXitV/Yf2Is9HM/COH7ppZe8AhuUACTrl2UE8qWVNSWSGjY1ZRUV5V6+zEH3TGRGM4uFbDHVp3Dd5LijRfp7u3uYiTPTUrZSLl24SG+bOJgTrc13jWXX3j0UtYgYjYRPaBWZAma09957zwS5cVNdRWWJnWkwIP2JqQJsSxOWsxwFcKf5Finr6+8K+jNyhqwZhC3n4AF2sHlEMiQlhscqqqrwIRaiHvGDGYRpThnqTqf0ifYJCHHwMPDMKR4zIoRjS+zYuuW3v/qlkyysAveN9nd1dNmbxE2CScvIXuQAMPKUb4JY+bdFxUWWuayIRpWYZrGZQUEyYoHBi9gPXSgTwuv+++9/aI5wsIbeda3NUHF7oH/L1pAiaCIwcFIGYPaPc3yHBvud2immury0oHQy7Jl99MJbwHVNW7f0Dw2nZmQePX7ivXc/qCizk35cdUFnrhk1lrpx4+bQcAiCd7Q/sHo/IvQ1Om5TRwBmxdp+usqHdqRALBMCurTJ71pbDVtJxdoYnAvzKyNxY9hbfgTslUuoiQkRc9aFeYSWE/oBrfEyAK5du87e8K6RGh1WDI64wRNLtwzMX9fuwItWohJLC0SN8ohyDxtK3PG+Zzzvr8e8qykX5M2vLuAXGcrL6lz4Cn0uoA/JtW/a8BcBqEI/YUFN+YyNhb0E+NJfXUT9Qgg1eP16Hmf7ybte9NEaumIpukaFO2sxooykzgPmG4ciRcowxQrCWVleXVl2nC0lxH1cWlnGCoAXXRBeoAIMAYRQ5l2ohClg0wvRkUbliomdkhwi04KvRsdjQyploTTldc8vLocFTfCDLdoICDVrUoJ3E4B3uW0ad4EJpmftuBcPCwF7ZhX/ajGyiqLBYPpbAZgKfrkziJPZ+Ykpsre1bBgW8lj5dLFCV7PTk9kZqcYi6G9DuGCzISjIlpjmQK81/vK2LVvr62v1wpJQ6Eoan71ElpBoqPffe2vb5i3y0tJThV5St2xu0g7BM7OJ9RIAoJJGaEHZI4eP0W7WmOhQ7ju62Ebx2muvow4qRNFuXBjaNbCj1yKaHiBmkfyHY0YKUdSruUpAi4LTsu01lKC8HfRFTWKMGbp7ehmRiP6Vr3zFhkUPUNk6okzhlr7AogBDIG36i+mkAsQMjdJltKoHsKrpAQ9Y28XgFjhwsvaxvK6Vkqgqr/KaSHxGZPmsPNRbGLIvDaMqw2y1Tt5gaXGxyDRUeMbh0viKdqOs8SEMcA6xQJQDrZQhvcbhUPVJRMQ/ikXYJuIOjYwEkAk/9uVExy5YaKn36aef1a+Lick2kLPUcb5IgMCARVWz8OWr19Udq69vwOawNNDXC0NqEVjI497gKFMLzY7uKu4bI64G4UsvfYaBa+KUICEWTjBVQSHgwIZeX2GeDWQuPnr0mDWYjz8+ZWZSP+F/+X//73/4jW9eunxeylukdOZ18ykF4Sh4YWObcUc7u2R8aUGP/Fjt0C/mrbnZaaeboYUlXXIPjejlg0DIYeCg0qNcZxqAzxafnCTYsf/gAVwt18solKUT8aJqUdauL66gJwVyMMyTjz+Rfsj+hFHFniGQOcu+GR0NhY1LTG5FRffvK8Q5pDtQQRRxS3Wc3MqK8ZIUQ/73//7f40wmjp8Q/Wtf+xpTgLJGUGh/4YUXFCAyKE0FA273HoPypOcxsCgX9mO4oyNFj5QYgHFAz3rdrGzUqru4ljiBcNQaFWGwWhPXJwtGBDYjNSHBs1dgQzt+FZHFObCEZ77//e+zzt2/dUvJauopHHStcQ/Dp8FSNUwor3uRDgFk0EWRpW1LhdQIi8EdIeQIKpL/8i//w9NPPQf/SpRGpDvUrj19+hNBcUMQjWOeaspMQ6BcAw9OuG0QIrLrGRkpSMNokEhw++7Nx44ctWJD0Zm0pNMoNq/ezjvvv/fU408IlAhDOA/Y32s3b/CcCSOdzC587NgxBhbz+p333hHEnVT2Lj93aXXxm9/8kprIjicxg3BjUISZROrTUq1Tzxi4uBdBJmI2fKN718MHrh8+fCDx0+6IqdmZlz/70v4DB2bnJorK8scmhjlRExP2Tsxr0PpSxAW93NP1qGHD5rX5WGrE7AG9kAMnWJimgsYor0IsnYPQliOCDFZUp6SmI3r7gw4TvK1c//Sf/lNsLOAQZsP11Sjp0Zo2TkxIPnv2gmguccAVcAgG/IOy2AD7YUvMwGOBTCSwm0hE1aEKojZ0MiMe1ejD3bv3kk6sZdWFLWUpGHEvXry0f/8+OTB4z+tMK00hvWb9GjVi3LfMZbxkHAz05H542X8IkNAIGH/NR8YLYOFJtPMkAaHBBKS0tnXbZnrJYxHGmAADpkX37373u/gWl1oTfv7552GPhD799NPKk1sH0JHuPAAAmIRDIiM+Cjb3Ga+BmpFkYzgxas/o1MfzoAKDIfz0pz+lNDQCNnwIyZ9+ctrxC7aGy3MjrSAn1FwgaQwgdL1p48a6pDrOiV7S8tMcy6AuYVxC4mjcuLCals25+vXhQyN30OpyVurqCKM5CKeRLDxJt/iKOvKvRAc8RuiigqYXX/nqHjAFCICL+tGopkVofPM732GxGR3YKBAaO7gBVeFgdfpcuVK/mijxAAuH5sFRHtY7zOA9bboGp6+wgeuuXL6ha4ilcCTcW1WgAbQmDAefKEv5iCl4C2C8WohSl8HfguISOOnueVRRXnbpwjmlljKy0h0jKwwqUojn52amcNdzzz1vARC5XR/edRg5oE4pNuIfsKSKZ1mZC9AaXWFxOKubhQdCD9jJBvmPPXbUDrL2++rnzIi8fOUrX/qbv33DzKzWAzhj1+NAqFyBM8XJJnmhtdDUX4xdUl4CErtr/GUoMzNgw6ijPEyhgcrQ0AVmAIM9MLm/UonwjGMlduzYJYXbMwRKSBVFmrZsRR2/OgeG4cnBoyvwp2CB6qIJMUGWjeV3v/udOdEsABL92lEDBuTQKfbzFl2hWoN8FRETxHWfU4exRTyRpnFDw+1QTzkWaXC+fr0uFVOSOe9X7yYpMTgkjqpxgsM9/sE//JBgqhYozG/x0D4lmCRo2jZXNjgvKC1EwNlU4vFf/vKX9+87bGjq/7F/WFmW3PpCaVSVbCcwmBqPWFSIkOS+9e472Fg9FWFiroiCNFGGtApNlCANZTG8HCepUrCqC3hQJQb/i71SaKyyMIuppWD3upc17To5LgTIzUPDI0OQZeSSdwkkuCEO3LyDKLVMJJ6EaKSKXuMbXfoK3ZSjC2PD5W66AFbEpglnr7hGVGrCK6QLveELDHhagNxXMgDXOvIwRYCxtICxdEfaQeICa2qHstaskKeHHbuFOVgq/BIVwhi4lgUE+kVSDQS0WsM3uhbfVyIq7FlzLPP0rBRteCc/wKYyrKz5BQA+4l7uCDBQiJI1wi1l5+JihS8EgRZW1DmNNUAYgBwt2HmWKbq8vLLuVPmaCpLGqgOh9QEHZ0r7NpyAXhp5fVULyOP86onxUe92POiGurhICN/hAGuL/5htBRtx6/GK4C3HLZUWFfJzxseG1N42C/ISursG9SLqDOFZacn9k2O1dcF8ZFIP9vfs27untppbWGoJ9e2333YMTWJBfqa6QGtLF859gm+OHj5AWSg+kJ6WXFCY39vdtbC8RP7N3B9+8BE8cI0wgCmTHsf6WPzBg5DnxxCWaqb8tqQXLK7CFO8LnnEknUJ7QpWoOVZTtUAKAeli9CAciiMofFoPyQ55bArplvNTnRFToERgRhbfXbKN1UksLh4TiH79ljiWeDObBgUVSoJGrrn7hgZ1zDXMg0myc0NZa+mA2CM3P08+FvBE0P3FLfjNX/ikAixNMrOUnpQSNjk9K3/dnjkr1Js2b2V07tqzj9+vyK4tqu4n5OTW1jfYxOxMr8CxU7O48b/yTCY8mPCIKE/M+iA1jY5KwHG6JmadGfRgy+atREXGKYXCQEepvv5AtX37D5q0FBMULr185RqcM9NFx89fvGzpVn6n1BF1m0ZGx7/81a/ZEds/OIyZL1y68vjxY469a3+gSlA4wl2usN6ZR55/7tkXHna0KxUnAnrxwmUuH0SJ1kjkQJHE5DSLS5CJggOpw2npmdidne2vVTI5iNdv3NrStFlhZ2sCNXUNWWlJ127ctpaSmJpgW/bKaqy0RStUWltYXJ2Ymt6eX8DfIOaiAkQMKSmswMZxwStDJi6KfUj7Dx5C9HvtDz4+/Qm0//wXv8gvLFJyKFKMeUlGJqqxZAgRJlGOhldDIUCXBrk6/+yf/bHJRkS2tKT6F7/6HUcL41k6oH5sxmCgQOn1GzcUnxa/UXpl146w6CknPje/0LISBrYygJ2oRTxAP/royFf9Ymnry4AHoUWP1tb+X/ziZ35FoKgG80xdXb3cSxMtAwu5jx9/PDIBBwk9ffpjPInBGBOUPkishNBGNhKwLUiQccGGm9DCxIEub9EAgnO6hrovfvGL5jDCFVFoYXc1gLXZ2tqCzci7v2wIYJAvM4dkWfONhwkaJoQoN01COrUCHLzZjCyYrK2px5ay9QycEGlkdrbfGIHk4RdffIn1qSawJSZRJapPcR5B8bNnzhs1wNpa768sv8l/1umunbvNFlWVNbJuXqqo7Ozo+ODDkwLJ+OfytetV1dVXrt/Aw+cvXV5blxE7lR1ZHDPnyeoeHR9RKiQpNcnmOXrSQaR49ezZT/fs2z04MirsWldX29kTjuO1oKfKkAUfhw0NDoxmZxXIMVNwPTF54N/9L//ru2+/DfmPP37c+QxpGRnqQSEHgP/+Rz+2aeTP/rt/zc4w+y4szVZWbVBgRORYIsSpU5+03Loj0mEDD4VZW1bV2dELJ2hhXDBmT++rr75Ka5nUTa60PUpBEVMbktOzqLuH6elpe/fvo6XlqOzet5e5MOJXSYlJiZYW/X3Y2bGpcSPSP/fcc/abKgPGByOP0flL2Sh6niaMKY0bHhqVlbu6ss5Csvbyxpu/feLpJ6TpGwvSeF1sBXsQHM8gomkbY5id7bbkmOEolocLE/mbb76JlzwQJa4WsIFfmenobjibNwsJhTV5Koitb73IyTk1tVuMsagobPvWvjoEDIJr166wP7AiKgdLIBJ2ZctixZ///OdsWcBTmxrHb97So2ZpQozEhtN+WVm+ecE1Lj179jz9b57lqyPKwYPVJhQc5UXPMyUhX8skiBbyLocNSrWMn7XsYbaBZw7tP9Db12XNAsMYnVpApiryqwvLsAX5+VoAsypnGsfks4tLZy9c5bMp6y7t4dRHJymQ5RUxPsuHucGz2rFTL088cYKhv33bFp0OjQwQc6lEUMeK2LChUWkusAH7Jz/5mWYp88cff1Ig3IRFRnq6ukELZiWnmT/oZdrSGtkXyrl5uxlH2aXDTHQIEj51BDUT0CRFHaEpzMMh1Lkmthjm2JNP3r56FfNTdBoxMRm7n0j3yZMn3bQWwZlEFJ1Gd8IImmsH3YFU07Clt2+IENXW1Z0+dVJCOdpRbhTa/MlpJlDjhjrDQYvCkmKTBfNJUnvYNBkTnEAAPOrvo1oJjkg/F9TAaUWSS41UVFWLEeio7Z6MtTmnIZpr/EohC/ynpSSv52ab7/Jycg8dPHj23MfkyzZckDudNzKK4My3tLRGzQ9ipU1OpoiDsZjZ8U9dXSPTHH2hGsXRAkvApwtfIR8qkNtN5DMKlVAKlTZKSSG8NB/j6pNPz7/++utWYi0FDA2OqBILLajASqPH7IuzNOSjBdFVf6M6X+O//e1vMYmm8DyRoY1R2RGrGEm6zoWLlylzDLapcYNzzX/285/YZqBeKmoqAgbJb7z1tgQK0wQRAxiAtQYqfcEqg54OAYmPuL5givXV7unxwZ6OQjv2shwjFE5DwxVbNm82QBl/LJaU5FRJR1jddxWukHt0qPd+WwsLc3JmSqebm5qcGICfC3IKVP/jYkVOv13FXI8dPYZJTL4kGkEdnAoA1qqsVHimADUiSgbP/9v/9r/iQCx09OiR2NKiXP5BsAwi6wCGASOGFGypSAogTAHIMx4w89nTA2g0Nkiy6kMgCQZNZILxuic9gADR6d9ORB940Zr7nqdVsYXRYm7Pw537xFKbriFNy3hOp7r2U5QjaR/coB2/sm6jPQIV1IZHdA0pOWyZXVFrwoyrZUosbApeWvCYfFzOFgVk1yO+jw7KEZMWVZVikFzDp5fG4D7IpQDpFACmK/53GMjSPBTJ/AnNCopGjHiQ6ABa0DgKqrctEepOviam1wjekkQHMxpBDyrDW0YakaLlsvLqzh5H2LB4bG8aIhvC8wYSF7vuYQezIzks2VrqZGUoslh55fL5DXXV2C6YEeF07g4rMY6/keZkHdx6NKNHDgaFfvTwsbKifJt/IMHO1NyCfIsG1ri5KIJwiqZZRufMKC9I+OEQJnUqnIAKtbX1/UODti9D+5Ur18DsxA2jbmzYBC3SUu1qnxifXFxaSIhXWnT10KEjljSEKLBXVMaizIPtYIx4U23B54mJQQUM4wKLYxzYQ2K4Mmu6IBi21EAg/aUdjWSmheC6d5HFw+54FyubRcCG3H51x8McFdZJTXWDpTGYVwPBJAVm05C+FGo0ozs20tImYqko73XRRJlM4ot2fbbdu7d/3z4beEwtUyKldiApJSGLTnArK+vV116zD/PK1at8eDOrBjWOCa0sqY1j8sADELgU9jOFRTB0l3xMd167cTc1PazMiruIM8Gt1MCU1FTnhZRXVW5q2BRdf8APzc130TpIvpk/kkoLeKXc9GKYIdh2P0Tm3Pzwgw+47+DHAzQpS9FxMCKywwODdoHY0nD52tUnTzzuRGQnD1hRks3GoVIGlLVtrdBBj9evXnNMjoVsqA42REUFeyIi4CGNXnBc3Fcgc/OmRo5i2927oIrqSrTDKuQIB8rmRBTGt/FSi3fu3t23Z5clUUFoCgiWKDjA0026YPQbOw5xVoAp0NRr2bR3oNduTpVG6QQhCmyGM7EQfgAGJWDgpN4KO3vCSJVqkQUt0xFs+M36DOXe2tIsmPTgQbt1HsvW/LqeIBRheiNW12+azmdxILECPK1HvyOWrX70O+Y0y7oPqywk8puVE07mZm1HZD/f0GxuAV5TU4hBYjxTwuXLoZYfYglMXr56mdwZLJ0GCYhCiPzVuHwkdti/+lf/yvGx6OtYAIU41Ocx2eBVMzGJRlBmn5AqrMISFHnRBT0JS0NDDmbuxGPwDGP79u1DI8DAj3ejEcFgUofCJnnMNcORMWywgPRRpBX+xcza2x8oG+dJ+zrocFF8rmYwmOZsbln61n/+TzQAmBlntNyd23cxKjGnZj3Ghwctv0UcWqXwDSFdat1PBstQMxbsp1+YwRXoRVR1RABNhAaSlZ22adPGnq4e86vzudUssSXXnFRZXWGvnJJCV65ffOmzL9vO7lQmhCgtrlClZ+fO3ac+/nRiTOXc2K1bdvKKqyuqdcpUVZaquqrCjCT8duTIse99/+8TkpP+9E//m6FRVktSgmSxmLWHnfdt/RI0dTixegYqNcCz8oVpyVl5WWUL89Z+F1G55e49/O8wUNnnvR1hMhangF7Z1+A3iTggL7+owkZDdDEcO+/hx21Dvn3jpoiG6qL4EGD321qlt5BK3rV4FLEVgebZO111+9ZtjC1h47KKcgu0t1UN3tBABnfv3MU1Gh4fEhGUyHv92o0IR23He/yTRz19YIZ5/OCO6ZigUSNsI+agC5BgWoOMzjKuiTDSGBfewE6oQMRAdfHixR3bd/3kpz8iROSiq6v7ueeeZSOaKZibWBT8EsZkaf/Zn/9rwXWcg4XQlKWLmtCiKV9hBkhIjDkxDAYgR+IReBvzoB2Z0jXvlDcLPCoC0rwSBUmMBoOpwuwjDYy8eIyMA9tjXsQt+JzEkQjjcvxMXl5uZ5fS6q2UD55XTsC7fAwNig+bAhgbKCgjnOowIidv/urNdyqra7/yla/hEJOIlEWKBbTC/nSyjUy6qK6u1A4nlhHy5ttvWPnE55oCAGi1bzjUBSVmRiba8Ma4Fz4DA8x7VwER9GX4KmNA9FBHpB/yRYuRSVzOY/Jk+L3Xr16W0mkZBwxQh6CYBz6NEZJdw4Ph++sZEsRl4i7SIeIswIBkGgBIAhN0l8gOHNKQbAT67bkXXh4YVXl7QRUHgZ7Ab91dO7ZtJxoFeTn3Wttwfkh+ttlueclmTKVj09PsyJINMawQ81D/gJU6wJ85e5Z2hQFW+yuvveoOzRlUwZ27quiIcC8smmjabt+8Biruq4nDGQxKwMknxADyo+MTFOmaUBtQ9hD4OQAhEbSjW60OcfTt23ciND45efoUHWsIhBQXYS31ghnxyAfh+qVGLLQaNWS6QwuhGgBwF6JfvXR5YXZGBvzxY8dEm5x+aNEYPOYI0VEIab3XXmQzcrQ6/Iwzf0aV6paS7Sd0RCM/YbCIdxpWZvAGxhNYxNukDBjbtjThKCKDgpxeOp+fDBtIcOzE8ZB2L7iookpMzKefnpEHMzE2JDmQy0dqvIKgjAccYn7H2KLMZMS4kAw2pLEV5mS0tYaMaOpdkjkmYUd73mERugi2Ym5B3+Cg4UOCjVijw70qGgMSrpS6xhimPPmZlhSoX1VGwGankAiaKBIsERa6mly7j80skkMjylpCsTyFOc0gKAseVoY9M8GP911/hmT8PiTESAi860gTYTtR9DGNQqX77vh4BVg+XqFEaCJqyFcPR1/EwVwOlPOWLtz0gDHoHhwY2sOkQrNkz4Vn3McZ//+Hvesnr2vKTy4IibfoSq35OAxZIZ604kKD5P/BNeEMuj87x4qJkTG9CAC7f87C1bxT5OaE3vWxGGe70kL8gtJgcY6JFXR06Kxjv4yCmQ4nqk+rfatTBX1iwjZgq4sIL0s1Bj1WlK2InFvsq82dcAJsASWVy6VKK+pidXjaqQwDfWZc5aWYaEoaw6rHuEimJXsru5Y6c3KLVCtaUOxzbVV9GEIMmXzr4F5nZsDMwtz05FrITUpxhuXCTMwqE3NtZmaMOBHpwoJso+NSz0wOp6cUPnZ4X2ZWRlZq4vHD+wX+3/z9r08cPRzSfljdKQnbtm4SCyf8JtGBvv6mjRvxOlrAJyGJmoCWxJS5kGpSGlLhk50pR3QtN4tNUF5yHI3XjAhLSqcj0/DggM09eQVF4dDcikr31fEWw1YcmjBnZmcHs8D8FhdnyW1tZYVosdKIlrOfL11522SmWjMXuawy1HaE5Na2Nv63MzhEAZ2abH3fzZr6sGgLAFULMPfkzHQa7zo7CwAcG6OwYCx9jhcnAgrTyg1ZuFQjQI6gMBvtUGGRsqKUI15RGTJzKquq4FYhJrEiZpkwPABy8wqGnDA8PMJQHuofnO/qhoSmrdusLLXKa7nbIpkPkAL21JpwGvazC8q6UAHDOpRqXrT6pPGB9vth1um1tlESq6r92Dh2EnTv7Orxtv2XSytjj/oGx2zJnXWWkM2sS4qIxMYltbV3pPWFyIFJRXRSfTbrW/QCrP5ff/N9xzoSYB05m315RT3PpKrqegnZ4dCE+aXC1LSqmjqkMXUIjSsA4iwYCqu9s0uCMmSmpGXIe2P6uBA9tf12Y1OYeucWllQzfPTpGcOZDAlF2ZY+Dh45IndA8uiNmy0i2SlZecNT04mOipx4aEkNLe6E8ppZ6ntevHy1riaUYbVQSQqI3vLigh75RTAcRHRtDbkbNzZR5fkFj/DCpUtX7MKpiKXxp3JyC+kySpXlgRUjR5XZwRFcpogykdo7ZGcCtcivo87q6zbopaW1bWx8dJ9tJfsPsp+kltE/eFtOJJF3OofAFfUC23QiaC0X2IRKe0CmGQvDUFS2AOIoL7JimfI0DJky5T/11BOUCcwwOwDv0BnahhZyE4OBh1NVs6sOTX/0o5/Yn6l9uyz0Jc+IGy8Oqus33niLl8KR/sEPfkhVcjWNGrseO/YYw12nph+MLZSrX7pe14jLKDc64JEdqsz0w/R0LbeENQ8SygFIU5Mz3qLu4M2vqEyILMtEK3SRJtropRc/Ax5GkmCFJWM1xT1JkLWJ4e0lsDcbraUuSbgWtr95+/be/fuhXe30xqZNoiACz8Nj43i+vnGj5NqNjU2EUuhvcGSYpPsnfp+TX+AnToJp2yZh8+jQ6JhZsNzxTwWFSHOv9Y6wutPuWttawlGpnR2Gv3fvbuM1PW/ftaOot8s2G+f7RCaC1fvtHZIey0qrqU0LX3YDW9DH1EwKS0bra/aXP5TlJc7C4MMn/Kvbd5tFqb/w5dfzC3M/OvXB40+coKWp+vjYpPSUkDR15NBj5aVlnQ8f/ubXvz+w96jqn0y0oMciePZA840bcIiCySkhTQ510JQvasuK7LnbN2+FCTEtLIH66fy161FzoTG+UX0PdR47uro5+RLz1KeSiVFTv8ERivarmAgaNm2053WMasrO4Zwjt4ArXrIZie1iVUT9nNj42Pr6DQxKZw+99fa7GODW7RZ2P5MibKzv633QYVfl+lvvvMlRVCyLCcJNFds2BCuWOASrsE399L3vfY8dA3jIlD3CVMKxDXV1N69f5RgN2yezccNQUtJjRw/TordvXmf2Ybkb165sbKj9k3/xz6k+rEj5sJYYKHQ1fhNbwc+aJeMYGNoBhpdINwtbtVYXFBRYWPx0FxsLcZEmem04mBBIJgKtXbpyccPGxvlJsZ4sMdF77fcxJ8HEQtxOa3ccRTlzYbZ1uurqGsKZFMtKQwGczrEO1HkUOfiM9Uy01bQpKy4JF5GVpa7egdy8Ehbx5NSMHTJ5BYWWZTCM5Wu6RQvIpy9VU8iaYfpwqjGADB2agRWKJfoks3d1E3YDIa0cJF9Pn/5EhjHXwE1kEkpHTce0ObC2PNTfW+N1GKBp2tiFVXiJD9o7mBHklHmqd5CLYYsysIxpwqg3BSFIgLuoTX/Zu/AmdfHmrevapDYxISHlHpw7d+Zzn/scIEmuJ0EuN0Eu2e59R3JyYtSmE8t77+13HMp2+eIlARG8GvyKqQmbvKN87mwBFWzZ9DSZ3qtrairKyyX7my5VX1A+H428cuX6NRcorl/nrQBbjb6VpZkNDbW7du9gaUQLLm3ZvLOkOE9aHSOSis3OySgvLQwnh6lJKu8ulEox1wQpM3ZOMucQR3GtBcvgUHlf6GKI040YDAmMF5ye5xpBC2bTNWUFezIqI+NNwdJW4Sjtxk2brbnxZ5AptiDWuXJITAARC3OaJuBTI1ZSJyZHrDz4qkHtEz1ijtloFRIEsQQNXfjVnvHAYGTNKqpbbt+6AeG2fNh8eOjQgb1PPvn/+OM/efX11+4/eCAedPTY8eGhgYmxvKvXbtxv72Q+wZtjkTA8q8bUZkTiufMz04+6Om0UZGxs2bR3aW62tqrW9GcidkCHZ1SO4hGZauWDoL5TXMig7Xm8C6ElR88JVkImeclMycQjEpmscjjMlq+F85lzTqSGSfEGIU6mK0tMxkpaehrksOug0bj+h//hv//lL39tQ4uvWqOua2rqFJUJDoCfyRsZJt4+yEZIoAA3e9oDhuTCM66tHaEyuOmdKM1AFqUiIuEbOHUH9umFoAv6Q9jAA+5oHO9Ge8QlrGFduw9QMPnqMW6CO+jkjvvIpneqRCPuAykSO6wEDwgj221H+PrWpMIQklKxizoM8NLf1+vFaCIBC16tZZwKJGrFR19aAFHQMsq5xMaaubXvICj37U9yLahKzy7OBkj0G4GB5T1jg60BZmdlQlRU8c1MTaC9sfjVGPULbEIOZhTlcOs37CKOfLziq598bGYqLCptb2+1ac8etdycDMF/wykqyJVovpqsLuiqyl1OCSsQuSqVsJtWlHds06YNJrCSgmzx6ZyiHFHerU11BXkO0us8cviwLS/0OFc+JzP5y6+/qgQNB8Do3n3nLRDyA7C0riPrmVgoJDjRWSAx40rF5Hrs3L6DcG7btp257NfNW7dHKWVeJ2DEGCPgEMcSGqYn69fr2WrWuCsr0kWFDZzuIMbGztNAca+jCO1GOMUn2Fh69AobyDOUDvPGXhmzjnA3zRWpUpIPkwFvsfHkwSxlDQFRPBztFC5pFs3qDmmM1xQo2UOFAXygwlZv3yNPkmp2uTbPnPlECMo0Lx0FJEQUEmJiBlnPYb9BzPrzL7xAGJSlFyyvqKmWZpCXFo45edjRQRrdsYQapR1aB57MyVbzRSyTq1hSVGy89oZgjMH+Pr3gQ4hyvPzgyHT/AJWkbRtLYkIGzvySGd0hKbJuOiIFRkE7OTvPupqaiwQFZudX1yfgzcwOCQsra7KhsFZrWzvziPgQseKyyjGF35zZPgNbw2L8CyvrlsKdAp2aktm4aeul8xc4S84mVoI/JzMrJUMlWJviMrt62lBHlmqhCGBxyb377VKMBodG4QoV+MgTM/NDQ8PV9Y1rcYnr8Un9I7KoY5bX4lraHtpW70SCekePNFT09/bYOUM0MIDSlOpgynK5dfO6zQnQaryYbceunYxIUmayQXq0gxa6z0j96hlmvZUrG904DOJJ4qZIGSpYqdGenEK9iJveU99mZkY7RQXFNPut5htPPvnklsIiys6UNjzsECK1kOdGR8fqc2vmlqd50ib6BUfILS8Le+/Ymcs7MlQfnE9rmfzMyowV8it2jouE+uAEq9tN+/Hpk/gzkg9g+2k275daQwWFCHEaAKhOawIGbuYmBbv37jJFaBO5cSONhzpeFzKkvrgWGMNgDV/7aPetb32LoaNZvXiL9WOaNwNpkL3FOEBoooG9LRHQVIx4tpdFDCvmdIwJAAykVayIf8KUpzMpTs/YUW9cp0594pkvfvHL5EUyCSQwFFhLubl5ANALvrKQCDZSYGr5ze9/5SaW1i9SknGjMAQhALRgsEKUjDuoMxCSde7Mp4D0AIzJhte+eRRZgUHW/NVXIF+kHD74t2zZHEyxslyz+IvPvegtKkhoGUodGGKxa8u2HXdbbpVVlMG2rJix0VlZ7pMTs4lYICnt0KFjTvg1fDlscHvz5m3c5avljk0bGyDW2u9rn39NaKa9o/3MJ2dTEtMW5xYsJPY9epSblctzWF8ZetjeuTBtC8pAblaBShAOjvcX7XZs301gu7pCfR5dMyxk0CENqwtpuIhlFZXWHBw4XV9bp4Y3I8bQgEH8DRne8IbYhhKrghGGbEd789271gGqamuU92l3OrhcfFsP8/JgKUHF9rTUw0eOmFBjYmMlSiXGJtldbQcOG8gCi8Qhy9FWU03q/GGY50NSoTDG9rKj1/l+8oZt4MZI8AAAJENWbAaflDPWiphZRcQZeyuJ4wQDC2Im0udfeFb6vuXQb3zza6xJK0WvvfYKNhCRffbZp1mcrBBrdyxUL6JvlAnpSfMsCx5ZSQq3wa84AZ/oC8XtAMZ1bnqeMtcvVhfMxpAYDAOAk20E2xhPWQgc4uLmtevYXqhSU3iMGPJtYL41bMgLCR7awZNauHZdUdQaq6amML63XBeRFAvyVlqsjK2nZ6IdWRDUZ9Khi1DRtNOOmu/wHKSjMA2FinQKQsDYFq6X2ZkpGMbS7Eu7LHjR16WxhapZhWr4eAtaxH3lVV67esNjgPfM5qatQGp/2K2bvKLiqOdw7epVoyaJ1s0wA/ZAprycHLQzNdy738rkNV741DsFSK4hxOh0QRehIA6EMRBSCP5G7mSo8KtfKgsfIrHp8ktf+pLGvRXyx4QIUzNw4PsfnVxaDUYwBzI7M+PQ4YP6sm3UxEqKI2ZoqNiDM+09XY2Nu3HrthFhNhWWefKiYJeuXPYKdkXfPfv3UQL329spXuu0kYlVGahgt8zNTGPg9IxkRURg6fr1m3m5/Ra4zblW2nNyMhxxw7cn6SY4cAqosUPgjbxnZgX2MDRIwEg0hvS8U6dO7t6z68UXX3zrrXeoGvwMSDahTjESHkYmlDVGPABgo/B6y702ux8ZA8gq5AdaYxsYGvSAvdc459CBAwxWZbsBVpiXrw7Yg4d2t4eDzPwqHIPZEMI8Thswmo3aT813WoiPa7QgTT47tm1BiChXu7D472z7n/znb+3Zu0sLTOcAz4xc6w0DqSlilKaYTvkjKyE3BJNEc9joWjBDL7YU2s3JrlCLpaKpCYFOnjptPy6QwEYE8B6C6igxOQi1zB/bPwaGxNAGTC44AavokRmDNL2SGfr6lMHwOiqL6TS3tMGY+QLLWQm/cfMqBmvatIUCRzsnD6gM++FH7z/sCKl3jj1mm9u6wy7SbIL/RZZjaCpLihHHDc3XVnAMNEWgp6xCKQBBCLyLHmYaQwKKr1QA+HwFN/eaXCFw1E6CRzcZT3rFsmBCZhADywVMuUYMz8M7rLmpTav62vSr571F0Xje4H11U1PEzPPA8JU684qbINSU0LKHxX1dR/T4vHJA3GpkEOxn7GJGpTFFXCwa8IuMQIhFPM/ojAWzqjaGq2askv9XQbV4YeoNRWNWVxlAzHQ16uZmZ1KSAxJUCArsHiM2GZwiUJmOYdLDOo22id9cG51IGFDdtA6LrvJK7S9OToljfvF6JH04tZaX45gBddU0OjTYl5OVWV/f6IgZNndFuUTkGluX12NWFhdmKyuLC/My11dXbEsqKcwJC3ubGuanx2OW5oT/IefqxbNi832TEwzfIvmSuWH/dEpqOG2Ow01DgZ/6o18YNFbTuE9GgSckBwcbvW8QU8plQkTml/UjE8DlK1cwjKLsDsswHFGxpqYt8EX/I7LpwQCd2OoV46W/7F7HEoQfZth40m9inU7wX8/8c9Le6VOfSnpjSVDuknBQEpDWppAbKe1OHhxwIOW42VbJUWR1bT1TEJ1mlKypC+UyeNtsI3gOPJBJ188KqOJyAUh7nT1JRZpfOa5EV1RM2hyJxZ8COfTak888a0FmwW4RuSKRYw7HpybrNzQCoyi/ICsvX7Kd6CbhEPBjpkR5WEcM05aWZsRFPEfYYAScyagSmeBmcoWXlqcedg3kF5aK23qrvDJ/aHhYREotlqHhMdsTE5LSc/OTOrsfKGqOgPDW1XUPN+M4QoQJ8X95RZ2yGPCp+iwMs0sE11ZW44NuWZ6yyMBjJA3OLrGypEqLuM72HTsOHztGQhS5zcsv4N/eb39Aug8eOiSliMcTjkvNL+CBSOLH3IN9oVqFWpzh7HBxi6zcj0+fvdceks4XWP8xSSNTFqKmnWu4vBY/NDq5uNxy49pVhC4pDMkS5lEmKdGgy8rtaIxZk6ONFmxlHMUqklqq6jyHRbYVBUrjF5eGtW/rvxiGMnKewoH9+xPjYsVN5b/Pzc+iiJJTVKr1W46N6tqFOUX5ufkvPP9SnlJ3j3qHIyWVLDCTVhyFnzMypcD1YRv2kPLeTrexR2LT5m1i57gaX1HxVmYIu2eCSKelHT58GAC4HTAWSYl+anqKrVCYh1aEP2oQe4u1S1djgljY9Uo0m4vxbe2Cs2etRtSQHjKXYMiIHZBoBxk34N1332PZdHR0urlpU5MZkQLQL6GDHIaRSY7idmHGYjoElRIJEIAKwLBnaMK8Ag4NDRt0oTQAb1p1CuVnmLlLS6vSRRIS7JtUeSykqRw9euz+/RD191WGKCMAU4kUMtfIILanoATk/DU/GWAIwjkxPTMb0szB9LCpEQwQxcTZsnkbTcJB5r5yGR61P6iva5D3v7oWk5GZrcY5COvqG8yU8Gnhzj/70giv5VO1OFYcuhKnbs/ylWuXrb+1tbfBz5Yt2ySYsTm0bAWpu6+nsqK2p7uPsZ5fWHLrxpkdO/Y4jzQhMe2VV74wNTn7//n//h//5J/8kWKxtrLUNzY4Jqiupvro0YPylySDbd1z8NS776ovzPytq6kbGRtJiAsloZsatxqFsTfUb1bIr6ujT1Lf7t377DWqqwuqgLo2YfmLKBCTmbEA4Xag0VeW0dGIxqR4RY22b91i8VZKpNizZyxSQY4jKfRiUQIGskXt8nKp2f1HjgyrAjQ9o25bc2vbpoZGmoTwMhHouoHhESsYy2vr+w4d6n3UAwY2Lb1kvohGJUxzJELMnirbv/+gXE26ixJITUtsbr61efPGqBcHNhjGM+CnWmHe9G+wzA6zHiLSbJzJMJvlhvxeA4F2Xt/TTz/pmqhKHP1v/9s/tUfItHL6k4+1kJfnkFHbtu0/CYUoNIhnDBBH+avZaASX7eUrAMxh/CXygn/8dSgpIxj8+BmfmBQwDE+VZqYHyIt/FDh4bNERdty+a6dYD6nEb45TxfykklDwCogA90iqvVGo28Hkgh9xa5akA58VJRZQMFUV20Gh3utEcPhtPJUwTXOZBTjDuUUhOX7z7l1zY+OyjECVkp7Gao9OQ5CmO7LsAPjDR49gY3jiQni9o6MLwGJJtK7EObSODCREu8wx7JxPzp6RsvjUU09DMg8N6W0AcFD0tPOFIof1Hj64X+lj5ZWY4yrpeRFygmjMzxsd7FGzUBSN+oMYSKDzLv2Dpiw8y2LdzqRXRLiynPIx2zLG7LuFAfsNJOKWlfX+3d/9nU0L8uKsBEp1oK7a77UdO3LYYe1cBVqOHh6U2JQUj0aCUGCm11mrdnZlR8qM6u5W852Ork76FufYuIoiZ8+dA+qho0esX1lV6+514lgOk10SDZtr67Ym6b7K0psB6cDe7v6Oh+3K8p47/8mxI4dsiGGkGAhEReQISkdgKWqekXTWow3EjD0TGZ6EOuoFeNiYNnbhSRTHDxSjPTm+/tVf/RXm4QNElRihc62gEEVg+41DJGkYqolzKApgI4EpgHtsB6p5WS3UtaVl26ARemkpVMXAe1gXSIgL7fgEwsGA3egW/VK5Hh4kpOvqC0/IKxOnoMNnpiZ5CvLl5jrnOeQXL13BQg87u2ReqQaGfZ586hnJ5M3Nd3CyzXLDY/10xcYN9YGsYauGyp+5YyOhPs3Vi+eqKuzItJV8uryknAMFMDhRE/yjk6doYAwgD0WGj5lXEolzG05++JEdLuqIWL1qj1SmURPepKDguMKJTvsWCmHNyjR51N1ZW1vz2c+9HJbEh4fxMxJAY1//NN3olf2hhMCQeCV1RWzhWeApAReCwHN4NEoeDIEkIEMq2ImiBgk9Qxn5QJ/5TItQ5lcXHobZCJlj/YTLNasdv/K2fTwA3ejnJ2PTkbdQ11/NeszHY9h3bW1V+1jEVw/ACLJ5BsfAuyFphCxBrges5hPf9HRJqOmemeeJyUdaXiVUVBhZWlBbYTaEUaMDMfMtzs8qAKpfNYzCAmqom2m+XxF9VJJcL97lyZMEiyzq4AIVQ7P2qFej0J0SorgcHrQp1cfzRgpXhIopplCnV+g+oyD/KEEr6c6I4IfmMlLzTXTUuq6qrbIaUVGh7PSgOG5isoystLUVCejZDfUVOE9+hcFiWFo4IzXOAoqjlJxquTCbLbmWT1JZVujsM+5NQmzm1SuXsjLS5W2PDPaWl+SvLS2UlBaDEt5s9bYQL+JIRwrPBF6PlGcFlc/cbMLUpKpw/GeLmEPWmNCLr28IfoVw1EY7KgzMTFtaRthGtQqHZ/H3teY+PCAZtc6m4TWhJkEzh4GcyquqroSHwvzIlBlOSA1boGh8OTwUlrUzPCOlg5lI1brjV3AWF4Q8bD+5CQx/XXtXmxYooNrcBpmAwVesnIHBYeiNWjZY0fNgg0BBETBgbDMTpkJ6hk1yWvrLn/u8xUTGYn5JUWlV5W9/+xunhsqP59mJd5rOZetCsmC21XxE5CyhN+NPhNWQBdqsUSjHZmuJmpU2XzqK2Bk0vY8kWgya9piM2bljiK6WyOjoZSF+RoC6Hw7+oEF8s612ZHRSMd/5xRVMVVJWyRdnnxoUTMoUcp8yor/s6k7PzMnICjGkh509Egyc+mwdK2xQWY+L0dzcohTbmZkFjltxYYlqLHNkWrHT1Rg+2uDQ2P0HD+kF49URfwGiRsYm1MmR66x0RmY2xyrJeUmmwLutLVLnhkZVGVvilfUPhmRKOdDUq3GpdsoFpbXLZPgV5hNM8R65l+TR9CYJTdFbqJ5bmEcpeERHWxHMaoTCwQ4WPbEKaZKwlJ2W8air22B3bN2GUgu9nWgq/ceLPV2dzmzCfhXbdxcVTJJobY5PObVnjMEkiCYqPDDYKzql1KxD7/xqqmDDKWzHrzMHs88e3LvvqA2yqR0tY5IIM4eURWrRTT/JB8DbpiKYtJ10+45txB/fMkpQHBXU/vIkToMKD3988rRFA/b3yy//swcd7dJRNGtENBXE6sU1ibOe4CssgRy7Cm4Fwj186CZ1YR7ylkmLiEWCbeE4bb/SNi7IkfAYVOsXmYgAYQQJBUXFkU1JwqSMMpQroV8kA/DFi5esksvcE9N66aWXRHy9qzXqXst6BJsnsa5SoWpxWC/etn2rBxxCCEhWIzVOvqKj9lW4CHi0GXiE2cxMwCM+vDjqNzpqbSIf0UZ6vbgmuXBF+mLCarMZbj6htpYIOO8ZHkaHbfoyLPEOmrYAY/Crbf1v2tqEdW2rGR+b2rfvwPZ9B1uv3eJfNTZuZlPyc4Atr+l+e4tYBgRSERaIGCJT4yEI/fQTT9OB129dHxoY5olQBXClrGTM6vr0+Byhzk7LEzyRrIXWeAE8rEP4p6aM3QBRB0/iB3Sn34KHPzudJosoLVT9d4TJ4QMHVac1m4nYyS00xqg+f+HFl0MW3vyCHL/yshIng1pRlPHPurLEYUVRIQHAZCero2XuWXnn7bc8L0l142YZWZ3btmyRFsXJ5FrAnjUHqOMzCy6I/dNGObkZ585/ev3GqJ33G+qbIC3YJRHTAQxgC+HqoiKjCNPf6ip2YrgDEhOmJSUaERILlnH5gEFrWXC+cfOaJ+2THhkJVaTQtL39vgiCAhjcD9IBw8AgU9QmrsBjuNF9FMTAWFE7HiCzUeHyPGbDkH7lLciscN+7nvciltAdMDKzc1WN9CIGwGbIRLviZxKHkXTkFX6d1jAqcUYQnl7QOT6R81/dBK2S1xKQyHLwSTKyERFDJmdksc+s7yMrKvNwUZl557ELZ88xQGXRmJElsRjO0MAgDdC0id+SxrDGqYA0y9PhbFxUFudmAn788Wm0ILLk3QkzlIn6DWqLyAChkDmlng82ycioQhrQrhG9G531eZ4GUxUhoAKitMbi5OcLqCGW4UenS1oRcohnMD3HR+RvSD6wbo8PzV+a8qshe5HhgeKf/ezn0chytx2d3Bjb0tSIxAYW2TyGB6yRGjicjI7e1IhIU0dnZ1XNBoshxE2dLnMYWxYRX3vqdVMnKx9pmP7gRwvRmcN5OaqxYdGhXhl0B+zbWlu3dMa9L+K4WrM1HAMHG8bzF+EUseNy8IWobhm8bmoTVGQ9NyffSH/xi19ADtJzO4uKC2Xd7Nu730DoaqqMCGuKljNAMCjLawiaRXq7dZUkhiXDh0DYc3oudlARmJdSWRZ2dMgc07jVNriCW6yIIjhGCK+uoc67hvbBBx+IoEW1+uOPPwlCH6QRo/GALVuAZE/jBPqOCEsaxIdGIT/Hr2LtZ05/8sQzz3Z09RSUrCQlBxdCnu345HhW1rr4TlWVonzjZNyO07s24C3aJhFbWR68zZGBflOlIjC7d+wW/uBnSoLCsZ7BisTKwOEqunTgCDPmk6TrltbbYqwESuQmKnSUXlIqdq02TFwNIbQ0OpIdom1o8lodN8ndsnJIrjWuF+YKxrDb00TG3KetpfWKJcFkyO+nSoyZPNM+UOBj2LAfbdE1XLuJrsym6qoaHADXgQBUeyTj3/zkju61hma6hBq/esv84dqM6HW0RxjgelJ3HtAvFGjEV48RidLSUM3KWwbsFfcjM1AI2HhS44ZErwEPuzDoQSnfjhLRF23leepkVFmfkSENi9zExQe/RVOu9Ota+3wA4VObfYHtRfkeUij8Cq0ayZTPn5gki9xTcTHJlmyWF5fkI3rY6xCiteiIJBeB2VQREsMT4gvyQuYZfAJPs67BDHIXJksDFIyEVY34FdIsKy+EIOPQ5k31sevhrNOwYpaRZk9GRnqq07LQLC5mnc7KJx+5OdaE9F5jsbIgD9KcmukA100b6211OvnRB47mTUlOOPGYSp03Pzl90sJuU9Mmi3HkxB5aVNWT9FlVR6EU9vAlT0hqPiqAGW6NUXS2t6fP6mdqSoyQMBsL6/CvTFSC7ArrEjZziajM3MKsCgARhIRdLC7Y28YFM1QeRsCgdAtmQHc4F1glhH1dwR6yyQ+274TVtJr0rGyqnBxiHvMrrsXfKuzSfdOTUximsKCA9+/CM5GdmqEqMDxwZmh5YyE8eoRnggQ26+z8LEXEb35yE5bY6C+88EKW5O+M9Nl5afopav5YNYuyE8tDUIRZ77gcKdQqUMPYtes3JY9a+ofwzVu3EGl+hbiU7hTAX09R7HVFUyCkUqX3KcbElwxlB6anCB4Wld0vvbW3f3jLtp1d3ap0TRUmpyUmpR7auccC2uj45NJiQK/UbcGG3IICG44Zl3gJk2iKAjVA9SuMVJxeiktn9yN+KtkJfBDZBsd3Fa6Li7dtJr4ovyhVHdjlNcUdZE6rGarCaXFZcUJsQldPb2ZaZnxisuis+3Y1OJECf07PhpIUnICxiUm/QkhJaVl5Tq5i2p3dPcEOiHMm3ZKfZP1JNxLXF/FNTIiZnBjPzc7MLyi0X/z0/NlGx0mUWeIIS170lzmjJr+6adNmEz97EUVUdjIu2g1jyPo18eAxB0DI6g4B/qlpWn94eFBQn58wL1djaYl4Ib07JNIkyj1zOIuVDQkSVJDtNSwqBfuZVrwp3JsW7yjrqq7uh2UlxYQF6vh71AL9wJoEQ1T6WJCEDjBRhocEZgeOJfFsQYLJ1OA7Uh2FBUVyeCQMwz+2xJ/F4bDOMqEmu9Vl+eM9X9955x27V3kO2EyAxwxhMlNX2isSCe61tX/9619PTrqpI3n5jmPEP4wAOordA1cgwbqR9etHBIEZQSRxMpA4GB4wEJzZ39el+JUWwFlXV+4n0xjPWRfyATCtITNEJLEIz/vqgtup2gzuYvrrxRwvpEN9RaK8qxJdLD9KamINW2qEhNSUVMghsGCQmAE/1qOYBZoFjL3KSOMIMBUgrEJcvnwFrdlhWqA0cKMlDusStbV1nuGZgJpr65XVNcvFKbfvXNu1badJUEeEDkoN1mG6t27dsBpmmf7CpYvHHz9u119b6z1594cPPl5cVP6g2b6bTvO0/QDm4OGhIQgxL8KYMgycDTdFd+gKu+tMSNQ6gFkPv//975944vG+nkFOTtxaQq8c+vsPVufXn3/+xTAvig0+egQYhiOdhFJQZNa3Diwrxj7yZ555RsV3QLL+/QQhBNPaF6mU7eBdgo9GONkusJbWm8ZiLaCqoE7UPzk1raOzm9KztrJz1y5x44bGRptNl5aXq6oqrVlxkCRX8KeeOHqk176f4RHawDy0Hhs/NTu3NtBv0dUJGxxXZlNkg+bY5WuXMYHTlDWbmJooK1TWD5NuZHyMQFGY3AwrDIt9y1L40JpdhXxPPfO0WZLsmD5ULwX2b379yz/4gz9gI+LS+tpanGb4tmUrAF1aUpSbIxWqS9llJ4oePBiWxVixtDULAzUFC4MZFJmUkZ6EUnFkis73DFmgtWAMHwKJgkIdCoHGxvleJ3To7qeJqXFuKkyaU0gl8edJWkshF5gzJ+I/uwgkFku2/yQ5rN3hQPkMGpRNgIXHR8YVyCat7B+BD16ljrAuQtQ3bbrR1jE+OwcSqLCN2E16m1WN0ILsnqT0BD5FW4VmTVslxRU5FkPzi3hNFjGk+jg4ybU8q7CmkZz22c98np/AiL508YpFnvTcHBu9Ll4KR8KpbwNy1hLZCRdJ8XCoENnjx0/AmxiJhCUZpDCmU/JCY+iRHQ8t2I9UAjKKIqODKGDDqr1V8O+gI/IV8JbkrBIpWLVkja9iofLQwSOxKfG8QfyJK1aXFl947hkrEnalO3lQmxx7296w2YaGjSBBOzlLKVbuMtOt/0uTQEqpCHdbWjZt3WJBprKmmuIqrigLtT2mJjkAbAsHKr/0wotAgo3VtXmUtEHRjG9nuSCIXDkZNROjE9KJuns68vLDulBJaZG9Z2infaPev28b0qekpVERVDcaSaPl32Zk5L/08ou81qXlRasuwmQQCyFwiCvwElchai7KpsMPbBV4YzbAWEvrPdMQ283pQ9gbb0ACVrcfksKxs9E1nSBCahcfc3l4vH9odIi+FRDh1LHjUYEigmFd6Ovtt9/+4P2P/uW//JfHjh0DW5TPDZmqVAWMv6Gc94cffVBbU0eICovKfvSjH9nxuCFyjAMnITYh0c6fyd7+lUixGRFQbbJh0JEHmJqYBxX8h/y8XGICsHOfXBRLtXJiWxrZMS4sLcBhz1JMrJjesrQfU5vyjHZ8TU6N1dUa9T1lOSj8PXv302+seVnftHRUNIwXzDCMO+yF47SMjQcxNHfLBZ2eXp+amqT3rGmL+IDKLvOW1m7Dj4pwgsAigkVTOOgh7MjEtfBUVFTCgGY8EWwgRhg0bM/1MA6Ts2vRc80+xdGw99l9cJAuHSM8njMjwrI+zI5+QkXt+CAwQhaXlHTwriKmsI2zntcI/i4pLQUijFFPqOtaO95yLTAABsrLVwN2DRdS+uRLYTIxKjKG+/1K4LEF05wetA5pOHFWCWNEw+c4yulpqTZTmy7COoDsIVyQIi0+l4WHMBKRQ9ILL8IpJIuL2mFhwzjhDNNASOaZXQ15e9nMTaiQQ4JUsJ+ZnhbBXgJvnC7kn/I9POn4XG0g1dhAn7ATUIMHk5rEJqYE4xNiiktyPz17urqMBiyCOjMNrSEDxNlSDKTE2FAYa2Rtub+vR+zJqMWpRRwjteeT+c3WB3A5hctrVJQgOCaOF6it+/wrr6CFvaoZ2TkS8Kuq64g/mOWYr6zGUGFtbfcYoEgGeOSDN3QxzMS4lLiqhIuXL/nJuVQy3VVQE5wYGOqn7jE3yNEVCQ6XH2lruYeT6Dd2uVKSRBpPV1WHrYTsYDMBEhBsa8qGJiABAIuqu/Yd+PiDD1BWfiRkqHW4qSGUhEJBxjS2gVjTj+BfWUkp1xkk3gWnpqLsZ/1DlMa1Zv2KPfTInYUH2Y3akYuQVS0sWoeOAjbGziyuqKyJjncqwp8UB83yH//qP8necb6jCl9iBoiF/egjRj9m604N28s0AiprRLRhUkJYK5SUX1paVl1ZwYkV/CYp1pHFv3HD3eY226PrNmzi7D3qs1DQ07hh48CgHSZrGVl5q+uJD7oexcYnFpZVlFRWM4M+PPmB5JmoM4wKTlOym3lgZDx4qYsKncfGrFthWIqPTUzLykgJhXZtkF0Zm+gXkUrPzltdnif5GTkhm3AtaS0jMZc0sZwo0+6eQLL5hZWEROl50w7zMDonfGXl5GZn5RrXjAWIxaVh20Ozs52eE0IObfeIqs3EZBezzU3NJKdY7wp765ngik1JUZmdcwxKrFzYnKw0lUD7+4a41lSFKVZs0pGolt2y6zJRQb2X9z54X9TNvNLU2CBsw6OShOCMVckPTB+8DaT6utqTJz+k48yjshUtI7Emr1+/AQCugpPdPvnkjCeNhQirR2a6qtvUIC/HXq7pmSmJ0enYPjHerjuWysP2Cet9JWUVVqXjE1ONxblj23fsEfWk6O0LXFuPNxe2P+hSil7tWhugW1rbV1aXHjt2SFbbw84H6At1EA22vv5epMnJLeDj3brdbD1Fqcqdu3fh7cdOHHfQ39j0uNxZHGjOMIWoiE+FCt5jTtyoED6lTwo4nxunm8iRQrEmEm2aJMwubAtCB2zbWM0Q2nGHfYn3PAPttpdYQfYx/Khd1d/Xh7gMKcYNPUmOGEz0KoXEXfdVMIx9Iysj4vNP3mtr045kG+bU7l175YlqH7R8JDJFS6o9x8xli5uWvC7Zj77qeNhTWmI3TlhAwJY4X9RZKSdWheCG+o5jcoxGR5kmtDTVcfP69d1795Cshw8f4ARI0GdZeZFtXy23W+em5p966hkenRQ+QmfSTcvIXFt3REnezMJMQX7J2krMwKPB6oraxHW+U568ryBfzyonf+/m9XCOEgE8fvzYW2/8zgZH4cP29n4hUgqBRjIKtgUrmsNjo9cffPOfwI8wKl2Uk5NfW7thU+NWM4U5woyoBFBHVwd8CrdXV9VZbyXdSouIfqmagBY8blhllU7PLFy7cZNQG3tw2iN73ig6wuu6IK/MkltdTe2OY8fOvfdBfk5IhTUBz0xPsvy2bt6cJzeDzzw9DTmGjKlAFeas7ke2qIqhoprcU5SSQddYv6GyzMaMBRzCyEN6MiIY9Otf/jxsYSwqvNfSasOb7YNWXB90doGfege5WDt9xYdkrTbu3v0P3/kO+4YqQDVcJynx9nU7SeIlUmJgHg5JZEWVlJU4RIzeZn9Yzi0pLaeBFLSR2pGanoN1GR9ULp3sYaxovCzRMOpIBoubGFUX0awMz/OFEIhvzzs13ZMdro5XjFcExkAePBjiVjl9YffevVOztikGL0JxmL/5m7+WBCW/IiPN6SIp12/ehn+JZxZYbDA1p4h+9PR0S3o0qKrqmhJHOyljQNNOTIUMikkFLkccyXekNOKaXr+Wlp0vRCBhMSMtma54wN9YW1cejaypIvq33/+eAyv4ZnIbYDhMy0ODIhSGIJJqasO3TjEwlZB9bM/acyYJ9PqVaDhkJ2lptb3zvl/lkVKh7Z0du3bslPbpPDKzgN1WZM3yqcnCvImyitLsPbDfPIVkiIhJKFiSSz3Cj78IpzvXZI2Wo4K0oGvPEHkKSiQCq/DVvcsCYVB5Jie33P4zpaJRwcoGuxbakd5XNCUOVtUMCv4FC7iXXFzbn9mEWtCUYxmFqCjYljst+EflNCqIeHqeJyBLNiiEe22923bYjeCcO5He/oFHKiISiosXL9uscvjwMce/yK2SD5xbwHzqraqtNQT7yvgY0ghJ7pbNOxhXJJTGMxYLdPxPIVvZ/+7LZzbjmLt4YnwJqOAakTUVq7Iyc4gAOhkC9cKnJctWw+BTZPALX/ni/bst5Ig1hSGNlzbbvKmJ8PJw8Nvhwwd1d7+t7XZzc09/B5u4u6Nb6TZ79gRDGYS2fGLmXTv3iKzJj2Ixvvn2W2S8srqGnamAJrd5YmxEZhRfUZsbGsI6LXPCjIn098RTmL+FJShlxUOkQAyrKL8G80yxAMYm1mWpJabIYhWyURZPaF1TkpfkLBw5/BhHii49e+GsgUM4paSF0uISHA4qYpuVnlbggLOcPBag7Tql5eWCrkrrPuodxKIAcFDAlm3bMQmfB2/gzEgBqB6VVxo3NXT3dju32OqiOlKSkZbmV0pKKmSX8LWy03MNOS8rT0WjmckQR4jdtKE2JBLwytXtdoqVg4G5AcmJ2Vk5krZdu6McWoIeHMe4zkSGvthQ68b5uCH/LhwH5kMeqADmCkxRZHABUOlrCsZYxYvamnQWMZAfzARXA0f3EbMpFYvgRRohGLJ1teLZ1AfcmaIghcAYIQ5gsflq2O7gD9ymE/M6pFCOwoTYRXlai4M2TFPEcqF4MDaCp6alSM+ghbdv3drSfMf8hxvGp2fS0rOmlU8pKraxeUIhUUcaFRQD2wSGHdtabUnKBDk+i2pb9XZc2M8BAMk/urMXyRqDB+z15kTZME7byhtR2RB+HVntozyXAYolm8rxKMFGMwJgRPypktL8mPh1G8DhUINGYGg+lkEZQ8JRdBDMQAWNzJgQeBAtlo2qBWFLzJqVEY7Y2LV9B7WLNHYCyofbUFvDJti4sQkhSAgfxkxGlnAMwcOCnQ8eFhQXICjFITVIC2zu+bmF6mrH06xbLKP1rFKBnPJCjuNPHId81gk0Gog5wFhsIbh+5Xpudtj8xHnV19f+4A/ut7QQSEPwgDalRbEmrT4z73iVvDPzijbPnz3DL1XTihCY1EV2UVlC2MUrV62kl1VUHTx8mJGBBdl2XAvltw8c2Gf3D+Q7ctheJFDRLC8+/wK3RZo+HU0dcJ8YGRY6peL09g/C6bHHTtghZNMC5WgJDzzJSQl37zRv2FBvwoMaDsC1K1ePP37ik1OnLf/u37tPeO/cmbPsvKuXr8g4J5zSgawC0Q6pSeGIEFvAPcNJgHAcim+t1ON8GFYnAZPgUiy0vLR+9cqt0TG7dedUGVmJibc9NjMrb2BkVDazSdScIXIwONA7Ojwod8uG5JLSWlUFQtSVpZWQZNfEsHSXuRnHZUXKAtgbABLYxRTL4m6YhMojAiYPlKFAaZCoQGkCJwMJddiLfsLbBNCbcAhT9Bec+AurWrCvDj5d0Eq40ZyEIpY4oAifIGIoixjZsSNW5yQK6wCZGcmzk2MlxQWV5cWy9wtzc+LWly0CzM/P6YiBkpwaQoAiJbqWbus8KSvLQuNqyHCQxP82c7Y2bdI+7LEnpAib53i2OMTURVisPvlV4BxgRsQT95briHoJQBrL0y+/8P3vfpdcGyyKdHQ8pE/IEhgmxqc9LOKLmWkbaRWR9A+qdhzhuFJK5vFbREc4G7EJzklI4t8SLmP/yle+8pd/+Z+isi/oBSTZR7bAEhlmAf0D88OD/fAUtfKjU7hRez2YlQsL6OQnYEOszF3izApHIOxBWlnqdnjditS3JjK6CEbk8DC7FvNYdijMz1O8lS8tcctYDKpp8xYZxorrg1xM0T48NfgvXbyoO2FjFT8kyDIp6ECzqcKXwZaNbOqFLi6l9a7SsmIbUXDylu3b5HkzQCHQGDUIdWwvuHJhCCgiWRzwEMtBAjbGUEoYb2jWX2m4mEfXzAUDMdmc+/SMuLVhevjWnduUbU1VxYP77cZrdmBk4D0/QQuzD/5ZG1LsmJh+xZDkyMGWFKGJkKI1EKE7C1BiHIav6LAIXwTVS2+88caWrU1sa3FS/GkIKpkgGSpTcRge5+sU2rVw7doNEUEjIt0WAJ3hZSO7CFH8+tr1q1c31NdKfjcidjab/pEsjsTUnXv2/h//519+/RtftbnKVk69k9Yd+w5eOH3anEfQUCREr9Pt0aqPJrzhrsWluZ6O9p27tiL9REhhHxVwwS2VNbWU3oaNTUNDopKP/uHHP/3GN76BxDJ3Dx/Y4+yaWzci6lelv0g5CpYckEh0a9td4mNvm1VkKtrZdQ0bt4hYe8B9I4J/j9GEhAjznDx5knb6whe+QPkbPtvl7JkzLN0NtXVOdxE4VIHnu//l27KtoNeym0E1bd7EvnnwoL21tU3AVZnHC+fO2Z3v9AlBRzwwjBijo+pHQ2Z+YVjD15E7kIygTpzfuGXL2dOfkiwURAh2Hp5h1hBGvGFCBIlXyGN+YYGaYy70Tg876ujatSt79+5nwlqxtPziXBfbH51fIZYXdiuuLLW33evseqhkIWPXKs3mpo0nT57asWObHQXiR7JVdSSyK8Zp/p2enarZUMdexJDW5Ek69jDGtNRUMoUx0MIFgVXgGJDK+EhuREqgwhj5og8NAcO7xkKeB7nJF6rN12+8+VZpZZWly2tXLj/73NM28ikOp0iZHP2L589T4FTE7p077TnJSE+nmkQqHAL/m9/+nmuEfE898aRmSbquzYysYfYJ5odkXG2p17kxRDuSvxGORERlyUi6BhX5jWIet1OPuM5twaD7be0Sh4zderVUJWyMaso62+Prw2b4yU9+Yq7xKa+smBybEtNxgCMHNSE5gYaxckaIzMK1ddJXJu7cCedIWDileLG3YD8Ot9NAIgrIMZIG7WyhPWSLRiahsEOXyuLSnTt31oHr4NQCEpvQzdqkDz5xNR3OeGAn9/X1GizksIJAeO/efZz82LET0fUZe2BUbuDWatPsbFZlgEAduT53/gz9QG2ii9Ysg8AAZJaXWqMLkwIRQ/cPPnjPKemgtQucJwYecX22g1iwlC1Ysn67NZRqnTWbaa2jq4stsT0cG98llKYOVVVF+Y5t2/AnAfEulGJ1qi8mPiErO394dMym/mMnHleZDbHkWyrwUVleYblpYmRMPRihW7rl6tUrTz5xQj0q84vlVjaGZHjLyzt37pbpIjkTywmQ+XvsyFHWlLmUmKwqoBqpTnbk0CG8FMyD2PUz586hHbXZPzhgLpOewo4y2Pfeey+s5/f1QTKrDzVhVbUSJUYkg3h4cnz20JF9HGCHJNAhnP+ZqdnBoSEWF3WNKmE1khpCHjQwSPSQDJqg/kJK2L1hEcFfyKVicCHIqG8rraoiCnMDCGn9xETw19oZXAszwKw4mRlFs55nLjPlma3YRWtuMs5WZldGx8IGIClbpgGWuhbCDLS2SvHZB6wQGMtbUo4wknUGbrSFNrkP6gebdomKJSpLhM6PRGaFR7iV1jisUOjLQq1ktUX7YVccupZT2dRo1wV8GYJjSndu3yzKYggt7e2jE7Nry2Ez6PziqsQYXrvRWWseCRsD1OCJswkMYCAXkbKSwvkRoV9zHNfqErNbGtRyXCxLfWJkOKAiKbGkqFBJ0NqqcgkBO7Y0KTkqDTE+Jq6usuTovl2qxEAmSEgaZTTc16d2QV52Rn9/2KVK6UAa8eY5lZSWgEqBs+tXropYkH9M74wPShwmzZqetM1UcQkpK2hfLRHQNtNM0fTWvsGhps1b6RdqhRJZHJsqKSkfHZ9WqE46h7MJrTVXF1Qr9ke/CJxSKzQ7LalHhioDXWa8qZ171hOOm102tfAmCQP2ouKJFmhNgaAKp4IvrYrnqVLvJyzR191NXEkvbqGkjBTLasR+RJv/7KOdnJYXuyb8yYBOjA0cZVWx/V6QakdxSZURq7DwurC0jMpcjcXpyffffcf2DFqY3pH7IVDkLelvVskpEYyelZoJKlUy3cfWpgQpMWaIkpI4Zdrk28n1silRQWKeT315PS/91ddfq66s7Onq4qGREGzDvsecO7Zth4dz754zoqzMEAV/1N0jQs/5NAoieuXOJdqcQWCwPQODBNgzJhUjlZKBDxnKVAb6AlhgTC8qK1gZfNjdE5OYavNHXOJYaUVFV3evhaaF+bmkxFjLaKRmbnZydm5paHRmfGoKNpwaiEsz5zPh2aixWeBDG5cnpygLUykAbE5j1dnUIYQfJGt+UUoizNujqQUvesXShydNcjKdMHPQMra8KDiQNMPTs+nDIgNdZtKiPYmGLqgCDyAxi4rqjyTMOS8p3cxnlUwxR7uck5IzEpLS7LoX57DB4N6Dhwlx64pPK71LF1dXVGIDHT3+5AnsKm8hYGxt1eq2DzBuXL2G4SHHV3ylIy4KZArDYKQ//uN/aTFdC5iTaWhic2E6kYe2Z9fW5cWZSxdaaD31uq3wmW/e/MUvNYLTJMwQjdHxUH7AcOzEycxOunO3DXIUbz5UWZudW4jWIklPP/s8bkGpg4eP6lFIBtiW0a7euF7fEBwSU6B2vvr1b8Akho9qSPdFcRwwd+PWTUS3UMaUzMnPCzoNitfXpGEoPkJ3Tw4Ngtm7Yd2jJ1QVfPq5Z2uqqq2dMtFobQ0Cw74Q2BZXNnZmrvmMRU5TMd8J787t23jOOp2eGGdkMHfOnzvrdI6tm7c4Ug3YHrP0j4fN07/99W8OHTlcUx92E1kBA78XqVzNWo0UvFdDQ2kaIMmz9byNKGwv/EMPm33B4+QvXplsUJ7YZz7zGfxjBRhnyhzVFytN1EB4noNnd5Sp0RzpA5+AlB7gxBzhFqjmNniLCxykJnLotSgmEhudXRWUA9LjQ8JrJjNZxMcmCJilJKVmpufUVhVJcoAEWLpw7qzAjbeC0zU8QKFxCag4qLbYYrqRBZGeMSAkQ4NhACOFUgYQDFi1pq3RRKo0T1KPDRsbhRWcHooPB/qHR4f7q/F7cWHr3TvblCoaHTx4aL/KG7RKw6at2flFBw4crKndMDszLpvC8G2G+d3Pfw6qE8dO6It9A+32nrLdjcMyi0X59aWVe23NpoWy8nKBnNnJCYkK6gjv27P700/PcrCLxOIqKk4ce8yWhsrKuNrqStZya8tt082bb/5+3549qCAioKKuAIQVoUMHDlrmyk7PZG/NTs+uLK2SpseOP46shAgpwcAqgm1BH1gis+4AEgUjIlAWMeKrojjHdXfv3s3KzUF96+KCiGKQmOT6rZASExMfL+dtfmaFWU9x2SnI0BQ22nfgkNS4X/7ylyQOZ2JULRssywyHcADamkP5GvwGS36623LHbIJbPGmKBCrJUpNNRxSCTVDKypkugYr0ly+vsyCNxcFJpVmlFpwlMVoClWdlAnJcpzijNXkENVttOx58PInC9t3SbM6LpAFwoOxN2JQ+MPtwpvdR5/59uzhjnKLiivInHz+RnBxKUBg7vU2ZQI4YDTYAg8AE7j1w4BB1jRvpHOoI2v1kRCwqSgk28CoZgWcYsNb6oKPTY7iReEnksA7s2iTeZxfpwKDVKvMXw6O/d0B0eNPWbU8/t/ibX/6KXHx8+pSWJZeCOcqoJiBwUlw6Yud0ddkXPqSXU6c+gRM5BX7imWB7Wh1u/WogBkuycDX7AXgtzXfFfKQfkwjaj/IxGfl77cZ1nQoTiNObcJlMuVl5ArVityT9wMF91isMfPuWrW0tzXHrtTKyGPc4R1DJVlQIseKKy8iOScGQade83KL5hdlNW7ZiOTfjYxKVpvOkAxAsrk5MzTbU13mFTrOtxQOoD2yoAxj2YCsbHfBQxF/YGBkZjgq7BxSK8I8laa1FhMVg33r7DQoKDyt+ios+97nPCkQbuM0q5ywmJKZoDRMSf3+1ydthTPpqr8L5i+dgScjm+efk/sVyXViYXBp3tOBiaW7enl9ijgfkgNC7b731puUOwsLawavgx7Qwj5oKIptJWcpZyjls2Y6Rbt2+Kwa3c+culkNGaprCMDSVPdnSNxwpYU0A20xOThEZ5w9rgSzEzc7ef/iApDz93DM67X/UawXVhBLkIpK6onCZD5tWnKj7YScbeDU2xkKZZWcodfYcTpPhTIfwHtFFcWFDk/QBHoln1t+mJ2bHR0KntVUbtr+0na+FjRV2RiOMdHXgqs2Bm5u2AJUS65I8aRbUdBCGyMeAXUe/atpXJCR1kOt3UmexPfycaCk4OAxM0mXLINPiTwX8DJytNd1bJ/A8dcbh4HvgZi95Xa8+LtSlgVlFbBx35TEJ9CrfFxbkLtrVWlEiXi5bYERmjRhjSkL7/RbmXWzMimrWQo/COY5WUeAyMSkjLlahzHDiV05mGqYfG53WO8b94utfkIFMfpCEQg2mfFoyv2BKkvjwsAQv9OAlWEdWYRsA7Hv/V58/FNKJ7GdNsIA7OWJNI6Roxiw7PTeDURkS9GM4Zk4NsP6Rm5Up8y8xJoQNKisrVOqsqdovvUHehiRmmy/zsrODYdHw+Nr6ok2beCKmL4RAKiqLJPtJ2nONv0EOb5iYVUFv0nc+iIcFCQbFhBZUBldeXI1gnDhxgrRbx2TlwafejdTA0dgEsHn7JheQjBzBWZqfVeYc24kPieQ1Ne2gbiSueJ5wUst0Ym5OnulTDoDsc/FyiiDSYNhIxOBTf4ZLZiqiBwXykZGKpygz6urATAi1YzkiMiuErd5+MmpsQwuwg/E6SMD5sKNLKUqq3+gs++ZlZbL9uEkicyTEWseLL30G5JQag52fwJnG8UZq56hXLEFSQ6c//RQ2fAWD6YW5cHDPAZYrEvMQzFtwaO/6lRs3bfHYtjOYVvY8DUS2Z/FY9C6GKuUHb4vSkSKWllfMrH6Cas1yXYSRgizmcrLyPAmZsISNn332Gdimhc2OxguHkZyc4EbCvOddcANELPwVO8EwMIzZKDIebHxycsuDjpj+uCTln+JiVNW02jg+yutTYmEl5GfNr6XJUou1jhoqQnF3WVxelrZDyJ1T6ANXCIGIIIdG11CNtfxkOKYu0goM6g91YB51tEDSsRnU4SgPeNhNQirKZXTewoHQ6xlf8ZhherGqslyp3EiZCwosngNglVBfqDk1tZqaHCfWJRZJDIvy8/DP2PCQpDiZMCrA0PjSdUzq1JykcJtobA/jbDhGt7i0XXfgR1/qGHOCCnqNUdc437vmmKhVgawARiNr06KtYpYOXgGn7EGQsN3NiI5iAO2Dji4TMGsJ3zL+cI54Eg7BkDBjjcjwWdveNf1oH3H16KYVBhe0ikMAoCLAUBnK24dJKy5Wgh/Zie5rrKmqhDqiPjI0SLioTmeM6FqPCIHbJZkjjUY0rouZuHgHffDJTLQ6ffutt8WKSITVSDSylqI+C5niRQsyIUe7VK3I/YP794uumD+lKIha/erXv1V3AJ8LAbD7VQe4fPESpgW2HKETx489aFevI2y7NN2y+LGiM3fpfTAkZGe/9+EH8CxqgL3d8YyZO/iNMQFLLD+RyNTURyCRqAJXkZvj+MoaI4LqMSnpEEGAK3u78T+7Te8WSaw5GIjhYx54C3SMlKbRC/aLWY358IMPmMskC88wZbTBRHBBXihURgvsScjBn/CmyKNm4YG5huiYk4jBZJRbTO3eMigtm3386knjokKNiEhSPjQD+P3EuHEt98OeSHTE7W4SBwj0/PBgQXtb877dO4Xhf/Ob30GL9ZBwekZOXuHERMv9hwbi+eSkWG6GiDgfSaKCf8EaGB6+cOGSIMu91hu0X1dXWHMQ81OOA3g8n1/+4pxo3xNPPCkb24SDyQmj00sePnzQTb329TF66CVGY9fc1PBQnyALhekHAItBin06Totp+O/+3b/7/Oc/D3KiQSm9/sUv/Zv/8d9eOH9WL4Zg7MYFe4yOwp3bhRhZydDV19tj4b2xcRs+JyARs1AIfAO7GYH4PxgYHvDqoUNHXPz8Vz+HUoPt6+njiYkt8cNFo6U1MaSs97a2DtnTxdwksBweYVSyQOh8rSqv/dnPfvbCCy+A2WZNDwOMU2p28is+l/KHfJCGc1AtJW3VcU7QpTstvPjc85xVCVoKg843cjRmFDzwV+xDKNDrhhAVWIzNNsVjxggbqE+aMD80YkucAxvQcqfldtSjICmJCSH/xGkqgkqwx3XExmixf/9evGGalkWZkZ5jNQnM2I8+17IuMJLXI6Sc0Qt0+YmRYIJQLE6+aHJiAk6zg8IGPMqNA+xFwiImLQ1vZDBsOQhQOS56cKikvIwVrn1NYTOodg3a4G+Eqv8jKAghdJ3hOFYTrvSFLkQSBvxK+YAwikCco3FU1ohf52bme/u5HjahhrCFT1dPjxKwiBs5aQ7sY4jurec/85m5scnYtfjf/+b3lutJjRbc1xSMme/kaEl5gFiyKSYNCVKdz1/8GRVKFnx0x8mkDbgTJjjGhVFDqV2nUQskOjp0t5jJRcck8O9hkEOdvwZLsRisXnzojeeeew7C77U9MGQ4IfKOGwfV/v1htzThYtDbNZublwkDpEN57boNG7Zt3cG0kLXoFA4pEfKdNqst9ukpy/UmRPC03WtxLW6otOCxY8e1LIhsRY5ZSSJsCASJow+efuoZ/KMjLGp0lqPlQeF8yEELdqNxoYIVicycXK84s3VLZBnTEIgehd96twWG2a7yYFEqCMXgADd7x/ZtzOrwLzGsLl64d092tXkNqPfvheyJ2yN3XnrhhbDtfnySXMhTeu6ZZ+ltykEWw+3bN0ElB2FkYnJ9Ki5qR4kdUwUigzbXOR5EdqiVPXDabID/xWVEpmT8ugNmggPDMEbrmjr5Br6iOGliPboJeA0mIKHB+IDez+b+KBvhfpyBWu7gRS+gnzu8DfynDz95BdMLjbjQH9PNwDCBNl2z8z0mHBu1JDSOup7UvhT27s4OvzrV2V+QDUfS91VcysrM6OuZtGVk44bKjPSUleU5W9Zf+/xLvD3VAxRaoiT4iEqA2Rwj8WpibBC+JPwz6Sxxgurzn/ssWioIOBKi5GpDJqytOFJkOSM1t2zL5qGifGznvgJtdjouLvG9JqwwFhcVBXtoRcQ1kfsFIdOxyxY0GGIGnRapKBfDFZpZZLGFhNHISVKNDfW4RHlX47Jhl9+sQndVRWHTxkYzuuRao66p1m0DFoRJKQxggwFMzx9F+NHxEaoN1Qkw/tAvDWUahjQtmNVsXjGXwycDXSEa7GvTOkJ4i6YwELrMA7jQTUypZVLHW3Dh4yxMGcwcnsGhftp5ZCRs3faBds9rH+ugrw8uF5A78fiOq1ev64WeAqoWdO35gYFw8CdOwuI4BXv4oD7zC0tpxDNg9gyuwluepBnpEY2QMTa9WdO1SA8gsRCia5ytJnvSkN1xlLeII3PtxRdeTk0PxSuUNuvpeLipseG/fOfbpufHHz/uSSg12XBhdSG4RywhDZAyrwwcY1jYss+VehL4l7nPXTE6BLI2DUItWCPiQOfzJ7KzodFIgWR6MEnTeqiDgTGJOYCWRxoY9pM7NPjmxlC5klzJc4hyu6rGRAP8loNT00IWNQz4y7Pfu3f//PSis0Uk5ZsEVd3cULlljpCtx5EFDWI5f5lMXGGJGMuzixk5NixkA5LCzc3KhkktIxPHWy9hmJGTVnGOTwSrg+5rBzXxmAH66i1/wQkhYEYav8ISgKOzssY9DJPQAjnR1rTsMQ8btZuYyiue8bDtyMQ5lAq2aLMeYgF+nZmegIelnIy8nAxGlcgEibJ30h6pug2N5no0arsXjrjfsnW7ZhmPTiVWxMAAq6pqLGs1NsbmZGVITTY9gByeGeLaBBVTD29rwYsms2AtRc7Z3bt/nyIqJAWG5+bnYQCTmrHu3G32Fo6iyl0Yu7/mVCsbKEWBGhTWRWgrCUxt9pZpBkPiK50aJlwB1UHrSuDNTk1T4jIp6W578bVpsRWlwupHaqqypCZ1z2yoq/GW5Adx/aBSFTxKTlYpD5ls5jdjnfzwI6SxOSeYESOjiF6Ql8e0NRY0Ir+4C8vpxcOoY+x40mOkAzCg9avrE08+CRtaMC6SzvScnw169dVXX/WXsFtyCOvvyUnNbfcYfVZsiY9mtQCB+NkcT+RVXSAvCtHsO3hAaIaJWVNdSXiBB5+mDTKL9+CKCpJIie2xn6gBYDCD1YztpSFxKAq8PDXiL9fZ2DEPDWZEno8yoU4h/OrFK+ToiSeewHh+BRVomfhaQAUvRu0hhNCjn555+jmJKB4DEh4LFJyb+9u//VumQNS6xRL4RJt+YhmceOJxvCH6AEIGh/HiDSPShQsjgk/PowKo6AQdOd0lyt4YwEZ2eSD7DuwXxut91C+obBQwAOdYS/RP8iQP355Gw8GHAOvp7PIAbJACDxsj1KE4Cot3W0k4fOhl6WRUaG5ePn3Ilg2pLPfbrLbdf9AhBa6355Hg0cVL50eGhlITzSdhZY+RCj902qfhoIZK0z82AIObYMO0hJQ63bNnlwKjAhmcHOWzWFcsZluBHztyVFSO82mawKsxBXFOg3Ef0oAK1WAWO4dtm1xhDOYhBFFcYCq/al+O5bUr19vbO7gfcBWNYqgb4XkjhWHyxdMTlQMwTHr31OmTf/CH3zBYEdLXv/Aq7nLTth/K1TNkkB8ubgr/LAVLWDZxujZleIVRgu0xIc40cDj3umtCRB4D6lZXmUSsMYNFLL+iJvHBG8QBt/gYBfeDHGEMezC4+gSEFW7BuaK80kKQdN+o6vC6MVI1PrQ9OPGqdmDb67ANvXo0I8ihwjOMfk254/UQRq2ru3X7dmJKqvnFwclWX6kFeIMQoqdlPADbH3zwQU5mDnRh0d6BfpkFBJBBrEGD8gwZN0b6jc0tFcfrAPOidWnAOFgQ2/sgyg9/+EOCY+DQDjZcrUdMiGpwSEhRs6W5FeTYnqiyCylwbiT2xvzR+SLC9nNwqAa+mhDNt1pgiZFmNsMV9fV1NJiv1nNCC+MhFqZxw0EOyFxcXicgLnA+8Nz0Fg2wfftWfIVS/uJ/0OpI78aC5EDSo3YgwV93DDmq9IzXYzoFHg6BHKcgapz242HaCWaAWAsaVVWCNCfMyBFgtNv6+Prrr508+TFJdvatwtymr5OnTtVU1ji48O7tO9Z4W1vuCOpZvaeULl+4aOH/y1/+qpVPyeqWknCI9AHRF6zlEHGywxcxTR8+dMjUxgIUrjE0oDrtALToRQABj3z2UtpRzTHet3+/XHyq1ZBxjiK/4kqOLLFHThS78+ED4RtBqFF1GHsVxEuX82PavHPntt0msgPmFpaldWEblqlgh+HDlR5R2fZrzjKe1G9hUQEPSqgFIcxbNAjgu3t67KKWOgGHsNfV0w08CL8YqdjLAVBrOC09OFFagE9AmimoU/yDuO5ALH3iAQwP+bhRts8/1qVZE9yTabiy4p/9ryoYIC1S0dTeNFof+UA2MMk0CBnzkepAqIvwPsSJigQunvDVtb9RTrKVISxqihrOL2gE6JIKTPxMlNkZ5VCkTEli4z0n1VVXUKDOvaqtq+jtfZQYuyb8CdY7N65IkXj48AFPJD9fLCFuRX7E/Mzk6IrlqprKEqt4/FdFIXxU2LcvnmuhApptN7evX4EOXYMwBCDSw6YusUwZYLHry85FVrRd9Qbw2lckgQn8zhdU9Sc9JU7VElu81fKxr5HTnpIUn1eQp5wThNrUaOd2WmrK2lpOemrY22Bcg4+GEhPXczMKTn7wRn5O+v59Bzu6uyzTgCIoJgdMJsdtaKhBmJ6eTrIkkNl5vVOGA+0PdVCEJPAG51Qe5P/gBz8g7YgHPzwBMSTXQYOkp2/auJEVi28cUhNNKaMcZQxjKe0TPAUaWbpx1ZXkVnIwJoMBORgCVDKe7Qhhn5N2TGnbH2BcKD4tNxoGvELxibiYQQlAwMnamocpHVChpsFqjVqMXU8Ajweiq/z0GlSAn+rUSNRaxWpeNyU3NG7SgmGSHBqHKiH5nowwTDrN3vOozwbKvt4+OXNlZaXnz5+VXgXhVlqd8GLDevuDB+ohCFgKGYrJWaqW3ic6pSO7G40atfAY2bbir0J8YNqV1fKS4vHkkBAFjbgODvWo+C4ATp8+RVcyPqhgwJj5vOKrhwWACRh9BHXGQv+SnzDNDA97BW8r1UwUEY79oaATImKMCxfOeUvIBzB6CfxZW8mT3LZ7569+94YdKRlpKUtr6m0HCYKHwfgEmTMOVLaPlhmWmWu2jGU0xCanIKiuseZ0xBvRI7RrE5ODYWlhURfSXlEE/k3SHqA+EM5X73qSqPuVMOrLuEi0UaCOXwmFJ90Bs/lDR7QS0gDMfc8jmY6szxi1O9hAkMNNmtTDDNyY9ZWZKaHEhcx0kXvR5Fynk5SUlVujOrF7lwUQ7oAyUxcuXcLhUtXVI5KzV5GZzevu65fRMW3FbHZalh3u4oeYM9p2795psxRbCvIZHKYEMMiOwDbwDOFGtCFyNKlaFrt27wGwakvcD2EqEGbOzYdNlpOTAn5d3d0XL12yuVA7ANYC/BisAUaNRXMq/HMeMC0WNUatWSdUhis9Oamr44FQX29fj7IeLGBlUuS3FFRWIaU7zhno6erWC/SqQkhj2OptZ5QkjU0Nm2Qv9IbMsdXhgWFVbu81tylXtzBtMSdvz+59Ml7GRycUhIa2tsF76hxWlleBGb3UsHefZAVaTM2urw0pEbO2tp4r+Zpjs7zGEIQQsk9JO09XBBHv4ZxTJz9kFckwYYsoG2XzkehH7rPPGeyIEmCrodoyJMi5Yfq8+eabA8ND0EjJcKMIIO2k97HRcUxi0QuHwJX7UIo3HPjASkMUNrdaKLYAWraDQ8XIf/zjH7M7/+iP/sgsiDVsLsdXHe0d4NcF/kyJT3aEs0I9HCoWFfaTGE3uiJsuhFaSMkNyhc2OyhbZgWB0ZAr7eRKxWADAlr/kPtKzeDAzIGEDDwtleRckBsiIId1+9SIxQRc3iYOPoWnTW3EJlmsTUdk21Mz0ZGd4uV9eVWnLuAg0o0Gt9OLyyrG7rfSqfV4O6xVskjNgchUcoTBNRnavAcnmSLi16YuAP+rtZlPSP5LC9+x6yhIZ69msf+vWTRuNnPOJ04zl+o0b27Zss1Pi+Wef/eiDD7g0zkRouX1j67bNJEsKRZQHhLpgWNVgdHz9hZfYo8Zo4z5CGJRhBvXlHLGJcfPo6NBgzEo4Tfxbf/UfRdqrKivJBf6UDT0+P3vx/MXC4lIhf+/if3gAM0hAS61pFq4ouu1btqP4p5+ePjs0dOjggdy8LCXFFlcW85MS7AA0ZNgWZaP2cR2vgOGFH8Q+wWN5k9UIt+vriaaVqMKBVczjFq4jWcgRoUOmpKzHHy/XL7fWzOI+RQo2b7GxwIZ8vlK2zBRWLGVLNu1aUbfKxcOOduE/pHFf+xb3iSGX9Xvf/1t6DGaYs9rULwLpkZJ0Ajdm06DEd8XXLcjohfOPkUS7GWGdoYc+CPEYq/3kyZNf/epXo/PXP/zDP1DjYgfaNPcxDe1CdrwF5rQr7OzZM5HFny45BGJ7n/3sZ5liu3fu+fu//3t7G2w27R8cJrAAw8P3W9uMFFTmShM0QvuIpgtgBQ4Miq6aBenv3dZmCCePEiD1zjylZNAItxuFoUWMda5cqN9voofhoPnjwrqcm2DD9gauI09y+8m41+kNGlWZOBWxvvja6zSMDyTrixgytfEGk905X/ShnScaNzo/Uf4oCGYYkAqItTHSv/gX/8K8RCStbhEEHGVomBxZ9+zaiSs0Tg+QR0NDUxD6ispoh3Au3AEt2Fj/vtrdEeGlOfH+xo1hPeHqtcuiG8C+fv0qumhEFtAbb7ypjOxTzzxNtSqvZMm4bkNDUUGRg+EfdHauxayxjx1u8Bf/r/9x89YmOVHk18TkvPi+3t4PP/rouRdeoJFQX8THdONstf/pf/qfEa6j/cGO3bt++P0fTExPMsA2b95E+Ru+UXAV2F2E5ZOz5yDzvfc+WFxdraisZfm0P+i0tCh71Zw5Ojx/beDqa698PnvDhodWYmdnhCN1Onl33G7DtAy1lYMiF++vb2ii+i6cPbd/z34IV35qxUmfMv/jY5CDoTozP5ubn6tkIJ8kbi5ByplyDo5sk2DMQ+BLQ629l6++8jqibGxsPD93Vgg+O4txH04oGuru0Q7y4SXS7Rm8jSu4AZQ5TkA1okEVUyxkLcET+NsHb3kO63sOD2kFYVyjLmnRYqDT/HzIG458vOJ5pPLXNa1qU45KC3iC048lRMWEt+1f5AhgU1EQJRoYN7Ib5P5I5PdMpt0Gpn8TrCOMxmcT15dDVZPkuOnJkaOH927btuPXv/7lgX07tSyTOyNNBTSFsZwvHbfxwE6/MgjY/ZiYkMAm6hltZ3sbgIsLCuuqypfmpu8235yanAQkcqoXurAoEd9hW0q9ClkqVTEpv2dtaX1segyQ6SmJYuj8B/wqoT8xbDxaUGfNmb+srIqyMlOgo46yMtNFZ1nSNgqXlhSbEsqKQ+n6nHQZeKNry/MpibG1NZWUJCXObcjPzSJa8AAGvUM2+1x37B4b8EkUDUswIFn7ZkqhEReoQE6MC2kIAJBY5FJbjx471tXZaUQsZjftsTMlwABa4BoaRy9IhCI4gFsl+UQWUKRKz0VM7D5QyQCLnFRrWYVByqV0f7kMK0ymKV81Qp6xCEHFBjQ+EcVAeuQgiNyACsOlJmfgGY8ZDKWGW2hkcQvAEBvOgL90KzbDkZaqxd9uyxlNTVZyVG4iYfAAOyxEg3bulKav/eDXjo22hCSiWVuW7t9rHbXKlslLDvUoyCpc4U/9elJHvV0hg9NeCModSOqLY1TJgvwY/4Aoa8t+SqEsJKBwrZVDLDzgHADAMLEXPvQTTqbLqDxKB5aMyGOQ6Q7AwClFDcY4GKh240ZYGvaYsW9oqPekPftAghy49TwtOTrE6xDtsES7ofZWFWFfmPXH1hFbfMUjQq0Am4lDynKcg01SbAdHWSIKvdDurw+uBgmK+ECpyYAYh6qvduao7BtZf/MY4MGJbSABWjwcIRa2SnbtDU9S6PAGYM970mOGg2dItwt/tQAPfvK8KS09LUXGCq9KC5KyIFZ8IcREVSBVFiAlWU0F9i6oc/MKyLhkUHVUz5w9v3nbZrkrttWWlleuxcX39PYLHNgHbJVcwrzs5f7+4TvNLetriwf378U/SIAbDRP/u0AgF+A0BPNZlIVMeHwGyMdm4Flfv2e6EhEB1UTsRNcj9ArnmqEpugDUuAzTDG/iIWLBVl5cNO/qBUPCJIGCakzlLX/t3SeSPEOkdN8zdoBIGOPAQAVccaql9pEFiHIHPqX34ASMpAuTrr0Nslf1Ky9IUIrsbC/bPtQ/YFOEudBXIQYxFwADhtHjIsrMYplcX6MmeiwGMmjgQga2sLvDI40yp8R98V0jYuR51+GoY2OjDhxAcYAJAbrIys6VPk0MayqrBD4wD+kAPJLjBGU0Dhw+xMLgkgXqp4SkPuiFja7OT0hQenrI5DH2w4cP4SiFpZm2HsDDhmwn2fadO1DE89Bo1NBOeDEMtJSWlYFWd1jUEJCV465NoV+4kvmDCo2NmziHDjaSg2HzYmFhvqnLYDmQR48ehnl8aDUSqmyShlJChzQwg1gGTtdpnL/h2pOqcYAKlf1FREpGbVYPu4PPdYeNPak1+K9rqLrbcs8MJG4He1ZHM9W/KipySrp6XJY7iZAn2aaO31PqUQty9VRstgtIUTITLUhGh+QNCzqk41hOFzNL12LnpgPOANRlW7lOZRkHwdSCO5Pjo7ygzU1N9B91B2/CmZwiKaDoRZXJBWLrwDm1H11a1LKurAPAMAhhFctRRMi6dcsWHPLxyZMG61QdNo1hWt0TvNAC0mBIF++/956xcMj7B+087uXn2N1mSyKRkREqeGQUJOWNN39H5HWha+lSuTmZXv/www9B/rAjGHDFJUXELT8vLCWxvL3CYkZ947Jl31zwxhu/i8YIzMsg8ZivqOnCSDVuzUEAljXsL9LgN3KtTWNEX2gkCNE9BhgGYmlUI8U2KqgAoLyilB0MP8KZ2vc82SGS3iU71sP9hFWozaGhwcqaSity1m1YfqZ4hgC8sfmszUOacw8wCRTRzDw6r7S1PoBbihQvWXwGOZ4Hg6nTGFEWeqGC04JwArGMHeF/DqEo781b1/lFaiF4gHhCCJfeuIxOC1yOLdu27tq7x7s25WsZKris91rbMAbaIf1vf/1r/MOa5GY8ceJxSqCopJD2QGUP0yo3btzEwDSD/FghNiABHrTah1s8DJ9OU6ESgRrlJauQUEdAMJKDPAEGaaAlYprFyWSZlF27dpVRJjUAchjnxIqxazcwYZFMoaOyslKWIJwzPTWiTQ9DJmiF/5ltMEmE4YdSjbKokQIsOociECISVf3qEdjw4y+dg7GZ1wxQjdsT713CZcIVfIQlBp6fXnnlFVFLU6eOjEvLtJyNBk6u9OvZM+eRT91qJoo9UaDl/Qr8g/N73/+7UDVhddWIbCjPi1hQIMEtv3/zDXyCgeHWkyDfu2u38iFsxYvnzuOlqqrKqOrwF/JNc9GpPMJaQ5uaQulnTJubN8uOKiwqBa0IyKbGRseMNN+82dJ824KqNXiZP3axkzIPwJvDJeGBMNpFYO1CnQNbKXjRNgIRn21bto+PjQjiQIvdfYZy6swpmwrIoyzN2roGyw38eTmuMYlhJY10IB8dC/+cLj5PfcMGm0+IGw3MPI96bphE18I9xM0dXwETDBinEzi9sU7Z4lDMl7FIrQTTH9z2+iIe7vQQLem+/6KJyKqOuClFyJZBqs1koBXmlIcVVvMxtaiav6hY+5TJVV7oss2vwbObn6PsRDFjUkI2keR4C+WkyGZZMRglRPq6F5ScF5svysl2Pqkjer/85S/a18/oJ8ZbNzfs37vDhEG5OHaQ9eBJDga2iBQwXVtU8Cs1YXpCbVTpQ2kF+TnJ8WGGUI6TB6paiwLh9q6FrunQxbmxuUneoZwfI3ViixHAi2bBD0cpSaFMiklaqMOcbYeDLNXl1SX7RAMGnQqTqiaNiknLRfkZywvjSfGKDlltSF9emM5OS6yv2mL9gQvk9AcAEzaLADYOs5p0IRpBSuXARFhNzG9cUOHLX/kavqdB8CveYozSU3Q0gE+dOgW9JgCRAOCRXrOso+Pl/SM/JoBJ/wyWhDNECCe1RftYSDJz0Cy40BllTz/z1MjocGeXvXR7dR2YprAQT2hTbqtOTcNMZRxJtKAAW9hpRbnAw2ykfAfSqyiiFwAYgqQaXZA9uVLoQYxpT+rDTAYYg6KgQa5lujWov4QEPdLkWNyaO4M3LiasO3nFwNkrStRrSbVHuuDq1SvlZSO29jIgNm3c/u5bb2I2vRiv6cEHumxXFmUxbSzNh91UtlyjGkvNAuLxEyfsLQMJ7mcaRiyDYRv8AY9ulgPsPc7NqYBVHgIU3b59i2IiGNgAAgEPRWSV5Mi+RRT9EhUXVJtrjGF/27ZtWyjKKFEwhROXsVNU70OFfAwpsGZHUxG6L6+obrR0/cZVNn9qevLM7GJmTlZf/xC/mDEBTjFaA+cDmHq1I9Bi6RDul5WtnYufnpqA1dKiIvgkbGAYGgy5ibav2H+SmV0IbNoNXbwOVDILMGAYBSL6wB5sY2A3/eRdNzEYGkW/6suLBojQUAeZrj3vLRJNOSjmaHQ8hkh785ZcFlaWFVOC3uWltb7eAVFP1+F0sK5ODkOrk2VCJS5nJK88+8zztslK862oLpbf+ehRLwOCR7FfufHV5U8/+Ugv1LFPmI/b2nSNypgQIaKQ/8Vf/AXSMuzsWfz9739POzPi4d8eqdOfftJ+/yEBUSSKdpaVxsxVdlYlJTNyUIVr67BHLiy4CzhxKnRn7EYK81ABXaZALivPTUmxkcEBiIUZBXaJQ0VZiYm2ob62uDCferW5qPn2TSi61/pQngCqnTtznrXNDhNyFG+xcMo5B7zYDGvJsrKfLDFHKYJX2cpmMriKri9hPKM2zQBSa0hp4iE+5AV49jWa2m24ZvSoBkrjQx0imn7MNKGwWEG+10MR6elJe/jg5NHIqHLRyn5EdQLgjRGHnzl71hiNnYYxdh9E96vlNb/aPPflL38ZVj3A58UMOCrKJOTClMNAwc8Gvr6ybhTmTjs1Aa+c3KtFRTSVOZ6k11RXA5tcKxcCSEbYRx99DMNqTAgii/bZmk7RCiU5KZk+xJJSKWprzUaL7e0PLEuKnZM1DMDcgSWVLszrGFunzFMA42oAAwkRqTIpQGwp14Dxq7hpNDYBbANHMgg0WLESwA+Nhhrhshl9RH2qqyokZqlMxVN17OPQcEgLLq+s3rlrD35jrBgmDYYJJV/BBrvBwQgG6HWEJRG1NVVtbS0vvfQCtckqamtpsWeD+GNvzyQlJ+PnwcEhFYrQVylYS5enT38MM+WlpdLJ+OBqj2J4ldcpKwxM6Kzsvf3229LMoHREodU33zxx/DiWgAREcTqehGNpQ45DpjztihLawF1ha8rIMFBNTzeuXcUqTnz2FSbvtLZyMJq2bT189NjO3bs1cvrMWfg0SYvHif5EzoVIR2LYU+Dj4MH9CqNWWo0fUx9sAJvROXv27IMKuQEr8XG21Zng4HZlaUl5CieEqH1oFCXFpTifHrMWytmALi5TXq4wTSi6ohFpxWFuXTYt7hOvsXBpCP1SVjhp0hsKCgzZKSft9++7Sd0Rh9X0DJoNzGRZLFaEHjW5OghEPClLXGFaARtyGG+gbEycg+1BMjgwZB4U623atCU7axEO79y+S8YJGmaGIrEM0qS8ow+f8w//8A/xFW2AA/3qr0awAenzipbNSvaVQSkaMRbv3rllowIBNI/QGFLMHWeJZzjtvAVPyzokkXSO3fIANhy/QoupED/gXhd20XA8/Ero8BguNS5oQW5W+8cff2xQ2JvHDhicAy2YyrVX/BXyMFFSGiNjY0Qgqsa9zonVtXehjlCDHIQEc//eA5cuXTQcQkQwHVllgNwYUKkZRWRgUkqVX6MKOS01S8UkReqUO0Md+TO9U5Ofnjp9+PBhs49jdwKDdXVawZbWtaVpk7dAjiJ8NlgljLSum5Q2RFE+ODxKWZjXF+lGOGhnm8mSFtZSiQimIYqTJsJLQxsO30PvdoYDzMLd0OiYDaDzi8tKYmzeKhAc0hxYa1Ik/uif//Mf/sMPhBKMzvAVMsF47JbHHj+BK4AhdRNBYdIireRMLwrSe9iGLpYVojQ2NV5tbYUKjUA7/FDa1I5JRFpOR0+P15u2btnQECJHyEfqmXyEV6xkoP+RFYCtm5voUioCXfxUnlKOUWkna4kdXbbszzk8oeVuGyq0tDYTZAtT5Ndq+SdnPjX5CvEJnDm+IDs36+KVy8Am4LjXWMwLnV1dl67eEA+V+2ddnqNFBHQk4I5/LBU6U9pXyhPasRmM4R9DCORLT0cmY8EnYQ7gDMC+DxZBnoDoyGYA15gVqRDJX9decNO15VM5zNFX4Fdlm+S4UAjJA709Xe5DqHogMjdA4Oio1eXF2DX7dWMsgawsznsgTkglJcl+3Iy0XHXu42NXaqsq+X8OtzI91NVUOI8zW1g5fn1hdvz/+X//8+9+97tiFQDr6RzwOg1uGPFcj8Uwf5+7cOHQgQP3W8KilZShh/dayK1ZnGh1PexQxf/F55+lQeDC9g5nW8wuTPMCvYgneDU0O+4xLhxAQjC6gTiey9btoqKw2Subd5CSw3DiEEHcgpwlZ4MlJQwOPGppvrW8MP/w3sj2bVuuXjqrnery4smxUTNx7Mrag84O54QzbXfv2f/WO++Z/9DbR6Er+LSQ6i8vVneaRSFSgZ+QBBjGgnJ/9md/Roo8puAGWSISb731FsUkEuZXQuLwC+JHwj2mU6xAkAi52hEusLhhMmtwAP6jrw/sP2j28phJUfosTJoGIMf6gWtMg4k1AL00GjbMLwiGIERhLJIDMPiHKDBT6ISZlsnPL0Yaz2gBxVEfqGDwuiAEwgFPF6YEA3RfTvbzzz+PF31VX8+7IogmHtuO5RK89+MfeXHrlu1QwX2CGXTET8oHNbe2mBeZtOVV1WZ36k+n3AB+yquvvKJonV3jzzzz1N59B1T9oxnBbG+x1DOlbJ0uRwvU11uee2DBB2aw7scfnQQ/DBAJ+NcjJcjt5mhZfCRpNBfwwAN+GEMIrk7rnduICI16p2EtSXsG9xoaVaUp1Ll58zokgMEDphPpTIIBF65eZTfHJ6fNzj0QO1eZWwUnA0QjXcOeKsVSDK2nsyCAp33Y9hf5IJYB7SYNRUihLnB7JE0Lod0Bv/HiCoD5GKy/nge8jwstIBnuij7jAXQEefCL4uMN0GOA8YDRuQ6yEEEI+fek5Zog/pHi4i5y83LGR4ZtWUYX259EHWT/WzySWmG9JTUuTUFlxabWVtfrGhqU2tBR7YYGDGPDFpkCuZiHHXiSauwRZCjDrSEARqfmDBdgYPxhG0ShcIUkvW7QiELA+QYMRKveHDblAu8Q/+ZULzojxtBEmnGIr9j4/Nlz8IN7cTIUaR9dEN21C4OFXjiBRl/t4rCt384iw4dkIuNmQH53N4R75Xvf+x7Kcn1BZZGHvBiad62n+ZVcYBs2hymQxQntcEVxk1wYNgF4WGTLWNTYsVCA7Qkmf4BcQzICaUFHxmji4bHYEjM2+0gKh3rzdrd42AIqQXC8JXcXiRs21Jflldy6eV1H/EHLiYuxCTKPIaGyosJUZ7zyMCAci2pfhbi6hg3HKytPfvzxp+fPAWzvzh1KUr7zzntIYH82BmCvEDroMkbEMo3Bv8lPGp4WsOjS6sqpTz+hWGgMcOrLEJAPHoBkCNBCaZaWlIgjGI4gHxIYlEYIiGeYOBQy+8b8ItFZahvJ8hZ+Z9AAwDVINPInf/In2gcJMSFZbB0g+dWZVr4GJyctLQowlvAKtglYihxSKTAMSHhGTf488Lbv2skkvaMWZE0t5lX5fqP9i7EJ5y+cfffd95XGk0zqbbGCAAEAAElEQVTsREdnuiof2djYwBdXGJoUQ5QkkV/96lfQgme0Jk+AwicyYGNNoiwAqI6d27e3trToVyoO8Ghpi8ykGFpSVkIQTvYO9oBtUTDrYOZ+3AUnBkJVesB6oC60DGkQTgngHPjhAGMzH/BoGSalcmkZn6MvQYBh6stg8S1+CFZXUemlK1dFeY4dPS4AcedOM7uNu6jmQl6u+grT1rrNIPAGY4huk1VtXdXbb78JHljVmptkXy/YG4nVjTH2hoZGEHol6Pm8HPOpYcKGiDu1bKYjU6KbZME5DwaCjrdu3UI4+dwA8yRaIB/qI5aB+Mm4yAgOASEkYBudCsFK5cUAeieGUOFCa6SSzPoQUksZEOUZrxjIpauXwFxYmD43Ox85wTqZm6NBuBURf+7553/+s5+pY2Mm147NqP4CCXeZFGTvoIXHwK8peklTcGsgew8ffvu3v2VjqbunMiFq3mm+qdY2lnCSGlQgX5g0c4KXLkBKRVh8MDpAgpwEkRRaiKss1ccozIDuax818YOP2vymZnD6FYdjORREdy2An67Q1x//8R9rBCEi3ksopGNOPnLsmJpSWvMk3wAeUMdA4ESOCiJ6HYY1eyHxwrEjIWtAyEbcSkpVV/cDSYOUg1g7TjYKHzCAH4vCiYe9C7wotFbRxd3wgOqX6AVLhuAkH+EMIzJeAkgQEB0pqUr2tN6xkxGBCqo1qwuQQ5dRYCGNi3jCg+TAqLtuJc0WBe3DG9jOnvuUX4S1xiamaupq1RHhs3m9p7v34cMO49UjHmhvHyYCusBC0CXGZ6aQeOPJT09/gp10QZQc6a3a29jgKC3Ufq+dV4kbwbNr506yI0oi/01cAGBe0ayxAM8eAMkvWFewfHFpzShu3LxDHQ0yw4oLlXezWnXm9KndO7Yq5iGjRZGViG6YwhuaZXyaJRlm0zOLLW33obSgoBCuXnj+pRvXr7IGBa0g01jgU7Kl0t/wiQdq6sI+JUXnSivKjx5/zIJacXkZNQUhgXVjYkNceCmUapSSNzQy3LBxkzwZcALeBGqWxBUoCzP4wZyCKGiKhfTlInZbYw0Wp78Q2N3obyTNTVKBou7762niqogy0CMsHhYNEJJydiyfGD9VxQtEZm/xhOpqa8090ma0s7SySIk4NWBkcKy8rKBEBfeOdpVTDx3c+8TxExLOhENQWjjQZDM5MSrZy3iwPgEAiRGCHkNzqqi86L43xiVdjHXIv4I/Vy5f8yReB5JRpEQ00cMHDyhHixD0BS7krS7YcbG42DsQVjAJUvuDe6ZSVoXGYQCjSDBAb9xg1KxDYoADjB0f23CtwgztPDc3u7a67NwWCYiPuru8OOm40UjSiLQzxLdj0hLojVt3lON1At/I6KRas7t2Ob+mxHqySTHkTCkBGdyqBShVUAkwWDPq+MIYhjb2qLLDtSITIPzNb36DmfAB/iZRrt3EJYpJoQWdhbQAQIhdO3YQUdOzfIZl1VwXlceuggEpG16xpoEjRaYJ5EB/2CYol5fAROddZ5ogIlqTCk45ROEz3SG0+7DhK443XtAigcgyDnMN/25iFSBRQ+7AHpL51aIhZ8YUhXOwB8mEZPdt43ZTv/bH/Ot/9acGbtTQcuXqJY+hpqOzuYVtba103KUr18xYTz/z3Jtvv0tIyIa0+zd/93tb/ovzefJZUiBIhSpG5y5e8m5UjeIreclSJIFkZYAqV6lncVEma5UzO7maSAFjNB3YoJT1Fp1uiZApCqp9pZXgB0+SDsVhNeKmwQ4M9oEE8sX7vQ4DeMaOJc/jJUOgSS28FJeU2t9s7296Ru5vfvfWzPySU6g4iekhRjVqA0YAtbQcvayNmfPAA7HwA0s6EmSCdmEzfOhCszKG/SXhctomJif1gpTYXqcQCAlEHZk0iznZClrDz8DzVeMEk5gA2HD81Q729pg2kQ+feF7XiO55K2kBq4rhrq44tFj7URJjrZGhAZEZJWhIldIQkWo5yVbhnOogMqqApF83bmoAm44AAL2zM84H5FKnWR/ngiqDWFlR3NZy2zWuoOLNLiCHamyJMQg48cdLcE7z4BDRSkMANoClVcCJk6S1/P777wtG2nwJQqXoDcF46UcbKA1E78xurdEqvGVkRSPTA1QYI8yTHWaTFbMjBw9YfjFG+2qiU4i3mC9aQwtogQ1MokEzB9hUVQNGdEoDJ2ZABeAZi1EQH34CYMidnyQAwHZUiWmBNQCx5jl/o4A58d7zIIEEINlEIWnG/gHBUWD0PeqRw/iop8sZIzQreBYX5rdt3jI2GnSyhamhsfGq+o3KLVmrNJ289eab/GqONJrSadq8cOmi0JF8UDl1qGkCu3LhPIecpwFIxV113dJyD+TQ0sQaDinFy7JEiIMcQjcpTqcfuq932EMFCoo06Q5KgQFp0KI7Fo9RX78uJL8T3kRwYYaiE2rVFxO5qLRUzIMGQGtKw4yblJQYiREmUTVEGF0QXYN4W1+iqrYGwpVGNMhkJIPqgyGNm66RBgA8LqMwBEDS/ETGwyBEHdVaFaxTVJcDYBvunZs3LM64L7vd+bJSPbHTgYMH5+iFuUUloSySyX+gLa2TAIDlB9qtm8Psa4ISlzl4YB/eqK2thgfqzhrk9q3b9A4Dh48eATBqXrxw2WAN4YmnnxKwwJ/cWrplPrLH1wnPBmW8aBEty+hdpVGsvJFfWWRGRMAlKAolAENNC03pFD9QEbQl3QX5QuNYCBhkDdJMB5B89PgT//P//h++/s0/gHmLXnwtdptI5ze/+Q17eGzbvX7lsikylIhgd87OSZzd1NRgbUf7xrt7x07ANNRvoE+461rGV8SZCWuMhJFdsmlLyC4AJMI5yFnEh2pBIFoqKJz4JHJna1lk3pHslKUjlgBG0oLIJfipaCwBQgyP4pCjO2Mkg/LLheTKykq/9a1vcTNo19/97nf4QctRfhORtSRICcMGVEvfv3jlItKfO3fBoUbWW+yyO3jgMGNU8BVy8AMF+867b7mWSiCL2QxoaBo0XiyKq6EOw+AKDGxoxgta4kKNQOyOSI67h0UU1XXApWJAsKQLQzuw/5AObBTGZkqllJeXUSk+IiUsS62RC7W5vA5F7ksqxvnGy9mwCRgFnS2Ibw0/zNcR7V1YWtofOesTSHheRzYnfO1rX6NAcOaZcxcwP4A17nkQAgAyWeS0jVkSa8EkdAHS+i8AbBBQEsqalUHRpfBvQvcknkQRzf70Zz/2LjnCt87kpspkK8CYaLeMF285iSxqGHCdtK9NZhifHIsCyQc+UdxPxsLBozC17z5LAFaJJDhNOrqTQi7xWFUiSsArpJhaJmiHDh0Gm3GxWTEVonDUFUGRtWFTjWwFh53v3LHbw5769a9/jRs9j0adnR1SFq1iCcFIflZPPBB3eAR74EzYZi7TBjcuX0evQcVnIyl8THyTa0JSQnVNTX5R/k9//A/kUY6Ld5GGGT0u6SAcPZZbVFZWV79RkGXBMZ1ORIlYWc889bSKfezApLjYleX5m9evAYW80ABCe7bNwq3UR2cTxcQmXLlyDQ/bKyiwRq6VVBby7x8IhRkPHzqI9BYN0IvA4sxduw9MTc797Bc/R0jCIqapChDAqSDiIPnctcKyNcIrPY/a7t8LE6LTxyInylM1vtISZlJDprv4PC6QkshgNkOTnWJbpOwYx8SE+jAwDm5M4DS64mKFUnLdN07PuO9h5oFVAXcs/wmvLoeDw5atDA70hi1x9pZixOKC3NTkhL07t2OsM+c+baitGhqUyDS4qSGkXuzfu8fKBcuOAT02OvTY4YOsq77uDu6vpWybDrOdDZ6Xaz+17syXX/rC6x7YtWO79e7jx45KC8dY1jcbN9Rjl6986cvKdMi5YbBKtXzU3Sl9CCc5XmH//n34z9rj0HB/X39PfU1t7HzMT3/+02effx5hLGmJ3w8N9hKqsMNvapobowWvMNCFX0m4MM+VS5fM7gZNbdlZAwkry4v0XcvdO8w+OwEkf0scijqRpsD6ukaBh/6+QecAzcwtrQyPK2zctHlbcUk5vodhWfDymtHS2QJie3dbr1nFRglSRGWjGYpSK8wUCEEnfEzkrM+6TxLyCsNKgo4gBwn16yKotchHO9QoXUwYCPbLL7/4oPO+VRq2nR4npifwjcQq0ijthwRS0O4wjgmw1oxLGJs6RnR2yRe++BrG0Jde8Chm0Cwg6VAPUGGuOzrCOcR0EIBpYQBTPdqhjFybycxMop4ogl8taD7z5FNKWLDMuCh2/jmqA3pff/11iYy4TjtR05ZO9AylYIVd+x7GXT/4wQ9loEXnQu2DCnIoMuSVtlFVVWlXyq2bdyAkqsFhwFtmc2G/fXv29g1YuC/xk4gjBjajfHTyg0e9fYcPH2Lf4DFaCeRgkHBJ2ZlZGSU+xiVKii2o7NLCAggBHsHOyg7+jIkEQ1piQ9wQ44+spJFAw6HoMfzefft+9otfP/XUM++9f/LY4UMOAhge/sns3EpyQkJ2pnSXPN4/3oAH4TT5A1Q/ucXbPu6HwxaERiPrQsDTPqOWggisuBaic7DkY+oycL+C31sExzXwgIH0EbUcioFqITof+OsZaNQ4yD3m2k0kNjrte9hXq/NacZOzoR13sISW2UzKPcp/zc7O8oJGbJ8luempieZazzOjsaKyKgDDulQzNGI2OYe6i4uXw0AT5SAc1axZEILWwDGyofHwYRUCo1OaBv0k64bTDjD8YCKpKK9Sl+bs2ZAcLL1UKSjBCvrHh9bTqYEU5uQRB8zMhTDBgxMY2/ftgyJjxLSmOnf0TuiUyfIiewjLSSsCLbRgDHSnN002uoZqnBzFDzPxbnMrTiAI7ngAdxmpax88YCxY1BzGEyY+pgFQyVxiLCqlgsHKKsqlZwTmX11TqI6m3rNvL2BuN9/Re2ySFE07SoMfrrg+49JCkEQ20rqxod4QVI9V6UXOj6mMucPPVOeuqKRMv5AgUwJNJbmy9phW4kPO94BVW8qq6+vgkM5RSgISdu/e68k559ZEtvEgELsQ+5Ag8kVdGIt5ICTpZuXAGCMSZiAzyufe0gghQkHs4SvToaujI3o4zL17avHdHxsbfeyx45jLjCvvDpNfu3Y1MdEOpXDs+pQqzElSYviocSTO64ZsvYU5CEgAaBN7w60LmCEsvuoLD1NEsAp10gmgFK2jPIyUdIUwmAt61ZPsMJrfJGrXWY65vKhEPEioXvYn1ElbwjCMQoEJ1QXk5JgpJS8hruBC/Y7tfffuIQde9QEkgFmxzCMMduTIIZIlquTwdQfrKnSlJknznRYbYJ56KtuWUI6TOR2SsZYheN1+CRe6sBxkjEakcWai7qC9uqrKr266NhyGl6GpIxTO6YkIplfwJK7WJk1O01L++BNUGsGlvvYPDf/pn/7p3NKqMNO3v/1tGGNV2BB15szZF557nlYUEyFrDHXCZeuLHaibt22RFKTwC+1ti7bS71Lp/Mp0YFgr+g1+2DMHcRLwlYO6HNylO8qKSBqCbFJcwclHnZXlWUMwImoQXTyTnZNJCthbHga85xmm7HjsCpPGSNwM3EB08fHHY0kJlM8MZjAJcpj1TtzwHh4QLPAu4uIWc4GlHrOMm1apd2zfiSXU4YQ9HkLU6MTVpjZgiBk1NGwAv7c2NjZhWjrTehGANa4j+o2lCE40xXLUCyTDKiY3u1kNAi1OlBfA1vSTQDvPxLv0ldIUis94ZXh4BJwwQ71IRkBETGjg5n06DdMao+1cEAtIpJRVCz83boV6Vnr3rseY+yZ9YyRrWvjrv/5rv2oQluir1vv3nOcQOSUpBHroGU+6AB6Fg0uD/3kxeERk1qmabHplFaBOnr0L7VPR7733jkkWgbSMWJiZfvPVuEgBBaxfmPGV2oEcFLTHAfCe3L9/n5twDhgDwXtQSsPQP0akO0Nj9EOCx/Sla8DDPJyjqZ+++pVvzM223G1ppwSM1Fo9mbp714EAt6hrsyqx9SG2eNLQlPCanJ4WYgaz0dXXNVAOJNsD94P5m2RLfXd359mznwpZqkYlI+/chYt0DmuKhgSV9Hr1G5JSU8jdJ6c+0R3CGZ29d3gDs+YV5tF+CCQNiir2E3Xder9djR0FSLAl9gB8bJxg7uyjzk61K1XmTYiNKSrM27dn1+lTH8q43rKpCW9HJsoFIVqa00eNganJWaQxfPD8+Mc/Qtbnn3sGhmU9wEzkDGamrCOYt5799ExsXD/2ccLjk08/DU7xIMm0HZElZS2jLy1KaggFLjU9+3rx8mVIJtSECMciMe+LWEEdpsKWKOUnQ0ZrKRUJHkVdzRkqGvjgPF+FXwMHLIvuLYBPZ3grwjqLjH5fBfw8GUPHr68o5lNUkDs+OqRU/5bNjY8dPYzXZd/OzE4rkVNZUtB5v+XxY4ftnTXyq5fCAQ3f/qv/IDkH2ZpvO55rSihFX9a64taW5p2IRM+Pj5k7sRQ/4+c//TGXV3KVOUfJFJWb5U97JiHWesuqVX4s4lwwe/Ml5zlfub/3EUOWnYpfcYOhQo2yBsLb8J6nemZ8rNMWxNKs+Dsn3HKYk4SVGUVXJiMLhlDZbtLT2xd2OsfHow2Of9DdbcjyyF2vBgtsfWRmVsRfUXA6jhKx+jk27lDiGadp7TtwZGx8OiMnR/XllLQMRjYa2OphwWFqbAwbwScitkSKNpIQUwL5h2EUIsl69DwVCWOoi8zkk1whYVBbCtj19laVV6j1QdHjLTFw2Vg8thvXrnkGjY3axHD77h16yp2TJz9+/fUvQpRT6DVFg2iEJWwpXCoqaeHTYQSea4FqElVVOIF/6UNg6qrtD9uDQFFW6eh8ELUy//o733n2+ZfBTBQpHfrXM+Qfxjzw4osvQhRW8/fNN9/8t//233rAUmNHh6oCq0aEScxJEjYaN212DQnsISvUxNWpGzxjuQ38RnwIOb974y1zM1PM+b6HDx9BWdPM008+br0sIyXZSjp9pCCMM2cVbqKIMfbi3Gza5iYyZg+WPSdKQYmhpmUwr1OC4RITUoSpXdeYHDkAY4Zgx0hpAIwXqXt//QrbHqBrXAvqQKMd7XjBDAG98GwVD5mYWcSe/KNaYLmlhWvXr6dLhY7sDHPS0Nz80slTZ9SVd0yQcye406EoENd6YU6KPaQxrJlc/FscrgwxRhXr1RrHOOJxh62N+rUVwVcOgLlZ++gSnolU4iKb8A9Crbkg12D2ijuo4xlPYlfXcB6Va6wSfReqMaEPkunIK1hFF2HJfClsHjIo9YwVKrJZXIBfCTAFYeyF5CewcvQSs5aqAIKtMiYRz1Opkp3Q/flnntaONBXVCYGu37xcR54n37p+gymD5yGczjUQOPcWnWOtDyQeRn1NMe9MyR4mO1U1dXYbP+L4ydXjl4bJI/jJjgmRSGZ5IRzKlphSWJBufwjzgqGgTQPHnHh7LFJR1PzkXdMSFUkREfy7Lc4sSzCc7kec/xCxBvmo8+MSk1vvtUdxCE5voTX8HD529Le/+m1VTbV53VylNjMLEq2Z+CZFciHXq7nlrii1Cs1OBWLoW0jZs3+fempOhFE+eGh8VOqXCleC+leuXxPLSMvOpHz2Z2W0Nt9VueTQsaPlZSWhPnJGuoVpi5AheSzfxtlMUv/UUy8VFhX+7Cc/4c2Kzn5y7mx8apo4kL3LwsmWYZEelYknYMBmA73ho7UyR3AO21I02XP4gbzDMxoVFoZNpTg5LS0V82AzXIQfzCKbNiWqaRkbn/jOe+8bJu1EdmxsFVqT/0hwRNdaWL1FpdUV1VOKjsfFHSs6JgzkfJ+HD9uTkliTms04duxIW9t9qQ027ch5e+IJ4paHRpQ+IwBg0MvY0i8zDgfSeGA2DZvDfCV0EQtsmlUh0A4M3BKFh3MuygAzAZjVVa+AnDZgArqGhGCmZ4eCDYhr/5wzbHAFWeA6btm+w3BU6VGPCHqxGVvZovjAwJQ8+Js3b+hl565Q0JY2sFcBDL29M2pRwJt0efwg3nr+/EWpTQ2bmlSk+/STT7bt2t3UtEXFEsu9tgA6T+PAwcOyjOo3NFIsstUNUIPYWxzKRH7jdkiAxjyWaBDFac2aBbbsFPaKizOfnjZ72o7vLwipLBbe3da2gqJiteyKS8vgxElVFD6Gv3G75ZmXXyF19uQoeW2Mm7dt73r44KOPT0IaPc/QMUvCM4SDR2ZFS0troppvMTEtbW3yK/SYmhp2EEEIFuWsYn62DjLdiWyGse/8HoZru282MXyasLv7Lgw0N7cglhfNrdJKUQH2SB9+cyCGVXI8TBUQZwEOW+vAYypXyJsqVBeBnj+4bz+N1dFpcTLbegtqasEx9jSk1trbw+Hl6g6ZXxip8tM+/PB96uK5F1/CtI79MxwPGJcNYNYBGhs3Ijo5FaVGPivGgMHzGMYEZJjexXImEWJCGwBeO4xa4kMFecvD6CJMDAPA7up8aC9JqyO0EuJ37gw5q5zVhKQ+4T/lhkZGRu+2tJmVGEn21JqAwA/sKLlxjsYNx3yNbykWunrU5rAQ912miMBDmxFP2sbD5krDgWGmOTjd8Ssmj6p6dQxlKWzeusVCunc5GBgSCcKclclYDxlcd27dEiFW3gwMcOVme/s9KprmJ27G6xn+FWD0CGlOsHH8p6wza4+2OUcnx3NnP9W12mhQoayNwo5hHWlk1MQqhKrQLZkiXxrRpgFSPrQodLkJMH4I4OkfyNQvVcM8/f73vw+rmB8CpeT090uaH7WYCUhTqk2Fmzc3CR+QXzAjUFVN2OeAdV96/gWvS7XQnZNeuakOHYc9NsyOrSoujuC63/3mV9LibLahDKVvsXXY4g6E0hTZsWdASTcT2bGafyxF9e77784szKekh6xXAQUhebODIfha7FDi0nICG0W+sIu6XMZlyDnyCOtrr1+9ZGHE+r8IF/cWDydEEj1QCpnUgeBNOZOptaXtc698HgBA/frXvy6t6/0PP4AWOV/0IZwMqQlbXiE7MZzpGRfnwMfV1va9B/YfOVIuKlRY7HS7UYdu6RpzWt01qTI7WTIqTdGNxMF9vIGNoxoefpAPDNa9cRqt4hmTLH1IHBLCHBARLQAhmOcAQen4iw981ZPraItME7MFNW0Agn3BvIiU+c9IYabzP9LY+hWlRe+/85YtZa1377Y122E5UFGaX19TMTbc//rn/hniRfcPfeG1VwT1dUoOsQ5hwN84AP+xSsk/AlDNJm/s8sUvfhHBiCI1ASRaxovAs3mcn0TLiDe88MILgIQCtibd50OcCJLs8Lrsuo2b6u0ws+ZA39Hyaiue/PhDVqYNx9iXDpXYgwya7ejqGR0fc/yhRUxy3lhXOz87LZPG5iE2f5W9VqOjxNi7zkgqsChbkM+mZLbq3dbZ/qHR0rKKrp6+6tiYsqpKi50TM7MN1gKrqpwZ3tZ6NyczY6j/UWV5GUcCIeVIGBEAQA45Bgj5lpxAgmzwzATB6CQf50VnYgNHSND6ySskCqIsA0GaUSOqd5HS3IDYEGhGUZKWmtOam/gABrxOP0Kd1rzlJHBLHEPDYQePBsEAnnfffRsMNDVacBjMqcIkXrTnVb86ja4Y4p/oREvI6U1rvkz/qIGCu4g9kX755ZeN0ei6u7oMRITMiLZt3cE2Yq8bFyCD+RsbS4QIKjbQvk6d1Xnh4rk/+/P/Tg2avr6BsAZXEjJuLYNqgU/v3Oimhg3O08A2An5TM4sh7pgU/OMH99qsnBQXFeFhXcuqvXT1ir38JiooEoeAqz27dn/0USh5YaTg5PCw8mEpOkDKCwvRVlowNKZ/z8OQpsKdo2QFfjhOxmtE0lvJlZverauvhVtosbtLZVzOglfgbdeeve++8770AsG24aEbUoCV/mFJcIrCGdORc0PMGLiOtY52PuARG9Y7MKhdnyB6jtaOVIUCZDy9FmEG992MmvLu653YQpSR0sUIAclwEn0deOBEenziJzqCnsJUcE7ZuTAi71Iiq3nBbdCvh71usnEMuLF4wItuhNpA1jV5ILGJYopJufkjc8OG4FdxJosk/G061FeSKAOhorzYu4RFNtnC7Ix5iGVJVAGAnXCdUYBH3M6QPYk5qQjir01vuTAcQ7OgCQzPsKUMR+DNT/aTeNiECDAD9Dr/pDApyBTqGCyKRFtATbrbSFkA8Izf8PDBEyemRwYTk4MdL7SGZ/Cn2dH11ctXpJNqRBkcpXVUqbJk70X+hiJIJHRqVt30KicBM+LdFGy+fO2qVUeVHJDPZLMys6SGjxU8AXhp4pZEDUcMVulGZCOSClnYyiyuEJscy/5TbtWTwMMSGBXxwMMUgBxf7UUGzIcnP6KQEZ0/euXGjdLy8rvtD3Ly8klx4FhbdYeGjJdwkb5gcBQVih86uNF+MoFwuRzwIB5GoUGFUcO/FVRM4pVdu3ZGQgnjMjYxj3lFUXO2FDFBL8IO7a6D3pudpRx8tS8NTmAMqkGLM0mikZrbNI4f4JncWUxgM5E4dKHAeAgUy927d2gJXWvBu2RfkpXoxrZ9+1quX9cg9AID0bG3Hs15hoaIbuJVaAlG6swMOwwLYWNMCzN+8q4zqiCELvLVSLUAbIwUlRQPAx6DaRxWKRDMQOnRJ1m5mYC0nGXukO0Nsc4BABvrhAl+g3sf2RVA9+rLjAtFU3PzsYOj1NHSaqwg+9DopGNEU5NSB0cG7ZnbvH/fcEenkqMDvX0T01PovmfPLuyKMyEEP7Ot9Q6frmEDqqNDRiMmHcvA1nBDwC24Drdw1TZGks24HHBrTcN+Pmcl2C+ktBGTcnhs5Nvf/o7qitxCC1bid+SULfWNb3w9fj3m29/+zydOPGbytS3HxLehcZOTlQ8eOGrUOJyFzW2orArHpo6OjtAqYt6f/vKUTtHI+QmhCnhCyOiwOQQ+0dc1Xw518Cr9aVAW1gAcO7LOIG5pvkcbkE130MWHvvUi7NED4Mc8lB76WqFSW2ltvTqqyiBBU8gH+XCOTMIBTChmvS00DDWcoB0RHA12dXYLWZjKVPtQMBoatYkrTBbaEXZRgt0ONE9+/vOvah+byYuLzqeYkLJidaAvILE9/5kOBE9ws0PJkBTZp4bPHHItbwpUPjgqsutAHZFwqqZ5k/Nj74iHOeeghWTaDE5wHUYFlWH66w7IsZ8LLOcmC4fJiyfhEOSYQQKwXBoM5lecDEJzEPPj2LFDQrBWGAgskpEI/i1kAgyN8Lcoqi4MLcJdWbxBHAV7IInOuYQC+3GbURL2jNEdY4FPtHDgLnoRPeyHIQ0KBrzLmTep6VGwzNqvERE3sGnZ0ICnBW/5SqWQPmoZrb3oLfOm5/EJ01QWgAGKpnnXMgPAx8fDvmok9rwLck3J4HzrveaIGSIzPOxU7Nn5hVDgISevrLQU/7PoMrLEzSj8OcYYF6K6qpxE/N3ffF/pORU5lbZQkQx+kBJCTLhgW3rsGDVrvJIDqSCBGIJsJxXHCQWNjmbwMIxxLLt7erm1DLnklIzVsVFsk5GWZhSrywsbairhp7Qw7+KFc/ZlSV0+9fHHmEeVTxUlBZ0l1MgEUavHgZ63bllS7iV9sAF7DEt8aB6EKPNaRXkZuhjvzCwGdh7LfduQ5KMq9dMYOetNCgqM6Q7D8OgkZlgZAKHu0KussgzfAp6AUyNIgGoogu3JprUyZIJGbMYOhA1ZT6G2t8GI5csvxAQ+6qU4oJeU4gyVU0iOagPBMpBxsEK/xMFavCr6i7OqT0iDUcfaIezTE2NH9u8mxtNjg3/71/+FmBUWZJcUZqnrn52ezEAvKQqBpd6ebm3u2Lb1XltIw33/vXeihuO7776D2GMj60RLsSQ70vhM8k3tx6ITwU2Y7Wey1gYwIlFbU88IOHbkBIAtilp5ZFKwEf1KkESp8ZwKrImsoCRV/x2fNtY/2FdX3YDtyIfy/E8df1whgpTEBHgUwHvpMy8Xl5YLZ3zuC1/CLhZiHqt83BJDx0Pln0PlCF3s2LWL/hwaDAvKXoT0yemZqZn5NJ0np6QqtFS7YWBk1OmnFmvu3e+oa2wsLSt52PVQ4k3zrZszQlz7XtpQW6ZgYm9XR6jpshD2bDF9UAWpcKcJ7O/+7u+ilpCxkDfkt8JrQqIRZIW6STsItkEUIXnrjTfhhwrDu1LB3JHxJqGTvmAuVzTUXbx4GSpOnHhCmR1RVTaxegW8f/EV29c8rzachAcKAnVsw+BMk0aUh1gah1LG5Z7UL3OBOqDHJfb4yhDhQOBaHjxgaBk8p1/U0RQ21S9J9gAGhUAD1KZGxMBMgUpqSNFLDSd6qMmYp0dDUARAZRmsL/DJgjVvPf7E8X/40U/SMrJfffV1URIHM1Dun/3s55UIoKanpsYqSopD8IiBnzxTUFBq73Xn/YeYCniDAwP1tTXMOHa2kAB6YWMfmoX4lZYVm04IBiANE3qjOhq2AWwUBIbhayA0MjVBlRuLoXkSXRg0FBlQOS0SgvU4OjbiTmlsKZHBIQZbUVEpMZ1bj7ct7JhFUPbilatwKJgk6q8KCisw7LbODHlT2qe1o+9S9ACOC2VzY5xxQU5d4JDFiGnLouesO2mQmkML2gpIUW2l3/Bi5OOO2cV4KWU3AOYng3KH3gGtX6HOnOG+ax9goJTnNYsizrOz6qdfMMYnJa4uAHDJcDwprqlNsXY/JSUkLy0yy+SorMopLSspS1ZaamERnCrY0B0W+ro6naEt5eAfT/Hk0jc0Qlu9GLwGbc4jtmFjRkL2E0+ekHqOz7Ei3sYGVFhdfU043C07Czl8ddZPhDQPDxwoNAsyu6kINZJF2f1j+kOjeUjGFAaOktJcYmgG+8knYVuYOYCKhBMPCBwY7P6D++RLiL6MT043320V/l/NtNazVlffMDI+plaV0wyU+DT16lCtId7+7NzC9Zu3FZChkXQ6Mjbh5PbxxbHyiqprN26JJ3/ja1+XmXPp9sX45BTtyDVnapWGw8ALwCwgShasiSWlpTtlRX0J5kL/8IhaImpBXLl0QczCKqhZzSYr8zqEl4UKfYEKBw6FwL+PxVwCqCzGjh27KMK0FEtJYfgYxniRWwwFtlUmMHNs2NiI4nLceReCZzjBkzDJioowdtA5WoMWSklykRcJslmkrriUXGRkZL7+xS/ad9gS2cdpIYjk6o5AqbdG9777zjswic937tqlxLiwgtUbS/M0gNUCpARPV3cHubPLCObRnYV95Oghq5ENDVulqv//ePoPIDuPLDHQLY/yDuUdUIVCASh47x0JEAS96W6y/bTTSmM0OxHSxluFQi9GsdLq7eqFRjua0TjtdPc0m23JZtM7EIT33qO8997b9+W9L/YGouLiv/lnnjwuT54856QlE78BFYF4eggFRYQNrBfojnZ0CFuEgHDZoiYqA9WRDsiBCpJjzz//wEobPAhFMGCx9AoOF3LG2iAspNhSao4zs4GH3UBiasHuKSnDkHBit29t/tVv3/Rf3lPKxEblzTffeP6ZZ3fs2PbZZyekTtlDSWupWbmaSQ0/rW1d+w8ehliVhVgzwnaV8xcKgkNSUzJUOapdvaarqYV/mh3vbge3IEhkDzfSxMbaRwtrptAkoR4+cvS3v/r1li2JyI64PMpPPnG0pKzCpkIOGBrx+bmSVr3dsckRujQ1I9PZAo761Zu/UGtT4kdW7lJFYLPzCs9fu3vvUf3M/IJDLd4Mt9quX7uGx4G4wWR6coq0E9dIuw2X1aEaUnxC8tx8XFFhGeq45cAKe+/2rffe++DYk09QdMqn2gWtWlkTiZdOcCuwNXp4oE99BTsNjh3RjM6CMEP00kYI5xPRMwbzcZqEghBlAjYJeNjs/Nc+E/mY2iwSpNGSGfrrX//aopOWnvzll6eoYhTRBqVoD1QmyCjiuAP/WD3RN6rWUlwkbHmIcCO/jcKjVm1tmptbuNVoNkwogITUU27IbSGz8GEhxhMADGEgnfvioWXRu6wxZjRR4uvpaON0m/IrNut1hNHXt2JllT7Xbdg0EsoPZAB1SXKao2yXBQLj9KkvsJw8LoujubOqma36ByQHlupAOsdg5FpuAHN/6/YtLHtoN1Ncgb0pQNFN0hsgynOCiaUBDzx4ICa0x7KqyrTMDJMyCiPNcy9CSHTl4idGa6c9ZPnS5QuES0a4J0BluzP6mYP79u9BkaNHjlkHSQ38y6oifYaGEGvgjRvXKBzApKQ4dM3WDN6IbXS3gCgE3+r2xJNHSZZtLRn3EziRmADS5KAyTTiBSf3ozRydVAAAJ0QXFF9IuigjmRWUw/XrwYplkNJU8OmnwaE+R1f4tq2jUzij0jJOtCzEhXmFN288FMg9PDbsmHv12jUrqyol0vzo+z9oae9AKK4r9+7hE2CbERsTg1VWVgn/e+MXbx596il3OzI6QCjZScUYiEUsGgYOzY5Ce/DgIWbQIL+gxHF3Q2OLS7vh8NGDu281N03PTKxbvcKywyxpaeKbEE2ao+SJsyAE1Q+bltm8eesWidTvv/+hpGEH+HLnyEJ0qWW+MiIvXbpicalvaqaOhPCNDY9Z1NDX0I/r6xlXiIUTEMv3cNtAR8dgf7/LoECL4qxE7MRIg3avAA+DUexRyBEUMFZbLMRQN7VQvwU9YITgRaULYYxNVECGWpjVd9oWlIJ1xkacrjqEzQwXGM5NK+OTIlYyK/OlP/pDxd0F1Qz1dZcUFrgD+7VQSmVpfMIie8X8SVpPp5PTiSNHjoLGfkufJMdwmIDuxruESvgQATNDCoh8AlHI1P/DLgQP/XxYyQSA1yE/P5wM3Lxx26EPnqN2XS5r/0d30/jTs1MudjZtjOUsy1YemthC/+E//IejR5+k/aHj4f17vtAOGelZ+IND2nXNo+NTGVnZvN8fv/ueCoCWdusZqNisCvvMzM6J3ejt63FPIQQmJSZKEodDZsdC7IJQMSfKUzOTy6qXV1VXDUYKwTY312dlu++wLDUtqbVHMt+YRN/6hsdrN+7Iyw95ZqZmj/R3f/d31jm0QTPkIO1owSq1BBIwMFCRGkAIXMEe8hsXJvXAh7T0pZcIiRDHv/3bv6W8iNyJ9z+ygxIqRxW6LAmLUA3Ib2cbJTrhIcgUOhMZ61h0W1paaWTbEq8bl1rkHcHQ1l3Yw1g3bl4DoQ8AyDbsIS5VyPHPUUGTUmT+Sy+TW2yjB5qaKhkbHorEFsdabplBajO7itmxtemQMa5qUoesWWl5lihKxxwN+r3vfc+XF1561SHG2Hi7FYW1BAwci69qaqqM1dffHT2Sgi4/6STENk0JNw+x8l0dne7Nlrzx9NGn1BDgNU/NXNiWmq442rIyzBzu3tMHhqGGiJC/pgAk7Iol4ByEhtu+b/fP/u5vo6sUekGaufMFRuK/Umg9ahFIJJMupkY9USYuN7dbuDxVSJT0NjY2rnwEZuM+6u51kjSIIR2/CNIZGOrnoocx1PQuBkACwYmkgCxgBlPTD6ggiiYS66NDNY+RMirIWsIAVtGJjx5IdwS3s76gvp598brVBXH9ZO6eGMjD/+fjXUgYHRkZH5kk/u5TyE7K0YZ5MTq+RDMPDTQ1F7IILG/zc3Gz9m3TcyZue8+TAODBwfnsnBBgoDd7pPiEOCR3IzUYFE5et261iHT7OWLlgydhnsKxTBJkZ5QsIURhdohlBCSjP0x/OhQLMhF8jsqYzd2iqOMJDHjRx6G89p54bmqmGZUjGMOE+ic1HFGSL0FLOVDuJvvDH/7w0pXLTGQj2r1zlvOjWLegVG806ZRU4NgQGSWPlvGBDfCAhcdfeEYX986Yhck6Okc+SyxgFJO1B6CyXv/G16/dvNHR3aUUj8P6jaWbHBewQaUxNHe0ffzhR+6IZUzbSHDeOBDipOdDcX/IiqpwNb1U/nNnz0unAbx5idYwEEWKAXw6enolQxflLtUJEQ4GJRIvLHJk8AcbHW5r16/rHRywSIsz0YNkAyjSElah1CygFCHgBDZg3im/D5E3KXwCG/ZF2UtDDoyhMbNAXc/VAsbzaAoJ5BR6eVXoKOzhaJfzxa9GZw3gBFii2ENXGRkIahmjcyATCWgJE1HTSSdUGe3BGsbqAGYq+U51AEbPYCaeABYXymmtK33qH8wQjitM59Rnn3loaMsHlwcGMDvKCsYAH8XP1PQUmKHCXKhQE8fM+hckYBYuXMC0R448ga9U3gQ85BgXPDaTNCSuwK7mwsfM1nSktLyyqrGtJTM3R7SAfayaMBzkSFlcXAISdcuXpCh7Omx0EAKb9oBAagdUkMwPRan6gi74Fl3wA5BQHGza4GQJKpYs796+dpuAOFDyOizBP1nAtN510ET2FGuyqeAcuH7tJs2vuHBFeaCsCC5L5PZtO8HTHC4DyrXyIpBipo4vrt68LaXE0dDVa5fdMNPW1irm1vJx+tTZb3zzdaYVSs2H2gN9QkPnF+PB1ts/XJBfBO1trR2xcSEu2ep8924IoCdxDnZENqOFeZnU/Mw8wYFwawdQUQS5A84j950DD3V0hWM5R2F4VVm1WUM40nMkowJrQTMnwCiuH7oOI+GcqK4zyvQUi+KQn5QfI4bCzPT5h3/8J9L5EGvr1m3QhVV4ChQpkrDKN4+1YM/U8DaDCYSAh3ALLjamInyHYarUusyRhGqK5/QPFaEFzYA6/AUAQFl5QW3tXdjYIhV0UcThpfKMo3jAG/f2zVsAgCKEu3bliv69BX6EBieE6BCiTNkXsfvWFM5auPKuJ7BBiKDIi1GhMwpZQAhLnlXb8TJup6Z45fh+9Hzn1m38YFXyHLbdSuuoSQNo9DEjDBAFiTxqQNs4MORV9C658NfoUKGxn8gphFCS1JTAAeJA0VEU6G6yVmeCRuKAZL5eJCPmAloPjWIsEwGJh9hfn2HiCUsY31pCRZqy7pGilKgPabDk+lriz49rq5CTm+4eBr5Lq4zQf+sIoz9mfoG1IF0kJT83aUm4Q7CnsyMvNzM9Jd2SJHbHCgVjerCdYLWvXb8eQYVlCnTBV/AJvHPnz6+sqd63J9w9gm0QQmFf4Bkahql0e2xZuabPhQVOhBDf5eR/dmr8/JnTGzesjZJDz5Bgq4+IOBN30Ab81bdv3RXkKYCtqKTYssyw+eN/+ScQTkHBicnCs1WJJ3HVmrWhTtcy5U8eZmclKR/sUA593caH8ZCAgxLzQ/iVS5dpkhCLlZVFgsBswWaMOTvFw1EGRgiIpWrQVGOQ68GUqRr9h+NR6MYNUfYFtBa+03qkV4/+RhHkIamoWl5eu2alKFubpIK84rKwGR3nRW9vbXTN0xefffqjH/6AO0FZUxVyitRnycycVzV8amrblk2Mfv3/9Mf/aGxhU+IaX3711f3793mIh5ZXVR07erSzvVVjiDaWvTunp79KEdqxyTEzGcG+9IXdFTLTvILVmLZ1dQ1PP/3UO79/+4UXwiEypeY8CNg2kVZQl3EKH0iNWLp4d3hguLtzpLmxyT3BolHN1/QrK1cMjo6oIaNYMrf0uKuOE5d8/sVJKbfOZRV7copCZ9lsuIiHW7et1VFwC4+IQ29xsQLKZWiNTYwMM5omHhWXlmXlZnX1DszHKX+0WP+4IS0zRRRvfm5mX3/n4EBXeVnx5o1HZ+di2rtHsSD72Hz/83/+zzgePBY/HIk5AEY9oWXYARcXwwy9RvbQ+PXXXxftJzKB2S2ZpjA//4XnnqP+sAX2ZejoRw9SLr/1re/oxLvU3Nkz56keixCqEQmGpUmRWIWcsQHkNDe0MpcFzGGA+dkFlUbXr11nPWgPVbqW6Z8wCJuhiegUPFdYXA542TaYnvbBlzQFIEGOWGDAbXjXQ+pVjdTysjKhpTCWFAnFI954lxXY0dlNougLL9IO1g+1TZwCYFlCa/3g8ayv66lZvcbZX4gemZrCvpzKMrqy0oX5xQmpEnY5NDIpWSfgITWN/eFkkJRu2brZ1sxS4a2mljbFg5VWqF5R0x4JIieKUeMAhDiTtYG1cJHGjANo0Zs9mH3zmz/5SeCf4UEZVM5/WQOwHbmrvMMKCrGyVHWCSciejT5fS05uPh3EvU9dWhXYOioqrVu/8dqNOwOYclilnbi09Ay6UoVTiiglMcmg1EHQJjGxnDdWBdJBEWMAwkh7Mupxi++2ouIK4Q3SjAjbFDGACRTiRvWvv54QXn99tPREy+hfRNbYQy+asoc+eA8MhvB8bom8TK9xiztKi2OtQotX3DnHP50U/AbC/2an5/QjAXSJ1XcppZFCsUyI9J2bnlO5vK9XNGqqrfiSDI6qcNtXhivS+rpb29qXJFvyk6L2tInAvEWCksUwNCPSoBrmZ3shDV5dml9oFKGfIlXwDAMXK4K5qbUFLXxoOhE7Qfanpvk7XSHtJi8NotwFaRgVerGopY5kWcDgVv+mTLKE5kv+0SfetjtVVllx0/nFmdHxibSMTFBt2rLVu1DCcRuOXyYn7BnobnBy8yuKApNSEe49fIBttu/auW7jBisKaiocYWpgo85cUy0P0QZVlo3tiif7DuxXdNl9KUw/bbZs3Vpv9XD3+XD/9PgorsNgW7dtUUYMzOxj8Phy4/otaJGz9J3vff/6lasXLl+5cPWyOZJZbCOo2qQoJGYisSWG2MB6z0wEv3UIrz66d1ekuxnpDZuZSG/vQGDEsI3MRik7f9yiH0pp46Ytw2Mhk0HClf4xJOE1NU5NXRFCjEEqbRyMwnj10+Wrl3bs3mF5Zu0DABhMZzLLmSrWghBBjkM/Kt108ZmqLPZ7msEehqRk0A6BaDkYsC0EIVvNwmTVZBFKwEBNNEUyXVEgGkMXVOtQSzqQdFvFPadJMnPCyoKL8S3xGR4eEdM10tzsaNeGnGEEe4r5UKHckAISUFyxr917drq3ywnA97733Uf3H9Fs5AsAtmEUVE6OaBx7jzGl391tV7VqJaeGKYcso6ZQQFaYu6MAUk/cxibCNQt4D84xTHtbC0jMlFwjBEUH+SYCRyAxC6kj3iIX+jGoS6+dJOBzp0/2Y/CPOhqA88tTZ3gTiNL6DZv+5m/+RmTe2o0p3/nud89dvubU2jlquC1iRFZ3smqSLsPkobh17VpIx61drWfUcRRRVFjS0NCiz7W1G7du3uYmk9NfnmT1lRWF0mcOQ7t7ui3u6neRynsPHmVkFW3fvrO6eqVcO0gT3aGIH2bQg2mKH6BOESszKwONROZMT0wfffIpsRBYFLFwCFca3Xj06NGd23cYQkoJZrt+9Rp1yqkH1SgLZqxFtGFJN6SVswwOMaGzL1SGQwqQTTm3GONq7bAwuWZ+JLAx6lMFP/3xj7/z/e/DkmNYjMEC04AUqPXOrGR1YX6azXB4jywY0btWNHJtjwpX2IY7QKqfmxZGOGbHxrzudE5vNgCgBd707IL67gzawoI5UoyH790NjhI0JXqoaQh/SUeUXaPGtKE5QJ2r6D87N4tGQmvI1MZ3E0TfqMoiBVEh1Qkg9S9NSAQIzvEKvyTlwwKx3JOatpYWmLdI8RN7fu7M2YWY+W07FV2V0B9jX3HgwH5MiPdMxF/DiRCjYy3i/gqssgdjJ9jv+dUNldy/0iznF+a4BHAg76O0Q/6pvp6g35g39hhEDOTEFswEFiF8N2sLKBjgHzwkMYpeTEKIohzCPYqyQs7sVHkkzVfYhbMveBNLbnaBi1Rwbm50mIzcqs/Z2CzNyRW65qoc28KB+716k9uyYf1a2Z6N9Q3Sb27euOUeOkULJEk6McZajCUUFx5G8T4eelxYUqywMjSu37RRvLGsgMePmUBtYBY2awXHXaTjUX2DAiQyCrr6+qgUvvy+/qEkxazq6rn/sDeP842bro3vGhzosWem02gz6G1pbh/oF+JfRiqdI+EFKpli2bhxPUDktEAFXmLcVyxfLn382edfRNwnnzwKUc8885xZOxGlKPB2dU0NkcFLbr/BvS4ywlp4CUuJi3EcA9QdpTuYH1G+hXyaBLaZ/uhFUznlJmIIjVKE1H8lAdvXQrJwzVl6HGfw3rkeUtoX+0TwAR0dI+x3bm5tTdWRJw5VVS2TFCJC98bVtrzccK8hty63xG9+/QvxJ1//xtcoPp4R5tqOndsiRlJDVeWyrII8ZIueU8jUtKiousA3ZnqYT7VQWz4JH1iHHwUTEGx4scDo591338EixBL3kCCxOqgoooZkxsclpC4ZpD5wDJaNnhXg2kuXLshTxE/rN6x1/kjMFEb3N0hsevL506f+61/8b3bzRMtpIEpb0n73zjtr1q3PyFkoLmcNDym2oFyps1TXBblrvb2lTeUsgiEs0nE8IRRYgX1Ly0oUMpfhgfwgbG5T26EM8JQF96ioKuchkgrcijClptut6xWlxVs3b+SlEwvkvNiVFmnpyjXYUpfb6uA2cuvdsBgoRrFkSVQ+aRbMz9BEe7HOqGt5eOedtzPTs1548TlMLzWtPpIoQynYZRFLLaHY1DIyU86cPSnHnIieOXeWHGJfR4EUrs4dQDe3Ou2a9n3f3j2MdUlwDNyLFzs0+PSzj/cf2Ouf/QbdhCNBglkdpKACVjn8xBHqDz+RdnpWz3jOQAiE22gNNPIQlS3A3Bh6ePutd1BK4aOS8rzEhFHcaR8vj7ywYGlJSfHosCC/4fikcADNYZ8t0DU3h0zm5i69efN2XGySdAtmTXxKbEZqinO9ru7Oxw8frahexnZKSkpcs6Y2LiGZCpYoiXaEZOfO7dYS+HSRnjpcKnkBG1pETo+MDqWnJF++eKHEnc/utslIo6G++PxTJHAsfvPObWIDvKeOH29vabEwmCO0yxrn+HfSTRTxsDSJsGUXQTuockWcw31ZPnogrnanwvY8dNyv3N7k+CS1srJyufIgP/3pPx04eNjGPX5xwVW7zjQZfRz0xM32kuLDQjDpMJeEQyPFx0zxs5Q77mQbA65Y8UBsUxawG63hnGuZnsI8RgeqvyD0ichXyB7xK5nSG+6llIMOzcvznKqlcTAzzKCvD3ShIBZS0NZVc7SDX/3VLdSJ6rEZ6GoPUXDsDwsAIH3iJHakpoSNRgjsnmEMucihPC7c5wI8YESQNl+zcgWuMJgsFRwuwKSgMBwBffzRpxgJVJML06JrGhuaf/v2O8vKysPVwu2dlStCnoAoSPwPQhPBsa5WxV2CD8vKg/goG6WUcFR3c65z/1SUlSC0KBQjiugwL0gwBZCDx/rkcElZIVdz4kkPv/HNbwrWdy6EY/E5j6zAG4urKVs/OIahjsZngwb9VVAApOS8Jc5kT3z6Gai2b9nKimp4XPcv/vRPf/3Tf3KHi0KKGovWE3AvwdGhXH1jMD6gHQbwmxXbQEo8GRGz0SFQbZRf/uLn9vAqK9y7fYObXqQ9tHZ291RVrnDJlJNPdFQGm8awaXnnnXdNDRHJ7zPPPG1EhQ1gskAUfkj6d91yLB+SGFa+YcEhPX39YVBVtvILF1ct0G9YjvK0nWDrGAvBcaPvlKfduEQOhginuIyC+uYW54F8vQ/u3bHxYMqrb+PCOivQa199VR0mQT6PHj8+8uThM2fO0fOmLHkU/idGx5Rfh3Zq2SIUdWew4Rgx1L6QiV17QskHTgcqBRtz8cIApQFXHLeYk5mFT8gCXHmFGmQrHDn6BO6SkSkudWV1VUFh4YN7oaaZGAaNkdvU2ttvu5cKGhUbUHDQoYQTGO55moduWb9xA9R9+vEn5svfIWVF3LqVy0fBxBACu7Bg7eBpApV1VLCZO0euXr2OCY8//WxC8pJWhfnd0zmQqGCrvQd8Mh30wLtsNUxJKZiPmRd0oR8aSWTFoQMHHFeZudLdKjtJk2PfM0ogFm+w66LLtnp/apXgCms86w3Sgo27Ya02jtafffY4ZNpIYzmCo6S522lefumFpuZmedX4y3ZFezc8WOKxBI1tA6DWxaGD+5yWOaDYuX27w/EP33+Xkj3+zHPQ7maPpw8ebu/sovAV4aAwVlY7raxSzGD3vl0D/X1TwTMwzlpl77p0iTCmZYiOaJGkiwrg9+u1qzfAvGFjcPoaGkLCcjm/mJaabmtnA0AAQY6aoKJV7BhtYq1ilAmFQPWRRBTX7PCToUp4dbWE5gEKaffuvfic7rI4ikEQyEobySBnx4CHph0a4bYIN5FduXIN0sRO2MkyDa2JALt17apF6tixp2TI3bh9Q6UbkeQff/wxr42ZQG+Yz/i4VZ76ojnB5iHYoBHX4dWrly+rHcLgQ6Om1pBp7V5OvmHOfuooYCMtg4P/tddeh3920dBcuEEyUiotC9tLnzVxmRhOVxyEGgKGjx07arKuh9OtAH1jYTNCbZNfUlRcVJivPgqdadaTE2NyCAUjQLVfQ3B/TJzaBRKfnPXB2/0O+UKxcgAif0P1dzAz9LX3RbarhV59QrmqpkaIsITn1k2cbItmk+Pmn0cP6zw8fPjwL3/5S4TgKCotL1ucd9PLyM3rtypXLB/sH+jo7AJbckoqurBr2QM2IbgdTQXl/+QnPzFr+HfyQ3zwBs5Ha0Lhv8zf/fsP4nAUt290La67YsZHhrt7BzhhuHVAK2aBdLMtkZhit7XmrVPtgxHiojr7XmeM+QVF77/34f6DByleQY8//enPXvnKy5TVnXt3MicyXUsvY0w/nJ6yA4I5sTBvvjjzj/7oj+oaGj755LMdu3bi5Fe++qpMrbMXzi1bpvbAiB03xlMegHJu7ejMzW8Wd5A8MWmhMa7UUGaZzTxG5QpxhXCPvMSMNF6Wu7dvqYCnyI8p4BnXPdmG5TslHny8clU1LRSbuAghriCwjivsg/p9g2E9unztsoidB/cfXb95Q+imiGjhvoilRCkcyhRat6ZWIpnlxtWAj+rqsDqui8a1IjSc4mo7nOT4xLpHYetIDOkrEEAXNYVLb98NQsT62rBhU/QOU0ij7lhlCSKT/MCFyL5UQzOsS2rPjQ7a9hXk5gZrTMB9buazx5/mWVCyZHp+6t2337cFXLGsYGJUXl8wUhVCee2rL1OOjx49wL6l5SVr163BKzTsYL/EzQybErDKY7DoOn8UFV33uJ75To/j9eCIehzqPMqXV48Zt9WsWcmHwX9/4MC+4qK81JTE6al4cfOuGRKOuW/fARahVD9mlqsKt+3Yylpiokm+xFV//Tf/3bJElox47uwFsacPQpDA6E7F8jrda9i5Y8tamkmw8sLibGtbb0Nj0/MvvLRuYxa39OZNW8fC+eDAth3bafz59AzqquHRQ2VMq1dU0U7KwAufFumUvCTpxReeDZVQQ/2cKfXrliTFHjqwV3nHhuYWN9kmxgh+muaSpYRkTaYlJ29dv966W5hXPD4xthi75MP33t+5Z3deUfq9Bw/QEcdMTyr/kuq4oKZ61fDwSKzw74VFWoOpykYcGe4nYyp/j4+NbD1wYGF+2uVXacnFsXLW5udof1nnwrISE2LWr1tNJhUatZ9jjx48fCgmdiYuMVaB2wf1j+WEZRcUPWxsZrjYxkzOhoKn6zduXrNqJVcBvf/8C0/zYSCN429Ca3FyomKaAqsYE9YGetwXHEZR2vGXlAYPDUW/bn0K+gqgEiWVnhEroNnS4uDMsQZnLY+UvfjpU+f/8I/+VPVrkh9MsblQS9aV3UtzQ8LrkiRZ086gFtMy01ZVhwqAPb0Dahyon0H1izc1kEjT3OwsGWvLKsqHBvvk0UtKtusbHA5hUUByRMgf0dDc9NVXXnUmIDpLEV+3brH+lfhgi/B+jatw1J+QnpK0fk21aLzHD0JC8OR0zPGnj5w9e94tS84QaXl397bU83+FsBBeW45PdhgqjAwPMT4cp0Q0lOoZsw6dnUvU1zfn5ORbSKTjs8ZmKkLF1/u376hSlJmfZ0UsLSyQW/Lc009Za4sLlg725znVYjH0DfROTE3TX7JqpOKkCOP+/9/eFet0iVRzVwgO4RGhfejTNpeqZmYsxsUr/Z7phhL1iDKymloVKs6yxkjaHRgeob4dChMNJo1X/Ncaqfq7RU7xE3L6uCHMS9VqpqjhmEGeiz7IKwxpeXqQ3mMVUdE/Zjo2xT7NnSZOM1RJSEtlqLHM/Lo4E2qVquNhBZIaK53ZYirsJDMzt7NrfHBoYnK60657bsER9k0HbhJj7D/v3b0rC0UFg4QEEt0RXaXUjGcvEmQ0rlpZg4uKSssaGpvRDrRVNUVY0WUxIseM6AlpMiuLX26m/X93X9dUckJsVUUpzZu2JKG0IOdxXR1+WLt6FbQ4gBapaHWn9A88cThsgWRgj46IvVJV1U901Js//5nAfWHEYZOTkKh2xI2r17yrkqZRrl2+oib66hXhIAI+ZRRx28xMjJ9ysDs5rgd/CePWLZve/vkbtq9HnzhMX01MSl6a8VzNgDd+/nPRUjqk66TgWZbs8DJT0rgwzIWxe//WLWyDmq47uHbponXaJtBe5rN3PmDHCKNwLSl1zRHFbq6va4yPTbh/98EzTx+3LeQQ2rtj1+0r13jp7t4PW/GRklL6kJ+QxZ+RldPa2XV4wyYU5yHMT8+Kd4NC9tJMlwQxITtdWNF89/4d+5PO9i4mEYv/wQM3tBSKZ0WOmhXVavtAJhYd6u+zUrh3jwOCpPz217/5oz/+FxS1GzSRRnzg2OS4bCv6H6G3bdluUQBM4Of5GNldrE/Lj5MTlp+bIq0a9L9jblXaWsRipWWK3bNO79y1XYSxK0FgCUIsEHQOJUOr37x1HXC+M7Pu3Lr26NFDPvjc7HQ2fUdn++qa6mgIbEdb51u/efv551+YmpzOSM/MzMiREDsXOzMyOZqamXb30Z29e/cnxql5k7SuttbJmz0JJfr5px8XFxXw7PZ199gNNjXPJkcyiVUA5BW6cu26NVVwxaEnj2ChmIT4e1ayR/WratdQmJs2rJsUI9vXOzM+PDczKam4sCB7bmFKPt/+Q3uEIDNr9uze5jaCB3dCJuuShPgYFVQcJkxP7dmxXawpdeEuu0KqIXIzjItpXO3SWNfInTzUO+SnwZHB9OzU+oaHJNTR1sH9+519jgkdnJ8RQ7l+7TZHg/cf3t+7b2dPf1fN6k2ffXl1eGiEoDmF6O1se+rI4Y1rV1+9cpGhqQgKmZVzUlVdY4Nf19A8NDwaE/8eR5sTYH8J8vzCgkOt7s4OV+w1t7UfPLifaXf69Cm5WIr1q2u+qnaV81v5dVk52bLklbX4ytdeQ+sQrZGTo4626k94O34wBH9y1oQUeVExxQVfnj7JygybgaT4zOwM0xkdD6pGYVIRkXv2haJedH5+XnFGVt7A0Hh+4dLs3NyYuCXOeItLcweHw40cXA7WiNp1m+cXEyamOGhWCAYOx/FxMf0DimYNWgfh2X8H+/qk0+BbeoNU1lRXNdQ9ZjhOjI2cOXXyheeeoRZwGkVkj2Tu2JK6ZoEBI1ruPDc7syAv1xZRSh5Xz669u5h6NpzOTER48g9yUVnC1q5Z5cxk04ZwOxvBaXz8KLGmhstGHeqEuBiszkkhRtrlpxoLd6mrf2C//dzzx6DiwUNXGj5eXbvOjkIkD31y4rNPQCK/xL+SgvyRgf4rvX0K4anqIexg9erI5iTiAOLYNjWV5ewjCCk1wstLPxNMSzYCmZSN8TMvPs8JbYVitpEa/hG5BzIBjjxx9Oy5c3IfZJwFyX/44Knjz9DwlJ51v7hQ7WAHP1Wnzny5bv0Gp9scmspp8AwNDY9t2bqL/zjEi06ETDy10UpLi2nI5rbG1IzUkYkhG4PB0f4NW9Yp0s1Yee/D91il1mKBErxMp8+cU8JEhRwFxpJTs1xz09reiaBNLZ3LKsJ9mvkb8p3b4B/T2bvnwPlLF7MzYpekTr7y6tfEEAPDhpxDrb6xWeU0Hn2VGJdMp0xPzDU1t61bl2vp6erptbfjynrc2KDICSrbHXBbrF9b+4//4+9XrVzNzfX44QPRIoaw1YGrnNzUtPRMjjl2S09vv0wbO9633v4Ng1lBPLp61YplcpE5+yEwJ3NpWnL66OiQ9eGzTz+uWFYll6a4bPm582eef+UFjJSYFn/1xvl16zdJEF2MCVcBKs7+kzd+Zktm+/ed735rbmG2sKTwN7/8zcHDT4rmEPWypnZde3uHK2bWrVnN5GttVLEwlK+8feuG3bubTNgtH3/4gZilxy4t3rXTCZJzVB6N7s72C+fOMQMYJHn5BVeuXquqXik6cWR07M7deywlNCJaCzlZipYm9EkUKCsRg+zGDWZHnFtwJ8cUNLWwpSTGfeP7305MiC/Ks6vMGOrvyUwtnp+aaKh7cOncaar8qaNHl1Uud2bHg04Z2cEIT2bE79yxzRMq5sqVy1s31bohhNGDv2/cvGtXZy/CBGFMYC9RjLiTGLAMcO3Vq5dzM0Jsj93ed//g2xwwpGjr1s1Xrl7mlpZ7cPbsRVJqHUKnZRUrqBI8vaK6amZ2WuVBuzQaVhK31RFm6VCjyPeHbtaP3NY16mNaKRNChIBNS3A3JCXZluzet5fIWQV1SCzPnTlldeGtsYlnulnv6Rr7Y/kJ/ULNQkjGMAPBfo5qiHfSV1I4PTnhpIvRsCQ3Mzcv/4sTX7a0tAFV3clnnnn2i5FhswOD5MheiaJ9fURiaUHp7NyiiQgi6unupyhzslV5KmRvXrp02eqSqMj3+Chi2/yJVoCuMJ3uTpXaeAvYQLJVaAdiL6PUXJwSQKyDlN+987atEfxbTp48ctC+tqOzV/EckswRyO1H6Xe0dyplBaT7QlrXrrG8cbFQpuTNfkPVI+sZHmpsbOCmZLKAh0iTW7ilPiyBAdQ6xzvVGzZttJX0q00zRDFQLNJkTGPa0x7AJgE8qCBy46tf/Ro4xNBdu3Z1957tfIRCZWScuwNrempcmHhZeamh0U7AHAfSwQOHqaq1tev/03/6T2IGEI6r0gY3xCcthEB5K4doTtE1fjr5xUl2AxZnK+Cz+48e4rqamnI2bmd3N4s5X5zQ3Bw/x+PHj/bv23PqixPuECsvKx1myMrZjVGBJGXX9m3MEfVmLl+5xOekB3tuq8jN27ewOuOSY5ik4Uz4+eM/+pfAQwKYVDZbACh/A2CE5rr1dqB/8O3f/pp/bkXVckYPurMLbeDYVZ0dvXdb7rlBQtXY2Phx4boAUG1Qn5gwUTozf0gkFkhRF4wE59CbmBxSQbBouO2VWzo3V34qn1qooBcJCaWI8SdgIvIvQicSNhApiqJBVOj0AwnYyRSIkufa++4vwpEK67eWVi/cBQyV1jCbJxSHvwG8uHADhncnYuP8FG0fephNc/ogHZAXP9QRS0qjyDBhd++kX1PTBFInMjpJHXdbSXGF2xDLS5e/8bM3VVG0XFFePLVYSNljCH/rd2+7rA2JpdRvKC7hGmFRLUkIl4+DBB5Up2UaFizNBYlyXAakMaTsFxfk40aIVZzOjDgRLeQhTwGWZiaFc/T2hSsCPFGjJic369jTRzEwP7dMPiy9omaVzAzYMIRAWB4v9pBjAl8aFuughYwoEzGTmOTM8/Lli7z4juaZ2iSOn8/G+MD+/RZR8BAo8kIK+vv66EZn02jnVN0+n8/m7p07ADt54gs8hhxOF2VpqLu3Y8c2SPj00495+v2LnocUFdYJCIYN9bA3rN+kJsbJL06ZOEJTmNBr0RKUbycW76499Z4rK6PHpIInLbS37tzdsWMntrx9976DIhVLZ2YX7aLHR/r5uPmKYJKQ6meLYJglCWwC/hdKz+4gGpH49m/f+uprX6NjuaNg1WabjFNrzzwbMuajqb0PHz2EN1cpWyxxr7mA7dGjOhGx8GaPffHyJfxTURm8vzATKhFlZ3JhAp7Tq3+g1zaDd4lW5LX1UGOUMpzXsQRIOKqJA3PHsVvQ4RJdYmL3791rHb3b0QEt2HvVxo2//vFPZaNu2xbSQ+3SeYWjCmohIcZdS2p+i4AiPpK45mYC84vGpl5CGYyY2L27dgtocWdYdUnVpWvXya9QHyxHs0ERL1paejptSRjp6/uPH6VlZ5bzRiyr6O/tSY6hByTvjizNz6+jf2YywSPAwGaGpOifIu3pCBXPHKTn5y49+cXn1oJs0aHFRTbAO/bsNqV1G9ZbPkA4PDRsX9r0uJG+xX4u1ZEsJGdp0/oN4+Njq1ZUt7e3pSanDg70FxYU3Q1VAgs6ujsF+mzYsF5IQ2//6ONH9XyomAT8sofsun/y4/8hDuW73/6med29/5ByS0lOEfa8/8ATcLV77z4kk/OAH6CX2uHt6rQBCKm6q4h2T9/Ant37CYu8K/cJY3hHKMQHPyAoZcgJevnSFXyOiKbJL+5olz63NPNi8JOVFxRq7ySEnxhykNWHDiEm/uI3aoeC8l0M3MbNW3n6hBu6Wku+NXhsMgVV0qVuZTWiBcjFBYgrD6G4qHRufWxvT5+zQAt6VF9ZX2CemGMhC01XRzu6c6DiT0UxbcUxEgamf5gir776qhNdrjGAwQDFbtkiHeQujDwyIpfM3+//8Aez8/O/f+/dbduWOFLT0vlS8IhNTlkaaHjbZuHB//TOOyqLOFDCwIqm0Hvk3YUeZmqRteQ5BbVeMzDEI9TXP7beyT6yr8gsKUIyPguLLFVTH7nuQPSXpPXhnnDWh2OxNKIIV3McRF1QhpB28dx5B+PMKuTgZaeptNEJeYHk177xdbMQx7x3zy7aiePJ1JQ3cVjES2vngw2efua4aDcJSKdOn0aCualpHjc7pey0cFX8d77zB2+88QY3Chzq0Jrb3dBATuH/yy9PC2sUP2mTY4LY2NCCuGBy6VJhciyoG1z+WorMgXziefbMue989wdqBNtXCxB15a2tu80AnherFrYNfaH+D5ecjItf/vLX5jU26eY77lFy0QOrNkPf/e53GYFGZMPwn1OkUIesFAVKdXb3xsX1G467wanglWvXHOzDHjc55FAvDGh6PjV1g0FR+ezVq2s3rJdXjZNxxdry9aYJV6SJdPziF7/47LPPbFyFGDQ11jtkTopPlmOHhc6fPd3T3aexMxBOLm5QLGdHfeHixe07ti6vKu8b6B4ccfWVwqPjUvlFg9Wu29De0VzKjzkygv0gSplmisJKhy78jAPdvaMDfVkZ6WtWrW7rkpHUxo/hPPmXb/4CclZWrXj5xZcg4dSJL5BYqDM+px+s7uZryyTlcHRszHJGjmiw0oqQChtuQ1KbaGqKTd+80JQgwGdsJKxwSk07ReVrX5IUL292147tSxJjJfgK5T914tM//KN/jjVVLLl1765lr1ho+MYNbpy1ZqvyIa9Cj5zhFL0zKawvVoE++MqrL188f5rI9XGhRT7WAKCjEJcMMlgyAY1afDnm7zsLQxv7M0RljSGDuBKoJyR498SJk4aluXgsvO4hjikoDJmyuNOiqxNKgboJpnMklZkOYgHACM4T78GjQntShjKsmR0rqldK0mIvOlhmMjpyTeiO37dnDxNN/5Nzs2++8bO56emlGzdWVldJuRCzdeKLL4TkLasoo8pD/YoM97/ktzY3muNiTHP8kpT+gRG+Cv4kQ9+ScXP3vjUDqAp5LE3NfPjgsbXKHU4KqmBBo5CfttZOOrG4qJzImaznPLYVFVU262pWmM7duzdxMI1ZVFK6es0aPt/muganEzZFVlxczjD75a9/tW3LVlgqLSvnz8O1MuQcelgV1q8v6u7t48t++LherSKDss7h5L4r4iBzMUYmzeO6h1s3b2I28dkDw9qsB3mNDuD8F9VoQ7fqKlmjzA6QbHasiDt27SFpegM2atLdJoKbgepX5LN5oJ7QhYhSyl588803d+7c4WQQHhwf2wOQ5/c/eE/QUVtruwZpqZlOteTN0C+ARFmdRx0ApJQuA4kpYJU/+ZM/oea87r8BgZE0Cc4n6okaYr7wKL///vu0oSmAwRoAXX41NEShu731xo0b+MpZFbl5S4MplhhSGM1l544dXsFFQqFMQTZF/vpg0EiF15slcNPmp136LQFGNSGixelC/GQO6ZlleeP8NcMB0ozEqEQxAE42k5hvQxi9snqlQx66ktZQ3wZHWUhIB8WkQ69EP2CgTMN3J+nBoRWqEeMuBFpUc0dQyKJOQp6iL34N4Mn2c40XWkasdu0918BfViOoPAGM7z6eR6gz61c/6cq7APAu/NOPWoJBS0JkCD9pFsCJ7By0j/7q79KsbJvhxXnVCKeddVq5E5JSnERY1cj41SvXRVSrz1BeXmH/ceXa1bt3Hq5dv47jEDzVNStR/E6k5iy2cR4aBUypHEOL+JRc5ELuPbt2O9zvGezDFRQfKyoiOwWwB3UQKzMMhEDFw+wJXGE6OAG00Q5ZsfjZc4wEeP2Yozb4xIEDyKN2PCPDHB05Agbd0VFJWZ0A1VLx8P4DypSzTJFm4NFXKKtbLIQDDfGNb3wDPHSa9sDwkIdJS+Q2KBpp6Vd0tKCaiD5ZG0jAbUl84Jw0+Wuy3/nOd3gB8KQO7W8xvGl6F0hcFcZ1huBXbVTCwyqpkZukpT+CVvC9ujRgSOUpnJ2OWZhzoCGi15ZJAYThgV70KiksMmtIM6LeqBqwmTW3McB8sAHURUfRJzE0Uwuh9vgBPDbGNktQCmkwaVJmqlaGlN5XVrzq6EwlLilVTz71pAlCuPJ2XL9CmMR82s8gBL8+wTGQyt76+dGPfqQwObxheKcfYWXNyhK0ycyy8fj2t7+N3DwgTXWPKXMRgBjTCSF0iYUb+uIEdRG4d3Iifk7Fj3CnDwOrZs2qjoE2XTm7SFmSqjo7fhsZCje8mgsZd4bK+AMD8sXGBP4RorNpy2Y5bzSGSYFBeElLa+srr3wlx2GlKzIXY+zbpWNRIP28aYV58C8iYjE2lgzaIcA8T4TwA7CNDQ6zFWqqVkCy/Z7YUcDgOt1Oz8/dv/8L0ZAckISR0w6JnepYHcaHxsJy3huxpXLzBdza2rmOKm4+jkE5PDiiYLnVx/6WZdzfF9RsV1f3VEv7Z1+cEZvK6lK7z+06OAc+6WoOWtShSIlnRWm4cQwYnPrMDtuM+3fvudsYLRw74wqrMwteiAyqcTqyFBFL+Flk85YtAh0OzRHSfDGvWzfvmjjAGpsarMWCJF955SXEYjlB4AvPvag06v1Hj595/gUHmFm5mTYGOVPT9vVqGZELkRVqFjHmCcjE9O2AtMi9hKiJ07AWMvmOJzXGh4HNIreka0lseRyGhgcFtDDXNSBQlhDxXBb3oMMnQxJqaVkx/aw4qSqNlkX+KT953UIGTuPSBpYVVIgaizrx0Ci43bJiM8YCuRkp6wkSRwdClKkgLHTl4qXIzqTcbTzlpWV8Vaw2PjuYcfAAS2QHWQFjG+AhJIPf0PBmyRUBNzExffHCFyo12ZYvX1axrLw0f+lSKwtgOLCQKTZWIED4mDszSZlRWwiIJY/A09JP/us7ETYvSOM4QMSoeuQ7E6HnTNJ29/L5c0KJ9Imy6guRAsCgI/qakTMfemBlZRU9A04K0IZEjodDfnpGMwOhL9aluIyFNB76C3t6IHRq+TvN04mDBfA4LFHySnvI5Aq8cf2m9u/+/vfhaEhSjsOfmakb1692tneQEd60E5+fBMaNW3dcVc41kJtXYMs9PjSEHHBILkwN3rA01YSrzR2ocI526AIh+rlz+x6wkcyggPQumE2TIjVfXOQJQ0VjXdkw2A8jpTBOfaI1FQEGBLKaULa1q1Y7VPfXFS5DMbH6HB4cFqbu3jEyUlCQb3WTYIPxaJvuB53Qzi6+cvmaYneObS9fvTk1FZeVmdve0mr7x5CWqUzVc7XcunEDkof6B2anplviW9UL5izjrgSquWjjbiyc5viisLhI/r1QYT8hHMCQGyqoiKmZGaULZL8RGQkDdI68cqfoMOxdpHH9LkILFuLQ55umeRIykvkGZtbULHMWfM8VfRvWKlGvOD2/miiXd95+y7FXVbUbLsfpAgh68vDhh3UPr1+5br9IKSQmJ/Kpik2QFeM2hKrly4WpXR4cKSguaEtYgvVb2xq5OYfdHLkQiwy4DQNFXU0ocef+XRcsCKOPrNz1Jj8xH1JXubSxFyFhSsKvufGxieF+8sljsGnCohqUBCUVSMht7Akqkn+qxyoFX9FYLs/1Jrdas//4H/8j3bVt5y6aN+wja1bNzS8Ul5akp2U6QkJjxh4u7+wIFd+GXObU22vLxeu+JD3FjhkYTkJ5EAV3Cq9Sc8aiwjkh84aJPCU6JTVdfGL/YMumTVsxKNWPouZL7Ol02wwshTD2GIo6wWRQZ/GJ7gxyqkhQqQO2PvkkPDQ15nNZNJ6rWBbuh1O6ngUDvO6eAXOkjFhgtAk7Z+nSPAcmTD2ewgqb4OSkiMj15+VlWpLlx3R39mTnBAezVV8FQ7tkx4tSZDD9tauXd27foSIq+bQVZs3Il6LqDYG9SDKYGfC+WCTQC9inTp2SQEP74DwZdR66YRRgBNLHHkzADyYjSGZkXkYh55Qs4XTXMNc7d4+NTXlFaW9vjPAAODNf0fyW2CVJYl7zcXxbW0hYlN6tf7sI86U0dQiZntse2FCZvg84cbYG4MHoYit9AmyZmZgH2Mx9OiLCEhN6w2k6ZDb9/ve/5z6nL7hhMJuPV/w0MtZnJYBYqsrxH8POHp1y4T09feZLfjuhVjQgRQ85Vi/NkJLMmz5dw0DBlj//+c/hQW/sCZxpk4MD6QvMr/4PX46iY6wfQo75nZzSfU7SMQx/bWCMiCce9c1LKY/ojDxkRhND/QBAzI/vsAq9XsHqsGEWUORF09Re3DmtF+0Qh+MZmNFMY534jqCaRVcm04FbH83048XArklOFELVFG9p4LvewKl/oEXf9V0//ht4OCOT0StVjrkfNJTYxCWcXwuH9h++/+B2XV1jfn5udXUNtShAU/AaWsOtd41LTMyL9OkNM4SQ4kmOEmptxl4OJBzAPNxkCk2JJ0e+X80Fj/HH+OzevdNKIF4fP0OOwBixE7gFf1ql0JeK8BNmMGV4M5DvNAYTHEIM5L/K6XiFsiJHnhjONJl3BjJ3r0SRzMShPez35JBJTmU8WXhYrhjVFpfNivpIr0Pk0D8ERgvR2rjhEOBFeTtKZbNB5eqVVZTy9etXwaartLR0vCD5HqV0RQx9gRnyJUoHDwMsnNdHPvqh6KgCuy7GGRt01ZrVm9LSeAHM4vLV6xzDqgNv2bSZD78Y29DJ8/MS+qlKyAceGPQvCBSV4QdCLEhEGOrgjXNHdoQlZ8PmTSiuvRFNxDStkahjFGB7ke7y3IJaUa4eyA2dkwUebmX2nEDSQoINMiLVP1ZWB28fVOAo7tutm7aK2yFKugIDEaPB9Azt4i6spiiI4mGvnpvrRZ0ruc0aE+RJTrQEas7SPKudG16hV8qQGYGKk4hsiltZv2391WvXKpdV0QmffvSpNsePPQNasc6mL1l2y5ZNYkUkNnCHYc6yvAJk5XumJE0EAsMlVo4OEoLqfvTgkVW8tytszBToEa7Z3d4sEA6lmFaqwTpjCQt2JK2LMQEYzOM0Us+OGhxtsT/MlPzXR4qccuNJD+fVckRGYxTk5dMwMjdAi8l50E0Tn3MkyrXITst67bWvTo2Tu5A2Q6w4+x13iLDVzHGZszJhbHlLc/t7O+1d/9W/+lcXz57ilv3880+fPHQYp7no11LFf7TvwIHmlntGcQQHRt4Z8ouU1kTk6Onppjl8kXJACmz2hM478+l13+LcvDxs8hXWmtFRzKkBcUbTJ554Qj1r1qcpUynq7EEgul+7fp1iWbZ8OXWhpjsMNCteubBQIvDGvYqU5N27NatWeSvKlhhM+yhPwiTSM+LxHmRiDOKMiNz2pgOGTz8/QWx5TMFAgvz6+OF9XeFbWybxVOxgQEZF1YLrzBDzABVrEXk/0XL6Rz5s5jumYhGaFHEg8rb9mJMA2tZLiqWgsJ9mlD9KYSEarLezCz+gl83SyVNfOqxWlYWWs9YoPRnVJ/ADPHsG/9UzkVGUCTnmFkIMAnzyeZuyoDiqb16d6JwcponyFU0trTzN0A4kXvNLF84hkw95JCCW3eiaGzX44A08ADN9istCZiyqaWZ68ne/+11qUuL69etOffmlhFQq5JlnnsnMym1sbgqyPD8HPG9BIDDMhdxBOL6NFvzQD1qQQYCZNc7RkqdZGiTpzMpMiFgmomGHbZ5Nx/kMxUg8lW/RbNPGzZC2det2hYNl4gmj14nbc92MISUBS/C1GxeZJLqTX2HGSve99fY7+/buJshBt1RUyDuCfEO/8MILdAWUQiY48Sd8KpWDmiA0LlKScSzBQkBcOIE9nICLfKFFcYiH/i6PryRfYINGMzJfAuJFIom9KTpMi5QBmSGhuWHzuk3kQoGQimWr4PCjj04gujUI9nTCMwiw2NiYxoZWZN2/78Ce3U9Mz8zyZE1M2milsoQ9Z7TAp907BmM/cOgBhuMoXPruSLqhTrqCKYAHlugTjIQJkYlKtwo4CTSK+Dp441W5d/8+hLgSGELq6ptts/mPrKrI9+P/8Q8vvfxiZVmF0rQWZctWQm7Gko211X5miM+MDVSWFzmmjJmbyc4KoXL2IQpLqEGrqCUD1tIlRtz9SoKFalZUuSNO4UJbtImpccEtMXGC1he590SxjwwONNY3xSXEKhoAdIFTZkgMsALbLiU5lFD49NNP8/KXLknIscyYucgY4RNvvfUW4aHd/vW//tefffYJzuZOEokBHejKQ4RmPs4f1YuAO/GCJaUB10iCEnjFF8JAKSAV1kfyjfv3DLW2GgI5HwjYyspaXVsrymVwaCRPYMyyiq7eYBzcuX0bw63kGh8ZZnU4+mAf2y0RA8eg7CIRBVwyDL4gtHI0Y2OUChWzODA4LEy5du16UeZ7RMqK1J8Vg+FuqZxllVVRnyI7QIABTb0uK9Ok6BcHPWzxlu5O+TT4mLrnQ8FtNhWdnfJOZWxsQGZMzGVoRLA5smAgEk65iZzHCt2IVcVqpixC1rmVnYwNPkZZWRMMGtcF3rl9QwOVnM6cOct22r1rV3nZsvnpqcTYmL/72//OjHBiiLO9vjg3e/DQ/vRUtZxHYRKrObLmXjF97CW4RTE4AMtnp2j8Sv5FwtG2zCDYw22a0Th6I3V4C8wkB0X81+4FBqAOC6WlF6gU0d3Tjnc9IbG3XCoJVxVKfTebiyhbY7ly6M///M9dUoPc+tSSDNPRaGr50YwBzatKgFFWAzgEKhVDsEkgHYENYM+LQMX9wNYG5FQGnqRHdu/evXXjBp3EJ4biCbI+cAV4vHLwYAgTlw6uFCNdt3vHzg8/+Zgq6W5v46C399ODMh4MWd+5oR0fU4Xr1tVKlkAUu0QMY3uDDWQU4YQ7d1zjkG0ZYQMxp8j55i1bT58+CwntErPmVYtKdPPB2ESIBmEk+ZDwIORSRiSkpodbAkKN2shux8qXmBRc8k4AACxC3a8e+i4yyRf4wQBexwz+6hKBgoGuRmek0J6/XvfQi5Zn04Eug3ruv54TFuRzdut1PxlXV1jXcx+de6Kl9oaDXv2guEwGd4SDViKHKw0c4cxMzU9Mjp08fXrp0myZWzbSHV19UCFd235meUUlTeqOQ+ydHbNora2enbUuRth+iYNE2wAAWOBVr2dH2ug+dCDuoDQtzXW/6sdpCYZwzJST41ic7cExnz8/RzmAEClNM6o6/ZeORkSzI24cyV7iXtIVdKF2SloGa0MKhPlyw5uRno2OgXUCh27u1Bihvc4QnHQL8qCU2UApz0kBzOiK+rY+WeyNzmfGdreoQB182ifgEEwIgfhWn+1tnQTHlsNiwCIxKO5FDhrAqo1/lOYwIpD0CUs4nExx38I5vW0KnvB1MYzCqWl6Cnmxs33vww+2bN7maAXREYjSK8jLCyEo/f0cS+I08P86t4d2dTnVdDmDJVPntr4u1gEMc8pc/GqsqMkltQDM/otGFkJT060nPiZOyRg9qhYwIemDbQE/zusHhoZ7w9W8ZTW1a5uaG0SiKMcBaXhAz5ysWpqa6fT19FOA+MH04d8GHn4MRMZpJLSAPRCaLIwZlyA7o7ATlm7kFVto8ZPbcvI5tm/curk5Pg7ePGebC1UfvnhFMBvf25rVqwf6h4y7qnqV5Lwvvjhpe2Z2ImQ+/vDDppZGm0m0KF6aj2Q2YL9881dm504DaWOk9cDefdyVip9yljvZIMhiaF1L37swT/kJknEtAMq6sJwNJKyAj9lb69aswyTOCvg+nbejmpTors52Q5iI3Rqe+cEPfnD2/DmHIKw3JQRM2QR9pITR+YuTwREo3s8ycejQEzdvXlcOS9SQClyWjAePH9FUk1OcCIKDJkfc7BvrxI8dNsPfLz1Rethf/tf/UqrwVV7eN157HZ4tkYqOwzbpYNOghcKIbR99ChvcEVxdg6GSo1ynmMcPH/rC7GCRYG/L+a69e4BN9DAYJcDyABvvWZCO7BQqGuZBDm/EjRrEEu0drXr2U25+QbW1Mz6urbnF4iu4/PrtO24tEKjpIDRraZ7zDfpwcXI6MSk5FHOenggOwfmZ8YlZfyHKBVu379zEDLhdKW3CKGJNG4JgY7a8YhlzLcKES6OSy7BzC6e0RicDwtusnlJr7I7oVdwldomrkVZnaUEC8aEppRHiMS9mZSmZFYeLaAaput7Fq/bMufm5Rmd+SDaDHP9gNjNtq238xbNntNFJb+/Uzl1bicnJL09QRyIRaAOM7fzBqRf5kkxPPMm742UaZmzMhmqBxnNxL9Rduahm/2YoJXT2G8oHMg1BAndC+Kw7vOyMBP1greimhYxgSLNmYOBhLITQjC7rr5nKV7bif3HyJDpq5oql0HNSEtmPagma6nHdY4uv/7q8glxbWD2klOAKlblTiTbNaV8XIIyUMbWMGsig2j/82WO5czhKbLm0bzdYur9YFJYsFIYfbaBM3MK8sqcjtqkyrEQJcn5t2bxRMWtnTLJiGuof0xLHjz+b4Nr4gaGnnpFpOTUwNDTa1Kqq+sjouOAxJZuNCCqDUow0EpWOdhQFqpEpcDIVkAyL4nCKF2awhFdobOBFdTW2j3K+aaI1PKge+fLLL6IFBcsXALf6x3LUDwzrBDOQKcEp7ri7d+/O+x+8C7HaDI/02zkfO3bQho3WihoknMsfvP8RXUdRixtVXwEa4yK140HLfgCJhZI9wLcFsObmsJa5rnNyasKgokYlDX/y0YdUqxwb1osNYVRyzRchyKkOB3vDlAmaHsiXFe3/+1/+greFUzQuLuDnH/7hHwgphCAZweSNJdUb1q3VYcJ3v/Wa+cBjWdG6V158VsUMcpuft6ajpVFU/bGjR9asqrZ1liLc1dF96fIFKeTpaSlrNq+RECzsaXZhVlXNotKiEZ6n+Ji68QmZpsOD/Y0tjSODI/sP7X/l1Zeg1a4OcDAoHnRpblAZuErpyfiEGGdkBw7sc9kkPCLVP/8X/+wXb/4K+ykSahNsYniUAkUSXhkZjAJFXJjCaaeIr3yDxRDtN8siNAXY1HjfvpcsYGhjg4g19XDq/fcjyG0mLfv2HvjJT35y4dK1yMIQiirCIPLcv/8QSwX5qa5i1IJwYmTw0P593R2dLlxDdRyjKzzkL+rS9cK8xNOjLtYpKqsAvITaC+cvfvzxp87Xgh9ibS2ZEbOrAjcxA56LnYsXilmiVgi2pgUAPXRIUAytxlGUEeHZLblUsLR4Bg1TEhUpgoKCuKa2ThP3X8zNnT83V6jyAJKZOBUsZ5cmEQ1N6eAwTqz16ze2tzR3jrfTd261tTcX6R4uMeju2bV1e39XOLwToSGk+8hTT0kfISEBM5GYUTg3NRoNlsTZ4y1LDqaxBlut/Zo9L8MmHLtrwOtJx331q19lBDigJ4pRYUN05AO8/1Ic9LWFn+YK2bH371rqtmzdbFGhF0yBnXTs2PE1q9faKX388Sff/Oa3lI7zLhQZN6pi6CbD4X4fkgZ1cEjHgQpidaUBouAKGwaLBOSQJT3rBysyAQ0EfiQQmak0ikJ71mNgUxbA1qc1wFvsEjj84osv4FC4jloBiXGhtgZmsOR4xSiQY/qmxmDyOgeM75yyGICeIpOSU8k2s9VMVaqFW8sbheXqqE2btsCA65/CpXpOo4KRzUcYgl/lAKALZkBo9+wayBcsBDDzxczmq0QP8Dhs8a0NgL+UQpQuSGOyAHNeGX3XEx/fhdNApl819gSWTNNAwPYF2+vBx3Ok99dPHhrdq6YMP1hLDzr3RA/60cAH2KwF1xlzLbsSW5lmNS6yxbqkLZkYcwAoAa5TZa2VNZXsag5Oc3n2+ZcfPbhXUFR4XNXgtnCZmiEiFsMjSIsCRu7QHVHg37gwCVRIMLpZQDttg+IiSrEfzxwrVkIRgK0Bmu3as1uf9IO5eEgeDeRYBsC+Az7qT6Lo7R6xkEgEikjnBrWKo68YLQxsCKOzQzGPIUycyUiiJdCDkwKxYGDIQJHIRUXIB06q1kMzinJL8L2Fj+PyeO/CMPjrHjf4qzEYwvWxMzPGwieOhpinFGYU1f7iLmxpUvicLUWFmhSodI7VvY7Pn3vhWWjBIbzsgsiNQr8RCtTB4VSEIiQdra2ezE5OqW6cV5hn9JAD1t8vRhZn2u/Cua6sZPbYWsKMCYJW3qThTJ/1gA0gHEpJH5w4GIQx7BGdKQgNd+r0WSVON7t46Oq1ppZmccDc3ixv/ifUhASLGWhNDTM0RvyUYDBHz1EcGHALfrBBY3QuIDEo0sASfa7EEBtdACfp8HErM/qarDpjXoxyjshFCzZ16kz1a69/VXUd2LMnT05MhkORf9iAQHEwoTsPi+2lxihogqtq19pv6DAUHsnPN9mgH7JzZPTaAbKrhAAJeZWXpT6M68gUlVpfu4YShkCKBdKa6ppMBFp8LNiwyrZifMOAsxo1woX03Dp/yz6AkwsqJCJjOf68fQf2IyvcSofQWzgen5iwDRYHdSnmknykIheNJac+enATuiBERD5QBQmY1PDwBBpNTc/VN3W6NFpB5D/5w3+hZAJQhebySQOGaAPMKcRi7Biaxsb1K0+Hgni4s6sdKii63NwCscFm4WSAz1giO0ohGUaCk6ggWIudxmN19g0WHRxQFWPB8ldUXGgnT6HZLpIy9oejp77BIaFx9u0ipFm9gBwZC/k8iUvCPSryppgmkpLb2lukeVJupgwScOK3KCf4DgaNsSJhYTz5b1RC+ZWk5DJ8gYd24GfeoZdJRRd3ngiwQbJO0FeHHKwcWH7VFQbDWtQ4hJuIEQGmmSUMh5A7U3Z4jicVA3CKa/e2dds2fIjcZIR1BVEjw8PesgNpamh0oNfR1QbO48ef1mdxcQmh0ImBFD3D6hY1vVEyFgWEJok7N4ZKmmGXlpeHHEwd34UM0g+OPisUQV6SpKwc1wOoyOaYmN3BQeKmW7hihFBrQPIFfWkeTGu5NARhQWsaEu/du3sbqOkiasbHDWRjY76wdP1GiLnyAUlTcysmGRsahjHIpBuZVbCE2WAYPEigc5jxxUDg0RvlycrwKw1PfcEZrg6e0GXhKisxeXx8uJTMqpvntKq0KN9+WGkTp1smAhjowuR6wIfCfrhRXnzxpQzFLZISOQwGerqOHTsWcD41FRbWiQmhZY4HId9/IQR4gIdYE9QBqpk7edczTgChtZtYmSy+QjVY0hgDID0FgugoAgaqlSbxHDUtFqbpofYBb+np8GDz4yJw7gAEQgdIQwKj0DmaQTLLwVtbtmyL+IIzjA4nlIy9rcthcaAwdZDgXlzqL8KBzbzsjszL9kmtEeYxM9LH7TEm4nVAmpeAQFacj1Pc9z/8QFLZ2jW17Ku8gmC6/Jt/82/OX7y4bp1wuJBEFKRsJBSHffmF59kh7U0ta2pXBddtcXFCZVnhWbkYZ85kpiRCxHB/91LX9ibGNXe7WyacZFksGdNz81NSbZCTGpKJrKZnSGYcHV5WWaHEMVN+DR/LmpprV66fPf2lYt/KbwsLqnv46Or1a0Lkd+zYRZM64bIvKcovJGOubHvxxRdtDa3NDA2bEAf3NKNSPF09nX/+53+O51AIPeT0f/TxpzQg7DQ0Nf7s52+o0sM5lLc0hH/ZKqEc3PFGE3vLMNRb+1HiD/7gD+ARYXAwFJM6R9KffXZi87btorisWJQmHREKCMZrYzEuUqxD+k5vdwgvER1eVrp50/p1nAdlJTK0rmMN6ls1mABbQjz0xcSEu2zRTIzT7FyLMqolZeXf+YPvEj+wOaNAqr0H9lOUXFN+YtZjwZ+98SZaOhKVQj01MmR9JsY4ICE2Rn0AYkZiQ1JBX6gaAUgugda2ZnFQoozmYxMch5kj1gGkSBIMQfMqndPX3y+mnxhwS0ObwNPM9FS3UDgTePBAzO1jUWh0sWNugbN8mUsS40GFxME8mp66fPFScWmRVWZJJJgkKsw4b/PW7Zg1LKVJif2R3bNClo75MB8hIfwcGPz9WloO0Qi2zQ4A5IH8kGrQmoiBiBBVhYvoOGaJyJ+c3GzMQMbQC49+5StfsROz9Bw6tMcRkLiv5cuXSQ1nx+NXPPDee+8x3M2ROmPTR7UeUImcPsEQlT0aga/Fok6GkYDywsYaA4wcGk5XevArHpNGRtPhUnNxBKk9nuFBwWOWUjkSTn54l/ES6qu2hFXs2j/55CMd4gRSI+CPhcFh4Ezw+Pe/T7Dxc2S9SN28ZYsDbiWTKTVjAcko+s/KCVdrk8zktHSnO/3D3B82dCOoSTfFKzAf+UBjkqL6CdLBQ03DUIYwI4P604MPfCpK6LkKmL5rbAj4RxfN/NWHFz2hsAyHZBogSkQZDdN0vugc0nw3tI8G+Iqa81eHeNuL0V+jPfsvCPXsIUg8BEm0n7mZOeaL+pKzArIpCoWxEuIzM8KJmfA5tvXE9LQ4SHXx2Ohl5cv5fsRt6wTtBoeHxyYmiktL9YYclhOjWGiBYe+KKAa6e+u2MygmmlAkMIs9U5BBTjZD4Ze//CUjYPeePRGDIF/4O6MLQzqcxX6YEGf6kKbf/OY3ZI344BadWzD8iiVoj4GhEMjkibE0JsLoJSktOnH9S84AnunAqoF4lFH/Z2/+HHo1piJwJmn1Fiz94Z/92cNbtyDQBz6xqwKyvkCyVcbCQ0PgakmNiGXhxI1CRQnarVs3dMtKwyoAvnTxit6M6JSJ+JgOE9DSi/e8QqIxM3Jggy3btj6qrzMFPzka8o+fNSqnTm4BXJifJ0rTJXuqXuCZe3dur15YxSLHeVBBIvCGPk1HNAWOIpV6438iqsErHLkeWz6cn2yJSS7NpqXl34jMdCQDj06CZp6c5Iu6/7juy9OnBb6glNzW2xH96XWhiZzZOrQ6urHq0cOHWekZO5484gwTwJHnCQ7KKUl0if4XEgBmkUM7VKAHSOi92/dAyJSkROMcuopKzM5W8/f//D//P5ydh559WhHo27dvKj2k/l1yarjWUCenT54WicezbhFFLChlGeOx/KXhfi4K/+YtDR+byM07dw8fetIXd9LzLvOb3Ors5guXFC5up3b1anSEVTUDigsLUlNTOC8lUPIKS1j0k6ApOxaRPEEep2dwsn0C2vmJqrl983p5UYkFiAq1uEAgzOAW1OTt+uC99+EwmFZNrTjBGidHUMWh/Nz87Mwc9jRfBj6nnJ559nn4Bz88OB9gVynIY1FjFqAyNxMBVdw0Py9LgGtMcVgfnWmzk1hydco8zMyjbzjPCAW4ksSHmC8qCAMOQnf7Fgzbu5ILYRV42HrhaKw4ifm7w43OFIiivUiPD8FZubwapchCbFwMkcFOfNWM3U8+/Uiktzp7zsmdLbMvRcleu36zTKnfrJzC4mLbJ0hITU1bmpem4pmFPz+lcG5qUuiUNGV9OotwXi2DBTIdyUKXndgTBw8Bj6eDa0BgdFd3N1lWo5agadbU0KDYC+a3qkIyrlP3Rt45bmeP2j4xRjGMKeBnQkfjYTZ2CAOLftMYCQQOCdP1X1s+7FVeESJg3dGxcvUqeg+uhDb4wrbmsqVbcCwqO1UzCqpJwmloWJRW4ZZui8iHH34EcixEwziuQTg9M5EZypSbkB7Up5owf+2aVfwXFB0J3b1zV0LSEjeNdrf1TE3Pmg6wSYHy/XrQFQUC//gHbLQK4lrsmD0UoOcEmZaTmo8tP/7kE0LqLSnRsASxqG/imuEHJeeDUrJ3VU3JtR537xnIpHQIz7giqjnRF7/pRxuKBfUZCebLeacYF8B4ZAidn3xXt2F2Zq4gv5CdECmOUlC9YrXQICe67S1KmcWAxOUklcsqlEiBcEOsWb3EgRsQLFEK8CvII51t964dJz756PXXX7fnNDv6B4OhmqGJq7+mbwjKR8/+yxMnroaWiO5UiZK3EBrCYYPCNBa96lci6aEn1OKVy5d1u2/vXvKlKgOaNjU2oohLNxzTWK095CURB1heViZuQpC2UQyHoxx2GQ5TXb58VQgDlNs5792zH35g1cKBEKjP0692EITLxI3Y7uuUWLUYOjxR2K24MBU7dbS30RJ4GJA+6GU5QwV76YvnLwiyRdTVNTV6NqKhHz5+pKo7bYMhgxgGtTlH7q7dvKU3LGr0/p5wUwqCAoauYxclpCcnlBTlbd24bmyk7+5NqsM9LEdu3rjCPfnDH/0BZzntKciPAYd3RUOwbFTCVsKCTcaVRSF6Dq0O1xxBMj0dwFkSEH4iJ9x609rRs2X7thBS6RrIiRD2uqysAnwgQ2agk0alF4aGJs+dOwPLMXHxYtGwl/51i+GwnUlaCJ0HmQYmc8yK+To7uhBsYXGeqxX9LAzIT5vzLnsLRlAauiGRUrY90FgVxR27dzmXYV78/Be/+n/9L//K/V+9PeGYW7dERfINkRDWaVL2+59/9qkirJD+5Zcnl6+ochOn3Rg8mheoFAEUzSYyD075PJNTU8mDgCNeNADYA1CL3jUX8BN4kCyRARDZXKKBIWjhlcvKYcNPzALZ96SX/rKnoIgBTFz9t7GpnphxnNgQX7hyHYRY3zoBEp04SgYMeuMSB3Peou4FX6KCJ84qYhdjcSSVYUNy785d6w1Ounb16ny462qGjrCwWQjr6xvxEI+gsy3DmRRVaBYUE+bGVXBrG+G5UxQawaRImgliaM30j6FJJl9C1MCiknSOBN6FfxTBHhGdtYDogpX/8cf/98svh9q9ZlFUWAwz3ANQxCbQ53/43/73E198Vlu7hnyaFFuZbWo4sIGHGPgCjR4CA06i4qHCj/9SiLZn4DcoLsItVjLLHrFHGswMeNiDtzG2yfxcW2eHIexAjAV4/cOe74wM1AGYOrDmwvRPS02qq1N6oYkpBhUmTjI10FjnRnz37/5OPxiM6geeksn+q7FpXjh7Bodgckexm7ZuUZ+KJ0CAhL3Q1MT4wuyMHbUUbaxoJwlgLAF11KeBkBvkBkJTP5lRpnRbLv/Y4J53dAAD0Y9wHPg0qLdUDIAfy5vv0V8TY5Z4AnX6gQQfo8AD8YwO51f969PQvggz05hy1IO/RtSPNmYdfRFB9e91v1JA9qJUGKYV4zyj7GJvN2cqLWmn5wjecQZ0q0XtOJiyg09rkkjiEYUCIxnMdLRuf/WrX+FYVPAdNTGShGAqRb0pmgQfoqCHpiB8y41CsGoNQyD87ANy1IR8qwK2hG3SZ/OG4v6iKa6w/zd3tMBXvAb0LKUv813dIcpRgWfrCpWi8ba9e//HX/+1DaSJnzh50uhUE2jpQIbmr3999k/+5z/FWgikBzCTd8wAUYW3bwMAkMbyOpJ5F+qEZABAb3YylvanjjKqQiKHV+z8QQj5sCoESFS3pQIreq5bDGBeGn/961/HluiCz02TIjU1vCHfvbK60qEcMOxDPPGTfDIIwagMiw/ff98em/OYt2V+tt76Yfo84qw0EorExqWLiAClyvjGxr5DBU7QFeWGr4wIQgqZvCMKuwowKA4YYmtq5oijEMK7V375SwwMz8effXZ2enp17RoOPxjWxqQcccLJE4cPsnI84SUVxyhGAtIYuNLpyBQGMHETBB4wfPcFvQzEHdDfHeL9oM6LZIWRyjULRdwHlv9bly4BdfPmjfQqnIgog8AlKalXLt9IXhY4xKBnzpyFnxOffQ4zrhRtaW32fPu2nb9/93cch85nsDq0GILyQUTXWRgat1v7OGUARvdWR6IQ1ZTEbwI44dBwXpG5fvjJJ7xuInBiJ6CTYJg2IW71M8+98OjRQw61TVu2UFPcwHBIb0Cd/FREIQVsMroK7ShS2nXWlpkBqEh55G4EuKJCUZDIq9Jx8eIFJIB2DU6d/PLClSujYzObNm/54f/8J8ysy5cuboyU58fAUsWwXPCUFYo0mH7w4D5z/M6te7yNkA9pXI8cUqagmW2tyGYAUGJED5AAs2n3xAc1cQIlgAdM03bREqCNu6uxN8UQ3YFrmbEiZ8/Tz969cAEXYSqs7jAQrqQs19QwpvONBW+YSogvhJRS4mLY5kPCG5r6ID1+QDWc4CExBC1ysBmM5cy/pKwCrpS7gGRA0jAoDjlayjq7eV1bWQclMAy96It8Jou3cSPiAhurmGaU03RFBKgX/9WDCYKQN4fvlV+go6OT0a9GGyqQffIiIUY8c0pCEmlV4+v5F5/r6W2Xl+n8HBex6fVvvmRN+hONQQnA2JEjTxnIENoIRoIcKLUbF4yg/b//9//+ueefV3YTl0anzyjGRXDjLdj2BSp8gA17hNHs8AA29hNOMITvsKpAJ+NEwoMgN6MbIsjgxASTyQczO8twxwtpdaOFfEI4bK5vgHDNTFAP+IHaxAP6ZGR77gl1x1amkG1jhK6JfBNU72hJAjr1RWBpPF1BnWVZASQ5DOYopRPnT7gctM/tTyFB7uHjOv7ib37ju2WVy37/zgcS4uWvm5QspqIlRWs3bFSJ3wRNGS/R9ihF9vmR6T2jeG5GPkhGUwEMKsRZYE56GBOCP4o3mwTWAtJDgo9muoV/fGUD4I95oTXUeUs//uI9HG6GuAXnawxmhlZHW8sXJz83HPbgX6Z1WWSwDTmYSlAxOSW2VVUcN+GAiLpj1HHGIwSca4whxQtEccgixwPOXbEuqDDeQF+PoyS1WHAafU5yjasT5AASJGiPoFj3v/6Xv6BnnIeQVr7my1evPnpU393T88LLr2ADYoJDYECtfIWnxcthWs8Tpqcm7t65JROUS1IF6Lz87EcP77s7ZeO69deuXHIMLfgHIqQMG0kVHT6PjAwVuN1fW7R58ybMYVYffNC5ZctmelC9J4DW19fBrxB/9/jlFAoaL5eiRDGxRHmCXERPTQ/09SKM40WZfEcOH1KbQk2hhqYmx9YSkWFTMJJJ6vzTTz+HTUzpOExkCOY2GQRQpdFzjhvTCGpdAYHhYQTwl261OUEqbPGzn/3MFg2yTJ5/SHY5N7aSjnv27XWFJy+UCBmBaJhJvpTFSZDf4EjQBbYlAgEtnCSWm0QUpiF8RwBnu3KaP/jgoxdeeCmELWZlCfIh8++++/6uHdsU4uA5CIGeOZncHkJCZXHJhsFGcgYsS84WEFg6gUhEZtBESipCoq4TQ2eUToTFvUxPh0NkVbQUK8QHBMxSNPOgTrSrXIIHI/dCAaK0FHUkwKMWkPXW8mh7Jh/15rVb/CJ2ER1tXQkxcU4i2B+oE4lTzxZNeuLTT8zFnluJ8Wefefrnb/6SPB9/9hkKpbhMHdKH0Ks9HSt0z4LHuxaihxyaL0k3C5KDa/UQMD+a5iwMuTGf16ECdegp/A2lpMuW1OoOOeTHorJ3z54bN66RVSJnygK9fvSjHyEfEUXiO3cePPnEUdsqwgNO5AMJdQk866K0XUMTD7/aAKCpcaMKDtPTKRoTLZEkgMdjLCfcArd+NRZlwXdFOHWCrFYF1LSQ4xO6CSEcU4oTcSpi6orJOvZncbky1TGR7YpMKZIMJEJIAmFAJ/pHGgaZ0X2oOROxTVXAxCj8c2rLKqE8PjGhasOI21IWF7zLeGKWAeD9Dz/KysktK1/Gn0Q55kzn9PYNcWQKoSECQAWbACA6CIRmnTg+CcNG8RH6bA1TQpHCUs0Qzn38aosJ7QDTZkZQ+dwcSGBbD1r6G1V26KWZ6RgC/rXxXwPBKk3hu96QmDLFYKamZz9BF/miRr0CHhQ3kOfmAvmcdjrk5xPTTDmKkLZa8Fp1drRPz88ofS363PQZHyo9796bFrMwo/IPJQAqo+BSVENBSynS6BmVKWIsp3MUVNLKKapw2Irly0FiOvwUJEumnSuTy8pLNMZ1SaqeZ+XY1xUVF7sUQlgaLYxqIKdzmWj0rL96MJxpAt4TSsOkCOb41DTqGPpb3/oWvnUDBUxiM+qINWbu2psX+YVDdmrUIjE0DcMaw9sMC3jALZjW2mB0SMar+N9wxIEsGAuozqkIkR0I5rSqYSqds43g1pQNagciScAohubRgBNENwudaOAhS117X2AMsZzyK8Hs8MbCiY6sKMlaDnRUH1+5ojJ2fu7t3/5m86ZNJm4Z+/N//++v3bnlaggbJAgBD+4lsMY1ZXNkEMMS6sCDoBT+SByCgpgTDEbEIWHlq6ig1ph9WCuy2lURf/gEANrx6rklNCkhfn46ZnnVihtXr2VnZVQvX8bcLy0pUoe3v6dXDxY8Azm1QCkGEMiBAXUYzwc5KBaIjS7nVhNoRywX1sJJVPmg75NHj4DHGqQAOTcN4EH44ccfwapf7cOdollrd+/aFSiYmDg+PvHk4SPG5VSCUp07iRLyKrnTqfS+/fu5Ht0AbTpIU7miWhamPkGFaki5Yf06K661zEyx0Ovf+DrLyRIWEqY7O3ms3BfXUNeIBzLSEuklfnSSxUhi/cgFsqOBQ5LCotIDUYVeV9SnZaSL41fmz6GrBgLmd+7ehWHYJQvT8zt37iKtEM59lpOT63RXnsqe3bvtV5VVQ0ebOrOuq6t/5tjTSoB+7fXXtL9187qqLDziCllWVJRJk+C2fPj43tHSYyo6qlGBe8WCCpZhkvlngt6yHcLJKIvZ7BYY2cCoXb9BnEf1KkFoDcKAPclbGmKKSK59+PTykH4DRYKZZA/aEsqJwrSk1cO+yAkMUiI3rY7NyDXZMXEaAJngmYghjYmIs3IiHXEsippbxJzqPmE/gFnr/NeWD9785OZ4pTIi5lGxE3VLiSHmZqbluOOTffv3sKIEVoGBMcrrazrifbErlydJaW0ZFNSgyo7TD3dv4XYM2dQYIv38lyUghgpC3D6LSXh5HbUBT+12oc7jE6MSEizTn5/4lOO/uaFxkwpUk2NCye/cu+3iqpKyYPnhN5xJruHTHEVDREQsLbpQUggIDR6oUCsMAnntBVRevXbj2NPP9PSHbTzGc0mEUxdeFcIFmWZBP+BDP9EApgwz4ER9RCGJWN0X4/qC+aEOYs3OOTYky2cTlWdvbaWDGdi7e++h4suvv/YNACOQxsQcnCilBwOROJ0A0uacBWk4c8H5FlxC5BY2LGo5cA8urMptxRU0G5AcA4yO9igHL4DHtaScMqWl5aKRQa49xYVpMYAFhRb6zTtvz0wvxCVJPg7V2A1nCkwynRvFd0JExqW62kjrXFg4hQZ7RIxQ0GDWX7Ks56W5WTpETXwC84bDY9SIGZkjW4JS9S5okQYJhCg7q4ENXjnmH0JkZWVGqBbJeFm61IZWDLO4SKyIaf2UmZkBFZSwnLSwIje3IgRXpqoG4qFqRb4E55rjnRQC+Itf/5J9FbVGAICd8Nhf/uVfAUnIkCUAeiN8rvSDCmol8h/uPbhP/7PyTeHHP/6x1PPDhw/TxrChtBo9oDf88NrXX7ex6WxvC7bQ2Li//BInv/xSVq0zE7aT4USAC735yosvu6fvxeefo1QTzpw55cJaBBMwc/niJZIj9sn5F/tb5MiKlSspXzAhvGkgZ09HB6DRiYLDIjALDuqY8EOWNRI0fo0qaEGKGyJ7I5ezejKiAur4OAr5CAlwX69lO78g5/wFFT9TzZ8D23CWSYFTaEzjIAntg89smSDXgqoHuCYwJJBs43VfNDBhPIq59WDlAK1mNrU2iJJ1vGVqbnSa7e4WHXXu3FlcAlr8PT1hFZhYVb1SG9iEdLxlFsw+ezUq2LVHCCA56Kr6ETeu37h104jSfA0hHxFaEQ/NeNCfPvqUhDC1jxhMnjvcQZiR0SE2KHZEaYcwQP3KK6/S6QwIp/S4dmZywlk5NsU3FRVgvgiTxNUWS2wUCP1kLnIBsdHzr77qjipH9rQMbNB6Tk7d4wYP9MLISNytG9cccVy4eM7BJQE+e/a8stZiLq2p9Y/rQnLCozq0IO3cw/Mxc2bK8GKlySTr6evr6u2wBpAHeLCAGZqfkhLxROT+7Vt3GSsMX3RHIAA7a7a8eeI7BJodAcMAFJM2lBQS+MvQIXJu3nkcuSpu3boNfC4hQuDBPYKBcDbuTBn29+UrFx89bOAEJ9XwUFVVSbn7FbMxJggwRPvCZEEsTAhRyKEHAPgVAOx+kJg7EpAoGMYSNAVR15JSwFR8Rc6gNLah9I+W0Z48a0mdQSaSsdhMFvAmAtWuDlOD8vqtEOaBKM6LIMfEzdSU7Tyt4rAUtmp1dZjNiGvXb6iqWeWCmNQlSZhEm7ALGmrz13Tc+/Odb33T7UKiyAxNOVrJKCnfo0sjzOCZGbmmymtGCvv4H9xi77BpmZgielp6JTHFzaPhoMaMeO9pav17y+m556bsuUkFknHLRyom0XGm7K+PgUBOles8LI2RkFO/ekslZujy3RwpIBTRrc6pY9jGJDqHbRxiUjx5ifFJNh3gTExMsTkXGSU/waG6899elQqng/Wj7pNzAJ5XF9lULi9JrVoOvWA2runAHuRjKmgnYkSPSc1aFey4urbWxdXly5ZZLYAqnxUM2pAyXm2woQjM6MQsTBx+bADQRWMkhh8f0FJoZoTWVD+tojeN2U+79+6H1YXYUVe00unaWHs0oHApFt+pPoiCMRO0ybe1ZojAjw7pzz/+4z+OSoqxIDlouUgxQVOgELCfgy+js4eck/gie8e4sAp+yIcBmsoovqMplevwhopLidxAbFzM7L/QYqaWTCwB+V43TRMxHSwt/kSB5p///Odff+11Yt7a1JySGOKOOAhM04kzs8Bctm/fKl6CgrX4K66HjaGdPtQbwCwMgj3AQ6agDhsgLgD81+iiLAJjDA7CvPnCCZjpN+gya+YCOqKCrmBGPL057tqxUzVVtg73tQMbmbgsgMOHD0o68YpzABtsTAWxOArmTZBBY7nRuaGhkaSTeo2jKwvZpMCBwdGIB5jvPHRsdYP6YJ65xTmnQ4QRVELFeEZgmysdITyhNPhTaE0hctpbvKLYNik+QC5MA7Hd6Vt/1d6WS4YNoBGQ8i+dR1ELEKI9loNG00cd8yUdbY0N4UbPSFAE6wSWECg6rl+1pwqcG0ORYjsOkQQw+RU1tYQrLGpGIiFFc/NJIQeUogWH2s3rN15+7qWGx/WlvMqRi6jFxfpnE0LHDY+McIRHudS4f/Yv/9Tidfv+AxGJg+7Ecj2wS55iYiDN7KCaRJsCxEoqk6HhFGIoPRxN5OXk+tVc7t67Ax5otzcAnun7r/7xiRkRMVGLzxx/jgXMp+v5mjXBM6LKIf63mm/avFHnLvBxJAIekujozyzkDcumSUlJxpBJSVIe41aurNZbf7+dNgsyRMk7gTYWtdDZ1gRg4gZFgIccz+GE18nr/loZ4ZN+YIrhFn9RmcjDmPsiQeVMWIf+i4LcgqiPhTwBUkYo8BVKJ3vIywZaqDZZy4RugWhcCyW1CVeog6840Uirck85ucq9Py4vKT174TwvhnEpBBtm4OElkJ8/e46DDyl/+pOfSYrTgM6ExqtXr3mIDbA33vbQNgbLEUBHVdgYzASNBtAV16H/4n8tyTiYwWZBxHjk3XceOnTxK+PPLLyC7ZnjCIQKgDcF6pRABR7DbLOzBnL9PHhswqFdZAsANDBxjgJWNdiIMB4wZahG7igH4g2og1vS50WvwJg2RmHlU028M7gak1udKSjtmdFWeWoKO5mRljrn0aDihD1Kne9obfj2N78h/es3b7/11NFj+/YdYO+ieFVlseS3MPGkRJELsmXYAB3hauFYVNazZRc/sGqAp3NYAoyBgI2UJAKKzAIt0DdMOS2N5QDb4PQTXLEfvOs5RMGb72fPnabfCLL5agZXLFLU10PUMvSWgXzHcuQCGOHYZ2DAoECl06iv9PSMM2fO7dq5hyy02EA3NzvIBTZiOXpHdEqJpHgFbmES+byLgfE28JDJ0LxajmVAhQkxj6lBHcSyK6xNwNAYeN76wz/8Q3oVkOaODejtQOj8Ai5AD3/4wx/+l//rL+l8Nh5UuPuyt68Hq7gu6fbNG/pP+PLLUK1FBfS33/n90WNP2+KvXl3rYCLUlCxffurkSSMJCicwME5R5mRkOvkyH7KKlomJSeyrb3zjmzTj3bumdt+CgfuFFjvyUNVHOEdrW4dTaUdLMy6eWO/WxRDf9qMffN/O/q3f/Pbl3c/K5VW5QBSKK1rkRLo2paunJx43p6WKYXWCgGPkK9rWSEp1YfeyRBUDh0vKSxAAo8Oayf/1X/81ulo2sGBk0QrVysgMBp2eSUcYSIRBbnvBjnbqx489rZiAVxAGaxbk5pg7nkb7J48cQRWCwV3U1NxCS5aVVzCRi0vKUlIt3v15BUXGNZa9t3oLRlTNSnGkwvycmUlZ840WJ0HkELVm7VrHJhLhlblVhEy3ViOlDAWJqnvA9L9z88aJzz+HCty8erUbbDYqw6xcN18pr4N8/HHM7S5b4SURGp/74nNM4Qzh008+smwzsIA3OzXZJ6CktwtuE2MXDz59/Nc//YmdvcsWpidnLANQiuG279xhdKF/ztzVsKOOOTujOsg5hm0Q4+zho7ubIoc5KB6uoBrJtwO6fOWKmw5TUppFQB08fMhRNWTCm6hE8cpWU8thdFHBmpQXhFBVTH+wwT8mxjz0r1+RgAGkLpXISHwvNBAAdMrqVaHAFsNIBFrkeDTcMYxlUQQydUKheJf4ESGcTeZ1TrVZfWmfqD4iUUwoMgxd2uN7WsNbaApXkQVgBs9YOTwEMNHl4VN52vmGEEP7QD5jOoXi+PjjD4NAZmXLj3TYsjQnSwivtZ+mZmDzClg55CjZqVKGyMp8v3Xrjk2LQE8SBDy+JYLQ26+2TGr58nBgt5gQDEeyg99MFszqZhQWl0CXEW04bcXpCNd3AVgb3WKz+MTwXw38N2QEx8bCmO/WJLOgvFBKGJgOYQaVpeVqQD2ZoCXfd4MigZ+8oh/qzNBQGu0E4/n4idRoaV0xcV9ApSUk+xXaNaAoAoaD+y0Uo/TEKPrRUjMvOrZy5GrdAE1sfIyoam5OAbUyj2lwKkLqSLGq5zlqu2VyG0xOl6tZ4tRcwoBOsAdquggd80RNNwEldeGJC0ZWV1etEJ9a7eS9q/vSpRDZLwaP+W+HBNVAFYDk2K18WaV1WKhdqsu2xsaEGegWh8APtvHd2oPxLBLUHz0OcsOZF7PYdbmODlrag5GtQ1yECm2drTBA2L0F2xCIuDAvm5Yps2/fHgc7EML5JOiclR9VR0ZBfT1QQZCJG+FfSSt4UzlUtx4a1yhIjL568NBxqP4pK7j13N6bnSdJwCridT/5r4UKD+uQ+8qkEDF6BGzhlxqofy4i2yHFbPxks0rz6Lmp3uHyoFv22EMcAezV5OXJg2MjN+/eS0pNOd3XDxUmSKjHRkfJHd2O00RdR1kCBtAXlsyuqbWFeURmsRZWsc7BJDTicI3NyLtQDUiZR6yyr7z2NdHMKHvwwD5h5bdvXO/u6hKNrdA+ulvOzcXNxxassHWfCiwNYP1AnS/m613D2UfBA1aM7vDDMrZzJzzjbVIc8pemppCbOCPu3PSCasXM66jsEC53eYpr1MO5M2dv37jDpn/8uA7XqYQjc1R0KEjwJ+PJUiUGWqmf9z/6cOuW7ecuXHjphRddJqrC1boNGx9Fjo8UAzB3m0bVORSWqV27GpzCpsU4zTkHy7B2pKo1xJEv3q6rvQvY7t9RPh8FJXG60Jp+c7gKn0IuXSNg28P64XGwYZbZ5TmUIoELU0vLKwgdsXr11VfjF+S+B/s4NVUkRr3oXAPNLhC7uUJFxFK4gUJxvFYWUmWlFECVfKqqlguUkiwqTZBE2G5xJ/NT2l7y6ri1EP5RVkz4zNxMSPmNnB+CU+B7cKBkZ+FqJMCBXBGXrlx7VNeA0IrMghCVt27bTGMTWHqPzkERTIhbMCdsb9u25fLli2QfM1lKnEtze4VAMe7hLAWBlsoEWb2q2olEQ2Ndj5qwUxMsR2cRbv6qKCsJN7UJYlGnVSnepUtVIRV7bVBfrl+7hj1aW1qS1NHPy4usd+mRVI343u5Q/DFijaWrV3739h15IrycTCRkmlLD24HnxCTyiaoNq8/q1aQ1qn/0ib0NQbNZ683dpPCY6VARUAeHlhJ2qkog1iYRDRDlXEVoFhT5/OpXvxLrxXWSkZ1RVlwWil02tVApzlmVLuZNiGoSfg3o5TeDH/Hioi0wMF/eic8/1Z8dlJMWkoWL2B5kCrbljRgO8IBULUfEkYWbbCJH1HShInwxEXM3U1PwoWfMSA/e5YRCWccdQdKHbHfjEO7AgX0ctSe/+EI46tz8vLWyb3BAexO3ppAIzYxi0QcPtveEkRpdIEwBMSkBGgzT+ouXSIetDjD8RTiY9xO1yRCnrhnHVAcmcWn3lYvnLl25unf/gYqqKsUj2NP+Xr521fm/Mbu7u7B3ebg0JkGoNgt+Q+3qmzeuWdbhigibL05juQEPqP4Lt9SX2aEgpsUPYKZOWSC+gA1IgNSevIMcZU0BlnRoalLzQwrf9ExvVzdMfjw27i28sWXjpiAmI6NUOq0lu5X9ZrW4cP5S1K/34P4j8SliJWJjE1nbN2/cNBYjWSd6sF7o3Iijw2zUWjsfCoEH1sVtcmAW5xauXrpiFLJfVlxy6MA+QKJCT38PCxDXYZXy0lIBLx1t7T2u+IiEb4Ec2PgTQdVbokA85xFWikPxyarqajhHMsDoCgxkUMVVlOIGQAtfWJsJz7/wEiywlV3DZqclaIko8iTxKLCE/Bd2zAGxQWzHfODQQfxnbujqORGCcfQgCfgMjsgMD7oTB/p65ZraK9euvvDiy+ZjiNrVtcjQ1dHpv1jBkdyPfvA9eh92kITj0AQSU1LLykpPnVapipWzwATv7xs2Yn5+QZSVTRv3G5oFEAC4fgulbVudSSE/FpG8pX/Mp4FtE5AoaLOgW8WXO6PsaBdIMMz6x8S+rKlZSdt/dPWyEsRo4ImBaNgIBh5J+S0tL2eTWRJEDIYSnJEykWCGU2l8LDUVrywzTx875ijtJ//4f+/avcMSu2PHtqGBYUvyjm1bVUOX4fHlFyckhbDKK8rcvTWPDLJLL5w9xzqxebN8YkoXXrigxJaSVgIJh62Hq1evsZZb1bD47Tt3aIpD+w+o5bG+dq2DGsnZH37wHi5ctXKlELnrVy7lXV7qkD0vJ09oe2T9zrEbD8vJYqiOioEgUIImTLqIQPVJZ9yqj9mTKKl06PBheV02kZjGpIBhF0ebEDNSBDPIzVw2fSzB5nC1JOpoRi3CHsZAST1TKxiOFqZHcI7NAHRpI3SK04Kt7AQAjUxKLgfZoA70g9yNjfWuobh65frCwrzQX44rVWdwC5E2NKsIQflW9fb2229jJ7xnjlQVfQdsxeaIqMaYge7AhH/5l39pIFYFwuF74JkImbE9kAWxdWu5ld5c9GB2MAw5WtKYJKSitMxPYhl9V61VG/JJrWiDImCwEhgOzxnRvsIUjAUMvxrapW8TQuBDJkZI9pqbCdfvQYs2LDPNlBaFW0V1BxyUyz7sC17VpGSZLaG8puFIWVT5RiF057yPh5oJBvOwpLzMTLtmOmAeqxg3KptRa0xQDkrBD1DBjC6sVaaVDzwAzIcu1ifd5EXd+q+/eoYEzXzXBqiAiRLdQ1/0rzcvmpcnoNWe1LhSghB7qKji1JSJzCkBZCz52GqqMrDELKnHzZZywbwXVRoWm0ul0g/4BFpcBON0xd7MoJURmmIP/OPETJ0T3OIvkCgcTkTIl52AJdAUhMw8YDA16CJn8cIPAFZaGg7faDnQigFDMl4TagqLUnQmyHcAP6xJTMJbAY2m5q+FRJ/G8l/gkR0VN6IrmXG1j+5qpGF40ZTxW4AnElTG9PGuGWlPz6CyNkaJLsb4HE7kIFLQvKdwjjoIbdYEzfKJo7xlsZS4Pz7eg8SAR1x8S93RzNpzMTgdteen+i3J+qfikhOT7t2+41pQszMWQwQpfYhz1CajClQ70GFYg+83j02MxkyFIvdEWJ86WR/8GoteB48MEH9hALQyIG1lvQilGpBlwqJPP0XZxigQZVA/OTuFAaxeu3fN5OhI0+N67kbHbtYn7gNGoStpXLgO/0HdDfYlJy+hdsRq1qyujXaoKz1E1SAYKApUJv60Jb0EUbZkEE4n0CRManSn4nxk1cOqFxHC7bxRQejvH81dms+TuzQnhIQpv6gHr9s6fvUrr+ENvmRHoFSTNtAbzWolYs2trSVlpXfu3U1NT3Pgrl4tneakVLE7LGfKbEdBs1GYFaft6e211kALmKNUi48kF4IZP9OQIv3hB6o3bt6khFTB0myU5VzAb0CF2Ib6eojlOLOTF4bku5KjdA5syNiYG59xVbNR4Jw2s/zPLSzwI/qCBySpI/TsxJTpEGdEzCuWmNEXKmUnhP0/nFgcIQd4RoQ07OQUl2eHnyiLudlll54XVQImRUzs6aGdPoRb6TrgIY+w53Vr2dR4uk2XMFd8iGnB77n23JapaSkwgI46MXHIwcD61MaloVx7yUkhEG50CEq6HVW5JJjM0sbcFgcOH3KHCdsgI8UNjOGEhATphOaJciBhNBerBsPa3E2W/uearVy+grBDr2kaWkg3vMGwuA6S6NospGltbYE6J+S+o6+PGWlDh5s4EQAhOP0KY9SFL+SO8FqGGIg6tO6IklClB2DmS19ZhsDgZL7cIqjgnkJAq1b3Dfap4C5ekXKgDWxoMU9gSxuMxhbUEQ8Dfr+K63RMau1zyyQYAKOZcT/59FM+Jjpiw9p10MjcYjOsrApXR5mm0N9t23diE8uTEfVD//C+wxJovQ42LGoW/otklLypsQjtsvx0t7/PRBTK8BOeN7u8/CLktkZHlHnIA4RV/RB5w8E57oIrVCOMcIhwxsWK5o7DHTbXNzaD3MZE4iVzSP438TRfneuEz8JbKposq6gUBaA+1bHjT9sezC0sSq0WBNtkY9rarj0HtLIBAofcjyEVZNkyIYK9Lvzu6miDSagjdw4qkQz5YIxaMDsOQYQjLGZHyqhoku778UiEhZaqg5iFD4SA59SpU/rxCs6knRSTVYUFxkw/qtyo/SeffBJLMHU8hA24IjskyJIEezgNzu3xjh9/VtwR2DCqzoU5Yb+JiUm8YVywYUjnIaZm5bIhhDTdGtcHTnyHWNKDygL0aST3u7A5xc5w2rJjGdXKXRha/xQyAGBelRTXUYeVSw798BD/F1/zhXPnKY5rN25s3bqjobGRP0IDmLFNykxLVVT8if0H0RSZcHLC5i07zGTLtu2HpIY0NKxaU8vj2NzifBMXhaMcpFXFH6V/8o//+Nprr8ndXlEd3Gl0bmlZBaWgSg+Hh1r4vX0DpIWYVa9clZqWsf/AARv8+fjEew8f7Nq+01I41D8sPhgn0d3WjvHREZjiCXYvnRMAZZUpowtXr+0/dDDguqKSoUljiJYrllPvEHeG+7Z5YmI80CmYpCEwFwEE+fhraFi2FnL2SA575pmn2cQaYGK/4glWoyAtppjS0Ugi5zJucYGlTM9Sl0wTN3ragXkFru0ZJDBwBS3ExPUrctQ3KAGK7xfPRfRjEh6i5nRSE6mA4YyVb+DRg47nnj1OQwpY6uhscUcjO5vMbNqwnk/OXiiX9PKuORro7q5/8Mj0hXpxG6tAjDz33LJcWWEFjUxtWgiaeke8U454IhZtUMQ7tm9/XP+ovbUjIyvdfdQOTPmFDx7YD2PXr11BV0kIDEq2vh2zA8qBwRGOCp6wudk5ChSvl1WUtba3YriwNM4t0NpOXUhge0cHUPXjCXGCT3sEG+jZ9EXrtBdN+caNW5gVJjEAlrLkIAr9QinjSH3CHgaAcOwldp/YoAjxiwokg8CNWJ0dvdweSgFyQ1IlJMpJhVigdevXSgV2CMBuo7iLim2EzJhxkEzSIIFJxKr2hX40FnjY3Ho2FrCtQ+BnKFDK2JIA+4KHfcFv3gIJB4NDPRP0EJ69qX9RBMovpqSnSfDhGqCRiRl1Rp8OZ6SR+RVVy3XV02PnE+4DnhwYlDBAf9EgqjRqJQjO/WVeQXdWnSlAIPl3abQIx3R3qSxJysnKq3/8UD/RS84BA1HUgSVBCFBJSbGVUbmDjt5hYbumA7E0AiDZylSMxnCbkhapixVZZTVAFISIml+Gg0zfIYSwIAHOx8/0IBGGZK8D1eWsGmgGaV73kPb0YnSp9lO0mbc00CdMeh3YGhgL8+vWxCHWd4gCG1pQRqwuGOB6j4mPnWLRyNWZngriqxBQapZKL0bxrp6740IPtbWrvY6mk1OhCHpufvAkWSfkp+Icmhfmg7HV0xO8t3HxHCG169Z+duqMPbmBHtU9VrmFVgWbIouWRo0ryvKthaYwX7rY2NLMkiYCLa1NOB/tLMBsevoX8r1oFI1BInDCKFTchk1bwin/l6cA71wLbDBghQAVJoTSjfv23T5zxtyJQDDa4pTwa3fPAy0P51BkICV69Iw5o6QxEPvM33zJW63NMB+xk8ItaYhMdqRgRskBM7wS2M+MjGuf74oiXiU6EwkwAyVmjhAO2zif+gaStYH6gnz0gmFJESRRtRn1Cg3qsIPDyU+ifq2arv71OiArK5ejrPMZwzU0tejHMQJsIJClHTw4kzp1KEZLeA4eoPJ2Y8iy3jKrlNmhGqziIuoUfuDQpMBpCK/zcHs4PTaRt6zCxSNDfb1rVlY/9cRBZ87Xb14T/OkUt6IimJVWd8iIi7Ps9QitFBxsRMQCDCqwLI1OhA2K0/QPUeZr4p4Mj9L57nPIRdbxycmm1iapSibONY6dmBH8F4876uz2JRSKl+EDMxGMB5lxbqLNChWEvQulkBxqyORmrVhZ7SY1vhhWmmX14JatTFJ8cuvObchxcbiwBBI9NDwSnxSfkydmK9fJ4fzinJOux3V1K1eGBD44JLNcZjJhoIiRunX7NkpVBtq7778nOF6agSx9QAo77mrvUPBKxcM9O3dFr5Eyd/inuhWf8B3MeqOsinPDUYkCfS5Rd5TqpgVFTt3fIqFC3Dn3hA3M7es3UFzYFC1aUlQo98Paah/OK0tpM7WJjzR3BZdQUI2mp54+ZmsnI06BnVLH3SVF0Hv2HEGzAZ6OqgLRvDCgyCIBsQPHoiaFLhzVu/fs5KFkKhA7ojE+NkVkEI5KJzgybpGMrrDNI2K8/qOuxYyLEeAq5p5FEldUoPhe5fIKx4bt8bHLy8ukpSqBz6lPDYpadhhuyvyyrEk0AjNbQLSkiGoLJYbEiugichUzAwnXWS7xhvWRmPjvpk0bOjk+FxeZGUI+uRLACaUaWy9IDe3hol6V9yBZjTKbXJWZmxvrgy04EY5/3Q2HpSXSiPVXxV94Bnud3Xjrxk1UQO7f/e4tq6Qzz7B4xcReu3bF6YkI6rfe+h1PIrpjOXCmJHeSvtzSPJK+mbLZFC49tBQKt4YrqD529Oj09FTViuX1dY2I+Mwzz3X19El+XbFyVcKSxoMGS0sZGx6yYPGVwDPtTY2YDv1jpjgfzOYOdb5YKKl0/8VCSEBT6ZObwAYAPKWFBdxzGlgXaAA/mQjmv3Xzzre++x2p5pgWSKQbYgm1UbQ0IluFdBvdcHr2k3cJMiHq7u3H+SaFhRg2v/rVL5zUrVpdI/ScSuR9EFaHguLBYK+towOzyTZmMcrGNOKN23eEK6/KyjUoLl2/tlZhasEqTm2FJ5TWropbnE1K3EyF6oSiExP/z//5PweG9p6ge7BqIsfsIPcBCVCpTSugn9DXHGEG26A+9WVqpuC/do+Op1CKeUn0sLf5upCKWPEqutJLs4aG+vsP7sLY08efQi8LjSoyerO34tOxVaNM+vsGnYYODvSaL1RI+yHjrCY5A2zX0bFBMLvXlblCFr7yla9euHDJbR4R5IQbylJTU8AQMXenJG0rUejmL7dKmxSoGHisfCvHNK+c5Kvly/QPGyJNUJ+nACcjdCimND0NYMTatXOXFy0WZCE++LXppBAPDGx0jLt5+x5f7pNHn05Pz9q1Z39hcanDFwWYcJU6YnSx1gaIajRKGaLhJaqFzcrKZ13BKEw9Wyg/kSugWGihvq29PVpMivnlA/twh2zMd/l8gDBVmbI3b9547/3fE+m9e3f/iz/8n1DLkgkj7Et/1Qcw+t/+7d/qULdsQecSeA4klMLu3TsxJeygpXExNM62MSKu+revpRq8bgGABdGKLm0muoK69WygqPxTbThYGxrWfFlvzt145lwMJKFwdn5RaANU8uZJfsLopMugMMhM4YcWcCYZN6yaLhkvKHSCmZebbYKiKpSPtiGT5y5V3C0wuYI0YhYdbAlPdBZPlRg6sm2Nqa1d88orr1CvjGM9i+XClNDlKgACTL8DyQSdFaxcscJ2RVcPHz5wYtjf18uTpGLD7p3b6Xqmkjh7tpHRT506Gfbc42NWC9EEol5aWpqhkaCajlvs3X5lf6lbqurIsaePPXNckQkiYUWkEWDSKksOAYA1wWnHDD9IDAnmC0J7Nr9SaiZCwWmscz9hevyHj/kCI2An4UsbZWaqxIadO3evrV0v0ky1rADJwoKdFfmk303Nu0x/ioO29UE+pGS72+lhGJhHVkOABIcAhlvXi2QDrXEgUNEaj+E3y7znJgKTPhpTB97VjPzrXOEXPEBx+C99Ac/RaeI0zXC4v4RKz76LHDMjaxv8eMV89cz3g3DWPwN54ksUdSdOnLh48bKaaAwC8Fti7T9JLMYDBuPShw61lssoWr92LQbGkFrCoR6iPOmv9cl/AyIicdWABAl2BTCUQho8m5pfPTcvr+gEclhLGnjXf6kqZMLeqEN4/er16CdKHQ2ib5mRTkwESqEaqHrGM9EPzid6HmoAFcZFPvpXV1HjL/qTTjCqZdvFPYZSAiiIc7XgikRThlLwQ6lbJ/0jRL+zfr71FmJRUshHF+sTdwEAb0AIgwl6HVESbWYEMYc9naRG7hvCBo6Dia1ZIB8tDAw9sIapaUBajfzFzIDHPIgLDNOk2fSmMZ73gR/vIiiUQouhzZq+ghnffZoil7zQLVgUDk2TeSqgUf+YDU7ggYMNbOYIGFpe0HOYaWOjy94BY2p2MlCH6+wiwKwlMPCYQc0dtj3xxV/Yfur4ccebeAOhfSxjxoUK0mHW/gtpINcbIBnxwMYhqgUxd9RCASFQDWdeYNCPQ4PBwQHERTgy4q9XoAW0WurEfKl0ABjOixp4y2bMEwi3d9ISrSEBJHDiuxeBTU7JHZh1bqaGExJtyVN2+s6N65fOnV2cnfnyi5NdHe0H9+93QCQiyK8oiUP0s2vXDtQHMPgNxGsFkzDDm4MuRgEPYAzkgy6wrUCFy5Vtt9ywwfCyEcLevACUCXLDkn68aLksFr4pz2R+kQMLRYySn1/wf/wf/1knZOTv//7vSYc1Eh3t8MmTESFWjgfFiAkZ2Y7OCoqKBOHY1to4QQLlCVSIBTxZw05QRzmoxoMJIWo0Yi1pCSEUZtXySqJnlXEC7F2w+a+u4BzeRCA6vSEmFAsvMmQq33yTtrpx4+79e84mVgdjKBwMWmqtfRQvAYFtC6L+MQNywA9pIh00iRcd9TAlbZAwpLFMiv4EJ4b0X3yuuKQjcZICPPC42sISBmDNNDYpXA02qNMbnOvZuROjH3NGaSEJA/xwBRKMpFtLGHhoPw/1jAq4i+eVatVS1MpoZPNQXFSE4Xsjut0N5EZsaW42QSsaikgDQm7bA6Fi5uUJIWVmYHid6wfaiQBxQ0G4oiIAbEPlAgFE8RzYZuo5m9nUEBESEIUAeh1UmvnuLzSSILOGW6TE7djeRIyIebwLDzr0iul4Ah548N24whfcq0CfQKNIRVsLk9WSOtItZxA/plBKvm194kzQRuAMuztSg70FsdJniYkJBw8e2LVrJ2+svS5GUp1JbreL0jjvqJHPTnyu+E9xWSl3jp2bT09PN6SZAlnTVbAQImkGeJioAgnkMACl5gJ+f1FNGx8vRidrjhr4C2wrLJMdcuAEj2EwCwqaeuKviZMaf/VjSfK63szCcIQO0U3QQkyh7T+w18Hvnj27duzY9tWvfaUrkhLpXa43SsM+zT8yKE8J09qtuxpibiGcNhAx4mMBtZ80KUj21pEnngS88rU5WZnK1WiGphgYNX/7298CHhuYvjY6Nzqu86sp0MzgxMBaYj849IWu8Doq4CUKyipgCKapibz00ku2cJhcS3wCJ5p5AofwiVLUi+cemgggiZjOKQ2BfAaFf+iimiAEkJZdw3kIQpISRb6/BmLEwRXqsNghGeZFhVHLnN3AhkwVikUkmP4Uy629TRvjwhVHFbTbxvvJegESxYhNh9IwLr1BToENdbgR+7FLMTObDULwsA+FDwaj05CQEzSq8MnN23c4OnJhLTLbWzsSqlyxsj1yL72BCYZrq/zFB9x6PFKxCYkFxSXZS4PHLm5kdP2mzXSQRPWY+ISlBSGZMiotJoPPQiB5foH1yUFYZ1sn6QUorOnwzp37lcvKnQgCBeepBQvRvcPDPQNtsmVsjyjHuIREDaQo/eCH/4xwug1BoBJxFZhI40OusWTmkjedGBqukRBd4RddzTCYsJmhCoon2q+tdQVMFsgbG+oQKTYm3a7U3kPSFdwt+3rl2ORUigja9g4MxMvLhBEurwA/b4z4VPcqCzcxCxoz2DSV6sZwqs5SB/HxcUq35malLq8oh9+1a4KvERNIeuD1cQcn3Wr7zp+xc8c2C6oa3ZR1XEzC6HA4CaEERcDIELdJVA7o888+EfsroNxAS5JS6YXxsTFFPKUaOGFwv3ZXZ5u5b1y3lk/ry1NfbKhdgyGsLtwDQTL7g+P8wMF9I6OjldUrPnj39zt37PjFz3+7b/9eyMeCt+81Iqi6CDl5S0VzZufmif9rbm3Zv//gyZMnFGmBJQg3N3frLFHf2rHpxLgb46H0rd/9jn5ZtrxyaCSUvfPEXySGCuwL/3gaIX7xi1+AxA7ViFBNMERAiXWyu5ueVje9HXeyfekj1LEaedFtNt097q1YIfLHSQ5+kIgCEgsqyaH1otJi/fNWlJE8x35g8DqnCNeIZgKywUMGzBECaX+dUHDQriuY0Q/Y/HT1+i3Kh8cU9XVCpO3Umdi4xZEOspJqJjeZkfLs5KawqIwd39sTipDoyhAOTG36+RrlXvfFDcisEEsQKt4WlgjaM6IN2I2b1y3GFcWl8GCyVlOHv9q4JQtyJJYACajOnXxxJw6ppnfgkxAp/m+UqDYEISp7DnW++8iTiWp5CzCQvMgDRgGZoIFEGYLc3LFKVIOblye+I67vnqOUDrE08fEJ5lXk2i8N9Oy7BQ8h9I+4GhMioPovSLT3xFjgtBzq0N5BLL70d4alS5qMpb1+3DZHPfoO21HVo17K3Mzkrp1bxybGgIp2juYMinz0VOCW/n7ToRlbmpoDAwwMLqtagUBObDRDBbr7fsSqBiGdgFL8tSIrpOh5EWJxoHs8HJdTxCbIoMS3oGXE+JWAYyFzwU5mYcTi0nIHmynTM5Kntffx3KzZH4bwil03dWzWFMjZ02cETjioNRb8UEEgx1TaW+kZlGiNQHBiUKTBqH41NTiAVT1EExCteZZPKy5WQSl8aHMPKtEy/vvLn/8cO+lNtywDv+J8r1vqPKHZ6VjmgonAhl+LC4pVLt6yKVwnRJPIwZV9C3X2mVB08MjhL6wKuTkyJFzufu3m9YzMHHpM9OM/+2f/jIAgKyvcEmibZIEUmoXxSIHpYznql+Gl4CYKghYmCZ15wRKOgoQorbUEpEktKysXTCZYGcZoEZajAAPvfvD+uzUrq62jeIaPmW94emYKZaW+mQW8RZ1KkICTreuEgoxb8wwEJ3ZcsOoLiqs7J/BsaGjQlyNHnygpLqPJqV+l5wryi4hQPxS1dtA5a1bXXrl0eWZ66quvvHr27Pmy0vK/+Zu/YbIIgkcCACNTWkaqCSrh2NLSnJmV+dSx44oxE9lzF84jnKMn135NzkzdvHN7u0SpqioxGDhfIqTiRRJOlfBNSAybbWhB+sjswnyVqw/G4swMcw2WTMev1mmvt7U2rlsbNm+wvW5VOOhnH4NBfKzJAiyvyN1PyWikWJONvmtqLHwuoLCocaM6JVadjHOhsblBjCLJpjYF/fOxMhGtLJ1t7WLupQIIVcnNXkrR8bRyMNyV+5GSbAHKyc+78emnCuzyvFSWVyxOzbpTF6tEVQG0WEZtQe89eBA4cMN6/6URHZ7wO1uh8AwHPUXqudt+YD55SXA9hGUrOQmjCgbGVNxAfAE0xpX6y7xozt6LC0IKNTabjGhXJhSLKj47aySyO3WZmmAMbLCqplrYJLSjtewg34WiCeFXhTPE2fcPwAxciSuGWChVRpzOQRRSn5VZQKgtMI319ZgKz1B8Nvy6pXA46zzkDvci3iO8hIigEUzkI6qkXj9kCvxmhKv1BoG+aOAtlKWZFamk3zCzKVh0sCVgPLEDhx+3KQnINiIyGYXD1Hk4bQBs2Mh1+fLSXHhw5iAVxFYN3vTc29/P3Hzw8PGO3XvUAmLPeVfPPPc4B3VuXr8qL37Tps2yX6gRMoJnKHNg+1jvoragxjrHe6YAWhY2yNFCLj5sPLx7hy8rOwR739cG/+Ner3zve98TqDk1HXC1MBMMP+YymGldwo4QnpB0bIw/DeohzMMbdJ05e4rPETDysW3O3T5hpubO2SytzoEbMBjTUqecovNp4iKBdl+ePoP9IBn/ozKmkhQEP/293Xypmzass6w4lenvHaNsqWtD2IWCB1qoZVqCgjJxBBX3QV/hW+hCZesy08JbVCVUILE6KP7LC4OyRAxCwIbbTZ/kEnN7Tvs6yhOKkNJcHPZK64/hq05386MdTZc8Il0JZ3DbjOosAFbplQ73umUFrqAFVJZH3ryenm5P/FUW6cK5s9/45usqCNsrKr/+m1/9WrwAf6g7SXZu32FpKC0LddXz87Jl7EDv0FjYb8AJFhoZCBeA1lStMH3KEAlM0KQMijNhD0hwJYnUpDyURkSZr1y9BpdiCfypBMjAYH/s3MK9+3dW16wk0UGfSj5ELbvnxqa6UL9ySWJh0dLmlvq///tPVSGgOiNMFY+6EiWnZuYyEtQ0kpOU6O5AERUb3BbZ3y8tBWdgX2BFP8srV/QPj9RU17hgnC+EZqeJuro75GmH3Vhbq8vCeGcEPIVE7+5upsQ7v39POIq9r0M0BDh/9kLwTeQV7tm1SwpfXGzs2jVrlpWXc5zfuHaVxtFl6pJUJj76GdTodnh4i54NRQ8iRSrIBvZ1GCqQiVJwrBEUwdyCwlYqL3OT37lzj6gTGD3gTmxNF1tvcIlCTq1cjW3tFomkpERCItk3IbaKdwo1jUKu7N7EHEctyMSE4JZeUaO4QTKPjiIJSpe69Buvyw6BaucqcQ7rZhf+21/+tf7Frj/99DPIbJGua3gkCnx6dor8t7S20mJr1wcDxVUydQ9vSp7u7R7o7u6PiZ2/d++OLHKzwHxv//4dNGJrjo0HbzSqz+TlMRQYTJzo4ezCtnJ8+sChI/qUv/H40UPXNgObhLjcKjHRAhd2yYpRxsYlykHs6e2PADZHlsAAZm4MnjzIUa2PLKls8MIzx4lTUlxM/+CwpcjdQ8bFixhXb+QTtyGKIfx1DtveFmIMiBx8Hj58hIrxOtn78uRpJ2uOU12WkZiQ1NjQVFpSVlW54sqVa0899bQKoc7Ev/f9HzY0Nc/OL1RVr+zp63cc5rICguoWHrtzcmV7xiEZJ2yuv+/d938vgB01bcxAAmbkYMZ5YnUhQsDwlvQys1EQFpylxYXOo3mkqcayklLxJz6EKjU5yV3lVBjnwQ++933U7+zoSFqS7ERLgpp1S7fWYCVNyMWVy5eofk9oB1tXVPuLv/gLUrpr997RkHo6xcTHyU5X2C6OEY6y/q0Q7refYzblQR0rpUg+3OxCXnbGwMikVCMmRYLdr8L5btVKinX5WpKdQYrjlymaCw6pTirGEmuHhhk8oTF9hK8aET8TCiIpb8wVS+JrPZTBAvPgZIv4FXLoKWwDn3S6L9YtP+mWFPjVQ5qFWAkLnBgOUYwwRu1qoBmNbynCJNZOjSHcibwEXL3Bsx5E+gJPy7HxUA0mZEWXuBKuyYUvmNwsOrtaHTfn5mQmFQcXO0yilOFksDgf27R+A+cZYbQqONfavXefIhojExMqGCCKUzWn9Tb1Vke0YwQbV0Qc9yoOhAcUz84M23uR5VzjYPYQ/FjavKKaCkPiUklBjEX4hhOQi07UGLccOrif6uAEgSUKoaS0KCVJltGc9Ac2ukA7fhon12s3rHVSivm9bm3DCfQvvFEX6GKm1lEfCyEs+Snibw16EptFrecV1ZV79u6y5C8sBgebUAcimZ6RBuC6xw61Zq1qqMcW9Tq1g7098bqli5Pi1Ve/CnvcZmVlKVTr6jU1dikkBTLPXTiLq/sH+3x3waIadWpm/+hHP6QfxIoADyrQSJ6lC++EmAtA94/OlCrqnwYYBmV9Ab/Nhn3O4Mjg1PiUE3zGJXvp4b2HSSlJa2rWrFy9cmJ04tStU27YlaG0ddNW8VE0CqKjdV5BQZeq4bNzXc1Nrr9Vgez8uYuJS0I6+yeff2aV4QU00/y8kLxOOVi0cJdxTc3SheJ0O2L5LzQCAyq6u0dLikpSUpMFjTBJaUJ3nCH697//BzhHdoFwApEY9j/4x7KNmuUl+VbTNatqpJKj1//0wx8wICqrlinfviRZvZH2c+fPWOxtOy1MBlJ3WrPoltI5IlwBYNf2HQADOcVF7qh30XYIpE/uLu0h0HpMq+OBcGN0dpYIQ+xNH25ZkmgRFUiILgxZwZyH9x9QFVSO+9z03PDwA2l/2M+Lyg2Eq6ZiYkXvyBGyj1lWWv7Wu+8J7sI8JgsD2NgdWC7hMUF48wSvXjx/SaKF1GGRADWxFrX0hPhkDKn0kNBcupoUjE9N8RbNLcxt37mTRUuEwYbnK0vK4yNudQrKK5Urqm7duRspjVrkdf1bVcvLhZLOM8rx4dTkqITIf/fv/t2//bf/VvIrtaPUmzYmC0WUW1dXmzsOhbiw3bUnlbD66P4Dbmzby/6h4KdwZkJqJJ52tLYdf+7ZB3fvcUuxdTSWB88ziNXpE6iGfJJu1ngDnpHARhfzYG97OY4/14qTRNjDQhDITsK31TUqlja5clhKsZVM4QGHpBOT4STEFwlVfvJF+Eo07k4hzkgFDRmco6k9XX5lgEbbRE9sHP08rq+j2aJQGQJUxITjyUM6BGCcBZm52epA29aKU4B2oOqZ5WpcuVJ4jIFoRpEFdwq25YMLeKaD8TnBdNrJRJmPmUYpDO+4rLykeCxu0SJOb5jmX/3VX+3es08tCurChjy68tp422ZgP9SMNoM3+EHlyfp6vs5QXKRS7niKV0IQ/KpVVKIhbt66MzIyiuI0DL8ShcBgc7VFSWkItrE/QSlmDDgpQ+CpLAJyhxJqW3sFC7GhEQV3cZBzIypqZHaOx0kNpceJuXXLNngIfuGgysaE55kFbpdQYeO6dfOWJw8/QUFhb8jBAI8fPCSzosjgU6iFpdmyaLJYCPDQaFzmExvMGbJlFwzGshvBCWDDhNQIqEBraSaVUIFkZs2B4vAZLdZv3JRMKrKy5SInxsfZpopsdy1o9KCYv3vfvgMI53VsRsT27N3vuwNFGJawYAgpgq5/ZoHYVwsgJIkOQGjUopJC9Zdd4nTB4cD4yPq1G2BD5n1sXBIDsj5YOyWbt2458dnn9Y2P+OJdU2jjwWMHhxXLK2xu/+mf3mT/CpRT8P3Z48cH+vqTEuN/8/ZvoPd//bf/q6NRceDAEEaStTR3fDJ4DKcnptjbABNkfvjwk8qGiLTHTNEl7PGD+4sLMe++/x4KNrVIx+pOKCzIWZifevTolpLnyUsSsvL4fedvXDs/Oz3+/LNPUW1h5xczLxvVgVRWTsrKkrLZuYWWDtF4Y9YtdSROnTpp4xKUyHB/e0+HGTIUbGsa6pvWrl1nY9RU3yw8ncRioQxlhvv7lpcVL4lf2LxlPb6U5MHCwxPqJ9iciZnr6urlNv7yzJegXL1SUERKdCllwWRlpLqmb3SY92pKwCI36sjQqBIIjfV1NAi9YwiKnsavWbkKJ+nh8WydW9bQ9ZWXv0LA7nTf4Y9JSUqp63i0enUtL+/2LdvxEGaiZUYGR8ZHxl22smPrDnyG17vbOxRF3rlNyuaQo9kkMqFwR28vwwLwc1kZzF/y/8Gpj7BU/8CgNfvtt95lSDm8KykuTVqS4aJh9cESk9IGBseoIUaMW5C+/Z0f0E3YVHs1dpS2oVlkbDS11q9ZtXrTls1iZN2GyJkK7ZKNuBlqVq3asGm9FffevbutbQqz1ly6fEVU65p16wE/MDyC12tqQyq29dLGMSZB6EVhyly8uLq9u3bi1OyMjIRE+6+EsRkFfwodKVo1y0ok6DRU13D94mBRNK3JKalL8zILiwuZuixIZzGcvZi8tDBvemxYDrFQSEEkD29c6err7x+b2HPgoNQfWk84jYBFMdAUdIJozmXhDt3erk5FimJTU776ystMz4QEGUJ9HR3gX1lT803SKNaWn4XCxUI8zvX1VmQ3X/aBU/mdeqHcza2COGfm5nO5vHJzduzaQ8XY0XX19iQmJ9auDyV33J+yfMXyR48ezAX7UzXPDMcIavFasUiIvyw8O0BZDSe/OGW+9OCRI0/hK9yUXFTY1tToFvolCUH59juBUhqyekVmek7MQtuysqpg1ufmBMlMWhB8575Y7gr90/giZRhSDg0oO6UQH9y+jYuAISYBwkUuzsbGq9yzcfMWNV+p9b6h0T37qkl7d2+PXS5FpuxGWkrShXNfqv8tSLOguMqKXlKY87i+ubikfGhwzDYyNj4pLl4BjVl0N6jtxMBQPy/79My0cyRlBPCVyhBjDO1RxvAoFKRnZOJGmjQ1LR3qRnp6cZSY9YnJqSXJKYVF8kyycDIg6dYExk7EVEUgDEldUqMxsULvEyuWLdcbcZ6dm5cMY3T/ZRVRxJJf7UU9QTg7mUjiyqwwhvGYBTdbz82EkERcQWszlJ1fgXByei4jK1clg+4eTq8lwoULlqbPTs11tLaHUj+1q+1dL10872AceJYE8reyetXd+/erllU9ePhow+ZNXErSI44fO9bR1gZ1LAyRu3yBdHdnezelf+3KFZII1ZJzKCKuDe2tIowP2gy0uKWgqETBH+tE/+AXFg/nMMTHAaacfjXg+3q7We3JSxL5JtVNO7hvrwVgdCjUMLXAMEosq9yrlijr4pNPHvYK/NBO3hJ06oC7vV0OdDgewaiWMdsMs7B8en2gdwAkfd3hgE64oIDssPpeuujkyoWMo6NDiVwVhfkpyYlNDV0qe8kDHh1hqQtZyRsaGhY8KtKUapIkynCyR01N5XAtcsSxoqqGOFevqlYC//KFi7aFShtnL83+8vTJp44/rdzE/kP77z98+Mzzz3IEilbv7uvH2DUrVlJEHOcyC/lly4qLLBXmmJ6agSFzsnMEEzKD7t6+x7Ixaz4UmSUlRaWd7a1lpcXtnW1k3P3zxUUFjx/eT01Oc5ei3KfsnPQb168KtKpvbV5MVKlpZsKOQQhBTMzhp56Wy4EKiJIQ7+RtpmJZtQuyKCtrDW0PjYxRWsC2QRuBUmQKTS1X+BlNSXTQZtnZupWmzENjXU9YkiAg28XwWG5FdfX9+w/k3JN6h9VZGRn2irYE+/ftyc/NuHT+nNHlnHR0NDk+YRaI8GSLNzc+MmJBfq5FoaQ4HGU/fvho6/bti/Nzqt0zXEgrzK9dXetISsLO/brgV3YACCo9tLQGJ/Rg/6AXWZ82ri77fO6551xxw62DITEndkVcu/0TJy65dWRV1caumo6FqdhVlbVTk1MOEttbuzSJiYm1pWTPXb9y1SniUE+vdSdfSdDhIc54LEGRcO1htmNPhswNWeHlBQUZ2TnYYNXq2ryCwt7BodKKSlTOycWc/Wph1jU0gp9DSLkVC8S+Q4fmIiUEiDOr3erT3CjnuiUnNVKQyonc8mWWtrrmxsWEmN6Bnl17duF2PlCW6/DgkKJ50p/iFtKyeY4SEt/4xS/Ll1dK2/2zP/szRjDSPLh/25keTIwMD7oAxLpMTkm3JU+uIMc2Z7Mt07LlVQKIZVDwQycmJVdUVikCs3HL1itXrzoSlT3I6qQALQfUhdjGvLwC3Ag5cvlki+pQ+LX1FBG/8pWvffbZJ8rx2NUoCcVvaBf09PFdyHHm7CVcraCxZrn5oqRuxiWmjDc2E8nulhaVnRRrqqt/JOgmTl5HQlJ3b19x/BIFNkRgP3j08InD22WoWy5ZZ939fbxgKnj0DYSMFBxL8BmjhAjFYdKS7YSN7DiWyYlbFESu5I7VUBALO84iSSdIyGGiuEkQYwPpwb0H0mAII+3NxVNewSordvR97+5dbO/5imUVdQ/u4q7F2RCQqcZRc3MTHrPJJyaMVJqcDUC5MYE8ISmIrnM2Ky2HHNQRrUUEy4oKk+Nj21paKPwH9++zcDAAc+X4M88tXZrnRf81EXWofOy5SouWjY/1u8YD8vv6nfWFRF7LRFV1jSWMh7GxqQnFbZ5Z1kmpS6bHp5j1Au3ET7ilA3KWJCVDVHfXwMsvfY3f4fr124h45/a9fftykxJDqBWTSujyxi0be7rCnY88/X09XX/+7/7fZA3k/poUWXj99W+cPH0KdSx/8hp5EFbWrGamT9y6q7gWN6uzd1Wkoiu+C7PBz0JTN5JQU+BQ5HiDyXNbddt79+XdxScu8WVkYio9M0uZlvHJKbpFHeaUjNSSisq8oOI6qqoqH9yvm50Rvbjo9kBFBeYW4hLUGUhOm4mN37Zr99/8t7/iCZIokpAUzxBFmtU1a1JXVlOYsYv5chhOnz1FgdSuXhWKYcyBec2pM+fLy5ZLdj9/4QLn0eq1NaPTw2fOn3z2+ed7u8c56TmiPv38ZMHSPKEfPe09v//N2z093c8//6yI6C1bNq1YUdnZ3TEzN51flN/S2Vrf0vTiS6/IKj5z7vxTTx5JiJfZL3o/3iqDOdWqQqzt23YES9hlf0WFEsqXV1Zx9GIJW6OE7s5WGahs3PylmWTMxtLRWMZYSmJS7I6d2+SAcmecOnWW7qhds0GSXFJq5nsffuQQe9vOrWwtlji3N/ckRldD7/HDOkf8YaMTn8iIX7du/Z1bd784ccLScrlTwocbUmpaW9RhXLG29pBmFDFjcf/BQ9jXPsYBQ3Fh8CUno7IExLw8h+WTE2PUN7GhSj69dwdPWDttuexcJb/4ju9pQ0zsg31xAJLrUM+cmpSd9YwW0K1f8ZM3nNHTlejd0TFtx0wIo5YQYcMoWmrAOnznnbedd2sGZupbnJpmdhpkz34G/BBNs5Ci2IR4rlY3Olld2jvD/T7ecuDFs26nBeYtm7fduXf36FNPgy031xnfoHOUDz/+VAiMULmLly5l52Tw8QhvkBymf2ZTQVGx/L+uxsbJyXC8DrHDI85aBrOzc1asqDZNyjRIfmvbxk2bLTCmPDY+0UN5FRcfOHgonKZNTiel565ft1EMolrzo4N9almQWMsbzLS1d4pHISTzc7EP791PTc92zvDjf/ofstxMyu5DtJJmNA5VwqSQC7s4Nz/Y3ytfjfp4dP++DM+ZGHHJlueV+Iwjiu4wd9gm1Xbkbc1N5st9tWZ1jfKjdtrOnhTMQrK6ulgrBC60SBcV9kGsSnwGNfSO7btgjzOVy9/eoIzWXpqvQhGVuhgby+UfyD0TQj/BJsfUpOweEV9v27ZscUbsC5VhaQS/75BjO4q91R5evz5gg4+EQ4KJKSWGa6qjTeyvS6yXI6U4pdLisrt37qmZSFXRQriCN4WO5oRXhZaFxy6hW3kmrP0ffvghmD/55KOw7UlIABuiGD3sDaYn8oor3DwKIX09wQfM3MSEIM/KzLYlcDYtBtSZ4969u1VIbG3rnJuaKC8tQn1r0vDQsK5E21p4YIazOfgJ0kJv+IE4qPCYnRWycgHABsL/EOtds9aGZQ88lMIqwpDsFoKdFPl4BV1AAjlw6EU9WDM89IpfPdEDqR8eDaWBSJl34+JjMad9CwGx0cL/40mhVBEp1g/JYg+hiyeYgcA6OQ0KPZKQwBHg4iHRLEoBToXqIzOcQMzZeRWSptRtXGUENbvFhpqUsaLOJAu/+BBn1idPntqwYaP9ZklZSSKDanrSVCLhpP4kGw6oJFS4t9NYQ+M9bMBANDpoGZQwE+zFjAwI0UBKGReU/yKufa+MFLM4feZLW2WmrRWI9hSgyIvsLUeODx7ew650oyQwDhgnmXwKsvdYnyAXZ+wwRks84C90YQMrLlQwDiABcix+RNJZEyshmGL8Xv39PIsZGSWOkvxkS484ziAB39BYZ9WcmpotLVuZmcEvGO8h5gQtuggnk26OZIKaGhoaLcDQazq7aneMTwyBjeU3OznR3NZM8ygljoKlFaVk6nHdI0OYNZaABKdhCOesdT5/Tpyn4LGiwkL8IATOFT3mghmMi5GIUlpajtiSx3UPPcFjdrnoy2kX5RzMwDVg4picercw85hcu36lfNmKCZe95BeY7+F9++mo3ILCM+cuwIkSZEMjUgzbnMrKtmJMmAXzBe+hEcjpBHDiFbJmFFqITmCGCq0Em+d0V2dLx69+8etde3aisqOPjz/+SLw+50JcbEx93UMa8t7tWyJhLMzzi3FL5Ztdu97S3CghKn8pz1cMJ5FTPnu5tPQ86ys+JJt2wWLnnKXAmC21IyAlI4XespAclly/ek2RGMWvocXGDGUlNYmlsUDZoaE76RuIWIdamoJ0z9t33AQivFaauCOmVCGjZaWljEIVct1LTKaZYHMzc0wlpLG1Y6hZsM2XB8G+3SFqc1PDWrfUzy86Dqxdsw7LYTObalTs7mjH/8rjPrx3Nzsjmy/g2Weesxixk2w4h0fHREPBmxNU/JaZk/BPP3/DAuFIUNkfoFr+2IhzvXM8jsw7xjR/OvzcVvjImV5OtkgnfToZVCViZXU1++8f/+4fnM1uWBfCgbjqLa8WWXhTOdExFJv1ww/f5zOCWDymIBW1QGpwCCYvrwgBwLgOCyG0lZcfKCJihD7Eq5iLX7E6KnsCacDAD1gRxfFPYOlItE+EUuOa8ddYd+jkzOwM58B6Q3f60yLuoDgtPauouMSGIXdpAZeG4IX0jJztO3edOPGZ1DhBtuqXEFJH2ZS8+3m4wMm+VUbEhtKI1nSdWIBC/0JAhKC0tyErxQJOGMbYRDKqIc3X0P5KIoc6LXlG8vPFsCV5HW/AtlFwbxR4smaC2NipqhgHvaWlzzkpRQVzlx6zqnqF7dOjqcnF+RQVRO7evgUA4uB1MLsnS64wJenD3IJhpIRD+yLogiiDwrPv3iI4jQ0NX3n1Je5auohkOVJTY85zGHad3I5d2VZYq7D/6h/OT3zx6YvPPkVW8KFzBiEcvHV2X4xUYEejdseHx8qWlaHLxOwk2b9z8w5/B+BjJtw6ES9WlurQobljEvaMmJzqFTXRMvnY0vbY3kE+t7LFeB4ytRT0gqyAp2lJKJawM/ETo9bu0cmDalF4WNy4MxDWiIQT6wUZXFFZ6bnhTMqZMwyI4NGVZcV+QAURlMLMDoS7enp27937l3/53zCVUqoWSNsJOdltkbsae7pEeHQP9PY7MLDndequBpUN82Js/INHYisGmtvbKNKalSECKhRzv3sL22/avMFBhLQWm3bf6X/LR2FBgZQNcX1QpGTTRx+fcHz03/77X2/fvs0e4Gdv/JSPwPQZ4S2tDRs3bMVaDQ3NkG8wOO/r6mMDu/eDRhVc4FBredUycmcDkJmV3toxv2PnTulzljO2GZjdgrY0J+cnP/mJ+PWDBw87hKRp1ePSIQ0JbywQqYlZuUuZBbv27nN3T1jqINffsGEK6fbjEpMxB05SrhGXM3nJmAlw9I5Pcy5aL2vlEp85/aVq38vcfVVeLB2BceAiPTWCeGMam1scdShvrPIE2eBYChGBszOYwMJGMvEfflV6tK2jQzl5T5ZXVVka3URlgRFdYNEiHqSFmvCrL9gaN5Muz9EbYM6t6AKKx5mLuF4KzkSwkQZOJ7ZsDXJy6fIFJ7w6cV0f+wY5ibHsYY5b1fdVBzPld999Rz8CIgzqo37CmTNO6pey8oN/t7zMpkYCNTdG/IoqwkzdUNPEWMAI2bt0+SrWdHrDqSZY5eixp+DaESFJNncaQRjIqTOnCWGwAxrqydj9x49g2yycu9y/L6pydP2GWhyPq3xX/QMTh8mGOhBjKkNSN8hBm9x/8EBIA3vOfkBxXCGMji+oLYwoZY0uhhZnWzQ7HUTLu+c4LTOLpzYvP6cvUhLn9s2bK2tWsFCJSkxcHNeFQ2faZGhk4oMP3iOTO3fuYKBowDDVrfhg0erHjh1vaqhXpsZm78yFi4qrrF63QbzWui3bJJzKf6BTgBrUyq4dCGGVpYidD1pHOQcGh0ZYw7dPnMwvCpGXSAkVYh7oEfwAbGTV0qy9RcDQEerQazE2zmEFoxC3KOEXWYCvMtkxpJRuaIkaoO53nBhjg4ac19s3b5E93ZogeKACRymW6osTw4iBshKV8RhDSl1esTR2EXjGGbdtIXWJmlSha9/gISs7TTZQSN4N1zmPwjZCgNB8DW04U6BogId7/dcofsVOSMnNYOso4CGwSmbIReYDqG9tsSjyBslH3xgqgjWKUb5x45Z0sbGJurnFobSc/KTkpOLy4p6bD8hXUjDmE3FjzBDnYrDFIYHE8QLygsAY3jYd8Js1EoCftGvmoV+9C0u++OBAq6/n0ItPwA/soGvm57U3ETBrDE790APeZZlpIOGLTrdf8pZzIV2FqB4+/9QUzaKWrj6191BvevZfneBSDfQgA14zAMB/eN1+z51ik4mxC9NxsQ4Y3ZSZ1t83EO4/Ki20dspNNxH9UNwu8HYK5FRVXXIx9wKZmFNsehKEXQmjbg1B/VWhtEv6IqUIGG0RUXpgfUIOI9pMRill1ohoLggNIU6KCKw21irI8cXQGIyehRBg+6+lyEB0IKlEC1hS9E2Pyyor9eN1bfSJAbAcXFkzMA9Mmr7wFSamVyz/7E5cx74BubGsdj4dkXwe07E4+S/jngkLFdp/eepy1ppc/RtLgJODR+DNzMpCtiTnMrLz8gIwuN2izGepCpQljThDLw7RmI3lv/ZJBoV5LY1Cs0HgmdNnK0orNmzcbE7owqqzptJjcfGLnNYcOlqWztufZEw2TDCt+ga6V62pITjUgGohekPfhqZGylnkK6sRemGA5rEnd9U6DEzP0TEhxgzSivILOOwhRHAXEpg+IIW4aCCaCPlAqyoaycKNIIR84oajvO7UHmUxmF+1hGE90J/O4hwRQG8I5rbcFhba/Nj706Xa/MM//MMPvv8jTuJITGa4wI6tUFpSgLIWNXeBsQlYumiK+fEt8Wc6aGz5g3NM5bICngsXAfJDtU9Mzs5NNze1bti4TtSFSvaS5ZWwk9ekmSrMJvLgwX0mMswE321HCJ/zipnSCejL3ON4oPB917dpyv1xf5nqxFRQcmqyIhNijKamp7gqc/NyEpJqXOuWXxgYQ2145rU1G2AOW3TIkQyBV65chgqqxgR27drX59AwEn5jYULTqB7GKuYFe7jLYkpADAxXvmisK89xOPw8DAmRI3fvP2A9jY2O5yQpHzkkbE/QLG/I7Izicv3OoLhUlS4Rb4PrCgqLz5w9z+X3tde/IQfXluDo08dttASvO46QcoB8sgrJEVLiDnTBomQWI5EpahOhwxSmpsDmV0sPzU8AxXOyIvjN2XIwph8ri+9Dw6Ps+PUbNtXVN+IKFjyWEA2/ffuO8xfPuSoGs01OhNuU6I2B/otQYaZWGXjOzMwwounDBiGFBMNZBPEqxKKg/7KFyLJmQHKgjVVE4OBwhgG1hqaBBI8f+65PdLSQkXrxCJAp0hX1Mblm5sWLbAPJBjDfqCPJf7WEcNmrFBS0+Gv6JsgwfVzX5Lt+QAgG+NFPYNfaVdBlw28iICdoOBY2NHBoxjoEpIc6t7YC2ywg08Q99KJ5mWk43uwfwNM5uXk2k9MzIUFlWsqTSl8dXX/9V39jjq7RQKYnnnySLLz4wkttzXU2tpXLq27dumdLSRt/cepLIEVXUrYQhSz2D8BK6IjCEk9hpjgKDnVuNYcrU6N8/AWDSSEuTesVTwYkM/f0mDK6w4MnJgJ7RAZivW6ysGd7Q/ey45UMcjrhv1FGCtW0Rp0tk6BRFMkBelbIOoBeMXUWcXYrnyPehi4hNKTAi/qkEoFHN/rJQYqBiBIbcsu2LagWvxgO5/OyQ2UwqFPMBn21T1X3diZcyulF7c3CuLz7tNPuPXtIbvXKleCUeOktqdPnzp+3yeS3snn2ilFcBXPrzj37KM30x77yhVMAlpCytGQZLYRqcCIYTD4KRcod0N3XuzR2fvvObRpfvnzRZjVmIGR4o1eHqhXr1p87d8G9HUKR6x/dF994cP8+ZQauX73Mh4VYDh/u3L5VVlFevXIF3khLXnLresN//a9/LkcuCJ5V0PmXKyp0J/yUqUSlAg46ZOLy0sEpejiW+uzEqZpVtUeOPZWf7yRucPOG9TPzM2pkOvBSBseJoV0I+7swv4SsukzBJbiMhm9/+7tODE6dOumSWifyr7/2VerM4SC+vCu5pKvL7orqh0rsi3UMrQEs4zZM4Ansk0ZfTMYTyMVGWDxqR/oOPIuln8KGbGaGwISlK1LUUmPPMaVlEtWFsmiAYBZsa78FxqYZLxoLd2oMrSxRouWw9dlnjyvaiF1IKelFG1Q0nJZvv/2OmBzax08A27ZtB0mTt+f4BpDYXf/WFTUIXOh4/9FDr7iHT9SKWw/QBr3BvKxyufWDqBx7+igkG8ikAKkHX8gJv6+4BWoQhP19rZ6z3WED2ACma/A6MxdsAMPifjJriAUVP8Hd+2ophDsTWpsaX3r5ea/PzdvLlmBxSMbicQkJE738TL2Xr1xvjqzBR5560rUmhmbWWDY0E6kpde/OvQcCXfjDypZVLc0rIv/mKCeM/VW5QunlsKJwAXqFMqK7v/qVV6KCbVKANN+qvCrh7Ktq13JamA48IxO6R1Uq55AlP6oaWCFQyqpQZ9r5GjEBsJWSdjBBH0NDFw6x8fNfXXHw3L1z30Fk1fIVTqj9arIemjtgwOZXXF1S4hqZXDKATzzkNRbRZVPKG42UHHtR1YBwXtTAPh6fc5mAk+wReEc6RocWqoHEahO1USIQBlc0NcS2Y5oQAZcH7T/4pLpPrUzMrHRPXLtgC+rjdMUekkdEYdKpiamlua4WvsJ0Ovbsc+mZOd19g8ssmcPjHd19Y+OzAMjLz3O5qfVQqjBlqwev02V4kg+X9sRvOMpfH5xgIuboL+QEqz3ygXZcihbABgzZ1wDPRzqZJCYm7if/9SuuIAVpaO+jIFooEp9v4kKocdf8Qqh6mZ4SuvIiKsCq9kjgix6A5Cff/WQgo8C80Umi3nxCtz6Tk4UFubdl+60KkevFxfl5eUUyCAyEfziZCE7EdomXH79uw1pzkbxoavpEESKsZwyGiLQBQ83ZjnFRH3sPKcMbqfhhaLQzuo8x6SjYYzQYhbjJASCDOrHMIx87EorMF6GhDT55dDAkhHAmoazn7EtdWcjxv+l7HTzOjrSnXgBgFA3IIHHLSL+PXvCgNvaKyoO68oEHH1hiMzEgMJhqaps3b7Eey8zhEZYgEBuToBNlIgF28eIFQIkxFSx04cK51WtCbCRdlOtR5Iouq46lnc5ISAwVpgkL3RslBCxxjwFsYnKc3W/KQSdEXAAC7QBWU1MbQX6ohWdF9K69PNhgzxAm6GoO/nLsh7X0SU6hBXFhSRsrlo91mhRErRzK3MSVPiWDobZmjkPLFTpHShSE6ugiSlnpDTA+wIA9kceA11IzVji1RsqQEnGhApIh1n+hS3tDoyxrwD4ZS6Adwk0IEo1kb3d1dm/ashWliLmkJ+mhRQX5Lt9dvWolxQJUHZoCOMmFjeRFdbIjcXHPP/+iW8nFTSGTlQIGdu+o5rgROyqaf8O6WggkyIaWOQBv4lGF6brGb3Bo0IVQYKMBZARiA9hwmBNlQlJssiTOf2GYXjKFmEWnYon4MDYhznV+IuuEFPOB29gIrYYQvny/zscsAlUhIHmlSGCamEdJCTKC1Q8dOiSTrTOU1WoW59De9oClwueCCg42qVansmQW27PqcAtckRrIhH9zpzcobXimcp89dgyfAJv7xCyEnqpCgyVAor3a+YQufjGGgSWRUYfXbt2U+HvgwEF6CWAKIci7ALBzpzU1q5bm5b337jsEDR159ptb2gTS+BVxAQAMXOQLBrMK0x7qnIAZ+WhjbehofVougRQSGJJTnMGChH9WZgUiwufps2fcurN77x5+H442GsMhI8Tqzb6FF2hyMlwChduxHFLiNGcyTEmja0xv0EWmhh9gBpaMqz11EWZRwM4JCbWo7K+tNJPXma32uBTwAAAbgL2CEATZKoZtLMp6lqgjOdBRs06izKYTXIFqOicUGhtd5/oBj79Gx942tIbgcsG9vngX2+M3A8EVICFNGzabHYj8E/xgUH+jwmj6ANDSjEwZs5Flv/Jmnj51csUKs+sAUm3tWoXO3QKRnpktUp+zEVOJdDVr6JJbbCto25+VVUmXe4h2UbWGdQk7TtiybTMkmIXOxYb94s1fmQ4TmUmpQIK69ZzCXD+4SMCqLe6jh48Yr2gnfIhCMBHiYMqkjLBjPwwJYAxjF20LDTM4AYbhBMbMsSoEPaY6dTcpkosKXjFN+38IwT/mFcWYfuABonwICGjxkvZciqjA7GRtOlvWCQxgKp2HVVt06/wCUob1bmnYt5B03/EDrVXo7prYGNpeTeeUohShDeaLc7AWIdLGpGhCVLNk6AS9SAqKw6cDZMkGKmPXrl8HXY8ePQyRrtM5AGZZ/eAHP7AkCgLEGzYgaEfj0fzSjaTcXL1yZWJqHPLhNhwDRu4wZZAPDwzLEbXpIkY3rl7nTGlubJiZHv/WN78DhxxPchuQnreCRk1OqpbO6mhr547tii688cYbRcWFCe5kIXt2lmQeGVwRjxKfffaZUpvMNXF+2JStCDWWEDe3bdrs4tPZqTFnxHOVy5ffvntLzP2o2yvkBpWUUN/sxXNnTiterl6p7RpDy/JTXVWJPAIHnTfAI1Z+442fIaQtx7Hjx7GaUzZGGDWxffM27MXVgVpQiSO1JxioiKJQ7AkqghlycTnzm3OLbt26NVSHxSs2TCRHeQR/bSND+PiMA8mgN62I1y5fwS4O7q3N7BzHlLb1qjFQuHrWp9f9117Z+QBKK/Df2cmXIMhhqj4p6fyFkJS5edtW1iRRodRSMzJXr10nnmdZ5Qrqm1JmMolIAbCgNNn0H3z8katkRIo6vTbl0opypfnXbdiAP+QUut0awkkXLNFHrgKhSnJz8m6oThOurGKqplmIzSsqe+xIPgkFMbEIaGl2syZv3Am2zrjZW4bGlJBmzcjPL8UypBSD4nL8qrH61tgRPmV6ESRBOM7VCgpmA2myc9wkJz/dSmYIJNCJeM2U1NgV1auskWlpyVxVLm1eX1xKOOdjqMKweSPMOmch2d3WrFk9PjGlJDZJOHLkiCRdi9lnX5yAYYAReHPXHteZAvEgnMQYckBoUGsSGhEAKgNaBof6Q0mo5ARHPaTFu17RIOwWWju1d+bolba2dt5QisCJAXY1FxJFiZBzlsGf/umfwoyoUCINYxCuBzjxUAQC/QIwXXEcFBeHe1iVECB4fO1G1FhvKo0QYxf3htQRFRUi+xAqEoGs6RpI+NaPe7/FmJmIWFV1Oey2g7QP1PV1j5Eg5i0LDELEGCwvXy5mYGws7sjRY6y4ltaOanfHKFeckg6T4u9FlSQtScyMX+IYQu6HgsRiSMXxYzCKQNRZZmo2BcpZ7y8y0f6+WEiwiuUcZSEqdBUpPhNtQ83RCL5HVy8/4RbQet309eC5LyQUmTw0fU+E1mAnBqi5eAU3xtrWRD66oh+jSxflFZcY5NTFKnqwbhlLiA5IiJInSh9QTJgKhr0ot4lzW6ZAf3ML11R3V6dSobRkbHwCRjC0+fK+EHb7cJsxlP3ii89379tLQtEiso4mk23xOVRwZ1e70t1WREBimzOnTtugYtGoUIDKOalXLCrgEZ7HGAUJvYQTIIrF4MUFRseSVLUghaM4+IIBHCLOW2Br3tICxlpLcxuECA7GA/bn5mjuGIzuihA9VNT2hI3oRdMPOiQS2ICL/CQ+x8dP2EA/dF1Uj+Fh39esXksuiAMvDJ6HBIEf4CR0aelLHHlRaEVFeS0twyJBsTEcX7t2Be+JYuru7pJEMb8Q4me4BpDVCY2/4DSiJyQxLT0V/j0ENloPDQ6vWL6S7fjGz95UQkfCpQ8ZNxebPYA5O0Um6aO8qiL9kB5fCeKK7iJ0K9BCepj8aVfbqpRgCo5r+pYM+A4JPgwFeo8YUhEwzCoSdwTt3gWAldhDLMr3iWn5lQ2Hu6gR3IIBzAUmIdbuywdvoxRRhUm/OgHuLiwOQzTWmZQtig4HIkWvn3/uBXjDSOSU3SaWWDBMS1MjPWNErkHsbfkwlpg6XemWShSOAvk+OAEARnSCSuEUFYrZ6OJUtB0UjHL/zm1/VYV2+K24QnNH28GaQ02NjV3dvX/w/R9aaGhRiNqxc5tJWRCde3DymbIdgGsZhEiZyOhQOMoWGyCr33NVEHoH+mVeuwFCRP7w2OiWrVudGNS5pyUxvqikmKfTecuyCpdnj7m0EYShEH4QsQST4m7viFx1Tz9gb6+z2s0xLTXZF+LGujIvCy5CoC8BIVY6iaLXT9BiK0WDQYWlBFHgh3kB29ibCWVejH7qVCwg1lV7BwW/973vn794oX9gyL6UtrdwwH9xsaSUC6LYH5y7MOmSk/IKpwCKgnCmRFcr8FjKje5DxICE7vCMiDqGlqjBB3mCLlhsFcsrRQq4rCa/sIgTShiI0n8HDh0aHB5Zs3a9ar9KNamX8OWXp7/17dcpaloOj2EefAJISs4obCCaD4dAF0YlaCbF2QoV2ICoRjWbd2GG3QYebfzFflBKZiOgDre3dcIJKfDcKwHmxThxrQ4evv76N223rN0miIdv3rjNwUc8QQIeuyzAWN+tVgZlQjCucAUkoAIAyCbYPEQC3/kXcLhFEx0pLhxVUJCPFnpAIHuYrVu3kUTxGlQcaQUPWtu7ekg9eoKHfSEC1CPhwudr1qylS52fFBaVNDW3ilB54shTjU0tI+MTjlZAcuHyJQUe6xqbXKkeuzhrUozAvPxiNgCXRND8sYlAZUUIzpH8Y5S7t29TMmpjGJeo1DXWsa9kvTvWszF244RU7/n5LFmRfNhykzhhr910ur63rKLUoSWj2arNgQvJMIP6kC+sxXOdhzPJqSnTxyFMAmYqrYyB/dcruJFRy9rGrp7Y32Jjs6DfFOohv6trV+GoUwMnab/Tp5RJKLN68m4ID+W4hUbHqtXVK9sn2p0Y69DpPjyTNT1np2fAm7s18AlDy6wZeHI/wo5udNQxtbNBVIYTiwi2gROjR1nCRGCemGMV1EQa+FfHws7dbSxQZ8MsojLKVDDMhc9owVReodC8Ipj2/8fTfUDXmVwHgkYmEkEkAgRABIIkSDDnnJudyG51S+pWjmM5SLZl73q0np3Z8TlzzsxZz0489toaz3otWcFqSZ1zYjfJZs6ZRCIJIuec0371/p153Qfn8X/1V91ct27dugULd7kKT2Wkpq1YvVJi6kBXp3KlZIPCIpetTtEHO41rVq28fP7C1i2b3DOQkZY6PTWRnjZPmqOyPVMT4y6LlX5fkJ/7+qsv79i1a9OGdVyLnp4+BiQEbBDu6rXLzGWVO3FHxx3Dtb/sIZQEmVB/69ZtgLOyV6zAOTlOqkxrqSGyD10wbgdEgcjerm6XksoMOXP+nIdKfyZxLGand27fboPJsZvCgnyxSOEu18LTBzxDuEzpRJzClFRcaW5qPvHJpwWx6ySQ0lREYYBBwagTi+ChJQr5QB1qQxqInawYT3Tlr/YIbaI132hPVUg81SI9jBdrQiAYNWRlhizW6bZ/kjMeQLDUsX1qskWdqCvEzdbLgrt8n9foYVJScgi6F5VoSVZMbKa/wa5OjoIhikqKcSUlVARKYkEWl5UJVdoNt/MCHqGR4bFR/IYOqtJqqInpAkZykXQC+NJ8ET2uCU8RqJERBLmIoPaunCdbDAetZj1JvA/TqSWr4Ys2CIUIZjLGRSiUdUtLd5y3uFxpy8EhZRaMJZBBNJm2GVnI3X3Nbe1WlRs3bZiemnEXjOqOhJidIoioh85CfpGvrCKqDMqs3IUMyo49+w0qIYE10RVGoDxni5IQfewgl4sXh/AG70fUHXhspvx71jOiMC0lYABGas0o0vqNG69fvcpFoLHeoofyuckn/8MHfUDFIvDwfDGonwgtE58Wu1uA2ixfWumYOYPsJ68TZvz1CrW3q4NHPCpS5J84YmhjufGFbAcrdvs2bwYLJiYmc3PD9UCuuL99+yZ+Ac/NoNXVq7iCt+/WWLcYnWmALPUGP5D0b4plmoMax3Yz9U8Umx+GPGyXoTp0ODU2jjseoq0SK6SFxQQqOK0WVM+IlRufWL5ymfR2JzRAJVctLj5lstdGh+k/zsE4wm/uZRXQGB1IFAkJshrboUINQuIhIfEdJYFBNfzVDFWx0q9B1mNnv3zXBu9YE4OBXEs/aYZBRNRFeEaZk/74Pyr/yK333DlH3YqdoQB0PDBLAUn5F+SyEEFJjPZE1hNIfCckDKv2VAmQ2ttocMRGmb2F+UXj485YpzU1tzuNzf8vW1yyevVaeqcf+ZEshmpRIiJIDU5OPP2FdTSJkg0ajZjOT6uNYFC6gOw8LS/6TqTxERh+AoCH0EEiXdEywgB90u6Mo1RUbfDXX+2jj/a4tmnLlovnz3tLeIL6ExiyNDM2oxOQoACK+Y56qIodBvIENUACAA3ggryqDBEkzxHQE+D5ODZHfUgdrTEZaOwOYJELCig3/dx5E+RaHgwxKC5xfH/m2CcfGyhuLl4+iSCIvSO8c8UmUngFNchJWdlOJg5spI4qCdR1dXdSXjREWNrHUBw/dspihq+WkpzS29PEvEiJ8rqoSnCdy0rEC2MKnmaBYQhaJmMN/TEdjqhEVPj0cDQtgRAA0De6TlR3EX03hUOfzUFqQwMD1wBAIIEKDLxAK6QmaTr0OrVFGSymI7J0/MragIfMMC9GhzsFJFQD3b3og1w6Ly2r0kn/4CD7CWuRjZraek4t9MNqfHEpGbCrJU91KqReT1vjMTtCM5gilMN1Ky4pgSAiQ+qVV16xob13zx49Y1DsNGo/gIEHF39ty+Tn5SkJ6bv1ADvg4Hhr8yOFECJt8pw8EBjjIp2ZyLkd+BJ+uoAO5s2wu+pEy9hE0uRYc2voVkICdBgxgzJQ/LyMzDQ0VFYO1miuH46LfrAKudAEPK6WNChCoX9XjxyZQTEC65y+3h7NcOfgwYP4qGfCjDjYh8iIiQ4MIxwF8r0rHZDMgHYqllKopfQYrBTMBo9FNchzsxbo01mgixcuPWrrMK9hvVDl1i3bFcQzSn7+wscff0JgldkXp2RvpRiYfYzoRQDrykOUIRhYjJUgBH9AvzCU8aEdQAJYcmIK1WNXTUjQJFf6R08RNBMc2+Vd9oRckSIn4PWPMoo9oAwKi3nbtjIEUUE661gPLWs55W+88UZMEVpICMFDB2IAEVppmcQH5T94ERiamWj0r5k1NgJqjA6IowFcNMYUJPXk6c9/Xg+eoxsnh/+mpckIgoTNdzaBAEAE8cOS6X/slMIdd7iJZEw/RmS+zCaG06EK0fhip13KuC/gRBOkcFsRCnBJWSRQURP6grBYhoY+uqKVMIK+QXHEEn10pE0COk+6OdS0DN6RIGxHTy/C4hE39MD+QyBxA5rkQL1Jnjx16rSwo5KXv3311//6X/9rFHYtbFlFKbzsWSHv1auXt2wRVQw+AzSrFlSpepeiote8FD0gndkn8umNAq+W9rCOYoI+/uBDtpf2QYTjpCsKG0xrzDzy6SMjhv5w0f7W3TsUMyIdyn/84Ucip1CjsxRJn8SGrQiyF0t3JD+tD8KxTNQQJ0WfUFCrfImEpUXFxSBBao31rEzwqjWrABDOufFNOVTqb967F2bDjEyIkDQ8Qi7kJUgOvhpXZrhBsdhPMAUn6SIMHuoWr8kGFLCGV1xT10Ci9uzZzTIICqCe9gcO7oMagvPEaAF7w6nj6x49eoS0kHORL+bF1oF8RWQhEjohY1s2bf2k7xOj2ART/s7Wivqh58+fBRu5Aj8rGtlebCUkTxx+XC66h0ASn+PBJhHKX/3qV6D3zjPPPHv58iUDHDz4GAkzz331q1+ECVprIDp18uRxAU5lQzvaWuMS5hoZ4plJOWX2ibgFLi759KMPZTutXbNm/do1nrC2AlRf/vrXxf6lA8F5zarVyp+99vqr6FIU8wPYHQcNKyqXuIAM55w+RykC5EOZGfSIl5QQSmwuHpg8rM8IE51BQVMguouNiZZhlfZMgLlTQg5KCYNZJDAEjIWZUhVRPUikIbWu3SUcdvzpKg456ue7s32y1S1nrU1x2qBet63ruJVdLpO0bQ1MYsXQXVxOg0XFWaYNR8SkcS/ImpeZnuaSC4WZ3BIncgM2MiTfHqfJjeROWVX+WkrKb3HaGhZYQljRhOhA3DkbtyrisbQ9KPhgijCDuIUIq8Mr8icYRB4JZXPBAu9MuSi5yd6tcjLYXdyisHFxPJvOroHCglk0N3mQSPO6oTds2gRs8qqYuvAMI4Lyji2551yMEJyOFYFKD7rFF/qpwaatO4ZGRnv66uT8zMvIvHDlatWySjsSMn9Qg8jihS/KL3j1v/3ylwIYMla9m6B49vikVGN7iAilf1EKwoC82OqLd3Hz6uXLxN0uHrvGFsOaStiZscYAoaM2OVnzO9ta7SxrL+5O+TasXU8DrWX7evu2bGT4suvqboszgcRAlhw6BznpZ7nMmpwqlEQ00wP2oad5iPgBWyUwW5V5yUkJyYnCGPntBWJOZugslVBUnhkfl9lTH/KD2bQpJozgICCPjXklpdE8EZlmnZMxf5XqS8oO1zyRWKk3+/fuc07DRj+CyKkNe6yDwwsLi1ginKKAbre4fud0ZdVyouscWOxc6XgItykVlyUunmzb354yyvCBhNxEpqMpHCWhQISMG3lRfCBPKK9/IhGwMcV3EkIRfABP3gDpr+cEj7r5DjUM8tdDr6stpnHYUUpKshpBMXqNnu72Aoaf/mfjaAhJbnZUjJKbX2BnmRnp7+13dES2Y1jnDA0L4/F5vUjCkxMsMJI6u/vUw+nr7wZpX/+QvCn7dbi2ceMGrujatattDwp4I6AIKFzqGh4oJc70AzLM67FCpeiPJvZV4GUuhI4DSIwmIAeGB7APiZhCX8DJ4pMZukwYdCKAQE583JpkUw61mBeNoQZOPbPF5vL0WGomCrMwGsdeDGcw0NB0hVZ46uMn34kHK2TSJf9q7KCeloI6D+/XuIXQFp3Npfj4BOjIiLNVyEM1/3EEOcBujiP5WfMH3WE8P3s+UwYegf/CRe5GDVDYtOTdUhm4rFsv0HhDKMhGoloQFIf62ECHLzDIqoWK1xUiZMYFAqCMUERFsPD6tVsirGSCRtjf5hDYj7102UxxYd3GdXC3GBCCgumcuEZGKtqyDMJgvAf/yzMxs8ErGGpXZQ0OCija69MPb88ELx1faON73/ueVC0CANp5Kar93hfwVnJU2A+XqSEeyYw3ih6ktNqXN7fx/s1SCPjpp5/SDoY9NjVmAJuV8Armki51eI0uy1aFMKyxffHwUXNlZciP0v+SymVmsX37Dlgmq9dXJIetvNwGu62hl156ScWFY8eOSSlmBGxSUl5kCck/TzwV5qD5mcraEKTRocH7dbUzkxN1jxqJhEGJxLp1G6uWVtKXrJUrVDwQWHGIX0E2jF5UVAA8y5K+7h5csJnsrd6eHtOiemjcSpE8+UIATuhXPGNBXGLc0OhQCFt0tWOZwk2kiPjVXziPWd/93u8waGTMwsY0wZgYdH5meoA2P4/lcYAEQ20BcfK6egYMbU4XdRL80094sb8fOqgEcm9xHN966y3GkAYRCQxixHhFxIkJaqhxz0zO4IA7O9yNc09UC9OOHDlqr1IA2P08oQR2S1thwSJrpt++/PL2pKT1m7fsReGZGWsVU3DVylX362utxpkgE5O1lqWL6LKlDjCuxMcTUfYZoXCQPsKRFrBjvtMj4oQL5JapAS0vzJZgW0enIi3KadgNwH37AAQjFDdT1f6ppxFB3R5XBt2vfzg2MoDmqmt6iJiEKopD2be3o2sJQbZ5mXyj6HoNkk+0jM47JAZIh/KGIIHsA4nCL2IPYJTkipWXl9qt4st6jhGxWSYgwsKjIeDvXLmivYH89RCECAsvcxaDrAH0tZe8Tr8IP0NhXFDxE0j42pR0gwKJJONLZN4hgmu8FPMMcunH0Ixwi8z99nZV5HnPBvIiGqK8MKVB/cQEkVXdegtzUYMRgT6CF8culy3LmB+QbWm2ZafxX/3VX33z299ytwgA+BUZ6fMqykuuXLqQk5P7hRe+BCkHcP/Vv/pXxIaYkQROEcEmuqgn4coy2cVe6K8rf80gvvgJqKwQbkb4Yi66obBOAMMDhKDONaDpoURmQ4OHfAO4+AIp3KRETn8hwo7duzpa20i774jMSugE9RheI0bzAqvb/KjJu9WrVx46JP+n2fnXrZs3vt4aal8uXVJ5+eqV55//nHMs6oxu2batRdrcvbt8j3/8yU/ZYbLuL1Mzv2i+i/8wyN61Ii7uAwH8V77yFb4W9jmKI/FM6X0PzU2Xrly2nJAj5N4q5zCpGCHxE2bRXLeI0EErEKzUM9lAHHLFtRYVhY5D42pjOJVOOCHCNhrCWoWn7UTcr3790p/8yR+jA8cAGZsaHyHLQGX/hvXrRQPniSrOS1aeMSNtnouTF+blkkbnzfgwdmM4nAoJWB0IwZeWhGpmSuuG+a6iLKxRyAcBPXfuPK77J9EhLmRrx46dOEFAyY0PKltp8Y94k7xnOSkcAtS8Ea5XcBZuCaa2t1dLVIBwZ0cbWceV+Qvy7tfeq1y+vKVJQccHy5Yt/eU//QKzWXlwqDQo43xB1pRkCSVryCIYyDeiRFRAUIFVCkOeaCARZ+yIjvlYg/fee4foOOdhCwbJ2BQCQbjJOvrSZHRH5WgiJ4U6gQi90oOffLAHyl4BLeJS7GiTQYKQt4IgCjSOjfyv/+s/V6gHdO7McnsFqyTfw8y0Zs06+x4iSShmlnUGxRCgZX8NhIXgYbixXK6I/gkBsN9++12420FekJXZM9TusARN+Md//EdVUIH06quv2R5S50comgUHBnrilswEtiOvIA/AhJ5emZz0j8Oei/DBFwxPPfWULxCkTtLRkxJs9IdLMbgRgJRgaXmt7pCNVJXlnS5mbSU85OfZnwmpn2XlYYHE9aNd127cQFX1ixz2chmNHer1GzcLhZkJ5LG6IkV4eDQ6zTkxwVxiDQJSWjDbNfOdESfZv/jFL5j+pfNDzp+z+QSXtSJOduVICFIAWDM2gr3TD9J5iJvKgMb1h8urUdUF3fSB6SHNKOxoGjnZsX0n+JkeqsW5ZwdHhgcUb0AWQ3CSII62hASj4eULUwsApPMdDYkKU0vwjh49ChgKiZj8Hl4gM7pm7SpYcPFhZAgmyQxBtHTriZa+0xcwoLbXPfQEFjrEOyhYZjmyjH38HnFWRRVdVoXLFjDeuldba6/TjAIMsRaFXymRXUKuvyWFSJWKje6fS0pOzUxfIInZBfX0QEwdBeizDM60pLArwLVCNGKMRH5i/qLv6EC7/YpWfgIVlJECnNr76yEggybGx5MrXzz3lr/eIqsJsXMUdvNQxmqCvtv6h36ka1wfrEFPoqUrnbAD+vcdAP7pV6MgNf3Sm/6BRwxwB7nECW7fuO2ow/ysiV7VJzLCOmR0bLKttb1w43oCGQssXSX/JKSntzsnV2WtkMHMOuvBQMAwuo/51V8rK5FOuzEmEhujqoKonCCWaWgAMK9A8q4GorxsCxxhTaPDwmZmBnNBi0SYSK0ILR75a+KnvOTT0oI9gSNhMBB1q15TDUczBKScPdYhSOCOrXRHb3hRW1NvFCZFQB3WhIG7CTUD0QKHSgWfcN8QMtFNoZb6Tz7xdMzbKLdJaL9K3ojg/czsJF+QdJlaiOWrr74sHMPvd0rPOllXlg3f+tZ34GIBAMco8men1EfuJYGEPuYy6XCxCpqcCCk60srJsF9jZqr/6aeOknO39jz33LOSJJ0osNGFeriPgPMzrbFvgAE6CE53CFgURYM79iEdLpM0H8MRbJAYFOKkwoei0WJzMzuMFJ74Sf/aMNFeR0lk9y77qXOhOyd3ERBVmTXN2ArtYeHF7nbXcMn0iScgqO0JowTfv//7v3drr5OpZg0fb1lIm30PH9jbUG/LvY4YYDdxunrjug5FLn/3d3/XAa0XX3zx2LFPgf3Bxx+pXIzONrqBhESEDetBTjsMZETPiYROkJqKCTadO39Zpr7Vixf379lrIUBlyHxdba0EvYrScGfz8EiJ9jCSgSm5BaZObuhTb0SdVJNtWc5k2HBEiyWGOzkktEy09iYOfbr9HctUpvLTzRu3nTGbnJr75Uu/+hf/+//RUd8pcEOiHCIEudfJG6piHArr31+eFpMIi+AkKIc3MeE7gpNYfHHzI9FS/MA9xGwmqER8xefNiYW5+Rj905/8xAJPFMNPlIIwaE/mMYu66QRUCqG67tRYqMEzu3nbcdhVVkRwl8jquZ0N3LFyENhmbzkYYGNXkZfYcMjs2epT/0DVnmgZmqTpkMJCkPwQeJKjT0GhuprbWvoJB62KIS7QgLYQf/zwkxSE5HudZ2aGEgOndyiJzpiLUyZWExCXA5dJBQk0nZnXwACpH/7wh1IxjWgs7Q0KHpj6jqFYA2XiiomEEyW9rmeY6gQ3GQ1dgdlbTAeCkBlzltcJDHiADVOK7F1kga+f+EKw2F+0l6S99dabVIBgU14/kWf7peJHhkM9uqwH7XWLJpjoScQd+6KUIgitklZ2XAsKuAEiMijjCIqeo1eeOvI0yqxbt16bkBk/MtvfM9Ld2y9NyLhA4miRIjBjjbGMghG7d+8EzOOPHRbGdZsHMebgoZgPL4KaG5p0oQDFp7kgRDpijPJ379wBPGaBxxTDaACbPSH2dBYpmFMf3MSOHgABAABJREFUFskr1uqXLl9Fq62bNusHbcGgZ9QgOcEOFxcjLzuAxVxEzPJPPVsE6pax2rR+w+T0LGTdumVujkwikY6a0QIvGogQ0ixcIBJY5jl/FWfh9Zd/+ZdQNoMfeeYZd7pZANimg5rGwCA5iGwg/gDEeeF+9TG6WAMxePrpJzmbbscjKiTZXAZOAo9BZgEpykbUDyLbc6utrwkEGR/bu2s3qUOQxKQkMkweyIYnhBllJNG4+n0olg5gy+IHf/D9198MB2+kNklzMpD2ZPLCufOSJIkuohnXoBiUVFN79/iJT8jiGrWZB0ecx12+bEVLa5MMVMcAvDYx3nLh4jnc+va3vy0Wq9aK7TwkRruc2PkztCD69JzsQr7xaqPqePQNh9RaLFhU4hCYwmdCxeaMjIx0Lo19NKFD0rO8agWpWrFiJVNy5ux5t0WgO+GDNgSQFZQsJuOFmjgNW+Llubc8wVrfkRXFSQPGeAuZCKt/EiNqFjPufTaSEBp3h8P1MR1ehDyl1cZkSSEJH0R0Di+SJHoRLUJIhg7/77/5G/3MzISd/cUlZe7HvXz5MgRpy579+8QSDO1KcBdpzUuOv+vAaY3KvuUip1RLFISagUdESvSdZYEmKzMcO0VakJ29bfsWAmdb3LlvQ2/ftlMMSUqAsUoXlwNVJUSQk0Ly980d3wakeh06NDrBgojJDOXB4Dv4CZZ3HeQg94sKeaXhwDjvi9AgoFeUKiosKnFviygSAyGVGaM1c0+DgeibSL/VDpDw1Bp00bTU1XWr1eR6+RWlcEU0HUtfuWqNSkfJceFIJzZ5i9JiH1zI+mOPHwa56mlXrl5XC4IIOo8Su3JlyE0ZeEouYYTI4EENZ+b0gKRMhhfJm3nrueefbZSc2tsFO0rbPdFNMYDqFcaUocd3mO7YsYumITIBe/WV3xx+/DDZQCslIIgH4jA0kaW2IvJTJFpITdWtGYnfnTu3AWMvXiUoy1pbew4eqLYEDP3ACLVLSiQ2WCVKjHEYvZCUSp5m2iIpdWKWSBAnVlUoB4utKC+cPadwnBkCbPpXBRWCnD+F2wqLkpUotgx47rnPS/mNRbnaBVDcjGZENQcFgyl22eJid3rMxSUoBO4olYI0jmPgozWA+CXwKMLChQVYzwvBO4rNLkQWkJ4TXbSijL6AASQ0S4NojkETlpfAQJAs6UFL72qMF5GOu7RID0MDAwaVhANfCwDs1tLoTjjEJCcE5nXLuFBk6OhQLjJz713dykimX51iYFaweXlIJ485NT3NAb7hwXAIRPksd82NjU+5gdssoPSUCD3naeuWjQLJ1N96TJ8WAIbgQFA0m3UUFjdxzSuStUwkKsoJclg+CXusWr3SNgqxyc7NJcaogQIkzXem1sY7AYDCoRdeGGtuU/CAOIkWy4+U7G4Tds+efUw/FvMWt27dbjvMao4HbO1pYSlOw/Uh7eQwkn9/bZSTKPYEVKhnB4xHJcJKLLU0zaCb81QOPRYWZjJN27fvQL1LF6+grRGxL5JSZ82IaGXlUpyciZ9gzcyv129cc5yJ1sBCdLn/YS+9OFJ1BII+ph9J5GwOdfbdPIQdHFz/9GvQ6KEBxsE//Y28B3wHXtGiciIBDB+SLN3O0mXtutUMF08OPAuyQ4JyJEXktmhRkhMxExM2Vy0MUgmwWPvx4ydBiNH2QCxg7HzSOAtyKowsQioiXgSGLUVSaoIOuMBl+e53v8si/af/9J/YcEQjeNwsdACYLzwbsyCOA4yEs+Gmec+RDmo6wWj5qFTAyTYDOctkXIBxlIUJJKxeux6q0f/0pz/90Y9+JHjpMgfmgo5YaTP+69dt9BZriSBy3NhV+y8kBJyCO2CmHVevXMFQ8NBfhPrxj39MBXDB1EsszZvAJkVEkYDFggtTp06c1MnObdvPnDnleXlZWVpqypYN6/kBfEGbz1GxBC/SAunse/btk4zL7tkawgVIWWspa+Yh1pNttz2gHvLyaO2xlC2pCLdSzMwkifmF6wJDDp4v3s1ImccSUiiMlvEsVKk80e2bt7gjHqIk+fQTvxBPiS5L6wnxIPy0EjWKpPEWF9+8dYvFI7cKWXrXE/jCTvyClvliFQeewpJigo1chvbu/ExXkQRTo3Mk4iZGooVQpgaksLt+v6ZOrVVMjI6C6JyQEAbEgQUdif7puwY4y0Hn9lBnllmFXId/iKJ1qaSI999vhQijxD4R74cP7/OhHdEj/yCksDhivmA3hAhpzekzn+GUXbXi6cXUUxjr7NkzTzx5WHUBv7K6hmOdIIJWZhxgxxRniPPnobxtkkCqiRAhlzPGINjKs+F59Oiz7L82jMPf/M2PkdRkKsqBhipuE3iixW/TJ1r5wNF3wxmXPvqCUGAOM3hqSFPUlY9UdV3RQSPSVkQj/0SCcPpV+OwHP/iBI0mysrlSWEDlKYXGNA4KBNW7hsCRF154wRBkjBagOWtMu1esqMYvFtt0LAjCXAPY6NiBPvZdpUu4esJMdP16SIWl6bHw0YQaZcys2UTaD92hjDheXJyQNi/d1X445T41twsTFWnuL774RYBRdjEIR/AF12JHQeoovkA77izInE9fyC1S4PtPfvIT9VeoXrDGmzZBhOphxK9//etNW7ccPHTYBiMgQcuyAXgwbgCjEYSMEWkoEwBCDjwLNuCxk7FS8tnvvXdH+AynnCJDDUrt4CiyK3DJu3vqiSeMhcu2nfWA1+iAdA7Wo4apGTr8aXQmGJZ2Jz791KE4zS6eP2ssbUgmMGiERBX+jD7xRQ8whaY+/SrRgKwyaEQCvnjhLbJKzlta2sAPMHiRBGLvFT2QeUaAzxwzrUlx0yHIyLixYHaPGT1leOyZe1FKNn3/1ne+bbOCPAPSHIdWAHYtAxXGbtbVXC/maIqhNqFMBBzITTQdEjJoOyQqzu7J1772NSqxc8duK3U0BSuCEkGdRqr1ySfHrVpMkM5BOjT4zjvv0mGVwkiYoBRRUCt9eGjgzddfPXbs4/T0NAfwGTj4g8NG9uWLl7AcJybHJpeUB9ffoCwaZDxHVlYDnv6iI1BhBRlgMPRIwyvVle9g85MGLBoF477jE/oyIhSP7H7nO9/REs6wg4JRuGJQ0ABX/BMFzJq6wi1EQCP8Zl+kf5aUls4Xt56cPHfhPHvL92XayFn1ypXPPfes+3G7OtpkDzc/emiH98P3P6CBWzZtJtBAQvTE2G2aQPIK54mRosbYLzbsNhAjsn0wxXWAmSAJgSS8KA9VFAQ8lmSECSNE9wVLUAkRNKbnvkd81Q8qURvEJNPQhC8LXlpSoo6nyzVINjR7+/qk4hBWuSiSTX2YCZ2jm4Jrzrs4vkZdgYEF6CNHSbFqQ2PojfPn+S7o1t0jxy5U2gEqw0RtUFjnxAvXUJ711zM1gDJf08LJPjJTKdub0cQsQOqQEfS6SVQWJsgNimI+EOE8GV1qhAY6cSpaLqm3WHDjQt/HDO0vJfGuTizcCLR8WfT0kNXQmAUhD3pGc2qjc90CjJRG38EM4CVLKpkbVgbWwrTUz7iG0wlhiNAxiokQ2VEDCl60QPKQ1IEQEeBOqpkh3kyuu3V80tPsBe3Zt/fAoce2bNvKc7JDilaOEBFLMoACRgcw8aNTJ05+yhO9fPmiHUkH7ks5AZWVEp8KFQlyX25mRmpSokML4hxelGQwNDBM6UALHkQDfAQYkEg1icJosAHEdzbIQ3j5J9kOE1Esfqaxn7wIBR9tAAMqGhfx1Lu+kAr01GH0hfZpqXPy4F2v6FbV10hPPUdtD/UMTT2w1wTVE42NSzyoidC4ElMKGOraZpRMo3HVb/oH2zt77QPIdWxt7bABVbV8pTXV3TthH0Z6Gy0mA6ZGMg8kiCMmh9WgOgc5pptiAQA2K0yExTjfiRxI0B+bcB9shLM+lGW8CxjsZo491L8ZEVmwEk+ZUaOwQrryojd0SGE1QEa2+3+iT7Q89Lq/ZiYtCQ8b4rlOAMBwERgwKH7vf5CQavE83DSuXw1kCO2Ni1P+6a/nxSV0tYDLyJmwp0Ge4Y7U7AO6EnvSqKWKDvAyBDrBhWAYC16EH1lM0sCGLA5q4Cczd1CQ+ekG5XX4FSRbt22OOreCJfkQ4ejTdMbJ/iHU0Nl0QFDpCxLpGWqxGSsZmhqQIn8NxDoZCyQg1Kc2CBIJIQXUTPapYAG5RStdMWhMljbw8v1LX/qSniOoYEHvordMsdihQ2+hiXro4Aen71bgxqKkwtXio54TSwP9y3/5L1577ZWk5ATF6YgflqEA+vur/0jHFc3QZyT86M8w2gqACDTBDBJk//znPy/2SfHJm27BTBiMwhCRQ/ORdEFcMwSuYb3erl27gkT4giAiO4gACx0C0ovYKtZAVg1kCLRFalxGefMgAUNDxlxLOghsUBFmw5FwAkAmEQHY/in+HSxVcRE/T4er162FhVWTHtCEKdM/fD1EJdMKshMbWulduPgJs8gh1Y4MvvAKlQHtD/74j3//938fJeGFGmYWJosO5mXnxbILQ/xLOiDExVzNJi5j9i7YwC/+oGesgYLw5N69u71rqjU/goSy4KxRvKt/LYEETkSALJ7yFhwBQmdyrj2rRlWl8iKvjSlG4OzZ0wZy76y/77/3DvkBGGLyUnRIF0TcdEg7RITQCo6IrGezJApoBkgUJlFGB6Sf+KN2M0Blk8SglsSoh0oaQwT9tQQ5CPWgQylVhJyhg4W36C8DAi/dCkIhCJB8ItEiFVGEi4+BmF7xATaJNZwwpW7hgvt45LsPeIxIhIDqnyY7PpvIgqrzwuFgNqOZDWENZTRhXcEPThKClfjlRcCDGRa+O4mCJhxxkrxnp9TBh6KT1EqhbfQHKhJhFtVQjV5oRgItUBmHSJc1sH4ApN6IPe7z71seNTnYRsj1xusk82+/+SY2CU6TdpFtLtD7775LtZ0Qs6Y6fOiQiZLgwRp2kZDTRBQApw7JIRVGHHQwkHA7msAOstIlAOCfPsCgjIbAGo1xwVROuXBcP5QLnWm6f+KLUejC8WOfeIJTkubZQE8IBnLBS/+MWDRnUaLa+nqdowMlogiIwyXmrmhpCK6Rlninc3aMhsKa5KOeBgQVqakqrcQCUJF85sLQhAqzCJUXsQ+b6J0nqBGZOHIOVBVo+P3ucyRLhhbSvXPrtm6BhL/2Kr1LNV78ypcdQkIBamXHT11gYLD5eCFTA5GFabBv+84dmKUr1Ca0LIkdmyT9GlWw35pAZMtv4Hj66aOWldLdREzRFEf1WLJ4QDTFzbtoRM68JSnFnoI57Py5izi3Y+c20MvNI0ziHHoirMaz9QnixMQE/MiZyJID/e7bb5rX9UwJFfBKSETGwZR5aZIlMB4mSIl2BkIFMwFRwABK5Ys+Qa8ZM2fuNCJjwY8nB59+egJgLS2vKf712WenYQjhiopKzBCMF72zlk1bkC2sbtv9icefogMEWn0P787OdBIC6GOVrSZZPWTOE764Gsby2p3oTUlNd9uiEa37rc5nZ6Va2RBv0P/I4EBzU6OwhOCEe7YJvRRk/r10Qmiq+iLNS+QGp+VwQ1aJJK52kOzyMndRvfrK67Ra/Ay+VlPCgdLpxOzFwHzDZoJuwjYQkOSQEALvukeaAs+dO4eRtIuxc2KHGly/GY40QJ/y196t5XPfvnWbFMrzu3DpPLH+9j/7rtRzuu3yeaQgo4RUaiwplHMyP2uB5ZwYNqbb3DC0gC+b++Dhfd3KXeaeCiQQLDWjGu7dlikoH11FTpiSbLscdgm6u3t8l1nlHMji0gqFh1UDY5g6WloqK8r1TKgoA9MGcTDjFBMGRsYRdvhIsmkso2mV1NrcprFoMWMRP5dw8vhnvBnVirjFSYkJqnEBHn9shZEZdCPD+BjVd4/cDtpuRN9NPDQQoqSIjLkr+/zx40jHU3fo6tqN63Ks4YJThpZ+51SQC00IpHzLBj7QYD+/xD8JNmjxi3VAP32yIOgTaVBnbCFHvVUOTxgZ7Xvkrts2YiOZCtldzDkx1WpFNDM3nZOXPb8nQzVlMnz+0nmsZCautVyWFJebvWDTho2DfQIt1zvaOvuHR0CbmJySlZ2bZOs2UbabA63hNC1czM3oDyq6RGCAwa5Fcz8Iwemh6YrWQg1P6ZH2ngfUWlqIiufaIxG9IGkIzhS6YBwvIIgXAh4aSK1hTSipgTLTUhFWY++iAHPPR0xOcaVX2BXMWpAjByM3R7JbrvYKTagxX1d/H/cNV7BwRqi7b2CAnBgilP+Ii0sMxYVmZufi6ItddEdHPvzwo0UFedI8SkoXG+tRcyvLK+cpaEgs406lbZxl+3Sr4gQu4AvgaYRLUrRBE5Mf06FaiCGQC45sNKaDGUFUN8c4MJDG+tp7GpsLrSFJEU8XUggIBQ28q6WhjUiPhFdcFEgUWTbTswgNOiAayovQQBmdkQ7ZDaQ3mSoOmkuntr9n797JFkhY24isi0CLpBC5aFbQgx0eq9loUG5cX18PUMP579ZWkx/t47srIwsk1MZc/RvIqkkzKAhBMeCMFUlAATE5KMMFXwCpMRJJWenoandzqpuJPSScnCSWzU8y1OUrMmgDA6GcpBxu+fTB9iaoBrbMEHv37YtkrDZ2AQgiqEjTcP9+V3e39rAmBkw0USmTbTwWkg0c3SsuXKT6DU6tXF7lqkvOEGJuWLsO0dx6q3j8a6+9FnNNBnAHO0yrEAQ2yjAU8KId0PRP9pmmtze7/XBwzkWT8rPLwp0M5hrZL+jMdgGDwxELSYb7qjimXW2tXD21GfzE90UThoJRtdoh4WTG7ryIu9EjCXcR0/iU4wEFJjUnvhaVLJZFjQXKGdOad97/gCUxLSqh6FdTVZIr/7o7P/2kLYJ/QK2zrVvM/dL53CbLTDFr27Zt5eUoVtM/OKCW52g4BSGPepZDhpVxs4nFiwoYbbrkdet4iUPIS2jzc3JdBEbTZ6dCAQAyiRFK28kkFM0lpcND43muwp0KReUnpmbefu/dckn8SeF2Di0RzbJNVwC2ZkZAGyxkw4t8BcqFwuY+su0QhaOWUFNrXzjvo/c+RD2ToHDj+5ffT1heRQsUxbKDt3nndqcFeCpVS5cpD3jzeig2xTFyK3M46Tg0RJvVDpICoB4o7NgcYHNeBaQYc7oPHdaA/kLQB6gaUCgtSW9tTY3kVbJQuaTcYvvypQtiAMuW7mISGfzYw7CPqvaD2ZNAcvfNyPYKCAkv6m/+5q8ZeaFGAJvUzAjRtJIksy0x+cknn+of6DG7Ggi/oM+vIKjeFWgDGPp4zkuh3dwPcKJSZDMBrxk99RCo/CivEyRmnCqZhiDCe6u5d8+iCDu8RXo9R2rE9xbKM0fAI4S4SezpZuGixbJ5KSB7Ran9pHNWV8+0YN26tSwSESU/nhNdMTIqxhQbNBiNmGroVv/Y6hVD69nH9wDq7ExqctJkfNwTjz9GlURpib1VhHCSOKFzj47Iuz1eooQjdvyxE9dOjo6LqiTff9BYtaLaWcphtwTGxdmhMpyS1mSSUhOtzvau4PitXF6oalZBoTPoB/bsbW5t6elyG92g8g+S46tXrPzq178WKxXVZ8T1a9e1N7VhGe6wCeQNFljPsjFfnhiCmcUR35HIfOo7mvBt0BDpIEWRVbT8vd/7PVYRzHDUjOlwkFdE3AcXhKEZli98/ot8aHqNNR++/+7eA/tZCVv0xe7HDRnjgU1Hnz7CPiA4S0Iar1y7ZsHv5nLHXMMSy7nWjg7rPaXtEEcbiGdXLa3Ir9w3NxsR2UEFN1hz9lDp9LmzRIjrqKUKwipAOlxKVITFTJUYR6gGBsKSG8AAY2B9379/L2TNHbJmqK3SAoMDUy5ImZuJw+i7d2oouItNeVPuBXv3/fecQOro7FQr7PCTT6gQLUbmwIz/1XEib+3tnY4D6YbotvS3Se5g0H/925cJsA2XJOaAiLtcEA9sYGEAMHgqaGRXQrX7ffv27NgxjwKwd9jgAlCKAVWu/+iIuLW40ZDU1eeee04mCSWUQGZru6BgoZIURHzGwc/EREWI1MMaGRzJKlusuAqu0DTrRQy2H1pWHtbWrgFmIKI64lhoYkAFptNaB799t7RCO2RFJrz/1re+RQeE371FLMBvWWzmltkCN3afmaY2HvpCtSiVWZOLABcZlkjJ9eH6WwKigA0m3bJHxkV6fxkF1zMdeOxQecUyPRho0+atYjMmY+tXgXzmBjD5OaGY9LtvvWahSf3MrE8+/jhRlu/83W99mz/d19NL9GVqKzBCY6GsN24Kk7de2tXQkPA82EyBSA4G59PBBgCyxdidOPGZjTNjuUzx5u3bSOocArk3NKnVDPAekjBxIJATI71FH9j5Z3trqBgg39RbTpA889wz/mkbEV/WVK/xlgPv+evW2Y2xJxCXYOJOxWJ96gRBFL0xlkSgOZWaGh/RCsTnkDU13s/J5lAGSaV1rJUpAUeggA7srONf1mb4ooFq1nIKVW7mnBkRfbShb/4ZvOTYVUq4jE0YTWo1oNikQrftfN/+we3bt4KKUXv06DYAWFtk1AmHnoGWV2lNSqMIg6CaLRrrctRjXAwh4kVyYO3kgM49tHCK6VtYtFjqwFSqg0FDqrQ0+9jtjNjKGBnUto/vmBKjVcSXULdEn5iOIGhF5Bgm5NIGkATSp7ikVEayst69g4PlS4XclBIJO2xo0tljjfAQ73Tin/oxuoOG9+vrkhMTnDTnCptWqX2Ray8z0nv7hvJc/yG9wfFoSTjDI7O505RU/FwPaAgeWESCgYaw9qvnJMdzyo9W0QRsIE8gTngA40vUQEs/wdRzsqErAuYsb6RxfmK4PGTKPWE3tI/MStQefXrdXRy7iUInuqULWmrju1/ZFq8QD1D5i1xqlrd3d0uFsro1IcfHq7E4C/2UJKupReb4+tr0ubjJ5ZVLp2cmWAarC/IgF9OqFCBgABVXQ886RPwIVCygVsjio30EAHEyIpmh18CjZdpor40LdlHAF0CSSdKiGRnzLknAX1/8iiaRQlmBUGRDv/XWsaOfOwp9L2I3IuMCwDxBfMiymcbVCdiMKyrjRF1hQcmiwnDzCfIqtUIMwI87EVVBYrgYsxaQ57yCHBGvGzevs11WqfZgSDvEeW9UTHEq5przCjZD05fly6txH8o+VMDsDjCMoKHsCWEW4GS9/QokH06SiKf4LKMeHeajFxAxdFCD6WCX0E2USkECozTUN8rA0Y+JzU+I4ANfXTGMOOs5wvKtI44/bLgvFV4PwIhQoyzaQ5ay02ITOWL6J2oI8tl4YgcADDsGH0aaQY3CYgGyWFRw8R3AiDlSVzavX6s6MIoh9eZNW21TrFm3wet6wwKeDUSc0CGBAsnCHEbnXxI8IFnYU0DnlcGGJkjE9rEnsviIgRedA+6PlcH1uotRdu7YweIHi83qpaRs3baNfZA5CnhrHk8eNTUBDHaXL10yECMfzickJhKhjdnrOXYy9zg3guJEiGDEN8f7iYpaJE9NTbqxOIhQQmLewvzuzh5YW2zLVC5eFI7witpWkcyOsLxkMP2KiYZGFqAePvyEA7su6olLThwaHjN5W25FvyooQDs4pgQDXl4kCUQOYREK41AJ7iQKHXBNh6IhwNbGd4s0s54X9QYpVtTr5IoJIsOKMGYuyDDW5FS4fEotRTU0nKCxvFF3Dl9cHQ1lJ5VTEpOKChZiE+WiCAwmRrB7emaF8BQpdOufBMlKzLyMR4yKBJ7NGzZKHSlfXL5r146G2ga7AQ5m2PJ99OD+mvVrVEPnxHd3hMKy1IF9INW82x07thE5SOmNLugN2Yko9W9sdNY5G/qISRtIC1BpIpkhz3CnJphujjZfeAg1WHtOO/yTxGrPV4OC/gHMgUMrZKSbemNpjcWP8ishwS/vGpGYUQ2ybRQOHJugGayZLG/RtytXb5IfP2kguwk7vIhl4mIxw5KJLDxRqoehdhGFAEQQvIt6kDUurgEDST0EvC8UFspeN9GYFyyYvb6touLu5NS5s6dRxj9lobrIGXjYjUQ+6hZiN3qqxuaMu3JBhNDcKoXVmhOa3oqsFpX0osCc85x3b92+fuvmgb37xHI+O37CncGsNxfI39KKcmt+fvntGzfV3lXIwa4vwGgc+pg0JcghLJKKe5Jtdlj/EGdIfSE2HvLrlFa3HJUjoBmOb1wf9ny0wbJ9e/aAXH0nSxFHVUU9cvpD4TUUwGufoHQJCZiORM5eIrXhiIrRsY8vunL5Sutt5RCBxOQ6a6hMFzfdooutKFFQccmSUDips7O1qVnZGDVX0FknQOJtorYvghHkhL6A2XYBjviORP76jqHsJ9YwVh7Gcs9zCADV0O2tWzdPn14GzlgRmsna2oe+J8YlaiABCTUQgapSW4v54GVNT6Cb66sVoD915rTnOudJWmA7V5MojjAaJnR8v3n7jgoHSgOsrCpLSklxSYsJPen69WtE0CY7MQ2pyYVF6gkIe//i53/3jW9+TaiAYInkIrEKX0ggBsAuWw4QCwKt+piLlLdu2/H+Bx+pVEU+FhYsspS0eyEW8gd/8AddvX14xuWyXleoyHkmSygvRiJOXs2p87NCdC2/IKSjsBT4QSwIn6H9Rf1gc2OncJCPWtI9H4QAsxrP7CxyS/oEPAJZt1y4cMmEgYWxA6O9jgFZBnD6RdYVX5dw/YUvvCDEYrkik09+G/Gye8tAGIUYMZdUzmJRCocymi5Dda93cuq8yuUy2JpsKhuOiXELjOC9BCf2F1clZgAPO6HJ4rCPjuhNNDba8Vi2oorZoidOTqiayQsnPQyBU8BXLp9fUl5uZ5nIMhbq/8i/Aoltio8+/oDsSm4WE4UjkManJiRfqhVDJhgL5sNA5hU/scVMBpQjZqMSTVCDmrQpIGjCk+pnvetElxy4+vr7dnuQl1ThBVzE+G/evL5yVfX03MzdunpvMT1+xQiXAvrnvTt3Q4kkdQfnpnq62ijGjeuXV1evLC1ZPDM1YY3rYwHAhlqAiK+oDK1ncdwnnz7KDuIgXruaZ2J48OzpU9FEwh5B2RzActEEGEHHuCyC7+Yn+uMuagiKwMmQk2PNY7DgNJYOQWXDPUQB21stqQV4YEFKoUOfMZEC2CQ1ClKMjYboAv4amsgRKkPwpZRDpoq1tfdWrKxSPJodQepYRp1i/GMAA4NYrBcNzerJgm16JO98Cp19cYzMkU27KEsqloLHupwwQFxLm0hiUvnFRTaO0rMWsObz0+czGe5vxl/3pMrNTZqXdPHKxSVl5Yq02CbatXsHI6tzh2tPn/zMjbDu17MmXb1ixbkLlzMz3BZk+zRlOi5xnlsCYDUbXHZMR0Yy4BPJMGij2Z2asHp+JeEAJhVMFdL5IDhkEYHJQCL/jMSepmvpJx9fjKGHMEDYRQ2Zciy452qqGEUbJg/MYNByfCrUw9mwmYsTUhLVamDRAs0tvPr7wWbxgHcslMbzUucBfi5O6U7h75n4BMdnEtU1ks0Mm5qauix5VSnz5CSfPHmqasVS2omtb7z11otf+mJq1gI5ptYigNdI7RGYgu1BQwO7KcpC2Ii9ggRsZUtbm4ncE5FCo0dOBvtBtgEJEmCAjUXSycK8kFmkkDRjIgpFWgxBDAgPDTXryFPlelo/sCqiAPDSuWbQRH+OApTNHIjGP/DcTNPZ8YhsoBLnxmxtIMREbXFNlCSE7IudeV2RZ8LJv2HZMzNLurpmY8GhMqMblJRCFnhut6VoFsboalD5UyizuKTUVKRkANlDYQ6Wh8ZiJTSOj69Gn5HRkI8BNnw34Y04tFBcJvBM8js6JuDLwhMAO++VS0Ous7qCYEMBZwNQDzFXrcr4x3/8Oefj7/7u/4GCgeCIFO5Y4Dcjr7W69oK1UvzYW3bJ3MNcGi6wO3bG2kTIYTLBQ5kpwxpA+osXTBJeaOyDXCKdpg801JJmWQuBCpF9orlQmAkuykxJj9Qn78SaASTYkZGR2dh4ETqIGcQ3OYFky2n2sUsJcqabqhoU2KYSPZA8/buD2X44wTYla0BOWOytO3YuyM5R0ZxlcxiRO6sGtEt57tXVurj9yLPP2LFnvaHmPBYvCrI8S8LGHZFVRWuWL13W0cHnnm5taYEvYnJ3BocHEpMS0uelZC+YvzAnt7C4qKezWwGTtJQ04UZqbtPP3ohVSvni0kBwt5OOjSYlxKtUVnvvjkiHKoQo2dgUagrrcNOWza++9ibn3UEvSo31B/eH06UQgQ49FeBEWxYABRCHhAix4RE6EMXURFvoLQK3rR2KZuagFYGkzrrCKbF81vLsZ6eMpQcMklK/MmNFednicfl+/f08MPOge0rWrlml2JHOFUe6c/MGUdyyebPhCECMns0qXuAU+viLOTqXKuO7bok0I4yAuTkLlBxcs6r6+KfH9u7fe+H82Vx5xWkZt27fjFdYLHWeEAlSTE2OJ8bH4YxCQ/KS4GivkhaA3N/zF86yq2xCsORZWaKcdoooFEdNnnNefpY1BjXkB5NkAJM3ACAIeLg61M0H5bnd8H399TdJOLfYQ21slfBtVARhMTgbTIFcA2dgzp+/GC2c6utqlJbwHKZsL3XWCTCwgNT5Dl/A+K4BIgv0EF2/mp2np0v9BB2izmvHZWE7Lck5ewJakq8B60Q1KB01ib7rFj1RFQq6Qgdkp1acT5XZnd8aHRkSYNqwfq3T8FmZ6RXlpZfOXyCQ7qcPtiGcK1sInZ6urmBMMrJu3rouiM5zePrpJ52KYXgFcKm2Ec3OYv9mFpus5l/HF1atrFJzRhYAzTjyzNFHDxvPnTm1a8fORw/vtzU9Wra8kqjzqq9fuzIgphQuOO82HGkUhNUhI8wjpYw4AnGazpczrRjC3QJ9/QMWFe4UJ66QhSOFJS1eQQS8QBAiioZTE5MQd0uuHSQxe4EJ2RlmCn1y6zSzlFXizOWMnAHUUwMUi3WCUHyS+vsN0bjsuUD7wccOyd/GPgoOZsbB0MSGZVPfErNoCi1jY8kPg4PyvhN4qPnJsk2kA6/ZBB4AAcDHU6fOnDhxcu2aULNuoH8IGHwMmwrUULe2i4MfkpHpei+5JLZeYWTf2M2osu1aWkJyMquVuSATMaUAsV2K0/Airt+8tWxplYOXigFPxEr2kZNOedvdvcJ5GVOTxYtVsqxYVFh081Z3yKlCQXQnfHl5hdBTEwbh0Mu2wIcfvW+1l5aW6/JzFCd2NffqnIM8fHg1D1Xj8bEpaZYjI6OdnU5qL7XJzkvga6CF0B6Eka+58SGhcjGB/WUaLjRuLKslny3bdyhkAh71KBksdPQTTsMNh1DZjEsB8BVNEZHQ+8LMgdmyOzLuoIrmDAIEVe+SIXihsu98SmSlALSCHlre0Q2Qo11k/qKAE1WnAOTG6FhrdChY7Tj6NzIxPjQ2muue7dt3rWLlR7kUZm5qEoe4v9cuX9btlo0b6BY2fPUrX7by0QOwDQ1fXenTHOkoN5BMIRVlSxwTZYCkYlSEW/QCuZjIkpJyiBAFtg+EMqQRBPDm0XIFd3OyyisreEtyVcVUqB+tYEy10S3uIBepgjuCkFE/8Z/AFDZbJsafOnrk+KcnGW6zl8akjazX3r0H1PbmJgZOP1quXrdZwNuJcP+MsECTUOx/oFfZmeISvku8vTbn6fJy8iU5hWOgcfE8bkPjNS9HyMt3a27kVRDDxGOlS8TlBiQkhqRb4NE9imFQQAI1YplJkRGkNojABPsnr6KiYikCUjzwYBwmoow+rXodXvCcriIX4ihLJ5vZClMznesE/ChjwiPeThEE2GIZ5P7pLSJEAh1TJjNtbR2R32+b3r6bkKEXvc77gYh3mXWuGwvuNk9sBZL+vc5wkFjPoQwqsKGtv+CH5oRT453dy1ZWO0rptJ+tN0WQnNpz+E/A1a72b176lYGgLFVRdJDrEAOmTTHcyiVLdmzbbtyu9m53mNsmipuZVaCWWzM0Ni5kGDcz55JFyu8DBmwyqL9gYz4Ag7Z684noAGsg+Y4IhFNj6knwol998RwjYKQTb+kTm8Dvuz79E3K+M0MaEz8vEjZWmFZyEbyoUjLD56G5Vuf3bt+JiINWZBpZomAJ2IwFGAsG6UF68F0bwLk1ydawskagGB7qn+rompoer1q2dPeuPb68//67wnsoDHgzE5GgX1baJg8AeG5orPcXR0RSb9y6aSx8B2EkckYxHMpY/wenefFiLyIXXADMJly6cIEkkENpprxhvZHDaJ7WRo6HA2rCIjTFXvyrr768edtmUXm4Gx0f+UzepdryeYBh94wWWB8KcNI4c4CqR4LEany99tqrWI+ecGesTGDmBuAZXT8QFCCw+BeEFgGNTfm0OwW0OjSj6BzurIpu+TQYCgvSQrBNqEFQYzulOBXBxlaQk7b2Vp17QunQJDEhySUhpkBWHYvpJnjolF8pLNypErLoPBx/z8gSGJJkYiBuJUwRBF7kCrSAcc5Kn/TFWF7UG1xM+TpEcB+YgoqmoBV7y7bjIAhpol/Rzbi+EBLOk86hqYE+wawEhQiOF+3IszNAYu5sibQ0CaAuFPYyKLm16ujsDm/hLDSt03QAJIOu3bAWQVdVLX//3feUMkNqy3XwuJ+I2IsviNsJxpMlfgAasipkRp9ed80ZXNzOZhnm2gSWU7DD2lWCHDr4ruVM2dyDhw03rl8rXbwYUgjIdwkMLQlHk0mph6wCc8Tsm2uQUeal/Mb0lAxkF0KvXF6JC9gjZ0u3xgJe+rxUCwxf1q1ewzPYuXefABB/FzHJDzRdfkKi7tXWNTY1IaBNDI3xLjs370HD/RtXLhN4YyEdefaT5BYvQpNDSZaMQrzh6FceT82tex7agjh/6aJV0PzYnXo8XRxHT1JHo5EaxQi53IM+qa6xgj9SxRg3SWuIAHjxXe4LO2Cyv3RRUnL89etXLUrlBBrXjOlkNimlxeQEkZHF6GJkiMbzM8VbhaIGSbgnszk9TSZJQ0P97dthaxGDSAWMLFXeeuNNpNBShisqJiali6CJRXK7IQtTi0Zao1tSsX/fY24QgwJuqlbQP2713mxxS4a5AWTYT4AhLbAzBEcIoYgiCSRvTAHEMcsaia3wHBZw+cY3voGM7IxOBFlpK/EGp6wSfS5ZUm7BTKo90RthoImEQScGAgmuMadY6fk7734IF+KtGTkHGGJ6V91FhKIRkDX/ohWLoVQ9GnIPaA3u4GOkjPTRWB5iJdw9NJz+rcGDy5iZsXz5Mo6+QeElpAWM82fOurZpeKB/ZDwkLjby5cNhgPmFi8qs/LleU9Njt25cl5HR3dXFJ/QkNGts1LOPgciGUMLSZUsckLl146b0NjPFJx8fkwPGC8c+dwMP9PV//OFHdOHJp58Sob927Z3pmXj4kjRkBKf0WsrFTkZWlJnVMxKBE18wFL4WAMyLMLE26Gl07yILK4puwKZc+CgPTZYxIqudQLYJgLITaIiDpKK7p8/Gl1W07x3tXSQcp3B83+4QsF8/vF6dUBL4gx/+cXlChfWwUWh0SkISsnuF7I0MDvX0dMuiqa27R0pJFwiBB2YCABI6CGDWD/DE6Wtf+xpyMeYAUAJaSxXo/crJBDMlMnVKpQYqqXNaSQ/cs9WrVsozl0IpGxbfxa02bthkxU42qGRVtSI64//wk7+fvH1TcIm/1N/Tb8XFnX78ySdEq1lvuu/8qiWrbT1kR7HhoRHQsm95uflJvhmSjeDNqBHH3ewfG/z1r38jZA4meLo6jnW4c7dLG4i5BNcKmP25fe9uRcWSfQcOAZdNOax28uIiJdVPnjyenmECznaJKVZJjkevxSUlwrQ3roWcSyfV7KEoEIa1hHsuVjdK6mGcWAfVam/BAOLLduiZTBDcaD6gVKhP7EBFdu2tmI9VK0JxbTDPFCVAHslKJDc01npGtpIZjhGn81ZdUJMXhfoRn6x0DSSWZpIjagSFCCKuI5vbdu1WvEbx8rs1ddISrly6bBmwb88ufAVGbt4iqWL2zfOyFwiBWFKTAPHMh00ttopoo30Svekc5Esrlz/x1JNI4UXBRfsXFO/sudPVK5ZJySaL+OSD5n29A052nj59hnCwo0ePHoFvXPw0i4B6Dfcf8KpxAYnAyb9hj+AuRSdklJobJsZDJnVigly0yeHJoe6Qjyv3xuSBSqPjYxYY7Z0dMtp5WjxOVqx9dIRiBF7MBCfGR2ybPJBCZLx39zaObFi33uwlIVUohUQWFS+0jGFNHP0xH3T2dCPm1SuqKw4628uQsezEmtMsFtL4qNk/yaKEWg38yliACkZGYaEAhjLMHNNPFWEEBoABqa930C6nNQnTg+kgKSsrha8cRM1YClvPNpT37dsjSsfAxUKVaZTHKJaIlJaqsA7Gwh2U95dmki4sJu2shu1Inqga/2qJMMzqXExKdIufU20gLiHBHQ7qpYaaDympegspOrFaJehvFBCaGGLRhRk0hJcnENG/f07NxbX3Dc7PDRkICurnq/mdEK8WelcnH6XHEoG8hQ2chDhVi1Qm6eubE2C0ja70+FA/tzKD6AoESrKcWRc3PjnV2tGTm1cwGK6GzVAzB0mV3KGYrD8jjmIG9U8k1TP5AZt/kh8wIxfc/eRd7T3Bi+gt4EXNzBm+6ISUIhp00Ip/ph8WkFMe/eRdXXl9zI3gsROlGpNeCW/YZIUDKXRIi1XaQQ2C+uhhqPoMBaIs/QRIbm7ucS+HqC3fJ1asZm5mbnx0hFhOSeHNdPF7/1K39lRUHjhwSI51zoLMLVu2FZcuEtKzICV1sCBjbD3YTI1wIWZ4hC8+bAVc2DuSRsD8yhoYl6TRGvtI4GGLybCfAA9IYFBYhIIm8UBPtsK7UBAdJ35//Md/zEfhKbJLgq9k3rjIoiuv65MHQIBJLwFAExCCBCO4Pvq8ffvuwYOHUEx2k5orR47sZUAAb6dC5xxZ9BdAYcrN+wwmt5IiS34A+eTUhPtLAGM43hLEQc4wYCjzIoyipid+2clk0gFmPhNZYE/0CU2IUwQwQNYXlAEep42hHp8aX7U2LNT3H9pvIIhs27nNAi04kZZPTRf1YHuWteYcKBluu+/ilcsqzCCXizJsLfqimKbIgtvunD0lMLanrZO//MKLCEWkASBrFqcIEruHsLIFeAPSRc6fDSXmMI6pQQTGGsW8ZVLHArzwTzD/u3/372BqbxCFI/JCc/fundMT1tIWxRg64BqdiYkOrERS+5AMLxzJCQIK+81Ln7e6egW66cQKHAWsXiITxCXFNawvifGaErDelBoit+/cc7/vY4efFK10zYOQP9MtRHTs009XraouLS8vLMS4RbYF3APj7IHJtChk8CeY8v/p56H88TPPHvnP//k/r1he5XtV1XKTqWo5+nfWf3Q0XL6B15wqMlYYstU73NPE6VPo061h7CdFS09NI2aPHjbFzcSRPRN5V0c7ptj+REkkFSBTzx38lvzIZWnKIx6MHeIUKsIdFlIPyOJXvjUHGnFQAK/ZUhpBWUipsS6cPk9lfvf3fw/rtSdpJMcrnC0ul+xtrKRi4i8mcTe5bt2x7c7dW9IPau7dcUOLautMujirMJswc3dXx7XLVzBXCNllPLB2YzGfzMYOG4IXpBSElIVs+GCEJ/hOGHy4RK2PHs5bt4bc2sv95je/eezYMUYbrRiovKAy4ePXMBFMjA0OjT5svPu1r35DocK3335z3bo1bJQFmMskHbwBOdQwiPy3traNjtTI9nSRj6AYsgir6ZbGAYzoYh95I2xE0RDoQ678pDGy+Ccttvb2EHkxETtMXpGjQjKhRnSjSYfsCVto4AkcsQxqSKFZTIVnNYYOdujKpqK3GHZdiSxgisYIKMIl/F9dvVI/gERkD2/fvuMMwOc+9zwH2mRn7UG2mTs09AEnwYAUUwwXuCNRps2mlCRfPjt53Mar+Et7ewiBlcXWolR+cVHwR5VsV7Q9Lj75yaeed91y4miccCeNkNdJJFpbmqhbSVERf8CiK7J+FBx6TNfZ02ekaBL4jHmpilqoY2EOVRVVPpvwGMd3enzi7u07CXFxzrnJ/hCdxHFEVqqIbGhgdYFH1lSE0KBUmDWgjHYA5LSYlxEcH2FnIeQ4JXEizwjbGgteeJeVFrBnQmUph9y/WBlJpTYx+stf/ippsessnmXmSc1IkdpA8hGfKhEw4m1NT1vZVQOZSRkcwgPl1FiltYTZUIcHj4grm0CJvA5s3KRoAGbHED/SLz+B3AUL/FVpOWIWZKDpUZt3zQ646Z+SXfwlq7IZMcvQ7n1HCiyzlHLILSk+SUxfspOCx2E+aml3JkHP3nKydeeuXW3tLTW19/yqLLgZ9vzFS+3dzvbwKEJimAQQvj5Jvne3Rtl6G+zdfWFD1VhJYlQcgvr6BmLH6JO5aQe9EuJZN5PB7l17L1w8RwoJqH2H/fsO3hfEb2x2xM1n4ULXYw2zC0F2WeKwM9IjPJaXn8PmKt3VNhnuwVHHXaaQyworl65QwmJ0fLr2fqPd06NPPpW/0LnsPlZVXoQN2dyFZr5Qi5BP39sd4tkWPXx6pGGGMjJ5AFvIH+EWXaAqxPp+fb2tZfuPHn7hC1+gliSJkUVccuCf5gDy7RgH+0gO7FEyeWjhIYaZTV9++TcaHzp0wKJXKTHRBGpAVhgmZritp3t4dDQrMxxQXrt2zUcfvr9543qH0gHgamXyob6SicRl75I1rUZM2HhvKSNnrktWootml1YK5SoBKYn6/sNHjB0wGI6If6ScD8rCKsCqgat5T578zP4XfSZzZnQiYuvqXs2d4H9PTNAZJwocJzCofIkY1+LNfJkZ2WYO/UBZoRhvkR4qV5RX6C0HGCi+UwSqADnHhqRk/ec///mOrduEbRgUAwkX5RcstEso3s8yYmKo4DQ8TFs2b95k2wZZdKuoFrNIaWFBnbBGCM1ZxOLy8hPHP9OPEDTaioe6+/nc6VOYuHfnNvGkVStW3rp2+aHpodqhnBAk04zR1IA6URKQe168uERujIrRFMYxxHNnzp05c1ZlHh+GQC4yo2DQSLJV6vQ6A+R19OTb79y1R9aQDTwrZvaazKxbv54Cv/fuG05uoIlBiSswjblv335BDvL/xOGDAi5Lyks625td5nC/8b7cG5eWV69cLaPMoUBsQjE7lmpxUhtCRSBZCkQgkAAABqiIll/ZAnsRsoPGhoZdV9bW2qxOFIDZRJ6BmzikzEq6unfn9rNHjnJnsUDK+/3aOnlEpjfB3NGhYd1KQZLebb1u60D5sBCAn5lMSFS3pC9nobv1VMpKdW0WFYvgiYl6KB1Dw8mSyd0xQiFkGd8O6uEd7gCbecIfC1dbwYgpp0UlTZMBbRK3dszL0teRAVEqV+qxBeSHP0FKaVbs6FKPlDHrdoUHUxyMD9nkGSis/7mxsBOolpO0b/k/UDYc+4B0XAeUNzRdY6m95afionBQwYv9I/1Tys5NTsuXcxWb/7rH+ouLSlvbO1Tzc1Zo06Z1yhBUr1kt0cDOpFwO0oI4jJBUYwMJ/SJ+/Gy85SIKwNSGy5rV667fvG1lZbKU5O+5t7Cb1hBs/7T7L8rOzbLzADASrhPqcOF8yIrWktEg5Mw6ySRenP5t27ZIomFhLKN4CYkpiexGNKmz49wspDAbsR76hziPweTtCjA2zSumDWwyrqWFBgL23C85k1QAzU2ELDBXG3HMed6V5c8OOMQkmYJ9hjKeyo8yzTj3iV/mp6nJ6f37dqIkHp048RlEkJop0BLY/A9BUBvTp09/Zr6E3f2GB0TXdzMoT6LufsOzR54dGhlpqKu7fvNmZXklryYrYx5QXQBm0IK8AtfhzUuyehwiui59F9898cmnTJA76h3qNaKsXwm+aGWxKl61b/ceMgy7vXt2qcCvOEE4C+hKhNpabhPuyEGhsyYw84XlisCECQk8ohvMC2jJv/6pvEpBbIXpBt2AzWg7tE0x337rXRDKWwWs2USwf2SYqbQAlhXtYHqWdR9t5e4YFFvfeO21xcV/KDwG5hD1z8oyQTBcrIFQn8vXcIQKyHjDbpB88O47iGzzTexj6ZIltMBG/KqV1ZwMSrprxw5AQpyxMjUo0N0RO5FVvCifJ1FeUammRXtXtyiMoNjS5SvceLOwsIA2OfW+aFHRQmW45i8YHDJcnOtexkcHhkfGBLDujzbmZCdaKtnV4eswL8kpAhTzZfeSpe/+zu9cvX7NSsZdcGjI1JiA7qjrPzwixmxhOzza8dGHH66sXu1mFFO2U+BzU9McR7Jx+fJlRKCAhMrMLkrKi0VkosvVILREDvoCCvbNHNJlfq1qSAIDKEbGpMhs4TJp5vw+WolZwFTaj7nPyTrHw/bs3EVlWCcDlS4uxl8y74IkaUKiQv556tTJvXv3iyt9duqEkB9IllYtd22xk80LcvMeNjWXVy61NceQ4qNBbcxyD0i4SXPN2vV2D44cfdaJTxFQYhwBjIzgV2GCFFlmK6b9yYkTdgbEa/oGlQym0d28bYSCOwAcn2FwnCbCefmiruSm1xDHX9JFolCGpKFtZKOoIbNAnW0fiTFNjM8YesP6TZwitU/YE+nT3nVCmpRCnCIzDjxynRBgrvatWzcIWORHWloQbysWc5N+8IgIsU6IAwu98UCCQQgX14RoIAXBaCq8b/8ecxBmEVfcZIh4kFZ6pz47EzNK23TLBcJlcgIef2N2I5QOt0HkLfBkOczw6KGfpICJvyxYoAT5DsJm6MNPPE4ehEbMFPUP7guGmhdOnDy1ZOlKXt/tOzdZ+r//+7/fsWMLXKpXVnGTmC/HPn2kYYtSSXimeg/u11NVrnOaVbkIxPwFfQND/rpw0ChecYvosqoq943CDr56VhmCsbKXYn7h+jOe6MOQeoIjbhgMi6zZmfHJ6Y0rVl28fEndBa6tiIyhCYb9BN+l+5IHR69so3W7CailCR+lw91vqOMQuyfu0OHHEef+gwcMSEVYUdyT+81gWmS64IhRwiyGAoS6TR62kx42u/jfRIKcm3rNMhNj4yRBuS2zgwiOXBrVO0SWoRbqxEgTT0njvHV0thHvU6dPgh8roUPRWBsy4NY2jOjqPBZ6mwi7qVYyGAp445LSqqrlS5eGElXtHa2st0WwMzw6wUEpA7L0V69dQ0KEMDKyMrp7egsKw0loobcf/fm/so2TOBe3fHkS3rHnNnHsQSE+I/8w4cG3vv0duBCSkFM0NNjlcPDQQBIvDRHrau/GyvKEcEJtTd3uXdvUKwik6eppfKAKdUp+7kLOd1fnQMP9R2Z8ywlYTUxN3Lp7Y3xi5OAhlYyXyfBJT01xr/kvf/Y2lRPQUhhG8jPQ5+flHHl2q+HdxvLOW2+HFAtnEBaXLcjJHhgbjVO+836oMyVLMmk2TmmRbrmS4tMxV89e/NFnPkdLhZ0YmsKiAjLdN9BLRCsrK/Jystll+5AzU1PXr17FnqbGMGVy9Tip5pVlVcu963hidl6uHUrJyMSFpJI5SxSeMd2Tj8i74nxiktwMqPGDad3ZC2e/+OIXNB4f6iuoLE1ziqHo64rPSAHiP/WnJNnepsNU8WFrG7OVnJ516r33OKnFhQVjI0NOKy8tL0b8ZRXlmTn5TW2d69ZXJKSkLimvUIRgZnr8pV/+4ulnQoo8UyXI7fi2iNqTR57++NixodHhtUvXPvPMEdFBPpljCItLS0i2RZfJpqB44YOGhxcvXXEswe0BLa0Wb6rwzjtx4rQDhksqyhwC72nrwHhWj2fFz5PBbLJhcPkrN65c5LSVFBbIxpOF43ZIumHblxsqXLx18zoCRypUdcjOmn/w4AFGzZ1T1pEKENXUhkIHH378kXBXOOQ616yEsHyw6xevmBcNRNYtHki548HZGfNqa2vystIrSgqnx4YmRoYO7Ntv8jDB8JLtXdokEdB60BiSQWUjdPX0rqiurql7fe36jSy4qHxmVubqNWHBsGpVNdNg3dXQUOcL60zGRMApkgk7ISFRxtSadWuLF+TPxM1TgrzSpSQzqrZ3sx3E3TUGxYuLYH3p0pXxsQke8Je/9PXRkeGrl84r/nOr17Zm2DYVxrh+9ZqL9zjlNlXGhydVOeCV2oi3u00nhaVNPyQQu0ukk5VXbNuxnZ8xPRuK5CKawkF0wVEWIqrD3PmZi/KyEiaG8zLTlpaoOF5/60qr0hYszvjAwJ0b15VH7evqTo5PyM3O61IscmRCdL1yWdWZcxec212Qk2VPf3hirKuns6ikdKS+ZmAkPWVe4sjo4OTEVN7CAtkymekZk+NTltu2OFU+YVNYTyhjveIZ1MQBdHtRqRlpzpC4S4DtwztrPOVl+dyOh4RA8rBLaKfs7Al/qotlEWJV6a8FLffCFJiYPE8SId9XDSLBc/duJoV6VgPz5xKcUpuN4+QV5Ccmit9VLV168vgJSzuxfMeqRGLcvGh2NMEwqUTLtikVcw07k+eQpKW+5UooKZicMpccDkupOSNXdXhkVB63Iw4PmppSRJNkJ81PXZCZUbKoJDLKorzwVZqJ38mMdnTWLFi2ooM5D5dThqoASSnpZZVLTeFI96ChjhSZdx0XsaKm+OvWrPn4w/cY04y0pP6xIRH0zIyQZ1hSWn795p37txp+9Njj/IB33nnLvOJ+BtbZrw+bHnb3dW/ftZ2Tbbtydnoy5moPuV2Kz8TUvPzyywy9HQxuFnq2PGo88uQTfA63yTIU1m/ikVhjMdLV1WmjRxIIxeENmHRdRyUeLJPHDGfTyRUEDBrUBLTUREqfl74ov+hB3cOejv74maSOlm5XWJC6bZu3TY1PXa27mnMoh4mQJMNHr7lzV58PFIrOK7h0/pLooPxdcvH+O+/LYmIZrl2+JqkdwOvXrJ+enFEIyGFTQYQex7a6+ypKytWAHx+ayF2Qa9oz9Oz0bIaCaQ33lS9jAfhDKrNXLVsu8RJZZKPZ05+enPrNS78WX1BPsL6yzgxy6KnH//6//TeXOeRl54gOchDdiEd36BTwpqanOS4mM0rq6vSlK6rICScJyqpKmIzMHV/9ytfppjmYxQgWYHTCmsQSCIneeee91PSkjOxMClixZGlufvbDh41V1aIzY5aFTc0PmKMF84tcP6/8yEu//qe333zHEbXahnqX+KK5DpctpwKTlp525BrvNyDL9h1be7vbkxJmi/Kz+3s6li0pVcGsraWJQTO7BadwOpeLS5BIFIa6Dd0hKEJ7706oJGOriiXTGI7qJpHw3/z2NUcsnjl61A0eDxqblq+oTkxKtgzIsTfSO/D4E09/9MmnhL986YrBofH0zJyR0cnSJcvq7tUoNJSWntna3jmlMn16pqRqU+Hk9IQs6omxkHGHPvSIIyUTyRaNyc7WsZXtxk1bigpDht7g4BCZ37Bxs5zfq66Lbm6ltxbupFoznpCFkn54G9///vcdc5xVrGdq2k2relNizhkka1GBAKaJ8vKw+RM8I9EafhXHumrZMrGAvAXZVy5flEcuq5vS2Y8xX8i6xkpyvnb9Oomyrr0/cSLkr4fw8/iY2dYhE5Oy0IZELNTLz1+o/YLsvISkeY6ocaBFr4jT/IysxKR5LkNMUzWrK1yt/aUvf80oFMpkLblUQiKX1GqWaNU94Jxkb96+4/5LvxIN5V6pdi37k8mRd2Db3zV21L+luZmdHx+dIMAJiTMnPj2OVoSW5eQ2OO3GJhia88fLh4LGDj/wMYiKw6Jnzl1m2Om4pZnJzgWHItC4cObMaVrL1OCswgZ3r12WtLlxw7qC/IVORspIdMi7smKJrsK1sjdukn+dm6GsITk/hMc6GXcIoZt2HG4xjXJJVy1cZSLjUrMzlMVAjx415eYGBxTYYiKMhnO3nOlDjx+O9i7AqSJzpD7Wuv7n1vs/aV5qw8NWB2D6+oen4pI279xZFst0qn/YmJDihNXg/Jzc/r7uyakZpWL4moKbrc2NF86LKcy7fasmfm52YX6+vWYeuTOE2bn5b7/7IZDikxKrY6W0KIVMQfMm4l+7cdP6mexZn2hfsrhM6S0H4eSsOkc4MjY8f0Gmo1/CcRcv3Ih5X1K7V8LOcZc33n5LLAyv3UH2Zz/6510d3e++8cG2bTtUsHn88ScZgY8/OuZS840by0mOs4tyKxoe1FPG8b6xW3duIvL3/+j7og8+q1avpY/UxFnYjs5ue5gKabjsork1pBEOjYzRLNchNze1fv9P//TUsWMivwsXydrvdVvFhx9/4K5fjKZEXHk8+vjjY/aOLBvWbdpUXGaX9eFMfOL8rJwtxaVsVGbWgoJFRehGr1PnZZpehVRwWY37/Jz8tmYbIHFjw4Q/ThVhemdFp4j89auXuNaQYpyXVlS4iIb7eujAAcSEGvOeuSCbMaSMDsUWJqdcunpZhSXzuHWj6J4j0Zs2bbxx5+6FiwpwPdXYUEsNHzTU83v7u7uWVVaYRFZWLRfav3TxAly8a8nUIQmht3/12tWSTy6QZlPmyOiQY4shlSAtRQ044SgbKK+++iaxm52Zm5eiWN6sbSBbCVZgZJSQmREBvXnjBq4/EQHQ6c9OEErzAV0qKVrsPiy1Cnfs2s4hZwrNL5Q8JT1jai4hFDcdGHTwj1wyBFZUFUuXyKpkXHj5fEQxjLXr1hUUFa9esw7/hsdGP/5UClTKjt07oMFNR6a40rn6e3YARuzn0R8BbEzynJ0GHgb78MnsWeOZxQZN/vf/51/at3ruuWc5jrYpxJWf//znQHv12u3ggi4qEaPlIxImvqlzV+vWrnr11ZdVFluhztnSCkbn4YNGyzVzG9z5qWCDmuXp4PBoV08fT3160hQ1l5e74N71W8uWLOnt6nR53epNWwmrudW6+KNPjrmKeXCg58svfJGI4/3GDZtZZJLGIeNUoSGWIwJrxdLBhUkCsMCbyThRBsXMzAfvfmAuWZC5QL2nstIlQLJlnJmWKTX/rdffOrB/r0U5g9vW0cZRvnmTjs1t3LSBEccCLntXextfivwhl6WOJSxX48r1a+4v4N2KPHH1Llw4Z6qQhCGl0hMiDratW7fxhxYvLr16/bpFtni/2dcmNVIzZ9rk5SwYHhiUopOaknzj0UO7wy3ND72OSu1tLaJlf/u3f0vicdw8QYRcNgk7v3IZlZpi8vRPJikA+IcH1e0prKpaxucjZnboAGzyJmNeYeP4YaweWmGfuM7ciPqPKpD0Wv4VFOa5eosbSosEfIjQ2bPnabIzboSTDKtplr0g9fSp48JUTL/IolHkrYVYdX7h4UOPi3eZJoEqNMsFCQv9hQsNilkwYl9s6tloNvcIOmKTUGsILw0PfPzxx+JbQBJBHOhJ2LJhLR/u+uULlN+kkuU478z0mtWrDUr1RBdMEhxlaQbEiblUxNa2Q+HCPHQgVwVFi3Lz8k+dPeduoO7+wcrKMtGyyakxaJqw+TFW/Ea3Hcefi6XnpOWqM+t5WgpR7O5xCreXYMsgTIhLcKYZbbUnM1Y4fGjyRjgNLfvUgQdMnJ2UDm17NB2PcAciNrgEcWkKp8oaAIsFPGTf8MasH8QIfEFmuwdCgFSDUOnfF/LmuT7BxjGiwv6JDmgIBvFUOwucVLEGU7LtE/zFWQGIubCTkeJgsHMvY3JlwpJkhjkTaabmIhlY6bymxrLJEYrlNQre0aOwlJ2cdjJy/aaN1mlnTn2GcSDBR04Id9BMI0JMik6ePC5XgfVQDM7S3ZZj/f1Ggrd69RqjkGpkIWAiF3pwLlxsWJROgADveI02u3FcYgbUCA9KUjGiErSst5f1t58mAurdVatXOptlTWVoEiLdkyfn7IflK2rQbrYFFgKuMcpM79wZbn/UOQ9bfMt0iM6cGD04hfXWW++wzDY2PBQt3rQpmCaWBPUA7wtOMX3ci8DN2VlRQOttF9j53+SNOKTaT+4BffXVV13viK3GlT9tUM7r//3Z39pQxT4uzqZNm2vuOsuYe+3aVQnZcBH33RO79lXMxQWI/lm9YoVCCKhx5KmnOtvbEWdRQYFFgngN+1OwMKQZmPOQRfGNpRVLzKkCpfy26E4ul6vYqWNtOLEoyQgAg9SBpKf7ESuNL/pRxvG73/0u+YHanj17Hz66n5Q8s7i8QjD+UeujrPSsHTu2S+Eme2I0EJSWY4dNBZLlS6vscsjbuXrjE5GOxuYWrsDhg4c4uO6BGhnmtS90rtdWDNWwJ4hMD4YGxmQnFi3q7Ok9cdyx7/IwqcVyhem+ons7tm81AF6TH6ehRoYHdbW4DMeHw6STkvLil79KhNyzWZhaQiUWFRVxPsT1c2PVXdSWKF+ytK93yL6xU8wC0gsq8zhV5M2hvsVlFToRN0V2rEcTawbZxrJeNFA0gkxqQJ6rVq7y5V5tDdjMjJF+UQ0Gx1u6JQ8PHzWKhpoEwSNnkiYSCRRG0qDaMRm2KrZVuP/pQ9Wr1vAp6RdJnp6aycnO/dU/vUQ8JMkcPnxISTokdahq/aa15tP4yemb128kJMWrCIm/N69dP/zkE2YQA4lxsO0mBaeWobBq7RrCTMKBwc19+913Hz1qNRvm5ueLBbjrcGZ2xoLZ/nZJ8eIsZTeqc+gjH+vBoyY+0J2a2rUbNianpvHeiCVkFURSoTUja4H6wri5cFHRitUVk9Px9lI2btn66NEDxasNV1NbK7+FgpvERUVzsu2+FBQsLJyeDG7o6JgcuVEkYujAjzLUChkpr0nKd6ptN16Mli5XVOrtIQMb9mdCgl84zYhZH37wsdx3kyPhEWjTkCSH3O7BoD779uymm/iCKeY7Rs+vjCo7ACr0J0LUn84KsUmFwBqJEk79MiZW2iiJYuiPX2IZhuB76NCSgAygH2gRHCuNpaVZSWMkitl85V5SItT0Vlfb4LylfWz5qGmZ81dUrxbW4d7+7u//Phh02NjUotnyleGi8QeNzRTNJL56VRUTYbokD+whkFDVlGf1ZmjwwEtajvC3KcYmoTWA06hDiup09YgbPvb4EyARcBl07lz1iNHhFdUrqGf/YB+xUTRWP0SF4UIQkyZ3QeemeOw4deaaaIjU3KeeOsINWr5ixUzY7Tyg4MHPfvYzxu3555+nmGBzqsV2E7tKmEkyz0RITpz6wuVLR55+pqRkMeJUr15bHRcnLuMs7Fe/+lUSbu6AOPjR86//43+Ely9whxdl/4u/+Isf//jHrNmaVavYds24KOhJwHDQWlplMJtC2tuMBa3QpBwbaY0S5HBWoh0zqB+eFQETyNcJFwJ2VJjkADLQ+WGDY4c6FGFEBA38St4oC1NfU9egXsgrr71BZXRFCN9774NgUe2Fdnc+v2c3dOTvFBUVq8dF5ZeWlsix5FQwStBRj9VwFmnnz18k9YuKF0OQDxYWD+npzGaSGj6MyI2bN/k6ZnFj20itDKUzWoPkFRdzBGwLqvEs2Sg+JQEd45MSZFFgKlmxgQtoesKyc85ys7PYdCd+sATLKQkTPC85ycK/V8J37T0GXd5VaXGJqLp74BLiZqUKQDUtJZRWkwA7Mz178+Yt1zXbSLLf7aoBFCevTIMhduzYJfYj6EK8ucJO8b/68itO4sNNMyhRHovv9KSQaCh3Jbobhb3GAJFdgTF8+vxzzwmnYZICsRQeV7zOdUM1Iigccvr0WU+k1nFlGh8+Qm0XmMORwOmWaiGfuQ0/eGkETgO2gAej87y8ZXdv3pSVNE0ZFDQI9Q1K1H1HzHMXrsSnpi2prDT57d2941Fjg9Rz9h3kFBit3KomeNwRwvxW2qEMubdcnQYpdJsfq8I+0DcgoailrZ3Lyz2i6itXlRB9txCAv6+nOzM9jRXg2Vw8f85Asv+v3biRPC9194aN5ImGszjxSckSgSBu+19cqryoJK+3n1asFL6OnZY2o/gwsmTogw8+wFM7sPDlIjAK9gFQgP7owd0VbNlsCAYHV491y8/NDoYjNRVSJM8yl3BTM//0Frky5bd1tNNq/xT8c/Of3Tfj6t8MJE0Q0exeqRbFvXji8GPkE18QHwtkrAFJyMdYRsdxdPNPlDcKx2pBTr69ChvQRFQMiSMomce6VNRTqr1jEXJRNqxfV5DHHbTP2KuulXAhMMAsl1eg68KlK6wSXTC7nzt/ETEV97CoUO1HzhUTgB3EhthjFgCYY9jZ58VHnYCH8NNtxIcR8dCY0w9C+QDa27fF3Js3biCRVzT74Ob7OiGlQ3drEufNk3MJWdq0ZdMGLXnZcnVWJIXMVHnUwn0yB0x7zvhTmb6BUG8nIz1D1VZ6xBz7GLR0cSlCQZD8+CemM4ukKF2MJlZ4GwEjGhqLIlNnLyKpxqSOXEFEejfzYWOB94b1EPGrUaDpCBT6aIMaZqbQOLY9zUrKlPbBMtj5lS3zxVj69LrvwPAXcbzY39drnwMp5GLRd88dM9ZYKSBdGlEZUGEiSzurVrLdLooZl+hqDmXOpafY32RqdWV03doMcRLJQqHhfh3T4ei8ijrogx0E7PSpk+YVyxfKS0Hauzo9ZLvtmCGCZCqxCOyOOAva4uIi6BAhxFFYmbG2gWMKtNwSI7Au5buTVUQDAH00EESQnRZA39Ix5JDE6n/7CaMNFyNjMvpVVKxmXnRiU0ufXjF3huVbsuT7PGaajULqiC9Agh0vCjH1wD7AiC3yljZG8TCs9+bNoyDsHppozw/mxOiK7Jk5eNURhCExYzaUiAHq6IRaw1SJ78JW51mQ4J35zwHF1157xbJh8+aNBM8cJleIJjLL9rhNnAgFQVaC3ILKd6NYHYEBSJ7QVrQzFqYDxisFOe6NSnWdhYHg4kUkTRkPlftr6usYEJRUywUAiE8jeOe+N422CE7DzgZLaan7yO4Dm+ppnF+Qm5qW4LgOSbUJ2dfd+7Of/dxCGpcBiSb1NbW2X4wlwc9+r4FsW1EA0S6uGGiBKkmD1CEmEZI8iWiYYFy1/tRQXVK5PCUt3XRAKYglLKCGuV700F8o4KZf/TWHiSxWLltKbHTYJQExdtYWm5RPp0ocxp5utX2DbnLL4DI7E+7n1gBPmRHuI2C4QcioZwRnAdhJwoNlXAS1R8N54akpxplzL1QcDSH6yEqzsQjV2xdqGhI2r3928gyAgWeRjOMEaXwi0ROpUOAvL13sCcHARzC7M8fo1IoeKSBhLcr3FWw2GwkhkQoF7uyYc3Ec4RBHlJbh5l1GRgVS5hfRuCP5EqynpwkeCJ1XDmZ5YAC+Nl1MGSoIMYBOquTkFT72WLrMWIkiepbqBgbLbFAtco16RlosaXBSvlBq2gKsIW9Iyo6Z5qDGzdUtLSDYhIECei7tKit7IdeHBwIDZYEst5Rehi9iOvF5v66htaXz4P5D6Wmu8miG+9T0qFUKGmpgEWV0BBc8MqI6MKTac345F8hDE6ikU6BKFhA9pGWSjqAsMMrCkw08IuFWCBbqekibl7x3zw4BMqdIyTxdxmUfwPsnjpCBcxfO44vS3rgsN8G2G2CQgkjgMp8bEwkeAlI9ekHLtPc6TsFLQjUp8gX3qYl9DMJvLQFyDDX/si2+s896IPNi8/hCwl3i+6C+wRALsuejKsQ9lL8HC8EdV4I+8djhoeFBCavEA6mZAuNaDoEzEiTcRCt9MuOR4In6+fXW7TAVGsUHhR1FhaYKB1YOfr12/TJjS0Iomrg73Q12O0Z/aUWQtVsIHdaA4SovL/iv//W/2nL3imnYNuaenbsdmGQ6HDNTPsvQaE47eJtwIVp6Jie2lGG0a9cegTy64HXAIIV0uHPnrnqCaP5SNLSy/JBqCB2vVK34/w9/e2JzljMNd4xzdyfjyaaBiv8jJGpjvXrVCmtLbrR8LdUIUdt2h1EAzBcHRlHhQn91qzdFqwzKFpkpKAVxBQDO+ktmiDTT759kA1IsFSLv3rtXIK62/r4EB8s2rLl15x4zaESBGBJidSwFBgo5zoKOj7/2yquPH9xnJsZ6HDeKoUcejhJRxPFPdPMFwRGN1pgHw9YqbnF/EQgDhE9kHAKIn01iHjxsXFziGHhwGujYydOndu/dvbDQ6jksADQD029/+9vIHCvUXb1iOeZZ3um6vq7ud773e1MzwbEzngnm5MmTzBPL7uNebtOnJb5f6T/Mian5VkuhkYL5883i/HsxAW6txZ+1r2ILklgEGh1j5Ui4fACSlFBvSA9Jsqh/01UklyhbtXIFS0o6QYUWMlNlI3C7cAKNPER0dGQffUfHc2cvUDDc0viv//qvf/jDPwIYu404OGQ42muJok9McrXEY489LlQv9KgHmwYCtCc+PaaoXk5akWjCpg3re7u7ZFx1drRdv1M7Oj175PkvsKbq8Mnrzg4bKbWbN2/FGAkYHGVjiYrt3x9Sbtg7pocyq72j2bFjH23bvpXGDvYPbtq0xa707oPrmpvUo5whkQQCDaVXVK+ocoKwYkmZc7dS38SxOnt7EMGhYJbFnoBdabqxdNky2Sa1dQ2rq1fZGKHhDhDLDMkvCLeT4B0ikAqsoVoRAUk2WiEL0knaQS76gOAL8/KAihrsHSJok1FaQsJ8x1CHv4mWg7kCePQf1yS12CfBJiS9HUuIFHgwECJ4BXlpDjMntcBzZ6cYVv1gDT3kxEPWBxhgNigmYh/+EhvKLw+4s0vp0tElS1aSRvl5dTV9ev7Sl74kWDU5McnS2T2XQc7LtIU6NTXp4gyRYLuikRMGa5Rkai9evAxC75JtxgjAjBfBsGttXMKADpQCJOZsVAIGsClF5GNhHNUgk5KGIQU1XemcGDva77skZcAzgijpuRcRk55dunazrqFe0TSmH6aomjE1ZYvZ/V9SA7du2/X6m2/Ru0dNLS6ZHxoel9BMLIFkb93BAyDhF3oSWt4Ja+hXHlh2WjaG+Gf6gnRRX+Si3XSfyEVmiDuFON71BDBw0QBNPNEYC/xTCgd4mDCAWcN7HSE812300d67HHdd6TBaLSAIqSDSWnKS2DU/oYCHekNAI46NjQJTFCccRRiyMzA+OwPwucSkOEeCpRl0tHfXpNZxnuKldanz0s/FGRKvo/4W2PpByXByckEmNMFsy8hAtpvtwkeaC1riBICGunr08cHW5kfh6nX5KmADs0OE3/nOd1yFgXTd3V3ghJGwLnlWjRSLdcUV1j/HCKZBYvPyrD890YO3fEFPXeGRd6kwgx7hTq5GE8SMRvUGNw/JLYnynXQRb39BBRFDoD8ie6Ixi68TXxANFlAIkb/YLc6e+26+8U/2h0SZxqgGWSK3oKU41JOAAV7nOgESXSbMiKb/k6dP2tGJhgZw7Hx4GqrCzo0zv/jFL7xr2vvpT/9B0VLekTgOHLHMxKYH7hfI2VvjkhNIBatbVQUwIxIv568Fj0g7WmkABlu+kdMpc6BQjnZh8K3NTPapgkYXLiQYMhItgBk6GO3eXSDM9MYbbzBKkKJW+jEKmWRvr928nJLmVjgbpP1+BTYrx4jZggOeGzOsxrEGlQCRu7BAgNmF01aJ6HD21GlW12apKVmkGfq2v/VvEvQKUvP8CIk5J1JSFomm+25of6kYLvtLziGuJXRcYi3A4Tma4BSHScSdW1Zfc0+b0ZERETREJnUsG2h37tjrdT2z4fq0LiU8ICdgdAptUVtXiGlQb3EN7c9jKzhJCGlRr5MrWVvfAGbLP/bz+g0HVDI0Fsg4feocdkCTyyhNC50VOmO7ZNtSZMszvNAnEbIWFcOiFdhhcw/dbEWiycyMYNyKy5cvOf0iO6Cp2R3z3l4CndLiItUkvKtOIixIMmt/7sIF+NpRATwxwBQMhZRfcdNwZnAVbPn5tiJFggZaWvDLVVGSXQWObGNMjjpa1q9wquEQwVv+ivWiGDmHO5rAiBhAmTATG3KlDYG35HPdklFyclcqpTA2PkR4RFpQTyQnS9Lpo3BHG3tiiMlJJybnKisqmHo0oY+RXBkC9fxTnxrTO6aAdkvSm4tPAlXl0rLCRXnObFiSub4dPESIPxNqpE24BqENABY3a9euolkKv6AAHxR4qGEg/QPe+pORp0r4CACMw2jRFv4MFTYcFqMMu4GbhJ8MeEJIiK4ZKlobxPWF8CUK6EFwCpzsnuEEBbxCDnXugzuod/PG7bXrQxsChh1e1LOtSGx66aWXSIuKCyiAUEbv7Lhp5qK7Z86e0pX2GEqKAAzfGB/jiRMpIiSReSHw7IDP2jXrgWQgmCq7xD3bv38vq06oSCzV/vKXX6RKK6qq79y6h25eNATjTztOnT0DZcQnM9Wr1+iBdrCTG2LJkHA3IgTd24MarJNFIKmQ4vXKK6/QGmrIoUdtZLeRPjQw/Ed/+ENI0TVASo+MTe4XUQ+nAMYS6hB99OMtnrfO//L//L+Cb7NwoTjCz37xS+bI0QVPnJoAJxuiQ2+hhsWwVYR8S5oODPDguB4QVm9siCdkzygF+Xlo2NzahoA+hMrq0S7B/xP7WF8hiMY+pI7nwFZXVFaWCK+EQq4PjRgZJWBb7AEJjzxUc6nxwf3mhw/802k/rBQAJUVoqBaQgfRD8OACJMIDWojgEZPo9SRQ4uUXv/iids6FkAxSKDru/A3FAx9AX/7tqwcPHjh27BMiYgcHHHK4vcXHBShV0ebAwX2Yx6DIdzQjMjo/+tGPnMMTpExK4VKEU3dw2717p27BSob0g+4+hAwvAaAudWp6hkOc69dvZKbEFRTtUfboqaNHmPjR0eA92B1zi+Sli+cJNKy4lQJyNhlluosmaAAwzwklObCwJnA2nSXPqL/J/cIDbSghUwtyMFy9dhnn8A/itMiLeAyFP/zDPwxSniSDImQCAE85JRCiJkTEPb/+9W/KUbh1645/6hbXnXtjZNetXjU/NVncNWd+WMpTwu72Lq8vrlxGQJ868nR7R0tby6Mzp05KT4SgM4hMoWb8PIwBBhNMf4yOMq4d0LPv+Gfu/Gff+x21jNjQ37z0kqg8WWlp6zhwYD9RIxl5IQwzGWpVd0ksXtrZ1bVq/Vql03OyclatWeeSDimqSCGm5XK4XXv2yb5wjGHj5i2ORvzk7/9h85ZNYht4h3Qx7W3UP3gIjagzFSovz6JFfjIc6mnp6BuZMTTZQhlih5iYa71HwnZs387KvPnm6yyFNouKShx2c9sAajhob0mrsQCydScRotvXrlylCWy6y7q/+MUv0jEmA9coJwowCujMXuDa6dOSZJbil4c60QbFEErxO7BVlJXMzaRKOy5YmKfbWzeuO9obPpkiW2lyMfMqcu2cuUZz0aJCBzQFVQTIjx//lIaz0ZZAlBYRoCOc09x0b9PGza7ZtDeVkhT86YgjbBOkOIgMgb4jwUAf0S98Bw/chbiQWiyTHDo/sHhxmWtQNm7crPHde7VNjU1Ll4bjqhYjglVuaaAmjxqbMJCFUv3lBz/4AQqQB0kCrJXOLTjfeOttBnFs0pp+3vjELHmQ5AYqMmhQAV1bsQO9fcSYDRWr6Asz2RTzLQnEE3OteQXXwEAXEDOa57Qn53qAuyfGmoubY5VYk0j+JVP54BRRdLLTd/aF8OsH2JEYsL+CPZjlJ0/Mc94lMLhAwo2FO37Sv7ccUxLt1htoOR82WOgyRuhND7yK+DEL/nD8a1rS6v1GGd7bN2/0trx/0ZeVVStsGSrEbuaTr0hQJWKxijqUSS+I2NPbx/1SJfWdN99CsXXr1xgXRmYgviybY0OLiYcpfeeUOAOXm+M4RxxS6CSm18FGQcFbWEzMJBKAmfWITBYiwIvBQVLTmJboAxI9kE864i1a7LmhIeWoD5nRprW1xYLn7NnTPBs5RVbIhIqa8EQtaUiO/QFhO+LNBfGcGICB32NqJ29oaxT2hIgaAluhoCXTSk+19JOpDpH1/Ed/9EcMS7TYADZ8AQYejlFYPiXaSFEzN86COdZtru0sKyiTlokgaOjcNNIRM/qOxHSQ/dQhsQwSHlvRWfHyM+BFJc1PhsB6JWa42qzQSOxqxdTEZH0qgCUfz4ksoCIFgTFlunHlzNmz7AzfkivMB0JYUzgSyQzmASAdmMVHjCIw5BVFIO7cuSXRdsXK5cYyq0lcIVz2SM2Ou3Zsgy+S6sesUOJwbn6+TTNzwvlLlx+cqGOjsFi30PHuyEgoJ2WXDzy8UsSR7Cvp9oUvfunt997n18JIe1iz0hjtQ5IRx1/ct8oyk5Jbw4k1iK/jAjuAPtKIk+JF1eNFCkz4cMQv/atkJW2GVpJeZMFo0MIOTSIGRf6WPuXeQNC8aUcLecWb3dXjyBN2szNyOcRuCC61OnniFEgiQwFm3PeQZOoZs5oePSIYbK89Ioteo3COCSos/JXeJv66Zt16ZHdEisSuW7sBdjbfSMX3vvc9yjU3N2ud2SKHMjav4aB1oHLyMgi0BKHpI/22PeFMkQGTo2nZxh0UkE62Xmx6nVBNVYzD/TBpqVNOihYVh+O27773NiLQOLbi+uVLLJgFq6UpUbekNxEIcFhUxOI+dhgnrf3QEDsgqBk6oz8/+XbnPaW65e7OS01yqKOvP2xHWmIg7AcffJSZliEF6PzFC4MDI4uLS7mkg8NTxMk+n+1HC05UEuYnRcxRlEtJp/0TJSE4MiKnJWS6fvCBbKjDTGtzswq/IYVPWJp2QEROZnJySkXFEoHUUBlhLCTp2fHABYtYmyo+ekYfK9EzZ85J53N6WxVaVsKRBnkW1v+8GgYzmP1YFSyjIyCRY5mxMhIM3xEWueg+2MgtIUEQzDI5ihp4hWxrTFlQSRsCw4BwdVgGTCdyCCtcCH7Giv9maiA/eOoJfZGSrX+yARKeHrkFPN2n5gBjGOFrniL/5kpKRComRseIOl54CBKzHpupvcQKcWHiJ07H/BJC6ORk58UchqwTJ09aRkqsovhmM9/t6WmzdHkV4P/Df/gPJE22LfHg4RCzgcF+Q4OTk0MSfNEb+eE5+GJ0iLMbzObli1e0FKsFsIdgNmvTOJCgjImesfKEboIE5Ko4yiP4zne/pSVDhG6HDh1AASF2tEIH8BQVFXtXcq9CWMwI7hBsHZ45ezoSYJplOW0nHAuESGgW70xGIcgdjdAecbS0UNQ/lA2tQ10REtAiPhQ8MfHt3LtXQZXSsgr7SHxLXGNYwPCVL734T//0T0JjHpcUFS4pL4X7Fz//vAKQwOYPg581wxF8Rxn7ZLpl/BlqoOKywD0ZS8Ibo4KDGE5OPuBVOwlgmKqqBYcOHTIPIpzVLeMIylOnPtu+cwcZAoFepBfDUO4R0eFFIXdFaUgsgTMvCv9MKtaXijOeP295lL5nzy7eG7QZF9bZuHNz2cDyT/2EFe39B5mpGZL+5UraNXPpyTNHn7VzhzE8Ax/AuLEmedU6aQDuHJC1SZGYres3b1AbGoiXMI8Ug0aho++G8Fc0KFuJxpZWAeD/IcoN2AB3Mo2FRgEJ5lVWLvov/+W/SJNleh4+uN/X30u1QKhoCRbSQGZIPIwyWLOyLDBlFom7gJmgyNrqVQ/qa7p7w5El28EFi+ILiktsZM4mpixfva6zs8O2Fe198skn3EH18EETQ2AprGcjGggjIzG1GDWQspukh033sGr5CmaFI2RXBL88ITRwIfRWfpwS+5LQUfpqybKwLJb1/smx4/KmyEQw2RmZSGH2NY866EmpxHKZM6E6EQFV/CwDTPzklWKgBj0Bz5nz50yoLswykA8BshmKXASRPJEKk6h1sHHRIdBzKiwGJBVYbdN/HCE/WuKvNLOCRYXybYL1S021k2C2A7ZR4IJZbJn9R+klJszf/uY35jAKDwyiwlr5QvCwm26QXXQhS3SSLfYdGCTzyScfj9m6mYZ6G5d9bpa1D2vxBFkMKl6UZfefzdWGG5ealjQ27pbyEStifLSssheq3ApPAnNtNE1OhwA5QfLPY8dPoNtXXnwBqJBlTP2T+vAgWRY5BggOHnLiFdYTU4CkBjxtt/UPcl8IT193D31hMSkhRwGpMRriphDzLtO8ddv2nu4u0o6SBN4kzberqFzmkC6nPz3ULHrs1dffiI9L6B8YdDYuEgNmxbwooyEpOQRoERZUOfk5+IgdCg64mHm+W0ViRtBf0CIIePBRY4KEpOEVedixJB/dRp6rODowcNCmv4csFC6L1pGluViBUZ144icOK7EEhq68ooFudY4gnvsABl6YxUpo0NnVIQGGs56SmMIjJ85KMstCkb1jaIXFLLeSUxLSptKcnfXuxPjw/YbG7AUh2l29cnVKcrK0GRQ27WXPz5QtAIqSxcGOW2ODCkM5YU56+WtcfiSuOR6K1xYL5kgbqbdu3SZ+Tz/99NIlSxWP6u0ftE7TP94pJQEvvSGR1SyAUYy+MO7wIq6eMBeqS8FRGy0ZEEOYjJkUbYLZiY+HiymKDJOBwoIiikBOojlAS8/FAgkDsrNggPGuv6hHqRGNhOsTX2zxI6wOaR9IaLR+vBgJnuF85/fTu4inXtHsxRdf9Bci5nhkRyvyAGxEYJmr11T39HbfvnNLJ3oAFeExdVFb9JEkidL8CR7Jv//3/35JZTmswQAvSscxhS8l9YreTKVoTuypqlH0YG1DvAHJuDm54dcg1bF0MqTbf+AADbKfTuYdi7JzPR3b34CylqhhQiF0RoeyaZJ2w8u8I1MFZczZemXL+Vg+aEutWAbIUhlEhjIwHNO1YszISK+trekfHCxbstzUw8JoiVxYYyw629HRZgjJNWp6cK8tb9W/buHQTIcdYM2QDmrwxQ4sixZXAGPJjU4qoAbah/cf2SjUMwRBS82d5MF9Ms88eojONEV7ZXO8iEeMPIppjK0EyVQbfRhPyJIEQuInE5xO5DCoDW3Zo6w4CmvQOzDodfpAHmQEAYmFxGtGm1tCoy0dwWZ0RgxJ+weqybYXiXQkCXDxriU0y2+HCkYQ9Qq/AfGtkkK1ELPqSIKodFaWtJmJ2eDXTg/2d0uxW76sEqm1R0n+A3nT2O6BJ7DzMDLsMu54eC7h0iHpBhhB04Y4cS5pHKL1uJqm7p4d79VrqnvDbZPhnkoM5Vz6gnRYTC9MOv6JmHwyCyroYDf7yb2mQWZtmeszvWFGsGRqb22JWCZ4t3hRqYIfALh3t1YtApfTO5H/6fFjhgYGAcBZ4kcR9E9CMJS50w+q4r5/KkxH0viyK1Yst4kBHlzQEgBoCFnUU3yMuS0rzeMUWWx8+1vfIK6YaP7SA5TtkEBBbi3m8og8ofKMPLnNycvmAMARE+GiW/+EvmWnV9CTzGASJ57B5ygjtX+ig6642uSNuJITKJMoiJANf7EAnMRj7eo18hWIB8sZKamjxmYfLKD7RE5XR448A4AbTbfT0lPdc0lWCQ+yQFZXpIjaegKA/zlxECc2wYiV5RWSr959530MdWzX5M6HNDojILQBHdw0HG3KzslGbb6iHWWcxT5BZ6TYd/CAblOSQxq5uiDozxFFQAaRxDpZ5AnjwKSQQN36J/rLfo2Ig2h450MUFSlS0JzZBHbksXhO3VDMDqEnWIaGjJvItT7Bo6gDHXGewSJZsMZ30MqPADB8neTBX2EjcNIaNAE5UrtEGSJx8XOIjDiRlwtZmzgoaXQOmJ1nsZtI17AbN/EOZVjOSEHAxlDEzO8s/wGdhaKcYt+3/6C9dxLY+PC+odAZtbFp956dnKUbV6/I33Kr17q11emp8lmmweYkCVwYRtTWD2ZFtqunb4DekWe8BjlLmHSvLkRY79U22B9PQcv0dPVDyiuXSIGQjLVzx+7f/OY3zASnbPnKKoeE0b2ptcnCi0D7QE+MTald1t/CbuumcD8Fp99kbHktZdkhVFS2M5aWmu1EvC+OT4nUO0bCa3T8USq/bL+szPnINDYy3tepUuUAIq7fsCknJ2S1+qdFueQfyTBtzU3I9MpvfytwJbQ3lzSH7kQfhPZK+AhsBiFGUOkitNHJfSV3cFrIgc4gbraipBYtra2+29Nk4GT34gpcDLpl8zbShp6khDemVPPVG1fd0lpR7ohPP500loxwhobJYzJYNMZ6/bqNftKVpbxiGufOnE9Niu/r7XI1GPA4HEPDI3yvkenZru6OhKTEt95643u/8+3GB/WKKpADPCMrlNy4RJnZxUJFQqi6j0OEPC64YKGx1Oxz7oSx+MpXv0oWcXFl1TJDy2xxNEKdCpKR47IMt6ddv7Fx06bX337PORd2R5hfxr/0UAIxOzsnDCtximTYC1SDzrmWvPyCPbt3OsfC7xGGJxw0E45Mj2bKL0FZt9QA9YggIFHDHgJDTJQN4Qu1cWUVn8Cv1EM4mv367ne/TX8IrpJtdnlVfOMWkHXWwRqaokKf6EneVWQQyrdu3lQ4YsVyZxzLHeVx2lhv5j/DoQ/xpeok23cWgWng3jHKRIXtO/XZCW6BQPv6Nas5Q7/65c/VAHnhhReMgoB1NffMPZhy57bd5Kyuzr6lVUsEd5xM8KuVEvE2cdqTiWb9uIRwgQBtlG8mJw1esFDglfAE0iUk8My4kmRee4CxWXgEZeqgJYKwnr6wyArc+gkKn/v880QUcXCqojLcpYCJrIA2uKxDJXWTEkMRm/VrQ4aiTlhnXmx6RuZnZ87SC7sBMZAaMtLmy46LTxyPG7bEDeeZxMAE3siq0wexQbOdF8dxkSg8ijIcgI1WPlBAbYbPEzxFAYRlxD00KAih6VfrPZDDTlqwDzHwomaBC5xyxjpFDkaIpLp/2VumFgDAxbsYR2A81ICSsmKRCOnBE+PaiJ+ZnbCF4QR++vwMK2PbDHkLc0E7FzeTlCJnO4xqQ0njCUdNhkLeZFJyamNTq3Ii1qsHDhysqbm3qEC5pnD+3qwmF8hKwDn7K9duFC4qVVpXIoryQ8tiFYE++ugjx1sRMEjCsiqgEh7VG9RICSKaGRbGPB4HfIk0sQQ2J0PKqYuoUtPDPwXqTKt+VWaxpyts7yI11BhDYuC57/rHSsjqDYk8wdAwVw328Z/Ue6b4ljpr1622wt+4ab0ZQku77Qw3BAUXoziuE3K4T0gYMbBZbfqVFKG2zmmQvEoNPOF4ecI8Yo3htPfQTE9Vo3kaYBBkZyIug4fu5CzMthhWCxWOzgcXlwRPKGQb3n9oQ8CqTHiV/fngg/e+851vkcaN6zbqnLhCkB7RYmKjZzJDx70LAH4MkfOTh65L5xMwJuhsaE/sI2nD7FDJ8CUpUWzPEoiSok9bc4taW1wx+b0C50YxP5IiM58nErQvX7yIMlSD0cvPXyWUIIKrc1ESy9HNG7e4mtCMRm3BKdbz2YmTttoRecPGdfcfNI6LPVUuS1q3HgH5CkYcHOon/A5mC8QoSelIsbpWymwLeag7SaNRBt24AiTH1I7g4CHA+vfX0P6yRQSeAeNPCKNwKAF5/uxZeZB2V7BPxuRqVe1jBwGFHpgspga5iCs54YKgACmiKbQJJbGMCujHQyLnO26SOgzl9DiU6Vw4xFevXqtoAVbaaRTw06Fu165d5xX9mPIkBZEoGgQFRW9wEMBEwhM8wgJsMgSZ4Yo4YG2DSyadqrhnT32WmZZOoqyiYYeDa1attDlQc/cu5bLUv3T+gixEZDRfsO7UkwCj/NYd29lDATtY0AjKxQIQWqCCf//+g11d3auqV5NiK21br/ZbiNO27VvYQ4mpsJPK6ETQ1ETYkBdRzivOkXCobJQNEyVHMUvYI2Eujo1aU73K/I7y6oe7KA2PcvMK6+saVNoBZChowgVJT3dmNCV53oJw+Ofur37zaws8ebB2A2guARPy4TkweeDIdjFOLPABGJCAX4P+FivBVrKKp46ZqvDm/1/88mePH36SvtuXwKb4+ATrYXHrPbtVRKzCTbWMJqdGO9oe1dXXDwwOOr1dVl4OVGR51NTk4bLly5FdUqB1PBEqdtuazL2qsK1NJLDGQzgSNuqAvHgBF7zAO1BpAMK01PnLllTSMoK6Y+s2FDAnfumLLwBMvAPR/K/gyvo1a+U/O1lNyKmGnm2rLCoqOLB/v+lSn0WFiyBrca6GmtOS+hHzFqwU5LXDpjfKS5Dognyz//7f/7vGXHziSguwVQ+eoAOzxv1jYYDnTLjYluqx7IMDst3d6QxOesY8b/Hf3Bp3/dpNr5MNWsOD4lkZhQCTZz/5C0EUA7Bu7Z1woPk5/jkwMEbq6IhxcQoZIxhQhmzrgb50dnSjmCgGX850jKrsJMAij1GEGvelXVFq2BFRNOHrd7S5iCAbzJk7d9n/tBAFgJu5ZW6bVmhKa3+/Y7fsGJ01GdoCMtzE5Pirr72iE/aEUyeqhctgcDymoWEGIvBi+RkxG2MUkwNA7wDgOxvuLQsSFNBtNAEhC2hV95IdMZuQvHpltUpHf/6//XPFqZwl4GCI/f/Z//In7pm2Fm2oq71z+waW9fX2XL1yzdpbxTDEkVhuCJceogCPC3gqK2ITLEy+mGX0JGhA4NzZ89HaGoGYJAT98pe/rJE5D2WRAKVskMkXV0xaVSldMChAPH78k8cPH+Zt+6fJmAnwsTSBnvMTs3Gzxz78yJ4OMwQlP6ELmMioL+juL9KQJNQnB0a/df2WTAZbHlXVK3Ny88yLK1etIzc0IVybVbWCRwVgm2hkAoOJiHOFTkswssBm61GTTPhLXYFBMcIKJxY5II7lpaVW3l7kdBICPN66bTOikCqTq4NKjJH6P4Y4fvykJfvOPTstNLUHAAhBwmxhpKU2iwAGlG1tafcTFGzECPdR/n27tkM2Kz2NGrhzrm90bC4pVTD8mS+++NOf/eTpp58kqQbi/u7dc4h06hbj4UI6ZaAC2+aeYI/tLYhgk8m4cFGB4weWJeKxbAfSbd26XSdgQ0khTFAB0gfv9XCvpsaOF6WtTpLoEopYMdbmD9RgR5YsqUQunWjZ0txm2QOR37z826996QXulkkdQQiu/uVW4YsZRUN5jajqaBcK6wfTn3z8cRx0rlzn+EhaVMfTXoDEbGTvVhYZ+YNF0MDGRzasAWYyG5oYc6aHpdOYGjfNhMuJnQhHSTWFNEBAYGArldY58qISkHwnmcRA/4yjtQqJ8itcmB6H1crKjibGzdGlldVV7vhwEN53LVH42EcfOw9AwIxralGF0uXUV69fIdhIxKqyTcjirIJkEO0bm5p5Jy988UUSsmbtKtxpb2murQuJ+yhAfrRBB73ZbYi8f+AZzkVIrDYJIRt6cI8pZaNZQQViKeD4opk5GF8Myqswaz7+5FMIXlRcMjc7Q3IsVfVvzkYNxKGGvt+9c6tqRbWKbM7Wk0zVMygjGRDtsItdWlZmVwpf0M27BkUZ9yOhFQdVQspsuDU8bAWiOYtDDrVhC1gr5g95AUl+PEcxsXVw8rFgClQ7ALRYy8iIgMcCABYe6gSQRsGaWFg8XMKAI6jhV+/qUwMvGhcRvIXa7oyw+pK4L/1GLN5N2Hn5ufPddk472rssBomNPEOFd8Wi5s1zkiWxs71vNGP0wuUrcRcurFu/Fu58hYKCQrAY3ZLAQMzrlSuXDGymz8rM6GgLqSlgsDLhEoFHtiixYRCpHqmGkbUuavCAhQNoh2AzZTTb6Q0F0AcTmbvNWzbiOyEn6shFDFxz7nUAk1viahQLSO4dNdSA32Bo/PUcZdAWU4xoWsJo1DavG5dOaUyMxSCYFKYcQ/XW0tqEj2YIZEQ0jjUa6pPIUVhWlDNn/4FmoT8e8Ym9zmbyRX7wgx+Ia4irkWc9wBrYyEXeYO2h1aytSLDZB/AWyyDogya6MjR0fLF3h5jak2QfjcEDEa+Tqxe/9CXuggCbnvmjhAqaOAs8xgQR2FgLTChDNshz7KaCxgcPI3dKWXHVx+mUZnxxW9LPP/85Uhf2GMfGhJMcPwMDrWeHEdlPNBflMQUlAXPrxo0t7rSKZZfpU/KrAMTyynCeb9fuHYTNPAzaK1cv+W75s7Ry6acnz/LSUJ74wQJsi0vDAgleKOxFY2GxcmFoEhkNAJg4bDi4iMo87UV9Ij6ri56skxeNDgu6hKGe4yO+6xZbjYs+wuS4zL4RKqt0fCTbXrl5u0bPbAXiEDzUIzkRGQ8cOOB14qQZrqEJAThz7jQIWT8k1ZjRkP5HYCIDaPrzen5BAdXzhQ0nbH7VISvtaK9IJ0cEbGCGu9xIQsK51+GPfvRn7AZRNz+6IlrAxQemf/u3f0vAOIJOUffKTey1T2u94dRx5uc+94z4gfImFs8AQAoAg5PuM6dg8HoEKvocfvIp+3sFOQUEXn0/XoHwmYOuGhNF1DAPCQVa6osnUUBBkKPPHGm8/xA70Pmv/uqv/uIv/oJ8Algj52UxwqJXz7TAFENPrV62bNulBHhXZwdxvXP3Fo2oqCjj4/pVno+9I+BpzNdUQvHG7ZtQw2jaQcA0RnNgAwaR/UVADPWTZQxBpQgJiUFl6DuoguFyll0J7OvXd+7cTahULDIu4+850U2Zl5CRNo8w0F/0wUfS65++y+SEI3OkFQA8J4GUjqNCfrCJRpAHH5D4CbLAMAvQR6aJQOqNLSVjsmv0gERoDmDYsSSA9ArF19gQbCPmOo+rciB261DaIYWFuDQNoxgUbREWFl4nLZcvX5Ng+dRTT9Ad8qM3NhNeJCrgLroXDp6FucNbaAUpi3CiJcppkmUBLKo1k/0BfW0Aj/g5ucEftUsj9QgWLU1hz9xzERZ+F0h+8YtfkAfZQVDjdhIqlo20IxfIFYf75S9/iR18Tg4bFWastAGMxiryReYagroyqBQgnVMiGgQLNhypsdhbdAd4WKkludVg0+YNyu8K/SAsvmOB7PGB2QFfIKiiDO00kH1AooLUOsEFnaiBRqPhpRmZRxODysP2Vz9UIMjPknK5lG1t3XZoSSyMgOcLputTS1IUURLiQIKCmvcWADgbQyf13/7bf/uf/sN/dAu4kE12ZhpXvLeny+S4uLiINyFn3hqbsktKZxnYEwldLA/fxuiPHjUzCFnZilaELEf8RUxoJr315ttmIzn33jEHcGLQBTnARLWsdC15cVRVWor32muvEFyqKwOYOG7fvpUv2x2uwOyzVGDxxVwrY7Uy0Zo8fXbqMyn7m2IFAcgNyhIdUQQ0kuRnDUdbROMApz1CtLY2AE4Vv5LiUrSAtr/sL7+HGjzx5OHrV65iIffIyVpl167duC59XE00eAKPCAqNE3TIexeEPpAnptQgODGx/VYCxxXQp/CNeYvXGOk8e+devYjx+vHF6+SppkbMI2T5u3YHvx2Pjgrk0Z2zZ87rn8JQDxxFvV3bt02Pj6mT+PDk8eefeaa3v4ehmYhP6B4cgaz52MxtG87lCbaP1q4+PC8l00q9vy8kEdkC06amphZ98AaceMZSp6dn4+vs3EzRouLsnIV3a+tslI7fuk3ZcMrmNUdQ8o/pyuuyMG/euQsYoazhsfEf/umf6AQ39cnNIlgQCVra1aVnNPFXrgsi09g//KPv37p25eDB/SSbybh3L2yWSanUBvsQBLJeNENbgyIa68mIEFDtrfEggokmUQ7x+vVrGaaNGzYwKOwCRWXU7O5s37U7Xr3h2GdJWTA0voJqYiRkrQFVD4iJm+A0uhGXVVVBn1bQ/MhQwlSHYfJLSTEW/QeDJ/adYnnMcXYhwSZN1iI4f1VBEP2sUJvIcXGRelvMrLlALGHLzpkvQbNqxQroA5iYEQNBPTgSIUOYsIFk7xthQ05RQkgQBxXBIJyAp+3IS9q15Ayxwn5lDvBC/w0PHxx47PCN23eMaA860KcpTMkLsuar78kii3y7BmFZ1QqVmgjzhCOM/X337tx+7KBK2M34qPJMMEl9PSoDCtBu2b7t1dfemI2LN1D/4Eicrfi5uTRlemWi5xeNjrrKJ101BtxJS01BXiaeExZSVSYnBnr7BbwIG+miI4QHAamk35AIIr4wiNDBbthRKBIS3SOB70pZ+4nwYA3zEdyjjAxk1wlngsAw8Rgh7OEvswhZeqdnDXzXEpV89Ewq6KnnoA0+YtZ8B3jUKdXY3VNS11xfYF9BvNaKN2ch4zDV2taphKRzAfkLi7q6+90Z7L6AsdFxxzqIgEqidnuVJ09NS17Eu8vNZbXd0dPa2uEqeE4YnwSWPACCxBkVJoH48uUr7FCzeRwCTI/KzuA7J2nP3l2ox3xBjTMKMDCXlVYwNYcOHqYLCIsmjOfLr4RcNXMwFxbFyA/0fUEQIh1psS9MnLmfbHDjyJU2OGgsnDKXoCpqECc+AdkDJIohlP4NrXPvam9EckX2rGE85ziKinEaSBpFIOGQ8grwsJJSG04zY2GW18knDjJ9ntNTfBRlYIiAavbCU6FlkzfWqMMIU29RxlOnzvAs0cFAMqZCoGTpUn1++sknkALS0aNHdQsRc7BRgGHZDwBDyOoEsEIrhmAnWRLlvywpbSvtP3ggkjEvwt1OHS3yxe6H3thJZoG0bNq0wdQo9M71kfCJODboGBNRw5dffplN4JbV3quBvujgvdt3JkZHrEBceMRWxM76j6vyhCxqelzpuyJUrMDiwoK8GzevufQAixmZmLJkWBjs3bMfjuA/euRZg6rkKEpKbgkMyw8jC4Dvf//7uAlyGudFRsMeqe9+RSsIysu+cvkyhmINAt68fk2i8tT42NVLl5FLt0rcsgaYKDCc4ExpWhqmoxtyISzewRG1EVbjyPDSJtT7h3/4ByeMubkaGFEnuCYbVsqcQ0QaHD9+ghX67SuvaNDV2ePYMylFeX0C2BfrFmUHhai2bNpMnsmhTlgDHwBYisRCdXPLq5YRP1pjdX3gQJBAqHEH5NcxntBHIi+SW9vpIgs8G7tYxMaOln4QAVUJ581bd2zg0ywCLKYLZpAw14yPrWxxFn6lkuTY7V3iV19bB4v2sM+fVbV8mf4pQiiHX3fPsePmlkc7dm4TKwk9ZM8XQrZ7Y5FMSGRf+K54/I1rV9TmBjx/EbXZYZXdWYJoUPLDRTG6uCkgI4vHRlEfEi6tVy6+a60or8UJ8MwGsB4aktvjlFoe8V66rNyWDrIoDuYtGDHRsENYewZ8CTECNxsQfEumxaXl8zNSoU94eBP8B9FLUYbLl69KauDnGBGDXHYWO/sUZhB7g5iO3QiiWzJAixGfWuA1dAyKHWA2NP2VskpUEEoDjUmLnwgSc4HjxBtxMNc0TValZhuO5uqQXUIxOmLFRTC8QuPkzRNLCxgNmKn+/j6dWGtZF+nKQH4lrjiLtoA0XBT7EHHQrRKxDJpT5nEV4YAZxcFufynykiXm+gden5+VbiGBem5rRmevmwTlBRCYdes2/PznP3eGm3SRagplLHACz7y8c/duEcOUpAR5iUZRvQOXaRmSis7QUAQRWTKbW3gI4aOJ4cgPOAkY04oLxMBDlgQrWQyvxGBbErkxzKNkHmXBrEy8bholLfZM3E5YWLiCJEj+NFuZE82nXvFF+g4uUBz0USSXX4Q7iBzSVZwFT88QZFEERcoM4wZsUQCeBjUHAMMYGR/W2IjuuoYOUDk/mE4RlHmcTUy21bZv356pKapXz/0+fzakPmZnZshPYUk67XR0dqDJ3Gya/kGFqr4AA20hq4AVInA58Prtd98nqH4CBqqyEkkMq5+dzEBc1g2B2AW8R1wLF3OJKo2O/CIWlv/pn/4pvS0ShY0LVcw0iLkC5db01J41oZPIhOIYb6v34P4Dlk119+tR0xMyoXNEhx5+EDJPdEtDwO0JKTQuzax/UO9WeR/uvoyRzz33jJMJehaJvnvnpjLSTuK/9eYnspNtB8hpQ0d6DgBGBG4wxFeigzFg84Vr4iC92U5My0KFfaEVbJnheI0kA3H9ypKS108/PYE0RB94XHbOhw8RVAYmpjDzQEvgDIrEhoMv4C1h21tbXbliJ+4f/u7HbnCcChdnFPK+x6Y78+alP7h64wtPPj0wFPb0169d5aop1EMWLCcK1Nu61DkhiZtGBxiwAxnj4yFuGyAcwUyId4OT9kyw6Vm4i2ayFNowDYjsO+F2bXfkgGqvMf6iOaUiXk4EogDC2reHIPlAf8oGAPu/MrIYEaaTuCAIdSKahAmCxFGfj8IVJLkG0qFBWQTGVA+uB7KVhrkm40sXzkHQHMwF1y3DxBrqxHAY53leQSFIJJEjr60DSVnoGTc7S40fP/QY1DgH+qf8KGxQlovOMAeojcVgQ3xDkGAN9I+VhoaUMt52S+ibNlx/XoLpPD01o7SsBI664v6SW9YWMOhIgSWZyNSUP7N27XqjGLatI/hY6KC96JFMIV9cRps7lT8zE3KjAQ8kwxkdtOAEg7A3OuOXf+ICLxDRHNh40OisZzitQapR21RkaEYcbCRTlNrpOmMhL6RM7a5mPHvh/IqqlZwkQqW3t956w4jkoa+n6+rlK2j+2KEDpMtFhrznlo5um4ogFPsmJCDPylogDG6ZaiAUAxXWG50oJSenECqpAn7y8ZP+fbyOidrAC1PIDIHXkswTUSeK/FMbCVEQ8V23jY7rqPW+dq1mGEEYACncjwJ4h1ma6d9b/gkRbXRrUIqpsV+1GR+f6ulTr3BGA3Zc9YIBNwOND9nEUDfG67D2Qc/oxelpew7hsrN5KWGHh8fPsStcGI6l3rh+NTdvgbK8qrOIckg4CicCb9+1SnezgZxvtoV+2fCEJqkgqLjgIcpTauC6vZV5+cXPf46zsNAzSwp+BOEoEGa2BZWsmogQFQAYv+fP/uzPnj7yJKlmOfVJPLQhz+YDsyN6akmdUUlXovViUayfHlASCuZ4HWKQlgilGf1ivgBJhnkSwGCvIjvA1UBDUhdcq5s39eA74fdhfskPwnLLvM7/NjoVZp2oXjQ9w9SL2I34rA3NNROPT4+9885bLAkptf6BZvTid7/zzzAFtBJ5wWZtj90MEFL7+E5bwcauAon8oxJ6+qsxDwZesIYmLPTMsBAPJgsw0GfbwYanXvz6179uRMR0ZxyoHAh5GCvNhJ7gRDS36gDboGjLgUNed0EgHZg5TLfv3iXz6CPe5so7bhyHRoDm6pVLJI1VoHSmXjaN6jk6lZqWvrykFCSojdT6Z/ABicUoA3gzHVnlte7aszcUxukMe5hgRlv4fvWrX8UvAMMaCsiOqmDTD/TpxfyssHNoSUAksB6P/Iqb9bU1EZugXLQoFDGDPguwbt0mlTJ/9atfEULRKNACG6YMCGEw84oXsv8I6zoIELqfC1/0iX06IRLKN2OTMv9MIoz07+iFd6W5gyfoz8yMqY30mkGINNYADGssXQ4d2E/aMcVDYmZhQHj0z8fF63s1d43ISAIVT53YmZmdZBLl5jGYnOCu7s74OUliok6LiSIuGFHPOO51akuc4M5PIIc/+8U/yR4RhtAnBEGi2scTTz6pc94q021iwj5he8QEs5jG6EjwCmgHIPEU2WGnN1+MiIMo4J/UGfWgDwBY0BpRSxmZnpCWz33u+bCLmJiItsDm8Fy6eMU5tG07dnpRvTVagBTg1NhAYMZiAoNfADMicmEoj03Ek0doXYdcOjx37gL+Cp9RfDQ0dGdnOBZPOEWgDh54zIqFhIi1x3Qn2HMChizOIeCp8DxHi5WjXMhLumTcidrCBfvIIDQj40mWEAQjAEPe2BZDaA9OUk2APQePngkPYUZSfzVDOtxBamBQIskLjx48dKsMNL3C42epLJK1JP+Ehy/OAwE58tbXP4C46IDvsNZz9JbZCr7IBWwyLxxgXKMjBQI6RQM2SEEZJQFgIKPTVjtIGNTX3224xx476KfXX3vzO9/6Z7zh21bsTU1Xr143BDuGAjwxPXx64iS74XUR97qGBiEy95xChJUjZnQEYJiIp1BGNJBQTJDozbh0lvKa1lkS3GQzaRyKASMCGIKwplzojIzGSpgNG7ncDHzUhjUwKd+5eevK5WuYpewEegqM6tmImolOgtN2LYIYEWz2yW/euo4U6DAyFw434h1tFSwL/SfE0Q4U8ITM4KnXaTEISQVSQx+7tUS9mbn42vsP83NznB9wsFOIJC0tdaCvu6X5UWlRAdhscJ9zLqG3x8KDA2TBCSPqA304Om8GSDwiDPLGDQEqwoDpdvksMzAl6eBjh6mu38qXVLivBQNw2juqb+AKKvxB7I7AP/iDP0AOgQp3wkuQVWwLrS1EQK9Hz48ceQo57tfXe97Tw92Pb2ps5Fi7i8HNvmL86MteO5ry6GEfElhCoQv4OM0uk0dQf11jqRxEcWmx0IWo9rXrVw23d+9upGTCLMjEb1DZiAq6H37sIDb2j47+/9dMFix0bthJx2C9BwYw3ohcjBWxUC4OlRYVf/6558Ua9UBAqSIa+SAZJukTeHwjFPjoo2NkglzCi3xwsv0T7fjWZgLdMmGnT51lsLZu3ayH1157w1uxWN3s3ZpaSxENjh59emZilFDeuntveVX1S6+9fvrs+dKlVVZE7gAuXlTAPbNAbG6NVRscDb4jmEHFr2DQH3vsEKFEIq6tK4bpYVPzI0J/77NzznbMzwpRc7ARlDG3WWWH8LZPa1sH1Hr6O3fv3eNylKVLKvjlS8rLGCztW1uanL6wMvOF88Tacru5aelp8ySTkWBFHgDMNpEhY4lPQETKiHeJLHODXziOxchF1pnFxtipawAYVzMyrQeTDeqhM90zJfD0YlNC0Mxlymk9apYL67o+94DodroIdMUWWVjjWiJpL07Uu01QhM88UVFZIX+LeBBxW8BEVrf4wjRjCgqQMYizhgC4/6B++YplbR2tPGPpK9l5+Xv2H7DDdu26axeXmbHcQu6sm7vslEMWS8PT/v6Bq1evVK1cyWVFeWUrAOMayy1bttECE4LOzRy+Z8YCCZEkQBNGiMMa8l+B5AMk8KCMNBK808bNYihj7RqOFbJ9vQNK3Ap2uM+IUB1+4kkpfU0t4Yik0zlOaCG1gXRLnBA5nKtNSlJ720xglW/b1D0bslpdCtbU2uYsTVKCBMop95NOTc2FCTgcyncGwEUdCSRHV1Qdy3AEpvFh6zCsphxmoMsMJS4jGr5TAQBDjaIZkROAa9owUsDQDHnBb2iw0S99cu98MahX6L25De4OEUbDeQXdjEUk9KwZeDw0KELp2bg+HiJROOybkqoEkJWHY3l4nZGR6rbBwNPYiTeBUtS2s89uu4C4rTPU75e7ZBvEYbv+vgEnNJZWlkFooD8cTVb6U5aCe/HOnz2/c+du6BjUTSMNbQ1WAs1trVB2Jw7e2dxwF6xE2UWLRPqz33vvHRZPKiPg7SqIhqoxo/I878QqAjUoBQoIS4nngUEEgZyDzfQJKbjrk8ZZZlABWFMZwkN0GWvN0EpQ2Ysq6qDendv3yIYJyROz6VtvvqOZrh41NkNCxNRMYCykppKeUD18IfzAQ21IeWLC8Bf92SVfohnOP/GUFBnFc3OJIdiuiOMEgxNjoBMnTqCLVHK2yB5I5ZKlsqXhOD1VI+pPbMRB2TzLH9//5m9+jDirVoRkFSTgXRnFiLAmnxa0UOYD+ScVAB6BMfS1K6FcnRnOjbA02naiog7ySBguEEKKYQ92o61dirz9UnSorFxiA0euP2cpGIH79Q70W9ql04u8Ai0NbSCDqt7rTL9tasVw87IXYAGUnSC6dvUqILkpVy5dFn8mh5b3g32DwJie6bxzt4ZUv/DCC6Kl6Cn/m6o6NSSDzokTBEQfHkZmxvy3336XCSWfMMJoNNS/XwGPIwhoFD66ZSRRQRzK7qZhvqOzZ8rsOLrnSV9XJx2Aoz6luPhJpSMZtqzZwoICNBRhVXEOhbHbggpJWUUPo0gN9UFMMxrATOQAJmN8EVM27sjLbYq5xRcuXNTVsY8/VZvSiSaSZmh9agZZ8UWsP/3ZKZC709pMx3jolhUyEDWkjLK0SWxyUoLLk/11LOfSg4eO/bCHRndfR0VZOUtu0cu/sxl44fw53sy2zVvEqAS/dbJs2XLgsfkwJbf0TpEf4+7Zs4+z+9tXXgdGT0ensdhecxeFdYDQ2TNWPT4hBAcFRFAvJwjVPMeSVaOS/2r1qMP0tHQklT8mZmQzx3kGIocjyM5+KpASTjjYE06aRySYO1ozLznZcsVd5pZqkHWYBE+YREYmhlRfWUXFug3rMfrM2XMdneE8njsHB4eG2bnsnNzqVavvvvoqiq1eszYuPmFR7KJ6jpQNQ6IFCwRHMeygg4Qf/AiOFI8eNYqdY/7E5Kgie1KmXXVKZ2kWvWN/eDUpjmkqS1gTjtVKqVB8XVk8W7POygvMM32EVud4p0+a7gmBRyg0pM4Ez+FMijDUP0rs4YtTSVmJmzZsLC8tYyIID3PNGUW0eckpUxOT/lJJVkgOcTiLMjBgwawUFUdrXlJyWclit4KqEOgqAKUR+uQ9Llq8ZePGyrWrTn70PqKZZ01wdJmIki77MDSCfeMUsW/01MrETrWzGUYBPHzFYEkO2BDWlousRsKs3hujpCsxcgERLe2B46MvEPw3/+bfOAjCf0VSuqYTVgKLfUGokG/S0W4fmupRFoiLiIPBOtAagKQxJrHJK02MgPxjjQkGrYxILA0nAEps/vzP/5x46JmxMt1Y/hndiI7XK50jiZ9GY6iAr+odXC9YuMTXniEO8tF5P+vWrHZ+jwy4O7Wn197Fml27dhgCgqtXrbSQ1rOsgaH+CcIJ4PGJ0Xkp6lw767rAoRpEIzzwhRSxwWXNIOU7OrM2pE7nvALcsZMvIbyhru5SKA+ToEI6crGTNOW5zz1j5d/a0myWUQMbAHkLCyjL1etM4NXKJUPU3xxH+MkD+w94vPM6CpMuHmAStE354GChQIAQ0cwhGQZYWtv+hpUdZ/y2XmkKzmOTkag0sRBbvXu7hYwCiFmxACAfAqVauisE71vamjWT52lC5fqw+Cir54ULFYoZgjYnj9eFXvZfYF65fNmFC+dszfPVVqxawR9gDYmUIuh1dbVyqRxFamtplYnI3bGzXFFQxhkCJylBNZwTUba4IWHYBn8wQM1PJlc4qy1Il9ARrSUKEBrb/WQFbwicJEXaJfCpQ42RQsYF9SMlsCDHFMBE78t7734AF4jowRcNUMkEM6qszOjEN3//e4M9nXX37imRJsuBU+Mm9r1790+4uFwC0/S4xeialVVE8/7DFn6/ZBVAQpMiOQNglPv3QzxD2gmoBCbxEY/sdFq1hwO7ObnMhKMJRM02EPg1RsyXfv1b1kT1MSZv0+atToYtzAtLKcfp0PZhQ/2GzVuktaF2eWmJZDuH6pIVelcbkYOSkTmqRn6oKTaBROZ4pDPPKSikPa7RIjgiqX9CHKHIsamaYKndbt6KgR3yx4yFuUSZUUAZGuWJt4KOjU+49ZYeaM/jK15URBPo1QOZXXNzMY9HYZtMhXXd4Ijyd2tqyBLi01hSR9Ioufw/2Z+G+7u/+zugigTgFFDJgIcUAKjHT3xmN1AZft6h0i48xcSceQp7SwGamgw5S4q74ZcDncPDY86JqsQa7ZiDnOSgNpHAIPx1EkP78YlhMy5Sw53pMQT6kF7lrRgdU6Of6CEdS0pe6GyJHaGPPnyvbEmlUfQGNqyECK8ITcT8xE7QgSxxKbzrIQju3qsLlxarqNDXk5OZZYI02QCDj2LE9Rs3yXO4cb355q3bzJOp2BkvVxLyR2ecB5hzmeZMVz9qm19DYMMHqCjvI9JDqkkrwYYakIzoiZ98wVYSyBR44jt98SJooaYT8HjFrzjiu5ZIBFnJJdhnrEgwcIEu0HT/9CsTxqQgIItBKnTLS8Agw/nJX725KtKIsi/GxyfsPRBj7xoIsmQGDDgODO8Cw+uzc3a6evkfcgBstarD7XLQ4ZHRtvbu7AUZ2fOz8vPC1W8tLR2OSTkkQ2yggPgoLDJgXGNiXEN92MEQVsQUR4Q4HOoHFEqm7AjneWQAEgOicuXixWg2WlW9BspIx8Js374TVIhw/fpVsid6ZxRyGMknIWfZkYt2QJ8eAcAHwfWsB0hFkuALtmoDO1RCSSpMrXxB/5/+9KdIwUxFDNIPknoFccx2rCJE0MRkLwHJoODxK8MCWSKHkkYxNeoK8fkK2CTww0qz+wY1bTPpYWGUmtLW2p4aO7WJPvQoL2+h+UO+nM10Q4BZJ9/7nd9jVPHXWNRBnzBCHMCjgAlG3A7XaATcwYwgyjysip1dcYhSdAkKXb09JjorPVKNSkqCyh19bN8B3husL148D2W2y9ymn/x8V6DYhwyaRbR88Ze0QA2QzAJyseTWilwZPOWLg9bEBEgHmYRscYRFNRCaXDh3TgolGVi2tOTWnduki03jUbV1dGiDQQRbXTIcUfPDTbGXr11lfNhPeR1oi1zAgKPv+kdAE4q3ovWbMCTAxLl7+4awzE4YmyaOIBiP8sjy7LNHRUysZVBsedVSjMDEsGnc0RNbirQYF7/0zNFnQ3gqjKfOI1NM6iKqEks8IgOoAWWC5wyyofFLP1YI7IljtSSB0SDhhBC7fTcuynjRQXNtHjY9BI8XfbzFBIETSVEYmj6UjiHk51kkQBbWTgkr6srcffbZiepVKwcGnRvudmw0BD/HxwHvLcJATXwkzOiBwIDWdyEtg+pkNieYMqHD+MRkgX79Hzn6LDdO0AQx3TWuIN66VdWyjyzk5MQW5OagJ9El8MQVVX2BBZCIHw+PApIHQ0ME99HBcGwsjMib5IILsfvXESSyciSZF453vG0axG9pb+uAO2rok2B7kfpoHLED/XVL9YKOd7TZ0id7lAi0kuU05imBisCjMMcjxppRewWuCRGGQENsooaAkSknOmAUkkbfIaJzkIOf1lvUed7a9Mg9D8wLSfAX4qYzTCRgxNXsj6cAIAY6tHfR1d6rE6TWob+ERIfYgQKY7m9khyUy6M0GuBPwoPUBOaYAhlHCd/iC0ykgT8QCcJbAFxcX1cdOs2ABQhFIH3wU8QEtrSeWZnks1h6otMyKgvSK38f4noOehAFTPvnkGGowGuDUAMySnZSEYlv0BinEefXV1wVPnzp6hBHgEYFfn3QHOmZ8AbDLVy72dHZICaO2+AUYvUVGye4lBPWPL7HshOCPGejOrXDMQ0vpgoyJhTfbHhlJkJMZrIE4aIG6dfNG5zKJCv5iOqjYOqQmsdLrPUcrD/VMzhEQYP4iDhh4cRG/oumespD2iTjlK8NpOsbNEFaPop/cEkNrRuok3dA+feIUMTAE8oIEffzTTr46SFL8mTLVJhYXl8jG5/gRs5ZHjcZFWyrAiQJt06NmpSyUKGNYXP2E78iL0SpkYrTNT0RwEzB6khOmgB8lAJTk7CBBFw8DB2/7nbff85tQpURJcqZfJ11Intw7DQxGyj1EWcPzTmCFhTHnfgT+CxaQwLDPFfEV3Ap6MKDJrrhOCUFH9tpcS/TlWqA70mChniO7pgfhNzuD4riFBUxw2EkReyMHiMJh+uTDj1RDdf/Z7MzU7h078UOSz47de4xK8VAcwtUrIiUM92hQBqQ3uyB336I+/JbPYMEnmdsMpCa0/lta05GbpY5IAzbwmIHULV6zxvxVDTb94JAokWCW3BLplRTA9MPVxjztkds0Uybtfnxi5749AyOjPSaY5VUu6itdUqmyxbPPPS+7+VFL89Fnn1HH8PRnnwoDGzc7dyF5IiU6kXKDtuJehBhriQLZJWGsYajRJlV6fpaYKMXw05LUckFI8RtCbxMIGJK4oGMB/fWvf8NCU2TLJEcnW5sf9qSl2xuJm5tpevggGaEyMh4+eOCMaXbWfBeEiVRxK2/eq6tevVLmIo6wkiBBLh9kRHzZnP6CCB1ckQhfUkEBCABj6pg8lQC24Q7u34uGvjMKkY+CffrEHSS1Cbtl2w7pT/Dq6eqCe5o0lVggmQ21otOzg5vllUuUH+XZEDNig32MlLFMsdiH79QDbFLXzE/2Bz1hoN3/Ot0/VSFclDFfMQpJll09vS6YWVhQqJBnshVaSFq1m/FgYVKejQfSYmvvG9/4Rm29xXEZlEH161+/9PTTT3MgTHX2KFqbgrlXmEIxItsFSi7wIcgt2kKKDFhf0VvcJzHCM8FApIWieLqykiwoCrVEfFeZCy5kSW1oFauAzRKJCNpFMeUjeHFpWJ173RqbFUaX6bEJtyqK/RNvAHB2bWLwycwTZeWlihUkpCQ3NDVjj6KuVlPYoX+BLgsAoW5yYimFMjRhfDTkSokJOWNANyka4P3kO8UhfgBA0oiJftLAlOAJpbBkRRnc0YO/2sPXX6D6FXdIqZagAie51aeP55irJaiIkAbe9dBHb7rykyfgsSviVyXPEqZmLDH8Ojo+JsiHGjTfKATPW3Yfpmf0NuY0lkyv8YlJJZBzeTnpGYlzcZkZC4aHhpsetKgqZqVFZbq6+lavrnalUX9/O9hu37ol0q83mIIH2X2RKWQ5UVpeMTUzK4bqPo2ElctFA8yXVEzmANNJMMR3LVGQyz6S9CQZ4LOzREWB7fzIOBBaGDHr5AERvM6nJPZmF2aX10gAiAe20gsVSNhAM/UXvvACSPTG0ZHQ9c1vfpuEmGidVhT+xDQzMamOdAdJNUZSQ6AMKgXVbm3FOyPSOF8AIzTOXaAvMKWqiA94BPQi/4nQamAUXwBs3Sj8z0CqW6Jz+kIjLNOkQTuQt3nTVsdwdSKTzYywtDLFJGfDFuO4I8yO4aBDyJHXLE4koMxg+qeZIkwf6jzGKpjpPDLOTneUu7w8XLR3EWVAAotIr/k4QZCS4u3IEQwE9DFV6w0ZPWENQOtouLUBI8Df7ehsE+69cvWSeRp21hsKzYWbDRISHjQ8rKupR2GS01DbkJed9/RTR+WvSrmxFUU12tvaqRJCcbK1j6KAa913sGbNzFyCuwLEVvbvP1CxuJinAk4abaKEI5KaU9ATwTHFTyIgEcBseEN9oxI02rCKIEd5jACbYjV/9+P/Zm4mdffu3I2JwaB/6sqUqo0VFG1CRnMNqUNqQGI0TYQdZTSEESVBifpznwDD2uhfyXlutOgm2LxlXrfJjAtOuYjD4jIwWCfvcteMztwZ7tKFcDST4+IJZsHCYliHb7wu5h3GhZp/ispZ5TJx2MQC370nBJNG3sgPdTAJxs/Iq8xnIDxsa2sdHQ22BVQYh+lj4wxa1sL8wGL5P8QjOWG2rr6mvbOtpCwkpI1PTuhT+F+KJlYatLy8TIjUNCEYJzacODedk6MiZz+rYyIqLHSrzBumnvR0W5G9mCDiDnE72sjl0mKy4Z9Z8VkqFVFhc5BrBywSbHsyBR989CEpsuidmnUt4METJz7TGPe9i+xIRGgxmp7yROGrMYMmz4RkYo1xR0eGxblr7tWhqq1WfIGUn8T7eWYQYahtGKoYoavEpBzVcqmq8IE2M9NzX/ny13784x97SPipj51hDKJ0YPMrIXxQX2eLhvCQJWxiN3zQk8dFDCBCHz3xFo6g+aKFwUMwhKkfkTnl5DmSJb9isb8YgUdwZO6E2JBIzxCPrcSCMaGb3oUp4xNZRaICKmGsBbkLuntCrXAfIBnIEGAwHJGjPkQIH2FEI+7evV2yqEj4RQO9Oe2gW6CiEjt27doVynjosf3av/feO/0DvdAcHR6n1GJOmplnda5DoLLPFJB2WOSgsOe19fVOoi4pL5F/wHX2LkEih2EPORw5y8aj3bv3EvW+3n4Jsa0tbQWFC9leAolZzKAheFzwJe2IT229QjcJAKwx15WTWirwn1mWwdHCaNIuTryosHDrth0E4+ad29J7eKSQJSSIAEJkpEF00IYV6+ryU6QTraI+TvE5o9LaFg8j89TcXLe5nlZiB3U2KEJRf8giLzQxxbsa69wHmtZM3F1hCE5FZ3sQTntEw7ENJWx1/hYFLNs4CMJVNsNIR5gU0kJ2nOQ0SoprRiFCtPWz0440hPlXG7aCeKjXO+Emssdid2SiC+vAeEHvJz/9f7lBjrURjujJq7HtMN0ZeOXyKgwm6DC3sxPNN5aMwDCYUS3ROIWOBGRkpaKyIem2I3T+WosYCNWMEtl3R349t7oFjOcudcNdwnfm3IXHH39Sb/pEHTnQLNEnn3ws+WHLpo3Xrl/5F//y/7jf1Kw3as56sqoI5J8YY47Rp/x6f+0bknsEJYX/8NOfoLsD/b6btvHbhAoSM6ilNqOjE3RBVu3lwOiZMwFrYHhIjRkUfDLtAUl0mS6ZqPTj12HVaOV4TEzW37m9pnr5zNiIfCuNaxvuZ2blPnr4UGiNun747rs3b1zZu3v7ssrKsfEpkAOYREpZjoXllhEICu+DWxZRbBQnSskUiZV0mM904dLF8bGRzPS01tamxSWF7e1dVgKEe/fefQPubUlycfRQT1+//evJ8dH1a9f5yZ3pCpIulFCWkyMMTHQYlLu37wBPPFUsas+u3QJmcQlzRIcFgTi+m6JkWGGK/QQkIjfkAUkFUeiVJ8wnurW3hqxoXAYwlWCDLl48j+8SfsiG1bBXuEcswujYhGh5Z3u7PiGO+AQJzSmhFzEiklcXNPr/yrWrz3/u2YhHFIZ95EXpnA7rln2nNvSHlOIC9Xaj1qq1qyAEGK6kFAsh43Wr12Eld0oMCBiFvo+Py6UxFleeP6dIesFCy+4xime5zmL6QtKMOBvnUIStsFKx+ZR5idWrluvcoCjDqLE1VsuwM5zvYMBEYynvCBcQlgrST0/nZIXoFCzQGcrkxNCUCDFtZ4OfrPqLdC772LB5U35hAWHTsrstJEzv3L7NWKYWYsYPC6uO2Xznx06cOJlbUGhfvqbhfqx66jiGyl1XdcppV8sx6T9yihDW24HJnGzh/Nl4f40FBR+mk8oQeKoHJH+JoodYiS/z40PSMHHCaz146KeYFzJnAmNTGurrPfQWwgJMV4jmu7eQ0Yh+8kFPvXnRE0P7EnXI7U5NcAdAOI1gT48hJ12WXvrkX4IH6H5CDW95iMKTkyFfyGkHKwJnD50V5it0DQ8JyJcUOWCXKKTa77/eLmseSgpg8ABVD0YPulYQnE4FYRiKmrp6rCnMCMJjqkCZyYkRrI98bq+wPLxhv6pKgV9AMksxmxowBbAYH3XxWbrYku9YDzVDeIvG6R/l0ZZ4GJHBERhTeRYwOAUHQqIfggFBH2/pyhcNRIipmBehrEMoYJb2qApg3jM/lctize+5TVrfmSOaqLHJEsHNZ1hGl8WhTdUAi8J1Glh5Ek7Escmw7+A+N0/ok71FaubF//BVD41xFuOE9aVLV5hKwUtMXLu6GhktABBWezhSYVIKTd4Dv1O3qGQUNjw3O0edCni1tbbuPygZb8b9X5BCFmoO5rzcXHAihf6dKnEA4Pa927qFNduiAUFii2iHDHhFeBgusLHA/urf6Z2SUvcqlANGD3a7kU6ob9++fSgJWjyKvly7dsMrPA9xX9u1JmCOshMNhkYZE60gJZAigvMJdEjd0LOl6WFzkwLNYTfb5I1ZDBe/ECO86DlQmWjo6wqJKsqXxazNqA7hCxfdhhVCYgLKoBUX4b133/ZEM70ljE0RBp2b+FlmnOUocx2ATeAJFbA9B7AnhKo65PJJ/AsJftEXnRBUT4IDkThsFDf3EWa5Wxi9Y8c2cwqyEJjgnUjWHx+BCGuMj8oiwxGRicrUVKha6ARFhBrq4SYqkT3iRLWdh2581ECZOjrbk5KLBGUZvaG+cPLBr8CQ6AsGIqHD6upQwnjtOvXmRwzkgxRocuv6ZauhrOz5jkUSQgS8V1sLU3wIyhKfYNXQdL/RoV4OTUVZ8YnjH4sBmkpAyNlgXvSPFP56Cz3hwkckpfx1OSdcDoIBzaD4E+FkPD4SJKObLxxAJ+rJqeEurWgRu3L5SrX1zJ6eYCIysuHYwdXGIFYIjoaAC/8JX+pqazyEDql2apM18JDAEEVsojLiMkTXuE7EgvD0mc/27zuozzAdxATsd3/3d/2TpFET/NUVgtNiAgw2fqoyuAyR0cEciRC59Sv9hZR3o7+sATpfrb2BwsSDnGATWSJIqARZ/SOvxoRNh9h0+fJV06KgneemDCv/mGERaA6ZKvo3t/rJtMh/+8LnX3QD9Acfh0wHxEFe9BFccPiHSuoWF4wIawRBDSrPhruCjTbZb6cOET2ZOODpnATiRX1DjcWV+2utGdA2fi6RmKl2R37MKQSJfuEXstgXkuRpIKxHOim4jpgnxocZWdSGJ8Ci+qmkInikXBcASDzDKfVeWRVIge3Ordu2m9gBbNIGa3RlCGiCCjHpEfL6a8S5manwoqTqkKISfFRk8R2bSAuCGwhSVN4XGLmp1mWj7N7hg4eM/tZbeHryT374Q+JaVxfO/CCv4bBJY0FP2sHREqRHRgqIxeAne5hLBmi3V4CEU2jur7Fq791xYFrSxI1b1x0cN386ShFM38SERNMb168DD2tUYvYd+5BObyHneMECwkM27LGDnA03EbS2d1INzVhUzchJkquFdu3dV7Q4RE14B22dHaSZOtlJOvbpp+rgjE9OCljymdasX0O25O1hc8P9cC8GHmPh1MS47kxX6LJM2lGsMAIBWrZ0CQ5xjE9/dlIKJmZcuXwRVnboau7dUaBDCWV3shq3JSa1KGXvHNArV610wFk/f/Zn/4vJ3jI9mK2RoauX7104f/YLX3je/Vm//tU/iSt++ukxnLtx66b8NkyypsFXdyJSA/xYXFxs/iMozIqfVLpFd88pAzoylJwiKqpENBMpiqyakKtGUYeUeG5RpOVcwhy1lPYHO2QxHInUQPUJiyUeLcVDBG3u3r2XkDKvpHJZd39fQXGRy0ovnT21Yd1aPG1uaUvs7t+2fefW7Ttb21u2btn2ja9/2V0BqER5wgSQuxDDkIv44qhF8NKllShDdUmPRKCQBTQ9SVLHpuMTZkI0XVWpuNmZirLFVocExevY8dobbz515BlfZufiV69dZ/+LoCyYn3n3dndHWmpLU+PypUsS4mZTklNck/7cM0dd000IkNfhentMoQ5NqoipXeVwPJ/B1VVkU2xdoQwi04pI+aFMiG0D263GRyDhHYG21oICRtB8BGcaAK8l4TZT2I1paxPdHMUyddmJ8qcnjoepYu1aykbMGN9iVdszM9dt2OC5NF/KoE/q+tprr1FjmIKERomT6ZbEM5peF1P/5PinCnhTM/uLQV2VusvIcuLAokh0c3h0xG27fdJzF+bLm3LvtJjazp27LXAcrZO1KY7uLWdxyJ5aVcatqHTCj63vGR4ZYJeDZk4npKSEJRBTRWM5W/ZMyD8awp35oFeeA9LuntsuBcDiE8IciZsilKhkbvZPdBPC5DiWCPyPT5A0IQS3zHiLGPinrsqKSginiYfqli4uRnxxrPvh0u9JBayEtiwAIN7Y4ox4yM7HNTaCQ+yYrMNJWM8QW0mJeIENU3A2PcMiZ14gNRbEAv8E2GxkftLGExDCDrQQmekPPrcFALIEXQhp/LPIi9HEQDOvQNzoniAXqLT30IdM6sTHd0MQA820+f94+g9ou6/rMPh8vfde8QpeQ+8gAKKQAKtISpZkFUu2JFu2U53kGydZWWsmk1n+vln+Mlnj5EuzZcd2JMsqVqEoir2TIHoHHvB67733Mr9zb8aXWJf33Xv+5+yz29lnn733ia4H2MP3Mn6p7LjEBMa51X9mZhyEVlC6gvPGZxy4vrTuLnFPOZOMi89SI0jhc1JrI4uxLWMrIdx0Wdy8gNfS4mBzV1crfr9DdcLeHkQUMbK1sraO04ihWedl51XV1Lz//ofuTlpaDAE5PHwmlZObT1cUFWZFjlzMIg4qoNdKYID1tTH7T5LBitq7d1/ARiQw4OD+pta2R/BjCceKaIQZbOCRw+N0Gg7hyqIedTI3G0qdsNWhTktufpjBhDz9zz33GUeCtqP2G0YU38XRS/xRJIpMKwSJgxNopPphxvd43rxA4ktT0xv8W2gpKGBojOjGRSOrlB6ApLFHLNIkyJmqGFZuDuxqXC15mvg11QXGt64A41sC565duz1uiTdHHXrXAzklJuiIy7CKA1V2MK5g5MGGBh4Ur896NgVbXOKPBwRD8/bNL4ULRyWSca35flddA/rqkAG6Z+9uC7wgK4oaT/JTcC5wnj33zLOUjE0dZZ6RnirH9603Xz989NDGVsje0wngC/IKmWqMMDrNZ4LD9+8FHqUKYJv+KS4L0VC7nejv23fpylXk2FjduH+/2ZHO1jbnRTYjSR4aLlKK2ve52WkWRNS09kEp/YNVwMZYsbjQ/HowFyoRtvHG4ECQC5SC8+wMF1OsM8U8MqnEfSR3hbdinzDWpiZoYZHMzi0RVUdGFgIYQCBkNZZ3s/Al2cRF3s0CnvEGpUFAfINdrWugohvVo+NHw2m+6erpdYmcp0BuaGnEWtoMlH85FBL5u5/86Otf/zp0MVN0gmoMaD3L2eEiobvsAUzBI6w73l8jmtf/+Ms/Z73hsU8++aimtpqqATMjikBzlBIHHSIiPvSsQc2OsBsOSyzMLzKUFfPY3hbnls5BJyzBdlwn+w8cYkKSwejsOMKhdHQgaFon0ew8uN3V1FRZUeHPoUGWwoDV33CUC1erw08O2smJiYMHDhgoNztXomRNdbUTCVto5iN7K3Yr1hJsfXe87E/zTctMw7p//d3/SeiE9Ig0U3PcN2RHiFrA/9jo+tamSH3/hAXuqKkWa+r0/vvf/z4/BFCZXMw47j9pgP403w8/et/j9BIMYH6nx42N9TgNe+ClqJscdXzGrpiHqJojviKGOIclQIXW1dciihAg/IO7sAG9Qav4yarhWbDhK23IoOHwoU4aGxpIJQqSJnkyWAgtbFkIBYNBM9970As/iEJR+9/CSt/ReTIHmLvO7m/euGGgjfUtNbhLm8ru373HEQ48rJWzmYUP9W9/S945BbBclPFMECTobhQIxCogMW5JcZmJFxUV+9Wxv4lEVRPg4xNi7HJ9IwfALdEuUWB9uQzBlCkcyHnU8gixnNeZhYs49UCCKCgipvjD0sLMn/3Zn3EW48Zr1wLMpSXlYAMYriBiTI683Hx/Ah4regqT28cSLltW0keVWXkJoIhBuouYmIUe2Htc7AADCUsPx6YpMJeSAvMmRTVxwtqUOol38mCO1mKRNrQcJym6+/X3f/83IMGJGWWo8InPuhKAZyKUkm0kI0T5XPqZ/MKY0TEtekU1Q1Q5QzWY2TbeyVdnR0tvT8fTF56hNLAxnWBJtaYIDjERloCuTHNnQ6O8Sx1G+YreDOp0es4oQPVOcekf49E5ZNzCYQVhViXwKSrbj5MsNmYiW4mBbpH4+td/i6jgPOJKW3KN0QjoyhzLcig/vxDdNlHK1Xv3nT//lIHNll4OiEsTu5ZfXVM3ODRSW1M5MzdtSKVdpDPOLyzh7MkpqSfyZVvVR1PPZG5mPlOF0vgkxLYvHBsZYyY++/Qz/Ivu/zpz6iQe+u9/Q/Y2zQppYY3MIKdQAQwaFxMr9jdQbnkFo0gqNBf3lWhJm6A0Lykyc/yQgYP7D9xvfvDRRx/piq8RUogrvfPEufM3b9ym4OARDzlMgVbUledHkT160IwP4N03dTsb9IO9oB5nkED+Rt8oa1O2I294qM9MM4JTarWmvq61o9Nh9IlTj7v6UIyHfaRjawy9ura1OLdYUlq5tkmXhRTJ6KZ2eWXVEPlqEVRUrq2vugdOabO0dBW+THr01ONnx3vt4vi6ll2V1dXZKrzJKRNGca5kufz2t789PTs/PjGtFLTzBAFZ64WFoul3VNfgJ9oE2qPRdRAC8qho2fixqxjEsOEOZslwesOI169zC77OY4rtWA+IxXD0zaEDB3Izs8gVlURWCe3vfft34RmHwEl+bjZxgjQLiSq8bBGF7Bm1mApxVxZXXv7ZTyRBfuVrX6ksqxSKqoLQsceO0rX8yOZ+9drlvbv27qiqwJkOUvt7eiV4WSFM3w4NB1NeyESoEA5UCCF8C5dbkFA/LymUcVD6fW15HRcJm7h59YYVbnCzF8CWK8Vn1Y+31M1Oz3hcAVCxHDHxsZk52c5w0dGyRJHZdiOWfBJtjOUAGXJw1PpyCLWMos4cKS8JQFHw+B2JgGnW1zX6cOjgEdPRkuSTDviXyw9OShCWOJcoLO433frpzbffCtnPlRWiziwJNTsqAw5d+FVU5C4CJ3pq/1OXJBmfe3fn74Unz7keeHphJTscymeK5Z6YmpNL7yZg9TlXXU0Vn5iSHrzpwGOQR3F189Y9WKLXQAh+4GEJFPQNqEzfZAGJPUDlteUC7e1wM4NEDqcosnZNihcQKhi+ZMSvNJ13lKclCWZBUb7oHnfaO4hwo1qw7N1+ta6kwcqaI4fNNce1nJQpSalLKzIBpPMmO50Wb8MBY3bwbwjEMjrggV2QH9YVe5QJ4SgZWDR2dWOdz0Mgre/TkhKLyyuXFuYHR8apbFcBiAR0bUBmXk5yavLC/Epj004eIHYn2PAGhRZu4Nq3R/jB6MhwYXGRQD/3BD1Sp8U9VpmpsGFQ57q8D5Z2DIbiVJPH2dVgO3bsuIlj6bt376xvbds3yh4ZXg7WCQHBMyK7hDA5eHSFJOrrRASR2iM88bxrkVOQGEsX/YsZdE5x02PeId8L8nGsNQCHr65vsjzkqLBdEA5s2APy4xJmlatyidF2bHxqWjjDSQ2Sm6bwyN4D+x2qIGXvQL9QOkL6H//z/wVsIzJWMA874IXPvjTQPyRc0OaZdWJqlL/zz961XqsRgI8cOYw/dWixB5hq6a2tLfbb+AQqrGq+BAwyRTgn5J8dOXLIn2Iy3QDjcDI9VQKD67SnSJO0fhyO0FbWXdyZLZNicpRZmOcqbmhkWKgXpzRQ9c5q/pG19a24+KTFpdWOzp7tGFfCB4+mIIq19e2mXXtA691eziIiserI0YNJqWlJa+u2fG6YunfvvlXWNpges7NyUIZpnjh/AXhVO0PNvvHpKe6Dhy2ti8sr9IkV7bvf/e5zTz8TmxDPIKisKDXfmWnzmEjcG7ujohRf+YYZCufIAYEmyAlqGUYyskMvMYaIEsCwiik7x2Bt+1xUkFdeUEoB2ttjDPWab9y6rZTF+sZWY1Ojrn7045807d6bm1/w3GdeYAK+8dbbUpvwKuPJoHpGF24sOUkurLZgc1r129S6nV6gSHm4ypcCMR344W/CfnY1hCs/V8pgV2pyGieLBV0YA14N3NvfR6VQwpZjAOMHAQbYzOxMhAXDhf/46bNK6MzPLhQVlx4SwVhcKuOOi+3UydOtbS1nTp9Wxc5R2+Dw4HvvfeBMZnCo067MTaQEW/Bq86MWJ/y/9vkvWtGqa0KtQ3gTwhnWhbzcoXDLUnBX0TBSCYFtseYGYhm3NIdwjv379ghTrFYx3RXjXD9bSmqnScEyFmhlhjoJFdIpjleqrpjIhsYmi7XM3S6yNjXt4iBBR6NjEyKKnAW46VI97ompGSmbN27dtBuBQPYJ7YF7IVC+LOmAmerKHSvra4qMQ/Kpx05oUFJYJHu47VGLaxaoQFum/+f//f9huTSvsfHxAyFLcD2KfJKFUhYm+gqVHU6aF1NS1qaX0g6OXLLkiW2uLS3M7T90cPORI/xV7rbZhXl30QiKe+bCU7wbnW3t4kspwAUFwSKBDFZJBidNjpfmFhacXfN15GSG0wzC6/6CmalZO7T4hNiOtk73A3GlO7KeGJuctZDFJUYqKSelZaQC++79O9pURY596BZGqvhnBRrwMPAA7AM8CPajfFgOXAw2w+gi68OejdYyR/tA7moNvvKVr6AsItIPtTUhNJd+U0BFYhR8epEOiwLPD4Qgn2+cRDGlKENXa3nc6iYLyxD4kKVBh9y4eZMhLhn6X//rf/1f/st/0adZN9WEssvukp2dnnKqDTlyKmqq648cfiw+Lrm7q/fs2aqoFhXwRuN5CgUH+llEJRTmrqbdyhArJP1bv/VNIbi379p2xnL/+ecuI7dl8VAgIi0mVoeFhffUEeQAYnBynDP34UQgjL2aMwp3UGJRpa/psd/8rW8yD8LOYWbaVsT9HtZTmsfnH/zt3wJG6IpZv/vWm2o5AEzFYcsEy0qkK43EKUntO0ipb2xUAABuST3WMllLD1aHW08J69UJ49xYouJpDPBACx2OXtq7HpAStllNi7hc1ycmrRGOGpQBsHTCBitdPRVUoLQF1HV0dVn4+Gjs/dxiyUZNOHToMD5zqEoVurSIoApwd8ZHazPrra+8evzf3G2glydeVlS8Y19wdrKGiX1actrk2OTYcLgyFijKbHd3DYq7fvqZl7Djpcsfi0Zm4/IDWkLVWbHk1FbVLq6sC5uS47w7KY0YxMbFp2VkDQyOFheXj/SP2hrW1NYKQu1s6YDrleXla9eucdn+wR/8b6bEpldJfW5xyR1IFUUl41PT5cVFsPnmG68po0ZpbK6uODLZUXEBeRhnrEPMmpkd/PeMGOZocaHLoQoJv6cs5H/1P/4auj//xS/AvPnaZtkDSAm1eMRub4qPN7S9x6Q4lgXilyXk1PpHjWJi3iNnXnFK9G9unjt9uvnRw+ystIri0vaWe2Tj3Jmzv/jFL0+ceZx9sGv3PrfKW4dQV95FJEsmbmJsWtiChWp4dEywhpDJz33hi8o6Qa9IjlAhwXFnin3RUmZ2Do+gOiFpWXnXrt88d/Y05T41PpWfs3N6WZkLx6wJXFz7D8Q032vmZxeMY6/54Ycf5eakM4au37xlaWFJRwh3n7ZCaPWtqnfWIpMUPXzW3t2FfOFGgl17aAQ1aP/hP/6nmn384fuERHpWfMxG6/07h/fusnFamZt8dPeGSztPnTxV39BkDcDEEUsumyOT0scMeIePo6lxN+bjaOE++fpXv36p5dMLTz6h/sYchZ2S6nTrM88945glZjOGenJTQVVFucx9923hV/JGBnC/RVQBvgjjhosIfMOSIy1WMlJBz2J7y7O5GOvqR5emRkKpMgEwKLxRX9Pd1cbZOTU5iqtjtkOdOxa5iC1mKPvve3/7van5cA3cm298jBN2NdQnxMbokKYLEruxKSnRHolDMSMzp2e811pG2je2N2LiYwpLCj/4+CMyaWHrGwxopMswp/xy94myIEO4QkKiDbPdkUF/53d+x7JNLKkt/WM/ibHTs7OOOxQd0E9fb1dWZuaD5rsCwU2TnI+ODzbtPbC6rTr+Cq7Qid348NDASy98ZmJqenFqvCgzNT0rzSXKi/PTubmFa1ux3T39JWU7snNDYoygRWegKVsJ9uqMS/NybMWTTUebBFWF530QzYhYNCza8fxFGliptxKgK8f6lZIYr6RMMF4tyy57fufdt8zRzqS7V/C3NS9UC1XHidW4vLq+srSysBzWKpuRjXU3pwSDjMAX5hUmxaf6vLSyJo5RWgueWV2ez0wvSIyPddJFv+uBjQsVkElzeVlZGety7Rfm52IS4zKyM1aXVkcnp8Q5UXNxsVmbMQljU7N46eKV6wf37e0e7GfTs/7nVxaycvNEnckuvnbzls0VMxdT2f55vfqr1+tr6/NyM+dnZxxBqBtaWrgndnvd5eqYgUfc2iU9sEchj8i9ASL+79x9ULmjSs11OTa46JCOYja5NsVkX7l8jWf60IGDk/HjKhY5eLl966aiRRhYpebaz9apb01JcjEym7mW+YEokP2H9ifMhYAiaocn2IkciXvrnfdsDGLiEopLy9UrrOYYrE9gFPuHARJT0xSQT0hJ01tWXvzcpIvVRm2/cwo4bjbrdzXpv7C0iF1SUV2FGxF9dHIC01o8MnJyGfHuU1vd3NKJMg3Hjh/nCWS8it5jfGufnZtdW1ejIA9Pzde+9psMCOQgFy997kWLk7yLO/fvsHLsIpwb/epXv+ReOXP2cY55zn7MqeyBk6L8vJzRkQEoqq1TVZ3tUsQCMGv1ozfXt4YGhpMSmlkGRw4cJA5qqeXkZXORk6mt2OT4pKw//v/8J1YL6YCHyZklPJCRU3D1+nVKxmfoeuzxcxi4sLiwre0hN+3g4Li7YSpKQZLBALIV5w541NqpbkVVfUNzW1v/+FheRdlaQtzC9Hxt456Wzu6Y+KTV9a3uvt6w047dqt1RfTcz7eIH73LcMoiHu9snBzvtWVvaO5RNxGZWa6qbEYlz9M/upARY6lQleHglrD40Utujh2urZeOjg9adzp5eJ/qQ8OSFp6Hu5Zd/Zpl7/oWXJBXEJ6f0Dw+VV+04fOKkwEWWVm19087GxqSUVKeX5m75c38F38mtG9eZIPU7a1947lkU56LMzczo6BKKs6xC/6VLF13tdPr0GTJCeHc17l5dXhvsH0qMT3ztF68yp5jCAq3QpaC4xGabjwzrmnJObpZSpyNjrOWJzu5u6pouZRraG8fEJZHQ3ILCnt7+uoYmp/eiAGTjzK8suUp5amZhZrpjz/49He2909OLmRl5eI2RQVMdOFR65+5d1Ttc0GFSdkKIRZAfP3lidmpWws3dW0NrmysJCdVPX3iO9Xa/+eHzTxcM9Q3gYcsBtFuap+JjlsJZhAj1YQuBC1hdU20pYYQ5K6jZWf+opW3vrn0Z6RmLa9uzS+u/+c3f+/Hf/XBldVZekGPqI4+duHgpFOiLSUhURsQ9IeoGuFt9fnHJLkuWZJ+zwv4h8mLKjDPxmRpLEFLzMGxHm5oEE8pN5DkSBc65rpi88Oq+/v5vfuMb9Q0NosBt42NjY2p31tizOVV2miELkxE1NT5BCWemlag3xTRPS5mgDaiOsZGBleX5jLSk+Lit/t7Ovt5OTzmpqCwvli5SXJJfWVHyq9d+kZIcT2pSEpO623t5xDg3u/v6aXiyppCLIo2WNks8Z5TUSxWT21u6ZAuIRuNqYeHU7KyWWREbH6MIXsWOcmEyZOpR68Oqmh02A5wy1i9OEHzV2t6y78DejKx0RgsPo01iMBrtNNY2KPJHrS2klbuTeXDvwe2ZBT+lc+gcOLDPavLlL//6q6++ZglWuIUwcilyy0Cm1BQLltVhZmqirKScRIjug2qrCWrSOWrjzExPKtMEyRaLtpY2P40Oj6YnpzHNQWIi3/ve9/+3f/mHFKm9/Y1bN10QYZV0HqLQhUgYzuUyNzqnZj1x/vnKqjpq7fiJ08lp6bFLi6xKI6oc46pj1Xv5bjhz333/Q/6aFb+ODh0+ckQiMFG12s4tLd9tfnj1xnXmn9Jhw4P9NrQ9neld7W3VlRWFJaUSonLzbnAiCAyenVsgBXRpJoHJK/zko48V/7GgEOQklb0yspDSJlkGCy1kF3T52vXnng9nF7ZwsPpb3/y2MwfKM/QQSjvkq+CXmZt58NBhBoOViDP6Jz972V6FMqFm1UpSL4frJC5mW/jGU0+ft7+yCWhr75yZn2tq2s0xwUFD1gSTI4cpQB21UFFa5k8BBqIJHJc9cfZJO6u6neFIRMC8YBzniSyQY0cOQGlhUW5nVysFbklJiKwQetnKcSVSZqYCPjqV+0XN4So0tj/zkoTK/FJtzQYArCVlZXbSVIYjztzCPNoHMiyQIi50yDFJxdi187319rVZeHRIV16+EioF5RUUHk5Xzy41xIOkZ84vLpeUh2DulpbWIRugzPTc7Lyrl6+x+dS0Ytu9+otXmEpPn79w/cpVEdIAq29qlOKJ5Bkqgs3MKfrxN3/zN7Rk8737jjbsFihozYwooALKfAkeYChFR282qPEfuW7dWsvasMawQuzezIvnRoO9e/bbv4rwE2Cj7iyvp+htCMXoNjMZG+uIR9ui3/zMvIFSzVn9uM4uCaYymSZX5+VCCEv4+cuvsEqZTYINpmanKyt3nD13WhFP21An7AKf4S0xSUyUy/Mmq6srd+3dZ6VhjmMyMlZRXmpLuryi+MwE/cIcs+bZ/J15/HRjfYMlh9HPdPM42gFPbwwR5OMDkjBOBXMO8WbJv17b2HILtPY//OGPeTvYwbZStLP3a9evU4XK81kqJAqTxrraOrjSoe/hB6OEFNTU5JbmhyPDg/pMSc6amppUOXRkdHzfocOYhAYED7607jog+q//9b/iflgChm2VzOnotkqHqHb40CERligiFZst67QUpZggs1PTxrl/v5NHzaDiXiwJiGLdRRQd+iDr15dRtjRxPOmz5c1PJo5nCnLyFT5wLuysVkyIp67299stdHaqKpClnJbHwUkvY7npuWkxx7wmCckJtrGiPkSmakyAAW8uthBQCnjCzqElQkP8BswguHEZAUTG+uFPL/qFfQB14LfDsYpb1+W9GAuo8IZnbF8xs30gg8CO1E+cc8jBChf1xM62fefElecKn0jG65OWkak6oSrIwKYjQsE4oS8ba/wiNidrywuNO2u6+8Uqd1G1uYUlqyub2ii/a789NjzKgkyfT11PDUm3pE/IAWOX1rCcoD7UmQKc+Ozls1lgfrBYudm3XFQKHHV3d5oXKpimfuCHmxP/YA9KAE0FgtJxMLOytkUT2dNyQjt3wJ/2TpQDJWifILiCrClUhfdXnaFGXuRL+IFn9QztWnr5BQC+xACQY2gVnFR7sa/m60rPyqQ0hAZRcDaS466nSctY346R3DA+M8UqV3EsY3sjJSlBJokjMy4D5GDTw7lcNBtFLtU9u8jlHmauoAPd8mCdPPXY//jz7/CA8ps6M3VOaKvsSA2rcCNZFFta28BGH+Jk5fz4Vt3HTDzR8aWXPqfQGzgDSJOhUjCNNDwy+stf/oqwWwJX1jYwABtRDDTbyCOQ7zgbuoQM8XBDO5SiC3zSKsIMbFB7BwckYUvhg4R3339vdXUN8HgmLAMuigzJLQLuZ5nvtiUKVS0tw3OgLxuxtnqnYFAEqq3befHjT/fs24u+GGNjddO6RTSMxbljjmCw2zSiUZAYjVATv7355uveHc4kJAQ1w03lBMGg2sObxpbtXU0NqGZdEXLVUBeC+vzk8sTlxQWm1kuf/VxCUjzHIZ+c/q3N3BZ2+zysuVmysVc8Cxt8UaMhrblkeHTyyNHHikvKyRd0bWzGHDh4xLiqglloyQUJwoonS8pIjadi46U+LzI+cnNylWcgbmyjq1euIVkouGy7z4pPTCouK88vLlle3xCj/+Bhy/TcPIerVbS2toZWtwRMjI+6z8olYg5XE+JjKkuLVxfnH7W2N+7bvy1wMCkJvSgELUm9KEE0snWxpnIGEVVUgAF2FHescyG1MglOhwj7+obi4rqLF8M9QWfOPUEf8s56JaUkYmy8RBXoHkpRyokltkcXmlxAgpy3u7fv2NR1RaKYWpofMHRoGNTEAGS8dme9U2XOxe3YbYoR1VCE5nn04CG6FLpvpbSIZealPc50ZoZwMOMzWbOpNikXhVpkST2F7J1hJ8MVDLV1DX4FoQRJ3WIVAsIL63gTo/b2DC4srY2OThbmKrY46ZRvcHgUKb/0pa84SYMcMi5UzzcelPFFkD/+6AOWisPqELeQkw8Gnnxew9npuZ01tXfvzc7NzkhN3lEl1jHVOUls3JbrzX2w6onesSfZV3BgfmGFiUazvfXeBzqv3rFjaGTUkjq1vJAUF7t7zz6utBau9IZGmf0OedJFcaSncZHCAJ0GcpFsrJ2UFLoldm569sTR46IVSeupk6GmCKJgPFTA/zitt6fHctDe1kYwwUv9GnScM2xsnLbkF6MbPUVkIAq6GNlmyjcHS3293bZtOoxdj5FCpibp1tYmN7M4KBfHSmsO9QxSknOzs69fv7azpoZW4aBcX4mJHmEpcgBmtGvtaA9imyd0Mdcxy9TEdE9nD/clO5XahGoYbnTnfRFabykoyrK31kB1VIeDDagAY1poaTfOyrQGYVo/0XuWTqMQf0dbPFPEQTPMYGpaLq4snj0biqyE1XAr1HvAmcKr+DS1RHq8oW4hdOmqt7fH0qA3PXD2Q6BRgEGR+kCIIJAGtvrzsaIFTnBFybe+9S25WEpMiqnWwJ6ZpgUbdWHPgFH5XgXA1FZVLCyuvvrm+3UNezmPHFywCCQXqd3JSW1GVCI7E4SuLlEvWBGzrY018CxfW6lrbIKErp42PZdUlLFs2WBB6kdHbg0MnDl5wmdKm+JKUBMtmizEWTM5QaZQkBnAc09SMrOzgO3mDRTRg72ffT4zg+Dc/vQuDIOZAOIfSpW1cOXqZUuhukpG5Hvy+Mr6Rll+oVturBqkbH5ugRoBOVugPHJ/sC89y3ldVBgujsTSvGy6AiFM+pUiZh0hkBXNn5Qk3oPViKJOtcOHQ+oIhI6q/IRARj977hx68fionldaEap90q9uqEgYHhyAI4WKrWQKwFSWl+rLgQjGSklM2N3YoC9qcXFeJdRQCsDp2I1PLpZ2dIJSwHh9Y5OBPeJFI0dXDmBZGC2OyQkhq0aAu/WP/JAiOLIEeoRC1LNR/v98qabKJh6ioWjYW7dv8/iyn7CarbClFPTQ9MYbb8CXofkqGF60oW5Z/BhXnw4lfCM+DP+JzdASPA5lMCL0wZpo9bfffIsw8Nb4EySB2Hv3QDeGE1OlmTNxtKGXoeL8hQvL83Pvv/+uX83OEkupEdTRsTGBs/jDtg/t8Tocushm/8F9nXc7dzbshH2Gr7lT5XjdQMq9JyYmOafW2GrtKT9RbZR7stuAM9MxDaKC2fmZRVS4lLxvYSqq9xI/9hbNQoXz4+blFxJvLQ/s24cnnE44STRlmERsoLJOdOCdPU2bu6Px85//It3Bu//kExdkHpsgXAm/jl1YYiGxz/Ao28FKPDsVziIxfViV42LWVla4YcTgGlFkJOqIF5xSnnY71jrUtHcfE3w75u4Lz39Ge/TCIcaFYdPUiXeai6L0YNTw5QNQwckJD2rSU6bMCwUe/WMGFTDhQYwgHqBT9ACHiCuMFcPAAD2C0ASD2sIt+Fu3pBqCSa+V9dPBi2iK4jYVllVIfurZZ/SpJYGxw/GTZQyLAmlrZstGK1ygXV4hdJ6YOZS0TWLxixHHtEOjI7JmP/fZz9t/2wnAcElRKZvC42Cz8zRr/RA55XxHxyeOHDyElzRY4DpwfVVc/N1ISLRzNHDy8YNHFLykVFSwYDgHdxqNt2kdKTGD/bO4yGnIk+efIrQ7qmtxnQsNPYWj4Pbt11+Tilecnyfr3/4TR2EhiGLk4YSVrVhr+cz8yv7DR41usrYE2DUvN0cd4pmpKYhKTctSKMCvFGIUvRY/mMQ2WIi2hUMURDWyw6OzvBKrsf61h3Pw0O9RMQeSn3yGFmLoPaA0JuQKR56Vub6CrN496ydw6ja63iBrZPR12QmQSRxMRGO001LPiIXcPnj3uJdxRWr5NTU9xeVuAFY7xLsOOamWIpBUV9W6al4okS2Iaklb6SlODtZXl+yCCmMK9MZkpKmCclPltjDIEXYqK9sRgNnYtvYbd+++p9QLomcxGxZylES6I+FPm1YXoNKesDQ3PydRxFUMdmJUmdfaaiwHjSq/ZqQBnhFWTs+wQUP7hSUaGa1NEU5wjjM9CseUmWsChLCoRZ1bEYQoAl002669oQrZjsoQ9Xvn9k0WpCBMbAMbQn8UrTOXzY0Njnmsq3aLZGnxu0cOHTKRjtYOv6rLEXC1Gdu4excPjpADWmVja2ugr882srig0EW5Vm81YgPRI6VFeRQMxz7GCXfv3EEaq5dIa78uzS9lpYcqnyQOWswOW2osSIxXgtFAvpCjsrwcSsU6PHjw0EzIDmPDWlhZUcXUqKqyKx5EDmpWSOThwwcdKuIxYZApaVl+ArBS9I0Ndb7kaOBoNB3ywj1UXFTA7HasqcHDRy5NT7ehIlwd7e0P7z8Uti0nrbevZ25+FomZoafPnBVcJPrFWR8P81D/MC0q1oK7AZ55BKKs3hpumcwlsJQtyG1fpyLb9cX1jf0HDtQ2NhC3E8eOWl9yMjPefuN1fAgnaOe8yP7Es7NTk0+eP4c6vCFMTNXrj0gkLatw0UZ87La9qOu6BX509nQqtW7XKmzALISqqlrGJLIhJhQqZwghkYbYJjoNJrOzqT6Twqhidci4sXbWUx61IjaJBv4Rty2J5cjh43J1VMF3qheXGK/gl6Mbhm92arhbGstZUbio9KMsCW8mI9Xj+qdbfElLePmzyF7z2DF6INHunyRvbqr7RL+hOFqTd5FkTgM8y1RE9M721jWxmyvL4m0ghxGZmBL2IQQWbA58cCBVbxTvNVLvd9Y486f28QkcGshOKZxE8U+vrVJfpMAGwON0yPjI8M9/8fL+vftS0zNsANJdfBIXB1d0MlDhXLidwzx2hRCagZ5uhEtMTj966LA7hTxuWXQvFZ+6A2bvokmJVW4WEygrBDZuBHEGHu41HaS0DHmhAtnEnLANZi+lkP7Fv/gXpuPwbt+uRu2ta5x/NrGEVG6hmyg8rngDvu3q6hiNXN4nVko5dihMjNR/s9AQZHgwa/1DEU4jQb6n6lkdRuzp6X30oOPChadDbYORRcoWfgyBva2z8B94NTFleCCkiJC7lpZQqMPC51nz9Zkyt9jRY+hFTAwXZW/PsojMRfAMOQIJovuJ8gQJACi6sAxFdjLmImgN0QHw4uc+K2jizTff5tXSrf6FeHnXleWbXHtW1X6fI1usdFiybeDEdHKCLmCrrqm5d/++EBqatqg4uI8/+vhjQ1iMGHJbG+s0p6VWy6NHj09MT73zzs9NzfJtb/C13/gKirBxtRf2ZgMgHdaN2glxMUrFxOfkyi89efIxdSTituNqq5RsmZJ44yhGMOe7b729/8BeoOITZ8tR1oK32opaWsXFkSIV/YpY2CnsFtbXqDvYSE4JkVHGRR0QEqJxua/bcbb6vEJIz9PC2cHxUVH+D2TZkZFPP/mEpcREEQCIFhQLORVGdfT4MVSAxuMnHsPwaC0sl2sSe6PCof374E0p7//FcuHWnVDgiALBmYRUG2oHQe0rtKQBYMZPiAU83aICSwmToIKpacbwAHx0InLpMDx/IgSGwibZ2feaHxA9DRCaiDvlSFheXBIQ1liP9kmqxOTnZ9NEorVEmA0MjjXUsRiSpyenuABJOUFl2AijdIwSa8NgEYqN45tsa2lhpQGI9AqztiHjbiDGH3z4zq69TTb9WsJOZPepXHcuMY6smCL5QkErqgdAJsPPrrGTfexu3cXTGJcd4xiFWU8SqJgvfvGLFgPLJIbzjQehj/yYFRRgL2TTTH0MqR5RwfanA3cc8KMf/ehzL30WqJZ20AJJY2sDpxpJcFAA12RDP4TBEK/+8hdyZbp7e7BjYUbx+vZCVmqKz0urwdrWOCUnlYvzQXNzqVi3hnrPgo2ECKbUCRYHIVEkCaIgXH7qENZeircyrA+bkloSLNj0srX500sX+wYGebO+GrlsEoFDcTSxjJIF+/tWVxaE+zse2thOpMAcsqM6VCOZXMiU7FAdH7Hdgo5FuDwZZFQbPsPB2O7gvkPKuaK3jcSjh60cx5Kw1ZQV51NablcWC3IsvrxgIU+5+PDhoYMHE5MSBIzmZHP7hQonwyPryCQSTG/TE5MuN4E0EZaNe/Y7anjllVe++c1vQj6lxhTDZPCJ47/ypS8TY3NBLC4EQRqggjdGgAasosCUD+7by8GnUOCdDfXoYjgszsIAv2M1xzgQ6EssgW1MjeaCVVykQfSDPrUhADIrLPCGC9ZbWbhFYWok1GnBSyRzYGjQWGTsO9/5jj0kqdpZT3Pt5Kym7+yakM/CgF11C1T8g0NwwpHjxxyPYpi1xWCJ2n3hWxOkE3UIWgCYPjQyC+xPPGV2PgtkMkdaABKoGwBjjKjpAFqSSRkRcrj1LIMywJnlyDUY4pnT0z4YyE+GplsJf01tVUZYYudocHsDB2gnTp4B+eDIRM/QqKNDPDYabktxRAln6WYkINvB4ZAb110aHZfkHRhmAefwSXxgEmw61N6s/YSO2kxa8aYnjAXnEEKTepmp9l6g0gYt9ONZsu9zfGKqDqNE0ZWpGQ4aIcG7uaOF9jrUzPpk5+NdMw3MHb3M158m7h0a/akf4BkRhvXGe2qpM7rawh6xO6UEuF15UMtKpJ1JaFcUhbtrzYkcxA4Pqm7RJDhbseM333qdUfONbzxjIHebcEWzpWgq85L5Oj4eTlfpnAfNj+Bft1JcGppCCizBBL85GhHSgAcksXlOG1S4xwM9XR1u2XNf1UjkphTTVF3EnhBKpZOK/OkfGLLMbEeua4AHdImoRLMMKOIlwQxhTx6SmKsxMEGmk8eGh2y80QrGOJiF5GLstvZwPS3LH1MxJvLzcyCKwcbLiGS11dVOLAdGBiL2+oJCje732a6W7bqmelTn9U5OREYk1SFkXAQ2AxG94IH1ZvoAZpfTXbDN9DFT9jdsI66FbXsjQEKU0MssLFFinLgq4ASlIA2oqqdpgL6OvNs7O7jtIc2FGxbaQ4cOX7z4KYOG/dbaGpJoDxzY7+y+ra2FdhKaZ52DWGJx8OCB+/cVBMzavXvP5OQEQaMq8YBvNJCQwP+H9LwJ3GnT4xM3r113HC2RZsI1C3m5GJgbuKOzs7en25UaOXlSk0JNofq6Orx65dNL1LgKRfPzsdWVlQScaYl2Yv/AJqvKcBRdUVHx/UcPFyLVri489ZRbCwIDRyRFDV3rscNMC7A+Z1yLwW10/0FGRnowDYvLMDnUOVjoaO/69NNLokF40AB8+uQJz370yYe2+s889yx5Ydpura3MzUw7RsaxYt/5C1j/emamg9kc4dbc+YaOHnuMyrCCOART0cgZkQsfqVAmg7BS5+oYz91AWNerufnBidMnoAvJcJdzGFtNHlPcPjw4hEBsXHoPt0S5jt1AspCehsScfsUMUAGZqE9j43+6HTV17svlpWVtrj1o7uzuckriV8p31949PgBDny2trdQy7WRxx2z2YEEuYtQsHzRQWiTZWlcEHK4wYYg37mzh3aBzGhrrmek3rl8vKStHeYlNkl7wkge5jAAj94/VZT1xZMfsI0TYqWl32JURB4JvxSezInZQChjA9vINylJiJgsYLA08uDUv7X2Psb1TSiTUrH2JVWh4fTJSv/jrX3jU9oiPhtQZ0eGY6sz37t/xlMgWtrJnYcZcyK+1HpymaY6oGWkf6p5Dqf5RgbxEEQ7nvifUdTW7rIB8i6GmWXHBqtO6tXXLh1XJdV3hCp2qjHhF/CZCYUfOO/3ArSkbjsAihw9oTUt4d+RLmdDSFlNzpKZEIPpgUvgTkOSdDjGiOeoHDOD3AcNYbe3K5hYxYNDDBtKPV7Sfe3cfmIWrk61KIiFgA1bN1OKrPTHRD1nGRQCQNwwPjDptgIQx6JMA/9aWX+mfZ5//DJ4B1ZknzgESM7DojI79AOnAzaBXLn1aXFJRVbtLaW8HjBUVJbEclJE1l6lt4sw8kEtUuHzpCjvHs/q09bXOorWx9Ax+hCbjZN+RMi1UXb3d2t7mWtKS4hLOkcWZOY6D6CqgZhRI0I4EsUPgkyMJcSVWYQy0g0Ne7gf37tOlkgqoUF9CplHYXVQiEjP7IN/FqPjbIT/PMFTYHgAJJLh0a3O3TQVcQUtBXg7dy+7y/eLSosd5drGo5cC4lC3EYhXY01gPvsQzoPUTfAKVhpEur735tnd0+AA5jGHbPy11iI6kAGzA4FhPUA9xfm6mq6Ntc2vVdVHtbS3dHd0i6VOT3BVVwc3S0toiCenxUyeXF5Zu3bzVOzhirVpeXfvok08xPVeTc3S2YE9v1+17txV2gHGRc1CGcqg4OTOBqZR6NfZ7730EelWBw0KyHY5gkB9PRCwBzryQZ4nXx0ZHJevgYwiCKZezgBhaJWkRY9+TGQ9G1yF8JhsY+/63//bfzIdSk6EF42L0cQBDU0scgBHR71/+y3/pON5uSQ+i6uUg7tm3//xTT4PWQLgHKuGFrOqWuAJJRu+vff7zsGkjKMZAjXbr8d79+9iGgnol5xELVQLOnT5jvt/73ve4Ws36tTfe+Af/4B+QCt2SB9ypMhnV49SP18Npi5uMmQLKmAyKtJkWoZsLBrM2LvsDddUxzNrgy9zcmt6wYkmZZNZAeHySqiwJ23Fbtij+tPriHpIDpZjSWAqAIkdxcZEP2LewsIgHQlFIGX4qghhFis6D+w+FjYrCFKbDfHHJrNg4Swjr//InF1OSk6oqKqwutDC1jxdhFWAmyK6yAxR27TALq/lc34T0oewJ8aaGzJRnEWCcUiAEDvwjK0hQx5GcE4x1ant1leFrvlS22dkbkCUTB56BYBu9UB8t8orzjh4L8UINjXVO/bwMRNLsSyHNPXR8TBwwVrWmXQ1urwSDpzjtrGFRKdUVfnDCbqfnOMi4bOSvfu1r2CCWeZ2aKIqRAGOJpp31WZlZbicQu19ZqVjqllvlW9vaddC0Z+/kwCC64CV8Za9iRsayEwA25jRl4vdXf/VX0sVAC2OsfIqAz0DPfoJGDEaRYQkQehzTUhO4AnsDlTBbMOz+sRDdihV9Q9RVJaXmrEDaiG2TGdLT0S7Om9sTHp0scTXp368pKUPJaUnu1OIAK6uoSklNWVEyKlLsH+305n1waBQOjUit2UDqmcXGduT3J4b8qX4iwv4J0KJiklOCQ8RMYQPMYY2PKG5go5TpIJlf9WOa1BNPjwb0i8Z0DbL60mcQEliLjQd9ozfvbPEIX8X7E6v4leHoKQzjQV96aQZs3xjFTyFiYCZsPIxrhYzqQX9CV+jNNX9jo/6PEeJjtsnv3XsP+AllUKkPI8Lq+GPCSwrD4cCW06Te3Y0Kjt20VUCIK1eu4VVRyPfviQpzLKaGj6PYbpJlLMei6DUySjmNRnyjmxzESO98zPGJDTk9dvlSuHQpNzurprrWvBAazCiogPL5p55p3LUb75WVFotv9kE/t2/fjc5LMwsALqXHCS/GRjUSZM1t2lMfAhFLi7E9+Lmpsl15ULfT7BiUtIJMUww5H9DChbzOclGmurer92HLI8F+qJkYl3j75p3M9HQJ2kmxicuLK3YCGhbmFXCL4El2uahoDKxeISKyhoOLpKv3u9/9LuSbiPIyONYSQqJtmeLiQp2+iIlvMxBUCuZk8qpPJYiFvW7KbR1de5p2wdjmVoyzEtQMcRpT00eOiFtdcdOL0xwX+khHwYnyZHygW+ycf/CD7xNSW4KILWVnOPMf/+OflJWV8KqEmPhedgwnkXVA/I8buBNSktJ7uzrde+ncI6jEzHSKSe0sVA5+qKWFYonI8/OsBxxYVlFZV1PHWMQ2YL5y+VOPWFDWN7LXV8IWlxcf5rEohRmXmLh/9+4vf+03/uIv/4dKayXFhdzzsrzEbfPn8T2LyKosL+MIFCEpeq+oYD89nJWZUVxY5DhFQRHR81QBk+jJc2drZQskJXE3gm16coKj3SbVod/GplIEOa6fwz+MNjAAzDmP4wIBJE6PiZiTZ9mJLAdSz4LnFOcoLakodwVeXKR+jikQzKXkUFJ9/5693DRcyBAh0Isk0uFoYTmLaqq8XKYq87SQ7rV8OGoWSk6t4TqSa/oUphUQElCWSBJMv5JEuk5vniXOvoRDz44Oh5McwRuDkcpF8Bnd++EBbegcHOUzpuIrrJithJDjJ06gBSOM4g035kZUX6TMbyh7WpFcwdt469b83Xt3MCpOo4VscpQiNDSo/KkMC+0q3o9EOMAjPnqz1yooDIHRPlM1vtQG0zpGMxFoNAtIsMslaOSUQgaYb4BEfRmItUReYAAysT0keBBd1KP0uHHlRgrVoBjV89p/8qRv4IecOvdzyxUTQ4mYw0cO6gomqSPrAgzoRMmfuLh4kbrQKPQId1nYOzu76AFTtjVSiILt6Cz64aMHG/e2ROtxbE/PTnX3dTsAES79i5dfdhsz03AiIVhvrm1WUkIwZGJSLeGCFvKrBxMnG5Y2tofZ2dtQjOC0wppCUEdz+HHJfM0uSm46x6GKZ6GOveQpbia9eWHF5NnkDz4YQ1Oy+dRTz3D52zHSWtQUtaZPjYWP2JZDI+Otrlaw907R6vSV6BvbfmfpmJbHAJ/btxB/elUAgstPTp8+laiq2/KycVmGko8FuQlw0M+f/umf/of/8B/u37tjw/DKpU9N5Pd///db27p++fpbp8+c43kBbWFRgfMx9XbM0VxYBaJbbdJM092OYHbchGcw6nvvvccyIbaMpfipgAclOuzieju6RA05hbOCjE9MCMZjfXBrq1ZhKz3e3gGkY489pg2kYQm4skYkOYmK3LrjcLXlYasKMTpsamhkebpM49KVy5DP1hegycA49tjxtpZW+TYlZaUM8QtPXqDN1KdrrNtJQGASW5LEKLFEgok+sKBbgLiITQGXaoa+zFfqlKSTPiYT4xkhsDoaYQAtfdby+tVrOuS40yFOhlvOgm9887cJL1qIZbKG5uaGU6P0jDbxSwms/C987rPrqxtK83IwciDMTU2LHeQTnV+cHx8bkS9rTycp07kiL9r6VoLUJd3dCLXtHqeKXWHtOBX2f/7zn1J/7ncQZVtfXwcazGEXK7qaNYYM/jQfEOMVhZlZjZjMvk29F9oHRRHpel9ffl7e6TNnSA6vtu27lUx7uhWRhIsRGO5bmzlIR3UP+gCDpB1b03GYErvgDI8wmKCMYoU1lMNnApE5r0gmJOI5z1IBqOupqJqAVp4S7mHq4K233vjsZ19k78rGtnnbiIktcSV0xIKR0AbpzfceUnlnzp21jHHk02W7dp/U1e/+7u/iPBxj1lcvX/nGt7558eIln9XXTJBeKzJqa517RdbT++++QxuCnJzX1Td0dHcxMVQBiowSz1SdmZxgQAXzLknZRMb3hufF2UfCHhYtokTX9AFjRhyW3i08QUe0d7B6yTZ1sLtpt9FtjmFSPMThw8FpvWvX7sKSYpH1gwNDfMnQYm3zuNK2kIA0fBui1FGN2HjQYmMN8yBr23B4161nfOrmS6USQj4DGg1FTOcf/aN/hAWdL0VbEglalbq0AbCTmo1cDByxWVN41nVOjdqqQrXe6A5Esa8ztb8njT6xhD41gBzMrQ12Mq42ZufPsaUxOAch3tMMO4nhYVoFw3FmGhNq6Sipcdcuap19prek9WRKOW47FPcVpUDC5XVk52QLCHGBCdYgdXv37vfrp5euiMQwU59JIzGLshyodIuR8Jixop+1gR/9Iy75BAzEmo4FxrNYEaJ05Vf9exBvm4K5dHV3BEHIzIYNDm5HsdaGyBYi1HGvLC2RZOIpnI+rP/rk4oEDh0gQxZqRnc9lNbcoCXBDBRTHR56CDQGrcnaBhxDwAAao8yeQDASTQPLZ6ITC0gUbYDMWkPCqp5jRWhrRT2bnAxn0wU+mBtUEx3wxPBoVR2oka+MnfeoctN69ABMd3WfIMVmU5LQOZuuGdORV/XsQbF7+1MwHQ/tVbz4YYn4pSKup+QlKAz8vLGZlZ9bX1piXMG6bqJVlN6RMcUunTEwN9/XtrK3i6VF8VXCIEAOUxaI8oLZq7S2taCToFiPhNzzffP+e1eLIsaOAxyQwQ2szSdXlNM3UtHQWs3EpVqACQ7YPp87tmzeU3339V2EbMDUxDs9e/J0M1jt374+OB/XF3SA6327EeTQEWpV/8zf34QGx47w+0agGJhGKmC8IUZPrBJWVawjZISn2YKLv+FNCFWCj+wBIODCoV9AY8bFsptaHwXoT5YKgQg8TYhMEdYWw45lQDJE+BDAlQEny6VhvzJe6k6WG24FNe9CTDl3JbG3tTjRlat+9K5ySIznUKINAGtsQos+tOpGqrbksDB4DjMZEgBy1tuyirVKFxSV5+cXUC9ZaWWm9c/teSnLG9BScl8n4j5SrVv5rbX0hxIU/9+xn/uq7f4W+dj5w6yCaKuY4wGOsUieBSEwunNjoGZZee/WVw4cOKNTDuKTMxb+2tAjEz3VXjvZoivdu3bgpRZVyY3/0dfdkutQschcH/jER0sd8mp9T5nVFwLGJYzwmVHFJmaodyhtQfTL4fSnsGxMKUpcgLurDHOVxklxJO2ypIE1x8TjWvOATknNz8v7u7/4Ounbt2oNSoNWJuNuBgZ5bt265SVcCoj2um1PV9FEtTUnBShUuy8vsBRAdYk3BiCjr3YLt3eKpvodKMpIaFVS1h8RjdIU0Zfa3ucCPSPHBvsHiuCLC5cTYBnBqDK9NoSPPlFAZDI95GNwUIEuLnzVS4SOEU1KhWRnBksNXxE0DfEgoiC1Mkj6Kiw73K3k3KbD5lS1Ik8vDsYtm5om5Zx5YdDxy5tTj+kyKi6crlOWV20bP10audIRkp4ba8EQ4G4dPEfAiKxw3cUygHcOuuKRIPOqly1dFCvcPDzvGwRsyDP1K6wrapqmszRyXJALG5LPC/2uvvxGZVFgZvQDAAPVBY3PEV2A2OgYm0OIxIMevZodAwEBTczc1E/TBqoHlYM9n+1t8XlYp2zWcfxrUq6uznaSAh8UvY1VX/ozoRo+HEGik1xjHGpdehTpLqjb4BAz+9E6rRDUk5jQud4rQuMRk+Xg1xnrjrbeQzESkLM/OhUw5tF6Yc+FPOKo1C4+YGsIZDvx8FqQbh/uVRAMyIvWcAOn79x22I2IJWDWYLrCPe+HTxC27hBQa8ScIua4w8Mz8DD+d4aTk6VY/+sQVqnpogxmYSTwpKE4AsTn8sEaABNt64IfFpaYPCRp7h0bc4lnYttrWVFdDhcK1v/nkkzYGEkjU+EJEPOb4cXCgD1PRzNZBRyJcga2dPUKMTAoFVeWBFpwW9VmAypGjIQSKG4XlA1rA+Ma7qV29epUQuTYEZsyFr009Yp/55mWSYC1TgBYhJ+ZoXmCgc3QORRCFz5kWEGuV95NxxQDPjE+rgMEBIDLXEY0Hy0sF+Rf88tVXtbTl0Ccfq/MBbOZ8DAOYOyYED9bCEsVFhboVQIABwOkbjIQleAFQE01ZGqaJMeyFAGknBuagoyK1WZkTpk1U4VMDn5FP554KukvZqLxgj2nc09+HLY3FbmGuX7p8GQcmiLBUmC8vJ1963vjoiEQHvgcBA0IqZZa0PmqTP67kyOzcpOCzjOxcEt7d26+Skbyc51/4jFJK/X091y5fWVtdRvLaE8fLK0p4SkKRv5QC8iwPHf/xuwBF2TXcMDg4JGTI+iTgEgZlroFJG5KDtLjNiSr/GD5GA6xDG1oDQOxZiyVplPCEBmiJijBletBKTkwMy2LlP/qjPxJ5Apv21pgJh8GjxQ8rZGTlKA9cWl4JuR1y2vg809PRuKKsRGOPEFoxIS4iIFRf/epXK6o4JEK8EJ4WWoMMMCvBTtEAxOCMJBsgv97ezqSgvCgjr4T4BJWRyLyyHnjCtkwCFgLzl9iVMk3i4+XVhShMxiw2vRXKp+4Li+jigplyE4oAVYBItFdLywM2FwXBs6VEN9eB4xd+WoHzaktzdOn2t7/1DRz56q9+pXSDWWAOJhLsgVnFISc2lnB72cKcPD+5mQ7/sQyE5MottvCLRZbaocyCYj7iIwXaqpOGHzIy8lvagp8ABmCpsnIH1mSjYy/CrMCL9ESiqBPRUzgPFSxane3tL7zwAoDhx3ppV8DpQs0RSN9AODP6z77zHbj6t//23zqWUrOWvkZW8vD5X/8i2Kz3GgMeJl0PhK808P3wwCDXO4ni0EJlIZ5iTJUIYAYCQ2OiZcdId8O5tfzug/vmS/A+/8Uv2J3jsQOHDtmDzTx4AOc0JlQTTiBxeTucsccDP1eNFCLLkgN03vdjjx1LSU6VPnH27Ln+3lDWQIycrDXrPbNjd9Ou/NxwTOwMAcf+1td/EzP4s7SklBSA55OPPjQRQ0Og831K3F1TC3Oz0iU1Y+TqEO1c6aA/Od+Aoby4ssKavRGCuMrKytnKbsOBUqwOOVjXNwpnwqFAA4VuFClwG0BWelp2Tp5iW3PzS264kOLMwFrbXNuK53Nal0vEtQBIL6td9N1YRtetDjE5rOocJo1O5aEagJ1zIhw2wK4aePnJ457VrWd98PIr+fKNHsiOP+kpE//7lp7Sj5+0QU1T4/9zomcZ8JmGsix5isiTMgJLwD2OvT0CSC/9E3kqEn2B4aBDm/yCPM9GV1Y7FucexnVpBnvMCZU4EJcGDg6NCTJhfBcWu/55EA7ZXvZ7JI5WYdyjjjBIc2Htif7gr5KmjMmxukKcETGNQVkFCuvq5YJvuqc5nHcvS8CdunaFK/niH/7hH3Ko2xc4UCUvHjQK0vM13rkXajg6chSHzdZnHNN4OmciwwMmgXB6nLrA6uDxoLXZ+uEUpLe7S6Ehh3LJSYkz0ysqStn7mzsKst2hlKKAbCoOVPBG+iLZgTTGxIkTp3q6B9jcR48cpzq4OycFCNXujGzkA2mkaDutsbFCsdbWkNQLAN9HiGiboWR7kRWxr6/fmg3DnJdelCSagtnsZHUrvLjNVzk9q/BifkGRKrT7lOPIygKA5AcliVVSV51D8Kv4foVN3P6WnRu4NC0je35x5ZVX3+BXUghIavraJkO/nxqHPaa//i26kAnzcAKHMMyKtQQ6t4E3SLhz67ZbdmmtndWhdCYdIuHP2ayVgixXVdfiYWw/NDKiqomIBSl69nsuXnDkBXs8kZkn0yEf10mmGp+YuvegRR4LNcvbIWOPmvnyl79KeziUgBxHks4fAMkucXp6+fJValZvrAFnRHx7irkdPHAIIeymCJEc6+mJWauVKr1ySfmPaeymhoZCtuzivPwB2y3b18VZN2c5vghXl9AFTnyYvEIEzJtBxjAiI6av27Xx1dPnzlJrDx49JGow4+I/6DIF1327X8l22j5TJoArHVnv5mWsjz/5kD6UOQq3EaFmO80zndWXcrLKcKFL5YFkpWcI9xVGKAxpcWFePURn1AURpyNE0fDyEyQN4kxXTOIBX9p96pb9gZOxtBoyTz51wXLgEIl+I7xo5EF/8kQgEGeqAzd8iGOJG50DcqrYMsrxT5y18RP+t0+mG13qBO04061tCIr9bNv0qVAyR9Lc7KydmyWeAqETeHCVDJLy1NYaQkwpihm3ws7MfPlLvx4fFzs2GoItnVXRDxysqGMKGIlK0aa/H4P3+WB0HYIN3gsLC3A6MdcVP4bRQYLXi4UhuJtvedFBOMiJnkMA06T7bt29LQGDOrXbIcvkS4dUN4bRCcgNCldUmenQbKbs3ZfgR2Uv2AMA1eTopqCogCbs6QzlEJ10lblbd3mFfShAnFuQ5x8Pe9EnOgQb4QWMxuju3Vpp6ygH12SBZJGNql+U0hLyNQY/eLRnPlIshA4A0Znq+QtP/zrAwPDMM89597p18w4usiDCjwXIntBErly55DgkKISURFESFIj5yuirra9TKJNfn6ltZ/itb/8OEbbtlAeChzdWA884MsVRxJzWpQPxg8cNwXKQJPPHf/zHX/jsSxqgzv6Dh/7h7/3+z195hVJCTTOa2p78za+FI3cri4m0tLSZYN3OWnOBWh4EakoiEL8w/FiRfaDEWDLiF6JbMtFvtt3i8WBAvYBnnn0eL+mwo6tnU0XvxkafrQ782o1N9RYaGubmjWuPWoQsLh/Yd1C5ESbKycdOSEeWHk1rwQmFo7CPijJrF9edwmFjlbikj/6bf/NvWh48NN/9+/bC+UJlBX7wAVR6Ixdq7USXUZiUk8kY8KvRvZsI8YcZHOJXrGW5xMk+YzCkJ4OoJuFTkDB+ExgrKB3D43AUFOmxf99BQgE2wagkxV0rOF+3MRc//sRu2+5W05s3rtNH9jTEj2vt448/dL751FPnHfbZHldV7VBIxzk71jlz7hxjHd7Bd+rUCYEETz99wTl7f28fTSqui7HYWF9HrTAdAGokdXUABB04DIV0AiBGGMFAUZtIuLav8Vkz8zR/i82f/Mmf2EcyIrEavaANaTGuuHMtdUto4QVjffGLv05LCjizx0VOzXCDBjRRVN540Kl13bpytbi0xNCYDO5woc619xRsWloIM6h0axdFeGwKeThIixHFgeEDBLYT4BrkZbd1prZM03Dohwy4mZ41tNAgUucbQWYRPRWSXCOOhmWGiG2G0Z31dLkQqry0teWRTRGh1Yl1xeM8YYTQT477RYV293Tm5GQ9eHDfhlgGd3XNDmeOHEhGJ+0P7t+3EJ4+c8r9juwAazb2gnnv//7f/3saDRtRKwAge/70Irrwab6IiKVwGD6W2gWZAKN5mblIgOkhnJHn6NmfsKQr9YKsQJJgoMWfXrqFUvOFN0ijd3AnNOoH0T3l3VigJWP6gUCkgXDz1QzABvIg5IMKPvVGT/Hf0Cb0Ag5xBKSSJthsyv2EECiufz0AAwUJalQbnjv/pMe1VIud7iBjmMqGHo1oEy3pL0hmXkNSxH0yRRdzjsKkWCngVSjwSuqmQlSfXSsI9fzuu+9b9ugOaLSmetdhdPkhZgQPlvTje0THaWZHBUMICMFvgjjfcOgCD8xBGAC/R4zrHZOADS3+7M/+zO2nZq0r2oGFoR9QmS/RwLEowhhSVZ0QeYqRoWcy6xinqaFeRTmmvUT8KAMYHUOy/CQYgMpn2EN07+CEalMwrrkAGK5MWRtzEd+CiDoBng94CZ6jjUGFhXRi4hDlBUWgMpaWvgSYbzTwlCH073svI2pmIsQEEgyEZ7iLjGJt8I0p40BE14PHvXSOOUlfT8+Ax4EdHZoSdBhoLJPCP2ExTElTbWiR+lxaGZ+cvXPvoZjR7q4esX92R5aD1vZOoFF1jphxIBx6HFT0CXJgCSGnuBTJ8KFFhf8J/GgXnZdVB/8AVWNUABu8/N4/+Ie+hDfeVWEYdDFZYIi7mVRqICVjq+w+7aY9u1EqOms9eFxvZgq3psxmxahYGlRRhoGlYDumppJTyprDRhtyhH9QCv69QyyEYGZAKq1tV68YjphpN0O98/b79rRKYdrTtrd32dgcPHC0vm4XE0qxF+UQJSbFxiTW1Da4LUF5KJdYuUe5u6v/1OPnNCsoLL1/71FGZq5EaofvWmZl568LvIhV/SHDvZZ8zzHb8eFq741ty3XLo/au7j5XmzNJ5+aXWcCPWtrFAnlWCX/VGzc2t1LTMg2xuLSWnpHDkdHT19/R2aUuvqIet+7cbWlt/9Zv/852rJXil5Fo9gx1G7knXvzs5yB234GDwoT6B4cE62flODdYf/75F3Cl5F48MzE9U1NXv7YZMmIVSt5RVaNKEvQODo0I5JO6gFJQFNmfbvb29NsP2By6W8PSeP3mnanZ2fyC4orK6pn5xY6ubjB39w8prm+apuP6mtdef9NVcbl5Ba4gkCLy8i9+qTCRpXRsfNIWCGv56bXX37524+am8+I4lxOoUVfgYEe1a1etch6RbkUgZOryIDxqfiiQXX1GfCIn2GZSgX8K87t//dd0FDFHcXJB/B3F/Of//J+FsmAJk9WccuDe8hPOwQDUAsajkWhOqxjFKDBSxpeXlbG9tQ2f4F6iRHzI1/Xr17C3TZRnMT8ZJ1w6wWaECM97x2DYjMDSV/icNrCP9RRmI/5Yl16lojnO+DvJBaXhxcrnmwM5CC0H1K8e6HygUnG0EzHn8UEIHEt+9eCDxoJqHjy4pxlJMU0+LFDZer322hs2isoGSgImX8REDyQFtC2PHhkXfaN6AH6YHKYptkpgA7VDcrWEAdJtFuZoLMDr37s/zUKHADMWTAoZEMj0e7/3e7/9278tzxCQnhJ1rIEPJNEjlZVKVG+EaJzI5UrRn3RrypBm4da5B2He0uAaAXoAeEYxU5DoBEjIxD6JLpeIAgwvyGdpUEruDxZNxHN6//5dWwO+10uffoJSx48dS4yESDgW5R4BANvAMe+deyGwHvWB54M1jnI2dwQCFQ1jSbLEAMOviGvuVIqfrGXYDITULMDAjBW18UJHPWAbfZq75Qbw+IFuhXMkQFkwm5cPhjAWJLCCdOizp3SlGUUXZTNmGy3N6sNI2mMVkFDXPBRwSIcLBgEkycUMBvKBF9+FwfDpJ+sghY8B8LbQ6CeeOEde/vZv/xYSCItRkNgEKU+zMBfwk4jHHz8FySK3yZ3HTRzwpsBBHmW86PItojEnL6+0skIRXlV9bFS4OBXXoivQ1KDgQTIbEvOCXvBDThHbVRW11SVbHnxr1vqXr6JQ/t/8zd9oY+P75IXz8AY83lWQ8AzfuH3LT10dnQjqA+rDGyGCN8IFSKYOXPkSn9y8fds7ufOnmQIeMgkUwunNlHELYpk4u9qMyJc/jQhy6AXS369QtkA6QTK7ES9oxIEcNDAQfHhW1rffeUtc0+49u6DPN46bY2Oz2fdcGuZjT2MAQmL+1y/eyC8u3XnoIAiEXUKQq14MibTgcyFfy8NHfGDsZ95rdTZ++OO/owqFKET0i4dCqDQhET0PcRDh80cffRCxVuORzeJHSZGhKO4Mqlt+X824gSl6K7Q5IKop4SQ9YmIA+JI9g7NhB3J9byml8vAEdUAMYNM39NHGlnCCeOYJANy9Yuty/qkLGAWdOCyIjOOY3/iNr3zy8ccUk6gpT5l4SsRUgmWUgHRaA6mETpFbsTLAU1uDtAgwZXFznzsY4ekXoW5zSSaFbiMPPaWrM2cfR2xB/a+//251pY1HLLPALIiT4D+cZJo8vkioSK2UwqL8vKCas7MllJgpeNJTUz98/73k+Di8bnZ6sKkQdzQcalbOAo/uiDhn1wuLggucFOGzz7/4WeNyruI8FgNJaOvoMCIsuRCA7xE+qy486dyNinFajQR4YDJy2bv5QpfCJgwRLjQH/VRzwMxsSL2K7A/Dvhk29rjZO3KREzH+wq99XifGgnaQhxJ7CQm0KgDMFya/8pWvfPTJxyYOMCZge1cn3aExqvnVXFiqcsL4Tex8HA1THTz4vHe2l5FyhzbEfaRCmAR9ZIF06a9Ud6Okzs6QWGcxesYP5FzkDxnABgqeKoHn3T8/YUi8hEayQnGgcwYwkALG1p79+8gtJaUBwuFSRGFUQ0VUhSGcuXiByWfvsEpEaQ3vMG/PJnVempqE74OH9nuQI4GU9fZ1s8VjF7bHxkfu3rv9wgsvDI+ExDhd2WAIcxR4qnAkZqBuTPDDD4OMpCYmSOo3BQM5AUA4d8nB3nsffJyVJ6YgbUeFUOzemdlpYd72ADzyoRTa2grp48amrSDWFAxKgjCVeRmU20ZApOtpRKY9ammGCkiLKhHnVGBAUD1o7DO6IGWENGEXATYvXXkKVLy8yACBUT70CK7wrJY+IAh2xd4aa+BLGkBvdLfZaeBX3Ku3qLdDM2gPECYH95vR62ur9zTthsaK0nJxhlAxtzCrFgEGBvD777+Ph1G5u7evnL2pYm9W1nsffLJ3V1NicpzrnyrKSl988SVu+5nZeaNY25588slxuRmx23geqpGMw7X/2jVaCDM43QIkMECF222ilSYiGsTtMy88NzwUouENh9xMfAVPwW89M31hBZWVIUzO+oORDhw89Pa77/3spy9XlhVxFJk7BgO8qcEeu0eU8w9+8AOLMcXFjIMKEwnHhqn88at37t4DzLknnmTEs4ApSR59dWkNXbszXXAnC1UqjjLT25uxbFnGvesCObEsw2p8UTvGys7NHxody8kv2IoNKY9UIjv9w48+EkDy/DPP9vbfnBgdk98mwvWDjz5hzob6g2npssxb2zrSMjNE7Tv4tUOWh6kCkqJGaMRnvLOuRuYmDmncxW6Le/vd9yGKWEkatcHo7h9Iz867fuuWNIMzZ87NzC2lpIdF+u6D5iCuqallFdVOFccmpnPyClUxmuf3ylZR270xqyzjHPejSftfXfvSl7+imI+bWBR0J7eUkuAZzAPOzZhYpr/i3PIN4t1surZeXVSiUiQSj16/yXIpVe+PyzM1LTYu4bU33lIcoqWldW5uNiev4MHDR+hy7LETFNetOw/EZLo36uhjp7j8MXdfP4TJeU06cvQEth8emUhMsiHOVIySTpuanrlzt9mVjqhsHXTKZLdg19TbN+QuHdf8rtMAAQAASURBVKRU9XZhceWlz34ecojq+NgEDz2jzYpmaXCoUZAU5AgeGhub2PQ4gQ5UGtvaLJ2JRBw5okDw0tzsfEJ84o7KKlmPLsJjJLnjhYlOL+F5+pLzFX35zgb7+xwtChdDXEdGrlO07rghh4r73d/59l/8xZ9PTU3yfb7z1tsVlWVOWYUy4wQroGChcCPs2kpCYvzqmsjNED5OEcFb5Y4TrC4DKdfDvSIN3SGGo7ZQurpmR9Cxzml7+5QmxdLq3mRkZ5FZPAA8l+SwC3NCjkSGS5fEC+jnbohhSIwIfrwKEw7EpG+xkxS3gA1q0x6ejWKhUZne5SGedeFdjyoI5TtcVXTh/BNMn7npqeNHDvNnkWLCqwLv9mayjYHTPMfp+NC6gLsaGuqoO8u6qHGnc5JH/+AP/sBGy5/WFGe8R44colhQR9yyKRcVBae45Lfq6h0Qa2h+Oukoe/bsgmRWGokT+cactcQ4+UEjUYpgjiChl5ZwXIx742LD2QKFQC0wfnCweCc843MEYQnkh2CK6SILguYJeyTLqJrqUF/SmRjnSSxLY2W1oa7ejS5yjZSHd4YpEshh0Xvvve/4jl6qrArlDXEgHiPs0GsjZAoWbuzkexqGPokokyVcUVYasgIoHOsUm5sHE/BAZdh4kNKz+EZNXgaVx6k4lbsufnIJcliNFKZZ+J4Zhql+8MPvs1AV2ud1tmEAQ1FhiU0vRaqmgrwgmgpR3D1qEx7t0DbA0uM2VdzCEvAU+5Vb1lyiJ1rWPj3/8Ic/tJn84IMPKBlIZsvCqcPDza24nr6+r33tq3/+53+OjkxY03GFMMUo3pvJQQOjyCefBOejnB+qQzw9OuqEoeJXW1bbb5/x55e+8mWrDwZw/O7+kBrXlcYIW00BDLowOIkVZFpuLLLAvn37Jj3ACGlsrIcrqlJLxhVmxg+QI+DViQdooUJAalDsK8sE3Dfiuh0Djk73KlcFDHPUoQ9EDKs7OrAF3doSj8DwPoxkb731Fl8dsAFgjoiCWGhKsXiEfPmecPkSyfRDkP2q7EFoMDlJLsw68JUKbGkZgXBVOwpynRUsuWGmsqoGyzz7/AshAACUjrZxngd+/vOfo5kVDnzWNr0wcy2KGEtfvQPDpSVFKsCIfMjKylQtQZKAGjUOwhhkwkzFLanDYEsgng/End29Ihorq1L1yTwqLi4hP1DmJ5YJaRGVBTtEAvog9OSJoIjxojqbSOv8FwxytAFmew1UMHCF2hpyXURRoL1fEZtBiS8triiEt6gSkHvcnwbCajjVxQ0ONO/cuWtfgcC3795Vsobt6HEHr5qBU/8eD6ZMZL+ropWB0gSBiFegiJPC5YU+y7TTw8OHjxzK731sr1EuXfzUcqg4Hf7DW7aw//Af/yO0gT1uB8ID/nJFZrZDtUFbdh9wmOCo2zdvSSkTuADmK5cux8Un5BbkiVSbnZ6kkW2lACAAVRhpKq7ibhdHsRbivYgus1jdJNyJj2lDh1lvv/Gmq4vQVBGY6lpmfYBflLEdGiDJG5raqMAVzONvuo9LAEv5E/CxWxsqRkWximnCUUlxKfwAGCuLvdGbrpgpzBrAICgeNTWCSgz0jxD0I4ZhwvLlQAW+pIXxtJ3FlGoG4l4i910D27Mg0QYRYV5OApLpCm4xPYVlIMsJ7Onc/piE+5UOomJQwTqBJbxs/IxlOj/96U8l8WhMwuXfmCnMOEGyX6TCdAVUGgkTYg8/vfPOK2i0b88+HiJfWgCUTOnu7hJ5z740u87uzr179h06dNCtmR1tbZ/97IvKiehWV0SGekVNH2gxg5oIGNAFAk0Eqsk2OE0ZMwMbWggqT5W1hA7VzExhxotQSCKXouCnqGCzRTyoAUIYAiPlZ2cR76mxUZZKvnOzLqtmwb27D/DqO2++9cxzL1q6bNrV5E5LD65+1YvB6XTRTIkYQpijD8ZCKT9RH9gekEhpgwp+5IAZrAJss3MCAGN41by8awYkxAp8qETs5iYK6hyQGvgeEvSgc2N5BznpJlA69MG7lj5E+d8yTK5F7RuLxkRrCIcT+wGdAFX/GlvhMIOfcJGu9ABgUyYvfDAGAgOvqmXMXDxrdqGQfaZclaxV122uro1NhusSt7eovkQplTAJzgZFusIBSRKphwo9c0M+99yLuC6SejHDQvKrsSDEXIze0xcC0hhG2M+VkGRBV7OzcypACfbIycoUEqM4IE5z7Z2to5A8oe0/f/nVn//iF3wfWAXd4NMQhEgMCVpgCcebDHoMQ0nCDMSau3G1l44laoWtwCpyT6f1m3xZUAWH2PwDDLrkI129el23bMSW1jb8z+Pe2LTX5pDN6t48md/QRSJYId094cgFsZAbukTmPGhumV9YxoEu3/VvfCkkR5GRldWN1LS4peVQVy1uZg6oiJKVnQs8de4NNzw81r85PD2/yFFSHUJi7LYym/YeEJq1tLwu0pPnyVVot+7eb2zY5bL60YnJheW1pt37LKjAjk2Ic7nmzqIatbcftbXrXz/Hjh4Z7eohXxDOiLGwoSaRwWMNMSHIXgbj2Lh76zsAD73uMG9+GGwMW8zt+MSBodG+geGM7Lzm1nYQ4ijHFDaxObnBAcaq/r/94b+EOpf1mMWPfvSD/KLSscmZlPSshKTU0krp1Gm79uWtupRwZ0MI8HVV69gkp2x5WQVNy3q78dqrIxN8bPEP23id4gtKKtgXg939rZ3SzBJJ3627D4mqM5KVjZjC4vL45OZL125SCAraxCUmz8wuZIeU9D0sabZvSVnF3MJi5917itW79E2sjgo5VmjpBzgBjeRP0xtsSgwDJ6EwTmysTAb3YdXsCHZA1sY6M1EQgopxrG2KmhQsKyEdTKgfcCv4hhbCbP/8n/9zWWce//pvfI214YiA+Njg6ZZjG0vQq9YCw+E64hYQ3tDAxqI8aUjAEBNE0TOh1kxXBbl5qOZFTjEJ/WADg+hRJUCP2ZBj1+31DT5EQzibklGCz+ntpqZGgoyyHBc6J8X+9KCh7YW0Yc5euXpdFWpmn0M8ekD/YNDGcPBDQADpMxmkIlQWMk0dykvEqMDzCOFCd6KtDTgtuL6ETJ344Cczood1CzyOicDqkdg2EyEvhNE3TDF6EsPwN3OEOB9oqm9q7Wi1GzGQiAH9a6wyeLDz8nMhNpQIz87ZkKeeKE25wNDsGeudeeFblrfFzrOmTCVCuF+js4MHWojzTggHLwMmASqrj3lAQ2pmyiMjK9YpK5SxCB0M6MHEKQ3U0acJojvtRC5MMEq+qFaHBz+ZCz2mK2BjAJM1BQNhFS8qFJBED1YftrRZ6CGKzFKABIq9azjPGs6XLCunOsDQJ2w74KJYYBKBrMtY1MsoMGxo0/cUbOhHD0oXJPFYdbQPDo8wncXauZjP6BqDNqybSXZZ5XlZ4SCdUTkQPS1UudGtGmfOWChsJ9h1OAEacT4GgG3GJ04G5FPPPL3/4GFX3c2uzJhXEKWUFOQGEvxDi7MFhpwP0oTwRpIw2fQMUVmDg0O+REeggtOaa9PuG936hmkXFNH8wkj/sMJuOsQzthlKj6gPmT4V9rFSXU0EyWznuDA8JbeTacF/UFKAduE4yCICSJoQWiDfBswyRPf6zO5SXMdP4fP4KFLiT6jTs28cRyAQzgQbkFDBUxrr0PGwvTQ8+BJU/MeuRsFaAq1hyaIInxIexsYUpM4X+xBurrFz8s4/ceP6TcN4tbXNE1EvdPKiFq15jLCnn/lMekoyo3nQMX1JocsB5manhwYHZyeT09NSo25gSyrPDV1G6yWlDPzRH/2RYHWIoF9EB0FEFFZIZA+5NhLH4xtc+OwzT0HEP/+3/4Jx724Y7BI4IDkZAFHKYSMGIj7jtIvuuvhpjh0+onPY5OXC2cxizIEbpA3YXcCv/rGv7GwsrjLigwfNSqiJAjUdwTw7a2tV2DCusjxWmkcP7hvXPvtvv/89QxgR6vE9DSXwyWvDxYJbW3wgHDBuXFuaC5EMaPCjH/zw6fMXeHmHBkK8LEuJa+HN118za6PY26k34jwcW9MpOEmfLY/aKB47KP4V4VnuxVzbCDl/isMr8KGyrHOYQpetJgfmUDd6fo4XOSU2IaTSMjXCFt+1pSofO7uJiXUaw6yUfQ/DOJJIs3UkodszkMbz55/AOlYd+Mzny4kkJAwOTjmg4BexkoHNDUEolYiT4WJjtTiriMWPI00HPQmA+wg9XllW7jzdFchd7cp+9Ikzsx7Y+EEydoQuhbG86H1cGGVTnABLOA+hxagQJ/SFGcRCFND6HqrNq7SiXEvUDNvrSKngzbXVtVXhCr1E10X0nUKw5uaEa5q4sZBADwRDRCYLd3x8FPcylbj21R80LrOGScUg04aEEAPKBcMgpXQX7IEJubtSU1PGJ0TgDTtecCbT3dMh4rOqulJQoFI9ua41HRuemJrs6+1OjInjGjQXAbuYFueYDsw//+yzRrE17VMi2v0G4+OlKnypk7Mdo1YABtZMezKJ+nt37cZQjXX1xAR/WjauXrpMekMiUeTV2/sAYCrHegc5xoYlOgtm3JpNkoWHirjHeP0DY1wmiysriiRcuXajROHC5lYSqq69QzJ1qxYEN/N8itfn2WI9OYuMRODAACY0OmwgHPTCJOQHIy/LjWnhZVxaxjtaaImaXmAgg9H2OvGZfvGsbsEu9AZOiJKnfK8xKhjdg959oyvPwoMHfUnGI1HLIYVAJ76EGS2jCzAYtIc63KIxJS7Izmc9IDTMaOCzlZK+m5gaV2lBP8r4cOlkZmVLHeD8cC3nxOQMlkhLTVxfUyR7vLOzKxTbTkkoyAn2pbL3UKqUfl4QjaXRkbG8vPzKyh2jo2MBCRlpZJYViCcBZspOohwSKotlFpTJ3v37qiornVtJ/1VgF+cDac/e/Rrbmz377LMKgn3v+98XbPa5z302NzvdDWkwrB8iCfnMEJaWjFiYp3xIgZmatT/Fnbs3yhqsSE5cQopbz9nQE1MqPRe55raweHqHeJupWeW1mRS8KEKeJmbmizTeTtDzwsra8LgLfTvgBKtTI8wRZwNIYwjYpvZZV7FxKTOzy3Pzq9798+vC4vryylZiUoa6lM4p3LruWQAnJC8nTIaasKQPP6CdPV18QopvFhZDIAr/HKFuWXoYk5A0NTNPzTqTdKruejixK2mp6ZQzz6Vnw6jJadosLrtnZ2F0bIrdLPjeriMzK7exaQ9plT/Q0tqBBIwbEtTR2QMGLAS9oF5b37ITWJ6ddcdwRVVdW0e7DPic/OKVzbjxWQIRQtqmBoP+FzaNw0Gq8F9CaiZsU1nYMr+ghNqRK5KQmKrZ/OLMxkiIY3Z7rCRYb+wSxT3Gp+Zv3nnHBoB7ZXUj1q33EsdsBnCdBdWt9rJnfZYb4AqOO82tRePTGGN0aoGnYHHNZcPDsMw6LyypWCKVswtllVXOYSSo7Kja+YtXfkVqnnW5bGJSa3u73SkAxDg5phZolZiwqmq2BqwxHM4U4+4RWkbW5mbnYuPD1pqtyd0DMxc/+Yj/y5KhHg7p+NpXv/zxpxd12NjYQOcoq/qrX74Kq6+/8SsGBKVENblHQpi1YIbWlhakFDNtL8HyppfefvttpHzhueclV/zRv/t/eYRJZy1QTT8Y3/0DsObuD+NCJr5tiNT/oQOFiRLhqGwiN9PfCTkOtIRZiXp6epXRszRgHhqPCFCzNn5Xr14m5oRRngz6etkSk/f5sfH4hKBeeEY3N9Y9KOlFZKPzipZHzUjJAsHhJLS9o0szfnSCY0GhomHSsXkmSUhNrTkUiiXo0F5dsXZWCs1Gky8uL2tPM3OfWRpMB0gO8QiIx7FN1JAVz82Y5thSZpp6uXrl+uOnT2ZnZMv0UyDS9clEkj5zBiWALb+wKKa9AzBOcDnahQcYlzZAROsR65ytSUuQcd+gFFucQkA7JqNsGtkITKkXX3xR/K0rTYBkEmwn0rS67AZGd4THkwKhrQr9uVoBM0B4VCdDIG4BvG+MZdW2gpgRzCMBKYYE9GIleyEW4cL5vgQGIgLDl6xtwEMLKqCjqFcqHTbADEXkVOc2kI6LJcR7BPkA6WJ4ThAOgiPHjgcjKhJEzYVPbRrrxq3bRufEyO/r942eqXHpcHU1lb6HHBqYEhNi4EyPvOM3mhC/2TV1t7eZlykbIj4hfm1l6dqVS8eOPeb62whblv/1X/81XrUK8+IBz+nW4ycfY7J+evHj9c1tTlv4d2u4HgC2tb5hX7odJ9Wz6NwT5y9evOSU9fCx404p7YTpiv37gmvVQtDZxQwICw1shB2IIksLi/yM2A9gtiX2/PFxyaIMAM/BD9XXb4UjAk9x5AWH1EbYGT580Ix25st40Kavp4tFLa7brNW4OHz4oOgMEaq8fv0Dg2mCI3Ny+u838+8YGirYsSTFZ93StIiLt+lzQIp2s4ch3WJkTDxq9LNnqjJrkpeE9YYF3YGV7QSvEOrIh8DDDCQpoG66w29hA4B4ZsvUw0MQqmuUoHAdc0Rlg/efuck21dhxm3unJseGUt29wCJMiLclkMaiBrNfhyLXiikjg1QOuZggj5ofOZjG9NCHV4yF/GTJfHCeb6LjwpppiAXidTOWHDI6lFjiYHVmgGEdhS/0g1CcjS/xjSUH5FFdow28wBHuxMScapRdVJgNAWuaXbtx67nPfo6mQBgjVlfXXHj6KdcI/fTHf8f5rfHo0KAjTnM3kN4AYKkbkNUg3FD0UDg9D/f8GaW0uEy3yMne/c6f/pmfgKp8akJizKeXPuLuFDpMXwOPYU3XoFbMZnCQYyZ4JoTBZejqh5lp2wkAqyRIm0ZFl6Q5BERRRysq0y2tLufm5rgUXYLdo/Zuyw/Y1NS3ecBVJk6MdahIMMAUI5+bX8Tij585q5a1EdX89h7LJpacWlrC1nzhhc/wCl+69KnYQ2fKJjsxMZ6RlYnbigtyBPebF1HU+f2HzVeuXyPArlgCtkQuE3FC7L8nzz0hpIxNyX6V+0M1k1iAyarB+qYAfkQ3oyjdqTnlaKRtkSW7KOTQoaGxO7UCQs0IKlxBkYmQeVK2OKsP9dH2+B7DWCRQh1bF63iJkOhWP/jWQD7bzVLEDEFoodPBk1dQQMBoWx1qrxPt8RJ+Ni/3ajU3j5MZetOZr6F5N7GiVQPRh4YGklKcLLd09nSz8/DbT37wo/179wLPfKOGqUUOM2Mez9rg+QASj+sQAgEGWrJtXHPUM5YgDngYORDOdCxjRFF7yxgrH07wA4JW7Kim3Jle/lRXw7NOfvQDY6YDLbZA8QlcUPnsHdhWmObewxuhWCQzOVa4s/zVLTFULCorzYKYePZ9BLEA9jIQafJTMI/i4ggOpAFDz3Crcz/ZH6IUypqXL/WsAUqZI+r4Bla9zFcngXYb4d4uzUwT8DrRzAfI0dgovoFYQxMfnIwK3q0WtDP8II2u8BgCoZ02cKUrL8+aNbeAoa1GkrY7OyfsYLnBIkvbFi1JI1ftqFEn0xWVwUpufliYm20f5ToH5x9xMVmM0djtDXty1xacP3R2dHCAmwMjwjZnkpR9Urx71x5cZBSjg8fETZloIBaKmx12DdRxTa86LSGNn68xXoh/66Nm55+2G9gAp0Fj7cqaLHOxKZZzl06oxpOSJDr/JqKjI6eCKV+/fNmUIR/zOxPAA/AD4ZDmLtvm1hYx+tmZ2b19g/YxRSXFubkFLnkoLi5jBLc86ujuGZCFmZScPjw40tLSlQUdhSXqcrR1hQM6PQ8MDCHr5OwC/nHAoGfm7dIaWjukjt8IkTbFGgyGWsCh5gw03r4f4nMY8dzb2GZlI4RpyehVA3RWjfoF9eEW9IwiKYkpW3EJXO9Cfbbjk+YWVwT8jE3NcqKHy6jSs7biJ2MSkjt6ehdX13c17fFZVKOZcsNjH5gRbM9vYkXctGlLTrn30B31ZrxLb3DOkneWVZ6RPT2/ND7dhW0wBvYwNczSMzCkEIwQfDs9rJlfGL+yvmYjiEb4zUssDcglWcFq7FaobDO/fA8MGPjGnft7Dx5JzXSR7XhJRZVVFrmjjO0OTdT34OjEXGb2FPNrIyZxYGRyZGJ+YkYQ/PbAiOo3uT7PLKw7cFvdjMvOL8ktLBPsj/PvPQx5TfbOj1q7naqqHDU8Oi08u3ZntS3i1MSomEDqfXJ2vn941FmNg6qEpDRbIAkF9vkEwbqTmaFaVChORdhNhHRzEL7+hsCk4/4kL85hr924sWvPbvevecTOX3snyTFloeaYsvGEl63DlGSgUFYwxrNmjviZTDHraSeLBa7wE8w4iMO37puFdtzISPWTNhZrR68UlFHwhm8MhP+juqJqRxXtSjxNHNJofk5cvAFgZrQjCF8qiYHPPdXR2a1PUZrMIysOb2UIJRofRS96wCPmC1T2Bk1uBfFhz6HDCbwPyheurQj8X1yYc0sp9asgJpgxkoVefQudkymQsM8Q0TTpCvOKeq+19A0gDUTrAtXs6BAWgs4JGsXFhnPWYXbQa/p+0qcvKTdLOfaAN5bJ9cvX9u/b9/Y778qx2b//gBtXhkfvSJhUSOrI0UPHjp/4T//pT0Q9qKyqSAYyKbyhT+sXGL773e+aI/BMjYzrECSApFjMmkIAW25+8CiJs5Bv3R6qS8WUl5bDoaVKURClM1XZzs0vFMOp/fb2ltMJysrnwOdbW8aCQ3D6YLLIZAEyQbRDdOTzgUJ2sCObDlFsb0zW9oCyMgowNLA0eBC6WAeONVQB9IgvqTuEw9tMRBYnhRmlu0d0Qo6QQNQWSKLrtcMBX9oB4geTNU0fLMpg06Hh9uxqant03/bDTonCId2jE+MybQRoQHuEE8IBDjgN7ZpayzqWQBTDCfE6cuSYifsVw3vXuQtDxLwJ5oS3vXt3P2prhSh7ErQ2fQ+igo0rJuS3wJ+KfVkiXV2nHGxFZaWx6H8Xepx9/BSEOPcTEdfd2SHuQLQbuUA7gXCQA2PS6MXqZGQmS/r0L/j+s8I2j580Iz04p8xCJyarDCiOJcjETRkYHlsnOVju9Omz2lvcYePmzds23qVl5ZqxbXCyI2slOnF+GDSSgemDmXrpE7rwJzBwFFwhPVSIVdMVoQCqd7eJoBo3rV+FqxnRuBYmZCK8NgYiRRMamnbdb36o9d37D6DpyrWr6DE6Nn7o8BG0PHhol2BL0aWu6GravcfR5PzwWH5+hsV0g3t41lUIm7wqomLMSpQdH4+ARRIkZ+vWrbvWDn2KxLJHB2VDQ0gr5GY+e/YJ0VTQbWKGAxbGUvUJcI6THBGIR4cXz6IrP7RdAYHx2QkpBOEkIkRyYIFiMhmTNyucF2UyD+IeP+kW91OFUOYbyKKhREt/evmq6nlnHj9NLwz096pT4VJoENpudnS2mcu5c2fF73FsW6icsRpatdfMnFw5Coku4tjYVLyIB4UnUOzB4ydOxkUKS9+4dnVldaGktLC6qubendtShxXt+p1vf4tCJwBmx6PMHZafF9dQ31RRXq2GN6W2s7ZaGpwZYSwyQGuYmrngIdUpXMMsowBd1RxYXArVP9iOB/btT1SDJnIqWlJauirIOy0Ff8AS5i4rTxa/KzGALatcgM16SmKqAoJcQcTmxRdfcBSgkJ/33ZX7HZKbhxi+1LTUXbsbHz64w8kEjaPjYzV1NQgEmdyxjvZwFfFTgmCdq2N90/5QYnt7dyeNY2iAQTXtEEqpRcowB4MsNg6GiTpqsjUnxkYwSWVFGV5ER9PUv+2piZBej+vHO61NOCliYOSHzOD2xsbDZIlFyyvBwjE01neOEYlVU/EgxmenqXSkHto77/COwLb9jyAoqIPS9z54HxdhGAqIm4aSNTS28bLocKjbkZcU5Pszqj54jWgZ65MwFfIflxjSYfl9Pyc032CRegsIhGqmbNl2Oox8NC/rhH7E52hhUo4UGLhQ5ISHVIsotYtQ8wSK1LzSz/XrVzXW8uHDB7ZtX/utbzA6ZW5ElxwLoXpEQIUiCuX+7VtGEV3Na250KqO2fjcnqqyaoLDKyydneVDyh8c4i90yvqQwpj0elFJ/khFxuG09kEzZoAATtCAxwBxZKnbxSI/cSBYfqrzYMbb6EyHQy3RoE115+c3j5JdmARv6evnGS1g3stJ3kGBhIHSe9Q0NY47Q66fQdaRGELTISDERI2qDOrhItxqQFwpOMysxLFmofNZMGzO1LXGHqz/xtvZIEJsQ4kNoNHwtRlGwX6jeE+ueUYtLzNLKWsL8gjll56TnZKWXlpQL9LSGHT98SEIwwMIWdHFBPzQAK1xmv6XLghH4ZHXZKot8oMUV5IVkkVN8SDnk5hWZmtft27fYIiqrOHCAEwyMjqbmS1WAHCnwaj9++syvXvlp1CWG/3l9tNSViTDTMSqm9Rlv2FTjZCd+IkcE1LS1dqu6Vl5RrSay25AthGXlVfJORwZHpu3UZx+R1vHRiZWNzYKKzIS0jDWFBWdmVlfWShOSxL4k8IA2NCHc4vrmnPvRlHbNyhGSNTs9y5HB2Tw4PA57mdn5PijOjk+0gXBx9SBENU6BxeXF7Zh1HlMbsVSB3jLYtmPQfR6GnRDEJE5Oh3OnpeWrHkT09e3YsakZLZdWJ0XWujtcWL870dT5JlkqC1HtYtmlx6QmJBUWFc9GrguwtLpp5X5zW9Q8gsPt2GDJeQShE5LCTmloJPAMVklLtbgXxySkiLWAhoW1sUQB+2nZccmb3Q8f4kZefGdb/CqLq9xWqxiyd2R0YGTEQoC4eNvsmhp337x9b3h0wii5hcUpSSnDwtuDrss1hRt379OofLiuBxwbHnZY6rRsYmwiNikjJVPp6qT8koqR5kdp2Qmc/SnpOThneSMmThjxVszS+nZKeurkjNKbM8rpuLgLfta34weGpSQRlfTVjZiiMmH66y0dXRMzc/xzynmZuPGdb7AkuFr4YoQ1iKl99PCh7aVbTuXqyCt74vyTqgmx+zmzFKAb6u11jZFwXLOmP48dPeoQ221htA3b2oJll3v23Gnx/QrFoiev7djYaFHhHtIkpcodCy3ND3kiLMf0A1bE6iLp3bdqdaYumOl887wJVIQ0Oe+oTCqxMdOUjw8be8o7rFIL+AftEMs3u+obtJT7GAnEPWVdwGDm9fbbzY+dOEbfykAwkD5VJvGIbVsQ7cwcZLJwi950wZ/h9EkfUkflHLSLi80P7mdnZX7517+0/aU48oLHNKDQ7CsiGmaLXwC99N/SssbxSdEhMWPYBF999RUir1lJeVlnZwfz5sTJ4y2tD2mnsvISGFZxEvwaq4XNSfRrn/+sJRIqZA/dvuXauMQH9x50dvbQWDL7JbO4tI4dIgXk3LknB0eG5dtcunSlpLDgo48+cQecmjmyiR4/dYYpwgKRhW/9goG0VBmnCYcPHTWvl3/+iqGJofseVTKzUaf6VIxRV1Acn84zszKQSkiJSUG7WBXTaW5+6FleDGi3f4NnX9K6iALzTCma37O+cYiBLgP94T4TvI1JkNsQxMoj3uk6ClBkBBLY9UXsJQVP4/fs2QvUoaFBvYm2pxi1ISARxc5BukaxWBrwBp550KyEaCUG0wlbznvUWkVKNDWK6aMFJodqlkzzvZAy59iku6cHnH56/Y23SFykQ3lHIVILnIZQD43Ioy+7RUqGtAoTvz10V96oXZ/JUptUtFWeP5PnDgZUr8l2Tqr2S6hlt629q1GE2Km46GTYvZDy+0XGq2jg1qPYhMT62prPfeYz4qXLKnd09QqtvO+KPIlkAsA+ufgRaE8eP3b7zk0X9rH5pVe7bPvqdXUOj+QXFaozbkYyKhl7MKPQpf22o6etrYNjQ8MSYNQLDmbX1JSwF2SyCuBDeLBUwUBh4YDZ6QGoIHniwlMI98nHF59+6kmWbVi+3YQSsfvt6PRvsloSCsihxAiUF1ZXBdjC5PoadImSta29E7mdtquCIXVT/f2i4lKu5KSU1CrFDIECL7pAch9YME74GRbEAwbtRWCBEglRYhurb7/1bv3O+piN9d7enuGkJBKSkeVS8bD1xH+4E52AZdp8rCiHh9zBqfopCqEu+TFQ9KWKDmfnf//v/53xRHFQW4x1MFSW7zCo+lZ4ETwo6mgMy7LmsZ1dES5HSyBF3JOhFCC7J6od9BO0Q+QaC5OPso6efdYPy29xdW3v4SOiLTEiaO0BOhwcz8wi6vbGOjn3rMpoPPHkEB/Ae22NQ4YVJZIMKu3Ml8a1WRzbHNNmcX5JNeKN9XWVQ77/vb8Bc3vHyNNPf5WhrP8DBw+KVUVUiu/I0ePsjN7+QUrKEQwAnBLIFSMhCO96dv3rmZXMRC6vrNBYqICVJD83M6Rnrq4Cxgmjd3k2aSkhYcAjTKml5cWoe0ZAF5WNFmHBjol99ZVfik/YdzAUV+HdUQX11154iTfLngSGST7Wkf+gQyBJ8lOB3qmPXK662up33nnPU0E+XXJcWg6rPBxMT7GPmLi3tw9unQIL90zNDPeYOKxEdzPFl6JfcA6BNwW7Ix/gPwoV9vAK30cqEWkPhyxFLKEB8sGAhZnuw04mMTU+1j8X4vBM1uioDBIAIxOYPcukpimYSr40EBnIzv1f+Qm+wTY8PbjI9xhb56JL0eXg4UPg9ydNoeIeb5whSBf8oYX2etZMz3pYWFykrBW1BRg2qCgux9kIbb4ixfXDZPQIAcHePsAbaIFnpkTRFkU/5mLWYRWM1OryLJz4kuTrllKgYsBPzypm4l3GG5DIFwk6ePAQqJR+glWd+7KgVpGHOQ0INr0gywfgIFEY6tiRwx989LFKLIwz/SfH2ZXFuUFmcmo6Js49HqFobCB3JCXXLKDdC640jpJD/9gDv1lj4NwjGgPeWB6kxM0Ryeho0/QsMPSJ7j57BBie9R6lKdJALMLpxON+sn7ArYl4GdG49lOeJQiGoLY8G1VeiAs5+jeQ/mEJw8vQBa1kXFFbECJKAkt4ROCmp4RhiG5cXnLct+6ETZy0RHnV8dfdt74Wbp9InxSWHgdgz87EbY+MBW+9ure0NlBZQkxJvZm4NZWe1afPDrL/8T/+hxbI9s42+hdB6ZOVdTCkDw6Ni/I3EewkNkP4KWEFknrEzgwJLE315JPnYcwpUNPukFyhB5OFB2oc+fCPz9CuEzM1FmzjEBibnhlV97qwtFxd16vXbymdPLewzJP9qP3i4QMHud6nZxYSk9OJJBeyojecojY8MlfXNmPyCktwoJ1aUtoWT/xKOIGhVtfjkpI55xXNsipqPDQSauYKkdohzmpm3n1T0gAysnIh3MMsfom1LteSJLe6Jn9nU3+OCnGXjRr8zKsCp9RVQbHQHW4wb/1DY5Djj+RUXYVaYdX1O5UnUkknf2k5NTPL5XDFZWXuABO0uWbjkJCYbluWnTM115+TlSWdVzTU0LA7XwVgJBdk5dGu8rxRNC2d8Z0qwcduYHN7I24rzqnCinOknFzbzgnBcOLuysuk9ko+Ts/OpZ0ycgr4IBjgqhKtrW7EJwiKTLLrUOKntLxkbGTc4c2O6pp33n1XDsDa8nJbezeqiSxSWte5B0QVlYZlaHPEgVJBbEJyYUkpJpyeW5yaDdvFOKfB6TnOOjZjEiemFWBZS81KLK2q7e/pCxRMSXXrmuKD8vHGJwddP8eJUFRYsLK4MDI+KcJTBbXF1Q3yNLe0qip54sKKPHXsp0o12in9e6fvdlAOJ0+SJrzhkq+e7k7sJyRS+G31jioxjeEGgJ21FgI8Rtb27d17UbzKo5baqnDJpu0ovUq+GEbRKvs8WXiV5Uq0LUz8xxwrdBfhJd0YknxRQYiLjpjQRPCznsFAEREHXwKGYGJjOKSNXUjcpRhGdjacMEGs436CKKCSoHCgEUzzBUt8ZmaOozAo1QmopN5S9bQZ7wYMe8qG2TlVWamyNqyUlPICt46u+CA2QxSQOxDVUPa4fCZJonSIy7kSEkOU/866Bqsn0fYyNZ3TM8TKSgeZfNLBaI4kGnmnW6JKzCNRLQoAHoGggSPXEXpEP7BhFgwVUcfEX+DrnVA8NKCOApRjxpWuzK5loq7O0U2sES0x3/jWtwQFffUrX7v86Sff/va3X3v1V1JaKXyqgAL0MqKZRlRgiJg3kM/wYMHt7e8RThauMYxxR1t5Ribf+Yw2uEIzBEJresOZg1BGRcasGgC2rHCX6Fkb+z04N18dipt4+eWXgRpVkhpAHXIYCDmwVpQ3jI52iOtxUzDrKCkpZ3n/KG4UB25UJcpScThE8E+kTS7OgUMj2h+a++Onn7h69TqHPfrqVnCasaL2BkUHVCPyskMvFgoX5NXWzs/O7Nqz9xevvOLXg0cOo4voHZDrQREkazcHHgwzxGuqqqPuQhsR8KsJx5gxI4jVeHBwAGI5s8wLbK6mdYTOCtYtCwp+hOAbl7EEpML0dIvLg4fN55LPl5UHB1zljh12VE4UzS6yeIUNp/s67t6+AycQyGGnK/BUlpfjLi8wiAyPmv60KOYnMoamyTUjMgiH64CnQ3Yy02hHeThWsjPHTrbNZEexb/MFWAhYqAhZgr0DYTPpwcK8XNzrrt7o0okH0IiTyJcIYa9OoKALnn1vUNwLt4w6uMUq9jnUuCBAvfEds7TFYWpMKHzPWIOHBIXMyit2ANT9C/zQ5y9cQDzWfybXWkookvXYyZP4U6kWj9mL5GVls5idZYMJT6+tLKeGyggp85E4M9c9Qha/CL5h7uAbT6kL5EE3IzoKwVIkqqer+86tmwz6//f//n/gNtssfKDYmTw9NxLg79179kAfQmJiWzQ8zcOKyRp3h9sl4Tras0lCuoFoK2iFIHJFMYHNT4xyZ2onTp1yahbdxvCQ2XALMlNCGIXwRF1t7aefXCTPcdtbnHwo2tBYZ3aYnqsPQseGR1EaQg4cOqiinJCYyNZtTnF93/f39IPz0MGDSqnaXE7PjB87fpQA37olH7cU9iLl28cdoZZFtsVx/YOKXTshWVpa9qubbRPjt0EC2qjIAf7OvTtiUTh7mDj8PZNTowJvmMpg5ptUZUh7UgexzgTsuZmnLACyDSeQCTx5b7gBNoSILa8t8zqrUHTq1Im333nzN7/xjQ/feZcLU0yzERXWmJqe9sHRytpGHvkHudg+d7fhWqul7WS0IpOLP1RYs9/neu3r6cW4UI2xjEJ4BCdgLN8Ahk8XEzOIMZXNDGKRKDoUDp3fWxKMgrlxPFYxcU/hCpCjtXeigi4IQQOakXJvTrGFHMhzIMa8DGbq/Nd5qPbipqRQf/WrX8VUurUuDo1M2Nfa2zgxf/LCBTTSzBDcpSTfXlRAlP4JgEFNnG6KRFiGaLG0pHCsZjXKy9uB2WzQRXyRcFZmSalTjozDB4+8/vKrjx07DnJBmRZgg4LKHA3k/J3HTjyGq5FMk+Vh0QpukbSwrUdjYgp7DosmIhkRLBsHhCwbpVcHI8my0q/JM85BPu+qAOF2XfkSouAWeGpl1LqCenKcA5kALq8FyyA1Nc2MYBXOIY29OMU5nZRmExCcuKvB6ZuVUyB1WAkls8ZmMGaOeiBlOCoIWmTVj/QWwvfhn5KiWZA4agFo7+Ubjf3qS3/CgN58qSvTTE0PSxcaGREpwQPPOCTaQOceQXqP4N+InmW6b2sDgchEkH3W2Mus4dlBM2xo6bOpUXwAdpxgXOyHVy0/5m6HhgqFBaEch6ho2a68uHiYM8IGwImBUmys3gDAykKM7f7aSn5ucL1geKd4x48fVTDRjC5fvixnxG6Zp+rzn/+cQXEv+SVW9AxhpxlACNS2zjb+MNMxWQuDZ2nYcOy2uc4XywwyhdLCkEGkIGTAZFLK22+9qT1DB5BwDlHmCBXWb9lnMBDVeKDSP4oTB/UxFOERY5mSmr6wvKIGpRMAC7UzzPKBQbe+uZhF8KDgWhvhqbn5EU6txcDbIQgswdUB4WhFjSATiezj0vMLCilYZTf9Y3aPDI0yoGkMnS/MzsXzOsTGczayZtQwcYQSjlZS0nyWSOLYRK4tw1rL1TUBFWurLlxgKMcl+BcORLc4+mO5Xj0YE7sttn52aaYqqzYtQ8zPjAAvlXNEaQtiNkFHu8jKuZ/A3InbJpt2CytL6zKDXe6RX1zCuROfvA1aAbtCrSZd+7AhDyEpIxUMKQqkKLyTnZr61tsfSPCo2FFRUlZuRzE2Ne2IT5wPKSCDUJGZkydCNSdXlpD0d8vXfGPT7oXlBfaTOuUffvSJ3hLdBLK2zqpe6h+wvYFOk8CN3GZ1Wdk6IVyo44N3SRfWYEdLkCSLNze/wPcoO+dmkplwLbfDNhNcX9tekHW/GZMWK8HAIW2aQzlc4XhtaWHVwV3R3FJConyG7Xv3H7Bi/RNvF3w6K6si5h2lRjk/yl3kihZtbKgjUyB0CqnoviBM7nPpKywPR/tgG3T9SEnxr159xT7T2u9l+0Q5S08S6Mghwp1vPZV+Rv/cuHHt3Lkzalc4e7QTsIbevHGDZI0MDzuBJF8WbuYetdOg+B7N6HRC+JBTha4u7GrKyUnpdBQb3UBILDwM8wODUAOJpBOZIoc+hYX8ppevXNu1C8UUMy0xTUZqX39ImNEVPtLYBMFgA0DpCSIgO73DwzIzh+ze1lbdGmtECMQ2U5Pjp0+K05iTNoapyKDRLTEI7cYxipd80e2ub7NSsFY9JbKMirAuWFufOHuORL/++usWPhsJCCHd7CErF7uKCUSlmDsBxAZ+BSQG8Cu56O8dwMPm9fEnnzo6IMvvvvO+oSkyz7qlraOjU6jt/ebmqpqdu3bWqstMq+iHgtXAg2w4vQHPZyYKLxvkwwbwamuVZ+EImKET4lUVy8liA6jNsbq8pDAoIZWKJsa1us4NfRt0AqMcp/3Wb/0WjEE7gKkX2ibqGjMKbJs7DDOaGd940lGAuf+Tf/JP5IL/q3/1r8yOrjZlEGrsrN4HDinURwKUGh0d803UyqSUNMZFFKmBINMWyAIKP86U4JzmLK+scrwAgXZNFAKDmk4oN3k3Aywve//FL34BMB1yJRju6uUBMERdz3xq4MS6OsTnoMIDsxnplBj2wGNin+t31llJca/gN99MiW6cCzGoSlBqozJNuBukTgjGXWGZRRXVBiKYhGhPQwgSqavdKZAyii4enL/9/g8Li4u/+du/LVC3oT5cV+X6P5Fmpsz/CJ/u2nNLD0S5vhequTsrIveU0ZT4AUrVrGBeoqATdrMWAg0zZgR+GY84n7SKJcF+LhRfWZgXvuHWFEb/0MgwQjjvOvvEEzY8/YMD+CEqHYFk2yoXp66uLNqw6VZvMA85GjheZsyYkagZXwJSlBqx3d7Ows/iIBiKmIGPxvXG5AI5pmfDBVP5+YUS8R356lA4GfgTJNPMzoSEMOerZ8+ehhfSLnTEOmfls7jaAKDfgUOHyViPwBuJ7ZFERpyBg508M/IMqMSGDAyOyOKyEMbnynSF9m3XACoBwnrghmQ0Ji0cP0yQ999/Vzk2dBVlhdV0TocePLB/ZHyCh54D6d6jZoUCTM8EoAlHGhHcyLB//0HGmWIImAO00rNEIjmjpN9dJkJOuOL0rLEXO4NgEycqSTxrR19f4uu/dDjl++tXrznXY00e2LuHtpKsox9RBHQQo4GBvqsxg47HW5BL6WAvoZNGQR4dYncVcmqUgJyddYwoG726vmZ2YeLi5WtMAYuohDVRKLZD9jOCkm2/SktmSaZ8eyBhcRlAyYnB00A+gSoZhW7l0SE5EMIzTS86hUwpT6ZfxNvbxu2s3y2TQRFrTlA7jT27g/wr3kdbQeB3v/c39x80P/XUMyxg949C/o6aassJGPyz03vtl6/R18wmF4S5JTdUPo1kfzpApygxmVdiUnztzvp9+/d3tFFk4ULKmcmZsdGpoqJiRbs9TiNz+Uhx29jacEu5TPPtzY19ew5QCkaJ31kHeGFUDOKFuBD9OTQczihVQlSCXVUU2UE0HbIiAQbTGIbp31deeUUIYFQL+4lqWF6Y50KAbcutS0Bwqd6sAXYm733woePC5194UQIQVxEgcfOZs2fVfNSYfkGdmkjyKHpRW6hPDLjZwvFiWjp1RPNaRUSEZ6aKVk4UtqV/Ryvg8QEyWf9Tk9Ok6Mixx5yJOXulEPfu3//Jpxfp9Kqa6uyMrJBQXlbGlBnuH65vbLAhiUaPLEgqEFqYmiSJE7czRu8/eKDbzq6uxqYmdwIDDwNgb78C3qSMaGgbPJjB6viEe1Qbqp/FIDPGIxpbxV1CR/0JEBS/6CIgzHP37h0ePsHTH3zwUVnFDlc7s6YVo5PR4Kxc55CAkfQgdghyjAUPkOkFOTBMBilKOIF5WmZcyYVeh5JkM9RgdVoVUcF27xzkIkqEFUngiXU4FvxVqenuJXMmSyVlZOX51UAECi+hBQkFts6xB61EOSK3cbWhZIGhzwh4QdCA6ku/kkH4Z9QyL52bgZmhOTAUDnPYx3Yy2kBLPDsvRPfaK22xUYeHxgXbRAWKKMEMc4S1L10yOcFpQ+z61vrsxPTiguTThbyc7PW1LYf1Lu9yXKCy5Isvfc7u5sat63yiTU31t27dpNm+/dvftN/mHdx+4uye3bupYxUtVYymEA4cOEJLuOWRr9eg1l16yTfdXb04XGxJbHwClO7dc0CVGxiwh6ytrQuXroS7XdZ2VBbydCKWO3rTSvlKUXWFgS5mSd2ets4O5eQnZhdN307DyrSyNpuSFty0nb1d7m2bmgnpGaL56aXklRC/q/Yrg5UtLmxsfnF0y8IlcCJSYiI3vwhioSmdnzJSLFyIVElOfnJ1uhh6fn1msWjj4dFwtargT5dJw1soRLu9BbveEUIFUJsAnDC3GAzZSCZl3Chnz/QspUHE8D/q23za3IkLsoCNjkyOTXyCjV3C1dnTo6Sg4BfB644jxAxk5aSI2dW9zGb4GRmb2tXQJMMBnxSXhHMPnyUYiDdKLExEegrfCiLYy640JjZhe2V5Qxnv/EJ5fuxsQfq2B/xWUFTmcp/RcVNWDA8rIhbT0PfYxPYjhIXFOg5I6LKILOFct8PyCxUKc+VCI5UkXTEZ0+fYDl46YSXSKxMTJRQJS2XP2o3bp2rJpkF6KSV+NQWsKEmCJq8KmdmdtkEuR3M0n5qRqXx2V0dbc0uXPbyjWoKWmNYvsTUlNWt8tv3Og1bxvrAna3Vqeu7c2dPXr1yRni6HwN1kHqlr2n3/3h2HezvrGju7ej/46GJ+oWsZNtz1lpjCHgpRN+J6reB8w85qQKjY0drWNpuMulMgWNGVD997V3QI8bGMyk2SCuyswCNhfYnc0lhTWwswK3tZebh/8CD1G7l2FKfZErz+xhsaW1MLCgtpLcnK4u+3e2LQi18fHhZGhkn0E2fOEr3Bvl6Cc+/u3SfPnrt27crhg4fMIic/mKQiwuyPItZqkctwrClYha4Q5OpmNCKjujQtxL24tbZSUCq9npcwzr1RhoiPTZLNCrfHj58YGBp2U4RFh/uWFqJqlMwSXSz/h3uVM7e3v8/t1MLnOtu7fv6Ll3dUVKWkJe+sqVNEVp6MyC7mqQqVzrcVtIBAi4giPy7cEOKbq45PZgalLTKEBsNL7n0TR0R5BrW2o9LaxP527jo2OcFvuLi09MST52CbNeYCqYK+Ppu0u/fv2/3u3rtPP85mCalwl1/88lWxW+G0JDtHAAm1QITh03YiJy8rLU0J6yk2j2yu8s2yldUV1FGN0Dor9IDr0LV6LEV8TJPQkKBlWaEag42MwD+3gnR/hsGHH3wMMKKKfH6lgSlAjC9CYWl16aVf+xxuNy/f69ASQC+Jn0ToJy6cD4w0Ppmbn8gMY9r1DYTrTbgR8wpKaYN333375t07jC4acmpm5qnHjsHh9bv3V1d6v75rD6EYGxudF/y5HQ72rfIIx3dDlFQ2f/bpC4xAuUrvvfNuQ13t0889/9d//V063W5c/M8zzzxD2yMEj0ywv/PyQWgKtAurml6lTHy4cvna7//+73P0iBm0e+R90Pm9e3eKSgpDVQahDROjLulInVu0eM/NTAuTkwo3PTFls+/yZpeH7G5qUO+Y85oj6s3XXy9xA09sXKZC8GOjZEfcNb3BbuEqlT3mMNSfTAgBSJBmt8aasp/nG6LufG8Jk18uthWEwI6ETpQ6srAImrjFyEtdkIutLTdvXRdLb/PDuRJxKs16nA2De80RZk6dOUuTUHboqbgL5t+/f29peQrPASozDJz/YCfLDRkhtoJ77z0QNX2cKKWlJKjzQRuov2Y7SPvplkWzseVi+0lxjIwKdqSB9OCqioSK8iL0xgHXrl08dPBI1Q5FghTPymO5clEoF+oudxxPwimX/KKyuC1nx3MjU5PJ2FMxhNaHcLMdu+X8wkhFpWWkaGXNHfPzk5R4WSn9JSDS+a9/P/npz52IOdt1nvBrX/j8Cy+88MMf/C2WdfrmJrkXnntW9bSxuaU9+w/gXceZlYoJzMy6+g9/Xzj/BKorlc3hIetgZWlBrQObCsI2NBwSVj73ay/96Ec/wuUsSF49XGLHYyEXsIg29kwgnJiecO0KVuvtaDap55856xiclayqTG1NDeODFkAMiq+itEJ1n5rawHlsJt1KyMMWlhC7CyfOe3Yf4H1hINqEMdcYWbluTExKPHpwb8fAUO/weHlN/ff/7mWOcAf3QjuHmlvUJWQTimKq2bHD4Yg+w/q9uKwU95MXztOVYGbDffzxh6+8/LMzZ85I+WdMkB9kpk8lVkgUG58KkScUuiryhNlqNzUzxUvXO9DvcVvbZyt30Mv2eRFHavLQ4KgjlIutF1OSnYqHwEQpGTduuKbNPjXv//sn/8m9J4SNRpvImtjmh1tcPHnqNJXKypHQiZsbGvbmZOX6nkcK6yuXY1PBhyH/KTczV8rE3qZ6BmJvT5foUirV1oIAiMQ4fvLEpU+vnD57pmn3/qS0TOHop84+Eb+9Los8vzAvKSXRMuOunsyVDIYD8/QLX/g1fH/k4AECs7a8tL6yTHEgkLHUErl1+64kLdzC64D1xbEJMOC9Y7RJsystq+Cy3X/ooJ/EWowOu+i72KWV1PTSwlxxofSpYY7euNgMWexCPiR+uKjBYebxg7u315btaWM217Y31hzSSVGwOxeiJhonjgM2JePI4ccSk9IpVraR85jTZ5+49MnFvoEhye637939nW99I4X1nJI4uzArwejmnZsywt3aubK4UlpRmsY7kpkq86iotIjHpWlPU15h3tTsFNcOU9LKJ526oak+Iys9cgftqJVAueuw6V8MaJQ1MZ+YhPfsE52L42GsnpqW3NHSxm6zhNv7ubeYR1ys0cGDhyWSq+VVUlygtmNd/S6pkzGZks9j5pdXkRL2ZOu7/yBOXsv2lkwexbvu3289c+Yxup4iy8rJi0fo9U2+Q0Yh7lpf27RgC/WSuajQXlFxgRQ3S0VuTp78KoGt+szOctyUUFiQo3F38H4FN3xwJ8fEOhbDlgrM2xKvOcRPS3fV3YaUobh4dVHEJFAXVh0S6kU3WZksGzPTM7aY2elpVKQtBnOKfvQhrASid4oLyJGQjtWNjRQGaWo67iURdhmNjdXMU4JckJeL4rMzEzaBsscI2vLKkiFclpySmS+IfXphcXisb3Mr/vTjJ4SvJKdlqMmkxnxxcWayTlPimnbt5lhylP/g7i2Cjz1MjcNHKPlPf/zTotJSS+Z3//J7j50+JR5UjCfbV2iZveIT55+6deNGX6+KDiN8CjGbcVyGBdn5VIdnp6z/SVzPectLG3xi16/fXJpfSg5RVKnd3T0WlbiEtAePWkTr9A1N5+UXz8zLaK9hkAuFV8UGZRaW1it27LTybUyFoLv4zZCusTiz1Nv/QIpzSWkZ1M0uzaYlp9lJpspEzMq1jDnBI8L0vs28XN615TW7eKPCzOrGKh9wapyLvTfik+JtQekT0Wu0Wai1HxvDEy/mX8Dr4spiYSZnjXw7ZvDyvCLFBfmRzUxwAIeNZUzw0jEZWeRsOHuqrJxwp3WGUPiJ2WNHT7JyNGD9s/qRAyNlZ/2vO4xjY5ctse2dvURALXzypWgbE9zd7TjQU1iUZkZWA/ng3MHWQxqxG1JgwHopFVgg+ObGlp23npsaG4V5Al6cJ+PARdwStkdHJ3jaXQPBfHdhnCu6sFacRMDkVMni95sf2c8YcWd9I6JTR87flVuw21DJHHo5mzKIzN3b9lZuNXFFc0j5WFh0TujUwFXfNCf/gUN7PyuPYWEVJ4UnYUlqQWp2AexNLYa5uyuvb3RWCVzR+YUlO+bmFyRZb84slcXIx1289aB9dnVrdWqOOlrfineq0zU0uhmfurQZf/Peo4qahpt3bhfPY+lw/bmN/uid+4+dOL5unW1+lJmTregqfvvbH/3QuY0ljOm/nJeVk5F+7ND+gvxwNkWTlxQXvvDCSwK9LApSGIvLyh+6GCg5KTOFDTTmGCclPUWxS2xA3JrbWuZJUHzS8vSMvG2SaLl3NhTcuovBLcJf43KDkGOwvtrR3mrBwgV2LBWlpbKbRDHJi3VQMzYxVqUSTsQ14Bo4wdxVO3Z2tHdFql6GtDphNlZMwkVTrSysqHC+Nju+OBW8lXOL60oiun7VEvD46XPpGdkK3brqqaKyqrtvKDs3zQEErhD4sSAtKiZFUFDVztr5mfk//c5f1FbV7j2wV/062TKzM4uOuBsad1mhXGhOi3IBzU7N7mnaszg///EHHx/ctx/FP/jwvUePmq3geXm5AgftzuNiN6tqy8NOo6qkcdcuJh08TM9l7d63C7+RJB4Qfpnvf++74gUwLS+qTQi7ua62DsVrd4YDw63thU2Bk4nhlomN7r6XXnrxiSfPsiKCJIY7aMfX1tOt47/97d8RoDWodmReni1+tvrUZaXExw0nkl3ViJyemmQ+bmyuNDbtdJeC5X5ycorVrriWdZOV4iThwf0WyxbVTRXgQHvv2sadBx87vDi3FJccT97Hp8Yxg/AKNkZpcikHHBX3/Esv5hYWDI+OFZWXxiXE1tbVIDFOUMzQjQTdfT03b98amZ7IT4hNzMyYxb7xsXfb2z755NPxscXMtKQWYa6JSeVVVbv37OsbCGcpZNaaRTmg6d49u+p21gjuHx8Z5Y6rp2Zd1JCekVtY5O4Odho4sa6Ce0KRJUmygOdVHBLFXViEByw39AfrRdjFX/3lX1pWbORY4fZ1ickJR44dxquPnQo567/+1d942Nb+6uvv7GhoLMzPLY6NuX7zxprKqu0djuhtaawaRw/vp2zlcWWnZeQqlt/T61h4dXXl5KnH1EVR76amumJhftr9qu7odYzjivGikor0rLzJ+ZXl/jEbBhUfd1bX/v63f49d7hgU8AtzCwzauKfjiFhnZ7jc6d69+x9//Imd29NPP1VZVc1uxBhnmhrUgeRfVqVQEFFiTCyGAXnlUBVzyIUh0r1YcUcfO936qGU7Pvm5Z86LIvjko/ckNy/Mu0l5NuKYi+EUS0nNqKiu29hOOHHy7Hf/4r/s36t6fq5z1I21TZa/7W5lRfXlqzev37yVnVskL0c4pIV+ZnaUszLh5rXrYbM+OLh39x6ZzqZh6xzW74VwOdyuXXuYx/SgZWBudpB/q6y0eHJwjvOnp7/v9g1b7bwzu4Ou5AGyX7YwOPtVcI3Y8ERiaFlfHRxiXd3hopaYbQYTs4Z/GkshgOWfupesY48r2aWtp7eqaW+sDevKspAk9kd+Vo46Xy5QIPN2z0cPH/Ig95Jo3fHxsSfPnRMH45+DoY8++nB+XjxJKBPOS6pD87JxNwuLB8vJmkEXJyXGnTt70pXRThuvXrmM+7Oz8vbvDRY2ApivxYnxKnbCxTSOgHKy04UJXbpylewBiXGDBdMyMuxGCGFlxY7vfOc77Kl/+k//KQOqr7tzcdVW5NdNyvGCDDVH9kJa7RDkGvKuWXus2bZxUMpUdQMUTSfZi03vkRdffJGy8MHmxDtHiAdhidbA+l57snO//4O/4/kQLvHw0QNRdzwNc4vzso4ABs/9oURSSDbNzAgVx8zdUudMQ5oROfyb7/1PqBDVs2ffAXWF7UD+3b/7d3/6p3+qrpGX0e3lzpw5R5UoVmHXCA6n/zFb7o1Ori4sZmFz3WXmPLm7seHy1cvwOTUzyY0naECtuvGRYWNdvXzl7t37fJkFhUW2UlJtWCp1DU28brfu3KYcKypLpsbCXd9EhfbECXiPbUrmrShIDE7z9Q0hCeetg8PbsVRVbEtbR3pmqEzsXJVJweDTJ9+k7S/DSIMQ+7sQItEd0tl2Y4PgnZVJmRKuO6ApcCnMO/AJSMiW9VuelZZcs6NyfGRwhrUau52alMLxiQ0UAgvAp2fw3im5IGRLzz2LfUHXxYTSlnYaPD2OTaCdU5C8WCZNxLMoyEpAZVPr7nWpxS63m1HotiIYBh9CtcWS1istLw8OrYg/iekT+CqdazDQheBQ2XQ3s/LKzSvOB8FsPQAVtEOdiTPQ3Y/jT8XL2DARPTuYlBDvYMT1Rfyva5vAnrOpJgXLq5OD/f3UaE3Vjih34fzA/NnZtbUVWEsqkj+ZVrxHrlkV1TBZMMl8iXHil5Rkmt4tcm6Q9UESGxKI9yOM6ijT7/C8nRMCbYkVJMAzW1OHGntpFrqKRA2ZOABgDFG8zJQtBF0WSFjUxlPUgp2XCHZ2JHj8XyKXU0Qx3G7DMVOPg9mzwBCIosKmf16oH90AuFUtJTWEFoh/gy7t19btOzYTk5KzUjJc3tvbM5Caknjlxm2Md/jAPsEpNFtSXIK7QdhhFB1dERfvnl1R7gvu7LPZUyRx1+79hOVrX/s6wXSnVV5BbktnK0es9cYZkVMLU3Po+NjJUz3dPyZHYj0FRyTFJ6XZVWTHCaSprt65tLIoBswhZE9PL7ZsXl5JSXfaLnhiqflRuyibnoFhd+VuxCTIJq2uqbfzMSlPLSyJD4kTde5fcmoIyx4dD9d3RBGLOiXFpdtbODFleiEU5rPRc9Ot4wWFB5LKQoSeLykW7b1HnUAse+pLU3SBT0yIELoaGR9DCJ9XbcDSgv0tyGp9MVQcJ54UCx6OMpJ3PfuSQkN6NhANL+UiKzensrpKre5wXJgaSEClYG9CbbuI/pxgUSUQF7fpoAnPiOiIcozNrRBlj+AExxGMcjArD2LPHwI4xfmMh9wJxxOZOa4VW8BdNm+C8bBKZib3WobiAfhEjOUIr3Lk8Fa5SQI1M7dIKYltWpidhwHYS0hKiVsP0WsRDgwjmhE8wAYbPSkp0VaZNWyrDAZ75tWtDftnZSBmpqcSFbhRfXgipNBoIOjHugl73IqrtjGRSrh2qsAj2sAOaeFrIY9CaWoJADPzU5yLitMs9NCBGU5N07Iyl11RGJ884kxkdi6JpCSGmF1qJzV9Y0nl06lZRY/Sbcey8yz8K+uropaUZaa+XGomFlTV2qrK8uz8AqhwquOcJiS/Ru6u4RRUjLynMxTkwK5hT+401SHtGj/b/KXL18OJX6ocIWWydzB33MhGIXMAQ0V2bm7p+rrip6p+U1YO5J11XL52dZ/SILFKRS3KRrAnwjOgJZX79+z+8Y9/nJ0l5MytNvnu1dKhm56LyiptveY5TR810+HofvJkncgE1Sko7fPnz/F9UIBMqNUVqY2zUvY7WtuESVjOyK84CmzPQ3Tg4GFeIftk3i6rnuUYa7366qvqfYsg4k3b2VCvw51V9ZZRBwIsJgCHXUp6GoufwLKeOeAdG6obdvvW3fqdNfS8P13u+eknl5599umvfOUrv/zFy3PB2JpjOAaXfEZWSWk5iuzau4uBEaI4Qm31dDsftbytLwQBco4dP8KP608GQE5OHpN9YX6ZGpShZHVISUq9cOFZNsx2f6yCpLr1E96giMjOzNyE83nTp1HDIXNuqFBsI41XOcIUGFW2T0v8hr39ZEa+Z0pa7PCdHsbHLvlVuIEGRPLll19xqyk+p3A6u7sz8lmzWeJR7ZVTQtZgXE9Xr05E3aByWDGzsyvLKrmcgs7ZXK5u2iHLkbH39NMXOrraDW0HJUaCTDv3tmHIiFzaaM9Jh5RU5B3Ye8QlFdxn5MKvtpSH9u1XDSV2MawjzhHds8nbVllaYqfOJWTtuHtfZfas4ydOoZelnGqiYy2vJ44dF0/r80cffyDAQTk1AV0cB8vyoBJM0FXrdcKZsKuQaSuFiAneVbNeXVujg2Jn45UwcvzCuDp96sTY6IhbjIS7uELO8nPz+lW8rcQgzTzMs9WvtEbuY4ePdvWGjPC+vt6YbfujTYnpAOb1d5+Ss0phM08/c6BvYOTa++/Z+loWLfq0gbBeNWPws30FPw4L1PTdOit/+vLlSyyBEMKtsK+lzVGjspArIaWN9OFbx1NWYecY9mCUD+sF94qSkuwBFQ2Nu0+eOtP2KNyy3tvZ7pJT/ugXPvOc+Hrcde3mra3t+OeeP3+3uSUjM8eKxjgc7O1yXSI9mVdY5F5FOsH9hOfPn6d3ewcHLaM8+8PjbbhRurY7pwp5oC34UIx9CwtdlLv56cXLYZ1OYhDkySiyB+VRUR3JBOzv4Z1ThHfS6Uwk3ihcDSMKDTsOj45jWdJih4CcjBgJAj2dXZcuXcSCB/bvf0LpqCOHaXaODWsJ9elUa045IVdr5eXBVN/oqO2gZZwgtbY8LD1+Ap3ChZRzM6K9lWrxJ9ZkUjAa9IktQj8Rk4KtbO1pbn74+c9/nvz4lUiQc9X9CIYJUigHDogkCeo+WEXLwmwKxbiC3I4ZujMidxa2tbWjpe3pxOjooYN7q2qqrC7mTggJiaBD1XJoEAeUXlnZmTgb5A592F5ZWZlOVIwuAMYGEQBWHSsH8wt6Sdr07Mzf/eynHPwEctwZTXo6AbZi6Zxe+9nPfkahmEh0A4ONmMWkzrimowdbZJ/vckHx4W5vGxQyRTFqo3FrSxvkBBRthLhqbcgJ1WwlfND8AM+pyeWdnSfPwRGk0AUhcYjis93IsePH55YV3pz3LN0xPTnNAHVyhFPNhRIXbU88cK09t9MVPh7XBjvvE+o5PjHK5NKz3kxNFJp4IUmWcM6Kcug8OT3hfCM7I5loMVtJjmI1im6io/PxqzduYla5dy7yTExJXVnfwNwMSnaetDDksIpLGqHNDUFdCkP0jqzQ4gMITZZ97FdzEWoJLTCPNH5CazOyHivm40tU8ys06tNisL6yCP9kj5XT09kt02NtbV3OhmU7kiyf5lksbeHx2rdnt2wWo+BPPCDyz+gehGd9Rs0jtMCHtIMRQQhdvN3c/zickOsNCfwKDGyPQ3Am/StRV4dPPnnBNV42PxSBPjGqX40LVF9i5qiPxEDG9Q0Fqo3hdM4fb778LM5AnNcxpwDGISrH0uzcGoaHYcnoOEeHPmNUbE/v2z7hHMBgP8IFNr/iKM5UQGoTbexBXZF3NoR+tIQ6T0UZ2MTRC0V0HkzGSJovJPjsJ1QwBLSjuH4wM9IYzmffgy0KHv8wFAHJn7CECk5h9OBPBmx2yCD/XxeEQXj0QT0HLkpNjeoco8MkVOt5emYaohxM2VbLBAD54oLgqyQA14c40Rv48Mknzikm4HG8YRVRlTItOclnfmvdEmQTsddil2A/ZpOdhu9d87S8Ktx5cml5XrpSdVWl2GKS+/7VG0BVpNwQWWmpLulgHFg/nPCQRAfT0nIINavRMoNRIRZbwrBZjE7OrC4sClCxwtnRKKtvk6muGpSaKaL4oD2K4yvz8iew4cFMAakTRozvo+IAAC1RSs+w7UENomjXQDM/2SX6PkpBPegwikz00hJ7QCZuhze9ecTEfdYGv6E+hCOobvWgNz/5Uz+gjQ7tgz89pQE2NhZQA1tGrpT27hHf6MFntBbL4cPfN4hOxLsGuBFUVIf5mrVvolMOIUSb2zRuWIQj3RoOX2mg4B9E+QAYJxKyw40VHRTkPpNi/KxnTK5bQJqyb6IqwsQTnZdFeBVmfDDlKNs7u8M5ugWPz7DhQX+K3jG0xlG0+GwZNUfY87gtrHf2AsjNET4lOBKgkOXF5FITVPmmyYnsjHRoh39t5HR4T0lOtBMy06GBYdKB7PYw9ogOr2a2BVpsqIezvCKtYmNmYXx6ekY0maJx1EJT0y7pB46PrfdGvnnrjuQl97rwnghR07OYMYFU3DR2jzvralseNuNejIKPeD121ua4zxUOm+8100goCX7ePe/iTxSNgLEg7KtrfFvbCXEUlG0GhLvNCkqPHjlEhGlvCPElkZydXy4tLhweHOS2UBlJNKhYVv6uerdux8crZcts4d6SjIEc7777vhrq5y88SUQwj5Ac71ZzSwz0woOrEi9duQKYKBVYOeJhuEtoziiG4RAAqIwlUJzCxIEejGxgRNXf5+JBDsG5PMc2vQprOp0QpMHzLfbj0JGjNnPc80ePPVZX38gw0Jv7s00Nbi00OEe3+nnjjTc4yBEaixpLsTgmrM2VqzwYpAuzC07h3PgrZMjZAohMxAIqre7atctB2SpnnJtjItSUG9z5765fu4lnHLlIMhaVpE9r+tjohI2MXYojWaXMRAFgIZOCW3PH9W5GmplesLvDijAALb7HmdBlGSI1vd0qnyYKHw6WT1a2m8TaV9oYcusrrv5YpTZdj4i77PSiGts3mMc0CYV+rLASdXQu9pU+tA0gDqwa6xFs2Nhbj2y0Sktfsv9hVWsJpM985nlXLpI7rKUcmFNYI4ZMuczs5gfNx44ccaMhg8Q/PCC81o4RqyjpywsOCU3KVsrZHR4miroFOdgsNHQFX0KJBE5HoIshVt4tvHTI0WPHiCQMhzUxMb6+cR+G+ff/5x8rW/L4iccI9cjwsPVFzPby6gZVhrs4/lChr79XyUFledHF/hPANI9Zs3koN2x87cYdo8wthKuoRuxKx8Y3MpanJscEpcsgpdsyMzMaGupR9sMPP6iv3+nqPUep9qg2WlevXndQo8aMc2/igAlt8+AzOsStW6+alHBEdhdI2HWz83OC03ZU7/zmN75lxRke2WIOVVWXf/T+e3/xl/+DMDqlB9u9+4+AFHWedrS3HDx0pL3lEf+ImAt+OKNwQCekpCVsbImjcczIIxQXs2FpO3H8GBwm7Nt/KDY+qay0FCfZKuEhtj524V8hNpxYNnPufoJNix++5+HDVZIG8TqwrJfuZRB//Bd/8RdIxTtbW7fz3t1m+MpJDCmVv3rtDUl1popC+A8neQq7kBn9UB/6vB9uxQs1PQiAuAJxRMLv1tIkFs95xG0DKog5VcQ99uWM9dfffMP73r17EB6HwSZd7Bu0ZEgpvKOlrTbLyUTIBiammIxFL+Bjvnyg+kDYLMi24BZ7EwRAcPspbh3JoAUq1xli6Ny7URxRUeg6Z6lTBJpNz879wR/8gTwwM4r2OTw8pB6/Pw2nqIU7qDzuqTfffJPwwyrWxMRi46AIeLw1WJYUwTZVYhQWBpEmvbYT9hJwa2p4UQPqjBGDgyPkV04+pKWj8QcffIDFNdC/mdrYcQmwyvTPlZslVW+d7y2B+1znYPO4GEx9GoifI3rIYGgCszEd66xGuD95H+ofgSLrU1yct/SJybE9e3e1tDw8fOSQExiBrXwV1BYStDx8SB08df5pyKGzdAU26X2q3uYUFCqv5isuHHvo+/cV+JvGb7dce9HXd/3GjWeefrq3ry/oa9Pb4MMLyzAmDIIXF2d3hHx4F/ezlsgtRjIL04FVJDNr3yAHBYShkRU8UQqSWF2N9/eZF36AqFLlRyK3zoEQ/oncxPxURqrg7Cy1RbC0mwp2VJaz/nnq7ATEC4WkSLsfxdfi40qLi3jp9AMSvBRO/RISWPb4nNWIe+3dUccsSBPGti10ZutDfW04tfC9ByVk2zbgCoMCGzNYQR3CUspQFL7PCc5LfGtqSANU5DNHkyU7RocWOhfCzcvK4T3KtJQvFuIlktJoLuZeUFQ2NDaph4qyTD/x6whWFwyjEwgHMESZiEURMxjU94Ro1rnV8LBuzWtzZc1AXlHxhD0tAQPJhvClSdms+pIio7Y8Dlq/Rqegf99Eezail7G8IF8z3BIwr75DZLcQmEfNrkh2sm41w8De4cf3ULrJMpA7kRo2dYTCNx7Rp2baANKvpAnqfBmdo/sa/USPYQwnjeQF/tMzUkqKmPTFCCQbGH5Sk4ts9jgveKfCoUHE6Ge1UsdKLtKwTEzN7t57SJVxPVqchBDoWSnhsclRi5lmBbvzZa9GGUBNcweJyAcS7hVwwjOrorhEeNg4v6boAn5ZdhI3lTRQy6VYpqVV+fe89gtZ2XmrU9PhFveUNBsAaEcsCDepKDNACAJ5N2WdY34NGCWsQFwN4agPPygFOSTFB81MAep8H30FtKeEHG7fe+ncO1LCIcWLqXyO/okKJgKx2vgJWT2LsRE6+rh3f4JQSzTVABi+4Xw1LuT7kgkCKg28cIUOo2B4VhudR4fzFOrrwa+kxohQanawbZogNDTBobt8Ni+T9TizQCYSDHDXR0c0FlMUn/jT9xGeGVYgyFbBN0Y3SvRZf/799KEaJGCIypTVx6Si3AgGw/lTe+sFzEcuiljBRRoQZIrWET+EaxYVEJ0IXocxX5qRDx6XcuBrnfBAS/4OkeYZWZvra0ubEnbEEy2BzZRNXGPBVZ7l2kyVhTAnsDZk9FrFnRFtbjm0WV5KlLAUy0lcsloUkCZ6dmLWMqF/gRWtbV2fffElWmJ4oN/2qKSwFA3hX4ilikM52XlTc4suXLtx6+5jx9N6+j8WeHnh/JMra6svvPA5SxU4X3vtLY4ea8pbb71TvbNWcUM9IyjtatYCHTG5iHb4d/BOUqRo+wmtrV84H6WsjP6ku8TqXLx8xQd2D+XGuwTVmA1pbADQV5gHiUPZ5ub7Jl1TvdNpHVSbF2qqiOGF7bWHfGqHqtQzXHkKVJYJCwSaUo+WdWCA32TRwqKPsr6nYDmSGH+ewkhUll0NtwtJ9KDcPxtNMWDk/Wc/e1mxfKqDeXf37j0rEbemKiBsemx569YtRirWtZ6axR/+4R+CimHg+5deegkna+/cUp/QmBiXaBUzL+3dTW0xAomtqDUUk8Ob9bSpoV6p7l17mthU0Rw/JiNdxGX51ltvfeUrv0FvyO4wfedpUOrEg396QYmr+XklU+2p+/vb+X1KSyxeoYabdyPaAKiJCcjB2/37XA/K87UcbnD3XH+XINhxpgISvPTCZ1n2k0qoVVaKxVA3wlG5dY/rAt6IA/OPzIIfE0p4okV1xTse7u60Orh6dnZOHs3DB86oi/7j//WfbC0CKw4PZWVkBB/84ydrKnbItpKEY7uobCB9aHPrUh3925TKiJXdC0tYCNfv3RdCg6wvXd3drkLKyc9zSyZ/v1ttPAirCC3qDxeZKXzK+yfCPGB6kNSDE3SyMTLKfePiiCuXLp99/LRieCy9S598vLqyQh150DHcysooDoH/sdG0uvqdQgPiYrYtk/IExKCKE967q0mxaRIdGxPPWHrr7bdxi4gDgnrp0qeff+nF7MwcK4tZQBGHJD7EycraUlY//vEPcSkygU3tcuQQZQNmuhF1KitysIFNDiYkJpBcG/F8IS7/pj28aC73PL791ptKlIuR2+DPmp4GSUFhqOulfWFR8blznFb283EukNXncvy2xct9kS6Dcl7qlEDMifOJ/t7uhqbdspxD1tPCnH66O1q6+fj++n9+77kXPnNbcdCioqrqWsFz/G0WRJVuZTG+8eZrIvYc3Lgc9/ixI+SWQePh3Mj9etOGmZsbimSHMD0tMzyBWM2XEn+XVlZg5OiRIwS+akcFvLAi7YTwK4a7fPUKVSLQWclaQ1BqUpjIFSYQRyRPVJI1a54wdLa2YSDVDyCLGFPotl9ETobxjVu39u/fh37+hA7t9UAd+xMNqKeoDsUx8GsIJiJK0NTOHPGHAJ7hoRFGW3RxQhg8bXfuKY0dZftes7L0EicVm5Eqh/BuUiYoiUT/VLnZBQYSkOeik46On/3kJ7JYFCrGo6ovN9+/j1N9Q0HAj3VG4Id3bCEiyF7cwZnTHJyBdrjQ3KHH3ZZWT4aRyLOxMSeVmTBGjKlB6GUmmpGoD+kNlIjpiDZTsQMGomWeiNC9+3fOnnmCYBSXluFUstRQV2977UIxUSKSqBycmRqOMX1JFDyUxQVW0BjXmysZW5hfuLkWtig0OL8mhEC7M/QHd+/IJhMLATwlugCA7w8dPpiRzbri2Asax75L51At/AcrN+ze7VKC+80PJObjXZdlOGft7RuwTXBbakpPNx/Mrbt3zp97QuEUgjfWL719as/+8n37D9KnvT39hrCrQTgAoxFpwUtWAlQGoen7hllGM+JhRLFH5aOCfzyAXtQWjtWe8rKQwCQcopr27rKb3V6JQ6fNTSavGs+OyYQEUOWagVaHEk7cmSDhQSs1ba0fBFsPFg8vT2EVm7Rr16/gPYOiDkPBl7jC4uTdKitZ3ME0sFl7bqdygwlIMLNyNSL4qw5XIdCd27fxjyM81OSg0sCuwLvpG8UsMLZ3vGeOujUp2Lh+4yokB9Fzh1dSqknhbbcIdfUMOLZids3MzSuggXu93NcGQmBr7ynw+FBUHOq0OrvTp58gWUu90Y9eNgAGhRCNo2AAQDOYZ81AIyp4HDCYxDckiNQgFuxpicG8R1W5/nWCCuA3ivb6155F4t2v+tEb1Ple4T9PGSiQbCwUOfErG1230AtCxNWb+XrECipbYXho1LPUdHZWNu+mX80ihN1PTYmtZrI4aHY/Ij8r5S8yp6uzW50cWQm9ff0H9u9ZXFlias/MTt+9e3NXU5Nx4cq4vJIOq/BP0GMusc7LW9B0IqR20fsu/bAHLsjOvnf7lqzH9rY2BIVbGVKDKysO5LVnpI0Oh/VyZGyksrpCOH1b6yOYT4hPtBW/deeumsy8HhOTszkFRanLa0Vu8xOLNRLKPvAJwgz8QwVkRjGsK8wAD3QLVoTtKA/4lYsZmQDvSwiMsqIPUeqEQUX1RLZVPmjDstS5BvqEPSOijrEM6ldI9iUK6p9EQLVm6KsfnWjmT828R3/1rrE/DRfFf9Rk195TvtQbkIzis8fR1EA+G9Rnj/iAapr5jMf8ZFI4kP7RCb3ne7s4AIONaMRvhKKxRjQdZXy8gOr40Sjaiymn5NDRn7qVeu3422cdEm0KE2+YCH4DXhQY8GjvJx2ajpw3L/xmCB9UiUWs5PwUDF+3sx4kUC0fBnuA0AqlTVQPwBVQwxy3NqM4NzWzBC0AjBLF/4wyx0kC01LHIlHa7lqQqaUsntRnRYFi12gdhzo8/cuxMWG7lZgqiymOeSarT0hY6H9xxV3wXgNDEyGOyMv5Vlau/knVSKgvlCJLcnQ8RIVRtq4aALMzSREablJz8pDq8rb8YinXzQ8flRYqcVRBjTsYLykOV2HeuX2Xw6KhvrS1tV2g/KBEIKcJiszGbI+MjsVuxzna2nE0KDR4E81va40lHj95mm1KzLW1AG1thLptNlNudm9vU02fJ3tWjAdxdiAgX+LBvftYhcNL55XlFRz/e3bttSYmpigovABx5EhBanQ+fGQHxnC8aTpzc+HCCnO3+VcBdnIibA/QwhrEENQVJmE3wzlBhiufgcSs5AvDWgMDg7v3iOgYCMHx9XU4R41g4lNQVKDC2+mzZz/66CN153GLwOv3P/gITZ1CgBP5kB5XgB++WWA+A9LQGv/kJz8xBDbg4T59+qw8cqpn9+4mkbHYJq2oGHtTHeDHe5gB/MDWeVg99zS5EsTdPY7WTp48RV9OTU1b3XgszYV4GcI7FxlNj8SIDGwnBhASZVrNrPuKDRjFC1TYktGCQKKwFKo3HKRZCxQknJmalZ5hnaKXCffC3KKrRWSd4nEBMPYD/G4m0tvVqwy9aHvp7zYyku7kj2JdESLSJimx6cmZqspqEedHjx+7oWBxfS37tautXaEFTOswhEP9G7/xdcDjFqFi8tKoU4f8NbV19uRsD6hYXQoXfhFqKzinoQ2kvaUNgIR4UfK/euN12D56oBzmrV6mCXU2cvw4RI8ZQxnKYDY1GxImvs10a0dn/c5aR98M189/7rOdHSFQChcxr51OcOGnpmYwLeobcj78+GM97N2/x71JIXEoUiJStT2YgWLL9K6mPdjbnlvmN0iF8cgsso3x5VMXnnTkrpmDNdxlCFPzIYQMjYSLZcVWIA0+uf/gLgUApTxraASxPoukEhhsph5p3LUb/Pr0GXpra+oEhaEvHeikqKayktoXDQgDjx62ivu4//DRyVNnbS3c3yIh3ko73DtGxlVlEAIE2/1DQx7BsYKXPCUx0mtnbQ25FhOr54QTp86qnecWczpQ3sP8/KS8NKd7X/vqbwCaFNGMvGh4CNAqeTGtsCPPLn8cKsKUvvAukcNYQaiGBomZsyHFfGzBlVMwGZSjfzMyitAsSi0xJL5nulEuBNWzUdW5t7Yu3K1JX6ckV5SWrEWWGXrfBsNA0pxJWs7gAJWdX1hgCw6tWByTETkzjNiC4Z4FwcqAIY1w5xADAKSLKknPTuMv3717ry0B21FLCLKWh3CohAQ6ApzoR2Xw17iSQ5nOu/fueVwzAoyTxG9FdEeIvlAAxAJMtGz3eYog8NSJky7/AxU7j164dfNmdB2NerI7HjwwIhrD29DISFNDHcHAMeC3cHrZYkKFhYckEAN6gejazmrPpeHZ02dOCSxubXsEA/o3usaI4oNutScYpmDiHmH3Nt+/R6PDDGJH+dL3cIi4hnCGZcp22xZLdQboNZaGc8aRvAmeXI5sT/EEuKwHN0utrt5R6cTWruP9D951envhwoWLn37icBP7QkJt7c6amipQrawGHYQue+Vzr69wbjnjUz1XpT/FuSQctk9ONzTWMViLSkuU44BtvhwcpeAJ2JQxwbtSUZ3AUA3lpWUQ7nvzMmtiYyI+oywGgzRgR/nHrBnoQjPFyUALwDTAXaLnyYA2GNX0UQS0LKu1pbAXnZkYE4NE76SU2nm6MmMdBwrsW1qcF/YW4V6nuMqNeDxYFR73LiNCb2gUvZVM//TC888/H1kbxjwFQllHQPp7SABP/BTDdfwFMPjxiKUI9si8d8GL/Dr0qT8RCDVxtXG9wwBJxKI6QWLaiqsJHvwED1HW1UD/vEQtjx6ePXdegLtnnUfJAA7B09lZxSVFYZQQdh/OT7xbkNIlfUrAjIRFWUdxhZqSUQwTZJc0aamBd6xCELxwhUFRBLb5t2hJFDSWpyw5uDTaod689IxGkGY4UzYRAMAS/PjSNAXk+Ez8ARO+z8iANGuJZoZAERHhpgaNgoa46+BWM994Sp/a4HwAQIvOUdaXNAbg9Qk/vgeDzkWi2B64h0Oim5u/x8eGCgvyE5MSh8dGDyUcFPMgdyIlhewyfcpkAvS3d4DQjMwdvYRuPPXUM8Kd7VSdAHCaOLeMT4g5fvyosla8uJgW89tGGprf68DBfYr8gGdsZIzeAJsTjIG+nvId5cSdrbaxsU0LpbS0ClRV0W9gpGU7ISVEgbjyfHpWRg0vw/h4OOIzX9OEc5CYKS0aRRdawE+UMVCHh5LtGCUWyCEQ82usGQygGvxHH49iSbdANWFf+tVMoRSxYNhw/tQVWviM63zvg97A4yeffdAAerW378UABo0qZD8hCmygF3KAFgCGAyQYjO5x7fXmXWMAeIUvw8V8IWADMn1jambtg1GQ0toBY4CMbnIwT45KKpEAP+Muby8xEPVmIGoTD0jK96AgKr/q3CyEutEW+gc5qPxq4kbx8qeBvEOXGUG1/s0nGlnkJ5Dr2evvwY4+4nv9RPUqfHrKcIR3Iy2sj4KsoItbDQJxIvCsGgCIwslNEW3vQF9CNVw5Y8QePNAgtHtQtQhSbGKUgBT2I2ZSjY+ZBf5/iLPJSFtbX4jbiMUFOHwjZgl0ZmpSEOv0sqSsuq2rl6uOE4Cx2NbRw7Dbt39PR08/AnV09Sl4apMpCrOn15lkwb79R19/853Guvqpmfn/43//P1Mz0k+dOjs6OimZtbGhyVLFsOG/oAmxtGX0w/c/QFMotJiCGXVEdODtwvyCn//856Zj2WXE4QRbQtPHrrZdvkQdAGMYfaJmQ10jitOivN0+K2nig7Xm+MkjnmV9ikTFGFESgJwxqsSINANePxEvXCdQCudsCnhDILrIqoo30IvwHjl1aoieipS8ZHVpia8kFbhdSVQ2ACyynV3tgFEtfv++A+HZ3Lxjxx7ji/xn/+yfMT/On3/KylJYEkrBRBcRa64HDQfVcE7WvvSlL7H+NQYhrx+oEFebB2MTESkIGz9De2fzAWBnTZWQAZrNImKRhRy2JufdY8dPHjt2XF0dRzdHjzzGwaGuyw5Vp5PSYuO2pSb6XkjbnTt3ZU1Iv5Tto08C4ieHBljLTK0sOiQssBHl8421Eacuts7CbGiQJaVw7fxjYgW1njrxOATWVtdY7gVoKYHF/W9rasrWGrNTAkGmOEyyZBj0gr851xU8FehiETV3xo9AmsWVabX83bBkFyd8n+P55GMnWh48gFgc4pb0itKy5IR4h+cgEX8PMAypQoxqpzVHjuyVE7w4Z6Oy20ZoMExElRelGkkfVnFkur60xn7bs3cv7JFmPMPUhG2f0cV1RtE1KLpa2VHQ6jLy6Y0O4VslxbSQhFJWIlejDa3SZGa0o6pm3549vMl88SJ5OLsFeR3af0CFTDgxfVjChNCImixSLjZGyJHDByNLzLrOkRgAwEDcIOBZWRZBiyNOcNykE7+y18HGFPEnPsfM9LN5We5tdV599bWo6SKUw1j0j0eMCLGUDE6jylQ3Esi4uLLKajLK7MKiqhsWdF5sdVYUZxe/VJyfV11T6RrBqtpah4yXLl0q1IV749UqdJCelCACVhjWjspS96AN9vUIA8tpaW3LzslV2+f1N992JSr1J1QEplzKiHg0e/P9uwjpH2l59jMvMMt++tOf2puipdMNMzEHvSOwhCLCwPwSbKCAg07U7pUMoTIxDuBeU13Lyiq8HqaQQTG+O/fuOj0nw7QDZBVVVLLsacD11RWxsxJF3NakgADzF1s4WNFSnW8SyGonVEVFhVjBnwQANsXhma4/YRn6mIA+23r4lf517N7e1c5pIhXkwP6DSAtaOiLoykipLPJDYCAXt2Vn2wsKyx547bVXkeoLX/p1hKfNfdazBrYHiARdyAlv+MmVFm5pVWRGz7JMfvd3f7es7AVMw/ZCG9gwEcc3orMwrkQu4aElmUWOmRSsAF5bayuvNc2onr26y9rkRFxf65ZGd6lmZJBw3ED4QcjC5qbBczIZurp6TJCPmUrFjtzMeMjtZkI56E21/yNOveBCxMrcKj4RP3cXqITlX3tLK5al6bAd5TsyLGxdibRUnhuRPwLgMjLT3JTsXhIr/u3bNx823//SF79AhrlL9x84AIG0sGcTElQf32pra0HcB833KivI7QrvPstp19497uzg1FTGOCtHldH6asWRkgmGSvwjz+bmLIcojkW+4qqqHbl5hVynEiTq6xz81Kozi3kQCLmRGLkhAd+bKYRYS+A/aAf+uUgOFvaz4iIT+bRpVLQUc9KGfvXs3wsVFwWk7dm/7/InH1nD6Dh3ieIEGwA1JeVSq+7K0BqOhBDIZdc45EzFxeFS+Mcn9j8+2PPgge6eTsCYOF0ATnQxnKAv48orZb5hSKDy7hNUVNASwICxN6NkKSyCRlCBYeUn8BSTZrCqK2SlO+zGda4lq9q8vMPJzvraUZegFRdrDCH24ep82xgTxq6OdgWEFEQfHpmYFZOzsjY8EKwKUzC0l89Gj4YcgMT3mNA31bXZGBuqzWtxPfj7/akxmE0KhMYFVXg2crs79PrV9zg82tKz+kcFCEcILz9FkW9GftUMuqx5sKpPDSIQBdtFwqXeQAIJUcrSMGDzUrvG+YwmkECtIYFu9QbhYPAnDNuQABg/hPZra+SR7psQYOqy4UgsAWY2qCpszA8+eAG1QvvU7OFxWBz///H030GeJ8dh6Nnee2+mp6d7uqfHe292Zj12ASwMCRCeAEGRIp4exdDTuz/u3kmhuAjxhU56d/GkE6kIPYKCJ4CFX+wu1ozb8d71THvvvffd96nfl8QvJn7z7e+vKisrMysrKysrayw9TWiNNUNIb4rCsHUs0lpRBDAOakKCY+kBPOuCpUtebraF4lAshTPU3fMi2YV2mdwGsqEqptEmvVs8xa1hzcBgz9zM1MbayvUrVyVqwGxR/DZqGXn2pB3/dLCVAI6MTQiLCdeEOiKdmYFENhvz0vN45kQPZqWm2DGHW1x8HFYZvNg3G4v2mZnmploV7e7wAII744uSzhhIb+IwI+cFQuk+9tl7RD2Wok4BFXEH6egrHdc7TEFGEo7U+utZeS8NKw9kAIXV9a2uij5MmaiWX7USMIxL8O2lYr49R4IRtYtQQPkJQ/UUZ9EKhj4R8SM0iJkmvDTvKhNNkBDT4sI8S9rCJxyN8EYx38oznjbWh9xMgDJEXvA9LPxqEWjYwUHTvrVLqtlJKKyPgCjvJ0BgGKgaYpyCIJlH/Km/EDAseMQgYzUYhufUpAiEopJiqobDC6E0BJT+qhKhhK2aUxdYbzxAHpVMn4GezikV5MsGwd9P+K3AuT/sj3A8ULlSG7H7k8JxqUxDwCmpjamgqaw/QQvddn/59Ozw2GTeWh5PNEJZEQMu0pf0uhBiLS5RqE9SfJyjd2sJa/0DY/CXyYrjnvZ48qxJ2OfS8np5WfHgkGMD280bspIXFofzY2/+/FdG0M6dO2Tqk8tFCrhHTxqtqbo7O2/evA0BCnN4ZPTpsybHJquqNlGe0j1zY8s/xIn2y1/8GhFMEIILuD+NesJpfhe8zWIzKJREXoqRmDmKYMhzQjEGzp49xxdbWlLc3dNpkNqGffS4kZLk4BAK4oJLAoMInEoWVGwGulHH6QoyRnVEYaJg4iz4U8PDOGIsoJUmCLlilOTsootEBpqangqVoaulPxBM7HqEf/kv/yWDbMLh6LnZH/7Dj9/57VsZWdMsYpnuRMgU5Yf1g2AnJiZpPHwgxHvwyAgHjXS1GHcWs0kqW4qRvXtv37hFGADUuuUJSdNfUQDLleUwXOwJQ5I8YIrqBj0t+87bvxNLQ8NcvHBl1y5avZzUmegBoEEdezVdGB0yOAkQsACz4iXnVg7WTtaqjKtIResyNKgI2njP7n2MH1ctDS+4HWIBLxrqt4mb2VK1Ra6ktawNKotIO2ZQXknDh3M+T54GvkAVes70w9DEhKFmZNYrm9dOggAw6khQ0IwktevSRmxkpqdSxdu3NdgI1TUb2sJvjDXjERq2TMVMcnlu3rSZ3mPecK2JjfZAJNgJX/nKV37xy5+de97Zjzhh/XmOgvuwFbKzk+NCqK3ZEKqGPTRMhZgOuJWJ9acqvV3dbsPwhvXQ0tFJ3AYH+j4cD4LNyynwxI799773A/LT09vr3/kLl8watVs2O0jDVONBCtN0d+ftW8HdLJoOHb7z/e/xIztLpq1Hjx4gwvrK8ubKCmrxxo1rRkF7eyuFADHP6irGCKQ0jMeY83yTyGccJJakDm5kYH5ukitQ1Dzf+pe//GWNfud732fXURSEygxl1SeDnOzAEmIB5bIOQ54us2H4xmc++6tf/9pVdGard95+V8bCixcu4xRzTlxQYkLwOMiU6JsTc4qSicXHElrTBJx31NdVV1Zw9iVZ2eOu6DJX3lq/Ul5TE2Py30my+c47v/3m179hfUYXB3HPyPzE669X1NT85Kc/QTsYW7TZaREOxPIwzKhRftyHjx/lZK8HfiUFL5EBA3VcjymsYFt71mHD9Xe/+x0uIr27Eo0No1R5Vi8i2jRnMjBApWdqbWnx0oqNuOO9lYBNH2NVEJE3NA4hYPOBTOIZSXQ0RRAQzsr6zW9+A77dMcsvWsw4NzBcC/LhB+epXQ3R78YtvztD31TEpmHO6p269lMuXbrgnM1n/vAPoGduEw9jGOOQYaAJjgRSTo/oOwOdqhXlkpOe/Ztf/XpLbc3/9n//f+g4K9NJf6JgKSLCWBXsJz2F2xy2abDI4Rz73btv20LixXdyCHF0Bw7Ut+WjTpFXbaEMkSI0jY8em87RDbNlTsA7qgdKeKlMkJusLCE0FCVUdWfbtjpoEDh42vCGOZ5YQ3MMiz1FJRoHMfkqxD7pSGtbV2NjsOBl0tV6LCOKoAuXYQkPyBQoaXwqidSnTp+kXAT3awhuENBHNOzt7rUxZ5cNdwiG0Vi/vUFOcTkHNldvoq9txZeXhzuVTA82u/QXy0x7paVllgQmIn3n3TJaGupDglGCEckGhYU+msAONCSW3tBuBrYCBExPdZnCJV1oQstbAXNjIKyeAhgZMZ79RH0EARgbtMnkfWGBa85C1nO9zkpOM5j5fnnHAVSxsnKFQ8QOEm1r5UmAUVivFbt16xaZPHhoP6ZI/kBOkA7BLZBefe1jJBY3iR36oKp9JOm2uGdIHWqXFZcQNnB0Xygfv68AhKKSEnY8yVQX15wesdLAVm0hOMrDEOYooBUC4NJZZh1SIKNiFrEtLU1FRSE40hWtnIj8Z4wOQ9I0b/ZiYtDmWkcxorXKExMzAbVFhFBSu7ij18qEdCexAyTeky7v/QkNSgqbyB6aQ0lh8FGVLwB6CqgLrN5FsqeDiAyykjFelxLg2dZpMB28idhHMCBgfWC8O8mASpqAFa8ogEA55awJStDHT+Boy7fqiAw+pkPDHKBr3pBMLWpCPAp66iyUBFYKPZYaaz5chjXv7AejX5LZHdu3iZWSmUIOKK5Bq30OTtpfMGtbUdjk5KcRrmPRJv+B8AzXv7ungkKfGB0h+SZg0Q6wVRKjLaZQwEvtWsce4vIpKdFTL9kjKGZta5ldXFImrY80PzakKzZtWdtIHJaRamYBVTdtrrZa3la/TbQu4UET/VIRfJpW1xCEsOkyUuC1LodLD9YTta7XKKbj3iuDMgDCTeOIQP4jKgHiGZzovW+QiZCG/GSgRRUJNoDoqYmY2hH7N6qil5DBC1gprLomNKQuIMqTSbKHO5EwR2DVMoqJgW/IGP6YCB+glFSFaIEDK8hrxXsiRDAUpr4Mbf0FhCga+DgIK+V97Kaqxfz2hvKEpEMxSgICH63oTuPTJoghkWdteYaGuvDXHAz1IhJ4jXoQdk1kPCigp+AEEY2lcYMPIMBSCF4aj/40FZAxjeKXrVTA3aDoe7CnD0eYaHqHIz6QhAY3tg56KaKjp7NT6+YRU5WUAICI41VXAQc0JRpzAVq+8N+xMQmt4uPjSEuSxAvBU8vzkrAaNyouyPapW40JlSpLq7Nswaa2rnkH3+XOdpque4C7ODMr79rNO3ok43ZnT79bBew37Nixa9qGUp6o627X65qqHMYuq5QY8C4PzvkLFx1btwPsjGlKyiSOy22Per948xfjU+FyNzsM+G6/4vHjJ/fu3aUev/LFL1HR3/ned587fUZSL5aGE/A8QeYaa7CHDx9TYtbUSpI6MST0m/I88U5dYS56Li4v3rx52xRGMNj0mEt/Ggusf1MMzX/6uTPmcRoYxUiFeeHGtZtEFG1NajpIM0dG4X/6T/+JDYCD+IXapE558/LVm3cst/bu3oWJxgvF7mCHfSLySYR4i7GeyAkNZYJTIY8f3ufngafOynUBMWOcEubEgSGJYm8wMKgpALXF+CsuLb/wwXnIE3IyQK15T5AE8d6/f2/7jm3xCVVccs5ngWkLy5EDdgWXhTTBRFcrqlgmEQNooxUgsDpypMK+QWdXkeUKj+3WrXVXPrpGD7G80CQyG1ThlUC0ysrnBW9D6eH9ey+99BILDPX4/kFz34ue8mqRYd4d06V261aD2aAVVgp5RgF8EfdC8rV+/OgxHbTuVWv/nr2ew8BZWHLhm4znHT29DH1rT93BApl8ZI7a3lAvcoRtef79D8olJi0pcW6QLeQOYNcEyXdk7JisrQQi3c6T29Layn9hgJgf9cix476BgZnRSbFk/sSs8aEh9GFjICzKqwhn4w73qSxzEx/Hlpqa2/fu3719B3pyybirxa+wkg0Fendu39U7OSG9hBL70P2GWGZHV4AB3W4McoxSBYI/6RN0tsaz3vKeyWe30dYs5YbpXPsxaoftaPLAEIU2LpvKCYkWiTT1ZYompdCOVKjC5BN5oxRV4mKIJe5DXhWC6uDlpcsXtm2t+8Y3/thU7CWHuH/f+e53XQ6zfftO5Qk/8xUB4YmhVm4mQKKCLBATwI87lJWBQwi5OyzxuNw0IUVm0s4dDZgqXqqvt5dHXxCeoGdEJM0gvvfeew4fOBghFDE7I4Osh9sd09NVJkxCgByytvFoJMMDJ1QM420jwUCSzMS8KJOrkz0RNsY/DiETGTIyqT+RVXayuFcdXhbxfPL0cyEicH3l4f27+/fuO3xwv5ORUqLabPr+d7/r2tS5shLDuKev/3e/e//sc89XVNpGlA90RKwes48G18kHDx7ilr1+q0mSTaXStqwxgzbs7xTlO4RFxLlqrJtlSrD0NyCpG9iaUZAYYlhy88ZtnHty/ZHlATVqeOisgcpl5mQCHguFR19uCP+IOnOcY2B4Zq5qc6WzREwHoiMIhJSbA5wjCTlwcrOvXL/GL04solwQTQ8fuh8OApbxDkMOjo4wDeUxsPx5cO8ugejv7UFV8TNoGAtlH9m9b68FG4RpCvMNHSqF0dOnTYLbyCIlxV6X+s3eHM7ScWfOnKVb5f0Uhkhl2++zu2c+cAsMuResT+U5o4Mv0j8L8dy5fUdsgRFiSxQwYcSu8xB5Mtv07JkumBsaH0tCurmoMNzTbna9/NEV2Wr5uREEteEWLgSYnb169SNvjDQ6+syZM129kjO62zxE4StDv2Cctgh6pGVU8UDwLOvRrXbLluSYr/3b3/72X/3VX9FZhj3hMdQ9EHdqmuxhPTxBE5BD8HBKFq2vfe1r5gDywDnHSBK6pwzxM3QpLFLKuYXsbgi2Cdbd0yvfFpeV2454OXt6Ws+efd5o4R2HJ+4joOGkuLpUoREFgWgrwBEOfxrPJE1h+Djsr0X9CkFc+YyMfFt1Vuq7du5SXcJHTixo0C8UihFr4MBzasItRWuGNDg4TndQGVS/dnVTp+BDIMGnIFCMylMMHHFHdpaQTi4RMimIU++ePm22zyKXgyhAEstJJqcHyktzisIaJRuWnZHKABZltKib+KU7hMFLqko8G4JryCyC7N7ruMELDePOQDPo4BloJRH7+joeUQ6gYYcmIKk78PGT8hDQirrK64Wx5r3hELUYqf4kIye29iAG2qWXV9fC/gBU1Z1KTiKW1mz37j2wyQ43cx4NaCAQXmOBExHFBMsY4FgZQjjYSrGIo0FZ5JZX3Pdkl5yLuIKzcNn9UItpaTm8qo5Lbq3drAoI9lsd0THTaMsKwSkO44iytkp3ttcQY6VP9oYd3pLisscPHtK51LGoMEjKeUBtSkZOAeqgGZRdRSxv3LzlQttTJ486Unnz1p37jx7u3XeI4TXlKpLewSKxGjX1grX6hkb6Wzp0xH4UFmiXrqip22o3QC/49cFkciGOjVAjSww33cvwi3dO3crZNUlKbsTJ5mxs8szZNACHSwKb8IKvlMxIMWE4eLbjjwVIBKzOIrj3CKgjmEVn6qN2VSGluKkJAgCUWvgVcdk48ifZVkWBGIOQcYK2iQn8jCpeKg9OJL1hbhsd9c3ABSRIZmI4CuINLpMlIkpsjAvPHsBBQ/JG7TC2CJgC0CPYdAVsEaQgr0DgGDzZlA4aegNzcyF96I2GtIKDAJrIqHq1NEpKoYqSZDIaa7qgRcigSZK9xJAJNy0nL+ApXpkYiG51ZobdzT+lur1uL8U/yMntfCSZ9E518BGc2APojbays3M8s5y05cFPWAkxmXOG+sPCBpV8BBwyd9QlqxCDsK0hTa+syVSR7P4ybjW/cqAsra7ZALFxmukyvpIya0UnrOxBQUlKJ7N+SvJGT++ARbxAEdd5hCZSk1vbu4KFVFo+MDzWPzS6HKQnsaO7l7K1tOzs6pHSoKWjKy3FKZq54rJKSxlr1NS0TOcEBgZHJN+cmJy1Reyl1MyPnzU9bWoh58h4684DSyYeosNHjssD0NjUtKW2XnyR1KtpC8uFxeVuDjbdS0YEfysXaXyKShbLK7OqMnMp27r6bUKTB/v7aJUp+7Hx8okfcJOxg0xMcExhB8sySULYGB2d3YhM5brepy67rt9hz97eSN6wHj4UETqbekAjMMTGzGVmJ+TRT5/+9KfLqzbfvnvPyBVqwpnABia0sgiKA2xr63BND8EGxFbhv/k3//b5588ZDtwrNP+f/EnI02+KwS9yRVGDzEdgauMGIvBE/eMf/zjfpvN1lZsqNJGVyXfDf79IdOu3hYq2gSyH2PGcyjK0kpDSsoonT55CT5yVCQJMiyUsLisL2p7Hg9FiQjE5CtX2vbzCPRfGVH5+QWyp0BWLyFvkBgoylpT67rvvsmgNPR8WdkFxkf2TzrbOc+fOuZ7WRiVPBwhIBBM3WFMXtKuNfVJpOqAiIGBNaUJPik9SsW2tzXYR+4fqq9lcKzq/vLSis7trqJeffaCyJm17/TY5G40v5yje+vUvDXPCZtjCluwZwtLU4JrAO1rOYCEJpks0MV7QzRVSBlrUOqVHYqFhfFFrdhvaFlforqAiJHuPnVAynRkgwDLbTFjg5GbnPHrw0JCXYTMuMf7E0SM9nR0sWz+ZWUwc5jKkVuDKR1eRmm2NVlqJT1h3BVty7eb0HDFmbbQBzNGc/mQxWhZeuXJ527Z6pi8Jd+TOGRswmR8GsuVNJAyUEi8YedNlgkH8NIfpmoaw5Zn9BzoK9+XRNrspQ89Yp6lCujyz9H7wgx+8+PJLkVJiZptVqSx3q2vIZU2o1LBzlzdYg84aAtlLMuZsxrOWZl57ig9PUZI9r2mHZgZ6e8OaJKOcVTk0MAil3JyspMZHj2SRt2Pi6PrQ8MCmqgpXpduhY0moZrtIJCfjCT+ePXu6MLS8fc9etBOH41gkLyJzcEs4FdpKUi2q3ALd1tFeWWEeDXvEW6o22x83ShHlt7/9rZPBnjEMp2W2gi7J8+wNWuuG/vcN9NpehANjNDUxTPYOHsAVAniMyjqG6C+8+CLOiSaPLBVAmO9mC4b+c8+dxQnRJvBnavwf/8f/KUgXTaEHJSf69A5fjYdo84g9RwQNePSybgPHPKcuVRKWgPHr5y9csNRDX1UAJPqqkxjIM6EU1npPT5f1pZvS+3oHHMkkWxx+UtzY3KiVGKmubmJ6CubOCNouVN5gJsRuKo8ga5rsKqYJ8z0l4lddw2PCR1wgo4xeUE8xpbBGCrE/Wl+qhUdq0Vb6mJdXLhsasXNj3PsfnDfGADEOeabhDIJkPk736wslri5XN3yMIiaIVm7cumM9U7t1M2mrzCjv6Gy3SGAzAXL27Bl9dwIEeljjDcE1esOmZEV54+OnR4vD5TL2EDAU0xEH1+7cdx/iI6g6yO8Ww+bWFiI0Pq5F6lWq3RLJs/rCCQS5/DgC44h7V1ewI31ozI31DdochmSdEkF5cqIXcEBSRrafEBy2TASN6hEBwC9CCLiNFzOTkqR0557dKIDdqMf0x+W4lYW9+w8aJybv+oYdFJkBf/zEKb3Lys5BNCLBp6iW5pSvkpk4NR0E4xZhtQsfiLkBx/wEDgsG5YV4kisLJ1gx0aChLj5iPTi6iU2KKQ8rfYGto1c2Z9H/4ePHJNlw0GuOHAtCBrc+UhxWv5rWL+ipCytcM/e4uhtNjBo9Bfn06WPV1TWO9FmalpWW2Jh1RY5rj6lRl61WbakxoBCZgGkO/hQNrMyaRqKBxnAG3HuLgRWZBf8paFtfKBrk1ToOqqsjntFBLe/h4z2p8NKzTqlLJvUdNNoHHUCg6cDHkeijsF9Vh3kw2v4pcYeXekraXcdGuStMwh0i9BJw9Md6tWCOOPoS6RataxR87aJGQlwwTHlSdRm26E/RWxvY39OWO47FwkkU5EgAl4Fs8psqNjkfbFFhWVK3dauwMvGsZnSi1d7ZkVNQCIh7EkYkk06Md5G2pm1w+9Y1Y4HqR0xWkdZ1k7m5ta7eQSCx85u2VN+9c9sJLXvBbhorr9gsRfvkuJ2ozNqt2zJy8kfHJlvbO3n+LCcwwiJMRziisBh80CAfkRcF0Ep/vSFvER/RQcmZ2UXE8UZJZTwjiL6jHn55qYwPfkEYVaVh8FEGtTECNJ+oluqK0YcEO2rI9ikIpEhhHQRHRcW8REyE8SfKR0zXojKgee9X/DI2IeZXCzZN+NXHnyjmE7GMLEFDu37SZX1U1wMRgm1U3hv4KONBi571Ha/1xTPiWDVxQELMn9Cg8LUCSXYMOFCK5Bzw37euCcBB81IVFNM7A1YMRtQcSVNRx2EeSaBiuuO9VrT1e5pDJuqCwBXNibwCyj0AyqSnZ2jRQ9SQgQ9tvdVEOGAcI53CkBFHGjFCK1ByE4uIag156WNQhe7YVw8LA5lJJ9Mq+E3S43LCfqkVND0UBlN6ptO98wuzdtQFEggWUtHxgbn4pbSsXMGBXB65BcUr6/FC3ujw0dlJCYMNsIy4jNXxCbGXHEmuQgvXq8XFzy2sWFOvxgGyAXPX0st5mp0nF3hpRnZuLN4ny+3wfs3JKxKqNyWAcWktL784ZCzq7kMK+lx6K2lKnzv3ImPUYcsdJ3ZPTdvFCWIjn4xLV6yg9NgsQ8xIB6vDiTKZarbUBHe4rHokBH0kG6QbBaOjP6b4xpS4RMdnQl6sH/3ol4hsYJpVvacbPVuWY40hacIi/OYIe202V027H354wVRIQWl0SlrCR48MFgi73MYsCeCRw4cFmLa3t/FtA2KFQI0QM8X8CVvzLxyIjWAEkmDImPgE4/X09hM29hIW37t7H+/8RNolG921aycfXGtbiLCnXtykCStDTKCBwp71BTe17hnBzQhQ9ZOm2Tm0cXHxOQUMdLkAhLNbHSnDhQHnq1euo4APK5MkWPwwHvSOb1HFF86+gIwGKoTbW9o1hP60hoEpt8rI6Khr5sw+Rq6fKB9wzJhibKw04EAny6ohpb3Ra4MUEC5F5r4cnFIMkVbRMg7IOiHx8osvWRCKPyTDulYlnU1wePfJuGr3u7i41JV/49PNz548ieT8M5/9LJ+3UEtxXwjrzgLMkmtEoyCgNguwuyME2BAGf8LEA5JCFdeQEYUtABSgtLG+YlPwHezb5VqJxasfXRFvoy/mEZYJ4ypmYCTaTTJzJnUlugZ3aWHmwd17pmapL1nS+r5//0H8MvQsWhjS9Jg4T1tD4GzdUoPF4ingxhLAF1T1QB4IA/wjxYiDVp6sTX003vXFn2H+evDYLMxBSQObr5U39nVEd7CbdLlIWOpScmjwY7Q8wLfu3PGTJdzXvvr13bvS0Zalt3PHLhDsLTz//POQ1xzgOqj7QvSlqGbDoAypkN+W+rp4/oKVqrbIUpIge87g7Ky0xYVwnJcpY/X261/9QodPnTrxUsgh1X/j1g3aligc2HUILLFKjH5inVdaRrfikOZBRyYNg/D40dNiCRNj2+4Z6WkP7t9jSJmURRb9+Z//+Q//4UfYI8WpGdeRmp27ZPMMc49rCyAnAM0K23TgVsXg/bVOmp+DjMnDAhdxmTuunq+rr9cBV6CzCCP26AzisjKNds2ReJh4+dprL4vnxmm8NAZeeS0czWFg6RdoTBzS4D1frFYIPQXthANy81gfOnxg19JOZ1/clEmM1uPWXOdkatFNHccw6sBBK1dCjgwNitkkjuLvJe6tNJ67u3WKFcgVZ8ghoKwLQSJjOz6uSXY0wZ61k/LyAeAxMgKIaKRHH5UkJSw/tKW8jEziRTgEroiXwmyMoGtJqqWOkeA2E6Lf1d0BN3pT0/wKjn6jQJCexXgR4REl7bHY6iFYItXkaLKf5XxCNMidGfjw4vXjJ08jBRreuHpFzh87sKLcHNRiSJw6foLzyaaNXJ+TE9PuBqLc5TpwBZlkKJ/61GfOnDwhsYCl3fvvfQg3aPMcwNyazS47ybbIdHWAnR83cq8ur2yqLM8U3eviCr75OBk2TJGpNoOZeXt2nXIkv625xf4PIiCRD04Z5+BEpgCZpBEMCQZ3TCEG3yRDAe8QnPY3Ag/V1REVO3fQcDuMKsogNe53dbRnJCVkZueQB3efCcV2FM+dq2ZB7ijOmJTUOVsWFKi6mVnBZgWT38LoAodMguxOBiT+4pdCNlW6QJeZhmYIGlNYMK3ngjaKzADxk5I0ETPR8NYFEk7mgTVnkOSR+/ekg3TnjsmJstZrjGBGa4uSJZOEk0cB/iRBdVwOejM5JMMlMHDzwJsIpvHqNGBleamFDXe1LQLVZ+dCEDZtZcgARfiDYk0UhrbGhwcgNPzqgbRjWVAi8cFkNNhRElgtQknrniO1673qAY3YmU5GuV+xAMUUJleGni7oi+6D4w0RjQqLCfYstAwQKLncBtcMAd/Do2HWARbCUIV8hBheezBdoaSBTPIpE6RTRUOIRv2p6KMXGnUe0TcNwxoSMCHm3u1skOeMkA4r+MqN27jVVHHkjLO1DcE/wuvi1gtdWW84j4wMu71S0vSjx4/RJ/IDGptTM7PoA3PKNy8rw5a65oRe2CYsKCqheRypQknplXbu2u3shZxXLqX35s6DB+++94EHPlQHCWYXVsYmZvMLMuzKDA2PYcHTpmbBj46yrQfH/AqXuMLwx1xEhnZEZ88EGIO0S+xjHQxmq2LGT8RcMhOoEEuFpCR2qO6jLnr61QeDTNiaQP/oT9QGzbeZniLCspgRnOaNYsgeVY+qmOQIg+bQHDs8o7nnqJgqdAjIWINW8FQG2hpVUS0f0BTwXkW4AWt/yq/mUcQ3KtUNq5RYMBLWKwy4Ar71IoAIG0288iyVZKgrb1oxlpezl/RapxQG2RCmLUkREzZqMSIFABF5QaNeIiLAynuNxl6GoHxkJNUeENlPRoRnv0IbNALpT3VhaEr2JhomvNRaEZelpDdwsz4CVnlwtKvjQMrxz+oVgi/R+0Y4whtan7E1E/toQmF1uc0k9aJ7U9JcWBcG6SrRXF3GZudAiCO0jRwiQlwca0lacUw4YZqdriMu9k7kDKXc1OPwX08RmrUWznk7ZuCuwMSNxDU3QgsXnJqWTZVrIX4hzoE9cx+DPuAroDchyea5+DRXehYkpycLpROyOz7iz5GxqaTEQRzXKevYudlF3+Pj7W1tos/5X0QthBw16wnJ+W5BnwgrAbfhjo7PZuUUmUm7e/vMwva3ZcpvqK8jf109PUQFv1DENU0j4+NMhZKyEOoAZ5ebkGf8lfVFjp09e3YRFeJKKvIy8/WaGUDx0jaMAVghpF9tGGKck4TUGk6RMYdtdF+KQgc6jQx3HPW7r6ezw7TLfGckJTpHMjgI88LcvNrqLY7bC42Oz0g3v/D97d29R84PE7csllhmvdTR1i6uBubOPVsSyOREjuanF12tRUtIsGTTwKEgnIIATXLj6rX9B3bH9ExI7keh+clShI8ANQwFCzCJcFh0Yu7YA7zbkPGSjlI4hJXP29OOjk3FU60GrO7Lz8K0UVLiWKJrYJrireQZEqTJjCaKGE1sdVqGSbaOa2wkHm6ro+7enplZAyGZn8dKgC9OdZOsQIeerp6Oto5DBw7VVNe4YjwrPXNudrb5aZP+Hj18tPnpM3okNTtbukmmhalN00a9WZIZ6Zjk8MCgkB7x21g5PjZWVllhdeQo3O49e9hhiEDVYFO4TDrmx7SYwUEv+QBBM4hsDYuJ54gBx+aAyWt6btZtYiZTGx1BP2dIr/xUi6a2LbGgHQHkzmcKejm0/wDdG5B56RVKY2xsPH5xqX57iCgbHBrAPjckVG0u725vYUtIQSkqibTQZnLX+tW8yOGnR56tqE0bfEZPHj88eOgIMjLGTIBBnS7Jjzd34cIlXr5YxPignX+yyhKz7d/a2o4pzHTu74rqatlc2NL2A3WNNOICZWU6Q0805yfFUFK1Z/dOE5w+Wkbii1s+zFN//53vcAg6at/Z8eB3777nhlWBAHBzTkKSJTa8yB/oYWhpYVF5eZkmiFZnR5urWqkdKBkaxkvSL37+E4sDBxmlQU9LTVxanLWi5trDchO8cqpRQAiqe/BofNbSH1IiLkvDD1GcvnblsqA32Ogbfjuy5j1K9XR2i3vp6eoyFCkpJ2KvXbtuFQ6gMSytZWDS1lryGs0TLCQbKy2tz3C9KD+tt6drdmraSKZbmX1UBoEgtTa+xfRryNorKTVcw8HQpHP9xPiwsYWO5huFCZPBjwS2b8xnBioL6eCRgwYJ176KmjbOWFRUv3hfaPjQDkLGKRcaf2Iy5GDSF4tFpHB2GVj4U0xsXPJnKrtx4zr09EiglLr4J6shlAgi6wRiuEjsEJPgbKqoUJgKTEtKdu90mOzs0W6EFNrqQkZzqK0JRIA86cc5gkhQACkoKgyX6sXutfFSzI/Z0emoiEco0NzUeuLkMbqD0OssdSlYSF1H8nkRmEeRTGP8rVs3YLI7rL6COUiV6+/AYLvbT9zd6B/MduzcfunSBT4OhprwIXRjjv/4xz9GkE984g1zxED/yPEzpyq2bnFbsOXB7j37XJJy4fxFwaO8BeQKWShE/T109AiZ5lyZnphEbQuniYlZtld2bo5FteDUooK8ju6u8YVRJ41sFKJDTXWV9FMO/qMhzPUUqgiFICiDHcjLyEYN3cERKtXK7V/9q3+F0aQl0oZ6TW5JvG2vX/7ylyy2sO1bXm62JgBAJWZmt7S19w8Mw7ajpwd/EzYShtyjkZjES9HW0gas6piCXDyINvrJBgRgqLBW6HHUo44Jj4kBkogPH04aU6+GFN68a7fx5hmp/YTX8PHAsad31Ie+WHzGtwonC/sJfiIAOEhuUVsHsdi3vjCmAdEoejoBjAIVVRXZmZkUDCklkyWFom5spC/hoFnNBW0yte2yK7V5U9/QaImbSGNWFyLoAr0jVtgbwqOPWkdPTeuRdjWks1HraOWlAkRIHyGsmJfq+gRGx+I3sAmh9AjdDHCDWhndwXQCTMEpDHIkw9QrIDqlrrbEoShgNtMEonkJQx8n8fDdA+BZ6SHXh4ogoI8HGCrpm5CgiR5BmAYA1gcLQM7Ly3SQd2PJ4cL54ZFhWFnIMFekfJZtka1lv2BsfELsQUZK8qbKCkeouDBzQtriJKMdMsDo17133+vq6ZbezHaikGa7mltrjhJqqpkz0rkeQJypkLXacb2tW4s6unuc/rFvAAcoba3bduv2PeOorNLFEemiffhGE1IXZ4YmxEKMjEy49xVdERM7EhMS07PDYRXPKO8l0nn2gBRIirCeEdM3CvgJC/UdH6O+Ey0VEUovlEF/EBCcPKMD6oFgVx3RAIlGmTdEOlKh4PhTYbUMN5A9g6x1MEH2Z9QE+hA/IuF9hJLC0Uu7GYDjgvIaIhVQjYopEAmDKjBUADTeXQ+EnDqKEFbYyDLWNIeMZANAoDwgAtcxEmG98pK/eAFtH0iSJSas08UaJR60q+b8pFMaIpDgaAs+Wtcv76PqWkFLhNKoQ0wKxECGJa6PKhCGjOqKeeNXyNDVpNHRRpgEMQ52dqA8VHUhgg9VvRa2pKJOsc9M2GgvZHRRoKWL3yxKY+NIAfhA2J8aAkeLnp1bgbxFTjDoY2sPDSkWyYl2teXjpV54bzh4VlEkgAut1QzykppsOEjmscI3wCuwssZUFZBjmyI+WcjTytL8LIRRzfYw3o2NjQgrCskJ/Vtes6SLTwgrIh1ntyysrA8Nj1vAaAXO45OzS0tjN+8+4BCRR5KfXrZS1QaGR5dDNIt949X+/ia37sLQQVlxuUwu3k3ZEaqqa9KysiXC2ojfEA/Z1NL86isvsVyNHStEi1tENglquqioUJ4TJKYN2MHkDX9NvvW1DW/9+jdoTiRwEFnQmQBw37IHnAn0J5RwyrTIIGafc61WV28i4TalnSjCoKzszJ07dvR0dxlRTx8/YZs+e9LoqlNCxWGK/PAhPz6RyY4RmqbuNGfD9hOf+AQvFZSc4+RysQNsQNH5x44fVV6Gjwifl19+6f3fvUNp8bT+7Oc/lQyJ2WA38uTJ05Szj1bIFWWFUAaXHkGenjG7WQxgkPekwuzn7ByPqtsDGKPiFSGGVvrD/MYRs7lQH8Igp5O0wZZA7J9JO2azYS0qoga05cUVJ478k5PdbinJ6+5xT093TnY2qw8a7Cj2lUmTOWetostmc4zojCXK9ObSxYsnzpzeVFsnJ87sZDDA2KzDg/1sD5nEIY9E3AzyDktio2vMyA/Of8iVKfCbu90heLb4j9/8qeGAWXqqPJwNBE4KfLcDhqQmPmOBnINAP3gWb4eVOgI3DemaSZ/QGgU49eTJY05YXLaiO3708PXbd+wMEA6ertiwChnDVD937jkB2LaLrU1ffunF8opK87Ql35NnTxGcSOAp5UCiiNbCzHRBQf7C/HxrWzuD1kKR8YD1UIokAdpaR3mMwD61IMxAB8F87T0xAIe2RxZD3rP5yEvnauCjsBYJwJ1bt9nVDk8yaRCThaBrfQPChzKACkzZs/eNz3z6//3X/7u+u6/NhlKuC4Hzcp0ZSElPvXPztoT/gme4XJAFeTWhIsISG0gaBUkba4uD/V3xG8s7Gup279yBpq3NAvcLxyfGXIswOhGO5AqcoEfCZdoLIY2X42u7d27n0acU/ApFZjpOoOyOXXsc7V1ZDkdJttTWaYP0sIeE0RvkktCLl6KzTaXEl/ToNk5zh8dGSInlsh20kaE+cT+1NbtlpX3y8EFKUqpaDEpIEz4CgZcI7YGIGzMWlwCimo0n65b2didmejdXbUFKVDPY9NxQMf4JupUurMzBFmrCwtBiz559Wn/zzZ9YstucsssDfkzU2rZtb3DX+5QbrZuewYGqRz5JGXxUJGTDg2HtKGje/Q5ezkuCNTlZ11A3ZJVPg8WtmZ/5IC3cRdEmJ1Xq8sjwkEgIdSVCnhwbtdailAUgEAKIuW3KkkC6Vg05A7CtbquGdAeDaRBOkOu3bjKXnzY+Y4/t2rXHLrP5S/yFw3am0cgkwqzIHhIC9OUvfcn48T5IzNw01YpQWrcwd56f9mFYSv5l/g6SUVL0sY9/Rj4HbRk5FgNO8z64f9eK4tSJ44QShljpMvOwXzw67gLwJ4+f9vT3Zbs5ZXWZ0SOkyJKXwLNi6QtYoTMupySmyFWsXc6n/JzscEZidkbupOysTAt/FJXHRvzyemJ8eoo7GZNXlxaVnJsNZ16NbZs/YUJyVerQkPGGVuSNvYv4BIC25VkxRP/sz/4skgpDxXzAjDAOOTmUMQva/RRCzUFLR6Pq1vo6Y6zpaWNnd4/+1jdsN8zmFhZdNSLCtrjS1vmClYC03AJwxbZRPfwyUi1pnbwBCDemgDy2sOIQMhas+rw3X5JqQ47ISetWWFK6fftO1EMxfKGgdcRum+G3fds2e3+MJEwJ2bLj4ikIesScF21G6YWVAwGwTUkmtWsmoB+dnaBHQCC66vrEnm3qJeuLnwQOolhefsEf/eHn3Ang+g/KnXgnJWUoCYhZBEBY8aUCS4i8pKqIMdp6CLNd7MCiN5EJ4qWf1PJnGAixlblWPKMJUiC+Mv5U0SYGtehXbNKKikZrVEAZdb3RonmCmtYLClRDAaXl5egZ38HRF7X8pEqsm3NYQPycuGXWxqyuOa5qrFQeDow93yQt5vV37Di2tkkIddMFVrPGkhLLKyuFTdu4M9akQZeGVKZat/AM9fWkJccXFrjlJISUZMTykwptcSrJyOU8A9ZUx9kPH/Th+JAtjvZz3Khh+w7HHCurt8w0PnW0t72jx5VebZ02ArtffvlV1rpJ1W0Qlj5Bd8XRK+nsPRYRX2lnd39XZzcjDJIcZ1zwNkutO7gSYOswp65pERW4hROYfbF/8jlIK+PZtOo5/Aue6eTQy+wQ0IXs3EsmIWTECJEWaJiRkJmclCKC1k84xclIEsAgt4phigd9p+58x7R3gVo6i30IqwpkfLAsMi796j30fMPfoPDtT2KsaeclvNG6N0pCCQs0ERM8yy7LvfAeAlqPBNJoCsz6p2WhMn7VHASU0aifiJBnssHNCDdACEls2yQskGINMdRCsJm6Tlua1wxJVURnAaW83kWoIpQ/ddzKB8JUij8BIeS6KRekn3jBGcowiV6KR5d123t9kcI1JS1dAXW5+0318IFe6GPsxiXw1QIz6ibI3sDWnyx+mt9tg8HH6crolCTk0Cm2SE5WZiBRXIipi3rEFTK3Gvbi1CMk3BpcjH7SL4kZHNWDAJc9sHJPifj3PwBCunUDAlSuPYO1uHUKNqT+tOhdXZO2ZXxa4iYnBKQGSQvJJJMSN1ISF+eWEpLXbEwlp6VMmPqn58SLi4lkZBAALvWhkan5xfXk1CSBzSIMXeouq4ysEvBJTEqVtOjGzbvmLBwKpxwmp2EV2yiYKRyd0oXh0Snr64mpoVu371t1SFPGYbF7z95t23cMjQzDhS51aQBHr10R6xO3mZqy9dTVacSAGfSo8YkIDQqWDnEhtzUVCpeXls1MzglmdmaMzo+0JcsVTymKSDgNZA8YR6/CML9QIp2rgEfSbuBbn5i/Ll+48NzZ08GKWF0FSiaGD95/7/nnn1eRtWZQsxZ0BFjSSHK0ZWKi9Mx65hEamwDs3L0LqhYAPZ09WuEVlkvj1KlTcBb/o4A54mc/+6kIW5PX/bt3i2U+6Ozms3M6jFZ01lM0hPZAI1O2SrCeQhPiJbTDgymppLQoK6s4P7+AJeAoNhKZcYjQvn37mTHmAtsv/kRPEIyvzt4eV/H85u13KK6gyVNTPv9HXwRUIMDv3nuvqblliygjcZL0xuKCA7juz/rVL3+pv9/4q7+iYxEfzRFEMhLyuW/3nk+89vpbb7115/ZtzsFjx4/fuX6ThWpJ49fkhETXOhl68CwuKdTuwrIkkHGc694IiMjJz3NQXtgtIbeu4yU0j9vcUBdJzYB4SnQdQZE7W+CNQ73mxxMnT9aG4Ey5HCdRkpuYBhvo63/y6PHmTVVGt306p3jNxVzKhw7sp7QZfg6AmY8Orm/cuHFrz77907N2Toy7eHyfmTLJbmGN3Lz+0eT4CDf08PCQaePA/kOOTAwOjdBSv/rVb9hC3OraQlXKhi1Kqu3YHzl2qmHbDqamWYBoSfmA2p7dS+Psn1sRIokV3eA9hE3ueqePahEP2oDe9qe6kKeydNlD8Ei2iQordpnJN77xDUbyz372MxRAKJEFLDrCoyJhs7VlxrRd4YSUtEZcfnEhqG/Ovoc4i61ba0nazZs3YfuFL3750qVLdDsr/ey5Fwhw0uaKUmzQvHucBvq73T4g/P7kyeNtnR0cIs3NrX5ifI+OjZFC2RsrskOqdZoRC6XBQlxyb57AZjYKUwlZGX+inx8/eeKaW53ZUl379ttvW6krqecUIL7GrO0B3ncdKBDNHzvFRRxvXb9mxAq8fNb4dKh/yGI9OzNH05Q10hhm9u5pWDliCSiZdkRc572HCavOEodKMp6t2hEX6Q14o9Qz56jxKec3I0wxvbBkR2UoKYyIGEAQCRb4RrUPQ43HN9N5wYqKYNHev6vjJmHpRPHSoWwLAOuf/ftC4K9OcbVygziky01uJYN0SKw5tZ7E0n5B0sSiFVlp3Z2+JOBpasokQiwoI6hGEm9qwadI1PCYZmfLQg8dgnAsLcZ6V+aNX0FTXlspKeHMijL0l9m3vKKMpO7evd+l4lQAS8usAE8NkU5iB4gHg9nehYWTVjq6uhmGGZnp4oMs22DqjjB3fllD4y8Cph2wnx7f3dnjSqxt9TvsfY6HW+WmqiqrxBbY5WWZiXhl87mw3coH/Y2TL3zpi0QQDqhtcoItmtA+/kRk3nv0Mes7CyJKhiZSQLZdgkRmrDrRECNMPMBCm6gA5ScSqDrJ1iN+ffrCsCFOqpN1bEVMCpEbCVnYbYhPhYGm5Pe///3bd+8oeezIYUf6MNexudT07MeNz+pr61nYpqXMrJyDhw9pUXQ+VHUBfCe0UBUpyAnB8wYBTXvSnhIb5NUQ17ImcAdDKX0vLUGhiss6IlIf/pFp4lu/4AmUOxmc1Pzwww/3Ly0BqF1dwBS0wh1s1QvPoHmpFpGurtmML4RZXj0iCrGgFmPhFkLahCo5hxq8d9JqOByalGzHsGdw3EY8+ugOmUFGdrHhoyPgQxJAAcERhfGIWw7B9SXioPcRbgQP11QMKjgWTahpYH0bqnqEztQCCpMBb5CC6QZ5b3BWSeLt0nVNMPwAV8V7BTgZfbtrRklkUcvyUmf9CbjycPBBH4MC2jS4vsNQrVAxdvxAMT9xZSIUB6GgQfhYAERAOju7YwuPRDcQ2e9ez3DvYRwFXVZe6QDA3KyTwSG4n19aAvr8vDw/8QNVVVfzawQOzs6TK3hv37mDRra9y/QX6UEVOHJDydglEPgng6Czj4XFpX0DLqBdgAkLtbyoZEBC5Ln5rfU7Vtc5dFd6B0fcROYML/d6Xl4+KeJiIBimJbEQG0kJFqLIhYAYgUrg6Cayk2d00CO/ekYcP2VkheMZHgAgJ0p6j7wQBgEjFPYrKgUirq9Rg2iFpyArrK7RpO/EGFXVRWc/ITV2g6OAP8kY1gAAlOpewsefWvQNjjIY50/rNEDwIqruV3/SPBBWRruq02l+9aeKJByqCsBQF/wKAc8aglWEvG9VwCHAztOQDYgp7Bsa3F3gaDqiA/q4BAO2pFSPIvS81AUFonYB1G5MYFa8CaISow/Rwg5i6QOgAirCB1aqK+MBDpDRtIrmL1INB2+0CCWd4qxXXXYRFUGDgL7E1HWII/aSH81ZnfzU3JX0ECAUIlNix3tC1ZhuBznWkPdLDmUSg4huDERlAAQWcxUGFia6E8DiVEK8SASth8XdCqoYO4Qw7E3YjvYtUsiWsiQ/jg6781gSZwfHTSfx8sYuLoxNT6YtpKCe+LjJ2TnWElArIehq1oXElpnpmWZM8imMatHdsdZFJDQpLTMnPYPtAjdLQgrIDjCCbIjQj09w/5KbStPSsx2ksAngAtibd+5be3T39fLy8AXef3BPJgVhHrbjqFZZNJA95JTLLWhta0ZSVEB5+5YPWx/aiNNNBFFGr2nC9JRMasXMTmFy8DO2zCzIhTICLwH0J1uNPjeDi1+wwyPE3FFGbgCRqLSPkytFBbVcskY6g489CjgNTDEyKPnC8Ii7h5AQBmCNFMPKfi9F56WtXROT2d+Qkabl+u1bzljGr4dFMokF0xxk0L355ptU3R9/9at/+qd/Aoi4FxUhJpEgw5F7iDYGUH+VB4pQqUvL6ZSRhen+lCAfR8rLKwSbETxOG3pURADlBje1DBnAHQgmD6YDYHMK8k0GSA1VR0VPvfFGWnKaEUeTc+c1N7fcuXvXikUIN38Ep4KRiJhaMeYVI4rRVAgHImdQsCbPnz9fs7n6m9/8Jv9af29fXn6efX5SZLoRoWSPkfSiiY5YerP7rV5KKsrBL63c9PTxU0wx+kyRlmRuc+NDtIiSfZH82M12jrQ/PxjNMAn+iNgtbJiIfUY0uYKDnnKf6TVyGbPONHoDscK83H657rvaHShtbHya6sqAzOyDBw6lZqQ7qqpTHHCaFgMv/8/nP/e58dE6a6u56Sk3bXP1a9FerghWAgA4ARN7Y9UeTLXsrG1bayvke6nqQTrjzxgMjs4Uk1RwTIs6GR4OgeVMQXlmSen58xddJyd8iPzQAGTAPl6ku3RkaSnkNOsbGGTEIqy2ZjtmiRaWoS1b31oTQWwXYCiBp8oOHTk8OTr+61//+k+//g1jW/O+h4cG/GqAbIzKO5InmVhHXPzlKx99/PVPMg8sikxPeOHoC2mEZ9I3vv7H9x7c5wt/+qyxpLjUnji89fzQkSOonJmVJU9qEi9LTnY9o6ahYXZ+0XJQTaIAUXYd6Se4ECLi12/etha3/n71tY+xoqxla2tqdmyr1zaJ5Osl1leuXmM/GU5YJU8hyZbNhjTTQYP99se6iovyRgZEBE7Y7hQRXlCY514GG5RUKjgaxTkEoscIvYFXX19nVJADdNRDsur9gQObYehBb6VMJEDRip+T3rXKamkIWZXXkJ88W40QbsymO4iXpN0CkccmpiRShB7p1y5xoQIw259FBfk6QiuqCLetNVt27GyYW1zZvGWLowJWaaLKrDcK81TKR0wrcttY7vZwzaFlq/Eg1oVkiPhCHNw1XBETwrppsWTZyuSl1FQ3gI0iaUNRdeJJSKB24MAhxETzMJKDil/XI4wnQI6/u4O6vaNNateysk1+FXfIOSS3CYIQj3379hw/dsQaQy3tBr0ZS2XQ1NKakp595NhxMmB2CYfDOzteeOGF+YU5lpfdbXiajnmspSi5d++KsNVdB/Zl52WNj0zIYraZm7y93YKFwHCZvPzyy3YeteBaJbiNj4wXFxZWlJb1rnTLoSsxqLsFcL+0qBCGz2KdKi4IwcryVedkZriUnmdQi8TagKFx0JwPhhZQ3qgzElCDHKMhIvjVnwQDuYwufxpdKGmzmzyrTkQTV8IBIJ21pDn3wvMgU6nKK+Z9fkFi8eyMOG9n0aBBEuq3bY/p0GVp7Co2hbauX79JZnQNSnDQL7O5whFKgse0a0/Arxgh0RC5ohYpJqpKW0oKGMU18k+o2N/oDzcfCNCJn/3sZ3ft2aMuGcMdBSAJprZgQj7BQTQaXHn90l9OEQrOlGDko0NaegqRtjVpkYYydt5wzFb+7Bx/X9iRlPpaczAEH2LBEQi91HS984aU6YtfdV8xPyEOUkeWImSIogKIaXzRZZDRBa2rCDcYwtZINCIi+UReTPRrVBEE0DzDVkWtRE56danO6Ffw9SvCBx20pV+xkmGHge2lXagqgz7+BMefylMC4EBei95biREJm2xME3CkOvEesx0xhzAxmF5aGBgYdhKA/ZmdmV5VXloSu3V7NGydL3MuBMYEUy8tO5YdmPLhTRDkioyd3d2G6r49+3konbYUMsT3pgvi7np6++BjHWVutt2M144HQMAAlEOdW8healJq77AMGpOzYjopdglIF5en/GQuZ4vEr/NO2Qx0N2+mPT7/62lE8KinWIyMOuujLxgdcX8hrN3CMXGIK6lRn/AqVgYEtPXxQBrVSjQ8YuxDDaAiNukd6cJ36gLZvUdblMcdbyL6q0VZIbU//YrXGtIirAD3Bnxo+ya6ypiS8UstbRoFmvMTyF76QN6f2MdPblxgE1JDgCDBVruAa0sxVaDko0d+DYHGSakUlGKqkKt/JEUs8G95IdzzBasAeSOBQ9eBHM1pAgSteParup69hFWgSczsjprQip80AnMlYeLbS1aRtiDgo8uGiQdVyooKFUBG2HoACnQFWMm+bV2Ao5hfwQTIEbJlvyQG+ZSkx+AwHCxHJUxUl9GGTHQ0gN7D1uyjfXiC5uONYkF+lm2yJTBkvfEeCywurFfpa39qzrLRuRLvUdg4dwVNWIj8I5Lc9knhpO/6hmsGjJeUjbQFfid2fYJTUavmmNS0dBn5eHno/9iBilWjaSM+2RHkZC6EBPtOGQ7r6yamm2Icm9FBYN38YuPBGLHY2IhfGx7pLS1fl2193Y3d+cV0mDiKbdvqxYIKAZ2cmWxze3pimAodwCUAXV09uuj+H1ZXX7991yDqdBHHAIY6DUkV9w/2cT6qwm944YNL0tJz5/3n//yfbfbyM2KW1bttAYiRamKGRDxf9JJYvKvXPqqtqbb9wsFsSpIGAKuyMkJiA3Ej//2HP8DWL37hy/bk+3q6Zbrr6++h4l5/7TUCDzKB5jm2Xjxz+rSSly9dYsZZZ+/ftw/ZJdxjhtL/wwPDMREKitcRVQtMgqQjf//3f3/mzAkrk2vXr3B0kVIBi24KsmflLGzj08dgxsXXbWsItxTL9OBOWYFVit26HdafJjgrDXD6+8LsoLCRlZmRffjwETpHi/6kn4VICMbWIk/E48anbptxoo4CcZJ1cHiofus2lDdg2bjmbkA219Tu3LkLWFRCatFQiKY77CJa3TKObNAGxotZhnLmZnEcwiB674P33/jEJySxkGLk1ddf+9GPfiRzoPRKUoZiH3UxtzBLGwwODwBotOTmpx0+djQjPWxXuo/ZQl/UmZUqS0n3BV9lHDgobA15t9bWslH1/S/+57+0O8GcCzNpdzeyuICMnNDzar3z9tu4Y21HMwsram9pzspM894Wlr2IgcFgc+7avY9VphSEEccMjjJ37jTj4/z0xJED+8iR4zFyLRnUDpmkpQd3A2oEG7Kmhtmmv1OTEwZyU+PTnMJyYQJxcXNcIqjHEHvwQCpCixNc4gltx1KjXlhETk6uBHFyyNpqNu50eXRkjH2/uLwEPksy0H9+gRfJBEphcmUyF48fCUu1/v4+d6D963/9r5PSUx2It3+rUxaKzquYF0JG1qkpN0wJmhDp59/QYD9+wb8vdvK+usrOQK9WbFYz9rrFgxjINlH5Zf7mv/2t2GganzDRMr/61a9YbCwYRWF57uxZtgiL3w6gU94Wvh1tLXt375TPQ2gXHWsTwKCybjY2GCIy4bz0wsu2LbQne4BAeUEID580trS2T0yGU+diI/zK2WdpSCirN4X4tukpyTqkNV4fHxXHkiZ+ob0zZLOiNULus9V1rjvX2TqvQ395bxcJsWKSXcw3QBeb8CBPJvAV2qLcKF+DjWmuX5banAphdC0suKjcsQQH3Z3gptkxQDHvOZKfNTepSztrxQPnI9xsetqnF4Y1Pz2zZ9deeVog8Oprr6NPcmqaoeksVOXmmo+/8RnCm5AcHOQO4JeXVcq6KHMwJLWrifKY80lGGheLINS2HWHpaT4zogglmxL+eKMk5EfGx6xJegf6jcwDhw+5e8V2J5cMt+jYxOTTZy1SF2+p2UrHylxPGrgge/v7zBA6YjFGGugdZ8ONCrEi5ECPiDtM9M48haf8OqL9qHJuIeaRpY5/L770Ekm4e/e28j5GuLBCLvxnT5uoFdaJ7Ciyj1HrTFUUMwYqK8qcvJFhBv4SRUtsnF9U4MDTV7/2NcEJ1j5f/cbX1b/nurex0ceNjTw9dAp1A7i+o79RDUkbIzQalcq+940yhoGdFhPh3ds3fX906UJFWQlPDPUNgoUv1WPKh0mICs3LzszOEHllrRjdLS9GFh0Mg6BNYte2Czo0JaADiTUYDGNCQhPpBa+JW1dpk1Mnz1i5oactwksfXQ4zzeRkaXk5T52ZlnZ+7tzZp03PHj157KKc4FdPTMBQY9g5vO1GF8+NwilpAavCYvFRQjjsJMrTSrHqrCsYNe16FPHljplyThNaIUlYw12E+BWxPAbmKlKBSjgF2462Nsbo4vzs8uK8qMr+3m7WKtOhoqTUxZC1W7bYozOCoAoO+NqiZmkt7itberPT425mceZ1766dm8OBgdSp8TEZ7nKzMkk4maF9EFxz/hQ5Q2jxwhCw9YGGNm3MLsIMlHGY2NATVBomv4QQn8BVo7zdf5ooKMdwLWiWWdCfuEPegKL6vTfc9CsyWSKyO0cOpl8FM3C00HS4EyDHTr6GpuPijOiKsgBWVIwJnvlibvNT9NGE5tTSaypV3cj88lITGlRMuyBriAUDHyHwjBEbpGpKQ8F5w2Ugj8royOTy6kZblwO7E85PpqRmjU3OPHjU1N03lFdU0tc/NDY1U1BUOjruBsbFltYOI6i4pGIjIbl/aEQilNSMrCfPWj1cu3VnZGyyR3rFsQmBQMAZYSw54254dHJ1I7l6a0PZps0jE1OPnzQNDA2zqFwYDL24NTEbRClwxJgVh6ZLttH9JF8GdWGLJLxfWmHw+ScOxHrD/psZNea1nxBjxuVDBphcxq90BeqKMyFj3KLAYigus8sw1y6HxSLDC8X8iZU+fkVGNCcSHrwhEuZXzxBAVfTEC/SM+OsNEeXDM12ZJsiqtoiub2hghzeq4IXq/iSZOAUrb8DUtMIYSnSxxl4HjsPcIwiwUob8aE5J1f1JWpSBFaYLqwmdErs9FnycVAr9aYWmulZ8ux/HfinRcOrRvBZSZMZWSqw3CxIogayiD2w9e0+YQQafEHoDiHaJEDRiEhXWDArglFqIoPuGre/AQYt56thEM78kJEMVKCERZHRK3310Cne8IcwoaQNMHD5TwJ1Ttp7E2WMBJEkL5mpRdZBhQtQ1p1G4aR1Tjh07wQXuJBipMN69V1gZ3xAGxLfFLYCacWQA6Xh2xcuZmBq27xRK58Ae8zoaksqHJ1venAEpvKg2KNIke9Apb33rGc+oIHWmvLnZ7a3CEuBt2RAoKCfpymr/4JCISumeXVoglN/lg46YJqdlrscnycA7Nj5pEncI1S3XXCoirfn1+CMGRsbyC8vauwawa2p64enTNnTaSEw9f/naEBbOzt++8/D2/UcXLl2t2FQrGVFn14DoJrli3IvqQu6JcQH9jU43WOPYzZamwgD/V//yr371819cvfyR3Nz2h033BpMoGsOLzuCLZf23tDYJ3MCayxcuUsJhUIQzDBNcokiEnvhhyrR4kYr09JmTlVWbHK/u6R/ILShsae9IzcjcFm6uXXjw8LHlkI1KRk5rS7sNQ64Z0XvGBbfEpz7xSTcscTlxvoLJKDJHY5OxTlSMWTNgZUVIi4k33hh9pB1PMYTLFUoK+BgjhhjZo+3JG8lnVZuXLfL4eojBxz72sSK3k8TuAiIe2E1OWEfMOSk7FWbh0N5GnGLmOM5cEXE0wMnTp3h4TXmz87NWhu4dE1EmA0ddfa3CHPw2zOfnxV7aiyiaW5zPyM7cs3+v8Jim1pYHjx9l5+axQy5dvmZFJwindnM1jS1wxbJyZ8P2sZFhk5fcoITfZWGUEj0sSJbGmJuZZfP8zd/+/z48/77dYNcEJSbFI872naHXTHOBJBSI0Y0mUuJYZT16eH+wr9+4YNdxkOssShodd+7dNefKXiqB4P0HD0QQzi4uGO/oZmjEFNKo2VzARUtzk+gF6bphNeL478KMczhHDx5YWaCaktq7OuVgIPxGDROC8CQmrPPIHDt6uLAg7+6tm9/5zncAZKWI8BQfKPk7jWFEPmt8nJeTWVe7RUjE0sJcbnaG7Yvz5z80MDBCvqma2jp3DlvCETlCKMrLNDo5Nd7XE0xzVor+El2DHaOJIo0Ngp8EQhNE61KK1JJSrylwu8RSeb7zzu+IxEdXrhYLsQqHfSuJHPEmPAD62OKkBLxkVTI/YCKmhlOSfWiyViApPjHt1dfeIHACFqanh48cPUl9bK2tF7JWkFtgiSNzpUUJ5z1OWGevbqw6+J+/ljk81GcHUzyMfDJYQr2uLK4IlTbkvv7Hf/zBhx/+/Oc/s7T94Y9+XFtbJ5ocIo3Pnu3cuSM7N+vW7ZtUklCftXVrx+0uuC7Mz+3vHZBzcM/ucAvG7dsPnU+tqW2wr5jiCj63YCSnOppqqijNK6BYPVCIFpoWEtzkxsmTJ43MfcxgfKCUNFJIeer0CdrZDEGPy9QpBqizrT2o9ZnZzOot1B8vu2EppMzwSM/OsdgoKi7tH3iIW7SevZv41Thx6oho6GamZEyMTuRmFfz6V29becclOcY37kRgR2dnRU395rqd5r3urr7f/uYtOCiAqnaFHjx4hOj54mFcblK9yYGo/Yf3j0yM0vX2yMKG6tj40MgoX0VVteiRRcHoe/buGxkbl8NbJspnTc2067aG7UZvc0dX7/CotLwbSel1O3fPz847Or+1phZBisuKBeHZfqHtWQOUOzGSF8wWfVAKicXmxQcPHhr/li4SLgWjJDPj7d+8ZVlMLMjZtgbxDPHoIEalcfqJB2Et//yff8vJWhssT5tb6B364mmTTZ48J7Bldq7aXLEMiYXZ3KzU/Jx0m8luSLDWunTtsi5THCEBTlnYhIlPFYWdOLe8eO/SXamH3IHKsjHTLM5PTy5OjQyN7rHHOjiipxJBGO3//dt/19jULL2Dqz57uloPHdxbXla0uDBn/ZmUkICnouJ01kaeDVbafGxyLFzGtrpcJJ4+NbG3p8MpgonJsfGxyd7zffIamddu3rilomEmp5OZEW6S6eo79U2hGBWCpxn0TDDRQRZp+isiDt/d5kYjMA5MgZevXq6pq5mem/71b39NB33+859HZzek+JC3sJ7p6SWczz13+uJHV8Rrz82LRpifnjIknXaePHXihKa7uzqc7nfluC3mvh45VTMY6+TN/CPECBzqm+RUlpfzwdy+ed2dGAx46/v+nm6LGaprfKifSLc1P01MTbauNVWYqZyeEDV389pNKIX82dPTly+/VZifv+/AIc97dtavrce3dPYP9nQkJzqRmcHvZbOlvDrsnNJ3pr9o+ndnrBtUKWse6+otVRSKXzkxxZuKB7MeoL+sEfjI2f3kzWxhc4rUlWyUWPciqRFHRdrFop7oaG+MIB0ER+90gdZGUmS/cu26bVOSoDteKuzoDOVgIhT0TLBpGDcCZmcZs9Mut7abZAqMGRw8BatC7HlYGSK+9VErrBXPbMOa2lowZfbQnBuV2FuulHHiTRIqdy2JMJapA3PlmPKTJFpw7ujsy7PGnlwwe2VBeW51264D3Bxj04sZucVDo1Md3VfOnTvHiMJoM6WTuwPDz6SEDx5UK6ykpCctnSvrSYvuaF8OvnC7wVaGyFtRkeVS5VhGlKW+Yeu0BQo1JS2kP6I57d+x10hvQmrwiFvFiLdmHbuJ3OiSRGlxbtEZLDlWCKMVE8gCkJx2YGVurE+myukoJZ/y4xMF+Xm4z2eWmpRGvaAMu7WitJKbISM10xJCpkTToV2FpbXlhdTgr3UXpwnFcJQiSUYvn8jNTzNQpHAWDmfgeLaaMTOxCRAY7zCHtmQa4jLNmZScyrUcy1AfjGP7aOjv6gMeRwIgBEEcmKHR1NysiShfDdOeV4hqEvWF4zFnzbIQcF3WHbj5xmWGESa6IM8AkU4D0fJil50RIDaEjJnlZSXopuMKCzLq7x9YKw3e+tKy8uzsrLGRsa6erpyscBGeTXyhVNZmuXkFOmJSI3XwYbr5npwKFwzpC1uBf4Fth3cMLPcKm1mCOz0l3OADss2EwYEhc5APa8/GMjXLJsNNl07HXPLLYQFQUJgczvuON8RusCKiK6zU9XW8MDfje6zwenZxboqc6PwB0WIpr4AtpRUmmtDEsFoIFk8ZVFmk9vR279xj9aKtwvzCoYHRspJyWGWmZ624+mt6Dkeys3JQL2TLmZhCWSFHDK/49QRDm4tw69YqqPJKGndTk+FyOnrPt5dlRWXsnunVpay0TD3C6GzmXnpI3uXMovMOlgJ8t1S0Fh1bxhGLF/mAXUlmALi/j3BahhrcDG5GPwpytHjpw/lto6S9qz1cR+gaRP6JsjKknp5RcBDCj591SaWIPqwTfoOB/sHVxYWDB/a39/R6s2ff0byC8oTuAYzuG3RItBiBFxfWent6ZAZ58qi1uKhgYXKScZnnRtKCAuffUMnBNj4aylPwBvefzf+49WVWFARpNjsqv/71L52mM0lSuTZLxTuhNro5NOUeBllrhPMFvZcYt7S+fOvRY4HU8WlZKwkp/aOTRHEjKeVxU0uRDCElJcwG6fw51EJYVE+fkZ2Vn82AkzuI/6K9rUOcJ19EiLtMz9i9ew+zrKdvaNeefcRseWW9but2O4E5Wbmcbmbqg/sPoQnuM2wy0jJLeBnkPcxInpuZ31bXsLEWV1xSIv5QCKvNlZ6+Ae6MvQf2k8ZHjY/Z/c9amlZcQ1tT3dHVRfCEZ5PD3Jx8uZ5a29uHR8aka+fMMvFZc5eUO6uQ5kaF1ramb//9f3fSj8CnpiTu3rPr2//X39Fs3/72/8VFVVxalJic4GoN2sA9hgJVebsKSyvnV+PWxX455hdCxTbsSA/29p08eqS2vu69935Hh9ecOUV1DPT2GBT2pdjfrjIlXeXFJS1PG8+cOL6pqkpIAso//9Lz9kA22ZHZVPHRtY+s3AwTfo29u3ZzIzpDzKzvaG+t21pji9EsU1BUYGnx+ic/0dLeZt7cvmcXo/9B4+M9u/cx6PHOOPKhNrc3bBXNIfvCvVvXKbT5uenUhI1tNZsB31y7g0eMyxV68rZJ2s7gpsTmZqfmuafDGfqsuJWlV15+4Uc/+ocf/vCH1sC8q46+UBeSa929fZXsFeW7ejspa1NpZ0ujY2bOBZ04doQH201nFo2uy3D62T7i3ds35mYs2Ny7XeRQhGWPkBCHsE+cOumK5Lu3bktR/fipdWnwW83IlTs1ITLZKkvC3W07tg/19XOUExIGs/W50Ljq6q0SGA6PcvOFXGFFRXmGpwHLfHL3lJ+wT7SYBIxMteaWZ7YnHWJ2oh/9kw4dPsrip/HRjm+b+UUWCQq9TwPymFqF8H9Tr88/d5Z8lJaXDI/0/+Lnb9Iy1RUhBNmt1w7fWHw4VWZedP6M6JCPr3zpy4z+xeV1Zx24CR1n4d0UEEndP332xMi05j588EhZcO+tWQbRR/rMg/7yy686suVEL2mgksw6tLb5aW09bt/+g5DGb6NCK7/4xc8EM928+YFl2R/+4R/KvRjNIjps5OgU7QwCVFke9JrlWnpSBucf7QBI47Onrugy3C05nHmgj5T33pLAKGKFoMlI/zDfqhsJxqZHQ/x3cXFnTzc8McnObHpGtgsa8wtLhE/O2+vJyu3q6TMOOW9sIDhzyXRmWFAN3PNFdVuZ+wbb/kMH3nrrLUwSCITIOrIndpml5lwmby2ud4tri/wNlKZ4OMjbGmNDchIZY6YEt6tYC8hQDjIj1drXCDcwmJK64GIvaz74o4PphtecBNvA8k3usfLRwycowKTIyMoRJv6nH/+kRS1VvmdrSGBvUDHZUeOF519qetaya+ce/gnvubUgpiLaMv5279ttP0t6MeOwoqzMyH/vww+ccOruleUg+8LlCzPzMx97/TWY7D90EBGC6TA+TuKl0/KhgmWaYxk8bWzkNAuadH2d1hNHSzBwmQGHF6OD/SShs6M9sjx4WYwK6QnZFkxJ1JMIDIt5tkwkTgPXbaqcGB3esb3h4aPHQhhsEPUPBA2rxYuXL5E6itrmsivz6uvqKstK5VlAKEPdrKNMsDvX1lAJYvQRR4vVrzckpKWNf7+NfwiPNGcrAKlt6RD4sEJIS3WxwHLTSlXJZokmecKU2blrz9tvv+P0M4eaZWrwTrl3aj4058C9N0RLGCFTifgZyfjlCgVya/XFHDGl6/WJY8cRp+lZI0rSBWbjgrw8427zpk0EuK2ltZQmKSmBjD1BgwvpLK1tglMB+GVJJkOrBCBmfoIq+XeM1+ucxehmrxMonmJjJJjLq+GYI8Jqd0EGpjjH5TczJilQCwB2P+6THwOTPFMXwfrPsHpJNt6dnhcYyI9u+KCYvoCMjFQqaGQPnX3wNEwtTClXLC0FibJAEqOhgGff4Psm+X4FXDG1FqaZVus29/XOB3wF4Pz7KgashoBVVwGF/ap6elqwvzWqd6oEW3NxEQJWud4rxkqWYkotKzThsMTY5bDcxiPd/cyvcHVGYgrPWMwLVZGTX9LS2p2XXyr4oa21C5eRdHhkHCgf7UIAbjEDN9FGAQuS4mLEAW6TwfhdXU+cmAk70dBAxgQGcizeCS9gi4m6D4K+QMkB7/HJMS89M4Sdh/HhE6exeRyXFoXFAzpp4UoS/ZMQ326j1SjI7DnCLDCL+xo0wAEJjIgF0JMoCFim+AYfrcDxbFpCdhuSLGOIeYmzWKBdFNBHcLQe4Yx6CnhWXZej8prAFPD1ItaFEIRDGJQBWRM6qCIMgfLeSyV1XxPgFxTxY5UrAAF8V0xFP/kGFiZY6b1WNOGN6uArBqyXfgLNT9A2jjQxxaW8tGh+U6Ctrd0hfL8q5oNEAEJJL0DAO+0aer5hblVjIMBQ6xqFgA5GaKuFg+B46UEBmPhJAV2IyXyIe47KGDKsBK2AGVEGTA/w8Z5lCW3HRQSJgQN9qXQEomAKfGAY4akhEDBUE4cPH4WhMlSoAQsN28V0lwcfwAGEhiqKra6sMd9Z3ip6HzIspKRbz2jLG/kitaKKwmIteBZt5utdSmIY8ixpSCpms5QC9BpJNRHOIjjoj4npqWDGGglhhLDVRx+hys5Q2sD3wET0zfpkpNpG5L4J/Y1dZhep7umZOb+igA+CIxe0h0YmpTC1f5GTWyyt6OjEbHa++7NzbLa6imB2Qf60DKlF7Qk7r1S5qTo+IY6/UqKv+fUZxoO7XfkEc9xOQAuNjM3MhqBByw2OObIZCLu2nLBmNizXI/3ifTP5Pm1sgZtlAFLjZk/XgAxFO3dtv3z1yqFDB7Jys4bGxsPh0YTE0akJl0xR4JzZUkWyalJS7Tcm19dvw/2Y5DvPE/ajtm2vn10Q5jfxm7d+VbWJWS7zcr2hZDu9bus2gscfZ2kn0om9KwMeMqqFAqr4jjiOsFCit2EeyDQ3hx2KlVds6ujqQQq/2pyXaBLxyTwEzIaWOvpFMYZ4mKoqbX3lK18x2EqLSgSHBfErLREcJq0iV1dLe7PDuzy2KCCM1D8KfyJcTVP8pS996dq1KwhCw5PYsrLSgJ7Vqrsjc3M2b6l1luPNn/3i4MHDlq/MjInx4aL8PNebGjWzU1Mu2pwcH7125QrfggN+8CGYdsKFs5M6fqsjRw6ZR3hyTYXwsSqrrqkh/w6qEn7WiByXkL93+47TqsaDtZVlM4uCziH5pmlztHVIRSyMRcy+vVHOx0fPGg/s2elgAxsawk68uD9biJPNRBLa0vyMsSE/7Z5dOxcrK5qfNsqJIj36zOJCSsz0t77lnnva+FhGCINlajz50P59hJ7dDpYAHxe3k42UxARRYRXlJbZfWluanFgw99BkVZUVIeA0OV2OrDOZWSMT02+++fPJg1P1tVsf3r2NhqamW7duv/axj0sUwTo3TEzlu/fsZdK8/fa7Ak+OnTguk/dIf/fd200ypJuJrDqYRvkFRc+fPfveB+fhf/z4yf/xP76NpLK5IObg6lL82rJzpQQGK3VadgyDnUZ9WaRcf7/9FpQUiofLOmisJVlrorVNIj8HiyQhge+TPJEJhUhh5Mk2l6O1oeJX1szqSlCUxXlF2uBmBsuOniHnmie7Nj//+c9f+tirNAWF7TiInAiZaemjQ8Pbt50MkYgiUzNzvvH1bxoGXOzEorioVKy9xaijP7bboKQMRNmgNILlr3ELml4Ra9i+++67/HAkGA7/7t/9v44dP3TmzBkuZzrLIIEzufGsrrlBGfOfP0lwS1NzT1d/9aYqC+X8ggKij9ymihu3b0VqmtKnMlCfvpCCkXltqLD5bNqys819YEKbtQeyiDruAbHHMj9wl4YWheAXFwvMwE5qkewiKdKhG+H37dQRFupaYUGRYSln02rcKve/A0BGNW9fl2u04+Jsaxpp2Cb54Nb6BkAuXLrMn3ryuR3PWjrEnElqa+H+3vvdhjok8c6MgjJWsR4c23AeH4bKiF5GE3QDkGVGPSGIXuivGB59RysHksIx+cFBOgW2Nis9oLafjGcJCrxkM1E6iKObeOFj1ClDYCB5+/ZdcQhckjgr67nyMkcBvqlysyzOGpX4ULCx4DyHbu0XvfWb3yBjTnomDdXW2mqJgjiiDpy5GGhvAzPa+nRTXXZNbWPjk56eXstCHGRr+JU5Rza4/61AYN7Y+NjyUnM27CiFp08aWRf66Cd71pTm9RtXUckWnlPpukZ3sf5FfEruCFWkICHIQuqsEHz0S099yNL3vvc9A4HxjQv6Tswsd5XHJvShv1CGr1oWAkc+nFwXKXf44CF1YauPBAxHyIO6GjJVMEe4QiHjyhV7UO0dHcxE+6F5uZMyYBw7ctzKsKerwxi0GarpF58/R9kZfdSpThkdHsDEDoveH/30p+7E0Sfl0TAqZg6gs+AAN30BBFlwgem4MNfsTw4ywrYRn5SfJS4zLHSddeGWlqxS3TBBChD5p7u6PPhoFK2QlPSCEFlsjAOYAK6A1kmjb7KhaQTHEULoG26EGcW894zRmEjgGXmWWL5hCw6qIpoHv4KjCWDB1IoCHnSfEjTwdcobAJX0jLZKYpymPWgFKyklP/H6AwUyIIr5VgYE0DzoqU/0Z4SeOUYTxIwLgZ9YuKpFddWmypLSctp/dmKKMfjcuefla3JghtE2NWtBO6shTNS0yVcTTCmDUXgDn0XkvADTvyW3dMUnkV7TfNRNVXTBM3wwCyU9RC/1wgc7AARfGd2HKpJ6aG0L6fA8qCLUWxn91UHMi6p4Qyr0XV00962DSBr1FzQvlQ+maCydJYopAL4yZhTkxTLIRJTHdB8iFOtjsDA8+GCuZ+QlQhFPQQCHtPiOhAE+cPYr5nqANjj+9GvUqAfvlfen9z6eccefPgAqoIoykNEvv0Y08aBfEFDMG/h4VliLeqciOuuLl7QfgIYzxBQGRytIgU0qek94IiFRQEPe096mWKCCxpieVlgVMAm/B1XYjlFdFFM+Eid7L54VVkzrGvInlHAHGlGjGopkG3AefV3ACL+CpmlUikqq5QEQ/Yp6Bw06BKrgRNJOwwAC1agAHHATWbSuLmx9g6mwFqOpEFi1gPIrXgCljPJqecZQL8GJUFIXQPoH0SDmJx9vIoKrAohP1KLOqkgmNQEfLSqJFOCDrLoC1rEsBB4rL5ecBFM1wb3F4WSRB94fLhXIUJImVuETLC3e8qLSMpvPrMObt+8KgIQgPFlFZjQa1bV67i1NrElxRo73QExRa2dPYqog9eylsXEMdZLQJRtHjx42su0BpWZY8LDTLH5SeOg0JyIChq0tnaYV4TREXZcFuBv7YT9kejoi0ZPGRzsaGvp7O4sKXMgwIdJa+Cs3n6yJ6WlyNoyaWvQdbpYWObnZHFI//WmHzOPoYOKYmw3+DlrUust09MEHH7gPOIq1O3r0qPAkKh1rTMToaQ+B5NiIoB4h0NzS5lJh2pK2Mdakphni8r18mcXFc4raqtCoZAmvzSYmEZYbFoAZraV1TR9tf8GQK8qcJXYgFOh2QW+aEHnWUWFVvkhs+5k2ybGY8lLXKCCBSCQZGkwGYsk5dIR1ceLEyazMvPMXL0HbEGtufJKVKqvVeo2kq6Ulw/Fxgv6rNlU8a56x18EbLfd/GJiJcTJzQBgQ+1E2q6FhD40rj4PfdQTup+M4r9pULSOf2wP4uW3QCU/gmONcW5oKGp7MM3tMr+SNTWUPx0udBZ+uiHAmmXwZLuGxs+3UYtgISkjKzUtbllI2I2sII8QDjwzLglhcVo6kdoH4C/jagdVT2+MA7n7lJTDv3L6HFKUVlYLujBvbE5nZ+T29XU4whmsB1tc5BxlOhhj/MuvFYswFPWPjXbv2HXS6hi61QsCCn3zv70yPfX1hK9W2s/Kw1YV7dx/k5o6LYgDnrd/8Fu+sVNubmwe6O1jtp8+ew7uBgd6GnTtdpH3rrkOn45///B8iu5Ldklp0d+vF+NSUYwysKTrh2vXraM4wNkEwdHmlCQaTz3Aw1vp6uuyThBFtTBJunECpSJmimtggs5HwgzAsY440hoU/5d13U+/AUP/z515g8Vy6cMHhj4LyAraRkCFuM4HU7HhnLJCPJzsrMVHklmPdLljWsGhUYCHnG/+QAM+MFkdY3NCUX5S/a+8u60UneyxIFEN3VjLhJotBVlJS0IsswpBi8kDK/+zP/1RPYK5FqKII6ccJXVBRQ977Ng0QMt+8JhS3prGWInbUg2pGGj1FYvoLnmJpVMEYIyo5O9kCAJUQq9QQiqXqo6f86W4puV3JfVNvE3NHHFFrc7N+FeTlnzx5XOswhI9Fv+Ft80GPoK08jrKeQThw6PDo0KgUWpQCOkDPnEx23TAKAeflLbde+/jrtOTjxif2OijByZkF+VVZgeBbFyGIWvB8/713DcjaaqdMitANT2VlFVq9e9dekD3zAZAzBPdBKIT91Kc+ZQhZG+id5nAQGbnM1UVSGCpmyCEOmqiOL7qJjD5+0pBZ0FYvZOBgeHz6s5/VR1qPCIIZODgfEpigJN4h+MAgXSmt1TrMw9JrNFymaPRSjliJHV7ajHbcB51ZyWY7Owxo/enP/IEtKXpZlAIztavnKU4Bnp9bMDYxatcMYkUFBdVVm+zTuaj43NkX+vkYZLcVPjIzVVdTC3nwsdg2uyHBIu8Z6GftCf+QlF0fMcucB1u9IzM+gRFLS7zpemem0XpRQaFbY4wFbLU0wgKglCecCiuASuAQVxsm1qgkLbbnE2+q49XQNUQgaaVZxYTKROiMRMboCAVhu8PcHXz5sbOSZn00x1YIAIsjeIoXb/7kH7z8whe+QE2Qcxt0KMn+IyeUC2cSBMizusoHATtwIMajQHx/pmcKH5fjIp+Z4KCe3TkRJC7DNR1au1rIGRdkQL+0C0/n7xEE0XAQQbzXIwV0ENM1oeOI4w0i+FVbm6vC9SKqRHJIsMEBFsBo6ClMeIgHsVQFBLJHPBSIhjkp1V8QFPOtPAiQB8QnMjn8FLWiugIwMVl6RhzvNa2iprHJPG3QwV9HANFW1LRRgGLeeIC2JqIW+Uv0xRXj5v711JXF8QUrJW5MJ8NV7O9qM3E+edrU3d0zt7BMws3CfEs5meFimvUVCZYSZiZnuMfsQXpjIcrl6j3daNtwLW55IRzSSCFvmtN9PfKgvzCJkIn6rlMe4EzAUAbxPWgOicgGFqMYIiig2OxkkBPVdRN8QwMdfCusIc96pBVvIkp6UNivPrYG9MsDsiMUSvoTcH8afYqprhZU/eoBkaEROBE7PwpPBI+6o4BhCCvIUCzgKK8wCivjvQcltQ4ItEHQrwhVzWkiaprt5VeFoQEfmOOUwQtIJNjA+lWnfMCHgzHye2IqCZOorgKa84keVNQoTDSkaz7gQIZU+8n76Ff4a9cbkIGKUAXWe3D8FD0r7ycf8LWuMFDWcBD2k+oRyzyrgmuK+UmZCPnojWKYGGNF8OWjA+DQ05aSv6+imDIElX7wkhhHmgdAOBP1qBVldMpLHyh5CQjEPHvwp48yyO6lZ+9BQ1j9ggai6Y6fYAhs1DXFyJtZTMkIZyUV8Cc/oGefqEXVtQKB6CXOqgs4gH4yQlUx6h2mSrcujd0jEUa4MR5bkuG38q65dCmkxVBaSormkuXITkkxokecnXTUZXQIdfl9egcG7NlsSPGaluFAgsM2ttfcaXV4/4Hiik3scufxbMsPs4ncv7G1xkV7YmwE1lrV8xYjM2ZobseOXc4bo4MNQsRHWKTGAvOj0eRAP3N8z95dpnUfwvblL33eoMYdopidlf7k4QNTw9BASNPJsTDoot+KUrGFKKA8a/XsC2c9K+xYoMCKp0+fdXf1suNt7BMt2cOJLmZyFw4OhfgTJ/1cr+n+Csm1xSfZJDEzMotdd3X3wX3DSgEy4EAdYhaVlEEbp1Q0EWhIgCsWQM+z6cAxXHMxDGlpRpGEmwLHbVlHAxaDrAQIu6lE9iEHOPECnJLiQuG0pjC2wbGjJ3AQ/bl+OjrbTO48QzR5dp4jSWG3QVuwkkYTBWyYjPZ3coCKwl0TvCsTxPRUkAcz/rZ6k6B5Ck+d1iOEdAWUGh8/FaYYpHRj/d7DB47zyZ1qXnPEVNrQELaQnCTWV4TI5upqm0UCeMy/Vn14B3+mAoscs6h6Jp8p01iAraiBMOimJ21uO1CqIwJoWO1l5WVO9HHW4BFvI47zV4pekb+keWGpp7u3qqYaEUAj/Jz0vpEX2nqBtiXlFf5kc1GmBStBXz182GdZWFNdDRnubBpCbqXBkdGCfOcS89fjg5vDIZ+slFSbSA4b+OTlZuqI828CKxjuW7bWYR8zQ2cFFyFm0BsyMboLLydzYmo8JT3F3os9OzwSdHfx4nlBSnv37ZbiU2ePHjvs0KOL3siPJagbuq7duP6xV14ToeCM0EZ8iGY03k3upI59xU5DOv1Cfz8lFZeWscDsZff09eO0bMeSVZOtG7duW5vu3htiJ5DSwOh88DApOXFxWZTd9DvvvCPelP6YX1xoabnlXHZ6WqbjL9ev3fzSV7587oUXib475KwsbazQCnYhP/bqq5s3VU5OT166ek2LR44dteT42te/4fvatRs5hSE/ulXL8WPHxE+LW9i/fy9c79y5JbCHfKC+bSkXllmHfOYzn4ppsSmsIitws+SCpJcwt1RFTRqN2iKgOKdfnkmtkfClL3zVT9ZG7rnYtWc33QTyoaNHcMKvnsExXO06ESN13bNrg1JcYJ7N6dIS60UbZ9Qfc/Ezn/okdrpcTQSquyQufHjeeD55/BhGGjyGt9xeuOL0pFZcBUB0jHbrdSR12Jr7VlvUzZGjx6Fkxb9n736X5GGq21iIjnjc5194yf6psCInDVySwne4fXuD1Cx2s8ScQS8kj19ds3a3ZKKjHSLREWKtC1bSSHHp4kdWn/pFEVgtmELgbEIlZzqIdAYk+ljCOeBBPlDyww8/VMD0b2zzfOtI5As0MVtueklegSKg0P7JP/zD5z/3BWGg/89/+++Mw/ff/3CzLEhbwuEh55OQRXXeZNAIQ2lxieU4G4MKg6ExAw6WaY5QenZA2M4gNBhMOGscFhXmn96zT4uSHCPF3HS4cIcJNTb2j1aC3Wh+udjx/FJJlZhotiwEw6C5D8NXOgLhHps3h6teXODngkDR5M4SSFRXXrX51NkXpF4eDlepB9NWF2CuOaLlnA08qUjaRyuvvPQyfMSOU9aCUCzBY3PwnF0dgkfQBCZs2VJvWYjaVKpZindG2H1GoYCN9eMnTwj1Yz5YKjAZ79y7BzchWOYeu75Mb4lTLbrcKYEXZh1sOn78aCTGhER+NC6MT33mDzDddofYWZr6vQ8+kFNZ0kn63fDGSis9E56lgpBHDNIRH1OvhZaXQjjPPXe6YcfOJ41NiNk/MEIUExJTwzfTNSFcIAU+OsAqPTuzrKJsKrYTTeApMqwnsQajjtPClAje+RPvYItr0DDxwJkEBgjS7MSytpN8KxYaB3DIwBBAFDa3Nbe1qusDeeT1q/fqBrGJGcGeyadWvAcnGjKevQE/jLLYysEb+CipPOA+2lLAG+99vKENlI86GMEExHt1oe0T7c9YUFkqyTOYlZ1W17CdTl+PSxDnY5IbHBo24n7281/pOJwtRxNcT+OaM/mVFhaFPqQmpdoc4PifnJ5xY6uNqKTkFDEAo+OjbpiOEXDZ4X/t6p2PB50KgyUzzL56F+EPPb9CCalRRkXIG1A6EpKKDA/zAxlBjgQgvlBj34QE9dz9o4P+9AHQS3A04eNZcz6g+RObyK0lKHYog7+aNqVFJTXtvSq66VegdBl/aQzFQPANFOpBSVsw166XOhIbFwvgoL+fPJBnQEDTC41Sg4r56KaPRrWlLlCS7/pTWsQYpikOFsBEaEqUPFfEheRI/hRVTKtYjBEq5WmSCEP4aAjFdEdFBDGEYatFxXRB+ooAMCY8MEFDIgFhyKgLjipeAkKL+RMo7ykH4wuSiKa6tnw8g6NH+ghzH89e+lPrqKGiLmsUArqpimcfBfzppY9BpxiY3oCgXeRCTN9K+imCBo4C8DGooU116BEMNWcyjSgfQfCrWr6BUpenk3RpWhnfXqoCuC5rTjFk1zqE/ao7+Ku6B/BVVNiv8IwhnhhRI+qUb1XcmaoMn4COWOLqt3/AYj02Ak5DcCVzwfrVP5srjq/zxPM02AwVTunIMZeQ3st4FFz+ridz+tlOSizJOC1sx9s/cVjEl8/eJQbuLsvJFbqTND0zn5Nb4HIbsftmSXPE6lq8eS01M290ejZ5IXlkMhw8LSqdX9lI4F5OXFsXsydnl0FkSw7TBYbQbfxXNBWySHpx69Zd/dIpvjDpy3fsaDD9cc9zeXgjArOp6ZlpsatjwA7yzh0N0SQlNwPFXlom++RuuzoyMOkIC0rJMGpyC5z9ZWhin5hn7WINInvJbWfSoboYsv/lv/wX5y6keZdM00EUF4g7B7i9YSezmOSbrUxGDx8/qm/YwULguiIPTl75hjn1TpLZOQRYuyTWPEIg8V1z1K9pvb5hm5JxM7N8/zxxtspldyosCqfGF2ZL7F2zuJzfLS0uDPd1Ts8U5OY5QkauGBJYb4ImHnhJitw5hb9EiF3yidc/3gvh5cWc7Izm0aHK4mw72NSS8WI7QFZNhi8j3sphbHKCCcf+pmKNR9O0nVVpDEwEMdcT+y1Zn53sOnLkmAlxcWVVEkxTFfuXUSE/FcFw+Mp0FhPFlPv3H9o5s9QxJ27bptebHLdwxE6L4vF7ujt37xZUs2kPD1FuvhD/+w8edXT2CqimYjKzBDV0O+DrpQUFL+TDh/dh5cgafwxuTk+Mk2S9JhsQ9gb7XPQkpo8/cUvtNg4yHHRMzkgirxy7psVfvf0rHbcAcKlFRWWV4Vm9pQYNf/2rXxw9dPCFF166eOF9RqDuYArX8MTUzOhqsCUsWkR9C3jxfODA/tq6bdVV5SvzU66oBlbOCeNRNl6h5pxKJqMnTx41bK+XR6the9383CSUMJcVR9k6vmXSmZ8Jx/bMA5pjjutLpQyYaalGdHZmhhsSLOfCJrJRyj4TYRITxBAArSesJTM6VKgDNqW9A0rHdX22st2dIfJB4IEAjfqtWyVOYXZs37bjwaOHojLC4iwhnqCwle0PtD1rFVFDHbn0l6S6jpCdyk/p1LY1LiUioYpuY0m2cL/iYly0LYasiKgndBxNZKjA01REvnWSWCO3Icpk371nJ1TZW7pg3OKQXQ9ySYcaY5A3es2XIFtuUuLNzS0IERmazm4ava4UcThDQ0TKksgh5q9+5StgGkJsTcu40ckpwYgZknu5tnYhGK9QQjutsNiMVxb/QG+f8ePQlio6RWMSF+4KtMVm643Pfe4P1IK/fsHzhRdegLxoxbbmNjqCoWyl++k/+CwNevXaNcho/fa9u4hmLWEMi8PTcVF6gmoc3RRqIr+s3AJAfec73wHzX+z7lmE8vTKpmOUTqdVNBMds+IBmjGkdWUyZPlFnVT/34osXPvjABEBrQFWiJ7Jiu0pJvwLioxcYSrNEfiD+Ay81Yab86lf+mFyKP0Z5HCF/wlowDs3h41gYmgMesSxnOcu5bRnOQcbNrZvD5efyrJtdjBOMU4WfQBXpBehN+7Oc9I6XfXT9Rolg6+FRPK2u3oKtVBUIDpPxmG2u3OyG3tXFpenRGd2cm5m258t3IleXk5kP7t6jMkRWAlhJGWyqGBoIbomjR4+MT07+4Ac/cJDRsgfLiDHbnbILJxm6u8k/4SH29AvBQIH2jtbaLdX6q+ME0uhAJX+SPQ/6iCxi5xCc+59oWazu2nvAcNVllocc3rk5GU6FXvnokgEFYKiVlekAjWBKsYDhyphY2JipkoSDT3GgjGerf2AFwaMt4cRlSpCDH7VtlxtQiIwjfiKW+mKVjt0QI5A2gvBOX5B3cmrW7VdcMkjk2J7jga6zkAA7OSWdqFhZYY3qOqgvLEZ2RMwgCY5h4sQXApQyMMc1KJFqhT1giooQxhdlCAOAumA+9pJ7RnXk9RM0SCA8wfQTuqkbOSpIMmEzwRjyWvFeMRX96eONbkYPWsRE30TCA3xUxBRoA6ukVrQuigxN/KoifPwEoOEAeWBpdsXUUsCI4PsT/aOu253m5uOdAeCX0qoUZBpKSJLcKb2mvurq1eurC8tMEHuTUiAKrwm1WCd2SFMlyGIcJ7gcKtM+ek7uGuNwI26UiZ+WiSZyg/j2gS22whzRoEFuIwJCT1sREbyBFVSJio9DqMhFUeiyAj465T0ZIA9g4rjqykf0R0bc0WtwvEQMpENtQFBJSbV8o4A3KODZrxFK3kBMxYi2WvRBMbj5VhFAP0U8gqQWVcc+3zSkYlEr0ENzHfTtGcKwitolnCAoT27BhF4kCeQHet741orCBrsy3sPft47D1q8Yp4oC2vIT4B40pAlt6RcKKxz1HYa6oEV/KuyB3EaCEbULZz95Vh0yvBL0IeGBp4aAghJi+hWpVdeQ90p66Y1v1Q0SwIHyiZCEp590059+gi0I3oDgJ0T2DHOkRkzPkPTgp6iYN8D69lJ1DXGZgaZ1ZFdLLyL6R2WCWMQEA8LeOJlNKugodANBxQhV8KNnFPMetr49ezA6NARbcBRGEKSgBqlltaAa0TCiCZcK+BCALcxVBFYx0NAfAt74CWSgdJYBZ0M72VXbGWlOHTAVlpesn+cdD1sbW2coEmYvOTsQKtAkKdmlhqFrLk03j0hIsLFhd7eYf6WIE1aa0jWOtjgZSJdWMrJzHz5tKSwYa27vZlLzN7n6hlNsYmY+K6+gq2/AdvCxIwfzC4qdOBifHJ+ZW+Az4mMSkS9dhIHKxKIwxWbs23vAOYHS0jJONxsdDhVYohDjjy6cR5nH9+/tP3iwoW6LnNEUl4lDr3WZ1YsUsMUd9DeoTTooDwL7xf4FNehIWFgS5OUJHxA+Lo0HBSuMRE6Yl1566eGjJwZRa3sHNSmEGsXkWbLCh5vs3pCB3uUrV/v6wlU86IO2xrimCQkGaRcmEMA7cvvcc895o4BvM5qBKeqYFY62ztRaAoFGfqylb16/YRIkgg319XaemDcgkwRNwLaopMQAxEE89Z7jg4xXVRWLWHa+QlZxcHiHHj9+6D5ZAZNm/zj7nqtLdrLEdQsu3L59J747xWj+4nQ3apCRWIr/cT8xH6ulzu49+/i8Ga+Qf/OnPxe4u3VLXTg02CMsJ5eHtKwiU6SB7JEQQ5lf/OIXqM1RyF7SfROuDzz1FJ5iSXSQx413hPVM70pzcuDwcSy+fvMGjx6aCIW12vGMAc8cohgeLasMB0HlgfXpcTdWLLckkjqTiWXudY+O28H8qGiIxbDGO/f8c1J7M1krykMSJ6NA+nWWMO0hcsnwld43LTlJxkukrt5kD6ICTxVjYOipviApE5HNwEZlAMA/eBinxq9duTg7Mfr6J153JfTNO7ftFUjt3xVbQzItWJjOWovlGeztlpHPQQLwidnAwIObN2+znaBd7khk36DZllDhI6Nfc4iDeka6qTlwl30Db91Wjoh7g6zqA8ewJlsRqwz43r4e1v8ffOazPBSkgVemt39QKD4/GSozuf7oi19ypeXe/ft0zCaO/SZeT70KyndtvV0K0t7e1va22Bpgc3VNrRHCLqnbtl0U4Oxg3xufeUMWD/2n8UFAfRKM1hQKpNnZbFNV0IiVhkNWz7RP4FUsg2RUfv+hQ7euX1eF7OoOKqilF0hA7v2J9NzhVdWb3fIg0sJxSXAIEDZ8/zvfdf7d0pmr+/z7H1ghZGRLaRzvdDZDbXp21v4RiR+XRnFsjOEuLw08pe8wQl0nIX0vX2/t1i2k8FlT45UrV7TFU2toAY6e8EFqx4yee+5cNFna55JLRCCB8K9Ll6/gikHuegThC8YYdsqPgNPi0giNB/tu+bm5n/z4x69eveo4ujWb1SGcM1IzpBHUZYOByrbbyK6Vhc1I84YOihQTXqAktipJHbz//vtoEg0YHg5EsKeGXOjj2fKGWFMfCOtDPHzrL+khEihsLrt89arjJidPnCaC5eUVyMJz09kur1mlOCnMZTnSXlaEdJKdTeM/5AePZRzXLlbabKGqnIIwx4jISlwP6YdRnn50SrHj0cOdO3dbTA8PjLS0tW3fvmP/gUMc9k4nS/RrYrEvLDLH6sx00tne7tgqsxWXGcdOVlFMbneSocUZGjf8MckkgCKW6MwRh4ZJGdkMaKYwMr740vPIpXcSMNvxJFqSiuryzsqd9x/cxVAjBd2cE6XI6BfpZpISE/bs3IWnyOsAkBzJrn1oW1v3bXHyZOOZ8jLPyD7WuRacrBCz5rFUttH5/PPPFxWVoID1iQlPyByVJMWWLAoNDfVoggWGqNvBouGJU+cvXiCZclNYp2EHN3NqZjpGYDH2mWaUj+Zg+Bgp+I7gOkLC/eTllSsfJUr/PORg3JyQWZpOgssMtwWBLgfueoixFjNCVn143bbE4qCgDRT8gSI/SpJnY8q4DvIfG1Pea0J6qOLsLNnsLXum+sJJRGrBwsYSxUzptiy7HzS+jWwlXQ1Bq0BYT1kVQOkLgvs2omkY1f3kG1O04r1G/amkSQ4OkVXhJ29QDzS/EkK/mg4pOyliAIwwjCArqUWLWNXpFuLtQQEiDSrP0IJbYIJb117u2srsPB+n+7zg09snQm+FS3VrXT2qzsxJope1Eb+amJSSk52XlmGxmSrHl+xzCesrNgwlU7RzyLkZbgng58zMdiwyZNGOReQjJosVJXnUiL3dCsSkH1icfOZ6EXDiLB8JziG99lO0ACBR6sLHS2tzfyroo4o3Zim9U0B5pMNEffEr7oCPyPiIOLEawYjU64hoZAx9jAtlImgeEByJQAbKr2QSfDRXTFtegqkMVaYhL1X0oHWSpmsagh5UffypvAcvPeumbzChB4ifoKGirVCQCUJi2OUnlWGzwq9cv5Z7HlSJCQPxk2fT8sm6JTxb40T2s20JhUHwz0/K4y+a6A5kCGFET2jDxPtIDCBMWkA29URUgiH6EGk4A+JPZUCAJwx9k5yoR0B544OYEW3BRA2/EjYfBcD0q/ea8Kee6rifmIxequUNOsPHM1BRXfTU/Uj4AdSojy4ozPIg5+qaXMyMgGONX1UBHxzPvpk+8Ic5rsEhyFVs5CqvU97rI0yUgQzeRQTxkvzARH/VMlMws/wZ9TdSBRoKza0uKwBJkL2JOusBKHUjCID/o3Slp5lMrQPi0+JlGbKsEZ02MzvDESM4wrMNARvtFoiOkzJGQXbw3SSIZeE6Z0n/FsJKdXZ+KXVmXuaR+YXl7r5+jY44Xzy7aM88MXVtbHp+aWTC2JXwwMUyjsvz/ZeUVEg+8eD+A4OkbmLaysJAZsDRzFSBTQmgdMHL0rJNlVWbbVrML6ycee7chx++39s36GJjnh3+DXnP2ZgySNKcgk5he+3KZSncLJw5/tOz0pvbmuWblu067IgOS3tjvzr54cPH5hdUFb1pBsc4PcIRImcBQIMyEiKucQzre6asKdnyES0xjcIl0wt8CnKju3ikU0ILJ9qvC+aeXzpx7ChJwB0CQz5JCIpFAkZBPffcc3jNT4T+5n0TIo6PuGttJATNyvAu2kIxCou/396FW3pmWXTdPaJkzSZWfdZjeA246c1DYV7hsBtpBoahHS0qHMy1vSNNOQ+XRYeznv0DvaMDPXSvjAyWNIW8Jigjt9GqA1NOsla7hEsKWkN+anZGxgsGpMlraGj4WfOzl19+RWH3WcudjU2SxxSElI9p2WWZxcVFHa3t0mqvrAePmD4Eu7GuzvUODpeyZ5yKJG8Cq0zNfLLy2Ar+1Aqas6Zm5pZ4nFdvre87cLBmqzylNdy1Dx/dt53LU2YBZhGIZUJwmViBSkODCEu8fXe2h0tjpUIB35SKxJojciigv6SCucIwEGdvW3J5ZfV/+df/q8gxMSFo6ydxOCRWeYcimNZxG7K1vv7Wb99hTvC528E4evy4yRH9OdekfGCl8DY4bnH//t2b16/u3FZvMUa/ojkJkTzQ4LJGMGQPHTr44fvvW62MjQ4Tv50N24TJCS3+1v/0L0zTdDJqCFchA/LUhRFkO9F6W1682EenSIstuSx7T9ogPSxabIYHkTLUtaTDRr5u+NP+V2lZyZ59uwU52EvHS8M7GMGLyxK9cVzwYi7MLxoU+qnP2HPhw/NGl3QlXHmoAwmXzgkHEs/A/81L7M6coyeOuwmCc92CiSYKItjVTfuwPo0TtLZauHjxIkX83e9+F3uIC0I44W78KLatoe6dd97RKHHHbMUaHz1SUZlITA0/6klHvGHZ52UXIgHknbh3V7Exb8cDHHgyql599VVI8uL89V//9ZmTp4Dtdk9QUqK+KNncGvKNsrlj690lYeeuTEMEVzBIagkmgpJ1ug/16VZLOnRge2mXuKAw4BSBzwcffGDMI2NtTdhie+PTnzLk7P6ALx7JGx+GtXOioKEVyIuxjeyl+WVC6SQiyYMzTMBHlhET19AQUfbS8sO0rV/qUkOkAdFY2+iAuVjpwQe17UD5ExC98AxPONht0KLdT2S0lIcG5QKI8sBS5eRHSVJLeLx3dgcEOxXWoOz4S5cusZ6JkGyDcizasnQowlhyaKS9s+3UqRMgtLa0+J4TIShepaICfMyip/zJxuXiqt/eUL9tmzND/E2OyZ44dtJ24ec+93mVNM32PXTggF0/2YHshT1/7rmurg6rC9aqmB3PSSmp5BucAwcPmRdFTEYstsZAHzQxOLWl0e279j11k27Ma4jmKOYZPh5wkADgGo0TzbIcSLVVVShGlqhFJDWoKErLd4TyHon0lKioDkkjSEmkBmdqepJ3q3+wd2F6Fr8cUKMlnX3n27S15MJLwkBKF2dnSKxGcYTMqEj+eZjoMl2IeIE1I5KBVlQgkd5BGy9gy6g22jVH3RAnOGsdBPwyro0XuG2qrJhz/Lc4+Cwlf3Q2SHCL7HjS1VsScImpa6KPTBD4A6tdXQNB7yLJ91IxwL2BJ4op4w0pHRwOpPPRF/jDB50JvDIKePCTZ/THCNWh4Q34KKnX3sBW66iqmI8OemkceQ8fO6ARbsobCJ69hIMCCvsGBDIw8auK+KJdz6iEL36FkgLIokeqGCwQ8CfxC6kksp0amrVnafvOBTq8WdIHv/f+B2Hvy7ZMVlZnd580XLIAAJKcHoKAQuRDSCkYYic2ZoQsM+JSgiNT9MtqWDAza8LuYV6u3S3eprjlIDy4DCVAoGQy8ydp9N6A0lN/6pcCUfe98czKDf1dD2sVocxEws3BGnW4DUei3m1yL09sla6bCuAR+KqTfO912Xs0RzFyAk4QUHN4zHrzEHEWuRRT2CCyQCU2yvtQKb6j8r5B0Lo3RiUyoraK0EbPqF+QB1AZaGsCzECNmCGrDKzIBpWool+hhx06Dit/qqsisOAbSiBrEVi1/BoB9A0+NLzRbvReRR1HRgDV0gsFVIQkFnuvCe9hAh8QNKcVAkAgFaDiNAcleoYUGapaNKMhmvIooJjq/oStB0gqoFPwVNeaw3sfMxEg3ke9VsuvMIwICCsfxZwARArvI45DVXlvgIW/Pz3DEGIwpG+himLmIJBBIN7ew8oDNvlJeZ3VOxCA9fEeBNB0x0vw4RD9qvtRSfC9R0NgNWqYm03AV0VhHyTVHQ+GKjRgGzECfM+aUFETnsEECg6q+1UVFcEB3KCQKhDLwq+x5X3UR99EEEpUD7CwBcGGgqUC65//W6RxWlza+NS06C8I26BzDxmzuH9wWGEXoSwT3dkFJ/ITk9KcH413m15mjmMAsga5CIXvOTMjZ2l1o6W9W8CnnMIHD7qqa58Qsq7uPta21bG7+dwCjqHyET152kw5s4xtvaRl5DBPTpw6TWVJKJchp1EsfZOYHN6Dixcvea+DnH2Um7mb0iOoBIau1gmyhDVkkj6cnn7KmpJj3dSPvMIzbtywdbAiigGFbPlQO6gkPeiBAwfVZXcRM7OwaFmGFi3x4MFDyfHtt589e84Mi91sdJYAAkIAtU30nrHARK8JzIIJ2YMbmpNAtfCXd9qiEQUgNj2xYbWETShJywFiAGldi0CZCskGqQOKSNNR2tSKpQ/XPpQMkJn5OeQySW3burX92UxvR6vUliYilFpaDet5w/yVl1+9efsWsDbvMjOCQGqRJJizHNGCUltb+5Ejk3kJ+TDk5odw/oGD3Me2kyW+lDVRuvkgRXHrBw7sk5FWp1g+0NM0xGwIkR+znk1VWCUlxjd3dga9kZopeYN8uLyu92UGtG1+8DBeuOpB9y0pt9VvRXi5+eXwePq0CbPkMc/LyYbz6lLYh9dB3vDmplYIa2Z+YYFdJ9fQf/+777gnYc01XiEJdJLYB0dQUFjCN7RSC+/Qijty86YKS9gffu+HOPWrX/6SIY22INPJxgiz09iRBEktHwhYGzx8lEDje6+bpsK5+Y7cwgIbypYrKpJSoKiycMx9acHWEHY7YMnBxO8tfJpAQokJLVUxly5r+Z998xugob+SZMwlAwYaOUyq2VrnZIxzEhzhzknISCN7kSFx++49wffMwfc/PM+0ZQE7DGe/W/LRHQ07gzucLl5edZqBOfL8iy+Ul5YzLDDjww8/DAsgqa1Kyvu6+yy13AfM7QchGyLt7bzLe86cPos6BmowdXgN4tbcj8Asa2p++uaPfnz2zJn9B/ZK6IIoxpIzFgpYrhknLEvBn7l5uVTnzVsPUBka7DCCqz/oYswQJkTUHMoiEyEjvvymivnEVQW7wa8csfzfOOEuOoKO0AbMru079PQnP/7xuTPPORff1N4qf9NGUoLgDbWc7wHBGDbIjx0+ZFtdQEthYf70UlhBijkbGBzUUyUlJSBkwt0g45bpIJ6xMCxGniNEzD4hbpzrJNUAMHJYBjARA0OATFRoAyV9NwlR6MTIS8zzsruz3eARW+X+liePHriU7fTJk7LZUMpYa/BYU2oUWVxlIi2PeA8VAQGK6ETSRlj1wrSBDtZ+VooGA+FDqL/8y79ETJMKTAwwTdMRbt0i9FYIBrPWTQ9WSr/85S8tc0Kw0EKwOPXFihY0kwHBYj97o1FHwPNzs+2SuOHPbcEKoPO1q1cNA3vYLFfQIKxRy7x+6UcWF6xAOIm5B/G3ua09tyBf7JPEESFgNDnZVQxEpbO1xfP4mAi59bHhEbfNG/NQpRFwR8wGSdBBw9gNdQ5vIIU9Prf9WaZOji+7BliiB3OR606M9h0N23Jzwh3MuI9iDfV1bS3NiOASE0PUASZ81xH7Tu+9867IP9gyjOwF6bINaLsfx08ctY3g9gkk0m5vX7czOg5F4UtbV3dJfV1BYf7E8Cgx627r+NhrrzCKSCZSxFZo42jLnDOpIIUoOD6Ye/fuGE3vvPNbrNSKgeaf8FDBJiEf7sFDp0+cJHt4anga4din+7pAX1BVZMm3n+DDMQcsY44U5eVkmbGSEpM62lrjDYXUdJkyjZdoqsZuMz0W+xifmualM1y8jyYDD0CRKEJOPqkwb+hlz4Yk1nMdONxszcwjYuZmAVO+Zn3/6ASqRzwrxpmS+So0yh0Amo+O6ALgZNKfENARiPlggQ8ZMy5oMQ+K+QZHoz4q4ruKdCLEDDe9gDBJ8KENkQJMBTyAoC0PsakuWKhmNeW9ZM6LKhbEKI0BLtu4cFOmnRmg3OArosCaqq4+BHS668hGCgiy8bDsXTLPx4+wPkihIX5HGoYAK4wFrpQm+eLXyYMZfVk2+NjawJ/GrC0gto6jw/YD7X2FUSNPbX4+5NE2zIixVDaawxG7K/qrU9A2O+o+UiivX957IPMqwgGVvFEFDshCQ3qpPDIq440qbGHVvSc8SKSMAhpCDUD8iWUQRlLs8FJdHfRSQ4imijcedATLNBT9il/egK+VyObGrKgKXaRTngH3rYDm6Aqggq3jsozJSQ0V5OeK/5aJj49ZiJqYbeV/L3ubqyrhQKQzKYqJ0K4k7ZrQrvnY7rlvJLIDIO81xIyyLBcFRjcAxqjh5e81rYp6F9EKs7wndSQK/pDRI9KiORzxK4Th71ktfEEuikIZtZBRx6JaXFcYFPUr0uFwwAvypiJoHsAxuNRVwAcCkaBqBWVAUwYpopIwQSjFtEiu0Jzm1EeKCO90HH2QOjKJNBSQie2qqWWQ+hNwhPIShh4gjOY6HiQwliJJAR+a3wfHgUUlyHipL3SgZ2zVqIrAwjzapvYNArBekgcJGiDiaj+FYWX1GiuwPDoyPr+yxDujR/MjYeue7PnZUV4JCPSINnKlFO+7B436NSEYV0kbMr8xpwoKBB7APCEume0hkTH0qDgrAWHlIsUJSEZ6UkVJlc279vY2CU9Zoi7XdoXGk6bWyfHhLTV1/QN9/rx9/9HAoLuoWvftbiivqBgZFVxtEna5YbK7/NiRokGQmiksZpLZ6M6B2q0NI8P9lTVVa6uLAwPhjJYIIzpZXnrbFBVVm6VqQaXvfe8HFlLo8KypidN9ZHhM/NrU1LQjkVuqQ8gDG4ZUtLW3fPDhe21tra5IQlg2nL5QNeQK2Vnn6E/b/Lf/9t8IudnZ1BypOEQ2TMwXuOAnkoACbAks06gBooAmzO8Eg4TQSNFIZ8X+7d/+rSNJuGZm1wq/lW32h7GgX5sh5MpeOlEx7/gmHgSD8wtiOuuSdGGNpFqSg0ePnjDQzVaTUxM1SVv4yxu2bZdVz5QH5+lxGYqG67Y529BVWlGuOXzkH4RwaVmFmd2U4ODv9Mi0MCSnL/SCOL344oswNzTIcDhT646w5pa7t++Y0bLSwurXiPj4xz9+6+5t+646GzZdU5lSbgAa10FawtxtaZcdTu6uuh2I5mDTZ+bkO4nlgBbCMnuuXL1+5849niJShz5Uugsi5A4R8uDww/DIIMvN2Lc3rrnV5TCgzJiGHpqQionpmddef/3+/Ue3uDtravTIQEM60LRuWWIH6UnjM0QwsW6qqj4YO09oh1u+2i3VVWmpYd1y4cKFU6dPE2P7Bkyv9MzM3/72t/JBaVcyfu1+8YtfRHyn4YNXN5azEX2MLwMBiTCFJChmIMce0rXOB235YS/aOHKY28iCGLKzLTnWWVlNLW2I9vLLLw8Oj/pz/8FDJMQlPEm6wXpAX2OVW1onFUJQDQhMh6XOqAAWibRa3VZv59HNl0VmqZbmthdeevHQkcO2mUxF7DPv4Ko8c9Yg18NNleXwNvmJ88Ow119/fdPmqu6uLklMGnbucCafa8x1Dw4N//t//+9/+P0ffOtb3xIQoC1EgRsnLlH77Gc/+x//438ktWwImOAK5lmGGgYQxh7U8a0XJl0aTXXdQR1lPBgVJNjwQJdoGhOKQL/A04gloHBmPVsk2DkSgVVbHW6Yo8jEBYoe+KM/+hLjyzBwoweWGza09idff42CYuJjg0WnLbC7d28fP3mCELgogAedSIEg6BnOVBvVCWa0kia1lmXek8j/7//n/4QVx7n0ZxipjLnBZXHkSdeMUsMbHK37lYgAtWfXboKhusRPLgBWXq+NHJxSDHAxPH/8x3/MOAsD459Cio1k1GCvG4pEwQdA6Bl+9BRsQcB0HdQcoYGJGYsAAA6OAeAbcA+0ADSQzhqDAnL+W4ts34ML+6keZO8ICTqLHE9paXrKNuCAFjvQ+LiLUesKMNP4vr17QTh97AQxRXCgODDYzeeefz5ymnIqUEhYQ3+JFVnMWLSo0DtB8LPFYc+ODhUh8OTxg717djQ3P7MWHx4cnJ0LDBIY09TcnpNfcPTYcSn2r9647rggCuIyc4f553iNfiXGfI3nz5/ftn1nYGJMNlTXO6rQoHDJF5poiILWQUNX4d++/RsiZG0MMQS03CU2ltqEHHfIhmejV/fRn4NBMjqZ4yTeaXra6MKR+jqHkKsJsHsoUR4QmCAjZwlHyHhwfgkerQQB48gMaf/0pz+NVj09fbhDflDGFYy4IGeZVm5cvdLZFQ7AKF+QXxQNBBhiCCGJxiD3swcfap3Y4OO3/8d3rVjcYsvXRfxdXyqpWTAMwknT4O41WGIR+AkYhzg+OqsJHGE7+liciOaHAAEAAElEQVRaa8t7SPoT06EqZCtEZGwECzgyaFBSGVw2lr30JzgGI8GOxG9Hw3adVVfvogJorgD5BFkTVF5QsrF0LhCzLPRGF2ColgKefavr20vfikFVFQW07iUN4OM9mMp76U/PQCnpvVoYwaoAh1uFyracU4Yt7dgflEAbHh1BFctGaemgZLsENaCqrs7iHBVExkADCvG1jjK6rMWIenHuIloLvn+t+IYATPzqAWs8AAWgj6Y1EWCOjypMLPXCss1nXjbBYDOFPQ2k04SNtKjXZNhP3kMj+o5I4U9jOXoJDnECRwEI46gHqGoCDoRcFSX96TtinzcRzmp5UMYDnFX0kz/pWGMEzoBHfIxYhon+xGuFlUQub9AcnoBr1HtiqS3kBdlP4igAj4DoCwQQQTHd1JwyKKYugnuGsIEDPlCAY6WSPtqCicGirveKwVBFesbVaR40FHUZfJBBi02lmZrwgTxQyvioriRMlIkQ0021PMM8ws2vEf2h5CHqiJcUAuBKAqJRP6mrpzD0pz6Cz4EXkQLO3isTfXsIHI8thpHLrz6qU8swjJow6j1HmtxUq0Wg1FKeotYLxVgk5CoiDgjAgqkJtfRCYW8U81IxD3rkJfQwxRt/AosCUWEIK68VmIDpGaHU9QCmYsqTSd/mVoXV8uxXP+m4Kj7AknBg4aMtrIkEHoTfkyJCya9rq25uSsVaYFXUfQ2wa5W0X8cpJKKG9U9ZlZVX2WGw0aPLgiKsRPmSRkbHneYPtItPWFqNc4IxPil1cmzSvd22C8SnLCytN7d32ROSMyM+Kc46ICchdXNtvQoZQWXOdFHSY2O71ncQs5VVcTi9+bmZItftaemd62DdlripuvqAS7uSXS+4hinSaTniFSltQZ7U729+8xZC4RGy44tvwkmBEciKyjJnTzs6WhjoOXEuA2bhhL217u4uqeAyMtLN2qOjIzCxo25kV1dvth7AMVLtpKt7G3hpNco5hemmUfMRYUZ/smGiQUPENzzxlNvu57/4JYBmgeHY7PDuu++2t7e5dAtf1BLUbRY2vZq8iC4Oqq5p1ojv1alpxZiFZINVwIXHfcOSoQEGBntX15bM+PVbNonX5cuQ8m94fGw9IdhyZIDfh0sIi8FBkOAj6+21/2zQQ2zYvQ/j47t37kJkMb0/f/PNNik6Skvr67ft37tHMgXpvdta2sT0kZaPPrr66suvID71Zaa7e/smTHQQPSxgKF5WzUBfL/r71baP1tXSl+7ePqhyDqKMwiKvmJGDinaXI4irNvXLvMa+XbVV61hU7PIT1/oaUBaTCDI+Mclkd9e5jf6cvCIXF2Slp3V1d2AomXTU25FFk+DDJ4+FISEdHIJ6YZA8fSaKAhj5YU+cOOb6lufOntY6W7+5NdwvRCrwRZorFi85tzsk2EV8mrs4CJXMQZytefnFVvTf/OY3mXA4jt3oyZ4YHxlm+chZwsFaW7elta2lpKhEWCmdz0JeXAjKCk3YM5Dcd+DgrRs3CbAgVUxMEgbzpLGRUcIilxfp69/4hkWDcBo9xBiYUfkyRbCPJYzbv29PX1+vkdze0fXg/iPngLGzr89J2bzHjY2kRJisq/OqN2/G4B9+/0c8oKIJ7j24x8n/XMiKWIwolstS6zgmatFMCX77298+e/bM2bNnb9+8iQ/4NDE2xqzkwbWcwGaaAqK4yMA1MMiN9YZvEm+hjPR/8id/Ym3ggX3mKDcZNdjYbYw2qBJrSCIWIMZDzdYGBiVCkEt8FYtMjKBhKIKglUgJXr96TXiKW123bGtob2mzJNWiVdp//a//lemGPuTDShSc3oHePbt2uVG7t7dHy5qTkgluwsL1ETI0V8zmGz9y+vTtK1cwT2p8YsqwEyD4qU9+HMudRJH862FHG7Yh+y73WD18KI2gNYZYw+HBAZ6D3skJJ7jzsrJJ5MbaytTEGLebJeyTRw9Rtaq21hg4sP/gtavX/5f/2//KiZKeSehT+nt7MPRrX/sa1QmyZYDO6sunPvUpwwNuscVbtl8JAiPbCFTA1AVnlFcAEv/sn/0zouYBxZCUCvCMF3KoSeXDLS2YBM1VdJnG5NjYw/t3kZcllp+bs6mqApCFedsks4p9/vN/KIEJ88RehB2YV1555fKlSySeQIOJBZaR4EgLy4tgHW9iEbXvHLlpa7B/hAHFimqW9ujJU9BijpP5+ATKa0R2Z2YYLeNqEifr7ca8+97vPHPSyOqSmpJqK3B+adkmg9WO3E2GnHyOPLWHDx3t6+5x250TAk6MSTwcY8EOCYvwVyi/zUf5EBx8d7f8F/7oj+jWoD7W1jkndu8/kJ+XT2hZ87SnTEfS+FA3xMP+sl3gmrrtdrrIGA5Wllc4VqR39BTFDQIFCg32PKuZe1iAuKV8f1+P1Tk9bigZCKgn6K5qS41VJWbxnVjViADhadhau8XYprbgg2VAeVYeAt5rnb6DpH1DmsiIoObMGRw2ZnCHkTJzC4bc3pBX8OhpM0NkjeOesbIRrgVlV5leqUhcNn/A39DQzVAgZs1EW22mdk1rDge9V5hh4zyPPpqhrVK8NLurhblUoQKEigihsDeEjegC4mPceUY3BRQjb7oDrB759ieAxMPJFs15NqgBV5FMqquDAKrrG8KB/jFzMNwAGrNoAYG/n9RVke8WVlqMinnwXsA0EuTmUwaFXMjj42PgMKjUhaq60XCQjYepZh1htUZuHftBMKGVvh05UIzWGhkeNL4IrY0p3qnBgXHnhfQaUijmgyw6BZOIAprQFvi6AAJq+zN6YHoaTRSLEAVvIksUKNUhD4IOevYNFEWnI/5EFn8qH8GBku6rhVbIiwUeUDJMdLETwKrrNcQ0jd1+BQeEiErQ8wEBEz0orF1wIuD+xHGN+lMTinnQF6h6r7zm8DHG58BoP6nuT8D9BA0t+lPT0ncIp0xLTeNzIQDi+twh47yNh5WEsL8BjmL8leEEQFrawNCgbx90i6gBZ8DhAH8wMc4zOsBW0xw0/tSuPxVQRRnVvfTsDTiQV8ADrAyZqAt+RUMf3fGsulYA1OuoI57Bodm0BUm/YpkPRiOsiprwEnpRdRVVMRK9jIjs20vVPQTWxEYBOfeMSioiiGcfOPgVHEhq1Ooakp6B0jQgnhFJgYzMBdBg6CeQfYACJwIOAaAUiB48w9MzID4eQIia9h11ExzP4AMFpcX5xaj6xjqy29hLSJf6Nilc7KDY+FhwMwEba3mDgY76omTVApmwRWTfWNtITkz2LcKbLCkvWYheKBNxE580Rsr9Q2V7T4TRwkEBKwyGsqGRmiPgKi1pMUAgYGAYolq3O2cQsuxtKJEiXlRXiaRn5jrEzyqVNnFwaNzKKCk5k4NyaXkDMCR99qyJUw969dt2UokLi6vjHT0F+dlFBcWDI0MJj5tlCmZgWGAubizUpmQIBRweHaO3rUba2u0DM9DzWUQuZma1nzl9lvo1HEwTtnOhpy7BoKKlGhOzyqDn6LRsmL973wKZiiIL3L8y8shjI+Mcv7WTBtVVIio2yZjouK3bdsN0PDd/8eLFM2fOsLhIL0mjdUmdJtgYHoA1YZEitj6L0GEAFqqJtb2l1RSDR/2D/YJGZCm0tdTb3S2eUCIjQdoVmyopE1dl8evjAkpyf7iQuKwsxCuypvCfkbBpbRMfnxytjD0ebide63btIkU6O7OwyNCBUOWmKkaCM74sNK0z+oP3vbS0t6fLuTVqQsqegrwcFtSPf/JDKzpH7/7iz//cBrvL3cQOdLV3rS46ih1mIt2xKwstihd3dJAUsQM1feXyRxwsxMZ+fsPWrajh9F26K88SU3n82Tx0vnwzZ547C3+jg4RYbOhgSlK4IWRocUFiDOs6/2gAnEpOiB0ky88lUd6g8LYdOy2IPWvXPXROagz0zjgJIHcTCrd3PqSo7Qi5ElTYPZv50IF95n3JiEz3kqt+dPniwUOCxMYHBgdS08xcITuIKR5f/sN/+A9UDX8uUvMxWR9m5eaFk01JKX2DQ8BaXTx58vTjn3zDVhKV09j49MSJ4x9dunDp0qWqivKUpGS5CrFjYW7GHWEypth78aEWnHcAubCrZ2h4xOk1qWXGxifuPxYM9Qzpkkzkb7999S/+IhRCERxiBephMP1j6c8sifgpASJGrqK4fuXKwGC/NB/WK1jouEaYLouLRGvZh3rnnQ/27toh9SfhJoLGJ2+bTR/r+PsPH7i+GOfs3SDWSy+9RKTeeuetP/n6NywcBZvHRt2zm9dvCuEkQDrDduEaRwtmq+VLYNLQUBSXgpc4BCsTv2+6yZ/MHV0gAaoz3fypC1rRHHGBMIpQTJFascJZDfNj8BGaJNhPnifGJ9h/xIKx5YZaAXY2H8QooQD62JSwwi4rCZb0ymoIDDUOa7fWGL3ophWbG650PXzoiGeMJKzQ4BImbTAf6u42orynr4kUTGhhC3G0graDOGa+Hdu3w4Tz2/XmL770EpTqGrYpUFZZiSOO8Nuj0K7qfgKW0kWf4PufDxHeVjhgIp1WSLxhNhqLUNRlowVWCqOkJQf9boQQAmjoWjTxe2mCRzRArB19W4OxY9BNByFP46ilvAGACFYpRMpLM2VBAWqLOOyTLVi0pEA6Z1ns1AtJ5aHv7Az2hHUUToEji7VaIBu6eoEgEMY4HRdOjQKOCtEgqMcDLTLSr2NOj2SkicyuqqgaHR2WP8FJ2bqt1Z2dbYyGltYm+4cUWXJSuvKCzRyiEs0pYGbP/gP24y5duMglQd2I2MktKORAlRtUphZDy5RmSaOPeqRfxIzk+EQ6At9Qkqb20/MvnFWYLKEMJeINLqC55RM59KCPkAcKj3TQVpL1hp3fFUavpdRGXGV5cU5GJhfLhQsf6jUx003zMwPZKXlV1hLi79y+iRGIYy4xxOxIOK1O+0DDUrxq8+af/ORNCMT8SWNywlAfkEFYzI1MapQ0cAAxggxwVodzPqTCGQYhFhcufvitf/5n12/fy1/foH36hkYhPDQ6IVSS4xhk91gRMGJgeiA2+oi/xpSGwCerJI2cECeKwjMaaouMUe7rG/8YxgMldZHFN/YBiyaeyRvNoK4HY9lSLlLlQGkIcARBcwDJCSJoVHXAvVcGWFSCGO74QNLHS2PEg/fGu8Ka05b3sgD9/o12AcEjTftVW7oJJnKp65nBM+Zqi/Q0S7HEdXHwznQFJzSmA6WAB9DcBaK6P4ECMFr9+skHFzTtpQ4a/npEO6pCkhX2KwyJmZKQ8StUoWH0eVYRnUmRFuGjm8onxAWYyuis1NGoDeHw/h8XD8FayknM8cZHE/ZivFEsqq4hrasCMpg+0I5RLiznEM160oPWEVl1+CgPedAilJTXlvdqeRlB8x2BAp/AK08FgaaMkuCAGUHza0QBAyrqBbCR8OACyNoFFhzsViXDpWax0xFAIaPWiVDEX2WA9e0nPQqI2Rt0S0NsUepNxHS/wicqrK5WkJrJq11VePJ8a0gZI12tiA5oHiEPGW/IJAjkEL/0C/JRu6qA6VdsAtBHfwHxoCM+FmGqgI/LioGpvFHMOwNP/fX+9wholJB6qYM+Ec1Bi0inbkQZXdC6Z5DR00SsOTRU0TDRKApHQJTBet9GNI576duYBRye6KNwhLCK0PDxJzpH/PKr1kmOjypa8Sc0fCupjC5EcHwrDCDEPCvpo4wCinmAp/cQVl1JAL23AOAKgpU3KirmGXBwoua8B8F7H9WJmVULKnmvU5gY5qBYKmH+fy+VgbydO60jiK0wE0f8cpgZdVCjCjjHEGtrQ64X6gHkuMQUh+eT0zOlHp8cH1xZdiBqqat3AGPhMzYYwqiYE9plETpjpqG0DRsIG4UlmyRlH5vsnJrp2L9/3/zSRnVNPbOnubWjuLQin2WTm19dXcNw1zSEbdvyXgP1sVdfh4PZltiw2AgkkbCc4cB6/OQh6RJXtamq8tkzbppcyyjOIPuogjqEJUlqpzsCU2nL7dsamLAJcRtk0nEIbi12F/WLzpS/WYzk0Pm+YUW3U0EawouIqo6ENre2RYIhFHb7rp3BucabuLJiF6K6ajNPrmFAVtUyy0fc1xErE6o4Kyts21rVwAcvmhqfZuVmnzx5XBeko2H8OEdsgJByLi13LRRMTD941Dg9c838ZQEgo9rI+BjHH3vRB+PovcG+wZ2xA9Aid4U0o9Lrr76SwbXaE64TXSyaq66qYjpzogshZnpRDieOn3zW9BRWzha2tjaJrrl981ZyUgKsdm7fhu3kwYfq1lPMPHryFM2Dm0cOHZSWTbIQI0Ki1bxix9rS83Ltoiw46OVWL6NZrFcYbrHNTzfkkCJXjCCv6DXYbq6plaJU08S6u7c7Ny87Vwoj2Vc2EkRvbsnI3FRVxbGAbr/8+S8YfhghyBKeyYXxKHbqxDGZ5YaGB/h/4MaowDUKQSsEVX+JN8+sl1SH+yL27d+TnZkD2rGjp548bXT0BfUsCRwUJlSSStXV1ruoeHpyQpJAIetYX16xubSwgGuLyWFxy8zUX20RmAUk2XAUN7GwtOKt3/6O/7qnf4jtkfzNb36+vr5BNlbJXBsa+C8184DNLVE9qjkSx9e1ebOIhQGbIyjLdjdRkFq7hv519/SKqBF3IeznL/7iz9yzW15a0dc7YOZm39y8faNyU3mIjgqOz+JjRUXgGG+8kuKbP/axV5zaFupUW7+VNV5WWrxzWwMGaN06ZGHBccyx69evUXDT4SLe9PLyMj5Ewvn5z3/OWCKONTW1CIQcVIDFFmqiESlkWRowRjuFqBjxRVxDxZDwp4AP+kg+LIqSNFD0nKzmMGddiZEHhvi7b/22fsfOjra2LbVbeRHOf/Dhd7779/j0+le/WlpS6mZvG2pnzj4nWNo1CFVbqoyx0Ylw3DYlNbkwpdBohxL9zuUPvt0ATW+u2kKSmGLnzp1z8OjevTujw4PkO2QTWl91Z976yrK7RQQfnz19qramGhCMHJ6b6epoo4ZSUu07T7mLykl8IWssKuY1DwEu0Fk4otecAcjLanQ7r2U9YX3jjTfwkTjSbkSN9uGE8Ew67R7aeyHZKMMeRRlMVIAkmWbIPaG0AuTYQBbw0VND2kVVNqUy4gI14X4KlyL7FZsENThibUXuIpCqyjKHonftbACK5LC5MctVfHiH7GOLw/Q+IYEAmHhHKVgA4FS4Ci0/REOKECMP7CfKzqiQenliwqGoaXe7iJ4cGu4X71teUVxbX2OTi5Q/fdb64OETHfmjL355bn65tb1bqjirUHnfttbXy38scK2zq8fVDY6UWeTgEcOXsuDxFQIITw4Pvodjx8NR7Na2Zq273sE+hmINaQ2W8hY5WGm+fv31jylv+uPvwCnGhssm7XuI4Gc7zs/PkUPHoI18S0qTnjVrR6tw0tKK0hIn48tKSuSM5LLTX/OcnEXudpiZshYeevnlV0CW78w6RypYFHbU3lXnEqFyDh05Lkfy3Za2Dt4gnmZnjNCNvp4Yn9IdupW+AxOn0IEwO5ZkBYv1FWWl3/3O37mqInYnQ1FpZeXvPvj+Cy9/rLm9o7gwf2Zh2bzlwFk0hQMCc1INpmeq2TcW+5MoghYUZcwNrHXioZZYdmnNndaI+MiQ4QvBd+UTHF11XkpGtNSUvNQAh/h5b9pWkTQCpS1N+JMkQN5Y04pnZQiwdtlSCkSTK5nx7KWKEUoqeoNuIOOdJkBg53mDEdBARu99K0alkD0loeolIMpjfW1tDYeFpRB/IR0hnpIGFwwat85VHGw1GzuCX83QPnCTTW59NW49+N+lqxdfxE8XZ7ZeT09bWwlhPBqyiecnBxMBoXYjM8gQQDTIYJxTBNJABWzn3DU8KXm26z0BJ5qSxGgIZci2C0TR3GwDW51SPeZ9TjRkIvtJdyJS+PaBEvjIonr0jAjKBMgxx4eRrvsg+3jvV3SGBmjgq4JBnn37CRe8jJCJACrgATLgoLCeImwkdR78ChrVBwcDGeborLmIXxF/gcVHLUIA/MhiMxL5pZk3orC0HrCNW/MS38C0m2jLxdEdVRaXl52uIlF+C+tWpI+z4OHhttoJ8V0GqW7ZqGGl67Le8/JGVIokQUVN6BSs9EVbUQcV9qcmImyVof1gaCqNsI06GP3qWWFg/cmYVcy4019K0jeA/ozIqIAuQEy7XqIP89ifSgLiZQQQKAMWf+EDz4h6ivmgs199VGfhqchco+2NeiWh4QN5qhIo4gesj5dI7aMJf6KzMhBTBe80ZKDhspfw9Ay+X5XXWe/hrIr34PgpqutbdTurSirmfQQBYt6bOFBMFT+phZKQ54m3Y2MUV5SWGZi2W8WDajF2OcyiYazwmv9S1hI2QsDbRsrGwhK7JSzp4WDcQXU1xCakevYGfULXjMfY6le7gNNQOGo5Ra9jh9NF/idmIoJk+3EIwwEDFws4uu/6c+tNOZHX4pMGTd4T84jD680C0wtzIlm6+/CJDu7evRMZBoZHV3JyB0YmQevqH15c3nCcYCMu0UTz8NFTvmpSeu/e/aLC4vmFubNnzuna22+/0/jkWWdHN8l3Wy1TCqFMtaNjw4IpcFnXEIc9EiJ5CvPFofDXSNQTTgSlp5oCGL52F4Npm52Vl51Fj7jpUtbBibC7ksOIxAj7CSZQM4thxbuH8qZ4oqIjBiBC8QeZrDFIGQYqosFNPkbWYXFpqT8lLPKefzZIYNya5YHbx1QkV258GmWnBjdBiHV083JET2SBOYoRQhCQ0dUHwaU+Nb0vPYunvKqm9rn4BI5Lw2B0YtL2O3ln/ddsrtI6ZeKaTpco05M8lUKgbZ8ybZnycidJqanXLqzt7+4yqlmJTHYCX7652pja3rDj8ZNHlkBWI/OzYR5XGzGrqyppMSdAVuMWbdoz2wZiCVG0ZRAw9mhSLn8muBnQOoFMyqm45gKKlIRKhxxSkiR4NMb1hTHpVIPnhbmwNaqzGBeNCH/ygAsGo8OVkcLVkk1cVnGxSKV8pxraOrpeeOll8hCJJUaIIxXRhHqUnQO0tprx6+rVj8R9dXT3AMhANWS+9a1/IS851x4j+dCRo/19/UV5DgHnvfmznzOYJdZzN8KRw8eMa1YZhyA7rTA/t7uzw20G2+pqORmdgnjl5RfJgyij2EyUhO8k//yHF86ce55jVIDWvUePhWalpmdNz46EnwkQmjroKbKZ8rJzQShfeOEF9DLeqBKiaaTpfFtra05Wpp9ELcWCBNJFXFjVVdfWfOKNN1DZCHbFhuOMVBuu0L+SGLoC7cGDR4Tm9p07b7zxaRqcRjPAXn75VRryZz/7qfSLg339rGHjaio7RGSSWi7PaH5iwRgw5AwdiS+ZgwzKAoj9rBHQCLq9LTRVF7bK+xMLSbPBEA0zzyxvXcPLqAqE9VH30ZGsEzJySYNQqSRereMnT4tRzi0s/Ju/+ZvHjx857fpv/u3/Zs0n8luxGzfctHw6iMXSQkw1hwWGPzGyr7df68YbnGWxhBj5MDJNP3DDb+8JSklRUXVlsCyjWVP3Hz96NNDff+a55yBmQc+Mg79fr9+84Wiscy1uZ2EXg0AIJLEiBwwIPaJ1dQca4luMxt/85jeoBIg4U52yGNN9BTz/7ne/w25jic0KKxY/SdJ9s4hnyyfWrdWXKiipDOAWAGDCxALDvqFuElx/Ih1agRyDsGEZbW7G9HBCa9QpurH8PBtBMwxvgiR7GpaBA2HufFI+lJl98NVXp1tbeanNB3jX0dkZjpDGcqFQUa4/7Jkcx2WJOx14MGGYUYQqueEPB525Z3m7l/rEycMepGHnOXHk1z0y+w8e3rV7ryDECVmGqqrsyknoBiw0pJEqLnQNR/XjR43uGXF38vLKIrmCm2GDrSiDg2QPMS0qLCMJGwogZtB3IdtgMMi81HHlKS+cQr1PfvKTyugLRkfbaPaOKUd5L0QHTY6P6cXuPduL8gvAz0hLF96Ha/IJmO0ELN26eaesvOTg/t3q0ixBrqSFiDlTEZkHxZDRfUeiWajeECoB4tWbw1afYQufrs4enFXGnxht98Y4wlPrWdKiR3Azii1QiVwkHmfOnMJlvcjIzIlLWpCPyxlRP+EsCAYLCTT3o7YuI4jqQBFIraCDYoTcMwjKmzOmpuctALSllm+gsFUvoOSN6QQEpFbFe+wgbIAQP7/qgmdVsACp6RBNaE7HYeInf3pWS0mDRRmgFPOTYhEQaJBzLSrmJbpTHX5CGR8s89GWN3rkG0zA9ULvmJLFIkSNxzkuZIaOqDaqVaB2hEBUME6m0Fivwz0Dq2tpJBxM0DQEMjjKUV8wMcyhoQliAE+fkOAvlifKS0C8IQxqaUJ5f6qL2rrmwXaGnzyA41sTPmioMP2uuq0jzXkATV+QRR9RQwF09lJ5Lz2AE5VR2E8KwNazb1UA0TRiGoaK+TMSIdVVjAgYwVEX/nikPP7quGcjmsQqqQwgEPBexxXwBhciOL59vPRRzHucIglgwkGvndO1ZU+H+EQ4wwRZ4Kk5396rghTe+1jNBEKFdJ9Bq8NTYWX8ZEL1EibaIgxw894mip+89ybqOKIpABPVcdPLSGwQXL9gZfpTGLlgHsZybOPLdKNdXdMcaIBEuGlCYc9ewlNb2lXXMATcy4jyakWtK2xxorqKUIWDVlSPsPJSeS99aysqAA40fIOvsCbMBbgWrUwiyLoQlVdRiCNS6ws6A+snH6Aitmor4oWKPmr5KAlndZWEs1Z8/OobwtqFkuqgKbaaFNaTavlTYVUUgI8mvI9IAUn9Vcvi2WjyUTJ6qaL3gEfVNeonCOt7KBdkO5zzwX1tAWjSgUboV2y54k+QgVUm6hT388p6OPIXkcsDcnkGyoEBp3f41yWXZLeMT0zHT62z/ECSdHNhZW1+fFQelaX5hVR34iamun/GXujCyir7cHp+gbNcXOFGecLw2HRcYtrVa7e3bq3lYAo5lOMS2zs6lxYXmLMhHCLf7Su9ly9/hBQipdEE8nQaNAz2srIS04qspv40vebmZSL83n17mIMy1Wyv28F8EmzOBa6bRtYiFcVxu74uTrU/Ph4cANEf3UQOyyHON4RiWCP+mfnIfmMVoIwu00KAmCxM3KrYTygQ7J6ejiwGCA0cLj10Ve3kpJLRXG8YikMWnCe4kO9plcdtbDyyMfCInmcXgWAIHD9+zGbplauXBUXz+g0ODSx2L3f2DjlxJwJFMQEUNfyz6xuunCFU3JHmLOacVfL777+PL+L5Th4/FcZaauq+PXtdBSBfH/yx2+qZBb8yv2jNLeohPmu9ZXoGhvMrq1Icomdba7tI2mPHjkyNSQRULNRzdnrywb37FGERl7u7bwoL0xYXTp889fBJoxNxljTspfqGYNhogiPPTEK5WOPZFafqtWLcGKooZo8FSe0A+BiO+IjstAFrmenPUy8+mSrQHcmffQqKSth1S8vhND+lE+TWlubkRFtLy43rV//gM5+2FHNVnMDm9u4e7OO/ELVvWWgmpTmhxJ2KdxZLjmXbyWJQ2XVxpalc5476jY1PqWX3QDZS6KG/W3etDLnsu9o72J+PHzcylqwq554+dbKUq2l4aMDCzUFkcdo1tVunZxeOHjvhiHB+YdGlq1eZ/2w/AypEyAhYx/WvfOUrTAGoCHD34E2kCMw3jGmkZyVzbz998vh73/ve1rq6w0ePPHz8xME4l0XrMH7Tle5IY6HiH6aePHGCK7RnoFPCV2tY1yxb1ohrj6xwlNX5i+c//MynP82rLYCJUeg+16bmVu8hx/Kgl9HdEVVkNQDgRv68xw+4aQzyU1PTcGNGwJNN+dd//ddoJ26HijRCGGfoRRSUJ8Twf/TkmQEFjve+KQ67BzorukaVvt7eGzdv8deefe65v/zLvwyXFCYktDxrkv2XK/Izn/qUYuQYJs4DWC/yFxJl6/5t2+r4B+G2d/cBZlZefq47EwRYI/GVK9cMNnMBtGXMJFg2VYw3IoqFnW3NLqllVvZ2DwrxN5Y4ksUNO5ki2W1RcRGvdVdSQnFhgfgNGTK47JqfNfFroKYuII5oPEYe4ESw4+o1ypT1T55IiYDqglhSF71gwuopzNEBhaMTEc7sAkKU2a+GNEmgWA0eHGRnOzyAwj5MUg0h+E9+8hMLG4Zy9N5KgBdBQ/b+UM8GBcdbYV6uQB0DQBwF+jtA63wPBaEV6RJ18Pvf/75ZwsaIy7Itpc6cPk1DmYcwkS2rFX1xK7hwILjJKzw+OmwvtdIKurQUPQUCJSbY1E4cGR/N4U7NTJ+YnJR1R9zR7MyiDZCConLCYKam5mw2MpOetTwjSw6gF7iYrKJclNeNW7cYTUePHF+Ym5roGwsjNrZPrS+EQbtGNQMaWQgJ8gKFdGFJNjKMd7qP1wTP8SMEJ8woicgoI07MiiW2+k02n9Oe7/7ufW6bwwcP0KyimXmUy8vKBvtxo6+pqcXxd6fZqCdkt7hywqyirExD7Cupi22PuCNCd6gGz8aRWvv3Hdy+Y5e2GkjdRjipSTUbINgaTQ/QY46qpTskXC/8hFmsWRmNxBpZe2SkpbQ1t/BkU0BSz6gCgl4DhYu+VfSNFIhDgKk/DfkglJd45FstHPGThvwkAbaJ0wJAXQoLNNKuvJ/Q30tNaM5L9ERAolhVXQ2Oj4kfGbWInj64QGAMfN8RJoAQEr4TbyL0NAogHFDeANecBx/VVQHTT8qQzOiNjmgaTB9iZgICB4Soab22ACBIkWrSe8Rh0QncWlicFxoa+uLcdHJqwsbiTNx0Rvoc/1xObjoXFNwg4CMIVbGZqQk7sxx4myrKECoc5E2IQ3BOfvN01EetI52pFzJ46k8lPUMjQhgBYQJzAKlTyENVQ1aAgOig6s5sey/yWhf8GvVdeQXUjejmpWffUWeRRUOAq+49IYnUoOpqqYuMflJG04BHtfwa6BM7P6CA9zABShMw96E91PUGu1XxABo4pA7TdFOLUb88e4Mv3vhWDPJMRiJhARAuVV4K0TiAaAUc7XpWBTeVjCB7o4wdAKOGfRX1V9MRxTQEmvLe+3ivYkQxSEZU8u1NRCVNRJQHUvnovVrk03fUaw+KQVjTqEEII+RV0RA4KoKJyt4rGb1HGeSCPCAgKAYTJb0kLYobJXrk8/v3inmPbopFXIhwRnDtklu/6p2PAuimswpTVlpUQEPwAd979B8eGfMnnL3xrYqeag5t1fISqrDSKASUhLDu+xO0iOaAKBN9lFHdt4+64PBS+EkVTasOvooQphMimmgUwt74ybO52J+ox2rXFuCAsMaU9x5YQIDinXWljsNIoK1trPJl2kbTIrST4gPC/1hydc0g9RLNQ3BDEsgT63FrkvIpACDxEEitvCNB9jBA4zxLFUWYme2GCRE+zrDZ97LKYEVzx8TbpEhOyy+wa+fanxlvbBrk5vPoL69tJOTlF7kTIDUty7VkdHZGlgMzlkqS505s2VwxMTba1tYhZrVpuIkn26RGbWKTHhlJ/tHYuiaxqdnQbrPnvr7e8YkQ0UEYzG4hJU5/D5MXwtzhzqLb27MtrHd4IUxAT1mrWDA8FIaemchocsEwq5oBhrwYZ57SrpUG4UFzz7x1qpiLBx6FS2FsQp46dcqOfeFakfe0/Or4mGlIGlRpTHHElO0Ya0ZHxpEDB5MFTP2TLo2LD6eGoErGYKtrAWxnl11hMjA+MeeS5q112+zfFRaXCLt3uVvF6ppJL5wpS05ipLL9IDw/YwN/6/179zgrHz16YJSJs5LKIuSySwppabIKC6TXpE3sp+ZkZhCVrAw3FudzzDtDbYfh0f17JhTzmiwsxWG51a8J4mGM5OSEBBJoHu4CdudJUqoNDVuCLM+S4jKUt33EUYD4SMoxI8xTLkerXQvcsYnRw0ePmnokBjVPWQAQVyEY4E9P9emyKhTm0NBoYEdQP2GpKXzAMPRxiC7cYBDcvpPSzFrbV5VXPHp49/LFi2JezQhM6NySopnZ+VNnTldUlDNHJYPThL7g+GuvfVyklBWI4xd8djLRMRRv9t6Ofrp8+XLyjKMjwfHnMtPjR4/KOkMb8F50tHdYo37itY+ldiZdvHjhWexMb011Vd/AkIEW/ICjIaqZ8DS1tdsSsfF14+a94ydO6WNS9eatbqkgQMTFcBaHcPHiZRteOERi1IefHD7f+973y0qLvvzlL3/4/nu4SMlLaEYOZPsycZMzswjRMKk/efzYBWwuZHYSwPLm6NHj3/3u/xCUUl65ibXErKSYmCm3bt3AsC9/9SuTE2O0g9RIL75wDv84epmYW7bU3Lx5gyzqoZeITtRMk1geM53zybdafkVrEo/6ZiAfQ8X8Yg2APaorg0k4Rx144/YoHm4EJWRcA+IR2lqamHHCYEgMK404enDOWjZE0aLWzTLj0AwSK33rW986f/4D8EkDC6+zs0Ogi3uFgRWBLDFWbPp3cGeouKCQEFjEW1ubiBbnZ08eO27wy2hgu7E2JPxalluK+hPNYiNFp8x6jA/eQTY+bSbEhfJzKJ4HW9ccGt5UUeHOYJTRHYEBbGjDuLamzs4A+rhoTrxMZ2f7Bx++b/2Gca+89LxTWQP9fRYdLpb6wfe+g/jO2Qz2B4c9jdDf27lnVwMZ4uG2SX7z+vXXXn0VbW3LSWslKyuhZMG/8upLDm1jtD+xgJZRxkIL5XEcVd0NzW8VMxXCQVjraSkFvLfiFbGgd26tCnZKZqaLn7MSks+fv2gdeOrkceRyR284OJuebh+TYIAShu7KspBBC666um2mJzYBnU5mcNw3avvmHMdBaeupknPnXrDbcPDA4bv3bi/lOdaRYkFlDDuvUlRSxgS3HWFpIWbGoDUYXNclV9hA7+DUxDT+lhTlIRdR1CNo6KPZyPTjlmu7hF/4/B8xBIXQ2CN0dpb1T61/8MEH0XhBB9tZpgJBnxYAUzOzPAT2l3fu3jM9O0cdJ6/HX7x8gRY7fvQIl7/j2oTODdlPGx9jq9XO9p07XBkIMVLnVkJCkr93j/xfbqAUMGPh4ejPrbt30IrSgrxUFVgQ9F1i4v69+3iAejvbkN3tkmhuCEPAdzQwlSGHgFs++cAnp1pU6NbGxid7Dx7u6u7/+7/7dmpmji4UlJSPjrlvUs49dn84t6oumvg4yeXAFODGeGTGGVZmVs8UCvWHfT6etYU1EuolrCZG0ydHjMTWDjrrrPRNXT3dHW3tDmbZgYEMzcsdKOgFqQGkOgxM2sZcojxogENDQ3pEyLHen8KDPPjoIyAKaxp9/OSN0WHIk3Dvfbx0HxTkkTdS1jA0IyqpLb9qV2FMBz/8mRQCZhxDd1O6/8GnxJVxtFGvWf/eONNkixnRZtam4uLXSkrzoSr6Q3UGObe+n0Brbg4J/qhyt82jv/cmfveCVW2qcvTQegzACHOtwwp6akHeSDHLaki72ZlZgRSWNEmphNm52NGJENYVJqeksPNeXFwSeBQLNkOTYDNxhf3T+VrwIyrprAlALUTWFvjqQpiyKg0nlUMYj5oxmoUz5WCqCAEf1IvRO5i5nqO6IPsTWMXAgbZZHBCcUsUbv4JGRfj2rJiphA7Rrm9ANAGaWoAQLS8NQMacIzpcwIjD0sCJsL26xHYMC3K6BWTzTHREEmQJqmBLxrAAnEjbRx3RUy8jIqMhxDRNoig3WJFJ22vOD6hreMq5IetoSE07OuaaBZ5LRoMdfDt4YKulrnGER9DwQUOdAkejgHuvC//Y7mg4UaODCvjAwTPKeIA8OigcYYtQ/oSjN4BAHra6E3sZQjXU8jG4SIhGFfCTP1ESAh5gpQncUUAHg1QkJhJvACMuIGlGZrgrgLxpNOImPLXS1z8IGj2pC1qhbcL2cgjgTLOjojvehEEnbM9AS4wZ2ZkZFCMq+RVdaAE/2YNyuS9eCDMg+JoOSNPCaU5ehoEAvqmNVo/a9aefMlbCYYCg91aCoW/cwQ0cZxmZoTy12tUjmEihogwVwQZQl73hUHhsxjcZDWndBxp6Spy03NPX7c2mTXmyD5soufWiSHqbLorxl+cmh9BfxKSIUtKlr0hxfp/17yIx6kg8jIAijv+ZuXne8ZzkPO5L+dfX49dgxXKanZ615WovF8o3btwKt38mxVeUl/b3hRx0cfFJnV29gS8rDOf0uMTUk8+dZdfKxnn/8RNmg4CTn/z8F7bEFR4bHioqFkySV1lZ9fjRk6A9NuLF+zxseUy0hFjqgaADGVPQgZWCgzxxPb29RgTXnvmRGIwNPzA9sWomJ6eojO07duL1k6YmQosaHhz3PHb4GC1KxoRoMjo52uU4kWTTRgG5QlsJzcSQ8/d1tnWabQkV20ZGCgzi8ZS0o7mlI7gFgo2UGAUXmU99eECsJZzhjE8KZkxuXn7D7kOMGbMkaiMNgTGo7c/LpWFcc71LmxM7YCwsPK6lqTXg0z/oajB06C8evH33DqEzghgVne0dnH36OOFko11XAUOLc+cOH3r6rGl1aXF4aNDE3drcPF1SYmGwrb6+sqo6Zj1XiDUwFh4/ayGlO/bsc06jpbVH9IuVCdOLZjDLmEaDKrCsDFOrcLOgKjfGNxZmbbvKM2vAigjNsOczOT3vjjlDZnpuvrOja2dmFi1rUOs7Nci0oCWcLURwJhIRyihIHXXTfHycBC1iiSdjl6OfOnF8dGwEF8oyshzq5aKljFkR9XUNqHTp0iXXAxvRrCAmEFPNmHVjhTPrVizjwdXY+Nprr3Zxg1aWX7t2A8ef6bj2ZuZZqmfOnH5w/7b3R464HukgUbHWBZbOdwvqhBS0He1bamofPbxfW9fw45++eefm7dOnjl6/do2PNUleVKuo7p4hnmzbUqjDm2cvSXab3f9/nv47Ss8jOwy8O+eccwPdaDRyJhIDACbMcMjJWdmSLc2stPLu+XRsn9lz1rves3+upSPbsnwsOWmkyZzhBGYQAwIEARAgcugEdKNzzjl8v3rL4kPwPU/Xc+vWTVV1q+pW1c6dhizBrDfWnjz+xJam5p///GcOUXri8PGt21o1Avdu858qGYQGyC4QU2UikFySaxbWxO1rv/iZBZqb129CZYXzM595uayigrK14MI2RNxpqgqKC1ZWF371q19861vffvUnPz5w8JBBISP4+NoNc30cIHfF2oNKGSo/7XLQmTU5kruAJYVm5+U0Nm1i9LHpycnP/fo3v9InSD0//9r166KMqEpe7dr9tg5C2btjF8oHhwec28Fpnp2cPfveW81N9c7pV0Usf7FIF8JpaJZXk6pq6zJzMnfs2Mb/s4Noz+6dREHib7zxhjFMR1uniogL9WRryw7WoKNqu3tXIk9OuYi8cOHCyy+9FEbtM2EoxciGBnv50L2PO3V+TE2vCMN68oxlLNXgtdd+KlKQv2xLhnMvXFc2Pjqxbev2cE9CdR1T0GlxJn7v939XcVq3737vH5zsmZufMzE9OjI28tWvfE7rk5m6PjMxvLq8du/2Nc2iltcJPNlZaclJZl4zVc6pKddldxQX59ZUl+XnZQmTcBQut8wKRUFRvrl5bRPvFp1Ys6DGKAWx4csuFj2TtkCLozG6eP0mfygnKxyw7eLn0aSx/ft2MaQvffkL7/+n//jRpcuuaRMYU5M47D8jq6B+U/Pf/+DPP/v5L1qZ4meTj7ZmWfx9ZlpFVbkAGLuKBf0njurL0cGxfo5+UcEe89+sOY0nlpTUNzyot8DU9Y9vFBTmzy64gfyenf6ra+mbN202szI9NbTo+KL5qQ8unnv2udP6ods3bnLa1pbXtm5uuXTxA6c2fXzlo+dOPbu+vGoi3j4qBm8oYkqMtxZOZEpLcdSSCHt6JEa7apiKbVUOXjDKdcBBb3cvVbrrwsjHruHqmrotLdt7Xeq+knLi5OlNzeG4N+KqqSobGRp49tlnDR60v+6ReNjTTSNastt37q2ubejJdDyf/cLntfgMG3cOLKqqqXPc0NEnj+uENTp52Xnvn33/5MmT2QWZ46MjiME7LQ/3Pp4c7GfYKUmpw4MjjNyAaLB/iHA0oFYb6E4rjymnRuzfu0e6iqNTe+rks4NDI1c//lhQqWPs8gtLdmxvfffMuaKyMm0KzMBYF2J0D7Kjze7etNUMx2e5U9mOF36Go0gBi0qExB2KbZ0dzFsjqFwjnIWZOXqkYn0/i9V3ahw0jlwr+Pm1luANDxDv+I6UwnTwtmsXFRfxBVzIYxv3SuKQTVVVLdDesRPEaIU9SrHIpp6SMA+DDPlAUGm7eAnqnW5GxkT9WsJI4NoxPsWlmgjL00XF4YgkLYatWbKzP3NU0rHDjZDR6DMvK4f/EaKQ08O8ps1LhMmzx7iVJW+UpZ7qLNc2kiUkJg6dLrIxOzVtfKt71n9rcMSJmo8rLjXLnqfvsa2YYeicGA8hGMihCJ3TU9Ok7ehricTIFaNiEa4oD3xNzDh8w9LHEhPPyGIwRMTZxqnVC5OIFGQaLzfhKeIIcro2WWopP1hFglrOET86hMk7yj0RucsgDTWif6m/AUawSpeCKpwqmmBxSizI8w4z/F4Ac0PJnzZ9YtLyEiDg+KCfzH0iRniwrP7CqVAWBZ7WqBKDxOtPBJu+0X2YqysqLEhOSuY9WivLzspkRbMz0wZnJcwjKcXR41K4LaHvtlsjOckZANAa+AwPhTu8VpYXFacKYIQry70Nzn3CzVWQXJoR6zRW+XX/qpxIFwcOBelZxmGjppDGx6EX8Gsvh71txoZ4wRGBKwhm3gM5eHAEJ5a9RBiHyksx4tSGY4q0za4TO6dBjCNQLqvNPFH1srDP4pIynJCnfOzQP4kiVRxRsGz5b2LQqD7IMzNbg6zh0+87YV0HpCZZM5MRdxLNGbE6g9k8J8sklneoyZk8pl+TN8Lojl9uPghVJmSqqiuNNgz0DSOwbIhp10VxRbkAmCGXaaQKlgkuX25qiv+sHxk9GMGssiLrhM6SMh7moyUm/qHntXNGwk1aiQUWu1z8o3q+fjDFrHD+BEVvLiwwf5m1mAO/lsSAdm55kYvpLhLLhpoXJuTXlgBDcHHwmNKOsxPbgrgQUBUVBStKzL6uOv5/Isy4lzhyUVtqFNb1sMPpXHBr36wUO6BzcGRE4Kjmi32anXXmJgIYRnlFqTBI+8eIxSnMKDGaqamrs5XTRe8gRa3os+Vt3rrVCMXwlzsoyM/tn4sLOlOnDuQmrS+b9efEixHgpxIYCympCCszk/PrwsFHppd6h++rqxl5uanZWbM2Zbqps7Kiw5nZjx66frFgLWl+cbXn8UBtTVVGahJvqvvRQFYGJYqVr0zPyNFZd3Rec99wS2vojt2dMmECOVy3WiQ2y/XHhGzXAVI3N22xPpxfXHK3o2vRsRkWToyXphhD3tWbdwmfP5q0uMppsURvSDc+NHJr8aam0syUWszv2ly32Wx3VdNW1K05Tj4zm1gw5LKunfsOCcGfmJ57+Kibd8fyKyrLqYNPWFVTqUHgOD176gUbVTNSUxZc+WNy1qnWi0sFOdlhWTl1AyoH2Vy5/EAoxf49u2U3/WqeqLZu0+279xxayBktK692tE5mdn7fwM0dO5xl4rqxImfmNLY0Dw32L/Z0zCzPvfPWG/rHTY0N+/fsxLtGAxlmWLZt23Hnxo2HPf15haUVtY1T80a0vPjUq7fbLFz87j/9FtcCIQXFZeJkBgcHioVeiTIixvWVJ44+Yc8GbMxPqD2vjLj0L4tLG+YVXAq6tp68tLwmwCGc9TTist5q06Z2jdqjpInjrpieF/ylJqp3Wifn540PD/nAlRcydPve3Wttbbyd4ryC3sHh+sZNjLCn9xZGbADgOxGXJkWQhf4rNrlWpR0674CPlI3V504988Zb73Q9bD9w6Ambfd2sWlZRyjDU5eLy0tXlBc4Ji+3p79uzumd2cWXTltbUzFD7HLdq3m5pfi4zOe36lSvPPvdcd/uDvIz03IzUh2GQkNvUskXEYYpx+EcfXda99fTYRmniJfTKjhzS6Cjj5q3r9+7c5dpem5x68ODRt779hwKJ+PHGf9yj062tIgpEyBQ2NWPD4IN92DHpKJidu3c8tsI1PGq3ypatLeLeKECYuJZGS8fRLC51b1GnhkyXYMGhtqZOB+MIJGcqGQBIMSMrREQVNcAwvtSsc/q51Bpc9e1v//ZvhUycfO550qQ5eSlDiqZMmLuxlOz6A34bbZnv2bfvgAaxJq/w4gfnrRK2NO8j64H+3vraagtMI4MD8IMUgecmoMnp6YGBdrTlJ6+7iUyYuOoEm6IRo9HRKKvnEnHd3n7TQodm5aNLHzrUtbAgX8tYVVnJbTx44AAb6uxoh9wlrNwOinEMGvNiH7bo0Lqj8avr6tmcfT+2meNFKeZmyJ/QpOubbKsXnoQ8QyBTwA2bGi3hvf766/ZXlFdyxSbfe+89k9DCDu7du7NibDs7za+1mIgFmrK76N7dW9xojohjc9JSN+bnpu7fvSMMyTBPr8c7cc/hyNhw4+YGY+I9e3epHh6cBu8/PxwMiiTNaIL9LBUPeXdu3vrSV79KqpZQzBFL0QpbXmA/ZjUeFLVbhLI/pqyims8yPumW33OnT38a8LWPPtKBM3drNbwNOFUPzcqOXTvd0MyrdGaUru/Bg/v5OWlm9A02uHdi64kLPaZSVD9NW9uDMI1x/94DAWaJQB0rLlYAx3r7721pabXo5mo5s7rWVYRmsoqMlDSmXltpt3mFPt6cxKPex9ZV6BF+nZ/lC/VcTRa6Ezr1tLTe3kE1otetXzMh5s8VjGyS+Rm+6yGxrNPVhXD+9JnOkKmoquro6mKNmzc1T0yOf+UrX3Eotf7G1CZhsl6GPTgyXFFd5b6II8ePfftP/pgcSIC0mQc5syt+v+GAhQVMGR/qPgFwoVxgzjZAsgqHlA265bGkhBeFDIrmVHEsfNVVsCK1TDqb8a6VZJ+Qn//gAv+jrqHJecAXLl3Jzy8AYJaaYYi04Nxpi4MjsswHC1E0Thqla0bugRkq3omKjAyNnXdFQA6SXiSaK9S2eifANaOa6XC5LF+WkyoGDtl8XDoCT+ZcXr0PvSsRNj29Kox90lM3YaYCibE4yIFRuj+NQglEIUjyK0VbBKE/PcpCLVTgqRUeCDUjsbbGZpo08OUrSnxSqIclZ2akoQqkeiqXh59jBIJHeNAADGbpKoWpI1ni8peYK9SG08STQ/tmcYlajZ4YSU4OLzRMzCsLebIzJL+sCB6lS/cCsyIUTSAEhQVC4PaFGIaE/02SkVpItEVIYjB6DsCRdwjBhPFAYlaeYZCePwkNNvYjI9q0RfJ6D+PPxMS8REoB6UWKUrxAJSMMyKBoyDFLYgpFJwwoV7SvWEOALDEdax4pvnrBF2rpiIoNMMD7JAsM0CIVjIwAIESGRCNkXbI1TJe0IiA3L0eKtZz5+TANLwsYD4RDoyNx0EJfKMcmw/AbiYnkRWAlegrzuJIGddYZEnv0ggfv4li7LMLaCEjk2WtgsRRJRGS8B9KjXCmqsN6KYKO4FKTG0ZeMYBCgX8CIIsBj0It0X7GMTZT7M1JI49LljZKMk/G4gDNiIDe8+6pcj3f8mjaHRy4tp19I/AknIdAO/FERUYN+DQCoVSJgYyovHqVkZoV4TQTI4moRJCkUpIPMrRbSO2tBQMpSmF/Hr+09JMPFjPVURnQCkH16LsQU2ZsujhEx0Rr1oVxw4wowYRCWbGojHBLgF0e8fNh0hIHgMEpKcYCbwpON6Lgjq2EHv3RF6wtMhNtGZZEzNycYA/y+9k0YZgctR8o57oq2hmmiX81xrYPZDqSq5pADw3WsPkhVUKAhceiWfof16ciDKBKXZqLNpDCXWi5X0eOdjXlHcH1V9VryalZ6qtkN8bqTBkWJWRKzIcUFxTIKEzKhwJecXVpztxj3KTMryRKTtZ/k1IzVDaJepqap6RkX3jpMytDQ1WM2/jryRQh7cWFJXm6BIdzE+HRO7gQi7dzqd2b6yHhmVm7/8AhEm5rClcBWJPid+tYjR44KSS+vrN59YJ9T44y1tu3Ypfe0v4p+55dXJ3oH+KbsVnCm6Ut7Hmwy5E2JJp+ZmjevPjc5m99kSTyc2tI3NT3QxzkuURe1qEa/VbVNm1u2CormTd664cKossQE4pS1GucR6VDu3r9DnnYLEL0OS+ADGAundiqbNhW9MzfjdJleY1C9Ul1NOJz97Jl3dYLGDPUNdb39A0VBDmnLJn3W1/fs2Uu/XV0PVQexDCTQ1d2F66r6mpfqXmG3i7MrRukWwzPTNzFUfDEDdmLWSXS7MJPB4RGT8+WVVSaJktLSu3uHnjv9qUVHc7rZaXZudHxM22ut13kPZfklWjPezqaGenrgJuVpKnMKnOoiIJdG9Cz63z379ltqcJKhUwRdK6HrwZ0ZwzijYSZUU7AtcQaa68MedXWqO25fEwVgeoXNcLIFoYrnmXFSraDxrS5Ks7Gz9DOf+cxbb73DPpm00OvOjofs02E8mMKd6tzaupV7LHzUrc2p6dluKOt+1PPKFz//4ovPOxN3z+xe4RtWQqyJTgjoDfFOecg7eOgwanWyFh8g1NQ7MVnMDvt/78w7n37p5W0tm2sqyk0sbGluevro0bRr16+imFHSok0ttKuuvn3m3c9+5uX3L5yHwmXwouss7pDyH/3hP929e68OQDrflOhpK9YNy0ASTY0T0De++TUFUyHe8hvtQtheXFpiVl8TExzfpCQxRX4ZqBQuhZ7SrLOGFTaV9lF3N0efak1XGZgyAm3IBx98IIZb80pY3EE2AYNKe/78OeyhhC614JpsMRVmhhyx2Lp9ByfG7kkz5Vb9NtVv6n7U9ZMf/cRou7KyQomyt2xtcZOeqxaUoolUqP6b2mhXh0XNDj4yr0BPuFOoUrxQD7Jjc2/5xhy8ZgjxfuFpTNw+Fmz34UNC00za6Ck0QQdrGjr+s0ZFbsgOyq6oJBDuu+y689qqaoMWGQ1gtHSxlaejEECW6IOPH3+KR5KcMnb82FPayrt37zMm/NKL0WdT05bK0jJGcP9+27/8l/+y61GnFRV7NqzkiG3YvXdPw6Z6Lq8g8oQzl21SKqz/mlnvdfz8x6qhyB9K1HUhD0l8Vi+cJfsKpBtFmOPki4c+KTdrYKDfhg0KMggmLtZCSlooBLC5P/mTP6X9jo4ujoRFM0F4TU1bE0tUITJ7dHCA7vSgygrLo06NyM03j+72ROmnTp3KyEjvefiAnWiwKAuDDNWoGhkGPNpuYL4yDPUQBrHak1aPl03ArezYsRNb1y0OJKcQcpjmmZt5PDwKzy9/+UtLnGRuakkPox+haxO6wtKcZ+XwLG2EkBUKUrfxzh7wi0jGSXR2DtgVw2gHRywJuOxryCDk+o1rQTvzi3FBzDlRrpJN2lidGhulQeqjX00MQakUmkLVBwaGhB7kqSzsByQtszF1gZy5Tbz/v/j7f7AMog2lL6cYMXuS1y2RM7SyANYymkggcNi041ouAP7k43rc1XLs2DElwlDXUAuYmW3fuYv0TDfaGDA/PrW5cVOYDB+bFPdgJ9zcnHkmAVaT2iNcU43sagEhIJVVoMGfisARW2XtpCRFgCU5KEgLgFSJiiM08AijQahgBg+t2iru3p9YhlMWGOSC0KOHpu7YJlAEfqXICLk/vcCMAJKBmSS9Swm1IBFzwjAUARt6yBwB0Z5Jhtwk+qS++5UCMwCPT8Ci8UtEoXcA6MGp9gpaWZTuXSIKwcDmK2a9K8s746ELsvKCcoTBA6FEVMkOjHJRy4QgjLKNMLKDj0UAhlZGBVErgNiugic3ifJ6lPKJUhAGTIonIpHCDPx6YAapCDCIwRpxISa4X4kzvrRvPnmHnOLwS+AYVKIWD8swEDUVRGUBVopEWSBUqK8SiTHy61eFRaRS5KIvApEFKvDwywJYcW78FVNhYy3HyLSrWAJOK3wcrTCbFUIorWzYupC8srrmylgDHapHG5ph41UoV1tBMmiQ4ldBlKJEYlQQSwMTv6Lfi6IR750ckOorhB7SRqqR28zsOKtAJ6FF7fuVEbwUpeDLryKiQPypLM8nYFIoGsKoKcWhkMDRAwlU8gL2UJCiVXyU+KpcIlJKlF5EG2mOjKj78oJUhF+5oiKiDcuoUHqJeseaIggEpE/UChWN+IVZXlxgQeOAACqDU+nyggTPbKD1JxgvEhFv3kEuRXi8oNOvIiAEhrYoXr8sWREAPEoEDxX80mXxrjhiUZCv6IxFOJZAiieiBQ+Jr7KDl64I8FiLCB0VCAkh4BFOD2BZ4pDbn0QqCwCoGI+vUR3+jGIBjCRI/Amt6imvsmjQEL/QukIBDzPfsTNKD+Hv4UDSjYfdPZxvddM9xxnGemHuwt0C5hSml9NNHJj8CDMaZIIRYVNGK3kFxRblTbgkWeubmm3v6CrMH1tb2tB7Gowb9nc/6u4f6jfyaWndKqrFCaTIULsGhkSHTxUVFet31hcE8E8awgmOdPOPcCmxD9ykew/aEGA1RMxidVWtvWcWD/TCu3fvsmdJ4FOWjc4pKdYNzEAgm8Yd5K9DN0Vr+UfQl/olrulnP/vZkWNPloTLNIJy2YBGQM/rtin9F3exq+uRzkUsu6GahX272tx95sEmv5EbwIUlw9JEHAGbIcyx8VEjwy2pTeb4GLC7aRmzCbX29g4vskjUMpuzF5W0sDhjVrewKI9SFL1ty05zeSgBoHqiRz1CCc/zS1/6EpZloWKlmwIuLq8QJ5acsuGsxYmxMeo2FUgLwJi9vFSscWjv7BKMs3PHrrzcwpQNC4ThvCDmhxjNJkvAr2PNAetlGPY777ylkWE5DC+cAb2+Ul5e62xA8U4mjhs3N4c5n5wc3aubgw2ysxPdkA7d7Pqnnn32/u1bWl3NHb9RwwU/M1Mi/KLFsK841VbPS4/bW1veeusNE3Z82vGxKXO+wkGbW7ZwCVQ9PbT5gfVl3s4O611cX/eqtXW0i57avr3VsM+kgZOjXDSRX1TMT1MQaz969PDi8urBJw7/6Ec/SlMSraA10e44HWVT67YWiS7CcJ+rCmOwYuGeONSQgwefMLjEG6L5WxwYciRWHgxZUDOh6NXsX+Zd8cm+853v3Pr4BlpZP1YFTx978kmr/94l0igpEDFN8FH2793HE8U2SnylYxtiKBIwTROK9p3BEQpKaFeK7GbN9+/fz4EDz6BxqFU6dOgwm7DBnaAdA++TWOfk1HTHUCJS1ZV+9uyvW1q2GAhqLXBNCPojFmb8iuvVzHUuo60h3F9zt8ggAXTG1gGFVMUEeV2sTaHYt3HTOOx5Z6Q6GWreAabjyiUcX7HATBUa6mRGhj/5r9jfd+AAdfKAJUIOUrNrey4743HyMhXB8ZKL2emMMa4ySBS/SNRs997H18SRG1V791UcCzOKhMWC0AAnIpGEC22WYbrWnoT58TPT7mqxThDuoqJKgytodb6AIURh1A5UX/3qV7FAPigx/EAbe1KZ2YAc3Al11jlOcimOdl588UX1h5RIhl74vozka1//ppafV6tVJtu8rDAx9sbrvzx9+jTx0qZoSzXBeThCw//iL/5CQPPW5nqqUSgT1S6QhsaFEjHCVAzQvRsSIJ4uiM5eWw1EVk6+as6MnR9cWW1ZXhRSmH4Q919ZVf7j7/3AEsejzi746xvqd+/ZSR1//ud/bnk3MNU/5G5nrJFkqF2JzbWmE0jDEO7j6zcR4J2+YjsS7rRubW3eCMNRLSbzIyi/3/v7f6itrdm1rdXdLSghutdee40KgKk7DMlKCGmTFSFjDSPqDlkRIMw//vGPDXQNG2gKd7SPO5PTJuyJSB3UoBMat4LhEQUMCGZjPsGAfl9feOEF7Y7htHKJF81wwnPmvXes3//mN79hb1t75yMtYEV1jTkl7peYFrTp21kOhH51DywKYaiKv9I9hEALSpGOETbjPS83NIty+YRl74wnGp7OTyL2kQGPP72b4Y5iVCmkwwmVhwA9UqieCgBruGUHBl7p3iEhGWAKUmIUOzASwAJ5StRKqE0SpSADNuYEA6okMlfIgakgKrV0KezWJ5QAxhFiZJQYqE08svikJfVC4MolomilERvaqMNQRxbuFAwYkdVXn8iEggAgSd2XEjXuBS+YAgBSLlmYrhelowRJvqIQqQiQnRxQrhRfScZXJhTlhmaE+UXYJ7TBQJLQyqsIbRTMEHp8okFMeRAAsxcARAEtyYTGNnGzPXHJjnEA8CMPgD9hiKqJ2oFNFpUlolKEFxiwiWClA/biT8R74ER5TmW5nRJh0pQDsZZklw9neV0ft7QuGtM8K6dmWqM/M52cNGFNAftKiZMISEWbcuEkH48UAOyBBBiJEidGx/wSApWhHEnkRgg6F9UQIyxKFqzJoi4YeAhUgRapMMCJzmiEGhz4CRk8ygHoknVVZBJpiJLxCbOf6JSUIPcLTOmIiV+9KAVC2qFfAkGPXNJhkw4enWQkOxqkgIE8cuFP2SN5XgDL6xMYTHmwLAQIAOH4BKdyERAKTWx9AclKfUVbzIgSAICxBgyAr/BEktAALQshXqhQFQFkV+Pglx28jJELSGgKpBQYgAGQGMFk8UKw0FKBB8JIqvTIC/K8SCdznyJtSAVADj7hmo6Q4VEK8hQEIeOMAgQA3gNeEWxA9YQKjOzIg0pGRUScvDEAsMmCTfIvK97MMzY0Rb9z2UsSDRFKKqtrtOwmufgw41MCyZfBaxadarq+jOZFSwroKdpw2FRWRk62I32c5lVSkO9KNEd+phhV5RQNj4yLNhQz8bhvUOsxPTPl7uHFpbXuxwM2Cts1YYdV5ozQjlzBcaZ733n7zMxYCDsx8SRciq0OTU7qaaxSOWAwWKlRukmr6hqsMafS0q3GGzl5Bbv37hfEQRpualNDBwaHbD/lD4Sql5XT39tTUl66pXmrleqy8iqHyQiZE8Np46mFTczGdsAVN07tk8XutXsP7quxBMWF4PsZ42jf7KjRM5585ilOlJAEpsL8NGgkQ4MWTMi2sanFplT9F3WQD++OhahQehz9OG/KmWC2kr5/7nx1TZWOniJoAQYapCODBC0eWamMGnxKlIhZVsoDdLZ/Vl6uuWkb/8zU8fIHBh9XVITxg7LIx8k/83OLfX3hzigOQkHBjJUQNkPvUsw+41c7YCpWsEaofYlO5HBiozAL544yLZ4JSaI/tyIMmMEYPnF4FhYXyyqrxoen2MC+3XtcaVNdUf6rn//Cxm6YScMaqvk+8te5x6vERBOQIZyETFB37952/KtpQCRJ339gn4B+IWCkZ47YeoJdLkJmHHlQWbnFoiWZcJB4VmgRzy9UxMDAoacEYvOYpp8N5BQU2uLb1d3jellLGWlNLU1I1+Lgob2rc2vzlmsf31DT7IDce+AAOsSYMjUqqSmrePioh5Qh5ZfIZRRLBBhWkf7iL/4t14TW1eTX3/jlv/gX/0J4Gdkl2LjLdrmMIMUYsB5zyeTLcK9e+YjKlULffqlEZ0rHjODKlSt8Nf333/zN33Dxn3vuWU6YxhydlKcgLg7H/VC4em0teX2tqrzCNH9hQZFoMJhZVUlZVdL8Qkfnw+bmLTXNDf2dXZPT9vBYu3i4NbuVlKHavWvvzNw0gRqhG6qZnLb/WhyLMyKPHDlmPhu/+/bvYV5MinmxKganycC+F1O5eOdjUSEAAsUC1TJQ/WZ9fYNqTQgaIlMqWKZF7+B1xNjU8RsAOOjYE5tFvzCYRY4hDQriLNKrJolvSkQeEW9Wlzo6HzBBq6gnKqo5i74iRuuqxV6YXzLof+WVz0V4n7gr9CIAG4A934r7xjeqtYmiRcOeX4uSkx0MVEjc4vJCeXE4pZSQlYtI43vap47g5jY3090vfvEr2BgJ1vIK88rKw1g83IdXbqagCFWi+R1TZY3SIWinTj4X+pWV9d/57d/TLFrKz85d0uKab7hz4zoMTq0iOjQEVymdNMJJFJYXOabbt29zVYp1CTQk2q9yKrNC6tct4nxZZqN6GJA8+eTT3//+97V7yUlG8OktLdudCKQykJvKs3/fHrUFO/YklJYWt2xtMtu+aXM9Np3g5CZsomBLxPXrX//aHu7Dh19wvzd9uWextdVyU8qx48ehIg32QCm6TNJmDHLpiLyj6vLVjyhUtKLbHhiA2YP9e/eiYWoy34QBc4XQI5evlIJ4pqIJO3DgANOienJg2OoUeb788stk7miwY4ePEA6pBi8tceq2xSsi5TGBJwQ4KQhtCGPV6g5GDBtUPXiQhHIt78WLF5WCHmNIi07mi8hwWCh8kQ1n2bbuOBRVZ52pjGWHVpgE0qiF3aKQcLA0gqqV/lWbxX4gp4XoEmlzWQvkSgGPVJ9UEJbsz1i15ZUOj0+AUY5f8p9fGGQzsEGifSAcufCLQUqJ/oFfyCX6BA+ONNAsB6daT3mJF06YEeAhXshlT1TDENEUH0WQEuJJKTTTycnWHAiNhUDiFz3+jPSjynvEpnlkfoomZ5iVy5ZQCK105cqLIziRCq10kN5lVxYhgJeoaHSiAXJ4SFJZTAgwBn0CABI2SCIevQ4hKws8RSeSg+cXJaNEuegXqV6gVRZBSUEtGNgwJS/8EuGRjlSf5EWedPT49R6LUDrZKgg2BcHGr6VNnCoCTDS2yL53kDBHwqDy4BQkKQGGwa/2ExLvXqAFEylHBulFAcZEU6c2O4jathSZ4QSP5JRsMeK5WXZRhXgJ063WmLJX17Q9tmmOjXNq85Pz7cEwl4oFhYrVFlWvnlrdYgCEpssUFM5DEpxmAI4eDgDqTFtwI01JSNT++6VoxHvXBXDmDHy9V1WFpSoygRPBGCdtYsSjF0zJIjFq3zuZE4hPJBmt2ruvodTE+I2svCMVwQSLfbxDKJ2FU7eWUHp0OJQou1/YYKYOj4ww+2VdMkbDplbmpCDwyICfdqLtwayPs6sVtWCom4+iCA+SMAC5RBk9ZlXQE+0QNiSh0FcPsEitX3qEU40O4kywA0B2RXhBUsSJPMQjBiVY8w45MBQGjP94ZC1UkUdfZZQdbaHpWA31An7MRtnKiwVfgUELhtYkIhUSh7LHomUhEO/SSUzPJRcC0KOIWDStAZPiN5IEXnEgoVKEXjiaEBiG9CjcjprhUBCxMVSsFm2s6XCthOdZm7WFenpq1omNI2Pj1lG52qx7YsZWFusV6Y4PNCMJm8rhrOTV9ZRHjwdXqzZcneJIX/u0yiqr7TfJKyxJ2XCqxmJSWqarx7KznXPHJ7K2vKRBLiy2LXWl+3E/L58KDD1rasXMNnZ0dlXX1SLbGUZGGhnTc7YTZGVki7LCF9H5ZDs7D0eAtHGF7bANjWEPlUt1rfcayjAIx2/pCKxu2E2bk5eNf6ucxgnmm2ya5yaIaNI+8etUhD379lK9oLDNW5oFddot7nj27NwM81kHDuw7e+Y9twcwJESaytTFi9QQ9WB5ZFN1Fa3NzNr0JYQpLM/WN9RyFVQaaDX8GgoZdWLkv3Pndn6FZttOAMcquro5Kz3H+QosAVU6C/jplJ0beOg36VGPoOLwx8QF/MP3v28lqLfn0d6dO9z8Yy+aJtgSI22a5repcmpiQmerBV5aXDNvTkocp4yGDGEdPHi06dlZFITmN1mRsliOdz2OCqLcgcE+ni1j4A3SuCNPrEV4d2nj2bPnnnrmZP/IEPUVhPDCUK4puZ+/9lPLFDr969dvMjaTpD/96U/37zuouKNHj8NJXxpbFmhowVf89Kc/7dqK7/3g+9r16tpac9Zvv/WG+Cg02MCtek4mptdfeO6Uaq4ShTa2oBBJXmwddqaTW6qwdu/+ncqKalc1u8nGvl/+Ul5udqgJpWVl9lBrdDgNYunmekKowKFnD6kzVy5d7ux4hO66hs27du01DHLyDCkolTiMPBBt8h52t4apbxJpwhoC5RkP4GRqbAKhzsYlZSy9+rOfMTtqwyctSgzmlZmldLWRSTU3t2xuauLi6ObZrcUEMeXaGjUzkJrwOxkQt1gRqpPKHDN6L8gvRIk/ecCNTc10KSrujTd/UV5RvfLocf/AUHFxyfHjR8+9d2bfgf1O9REaB5U2lHNmvp877Tpn2fUEzpjXpmlcmpo3MUcjVL6auoTy2CayMy0a/ZEAfTM+5CHy0uWP6mqrGTFgxBi0EEucdmWvLInoNCuqBOHA1vVI+LXDf2YoGy96a9jwgmUyedzdw+FmDVSrOKRSDcbtSQLJhlQ/nqONttKBkT+ascCzcaYqrxTZ4G+E6L0Sm1DlYrjoFLHj/FanLVmzy8udIQftqbqdlLLhTAwASBLK/4nMjXoVYbKZhSnF3n/w5v4e9jx0HTJg9TwxUB6hXyzglP3gnSEyFmtHZkz+9f/1/1j2Olh0SA8GnrOL5Y72B4YW+CWQ7p7eazeuHzp42E1sNqeKp2DEUBmYqQm8tGji6gxmkcSKiMUnIjWSRNLC/MrQyER17WbBA3wt1ApDRA/LIU99pYgXp32tb4TNl0YvjmjBi2B6/jF6rBtQHKqsV1CiE1flNUsVLZAjzWJJSaG4s5YCmKGStjWotnv3t7Vs1QaFJZSF4B1aeTx4YB/hMDChUAiOaoVcdkZFPhihIEbFGCgFLydPnqRZTRjP29qIHQiG+4BRYliOCwMDtcZZCixHcaHGtbayQKVEE0JPXBUx9cKWZCQx9ZG4ZFQita6tLpsaMU52tNG9O7cOH30yy/GdZtMyQ5wPIyEKvyxcz8cesCndCyNELQy+4tGLdIwQPmIInB5xRFOIQSGWGYxPDAMx7AFOMDJ6oVxIaDY2fLJrXmBWrZRCvPCQjF/4wcApCzNGD5yAofJCI2BQAq2C/CJb8+0lPr56iUTKDgkJQwhYoQhTaFB9uITqf/ou4FVh6cAiI8DASIcNeSj3GxqcxKw5MhAji0RoPV4iSTglhEih4pBBj2wbWqKjdOzEXD5pbyUiA34daqSfGD1wMidFAAOjRC9SiAVyQoDESywC5QpFMEiUo0R2OKWA1CDIpRS/PsnoXToWvJO/96gs8kc/GC+Kkw6hXAgjGTTE7HJJASPFAxtGYJMlkgHMCy4iDQCiQFDlkyLkRTOf3qEftpaKjRCoJEqaWVZV20dkAWzWxKF5XWeGWHB3CIZGSStEBVGVkER1KIKW/SoFYUQEufnNzFXnRYa2Tom+etEsEz5OYcCalkSW0DhgzTFQS//zgCPKQnxs0yJCAvSiOL+koWhGBa0UXBAF/OSgCH9GlUkESTsYZ7oU4UUiAEhAEoVfQovtuewU4ReYjB5bLqIFygVMOl0gNb5EwrxDCJVP+PKgjS7giU/4Mzsb1+oIak30Yk0u6crVRECOYNm9wMN4AHgH4NeDEghJCUL0KA7ZHnJGFZxaAJ9iXpi94Bp52CEWyMFEYnxFIdFBSP7SlQUJ4ITGwogdJHGhVrneEcmKIqpo6sqVC51EAQ8tIIkewaNKEfrBWJBP6FeijNgBDwy1SvTiAY8GRehQfFWoEhEMuck7h8uZwVW6CmHkZBCNk6SUksGRMd5LaBtX14VhZKVn8tdn5hZm55fWMoiLHTDjlOV1V7SaO5hzJsFQWKRdK3aOhS0Oc0sis9OzCwaHHJ4ZosWYZYY49coa7A8MOjElzG8KWA+6Ts2wJ5W0SorLn33+tAPmTZY7L84dOHYGFhekDQwOcnBRnp21gReMe0+3o82Uv43PU+OOK6XciZEQgSN2322ed+8/MP3HRRaexu3m7j8MOz9XBZbQl1gMHSjB8jTccYtTg0mPPRJcW6c/a0fc+ERirFlNIZ/nbDnt7taFCanV19MswUKYGHUbk2jBBH5lWdzTBroolsAxDickfKF33nkbhVTnsB3EW4SmBe15+/1OKDDFA9TlETjVcFxZC7uNRqJiMgbUulX3Jz//2eBAr9nSmtoarOGX6uk6kGqGKBGWFgZ1Bvw5ubpu/Szidf0Q8kLZWHFJIX5FOuhG/akIj5UBRJrId1wYnFN2+42PGywBQFXjpqaXP/uKQHqRL/bH1lbXGBabibeOWVVWikf082wViiPEs0OMsFUDA7LSm8NGINwApRSXlYrY4gfa9K83FTRn5oh5nDlzZt+ePdtbW+/cucV7gXZhbobzoF5fvnSRSWuTeBqIJDpUKYVlsjdXEu07cFAg/C1HL7q72B3OpgvuP3hgAtX0v4KFkhsXXnfO/737K2vrheHQtLWe3sH29gftD27z79UTNdYEOYbhtSbQ2dluZpHsaF3085tvvslvxqejHqlKEBtIfZ6MCGJMNMSyeUX0R1XB4kvLiIMWhSgAINafvfaqBtcLADxTAM2RFH5gUyGx50wewGgIVTQvFJFfWFRXW0+I4Uo6u22KSrUFFkrWtKKpKVyi0jJzBnKVSGeXppDffvvtxGr/StDl1FRdXYPwDAJVBFPQuDAa5WLEn3iUjn3lkjv3i7bwwu53796JYCdX3rpzG2ZNjBJNDAhoKasotxHZXdwCLUijaUuz+qBqyWi4yVK9K8hQ4ebH13EHOUrMdLIJNUGh4Env/r029m0dg+ulVjg9SkgVyzCQBWB4pnXLSEltbi62PPSrX/3q+FNHspyhW16mIIeHWMMRZkNfymppbVUHjMv5ygRr7VJ815NPHqM1qAC4tUDR0bM8cOAQqhRNFGosZqnMCSdG7XbMEo4NK5bYDPYc9/viiy/SiF+OkxplNU8uF2T95V/+pRYBhcQo1tCJx8BIUrQYxWHZgI2h79i+61FPNwLGxkaz0kPjhTr1hPxZF9qIhaBwpFxgEHKh+HMqcFFh2p279/oHQihOVmZ24tqTbIFAPJfuhw+5OR1t965fv3bi5NOOojIlwwLtdyfek6ee495smphwg8a//49/JWjSfqwg2/w8sTapqaOMECVqqZsE1DE2gCmlsBlXWBCa8bB2rSSxE66r+5H9RKalsI815CFe3yOXFhzBbNhD6QyGJCHXytA4hJoG4YwyyqKd+skPf6TKKNcntUb1tCxmrKUFdrdDbV2dRHpR3fTHxEsj6hHJIA9+xXEiNQfIIO2Ghk1o8yefu+1Bh/a6pLjgxRdOLa+YA7JfZSM1I4Xv6fw1E6juqejs7GhpCdvOyFnLi3KkokGh0SD9qRS/sRNVOrPHmq8aKemysFvwXsgtNC9L4eBkMDQOhuhUXvCAPQj2ADaMkeuTLlx9lM4SpFMEE/LVO5Yh0V6DlK5076okDAhWBDnEXl+6r6TE7MmH0KJpKRokbOg0g8kY/AmYuBSKWhSqCHSHvJguC/MDJgV+Nhx5lAhY0WSCQXllhAdtPqEfQu/gDcPkRQ/te/cCG0gZvcAPoeze4yCBeGUnN9mjHKRgxJ8IAE8y2CRJqODxyZ+KiLyzLlQhHhkS8a46g4zkRVn5BD8MiiYZn4DJgkKJYCL+T+QJj0QFRSlJ9x4TEYMwFBIaYvyC9ESBw0k4EpENM8nDDMxjSsleTIcG+rUPQLCP87tMnTkcdWF1xVkiS+trhsRSzD8QVXoKdy1EqKMWOx4C/EdVhpE8plQrL/hFFSLB8PTRpnTAUdTh8D/ojAo2NlRR4Rz+dL2Ww+Xliv2xLCo7gqGKikA2lvECPzzxT9z5Ey9RIAiQhVjwi05IvMsFLOoRDYrwCUAEw4t6BKE/Ueur4vzJMn1iDwyDAcMAIHY0/pRdoTCTs08eL9JlRA+ZfHIWJ4JdlUTLgOH3wI8MKcrSUETVAIMwvvuNmGGDFqeRL+m4k0t2iQiTLiOcCPAnYJ+IArN49BLBJCJeYqRZRSYZvLAlpKpEsiurrLQIPML0OFBJx0s0SI0JkmQEKV1Zsot88MgYyfOOPIViUCsROfJJFpQH0H8c2So9MoVIBbEZWkZhRKUgPNowZgYOaw57JJusnIy0pI25hbGMufn0TLeBLCwKRkhN31jb4D8tLluxnOZAr6wlmclwLOlc6qqDJdFA284C2EjNnJpdsrF6fXkxJX3G36Z4p8cn1JHmVrNO7g3o2ugJN4Q4pPLKtRvGwLv27NWg2QjjgNFt9qfu2t030O/2K+ZclpTMfytNnFeWljRmHKJyO4IqNytE96FfX4zxkYmw58fx4nO9/QJii0rL3HrG3TP15ngxh68a0rRsbc3OKSivEHK5/LjHeDhNXId2270xGi5uLklevvyROAXnBwludZScxtEeWbQJ2nHatcP0lGKVmxhdZ+Rxup2TTgjN0o/xfEUlX4KvNSFeSC5I7GQYGxsXrapv5PPonuiUgxevAzcSsHRvpEIL7F+75JcSPQTFM9TDqhrshLj0Vhx0dVbAef+IHRND7sqtrqywtSGIOzEza1mBxkuKS5ubtrCQYNtOHltcig2UHtYDleqDeDNr5r4VxGb4IXp5nxSn67GoaBnB9mayNb7iSFVUVhs1GNpZ1nj99dd58FW1VUlryWIQ5GLbWEPS+++/71gaxKjUjJCv5SuVIZsTxY/nwfJ2nPJy+aMr9PvCC6epoD0x16mGc2b8Wi5sqKsT8U4vorBsLjl/8QMUHjx0CM3raytnz/36n/7B76tTV699VFNdyy/lMAiy4AJx3oRXhIONaurrrl+9bg+1sGC7dRloceNmi1ymYfILi8VB9g0Mzy0su7i6p6d7795tRM+zVD3EpXE7yIWzoo45mAVvqiW10QFWzTvOJqL6cGvNiJS/+MUv8oljc0N5JKg+W0PAvLbg2JPHzdKYDFHriIa4uUexRdA4U4bFQImxJuOZ6XCDNAcwG1nevnnTMtVzz71gLWqgt+/23ftWGo1E6YYaGMePfvgPCDu4fw+Jw8NGmZqR6+7dIciH6ItKyuwQ5QsLeTcVpDUhdGMyRbM8SBgNg2AxTBASsmbBpvnllYVDSCBmf8mHKJRFVlooymBPps9tk8UapxNO2OI1ECwJjHSDHMVxZLX+6CEZ+BmBABjywaN0Env66acvXvoQ1yDBkJuMaos+nsrQ2VAThpUDjnoeGsJFUUkRSF8jL+RZXl7Bn7HPnamh3OoHzMK6WBvVWDPCmhfberQd5ExQKhiCKV3jaMyDWinqJO1bwML7H/7hP/3oo2vqj8UNNJ888Syxy6jL5PojUoo9+KyLZV+9csWI0bEOICka+8hwy8T9B+1uy3twv03t4fU6rquz7a5bFU3SKwjlfGJtyh/90R/hSF52hR7agTO4uXnFueFylmWKIDGz9ZDbVfzuu+9wqZ3m5GKmd999W9C/9UHkya7pibaHTcvv2qzKigqONcEqrrmp5YnDB91Sx0RVVIdZ2T0DRldBp5gCowjKYl2nTp4MFYFkXdTX0eGcY6fAqBco//rXvw6ScNhAsJBEnwQJmondkgJ5MkWX8YEhT3YStU/IFEo4eGQAjfUNsatTOl/GFEVZeTml0Bf69amm+aMlqBrM0jqAoThTtGJIdA6vcFgHfgHr5h2IZnjs2KiBvr6CwhKLH0sr6yqem1XNg8GmA4AcAfCzBDgxiBGUSPSiOqCcXeEFjCwPuzrYnq941C5H7RCUTyyWqWPEn4BVf00ELbBMtYlfHlVMkgDYua9glCsXIYOELVqUcRGL9TADwocNjCLAg0EPIaCWypBKBfKi0CfWqCDFyaU4vxBqsmDwYEeHp3kBiX5NhNJjYwU5AMwij2o8SIpCAMkmSVXpsHnAEA783iPx8sIJBlVIIkZE0rVEtNEaJODh92fEA0yiFBh8ks4MKE65CJOiFJBR1P5UhEKh9VUunyR6VwRriS/YiWxGmwEDIWn7EzbSIFJIGAxBqap+SdL6m0QwipYdswrFC8JioRE5zSIy8guzLOTpFwEEHg2YbFVbGpFRub569yA4kJ2eZqI0ijeKgtYkKsspMeixd1BKOJSWw23BKiPNnWuoisREbfqkXHLwgl+5EMMSMEjsTp1HIckjSbqWh1nCiSnESDd4ho3tIYDPFI6En5lRWWDzFamqJBgNOxhFywUP1eAIC9KVKJHBkFK0OhiUToDkEx/K9QKeeNETBUggVCY7s4FNcRiJZkBN4ONXvEALxi8GYfYJQCwRMbIgzFdIfEWSF2yix4ssvrJDvOBa0QqSgkhfEUl0ctEUtNLBs8NYl6UgD346ld0veIICr3RffZJRr40vKQDglI4q776ikyR9gpYKohOPLyZKhpFmBINRqLJ8AolC3a4SZVci5P5knL5KJAovtIYXx0CTjz+hioShzQNhpIS0YQDgTyWSMPLkJXxURbK9KJrEICQ0lHtRkN+0/CLyERSdnhZWUYwkHeFq962dnrxhx28KxzeDH+5JsEWgqGjB3FNmuE1LXA88GliP1Y2+oZFyAU4rq+MTY47YTk3LsZN3fHQ8xOpNzy2vB3/XxsW8xPSls6Qrquvml+Y/+PCKqSNNoZPc0jKy74tvbm+7e/seLnr6rAOUmkshcp5lCJBLS7HjBc2EbyDtfmKN/8CQ4zxGM+yRS88qKCrveNQjIgaPbnMY4se7r3Nm9sOrVx2SofcUJh7mdtsecEAT9rPc3t5JdLv27HYDbDET4lCvrJBnYVGR7oavv715y/7jxwM9PT1kjhuS5GbQhVpTVlmhDi7NL7nNkMBVZHtnAXCXHXCpndHz2gumVtqfqRViFTPTczb86/xZoNZJ6yEMQrPPxSdJdZBtsAqjEevkvCxWAYbGmZaDT1761IvdzvC510YIEkUruD8BYVxTk7wKkt3BNriz3ZkcTjx5HOXqOxb0nlB1PezABaNCv0euc+fOEgIrFVTjgibNDo/OOANHGHEgZOPmzb5yWj68fEmhuGB1elODDLVM0bo8CL1wciiIcFi7OU2TrjCjnHlzITQjYht9xS9OmaWpRyZKFITDpbl14wZUFgr27t1/9uwZwUgX3j8v47f/8I/+8i//Yltri4xKV9FOnTpFzuc/uPDrs2dcCVxcVi5GK7gZzgP6H3/39wtzYdVewaYBXYpx/0EbakYSuwcSfViu4Z0wbutDlNTRFo4OIOvPfObTAom07OoGZw9ZjIYVuhrNI52gCQWr7r7hFhAKbtw5J+6ZKPXipmYpNbYynEi7mLmC2mYWJfr5m7/xdVUUKo7ON77x9cuXL2t81FWmponREMNp46HsIt7kJYs/+va3/aldwzYA4w3fCwvylhbmuzrae91PkZF68uQzd+7eV+2txNlu39DQ2Pu4ny/+5PGnnWiGKn6wWSUeqqUAdCrlu9/97rPPPos7wkUPlaAwNj00R25CNVgSo3ziwP4///M/f/65F5kF74ofU1fb4MUqX31dozVr4Unra1MGfF4o1XktIkOwo3GEEwaHUVK/WDF5LcXQNDEyTQ/WuI+xaWNe/uT6W8BBJE3zI6ksdGkjo6qcS5e4ubV1lT294SZw/p+0vXv3ARCqCK3J4J///Jef/exnAfPp1RyuNnulettVGZPlBeozPW+2lVuPa4qjZTCqMXg47z64GzezGx6QA2s2oR5jXd59913rBuxVdbIaQCD//q/+w4kTTy+vhcBipj/c36daak/Rjy+WwEZpnOJeevkzi8uOkSxwUwbiE/sTwhmaxlTkv7g4zKZsXTHfpGo1Oru0YZPw/bKdVar31m27jBUM2VUwkfRr66uN9fVt9+8+efSIdoTWTO5jwWDawc9iyA1cEY8dBeGUgWnT3UqgdWdpWkBrI66GQKQ+AwG8cYs2pjoUgWxq+sUvXvvGN75hqsst0VjoNf2fn1ve2PCDH3zP4UJ2sAgo1I1pUMgHvNJJQ4lSSMAvc/385z8PLSvyQvjY0aIhTF1DhhRDTRxpQSDR3rnIAzEMUo8LOVkhjxUxD1pTonpnLMGQYhOjZQlezpL6bUHDzF+62xbDLXXHjljU7uvn+ZlyTBfN6Y7MudkZs0S8paH+AW04AsxJMADKUnFiX6gsdZwRSvdOL3hRHdgha2Rg9Ih4zRYdKZ1gZQejQnmnbmhLSsvJB2GaXai4wlpbn9RllqNegITBV0hk17zASXrMGNcoUZDmm9gxHh9yAONXLvC+KhSY9hRy6YA9KhSaVS71DiPECN47zMqCHFXUQchUhsHox0iHBCqGSsLUgTwEk7lcqIXfn9oKyBWqFDKRndJ9pQt1B51SIMGjAUms2jIqghDISgXxQCiXFMoFY+ELtWqZ7OgnIoVqK3xinN5lQZ5fJPkTHp+8szSiIysEEAi0PikLp3iBylcSiCWiEH5/yoVyGMiEwJkogjHFJmlcXu9RO6FOJQ4RwpoU2XU5YGL3oyDZoVWud9hwGmUIUgq0JOmrYT9qhURLlyJLCBIwK+9Y83BlSvCVHUWsuJBdOM/KkoZUxF1RSakj40UYi2IZHR1StKgJcRgDQ2E8U1BUXJDYeNC4uUmP09vXJ0pPqBcWMEgUjjaxrbO6qNhpxYrjA0XpkTxSGQ9zgofkqYCoSYZY0EBuhACYDDGCZok0K6M/I5s+kYmUWBZsESbqlH6J3bsXyo15FedPXMCsXGVRK7l550b4ZXu+SiQu+DlAioOHucKvIFwoEZ7ZmTnwrNQveGplk+gUwoGqKElyVjRTVHrkNMg8cUCKUmADGZqORHAXYuSCHBd4VzrIWImivaEtxk54kQ4ATll0VQiABxh+0cxIFM2c2LAqw0hIDDYl+pOco0wkkrPqCQx3fplBNM5oVP5EDMMGpktCLSRKhEfpitOq64N8RUC0K+lRJjiNoo4qk8snKRB6FIffqGJoUWLPiEM/iMWR+UqxFO/gVKfZuGKMsliV8FsxbDwe72aUhLmIbzGb5EpCFxfMzYUD0Jx4pAiTqsnrGyWlFZrhiUkHImdwwV09YY5a3OHEdNiayI9HwIw4oqExp82Ect29KVY5GGqId3eTvIOxRgQNTc/4ZQZlpeUHDu63GdJRRWIeOGw41TTbyWVfreAqY1qV3qFBayvr6tf9jofQ2jlHOCL7zP27I1KwwNz8ctLGytBAP1MWDFJTVVHk2KK0cEYF/Wqo6Ussw90H92mB3BiP+17Edr3+kx+azNJ08551ATTOtLhVZsTpdKE03GQqAursufOc/oTGQ4eCzT/7sz/jaOHLYqdBFLeE0gmZ5E3F0DKbYYSoVRaFMjAtDAysBeMMAGHacDN0Okp/2jlg9n3n9tZHHZ13bt3g9mgzK0ptkDZvFsa3mxo3czi7ux8zUecoXrx4gQ/Q2NjgF1r0M9H0jFZVz+oUFlhUnLpFLSRCXTo7Hjhw86133nZ3Jwevu7fPWbT8eGFFptTNaWo283NCXKUdknrbxLbdcTYGP0tGJ8+BZXY/esy/tQTEMLhG6rKZaF7Za6/9Qty/RkVj5UGn6yNgu3n9Gg9Q/UISFav43/zN337jzV/t3L2LKz6SuIzLzV9k5dOVK1f0R3rw3/3d3+VXkKcegL11dban3UuwiiArntaDWU3r9h0YVrAD/mFn1o7pg0gTmWhl1oUQvfTSp8y5EjePEMUsFdFyqV36AOqUwnHksnz581/UzZv+1/SQxe27d4V3kx1gdmkp8Re/+EWhqJSCAv005Zm+FYykUOImFw6WWVIeEmWokAUFYRKFwaEnrtGo5ayKYy0Oha24GU59K60on56aeOb4MUHYu/bu7XjQjpEf/fD7G2vLzY2b4kQ72dEBa3YGKIkwUzBQEToytBo8fvXf/AJl/M7v/A6+OFV0Rg1gSAzNrAGbtGKSXn3APi6Mq2Jzj1/eA2ppyBhRW4NrrYkXXLBgMnRIEYcJvBLVEyku7FFtSFX1fv/X58z3IxJr165e9SJqhUBUAKSyA4KCyld1QHGuzsFFUZh60FHmq4effvlFuZSoejMFW/tJlfesRKTyI488/TTVIIaXY0nuwMF9JGO8qHSDFqoEhnjssyESUy2tZtOd2jgwUAMtbVK0RArCIIIl4kVdRRgwLItXM/m9afNmSNzdZrOwI3dMjFgsQpXaqLoS1NbW7f/wg++jXKE2P6nzCzPTiHQIrFK0KdCajFccMmQUdUZHaEM/jdTU1bolqaKioLOjTdMtTp5YlL5nz66//+7/+P/92Z8Zk+gMnn/hWRGjZKjyP3z4GAZ8AdOouWFHbJJRvpkY6RgHBjP8om4EVqqKNIUwVqQWYQpJ+jD2Txe3roelA53Q5NXLzH6LU9a2bCENIyLm4cEmg6Fx2JRIdwzbmEpDo+1TkNEXPPGF8GnZzUBaOjZJj25joUpRUn6RgSptOjpVB2ZJjBoRJJGVKqOnZ9gSqVJBGjUbKHfs3nXv/n1jRsajrN6+nsqy0i9+7rOXrnzMT7rX1nnrzt3kVJdyskYze3muN6dE6kAzIhkPspGHNpxG4SAGDX6VomgCkQU8PUpkybIzBnyBp2UY5GUtgPMLCr34kzZJlXwYDBvGEQalUw0ksvtTImF6x5dEGRXkl7VDhQbvkGNNOmIYOZxyKfQTbP5EhuwwkzwAf/qq0rFqjMslBdmQ+KpElHuHFn68e9EmyEIgMBAFlkMvuxRWkCOpsaZLR5WCYPM1goHU2kgHqX0AqepFvvziHW1o8EQYeZXriaSiBEKSiWBI9SdIyFEFuU/KQlWkX0aiAEBKaJYOj7xqPQWRBniJigOPMC8sjYRjSy4XqggQpHTkoUdZgBXtBSQW0OBPX8kHcvDQoscnyKVH8sAAkEV2YGgD6QWFXoqLHKa+5tInf0IIBrAswLxIicKBGTFB0Qsh7NslLXghzCioiLC2tgpaGKRrqGkKBvQY08oIkhI93qMe1VNfGarEiEcRGDftpfpgASQW2L93BHhAKgJVfqPS/fqqIA8AvyiPn/wJIXrk8iuXr5/84lEiGCVKpBccyRsITgg2yhYq4qMjDQJ6lEutwACr7N7VHZCMihJ1VTSYtBEwK1SKpUmSx52ewvpJ4C6xUGDVBWtK95WEleJhSBBShBTZmYESI1/ApPjqT7/wgyE6DMqIYEqXUV2OckYteOlIjaaCNkqJWtaywaPigEEGhHKpziodtOQpPbKAX0QCxiNFIN4Dp1yxRIbtgcGDmFg6RhQkb8yIDEgoHTvSgcEQhQnGV2AeAJDEFxYFrUID2MqaqHA7qNwaM+YWxfy8pY1FYmckAFBmZJVlr7rBkivUPImmRvCVixQ8QUSuQEvPMOJWBLfbcZtYXAl30WZQj4zi6Zm7aKINPvi6Ed+qTUUisW0+pjLVy7lAs/OLru153Ns/t7gkdlrwM/k7DlTAvTDO6zduNm3abBwyMW6edyJQkZY6NjExar9scaE98czZGZ0MkChC41kcVkTdMzjuQrSUpKy8/HCCfl//xPhoUV62AaXOxbSXs3TsbxQqF6pb4hp4uUTr8aptV6CFpcXMyfJSJGONZ2jqU4uBMNOjGLf+zPD0R75SjWutNNIaY60dO3/w4N7lSx850Pztt9+l98ePe+mFbRCISBPnl7hlyizk8kKYMUQAhPovxAPjhtGyvtInReiOfZJo44RuWodObvbLOkNAb0uJwDRpXAhHkgjX0bcwUQjDjHhqaMR4KfCwQCZB+2g2jaPe0bKvFmdUMTZsuYkZmynuC+G7IdR7Yjyc5a/79I/dKkVlASmkVnyOKCfwJuz5IYqwUE2wvEqzexw/mB3EhB09Eb9X6IqL1Xbv3fv222+bufYnrmn/rbfe4vY01AX3GGFMVFdrkCB48sQzp5jv5csfDg+NGjo6AR+PdiBo/YjRMGBOlJpeTF1YW6+prArBlkKVzDJhXqiPUezoSNgrowFiJbzJcAdyXsHyynJpQZGc4xOTlWX1R544oLnhhjoGACkEiiWKJHFOhqpCAWhlFjw2tYgIyBG5sqASxcwC52AMGcEjjsLMd4o6dwjPloyMs2fPukHJmTGQkIVpTtOStIgGGVmPQo0QVDyB/uxMTAEadu7c5eQp4m6Y3Wya4qfv/8hk6rWLH2gHtS8bS+EA1IV5Zyz0mzFKGGI4EEBYvDbB5mMzytwJs3gYQeqBA/v8+cQTR5QSWtKkJHxx5XHE1Hiu9MSx84lPqZZKZK/dvY9rG+p5Ztt37dSvu83E2aAHnjjExDsedtmza4dyrqP8CvI/vHLZr83KaPCoS1TLL3RoF1TYpBTuhVK80DEXg6xy87LdsmznDYt0iLP9BvcfhAglbh/jPn7smIFmRnKqQ6/MSkzPTg0NDdrqauecf9qXzJzs5YlJJ++SuZtK+cfdnQ+LSktMY7hu2oEC3FPawezPf/5zC5d/8Ad/gEcCp0HTyehkwdShv2TBqg0VC+YjwEuXrmi1bahDIxGp9iDZK2+nqirMGegBVe9gf4mHALs7O4BpU0LTmZSE5fKKsHvY7mQCLK8U0hBuyW5orKNTgxlKVBvV+X/yT/4JesicWCQSC/GKcvE1K7vYhL2GrbG6ERmaTyf606cDv/TAoyMj9Q0NgvtdZ2sJamhkHGsOWnZujwpPHZSVGAjNGJ88aGs78cxTCBN+oJq0t3Wy5KaWTB4TS6AabWWY6ti02aLNjY+vIrKmqjq4+Nc+4mO6Xtel6++//+uTJ8NIEtMaYnxpkmjZQ1z/4T/8B1xbZGDbamlswqiGcDQHhhDejSIUp/Ng80aeWiXANp+Y54CW2bMcupAoS3RJjZe8q3HaKfDRXSB5xxGE6c/EliCSd+Hx1i1bBO0opXlzvVOzXMsyNzOdU8A5CM53RmrGWkGauSg9Jflggbj8UkHsOymOIqTASR1+dXoK0lbCr7lUuj9RrggUepHCXLXXyIMNX8Si/yY3OMlQekTrF7zfiBlyPYc/FYc2SuccACYEOD+RMABfPTATAoRyeSCR0VemonRFS4kwqjDaNDWkJwsYNU4WJQKDyleQxCgLRnR1SNVIgokFYQExElGFGDChRU2oLGYhJQ+EUAHTfipLdsbm18hTBSFV7756IpuYMlUW2094mLffWIN8UiKOoIUTGZFa7wjwCY+ApSMJtpjdn/ToF4X4ZcNeEI9Uv5E1eKKUqI94WZeKzMCURa3aOuyjATEgicsvytFDViCVK7sUlERBUWJ8QGLQ4xMM2CQlYvQCEiouAiSULAQGXw72sREgCG5tRXSyP11MMTG+yloiqbJUu5xxI0yDkSe+4ImEySRRuV7Q5oUEGJ5DjqNAfI3SwzvbgxAMuSEASQiLJDklMFoFItFPF9K9QxtfMOtPOCPLUSmQ4BF+OP3CBsYLIfukRE+kSoqvPqFHincIFYQGv4QJEkcAYn1xtjdGgEmMGAAommoIllQh9I62iJPPL6OHcPIKwjoGyhWBEZSglkwmZ8IZqeDB+AQDGJT7UylYQ7xaE5GzrsiC0lGCQqgwiwwEw48MSDR0kAAAhjWfZMSUd1+BaZp0NPDrtrCjUImAYykQxkRIlC4d/ihVqDzSZYENWrTJ613RE5NjsTgy8UkuYFDhTq74Et/9iTzcRcolxhKjBORCCZgoKInRPJyUxlqWwwkTYeOmzYS6GGCyoxNC6apURO5PbWhSuE82lE6eqeHg/42l1dBDKVoPYo97ynKqNlRotCMagelfcMc+Eleih0bDt+TUNFtI3SwQogvTsqqqq5zA0jfQl5VbaFQhiJ/7vqImpOv808Wpmsc5kJ3jMCKhBij3nQ3Yz5aWk5dYiFiwtYZgyDkxEHCYZzDX6TBYWiosyl8PY0/3ckyPDQ+5N6lx02Y7iFUnq3DCgVxtrnknYfWRBBYG5zbWUorNAti1k7T+sCMcaWDl2blDvBezToHlxaX0TJE82fKixzlHdQ2NvOIL58+qdjSrKx8bnfov/+W/WDNHiTZZ+0NiHsbsCmcpnJOczBy2yknQEOlAadwigBeep3dZkK0t5VJTEzCxTDwEyFu3tGjX6Zo/wOwJn5s3OBDu8CmrDJawsr4iaNt1n/YsME6QLBOYeAFoRcz/3d/9HRWzCkfrRIIdFdO6dTNmLZigKlfEfGmJEd6rP3vNWIWmkMRN7X3cHS5kMP28OH+vr8+EJntmbIODw6dOnUKqOc2x0YkQa7C4bCTAmLlYaNbjdHf3/OG3vuXiVCmmSR2D8OSx444orK2sEK3a1ztgA6e2U2DrhQsf2AJ+5InD3ged2rdr77mzZzZtauJLaOedDmv10oQmktitcQB3V+1LG5+YyVpIHMtjE/RGmApSpVOT+31L1LHQGZSLBampwbz7+/giJO5X/0FGqIcU6q6uDgz4xM6k6zZIhFjpQCI7o3UWIzqqt9+u0BLIuT6m7Y1s8nhtxcVmuzc3N8nbducO/FoQAwCiRxJipqYmIXEQFYOQN9Z2tEHFi1UoI9ChG0WogXRsPf7uresnnjrGBMUYSMzPSn38qLNxUx0vkRQYivUEtcMgggqtJ0ArYt6vIQd/2sjMIoAwDyWiHAYTz9TP5SJTAMxRLgSwEgMGM9/ef/7zn/llsnw1ZqRHpGw9Fgq5dzBIpGBDBctDILmDYLQyXAGlA27PfWBxh/EhQxaiMF7EKTmodcyCIvxpKEIg2m50SoFQXuVCztPBIJHu2bdbtVntdefL7JZmh8AUsBWL5uhRFgUZdyld6B6DliXQ6SS1xB0oifq/iC+1EYPwY8GjERdyk9DFwvbtO1UbOG1tvXHjHaEdXBmYDa6s99EdU0MAFkZHhx0g4Hg/ysrJz62pqkpLK1lbqmMD6CRVHKGfu2YqXd12zrct70YvyCMKwhQrT8VsjLHFdhYq0oBcoSyEidod5cRAsSv0Zahj243GUsUTKMxdnp8JC5HIw4620qyM+EKjXEWQLWzOI/P0VVdTrkU/I+ZDBw8KslUujdy+cbNlW6tZVur4/Oc+RxcqqUIRT6c0yE4cBDc8PAQ/a3nrrTdHR8dcPXHixCmFIpKExTgybKWAJxyNFMaZn1+iAKOawKnGqvxm8dWd9LR0BBgcMjDHiameoaVOTIBZCtC5yYt+GlTp2Aze9Xy6DZZPOCTDVGgNkU5WAeZUgQFHqpUW68Zo51YirOvgoSdmpsbSUpwJVrzh3sqUVPJbWtmwUJixmAEh4jEYRJeIRcYgfXlUWG0ZGqR70lJDMBLi0eyTcrUAsgPwhB4xLY3hqWVYiHXBu0S/JCmjXEzCr4eQlYgX75HHCAlY0eBD35bopxWNU8Vh0C+SwMeC2KpKAYm8aJDXAyDihyfWGmDKdTU4YNyBjDDwBFISSwowYMGjLI86AhUClC67LN5px5+4g5mWofKnLBEm/mKKlAhfJ4RlWkOqcj2QQOXBGuR+kaEgmOXyFSov0j3KQpg/QXpBnkRIlKJ0mLHmEzDF+fVgh1SjzQOAjcEQmhJllCtyyjIlhnqUGJMwWunYQQnkPnnkBQ8hmwSGNpRoPeAJXkvi7lVFoMoDf8wVtYkq8FJkAY87GV2q5whzWy2xHLH5Cr9SvGidpCMetojfMBUxEv1ShxKRBwxaANCC9ElZkKCWcFaSgnghl+hFoSQvL2B4KAuYLIqTKLu1ZbSpm5F9AsGRRxMnBbyCwIME753ApcMMmz9JRtG+MnWFSpHuBal+ZffJI1G5MkIFxhMlA0wiYtAAlSJgi6KTXaI2BABiJAIjKC8gmZ+2TooQINTKRSzY905TGhx9uVLgV6JcEik3ig6GiJlkpEcDlohIVKFTRqV7oqykR5F6UaJfJEGl4gNQGRmbouVVv7zIzrq8kIkGHw20AFguosCjF2IEBm0kUuleorjg964gbHrxCWZ6h9C7c3JwBCZqPxLjE+6ibJEUISNmnEZgvziKpXj3RJNAQ6QQJMLYheBJLWeW6dEQZ28bcAi386J0w3ETvRv6HCcQhFMU1pI3nP6T5L/0lHSzI4LZ6ML8vebRAZerSyaGAteUIB1hDsIOg4Vkk/NBjM5ZC1SlJIfrMGZdiBGsWuAQGAAsmwr7Hj5amFuw4m9pYn1l2dmajmyhd66hjSACftY3woV6QIvKyhedP2phN99AItSClaVV+4HnFkJgXkFutmOyNKg5uYLxVl0IIFJ/cnS4pLSysrzCRcXWn5mKWT5xtufPn9MmYI2bax6ZT0XReGGQJgfdT8rSHFiC0IQrbIp5zf5p8wj0q1tkFOqUA+oe9/WUl5UyAzOJPJHBgWEeMIP54he/xCOan58zhy30l8EIwtUt5mWH6RUC510wG62BP5WiCWVOzJVPZQDArdI5EqlWHICYHFXN9vvnTp46/8GHYIT50rVy+bEWbNRr0ra0IPaVmak+DEbYQrCH1KSExxtm3PkhJMASOHLoN1LiBDY01EnvfNgjCt3hMi4C078DYJZ5OdnbtrY0NW4qLsl3m/K4ZmRlHV/ymgFUhB4fNvwKTyI6NU5itHPagQeb5FxdXXPz5o3H3Y906E2bGrg0nCKO6G/95u988OHF733vB2qWLRnvvffe+OiEEPcjh48+7u1xjPHHV68UF+SrLJwKdUrFV9GIy6hV9WHkaYVFpcrD1czsguhg1cO1BQZtldUhSEBOcrG+4zwrVOYW5FrsOLBvt3S+r8ldCz3Q4fbmzevmd4NZ5+SMjA5xociOCJSnnzv+1JOmH8wlt3V0gGfxIJm7dSg8C1kxo8l9sQLAuTx//jzeKBsqQvdEVxL1aCAy4iMdpMLvFEszStZ31L4PL37w/rkL+/fvXjR0nZz4P7/zHbt4Ra5hoePBA7dsHz18YHxmqtCGlfsP7Do/ePCQJVCoTFrzYmMzgTZ8kY4AMg2rFSJ33fEOOaYiQ5iOSV+0aV7Fl5Mb2rQ+ZGhqLUhvbcMWHNaML5TDrCURcmNsB8nLr7ysbSYuM+WO85dIxxommjOoiO0In9tkdmiBEm0Q82UTGLcCQHSHDx8iFlO5FBEuyPjggjsWECALK+TO8tRtvGcP77z9Znvn/aeeeWojJaz5qAyKC+eIToVBvHczvE7cwgI6qQML/GlBU3xljKtO4tLIgVuvbouN8YIpwlfr4rwgIYilwbhT/02VucxC/FVYbkxJX1lfcq3vg7Z7tkQLlTt8xGV+QrcHTFGg1uPQMYN3eYXL45TYVcVNm5tZqkKDVEO/v8z6/dpEQdfcaMixb7FU5VfK00+dILc7t++p/9+78IPf/O3f6QgLJhroJSeXtTZvNkv1sLO9qSnsELBGCu0HFy/ambA2v9jT3SUyzZB667ZWHNlK4T+V06ZhU/6bijfZ26BOEr7+mpqYqGmGT316i50Vri4kE4TR6RMHDmpuHKAGeVlpiURtHxMy/PjG17/23q/PR3GB1zwZMBvDEOOrr76q9cEdu8Iy3qkPj/jyTiDcd6bO0pwuqiqpjL5qp6gJHsdG8RqYLjNQE5mHQsnQkgK02j4tBUuATSL7Z0VebMJ+NNCncgmLVEFqq6uuf3y1tubFBMyyiQo079i2zZF2MwvL9jNYU05aD+bnQb/iNCLY0dXpMFgUPaKNRuBHWKAtI5wWAgALaGYnrEteGSUmakQI2PUolMHb8KOJIDS1z59qkJdIMGww+IUcyz7BoLL4Cl7RkMiiIJ+kkI8Uf4KPiYpAHnp8JQpf/enxp0/IhsRXxk9oDN47GL9KUa7ilCUFvBc4pWBEiiyyEwXCIrAq4xMGI3IkRVJh88iOF7+yaBwgj9pHs1xmgGgWSdIh1Lp6IV7wthv6VSMgjADIkAuP0CoCWhwpFwBnhaZ8jUKQgkEwEDJOxox+737BaE4VrRTaAY8p8NLBgwQWi5NOdKxLQViORURRIAAMfsFrCvwZzQAS8KiiWYxIRBWEHjAKxQ42gcmOGNiYE1I9YTOlmcPEaI2rFUoHHRrS7MK8PNu6UemrXL6iJ6zx0T7T0FOnpXKLbMRcXw6rPWKC8gpCTA6LcSCjXL7mZAcW8OgvUnSBgDk/uw7cO8CW6lzklAjscR0B/83EXmQ/FJHwksGEfvAfo+exFokBpiCC4iv4xWa0TKzJGBkEgEFFR0ERO/YxJ4WKmT0w2EgGfo2Aui8lwUhwccD404MY5XpRBORRO+wHfoogVY9+ylef5CIrBclF8lJk4U7x2rwoWnqkFnwkTKLiPDKiCklgIJcresMyUqt3AKQhF7RyoRxV0qWwt2gbFAcDqXoB4CviUaKhlVe6Bx4pgbeEJSiUPeMFF2ECJ1Ft0RCJUbRHFjUoyh9h4KMwNa2KgAdJUojFn2hDA6ogkQ5hND8vSqEIhiSLr9CChB+/vkaaZVG07CAtF4si47hHOWu2NlZXcrMdl5Fh3h0MzFAI+GGkIf7fpLi9nxydDf6/fo5bHzbvG0cgz6lWPinaCjHb4P9U19bbCYMEnqubKsyO06BRphMZpLFSs6K2vgyNjnCyJ6xo2TNgnqWouLqmOt9yq2l75/y7eig52YmlYuScPZiZm6clXbXVwELaqqFDqr3L1u1Jb2o8XNluyqyz61FFud1BDjgKw9HZhVnGqtYmryf3Do6oOIbvDqFMTkmiOJOIXPmpibHC/KKZySlhCC5XjS7Ej77/AzN9lWXlpKdJ5PvpyDi75sb1RwMDg/WNziip1/i4d95O4qgsJVKE6cijR47ThV7VQItJmFw2e6txaGu7Tw46NX1ltCIal0u/7wVJNCNdxZFdBydsxsiBw0n2vY97trfuIN7B4SHZu9q7qp+ppWJh8BNJE4tLtlwOaYqsV1E3CeUVFiEegyzTbKMIQ0X84Ac/OXXqaVNyieJ6YMOd6H/F0aOwgozsnKGRUc6hQ59cRaLJctMRCw91Z25mfGzI7iNjG5FeN27fMkYyo/eZz7zyzjvvkJse3MmHvAv8KpqvgmW2pPRDR4+y4bNn3kN5TkYYqGD22WdP0ppxm30CQyNhv9nrr78heqJ1246crFz7SRYWOlyM8uSTTxusjA4NCs0JVygmpTorUhtQVl5pjtWBsOZt02y7zct3RFEIkchISnNZMd+xpra6v/cxGWGAl0k3g0PBzzCJYxKX0OlSldAdWJjgw1GVvaQy0rear775GnlQT6KqUKlRIw4dLcw8A56QekFnJGiG1Y54hz9euXJV3E6stIsT80KMYHv//fdlVyc9JK5lhF+1FJemSnlRJ+kDV7/xG19zMNwHF97npa2tLPT3DFpEBlCcm71RU56ctDYyNGgBTs+UtBH6Wp07KZAp4gVOVNZUcvWQ9PWvf3VwKJxLwAGAmXlRANccUydPnvzhD39IPTw2RqlHRz/hoFO6rczaI+0IUcAPTHNJXJoVxL/7zjtkpThS4mdjUwfA3A0AALBXeTUKaiZr4CgozjYRJJGYeomAEyeeNqE7MTXJc4JQE3li70nziEaE5EkOjFhTCpuCqmoqYdixe4eWrfuRve3DiZ3HC/xOBoQRGCwg8OwdZ6s9RQ8LU83wAnNB4sQD1ezdEDq/Cc34UroREabo0Xy2sw4Eaor/qampdXWaJkM6sVgdwztrhpwju23bVps9GGh+fnGhcKxEQEVmaoo6z+mMTbkZ92PHn8Lp7IyTlZNHxiarq6tE0YnMY4fogTb2CsgDphZp7uMDA4nBoIGzeiCo0Qw39blIvLe3R70iZ7bqKFgbA+jU6vWxY8edzerAMhKjQWQP9g9gkApohFWzw/fOvMPwjFWCnE+csL509uxZtqppkIVAkMRsMOt8HpfgoYE96J0RbIqI8ElAXD6EagEjUduxwIBp30QFCmEmTNWBxZItdciCWjpFjBcNKAtEnkG16SVcMwOacncBSFtSmKvhHzlQHDAuCGNGBsyJOjKOIy8ABCbKe+TYUQLU8OlkqyrKTb0aWW3e1OyyJJ2zg5KEpM4tmSkMQdWLcyHeACXeFQctamlWCt5jOgGih8lJMesEAMEaL+nMjGMBg6/SASgasHcVOb6wdi/Bwv/xAabuBEtIXKALwIMFCFV8RuvdLwyQI8x7JEbzgkjvKIQhyhYehSoRGfFXOVRDbuiXV7osUHmHzZ9KkQIM2WAiv0qHB0ky0q8/IzaFAkOMjEpHKvn7ExIAEKIkCDwxiesrtFI0KSwBI7L4k+J8Aq84AOAjWj1lpEQKRgDHUpQeZYIe5PnkV0Z/KkheKSC9+NMnDwz6LaKW7lEiq4sS8BUlTBQGn1gdkhQhu4qgUOJSHO3TLPaRFCkHH/nyJ8yxOC9RI2ggiihSBeFOQcQiC9UoCLw/lQW/XPCzUikyKl06mtURid5hQIMHgHcAtOBIO3UfQjD+jLRBKyMJKzqWCyFS5TW+QAOAKEloZfGLTS0VqmRBBtUohbjUa8BkxZKVgk2a1Uiq6ZQOJ8wol0uJGPSQnryoisKE3Av8soPxjnK8I8YnPRGciJQLYRJh8ycM8IP0DtiDzkieT5EdzQjz0NGgMyKXDkPEg2wKTUkOwUJQ4UhwQjRyHbGbFmVBLfyRBYShQS6PFDwiT8b46MLwGGmTSxHeI2tKx4IUD9qoHpsKggEeBikFMHX4EzYvlIVObZH2kARkhNyjaGT45JcA5S3ID3UQ+0wOWgCA4ZGiLATQIwZxoQgYOCp+YZDiAeZdRlYkIyQSZWQqwJQiBQw8cPrkTw+cushIlbxRSoA9eEH8wvwMThRjWt7t6Xm5IdbItmBDKr67KVQTGusr6wI/0lL4OE5bCEH8GS6zzitwmSk8aNbALs3PJW2sOyo0JXUDHG/edbHTCYnBn7IqMNtSdRjhO/iW3ASwJYjJNKQgc6zNLoUoQcd0EonVZsc5OAZ9fSLUtViLLamJiU2bNTGTp/0fHyIH53BmGWTYjZCTJ4TIgUVmbfgOhhzJjv4TxWhDgp4X9fbguXzWTq300izDDNN7SDKV6DbZ9gdLGv7pmQnzS0Y61eVlWdnZOk3TiHo65srAiPrOvbv6UBHmTOLGrVvZwuEzc1ggh4ZRMR4X5EaVkYm4ZUPsaDDqY+xu9JU+sSwOHtXEOkiG8DMenZdf82gm42WhNZZAp+am0bC9dVtiSiecsMIB+O/v/Pc9u/dVV1Q67oXKKF3RThunee10bV3N2uqKuHQEsDTOCe0L3sFRQ0ONEq1FwCO+mqkopbv70fLSnCNMM7NzNLp63vWkNK4LyWta2f/C7NzlDy+6iWxhfrq0pPjlV15x5wguFMrZCyEGhw7Fgz2mcqbUUEfSR7Wq+Aho2txsBZJaKVrg0GBvX9fDtqL8AgcWYVC33tyyPRyqOT3vl4P6/vsXtm5pNek8MTa+qcGpMO106VhStUwMiEPqqVVGAzn2T7+ONkmrqi1liC6fCwF762vj4SbpcK2BHwynJOvPUpcWNFspZsZEim9tqKUVmuOeihqPjSwxaSJjLaLa9Y3VcNxncjIXp6KkTLNlXodM/dmQOJmRc4BcDJCmHsJ9q4TisEW1Dq3wGzISH7+KUHhCwoRcca3N5VJqiOUiJrUi2oeDYtxdtb66xg40iPnC3JcWhvr7Ll04d/zoMfccTYyNkqCdd+aADX6VzqUuL6tEvI4vIzNXS2QvAduiQlS9+ebr9fW1hUUFZuaeffZ5fQcLwJ0GV97YxnHXiJIc2Rk8KEEV3jVbbFrLxWSpkK+PfVRx4xgcy9BeY80gCjAR8aH9osdwgvliimvGvACQ2Plz7yuOMYmo09ifPn3aVJR5xnsP7rpJADa9pD+d3oNyA1njXTLsfdSNC1fU79y5Q2Jq6m69OZzoTG8QqzrL1rUXhw8f0dLGk3/OXzhHenQ6M7XAYfVurrp163Y2iqRQM8fHmSya2T1/mgHAZjrkceJuV/5YEGliEpSowS8uheU5UWsJD0DXEsxqaHhAH1fnTtCwJpttREsmQtliZwmDKq2ZCOdNJfwYjCsOLySp9vKPdWno8SfhkBtm5TJCgEG5VgMasSBwdtnBr3Wz027hDsvBnR0drVu3OhS181H3gYNP0CYvSUMwNj6u+slYU1MNYWI5r4ElmzwgCvzZPxvmrLJyDJ3VK13D2bPn7PJRBIsVHIkeLOK0upJt9NjjfOjQgX/4u+82Pbnp9B8+Z0cyp7yiukaFx5cHF9Z/VHtI+fqaLexg0zqpIVzshIwrjOW0oYSgZsnrBVWsiBC1d7Kg8O6dO5/+9KctORldUAf6LUQcO3YMGEEBY88yQu5RdyilqKT4c5/7gpehPodTVSW7UyklxU4DrrgmXMvM9efxinp0Iszy1KwhgBnG9Y1wJizjJ3AIyTPSTFmMCnlRHYqTzsmHE6eaMJ+YOk5JiZDpWiXCka+s2ldZ5PUnUTM5FUc6eGghV7k0QR5gcEIe/SEwICXC5qtfqFCIPDDIUxC0PuFUom4AgEeKvCjRyMjuT8BQkapEn+BXqE/eo5cjO2IipIIIGXJgClIEzBoiL+Dlwho6YVDlvUAuowcSuTxgGDMZopZ+IzsIM6gjBHgARGwkBif8FYnjGr3ILlER5JOQ87IXwJArAqcAIEEkynEEFUoUh0G51F/wftFG2lG8dIoS9PgEGDbZvUgBxmykqNQoVNG8xxEsbHBGYJRApUSYNeloUDRisB8ljwwCBAxGooKIBZ1o9qdPMMjlBTwtmFQTRhxEZzfeXIifcVKVE3UFWjjXQRtrisqcDmBIrFQvTazIjkLlKkJGqIBJJF6l+KQIfMmCcq2rH5DAwCBMoSghYWVp3tXl4CsnDt0nPQbMMlVJMiF/dQ08lmGG04t0lCgCp0oE7B1C6vMQBXkC0HIqC9pYnHcZiREG9AAjZxkjcmCywA8nAIQhGCOkZ+wLXrp+EM0sWVkxI5L0IPhCPzxeKHpuNkyEe/zJtqQrGiodE/LkVVZ+VrjVHjbcxbIiwiCtf6zjlAsJ4Gj8ROFPco70Q0tQMKgOJIC1KGTwUsgZAJoV7Rcv/sSyT2hAmJRoq4QvRS6YP0GCSA/eCQRhHqqUSxaQPsnlBWY49U0AFIQAn0gYcr/ecY2SYFGJIWhEggufIm0xl19gSpeO2ZgLMDyBpIUQUWbSytKTYQoWsjMLxfGHPn9u1iIASmzfVUZYrM7NWl9bsgVAN2RswEtTEG9fU8STLjBsKLSEsCikB/48G/qc3WPWRtr0lK6clIzCjWvgXFkOB+8uLyxurITuGA2sh1tl/WHeKREObWcZ0zNFBfllRcWO+8zIzrLFk8Mm8md+aID0hKcXFBb3DU6I8bAN2P3DMxnBiTIYyC8K880W2oQPgbcTwNF52CfD8uqa8VGnwC+Nt3ekbaw11tfVVVVurq9FAI3Pzkxjpb/vMQfXYRLqo9NyiJcMjXh1drotJv+DH/zoxU992jDA7jtTkD29j9mPqi/mxQvteHiMH310HT1EZKLdRVD0a9Iwoc2whkkIpsB6Hj1icqYUmTrdUT0jR4l3umD5agRIHStHiyfT/qCjtWWrk1JFoPCCOLYA6DRjJfTI4aIul6uohkthZQzlnP7hgXC+kIaRwD2cFnKwwgkt/PyNhw/DCEFGlWJ+bqqmrtrXi5euiuM3pkKG84mPHD0+HrajjgRPyYnkjbVGejdv3Nixe3dv/6CGlGNgQhYhtElQfC02jx0NhRT6YoRY0yxc/fgafnXo9dU1zuc7997ZkuJCXYatomqxa6ZCdHR1pR2bZAKMF2QrZEd1ZV5uZq9I8pbmkeHxhWRTA5mVVdXEPjQ44hoHYSlKSSstCmcbT0xa1g/hejZK43ZqchqoNSPBPGhwU11KRo5z4MytNVZX4v5xX9/JZ5/lfXJ/TQ//5jd/wzleFNO8ZQtLwg8kQZfryVZGKmvCYSyX3jtntnhiatphI8ZkIu9NexvR4nP3zp1E76hQTtXb777zr/7VvyJHW10l2mltQUct+PDD+9x3XmlScmi4BXiUFJepG5WVWyiGf6NPYAS1VZXtbffv3Pz42VMn3ZTR3nGfa0M9brazfVYMnAWOC5cuibJW2wzgzAuZ++RcGRaPjA5wDTlwBLp16xZGfOnDy3/1V3/NYhzQrgvUtPGzlR47bDWEAji48LMY7pewfu4UD4z1nzhxgiiokxF8dPUq+QgZskLEWBkZi9epGBU4qde563oaeAx1qEQ9YRYQ/rt/9+9oVMXYtmPng/Y2DqjqwlFz0pMKrOb0DQyR2I0bt0ycOcvfklBFmWDQpOISsfI7jefGxsbTMtJsyrHKd+PGTZcFZuXmrSyu2I/zyisv9/R0q2Na1ddff/3+g7vHjx93s9vY8MjJkzu3tmyjTXdu+8fiRcy71cTSlXMAjhw/duHcBWvJ3G4O7oP2LrNsWEY5kqz9UM2OHduG7gy4x8QmAYdlqdIWDZ5//kVutGPFhLKpVIYTiuZ/s1f3vz0eGHz5819QAfI21lmdypCRkvQ3f/0fP/XpF91dSO9W4vB+7PgR6rDJndLZukpIwrEJIFXXmGtKd+5offftd/Jy0rc0NWtkHWRpj1ShcwRy5+3RPnnieVeu5C2HJd2W5i3u5a6oKNe+UBlNaZiNeZweYLhs2THU8IVZfYQ9DFyivXt3m33iXh87dkTpc7PTmqqRwSHLlBTae7GPDRiq1dQ3OKbt0pWrIYQgJQy4CUeUmnqh7jki1vnESuf0J5YXSrj+hvXwMCeVMdoS1cOm/huKEIv2iEYc4Xy/7YEbHowQnn7mGT0hYogxQdIxHpuO3Lt2SvbQECRusqMXStQmWjj68Pz79+/YBVB8+YPzO7e1WrkmPeyzdi/zS+M8tRLnIc4tTU3OOhY6xRY2s01O/U9JFYGKDMapYlozNFPntnnrvzoq9R0GTIlLKi0N21tVCj6KcSzBqv7MXsWJnQrdgQSjwlq4lNeDZjAoAYNfNHuXxQMzGjTQcrFYkP70lVSZFnjNdISR4tE5aYWJS17AjAQ8SLJVhWHwYAQYyhFD4Gp0bPF9ivT4lSVmVK5SYPYneAh9hZ94sRAFokQ0YMqf4H0FiTAZleuJxKvpCtIr+Ao/+aCB5CEHA5tEnHpHHmzkADM80EIF2DtUkPjqRaEewJhFlRQYeCowEBF2pPsTgC6HgUGiOLVGeuwsfYWTpYVKl5GBQils0p/oiZhl8Qn7iKEdT0SOHtRGMEgQoCLAHMnwlWy5KWYXbbnR2ptxVBF4QkLv/AZ5Ovt/I8nWJDf7mqrU8psH5SP5DaenJydl2+dYnD4yOKqrE1ghzNCv47j8CjvkEilL9bGtf3Zq2ib+3KxsvGjHiIW7zxlycRiL21jd8CeSEEn4iCRD7BAXWaHEb1QKGDj9kp6jk4nCn+psWnpSQWFWRWUQVFZO2CLi0+jYhJAQkR7gkUpfrIKslE4yfhUUha84RShOoVKiLcEcK6n2nxjVLLXmEyKRKsXDjOFhVGwvWjhVqlaxlGh1kMvoV6IUpcgIJyTSkUQFtONd42CxHf3ekeGB03EuIJ1BB8YhITK6Rgq1pCcWvDAvn4SlgBQAAwY8q5A3qluJPikRR/JiSl0jAVbhHWaS8e4xVGOEDEPp3ikraoEEUC6XX5KHDXKf0Ak5e/PgAn7pWhUAgYxE7CgkckmBXyLxfqKF+B6rGBimiyoESI+q8acs3hGPTkL2QAUA+x5FeCdYqklLSnMNnRPqzCaiRPitEpNn5zn94tDgN48ec9lIBYltZsxcpJmRKfhQqFPSl8MxYnjESigxhO2EMVulfSzW1mbnnN0T66lVMLN18KSnltqONTI4gjYbdtHMuHKLsmrzCofHRmEsyNNjphpqOGVEEfDyFsSHMEHIzf3z7K3xMtKkQGcI2zPGINuSktKCdIu0ISDCCSIiP4nIoYqotq/YzLEIFtddLc5PG4gQkavHJsZHPn36hc3NLW3t98ory/oGemfn+gdHRullbIxCK7ki3LwdO3YNDA2GIsrKeVbY14cSjjHD5kbxIIN7d+8pLcz91S9//vnPf/H27dCRra1uOLTHWPvgwScs9IpX5oydO3dOv6avFPvenjiqWwWkX3ohNPLn/nH3edVW4/1qVHWaGjF9dG5Ofo3NMA7ou3VL19zUvOX7P/rhqbzcqqpqpkUxDMOL82yEk6jOQxlDdKTSWggZGR/hND681IkF6xLmqZZC7MiEs3oUoRLlF+T09nSIRVmcnS/JLyzZWTo8Onnx0uX1pNSixAjWadjzCwafSaWVVUKrHnV3OU3JEhAGb950iU1NjBHrefjoF6+9hqm9e/arF/wE8/1PO55xikNlIiP3Z87k3PCS9Y2vfW3PvgNvvv7Lxk1b6hqaaurWP7r2sfnregcsNjWJbhBYnhgmdT/3wguv//LnnY8e9fX1NzdtJlsX1TXnF9Y3ZIjN7nr0MDc/rMOkmWWhEj29OSxTDbnZWU4C5QalaxwyUrZs2hqUOmiyIb0wr3TX7m2HD+4YGx3aunO7hpvFO1zWMUPaiZGhUc7ozNSsbe868uq6WtJ88sRJZ0xxRAz49x48evnyh08fOiqmyIGpFNbZ1X76hRdVgD4HUyQG6GLCnGM/ODJk4XJuYa64rEQXoO82jS2Qw8Tkpkau9ujFi5esWljtevONN048+4IZqP7eHidL7t7ZakCWn5u1d8/Ow0/s5w9ttK+EOfvVFREhadkZoj57HJ5dkD86PlJSUV5SVuwW6+n5qdLKInF3ZZUhyITdaE14MvYAGDM1NFQ98/RJ8UIWUz5su7xzx+6x0a7Ghs12q2xr3WE4e/vWXZ2W1u2pJ59p3r//+tVr/hmx4YsDZ27TDNuVa1fdCP3qT3+q2fpf/+RPDBIEjitofGSU5I2aOG2rS4vGKttathq7h0Zqdf03f/t3SXIsLMnMML6rt25duviBGbLTzz/30mde6e7tZgG6gevXbhiWTE/O3J97kHewcM/uA7BtJJkN2jY3P7Op0cpMxpl3zl65fHnXrj2mDZo3O8CnoTA/zHhlpqea9uaOGIDeuH4Lzd/61rfOnDmrXmnLXO6rwlfVaAjCniPzB2YCNlXXWLVxe1rQWkbmlasfDQwMPfHEwb3797nqZGlhdmx0ZCPJYcNrS8uMa/Lx0oLrCctLygtyi4b7ruZmpRTk520+sK+oIPfjW3ePHT/ONX7qqaecxbu0oeHS/cyIPVqYne66d/vksYNNDbUWqoYHe8+eeev0i58mNHMnSeurwi4diGuujQc3OjTau9jLUAuKCxxwxT6/9pUv1NbUWF1JSi50XbngRx1pZnb+7/3e79sK4WLxGtEjWVaKlp5+8knjCgeFt3c8qG2o0fxx/W3rsePo/IfnnMCjro5lpOYV5Cyt2Lw189KnT1+7dn3f3r3GvfZF2ESxpXWbA9oe9w1o5cXRTUzOtG7fpXlieIurSZVVdWMT0y++eKTt/v2e3j7TiyNjplSGrn708edeeQXxiauym0xqbqyvumJYK0nj7535dcpzaQf2H4JHNz/V04veqx/foBcpL3/2c/wAPYRexN15XiwmuBsu9KDhAprs00ePaNRsFNGU2NeVGD1mi4Dk8Akievioc++2rZPDw6Vh/0/SUt6KAYFwYF1XbU1938AIr0vDNGmK0Y2Gi3PuCFtaTG1ve+DoYE2h9RnH9vJ7tSDJGyniiJgKqvRzodCCgqrqCiO05uYml7wYtKuqhtPaTZ4lA9PxaNTsWNPyetGPYRmGOM5hk6yRlvX0htyaJjxCrguMa4ziX61UrCyHDbu+LiyGcwLAO48CwtC7riSbJA5XfyTObXS34dRk2ASpausqKsot6lRYuhL5TeB2brBR65z+hNC71XFzxGHBPhyVZpgRDtjRJdicZylWicHDy81XIzwP2jpGR4agjb6yvhkkO6QmJJEVl0V2nQZitCpSeMNaueraGkvho48f69gkWlVXJgVFF0G3DUNNVa0itC0IQ7yOwVcF+URoSpHoFzt+UeWrFC/cFCbBQkJlSTw+EY7pBr+0oER4CJZU/SLSLySyAEeqFE0KMA2RJghOJaJfS45Ho30sUyUFUY132RXtEz0aasIAP0tAgL0j1p1Nc7huUji0U9GGRkbCwejJpG51PSXESsum/SU7MSQ8RYd7usQ000Vf7uVNNrjRv5r9zi8pys7IUjvyXbHEA5sKaz7uek9a26DGrPTMtI0U96+upaYP9vXDPjQwzB8yzNi2tVUkRm5hvloWLg9LSXWSuj2aHJGNzCxki75gb4RDCF600lWVVVhLS0krKXZMu/gcI6jVvPzMLVvr0tLX5+YHhdSKNdvcLL5iwj0F/QPdBfnFi9lhNAIDPPTu3Qv8UGGRUsiK/bNkXz16KJZpMB/VpPoYJFCfeQfSI3ZNv0TyDO5eYhW0uCS4PhTk+qmSrOKxiXCIgpSkFPfPrloZViiTWF1fGZ8cUxy5CvefX5xPSqHfYKgA2toeQMsnCIPFxMLFtB5ncWlmapJYXFBFMuLRR4eHNSaFObk8P9oRHzg24hy1Ye4pAyZLro999yyExDQ1qEIqftkYw8YvFrDpRaEJjtOYCkYYRig9sWscATCwH34MNtkkdpgWPBJNZklhh64PYp9aMLl8Ul/kolzvtm+RqprMRxQaaLDOgbNNjWQg94lnQrlqEPKsyhn0qN5i4wiBuaIHPE3JqAPyyWiJxMlKTItP6Odp2sssXbCNBorbYGqporKyp6fbaFTjYibRXI/7bvXU8M2vLNtIlrpg2iTTNE16hkN3kl2xkpYRVnLs2R0dHrWiwQtCEtpsVdXD6vRnR8eM40OIRmIIxFANix3hFwQ4q4PJ8s/EH5lUak9S0qtKK2fGp0cYko1YqeFYpMXszOpwhsQYEYnxCSdrJXbVi/Il3uQ1Tn8YA89Mj6twRGQpxbHG+UX5mfZPr684Qh5Jy0aAySk5uXkG2EaAWlS3lcHvJg0u4s3rH71/8UNBiOZ/tzRvziupYLcZBaWozchaXdQoL63OLa6YVcnOz795+47qqam0J+G5Z58tT5wnlpaU3NQQttU2bd7e2trLEAYGHhcVE3m+9QSTdSOjfXh0hdrocL/YKp7SwX37ST7Yz/r6mJnywUE2xh4YAP1aEmdUpq6Y8QfnL/BqfDW32z82+g+vvtpQX//088/3J46j2NLSKqhJw1BaVt7fNzQxNpFlk2tqxuT4ZFdn9937HaYe8vOy9u3brXTHLYoG52ZcvXJtbXnDDrfcnIIdu/Y588ZcQ3Z68urchKWPqYHBwvS0qbnFL7/8UlVJ2ZVrH6/MLxotZ2RmJ6VnavHG58MpI08c3Fda5Yge+wpCC3n75nVC2LypQe9jg8bsdKgnpL19u9N06p1C4DQOAUV377fl2eJb5BbRm9/93g+ff/75z3756/ylM+fCxbuW+AxO2u8/GB0Kd7m2bNmUnLQqUEtb3bp9p+3asSqZLhTrcfXm7YbGeiGMz7/0qdde+6n6EkbqjIZBsAZBGYSuJpCy6BtzeOK1R0b1RpklRaXbtu3g51l6Yk9quHGGmGlDuu/8y39hLt/hlSSitmg49BxhGsOO8tWVS1evmqoP3UBaWkvr9lt37hnGCepyyqSgF22faokyjw6GT+moWRRrELVihhAMwjGr6gxI4X3aCO2JIZTmQ9fLvSACGz4y09Md7u5YSQZdponMThe9Y0pYRISrOmw3KXRM+NJKWVXVwPiY8K9tO0O5XDQ8ii3Tvohxb9m6ZUVdSyxQ+komJs6/8PmvKJ2UtuzcSTjGmgjziToZnKpOAqqx+klu//n/+//yc/N2bNve3tnhIrM/+IM/4FdpLIznnksc40pPgrYb6+o1zTaFsFeeCmxIVS4JaEndP8W5rKyoxrLbalSt9KEhPn3nw4c1jfV7d55GgD1AxtmFhYmZmNQMU/sOhDLerSivMYuhs2A09tpvawkn/zzq6hRk9eSx4/sOHDQOdvS7gb5GTQ0R7KQTwoUxyZe//GW9vsWZn//8F9/+9rdVTjJB9rXrH7tS2DrMhQsXjVlNAJhL0DzZXbS0sto/OGw3AjCxgAODfdbMNa2C5ucXhMiXeee+mi12mlFaSrqJhAd3r+/Y1rK+Gs6/5+sPDIfpcwiLSgo11u+8d8YK43MnnukaHb5z4/rzp1+0LmfF/t1339m7d49pNkOalJRabrrYMWQbp5G80wa045oADkVaZkpJcT5nVBVl2FYYtAJ6DtdCiysTWfDoUbd+xWxoODF2bJhZ0qm1FxyVFhepNsYKdXVH3z3zNskIwNDhjU+MGO7rjCmZYRj90z51kwnbYLpmHYyEra5oyguKS0AODI9oHHfu2lPfqE9acqrx5uYta6vr/+7f/yWDuX3zBq71TM4nRXbr1i2cM6GRZkpE7HU96oFfh8oqFAdMV6cgpWCWx8DH5A9RN2s5dGAfO1QfYQDAkomRNhm2/pgS2Y9EhdK43WEGnE31jRcvXFD5tZKG0V/4wufev3DeIM2qjiMoWKZlOiXW1VSbYBXZqcsQyGoONTX04zozrlKhKS39hD8dTOvkUPVdJ8GimLEW2XKNaE4AiFd3NAjS2bl6rYaG2QjRyYk4Y7RRAWH6ilS80A74RMWEIEQI+OoFAFRKpFY8xvSYF7VEIdHX6FhAxe32SwjUQWihO0lMixIpbIrw1SdkQBL9Etl14gqCisA9ipYXvOwIi59gkMsDnmF4iYVGNkGG2p2YVmeiyPDVjACxGKfxqAhBitLBe5cdZgKBzZ/AlBIffJkFRwA80IJHCWByAODFJy/+lPETCXPQ/Yl4fCkImCLQgykvUHmgioViELCH/asmYODxJLgP50qppwROa6oYYCmMTbkSqQBCedEGJxZoUyIA2Lxoe0kUNtEIKIccSRyjgswCXh4C5PJr/BN4z86yn4MJWYgjHEPlsfVxeSFnvTIqC4b1mQ07LFPs+M0MER31tXXUoVx+Ehgb+8CIYWWBdIpgEjBG1V4sJlvlX1xPDVVY/YJNQ0rCysIOp1yisghKMxg1zvScTysaMVWs+HpWZpaRwqIZqdQ08xRTGA8HZmQm5eWUamZXlmAW/pRLjMiG0wu5ETU2UUKkZMIg/al0AlSKdPRIBIZ+METnXQpKANAvGGVFhRqxR9WzkygTX0lPiVLgx76MuI4GY/oIGbD5E5hy4QQcTCsR0SeLjFTmk8UZtIGHWXqYSBbA7jFpnbQ0Pem8mDAaB6nzUoSpNOErEAJBRmQTqd5J1Z8Y8SAYDPNQ3UAq3Sf44xO5jsQjSSIAXKAZy9wgWaQjGGGw+UREUuIju0Q1Dk4ZFYUwn7wrTro/fdJKEwvCyCFarFw+0UIUIKb8KVEK3ckY9Jt4FOEdgK8szTvabD5xBB9vGudaOTAwg5lbDHMN5InaqAL4MUXLGkmiiOVCwm2QrgHBDgwK7elxI1WekVVWvuFvujUxcgMDOeJloRltr15PilN6oDIYY/OOn1YKO4dERTGGEbW/NjUxLwh/ZVlGHZPdw4TMNcwW4S8UMzusdbhkl24Fh8noTw8KPVhQhD8XZmfMXbIeLpYzTKftyhBavGfvO2+9zg3TShv/GLiXlFfdedBhhF9dWi7E30q1BZHb9+7bHfvN3/it733veyCZhBh6onMx1pxdjvfu82FsSK2t38zDdvqLFktXq8EUZE8VNE5y1t43b7a3rTYvN1eXR4yaCIZhdo9kVGGsIZ4AaZwko05RTow60N7zFxzOk5FlOn8saT35xs2bT588YTnCfBN4OhKMwKS1MDYGuCZ5bHyCJIeSHa2b37Klnv85b9tsMPs89wNa4ltcXp8Ynx4cHnGOVvOm6kOtW+anpxZnTZMVl9o9vLK8e+d23rm1Ra6pVQ5h/SY67rW5ibU1K6/AvLnpbJuneUcORuBdLC+azcxZWpjUgWKE5MO5SunpVlH8Ts3OGANUV9Xwip06tZ6c4sZDTXHP44HeviHbfC3RGDOwpRsfX3eeihGLe3SFXWgAM5Kyyiur3dvw5ptvii1TNZzzPjktlGChrr7q6ZNP8wbVc16U3o75Zqj/ljzUFoNF/4sJcwyTWiRk2eW4qgT6igqzHLFD0Hdu3nrc3ZOXkyOs4rWf/eJrX//K6MQ4+TpphOnUNTZU1yB6mEe1Y3tmeVkJb9sATjv7zFPH1UY1hCIl0ijTglzF9mfwroZG6EOPzo/hBFsgA0BJ5t0ZgdZIv2maYH51zvjGGpk66W437YuOOssMT3aWqTteV9/gkJHIZz73xQsfXLx++/Y3v/GbTiBVeRwpY+Zet8Ps3IvNbWCdD+6H60uT0sUD2KNZw4BKS8uZ4Pvvv49OQyty0BeyOf0rpw09sbFgTJaW1BlfdSFf/OwrAMRa5BWGWm1dhrZwQdb+bKitw+mWTZuhdWsvtOaMtQtaa96/qKy/+Zu/YSvGtRRgXlxNJ3PNmQ5Mv8h3P/X0U3aXc1gtUHBdiNFjKQepTP+dd945deoUxxQxxlery4vqiVAuNKgnwbYSZ7EJXOkfGLKVxAhNWXmr6yb+aQfXHR1dp06dtGxre4BJXGTT4Isvvkg7MF+8eAHNhjSvfe97/+yf/bOLH1yC8Otf/7qyHnV3arotDvOzHXcxMhz8HnUJd3TiIN1JB+Oo1mkZm1u2fvDhJfVn/xOHXJTBfVyYm8XjbRfaFTqtsvKNN97Yv3ffH/4vf6wtdmcy19YVc42Nm6gYhuhws3tcDw+H2TIXBSiUSK1cMWszcwyJ3LQOtNbUvIl+jVdRZSDtnr/bt+/A4xyGi7+4mO8uiycOhMZ5eKhoc9PuHTtFHDl217DTFEgIvw3u5prYKgHxjGd0ZMKsv7LITYsmrkajRra0oDXx4tFNErX2hTEbM7iDgUnYAGPHLZLUMtZC3Xacc0E18cyJu68nsDHfgQx5DltITg7jh507NQERWEai1grwwHCniqkgGlMGKV1PA4yRUBMyEIBwhVIZF8RKFONRkCtj7Lj49Zn3fvf3fhsSjr1JGkpnD2KTtPquhrh18173497PfeHLav399s6VjTH7qlNSQlyvjhthCtViwKYg+tVeE3LokMLhFqGzUTpipBOC2q2aqCwewACAIZJmvSfsIfTfshOmIjwgGTOy4QGAQRR6fPKnSdyIBHItFXqUDph8sOydkcSC0ABedYudKLTekScjyNB3Tk4qFD0SpQDzwj5l91W67Hp0BCgFNi9gvGPKVzAQaqkkygIyAsPvz6gF9IDUgLAWzZRmExc+SWS98OMFsCxeCCEWAY8ULBPU8HCYJJYeHRfA3gErFPuYRQ+EKEehdMBIgioKJwL7k+X49cCMclYK3rvsnghGKUqM6VDhDiWQg1cuysHjSGIsHTYssAf6iun4Qol0ZEDrK8dZtLTi0AMzYJj9+qQ4CGHzKFeu6DD5BFiJ4BXtT7oD4CuYaNt+5ZWoxIgcNiUq3RhBRtKTV1kS0aZEKUF9SWG6xzu+YPYLp1xgpANTrl8CgYTOMzPCEGVlNSxuJC87eWYsXDec6mUU2Nzsysjw9GqRwzNKzCMaEAlMghP+KJBIOdoU7R1aXKAq8qhoaHXeaq4XbYgigXknbfYJCR7JBw3Y8fDeow1E0dGR4tiVCi4FQgXJyAYUFKUKPiKBFgGQ+KojBs+jQgx7hkEpfgmWNMCgEIMS4fQbFQpnVHH86k80CrICoA7GgmIpJODPhDqCRcU/pXhHDKV4EBP5AiZdQZBHyfuqdJp1NCFRYAqbmPUii3cAn/DlhdCkI9J0XvwTTsCy4EU1Uah0iSiPHPkqPXIqJX7FEV6wAFKirzJGGC8eviBIZYGhVtKLJEmMjxSflEsg6oVEjQypQotmbPqFBwYZTdlQOgApMiasOlQWRPqT9sFDharIIJmgCm1Rj1AZ9fDgPURHrbBBhYCYhUC8iz5Chj0JVGrCWOMLCTB4YIhVSfupUJwqVBbkBXqmZ/im5O9ur7LiIscEGRKTMVfVQZOTU+pLLn/JUKSsokpZpupnxyeF9+CYLbmgSX0h5E1NzeY0Daz0VG+8/tanXnxRuVxqBekWMTU2Iohgv1nwjvYxpGLW6ox96NtaW9EjYERdFwPS9bBDYEycCMMgQZGDjoacdWR6RuNV2HR8fDmiY3WiBf73/+1P3eHz67Nnvvn13xjo7+l4cJ+7KKLGEUlbWprKK0oEUGngtE+cpcraRuNp00eOPV1ZqYJER2mD6NJi6FgNAELERO/jvMKc8cnpvvNd8yODe3Zsm19cmZpfKK+oCbP1BYXlDun/+LrDl6yYNbe2WDUSQbd9a2vT5vqpsV5ROtP5M4inMs5MRVkVP8FQgZy5bfwZGtYW8aVNJk7OzFrMdFC7pT8OiaXU+3fv8Ubc0YY7C0winEkMy1cuXW5vt9+wprqmSjq3eW5txqROabFzq9adBwq/oInWbVuKCvJEqTjvu762Ng0F1ugpUpssFgIulqFyGSUUFYVlenOuWgBqYMEWgqyw9Dzq7u9+zNllJfyYd9878+KnTtt8c/7CBVNcJ5895Q4sno7xgFXal19+WbTDg+WwNkpD3BqXGHv5/Oc/S0lhM01YawsXlJC1Y5LYBNXihywqyiuptnTTZqQrThs34PiCxE3shqEDfaFLM9GOtsrysp/8+KfPPXvSUq9QUddi9w0P9w4NHT12/Na9e2fOnqeS4bHJvPzimroGFuOsId4Vd1AdZqlOyFGohaShoRFtMa7VyWiIpt4JGnfoRJu+XM/NoWRn58+fdywM19NhTH/8x38svp8Vqq4cVjIU437x4kVTLt7VT3hAesxJ35ia5vDV1dRKN1FK2acStw4rlEyErChC1LuOwQheZVBJwLC/HY3bNNwERRSGsFp+eFRaxKPNMEN0Gn+dXhRqitfV05783DDA5d87LQCPqPrrv/5r8So8zn0HD8AgtIZacE1HUbwqM41wGjw2M6ATNu+EZvpNWQ59QhXJ8B2t5yCYTp0bpC9xnrBBEZKQZ0Y+Omf2BgV9ZaTvPXCwqKxieHRs+85ttrXyQT6+fk3RMpolHc7MsNVE4OC+5JRw7Fl65tHje65e/WjbtuI4faKgxz19BO7ibkyhUy3iXREIBVnwURzf3YNT7JCnmH6bgbzQmqAdGqdZACyqpLjIQjmHWIxJiMhvbLxz966JrkOHn3DnIUiLBBRNFFQDmyI0lN6/8IUv0COy+e5sA23Mhl4Ak5V37PuTGdv24CuexET4yp7dQ8eK3O6lQiFJDXr7rTekk7zthwuLq1jwkK1c1B3tEONMS/tOC/SLZaUwXcgBI8mahixkwlQQhgzZmYF3yH+dOFns4IF9LilzH7gYMEOXi5c/1Jha0nEh/E9fe83Jv48e9ViNEeLl5GddhgOe1f0QDOgiSXv7kmbNcxiyMiojN+zATzgIU4q1BfKRQY8iXbuPcr6IFKLzTlmqKiI1/YSDQn86kxewdhxOGWFALS4igHTdkrxyAQimnhmcdZUCJBgvcsEPCbNUHK0xCcKBB7yM/ozYSAlC2UGSoT+l05TsXiCUXlgUnL+IzZ+I90RtIgMMrqWjSi5VEhcQepciFzzowTuxAPOAQUYkjNbYNnoUweApF7Xywk+Gskf5RMFChUL6RQA82KduBoAGLQNiZPQo16M4vyB9hc2vvF4UHQ0evwqFRxaJsjM/Lwr1riwU+gQP8vxSqIykh34AbMkvqTJpaDGoLNllIQGQEr3DFnFCKMVY1wy0QnGHNTTEJxIG2KO4yCDyFIcqpZMAFrzTL75gIFWQdKporEUCnLKiOhALqsjHA6HhJAwCpmXHVNQX4qnJE0+pinUHweiJxGhAIMGLEtU1AJxjvvdyuZ0GC2vriy4RMl1qSisn1yxsXnpadnVVvbFJWWn13OyyScDxqZH5uWC9CbbCD3ZURqXgBQvYJBa0IT7qgqwkgonAYFBIVsjwIB489iMGMLjAl1+Q9EIgPnmiyqLccAQJ/BKVG7P7U3Z/+kpc7JBYoniBaboB+BNOYBAC8yuvsrwTfmgtE/eJeidndqg4iqB6AwA0kxtIRUjBEYRSpGMwqhUvsEVtoh+AX1kkeoCBhzNi8DViYzZE4U8wKESe9GhdXmIKfmUkTISJZYcBIwxYOgDAXiRCIlFBeAePQV/R5h1apaDHJwVB5V06PPFPZEfJJIl2TlxWSIyyQ+sBhhiMA/aARDZUMZ2JqsUAlIhHv1EgupLYc7EH2KLA5Y3axAtRKwIZUCkFF7EI6bBFzRblhaUPxCtXILvH1zj5Io4av/Gr1gYeWtOnWruIEvNVIvkggH4pC+NR2tLRY0MIemxRdqsAGnwls5A3NaWurkEd0SwIK3OBppC01tZt87Mz7/7qTR4F72Vxefn23TuOKhFQ6mgZ51ZDaAZK6Mc7Z84YR+7asVOJjMoGXH1ibu5T9oxai6AmfWJkv6KsUrlW/p0fSoZHnjjs9CryJwf9O79ZP85hwJe2FI9iUogFC2R7785dHsSxI4fFSgm1ELBz48bHNjG7VSE7Kxx14PAfBJj458WRJ+5cN0Y4Pm2shu5bACFroQIpRfUVj3r6evr6zRCZTZ+ambRTQ8Dhw8e9TG7P7v25+QW37z4oDFfMrhok6H9UK3ktdFjhrCorZxatLVvefXQPy6XF9loUV21xNkwXvvgDCgqlFBfV1tVdu/axfR3an02pKQ/a2r/4lS//t7/9b45Xun/nLjNgQrhmOQRF1xwbWiDw9949E3SUEg7q0JkxblPMbE8ApBBcK0U6fScr8KuPHT30YH3FXBf205LD0clhW3ou7z5xUJc4AcuJySGaQqL6sN7e2dblCi0bQJ/Yr9dWgMNfMRC2iSQ63a9+/WsCKsxfinPYum2HZevXX3/TIsCxo0/29PbSk0uFOKB8FMwbAPjFM2ZsLkK0tSRWxZdSYfgS5vWZHffRPwPWpflFqsWtMGKrDQZhDp/pnx10pL3zfy5dubJn1y4rVN9743t252zdElZ2KiprzFqqBh9dv/Wou9vtUGLhPrp+85VXXrnf1i56pKamjvfvHrhg00kpbvV1oIplpvFxlxPVclCQIXDcjrWJyTunmk5s2txAT9t3tBKRF7yrIRc/vLD/wF4KEHnyuLdb4JrRmwEVragbmgArUOSjg1Glzcrz8BTH5xt43Ev0vmooEWnY893vfpdDpu39yle+8rf/7b+CVJ8ZxNrGNDtgoFJ4qE8+dUx2sYsESG7O2BFmbRSrAnd2PITN/kvxLHTMQTcYM9Tj5Yu0QbNdXzt27aYCfpNB7Wc/+/mf/OQnol9UJzWWVR04dFC90ooyX4wQOC6QLfLD1//0n/+zSnX69GlDeep49vnnRPV95pVXXGVo2np4oL+9/YHQ+dS0pLt375vKaWoKB5sszunRUwXUkgb9ksbho0887Onf/8ThPTt32BOj8y93UsHqSsrqclVZqbs0WMKTx5/OLSy6d69t2/at+NK4IExdohFDeeJCNhr0tWza9ml1VWUzka8VYLdUoGjy0eKoJzx1HdWunXv8eeLE0xqLv/3b/8qFYmt4dHpP46b60F7cu9fV9qC0otx8gKWtxvpa1ayzrcM8TlVNxWBfOG7I9unl5OVr1y4zAFWLFpRLtpaqeNJIolatDyNRn8nQ1Lvhfn1j49tvvmEyngQER5lTwQurIHmbFzV2hibqiBS8PyNWLxH7jnKMRB8RJOKpA8IPPvhAG2eoqQVE9vSk+AFTpGHvOD/QPCZFAKYy2DzXr1+DhKEZMyOVKZ489QyBEBqE6Nfs/OJXv2QtjZtV7fkXT3+6pKxC320wyVomphccK+yMOk2E1U8I9UW6YIywK1ZqP31meoP0EJ2fCA3XmGJfil96JyhVEmZK8UI+icW30E2C5OXQgnrhnXnQGu48NI5CKZD4qrp5l93RCtJJHjw2wftTi8Rp8w5YrfFQEHg1Aph0dHpXTUieBHTAANgPeJ9Q4kFGoGcqMOVdWRIV7R0qBPiqrFidceqTd3sPJPoKs1+JkLME8vcVfoz4k0lACIMHtXCSgyzy+qUIYBIV7ZFLYqSNechCmLFo6fDjBVNwKiUW7auMqMIdvhQBDAaUR0kqQrsUi/CJAUBLUHiEAWSg7B8XBAhWRggpwiePjAqFHFPSfY1KAYkRmKGia26El2j/skSmRImEgw5tS0pO4VJ4kULPAmtWk8y9JfvKlQ/yWV0Tiyzj6NKouS7Iw3gjPcM1oqK2nam3nL8ICXir3mhDiVgUxWHBgxcsmGlFsEgceNBGUAYmgOFH9vRU8NJkYQBeFIGpKISoEe2DdHL2iX+PKY43ABGMG8nuV5p1NkxuDsPLS9pIF4uUm1M4Pzu5smx5ZANOGiF8lqZ0JEUJoIf8PYqQDht9eVALPtqnLNKpJn6S0Z++eoDJReBB47lhUIcXFIIEBqcUfyqOdvAIPugsMcvrGEFf8ehP6b5GAtQ79VEWkvE1iiKKFA3sDRicssS2AjExBQyC/UKbvBrGrmK60ENcYOCRDi25RWsB7E/lwslO9Pvw+NMT4RWBBcARMzoBSPQbrRQGkB5ZIPcLDwAlKs6fsvsz0JMYkyuaCrzD6dcDM16iAcRaoKZAGBUto6/Ig4pI459yYY3wo5oQIyUiSdAS1qPgj6Yu5RMwOD3gFcQzQ5g2lnLRoFDwXhBMJrAB0CbrO7T2pggVwRzUIF9p1i/MyJYdnkg5mE+IVJAap4nQEcRKHSXm3Sqs7Ig0eQPMMSH4cs4KE80UoZlgE/0+8XNjnKHQHU2t5Ry7vGyxpwiadMCRwF07MZcWF0QH9LjoMSPcEbl9awtT5CzhaGxywknzA4PDTOSFT51+9Uc/ftjV3di0WYW7efM2gmvr62lEeMDjvv7Pf/6LglV04oLMb966c+zoYd6IuWd1DK27tu8wf1pSWGRq2EYU0TIy6o51H6h94cVPhajCJFu/5hwS434hNJhbFA3hq6M7JsfHWLq9i6iywq/GnXj6qXsP7jc3t3z25Zf+9b/+v5fnZ0+efHZ4sH9idNTmZke3Oh2kr7eHDPPzijY3NLr0wCYhdc808sTYyGpdNfrVFAdgmCV3clKjW3emp27dvV1eUDM/M56UlqqhdLbJloIC1wplZue+9eYZ2me0zrxxxZB5cH8aj/L02h+02fzZ0rypt6cvxAynhs0teu+EqMO6nJ1mTkDp6upsatmiAnT39NgWaPfF7/3Ob7MiB3J86Quf//DiRQEXxQWhy2A/3EgxYEMDg1SJX26AeiZ0WYTk8vyCcJKJ0pLqqoqnjh5ZDbuE1iZnJv1m2VmebuQ/YII27L+x3duTqBJ6vkUGRyKCMK2DqBhMR+er650YH2yorXAiANtlWxY4HJFw7MgR7hTqHXGqxhj2cTiQYkIaGMWQIAxYFcFPnR6TyixVitUNAGLXsOdPfjnvXwvDHTEHqeMkO6ejOGlEg8U32rdn3717d00wUwlWjxw9yjvkrjskVInvvH1GjSUIAdbpWXnzS6vc/frGJnvGOh92J6Vld3Q9MqfOeXIOjINumYVyz507bzadNPkQ/oQZtaRBCCgnB9P2ahQH0Vwv6+QV+SrwAwHaGh0GXjjN6ici5yanMS6CD0KP+Hj0qPNyceOIXmRF0uoaT05zQ/KkYbuCTQIm5gUd/dmf/dkzp06Sm1pBjEZNce7W+MQJqmgjarpAD68dfnYGM3FRR9Bj4qg+8gYJiR5PIslwFhkK8fJB5TWKgLl5a4uhhUGR+k9uvGq8IIY7a1IfQhqR1yWCcnFGycGsvxroWjcm63iihw8f7di2M3A9N4dr/cLA4GMqMxVBR1I0edaziouKzerv27dnc9OWex1tS2vrzuKcnBgxuWyFrq6q3NpfYW7O3NR4YxhChJ024SCjPdkWMMbHBtzji2aoXDdG8iSgF+nsfKhlNLwhAXWJyijdLpn+oX4LeSdPniQcvRsFEQU3QsPHMcLIa6+9poLBMzaWdfTwoR7ninV2LUzP9vU8FurOa9cDaJtuTY6LGjKUKi09iFm1gBKzsrJdz04m5ECt6gtbIq7jx4/HbhjvRKFQjS+RTg72m+m2yMNUhPsjVeMunkC9NSyxnMK6WA4uPP19fVSwvJqETmRgWZNB5jRIEdiRS41gq+ghXr9OJrH3Rhwh9v2JHryTDzNmPCwNKpUOPQYYyGa91ZXl/+bf/Bu6YzPNW7fcvXevdfs24VDPv/hiaXmFjeCI1HoKpYHTyX6GtZZrjNCslkxOzZrQJQfXtzqqwiYQQiAZrQnxWlH1hC4n4QeTsL6EWBAv3TgQMWQixcIg3XmiDIOhJsI3cUogyoUBGTCTJ5PGmj9xp62wbReAdO9SfPWOQeKSAj91KyhaLwz+lOgTejxQod8veQLzgjalA0AGAnyFEGZ1H3lSYAYQKffJO2I88vrTE4Uve3yBmZpkVJxfpUCOEhkJNuycSexOjhUWDBb8am1g8OBdib6GPozB5Ic9xPKy/0gDYFak3QCDBn9CCD+CqVgW7yj3jh6fPAn5h1gmZUHlBU5lwQBYFpi9w4Bx8Bo0aOkUfgWB9+4TwsD4M+aK734Vh2V4cKpQEpAL78qymiNFuq9eooVALotEL7DB7N2DPE9ECEDpciFMIj3SMpqhRS16wMNviA9SE4Rm5EHFUwVjxCGXEhO2FPw/AoTNjt4oaoqWCInsqIVT7SBzctOiqvheXC3d/WhAT740N2sUYL7LQbWGBmZJNHG9nIXhsbBKsLSekW7rVkF1dY0RrtqHHghhQAOqMIISfOHFn1EUALDv3cwCecriT2CYwoMXwGiOKX5B0rtVCO9QyU4gIIkUGC68S8cRML9BCGlhko+EvUP+j/IJrjxgiYTgBYx3eZHhxS9IwiE6iTKCgZNa/ant9YsvdNoNqIeJ8gePXw9PAEfmrSCXBV8gIxIZgcVftEXhe/EAgAdrAPzpFyVMkRBw6gUqZPsEm0+h9EQLgFrEyI5awH7hoeLIl3dZEA+AuCABDybaNjw0zrTAoMpXuRRN1Mr6BL/So7V4MZ0hiyd+hQdmPEKF9ygK2AhBFk2f4pAaCYNcKd7llY5I3j/atNUw4wJa9i4jDGjwwjJVVWjZZGyvomQiDDX1TYelBmSwf9VOCsqRRD9+caQsWbwbCrJgy6vkSc5SWI5y0WP84FehaEAkJGj2ot4iyd15ztAKg5rVFSHs9vFPTE5fvHxlfsZdV1vs/MS7ejY69siOxo8+uvry5z5L+/2DA/aJ2TPAuvgqTz75JJw2Kwv9DVcUr65a8FfLuFWK43igxL2YZpwTnXURk0USl8nDV0mY6Ep3z0PnTyiRgUVq/RIgYXphmYJTIrPywmNsIHimob7WeUKjI0kCcbo62k6/8JwR+sftH2PNgTd5YZkql3iRR707t+8QDbwg9Hh+SofrJiIEZGXmPWj/uKa20dFAToCYW1kpLbeZuX5ueqyxovDalQ+z84ucdXn7zv2kjbGBoeGJyal7bZ2mdNFmtsCpTbOTEwOPe25cu9S6bfOWls3IUyg7RLYhHAb37TtAjGvrSzaJRUWjx1FmmLKu4xQEkcyvZL70npMzE9G/oylhxUbG4BvMzongoFbqtjfdyS65WWF8a5BgNdfI2qjSFLnzDKvqqmuTKu25DYenpdgrNZGmQQEq4nxy2kg6BFSwjGxRZ9nmyVY3kjdy8nOcdWU4xbA0I+Z3UpLXuf7WR2TkqTxx5AgFvP7m22aLTYdf/uiKSnLk2LGa6jrEMTUVbHJijCM7Pj5GKMePHma+bFpnDwP+u7sfUj9j2rt3v6huk762t2uKOQqVlWWFeYV2gZj4pFEDHRtlZNy6tZXyenv7wjaVebMyKRwjVaWufhPXWdTyw8d9TuV95QtfJiP3/jY2NZu9GhufNhOsNXYqJZzl5QWqpAantrbe8M4o0yDYDcH2pKmc2gv0/9Zv/RZD4VQpQh3jorFX9qfOmCHGDj0RPfjnn39etElhTl6o/ASemyOAHpgjLzQNcvk1AKAqYLKQAIIJnPHxNdWZY8eeJARGZjKAv37+/PmPb9wEwDskfHVGru7ONgNcmlZ/9DRKN29I7L6yFYeO+ZX91Vd//Nxzzxkory3P69yjOy7ChDlgJ1T43Lx3z75noUBjb6+zMaUz+DQ3t27d+IN/8ru2np07d9a6kiD1G7ducyKN2cCwZso1PcyPKRPlNT7e1t6uBaW+7dsPOffTOCE3J0y4Mmb+t4hVlfzB/fbz5z/YuqVl0obstQ0ZXdtpSFCYm7m+sjAYTqReMA8dboUoTLnf/jDLmSDJI0YvymqsqbDyBT8eSdsgkKxIuKPjP2NZw0cvsgPo6QkhBM48tahXU1lFtmYgnAfCmy93m3l5aRg7LS+66lic2NbtrZpCO+pccj7moIG+x8aiRsgTYUPhmFaJNg2sDYT47kaGOBKDZuD0sDuYn3IN2EzbECwAQx3qM8oywFA/OUMsnMroS1SmMdVvfvO3eh4/wp4FUDCqLrPHTlf3owcdlqQcIVacn7jl+u+/9wPBYxoOrTN1sEAMql9KUQWwoK30UH1s9D8e/Hh4KMwzmcfD/r27dynXApZ/VhnVBW5jT7fTiuqFTcBTU1Fu+Pizn/1UuBSm9EDpXQ99raqptfdgbSPV0dHqLHeiIDfnxq17bl0uKSp0DaizKObmxSeE4YEwMJUDd+6cp/GpiXE1Ap16V2FJLFa9JgfOFREpVHtnwU1HxVy1BuZK1RcqC0ZbXQ0PvrCDC7+4Di1S4uxwMtRlesgTfoRpBEgGTjYAhnwgwbhZNIlSAMuugngPNS5xyKN3VMEmr3eU4MIvhFphKZAj2J8OhgEmF+H4hdyLdMgRDMYv7UhBkqZScTEjSHi8Q4UeBIAEhncPa5SIHuXKgkelwwkJSAZDMv4Er3SPdJCf4EQ8MkBKAUNKsWi5EAle3iglKaEBTzAoC3oAkzBBSfSAR5hf8DKiOcoTkVQTC0IqK/LOzLjFgFHuIXw4ZYldVyw3pmgtEQwGWu2k4rAAjEdnwEiWiT3YBuSTPEC/Qq7gl4gjHOgKoyKYEwGayjBgB6ADoxZOWqI6CGoyCDdQSZLdL/LRzJaUCAAqpYPHtRR/Ro5UNxyhB/tipJENSSwO8YniwglR+l3vKJdIQZAQODOTa3ZOIMq8Y/GYLo/OsrfejT0ucbfWkuaShJFk2xqo+XEbIBoIHEIYiBo2xSFPiehBla9ECq1PYFRn1TAaoVxUiQxfo4lGRcOJfvC07x0L/vREzP6kd18hASAv/MQSyYABThIA4ysCcOcTEUUrhdAnv1JgAAkhaj2xOKXIBSG0BOIXjLwGADZWmByVHSO488CDCxUfKlmiPPES2YlqghZybAKmY4xoD6HFgoJg88kDhhy9SIkakSKLX5BeIlOK9iKjcr2g1m+sYj5BK0UVk4JmrCFSoaSEQgCxIJUa2k+qBuQQAiY6L/4kRkYOieyyYAEvUeb+hI3xg4fBn0qEDUzkxQtIXyMAMogaQgRQhG6Ol4kS9KsvEqMoYi7vSkdGqAyJxsqfJAZeou4eZvaDMBmlQ4t97RlsKDT3j5jUFOsAFgOlz6oGUqKc5WX2+lYdmRR5/SoXC1AZMS+y9uUVceTqvmnNutrqcrfdL9q4N80PcdbF+uAQbEJDoRLvujQ3rcWgfafUP+7rNV1oVCwq+/0LFz71qU/t2rW7s63diPqDix/+8z/906effvrRw05cyItUPaPdp8SoaAeyJZQ+jZg9e3fjBZjZOscRcl10WGgmTCxTnCwkEFWGdyZKwnDqlPML88IoxWTcmL2IyU6Qy8vNNuVvNl1cq8luWwtUKe6VmaKmzY1uYzM+q3VI6EI28ySQKG1qvXP7Xn5xaXUtmOTJad7l2pFjTyUtTT2TiBMTye1E4Bs3bt2/111WWcR3IjHOJwrNX1OWnQDra8t6ZG1dfq4AywVuBu50nSYBtbT8iqxsB+8VlVeU3rlzy068zU2b6mtrOtoF7Bj6popfEmQ1PTVTGnrkRSseDiIfGR5kIZz7yqpwnC78Nu8zUfYAoauKBM5guaf7oeMNqyor2tq5h/dbWppNvzosIQw0QZM4wS0taMjS7cJkE+52psjIgCVb7iY1lxQXnDpx4mFXW+/jfrmIVe/isgbbpJ2j5NgfRwAJeLiWuLzW9iDDiMqqcFuB+XLZv/Od7/CJTejCbzZdnbz04QeJ0fMKKXBxVANykc79InG9Zqy9aq4pzIH+ofa2B1J4Tnhz5pTYMqbAzkDev/+AH5bvyOjh0fSMnK2t28unZy5c/LCpueWLX/qKXLX1DW6GsrphXMFEOP3/9t/+Wwr4oz/6I1/VLppmVVx89kRhDGt0bJiRMUScsie+7LPPPssdRLNWW70FTMHM3RywFwZ969p1AI5HmHo4w4kn1azUHEgUhDsr4ETKlLWGWhOJ1sJUNtVPZLYVQgOqy1c/UhwhwMNLIxbTugqyfGi7j9VlRBI+Fj744ENjA12YRtYoghdlzlUtQh5TgF903VJaanPzZtagxKHhEKou3S5eAR7I07xu277d+h3ucPHWW2+ZG5aX74YwijNsc+dAdW0trzTcE2eeLzeH00/LulyUq7EGlJVVFZjChYa9va3jyNHD9EKAfeHq6dnCgmLGQmKKzsgtdMaiF9Xj1rXLYgKmJ8f6Hvfw7A0zikrKqWfBqmRSWqkT4td6uzqDY50YdYTIGSrgmtDI7//+77NPePAOwC8bYwDkQD4GCaQR1z2pFS9UTKp0BJLxMHhZXc+RlZ7mugBf6YjARbURuBcGoKBtO7bLZZ1EI6LQivKq+21dJGkBR4OlezN5A/LHP/4xdtQR6QxVnfJo4olUxXY7mN1LdH3mzBml2DUBho6UYmrEn4J28EKhIpfDyVGJvlyN8MKwCRBJtj2ANycBAyMBrIgL5963RKiRwo4/mZZfCNGsOI0mk7O4pMIjzzgkecP0ZwZbnVuYd/Rny9atDhmwGb6uodFGLiSp/gRohj+YaE6eiEy9QNOmBtMBHY+6xRfW1TtwIoyCLLsJDLWeRnREEZrahP+HWlUpdkJ8IzTEvjaaNDA9FiORKKOHQfqNDhDulE6nGEcAdaOH+j55WCk8BBsrIMkrTsOCazYAuT8BQ4gkNKgm/oRQinfYaF+VhITESJI9+AXjRXGEZiZQF+iRRbosHu+hYU1MCsKsXJT4RaRfAPIqTmJkFjaUmJKI7apaAwOcKpSpAdx5INfEYV91k1dGygLmxSdykxebIh7pGs2Eo2ic4hf+2PHDIwsaJCpdjVMuMBjw6KvEiMp7pA2pUbZgoCUWZoxC6QxeJcUOSEWQG0jvkEDrHbAsINEsHUf+jPKnFEXgCDEoh0d65JpUgUEY8ciOQolY0BH4U7pfKeC9Qw6zPwkcbbGDZ/yQw4wdhPEX4UeDrbfKjUKQSykyytI/EIJwiAuMhyQVEbMjhq1G8coCj09qLmIQRhdqpdW5hCgywtgk3VTuyPzCRnaONZ9ly5Z8VIsDJDw7szg+hpwZZy1C4nF4kQGPFsa7gtCPHiiiliUqET0KkujXO2qBwUZ0MmoxYhb0IDIqi1iwQwvO2EUhzNHw/EJIAr7KFdmP+JFFxeqgdDz6BQZAoT4xKi8eUkUJ/GQFCUnG0iFBLXhIAHi8+FM6GNRCohkhWMddIEN2UkUMM4bBA0wWReMCL94JIX6NCAErF6TfCOwFd1iOCIFBi1mUAwYDAEJ2iDaUgJQCPy7ASOSiRxtWVhSRT7F+yQgYC9L9EqbWFWGRa0gUpywPMNTCD1Kh0r2QldYDmIKUqxSYmT0wXhA8SleQF6RCAi0pIcO74uBBAFRysV5mnBBSqBpmEgHoFGJZfuGJCo0GDI8aGrMoHXlK8QkqS4SI0X56eLEgkQED5ChEW1BT4uwm8GLiZTfs8AsAL+BVQ72YvlsiyiX6FKUN0vmBgkVEsziAdKB/wDJvWkqLoJTSkjLd0Llz57Rgqi5/VJW5eeN6kovJFhbuP3hw7sLlHbu3Nm7e1NEVxgNI1XefO/tr79xFRh4myzIzXZj101d/LGyYw6C5nxqfcf6h0Yt7Wk1fekH2ttatlIUqaKuq67CPQXyRidJjMAz8xIsXUlKEZXnWqItPd5RvuqD/UOOEraorOmuNiQ7dZjY9HQ1CQnqE0LCpcaB/lNzKK5ptwu/r74kycVqGEU561lphUemDjs7hUXEiBUkpqfq/DYGvYctfzprjzlbX3dx2+iUrDLMvvfSSXy2UQQuvTxdl3s0ya3VNqcm58rJyBLfdvaeX39y42QCA06JcMVF0pBHg142FlkR37Ijb8en5uVs3HtvJICLgzq3bDo9MSRJ86H7SHr4BFtgD42RF7jy1JAwVG2MYfom6rMwm6Sa8/PJXP8cpIcBsJppVh/t9rWhaZgvHL02MOzVW7dIkmeJ1TRr7IPe5heVHPT2Dw8Omgcl3cmxc7JTTPL2zNkseTmu2ua2jq6vz4SOLPp966SV1zlE8TutVXmxr4OGioYkdkD6yfvCDH9CEr/40YGJ5GPAnD4ar5J0imYXaRbUEpDjccl9MRSOdS6TL59b4nXNDnsYuKeX98x/k22BRUdHgmKe19X37D9r56qRCVqCa4RmXThPKSM86//4H01Ozjx720ARVKZfchfILLHMkvBUPdm/dipWPjY24IcuKwac+9aJRvbhzKrEYYhVYs+zOYAL96U9/8v/+v//Pj3/8Q2RrzY1z+KD6bNJFv+oU7Uzp6gzDfeqppxhc7Ce0obofhk5DiJQRMGYpwloBKfmTcIwXNQoe9gpSrsOHDyFm27atiDEcP3/+nBHLrds30EDsZ8+eVTT6rcTRjgl+NQcSR6DGhnXnrl26fK7nhQ8vdjzsuvTRFXoX8mHt0Uy5SDhF87zx+L/88bdkUaPMgg6NjLZ1dBG486RYjqbKAhNfJ+ygr6w0YrHte0tzi1H+6EjiKryREawdPXrUUCHulDCepD4saBzRk9iJkR7WZDY1sVfEK4gjqH7y6kgsEYy+WW/in8bcfnnLNeaI7aEyD+UAnzAx4JLCRnFNjxivDluDYoLfSp8DQw2UvfinfbRIeuLE014EmJmNJUNNpKiYzvYHTBqkysNE6V2EjCbj3XfeW15aLXa0WU6eum2uC49Y9og48q6CUId34w1a9ieTjg0rg/eng1O1O4LtxOILgnr55ZfQcO3aRyLy7dawdmHZxCVuJshv377L4KlMBdF+aeCoxtjDKoR6zilhpWT7ta99zTgThYSjaJIsyMstK3H+8UJNVeWXv/iFlaVF53mPDA0618i1a9mZGKwwSf+ws4PMNZ3XPv4I46zUdX7Ce+jRscoK1eKYgRgZDVfamVDv7gmrZFqKjEzhiUX79+x+8tjRksJCV2szCcRMTQv9miFMNgkb3Xm8kwNLo3TkMRtMSfcnofmTjUlX3bRZkLBtTYF2UEbiInyM4xdf/vQLFUlqZ7yrFPSl1gBj4exHVfIOFeSf9NxwMhvIffKOWb8waBb1EKoVIcRaj2y5VFIq08hA7kVx3BSkQh4zsgRFS/ECD7R+lYgkIo1c+NMDG/bhQTbkSlGWFGhhiBRiUCIjJwTWHtsHFQ2MdBm1DH5pBEIlgicKiZp4UlJiLAgjSMIdOSgRSShRKISyw4+8MCmQGJaQMLJh80ACHh4kyUI7WEZqTEQkqtAshWToS3pUgVGQdMMYv4xf6yEdQkVTgXettCZaFgSjDQF2ebnEVOCWuTdTU6JRnVXnXYyvGXzbEf0D4NdsloViC3G6oKrKcq5GuEF1TcjAsmlCf0p3BpQzsx1CIpgZvBvvNTuoQipNEQiCPf5UOglEXoiLiNBMyHjBtUqaaFj60AmYQGgfF2QFmPFTDUjqEA/ALpichUFnx4karau1cb+S63/vbnv3o16NkgMJICEHGvQCOZV5ZEcAa6cR+KmPOuAnXol+CU0t1gYyeJAopD5CgyFShYZIPNqoT4MgF7RR17LAzDDogvBx4cECURACXURRQCWvRy4ywT4YSiQBqLBGj9JhIDR0epERjBcU+oQ1duIrptAmFzpBfmKx3pHKorCgFNmJWnbvJOnBhT89+iOmyEJk8ULUtEY7KPc1qkkuD9WggdCkRzlAEqnSmHhBEjDvGFQiPAiQS41Ahj/B45o8EYx4iV5IXhbkqeOkhyNISBKkhgiemItUlQteenzR4IDXhiiXFsgkUohyRYCR3YtEv2DIOVKFUzgRgGtISJ5UPaSHCwTIopFUEMIiRzLCTxrwkACFAlZoaGETJ1DHPzGurdYJcgB0Z62t2/WMmvaEB+dgLo0eevKsZOg3/ePquVckHOPjHOeUcKKoRNNk/jFp2ksscPETtCQhgJZFECMGFYckvwTCXO+3tzkJ5+Gj7sNHjublC6OwPD5qL2nL1tbKqip15PTpT7urF1q3JM3NLjgr3Mws/9iZTs5fcYzeqeee/5u//a8iafm+fGs7r37wox/b6Os4nWmD8LUNsacC4nn85pQ7u7oGBgcf9/XQHRXo6+/fFxSwoKsRPe5deK2uTuNXUVkmpMW8p4kc93jaUenQP9Fv+hnN1YkTz5w8eYK4eAUsisAJmc3oFNjMh5cvGQUxbHvwuh49EsEhwETzcuhw2KVAC/n5BYxfR0w+cnHVRNi3d3RNzcxxgCen582jdXY91IKbaXWSoU6cg80MbGawK9ddBDp9YjdhJebC3MWBA4eMbRXK+9UycBdN/CcOBlyw7/mP//jbRhEGMO6xcUCP5YuBvsdOu5kcH336yeM6lb6+XlVQWA2laHUZBuKNEHg+rILinKbKMJ555qmE0DZcIcXMVPaSEvOSI++/fwFkmL5iu35ZJBuhZqupqopE1kniLJKdKQNq78h1qijxqQls17kuE84JPXyYjRaVFJtBAyOmnG8tBYAaDjkXny/LtTXs41myIbEEZtOxpxmykxVZMiLPgFkLRzd2iBoGIUMdsLsUAYRiKpdfq2v062tVTbXLah3H6/x+Lr6jLV/Ya5vAfsenCVMza75la2thbga1bdvagruGunoHtTqVVj3UruHi4KFwX5hZUqWot7TFKtQ0k7I0RGEaQ0VrqtRGVTfWh9j2sRvDD4l4fO6557gLf/qnf/rTH75Kl+702bN/HzEqQlsTWxlGxp9T25kdGCSiwW1oGCd8+FXIy5cvswPsn3jmlCkB23VM34oXp7mt27Z9dPVySYHwrAwSQAkJGyDJpQirIvhVhHSo/vk//+dWZtBpWvqHP/q+0bnGxcWZRUbuZWWnT5/+H3/39wpSNKN58cUXX331VRFc5vNZ9q3rN8hWiAvF7TuwH20Inpmdp19bxqaGh544cpiDzipsuqftzIxM1U8NeeKJ51FuzgCPivOcPXOGnaCHHiEhELXRSsLQ/GxmalK1K6IH+hdmppuawihWszU1PVshFsUd3YtzFvsETITeoyj0FiSpSyMxxkPslhTUQHrRgQmMk4WaMCsFR+BJmF9OuaTHuvxqf5EEg07XGVg+9T7uNqresW1bWN9YXb146ZI2ri67XtVlqJTofKSHPd0kYMJb2BsuWCA5U6hEdoJdBizduUCaMzSgFy8eBdHOa6/+pHVbi0s6ll3LknBnmT2ZfP/73zfGcDYCWZEPp/jLX/kKPf71X/21X3cyKIVNUpZIMDWRjRllMTn2pnSMEAhG+EMmhbFmb8MLL7yAcp0NISAmDl9xZDgqC5hNDfVWDBEG5vqNG3kPH+7at1fTvLquxi0ZSLsPjvQednYpLtS4pA2rh1rnsFcjJSlMBWVn2Cijj9GV0KR5W0zZKEYU+gnS4BSEjP94eibKAaCBLWlbdLTMwOpFbD2ITnERJmbRigHDGjuUEamEwNKkUBAYi0N+/YkFKRStzsJPhghQigcZsnsBiXEvFCQFZjgJPJIqo+xIgt8n6VIw609ylu6rImBAoeywKSiWDo9PiOewwoZ9XHu8xxeQckHyP8lO+CLqiKgJlIP3FX4vkEhXNODIAmLQzJCw6f5B9PhKDhEed+CZFpKUhTVFyAjYL2DpXsgZqTKCB0A+ypKi3IA24fiyIulIjfJEgOx+PdLRGVHBphQZYYBWXv2CPz30KIsiEKws1TAWLZG9gYQHEhnRDAxmNEdKcITTKFLpEj3AJCrOCwKg9UgBTCBQaeJk8ShdT08miMeXvBEJeGSY9kOJFPB6QY8/Fa1yoQ1+CGGg3Eg22iQCkIg77/IaapmtMN1j6RVOn/g0yDcFOTuzIO5f4CLZa1fZQ+RXbWAFiEEVSqBSLhUrFPIoK2LXakW+VFjaYedKxCYGlSsLuelQNAIUDZURApuUUbPDHYGfIiK8vFqbmAV+kolFRxMNkd8JsyQB9CuUrAjNbxSIdFkgAaZQiVGbsntHTzRgBBhmwKxQvafSEaadGRsbhxNm2anMryxgsKMIL0hSBCRBZ4nGARKYpXu84EVZETlBKT2mywItpdMgnF5A0hrMSvQiL4D4xBITLAdbVQRKJHoA+PUnBSGATRIXnKhSFgOGHCqW4FeLRMhMIpqZjJFlSBDgE66QR0dRnniEU7mGE4qA0COvdGDo9CliIDFyQ5smPdaaSBtIACAjd3pO2UkSfLRteIhC0bQTFQSPxIQSw9IZsmWHzaM49EhBIXowK6M/fXKERtzs59SmCCOvjB5/AmbhCoUZC6EGJQKr3KvN7zLLZh3YLdsToyOG68hzeS2XgyQTdXzRArQT5Bw6YjLL8TgifxxmKLraaTZEB4b98AB3tG7TBNg1bjM7r9fVYHg3v04rjjgS+Du/sCjR6MuKtJHLwcNHBvt61UNm8qCtTYh4UWnR0lDYB4hsFshREfWOHp0jgQh21dHr2TnEuPvv//2/fvXrX+X4bmneSiCxBt29ey/Wl6DliWkz7jJamHXX9ztnzm5pbg1Xp4V1xdXK6mpm1tbWYdxCRIRPJmzeXuo5p2wuhgrIK01JMzbbEFt+8+atQ0cOG3fBbJzAqwRM+J0d7bwifGflZDoWpbq2yiZgSjx84CCzD9fqVVeLwiD22N9hZ3FpMfh4udlvv/G6+6+aNjWPjY9bZnLjrSG83tRcan/foG2cMNAdm0Gb3//41/+psqKcL2c/pBRTdeTMTwCv6aBctkcOyBNwwYuz+Ua7Gaq50QBVsQUt0MrsqgihleW1cHtusmsjix056GJnGpL+5S9+yd17yD1z9lzcssCl+8rXvvbue2datzaRvk0PDjRyG4KCMaNWUzO7t0Ssg3/y2BHp3DoqvH3rhipBi0yEyxLWXiqq1ATT8Hx4k2LSyW5qOiChjL7Hvfv378Pwtm2totBsCJa6b+9+g5Yat2vlF27bsdOyTkVFjrPeq2vr1tzpubTIcRwa7H/7zTedIcjH7e/t27V7h+JsJP/O//GvtLNGILyfWA9N+WjTFSpGCM2I4XLRoqYhDgDIEUI0cKCRx7AYn0ERn5sc8UIN12/eKOnttVIhI1fStAdl8P4Nn+BcmptnIvfu3BWEozUnAYseXC660I7AoNJiVtHhvolEw+2dplmhkcmLp5973NuzbXtrZUUVschirZLvy+EzNpWCvDffev0rX/0Sx7e3x1byHls8NeT5RYXJaS46GHc5iBpOF64N10UhTF0ySHMrbXqyfe3Jzo0KB8s0NzmUyvIWTg0A6BqzKo/NxKJ3Z0RiLy2alGvZ2vz2G2+qRYpGp4uERZuxaThVQsIhBKbV2tri+miba8zpOdCDS8mgTzz7nAstBvr6nzjy9NDY5LUbN7+6bYeucHpi3F6f9OQMSwcdbW1m/WEjedZFIORGTWSoOOOBb3zzayRD7K6cG+wfOvfrX2usKfS9znZM7d+3z7kkW1uaVeBQ89dWzD6aBxM8Iybv/Pn3x0dHXFPKGumUGLfv3OEq1vyCIuP71u09R48fC2FIm5ocLjI8Mnb50iXaRAzVQ4gArTPlos14g36tMhkkqB3Ey4afevp4d/cjJzWBHxroo9yde/aofqqljOFKtaJCy1DuiyDkv/zLvzx25HicQ4XQaBCP7CeO4FGoOHh4D/CzEDZz7+5t84L4IvxgWglfmUVh34idHHj/HtVQew2PxVDW4rSy2cWlobExRu6aEpcPzOhZ0zLqGxt6ex47iGB4ZJBnxdE39xvvxw2Dgews55e5LjH0OonIEyHz3jlN4ZKwMGEbwotZL2MgE3HdvkbfAhdejGmlMEgUYiHKELw//WJZdr/6Ib01fr2jnNK9sCIp1AePlpfwlUIU6oUXEoiFkiokMMBJXHQqr4xMl+XEvLGfYzPMksSAodYDOLBj+1Q4TLaT8GFTkEYTqQggZAXJAiZmMT8tS8wFINpDxKM42f36qmWID14UijZo0YkRtKmnEv2pRBwRhSzS/YKEDZjsyPAJQnkx9f/v6U5/uzzyA4AHY3zf9wH4iiGAucHmJkBzsFHTPdTsbhVF7Ytq276I2jfd/ROqfb+KFPXVardRpW02USvRDUsSIF2CwRBIwFfAxtj4xvxs8H30M89keWT99HjmO997Zr5zPDOKsCUpsOQdh8iBjNUNNtaHjbBSiA9Scdi80AN1wQ+Dgn4J5UEOKlngvccs8N4xAAD/zwvSAGCPLKhg9uIXMPzB2bKzu3tGcAUS2yxOKC0PJuGPPqwgDDjEgyzNEQwAMA+PdMUBQMjQ0pWKwJTAHM7uwA8O8aYgYIlBLvcCJ9YEn2ywCjGWXPddQBvdiXRy/cqiJQzAzwRSosYSbCkRkSK1tTWAhSmYMZ7V9uGQRk11MTrOwSSMBE2yCJywSWcIaoFfChJR2IgfOt38c++iLumK45/GCOiRIp1aMOZXvY7LxWDUd1oli+CVsFTqX9oAj5lIyAtIHPrXgyWYAXukQ+5XkcgnPHLhiawqq2DUiYZUljZWQSlQhfd1ASGGow5R9y9sSkWG4YeTmHB6YGBHxkIUpAckGNhQBMZ2UmgJJBgMxFLYo1IACNGDLi8ypqDiEQNsikT2otQxSwrgGN9LgRkkEtiOLk3JuIIK8tjXEwQYNYLx7teDQ5DB1ZJwmW9EHmCTC0wKa+LBw/kBIw0nhegN8Szmgxb/2EBacUQVl+ghKSQ6C36Floe8UsDzfPD+jUxi3r9kNJPt8ilVBCo8UBFsiisi3NfRO89HM1xWWoETF4NimZL8aiAx6eN/Y3Zrn1L82gpkqpQc/srKyonjsbncoZ/UUlbiHoAQDlGLfXG+ZjS57u4WhjbBD5vIu7a22iExyws+OB4zg241IDvPF4J5GilOfuHChXOfXDx14vD1azcw72h8QwtxBQ25MXd0bGw4WUA2emh9If1PV9qFATtaXno2f8/WCPvufHH/Wm0N5esf6Yq8+hH82K+vldN7wknbYgN6oE+Bh5G/7tiagI5ydCzM02m+nFJDnDOnX7EQ8Wx20XDTPacTj5+4ysBJ8YtL/HuD4y7mFmaFlCbR3ZI5OZFyI3Z+YVlFZW12vsu80mYXrCmt565lRfnmmml7+47QkB49eryjvcP9BGb9+QAj4pPh8eBLV/ee/eyf/tHn0aTgkPa5iIQdh0rPx48fZ1yxWndvj1CzdvMmjYxcBy5VVVTY/a9CmL/uvXe/qbHefByR2dT2J+ehzczOqp4MweI+mOx/MDDoKnQHvmaE+cprHdcNbxyGyclxyFeEMXX1ja+ffePps7l0dZMzmfjQ7nEs7ZqPaldWl3xuiy3dsEGO/lwo8OGHH61bWTh7/HBRQb6114amRn5mov/EyyfNE9s+ZClAKMkABgxh2rWs0tiyoEBzE44SE5XOCiVmZs6cORPdnQxmXolNy2wpcdu2rZpUXa+pd6YVHB87diQvJ4tfigOc22rKWUOsSd3Rsu3qlXa+WN/YyNU6u3ucYr577z4rGr44UeUsdbg71prDyPBQb0/XhfOfuH9XeOdbhdniGYEIZVG0ykOzdKcPNrSCMDsnw42t0zMpN9hYYOJAdILVOHzELanZVX22PCTRYAsMQTTE2kS/Kq0aq5k2xrrf1+cjYJ4HP5ODp1U+QdUaCCLbtm6u3bhHy24VSBZbUjtrKeIGO6MIB4DK1biEBigr69y5cwJQnPqi1BhON8AV4ojzV7967+c/DxczR2M7RQu8haTYvbngDG9abXRjKDa/FIa2xtO2nseAtaKkEANoAUg9DScKb6ovCA39+jSf/zvRtqS8zAJZXlGhZXtHfEwOD6nh2h1hMZNp2rQFRjIqZJClaQtVaPjQBYANMaGdJ8VFeb5tp6KxkbAO27JnX11Ts5pZVFxm/K16c8biglwA01NPDVCxRO3qG1qcmPIdfaMgxzCFtm9/CKZ5Be9yxx5X4Wzq/K3bN8XZynKkQ4daOQM3E6QpODhYbNIKNhWP9rDHshopE7Q+LLElxiG2k9NPnJ2aW1hw4ECro8QE0M66bW1rM9mFnKlEBqI9/LAm07sIgsiQUC9VIC1rcXbNEN/JtdPTVsOafPqCYfDATPPzVRhsLeAYPv5+91/+eW46HJepIO8igrg5+p65BDblADTsFyE8WxjUzHV33tWu/ehHP+LSiRvnWzSgbQCc5Pz58+SFUBbM3V2op+8qCrNZSPsszoZ85y/e63+ABAwGJA5v1iaEz6PHJ7LyC9LWVjVDM7MLzkFJCmWUZWVqO5bC8YjffSpHh2EI8OervvgDn+cJUryrL0JxtSyqWoVCXXUgCEVFGBxij6VkYSP2kdhgdGDE4ckY7rv/LQB4JKprsbcDTOf0wy7S/apBMCMBIHKCDYRAejiYf3kjFXkAw6kUz7FxEUAYGycbDOSihX/ux2p+IxKJ0Eo3H4YxD4QwsAsGlPICDxi/9OABjGHtJEkj/ziUSCjpyAH2wkzwwKAIgNmwpXYOfmgxIBGrNMmmoTYl8QQVIScdLbIAjhikoKWgUjgHHPn0L3gwZIFTIn6UhQczEhWMRGUpCAnpolyYlEWBskBiG5MAvKgCMEDoUQpOFR8VmD2ACYtzMspSRG2lcAWjsErhECRaOHxuTUYEr5QiREYOdUUUhLPC7USlZcjFRBSTZmAmbTbEc5BEjcEMibL+lU5M/FMCWtEZZMGGB1l4kCjXv2a+0DJFy5go2hDo5EFzIijKNaXqT1l4FPfwWFmkjiyBkfKcZxrAgEcKKnK13vgB41/cooUuJZMUOSl6Q0rTFGhwtHpuW5eLnFLwKBgtRUA8S5EbyWEGTuL413vM8uJf7NGGIlEPWI0syZUV4eFRHDOyQJIZb+hK5HvYjqTB28VFEPzIipCRJcARLUh4op5JFPmPDCgi17tcdJEAEGkFzAZ7s2EgCj9UwHimd3pALuKBQUG/nsh8FBAqL0oRKr7TJ3/TyHjgwR54GlBldFKQ4yQi8e4hC7YBsAVO0PWrj0EaBlkeSOCXroFSRHepwQFJCo0YDtUIbES2sRGBwZMXLSTAKAgG9QiASVmUoOXnMLKUwoYHAORK4RyMItXlFaaWpUNiiUuuInA61sWjoHdOESXVDYWmRn+TjNlwRRbS0ScwQimLLt6U9au40e+6rAzRcN9Av+vwRIYitLLSSkeXYM9QAQyGIXQDLDnS1hZ9c0h23ahrVfNdXVJWBhUGzIgbDfQ6ia6i0jYdD+s4PH51zTbtCov/U6ln9gf6iqbjq6/HXJdbkFNZU1XX9KJ5BrP4puTIo6PU9eGcDuEMYYbPdZOjtLzDr0MkhVybFjS6IiWr/XHGVoMjaDEYsw/KlmPhjStKTYbiVWBgo3jt5rrJiem01HRmVjrFuUaXqz8aGisqrBgeeRzdaebJlDMw1tatFpY6qCNsvmcPg24HlJuGDhuGk3MsUFFH1FznCM0vbGWTa9eu8goneehh2Q6TdkAwpVhLzysIjA6mIEPTrVppk7DVILGgTZSuX+JsPlzOKyl1e7GTOZTVNjK9k8gNFRiOsDZcnTzVODgwMOY+ZacY2brydNqhozTw5bV2hynnFxX7WtkCy8aamvUbMtN1eEt2fI9PFmjvEsU5B10HRN0ETlq1VTuDySnIONq6l83Ml9+6/U3zwBYGeKl5h0BH4s1bN3wAcOzIcWO+tOSuBJcq+2A0T+yQucE0rVDV6DZ2Y9TtM2ROEvZ0Jp/V489ghTDm2owHRD8o+rft0AFxv2hPTGOv48HW/Rc+PY+c6cn169KrayrTNtgP89AnI+IzHmwUUl1dY1mgObnFtv9+HxJXLn+ek7Hh1TMnXSAwv7Rscgjn3JS/ipsZyWYlI5aNm2oR1Yxo350uj2czuAI1vHFWxmAV9dxmOyuzoknmN0KAh4B4CyO88kpxMyRGRMNjo9a81P+Xz5xmS8/p06ezM8LBXndvf+3XhLEBiZ3xzG/cwpbcQnHDU+ZcWx1FWpYKxvD8fnh0lKOXFuaMT4w5m+jSpUvXO65lZmUIVpQyCLGv/Ze//DeOBTOGlTVNTof1BY122vEPO2coVh3gKH/x6uuaKibAyY9/+hOffHT1dFsi0ByYybUMBw/SmhiouLLzC93JYA9kRVWNHfb2CJaWlJvynZ4IodLhw4c1IpoGhExyQ2JNw+0eVOe7ZOpimpFHj0yQP54cbT3UtpS+7sqdb9anZezef6D5xa0KqpzbWvZs3dHiIGKhuaHindv3nSLssISF+RX74JlJFwih9oSuNNn88+ZXHSdOHtNHqnUibC3RWuULNjgRkDJrN1Yb28BMFVo0bZzDA1hHWSNyxQ2R0+bMdyYTb0sLldWV/JWiiPPZxUtv/eQnv/71byZT05aSUjPTnV09rQcPmqTq7upSlkEpUDSvusJPNBVY/MpYWlWWMrTTmxuzfnuvh0KoMVDckH7ly6u4tYrCjTGp/r+0vYW3KIVJiiIFc2OSZXFrnsAgUMVR4bWk+hh64If+ffRoqLKsuKFus/buxLGjvopx1UjzgQM+qg5NxvLS0+lFu/+NToWVrGAlVwSPQ/Cjk4/NKKKoPfIBk09rqqprVlzIsPYC27lScehBP425Rc4nR1k5+SL+udk5F4Sr0Bk5ebNzwyaBdDlGhqZndMF6JA5jRZRQJA2PuaBkuhrbFoj9cipScxg8sAv3Ew8SRDpOZHkolq0BUCwcUvTQ1EK98GMJ/uiZXvxLMx7ag4SSvVM+/XBdRoFcCiQg/eJBuoeVFfcg5MEnfoSPbhBHnR1RZDVcRRIwswjDKYJ/6VBRY2QJjBTvEZsXuX7xLEURghAHThVNetSA9gRLMNODRGB+cSJFAwWnsvgG4188+9We+BeMXPCIkhpmBb0QirwA4JeruEQ8PGcDZjDwAIBBOgDwUc/kRYW6wHggl+5RCjZZkFOssopQF4DICVRshBzMsuCUAo8uQ4CjwbHoJyUY2iEnxkw2rxcWZJYUcyU3FMGPEyI4axwhGGAGb3dVrmvdkwBIK+Djk8C2pcOV5dR0Sl/oAmgq5TCKYFgRBrJxCULUscETIEQXEqx6VxEkYl7NkqJLVssAKOhdEaSxRxX4Eeu7G0jvgO6TyScWopGwKUu3VlJcwhZ0IsU2IVGzgp4YnQSwZHkhihMNAQk20ALGc1gNM3xAYhzkyMIYnCRSRFkcipAA6BEIpRSW9HQclcYAENO4CxJCYRhmBYH5pZNAazXsfvEuBVdQwQ8AvJTnKkKX7ShB8wIeGJjnasQqTvQC2lWtk1yYUUeR2u3oAAyVdDjh8SKXvNijTFnAvESuZOHBE//FlRTvsCFEb0RDmgloWByidjCN3lBuVIIXRQilCFoo4tkvErxGlncMRz7B+FelBg+nd0jwjyIAmteneJGrCwMMxr94xjwwBZkDk36VdUYFl6O9SBFAdF3RJ4/ysAWGNSCxk8IqhISFLbJEV0p5hxCVyKp/ceX9uTZojNS4UpBE1KJT8E6rEKIeHUAVE34Ahorx8Q8/a9q+4d14VpsUN3Xr5jabzCvMs+UGLeLDAzM+8YMQDNjAgHcYEHL6VkaOPSArpWU+GeeZRXUbaxxjbUY5Jyt78snk+ozwbbSjNuExbaUiiBV9isBJHM1i3OQrUC2ucz8Jy9sPHT7qKBd7fYs2FrV/eVWw2zfgzEaLCU7YDNtmqqtrzMpf+OyS9TNHzji4/q23/npxaXZ5bengoTYHzZhAcZGOPeHaGHuA9e87tm0z6ezbxYLCJnNthkMCIRYcGxmmkiFgCQAAFbpJREFUChK5HFfnVVRcGo6lycmta2iyf1Vr2v/goT3nuQ4DLSm11aLvwUBRcbktPbguKq1aW53vH3joY6WyygoflS6vdDklfl3aoG+o3fe9uLyQndNoa37Xna5NtRvnsuYfDgy7k4SqMZOWPm8k4zyfheUlPbvDEg1CKqqrjh079skfzzvXwZxKqLNZYafZw8lBMyc/+MFfsen9/j733dr1bep2x87tffcnfC61ubaGNzutRJ/OEG7dMDHKCaMXOWTcZzpDJtDtXq7dfPLkKSbwGYbtRosLs9c62ssryu0e/q/f/c6khT7KhH/tproFQf/yqpu7QjXQMqg5qvDy4src/Kwgles4jUejoSlNpkLC+JJwAtbCjHXuCdBuaSksmthcLt3h7otLq75QdHyndZ8lx3CurZnsdBOZAQDkwmUmEaLRDtblqtvM45swfjY8HD77E3WpLbYyq0WGcSdOHo914OMPf692CFzEtSfefHP8399XDcC4ZtK+/4//51zji81CKO8OwRQbzS2E6xhVjM8//czOnwN79+zdvet7r79mOjMjdHZhofkPfzgn8EJOe0GEa9fbDWOgpFPI0Qq9z9oKBgoKw1o2jeNftedw3oXRogEFzcHzbGCypJM0O8yVhC6Wgb1Ay++h1WQT6vH4hDZ0YmT08uXLbQdbDQedD2NkrLVGRWtJmec/vWDzhrpKhKVHw6qWBkXzZ4Ck9b957U9nzpzR3IA8deoU/9a4sJd5bpr0rhUjgmYLcs3F4cNtqIsg6Vw8BKf+WGui2mvQYaYEqBhIc7O0sOHq5csOgNq1e++z+TlxrTuqjOhqtzTfbu8w02wunKROjk9pmgsLhh8NEodOsachUIFNyZeXlRBWWU1JYR6fWxOgq+FD4UrtiYa6mtLCfCtuNt/v2nfAxbdXrnU0N28VQKysWxCAjowPlzmBqrfn61s33OfYeuDQV7fu4BB7BDQ6YhqRt+t+WZmSNYumxzjx9evXHj4czMnKtRuP0i5evHj4SBuWAOspFLQARXBcOT7f4gy1aKcsqzEQnVhjycs3PlxcMG25uqJdqKiqtEXHNqff/Mdv//UXv+jq6hHCEI2PaUDF06J/0gmXLUqaaDcHj0MAWIWThzspmYH4uXfaVmX86zQ0MJcv/5/mz72G7E46OuRg3m120yGx1BtvvOGmNp29bzmiFIzO0PRPWA7GcJRft7G6MD+P+Qy9hDLRjhRO/x6YT5w4AUwAYc8bo9dv2jw0MnTn7tdraRl1TU3uKXucerohzASFhWlWcCuCEN81gYCPHD3kCFcnJfsYE0VxrLVaIaANFr4VXlgJTURe8rEp63N+HRBhCUJMzq81gNO/2FbppOi0PLpm8tI/RWkBvXi4rlJyyYUER8IzfSoVO2+YUYENIRpIMIV5QenKqoaKy/JLCpil69Jg84J5EgKWiyWJiiOKq0iXRWRBDhikRBik4BwDisOMurISY1edcG2bU5hBx49ED3iY/cIg0YtfTuJf1D0xUbr3CAkPN+YbuJKoSqq/ACLP6etD9E8PUV6/UBEWALQoyuXS2AMjHfNSwICU6wV7ALzgHGa5pCCL6oOi9MBW8rEmdWEm6lAuSEWi4FBByBB0S2nwWJuiLimQcBUkIOGckMuVhT2nSDEUEriN7ST8AKSoesiBjFp9ziS1K0gWYEphwwulAUMFG+oIlhRUr21UkCtL/YpyER9az2JgPJlmDBPqIRqWiAcXGWFVMwiDRwowvxIBAJMoBYfRHObcE5cTUofvZcE4KhqwRC0tb1GWmBRFNMWdukMJEqVAgj3pJAJPilA8GaQhAYD2/MqlW/wTxL/US2oYAOtuSs31JYv72lgIraDqetQayqGQqD1lUQEPDx4Shr/7nsSAIMoezPHnyoh/0qFFz9FJ/GIbCRJBBUCKXBQRwjnMiuBNOuaRoCj7p/FpBQADEjEAUllG9BvFV5xRuI22SC42pGPbQxUeKQriLf6CRwJvUV1eYIPBv349igOItJ5LJNe7LH13lBQegmMDq9E3MI8cAaXIIg4kHuqVBTMR4FEEDP/U3mq05UYqtE1kuVGE6CeUhlB8oAUMIeQ4kUiBKCoCLRIadpx4JxQlUx1U1AI4Mg+DmSJIosjYkKuIf6GiQzxLkQ4nKpCY40s6uNCyWZmAHE6/6HISSgapFcQneKjIGFmChIDeFdRbAYZcWTi5HzDvSqWn2QU0n5+bl5Xp2K6KbS3bJ0fHNDDowGAJ1i9JcU5wDR61iNEZiB4dEqVZc+YPDvXRNCDo+v4Pf9DT1T03O6vTtABuC5AptuKZsOczOye/ZnPdC673Hh+bW1xxOsXQozGfE7CpcaAIB/6q0or7395T9fApmFQlrQBqvTGvXrAaMXUf/tXrOZdSi0t79lYQSmdQWVCgXUHUtwruIxKC+9YAKkGzNqSkfMPm6lqDN2djLC08tTW5otx1t2Eug0o9SPCTyamJ9o5rhQWGOs0bVtfBbLDMVcQePh3HET1bVaBeJ3S3t18xz+gKEVLIOvv6G+ayMUnttuayjgkMbb7+TnwrHjDwUg2NHBDSarg4zOGkvrHmAL6eZBGfJo+Oj8+nz1WFW9gKBSc7W3bT85ZtYdxldFJaVml3i6VzPZUAwde2RhQ+pxafC7S0bcHEhcVU9PHHH2uzRKwZmmt+YnxgQdOBJxZ6fOSAmONAtWN6LRwkHN9pri4Z6L9n3CvuefGlbRNPppIBR9PKamgj7DYbH59MTaUU7O7uZRxuxEWS6Nb8cbGJRo5CEbTJ+WKVUwGC30xOcpG+/vtCHwMdVUKk5VwXG92EAkzukoje9i/J4/tum9RxZV+Xg4k2bmqYmQ3fYjpACqTLv+h3oL/P9jW7etxftmPbS44zf5Ca3LVn393uXmExTk6fPm2kSCihIV2oV+Er8rBRZ0of92x2xhflB/a3uhtYloaYkbhgUkWfuWJJZPbJJ5/Yb6M4y6FOFn7PqILdwUdDNiZxccfA62/xo7ipcQAxQFf5CWvaXrMC3vmOqNy8eQsnRFDQPBO19HV1xw6P07hOD1cGkeUVJRY9TIobh1Dm986+YakBCQipUYpGwYlA/lXreLOqRcz29nZfsjoRqGVLi7J8FM80LID+w/k/GsyoMI8GH77zzjtm353eNTYxYQ3EAtGz+YXa+/fcJsEFFSGOETNRGQg2h/ebIXPWftShtQiNBUOQi/8oQmPYYGvx6O5d2x/295YV5zc0NI6MA5lZWl2fkZk7NDI+ODx2/9vexYVntVWlqcnx1NTk1hfrazbW5xWV/7Dph5RgOyOeaVvTY6xltKae20XjvaSk+NatW8aQ9hc01DfZVmTS/aPf/95Ixj1/Tsj54IMPuKsdJNoCY+ux0YUHff1cyPS2mFX0T3vEgR/DL9jWsrpi/t4Q4pVXXvn80sXZ+XCF4YHWg2zHgiQlFJb4sE8UVCe6Vf9F7arA22+/jSVgIiSrGYK0fXt2O2AnmWg0s5IKvpR6sn//Xoukdg2x18bN9WfPnnXnw8RYz9L8gh2RRiPcCQl47OBSsVUKrSfv0piyrDola9+eXXNPw/SksQTxDblJIYspo3HZnRW0j9oXPOOhOD8HBuJs37l35+5dvU7BWllt3LTJ5nY+SRaOOjT71B6/nrt3FHGlCAyPp55Qu34p14mu+YWTqbC/fH553DwK/kmtp6E9zZnOAGPeea+vcSCU6MGSdIGX5pLePP6NDSuGAYCnLJ7vnRR8L44qUeeiZJSLH8qHM/bZrCmRovAAmz4MQsywptoEoXfY5EZ+wMAgBZKIJ+ZyRPxDxUurq/PAqIMApACgbRSjgNB6QVE6xmAOx8wlW+EBhxqRxBxS6Ac5KVFYhiCCglYAUAEQecOY6qkn0xTQPzC2lqgU/vUBwPyLLpGjgegwvsiiOiRwgpb3iAESesC2RC+8CIwn6kE/h1X4aY+MUSFyIZEOQ1QFVtElTrQUd8IMViGJKVhSFg9+KTDiJBfqOIcHwqg94TqvQA4GxUEqBT/ecCgLG1L8AoAWfrnSMUCN8AODDRVZvAIMKtpqnZe9iQpK94DHwHfYssKaKjCodHDofseMRawk4kSd1OQir1KRhJRYCjayy3r8eMyyhU2h+lqrdgBs+ofNRgVDKqakZx1NokaxV4j+YQMQY3Tw0SjY8EIcuRiQLkXFJKZ3nKMFiWYEjBRoGRoe9cW7LFrlA1aMBRZ8KSqTVtUOPOOfsJDjHLB3Kd4NSDDpkaiURHKxo+I0QJP4xA8AZcFEv8VVRAgYD34B8Ew8Y5UgUTlW+E33wyYdGJwweI8VE3WQZPGvJyqcmBLhRxSTXoAh7QWJwHDSgqFOk8G7VsOuD+naJf+ixYEV9K4IYHgww7j+xZsUPPiNiTBLpDoIOYZ077BhlVa9UJ1WXd2JhoMZG3AKUcjrBcNeAMDPFgasMTFWvSgvnMgpSwmA6VmKd62uIipg1K3wERKC0DmGUfevUh7vePOg7l8YcItDzHMStPBJb3IVoUzFkRgZmUm3wp4Wwm6mVB0QNffvkEM+KMSQgjGowPtUHd0nqVUrAB5S0Am6BATAamC8oI5h9SIqc0EoaLfS8oqBKGBEuWg4BdEyz6ozHseMl835KugSADdpKmUzDG6nbUZZCKMI07INTc129k895qXu33Rsd70NFydOnnr//fdN4ImEBoaGqtUC2y+dmlhSurmuweb2leX5nTtbTMPXN9Th7Yk7KDMyvuj8wt4eQyntAMYo1gBAh8sQ+t8b1zsYTiK1B7WuLO/atdPXo44tIlFFeWVdXQOPUo/Ai1Lc7aNBz83Jd9qKDf6+JysprXAAf1//gOFSeWmBk9mL8os5qa8wfKDkmjA4hfJ3O79eXVqcnXkqxLBAaB+lveVWc1lKn66f9cmE3tLuf6slbW0HnZ8h7DQiIojDfybGxfDj6hoe6d82cgoRB6pQljUgmZpOOVjywb17u7ZtSX9hxdXMFMu7jVCZABK2IKk5kMNth3zRxyX0/iPDYyOjJvRuG6Q7I7Gv/x47OxAJoXf+7m+VEpRWhdtg+776+htBYHlVdWguVQa4+YSNWcn23DBvVCfcTLo6vmXJU+7Ro0dVRXoxY+0WJ+0vV+i613uw9UXsclb+JKSjfZR4sNDTuLq3p5MihICxAqsDvFyYeOnS57o9U8JiUD276W0kTKnSnRcAiX8/YiozprA5lxM/lo/tZ2DLKL/ljE31Wy0zYcan2bdvfWPMB4mnqqIcKrsjAvLmLUNDA431Db7C5DQBT9JGqA4cxaKHgP769XaJBhtB6oVZHzN4cduLiZv09eFEDnxiTAPE21Qz9U1MA0ZLpEkSfhFf7jc37+C2rKKc62tTsOrgHbmmZrlsWXGJs1+6OjtfdfFqaSmTu/RBrY4VnhMIag8dPcIJrJQJClFU4YV3hnBENuKEFk4VwIsewthDXMgQEkFixgtXUDB6CSvAqRGR/vc/+4d3332XuY1ekOZnfMgv6UQ8Ki08RKMiTnzy1ClXfxcXFWY/W3CDmPUMwDSWnVzKQ282jvvoJ3d9Wkf33fBNfHLgHeszMXeiHwwPPujn4i+//LI56ZqqqvKyoqOtu2/e7Ehbn+0QwS+udqylZdY3veQrHJp0ClmYFK8p//A/f1tRmnfm5Vc7u3ufzY3UbMyhGYsYMLOLYRuJDABo0ie2dP7ZZ59pammjre1QysmeG7L4G7eJBgLAvt097gNvsrNL4MEuRiMWZ/A2bSNgEq4Z51mydGpBfoF7C8L+N2bdu/9A38MBZ2aJvFWYzNyMvu5upWiJizIKVCDpjfaMGRQhO0NItJa1feuWlpYtrP/jn/6NoYtzDNirt/fe9Zs3XCdaXFpiSc3goe3wUc5DBMfvfP8v31SJxcEchtUsizGQpp90bMqIFGuBCF1Osrq8mHo8fuvmjVOnTtG2LJ6PEIloUs1VfRQHbH3gtddeI/uXX1x0W/s3dzuxiiJZ3PMArSbYqchT4YPyjI21zY+LJzdWVTKKem3ixNWG0rNzC3ykaXJ1ZGLKLNXI5Dijwx/UOO30tmcIVZdXSSRO0MPadwE3V9QkaaTYAh63OONNy6PhMzOhOCT4B8BwKho3o1IDZqpTOzxGROoIJe9s2U4Pinh4MqKkjo2PFkal4JngMeAdEgCxEgHDGE4wGcFgYCZ0qSvC4M20igqlfhmnAYi51KisUoojKpF0SEgMqyVJcCnRAyZmqSy4BQCzR6J3YvqS3rs2kLBshCsNHciY4h1MRIgZctloJ5d6+QA2sKpGI+QdAMzUCJUUaMkr/vACj1wvlKbWEAROnEczRVoQ4pY2gNGSIoySWCqoThDAjUkRBYEBQkQRipqMRKFSCjxZwEBFTJCaFPid5VVcqCoFPYOHHIDHvxpnZVmKS0SLKAg5NkjkhaQeufCDhxyTpPDALx2HzuTRVyUfMgYrKOshI0J79u7SUEOlFGwwwAPh0mIYfihOz15UsSg15SgFDAYcepeO/6JiEzHzqSch6Acvl7BEc2EgiWpqwi5hq/CJm4V9X/l5xYnBg8VJB2EUgRExgwEYKJZlSQ0PYPr04AR+/aBOlu9BrqwuMuKhT8uA9G82UVNAIgB4VlxrYD0ZV9D6jS90q7jHcEU65uHBJKEQVRZXkZmoB/hxC0YW2WkbpH+xBAwGXiRk8SKXmJSMDROWtKII0SIV6WR57sOUg0NsQx6tgAfvHnxiMvLpFz/A1CkAdAUDAGzU1G5S0L9IUBp/1jgQQSKKUVgsETCiik7oHQDOUY96QFEi3siFUHwIiC5BKB8YzWOAw0OorIBSYxIJAfOYAexIjnpTEAzleBgUV5SAPR2T1gMVxXWpqFMI3eJf6+QFXazKRciDJcr0KzESIh0kHghlwYwQ5fsFT15Zsa6ZYLLJtiAnGxUIAUQZE1fU+6drDQxZ/cudNAtGCs7Mh3BtfVhy4X4k8qImYo+k9AkPeELBiSs7nAXiBgxTT6Z8lQePJfo9LTvQsreCEtwHBQm96VuNBDSEhw+2WnG509WpJ83MynS4BYSHjxyB04L28MNB8C7bYcH33ntvU31dZWUYANhUbHobM47lMZto/lsgavBOh+f+97+zsn2nkdM3OWYzzEcffeT7WrO3zCSCUkQsTBXQkoiGSWq2VD9SXlpmE47RshUJ1NndTmPu4bounmzeGw/TT+8T06e9GnxHnmRl5y0vrcvOzafqxaVnmRvWOX503apdqWEu1TICDTgjXuWxDYnSrrZf2duynwO88sprtIEZnCCh+z525JBg0jzs4NADyqR2oRxI7bkwQ9fGlHe+uo3txoYGvo09rmLi+NNPPxW3sH5n993Y9o76Nqy0jHWCO6XCINxK+uCjkVtf3Who3PLWW2/ZkA8/0m4pBqM3N5/b09NJKINofuWoSTOP2hbqNS6zxV0VG3gwaIbu/wG/Pm7LaDmw+wAAAABJRU5ErkJggg==\",\n      \"image/jpeg\": \"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\"\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"load_image(\\\"/Users/xprobe/.xinference/image/f02f5baa71fe434eb112cfbc4ca79d3d.jpg\\\")\"\n   ],\n   \"metadata\": {\n    \"collapsed\": false,\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-04-19T06:37:21.191533Z\",\n     \"start_time\": \"2024-04-19T06:37:21.090008Z\"\n    }\n   },\n   \"id\": \"88bcf0143222d050\",\n   \"execution_count\": 10\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 2\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython2\",\n   \"version\": \"2.7.6\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "examples/FunctionCall.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Xinference is a powerful tool that supports function calling and is fully compatible with OpenAI's Tool Call API. It allows you to seamlessly integrate and utilize the functionality of OpenAI's tools within your own projects.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Preparation\\n\",\n    \"\\n\",\n    \"First, you need to install Xinference:\\n\",\n    \"```shell\\n\",\n    \"pip install xinference\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Currently, ChatGLM3 / qwen-chat and gorilla-openfunctions-v1 models are available for tool calls. Here, we install a chatglm cpp for fast inference on Mac. If you are not using a Mac, please follow the install instruction: https://github.com/li-plus/chatglm.cpp#python-binding\\n\",\n    \"\\n\",\n    \"```shell\\n\",\n    \"CMAKE_ARGS=\\\"-DGGML_METAL=ON\\\" pip install -U chatglm-cpp --no-cache-dir\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Then, start the Xinference server by the following command:\\n\",\n    \"```shell\\n\",\n    \"xinference\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"The Xinference server will be started:\\n\",\n    \"\\n\",\n    \"```shell\\n\",\n    \"2023-11-02 16:04:55,278 xinference   38878 INFO     Xinference successfully started. Endpoint: http://127.0.0.1:9997\\n\",\n    \"2023-11-02 16:04:55,280 xinference.core.supervisor 38878 INFO     Worker 127.0.0.1:32187 has been added successfully\\n\",\n    \"2023-11-02 16:04:55,281 xinference.deploy.worker 38878 INFO     Xinference worker successfully started.\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Finally, we launch a ChatGLM3 model for tool calls.\\n\",\n    \"```shell\\n\",\n    \"xinference launch -u my_tool_model -n chatglm3 -f ggmlv3 -q q4_0\\n\",\n    \"```\\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Function calling\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This is an exciting game that showcases the function calling feature. Our objective is to call the AI and obtain a set of lottery numbers to determine if we are lucky enough to win the lottery. To get started, we first need to define a simple function for generating lottery numbers.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import random\\n\",\n    \"\\n\",\n    \"list_red = list(range(1, 34))\\n\",\n    \"list_blue = list(range(1, 17))\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def get_lucky_lottery(num):\\n\",\n    \"    total = []\\n\",\n    \"    for _ in range(num):\\n\",\n    \"        res_red = random.sample(list_red, 6)\\n\",\n    \"        res_blue = random.sample(list_blue, 1)\\n\",\n    \"        total.append(res_red + res_blue)\\n\",\n    \"    return total\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Then, we describe two functions as a dict, more details refers to https://platform.openai.com/docs/api-reference/chat/create#chat-create-tools\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"tools = [\\n\",\n    \"    {\\n\",\n    \"        \\\"type\\\": \\\"function\\\",\\n\",\n    \"        \\\"function\\\": {\\n\",\n    \"            \\\"name\\\": \\\"get_lucky_lottery\\\",\\n\",\n    \"            \\\"description\\\": \\\"生成双色球彩票号码\\\",\\n\",\n    \"            \\\"parameters\\\": {\\n\",\n    \"                \\\"type\\\": \\\"int\\\",\\n\",\n    \"                \\\"properties\\\": {\\\"num\\\": {\\\"description\\\": \\\"生成的彩票号码组数\\\"}},\\n\",\n    \"                \\\"required\\\": [\\\"num\\\"],\\n\",\n    \"            },\\n\",\n    \"        },\\n\",\n    \"    },\\n\",\n    \"    {\\n\",\n    \"        \\\"type\\\": \\\"function\\\",\\n\",\n    \"        \\\"function\\\": {\\n\",\n    \"            \\\"name\\\": \\\"lottery_draw\\\",\\n\",\n    \"            \\\"description\\\": \\\"开奖双色球\\\",\\n\",\n    \"            \\\"parameters\\\": {\\n\",\n    \"                \\\"type\\\": \\\"object\\\",\\n\",\n    \"                \\\"properties\\\": {},\\n\",\n    \"            },\\n\",\n    \"        },\\n\",\n    \"    },\\n\",\n    \"]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Define a function to call above two functions according to the response.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import functools\\n\",\n    \"import json\\n\",\n    \"\\n\",\n    \"FUNCTION_TABLE = {\\n\",\n    \"    \\\"get_lucky_lottery\\\": get_lucky_lottery,\\n\",\n    \"    \\\"lottery_draw\\\": functools.partial(get_lucky_lottery, 1),\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def handle_response(completion):\\n\",\n    \"    assert \\\"tool_calls\\\" == completion.choices[0].finish_reason\\n\",\n    \"    func_name = completion.choices[0].message.tool_calls[0].function.name\\n\",\n    \"    func_args = completion.choices[0].message.tool_calls[0].function.arguments\\n\",\n    \"    func_kwargs = json.loads(func_args)\\n\",\n    \"    return FUNCTION_TABLE.get(func_name)(**func_kwargs)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Finally, let's ask the LLM to generate 5 group lottery numbers and check if we win the game.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import openai\\n\",\n    \"\\n\",\n    \"client = openai.Client(api_key=\\\"not empty\\\", base_url=f\\\"http://127.0.0.1:9997/v1\\\")\\n\",\n    \"completion = client.chat.completions.create(\\n\",\n    \"    model=\\\"my_tool_model\\\",\\n\",\n    \"    messages=[{\\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"帮我生成5组双色球号码\\\"}],\\n\",\n    \"    tools=tools,\\n\",\n    \")\\n\",\n    \"print(f\\\"Lottery numbers: {handle_response(completion)}\\\")\\n\",\n    \"completion = client.chat.completions.create(\\n\",\n    \"    model=\\\"my_tool_model\\\", messages=[{\\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"开奖\\\"}], tools=tools\\n\",\n    \")\\n\",\n    \"print(f\\\"Lottery draw: {handle_response(completion)}\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"No lucky, I lose the game.\\n\",\n    \"\\n\",\n    \"```\\n\",\n    \"Lottery numbers: [[30, 9, 22, 26, 17, 27, 14], [8, 6, 27, 30, 21, 20, 13], [4, 33, 9, 32, 27, 22, 14], [19, 1, 30, 4, 28, 13, 7], [16, 7, 23, 17, 8, 30, 12]]\\n\",\n    \"Lottery draw: [[29, 10, 27, 30, 15, 6, 1]]\\n\",\n    \"```\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "examples/LangChain_QA.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# LangChain QA Application with Xinference and LangChain\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This demo walks through how to build an LLM-driven question-answering (QA) application with Xinference, Milvus, and LangChain.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Deploy Xinference Locally or in a Distributed Cluster.\\n\",\n    \"\\n\",\n    \"For local deployment, run `xinference`. It will log an endpoint for you to use.\\n\",\n    \"\\n\",\n    \"To deploy Xinference in a cluster, first start an Xinference supervisor using the `xinference-supervisor`. You can also use the option -p to specify the port and -H to specify the host. The default port is 9997. If the default port is used, Xinference will choose an unused port for you. It will also log the endpoint for you to use.\\n\",\n    \"\\n\",\n    \"Then, start the Xinference workers using `xinference-worker` on each server you want to run them on. \\n\",\n    \"\\n\",\n    \"You can consult the README file from [Xinference](https://github.com/xorbitsai/inference) for more information.\\n\",\n    \"## Start a Model\\n\",\n    \"\\n\",\n    \"To use Xinference with LangChain, you need to first launch a model. You can use command line interface (CLI) to do so:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model uid: 19c73cee-3506-11ee-b286-fa163e74fa2d\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"!xinference launch --model-name \\\"falcon-instruct\\\" --model-format pytorch --size-in-billions 40 -e \\\"http://127.0.0.1:56256\\\"\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The command will return a model UID for you to use.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Prepare the Documents\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from langchain.document_loaders import TextLoader\\n\",\n    \"from langchain.text_splitter import RecursiveCharacterTextSplitter\\n\",\n    \"\\n\",\n    \"loader = TextLoader(\\\"/home/nijiayi/inference/examples/state_of_the_union.txt\\\") # Replace with the path of the document you want to query from\\n\",\n    \"\\n\",\n    \"documents = loader.load()\\n\",\n    \"\\n\",\n    \"text_splitter = RecursiveCharacterTextSplitter(\\n\",\n    \"    chunk_size = 512,\\n\",\n    \"    chunk_overlap  = 100,\\n\",\n    \"    length_function = len,\\n\",\n    \")\\n\",\n    \"docs = text_splitter.split_documents(documents)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Set Up an Embedding Model\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from langchain.embeddings import XinferenceEmbeddings\\n\",\n    \"\\n\",\n    \"xinference_embeddings = XinferenceEmbeddings(\\n\",\n    \"    server_url=\\\"http://127.0.0.1:56256\\\", \\n\",\n    \"    model_uid = \\\"19c73cee-3506-11ee-b286-fa163e74fa2d\\\" # model_uid is the uid returned from launching the model\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Connect to the Vector Database\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"For vector store, we use the Milvus vector database. [Milvus](https://milvus.io/docs/overview.md) is a database that stores, indexes, and manages massive embedding vectors generated by deep neural networks and other machine learning models. To run, you can first [Install Milvus Standalone with Docker Compose](https://milvus.io/docs/install_standalone-docker.md), or use Milvus Lite in the following way:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"vscode\": {\n     \"languageId\": \"bat\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"$ pip install milvus\\n\",\n    \"\\n\",\n    \"$ milvus-server\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from langchain.vectorstores import Milvus\\n\",\n    \"\\n\",\n    \"vector_db = Milvus.from_documents(\\n\",\n    \"    docs,\\n\",\n    \"    xinference_embeddings,\\n\",\n    \"    connection_args={\\\"host\\\": \\\"0.0.0.0\\\", \\\"port\\\": \\\"19530\\\"},\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Query about the Document\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"One of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \\n\",\n      \"\\n\",\n      \"And I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"query = \\\"what does the president say about Ketanji Brown Jackson\\\"\\n\",\n    \"docs = vector_db.similarity_search(query, k=10)\\n\",\n    \"print(docs[0].page_content) \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Model Inference Based on the Document\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Now, we use Llama 2 Chat model supported by Xinference for inference task. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model uid: 333e1d68-3507-11ee-a0d6-fa163e74fa2d\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"!xinference launch --model-name \\\"llama-2-chat\\\" --model-format ggmlv3 --size-in-billions 70 -e \\\"http://127.0.0.1:56256\\\"\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from langchain.llms import Xinference\\n\",\n    \"\\n\",\n    \"xinference_llm = Xinference(\\n\",\n    \"    server_url=\\\"http://127.0.0.1:56256\\\",\\n\",\n    \"    model_uid = \\\"333e1d68-3507-11ee-a0d6-fa163e74fa2d\\\" # model_uid is the uid returned from launching the model\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"First, we can query the LLM without using the document:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'\\\\nWhat did the president say about Ketanji Brown Jackson?\\\\nPresident Joe Biden called Judge Ketanji Brown Jackson a \\\"historic\\\" and \\\"inspiring\\\" nominee when he introduced her as his pick to replace retiring Supreme Court Justice Stephen Breyer. He highlighted her experience as a public defender and her commitment to justice and equality, saying that she would bring a unique perspective to the court.\\\\n\\\\nBiden also praised Jackson\\\\'s reputation for being a \\\"fair-minded\\\" and \\\"thoughtful\\\" jurist who is known for her ability to build'\"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"xinference_llm(prompt=\\\"What did the president say about Ketanji Brown Jackson?\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We now query using the document to compare the result. We can create a memory object to track the chat history.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from langchain.memory import ConversationBufferMemory\\n\",\n    \"memory = ConversationBufferMemory(memory_key=\\\"chat_history\\\", return_messages=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Now we create ConversationalRetrievalChain with chat model and the vectorstore.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from langchain.chains import ConversationalRetrievalChain\\n\",\n    \"\\n\",\n    \"chain = ConversationalRetrievalChain.from_llm(\\n\",\n    \"    llm=xinference_llm,\\n\",\n    \"    retriever=vector_db.as_retriever(),\\n\",\n    \"    memory=memory)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Now, we can query information from the document. Instead of simply returning identical sentences from the document, the model generates responses by summarizing relevant content. Furthermore, it can relate a new query to the chat history, creating a chain of responses that build upon each other. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"' According to the provided text, President Biden said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to serve on the United States Supreme Court 4 days ago, and that she is one of our nation’s top legal minds who will continue Justice Breyer’s legacy of excellence.'\"\n      ]\n     },\n     \"execution_count\": 21,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"query = \\\"What did the president say about Ketanji Brown Jackson\\\"\\n\",\n    \"result = chain({\\\"question\\\": query})\\n\",\n    \"result[\\\"answer\\\"]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We can see that the LLM is capable of using the provided document to answer questions and summarize content. We can ask a few more questions:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 22,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'  According to the given text, President Biden said that Ketanji Brown Jackson succeeded Justice Breyer on the Supreme Court.'\"\n      ]\n     },\n     \"execution_count\": 22,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"query = \\\"Did he mention who she succeeded\\\"\\n\",\n    \"result = chain({\\\"question\\\": query})\\n\",\n    \"result[\\\"answer\\\"]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The LLM accurately recognizes that \\\"he\\\" refers to \\\"the president\\\", and \\\"she\\\" refers to \\\"Ketanji Brown Jackson\\\" mentioned in the previous query. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'  According to the text, the president views COVID-19 as a \\\"God-awful disease\\\" and wants to move forward in addressing it in a unified manner, rather than allowing it to continue being a partisan dividing line.'\"\n      ]\n     },\n     \"execution_count\": 24,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"query = \\\"Summarize the President's opinion on COVID-19\\\"\\n\",\n    \"result = chain({\\\"question\\\": query})\\n\",\n    \"result['answer']\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We can see the impressive capabilities of the LLM, and LangChain's \\\"chaining\\\" feature also allows for more coherent and context-aware interactions with the model.\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"base\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.10.10\"\n  },\n  \"orig_nbformat\": 4\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "examples/LangChain_Streamlit_Doc_Chat.py",
    "content": "import streamlit as st \nfrom langchain.llms import Xinference\nfrom langchain.embeddings import XinferenceEmbeddings\nfrom langchain.prompts import PromptTemplate\nfrom langchain.chains import LLMChain\nfrom langchain.document_loaders import TextLoader\nfrom langchain.text_splitter import CharacterTextSplitter\nfrom langchain.vectorstores import Chroma\n\n# Customize the layout\nst.set_page_config(page_title=\"Local AI Chat Powered by Xinference\", page_icon=\"🤖\", layout=\"wide\") \n\n# Write uploaded file in temp dir\ndef write_text_file(content, file_path):\n    try:\n        with open(file_path, 'w') as file:\n            file.write(content)\n        return True\n    except Exception as e:\n        print(f\"Error occurred while writing the file: {e}\")\n        return False\n\n# Prepare prompt template\nprompt_template = \"\"\"\n使用下面的上下文来回答问题。\n如果你不知道答案，就说你不知道，不要编造答案。\n{context}\n问题: {question}\n回答:\"\"\"\nprompt = PromptTemplate(template=prompt_template, input_variables=[\"context\", \"question\"])\n\n# Initialize the Xinference LLM & Embeddings\nxinference_server_url = \"http://localhost:9997\"\nllm = Xinference(server_url=xinference_server_url, model_uid=\"my_llm\")\nembeddings = XinferenceEmbeddings(server_url=xinference_server_url, model_uid=\"my_embedding\")\nllm_chain = LLMChain(llm=llm, prompt=prompt)\n\nst.title(\"📄文档对话\")\nuploaded_file = st.file_uploader(\"上传文件\", type=\"txt\")\n\nif uploaded_file is not None:\n    content = uploaded_file.read().decode('utf-8')\n    file_path = \"/tmp/file.txt\"\n    write_text_file(content, file_path)   \n    \n    loader = TextLoader(file_path)\n    docs = loader.load()    \n    text_splitter = CharacterTextSplitter(chunk_size=300, chunk_overlap=0)\n    texts = text_splitter.split_documents(docs)\n    db = Chroma.from_documents(texts, embeddings)    \n    st.success(\"上传文档成功\")\n    \n    # Query through LLM    \n    question = st.text_input(\"提问\", placeholder=\"请问我任何关于文章的问题\", disabled=not uploaded_file)    \n    if question:\n        similar_doc = db.similarity_search(question, k=1)\n        st.write(\"相关上下文：\")\n        st.write(similar_doc)\n        context = similar_doc[0].page_content\n        query_llm = LLMChain(llm=llm, prompt=prompt)\n        response = query_llm.run({\"context\": context, \"question\": question})        \n        st.write(f\"回答：{response}\")\n"
  },
  {
    "path": "examples/StableDiffusionControlNet.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Xinference can start the Stable Diffusion model with ControlNet. MLSD ControlNet(_https://huggingface.co/lllyasviel/sd-controlnet-mlsd_) is good for finding straight lines and edges. This makes it particularly useful for architecture like room interiors and isometric buildings. This notebook shows how to use Xinference with Stable Diffusion model and MLSD ControlNet.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Preparation\\n\",\n    \"\\n\",\n    \"First, you need to install Xinference with image support:\\n\",\n    \"```shell\\n\",\n    \"pip install xinference[image]\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"Then, start the Xinference server by the following command:\\n\",\n    \"```shell\\n\",\n    \"xinference\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"The Xinference server will be started:\\n\",\n    \"\\n\",\n    \"```shell\\n\",\n    \"2023-11-02 16:04:55,278 xinference   38878 INFO     Xinference successfully started. Endpoint: http://127.0.0.1:9997\\n\",\n    \"2023-11-02 16:04:55,280 xinference.core.supervisor 38878 INFO     Worker 127.0.0.1:32187 has been added successfully\\n\",\n    \"2023-11-02 16:04:55,281 xinference.deploy.worker 38878 INFO     Xinference worker successfully started.\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Start the Stable Diffusion model with MLSD ControlNet\\n\",\n    \"\\n\",\n    \"Now, we have an inference server running at `http://127.0.0.1:9997` with empty models. Let's launch the Stable Diffusion model.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from xinference.client import Client\\n\",\n    \"\\n\",\n    \"client = Client(\\\"http://127.0.0.1:9997\\\")\\n\",\n    \"\\n\",\n    \"model_uid = client.launch_model(\\n\",\n    \"    model_uid=\\\"my_controlnet\\\",\\n\",\n    \"    model_name=\\\"stable-diffusion-v1.5\\\",\\n\",\n    \"    model_type=\\\"image\\\",\\n\",\n    \"    controlnet=\\\"mlsd\\\",\\n\",\n    \")\\n\",\n    \"model = client.get_model(model_uid)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Use MLSDdetector to generate a straight line images from the input image.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=512x512>\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import os\\n\",\n    \"from controlnet_aux import MLSDdetector\\n\",\n    \"from diffusers.utils import load_image\\n\",\n    \"\\n\",\n    \"mlsd = MLSDdetector.from_pretrained(\\\"lllyasviel/ControlNet\\\")\\n\",\n    \"image_path = os.path.expanduser(\\\"draft.png\\\")\\n\",\n    \"image = load_image(image_path)\\n\",\n    \"image = mlsd(image)\\n\",\n    \"image\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Call the `image_to_image` API to the Xinference to get the result.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'created': 1698915298,\\n\",\n       \" 'data': [{'url': '/Users/codingl2k1/.xinference/image/0dc3a20621044d22b27bbd5746e33bc7.jpg',\\n\",\n       \"   'b64_json': None}]}\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import io\\n\",\n    \"\\n\",\n    \"prompt = (\\n\",\n    \"    \\\"a modern house, use glass window, best quality, 8K wallpaper,(realistic:1.3), \\\"\\n\",\n    \"    \\\"photorealistic, photo realistic, hyperrealistic, orante, super detailed, \\\"\\n\",\n    \"    \\\"intricate, dramatic, morning lighting, shadows, high dynamic range,wooden,blue sky\\\"\\n\",\n    \")\\n\",\n    \"negative_prompt = (\\n\",\n    \"    \\\"low quality, bad quality, sketches, signature, soft, blurry, drawing, \\\"\\n\",\n    \"    \\\"sketch, poor quality, ugly, text, type, word, logo, pixelated, \\\"\\n\",\n    \"    \\\"low resolution, saturated, high contrast, oversharpened\\\"\\n\",\n    \")\\n\",\n    \"bio = io.BytesIO()\\n\",\n    \"image.save(bio, format=\\\"png\\\")\\n\",\n    \"result_image = model.image_to_image(\\n\",\n    \"    image=bio.getvalue(),\\n\",\n    \"    prompt=prompt,\\n\",\n    \"    negative_prompt=negative_prompt,\\n\",\n    \"    num_inference_steps=20,\\n\",\n    \")\\n\",\n    \"result_image\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=1024x1024>\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"load_image(\\\"/Users/codingl2k1/.xinference/image/0dc3a20621044d22b27bbd5746e33bc7.jpg\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Conclusion\\n\",\n    \"\\n\",\n    \"ControlNet Stable Diffusion is a state-of-the-art technology that integrates AI image generation with the reliability of ControlNet. By leveraging ControlNet techniques, the Stable Diffusion model is able to generate high-quality, realistic images based on user input.\\n\",\n    \"\\n\",\n    \"Xinference allows users to deploy models themselves and programmatically generate images in batches.\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.9\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "examples/Xinference_Quick_Start.ipynb",
    "content": "{\n  \"cells\": [\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"WoegBf2gjiW4\"\n      },\n      \"source\": [\n        \"> **NOTE**: This tutorial will demonstrate how to utilize the GPU provided by Colab to run LLM with Xinference local server, and how to interact with the model in different ways (OpenAI-Compatible endpoints/Xinference's builtin Client/LangChain).\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"FAhwDgtUGIEo\"\n      },\n      \"source\": [\n        \"# Xinference\\n\",\n        \"\\n\",\n        \"Xorbits Inference (Xinference) is an open-source platform to streamline the operation and integration of a wide array of AI models. With Xinference, you’re empowered to run inference using any open-source LLMs, embedding models, and multimodal models either in the cloud or on your own premises, and create robust AI-driven applications.\\n\",\n        \"\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"WzJegrOpGH4N\"\n      },\n      \"source\": [\n        \"\\n\",\n        \"* [Docs](https://inference.readthedocs.io/en/latest/index.html)\\n\",\n        \"* [Built-in Models](https://inference.readthedocs.io/en/latest/models/builtin/index.html)\\n\",\n        \"* [Custom Models](https://inference.readthedocs.io/en/latest/models/custom.html)\\n\",\n        \"* [Deployment Docs](https://inference.readthedocs.io/en/latest/getting_started/using_xinference.html)\\n\",\n        \"* [Examples and Tutorials](https://inference.readthedocs.io/en/latest/examples/index.html)\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"LovckG0kGr9j\"\n      },\n      \"source\": [\n        \"## Set up the environment\\n\",\n        \"\\n\",\n        \"> **NOTE**: We recommend you run this demo on a GPU. To change the runtime type: In the toolbar menu, click **Runtime** > **Change runtime typ**e > **Select the GPU (T4)**\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"bPDeDltCGABt\"\n      },\n      \"source\": [\n        \"### Check memory and GPU resources\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 1,\n      \"metadata\": {\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\"\n        },\n        \"id\": \"qhoItBBhF7uY\",\n        \"outputId\": \"95957bb9-caa2-482b-b5bb-8224da56e20f\"\n      },\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"name\": \"stdout\",\n          \"text\": [\n            \"RAM: 12.67 GB\\n\",\n            \"=============GPU INFO=============\\n\",\n            \"Mon May 13 03:10:49 2024       \\n\",\n            \"+---------------------------------------------------------------------------------------+\\n\",\n            \"| NVIDIA-SMI 535.104.05             Driver Version: 535.104.05   CUDA Version: 12.2     |\\n\",\n            \"|-----------------------------------------+----------------------+----------------------+\\n\",\n            \"| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |\\n\",\n            \"| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |\\n\",\n            \"|                                         |                      |               MIG M. |\\n\",\n            \"|=========================================+======================+======================|\\n\",\n            \"|   0  Tesla T4                       Off | 00000000:00:04.0 Off |                    0 |\\n\",\n            \"| N/A   46C    P8               9W /  70W |      3MiB / 15360MiB |      0%      Default |\\n\",\n            \"|                                         |                      |                  N/A |\\n\",\n            \"+-----------------------------------------+----------------------+----------------------+\\n\",\n            \"                                                                                         \\n\",\n            \"+---------------------------------------------------------------------------------------+\\n\",\n            \"| Processes:                                                                            |\\n\",\n            \"|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |\\n\",\n            \"|        ID   ID                                                             Usage      |\\n\",\n            \"|=======================================================================================|\\n\",\n            \"|  No running processes found                                                           |\\n\",\n            \"+---------------------------------------------------------------------------------------+\\n\"\n          ]\n        }\n      ],\n      \"source\": [\n        \"import psutil\\n\",\n        \"import torch\\n\",\n        \"\\n\",\n        \"\\n\",\n        \"ram = psutil.virtual_memory()\\n\",\n        \"ram_total = ram.total / (1024**3)\\n\",\n        \"print('RAM: %.2f GB' % ram_total)\\n\",\n        \"\\n\",\n        \"print('=============GPU INFO=============')\\n\",\n        \"if torch.cuda.is_available():\\n\",\n        \"  !/opt/bin/nvidia-smi || ture\\n\",\n        \"else:\\n\",\n        \"  print('GPU NOT available')\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"eFzlnU4gG_JL\"\n      },\n      \"source\": [\n        \"### Install Xinference and dependencies\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": null,\n      \"metadata\": {\n        \"id\": \"1eReutJA_jS_\"\n      },\n      \"outputs\": [],\n      \"source\": [\n        \"%pip install -U -q xinference[transformers] openai langchain\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 3,\n      \"metadata\": {\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\"\n        },\n        \"id\": \"vPq_TWiRQCAA\",\n        \"outputId\": \"81d448f4-4c88-4e02-da25-206ce2d9b412\"\n      },\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"name\": \"stdout\",\n          \"text\": [\n            \"Name: xinference\\n\",\n            \"Version: 0.11.0\\n\",\n            \"Summary: Model Serving Made Easy\\n\",\n            \"Home-page: https://github.com/xorbitsai/inference\\n\",\n            \"Author: Qin Xuye\\n\",\n            \"Author-email: qinxuye@xprobe.io\\n\",\n            \"License: Apache License 2.0\\n\",\n            \"Location: /usr/local/lib/python3.10/dist-packages\\n\",\n            \"Requires: aioprometheus, async-timeout, click, fastapi, fsspec, gradio, huggingface-hub, modelscope, openai, opencv-contrib-python, passlib, peft, pillow, pydantic, pynvml, python-jose, requests, s3fs, sse-starlette, tabulate, timm, torch, tqdm, typer, typing-extensions, uvicorn, xoscar\\n\",\n            \"Required-by: \\n\"\n          ]\n        }\n      ],\n      \"source\": [\n        \"!pip show xinference\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"2EACA0GYHm2o\"\n      },\n      \"source\": [\n        \"## A Quick Start Demo\\n\",\n        \"### Start Local Server\\n\",\n        \"\\n\",\n        \"\\n\",\n        \"To start a local instance of Xinference, run `xinference` in the background via `nohup`:\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 4,\n      \"metadata\": {\n        \"id\": \"5EM01Gq7IQ2y\"\n      },\n      \"outputs\": [],\n      \"source\": [\n        \"!nohup xinference-local  > xinference.log 2>&1 &\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"WXtUJSC3I3kh\"\n      },\n      \"source\": [\n        \"Congrats! You now have Xinference running in Colab machine. The default host and ip is 127.0.0.1 and 9997 respectively.\\n\",\n        \"\\n\",\n        \"\\n\",\n        \"Once Xinference is running, there are multiple ways we can try it: via the web UI, via cURL, via the command line, or via the Xinference’s python client.\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"0mkyrGIHJekz\"\n      },\n      \"source\": [\n        \"The command line tool is `xinference`. You can list the commands that can be used by running:\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 5,\n      \"metadata\": {\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\"\n        },\n        \"id\": \"yayFuLIgJhYX\",\n        \"outputId\": \"a12d7d9f-0c10-406e-9220-533bf8d8a315\"\n      },\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"name\": \"stdout\",\n          \"text\": [\n            \"Usage: xinference [OPTIONS] COMMAND [ARGS]...\\n\",\n            \"\\n\",\n            \"  Xinference command-line interface for serving and deploying models.\\n\",\n            \"\\n\",\n            \"Options:\\n\",\n            \"  -v, --version       Show the current version of the Xinference tool.\\n\",\n            \"  --log-level TEXT    Set the logger level. Options listed from most log to\\n\",\n            \"                      least log are: DEBUG > INFO > WARNING > ERROR > CRITICAL\\n\",\n            \"                      (Default level is INFO)\\n\",\n            \"  -H, --host TEXT     Specify the host address for the Xinference server.\\n\",\n            \"  -p, --port INTEGER  Specify the port number for the Xinference server.\\n\",\n            \"  --help              Show this message and exit.\\n\",\n            \"\\n\",\n            \"Commands:\\n\",\n            \"  chat           Chat with a running LLM.\\n\",\n            \"  engine         Query the applicable inference engine by model name.\\n\",\n            \"  generate       Generate text using a running LLM.\\n\",\n            \"  launch         Launch a model with the Xinference framework with the...\\n\",\n            \"  list           List all running models in Xinference.\\n\",\n            \"  login          Login when the cluster is authenticated.\\n\",\n            \"  register       Register a new model with Xinference for deployment.\\n\",\n            \"  registrations  List all registered models in Xinference.\\n\",\n            \"  terminate      Terminate a deployed model through unique identifier...\\n\",\n            \"  unregister     Unregister a model from Xinference, removing it from...\\n\",\n            \"  vllm-models    Query and display models compatible with vLLM.\\n\"\n          ]\n        }\n      ],\n      \"source\": [\n        \"!xinference --help\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"wvhIEjcHKXc5\"\n      },\n      \"source\": [\n        \"### Run Qwen-Chat\\n\",\n        \"\\n\",\n        \"Xinference supports a variety of LLMs. Learn more in https://inference.readthedocs.io/en/latest/models/builtin/.\\n\",\n        \"\\n\",\n        \"Let’s start by running a built-in model: `Qwen-1_8B-Chat`.\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"z7OyMw8sKjj6\"\n      },\n      \"source\": [\n        \"We can specify the model’s UID using the `--model-uid` or `-u` flag. If not specified, Xinference will generate it. This create a new model instance with unique ID `my-llvm`:\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 6,\n      \"metadata\": {\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\"\n        },\n        \"id\": \"B_hQFqxOKiww\",\n        \"outputId\": \"7c253c82-7a24-48df-c16a-a5da62f89106\"\n      },\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"name\": \"stdout\",\n          \"text\": [\n            \"Launch model name: qwen-chat with kwargs: {}\\n\",\n            \"Model uid: my-llm\\n\"\n          ]\n        }\n      ],\n      \"source\": [\n        \"!xinference launch -u my-llm -n qwen-chat -s 1_8 -f pytorch -en transformers\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"Q--ic56eNDyo\"\n      },\n      \"source\": [\n        \"When you start a model for the first time, Xinference will download the model parameters from HuggingFace, which might take a few minutes depending on the size of the model weights. We cache the model files locally, so there’s no need to redownload them for subsequent starts.\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"cfF-cCFlMCvE\"\n      },\n      \"source\": [\n        \"## Interact with the running model\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"MYKNW0c-MONc\"\n      },\n      \"source\": [\n        \"Congrats! You now have the model running by Xinference. Once the model is running, we can try it out either command line, via cURL, or via Xinference’s python client:\\n\",\n        \"\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"VfZZham7Lj3X\"\n      },\n      \"source\": [\n        \"### 1.Use the OpenAI compatible endpoint\\n\",\n        \"\\n\",\n        \"Xinference provides OpenAI-compatible APIs for its supported models, so you can use Xinference as a local drop-in replacement for OpenAI APIs. For example:\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 7,\n      \"metadata\": {\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\"\n        },\n        \"id\": \"GOStrwtRLehN\",\n        \"outputId\": \"5b68b2b2-48bb-4e60-a5c7-8666e1fcab8a\"\n      },\n      \"outputs\": [\n        {\n          \"output_type\": \"execute_result\",\n          \"data\": {\n            \"text/plain\": [\n              \"ChatCompletion(id='chatff300498-10d7-11ef-97ae-0242ac1c000c', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content=\\\"As an AI language model, I don't have personal experiences or feelings, but I'm designed to assist and provide information on various topics. How can I help you today?\\\", role='assistant', function_call=None, tool_calls=None))], created=1715570535, model='my-llm', object='chat.completion', system_fingerprint=None, usage=CompletionUsage(completion_tokens=35, prompt_tokens=23, total_tokens=58))\"\n            ]\n          },\n          \"metadata\": {},\n          \"execution_count\": 7\n        }\n      ],\n      \"source\": [\n        \"import openai\\n\",\n        \"\\n\",\n        \"messages=[\\n\",\n        \"    {\\n\",\n        \"        \\\"role\\\": \\\"user\\\",\\n\",\n        \"        \\\"content\\\": \\\"Who are you?\\\"\\n\",\n        \"    }\\n\",\n        \"]\\n\",\n        \"\\n\",\n        \"client = openai.Client(api_key=\\\"empty\\\", base_url=f\\\"http://0.0.0.0:9997/v1\\\")\\n\",\n        \"client.chat.completions.create(\\n\",\n        \"    model=\\\"my-llm\\\",\\n\",\n        \"    messages=messages,\\n\",\n        \")\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"AmYB-_K4aXnG\"\n      },\n      \"source\": [\n        \"### 2. Send request using curl\\n\",\n        \"\\n\",\n        \"\\n\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 8,\n      \"metadata\": {\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\"\n        },\n        \"id\": \"n7VLGirDaaR3\",\n        \"outputId\": \"dc6d8001-4cdb-4e03-c3ad-4d02a7cb3737\"\n      },\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"name\": \"stdout\",\n          \"text\": [\n            \"{\\\"id\\\":\\\"chat07fe7c94-10d8-11ef-88d5-0242ac1c000c\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1715570550,\\\"model\\\":\\\"my-llm\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"The largest animal in the world is the blue whale (Balaenoptera musculus). The blue whale can grow up to 100 feet long and weigh as much as 200 tons. It is the deepest-diving mammal in the world, capable of diving to depths of over 35,000 feet without using its breathing tube. Despite its massive size, the blue whale is relatively small compared to other marine animals, and it spends most of its life in the open ocean.\\\"},\\\"finish_reason\\\":\\\"stop\\\"}],\\\"usage\\\":{\\\"prompt_tokens\\\":25,\\\"completion_tokens\\\":105,\\\"total_tokens\\\":130}}\"\n          ]\n        }\n      ],\n      \"source\": [\n        \"!curl -k -X 'POST' -N \\\\\\n\",\n        \"  'http://127.0.0.1:9997/v1/chat/completions' \\\\\\n\",\n        \"  -H 'accept: application/json' \\\\\\n\",\n        \"  -H 'Content-Type: application/json' \\\\\\n\",\n        \"  -d '{ \\\"model\\\": \\\"my-llm\\\", \\\"messages\\\": [ {\\\"role\\\": \\\"system\\\", \\\"content\\\": \\\"You are a helpful assistant.\\\" }, {\\\"role\\\": \\\"user\\\", \\\"content\\\": \\\"What is the largest animal?\\\"} ]}'\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"RJ_72F51XFZY\"\n      },\n      \"source\": [\n        \"### 3. Use Xinference's Python client\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 9,\n      \"metadata\": {\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\"\n        },\n        \"id\": \"ohZPPubkXKLl\",\n        \"outputId\": \"24d7832e-2683-444a-f6c7-7c906eeedd3b\"\n      },\n      \"outputs\": [\n        {\n          \"output_type\": \"execute_result\",\n          \"data\": {\n            \"text/plain\": [\n              \"{'id': 'chat1200b1f8-10d8-11ef-88d5-0242ac1c000c',\\n\",\n              \" 'object': 'chat.completion',\\n\",\n              \" 'created': 1715570567,\\n\",\n              \" 'model': 'my-llm',\\n\",\n              \" 'choices': [{'index': 0,\\n\",\n              \"   'message': {'role': 'assistant',\\n\",\n              \"    'content': 'Hello! How can I assist you today?'},\\n\",\n              \"   'finish_reason': 'stop'}],\\n\",\n              \" 'usage': {'prompt_tokens': 31, 'completion_tokens': 9, 'total_tokens': 40}}\"\n            ]\n          },\n          \"metadata\": {},\n          \"execution_count\": 9\n        }\n      ],\n      \"source\": [\n        \"from xinference.client import RESTfulClient\\n\",\n        \"client = RESTfulClient(\\\"http://127.0.0.1:9997\\\")\\n\",\n        \"model = client.get_model(\\\"my-llm\\\")\\n\",\n        \"model.chat(\\n\",\n        \"    prompt=\\\"hello\\\",\\n\",\n        \"    chat_history=[\\n\",\n        \"    {\\n\",\n        \"        \\\"role\\\": \\\"user\\\",\\n\",\n        \"        \\\"content\\\": \\\"What is the largest animal?\\\"\\n\",\n        \"    }]\\n\",\n        \")\"\n      ]\n    },\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {\n        \"id\": \"P4PaU0fpdAuB\"\n      },\n      \"source\": [\n        \"### 4. Langchain intergration\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 10,\n      \"metadata\": {\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\"\n        },\n        \"id\": \"ijeadB9DdDO8\",\n        \"outputId\": \"4dcbed72-5e9d-442d-d0c8-ee5b86b375fd\"\n      },\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"name\": \"stderr\",\n          \"text\": [\n            \"/usr/local/lib/python3.10/dist-packages/langchain_core/_api/deprecation.py:119: LangChainDeprecationWarning: The class `LLMChain` was deprecated in LangChain 0.1.17 and will be removed in 0.3.0. Use RunnableSequence, e.g., `prompt | llm` instead.\\n\",\n            \"  warn_deprecated(\\n\",\n            \"/usr/local/lib/python3.10/dist-packages/langchain_core/_api/deprecation.py:119: LangChainDeprecationWarning: The method `Chain.run` was deprecated in langchain 0.1.0 and will be removed in 0.3.0. Use invoke instead.\\n\",\n            \"  warn_deprecated(\\n\"\n          ]\n        },\n        {\n          \"output_type\": \"stream\",\n          \"name\": \"stdout\",\n          \"text\": [\n            \"?\\n\",\n            \"The answer is:\\n\",\n            \"The tallest plant on Earth is a tree named Ginkgo biloba. It stands at a height of approximately 83 meters (276 feet) and has roots that reach deep into the ground. Ginkgo biloba is native to China but has been planted in gardens around the world as well. It is known for its beautiful, delicate leaves and its ability to survive even in harsh environments. Despite being over 100 years old, it continues to grow and thrive today.\\n\"\n          ]\n        }\n      ],\n      \"source\": [\n        \"from langchain.llms import Xinference\\n\",\n        \"from langchain.chains import LLMChain\\n\",\n        \"from langchain.prompts import PromptTemplate\\n\",\n        \"\\n\",\n        \"llm = Xinference(server_url='http://127.0.0.1:9997', model_uid='my-llm')\\n\",\n        \"\\n\",\n        \"template = 'What is the largest {kind} on the earth?'\\n\",\n        \"\\n\",\n        \"prompt = PromptTemplate(template=template, input_variables=['kind'])\\n\",\n        \"\\n\",\n        \"llm_chain = LLMChain(prompt=prompt, llm=llm)\\n\",\n        \"\\n\",\n        \"generated = llm_chain.run(kind='plant')\\n\",\n        \"print(generated)\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"source\": [],\n      \"metadata\": {\n        \"id\": \"3NHxN3rF-XR2\"\n      },\n      \"execution_count\": null,\n      \"outputs\": []\n    }\n  ],\n  \"metadata\": {\n    \"accelerator\": \"GPU\",\n    \"colab\": {\n      \"gpuType\": \"T4\",\n      \"provenance\": []\n    },\n    \"kernelspec\": {\n      \"display_name\": \"Python 3\",\n      \"name\": \"python3\"\n    },\n    \"language_info\": {\n      \"name\": \"python\"\n    }\n  },\n  \"nbformat\": 4,\n  \"nbformat_minor\": 0\n}"
  },
  {
    "path": "examples/audio_to_text.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Xinference provides audio-to-text functionality that is compatible with OpenAI Audio. This notebook demonstrates how to use Xinference for speech recognition.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Preparation\\n\",\n    \"\\n\",\n    \"First, you need to install Xinference:\\n\",\n    \"```shell\\n\",\n    \"pip install xinference\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Whisper model requires the command-line tool [ffmpeg](https://ffmpeg.org/) to be installed on your system, which is available from most package managers:\\n\",\n    \"\\n\",\n    \"```shell\\n\",\n    \"# on Ubuntu or Debian\\n\",\n    \"sudo apt update && sudo apt install ffmpeg\\n\",\n    \"\\n\",\n    \"# on Arch Linux\\n\",\n    \"sudo pacman -S ffmpeg\\n\",\n    \"\\n\",\n    \"# on MacOS using Homebrew (https://brew.sh/)\\n\",\n    \"brew install ffmpeg\\n\",\n    \"\\n\",\n    \"# on Windows using Chocolatey (https://chocolatey.org/)\\n\",\n    \"choco install ffmpeg\\n\",\n    \"\\n\",\n    \"# on Windows using Scoop (https://scoop.sh/)\\n\",\n    \"scoop install ffmpeg\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Then, start the Xinference server by the following command:\\n\",\n    \"```shell\\n\",\n    \"xinference-local\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"The Xinference server will be started:\\n\",\n    \"\\n\",\n    \"```shell\\n\",\n    \"2023-11-02 16:04:55,278 xinference   38878 INFO     Xinference successfully started. Endpoint: http://127.0.0.1:9997\\n\",\n    \"2023-11-02 16:04:55,280 xinference.core.supervisor 38878 INFO     Worker 127.0.0.1:32187 has been added successfully\\n\",\n    \"2023-11-02 16:04:55,281 xinference.deploy.worker 38878 INFO     Xinference worker successfully started.\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Finally, we launch a ChatGLM3 model for tool calls.\\n\",\n    \"```shell\\n\",\n    \"xinference launch -u whisper-1 -n whisper-large-v3 -t audio\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Audio to text\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This is an example audio from [Common Voice](https://commonvoice.mozilla.org/zh-CN). We transcibe it to text and translate it to English.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"\\n\",\n       \"                <audio  controls=\\\"controls\\\" >\\n\",\n       \"                    <source src=\\\"data:audio/mpeg;base64,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\\\" type=\\\"audio/mpeg\\\" />\\n\",\n       \"                    Your browser does not support the audio element.\\n\",\n       \"                </audio>\\n\",\n       \"              \"\n      ],\n      \"text/plain\": [\n       \"<IPython.lib.display.Audio object>\"\n      ]\n     },\n     \"execution_count\": 1,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import IPython\\n\",\n    \"IPython.display.Audio(\\\"../xinference/model/audio/tests/common_voice_zh-CN_38026095.mp3\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"Transcription(text='本列表列出香港航空的航点')\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import openai\\n\",\n    \"\\n\",\n    \"# The api_key can't be empty, any string is OK.\\n\",\n    \"client = openai.Client(api_key=\\\"not empty\\\", base_url=\\\"http://127.0.0.1:9997/v1\\\")\\n\",\n    \"audio_file = open(\\\"../xinference/model/audio/tests/common_voice_zh-CN_38026095.mp3\\\", \\\"rb\\\")\\n\",\n    \"# Transcription\\n\",\n    \"completion = client.audio.transcriptions.create(model=\\\"whisper-1\\\", file=audio_file)\\n\",\n    \"completion\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"Translation(text=' This list lists the airlines in Hong Kong.')\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Translation\\n\",\n    \"completion = client.audio.translations.create(model=\\\"whisper-1\\\", file=audio_file)\\n\",\n    \"completion\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"audio_file.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Conclusion\\n\",\n    \"\\n\",\n    \"Xinference is a powerful model inference platform that seamlessly integrates with OpenAI's API for tasks such as speech recognition, text conversation, image generation, and more.\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.6\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "examples/chat.py",
    "content": "from typing import List\n\nfrom xinference.client import Client\nfrom xinference.types import ChatCompletionMessage\n\nif __name__ == \"__main__\":\n    import argparse\n\n    parser = argparse.ArgumentParser()\n\n    parser.add_argument(\n        \"--endpoint\", type=str, required=True, help=\"Xinference endpoint, required\"\n    )\n    parser.add_argument(\n        \"--model_name\", type=str, required=True, help=\"Name of the model, required\"\n    )\n    parser.add_argument(\n        \"--model_size_in_billions\",\n        type=int,\n        required=False,\n        help=\"Size of the model in billions\",\n    )\n    parser.add_argument(\n        \"--model_format\",\n        type=str,\n        required=False,\n        help=\"Format of the model\",\n    )\n    parser.add_argument(\"--quantization\", type=str, required=False, help=\"Quantization\")\n\n    args = parser.parse_args()\n\n    endpoint = args.endpoint\n    model_name = args.model_name\n    model_size_in_billions = args.model_size_in_billions\n    model_format = args.model_format\n    quantization = args.quantization\n\n    print(f\"Xinference endpoint: {endpoint}\")\n    print(f\"Model Name: {model_name}\")\n    print(f\"Model Size (in billions): {model_size_in_billions}\")\n    print(f\"Model Format: {model_format}\")\n    print(f\"Quantization: {quantization}\")\n\n    client = Client(endpoint)\n    model_uid = client.launch_model(\n        model_name,\n        model_size_in_billions=model_size_in_billions,\n        model_format=model_format,\n        quantization=quantization,\n        n_ctx=2048,\n    )\n    model = client.get_model(model_uid)\n\n    chat_history: List[\"ChatCompletionMessage\"] = []\n    while True:\n        prompt = input(\"you: \")\n        completion = model.chat(\n            prompt=prompt,\n            chat_history=chat_history,\n            generate_config={\"max_tokens\": 1024},\n        )\n        content = completion[\"choices\"][0][\"message\"][\"content\"]\n        print(f\"{model_name}: {content}\")\n        chat_history.append(ChatCompletionMessage(role=\"user\", content=prompt))\n        chat_history.append(ChatCompletionMessage(role=\"assistant\", content=content))\n"
  },
  {
    "path": "examples/chat_vl.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Xinference supports multimodal models, such as: qwen-vl-chat. This notebook shows how to chat with large vision language model.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Preparation\\n\",\n    \"\\n\",\n    \"First, you need to install Xinference:\\n\",\n    \"```shell\\n\",\n    \"pip install xinference\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Then, start the Xinference server by the following command:\\n\",\n    \"```shell\\n\",\n    \"xinference\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"The Xinference server will be started:\\n\",\n    \"\\n\",\n    \"```shell\\n\",\n    \"2023-12-29 06:14:53,568 xinference.core.supervisor 9364 INFO     Xinference supervisor 0.0.0.0:21679 started\\n\",\n    \"2023-12-29 06:14:53,612 xinference.core.worker 9364 INFO     Xinference worker 0.0.0.0:21679 started\\n\",\n    \"2023-12-29 06:14:53,613 xinference.core.worker 9364 INFO     Purge cache directory: /home/codingl2k1/.xinference/cache\\n\",\n    \"2023-12-29 06:14:57,079 xinference.api.restful_api 9197 INFO     Starting Xinference at endpoint: http://0.0.0.0:9997\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Finally, we launch a qwen-vl-chat model for vision language chat.\\n\",\n    \"```shell\\n\",\n    \"xinference launch -u my_vl_model -n qwen-vl-chat -f pytorch\\n\",\n    \"```\\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Chat with large vision language model\\n\",\n    \"\\n\",\n    \"Xinference fully supports openai's image messages in both URL and base64 formats. In this case, we encode an image into base64 bytes to chat with Qwen-VL-Chat.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/jpeg\": \"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\",\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=600x400>\"\n      ]\n     },\n     \"execution_count\": 1,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import io\\n\",\n    \"import requests\\n\",\n    \"from PIL import Image\\n\",\n    \"\\n\",\n    \"response = requests.get(\\\"http://i.epochtimes.com/assets/uploads/2020/07/shutterstock_675595789-600x400.jpg\\\")\\n\",\n    \"\\n\",\n    \"img = Image.open(io.BytesIO(response.content))\\n\",\n    \"img\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"ChatCompletion(id='chatf9fbc294-a621-11ee-9bd4-9309605a4653', choices=[Choice(finish_reason='stop', index=0, message=ChatCompletionMessage(content='图中有四条鱼。', role='assistant', function_call=None, tool_calls=None))], created=1703837535, model='my_vl_model', object='chat.completion', system_fingerprint=None, usage=CompletionUsage(completion_tokens=-1, prompt_tokens=-1, total_tokens=-1))\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import openai\\n\",\n    \"import base64\\n\",\n    \"\\n\",\n    \"b64_img = base64.b64encode(response.content).decode(\\\"utf-8\\\")\\n\",\n    \"\\n\",\n    \"messages=[\\n\",\n    \"    {\\n\",\n    \"        \\\"role\\\": \\\"user\\\",\\n\",\n    \"        \\\"content\\\": [\\n\",\n    \"            {\\\"type\\\": \\\"text\\\", \\\"text\\\": \\\"图中有几条鱼？\\\"},\\n\",\n    \"            {\\n\",\n    \"                \\\"type\\\": \\\"image_url\\\",\\n\",\n    \"                \\\"image_url\\\": {\\n\",\n    \"                    \\\"url\\\": f\\\"data:image/jpeg;base64,{b64_img}\\\",\\n\",\n    \"                    # Also, you can put an URL directly.\\n\",\n    \"                    # \\\"url\\\": f\\\"http://i.epochtimes.com/assets/uploads/2020/07/shutterstock_675595789-600x400.jpg\\\",\\n\",\n    \"                },\\n\",\n    \"            },\\n\",\n    \"        ],\\n\",\n    \"    }\\n\",\n    \"]\\n\",\n    \"\\n\",\n    \"client = openai.Client(api_key=\\\"not empty\\\", base_url=f\\\"http://0.0.0.0:9997/v1\\\")\\n\",\n    \"completion = client.chat.completions.create(\\n\",\n    \"    model=\\\"my_vl_model\\\",\\n\",\n    \"    messages=messages,\\n\",\n    \")\\n\",\n    \"completion\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Conclusion\\n\",\n    \"\\n\",\n    \"Xinference is a robust inference tool that supports not only tool calls but also vision language models, providing inference capabilities similar to those of GPT-4V.\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.18\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "examples/gradio_chatinterface.py",
    "content": "from typing import Dict, List\n\nimport gradio as gr\n\nfrom xinference.client import Client\n\nif __name__ == \"__main__\":\n    import argparse\n    import textwrap\n\n    parser = argparse.ArgumentParser(\n        formatter_class=argparse.RawDescriptionHelpFormatter,\n        epilog=textwrap.dedent(\n            \"\"\"\\\n             instructions to run:\n                 1. Install Xinference and Llama-cpp-python\n                 2. Run 'xinference-local --host \"localhost\" --port 9997' in terminal\n                 3. Run this python file in new terminal window\n\n                 e.g. (feel free to copy)\n                 python gradio_chatinterface.py \\\\\n                 --endpoint http://localhost:9997 \\\\\n                 --model_name vicuna-v1.3 \\\\\n                 --model_size_in_billions 7 \\\\\n                 --model_format ggmlv3 \\\\\n                 --quantization q2_K\n\n                 If you decide to change the port number in step 2,\n                 please also change the endpoint in the arguments\n             \"\"\"\n        ),\n    )\n\n    parser.add_argument(\n        \"--endpoint\", type=str, required=True, help=\"Xinference endpoint, required\"\n    )\n    parser.add_argument(\n        \"--model_name\", type=str, required=True, help=\"Name of the model, required\"\n    )\n    parser.add_argument(\n        \"--model_size_in_billions\",\n        type=int,\n        required=False,\n        help=\"Size of the model in billions\",\n    )\n    parser.add_argument(\n        \"--model_format\",\n        type=str,\n        required=False,\n        help=\"Format of the model\",\n    )\n    parser.add_argument(\n        \"--quantization\", type=str, required=False, help=\"Quantization of the model\"\n    )\n\n    args = parser.parse_args()\n\n    endpoint = args.endpoint\n    model_name = args.model_name\n    model_size_in_billions = args.model_size_in_billions\n    model_format = args.model_format\n    quantization = args.quantization\n\n    print(f\"Xinference endpoint: {endpoint}\")\n    print(f\"Model Name: {model_name}\")\n    print(f\"Model Size (in billions): {model_size_in_billions}\")\n    print(f\"Model Format: {model_format}\")\n    print(f\"Quantization: {quantization}\")\n\n    client = Client(endpoint)\n    model_uid = client.launch_model(\n        model_name,\n        model_size_in_billions=model_size_in_billions,\n        model_format=model_format,\n        quantization=quantization,\n        n_ctx=2048,\n    )\n    model = client.get_model(model_uid)\n\n    def flatten(matrix: List[List[str]]) -> List[str]:\n        flat_list = []\n        for row in matrix:\n            flat_list += row\n        return flat_list\n\n    def to_chat(lst: List[str]) -> List[Dict[str, str]]:\n        res = []\n        for i in range(len(lst)):\n            role = \"assistant\" if i % 2 == 1 else \"user\"\n            res.append(\n                {\n                    \"role\": role,\n                    \"content\": lst[i],\n                }\n            )\n        return res\n\n    def generate_wrapper(message: str, history: List[List[str]]) -> str:\n        output = model.chat(\n            prompt=message,\n            chat_history=to_chat(flatten(history)),\n            generate_config={\"max_tokens\": 512, \"stream\": False},\n        )\n        return output[\"choices\"][0][\"message\"][\"content\"]\n\n    demo = gr.ChatInterface(\n        fn=generate_wrapper,\n        analytics_enabled=False,\n        examples=[\n            \"Show me a two sentence horror story with a plot twist\",\n            \"Generate a Haiku poem using trigonometry as the central theme\",\n            \"Write three sentences of scholarly description regarding a supernatural beast\",\n            \"Prove there does not exist a largest integer\",\n        ],\n        title=\"Xinference Chat Bot\",\n    )\n    demo.launch()\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [\n    \"setuptools>=64,<82; python_version<'3.12'\",\n    \"setuptools>=75,<82; python_version>='3.12'\"\n]\nbuild-backend = \"setuptools.build_meta\"\n\n[tool.black]\ninclude = '\\.pyi?$'\nextend-exclude = '''\n/(\n| ^/xinference/(_version.py)\n| thirdparty\n)/\n'''\n\n[tool.pytest.ini_options]\nasyncio_mode = \"auto\"\n\n[tool.cibuildwheel]\nbuild = [\"cp39-*\", \"cp310-*\", \"cp311-*\", \"cp312-*\"]\nskip = \"pp* *musllinux* *i686 cp36* cp39-win32 cp310-win32 cp311-win32 cp312-win32\"\nmanylinux-x86_64-image = \"manylinux2014\"\n"
  },
  {
    "path": "setup.cfg",
    "content": "[metadata]\nname = xinference\ndescription = Model Serving Made Easy\nauthor = Qin Xuye\nauthor_email = qinxuye@xprobe.io\nmaintainer = Qin Xuye\nmaintainer_email = qinxuye@xprobe.io\nlicense = Apache License 2.0\nurl = https://github.com/xorbitsai/inference\npython_requires = >=3.10\nclassifier =\n    Operating System :: OS Independent\n    Programming Language :: Python\n    Programming Language :: Python :: 3\n    Programming Language :: Python :: 3.10\n    Programming Language :: Python :: 3.11\n    Programming Language :: Python :: 3.12\n    Programming Language :: Python :: 3.13\n    Programming Language :: Python :: Implementation :: CPython\n    Topic :: Software Development :: Libraries\n\n[options]\nzip_safe = False\ninclude_package_data = True\npackages = find:\ninstall_requires =\n    xoscar>=0.9.3\n    torch\n    gradio<6.0.0\n    pillow\n    click<8.2.0\n    tqdm>=4.27\n    tabulate\n    requests\n    aiohttp\n    pydantic\n    fastapi>=0.110.3\n    uvicorn\n    huggingface-hub>=0.19.4\n    typing_extensions\n    modelscope>=1.19.0\n    sse_starlette>=1.6.5  # ensure_bytes API break change: https://github.com/sysid/sse-starlette/issues/65\n    openai>=1.40.0  # For typing\n    python-jose[cryptography]\n    bcrypt>=4.0.0\n    aioprometheus[starlette]>=23.12.0\n    nvidia-ml-py\n    pynvml>=12\n    async-timeout\n    peft<=0.17.1\n    timm\n    setproctitle\n    uv\n\n[options.packages.find]\nexclude =\n    *.conftest*\n    *.tests.*\n    *.tests\n\n[options.extras_require]\ndev =\n    cython>=0.29\n    pytest>=3.5.0\n    pytest-cov>=2.5.0\n    pytest-timeout>=1.2.0\n    pytest-forked>=1.0\n    pytest-asyncio>=0.14.0\n    pytest-mock>=3.11.1\n    ipython>=6.5.0\n    sphinx>=3.0.0\n    pydata-sphinx-theme>=0.3.0\n    sphinx-intl>=0.9.9\n    jieba>=0.42.0\n    flake8>=3.8.0\n    black\n    openai>=1.40.0\n    anthropic\n    langchain\n    langchain-community\n    langchain-openai\n    orjson\n    sphinx-tabs\n    sphinx-design\notel =\n    opentelemetry-api>=1.20.0\n    opentelemetry-sdk>=1.20.0\n    opentelemetry-exporter-otlp-proto-http>=1.20.0\n    opentelemetry-exporter-otlp-proto-grpc>=1.20.0\n    opentelemetry-instrumentation-fastapi>=0.41b0\n    opentelemetry-instrumentation-httpx>=0.41b0\nall =\n    %(anthropic)s\n    %(llama_cpp)s\n    %(transformers)s\n    %(vllm)s\n    %(mlx)s\n    %(embedding)s\n    %(rerank)s\n    %(image)s\n    %(video)s\n    %(audio)s\nintel =\n    torch==2.1.0a0\n    intel_extension_for_pytorch==2.1.10+xpu\nllama_cpp =\n    xllamacpp>=0.2.0\ntransformers =\n    transformers>=4.53.3\n    torch\n    accelerate>=0.28.0\n    sentencepiece\n    transformers_stream_generator\n    bitsandbytes ; sys_platform=='linux'\n    protobuf\n    einops\n    tiktoken\n    optimum\n    attrdict  # For deepseek VL\n    timm>=0.9.16  # For deepseek VL\n    torchvision  # For deepseek VL\n    peft\n    eva-decord  # For video in VL\n    jj-pytorchvideo # For CogVLM2-video\n    qwen-vl-utils!=0.0.9 # For qwen2-vl\n    qwen_omni_utils  # For qwen2.5-omni\n    datamodel_code_generator  # for minicpm-4B\n    jsonschema  # for minicpm-4B\n    blobfile  # for moonlight-16b-a3b\ntransformers_quantization =\n    bitsandbytes ; sys_platform=='linux'\n    gptqmodel\n    autoawq!=0.2.6 ; sys_platform!='darwin'  # autoawq 0.2.6 pinned torch to 2.3\n    datasets>=3.4.0  # see GH#3934\nvllm =\n    vllm>=0.2.6 ; sys_platform=='linux'\n    xxhash\nsglang =\n    sglang[srt]>=0.4.2.post4 ; sys_platform=='linux'\nmlx =\n    mlx-lm>=0.21.5 ; sys_platform=='darwin' and platform_machine=='arm64'\n    mlx-vlm>=0.3.4 ; sys_platform=='darwin' and platform_machine=='arm64'\n    mlx-whisper ; sys_platform=='darwin' and platform_machine=='arm64'\n    f5-tts-mlx ; sys_platform=='darwin' and platform_machine=='arm64'\n    mlx-audio ; sys_platform=='darwin' and platform_machine=='arm64'\n    qwen_vl_utils!=0.0.9\n    tomli\nembedding =\n    sentence-transformers>=3.1.0\n    FlagEmbedding\n    datasets>=3.4.0  # see GH#3934\nrerank =\n    FlagEmbedding\n    datasets>=3.4.0  # see GH#3934\nimage =\n    diffusers>=0.32.0  # fix conflict with matcha-tts\n    controlnet_aux\n    deepcache\n    verovio>=4.3.1  # For got_ocr2\n    transformers>=4.53.3  # For got_ocr2\n    tiktoken>=0.6.0  # For got_ocr2\n    accelerate>=0.28.0  # For got_ocr2\n    torch  # For got_ocr2\n    torchvision  # For got_ocr2\n    gguf  # For flux and sd3.5 series\nvideo =\n    diffusers>=0.32.0\n    imageio-ffmpeg\naudio =\n    funasr==1.2.7\n    omegaconf~=2.3.0\n    nemo_text_processing<=1.1.0; sys_platform == 'linux'  # 1.1.0 requires pynini==2.1.6.post1\n    WeText\n    librosa\n    xxhash\n    torch>=2.0.0  # for CosyVoice, matcha\n    torchaudio>=2.0.0\n    ChatTTS>=0.2.1\n    tiktoken # For CosyVoice, openai-whisper\n    lightning>=2.0.0  # For CosyVoice, matcha\n    hydra-core>=1.3.2  # For CosyVoice, matcha\n    inflect  # For CosyVoice, matcha\n    conformer  # For CosyVoice, matcha\n    diffusers>=0.32.0  # For CosyVoice, matcha\n    gdown  # For CosyVoice, matcha\n    pyarrow  # For CosyVoice, matcha\n    HyperPyYAML  # For CosyVoice\n    onnxruntime>=1.16.0  # For CosyVoice, use onnxruntime-gpu==1.16.0 if possible\n    pyworld>=0.3.4  # For CosyVoice\n    loguru  # For Fish Speech\n    natsort  # For Fish Speech\n    loralib  # For Fish Speech\n    ormsgpack  # For Fish Speech\n    cachetools  # For Fish Speech\n    silero-vad  # For Fish Speech\n    vector-quantize-pytorch<=1.17.3,>=1.14.24 # For Fish Speech\n    torchdiffeq  # For F5-TTS\n    x_transformers>=1.31.14  # For F5-TTS\n    pypinyin  # For F5-TTS\n    tomli  # For F5-TTS\n    vocos  # For F5-TTS\n    librosa  # For F5-TTS\n    jieba  # For F5-TTS\n    soundfile  # For F5-TTS & MeloTTS & Kokoro\n    cached_path  # For MeloTTS\n    unidic-lite  # For MeloTTS, unidic requires manually download\n    cn2an  # For MeloTTS\n    mecab-python3  # For MeloTTS\n    num2words  # For MeloTTS\n    pykakasi  # For MeloTTS\n    fugashi  # For MeloTTS\n    g2p_en  # For MeloTTS\n    anyascii  # For MeloTTS\n    gruut[de,es,fr]  # For MeloTTS\n    kokoro>=0.7.15  # Kokoro, already included misaki[en]\n    misaki[en,zh]>=0.7.15  # Kokoro\n    langdetect  # MegaTTS3\n    pyloudnorm  # MegaTTS3\n    json5 # IndexTTS2\n    munch # IndexTTS2\n    matplotlib # IndexTTS2\n    flatten_dict # IndexTTS2\n    julius # IndexTTS2\n    tensorboard # IndexTTS2\n    randomname # IndexTTS2\n    argbind # IndexTTS2\ndoc =\n    ipython>=6.5.0\n    sphinx>=3.0.0\n    pydata-sphinx-theme>=0.3.0\n    sphinx-intl>=0.9.9\n    sphinx-tabs\n    sphinx-design\n    prometheus_client\n    timm\nmusa =\n    mthreads-ml-py>=2.2.8\n    torchada>=0.1.11\nbenchmark =\n    psutil\nanthropic =\n    anthropic\n\n[options.entry_points]\nconsole_scripts =\n    xinference = xinference.deploy.cmdline:cli\n    xinference-local = xinference.deploy.cmdline:local\n    xinference-supervisor = xinference.deploy.cmdline:supervisor\n    xinference-worker = xinference.deploy.cmdline:worker\n\n[coverage:run]\nbranch = True\nrelative_files = True\ncover_pylib = False\nplugins = Cython.Coverage\ninclude =\n    xinference/*\nomit =\n    xinference/_version.py\n    *.pxd\n    */tests/*\n\n[coverage:report]\nexclude_lines =\n    pragma: no cover\n    def __repr__\n    raise AssertionError\n    raise NotImplementedError\n    return NotImplemented\n\n[versioneer]\nVCS = git\nstyle = pep440\nversionfile_source = xinference/_version.py\nversionfile_build = xinference/_version.py\ntag_prefix = v\nparentdir_prefix = xinference-\n\n[flake8]\nmax-line-length = 100\nselect =\n    E9,\n    E101,\n    E111,\n    E117,\n    E127,\n    E201,\n    E202,\n    E223,\n    E224,\n    E225,\n    E231,\n    E242,\n    E251,\n    E273,\n    E274,\n    E275,\n    E301,\n    E302,\n    E303,\n    E304,\n    E305,\n    E401,\n    E703,\n    E901,\n    E999,\n    F7,\n    F63,\n    F82,\n    F401,\n    F811,\n    F821,\n    F822,\n    F823,\n    F841,\n    W191,\n    W291,\n    W292,\n    W293,\n    W391,\n    W601,\n    W602,\n    W603,\n    W604,\n    W605\nexclude =\n    __init__.py\n    __pycache__\n    .git/\n    .github/\n    build/\n    ci/\n    dist/\n    docs/\n    thirdparty\n\n[codespell]\nignore-words-list = hist,rcall,fpr,ser,nd,inout,ot,Ba,ba,asend,hart,coo,splitted,datas,fro\nskip = .idea,.git,./build,./docs/build,node_modules,static,generated,*.po,*.ts,*.json,*.c,*.cpp,*.cfg,thirdparty\n\n[isort]\nprofile = black\nskip = thirdparty\n\n[mypy]\nignore_missing_imports=True\nfollow_imports=skip\nexclude = thirdparty\n"
  },
  {
    "path": "setup.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport platform\nimport shutil\nimport subprocess\nimport sys\nimport warnings\nfrom sysconfig import get_config_vars\n\nfrom pkg_resources import parse_version\nfrom setuptools import Command, setup\nfrom setuptools.command.develop import develop\nfrom setuptools.command.install import install\nfrom setuptools.command.sdist import sdist\n\n# From https://github.com/pandas-dev/pandas/pull/24274:\n# For mac, ensure extensions are built for macos 10.9 when compiling on a\n# 10.9 system or above, overriding distuitls behaviour which is to target\n# the version that python was built for. This may be overridden by setting\n# MACOSX_DEPLOYMENT_TARGET before calling setup.py\nif sys.platform == \"darwin\":\n    if \"MACOSX_DEPLOYMENT_TARGET\" not in os.environ:\n        current_system = platform.mac_ver()[0]\n        python_target = get_config_vars().get(\n            \"MACOSX_DEPLOYMENT_TARGET\", current_system\n        )\n        target_macos_version = \"10.9\"\n\n        parsed_python_target = parse_version(python_target)\n        parsed_current_system = parse_version(current_system)\n        parsed_macos_version = parse_version(target_macos_version)\n        if parsed_python_target <= parsed_macos_version <= parsed_current_system:\n            os.environ[\"MACOSX_DEPLOYMENT_TARGET\"] = target_macos_version\n\n\nrepo_root = os.path.dirname(os.path.abspath(__file__))\nos.chdir(repo_root)\n\n\nclass ExtraCommandMixin:\n    _extra_pre_commands = []\n\n    def run(self):\n        [self.run_command(cmd) for cmd in self._extra_pre_commands]\n        super().run()\n\n    @classmethod\n    def register_pre_command(cls, cmd):\n        cls._extra_pre_commands.append(cmd)\n\n\nclass CustomInstall(ExtraCommandMixin, install):\n    pass\n\n\nclass CustomDevelop(ExtraCommandMixin, develop):\n    pass\n\n\nclass CustomSDist(ExtraCommandMixin, sdist):\n    pass\n\nclass BuildWeb(Command):\n    \"\"\"build_web command\"\"\"\n\n    user_options = []\n    _web_src_path = \"xinference/ui/web/ui\"\n    _web_dest_path = \"xinference/ui/web/ui/build/index.html\"\n    _commands = [\n        [\"npm\", \"install\"],\n        [\"npm\", \"run\", \"build\"],\n    ]\n\n    def initialize_options(self):\n        pass\n\n    def finalize_options(self):\n        pass\n\n    @classmethod\n    def run(cls):\n        if int(os.environ.get(\"NO_WEB_UI\", \"0\")):\n            return\n\n        npm_path = shutil.which(\"npm\")\n        web_src_path = os.path.join(repo_root, *cls._web_src_path.split(\"/\"))\n        web_dest_path = os.path.join(repo_root, *cls._web_dest_path.split(\"/\"))\n\n        if npm_path is None:\n            warnings.warn(\"Cannot find NPM, may affect displaying Xinference web UI\")\n            return\n        else:\n            replacements = {\"npm\": npm_path}\n            cmd_errored = False\n            for cmd in cls._commands:\n                cmd = [replacements.get(c, c) for c in cmd]\n                proc_result = subprocess.run(cmd, cwd=web_src_path)\n                if proc_result.returncode != 0:\n                    warnings.warn(f'Failed when running `{\" \".join(cmd)}`')\n                    cmd_errored = True\n                    break\n            if not cmd_errored:\n                assert os.path.exists(web_dest_path)\n\n\nCustomInstall.register_pre_command(\"build_web\")\nCustomDevelop.register_pre_command(\"build_web\")\nCustomSDist.register_pre_command(\"build_web\")\n\nsys.path.append(repo_root)\nversioneer = __import__(\"versioneer\")\n\n\n# build long description\ndef build_long_description():\n    readme_path = os.path.join(os.path.abspath(repo_root), \"README.md\")\n\n    with open(readme_path, encoding=\"utf-8\") as f:\n        return f.read()\n\n\nsetup_options = dict(\n    version=versioneer.get_version(),\n    cmdclass=versioneer.get_cmdclass(\n        {\n            \"build_web\": BuildWeb,\n            \"install\": CustomInstall,\n            \"develop\": CustomDevelop,\n            \"sdist\": CustomSDist,\n        }\n    ),\n    long_description=build_long_description(),\n    long_description_content_type=\"text/markdown\",\n)\nsetup(**setup_options)\n"
  },
  {
    "path": "versioneer.py",
    "content": "# Version: 0.28\n\n\"\"\"The Versioneer - like a rocketeer, but for versions.\n\nThe Versioneer\n==============\n\n* like a rocketeer, but for versions!\n* https://github.com/python-versioneer/python-versioneer\n* Brian Warner\n* License: Public Domain (Unlicense)\n* Compatible with: Python 3.7, 3.8, 3.9, 3.10 and pypy3\n* [![Latest Version][pypi-image]][pypi-url]\n* [![Build Status][travis-image]][travis-url]\n\nThis is a tool for managing a recorded version number in setuptools-based\npython projects. The goal is to remove the tedious and error-prone \"update\nthe embedded version string\" step from your release process. Making a new\nrelease should be as easy as recording a new tag in your version-control\nsystem, and maybe making new tarballs.\n\n\n## Quick Install\n\nVersioneer provides two installation modes. The \"classic\" vendored mode installs\na copy of versioneer into your repository. The experimental build-time dependency mode\nis intended to allow you to skip this step and simplify the process of upgrading.\n\n### Vendored mode\n\n* `pip install versioneer` to somewhere in your $PATH\n   * A [conda-forge recipe](https://github.com/conda-forge/versioneer-feedstock) is\n     available, so you can also use `conda install -c conda-forge versioneer`\n* add a `[tool.versioneer]` section to your `pyproject.toml` or a\n  `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))\n   * Note that you will need to add `tomli; python_version < \"3.11\"` to your\n     build-time dependencies if you use `pyproject.toml`\n* run `versioneer install --vendor` in your source tree, commit the results\n* verify version information with `python setup.py version`\n\n### Build-time dependency mode\n\n* `pip install versioneer` to somewhere in your $PATH\n   * A [conda-forge recipe](https://github.com/conda-forge/versioneer-feedstock) is\n     available, so you can also use `conda install -c conda-forge versioneer`\n* add a `[tool.versioneer]` section to your `pyproject.toml` or a\n  `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))\n* add `versioneer` (with `[toml]` extra, if configuring in `pyproject.toml`)\n  to the `requires` key of the `build-system` table in `pyproject.toml`:\n  ```toml\n  [build-system]\n  requires = [\"setuptools\", \"versioneer[toml]\"]\n  build-backend = \"setuptools.build_meta\"\n  ```\n* run `versioneer install --no-vendor` in your source tree, commit the results\n* verify version information with `python setup.py version`\n\n## Version Identifiers\n\nSource trees come from a variety of places:\n\n* a version-control system checkout (mostly used by developers)\n* a nightly tarball, produced by build automation\n* a snapshot tarball, produced by a web-based VCS browser, like github's\n  \"tarball from tag\" feature\n* a release tarball, produced by \"setup.py sdist\", distributed through PyPI\n\nWithin each source tree, the version identifier (either a string or a number,\nthis tool is format-agnostic) can come from a variety of places:\n\n* ask the VCS tool itself, e.g. \"git describe\" (for checkouts), which knows\n  about recent \"tags\" and an absolute revision-id\n* the name of the directory into which the tarball was unpacked\n* an expanded VCS keyword ($Id$, etc)\n* a `_version.py` created by some earlier build step\n\nFor released software, the version identifier is closely related to a VCS\ntag. Some projects use tag names that include more than just the version\nstring (e.g. \"myproject-1.2\" instead of just \"1.2\"), in which case the tool\nneeds to strip the tag prefix to extract the version identifier. For\nunreleased software (between tags), the version identifier should provide\nenough information to help developers recreate the same tree, while also\ngiving them an idea of roughly how old the tree is (after version 1.2, before\nversion 1.3). Many VCS systems can report a description that captures this,\nfor example `git describe --tags --dirty --always` reports things like\n\"0.7-1-g574ab98-dirty\" to indicate that the checkout is one revision past the\n0.7 tag, has a unique revision id of \"574ab98\", and is \"dirty\" (it has\nuncommitted changes).\n\nThe version identifier is used for multiple purposes:\n\n* to allow the module to self-identify its version: `myproject.__version__`\n* to choose a name and prefix for a 'setup.py sdist' tarball\n\n## Theory of Operation\n\nVersioneer works by adding a special `_version.py` file into your source\ntree, where your `__init__.py` can import it. This `_version.py` knows how to\ndynamically ask the VCS tool for version information at import time.\n\n`_version.py` also contains `$Revision$` markers, and the installation\nprocess marks `_version.py` to have this marker rewritten with a tag name\nduring the `git archive` command. As a result, generated tarballs will\ncontain enough information to get the proper version.\n\nTo allow `setup.py` to compute a version too, a `versioneer.py` is added to\nthe top level of your source tree, next to `setup.py` and the `setup.cfg`\nthat configures it. This overrides several distutils/setuptools commands to\ncompute the version when invoked, and changes `setup.py build` and `setup.py\nsdist` to replace `_version.py` with a small static file that contains just\nthe generated version data.\n\n## Installation\n\nSee [INSTALL.md](./INSTALL.md) for detailed installation instructions.\n\n## Version-String Flavors\n\nCode which uses Versioneer can learn about its version string at runtime by\nimporting `_version` from your main `__init__.py` file and running the\n`get_versions()` function. From the \"outside\" (e.g. in `setup.py`), you can\nimport the top-level `versioneer.py` and run `get_versions()`.\n\nBoth functions return a dictionary with different flavors of version\ninformation:\n\n* `['version']`: A condensed version string, rendered using the selected\n  style. This is the most commonly used value for the project's version\n  string. The default \"pep440\" style yields strings like `0.11`,\n  `0.11+2.g1076c97`, or `0.11+2.g1076c97.dirty`. See the \"Styles\" section\n  below for alternative styles.\n\n* `['full-revisionid']`: detailed revision identifier. For Git, this is the\n  full SHA1 commit id, e.g. \"1076c978a8d3cfc70f408fe5974aa6c092c949ac\".\n\n* `['date']`: Date and time of the latest `HEAD` commit. For Git, it is the\n  commit date in ISO 8601 format. This will be None if the date is not\n  available.\n\n* `['dirty']`: a boolean, True if the tree has uncommitted changes. Note that\n  this is only accurate if run in a VCS checkout, otherwise it is likely to\n  be False or None\n\n* `['error']`: if the version string could not be computed, this will be set\n  to a string describing the problem, otherwise it will be None. It may be\n  useful to throw an exception in setup.py if this is set, to avoid e.g.\n  creating tarballs with a version string of \"unknown\".\n\nSome variants are more useful than others. Including `full-revisionid` in a\nbug report should allow developers to reconstruct the exact code being tested\n(or indicate the presence of local changes that should be shared with the\ndevelopers). `version` is suitable for display in an \"about\" box or a CLI\n`--version` output: it can be easily compared against release notes and lists\nof bugs fixed in various releases.\n\nThe installer adds the following text to your `__init__.py` to place a basic\nversion in `YOURPROJECT.__version__`:\n\n    from ._version import get_versions\n    __version__ = get_versions()['version']\n    del get_versions\n\n## Styles\n\nThe setup.cfg `style=` configuration controls how the VCS information is\nrendered into a version string.\n\nThe default style, \"pep440\", produces a PEP440-compliant string, equal to the\nun-prefixed tag name for actual releases, and containing an additional \"local\nversion\" section with more detail for in-between builds. For Git, this is\nTAG[+DISTANCE.gHEX[.dirty]] , using information from `git describe --tags\n--dirty --always`. For example \"0.11+2.g1076c97.dirty\" indicates that the\ntree is like the \"1076c97\" commit but has uncommitted changes (\".dirty\"), and\nthat this commit is two revisions (\"+2\") beyond the \"0.11\" tag. For released\nsoftware (exactly equal to a known tag), the identifier will only contain the\nstripped tag, e.g. \"0.11\".\n\nOther styles are available. See [details.md](details.md) in the Versioneer\nsource tree for descriptions.\n\n## Debugging\n\nVersioneer tries to avoid fatal errors: if something goes wrong, it will tend\nto return a version of \"0+unknown\". To investigate the problem, run `setup.py\nversion`, which will run the version-lookup code in a verbose mode, and will\ndisplay the full contents of `get_versions()` (including the `error` string,\nwhich may help identify what went wrong).\n\n## Known Limitations\n\nSome situations are known to cause problems for Versioneer. This details the\nmost significant ones. More can be found on Github\n[issues page](https://github.com/python-versioneer/python-versioneer/issues).\n\n### Subprojects\n\nVersioneer has limited support for source trees in which `setup.py` is not in\nthe root directory (e.g. `setup.py` and `.git/` are *not* siblings). The are\ntwo common reasons why `setup.py` might not be in the root:\n\n* Source trees which contain multiple subprojects, such as\n  [Buildbot](https://github.com/buildbot/buildbot), which contains both\n  \"master\" and \"slave\" subprojects, each with their own `setup.py`,\n  `setup.cfg`, and `tox.ini`. Projects like these produce multiple PyPI\n  distributions (and upload multiple independently-installable tarballs).\n* Source trees whose main purpose is to contain a C library, but which also\n  provide bindings to Python (and perhaps other languages) in subdirectories.\n\nVersioneer will look for `.git` in parent directories, and most operations\nshould get the right version string. However `pip` and `setuptools` have bugs\nand implementation details which frequently cause `pip install .` from a\nsubproject directory to fail to find a correct version string (so it usually\ndefaults to `0+unknown`).\n\n`pip install --editable .` should work correctly. `setup.py install` might\nwork too.\n\nPip-8.1.1 is known to have this problem, but hopefully it will get fixed in\nsome later version.\n\n[Bug #38](https://github.com/python-versioneer/python-versioneer/issues/38) is tracking\nthis issue. The discussion in\n[PR #61](https://github.com/python-versioneer/python-versioneer/pull/61) describes the\nissue from the Versioneer side in more detail.\n[pip PR#3176](https://github.com/pypa/pip/pull/3176) and\n[pip PR#3615](https://github.com/pypa/pip/pull/3615) contain work to improve\npip to let Versioneer work correctly.\n\nVersioneer-0.16 and earlier only looked for a `.git` directory next to the\n`setup.cfg`, so subprojects were completely unsupported with those releases.\n\n### Editable installs with setuptools <= 18.5\n\n`setup.py develop` and `pip install --editable .` allow you to install a\nproject into a virtualenv once, then continue editing the source code (and\ntest) without re-installing after every change.\n\n\"Entry-point scripts\" (`setup(entry_points={\"console_scripts\": ..})`) are a\nconvenient way to specify executable scripts that should be installed along\nwith the python package.\n\nThese both work as expected when using modern setuptools. When using\nsetuptools-18.5 or earlier, however, certain operations will cause\n`pkg_resources.DistributionNotFound` errors when running the entrypoint\nscript, which must be resolved by re-installing the package. This happens\nwhen the install happens with one version, then the egg_info data is\nregenerated while a different version is checked out. Many setup.py commands\ncause egg_info to be rebuilt (including `sdist`, `wheel`, and installing into\na different virtualenv), so this can be surprising.\n\n[Bug #83](https://github.com/python-versioneer/python-versioneer/issues/83) describes\nthis one, but upgrading to a newer version of setuptools should probably\nresolve it.\n\n\n## Updating Versioneer\n\nTo upgrade your project to a new release of Versioneer, do the following:\n\n* install the new Versioneer (`pip install -U versioneer` or equivalent)\n* edit `setup.cfg` and `pyproject.toml`, if necessary,\n  to include any new configuration settings indicated by the release notes.\n  See [UPGRADING](./UPGRADING.md) for details.\n* re-run `versioneer install --[no-]vendor` in your source tree, to replace\n  `SRC/_version.py`\n* commit any changed files\n\n## Future Directions\n\nThis tool is designed to make it easily extended to other version-control\nsystems: all VCS-specific components are in separate directories like\nsrc/git/ . The top-level `versioneer.py` script is assembled from these\ncomponents by running make-versioneer.py . In the future, make-versioneer.py\nwill take a VCS name as an argument, and will construct a version of\n`versioneer.py` that is specific to the given VCS. It might also take the\nconfiguration arguments that are currently provided manually during\ninstallation by editing setup.py . Alternatively, it might go the other\ndirection and include code from all supported VCS systems, reducing the\nnumber of intermediate scripts.\n\n## Similar projects\n\n* [setuptools_scm](https://github.com/pypa/setuptools_scm/) - a non-vendored build-time\n  dependency\n* [minver](https://github.com/jbweston/miniver) - a lightweight reimplementation of\n  versioneer\n* [versioningit](https://github.com/jwodder/versioningit) - a PEP 518-based setuptools\n  plugin\n\n## License\n\nTo make Versioneer easier to embed, all its code is dedicated to the public\ndomain. The `_version.py` that it creates is also in the public domain.\nSpecifically, both are released under the \"Unlicense\", as described in\nhttps://unlicense.org/.\n\n[pypi-image]: https://img.shields.io/pypi/v/versioneer.svg\n[pypi-url]: https://pypi.python.org/pypi/versioneer/\n[travis-image]:\nhttps://img.shields.io/travis/com/python-versioneer/python-versioneer.svg\n[travis-url]: https://travis-ci.com/github/python-versioneer/python-versioneer\n\n\"\"\"\n# pylint:disable=invalid-name,import-outside-toplevel,missing-function-docstring\n# pylint:disable=missing-class-docstring,too-many-branches,too-many-statements\n# pylint:disable=raise-missing-from,too-many-lines,too-many-locals,import-error\n# pylint:disable=too-few-public-methods,redefined-outer-name,consider-using-with\n# pylint:disable=attribute-defined-outside-init,too-many-arguments\n\nimport configparser\nimport errno\nimport functools\nimport json\nimport os\nimport re\nimport subprocess\nimport sys\nfrom pathlib import Path\nfrom typing import Callable, Dict\n\nhave_tomllib = True\nif sys.version_info >= (3, 11):\n    import tomllib\nelse:\n    try:\n        import tomli as tomllib\n    except ImportError:\n        have_tomllib = False\n\n\nclass VersioneerConfig:\n    \"\"\"Container for Versioneer configuration parameters.\"\"\"\n\n\ndef get_root():\n    \"\"\"Get the project root directory.\n\n    We require that all commands are run from the project root, i.e. the\n    directory that contains setup.py, setup.cfg, and versioneer.py .\n    \"\"\"\n    root = os.path.realpath(os.path.abspath(os.getcwd()))\n    setup_py = os.path.join(root, \"setup.py\")\n    versioneer_py = os.path.join(root, \"versioneer.py\")\n    if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)):\n        # allow 'python path/to/setup.py COMMAND'\n        root = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0])))\n        setup_py = os.path.join(root, \"setup.py\")\n        versioneer_py = os.path.join(root, \"versioneer.py\")\n    if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)):\n        err = (\n            \"Versioneer was unable to run the project root directory. \"\n            \"Versioneer requires setup.py to be executed from \"\n            \"its immediate directory (like 'python setup.py COMMAND'), \"\n            \"or in a way that lets it use sys.argv[0] to find the root \"\n            \"(like 'python path/to/setup.py COMMAND').\"\n        )\n        raise VersioneerBadRootError(err)\n    try:\n        # Certain runtime workflows (setup.py install/develop in a setuptools\n        # tree) execute all dependencies in a single python process, so\n        # \"versioneer\" may be imported multiple times, and python's shared\n        # module-import table will cache the first one. So we can't use\n        # os.path.dirname(__file__), as that will find whichever\n        # versioneer.py was first imported, even in later projects.\n        my_path = os.path.realpath(os.path.abspath(__file__))\n        me_dir = os.path.normcase(os.path.splitext(my_path)[0])\n        vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0])\n        if me_dir != vsr_dir and \"VERSIONEER_PEP518\" not in globals():\n            print(\n                \"Warning: build in %s is using versioneer.py from %s\"\n                % (os.path.dirname(my_path), versioneer_py)\n            )\n    except NameError:\n        pass\n    return root\n\n\ndef get_config_from_root(root):\n    \"\"\"Read the project setup.cfg file to determine Versioneer config.\"\"\"\n    # This might raise OSError (if setup.cfg is missing), or\n    # configparser.NoSectionError (if it lacks a [versioneer] section), or\n    # configparser.NoOptionError (if it lacks \"VCS=\"). See the docstring at\n    # the top of versioneer.py for instructions on writing your setup.cfg .\n    root = Path(root)\n    pyproject_toml = root / \"pyproject.toml\"\n    setup_cfg = root / \"setup.cfg\"\n    section = None\n    if pyproject_toml.exists() and have_tomllib:\n        try:\n            with open(pyproject_toml, \"rb\") as fobj:\n                pp = tomllib.load(fobj)\n            section = pp[\"tool\"][\"versioneer\"]\n        except (tomllib.TOMLDecodeError, KeyError):\n            pass\n    if not section:\n        parser = configparser.ConfigParser()\n        with open(setup_cfg) as cfg_file:\n            parser.read_file(cfg_file)\n        parser.get(\"versioneer\", \"VCS\")  # raise error if missing\n\n        section = parser[\"versioneer\"]\n\n    cfg = VersioneerConfig()\n    cfg.VCS = section[\"VCS\"]\n    cfg.style = section.get(\"style\", \"\")\n    cfg.versionfile_source = section.get(\"versionfile_source\")\n    cfg.versionfile_build = section.get(\"versionfile_build\")\n    cfg.tag_prefix = section.get(\"tag_prefix\")\n    if cfg.tag_prefix in (\"''\", '\"\"', None):\n        cfg.tag_prefix = \"\"\n    cfg.parentdir_prefix = section.get(\"parentdir_prefix\")\n    cfg.verbose = section.get(\"verbose\")\n    return cfg\n\n\nclass NotThisMethod(Exception):\n    \"\"\"Exception raised if a method is not valid for the current scenario.\"\"\"\n\n\n# these dictionaries contain VCS-specific tools\nLONG_VERSION_PY: Dict[str, str] = {}\nHANDLERS: Dict[str, Dict[str, Callable]] = {}\n\n\ndef register_vcs_handler(vcs, method):  # decorator\n    \"\"\"Create decorator to mark a method as the handler of a VCS.\"\"\"\n\n    def decorate(f):\n        \"\"\"Store f in HANDLERS[vcs][method].\"\"\"\n        HANDLERS.setdefault(vcs, {})[method] = f\n        return f\n\n    return decorate\n\n\ndef run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None):\n    \"\"\"Call the given command(s).\"\"\"\n    assert isinstance(commands, list)\n    process = None\n\n    popen_kwargs = {}\n    if sys.platform == \"win32\":\n        # This hides the console window if pythonw.exe is used\n        startupinfo = subprocess.STARTUPINFO()\n        startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW\n        popen_kwargs[\"startupinfo\"] = startupinfo\n\n    for command in commands:\n        try:\n            dispcmd = str([command] + args)\n            # remember shell=False, so use git.cmd on windows, not just git\n            process = subprocess.Popen(\n                [command] + args,\n                cwd=cwd,\n                env=env,\n                stdout=subprocess.PIPE,\n                stderr=(subprocess.PIPE if hide_stderr else None),\n                **popen_kwargs,\n            )\n            break\n        except OSError:\n            e = sys.exc_info()[1]\n            if e.errno == errno.ENOENT:\n                continue\n            if verbose:\n                print(\"unable to run %s\" % dispcmd)\n                print(e)\n            return None, None\n    else:\n        if verbose:\n            print(\"unable to find command, tried %s\" % (commands,))\n        return None, None\n    stdout = process.communicate()[0].strip().decode()\n    if process.returncode != 0:\n        if verbose:\n            print(\"unable to run %s (error)\" % dispcmd)\n            print(\"stdout was %s\" % stdout)\n        return None, process.returncode\n    return stdout, process.returncode\n\n\nLONG_VERSION_PY[\n    \"git\"\n] = r'''\n# This file helps to compute a version number in source trees obtained from\n# git-archive tarball (such as those provided by githubs download-from-tag\n# feature). Distribution tarballs (built by setup.py sdist) and build\n# directories (produced by setup.py build) will contain a much shorter file\n# that just contains the computed version number.\n\n# This file is released into the public domain.\n# Generated by versioneer-0.28\n# https://github.com/python-versioneer/python-versioneer\n\n\"\"\"Git implementation of _version.py.\"\"\"\n\nimport errno\nimport os\nimport re\nimport subprocess\nimport sys\nfrom typing import Callable, Dict\nimport functools\n\n\ndef get_keywords():\n    \"\"\"Get the keywords needed to look up the version information.\"\"\"\n    # these strings will be replaced by git during git-archive.\n    # setup.py/versioneer.py will grep for the variable names, so they must\n    # each be defined on a line of their own. _version.py will just call\n    # get_keywords().\n    git_refnames = \"%(DOLLAR)sFormat:%%d%(DOLLAR)s\"\n    git_full = \"%(DOLLAR)sFormat:%%H%(DOLLAR)s\"\n    git_date = \"%(DOLLAR)sFormat:%%ci%(DOLLAR)s\"\n    keywords = {\"refnames\": git_refnames, \"full\": git_full, \"date\": git_date}\n    return keywords\n\n\nclass VersioneerConfig:\n    \"\"\"Container for Versioneer configuration parameters.\"\"\"\n\n\ndef get_config():\n    \"\"\"Create, populate and return the VersioneerConfig() object.\"\"\"\n    # these strings are filled in when 'setup.py versioneer' creates\n    # _version.py\n    cfg = VersioneerConfig()\n    cfg.VCS = \"git\"\n    cfg.style = \"%(STYLE)s\"\n    cfg.tag_prefix = \"%(TAG_PREFIX)s\"\n    cfg.parentdir_prefix = \"%(PARENTDIR_PREFIX)s\"\n    cfg.versionfile_source = \"%(VERSIONFILE_SOURCE)s\"\n    cfg.verbose = False\n    return cfg\n\n\nclass NotThisMethod(Exception):\n    \"\"\"Exception raised if a method is not valid for the current scenario.\"\"\"\n\n\nLONG_VERSION_PY: Dict[str, str] = {}\nHANDLERS: Dict[str, Dict[str, Callable]] = {}\n\n\ndef register_vcs_handler(vcs, method):  # decorator\n    \"\"\"Create decorator to mark a method as the handler of a VCS.\"\"\"\n    def decorate(f):\n        \"\"\"Store f in HANDLERS[vcs][method].\"\"\"\n        if vcs not in HANDLERS:\n            HANDLERS[vcs] = {}\n        HANDLERS[vcs][method] = f\n        return f\n    return decorate\n\n\ndef run_command(commands, args, cwd=None, verbose=False, hide_stderr=False,\n                env=None):\n    \"\"\"Call the given command(s).\"\"\"\n    assert isinstance(commands, list)\n    process = None\n\n    popen_kwargs = {}\n    if sys.platform == \"win32\":\n        # This hides the console window if pythonw.exe is used\n        startupinfo = subprocess.STARTUPINFO()\n        startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW\n        popen_kwargs[\"startupinfo\"] = startupinfo\n\n    for command in commands:\n        try:\n            dispcmd = str([command] + args)\n            # remember shell=False, so use git.cmd on windows, not just git\n            process = subprocess.Popen([command] + args, cwd=cwd, env=env,\n                                       stdout=subprocess.PIPE,\n                                       stderr=(subprocess.PIPE if hide_stderr\n                                               else None), **popen_kwargs)\n            break\n        except OSError:\n            e = sys.exc_info()[1]\n            if e.errno == errno.ENOENT:\n                continue\n            if verbose:\n                print(\"unable to run %%s\" %% dispcmd)\n                print(e)\n            return None, None\n    else:\n        if verbose:\n            print(\"unable to find command, tried %%s\" %% (commands,))\n        return None, None\n    stdout = process.communicate()[0].strip().decode()\n    if process.returncode != 0:\n        if verbose:\n            print(\"unable to run %%s (error)\" %% dispcmd)\n            print(\"stdout was %%s\" %% stdout)\n        return None, process.returncode\n    return stdout, process.returncode\n\n\ndef versions_from_parentdir(parentdir_prefix, root, verbose):\n    \"\"\"Try to determine the version from the parent directory name.\n\n    Source tarballs conventionally unpack into a directory that includes both\n    the project name and a version string. We will also support searching up\n    two directory levels for an appropriately named parent directory\n    \"\"\"\n    rootdirs = []\n\n    for _ in range(3):\n        dirname = os.path.basename(root)\n        if dirname.startswith(parentdir_prefix):\n            return {\"version\": dirname[len(parentdir_prefix):],\n                    \"full-revisionid\": None,\n                    \"dirty\": False, \"error\": None, \"date\": None}\n        rootdirs.append(root)\n        root = os.path.dirname(root)  # up a level\n\n    if verbose:\n        print(\"Tried directories %%s but none started with prefix %%s\" %%\n              (str(rootdirs), parentdir_prefix))\n    raise NotThisMethod(\"rootdir doesn't start with parentdir_prefix\")\n\n\n@register_vcs_handler(\"git\", \"get_keywords\")\ndef git_get_keywords(versionfile_abs):\n    \"\"\"Extract version information from the given file.\"\"\"\n    # the code embedded in _version.py can just fetch the value of these\n    # keywords. When used from setup.py, we don't want to import _version.py,\n    # so we do it with a regexp instead. This function is not used from\n    # _version.py.\n    keywords = {}\n    try:\n        with open(versionfile_abs, \"r\") as fobj:\n            for line in fobj:\n                if line.strip().startswith(\"git_refnames =\"):\n                    mo = re.search(r'=\\s*\"(.*)\"', line)\n                    if mo:\n                        keywords[\"refnames\"] = mo.group(1)\n                if line.strip().startswith(\"git_full =\"):\n                    mo = re.search(r'=\\s*\"(.*)\"', line)\n                    if mo:\n                        keywords[\"full\"] = mo.group(1)\n                if line.strip().startswith(\"git_date =\"):\n                    mo = re.search(r'=\\s*\"(.*)\"', line)\n                    if mo:\n                        keywords[\"date\"] = mo.group(1)\n    except OSError:\n        pass\n    return keywords\n\n\n@register_vcs_handler(\"git\", \"keywords\")\ndef git_versions_from_keywords(keywords, tag_prefix, verbose):\n    \"\"\"Get version information from git keywords.\"\"\"\n    if \"refnames\" not in keywords:\n        raise NotThisMethod(\"Short version file found\")\n    date = keywords.get(\"date\")\n    if date is not None:\n        # Use only the last line.  Previous lines may contain GPG signature\n        # information.\n        date = date.splitlines()[-1]\n\n        # git-2.2.0 added \"%%cI\", which expands to an ISO-8601 -compliant\n        # datestamp. However we prefer \"%%ci\" (which expands to an \"ISO-8601\n        # -like\" string, which we must then edit to make compliant), because\n        # it's been around since git-1.5.3, and it's too difficult to\n        # discover which version we're using, or to work around using an\n        # older one.\n        date = date.strip().replace(\" \", \"T\", 1).replace(\" \", \"\", 1)\n    refnames = keywords[\"refnames\"].strip()\n    if refnames.startswith(\"$Format\"):\n        if verbose:\n            print(\"keywords are unexpanded, not using\")\n        raise NotThisMethod(\"unexpanded keywords, not a git-archive tarball\")\n    refs = {r.strip() for r in refnames.strip(\"()\").split(\",\")}\n    # starting in git-1.8.3, tags are listed as \"tag: foo-1.0\" instead of\n    # just \"foo-1.0\". If we see a \"tag: \" prefix, prefer those.\n    TAG = \"tag: \"\n    tags = {r[len(TAG):] for r in refs if r.startswith(TAG)}\n    if not tags:\n        # Either we're using git < 1.8.3, or there really are no tags. We use\n        # a heuristic: assume all version tags have a digit. The old git %%d\n        # expansion behaves like git log --decorate=short and strips out the\n        # refs/heads/ and refs/tags/ prefixes that would let us distinguish\n        # between branches and tags. By ignoring refnames without digits, we\n        # filter out many common branch names like \"release\" and\n        # \"stabilization\", as well as \"HEAD\" and \"master\".\n        tags = {r for r in refs if re.search(r'\\d', r)}\n        if verbose:\n            print(\"discarding '%%s', no digits\" %% \",\".join(refs - tags))\n    if verbose:\n        print(\"likely tags: %%s\" %% \",\".join(sorted(tags)))\n    for ref in sorted(tags):\n        # sorting will prefer e.g. \"2.0\" over \"2.0rc1\"\n        if ref.startswith(tag_prefix):\n            r = ref[len(tag_prefix):]\n            # Filter out refs that exactly match prefix or that don't start\n            # with a number once the prefix is stripped (mostly a concern\n            # when prefix is '')\n            if not re.match(r'\\d', r):\n                continue\n            if verbose:\n                print(\"picking %%s\" %% r)\n            return {\"version\": r,\n                    \"full-revisionid\": keywords[\"full\"].strip(),\n                    \"dirty\": False, \"error\": None,\n                    \"date\": date}\n    # no suitable tags, so version is \"0+unknown\", but full hex is still there\n    if verbose:\n        print(\"no suitable tags, using unknown + full revision id\")\n    return {\"version\": \"0+unknown\",\n            \"full-revisionid\": keywords[\"full\"].strip(),\n            \"dirty\": False, \"error\": \"no suitable tags\", \"date\": None}\n\n\n@register_vcs_handler(\"git\", \"pieces_from_vcs\")\ndef git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command):\n    \"\"\"Get version from 'git describe' in the root of the source tree.\n\n    This only gets called if the git-archive 'subst' keywords were *not*\n    expanded, and _version.py hasn't already been rewritten with a short\n    version string, meaning we're inside a checked out source tree.\n    \"\"\"\n    GITS = [\"git\"]\n    if sys.platform == \"win32\":\n        GITS = [\"git.cmd\", \"git.exe\"]\n\n    # GIT_DIR can interfere with correct operation of Versioneer.\n    # It may be intended to be passed to the Versioneer-versioned project,\n    # but that should not change where we get our version from.\n    env = os.environ.copy()\n    env.pop(\"GIT_DIR\", None)\n    runner = functools.partial(runner, env=env)\n\n    _, rc = runner(GITS, [\"rev-parse\", \"--git-dir\"], cwd=root,\n                   hide_stderr=not verbose)\n    if rc != 0:\n        if verbose:\n            print(\"Directory %%s not under git control\" %% root)\n        raise NotThisMethod(\"'git rev-parse --git-dir' returned error\")\n\n    # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]\n    # if there isn't one, this yields HEX[-dirty] (no NUM)\n    describe_out, rc = runner(GITS, [\n        \"describe\", \"--tags\", \"--dirty\", \"--always\", \"--long\",\n        \"--match\", f\"{tag_prefix}[[:digit:]]*\"\n    ], cwd=root)\n    # --long was added in git-1.5.5\n    if describe_out is None:\n        raise NotThisMethod(\"'git describe' failed\")\n    describe_out = describe_out.strip()\n    full_out, rc = runner(GITS, [\"rev-parse\", \"HEAD\"], cwd=root)\n    if full_out is None:\n        raise NotThisMethod(\"'git rev-parse' failed\")\n    full_out = full_out.strip()\n\n    pieces = {}\n    pieces[\"long\"] = full_out\n    pieces[\"short\"] = full_out[:7]  # maybe improved later\n    pieces[\"error\"] = None\n\n    branch_name, rc = runner(GITS, [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"],\n                             cwd=root)\n    # --abbrev-ref was added in git-1.6.3\n    if rc != 0 or branch_name is None:\n        raise NotThisMethod(\"'git rev-parse --abbrev-ref' returned error\")\n    branch_name = branch_name.strip()\n\n    if branch_name == \"HEAD\":\n        # If we aren't exactly on a branch, pick a branch which represents\n        # the current commit. If all else fails, we are on a branchless\n        # commit.\n        branches, rc = runner(GITS, [\"branch\", \"--contains\"], cwd=root)\n        # --contains was added in git-1.5.4\n        if rc != 0 or branches is None:\n            raise NotThisMethod(\"'git branch --contains' returned error\")\n        branches = branches.split(\"\\n\")\n\n        # Remove the first line if we're running detached\n        if \"(\" in branches[0]:\n            branches.pop(0)\n\n        # Strip off the leading \"* \" from the list of branches.\n        branches = [branch[2:] for branch in branches]\n        if \"master\" in branches:\n            branch_name = \"master\"\n        elif not branches:\n            branch_name = None\n        else:\n            # Pick the first branch that is returned. Good or bad.\n            branch_name = branches[0]\n\n    pieces[\"branch\"] = branch_name\n\n    # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]\n    # TAG might have hyphens.\n    git_describe = describe_out\n\n    # look for -dirty suffix\n    dirty = git_describe.endswith(\"-dirty\")\n    pieces[\"dirty\"] = dirty\n    if dirty:\n        git_describe = git_describe[:git_describe.rindex(\"-dirty\")]\n\n    # now we have TAG-NUM-gHEX or HEX\n\n    if \"-\" in git_describe:\n        # TAG-NUM-gHEX\n        mo = re.search(r'^(.+)-(\\d+)-g([0-9a-f]+)$', git_describe)\n        if not mo:\n            # unparsable. Maybe git-describe is misbehaving?\n            pieces[\"error\"] = (\"unable to parse git-describe output: '%%s'\"\n                               %% describe_out)\n            return pieces\n\n        # tag\n        full_tag = mo.group(1)\n        if not full_tag.startswith(tag_prefix):\n            if verbose:\n                fmt = \"tag '%%s' doesn't start with prefix '%%s'\"\n                print(fmt %% (full_tag, tag_prefix))\n            pieces[\"error\"] = (\"tag '%%s' doesn't start with prefix '%%s'\"\n                               %% (full_tag, tag_prefix))\n            return pieces\n        pieces[\"closest-tag\"] = full_tag[len(tag_prefix):]\n\n        # distance: number of commits since tag\n        pieces[\"distance\"] = int(mo.group(2))\n\n        # commit: short hex revision ID\n        pieces[\"short\"] = mo.group(3)\n\n    else:\n        # HEX: no tags\n        pieces[\"closest-tag\"] = None\n        out, rc = runner(GITS, [\"rev-list\", \"HEAD\", \"--left-right\"], cwd=root)\n        pieces[\"distance\"] = len(out.split())  # total number of commits\n\n    # commit date: see ISO-8601 comment in git_versions_from_keywords()\n    date = runner(GITS, [\"show\", \"-s\", \"--format=%%ci\", \"HEAD\"], cwd=root)[0].strip()\n    # Use only the last line.  Previous lines may contain GPG signature\n    # information.\n    date = date.splitlines()[-1]\n    pieces[\"date\"] = date.strip().replace(\" \", \"T\", 1).replace(\" \", \"\", 1)\n\n    return pieces\n\n\ndef plus_or_dot(pieces):\n    \"\"\"Return a + if we don't already have one, else return a .\"\"\"\n    if \"+\" in pieces.get(\"closest-tag\", \"\"):\n        return \".\"\n    return \"+\"\n\n\ndef render_pep440(pieces):\n    \"\"\"Build up version string, with post-release \"local version identifier\".\n\n    Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you\n    get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty\n\n    Exceptions:\n    1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += plus_or_dot(pieces)\n            rendered += \"%%d.g%%s\" %% (pieces[\"distance\"], pieces[\"short\"])\n            if pieces[\"dirty\"]:\n                rendered += \".dirty\"\n    else:\n        # exception #1\n        rendered = \"0+untagged.%%d.g%%s\" %% (pieces[\"distance\"],\n                                          pieces[\"short\"])\n        if pieces[\"dirty\"]:\n            rendered += \".dirty\"\n    return rendered\n\n\ndef render_pep440_branch(pieces):\n    \"\"\"TAG[[.dev0]+DISTANCE.gHEX[.dirty]] .\n\n    The \".dev0\" means not master branch. Note that .dev0 sorts backwards\n    (a feature branch will appear \"older\" than the master branch).\n\n    Exceptions:\n    1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            if pieces[\"branch\"] != \"master\":\n                rendered += \".dev0\"\n            rendered += plus_or_dot(pieces)\n            rendered += \"%%d.g%%s\" %% (pieces[\"distance\"], pieces[\"short\"])\n            if pieces[\"dirty\"]:\n                rendered += \".dirty\"\n    else:\n        # exception #1\n        rendered = \"0\"\n        if pieces[\"branch\"] != \"master\":\n            rendered += \".dev0\"\n        rendered += \"+untagged.%%d.g%%s\" %% (pieces[\"distance\"],\n                                          pieces[\"short\"])\n        if pieces[\"dirty\"]:\n            rendered += \".dirty\"\n    return rendered\n\n\ndef pep440_split_post(ver):\n    \"\"\"Split pep440 version string at the post-release segment.\n\n    Returns the release segments before the post-release and the\n    post-release version number (or -1 if no post-release segment is present).\n    \"\"\"\n    vc = str.split(ver, \".post\")\n    return vc[0], int(vc[1] or 0) if len(vc) == 2 else None\n\n\ndef render_pep440_pre(pieces):\n    \"\"\"TAG[.postN.devDISTANCE] -- No -dirty.\n\n    Exceptions:\n    1: no tags. 0.post0.devDISTANCE\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        if pieces[\"distance\"]:\n            # update the post release segment\n            tag_version, post_version = pep440_split_post(pieces[\"closest-tag\"])\n            rendered = tag_version\n            if post_version is not None:\n                rendered += \".post%%d.dev%%d\" %% (post_version + 1, pieces[\"distance\"])\n            else:\n                rendered += \".post0.dev%%d\" %% (pieces[\"distance\"])\n        else:\n            # no commits, use the tag as the version\n            rendered = pieces[\"closest-tag\"]\n    else:\n        # exception #1\n        rendered = \"0.post0.dev%%d\" %% pieces[\"distance\"]\n    return rendered\n\n\ndef render_pep440_post(pieces):\n    \"\"\"TAG[.postDISTANCE[.dev0]+gHEX] .\n\n    The \".dev0\" means dirty. Note that .dev0 sorts backwards\n    (a dirty tree will appear \"older\" than the corresponding clean one),\n    but you shouldn't be releasing software with -dirty anyways.\n\n    Exceptions:\n    1: no tags. 0.postDISTANCE[.dev0]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += \".post%%d\" %% pieces[\"distance\"]\n            if pieces[\"dirty\"]:\n                rendered += \".dev0\"\n            rendered += plus_or_dot(pieces)\n            rendered += \"g%%s\" %% pieces[\"short\"]\n    else:\n        # exception #1\n        rendered = \"0.post%%d\" %% pieces[\"distance\"]\n        if pieces[\"dirty\"]:\n            rendered += \".dev0\"\n        rendered += \"+g%%s\" %% pieces[\"short\"]\n    return rendered\n\n\ndef render_pep440_post_branch(pieces):\n    \"\"\"TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] .\n\n    The \".dev0\" means not master branch.\n\n    Exceptions:\n    1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += \".post%%d\" %% pieces[\"distance\"]\n            if pieces[\"branch\"] != \"master\":\n                rendered += \".dev0\"\n            rendered += plus_or_dot(pieces)\n            rendered += \"g%%s\" %% pieces[\"short\"]\n            if pieces[\"dirty\"]:\n                rendered += \".dirty\"\n    else:\n        # exception #1\n        rendered = \"0.post%%d\" %% pieces[\"distance\"]\n        if pieces[\"branch\"] != \"master\":\n            rendered += \".dev0\"\n        rendered += \"+g%%s\" %% pieces[\"short\"]\n        if pieces[\"dirty\"]:\n            rendered += \".dirty\"\n    return rendered\n\n\ndef render_pep440_old(pieces):\n    \"\"\"TAG[.postDISTANCE[.dev0]] .\n\n    The \".dev0\" means dirty.\n\n    Exceptions:\n    1: no tags. 0.postDISTANCE[.dev0]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += \".post%%d\" %% pieces[\"distance\"]\n            if pieces[\"dirty\"]:\n                rendered += \".dev0\"\n    else:\n        # exception #1\n        rendered = \"0.post%%d\" %% pieces[\"distance\"]\n        if pieces[\"dirty\"]:\n            rendered += \".dev0\"\n    return rendered\n\n\ndef render_git_describe(pieces):\n    \"\"\"TAG[-DISTANCE-gHEX][-dirty].\n\n    Like 'git describe --tags --dirty --always'.\n\n    Exceptions:\n    1: no tags. HEX[-dirty]  (note: no 'g' prefix)\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"]:\n            rendered += \"-%%d-g%%s\" %% (pieces[\"distance\"], pieces[\"short\"])\n    else:\n        # exception #1\n        rendered = pieces[\"short\"]\n    if pieces[\"dirty\"]:\n        rendered += \"-dirty\"\n    return rendered\n\n\ndef render_git_describe_long(pieces):\n    \"\"\"TAG-DISTANCE-gHEX[-dirty].\n\n    Like 'git describe --tags --dirty --always -long'.\n    The distance/hash is unconditional.\n\n    Exceptions:\n    1: no tags. HEX[-dirty]  (note: no 'g' prefix)\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        rendered += \"-%%d-g%%s\" %% (pieces[\"distance\"], pieces[\"short\"])\n    else:\n        # exception #1\n        rendered = pieces[\"short\"]\n    if pieces[\"dirty\"]:\n        rendered += \"-dirty\"\n    return rendered\n\n\ndef render(pieces, style):\n    \"\"\"Render the given version pieces into the requested style.\"\"\"\n    if pieces[\"error\"]:\n        return {\"version\": \"unknown\",\n                \"full-revisionid\": pieces.get(\"long\"),\n                \"dirty\": None,\n                \"error\": pieces[\"error\"],\n                \"date\": None}\n\n    if not style or style == \"default\":\n        style = \"pep440\"  # the default\n\n    if style == \"pep440\":\n        rendered = render_pep440(pieces)\n    elif style == \"pep440-branch\":\n        rendered = render_pep440_branch(pieces)\n    elif style == \"pep440-pre\":\n        rendered = render_pep440_pre(pieces)\n    elif style == \"pep440-post\":\n        rendered = render_pep440_post(pieces)\n    elif style == \"pep440-post-branch\":\n        rendered = render_pep440_post_branch(pieces)\n    elif style == \"pep440-old\":\n        rendered = render_pep440_old(pieces)\n    elif style == \"git-describe\":\n        rendered = render_git_describe(pieces)\n    elif style == \"git-describe-long\":\n        rendered = render_git_describe_long(pieces)\n    else:\n        raise ValueError(\"unknown style '%%s'\" %% style)\n\n    return {\"version\": rendered, \"full-revisionid\": pieces[\"long\"],\n            \"dirty\": pieces[\"dirty\"], \"error\": None,\n            \"date\": pieces.get(\"date\")}\n\n\ndef get_versions():\n    \"\"\"Get version information or return default if unable to do so.\"\"\"\n    # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have\n    # __file__, we can work backwards from there to the root. Some\n    # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which\n    # case we can only use expanded keywords.\n\n    cfg = get_config()\n    verbose = cfg.verbose\n\n    try:\n        return git_versions_from_keywords(get_keywords(), cfg.tag_prefix,\n                                          verbose)\n    except NotThisMethod:\n        pass\n\n    try:\n        root = os.path.realpath(__file__)\n        # versionfile_source is the relative path from the top of the source\n        # tree (where the .git directory might live) to this file. Invert\n        # this to find the root from __file__.\n        for _ in cfg.versionfile_source.split('/'):\n            root = os.path.dirname(root)\n    except NameError:\n        return {\"version\": \"0+unknown\", \"full-revisionid\": None,\n                \"dirty\": None,\n                \"error\": \"unable to find root of source tree\",\n                \"date\": None}\n\n    try:\n        pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose)\n        return render(pieces, cfg.style)\n    except NotThisMethod:\n        pass\n\n    try:\n        if cfg.parentdir_prefix:\n            return versions_from_parentdir(cfg.parentdir_prefix, root, verbose)\n    except NotThisMethod:\n        pass\n\n    return {\"version\": \"0+unknown\", \"full-revisionid\": None,\n            \"dirty\": None,\n            \"error\": \"unable to compute version\", \"date\": None}\n'''\n\n\n@register_vcs_handler(\"git\", \"get_keywords\")\ndef git_get_keywords(versionfile_abs):\n    \"\"\"Extract version information from the given file.\"\"\"\n    # the code embedded in _version.py can just fetch the value of these\n    # keywords. When used from setup.py, we don't want to import _version.py,\n    # so we do it with a regexp instead. This function is not used from\n    # _version.py.\n    keywords = {}\n    try:\n        with open(versionfile_abs, \"r\") as fobj:\n            for line in fobj:\n                if line.strip().startswith(\"git_refnames =\"):\n                    mo = re.search(r'=\\s*\"(.*)\"', line)\n                    if mo:\n                        keywords[\"refnames\"] = mo.group(1)\n                if line.strip().startswith(\"git_full =\"):\n                    mo = re.search(r'=\\s*\"(.*)\"', line)\n                    if mo:\n                        keywords[\"full\"] = mo.group(1)\n                if line.strip().startswith(\"git_date =\"):\n                    mo = re.search(r'=\\s*\"(.*)\"', line)\n                    if mo:\n                        keywords[\"date\"] = mo.group(1)\n    except OSError:\n        pass\n    return keywords\n\n\n@register_vcs_handler(\"git\", \"keywords\")\ndef git_versions_from_keywords(keywords, tag_prefix, verbose):\n    \"\"\"Get version information from git keywords.\"\"\"\n    if \"refnames\" not in keywords:\n        raise NotThisMethod(\"Short version file found\")\n    date = keywords.get(\"date\")\n    if date is not None:\n        # Use only the last line.  Previous lines may contain GPG signature\n        # information.\n        date = date.splitlines()[-1]\n\n        # git-2.2.0 added \"%cI\", which expands to an ISO-8601 -compliant\n        # datestamp. However we prefer \"%ci\" (which expands to an \"ISO-8601\n        # -like\" string, which we must then edit to make compliant), because\n        # it's been around since git-1.5.3, and it's too difficult to\n        # discover which version we're using, or to work around using an\n        # older one.\n        date = date.strip().replace(\" \", \"T\", 1).replace(\" \", \"\", 1)\n    refnames = keywords[\"refnames\"].strip()\n    if refnames.startswith(\"$Format\"):\n        if verbose:\n            print(\"keywords are unexpanded, not using\")\n        raise NotThisMethod(\"unexpanded keywords, not a git-archive tarball\")\n    refs = {r.strip() for r in refnames.strip(\"()\").split(\",\")}\n    # starting in git-1.8.3, tags are listed as \"tag: foo-1.0\" instead of\n    # just \"foo-1.0\". If we see a \"tag: \" prefix, prefer those.\n    TAG = \"tag: \"\n    tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)}\n    if not tags:\n        # Either we're using git < 1.8.3, or there really are no tags. We use\n        # a heuristic: assume all version tags have a digit. The old git %d\n        # expansion behaves like git log --decorate=short and strips out the\n        # refs/heads/ and refs/tags/ prefixes that would let us distinguish\n        # between branches and tags. By ignoring refnames without digits, we\n        # filter out many common branch names like \"release\" and\n        # \"stabilization\", as well as \"HEAD\" and \"master\".\n        tags = {r for r in refs if re.search(r\"\\d\", r)}\n        if verbose:\n            print(\"discarding '%s', no digits\" % \",\".join(refs - tags))\n    if verbose:\n        print(\"likely tags: %s\" % \",\".join(sorted(tags)))\n    for ref in sorted(tags):\n        # sorting will prefer e.g. \"2.0\" over \"2.0rc1\"\n        if ref.startswith(tag_prefix):\n            r = ref[len(tag_prefix) :]\n            # Filter out refs that exactly match prefix or that don't start\n            # with a number once the prefix is stripped (mostly a concern\n            # when prefix is '')\n            if not re.match(r\"\\d\", r):\n                continue\n            if verbose:\n                print(\"picking %s\" % r)\n            return {\n                \"version\": r,\n                \"full-revisionid\": keywords[\"full\"].strip(),\n                \"dirty\": False,\n                \"error\": None,\n                \"date\": date,\n            }\n    # no suitable tags, so version is \"0+unknown\", but full hex is still there\n    if verbose:\n        print(\"no suitable tags, using unknown + full revision id\")\n    return {\n        \"version\": \"0+unknown\",\n        \"full-revisionid\": keywords[\"full\"].strip(),\n        \"dirty\": False,\n        \"error\": \"no suitable tags\",\n        \"date\": None,\n    }\n\n\n@register_vcs_handler(\"git\", \"pieces_from_vcs\")\ndef git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command):\n    \"\"\"Get version from 'git describe' in the root of the source tree.\n\n    This only gets called if the git-archive 'subst' keywords were *not*\n    expanded, and _version.py hasn't already been rewritten with a short\n    version string, meaning we're inside a checked out source tree.\n    \"\"\"\n    GITS = [\"git\"]\n    if sys.platform == \"win32\":\n        GITS = [\"git.cmd\", \"git.exe\"]\n\n    # GIT_DIR can interfere with correct operation of Versioneer.\n    # It may be intended to be passed to the Versioneer-versioned project,\n    # but that should not change where we get our version from.\n    env = os.environ.copy()\n    env.pop(\"GIT_DIR\", None)\n    runner = functools.partial(runner, env=env)\n\n    _, rc = runner(GITS, [\"rev-parse\", \"--git-dir\"], cwd=root, hide_stderr=not verbose)\n    if rc != 0:\n        if verbose:\n            print(\"Directory %s not under git control\" % root)\n        raise NotThisMethod(\"'git rev-parse --git-dir' returned error\")\n\n    # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]\n    # if there isn't one, this yields HEX[-dirty] (no NUM)\n    describe_out, rc = runner(\n        GITS,\n        [\n            \"describe\",\n            \"--tags\",\n            \"--dirty\",\n            \"--always\",\n            \"--long\",\n            \"--match\",\n            f\"{tag_prefix}[[:digit:]]*\",\n        ],\n        cwd=root,\n    )\n    # --long was added in git-1.5.5\n    if describe_out is None:\n        raise NotThisMethod(\"'git describe' failed\")\n    describe_out = describe_out.strip()\n    full_out, rc = runner(GITS, [\"rev-parse\", \"HEAD\"], cwd=root)\n    if full_out is None:\n        raise NotThisMethod(\"'git rev-parse' failed\")\n    full_out = full_out.strip()\n\n    pieces = {}\n    pieces[\"long\"] = full_out\n    pieces[\"short\"] = full_out[:7]  # maybe improved later\n    pieces[\"error\"] = None\n\n    branch_name, rc = runner(GITS, [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], cwd=root)\n    # --abbrev-ref was added in git-1.6.3\n    if rc != 0 or branch_name is None:\n        raise NotThisMethod(\"'git rev-parse --abbrev-ref' returned error\")\n    branch_name = branch_name.strip()\n\n    if branch_name == \"HEAD\":\n        # If we aren't exactly on a branch, pick a branch which represents\n        # the current commit. If all else fails, we are on a branchless\n        # commit.\n        branches, rc = runner(GITS, [\"branch\", \"--contains\"], cwd=root)\n        # --contains was added in git-1.5.4\n        if rc != 0 or branches is None:\n            raise NotThisMethod(\"'git branch --contains' returned error\")\n        branches = branches.split(\"\\n\")\n\n        # Remove the first line if we're running detached\n        if \"(\" in branches[0]:\n            branches.pop(0)\n\n        # Strip off the leading \"* \" from the list of branches.\n        branches = [branch[2:] for branch in branches]\n        if \"master\" in branches:\n            branch_name = \"master\"\n        elif not branches:\n            branch_name = None\n        else:\n            # Pick the first branch that is returned. Good or bad.\n            branch_name = branches[0]\n\n    pieces[\"branch\"] = branch_name\n\n    # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]\n    # TAG might have hyphens.\n    git_describe = describe_out\n\n    # look for -dirty suffix\n    dirty = git_describe.endswith(\"-dirty\")\n    pieces[\"dirty\"] = dirty\n    if dirty:\n        git_describe = git_describe[: git_describe.rindex(\"-dirty\")]\n\n    # now we have TAG-NUM-gHEX or HEX\n\n    if \"-\" in git_describe:\n        # TAG-NUM-gHEX\n        mo = re.search(r\"^(.+)-(\\d+)-g([0-9a-f]+)$\", git_describe)\n        if not mo:\n            # unparsable. Maybe git-describe is misbehaving?\n            pieces[\"error\"] = \"unable to parse git-describe output: '%s'\" % describe_out\n            return pieces\n\n        # tag\n        full_tag = mo.group(1)\n        if not full_tag.startswith(tag_prefix):\n            if verbose:\n                fmt = \"tag '%s' doesn't start with prefix '%s'\"\n                print(fmt % (full_tag, tag_prefix))\n            pieces[\"error\"] = \"tag '%s' doesn't start with prefix '%s'\" % (\n                full_tag,\n                tag_prefix,\n            )\n            return pieces\n        pieces[\"closest-tag\"] = full_tag[len(tag_prefix) :]\n\n        # distance: number of commits since tag\n        pieces[\"distance\"] = int(mo.group(2))\n\n        # commit: short hex revision ID\n        pieces[\"short\"] = mo.group(3)\n\n    else:\n        # HEX: no tags\n        pieces[\"closest-tag\"] = None\n        out, rc = runner(GITS, [\"rev-list\", \"HEAD\", \"--left-right\"], cwd=root)\n        pieces[\"distance\"] = len(out.split())  # total number of commits\n\n    # commit date: see ISO-8601 comment in git_versions_from_keywords()\n    date = runner(GITS, [\"show\", \"-s\", \"--format=%ci\", \"HEAD\"], cwd=root)[0].strip()\n    # Use only the last line.  Previous lines may contain GPG signature\n    # information.\n    date = date.splitlines()[-1]\n    pieces[\"date\"] = date.strip().replace(\" \", \"T\", 1).replace(\" \", \"\", 1)\n\n    return pieces\n\n\ndef do_vcs_install(versionfile_source, ipy):\n    \"\"\"Git-specific installation logic for Versioneer.\n\n    For Git, this means creating/changing .gitattributes to mark _version.py\n    for export-subst keyword substitution.\n    \"\"\"\n    GITS = [\"git\"]\n    if sys.platform == \"win32\":\n        GITS = [\"git.cmd\", \"git.exe\"]\n    files = [versionfile_source]\n    if ipy:\n        files.append(ipy)\n    if \"VERSIONEER_PEP518\" not in globals():\n        try:\n            my_path = __file__\n            if my_path.endswith((\".pyc\", \".pyo\")):\n                my_path = os.path.splitext(my_path)[0] + \".py\"\n            versioneer_file = os.path.relpath(my_path)\n        except NameError:\n            versioneer_file = \"versioneer.py\"\n        files.append(versioneer_file)\n    present = False\n    try:\n        with open(\".gitattributes\", \"r\") as fobj:\n            for line in fobj:\n                if line.strip().startswith(versionfile_source):\n                    if \"export-subst\" in line.strip().split()[1:]:\n                        present = True\n                        break\n    except OSError:\n        pass\n    if not present:\n        with open(\".gitattributes\", \"a+\") as fobj:\n            fobj.write(f\"{versionfile_source} export-subst\\n\")\n        files.append(\".gitattributes\")\n    run_command(GITS, [\"add\", \"--\"] + files)\n\n\ndef versions_from_parentdir(parentdir_prefix, root, verbose):\n    \"\"\"Try to determine the version from the parent directory name.\n\n    Source tarballs conventionally unpack into a directory that includes both\n    the project name and a version string. We will also support searching up\n    two directory levels for an appropriately named parent directory\n    \"\"\"\n    rootdirs = []\n\n    for _ in range(3):\n        dirname = os.path.basename(root)\n        if dirname.startswith(parentdir_prefix):\n            return {\n                \"version\": dirname[len(parentdir_prefix) :],\n                \"full-revisionid\": None,\n                \"dirty\": False,\n                \"error\": None,\n                \"date\": None,\n            }\n        rootdirs.append(root)\n        root = os.path.dirname(root)  # up a level\n\n    if verbose:\n        print(\n            \"Tried directories %s but none started with prefix %s\"\n            % (str(rootdirs), parentdir_prefix)\n        )\n    raise NotThisMethod(\"rootdir doesn't start with parentdir_prefix\")\n\n\nSHORT_VERSION_PY = \"\"\"\n# This file was generated by 'versioneer.py' (0.28) from\n# revision-control system data, or from the parent directory name of an\n# unpacked source archive. Distribution tarballs contain a pre-generated copy\n# of this file.\n\nimport json\n\nversion_json = '''\n%s\n'''  # END VERSION_JSON\n\n\ndef get_versions():\n    return json.loads(version_json)\n\"\"\"\n\n\ndef versions_from_file(filename):\n    \"\"\"Try to determine the version from _version.py if present.\"\"\"\n    try:\n        with open(filename) as f:\n            contents = f.read()\n    except OSError:\n        raise NotThisMethod(\"unable to read _version.py\")\n    mo = re.search(\n        r\"version_json = '''\\n(.*)'''  # END VERSION_JSON\", contents, re.M | re.S\n    )\n    if not mo:\n        mo = re.search(\n            r\"version_json = '''\\r\\n(.*)'''  # END VERSION_JSON\", contents, re.M | re.S\n        )\n    if not mo:\n        raise NotThisMethod(\"no version_json in _version.py\")\n    return json.loads(mo.group(1))\n\n\ndef write_to_version_file(filename, versions):\n    \"\"\"Write the given version number to the given _version.py file.\"\"\"\n    os.unlink(filename)\n    contents = json.dumps(versions, sort_keys=True, indent=1, separators=(\",\", \": \"))\n    with open(filename, \"w\") as f:\n        f.write(SHORT_VERSION_PY % contents)\n\n    print(\"set %s to '%s'\" % (filename, versions[\"version\"]))\n\n\ndef plus_or_dot(pieces):\n    \"\"\"Return a + if we don't already have one, else return a .\"\"\"\n    if \"+\" in pieces.get(\"closest-tag\", \"\"):\n        return \".\"\n    return \"+\"\n\n\ndef render_pep440(pieces):\n    \"\"\"Build up version string, with post-release \"local version identifier\".\n\n    Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you\n    get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty\n\n    Exceptions:\n    1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += plus_or_dot(pieces)\n            rendered += \"%d.g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n            if pieces[\"dirty\"]:\n                rendered += \".dirty\"\n    else:\n        # exception #1\n        rendered = \"0+untagged.%d.g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n        if pieces[\"dirty\"]:\n            rendered += \".dirty\"\n    return rendered\n\n\ndef render_pep440_branch(pieces):\n    \"\"\"TAG[[.dev0]+DISTANCE.gHEX[.dirty]] .\n\n    The \".dev0\" means not master branch. Note that .dev0 sorts backwards\n    (a feature branch will appear \"older\" than the master branch).\n\n    Exceptions:\n    1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            if pieces[\"branch\"] != \"master\":\n                rendered += \".dev0\"\n            rendered += plus_or_dot(pieces)\n            rendered += \"%d.g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n            if pieces[\"dirty\"]:\n                rendered += \".dirty\"\n    else:\n        # exception #1\n        rendered = \"0\"\n        if pieces[\"branch\"] != \"master\":\n            rendered += \".dev0\"\n        rendered += \"+untagged.%d.g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n        if pieces[\"dirty\"]:\n            rendered += \".dirty\"\n    return rendered\n\n\ndef pep440_split_post(ver):\n    \"\"\"Split pep440 version string at the post-release segment.\n\n    Returns the release segments before the post-release and the\n    post-release version number (or -1 if no post-release segment is present).\n    \"\"\"\n    vc = str.split(ver, \".post\")\n    return vc[0], int(vc[1] or 0) if len(vc) == 2 else None\n\n\ndef render_pep440_pre(pieces):\n    \"\"\"TAG[.postN.devDISTANCE] -- No -dirty.\n\n    Exceptions:\n    1: no tags. 0.post0.devDISTANCE\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        if pieces[\"distance\"]:\n            # update the post release segment\n            tag_version, post_version = pep440_split_post(pieces[\"closest-tag\"])\n            rendered = tag_version\n            if post_version is not None:\n                rendered += \".post%d.dev%d\" % (post_version + 1, pieces[\"distance\"])\n            else:\n                rendered += \".post0.dev%d\" % (pieces[\"distance\"])\n        else:\n            # no commits, use the tag as the version\n            rendered = pieces[\"closest-tag\"]\n    else:\n        # exception #1\n        rendered = \"0.post0.dev%d\" % pieces[\"distance\"]\n    return rendered\n\n\ndef render_pep440_post(pieces):\n    \"\"\"TAG[.postDISTANCE[.dev0]+gHEX] .\n\n    The \".dev0\" means dirty. Note that .dev0 sorts backwards\n    (a dirty tree will appear \"older\" than the corresponding clean one),\n    but you shouldn't be releasing software with -dirty anyways.\n\n    Exceptions:\n    1: no tags. 0.postDISTANCE[.dev0]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += \".post%d\" % pieces[\"distance\"]\n            if pieces[\"dirty\"]:\n                rendered += \".dev0\"\n            rendered += plus_or_dot(pieces)\n            rendered += \"g%s\" % pieces[\"short\"]\n    else:\n        # exception #1\n        rendered = \"0.post%d\" % pieces[\"distance\"]\n        if pieces[\"dirty\"]:\n            rendered += \".dev0\"\n        rendered += \"+g%s\" % pieces[\"short\"]\n    return rendered\n\n\ndef render_pep440_post_branch(pieces):\n    \"\"\"TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] .\n\n    The \".dev0\" means not master branch.\n\n    Exceptions:\n    1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += \".post%d\" % pieces[\"distance\"]\n            if pieces[\"branch\"] != \"master\":\n                rendered += \".dev0\"\n            rendered += plus_or_dot(pieces)\n            rendered += \"g%s\" % pieces[\"short\"]\n            if pieces[\"dirty\"]:\n                rendered += \".dirty\"\n    else:\n        # exception #1\n        rendered = \"0.post%d\" % pieces[\"distance\"]\n        if pieces[\"branch\"] != \"master\":\n            rendered += \".dev0\"\n        rendered += \"+g%s\" % pieces[\"short\"]\n        if pieces[\"dirty\"]:\n            rendered += \".dirty\"\n    return rendered\n\n\ndef render_pep440_old(pieces):\n    \"\"\"TAG[.postDISTANCE[.dev0]] .\n\n    The \".dev0\" means dirty.\n\n    Exceptions:\n    1: no tags. 0.postDISTANCE[.dev0]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += \".post%d\" % pieces[\"distance\"]\n            if pieces[\"dirty\"]:\n                rendered += \".dev0\"\n    else:\n        # exception #1\n        rendered = \"0.post%d\" % pieces[\"distance\"]\n        if pieces[\"dirty\"]:\n            rendered += \".dev0\"\n    return rendered\n\n\ndef render_git_describe(pieces):\n    \"\"\"TAG[-DISTANCE-gHEX][-dirty].\n\n    Like 'git describe --tags --dirty --always'.\n\n    Exceptions:\n    1: no tags. HEX[-dirty]  (note: no 'g' prefix)\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"]:\n            rendered += \"-%d-g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n    else:\n        # exception #1\n        rendered = pieces[\"short\"]\n    if pieces[\"dirty\"]:\n        rendered += \"-dirty\"\n    return rendered\n\n\ndef render_git_describe_long(pieces):\n    \"\"\"TAG-DISTANCE-gHEX[-dirty].\n\n    Like 'git describe --tags --dirty --always -long'.\n    The distance/hash is unconditional.\n\n    Exceptions:\n    1: no tags. HEX[-dirty]  (note: no 'g' prefix)\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        rendered += \"-%d-g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n    else:\n        # exception #1\n        rendered = pieces[\"short\"]\n    if pieces[\"dirty\"]:\n        rendered += \"-dirty\"\n    return rendered\n\n\ndef render(pieces, style):\n    \"\"\"Render the given version pieces into the requested style.\"\"\"\n    if pieces[\"error\"]:\n        return {\n            \"version\": \"unknown\",\n            \"full-revisionid\": pieces.get(\"long\"),\n            \"dirty\": None,\n            \"error\": pieces[\"error\"],\n            \"date\": None,\n        }\n\n    if not style or style == \"default\":\n        style = \"pep440\"  # the default\n\n    if style == \"pep440\":\n        rendered = render_pep440(pieces)\n    elif style == \"pep440-branch\":\n        rendered = render_pep440_branch(pieces)\n    elif style == \"pep440-pre\":\n        rendered = render_pep440_pre(pieces)\n    elif style == \"pep440-post\":\n        rendered = render_pep440_post(pieces)\n    elif style == \"pep440-post-branch\":\n        rendered = render_pep440_post_branch(pieces)\n    elif style == \"pep440-old\":\n        rendered = render_pep440_old(pieces)\n    elif style == \"git-describe\":\n        rendered = render_git_describe(pieces)\n    elif style == \"git-describe-long\":\n        rendered = render_git_describe_long(pieces)\n    else:\n        raise ValueError(\"unknown style '%s'\" % style)\n\n    return {\n        \"version\": rendered,\n        \"full-revisionid\": pieces[\"long\"],\n        \"dirty\": pieces[\"dirty\"],\n        \"error\": None,\n        \"date\": pieces.get(\"date\"),\n    }\n\n\nclass VersioneerBadRootError(Exception):\n    \"\"\"The project root directory is unknown or missing key files.\"\"\"\n\n\ndef get_versions(verbose=False):\n    \"\"\"Get the project version from whatever source is available.\n\n    Returns dict with two keys: 'version' and 'full'.\n    \"\"\"\n    if \"versioneer\" in sys.modules:\n        # see the discussion in cmdclass.py:get_cmdclass()\n        del sys.modules[\"versioneer\"]\n\n    root = get_root()\n    cfg = get_config_from_root(root)\n\n    assert cfg.VCS is not None, \"please set [versioneer]VCS= in setup.cfg\"\n    handlers = HANDLERS.get(cfg.VCS)\n    assert handlers, \"unrecognized VCS '%s'\" % cfg.VCS\n    verbose = verbose or cfg.verbose\n    assert (\n        cfg.versionfile_source is not None\n    ), \"please set versioneer.versionfile_source\"\n    assert cfg.tag_prefix is not None, \"please set versioneer.tag_prefix\"\n\n    versionfile_abs = os.path.join(root, cfg.versionfile_source)\n\n    # extract version from first of: _version.py, VCS command (e.g. 'git\n    # describe'), parentdir. This is meant to work for developers using a\n    # source checkout, for users of a tarball created by 'setup.py sdist',\n    # and for users of a tarball/zipball created by 'git archive' or github's\n    # download-from-tag feature or the equivalent in other VCSes.\n\n    get_keywords_f = handlers.get(\"get_keywords\")\n    from_keywords_f = handlers.get(\"keywords\")\n    if get_keywords_f and from_keywords_f:\n        try:\n            keywords = get_keywords_f(versionfile_abs)\n            ver = from_keywords_f(keywords, cfg.tag_prefix, verbose)\n            if verbose:\n                print(\"got version from expanded keyword %s\" % ver)\n            return ver\n        except NotThisMethod:\n            pass\n\n    try:\n        ver = versions_from_file(versionfile_abs)\n        if verbose:\n            print(\"got version from file %s %s\" % (versionfile_abs, ver))\n        return ver\n    except NotThisMethod:\n        pass\n\n    from_vcs_f = handlers.get(\"pieces_from_vcs\")\n    if from_vcs_f:\n        try:\n            pieces = from_vcs_f(cfg.tag_prefix, root, verbose)\n            ver = render(pieces, cfg.style)\n            if verbose:\n                print(\"got version from VCS %s\" % ver)\n            return ver\n        except NotThisMethod:\n            pass\n\n    try:\n        if cfg.parentdir_prefix:\n            ver = versions_from_parentdir(cfg.parentdir_prefix, root, verbose)\n            if verbose:\n                print(\"got version from parentdir %s\" % ver)\n            return ver\n    except NotThisMethod:\n        pass\n\n    if verbose:\n        print(\"unable to compute version\")\n\n    return {\n        \"version\": \"0+unknown\",\n        \"full-revisionid\": None,\n        \"dirty\": None,\n        \"error\": \"unable to compute version\",\n        \"date\": None,\n    }\n\n\ndef get_version():\n    \"\"\"Get the short version string for this project.\"\"\"\n    return get_versions()[\"version\"]\n\n\ndef get_cmdclass(cmdclass=None):\n    \"\"\"Get the custom setuptools subclasses used by Versioneer.\n\n    If the package uses a different cmdclass (e.g. one from numpy), it\n    should be provide as an argument.\n    \"\"\"\n    if \"versioneer\" in sys.modules:\n        del sys.modules[\"versioneer\"]\n        # this fixes the \"python setup.py develop\" case (also 'install' and\n        # 'easy_install .'), in which subdependencies of the main project are\n        # built (using setup.py bdist_egg) in the same python process. Assume\n        # a main project A and a dependency B, which use different versions\n        # of Versioneer. A's setup.py imports A's Versioneer, leaving it in\n        # sys.modules by the time B's setup.py is executed, causing B to run\n        # with the wrong versioneer. Setuptools wraps the sub-dep builds in a\n        # sandbox that restores sys.modules to it's pre-build state, so the\n        # parent is protected against the child's \"import versioneer\". By\n        # removing ourselves from sys.modules here, before the child build\n        # happens, we protect the child from the parent's versioneer too.\n        # Also see https://github.com/python-versioneer/python-versioneer/issues/52\n\n    cmds = {} if cmdclass is None else cmdclass.copy()\n\n    # we add \"version\" to setuptools\n    from setuptools import Command\n\n    class cmd_version(Command):\n        description = \"report generated version string\"\n        user_options = []\n        boolean_options = []\n\n        def initialize_options(self):\n            pass\n\n        def finalize_options(self):\n            pass\n\n        def run(self):\n            vers = get_versions(verbose=True)\n            print(\"Version: %s\" % vers[\"version\"])\n            print(\" full-revisionid: %s\" % vers.get(\"full-revisionid\"))\n            print(\" dirty: %s\" % vers.get(\"dirty\"))\n            print(\" date: %s\" % vers.get(\"date\"))\n            if vers[\"error\"]:\n                print(\" error: %s\" % vers[\"error\"])\n\n    cmds[\"version\"] = cmd_version\n\n    # we override \"build_py\" in setuptools\n    #\n    # most invocation pathways end up running build_py:\n    #  distutils/build -> build_py\n    #  distutils/install -> distutils/build ->..\n    #  setuptools/bdist_wheel -> distutils/install ->..\n    #  setuptools/bdist_egg -> distutils/install_lib -> build_py\n    #  setuptools/install -> bdist_egg ->..\n    #  setuptools/develop -> ?\n    #  pip install:\n    #   copies source tree to a tempdir before running egg_info/etc\n    #   if .git isn't copied too, 'git describe' will fail\n    #   then does setup.py bdist_wheel, or sometimes setup.py install\n    #  setup.py egg_info -> ?\n\n    # pip install -e . and setuptool/editable_wheel will invoke build_py\n    # but the build_py command is not expected to copy any files.\n\n    # we override different \"build_py\" commands for both environments\n    if \"build_py\" in cmds:\n        _build_py = cmds[\"build_py\"]\n    else:\n        from setuptools.command.build_py import build_py as _build_py\n\n    class cmd_build_py(_build_py):\n        def run(self):\n            root = get_root()\n            cfg = get_config_from_root(root)\n            versions = get_versions()\n            _build_py.run(self)\n            if getattr(self, \"editable_mode\", False):\n                # During editable installs `.py` and data files are\n                # not copied to build_lib\n                return\n            # now locate _version.py in the new build/ directory and replace\n            # it with an updated value\n            if cfg.versionfile_build:\n                target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build)\n                print(\"UPDATING %s\" % target_versionfile)\n                write_to_version_file(target_versionfile, versions)\n\n    cmds[\"build_py\"] = cmd_build_py\n\n    if \"build_ext\" in cmds:\n        _build_ext = cmds[\"build_ext\"]\n    else:\n        from setuptools.command.build_ext import build_ext as _build_ext\n\n    class cmd_build_ext(_build_ext):\n        def run(self):\n            root = get_root()\n            cfg = get_config_from_root(root)\n            versions = get_versions()\n            _build_ext.run(self)\n            if self.inplace:\n                # build_ext --inplace will only build extensions in\n                # build/lib<..> dir with no _version.py to write to.\n                # As in place builds will already have a _version.py\n                # in the module dir, we do not need to write one.\n                return\n            # now locate _version.py in the new build/ directory and replace\n            # it with an updated value\n            if not cfg.versionfile_build:\n                return\n            target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build)\n            if not os.path.exists(target_versionfile):\n                print(\n                    f\"Warning: {target_versionfile} does not exist, skipping \"\n                    \"version update. This can happen if you are running build_ext \"\n                    \"without first running build_py.\"\n                )\n                return\n            print(\"UPDATING %s\" % target_versionfile)\n            write_to_version_file(target_versionfile, versions)\n\n    cmds[\"build_ext\"] = cmd_build_ext\n\n    if \"cx_Freeze\" in sys.modules:  # cx_freeze enabled?\n        from cx_Freeze.dist import build_exe as _build_exe\n\n        # nczeczulin reports that py2exe won't like the pep440-style string\n        # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g.\n        # setup(console=[{\n        #   \"version\": versioneer.get_version().split(\"+\", 1)[0], # FILEVERSION\n        #   \"product_version\": versioneer.get_version(),\n        #   ...\n\n        class cmd_build_exe(_build_exe):\n            def run(self):\n                root = get_root()\n                cfg = get_config_from_root(root)\n                versions = get_versions()\n                target_versionfile = cfg.versionfile_source\n                print(\"UPDATING %s\" % target_versionfile)\n                write_to_version_file(target_versionfile, versions)\n\n                _build_exe.run(self)\n                os.unlink(target_versionfile)\n                with open(cfg.versionfile_source, \"w\") as f:\n                    LONG = LONG_VERSION_PY[cfg.VCS]\n                    f.write(\n                        LONG\n                        % {\n                            \"DOLLAR\": \"$\",\n                            \"STYLE\": cfg.style,\n                            \"TAG_PREFIX\": cfg.tag_prefix,\n                            \"PARENTDIR_PREFIX\": cfg.parentdir_prefix,\n                            \"VERSIONFILE_SOURCE\": cfg.versionfile_source,\n                        }\n                    )\n\n        cmds[\"build_exe\"] = cmd_build_exe\n        del cmds[\"build_py\"]\n\n    if \"py2exe\" in sys.modules:  # py2exe enabled?\n        try:\n            from py2exe.setuptools_buildexe import py2exe as _py2exe\n        except ImportError:\n            from py2exe.distutils_buildexe import py2exe as _py2exe\n\n        class cmd_py2exe(_py2exe):\n            def run(self):\n                root = get_root()\n                cfg = get_config_from_root(root)\n                versions = get_versions()\n                target_versionfile = cfg.versionfile_source\n                print(\"UPDATING %s\" % target_versionfile)\n                write_to_version_file(target_versionfile, versions)\n\n                _py2exe.run(self)\n                os.unlink(target_versionfile)\n                with open(cfg.versionfile_source, \"w\") as f:\n                    LONG = LONG_VERSION_PY[cfg.VCS]\n                    f.write(\n                        LONG\n                        % {\n                            \"DOLLAR\": \"$\",\n                            \"STYLE\": cfg.style,\n                            \"TAG_PREFIX\": cfg.tag_prefix,\n                            \"PARENTDIR_PREFIX\": cfg.parentdir_prefix,\n                            \"VERSIONFILE_SOURCE\": cfg.versionfile_source,\n                        }\n                    )\n\n        cmds[\"py2exe\"] = cmd_py2exe\n\n    # sdist farms its file list building out to egg_info\n    if \"egg_info\" in cmds:\n        _egg_info = cmds[\"egg_info\"]\n    else:\n        from setuptools.command.egg_info import egg_info as _egg_info\n\n    class cmd_egg_info(_egg_info):\n        def find_sources(self):\n            # egg_info.find_sources builds the manifest list and writes it\n            # in one shot\n            super().find_sources()\n\n            # Modify the filelist and normalize it\n            root = get_root()\n            cfg = get_config_from_root(root)\n            self.filelist.append(\"versioneer.py\")\n            if cfg.versionfile_source:\n                # There are rare cases where versionfile_source might not be\n                # included by default, so we must be explicit\n                self.filelist.append(cfg.versionfile_source)\n            self.filelist.sort()\n            self.filelist.remove_duplicates()\n\n            # The write method is hidden in the manifest_maker instance that\n            # generated the filelist and was thrown away\n            # We will instead replicate their final normalization (to unicode,\n            # and POSIX-style paths)\n            from setuptools import unicode_utils\n\n            normalized = [\n                unicode_utils.filesys_decode(f).replace(os.sep, \"/\")\n                for f in self.filelist.files\n            ]\n\n            manifest_filename = os.path.join(self.egg_info, \"SOURCES.txt\")\n            with open(manifest_filename, \"w\") as fobj:\n                fobj.write(\"\\n\".join(normalized))\n\n    cmds[\"egg_info\"] = cmd_egg_info\n\n    # we override different \"sdist\" commands for both environments\n    if \"sdist\" in cmds:\n        _sdist = cmds[\"sdist\"]\n    else:\n        from setuptools.command.sdist import sdist as _sdist\n\n    class cmd_sdist(_sdist):\n        def run(self):\n            versions = get_versions()\n            self._versioneer_generated_versions = versions\n            # unless we update this, the command will keep using the old\n            # version\n            self.distribution.metadata.version = versions[\"version\"]\n            return _sdist.run(self)\n\n        def make_release_tree(self, base_dir, files):\n            root = get_root()\n            cfg = get_config_from_root(root)\n            _sdist.make_release_tree(self, base_dir, files)\n            # now locate _version.py in the new base_dir directory\n            # (remembering that it may be a hardlink) and replace it with an\n            # updated value\n            target_versionfile = os.path.join(base_dir, cfg.versionfile_source)\n            print(\"UPDATING %s\" % target_versionfile)\n            write_to_version_file(\n                target_versionfile, self._versioneer_generated_versions\n            )\n\n    cmds[\"sdist\"] = cmd_sdist\n\n    return cmds\n\n\nCONFIG_ERROR = \"\"\"\nsetup.cfg is missing the necessary Versioneer configuration. You need\na section like:\n\n [versioneer]\n VCS = git\n style = pep440\n versionfile_source = src/myproject/_version.py\n versionfile_build = myproject/_version.py\n tag_prefix =\n parentdir_prefix = myproject-\n\nYou will also need to edit your setup.py to use the results:\n\n import versioneer\n setup(version=versioneer.get_version(),\n       cmdclass=versioneer.get_cmdclass(), ...)\n\nPlease read the docstring in ./versioneer.py for configuration instructions,\nedit setup.cfg, and re-run the installer or 'python versioneer.py setup'.\n\"\"\"\n\nSAMPLE_CONFIG = \"\"\"\n# See the docstring in versioneer.py for instructions. Note that you must\n# re-run 'versioneer.py setup' after changing this section, and commit the\n# resulting files.\n\n[versioneer]\n#VCS = git\n#style = pep440\n#versionfile_source =\n#versionfile_build =\n#tag_prefix =\n#parentdir_prefix =\n\n\"\"\"\n\nOLD_SNIPPET = \"\"\"\nfrom ._version import get_versions\n__version__ = get_versions()['version']\ndel get_versions\n\"\"\"\n\nINIT_PY_SNIPPET = \"\"\"\nfrom . import {0}\n__version__ = {0}.get_versions()['version']\n\"\"\"\n\n\ndef do_setup():\n    \"\"\"Do main VCS-independent setup function for installing Versioneer.\"\"\"\n    root = get_root()\n    try:\n        cfg = get_config_from_root(root)\n    except (OSError, configparser.NoSectionError, configparser.NoOptionError) as e:\n        if isinstance(e, (OSError, configparser.NoSectionError)):\n            print(\"Adding sample versioneer config to setup.cfg\", file=sys.stderr)\n            with open(os.path.join(root, \"setup.cfg\"), \"a\") as f:\n                f.write(SAMPLE_CONFIG)\n        print(CONFIG_ERROR, file=sys.stderr)\n        return 1\n\n    print(\" creating %s\" % cfg.versionfile_source)\n    with open(cfg.versionfile_source, \"w\") as f:\n        LONG = LONG_VERSION_PY[cfg.VCS]\n        f.write(\n            LONG\n            % {\n                \"DOLLAR\": \"$\",\n                \"STYLE\": cfg.style,\n                \"TAG_PREFIX\": cfg.tag_prefix,\n                \"PARENTDIR_PREFIX\": cfg.parentdir_prefix,\n                \"VERSIONFILE_SOURCE\": cfg.versionfile_source,\n            }\n        )\n\n    ipy = os.path.join(os.path.dirname(cfg.versionfile_source), \"__init__.py\")\n    if os.path.exists(ipy):\n        try:\n            with open(ipy, \"r\") as f:\n                old = f.read()\n        except OSError:\n            old = \"\"\n        module = os.path.splitext(os.path.basename(cfg.versionfile_source))[0]\n        snippet = INIT_PY_SNIPPET.format(module)\n        if OLD_SNIPPET in old:\n            print(\" replacing boilerplate in %s\" % ipy)\n            with open(ipy, \"w\") as f:\n                f.write(old.replace(OLD_SNIPPET, snippet))\n        elif snippet not in old:\n            print(\" appending to %s\" % ipy)\n            with open(ipy, \"a\") as f:\n                f.write(snippet)\n        else:\n            print(\" %s unmodified\" % ipy)\n    else:\n        print(\" %s doesn't exist, ok\" % ipy)\n        ipy = None\n\n    # Make VCS-specific changes. For git, this means creating/changing\n    # .gitattributes to mark _version.py for export-subst keyword\n    # substitution.\n    do_vcs_install(cfg.versionfile_source, ipy)\n    return 0\n\n\ndef scan_setup_py():\n    \"\"\"Validate the contents of setup.py against Versioneer's expectations.\"\"\"\n    found = set()\n    setters = False\n    errors = 0\n    with open(\"setup.py\", \"r\") as f:\n        for line in f.readlines():\n            if \"import versioneer\" in line:\n                found.add(\"import\")\n            if \"versioneer.get_cmdclass()\" in line:\n                found.add(\"cmdclass\")\n            if \"versioneer.get_version()\" in line:\n                found.add(\"get_version\")\n            if \"versioneer.VCS\" in line:\n                setters = True\n            if \"versioneer.versionfile_source\" in line:\n                setters = True\n    if len(found) != 3:\n        print(\"\")\n        print(\"Your setup.py appears to be missing some important items\")\n        print(\"(but I might be wrong). Please make sure it has something\")\n        print(\"roughly like the following:\")\n        print(\"\")\n        print(\" import versioneer\")\n        print(\" setup( version=versioneer.get_version(),\")\n        print(\"        cmdclass=versioneer.get_cmdclass(),  ...)\")\n        print(\"\")\n        errors += 1\n    if setters:\n        print(\"You should remove lines like 'versioneer.VCS = ' and\")\n        print(\"'versioneer.versionfile_source = ' . This configuration\")\n        print(\"now lives in setup.cfg, and should be removed from setup.py\")\n        print(\"\")\n        errors += 1\n    return errors\n\n\ndef setup_command():\n    \"\"\"Set up Versioneer and exit with appropriate error code.\"\"\"\n    errors = do_setup()\n    errors += scan_setup_py()\n    sys.exit(1 if errors else 0)\n\n\nif __name__ == \"__main__\":\n    cmd = sys.argv[1]\n    if cmd == \"setup\":\n        setup_command()\n"
  },
  {
    "path": "xinference/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\n\n# Configure MPS memory management to avoid \"invalid low watermark ratio\" error in PyTorch 3.13+\nif os.environ.get(\"PYTORCH_MPS_HIGH_WATERMARK_RATIO\") is None:\n    os.environ[\"PYTORCH_MPS_HIGH_WATERMARK_RATIO\"] = \"1.0\"\nif os.environ.get(\"PYTORCH_MPS_LOW_WATERMARK_RATIO\") is None:\n    os.environ[\"PYTORCH_MPS_LOW_WATERMARK_RATIO\"] = \"0.2\"\n\nfrom . import _version\n\n__version__ = _version.get_versions()[\"version\"]\n\n\ntry:\n    import intel_extension_for_pytorch  # noqa: F401\nexcept Exception:\n    pass\n\n\ndef _install():\n    from xoscar.backends.router import Router\n\n    default_router = Router.get_instance_or_empty()\n    Router.set_instance(default_router)\n\n\n_install()\ndel _install\n"
  },
  {
    "path": "xinference/_compat.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import Dict, Iterable, List, Literal, Optional, Union\n\nfrom pydantic.version import VERSION as PYDANTIC_VERSION\n\nPYDANTIC_V2 = PYDANTIC_VERSION.startswith(\"2.\")\n\n\nif PYDANTIC_V2:\n    from pydantic.v1 import (  # noqa: F401\n        BaseModel,\n        Field,\n        Protocol,\n        ValidationError,\n        create_model,\n        create_model_from_namedtuple,\n        create_model_from_typeddict,\n        parse_file_as,\n        validate_arguments,\n        validator,\n    )\n    from pydantic.v1.error_wrappers import ErrorWrapper  # noqa: F401\n    from pydantic.v1.parse import load_str_bytes  # noqa: F401\n    from pydantic.v1.types import StrBytes  # noqa: F401\n    from pydantic.v1.utils import ROOT_KEY  # noqa: F401\nelse:\n    from pydantic import (  # noqa: F401\n        BaseModel,\n        Field,\n        Protocol,\n        ValidationError,\n        create_model,\n        create_model_from_namedtuple,\n        create_model_from_typeddict,\n        parse_file_as,\n        validate_arguments,\n        validator,\n    )\n    from pydantic.error_wrappers import ErrorWrapper  # noqa: F401\n    from pydantic.parse import load_str_bytes  # noqa: F401\n    from pydantic.types import StrBytes  # noqa: F401\n    from pydantic.utils import ROOT_KEY  # noqa: F401\n\nfrom openai.types.chat.chat_completion_named_tool_choice_param import (\n    ChatCompletionNamedToolChoiceParam,\n)\nfrom openai.types.chat.chat_completion_stream_options_param import (\n    ChatCompletionStreamOptionsParam,\n)\nfrom openai.types.chat.chat_completion_tool_param import ChatCompletionToolParam\nfrom openai.types.shared_params.response_format_json_object import (\n    ResponseFormatJSONObject,\n)\nfrom openai.types.shared_params.response_format_text import ResponseFormatText\n\nOpenAIChatCompletionStreamOptionsParam = create_model_from_typeddict(\n    ChatCompletionStreamOptionsParam\n)\nOpenAIChatCompletionToolParam = create_model_from_typeddict(ChatCompletionToolParam)\nOpenAIChatCompletionNamedToolChoiceParam = create_model_from_typeddict(\n    ChatCompletionNamedToolChoiceParam\n)\nfrom openai._types import Body\n\n\nclass JSONSchema(BaseModel):\n    name: str\n    description: Optional[str] = None\n    schema_: Optional[Dict[str, object]] = Field(alias=\"schema\", default=None)\n    strict: Optional[bool] = None\n\n\nclass ResponseFormatJSONSchema(BaseModel):\n    json_schema: JSONSchema\n    type: Literal[\"json_schema\"]\n\n\nResponseFormat = Union[\n    ResponseFormatText, ResponseFormatJSONObject, ResponseFormatJSONSchema\n]\n\n\nclass CreateChatCompletionOpenAI(BaseModel):\n    \"\"\"\n    Comes from source code: https://github.com/openai/openai-python/blob/main/src/openai/types/chat/completion_create_params.py\n    \"\"\"\n\n    messages: List[Dict]\n    model: str\n    frequency_penalty: Optional[float]\n    logit_bias: Optional[Dict[str, int]]\n    logprobs: Optional[bool]\n    max_completion_tokens: Optional[int]\n    max_tokens: Optional[int]\n    n: Optional[int]\n    parallel_tool_calls: Optional[bool]\n    presence_penalty: Optional[float]\n    response_format: Optional[ResponseFormat]\n    seed: Optional[int]\n    service_tier: Optional[Literal[\"auto\", \"default\"]]\n    stop: Union[Optional[str], List[str]]\n    stream_options: Optional[OpenAIChatCompletionStreamOptionsParam]  # type: ignore\n    temperature: Optional[float]\n    tool_choice: Optional[  # type: ignore\n        Union[\n            Literal[\"none\", \"auto\", \"required\"],\n            OpenAIChatCompletionNamedToolChoiceParam,\n        ]\n    ]\n    tools: Optional[Iterable[OpenAIChatCompletionToolParam]]  # type: ignore\n    top_logprobs: Optional[int]\n    top_p: Optional[float]\n    extra_body: Optional[Body]\n    user: Optional[str]\n"
  },
  {
    "path": "xinference/_version.py",
    "content": "# This file helps to compute a version number in source trees obtained from\n# git-archive tarball (such as those provided by githubs download-from-tag\n# feature). Distribution tarballs (built by setup.py sdist) and build\n# directories (produced by setup.py build) will contain a much shorter file\n# that just contains the computed version number.\n\n# This file is released into the public domain.\n# Generated by versioneer-0.28\n# https://github.com/python-versioneer/python-versioneer\n\n\"\"\"Git implementation of _version.py.\"\"\"\n\nimport errno\nimport functools\nimport os\nimport re\nimport subprocess\nimport sys\nfrom typing import Callable, Dict\n\n\ndef get_keywords():\n    \"\"\"Get the keywords needed to look up the version information.\"\"\"\n    # these strings will be replaced by git during git-archive.\n    # setup.py/versioneer.py will grep for the variable names, so they must\n    # each be defined on a line of their own. _version.py will just call\n    # get_keywords().\n    git_refnames = \"$Format:%d$\"\n    git_full = \"$Format:%H$\"\n    git_date = \"$Format:%ci$\"\n    keywords = {\"refnames\": git_refnames, \"full\": git_full, \"date\": git_date}\n    return keywords\n\n\nclass VersioneerConfig:\n    \"\"\"Container for Versioneer configuration parameters.\"\"\"\n\n\ndef get_config():\n    \"\"\"Create, populate and return the VersioneerConfig() object.\"\"\"\n    # these strings are filled in when 'setup.py versioneer' creates\n    # _version.py\n    cfg = VersioneerConfig()\n    cfg.VCS = \"git\"\n    cfg.style = \"pep440\"\n    cfg.tag_prefix = \"v\"\n    cfg.parentdir_prefix = \"xinference-\"\n    cfg.versionfile_source = \"xinference/_version.py\"\n    cfg.verbose = False\n    return cfg\n\n\nclass NotThisMethod(Exception):\n    \"\"\"Exception raised if a method is not valid for the current scenario.\"\"\"\n\n\nLONG_VERSION_PY: Dict[str, str] = {}\nHANDLERS: Dict[str, Dict[str, Callable]] = {}\n\n\ndef register_vcs_handler(vcs, method):  # decorator\n    \"\"\"Create decorator to mark a method as the handler of a VCS.\"\"\"\n\n    def decorate(f):\n        \"\"\"Store f in HANDLERS[vcs][method].\"\"\"\n        if vcs not in HANDLERS:\n            HANDLERS[vcs] = {}\n        HANDLERS[vcs][method] = f\n        return f\n\n    return decorate\n\n\ndef run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None):\n    \"\"\"Call the given command(s).\"\"\"\n    assert isinstance(commands, list)\n    process = None\n\n    popen_kwargs = {}\n    if sys.platform == \"win32\":\n        # This hides the console window if pythonw.exe is used\n        startupinfo = subprocess.STARTUPINFO()\n        startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW\n        popen_kwargs[\"startupinfo\"] = startupinfo\n\n    for command in commands:\n        try:\n            dispcmd = str([command] + args)\n            # remember shell=False, so use git.cmd on windows, not just git\n            process = subprocess.Popen(\n                [command] + args,\n                cwd=cwd,\n                env=env,\n                stdout=subprocess.PIPE,\n                stderr=(subprocess.PIPE if hide_stderr else None),\n                **popen_kwargs,\n            )\n            break\n        except OSError:\n            e = sys.exc_info()[1]\n            if e.errno == errno.ENOENT:\n                continue\n            if verbose:\n                print(\"unable to run %s\" % dispcmd)\n                print(e)\n            return None, None\n    else:\n        if verbose:\n            print(\"unable to find command, tried %s\" % (commands,))\n        return None, None\n    stdout = process.communicate()[0].strip().decode()\n    if process.returncode != 0:\n        if verbose:\n            print(\"unable to run %s (error)\" % dispcmd)\n            print(\"stdout was %s\" % stdout)\n        return None, process.returncode\n    return stdout, process.returncode\n\n\ndef versions_from_parentdir(parentdir_prefix, root, verbose):\n    \"\"\"Try to determine the version from the parent directory name.\n\n    Source tarballs conventionally unpack into a directory that includes both\n    the project name and a version string. We will also support searching up\n    two directory levels for an appropriately named parent directory\n    \"\"\"\n    rootdirs = []\n\n    for _ in range(3):\n        dirname = os.path.basename(root)\n        if dirname.startswith(parentdir_prefix):\n            return {\n                \"version\": dirname[len(parentdir_prefix) :],\n                \"full-revisionid\": None,\n                \"dirty\": False,\n                \"error\": None,\n                \"date\": None,\n            }\n        rootdirs.append(root)\n        root = os.path.dirname(root)  # up a level\n\n    if verbose:\n        print(\n            \"Tried directories %s but none started with prefix %s\"\n            % (str(rootdirs), parentdir_prefix)\n        )\n    raise NotThisMethod(\"rootdir doesn't start with parentdir_prefix\")\n\n\n@register_vcs_handler(\"git\", \"get_keywords\")\ndef git_get_keywords(versionfile_abs):\n    \"\"\"Extract version information from the given file.\"\"\"\n    # the code embedded in _version.py can just fetch the value of these\n    # keywords. When used from setup.py, we don't want to import _version.py,\n    # so we do it with a regexp instead. This function is not used from\n    # _version.py.\n    keywords = {}\n    try:\n        with open(versionfile_abs, \"r\") as fobj:\n            for line in fobj:\n                if line.strip().startswith(\"git_refnames =\"):\n                    mo = re.search(r'=\\s*\"(.*)\"', line)\n                    if mo:\n                        keywords[\"refnames\"] = mo.group(1)\n                if line.strip().startswith(\"git_full =\"):\n                    mo = re.search(r'=\\s*\"(.*)\"', line)\n                    if mo:\n                        keywords[\"full\"] = mo.group(1)\n                if line.strip().startswith(\"git_date =\"):\n                    mo = re.search(r'=\\s*\"(.*)\"', line)\n                    if mo:\n                        keywords[\"date\"] = mo.group(1)\n    except OSError:\n        pass\n    return keywords\n\n\n@register_vcs_handler(\"git\", \"keywords\")\ndef git_versions_from_keywords(keywords, tag_prefix, verbose):\n    \"\"\"Get version information from git keywords.\"\"\"\n    if \"refnames\" not in keywords:\n        raise NotThisMethod(\"Short version file found\")\n    date = keywords.get(\"date\")\n    if date is not None:\n        # Use only the last line.  Previous lines may contain GPG signature\n        # information.\n        date = date.splitlines()[-1]\n\n        # git-2.2.0 added \"%cI\", which expands to an ISO-8601 -compliant\n        # datestamp. However we prefer \"%ci\" (which expands to an \"ISO-8601\n        # -like\" string, which we must then edit to make compliant), because\n        # it's been around since git-1.5.3, and it's too difficult to\n        # discover which version we're using, or to work around using an\n        # older one.\n        date = date.strip().replace(\" \", \"T\", 1).replace(\" \", \"\", 1)\n    refnames = keywords[\"refnames\"].strip()\n    if refnames.startswith(\"$Format\"):\n        if verbose:\n            print(\"keywords are unexpanded, not using\")\n        raise NotThisMethod(\"unexpanded keywords, not a git-archive tarball\")\n    refs = {r.strip() for r in refnames.strip(\"()\").split(\",\")}\n    # starting in git-1.8.3, tags are listed as \"tag: foo-1.0\" instead of\n    # just \"foo-1.0\". If we see a \"tag: \" prefix, prefer those.\n    TAG = \"tag: \"\n    tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)}\n    if not tags:\n        # Either we're using git < 1.8.3, or there really are no tags. We use\n        # a heuristic: assume all version tags have a digit. The old git %d\n        # expansion behaves like git log --decorate=short and strips out the\n        # refs/heads/ and refs/tags/ prefixes that would let us distinguish\n        # between branches and tags. By ignoring refnames without digits, we\n        # filter out many common branch names like \"release\" and\n        # \"stabilization\", as well as \"HEAD\" and \"master\".\n        tags = {r for r in refs if re.search(r\"\\d\", r)}\n        if verbose:\n            print(\"discarding '%s', no digits\" % \",\".join(refs - tags))\n    if verbose:\n        print(\"likely tags: %s\" % \",\".join(sorted(tags)))\n    for ref in sorted(tags):\n        # sorting will prefer e.g. \"2.0\" over \"2.0rc1\"\n        if ref.startswith(tag_prefix):\n            r = ref[len(tag_prefix) :]\n            # Filter out refs that exactly match prefix or that don't start\n            # with a number once the prefix is stripped (mostly a concern\n            # when prefix is '')\n            if not re.match(r\"\\d\", r):\n                continue\n            if verbose:\n                print(\"picking %s\" % r)\n            return {\n                \"version\": r,\n                \"full-revisionid\": keywords[\"full\"].strip(),\n                \"dirty\": False,\n                \"error\": None,\n                \"date\": date,\n            }\n    # no suitable tags, so version is \"0+unknown\", but full hex is still there\n    if verbose:\n        print(\"no suitable tags, using unknown + full revision id\")\n    return {\n        \"version\": \"0+unknown\",\n        \"full-revisionid\": keywords[\"full\"].strip(),\n        \"dirty\": False,\n        \"error\": \"no suitable tags\",\n        \"date\": None,\n    }\n\n\n@register_vcs_handler(\"git\", \"pieces_from_vcs\")\ndef git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command):\n    \"\"\"Get version from 'git describe' in the root of the source tree.\n\n    This only gets called if the git-archive 'subst' keywords were *not*\n    expanded, and _version.py hasn't already been rewritten with a short\n    version string, meaning we're inside a checked out source tree.\n    \"\"\"\n    GITS = [\"git\"]\n    if sys.platform == \"win32\":\n        GITS = [\"git.cmd\", \"git.exe\"]\n\n    # GIT_DIR can interfere with correct operation of Versioneer.\n    # It may be intended to be passed to the Versioneer-versioned project,\n    # but that should not change where we get our version from.\n    env = os.environ.copy()\n    env.pop(\"GIT_DIR\", None)\n    runner = functools.partial(runner, env=env)\n\n    _, rc = runner(GITS, [\"rev-parse\", \"--git-dir\"], cwd=root, hide_stderr=not verbose)\n    if rc != 0:\n        if verbose:\n            print(\"Directory %s not under git control\" % root)\n        raise NotThisMethod(\"'git rev-parse --git-dir' returned error\")\n\n    # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]\n    # if there isn't one, this yields HEX[-dirty] (no NUM)\n    describe_out, rc = runner(\n        GITS,\n        [\n            \"describe\",\n            \"--tags\",\n            \"--dirty\",\n            \"--always\",\n            \"--long\",\n            \"--match\",\n            f\"{tag_prefix}[[:digit:]]*\",\n        ],\n        cwd=root,\n    )\n    # --long was added in git-1.5.5\n    if describe_out is None:\n        raise NotThisMethod(\"'git describe' failed\")\n    describe_out = describe_out.strip()\n    full_out, rc = runner(GITS, [\"rev-parse\", \"HEAD\"], cwd=root)\n    if full_out is None:\n        raise NotThisMethod(\"'git rev-parse' failed\")\n    full_out = full_out.strip()\n\n    pieces = {}\n    pieces[\"long\"] = full_out\n    pieces[\"short\"] = full_out[:7]  # maybe improved later\n    pieces[\"error\"] = None\n\n    branch_name, rc = runner(GITS, [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], cwd=root)\n    # --abbrev-ref was added in git-1.6.3\n    if rc != 0 or branch_name is None:\n        raise NotThisMethod(\"'git rev-parse --abbrev-ref' returned error\")\n    branch_name = branch_name.strip()\n\n    if branch_name == \"HEAD\":\n        # If we aren't exactly on a branch, pick a branch which represents\n        # the current commit. If all else fails, we are on a branchless\n        # commit.\n        branches, rc = runner(GITS, [\"branch\", \"--contains\"], cwd=root)\n        # --contains was added in git-1.5.4\n        if rc != 0 or branches is None:\n            raise NotThisMethod(\"'git branch --contains' returned error\")\n        branches = branches.split(\"\\n\")\n\n        # Remove the first line if we're running detached\n        if \"(\" in branches[0]:\n            branches.pop(0)\n\n        # Strip off the leading \"* \" from the list of branches.\n        branches = [branch[2:] for branch in branches]\n        if \"master\" in branches:\n            branch_name = \"master\"\n        elif not branches:\n            branch_name = None\n        else:\n            # Pick the first branch that is returned. Good or bad.\n            branch_name = branches[0]\n\n    pieces[\"branch\"] = branch_name\n\n    # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]\n    # TAG might have hyphens.\n    git_describe = describe_out\n\n    # look for -dirty suffix\n    dirty = git_describe.endswith(\"-dirty\")\n    pieces[\"dirty\"] = dirty\n    if dirty:\n        git_describe = git_describe[: git_describe.rindex(\"-dirty\")]\n\n    # now we have TAG-NUM-gHEX or HEX\n\n    if \"-\" in git_describe:\n        # TAG-NUM-gHEX\n        mo = re.search(r\"^(.+)-(\\d+)-g([0-9a-f]+)$\", git_describe)\n        if not mo:\n            # unparsable. Maybe git-describe is misbehaving?\n            pieces[\"error\"] = \"unable to parse git-describe output: '%s'\" % describe_out\n            return pieces\n\n        # tag\n        full_tag = mo.group(1)\n        if not full_tag.startswith(tag_prefix):\n            if verbose:\n                fmt = \"tag '%s' doesn't start with prefix '%s'\"\n                print(fmt % (full_tag, tag_prefix))\n            pieces[\"error\"] = \"tag '%s' doesn't start with prefix '%s'\" % (\n                full_tag,\n                tag_prefix,\n            )\n            return pieces\n        pieces[\"closest-tag\"] = full_tag[len(tag_prefix) :]\n\n        # distance: number of commits since tag\n        pieces[\"distance\"] = int(mo.group(2))\n\n        # commit: short hex revision ID\n        pieces[\"short\"] = mo.group(3)\n\n    else:\n        # HEX: no tags\n        pieces[\"closest-tag\"] = None\n        out, rc = runner(GITS, [\"rev-list\", \"HEAD\", \"--left-right\"], cwd=root)\n        pieces[\"distance\"] = len(out.split())  # total number of commits\n\n    # commit date: see ISO-8601 comment in git_versions_from_keywords()\n    date = runner(GITS, [\"show\", \"-s\", \"--format=%ci\", \"HEAD\"], cwd=root)[0].strip()\n    # Use only the last line.  Previous lines may contain GPG signature\n    # information.\n    date = date.splitlines()[-1]\n    pieces[\"date\"] = date.strip().replace(\" \", \"T\", 1).replace(\" \", \"\", 1)\n\n    return pieces\n\n\ndef plus_or_dot(pieces):\n    \"\"\"Return a + if we don't already have one, else return a .\"\"\"\n    if \"+\" in pieces.get(\"closest-tag\", \"\"):\n        return \".\"\n    return \"+\"\n\n\ndef render_pep440(pieces):\n    \"\"\"Build up version string, with post-release \"local version identifier\".\n\n    Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you\n    get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty\n\n    Exceptions:\n    1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += plus_or_dot(pieces)\n            rendered += \"%d.g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n            if pieces[\"dirty\"]:\n                rendered += \".dirty\"\n    else:\n        # exception #1\n        rendered = \"0+untagged.%d.g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n        if pieces[\"dirty\"]:\n            rendered += \".dirty\"\n    return rendered\n\n\ndef render_pep440_branch(pieces):\n    \"\"\"TAG[[.dev0]+DISTANCE.gHEX[.dirty]] .\n\n    The \".dev0\" means not master branch. Note that .dev0 sorts backwards\n    (a feature branch will appear \"older\" than the master branch).\n\n    Exceptions:\n    1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            if pieces[\"branch\"] != \"master\":\n                rendered += \".dev0\"\n            rendered += plus_or_dot(pieces)\n            rendered += \"%d.g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n            if pieces[\"dirty\"]:\n                rendered += \".dirty\"\n    else:\n        # exception #1\n        rendered = \"0\"\n        if pieces[\"branch\"] != \"master\":\n            rendered += \".dev0\"\n        rendered += \"+untagged.%d.g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n        if pieces[\"dirty\"]:\n            rendered += \".dirty\"\n    return rendered\n\n\ndef pep440_split_post(ver):\n    \"\"\"Split pep440 version string at the post-release segment.\n\n    Returns the release segments before the post-release and the\n    post-release version number (or -1 if no post-release segment is present).\n    \"\"\"\n    vc = str.split(ver, \".post\")\n    return vc[0], int(vc[1] or 0) if len(vc) == 2 else None\n\n\ndef render_pep440_pre(pieces):\n    \"\"\"TAG[.postN.devDISTANCE] -- No -dirty.\n\n    Exceptions:\n    1: no tags. 0.post0.devDISTANCE\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        if pieces[\"distance\"]:\n            # update the post release segment\n            tag_version, post_version = pep440_split_post(pieces[\"closest-tag\"])\n            rendered = tag_version\n            if post_version is not None:\n                rendered += \".post%d.dev%d\" % (post_version + 1, pieces[\"distance\"])\n            else:\n                rendered += \".post0.dev%d\" % (pieces[\"distance\"])\n        else:\n            # no commits, use the tag as the version\n            rendered = pieces[\"closest-tag\"]\n    else:\n        # exception #1\n        rendered = \"0.post0.dev%d\" % pieces[\"distance\"]\n    return rendered\n\n\ndef render_pep440_post(pieces):\n    \"\"\"TAG[.postDISTANCE[.dev0]+gHEX] .\n\n    The \".dev0\" means dirty. Note that .dev0 sorts backwards\n    (a dirty tree will appear \"older\" than the corresponding clean one),\n    but you shouldn't be releasing software with -dirty anyways.\n\n    Exceptions:\n    1: no tags. 0.postDISTANCE[.dev0]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += \".post%d\" % pieces[\"distance\"]\n            if pieces[\"dirty\"]:\n                rendered += \".dev0\"\n            rendered += plus_or_dot(pieces)\n            rendered += \"g%s\" % pieces[\"short\"]\n    else:\n        # exception #1\n        rendered = \"0.post%d\" % pieces[\"distance\"]\n        if pieces[\"dirty\"]:\n            rendered += \".dev0\"\n        rendered += \"+g%s\" % pieces[\"short\"]\n    return rendered\n\n\ndef render_pep440_post_branch(pieces):\n    \"\"\"TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] .\n\n    The \".dev0\" means not master branch.\n\n    Exceptions:\n    1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += \".post%d\" % pieces[\"distance\"]\n            if pieces[\"branch\"] != \"master\":\n                rendered += \".dev0\"\n            rendered += plus_or_dot(pieces)\n            rendered += \"g%s\" % pieces[\"short\"]\n            if pieces[\"dirty\"]:\n                rendered += \".dirty\"\n    else:\n        # exception #1\n        rendered = \"0.post%d\" % pieces[\"distance\"]\n        if pieces[\"branch\"] != \"master\":\n            rendered += \".dev0\"\n        rendered += \"+g%s\" % pieces[\"short\"]\n        if pieces[\"dirty\"]:\n            rendered += \".dirty\"\n    return rendered\n\n\ndef render_pep440_old(pieces):\n    \"\"\"TAG[.postDISTANCE[.dev0]] .\n\n    The \".dev0\" means dirty.\n\n    Exceptions:\n    1: no tags. 0.postDISTANCE[.dev0]\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"] or pieces[\"dirty\"]:\n            rendered += \".post%d\" % pieces[\"distance\"]\n            if pieces[\"dirty\"]:\n                rendered += \".dev0\"\n    else:\n        # exception #1\n        rendered = \"0.post%d\" % pieces[\"distance\"]\n        if pieces[\"dirty\"]:\n            rendered += \".dev0\"\n    return rendered\n\n\ndef render_git_describe(pieces):\n    \"\"\"TAG[-DISTANCE-gHEX][-dirty].\n\n    Like 'git describe --tags --dirty --always'.\n\n    Exceptions:\n    1: no tags. HEX[-dirty]  (note: no 'g' prefix)\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        if pieces[\"distance\"]:\n            rendered += \"-%d-g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n    else:\n        # exception #1\n        rendered = pieces[\"short\"]\n    if pieces[\"dirty\"]:\n        rendered += \"-dirty\"\n    return rendered\n\n\ndef render_git_describe_long(pieces):\n    \"\"\"TAG-DISTANCE-gHEX[-dirty].\n\n    Like 'git describe --tags --dirty --always -long'.\n    The distance/hash is unconditional.\n\n    Exceptions:\n    1: no tags. HEX[-dirty]  (note: no 'g' prefix)\n    \"\"\"\n    if pieces[\"closest-tag\"]:\n        rendered = pieces[\"closest-tag\"]\n        rendered += \"-%d-g%s\" % (pieces[\"distance\"], pieces[\"short\"])\n    else:\n        # exception #1\n        rendered = pieces[\"short\"]\n    if pieces[\"dirty\"]:\n        rendered += \"-dirty\"\n    return rendered\n\n\ndef render(pieces, style):\n    \"\"\"Render the given version pieces into the requested style.\"\"\"\n    if pieces[\"error\"]:\n        return {\n            \"version\": \"unknown\",\n            \"full-revisionid\": pieces.get(\"long\"),\n            \"dirty\": None,\n            \"error\": pieces[\"error\"],\n            \"date\": None,\n        }\n\n    if not style or style == \"default\":\n        style = \"pep440\"  # the default\n\n    if style == \"pep440\":\n        rendered = render_pep440(pieces)\n    elif style == \"pep440-branch\":\n        rendered = render_pep440_branch(pieces)\n    elif style == \"pep440-pre\":\n        rendered = render_pep440_pre(pieces)\n    elif style == \"pep440-post\":\n        rendered = render_pep440_post(pieces)\n    elif style == \"pep440-post-branch\":\n        rendered = render_pep440_post_branch(pieces)\n    elif style == \"pep440-old\":\n        rendered = render_pep440_old(pieces)\n    elif style == \"git-describe\":\n        rendered = render_git_describe(pieces)\n    elif style == \"git-describe-long\":\n        rendered = render_git_describe_long(pieces)\n    else:\n        raise ValueError(\"unknown style '%s'\" % style)\n\n    return {\n        \"version\": rendered,\n        \"full-revisionid\": pieces[\"long\"],\n        \"dirty\": pieces[\"dirty\"],\n        \"error\": None,\n        \"date\": pieces.get(\"date\"),\n    }\n\n\ndef get_versions():\n    \"\"\"Get version information or return default if unable to do so.\"\"\"\n    # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have\n    # __file__, we can work backwards from there to the root. Some\n    # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which\n    # case we can only use expanded keywords.\n\n    cfg = get_config()\n    verbose = cfg.verbose\n\n    try:\n        return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, verbose)\n    except NotThisMethod:\n        pass\n\n    try:\n        root = os.path.realpath(__file__)\n        # versionfile_source is the relative path from the top of the source\n        # tree (where the .git directory might live) to this file. Invert\n        # this to find the root from __file__.\n        for _ in cfg.versionfile_source.split(\"/\"):\n            root = os.path.dirname(root)\n    except NameError:\n        return {\n            \"version\": \"0+unknown\",\n            \"full-revisionid\": None,\n            \"dirty\": None,\n            \"error\": \"unable to find root of source tree\",\n            \"date\": None,\n        }\n\n    try:\n        pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose)\n        return render(pieces, cfg.style)\n    except NotThisMethod:\n        pass\n\n    try:\n        if cfg.parentdir_prefix:\n            return versions_from_parentdir(cfg.parentdir_prefix, root, verbose)\n    except NotThisMethod:\n        pass\n\n    return {\n        \"version\": \"0+unknown\",\n        \"full-revisionid\": None,\n        \"dirty\": None,\n        \"error\": \"unable to compute version\",\n        \"date\": None,\n    }\n"
  },
  {
    "path": "xinference/api/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/api/dependencies.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"FastAPI dependency injection for REST API handlers.\n\nThe API instance is attached to the app in RESTfulAPI.serve() via app.state.api.\nHandlers inject it via Depends(get_api); supervisor ref is obtained in-handler\nwith await api._get_supervisor_ref() when needed.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom fastapi import Request\n\nif TYPE_CHECKING:\n    from .restful_api import RESTfulAPI\n\n\ndef get_api(request: Request) -> \"RESTfulAPI\":\n    \"\"\"Return the RESTfulAPI instance for the current app (set in serve()).\"\"\"\n    return request.app.state.api\n"
  },
  {
    "path": "xinference/api/oauth2/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/api/oauth2/auth_service.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport re\nfrom datetime import timedelta\nfrom typing import List, Optional, Tuple\n\nfrom fastapi import Depends, HTTPException, status\nfrom fastapi.security import OAuth2PasswordBearer, SecurityScopes\nfrom jose import JWTError, jwt\nfrom typing_extensions import Annotated\n\nfrom ..._compat import BaseModel, ValidationError, parse_file_as\nfrom .types import AuthStartupConfig, User\nfrom .utils import create_access_token, get_password_hash, verify_password\n\noauth2_scheme = OAuth2PasswordBearer(tokenUrl=\"token\")\n\n\nclass TokenData(BaseModel):\n    username: str\n    scopes: List[str] = []\n\n\nclass AuthService:\n    def __init__(self, auth_config_file: Optional[str]):\n        self._auth_config_file = auth_config_file\n        self._config = self.init_auth_config()\n\n    @property\n    def config(self):\n        return self._config\n\n    @staticmethod\n    def is_legal_api_key(key: str) -> bool:\n        pattern = re.compile(\"^sk-[a-zA-Z0-9]{13}$\")\n        return re.match(pattern, key) is not None\n\n    def init_auth_config(self):\n        if self._auth_config_file:\n            config: AuthStartupConfig = parse_file_as(  # type: ignore\n                path=self._auth_config_file, type_=AuthStartupConfig\n            )\n            all_api_keys = set()\n            for user in config.user_config:\n                user.password = get_password_hash(user.password)\n                for api_key in user.api_keys:\n                    if not self.is_legal_api_key(api_key):\n                        raise ValueError(\n                            \"Api-Key should be a string started with 'sk-' with a total length of 16\"\n                        )\n                    if api_key in all_api_keys:\n                        raise ValueError(\n                            \"Duplicate api-keys exists, please check your configuration\"\n                        )\n                    else:\n                        all_api_keys.add(api_key)\n            return config\n\n    def __call__(\n        self,\n        security_scopes: SecurityScopes,\n        token: Annotated[str, Depends(oauth2_scheme)],\n    ):\n        \"\"\"\n        Advanced dependencies. See: https://fastapi.tiangolo.com/advanced/advanced-dependencies/\n        \"\"\"\n        if security_scopes.scopes:\n            authenticate_value = f'Bearer scope=\"{security_scopes.scope_str}\"'\n        else:\n            authenticate_value = \"Bearer\"\n        credentials_exception = HTTPException(\n            status_code=status.HTTP_401_UNAUTHORIZED,\n            detail=\"Could not validate credentials\",\n            headers={\"WWW-Authenticate\": authenticate_value},\n        )\n\n        if self.is_legal_api_key(token):\n            user, token_scopes = self.get_user_and_scopes_with_api_key(token)\n        else:\n            try:\n                assert self._config is not None\n                payload = jwt.decode(\n                    token,\n                    self._config.auth_config.secret_key,\n                    algorithms=[self._config.auth_config.algorithm],\n                    options={\"verify_exp\": False},  # TODO: supports token expiration\n                )\n                username: str = payload.get(\"sub\")\n                if username is None:\n                    raise credentials_exception\n                token_scopes = payload.get(\"scopes\", [])\n                user = self.get_user(username)\n            except (JWTError, ValidationError):\n                raise credentials_exception\n        if user is None:\n            raise credentials_exception\n        if \"admin\" in token_scopes:\n            return user\n        for scope in security_scopes.scopes:\n            if scope not in token_scopes:\n                raise HTTPException(\n                    status_code=status.HTTP_403_FORBIDDEN,\n                    detail=\"Not enough permissions\",\n                    headers={\"WWW-Authenticate\": authenticate_value},\n                )\n        return user\n\n    def get_user(self, username: str) -> Optional[User]:\n        for user in self._config.user_config:\n            if user.username == username:\n                return user\n        return None\n\n    def get_user_and_scopes_with_api_key(\n        self, api_key: str\n    ) -> Tuple[Optional[User], List]:\n        for user in self._config.user_config:\n            for key in user.api_keys:\n                if api_key == key:\n                    return user, user.permissions\n        return None, []\n\n    def authenticate_user(self, username: str, password: str):\n        user = self.get_user(username)\n        if not user:\n            return False\n        if not verify_password(password, user.password):\n            return False\n        return user\n\n    def generate_token_for_user(self, username: str, password: str):\n        user = self.authenticate_user(username, password)\n        if not user:\n            raise HTTPException(\n                status_code=status.HTTP_401_UNAUTHORIZED,\n                detail=\"Incorrect username or password\",\n                headers={\"WWW-Authenticate\": \"Bearer\"},\n            )\n        assert user is not None and isinstance(user, User)\n        access_token_expires = timedelta(\n            minutes=self._config.auth_config.token_expire_in_minutes\n        )\n        access_token = create_access_token(\n            data={\"sub\": user.username, \"scopes\": user.permissions},\n            secret_key=self._config.auth_config.secret_key,\n            algorithm=self._config.auth_config.algorithm,\n            expires_delta=access_token_expires,\n        )\n        return {\"access_token\": access_token, \"token_type\": \"bearer\"}\n"
  },
  {
    "path": "xinference/api/oauth2/types.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import List\n\nfrom ..._compat import BaseModel\n\n\nclass LoginUserForm(BaseModel):\n    username: str\n    password: str\n\n\nclass User(LoginUserForm):\n    permissions: List[str]\n    api_keys: List[str]\n\n\nclass AuthConfig(BaseModel):\n    algorithm: str = \"HS256\"\n    secret_key: str\n    token_expire_in_minutes: int\n\n\nclass AuthStartupConfig(BaseModel):\n    auth_config: AuthConfig\n    user_config: List[User]\n"
  },
  {
    "path": "xinference/api/oauth2/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom datetime import datetime, timedelta\nfrom typing import Union\n\nimport bcrypt\nfrom jose import jwt\n\n\ndef create_access_token(\n    data: dict,\n    secret_key: str,\n    algorithm: str,\n    expires_delta: Union[timedelta, None] = None,\n):\n    to_encode = data.copy()\n    if expires_delta:\n        expire = datetime.utcnow() + expires_delta\n    else:\n        expire = datetime.utcnow() + timedelta(minutes=15)\n    to_encode.update({\"exp\": expire})\n    encoded_jwt = jwt.encode(to_encode, secret_key, algorithm=algorithm)\n    return encoded_jwt\n\n\ndef verify_password(plain_password, hashed_password):\n    if isinstance(plain_password, str):\n        plain_password = plain_password.encode(\"utf-8\")\n    if isinstance(hashed_password, str):\n        hashed_password = hashed_password.encode(\"utf-8\")\n\n    if len(plain_password) > 72:\n        import hashlib\n\n        password_hash = hashlib.sha256(plain_password).digest()\n        plain_password = password_hash[:72]\n\n    return bcrypt.checkpw(plain_password, hashed_password)\n\n\ndef get_password_hash(password):\n    if isinstance(password, str):\n        password = password.encode(\"utf-8\")\n\n    if len(password) > 72:\n        import hashlib\n\n        password_hash = hashlib.sha256(password).digest()\n        password = password_hash[:72]\n\n    salt = bcrypt.gensalt()\n    hashed = bcrypt.hashpw(password, salt)\n\n    return hashed.decode(\"utf-8\")\n"
  },
  {
    "path": "xinference/api/responses.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Shared response types for the REST API.\"\"\"\n\nfrom typing import Any\n\nfrom starlette.responses import JSONResponse as StarletteJSONResponse\n\nfrom ..core.utils import json_dumps\n\n\nclass JSONResponse(StarletteJSONResponse):\n    \"\"\"JSON response that uses the project's json_dumps for consistent serialization.\"\"\"\n\n    def render(self, content: Any) -> bytes:\n        return json_dumps(content)\n"
  },
  {
    "path": "xinference/api/restful_api.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport inspect\nimport ipaddress\nimport json\nimport logging\nimport multiprocessing\nimport os\nimport pprint\nimport time\nimport uuid\nimport warnings\nfrom typing import Any, List, Optional, Union, get_type_hints\n\nimport gradio as gr\nimport xoscar as xo\nfrom aioprometheus import REGISTRY, MetricsMiddleware\nfrom aioprometheus.asgi.starlette import metrics\nfrom fastapi import (\n    APIRouter,\n    FastAPI,\n    File,\n    Form,\n    HTTPException,\n    Query,\n    Request,\n    Response,\n    UploadFile,\n)\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom fastapi.staticfiles import StaticFiles\nfrom PIL import Image\nfrom sse_starlette.sse import EventSourceResponse\nfrom starlette.responses import PlainTextResponse, RedirectResponse\nfrom uvicorn import Config, Server\nfrom xoscar.utils import get_next_port\n\nfrom ..constants import (\n    XINFERENCE_ALLOWED_IPS,\n    XINFERENCE_DEFAULT_CANCEL_BLOCK_DURATION,\n    XINFERENCE_DEFAULT_ENDPOINT_PORT,\n    XINFERENCE_DISABLE_METRICS,\n    XINFERENCE_ENABLE_OTEL,\n    XINFERENCE_SSE_PING_ATTEMPTS_SECONDS,\n)\nfrom ..core.event import Event, EventCollectorActor, EventType\nfrom ..core.supervisor import SupervisorActor\nfrom ..core.utils import CancelMixin\nfrom ..types import (\n    CreateChatCompletion,\n    CreateMessage,\n    PeftModelConfig,\n    max_tokens_field,\n)\nfrom .oauth2.auth_service import AuthService\nfrom .responses import JSONResponse\nfrom .schemas import (\n    AutoConfigLLMRequest,\n    BuildGradioInterfaceRequest,\n    BuildGradioMediaInterfaceRequest,\n    CreateCompletionRequest,\n    CreateEmbeddingRequest,\n    RegisterModelRequest,\n    RerankRequest,\n    SDAPIImg2imgRequst,\n    SDAPIOptionsRequest,\n    SDAPITxt2imgRequst,\n    SpeechRequest,\n    TextToImageRequest,\n    TextToVideoRequest,\n    UpdateModelRequest,\n)\nfrom .utils import require_model\n\nlogger = logging.getLogger(__name__)\n\n\nclass RESTfulAPI(CancelMixin):\n    # Add new class attributes\n    _allowed_ip_list: Optional[List[ipaddress.IPv4Network]] = None\n\n    def __init__(\n        self,\n        supervisor_address: str,\n        host: str,\n        port: int,\n        auth_config_file: Optional[str] = None,\n    ):\n        super().__init__()\n        self._supervisor_address = supervisor_address\n        self._host = host\n        self._port = port\n        self._supervisor_ref = None\n        self._event_collector_ref = None\n        self._auth_service = AuthService(auth_config_file)\n        self._router = APIRouter()\n        self._app = FastAPI()\n        # Initialize allowed IP list once\n        self._init_allowed_ip_list()\n\n    def _init_allowed_ip_list(self):\n        \"\"\"Initialize the allowed IP list from environment variable.\"\"\"\n        if RESTfulAPI._allowed_ip_list is None:\n            # ie: export XINFERENCE_ALLOWED_IPS=192.168.1.0/24\n            allowed_ips = XINFERENCE_ALLOWED_IPS\n            if allowed_ips:\n                RESTfulAPI._allowed_ip_list = []\n                for ip in allowed_ips.split(\",\"):\n                    ip = ip.strip()\n                    try:\n                        # Try parsing as network/CIDR\n                        if \"/\" in ip:\n                            RESTfulAPI._allowed_ip_list.append(ipaddress.ip_network(ip))\n                        else:\n                            # Parse as single IP\n                            RESTfulAPI._allowed_ip_list.append(\n                                ipaddress.ip_network(f\"{ip}/32\")\n                            )\n                    except ValueError:\n                        logger.error(\n                            f\"Invalid IP address or network: {ip}\", exc_info=True\n                        )\n                        continue\n\n    def _is_ip_allowed(self, ip: str) -> bool:\n        \"\"\"Check if an IP is allowed based on configured rules.\"\"\"\n        if not RESTfulAPI._allowed_ip_list:\n            return True\n\n        try:\n            client_ip = ipaddress.ip_address(ip)\n            return any(\n                client_ip in allowed_net for allowed_net in RESTfulAPI._allowed_ip_list\n            )\n        except ValueError:\n            return False\n\n    def is_authenticated(self):\n        return False if self._auth_service.config is None else True\n\n    @staticmethod\n    def handle_request_limit_error(e: Exception):\n        if \"Rate limit reached\" in str(e):\n            raise HTTPException(status_code=429, detail=str(e))\n\n    @staticmethod\n    def _set_trace_model(model_uid: Optional[str]) -> None:\n        if not model_uid:\n            return\n\n        try:\n            from opentelemetry.trace import get_current_span\n\n            span = get_current_span()\n            if span is not None and span.is_recording():\n                span.set_attribute(\"xinference.model_uid\", model_uid)\n        except ImportError:\n            return\n        except Exception:\n            logger.debug(\"Failed to attach model uid to current trace span.\")\n\n    @staticmethod\n    def _set_trace_model_type(model_type: Optional[str]) -> None:\n        if not model_type:\n            return\n\n        try:\n            from opentelemetry.trace import get_current_span\n\n            span = get_current_span()\n            if span is not None and span.is_recording():\n                span.set_attribute(\"xinference.model_type\", model_type)\n        except ImportError:\n            return\n        except Exception:\n            logger.debug(\"Failed to attach model type to current trace span.\")\n\n    async def _get_supervisor_ref(self) -> xo.ActorRefType[SupervisorActor]:\n        if self._supervisor_ref is None:\n            self._supervisor_ref = await xo.actor_ref(\n                address=self._supervisor_address, uid=SupervisorActor.default_uid()\n            )\n        return self._supervisor_ref\n\n    async def _get_event_collector_ref(self) -> xo.ActorRefType[EventCollectorActor]:\n        if self._event_collector_ref is None:\n            self._event_collector_ref = await xo.actor_ref(\n                address=self._supervisor_address, uid=EventCollectorActor.default_uid()\n            )\n        return self._event_collector_ref\n\n    async def _report_error_event(self, model_uid: Optional[str], content: str) -> None:\n        if model_uid is None:\n            return\n        try:\n            event_collector_ref = await self._get_event_collector_ref()\n            await event_collector_ref.report_event(\n                model_uid,\n                Event(\n                    event_type=EventType.ERROR,\n                    event_ts=int(time.time()),\n                    event_content=content,\n                ),\n            )\n        except Exception:\n            logger.exception(\n                \"Report error event failed, model: %s, content: %s\", model_uid, content\n            )\n\n    def serve(self, logging_conf: Optional[dict] = None):\n        self._app.add_middleware(\n            CORSMiddleware,\n            allow_origins=[\"*\"],\n            allow_credentials=True,\n            allow_methods=[\"*\"],\n            allow_headers=[\"*\"],\n        )\n\n        @self._app.middleware(\"http\")\n        async def ip_restriction_middleware(request: Request, call_next):\n            client_ip = request.client.host\n            if not self._is_ip_allowed(client_ip):\n                return PlainTextResponse(\n                    status_code=403, content=f\"Access denied for IP: {client_ip}\\n\"\n                )\n            response = await call_next(request)\n            return response\n\n        # Initialise OpenTelemetry tracing & metrics (no-op when disabled)\n        if XINFERENCE_ENABLE_OTEL:\n            try:\n                from ..core.otel import setup_otel\n\n                setup_otel(self._app, register_worker_metrics=False)\n            except Exception:\n                logger.exception(\n                    \"Failed to initialise OpenTelemetry — continuing without OTEL.\"\n                )\n\n        @self._app.exception_handler(500)\n        async def internal_exception_handler(request: Request, exc: Exception):\n            logger.exception(\"Handling request %s failed: %s\", request.url, exc)\n            return PlainTextResponse(\n                status_code=500, content=f\"Internal Server Error: {exc}\"\n            )\n\n        # Attach API instance for dependency injection (Depends(get_api), etc.)\n        self._app.state.api = self\n\n        # Register all domain routes from routers/ modules\n        from .routers import register_all_routes\n\n        register_all_routes(self)\n\n        if XINFERENCE_DISABLE_METRICS:\n            logger.info(\n                \"Supervisor metrics is disabled due to the environment XINFERENCE_DISABLE_METRICS=1\"\n            )\n            self._app.include_router(self._router)\n        else:\n            # Clear the global Registry for the MetricsMiddleware, or\n            # the MetricsMiddleware will register duplicated metrics if the port\n            # conflict (This serve method run more than once).\n            REGISTRY.clear()\n            self._app.add_middleware(MetricsMiddleware)\n            self._app.include_router(self._router)\n            self._app.add_route(\"/metrics\", metrics)\n\n        # Check all the routes returns Response.\n        # This is to avoid `jsonable_encoder` performance issue:\n        # https://github.com/xorbitsai/inference/issues/647\n        invalid_routes = []\n        try:\n            for router in self._router.routes:\n                return_annotation = router.endpoint.__annotations__.get(\"return\")\n                # Resolve string annotations (e.g. under __future__ annotations)\n                if isinstance(return_annotation, str):\n                    try:\n                        hints = get_type_hints(router.endpoint)\n                        return_annotation = hints.get(\"return\")\n                    except Exception:\n                        pass\n                    # Fallback: resolve by name from the endpoint's module globals\n                    if isinstance(return_annotation, str):\n                        globals = getattr(router.endpoint, \"__globals__\", {})\n                        return_annotation = globals.get(\n                            return_annotation, return_annotation\n                        )\n                if not inspect.isclass(return_annotation) or not issubclass(\n                    return_annotation, Response\n                ):\n                    invalid_routes.append(\n                        (router.path, router.endpoint, return_annotation)\n                    )\n        except Exception:\n            pass  # In case that some Python version does not have __annotations__\n        if invalid_routes:\n            raise Exception(\n                f\"The return value type of the following routes is not Response: \\n\"\n                f\"{pprint.pformat(invalid_routes)}\"\n            )\n\n        class SPAStaticFiles(StaticFiles):\n            async def get_response(self, path: str, scope):\n                response = await super().get_response(path, scope)\n                if response.status_code == 404:\n                    response = await super().get_response(\".\", scope)\n                return response\n\n        try:\n            package_file_path = __import__(\"xinference\").__file__\n            assert package_file_path is not None\n            lib_location = os.path.abspath(os.path.dirname(package_file_path))\n            ui_location = os.path.join(lib_location, \"ui/web/ui/build/\")\n        except ImportError as e:\n            raise ImportError(f\"Xinference is imported incorrectly: {e}\")\n\n        if os.path.exists(ui_location):\n\n            @self._app.get(\"/\")\n            def read_main():\n                response = RedirectResponse(url=\"/ui/\")\n                return response\n\n            self._app.mount(\n                \"/ui/\",\n                SPAStaticFiles(directory=ui_location, html=True),\n            )\n        else:\n            warnings.warn(\n                f\"\"\"\n            Xinference ui is not built at expected directory: {ui_location}\n            To resolve this warning, navigate to {os.path.join(lib_location, \"ui/web/ui/\")}\n            And build the Xinference ui by running \"npm run build\"\n            \"\"\"\n            )\n\n        config = Config(\n            app=self._app, host=self._host, port=self._port, log_config=logging_conf\n        )\n        server = Server(config)\n        server.run()\n\n    async def _get_builtin_prompts(self) -> JSONResponse:\n        \"\"\"\n        For internal usage\n        \"\"\"\n        try:\n            data = await (await self._get_supervisor_ref()).get_builtin_prompts()\n            return JSONResponse(content=data)\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def _get_builtin_families(self) -> JSONResponse:\n        \"\"\"\n        For internal usage\n        \"\"\"\n        try:\n            data = await (await self._get_supervisor_ref()).get_builtin_families()\n            return JSONResponse(content=data)\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def build_llm_registration_from_config(\n        self, request: Request\n    ) -> JSONResponse:\n        try:\n            body = AutoConfigLLMRequest.parse_obj(await request.json())\n            from ..model.llm.config_parser import (\n                build_llm_registration_from_local_config,\n            )\n\n            data = build_llm_registration_from_local_config(\n                model_path=body.model_path,\n                model_family=body.model_family,\n            )\n            return JSONResponse(content=data)\n        except ValueError as re:\n            logger.error(re, exc_info=True)\n            raise HTTPException(status_code=400, detail=str(re))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def list_models(self) -> JSONResponse:\n        try:\n            models = await (await self._get_supervisor_ref()).list_models()\n\n            model_list = []\n            for model_id, model_info in models.items():\n                model_list.append(\n                    {\n                        \"id\": model_id,\n                        \"object\": \"model\",\n                        \"created\": 0,\n                        \"owned_by\": \"xinference\",\n                        **model_info,\n                    }\n                )\n            response = {\"object\": \"list\", \"data\": model_list}\n\n            return JSONResponse(content=response)\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def anthropic_list_models(self) -> JSONResponse:\n        \"\"\"Anthropic-compatible models endpoint\"\"\"\n        try:\n\n            # Get running models from xinference\n            running_models = await (await self._get_supervisor_ref()).list_models()\n\n            # For backward compatibility with tests, only return running models by default\n            model_list = []\n\n            # Add running models to the list\n            for model_id, model_info in running_models.items():\n                anthropic_model = {\n                    \"id\": model_id,\n                    \"object\": \"model\",\n                    \"created\": 0,\n                    \"display_name\": model_info.get(\"model_name\", model_id),\n                    \"type\": model_info.get(\"model_type\", \"model\"),\n                    \"max_tokens\": model_info.get(\"context_length\", 4096),\n                }\n                model_list.append(anthropic_model)\n\n            return JSONResponse(content=model_list)\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def anthropic_get_model(self, model_id: str) -> JSONResponse:\n        \"\"\"Anthropic-compatible model retrieval endpoint\"\"\"\n        try:\n            models = await (await self._get_supervisor_ref()).list_models()\n\n            model_info = models[model_id]\n\n            # Convert to Anthropic format\n            anthropic_model = {\n                \"id\": model_id,  # Return the original requested ID\n                \"object\": \"model\",\n                \"created\": 0,\n                \"display_name\": model_info.get(\"model_name\", model_id),\n                \"type\": model_info.get(\"model_type\", \"model\"),\n                \"max_tokens\": model_info.get(\"context_length\", 4096),\n                **model_info,\n            }\n\n            return JSONResponse(content=anthropic_model)\n        except HTTPException:\n            raise\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def describe_model(self, model_uid: str) -> JSONResponse:\n        try:\n            data = await (await self._get_supervisor_ref()).describe_model(model_uid)\n            return JSONResponse(content=data)\n        except ValueError as ve:\n            logger.error(str(ve), exc_info=True)\n            raise HTTPException(status_code=400, detail=str(ve))\n\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def launch_model(\n        self, request: Request, wait_ready: bool = Query(True)\n    ) -> JSONResponse:\n        payload = await request.json()\n        model_uid = payload.get(\"model_uid\")\n        model_name = payload.get(\"model_name\")\n        model_engine = payload.get(\"model_engine\")\n        model_size_in_billions = payload.get(\"model_size_in_billions\")\n        model_format = payload.get(\"model_format\")\n        quantization = payload.get(\"quantization\")\n        model_type = payload.get(\"model_type\", \"LLM\")\n        replica = payload.get(\"replica\", 1)\n        n_gpu = payload.get(\"n_gpu\", \"auto\")\n        request_limits = payload.get(\"request_limits\", None)\n        peft_model_config = payload.get(\"peft_model_config\", None)\n        worker_ip = payload.get(\"worker_ip\", None)\n        gpu_idx = payload.get(\"gpu_idx\", None)\n        download_hub = payload.get(\"download_hub\", None)\n        model_path = payload.get(\"model_path\", None)\n        enable_virtual_env = payload.get(\"enable_virtual_env\", None)\n        virtual_env_packages = payload.get(\"virtual_env_packages\", None)\n        envs = payload.get(\"envs\", None)\n\n        exclude_keys = {\n            \"model_uid\",\n            \"model_name\",\n            \"model_engine\",\n            \"model_size_in_billions\",\n            \"model_format\",\n            \"quantization\",\n            \"model_type\",\n            \"replica\",\n            \"n_gpu\",\n            \"request_limits\",\n            \"peft_model_config\",\n            \"worker_ip\",\n            \"gpu_idx\",\n            \"download_hub\",\n            \"model_path\",\n            \"enable_virtual_env\",\n            \"virtual_env_packages\",\n            \"envs\",\n        }\n\n        kwargs = {\n            key: value for key, value in payload.items() if key not in exclude_keys\n        }\n\n        if not model_name:\n            raise HTTPException(\n                status_code=400,\n                detail=\"Invalid input. Please specify the `model_name` field.\",\n            )\n        if not model_engine and model_type == \"LLM\":\n            raise HTTPException(\n                status_code=400,\n                detail=\"Invalid input. Please specify the `model_engine` field.\",\n            )\n\n        if isinstance(gpu_idx, int):\n            gpu_idx = [gpu_idx]\n        if gpu_idx:\n            if len(gpu_idx) % replica:\n                raise HTTPException(\n                    status_code=400,\n                    detail=\"Invalid input. Allocated gpu must be a multiple of replica.\",\n                )\n\n        if peft_model_config is not None:\n            peft_model_config = PeftModelConfig.from_dict(peft_model_config)\n        else:\n            peft_model_config = None\n\n        try:\n            model_uid = await (await self._get_supervisor_ref()).launch_builtin_model(\n                model_uid=model_uid,\n                model_name=model_name,\n                model_engine=model_engine,\n                model_size_in_billions=model_size_in_billions,\n                model_format=model_format,\n                quantization=quantization,\n                model_type=model_type,\n                replica=replica,\n                n_gpu=n_gpu,\n                request_limits=request_limits,\n                wait_ready=wait_ready,\n                peft_model_config=peft_model_config,\n                worker_ip=worker_ip,\n                gpu_idx=gpu_idx,\n                download_hub=download_hub,\n                model_path=model_path,\n                enable_virtual_env=enable_virtual_env,\n                virtual_env_packages=virtual_env_packages,\n                envs=envs,\n                **kwargs,\n            )\n        except ValueError as ve:\n            logger.error(str(ve), exc_info=True)\n            raise HTTPException(status_code=400, detail=str(ve))\n        except RuntimeError as re:\n            logger.error(str(re), exc_info=True)\n            raise HTTPException(status_code=503, detail=str(re))\n        except asyncio.CancelledError as ce:\n            # cancelled by user\n            logger.error(str(ce), exc_info=True)\n            raise HTTPException(status_code=499, detail=str(ce))\n        except Exception as e:\n            logger.error(str(e), exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n        return JSONResponse(content={\"model_uid\": model_uid})\n\n    async def get_instance_info(\n        self,\n        model_name: Optional[str] = Query(None),\n        model_uid: Optional[str] = Query(None),\n    ) -> JSONResponse:\n        try:\n            infos = await (await self._get_supervisor_ref()).get_instance_info(\n                model_name, model_uid\n            )\n        except Exception as e:\n            logger.error(str(e), exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n        return JSONResponse(content=infos)\n\n    async def get_model_replicas(self, model_uid: str) -> JSONResponse:\n        \"\"\"Get detailed status of all replicas for a model\"\"\"\n        try:\n            replicas = await (await self._get_supervisor_ref()).get_replica_statuses(\n                model_uid\n            )\n            return JSONResponse(content=replicas)\n        except ValueError as ve:\n            logger.error(str(ve), exc_info=True)\n            raise HTTPException(status_code=400, detail=str(ve))\n        except Exception as e:\n            logger.error(str(e), exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def get_launch_model_progress(self, model_uid: str) -> JSONResponse:\n        try:\n            progress = await (\n                await self._get_supervisor_ref()\n            ).get_launch_builtin_model_progress(model_uid)\n        except Exception as e:\n            logger.error(str(e), exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n        return JSONResponse(content={\"progress\": progress})\n\n    async def cancel_launch_model(self, model_uid: str) -> JSONResponse:\n        try:\n            await (await self._get_supervisor_ref()).cancel_launch_builtin_model(\n                model_uid\n            )\n        except Exception as e:\n            logger.error(str(e), exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n        return JSONResponse(content=None)\n\n    async def launch_model_by_version(\n        self, request: Request, wait_ready: bool = Query(True)\n    ) -> JSONResponse:\n        payload = await request.json()\n        model_uid = payload.get(\"model_uid\")\n        model_engine = payload.get(\"model_engine\")\n        model_type = payload.get(\"model_type\")\n        model_version = payload.get(\"model_version\")\n        replica = payload.get(\"replica\", 1)\n        n_gpu = payload.get(\"n_gpu\", \"auto\")\n\n        try:\n            model_uid = await (\n                await self._get_supervisor_ref()\n            ).launch_model_by_version(\n                model_uid=model_uid,\n                model_engine=model_engine,\n                model_type=model_type,\n                model_version=model_version,\n                replica=replica,\n                n_gpu=n_gpu,\n                wait_ready=wait_ready,\n            )\n        except Exception as e:\n            logger.error(str(e), exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n        return JSONResponse(content={\"model_uid\": model_uid})\n\n    async def get_model_versions(\n        self, model_type: str, model_name: str\n    ) -> JSONResponse:\n        try:\n            content = await (await self._get_supervisor_ref()).get_model_versions(\n                model_type, model_name\n            )\n            return JSONResponse(content=content)\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def build_gradio_interface(\n        self, model_uid: str, request: Request\n    ) -> JSONResponse:\n        \"\"\"\n        Separate build_interface with launch_model\n        build_interface requires RESTful Client for API calls\n        but calling API in async function does not return\n        \"\"\"\n        payload = await request.json()\n        body = BuildGradioInterfaceRequest.parse_obj(payload)\n        assert self._app is not None\n        assert body.model_type == \"LLM\"\n\n        from ..ui.gradio.chat_interface import GradioInterface\n\n        try:\n            access_token = request.headers.get(\"Authorization\")\n            internal_host = \"localhost\" if self._host == \"0.0.0.0\" else self._host\n            interface = GradioInterface(\n                endpoint=\"http://\" + internal_host + \":\" + str(self._port),\n                model_uid=model_uid,\n                model_name=body.model_name,\n                model_size_in_billions=body.model_size_in_billions,\n                model_type=body.model_type,\n                model_format=body.model_format,\n                quantization=body.quantization,\n                context_length=body.context_length,\n                model_ability=body.model_ability,\n                model_description=body.model_description,\n                model_lang=body.model_lang,\n                access_token=access_token,\n            ).build()\n            gr.mount_gradio_app(self._app, interface, f\"/{model_uid}\")\n        except ValueError as ve:\n            logger.error(str(ve), exc_info=True)\n            raise HTTPException(status_code=400, detail=str(ve))\n\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n        return JSONResponse(content={\"model_uid\": model_uid})\n\n    async def build_gradio_media_interface(\n        self, model_uid: str, request: Request\n    ) -> JSONResponse:\n        \"\"\"\n        Build a Gradio interface for image processing models.\n        \"\"\"\n        payload = await request.json()\n        body = BuildGradioMediaInterfaceRequest.parse_obj(payload)\n        assert self._app is not None\n        assert body.model_type in (\"image\", \"video\", \"audio\")\n\n        from ..ui.gradio.media_interface import MediaInterface\n\n        try:\n            access_token = request.headers.get(\"Authorization\")\n            internal_host = \"localhost\" if self._host == \"0.0.0.0\" else self._host\n            interface = MediaInterface(\n                endpoint=\"http://\" + internal_host + \":\" + str(self._port),\n                model_uid=model_uid,\n                model_family=body.model_family,\n                model_name=body.model_name,\n                model_id=body.model_id,\n                model_revision=body.model_revision,\n                controlnet=body.controlnet,\n                access_token=access_token,\n                model_ability=body.model_ability,\n                model_type=body.model_type,\n            ).build()\n\n            gr.mount_gradio_app(self._app, interface, f\"/{model_uid}\")\n        except ValueError as ve:\n            logger.error(str(ve), exc_info=True)\n            raise HTTPException(status_code=400, detail=str(ve))\n\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n        return JSONResponse(content={\"model_uid\": model_uid})\n\n    async def terminate_model(self, model_uid: str) -> JSONResponse:\n        try:\n            assert self._app is not None\n            await (await self._get_supervisor_ref()).terminate_model(model_uid)\n            self._app.router.routes = [\n                route\n                for route in self._app.router.routes\n                if not (\n                    hasattr(route, \"path\")\n                    and isinstance(route.path, str)\n                    and route.path == \"/\" + model_uid\n                )\n            ]\n        except ValueError as ve:\n            logger.error(str(ve), exc_info=True)\n            raise HTTPException(status_code=400, detail=str(ve))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n        return JSONResponse(content=None)\n\n    async def _get_model_last_error(self, replica_model_uid: bytes, e: Exception):\n        if not isinstance(e, xo.ServerClosed):\n            return e\n        try:\n            model_status = await (await self._get_supervisor_ref()).get_model_status(\n                replica_model_uid.decode(\"utf-8\")\n            )\n            if model_status is not None and model_status.last_error:\n                return Exception(model_status.last_error)\n        except Exception as ex:\n            return ex\n        return e\n\n    async def create_completion(self, request: Request) -> Response:\n        raw_body = await request.json()\n        body = CreateCompletionRequest.parse_obj(raw_body)\n        exclude = {\n            \"prompt\",\n            \"model\",\n            \"n\",\n            \"best_of\",\n            \"logit_bias\",\n            \"logit_bias_type\",\n            \"user\",\n        }\n        raw_kwargs = {k: v for k, v in raw_body.items() if k not in exclude}\n        kwargs = body.dict(exclude_unset=True, exclude=exclude)\n\n        # guided_decoding params\n        kwargs.update(self.extract_guided_params(raw_body=raw_body))\n\n        # TODO: Decide if this default value override is necessary #1061\n        if body.max_tokens is None:\n            kwargs[\"max_tokens\"] = max_tokens_field.default\n\n        if body.logit_bias is not None:\n            raise HTTPException(status_code=501, detail=\"Not implemented\")\n\n        model_uid = body.model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"llm\")\n\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        if body.stream:\n\n            async def stream_results():\n                iterator = None\n                try:\n                    try:\n                        iterator = await model.generate(\n                            body.prompt, kwargs, raw_params=raw_kwargs\n                        )\n                    except RuntimeError as re:\n                        self.handle_request_limit_error(re)\n                    async for item in iterator:\n                        yield item\n                except asyncio.CancelledError:\n                    logger.info(\n                        f\"Disconnected from client (via refresh/close) {request.client} during generate.\"\n                    )\n                    return\n                except Exception as ex:\n                    ex = await self._get_model_last_error(model.uid, ex)\n                    logger.exception(\"Completion stream got an error: %s\", ex)\n                    await self._report_error_event(model_uid, str(ex))\n                    # https://github.com/openai/openai-python/blob/e0aafc6c1a45334ac889fe3e54957d309c3af93f/src/openai/_streaming.py#L107\n                    yield dict(data=json.dumps({\"error\": str(ex)}))\n                    return\n                finally:\n                    await model.decrease_serve_count()\n\n            return EventSourceResponse(\n                stream_results(), ping=XINFERENCE_SSE_PING_ATTEMPTS_SECONDS\n            )\n        else:\n            try:\n                data = await model.generate(body.prompt, kwargs, raw_params=raw_kwargs)\n                return Response(data, media_type=\"application/json\")\n            except Exception as e:\n                e = await self._get_model_last_error(model.uid, e)\n                logger.error(e, exc_info=True)\n                await self._report_error_event(model_uid, str(e))\n                self.handle_request_limit_error(e)\n                raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_message(self, request: Request) -> Response:\n        raw_body = await request.json()\n        body = CreateMessage.parse_obj(raw_body)\n\n        exclude = {\n            \"model\",\n            \"messages\",\n            \"stream\",\n            \"stop_sequences\",\n            \"metadata\",\n            \"tool_choice\",\n            \"tools\",\n        }\n        raw_kwargs = {k: v for k, v in raw_body.items() if k not in exclude}\n        kwargs = body.dict(exclude_unset=True, exclude=exclude)\n\n        # guided_decoding params\n        kwargs.update(self.extract_guided_params(raw_body=raw_body))\n\n        # TODO: Decide if this default value override is necessary #1061\n        if body.max_tokens is None:\n            kwargs[\"max_tokens\"] = max_tokens_field.default\n\n        messages = body.messages and list(body.messages)\n\n        if not messages or messages[-1].get(\"role\") not in [\"user\", \"assistant\"]:\n            raise HTTPException(\n                status_code=400, detail=\"Invalid input. Please specify the prompt.\"\n            )\n\n        # Handle tools parameter\n        if hasattr(body, \"tools\") and body.tools:\n            kwargs[\"tools\"] = body.tools\n\n        # Handle tool_choice parameter\n        if hasattr(body, \"tool_choice\") and body.tool_choice:\n            kwargs[\"tool_choice\"] = body.tool_choice\n\n        # Get model mapping\n        try:\n            running_models = await (await self._get_supervisor_ref()).list_models()\n        except Exception as e:\n            logger.error(f\"Failed to get model mapping: {e}\", exc_info=True)\n            raise HTTPException(status_code=500, detail=\"Failed to get model mapping\")\n\n        if not running_models:\n            raise HTTPException(\n                status_code=400,\n                detail=f\"No running models available. Please start a model in xinference first.\",\n            )\n\n        requested_model_id = body.model\n        if \"claude\" in requested_model_id:\n            requested_model_id = list(running_models.keys())[0]\n\n        if requested_model_id not in running_models:\n            raise HTTPException(\n                status_code=400,\n                detail=f\"Model '{requested_model_id}' is not available. Available models: {list(running_models.keys())}\",\n            )\n        else:\n            model_uid = requested_model_id\n\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"llm\")\n\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        if body.stream:\n\n            async def stream_results():\n                iterator = None\n                try:\n                    try:\n                        iterator = await model.chat(\n                            messages, kwargs, raw_params=raw_kwargs\n                        )\n                    except RuntimeError as re:\n                        self.handle_request_limit_error(re)\n\n                    # Check if iterator is actually an async iterator\n                    if hasattr(iterator, \"__aiter__\"):\n                        async for item in iterator:\n                            yield item\n                    elif isinstance(iterator, (str, bytes)):\n                        # Handle case where chat returns bytes/string instead of iterator\n                        if isinstance(iterator, bytes):\n                            try:\n                                content = iterator.decode(\"utf-8\")\n                            except UnicodeDecodeError:\n                                content = str(iterator)\n                        else:\n                            content = iterator\n                        yield dict(data=json.dumps({\"content\": content}))\n                    else:\n                        # Fallback: try to iterate normally\n                        try:\n                            for item in iterator:\n                                yield item\n                        except TypeError:\n                            # If not iterable, yield as single result\n                            yield dict(data=json.dumps({\"content\": str(iterator)}))\n\n                    yield \"[DONE]\"\n                except asyncio.CancelledError:\n                    logger.info(\n                        f\"Disconnected from client (via refresh/close) {request.client} during chat.\"\n                    )\n                    return\n                except Exception as ex:\n                    ex = await self._get_model_last_error(model.uid, ex)\n                    logger.exception(\"Message stream got an error: %s\", ex)\n                    await self._report_error_event(model_uid, str(ex))\n                    yield dict(data=json.dumps({\"error\": str(ex)}))\n                    return\n                finally:\n                    await model.decrease_serve_count()\n\n            return EventSourceResponse(\n                stream_results(), ping=XINFERENCE_SSE_PING_ATTEMPTS_SECONDS\n            )\n        else:\n            try:\n                data = await model.chat(messages, kwargs, raw_params=raw_kwargs)\n                # Convert OpenAI format to Anthropic format\n                openai_response = json.loads(data)\n                anthropic_response = self._convert_openai_to_anthropic(\n                    openai_response, body.model\n                )\n                return Response(\n                    json.dumps(anthropic_response), media_type=\"application/json\"\n                )\n            except Exception as e:\n                e = await self._get_model_last_error(model.uid, e)\n                logger.error(e, exc_info=True)\n                await self._report_error_event(model_uid, str(e))\n                self.handle_request_limit_error(e)\n                raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_embedding(self, request: Request) -> Response:\n        payload = await request.json()\n        body = CreateEmbeddingRequest.parse_obj(payload)\n        model_uid = body.model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"embedding\")\n        exclude = {\n            \"model\",\n            \"input\",\n            \"user\",\n            \"encoding_format\",\n        }\n        kwargs = {key: value for key, value in payload.items() if key not in exclude}\n\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            kwargs[\"model_uid\"] = model_uid\n            embedding = await model.create_embedding(body.input, **kwargs)\n            return Response(embedding, media_type=\"application/json\")\n        except Exception as e:\n            e = await self._get_model_last_error(model.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def convert_ids_to_tokens(self, request: Request) -> Response:\n        payload = await request.json()\n        body = CreateEmbeddingRequest.parse_obj(payload)\n        model_uid = body.model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"embedding\")\n        exclude = {\n            \"model\",\n            \"input\",\n            \"user\",\n        }\n        kwargs = {key: value for key, value in payload.items() if key not in exclude}\n\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            decoded_texts = await model.convert_ids_to_tokens(body.input, **kwargs)\n            return Response(decoded_texts, media_type=\"application/json\")\n        except Exception as e:\n            e = await self._get_model_last_error(model.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def rerank(self, request: Request) -> Response:\n        payload = await request.json()\n        body = RerankRequest.parse_obj(payload)\n        model_uid = body.model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"rerank\")\n\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            if body.kwargs is not None:\n                parsed_kwargs = json.loads(body.kwargs)\n            else:\n                parsed_kwargs = {}\n            scores = await model.rerank(\n                body.documents,\n                body.query,\n                top_n=body.top_n,\n                max_chunks_per_doc=body.max_chunks_per_doc,\n                return_documents=body.return_documents,\n                return_len=body.return_len,\n                **parsed_kwargs,\n            )\n            return Response(scores, media_type=\"application/json\")\n        except Exception as e:\n            e = await self._get_model_last_error(model.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_transcriptions(\n        self,\n        request: Request,\n        model: str = Form(...),\n        file: UploadFile = File(media_type=\"application/octet-stream\"),\n        language: Optional[str] = Form(None),\n        prompt: Optional[str] = Form(None),\n        response_format: Optional[str] = Form(\"json\"),\n        temperature: Optional[float] = Form(0),\n        kwargs: Optional[str] = Form(None),\n    ) -> Response:\n        form = await request.form()\n        timestamp_granularities = form.get(\"timestamp_granularities[]\")\n        if timestamp_granularities:\n            timestamp_granularities = [timestamp_granularities]\n        model_uid = model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"audio\")\n        model_ref = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            if kwargs is not None:\n                parsed_kwargs = json.loads(kwargs)\n            else:\n                parsed_kwargs = {}\n            transcription = await model_ref.transcriptions(\n                audio=await file.read(),\n                language=language,\n                prompt=prompt,\n                response_format=response_format,\n                temperature=temperature,\n                timestamp_granularities=timestamp_granularities,\n                **parsed_kwargs,\n            )\n            return Response(content=transcription, media_type=\"application/json\")\n        except Exception as e:\n            e = await self._get_model_last_error(model_ref.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_translations(\n        self,\n        request: Request,\n        model: str = Form(...),\n        file: UploadFile = File(media_type=\"application/octet-stream\"),\n        language: Optional[str] = Form(None),\n        prompt: Optional[str] = Form(None),\n        response_format: Optional[str] = Form(\"json\"),\n        temperature: Optional[float] = Form(0),\n        kwargs: Optional[str] = Form(None),\n    ) -> Response:\n        form = await request.form()\n        timestamp_granularities = form.get(\"timestamp_granularities[]\")\n        if timestamp_granularities:\n            timestamp_granularities = [timestamp_granularities]\n        model_uid = model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"audio\")\n        model_ref = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            if kwargs is not None:\n                parsed_kwargs = json.loads(kwargs)\n            else:\n                parsed_kwargs = {}\n            translation = await model_ref.translations(\n                audio=await file.read(),\n                language=language,\n                prompt=prompt,\n                response_format=response_format,\n                temperature=temperature,\n                timestamp_granularities=timestamp_granularities,\n                **parsed_kwargs,\n            )\n            return Response(content=translation, media_type=\"application/json\")\n        except Exception as e:\n            e = await self._get_model_last_error(model_ref.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_speech(\n        self,\n        request: Request,\n        prompt_speech: Optional[UploadFile] = File(\n            None, media_type=\"application/octet-stream\"\n        ),\n        prompt_latent: Optional[UploadFile] = File(\n            None, media_type=\"application/octet-stream\"\n        ),\n    ) -> Response:\n        if prompt_speech or prompt_latent:\n            f = await request.form()\n        else:\n            f = await request.json()\n        body = SpeechRequest.parse_obj(f)\n        model_uid = body.model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"audio\")\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            if body.kwargs is not None:\n                parsed_kwargs = json.loads(body.kwargs)\n            else:\n                parsed_kwargs = {}\n            if prompt_speech is not None:\n                parsed_kwargs[\"prompt_speech\"] = await prompt_speech.read()\n            if prompt_latent is not None:\n                parsed_kwargs[\"prompt_latent\"] = await prompt_latent.read()\n            out = await model.speech(\n                input=body.input,\n                voice=body.voice,\n                response_format=body.response_format,\n                speed=body.speed,\n                stream=body.stream,\n                **parsed_kwargs,\n            )\n            if body.stream:\n\n                async def stream_results():\n                    try:\n                        async for item in out:\n                            yield item\n                    finally:\n                        await model.decrease_serve_count()\n\n                return EventSourceResponse(\n                    media_type=\"application/octet-stream\",\n                    content=stream_results(),\n                    ping=XINFERENCE_SSE_PING_ATTEMPTS_SECONDS,\n                )\n            else:\n                return Response(media_type=\"application/octet-stream\", content=out)\n        except Exception as e:\n            e = await self._get_model_last_error(model.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_images(self, request: Request) -> Response:\n        body = TextToImageRequest.parse_obj(await request.json())\n        model_uid = body.model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"image\")\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        request_id = None\n        try:\n            kwargs = json.loads(body.kwargs) if body.kwargs else {}\n            request_id = kwargs.get(\"request_id\")\n            self._add_running_task(request_id)\n            image_list = await model.text_to_image(\n                prompt=body.prompt,\n                n=body.n,\n                size=body.size,\n                response_format=body.response_format,\n                **kwargs,\n            )\n            return Response(content=image_list, media_type=\"application/json\")\n        except asyncio.CancelledError:\n            err_str = f\"The request has been cancelled: {request_id}\"\n            logger.error(err_str)\n            await self._report_error_event(model_uid, err_str)\n            raise HTTPException(status_code=409, detail=err_str)\n        except Exception as e:\n            e = await self._get_model_last_error(model.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def sdapi_options(self, request: Request) -> Response:\n        body = SDAPIOptionsRequest.parse_obj(await request.json())\n        model_uid = body.sd_model_checkpoint\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"image\")\n\n        try:\n            if not model_uid:\n                raise ValueError(\"Unknown model\")\n            await (await self._get_supervisor_ref()).get_model(model_uid)\n            return Response()\n        except ValueError as ve:\n            logger.error(str(ve), exc_info=True)\n            await self._report_error_event(model_uid, str(ve))\n            raise HTTPException(status_code=400, detail=str(ve))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def sdapi_sd_models(self, request: Request) -> Response:\n        try:\n            models = await (await self._get_supervisor_ref()).list_models()\n            sd_models = []\n            for model_name, info in models.items():\n                if info[\"model_type\"] != \"image\":\n                    continue\n                sd_models.append({\"model_name\": model_name, \"config\": None})\n            return JSONResponse(content=sd_models)\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def sdapi_samplers(self, request: Request) -> Response:\n        try:\n            from ..model.image.stable_diffusion.core import SAMPLING_METHODS\n\n            samplers = [\n                {\"name\": sample_method, \"alias\": [], \"options\": {}}\n                for sample_method in SAMPLING_METHODS\n            ]\n            return JSONResponse(content=samplers)\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def sdapi_txt2img(self, request: Request) -> Response:\n        body = SDAPITxt2imgRequst.parse_obj(await request.json())\n        model_uid = body.model or body.override_settings.get(\"sd_model_checkpoint\")\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"image\")\n\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            kwargs = dict(body)\n            kwargs.update(json.loads(body.kwargs) if body.kwargs else {})\n            image_list = await model.txt2img(\n                **kwargs,\n            )\n            return Response(content=image_list, media_type=\"application/json\")\n        except Exception as e:\n            e = await self._get_model_last_error(model.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def sdapi_img2img(self, request: Request) -> Response:\n        body = SDAPIImg2imgRequst.parse_obj(await request.json())\n        model_uid = body.model or body.override_settings.get(\"sd_model_checkpoint\")\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"image\")\n\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            kwargs = dict(body)\n            kwargs.update(json.loads(body.kwargs) if body.kwargs else {})\n            image_list = await model.img2img(\n                **kwargs,\n            )\n            return Response(content=image_list, media_type=\"application/json\")\n        except Exception as e:\n            e = await self._get_model_last_error(model.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_variations(\n        self,\n        model: str = Form(...),\n        image: List[UploadFile] = File(media_type=\"application/octet-stream\"),\n        prompt: Optional[Union[str, List[str]]] = Form(None),\n        negative_prompt: Optional[Union[str, List[str]]] = Form(None),\n        n: Optional[int] = Form(1),\n        response_format: Optional[str] = Form(\"url\"),\n        size: Optional[str] = Form(None),\n        kwargs: Optional[str] = Form(None),\n    ) -> Response:\n        model_uid = model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"image\")\n        model_ref = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        request_id = None\n        try:\n            if kwargs is not None:\n                parsed_kwargs = json.loads(kwargs)\n            else:\n                parsed_kwargs = {}\n            request_id = parsed_kwargs.get(\"request_id\")\n            self._add_running_task(request_id)\n\n            # Handle single image or multiple images\n            if len(image) == 1:\n                # Single image\n                image_data = Image.open(image[0].file)\n            else:\n                # Multiple images - convert to list of PIL Images\n                image_data = [Image.open(img.file) for img in image]\n\n            image_list = await model_ref.image_to_image(\n                image=image_data,\n                prompt=prompt,\n                negative_prompt=negative_prompt,\n                n=n,\n                size=size,\n                response_format=response_format,\n                **parsed_kwargs,\n            )\n            return Response(content=image_list, media_type=\"application/json\")\n        except asyncio.CancelledError:\n            err_str = f\"The request has been cancelled: {request_id}\"\n            logger.error(err_str)\n            await self._report_error_event(model_uid, err_str)\n            raise HTTPException(status_code=409, detail=err_str)\n        except Exception as e:\n            e = await self._get_model_last_error(model_ref.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_inpainting(\n        self,\n        model: str = Form(...),\n        image: UploadFile = File(media_type=\"application/octet-stream\"),\n        mask_image: UploadFile = File(media_type=\"application/octet-stream\"),\n        prompt: Optional[Union[str, List[str]]] = Form(None),\n        negative_prompt: Optional[Union[str, List[str]]] = Form(None),\n        n: Optional[int] = Form(1),\n        response_format: Optional[str] = Form(\"url\"),\n        size: Optional[str] = Form(None),\n        kwargs: Optional[str] = Form(None),\n    ) -> Response:\n        model_uid = model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"image\")\n        model_ref = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        request_id = None\n        try:\n            if kwargs is not None:\n                parsed_kwargs = json.loads(kwargs)\n            else:\n                parsed_kwargs = {}\n            request_id = parsed_kwargs.get(\"request_id\")\n            self._add_running_task(request_id)\n            im = Image.open(image.file)\n            mask_im = Image.open(mask_image.file)\n            if not size:\n                w, h = im.size\n                size = f\"{w}*{h}\"\n            image_list = await model_ref.inpainting(\n                image=im,\n                mask_image=mask_im,\n                prompt=prompt,\n                negative_prompt=negative_prompt,\n                n=n,\n                size=size,\n                response_format=response_format,\n                **parsed_kwargs,\n            )\n            return Response(content=image_list, media_type=\"application/json\")\n        except asyncio.CancelledError:\n            err_str = f\"The request has been cancelled: {request_id}\"\n            logger.error(err_str)\n            await self._report_error_event(model_uid, err_str)\n            raise HTTPException(status_code=409, detail=err_str)\n        except Exception as e:\n            e = await self._get_model_last_error(model_ref.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_ocr(\n        self,\n        model: str = Form(...),\n        image: UploadFile = File(media_type=\"application/octet-stream\"),\n        kwargs: Optional[str] = Form(None),\n    ) -> Response:\n        model_uid = model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"image\")\n        model_ref = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        request_id = None\n        try:\n            if kwargs is not None:\n                parsed_kwargs = json.loads(kwargs)\n            else:\n                parsed_kwargs = {}\n            request_id = parsed_kwargs.get(\"request_id\")\n            self._add_running_task(request_id)\n            im = Image.open(image.file)\n            text = await model_ref.ocr(\n                image=im,\n                **parsed_kwargs,\n            )\n            return Response(content=text, media_type=\"text/plain\")\n        except asyncio.CancelledError:\n            err_str = f\"The request has been cancelled: {request_id}\"\n            logger.error(err_str)\n            await self._report_error_event(model_uid, err_str)\n            raise HTTPException(status_code=409, detail=err_str)\n        except Exception as e:\n            e = await self._get_model_last_error(model_ref.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_image_edits(\n        self,\n        request: Request,\n        prompt: str = Form(...),\n        images: Optional[List[UploadFile]] = File(\n            None, media_type=\"application/octet-stream\"\n        ),\n        mask: Optional[UploadFile] = File(None, media_type=\"application/octet-stream\"),\n        model: Optional[str] = Form(None),\n        n: Optional[int] = Form(1),\n        size: Optional[str] = Form(\"original\"),\n        response_format: Optional[str] = Form(\"url\"),\n        stream: Optional[bool] = Form(False),\n    ) -> Response:\n        \"\"\"OpenAI-compatible image edit endpoint.\n\n        Accepts multiple image files via:\n            -F \"image=@image1.jpeg\" -F \"image=@image2.jpeg\"\n        The first image is used as the primary input; additional images\n        are passed as reference images to the model.\n        \"\"\"\n        import io\n\n        # If FastAPI didn't bind any files (e.g. client used \"image[]\" key),\n        # fall back to manual form parsing.\n        image_files: List[UploadFile] = images or []\n        if not image_files:\n            form = await request.form()\n            image_files = (\n                form.getlist(\"images[]\")\n                or form.getlist(\"images\")\n                or form.getlist(\"image[]\")\n                or form.getlist(\"image\")\n            )\n\n        if not image_files:\n            raise HTTPException(\n                status_code=400, detail=\"At least one image file is required\"\n            )\n\n        if response_format not in (\"url\", \"b64_json\"):\n            raise HTTPException(\n                status_code=400, detail=\"response_format must be 'url' or 'b64_json'\"\n            )\n\n        # Resolve model when the caller didn't specify one.\n        if not model:\n            try:\n                models = await (await self._get_supervisor_ref()).list_models()\n                image_models = [\n                    name\n                    for name, info in models.items()\n                    if info.get(\"model_type\") == \"image\"\n                    and (\n                        \"image2image\" in info.get(\"model_ability\", [])\n                        or \"inpainting\" in info.get(\"model_ability\", [])\n                    )\n                ]\n                if not image_models:\n                    raise HTTPException(\n                        status_code=400, detail=\"No available image models found\"\n                    )\n                model = image_models[0]\n            except HTTPException:\n                raise\n            except Exception as e:\n                logger.error(f\"Failed to get available models: {e}\", exc_info=True)\n                raise HTTPException(\n                    status_code=500, detail=\"Failed to get available models\"\n                )\n\n        assert model is not None\n        model_uid = model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"image\")\n        model_ref = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        request_id = None\n        try:\n            self._add_running_task(request_id)\n\n            # Read and convert all uploaded images to RGB PIL Images.\n            pil_images: list[Image.Image] = []\n            for img_file in image_files:\n                image_content = await img_file.read()\n                pil_image = Image.open(io.BytesIO(image_content))\n\n                if pil_image.mode == \"RGBA\":\n                    background = Image.new(\"RGB\", pil_image.size, (255, 255, 255))\n                    background.paste(pil_image, mask=pil_image.split()[3])\n                    pil_image = background\n                elif pil_image.mode != \"RGB\":\n                    pil_image = pil_image.convert(\"RGB\")\n\n                pil_images.append(pil_image)\n\n            primary_image = pil_images[0]\n            reference_images = pil_images[1:] if len(pil_images) > 1 else []\n\n            # Normalise the size parameter.\n            if size and size != \"original\":\n                model_size = size.replace(\"x\", \"*\")\n            else:\n                model_size = \"\"\n\n            model_params: dict[str, Any] = {\n                \"prompt\": prompt,\n                \"n\": n or 1,\n                \"size\": model_size,\n                \"response_format\": response_format,\n                \"denoising_strength\": 0.75,\n                \"negative_prompt\": \" \",\n            }\n            if reference_images:\n                model_params[\"reference_images\"] = reference_images\n\n            # DEBUG: Log the number of files and model params before processing\n            logger.debug(\n                f\"Processing image edit with {len(image_files)} image(s), \"\n                f\"model: {model_uid}, stream: {stream}, mask: {'yes' if mask else 'no'}, \"\n                f\"model_params: {model_params}\"\n            )\n\n            if stream:\n                return EventSourceResponse(\n                    self._stream_image_edit(\n                        model_ref,\n                        primary_image,\n                        reference_images,\n                        mask,\n                        model_params,\n                    )\n                )\n\n            if mask:\n                mask_content = await mask.read()\n                mask_image = Image.open(io.BytesIO(mask_content))\n                result = await model_ref.inpainting(\n                    image=primary_image,\n                    mask_image=mask_image,\n                    **model_params,\n                )\n            else:\n                result = await model_ref.image_to_image(\n                    image=primary_image,\n                    **model_params,\n                )\n\n            return Response(content=result, media_type=\"application/json\")\n\n        except asyncio.CancelledError:\n            err_str = f\"The request has been cancelled: {request_id or 'unknown'}\"\n            logger.error(err_str)\n            await self._report_error_event(model_uid, err_str)\n            raise HTTPException(status_code=409, detail=err_str)\n        except Exception as e:\n            e = await self._get_model_last_error(model_ref.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def _stream_image_edit(\n        self,\n        model_ref,\n        primary_image: Image.Image,\n        reference_images: list,\n        mask: Optional[UploadFile],\n        model_params: dict,\n    ):\n        \"\"\"Stream image editing progress and results.\"\"\"\n        import io\n        import json\n        from datetime import datetime\n\n        try:\n            yield {\n                \"event\": \"start\",\n                \"data\": json.dumps(\n                    {\n                        \"type\": \"image_edit_started\",\n                        \"timestamp\": datetime.now().isoformat(),\n                        \"prompt\": model_params.get(\"prompt\", \"\"),\n                        \"image_count\": 1 + len(reference_images),\n                    }\n                ),\n            }\n\n            if mask:\n                mask_content = await mask.read()\n                mask_image = Image.open(io.BytesIO(mask_content))\n                yield {\n                    \"event\": \"processing\",\n                    \"data\": json.dumps(\n                        {\n                            \"type\": \"mask_loaded\",\n                            \"timestamp\": datetime.now().isoformat(),\n                            \"mask_size\": mask_image.size,\n                        }\n                    ),\n                }\n                result = await model_ref.inpainting(\n                    image=primary_image,\n                    mask_image=mask_image,\n                    **model_params,\n                )\n            else:\n                yield {\n                    \"event\": \"processing\",\n                    \"data\": json.dumps(\n                        {\n                            \"type\": \"starting_generation\",\n                            \"timestamp\": datetime.now().isoformat(),\n                        }\n                    ),\n                }\n                result = await model_ref.image_to_image(\n                    image=primary_image,\n                    **model_params,\n                )\n\n            result_data = json.loads(result)\n            yield {\n                \"event\": \"complete\",\n                \"data\": json.dumps(result_data),\n            }\n\n        except Exception as e:\n            yield {\n                \"event\": \"error\",\n                \"data\": json.dumps(\n                    {\n                        \"type\": \"image_edit_error\",\n                        \"timestamp\": datetime.now().isoformat(),\n                        \"error\": str(e),\n                    }\n                ),\n            }\n\n    async def create_flexible_infer(self, request: Request) -> Response:\n        payload = await request.json()\n\n        model_uid = payload.get(\"model\")\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"flexible\")\n        args = payload.get(\"args\")\n\n        exclude = {\"model\", \"args\"}\n        kwargs = {key: value for key, value in payload.items() if key not in exclude}\n\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            result = await model.infer(*args, **kwargs)\n            return Response(result, media_type=\"application/json\")\n        except Exception as e:\n            e = await self._get_model_last_error(model.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_videos(self, request: Request) -> Response:\n        body = TextToVideoRequest.parse_obj(await request.json())\n        model_uid = body.model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"video\")\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        request_id = None\n        try:\n            kwargs = json.loads(body.kwargs) if body.kwargs else {}\n            request_id = kwargs.get(\"request_id\")\n            self._add_running_task(request_id)\n            video_list = await model.text_to_video(\n                prompt=body.prompt,\n                n=body.n,\n                **kwargs,\n            )\n            return Response(content=video_list, media_type=\"application/json\")\n        except asyncio.CancelledError:\n            err_str = f\"The request has been cancelled: {request_id or 'unknown'}\"\n            logger.error(err_str)\n            await self._report_error_event(model_uid, err_str)\n            raise HTTPException(status_code=409, detail=err_str)\n        except Exception as e:\n            e = await self._get_model_last_error(model.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_videos_from_images(\n        self,\n        model: str = Form(...),\n        image: UploadFile = File(media_type=\"application/octet-stream\"),\n        prompt: Optional[Union[str, List[str]]] = Form(None),\n        negative_prompt: Optional[Union[str, List[str]]] = Form(None),\n        n: Optional[int] = Form(1),\n        kwargs: Optional[str] = Form(None),\n    ) -> Response:\n        model_uid = model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"video\")\n        model_ref = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        request_id = None\n        try:\n            if kwargs is not None:\n                parsed_kwargs = json.loads(kwargs)\n            else:\n                parsed_kwargs = {}\n            request_id = parsed_kwargs.get(\"request_id\")\n            self._add_running_task(request_id)\n            video_list = await model_ref.image_to_video(\n                image=Image.open(image.file),\n                prompt=prompt,\n                negative_prompt=negative_prompt,\n                n=n,\n                **parsed_kwargs,\n            )\n            return Response(content=video_list, media_type=\"application/json\")\n        except asyncio.CancelledError:\n            err_str = f\"The request has been cancelled: {request_id or 'unknown'}\"\n            logger.error(err_str)\n            await self._report_error_event(model_uid, err_str)\n            raise HTTPException(status_code=409, detail=err_str)\n        except Exception as e:\n            e = await self._get_model_last_error(model_ref.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_videos_from_first_last_frame(\n        self,\n        model: str = Form(...),\n        first_frame: UploadFile = File(media_type=\"application/octet-stream\"),\n        last_frame: UploadFile = File(media_type=\"application/octet-stream\"),\n        prompt: Optional[Union[str, List[str]]] = Form(None),\n        negative_prompt: Optional[Union[str, List[str]]] = Form(None),\n        n: Optional[int] = Form(1),\n        kwargs: Optional[str] = Form(None),\n    ) -> Response:\n        model_uid = model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"video\")\n        model_ref = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        request_id = None\n        try:\n            if kwargs is not None:\n                parsed_kwargs = json.loads(kwargs)\n            else:\n                parsed_kwargs = {}\n            request_id = parsed_kwargs.get(\"request_id\")\n            self._add_running_task(request_id)\n            video_list = await model_ref.flf_to_video(\n                first_frame=Image.open(first_frame.file),\n                last_frame=Image.open(last_frame.file),\n                prompt=prompt,\n                negative_prompt=negative_prompt,\n                n=n,\n                **parsed_kwargs,\n            )\n            return Response(content=video_list, media_type=\"application/json\")\n        except asyncio.CancelledError:\n            err_str = f\"The request has been cancelled: {request_id or 'unknown'}\"\n            logger.error(err_str)\n            await self._report_error_event(model_uid, err_str)\n            raise HTTPException(status_code=409, detail=err_str)\n        except Exception as e:\n            e = await self._get_model_last_error(model_ref.uid, e)\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            self.handle_request_limit_error(e)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def create_chat_completion(self, request: Request) -> Response:\n        raw_body = await request.json()\n        body = CreateChatCompletion.parse_obj(raw_body)\n        exclude = {\n            \"prompt\",\n            \"model\",\n            \"n\",\n            \"messages\",\n            \"logit_bias\",\n            \"logit_bias_type\",\n            \"user\",\n            \"max_completion_tokens\",\n        }\n\n        raw_kwargs = {k: v for k, v in raw_body.items() if k not in exclude}\n        kwargs = body.dict(exclude_unset=True, exclude=exclude)\n\n        enable_thinking = raw_body.get(\"enable_thinking\")\n        if enable_thinking is None:\n            extra_body = raw_body.get(\"extra_body\")\n            if isinstance(extra_body, dict):\n                enable_thinking = extra_body.get(\"enable_thinking\")\n        if isinstance(enable_thinking, bool):\n            raw_kwargs.pop(\"enable_thinking\", None)\n            chat_template_kwargs = raw_kwargs.get(\"chat_template_kwargs\") or {}\n            if isinstance(chat_template_kwargs, str):\n                try:\n                    chat_template_kwargs = json.loads(chat_template_kwargs)\n                except json.JSONDecodeError:\n                    chat_template_kwargs = {}\n            if not isinstance(chat_template_kwargs, dict):\n                chat_template_kwargs = {}\n            chat_template_kwargs = dict(chat_template_kwargs)\n            chat_template_kwargs[\"enable_thinking\"] = enable_thinking\n            chat_template_kwargs[\"thinking\"] = enable_thinking\n            raw_kwargs[\"chat_template_kwargs\"] = chat_template_kwargs\n            kwargs[\"chat_template_kwargs\"] = chat_template_kwargs\n\n        # guided_decoding params\n        kwargs.update(self.extract_guided_params(raw_body=raw_body))\n\n        # TODO: Decide if this default value override is necessary #1061\n        if body.max_tokens is None:\n            kwargs[\"max_tokens\"] = max_tokens_field.default\n\n        if body.max_completion_tokens is not None:\n            kwargs[\"max_tokens\"] = body.max_completion_tokens\n\n        if body.logit_bias is not None:\n            raise HTTPException(status_code=501, detail=\"Not implemented\")\n\n        messages = body.messages and list(body.messages) or None\n\n        if not messages or messages[-1].get(\"role\") not in [\"user\", \"system\", \"tool\"]:\n            raise HTTPException(\n                status_code=400, detail=\"Invalid input. Please specify the prompt.\"\n            )\n\n        has_tool_message = messages[-1].get(\"role\") == \"tool\"\n        model_uid = body.model\n        self._set_trace_model(model_uid)\n        self._set_trace_model_type(\"llm\")\n\n        model = await require_model(\n            self._get_supervisor_ref, model_uid, self._report_error_event\n        )\n\n        try:\n            desc = await (await self._get_supervisor_ref()).describe_model(model_uid)\n        except ValueError as ve:\n            logger.error(str(ve), exc_info=True)\n            await self._report_error_event(model_uid, str(ve))\n            raise HTTPException(status_code=400, detail=str(ve))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            await self._report_error_event(model_uid, str(e))\n            raise HTTPException(status_code=500, detail=str(e))\n\n        from ..model.llm.utils import TOOL_CALL_FAMILY\n\n        model_family = desc.get(\"model_family\", \"\")\n\n        if model_family not in TOOL_CALL_FAMILY:\n            if body.tools:\n                raise HTTPException(\n                    status_code=400,\n                    detail=f\"Only {TOOL_CALL_FAMILY} support tool calls\",\n                )\n            if has_tool_message:\n                raise HTTPException(\n                    status_code=400,\n                    detail=f\"Only {TOOL_CALL_FAMILY} support tool messages\",\n                )\n\n        if \"skip_special_tokens\" in raw_kwargs and await model.is_vllm_backend():\n            kwargs[\"skip_special_tokens\"] = raw_kwargs[\"skip_special_tokens\"]\n        if body.stream:\n\n            async def stream_results():\n                iterator = None\n                try:\n                    try:\n                        iterator = await model.chat(\n                            messages,\n                            kwargs,\n                            raw_params=raw_kwargs,\n                        )\n                    except RuntimeError as re:\n                        await self._report_error_event(model_uid, str(re))\n                        self.handle_request_limit_error(re)\n                    async for item in iterator:\n                        yield item\n                    yield \"[DONE]\"\n                # Note that asyncio.CancelledError does not inherit from Exception.\n                # When the user uses ctrl+c to cancel the streaming chat, asyncio.CancelledError would be triggered.\n                # See https://github.com/sysid/sse-starlette/blob/main/examples/example.py#L48\n                except asyncio.CancelledError:\n                    logger.info(\n                        f\"Disconnected from client (via refresh/close) {request.client} during chat.\"\n                    )\n                    # See https://github.com/sysid/sse-starlette/blob/main/examples/error_handling.py#L13\n                    # Use return to stop the generator from continuing.\n                    # TODO: Cannot yield here. Yield here would leads to error for the next streaming request.\n                    return\n                except Exception as ex:\n                    ex = await self._get_model_last_error(model.uid, ex)\n                    logger.exception(\"Chat completion stream got an error: %s\", ex)\n                    await self._report_error_event(model_uid, str(ex))\n                    # https://github.com/openai/openai-python/blob/e0aafc6c1a45334ac889fe3e54957d309c3af93f/src/openai/_streaming.py#L107\n                    yield dict(data=json.dumps({\"error\": str(ex)}))\n                    return\n                finally:\n                    await model.decrease_serve_count()\n\n            return EventSourceResponse(\n                stream_results(), ping=XINFERENCE_SSE_PING_ATTEMPTS_SECONDS\n            )\n        else:\n            try:\n                data = await model.chat(\n                    messages,\n                    kwargs,\n                    raw_params=raw_kwargs,\n                )\n                return Response(content=data, media_type=\"application/json\")\n            except Exception as e:\n                e = await self._get_model_last_error(model.uid, e)\n                logger.error(e, exc_info=True)\n                await self._report_error_event(model_uid, str(e))\n                self.handle_request_limit_error(e)\n                raise HTTPException(status_code=500, detail=str(e))\n\n    async def query_engines_by_model_name(\n        self, request: Request, model_name: str, model_type: Optional[str] = None\n    ) -> JSONResponse:\n        try:\n            model_type = model_type or request.path_params.get(\"model_type\", \"LLM\")\n            enable_virtual_env = request.query_params.get(\"enable_virtual_env\")\n            if enable_virtual_env is not None:\n                enable_virtual_env = enable_virtual_env.lower() in (\"1\", \"true\", \"yes\")\n            content = await (\n                await self._get_supervisor_ref()\n            ).query_engines_by_model_name(\n                model_name,\n                model_type=model_type,\n                enable_virtual_env=enable_virtual_env,\n            )\n            return JSONResponse(content=content)\n        except ValueError as re:\n            logger.error(re, exc_info=True)\n            raise HTTPException(status_code=400, detail=str(re))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def register_model(self, model_type: str, request: Request) -> JSONResponse:\n        body = RegisterModelRequest.parse_obj(await request.json())\n        model = body.model\n        worker_ip = body.worker_ip\n        persist = body.persist\n\n        try:\n            await (await self._get_supervisor_ref()).register_model(\n                model_type, model, persist, worker_ip\n            )\n        except ValueError as re:\n            logger.error(re, exc_info=True)\n            raise HTTPException(status_code=400, detail=str(re))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n        return JSONResponse(content=None)\n\n    async def unregister_model(self, model_type: str, model_name: str) -> JSONResponse:\n        try:\n            await (await self._get_supervisor_ref()).unregister_model(\n                model_type, model_name\n            )\n        except ValueError as re:\n            logger.error(re, exc_info=True)\n            raise HTTPException(status_code=400, detail=str(re))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n        return JSONResponse(content=None)\n\n    async def update_model_type(self, request: Request) -> JSONResponse:\n        try:\n            # Parse request\n            raw_json = await request.json()\n            body = UpdateModelRequest.parse_obj(raw_json)\n            model_type = body.model_type\n\n            # Get supervisor reference\n            supervisor_ref = await self._get_supervisor_ref()\n\n            # Call supervisor with model_type\n            await supervisor_ref.update_model_type(model_type)\n\n        except ValueError as re:\n            logger.error(f\"ValueError in update_model_type API: {re}\", exc_info=True)\n            logger.error(f\"ValueError details: {type(re).__name__}: {re}\")\n            raise HTTPException(status_code=400, detail=str(re))\n        except Exception as e:\n            logger.error(\n                f\"Unexpected error in update_model_type API: {e}\", exc_info=True\n            )\n            logger.error(f\"Error details: {type(e).__name__}: {e}\")\n            import traceback\n\n            logger.error(f\"Full traceback: {traceback.format_exc()}\")\n            raise HTTPException(status_code=500, detail=str(e))\n\n        response_data = {\n            \"data\": {\n                \"model_type\": model_type,\n                \"message\": f\"Successfully updated model type: {model_type}\",\n            }\n        }\n\n        return JSONResponse(content=response_data)\n\n    async def list_model_registrations(\n        self, model_type: str, detailed: bool = Query(False)\n    ) -> JSONResponse:\n        try:\n            data = await (await self._get_supervisor_ref()).list_model_registrations(\n                model_type, detailed=detailed\n            )\n            # Remove duplicate model names.\n            model_names = set()\n            final_data = []\n            for item in data:\n                if item[\"model_name\"] not in model_names:\n                    model_names.add(item[\"model_name\"])\n                    final_data.append(item)\n            return JSONResponse(content=final_data)\n        except ValueError as re:\n            logger.error(re, exc_info=True)\n            raise HTTPException(status_code=400, detail=str(re))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def get_model_registrations(\n        self, model_type: str, model_name: str\n    ) -> JSONResponse:\n        try:\n            data = await (await self._get_supervisor_ref()).get_model_registration(\n                model_type, model_name\n            )\n            return JSONResponse(content=data)\n        except ValueError as re:\n            logger.error(re, exc_info=True)\n            raise HTTPException(status_code=400, detail=str(re))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def get_model_events(self, model_uid: str) -> JSONResponse:\n        try:\n            event_collector_ref = await self._get_event_collector_ref()\n            events = await event_collector_ref.get_model_events(model_uid)\n            return JSONResponse(content=events)\n        except ValueError as re:\n            logger.error(re, exc_info=True)\n            raise HTTPException(status_code=400, detail=str(re))\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def abort_request(\n        self, request: Request, model_uid: str, request_id: str\n    ) -> JSONResponse:\n        try:\n            payload = await request.json()\n            block_duration = payload.get(\n                \"block_duration\", XINFERENCE_DEFAULT_CANCEL_BLOCK_DURATION\n            )\n            logger.info(\n                \"Abort request with model uid: %s, request id: %s, block duration: %s\",\n                model_uid,\n                request_id,\n                block_duration,\n            )\n            supervisor_ref = await self._get_supervisor_ref()\n            res = await supervisor_ref.abort_request(\n                model_uid, request_id, block_duration\n            )\n            self._cancel_running_task(request_id, block_duration)\n            return JSONResponse(content=res)\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    async def list_vllm_supported_model_families(self) -> JSONResponse:\n        try:\n            from ..model.llm.vllm.core import (\n                VLLM_SUPPORTED_CHAT_MODELS,\n                VLLM_SUPPORTED_MODELS,\n            )\n\n            data = {\n                \"chat\": VLLM_SUPPORTED_CHAT_MODELS,\n                \"generate\": VLLM_SUPPORTED_MODELS,\n            }\n            return JSONResponse(content=data)\n        except Exception as e:\n            logger.error(e, exc_info=True)\n            raise HTTPException(status_code=500, detail=str(e))\n\n    @staticmethod\n    def extract_guided_params(raw_body: dict) -> dict:\n        kwargs = {}\n        raw_extra_body: dict = raw_body.get(\"extra_body\")  # type: ignore\n        if raw_body.get(\"guided_json\"):\n            kwargs[\"guided_json\"] = raw_body.get(\"guided_json\")\n        if raw_body.get(\"guided_regex\") is not None:\n            kwargs[\"guided_regex\"] = raw_body.get(\"guided_regex\")\n        if raw_body.get(\"guided_choice\") is not None:\n            kwargs[\"guided_choice\"] = raw_body.get(\"guided_choice\")\n        if raw_body.get(\"guided_grammar\") is not None:\n            kwargs[\"guided_grammar\"] = raw_body.get(\"guided_grammar\")\n        if raw_body.get(\"guided_json_object\") is not None:\n            kwargs[\"guided_json_object\"] = raw_body.get(\"guided_json_object\")\n        if raw_body.get(\"guided_decoding_backend\") is not None:\n            kwargs[\"guided_decoding_backend\"] = raw_body.get(\"guided_decoding_backend\")\n        if raw_body.get(\"guided_whitespace_pattern\") is not None:\n            kwargs[\"guided_whitespace_pattern\"] = raw_body.get(\n                \"guided_whitespace_pattern\"\n            )\n        # Parse OpenAI extra_body\n        if raw_extra_body is not None:\n            if raw_extra_body.get(\"guided_json\"):\n                kwargs[\"guided_json\"] = raw_extra_body.get(\"guided_json\")\n            if raw_extra_body.get(\"guided_regex\") is not None:\n                kwargs[\"guided_regex\"] = raw_extra_body.get(\"guided_regex\")\n            if raw_extra_body.get(\"guided_choice\") is not None:\n                kwargs[\"guided_choice\"] = raw_extra_body.get(\"guided_choice\")\n            if raw_extra_body.get(\"guided_grammar\") is not None:\n                kwargs[\"guided_grammar\"] = raw_extra_body.get(\"guided_grammar\")\n            if raw_extra_body.get(\"guided_json_object\") is not None:\n                kwargs[\"guided_json_object\"] = raw_extra_body.get(\"guided_json_object\")\n            if raw_extra_body.get(\"guided_decoding_backend\") is not None:\n                kwargs[\"guided_decoding_backend\"] = raw_extra_body.get(\n                    \"guided_decoding_backend\"\n                )\n            if raw_extra_body.get(\"guided_whitespace_pattern\") is not None:\n                kwargs[\"guided_whitespace_pattern\"] = raw_extra_body.get(\n                    \"guided_whitespace_pattern\"\n                )\n            if raw_extra_body.get(\"platform\") is not None:\n                kwargs[\"platform\"] = raw_extra_body.get(\"platform\")\n            if raw_extra_body.get(\"format\") is not None:\n                kwargs[\"format\"] = raw_extra_body.get(\"format\")\n\n        return kwargs\n\n    def _convert_openai_to_anthropic(self, openai_response: dict, model: str) -> dict:\n        \"\"\"\n        Convert OpenAI response format to Anthropic response format.\n\n        Args:\n            openai_response: OpenAI format response\n            model: Model name\n\n        Returns:\n            Anthropic format response\n        \"\"\"\n\n        # Extract content and tool calls from OpenAI response\n        content_blocks = []\n        stop_reason = \"stop\"\n\n        if \"choices\" in openai_response and len(openai_response[\"choices\"]) > 0:\n            choice = openai_response[\"choices\"][0]\n            message = choice.get(\"message\", {})\n\n            # Handle content text\n            content = message.get(\"content\", \"\")\n            if content:\n                if isinstance(content, str):\n                    # If content is a string, use it directly\n                    content_blocks.append({\"type\": \"text\", \"text\": content})\n                elif isinstance(content, list):\n                    # If content is a list, extract text from each content block\n                    for content_block in content:\n                        if isinstance(content_block, dict):\n                            if content_block.get(\"type\") == \"text\":\n                                text = content_block.get(\"text\", \"\")\n                                if text:\n                                    content_blocks.append(\n                                        {\"type\": \"text\", \"text\": text}\n                                    )\n                            elif \"text\" in content_block:\n                                # Handle different content block format\n                                text = content_block.get(\"text\", \"\")\n                                if text:\n                                    content_blocks.append(\n                                        {\"type\": \"text\", \"text\": text}\n                                    )\n\n            # Handle tool calls\n            tool_calls = message.get(\"tool_calls\", [])\n            for tool_call in tool_calls:\n                function = tool_call.get(\"function\", {})\n                arguments = function.get(\"arguments\", \"{}\")\n                try:\n                    input_data = json.loads(arguments)\n                except json.JSONDecodeError:\n                    input_data = {}\n                tool_use_block = {\n                    \"type\": \"tool_use\",\n                    \"cache_control\": {\"type\": \"ephemeral\"},\n                    \"id\": tool_call.get(\"id\", str(uuid.uuid4())),\n                    \"name\": function.get(\"name\", \"\"),\n                    \"input\": input_data,\n                }\n                content_blocks.append(tool_use_block)\n\n            # Set stop reason based on finish reason\n            finish_reason = choice.get(\"finish_reason\", \"stop\")\n            if finish_reason == \"tool_calls\":\n                stop_reason = \"tool_use\"\n\n        # Build Anthropic response\n        anthropic_response = {\n            \"id\": str(uuid.uuid4()),\n            \"type\": \"message\",\n            \"role\": \"assistant\",\n            \"content\": content_blocks,\n            \"model\": model,\n            \"stop_reason\": stop_reason,\n            \"stop_sequence\": None,\n            \"usage\": {\n                \"input_tokens\": openai_response.get(\"usage\", {}).get(\n                    \"prompt_tokens\", 0\n                ),\n                \"output_tokens\": openai_response.get(\"usage\", {}).get(\n                    \"completion_tokens\", 0\n                ),\n                \"cache_creation_input_tokens\": 0,\n                \"cache_read_input_tokens\": 0,\n            },\n        }\n\n        return anthropic_response\n\n\ndef run(\n    supervisor_address: str,\n    host: str,\n    port: int,\n    logging_conf: Optional[dict] = None,\n    auth_config_file: Optional[str] = None,\n):\n    logger.info(\"Starting Xinference at endpoint: http://%s:%s\", host, port)\n    try:\n        api = RESTfulAPI(\n            supervisor_address=supervisor_address,\n            host=host,\n            port=port,\n            auth_config_file=auth_config_file,\n        )\n        api.serve(logging_conf=logging_conf)\n    except SystemExit:\n        logger.warning(\"Failed to create socket with port %d\", port)\n        # compare the reference to differentiate between the cases where the user specify the\n        # default port and the user does not specify the port.\n        if port is XINFERENCE_DEFAULT_ENDPOINT_PORT:\n            port = get_next_port()\n            logger.info(f\"Found available port: {port}\")\n            logger.info(\"Starting Xinference at endpoint: http://%s:%s\", host, port)\n            api = RESTfulAPI(\n                supervisor_address=supervisor_address,\n                host=host,\n                port=port,\n                auth_config_file=auth_config_file,\n            )\n            api.serve(logging_conf=logging_conf)\n        else:\n            raise\n\n\ndef run_in_subprocess(\n    supervisor_address: str,\n    host: str,\n    port: int,\n    logging_conf: Optional[dict] = None,\n    auth_config_file: Optional[str] = None,\n) -> multiprocessing.Process:\n    p = multiprocessing.Process(\n        target=run,\n        args=(supervisor_address, host, port, logging_conf, auth_config_file),\n    )\n    p.daemon = True\n    p.start()\n    return p\n"
  },
  {
    "path": "xinference/api/routers/__init__.py",
    "content": "\"\"\"Route registration modules for Xinference REST API.\n\nEach module provides a ``register_routes(api)`` function that binds\ndomain-specific routes to ``api._router``.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom . import admin, audio, embeddings, images, llm, models, rerank, videos\n\nif TYPE_CHECKING:\n    from ..restful_api import RESTfulAPI\n\n\ndef register_all_routes(api: RESTfulAPI) -> None:\n    \"\"\"Register all domain routes on the given RESTfulAPI instance.\"\"\"\n    admin.register_routes(api)\n    models.register_routes(api)\n    llm.register_routes(api)\n    embeddings.register_routes(api)\n    rerank.register_routes(api)\n    audio.register_routes(api)\n    images.register_routes(api)\n    videos.register_routes(api)\n"
  },
  {
    "path": "xinference/api/routers/admin.py",
    "content": "\"\"\"Admin / cluster / infrastructure route registration and handlers.\"\"\"\n\nfrom __future__ import annotations\n\nimport logging\nimport os\nimport signal\nfrom typing import TYPE_CHECKING\n\nfrom fastapi import Depends, HTTPException, Query, Request, Security\n\nfrom ..._version import get_versions\nfrom ..dependencies import get_api\nfrom ..oauth2.types import LoginUserForm\nfrom ..responses import JSONResponse\n\nif TYPE_CHECKING:\n    from ..restful_api import RESTfulAPI\n\nlogger = logging.getLogger(__name__)\n\n\n# --- Handlers (top-level, inject dependencies via Depends) ---\n\n\nasync def get_status(api: \"RESTfulAPI\" = Depends(get_api)) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        data = await supervisor_ref.get_status()\n        return JSONResponse(content=data)\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def get_address(api: \"RESTfulAPI\" = Depends(get_api)) -> JSONResponse:\n    return JSONResponse(content=api._supervisor_address)\n\n\nasync def login_for_access_token(\n    request: Request, api: \"RESTfulAPI\" = Depends(get_api)\n) -> JSONResponse:\n    form_data = LoginUserForm.parse_obj(await request.json())\n    result = api._auth_service.generate_token_for_user(\n        form_data.username, form_data.password\n    )\n    return JSONResponse(content=result)\n\n\nasync def is_cluster_authenticated(\n    api: \"RESTfulAPI\" = Depends(get_api),\n) -> JSONResponse:\n    return JSONResponse(content={\"auth\": api.is_authenticated()})\n\n\nasync def get_cluster_device_info(\n    api: \"RESTfulAPI\" = Depends(get_api),\n    detailed: bool = Query(False),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        data = await supervisor_ref.get_cluster_device_info(detailed=detailed)\n        return JSONResponse(content=data)\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def get_cluster_version() -> JSONResponse:\n    try:\n        data = get_versions()\n        return JSONResponse(content=data)\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def get_devices_count(\n    api: \"RESTfulAPI\" = Depends(get_api),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        data = await supervisor_ref.get_devices_count()\n        return JSONResponse(content=data)\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def get_workers_info(\n    api: \"RESTfulAPI\" = Depends(get_api),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        res = await supervisor_ref.get_workers_info()\n        return JSONResponse(content=res)\n    except ValueError as re:\n        logger.error(re, exc_info=True)\n        raise HTTPException(status_code=400, detail=str(re))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def get_supervisor_info(\n    api: \"RESTfulAPI\" = Depends(get_api),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        res = await supervisor_ref.get_supervisor_info()\n        return JSONResponse(content=res)\n    except ValueError as re:\n        logger.error(re, exc_info=True)\n        raise HTTPException(status_code=400, detail=str(re))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def abort_cluster(\n    api: \"RESTfulAPI\" = Depends(get_api),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        res = await supervisor_ref.abort_cluster()\n        os.kill(os.getpid(), signal.SIGINT)\n        return JSONResponse(content={\"result\": res})\n    except ValueError as re:\n        logger.error(re, exc_info=True)\n        raise HTTPException(status_code=400, detail=str(re))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def list_cached_models(\n    api: \"RESTfulAPI\" = Depends(get_api),\n    model_name: str = Query(None),\n    worker_ip: str = Query(None),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        data = await supervisor_ref.list_cached_models(model_name, worker_ip)\n        resp = {\"list\": data}\n        return JSONResponse(content=resp)\n    except ValueError as re:\n        logger.error(re, exc_info=True)\n        raise HTTPException(status_code=400, detail=str(re))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def list_model_files(\n    api: \"RESTfulAPI\" = Depends(get_api),\n    model_version: str = Query(None),\n    worker_ip: str = Query(None),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        data = await supervisor_ref.list_deletable_models(model_version, worker_ip)\n        response = {\n            \"model_version\": model_version,\n            \"worker_ip\": worker_ip,\n            \"paths\": data,\n        }\n        return JSONResponse(content=response)\n    except ValueError as re:\n        logger.error(re, exc_info=True)\n        raise HTTPException(status_code=400, detail=str(re))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def confirm_and_remove_model(\n    api: \"RESTfulAPI\" = Depends(get_api),\n    model_version: str = Query(None),\n    worker_ip: str = Query(None),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        res = await supervisor_ref.confirm_and_remove_model(\n            model_version=model_version, worker_ip=worker_ip\n        )\n        return JSONResponse(content={\"result\": res})\n    except ValueError as re:\n        logger.error(re, exc_info=True)\n        raise HTTPException(status_code=400, detail=str(re))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def list_virtual_envs(\n    api: \"RESTfulAPI\" = Depends(get_api),\n    model_name: str = Query(None),\n    model_engine: str = Query(None),\n    worker_ip: str = Query(None),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        data = await supervisor_ref.list_virtual_envs(\n            model_name, model_engine, worker_ip\n        )\n        resp = {\"list\": data}\n        return JSONResponse(content=resp)\n    except ValueError as re:\n        logger.error(re, exc_info=True)\n        raise HTTPException(status_code=400, detail=str(re))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def remove_virtual_env(\n    api: \"RESTfulAPI\" = Depends(get_api),\n    model_name: str = Query(None),\n    model_engine: str = Query(None),\n    python_version: str = Query(None),\n    worker_ip: str = Query(None),\n) -> JSONResponse:\n    if not model_name:\n        raise HTTPException(status_code=400, detail=\"model_name parameter is required\")\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        res = await supervisor_ref.remove_virtual_env(\n            model_name=model_name,\n            model_engine=model_engine,\n            python_version=python_version,\n            worker_ip=worker_ip,\n        )\n        return JSONResponse(content={\"result\": res})\n    except ValueError as re:\n        logger.error(re, exc_info=True)\n        raise HTTPException(status_code=400, detail=str(re))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\nasync def get_progress(\n    request_id: str,\n    api: \"RESTfulAPI\" = Depends(get_api),\n) -> JSONResponse:\n    try:\n        supervisor_ref = await api._get_supervisor_ref()\n        result = {\"progress\": await supervisor_ref.get_progress(request_id)}\n        return JSONResponse(content=result)\n    except KeyError as e:\n        raise HTTPException(status_code=400, detail=str(e))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\n# --- Route registration ---\n\n\ndef register_routes(api: \"RESTfulAPI\") -> None:\n    router = api._router\n    auth = api._auth_service\n    is_auth = api.is_authenticated()\n\n    router.add_api_route(\"/status\", get_status, methods=[\"GET\"])\n    router.add_api_route(\"/v1/address\", get_address, methods=[\"GET\"])\n    router.add_api_route(\"/token\", login_for_access_token, methods=[\"POST\"])\n    router.add_api_route(\"/v1/cluster/auth\", is_cluster_authenticated, methods=[\"GET\"])\n\n    router.add_api_route(\n        \"/v1/cluster/info\",\n        get_cluster_device_info,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"admin\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/cluster/version\",\n        get_cluster_version,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"admin\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/cluster/devices\",\n        get_devices_count,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n\n    router.add_api_route(\n        \"/v1/workers\",\n        get_workers_info,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"admin\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/supervisor\",\n        get_supervisor_info,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"admin\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/clusters\",\n        abort_cluster,\n        methods=[\"DELETE\"],\n        dependencies=([Security(auth, scopes=[\"admin\"])] if is_auth else None),\n    )\n\n    router.add_api_route(\n        \"/v1/cache/models\",\n        list_cached_models,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"cache:list\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/cache/models/files\",\n        list_model_files,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"cache:list\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/cache/models\",\n        confirm_and_remove_model,\n        methods=[\"DELETE\"],\n        dependencies=([Security(auth, scopes=[\"cache:delete\"])] if is_auth else None),\n    )\n\n    router.add_api_route(\n        \"/v1/virtualenvs\",\n        list_virtual_envs,\n        methods=[\"GET\"],\n        dependencies=(\n            [Security(auth, scopes=[\"virtualenv:list\"])] if is_auth else None\n        ),\n    )\n    router.add_api_route(\n        \"/v1/virtualenvs\",\n        remove_virtual_env,\n        methods=[\"DELETE\"],\n        dependencies=(\n            [Security(auth, scopes=[\"virtualenv:delete\"])] if is_auth else None\n        ),\n    )\n\n    router.add_api_route(\n        \"/v1/requests/{request_id}/progress\",\n        get_progress,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n"
  },
  {
    "path": "xinference/api/routers/audio.py",
    "content": "\"\"\"Audio route registration (transcriptions, translations, speech).\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom fastapi import Security\n\nif TYPE_CHECKING:\n    from ..restful_api import RESTfulAPI\n\n\ndef register_routes(api: \"RESTfulAPI\") -> None:\n    router = api._router\n    auth = api._auth_service\n    is_auth = api.is_authenticated()\n\n    router.add_api_route(\n        \"/v1/audio/transcriptions\",\n        api.create_transcriptions,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/audio/translations\",\n        api.create_translations,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/audio/speech\",\n        api.create_speech,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n"
  },
  {
    "path": "xinference/api/routers/embeddings.py",
    "content": "\"\"\"Embeddings route registration.\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom fastapi import Security\n\nif TYPE_CHECKING:\n    from ..restful_api import RESTfulAPI\n\n\ndef register_routes(api: \"RESTfulAPI\") -> None:\n    router = api._router\n    auth = api._auth_service\n    is_auth = api.is_authenticated()\n\n    router.add_api_route(\n        \"/v1/embeddings\",\n        api.create_embedding,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/convert_ids_to_tokens\",\n        api.convert_ids_to_tokens,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n"
  },
  {
    "path": "xinference/api/routers/images.py",
    "content": "\"\"\"Image route registration (generations, variations, inpainting, ocr, edits, SD API).\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom fastapi import Security\n\nfrom ...types import ImageList, SDAPIResult\n\nif TYPE_CHECKING:\n    from ..restful_api import RESTfulAPI\n\n\ndef register_routes(api: \"RESTfulAPI\") -> None:\n    router = api._router\n    auth = api._auth_service\n    is_auth = api.is_authenticated()\n\n    router.add_api_route(\n        \"/v1/images/generations\",\n        api.create_images,\n        methods=[\"POST\"],\n        response_model=ImageList,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/images/variations\",\n        api.create_variations,\n        methods=[\"POST\"],\n        response_model=ImageList,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/images/inpainting\",\n        api.create_inpainting,\n        methods=[\"POST\"],\n        response_model=ImageList,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/images/ocr\",\n        api.create_ocr,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/images/edits\",\n        api.create_image_edits,\n        methods=[\"POST\"],\n        response_model=ImageList,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n\n    # SD WebUI API\n    router.add_api_route(\n        \"/sdapi/v1/options\",\n        api.sdapi_options,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/sdapi/v1/sd-models\",\n        api.sdapi_sd_models,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/sdapi/v1/samplers\",\n        api.sdapi_samplers,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/sdapi/v1/txt2img\",\n        api.sdapi_txt2img,\n        methods=[\"POST\"],\n        response_model=SDAPIResult,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/sdapi/v1/img2img\",\n        api.sdapi_img2img,\n        methods=[\"POST\"],\n        response_model=SDAPIResult,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n"
  },
  {
    "path": "xinference/api/routers/llm.py",
    "content": "\"\"\"LLM route registration (completions, chat/completions, Anthropic messages, flexible infer).\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom fastapi import Security\n\nfrom ...types import ANTHROPIC_AVAILABLE, AnthropicMessage, ChatCompletion, Completion\n\nif TYPE_CHECKING:\n    from ..restful_api import RESTfulAPI\n\n\ndef register_routes(api: \"RESTfulAPI\") -> None:\n    router = api._router\n    auth = api._auth_service\n    is_auth = api.is_authenticated()\n\n    router.add_api_route(\n        \"/v1/completions\",\n        api.create_completion,\n        methods=[\"POST\"],\n        response_model=Completion,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n\n    if ANTHROPIC_AVAILABLE:\n        router.add_api_route(\n            \"/anthropic/v1/messages\",\n            api.create_message,\n            methods=[\"POST\"],\n            response_model=AnthropicMessage,\n            dependencies=(\n                [Security(auth, scopes=[\"models:read\"])] if is_auth else None\n            ),\n        )\n        router.add_api_route(\n            \"/anthropic/v1/models\",\n            api.anthropic_list_models,\n            methods=[\"GET\"],\n            dependencies=(\n                [Security(auth, scopes=[\"models:list\"])] if is_auth else None\n            ),\n        )\n        router.add_api_route(\n            \"/anthropic/v1/models/{model_id}\",\n            api.anthropic_get_model,\n            methods=[\"GET\"],\n            dependencies=(\n                [Security(auth, scopes=[\"models:list\"])] if is_auth else None\n            ),\n        )\n\n    router.add_api_route(\n        \"/v1/chat/completions\",\n        api.create_chat_completion,\n        methods=[\"POST\"],\n        response_model=ChatCompletion,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n\n    router.add_api_route(\n        \"/v1/flexible/infers\",\n        api.create_flexible_infer,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n"
  },
  {
    "path": "xinference/api/routers/models.py",
    "content": "\"\"\"Model management route registration (list / launch / terminate / register / etc.).\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom fastapi import Security\n\nif TYPE_CHECKING:\n    from ..restful_api import RESTfulAPI\n\n\ndef register_routes(api: \"RESTfulAPI\") -> None:\n    router = api._router\n    auth = api._auth_service\n    is_auth = api.is_authenticated()\n\n    # --- must be registered before /v1/models/{model_uid} to avoid conflicts ---\n    router.add_api_route(\n        \"/v1/models/prompts\", api._get_builtin_prompts, methods=[\"GET\"]\n    )\n    router.add_api_route(\n        \"/v1/models/families\", api._get_builtin_families, methods=[\"GET\"]\n    )\n    router.add_api_route(\n        \"/v1/models/llm/auto-register\",\n        api.build_llm_registration_from_config,\n        methods=[\"POST\"],\n        dependencies=(\n            [Security(auth, scopes=[\"models:register\"])] if is_auth else None\n        ),\n    )\n    router.add_api_route(\n        \"/v1/models/vllm-supported\",\n        api.list_vllm_supported_model_families,\n        methods=[\"GET\"],\n    )\n    router.add_api_route(\n        \"/v1/models/update_type\",\n        api.update_model_type,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:add\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models/instances\",\n        api.get_instance_info,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models/instance\",\n        api.launch_model_by_version,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:start\"])] if is_auth else None),\n    )\n\n    # --- engines ---\n    router.add_api_route(\n        \"/v1/engines/{model_name}\",\n        api.query_engines_by_model_name,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/engines/{model_type}/{model_name}\",\n        api.query_engines_by_model_name,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n\n    # --- model versions ---\n    router.add_api_route(\n        \"/v1/models/{model_type}/{model_name}/versions\",\n        api.get_model_versions,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n\n    # --- CRUD on running models ---\n    router.add_api_route(\n        \"/v1/models\",\n        api.list_models,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models\",\n        api.launch_model,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:start\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models/{model_uid}\",\n        api.describe_model,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models/{model_uid}\",\n        api.terminate_model,\n        methods=[\"DELETE\"],\n        dependencies=([Security(auth, scopes=[\"models:stop\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models/{model_uid}/events\",\n        api.get_model_events,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models/{model_uid}/replicas\",\n        api.get_model_replicas,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models/{model_uid}/requests/{request_id}/abort\",\n        api.abort_request,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models/{model_uid}/progress\",\n        api.get_launch_model_progress,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/models/{model_uid}/cancel\",\n        api.cancel_launch_model,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:stop\"])] if is_auth else None),\n    )\n\n    # --- model registrations ---\n    router.add_api_route(\n        \"/v1/model_registrations/{model_type}\",\n        api.register_model,\n        methods=[\"POST\"],\n        dependencies=(\n            [Security(auth, scopes=[\"models:register\"])] if is_auth else None\n        ),\n    )\n    router.add_api_route(\n        \"/v1/model_registrations/{model_type}/{model_name}\",\n        api.unregister_model,\n        methods=[\"DELETE\"],\n        dependencies=(\n            [Security(auth, scopes=[\"models:unregister\"])] if is_auth else None\n        ),\n    )\n    router.add_api_route(\n        \"/v1/model_registrations/{model_type}\",\n        api.list_model_registrations,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/model_registrations/{model_type}/{model_name}\",\n        api.get_model_registrations,\n        methods=[\"GET\"],\n        dependencies=([Security(auth, scopes=[\"models:list\"])] if is_auth else None),\n    )\n\n    # --- Gradio UI ---\n    router.add_api_route(\n        \"/v1/ui/{model_uid}\",\n        api.build_gradio_interface,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/ui/images/{model_uid}\",\n        api.build_gradio_media_interface,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/ui/audios/{model_uid}\",\n        api.build_gradio_media_interface,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/ui/videos/{model_uid}\",\n        api.build_gradio_media_interface,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n"
  },
  {
    "path": "xinference/api/routers/rerank.py",
    "content": "\"\"\"Rerank route registration.\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom fastapi import Security\n\nif TYPE_CHECKING:\n    from ..restful_api import RESTfulAPI\n\n\ndef register_routes(api: \"RESTfulAPI\") -> None:\n    router = api._router\n    auth = api._auth_service\n    is_auth = api.is_authenticated()\n\n    router.add_api_route(\n        \"/v1/rerank\",\n        api.rerank,\n        methods=[\"POST\"],\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n"
  },
  {
    "path": "xinference/api/routers/videos.py",
    "content": "\"\"\"Video route registration (text-to-video, image-to-video, flf-to-video).\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom fastapi import Security\n\nfrom ...types import VideoList\n\nif TYPE_CHECKING:\n    from ..restful_api import RESTfulAPI\n\n\ndef register_routes(api: \"RESTfulAPI\") -> None:\n    router = api._router\n    auth = api._auth_service\n    is_auth = api.is_authenticated()\n\n    router.add_api_route(\n        \"/v1/video/generations\",\n        api.create_videos,\n        methods=[\"POST\"],\n        response_model=VideoList,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/video/generations/image\",\n        api.create_videos_from_images,\n        methods=[\"POST\"],\n        response_model=VideoList,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n    router.add_api_route(\n        \"/v1/video/generations/flf\",\n        api.create_videos_from_first_last_frame,\n        methods=[\"POST\"],\n        response_model=VideoList,\n        dependencies=([Security(auth, scopes=[\"models:read\"])] if is_auth else None),\n    )\n"
  },
  {
    "path": "xinference/api/schemas/__init__.py",
    "content": "\"\"\"Pydantic schemas for Xinference REST API.\"\"\"\n\nfrom .requests import (\n    AutoConfigLLMRequest,\n    BuildGradioInterfaceRequest,\n    BuildGradioMediaInterfaceRequest,\n    CreateCompletionRequest,\n    CreateEmbeddingRequest,\n    RegisterModelRequest,\n    RerankRequest,\n    SDAPIImg2imgRequst,\n    SDAPIOptionsRequest,\n    SDAPITxt2imgRequst,\n    SpeechRequest,\n    TextToImageRequest,\n    TextToVideoRequest,\n    UpdateModelRequest,\n)\n\n__all__ = [\n    \"AutoConfigLLMRequest\",\n    \"BuildGradioInterfaceRequest\",\n    \"BuildGradioMediaInterfaceRequest\",\n    \"CreateCompletionRequest\",\n    \"CreateEmbeddingRequest\",\n    \"RegisterModelRequest\",\n    \"RerankRequest\",\n    \"SDAPIImg2imgRequst\",\n    \"SDAPIOptionsRequest\",\n    \"SDAPITxt2imgRequst\",\n    \"SpeechRequest\",\n    \"TextToImageRequest\",\n    \"TextToVideoRequest\",\n    \"UpdateModelRequest\",\n]\n"
  },
  {
    "path": "xinference/api/schemas/requests.py",
    "content": "\"\"\"Request schemas for Xinference REST API.\n\nThis module is intentionally thin and contains only Pydantic models used by the\nFastAPI layer.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Dict, List, Optional, Union\n\nfrom ..._compat import BaseModel, Field\nfrom ...types import CreateCompletion\n\n\nclass CreateCompletionRequest(CreateCompletion):\n    class Config:\n        schema_extra = {\n            \"example\": {\n                \"prompt\": \"\\n\\n### Instructions:\\nWhat is the capital of France?\\n\\n### Response:\\n\",\n                \"stop\": [\"\\n\", \"###\"],\n            }\n        }\n\n\nclass CreateEmbeddingRequest(BaseModel):\n    model: str\n    input: Union[\n        str, List[str], List[int], List[List[int]], Dict[str, str], List[Dict[str, str]]\n    ] = Field(description=\"The input to embed.\")\n    user: Optional[str] = None\n\n    class Config:\n        schema_extra = {\n            \"example\": {\n                \"input\": \"The food was delicious and the waiter...\",\n            }\n        }\n\n\nclass RerankRequest(BaseModel):\n    model: str\n    query: str\n    documents: List[str]\n    top_n: Optional[int] = None\n    return_documents: Optional[bool] = False\n    return_len: Optional[bool] = False\n    max_chunks_per_doc: Optional[int] = None\n    kwargs: Optional[str] = None\n\n\nclass TextToImageRequest(BaseModel):\n    model: str\n    prompt: Union[str, List[str]] = Field(description=\"The input to embed.\")\n    n: Optional[int] = 1\n    response_format: Optional[str] = \"url\"\n    size: Optional[str] = \"1024*1024\"\n    kwargs: Optional[str] = None\n    user: Optional[str] = None\n\n\nclass SDAPIOptionsRequest(BaseModel):\n    sd_model_checkpoint: Optional[str] = None\n\n\nclass SDAPITxt2imgRequst(BaseModel):\n    model: Optional[str]\n    prompt: Optional[str] = \"\"\n    negative_prompt: Optional[str] = \"\"\n    steps: Optional[int] = None\n    seed: Optional[int] = -1\n    cfg_scale: Optional[float] = 7.0\n    override_settings: Optional[dict] = {}\n    width: Optional[int] = 512\n    height: Optional[int] = 512\n    sampler_name: Optional[str] = None\n    denoising_strength: Optional[float] = None\n    kwargs: Optional[str] = None\n    user: Optional[str] = None\n\n\nclass SDAPIImg2imgRequst(BaseModel):\n    model: Optional[str]\n    init_images: Optional[list]\n    prompt: Optional[str] = \"\"\n    negative_prompt: Optional[str] = \"\"\n    steps: Optional[int] = None\n    seed: Optional[int] = -1\n    cfg_scale: Optional[float] = 7.0\n    override_settings: Optional[dict] = {}\n    width: Optional[int] = 512\n    height: Optional[int] = 512\n    sampler_name: Optional[str] = None\n    denoising_strength: Optional[float] = None\n    kwargs: Optional[str] = None\n    user: Optional[str] = None\n\n\nclass TextToVideoRequest(BaseModel):\n    model: str\n    prompt: Union[str, List[str]] = Field(description=\"The input to embed.\")\n    n: Optional[int] = 1\n    kwargs: Optional[str] = None\n    user: Optional[str] = None\n\n\nclass SpeechRequest(BaseModel):\n    model: str\n    input: str\n    voice: Optional[str]\n    response_format: Optional[str] = \"mp3\"\n    speed: Optional[float] = 1.0\n    stream: Optional[bool] = False\n    kwargs: Optional[str] = None\n\n\nclass RegisterModelRequest(BaseModel):\n    model: str\n    worker_ip: Optional[str]\n    persist: bool\n\n\nclass AutoConfigLLMRequest(BaseModel):\n    model_path: str\n    model_family: str\n\n\nclass UpdateModelRequest(BaseModel):\n    model_type: str\n\n\nclass BuildGradioInterfaceRequest(BaseModel):\n    model_type: str\n    model_name: str\n    model_size_in_billions: int\n    model_format: str\n    quantization: str\n    context_length: int\n    model_ability: List[str]\n    model_description: str\n    model_lang: List[str]\n\n\nclass BuildGradioMediaInterfaceRequest(BaseModel):\n    model_type: str\n    model_name: str\n    model_family: str\n    model_id: str\n    controlnet: Union[None, List[Dict[str, Union[str, dict, None]]]]\n    model_revision: Optional[str]\n    model_ability: List[str]\n"
  },
  {
    "path": "xinference/api/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/api/tests/test_admin.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Unit tests for admin router handlers.\"\"\"\n\nimport json\nfrom unittest.mock import AsyncMock, MagicMock, patch\n\nimport pytest\nfrom fastapi import HTTPException\n\nfrom xinference.api.routers import admin\n\n\ndef _json_body(response):\n    return json.loads(response.body.decode())\n\n\n@pytest.fixture\ndef mock_supervisor():\n    supervisor = AsyncMock()\n    supervisor.get_status = AsyncMock(return_value={\"running_models\": 0})\n    supervisor.get_cluster_device_info = AsyncMock(\n        return_value={\"devices\": [], \"workers\": []}\n    )\n    supervisor.get_devices_count = AsyncMock(return_value={\"cpu\": 8, \"gpu\": 0})\n    supervisor.get_workers_info = AsyncMock(return_value=[])\n    supervisor.get_supervisor_info = AsyncMock(\n        return_value={\"supervisor_address\": \"127.0.0.1:9999\"}\n    )\n    supervisor.abort_cluster = AsyncMock(return_value=True)\n    supervisor.list_cached_models = AsyncMock(return_value=[])\n    supervisor.list_deletable_models = AsyncMock(return_value=[])\n    supervisor.confirm_and_remove_model = AsyncMock(return_value=True)\n    supervisor.list_virtual_envs = AsyncMock(return_value=[])\n    supervisor.remove_virtual_env = AsyncMock(return_value=True)\n    supervisor.get_progress = AsyncMock(return_value=0.5)\n    return supervisor\n\n\n@pytest.fixture\ndef mock_api(mock_supervisor):\n    api = MagicMock()\n    api._supervisor_address = \"127.0.0.1:9999\"\n    api._get_supervisor_ref = AsyncMock(return_value=mock_supervisor)\n    api._auth_service = MagicMock()\n    api._auth_service.generate_token_for_user = MagicMock(\n        return_value={\"access_token\": \"test-token\", \"token_type\": \"bearer\"}\n    )\n    api.is_authenticated = MagicMock(return_value=False)\n    return api\n\n\n@pytest.mark.asyncio\nasync def test_get_status_returns_200_and_data(mock_api, mock_supervisor):\n    mock_supervisor.get_status.return_value = {\"running_models\": 2}\n    response = await admin.get_status(api=mock_api)\n    assert response.status_code == 200\n    assert _json_body(response) == {\"running_models\": 2}\n\n\n@pytest.mark.asyncio\nasync def test_get_status_raises_500_on_supervisor_error(mock_api, mock_supervisor):\n    mock_supervisor.get_status.side_effect = RuntimeError(\"supervisor down\")\n    with pytest.raises(HTTPException) as exc_info:\n        await admin.get_status(api=mock_api)\n    assert exc_info.value.status_code == 500\n    assert \"supervisor down\" in exc_info.value.detail\n\n\n@pytest.mark.asyncio\nasync def test_get_address_returns_supervisor_address(mock_api):\n    mock_api._supervisor_address = \"10.0.0.1:12345\"\n    response = await admin.get_address(api=mock_api)\n    assert response.status_code == 200\n    assert _json_body(response) == \"10.0.0.1:12345\"\n\n\n@pytest.mark.asyncio\nasync def test_get_cluster_version_returns_version():\n    response = await admin.get_cluster_version()\n    assert response.status_code == 200\n    data = _json_body(response)\n    assert \"version\" in data or \"git\" in data or len(data) >= 1\n\n\n@pytest.mark.asyncio\nasync def test_is_cluster_authenticated_returns_auth_flag(mock_api):\n    mock_api.is_authenticated.return_value = True\n    response = await admin.is_cluster_authenticated(api=mock_api)\n    assert response.status_code == 200\n    assert _json_body(response) == {\"auth\": True}\n\n    mock_api.is_authenticated.return_value = False\n    response = await admin.is_cluster_authenticated(api=mock_api)\n    assert _json_body(response) == {\"auth\": False}\n\n\n@pytest.mark.asyncio\nasync def test_login_for_access_token_returns_token(mock_api):\n    request = MagicMock()\n    request.json = AsyncMock(return_value={\"username\": \"user\", \"password\": \"pass\"})\n    mock_api._auth_service.generate_token_for_user.return_value = {\n        \"access_token\": \"jwt-xxx\",\n        \"token_type\": \"bearer\",\n    }\n    response = await admin.login_for_access_token(request=request, api=mock_api)\n    assert response.status_code == 200\n    assert _json_body(response)[\"access_token\"] == \"jwt-xxx\"\n    mock_api._auth_service.generate_token_for_user.assert_called_once_with(\n        \"user\", \"pass\"\n    )\n\n\n@pytest.mark.asyncio\nasync def test_get_cluster_device_info_returns_data(mock_api, mock_supervisor):\n    mock_supervisor.get_cluster_device_info.return_value = {\n        \"devices\": [\"gpu-0\"],\n        \"workers\": [{\"ip\": \"127.0.0.1\"}],\n    }\n    response = await admin.get_cluster_device_info(api=mock_api, detailed=True)\n    assert response.status_code == 200\n    data = _json_body(response)\n    assert data[\"devices\"] == [\"gpu-0\"]\n    mock_supervisor.get_cluster_device_info.assert_called_once_with(detailed=True)\n\n\n@pytest.mark.asyncio\nasync def test_get_devices_count_returns_data(mock_api, mock_supervisor):\n    mock_supervisor.get_devices_count.return_value = {\"cpu\": 16, \"gpu\": 2}\n    response = await admin.get_devices_count(api=mock_api)\n    assert response.status_code == 200\n    assert _json_body(response) == {\"cpu\": 16, \"gpu\": 2}\n\n\n@pytest.mark.asyncio\nasync def test_get_workers_info_returns_data(mock_api, mock_supervisor):\n    mock_supervisor.get_workers_info.return_value = [\n        {\"worker_id\": \"w1\", \"status\": \"running\"}\n    ]\n    response = await admin.get_workers_info(api=mock_api)\n    assert response.status_code == 200\n    assert _json_body(response) == [{\"worker_id\": \"w1\", \"status\": \"running\"}]\n\n\n@pytest.mark.asyncio\nasync def test_get_supervisor_info_returns_data(mock_api, mock_supervisor):\n    mock_supervisor.get_supervisor_info.return_value = {\"address\": \"0.0.0.0\"}\n    response = await admin.get_supervisor_info(api=mock_api)\n    assert response.status_code == 200\n    assert _json_body(response) == {\"address\": \"0.0.0.0\"}\n\n\n@pytest.mark.asyncio\nasync def test_abort_cluster_returns_result_and_does_not_kill_in_test(\n    mock_api, mock_supervisor\n):\n    mock_supervisor.abort_cluster.return_value = True\n    with patch(\"xinference.api.routers.admin.os.kill\", MagicMock()):\n        response = await admin.abort_cluster(api=mock_api)\n    assert response.status_code == 200\n    assert _json_body(response) == {\"result\": True}\n\n\n@pytest.mark.asyncio\nasync def test_list_cached_models_returns_list(mock_api, mock_supervisor):\n    mock_supervisor.list_cached_models.return_value = [\"model1\", \"model2\"]\n    response = await admin.list_cached_models(\n        api=mock_api, model_name=\"qwen\", worker_ip=None\n    )\n    assert response.status_code == 200\n    assert _json_body(response) == {\"list\": [\"model1\", \"model2\"]}\n    mock_supervisor.list_cached_models.assert_called_once_with(\"qwen\", None)\n\n\n@pytest.mark.asyncio\nasync def test_list_model_files_returns_paths(mock_api, mock_supervisor):\n    mock_supervisor.list_deletable_models.return_value = [\"/path/a\", \"/path/b\"]\n    response = await admin.list_model_files(\n        api=mock_api,\n        model_version=\"1.0\",\n        worker_ip=\"10.0.0.1\",\n    )\n    assert response.status_code == 200\n    data = _json_body(response)\n    assert data[\"model_version\"] == \"1.0\"\n    assert data[\"worker_ip\"] == \"10.0.0.1\"\n    assert data[\"paths\"] == [\"/path/a\", \"/path/b\"]\n\n\n@pytest.mark.asyncio\nasync def test_confirm_and_remove_model_returns_result(mock_api, mock_supervisor):\n    mock_supervisor.confirm_and_remove_model.return_value = True\n    response = await admin.confirm_and_remove_model(\n        api=mock_api, model_version=\"1.0\", worker_ip=None\n    )\n    assert response.status_code == 200\n    assert _json_body(response) == {\"result\": True}\n\n\n@pytest.mark.asyncio\nasync def test_list_virtual_envs_returns_list(mock_api, mock_supervisor):\n    mock_supervisor.list_virtual_envs.return_value = [{\"name\": \"venv1\"}]\n    response = await admin.list_virtual_envs(\n        api=mock_api,\n        model_name=\"qwen\",\n        model_engine=\"vllm\",\n        worker_ip=None,\n    )\n    assert response.status_code == 200\n    assert _json_body(response) == {\"list\": [{\"name\": \"venv1\"}]}\n\n\n@pytest.mark.asyncio\nasync def test_remove_virtual_env_requires_model_name(mock_api):\n    with pytest.raises(HTTPException) as exc_info:\n        await admin.remove_virtual_env(\n            api=mock_api,\n            model_name=None,\n            model_engine=None,\n            python_version=None,\n            worker_ip=None,\n        )\n    assert exc_info.value.status_code == 400\n    assert \"model_name\" in exc_info.value.detail\n\n\n@pytest.mark.asyncio\nasync def test_remove_virtual_env_returns_result(mock_api, mock_supervisor):\n    mock_supervisor.remove_virtual_env.return_value = True\n    response = await admin.remove_virtual_env(\n        api=mock_api,\n        model_name=\"qwen\",\n        model_engine=None,\n        python_version=None,\n        worker_ip=None,\n    )\n    assert response.status_code == 200\n    assert _json_body(response) == {\"result\": True}\n\n\n@pytest.mark.asyncio\nasync def test_get_progress_returns_progress(mock_api, mock_supervisor):\n    mock_supervisor.get_progress.return_value = 0.75\n    response = await admin.get_progress(request_id=\"req-123\", api=mock_api)\n    assert response.status_code == 200\n    assert _json_body(response) == {\"progress\": 0.75}\n    mock_supervisor.get_progress.assert_called_once_with(\"req-123\")\n\n\n@pytest.mark.asyncio\nasync def test_get_progress_raises_400_on_key_error(mock_api, mock_supervisor):\n    mock_supervisor.get_progress.side_effect = KeyError(\"req-missing\")\n    with pytest.raises(HTTPException) as exc_info:\n        await admin.get_progress(request_id=\"req-missing\", api=mock_api)\n    assert exc_info.value.status_code == 400\n"
  },
  {
    "path": "xinference/api/tests/test_utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport pytest\nfrom fastapi import HTTPException\n\nfrom ..utils import require_model\n\n\nclass DummyModel:\n    \"\"\"Dummy model for testing.\"\"\"\n\n    def __init__(self, uid: str):\n        self.uid = uid\n\n\nclass DummySupervisor:\n    \"\"\"Dummy supervisor for testing.\"\"\"\n\n    def __init__(self, models=None):\n        self._models = models or {}\n\n    async def get_model(self, model_uid: str):\n        if model_uid not in self._models:\n            raise ValueError(f\"Model {model_uid} not found\")\n        return self._models[model_uid]\n\n\nclass TestRequireModel:\n    \"\"\"Tests for require_model function.\"\"\"\n\n    @pytest.mark.asyncio\n    async def test_successful_get(self):\n        \"\"\"Test successful model retrieval.\"\"\"\n        model = DummyModel(\"test-model\")\n        supervisor = DummySupervisor(models={\"test-model\": model})\n\n        async def get_supervisor():\n            return supervisor\n\n        result = await require_model(get_supervisor, \"test-model\")\n        assert result is model\n\n    @pytest.mark.asyncio\n    async def test_model_not_found_raises_400(self):\n        \"\"\"Test that ValueError raises 400.\"\"\"\n        supervisor = DummySupervisor(models={})\n\n        async def get_supervisor():\n            return supervisor\n\n        with pytest.raises(HTTPException) as exc_info:\n            await require_model(get_supervisor, \"missing-model\")\n\n        assert exc_info.value.status_code == 400\n\n    @pytest.mark.asyncio\n    async def test_unexpected_error_raises_500(self):\n        \"\"\"Test that unexpected errors raise 500.\"\"\"\n\n        async def get_supervisor():\n            raise RuntimeError(\"Unexpected error\")\n\n        with pytest.raises(HTTPException) as exc_info:\n            await require_model(get_supervisor, \"any-model\")\n\n        assert exc_info.value.status_code == 500\n\n    @pytest.mark.asyncio\n    async def test_reports_error_event(self):\n        \"\"\"Test that error events are reported.\"\"\"\n        supervisor = DummySupervisor(models={})\n        reported = []\n\n        async def get_supervisor():\n            return supervisor\n\n        async def report_error(model_uid, message):\n            reported.append((model_uid, message))\n\n        with pytest.raises(HTTPException):\n            await require_model(\n                get_supervisor, \"missing-model\", report_error_event=report_error\n            )\n\n        assert len(reported) == 1\n        assert reported[0][0] == \"missing-model\"\n\n    @pytest.mark.asyncio\n    async def test_no_report_error_event_when_none(self):\n        \"\"\"Test that no error is reported when report_error_event is None.\"\"\"\n        supervisor = DummySupervisor(models={})\n\n        async def get_supervisor():\n            return supervisor\n\n        # Should not raise any error when report_error_event is None\n        with pytest.raises(HTTPException):\n            await require_model(get_supervisor, \"missing-model\")\n"
  },
  {
    "path": "xinference/api/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nAPI utilities for reducing code duplication in RESTful API.\n\"\"\"\n\nimport logging\nfrom typing import Any, Callable, Optional\n\nfrom fastapi import HTTPException\n\nlogger = logging.getLogger(__name__)\n\n\nasync def require_model(\n    get_supervisor_ref: Callable,\n    model_uid: str,\n    report_error_event: Optional[Callable] = None,\n) -> Any:\n    \"\"\"\n    Get a model with standardized error handling.\n\n    Replaces the repeated pattern:\n    ```python\n    try:\n        model = await (await self._get_supervisor_ref()).get_model(model_uid)\n    except ValueError as ve:\n        logger.error(str(ve), exc_info=True)\n        await self._report_error_event(model_uid, str(ve))\n        raise HTTPException(status_code=400, detail=str(ve))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        await self._report_error_event(model_uid, str(e))\n        raise HTTPException(status_code=500, detail=str(e))\n    ```\n\n    Usage:\n    ```python\n    model = await require_model(\n        self._get_supervisor_ref, model_uid, self._report_error_event\n    )\n    ```\n\n    Args:\n        get_supervisor_ref: Async function to get supervisor reference\n        model_uid: Model unique identifier\n        report_error_event: Optional async function to report error events\n\n    Returns:\n        The model instance\n\n    Raises:\n        HTTPException: With appropriate status code on error\n    \"\"\"\n    try:\n        supervisor = await get_supervisor_ref()\n        return await supervisor.get_model(model_uid)\n    except ValueError as ve:\n        logger.error(str(ve), exc_info=True)\n        if report_error_event:\n            await report_error_event(model_uid, str(ve))\n        raise HTTPException(status_code=400, detail=str(ve))\n    except Exception as e:\n        logger.error(e, exc_info=True)\n        if report_error_event:\n            await report_error_event(model_uid, str(e))\n        raise HTTPException(status_code=500, detail=str(e))\n"
  },
  {
    "path": "xinference/client/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom .restful.async_restful_client import AsyncClient\nfrom .restful.restful_client import Client\n\n# For compatibility\nRESTfulClient = Client\nAsyncRESTfulClient = AsyncClient\n"
  },
  {
    "path": "xinference/client/common.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nfrom typing import Any, AsyncIterator, Iterator, Union\n\n\ndef convert_float_to_int_or_str(model_size: float) -> Union[int, str]:\n    \"\"\"convert float to int or string\n\n    if float can be presented as int, convert it to int, otherwise convert it to string\n    \"\"\"\n    if int(model_size) == model_size:\n        return int(model_size)\n    else:\n        return str(model_size)\n\n\ndef streaming_response_iterator(\n    response_lines: Iterator[bytes],\n) -> Iterator[Any]:\n    \"\"\"\n    Create an Iterator to handle the streaming type of generation.\n\n    Note\n    ----------\n    This method is for compatible with openai. Please refer to:\n    https://github.com/openai/openai-python/blob/v0.28.1/openai/api_requestor.py#L99\n\n    Parameters\n    ----------\n    response_lines: Iterator[bytes]\n        Generated lines by the Model Generator.\n\n    Returns\n    -------\n    Iterator[\"CompletionChunk\"]\n        Iterator of CompletionChunks generated by models.\n\n    \"\"\"\n\n    for line in response_lines:\n        line = line.strip()\n        if line.startswith(b\"data:\"):\n            json_str = line[len(b\"data:\") :].strip()\n            if json_str == b\"[DONE]\":\n                continue\n            data = json.loads(json_str.decode(\"utf-8\"))\n            error = data.get(\"error\", None)\n            if error is not None:\n                raise Exception(str(error))\n            yield data\n\n\nasync def async_streaming_response_iterator(\n    response_lines: AsyncIterator[bytes],\n) -> AsyncIterator[Any]:\n    \"\"\"\n    Create an AsyncIterator to handle the streaming type of generation.\n\n    Note\n    ----------\n    This method is for compatible with openai. Please refer to:\n    https://github.com/openai/openai-python/blob/v0.28.1/openai/api_requestor.py#L99\n\n    Parameters\n    ----------\n    response_lines: AsyncIterator[bytes]\n        Generated lines by the Model Generator.\n\n    Returns\n    -------\n    AsyncIterator[\"CompletionChunk\"]\n        AsyncIterator of CompletionChunks generated by models.\n\n    \"\"\"\n\n    async for line in response_lines:\n        line = line.strip()\n        if line.startswith(b\"data:\"):\n            json_str = line[len(b\"data:\") :].strip()\n            if json_str == b\"[DONE]\":\n                continue\n            data = json.loads(json_str.decode(\"utf-8\"))\n            error = data.get(\"error\", None)\n            if error is not None:\n                raise Exception(str(error))\n            yield data\n"
  },
  {
    "path": "xinference/client/handlers.py",
    "content": "from .restful.async_restful_client import (  # noqa: F401\n    AsyncRESTfulAudioModelHandle as AsyncAudioModelHandle,\n)\nfrom .restful.async_restful_client import (  # noqa: F401\n    AsyncRESTfulChatModelHandle as AsyncChatModelHandle,\n)\nfrom .restful.async_restful_client import (  # noqa: F401\n    AsyncRESTfulEmbeddingModelHandle as AsyncEmbeddingModelHandle,\n)\nfrom .restful.async_restful_client import (  # noqa: F401\n    AsyncRESTfulGenerateModelHandle as AsyncGenerateModelHandle,\n)\nfrom .restful.async_restful_client import (  # noqa: F401\n    AsyncRESTfulImageModelHandle as AsyncImageModelHandle,\n)\nfrom .restful.async_restful_client import (  # noqa: F401\n    AsyncRESTfulVideoModelHandle as AsyncVideoModelHandle,\n)\nfrom .restful.restful_client import (  # noqa: F401\n    RESTfulAudioModelHandle as AudioModelHandle,\n)\nfrom .restful.restful_client import (  # noqa: F401\n    RESTfulChatModelHandle as ChatModelHandle,\n)\nfrom .restful.restful_client import (  # noqa: F401\n    RESTfulEmbeddingModelHandle as EmbeddingModelHandle,\n)\nfrom .restful.restful_client import (  # noqa: F401\n    RESTfulGenerateModelHandle as GenerateModelHandle,\n)\nfrom .restful.restful_client import (  # noqa: F401\n    RESTfulImageModelHandle as ImageModelHandle,\n)\nfrom .restful.restful_client import (  # noqa: F401\n    RESTfulVideoModelHandle as VideoModelHandle,\n)\n"
  },
  {
    "path": "xinference/client/restful/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/client/restful/async_restful_client.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport asyncio\nimport json\nfrom typing import TYPE_CHECKING, Any, AsyncIterator, Dict, List, Optional, Union\n\nimport aiohttp\n\nfrom ..common import async_streaming_response_iterator, convert_float_to_int_or_str\n\nif TYPE_CHECKING:\n    from ...types import (\n        ChatCompletion,\n        ChatCompletionChunk,\n        Completion,\n        CompletionChunk,\n        Embedding,\n        ImageList,\n        PytorchGenerateConfig,\n        VideoList,\n    )\n\n\ndef _filter_params(params: Dict[Any, Any]) -> Dict[Any, Any]:\n    filtered = {}\n    for key, value in params.items():\n        if value is not None:\n            filtered[key] = value\n    return filtered\n\n\nasync def _get_error_string(response: aiohttp.ClientResponse) -> str:\n    result = None\n    try:\n        if response.content:\n            json_data = await response.json()\n            result = json_data[\"detail\"]\n    except Exception:\n        pass\n    try:\n        response.raise_for_status()\n    except aiohttp.ClientError as e:\n        result = str(e)\n    if result is None:\n        result = \"Unknown error\"\n    await _release_response(response)\n    return result\n\n\nasync def _release_response(response: aiohttp.ClientResponse):\n    \"\"\"Release the aiohttp response.\"\"\"\n    response.release()\n    await response.wait_for_close()\n\n\nclass AsyncRESTfulModelHandle:\n    \"\"\"\n    A sync model interface (for RESTful client) which provides type hints that makes it much easier to use xinference\n    programmatically.\n    \"\"\"\n\n    def __init__(self, model_uid: str, base_url: str, auth_headers: Dict):\n        self._model_uid = model_uid\n        self._base_url = base_url\n        self.auth_headers = auth_headers\n        self.timeout = aiohttp.ClientTimeout(total=1800)\n        self.session = aiohttp.ClientSession(\n            connector=aiohttp.TCPConnector(force_close=True)\n        )\n\n    async def close(self):\n        \"\"\"Close the AsyncRESTfulModelHandle session.\"\"\"\n        if self.session:\n            await self.session.close()\n            self.session = None\n\n    def __del__(self):\n        if self.session:\n            loop = asyncio.get_event_loop()\n            loop.create_task(self.close())\n\n\nclass AsyncRESTfulEmbeddingModelHandle(AsyncRESTfulModelHandle):\n    async def create_embedding(\n        self, input: Union[str, List[str]], **kwargs\n    ) -> \"Embedding\":\n        \"\"\"\n        Create an Embedding from user input via RESTful APIs.\n\n        Parameters\n        ----------\n        input: Union[str, List[str]]\n            Input text to embed, encoded as a string or array of tokens.\n            To embed multiple inputs in a single request, pass an array of strings or array of token arrays.\n\n        Returns\n        -------\n        Embedding\n           The resulted Embedding vector that can be easily consumed by machine learning models and algorithms.\n\n        Raises\n        ------\n        RuntimeError\n            Report the failure of embeddings and provide the error message.\n\n        \"\"\"\n        url = f\"{self._base_url}/v1/embeddings\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"input\": input,\n        }\n        request_body.update(kwargs)\n        response = await self.session.post(\n            url, json=request_body, headers=self.auth_headers\n        )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to create the embeddings, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def convert_ids_to_tokens(\n        self, input: Union[List, List[List]], **kwargs\n    ) -> List[str]:\n        \"\"\"\n        Convert token IDs to human readable tokens via RESTful APIs.\n\n        Parameters\n        ----------\n        input: Union[List, List[List]]\n            Input token IDs to convert, can be a single list of token IDs or a list of token ID lists.\n            To convert multiple sequences in a single request, pass a list of token ID lists.\n\n        Returns\n        -------\n        list\n            A list of decoded tokens in human readable format.\n\n        Raises\n        ------\n        RuntimeError\n            Report the failure of token conversion and provide the error message.\n\n        \"\"\"\n        url = f\"{self._base_url}/v1/convert_ids_to_tokens\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"input\": input,\n        }\n        request_body.update(kwargs)\n        response = await self.session.post(\n            url, json=request_body, headers=self.auth_headers\n        )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to decode token ids, detail: {await _get_error_string(response)}\"\n            )\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n\nclass AsyncRESTfulRerankModelHandle(AsyncRESTfulModelHandle):\n    async def rerank(\n        self,\n        documents: List[str],\n        query: str,\n        top_n: Optional[int] = None,\n        max_chunks_per_doc: Optional[int] = None,\n        return_documents: Optional[bool] = None,\n        return_len: Optional[bool] = None,\n        **kwargs,\n    ):\n        \"\"\"\n        Returns an ordered list of documents ordered by their relevance to the provided query.\n\n        Parameters\n        ----------\n        query: str\n            The search query\n        documents: List[str]\n            The documents to rerank\n        top_n: int\n            The number of results to return, defaults to returning all results\n        max_chunks_per_doc: int\n            The maximum number of chunks derived from a document\n        return_documents: bool\n            if return documents\n        return_len: bool\n            if return tokens len\n        Returns\n        -------\n        Scores\n           The scores of documents ordered by their relevance to the provided query\n\n        Raises\n        ------\n        RuntimeError\n            Report the failure of rerank and provide the error message.\n        \"\"\"\n        url = f\"{self._base_url}/v1/rerank\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"documents\": documents,\n            \"query\": query,\n            \"top_n\": top_n,\n            \"max_chunks_per_doc\": max_chunks_per_doc,\n            \"return_documents\": return_documents,\n            \"return_len\": return_len,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        request_body.update(kwargs)\n        response = await self.session.post(\n            url, json=request_body, headers=self.auth_headers\n        )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to rerank documents, detail: {await _get_error_string(response)}\"\n            )\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n\nclass AsyncRESTfulImageModelHandle(AsyncRESTfulModelHandle):\n    async def text_to_image(\n        self,\n        prompt: str,\n        n: int = 1,\n        size: str = \"1024*1024\",\n        response_format: str = \"url\",\n        **kwargs,\n    ) -> \"ImageList\":\n        \"\"\"\n        Creates an image by the input text.\n\n        Parameters\n        ----------\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.\n        n: `int`, defaults to 1\n            The number of images to generate per prompt. Must be between 1 and 10.\n        size: `str`, defaults to `1024*1024`\n            The width*height in pixels of the generated image. Must be one of 256x256, 512x512, or 1024x1024.\n        response_format: `str`, defaults to `url`\n            The format in which the generated images are returned. Must be one of url or b64_json.\n        Returns\n        -------\n        ImageList\n            A list of image objects.\n        \"\"\"\n        url = f\"{self._base_url}/v1/images/generations\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"n\": n,\n            \"size\": size,\n            \"response_format\": response_format,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        response = await self.session.post(\n            url, json=request_body, headers=self.auth_headers\n        )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to create the images, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def image_to_image(\n        self,\n        image: Union[str, bytes, List[Union[str, bytes]]],\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        size: Optional[str] = None,\n        response_format: str = \"url\",\n        **kwargs,\n    ) -> \"ImageList\":\n        \"\"\"\n        Creates an image by the input text.\n\n        Parameters\n        ----------\n        image: `Union[str, bytes, List[Union[str, bytes]]]`\n            The ControlNet input condition to provide guidance to the `unet` for generation. If the type is\n            specified as `torch.FloatTensor`, it is passed to ControlNet as is. `PIL.Image.Image` can also be\n            accepted as an image. The dimensions of the output image defaults to `image`'s dimensions. If height\n            and/or width are passed, `image` is resized accordingly. If multiple ControlNets are specified in\n            `init`, images must be passed as a list such that each element of the list can be correctly batched for\n            input to a single ControlNet.\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.\n        negative_prompt (`str` or `List[str]`, *optional*):\n            The prompt or prompts not to guide the image generation. If not defined, one has to pass\n            `negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is\n            less than `1`).\n        n: `int`, defaults to 1\n            The number of images to generate per prompt. Must be between 1 and 10.\n        size: `str`, defaults to `1024*1024`\n            The width*height in pixels of the generated image. Must be one of 256x256, 512x512, or 1024x1024.\n        response_format: `str`, defaults to `url`\n            The format in which the generated images are returned. Must be one of url or b64_json.\n        Returns\n        -------\n        ImageList\n            A list of image objects.\n            :param prompt:\n            :param image:\n        \"\"\"\n        url = f\"{self._base_url}/v1/images/variations\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"negative_prompt\": negative_prompt,\n            \"n\": n,\n            \"size\": size,\n            \"response_format\": response_format,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        params = _filter_params(params)\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n\n        # Handle both single image and list of images\n        if isinstance(image, list):\n            if len(image) == 0:\n                raise ValueError(\"Image list cannot be empty\")\n            elif len(image) == 1:\n                # Single image in list, use it directly\n                files.append((\"image\", (\"image\", image[0], \"application/octet-stream\")))\n            else:\n                # Multiple images - send all images with same field name\n                # FastAPI will collect them into a list\n                for img_data in image:\n                    files.append(\n                        (\"image\", (\"image\", img_data, \"application/octet-stream\"))\n                    )\n        else:\n            # Single image\n            files.append((\"image\", (\"image\", image, \"application/octet-stream\")))\n        response = await self.session.post(url, data=files, headers=self.auth_headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to variants the images, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def image_edit(\n        self,\n        images: Union[Union[str, bytes], List[Union[str, bytes]]],\n        prompt: str,\n        mask: Optional[Union[str, bytes]] = None,\n        n: int = 1,\n        size: Optional[str] = None,\n        response_format: str = \"url\",\n        **kwargs,\n    ) -> \"ImageList\":\n        \"\"\"\n        Edit image(s) by the input text and optional mask.\n\n        Parameters\n        ----------\n        images: `Union[Union[str, bytes], List[Union[str, bytes]]]`\n            The input image(s) to edit. Can be:\n            - Single image: file path, URL, or binary image data\n            - Multiple images: list of file paths, URLs, or binary image data\n            When multiple images are provided, the first image is used as the primary image\n            and subsequent images are used as reference images for better editing results.\n        prompt: `str`\n            The prompt or prompts to guide image editing. If not defined, you need to pass `prompt_embeds`.\n        mask: `Optional[Union[str, bytes]]`, optional\n            An optional mask image. White pixels in the mask are repainted while black pixels are preserved.\n            If provided, this will trigger inpainting mode. If not provided, this will trigger image-to-image mode.\n        n: `int`, defaults to 1\n            The number of images to generate per prompt. Must be between 1 and 10.\n        size: `Optional[str]`, optional\n            The width*height in pixels of the generated image. If not specified, uses the original image size.\n        response_format: `str`, defaults to `url`\n            The format in which the generated images are returned. Must be one of url or b64_json.\n        **kwargs\n            Additional parameters to pass to the model.\n\n        Returns\n        -------\n        ImageList\n            A list of edited image objects.\n\n        Raises\n        ------\n        RuntimeError\n            If the image editing request fails.\n\n        Examples\n        --------\n        # Single image editing\n        result = await model.image_edit(\n            images=\"path/to/image.png\",\n            prompt=\"make this image look like a painting\"\n        )\n\n        # Multiple image editing with reference images\n        result = await model.image_edit(\n            images=[\"primary_image.png\", \"reference1.jpg\", \"reference2.png\"],\n            prompt=\"edit the main image using the style from reference images\"\n        )\n        \"\"\"\n        url = f\"{self._base_url}/v1/images/edits\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"n\": n,\n            \"size\": size,\n            \"response_format\": response_format,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        params = _filter_params(params)\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n\n        # Handle single image or multiple images\n        import aiohttp\n\n        data = aiohttp.FormData()\n\n        # Add all parameters as form fields\n        for key, value in params.items():\n            if value is not None:\n                data.add_field(key, str(value))\n\n        # Handle single image or multiple images\n        if isinstance(images, list):\n            # Validate image list is not empty\n            if len(images) == 0:\n                raise ValueError(\"Image list cannot be empty\")\n            # Multiple images - send as images[] array\n            for i, img in enumerate(images):\n                if isinstance(img, str):\n                    # File path - read file content\n                    with open(img, \"rb\") as f:\n                        content = f.read()\n                    data.add_field(\n                        f\"images[]\",\n                        content,\n                        filename=f\"image_{i}.png\",\n                        content_type=\"image/png\",\n                    )\n                else:\n                    # Binary data\n                    data.add_field(\n                        f\"images[]\",\n                        img,\n                        filename=f\"image_{i}.png\",\n                        content_type=\"image/png\",\n                    )\n        else:\n            # Single image\n            if isinstance(images, str):\n                # File path - read file content\n                with open(images, \"rb\") as f:\n                    content = f.read()\n                data.add_field(\n                    \"images\", content, filename=\"image.png\", content_type=\"image/png\"\n                )\n            else:\n                # Binary data\n                data.add_field(\n                    \"images\", images, filename=\"image.png\", content_type=\"image/png\"\n                )\n\n        if mask is not None:\n            if isinstance(mask, str):\n                # File path - read file content\n                with open(mask, \"rb\") as f:\n                    content = f.read()\n                data.add_field(\n                    \"mask\", content, filename=\"mask.png\", content_type=\"image/png\"\n                )\n            else:\n                # Binary data\n                data.add_field(\n                    \"mask\", mask, filename=\"mask.png\", content_type=\"image/png\"\n                )\n\n        try:\n            response = await self.session.post(\n                url, data=data, headers=self.auth_headers\n            )\n            if response.status != 200:\n                raise RuntimeError(\n                    f\"Failed to edit the images, detail: {await _get_error_string(response)}\"\n                )\n\n            response_data = await response.json()\n            return response_data\n        finally:\n            await _release_response(response) if \"response\" in locals() else None\n\n    async def inpainting(\n        self,\n        image: Union[str, bytes],\n        mask_image: Union[str, bytes],\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        size: Optional[str] = None,\n        response_format: str = \"url\",\n        **kwargs,\n    ) -> \"ImageList\":\n        \"\"\"\n        Inpaint an image by the input text.\n\n        Parameters\n        ----------\n        image: `Union[str, bytes]`\n            an image batch to be inpainted (which parts of the image to\n            be masked out with `mask_image` and repainted according to `prompt`). For both numpy array and pytorch\n            tensor, the expected value range is between `[0, 1]`. If it's a tensor or a list or tensors, the\n            expected shape should be `(B, C, H, W)` or `(C, H, W)`. If it is a numpy array or a list of arrays, the\n            expected shape should be `(B, H, W, C)` or `(H, W, C)`. It can also accept image latents as `image`, but\n            if passing latents directly it is not encoded again.\n        mask_image: `Union[str, bytes]`\n            representing an image batch to mask `image`. White pixels in the mask\n            are repainted while black pixels are preserved. If `mask_image` is a PIL image, it is converted to a\n            single channel (luminance) before use. If it's a numpy array or pytorch tensor, it should contain one\n            color channel (L) instead of 3, so the expected shape for pytorch tensor would be `(B, 1, H, W)`, `(B,\n            H, W)`, `(1, H, W)`, `(H, W)`. And for numpy array would be for `(B, H, W, 1)`, `(B, H, W)`, `(H, W,\n            1)`, or `(H, W)`.\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.\n        negative_prompt (`str` or `List[str]`, *optional*):\n            The prompt or prompts not to guide the image generation. If not defined, one has to pass\n            `negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is\n            less than `1`).\n        n: `int`, defaults to 1\n            The number of images to generate per prompt. Must be between 1 and 10.\n        size: `str`, defaults to None\n            The width*height in pixels of the generated image.\n        response_format: `str`, defaults to `url`\n            The format in which the generated images are returned. Must be one of url or b64_json.\n        Returns\n        -------\n        ImageList\n            A list of image objects.\n            :param prompt:\n            :param image:\n        \"\"\"\n        url = f\"{self._base_url}/v1/images/inpainting\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"negative_prompt\": negative_prompt,\n            \"n\": n,\n            \"size\": size,\n            \"response_format\": response_format,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        params = _filter_params(params)\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n        files.append((\"image\", (\"image\", image, \"application/octet-stream\")))\n        files.append(\n            (\n                \"mask_image\",\n                (\"mask_image\", mask_image, \"application/octet-stream\"),\n            )\n        )\n        response = await self.session.post(url, data=files, headers=self.auth_headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to inpaint the images, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def ocr(self, image: Union[str, bytes], **kwargs):\n        url = f\"{self._base_url}/v1/images/ocr\"\n        params = {\n            \"model\": self._model_uid,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        params = _filter_params(params)\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n        files.append((\"image\", (\"image\", image, \"application/octet-stream\")))\n        response = await self.session.post(url, data=files, headers=self.auth_headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to ocr the images, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n\nclass AsyncRESTfulVideoModelHandle(AsyncRESTfulModelHandle):\n    async def text_to_video(\n        self,\n        prompt: str,\n        n: int = 1,\n        **kwargs,\n    ) -> \"VideoList\":\n        \"\"\"\n        Creates a video by the input text.\n\n        Parameters\n        ----------\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.\n        n: `int`, defaults to 1\n            The number of videos to generate per prompt. Must be between 1 and 10.\n        Returns\n        -------\n        VideoList\n            A list of video objects.\n        \"\"\"\n        url = f\"{self._base_url}/v1/video/generations\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"n\": n,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        response = await self.session.post(\n            url, json=request_body, headers=self.auth_headers\n        )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to create the video, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def image_to_video(\n        self,\n        image: Union[str, bytes],\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        **kwargs,\n    ) -> \"VideoList\":\n        \"\"\"\n        Creates a video by the input image and text.\n\n        Parameters\n        ----------\n        image: `Union[str, bytes]`\n            The input image to condition the generation on.\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.\n        negative_prompt (`str` or `List[str]`, *optional*):\n            The prompt or prompts not to guide the image generation.\n        n: `int`, defaults to 1\n            The number of videos to generate per prompt. Must be between 1 and 10.\n        Returns\n        -------\n        VideoList\n            A list of video objects.\n        \"\"\"\n        url = f\"{self._base_url}/v1/video/generations/image\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"negative_prompt\": negative_prompt,\n            \"n\": n,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        params = _filter_params(params)\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n        files.append((\"image\", (\"image\", image, \"application/octet-stream\")))\n        response = await self.session.post(url, data=files, headers=self.auth_headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to create the video from image, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def flf_to_video(\n        self,\n        first_frame: Union[str, bytes],\n        last_frame: Union[str, bytes],\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        **kwargs,\n    ) -> \"VideoList\":\n        \"\"\"\n        Creates a video by the first frame, last frame and text.\n\n        Parameters\n        ----------\n        first_frame: `Union[str, bytes]`\n            The first frame to condition the generation on.\n        last_frame: `Union[str, bytes]`\n            The last frame to condition the generation on.\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.\n        negative_prompt (`str` or `List[str]`, *optional*):\n            The prompt or prompts not to guide the image generation.\n        n: `int`, defaults to 1\n            The number of videos to generate per prompt. Must be between 1 and 10.\n        Returns\n        -------\n        VideoList\n            A list of video objects.\n        \"\"\"\n        url = f\"{self._base_url}/v1/video/generations/flf\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"negative_prompt\": negative_prompt,\n            \"n\": n,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        params = _filter_params(params)\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n        files.append(\n            (\"first_frame\", (\"image\", first_frame, \"application/octet-stream\"))\n        )\n        files.append((\"last_frame\", (\"image\", last_frame, \"application/octet-stream\")))\n        # Convert files list to FormData for proper multipart encoding\n        data = aiohttp.FormData()\n        for item in files:\n            if len(item) == 3 and isinstance(item[1], tuple):\n                # Format: (field_name, (filename, content, content_type))\n                field_name, (filename, content, content_type) = item\n                data.add_field(\n                    field_name, content, filename=filename, content_type=content_type\n                )\n            else:\n                # Format: (field_name, content)\n                data.add_field(item[0], item[1])\n        response = await self.session.post(url, data=data, headers=self.auth_headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to create the video from image, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n\nclass AsyncRESTfulGenerateModelHandle(AsyncRESTfulModelHandle):\n    async def generate(\n        self,\n        prompt: str,\n        generate_config: Optional[\"PytorchGenerateConfig\"] = None,\n    ) -> Union[\"Completion\", AsyncIterator[\"CompletionChunk\"]]:\n        \"\"\"\n        Creates a completion for the provided prompt and parameters via RESTful APIs.\n\n        Parameters\n        ----------\n        prompt: str\n            The user's message or user's input.\n        generate_config: Optional[\"PytorchGenerateConfig\"]\n            Additional configuration for the chat generation.\n            \"PytorchGenerateConfig\" -> Configuration for pytorch model\n\n        Returns\n        -------\n        Union[\"Completion\", AsyncIterator[\"CompletionChunk\"]]\n            Stream is a parameter in generate_config.\n            When stream is set to True, the function will return AsyncIterator[\"CompletionChunk\"].\n            When stream is set to False, the function will return \"Completion\".\n\n        Raises\n        ------\n        RuntimeError\n            Fail to generate the completion from the server. Detailed information provided in error message.\n\n        \"\"\"\n\n        url = f\"{self._base_url}/v1/completions\"\n\n        request_body: Dict[str, Any] = {\"model\": self._model_uid, \"prompt\": prompt}\n        if generate_config is not None:\n            for key, value in generate_config.items():\n                request_body[key] = value\n\n        stream = bool(generate_config and generate_config.get(\"stream\"))\n\n        response = await self.session.post(\n            url, json=request_body, headers=self.auth_headers\n        )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to generate completion, detail: {await _get_error_string(response)}\"\n            )\n\n        if stream:\n            return async_streaming_response_iterator(response.content)\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n\nclass AsyncRESTfulChatModelHandle(AsyncRESTfulGenerateModelHandle):\n    async def chat(\n        self,\n        messages: List[Dict],\n        tools: Optional[List[Dict]] = None,\n        enable_thinking: Optional[bool] = None,\n        generate_config: Optional[\"PytorchGenerateConfig\"] = None,\n    ) -> Union[\"ChatCompletion\", AsyncIterator[\"ChatCompletionChunk\"]]:\n        \"\"\"\n        Given a list of messages comprising a conversation, the model will return a response via RESTful APIs.\n\n        Parameters\n        ----------\n        messages: List[Dict]\n            A list of messages comprising the conversation so far.\n        tools: Optional[List[Dict]]\n            A tool list.\n        generate_config: Optional[\"PytorchGenerateConfig\"]\n            Additional configuration for the chat generation.\n            \"PytorchGenerateConfig\" -> configuration for pytorch model\n        enable_thinking: Optional[bool]\n            Toggle thinking mode per request for hybrid reasoning LLMs.\n\n        Returns\n        -------\n        Union[\"ChatCompletion\", AsyncIterator[\"ChatCompletionChunk\"]]\n            Stream is a parameter in generate_config.\n            When stream is set to True, the function will return AsyncIterator[\"ChatCompletionChunk\"].\n            When stream is set to False, the function will return \"ChatCompletion\".\n\n        Raises\n        ------\n        RuntimeError\n            Report the failure to generate the chat from the server. Detailed information provided in error message.\n\n        \"\"\"\n        url = f\"{self._base_url}/v1/chat/completions\"\n\n        request_body: Dict[str, Any] = {\n            \"model\": self._model_uid,\n            \"messages\": messages,\n        }\n        if tools is not None:\n            request_body[\"tools\"] = tools\n        if generate_config is not None or enable_thinking is not None:\n            merged_config: Dict[str, Any] = (\n                dict(generate_config) if generate_config is not None else {}\n            )\n            if enable_thinking is not None:\n                chat_template_kwargs = merged_config.get(\"chat_template_kwargs\") or {}\n                if isinstance(chat_template_kwargs, str):\n                    try:\n                        chat_template_kwargs = json.loads(chat_template_kwargs)\n                    except json.JSONDecodeError:\n                        chat_template_kwargs = {}\n                if not isinstance(chat_template_kwargs, dict):\n                    chat_template_kwargs = {}\n                chat_template_kwargs = dict(chat_template_kwargs)\n                chat_template_kwargs[\"enable_thinking\"] = enable_thinking\n                chat_template_kwargs[\"thinking\"] = enable_thinking\n                merged_config[\"chat_template_kwargs\"] = chat_template_kwargs\n            for key, value in merged_config.items():\n                request_body[key] = value\n\n        stream = bool(generate_config and generate_config.get(\"stream\"))\n        response = await self.session.post(\n            url, json=request_body, headers=self.auth_headers\n        )\n\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to generate chat completion, detail: {await _get_error_string(response)}\"\n            )\n\n        if stream:\n            return async_streaming_response_iterator(response.content)\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n\nclass AsyncRESTfulAudioModelHandle(AsyncRESTfulModelHandle):\n    async def transcriptions(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: Optional[str] = \"json\",\n        temperature: Optional[float] = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n        **kwargs,\n    ):\n        \"\"\"\n        Transcribes audio into the input language.\n\n        Parameters\n        ----------\n\n        audio: bytes\n            The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg,\n            mpga, m4a, ogg, wav, or webm.\n        language: Optional[str]\n            The language of the input audio. Supplying the input language in ISO-639-1\n            (https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) format will improve accuracy and latency.\n        prompt: Optional[str]\n            An optional text to guide the model's style or continue a previous audio segment.\n            The prompt should match the audio language.\n        response_format: Optional[str], defaults to json\n            The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.\n        temperature: Optional[float], defaults to 0\n            The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random,\n            while lower values like 0.2 will make it more focused and deterministic.\n            If set to 0, the model will use log probability to automatically increase the temperature\n            until certain thresholds are hit.\n        timestamp_granularities: Optional[List[str]], default is None.\n            The timestamp granularities to populate for this transcription. response_format must be set verbose_json\n            to use timestamp granularities. Either or both of these options are supported: word, or segment.\n            Note: There is no additional latency for segment timestamps, but generating word timestamps incurs\n            additional latency.\n\n        Returns\n        -------\n            The transcribed text.\n        \"\"\"\n        url = f\"{self._base_url}/v1/audio/transcriptions\"\n        params = {\n            \"model\": self._model_uid,\n            \"language\": language,\n            \"prompt\": prompt,\n            \"response_format\": response_format,\n            \"temperature\": temperature,\n            \"timestamp_granularities[]\": timestamp_granularities,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        params = _filter_params(params)\n        data = aiohttp.FormData()\n        for key, value in params.items():\n            data.add_field(key, str(value) if value is not None else \"\")\n        data.add_field(\n            \"file\", audio, filename=\"file\", content_type=\"application/octet-stream\"\n        )\n        response = await self.session.post(url, data=data, headers=self.auth_headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to transcribe the audio, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def translations(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: Optional[str] = \"json\",\n        temperature: Optional[float] = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n    ):\n        \"\"\"\n        Translates audio into English.\n\n        Parameters\n        ----------\n\n        audio: bytes\n            The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg,\n            mpga, m4a, ogg, wav, or webm.\n        language: Optional[str]\n            The language of the input audio. Supplying the input language in ISO-639-1\n            (https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) format will improve accuracy and latency.\n        prompt: Optional[str]\n            An optional text to guide the model's style or continue a previous audio segment.\n            The prompt should match the audio language.\n        response_format: Optional[str], defaults to json\n            The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.\n        temperature: Optional[float], defaults to 0\n            The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random,\n            while lower values like 0.2 will make it more focused and deterministic.\n            If set to 0, the model will use log probability to automatically increase the temperature\n            until certain thresholds are hit.\n        timestamp_granularities: Optional[List[str]], default is None.\n            The timestamp granularities to populate for this transcription. response_format must be set verbose_json\n            to use timestamp granularities. Either or both of these options are supported: word, or segment.\n            Note: There is no additional latency for segment timestamps, but generating word timestamps incurs\n            additional latency.\n\n        Returns\n        -------\n            The translated text.\n        \"\"\"\n        url = f\"{self._base_url}/v1/audio/translations\"\n        params = {\n            \"model\": self._model_uid,\n            \"language\": language,\n            \"prompt\": prompt,\n            \"response_format\": response_format,\n            \"temperature\": temperature,\n            \"timestamp_granularities[]\": timestamp_granularities,\n        }\n        params = _filter_params(params)\n        data = aiohttp.FormData()\n        for key, value in params.items():\n            data.add_field(key, str(value) if value is not None else \"\")\n        data.add_field(\n            \"file\", audio, filename=\"file\", content_type=\"application/octet-stream\"\n        )\n        response = await self.session.post(url, data=data, headers=self.auth_headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to translate the audio, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def speech(\n        self,\n        input: str,\n        voice: str = \"\",\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        prompt_speech: Optional[bytes] = None,\n        prompt_latent: Optional[bytes] = None,\n        **kwargs,\n    ):\n        \"\"\"\n        Generates audio from the input text.\n\n        Parameters\n        ----------\n\n        input: str\n            The text to generate audio for. The maximum length is 4096 characters.\n        voice: str\n            The voice to use when generating the audio.\n        response_format: str\n            The format to audio in.\n        speed: str\n            The speed of the generated audio.\n        stream: bool\n            Use stream or not.\n        prompt_speech: bytes\n            The audio bytes to be provided to the model.\n        prompt_latent: bytes\n            The latent bytes to be provided to the model.\n\n        Returns\n        -------\n        bytes\n            The generated audio binary.\n        \"\"\"\n        url = f\"{self._base_url}/v1/audio/speech\"\n        params = {\n            \"model\": self._model_uid,\n            \"input\": input,\n            \"voice\": voice,\n            \"response_format\": response_format,\n            \"speed\": speed,\n            \"stream\": stream,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        params = _filter_params(params)\n        data = aiohttp.FormData()\n        for key, value in params.items():\n            data.add_field(key, str(value) if value is not None else \"\")\n        if prompt_speech:\n            data.add_field(\n                \"prompt_speech\",\n                prompt_speech,\n                filename=\"prompt_speech\",\n                content_type=\"application/octet-stream\",\n            )\n        if prompt_latent:\n            data.add_field(\n                \"prompt_latent\",\n                prompt_latent,\n                filename=\"prompt_latent\",\n                content_type=\"application/octet-stream\",\n            )\n        if prompt_speech or prompt_latent:\n            response = await self.session.post(\n                url, data=data, headers=self.auth_headers\n            )\n        else:\n            response = await self.session.post(\n                url, json=params, headers=self.auth_headers\n            )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to speech the text, detail: {await _get_error_string(response)}\"\n            )\n\n        if stream:\n            await _release_response(response)\n            return response.content.iter_chunked(1024)\n\n        # Read content before releasing connection\n        content = await response.read()\n        await _release_response(response)\n        return content\n\n\nclass AsyncRESTfulFlexibleModelHandle(AsyncRESTfulModelHandle):\n    async def infer(\n        self,\n        **kwargs,\n    ):\n        \"\"\"\n        Call flexible model.\n\n        Parameters\n        ----------\n\n        kwargs: dict\n            The inference arguments.\n\n\n        Returns\n        -------\n        bytes\n            The inference result.\n        \"\"\"\n        url = f\"{self._base_url}/v1/flexible/infers\"\n        params: Dict = {  # type: ignore\n            \"model\": self._model_uid,\n        }\n        params.update(kwargs)\n\n        response = await self.session.post(url, json=params, headers=self.auth_headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to predict, detail: {await _get_error_string(response)}\"\n            )\n        await _release_response(response)\n        return response.content\n\n\nclass AsyncClient:\n    def __init__(self, base_url, api_key: Optional[str] = None):\n        self.base_url = base_url\n        self._headers: Dict[str, str] = {}\n        self._cluster_authed = False\n        self.timeout = aiohttp.ClientTimeout(total=1800)\n        self.session = aiohttp.ClientSession(\n            connector=aiohttp.TCPConnector(force_close=True), timeout=self.timeout\n        )\n        self._check_cluster_authenticated()\n        if api_key is not None and self._cluster_authed:\n            self._headers[\"Authorization\"] = f\"Bearer {api_key}\"\n\n    async def close(self):\n        \"\"\"Close the AsyncClient session.\"\"\"\n        if self.session:\n            await self.session.close()\n            self.session = None\n\n    def __del__(self):\n        if self.session:\n            loop = asyncio.get_event_loop()\n            loop.create_task(self.close())\n\n    def _set_token(self, token: Optional[str]):\n        if not self._cluster_authed or token is None:\n            return\n        self._headers[\"Authorization\"] = f\"Bearer {token}\"\n\n    def _get_token(self) -> Optional[str]:\n        return (\n            str(self._headers[\"Authorization\"]).replace(\"Bearer \", \"\")\n            if \"Authorization\" in self._headers\n            else None\n        )\n\n    def _check_cluster_authenticated(self):\n        import requests\n\n        session = requests.Session()\n        url = f\"{self.base_url}/v1/cluster/auth\"\n        response = session.get(url)\n        # compatible with old version of xinference\n        if response.status_code == 404:\n            self._cluster_authed = False\n        else:\n            if response.status_code != 200:\n                response_data = response.json()\n                raise RuntimeError(\n                    f\"Failed to get cluster information, detail: {response_data['detail']}\"\n                )\n            response_data = response.json()\n            self._cluster_authed = bool(response_data[\"auth\"])\n\n    async def vllm_models(self) -> Dict[str, Any]:\n        url = f\"{self.base_url}/v1/models/vllm-supported\"\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            response_data = await response.json()\n            await _release_response(response)\n            raise RuntimeError(\n                f\"Failed to get cluster information, detail: {response_data['detail']}\"\n            )\n\n        try:\n            response_data = await response.json()\n            await _release_response(response)\n            return response_data\n        except Exception as e:\n            raise RuntimeError(f\"Error parsing JSON response: {e}\")\n\n    async def login(self, username: str, password: str):\n        if not self._cluster_authed:\n            return\n        url = f\"{self.base_url}/token\"\n\n        payload = {\"username\": username, \"password\": password}\n\n        response = await self.session.post(url, json=payload)\n        if response.status != 200:\n            response_data = await response.json()\n            await _release_response(response)\n            raise RuntimeError(\n                f\"Failed to get cluster information, detail: {response_data['detail']}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        # Only bearer token for now\n        access_token = response_data[\"access_token\"]\n        self._headers[\"Authorization\"] = f\"Bearer {access_token}\"\n\n    async def list_models(self) -> Dict[str, Dict[str, Any]]:\n        \"\"\"\n        Retrieve the model specifications from the Server.\n\n        Returns\n        -------\n        Dict[str, Dict[str, Any]]\n            The collection of model specifications with their names on the server.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models\"\n\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to list model, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        model_list = response_data[\"data\"]\n        return {item[\"id\"]: item for item in model_list}\n\n    async def launch_model(\n        self,\n        model_name: str,\n        model_type: str = \"LLM\",\n        model_engine: Optional[str] = None,\n        model_uid: Optional[str] = None,\n        model_size_in_billions: Optional[Union[int, str, float]] = None,\n        model_format: Optional[str] = None,\n        quantization: Optional[str] = None,\n        replica: int = 1,\n        n_worker: int = 1,\n        n_gpu: Optional[Union[int, str]] = \"auto\",\n        peft_model_config: Optional[Dict] = None,\n        request_limits: Optional[int] = None,\n        worker_ip: Optional[str] = None,\n        gpu_idx: Optional[Union[int, List[int]]] = None,\n        model_path: Optional[str] = None,\n        enable_thinking: Optional[bool] = None,\n        **kwargs,\n    ) -> str:\n        \"\"\"\n        Launch the model based on the parameters on the server via RESTful APIs.\n\n        Parameters\n        ----------\n        model_name: str\n            The name of model.\n        model_type: str\n            type of model.\n        model_engine: Optional[str]\n            Specify the inference engine of the model when launching LLM.\n        model_uid: str\n            UID of model, auto generate a UUID if is None.\n        model_size_in_billions: Optional[Union[int, str, float]]\n            The size (in billions) of the model.\n        model_format: Optional[str]\n            The format of the model.\n        quantization: Optional[str]\n            The quantization of model.\n        replica: Optional[int]\n            The replica of model, default is 1.\n        n_worker: int\n            Number of workers to run.\n        n_gpu: Optional[Union[int, str]],\n            The number of GPUs used by the model, default is \"auto\". If n_worker>1, means number of GPUs per worker.\n            ``n_gpu=None`` means cpu only, ``n_gpu=auto`` lets the system automatically determine the best number of GPUs to use.\n        peft_model_config: Optional[Dict]\n            - \"lora_list\": A List of PEFT (Parameter-Efficient Fine-Tuning) model and path.\n            - \"image_lora_load_kwargs\": A Dict of lora load parameters for image model\n            - \"image_lora_fuse_kwargs\": A Dict of lora fuse parameters for image model\n        request_limits: Optional[int]\n            The number of request limits for this model, default is None.\n            ``request_limits=None`` means no limits for this model.\n        worker_ip: Optional[str]\n            Specify the worker ip where the model is located in a distributed scenario.\n        gpu_idx: Optional[Union[int, List[int]]]\n            Specify the GPU index where the model is located.\n        model_path: Optional[str]\n            Model path, if gguf format, should be the file path, otherwise, should be directory of the model.\n        enable_thinking: Optional[bool]\n            Enable or disable thinking mode for hybrid reasoning LLMs (e.g., Qwen3). None uses\n            the model default.\n        **kwargs:\n            Any other parameters been specified. e.g. multimodal_projector for multimodal inference with the llama.cpp backend.\n\n        Returns\n        -------\n        str\n            The unique model_uid for the launched model.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models\"\n\n        # convert float to int or string since the RESTful API does not accept float.\n        if isinstance(model_size_in_billions, float):\n            model_size_in_billions = convert_float_to_int_or_str(model_size_in_billions)\n\n        payload = {\n            \"model_uid\": model_uid,\n            \"model_name\": model_name,\n            \"model_engine\": model_engine,\n            \"peft_model_config\": peft_model_config,\n            \"model_type\": model_type,\n            \"model_size_in_billions\": model_size_in_billions,\n            \"model_format\": model_format,\n            \"quantization\": quantization,\n            \"replica\": replica,\n            \"n_worker\": n_worker,\n            \"n_gpu\": n_gpu,\n            \"request_limits\": request_limits,\n            \"worker_ip\": worker_ip,\n            \"gpu_idx\": gpu_idx,\n            \"model_path\": model_path,\n            \"enable_thinking\": enable_thinking,\n        }\n\n        wait_ready = kwargs.pop(\"wait_ready\", True)\n\n        for key, value in kwargs.items():\n            payload[str(key)] = value\n\n        if wait_ready:\n            response = await self.session.post(url, json=payload, headers=self._headers)\n        else:\n            response = await self.session.post(\n                url, json=payload, headers=self._headers, params={\"wait_ready\": False}\n            )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to launch model, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data[\"model_uid\"]\n\n    async def terminate_model(self, model_uid: str):\n        \"\"\"\n        Terminate the specific model running on the server.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model we want.\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models/{model_uid}\"\n\n        response = await self.session.delete(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to terminate model, detail: {await _get_error_string(response)}\"\n            )\n        await _release_response(response)\n\n    async def get_launch_model_progress(self, model_uid: str) -> dict:\n        \"\"\"\n        Get progress of the specific model.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model we want.\n\n        Returns\n        -------\n        result: dict\n            Result that contains progress.\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n        \"\"\"\n        url = f\"{self.base_url}/v1/models/{model_uid}/progress\"\n\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Fail to get model launching progress, detail: {await _get_error_string(response)}\"\n            )\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def cancel_launch_model(self, model_uid: str):\n        \"\"\"\n        Cancel launching model.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model we want.\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n        \"\"\"\n        url = f\"{self.base_url}/v1/models/{model_uid}/cancel\"\n\n        response = await self.session.post(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Fail to cancel launching model, detail: {await _get_error_string(response)}\"\n            )\n        await _release_response(response)\n\n    async def get_instance_info(self, model_name: str, model_uid: str):\n        url = f\"{self.base_url}/v1/models/instances\"\n        response = await self.session.get(\n            url,\n            headers=self._headers,\n            params={\"model_name\": model_name, \"model_uid\": model_uid},\n        )\n        if response.status != 200:\n            raise RuntimeError(\"Failed to get instance info\")\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def _get_supervisor_internal_address(self):\n        url = f\"{self.base_url}/v1/address\"\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\"Failed to get supervisor internal address\")\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def get_model(self, model_uid: str) -> AsyncRESTfulModelHandle:\n        \"\"\"\n        Launch the model based on the parameters on the server via RESTful APIs.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model.\n\n        Returns\n        -------\n        ModelHandle\n            The corresponding Model Handler based on the Model specified in the uid:\n              - :obj:`xinference.client.handlers.GenerateModelHandle` -> provide handle to basic generate Model. e.g. Baichuan.\n              - :obj:`xinference.client.handlers.ChatModelHandle` -> provide handle to chat Model. e.g. Baichuan-chat.\n\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models/{model_uid}\"\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to get the model description, detail: {await _get_error_string(response)}\"\n            )\n        desc = await response.json()\n        await _release_response(response)\n        if desc[\"model_type\"] == \"LLM\":\n            if \"chat\" in desc[\"model_ability\"]:\n                return AsyncRESTfulChatModelHandle(\n                    model_uid, self.base_url, auth_headers=self._headers\n                )\n            elif \"generate\" in desc[\"model_ability\"]:\n                return AsyncRESTfulGenerateModelHandle(\n                    model_uid, self.base_url, auth_headers=self._headers\n                )\n            else:\n                raise ValueError(f\"Unrecognized model ability: {desc['model_ability']}\")\n        elif desc[\"model_type\"] == \"embedding\":\n            return AsyncRESTfulEmbeddingModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"image\":\n            return AsyncRESTfulImageModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"rerank\":\n            return AsyncRESTfulRerankModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"audio\":\n            return AsyncRESTfulAudioModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"video\":\n            return AsyncRESTfulVideoModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"flexible\":\n            return AsyncRESTfulFlexibleModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        else:\n            raise ValueError(f\"Unknown model type:{desc['model_type']}\")\n\n    async def describe_model(self, model_uid: str):\n        \"\"\"\n        Get model information via RESTful APIs.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model.\n\n        Returns\n        -------\n        dict\n            A dictionary containing the following keys:\n\n            - \"model_type\": str\n               the type of the model determined by its function, e.g. \"LLM\" (Large Language Model)\n            - \"model_name\": str\n               the name of the specific LLM model family\n            - \"model_lang\": List[str]\n               the languages supported by the LLM model\n            - \"model_ability\": List[str]\n               the ability or capabilities of the LLM model\n            - \"model_description\": str\n               a detailed description of the LLM model\n            - \"model_format\": str\n               the format specification of the LLM model\n            - \"model_size_in_billions\": int\n               the size of the LLM model in billions\n            - \"quantization\": str\n               the quantization applied to the model\n            - \"revision\": str\n               the revision number of the LLM model specification\n            - \"context_length\": int\n               the maximum text length the LLM model can accommodate (include all input & output)\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models/{model_uid}\"\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to get the model description, detail: {await _get_error_string(response)}\"\n            )\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def register_model(\n        self,\n        model_type: str,\n        model: str,\n        persist: bool,\n        worker_ip: Optional[str] = None,\n    ):\n        \"\"\"\n        Register a custom model.\n\n        Parameters\n        ----------\n        model_type: str\n            The type of model.\n        model: str\n            The model definition. (refer to: https://inference.readthedocs.io/en/latest/models/custom.html)\n        worker_ip: Optional[str]\n            The IP address of the worker on which the model is running.\n        persist: bool\n\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to register the custom model. Provide details of failure through error message.\n        \"\"\"\n        url = f\"{self.base_url}/v1/model_registrations/{model_type}\"\n        request_body = {\"model\": model, \"worker_ip\": worker_ip, \"persist\": persist}\n        response = await self.session.post(\n            url, json=request_body, headers=self._headers\n        )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to register model, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def unregister_model(self, model_type: str, model_name: str):\n        \"\"\"\n        Unregister a custom model.\n\n        Parameters\n        ----------\n        model_type: str\n            The type of model.\n        model_name: str\n            The name of the model\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to unregister the custom model. Provide details of failure through error message.\n        \"\"\"\n        url = f\"{self.base_url}/v1/model_registrations/{model_type}/{model_name}\"\n        response = await self.session.delete(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to register model, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def list_model_registrations(self, model_type: str) -> List[Dict[str, Any]]:\n        \"\"\"\n        List models registered on the server.\n\n        Parameters\n        ----------\n        model_type: str\n            The type of the model.\n\n        Returns\n        -------\n        List[Dict[str, Any]]\n            The collection of registered models on the server.\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to list model registration. Provide details of failure through error message.\n\n        \"\"\"\n        url = f\"{self.base_url}/v1/model_registrations/{model_type}\"\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to list model registration, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def list_cached_models(\n        self, model_name: Optional[str] = None, worker_ip: Optional[str] = None\n    ) -> List[Dict[Any, Any]]:\n        \"\"\"\n        Get a list of cached models.\n        Parameters\n        ----------\n        model_name: Optional[str]\n            The name of model.\n        worker_ip: Optional[str]\n            Specify the worker ip where the model is located in a distributed scenario.\n\n        Returns\n        -------\n        List[Dict[Any, Any]]\n            The collection of cached models on the server.\n\n        Raises\n        ------\n        RuntimeError\n            Raised when the request fails, including the reason for the failure.\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/cache/models\"\n        params = {\n            \"model_name\": model_name,\n            \"worker_ip\": worker_ip,\n        }\n        params = _filter_params(params)\n        response = await self.session.get(url, headers=self._headers, params=params)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to list cached model, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data.get(\"list\")\n\n    async def list_deletable_models(\n        self, model_version: str, worker_ip: Optional[str] = None\n    ) -> Dict[str, Any]:\n        \"\"\"\n        Get the cached models with the model path cached on the server.\n        Parameters\n        ----------\n        model_version: str\n            The version of the model.\n        worker_ip: Optional[str]\n            Specify the worker ip where the model is located in a distributed scenario.\n        Returns\n        -------\n        Dict[str, Dict[str,str]]]\n            Dictionary with keys \"model_name\" and values model_file_location.\n        \"\"\"\n        url = f\"{self.base_url}/v1/cache/models/files\"\n        params = {\n            \"model_version\": model_version,\n            \"worker_ip\": worker_ip,\n        }\n        params = _filter_params(params)\n        response = await self.session.get(url, headers=self._headers, params=params)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to get paths by model name, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def confirm_and_remove_model(\n        self, model_version: str, worker_ip: Optional[str] = None\n    ) -> bool:\n        \"\"\"\n        Remove the cached models with the model name cached on the server.\n        Parameters\n        ----------\n        model_version: str\n            The version of the model.\n        worker_ip: Optional[str]\n            Specify the worker ip where the model is located in a distributed scenario.\n        Returns\n        -------\n        str\n            The response of the server.\n        \"\"\"\n        url = f\"{self.base_url}/v1/cache/models\"\n        params = {\n            \"model_version\": model_version,\n            \"worker_ip\": worker_ip,\n        }\n        params = _filter_params(params)\n        response = await self.session.delete(url, headers=self._headers, params=params)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to remove cached models, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data.get(\"result\", False)\n\n    async def get_model_registration(\n        self, model_type: str, model_name: str\n    ) -> Dict[str, Any]:\n        \"\"\"\n        Get the model with the model type and model name registered on the server.\n\n        Parameters\n        ----------\n        model_type: str\n            The type of the model.\n\n        model_name: str\n            The name of the model.\n        Returns\n        -------\n        List[Dict[str, Any]]\n            The collection of registered models on the server.\n        \"\"\"\n        url = f\"{self.base_url}/v1/model_registrations/{model_type}/{model_name}\"\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to list model registration, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def query_engine_by_model_name(\n        self,\n        model_name: str,\n        model_type: Optional[str] = \"LLM\",\n        enable_virtual_env: Optional[bool] = None,\n    ):\n        \"\"\"\n        Get the engine parameters with the model name registered on the server.\n\n        Parameters\n        ----------\n        model_name: str\n            The name of the model.\n        model_type: str\n            Model type, LLM by default.\n        Returns\n        -------\n        Dict[str, List[Dict[str, Any]]]\n            The supported engine parameters of registered models on the server.\n        \"\"\"\n        if not model_type:\n            url = f\"{self.base_url}/v1/engines/{model_name}\"\n        else:\n            url = f\"{self.base_url}/v1/engines/{model_type}/{model_name}\"\n        params = {}\n        if enable_virtual_env is not None:\n            params[\"enable_virtual_env\"] = str(enable_virtual_env).lower()\n        response = await self.session.get(url, headers=self._headers, params=params)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to query engine parameters by model name, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def abort_request(\n        self, model_uid: str, request_id: str, block_duration: int = 30\n    ):\n        \"\"\"\n        Abort a request.\n        Abort a submitted request. If the request is finished or not found, this method will be a no-op.\n        Currently, this interface is only supported when batching is enabled for models on transformers backend.\n\n        Parameters\n        ----------\n        model_uid: str\n            Model uid.\n        request_id: str\n            Request id.\n        block_duration: int\n            The duration to make the request id abort. If set to 0, the abort_request will be immediate, which may\n            prevent it from taking effect if it arrives before the request operation.\n        Returns\n        -------\n        Dict\n            Return empty dict.\n        \"\"\"\n        url = f\"{self.base_url}/v1/models/{model_uid}/requests/{request_id}/abort\"\n        response = await self.session.post(\n            url, headers=self._headers, json={\"block_duration\": block_duration}\n        )\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to abort request, detail: {await _get_error_string(response)}\"\n            )\n\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def get_workers_info(self):\n        url = f\"{self.base_url}/v1/workers\"\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to get workers info, detail: {await _get_error_string(response)}\"\n            )\n        response_data = await response.json()\n        await _release_response(response)\n        return response_data\n\n    async def get_supervisor_info(self):\n        url = f\"{self.base_url}/v1/supervisor\"\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to get supervisor info, detail: {await _get_error_string(response)}\"\n            )\n        response_json = await response.json()\n        await _release_response(response)\n        return response_json\n\n    async def get_progress(self, request_id: str):\n        url = f\"{self.base_url}/v1/requests/{request_id}/progress\"\n        response = await self.session.get(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to get progress, detail: {await _get_error_string(response)}\"\n            )\n        response_json = await response.json()\n        await _release_response(response)\n        return response_json\n\n    async def abort_cluster(self):\n        url = f\"{self.base_url}/v1/clusters\"\n        response = await self.session.delete(url, headers=self._headers)\n        if response.status != 200:\n            raise RuntimeError(\n                f\"Failed to abort cluster, detail: {await _get_error_string(response)}\"\n            )\n        response_json = await response.json()\n        await _release_response(response)\n        return response_json\n"
  },
  {
    "path": "xinference/client/restful/restful_client.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport json\nfrom typing import TYPE_CHECKING, Any, Dict, Iterator, List, Optional, Union\n\nimport requests\n\nfrom ..common import convert_float_to_int_or_str, streaming_response_iterator\n\nif TYPE_CHECKING:\n    from ...types import (\n        ChatCompletion,\n        ChatCompletionChunk,\n        Completion,\n        CompletionChunk,\n        Embedding,\n        ImageList,\n        PytorchGenerateConfig,\n        VideoList,\n    )\n\n\ndef _get_error_string(response: requests.Response) -> str:\n    try:\n        if response.content:\n            return response.json()[\"detail\"]\n    except Exception:\n        pass\n    try:\n        response.raise_for_status()\n    except requests.HTTPError as e:\n        return str(e)\n    return \"Unknown error\"\n\n\nclass RESTfulModelHandle:\n    \"\"\"\n    A sync model interface (for RESTful client) which provides type hints that makes it much easier to use xinference\n    programmatically.\n    \"\"\"\n\n    def __init__(self, model_uid: str, base_url: str, auth_headers: Dict):\n        self._model_uid = model_uid\n        self._base_url = base_url\n        self.auth_headers = auth_headers\n        self.session = requests.Session()\n\n    def close(self):\n        \"\"\"\n        Close the session.\n        \"\"\"\n        if self.session:\n            self.session.close()\n            self.session = None\n\n    def __del__(self):\n        if self.session:\n            self.close()\n\n\nclass RESTfulEmbeddingModelHandle(RESTfulModelHandle):\n    def create_embedding(self, input: Union[str, List[str]], **kwargs) -> \"Embedding\":\n        \"\"\"\n        Create an Embedding from user input via RESTful APIs.\n\n        Parameters\n        ----------\n        input: Union[str, List[str]]\n            Input text to embed, encoded as a string or array of tokens.\n            To embed multiple inputs in a single request, pass an array of strings or array of token arrays.\n\n        Returns\n        -------\n        Embedding\n           The resulted Embedding vector that can be easily consumed by machine learning models and algorithms.\n\n        Raises\n        ------\n        RuntimeError\n            Report the failure of embeddings and provide the error message.\n\n        \"\"\"\n        url = f\"{self._base_url}/v1/embeddings\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"input\": input,\n        }\n        request_body.update(kwargs)\n        response = self.session.post(url, json=request_body, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to create the embeddings, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def convert_ids_to_tokens(\n        self, input: Union[List, List[List]], **kwargs\n    ) -> List[str]:\n        \"\"\"\n        Convert token IDs to human readable tokens via RESTful APIs.\n\n        Parameters\n        ----------\n        input: Union[List, List[List]]\n            Input token IDs to convert, can be a single list of token IDs or a list of token ID lists.\n            To convert multiple sequences in a single request, pass a list of token ID lists.\n\n        Returns\n        -------\n        list\n            A list of decoded tokens in human readable format.\n\n        Raises\n        ------\n        RuntimeError\n            Report the failure of token conversion and provide the error message.\n\n        \"\"\"\n        url = f\"{self._base_url}/v1/convert_ids_to_tokens\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"input\": input,\n        }\n        request_body.update(kwargs)\n        response = self.session.post(url, json=request_body, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to decode token ids, detail: {_get_error_string(response)}\"\n            )\n        response_data = response.json()\n        return response_data\n\n\nclass RESTfulRerankModelHandle(RESTfulModelHandle):\n    def rerank(\n        self,\n        documents: List[str],\n        query: str,\n        top_n: Optional[int] = None,\n        max_chunks_per_doc: Optional[int] = None,\n        return_documents: Optional[bool] = None,\n        return_len: Optional[bool] = None,\n        **kwargs,\n    ):\n        \"\"\"\n        Returns an ordered list of documents ordered by their relevance to the provided query.\n\n        Parameters\n        ----------\n        query: str\n            The search query\n        documents: List[str]\n            The documents to rerank\n        top_n: int\n            The number of results to return, defaults to returning all results\n        max_chunks_per_doc: int\n            The maximum number of chunks derived from a document\n        return_documents: bool\n            if return documents\n        return_len: bool\n            if return tokens len\n        Returns\n        -------\n        Scores\n           The scores of documents ordered by their relevance to the provided query\n\n        Raises\n        ------\n        RuntimeError\n            Report the failure of rerank and provide the error message.\n        \"\"\"\n        url = f\"{self._base_url}/v1/rerank\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"documents\": documents,\n            \"query\": query,\n            \"top_n\": top_n,\n            \"max_chunks_per_doc\": max_chunks_per_doc,\n            \"return_documents\": return_documents,\n            \"return_len\": return_len,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        request_body.update(kwargs)\n        response = self.session.post(url, json=request_body, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to rerank documents, detail: {response.json()['detail']}\"\n            )\n        response_data = response.json()\n        return response_data\n\n\nclass RESTfulImageModelHandle(RESTfulModelHandle):\n    def text_to_image(\n        self,\n        prompt: str,\n        n: int = 1,\n        size: str = \"1024*1024\",\n        response_format: str = \"url\",\n        **kwargs,\n    ) -> \"ImageList\":\n        \"\"\"\n        Creates an image by the input text.\n\n        Parameters\n        ----------\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.\n        n: `int`, defaults to 1\n            The number of images to generate per prompt. Must be between 1 and 10.\n        size: `str`, defaults to `1024*1024`\n            The width*height in pixels of the generated image. Must be one of 256x256, 512x512, or 1024x1024.\n        response_format: `str`, defaults to `url`\n            The format in which the generated images are returned. Must be one of url or b64_json.\n        Returns\n        -------\n        ImageList\n            A list of image objects.\n        \"\"\"\n        url = f\"{self._base_url}/v1/images/generations\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"n\": n,\n            \"size\": size,\n            \"response_format\": response_format,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        response = self.session.post(url, json=request_body, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to create the images, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def image_to_image(\n        self,\n        image: Union[str, bytes, List[Union[str, bytes]]],\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        size: Optional[str] = None,\n        response_format: str = \"url\",\n        **kwargs,\n    ) -> \"ImageList\":\n        \"\"\"\n        Creates an image by the input text.\n\n        Parameters\n        ----------\n        image: `Union[str, bytes, List[Union[str, bytes]]]`\n            The ControlNet input condition to provide guidance to the `unet` for generation. If the type is\n            specified as `torch.FloatTensor`, it is passed to ControlNet as is. `PIL.Image.Image` can also be\n            accepted as an image. The dimensions of the output image defaults to `image`'s dimensions. If height\n            and/or width are passed, `image` is resized accordingly. If multiple ControlNets are specified in\n            `init`, images must be passed as a list such that each element of the list can be correctly batched for\n            input to a single ControlNet.\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.\n        negative_prompt (`str` or `List[str]`, *optional*):\n            The prompt or prompts not to guide the image generation. If not defined, one has to pass\n            `negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is\n            less than `1`).\n        n: `int`, defaults to 1\n            The number of images to generate per prompt. Must be between 1 and 10.\n        size: `str`, defaults to `1024*1024`\n            The width*height in pixels of the generated image. Must be one of 256x256, 512x512, or 1024x1024.\n        response_format: `str`, defaults to `url`\n            The format in which the generated images are returned. Must be one of url or b64_json.\n        Returns\n        -------\n        ImageList\n            A list of image objects.\n            :param prompt:\n            :param image:\n        \"\"\"\n        url = f\"{self._base_url}/v1/images/variations\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"negative_prompt\": negative_prompt,\n            \"n\": n,\n            \"size\": size,\n            \"response_format\": response_format,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n\n        # Handle both single image and list of images\n        if isinstance(image, list):\n            if len(image) == 0:\n                raise ValueError(\"Image list cannot be empty\")\n            elif len(image) == 1:\n                # Single image in list, use it directly\n                files.append((\"image\", (\"image\", image[0], \"application/octet-stream\")))\n            else:\n                # Multiple images - send all images with same field name\n                # FastAPI will collect them into a list\n                for img_data in image:\n                    files.append(\n                        (\"image\", (\"image\", img_data, \"application/octet-stream\"))\n                    )\n        else:\n            # Single image\n            files.append((\"image\", (\"image\", image, \"application/octet-stream\")))\n        response = self.session.post(url, files=files, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to variants the images, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def image_edit(\n        self,\n        images: Union[Union[str, bytes], List[Union[str, bytes]]],\n        prompt: str,\n        mask: Optional[Union[str, bytes]] = None,\n        n: int = 1,\n        size: Optional[str] = None,\n        response_format: str = \"url\",\n        **kwargs,\n    ) -> \"ImageList\":\n        \"\"\"\n        Edit image(s) by the input text and optional mask.\n\n        Parameters\n        ----------\n        images: `Union[Union[str, bytes], List[Union[str, bytes]]]`\n            The input image(s) to edit. Can be:\n            - Single image: file path, URL, or binary image data\n            - Multiple images: list of file paths, URLs, or binary image data\n            When multiple images are provided, the first image is used as the primary image\n            and subsequent images are used as reference images for better editing results.\n        prompt: `str`\n            The prompt or prompts to guide image editing. If not defined, you need to pass `prompt_embeds`.\n        mask: `Optional[Union[str, bytes]]`, optional\n            An optional mask image. White pixels in the mask are repainted while black pixels are preserved.\n            If provided, this will trigger inpainting mode. If not provided, this will trigger image-to-image mode.\n        n: `int`, defaults to 1\n            The number of images to generate per prompt. Must be between 1 and 10.\n        size: `Optional[str]`, optional\n            The width*height in pixels of the generated image. If not specified, uses the original image size.\n        response_format: `str`, defaults to `url`\n            The format in which the generated images are returned. Must be one of url or b64_json.\n        **kwargs\n            Additional parameters to pass to the model.\n\n        Returns\n        -------\n        ImageList\n            A list of edited image objects.\n\n        Raises\n        ------\n        RuntimeError\n            If the image editing request fails.\n\n        Examples\n        --------\n        # Single image editing\n        result = model.image_edit(\n            images=\"path/to/image.png\",\n            prompt=\"make this image look like a painting\"\n        )\n\n        # Multiple image editing with reference images\n        result = model.image_edit(\n            images=[\"primary_image.png\", \"reference1.jpg\", \"reference2.png\"],\n            prompt=\"edit the main image using the style from reference images\"\n        )\n        \"\"\"\n        url = f\"{self._base_url}/v1/images/edits\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"n\": n,\n            \"size\": size,\n            \"response_format\": response_format,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        files: List[Any] = []\n        for key, value in params.items():\n            if value is not None:\n                files.append((key, (None, value)))\n\n        # Handle single image or multiple images using requests format\n        if isinstance(images, list):\n            # Validate image list is not empty\n            if len(images) == 0:\n                raise ValueError(\"Image list cannot be empty\")\n            # Multiple images - send as image[] array\n            for i, img in enumerate(images):\n                if isinstance(img, str):\n                    # File path - open file\n                    f = open(img, \"rb\")\n                    files.append(\n                        (f\"images[]\", (f\"image_{i}\", f, \"application/octet-stream\"))\n                    )\n                else:\n                    # Binary data\n                    files.append(\n                        (f\"images[]\", (f\"image_{i}\", img, \"application/octet-stream\"))\n                    )\n        else:\n            # Single image\n            if isinstance(images, str):\n                # File path - open file\n                f = open(images, \"rb\")\n                files.append((\"images\", (\"image\", f, \"application/octet-stream\")))\n            else:\n                # Binary data\n                files.append((\"images\", (\"image\", images, \"application/octet-stream\")))\n\n        if mask is not None:\n            if isinstance(mask, str):\n                # File path - open file\n                f = open(mask, \"rb\")\n                files.append((\"mask\", (\"mask\", f, \"application/octet-stream\")))\n            else:\n                # Binary data\n                files.append((\"mask\", (\"mask\", mask, \"application/octet-stream\")))\n\n        try:\n            response = self.session.post(url, files=files, headers=self.auth_headers)\n            if response.status_code != 200:\n                raise RuntimeError(\n                    f\"Failed to edit the images, detail: {_get_error_string(response)}\"\n                )\n\n            response_data = response.json()\n            return response_data\n        finally:\n            # Close all opened files\n            for file_item in files:\n                if (\n                    len(file_item) >= 2\n                    and hasattr(file_item[1], \"__len__\")\n                    and len(file_item[1]) >= 2\n                ):\n                    file_obj = file_item[1][1]\n                    if hasattr(file_obj, \"close\"):\n                        file_obj.close()\n\n    def inpainting(\n        self,\n        image: Union[str, bytes],\n        mask_image: Union[str, bytes],\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        size: Optional[str] = None,\n        response_format: str = \"url\",\n        **kwargs,\n    ) -> \"ImageList\":\n        \"\"\"\n        Inpaint an image by the input text.\n\n        Parameters\n        ----------\n        image: `Union[str, bytes]`\n            an image batch to be inpainted (which parts of the image to\n            be masked out with `mask_image` and repainted according to `prompt`). For both numpy array and pytorch\n            tensor, the expected value range is between `[0, 1]`. If it's a tensor or a list or tensors, the\n            expected shape should be `(B, C, H, W)` or `(C, H, W)`. If it is a numpy array or a list of arrays, the\n            expected shape should be `(B, H, W, C)` or `(H, W, C)`. It can also accept image latents as `image`, but\n            if passing latents directly it is not encoded again.\n        mask_image: `Union[str, bytes]`\n            representing an image batch to mask `image`. White pixels in the mask\n            are repainted while black pixels are preserved. If `mask_image` is a PIL image, it is converted to a\n            single channel (luminance) before use. If it's a numpy array or pytorch tensor, it should contain one\n            color channel (L) instead of 3, so the expected shape for pytorch tensor would be `(B, 1, H, W)`, `(B,\n            H, W)`, `(1, H, W)`, `(H, W)`. And for numpy array would be for `(B, H, W, 1)`, `(B, H, W)`, `(H, W,\n            1)`, or `(H, W)`.\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide image generation. If not defined, you need to pass `prompt_embeds`.\n        negative_prompt (`str` or `List[str]`, *optional*):\n            The prompt or prompts not to guide the image generation. If not defined, one has to pass\n            `negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is\n            less than `1`).\n        n: `int`, defaults to 1\n            The number of images to generate per prompt. Must be between 1 and 10.\n        size: `str`, defaults to None\n            The width*height in pixels of the generated image.\n        response_format: `str`, defaults to `url`\n            The format in which the generated images are returned. Must be one of url or b64_json.\n        Returns\n        -------\n        ImageList\n            A list of image objects.\n            :param prompt:\n            :param image:\n        \"\"\"\n        url = f\"{self._base_url}/v1/images/inpainting\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"negative_prompt\": negative_prompt,\n            \"n\": n,\n            \"size\": size,\n            \"response_format\": response_format,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n        files.append((\"image\", (\"image\", image, \"application/octet-stream\")))\n        files.append(\n            (\"mask_image\", (\"mask_image\", mask_image, \"application/octet-stream\"))\n        )\n        response = self.session.post(url, files=files, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to inpaint the images, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def ocr(self, image: Union[str, bytes], **kwargs):\n        url = f\"{self._base_url}/v1/images/ocr\"\n        params = {\n            \"model\": self._model_uid,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n        files.append((\"image\", (\"image\", image, \"application/octet-stream\")))\n        response = self.session.post(url, files=files, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to ocr the images, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n\nclass RESTfulVideoModelHandle(RESTfulModelHandle):\n    def text_to_video(\n        self,\n        prompt: str,\n        n: int = 1,\n        **kwargs,\n    ) -> \"VideoList\":\n        \"\"\"\n        Creates a video by the input text.\n\n        Parameters\n        ----------\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.\n        n: `int`, defaults to 1\n            The number of videos to generate per prompt. Must be between 1 and 10.\n        Returns\n        -------\n        VideoList\n            A list of video objects.\n        \"\"\"\n        url = f\"{self._base_url}/v1/video/generations\"\n        request_body = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"n\": n,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        response = self.session.post(url, json=request_body, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to create the video, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def image_to_video(\n        self,\n        image: Union[str, bytes],\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        **kwargs,\n    ) -> \"VideoList\":\n        \"\"\"\n        Creates a video by the input image and text.\n\n        Parameters\n        ----------\n        image: `Union[str, bytes]`\n            The input image to condition the generation on.\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.\n        negative_prompt (`str` or `List[str]`, *optional*):\n            The prompt or prompts not to guide the image generation.\n        n: `int`, defaults to 1\n            The number of videos to generate per prompt. Must be between 1 and 10.\n        Returns\n        -------\n        VideoList\n            A list of video objects.\n        \"\"\"\n        url = f\"{self._base_url}/v1/video/generations/image\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"negative_prompt\": negative_prompt,\n            \"n\": n,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n        files.append((\"image\", (\"image\", image, \"application/octet-stream\")))\n        response = self.session.post(url, files=files, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to create the video from image, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def flf_to_video(\n        self,\n        first_frame: Union[str, bytes],\n        last_frame: Union[str, bytes],\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        **kwargs,\n    ) -> \"VideoList\":\n        \"\"\"\n        Creates a video by the first frame, last frame and text.\n\n        Parameters\n        ----------\n        first_frame: `Union[str, bytes]`\n            The first frame to condition the generation on.\n        last_frame: `Union[str, bytes]`\n            The last frame to condition the generation on.\n        prompt: `str` or `List[str]`\n            The prompt or prompts to guide video generation. If not defined, you need to pass `prompt_embeds`.\n        negative_prompt (`str` or `List[str]`, *optional*):\n            The prompt or prompts not to guide the image generation.\n        n: `int`, defaults to 1\n            The number of videos to generate per prompt. Must be between 1 and 10.\n        Returns\n        -------\n        VideoList\n            A list of video objects.\n        \"\"\"\n        url = f\"{self._base_url}/v1/video/generations/flf\"\n        params = {\n            \"model\": self._model_uid,\n            \"prompt\": prompt,\n            \"negative_prompt\": negative_prompt,\n            \"n\": n,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        files: List[Any] = []\n        for key, value in params.items():\n            files.append((key, (None, value)))\n        files.append(\n            (\"first_frame\", (\"image\", first_frame, \"application/octet-stream\"))\n        )\n        files.append((\"last_frame\", (\"image\", last_frame, \"application/octet-stream\")))\n        response = self.session.post(url, files=files, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to create the video from image, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n\nclass RESTfulGenerateModelHandle(RESTfulModelHandle):\n    def generate(\n        self,\n        prompt: str,\n        generate_config: Optional[\"PytorchGenerateConfig\"] = None,\n    ) -> Union[\"Completion\", Iterator[\"CompletionChunk\"]]:\n        \"\"\"\n        Creates a completion for the provided prompt and parameters via RESTful APIs.\n\n        Parameters\n        ----------\n        prompt: str\n            The user's message or user's input.\n        generate_config: Optional[\"PytorchGenerateConfig\"]\n            Additional configuration for the chat generation.\n            \"PytorchGenerateConfig\" -> Configuration for pytorch model\n\n        Returns\n        -------\n        Union[\"Completion\", Iterator[\"CompletionChunk\"]]\n            Stream is a parameter in generate_config.\n            When stream is set to True, the function will return Iterator[\"CompletionChunk\"].\n            When stream is set to False, the function will return \"Completion\".\n\n        Raises\n        ------\n        RuntimeError\n            Fail to generate the completion from the server. Detailed information provided in error message.\n\n        \"\"\"\n\n        url = f\"{self._base_url}/v1/completions\"\n\n        request_body: Dict[str, Any] = {\"model\": self._model_uid, \"prompt\": prompt}\n        if generate_config is not None:\n            for key, value in generate_config.items():\n                request_body[key] = value\n\n        stream = bool(generate_config and generate_config.get(\"stream\"))\n\n        response = self.session.post(\n            url, json=request_body, stream=stream, headers=self.auth_headers\n        )\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to generate completion, detail: {_get_error_string(response)}\"\n            )\n\n        if stream:\n            return streaming_response_iterator(response.iter_lines())\n\n        response_data = response.json()\n        return response_data\n\n\nclass RESTfulChatModelHandle(RESTfulGenerateModelHandle):\n    def chat(\n        self,\n        messages: List[Dict],\n        tools: Optional[List[Dict]] = None,\n        enable_thinking: Optional[bool] = None,\n        generate_config: Optional[\"PytorchGenerateConfig\"] = None,\n    ) -> Union[\"ChatCompletion\", Iterator[\"ChatCompletionChunk\"]]:\n        \"\"\"\n        Given a list of messages comprising a conversation, the model will return a response via RESTful APIs.\n\n        Parameters\n        ----------\n        messages: List[Dict]\n            A list of messages comprising the conversation so far.\n        tools: Optional[List[Dict]]\n            A tool list.\n        generate_config: Optional[\"PytorchGenerateConfig\"]\n            Additional configuration for the chat generation.\n            \"PytorchGenerateConfig\" -> configuration for pytorch model\n        enable_thinking: Optional[bool]\n            Toggle thinking mode per request for hybrid reasoning LLMs.\n\n        Returns\n        -------\n        Union[\"ChatCompletion\", Iterator[\"ChatCompletionChunk\"]]\n            Stream is a parameter in generate_config.\n            When stream is set to True, the function will return Iterator[\"ChatCompletionChunk\"].\n            When stream is set to False, the function will return \"ChatCompletion\".\n\n        Raises\n        ------\n        RuntimeError\n            Report the failure to generate the chat from the server. Detailed information provided in error message.\n\n        \"\"\"\n        url = f\"{self._base_url}/v1/chat/completions\"\n\n        request_body: Dict[str, Any] = {\n            \"model\": self._model_uid,\n            \"messages\": messages,\n        }\n        if tools is not None:\n            request_body[\"tools\"] = tools\n        if generate_config is not None or enable_thinking is not None:\n            merged_config: Dict[str, Any] = (\n                dict(generate_config) if generate_config is not None else {}\n            )\n            if enable_thinking is not None:\n                chat_template_kwargs = merged_config.get(\"chat_template_kwargs\") or {}\n                if isinstance(chat_template_kwargs, str):\n                    try:\n                        chat_template_kwargs = json.loads(chat_template_kwargs)\n                    except json.JSONDecodeError:\n                        chat_template_kwargs = {}\n                if not isinstance(chat_template_kwargs, dict):\n                    chat_template_kwargs = {}\n                chat_template_kwargs = dict(chat_template_kwargs)\n                chat_template_kwargs[\"enable_thinking\"] = enable_thinking\n                chat_template_kwargs[\"thinking\"] = enable_thinking\n                merged_config[\"chat_template_kwargs\"] = chat_template_kwargs\n            for key, value in merged_config.items():\n                request_body[key] = value\n\n        stream = bool(generate_config and generate_config.get(\"stream\"))\n        response = self.session.post(\n            url, json=request_body, stream=stream, headers=self.auth_headers\n        )\n\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to generate chat completion, detail: {_get_error_string(response)}\"\n            )\n\n        if stream:\n            return streaming_response_iterator(response.iter_lines())\n\n        response_data = response.json()\n        return response_data\n\n\nclass RESTfulAudioModelHandle(RESTfulModelHandle):\n    def transcriptions(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: Optional[str] = \"json\",\n        temperature: Optional[float] = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n        **kwargs,\n    ):\n        \"\"\"\n        Transcribes audio into the input language.\n\n        Parameters\n        ----------\n\n        audio: bytes\n            The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg,\n            mpga, m4a, ogg, wav, or webm.\n        language: Optional[str]\n            The language of the input audio. Supplying the input language in ISO-639-1\n            (https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) format will improve accuracy and latency.\n        prompt: Optional[str]\n            An optional text to guide the model's style or continue a previous audio segment.\n            The prompt should match the audio language.\n        response_format: Optional[str], defaults to json\n            The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.\n        temperature: Optional[float], defaults to 0\n            The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random,\n            while lower values like 0.2 will make it more focused and deterministic.\n            If set to 0, the model will use log probability to automatically increase the temperature\n            until certain thresholds are hit.\n        timestamp_granularities: Optional[List[str]], default is None.\n            The timestamp granularities to populate for this transcription. response_format must be set verbose_json\n            to use timestamp granularities. Either or both of these options are supported: word, or segment.\n            Note: There is no additional latency for segment timestamps, but generating word timestamps incurs\n            additional latency.\n\n        Returns\n        -------\n            The transcribed text.\n        \"\"\"\n        url = f\"{self._base_url}/v1/audio/transcriptions\"\n        params = {\n            \"model\": self._model_uid,\n            \"language\": language,\n            \"prompt\": prompt,\n            \"response_format\": response_format,\n            \"temperature\": temperature,\n            \"timestamp_granularities[]\": timestamp_granularities,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        files: List[Any] = []\n        files.append((\"file\", (\"file\", audio, \"application/octet-stream\")))\n        response = self.session.post(\n            url, data=params, files=files, headers=self.auth_headers\n        )\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to transcribe the audio, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def translations(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: Optional[str] = \"json\",\n        temperature: Optional[float] = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n    ):\n        \"\"\"\n        Translates audio into English.\n\n        Parameters\n        ----------\n\n        audio: bytes\n            The audio file object (not file name) to transcribe, in one of these formats: flac, mp3, mp4, mpeg,\n            mpga, m4a, ogg, wav, or webm.\n        language: Optional[str]\n            The language of the input audio. Supplying the input language in ISO-639-1\n            (https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) format will improve accuracy and latency.\n        prompt: Optional[str]\n            An optional text to guide the model's style or continue a previous audio segment.\n            The prompt should match the audio language.\n        response_format: Optional[str], defaults to json\n            The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt.\n        temperature: Optional[float], defaults to 0\n            The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random,\n            while lower values like 0.2 will make it more focused and deterministic.\n            If set to 0, the model will use log probability to automatically increase the temperature\n            until certain thresholds are hit.\n        timestamp_granularities: Optional[List[str]], default is None.\n            The timestamp granularities to populate for this transcription. response_format must be set verbose_json\n            to use timestamp granularities. Either or both of these options are supported: word, or segment.\n            Note: There is no additional latency for segment timestamps, but generating word timestamps incurs\n            additional latency.\n\n        Returns\n        -------\n            The translated text.\n        \"\"\"\n        url = f\"{self._base_url}/v1/audio/translations\"\n        params = {\n            \"model\": self._model_uid,\n            \"language\": language,\n            \"prompt\": prompt,\n            \"response_format\": response_format,\n            \"temperature\": temperature,\n            \"timestamp_granularities[]\": timestamp_granularities,\n        }\n        files: List[Any] = []\n        files.append((\"file\", (\"file\", audio, \"application/octet-stream\")))\n        response = self.session.post(\n            url, data=params, files=files, headers=self.auth_headers\n        )\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to translate the audio, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def speech(\n        self,\n        input: str,\n        voice: str = \"\",\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        prompt_speech: Optional[bytes] = None,\n        prompt_latent: Optional[bytes] = None,\n        **kwargs,\n    ):\n        \"\"\"\n        Generates audio from the input text.\n\n        Parameters\n        ----------\n\n        input: str\n            The text to generate audio for. The maximum length is 4096 characters.\n        voice: str\n            The voice to use when generating the audio.\n        response_format: str\n            The format to audio in.\n        speed: str\n            The speed of the generated audio.\n        stream: bool\n            Use stream or not.\n        prompt_speech: bytes\n            The audio bytes to be provided to the model.\n        prompt_latent: bytes\n            The latent bytes to be provided to the model.\n\n        Returns\n        -------\n        bytes\n            The generated audio binary.\n        \"\"\"\n        url = f\"{self._base_url}/v1/audio/speech\"\n        params = {\n            \"model\": self._model_uid,\n            \"input\": input,\n            \"voice\": voice,\n            \"response_format\": response_format,\n            \"speed\": speed,\n            \"stream\": stream,\n            \"kwargs\": json.dumps(kwargs),\n        }\n        files: List[Any] = []\n        if prompt_speech:\n            files.append(\n                (\n                    \"prompt_speech\",\n                    (\"prompt_speech\", prompt_speech, \"application/octet-stream\"),\n                )\n            )\n        if prompt_latent:\n            files.append(\n                (\n                    \"prompt_latent\",\n                    (\"prompt_latent\", prompt_latent, \"application/octet-stream\"),\n                )\n            )\n        if files:\n            response = self.session.post(\n                url, data=params, files=files, headers=self.auth_headers, stream=stream\n            )\n        else:\n            response = self.session.post(\n                url, json=params, headers=self.auth_headers, stream=stream\n            )\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to speech the text, detail: {_get_error_string(response)}\"\n            )\n\n        if stream:\n            return response.iter_content(chunk_size=1024)\n\n        return response.content\n\n\nclass RESTfulFlexibleModelHandle(RESTfulModelHandle):\n    def infer(\n        self,\n        *args,\n        **kwargs,\n    ):\n        \"\"\"\n        Call flexible model.\n\n        Parameters\n        ----------\n\n        kwargs: dict\n            The inference arguments.\n\n\n        Returns\n        -------\n        bytes\n            The inference result.\n        \"\"\"\n        url = f\"{self._base_url}/v1/flexible/infers\"\n        params = {\n            \"model\": self._model_uid,\n            \"args\": args,\n        }\n        params.update(kwargs)\n\n        response = self.session.post(url, json=params, headers=self.auth_headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to predict, detail: {_get_error_string(response)}\"\n            )\n\n        return response.json()\n\n\nclass Client:\n    def __init__(self, base_url, api_key: Optional[str] = None):\n        self.base_url = base_url\n        self._headers: Dict[str, str] = {}\n        self._cluster_authed = False\n        self.session = requests.Session()\n        self._check_cluster_authenticated()\n        if api_key is not None and self._cluster_authed:\n            self._headers[\"Authorization\"] = f\"Bearer {api_key}\"\n\n    def close(self):\n        \"\"\"\n        Close the session.\n        \"\"\"\n        if self.session:\n            self.session.close()\n            self.session = None\n\n    def __del__(self):\n        if self.session:\n            self.close()\n\n    def _set_token(self, token: Optional[str]):\n        if not self._cluster_authed or token is None:\n            return\n        self._headers[\"Authorization\"] = f\"Bearer {token}\"\n\n    def _get_token(self) -> Optional[str]:\n        return (\n            str(self._headers[\"Authorization\"]).replace(\"Bearer \", \"\")\n            if \"Authorization\" in self._headers\n            else None\n        )\n\n    def _check_cluster_authenticated(self):\n        url = f\"{self.base_url}/v1/cluster/auth\"\n        response = self.session.get(url)\n        # compatible with old version of xinference\n        if response.status_code == 404:\n            self._cluster_authed = False\n        else:\n            if response.status_code != 200:\n                raise RuntimeError(\n                    f\"Failed to get cluster information, detail: {response.json()['detail']}\"\n                )\n            response_data = response.json()\n            self._cluster_authed = bool(response_data[\"auth\"])\n\n    def vllm_models(self) -> Dict[str, Any]:\n        url = f\"{self.base_url}/v1/models/vllm-supported\"\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to fetch VLLM models. detail: {response.json()['detail']}\"\n            )\n\n        try:\n            return response.json()\n        except Exception as e:\n            raise RuntimeError(f\"Error parsing JSON response: {e}\")\n\n    def login(self, username: str, password: str):\n        if not self._cluster_authed:\n            return\n        url = f\"{self.base_url}/token\"\n\n        payload = {\"username\": username, \"password\": password}\n\n        response = self.session.post(url, json=payload)\n        if response.status_code != 200:\n            raise RuntimeError(f\"Failed to login, detail: {response.json()['detail']}\")\n\n        response_data = response.json()\n        # Only bearer token for now\n        access_token = response_data[\"access_token\"]\n        self._headers[\"Authorization\"] = f\"Bearer {access_token}\"\n\n    def list_models(self) -> Dict[str, Dict[str, Any]]:\n        \"\"\"\n        Retrieve the model specifications from the Server.\n\n        Returns\n        -------\n        Dict[str, Dict[str, Any]]\n            The collection of model specifications with their names on the server.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models\"\n\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to list model, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        model_list = response_data[\"data\"]\n        return {item[\"id\"]: item for item in model_list}\n\n    def launch_model(\n        self,\n        model_name: str,\n        model_type: str = \"LLM\",\n        model_engine: Optional[str] = None,\n        model_uid: Optional[str] = None,\n        model_size_in_billions: Optional[Union[int, str, float]] = None,\n        model_format: Optional[str] = None,\n        quantization: Optional[str] = None,\n        replica: int = 1,\n        n_worker: int = 1,\n        n_gpu: Optional[Union[int, str]] = \"auto\",\n        peft_model_config: Optional[Dict] = None,\n        request_limits: Optional[int] = None,\n        worker_ip: Optional[str] = None,\n        gpu_idx: Optional[Union[int, List[int]]] = None,\n        model_path: Optional[str] = None,\n        enable_thinking: Optional[bool] = None,\n        enable_virtual_env: Optional[bool] = None,\n        virtual_env_packages: Optional[List[str]] = None,\n        envs: Optional[Dict[str, str]] = None,\n        **kwargs,\n    ) -> str:\n        \"\"\"\n        Launch the model based on the parameters on the server via RESTful APIs.\n\n        Parameters\n        ----------\n        model_name: str\n            The name of model.\n        model_type: str\n            type of model.\n        model_engine: Optional[str]\n            Specify the inference engine of the model when launching LLM.\n        model_uid: str\n            UID of model, auto generate a UUID if is None.\n        model_size_in_billions: Optional[Union[int, str, float]]\n            The size (in billions) of the model.\n        model_format: Optional[str]\n            The format of the model.\n        quantization: Optional[str]\n            The quantization of model.\n        replica: Optional[int]\n            The replica of model, default is 1.\n        n_worker: int\n            Number of workers to run.\n        n_gpu: Optional[Union[int, str]],\n            The number of GPUs used by the model, default is \"auto\". If n_worker>1, means number of GPUs per worker.\n            ``n_gpu=None`` means cpu only, ``n_gpu=auto`` lets the system automatically determine the best number of GPUs to use.\n        peft_model_config: Optional[Dict]\n            - \"lora_list\": A List of PEFT (Parameter-Efficient Fine-Tuning) model and path.\n            - \"image_lora_load_kwargs\": A Dict of lora load parameters for image model\n            - \"image_lora_fuse_kwargs\": A Dict of lora fuse parameters for image model\n        request_limits: Optional[int]\n            The number of request limits for this model, default is None.\n            ``request_limits=None`` means no limits for this model.\n        worker_ip: Optional[str]\n            Specify the worker ip where the model is located in a distributed scenario.\n        gpu_idx: Optional[Union[int, List[int]]]\n            Specify the GPU index where the model is located.\n        model_path: Optional[str]\n            Model path, if gguf format, should be the file path, otherwise, should be directory of the model.\n        enable_thinking: Optional[bool]\n            Enable or disable thinking mode for hybrid reasoning LLMs (e.g., Qwen3). None uses\n            the model default.\n        enable_virtual_env: Optional[bool]\n            If enable virtual env.\n        virtual_env_packages: Optional[List[str]]\n            Packages to specify in virtual env, can be used to override builtin packages in virtual env.\n        envs: Optional[Dict[str, str]]\n            Environment variables to pass when launching model.\n\n        **kwargs:\n            Any other parameters been specified. e.g. multimodal_projector for multimodal inference with the llama.cpp backend.\n\n        Returns\n        -------\n        str\n            The unique model_uid for the launched model.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models\"\n\n        # convert float to int or string since the RESTful API does not accept float.\n        if isinstance(model_size_in_billions, float):\n            model_size_in_billions = convert_float_to_int_or_str(model_size_in_billions)\n\n        payload = {\n            \"model_uid\": model_uid,\n            \"model_name\": model_name,\n            \"model_engine\": model_engine,\n            \"peft_model_config\": peft_model_config,\n            \"model_type\": model_type,\n            \"model_size_in_billions\": model_size_in_billions,\n            \"model_format\": model_format,\n            \"quantization\": quantization,\n            \"replica\": replica,\n            \"n_worker\": n_worker,\n            \"n_gpu\": n_gpu,\n            \"request_limits\": request_limits,\n            \"worker_ip\": worker_ip,\n            \"gpu_idx\": gpu_idx,\n            \"model_path\": model_path,\n            \"enable_thinking\": enable_thinking,\n            \"enable_virtual_env\": enable_virtual_env,\n            \"virtual_env_packages\": virtual_env_packages,\n            \"envs\": envs,\n        }\n\n        wait_ready = kwargs.pop(\"wait_ready\", True)\n\n        for key, value in kwargs.items():\n            payload[str(key)] = value\n\n        if wait_ready:\n            response = self.session.post(url, json=payload, headers=self._headers)\n        else:\n            response = self.session.post(\n                url, json=payload, headers=self._headers, params={\"wait_ready\": False}\n            )\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to launch model, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data[\"model_uid\"]\n\n    def terminate_model(self, model_uid: str):\n        \"\"\"\n        Terminate the specific model running on the server.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model we want.\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models/{model_uid}\"\n\n        response = self.session.delete(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to terminate model, detail: {_get_error_string(response)}\"\n            )\n\n    def get_launch_model_progress(self, model_uid: str) -> dict:\n        \"\"\"\n        Get progress of the specific model.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model we want.\n\n        Returns\n        -------\n        result: dict\n            Result that contains progress.\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n        \"\"\"\n        url = f\"{self.base_url}/v1/models/{model_uid}/progress\"\n\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Fail to get model launching progress, detail: {_get_error_string(response)}\"\n            )\n        return response.json()\n\n    def cancel_launch_model(self, model_uid: str):\n        \"\"\"\n        Cancel launching model.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model we want.\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n        \"\"\"\n        url = f\"{self.base_url}/v1/models/{model_uid}/cancel\"\n\n        response = self.session.post(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Fail to cancel launching model, detail: {_get_error_string(response)}\"\n            )\n\n    def get_instance_info(self, model_name: str, model_uid: str):\n        url = f\"{self.base_url}/v1/models/instances\"\n        response = self.session.get(\n            url,\n            headers=self._headers,\n            params={\"model_name\": model_name, \"model_uid\": model_uid},\n        )\n        if response.status_code != 200:\n            raise RuntimeError(\"Failed to get instance info\")\n        response_data = response.json()\n        return response_data\n\n    def _get_supervisor_internal_address(self):\n        url = f\"{self.base_url}/v1/address\"\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\"Failed to get supervisor internal address\")\n        response_data = response.json()\n        return response_data\n\n    def get_model(self, model_uid: str) -> RESTfulModelHandle:\n        \"\"\"\n        Launch the model based on the parameters on the server via RESTful APIs.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model.\n\n        Returns\n        -------\n        ModelHandle\n            The corresponding Model Handler based on the Model specified in the uid:\n              - :obj:`xinference.client.handlers.GenerateModelHandle` -> provide handle to basic generate Model. e.g. Baichuan.\n              - :obj:`xinference.client.handlers.ChatModelHandle` -> provide handle to chat Model. e.g. Baichuan-chat.\n\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models/{model_uid}\"\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to get the model description, detail: {_get_error_string(response)}\"\n            )\n        desc = response.json()\n\n        if desc[\"model_type\"] == \"LLM\":\n            if \"chat\" in desc[\"model_ability\"]:\n                return RESTfulChatModelHandle(\n                    model_uid, self.base_url, auth_headers=self._headers\n                )\n            elif \"generate\" in desc[\"model_ability\"]:\n                return RESTfulGenerateModelHandle(\n                    model_uid, self.base_url, auth_headers=self._headers\n                )\n            else:\n                raise ValueError(f\"Unrecognized model ability: {desc['model_ability']}\")\n        elif desc[\"model_type\"] == \"embedding\":\n            return RESTfulEmbeddingModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"image\":\n            return RESTfulImageModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"rerank\":\n            return RESTfulRerankModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"audio\":\n            return RESTfulAudioModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"video\":\n            return RESTfulVideoModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        elif desc[\"model_type\"] == \"flexible\":\n            return RESTfulFlexibleModelHandle(\n                model_uid, self.base_url, auth_headers=self._headers\n            )\n        else:\n            raise ValueError(f\"Unknown model type:{desc['model_type']}\")\n\n    def describe_model(self, model_uid: str):\n        \"\"\"\n        Get model information via RESTful APIs.\n\n        Parameters\n        ----------\n        model_uid: str\n            The unique id that identify the model.\n\n        Returns\n        -------\n        dict\n            A dictionary containing the following keys:\n\n            - \"model_type\": str\n               the type of the model determined by its function, e.g. \"LLM\" (Large Language Model)\n            - \"model_name\": str\n               the name of the specific LLM model family\n            - \"model_lang\": List[str]\n               the languages supported by the LLM model\n            - \"model_ability\": List[str]\n               the ability or capabilities of the LLM model\n            - \"model_description\": str\n               a detailed description of the LLM model\n            - \"model_format\": str\n               the format specification of the LLM model\n            - \"model_size_in_billions\": int\n               the size of the LLM model in billions\n            - \"quantization\": str\n               the quantization applied to the model\n            - \"revision\": str\n               the revision number of the LLM model specification\n            - \"context_length\": int\n               the maximum text length the LLM model can accommodate (include all input & output)\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to get the wanted model with given model_uid. Provide details of failure through error message.\n\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/models/{model_uid}\"\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to get the model description, detail: {_get_error_string(response)}\"\n            )\n        return response.json()\n\n    def register_model(\n        self,\n        model_type: str,\n        model: str,\n        persist: bool,\n        worker_ip: Optional[str] = None,\n    ):\n        \"\"\"\n        Register a custom model.\n\n        Parameters\n        ----------\n        model_type: str\n            The type of model.\n        model: str\n            The model definition. (refer to: https://inference.readthedocs.io/en/latest/models/custom.html)\n        worker_ip: Optional[str]\n            The IP address of the worker on which the model is running.\n        persist: bool\n\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to register the custom model. Provide details of failure through error message.\n        \"\"\"\n        url = f\"{self.base_url}/v1/model_registrations/{model_type}\"\n        request_body = {\"model\": model, \"worker_ip\": worker_ip, \"persist\": persist}\n        response = self.session.post(url, json=request_body, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to register model, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def unregister_model(self, model_type: str, model_name: str):\n        \"\"\"\n        Unregister a custom model.\n\n        Parameters\n        ----------\n        model_type: str\n            The type of model.\n        model_name: str\n            The name of the model\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to unregister the custom model. Provide details of failure through error message.\n        \"\"\"\n        url = f\"{self.base_url}/v1/model_registrations/{model_type}/{model_name}\"\n        response = self.session.delete(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to register model, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def list_model_registrations(\n        self, model_type: str, detailed: bool = False\n    ) -> List[Dict[str, Any]]:\n        \"\"\"\n        List models registered on the server.\n\n        Parameters\n        ----------\n        model_type: str\n            The type of the model.\n        detailed: bool\n            Whether to display detailed information.\n\n        Returns\n        -------\n        List[Dict[str, Any]]\n            The collection of registered models on the server.\n\n        Raises\n        ------\n        RuntimeError\n            Report failure to list model registration. Provide details of failure through error message.\n\n        \"\"\"\n        url = f\"{self.base_url}/v1/model_registrations/{model_type}?detailed={'true' if detailed else 'false'}\"\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to list model registration, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def list_cached_models(\n        self, model_name: Optional[str] = None, worker_ip: Optional[str] = None\n    ) -> List[Dict[Any, Any]]:\n        \"\"\"\n        Get a list of cached models.\n        Parameters\n        ----------\n        model_name: Optional[str]\n            The name of model.\n        worker_ip: Optional[str]\n            Specify the worker ip where the model is located in a distributed scenario.\n\n        Returns\n        -------\n        List[Dict[Any, Any]]\n            The collection of cached models on the server.\n\n        Raises\n        ------\n        RuntimeError\n            Raised when the request fails, including the reason for the failure.\n        \"\"\"\n\n        url = f\"{self.base_url}/v1/cache/models\"\n        params = {\n            \"model_name\": model_name,\n            \"worker_ip\": worker_ip,\n        }\n        response = self.session.get(url, headers=self._headers, params=params)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to list cached model, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        response_data = response_data.get(\"list\")\n        return response_data\n\n    def list_deletable_models(\n        self, model_version: str, worker_ip: Optional[str] = None\n    ) -> Dict[str, Any]:\n        \"\"\"\n        Get the cached models with the model path cached on the server.\n        Parameters\n        ----------\n        model_version: str\n            The version of the model.\n        worker_ip: Optional[str]\n            Specify the worker ip where the model is located in a distributed scenario.\n        Returns\n        -------\n        Dict[str, Dict[str,str]]]\n            Dictionary with keys \"model_name\" and values model_file_location.\n        \"\"\"\n        url = f\"{self.base_url}/v1/cache/models/files\"\n        params = {\n            \"model_version\": model_version,\n            \"worker_ip\": worker_ip,\n        }\n        response = self.session.get(url, headers=self._headers, params=params)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to get paths by model name, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def confirm_and_remove_model(\n        self, model_version: str, worker_ip: Optional[str] = None\n    ) -> bool:\n        \"\"\"\n        Remove the cached models with the model name cached on the server.\n        Parameters\n        ----------\n        model_version: str\n            The version of the model.\n        worker_ip: Optional[str]\n            Specify the worker ip where the model is located in a distributed scenario.\n        Returns\n        -------\n        str\n            The response of the server.\n        \"\"\"\n        url = f\"{self.base_url}/v1/cache/models\"\n        params = {\n            \"model_version\": model_version,\n            \"worker_ip\": worker_ip,\n        }\n        response = self.session.delete(url, headers=self._headers, params=params)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to remove cached models, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data.get(\"result\", False)\n\n    def get_model_registration(\n        self, model_type: str, model_name: str\n    ) -> Dict[str, Any]:\n        \"\"\"\n        Get the model with the model type and model name registered on the server.\n\n        Parameters\n        ----------\n        model_type: str\n            The type of the model.\n\n        model_name: str\n            The name of the model.\n        Returns\n        -------\n        List[Dict[str, Any]]\n            The collection of registered models on the server.\n        \"\"\"\n        url = f\"{self.base_url}/v1/model_registrations/{model_type}/{model_name}\"\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to list model registration, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def query_engine_by_model_name(\n        self,\n        model_name: str,\n        model_type: Optional[str] = \"LLM\",\n        enable_virtual_env: Optional[bool] = None,\n    ):\n        \"\"\"\n        Get the engine parameters with the model name registered on the server.\n\n        Parameters\n        ----------\n        model_name: str\n            The name of the model.\n        model_type: str\n            Model type, LLM by default.\n        Returns\n        -------\n        Dict[str, List[Dict[str, Any]]]\n            The supported engine parameters of registered models on the server.\n        \"\"\"\n        if not model_type:\n            url = f\"{self.base_url}/v1/engines/{model_name}\"\n        else:\n            url = f\"{self.base_url}/v1/engines/{model_type}/{model_name}\"\n        params = {}\n        if enable_virtual_env is not None:\n            params[\"enable_virtual_env\"] = str(enable_virtual_env).lower()\n        response = self.session.get(url, headers=self._headers, params=params)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to query engine parameters by model name, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def abort_request(self, model_uid: str, request_id: str, block_duration: int = 30):\n        \"\"\"\n        Abort a request.\n        Abort a submitted request. If the request is finished or not found, this method will be a no-op.\n        Currently, this interface is only supported when batching is enabled for models on transformers backend.\n\n        Parameters\n        ----------\n        model_uid: str\n            Model uid.\n        request_id: str\n            Request id.\n        block_duration: int\n            The duration to make the request id abort. If set to 0, the abort_request will be immediate, which may\n            prevent it from taking effect if it arrives before the request operation.\n        Returns\n        -------\n        Dict\n            Return empty dict.\n        \"\"\"\n        url = f\"{self.base_url}/v1/models/{model_uid}/requests/{request_id}/abort\"\n        response = self.session.post(\n            url, headers=self._headers, json={\"block_duration\": block_duration}\n        )\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to abort request, detail: {_get_error_string(response)}\"\n            )\n\n        response_data = response.json()\n        return response_data\n\n    def get_workers_info(self):\n        url = f\"{self.base_url}/v1/workers\"\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to get workers info, detail: {_get_error_string(response)}\"\n            )\n        response_data = response.json()\n        return response_data\n\n    def get_supervisor_info(self):\n        url = f\"{self.base_url}/v1/supervisor\"\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to get supervisor info, detail: {_get_error_string(response)}\"\n            )\n        response_json = response.json()\n        return response_json\n\n    def get_progress(self, request_id: str):\n        url = f\"{self.base_url}/v1/requests/{request_id}/progress\"\n        response = self.session.get(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to get progress, detail: {_get_error_string(response)}\"\n            )\n        response_json = response.json()\n        return response_json\n\n    def abort_cluster(self):\n        url = f\"{self.base_url}/v1/clusters\"\n        response = self.session.delete(url, headers=self._headers)\n        if response.status_code != 200:\n            raise RuntimeError(\n                f\"Failed to abort cluster, detail: {_get_error_string(response)}\"\n            )\n        response_json = response.json()\n        return response_json\n"
  },
  {
    "path": "xinference/client/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/client/tests/test_async_client.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport os\nimport time\n\nimport psutil\nimport pytest\n\nfrom ...constants import XINFERENCE_ENV_MODEL_SRC\nfrom ..restful.async_restful_client import AsyncClient as AsyncRESTfulClient\nfrom ..restful.async_restful_client import (\n    AsyncRESTfulChatModelHandle,\n    AsyncRESTfulEmbeddingModelHandle,\n)\n\n\nclass _DummyAsyncResponse:\n    status = 200\n\n    async def json(self):\n        return {\"choices\": [{\"message\": {\"content\": \"ok\"}}]}\n\n    def release(self):\n        return None\n\n    async def wait_for_close(self):\n        return None\n\n\nclass _DummyAsyncSession:\n    def __init__(self):\n        self.last_json = None\n\n    async def post(self, url, json=None, headers=None):\n        self.last_json = json\n        return _DummyAsyncResponse()\n\n    async def close(self):\n        return None\n\n\n@pytest.mark.skipif(os.name == \"nt\", reason=\"Skip windows\")\n@pytest.mark.asyncio\nasync def test_async_RESTful_client(setup):\n    endpoint, _ = setup\n    client = AsyncRESTfulClient(endpoint)\n    assert len(await client.list_models()) == 0\n\n    model_uid = await client.launch_model(\n        model_name=\"qwen1.5-chat\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        quantization=\"q4_0\",\n    )\n    assert len(await client.list_models()) == 1\n\n    model = await client.get_model(model_uid=model_uid)\n    assert isinstance(model, AsyncRESTfulChatModelHandle)\n\n    with pytest.raises(RuntimeError):\n        model = await client.get_model(model_uid=\"test\")\n        assert isinstance(model, AsyncRESTfulChatModelHandle)\n\n    with pytest.raises(RuntimeError):\n        completion = await model.generate({\"max_tokens\": 64})\n\n    completion = await model.generate(\"Once upon a time, there was a very old computer\")\n    assert \"text\" in completion[\"choices\"][0]\n\n    completion = await model.generate(\n        \"Once upon a time, there was a very old computer\", {\"max_tokens\": 64}\n    )\n    assert \"text\" in completion[\"choices\"][0]\n\n    streaming_response = await model.generate(\n        \"Once upon a time, there was a very old computer\",\n        {\"max_tokens\": 64, \"stream\": True},\n    )\n\n    async for chunk in streaming_response:\n        assert \"text\" in chunk[\"choices\"][0]\n\n    with pytest.raises(RuntimeError):\n        completion = await model.chat({\"max_tokens\": 64})\n\n    messages = [{\"role\": \"user\", \"content\": \"What is the capital of France?\"}]\n    completion = await model.chat(messages)\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n\n    async def _check_stream():\n        streaming_response = await model.chat(\n            messages,\n            generate_config={\"stream\": True, \"max_tokens\": 5},\n        )\n        async for chunk in streaming_response:\n            if not chunk[\"choices\"]:\n                assert chunk[\"usage\"]\n                continue\n            assert \"finish_reason\" in chunk[\"choices\"][0]\n            finish_reason = chunk[\"choices\"][0][\"finish_reason\"]\n            if finish_reason is None:\n                assert (\"content\" in chunk[\"choices\"][0][\"delta\"]) or (\n                    \"role\" in chunk[\"choices\"][0][\"delta\"]\n                )\n            else:\n                assert chunk[\"choices\"][0][\"delta\"] == {\"content\": \"\"}\n\n    await _check_stream()\n\n    tasks = [asyncio.create_task(_check_stream()) for _ in range(3)]\n    await asyncio.gather(*tasks)\n\n    await client.terminate_model(model_uid=model_uid)\n    assert len(await client.list_models()) == 0\n\n    model_uid = await client.launch_model(\n        model_name=\"tiny-llama\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=1,\n        model_format=\"ggufv2\",\n        quantization=\"q2_K\",\n    )\n    assert len(await client.list_models()) == 1\n\n    # Test concurrent chat is OK.\n    await model.close()\n    model = await client.get_model(model_uid=model_uid)\n\n    async def _check(stream=False):\n        completion = await model.generate(\n            \"AI is going to\", generate_config={\"stream\": stream, \"max_tokens\": 5}\n        )\n        if stream:\n            count = 0\n            has_text = False\n            async for chunk in completion:\n                assert \"text\" in chunk[\"choices\"][0]\n                if chunk[\"choices\"][0][\"text\"]:\n                    has_text = True\n                count += 1\n            assert has_text\n            assert count > 2\n        else:\n            assert \"text\" in completion[\"choices\"][0]\n            assert len(completion[\"choices\"][0][\"text\"]) > 0\n\n    for stream in [True, False]:\n        # Async concurrent execution of _check\n        tasks = [asyncio.create_task(_check(stream=stream)) for _ in range(3)]\n        await asyncio.gather(*tasks)\n\n    await client.terminate_model(model_uid=model_uid)\n    assert len(await client.list_models()) == 0\n\n    with pytest.raises(RuntimeError):\n        await client.terminate_model(model_uid=model_uid)\n\n    model_uid2 = await client.launch_model(\n        model_name=\"qwen1.5-chat\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        quantization=\"q4_0\",\n    )\n    await client.terminate_model(model_uid=model_uid2)\n    assert len(await client.list_models()) == 0\n    await model.close()\n    await client.close()\n\n\n@pytest.mark.asyncio\nasync def test_async_query_engines_by_name(setup):\n    endpoint, _ = setup\n    client = AsyncRESTfulClient(endpoint)\n\n    assert len(await client.query_engine_by_model_name(\"qwen3\")) > 0\n    assert len(await client.query_engine_by_model_name(\"qwen3\", model_type=None)) > 0\n    assert (\n        len(await client.query_engine_by_model_name(\"bge-m3\", model_type=\"embedding\"))\n        > 0\n    )\n    await client.close()\n\n\n@pytest.mark.skipif(os.name == \"nt\", reason=\"Skip windows\")\n@pytest.mark.asyncio\nasync def test_async_list_cached_models(setup):\n    endpoint, _ = setup\n    client = AsyncRESTfulClient(endpoint)\n    res = await client.list_cached_models()\n    assert len(res) > 0\n    await client.close()\n\n\n@pytest.mark.asyncio\nasync def test_async_RESTful_client_for_embedding(setup):\n    endpoint, _ = setup\n    client = AsyncRESTfulClient(endpoint)\n    assert len(await client.list_models()) == 0\n\n    model_uid = await client.launch_model(model_name=\"gte-base\", model_type=\"embedding\")\n    assert len(await client.list_models()) == 1\n\n    model = await client.get_model(model_uid=model_uid)\n    assert isinstance(model, AsyncRESTfulEmbeddingModelHandle)\n\n    completion = await model.create_embedding(\"write a poem.\")\n    assert len(completion[\"data\"][0][\"embedding\"]) == 768\n\n    await client.terminate_model(model_uid=model_uid)\n    assert len(await client.list_models()) == 0\n    await model.close()\n    await client.close()\n\n\n@pytest.mark.asyncio\nasync def test_async_RESTful_client_custom_model(setup):\n    endpoint, _ = setup\n    client = AsyncRESTfulClient(endpoint)\n\n    model_regs = await client.list_model_registrations(model_type=\"LLM\")\n    assert len(model_regs) > 0\n    for model_reg in model_regs:\n        assert model_reg[\"is_builtin\"]\n\n    model = \"\"\"{\n  \"version\": 2,\n  \"context_length\":2048,\n  \"model_name\": \"custom_model\",\n  \"model_lang\": [\n    \"en\", \"zh\"\n  ],\n  \"model_ability\": [\n    \"chat\"\n  ],\n  \"model_family\": \"other\",\n  \"model_specs\": [\n    {\n      \"model_format\": \"pytorch\",\n      \"model_size_in_billions\": 7,\n      \"quantization\": \"none\",\n      \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n    }\n  ],\n  \"chat_template\": \"xyz\",\n  \"stop_token_ids\": [],\n  \"stop\": []\n}\"\"\"\n    await client.register_model(model_type=\"LLM\", model=model, persist=False)\n\n    data = await client.get_model_registration(\n        model_type=\"LLM\", model_name=\"custom_model\"\n    )\n    assert \"custom_model\" in data[\"model_name\"]\n\n    new_model_regs = await client.list_model_registrations(model_type=\"LLM\")\n    assert len(new_model_regs) == len(model_regs) + 1\n    custom_model_reg = None\n    for model_reg in new_model_regs:\n        if model_reg[\"model_name\"] == \"custom_model\":\n            custom_model_reg = model_reg\n    assert custom_model_reg is not None\n\n    await client.unregister_model(model_type=\"LLM\", model_name=\"custom_model\")\n    new_model_regs = await client.list_model_registrations(model_type=\"LLM\")\n    assert len(new_model_regs) == len(model_regs)\n    custom_model_reg = None\n    for model_reg in new_model_regs:\n        if model_reg[\"model_name\"] == \"custom_model\":\n            custom_model_reg = model_reg\n    assert custom_model_reg is None\n\n    # test register with chat_template using model_family\n    model_with_prompt = \"\"\"{\n  \"version\": 2,\n  \"context_length\":2048,\n  \"model_name\": \"custom_model\",\n  \"model_lang\": [\n    \"en\", \"zh\"\n  ],\n  \"model_ability\": [\n    \"embed\",\n    \"chat\"\n  ],\n  \"model_family\": \"other\",\n  \"model_specs\": [\n    {\n      \"model_format\": \"pytorch\",\n      \"model_size_in_billions\": 7,\n      \"quantization\": \"none\",\n      \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n    }\n  ],\n  \"chat_template\": \"qwen-chat\"\n}\"\"\"\n    await client.register_model(\n        model_type=\"LLM\", model=model_with_prompt, persist=False\n    )\n    await client.unregister_model(model_type=\"LLM\", model_name=\"custom_model\")\n\n    model_with_vision = \"\"\"{\n      \"version\": 2,\n      \"context_length\":2048,\n      \"model_name\": \"custom_model\",\n      \"model_lang\": [\n        \"en\", \"zh\"\n      ],\n      \"model_ability\": [\n        \"chat\",\n        \"vision\"\n      ],\n      \"model_family\": \"other\",\n      \"model_specs\": [\n        {\n          \"model_format\": \"pytorch\",\n          \"model_size_in_billions\": 7,\n          \"quantization\": \"none\",\n          \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n        }\n      ],\n      \"chat_template\": \"xyz123\"\n    }\"\"\"\n    with pytest.raises(RuntimeError):\n        await client.register_model(\n            model_type=\"LLM\", model=model_with_vision, persist=False\n        )\n\n    model_with_tool_call = \"\"\"{\n          \"version\": 2,\n          \"context_length\":2048,\n          \"model_name\": \"custom_model\",\n          \"model_lang\": [\n            \"en\", \"zh\"\n          ],\n          \"model_ability\": [\n            \"chat\",\n            \"tools\"\n          ],\n          \"model_family\": \"other\",\n          \"model_specs\": [\n            {\n              \"model_format\": \"pytorch\",\n              \"model_size_in_billions\": 7,\n              \"quantization\": \"none\",\n              \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n            }\n          ],\n          \"chat_template\": \"xyz123\"\n        }\"\"\"\n    with pytest.raises(RuntimeError):\n        await client.register_model(\n            model_type=\"LLM\", model=model_with_tool_call, persist=False\n        )\n    await client.close()\n\n\n@pytest.mark.asyncio\nasync def test_async_client_from_modelscope(setup):\n    try:\n        os.environ[XINFERENCE_ENV_MODEL_SRC] = \"modelscope\"\n\n        endpoint, _ = setup\n        client = AsyncRESTfulClient(endpoint)\n        assert len(await client.list_models()) == 0\n\n        model_uid = await client.launch_model(\n            model_name=\"tiny-llama\", model_engine=\"llama.cpp\"\n        )\n        assert len(await client.list_models()) == 1\n        model = await client.get_model(model_uid=model_uid)\n        completion = await model.generate(\n            \"write a poem.\", generate_config={\"max_tokens\": 5}\n        )\n        assert \"text\" in completion[\"choices\"][0]\n        assert len(completion[\"choices\"][0][\"text\"]) > 0\n    finally:\n        os.environ.pop(XINFERENCE_ENV_MODEL_SRC)\n    await model.close()\n    await client.close()\n\n\n@pytest.mark.asyncio\nasync def test_async_client_custom_embedding_model(setup):\n    endpoint, _ = setup\n    client = AsyncRESTfulClient(endpoint)\n\n    model_regs = await client.list_model_registrations(model_type=\"embedding\")\n    assert len(model_regs) > 0\n    for model_reg in model_regs:\n        assert model_reg[\"is_builtin\"]\n\n    model = \"\"\"{\n  \"model_name\": \"custom-bge-small-en\",\n  \"dimensions\": 1024,\n  \"max_tokens\": 512,\n  \"language\": [\"en\"],\n  \"model_specs\": [\n    {\n      \"model_format\": \"pytorch\",\n      \"model_id\": \"Xorbits/bge-small-en\",\n      \"quantization\": \"none\"\n    }\n  ]\n}\"\"\"\n    await client.register_model(model_type=\"embedding\", model=model, persist=False)\n\n    data = await client.get_model_registration(\n        model_type=\"embedding\", model_name=\"custom-bge-small-en\"\n    )\n    assert \"custom-bge-small-en\" in data[\"model_name\"]\n\n    new_model_regs = await client.list_model_registrations(model_type=\"embedding\")\n    assert len(new_model_regs) == len(model_regs) + 1\n    custom_model_reg = None\n    for model_reg in new_model_regs:\n        if model_reg[\"model_name\"] == \"custom-bge-small-en\":\n            custom_model_reg = model_reg\n    assert custom_model_reg is not None\n    assert not custom_model_reg[\"is_builtin\"]\n\n    # unregister\n    await client.unregister_model(\n        model_type=\"embedding\", model_name=\"custom-bge-small-en\"\n    )\n    new_model_regs = await client.list_model_registrations(model_type=\"embedding\")\n    assert len(new_model_regs) == len(model_regs)\n    custom_model_reg = None\n    for model_reg in new_model_regs:\n        if model_reg[\"model_name\"] == \"custom-bge-small-en\":\n            custom_model_reg = model_reg\n    assert custom_model_reg is None\n    await client.close()\n\n\n@pytest.mark.asyncio\nasync def test_async_rerank(setup):\n    endpoint, _ = setup\n    client = AsyncRESTfulClient(endpoint)\n\n    model_uid = await client.launch_model(\n        model_name=\"bge-reranker-base\", model_type=\"rerank\"\n    )\n    assert len(await client.list_models()) == 1\n    model = await client.get_model(model_uid)\n    # We want to compute the similarity between the query sentence\n    query = \"A man is eating pasta.\"\n\n    # With all sentences in the corpus\n    corpus = [\n        \"A man is eating food.\",\n        \"A man is eating a piece of bread.\",\n        \"The girl is carrying a baby.\",\n        \"A man is riding a horse.\",\n        \"A woman is playing violin.\",\n        \"Two men pushed carts through the woods.\",\n        \"A man is riding a white horse on an enclosed ground.\",\n        \"A monkey is playing drums.\",\n        \"A cheetah is running behind its prey.\",\n    ]\n\n    scores = await model.rerank(corpus, query, return_documents=True)\n    assert scores[\"results\"][0][\"index\"] == 0\n    assert scores[\"results\"][0][\"document\"][\"text\"] == corpus[0]\n\n    scores = await model.rerank(corpus, query, top_n=3, return_documents=True)\n    assert len(scores[\"results\"]) == 3\n    assert scores[\"results\"][0][\"index\"] == 0\n    assert scores[\"results\"][0][\"document\"][\"text\"] == corpus[0]\n\n    scores = await model.rerank(corpus, query, return_len=True)\n    assert (\n        scores[\"meta\"][\"tokens\"][\"input_tokens\"]\n        == scores[\"meta\"][\"tokens\"][\"output_tokens\"]\n    )\n\n    scores = await model.rerank(corpus, query)\n    assert scores[\"meta\"][\"tokens\"] == None\n\n    # testing long input\n    corpus2 = corpus.copy()\n    corpus2[-1] = corpus2[-1] * 50\n    scores = await model.rerank(corpus2, query, top_n=3, return_documents=True)\n    assert len(scores[\"results\"]) == 3\n    assert scores[\"results\"][0][\"index\"] == 0\n    assert scores[\"results\"][0][\"document\"][\"text\"] == corpus2[0]\n\n    kwargs = {\n        \"invalid\": \"invalid\",\n    }\n    with pytest.raises(RuntimeError):\n        await model.rerank(corpus, query, **kwargs)\n    await model.close()\n    await client.close()\n\n\n@pytest.fixture\ndef set_auto_recover_limit():\n    os.environ[\"XINFERENCE_MODEL_ACTOR_AUTO_RECOVER_LIMIT\"] = \"1\"\n    yield\n    del os.environ[\"XINFERENCE_MODEL_ACTOR_AUTO_RECOVER_LIMIT\"]\n\n\n@pytest.fixture\ndef set_test_oom_error():\n    os.environ[\"XINFERENCE_TEST_OUT_OF_MEMORY_ERROR\"] = \"1\"\n    yield\n    del os.environ[\"XINFERENCE_TEST_OUT_OF_MEMORY_ERROR\"]\n\n\n@pytest.fixture\ndef setup_cluster():\n    import xoscar as xo\n\n    from ...api.restful_api import run_in_subprocess as restful_api_run_in_subprocess\n    from ...conftest import TEST_FILE_LOGGING_CONF, TEST_LOGGING_CONF, api_health_check\n    from ...deploy.local import health_check\n    from ...deploy.local import run_in_subprocess as supervisor_run_in_subprocess\n\n    supervisor_address = f\"localhost:{xo.utils.get_next_port()}\"\n    local_cluster = supervisor_run_in_subprocess(\n        supervisor_address, None, None, TEST_LOGGING_CONF\n    )\n\n    if not health_check(address=supervisor_address, max_attempts=20, sleep_interval=1):\n        raise RuntimeError(\"Supervisor is not available after multiple attempts\")\n\n    try:\n        port = xo.utils.get_next_port()\n        restful_api_proc = restful_api_run_in_subprocess(\n            supervisor_address,\n            host=\"localhost\",\n            port=port,\n            logging_conf=TEST_FILE_LOGGING_CONF,\n        )\n        endpoint = f\"http://localhost:{port}\"\n        if not api_health_check(endpoint, max_attempts=10, sleep_interval=5):\n            raise RuntimeError(\"Endpoint is not available after multiple attempts\")\n\n        yield f\"http://localhost:{port}\", supervisor_address\n        restful_api_proc.kill()\n    finally:\n        local_cluster.kill()\n\n\n@pytest.mark.asyncio\nasync def test_auto_recover(set_auto_recover_limit, setup_cluster):\n    endpoint, _ = setup_cluster\n    current_proc = psutil.Process()\n    chilren_proc = set(current_proc.children(recursive=True))\n    client = AsyncRESTfulClient(endpoint)\n\n    model_uid = await client.launch_model(\n        model_name=\"qwen1.5-chat\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        quantization=\"q4_0\",\n    )\n    new_children_proc = set(current_proc.children(recursive=True))\n    model_proc = next(iter(new_children_proc - chilren_proc))\n    assert len(await client.list_models()) == 1\n\n    model = await client.get_model(model_uid=model_uid)\n    assert isinstance(model, AsyncRESTfulChatModelHandle)\n\n    completion = await model.generate(\"Once upon a time, there was a very old computer\")\n    assert \"text\" in completion[\"choices\"][0]\n\n    model_proc.kill()\n\n    for _ in range(60):\n        try:\n            completion = await model.generate(\n                \"Once upon a time, there was a very old computer\", {\"max_tokens\": 64}\n            )\n            assert \"text\" in completion[\"choices\"][0]\n            break\n        except Exception:\n            time.sleep(1)\n    else:\n        assert False\n    await model.close()\n    await client.close()\n\n\n@pytest.mark.asyncio\nasync def test_model_error(set_test_oom_error, setup_cluster):\n    endpoint, _ = setup_cluster\n    client = AsyncRESTfulClient(endpoint)\n\n    model_uid = await client.launch_model(\n        model_name=\"qwen1.5-chat\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        quantization=\"q4_0\",\n    )\n    assert len(await client.list_models()) == 1\n\n    model = await client.get_model(model_uid=model_uid)\n    assert isinstance(model, AsyncRESTfulChatModelHandle)\n\n    with pytest.raises(RuntimeError):\n        await model.generate(\"Once upon a time, there was a very old computer\")\n    await model.close()\n    await client.close()\n\n\n@pytest.mark.asyncio\nasync def test_async_restful_chat_enable_thinking_injected():\n    handle = AsyncRESTfulChatModelHandle.__new__(AsyncRESTfulChatModelHandle)\n    handle._model_uid = \"test-model\"\n    handle._base_url = \"http://localhost\"\n    handle.auth_headers = {}\n    handle.session = _DummyAsyncSession()\n\n    messages = [{\"role\": \"user\", \"content\": \"hi\"}]\n    await handle.chat(messages, enable_thinking=True)\n\n    assert handle.session.last_json[\"chat_template_kwargs\"] == {\n        \"enable_thinking\": True,\n        \"thinking\": True,\n    }\n    handle.session = None\n"
  },
  {
    "path": "xinference/client/tests/test_async_client_with_auth.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport pytest\n\nfrom ..restful.async_restful_client import AsyncClient as AsyncRESTfulClient\nfrom ..restful.async_restful_client import AsyncRESTfulEmbeddingModelHandle\n\n\n@pytest.mark.asyncio\nasync def test_async_client_auth(setup_with_auth):\n    endpoint, _ = setup_with_auth\n    client = AsyncRESTfulClient(endpoint)\n    with pytest.raises(RuntimeError):\n        await client.list_models()\n\n    await client.login(\"user2\", \"pass2\")\n    assert len(await client.list_models()) == 0\n\n    with pytest.raises(RuntimeError):\n        await client.launch_model(\n            model_name=\"bge-small-en-v1.5\", model_type=\"embedding\"\n        )\n\n    await client.login(\"user3\", \"pass3\")\n    model_uid = await client.launch_model(\n        model_name=\"bge-small-en-v1.5\", model_type=\"embedding\"\n    )\n    model = await client.get_model(model_uid=model_uid)\n    assert isinstance(model, AsyncRESTfulEmbeddingModelHandle)\n\n    completion = await model.create_embedding(\"write a poem.\")\n    assert len(completion[\"data\"][0][\"embedding\"]) == 384\n\n    with pytest.raises(RuntimeError):\n        await client.terminate_model(model_uid=model_uid)\n\n    await client.login(\"user1\", \"pass1\")\n    assert len(await client.list_models()) == 1\n    await client.terminate_model(model_uid=model_uid)\n    assert len(await client.list_models()) == 0\n\n    # test with api-key\n    client = AsyncRESTfulClient(endpoint, api_key=\"sk-wrongapikey12\")\n    with pytest.raises(RuntimeError):\n        await client.list_models()\n\n    client = AsyncRESTfulClient(endpoint, api_key=\"sk-72tkvudyGLPMi\")\n    assert len(await client.list_models()) == 0\n\n    with pytest.raises(RuntimeError):\n        await client.launch_model(\n            model_name=\"bge-small-en-v1.5\", model_type=\"embedding\"\n        )\n\n    client = AsyncRESTfulClient(endpoint, api_key=\"sk-ZOTLIY4gt9w11\")\n    model_uid = await client.launch_model(\n        model_name=\"bge-small-en-v1.5\", model_type=\"embedding\"\n    )\n    model = await client.get_model(model_uid=model_uid)\n    assert isinstance(model, AsyncRESTfulEmbeddingModelHandle)\n\n    completion = await model.create_embedding(\"write a poem.\")\n    assert len(completion[\"data\"][0][\"embedding\"]) == 384\n\n    with pytest.raises(RuntimeError):\n        await client.terminate_model(model_uid=model_uid)\n\n    client = AsyncRESTfulClient(endpoint, api_key=\"sk-3sjLbdwqAhhAF\")\n    assert len(await client.list_models()) == 1\n\n    # test with openai SDK\n    from openai import AsyncOpenAI, AuthenticationError, PermissionDeniedError\n\n    client_ai = AsyncOpenAI(base_url=endpoint + \"/v1\", api_key=\"sk-wrongapikey12\")\n    with pytest.raises(AuthenticationError):\n        await client_ai.models.list()\n\n    client_ai = AsyncOpenAI(base_url=endpoint + \"/v1\", api_key=\"sk-72tkvudyGLPMi\")\n    assert len((await client_ai.models.list()).data) == 1\n    with pytest.raises(PermissionDeniedError):\n        chat_completion = await client_ai.embeddings.create(\n            model=\"bge-small-en-v1.5\",\n            input=\"write a poem.\",\n        )\n\n    client_ai = AsyncOpenAI(base_url=endpoint + \"/v1\", api_key=\"sk-ZOTLIY4gt9w11\")\n    chat_completion = await client_ai.embeddings.create(\n        model=\"bge-small-en-v1.5\",\n        input=\"write a poem.\",\n    )\n    assert len(chat_completion.data[0].embedding) == 384\n\n    client_ai = AsyncOpenAI(base_url=endpoint + \"/v1\", api_key=\"sk-3sjLbdwqAhhAF\")\n    await client.terminate_model(model_uid)\n    assert len(await client.list_models()) == 0\n    assert len((await client_ai.models.list()).data) == 0\n    await client.close()\n"
  },
  {
    "path": "xinference/client/tests/test_client.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport os\nimport time\nfrom concurrent.futures import ThreadPoolExecutor\n\nimport psutil\nimport pytest\nimport requests\n\nfrom ...constants import XINFERENCE_ENV_MODEL_SRC\nfrom ..restful.restful_client import Client as RESTfulClient\nfrom ..restful.restful_client import (\n    RESTfulChatModelHandle,\n    RESTfulEmbeddingModelHandle,\n    _get_error_string,\n)\n\n\nclass _DummyResponse:\n    status_code = 200\n\n    def json(self):\n        return {\"choices\": [{\"message\": {\"content\": \"ok\"}}]}\n\n\nclass _DummySession:\n    def __init__(self):\n        self.last_json = None\n\n    def post(self, url, json=None, stream=None, headers=None):\n        self.last_json = json\n        return _DummyResponse()\n\n    def close(self):\n        return None\n\n\n@pytest.mark.skipif(os.name == \"nt\", reason=\"Skip windows\")\ndef test_RESTful_client(setup):\n    endpoint, _ = setup\n    client = RESTfulClient(endpoint)\n    assert len(client.list_models()) == 0\n\n    model_uid = client.launch_model(\n        model_name=\"qwen2.5-instruct\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        model_format=\"ggufv2\",\n        quantization=\"q4_0\",\n    )\n    assert len(client.list_models()) == 1\n\n    model = client.get_model(model_uid=model_uid)\n    assert isinstance(model, RESTfulChatModelHandle)\n\n    with pytest.raises(RuntimeError):\n        model = client.get_model(model_uid=\"test\")\n        assert isinstance(model, RESTfulChatModelHandle)\n\n    with pytest.raises(RuntimeError):\n        completion = model.generate({\"max_tokens\": 64})\n\n    completion = model.generate(\"Once upon a time, there was a very old computer\")\n    assert \"text\" in completion[\"choices\"][0]\n\n    completion = model.generate(\n        \"Once upon a time, there was a very old computer\", {\"max_tokens\": 64}\n    )\n    assert \"text\" in completion[\"choices\"][0]\n\n    streaming_response = model.generate(\n        \"Once upon a time, there was a very old computer\",\n        {\"max_tokens\": 64, \"stream\": True},\n    )\n\n    for chunk in streaming_response:\n        assert \"text\" in chunk[\"choices\"][0]\n\n    with pytest.raises(RuntimeError):\n        completion = model.chat({\"max_tokens\": 64})\n\n    messages = [{\"role\": \"user\", \"content\": \"What is the capital of France?\"}]\n    completion = model.chat(messages)\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n\n    def _check_stream():\n        streaming_response = model.chat(\n            messages,\n            generate_config={\"stream\": True, \"max_tokens\": 5},\n        )\n        for chunk in streaming_response:\n            if not chunk[\"choices\"]:\n                assert chunk[\"usage\"]\n                continue\n            assert \"finish_reason\" in chunk[\"choices\"][0]\n            finish_reason = chunk[\"choices\"][0][\"finish_reason\"]\n            if finish_reason is None:\n                assert (\"content\" in chunk[\"choices\"][0][\"delta\"]) or (\n                    \"role\" in chunk[\"choices\"][0][\"delta\"]\n                )\n            else:\n                assert chunk[\"choices\"][0][\"delta\"] == {\"content\": \"\"}\n\n    _check_stream()\n\n    results = []\n    with ThreadPoolExecutor() as executor:\n        for _ in range(2):\n            r = executor.submit(_check_stream)\n            results.append(r)\n\n    for r in results:\n        r.result()\n\n    # After iteration finish, we can iterate again.\n    _check_stream()\n\n    client.terminate_model(model_uid=model_uid)\n    assert len(client.list_models()) == 0\n\n    model_uid = client.launch_model(\n        model_name=\"qwen2.5-instruct\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        model_format=\"ggufv2\",\n        quantization=\"q4_0\",\n    )\n    assert len(client.list_models()) == 1\n\n    # Test concurrent chat is OK.\n    model = client.get_model(model_uid=model_uid)\n\n    def _check(stream=False):\n        completion = model.generate(\n            \"AI is going to\", generate_config={\"stream\": stream, \"max_tokens\": 5}\n        )\n        if stream:\n            count = 0\n            has_text = False\n            for chunk in completion:\n                assert \"text\" in chunk[\"choices\"][0]\n                if chunk[\"choices\"][0][\"text\"]:\n                    has_text = True\n                count += 1\n            assert has_text\n            assert count > 2\n        else:\n            assert \"text\" in completion[\"choices\"][0]\n            assert len(completion[\"choices\"][0][\"text\"]) > 0\n\n    for stream in [True, False]:\n        results = []\n        with ThreadPoolExecutor() as executor:\n            for _ in range(3):\n                r = executor.submit(_check, stream=stream)\n                results.append(r)\n        for r in results:\n            r.result()\n\n    client.terminate_model(model_uid=model_uid)\n    assert len(client.list_models()) == 0\n\n    with pytest.raises(RuntimeError):\n        client.terminate_model(model_uid=model_uid)\n\n    model_uid2 = client.launch_model(\n        model_name=\"qwen2.5-instruct\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        model_format=\"ggufv2\",\n        quantization=\"q4_0\",\n    )\n\n    client.terminate_model(model_uid=model_uid2)\n    assert len(client.list_models()) == 0\n\n\ndef test_query_engines_by_name(setup):\n    endpoint, _ = setup\n    client = RESTfulClient(endpoint)\n\n    assert len(client.query_engine_by_model_name(\"qwen3\")) > 0\n    assert len(client.query_engine_by_model_name(\"qwen3\", model_type=None)) > 0\n    assert len(client.query_engine_by_model_name(\"bge-m3\", model_type=\"embedding\")) > 0\n\n\n@pytest.mark.skipif(os.name == \"nt\", reason=\"Skip windows\")\ndef test_list_cached_models(setup):\n    endpoint, _ = setup\n    client = RESTfulClient(endpoint)\n    res = client.list_cached_models()\n    assert len(res) > 0\n\n\ndef test_RESTful_client_for_embedding(setup):\n    endpoint, _ = setup\n    client = RESTfulClient(endpoint)\n    assert len(client.list_models()) == 0\n\n    model_uid = client.launch_model(model_name=\"gte-base\", model_type=\"embedding\")\n    assert len(client.list_models()) == 1\n\n    model = client.get_model(model_uid=model_uid)\n    assert isinstance(model, RESTfulEmbeddingModelHandle)\n\n    completion = model.create_embedding(\"write a poem.\")\n    assert len(completion[\"data\"][0][\"embedding\"]) == 768\n\n    client.terminate_model(model_uid=model_uid)\n    assert len(client.list_models()) == 0\n\n\ndef test_RESTful_client_custom_model(setup):\n    endpoint, _ = setup\n    client = RESTfulClient(endpoint)\n\n    model_regs = client.list_model_registrations(model_type=\"LLM\")\n    assert len(model_regs) > 0\n    for model_reg in model_regs:\n        assert model_reg[\"is_builtin\"]\n\n    model = \"\"\"{\n  \"version\": 2,\n  \"context_length\":2048,\n  \"model_name\": \"custom_model\",\n  \"model_lang\": [\n    \"en\", \"zh\"\n  ],\n  \"model_ability\": [\n    \"chat\"\n  ],\n  \"model_family\": \"other\",\n  \"model_specs\": [\n    {\n      \"model_format\": \"pytorch\",\n      \"model_size_in_billions\": 7,\n      \"quantization\": \"none\",\n      \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n    }\n  ],\n  \"chat_template\": \"xyz\",\n  \"stop_token_ids\": [],\n  \"stop\": []\n}\"\"\"\n    client.register_model(model_type=\"LLM\", model=model, persist=False)\n\n    data = client.get_model_registration(model_type=\"LLM\", model_name=\"custom_model\")\n    assert \"custom_model\" in data[\"model_name\"]\n\n    new_model_regs = client.list_model_registrations(model_type=\"LLM\")\n    assert len(new_model_regs) == len(model_regs) + 1\n    custom_model_reg = None\n    for model_reg in new_model_regs:\n        if model_reg[\"model_name\"] == \"custom_model\":\n            custom_model_reg = model_reg\n    assert custom_model_reg is not None\n\n    client.unregister_model(model_type=\"LLM\", model_name=\"custom_model\")\n    new_model_regs = client.list_model_registrations(model_type=\"LLM\")\n    assert len(new_model_regs) == len(model_regs)\n    custom_model_reg = None\n    for model_reg in new_model_regs:\n        if model_reg[\"model_name\"] == \"custom_model\":\n            custom_model_reg = model_reg\n    assert custom_model_reg is None\n\n    # test register with chat_template using model_family\n    model_with_prompt = \"\"\"{\n  \"version\": 2,\n  \"context_length\":2048,\n  \"model_name\": \"custom_model\",\n  \"model_lang\": [\n    \"en\", \"zh\"\n  ],\n  \"model_ability\": [\n    \"embed\",\n    \"chat\"\n  ],\n  \"model_family\": \"other\",\n  \"model_specs\": [\n    {\n      \"model_format\": \"pytorch\",\n      \"model_size_in_billions\": 7,\n      \"quantization\": \"none\",\n      \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n    }\n  ],\n  \"chat_template\": \"qwen-chat\"\n}\"\"\"\n    client.register_model(model_type=\"LLM\", model=model_with_prompt, persist=False)\n    client.unregister_model(model_type=\"LLM\", model_name=\"custom_model\")\n\n    model_with_vision = \"\"\"{\n      \"version\": 2,\n      \"context_length\":2048,\n      \"model_name\": \"custom_model\",\n      \"model_lang\": [\n        \"en\", \"zh\"\n      ],\n      \"model_ability\": [\n        \"chat\",\n        \"vision\"\n      ],\n      \"model_family\": \"other\",\n      \"model_specs\": [\n        {\n          \"model_format\": \"pytorch\",\n          \"model_size_in_billions\": 7,\n          \"quantization\": \"none\",\n          \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n        }\n      ],\n      \"chat_template\": \"xyz123\"\n    }\"\"\"\n    with pytest.raises(RuntimeError):\n        client.register_model(model_type=\"LLM\", model=model_with_vision, persist=False)\n\n    model_with_tool_call = \"\"\"{\n          \"version\": 2,\n          \"context_length\":2048,\n          \"model_name\": \"custom_model\",\n          \"model_lang\": [\n            \"en\", \"zh\"\n          ],\n          \"model_ability\": [\n            \"chat\",\n            \"tools\"\n          ],\n          \"model_family\": \"other\",\n          \"model_specs\": [\n            {\n              \"model_format\": \"pytorch\",\n              \"model_size_in_billions\": 7,\n              \"quantization\": \"none\",\n              \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n            }\n          ],\n          \"chat_template\": \"xyz123\"\n        }\"\"\"\n    with pytest.raises(RuntimeError):\n        client.register_model(\n            model_type=\"LLM\", model=model_with_tool_call, persist=False\n        )\n\n\ndef test_client_from_modelscope(setup):\n    try:\n        os.environ[XINFERENCE_ENV_MODEL_SRC] = \"modelscope\"\n\n        endpoint, _ = setup\n        client = RESTfulClient(endpoint)\n        assert len(client.list_models()) == 0\n\n        model_uid = client.launch_model(\n            model_name=\"tiny-llama\", model_engine=\"llama.cpp\"\n        )\n        assert len(client.list_models()) == 1\n        model = client.get_model(model_uid=model_uid)\n        completion = model.generate(\"write a poem.\", generate_config={\"max_tokens\": 5})\n        assert \"text\" in completion[\"choices\"][0]\n        assert len(completion[\"choices\"][0][\"text\"]) > 0\n    finally:\n        os.environ.pop(XINFERENCE_ENV_MODEL_SRC)\n\n\ndef test_client_error():\n    r = requests.Response()\n    r.url = \"0.0.0.0:1234\"\n    r.status_code = 502\n    r.reason = \"Bad Gateway\"\n    err = _get_error_string(r)\n    assert \"502 Server Error: Bad Gateway for url: 0.0.0.0:1234\" == err\n    r._content = json.dumps({\"detail\": \"Test error\"}).encode(\"utf-8\")\n    err = _get_error_string(r)\n    assert \"Test error\" == err\n\n\ndef test_client_custom_embedding_model(setup):\n    endpoint, _ = setup\n    client = RESTfulClient(endpoint)\n\n    model_regs = client.list_model_registrations(model_type=\"embedding\")\n    assert len(model_regs) > 0\n    for model_reg in model_regs:\n        assert model_reg[\"is_builtin\"]\n\n    model = \"\"\"{\n  \"model_name\": \"custom-bge-small-en\",\n  \"dimensions\": 1024,\n  \"max_tokens\": 512,\n  \"language\": [\"en\"],\n  \"model_specs\": [\n    {\n      \"model_format\": \"pytorch\",\n      \"model_id\": \"Xorbits/bge-small-en\",\n      \"quantization\": \"none\"\n    }\n  ]\n}\"\"\"\n    client.register_model(model_type=\"embedding\", model=model, persist=False)\n\n    data = client.get_model_registration(\n        model_type=\"embedding\", model_name=\"custom-bge-small-en\"\n    )\n    assert \"custom-bge-small-en\" in data[\"model_name\"]\n\n    new_model_regs = client.list_model_registrations(model_type=\"embedding\")\n    assert len(new_model_regs) == len(model_regs) + 1\n    custom_model_reg = None\n    for model_reg in new_model_regs:\n        if model_reg[\"model_name\"] == \"custom-bge-small-en\":\n            custom_model_reg = model_reg\n    assert custom_model_reg is not None\n    assert not custom_model_reg[\"is_builtin\"]\n\n    # unregister\n    client.unregister_model(model_type=\"embedding\", model_name=\"custom-bge-small-en\")\n    new_model_regs = client.list_model_registrations(model_type=\"embedding\")\n    assert len(new_model_regs) == len(model_regs)\n    custom_model_reg = None\n    for model_reg in new_model_regs:\n        if model_reg[\"model_name\"] == \"custom-bge-small-en\":\n            custom_model_reg = model_reg\n    assert custom_model_reg is None\n\n\n@pytest.fixture\ndef set_auto_recover_limit():\n    os.environ[\"XINFERENCE_MODEL_ACTOR_AUTO_RECOVER_LIMIT\"] = \"1\"\n    yield\n    del os.environ[\"XINFERENCE_MODEL_ACTOR_AUTO_RECOVER_LIMIT\"]\n\n\n@pytest.fixture\ndef set_test_oom_error():\n    os.environ[\"XINFERENCE_TEST_OUT_OF_MEMORY_ERROR\"] = \"1\"\n    yield\n    del os.environ[\"XINFERENCE_TEST_OUT_OF_MEMORY_ERROR\"]\n\n\n@pytest.fixture\ndef setup_cluster():\n    import xoscar as xo\n\n    from ...api.restful_api import run_in_subprocess as restful_api_run_in_subprocess\n    from ...conftest import TEST_FILE_LOGGING_CONF, TEST_LOGGING_CONF, api_health_check\n    from ...deploy.local import health_check\n    from ...deploy.local import run_in_subprocess as supervisor_run_in_subprocess\n\n    supervisor_address = f\"localhost:{xo.utils.get_next_port()}\"\n    local_cluster = supervisor_run_in_subprocess(\n        supervisor_address, None, None, TEST_LOGGING_CONF\n    )\n\n    if not health_check(address=supervisor_address, max_attempts=20, sleep_interval=1):\n        raise RuntimeError(\"Supervisor is not available after multiple attempts\")\n\n    try:\n        port = xo.utils.get_next_port()\n        restful_api_proc = restful_api_run_in_subprocess(\n            supervisor_address,\n            host=\"localhost\",\n            port=port,\n            logging_conf=TEST_FILE_LOGGING_CONF,\n        )\n        endpoint = f\"http://localhost:{port}\"\n        if not api_health_check(endpoint, max_attempts=10, sleep_interval=5):\n            raise RuntimeError(\"Endpoint is not available after multiple attempts\")\n\n        yield f\"http://localhost:{port}\", supervisor_address\n        restful_api_proc.kill()\n    finally:\n        local_cluster.kill()\n\n\ndef test_auto_recover(set_auto_recover_limit, setup_cluster):\n    endpoint, _ = setup_cluster\n    current_proc = psutil.Process()\n    chilren_proc = set(current_proc.children(recursive=True))\n    client = RESTfulClient(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"qwen2.5-instruct\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        model_format=\"ggufv2\",\n        quantization=\"q4_0\",\n    )\n    new_children_proc = set(current_proc.children(recursive=True))\n    model_proc = next(iter(new_children_proc - chilren_proc))\n    assert len(client.list_models()) == 1\n\n    model = client.get_model(model_uid=model_uid)\n    assert isinstance(model, RESTfulChatModelHandle)\n\n    completion = model.generate(\"Once upon a time, there was a very old computer\")\n    assert \"text\" in completion[\"choices\"][0]\n\n    model_proc.kill()\n\n    for _ in range(60):\n        try:\n            completion = model.generate(\n                \"Once upon a time, there was a very old computer\", {\"max_tokens\": 64}\n            )\n            assert \"text\" in completion[\"choices\"][0]\n            break\n        except Exception:\n            time.sleep(1)\n    else:\n        assert False\n\n\ndef test_model_error(set_test_oom_error, setup_cluster):\n    endpoint, _ = setup_cluster\n    client = RESTfulClient(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"qwen2.5-instruct\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        model_format=\"ggufv2\",\n        quantization=\"q4_0\",\n    )\n    assert len(client.list_models()) == 1\n\n    model = client.get_model(model_uid=model_uid)\n    assert isinstance(model, RESTfulChatModelHandle)\n\n    with pytest.raises(RuntimeError, match=\"Model actor is out of memory\"):\n        model.generate(\"Once upon a time, there was a very old computer\")\n\n\ndef test_restful_chat_enable_thinking_injected():\n    handle = RESTfulChatModelHandle(\"test-model\", \"http://localhost\", {})\n    dummy_session = _DummySession()\n    handle.session = dummy_session\n\n    messages = [{\"role\": \"user\", \"content\": \"hi\"}]\n    handle.chat(messages, enable_thinking=False)\n\n    assert dummy_session.last_json[\"chat_template_kwargs\"] == {\n        \"enable_thinking\": False,\n        \"thinking\": False,\n    }\n    handle.session = None\n"
  },
  {
    "path": "xinference/client/tests/test_client_with_auth.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport pytest\n\nfrom ..restful.restful_client import Client as RESTfulClient\nfrom ..restful.restful_client import RESTfulEmbeddingModelHandle\n\n\ndef test_client_auth(setup_with_auth):\n    endpoint, _ = setup_with_auth\n    client = RESTfulClient(endpoint)\n    with pytest.raises(RuntimeError):\n        client.list_models()\n\n    client.login(\"user2\", \"pass2\")\n    assert len(client.list_models()) == 0\n\n    with pytest.raises(RuntimeError):\n        client.launch_model(model_name=\"bge-small-en-v1.5\", model_type=\"embedding\")\n\n    client.login(\"user3\", \"pass3\")\n    model_uid = client.launch_model(\n        model_name=\"bge-small-en-v1.5\", model_type=\"embedding\"\n    )\n    model = client.get_model(model_uid=model_uid)\n    assert isinstance(model, RESTfulEmbeddingModelHandle)\n\n    completion = model.create_embedding(\"write a poem.\")\n    assert len(completion[\"data\"][0][\"embedding\"]) == 384\n\n    with pytest.raises(RuntimeError):\n        client.terminate_model(model_uid=model_uid)\n\n    client.login(\"user1\", \"pass1\")\n    assert len(client.list_models()) == 1\n    client.terminate_model(model_uid=model_uid)\n    assert len(client.list_models()) == 0\n\n    # test with api-key\n    client = RESTfulClient(endpoint, api_key=\"sk-wrongapikey12\")\n    with pytest.raises(RuntimeError):\n        client.list_models()\n\n    client = RESTfulClient(endpoint, api_key=\"sk-72tkvudyGLPMi\")\n    assert len(client.list_models()) == 0\n\n    with pytest.raises(RuntimeError):\n        client.launch_model(model_name=\"bge-small-en-v1.5\", model_type=\"embedding\")\n\n    client = RESTfulClient(endpoint, api_key=\"sk-ZOTLIY4gt9w11\")\n    model_uid = client.launch_model(\n        model_name=\"bge-small-en-v1.5\", model_type=\"embedding\"\n    )\n    model = client.get_model(model_uid=model_uid)\n    assert isinstance(model, RESTfulEmbeddingModelHandle)\n\n    completion = model.create_embedding(\"write a poem.\")\n    assert len(completion[\"data\"][0][\"embedding\"]) == 384\n\n    with pytest.raises(RuntimeError):\n        client.terminate_model(model_uid=model_uid)\n\n    client = RESTfulClient(endpoint, api_key=\"sk-3sjLbdwqAhhAF\")\n    assert len(client.list_models()) == 1\n\n    # test with openai SDK\n    from openai import AuthenticationError, OpenAI, PermissionDeniedError\n\n    client_ai = OpenAI(base_url=endpoint + \"/v1\", api_key=\"sk-wrongapikey12\")\n    with pytest.raises(AuthenticationError):\n        client_ai.models.list()\n\n    client_ai = OpenAI(base_url=endpoint + \"/v1\", api_key=\"sk-72tkvudyGLPMi\")\n    assert len(client_ai.models.list().data) == 1\n    with pytest.raises(PermissionDeniedError):\n        chat_completion = client_ai.embeddings.create(\n            model=\"bge-small-en-v1.5\",\n            input=\"write a poem.\",\n        )\n\n    client_ai = OpenAI(base_url=endpoint + \"/v1\", api_key=\"sk-ZOTLIY4gt9w11\")\n    chat_completion = client_ai.embeddings.create(\n        model=\"bge-small-en-v1.5\",\n        input=\"write a poem.\",\n    )\n    assert len(chat_completion.data[0].embedding) == 384\n\n    client_ai = OpenAI(base_url=endpoint + \"/v1\", api_key=\"sk-3sjLbdwqAhhAF\")\n    client.terminate_model(model_uid)\n    assert len(client.list_models()) == 0\n    assert len(client_ai.models.list().data) == 0\n"
  },
  {
    "path": "xinference/conftest.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport json\nimport logging\nimport multiprocessing\nimport os\nimport signal\nimport sys\nimport tempfile\nfrom typing import Dict, Optional\n\nimport pytest\nimport xoscar as xo\n\n# skip health checking for CI\nif os.environ.get(\"GITHUB_ACTIONS\"):\n    os.environ[\"XINFERENCE_DISABLE_HEALTH_CHECK\"] = \"1\"\n\nfrom .api.oauth2.types import AuthConfig, AuthStartupConfig, User\nfrom .constants import XINFERENCE_LOG_BACKUP_COUNT, XINFERENCE_LOG_MAX_BYTES\nfrom .core.supervisor import SupervisorActor\nfrom .deploy.utils import create_worker_actor_pool, get_log_file, get_timestamp_ms\nfrom .deploy.worker import start_worker_components\n\nTEST_LOGGING_CONF = {\n    \"version\": 1,\n    \"disable_existing_loggers\": False,\n    \"formatters\": {\n        \"formatter\": {\n            \"format\": \"%(asctime)s %(name)-12s %(process)d %(levelname)-8s %(message)s\",\n        },\n    },\n    \"handlers\": {\n        \"stream_handler\": {\n            \"class\": \"logging.StreamHandler\",\n            \"formatter\": \"formatter\",\n            \"level\": \"DEBUG\",\n            \"stream\": \"ext://sys.stderr\",\n        },\n    },\n    \"loggers\": {\n        \"xinference\": {\n            \"handlers\": [\"stream_handler\"],\n            \"level\": \"DEBUG\",\n            \"propagate\": False,\n        }\n    },\n}\n\nTEST_LOG_FILE_PATH = get_log_file(f\"test_{get_timestamp_ms()}\")\nif os.name == \"nt\":\n    TEST_LOG_FILE_PATH = TEST_LOG_FILE_PATH.encode(\"unicode-escape\").decode()\n\n\nTEST_FILE_LOGGING_CONF = {\n    \"version\": 1,\n    \"disable_existing_loggers\": False,\n    \"formatters\": {\n        \"formatter\": {\n            \"format\": \"%(asctime)s %(name)-12s %(process)d %(levelname)-8s %(message)s\"\n        },\n    },\n    \"handlers\": {\n        \"stream_handler\": {\n            \"class\": \"logging.StreamHandler\",\n            \"formatter\": \"formatter\",\n            \"level\": \"DEBUG\",\n            \"stream\": \"ext://sys.stderr\",\n        },\n        \"file_handler\": {\n            \"class\": \"logging.handlers.RotatingFileHandler\",\n            \"formatter\": \"formatter\",\n            \"level\": \"DEBUG\",\n            \"filename\": TEST_LOG_FILE_PATH,\n            \"mode\": \"a\",\n            \"maxBytes\": XINFERENCE_LOG_MAX_BYTES,\n            \"backupCount\": XINFERENCE_LOG_BACKUP_COUNT,\n            \"encoding\": \"utf8\",\n        },\n    },\n    \"loggers\": {\n        \"xinference\": {\n            \"handlers\": [\"stream_handler\", \"file_handler\"],\n            \"level\": \"DEBUG\",\n            \"propagate\": False,\n        }\n    },\n}\n\n\ndef api_health_check(endpoint: str, max_attempts: int, sleep_interval: int = 3):\n    import time\n\n    import requests\n\n    attempts = 0\n    while attempts < max_attempts:\n        time.sleep(sleep_interval)\n        try:\n            response = requests.get(f\"{endpoint}/status\")\n            if response.status_code == 200:\n                return True\n        except requests.RequestException as e:\n            print(f\"Error while checking endpoint: {e}\")\n\n        attempts += 1\n        if attempts < max_attempts:\n            print(\n                f\"Endpoint not available, will try {max_attempts - attempts} more times\"\n            )\n\n    return False\n\n\nasync def _start_test_cluster(\n    address: str,\n    logging_conf: Optional[Dict] = None,\n):\n    logging.config.dictConfig(logging_conf)  # type: ignore\n    pool = None\n    try:\n        pool = await create_worker_actor_pool(\n            address=f\"test://{address}\", logging_conf=logging_conf\n        )\n        await xo.create_actor(\n            SupervisorActor, address=address, uid=SupervisorActor.default_uid()\n        )\n        await start_worker_components(\n            address=address,\n            supervisor_address=address,\n            main_pool=pool,\n            metrics_exporter_host=None,\n            metrics_exporter_port=None,\n        )\n        await pool.join()\n    except asyncio.CancelledError:\n        if pool is not None:\n            await pool.stop()\n\n\ndef run_test_cluster(address: str, logging_conf: Optional[Dict] = None):\n    def sigterm_handler(signum, frame):\n        sys.exit(0)\n\n    signal.signal(signal.SIGTERM, sigterm_handler)\n\n    loop = asyncio.get_event_loop()\n    task = loop.create_task(\n        _start_test_cluster(address=address, logging_conf=logging_conf)\n    )\n    loop.run_until_complete(task)\n\n\ndef run_test_cluster_in_subprocess(\n    address: str, logging_conf: Optional[Dict] = None\n) -> multiprocessing.Process:\n    # prevent re-init cuda error.\n    multiprocessing.set_start_method(method=\"spawn\", force=True)\n\n    p = multiprocessing.Process(target=run_test_cluster, args=(address, logging_conf))\n    p.start()\n    return p\n\n\n@pytest.fixture\ndef setup():\n    from .api.restful_api import run_in_subprocess as run_restful_api\n    from .deploy.utils import health_check as cluster_health_check\n\n    logging.config.dictConfig(TEST_LOGGING_CONF)  # type: ignore\n\n    supervisor_addr = f\"localhost:{xo.utils.get_next_port()}\"\n    local_cluster_proc = run_test_cluster_in_subprocess(\n        supervisor_addr, TEST_LOGGING_CONF\n    )\n    if not cluster_health_check(supervisor_addr, max_attempts=10, sleep_interval=5):\n        raise RuntimeError(\"Cluster is not available after multiple attempts\")\n\n    port = xo.utils.get_next_port()\n    restful_api_proc = run_restful_api(\n        supervisor_addr,\n        host=\"localhost\",\n        port=port,\n        logging_conf=TEST_LOGGING_CONF,\n    )\n    endpoint = f\"http://localhost:{port}\"\n    if not api_health_check(endpoint, max_attempts=10, sleep_interval=5):\n        raise RuntimeError(\"Endpoint is not available after multiple attempts\")\n\n    try:\n        yield f\"http://localhost:{port}\", supervisor_addr\n    finally:\n        local_cluster_proc.kill()\n        restful_api_proc.kill()\n\n\n@pytest.fixture\ndef setup_with_file_logging():\n    from .api.restful_api import run_in_subprocess as run_restful_api\n    from .deploy.utils import health_check as cluster_health_check\n\n    logging.config.dictConfig(TEST_FILE_LOGGING_CONF)  # type: ignore\n\n    supervisor_addr = f\"localhost:{xo.utils.get_next_port()}\"\n    local_cluster_proc = run_test_cluster_in_subprocess(\n        supervisor_addr, TEST_FILE_LOGGING_CONF\n    )\n    if not cluster_health_check(supervisor_addr, max_attempts=10, sleep_interval=5):\n        raise RuntimeError(\"Cluster is not available after multiple attempts\")\n\n    port = xo.utils.get_next_port()\n    restful_api_proc = run_restful_api(\n        supervisor_addr,\n        host=\"localhost\",\n        port=port,\n        logging_conf=TEST_FILE_LOGGING_CONF,\n    )\n    endpoint = f\"http://localhost:{port}\"\n    if not api_health_check(endpoint, max_attempts=10, sleep_interval=5):\n        raise RuntimeError(\"Endpoint is not available after multiple attempts\")\n\n    try:\n        yield f\"http://localhost:{port}\", supervisor_addr, TEST_LOG_FILE_PATH\n    finally:\n        local_cluster_proc.kill()\n        restful_api_proc.kill()\n\n\n@pytest.fixture\ndef setup_with_auth():\n    from .api.restful_api import run_in_subprocess as run_restful_api\n    from .deploy.utils import health_check as cluster_health_check\n\n    logging.config.dictConfig(TEST_LOGGING_CONF)  # type: ignore\n\n    supervisor_addr = f\"localhost:{xo.utils.get_next_port()}\"\n    local_cluster_proc = run_test_cluster_in_subprocess(\n        supervisor_addr, TEST_LOGGING_CONF\n    )\n    if not cluster_health_check(supervisor_addr, max_attempts=10, sleep_interval=5):\n        raise RuntimeError(\"Cluster is not available after multiple attempts\")\n\n    user1 = User(\n        username=\"user1\",\n        password=\"pass1\",\n        permissions=[\"admin\"],\n        api_keys=[\"sk-3sjLbdwqAhhAF\", \"sk-0HCRO1rauFQDL\"],\n    )\n    user2 = User(\n        username=\"user2\",\n        password=\"pass2\",\n        permissions=[\"models:list\"],\n        api_keys=[\"sk-72tkvudyGLPMi\"],\n    )\n    user3 = User(\n        username=\"user3\",\n        password=\"pass3\",\n        permissions=[\"models:list\", \"models:read\", \"models:start\"],\n        api_keys=[\"sk-m6jEzEwmCc4iQ\", \"sk-ZOTLIY4gt9w11\"],\n    )\n    auth_config = AuthConfig(\n        algorithm=\"HS256\",\n        secret_key=\"09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7\",\n        token_expire_in_minutes=30,\n    )\n    startup_config = AuthStartupConfig(\n        auth_config=auth_config, user_config=[user1, user2, user3]\n    )\n    _, auth_file = tempfile.mkstemp()\n    with open(auth_file, \"w\") as fd:\n        fd.write(json.dumps(startup_config.dict()))\n\n    port = xo.utils.get_next_port()\n    restful_api_proc = run_restful_api(\n        supervisor_addr,\n        host=\"localhost\",\n        port=port,\n        logging_conf=TEST_LOGGING_CONF,\n        auth_config_file=auth_file,\n    )\n    endpoint = f\"http://localhost:{port}\"\n    if not api_health_check(endpoint, max_attempts=10, sleep_interval=5):\n        raise RuntimeError(\"Endpoint is not available after multiple attempts\")\n\n    try:\n        yield f\"http://localhost:{port}\", supervisor_addr\n    finally:\n        local_cluster_proc.kill()\n        restful_api_proc.kill()\n        try:\n            os.remove(auth_file)\n        except Exception:\n            pass\n"
  },
  {
    "path": "xinference/constants.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nfrom pathlib import Path\n\nXINFERENCE_ENV_ENDPOINT = \"XINFERENCE_ENDPOINT\"\nXINFERENCE_ENV_MODEL_SRC = \"XINFERENCE_MODEL_SRC\"\nXINFERENCE_ENV_CSG_TOKEN = \"XINFERENCE_CSG_TOKEN\"\nXINFERENCE_ENV_CSG_ENDPOINT = \"XINFERENCE_CSG_ENDPOINT\"\nXINFERENCE_ENV_HOME_PATH = \"XINFERENCE_HOME\"\nXINFERENCE_ENV_HEALTH_CHECK_FAILURE_THRESHOLD = (\n    \"XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD\"\n)\nXINFERENCE_ENV_HEALTH_CHECK_INTERVAL = \"XINFERENCE_HEALTH_CHECK_INTERVAL\"\nXINFERENCE_ENV_HEALTH_CHECK_TIMEOUT = \"XINFERENCE_HEALTH_CHECK_TIMEOUT\"\nXINFERENCE_ENV_DISABLE_HEALTH_CHECK = \"XINFERENCE_DISABLE_HEALTH_CHECK\"\nXINFERENCE_ENV_DISABLE_METRICS = \"XINFERENCE_DISABLE_METRICS\"\nXINFERENCE_ENV_DOWNLOAD_MAX_ATTEMPTS = \"XINFERENCE_DOWNLOAD_MAX_ATTEMPTS\"\nXINFERENCE_ENV_TEXT_TO_IMAGE_BATCHING_SIZE = \"XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE\"\nXINFERENCE_ENV_VIRTUAL_ENV = \"XINFERENCE_ENABLE_VIRTUAL_ENV\"\nXINFERENCE_ENV_VIRTUAL_ENV_SKIP_INSTALLED = \"XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED\"\nXINFERENCE_ENV_SSE_PING_ATTEMPTS_SECONDS = \"XINFERENCE_SSE_PING_ATTEMPTS_SECONDS\"\nXINFERENCE_ENV_MAX_TOKENS = \"XINFERENCE_MAX_TOKENS\"\nXINFERENCE_ENV_ALLOWED_IPS = \"XINFERENCE_ALLOWED_IPS\"\nXINFERENCE_ENV_BATCH_SIZE = \"XINFERENCE_BATCH_SIZE\"\nXINFERENCE_ENV_BATCH_INTERVAL = \"XINFERENCE_BATCH_INTERVAL\"\nXINFERENCE_ENV_ALLOW_MULTI_REPLICA_PER_GPU = \"XINFERENCE_ALLOW_MULTI_REPLICA_PER_GPU\"\nXINFERENCE_ENV_LAUNCH_STRATEGY = \"XINFERENCE_LAUNCH_STRATEGY\"\n\n# OTEL environment variable names\nXINFERENCE_ENV_ENABLE_OTEL = \"XINFERENCE_ENABLE_OTEL\"\nXINFERENCE_ENV_OTLP_TRACE_ENDPOINT = \"XINFERENCE_OTLP_TRACE_ENDPOINT\"\nXINFERENCE_ENV_OTLP_METRIC_ENDPOINT = \"XINFERENCE_OTLP_METRIC_ENDPOINT\"\nXINFERENCE_ENV_OTLP_BASE_ENDPOINT = \"XINFERENCE_OTLP_BASE_ENDPOINT\"\nXINFERENCE_ENV_OTLP_API_KEY = \"XINFERENCE_OTLP_API_KEY\"\nXINFERENCE_ENV_OTEL_EXPORTER_OTLP_PROTOCOL = \"XINFERENCE_OTEL_EXPORTER_OTLP_PROTOCOL\"\nXINFERENCE_ENV_OTEL_EXPORTER_TYPE = \"XINFERENCE_OTEL_EXPORTER_TYPE\"\nXINFERENCE_ENV_OTEL_SAMPLING_RATE = \"XINFERENCE_OTEL_SAMPLING_RATE\"\nXINFERENCE_ENV_OTEL_BATCH_EXPORT_SCHEDULE_DELAY = (\n    \"XINFERENCE_OTEL_BATCH_EXPORT_SCHEDULE_DELAY\"\n)\nXINFERENCE_ENV_OTEL_MAX_QUEUE_SIZE = \"XINFERENCE_OTEL_MAX_QUEUE_SIZE\"\nXINFERENCE_ENV_OTEL_MAX_EXPORT_BATCH_SIZE = \"XINFERENCE_OTEL_MAX_EXPORT_BATCH_SIZE\"\nXINFERENCE_ENV_OTEL_METRIC_EXPORT_INTERVAL = \"XINFERENCE_OTEL_METRIC_EXPORT_INTERVAL\"\nXINFERENCE_ENV_OTEL_BATCH_EXPORT_TIMEOUT = \"XINFERENCE_OTEL_BATCH_EXPORT_TIMEOUT\"\nXINFERENCE_ENV_OTEL_METRIC_EXPORT_TIMEOUT = \"XINFERENCE_OTEL_METRIC_EXPORT_TIMEOUT\"\n\n\ndef get_xinference_home() -> str:\n    home_path = os.environ.get(XINFERENCE_ENV_HOME_PATH)\n    if home_path is None:\n        home_path = str(Path.home() / \".xinference\")\n    # Always change huggingface, modelscope, and openmind_hub default download path\n    # to ensure xinference process has write permissions for downloading dependencies\n    # (e.g., Qwen3-ASR's forced aligner model downloaded from Hugging Face Hub)\n    os.environ[\"HUGGINGFACE_HUB_CACHE\"] = os.path.join(home_path, \"huggingface\")\n    os.environ[\"MODELSCOPE_CACHE\"] = os.path.join(home_path, \"modelscope\")\n    os.environ[\"XDG_CACHE_HOME\"] = os.path.join(home_path, \"openmind_hub\")\n    # In multi-tenant mode,\n    # gradio's temporary files are stored in their respective home directories,\n    # to prevent insufficient permissions\n    os.environ[\"GRADIO_TEMP_DIR\"] = os.path.join(home_path, \"tmp\", \"gradio\")\n    return home_path\n\n\nXINFERENCE_HOME = get_xinference_home()\nXINFERENCE_CACHE_DIR = os.path.join(XINFERENCE_HOME, \"cache\")\nXINFERENCE_TENSORIZER_DIR = os.path.join(XINFERENCE_HOME, \"tensorizer\")\nXINFERENCE_MODEL_DIR = os.path.join(XINFERENCE_HOME, \"model\")\nXINFERENCE_LOG_DIR = os.path.join(XINFERENCE_HOME, \"logs\")\nXINFERENCE_IMAGE_DIR = os.path.join(XINFERENCE_HOME, \"image\")\nXINFERENCE_VIDEO_DIR = os.path.join(XINFERENCE_HOME, \"video\")\nXINFERENCE_AUTH_DIR = os.path.join(XINFERENCE_HOME, \"auth\")\nXINFERENCE_VIRTUAL_ENV_DIR = os.path.join(XINFERENCE_HOME, \"virtualenv\")\nXINFERENCE_CSG_ENDPOINT = str(\n    os.environ.get(XINFERENCE_ENV_CSG_ENDPOINT, \"https://hub-stg.opencsg.com/\")\n)\n\nXINFERENCE_DEFAULT_LOCAL_HOST = \"127.0.0.1\"\nXINFERENCE_DEFAULT_DISTRIBUTED_HOST = \"0.0.0.0\"\nXINFERENCE_DEFAULT_ENDPOINT_PORT = 9997\nXINFERENCE_DEFAULT_LOG_FILE_NAME = \"xinference.log\"\nXINFERENCE_LOG_MAX_BYTES = 100 * 1024 * 1024\nXINFERENCE_LOG_BACKUP_COUNT = 30\nXINFERENCE_LOG_ARG_MAX_LENGTH = 100\nXINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD = int(\n    os.environ.get(XINFERENCE_ENV_HEALTH_CHECK_FAILURE_THRESHOLD, 5)\n)\nXINFERENCE_HEALTH_CHECK_INTERVAL = int(\n    os.environ.get(XINFERENCE_ENV_HEALTH_CHECK_INTERVAL, 5)\n)\nXINFERENCE_HEALTH_CHECK_TIMEOUT = int(\n    os.environ.get(XINFERENCE_ENV_HEALTH_CHECK_TIMEOUT, 10)\n)\nXINFERENCE_DISABLE_HEALTH_CHECK = bool(\n    int(os.environ.get(XINFERENCE_ENV_DISABLE_HEALTH_CHECK, 0))\n)\nXINFERENCE_DISABLE_METRICS = bool(\n    int(os.environ.get(XINFERENCE_ENV_DISABLE_METRICS, 0))\n)\nXINFERENCE_DOWNLOAD_MAX_ATTEMPTS = int(\n    os.environ.get(XINFERENCE_ENV_DOWNLOAD_MAX_ATTEMPTS, 3)\n)\nXINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE = os.environ.get(\n    XINFERENCE_ENV_TEXT_TO_IMAGE_BATCHING_SIZE, None\n)\nXINFERENCE_SSE_PING_ATTEMPTS_SECONDS = int(\n    os.environ.get(XINFERENCE_ENV_SSE_PING_ATTEMPTS_SECONDS, 600)\n)\nXINFERENCE_LAUNCH_MODEL_RETRY = 3\nXINFERENCE_DEFAULT_CANCEL_BLOCK_DURATION = 30\nXINFERENCE_ENABLE_VIRTUAL_ENV = bool(int(os.getenv(XINFERENCE_ENV_VIRTUAL_ENV, \"1\")))\nXINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED = bool(\n    int(os.getenv(XINFERENCE_ENV_VIRTUAL_ENV_SKIP_INSTALLED, \"1\"))\n)\nXINFERENCE_MAX_TOKENS = os.getenv(XINFERENCE_ENV_MAX_TOKENS)\nXINFERENCE_MAX_TOKENS = int(XINFERENCE_MAX_TOKENS) if XINFERENCE_MAX_TOKENS else None  # type: ignore\nXINFERENCE_ALLOWED_IPS = os.getenv(XINFERENCE_ENV_ALLOWED_IPS)\nXINFERENCE_BATCH_SIZE = int(os.getenv(XINFERENCE_ENV_BATCH_SIZE, \"32\"))\nXINFERENCE_BATCH_INTERVAL = float(os.getenv(XINFERENCE_ENV_BATCH_INTERVAL, \"0.003\"))\nXINFERENCE_ALLOW_MULTI_REPLICA_PER_GPU = bool(\n    int(os.getenv(XINFERENCE_ENV_ALLOW_MULTI_REPLICA_PER_GPU, \"1\"))\n)\nXINFERENCE_LAUNCH_STRATEGY = os.getenv(\n    XINFERENCE_ENV_LAUNCH_STRATEGY, \"IDLE_FIRST_LAUNCH_STRATEGY\"\n)\n\n# OTEL resolved values\nXINFERENCE_ENABLE_OTEL = (\n    os.getenv(XINFERENCE_ENV_ENABLE_OTEL, \"false\").strip().lower() == \"true\"\n)\n_XINFERENCE_OTLP_BASE_ENDPOINT = os.getenv(\n    XINFERENCE_ENV_OTLP_BASE_ENDPOINT, \"http://localhost:4318\"\n)\nXINFERENCE_OTLP_TRACE_ENDPOINT = (\n    os.getenv(XINFERENCE_ENV_OTLP_TRACE_ENDPOINT)\n    or f\"{_XINFERENCE_OTLP_BASE_ENDPOINT}/v1/traces\"\n)\nXINFERENCE_OTLP_METRIC_ENDPOINT = (\n    os.getenv(XINFERENCE_ENV_OTLP_METRIC_ENDPOINT)\n    or f\"{_XINFERENCE_OTLP_BASE_ENDPOINT}/v1/metrics\"\n)\nXINFERENCE_OTLP_API_KEY = os.getenv(XINFERENCE_ENV_OTLP_API_KEY, \"\")\nXINFERENCE_OTEL_EXPORTER_OTLP_PROTOCOL = os.getenv(\n    XINFERENCE_ENV_OTEL_EXPORTER_OTLP_PROTOCOL, \"http/protobuf\"\n)\nXINFERENCE_OTEL_EXPORTER_TYPE = os.getenv(XINFERENCE_ENV_OTEL_EXPORTER_TYPE, \"otlp\")\nXINFERENCE_OTEL_SAMPLING_RATE = float(\n    os.getenv(XINFERENCE_ENV_OTEL_SAMPLING_RATE, \"0.1\")\n)\nXINFERENCE_OTEL_BATCH_EXPORT_SCHEDULE_DELAY = int(\n    os.getenv(XINFERENCE_ENV_OTEL_BATCH_EXPORT_SCHEDULE_DELAY, \"5000\")\n)\nXINFERENCE_OTEL_MAX_QUEUE_SIZE = int(\n    os.getenv(XINFERENCE_ENV_OTEL_MAX_QUEUE_SIZE, \"2048\")\n)\nXINFERENCE_OTEL_MAX_EXPORT_BATCH_SIZE = int(\n    os.getenv(XINFERENCE_ENV_OTEL_MAX_EXPORT_BATCH_SIZE, \"512\")\n)\nXINFERENCE_OTEL_METRIC_EXPORT_INTERVAL = int(\n    os.getenv(XINFERENCE_ENV_OTEL_METRIC_EXPORT_INTERVAL, \"60000\")\n)\nXINFERENCE_OTEL_BATCH_EXPORT_TIMEOUT = int(\n    os.getenv(XINFERENCE_ENV_OTEL_BATCH_EXPORT_TIMEOUT, \"10000\")\n)\nXINFERENCE_OTEL_METRIC_EXPORT_TIMEOUT = int(\n    os.getenv(XINFERENCE_ENV_OTEL_METRIC_EXPORT_TIMEOUT, \"30000\")\n)\n"
  },
  {
    "path": "xinference/core/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/core/cache_tracker.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom logging import getLogger\nfrom typing import Any, Dict, List, Optional\n\nimport xoscar as xo\n\nlogger = getLogger(__name__)\n\n\nclass CacheTrackerActor(xo.Actor):\n    def __init__(self):\n        super().__init__()\n        self._model_name_to_version_info: Dict[str, List[Dict]] = {}  # type: ignore\n\n    @classmethod\n    def default_uid(cls) -> str:\n        return \"cache_tracker\"\n\n    @staticmethod\n    def _map_address_to_file_location(\n        model_version: Dict[str, List[Dict]], address: str\n    ):\n        for model_name, model_versions in model_version.items():\n            for info_dict in model_versions:\n                info_dict[\"model_file_location\"] = (\n                    {address: info_dict[\"model_file_location\"]}\n                    if info_dict[\"cache_status\"]\n                    else None\n                )\n\n    @staticmethod\n    def _update_file_location(data: Dict, origin_version_info: Dict):\n        if origin_version_info[\"model_file_location\"] is None:\n            origin_version_info[\"model_file_location\"] = data\n        else:\n            assert isinstance(origin_version_info[\"model_file_location\"], dict)\n            origin_version_info[\"model_file_location\"].update(data)\n\n    def record_model_version(self, version_info: Dict[str, List[Dict]], address: str):\n        self._map_address_to_file_location(version_info, address)\n        for model_name, model_versions in version_info.items():\n            if model_name not in self._model_name_to_version_info:\n                self._model_name_to_version_info[model_name] = model_versions\n            else:\n                assert len(model_versions) == len(\n                    self._model_name_to_version_info[model_name]\n                ), \"Model version info inconsistency between supervisor and worker\"\n                for version, origin_version in zip(\n                    model_versions, self._model_name_to_version_info[model_name]\n                ):\n                    if (\n                        version[\"cache_status\"]\n                        and version[\"model_file_location\"] is not None\n                    ):\n                        origin_version[\"cache_status\"] = True\n                        self._update_file_location(\n                            version[\"model_file_location\"], origin_version\n                        )\n\n    def update_cache_status(\n        self,\n        address: str,\n        model_name: str,\n        model_version: Optional[str],\n        model_path: str,\n    ):\n        if model_name not in self._model_name_to_version_info:\n            logger.warning(f\"Not record version info for {model_name} for now.\")\n        else:\n            for version_info in self._model_name_to_version_info[model_name]:\n                if model_version is None:  # image model\n                    self._update_file_location({address: model_path}, version_info)\n                    version_info[\"cache_status\"] = True\n                else:\n                    if version_info[\"model_version\"] == model_version:\n                        self._update_file_location({address: model_path}, version_info)\n                        version_info[\"cache_status\"] = True\n\n    def unregister_model_version(self, model_name: str):\n        self._model_name_to_version_info.pop(model_name, None)\n\n    def get_model_versions(self, model_name: str) -> List[Dict]:\n        if model_name not in self._model_name_to_version_info:\n            logger.warning(f\"Not record version info for model_name: {model_name}\")\n            return []\n        else:\n            return self._model_name_to_version_info[model_name]\n\n    def get_model_version_count(self, model_name: str) -> int:\n        return len(self.get_model_versions(model_name))\n\n    def list_cached_models(\n        self, worker_ip: str, model_name: Optional[str] = None\n    ) -> List[Dict[Any, Any]]:\n        cached_models = []\n        for name, versions in self._model_name_to_version_info.items():\n            # only return assigned cached model if model_name is not none\n            # else return all cached model\n            if model_name and model_name != name:\n                continue\n            for version_info in versions:\n                cache_status = version_info.get(\"cache_status\", False)\n                # search cached model\n                if cache_status:\n                    res = version_info.copy()\n                    res[\"model_name\"] = name\n                    paths = res.get(\"model_file_location\", {})\n                    # only return assigned worker's device path\n                    if worker_ip in paths.keys():\n                        res[\"model_file_location\"] = paths[worker_ip]\n                        cached_models.append(res)\n        return cached_models\n\n    def list_deletable_models(self, model_version: str, worker_ip: str) -> str:\n        model_file_location = \"\"\n        for model, model_versions in self._model_name_to_version_info.items():\n            for version_info in model_versions:\n                # search assign model version\n                if model_version == version_info.get(\"model_version\", None):\n                    # check if exist\n                    if version_info.get(\"cache_status\", False):\n                        paths = version_info.get(\"model_file_location\", {})\n                        # only return assigned worker's device path\n                        if worker_ip in paths.keys():\n                            model_file_location = paths[worker_ip]\n        return model_file_location\n\n    def confirm_and_remove_model(self, model_version: str, worker_ip: str):\n        # find remove path\n        rm_path = self.list_deletable_models(model_version, worker_ip)\n        # search _model_name_to_version_info if exist this path, and delete\n        for model, model_versions in self._model_name_to_version_info.items():\n            for version_info in model_versions:\n                # check if exist\n                if version_info.get(\"cache_status\", False):\n                    paths = version_info.get(\"model_file_location\", {})\n                    # only delete assigned worker's device path\n                    if worker_ip in paths.keys() and rm_path == paths[worker_ip]:\n                        del paths[worker_ip]\n                        # if path is empty, update cache status\n                        if not paths:\n                            version_info[\"cache_status\"] = False\n"
  },
  {
    "path": "xinference/core/event.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom collections import defaultdict, deque\nfrom enum import Enum\nfrom typing import Dict, List, TypedDict\n\nimport xoscar as xo\n\nMAX_EVENT_COUNT_PER_MODEL = 100\n\n\nclass EventType(Enum):\n    INFO = 1\n    WARNING = 2\n    ERROR = 3\n\n\nclass Event(TypedDict):\n    event_type: EventType\n    event_ts: int\n    event_content: str\n\n\nclass EventCollectorActor(xo.StatelessActor):\n    def __init__(self):\n        super().__init__()\n        self._model_uid_to_events: Dict[str, deque] = defaultdict(  # type: ignore\n            lambda: deque(maxlen=MAX_EVENT_COUNT_PER_MODEL)\n        )\n\n    @classmethod\n    def default_uid(cls) -> str:\n        return \"event_collector\"\n\n    def get_model_events(self, model_uid: str) -> List[Dict]:\n        event_queue = self._model_uid_to_events.get(model_uid)\n        if event_queue is None:\n            return []\n        else:\n            return [dict(e, event_type=e[\"event_type\"].name) for e in iter(event_queue)]\n\n    def report_event(self, model_uid: str, event: Event):\n        self._model_uid_to_events[model_uid].append(event)\n"
  },
  {
    "path": "xinference/core/launch_strategy.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport random\nfrom abc import ABC, abstractmethod\nfrom typing import TYPE_CHECKING, Dict, List, Optional, Tuple\n\nimport xoscar as xo\n\nif TYPE_CHECKING:\n    from .supervisor import WorkerStatus\n\n\nclass LaunchStrategy(ABC):\n    \"\"\"\n    Base class for model replica launch strategies.\n    \"\"\"\n\n    @abstractmethod\n    def select_worker(\n        self, worker_candidates: List[Dict], n_gpu: Optional[int] = None\n    ) -> Tuple[xo.ActorRefType, Optional[List[int]]]:\n        \"\"\"\n        Pick a worker and the gpu_idx list for the next replica.\n\n        Args:\n            worker_candidates: List of dicts that contain at least `ref` (worker ref)\n            `count` (current load), and optionally `alloc` (GPU allocation snapshot).\n            n_gpu: Optional requested GPU count for this replica.\n\n        Returns:\n            worker_ref, gpu_idx list (None lets worker decide).\n        \"\"\"\n\n\nclass IdleFirstLaunchStrategy(LaunchStrategy):\n    \"\"\"\n    Count-based scheduler: choose the (worker, gpu) slot with the fewest active models.\n    Ignores memory; falls back to least-loaded worker if no GPU allocation snapshot is available.\n    \"\"\"\n\n    def __init__(self, worker_status: Dict[str, \"WorkerStatus\"]):\n        self._worker_status = worker_status\n        self._fallback_load: Dict[str, int] = {}\n\n    def _select_least_loaded_gpu(\n        self, worker_candidates: List[Dict], n_gpu: int\n    ) -> Optional[Tuple[xo.ActorRefType, List[int]]]:\n        best = None\n        for candidate in worker_candidates:\n            ref = candidate[\"ref\"]\n            alloc = candidate.get(\"alloc\")\n            if not alloc:\n                continue\n            total = alloc.get(\"total\", [])\n            models = alloc.get(\"models\", {})\n            user_specified = alloc.get(\"user_specified\", {})\n            if total:\n                dev_iter = total\n            else:\n                dev_iter = []\n                keys = set(models.keys())\n                keys.update(user_specified.keys())\n                for dev_key in keys:\n                    try:\n                        dev_iter.append(int(dev_key))\n                    except Exception:\n                        continue\n            loads = []\n            for dev in dev_iter:\n                models_on_dev = models.get(dev, [])\n                load = len(models_on_dev)\n                load += len(user_specified.get(dev, []))\n                loads.append((load, dev))\n            if len(loads) < n_gpu:\n                continue\n            loads.sort(key=lambda x: (x[0], x[1]))\n            selected = loads[:n_gpu]\n            score = tuple([sum(load for load, _ in selected), ref.address])\n            if best is None or score < best[\"score\"]:\n                best = {\n                    \"ref\": ref,\n                    \"gpu_idx\": [dev for _, dev in selected],\n                    \"score\": score,\n                }\n        return (best[\"ref\"], best[\"gpu_idx\"]) if best else None\n\n    def _reserve_slot(\n        self, worker_candidates: List[Dict], ref: xo.ActorRefType, dev: int\n    ):\n        \"\"\"\n        Update local snapshot so subsequent replicas see the reserved slot.\n        \"\"\"\n        for candidate in worker_candidates:\n            if candidate[\"ref\"] != ref:\n                continue\n            alloc = candidate.setdefault(\"alloc\", {})\n            models = alloc.setdefault(\"models\", {})\n            models.setdefault(dev, [])\n            models[dev].append(\"__reserved__\")\n            break\n\n    def select_worker(\n        self, worker_candidates: List[Dict], n_gpu: Optional[int] = None\n    ) -> Tuple[xo.ActorRefType, Optional[List[int]]]:\n        random.shuffle(worker_candidates)\n\n        # Use allocation snapshot to pick the least-loaded GPU slot.\n        requested_gpu = n_gpu if isinstance(n_gpu, int) and n_gpu > 0 else 1\n        gpu_choice = self._select_least_loaded_gpu(worker_candidates, requested_gpu)\n        if gpu_choice is not None:\n            ref, gpu_idx = gpu_choice\n            # Update local snapshot to reflect the reservation.\n            for dev in gpu_idx:\n                self._reserve_slot(worker_candidates, ref, dev)\n            return ref, gpu_idx\n\n        # Fallback: least-loaded worker by count, stable by address.\n        for candidate in worker_candidates:\n            self._fallback_load.setdefault(candidate[\"ref\"].address, 0)\n        worker_candidates.sort(key=lambda x: (x[\"count\"], x[\"ref\"].address))\n        min_count = worker_candidates[0][\"count\"]\n        least_loaded = [c for c in worker_candidates if c[\"count\"] == min_count]\n        chosen = random.choice(least_loaded)\n        self._fallback_load[chosen[\"ref\"].address] += 1\n        return chosen[\"ref\"], None\n"
  },
  {
    "path": "xinference/core/metrics.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\n\nimport uvicorn\nfrom aioprometheus import Counter, Gauge\nfrom aioprometheus.asgi.starlette import metrics\nfrom fastapi import FastAPI\nfrom fastapi.responses import RedirectResponse\n\nDEFAULT_METRICS_SERVER_LOG_LEVEL = \"warning\"\n\n\ngenerate_throughput = Gauge(\n    \"xinference:generate_tokens_per_s\", \"Generate throughput in tokens/s.\"\n)\n# Latency\ntime_to_first_token = Gauge(\n    \"xinference:time_to_first_token_ms\", \"First token latency in ms.\"\n)\n# Tokens counter\ninput_tokens_total_counter = Counter(\n    \"xinference:input_tokens_total_counter\", \"Total number of input tokens.\"\n)\noutput_tokens_total_counter = Counter(\n    \"xinference:output_tokens_total_counter\", \"Total number of output tokens.\"\n)\n\n\ndef record_metrics(name, op, kwargs):\n    collector = globals().get(name)\n    getattr(collector, op)(**kwargs)\n\n\ndef launch_metrics_export_server(q, host=None, port=None):\n    app = FastAPI()\n    app.add_route(\"/metrics\", metrics)\n\n    @app.get(\"/\")\n    async def root():\n        response = RedirectResponse(url=\"/metrics\")\n        return response\n\n    async def main():\n        if host is not None and port is not None:\n            config = uvicorn.Config(\n                app, host=host, port=port, log_level=DEFAULT_METRICS_SERVER_LOG_LEVEL\n            )\n        elif host is not None:\n            config = uvicorn.Config(\n                app, host=host, port=0, log_level=DEFAULT_METRICS_SERVER_LOG_LEVEL\n            )\n        elif port is not None:\n            config = uvicorn.Config(\n                app, port=port, log_level=DEFAULT_METRICS_SERVER_LOG_LEVEL\n            )\n        else:\n            config = uvicorn.Config(app, log_level=DEFAULT_METRICS_SERVER_LOG_LEVEL)\n\n        server = uvicorn.Server(config)\n        task = asyncio.create_task(server.serve())\n\n        while not server.started and not task.done():\n            await asyncio.sleep(0.1)\n\n        for server in server.servers:\n            for socket in server.sockets:\n                q.put(socket.getsockname())\n        await task\n\n    asyncio.run(main())\n"
  },
  {
    "path": "xinference/core/model.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport functools\nimport inspect\nimport json\nimport os\nimport queue\nimport time\nimport types\nimport uuid\nfrom typing import (\n    TYPE_CHECKING,\n    AsyncGenerator,\n    Callable,\n    Dict,\n    Generator,\n    List,\n    Optional,\n    Union,\n    no_type_check,\n)\n\nimport sse_starlette.sse\nimport xoscar as xo\n\nfrom ..constants import (\n    XINFERENCE_DEFAULT_CANCEL_BLOCK_DURATION,\n    XINFERENCE_LAUNCH_MODEL_RETRY,\n)\n\nif TYPE_CHECKING:\n    from .progress_tracker import ProgressTrackerActor\n    from .worker import WorkerActor\n    from ..model.llm.core import LLM\n    import PIL\n\nimport logging\n\nlogger = logging.getLogger(__name__)\n\nfrom ..device_utils import empty_cache\nfrom .utils import CancelMixin, json_dumps, log_async\n\ntry:\n    from torch.cuda import OutOfMemoryError\nexcept ImportError:\n\n    class _OutOfMemoryError(Exception):\n        pass\n\n    OutOfMemoryError = _OutOfMemoryError\n\n\n# !!!!! DO NOT add model_name to this list, using `register_batching_multimodal_models` below instead.\nXINFERENCE_BATCHING_ALLOWED_VISION_MODELS = []\n\nXINFERENCE_TEXT_TO_IMAGE_BATCHING_ALLOWED_MODELS = [\"FLUX.1-dev\", \"FLUX.1-schnell\"]\nXINFERENCE_TEST_OUT_OF_MEMORY_ERROR = bool(\n    os.getenv(\"XINFERENCE_TEST_OUT_OF_MEMORY_ERROR\", False)\n)\n\n\ndef register_batching_multimodal_models(*model_names: str):\n    def decorator(cls):\n        for name in model_names:\n            if name not in XINFERENCE_BATCHING_ALLOWED_VISION_MODELS:\n                XINFERENCE_BATCHING_ALLOWED_VISION_MODELS.append(name)\n        return cls\n\n    return decorator\n\n\ndef request_limit(fn):\n    \"\"\"\n    Used by ModelActor.\n    As a decorator, added to a ModelActor method to control\n    how many requests are accessing that method at the same time.\n    \"\"\"\n\n    async def wrapped_func(self, *args, **kwargs):\n        logger.debug(\n            f\"Request {fn.__name__}, current serve request count: {self._serve_count}, request limit: {self._request_limits} for the model {self.model_uid()}\"\n        )\n        if 1 + self._serve_count <= self._request_limits:\n            self._serve_count += 1\n        else:\n            raise RuntimeError(\n                f\"Rate limit reached for the model. Request limit {self._request_limits} for the model: {self.model_uid()}\"\n            )\n        ret = None\n        try:\n            ret = await fn(self, *args, **kwargs)\n        finally:\n            if ret is not None and (\n                inspect.isasyncgen(ret) or inspect.isgenerator(ret)\n            ):\n                # stream case, let client call model_ref to decrease self._serve_count\n                pass\n            else:\n                self._serve_count -= 1\n                logger.debug(\n                    f\"After request {fn.__name__}, current serve request count: {self._serve_count} for the model {self.model_uid()}\"\n                )\n        return ret\n\n    return wrapped_func\n\n\ndef oom_check(fn):\n    @functools.wraps(fn)\n    def _wrapper(self, *args, **kwargs):\n        try:\n            if XINFERENCE_TEST_OUT_OF_MEMORY_ERROR:\n                raise OutOfMemoryError(\"Test Out of Memory Error\")\n            return fn(self, *args, **kwargs)\n        except OutOfMemoryError as ex:\n            assert self._loop is not None\n            asyncio.run_coroutine_threadsafe(\n                self._handle_oom_error(ex), loop=self._loop\n            )\n\n    @functools.wraps(fn)\n    async def _async_wrapper(self, *args, **kwargs):\n        try:\n            if XINFERENCE_TEST_OUT_OF_MEMORY_ERROR:\n                raise OutOfMemoryError(\"Test Out of Memory Error\")\n            return await fn(self, *args, **kwargs)\n        except OutOfMemoryError as ex:\n            await self._handle_oom_error(ex)\n\n    assert not inspect.isasyncgen(fn)\n    assert not inspect.isgenerator(fn)\n\n    if asyncio.iscoroutinefunction(fn):\n        return _async_wrapper\n    else:\n        return _wrapper\n\n\nclass ModelActor(xo.StatelessActor, CancelMixin):\n    _replica_model_uid: Optional[str]\n\n    async def __pre_destroy__(self):\n        from ..model.embedding.core import EmbeddingModel\n        from ..model.llm.sglang.core import SGLANGModel\n        from ..model.llm.transformers.core import PytorchModel as LLMPytorchModel\n        from ..model.llm.vllm.core import VLLMModel as LLMVLLMModel\n\n        if hasattr(self._model, \"stop\") and callable(self._model.stop):\n            await asyncio.to_thread(self._model.stop)\n\n        if isinstance(self._model, LLMVLLMModel):\n            if self._transfer_ref is not None:\n                try:\n                    await xo.destroy_actor(self._transfer_ref)\n                    del self._transfer_ref\n                except Exception as e:\n                    logger.debug(\n                        f\"Destroy transfer actor failed, address: {self.address}, error: {e}\"\n                    )\n\n        if (\n            isinstance(self._model, (LLMPytorchModel, LLMVLLMModel, SGLANGModel))\n            and self._model.model_spec.model_format == \"pytorch\"\n        ) or isinstance(self._model, EmbeddingModel):\n            try:\n                import gc\n\n                import torch  # noqa: F401\n            except ImportError:\n                error_message = \"Failed to import module 'torch'\"\n                installation_guide = [\n                    \"Please make sure 'torch' is installed.\\n\",\n                ]\n\n                raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n            del self._model\n            gc.collect()\n            empty_cache()\n\n    def __init__(\n        self,\n        supervisor_address: str,\n        worker_address: str,\n        model: \"LLM\",\n        replica_model_uid: str,\n        request_limits: Optional[int] = None,\n        xavier_config: Optional[Dict] = None,\n        n_worker: Optional[int] = 1,\n        shard: Optional[int] = 0,\n        driver_info: Optional[dict] = None,  # for model across workers\n    ):\n        super().__init__()\n\n        from ..model.llm.vllm.core import VLLMModel\n\n        self._supervisor_address = supervisor_address\n        self._worker_address = worker_address\n        self._replica_model_uid = replica_model_uid\n        self._model = model\n        self._model_description = self._model.model_family.to_description()\n        self._request_limits = (\n            float(\"inf\") if request_limits is None else request_limits\n        )\n        self._pending_requests: asyncio.Queue = asyncio.Queue()\n        self._handle_pending_requests_task = None\n        self._lock = (\n            None if getattr(self._model, \"allow_batch\", False) else asyncio.locks.Lock()\n        )\n        self._worker_ref = None\n        self._progress_tracker_ref = None\n        self._serve_count = 0\n        self._metrics_labels = {\n            \"type\": self._model_description.get(\"model_type\", \"unknown\"),\n            \"model\": self.model_uid(),\n            \"node\": self._worker_address,\n            \"format\": self._model_description.get(\"model_format\", \"unknown\"),\n            \"quantization\": self._model_description.get(\"quantization\", \"none\"),\n        }\n        self._loop: Optional[asyncio.AbstractEventLoop] = None\n        # model across workers\n        self._n_worker = n_worker\n        self._shard = shard\n        self._driver_info = driver_info\n\n        if isinstance(self._model, VLLMModel):\n            self._xavier_config = xavier_config\n            self._model.set_xavier_config(xavier_config)\n            self._transfer_ref = None\n\n    async def __post_create__(self):\n        self._loop = asyncio.get_running_loop()\n\n        logger.debug(\"Starting ModelActor at %s, uid: %s\", self.address, self.uid)\n\n        self._handle_pending_requests_task = asyncio.create_task(\n            self._handle_pending_requests()\n        )\n\n    def __repr__(self) -> str:\n        return f\"ModelActor({self._replica_model_uid})\"\n\n    def __getattr__(self, attr: str):\n        return getattr(self._model, attr)\n\n    def decrease_serve_count(self):\n        self._serve_count -= 1\n\n    @no_type_check\n    async def start_transfer_for_vllm(self, rank_addresses: List[str]):\n        from ..model.llm.vllm.core import VLLMModel\n        from ..model.llm.vllm.xavier.transfer import TransferActor\n\n        assert isinstance(self._model, VLLMModel)\n        rank = self._xavier_config.get(\"rank\")  # type: ignore\n        self._transfer_ref = await xo.create_actor(\n            TransferActor,\n            address=self.address,\n            uid=f\"{TransferActor.default_uid()}-{rank}\",\n            rank=rank,\n            world_size=self._xavier_config.get(\"world_size\"),  # type: ignore\n            rank_address=self._xavier_config.get(\"rank_address\"),  # type: ignore\n            store_address=self._xavier_config.get(\"store_address\"),  # type: ignore\n            store_port=self._xavier_config.get(\"store_port\"),  # type: ignore\n            world_addresses=rank_addresses,\n        )\n        await self._model.init_xavier()\n        logger.debug(\n            f\"Init transfer actor: {self._transfer_ref.address}, rank: {rank} done for vllm.\"  # type: ignore\n        )\n\n    async def _record_completion_metrics(\n        self, duration, completion_tokens, prompt_tokens\n    ):\n        coros = []\n        if completion_tokens > 0:\n            coros.append(\n                self.record_metrics(\n                    \"output_tokens_total_counter\",\n                    \"add\",\n                    {\n                        \"labels\": self._metrics_labels,\n                        \"value\": completion_tokens,\n                    },\n                )\n            )\n        if prompt_tokens > 0:\n            coros.append(\n                self.record_metrics(\n                    \"input_tokens_total_counter\",\n                    \"add\",\n                    {\"labels\": self._metrics_labels, \"value\": prompt_tokens},\n                )\n            )\n        if completion_tokens > 0:\n            generate_throughput = completion_tokens / duration\n            coros.append(\n                self.record_metrics(\n                    \"generate_throughput\",\n                    \"set\",\n                    {\n                        \"labels\": self._metrics_labels,\n                        \"value\": generate_throughput,\n                    },\n                )\n            )\n        await asyncio.gather(*coros)\n\n    async def _get_worker_ref(self) -> xo.ActorRefType[\"WorkerActor\"]:\n        from .worker import WorkerActor\n\n        if self._worker_ref is None:\n            self._worker_ref = await xo.actor_ref(\n                address=self._worker_address, uid=WorkerActor.default_uid()\n            )\n        return self._worker_ref\n\n    async def _get_progress_tracker_ref(\n        self,\n    ) -> xo.ActorRefType[\"ProgressTrackerActor\"]:\n        from .progress_tracker import ProgressTrackerActor\n\n        if self._progress_tracker_ref is None:\n            self._progress_tracker_ref = await xo.actor_ref(\n                address=self._supervisor_address, uid=ProgressTrackerActor.default_uid()\n            )\n        return self._progress_tracker_ref\n\n    async def _get_progressor(self, request_id: str):\n        from .progress_tracker import Progressor\n\n        progressor = Progressor(\n            request_id,\n            await self._get_progress_tracker_ref(),\n            asyncio.get_running_loop(),\n        )\n        await progressor.start()\n        return progressor\n\n    def is_vllm_backend(self) -> bool:\n        from ..model.llm.vllm.core import VLLMModel\n\n        return isinstance(self._model, VLLMModel)\n\n    def is_sglang_backend(self) -> bool:\n        from ..model.llm.sglang.core import SGLANGModel\n\n        return isinstance(self._model, SGLANGModel)\n\n    async def load(self):\n        try:\n            # Change process title for model\n            import setproctitle\n\n            setproctitle.setproctitle(f\"Model: {self._replica_model_uid}\")\n        except ImportError:\n            pass\n        i = 0\n        while True:\n            i += 1\n            try:\n                if hasattr(self._model, \"set_loop\"):\n                    self._model.set_loop(asyncio.get_running_loop())\n                await asyncio.to_thread(self._model.load)\n                if hasattr(self._model, \"driver_info\"):\n                    self._driver_info = self._model.driver_info\n                break\n            except Exception as e:\n                if (\n                    i < XINFERENCE_LAUNCH_MODEL_RETRY\n                    and str(e).find(\"busy or unavailable\") >= 0\n                ):\n                    await asyncio.sleep(5)\n                    logger.warning(\"Retry to load model {model_uid}: %d times\", i)\n                    continue\n                raise\n        logger.info(f\"{self} loaded\")\n\n    async def wait_for_load(self):\n        if hasattr(self._model, \"wait_for_load\"):\n            await asyncio.to_thread(self._model.wait_for_load)\n\n    def need_create_pools(self):\n        return getattr(self._model, \"need_create_pools\", False)\n\n    def set_pool_addresses(self, pool_addresses: List[str]):\n        if hasattr(self._model, \"set_pool_addresses\"):\n            self._model.set_pool_addresses(pool_addresses)\n\n    def get_pool_addresses(self) -> Optional[List[str]]:\n        if hasattr(self._model, \"get_pool_addresses\"):\n            return self._model.get_pool_addresses()\n        return None\n\n    def set_worker_addresses(self, shard: int, worker_addresses: List[str]):\n        if hasattr(self._model, \"set_worker_addresses\"):\n            self._model.set_worker_addresses(shard, worker_addresses)\n\n    def model_uid(self):\n        return (\n            self._model.model_uid\n            if hasattr(self._model, \"model_uid\")\n            else (\n                self._model._model_uid\n                if hasattr(self._model, \"_model_uid\")\n                else None  # return None for UT\n            )\n        )\n\n    def get_driver_info(self):\n        # driver info is used for model across workers,\n        # the driver model actor(always the first worker)\n        # will hold driver information includes dist store etc.\n        return self._driver_info\n\n    async def stop(self):\n        if hasattr(self._model, \"stop\"):\n            await asyncio.to_thread(self._model.stop)\n        elif hasattr(self._model, \"close\"):\n            await asyncio.to_thread(self._model.close)\n\n    async def _handle_oom_error(self, ex):\n        error_message = (\n            f\"Model actor is out of memory, model id: {self.model_uid()}, error: {ex}\"\n        )\n        logger.exception(error_message)\n        worker_ref = await self._get_worker_ref()\n        await worker_ref.update_model_status(\n            self._replica_model_uid, last_error=error_message\n        )\n        os._exit(1)\n\n    def _to_generator(self, output_type: str, gen: types.GeneratorType):\n        start_time = time.time()\n        time_to_first_token = None\n        final_usage = None\n        try:\n            if XINFERENCE_TEST_OUT_OF_MEMORY_ERROR:\n                raise OutOfMemoryError(\"Test Out of Memory Error\")\n            for v in gen:\n                if time_to_first_token is None:\n                    time_to_first_token = (time.time() - start_time) * 1000\n                if output_type == \"json\":\n                    final_usage = v.get(\"usage\", None)\n                    v = dict(data=json.dumps(v, ensure_ascii=False))\n                else:\n                    assert (\n                        output_type == \"binary\"\n                    ), f\"Unknown output type '{output_type}'\"\n                yield sse_starlette.sse.ensure_bytes(v, None)\n        except OutOfMemoryError as ex:\n            assert self._loop is not None\n            asyncio.run_coroutine_threadsafe(\n                self._handle_oom_error(ex), loop=self._loop\n            )\n        finally:\n            if self._loop is not None and time_to_first_token is not None:\n                coro = self.record_metrics(\n                    \"time_to_first_token\",\n                    \"set\",\n                    {\"labels\": self._metrics_labels, \"value\": time_to_first_token},\n                )\n                asyncio.run_coroutine_threadsafe(coro, loop=self._loop)\n            if self._loop is not None and final_usage is not None:\n                coro = self._record_completion_metrics(\n                    time.time() - start_time,\n                    completion_tokens=final_usage[\"completion_tokens\"],\n                    prompt_tokens=final_usage[\"prompt_tokens\"],\n                )\n                asyncio.run_coroutine_threadsafe(coro, loop=self._loop)\n\n    async def _to_async_gen(self, output_type: str, gen: types.AsyncGeneratorType):\n        start_time = time.time()\n        time_to_first_token = None\n        final_usage = None\n        try:\n            if XINFERENCE_TEST_OUT_OF_MEMORY_ERROR:\n                raise OutOfMemoryError(\"Test Out of Memory Error\")\n            async for v in gen:\n                if time_to_first_token is None:\n                    time_to_first_token = (time.time() - start_time) * 1000\n                final_usage = v.get(\"usage\", None)\n                if output_type == \"json\":\n                    v = await asyncio.to_thread(json.dumps, v, ensure_ascii=False)\n                    v = dict(data=v)  # noqa: F821\n                else:\n                    assert (\n                        output_type == \"binary\"\n                    ), f\"Unknown output type '{output_type}'\"\n                yield await asyncio.to_thread(sse_starlette.sse.ensure_bytes, v, None)\n        except OutOfMemoryError as ex:\n            await self._handle_oom_error(ex)\n        finally:\n            coros = []\n            if time_to_first_token is not None:\n                coros.append(\n                    self.record_metrics(\n                        \"time_to_first_token\",\n                        \"set\",\n                        {\"labels\": self._metrics_labels, \"value\": time_to_first_token},\n                    )\n                )\n            if final_usage is not None:\n                coros.append(\n                    self._record_completion_metrics(\n                        time.time() - start_time,\n                        completion_tokens=final_usage[\"completion_tokens\"],\n                        prompt_tokens=final_usage[\"prompt_tokens\"],\n                    )\n                )\n            await asyncio.gather(*coros)\n\n    async def _handle_pending_requests(self):\n        logger.info(\"Start requests handler.\")\n        while True:\n            gen, stream_out, stop = await self._pending_requests.get()\n\n            async def _async_wrapper(_gen):\n                try:\n                    # anext is only available for Python >= 3.10\n                    return await _gen.__anext__()  # noqa: F821\n                except StopAsyncIteration:\n                    return stop\n                except Exception as e:\n                    return e\n\n            def _wrapper(_gen):\n                # Avoid issue: https://github.com/python/cpython/issues/112182\n                try:\n                    return next(_gen)\n                except StopIteration:\n                    return stop\n                except Exception as e:\n                    return e\n\n            while True:\n                try:\n                    if inspect.isgenerator(gen):\n                        r = await asyncio.to_thread(_wrapper, gen)\n                    elif inspect.isasyncgen(gen):\n                        r = await _async_wrapper(gen)\n                    else:\n                        raise Exception(\n                            f\"The generator {gen} should be a generator or an async generator, \"\n                            f\"but a {type(gen)} is got.\"\n                        )\n                    stream_out.put_nowait(r)\n                    if r is not stop:\n                        continue\n                except Exception:\n                    logger.exception(\"stream encountered an error.\")\n                break\n\n    async def _call_wrapper_json(self, fn: Callable, *args, **kwargs):\n        return await self._call_wrapper(\"json\", fn, *args, **kwargs)\n\n    async def _call_wrapper_binary(self, fn: Callable, *args, **kwargs):\n        return await self._call_wrapper(\"binary\", fn, *args, **kwargs)\n\n    @oom_check\n    async def _call_wrapper(self, output_type: str, fn: Callable, *args, **kwargs):\n        self._add_running_task(kwargs.get(\"request_id\"))\n        if self._lock is None:\n            if inspect.iscoroutinefunction(fn):\n                ret = await fn(*args, **kwargs)\n            else:\n                ret = await asyncio.to_thread(fn, *args, **kwargs)\n\n            if inspect.isgenerator(ret):\n                gen = self._to_generator(output_type, ret)\n                return gen\n            if inspect.isasyncgen(ret):\n                gen = self._to_async_gen(output_type, ret)\n                return gen\n        else:\n            async with self._lock:\n                if inspect.iscoroutinefunction(fn):\n                    ret = await fn(*args, **kwargs)\n                else:\n                    ret = await asyncio.to_thread(fn, *args, **kwargs)\n\n                stream_out: Union[queue.Queue, asyncio.Queue]\n\n                if inspect.isgenerator(ret):\n                    gen = self._to_generator(output_type, ret)\n                    stream_out = queue.Queue()\n                    stop = object()\n                    self._pending_requests.put_nowait((gen, stream_out, stop))\n\n                    def _stream_out_generator():\n                        while True:\n                            o = stream_out.get()\n                            if o is stop:\n                                break\n                            elif isinstance(o, Exception):\n                                raise o\n                            else:\n                                yield o\n\n                    return _stream_out_generator()\n\n                if inspect.isasyncgen(ret):\n                    gen = self._to_async_gen(output_type, ret)\n                    stream_out = asyncio.Queue()\n                    stop = object()\n                    self._pending_requests.put_nowait((gen, stream_out, stop))\n\n                    async def _stream_out_async_gen():\n                        while True:\n                            o = await stream_out.get()\n                            if o is stop:\n                                break\n                            elif isinstance(o, Exception):\n                                raise o\n                            else:\n                                yield o\n\n                    return _stream_out_async_gen()\n\n        if output_type == \"json\":\n            return await asyncio.to_thread(json_dumps, ret)\n        else:\n            assert output_type == \"binary\", f\"Unknown output type '{output_type}'\"\n            return ret\n\n    @request_limit\n    @xo.generator\n    @log_async(logger=logger)\n    async def generate(self, prompt: str, *args, **kwargs):\n        # Directly delegate to model, let model decide how to handle (batching or not)\n        kwargs.pop(\"raw_params\", None)\n        if hasattr(self._model, \"generate\"):\n            # not support request_id for generate\n            kwargs.pop(\"request_id\", None)\n            return await self._call_wrapper_json(\n                self._model.generate, prompt, *args, **kwargs\n            )\n        if hasattr(self._model, \"async_generate\"):\n            if \"request_id\" not in kwargs:\n                kwargs[\"request_id\"] = str(uuid.uuid1())\n            else:\n                # model only accept string\n                kwargs[\"request_id\"] = str(kwargs[\"request_id\"])\n            return await self._call_wrapper_json(\n                self._model.async_generate,\n                prompt,\n                *args,\n                **kwargs,\n            )\n        raise AttributeError(f\"Model {self._model.model_spec} is not for generate.\")\n\n    @request_limit\n    @xo.generator\n    @log_async(logger=logger)\n    async def chat(self, messages: List[Dict], *args, **kwargs):\n        start_time = time.time()\n        response = None\n        try:\n            # Directly delegate to model, let model decide how to handle (batching or not)\n            kwargs.pop(\"raw_params\", None)\n            if hasattr(self._model, \"chat\"):\n                # Only remove request_id if model doesn't have batch scheduler\n                if not (\n                    hasattr(self._model, \"_batch_scheduler\")\n                    and self._model._batch_scheduler\n                ):\n                    kwargs.pop(\"request_id\", None)\n                response = await self._call_wrapper_json(\n                    self._model.chat, messages, *args, **kwargs\n                )\n                return response\n            if hasattr(self._model, \"async_chat\"):\n                if \"request_id\" not in kwargs:\n                    kwargs[\"request_id\"] = str(uuid.uuid1())\n                else:\n                    # model only accept string\n                    kwargs[\"request_id\"] = str(kwargs[\"request_id\"])\n                response = await self._call_wrapper_json(\n                    self._model.async_chat, messages, *args, **kwargs\n                )\n                return response\n            raise AttributeError(f\"Model {self._model.model_spec} is not for chat.\")\n        finally:\n            # For the non stream result.\n            record = None\n            if isinstance(response, Generator) or isinstance(response, AsyncGenerator):\n                record = response\n            elif isinstance(response, bytes):\n                record = json.loads(response)\n            if record and isinstance(record, dict):\n                usage = record[\"usage\"]\n                # Some backends may not have a valid usage, we just skip them.\n                completion_tokens = usage[\"completion_tokens\"]\n                prompt_tokens = usage[\"prompt_tokens\"]\n                await self._record_completion_metrics(\n                    time.time() - start_time,\n                    completion_tokens,\n                    prompt_tokens,\n                )\n\n    async def abort_request(\n        self,\n        request_id: str,\n        block_duration: int = XINFERENCE_DEFAULT_CANCEL_BLOCK_DURATION,\n    ) -> str:\n        from ..model.scheduler.core import AbortRequestMessage\n\n        # Always cancel the running task first\n        self._cancel_running_task(request_id, block_duration)\n\n        # If model has abort_request method, delegate to it\n        if hasattr(self._model, \"abort_request\"):\n            result = await self._model.abort_request(request_id)\n            if result is not None:\n                return result\n\n        # Otherwise return NO_OP for legacy models or when model doesn't handle abort\n        return AbortRequestMessage.NO_OP.name\n\n    @request_limit\n    @log_async(logger=logger)\n    async def create_embedding(self, input: Union[str, List[str]], *args, **kwargs):\n        kwargs.pop(\"request_id\", None)\n        if hasattr(self._model, \"create_embedding\"):\n            return await self._call_wrapper_json(\n                self._model.create_embedding, input, *args, **kwargs\n            )\n\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating embedding.\"\n        )\n\n    @request_limit\n    @log_async(logger=logger)\n    async def convert_ids_to_tokens(\n        self, input: Union[List, List[List]], *args, **kwargs\n    ):\n        kwargs.pop(\"request_id\", None)\n        if hasattr(self._model, \"convert_ids_to_tokens\"):\n            return await self._call_wrapper_json(\n                self._model.convert_ids_to_tokens, input, *args, **kwargs\n            )\n\n        raise AttributeError(f\"Model {self._model.model_spec} can convert token id.\")\n\n    @request_limit\n    @log_async(logger=logger)\n    async def rerank(\n        self,\n        documents: List[str],\n        query: str,\n        top_n: Optional[int],\n        max_chunks_per_doc: Optional[int],\n        return_documents: Optional[bool],\n        return_len: Optional[bool],\n        *args,\n        **kwargs,\n    ):\n        kwargs.pop(\"request_id\", None)\n        if hasattr(self._model, \"rerank\"):\n            return await self._call_wrapper_json(\n                self._model.rerank,\n                documents,\n                query,\n                top_n,\n                max_chunks_per_doc,\n                return_documents,\n                return_len,\n                *args,\n                **kwargs,\n            )\n        raise AttributeError(f\"Model {self._model.model_spec} is not for reranking.\")\n\n    @request_limit\n    @log_async(logger=logger, ignore_kwargs=[\"audio\"])\n    async def transcriptions(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n        **kwargs,\n    ):\n        kwargs.pop(\"request_id\", None)\n        if hasattr(self._model, \"transcriptions\"):\n            return await self._call_wrapper_json(\n                self._model.transcriptions,\n                audio,\n                language,\n                prompt,\n                response_format,\n                temperature,\n                timestamp_granularities,\n                **kwargs,\n            )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating transcriptions.\"\n        )\n\n    @request_limit\n    @log_async(logger=logger, ignore_kwargs=[\"audio\"])\n    async def translations(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n        **kwargs,\n    ):\n        kwargs.pop(\"request_id\", None)\n        if hasattr(self._model, \"translations\"):\n            return await self._call_wrapper_json(\n                self._model.translations,\n                audio,\n                language,\n                prompt,\n                response_format,\n                temperature,\n                timestamp_granularities,\n            )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating translations.\"\n        )\n\n    @request_limit\n    @xo.generator\n    @log_async(logger=logger, ignore_kwargs=[\"prompt_speech\"])\n    async def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        kwargs.pop(\"request_id\", None)\n        if hasattr(self._model, \"speech\"):\n            return await self._call_wrapper_binary(\n                self._model.speech,\n                input,\n                voice,\n                response_format,\n                speed,\n                stream,\n                **kwargs,\n            )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating speech.\"\n        )\n\n    @request_limit\n    @log_async(logger=logger)\n    async def text_to_image(\n        self,\n        prompt: str,\n        n: int = 1,\n        size: str = \"1024*1024\",\n        response_format: str = \"url\",\n        *args,\n        **kwargs,\n    ):\n        if hasattr(self._model, \"text_to_image\"):\n            # Get progressor (don't pop request_id, let _call_wrapper handle cancellation)\n            request_id = kwargs.get(\"request_id\")\n            progressor = kwargs[\"progressor\"] = await self._get_progressor(request_id)  # type: ignore\n            with progressor:\n                return await self._call_wrapper_json(\n                    self._model.text_to_image,\n                    prompt,\n                    n,\n                    size,\n                    response_format,\n                    *args,\n                    **kwargs,\n                )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating image.\"\n        )\n\n    @request_limit\n    @log_async(logger=logger)\n    async def txt2img(\n        self,\n        **kwargs,\n    ):\n        if hasattr(self._model, \"txt2img\"):\n            progressor = kwargs[\"progressor\"] = await self._get_progressor(\n                kwargs.pop(\"request_id\", None)\n            )\n            with progressor:\n                return await self._call_wrapper_json(\n                    self._model.txt2img,\n                    **kwargs,\n                )\n        raise AttributeError(f\"Model {self._model.model_spec} is not for txt2img.\")\n\n    @log_async(\n        logger=logger,\n        ignore_kwargs=[\"image\"],\n    )\n    async def image_to_image(\n        self,\n        image: \"PIL.Image\",\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        size: Optional[str] = None,\n        response_format: str = \"url\",\n        *args,\n        **kwargs,\n    ):\n        kwargs[\"negative_prompt\"] = negative_prompt\n        if hasattr(self._model, \"image_to_image\"):\n            progressor = kwargs[\"progressor\"] = await self._get_progressor(\n                kwargs.pop(\"request_id\", None)\n            )\n            with progressor:\n                return await self._call_wrapper_json(\n                    self._model.image_to_image,\n                    image,\n                    prompt,\n                    n,\n                    size,\n                    response_format,\n                    *args,\n                    **kwargs,\n                )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating image.\"\n        )\n\n    @request_limit\n    @log_async(logger=logger)\n    async def img2img(\n        self,\n        **kwargs,\n    ):\n        if hasattr(self._model, \"img2img\"):\n            progressor = kwargs[\"progressor\"] = await self._get_progressor(\n                kwargs.pop(\"request_id\", None)\n            )\n            with progressor:\n                return await self._call_wrapper_json(\n                    self._model.img2img,\n                    **kwargs,\n                )\n        raise AttributeError(f\"Model {self._model.model_spec} is not for img2img.\")\n\n    @log_async(\n        logger=logger,\n        ignore_kwargs=[\"image\"],\n    )\n    async def inpainting(\n        self,\n        image: \"PIL.Image\",\n        mask_image: \"PIL.Image\",\n        prompt: str,\n        negative_prompt: str,\n        n: int = 1,\n        size: str = \"1024*1024\",\n        response_format: str = \"url\",\n        *args,\n        **kwargs,\n    ):\n        kwargs[\"negative_prompt\"] = negative_prompt\n        if hasattr(self._model, \"inpainting\"):\n            progressor = kwargs[\"progressor\"] = await self._get_progressor(\n                kwargs.pop(\"request_id\", None)\n            )\n            with progressor:\n                return await self._call_wrapper_json(\n                    self._model.inpainting,\n                    image,\n                    mask_image,\n                    prompt,\n                    n,\n                    size,\n                    response_format,\n                    *args,\n                    **kwargs,\n                )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating image.\"\n        )\n\n    @log_async(\n        logger=logger,\n        ignore_kwargs=[\"image\"],\n    )\n    async def ocr(\n        self,\n        image: \"PIL.Image\",\n        *args,\n        **kwargs,\n    ):\n        if hasattr(self._model, \"ocr\"):\n            return await self._call_wrapper_json(\n                self._model.ocr,\n                image,\n                *args,\n                **kwargs,\n            )\n        raise AttributeError(f\"Model {self._model.model_spec} is not for ocr.\")\n\n    @request_limit\n    @log_async(logger=logger, ignore_kwargs=[\"image\"])\n    async def infer(\n        self,\n        *args,\n        **kwargs,\n    ):\n        kwargs.pop(\"request_id\", None)\n        if hasattr(self._model, \"infer\"):\n            return await self._call_wrapper_json(\n                self._model.infer,\n                *args,\n                **kwargs,\n            )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for flexible infer.\"\n        )\n\n    @request_limit\n    @log_async(logger=logger)\n    async def text_to_video(\n        self,\n        prompt: str,\n        n: int = 1,\n        *args,\n        **kwargs,\n    ):\n        progressor = kwargs[\"progressor\"] = await self._get_progressor(\n            kwargs.pop(\"request_id\", None)\n        )\n        with progressor:\n            if hasattr(self._model, \"text_to_video\"):\n                return await self._call_wrapper_json(\n                    self._model.text_to_video,\n                    prompt,\n                    n,\n                    *args,\n                    **kwargs,\n                )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating video.\"\n        )\n\n    @request_limit\n    @log_async(logger=logger)\n    async def image_to_video(\n        self,\n        image: \"PIL.Image\",\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        *args,\n        **kwargs,\n    ):\n        kwargs[\"negative_prompt\"] = negative_prompt\n        progressor = kwargs[\"progressor\"] = await self._get_progressor(\n            kwargs.pop(\"request_id\", None)\n        )\n        with progressor:\n            if hasattr(self._model, \"image_to_video\"):\n                return await self._call_wrapper_json(\n                    self._model.image_to_video,\n                    image,\n                    prompt,\n                    n,\n                    *args,\n                    **kwargs,\n                )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating video from image.\"\n        )\n\n    @request_limit\n    @log_async(logger=logger)\n    async def flf_to_video(\n        self,\n        first_frame: \"PIL.Image.Image\",\n        last_frame: \"PIL.Image.Image\",\n        prompt: str,\n        negative_prompt: Optional[str] = None,\n        n: int = 1,\n        *args,\n        **kwargs,\n    ):\n        kwargs[\"negative_prompt\"] = negative_prompt\n        progressor = kwargs[\"progressor\"] = await self._get_progressor(\n            kwargs.pop(\"request_id\", None)\n        )\n        with progressor:\n            if hasattr(self._model, \"firstlastframe_to_video\"):\n                return await self._call_wrapper_json(\n                    self._model.firstlastframe_to_video,\n                    first_frame,\n                    last_frame,\n                    prompt,\n                    n,\n                    *args,\n                    **kwargs,\n                )\n        raise AttributeError(\n            f\"Model {self._model.model_spec} is not for creating video from first-last-frame.\"\n        )\n\n    async def record_metrics(self, name, op, kwargs):\n        worker_ref = await self._get_worker_ref()\n        await worker_ref.record_metrics(name, op, kwargs)\n\n    async def get_pending_requests_count(self):\n        return self._pending_requests.qsize()\n"
  },
  {
    "path": "xinference/core/otel.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nOpenTelemetry (OTEL) initialization for Xinference.\n\nThis module is only imported when ENABLE_OTEL=true.  All setup is performed\nin a single call to ``setup_otel(app)``.  Requires the optional dependency\ngroup:  ``pip install xinference[otel]``\n\nSupported environment variables\n--------------------------------\nXINFERENCE_ENABLE_OTEL                         Enable OTEL (default: false)\nXINFERENCE_OTLP_BASE_ENDPOINT                  Base OTLP endpoint  (default: http://localhost:4318)\nXINFERENCE_OTLP_TRACE_ENDPOINT                 Override trace endpoint  (default: <base>/v1/traces)\nXINFERENCE_OTLP_METRIC_ENDPOINT                Override metric endpoint (default: <base>/v1/metrics)\nXINFERENCE_OTLP_API_KEY                        API key sent as \"Authorization: Bearer <key>\" header\nXINFERENCE_OTEL_EXPORTER_OTLP_PROTOCOL         \"http/protobuf\" (default) or \"grpc\"\nXINFERENCE_OTEL_EXPORTER_TYPE                  \"otlp\" (default) – reserved for future exporters\nXINFERENCE_OTEL_SAMPLING_RATE                  TraceIdRatio sampler rate, 0.0-1.0 (default: 0.1)\nXINFERENCE_OTEL_BATCH_EXPORT_SCHEDULE_DELAY    Batch span processor schedule delay ms (default: 5000)\nXINFERENCE_OTEL_MAX_QUEUE_SIZE                 Max span queue size (default: 2048)\nXINFERENCE_OTEL_MAX_EXPORT_BATCH_SIZE          Max spans per export batch (default: 512)\nXINFERENCE_OTEL_METRIC_EXPORT_INTERVAL         Metric periodic reader interval ms (default: 60000)\nXINFERENCE_OTEL_BATCH_EXPORT_TIMEOUT           Batch span export timeout ms (default: 10000)\nXINFERENCE_OTEL_METRIC_EXPORT_TIMEOUT          Metric export timeout ms (default: 30000)\n\"\"\"\n\nimport logging\nfrom typing import Optional\n\nlogger = logging.getLogger(__name__)\n\n# Sentinel so setup_otel() is idempotent (safe to call multiple times)\n_otel_initialized = False\n\n\ndef setup_otel(\n    app=None,\n    service_name: str = \"xinference\",\n    *,\n    instrument_app: bool = True,\n    register_worker_metrics: bool = True,\n) -> None:  # type: ignore[type-arg]\n    \"\"\"\n    Initialise OpenTelemetry tracing and metrics and instrument the FastAPI app.\n\n    This function is a no-op when called a second time (idempotent).\n    All OTEL SDK objects are created lazily inside this function so that the\n    heavy imports are never executed when OTEL is disabled.\n\n    Parameters\n    ----------\n    app:\n        The FastAPI application instance.\n    service_name:\n        The OTEL ``service.name`` resource attribute (default: \"xinference\").\n    instrument_app:\n        Whether to attach FastAPI auto-instrumentation for the provided app.\n    register_worker_metrics:\n        Whether to register supervisor-side worker resource metrics.\n    \"\"\"\n    global _otel_initialized\n    if _otel_initialized:\n        return\n\n    from ..constants import (\n        XINFERENCE_OTEL_BATCH_EXPORT_SCHEDULE_DELAY,\n        XINFERENCE_OTEL_BATCH_EXPORT_TIMEOUT,\n        XINFERENCE_OTEL_EXPORTER_OTLP_PROTOCOL,\n        XINFERENCE_OTEL_MAX_EXPORT_BATCH_SIZE,\n        XINFERENCE_OTEL_MAX_QUEUE_SIZE,\n        XINFERENCE_OTEL_METRIC_EXPORT_INTERVAL,\n        XINFERENCE_OTEL_METRIC_EXPORT_TIMEOUT,\n        XINFERENCE_OTEL_SAMPLING_RATE,\n        XINFERENCE_OTLP_API_KEY,\n        XINFERENCE_OTLP_METRIC_ENDPOINT,\n        XINFERENCE_OTLP_TRACE_ENDPOINT,\n    )\n\n    try:\n        _setup_tracing(\n            service_name=service_name,\n            trace_endpoint=XINFERENCE_OTLP_TRACE_ENDPOINT,\n            api_key=XINFERENCE_OTLP_API_KEY,\n            protocol=XINFERENCE_OTEL_EXPORTER_OTLP_PROTOCOL,\n            sampling_rate=XINFERENCE_OTEL_SAMPLING_RATE,\n            schedule_delay_ms=XINFERENCE_OTEL_BATCH_EXPORT_SCHEDULE_DELAY,\n            max_queue_size=XINFERENCE_OTEL_MAX_QUEUE_SIZE,\n            max_export_batch_size=XINFERENCE_OTEL_MAX_EXPORT_BATCH_SIZE,\n            export_timeout_ms=XINFERENCE_OTEL_BATCH_EXPORT_TIMEOUT,\n        )\n        _setup_metrics(\n            service_name=service_name,\n            metric_endpoint=XINFERENCE_OTLP_METRIC_ENDPOINT,\n            api_key=XINFERENCE_OTLP_API_KEY,\n            protocol=XINFERENCE_OTEL_EXPORTER_OTLP_PROTOCOL,\n            export_interval_ms=XINFERENCE_OTEL_METRIC_EXPORT_INTERVAL,\n            export_timeout_ms=XINFERENCE_OTEL_METRIC_EXPORT_TIMEOUT,\n        )\n        if instrument_app and app is not None:\n            _instrument_fastapi(app)\n        collector_id = None\n        if register_worker_metrics:\n            # Register worker metrics gauges (data is fed by supervisor)\n            global _cluster_metrics_collector\n            _cluster_metrics_collector = ClusterMetricsCollector()\n            _cluster_metrics_collector.register()\n            collector_id = id(_cluster_metrics_collector)\n\n        _otel_initialized = True\n        logger.info(\n            \"OpenTelemetry initialized. \"\n            \"trace_endpoint=%s metric_endpoint=%s sampling_rate=%s collector_id=%s\",\n            XINFERENCE_OTLP_TRACE_ENDPOINT,\n            XINFERENCE_OTLP_METRIC_ENDPOINT,\n            XINFERENCE_OTEL_SAMPLING_RATE,\n            collector_id,\n        )\n    except ImportError as exc:\n        logger.warning(\n            \"OpenTelemetry packages are not installed. \"\n            \"OTEL support is disabled. \"\n            \"Install them with: pip install xinference[otel]\\n\"\n            \"Error: %s\",\n            exc,\n        )\n    except Exception:\n        logger.exception(\n            \"Failed to initialise OpenTelemetry. OTEL support is disabled.\"\n        )\n\n\n# ---------------------------------------------------------------------------\n# Internal helpers\n# ---------------------------------------------------------------------------\n\n\ndef _build_headers(api_key: str) -> Optional[dict]:\n    \"\"\"Return Authorization headers when an API key is configured.\"\"\"\n    if api_key:\n        return {\"Authorization\": f\"Bearer {api_key}\"}\n    return None\n\n\ndef _setup_tracing(\n    service_name: str,\n    trace_endpoint: str,\n    api_key: str,\n    protocol: str,\n    sampling_rate: float,\n    schedule_delay_ms: int,\n    max_queue_size: int,\n    max_export_batch_size: int,\n    export_timeout_ms: int,\n) -> None:\n    \"\"\"Configure the global TracerProvider with a BatchSpanProcessor.\"\"\"\n    from opentelemetry import trace\n    from opentelemetry.sdk.resources import Resource\n    from opentelemetry.sdk.trace import TracerProvider\n    from opentelemetry.sdk.trace.export import BatchSpanProcessor\n    from opentelemetry.sdk.trace.sampling import TraceIdRatioBased\n\n    resource = Resource.create({\"service.name\": service_name})\n    sampler = TraceIdRatioBased(sampling_rate)\n    provider = TracerProvider(resource=resource, sampler=sampler)\n\n    exporter = _build_span_exporter(\n        endpoint=trace_endpoint,\n        api_key=api_key,\n        protocol=protocol,\n        export_timeout_ms=export_timeout_ms,\n    )\n\n    processor = BatchSpanProcessor(\n        exporter,\n        schedule_delay_millis=schedule_delay_ms,\n        max_queue_size=max_queue_size,\n        max_export_batch_size=max_export_batch_size,\n        export_timeout_millis=export_timeout_ms,\n    )\n    provider.add_span_processor(processor)\n    trace.set_tracer_provider(provider)\n\n\ndef _build_span_exporter(\n    endpoint: str,\n    api_key: str,\n    protocol: str,\n    export_timeout_ms: int,\n):\n    \"\"\"Return an OTLP span exporter based on the configured protocol.\"\"\"\n    headers = _build_headers(api_key)\n    timeout_s = export_timeout_ms // 1000\n\n    if protocol == \"grpc\":\n        from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (\n            OTLPSpanExporter,\n        )\n\n        return OTLPSpanExporter(\n            endpoint=endpoint,\n            headers=headers,\n            timeout=timeout_s,\n        )\n    else:\n        # Default: http/protobuf\n        from opentelemetry.exporter.otlp.proto.http.trace_exporter import (\n            OTLPSpanExporter,\n        )\n\n        return OTLPSpanExporter(\n            endpoint=endpoint,\n            headers=headers,\n            timeout=timeout_s,\n        )\n\n\ndef _setup_metrics(\n    service_name: str,\n    metric_endpoint: str,\n    api_key: str,\n    protocol: str,\n    export_interval_ms: int,\n    export_timeout_ms: int,\n) -> None:\n    \"\"\"Configure the global MeterProvider with a PeriodicExportingMetricReader.\"\"\"\n    from opentelemetry import metrics\n    from opentelemetry.sdk.metrics import MeterProvider\n    from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader\n    from opentelemetry.sdk.resources import Resource\n\n    resource = Resource.create({\"service.name\": service_name})\n    exporter = _build_metric_exporter(\n        endpoint=metric_endpoint,\n        api_key=api_key,\n        protocol=protocol,\n        export_timeout_ms=export_timeout_ms,\n    )\n    reader = PeriodicExportingMetricReader(\n        exporter,\n        export_interval_millis=export_interval_ms,\n        export_timeout_millis=export_timeout_ms,\n    )\n    provider = MeterProvider(resource=resource, metric_readers=[reader])\n    metrics.set_meter_provider(provider)\n\n\ndef _build_metric_exporter(\n    endpoint: str,\n    api_key: str,\n    protocol: str,\n    export_timeout_ms: int,\n):\n    \"\"\"Return an OTLP metric exporter based on the configured protocol.\"\"\"\n    headers = _build_headers(api_key)\n    timeout_s = export_timeout_ms // 1000\n\n    if protocol == \"grpc\":\n        from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import (\n            OTLPMetricExporter,\n        )\n\n        return OTLPMetricExporter(\n            endpoint=endpoint,\n            headers=headers,\n            timeout=timeout_s,\n        )\n    else:\n        from opentelemetry.exporter.otlp.proto.http.metric_exporter import (\n            OTLPMetricExporter,\n        )\n\n        return OTLPMetricExporter(\n            endpoint=endpoint,\n            headers=headers,\n            timeout=timeout_s,\n        )\n\n\ndef _instrument_fastapi(app) -> None:  # type: ignore[type-arg]\n    \"\"\"Attach OpenTelemetry auto-instrumentation to the FastAPI app.\"\"\"\n    from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor\n\n    FastAPIInstrumentor.instrument_app(app)\n    logger.debug(\"FastAPI instrumented with OpenTelemetry.\")\n\n\n# ---------------------------------------------------------------------------\n# Supervisor-side worker metrics (CPU / MEM / GPU)\n# ---------------------------------------------------------------------------\n\n\nclass ClusterMetricsCollector:\n    \"\"\"\n    Collects worker node metrics (CPU, memory, GPU) for ALL workers and\n    reports them as OTEL ObservableGauge metrics.\n\n    This is designed to run in the **supervisor** process, which already\n    receives periodic ``report_worker_status(address, node_info)`` calls\n    from every worker.  The supervisor's ``setup_otel()`` has already\n    initialised the MeterProvider, so no additional provider setup is needed.\n\n    Usage::\n\n        collector = ClusterMetricsCollector()\n        collector.register()\n\n        # In supervisor.report_worker_status():\n        collector.update(worker_address, node_info)\n    \"\"\"\n\n    def __init__(self) -> None:\n        # { worker_address: { \"cpu\": ResourceStatus, 0: GPUStatus, ... } }\n        self._workers: dict = {}\n\n    def update(self, worker_address: str, node_info: dict) -> None:\n        \"\"\"Store the latest ``gather_node_info()`` result for a worker.\"\"\"\n        self._workers[worker_address] = node_info\n\n    def remove_worker(self, worker_address: str) -> None:\n        \"\"\"Stop reporting metrics for a removed/dead worker.\"\"\"\n        self._workers.pop(worker_address, None)\n\n    def register(self) -> None:\n        \"\"\"Create OTEL ObservableGauge instruments and bind callbacks.\"\"\"\n        from opentelemetry import metrics\n\n        meter = metrics.get_meter(\"xinference.worker\")\n\n        meter.create_observable_gauge(\n            name=\"xinference.worker.cpu.utilization\",\n            callbacks=[self._cpu_utilization_cb],\n            description=\"Worker CPU utilization (0.0 - 1.0)\",\n            unit=\"1\",\n        )\n        meter.create_observable_gauge(\n            name=\"xinference.worker.cpu.count\",\n            callbacks=[self._cpu_count_cb],\n            description=\"Worker CPU core count\",\n            unit=\"{cores}\",\n        )\n        meter.create_observable_gauge(\n            name=\"xinference.worker.memory.used\",\n            callbacks=[self._memory_used_cb],\n            description=\"Worker memory used in bytes\",\n            unit=\"By\",\n        )\n        meter.create_observable_gauge(\n            name=\"xinference.worker.memory.total\",\n            callbacks=[self._memory_total_cb],\n            description=\"Worker total memory in bytes\",\n            unit=\"By\",\n        )\n        meter.create_observable_gauge(\n            name=\"xinference.worker.gpu.utilization\",\n            callbacks=[self._gpu_utilization_cb],\n            description=\"Worker GPU utilization (0.0 - 1.0)\",\n            unit=\"1\",\n        )\n        meter.create_observable_gauge(\n            name=\"xinference.worker.gpu.memory.used\",\n            callbacks=[self._gpu_mem_used_cb],\n            description=\"Worker GPU memory used in bytes\",\n            unit=\"By\",\n        )\n        meter.create_observable_gauge(\n            name=\"xinference.worker.gpu.memory.total\",\n            callbacks=[self._gpu_mem_total_cb],\n            description=\"Worker GPU total memory in bytes\",\n            unit=\"By\",\n        )\n        meter.create_observable_gauge(\n            name=\"xinference.worker.gpu.memory.free\",\n            callbacks=[self._gpu_mem_free_cb],\n            description=\"Worker GPU free memory in bytes\",\n            unit=\"By\",\n        )\n\n    # -- CPU callbacks -------------------------------------------------------\n\n    def _cpu_utilization_cb(self, options):  # type: ignore[no-untyped-def]\n        from opentelemetry.metrics import Observation\n\n        for addr, info in self._workers.items():\n            cpu = info.get(\"cpu\")\n            if cpu is not None:\n                yield Observation(cpu.usage, {\"worker_address\": addr})\n\n    def _cpu_count_cb(self, options):  # type: ignore[no-untyped-def]\n        from opentelemetry.metrics import Observation\n\n        for addr, info in self._workers.items():\n            cpu = info.get(\"cpu\")\n            if cpu is not None:\n                yield Observation(cpu.total, {\"worker_address\": addr})\n\n    # -- Memory callbacks ----------------------------------------------------\n\n    def _memory_used_cb(self, options):  # type: ignore[no-untyped-def]\n        from opentelemetry.metrics import Observation\n\n        for addr, info in self._workers.items():\n            cpu = info.get(\"cpu\")\n            if cpu is not None:\n                yield Observation(cpu.memory_used, {\"worker_address\": addr})\n\n    def _memory_total_cb(self, options):  # type: ignore[no-untyped-def]\n        from opentelemetry.metrics import Observation\n\n        for addr, info in self._workers.items():\n            cpu = info.get(\"cpu\")\n            if cpu is not None:\n                yield Observation(cpu.memory_total, {\"worker_address\": addr})\n\n    # -- GPU callbacks -------------------------------------------------------\n\n    def _gpu_utilization_cb(self, options):  # type: ignore[no-untyped-def]\n        from opentelemetry.metrics import Observation\n\n        for addr, info in self._workers.items():\n            for key, gpu in info.items():\n                if key == \"cpu\":\n                    continue\n                yield Observation(\n                    gpu.gpu_util,\n                    {\n                        \"worker_address\": addr,\n                        \"gpu_index\": str(key),\n                        \"gpu_name\": gpu.name,\n                    },\n                )\n\n    def _gpu_mem_used_cb(self, options):  # type: ignore[no-untyped-def]\n        from opentelemetry.metrics import Observation\n\n        for addr, info in self._workers.items():\n            for key, gpu in info.items():\n                if key == \"cpu\":\n                    continue\n                yield Observation(\n                    gpu.mem_used,\n                    {\n                        \"worker_address\": addr,\n                        \"gpu_index\": str(key),\n                        \"gpu_name\": gpu.name,\n                    },\n                )\n\n    def _gpu_mem_total_cb(self, options):  # type: ignore[no-untyped-def]\n        from opentelemetry.metrics import Observation\n\n        for addr, info in self._workers.items():\n            for key, gpu in info.items():\n                if key == \"cpu\":\n                    continue\n                yield Observation(\n                    gpu.mem_total,\n                    {\n                        \"worker_address\": addr,\n                        \"gpu_index\": str(key),\n                        \"gpu_name\": gpu.name,\n                    },\n                )\n\n    def _gpu_mem_free_cb(self, options):  # type: ignore[no-untyped-def]\n        from opentelemetry.metrics import Observation\n\n        for addr, info in self._workers.items():\n            for key, gpu in info.items():\n                if key == \"cpu\":\n                    continue\n                yield Observation(\n                    gpu.mem_free,\n                    {\n                        \"worker_address\": addr,\n                        \"gpu_index\": str(key),\n                        \"gpu_name\": gpu.name,\n                    },\n                )\n\n\n# Singleton instance (created by setup_otel, used by supervisor)\n_cluster_metrics_collector: Optional[ClusterMetricsCollector] = None\n\n\ndef get_cluster_metrics_collector() -> Optional[ClusterMetricsCollector]:\n    \"\"\"Return the global ClusterMetricsCollector, or None if OTEL is disabled.\"\"\"\n    return _cluster_metrics_collector\n"
  },
  {
    "path": "xinference/core/progress_tracker.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport dataclasses\nimport logging\nimport os\nimport time\nfrom typing import Dict, List, Optional, Tuple\n\nimport numpy as np\nimport xoscar as xo\n\nTO_REMOVE_PROGRESS_INTERVAL = float(\n    os.getenv(\"XINFERENCE_REMOVE_PROGRESS_INTERVAL\", 5 * 60)\n)  # 5min\nCHECK_PROGRESS_INTERVAL = float(\n    os.getenv(\"XINFERENCE_CHECK_PROGRESS_INTERVAL\", 1 * 60)\n)  # 1min\nUPLOAD_PROGRESS_SPAN = float(\n    os.getenv(\"XINFERENCE_UPLOAD_PROGRESS_SPAN\", 0.05)\n)  # not upload when change less than 0.1\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclasses.dataclass\nclass _ProgressInfo:\n    progress: float\n    last_updated: float\n    info: Optional[str] = None\n\n\nclass ProgressTrackerActor(xo.StatelessActor):\n    _request_id_to_progress: Dict[str, _ProgressInfo]\n\n    @classmethod\n    def default_uid(cls) -> str:\n        return \"progress_tracker\"\n\n    def __init__(\n        self,\n        to_remove_interval: float = TO_REMOVE_PROGRESS_INTERVAL,\n        check_interval: float = CHECK_PROGRESS_INTERVAL,\n    ):\n        super().__init__()\n\n        self._request_id_to_progress = {}\n        self._clear_finished_task = None\n        self._to_remove_interval = to_remove_interval\n        self._check_interval = check_interval\n\n    async def __post_create__(self):\n        self._clear_finished_task = asyncio.create_task(self._clear_finished())\n\n    async def __pre_destroy__(self):\n        if self._clear_finished_task:\n            self._clear_finished_task.cancel()\n\n    async def _clear_finished(self):\n        to_remove_request_ids = []\n        while True:\n            now = time.time()\n            for request_id, progress in self._request_id_to_progress.items():\n                if abs(progress.progress - 1.0) > 1e-5:\n                    continue\n\n                # finished\n                if now - progress.last_updated > self._to_remove_interval:\n                    to_remove_request_ids.append(request_id)\n\n            for rid in to_remove_request_ids:\n                del self._request_id_to_progress[rid]\n\n            if to_remove_request_ids:\n                logger.debug(\n                    \"Remove requests %s due to it's finished for over %s seconds\",\n                    to_remove_request_ids,\n                    self._to_remove_interval,\n                )\n\n            await asyncio.sleep(self._check_interval)\n\n    def start(self, request_id: str, info: Optional[str] = None):\n        self._request_id_to_progress[request_id] = _ProgressInfo(\n            progress=0.0, last_updated=time.time(), info=info\n        )\n\n    def set_progress(\n        self, request_id: str, progress: float, info: Optional[str] = None\n    ):\n        assert progress <= 1.0\n        info_ = self._request_id_to_progress[request_id]\n        info_.progress = progress\n        info_.last_updated = time.time()\n        if info:\n            info_.info = info\n        logger.debug(\n            \"Setting progress, request id: %s, progress: %s\", request_id, progress\n        )\n\n    def get_progress(self, request_id: str) -> float:\n        return self._request_id_to_progress[request_id].progress\n\n    def get_progress_info(self, request_id: str) -> Tuple[float, Optional[str]]:\n        info = self._request_id_to_progress[request_id]\n        return info.progress, info.info\n\n\nclass Progressor:\n    _sub_progress_stack: List[Tuple[float, float]]\n\n    def __init__(\n        self,\n        request_id: str,\n        progress_tracker_ref: xo.ActorRefType[\"ProgressTrackerActor\"],\n        loop: asyncio.AbstractEventLoop,\n        upload_span: float = UPLOAD_PROGRESS_SPAN,\n    ):\n        self.request_id = request_id\n        self.progress_tracker_ref = progress_tracker_ref\n        self.loop = loop\n        # uploading when progress changes over this span\n        # to prevent from frequently uploading\n        self._upload_span = upload_span\n\n        self._last_report_progress = 0.0\n        self._current_progress = 0.0\n        self._sub_progress_stack = [(0.0, 1.0)]\n        self._current_sub_progress_start = 0.0\n        self._current_sub_progress_end = 1.0\n\n    async def start(self):\n        if self.request_id:\n            await self.progress_tracker_ref.start(self.request_id)\n\n    def split_stages(self, n_stage: int, stage_weight: Optional[List[float]] = None):\n        if self.request_id:\n            if stage_weight is not None:\n                if len(stage_weight) != n_stage + 1:\n                    raise ValueError(\n                        f\"stage_weight should have size {n_stage + 1}, got {len(stage_weight)}\"\n                    )\n                progresses = stage_weight\n            else:\n                progresses = np.linspace(\n                    self._current_sub_progress_start,\n                    self._current_sub_progress_end,\n                    n_stage + 1,\n                )\n            spans = [(progresses[i], progresses[i + 1]) for i in range(n_stage)]\n            self._sub_progress_stack.extend(spans[::-1])\n\n    def __enter__(self):\n        if self.request_id:\n            (\n                self._current_sub_progress_start,\n                self._current_sub_progress_end,\n            ) = self._sub_progress_stack[-1]\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        if self.request_id:\n            self._sub_progress_stack.pop()\n            # force to set progress to 1.0 for this sub progress\n            # nevertheless it is done or not\n            self.set_progress(1.0)\n        return False\n\n    def set_progress(self, progress: float, info: Optional[str] = None):\n        if self.request_id:\n            self._current_progress = (\n                self._current_sub_progress_start\n                + (self._current_sub_progress_end - self._current_sub_progress_start)\n                * progress\n            )\n            if (\n                self._current_progress - self._last_report_progress >= self._upload_span\n                or 1.0 - progress < 1e-5\n            ) or info:\n                set_progress = self.progress_tracker_ref.set_progress(\n                    self.request_id, self._current_progress\n                )\n                asyncio.run_coroutine_threadsafe(set_progress, self.loop)  # type: ignore\n                self._last_report_progress = self._current_progress\n"
  },
  {
    "path": "xinference/core/resource.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom dataclasses import dataclass\nfrom typing import Dict, Union\n\nimport psutil\n\nfrom ..device_utils import get_nvidia_gpu_info\n\n\n@dataclass\nclass ResourceStatus:\n    usage: float\n    total: float\n    memory_used: float\n    memory_available: float\n    memory_total: float\n\n\n@dataclass\nclass GPUStatus:\n    name: str\n    mem_total: float\n    mem_free: float\n    mem_used: float\n    mem_usage: float\n    gpu_util: float\n\n\ndef gather_node_info() -> Dict[str, Union[ResourceStatus, GPUStatus]]:\n    node_resource = dict()\n    mem_info = psutil.virtual_memory()\n    node_resource[\"cpu\"] = ResourceStatus(\n        usage=psutil.cpu_percent() / 100.0,\n        total=psutil.cpu_count(),\n        memory_used=mem_info.used,\n        memory_available=mem_info.available,\n        memory_total=mem_info.total,\n    )\n    for gpu_idx, gpu_info in get_nvidia_gpu_info().items():\n        mem_total = gpu_info[\"total\"]\n        mem_usage = (gpu_info[\"used\"] / mem_total) if mem_total else 0.0\n        node_resource[gpu_idx] = GPUStatus(  # type: ignore\n            name=gpu_info[\"name\"],\n            mem_total=mem_total,\n            mem_used=gpu_info[\"used\"],\n            mem_free=gpu_info[\"free\"],\n            mem_usage=mem_usage,\n            gpu_util=gpu_info[\"util\"],\n        )\n\n    return node_resource  # type: ignore\n"
  },
  {
    "path": "xinference/core/status_guard.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom enum import Enum\nfrom logging import getLogger\nfrom typing import Dict, List, Optional\n\nimport xoscar as xo\n\nfrom .._compat import BaseModel, Field\n\nlogger = getLogger(__name__)\n\n\nclass LaunchStatus(Enum):\n    CREATING = 1\n    UPDATING = 2\n    TERMINATING = 3\n    TERMINATED = 4\n    READY = 5\n    ERROR = 6\n\n\nclass ReplicaStatus(BaseModel):\n    \"\"\"Status information for a single model replica\"\"\"\n\n    replica_id: int\n    replica_model_uid: str\n    worker_address: str\n    status: str  # CREATING, READY, ERROR\n    created_ts: int\n    error_message: Optional[str] = None\n\n\nclass InstanceInfo(BaseModel):\n    model_name: str\n    model_uid: str\n    model_version: Optional[str]\n    model_ability: List[str]\n    replica: int\n    status: str\n    instance_created_ts: int\n    n_worker: Optional[int] = 1\n    replica_statuses: List[ReplicaStatus] = Field(default_factory=list)\n\n    def update(self, **kwargs):\n        for field, value in kwargs.items():\n            setattr(self, field, value)\n\n\nclass StatusGuardActor(xo.StatelessActor):\n    def __init__(self):\n        super().__init__()\n        self._model_uid_to_info: Dict[str, InstanceInfo] = {}  # type: ignore\n\n    @classmethod\n    def default_uid(cls) -> str:\n        return \"status_guard\"\n\n    @staticmethod\n    def _drop_terminated_info(instance_infos: List[InstanceInfo]) -> List[InstanceInfo]:\n        return [\n            info\n            for info in instance_infos\n            if info.status != LaunchStatus.TERMINATED.name\n        ]\n\n    def set_instance_info(self, model_uid: str, info: InstanceInfo):\n        self._model_uid_to_info[model_uid] = info\n\n    def get_instance_info(\n        self, model_name: Optional[str] = None, model_uid: Optional[str] = None\n    ) -> List[InstanceInfo]:\n        if model_uid is not None:\n            return (\n                self._drop_terminated_info([self._model_uid_to_info[model_uid]])\n                if model_uid in self._model_uid_to_info\n                else []\n            )\n        all_infos: List[InstanceInfo] = list(self._model_uid_to_info.values())\n        filtered_infos: List[InstanceInfo] = list(\n            filter(lambda info: info.model_name == model_name, all_infos)\n        )\n        return (\n            self._drop_terminated_info(filtered_infos)\n            if model_name is not None\n            else self._drop_terminated_info(all_infos)\n        )\n\n    def get_instance_count(self, model_name: str) -> int:\n        return len(self.get_instance_info(model_name=model_name))\n\n    def update_instance_info(self, model_uid: str, info: Dict):\n        self._model_uid_to_info[model_uid].update(**info)\n\n    def update_replica_status(\n        self, model_uid: str, replica_id: int, status_update: Dict\n    ):\n        \"\"\"Update status for a specific replica\"\"\"\n        if model_uid not in self._model_uid_to_info:\n            logger.warning(f\"Model {model_uid} not found in status guard\")\n            return\n\n        replica_statuses = self._model_uid_to_info[model_uid].replica_statuses\n        if replica_statuses is None:\n            self._model_uid_to_info[model_uid].replica_statuses = []\n            replica_statuses = self._model_uid_to_info[model_uid].replica_statuses\n\n        # Find existing replica status or create new one\n        found = False\n        for replica_status in replica_statuses:\n            if replica_status.replica_id == replica_id:\n                for key, value in status_update.items():\n                    setattr(replica_status, key, value)\n                found = True\n                break\n\n        if not found:\n            # Create new replica status\n            replica_statuses.append(\n                ReplicaStatus(\n                    replica_id=replica_id,\n                    replica_model_uid=status_update.get(\"replica_model_uid\", \"\"),\n                    worker_address=status_update.get(\"worker_address\", \"\"),\n                    status=status_update.get(\"status\", LaunchStatus.CREATING.name),\n                    created_ts=status_update.get(\"created_ts\", 0),\n                    error_message=status_update.get(\"error_message\", None),\n                )\n            )\n\n    def get_replica_statuses(self, model_uid: str) -> List[ReplicaStatus]:\n        \"\"\"Get all replica statuses for a model\"\"\"\n        if model_uid in self._model_uid_to_info:\n            return self._model_uid_to_info[model_uid].replica_statuses or []\n        return []\n"
  },
  {
    "path": "xinference/core/supervisor.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport itertools\nimport os\nimport signal\nimport time\nimport typing\nfrom collections import defaultdict\nfrom dataclasses import dataclass, field\nfrom logging import getLogger\nfrom typing import (\n    TYPE_CHECKING,\n    Any,\n    DefaultDict,\n    Dict,\n    Iterator,\n    List,\n    Literal,\n    Optional,\n    Tuple,\n    Type,\n    Union,\n)\n\nimport xoscar as xo\n\nfrom ..constants import (\n    XINFERENCE_DEFAULT_CANCEL_BLOCK_DURATION,\n    XINFERENCE_DISABLE_HEALTH_CHECK,\n    XINFERENCE_ENABLE_OTEL,\n    XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD,\n    XINFERENCE_HEALTH_CHECK_INTERVAL,\n    XINFERENCE_HEALTH_CHECK_TIMEOUT,\n    XINFERENCE_LAUNCH_STRATEGY,\n)\nfrom ..core.model import ModelActor\nfrom ..core.status_guard import InstanceInfo, LaunchStatus\nfrom ..model.utils import (\n    get_engine_params_by_name,\n    get_engine_params_by_name_with_virtual_env,\n)\nfrom ..types import PeftModelConfig\nfrom .launch_strategy import IdleFirstLaunchStrategy\nfrom .metrics import record_metrics\nfrom .resource import GPUStatus, ResourceStatus\nfrom .utils import (\n    assign_replica_gpu,\n    build_replica_model_uid,\n    gen_random_string,\n    is_valid_model_uid,\n    iter_replica_model_uid,\n    log_async,\n    log_sync,\n    parse_model_version,\n    parse_replica_model_uid,\n)\n\nif TYPE_CHECKING:\n    from ..model.audio import AudioModelFamilyV2\n    from ..model.embedding import EmbeddingModelFamilyV2\n    from ..model.flexible import FlexibleModelSpec\n    from ..model.image import ImageModelFamilyV2\n    from ..model.llm import LLMFamilyV2\n    from ..model.rerank import RerankModelFamilyV2\n    from ..model.video import VideoModelFamilyV2\n    from .worker import WorkerActor\n\n\nlogger = getLogger(__name__)\n\n\nASYNC_LAUNCH_TASKS = {}  # type: ignore\n\n\ndef callback_for_async_launch(model_uid: str):\n    ASYNC_LAUNCH_TASKS.pop(model_uid, None)\n    logger.debug(f\"Model uid: {model_uid} async launch completes.\")\n\n\n@dataclass\nclass WorkerStatus:\n    update_time: float\n    failure_remaining_count: int\n    status: Dict[str, Union[ResourceStatus, GPUStatus]]\n\n\n@dataclass\nclass ReplicaInfo:\n    replica: int\n    scheduler: Iterator\n    replica_to_worker_refs: DefaultDict[int, List[xo.ActorRefType[\"WorkerActor\"]]] = (\n        field(default_factory=lambda: defaultdict(list))\n    )\n\n\nclass SupervisorActor(xo.StatelessActor):\n    def __init__(self):\n        super().__init__()\n        self._worker_address_to_worker: Dict[str, xo.ActorRefType[\"WorkerActor\"]] = {}  # type: ignore\n        self._worker_status: Dict[str, WorkerStatus] = {}  # type: ignore\n        self._replica_model_uid_to_worker: Dict[  # type: ignore\n            str,\n            Union[\n                xo.ActorRefType[\"WorkerActor\"],\n                Tuple[xo.ActorRefType[\"WorkerActor\"], ...],\n            ],\n        ] = {}\n        self._model_uid_to_replica_info: Dict[str, ReplicaInfo] = {}  # type: ignore\n        self._uptime = None\n        self._lock = asyncio.Lock()\n\n    @classmethod\n    def default_uid(cls) -> str:\n        return \"supervisor\"\n\n    def _get_worker_ref_by_ip(\n        self, ip: str\n    ) -> Optional[xo.ActorRefType[\"WorkerActor\"]]:\n        for addr, ref in self._worker_address_to_worker.items():\n            existing_ip = addr.split(\":\")[0]\n            if existing_ip == ip:\n                return ref\n        return None\n\n    async def __post_create__(self):\n        self._uptime = time.time()\n        if XINFERENCE_ENABLE_OTEL:\n            try:\n                from .otel import setup_otel\n\n                setup_otel(instrument_app=False, register_worker_metrics=True)\n            except Exception:\n                logger.exception(\n                    \"Failed to initialise supervisor OpenTelemetry worker metrics. Continuing without supervisor OTEL metrics.\"\n                )\n        if not XINFERENCE_DISABLE_HEALTH_CHECK:\n            # Run _check_dead_nodes() in a dedicated thread.\n            from ..isolation import Isolation\n\n            self._isolation = Isolation(asyncio.new_event_loop(), threaded=True)\n            self._isolation.start()\n            asyncio.run_coroutine_threadsafe(\n                self._check_dead_nodes(), loop=self._isolation.loop\n            )\n        logger.info(f\"Xinference supervisor {self.address} started\")\n        from .cache_tracker import CacheTrackerActor\n        from .progress_tracker import ProgressTrackerActor\n        from .status_guard import StatusGuardActor\n\n        self._status_guard_ref: xo.ActorRefType[\"StatusGuardActor\"] = (  # type: ignore\n            await xo.create_actor(\n                StatusGuardActor,\n                address=self.address,\n                uid=StatusGuardActor.default_uid(),\n            )\n        )\n        self._cache_tracker_ref: xo.ActorRefType[  # type: ignore\n            \"CacheTrackerActor\"\n        ] = await xo.create_actor(\n            CacheTrackerActor, address=self.address, uid=CacheTrackerActor.default_uid()\n        )\n        self._progress_tracker: xo.ActorRefType[  # type: ignore\n            \"ProgressTrackerActor\"\n        ] = await xo.create_actor(\n            ProgressTrackerActor,\n            address=self.address,\n            uid=ProgressTrackerActor.default_uid(),\n        )\n\n        from .event import EventCollectorActor\n\n        self._event_collector_ref: xo.ActorRefType[  # type: ignore\n            EventCollectorActor\n        ] = await xo.create_actor(\n            EventCollectorActor,\n            address=self.address,\n            uid=EventCollectorActor.default_uid(),\n        )\n\n        from ..model.audio import (\n            CustomAudioModelFamilyV2,\n            generate_audio_description,\n            get_audio_model_descriptions,\n            register_audio,\n            unregister_audio,\n        )\n        from ..model.embedding import (\n            CustomEmbeddingModelFamilyV2,\n            generate_embedding_description,\n            get_embedding_model_descriptions,\n            register_embedding,\n            unregister_embedding,\n        )\n        from ..model.flexible import (\n            FlexibleModelSpec,\n            generate_flexible_model_description,\n            get_flexible_model_descriptions,\n            register_flexible_model,\n            unregister_flexible_model,\n        )\n        from ..model.image import (\n            CustomImageModelFamilyV2,\n            generate_image_description,\n            get_image_model_descriptions,\n            register_image,\n            unregister_image,\n        )\n        from ..model.llm import (\n            CustomLLMFamilyV2,\n            generate_llm_version_info,\n            get_llm_version_infos,\n            register_llm,\n            unregister_llm,\n        )\n        from ..model.rerank import (\n            CustomRerankModelFamilyV2,\n            generate_rerank_description,\n            get_rerank_model_descriptions,\n            register_rerank,\n            unregister_rerank,\n        )\n\n        self._custom_register_type_to_cls: Dict[str, Tuple] = {  # type: ignore\n            \"LLM\": (\n                CustomLLMFamilyV2,\n                register_llm,\n                unregister_llm,\n                generate_llm_version_info,\n            ),\n            \"embedding\": (\n                CustomEmbeddingModelFamilyV2,\n                register_embedding,\n                unregister_embedding,\n                generate_embedding_description,\n            ),\n            \"rerank\": (\n                CustomRerankModelFamilyV2,\n                register_rerank,\n                unregister_rerank,\n                generate_rerank_description,\n            ),\n            \"image\": (\n                CustomImageModelFamilyV2,\n                register_image,\n                unregister_image,\n                generate_image_description,\n            ),\n            \"audio\": (\n                CustomAudioModelFamilyV2,\n                register_audio,\n                unregister_audio,\n                generate_audio_description,\n            ),\n            \"flexible\": (\n                FlexibleModelSpec,\n                register_flexible_model,\n                unregister_flexible_model,\n                generate_flexible_model_description,\n            ),\n        }\n\n        # record model version\n        model_version_infos: Dict[str, List[Dict]] = {}  # type: ignore\n        model_version_infos.update(get_llm_version_infos())\n        model_version_infos.update(get_embedding_model_descriptions())\n        model_version_infos.update(get_rerank_model_descriptions())\n        model_version_infos.update(get_image_model_descriptions())\n        model_version_infos.update(get_audio_model_descriptions())\n        model_version_infos.update(get_flexible_model_descriptions())\n        await self._cache_tracker_ref.record_model_version(\n            model_version_infos, self.address\n        )\n\n        # Windows does not have signal handler\n        if os.name != \"nt\":\n\n            async def signal_handler():\n                os._exit(0)\n\n            loop = asyncio.get_running_loop()\n            loop.add_signal_handler(\n                signal.SIGTERM, lambda: asyncio.create_task(signal_handler())\n            )\n\n        from ..model.llm.vllm.xavier.block_tracker import VLLMBlockTracker\n        from ..model.llm.vllm.xavier.collective_manager import CollectiveManager\n\n        self._block_tracker_mapping: Dict[str, xo.ActorRefType[VLLMBlockTracker]] = {}  # type: ignore\n        self._collective_manager_mapping: Dict[  # type: ignore\n            str, xo.ActorRefType[CollectiveManager]\n        ] = {}\n\n    @typing.no_type_check\n    async def get_cluster_device_info(self, detailed: bool = False) -> List:\n        import psutil\n\n        supervisor_device_info = {\n            \"ip_address\": self.address,\n            \"gpu_count\": 0,\n            \"gpu_vram_total\": 0,\n        }\n        if detailed:\n            supervisor_device_info[\"gpu_vram_total\"] = 0\n            supervisor_device_info[\"gpu_vram_available\"] = 0\n            supervisor_device_info[\"cpu_available\"] = psutil.cpu_count() * (\n                1 - psutil.cpu_percent() / 100.0\n            )\n            supervisor_device_info[\"cpu_count\"] = psutil.cpu_count()\n            mem_info = psutil.virtual_memory()\n            supervisor_device_info[\"mem_used\"] = mem_info.used\n            supervisor_device_info[\"mem_available\"] = mem_info.available\n            supervisor_device_info[\"mem_total\"] = mem_info.total\n        res = [{\"node_type\": \"Supervisor\", **supervisor_device_info}]\n        for worker_addr, worker_status in self._worker_status.items():\n            vram_total: float = sum(\n                [v.mem_total for k, v in worker_status.status.items() if k != \"cpu\"]  # type: ignore\n            )\n            total = (\n                vram_total if vram_total == 0 else f\"{int(vram_total / 1024 / 1024)}MiB\"\n            )\n            info = {\n                \"node_type\": \"Worker\",\n                \"ip_address\": worker_addr,\n                \"gpu_count\": len(worker_status.status) - 1,\n                \"gpu_vram_total\": total,\n            }\n            if detailed:\n                cpu_info = worker_status.status[\"cpu\"]\n                info[\"cpu_available\"] = cpu_info.total * (1 - cpu_info.usage)\n                info[\"cpu_count\"] = cpu_info.total\n                info[\"mem_used\"] = cpu_info.memory_used\n                info[\"mem_available\"] = cpu_info.memory_available\n                info[\"mem_total\"] = cpu_info.memory_total\n                info[\"gpu_vram_total\"] = vram_total\n                info[\"gpu_vram_available\"] = sum(\n                    [v.mem_free for k, v in worker_status.status.items() if k != \"cpu\"]\n                )\n            res.append(info)\n        return res\n\n    @staticmethod\n    async def get_builtin_prompts() -> Dict[str, Any]:\n        from ..model.llm.llm_family import BUILTIN_LLM_PROMPT_STYLE\n\n        return {k: v for k, v in BUILTIN_LLM_PROMPT_STYLE.items()}\n\n    @staticmethod\n    async def get_builtin_families() -> Dict[str, List[str]]:\n        from ..model.llm.llm_family import (\n            BUILTIN_LLM_FAMILIES,\n            BUILTIN_LLM_MODEL_CHAT_FAMILIES,\n            BUILTIN_LLM_MODEL_GENERATE_FAMILIES,\n            BUILTIN_LLM_MODEL_TOOL_CALL_FAMILIES,\n        )\n\n        to_filter_abilities = [\"vision\", \"reasoning\", \"audio\", \"omni\", \"hybrid\"]\n        ability_to_names: Dict[str, List[str]] = {\n            ability: [] for ability in to_filter_abilities\n        }\n        for family in BUILTIN_LLM_FAMILIES:\n            for ability in to_filter_abilities:\n                if ability in family.model_ability:\n                    ability_to_names[ability].append(family.model_name)\n\n        return {\n            \"chat\": list(BUILTIN_LLM_MODEL_CHAT_FAMILIES),\n            \"generate\": list(BUILTIN_LLM_MODEL_GENERATE_FAMILIES),\n            \"tools\": list(BUILTIN_LLM_MODEL_TOOL_CALL_FAMILIES),\n            **ability_to_names,\n        }\n\n    async def get_devices_count(self) -> int:\n        from ..device_utils import gpu_count\n\n        if self.is_local_deployment():\n            return gpu_count()\n        # Distributed deployment: aggregate GPU count from all workers\n        # Use worker status information instead of choosing a single worker\n        if not self._worker_status:\n            # No workers have reported status yet, fallback to local detection\n            logger.debug(\n                \"No worker status available for GPU count, falling back to local detection\"\n            )\n            return gpu_count()\n        # Get maximum GPU count from all workers\n        # This allows WebUI to show GPU options even when supervisor has no GPU\n        max_gpu_count = 0\n        for worker_addr, worker_status in self._worker_status.items():\n            # Count GPU devices (excluding 'cpu' key)\n            worker_gpu_count = len(\n                [k for k in worker_status.status.keys() if k != \"cpu\"]\n            )\n            if worker_gpu_count > max_gpu_count:\n                max_gpu_count = worker_gpu_count\n                logger.debug(\n                    f\"Worker {worker_addr} has {worker_gpu_count} GPUs, \"\n                    f\"current max: {max_gpu_count}\"\n                )\n        logger.debug(f\"Returning GPU count: {max_gpu_count} from worker status\")\n        return max_gpu_count\n\n    async def _choose_worker(\n        self, available_workers: Optional[List[str]] = None\n    ) -> xo.ActorRefType[\"WorkerActor\"]:\n        # TODO: better allocation strategy.\n        min_running_model_count = None\n        target_worker = None\n\n        for worker_addr, worker in self._worker_address_to_worker.items():\n            if available_workers and worker_addr not in available_workers:\n                continue\n            running_model_count = await worker.get_model_count()\n            if (\n                min_running_model_count is None\n                or running_model_count < min_running_model_count\n            ):\n                min_running_model_count = running_model_count\n                target_worker = worker\n\n        if target_worker:\n            return target_worker\n\n        raise RuntimeError(\"No available worker found\")\n\n    @log_sync(logger=logger)\n    def get_status(self) -> Dict:\n        return {\n            \"uptime\": int(time.time() - self._uptime),\n            \"workers\": self._worker_status,\n        }\n\n    def _get_spec_dicts(\n        self, model_family: Any, cache_manager_cls: Type\n    ) -> Tuple[List[dict], List[str]]:\n        specs = []\n        download_hubs: Dict[str, None] = dict()\n        for spec in model_family.model_specs:\n            model_hub = spec.model_hub\n            if model_hub not in download_hubs:\n                download_hubs[model_hub] = None\n            if model_hub != \"huggingface\":\n                # since we only need to know all specs\n                # thus filter huggingface specs only\n                continue\n            model_family.model_specs = [spec]\n            cache_manager = cache_manager_cls(model_family)\n            specs.append(\n                {**spec.dict(), \"cache_status\": cache_manager.get_cache_status()}\n            )\n        return specs, list(download_hubs)\n\n    async def _to_llm_reg(\n        self, llm_family: \"LLMFamilyV2\", is_builtin: bool\n    ) -> Dict[str, Any]:\n        from ..model.llm.cache_manager import LLMCacheManager\n\n        instance_cnt = await self.get_instance_count(llm_family.model_name)\n        version_cnt = await self.get_model_version_count(llm_family.model_name)\n\n        if self.is_local_deployment():\n            # TODO: does not work when the supervisor and worker are running on separate nodes.\n            _llm_family = llm_family.copy()\n            specs, download_hubs = self._get_spec_dicts(_llm_family, LLMCacheManager)\n            res = {\n                **llm_family.dict(),\n                \"is_builtin\": is_builtin,\n                \"model_specs\": specs,\n                \"download_hubs\": download_hubs,\n            }\n        else:\n            res = {**llm_family.dict(), \"is_builtin\": is_builtin}\n        res[\"model_version_count\"] = version_cnt\n        res[\"model_instance_count\"] = instance_cnt\n        return res\n\n    async def _to_embedding_model_reg(\n        self, model_family: \"EmbeddingModelFamilyV2\", is_builtin: bool\n    ) -> Dict[str, Any]:\n        from ..model.embedding.cache_manager import EmbeddingCacheManager\n\n        instance_cnt = await self.get_instance_count(model_family.model_name)\n        version_cnt = await self.get_model_version_count(model_family.model_name)\n\n        if self.is_local_deployment():\n            _family = model_family.copy()\n            # TODO: does not work when the supervisor and worker are running on separate nodes.\n            specs, download_hubs = self._get_spec_dicts(_family, EmbeddingCacheManager)\n            res = {\n                **model_family.dict(),\n                \"is_builtin\": is_builtin,\n                \"model_specs\": specs,\n                \"download_hubs\": download_hubs,\n            }\n        else:\n            res = {\n                **model_family.dict(),\n                \"is_builtin\": is_builtin,\n            }\n        res[\"model_version_count\"] = version_cnt\n        res[\"model_instance_count\"] = instance_cnt\n        return res\n\n    async def _to_rerank_model_reg(\n        self, model_family: \"RerankModelFamilyV2\", is_builtin: bool\n    ) -> Dict[str, Any]:\n        from ..model.rerank.cache_manager import RerankCacheManager\n\n        instance_cnt = await self.get_instance_count(model_family.model_name)\n        version_cnt = await self.get_model_version_count(model_family.model_name)\n\n        if self.is_local_deployment():\n            _family = model_family.copy()\n            # TODO: does not work when the supervisor and worker are running on separate nodes.\n            specs, download_hubs = self._get_spec_dicts(_family, RerankCacheManager)\n            res = {\n                **model_family.dict(),\n                \"is_builtin\": is_builtin,\n                \"model_specs\": specs,\n                \"download_hubs\": download_hubs,\n            }\n        else:\n            res = {\n                **model_family.dict(),\n                \"is_builtin\": is_builtin,\n            }\n        res[\"model_version_count\"] = version_cnt\n        res[\"model_instance_count\"] = instance_cnt\n        return res\n\n    async def _to_image_model_reg(\n        self, model_family: \"ImageModelFamilyV2\", is_builtin: bool\n    ) -> Dict[str, Any]:\n        from ..model.image.cache_manager import ImageCacheManager\n\n        instance_cnt = await self.get_instance_count(model_family.model_name)\n        version_cnt = await self.get_model_version_count(model_family.model_name)\n\n        if self.is_local_deployment():\n            # TODO: does not work when the supervisor and worker are running on separate nodes.\n            cache_manager = ImageCacheManager(model_family)\n            # Create model_specs with cache_status for frontend compatibility\n            model_specs = [\n                {\n                    \"model_format\": \"pytorch\",\n                    \"model_hub\": model_family.model_hub,\n                    \"model_id\": model_family.model_id,\n                    \"cache_status\": cache_manager.get_cache_status(),\n                }\n            ]\n            res = {\n                **model_family.dict(),\n                \"model_specs\": model_specs,\n                \"download_hubs\": [model_family.model_hub],\n                \"is_builtin\": is_builtin,\n            }\n        else:\n            res = {\n                **model_family.dict(),\n                \"is_builtin\": is_builtin,\n            }\n        res[\"model_version_count\"] = version_cnt\n        res[\"model_instance_count\"] = instance_cnt\n        return res\n\n    async def _to_audio_model_reg(\n        self, model_family: \"AudioModelFamilyV2\", is_builtin: bool\n    ) -> Dict[str, Any]:\n        from ..model.cache_manager import CacheManager\n\n        instance_cnt = await self.get_instance_count(model_family.model_name)\n        version_cnt = await self.get_model_version_count(model_family.model_name)\n\n        if self.is_local_deployment():\n            # TODO: does not work when the supervisor and worker are running on separate nodes.\n            cache_manager = CacheManager(model_family)\n            # Create model_specs with cache_status for frontend compatibility\n            model_specs = [\n                {\n                    \"model_format\": \"pytorch\",\n                    \"model_hub\": model_family.model_hub,\n                    \"model_id\": model_family.model_id,\n                    \"cache_status\": cache_manager.get_cache_status(),\n                }\n            ]\n            res = {\n                **model_family.dict(),\n                \"model_specs\": model_specs,\n                \"download_hubs\": [model_family.model_hub],\n                \"is_builtin\": is_builtin,\n            }\n        else:\n            res = {\n                **model_family.dict(),\n                \"is_builtin\": is_builtin,\n            }\n        res[\"model_version_count\"] = version_cnt\n        res[\"model_instance_count\"] = instance_cnt\n        return res\n\n    async def _to_video_model_reg(\n        self, model_family: \"VideoModelFamilyV2\", is_builtin: bool\n    ) -> Dict[str, Any]:\n        from ..model.cache_manager import CacheManager\n\n        instance_cnt = await self.get_instance_count(model_family.model_name)\n        version_cnt = await self.get_model_version_count(model_family.model_name)\n\n        if self.is_local_deployment():\n            # TODO: does not work when the supervisor and worker are running on separate nodes.\n            cache_manager = CacheManager(model_family)\n            # Create model_specs with cache_status for frontend compatibility\n            model_specs = [\n                {\n                    \"model_format\": \"pytorch\",\n                    \"model_hub\": model_family.model_hub,\n                    \"model_id\": model_family.model_id,\n                    \"cache_status\": cache_manager.get_cache_status(),\n                }\n            ]\n            res = {\n                **model_family.dict(),\n                \"model_specs\": model_specs,\n                \"download_hubs\": [model_family.model_hub],\n                \"is_builtin\": is_builtin,\n            }\n        else:\n            res = {\n                **model_family.dict(),\n                \"is_builtin\": is_builtin,\n            }\n        res[\"model_version_count\"] = version_cnt\n        res[\"model_instance_count\"] = instance_cnt\n        return res\n\n    async def _to_flexible_model_reg(\n        self, model_spec: \"FlexibleModelSpec\", is_builtin: bool\n    ) -> Dict[str, Any]:\n        instance_cnt = await self.get_instance_count(model_spec.model_name)\n        version_cnt = await self.get_model_version_count(model_spec.model_name)\n\n        if self.is_local_deployment():\n            res = {\n                **model_spec.dict(),\n                \"cache_status\": True,\n                \"is_builtin\": is_builtin,\n            }\n        else:\n            res = {\n                **model_spec.dict(),\n                \"is_builtin\": is_builtin,\n            }\n        res[\"model_version_count\"] = version_cnt\n        res[\"model_instance_count\"] = instance_cnt\n        return res\n\n    @log_async(logger=logger)\n    async def list_model_registrations(\n        self, model_type: str, detailed: bool = False\n    ) -> List[Dict[str, Any]]:\n        def sort_helper(item):\n            assert isinstance(item[\"model_name\"], str)\n            return item.get(\"model_name\").lower()\n\n        ret: List[Dict[str, Any]] = []\n\n        # Always get model registrations from workers, including local deployment\n        # In local deployment, supervisor acts as its own worker\n        workers = list(self._worker_address_to_worker.values())\n        results: List[List[Dict[str, Any]]] = await asyncio.gather(\n            *[\n                worker.list_model_registrations(model_type, detailed)\n                for worker in workers\n            ]\n        )\n        for result in results:\n            ret.extend(result)\n\n        ret.sort(key=sort_helper)\n        return ret\n\n    @log_sync(logger=logger)\n    async def get_model_registration(self, model_type: str, model_name: str) -> Any:\n        # Always search in workers first, including local deployment\n        # In local deployment, supervisor acts as its own worker\n        workers = list(self._worker_address_to_worker.values())\n        for worker in workers:\n            f = await worker.get_model_registration(model_type, model_name)\n            if f is not None:\n                return f\n\n        raise ValueError(f\"Model {model_name} not found\")\n\n    async def query_engines_by_model_name(\n        self,\n        model_name: str,\n        model_type: Optional[str] = None,\n        enable_virtual_env: Optional[bool] = None,\n    ):\n        # search in worker first\n        workers = list(self._worker_address_to_worker.values())\n        for worker in workers:\n            res = await worker.query_engines_by_model_name(\n                model_name, model_type=model_type, enable_virtual_env=enable_virtual_env\n            )\n            if res is not None:\n                return res\n\n        if enable_virtual_env is None:\n            from ..constants import XINFERENCE_ENABLE_VIRTUAL_ENV\n\n            enable_virtual_env = XINFERENCE_ENABLE_VIRTUAL_ENV\n        if enable_virtual_env:\n            return get_engine_params_by_name_with_virtual_env(\n                model_type, model_name, enable_virtual_env=enable_virtual_env\n            )\n        return get_engine_params_by_name(\n            model_type, model_name, enable_virtual_env=enable_virtual_env\n        )\n\n    @log_async(logger=logger)\n    async def register_model(\n        self,\n        model_type: str,\n        model: str,\n        persist: bool,\n        worker_ip: Optional[str] = None,\n    ):\n        if model_type in self._custom_register_type_to_cls:\n            (\n                model_spec_cls,\n                register_fn,\n                unregister_fn,\n                generate_fn,\n            ) = self._custom_register_type_to_cls[model_type]\n\n            model_spec = model_spec_cls.parse_raw(model)\n\n            # check if model already registered\n            try:\n                model = await self.get_model_registration(\n                    model_type, model_spec.model_name\n                )\n                if model is not None:\n                    raise ValueError(\n                        f\"Model {model_spec.model_name} already registered\"\n                    )\n            except ValueError as e:\n                if \"not found\" in str(e):\n                    pass\n                else:\n                    raise e\n            except Exception:\n                logger.error(\"Get model registration failed.\", exc_info=True)\n                raise\n\n            target_ip_worker_ref = (\n                self._get_worker_ref_by_ip(worker_ip) if worker_ip is not None else None\n            )\n            if (\n                worker_ip is not None\n                and not self.is_local_deployment()\n                and target_ip_worker_ref is None\n            ):\n                raise ValueError(\n                    f\"Worker ip address {worker_ip} is not in the cluster.\"\n                )\n\n            if target_ip_worker_ref:\n                await target_ip_worker_ref.register_model(model_type, model, persist)\n                return\n\n            try:\n                register_fn(model_spec, persist)\n                await self._cache_tracker_ref.record_model_version(\n                    generate_fn(model_spec), self.address\n                )\n                await self._sync_register_model(\n                    model_type, model, persist, model_spec.model_name\n                )\n\n            except ValueError as e:\n                raise e\n            except Exception as e:\n                unregister_fn(model_spec.model_name, raise_error=False)\n                raise e\n        else:\n            raise ValueError(f\"Unsupported model type: {model_type}\")\n\n    async def _sync_register_model(\n        self, model_type: str, model: str, persist: bool, model_name: str\n    ):\n        logger.info(f\"begin sync model: {model_name} to worker\")\n        try:\n            # Sync model to all workers.\n            for name, worker in self._worker_address_to_worker.items():\n                logger.info(f\"sync model: {model_name} to {name}\")\n                if name == self.address:\n                    # Ignore: when worker and supervisor at the same node.\n                    logger.info(\n                        f\"ignore sync model: {model_name} to {name} for same node\"\n                    )\n                else:\n                    await worker.register_model(model_type, model, persist)\n                    logger.info(f\"success sync model: {model_name} to {name}\")\n        except Exception as e:\n            # If sync fails, unregister the model in all workers.\n            for name, worker in self._worker_address_to_worker.items():\n                logger.warning(f\"ready to unregister model for {name}\")\n                await worker.unregister_model(model_type, model_name)\n                logger.warning(f\"finish unregister model: {model} for {name}\")\n            raise e\n\n    @log_async(logger=logger)\n    async def unregister_model(self, model_type: str, model_name: str):\n        if model_type in self._custom_register_type_to_cls:\n            _, _, unregister_fn, _ = self._custom_register_type_to_cls[model_type]\n            unregister_fn(model_name, False)\n\n            if not self.is_local_deployment():\n                workers = list(self._worker_address_to_worker.values())\n                for worker in workers:\n                    await worker.unregister_model(model_type, model_name)\n\n            await self._cache_tracker_ref.unregister_model_version(model_name)\n        else:\n            raise ValueError(f\"Unsupported model type: {model_type}\")\n\n    async def update_model_type(self, model_type: str):\n        \"\"\"\n        Update model configurations for a specific model type by forwarding\n        the request to all workers.\n\n        Args:\n            model_type: Type of model (LLM, embedding, image, etc.)\n        \"\"\"\n\n        try:\n            # Forward the update_model_type request to all workers\n            tasks = []\n            for worker_address, worker_ref in self._worker_address_to_worker.items():\n                tasks.append(worker_ref.update_model_type(model_type))\n\n            # Wait for all workers to complete the operation\n            if tasks:\n                results = await asyncio.gather(*tasks, return_exceptions=True)\n                for i, result in enumerate(results):\n                    if isinstance(result, Exception):\n                        pass  # Worker failed, continue\n                    else:\n                        pass  # Worker succeeded, continue\n            else:\n                logger.warning(\n                    f\"No workers available to forward update_model_type request\"\n                )\n\n        except Exception as e:\n            logger.error(\n                f\"Error during update_model_type forwarding: {str(e)}\",\n                exc_info=True,\n            )\n            raise ValueError(f\"Failed to update model type: {str(e)}\")\n\n    def _gen_model_uid(self, model_name: str) -> str:\n        if model_name not in self._model_uid_to_replica_info:\n            return model_name\n        logger.debug(\n            f\"{model_name} exists in xinference. Generate suffix to {model_name} for model_uid.\"\n        )\n        return f\"{model_name}-{gen_random_string(8)}\"\n\n    async def get_model_versions(self, model_type: str, model_name: str) -> List[Dict]:\n        return await self._cache_tracker_ref.get_model_versions(model_name)\n\n    async def get_model_version_count(self, model_name: str) -> int:\n        return await self._cache_tracker_ref.get_model_version_count(model_name)\n\n    @log_async(logger=logger)\n    async def launch_model_by_version(\n        self,\n        model_uid: Optional[str],\n        model_type: str,\n        model_engine: Optional[str],\n        model_version: str,\n        replica: int = 1,\n        n_gpu: Optional[Union[int, str]] = \"auto\",\n        wait_ready: bool = True,\n    ):\n        parse_results = parse_model_version(model_version, model_type)\n\n        if model_type == \"image\" and len(parse_results) == 2:\n            kwargs = {\"controlnet\": parse_results[1]}\n        else:\n            kwargs = {}\n\n        return await self.launch_builtin_model(\n            model_uid=model_uid,\n            model_name=parse_results[0],\n            model_engine=model_engine,\n            model_size_in_billions=parse_results[1] if model_type == \"LLM\" else None,\n            model_format=parse_results[2] if model_type == \"LLM\" else None,\n            quantization=parse_results[3] if model_type == \"LLM\" else None,\n            model_type=model_type,\n            replica=replica,\n            n_gpu=n_gpu,\n            wait_ready=wait_ready,\n            model_version=model_version,\n            **kwargs,\n        )\n\n    def _get_worker_refs_by_ip(self, ip: str) -> List[xo.ActorRefType[\"WorkerActor\"]]:\n        ip_list = [item.strip() for item in ip.split(\",\") if item.strip()]\n        refs_set = set()\n        for addr, ref in self._worker_address_to_worker.items():\n            existing_ip = addr.split(\":\")[0]\n            if existing_ip in ip_list:\n                refs_set.add(ref)\n        refs = list(refs_set)\n        logger.debug(\n            f\"Found {len(refs)} workers for IPs {ip_list}: {[r.address for r in refs]}\"\n        )\n        return refs\n\n    @log_async(logger=logger)\n    async def launch_builtin_model(\n        self,\n        model_uid: Optional[str],\n        model_name: str,\n        model_size_in_billions: Optional[Union[int, str]],\n        model_format: Optional[str],\n        quantization: Optional[str],\n        model_engine: Optional[str],\n        model_type: Optional[str],\n        replica: int = 1,\n        n_gpu: Optional[Union[int, str]] = \"auto\",\n        n_worker: Optional[int] = 1,\n        request_limits: Optional[int] = None,\n        wait_ready: bool = True,\n        model_version: Optional[str] = None,\n        peft_model_config: Optional[PeftModelConfig] = None,\n        worker_ip: Optional[str] = None,\n        gpu_idx: Optional[Union[int, List[int]]] = None,\n        download_hub: Optional[Literal[\"huggingface\", \"modelscope\", \"csghub\"]] = None,\n        model_path: Optional[str] = None,\n        enable_virtual_env: Optional[bool] = None,\n        virtual_env_packages: Optional[List[str]] = None,\n        envs: Optional[Dict[str, str]] = None,\n        **kwargs,\n    ) -> str:\n        if self.is_local_deployment() and n_worker > 1:  # type: ignore\n            # ignore n_worker > 1 if local deployment\n            logger.warning(\"Local deployment, ignore n_worker(%s)\", n_worker)\n            n_worker = 1\n\n        if n_worker > 1:  # type: ignore\n            # distributed inference\n            return await self._launch_builtin_sharded_model(\n                model_uid,\n                model_name,\n                model_size_in_billions,\n                model_format,\n                quantization,\n                model_engine,\n                model_type,\n                replica=replica,\n                n_gpu=n_gpu,\n                n_worker=n_worker,\n                request_limits=request_limits,\n                wait_ready=wait_ready,\n                model_version=model_version,\n                peft_model_config=peft_model_config,\n                worker_ip=worker_ip,\n                gpu_idx=gpu_idx,\n                download_hub=download_hub,\n                model_path=model_path,\n                enable_virtual_env=enable_virtual_env,\n                virtual_env_packages=virtual_env_packages,\n                envs=envs,\n                **kwargs,\n            )\n\n        target_worker_refs = (\n            self._get_worker_refs_by_ip(worker_ip) if worker_ip is not None else []\n        )\n        if (\n            worker_ip is not None\n            and not self.is_local_deployment()\n            and not target_worker_refs\n        ):\n            raise ValueError(f\"Worker ip address {worker_ip} is not in the cluster.\")\n        if worker_ip is not None and self.is_local_deployment():\n            logger.warning(\n                f\"You specified the worker ip: {worker_ip} in local mode, \"\n                f\"xinference will ignore this option.\"\n            )\n\n        if kwargs.get(\"enable_tensorizer\", None) and (\n            (\n                model_engine is None\n                or model_engine.lower() != \"transformers\"\n                or model_format != \"pytorch\"\n                or quantization != \"none\"\n                or model_type != \"LLM\"\n            )\n        ):\n            raise ValueError(\n                \"Tensorizer can only be enabled for LLM models with Transformers engine, PyTorch format, and none quantization.\"\n            )\n\n        if kwargs.get(\"enable_tensorizer\", None) and model_name in [\n            \"OmniLMM\",\n            \"yi-vl-chat\",\n            \"deepseek-vl-chat\",\n        ]:\n            raise ValueError(\"Tensorizer is not supported for %s.\" % model_name)\n\n        if model_uid is None:\n            model_uid = self._gen_model_uid(model_name)\n\n        # Xavier-related\n        enable_xavier: bool = (\n            bool(kwargs.pop(\"enable_xavier\", False))\n            and model_engine is not None\n            and model_engine.lower() == \"vllm\"\n        )\n        store_address = None\n        store_port = None\n        world_size = None\n        if enable_xavier:\n            if replica <= 1:\n                logger.warning(f\"Enabling xavier when `replica<=1` is meaningless.\")\n                enable_xavier = False\n            else:\n                from ..model.llm.vllm.xavier.block_tracker import VLLMBlockTracker\n                from ..model.llm.vllm.xavier.collective_manager import CollectiveManager\n\n                self._block_tracker_mapping[model_uid] = await xo.create_actor(\n                    VLLMBlockTracker,\n                    address=self.address,\n                    uid=f\"{VLLMBlockTracker.default_uid()}-{model_uid}\",\n                )\n                world_size = replica + 1\n                logger.info(f\"Going to start xavier with world size: {world_size}\")\n                self._collective_manager_mapping[model_uid] = await xo.create_actor(\n                    CollectiveManager,\n                    address=self.address,\n                    uid=f\"{CollectiveManager.default_uid()}-{model_uid}\",\n                    model_uid=model_uid,\n                )\n                logger.info(f\"Start collective manager for {model_uid} done.\")\n\n        model_size = str(model_size_in_billions) if model_size_in_billions else \"\"\n        logger.debug(\n            f\"Enter launch_builtin_model, model_uid: {model_uid}, model_name: {model_name}, model_size: {model_size}, \"\n            f\"model_format: {model_format}, quantization: {quantization}, replica: {replica}, enable_xavier: {enable_xavier}, \"\n            f\"worker_ip: {worker_ip}, kwargs: {kwargs}\"\n        )\n\n        async def _launch_one_model(\n            worker_ref, _replica_model_uid, rank: int, target_gpu_idx=None\n        ):\n            if _replica_model_uid in self._replica_model_uid_to_worker:\n                raise ValueError(\n                    f\"Model is already in the model list, uid: {_replica_model_uid}\"\n                )\n\n            nonlocal store_address\n            nonlocal store_port\n\n            # Calculate replica_id for status tracking\n            replica_id = rank - 1 if not enable_xavier else rank\n\n            # Initialize replica status\n            import time\n\n            await self._status_guard_ref.update_replica_status(\n                model_uid,\n                replica_id,\n                {\n                    \"replica_model_uid\": _replica_model_uid,\n                    \"worker_address\": worker_ref.address,\n                    \"status\": LaunchStatus.CREATING.name,\n                    \"created_ts\": int(time.time()),\n                },\n            )\n\n            xavier_config = (\n                {\n                    \"block_tracker_uid\": self._block_tracker_mapping[model_uid].uid,\n                    \"block_tracker_address\": self._block_tracker_mapping[\n                        model_uid\n                    ].address,\n                    \"rank\": rank,\n                    \"world_size\": world_size,\n                    \"store_address\": store_address,\n                    \"store_port\": store_port,\n                }\n                if enable_xavier\n                else None\n            )\n\n            if enable_xavier and rank == 0:\n                rank0_address, _port = await worker_ref.launch_rank0_model(\n                    _replica_model_uid, xavier_config\n                )\n                self._replica_model_uid_to_worker[_replica_model_uid] = worker_ref\n                store_address = rank0_address.split(\":\")[0]\n                store_port = _port\n\n                # Update replica status to READY\n                await self._status_guard_ref.update_replica_status(\n                    model_uid, replica_id, {\"status\": LaunchStatus.READY.name}\n                )\n                return rank0_address\n\n            replica_gpu_idx = (\n                target_gpu_idx\n                if target_gpu_idx is not None\n                else assign_replica_gpu(_replica_model_uid, replica, gpu_idx)\n            )\n            nonlocal model_type\n\n            # LLM as default for compatibility\n            model_type = model_type or \"LLM\"\n\n            try:\n                subpool_address = await worker_ref.launch_builtin_model(\n                    model_uid=_replica_model_uid,\n                    model_name=model_name,\n                    model_size_in_billions=model_size_in_billions,\n                    model_format=model_format,\n                    quantization=quantization,\n                    model_engine=model_engine,\n                    model_type=model_type,\n                    n_gpu=n_gpu,\n                    request_limits=request_limits,\n                    peft_model_config=peft_model_config,\n                    gpu_idx=replica_gpu_idx,\n                    download_hub=download_hub,\n                    model_path=model_path,\n                    enable_virtual_env=enable_virtual_env,\n                    virtual_env_packages=virtual_env_packages,\n                    envs=envs,\n                    xavier_config=xavier_config,\n                    **kwargs,\n                )\n                self._replica_model_uid_to_worker[_replica_model_uid] = worker_ref\n                await worker_ref.wait_for_load(_replica_model_uid)\n\n                # Update replica status to READY\n                await self._status_guard_ref.update_replica_status(\n                    model_uid, replica_id, {\"status\": LaunchStatus.READY.name}\n                )\n                return subpool_address\n            except Exception as e:\n                # Update replica status to ERROR\n                await self._status_guard_ref.update_replica_status(\n                    model_uid,\n                    replica_id,\n                    {\"status\": LaunchStatus.ERROR.name, \"error_message\": str(e)},\n                )\n                raise\n\n        async def _launch_model():\n            try:\n                strategy = None\n                use_gpu = not (n_gpu is None or (isinstance(n_gpu, int) and n_gpu <= 0))\n                if gpu_idx is None and use_gpu:\n                    strategy_name = (XINFERENCE_LAUNCH_STRATEGY or \"\").lower()\n                    normalized = strategy_name.replace(\"-\", \"_\")\n                    if normalized in (\"idlefirst\", \"idle_first_launch_strategy\"):\n                        strategy = IdleFirstLaunchStrategy(self._worker_status)\n                    else:\n                        logger.debug(\n                            \"Launch strategy %s not recognized, fallback to load-first\",\n                            strategy_name,\n                        )\n                # Pre-fetch worker loads for balanced scheduling\n                worker_candidates = []\n\n                if target_worker_refs:\n                    workers = target_worker_refs\n                else:\n                    workers = list(self._worker_address_to_worker.values())\n\n                if not workers:\n                    raise RuntimeError(\"No available worker found\")\n\n                # Fetch loads in parallel to minimize latency\n                counts = await asyncio.gather(\n                    *[w.get_model_count() for w in workers], return_exceptions=True\n                )\n                # Fetch per-worker GPU allocation snapshots for visibility/scheduling.\n                allocations = await asyncio.gather(\n                    *[w.get_gpu_allocation_status() for w in workers],\n                    return_exceptions=True,\n                )\n\n                for w_ref, count, alloc in zip(workers, counts, allocations):\n                    if isinstance(count, Exception):\n                        logger.warning(\n                            f\"Failed to get model count from worker: {count}\"\n                        )\n                        continue\n                    if isinstance(alloc, Exception):\n                        logger.debug(\n                            \"Failed to fetch GPU allocation snapshot from worker %s: %s\",\n                            w_ref.address,\n                            alloc,\n                        )\n                        alloc = None\n                    worker_candidates.append(\n                        {\"ref\": w_ref, \"count\": count, \"alloc\": alloc}\n                    )\n\n                if not worker_candidates:\n                    raise RuntimeError(\"No available worker found\")\n\n                logger.debug(\n                    f\"Worker candidates for {model_uid}: {[{'addr': c['ref'].address, 'count': c['count']} for c in worker_candidates]}\"\n                )\n                logger.debug(\n                    \"GPU allocation snapshots: %s\",\n                    [\n                        {\"addr\": c[\"ref\"].address, \"alloc\": c.get(\"alloc\")}\n                        for c in worker_candidates\n                    ],\n                )\n\n                # Prepare all launch tasks for parallel execution\n                launch_tasks = []\n                task_metadata = []  # Store (worker_ref, rep_model_uid, is_rank0, idx)\n\n                for _idx, rep_model_uid in enumerate(\n                    iter_replica_model_uid(model_uid, replica)\n                ):\n                    if strategy is not None:\n                        requested_gpu = n_gpu if isinstance(n_gpu, int) else None\n                        worker_ref, target_gpu_idx = strategy.select_worker(\n                            worker_candidates, n_gpu=requested_gpu\n                        )\n                        current_count = None\n                        for candidate in worker_candidates:\n                            if candidate[\"ref\"] == worker_ref:\n                                candidate[\"count\"] += 1\n                                current_count = candidate[\"count\"]\n                                break\n                        logger.debug(\n                            f\"Replica {_idx} assigned to {worker_ref.address} (count: {current_count})\"\n                        )\n                    else:\n                        worker_candidates.sort(\n                            key=lambda x: (x[\"count\"], x[\"ref\"].address)\n                        )\n                        best_candidate = worker_candidates[0]\n                        worker_ref = best_candidate[\"ref\"]\n                        target_gpu_idx = None\n                        best_candidate[\"count\"] += 1\n                        logger.debug(\n                            f\"Replica {_idx} assigned to {worker_ref.address} (count: {best_candidate['count']})\"\n                        )\n                    self._model_uid_to_replica_info[model_uid].replica_to_worker_refs[\n                        _idx\n                    ].append(worker_ref)\n\n                    if enable_xavier and _idx == 0:\n                        \"\"\"\n                        Start the rank 0 model actor on the worker that holds the rank 1 replica,\n                        solely for constructing the collective communication world.\n                        \"\"\"\n                        _uid = model_uid + \"-rank0\"\n                        # For Xavier, rank0 must be launched first, so we await it immediately\n                        rank0_address = await _launch_one_model(\n                            worker_ref, _uid, 0, target_gpu_idx\n                        )\n                        task_metadata.append(\n                            (worker_ref, _uid, True, _idx, rank0_address)\n                        )\n\n                    # Add regular replica launch task to parallel batch\n                    launch_tasks.append(\n                        _launch_one_model(\n                            worker_ref, rep_model_uid, _idx + 1, target_gpu_idx\n                        )\n                    )\n                    task_metadata.append((worker_ref, rep_model_uid, False, _idx, None))\n\n                # Launch all replicas in parallel\n                logger.debug(\n                    f\"Launching {len(launch_tasks)} replicas in parallel for model {model_uid}\"\n                )\n                results = await asyncio.gather(*launch_tasks, return_exceptions=True)\n\n                # Process results and build worker_refs and rank_addresses\n                worker_refs = []\n                rank_addresses = []\n\n                # Add rank0 if it exists (Xavier case)\n                if enable_xavier:\n                    rank0_metadata = task_metadata[0]\n                    worker_refs.append((rank0_metadata[0], rank0_metadata[1]))\n                    rank_addresses.append(rank0_metadata[4])\n                    task_metadata = task_metadata[1:]  # Remove rank0 from metadata\n\n                # Process parallel launch results\n                for idx, (result, metadata) in enumerate(zip(results, task_metadata)):\n                    worker_ref, rep_model_uid, is_rank0, _idx, _ = metadata\n\n                    if isinstance(result, Exception):\n                        logger.error(\n                            f\"Failed to launch replica {rep_model_uid}: {result}\"\n                        )\n                        raise result\n\n                    worker_refs.append((worker_ref, rep_model_uid))\n                    rank_addresses.append(result)\n\n                # For xavier, start all the vllm instances first,\n                # and then start the transfer component,\n                # because the transfer actor needs all the rank addresses used for collective communication\n                if enable_xavier:\n                    logger.debug(f\"Init transfer component for xavier...\")\n                    collective_manager_ref = self._collective_manager_mapping[model_uid]\n                    tasks = []\n                    for worker_ref, rep_model_uid in worker_refs:\n                        tasks.append(\n                            worker_ref.start_transfer_for_vllm(\n                                rep_model_uid, rank_addresses\n                            )\n                        )\n                    # Here you must use asyncio.gather, not a for loop,\n                    # or you will get stuck.\n                    await asyncio.gather(*tasks)\n\n                    # init collective_manager\n                    for idx, addr in enumerate(rank_addresses):\n                        await collective_manager_ref.register_rank(\n                            idx, addr, update=False\n                        )\n\n                    logger.debug(f\"Init transfer component for xavier done.\")\n            except Exception:\n                # terminate_model will remove the replica info.\n                await self.terminate_model(model_uid, suppress_exception=True)\n                await self._status_guard_ref.update_instance_info(\n                    model_uid, {\"status\": LaunchStatus.ERROR.name}\n                )\n                raise\n\n        if not is_valid_model_uid(model_uid):\n            raise ValueError(\n                \"The model UID is invalid. Please specify the model UID by 0 < length <= 100.\"\n            )\n\n        if request_limits is not None and request_limits < 0:\n            raise ValueError(\n                \"The `request_limits` parameter must be greater or equal than 0.\"\n            )\n\n        if model_uid in self._model_uid_to_replica_info:\n            raise ValueError(f\"Model is already in the model list, uid: {model_uid}\")\n        # Set replica info first for exception handler to terminate model.\n        self._model_uid_to_replica_info[model_uid] = ReplicaInfo(\n            replica=replica, scheduler=itertools.cycle(range(replica))\n        )\n        instance_info = InstanceInfo(\n            model_name=model_name,\n            model_uid=model_uid,\n            model_version=model_version,\n            model_ability=[],\n            replica=replica,\n            status=LaunchStatus.CREATING.name,\n            instance_created_ts=int(time.time()),\n        )\n        await self._status_guard_ref.set_instance_info(model_uid, instance_info)\n        if wait_ready:\n            await _launch_model()\n        else:\n            task = asyncio.create_task(_launch_model())\n            ASYNC_LAUNCH_TASKS[model_uid] = task\n            task.add_done_callback(lambda _: callback_for_async_launch(model_uid))  # type: ignore\n        return model_uid\n\n    async def _launch_builtin_sharded_model(\n        self,\n        model_uid: Optional[str],\n        model_name: str,\n        model_size_in_billions: Optional[Union[int, str]],\n        model_format: Optional[str],\n        quantization: Optional[str],\n        model_engine: Optional[str],\n        model_type: Optional[str],\n        replica: int = 1,\n        n_gpu: Optional[Union[int, str]] = \"auto\",\n        n_worker: Optional[int] = 1,\n        request_limits: Optional[int] = None,\n        wait_ready: bool = True,\n        model_version: Optional[str] = None,\n        peft_model_config: Optional[PeftModelConfig] = None,\n        worker_ip: Optional[str] = None,\n        gpu_idx: Optional[Union[int, List[int]]] = None,\n        download_hub: Optional[Literal[\"huggingface\", \"modelscope\", \"csghub\"]] = None,\n        model_path: Optional[str] = None,\n        enable_virtual_env: Optional[bool] = None,\n        virtual_env_packages: Optional[List[str]] = None,\n        envs: Optional[Dict[str, str]] = None,\n        **kwargs,\n    ):\n        available_workers = []\n        # search workers if registered\n        tasks = []\n        if not worker_ip:\n            all_workers = list(self._worker_address_to_worker)\n            for worker in all_workers:\n                tasks.append(\n                    self._worker_address_to_worker[worker].get_model_registration(\n                        model_type, model_name\n                    )\n                )\n            res = await asyncio.gather(*tasks)\n            for worker, res in zip(all_workers, res):\n                # check regi\n                if res:\n                    available_workers.append(worker)\n            if not available_workers:\n                # no registration, use all workers\n                available_workers = all_workers\n        else:\n            if isinstance(worker_ip, list):\n                available_workers.extend(worker_ip)\n            else:\n                available_workers.append(worker_ip)\n\n        async def _launch_model():\n            # Validation of n_worker, intercept if it is greater than the available workers.\n            if n_worker > len(available_workers):\n                raise ValueError(\n                    \"n_worker cannot be larger than the number of available workers.\"\n                )\n            try:\n                for _idx, rep_model_uid in enumerate(\n                    iter_replica_model_uid(model_uid, replica)\n                ):\n                    remaining_workers = list(available_workers)\n                    replica_gpu_idx = assign_replica_gpu(\n                        rep_model_uid, replica, gpu_idx\n                    )\n                    # launch shard\n                    worker_refs = []\n                    driver_info = None\n                    for i_worker in range(n_worker):\n                        worker_ref = await self._choose_worker(remaining_workers)\n                        if worker_ref.address in remaining_workers:\n                            remaining_workers.remove(worker_ref.address)\n                        self._model_uid_to_replica_info[\n                            model_uid\n                        ].replica_to_worker_refs[_idx].append(worker_ref)\n                        nonlocal model_type\n                        model_type = model_type or \"LLM\"\n                        if i_worker > 1:\n                            assert (\n                                driver_info is not None\n                            ), \"driver info should be passed by first model shard\"\n                        info = await worker_ref.launch_builtin_model(\n                            model_uid=rep_model_uid,\n                            model_name=model_name,\n                            model_size_in_billions=model_size_in_billions,\n                            model_format=model_format,\n                            quantization=quantization,\n                            model_engine=model_engine,\n                            model_type=model_type,\n                            n_gpu=n_gpu,\n                            request_limits=request_limits,\n                            peft_model_config=peft_model_config,\n                            gpu_idx=replica_gpu_idx,\n                            download_hub=download_hub,\n                            model_path=model_path,\n                            enable_virtual_env=enable_virtual_env,\n                            virtual_env_packages=virtual_env_packages,\n                            envs=envs,\n                            shard=i_worker,\n                            n_worker=n_worker,\n                            driver_info=driver_info,\n                            **kwargs,\n                        )\n                        if i_worker == 0:\n                            # info will be subpool address + driver info\n                            # for shard 0\n                            driver_info = info[1]\n                        worker_refs.append(worker_ref)\n                    self._replica_model_uid_to_worker[rep_model_uid] = worker_refs\n\n                    # for distributed inference,\n                    # launch will run asynchronously,\n                    # wait for load complete\n                    for worker_ref in worker_refs:\n                        await worker_ref.wait_for_load(rep_model_uid)\n            except Exception:\n                # terminate_model will remove the replica info.\n                await self.terminate_model(model_uid, suppress_exception=True)\n                await self._status_guard_ref.update_instance_info(\n                    model_uid, {\"status\": LaunchStatus.ERROR.name}\n                )\n                raise\n\n        if model_uid is None:\n            model_uid = self._gen_model_uid(model_name)\n\n        if not is_valid_model_uid(model_uid):\n            raise ValueError(\n                \"The model UID is invalid. Please specify the model UID by 0 < length <= 100.\"\n            )\n\n        if request_limits is not None and request_limits < 0:\n            raise ValueError(\n                \"The `request_limits` parameter must be greater or equal than 0.\"\n            )\n\n        if model_uid in self._model_uid_to_replica_info:\n            raise ValueError(f\"Model is already in the model list, uid: {model_uid}\")\n\n        # Set replica info first for exception handler to terminate model.\n        self._model_uid_to_replica_info[model_uid] = ReplicaInfo(\n            replica=replica, scheduler=itertools.cycle(range(replica))\n        )\n        instance_info = InstanceInfo(\n            model_name=model_name,\n            model_uid=model_uid,\n            model_version=model_version,\n            model_ability=[],\n            replica=replica,\n            n_worker=n_worker,\n            status=LaunchStatus.CREATING.name,\n            instance_created_ts=int(time.time()),\n        )\n        await self._status_guard_ref.set_instance_info(model_uid, instance_info)\n        if wait_ready:\n            await _launch_model()\n        else:\n            task = asyncio.create_task(_launch_model())\n            ASYNC_LAUNCH_TASKS[model_uid] = task\n            task.add_done_callback(lambda _: callback_for_async_launch(model_uid))  # type: ignore\n        return model_uid\n\n    async def get_launch_builtin_model_progress(self, model_uid: str) -> float:\n        try:\n            info = self._model_uid_to_replica_info[model_uid]\n        except KeyError:\n            # Not launched perhaps, just return 0.0 to prevent error\n            return 0.0\n\n        all_progress = 0.0\n        i = 0\n        for rep_model_uid in iter_replica_model_uid(model_uid, info.replica):\n            request_id = f\"launching-{rep_model_uid}\"\n            try:\n                all_progress += await self._progress_tracker.get_progress(request_id)\n                i += 1\n            except KeyError:\n                continue\n\n        return all_progress / i if i > 0 else 0.0\n\n    async def cancel_launch_builtin_model(self, model_uid: str):\n        try:\n            info = self._model_uid_to_replica_info[model_uid]\n        except KeyError:\n            raise RuntimeError(f\"Model {model_uid} has not been launched yet\")\n\n        coros = []\n        for i, rep_model_uid in enumerate(\n            iter_replica_model_uid(model_uid, info.replica)\n        ):\n            worker_refs = self._model_uid_to_replica_info[\n                model_uid\n            ].replica_to_worker_refs[i]\n            for worker_ref in worker_refs:\n                coros.append(worker_ref.cancel_launch_model(rep_model_uid))\n        try:\n            await asyncio.gather(*coros)\n        except RuntimeError:\n            # some may have finished\n            pass\n        # remove replica info\n        self._model_uid_to_replica_info.pop(model_uid, None)\n\n    async def get_instance_info(\n        self, model_name: Optional[str], model_uid: Optional[str]\n    ) -> List[Dict]:\n        infos = await self._status_guard_ref.get_instance_info(\n            model_name=model_name, model_uid=model_uid\n        )\n        return [info.dict() for info in sorted(infos, key=lambda info: info.model_uid)]\n\n    async def get_replica_statuses(self, model_uid: str) -> List[Dict]:\n        \"\"\"Get replica statuses from status guard\"\"\"\n        replica_statuses = await self._status_guard_ref.get_replica_statuses(model_uid)\n        return [\n            {\n                \"replica_id\": status.replica_id,\n                \"replica_model_uid\": status.replica_model_uid,\n                \"worker_address\": status.worker_address,\n                \"status\": status.status,\n                \"created_ts\": status.created_ts,\n                \"error_message\": status.error_message,\n            }\n            for status in replica_statuses\n        ]\n\n    async def get_instance_count(self, model_name: str) -> int:\n        return await self._status_guard_ref.get_instance_count(model_name)\n\n    async def _check_dead_nodes(self):\n        while True:\n            try:\n                dead_nodes = []\n                for address, status in self._worker_status.items():\n                    if (\n                        time.time() - status.update_time\n                        > XINFERENCE_HEALTH_CHECK_TIMEOUT\n                    ):\n                        status.failure_remaining_count -= 1\n                    else:\n                        status.failure_remaining_count = (\n                            XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD\n                        )\n\n                    if status.failure_remaining_count <= 0:\n                        dead_models = []\n                        for model_uid in self._replica_model_uid_to_worker:\n                            worker_refs = self._replica_model_uid_to_worker[model_uid]\n                            if not isinstance(worker_refs, list):\n                                worker_refs = [worker_refs]\n                            for worker_ref in worker_refs:\n                                model_address = worker_ref.address\n                                if model_address == address:\n                                    dead_models.append(model_uid)\n                        logger.error(\n                            \"Worker dead. address: %s, influenced models: %s\",\n                            address,\n                            dead_models,\n                        )\n                        for replica_model_uid in dead_models:\n                            model_uid, _ = parse_replica_model_uid(replica_model_uid)\n                            self._model_uid_to_replica_info.pop(model_uid, None)\n                            self._replica_model_uid_to_worker.pop(\n                                replica_model_uid, None\n                            )\n                        dead_nodes.append(address)\n                    elif (\n                        status.failure_remaining_count\n                        != XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD\n                    ):\n                        logger.error(\n                            \"Worker timeout. address: %s, check count remaining %s...\",\n                            address,\n                            status.failure_remaining_count,\n                        )\n\n                for address in dead_nodes:\n                    self._worker_status.pop(address, None)\n                    self._worker_address_to_worker.pop(address, None)\n            finally:\n                await asyncio.sleep(XINFERENCE_HEALTH_CHECK_INTERVAL)\n\n    @log_async(logger=logger)\n    async def terminate_model(self, model_uid: str, suppress_exception=False):\n        async def _terminate_one_model(_replica_model_uid):\n            worker_refs = self._replica_model_uid_to_worker.get(\n                _replica_model_uid, None\n            )\n            if not isinstance(worker_refs, list):\n                worker_refs = [worker_refs]\n\n            for worker_ref in worker_refs:\n                if worker_ref is None:\n                    raise ValueError(\n                        f\"Model not found in the model list, uid: {_replica_model_uid}\"\n                    )\n                await worker_ref.terminate_model(model_uid=_replica_model_uid)\n            del self._replica_model_uid_to_worker[_replica_model_uid]\n\n        replica_info = self._model_uid_to_replica_info.get(model_uid, None)\n        if replica_info is None:\n            raise ValueError(f\"Model not found in the model list, uid: {model_uid}\")\n\n        for rep_model_uid in iter_replica_model_uid(model_uid, replica_info.replica):\n            try:\n                await _terminate_one_model(rep_model_uid)\n            except Exception:\n                if not suppress_exception:\n                    raise\n        self._model_uid_to_replica_info.pop(model_uid, None)\n\n        # clear for xavier\n        rank0_uid = model_uid + \"-rank0\"\n        if rank0_uid in self._replica_model_uid_to_worker:\n            await _terminate_one_model(rank0_uid)\n\n        collective_manager_ref = self._collective_manager_mapping.pop(model_uid, None)\n        if collective_manager_ref is not None:\n            try:\n                await xo.destroy_actor(collective_manager_ref)\n            except Exception as e:\n                logger.debug(\n                    \"Destroy collective_manager_ref failed, model uid: %s, error: %s\",\n                    model_uid,\n                    e,\n                )\n            finally:\n                logger.debug(\n                    f\"Destroy collective_manager_ref done. model uid: {model_uid}\"\n                )\n        block_tracker_ref = self._block_tracker_mapping.pop(model_uid, None)\n        if block_tracker_ref is not None:\n            try:\n                await xo.destroy_actor(block_tracker_ref)\n            except Exception as e:\n                logger.debug(\n                    \"Destroy block_tracker_ref failed, model uid: %s, error: %s\",\n                    model_uid,\n                    e,\n                )\n            finally:\n                logger.debug(f\"Destroy block_tracker_ref done. model uid: {model_uid}\")\n\n    @log_async(logger=logger)\n    async def get_model(self, model_uid: str) -> xo.ActorRefType[\"ModelActor\"]:\n        replica_info = self._model_uid_to_replica_info.get(model_uid, None)\n        if replica_info is None:\n            raise ValueError(f\"Model not found in the model list, uid: {model_uid}\")\n\n        replica_model_uid = build_replica_model_uid(\n            model_uid, next(replica_info.scheduler)\n        )\n\n        worker_ref = self._replica_model_uid_to_worker.get(replica_model_uid, None)\n        if worker_ref is None:\n            raise ValueError(\n                f\"Model not found in the model list, uid: {replica_model_uid}\"\n            )\n        if isinstance(worker_ref, list):\n            # get first worker to fetch information if model across workers\n            worker_ref = worker_ref[0]\n        assert not isinstance(\n            worker_ref, (list, tuple)\n        ), \"worker_ref must be a single worker\"\n        return await worker_ref.get_model(model_uid=replica_model_uid)\n\n    @log_async(logger=logger)\n    async def get_model_status(self, replica_model_uid: str):\n        worker_ref = self._replica_model_uid_to_worker.get(replica_model_uid, None)\n        if worker_ref is None:\n            raise ValueError(\n                f\"Model not found in the model list, uid: {replica_model_uid}\"\n            )\n        if isinstance(worker_ref, list):\n            # get status from first shard if model has multiple shards across workers\n            worker_ref = worker_ref[0]\n        assert not isinstance(\n            worker_ref, (list, tuple)\n        ), \"worker_ref must be a single worker\"\n        return await worker_ref.get_model_status(replica_model_uid)\n\n    @log_async(logger=logger)\n    async def describe_model(self, model_uid: str) -> Dict[str, Any]:\n        replica_info = self._model_uid_to_replica_info.get(model_uid, None)\n        if replica_info is None:\n            raise ValueError(f\"Model not found in the model list, uid: {model_uid}\")\n        # Use rep id 0 to instead of next(replica_info.scheduler) to avoid\n        # consuming the generator.\n        replica_model_uid = build_replica_model_uid(model_uid, 0)\n        worker_ref = self._replica_model_uid_to_worker.get(replica_model_uid, None)\n        if worker_ref is None:\n            raise ValueError(\n                f\"Model not found in the model list, uid: {replica_model_uid}\"\n            )\n        if isinstance(worker_ref, list):\n            # get status from first shard if model has multiple shards across workers\n            worker_ref = worker_ref[0]\n        assert not isinstance(\n            worker_ref, (list, tuple)\n        ), \"worker_ref must be a single worker\"\n        info = await worker_ref.describe_model(model_uid=replica_model_uid)\n        info[\"replica\"] = replica_info.replica\n        return info\n\n    @log_async(logger=logger)\n    async def list_models(self) -> Dict[str, Dict[str, Any]]:\n        ret = {}\n\n        workers = list(self._worker_address_to_worker.values())\n        for worker in workers:\n            ret.update(await worker.list_models())\n        running_model_info = {parse_replica_model_uid(k)[0]: v for k, v in ret.items()}\n        # add replica count\n        for k, v in running_model_info.items():\n            v[\"replica\"] = self._model_uid_to_replica_info[k].replica\n        return running_model_info\n\n    def is_local_deployment(self) -> bool:\n        # TODO: temporary.\n        return (\n            len(self._worker_address_to_worker) == 1\n            and list(self._worker_address_to_worker)[0] == self.address\n        )\n\n    @log_async(logger=logger)\n    async def list_cached_models(\n        self, model_name: Optional[str] = None, worker_ip: Optional[str] = None\n    ) -> List[Dict[str, Any]]:\n        target_ip_worker_ref = (\n            self._get_worker_ref_by_ip(worker_ip) if worker_ip is not None else None\n        )\n        if (\n            worker_ip is not None\n            and not self.is_local_deployment()\n            and target_ip_worker_ref is None\n        ):\n            raise ValueError(f\"Worker ip address {worker_ip} is not in the cluster.\")\n\n        # search assigned worker and return\n        if target_ip_worker_ref:\n            cached_models = await target_ip_worker_ref.list_cached_models(model_name)\n            cached_models = sorted(cached_models, key=lambda x: x[\"model_name\"])\n            return cached_models\n\n        # search all worker\n        cached_models = []\n        for worker in self._worker_address_to_worker.values():\n            res = await worker.list_cached_models(model_name)\n            cached_models.extend(res)\n        cached_models = sorted(cached_models, key=lambda x: x[\"model_name\"])\n        return cached_models\n\n    @log_async(logger=logger)\n    async def abort_request(\n        self,\n        model_uid: str,\n        request_id: str,\n        block_duration: int = XINFERENCE_DEFAULT_CANCEL_BLOCK_DURATION,\n    ) -> Dict:\n        from ..model.scheduler.core import AbortRequestMessage\n\n        res = {\"msg\": AbortRequestMessage.NO_OP.name}\n        replica_info = self._model_uid_to_replica_info.get(model_uid, None)\n        if not replica_info:\n            return res\n        replica_cnt = replica_info.replica\n\n        # Query all replicas\n        for rep_mid in iter_replica_model_uid(model_uid, replica_cnt):\n            worker_ref = self._replica_model_uid_to_worker.get(rep_mid, None)\n            if worker_ref is None:\n                continue\n            if isinstance(worker_ref, list):\n                # get status from first shard if model has multiple shards across workers\n                worker_ref = worker_ref[0]\n            assert not isinstance(\n                worker_ref, (list, tuple)\n            ), \"worker_ref must be a single worker\"\n            model_ref = await worker_ref.get_model(model_uid=rep_mid)\n            result_info = await model_ref.abort_request(request_id, block_duration)\n            res[\"msg\"] = result_info\n            if result_info == AbortRequestMessage.DONE.name:\n                break\n            elif result_info == AbortRequestMessage.NOT_FOUND.name:\n                logger.debug(f\"Request id: {request_id} not found for model {rep_mid}\")\n            else:\n                logger.debug(f\"No-op for model {rep_mid}\")\n        return res\n\n    @log_async(logger=logger)\n    async def add_worker(self, worker_address: str):\n        from .worker import WorkerActor\n\n        assert (\n            worker_address not in self._worker_address_to_worker\n        ), f\"Worker {worker_address} exists\"\n\n        worker_ref = await xo.actor_ref(\n            address=worker_address, uid=WorkerActor.default_uid()\n        )\n        self._worker_address_to_worker[worker_address] = worker_ref\n        logger.debug(\"Worker %s has been added successfully\", worker_address)\n\n    @log_async(logger=logger)\n    async def remove_worker(self, worker_address: str):\n        uids_to_remove = []\n        for model_uid in self._replica_model_uid_to_worker:\n            worker_refs = self._replica_model_uid_to_worker[model_uid]\n            if not isinstance(worker_refs, list):\n                worker_refs = [worker_refs]\n            for worker_ref in worker_refs:\n                model_address = worker_ref.address\n                if isinstance(model_address, str) and model_address == worker_address:\n                    uids_to_remove.append(model_uid)\n                elif (\n                    isinstance(model_address, list) and worker_address in model_address\n                ):\n                    uids_to_remove.append(model_uid)\n\n        for replica_model_uid in uids_to_remove:\n            model_uid, _ = parse_replica_model_uid(replica_model_uid)\n            self._model_uid_to_replica_info.pop(model_uid, None)\n            self._replica_model_uid_to_worker.pop(replica_model_uid, None)\n\n        if worker_address in self._worker_address_to_worker:\n            del self._worker_address_to_worker[worker_address]\n            logger.debug(\"Worker %s has been removed successfully\", worker_address)\n        else:\n            logger.warning(\n                f\"Worker {worker_address} cannot be removed since it is not registered to supervisor.\"\n            )\n\n    async def report_worker_status(\n        self, worker_address: str, status: Dict[str, Union[ResourceStatus, GPUStatus]]\n    ):\n        if worker_address not in self._worker_status:\n            logger.debug(\"Worker %s resources: %s\", worker_address, status)\n            self._worker_status[worker_address] = WorkerStatus(\n                update_time=time.time(),\n                failure_remaining_count=XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD,\n                status=status,\n            )\n        else:\n            worker_status = self._worker_status[worker_address]\n            worker_status.update_time = time.time()\n            worker_status.status = status\n\n        # Feed worker metrics to OTEL (no-op if OTEL is disabled)\n        if status:\n            try:\n                from .otel import get_cluster_metrics_collector\n\n                collector = get_cluster_metrics_collector()\n                if collector is not None:\n                    collector.update(worker_address, status)\n            except Exception:\n                logger.exception(\n                    \"Failed to feed worker status into OTEL collector for worker_address=%s\",\n                    worker_address,\n                )\n\n    async def list_deletable_models(\n        self, model_version: str, worker_ip: Optional[str] = None\n    ) -> List[str]:\n        target_ip_worker_ref = (\n            self._get_worker_ref_by_ip(worker_ip) if worker_ip is not None else None\n        )\n        if (\n            worker_ip is not None\n            and not self.is_local_deployment()\n            and target_ip_worker_ref is None\n        ):\n            raise ValueError(f\"Worker ip address {worker_ip} is not in the cluster.\")\n\n        ret = []\n        if target_ip_worker_ref:\n            ret = await target_ip_worker_ref.list_deletable_models(\n                model_version=model_version,\n            )\n            return ret\n\n        for worker in self._worker_address_to_worker.values():\n            path = await worker.list_deletable_models(model_version=model_version)\n            ret.extend(path)\n        return ret\n\n    async def confirm_and_remove_model(\n        self, model_version: str, worker_ip: Optional[str] = None\n    ) -> bool:\n        target_ip_worker_ref = (\n            self._get_worker_ref_by_ip(worker_ip) if worker_ip is not None else None\n        )\n        if (\n            worker_ip is not None\n            and not self.is_local_deployment()\n            and target_ip_worker_ref is None\n        ):\n            raise ValueError(f\"Worker ip address {worker_ip} is not in the cluster.\")\n\n        if target_ip_worker_ref:\n            ret = await target_ip_worker_ref.confirm_and_remove_model(\n                model_version=model_version,\n            )\n            return ret\n        ret = True\n        for worker in self._worker_address_to_worker.values():\n            ret = ret and await worker.confirm_and_remove_model(\n                model_version=model_version,\n            )\n        return ret\n\n    # Virtual environment management methods\n    async def list_virtual_envs(\n        self,\n        model_name: Optional[str] = None,\n        model_engine: Optional[str] = None,\n        worker_ip: Optional[str] = None,\n    ) -> List[Dict[str, Any]]:\n        \"\"\"List virtual environments across the cluster.\"\"\"\n        target_ip_worker_ref = (\n            self._get_worker_ref_by_ip(worker_ip) if worker_ip is not None else None\n        )\n        if (\n            worker_ip is not None\n            and not self.is_local_deployment()\n            and target_ip_worker_ref is None\n        ):\n            raise ValueError(f\"Worker ip address {worker_ip} is not in the cluster.\")\n\n        # If specific worker is requested, query only that worker\n        if target_ip_worker_ref:\n            virtual_envs = await target_ip_worker_ref.list_virtual_envs(\n                model_name, model_engine\n            )\n            return sorted(virtual_envs, key=lambda x: x[\"model_name\"])\n\n        # Otherwise, query all workers\n        virtual_envs = []\n        for worker_address, worker in self._worker_address_to_worker.items():\n            try:\n                envs = await worker.list_virtual_envs(model_name, model_engine)\n                virtual_envs.extend(envs)\n            except Exception as e:\n                logger.warning(f\"Failed to list virtual environments on worker: {e}\")\n\n        return sorted(virtual_envs, key=lambda x: x[\"model_name\"])\n\n    async def list_virtual_env_packages(\n        self, model_name: str, worker_ip: Optional[str] = None\n    ) -> Dict[str, Any]:\n        \"\"\"List packages in a virtual environment across the cluster.\"\"\"\n        if not model_name:\n            raise ValueError(\"model_name is required\")\n\n        target_ip_worker_ref = (\n            self._get_worker_ref_by_ip(worker_ip) if worker_ip is not None else None\n        )\n        if (\n            worker_ip is not None\n            and not self.is_local_deployment()\n            and target_ip_worker_ref is None\n        ):\n            raise ValueError(f\"Worker ip address {worker_ip} is not in the cluster.\")\n\n        # If specific worker is requested, query only that worker\n        if target_ip_worker_ref:\n            return await target_ip_worker_ref.list_virtual_env_packages(model_name)\n\n        # Otherwise, try all workers until we find the virtual environment\n        for worker in self._worker_address_to_worker.values():\n            try:\n                package_info = await worker.list_virtual_env_packages(model_name)\n                if \"error\" not in package_info:\n                    return package_info\n            except Exception as e:\n                logger.debug(\n                    f\"Worker doesn't have virtual environment for {model_name}: {e}\"\n                )\n\n        # If no worker has the virtual environment\n        return {\n            \"model_name\": model_name,\n            \"worker_ip\": None,\n            \"error\": f\"Virtual environment for model {model_name} not found on any worker\",\n        }\n\n    async def remove_virtual_env(\n        self,\n        model_name: str,\n        model_engine: Optional[str] = None,\n        python_version: Optional[str] = None,\n        worker_ip: Optional[str] = None,\n    ) -> bool:\n        \"\"\"Remove a virtual environment across the cluster.\"\"\"\n        if not model_name:\n            raise ValueError(\"model_name is required\")\n\n        target_ip_worker_ref = (\n            self._get_worker_ref_by_ip(worker_ip) if worker_ip is not None else None\n        )\n        if (\n            worker_ip is not None\n            and not self.is_local_deployment()\n            and target_ip_worker_ref is None\n        ):\n            raise ValueError(f\"Worker ip address {worker_ip} is not in the cluster.\")\n\n        # If specific worker is requested, remove only from that worker\n        if target_ip_worker_ref:\n            return await target_ip_worker_ref.remove_virtual_env(\n                model_name, model_engine, python_version\n            )\n\n        # Otherwise, remove from all workers that have the virtual environment\n        ret = True\n        workers_with_env = []\n\n        # First, identify which workers have the virtual environment\n        for worker in self._worker_address_to_worker.values():\n            try:\n                envs = await worker.list_virtual_envs(model_name, model_engine)\n                if envs:\n                    workers_with_env.append(worker)\n            except Exception as e:\n                logger.debug(f\"Failed to check worker for virtual environment: {e}\")\n\n        # Then remove from those workers\n        for worker in workers_with_env:\n            try:\n                result = await worker.remove_virtual_env(\n                    model_name, model_engine, python_version\n                )\n                ret = ret and result\n            except Exception as e:\n                logger.error(f\"Failed to remove virtual environment from worker: {e}\")\n                ret = False\n\n        return ret\n\n    async def get_workers_info(self) -> List[Dict[str, Any]]:\n        ret = []\n        for worker in self._worker_address_to_worker.values():\n            ret.append(await worker.get_workers_info())\n        return ret\n\n    async def get_supervisor_info(self) -> Dict[str, Any]:\n        ret = {\n            \"supervisor_ip\": self.address,\n        }\n        return ret\n\n    async def trigger_exit(self) -> bool:\n        try:\n            os.kill(os.getpid(), signal.SIGTERM)\n        except Exception as e:\n            logger.info(f\"trigger exit error: {e}\")\n            return False\n        return True\n\n    async def abort_cluster(self) -> bool:\n        ret = True\n        for worker in self._worker_address_to_worker.values():\n            ret = ret and await worker.trigger_exit()\n\n        ret = ret and await self.trigger_exit()\n        return ret\n\n    @staticmethod\n    def record_metrics(name, op, kwargs):\n        record_metrics(name, op, kwargs)\n\n    async def get_progress(self, request_id: str) -> float:\n        return await self._progress_tracker.get_progress(request_id)\n\n    async def call_collective_manager(\n        self, model_uid: str, func_name: str, *args, **kwargs\n    ):\n        \"\"\"\n        Used by worker.\n        \"\"\"\n        collective_manager_ref = self._collective_manager_mapping[model_uid]\n        await getattr(collective_manager_ref, func_name)(*args, **kwargs)\n"
  },
  {
    "path": "xinference/core/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/core/tests/test_continuous_batching.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\nimport sys\nimport threading\nimport time\n\nimport pytest\nimport requests\n\nfrom ...client.restful.restful_client import Client as RESTfulClient\nfrom ...model.scheduler.core import AbortRequestMessage\n\n\nclass BaseThread(threading.Thread):\n    def __init__(self):\n        super().__init__()\n        self._ex = None\n\n    def run_internal(self):\n        super().run()\n\n    def run(self):\n        try:\n            self.run_internal()\n        except BaseException as e:\n            self._ex = e\n\n    def join(self, timeout=None):\n        super().join()\n        if self._ex is not None:\n            raise self._ex\n\n\nclass InferenceThread(BaseThread):\n    def __init__(self, prompt, generate_config, client, model):\n        super().__init__()\n        self._prompt = [{\"role\": \"user\", \"content\": prompt}]\n        self._generate_config = generate_config\n        self._client = client\n        self._model = model\n        self._ex = None\n\n    @property\n    def stream(self):\n        return self._generate_config.get(\"stream\", False)\n\n    def run_internal(self):\n        if self.stream:\n            results = []\n            for res in self._model.chat(\n                self._prompt, generate_config=self._generate_config\n            ):\n                results.append(res)\n            assert len(results) > 0\n        else:\n            res = self._model.chat(self._prompt, generate_config=self._generate_config)\n            assert isinstance(res, dict)\n            choices = res[\"choices\"]\n            assert isinstance(choices, list)\n            choice = choices[0][\"message\"]\n            assert isinstance(choice, dict)\n            content = choice[\"content\"]\n            assert len(content) > 0\n\n\nclass InferenceThreadWithError(InferenceThread):\n    def __init__(self, prompt, generate_config, client, model, sleep=None):\n        super().__init__(prompt, generate_config, client, model)\n        self._sleep = sleep\n\n    def run_internal(self):\n        if self._sleep is not None:\n            time.sleep(self._sleep)\n        if self.stream:\n            with pytest.raises(Exception):\n                for res in self._model.chat(\n                    self._prompt, generate_config=self._generate_config\n                ):\n                    print(res)\n        else:\n            with pytest.raises(Exception):\n                self._model.chat(self._prompt, generate_config=self._generate_config)\n\n\nclass AbortThread(BaseThread):\n    def __init__(self, client, model_uid, request_id, expected_res, sleep=None):\n        super().__init__()\n        self._client = client\n        self._model_uid = model_uid\n        self._request_id = request_id\n        self._sleep = sleep\n        self._expected_res = expected_res\n\n    def run_internal(self):\n        if self._sleep is not None:\n            time.sleep(self._sleep)\n        result = self._client.abort_request(self._model_uid, self._request_id)\n        assert result[\"msg\"] == self._expected_res\n\n\n@pytest.mark.skipif(\n    sys.platform == \"win32\",\n    reason=\"does not run on windows github CI due to its terrible runtime\",\n)\ndef test_continuous_batching(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    client = RESTfulClient(endpoint)\n\n    # launch\n    payload = {\n        \"model_engine\": \"transformers\",\n        \"model_type\": \"LLM\",\n        \"model_name\": \"qwen2.5-instruct\",\n        \"quantization\": \"none\",\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_5\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"qwen2.5-instruct\"\n\n    model = client.get_model(model_uid_res)\n\n    # test correct\n    thread1 = InferenceThread(\"1+1=3正确吗？\", {\"stream\": True}, client, model)\n    thread2 = InferenceThread(\n        \"中国的首都是哪座城市？\", {\"stream\": False}, client, model\n    )\n    thread1.start()\n    thread2.start()\n    thread1.join()\n    thread2.join()\n\n    # test error generate config\n    messages = [{\"role\": \"user\", \"content\": \"你好\"}]\n    with pytest.raises(RuntimeError):\n        model.chat(messages, generate_config={\"max_tokens\": 99999999999999999})\n\n    with pytest.raises(RuntimeError):\n        model.chat(messages, generate_config={\"stream_interval\": 0})\n\n    # test error with other correct requests\n    thread1 = InferenceThread(\"1+1=3正确吗？\", {\"stream\": True}, client, model)\n    thread2 = InferenceThread(\n        \"中国的首都是哪座城市？\", {\"stream\": False}, client, model\n    )\n    thread3 = InferenceThreadWithError(\n        \"猫和狗有什么区别？\",\n        {\"stream\": True, \"max_tokens\": 99999999999999},\n        client,\n        model,\n    )\n    thread4 = InferenceThreadWithError(\n        \"简介篮球的发展历史。\", {\"stream\": False, \"stream_interval\": 0}, client, model\n    )\n\n    thread1.start()\n    thread2.start()\n    thread3.start()\n    thread4.start()\n    thread1.join()\n    thread2.join()\n    thread3.join()\n    thread4.join()\n\n    # test same request ids\n    thread1 = InferenceThread(\n        \"1+1=3正确吗？\", {\"stream\": True, \"request_id\": \"aaabbb\"}, client, model\n    )\n    thread2 = InferenceThreadWithError(\n        \"中国的首都是哪座城市？\",\n        {\"stream\": False, \"request_id\": \"aaabbb\"},\n        client,\n        model,\n        0.03,\n    )\n    thread1.start()\n    thread2.start()\n    thread1.join()\n    thread2.join()\n\n    # test abort request for stream\n    thread1 = InferenceThread(\n        \"猫和狗有什么区别吗？\", {\"stream\": True, \"request_id\": \"aaabbb\"}, client, model\n    )\n    thread2 = AbortThread(\n        client, model_uid_res, \"bbbaaa\", AbortRequestMessage.NOT_FOUND.name\n    )\n    thread3 = AbortThread(client, \"abcd\", \"aaabbb\", AbortRequestMessage.NO_OP.name)\n    thread4 = AbortThread(\n        client, model_uid_res, \"aaabbb\", AbortRequestMessage.DONE.name, 0.01\n    )\n    thread1.start()\n    thread2.start()\n    thread3.start()\n    thread4.start()\n    with pytest.raises(Exception):\n        thread1.join()\n    thread2.join()\n    thread3.join()\n    thread4.join()\n\n    # test abort request for non-stream\n    thread1 = InferenceThread(\n        \"猫和狗有什么区别吗？\", {\"request_id\": \"aaabbb\"}, client, model\n    )\n    thread2 = AbortThread(\n        client, model_uid_res, \"aaabbb\", AbortRequestMessage.DONE.name, 0.01\n    )\n    thread1.start()\n    thread2.start()\n    with pytest.raises(Exception):\n        thread1.join()\n    thread2.join()\n\n    # correctly terminate model\n    client.terminate_model(model_uid_res)\n"
  },
  {
    "path": "xinference/core/tests/test_launch_strategy.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport random\n\nimport pytest\n\nfrom xinference.core.launch_strategy import IdleFirstLaunchStrategy\nfrom xinference.core.utils import assign_replica_gpu\n\n\nclass DummyRef:\n    def __init__(self, address: str):\n        self.address = address\n\n\nclass DummyWorkerRef:\n    def __init__(self, address: str, model_count: int, launched: list):\n        self.address = address\n        self._model_count = model_count\n        self._launched = launched\n\n    async def get_model_count(self) -> int:\n        return self._model_count\n\n    async def launch_builtin_model(self, *args, **kwargs):\n        self._launched.append(self.address)\n        if kwargs.get(\"shard\") == 0:\n            return \"subpool\", {\"driver\": \"info\"}\n        return \"subpool\"\n\n    async def wait_for_load(self, model_uid: str):\n        return None\n\n\nclass DummyStatusGuard:\n    def __init__(self):\n        self.instance_info = {}\n\n    async def set_instance_info(self, model_uid: str, instance_info):\n        self.instance_info[model_uid] = instance_info\n\n    async def update_instance_info(self, model_uid: str, updates: dict):\n        return None\n\n\ndef test_assign_replica_gpu_single_slot_reused():\n    # single gpu_idx with multiple replicas should be invalid\n    with pytest.raises(ValueError):\n        assign_replica_gpu(\"foo-0\", replica=6, gpu_idx=[1])\n\n\ndef test_assign_replica_gpu_slicing():\n    # multiple gpu_idx are sliced by replica id\n    assert assign_replica_gpu(\"foo-0\", replica=3, gpu_idx=[0, 1, 2]) == [0]\n    assert assign_replica_gpu(\"foo-1\", replica=3, gpu_idx=[0, 1, 2]) == [1]\n    assert assign_replica_gpu(\"foo-2\", replica=3, gpu_idx=[0, 1, 2]) == [2]\n\n\ndef test_idle_first_prefers_empty_gpu(monkeypatch):\n    random.seed(42)\n    strategy = IdleFirstLaunchStrategy(worker_status={})\n    worker = DummyRef(\"w1:1000\")\n    worker_candidates = [\n        {\n            \"ref\": worker,\n            \"count\": 0,\n            \"alloc\": {\n                \"total\": [0, 1],\n                \"models\": {0: [\"m0\"]},  # gpu0 has load, gpu1 empty\n                \"user_specified\": {},\n            },\n        }\n    ]\n    ref, gpu_idx = strategy.select_worker(worker_candidates)\n    assert ref is worker\n    assert gpu_idx == [1]  # pick the empty gpu1\n\n\ndef test_idle_first_balances_with_reserve(monkeypatch):\n    random.seed(0)\n    strategy = IdleFirstLaunchStrategy(worker_status={})\n    worker = DummyRef(\"w1:1000\")\n    candidates = [\n        {\n            \"ref\": worker,\n            \"count\": 0,\n            \"alloc\": {\n                \"total\": [0, 1],\n                \"models\": {},\n                \"user_specified\": {},\n            },\n        }\n    ]\n    # first pick should choose one gpu, reserve it, second pick should choose the other\n    _, gpu_idx1 = strategy.select_worker(candidates)\n    _, gpu_idx2 = strategy.select_worker(candidates)\n    assert set(gpu_idx1 + gpu_idx2) == {0, 1}\n    assert gpu_idx1 != gpu_idx2\n\n\ndef test_idle_first_fallback_to_count_when_no_alloc():\n    random.seed(0)\n    strategy = IdleFirstLaunchStrategy(worker_status={})\n    w1 = DummyRef(\"w1:1000\")\n    w2 = DummyRef(\"w2:1000\")\n    candidates = [\n        {\"ref\": w1, \"count\": 1, \"alloc\": None},\n        {\"ref\": w2, \"count\": 0, \"alloc\": None},\n    ]\n    ref, gpu_idx = strategy.select_worker(candidates)\n    assert ref is w2  # least count\n    assert gpu_idx is None  # let worker decide when no alloc info\n\n\ndef test_multi_worker_multi_gpu_even_distribution():\n    random.seed(123)\n    strategy = IdleFirstLaunchStrategy(worker_status={})\n    w1 = DummyRef(\"w1:1000\")\n    w2 = DummyRef(\"w2:1000\")\n    candidates = [\n        {\n            \"ref\": w1,\n            \"count\": 0,\n            \"alloc\": {\n                \"total\": [0, 1],\n                \"models\": {},\n                \"user_specified\": {},\n            },\n        },\n        {\n            \"ref\": w2,\n            \"count\": 0,\n            \"alloc\": {\n                \"total\": [0, 1],\n                \"models\": {},\n                \"user_specified\": {},\n            },\n        },\n    ]\n    seen = []\n    for _ in range(8):\n        ref, gpu_idx = strategy.select_worker(candidates)\n        seen.append((ref.address, gpu_idx[0] if gpu_idx else None))\n    # Expect each worker 4 replicas, each gpu 2 replicas\n    from collections import Counter\n\n    worker_count = Counter([w for w, _ in seen])\n    gpu_count = Counter([(w, g) for w, g in seen])\n    assert worker_count[w1.address] == 4\n    assert worker_count[w2.address] == 4\n    assert gpu_count[(w1.address, 0)] == 2\n    assert gpu_count[(w1.address, 1)] == 2\n    assert gpu_count[(w2.address, 0)] == 2\n    assert gpu_count[(w2.address, 1)] == 2\n\n\ndef test_cpu_fallback_no_gpu_alloc():\n    random.seed(0)\n    strategy = IdleFirstLaunchStrategy(worker_status={})\n    w1 = DummyRef(\"w1:1000\")\n    w2 = DummyRef(\"w2:1000\")\n    # Simulate no GPU allocation info (e.g., CPU-only workers)\n    candidates = [\n        {\"ref\": w1, \"count\": 2, \"alloc\": None},\n        {\"ref\": w2, \"count\": 1, \"alloc\": None},\n    ]\n    ref, gpu_idx = strategy.select_worker(candidates)\n    assert ref is w2  # choose least-loaded worker\n    assert gpu_idx is None  # let worker decide (CPU path)\n\n\ndef test_idle_first_multi_gpu_single_worker():\n    random.seed(0)\n    strategy = IdleFirstLaunchStrategy(worker_status={})\n    worker = DummyRef(\"w1:1000\")\n    candidates = [\n        {\n            \"ref\": worker,\n            \"count\": 0,\n            \"alloc\": {\n                \"total\": [0, 1],\n                \"models\": {},\n                \"user_specified\": {},\n            },\n        }\n    ]\n    ref, gpu_idx = strategy.select_worker(candidates, n_gpu=2)\n    assert ref is worker\n    assert set(gpu_idx) == {0, 1}\n\n\ndef test_idle_first_multi_gpu_two_workers():\n    random.seed(0)\n    strategy = IdleFirstLaunchStrategy(worker_status={})\n    w1 = DummyRef(\"w1:1000\")\n    w2 = DummyRef(\"w2:1000\")\n    candidates = [\n        {\n            \"ref\": w1,\n            \"count\": 0,\n            \"alloc\": {\n                \"total\": [0, 1],\n                \"models\": {0: [\"m0\"], 1: [\"m1\"]},\n                \"user_specified\": {},\n            },\n        },\n        {\n            \"ref\": w2,\n            \"count\": 0,\n            \"alloc\": {\n                \"total\": [0, 1],\n                \"models\": {},\n                \"user_specified\": {},\n            },\n        },\n    ]\n    ref, gpu_idx = strategy.select_worker(candidates, n_gpu=2)\n    assert ref is w2\n\n\n@pytest.mark.asyncio\nasync def test_distributed_launch_avoids_same_worker_for_shards():\n    from xinference.core.supervisor import SupervisorActor\n\n    class DummySupervisor:\n        _choose_worker = SupervisorActor._choose_worker\n        _launch_builtin_sharded_model = SupervisorActor._launch_builtin_sharded_model\n\n        def __init__(self, workers):\n            self._worker_address_to_worker = workers\n            self._model_uid_to_replica_info = {}\n            self._replica_model_uid_to_worker = {}\n            self._status_guard_ref = DummyStatusGuard()\n\n        def _gen_model_uid(self, model_name: str) -> str:\n            return f\"{model_name}-uid\"\n\n        async def terminate_model(\n            self, model_uid: str, suppress_exception: bool = False\n        ):\n            return None\n\n    launched = []\n    worker1 = DummyWorkerRef(\"w1:1000\", model_count=1, launched=launched)\n    worker2 = DummyWorkerRef(\"w2:1000\", model_count=0, launched=launched)\n    supervisor = DummySupervisor({\"w1:1000\": worker1, \"w2:1000\": worker2})\n\n    # One model already runs on worker1 (n_gpu=1). Launch a new model with n_worker=2.\n    await supervisor._launch_builtin_sharded_model(\n        model_uid=\"demo-model\",\n        model_name=\"demo\",\n        model_size_in_billions=None,\n        model_format=None,\n        quantization=None,\n        model_engine=None,\n        model_type=\"LLM\",\n        n_gpu=1,\n        n_worker=2,\n        worker_ip=[\"w1:1000\", \"w2:1000\"],\n        wait_ready=True,\n    )\n\n    assert set(launched) == {\"w1:1000\", \"w2:1000\"}\n    assert len(launched) == 2\n"
  },
  {
    "path": "xinference/core/tests/test_metrics.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport os\n\nimport pytest\nimport requests\n\n\n@pytest.fixture\ndef setup_cluster():\n    import xoscar as xo\n\n    from ...api.restful_api import run_in_subprocess as restful_api_run_in_subprocess\n    from ...conftest import TEST_FILE_LOGGING_CONF, TEST_LOGGING_CONF, api_health_check\n    from ...deploy.local import health_check\n    from ...deploy.local import run_in_subprocess as supervisor_run_in_subprocess\n\n    metrics_port = xo.utils.get_next_port()\n    supervisor_address = f\"localhost:{xo.utils.get_next_port()}\"\n    local_cluster = supervisor_run_in_subprocess(\n        supervisor_address, \"localhost\", metrics_port, TEST_LOGGING_CONF\n    )\n\n    if not health_check(address=supervisor_address, max_attempts=20, sleep_interval=1):\n        raise RuntimeError(\"Supervisor is not available after multiple attempts\")\n\n    try:\n        port = xo.utils.get_next_port()\n        restful_api_proc = restful_api_run_in_subprocess(\n            supervisor_address,\n            host=\"localhost\",\n            port=port,\n            logging_conf=TEST_FILE_LOGGING_CONF,\n        )\n        endpoint = f\"http://localhost:{port}\"\n        if not api_health_check(endpoint, max_attempts=10, sleep_interval=5):\n            raise RuntimeError(\"Endpoint is not available after multiple attempts\")\n\n        yield f\"http://localhost:{port}\", f\"http://localhost:{metrics_port}/metrics\", supervisor_address\n        restful_api_proc.kill()\n    finally:\n        local_cluster.kill()\n\n\n@pytest.mark.asyncio\nasync def test_metrics_exporter_server(setup_cluster):\n    endpoint, metrics_exporter_address, supervisor_address = setup_cluster\n\n    import xoscar as xo\n\n    from ...client import Client\n    from ..supervisor import SupervisorActor\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"qwen1.5-chat\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        quantization=\"q4_0\",\n    )\n\n    # Check the supervisor metrics collected the RESTful API.\n    supervisor_ref = await xo.actor_ref(\n        supervisor_address, SupervisorActor.default_uid()\n    )\n    response = requests.get(f\"{endpoint}/metrics\")\n    assert response.ok\n    assert \"/v1/models\" in response.text\n\n    # Check the worker metrics collected model metrics.\n    model_ref = await supervisor_ref.get_model(model_uid)\n    await model_ref.record_metrics(\n        \"input_tokens_total_counter\", \"inc\", {\"labels\": {\"model\": model_uid}}\n    )\n    response = requests.get(metrics_exporter_address)\n    assert response.ok\n    assert (\n        'xinference:input_tokens_total_counter{model=\"qwen1.5-chat\"} 1' in response.text\n    )\n\n\n@pytest.fixture\ndef disable_metrics():\n    try:\n        os.environ[\"XINFERENCE_DISABLE_METRICS\"] = \"1\"\n        yield\n    finally:\n        os.environ.pop(\"XINFERENCE_DISABLE_METRICS\", None)\n\n\n@pytest.mark.asyncio\nasync def test_disable_metrics_exporter_server(disable_metrics, setup_cluster):\n    endpoint, metrics_exporter_address, supervisor_address = setup_cluster\n\n    from ...client import Client\n\n    client = Client(endpoint)\n\n    client.launch_model(\n        model_name=\"qwen1.5-chat\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        quantization=\"q4_0\",\n    )\n\n    # Check the supervisor metrics collected the RESTful API.\n    response = requests.get(f\"{endpoint}/metrics\")\n    assert response.status_code == 404\n\n    # Check the worker metrics collected model metrics.\n    with pytest.raises(requests.exceptions.ConnectionError):\n        requests.get(metrics_exporter_address)\n\n\n@pytest.mark.timeout(300)  # 5 minutes timeout to prevent hanging in Python 3.13\nasync def test_metrics_exporter_data(setup_cluster):\n    endpoint, metrics_exporter_address, supervisor_address = setup_cluster\n\n    from ...client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"qwen1.5-chat\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_5\",\n        model_format=\"ggufv2\",\n        quantization=\"q4_0\",\n    )\n\n    model = client.get_model(model_uid)\n    messages = [{\"role\": \"user\", \"content\": \"write a poem.\"}]\n    response = model.chat(messages)\n\n    response = requests.get(metrics_exporter_address)\n    assert response.ok\n    assert 'format=\"ggufv2\",model=\"qwen1.5-chat\"' in response.text\n"
  },
  {
    "path": "xinference/core/tests/test_model.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\n\nimport pytest\nimport pytest_asyncio\nimport xoscar as xo\nfrom xoscar import create_actor_pool\n\nfrom ..model import ModelActor\n\nTEST_EVENT = None\nTEST_VALUE = None\n\n\nclass MockModelFamily:\n    def to_description(self) -> dict:\n        return {}\n\n\nclass MockModel:\n    def __init__(self):\n        self.model_family = MockModelFamily()\n\n    async def generate(self, prompt, **kwargs):\n        global TEST_VALUE\n        TEST_VALUE = True\n        assert isinstance(TEST_EVENT, asyncio.Event)\n        await TEST_EVENT.wait()\n        yield {\"test1\": prompt}\n        yield {\"test2\": prompt}\n\n\nclass MockModelActor(ModelActor):\n    def __init__(\n        self,\n        supervisor_address: str,\n        worker_address: str,\n        replica_model_uid: str,\n    ):\n        super().__init__(\n            supervisor_address=supervisor_address,\n            worker_address=worker_address,\n            model=MockModel(),  # type: ignore\n            replica_model_uid=replica_model_uid,\n        )\n        self._lock = asyncio.locks.Lock()\n\n    async def __pre_destroy__(self):\n        pass\n\n    async def record_metrics(self, name, op, kwargs):\n        pass\n\n\n@pytest_asyncio.fixture\nasync def setup_pool():\n    pool = await create_actor_pool(\n        f\"test://127.0.0.1:{xo.utils.get_next_port()}\", n_process=0\n    )\n    async with pool:\n        yield pool\n\n\n@pytest.mark.asyncio\nasync def test_concurrent_call(setup_pool):\n    pool = setup_pool\n    addr = pool.external_address\n\n    global TEST_EVENT\n    TEST_EVENT = asyncio.Event()\n\n    worker: xo.ActorRefType[MockModelActor] = await xo.create_actor(  # type: ignore\n        MockModelActor,\n        address=addr,\n        uid=MockModelActor.default_uid(),\n        supervisor_address=\"test:123\",\n        worker_address=\"test:345\",\n        replica_model_uid=\"test_model\",\n    )\n\n    await worker.generate(\"test_prompt1\")\n    assert TEST_VALUE is not None\n    # This request is waiting for the TEST_EVENT, so the queue is empty.\n    pending_count = await worker.get_pending_requests_count()\n    assert pending_count == 0\n    await worker.generate(\"test_prompt3\")\n    # This request is waiting in the queue because the previous request is waiting for TEST_EVENT.\n    pending_count = await worker.get_pending_requests_count()\n    assert pending_count == 1\n\n    async def _check():\n        gen = await worker.generate(\"test_prompt2\")\n        result = []\n        async for g in gen:\n            result.append(g)\n        assert result == [\n            b'data: {\"test1\": \"test_prompt2\"}\\r\\n\\r\\n',\n            b'data: {\"test2\": \"test_prompt2\"}\\r\\n\\r\\n',\n        ]\n\n    check_task = asyncio.create_task(_check())\n    await asyncio.sleep(2)\n    assert not check_task.done()\n    # Pending 2 requests: test_prompt3 and test_prompt2\n    pending_count = await worker.get_pending_requests_count()\n    assert pending_count == 2\n    TEST_EVENT.set()\n    await check_task\n    pending_count = await worker.get_pending_requests_count()\n    assert pending_count == 0\n"
  },
  {
    "path": "xinference/core/tests/test_progressor.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport uuid\n\nimport pytest\nimport xoscar as xo\n\nfrom ..progress_tracker import Progressor, ProgressTrackerActor\n\n\n@pytest.mark.asyncio\nasync def test_progressor():\n    pool = await xo.create_actor_pool(\"127.0.0.1\", n_process=0)\n    async with pool:\n        progress_tracker_ref = await xo.create_actor(\n            ProgressTrackerActor,\n            to_remove_interval=0,\n            check_interval=1,\n            address=pool.external_address,\n            uid=ProgressTrackerActor.default_uid(),\n        )\n        request_id = str(uuid.uuid4())\n\n        progressor = Progressor(\n            request_id, progress_tracker_ref, asyncio.get_running_loop(), upload_span=0\n        )\n        await progressor.start()\n\n        with progressor:\n            progressor.split_stages(2)\n\n            with progressor:\n                progressor.set_progress(0.5)\n\n                await asyncio.sleep(0.1)\n                assert await progress_tracker_ref.get_progress(request_id) == 0.25\n\n            await asyncio.sleep(0.1)\n            assert await progress_tracker_ref.get_progress(request_id) == 0.5\n\n            with progressor:\n                progressor.split_stages(2)\n\n                with progressor:\n                    progressor.set_progress(0.8)\n\n                    await asyncio.sleep(0.1)\n                    assert (\n                        await progress_tracker_ref.get_progress(request_id)\n                        == 0.5 + 0.25 * 0.8\n                    )\n\n                await asyncio.sleep(0.1)\n                assert await progress_tracker_ref.get_progress(request_id) == 0.75\n\n                with pytest.raises(ValueError):\n                    with progressor:\n                        raise ValueError\n\n                await asyncio.sleep(0.1)\n                assert await progress_tracker_ref.get_progress(request_id) == 1.0\n\n        await asyncio.sleep(0.1)\n        assert await progress_tracker_ref.get_progress(request_id) == 1.0\n"
  },
  {
    "path": "xinference/core/tests/test_restful_api.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport asyncio\nimport json\nimport os\nimport os.path\nimport sys\nimport time\nfrom unittest.mock import AsyncMock\n\nimport openai\nimport pytest\nimport requests\nfrom packaging import version\n\nfrom ...model.embedding import BUILTIN_EMBEDDING_MODELS\n\n\nclass _DummyRequest:\n    def __init__(self, payload):\n        self._payload = payload\n\n    async def json(self):\n        return self._payload\n\n\n@pytest.mark.asyncio\nasync def test_restful_api(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_name\": \"qwen1.5-chat\",\n        \"model_size_in_billions\": \"0_5\",\n        \"quantization\": \"q4_0\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # launch n_gpu error\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_name\": \"qwen1.5-chat\",\n        \"quantization\": \"q4_0\",\n        \"n_gpu\": -1,\n    }\n    response = requests.post(url, json=payload)\n    assert response.status_code == 400\n\n    # same model uid\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_name\": \"qwen1.5-chat\",\n        \"quantization\": \"q4_0\",\n    }\n    response = requests.post(url, json=payload)\n    assert response.status_code == 400\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 1\n\n    # describe\n    response = requests.get(f\"{endpoint}/v1/models/test_restful_api\")\n    response_data = response.json()\n    assert response_data[\"model_name\"] == \"qwen1.5-chat\"\n    assert response_data[\"replica\"] == 1\n\n    response = requests.delete(f\"{endpoint}/v1/models/bogus\")\n    assert response.status_code == 400\n\n    # generate\n    url = f\"{endpoint}/v1/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"prompt\": \"Once upon a time, there was a very old computer.\",\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n    assert \"text\" in completion[\"choices\"][0]\n\n    payload = {\n        \"model\": \"bogus\",\n        \"prompt\": \"Once upon a time, there was a very old computer.\",\n    }\n    response = requests.post(url, json=payload)\n    assert response.status_code == 400\n\n    payload = {\n        \"prompt\": \"Once upon a time, there was a very old computer.\",\n    }\n    response = requests.post(url, json=payload)\n    assert response.status_code == 500\n\n    # chat without user messages\n    url = f\"{endpoint}/v1/chat/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\n                \"role\": \"system\",\n                \"content\": \"<任务> 识别用户输入的技术术语。请用{XXX} -> {XXX}的格式展示翻译前后的技术术语对应关系。\\n<输入文本>\\n今天天气\\n<示例>\\nTransformer -> Transformer\\nToken -> Token\\nZero Shot -> 零样本\\nFew Shot -> 少样本\\n<专有名词>\",\n            }\n        ],\n        \"stop\": [\"\\n\"],\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n\n    # chat\n    url = f\"{endpoint}/v1/chat/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n            {\"role\": \"user\", \"content\": \"Hello!\"},\n            {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n            {\"role\": \"user\", \"content\": \"What is the capital of France?\"},\n        ],\n        \"stop\": [\"\\n\"],\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n\n    payload = {\n        \"messages\": [\n            {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n            {\"role\": \"user\", \"content\": \"Hello!\"},\n            {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n            {\"role\": \"user\", \"content\": \"What is the capital of France?\"},\n        ],\n    }\n    response = requests.post(url, json=payload)\n    assert response.status_code == 500\n\n    payload = {\n        \"model\": \"bogus\",\n        \"messages\": [\n            {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n            {\"role\": \"user\", \"content\": \"Hello!\"},\n            {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n            {\"role\": \"user\", \"content\": \"What is the capital of France?\"},\n        ],\n    }\n    response = requests.post(url, json=payload)\n    assert response.status_code == 400\n\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n            {\"role\": \"user\", \"content\": \"Hello!\"},\n            {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        ],\n    }\n    response = requests.post(url, json=payload)\n    assert response.status_code == 400\n\n    # allow duplicate system messages\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n            {\"role\": \"system\", \"content\": \"You are not a helpful assistant.\"},\n            {\"role\": \"user\", \"content\": \"Hello!\"},\n            {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n            {\"role\": \"user\", \"content\": \"What is the capital of France?\"},\n        ],\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n\n    # allow the first message is not system message.\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\"role\": \"user\", \"content\": \"Hello!\"},\n            {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n            {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n            {\"role\": \"user\", \"content\": \"What is the capital of France?\"},\n        ],\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n\n    # delete\n    url = f\"{endpoint}/v1/models/test_restful_api\"\n    response = requests.delete(url)\n\n    # list\n    response = requests.get(f\"{endpoint}/v1/models\")\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # delete again\n    url = f\"{endpoint}/v1/models/test_restful_api\"\n    response = requests.delete(url)\n    assert response.status_code == 400\n\n    # list model registration\n\n    url = f\"{endpoint}/v1/model_registrations/LLM\"\n\n    response = requests.get(url)\n\n    assert response.status_code == 200\n    model_regs = response.json()\n    assert len(model_regs) > 0\n    for model_reg in model_regs:\n        assert model_reg[\"is_builtin\"]\n\n    # register_model\n\n    model = \"\"\"{\n  \"version\": 2,\n  \"context_length\":2048,\n  \"model_name\": \"custom_model\",\n  \"model_lang\": [\n    \"en\", \"zh\"\n  ],\n  \"model_ability\": [\n    \"embed\",\n    \"chat\"\n  ],\n  \"model_family\": \"other\",\n  \"model_specs\": [\n    {\n      \"model_format\": \"pytorch\",\n      \"model_size_in_billions\": 7,\n      \"quantization\": \"none\",\n      \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n    }\n  ],\n  \"prompt_style\": {\n    \"style_name\": \"ADD_COLON_SINGLE\",\n    \"system_prompt\": \"Below is an instruction that describes a task. Write a response that appropriately completes the request.\",\n    \"roles\": [\n      \"Instruction\",\n      \"Response\"\n    ],\n    \"intra_message_sep\": \"\\\\n\\\\n### \"\n  }\n}\"\"\"\n\n    url = f\"{endpoint}/v1/model_registrations/LLM\"\n\n    payload = {\"model\": model, \"persist\": False}\n\n    response = requests.post(url, json=payload)\n    assert response.status_code == 200\n\n    # check model version info after registration\n    url = f\"{endpoint}/v1/models/LLM/custom_model/versions\"\n    response = requests.get(url)\n    version_infos = response.json()\n    assert len(version_infos) == 1\n\n    url = f\"{endpoint}/v1/model_registrations/LLM\"\n\n    response = requests.get(url)\n\n    assert response.status_code == 200\n    new_model_regs = response.json()\n    assert len(new_model_regs) == len(model_regs) + 1\n\n    # get_model_registrations\n    url = f\"{endpoint}/v1/model_registrations/LLM/custom_model\"\n    response = requests.get(url, json=payload)\n    assert response.status_code == 200\n    data = response.json()\n    assert \"custom_model\" in data[\"model_name\"]\n\n    # unregister_model\n    url = f\"{endpoint}/v1/model_registrations/LLM/custom_model\"\n\n    response = requests.delete(url, json=payload)\n    assert response.status_code == 200\n\n    # check model version info after unregister\n    url = f\"{endpoint}/v1/models/LLM/custom_model/versions\"\n    response = requests.get(url)\n    version_infos = response.json()\n    assert len(version_infos) == 0\n\n    url = f\"{endpoint}/v1/model_registrations/LLM\"\n\n    response = requests.get(url)\n    assert response.status_code == 200\n    new_model_regs = response.json()\n    assert len(new_model_regs) == len(model_regs)\n    custom_model_reg = None\n    for model_reg in new_model_regs:\n        if model_reg[\"model_name\"] == \"custom_model\":\n            custom_model_reg = model_reg\n    assert custom_model_reg is None\n\n\ndef test_restful_api_for_embedding(setup):\n    model_name = \"gte-base\"\n    # BUILTIN_EMBEDDING_MODELS stores a list of model families for each model name\n    model_spec_list = BUILTIN_EMBEDDING_MODELS[model_name]\n    # Use the first (latest) model family from the list\n    model_spec = model_spec_list[0] if model_spec_list else None\n\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_embedding\",\n        \"model_name\": model_name,\n        \"model_type\": \"embedding\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_embedding\"\n\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 1\n\n    # test embedding\n    url = f\"{endpoint}/v1/embeddings\"\n    payload = {\n        \"model\": \"test_embedding\",\n        \"input\": \"The food was delicious and the waiter...\",\n    }\n    response = requests.post(url, json=payload)\n    embedding_res = response.json()\n\n    assert \"embedding\" in embedding_res[\"data\"][0]\n    assert len(embedding_res[\"data\"][0][\"embedding\"]) == model_spec.dimensions\n    assert \"model_replica\" in embedding_res\n    assert embedding_res[\"model_replica\"] is not None\n    assert embedding_res[\"model\"] == payload[\"model\"]\n\n    # test multiple\n    payload = {\n        \"model\": \"test_embedding\",\n        \"input\": [\n            \"The food was delicious and the waiter...\",\n            \"how to implement quick sort in python?\",\n            \"Beijing\",\n            \"sorting algorithms\",\n        ],\n    }\n    response = requests.post(url, json=payload)\n    embedding_res = response.json()\n\n    assert len(embedding_res[\"data\"]) == 4\n    for data in embedding_res[\"data\"]:\n        assert len(data[\"embedding\"]) == model_spec.dimensions\n\n    # delete model\n    url = f\"{endpoint}/v1/models/test_embedding\"\n    response = requests.delete(url)\n    assert response.status_code == 200\n\n    response = requests.get(f\"{endpoint}/v1/models\")\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n\ndef _check_invalid_tool_calls(endpoint, model_uid_res):\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n\n    tools = [\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"get_exchange_rate\",\n                \"description\": \"Get the exchange rate between two currencies\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"base_currency\": {\n                            \"type\": \"string\",\n                            \"description\": \"The currency to convert from\",\n                        },\n                        \"target_currency\": {\n                            \"type\": \"string\",\n                            \"description\": \"The currency to convert to\",\n                        },\n                    },\n                    \"required\": [\"base_currency\", \"target_currency\"],\n                },\n            },\n        }\n    ]\n\n    completion = client.chat.completions.create(\n        model=model_uid_res,\n        messages=[\n            {\n                \"content\": \"Can you book a flight for me from New York to London?\",\n                \"role\": \"user\",\n            }\n        ],\n        tools=tools,\n        max_tokens=200,\n        temperature=0.1,\n    )\n    assert \"stop\" == completion.choices[0].finish_reason\n    assert completion.choices[0].message.content\n    assert len(completion.choices[0].message.tool_calls) == 0\n\n\n@pytest.mark.parametrize(\n    \"model_format, quantization\",\n    [(\"pytorch\", None)],\n)\n@pytest.mark.skip(reason=\"Cost too many resources.\")\ndef test_restful_api_for_tool_calls(setup, model_format, quantization):\n    model_name = \"glm4-chat\"\n\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_tool\",\n        \"model_engine\": \"transformers\",\n        \"model_name\": model_name,\n        \"model_size_in_billions\": 9,\n        \"model_format\": model_format,\n        \"quantization\": quantization,\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    assert \"model_uid\" in response_data, response_data\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_tool\"\n\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 1\n\n    # tool\n    tools = [\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"track_a_long_function_name_to_test\",\n                \"description\": \"追踪指定股票的实时价格\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\"symbol\": {\"description\": \"需要追踪的股票代码\"}},\n                    \"required\": [\"symbol\"],\n                },\n            },\n        },\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"text-to-speech\",\n                \"description\": \"将文本转换为语音\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"text\": {\"description\": \"需要转换成语音的文本\"},\n                        \"voice\": {\"description\": \"要使用的语音类型（男声、女声等）\"},\n                        \"speed\": {\"description\": \"语音的速度（快、中等、慢等）\"},\n                    },\n                    \"required\": [\"text\"],\n                },\n            },\n        },\n    ]\n    url = f\"{endpoint}/v1/chat/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\"role\": \"user\", \"content\": \"帮我查询股票10111的价格\"},\n        ],\n        \"tools\": tools,\n        \"stop\": [\"\\n\"],\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert \"tool_calls\" == completion[\"choices\"][0][\"finish_reason\"]\n    assert (\n        \"track_a_long_function_name_to_test\"\n        == completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\"name\"]\n    )\n    arguments = completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\n        \"arguments\"\n    ]\n    arg = json.loads(arguments)\n    assert arg == {\"symbol\": \"10111\"}\n\n    # Restful client\n    from ...client import RESTfulClient\n\n    client = RESTfulClient(endpoint)\n    model = client.get_model(model_uid_res)\n    messages = [{\"role\": \"user\", \"content\": \"帮我查询股票10111的价格\"}]\n    completion = model.chat(messages, tools=tools)\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert \"tool_calls\" == completion[\"choices\"][0][\"finish_reason\"]\n    assert (\n        \"track_a_long_function_name_to_test\"\n        == completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\"name\"]\n    )\n    arguments = completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\n        \"arguments\"\n    ]\n    arg = json.loads(arguments)\n    assert arg == {\"symbol\": \"10111\"}\n\n    # openai client\n    import openai\n\n    async def test_stream():\n        async_client = openai.AsyncClient(\n            api_key=\"not empty\", base_url=f\"{endpoint}/v1\"\n        )\n        chunks = []\n        async_completion = async_client.chat.completions.create(\n            model=model_uid_res,\n            messages=[{\"role\": \"user\", \"content\": \"帮我查询股票10111的价格\"}],\n            tools=tools,\n            stream=True,\n        )\n        async for chunk in await async_completion:\n            chunks.append(chunk)\n        assert len(chunks) == 2\n        assert (\n            chunks[1].choices[0].delta.tool_calls[0].function.name\n            == \"track_a_long_function_name_to_test\"\n        )\n        arguments = chunks[1].choices[0].delta.tool_calls[0].function.arguments\n        arg = json.loads(arguments)\n        assert arg == {\"symbol\": \"10111\"}\n\n    asyncio.run(test_stream())\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.chat.completions.create(\n        model=model_uid_res,\n        messages=[{\"role\": \"user\", \"content\": \"帮我查询股票10111的价格\"}],\n        tools=tools,\n    )\n    assert \"tool_calls\" == completion.choices[0].finish_reason\n    assert (\n        \"track_a_long_function_name_to_test\"\n        == completion.choices[0].message.tool_calls[0].function.name\n    )\n    arguments = completion.choices[0].message.tool_calls[0].function.arguments\n    arg = json.loads(arguments)\n    assert arg == {\"symbol\": \"10111\"}\n\n    assistant_message = completion.choices[0].message.model_dump()\n    messages = [\n        {\"role\": \"user\", \"content\": \"帮我查询股票10111的价格\"},\n        assistant_message,\n        {\n            \"role\": \"tool\",\n            \"tool_call_id\": assistant_message[\"tool_calls\"][0][\"id\"],\n            \"name\": assistant_message[\"tool_calls\"][0][\"function\"][\"name\"],\n            \"content\": str({\"symbol\": \"10111\", \"price\": 12345}),\n        },\n    ]\n\n    # When kwargs is {}, the glm4-chat does not observe the output tool calls,\n    # so the test will fail.\n    for kwargs in [{\"tools\": tools}, {}]:\n        completion = client.chat.completions.create(\n            model=model_uid_res, messages=messages, **kwargs\n        )\n        assert completion.choices\n        assert completion.choices[0].finish_reason == \"stop\"\n        if kwargs:\n            assert \"10111\" in completion.choices[0].message.content\n            assert \"12345\" in completion.choices[0].message.content\n\n    _check_invalid_tool_calls(endpoint, model_uid_res)\n\n\n@pytest.mark.parametrize(\n    \"model_format, quantization\",\n    [(\"pytorch\", None)],\n)\n@pytest.mark.skip(reason=\"Cost too many resources.\")\ndef test_restful_api_for_llama3_tool_calls(setup, model_format, quantization):\n    model_name = \"llama-3.1-instruct\"\n\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_tool\",\n        \"model_engine\": \"transformers\",\n        \"model_name\": model_name,\n        \"model_size_in_billions\": 8,\n        \"model_format\": model_format,\n        \"quantization\": quantization,\n        \"download_hub\": \"huggingface\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    assert \"model_uid\" in response_data, response_data\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_tool\"\n\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 1\n\n    # tool\n    tools = [\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"track_a_long_function_name_to_test\",\n                \"description\": \"追踪指定股票的实时价格\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\"symbol\": {\"description\": \"需要追踪的股票代码\"}},\n                    \"required\": [\"symbol\"],\n                },\n            },\n        },\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"text-to-speech\",\n                \"description\": \"将文本转换为语音\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"text\": {\"description\": \"需要转换成语音的文本\"},\n                        \"voice\": {\"description\": \"要使用的语音类型（男声、女声等）\"},\n                        \"speed\": {\"description\": \"语音的速度（快、中等、慢等）\"},\n                    },\n                    \"required\": [\"text\"],\n                },\n            },\n        },\n    ]\n    url = f\"{endpoint}/v1/chat/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\"role\": \"user\", \"content\": \"帮我查询股票10111的价格\"},\n        ],\n        \"tools\": tools,\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert \"tool_calls\" == completion[\"choices\"][0][\"finish_reason\"]\n    assert (\n        \"track_a_long_function_name_to_test\"\n        == completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\"name\"]\n    )\n    arguments = completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\n        \"arguments\"\n    ]\n    arg = json.loads(arguments)\n    assert arg == {\"symbol\": \"10111\"}\n\n\n@pytest.mark.parametrize(\n    \"model_format, quantization\", [(\"ggufv2\", \"Q4_K_S\"), (\"pytorch\", None)]\n)\n@pytest.mark.skip(reason=\"Cost too many resources.\")\ndef test_restful_api_for_gorilla_openfunctions_tool_calls(\n    setup, model_format, quantization\n):\n    model_name = \"gorilla-openfunctions-v1\"\n\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_tool\",\n        \"model_name\": model_name,\n        \"model_size_in_billions\": 7,\n        \"model_format\": model_format,\n        \"quantization\": quantization,\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_tool\"\n\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 1\n\n    # tool\n    tools = [\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"uber_ride\",\n                \"description\": \"Find suitable ride for customers given the location, \"\n                \"type of ride, and the amount of time the customer is \"\n                \"willing to wait as parameters\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"loc\": {\n                            \"type\": \"int\",\n                            \"description\": \"Location of the starting place of the Uber ride\",\n                        },\n                        \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\"plus\", \"comfort\", \"black\"],\n                            \"description\": \"Types of Uber ride user is ordering\",\n                        },\n                        \"time\": {\n                            \"type\": \"int\",\n                            \"description\": \"The amount of time in minutes the customer is willing to wait\",\n                        },\n                    },\n                },\n            },\n        }\n    ]\n    url = f\"{endpoint}/v1/chat/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\n                \"role\": \"user\",\n                \"content\": 'Call me an Uber ride type \"Plus\" in Berkeley at zipcode 94704 in 10 minutes',\n            },\n        ],\n        \"tools\": tools,\n        \"stop\": [\"\\n\"],\n        \"max_tokens\": 200,\n        \"temperature\": 0,\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert \"tool_calls\" == completion[\"choices\"][0][\"finish_reason\"]\n    assert (\n        \"uber_ride\"\n        == completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\"name\"]\n    )\n    arguments = completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\n        \"arguments\"\n    ]\n    arg = json.loads(arguments)\n    assert arg == {\"loc\": 94704, \"time\": 10, \"type\": \"plus\"}\n\n    _check_invalid_tool_calls(endpoint, model_uid_res)\n\n\n@pytest.mark.parametrize(\n    \"model_format, quantization\",\n    [\n        (\"pytorch\", None),\n        (\"ggufv2\", \"Q4_K_M\"),\n    ],\n)\n@pytest.mark.skip(reason=\"Cost too many resources.\")\ndef test_restful_api_for_qwen_tool_calls(setup, model_format, quantization):\n    model_name = \"qwen1.5-chat\"\n\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_tool\",\n        \"model_name\": model_name,\n        \"model_engine\": \"transformers\",\n        \"model_size_in_billions\": 7,\n        \"model_format\": model_format,\n        \"quantization\": quantization,\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_tool\"\n\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 1\n\n    url = f\"{endpoint}/v1/chat/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\n                \"role\": \"user\",\n                \"content\": \"谁是周杰伦？\",\n            },\n        ],\n        \"tools\": [],\n        \"max_tokens\": 2048,\n        \"temperature\": 0,\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n    assert \"stop\" == completion[\"choices\"][0][\"finish_reason\"]\n\n    tools = [\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"google_search\",\n                \"description\": \"谷歌搜索是一个通用搜索引擎，搜索周杰伦。\",\n                \"parameters\": {},\n            },\n        },\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"image_gen\",\n                \"description\": \"文生图是一个AI绘画（图像生成）服务，画个周杰伦。\",\n            },\n        },\n    ]\n\n    url = f\"{endpoint}/v1/chat/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\n                \"role\": \"user\",\n                \"content\": \"谁是周杰伦？\",\n            },\n        ],\n        \"tools\": tools,\n        \"max_tokens\": 2048,\n        \"temperature\": 0,\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert \"tool_calls\" == completion[\"choices\"][0][\"finish_reason\"]\n    assert (\n        \"google_search\"\n        == completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\"name\"]\n    )\n    arguments = completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\n        \"arguments\"\n    ]\n    assert json.loads(arguments)\n    assert completion[\"usage\"]\n    assert completion[\"usage\"][\"prompt_tokens\"] != -1\n\n    # tool\n    tools = [\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"google_search\",\n                \"description\": \"谷歌搜索是一个通用搜索引擎，可用于访问互联网、查询百科知识、了解时事新闻等。\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"search_query\": {\n                            \"type\": \"string\",\n                            \"description\": \"搜索关键词或短语\",\n                        },\n                    },\n                    \"required\": [\"search_query\"],\n                },\n            },\n        },\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"image_gen\",\n                \"description\": \"文生图是一个AI绘画（图像生成）服务，输入文本描述，返回根据文本作画得到的图片的URL。\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"prompt\": {\n                            \"type\": \"string\",\n                            \"description\": \"英文关键词，描述了希望图像具有什么内容\",\n                        },\n                    },\n                    \"required\": [\"prompt\"],\n                },\n            },\n        },\n    ]\n    url = f\"{endpoint}/v1/chat/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\n                \"role\": \"user\",\n                \"content\": \"谁是周杰伦？\",\n            },\n        ],\n        \"tools\": tools,\n        \"max_tokens\": 2048,\n        \"temperature\": 0,\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert \"tool_calls\" == completion[\"choices\"][0][\"finish_reason\"]\n    assert (\n        \"google_search\"\n        == completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\"name\"]\n    )\n    arguments = completion[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\n        \"arguments\"\n    ]\n    arg = json.loads(arguments)\n    assert arg == {\"search_query\": \"周杰伦\"}\n\n    # Check tool message.\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\n                \"role\": \"user\",\n                \"content\": \"谁是周杰伦？\",\n            },\n            completion[\"choices\"][0][\"message\"],\n            {\n                \"role\": \"tool\",\n                \"content\": \"Jay Chou is a Taiwanese singer, songwriter, record producer, rapper, actor, television personality, and businessman.\",\n            },\n        ],\n        \"tools\": tools,\n        \"max_tokens\": 2048,\n        \"temperature\": 0,\n    }\n    response = requests.post(url, json=payload)\n    completion2 = response.json()\n    assert \"stop\" == completion2[\"choices\"][0][\"finish_reason\"]\n    assert \"周杰伦\" in completion2[\"choices\"][0][\"message\"][\"content\"]\n    # The content varies between gguf and torch model.\n    # assert \"歌\" in completion2[\"choices\"][0][\"message\"][\"content\"]\n\n    # Check continue tool call.\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\n                \"role\": \"user\",\n                \"content\": \"谁是周杰伦？\",\n            },\n            completion[\"choices\"][0][\"message\"],\n            {\n                \"role\": \"tool\",\n                \"content\": \"Jay Chou is a Taiwanese singer, songwriter, record producer, rapper, actor, television personality, and businessman.\",\n            },\n            completion2[\"choices\"][0][\"message\"],\n            {\"role\": \"user\", \"content\": \"画一个他的卡通形象出来\"},\n        ],\n        \"tools\": tools,\n        \"max_tokens\": 2048,\n        \"temperature\": 0,\n    }\n    response = requests.post(url, json=payload)\n    completion3 = response.json()\n    assert \"tool_calls\" == completion3[\"choices\"][0][\"finish_reason\"]\n    assert (\n        \"image_gen\"\n        == completion3[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\"name\"]\n    )\n    arguments = completion3[\"choices\"][0][\"message\"][\"tool_calls\"][0][\"function\"][\n        \"arguments\"\n    ]\n    arg = json.loads(arguments)\n    assert \"Jay Chou\" in arg[\"prompt\"]\n\n    # Qwen 1.5 4B can't pass the false tool call check.\n    # _check_invalid_tool_calls(endpoint, model_uid_res)\n\n\ndef test_restful_api_with_request_limits(setup):\n    model_name = \"gte-base\"\n\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # test embedding\n    # launch\n    payload = {\n        \"model_uid\": \"test_embedding\",\n        \"model_name\": model_name,\n        \"model_type\": \"embedding\",\n        \"request_limits\": 0,\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_embedding\"\n\n    # test embedding\n    url = f\"{endpoint}/v1/embeddings\"\n    payload = {\n        \"model\": \"test_embedding\",\n        \"input\": \"The food was delicious and the waiter...\",\n    }\n    response = requests.post(url, json=payload)\n    assert response.status_code == 429\n    assert \"Rate limit reached\" in response.json()[\"detail\"]\n\n    # delete model\n    url = f\"{endpoint}/v1/models/test_embedding\"\n    response = requests.delete(url)\n    assert response.status_code == 200\n\n    # test llm\n    url = f\"{endpoint}/v1/models\"\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_name\": \"qwen1.5-chat\",\n        \"model_size_in_billions\": \"0_5\",\n        \"quantization\": \"q4_0\",\n        \"request_limits\": 0,\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # generate\n    url = f\"{endpoint}/v1/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"prompt\": \"Once upon a time, there was a very old computer.\",\n    }\n    response = requests.post(url, json=payload)\n    assert response.status_code == 429\n    assert \"Rate limit reached\" in response.json()[\"detail\"]\n\n\n@pytest.mark.asyncio\n@pytest.mark.skipif(\n    sys.platform == \"win32\", reason=\"Window CI hangs after run this case.\"\n)\nasync def test_openai(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_name\": \"qwen1.5-chat\",\n        \"model_size_in_billions\": \"0_5\",\n        \"quantization\": \"q4_0\",\n        \"n_ctx\": 128,\n        \"n_parallel\": 1,\n        \"use_mmap\": True,\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"What is the capital of France?\"},\n    ]\n\n    result = []\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n    async for chunk in await openai_chat_completion(\n        messages=messages, stream=True, model=model_uid_res, max_tokens=None\n    ):\n        if not hasattr(chunk, \"choices\") or len(chunk.choices) == 0:\n            continue\n        result.append(chunk)\n    assert result\n    assert type(result[0]).__name__ == stream_chunk_type_name\n\n    result = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result\n    assert type(result).__name__ == response_type_name\n\n\ndef test_lang_chain(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_name\": \"qwen1.5-chat\",\n        \"model_size_in_billions\": \"0_5\",\n        \"quantization\": \"q4_0\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    from langchain_core.messages import AIMessage, HumanMessage, SystemMessage\n    from langchain_core.prompts import (\n        ChatPromptTemplate,\n        HumanMessagePromptTemplate,\n        SystemMessagePromptTemplate,\n    )\n    from langchain_openai import ChatOpenAI\n\n    inference_server_url = f\"{endpoint}/v1\"\n\n    chat = ChatOpenAI(\n        model=model_uid_res,\n        openai_api_key=\"EMPTY\",\n        openai_api_base=inference_server_url,\n        max_tokens=5,\n        temperature=0,\n    )\n\n    messages = [\n        SystemMessage(\n            content=\"You are a helpful assistant that translates English to Italian.\"\n        ),\n        HumanMessage(\n            content=\"Translate the following sentence from English to Italian: I love programming.\"\n        ),\n    ]\n    r = chat.invoke(messages)\n    assert type(r) == AIMessage\n    assert r.content\n\n    template = \"You are a helpful assistant that translates {input_language} to {output_language}.\"\n    system_message_prompt = SystemMessagePromptTemplate.from_template(template)\n    human_template = \"{text}\"\n    human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)\n\n    chat_prompt = ChatPromptTemplate.from_messages(\n        [system_message_prompt, human_message_prompt]\n    )\n\n    # get a chat completion from the formatted messages\n    r = chat.invoke(\n        chat_prompt.format_prompt(\n            input_language=\"English\",\n            output_language=\"Italian\",\n            text=\"I love programming.\",\n        ).to_messages()\n    )\n    assert type(r) == AIMessage\n    assert r.content\n\n\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\n    \"payload, expected\",\n    [\n        (\n            {\n                \"model\": \"test\",\n                \"messages\": [{\"role\": \"user\", \"content\": \"hi\"}],\n                \"enable_thinking\": False,\n            },\n            False,\n        ),\n        (\n            {\n                \"model\": \"test\",\n                \"messages\": [{\"role\": \"user\", \"content\": \"hi\"}],\n                \"extra_body\": {\"enable_thinking\": True},\n            },\n            True,\n        ),\n    ],\n)\nasync def test_chat_completion_enable_thinking_injected(payload, expected):\n    from ...api.restful_api import RESTfulAPI\n\n    api = RESTfulAPI(\"localhost\", \"localhost\", 9997)\n    mock_supervisor = AsyncMock()\n    api._get_supervisor_ref = AsyncMock(return_value=mock_supervisor)\n\n    model = AsyncMock()\n    model.uid = \"test-model\"\n    model.chat = AsyncMock(return_value=\"{}\")\n    mock_supervisor.get_model = AsyncMock(return_value=model)\n    mock_supervisor.describe_model = AsyncMock(return_value={\"model_family\": \"qwen3\"})\n\n    response = await api.create_chat_completion(_DummyRequest(payload))\n    assert response.status_code == 200\n\n    called_args, called_kwargs = model.chat.call_args\n    chat_kwargs = called_args[1][\"chat_template_kwargs\"]\n    assert chat_kwargs[\"enable_thinking\"] is expected\n    assert chat_kwargs[\"thinking\"] is expected\n\n    raw_chat_kwargs = called_kwargs[\"raw_params\"][\"chat_template_kwargs\"]\n    assert raw_chat_kwargs[\"enable_thinking\"] is expected\n    assert raw_chat_kwargs[\"thinking\"] is expected\n\n\ndef test_launch_model_async(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models?wait_ready=false\"\n\n    payload = {\n        \"model_uid\": \"test_qwen_15\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_name\": \"qwen1.5-chat\",\n        \"model_size_in_billions\": \"0_5\",\n        \"quantization\": \"q4_0\",\n        \"n_ctx\": 128,\n        \"n_parallel\": 1,\n        \"use_mmap\": True,\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_qwen_15\"\n\n    status_url = f\"{endpoint}/v1/models/instances?model_uid=test_qwen_15\"\n    progress_url = f\"{endpoint}/v1/models/test_qwen_15/progress\"\n    while True:\n        response = requests.get(status_url)\n        response_data = response.json()\n        assert len(response_data) == 1\n        res = response_data[0]\n        progress = requests.get(progress_url).json()\n        assert progress[\"progress\"] is not None\n        if res[\"status\"] == \"READY\":\n            assert progress[\"progress\"] == 1.0\n            break\n        time.sleep(2)\n\n    # delete again\n    url = f\"{endpoint}/v1/models/test_qwen_15\"\n    requests.delete(url)\n\n    response = requests.get(status_url)\n    assert len(response.json()) == 0\n\n\ndef test_cancel_launch_model(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models?wait_ready=false\"\n\n    payload = {\n        \"model_uid\": \"test_qwen_25\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_name\": \"qwen2.5-instruct\",\n        \"model_size_in_billions\": \"0_5\",\n        \"quantization\": \"q4_0\",\n        \"n_ctx\": 128,\n        \"n_parallel\": 1,\n        \"use_mmap\": True,\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_qwen_25\"\n\n    status_url = f\"{endpoint}/v1/models/instances?model_uid=test_qwen_25\"\n    cancel_url = f\"{endpoint}/v1/models/test_qwen_25/cancel\"\n\n    cancel_called = False\n\n    while True:\n        response = requests.get(status_url)\n        response_data = response.json()[0]\n\n        if response_data[\"status\"] == \"CREATING\":\n            if not cancel_called:\n                requests.post(cancel_url)\n                cancel_called = True\n            continue\n        else:\n            assert response_data[\"status\"] == \"ERROR\"\n            break\n\n\ndef test_events(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    payload = {\n        \"model_uid\": \"test_qwen_25\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_name\": \"qwen2.5-instruct\",\n        \"model_size_in_billions\": \"0_5\",\n        \"quantization\": \"q4_0\",\n        \"n_ctx\": 128,\n        \"n_parallel\": 1,\n        \"use_mmap\": True,\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_qwen_25\"\n\n    events_url = f\"{endpoint}/v1/models/test_qwen_25/events\"\n    response = requests.get(events_url)\n    response_data = response.json()\n    # [{'event_type': 'INFO', 'event_ts': 1705896156, 'event_content': 'Launch model'}]\n    assert len(response_data) == 1\n    assert \"Launch\" in response_data[0][\"event_content\"]\n\n    # delete again\n    url = f\"{endpoint}/v1/models/test_qwen_25\"\n    response = requests.delete(url)\n    response.raise_for_status()\n\n    response = requests.get(events_url)\n    response_data = response.json()\n    # [{'event_type': 'INFO', 'event_ts': 1705896215, 'event_content': 'Launch model'},\n    #  {'event_type': 'INFO', 'event_ts': 1705896215, 'event_content': 'Terminate model'}]\n    assert len(response_data) == 2\n    assert \"Terminate\" in response_data[1][\"event_content\"]\n\n\ndef test_launch_model_by_version(setup):\n    endpoint, supervisor_addr = setup\n    url = f\"{endpoint}/v1/models/instance\"\n\n    model_version = \"qwen1.5-chat--0_5B--ggufv2--q4_0\"\n\n    payload = {\n        \"model_uid\": \"test_qwen15\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_type\": \"LLM\",\n        \"model_version\": model_version,\n    }\n    response = requests.post(url, json=payload)\n    assert response.json()[\"model_uid\"] == \"test_qwen15\"\n\n    url_version = f\"{endpoint}/v1/models/LLM/qwen1.5-chat/versions\"\n    response = requests.get(url_version)\n    versions = response.json()\n\n    has_version = False\n    for info in versions:\n        if info[\"model_version\"] == model_version:\n            has_version = True\n            assert info[\"cache_status\"] is True\n            assert info[\"model_file_location\"] is not None\n            assert isinstance(info[\"model_file_location\"], dict)\n            assert supervisor_addr in info[\"model_file_location\"]\n            assert os.path.exists(info[\"model_file_location\"][supervisor_addr])\n            break\n    assert has_version is True\n\n    # delete again\n    url = f\"{endpoint}/v1/models/test_qwen15\"\n    requests.delete(url)\n\n\ndef test_builtin_families(setup):\n    endpoint, supervisor_addr = setup\n    url = f\"{endpoint}/v1/models/families\"\n\n    response = requests.get(url)\n    families = response.json()\n    test_abilities = [\n        \"generate\",\n        \"chat\",\n        \"vision\",\n        \"reasoning\",\n        \"tools\",\n        \"audio\",\n        \"omni\",\n        \"hybrid\",\n    ]\n    assert all(ability in families for ability in test_abilities)\n    assert \"qwen3\" in families[\"hybrid\"]\n\n\n@pytest.fixture\ndef anthropic_setup():\n    \"\"\"Setup for Anthropic format conversion tests\"\"\"\n\n    # Create a mock handler with the conversion method\n    class MockHandler:\n        def _convert_openai_to_anthropic(\n            self, openai_response: dict, model: str\n        ) -> dict:\n            from ...api.restful_api import RESTfulAPI\n\n            # Create a temporary RESTfulAPI instance to access the method\n            app = RESTfulAPI(\"test_supervisor_address\", \"test_host\", 12345)\n            return app._convert_openai_to_anthropic(openai_response, model)\n\n    # Sample OpenAI responses for testing\n    sample_openai_response_with_tools = {\n        \"choices\": [\n            {\n                \"message\": {\n                    \"content\": None,\n                    \"tool_calls\": [\n                        {\n                            \"id\": \"call_123\",\n                            \"type\": \"function\",\n                            \"function\": {\n                                \"name\": \"get_weather\",\n                                \"arguments\": '{\"city\": \"Beijing\"}',\n                            },\n                        }\n                    ],\n                },\n                \"finish_reason\": \"tool_calls\",\n                \"index\": 0,\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 50, \"completion_tokens\": 20, \"total_tokens\": 70},\n    }\n\n    sample_openai_response_without_tools = {\n        \"choices\": [\n            {\n                \"message\": {\n                    \"content\": \"Hello, how can I help you?\",\n                    \"tool_calls\": [],\n                },\n                \"finish_reason\": \"stop\",\n                \"index\": 0,\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 10, \"completion_tokens\": 10, \"total_tokens\": 20},\n    }\n\n    return (\n        MockHandler(),\n        sample_openai_response_with_tools,\n        sample_openai_response_without_tools,\n    )\n\n\ndef test_convert_openai_to_anthropic_with_tools(anthropic_setup):\n    \"\"\"Test conversion of OpenAI response with tool calls to Anthropic format\"\"\"\n    handler, sample_openai_response_with_tools, _ = anthropic_setup\n    result = handler._convert_openai_to_anthropic(\n        sample_openai_response_with_tools, \"test-model\"\n    )\n\n    # Verify basic structure\n    assert result[\"type\"] == \"message\"\n    assert result[\"role\"] == \"assistant\"\n    assert result[\"model\"] == \"test-model\"\n    assert result[\"stop_reason\"] == \"tool_use\"\n\n    # Verify content blocks\n    assert len(result[\"content\"]) == 1\n    content_block = result[\"content\"][0]\n    assert content_block[\"type\"] == \"tool_use\"\n    assert content_block[\"name\"] == \"get_weather\"\n    assert content_block[\"input\"] == {\"city\": \"Beijing\"}\n    assert \"id\" in content_block\n    assert content_block[\"cache_control\"] == {\"type\": \"ephemeral\"}\n\n    # Verify usage stats\n    assert result[\"usage\"][\"input_tokens\"] == 50\n    assert result[\"usage\"][\"output_tokens\"] == 20\n\n\ndef test_convert_openai_to_anthropic_without_tools(anthropic_setup):\n    \"\"\"Test conversion of OpenAI response without tool calls to Anthropic format\"\"\"\n    handler, _, sample_openai_response_without_tools = anthropic_setup\n    result = handler._convert_openai_to_anthropic(\n        sample_openai_response_without_tools, \"test-model\"\n    )\n\n    # Verify basic structure\n    assert result[\"type\"] == \"message\"\n    assert result[\"role\"] == \"assistant\"\n    assert result[\"model\"] == \"test-model\"\n    assert result[\"stop_reason\"] == \"stop\"\n\n    # Verify content blocks\n    assert len(result[\"content\"]) == 1\n    content_block = result[\"content\"][0]\n    assert content_block[\"type\"] == \"text\"\n    assert content_block[\"text\"] == \"Hello, how can I help you?\"\n\n    # Verify usage stats\n    assert result[\"usage\"][\"input_tokens\"] == 10\n    assert result[\"usage\"][\"output_tokens\"] == 10\n\n\ndef test_convert_openai_to_anthropic_mixed_content(anthropic_setup):\n    \"\"\"Test conversion of OpenAI response with both text and tool calls\"\"\"\n    handler, _, _ = anthropic_setup\n    openai_response = {\n        \"choices\": [\n            {\n                \"message\": {\n                    \"content\": \"I'll help you check the weather.\",\n                    \"tool_calls\": [\n                        {\n                            \"id\": \"call_456\",\n                            \"type\": \"function\",\n                            \"function\": {\n                                \"name\": \"get_weather\",\n                                \"arguments\": '{\"city\": \"Shanghai\"}',\n                            },\n                        }\n                    ],\n                },\n                \"finish_reason\": \"tool_calls\",\n                \"index\": 0,\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 60, \"completion_tokens\": 30, \"total_tokens\": 90},\n    }\n\n    result = handler._convert_openai_to_anthropic(openai_response, \"test-model\")\n\n    # Verify basic structure\n    assert result[\"type\"] == \"message\"\n    assert result[\"role\"] == \"assistant\"\n    assert result[\"model\"] == \"test-model\"\n    assert result[\"stop_reason\"] == \"tool_use\"\n\n    # Verify content blocks (should have both text and tool_use)\n    assert len(result[\"content\"]) == 2\n\n    # First block should be text\n    text_block = result[\"content\"][0]\n    assert text_block[\"type\"] == \"text\"\n    assert text_block[\"text\"] == \"I'll help you check the weather.\"\n\n    # Second block should be tool_use\n    tool_block = result[\"content\"][1]\n    assert tool_block[\"type\"] == \"tool_use\"\n    assert tool_block[\"name\"] == \"get_weather\"\n    assert tool_block[\"input\"] == {\"city\": \"Shanghai\"}\n\n\ndef test_convert_openai_to_anthropic_multiple_tools(anthropic_setup):\n    \"\"\"Test conversion of OpenAI response with multiple tool calls\"\"\"\n    handler, _, _ = anthropic_setup\n    openai_response = {\n        \"choices\": [\n            {\n                \"message\": {\n                    \"content\": \"I'll help you with both tasks.\",\n                    \"tool_calls\": [\n                        {\n                            \"id\": \"call_789\",\n                            \"type\": \"function\",\n                            \"function\": {\n                                \"name\": \"get_weather\",\n                                \"arguments\": '{\"city\": \"Beijing\"}',\n                            },\n                        },\n                        {\n                            \"id\": \"call_790\",\n                            \"type\": \"function\",\n                            \"function\": {\n                                \"name\": \"get_time\",\n                                \"arguments\": '{\"timezone\": \"UTC\"}',\n                            },\n                        },\n                    ],\n                },\n                \"finish_reason\": \"tool_calls\",\n                \"index\": 0,\n            }\n        ],\n        \"usage\": {\n            \"prompt_tokens\": 80,\n            \"completion_tokens\": 40,\n            \"total_tokens\": 120,\n        },\n    }\n\n    result = handler._convert_openai_to_anthropic(openai_response, \"test-model\")\n\n    # Verify content blocks\n    assert len(result[\"content\"]) == 3  # 1 text + 2 tool_use blocks\n\n    # Check tool blocks\n    tool_blocks = [block for block in result[\"content\"] if block[\"type\"] == \"tool_use\"]\n    assert len(tool_blocks) == 2\n\n    # Verify first tool\n    assert tool_blocks[0][\"name\"] == \"get_weather\"\n    assert tool_blocks[0][\"input\"] == {\"city\": \"Beijing\"}\n\n    # Verify second tool\n    assert tool_blocks[1][\"name\"] == \"get_time\"\n    assert tool_blocks[1][\"input\"] == {\"timezone\": \"UTC\"}\n\n\ndef test_convert_openai_to_anthropic_empty_response(anthropic_setup):\n    \"\"\"Test conversion of empty OpenAI response\"\"\"\n    handler, _, _ = anthropic_setup\n    empty_response = {\"choices\": []}\n    result = handler._convert_openai_to_anthropic(empty_response, \"test-model\")\n\n    # Should still have basic structure\n    assert result[\"type\"] == \"message\"\n    assert result[\"role\"] == \"assistant\"\n    assert result[\"model\"] == \"test-model\"\n    assert result[\"stop_reason\"] == \"stop\"\n    assert result[\"content\"] == []\n\n\ndef test_convert_openai_to_anthropic_invalid_tool_arguments(anthropic_setup):\n    \"\"\"Test handling of invalid tool arguments JSON\"\"\"\n    handler, _, _ = anthropic_setup\n    openai_response = {\n        \"choices\": [\n            {\n                \"message\": {\n                    \"content\": None,\n                    \"tool_calls\": [\n                        {\n                            \"id\": \"call_invalid\",\n                            \"type\": \"function\",\n                            \"function\": {\n                                \"name\": \"test_tool\",\n                                \"arguments\": \"invalid json {\",\n                            },\n                        }\n                    ],\n                },\n                \"finish_reason\": \"tool_calls\",\n                \"index\": 0,\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 10, \"completion_tokens\": 10, \"total_tokens\": 20},\n    }\n\n    # Should not raise exception, should handle gracefully\n    result = handler._convert_openai_to_anthropic(openai_response, \"test-model\")\n\n    # Verify structure is maintained even with invalid JSON\n    assert result[\"type\"] == \"message\"\n    assert len(result[\"content\"]) == 1\n    tool_block = result[\"content\"][0]\n    assert tool_block[\"type\"] == \"tool_use\"\n    assert tool_block[\"name\"] == \"test_tool\"\n    # Invalid JSON should result in empty dict\n    assert tool_block[\"input\"] == {}\n\n\ndef test_anthropic_tools_response_format(anthropic_setup):\n    \"\"\"Test that the response format matches Anthropic API specification\"\"\"\n    handler, sample_openai_response_with_tools, _ = anthropic_setup\n    result = handler._convert_openai_to_anthropic(\n        sample_openai_response_with_tools, \"test-model\"\n    )\n\n    # Verify required fields according to Anthropic API spec\n    required_fields = [\n        \"id\",\n        \"type\",\n        \"role\",\n        \"content\",\n        \"model\",\n        \"stop_reason\",\n        \"usage\",\n    ]\n    for field in required_fields:\n        assert field in result\n\n    # Verify field types\n    assert isinstance(result[\"id\"], str)\n    assert result[\"type\"] == \"message\"\n    assert result[\"role\"] == \"assistant\"\n    assert isinstance(result[\"content\"], list)\n    assert isinstance(result[\"model\"], str)\n    assert result[\"stop_reason\"] in [\"stop\", \"tool_use\"]\n    assert isinstance(result[\"usage\"], dict)\n\n    # Verify usage structure\n    usage_fields = [\n        \"input_tokens\",\n        \"output_tokens\",\n        \"cache_creation_input_tokens\",\n        \"cache_read_input_tokens\",\n    ]\n    for field in usage_fields:\n        assert field in result[\"usage\"]\n\n\n@pytest.fixture\ndef anthropic_api():\n    \"\"\"Create RESTfulAPI instance for testing\"\"\"\n    from ...api.restful_api import RESTfulAPI\n\n    return RESTfulAPI(\"localhost\", \"localhost\", 9997)\n\n\n@pytest.fixture\ndef mock_supervisor():\n    \"\"\"Mock supervisor reference\"\"\"\n    supervisor = AsyncMock()\n    return supervisor\n\n\n@pytest.fixture\ndef sample_models():\n    \"\"\"Sample models data for testing\"\"\"\n    return {\n        \"model1\": {\n            \"model_name\": \"claude-3-sonnet\",\n            \"model_type\": \"LLM\",\n            \"context_length\": 8192,\n            \"model_format\": \"pytorch\",\n            \"model_size_in_billions\": 7,\n            \"quantization\": \"none\",\n        },\n        \"model2\": {\n            \"model_name\": \"claude-3-haiku\",\n            \"model_type\": \"LLM\",\n            \"context_length\": 4096,\n            \"model_format\": \"pytorch\",\n            \"model_size_in_billions\": 3,\n            \"quantization\": \"none\",\n        },\n    }\n\n\n@pytest.mark.asyncio\nasync def test_anthropic_list_models(anthropic_api, mock_supervisor, sample_models):\n    \"\"\"Test anthropic_list_models endpoint\"\"\"\n    # Mock the supervisor\n    anthropic_api._get_supervisor_ref = AsyncMock(return_value=mock_supervisor)\n    mock_supervisor.list_models = AsyncMock(return_value=sample_models)\n\n    # Call the method\n    response = await anthropic_api.anthropic_list_models()\n\n    # Verify response\n    assert response.status_code == 200\n    data = json.loads(response.body.decode())\n\n    assert len(data) == 2\n    assert data[0][\"id\"] == \"model1\"\n    assert data[0][\"object\"] == \"model\"\n    assert data[0][\"display_name\"] == \"claude-3-sonnet\"\n    assert data[0][\"type\"] == \"LLM\"\n    assert data[0][\"max_tokens\"] == 8192\n\n\n@pytest.mark.asyncio\nasync def test_anthropic_get_model_found(anthropic_api, mock_supervisor, sample_models):\n    \"\"\"Test anthropic_get_model endpoint when model exists\"\"\"\n    # Mock the supervisor\n    anthropic_api._get_supervisor_ref = AsyncMock(return_value=mock_supervisor)\n    mock_supervisor.list_models = AsyncMock(return_value=sample_models)\n\n    # Call the method\n    response = await anthropic_api.anthropic_get_model(\"model1\")\n\n    # Verify response\n    assert response.status_code == 200\n    data = json.loads(response.body.decode())\n\n    assert data[\"id\"] == \"model1\"\n    assert data[\"object\"] == \"model\"\n    assert data[\"display_name\"] == \"claude-3-sonnet\"\n    assert data[\"type\"] == \"LLM\"\n    assert data[\"max_tokens\"] == 8192\n    assert data[\"model_name\"] == \"claude-3-sonnet\"\n\n\n@pytest.mark.asyncio\nasync def test_anthropic_models_format_compatibility(\n    anthropic_api, mock_supervisor, sample_models\n):\n    \"\"\"Test that Anthropic models endpoint format is compatible with Anthropic API\"\"\"\n    # Mock the supervisor\n    anthropic_api._get_supervisor_ref = AsyncMock(return_value=mock_supervisor)\n    mock_supervisor.list_models = AsyncMock(return_value=sample_models)\n\n    # Test list models\n    response = await anthropic_api.anthropic_list_models()\n    data = json.loads(response.body.decode())\n\n    # Verify Anthropic format\n    for model in data:\n        # Required fields for Anthropic models API\n        assert \"id\" in model\n        assert \"object\" in model\n        assert model[\"object\"] == \"model\"\n        assert \"created\" in model\n        assert \"display_name\" in model\n        assert \"type\" in model\n        assert \"max_tokens\" in model\n\n        # Verify types\n        assert isinstance(model[\"id\"], str)\n        assert isinstance(model[\"created\"], int)\n        assert isinstance(model[\"display_name\"], str)\n        assert isinstance(model[\"type\"], str)\n        assert isinstance(model[\"max_tokens\"], int)\n\n\n@pytest.mark.asyncio\nasync def test_anthropic_models_include_original_fields(\n    anthropic_api, mock_supervisor, sample_models\n):\n    \"\"\"Test that original model fields are preserved in Anthropic response\"\"\"\n    # Mock the supervisor\n    anthropic_api._get_supervisor_ref = AsyncMock(return_value=mock_supervisor)\n    mock_supervisor.list_models = AsyncMock(return_value=sample_models)\n\n    # Test get model\n    response = await anthropic_api.anthropic_get_model(\"model1\")\n    data = json.loads(response.body.decode())\n\n    # Verify original fields are preserved\n    assert data[\"model_name\"] == \"claude-3-sonnet\"\n    assert data[\"model_type\"] == \"LLM\"\n    assert data[\"context_length\"] == 8192\n    assert data[\"model_format\"] == \"pytorch\"\n    assert data[\"model_size_in_billions\"] == 7\n    assert data[\"quantization\"] == \"none\"\n"
  },
  {
    "path": "xinference/core/tests/test_types.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport pytest\n\nfrom ..._compat import ValidationError\nfrom ...types import (\n    CreateChatCompletion,\n    CreateChatCompletionTorch,\n    CreateCompletion,\n    CreateCompletionTorch,\n)\n\n\ndef check_fields(a, b):\n    both = a.__fields__.keys() & b.__fields__.keys()\n    for f in both:\n        fa = a.__fields__[f]\n        fb = b.__fields__[f]\n        print(a, b, f)\n        if fa.allow_none and not fb.allow_none:\n            raise Exception(\n                f\"The field '{f}' allow none of {a} and {b} are not valid:\\n\"\n                f\"    {fa.allow_none} != {fb.allow_none}\"\n            )\n        if not fa.required and fb.required:\n            raise Exception(\n                f\"The field '{f}' required of {a} and {b} are not valid:\\n\"\n                f\"    {fa.required} != {fb.required}\"\n            )\n        if fa.default != fb.default and fa.default is None and fb.default is not None:\n            raise Exception(\n                f\"The field '{f}' default value of {a} and {b} are not equal:\\n\"\n                f\"    {fa.default} != {fb.default}\"\n            )\n\n\ndef test_create_completion_types():\n    with pytest.raises(ValidationError):\n        CreateCompletion()\n\n    # In order to support extra body for openai client, we allow non exist key values.\n    # with pytest.raises(ValidationError):\n    #     CreateCompletion(model=\"abc\", prompt=\"def\", not_exist=\"jdk\")\n\n    CreateCompletion(model=\"abc\", prompt=\"def\")\n\n    types = [CreateCompletionTorch]\n    for t in types:\n        t()\n        assert \"model\" not in t.__fields__\n        assert \"prompt\" not in t.__fields__\n    for i in range(len(types)):\n        for j in range(i + 1, len(types)):\n            check_fields(types[i], types[j])\n\n\ndef test_create_chat_completion_types():\n    with pytest.raises(ValidationError):\n        CreateChatCompletion()\n\n    with pytest.raises(ValidationError):\n        CreateChatCompletion(model=\"abc\", not_exist=\"jdk\")\n\n    CreateChatCompletion(model=\"abc\", messages=[{\"role\": \"tool\"}], max_tokens=None)\n\n    types = [CreateChatCompletionTorch]\n    for t in types:\n        t()\n        assert \"model\" not in t.__fields__\n        assert \"prompt\" not in t.__fields__\n        assert \"messages\" not in t.__fields__\n    for i in range(len(types)):\n        for j in range(i + 1, len(types)):\n            check_fields(types[i], types[j])\n\n    # These chat and generate share the same type.\n    assert CreateChatCompletionTorch is CreateCompletionTorch\n\n\ndef test_openai_requests():\n    # https://github.com/xorbitsai/inference/pull/2673\n    # The following request body is generated by this:\n    # client = openai.Client(api_key=\"not empty\", base_url=\"http://127.0.0.1:9997/v1\")\n    #\n    # class TSchema(BaseModel):\n    #     test: str\n    #     num: int\n    #\n    # schema = TSchema.model_json_schema()\n    # messages = [\n    #     {\"role\": \"system\", \"content\": \"you are a helpful assistant\"},\n    #     {\"role\": \"user\", \"content\": \"give me an example json, fill a random number\"}\n    # ]\n    # completion = client.chat.completions.create(\n    #     model=\"qwen2-instruct\",\n    #     messages=messages,\n    #     extra_body={\n    #         \"guided_json\": schema,\n    #         \"guided_decoding_backend\": \"outlines\"\n    #     })\n    obj = {\n        \"messages\": [\n            {\"role\": \"system\", \"content\": \"you are a helpful assistant\"},\n            {\n                \"role\": \"user\",\n                \"content\": \"give me an example json, fill a random number\",\n            },\n        ],\n        \"model\": \"qwen2-instruct\",\n        \"guided_json\": {\n            \"properties\": {\n                \"test\": {\"title\": \"Test\", \"type\": \"string\"},\n                \"num\": {\"title\": \"Num\", \"type\": \"integer\"},\n            },\n            \"required\": [\"test\", \"num\"],\n            \"title\": \"TSchema\",\n            \"type\": \"object\",\n        },\n        \"guided_decoding_backend\": \"outlines\",\n    }\n    CreateChatCompletion.parse_obj(obj)\n\n\ndef test_create_message_with_tools():\n    \"\"\"Test CreateMessage type with tools and tool_choice\"\"\"\n    from ...types import CreateMessage\n\n    # Test message with tools\n    obj = {\n        \"model\": \"qwen2-instruct\",\n        \"messages\": [{\"role\": \"user\", \"content\": \"What's the weather like?\"}],\n        \"max_tokens\": 1000,\n        \"tools\": [\n            {\n                \"type\": \"function\",\n                \"function\": {\n                    \"name\": \"get_weather\",\n                    \"description\": \"Get weather information\",\n                    \"parameters\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"city\": {\"type\": \"string\", \"description\": \"City name\"}\n                        },\n                        \"required\": [\"city\"],\n                    },\n                },\n            }\n        ],\n        \"tool_choice\": {\"type\": \"auto\"},\n    }\n\n    # Should parse without error\n    message = CreateMessage.parse_obj(obj)\n    assert message.model == \"qwen2-instruct\"\n    assert len(message.messages) == 1\n    assert message.messages[0][\"role\"] == \"user\"\n    assert message.max_tokens == 1000\n    assert hasattr(message, \"tools\")\n    assert hasattr(message, \"tool_choice\")\n    assert len(message.tools) == 1\n    assert message.tools[0][\"function\"][\"name\"] == \"get_weather\"\n    assert message.tool_choice[\"type\"] == \"auto\"\n\n\ndef test_create_message_without_tools():\n    \"\"\"Test CreateMessage type without tools\"\"\"\n    from ...types import CreateMessage\n\n    # Test message without tools\n    obj = {\n        \"model\": \"qwen2-instruct\",\n        \"messages\": [{\"role\": \"user\", \"content\": \"Hello, Qwen!\"}],\n        \"max_tokens\": 1000,\n    }\n\n    # Should parse without error\n    message = CreateMessage.parse_obj(obj)\n    assert message.model == \"qwen2-instruct\"\n    assert len(message.messages) == 1\n    assert message.max_tokens == 1000\n    # tools and tool_choice should be None or not present\n    assert not hasattr(message, \"tools\") or not message.tools\n    assert not hasattr(message, \"tool_choice\") or not message.tool_choice\n\n\ndef test_create_message_with_tool_choice_function():\n    \"\"\"Test CreateMessage type with specific tool_choice function\"\"\"\n    from ...types import CreateMessage\n\n    obj = {\n        \"model\": \"qwen2-instruct\",\n        \"messages\": [{\"role\": \"user\", \"content\": \"Get weather for Beijing\"}],\n        \"max_tokens\": 1000,\n        \"tools\": [\n            {\n                \"type\": \"function\",\n                \"function\": {\n                    \"name\": \"get_weather\",\n                    \"description\": \"Get weather information\",\n                    \"parameters\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"city\": {\"type\": \"string\", \"description\": \"City name\"}\n                        },\n                        \"required\": [\"city\"],\n                    },\n                },\n            }\n        ],\n        \"tool_choice\": {\"type\": \"function\", \"function\": {\"name\": \"get_weather\"}},\n    }\n\n    message = CreateMessage.parse_obj(obj)\n    assert message.tool_choice[\"type\"] == \"function\"\n    assert message.tool_choice[\"function\"][\"name\"] == \"get_weather\"\n\n\ndef test_create_message_with_optional_fields():\n    \"\"\"Test CreateMessage type with optional fields\"\"\"\n    from ...types import CreateMessage\n\n    obj = {\n        \"model\": \"qwen2-instruct\",\n        \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n        \"max_tokens\": 1000,\n        \"temperature\": 0.7,\n        \"top_p\": 0.9,\n        \"top_k\": 50,\n        \"stop_sequences\": [\"\\n\\nHuman:\", \"\\n\\nAssistant:\"],\n        \"metadata\": {\"user_id\": \"12345\"},\n        \"tools\": [],\n        \"tool_choice\": {\"type\": \"none\"},\n    }\n\n    message = CreateMessage.parse_obj(obj)\n    assert message.temperature == 0.7\n    assert message.top_p == 0.9\n    assert message.top_k == 50\n    assert message.stop_sequences == [\"\\n\\nHuman:\", \"\\n\\nAssistant:\"]\n    assert message.metadata[\"user_id\"] == \"12345\"\n    assert message.tools == []\n    assert message.tool_choice[\"type\"] == \"none\"\n\n\ndef test_model_and_messages_type():\n    \"\"\"Test ModelAndMessages type\"\"\"\n    from ...types import ModelAndMessages\n\n    obj = {\n        \"model\": \"test-model\",\n        \"messages\": [\n            {\"role\": \"user\", \"content\": \"Hello!\"},\n            {\"role\": \"assistant\", \"content\": \"Hi there!\"},\n        ],\n    }\n\n    model_messages = ModelAndMessages.parse_obj(obj)\n    assert model_messages.model == \"test-model\"\n    assert len(model_messages.messages) == 2\n    assert model_messages.messages[0][\"role\"] == \"user\"\n    assert model_messages.messages[1][\"role\"] == \"assistant\"\n\n\ndef test_message_create_params_structure():\n    \"\"\"Test MessageCreateParams structure compatibility\"\"\"\n    # This test ensures the structure matches Anthropic API expectations\n    from ...types import CreateMessage\n\n    # Test minimal valid message\n    minimal_obj = {\n        \"model\": \"qwen2-instruct\",\n        \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}],\n        \"max_tokens\": 1000,\n    }\n\n    message = CreateMessage.parse_obj(minimal_obj)\n    assert message.model == \"qwen2-instruct\"\n    assert message.max_tokens == 1000\n\n    # Test with all optional fields\n    complete_obj = {\n        \"model\": \"qwen2-instruct\",\n        \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}],\n        \"max_tokens\": 1000,\n        \"stream\": False,\n        \"temperature\": 0.5,\n        \"top_p\": 0.8,\n        \"top_k\": 40,\n        \"stop_sequences\": [\"Human:\", \"Assistant:\"],\n        \"metadata\": {\"session_id\": \"abc123\"},\n        \"tools\": [\n            {\n                \"type\": \"function\",\n                \"function\": {\n                    \"name\": \"test_function\",\n                    \"description\": \"Test function\",\n                    \"parameters\": {\n                        \"type\": \"object\",\n                        \"properties\": {\"param\": {\"type\": \"string\"}},\n                        \"required\": [\"param\"],\n                    },\n                },\n            }\n        ],\n        \"tool_choice\": {\"type\": \"auto\"},\n    }\n\n    message = CreateMessage.parse_obj(complete_obj)\n    assert message.stream == False\n    assert message.metadata[\"session_id\"] == \"abc123\"\n    assert len(message.tools) == 1\n    assert message.tools[0][\"function\"][\"name\"] == \"test_function\"\n"
  },
  {
    "path": "xinference/core/tests/test_utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom ..utils import (\n    build_replica_model_uid,\n    build_subpool_envs_for_virtual_env,\n    iter_replica_model_uid,\n    parse_replica_model_uid,\n)\n\n\ndef test_replica_model_uid():\n    all_gen_ids = []\n    for replica_model_uid in iter_replica_model_uid(\"abc\", 5):\n        rebuild_replica_model_uid = build_replica_model_uid(\n            *parse_replica_model_uid(replica_model_uid)\n        )\n        assert rebuild_replica_model_uid == replica_model_uid\n        all_gen_ids.append(replica_model_uid)\n    assert len(all_gen_ids) == 5\n    assert len(set(all_gen_ids)) == 5\n\n\nclass DummyVirtualEnvManager:\n    def __init__(self, python_path: str):\n        self._python_path = python_path\n\n    def get_python_path(self) -> str:\n        return self._python_path\n\n\ndef test_build_subpool_envs_for_virtual_env_disabled():\n    base_envs = {\"PATH\": \"/usr/bin\", \"FLASHINFER_NINJA_PATH\": \"/custom/ninja\"}\n    result = build_subpool_envs_for_virtual_env(base_envs, False, None)\n\n    assert result == base_envs\n    assert result is not base_envs\n\n\ndef test_build_subpool_envs_for_virtual_env_enabled():\n    manager = DummyVirtualEnvManager(\"/venv/bin/python\")\n    base_envs = {\"PATH\": \"/usr/bin\", \"FLASHINFER_NINJA_PATH\": \"/custom/ninja\"}\n\n    result = build_subpool_envs_for_virtual_env(base_envs, True, manager)\n\n    import os\n\n    assert result[\"PATH\"] == \"/venv/bin\" + os.pathsep + \"/usr/bin\"\n    assert result[\"VIRTUAL_ENV\"] == \"/venv\"\n    assert result[\"FLASHINFER_NINJA_PATH\"] == \"/custom/ninja\"\n    assert result is not base_envs\n"
  },
  {
    "path": "xinference/core/tests/test_worker.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import List, Optional, Union\n\nimport pytest\nimport pytest_asyncio\nimport xoscar as xo\nfrom xoscar import MainActorPoolType, create_actor_pool, get_pool_config\n\nfrom ...model.core import VirtualEnvSettings\nfrom ..utils import merge_virtual_env_packages\nfrom ..worker import WorkerActor\n\n\nclass MockWorkerActor(WorkerActor):\n    def __init__(\n        self,\n        supervisor_address: str,\n        main_pool: MainActorPoolType,\n        cuda_devices: List[int],\n    ):\n        super().__init__(supervisor_address, main_pool, cuda_devices)\n\n    async def __post_create__(self):\n        pass\n\n    async def __pre_destroy__(self):\n        pass\n\n    def get_gpu_to_model_uid(self):\n        return self._gpu_to_model_uids\n\n    def get_user_specified_gpu_to_model_uids(self):\n        return self._user_specified_gpu_to_model_uids\n\n    def set_allow_multi_replica_per_gpu(self, allow: bool):\n        self._allow_multi_replica_per_gpu = allow\n\n    async def is_model_vllm_backend(self, model_uid):\n        if model_uid.startswith(\"embedding\") or model_uid.startswith(\"rerank\"):\n            return False\n        if model_uid.startswith(\"normal_\"):\n            return False\n        if model_uid.startswith(\"vllm_\"):\n            return True\n        for _dev, model_uids in self._gpu_to_model_uids.items():\n            if model_uid in model_uids:\n                return True\n        return False\n\n    async def launch_builtin_model(\n        self,\n        model_uid: str,\n        model_name: str,\n        model_size_in_billions: Optional[int],\n        model_format: Optional[str],\n        quantization: Optional[str],\n        model_type: str = \"LLM\",\n        n_gpu: Optional[int] = None,\n        gpu_idx: Optional[Union[int, List[int]]] = None,\n        **kwargs,\n    ):\n        subpool_address, devices = await self._create_subpool(\n            model_uid, model_type, n_gpu=n_gpu, gpu_idx=gpu_idx  # type: ignore\n        )\n        self._model_uid_to_addr[model_uid] = subpool_address\n\n    async def terminate_model(self, model_uid: str):\n        self.release_devices(model_uid)\n\n        sub_pool_addr = self._model_uid_to_addr[model_uid]\n        await self._main_pool.remove_sub_pool(sub_pool_addr)\n        del self._model_uid_to_addr[model_uid]\n\n\n@pytest_asyncio.fixture\nasync def setup_pool():\n    pool = await create_actor_pool(\n        f\"test://127.0.0.1:{xo.utils.get_next_port()}\", n_process=0\n    )\n    async with pool:\n        yield pool\n\n\n@pytest.mark.asyncio\nasync def test_allocate_cuda_devices(setup_pool):\n    pool = setup_pool\n    addr = pool.external_address\n\n    worker: xo.ActorRefType[\"MockWorkerActor\"] = await xo.create_actor(  # type: ignore\n        MockWorkerActor,\n        address=addr,\n        uid=WorkerActor.default_uid(),\n        supervisor_address=\"test\",\n        main_pool=pool,\n        cuda_devices=[i for i in range(8)],\n    )\n\n    devices = await worker.allocate_devices(model_uid=\"mock_model_1\", n_gpu=1)\n    assert devices == [0]\n\n    devices = await worker.allocate_devices(model_uid=\"mock_model_2\", n_gpu=4)\n    assert devices == [1, 2, 3, 4]\n\n    devices = await worker.allocate_devices(model_uid=\"mock_model_3\", n_gpu=3)\n    assert devices == [5, 6, 7]\n\n    devices = await worker.allocate_devices(model_uid=\"mock_model_4\", n_gpu=5)\n    assert devices == [0, 1, 2, 3, 4]\n\n\n@pytest.mark.asyncio\nasync def test_terminate_model_flag(setup_pool):\n    pool = setup_pool\n    addr = pool.external_address\n\n    worker: xo.ActorRefType[\"MockWorkerActor\"] = await xo.create_actor(  # type: ignore\n        MockWorkerActor,\n        address=addr,\n        uid=WorkerActor.default_uid(),\n        supervisor_address=\"test\",\n        main_pool=pool,\n        cuda_devices=[i for i in range(8)],\n    )\n\n    await worker.launch_builtin_model(\n        \"model_model_1\", \"mock_model_name\", None, None, None, n_gpu=1\n    )\n\n    await worker.launch_builtin_model(\n        \"model_model_2\", \"mock_model_name\", None, None, None, n_gpu=4\n    )\n\n    devices = await worker.allocate_devices(model_uid=\"model_model_3\", n_gpu=3)\n    assert devices == [5, 6, 7]\n    await worker.release_devices(model_uid=\"model_model_3\")\n\n    await worker.launch_builtin_model(\n        \"model_model_3\", \"mock_model_name\", None, None, None, n_gpu=3\n    )\n\n    with pytest.raises(KeyError):\n        await worker.terminate_model(\"model_model_4\")\n\n    pool_config = (await get_pool_config(addr)).as_dict()\n    assert len(pool_config[\"pools\"]) == 4  # A main pool and 3 sub pools.\n\n    await worker.terminate_model(\"model_model_2\")\n    pool_config = (await get_pool_config(addr)).as_dict()\n    assert len(pool_config[\"pools\"]) == 3  # A main pool and 2 sub pools.\n\n    gpu_to_model_id = await worker.get_gpu_to_model_uid()\n    for dev in devices:\n        assert \"model_model_3\" in gpu_to_model_id[dev]\n    await worker.terminate_model(\"model_model_3\")\n\n    gpu_to_model_id = await worker.get_gpu_to_model_uid()\n    for dev in devices:\n        assert dev not in gpu_to_model_id\n\n\ndef test_merge_virtual_env_packages_override_and_append():\n    base_packages = [\n        \"transformers @ git+https://github.com/huggingface/transformers@abcdef\",\n        \"accelerate>=0.34.2\",\n        \"#system_numpy#\",\n    ]\n    extra_packages = [\"transformers==5.0.0.dev0\", \"numpy==2.1.0\"]\n\n    merged = merge_virtual_env_packages(base_packages, extra_packages)\n\n    assert merged == [\n        \"transformers==5.0.0.dev0\",  # user-specified overrides default\n        \"accelerate>=0.34.2\",\n        \"#system_numpy#\",\n        \"numpy==2.1.0\",\n    ]\n\n\nclass DummyVirtualEnvManager:\n    def __init__(self):\n        self.env_path = \"/tmp/fake-virtualenv\"\n        self.calls = []\n\n    def install_packages(self, packages, **kwargs):\n        self.calls.append((packages, kwargs))\n\n\ndef test_prepare_virtual_env_injects_engine_vars():\n    manager = DummyVirtualEnvManager()\n    settings = VirtualEnvSettings(packages=[\"pkgA==1.0.0\"], inherit_pip_config=False)\n    WorkerActor._prepare_virtual_env(\n        manager,\n        settings,\n        [\"pkgB==2.0.0\"],\n        model_engine=\"vllm\",\n    )\n\n    assert len(manager.calls) == 1\n    packages, kwargs = manager.calls[0]\n    assert packages == [\"pkgA==1.0.0\", \"pkgB==2.0.0\"]\n    assert kwargs[\"engine\"] == \"vllm\"\n    assert kwargs[\"model_engine\"] == \"vllm\"\n\n\ndef test_prepare_virtual_env_without_engine_vars():\n    manager = DummyVirtualEnvManager()\n    settings = VirtualEnvSettings(packages=[\"pkgA==1.0.0\"], inherit_pip_config=False)\n    WorkerActor._prepare_virtual_env(\n        manager,\n        settings,\n        [\"pkgB==2.0.0\"],\n        model_engine=None,\n    )\n\n    assert len(manager.calls) == 1\n    _, kwargs = manager.calls[0]\n    assert \"engine\" not in kwargs\n    assert \"model_engine\" not in kwargs\n\n\ndef test_prepare_virtual_env_inherit_pip_config(monkeypatch):\n    manager = DummyVirtualEnvManager()\n    settings = VirtualEnvSettings(packages=[\"pkgA==1.0.0\"], inherit_pip_config=True)\n\n    monkeypatch.setattr(\n        \"xinference.core.worker.get_pip_config_args\",\n        lambda: {\"index_url\": \"https://example.invalid/simple\"},\n    )\n\n    WorkerActor._prepare_virtual_env(\n        manager,\n        settings,\n        None,\n        model_engine=\"mlx\",\n    )\n\n    assert len(manager.calls) == 1\n    _, kwargs = manager.calls[0]\n    assert kwargs[\"index_url\"] == \"https://example.invalid/simple\"\n\n\ndef test_prepare_virtual_env_keeps_system_markers():\n    manager = DummyVirtualEnvManager()\n    settings = VirtualEnvSettings(\n        packages=[\"pkgA==1.0.0\", \"#system_torch#\", \"#system_numpy#\"],\n        inherit_pip_config=False,\n    )\n\n    WorkerActor._prepare_virtual_env(\n        manager,\n        settings,\n        [\"pkgB==2.0.0\", \"#system_torchaudio#\"],\n        model_engine=None,\n    )\n\n    assert len(manager.calls) == 1\n    packages, _ = manager.calls[0]\n    assert packages == [\n        \"pkgA==1.0.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\",\n        \"pkgB==2.0.0\",\n        \"#system_torchaudio#\",\n    ]\n\n\n@pytest.mark.asyncio\nasync def test_launch_embedding_model(setup_pool):\n    pool = setup_pool\n    addr = pool.external_address\n\n    worker: xo.ActorRefType[\"MockWorkerActor\"] = await xo.create_actor(  # type: ignore\n        MockWorkerActor,\n        address=addr,\n        uid=WorkerActor.default_uid(),\n        supervisor_address=\"test\",\n        main_pool=pool,\n        cuda_devices=[i for i in range(4)],\n    )\n\n    # test embedding device candidates 1\n    await worker.launch_builtin_model(\n        \"model_model_1\", \"mock_model_name\", None, None, None, n_gpu=3\n    )\n    gpu_to_model_id = await worker.get_gpu_to_model_uid()\n    assert len(gpu_to_model_id) == 3\n\n    await worker.launch_builtin_model(\n        \"model_model_2\", \"mock_model_name\", None, None, None, \"embedding\", n_gpu=1\n    )\n\n    gpu_to_model_id = await worker.get_gpu_to_model_uid()\n    assert \"model_model_2\" in gpu_to_model_id[3]\n\n    # test terminate LLM model, then launch embedding model\n    await worker.terminate_model(\"model_model_1\")\n    await worker.launch_builtin_model(\n        \"model_model_3\", \"mock_model_name\", None, None, None, \"embedding\", n_gpu=1\n    )\n    gpu_to_model_id = await worker.get_gpu_to_model_uid()\n    assert \"model_model_3\" in gpu_to_model_id[0]\n\n    await worker.terminate_model(\"model_model_2\")\n    await worker.terminate_model(\"model_model_3\")\n    gpu_to_model_id = await worker.get_gpu_to_model_uid()\n    assert 0 not in gpu_to_model_id\n    assert 3 not in gpu_to_model_id\n\n    # test embedding device candidates 2\n    await worker.launch_builtin_model(\n        \"model_model_1\", \"mock_model_name\", None, None, None, n_gpu=2\n    )\n\n    await worker.launch_builtin_model(\n        \"model_model_2\", \"mock_model_name\", None, None, None, \"embedding\", n_gpu=1\n    )\n\n    await worker.launch_builtin_model(\n        \"model_model_3\", \"mock_model_name\", None, None, None, \"embedding\", n_gpu=1\n    )\n    gpu_to_model_id = await worker.get_gpu_to_model_uid()\n    assert \"model_model_2\" in gpu_to_model_id[2]\n    assert \"model_model_3\" in gpu_to_model_id[3]\n\n    await worker.launch_builtin_model(\n        \"model_model_4\", \"mock_model_name\", None, None, None, \"embedding\", n_gpu=1\n    )\n    gpu_to_model_id = await worker.get_gpu_to_model_uid()\n    assert \"model_model_4\" in gpu_to_model_id[0]\n\n    for i in range(1, 5):\n        await worker.terminate_model(f\"model_model_{i}\")\n    gpu_to_model_id = await worker.get_gpu_to_model_uid()\n    assert len(gpu_to_model_id) == 0\n\n\n@pytest.mark.asyncio\nasync def test_launch_model_with_gpu_idx(setup_pool):\n    pool = setup_pool\n    addr = pool.external_address\n\n    worker: xo.ActorRefType[\"MockWorkerActor\"] = await xo.create_actor(  # type: ignore\n        MockWorkerActor,\n        address=addr,\n        uid=WorkerActor.default_uid(),\n        supervisor_address=\"test\",\n        main_pool=pool,\n        cuda_devices=[i for i in range(4)],\n    )\n    assert (await xo.actor_ref(addr, WorkerActor.default_uid())).uid == b\"worker\"\n\n    # test normal model\n    await worker.launch_builtin_model(\n        \"normal_model_model_1\", \"mock_model_name\", None, None, None, \"LLM\", n_gpu=1\n    )\n    llm_info = await worker.get_gpu_to_model_uid()\n    assert len(llm_info) == 1\n    assert 0 in llm_info\n\n    await worker.launch_builtin_model(\n        \"model_model_2\", \"mock_model_name\", None, None, None, \"LLM\", gpu_idx=[0]\n    )\n    llm_info = await worker.get_gpu_to_model_uid()\n    assert len(llm_info) == 1\n    assert 0 in llm_info\n\n    user_specified_info = await worker.get_user_specified_gpu_to_model_uids()\n    assert len(user_specified_info) == 1\n    assert 0 in user_specified_info\n    assert len(user_specified_info[0]) == 1\n    assert list(user_specified_info[0])[0][0] == \"model_model_2\"\n    assert list(user_specified_info[0])[0][1] == \"LLM\"\n\n    # test vllm model\n    await worker.launch_builtin_model(\n        \"vllm_model_model_3\", \"mock_model_name\", None, None, None, \"LLM\", n_gpu=1\n    )\n    llm_info = await worker.get_gpu_to_model_uid()\n    assert len(llm_info) == 2\n    assert 0 in llm_info\n    assert 1 in llm_info\n\n    # Force single-replica mode to verify conflict handling on occupied GPU.\n    await worker.set_allow_multi_replica_per_gpu(False)\n    with pytest.raises(RuntimeError):\n        await worker.launch_builtin_model(\n            \"model_model_4\", \"mock_model_name\", None, None, None, \"LLM\", gpu_idx=[1]\n        )\n    await worker.set_allow_multi_replica_per_gpu(True)\n\n    await worker.launch_builtin_model(\n        \"model_model_4\", \"mock_model_name\", None, None, None, \"LLM\", gpu_idx=[2]\n    )\n    llm_info = await worker.get_gpu_to_model_uid()\n    assert len(llm_info) == 2\n    assert 0 in llm_info\n    assert 1 in llm_info\n\n    user_specified_info = await worker.get_user_specified_gpu_to_model_uids()\n    assert len(user_specified_info) == 2\n    assert 0 in user_specified_info\n    assert 2 in user_specified_info\n    assert len(user_specified_info[2]) == 1\n    assert list(user_specified_info[2])[0][0] == \"model_model_4\"\n    assert list(user_specified_info[2])[0][1] == \"LLM\"\n\n    # then launch a LLM without gpu_idx\n    await worker.launch_builtin_model(\n        \"normal_model_model_5\", \"mock_model_name\", None, None, None, \"LLM\", n_gpu=1\n    )\n    llm_info = await worker.get_gpu_to_model_uid()\n    assert len(llm_info) == 3\n    assert 0 in llm_info\n    assert 1 in llm_info\n    assert 3 in llm_info\n\n    # launch without gpu_idx again, should reuse the least loaded GPU\n    await worker.launch_builtin_model(\n        \"normal_model_model_6\", \"mock_model_name\", None, None, None, \"LLM\", n_gpu=1\n    )\n    llm_info = await worker.get_gpu_to_model_uid()\n    assert len(llm_info) == 4\n\n    #  test terminate and cleanup\n    await worker.terminate_model(\"normal_model_model_1\")\n    await worker.terminate_model(\"model_model_2\")\n    await worker.terminate_model(\"vllm_model_model_3\")\n    await worker.terminate_model(\"model_model_4\")\n    await worker.terminate_model(\"normal_model_model_5\")\n    await worker.terminate_model(\"normal_model_model_6\")\n\n    llm_info = await worker.get_gpu_to_model_uid()\n    assert len(llm_info) == 0\n\n    user_specified_info = await worker.get_user_specified_gpu_to_model_uids()\n    for idx, model_infos in user_specified_info.items():\n        assert len(model_infos) == 0\n\n    # next, test with embedding models\n    await worker.launch_builtin_model(\n        \"embedding_1\", \"mock_model_name\", None, None, None, \"embedding\", n_gpu=1\n    )\n    llm_info = await worker.get_gpu_to_model_uid()\n    assert len(llm_info) == 1\n    assert 0 in llm_info\n\n    await worker.launch_builtin_model(\n        \"vllm_mock_model_2\", \"mock_model_name\", None, None, None, \"LLM\", gpu_idx=[0]\n    )\n    llm_info = await worker.get_gpu_to_model_uid()\n    assert len(llm_info) == 1\n    assert 0 in llm_info\n\n    user_specified_info = await worker.get_user_specified_gpu_to_model_uids()\n    assert len(user_specified_info[0]) == 1\n    assert list(user_specified_info[0])[0][0] == \"vllm_mock_model_2\"\n    assert list(user_specified_info[0])[0][1] == \"LLM\"\n\n    # launch should reuse all GPUs starting from the least loaded ones\n    await worker.launch_builtin_model(\n        \"normal_mock_model_3\", \"mock_model_name\", None, None, None, \"LLM\", n_gpu=4\n    )\n\n    await worker.launch_builtin_model(\n        \"embedding_3\", \"mock_model_name\", None, None, None, \"embedding\", n_gpu=1\n    )\n    await worker.launch_builtin_model(\n        \"rerank_4\", \"mock_model_name\", None, None, None, \"rerank\", gpu_idx=[0]\n    )\n    await worker.launch_builtin_model(\n        \"embedding_5\", \"mock_model_name\", None, None, None, \"embedding\", n_gpu=1\n    )\n    await worker.launch_builtin_model(\n        \"rerank_6\", \"mock_model_name\", None, None, None, \"rerank\", n_gpu=1\n    )\n    await worker.launch_builtin_model(\n        \"rerank_7\", \"mock_model_name\", None, None, None, \"rerank\", n_gpu=1\n    )\n    user_specified_info = await worker.get_user_specified_gpu_to_model_uids()\n    llm_info = await worker.get_gpu_to_model_uid()\n    all_models = set().union(*llm_info.values())\n    assert {\n        \"embedding_1\",\n        \"embedding_3\",\n        \"embedding_5\",\n        \"rerank_6\",\n        \"rerank_7\",\n    } <= all_models\n    # GPU0 has user-specified vLLM plus rerank_4, so two entries expected there\n    assert len(user_specified_info[0]) == 2\n\n    # cleanup\n    await worker.terminate_model(\"embedding_1\")\n    await worker.terminate_model(\"vllm_mock_model_2\")\n    await worker.terminate_model(\"normal_mock_model_3\")\n    await worker.terminate_model(\"embedding_3\")\n    await worker.terminate_model(\"rerank_4\")\n    await worker.terminate_model(\"embedding_5\")\n    await worker.terminate_model(\"rerank_6\")\n    await worker.terminate_model(\"rerank_7\")\n\n    user_specified_info = await worker.get_user_specified_gpu_to_model_uids()\n    llm_info = await worker.get_gpu_to_model_uid()\n    for info in [llm_info, user_specified_info]:\n        for dev, details in info.items():\n            assert len(details) == 0\n"
  },
  {
    "path": "xinference/core/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport asyncio\nimport logging\nimport os\nimport platform\nimport random\nimport string\nimport uuid\nimport weakref\nfrom enum import Enum\nfrom typing import Any, Dict, Generator, List, Optional, Tuple, Union\n\nimport orjson\nfrom packaging.requirements import Requirement\n\nfrom .._compat import BaseModel\nfrom ..constants import (\n    XINFERENCE_DEFAULT_CANCEL_BLOCK_DURATION,\n    XINFERENCE_LOG_ARG_MAX_LENGTH,\n)\n\nlogger = logging.getLogger(__name__)\n\n\nclass AbortRequestMessage(Enum):\n    NOT_FOUND = 1\n    DONE = 2\n    NO_OP = 3\n\n\ndef truncate_log_arg(arg) -> str:\n    s = str(arg)\n    if len(s) > XINFERENCE_LOG_ARG_MAX_LENGTH:\n        s = s[0:XINFERENCE_LOG_ARG_MAX_LENGTH] + \"...\"\n    return s\n\n\ndef log_async(\n    logger,\n    level=logging.DEBUG,\n    ignore_kwargs: Optional[List[str]] = None,\n    log_exception=True,\n):\n    import time\n    from functools import wraps\n    from inspect import signature\n\n    def decorator(func):\n        func_name = func.__name__\n        sig = signature(func)\n\n        @wraps(func)\n        async def wrapped(*args, **kwargs):\n            request_id_str = kwargs.get(\"request_id\")\n            if not request_id_str:\n                # sometimes `request_id` not in kwargs\n                # we try to bind the arguments\n                try:\n                    bound_args = sig.bind_partial(*args, **kwargs)\n                    arguments = bound_args.arguments\n                except TypeError:\n                    arguments = {}\n                request_id_str = arguments.get(\"request_id\", \"\")\n            if not request_id_str:\n                request_id_str = uuid.uuid1()\n                if func_name == \"text_to_image\":\n                    kwargs[\"request_id\"] = request_id_str\n            request_id_str = f\"[request {request_id_str}]\"\n            formatted_args = \",\".join(map(truncate_log_arg, args))\n            formatted_kwargs = \",\".join(\n                [\n                    \"%s=%s\" % (k, truncate_log_arg(v))\n                    for k, v in kwargs.items()\n                    if ignore_kwargs is None or k not in ignore_kwargs\n                ]\n            )\n            logger.log(\n                level,\n                f\"{request_id_str} Enter {func_name}, args: {formatted_args}, kwargs: {formatted_kwargs}\",\n            )\n            start = time.time()\n            try:\n                ret = await func(*args, **kwargs)\n                logger.log(\n                    level,\n                    f\"{request_id_str} Leave {func_name}, elapsed time: {int(time.time() - start)} s\",\n                )\n                return ret\n            except Exception as e:\n                if log_exception:\n                    logger.error(\n                        f\"{request_id_str} Leave {func_name}, error: {e}, elapsed time: {int(time.time() - start)} s\",\n                        exc_info=True,\n                    )\n                else:\n                    logger.log(\n                        level,\n                        f\"{request_id_str} Leave {func_name}, error: {e}, elapsed time: {int(time.time() - start)} s\",\n                    )\n                raise\n\n        return wrapped\n\n    return decorator\n\n\ndef log_sync(logger, level=logging.DEBUG, log_exception=True):\n    import time\n    from functools import wraps\n\n    def decorator(func):\n        @wraps(func)\n        def wrapped(*args, **kwargs):\n            formatted_args = \",\".join(map(truncate_log_arg, args))\n            formatted_kwargs = \",\".join(\n                map(lambda x: \"%s=%s\" % (x[0], truncate_log_arg(x[1])), kwargs.items())\n            )\n            logger.log(\n                level,\n                f\"Enter {func.__name__}, args: {formatted_args}, kwargs: {formatted_kwargs}\",\n            )\n            start = time.time()\n            try:\n                ret = func(*args, **kwargs)\n                logger.log(\n                    level,\n                    f\"Leave {func.__name__}, elapsed time: {int(time.time() - start)} s\",\n                )\n                return ret\n            except Exception as e:\n                if log_exception:\n                    logger.error(\n                        f\"Leave {func.__name__}, error: {e}, elapsed time: {int(time.time() - start)} s\",\n                        exc_info=True,\n                    )\n                else:\n                    logger.log(\n                        level,\n                        f\"Leave {func.__name__}, error: {e}, elapsed time: {int(time.time() - start)} s\",\n                    )\n                raise\n\n        return wrapped\n\n    return decorator\n\n\ndef iter_replica_model_uid(model_uid: str, replica: int) -> Generator[str, None, None]:\n    \"\"\"\n    Generates all the replica model uids.\n    \"\"\"\n    replica = int(replica)\n    for rep_id in range(replica):\n        yield f\"{model_uid}-{rep_id}\"\n\n\ndef build_replica_model_uid(model_uid: str, rep_id: int) -> str:\n    \"\"\"\n    Build a replica model uid.\n    \"\"\"\n    return f\"{model_uid}-{rep_id}\"\n\n\ndef parse_replica_model_uid(replica_model_uid: str) -> Tuple[str, int]:\n    \"\"\"\n    Parse replica model uid to model uid and rep id.\n    \"\"\"\n    parts = replica_model_uid.split(\"-\")\n    if len(parts) == 1:\n        return replica_model_uid, -1\n    rep_id = int(parts.pop())\n    model_uid = \"-\".join(parts)\n    return model_uid, rep_id\n\n\ndef is_valid_model_uid(model_uid: str) -> bool:\n    model_uid = model_uid.strip()\n    if not model_uid or len(model_uid) > 100:\n        return False\n    return True\n\n\ndef gen_random_string(length: int) -> str:\n    return \"\".join(random.sample(string.ascii_letters + string.digits, length))\n\n\ndef json_dumps(o):\n    def _default(obj):\n        if isinstance(obj, BaseModel):\n            return obj.dict()\n        raise TypeError\n\n    return orjson.dumps(o, default=_default)\n\n\ndef purge_dir(d):\n    if not os.path.exists(d) or not os.path.isdir(d):\n        return\n    for name in os.listdir(d):\n        subdir = os.path.join(d, name)\n        try:\n            if (os.path.islink(subdir) and not os.path.exists(subdir)) or (\n                len(os.listdir(subdir)) == 0\n            ):\n                logger.info(\"Remove empty directory: %s\", subdir)\n                os.rmdir(subdir)\n        except Exception:\n            pass\n\n\ndef parse_model_version(model_version: str, model_type: str) -> Tuple:\n    results: List[str] = model_version.split(\"--\")\n    if model_type == \"LLM\":\n        if len(results) != 4:\n            raise ValueError(\n                f\"LLM model_version parses failed! model_version: {model_version}\"\n            )\n        model_name = results[0]\n        size = results[1]\n        if not size.endswith(\"B\"):\n            raise ValueError(f\"Cannot parse model_size_in_billions: {size}\")\n        size = size.rstrip(\"B\")\n        size_in_billions: Union[int, str] = size if \"_\" in size else int(size)\n        model_format = results[2]\n        quantization = results[3]\n        return model_name, size_in_billions, model_format, quantization\n    elif model_type == \"embedding\":\n        assert len(results) > 0, \"Embedding model_version parses failed!\"\n        return (results[0],)\n    elif model_type == \"rerank\":\n        assert len(results) > 0, \"Rerank model_version parses failed!\"\n        return (results[0],)\n    elif model_type == \"image\":\n        assert 2 >= len(results) >= 1, \"Image model_version parses failed!\"\n        return tuple(results)\n    else:\n        raise ValueError(f\"Not supported model_type: {model_type}\")\n\n\ndef merge_virtual_env_packages(\n    base_packages: List[str], extra_packages: Optional[List[str]]\n) -> List[str]:\n    \"\"\"\n    Merge default virtualenv packages with user provided ones. Packages with the\n    same name will be replaced by the user supplied version instead of appended.\n    \"\"\"\n\n    def get_key(package: str) -> str:\n        if package.startswith(\"#\"):\n            # special placeholders like #system_torch#\n            return package\n        try:\n            return Requirement(package).name.lower()\n        except Exception:\n            # fallback: strip version/url markers best effort\n            for sep in [\"@\", \"==\", \">=\", \"<=\", \"~=\", \"!=\", \"[\", \" \"]:\n                if sep in package:\n                    return package.split(sep, 1)[0].strip().lower()\n            return package.lower()\n\n    merged: List[str] = []\n    index_map: Dict[str, int] = {}\n    for pkg in base_packages:\n        key = get_key(pkg)\n        if key in index_map:\n            merged[index_map[key]] = pkg\n        else:\n            index_map[key] = len(merged)\n            merged.append(pkg)\n\n    if extra_packages:\n        for pkg in extra_packages:\n            key = get_key(pkg)\n            if key in index_map:\n                merged[index_map[key]] = pkg\n            else:\n                index_map[key] = len(merged)\n                merged.append(pkg)\n\n    return merged\n\n\ndef build_subpool_envs_for_virtual_env(\n    envs: Optional[Dict[str, str]],\n    enable_virtual_env: Optional[bool],\n    virtual_env_manager: Any,\n) -> Dict[str, str]:\n    subpool_envs = {} if envs is None else envs.copy()\n    if bool(enable_virtual_env) and virtual_env_manager is not None:\n        from .virtual_env_manager import resolve_virtualenv_python_path\n\n        venv_python = resolve_virtualenv_python_path(virtual_env_manager)\n        if not venv_python:\n            return subpool_envs\n        venv_bin = os.path.dirname(venv_python)\n        venv_path = os.path.dirname(venv_bin)\n        current_path = subpool_envs.get(\"PATH\") or os.environ.get(\"PATH\", \"\")\n        subpool_envs[\"PATH\"] = os.pathsep.join([venv_bin, current_path or \"\"])\n        subpool_envs[\"VIRTUAL_ENV\"] = venv_path\n        subpool_envs.setdefault(\n            \"FLASHINFER_NINJA_PATH\", os.path.join(venv_bin, \"ninja\")\n        )\n    return subpool_envs\n\n\ndef apply_engine_virtualenv_settings(\n    settings: Any,\n    model_engine: Optional[str],\n) -> None:\n    \"\"\"\n    Apply engine-specific virtualenv settings (extra indexes, strategies).\n    \"\"\"\n    if not model_engine:\n        return\n    from .virtual_env_manager import (\n        get_engine_virtualenv_extra_index_urls,\n        get_engine_virtualenv_index_strategy,\n    )\n\n    engine_extra_index_urls = get_engine_virtualenv_extra_index_urls(model_engine)\n    engine_index_strategy = get_engine_virtualenv_index_strategy(model_engine)\n    if settings.extra_index_url is None and engine_extra_index_urls:\n        settings.extra_index_url = engine_extra_index_urls\n    if settings.index_strategy is None and engine_index_strategy:\n        settings.index_strategy = engine_index_strategy\n\n\ndef filter_virtualenv_packages_by_markers(\n    packages: List[str],\n    model_engine: Optional[str],\n    cuda_version: Optional[str],\n) -> List[str]:\n    \"\"\"\n    Filter virtualenv packages using custom markers and system placeholders.\n\n    This keeps #system_*# entries intact while evaluating engine/cuda/platform\n    markers for other packages.\n    \"\"\"\n    if not packages:\n        return []\n    system_markers = {\n        \"#system_torch#\",\n        \"#system_torchaudio#\",\n        \"#system_torchvision#\",\n        \"#system_torchcodec#\",\n        \"#system_numpy#\",\n    }\n\n    def _marker_allows(marker: str) -> bool:\n        marker = marker.strip().lower()\n        if \"#engine#\" in marker or \"#model_engine#\" in marker:\n            if not model_engine:\n                return False\n            engine_value = model_engine.lower()\n            if (\n                f'#engine# == \"{engine_value}\"' not in marker\n                and f'#model_engine# == \"{engine_value}\"' not in marker\n                and f\"#model_engine# == '{engine_value}'\" not in marker\n            ):\n                return False\n        if 'cuda_version == \"13.0\"' in marker and cuda_version != \"13.0\":\n            return False\n        if 'cuda_version < \"13.0\"' in marker:\n            if not cuda_version or cuda_version == \"13.0\":\n                return False\n        if (\n            'platform_machine == \"x86_64\"' in marker\n            and platform.machine().lower() != \"x86_64\"\n        ):\n            return False\n        if (\n            'platform_machine == \"aarch64\"' in marker\n            and platform.machine().lower() != \"aarch64\"\n        ):\n            return False\n        return True\n\n    def _has_custom_marker(marker: str) -> bool:\n        marker = marker.lower()\n        return (\n            \"#engine#\" in marker\n            or \"#model_engine#\" in marker\n            or \"cuda_version\" in marker\n        )\n\n    resolved_packages: List[str] = []\n    for pkg in packages:\n        if \";\" in pkg:\n            req, marker = pkg.split(\";\", 1)\n            req = req.strip()\n            marker = marker.strip()\n            if req in system_markers:\n                if _has_custom_marker(marker):\n                    if _marker_allows(marker):\n                        resolved_packages.append(req)\n                    continue\n                resolved_packages.append(pkg)\n                continue\n            if _has_custom_marker(marker):\n                if _marker_allows(marker):\n                    resolved_packages.append(req)\n                continue\n        resolved_packages.append(pkg)\n    return resolved_packages\n\n\ndef assign_replica_gpu(\n    _replica_model_uid: str, replica: int, gpu_idx: Optional[Union[int, List[int]]]\n) -> Optional[List[int]]:\n    model_uid, rep_id = parse_replica_model_uid(_replica_model_uid)\n    rep_id, replica = int(rep_id), int(replica)\n    if isinstance(gpu_idx, int):\n        gpu_idx = [gpu_idx]\n    if isinstance(gpu_idx, list) and gpu_idx:\n        if len(gpu_idx) % replica != 0:\n            raise ValueError(\n                \"gpu_idx length must be a multiple of replica when specifying GPUs.\"\n            )\n        num_gpus = len(gpu_idx)\n        gpus_per_replica = num_gpus // replica\n        start = rep_id * gpus_per_replica\n        end = start + gpus_per_replica\n        return gpu_idx[start:end]\n    return gpu_idx\n\n\nclass CancelMixin:\n    _CANCEL_TASK_NAME = \"abort_block\"\n\n    def __init__(self):\n        self._running_tasks: weakref.WeakValueDictionary[  # type: ignore\n            str, asyncio.Task\n        ] = weakref.WeakValueDictionary()\n\n    def _add_running_task(self, request_id: Optional[str]):\n        \"\"\"Add current asyncio task to the running task.\n        :param request_id: The corresponding request id.\n        \"\"\"\n        if request_id is None:\n            return\n        running_task = self._running_tasks.get(request_id)\n        if running_task is not None:\n            if running_task.get_name() == self._CANCEL_TASK_NAME:\n                raise Exception(f\"The request has been aborted: {request_id}\")\n            raise Exception(f\"Duplicate request id: {request_id}\")\n        current_task = asyncio.current_task()\n        assert current_task is not None\n        self._running_tasks[request_id] = current_task\n\n    def _cancel_running_task(\n        self,\n        request_id: Optional[str],\n        block_duration: int = XINFERENCE_DEFAULT_CANCEL_BLOCK_DURATION,\n    ):\n        \"\"\"Cancel the running asyncio task.\n        :param request_id: The request id to cancel.\n        :param block_duration: The duration seconds to ensure the request can't be executed.\n        \"\"\"\n        if request_id is None:\n            return\n        running_task = self._running_tasks.pop(request_id, None)\n        if running_task is not None:\n            running_task.cancel()\n\n        async def block_task():\n            \"\"\"This task is for blocking the request for a duration.\"\"\"\n            try:\n                await asyncio.sleep(block_duration)\n                logger.info(\"Abort block end for request: %s\", request_id)\n            except asyncio.CancelledError:\n                logger.info(\"Abort block is cancelled for request: %s\", request_id)\n\n        if block_duration > 0:\n            logger.info(\"Abort block start for request: %s\", request_id)\n            self._running_tasks[request_id] = asyncio.create_task(\n                block_task(), name=self._CANCEL_TASK_NAME\n            )\n"
  },
  {
    "path": "xinference/core/virtual_env_manager.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport os\nimport shutil\nimport subprocess\nfrom typing import Any, Dict, List, Optional\n\nfrom ..constants import XINFERENCE_VIRTUAL_ENV_DIR\n\nlogger = logging.getLogger(__name__)\n\nENGINE_VIRTUALENV_PACKAGES: Dict[str, List[str]] = {\n    \"sglang\": [\n        \"pybase64\",\n        \"zmq\",\n        \"partial_json_parser\",\n        \"sentencepiece\",\n        \"dill\",\n        \"ninja\",\n        \"numpy>=2.4.1\",\n        \"sglang>=0.5.6\",\n        'https://github.com/sgl-project/whl/releases/download/v0.3.21/sgl_kernel-0.3.21+cu130-cp310-abi3-manylinux2014_x86_64.whl ; cuda_version == \"13.0\" and platform_machine == \"x86_64\"',\n        'https://github.com/sgl-project/whl/releases/download/v0.3.21/sgl_kernel-0.3.21+cu130-cp310-abi3-manylinux2014_aarch64.whl ; cuda_version == \"13.0\" and platform_machine == \"aarch64\"',\n        'sgl_kernel ; cuda_version < \"13.0\"',\n    ],\n    \"vllm\": [\n        \"vllm>=0.11.2,<0.15.0\",\n    ],\n    \"transformers\": [\n        \"transformers>=4.53.3\",\n        \"accelerate>=0.28.0\",\n    ],\n    \"sentence_transformers\": [\n        \"sentence_transformers\",\n        \"einops\",\n        \"transformers>=4.53.3\",\n    ],\n    \"diffusers\": [\n        \"diffusers>=0.32.0\",\n        \"huggingface-hub<1.0\",\n    ],\n    \"mlx\": [\n        \"mlx-lm>=0.24.0\",\n    ],\n    \"llama.cpp\": [\n        \"xllamacpp>=0.2.6\",\n    ],\n}\n\nENGINE_VIRTUALENV_EXTRA_INDEX_URLS: Dict[str, List[str]] = {\n    \"vllm\": [\n        \"https://wheels.vllm.ai/0.14.1/cu130\",\n        \"https://download.pytorch.org/whl/cu130\",\n    ],\n    \"sglang\": [\n        \"https://download.pytorch.org/whl/cu130\",\n    ],\n}\n\nENGINE_VIRTUALENV_INDEX_STRATEGY: Dict[str, str] = {\n    \"vllm\": \"unsafe-best-match\",\n    \"sglang\": \"unsafe-best-match\",\n}\n\n\ndef get_engine_virtualenv_packages(model_engine: Optional[str]) -> List[str]:\n    if not model_engine:\n        return []\n    return ENGINE_VIRTUALENV_PACKAGES.get(model_engine.lower(), []).copy()\n\n\ndef get_engine_virtualenv_extra_index_urls(\n    model_engine: Optional[str],\n) -> Optional[List[str]]:\n    if not model_engine:\n        return None\n    urls = ENGINE_VIRTUALENV_EXTRA_INDEX_URLS.get(model_engine.lower())\n    result = urls.copy() if urls else None\n    logger.debug(\n        f\"[DEBUG] get_engine_virtualenv_extra_index_urls: model_engine={model_engine}, urls={urls}, result={result}\"\n    )\n    return result\n\n\ndef get_engine_virtualenv_index_strategy(model_engine: Optional[str]) -> Optional[str]:\n    if not model_engine:\n        return None\n    return ENGINE_VIRTUALENV_INDEX_STRATEGY.get(model_engine.lower())\n\n\ndef resolve_virtualenv_python_path(virtual_env_manager: Any) -> Optional[str]:\n    \"\"\"\n    Resolve a usable Python executable path for a virtual environment.\n\n    This prefers the manager's reported path when it exists, otherwise falls\n    back to OS-specific defaults under the env_path.\n    \"\"\"\n    if virtual_env_manager is None:\n        return None\n    venv_python = virtual_env_manager.get_python_path()\n    if venv_python and os.path.exists(venv_python):\n        return venv_python\n    env_path = getattr(virtual_env_manager, \"env_path\", None)\n    if env_path is None:\n        return venv_python\n    candidates: List[str] = []\n    if os.name == \"nt\":\n        candidates.append(os.path.join(str(env_path), \"Scripts\", \"python.exe\"))\n    candidates.append(os.path.join(str(env_path), \"bin\", \"python\"))\n    for candidate in candidates:\n        if os.path.exists(candidate):\n            return candidate\n    return venv_python\n\n\ndef expand_engine_dependency_placeholders(\n    packages: List[str], model_engine: Optional[str]\n) -> List[str]:\n    if not packages:\n        return []\n    engine_name = model_engine.lower() if model_engine else None\n    expanded: List[str] = []\n    # Mapping for dependency names that differ from engine names\n    dependency_to_engine_map: Dict[str, str] = {\n        \"llama_cpp\": \"llama.cpp\",\n    }\n    for pkg in packages:\n        name = pkg.split(\";\", 1)[0].strip().lower()\n        if name.startswith(\"#\") and name.endswith(\"#\"):\n            name = name[1:-1]\n        if name.endswith(\"_dependencies\") and engine_name:\n            target_engine = name[: -len(\"_dependencies\")]\n            # Map dependency name to actual engine name if needed\n            actual_engine = dependency_to_engine_map.get(target_engine, target_engine)\n            if actual_engine == engine_name:\n                expanded.extend(\n                    ENGINE_VIRTUALENV_PACKAGES.get(actual_engine, []).copy()\n                )\n            continue\n        expanded.append(pkg)\n    return expanded\n\n\nclass VirtualEnvManager:\n    \"\"\"\n    Manager class for handling virtual environments.\n    Extracted from worker.py to improve code organization and maintainability.\n    Supports multiple Python versions per model and engine with v4 structure:\n    .xinference/virtualenv/v4/{model_name}/{model_engine}/{python_version}/\n    \"\"\"\n\n    def __init__(self, worker_address: str):\n        \"\"\"\n        Initialize VirtualEnvManager.\n\n        Args:\n            worker_address: The address of the worker using this manager\n        \"\"\"\n        self.worker_address = worker_address\n\n    def list_virtual_envs(\n        self, model_name: Optional[str] = None, model_engine: Optional[str] = None\n    ) -> List[Dict[Any, Any]]:\n        \"\"\"\n        List all virtual environments or filter by model name.\n\n        Args:\n            model_name: Optional model name to filter results\n            model_engine: Optional model engine to filter results\n\n        Returns:\n            List of virtual environment information dictionaries\n        \"\"\"\n\n        virtual_envs: List[Dict[str, Any]] = []\n        if model_engine is not None:\n            model_engine = model_engine.lower()\n        v4_env_dir = os.path.join(XINFERENCE_VIRTUAL_ENV_DIR, \"v4\")\n\n        if os.path.exists(v4_env_dir):\n            for model_dir in os.listdir(v4_env_dir):\n                model_path = os.path.join(v4_env_dir, model_dir)\n                if not os.path.isdir(model_path):\n                    continue\n\n                # Apply filter if model_name is specified\n                if model_name and model_dir != model_name:\n                    continue\n\n                for engine_dir in os.listdir(model_path):\n                    engine_path = os.path.join(model_path, engine_dir)\n                    if not os.path.isdir(engine_path):\n                        continue\n\n                    # Apply filter if model_engine is specified\n                    if model_engine and engine_dir != model_engine:\n                        continue\n\n                    # Check for Python version directories\n                    for python_version_dir in os.listdir(engine_path):\n                        python_version_path = os.path.join(\n                            engine_path, python_version_dir\n                        )\n                        if os.path.isdir(python_version_path):\n                            # Validate Python version format (e.g., \"3.10\", \"3.13\")\n                            if self._is_valid_python_version(python_version_dir):\n                                env_info: Dict[str, Any] = {\n                                    \"model_name\": model_dir,\n                                    \"model_engine\": engine_dir,\n                                    \"python_version\": python_version_dir,\n                                    \"path\": python_version_path,\n                                    \"real_path\": os.path.realpath(python_version_path),\n                                }\n                                virtual_envs.append(env_info)\n\n        return virtual_envs\n\n    def remove_virtual_env(\n        self,\n        model_name: str,\n        model_engine: Optional[str] = None,\n        python_version: Optional[str] = None,\n    ) -> bool:\n        \"\"\"\n        Remove a virtual environment for a specific model.\n\n        Args:\n            model_name: Name of the model whose virtual environment should be removed\n            model_engine: Optional model engine to remove specific engine\n            python_version: Optional Python version to remove specific version,\n                          if None, removes all Python versions for the model\n\n        Returns:\n            True if removal was successful, False otherwise\n        \"\"\"\n        if not model_name:\n            raise ValueError(\"model_name is required\")\n\n        try:\n            if model_engine is not None:\n                model_engine = model_engine.lower()\n            from ..constants import XINFERENCE_VIRTUAL_ENV_DIR\n        except ImportError:\n            # Fallback for testing or when run as standalone\n            XINFERENCE_VIRTUAL_ENV_DIR = os.path.join(\n                os.path.expanduser(\"~/.xinference\"), \"virtualenv\"\n            )\n\n        v4_env_dir = os.path.join(XINFERENCE_VIRTUAL_ENV_DIR, \"v4\")\n\n        try:\n            if python_version and not self._is_valid_python_version(python_version):\n                logger.warning(f\"Invalid Python version format: {python_version}\")\n                return False\n\n            if model_engine:\n                model_path = os.path.join(v4_env_dir, model_name, model_engine)\n                if not os.path.exists(model_path):\n                    logger.warning(\n                        f\"Virtual environment path not found for model: {model_name}\"\n                    )\n                    return True\n\n                if python_version:\n                    version_path = os.path.join(model_path, python_version)\n                    if not os.path.exists(version_path):\n                        logger.warning(\n                            \"Virtual environment for %s engine %s Python %s not found\",\n                            model_name,\n                            model_engine,\n                            python_version,\n                        )\n                        return True\n\n                    if os.path.islink(version_path):\n                        os.unlink(version_path)\n                    elif os.path.isdir(version_path):\n                        shutil.rmtree(version_path)\n                    else:\n                        logger.warning(\n                            \"Virtual environment path is not a directory: %s\",\n                            version_path,\n                        )\n\n                    logger.info(\n                        \"Successfully removed virtual environment: %s\", version_path\n                    )\n                else:\n                    if os.path.islink(model_path):\n                        os.unlink(model_path)\n                    elif os.path.isdir(model_path):\n                        shutil.rmtree(model_path)\n                    else:\n                        logger.warning(\n                            \"Virtual environment path is not a directory: %s\",\n                            model_path,\n                        )\n\n                    logger.info(\n                        \"Successfully removed all virtual environments for model engine: %s\",\n                        model_path,\n                    )\n\n                # Cleanup empty model directory\n                model_root = os.path.join(v4_env_dir, model_name)\n                try:\n                    if os.path.exists(model_root) and not os.listdir(model_root):\n                        os.rmdir(model_root)\n                        logger.info(\"Removed empty model directory: %s\", model_root)\n                except OSError:\n                    pass\n\n                return True\n\n            # No model_engine specified: remove across all engines (v4)\n            model_path_v4 = os.path.join(v4_env_dir, model_name)\n\n            if python_version:\n                # Remove specific Python version across v4 engines\n                if os.path.exists(model_path_v4):\n                    for engine_dir in os.listdir(model_path_v4):\n                        engine_path = os.path.join(model_path_v4, engine_dir)\n                        if not os.path.isdir(engine_path):\n                            continue\n                        version_path = os.path.join(engine_path, python_version)\n                        if not os.path.exists(version_path):\n                            continue\n                        if os.path.islink(version_path):\n                            os.unlink(version_path)\n                        elif os.path.isdir(version_path):\n                            shutil.rmtree(version_path)\n                        else:\n                            logger.warning(\n                                \"Virtual environment path is not a directory: %s\",\n                                version_path,\n                            )\n                        try:\n                            if os.path.exists(engine_path) and not os.listdir(\n                                engine_path\n                            ):\n                                os.rmdir(engine_path)\n                        except OSError:\n                            pass\n\n                # Cleanup empty model directory\n                try:\n                    if os.path.exists(model_path_v4) and not os.listdir(model_path_v4):\n                        os.rmdir(model_path_v4)\n                        logger.info(\"Removed empty model directory: %s\", model_path_v4)\n                except OSError:\n                    pass\n\n                return True\n\n            # Remove all Python versions for the model (v4)\n            if os.path.exists(model_path_v4):\n                if os.path.islink(model_path_v4):\n                    os.unlink(model_path_v4)\n                elif os.path.isdir(model_path_v4):\n                    shutil.rmtree(model_path_v4)\n                else:\n                    logger.warning(\n                        \"Virtual environment path is not a directory: %s\",\n                        model_path_v4,\n                    )\n\n            logger.info(\n                \"Successfully removed all virtual environments for model: %s\",\n                model_name,\n            )\n            return True\n\n        except Exception as e:\n            logger.error(f\"Failed to remove virtual environment: {e}\")\n            return False\n\n    def check_virtual_env_exists(self, model_name: str) -> Dict[str, Any]:\n        \"\"\"\n        Check if a virtual environment exists for a specific model.\n\n        Args:\n            model_name: Name of the model to check\n\n        Returns:\n            Dictionary with existence check result\n        \"\"\"\n        virtual_envs = self.list_virtual_envs(model_name)\n        return {\"has_virtual_env\": len(virtual_envs) > 0, \"model_name\": model_name}\n\n    def list_virtual_env_packages(self, model_name: str) -> Dict[str, Any]:\n        \"\"\"\n        List packages installed in a specific virtual environment.\n\n        Args:\n            model_name: Name of the model\n\n        Returns:\n            Dictionary with package information or error message\n        \"\"\"\n        # This method is deprecated and no longer needed\n        # Virtual environments are managed by direct directory scanning\n        return {\n            \"model_name\": model_name,\n            \"worker_ip\": self.worker_address,\n            \"error\": \"Package listing functionality has been removed\",\n        }\n\n    def _detect_python_version(self, env_path: str) -> str:\n        \"\"\"\n        Detect Python version in a virtual environment.\n\n        Args:\n            env_path: Path to the virtual environment\n\n        Returns:\n            Python version string or \"unknown\" if detection fails\n        \"\"\"\n        try:\n            # Try to find Python executable in the virtual environment\n            if os.name != \"nt\":  # Unix-like systems\n                python_exe = os.path.join(env_path, \"bin\", \"python\")\n                python3_exe = os.path.join(env_path, \"bin\", \"python3\")\n            else:  # Windows\n                python_exe = os.path.join(env_path, \"Scripts\", \"python.exe\")\n                python3_exe = os.path.join(env_path, \"Scripts\", \"python3.exe\")\n\n            # Try to execute Python to get version\n            for exe_path in [python_exe, python3_exe]:\n                if os.path.exists(exe_path):\n                    try:\n                        result = subprocess.run(\n                            [exe_path, \"--version\"],\n                            capture_output=True,\n                            text=True,\n                            timeout=10,\n                        )\n                        if result.returncode == 0:\n                            # Parse version from output like \"Python 3.9.7\"\n                            version_output = (\n                                result.stdout.strip() or result.stderr.strip()\n                            )\n                            if version_output.startswith(\"Python \"):\n                                return version_output[7:]  # Remove \"Python \" prefix\n                    except (subprocess.TimeoutExpired, subprocess.SubprocessError):\n                        continue\n\n            # Fallback: try to read from lib/pythonX.Y structure\n            if os.path.exists(env_path):\n                for item in os.listdir(env_path):\n                    if item.startswith(\"lib\") and \"python\" in item:\n                        # Extract version from directory name like \"lib/python3.9\"\n                        parts = item.split(\"python\")\n                        if len(parts) > 1:\n                            version = parts[1].replace(\".\", \"\")\n                            # Format version properly (e.g., \"39\" -> \"3.9\")\n                            if len(version) >= 2:\n                                return f\"{version[0]}.{version[1:]}\"\n\n            return \"unknown\"\n        except Exception:\n            return \"unknown\"\n\n    def _is_valid_python_version(self, python_version: str) -> bool:\n        \"\"\"\n        Validate Python version format (e.g., \"3.10\", \"3.10.18\")\n\n        Args:\n            python_version: Python version string to validate\n\n        Returns:\n            True if valid, False otherwise\n        \"\"\"\n        try:\n            parts = python_version.split(\".\")\n            if len(parts) not in [2, 3]:\n                return False\n            major, minor = parts[:2]\n            if not major.isdigit() or not minor.isdigit():\n                return False\n            if len(parts) == 3:\n                micro = parts[2]\n                if not micro.isdigit():\n                    return False\n            return True\n        except Exception:\n            return False\n"
  },
  {
    "path": "xinference/core/worker.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nimport os\nimport pathlib\nimport platform\nimport queue\nimport shutil\nimport signal\nimport sys\nimport threading\nimport time\nfrom collections import defaultdict\nfrom dataclasses import dataclass, field\nfrom logging import getLogger\nfrom typing import (\n    TYPE_CHECKING,\n    Any,\n    Dict,\n    List,\n    Literal,\n    Optional,\n    Set,\n    Tuple,\n    Type,\n    Union,\n    no_type_check,\n)\n\nimport xoscar as xo\nfrom async_timeout import timeout\nfrom packaging.version import Version\nfrom xoscar import MainActorPoolType\n\nfrom ..constants import (\n    XINFERENCE_ALLOW_MULTI_REPLICA_PER_GPU,\n    XINFERENCE_CACHE_DIR,\n    XINFERENCE_DISABLE_HEALTH_CHECK,\n    XINFERENCE_DISABLE_METRICS,\n    XINFERENCE_ENABLE_VIRTUAL_ENV,\n    XINFERENCE_HEALTH_CHECK_INTERVAL,\n    XINFERENCE_VIRTUAL_ENV_DIR,\n    XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED,\n)\nfrom ..core.model import ModelActor\nfrom ..core.status_guard import LaunchStatus\nfrom ..device_utils import get_available_device_env_name, gpu_count\nfrom ..model.core import VirtualEnvSettings, create_model_instance\nfrom ..model.utils import (\n    CancellableDownloader,\n    get_engine_params_by_name,\n    get_engine_params_by_name_with_virtual_env,\n)\nfrom ..types import PeftModelConfig\nfrom ..utils import get_pip_config_args, get_real_path\nfrom .cache_tracker import CacheTrackerActor\nfrom .event import Event, EventCollectorActor, EventType\nfrom .metrics import launch_metrics_export_server, record_metrics\nfrom .resource import gather_node_info\nfrom .status_guard import StatusGuardActor\nfrom .utils import (\n    apply_engine_virtualenv_settings,\n    build_subpool_envs_for_virtual_env,\n    filter_virtualenv_packages_by_markers,\n    log_async,\n    log_sync,\n    merge_virtual_env_packages,\n    parse_replica_model_uid,\n    purge_dir,\n)\nfrom .virtual_env_manager import VirtualEnvManager as XinferenceVirtualEnvManager\nfrom .virtual_env_manager import (\n    expand_engine_dependency_placeholders,\n    resolve_virtualenv_python_path,\n)\n\ntry:\n    from xoscar.virtualenv import VirtualEnvManager\nexcept ImportError:\n    VirtualEnvManager = None\n\nif TYPE_CHECKING:\n    from .progress_tracker import Progressor\n\nlogger = getLogger(__name__)\n\n\nMODEL_ACTOR_AUTO_RECOVER_LIMIT: Optional[int]\n_MODEL_ACTOR_AUTO_RECOVER_LIMIT = os.getenv(\"XINFERENCE_MODEL_ACTOR_AUTO_RECOVER_LIMIT\")\nif _MODEL_ACTOR_AUTO_RECOVER_LIMIT is not None:\n    MODEL_ACTOR_AUTO_RECOVER_LIMIT = int(_MODEL_ACTOR_AUTO_RECOVER_LIMIT)\nelse:\n    MODEL_ACTOR_AUTO_RECOVER_LIMIT = None\n\n\n@dataclass\nclass ModelStatus:\n    last_error: str = \"\"\n\n\n@dataclass\nclass LaunchInfo:\n    cancel_event: threading.Event = field(default_factory=threading.Event)\n    # virtualenv manager\n    virtual_env_manager: Optional[\"VirtualEnvManager\"] = None\n    # downloader, report progress or cancel entire download\n    downloader: Optional[CancellableDownloader] = None\n    # sub pools created for the model\n    sub_pools: Optional[List[str]] = None\n\n\nclass WorkerActor(xo.StatelessActor):\n    def __init__(\n        self,\n        supervisor_address: str,\n        main_pool: MainActorPoolType,\n        gpu_devices: List[int],\n        metrics_exporter_host: Optional[str] = None,\n        metrics_exporter_port: Optional[int] = None,\n    ):\n        super().__init__()\n        # static attrs.\n        self._total_gpu_devices = gpu_devices\n        self._supervisor_address = supervisor_address\n        self._supervisor_ref: Optional[xo.ActorRefType] = None\n        self._main_pool = main_pool\n        self._main_pool.recover_sub_pool = self.recover_sub_pool\n        self._status_guard_ref: xo.ActorRefType[\n            \"StatusGuardActor\"\n        ] = None  # type: ignore\n        self._event_collector_ref: xo.ActorRefType[  # type: ignore\n            EventCollectorActor\n        ] = None\n        self._cache_tracker_ref: xo.ActorRefType[\n            CacheTrackerActor\n        ] = None  # type: ignore\n\n        # Virtual environment management\n        self._virtual_env_manager: XinferenceVirtualEnvManager = None  # type: ignore\n\n        # internal states.\n        # temporary placeholder during model launch process:\n        self._model_uid_launching_guard: Dict[str, LaunchInfo] = {}\n        # attributes maintained after model launched:\n        self._model_uid_to_model: Dict[str, xo.ActorRefType[\"ModelActor\"]] = {}\n        self._model_uid_to_model_spec: Dict[str, Dict[str, Any]] = {}\n        self._model_uid_to_model_status: Dict[str, ModelStatus] = {}\n        self._gpu_to_model_uids: Dict[int, Set[str]] = defaultdict(set)\n        # Dict structure: gpu_index: {(replica_model_uid, model_type)}\n        self._user_specified_gpu_to_model_uids: Dict[int, Set[Tuple[str, str]]] = (\n            defaultdict(set)\n        )\n        self._allow_multi_replica_per_gpu = XINFERENCE_ALLOW_MULTI_REPLICA_PER_GPU\n        self._model_uid_to_addr: Dict[str, str] = {}\n        self._model_uid_to_recover_count: Dict[str, Optional[int]] = {}\n        self._model_uid_to_launch_args: Dict[str, Dict] = {}\n\n        if XINFERENCE_DISABLE_METRICS:\n            logger.info(\n                \"Worker metrics is disabled due to the environment XINFERENCE_DISABLE_METRICS=1\"\n            )\n        elif metrics_exporter_host is not None or metrics_exporter_port is not None:\n            # metrics export server.\n            logger.info(\n                f\"Starting metrics export server at {metrics_exporter_host}:{metrics_exporter_port}\"  # noqa: E231\n            )\n            q: queue.Queue = queue.Queue()\n            self._metrics_thread = threading.Thread(\n                name=\"Metrics Export Server\",\n                target=launch_metrics_export_server,\n                args=(q, metrics_exporter_host, metrics_exporter_port),\n                daemon=True,\n            )\n            self._metrics_thread.start()\n            logger.info(\"Checking metrics export server...\")\n            while self._metrics_thread.is_alive():\n                try:\n                    host, port = q.get(block=False)[:2]\n                    logger.info(\n                        f\"Metrics server is started at: http://{host}:{port}\"  # noqa: E231\n                    )\n                    break\n                except queue.Empty:\n                    pass\n            else:\n                raise Exception(\"Metrics server thread exit.\")\n\n        # Initialize virtual environment manager\n        self._virtual_env_manager = XinferenceVirtualEnvManager(self.address)\n\n        self._lock = asyncio.Lock()\n\n    async def recover_sub_pool(self, address):\n        logger.warning(\"Process %s is down.\", address)\n        # Xoscar does not remove the address from sub_processes.\n        try:\n            await self._main_pool.remove_sub_pool(address)\n        except Exception:\n            pass\n        for model_uid, addr in self._model_uid_to_addr.items():\n            if addr == address:\n                launch_args = self._model_uid_to_launch_args.get(model_uid)\n                if launch_args is None:\n                    logger.warning(\n                        \"Not recreate model because the it is down during launch.\"\n                    )\n                else:\n                    recover_count = self._model_uid_to_recover_count.get(model_uid)\n                    try:\n                        await self.terminate_model(model_uid, is_model_die=True)\n                    except Exception:\n                        pass\n                    if recover_count is not None:\n                        if recover_count > 0:\n                            logger.warning(\n                                \"Recreating model actor %s, remain %s times ...\",\n                                model_uid,\n                                recover_count - 1,\n                            )\n                            event_model_uid, _ = parse_replica_model_uid(model_uid)\n                            try:\n                                if self._event_collector_ref is not None:\n                                    await self._event_collector_ref.report_event(\n                                        event_model_uid,\n                                        Event(\n                                            event_type=EventType.WARNING,\n                                            event_ts=int(time.time()),\n                                            event_content=\"Recreate model\",\n                                        ),\n                                    )\n                            except Exception as e:\n                                # Report callback error can be log and ignore, should not interrupt the Process\n                                logger.error(\"report_event error: %s\" % (e))\n                            finally:\n                                del event_model_uid\n\n                            self._model_uid_to_recover_count[model_uid] = (\n                                recover_count - 1\n                            )\n                            await self.recover_model(launch_args)\n                        else:\n                            logger.warning(\"Stop recreating model actor.\")\n                    else:\n                        logger.warning(\"Recreating model actor %s ...\", model_uid)\n                        await self.recover_model(launch_args)\n                break\n\n    @classmethod\n    def default_uid(cls) -> str:\n        return \"worker\"\n\n    def _get_spec_dicts_with_cache_status(\n        self, model_family: Any, cache_manager_cls: Type\n    ) -> Tuple[List[dict], List[str]]:\n        \"\"\"\n        Build model_specs with cache_status and collect download_hubs.\n        \"\"\"\n\n        specs: List[dict] = []\n        download_hubs: List[str] = []\n        for spec in model_family.model_specs:\n            model_hub = spec.model_hub\n            if model_hub not in download_hubs:\n                download_hubs.append(model_hub)\n\n            family_copy = model_family.copy()\n            family_copy.model_specs = [spec]\n            cache_manager = cache_manager_cls(family_copy)\n            specs.append(\n                {**spec.dict(), \"cache_status\": cache_manager.get_cache_status()}\n            )\n        return specs, download_hubs\n\n    def _prefer_model_hub(self, model_family: Any, preferred_hub: str = \"huggingface\"):\n        \"\"\"\n        Return a copy of model_family with a single spec, preferring the given hub.\n        \"\"\"\n        specs = getattr(model_family, \"model_specs\", None)\n        if not specs:\n            return model_family\n\n        target_spec = next(\n            (\n                spec\n                for spec in specs\n                if getattr(spec, \"model_hub\", None) == preferred_hub\n            ),\n            specs[0],\n        )\n        family_copy = model_family.copy()\n        family_copy.model_specs = [target_spec]\n        return family_copy\n\n    async def __post_create__(self):\n        from ..model.audio import (\n            CustomAudioModelFamilyV2,\n            generate_audio_description,\n            register_audio,\n            unregister_audio,\n        )\n        from ..model.embedding import (\n            CustomEmbeddingModelFamilyV2,\n            generate_embedding_description,\n            register_embedding,\n            unregister_embedding,\n        )\n        from ..model.flexible import (\n            FlexibleModelSpec,\n            generate_flexible_model_description,\n            register_flexible_model,\n            unregister_flexible_model,\n        )\n        from ..model.image import (\n            CustomImageModelFamilyV2,\n            generate_image_description,\n            register_image,\n            unregister_image,\n        )\n        from ..model.llm import (\n            CustomLLMFamilyV2,\n            generate_llm_version_info,\n            register_llm,\n            unregister_llm,\n        )\n        from ..model.rerank import (\n            CustomRerankModelFamilyV2,\n            generate_rerank_description,\n            register_rerank,\n            unregister_rerank,\n        )\n        from ..model.video import (\n            CustomVideoModelFamilyV2,\n            generate_video_description,\n            register_video,\n            unregister_video,\n        )\n\n        self._custom_register_type_to_cls: Dict[str, Tuple] = {  # type: ignore\n            \"LLM\": (\n                CustomLLMFamilyV2,\n                register_llm,\n                unregister_llm,\n                generate_llm_version_info,\n            ),\n            \"embedding\": (\n                CustomEmbeddingModelFamilyV2,\n                register_embedding,\n                unregister_embedding,\n                generate_embedding_description,\n            ),\n            \"rerank\": (\n                CustomRerankModelFamilyV2,\n                register_rerank,\n                unregister_rerank,\n                generate_rerank_description,\n            ),\n            \"image\": (\n                CustomImageModelFamilyV2,\n                register_image,\n                unregister_image,\n                generate_image_description,\n            ),\n            \"audio\": (\n                CustomAudioModelFamilyV2,\n                register_audio,\n                unregister_audio,\n                generate_audio_description,\n            ),\n            \"flexible\": (\n                FlexibleModelSpec,\n                register_flexible_model,\n                unregister_flexible_model,\n                generate_flexible_model_description,\n            ),\n            \"video\": (\n                CustomVideoModelFamilyV2,\n                register_video,\n                unregister_video,\n                generate_video_description,\n            ),\n        }\n\n        logger.info(\"Purge cache directory: %s\", XINFERENCE_CACHE_DIR)\n        purge_dir(XINFERENCE_CACHE_DIR)\n\n        try:\n            await self.get_supervisor_ref(add_worker=True)\n        except Exception:\n            # Do not crash the worker if supervisor is down, auto re-connect later\n            logger.error(f\"cannot connect to supervisor\", exc_info=True)\n\n        if not XINFERENCE_DISABLE_HEALTH_CHECK:\n            from ..isolation import Isolation\n\n            # Run _periodical_report_status() in a dedicated thread.\n            self._isolation = Isolation(asyncio.new_event_loop(), threaded=True)\n            self._isolation.start()\n            asyncio.run_coroutine_threadsafe(\n                self._periodical_report_status(), loop=self._isolation.loop\n            )\n        logger.info(f\"Xinference worker {self.address} started\")\n\n        # Windows does not have signal handler\n        if os.name != \"nt\":\n\n            async def signal_handler():\n                try:\n                    supervisor_ref = await self.get_supervisor_ref(add_worker=False)\n                    await supervisor_ref.remove_worker(self.address)\n                except Exception as e:\n                    # Ignore the error of rpc, anyway we are exiting\n                    logger.exception(\"remove worker rpc error: %s\", e)\n                os._exit(0)\n\n            loop = asyncio.get_running_loop()\n            loop.add_signal_handler(\n                signal.SIGINT, lambda: asyncio.create_task(signal_handler())\n            )\n\n    async def __pre_destroy__(self):\n        self._isolation.stop()\n\n    async def trigger_exit(self) -> bool:\n        try:\n            os.kill(os.getpid(), signal.SIGINT)\n        except Exception as e:\n            logger.info(f\"trigger exit error: {e}\")\n            return False\n        return True\n\n    async def get_supervisor_ref(self, add_worker: bool = True) -> xo.ActorRefType:\n        \"\"\"\n        Try connect to supervisor and return ActorRef. Raise exception on error\n        Params:\n            add_worker: By default will call supervisor.add_worker after first connect\n        \"\"\"\n        from .supervisor import SupervisorActor\n\n        if self._supervisor_ref is not None:\n            return self._supervisor_ref\n        supervisor_ref = await xo.actor_ref(  # type: ignore\n            address=self._supervisor_address, uid=SupervisorActor.default_uid()\n        )\n        # Prevent concurrent operations leads to double initialization, check again.\n        if self._supervisor_ref is not None:\n            return self._supervisor_ref\n        self._supervisor_ref = supervisor_ref\n        if add_worker and len(self._model_uid_to_model) == 0:\n            # Newly started (or restarted), has no model, notify supervisor\n            await self._supervisor_ref.add_worker(self.address)\n            logger.info(\"Connected to supervisor as a fresh worker\")\n\n        self._status_guard_ref = await xo.actor_ref(\n            address=self._supervisor_address, uid=StatusGuardActor.default_uid()\n        )\n        self._event_collector_ref = await xo.actor_ref(\n            address=self._supervisor_address, uid=EventCollectorActor.default_uid()\n        )\n        self._cache_tracker_ref = await xo.actor_ref(\n            address=self._supervisor_address, uid=CacheTrackerActor.default_uid()\n        )\n        self._progress_tracker_ref = None\n        # cache_tracker is on supervisor\n        from ..model.audio import get_audio_model_descriptions\n        from ..model.embedding import get_embedding_model_descriptions\n        from ..model.flexible import get_flexible_model_descriptions\n        from ..model.image import get_image_model_descriptions\n        from ..model.llm import get_llm_version_infos\n        from ..model.rerank import get_rerank_model_descriptions\n        from ..model.video import get_video_model_descriptions\n\n        # record model version\n        model_version_infos: Dict[str, List[Dict]] = {}  # type: ignore\n        model_version_infos.update(get_llm_version_infos())\n        model_version_infos.update(get_embedding_model_descriptions())\n        model_version_infos.update(get_rerank_model_descriptions())\n        model_version_infos.update(get_image_model_descriptions())\n        model_version_infos.update(get_audio_model_descriptions())\n        model_version_infos.update(get_video_model_descriptions())\n        model_version_infos.update(get_flexible_model_descriptions())\n        await self._cache_tracker_ref.record_model_version(\n            model_version_infos, self.address\n        )\n        return self._supervisor_ref\n\n    @staticmethod\n    def get_devices_count():\n        from ..device_utils import gpu_count\n\n        return gpu_count()\n\n    @log_sync(logger=logger)\n    def get_model_count(self) -> int:\n        return len(self._model_uid_to_model)\n\n    async def is_model_vllm_backend(self, model_uid: str) -> bool:\n        _model_uid, _ = parse_replica_model_uid(model_uid)\n        supervisor_ref = await self.get_supervisor_ref()\n        model_ref = await supervisor_ref.get_model(_model_uid)\n        return await model_ref.is_vllm_backend()\n\n    def allocate_devices(self, model_uid: str, n_gpu: int) -> List[int]:\n        if n_gpu > len(self._total_gpu_devices):\n            raise RuntimeError(\"Requested GPUs exceed the number of available devices\")\n\n        # If multi-replica-per-GPU is disabled, only pick currently idle GPUs.\n        if not self._allow_multi_replica_per_gpu:\n            occupied_devices: Set[int] = set()\n            for dev, model_uids in self._gpu_to_model_uids.items():\n                if model_uids:\n                    occupied_devices.add(dev)\n            for dev, model_infos in self._user_specified_gpu_to_model_uids.items():\n                if model_infos:\n                    occupied_devices.add(dev)\n            available_devices = [\n                dev for dev in self._total_gpu_devices if dev not in occupied_devices\n            ]\n            if n_gpu > len(available_devices):\n                raise RuntimeError(\"No available slot found for the model\")\n            selected_devices = available_devices[:n_gpu]\n            for dev in selected_devices:\n                self._gpu_to_model_uids[int(dev)].add(model_uid)\n            return sorted(selected_devices)\n\n        # Default: allow multi-tenant GPUs, pick least-loaded devices.\n        gpu_loads: List[Tuple[int, int, int]] = []\n        for dev in self._total_gpu_devices:\n            running_models = len(self._gpu_to_model_uids.get(dev, set()))\n            load = running_models + len(\n                self._user_specified_gpu_to_model_uids.get(dev, set())\n            )\n            # Prefer devices with fewer existing model processes when loads tie\n            gpu_loads.append((load, running_models, dev))\n\n        devices: List[int] = []\n        for _ in range(n_gpu):\n            gpu_loads.sort(key=lambda x: (x[0], x[1], x[2]))\n            load, running_models, dev = gpu_loads[0]\n            devices.append(dev)\n            gpu_loads[0] = (load + 1, running_models + 1, dev)\n\n        for dev in devices:\n            self._gpu_to_model_uids[int(dev)].add(model_uid)\n\n        return sorted(devices)\n\n    async def allocate_devices_with_gpu_idx(\n        self, model_uid: str, model_type: str, gpu_idx: List[int]\n    ) -> List[int]:\n        \"\"\"\n        When user specifies the gpu_idx, allocate models on user-specified GPUs whenever possible\n        \"\"\"\n        # must be subset of total devices visible to this worker\n        if not set(gpu_idx) <= set(self._total_gpu_devices):\n            raise ValueError(\n                f\"Worker {self.address} cannot use the GPUs with these indexes: {gpu_idx}. \"\n                f\"Worker {self.address} can only see these GPUs: {self._total_gpu_devices}.\"\n            )\n        # currently just report a warning log when there are already models on these GPUs\n        for idx in gpu_idx:\n            existing_model_uids = []\n            if idx in self._gpu_to_model_uids:\n                for rep_uid in self._gpu_to_model_uids[idx]:\n                    existing_model_uids.append(rep_uid)\n            if not self._allow_multi_replica_per_gpu and (\n                existing_model_uids\n                or len(self._user_specified_gpu_to_model_uids.get(idx, set())) > 0\n            ):\n                raise RuntimeError(\n                    f\"GPU index {idx} has been occupied with models: {existing_model_uids}, \"\n                    f\"and multi-replica-per-GPU is disabled.\"\n                )\n\n            if existing_model_uids:\n                logger.warning(\n                    f\"WARNING!!! GPU index {idx} has been occupied \"\n                    f\"with these models on it: {existing_model_uids}\"\n                )\n\n        for idx in gpu_idx:\n            self._user_specified_gpu_to_model_uids[idx].add((model_uid, model_type))\n        return sorted(gpu_idx)\n\n    @log_async(logger=logger)\n    async def get_gpu_allocation_status(self) -> Dict[str, Any]:\n        \"\"\"Return current device allocation snapshot for scheduling/diagnostics.\"\"\"\n        return {\n            \"total\": list(self._total_gpu_devices),\n            \"models\": {int(k): list(v) for k, v in self._gpu_to_model_uids.items()},\n            \"user_specified\": {\n                int(k): [list(t) for t in v]\n                for k, v in self._user_specified_gpu_to_model_uids.items()\n            },\n            \"allow_multi_replica_per_gpu\": self._allow_multi_replica_per_gpu,\n        }\n\n    def release_devices(self, model_uid: str):\n        for dev, model_uids in list(self._gpu_to_model_uids.items()):\n            if model_uid in model_uids:\n                model_uids.remove(model_uid)\n                if not model_uids:\n                    del self._gpu_to_model_uids[dev]\n\n        # check user-specified slots\n        for dev in self._user_specified_gpu_to_model_uids:\n            model_infos = list(\n                filter(\n                    lambda x: x[0] == model_uid,\n                    self._user_specified_gpu_to_model_uids[dev],\n                )\n            )\n            for model_info in model_infos:\n                self._user_specified_gpu_to_model_uids[dev].remove(model_info)\n\n    async def _create_subpool(\n        self,\n        model_uid: str,\n        model_type: Optional[str] = None,\n        n_gpu: Optional[Union[int, str]] = \"auto\",\n        gpu_idx: Optional[List[int]] = None,\n        env: Optional[Dict[str, str]] = None,\n        start_python: Optional[str] = None,\n    ) -> Tuple[str, List[str]]:\n        env = {} if env is None else env\n        devices = []\n        env_name = get_available_device_env_name() or \"CUDA_VISIBLE_DEVICES\"\n        if gpu_idx is None:\n            if isinstance(n_gpu, int) or (n_gpu == \"auto\" and gpu_count() > 0):\n                # Currently, n_gpu=auto means using 1 GPU\n                gpu_cnt = n_gpu if isinstance(n_gpu, int) else 1\n                devices = self.allocate_devices(model_uid=model_uid, n_gpu=gpu_cnt)\n                env[env_name] = \",\".join([str(dev) for dev in devices])\n                logger.debug(f\"GPU selected: {devices} for model {model_uid}\")\n            if n_gpu is None:\n                env[env_name] = \"-1\"\n                logger.debug(f\"GPU disabled for model {model_uid}\")\n        else:\n            assert isinstance(gpu_idx, list)\n            devices = await self.allocate_devices_with_gpu_idx(\n                model_uid, model_type, gpu_idx  # type: ignore\n            )\n            env[env_name] = \",\".join([str(dev) for dev in devices])\n\n        subpool_address = await self._main_pool.append_sub_pool(\n            env=env, start_python=start_python\n        )\n        return subpool_address, [str(dev) for dev in devices]\n\n    def _check_model_is_valid(self, model_name: str, model_format: Optional[str]):\n        # baichuan-base and baichuan-chat depend on `cpm_kernels` module,\n        # but `cpm_kernels` cannot run on Darwin system.\n        if platform.system() == \"Darwin\" and model_format == \"pytorch\":\n            if \"baichuan\" in model_name:\n                raise ValueError(f\"{model_name} model can't run on Darwin system.\")\n\n    @log_sync(logger=logger)\n    async def register_model(self, model_type: str, model: str, persist: bool):\n        # TODO: centralized model registrations\n        if model_type in self._custom_register_type_to_cls:\n            (\n                model_spec_cls,\n                register_fn,\n                unregister_fn,\n                generate_fn,\n            ) = self._custom_register_type_to_cls[model_type]\n            model_spec = model_spec_cls.parse_raw(model)\n            try:\n                register_fn(model_spec, persist)\n                await self._cache_tracker_ref.record_model_version(\n                    generate_fn(model_spec), self.address\n                )\n            except ValueError as e:\n                raise e\n            except Exception as e:\n                unregister_fn(model_spec.model_name, raise_error=False)\n                raise e\n        else:\n            raise ValueError(f\"Unsupported model type: {model_type}\")\n\n    @log_sync(logger=logger)\n    async def unregister_model(self, model_type: str, model_name: str):\n        # TODO: centralized model registrations\n        if model_type in self._custom_register_type_to_cls:\n            _, _, unregister_fn, _ = self._custom_register_type_to_cls[model_type]\n            unregister_fn(model_name, False)\n        else:\n            raise ValueError(f\"Unsupported model type: {model_type}\")\n\n    @log_async(logger=logger)\n    async def update_model_type(self, model_type: str):\n        \"\"\"\n        Update model configurations for a specific model type by downloading\n        the latest JSON from the remote API and storing it locally.\n\n        Args:\n            model_type: Type of model (LLM, embedding, image, etc.)\n        \"\"\"\n        import json\n\n        import requests\n\n        supported_types = list(self._custom_register_type_to_cls.keys())\n\n        normalized_for_validation = model_type\n        if model_type.lower() == \"llm\" and \"LLM\" in supported_types:\n            normalized_for_validation = \"LLM\"\n        elif model_type.lower() == \"llm\" and \"llm\" in supported_types:\n            normalized_for_validation = \"llm\"\n\n        if normalized_for_validation not in supported_types:\n            logger.error(f\"Unsupported model type: {normalized_for_validation}\")\n            raise ValueError(\n                f\"Unsupported model type '{model_type}'. \"\n                f\"Supported types are: {', '.join(supported_types)}\"\n            )\n\n        # Construct the URL to download JSON\n        url = f\"https://model.xinference.io/api/models/download?model_type={model_type.lower()}\"\n\n        try:\n            # Download JSON from remote API\n            response = requests.get(url, timeout=30)\n            response.raise_for_status()\n\n            # Parse JSON response\n            model_data = response.json()\n\n            # Store the JSON data using CacheManager as built-in models\n            await self._store_complete_model_configurations(model_type, model_data)\n\n            # Dynamically reload built-in models to make them immediately available\n            try:\n                if model_type.lower() == \"llm\":\n                    from ..model.llm import register_builtin_model\n\n                    register_builtin_model()\n                elif model_type.lower() == \"embedding\":\n                    from ..model.embedding import register_builtin_model\n\n                    register_builtin_model()\n                elif model_type.lower() == \"audio\":\n                    from ..model.audio import register_builtin_model\n\n                    register_builtin_model()\n                elif model_type.lower() == \"image\":\n                    from ..model.image import register_builtin_model\n\n                    register_builtin_model()\n                elif model_type.lower() == \"rerank\":\n                    from ..model.rerank import register_builtin_model\n\n                    register_builtin_model()\n                elif model_type.lower() == \"video\":\n                    from ..model.video import register_builtin_model\n\n                    register_builtin_model()\n                else:\n                    logger.warning(\n                        f\"No dynamic loading available for model type: {model_type}\"\n                    )\n            except Exception as reload_error:\n                logger.error(\n                    f\"Error reloading built-in models: {reload_error}\",\n                    exc_info=True,\n                )\n                # Don't fail the update if reload fails, just log the error\n\n        except requests.exceptions.RequestException as e:\n            logger.error(f\"Network error downloading model configurations: {e}\")\n            raise ValueError(f\"Failed to download model configurations: {str(e)}\")\n        except json.JSONDecodeError as e:\n            logger.error(f\"JSON decode error: {e}\")\n            raise ValueError(f\"Invalid JSON response from remote API: {str(e)}\")\n        except Exception as e:\n            logger.error(\n                f\"Unexpected error during model update: {e}\",\n                exc_info=True,\n            )\n            raise ValueError(f\"Failed to update model configurations: {str(e)}\")\n\n    async def _store_complete_model_configurations(self, model_type: str, model_data):\n        \"\"\"\n        Store complete model configurations as a unified JSON file.\n        This is used by update_model_type to preserve the original JSON structure.\n\n        Args:\n            model_type: Type of model (as provided by user, e.g., \"llm\")\n            model_data: JSON data containing model configurations (complete array)\n        \"\"\"\n        import json\n\n        from ..constants import XINFERENCE_MODEL_DIR\n\n        try:\n            model_type_lower = model_type.lower()\n\n            # Use the unified JSON file path (same as original update_model_type logic)\n            builtin_dir = os.path.join(\n                XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", model_type_lower\n            )\n            json_file_path = os.path.join(\n                builtin_dir, f\"{model_type_lower}_models.json\"\n            )\n\n            # Ensure directory exists\n            os.makedirs(builtin_dir, exist_ok=True)\n\n            # Store the complete JSON file (preserving original structure)\n            with open(json_file_path, \"w\", encoding=\"utf-8\") as f:\n                json.dump(model_data, f, indent=2, ensure_ascii=False)\n\n        except Exception as e:\n            logger.error(\n                f\"Error storing complete model configurations: {str(e)}\",\n                exc_info=True,\n            )\n            raise ValueError(f\"Failed to store complete model configurations: {str(e)}\")\n\n    @log_async(logger=logger)\n    async def list_model_registrations(\n        self, model_type: str, detailed: bool = False\n    ) -> List[Dict[str, Any]]:\n        def sort_helper(item):\n            assert isinstance(item[\"model_name\"], str)\n            return item.get(\"model_name\").lower()\n\n        ret = []\n\n        if model_type == \"LLM\":\n            from ..model.llm import BUILTIN_LLM_FAMILIES, get_user_defined_llm_families\n            from ..model.llm.cache_manager import LLMCacheManager\n\n            # Add built-in LLM families\n            for family in BUILTIN_LLM_FAMILIES:\n                if detailed:\n                    specs, download_hubs = self._get_spec_dicts_with_cache_status(\n                        family, LLMCacheManager\n                    )\n                    ret.append(\n                        {\n                            **family.dict(),\n                            \"model_specs\": specs,\n                            \"is_builtin\": True,\n                            \"download_hubs\": download_hubs,\n                        }\n                    )\n                else:\n                    ret.append({\"model_name\": family.model_name, \"is_builtin\": True})\n\n            # Add user-defined LLM families\n            for family in get_user_defined_llm_families():\n                if detailed:\n                    specs, download_hubs = self._get_spec_dicts_with_cache_status(\n                        family, LLMCacheManager\n                    )\n                    ret.append(\n                        {\n                            **family.dict(),\n                            \"model_specs\": specs,\n                            \"is_builtin\": False,\n                            \"download_hubs\": download_hubs,\n                        }\n                    )\n                else:\n                    ret.append({\"model_name\": family.model_name, \"is_builtin\": False})\n\n            ret.sort(key=sort_helper)\n            return ret\n        elif model_type == \"embedding\":\n            from ..model.embedding import BUILTIN_EMBEDDING_MODELS\n            from ..model.embedding.cache_manager import EmbeddingCacheManager\n            from ..model.embedding.custom import get_user_defined_embeddings\n\n            # Add built-in embedding models\n            for model_name, family_list in BUILTIN_EMBEDDING_MODELS.items():\n                for family in family_list:\n                    if detailed:\n                        specs, download_hubs = self._get_spec_dicts_with_cache_status(\n                            family, EmbeddingCacheManager\n                        )\n                        ret.append(\n                            {\n                                **family.dict(),\n                                \"model_specs\": specs,\n                                \"is_builtin\": True,\n                                \"download_hubs\": download_hubs,\n                            }\n                        )\n                    else:\n                        ret.append({\"model_name\": model_name, \"is_builtin\": True})\n\n            # Add user-defined embedding models\n            for model_spec in get_user_defined_embeddings():\n                if detailed:\n                    specs, download_hubs = self._get_spec_dicts_with_cache_status(\n                        model_spec, EmbeddingCacheManager\n                    )\n                    ret.append(\n                        {\n                            **model_spec.dict(),\n                            \"model_specs\": specs,\n                            \"is_builtin\": False,\n                            \"download_hubs\": download_hubs,\n                        }\n                    )\n                else:\n                    ret.append(\n                        {\"model_name\": model_spec.model_name, \"is_builtin\": False}\n                    )\n\n            ret.sort(key=sort_helper)\n            return ret\n        elif model_type == \"image\":\n            from ..model.image import BUILTIN_IMAGE_MODELS\n            from ..model.image.cache_manager import ImageCacheManager\n            from ..model.image.custom import get_user_defined_images\n\n            # Add built-in image models (BUILTIN_IMAGE_MODELS contains model_name -> families list)\n            for model_name, families in BUILTIN_IMAGE_MODELS.items():\n                download_hubs = []\n                for family in families:\n                    if family.model_hub not in download_hubs:\n                        download_hubs.append(family.model_hub)\n                for family in families:\n                    if detailed:\n                        cache_manager = ImageCacheManager(family)\n                        model_specs = [\n                            {\n                                \"model_format\": \"pytorch\",\n                                \"model_hub\": family.model_hub,\n                                \"model_id\": family.model_id,\n                                \"cache_status\": cache_manager.get_cache_status(),\n                            }\n                        ]\n                        ret.append(\n                            {\n                                **family.dict(),\n                                \"model_specs\": model_specs,\n                                \"is_builtin\": True,\n                                \"download_hubs\": download_hubs,\n                            }\n                        )\n                    else:\n                        ret.append({\"model_name\": model_name, \"is_builtin\": True})\n\n            # Add user-defined image models\n            for model_spec in get_user_defined_images():\n                if detailed:\n                    cache_manager = ImageCacheManager(model_spec)\n                    model_specs = [\n                        {\n                            \"model_format\": \"pytorch\",\n                            \"model_hub\": model_spec.model_hub,\n                            \"model_id\": model_spec.model_id,\n                            \"cache_status\": cache_manager.get_cache_status(),\n                        }\n                    ]\n                    ret.append(\n                        {\n                            **model_spec.dict(),\n                            \"model_specs\": model_specs,\n                            \"is_builtin\": False,\n                            \"download_hubs\": [model_spec.model_hub],\n                        }\n                    )\n                else:\n                    ret.append(\n                        {\"model_name\": model_spec.model_name, \"is_builtin\": False}\n                    )\n\n            ret.sort(key=sort_helper)\n            return ret\n        elif model_type == \"audio\":\n            from ..model.audio import BUILTIN_AUDIO_MODELS\n            from ..model.audio.custom import get_user_defined_audios\n            from ..model.cache_manager import CacheManager\n\n            # Add built-in audio models (BUILTIN_AUDIO_MODELS contains model_name -> families list)\n            for model_name, families in BUILTIN_AUDIO_MODELS.items():\n                download_hubs = []\n                for family in families:\n                    if family.model_hub not in download_hubs:\n                        download_hubs.append(family.model_hub)\n                for family in families:\n                    if detailed:\n                        audio_cache_manager = CacheManager(family)\n                        model_specs = [\n                            {\n                                \"model_format\": \"pytorch\",\n                                \"model_hub\": family.model_hub,\n                                \"model_id\": family.model_id,\n                                \"cache_status\": audio_cache_manager.get_cache_status(),\n                            }\n                        ]\n                        ret.append(\n                            {\n                                **family.dict(),\n                                \"model_specs\": model_specs,\n                                \"is_builtin\": True,\n                                \"download_hubs\": download_hubs,\n                            }\n                        )\n                    else:\n                        ret.append({\"model_name\": model_name, \"is_builtin\": True})\n\n            # Add user-defined audio models\n            for model_spec in get_user_defined_audios():\n                if detailed:\n                    audio_cache_manager = CacheManager(model_spec)\n                    model_specs = [\n                        {\n                            \"model_format\": \"pytorch\",\n                            \"model_hub\": model_spec.model_hub,\n                            \"model_id\": model_spec.model_id,\n                            \"cache_status\": audio_cache_manager.get_cache_status(),\n                        }\n                    ]\n                    ret.append(\n                        {\n                            **model_spec.dict(),\n                            \"model_specs\": model_specs,\n                            \"is_builtin\": False,\n                            \"download_hubs\": [model_spec.model_hub],\n                        }\n                    )\n                else:\n                    ret.append(\n                        {\"model_name\": model_spec.model_name, \"is_builtin\": False}\n                    )\n\n            ret.sort(key=sort_helper)\n            return ret\n        elif model_type == \"video\":\n            from ..model.cache_manager import CacheManager\n            from ..model.video import BUILTIN_VIDEO_MODELS\n\n            # Add built-in video models (BUILTIN_VIDEO_MODELS contains model_name -> families list)\n            for model_name, families in BUILTIN_VIDEO_MODELS.items():\n                download_hubs = []\n                for family in families:\n                    if family.model_hub not in download_hubs:\n                        download_hubs.append(family.model_hub)\n                for family in families:\n                    if detailed:\n                        video_cache_manager = CacheManager(family)\n                        model_specs = [\n                            {\n                                \"model_format\": \"pytorch\",\n                                \"model_hub\": family.model_hub,\n                                \"model_id\": family.model_id,\n                                \"cache_status\": video_cache_manager.get_cache_status(),\n                                \"gguf_model_id\": family.gguf_model_id,\n                                \"gguf_quantizations\": family.gguf_quantizations,\n                                \"gguf_model_file_name_template\": (\n                                    family.gguf_model_file_name_template\n                                ),\n                            }\n                        ]\n                        ret.append(\n                            {\n                                **family.dict(),\n                                \"model_specs\": model_specs,\n                                \"is_builtin\": True,\n                                \"download_hubs\": download_hubs,\n                            }\n                        )\n                    else:\n                        ret.append({\"model_name\": model_name, \"is_builtin\": True})\n\n            ret.sort(key=sort_helper)\n            return ret\n        elif model_type == \"rerank\":\n            from ..model.rerank import BUILTIN_RERANK_MODELS\n            from ..model.rerank.cache_manager import RerankCacheManager\n            from ..model.rerank.custom import get_user_defined_reranks\n\n            # Add built-in rerank models (BUILTIN_RERANK_MODELS contains model_name -> family_list list)\n            for model_name, family_list in BUILTIN_RERANK_MODELS.items():\n                for family in family_list:\n                    if detailed:\n                        specs, download_hubs = self._get_spec_dicts_with_cache_status(\n                            family, RerankCacheManager\n                        )\n                        ret.append(\n                            {\n                                **family.dict(),\n                                \"model_specs\": specs,\n                                \"is_builtin\": True,\n                                \"download_hubs\": download_hubs,\n                            }\n                        )\n                    else:\n                        ret.append({\"model_name\": model_name, \"is_builtin\": True})\n\n            # Add user-defined rerank models\n            for model_spec in get_user_defined_reranks():\n                if detailed:\n                    specs, download_hubs = self._get_spec_dicts_with_cache_status(\n                        model_spec, RerankCacheManager\n                    )\n                    ret.append(\n                        {\n                            **model_spec.dict(),\n                            \"model_specs\": specs,\n                            \"is_builtin\": False,\n                            \"download_hubs\": download_hubs,\n                        }\n                    )\n                else:\n                    ret.append(\n                        {\"model_name\": model_spec.model_name, \"is_builtin\": False}\n                    )\n\n            ret.sort(key=sort_helper)\n            return ret\n        elif model_type == \"flexible\":\n            from ..model.flexible.custom import get_flexible_models\n\n            ret = []\n\n            for model_spec in get_flexible_models():\n                if detailed:\n                    ret.append(\n                        {\n                            **model_spec.dict(),\n                            \"cache_status\": True,\n                            \"is_builtin\": False,\n                        }\n                    )\n                else:\n                    ret.append(\n                        {\"model_name\": model_spec.model_name, \"is_builtin\": False}\n                    )\n\n            ret.sort(key=sort_helper)\n            return ret\n        else:\n            raise ValueError(f\"Unsupported model type: {model_type}\")\n\n    @log_sync(logger=logger)\n    async def get_model_registration(self, model_type: str, model_name: str) -> Any:\n        if model_type == \"LLM\":\n            from ..model.llm import BUILTIN_LLM_FAMILIES, get_user_defined_llm_families\n\n            # Check built-in LLM families\n            for f in BUILTIN_LLM_FAMILIES:\n                if f.model_name == model_name:\n                    return f\n\n            # Check user-defined LLM families\n            for f in get_user_defined_llm_families():\n                if f.model_name == model_name:\n                    return f\n        elif model_type == \"embedding\":\n            from ..model.embedding import BUILTIN_EMBEDDING_MODELS\n            from ..model.embedding.custom import get_user_defined_embeddings\n\n            # Check built-in embedding models\n            for builtin_model_name, family_list in BUILTIN_EMBEDDING_MODELS.items():\n                if builtin_model_name != model_name:\n                    continue\n                for family in family_list:\n                    return self._prefer_model_hub(family)\n\n            # Check user-defined embedding models\n            for f in get_user_defined_embeddings():\n                if f.model_name == model_name:\n                    return self._prefer_model_hub(f)\n        elif model_type == \"image\":\n            from ..model.image import BUILTIN_IMAGE_MODELS\n            from ..model.image.custom import get_user_defined_images\n\n            # Check built-in image models\n            if model_name in BUILTIN_IMAGE_MODELS:\n                families = BUILTIN_IMAGE_MODELS[model_name]\n                for f in families:\n                    if f.model_hub == \"huggingface\":\n                        return f\n\n            # Check user-defined image models\n            for f in get_user_defined_images():\n                if f.model_name == model_name:\n                    return f\n        elif model_type == \"audio\":\n            from ..model.audio import BUILTIN_AUDIO_MODELS\n            from ..model.audio.custom import get_user_defined_audios\n\n            # Check built-in audio models\n            if model_name in BUILTIN_AUDIO_MODELS:\n                families = BUILTIN_AUDIO_MODELS[model_name]\n                for f in families:\n                    if f.model_hub == \"huggingface\":\n                        return f\n\n            # Check user-defined audio models\n            for f in get_user_defined_audios():\n                if f.model_name == model_name:\n                    return f\n        elif model_type == \"video\":\n            from ..model.video import BUILTIN_VIDEO_MODELS\n\n            # Check built-in video models\n            if model_name in BUILTIN_VIDEO_MODELS:\n                families = BUILTIN_VIDEO_MODELS[model_name]\n                for f in families:\n                    if f.model_hub == \"huggingface\":\n                        return f\n            return None\n        elif model_type == \"rerank\":\n            from ..model.rerank import BUILTIN_RERANK_MODELS\n            from ..model.rerank.custom import get_user_defined_reranks\n\n            # Check built-in rerank models\n            if model_name in BUILTIN_RERANK_MODELS:\n                family_list = BUILTIN_RERANK_MODELS[model_name]\n                for f in family_list:\n                    return self._prefer_model_hub(f)\n\n            # Check user-defined rerank models\n            for f in get_user_defined_reranks():\n                if f.model_name == model_name:\n                    return self._prefer_model_hub(f)\n        return None\n\n    @log_async(logger=logger)\n    async def query_engines_by_model_name(\n        self,\n        model_name: str,\n        model_type: Optional[str] = None,\n        enable_virtual_env: Optional[bool] = None,\n    ):\n        if enable_virtual_env is None:\n            enable_virtual_env = XINFERENCE_ENABLE_VIRTUAL_ENV\n        if enable_virtual_env:\n            return get_engine_params_by_name_with_virtual_env(\n                model_type, model_name, enable_virtual_env=enable_virtual_env\n            )\n        return get_engine_params_by_name(\n            model_type, model_name, enable_virtual_env=enable_virtual_env\n        )\n\n    async def _get_model_ability(self, model: Any, model_type: str) -> List[str]:\n        from ..model.llm.core import LLM\n\n        ability_map = {\n            \"embedding\": [\"embed\"],\n            \"rerank\": [\"rerank\"],\n            \"flexible\": [\"flexible\"],\n        }\n        if model_type in ability_map:\n            return ability_map[model_type]\n        if model_type in {\"image\", \"audio\", \"video\"}:\n            return model.model_ability\n        assert model_type == \"LLM\"\n        assert isinstance(model, LLM)\n        return model.model_family.model_ability  # type: ignore\n\n    async def update_cache_status(self, model_name: str, version_info: Any):\n        if isinstance(version_info, list):  # image model\n            model_path = version_info[0][\"model_file_location\"]\n            await self._cache_tracker_ref.update_cache_status(\n                self.address, model_name, None, model_path\n            )\n        else:\n            await self._cache_tracker_ref.update_cache_status(\n                self.address,\n                model_name,\n                version_info[\"model_version\"],\n                version_info[\"model_file_location\"],\n            )\n\n    @classmethod\n    def _create_virtual_env_manager(\n        cls,\n        enable_virtual_env: Optional[bool],\n        virtual_env_name: Optional[str],\n        env_path: str,\n    ) -> Optional[VirtualEnvManager]:\n        if enable_virtual_env is None:\n            enable_virtual_env = XINFERENCE_ENABLE_VIRTUAL_ENV\n\n        if not enable_virtual_env:\n            # skip preparing virtualenv\n            return None\n\n        from xoscar.virtualenv import get_virtual_env_manager\n\n        virtual_env_manager: VirtualEnvManager = get_virtual_env_manager(\n            virtual_env_name or \"uv\", env_path\n        )\n        # create env\n        python_path = None\n        if not hasattr(sys, \"_MEIPASS\"):\n            # not in pyinstaller\n            # we specify python_path explicitly\n            # sometimes uv would find other versions.\n            python_path = pathlib.Path(sys.executable)\n        virtual_env_manager.create_env(python_path=python_path)\n\n        import site as _site\n        import sysconfig as _sysconfig\n\n        if not hasattr(sys, \"_MEIPASS\"):\n            # Normal execution (pip, venv, conda, source, Docker).\n            # Inject parent site-packages via .pth so xinference and xoscar are\n            # discoverable in the child venv while preserving child-venv isolation.\n            # .pth paths are appended AFTER child site-packages so child-installed\n            # packages always take precedence over parent ones.\n            parent_site_packages = _sysconfig.get_paths()[\"purelib\"]\n\n            # Warn if xinference appears to be user-installed — child venvs\n            # cannot see user site-packages (~/.local/lib/...) by design.\n            user_site = (\n                _site.getusersitepackages()\n                if hasattr(_site, \"getusersitepackages\")\n                else None\n            )\n            if (\n                user_site\n                and not os.path.exists(os.path.join(parent_site_packages, \"xinference\"))\n                and os.path.exists(os.path.join(user_site, \"xinference\"))\n            ):\n                logger.warning(\n                    \"xinference is installed in user site-packages (%s) which is \"\n                    \"not visible to child venvs. Re-install inside a virtual \"\n                    \"environment.\",\n                    user_site,\n                )\n\n            if os.path.exists(parent_site_packages):\n                child_site_packages = pathlib.Path(virtual_env_manager.get_lib_path())\n                child_site_packages.mkdir(parents=True, exist_ok=True)\n                pth_file = child_site_packages / \"_xinference_parent.pth\"\n                pth_file.write_text(parent_site_packages + \"\\n\")\n                logger.debug(\n                    \"Injected parent site-packages into child venv via %s -> %s\",\n                    pth_file,\n                    parent_site_packages,\n                )\n            else:\n                logger.warning(\n                    \"Parent site-packages path does not exist: %s — child venv \"\n                    \"may not be able to import xinference or xoscar.\",\n                    parent_site_packages,\n                )\n        else:\n            # PyInstaller bundle: sys._MEIPASS is a private temp directory\n            # belonging to the bundle process. The child venv runs an external\n            # Python interpreter that has no access to that directory.\n            # Skip .pth injection entirely — xinference in bundle mode manages\n            # its own package visibility through the bundle mechanism.\n            logger.debug(\n                \"Running inside PyInstaller bundle — skipping parent site-packages \"\n                \"injection into child venv.\"\n            )\n\n        return virtual_env_manager\n\n    @classmethod\n    def _prepare_virtual_env(\n        cls,\n        virtual_env_manager: \"VirtualEnvManager\",\n        settings: Optional[VirtualEnvSettings],\n        virtual_env_packages: Optional[List[str]],\n        model_engine: Optional[str],\n    ):\n        engine_defaults: List[str] = []\n        if (\n            (not settings or not settings.packages)\n            and not virtual_env_packages\n            and not engine_defaults\n        ):\n            # no settings or no packages\n            return\n\n        if settings is None:\n            settings = VirtualEnvSettings(packages=virtual_env_packages or [])\n\n        assert settings is not None  # for mypy type narrowing\n\n        if settings and model_engine and model_engine.lower() not in (\"vllm\", \"sglang\"):\n            # Pydantic v1 compatibility: use copy() when model_copy is unavailable.\n            if hasattr(settings, \"model_copy\"):\n                settings = settings.model_copy(deep=True)\n            else:\n                settings = settings.copy(deep=True)\n            assert settings is not None  # for mypy type narrowing after copy\n            settings.extra_index_url = None\n            settings.index_strategy = None\n\n        if settings.inherit_pip_config:\n            # inherit pip config\n            pip_config = get_pip_config_args()\n            for k, v in pip_config.items():\n                if hasattr(settings, k) and not getattr(settings, k):\n                    setattr(settings, k, v)\n\n        apply_engine_virtualenv_settings(settings, model_engine)\n\n        base_packages = engine_defaults\n        if settings.packages:\n            base_packages = base_packages + settings.packages.copy()\n        packages = merge_virtual_env_packages(base_packages, virtual_env_packages)\n        packages = expand_engine_dependency_placeholders(packages, model_engine)\n\n        try:\n            from xoscar.virtualenv.platform import get_cuda_version\n\n            cuda_version = get_cuda_version()\n        except Exception:\n            cuda_version = None\n\n        if not cuda_version or Version(cuda_version) < Version(\"13.0\"):\n            logger.debug(\n                f\"[DEBUG] CUDA version check: cuda_version={cuda_version}, clearing extra_index_url and index_strategy\"\n            )\n            settings.extra_index_url = None\n            settings.index_strategy = None\n        else:\n            logger.debug(\n                f\"[DEBUG] CUDA version check passed: cuda_version={cuda_version}, keeping settings.extra_index_url={settings.extra_index_url}\"\n            )\n\n        packages = filter_virtualenv_packages_by_markers(\n            packages, model_engine, cuda_version\n        )\n\n        conf = dict(settings)\n        conf.pop(\"packages\", None)\n        conf.pop(\"inherit_pip_config\", None)\n        if XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED:\n            conf[\"skip_installed\"] = XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED\n        variables = {}\n        if model_engine:\n            engine_value = model_engine.lower()\n            variables[\"engine\"] = engine_value\n            variables[\"model_engine\"] = engine_value\n\n        logger.info(\n            \"Installing packages %s in virtual env %s, with settings(%s)\",\n            packages,\n            virtual_env_manager.env_path,\n            \", \".join([f\"{k}={v}\" for k, v in conf.items() if v]),\n        )\n        virtual_env_manager.install_packages(packages, **conf, **variables)\n\n    async def _get_progressor(self, request_id: str):\n        from .progress_tracker import Progressor, ProgressTrackerActor\n\n        progress_tracker_ref = self._progress_tracker_ref\n        if progress_tracker_ref is None:\n            progress_tracker_ref = self._progress_tracker_ref = await xo.actor_ref(\n                address=self._supervisor_address, uid=ProgressTrackerActor.default_uid()\n            )\n\n        progressor = Progressor(\n            request_id,\n            progress_tracker_ref,\n            asyncio.get_running_loop(),\n        )\n        await progressor.start()\n        progressor.set_progress(0.0, \"start to launch model\")\n        return progressor\n\n    @classmethod\n    def _upload_download_progress(\n        cls, progressor: \"Progressor\", downloader: CancellableDownloader\n    ):\n        while not downloader.done:\n            progress = downloader.get_progress()\n            progressor.set_progress(progress)\n            downloader.wait(1)\n\n        progressor.set_progress(1.0, \"Start to load model\")\n\n    @log_async(logger=logger, level=logging.INFO)\n    async def launch_builtin_model(\n        self,\n        model_uid: str,\n        model_name: str,\n        model_size_in_billions: Optional[Union[int, str]],\n        model_format: Optional[str],\n        quantization: Optional[str],\n        model_engine: Optional[str],\n        model_type: str = \"LLM\",\n        n_gpu: Optional[Union[int, str]] = \"auto\",\n        n_worker: Optional[int] = 1,\n        shard: Optional[int] = 0,\n        driver_info: Optional[dict] = None,\n        peft_model_config: Optional[PeftModelConfig] = None,\n        request_limits: Optional[int] = None,\n        gpu_idx: Optional[Union[int, List[int]]] = None,\n        download_hub: Optional[\n            Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n        ] = None,\n        model_path: Optional[str] = None,\n        enable_virtual_env: Optional[bool] = None,\n        virtual_env_packages: Optional[List[str]] = None,\n        envs: Optional[Dict[str, str]] = None,\n        **kwargs,\n    ):\n        # !!! Note that The following code must be placed at the very beginning of this function,\n        # or there will be problems with auto-recovery.\n        # Because `locals()` will collect all the local parameters of this function and pass to this function again.\n        launch_args = locals()\n        launch_args.pop(\"self\")\n        launch_args.pop(\"kwargs\")\n        launch_args.update(kwargs)\n\n        try:\n            origin_uid, _ = parse_replica_model_uid(model_uid)\n        except Exception as e:\n            logger.exception(e)\n            raise\n        try:\n            _ = await self.get_supervisor_ref()\n            if self._event_collector_ref is not None:\n                await self._event_collector_ref.report_event(\n                    origin_uid,\n                    Event(\n                        event_type=EventType.INFO,\n                        event_ts=int(time.time()),\n                        event_content=\"Launch model\",\n                    ),\n                )\n        except Exception as e:\n            # Report callback error can be log and ignore, should not interrupt the Process\n            logger.error(\"report_event error: %s\" % (e), exc_info=True)\n\n        if gpu_idx is not None:\n            logger.info(\n                f\"You specify to launch the model: {model_name} on GPU index: {gpu_idx} \"\n                f\"of the worker: {self.address}, \"\n                f\"xinference will automatically ignore the `n_gpu` option.\"\n            )\n            if isinstance(gpu_idx, int):\n                gpu_idx = [gpu_idx]\n            assert isinstance(gpu_idx, list)\n\n        if n_gpu is not None:\n            if isinstance(n_gpu, int) and (n_gpu <= 0 or n_gpu > gpu_count()):\n                raise ValueError(\n                    f\"The parameter `n_gpu` must be greater than 0 and \"\n                    f\"not greater than the number of GPUs: {gpu_count()} on the machine.\"\n                )\n            if isinstance(n_gpu, str) and n_gpu != \"auto\":\n                raise ValueError(\"Currently `n_gpu` only supports `auto`.\")\n\n        device = kwargs.get(\"device\")\n        if device and device.lower().startswith(\"cpu\"):\n            n_gpu = None\n\n        if peft_model_config is not None:\n            if model_type in (\"embedding\", \"rerank\"):\n                raise ValueError(\n                    f\"PEFT adaptors cannot be applied to embedding or rerank models.\"\n                )\n            if model_type == \"LLM\" and model_format in (\"ggufv2\",):\n                raise ValueError(\n                    f\"PEFT adaptors can only be applied to pytorch-like models\"\n                )\n        if model_path is not None:\n            if not os.path.exists(model_path):\n                raise ValueError(\n                    f\"Invalid input. `model_path`: {model_path} File or directory does not exist.\"\n                )\n\n        assert model_uid not in self._model_uid_to_model\n        self._check_model_is_valid(model_name, model_format)\n\n        if self.get_model_launch_status(model_uid) is not None:\n            raise ValueError(f\"{model_uid} is running\")\n\n        try:\n            self._model_uid_launching_guard[model_uid] = launch_info = LaunchInfo()\n\n            # virtualenv\n            virtual_env_name = kwargs.pop(\"virtual_env_name\", None)\n            # Use v4 structure: .xinference/virtualenv/v4/model_name/model_engine/python_version\n            python_version = f\"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}\"\n            engine_name = (model_engine or \"default\").lower()\n            virtual_env_path = os.path.join(\n                XINFERENCE_VIRTUAL_ENV_DIR,\n                \"v4\",\n                model_name,\n                engine_name,\n                python_version,\n            )\n            virtual_env_manager = await asyncio.to_thread(\n                self._create_virtual_env_manager,\n                enable_virtual_env,\n                virtual_env_name,\n                virtual_env_path,\n            )\n            subpool_python_path = resolve_virtualenv_python_path(virtual_env_manager)\n            subpool_envs = build_subpool_envs_for_virtual_env(\n                envs, enable_virtual_env, virtual_env_manager\n            )\n            subpool_address, devices = await self._create_subpool(\n                model_uid,\n                model_type,\n                n_gpu=n_gpu,\n                gpu_idx=gpu_idx,\n                start_python=subpool_python_path,\n                env=subpool_envs,\n            )\n            all_subpool_addresses = [subpool_address]\n            try:\n                xavier_config: Optional[Dict] = kwargs.pop(\"xavier_config\", None)\n                if xavier_config is not None:\n                    xavier_config[\"rank_address\"] = subpool_address\n                model_kwargs = kwargs.copy()\n                model_kwargs[\"enable_virtual_env\"] = enable_virtual_env\n                if n_worker > 1:  # type: ignore\n                    # for model across workers,\n                    # add a few kwargs\n                    model_kwargs.update(\n                        dict(\n                            address=subpool_address,\n                            n_worker=n_worker,\n                            shard=shard,\n                            driver_info=driver_info,\n                        )\n                    )\n\n                with CancellableDownloader(\n                    cancelled_event=launch_info.cancel_event\n                ) as downloader:\n                    launch_info.downloader = downloader\n                    progressor = await self._get_progressor(\"launching-\" + model_uid)\n                    # split into download and launch\n                    progressor.split_stages(2, stage_weight=[0, 0.8, 1.0])\n                    with progressor:\n                        upload_progress_task = asyncio.create_task(\n                            asyncio.to_thread(\n                                self._upload_download_progress, progressor, downloader\n                            )\n                        )\n                        model = await asyncio.to_thread(\n                            create_model_instance,\n                            model_uid,\n                            model_type,\n                            model_name,\n                            model_engine,\n                            model_format,\n                            model_size_in_billions,\n                            quantization,\n                            peft_model_config,\n                            download_hub,\n                            model_path,\n                            **model_kwargs,\n                        )\n                    model.model_family.address = subpool_address\n                    model.model_family.accelerators = devices\n                    model.model_family.multimodal_projector = model_kwargs.get(\n                        \"multimodal_projector\", None\n                    )\n                    await self.update_cache_status(\n                        model_name, model.model_family.to_version_info()\n                    )\n\n                def check_cancel():\n                    # check downloader first, sometimes download finished\n                    # cancelled already\n                    if downloader.cancelled:\n                        with progressor:\n                            # just report progress\n                            pass\n                        downloader.raise_error(error_msg=\"Launch cancelled\")\n\n                # check cancel before prepare virtual env\n                check_cancel()\n\n                # install packages in virtual env\n                if virtual_env_manager:\n                    await asyncio.to_thread(\n                        self._prepare_virtual_env,\n                        virtual_env_manager,\n                        model.model_family.virtualenv,\n                        virtual_env_packages,\n                        model_engine,\n                    )\n                    launch_info.virtual_env_manager = virtual_env_manager\n\n                # check before creating model actor\n                check_cancel()\n\n                model_ref = await xo.create_actor(\n                    ModelActor,\n                    address=subpool_address,\n                    uid=model_uid,\n                    supervisor_address=self._supervisor_address,\n                    worker_address=self.address,\n                    replica_model_uid=model_uid,\n                    model=model,\n                    request_limits=request_limits,\n                    xavier_config=xavier_config,\n                    n_worker=n_worker,\n                    shard=shard,\n                    driver_info=driver_info,\n                )\n                if await model_ref.need_create_pools() and (\n                    len(devices) > 1 or n_worker > 1  # type: ignore\n                ):\n                    coros = []\n                    env_name = get_available_device_env_name() or \"CUDA_VISIBLE_DEVICES\"\n                    env_value = \",\".join(devices)\n                    for device in devices:\n                        coros.append(\n                            self._main_pool.append_sub_pool(\n                                env={env_name: env_value},\n                                start_python=subpool_python_path,\n                            )\n                        )\n                    pool_addresses = await asyncio.gather(*coros)\n                    all_subpool_addresses.extend(pool_addresses)\n                    await model_ref.set_pool_addresses(pool_addresses)\n\n                # check before loading\n                check_cancel()\n\n                # set all subpool addresses\n                # when cancelled, all subpool addresses need to be destroyed\n                launch_info.sub_pools = all_subpool_addresses\n\n                with progressor:\n                    try:\n                        await model_ref.load()\n                    except xo.ServerClosed:\n                        check_cancel()\n                        raise\n            except Exception:\n                logger.error(f\"Failed to load model {model_uid}\", exc_info=True)\n                self.release_devices(model_uid=model_uid)\n                for addr in all_subpool_addresses:\n                    try:\n                        await self._main_pool.remove_sub_pool(addr)\n                    except KeyError:\n                        continue\n                raise\n            self._model_uid_to_model[model_uid] = model_ref\n            model_spec = model.model_family.to_description()\n            self._model_uid_to_model_spec[model_uid] = model_spec\n            self._model_uid_to_model_status[model_uid] = ModelStatus()\n            self._model_uid_to_addr[model_uid] = subpool_address\n            self._model_uid_to_recover_count.setdefault(\n                model_uid, MODEL_ACTOR_AUTO_RECOVER_LIMIT\n            )\n            self._model_uid_to_launch_args[model_uid] = launch_args\n        finally:\n            del self._model_uid_launching_guard[model_uid]\n\n        # Record virtual environment information if applicable\n        if virtual_env_manager is not None and virtual_env_path is not None:\n            try:\n                # Get package information from virtual environment settings\n                packages: List[str] = []\n                package_info: Dict[str, Any] = {}\n                if (\n                    model_spec\n                    and hasattr(model_spec, \"virtualenv\")\n                    and model_spec.virtualenv\n                ):\n                    packages = model_spec.virtualenv.packages or []\n\n                # Virtual environment tracking is no longer needed\n                logger.info(\n                    f\"Virtual environment created for model: {model.model_family.model_name}\"\n                )\n            except Exception as e:\n                logger.warning(f\"Failed to handle virtual environment info: {e}\")\n\n        # update status to READY\n        abilities = await self._get_model_ability(model, model_type)\n        _ = await self.get_supervisor_ref(add_worker=False)\n\n        if self._status_guard_ref is None:\n            _ = await self.get_supervisor_ref()\n        assert self._status_guard_ref is not None\n        await self._status_guard_ref.update_instance_info(\n            origin_uid,\n            {\"model_ability\": abilities, \"status\": LaunchStatus.READY.name},\n        )\n        if n_worker > 1 and shard == 0:  # type: ignore\n            return subpool_address, await model_ref.get_driver_info()\n        else:\n            return subpool_address\n\n    @log_async(logger=logger, level=logging.INFO)\n    async def wait_for_load(self, model_uid: str):\n        model_ref = self._model_uid_to_model[model_uid]\n        await model_ref.wait_for_load()\n\n    @log_sync(logger=logger, level=logging.INFO)\n    async def cancel_launch_model(self, model_uid: str):\n        try:\n            launch_info = self._model_uid_launching_guard[model_uid]\n\n            # downloader shared same cancel event\n            # sometimes cancel happens very early before downloader\n            # even if users cancel at this time,\n            # downloader will know and stop everything\n            launch_info.cancel_event.set()\n\n            if launch_info.downloader:\n                logger.debug(\"Try to cancel download, %s\")\n                launch_info.downloader.cancel()\n            if launch_info.virtual_env_manager:\n                launch_info.virtual_env_manager.cancel_install()\n            if launch_info.sub_pools:\n                logger.debug(\"Try to stop sub pools: %s\", launch_info.sub_pools)\n                coros = []\n                for addr in launch_info.sub_pools:\n                    coros.append(self._main_pool.remove_sub_pool(addr, force=True))\n                await asyncio.gather(*coros)\n            if self._status_guard_ref is not None:\n                await self._status_guard_ref.update_instance_info(\n                    parse_replica_model_uid(model_uid)[0],\n                    {\"status\": LaunchStatus.ERROR.name},\n                )\n        except KeyError:\n            logger.error(\"Fail to cancel launching\", exc_info=True)\n            raise RuntimeError(\n                \"Model is not launching, may have launched or not launched yet\"\n            )\n\n    @log_async(logger=logger, level=logging.INFO)\n    async def terminate_model(self, model_uid: str, is_model_die=False):\n        # Terminate model while its launching is not allow\n        if model_uid in self._model_uid_launching_guard:\n            raise ValueError(f\"{model_uid} is launching\")\n        # In special cases, if the suffix is `-rank0`, this is the Xavier's rank 0 model actor.\n        if model_uid.endswith(\"-rank0\"):\n            origin_uid = model_uid.removesuffix(\"-rank0\")\n        else:\n            origin_uid, _ = parse_replica_model_uid(model_uid)\n        try:\n            _ = await self.get_supervisor_ref()\n            if self._event_collector_ref is not None:\n                await self._event_collector_ref.report_event(\n                    origin_uid,\n                    Event(\n                        event_type=EventType.INFO,\n                        event_ts=int(time.time()),\n                        event_content=\"Terminate model\",\n                    ),\n                )\n        except Exception as e:\n            # Report callback error can be log and ignore, should not interrupt the Process\n            logger.error(\"report_event error: %s\" % (e))\n\n        if self._status_guard_ref is not None:\n            await self._status_guard_ref.update_instance_info(\n                origin_uid, {\"status\": LaunchStatus.TERMINATING.name}\n            )\n        model_ref = self._model_uid_to_model.get(model_uid, None)\n        if model_ref is None:\n            logger.debug(\"Model not found, uid: %s\", model_uid)\n\n        pool_addresses = None\n        if model_ref is not None:\n            try:\n                # pool addresses if model.need_create_pools()\n                pool_addresses = await model_ref.get_pool_addresses()\n            except Exception as e:\n                # process may disappear, we just ignore it.\n                logger.debug(\"Fail to get pool addresses, error: %s\", e)\n\n        try:\n            logger.debug(\"Start to destroy model actor: %s\", model_ref)\n            if model_ref is not None:\n                try:\n                    await model_ref.stop()\n                except Exception as e:\n                    logger.debug(\n                        \"Stop model actor failed, model uid: %s, error: %s\",\n                        model_uid,\n                        e,\n                    )\n            coro = xo.destroy_actor(model_ref)\n            # see https://github.com/xorbitsai/xoscar/pull/140\n            # asyncio.wait_for cannot work for Xoscar actor call,\n            # because when time out, the coroutine will be cancelled via raise CancelledEror,\n            # inside actor call, the error will be caught and\n            # a CancelMessage will be sent to dest actor pool,\n            # however the actor pool may be stuck already,\n            # thus the timeout will never be raised\n            await xo.wait_for(coro, timeout=5)\n        except Exception as e:\n            logger.debug(\n                \"Destroy model actor failed, model uid: %s, error: %s\", model_uid, e\n            )\n        try:\n            to_remove_addresses = []\n            subpool_address = self._model_uid_to_addr[model_uid]\n            to_remove_addresses.append(subpool_address)\n            if pool_addresses:\n                to_remove_addresses.extend(pool_addresses)\n            logger.debug(\"Remove sub pools: %s\", to_remove_addresses)\n            coros = []\n            for to_remove_addr in to_remove_addresses:\n                coros.append(\n                    self._main_pool.remove_sub_pool(to_remove_addr, force=True)\n                )\n            await asyncio.gather(*coros)\n        except Exception as e:\n            logger.debug(\n                \"Remove sub pool failed, model uid: %s, error: %s\", model_uid, e\n            )\n        finally:\n            # Clean up virtual environment tracking\n            # Virtual environment tracking is no longer needed\n\n            self._model_uid_to_model.pop(model_uid, None)\n            self._model_uid_to_model_spec.pop(model_uid, None)\n            self.release_devices(model_uid)\n            self._model_uid_to_addr.pop(model_uid, None)\n            self._model_uid_to_recover_count.pop(model_uid, None)\n            self._model_uid_to_launch_args.pop(model_uid, None)\n\n            if is_model_die:\n                status = LaunchStatus.ERROR.name\n            else:\n                status = LaunchStatus.TERMINATED.name\n                self._model_uid_to_model_status.pop(model_uid, None)\n\n            if self._status_guard_ref is None:\n                _ = await self.get_supervisor_ref()\n            assert self._status_guard_ref is not None\n            await self._status_guard_ref.update_instance_info(\n                origin_uid, {\"status\": status}\n            )\n\n    # Provide an interface for future version of supervisor to call\n    def get_model_launch_status(self, model_uid: str) -> Optional[str]:\n        \"\"\"\n        returns:\n            CREATING: model is launching\n            RREADY: model is running\n            None: model is not running (launch error might have happened)\n        \"\"\"\n\n        if model_uid in self._model_uid_launching_guard:\n            return LaunchStatus.CREATING.name\n        if model_uid in self._model_uid_to_model:\n            return LaunchStatus.READY.name\n        return None\n\n    @log_async(logger=logger)\n    async def list_models(self) -> Dict[str, Dict[str, Any]]:\n        return {k: v for k, v in self._model_uid_to_model_spec.items()}\n\n    @log_sync(logger=logger)\n    def get_model(self, model_uid: str) -> xo.ActorRefType[\"ModelActor\"]:\n        model_status = self._model_uid_to_model_status.get(model_uid)\n        if model_status and model_status.last_error:\n            raise Exception(model_status.last_error)\n        model_ref = self._model_uid_to_model.get(model_uid, None)\n        if model_ref is None:\n            raise ValueError(f\"Model not found, uid: {model_uid}\")\n        return model_ref\n\n    @log_sync(logger=logger)\n    def describe_model(self, model_uid: str) -> Dict[str, Any]:\n        model_desc = self._model_uid_to_model_spec.get(model_uid, None)\n        if model_desc is None:\n            raise ValueError(f\"Model not found in the model list, uid: {model_uid}\")\n        return model_desc\n\n    async def report_status(self):\n        status = dict()\n        try:\n            # asyncio.timeout is only available in Python >= 3.11\n            async with timeout(2):\n                status = await asyncio.to_thread(gather_node_info)\n        except asyncio.CancelledError:\n            raise\n        except Exception:\n            logger.exception(\"Report status got error.\")\n        supervisor_ref = await self.get_supervisor_ref()\n        await supervisor_ref.report_worker_status(self.address, status)\n\n    async def _periodical_report_status(self):\n        while True:\n            try:\n                await self.report_status()\n            except asyncio.CancelledError:  # pragma: no cover\n                break\n            except RuntimeError as ex:  # pragma: no cover\n                if \"cannot schedule new futures\" not in str(ex):\n                    # when atexit is triggered, the default pool might be shutdown\n                    # and to_thread will fail\n                    break\n            except (\n                Exception\n            ) as ex:  # pragma: no cover  # noqa: E722  # nosec  # pylint: disable=bare-except\n                logger.error(f\"Failed to upload node info: {ex}\")\n            try:\n                await asyncio.sleep(XINFERENCE_HEALTH_CHECK_INTERVAL)\n            except asyncio.CancelledError:  # pragma: no cover\n                break\n\n    async def list_cached_models(\n        self, model_name: Optional[str] = None\n    ) -> List[Dict[Any, Any]]:\n        lists = await self._cache_tracker_ref.list_cached_models(\n            self.address, model_name\n        )\n        cached_models = []\n        for list in lists:\n            cached_model = {\n                \"model_name\": list.get(\"model_name\"),\n                \"model_size_in_billions\": list.get(\"model_size_in_billions\"),\n                \"model_format\": list.get(\"model_format\"),\n                \"quantization\": list.get(\"quantization\"),\n                \"model_version\": list.get(\"model_version\"),\n            }\n            path = list.get(\"model_file_location\")\n            cached_model[\"path\"] = path\n            real_path = get_real_path(path)\n            if real_path:\n                cached_model[\"real_path\"] = real_path\n            cached_model[\"actor_ip_address\"] = self.address\n            cached_models.append(cached_model)\n        return cached_models\n\n    async def list_deletable_models(self, model_version: str) -> List[str]:\n        paths = set()\n        path = await self._cache_tracker_ref.list_deletable_models(\n            model_version, self.address\n        )\n        if not path:\n            return []\n\n        # Always keep the symlink itself so broken links can be unlinked.\n        if os.path.islink(path):\n            paths.add(path)\n\n        if os.path.isfile(path):\n            path = os.path.dirname(path)\n\n        if os.path.isdir(path):\n            paths.add(path)\n            files = os.listdir(path)\n            paths.update([os.path.join(path, file) for file in files])\n            # search real path\n            if paths:\n                paths.update(\n                    [\n                        real_path\n                        for path in paths\n                        if os.path.exists((real_path := os.path.realpath(path)))\n                    ]\n                )\n\n            # get tensorizer path\n            from ..model.llm.transformers.tensorizer_utils import get_tensorizer_dir\n\n            tensorizer_path = get_tensorizer_dir(path)\n            if os.path.isdir(tensorizer_path):\n                files = os.listdir(tensorizer_path)\n                paths.update([os.path.join(tensorizer_path, file) for file in files])\n\n        return list(paths)\n\n    async def confirm_and_remove_model(self, model_version: str) -> bool:\n        paths = await self.list_deletable_models(model_version)\n        for path in paths:\n            try:\n                if os.path.islink(path):\n                    os.unlink(path)\n                elif os.path.isfile(path):\n                    os.remove(path)\n                elif os.path.isdir(path):\n                    shutil.rmtree(path)\n                else:\n                    logger.debug(f\"{path} is not a valid path.\")\n            except Exception as e:\n                logger.error(f\"Fail to delete {path} with error:{e}.\")  # noqa: E231\n                return False\n\n        await self._cache_tracker_ref.confirm_and_remove_model(\n            model_version, self.address\n        )\n        return True\n\n    # Virtual environment management methods\n    async def list_virtual_envs(\n        self, model_name: Optional[str] = None, model_engine: Optional[str] = None\n    ) -> List[Dict[Any, Any]]:\n        \"\"\"List all virtual environments or filter by model name.\"\"\"\n        try:\n            result = self._virtual_env_manager.list_virtual_envs(\n                model_name, model_engine\n            )\n            # Add IP address to each virtual environment, same as cache implementation\n            virtual_envs = []\n            for env in result:\n                virtual_env = {\n                    \"model_name\": env.get(\"model_name\"),\n                    \"model_engine\": env.get(\"model_engine\"),\n                    \"path\": env.get(\"path\"),\n                    \"real_path\": env.get(\"real_path\"),\n                    \"python_version\": env.get(\"python_version\"),\n                    \"actor_ip_address\": self.address,\n                }\n                virtual_envs.append(virtual_env)\n\n            return virtual_envs\n        except Exception as e:\n            logger.error(f\"Error in list_virtual_envs: {e}\")\n            raise\n\n    async def list_virtual_env_packages(self, model_name: str) -> Dict[str, Any]:\n        \"\"\"List packages installed in a specific virtual environment.\"\"\"\n        return self._virtual_env_manager.list_virtual_env_packages(model_name)\n\n    async def remove_virtual_env(\n        self,\n        model_name: str,\n        model_engine: Optional[str] = None,\n        python_version: Optional[str] = None,\n    ) -> bool:\n        \"\"\"Remove a virtual environment for a specific model.\"\"\"\n        return self._virtual_env_manager.remove_virtual_env(\n            model_name, model_engine, python_version\n        )\n\n    async def get_workers_info(self) -> Dict[str, Any]:\n        ret = {\n            \"work-ip\": self.address,\n            \"models\": await self.list_models(),\n        }\n        return ret\n\n    def update_model_status(self, model_uid: str, **kwargs):\n        model_status = self._model_uid_to_model_status.get(model_uid)\n        if model_status is not None:\n            for k, v in kwargs.items():\n                setattr(model_status, k, v)\n\n    def get_model_status(self, model_uid: str):\n        return self._model_uid_to_model_status.get(model_uid)\n\n    @staticmethod\n    def record_metrics(name, op, kwargs):\n        record_metrics(name, op, kwargs)\n\n    async def start_transfer_for_vllm(\n        self, rep_model_uid: str, rank_addresses: List[str]\n    ):\n        model_ref = self._model_uid_to_model[rep_model_uid]\n        await model_ref.start_transfer_for_vllm(rank_addresses)\n\n    @log_async(logger=logger, level=logging.INFO)\n    async def launch_rank0_model(\n        self, rep_model_uid: str, xavier_config: Dict[str, Any]\n    ) -> Tuple[str, int]:\n        from ..model.llm.vllm.xavier.collective_manager import Rank0ModelActor\n\n        subpool_address = await self._main_pool.append_sub_pool()\n\n        store_address = subpool_address.split(\":\")[0]\n        # Note that `store_port` needs to be generated on the worker,\n        # as the TCP store is on rank 0, not on the supervisor.\n        store_port = xo.utils.get_next_port()\n        self._model_uid_launching_guard[rep_model_uid] = LaunchInfo()\n        try:\n            try:\n                xavier_config[\"rank_address\"] = subpool_address\n                xavier_config[\"store_address\"] = store_address\n                xavier_config[\"store_port\"] = store_port\n                model_ref = await xo.create_actor(\n                    Rank0ModelActor,\n                    address=subpool_address,\n                    uid=rep_model_uid,\n                    xavier_config=xavier_config,\n                )\n            except Exception:\n                await self._main_pool.remove_sub_pool(subpool_address)\n                raise\n            self._model_uid_to_model[rep_model_uid] = model_ref\n            self._model_uid_to_addr[rep_model_uid] = subpool_address\n        finally:\n            del self._model_uid_launching_guard[rep_model_uid]\n        return subpool_address, store_port\n\n    @no_type_check\n    async def recover_model(self, launch_args: Dict[str, Any]):\n        rep_model_uid = launch_args.get(\"model_uid\")\n        origin_uid, _ = parse_replica_model_uid(rep_model_uid)\n        xavier_config: Optional[Dict[str, Any]] = launch_args.get(\"xavier_config\", None)\n        is_xavier: bool = xavier_config is not None\n        supervisor_ref = await self.get_supervisor_ref(add_worker=False)\n        if is_xavier:\n            rank = xavier_config.get(\"rank\")\n            await supervisor_ref.call_collective_manager(\n                origin_uid, \"unregister_rank\", rank\n            )\n        subpool_address = await self.launch_builtin_model(**launch_args)\n        if is_xavier:\n            model_ref = self._model_uid_to_model[rep_model_uid]\n            await model_ref.start_transfer_for_vllm([])\n            rank = xavier_config.get(\"rank\")\n            await supervisor_ref.call_collective_manager(\n                origin_uid, \"register_rank\", rank, subpool_address, update=True\n            )\n"
  },
  {
    "path": "xinference/deploy/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/deploy/cmdline.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nimport os\nimport sys\nimport time\nimport warnings\nfrom typing import Dict, List, Optional, Sequence, Tuple, Union\n\nimport click\nfrom tqdm.auto import tqdm\nfrom xoscar.utils import get_next_port\n\nfrom .. import __version__\nfrom ..client import RESTfulClient\nfrom ..client.restful.restful_client import (\n    RESTfulChatModelHandle,\n    RESTfulGenerateModelHandle,\n)\nfrom ..constants import (\n    XINFERENCE_AUTH_DIR,\n    XINFERENCE_DEFAULT_DISTRIBUTED_HOST,\n    XINFERENCE_DEFAULT_ENDPOINT_PORT,\n    XINFERENCE_DEFAULT_LOCAL_HOST,\n    XINFERENCE_ENV_ENDPOINT,\n    XINFERENCE_LOG_BACKUP_COUNT,\n    XINFERENCE_LOG_MAX_BYTES,\n)\nfrom ..isolation import Isolation\nfrom .utils import (\n    get_config_dict,\n    get_log_file,\n    get_timestamp_ms,\n    handle_click_args_type,\n    set_envs,\n)\n\ntry:\n    # provide elaborate line editing and history features.\n    # https://docs.python.org/3/library/functions.html#input\n    import readline  # noqa: F401\nexcept ImportError:\n    pass\n\n\ndef get_endpoint(endpoint: Optional[str]) -> str:\n    # user didn't specify the endpoint.\n    if endpoint is None:\n        if XINFERENCE_ENV_ENDPOINT in os.environ:\n            return os.environ[XINFERENCE_ENV_ENDPOINT]\n        else:\n            default_endpoint = f\"http://{XINFERENCE_DEFAULT_LOCAL_HOST}:{XINFERENCE_DEFAULT_ENDPOINT_PORT}\"\n            return default_endpoint\n    else:\n        return endpoint\n\n\ndef get_hash_endpoint(endpoint: str) -> str:\n    import hashlib\n\n    m = hashlib.sha256()\n    m.update(bytes(endpoint, \"utf-8\"))\n    return m.hexdigest()\n\n\ndef get_stored_token(\n    endpoint: str, client: Optional[RESTfulClient] = None\n) -> Optional[str]:\n    rest_client = RESTfulClient(endpoint) if client is None else client\n    authed = rest_client._cluster_authed\n    if not authed:\n        return None\n\n    token_path = os.path.join(XINFERENCE_AUTH_DIR, get_hash_endpoint(endpoint))\n    if not os.path.exists(token_path):\n        raise RuntimeError(\"Cannot find access token, please login first!\")\n    with open(token_path, \"r\") as f:\n        access_token = str(f.read())\n    return access_token\n\n\ndef start_local_cluster(\n    log_level: str,\n    host: str,\n    port: int,\n    metrics_exporter_host: Optional[str] = None,\n    metrics_exporter_port: Optional[int] = None,\n    auth_config_file: Optional[str] = None,\n):\n    from .local import main\n\n    dict_config = get_config_dict(\n        log_level,\n        get_log_file(f\"local_{get_timestamp_ms()}\"),\n        XINFERENCE_LOG_BACKUP_COUNT,\n        XINFERENCE_LOG_MAX_BYTES,\n    )\n    logging.config.dictConfig(dict_config)  # type: ignore\n    # refer to https://huggingface.co/docs/transformers/main_classes/logging\n    set_envs(\"TRANSFORMERS_VERBOSITY\", log_level.lower())\n\n    main(\n        host=host,\n        port=port,\n        metrics_exporter_host=metrics_exporter_host,\n        metrics_exporter_port=metrics_exporter_port,\n        logging_conf=dict_config,\n        auth_config_file=auth_config_file,\n    )\n\n\n@click.group(\n    invoke_without_command=True,\n    name=\"xinference\",\n    help=\"Xinference command-line interface for serving and deploying models.\",\n)\n@click.pass_context\n@click.version_option(\n    __version__,\n    \"--version\",\n    \"-v\",\n    help=\"Show the current version of the Xinference tool.\",\n)\n@click.option(\n    \"--log-level\",\n    default=\"INFO\",\n    type=str,\n    help=\"\"\"Set the logger level. Options listed from most log to least log are:\n              DEBUG > INFO > WARNING > ERROR > CRITICAL (Default level is INFO)\"\"\",\n)\n@click.option(\n    \"--host\",\n    \"-H\",\n    default=XINFERENCE_DEFAULT_LOCAL_HOST,\n    type=str,\n    help=\"Specify the host address for the Xinference server.\",\n)\n@click.option(\n    \"--port\",\n    \"-p\",\n    default=XINFERENCE_DEFAULT_ENDPOINT_PORT,\n    type=int,\n    help=\"Specify the port number for the Xinference server.\",\n)\ndef cli(\n    ctx,\n    log_level: str,\n    host: str,\n    port: int,\n):\n    if ctx.invoked_subcommand is None:\n        # Save the current state of the warning filter.\n        with warnings.catch_warnings():\n            warnings.simplefilter(\"always\", DeprecationWarning)\n            warnings.warn(\n                \"Starting a local 'xinference' cluster via the 'xinference' command line is \"\n                \"deprecated and will be removed in a future release. Please use the new \"\n                \"'xinference-local' command.\",\n                category=DeprecationWarning,\n            )\n\n        start_local_cluster(log_level=log_level, host=host, port=port)\n\n\n@click.command(help=\"Starts an Xinference local cluster.\")\n@click.option(\n    \"--log-level\",\n    default=\"INFO\",\n    type=str,\n    help=\"\"\"Set the logger level. Options listed from most log to least log are:\n              DEBUG > INFO > WARNING > ERROR > CRITICAL (Default level is INFO)\"\"\",\n)\n@click.option(\n    \"--host\",\n    \"-H\",\n    default=XINFERENCE_DEFAULT_LOCAL_HOST,\n    type=str,\n    help=\"Specify the host address for the Xinference server.\",\n)\n@click.option(\n    \"--port\",\n    \"-p\",\n    default=XINFERENCE_DEFAULT_ENDPOINT_PORT,\n    type=int,\n    help=\"Specify the port number for the Xinference server.\",\n)\n@click.option(\n    \"--metrics-exporter-host\",\n    \"-MH\",\n    default=None,\n    type=str,\n    help=\"Specify the host address for the Xinference metrics exporter server, default is the same as --host.\",\n)\n@click.option(\n    \"--metrics-exporter-port\",\n    \"-mp\",\n    type=int,\n    help=\"Specify the port number for the Xinference metrics exporter server.\",\n)\n@click.option(\n    \"--auth-config\",\n    type=str,\n    help=\"Specify the auth config json file.\",\n)\ndef local(\n    log_level: str,\n    host: str,\n    port: int,\n    metrics_exporter_host: Optional[str],\n    metrics_exporter_port: Optional[int],\n    auth_config: Optional[str],\n):\n    if metrics_exporter_host is None:\n        metrics_exporter_host = host\n    start_local_cluster(\n        log_level=log_level,\n        host=host,\n        port=port,\n        metrics_exporter_host=metrics_exporter_host,\n        metrics_exporter_port=metrics_exporter_port,\n        auth_config_file=auth_config,\n    )\n\n\n@click.command(\n    help=\"Starts an Xinference supervisor to control and monitor the worker actors.\"\n)\n@click.option(\n    \"--log-level\",\n    default=\"INFO\",\n    type=str,\n    help=\"\"\"Set the logger level for the supervisor. Options listed from most log to least log are:\n              DEBUG > INFO > WARNING > ERROR > CRITICAL (Default level is INFO)\"\"\",\n)\n@click.option(\n    \"--host\",\n    \"-H\",\n    default=XINFERENCE_DEFAULT_DISTRIBUTED_HOST,\n    type=str,\n    help=\"Specify the host address for the supervisor.\",\n)\n@click.option(\n    \"--port\",\n    \"-p\",\n    default=XINFERENCE_DEFAULT_ENDPOINT_PORT,\n    type=int,\n    help=\"Specify the port number for the Xinference web ui and service.\",\n)\n@click.option(\n    \"--supervisor-port\",\n    type=int,\n    help=\"Specify the port number for the Xinference supervisor.\",\n)\n@click.option(\n    \"--auth-config\",\n    type=str,\n    help=\"Specify the auth config json file.\",\n)\ndef supervisor(\n    log_level: str,\n    host: str,\n    port: int,\n    supervisor_port: Optional[int],\n    auth_config: Optional[str],\n):\n    from ..deploy.supervisor import main\n\n    dict_config = get_config_dict(\n        log_level,\n        get_log_file(f\"supervisor_{get_timestamp_ms()}\"),\n        XINFERENCE_LOG_BACKUP_COUNT,\n        XINFERENCE_LOG_MAX_BYTES,\n    )\n    logging.config.dictConfig(dict_config)  # type: ignore\n    set_envs(\"TRANSFORMERS_VERBOSITY\", log_level.lower())\n\n    main(\n        host=host,\n        port=port,\n        supervisor_port=supervisor_port,\n        logging_conf=dict_config,\n        auth_config_file=auth_config,\n    )\n\n\n@click.command(\n    help=\"Starts an Xinference worker to execute tasks assigned by the supervisor in a distributed setup.\"\n)\n@click.option(\n    \"--log-level\",\n    default=\"INFO\",\n    type=str,\n    help=\"\"\"Set the logger level for the worker. Options listed from most log to least log are:\n              DEBUG > INFO > WARNING > ERROR > CRITICAL (Default level is INFO)\"\"\",\n)\n@click.option(\"--endpoint\", \"-e\", type=str, help=\"Xinference endpoint.\")\n@click.option(\n    \"--host\",\n    \"-H\",\n    default=XINFERENCE_DEFAULT_DISTRIBUTED_HOST,\n    type=str,\n    help=\"Specify the host address for the worker.\",\n)\n@click.option(\n    \"--worker-port\",\n    type=int,\n    help=\"Specify the port number for the Xinference worker.\",\n)\n@click.option(\n    \"--metrics-exporter-host\",\n    \"-MH\",\n    default=XINFERENCE_DEFAULT_DISTRIBUTED_HOST,\n    type=str,\n    help=\"Specify the host address for the metrics exporter server.\",\n)\n@click.option(\n    \"--metrics-exporter-port\",\n    type=int,\n    help=\"Specify the port number for the Xinference metrics exporter worker.\",\n)\ndef worker(\n    log_level: str,\n    endpoint: Optional[str],\n    host: str,\n    worker_port: Optional[int],\n    metrics_exporter_host: Optional[str],\n    metrics_exporter_port: Optional[int],\n):\n    from ..deploy.worker import main\n\n    dict_config = get_config_dict(\n        log_level,\n        get_log_file(f\"worker_{get_timestamp_ms()}\"),\n        XINFERENCE_LOG_BACKUP_COUNT,\n        XINFERENCE_LOG_MAX_BYTES,\n    )\n    logging.config.dictConfig(dict_config)  # type: ignore\n    set_envs(\"TRANSFORMERS_VERBOSITY\", log_level.lower())\n\n    endpoint = get_endpoint(endpoint)\n\n    client = RESTfulClient(base_url=endpoint)\n    supervisor_internal_addr = client._get_supervisor_internal_address()\n\n    address = f\"{host}:{worker_port or get_next_port()}\"\n    main(\n        address=address,\n        supervisor_address=supervisor_internal_addr,\n        metrics_exporter_host=metrics_exporter_host,\n        metrics_exporter_port=metrics_exporter_port,\n        logging_conf=dict_config,\n    )\n\n\n@cli.command(\"register\", help=\"Register a new model with Xinference for deployment.\")\n@click.option(\"--endpoint\", \"-e\", type=str, help=\"Xinference endpoint.\")\n@click.option(\n    \"--model-type\",\n    \"-t\",\n    default=\"LLM\",\n    type=str,\n    help=\"Type of model to register (default is 'LLM').\",\n)\n@click.option(\"--file\", \"-f\", type=str, help=\"Path to the model configuration file.\")\n@click.option(\n    \"--worker-ip\", \"-w\", type=str, help=\"Specify the ip address of the worker.\"\n)\n@click.option(\n    \"--persist\",\n    \"-p\",\n    is_flag=True,\n    help=\"Persist the model configuration to the filesystem, retains the model registration after server restarts.\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef register_model(\n    endpoint: Optional[str],\n    model_type: str,\n    file: str,\n    worker_ip: str,\n    persist: bool,\n    api_key: Optional[str],\n):\n    endpoint = get_endpoint(endpoint)\n    with open(file) as fd:\n        model = fd.read()\n\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n    client.register_model(\n        model_type=model_type,\n        model=model,\n        worker_ip=worker_ip,\n        persist=persist,\n    )\n\n\n@cli.command(\n    \"unregister\",\n    help=\"Unregister a model from Xinference, removing it from deployment.\",\n)\n@click.option(\"--endpoint\", \"-e\", type=str, help=\"Xinference endpoint.\")\n@click.option(\n    \"--model-type\",\n    \"-t\",\n    default=\"LLM\",\n    type=str,\n    help=\"Type of model to unregister (default is 'LLM').\",\n)\n@click.option(\"--model-name\", \"-n\", type=str, help=\"Name of the model to unregister.\")\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef unregister_model(\n    endpoint: Optional[str],\n    model_type: str,\n    model_name: str,\n    api_key: Optional[str],\n):\n    endpoint = get_endpoint(endpoint)\n\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n    client.unregister_model(\n        model_type=model_type,\n        model_name=model_name,\n    )\n\n\n@cli.command(\"registrations\", help=\"List all registered models in Xinference.\")\n@click.option(\n    \"--endpoint\",\n    \"-e\",\n    type=str,\n    help=\"Xinference endpoint.\",\n)\n@click.option(\n    \"--model-type\",\n    \"-t\",\n    default=\"LLM\",\n    type=str,\n    help=\"Filter by model type (default is 'LLM').\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef list_model_registrations(\n    endpoint: Optional[str],\n    model_type: str,\n    api_key: Optional[str],\n):\n    from tabulate import tabulate\n\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n\n    registrations = client.list_model_registrations(model_type=model_type)\n\n    table = []\n    if model_type == \"LLM\":\n        for registration in registrations:\n            model_name = registration[\"model_name\"]\n            model_family = client.get_model_registration(model_type, model_name)\n            table.append(\n                [\n                    model_type,\n                    model_family[\"model_name\"],\n                    model_family[\"model_lang\"],\n                    model_family[\"model_ability\"],\n                    registration[\"is_builtin\"],\n                ]\n            )\n        print(\n            tabulate(\n                table, headers=[\"Type\", \"Name\", \"Language\", \"Ability\", \"Is-built-in\"]\n            ),\n            file=sys.stderr,\n        )\n    elif model_type == \"embedding\":\n        for registration in registrations:\n            model_name = registration[\"model_name\"]\n            model_family = client.get_model_registration(model_type, model_name)\n            table.append(\n                [\n                    model_type,\n                    model_family[\"model_name\"],\n                    model_family[\"language\"],\n                    model_family[\"dimensions\"],\n                    registration[\"is_builtin\"],\n                ]\n            )\n        print(\n            tabulate(\n                table, headers=[\"Type\", \"Name\", \"Language\", \"Dimensions\", \"Is-built-in\"]\n            ),\n            file=sys.stderr,\n        )\n    elif model_type == \"rerank\":\n        for registration in registrations:\n            model_name = registration[\"model_name\"]\n            model_family = client.get_model_registration(model_type, model_name)\n            table.append(\n                [\n                    model_type,\n                    model_family[\"model_name\"],\n                    model_family[\"language\"],\n                    registration[\"is_builtin\"],\n                ]\n            )\n        print(\n            tabulate(table, headers=[\"Type\", \"Name\", \"Language\", \"Is-built-in\"]),\n            file=sys.stderr,\n        )\n    elif model_type == \"image\":\n        for registration in registrations:\n            model_name = registration[\"model_name\"]\n            model_family = client.get_model_registration(model_type, model_name)\n            table.append(\n                [\n                    model_type,\n                    model_family[\"model_name\"],\n                    model_family[\"model_family\"],\n                    registration[\"is_builtin\"],\n                ]\n            )\n        print(\n            tabulate(table, headers=[\"Type\", \"Name\", \"Family\", \"Is-built-in\"]),\n            file=sys.stderr,\n        )\n    elif model_type == \"audio\":\n        for registration in registrations:\n            model_name = registration[\"model_name\"]\n            model_family = client.get_model_registration(model_type, model_name)\n            table.append(\n                [\n                    model_type,\n                    model_family[\"model_name\"],\n                    model_family[\"model_family\"],\n                    model_family[\"multilingual\"],\n                    registration[\"is_builtin\"],\n                ]\n            )\n        print(\n            tabulate(\n                table, headers=[\"Type\", \"Name\", \"Family\", \"Multilingual\", \"Is-built-in\"]\n            ),\n            file=sys.stderr,\n        )\n    elif model_type == \"flexible\":\n        for registration in registrations:\n            model_name = registration[\"model_name\"]\n            model_family = client.get_model_registration(model_type, model_name)\n            table.append(\n                [\n                    model_type,\n                    model_family[\"model_name\"],\n                    registration[\"is_builtin\"],\n                ]\n            )\n        print(\n            tabulate(table, headers=[\"Type\", \"Name\", \"Is-built-in\"]),\n            file=sys.stderr,\n        )\n    else:\n        raise NotImplementedError(f\"List {model_type} is not implemented.\")\n\n\n@cli.command(\"cached\", help=\"List all cached models in Xinference.\")\n@click.option(\n    \"--endpoint\",\n    \"-e\",\n    type=str,\n    help=\"Xinference endpoint.\",\n)\n@click.option(\n    \"--model_name\",\n    \"-n\",\n    type=str,\n    help=\"Provide the name of the models to be removed.\",\n)\n@click.option(\n    \"--worker-ip\",\n    default=None,\n    type=str,\n    help=\"Specify which worker this model runs on by ip, for distributed situation.\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef list_cached_models(\n    endpoint: Optional[str],\n    api_key: Optional[str],\n    model_name: Optional[str],\n    worker_ip: Optional[str],\n):\n    from tabulate import tabulate\n\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n\n    cached_models = client.list_cached_models(model_name, worker_ip)\n    if not cached_models:\n        print(\"There are no cache files.\")\n        return\n    headers = list(cached_models[0].keys())\n\n    print(\"cached_model: \")\n    table_data = []\n    for model in cached_models:\n        row_data = [\n            str(value) if value is not None else \"-\" for value in model.values()\n        ]\n        table_data.append(row_data)\n    print(tabulate(table_data, headers=headers, tablefmt=\"pretty\"))\n\n\n@cli.command(\"remove-cache\", help=\"Remove selected cached models in Xinference.\")\n@click.option(\n    \"--endpoint\",\n    \"-e\",\n    type=str,\n    help=\"Xinference endpoint.\",\n)\n@click.option(\n    \"--model_version\",\n    \"-n\",\n    type=str,\n    help=\"Provide the version of the models to be removed.\",\n)\n@click.option(\n    \"--worker-ip\",\n    default=None,\n    type=str,\n    help=\"Specify which worker this model runs on by ip, for distributed situation.\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\n@click.option(\"--check\", is_flag=True, help=\"Confirm the deletion of the cache.\")\ndef remove_cache(\n    endpoint: Optional[str],\n    model_version: str,\n    api_key: Optional[str],\n    check: bool,\n    worker_ip: Optional[str] = None,\n):\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n\n    if not check:\n        response = client.list_deletable_models(\n            model_version=model_version, worker_ip=worker_ip\n        )\n        paths: List[str] = response.get(\"paths\", [])\n        if not paths:\n            click.echo(f\"There is no model version named {model_version}.\")\n            return\n        click.echo(f\"Model {model_version} cache directory to be deleted:\")\n        for path in response.get(\"paths\", []):\n            click.echo(f\"{path}\")\n\n        if click.confirm(\"Do you want to proceed with the deletion?\", abort=True):\n            check = True\n    try:\n        result = client.confirm_and_remove_model(\n            model_version=model_version, worker_ip=worker_ip\n        )\n        if result:\n            click.echo(f\"Cache directory {model_version} has been deleted.\")\n        else:\n            click.echo(\n                f\"Cache directory {model_version} fail to be deleted. Please check the log.\"\n            )\n    except Exception as e:\n        click.echo(f\"An error occurred while deleting the cache: {e}\")\n\n\n@cli.command(\n    \"launch\",\n    help=\"Launch a model with the Xinference framework with the given parameters.\",\n    context_settings=dict(\n        ignore_unknown_options=True,\n        allow_extra_args=True,\n    ),\n)\n@click.option(\n    \"--endpoint\",\n    \"-e\",\n    type=str,\n    help=\"Xinference endpoint.\",\n)\n@click.option(\n    \"--model-name\",\n    \"-n\",\n    type=str,\n    required=True,\n    help=\"Provide the name of the model to be launched.\",\n)\n@click.option(\n    \"--model-type\",\n    \"-t\",\n    type=str,\n    default=\"LLM\",\n    help=\"Specify type of model, LLM as default.\",\n)\n@click.option(\n    \"--model-engine\",\n    \"-en\",\n    type=str,\n    default=None,\n    help=\"Specify the inference engine of the model when launching LLM.\",\n)\n@click.option(\n    \"--model-uid\",\n    \"-u\",\n    type=str,\n    default=None,\n    help=\"Specify UID of model, default is None.\",\n)\n@click.option(\n    \"--size-in-billions\",\n    \"-s\",\n    default=None,\n    type=str,\n    help=\"Specify the model size in billions of parameters.\",\n)\n@click.option(\n    \"--model-format\",\n    \"-f\",\n    default=None,\n    type=str,\n    help=\"Specify the format of the model, e.g. pytorch, ggufv2, etc.\",\n)\n@click.option(\n    \"--quantization\",\n    \"-q\",\n    default=None,\n    type=str,\n    help=\"Define the quantization settings for the model.\",\n)\n@click.option(\n    \"--replica\",\n    \"-r\",\n    default=1,\n    type=int,\n    help=\"The replica count of the model, default is 1.\",\n)\n@click.option(\n    \"--n-worker\",\n    default=1,\n    type=int,\n    help=\"The number of workers used by the model, default is 1.\",\n)\n@click.option(\n    \"--n-gpu\",\n    default=\"auto\",\n    type=str,\n    help='The number of GPUs used by the model, if n_worker>1, means number of GPUs per worker, default is \"auto\".',\n)\n@click.option(\n    \"--lora-modules\",\n    \"-lm\",\n    multiple=True,\n    type=(str, str),\n    help=\"LoRA module configurations in the format name=path. Multiple modules can be specified.\",\n)\n@click.option(\n    \"--image-lora-load-kwargs\",\n    \"-ld\",\n    \"image_lora_load_kwargs\",\n    type=(str, str),\n    multiple=True,\n)\n@click.option(\n    \"--image-lora-fuse-kwargs\",\n    \"-fd\",\n    \"image_lora_fuse_kwargs\",\n    type=(str, str),\n    multiple=True,\n)\n@click.option(\n    \"--quantization-config\",\n    \"-qc\",\n    \"quantization_config\",\n    type=(str, str),\n    multiple=True,\n    help=\"bnb quantization config for `transformers` engine.\",\n)\n@click.option(\n    \"--worker-ip\",\n    default=None,\n    type=str,\n    help=\"Specify which worker this model runs on by ip, for distributed situation.\",\n)\n@click.option(\n    \"--gpu-idx\",\n    default=None,\n    type=str,\n    help=\"Specify which GPUs of a worker this model can run on, separated with commas.\",\n)\n@click.option(\n    \"--trust-remote-code\",\n    default=True,\n    type=bool,\n    help=\"Whether or not to allow for custom models defined on the Hub in their own modeling files.\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\n@click.option(\"--model-path\", \"-mp\", default=None, type=str, help=\"Model path to run.\")\n@click.option(\n    \"--enable-thinking\",\n    \"enable_thinking\",\n    flag_value=True,\n    default=None,\n    help=\"Enable thinking mode for hybrid reasoning LLMs (e.g., Qwen3).\",\n)\n@click.option(\n    \"--enable-virtual-env\",\n    is_flag=True,\n    default=None,\n    flag_value=True,\n    help=\"Enable virtual environment when launching the model. If not set, defaults to None.\",\n)\n@click.option(\n    \"--disable-virtual-env\",\n    \"enable_virtual_env\",\n    default=None,\n    flag_value=False,\n    help=\"Disable virtual environment.\",\n)\n@click.option(\n    \"--virtual-env-package\",\n    \"-vp\",\n    multiple=True,\n    type=str,\n    help=\"Packages to install in the virtual environment. Can be used multiple times.\",\n)\n@click.option(\n    \"--env\",\n    \"-ev\",\n    multiple=True,\n    type=(str, str),\n    help=\"Environment variables in KEY VALUE format. Can be used multiple times.\",\n)\n@click.pass_context\ndef model_launch(\n    ctx,\n    endpoint: Optional[str],\n    model_name: str,\n    model_type: str,\n    model_engine: Optional[str],\n    model_uid: str,\n    size_in_billions: str,\n    model_format: str,\n    quantization: str,\n    replica: int,\n    n_worker: int,\n    n_gpu: str,\n    lora_modules: Optional[Tuple],\n    image_lora_load_kwargs: Optional[Tuple],\n    image_lora_fuse_kwargs: Optional[Tuple],\n    worker_ip: Optional[str],\n    gpu_idx: Optional[str],\n    trust_remote_code: bool,\n    api_key: Optional[str],\n    model_path: Optional[str],\n    quantization_config: Optional[Tuple],\n    enable_thinking: Optional[bool],\n    enable_virtual_env: Optional[bool],\n    virtual_env_package: Optional[Tuple[str]],\n    env: Optional[Tuple[Tuple[str, str]]],\n):\n    kwargs = {}\n    for i in range(0, len(ctx.args), 2):\n        if not ctx.args[i].startswith(\"--\"):\n            raise ValueError(\n                f\"You must specify extra kwargs with `--` prefix. \"\n                f\"There is an error in parameter passing that is {ctx.args[i]}.\"\n            )\n        param_name = ctx.args[i][2:]\n        param_value = handle_click_args_type(ctx.args[i + 1])\n        if param_name == \"model_path\":\n            # fix for --model_path which is the old fashion to set model_path,\n            # now model_path is a builtin option, try to make it compatible\n            if model_path is None:\n                model_path = param_value\n                continue\n            else:\n                raise ValueError(\"Cannot set both for --model-path and --model_path\")\n        kwargs[param_name] = param_value\n    print(f\"Launch model name: {model_name} with kwargs: {kwargs}\", file=sys.stderr)\n\n    if model_type == \"LLM\" and model_engine is None:\n        raise ValueError(\"--model-engine is required for LLM models.\")\n\n    if n_gpu.lower() == \"none\":\n        _n_gpu: Optional[Union[int, str]] = None\n    elif n_gpu == \"auto\":\n        _n_gpu = n_gpu\n    else:\n        _n_gpu = int(n_gpu)\n\n    bnb_quantization_config = (\n        {k: handle_click_args_type(v) for k, v in dict(quantization_config).items()}\n        if quantization_config\n        else None\n    )\n\n    image_lora_load_params = (\n        {k: handle_click_args_type(v) for k, v in dict(image_lora_load_kwargs).items()}\n        if image_lora_load_kwargs\n        else None\n    )\n    image_lora_fuse_params = (\n        {k: handle_click_args_type(v) for k, v in dict(image_lora_fuse_kwargs).items()}\n        if image_lora_fuse_kwargs\n        else None\n    )\n\n    lora_list = (\n        [{\"lora_name\": k, \"local_path\": v} for k, v in dict(lora_modules).items()]\n        if lora_modules\n        else []\n    )\n\n    peft_model_config = (\n        {\n            \"image_lora_load_kwargs\": image_lora_load_params,\n            \"image_lora_fuse_kwargs\": image_lora_fuse_params,\n            \"lora_list\": lora_list,\n        }\n        if lora_list or image_lora_load_params or image_lora_fuse_params\n        else None\n    )\n\n    _gpu_idx: Optional[List[int]] = (\n        None if gpu_idx is None else [int(idx) for idx in gpu_idx.split(\",\")]\n    )\n\n    endpoint = get_endpoint(endpoint)\n    model_size: Optional[Union[str, int]] = (\n        size_in_billions\n        if size_in_billions is None\n        or \"_\" in size_in_billions\n        or \".\" in size_in_billions\n        else int(size_in_billions)\n    )\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n\n    # do not wait for launching.\n    kwargs[\"wait_ready\"] = False\n    if bnb_quantization_config:\n        kwargs[\"quantization_config\"] = {**bnb_quantization_config}\n\n    model_uid = client.launch_model(\n        model_name=model_name,\n        model_type=model_type,\n        model_engine=model_engine,\n        model_uid=model_uid,\n        model_size_in_billions=model_size,\n        model_format=model_format,\n        quantization=quantization,\n        replica=replica,\n        n_worker=n_worker,\n        n_gpu=_n_gpu,\n        peft_model_config=peft_model_config,\n        worker_ip=worker_ip,\n        gpu_idx=_gpu_idx,\n        trust_remote_code=trust_remote_code,\n        model_path=model_path,\n        enable_thinking=enable_thinking,\n        enable_virtual_env=enable_virtual_env,\n        virtual_env_packages=list(virtual_env_package) if virtual_env_package else None,\n        envs=dict(env) if env else None,\n        **kwargs,\n    )\n    try:\n        with tqdm(\n            total=100, desc=\"Launching model\", bar_format=\"{l_bar}{bar} | {n:.1f}%\"\n        ) as pbar:\n            while True:\n                status = client.get_instance_info(model_name, model_uid)\n                if all(s[\"status\"] in [\"READY\", \"ERROR\", \"TERMINATED\"] for s in status):\n                    break\n\n                progress = client.get_launch_model_progress(model_uid)[\"progress\"]\n                percent = max(round(progress * 100, 1), pbar.n)\n\n                pbar.update(percent - pbar.n)\n\n                time.sleep(0.5)\n\n            # setting to 100%\n            pbar.update(pbar.total - pbar.n)\n\n        print(f\"Model uid: {model_uid}\", file=sys.stderr)\n    except KeyboardInterrupt:\n        user_input = (\n            input(\"Do you want to cancel model launching? (y/[n]): \").strip().lower()\n        )\n        if user_input == \"y\":\n            client.cancel_launch_model(model_uid)\n            print(f\"Cancel request sent: {model_uid}\")\n        else:\n            print(\"Skip cancel, launching model will be running still.\")\n\n\n@cli.command(\n    \"list\",\n    help=\"List all running models in Xinference.\",\n)\n@click.option(\n    \"--endpoint\",\n    \"-e\",\n    type=str,\n    help=\"Xinference endpoint.\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef model_list(endpoint: Optional[str], api_key: Optional[str]):\n    from tabulate import tabulate\n\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n\n    llm_table = []\n    embedding_table = []\n    rerank_table = []\n    image_table = []\n    audio_table = []\n    models = client.list_models()\n    for model_uid, model_spec in models.items():\n        if model_spec[\"model_type\"] == \"LLM\":\n            llm_table.append(\n                [\n                    model_uid,\n                    model_spec[\"model_type\"],\n                    model_spec[\"model_name\"],\n                    model_spec[\"model_format\"],\n                    model_spec[\"model_size_in_billions\"],\n                    model_spec[\"quantization\"],\n                ]\n            )\n        elif model_spec[\"model_type\"] == \"embedding\":\n            embedding_table.append(\n                [\n                    model_uid,\n                    model_spec[\"model_type\"],\n                    model_spec[\"model_name\"],\n                    model_spec[\"dimensions\"],\n                ]\n            )\n        elif model_spec[\"model_type\"] == \"rerank\":\n            rerank_table.append(\n                [model_uid, model_spec[\"model_type\"], model_spec[\"model_name\"]]\n            )\n        elif model_spec[\"model_type\"] == \"image\":\n            image_table.append(\n                [\n                    model_uid,\n                    model_spec[\"model_type\"],\n                    model_spec[\"model_name\"],\n                    str(model_spec[\"controlnet\"]),\n                ]\n            )\n        elif model_spec[\"model_type\"] == \"audio\":\n            audio_table.append(\n                [model_uid, model_spec[\"model_type\"], model_spec[\"model_name\"]]\n            )\n    if llm_table:\n        print(\n            tabulate(\n                llm_table,\n                headers=[\n                    \"UID\",\n                    \"Type\",\n                    \"Name\",\n                    \"Format\",\n                    \"Size (in billions)\",\n                    \"Quantization\",\n                ],\n            ),\n            file=sys.stderr,\n        )\n        print()  # add a blank line for better visual experience\n    if embedding_table:\n        print(\n            tabulate(\n                embedding_table,\n                headers=[\n                    \"UID\",\n                    \"Type\",\n                    \"Name\",\n                    \"Dimensions\",\n                ],\n            ),\n            file=sys.stderr,\n        )\n        print()\n    if rerank_table:\n        print(\n            tabulate(\n                rerank_table,\n                headers=[\"UID\", \"Type\", \"Name\"],\n            ),\n            file=sys.stderr,\n        )\n        print()\n    if image_table:\n        print(\n            tabulate(\n                image_table,\n                headers=[\"UID\", \"Type\", \"Name\", \"Controlnet\"],\n            ),\n            file=sys.stderr,\n        )\n        print()\n    if audio_table:\n        print(\n            tabulate(\n                audio_table,\n                headers=[\"UID\", \"Type\", \"Name\"],\n            ),\n            file=sys.stderr,\n        )\n        print()\n\n\n@cli.command(\n    \"terminate\",\n    help=\"Terminate a deployed model through unique identifier (UID) of the model.\",\n)\n@click.option(\n    \"--endpoint\",\n    \"-e\",\n    type=str,\n    help=\"Xinference endpoint.\",\n)\n@click.option(\n    \"--model-uid\",\n    type=str,\n    required=True,\n    help=\"The unique identifier (UID) of the model.\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef model_terminate(\n    endpoint: Optional[str],\n    model_uid: str,\n    api_key: Optional[str],\n):\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n    client.terminate_model(model_uid=model_uid)\n\n\n@cli.command(\"generate\", help=\"Generate text using a running LLM.\")\n@click.option(\"--endpoint\", \"-e\", type=str, help=\"Xinference endpoint.\")\n@click.option(\n    \"--model-uid\",\n    type=str,\n    help=\"The unique identifier (UID) of the model.\",\n)\n@click.option(\n    \"--max_tokens\",\n    default=512,\n    type=int,\n    help=\"Maximum number of tokens in the generated text (default is 512).\",\n)\n@click.option(\n    \"--stream\",\n    default=True,\n    type=bool,\n    help=\"Whether to stream the generated text. Use 'True' for streaming (default is True).\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef model_generate(\n    endpoint: Optional[str],\n    model_uid: str,\n    max_tokens: int,\n    stream: bool,\n    api_key: Optional[str],\n):\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n    if stream:\n        # TODO: when stream=True, RestfulClient cannot generate words one by one.\n        # So use Client in temporary. The implementation needs to be changed to\n        # RestfulClient in the future.\n        model = client.get_model(model_uid=model_uid)\n        if not isinstance(model, (RESTfulChatModelHandle, RESTfulGenerateModelHandle)):\n            raise ValueError(\n                f\"Model {model_uid} does not support text generation. \"\n                \"Please select a chat/generate model or use embeddings/rerank APIs accordingly.\"\n            )\n\n        async def generate_internal():\n            while True:\n                # the prompt will be written to stdout.\n                # https://docs.python.org/3.10/library/functions.html#input\n                prompt = input(\"Prompt: \")\n                if prompt == \"\":\n                    break\n                print(f\"Completion: {prompt}\", end=\"\", file=sys.stdout)\n                for chunk in model.generate(\n                    prompt=prompt,\n                    generate_config={\"stream\": stream, \"max_tokens\": max_tokens},\n                ):\n                    choice = chunk[\"choices\"][0]\n                    if \"text\" not in choice:\n                        continue\n                    else:\n                        print(choice[\"text\"], end=\"\", flush=True, file=sys.stdout)\n                print(\"\", file=sys.stdout)\n\n        loop = asyncio.get_event_loop()\n        coro = generate_internal()\n\n        if loop.is_running():\n            isolation = Isolation(asyncio.new_event_loop(), threaded=True)\n            isolation.start()\n            isolation.call(coro)\n        else:\n            task = loop.create_task(coro)\n            try:\n                loop.run_until_complete(task)\n            except KeyboardInterrupt:\n                task.cancel()\n                loop.run_until_complete(task)\n                # avoid displaying exception-unhandled warnings\n                task.exception()\n    else:\n        restful_model = client.get_model(model_uid=model_uid)\n        if not isinstance(\n            restful_model, (RESTfulChatModelHandle, RESTfulGenerateModelHandle)\n        ):\n            raise ValueError(\n                f\"Model {model_uid} does not support text generation. \"\n                \"Please select a chat/generate model or use embeddings/rerank APIs accordingly.\"\n            )\n\n        while True:\n            prompt = input(\"User: \")\n            if prompt == \"\":\n                break\n            print(f\"Assistant: {prompt}\", end=\"\", file=sys.stdout)\n            response = restful_model.generate(\n                prompt=prompt,\n                generate_config={\"stream\": stream, \"max_tokens\": max_tokens},\n            )\n            if not isinstance(response, dict):\n                raise ValueError(\"generate result is not valid\")\n            print(f\"{response['choices'][0]['text']}\\n\", file=sys.stdout)\n\n\n@cli.command(\"chat\", help=\"Chat with a running LLM.\")\n@click.option(\"--endpoint\", \"-e\", type=str, help=\"Xinference endpoint.\")\n@click.option(\"--model-uid\", type=str, help=\"The unique identifier (UID) of the model.\")\n@click.option(\n    \"--max_tokens\",\n    default=512,\n    type=int,\n    help=\"Maximum number of tokens in each message (default is 512).\",\n)\n@click.option(\n    \"--stream\",\n    default=True,\n    type=bool,\n    help=\"Whether to stream the chat messages. Use 'True' for streaming (default is True).\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef model_chat(\n    endpoint: Optional[str],\n    model_uid: str,\n    max_tokens: int,\n    stream: bool,\n    api_key: Optional[str],\n):\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n\n    messages: List[Dict] = []\n    if stream:\n        # TODO: when stream=True, RestfulClient cannot generate words one by one.\n        # So use Client in temporary. The implementation needs to be changed to\n        # RestfulClient in the future.\n        model = client.get_model(model_uid=model_uid)\n        if not isinstance(model, RESTfulChatModelHandle):\n            raise ValueError(\n                f\"Model {model_uid} does not support chat. \"\n                \"Please select a chat-capable model.\"\n            )\n\n        async def chat_internal():\n            while True:\n                # the prompt will be written to stdout.\n                # https://docs.python.org/3.10/library/functions.html#input\n                prompt = input(\"User: \")\n                if prompt == \"\":\n                    break\n                print(\"Assistant: \", end=\"\", file=sys.stdout)\n                messages.append(dict(role=\"user\", content=prompt))\n                response_content = \"\"\n                for chunk in model.chat(\n                    messages,\n                    generate_config={\"stream\": stream, \"max_tokens\": max_tokens},\n                ):\n                    if not chunk[\"choices\"]:\n                        continue\n                    delta = chunk[\"choices\"][0][\"delta\"]\n                    if \"content\" not in delta:\n                        continue\n                    else:\n                        # The first chunk of stream output may have no content (None). Related PRs:\n                        # https://github.com/ggml-org/llama.cpp/pull/13634\n                        # https://github.com/ggml-org/llama.cpp/pull/12379\n                        content = delta[\"content\"] or \"\"\n                        response_content += content\n                        print(content, end=\"\", flush=True, file=sys.stdout)\n                print(\"\", file=sys.stdout)\n                messages.append(dict(role=\"assistant\", content=response_content))\n\n        loop = asyncio.get_event_loop()\n        coro = chat_internal()\n\n        if loop.is_running():\n            isolation = Isolation(asyncio.new_event_loop(), threaded=True)\n            isolation.start()\n            isolation.call(coro)\n        else:\n            task = loop.create_task(coro)\n            try:\n                loop.run_until_complete(task)\n            except KeyboardInterrupt:\n                task.cancel()\n                loop.run_until_complete(task)\n                # avoid displaying exception-unhandled warnings\n                task.exception()\n    else:\n        restful_model = client.get_model(model_uid=model_uid)\n        if not isinstance(restful_model, RESTfulChatModelHandle):\n            raise ValueError(\n                f\"Model {model_uid} does not support chat. \"\n                \"Please select a chat-capable model.\"\n            )\n\n        while True:\n            prompt = input(\"User: \")\n            if prompt == \"\":\n                break\n            messages.append({\"role\": \"user\", \"content\": prompt})\n            print(\"Assistant: \", end=\"\", file=sys.stdout)\n            response = restful_model.chat(\n                messages,\n                generate_config={\"stream\": stream, \"max_tokens\": max_tokens},\n            )\n            if not isinstance(response, dict):\n                raise ValueError(\"chat result is not valid\")\n            response_content = response[\"choices\"][0][\"message\"][\"content\"]\n            print(f\"{response_content}\\n\", file=sys.stdout)\n            messages.append(dict(role=\"assistant\", content=response_content))\n\n\n@cli.command(\"vllm-models\", help=\"Query and display models compatible with vLLM.\")\n@click.option(\"--endpoint\", \"-e\", type=str, help=\"Xinference endpoint.\")\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef vllm_models(endpoint: Optional[str], api_key: Optional[str]):\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n    vllm_models_dict = client.vllm_models()\n    print(\"VLLM supported model families:\")\n    chat_models = vllm_models_dict[\"chat\"]\n    supported_models = vllm_models_dict[\"generate\"]\n\n    print(\"VLLM supported chat model families:\", chat_models)\n    print(\"VLLM supported generate model families:\", supported_models)\n\n\n@cli.command(\"login\", help=\"Login when the cluster is authenticated.\")\n@click.option(\"--endpoint\", \"-e\", type=str, help=\"Xinference endpoint.\")\n@click.option(\"--username\", type=str, required=True, help=\"Username.\")\n@click.option(\n    \"--password\",\n    type=str,\n    required=True,\n    help=\"Password.\",\n)\ndef cluster_login(\n    endpoint: Optional[str],\n    username: str,\n    password: str,\n):\n    endpoint = get_endpoint(endpoint)\n    restful_client = RESTfulClient(base_url=endpoint)\n    if restful_client._cluster_authed:\n        restful_client.login(username, password)\n        access_token = restful_client._get_token()\n        assert access_token is not None\n        os.makedirs(XINFERENCE_AUTH_DIR, exist_ok=True)\n        hashed_ep = get_hash_endpoint(endpoint)\n        with open(os.path.join(XINFERENCE_AUTH_DIR, hashed_ep), \"w\") as f:\n            f.write(access_token)\n\n\n@cli.command(name=\"engine\", help=\"Query the applicable inference engine by model name.\")\n@click.option(\n    \"--model-name\",\n    \"-n\",\n    type=str,\n    required=True,\n    help=\"The model name you want to query.\",\n)\n@click.option(\n    \"--model-engine\",\n    \"-en\",\n    type=str,\n    default=None,\n    help=\"Specify the `model_engine` to query the corresponding combination of other parameters.\",\n)\n@click.option(\n    \"--model-format\",\n    \"-f\",\n    type=str,\n    default=None,\n    help=\"Specify the `model_format` to query the corresponding combination of other parameters.\",\n)\n@click.option(\n    \"--model-size-in-billions\",\n    \"-s\",\n    type=str,\n    default=None,\n    help=\"Specify the `model_size_in_billions` to query the corresponding combination of other parameters.\",\n)\n@click.option(\n    \"--quantization\",\n    \"-q\",\n    type=str,\n    default=None,\n    help=\"Specify the `quantization` to query the corresponding combination of other parameters.\",\n)\n@click.option(\"--endpoint\", \"-e\", type=str, help=\"Xinference endpoint.\")\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"Api-Key for access xinference api with authorization.\",\n)\ndef query_engine_by_model_name(\n    model_name: str,\n    model_engine: Optional[str],\n    model_format: Optional[str],\n    model_size_in_billions: Optional[Union[str, int]],\n    quantization: Optional[str],\n    endpoint: Optional[str],\n    api_key: Optional[str],\n):\n    from tabulate import tabulate\n\n    def match_engine_from_spell(value: str, target: Sequence[str]) -> Tuple[bool, str]:\n        \"\"\"\n        For better usage experience.\n        \"\"\"\n        for t in target:\n            if value.lower() == t.lower():\n                return True, t\n        return False, value\n\n    def handle_user_passed_parameters() -> List[str]:\n        user_specified_parameters = []\n        if model_engine is not None:\n            user_specified_parameters.append(f\"--model-engine {model_engine}\")\n        if model_format is not None:\n            user_specified_parameters.append(f\"--model-format {model_format}\")\n        if model_size_in_billions is not None:\n            user_specified_parameters.append(\n                f\"--model-size-in-billions {model_size_in_billions}\"\n            )\n        if quantization is not None:\n            user_specified_parameters.append(f\"--quantization {quantization}\")\n        return user_specified_parameters\n\n    user_specified_params = handle_user_passed_parameters()\n\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n\n    llm_engines = client.query_engine_by_model_name(model_name)\n    if model_engine is not None:\n        is_matched, model_engine = match_engine_from_spell(\n            model_engine, list(llm_engines.keys())\n        )\n        if not is_matched:\n            print(\n                f'Xinference does not support this inference engine \"{model_engine}\".',\n                file=sys.stderr,\n            )\n            return\n\n    table = []\n    engines = [model_engine] if model_engine is not None else list(llm_engines.keys())\n    for engine in engines:\n        params = llm_engines[engine]\n        for param in params:\n            if (\n                (model_format is None or model_format == param[\"model_format\"])\n                and (\n                    model_size_in_billions is None\n                    or model_size_in_billions == str(param[\"model_size_in_billions\"])\n                )\n                and (quantization is None or quantization in param[\"quantizations\"])\n            ):\n                if quantization is not None:\n                    table.append(\n                        [\n                            model_name,\n                            engine,\n                            param[\"model_format\"],\n                            param[\"model_size_in_billions\"],\n                            quantization,\n                        ]\n                    )\n                else:\n                    for quant in param[\"quantizations\"]:\n                        table.append(\n                            [\n                                model_name,\n                                engine,\n                                param[\"model_format\"],\n                                param[\"model_size_in_billions\"],\n                                quant,\n                            ]\n                        )\n    if len(table) == 0:\n        print(\n            f\"Xinference does not support \"\n            f\"your provided params: {', '.join(user_specified_params)} for the model {model_name}.\",\n            file=sys.stderr,\n        )\n    else:\n        print(\n            tabulate(\n                table,\n                headers=[\n                    \"Name\",\n                    \"Engine\",\n                    \"Format\",\n                    \"Size (in billions)\",\n                    \"Quantization\",\n                ],\n            ),\n            file=sys.stderr,\n        )\n\n\n@cli.command(\n    \"cal-model-mem\",\n    help=\"calculate gpu mem usage with specified model size and context_length\",\n)\n@click.option(\n    \"--model-name\",\n    \"-n\",\n    type=str,\n    help=\"The model name is optional.\\\n    If provided, fetch model config from huggingface/modelscope;\\\n    If not specified, use default model layer to estimate.\",\n)\n@click.option(\n    \"--size-in-billions\",\n    \"-s\",\n    type=str,\n    required=True,\n    help=\"Specify the model size in billions of parameters. Format accept 1_8 and 1.8\",\n)\n@click.option(\n    \"--model-format\",\n    \"-f\",\n    type=str,\n    required=True,\n    help=\"Specify the format of the model, e.g. pytorch, ggufv2, etc.\",\n)\n@click.option(\n    \"--quantization\",\n    \"-q\",\n    type=str,\n    default=None,\n    help=\"Define the quantization settings for the model.\",\n)\n@click.option(\n    \"--context-length\",\n    \"-c\",\n    type=int,\n    required=True,\n    help=\"Specify the context length\",\n)\n@click.option(\n    \"--kv-cache-dtype\",\n    type=int,\n    default=16,\n    help=\"Specified the kv_cache_dtype, one of: 8, 16, 32\",\n)\ndef cal_model_mem(\n    model_name: Optional[str],\n    size_in_billions: str,\n    model_format: str,\n    quantization: Optional[str],\n    context_length: int,\n    kv_cache_dtype: int,\n):\n    if kv_cache_dtype not in [8, 16, 32]:\n        print(\"Invalid kv_cache_dtype:\", kv_cache_dtype)\n        os._exit(1)\n\n    import math\n\n    from ..model.llm.llm_family import convert_model_size_to_float\n    from ..model.llm.memory import estimate_llm_gpu_memory\n\n    mem_info = estimate_llm_gpu_memory(\n        model_size_in_billions=size_in_billions,\n        quantization=quantization,\n        context_length=context_length,\n        model_format=model_format,\n        model_name=model_name,\n        kv_cache_dtype=kv_cache_dtype,\n    )\n    if mem_info is None:\n        print(\"The Specified model parameters is not match: `%s`\" % model_name)\n        os._exit(1)\n    total_mem_g = math.ceil(mem_info.total / 1024.0)\n    print(\"model_name:\", model_name)\n    print(\"kv_cache_dtype:\", kv_cache_dtype)\n    print(\"model size: %.1f B\" % (convert_model_size_to_float(size_in_billions)))\n    print(\"quant: %s\" % (quantization))\n    print(\"context: %d\" % (context_length))\n    print(\"gpu mem usage:\")\n    print(\"  model mem: %d MB\" % (mem_info.model_mem))\n    print(\"  kv_cache: %d MB\" % (mem_info.kv_cache_mem))\n    print(\"  overhead: %d MB\" % (mem_info.overhead))\n    print(\"  active: %d MB\" % (mem_info.activation_mem))\n    print(\"  total: %d MB (%d GB)\" % (mem_info.total, total_mem_g))\n\n\n@cli.command(\n    \"stop-cluster\",\n    help=\"Stop a cluster using the Xinference framework with the given parameters.\",\n)\n@click.option(\n    \"--endpoint\",\n    \"-e\",\n    type=str,\n    required=True,\n    help=\"Xinference endpoint.\",\n)\n@click.option(\n    \"--api-key\",\n    \"-ak\",\n    default=None,\n    type=str,\n    help=\"API key for accessing the Xinference API with authorization.\",\n)\n@click.option(\"--check\", is_flag=True, help=\"Confirm the deletion of the cache.\")\ndef stop_cluster(endpoint: str, api_key: Optional[str], check: bool):\n    endpoint = get_endpoint(endpoint)\n    client = RESTfulClient(base_url=endpoint, api_key=api_key)\n    if api_key is None:\n        client._set_token(get_stored_token(endpoint, client))\n\n    if not check:\n        click.echo(\n            f\"This command will stop Xinference cluster in {endpoint}.\", err=True\n        )\n        supervisor_info = client.get_supervisor_info()\n        click.echo(\"Supervisor information: \")\n        click.echo(supervisor_info)\n\n        workers_info = client.get_workers_info()\n        click.echo(\"Workers information:\")\n        click.echo(workers_info)\n\n        click.confirm(\"Continue?\", abort=True)\n    try:\n        result = client.abort_cluster()\n        result = result.get(\"result\")\n        click.echo(f\"Cluster stopped: {result}\")\n    except Exception as e:\n        click.echo(e)\n\n\nif __name__ == \"__main__\":\n    cli()\n"
  },
  {
    "path": "xinference/deploy/docker/Dockerfile",
    "content": "FROM vllm/vllm-openai:v0.13.0\n\nCOPY . /opt/inference\nWORKDIR /opt/inference\n\nENV NVM_DIR=/usr/local/nvm\nENV NODE_VERSION=14.21.1\n\n# Install system dependencies and Node.js (libfst-dev should be able to solve the errors of pyini)\nRUN apt-get -y update \\\n  && apt install -y wget curl procps git libgl1 libfst-dev cmake libssl-dev \\\n  && printf \"\\ndeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse\" >> /etc/apt/sources.list \\\n  && apt-get -y update \\\n  && apt-get install -y --only-upgrade libstdc++6 && apt install -y libc6 \\\n  && mkdir -p $NVM_DIR \\\n  && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash \\\n  && . $NVM_DIR/nvm.sh \\\n  && nvm install $NODE_VERSION \\\n  && nvm alias default $NODE_VERSION \\\n  && nvm use default \\\n  && apt-get -yq clean\n\nENV PATH=$NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH\nENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/python3.10/dist-packages/nvidia/cublas/lib\n# ENV FLASH_ATTENTION_SKIP_CUDA_BUILD=TRUE\n\n# Install pip dependencies\nARG LLAMA_CPP_USE_CUDA=true\nARG PIP_INDEX=https://pypi.org/simple\nRUN pip install --upgrade -i \"$PIP_INDEX\" pip \"setuptools<82\" wheel && \\\n    apt-get -y update && \\\n    ( wget -O openfst-1.7.2.tar.gz http://www.openslr.org/resources/2/openfst-1.7.2.tar.gz \\\n      || wget -O openfst-1.7.2.tar.gz https://www.openfst.org/twiki/pub/FST/FstDownload/openfst-1.7.2.tar.gz ) && \\\n    tar zxvf openfst-1.7.2.tar.gz && cd openfst-1.7.2 && \\\n    ./configure --enable-shared --enable-static && make -j$(nproc) && make install && ldconfig && \\\n    CPLUS_INCLUDE_PATH=/usr/local/include LIBRARY_PATH=/usr/local/lib LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH \\\n    pip install -i \"$PIP_INDEX\" pynini==2.1.6.post1 && \\\n    apt install -y wget curl procps git libgl1 rsync sqlite libpcre3 libpcre3-dev dmidecode libssl-dev perl make build-essential zlib1g-dev && \\\n    apt-get -yq clean && \\\n    # use pre-built whl package for llama-cpp-python, otherwise may core dump when init llama in some envs\n    pip install -i \"$PIP_INDEX\" \"diskcache>=5.6.1\" \"jinja2>=2.11.3\" && \\\n    pip install -i \"$PIP_INDEX\" \"cython>=0.29\" && \\\n    pip install -i \"$PIP_INDEX\" --upgrade-strategy only-if-needed -r /opt/inference/xinference/deploy/docker/requirements/requirements-base.txt && \\\n    pip install -i \"$PIP_INDEX\" --upgrade-strategy only-if-needed -r /opt/inference/xinference/deploy/docker/requirements/requirements-ml.txt && \\\n    pip install -i \"$PIP_INDEX\" --upgrade-strategy only-if-needed -r /opt/inference/xinference/deploy/docker/requirements/requirements-models.txt && \\\n    pip install -i \"$PIP_INDEX\" transformers==4.55.2 && \\\n    pip install -i \"$PIP_INDEX\" --no-deps sglang==0.5.6 && \\\n    pip install -i \"$PIP_INDEX\" sgl-kernel==0.3.18.post2 && \\\n    pip install -i \"$PIP_INDEX\" wetext && \\\n    pip uninstall flashinfer -y && \\\n    pip install -i \"$PIP_INDEX\" flashinfer-python==0.5.3 flashinfer-cubin==0.5.3 && \\\n    pip install https://github.com/flashinfer-ai/flashinfer/releases/download/v0.5.3/flashinfer_jit_cache-0.5.3+cu129-cp39-abi3-manylinux_2_28_x86_64.whl && \\\n    pip install -i \"$PIP_INDEX\" SQLAlchemy==1.4.54 && \\\n    pip install https://github.com/mjun0812/flash-attention-prebuild-wheels/releases/download/v0.5.4/flash_attn-2.8.3+cu128torch2.9-cp312-cp312-linux_x86_64.whl && \\\n    cd /opt/inference && \\\n    python3 setup.py build_web && \\\n    git restore . && \\\n    pip install -i \"$PIP_INDEX\" --no-deps \".\" && \\\n    pip uninstall xllamacpp -y && \\\n    wget https://github.com/xorbitsai/xllamacpp/releases/download/v0.2.0-cu124/xllamacpp-0.2.0-cp312-cp312-linux_x86_64.whl && \\\n    pip install xllamacpp-0.2.0-cp312-cp312-linux_x86_64.whl && \\\n    # clean packages\n    pip cache purge\n\n# Install Miniforge3 and FFmpeg\nRUN wget -O Miniforge3.sh \"https://github.com/conda-forge/miniforge/releases/download/4.12.0-0/Miniforge3-4.12.0-0-Linux-x86_64.sh\" && \\\n    bash Miniforge3.sh -b -p /opt/conda && \\\n    rm Miniforge3.sh\n\n# When installing the Conda environment, only FFmpeg should be installed to avoid modifying the system Python\nRUN /opt/conda/bin/conda create -n ffmpeg-env -c conda-forge 'ffmpeg<7' -y && \\\n    #Create a soft link to the system path\n    ln -s /opt/conda/envs/ffmpeg-env/bin/ffmpeg /usr/local/bin/ffmpeg && \\\n    ln -s /opt/conda/envs/ffmpeg-env/bin/ffprobe /usr/local/bin/ffprobe && \\\n    # Clear the Conda cache\n    /opt/conda/bin/conda clean --all -y\n\n# The pre-release version used should be noted for date changes\nRUN pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128 \\\n    --no-deps && \\\n    pip install triton==3.4.0 && \\\n    pip install torchcodec==0.9.0 && \\\n    pip cache purge\n\n# Override the default entrypoint of the vllm base image\nENTRYPOINT []\nCMD [\"/bin/bash\"]\n"
  },
  {
    "path": "xinference/deploy/docker/Dockerfile.cpu",
    "content": "FROM continuumio/miniconda3:23.10.0-1\n\nCOPY . /opt/inference\n\nENV NVM_DIR /usr/local/nvm\nENV NODE_VERSION 14.21.1\n\nRUN apt-get -y update \\\n  && apt install -y build-essential curl procps git libgl1 \\\n  && mkdir -p $NVM_DIR \\\n  && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash \\\n  && . $NVM_DIR/nvm.sh \\\n  && nvm install $NODE_VERSION \\\n  && nvm alias default $NODE_VERSION \\\n  && nvm use default \\\n  && apt-get -yq clean\n\nENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH\n\nARG PIP_INDEX=https://pypi.org/simple\nRUN python -m pip install --upgrade -i \"$PIP_INDEX\" pip \"setuptools<82\" wheel \"packaging>=24.2\" && \\\n    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu && \\\n    pip install -i \"$PIP_INDEX\" --upgrade-strategy only-if-needed -r /opt/inference/xinference/deploy/docker/requirements_cpu/requirements_cpu-base.txt && \\\n    pip install --no-cache-dir -i \"$PIP_INDEX\" --no-build-isolation gptqmodel && \\\n    pip install -i \"$PIP_INDEX\" --upgrade-strategy only-if-needed -r /opt/inference/xinference/deploy/docker/requirements_cpu/requirements_cpu-ml.txt && \\\n    pip install -i \"$PIP_INDEX\" --upgrade-strategy  only-if-needed -r /opt/inference/xinference/deploy/docker/requirements_cpu/requirements_cpu-models.txt && \\\n    cd /opt/inference && \\\n    python setup.py build_web && \\\n    git restore . && \\\n    pip install -i \"$PIP_INDEX\" --no-deps \".\" && \\\n    pip install -i \"$PIP_INDEX\" \"xllamacpp>=0.2.0\" && \\\n    # clean packages\n    pip cache purge\n\nRUN /opt/conda/bin/conda create -n ffmpeg-env -c conda-forge 'ffmpeg<7' -y && \\\n    ln -s /opt/conda/envs/ffmpeg-env/bin/ffmpeg /usr/local/bin/ffmpeg && \\\n    ln -s /opt/conda/envs/ffmpeg-env/bin/ffprobe /usr/local/bin/ffprobe && \\\n    /opt/conda/bin/conda clean --all -y\n\nENTRYPOINT []\nCMD [\"/bin/bash\"]\n"
  },
  {
    "path": "xinference/deploy/docker/docker-compose-distributed.yml",
    "content": "version: '3.8'\n\nservices:\n  xinference: &xinference\n    image: xprobe/xinference:latest\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - capabilities: [gpu]\n              driver: nvidia\n              count: all\n#    volumes:\n#      # Replace <xinference_home> with your xinference home path on the host machine\n#      - <xinference_home>:/root/.xinference\n#      # Replace <huggingface_cache_dir> with your huggingface cache path, default is\n#      # <home_path>/.cache/huggingface\n#      - <huggingface_cache_dir>:/root/.cache/huggingface\n#      # If models are downloaded from modelscope, replace <huggingface_cache_dir> with\n#      # your modelscope cache path, default is <home_path>/.cache/modelscope\n#      - <modelscope_cache_dir>:/root/.cache/modelscope\n#    environment:\n#      # add envs here. Here's an example, if you want to download model from modelscope\n#      - XINFERENCE_MODEL_SRC=modelscope\n\n  xinference-supervisor:\n    <<: *xinference\n    ports:\n      - \"9997:9997\"\n      - \"9999:9999\"\n    command: xinference-supervisor --host xinference-supervisor --port 9997 --supervisor-port 9999\n    restart: always\n    healthcheck:\n      test: curl --fail http://xinference-supervisor:9997/status || exit 1\n      interval: 5s\n      retries: 5\n      start_period: 5s\n      timeout: 5s\n\n  # This examples is just using two workers. You can add more by incrementing\n  # the worker suffix and port number.\n  xinference-worker-1:\n    <<: *xinference\n    ports:\n      - \"30001:30001\"\n    command: xinference-worker -e http://xinference-supervisor:9997 --host xinference-worker-1 --worker-port 30001\n    restart: always\n    depends_on:\n      xinference-supervisor:\n        condition: service_healthy\n\n  xinference-worker-2:\n    <<: *xinference\n    ports:\n      - \"30002:30002\"\n    command: xinference-worker -e http://xinference-supervisor:9997 --host xinference-worker-2 --worker-port 30002\n    restart: always\n    depends_on:\n      xinference-supervisor:\n        condition: service_healthy\n"
  },
  {
    "path": "xinference/deploy/docker/docker-compose.yml",
    "content": "version: '3.8'\n\nservices:\n  xinference:\n    image: xprobe/xinference:latest\n    ports:\n      - \"9997:9997\"\n#    volumes:\n#      # Replace <xinference_home> with your xinference home path on the host machine\n#      - <xinference_home>:/root/.xinference\n#      # Replace <huggingface_cache_dir> with your huggingface cache path, default is\n#      # <home_path>/.cache/huggingface\n#      - <huggingface_cache_dir>:/root/.cache/huggingface\n#      # If models are downloaded from modelscope, replace <huggingface_cache_dir> with\n#      # your modelscope cache path, default is <home_path>/.cache/modelscope\n#      - <modelscope_cache_dir>:/root/.cache/modelscope\n#    environment:\n#      # add envs here. Here's an example, if you want to download model from modelscope\n#      - XINFERENCE_MODEL_SRC=modelscope\n#      # ── OpenTelemetry (OTEL) ──────────────────────────────────────────────\n#      # Set XINFERENCE_ENABLE_OTEL=true and install xinference[otel] to enable OTEL.\n#      - XINFERENCE_ENABLE_OTEL=false\n#      - XINFERENCE_OTLP_BASE_ENDPOINT=http://localhost:4318\n#      - XINFERENCE_OTLP_TRACE_ENDPOINT=\n#      - XINFERENCE_OTLP_METRIC_ENDPOINT=\n#      - XINFERENCE_OTLP_API_KEY=\n#      - XINFERENCE_OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf\n#      - XINFERENCE_OTEL_EXPORTER_TYPE=otlp\n#      - XINFERENCE_OTEL_SAMPLING_RATE=0.1\n#      - XINFERENCE_OTEL_BATCH_EXPORT_SCHEDULE_DELAY=5000\n#      - XINFERENCE_OTEL_MAX_QUEUE_SIZE=2048\n#      - XINFERENCE_OTEL_MAX_EXPORT_BATCH_SIZE=512\n#      - XINFERENCE_OTEL_METRIC_EXPORT_INTERVAL=60000\n#      - XINFERENCE_OTEL_BATCH_EXPORT_TIMEOUT=10000\n#      - XINFERENCE_OTEL_METRIC_EXPORT_TIMEOUT=30000\n    command: xinference-local --host 0.0.0.0 --port 9997\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - capabilities: [gpu]\n              driver: nvidia\n              count: all\n"
  },
  {
    "path": "xinference/deploy/docker/requirements/requirements-base.txt",
    "content": "xoscar>=0.7.2\ngradio==5.22.0\npillow\nclick\ntqdm>=4.27\ntabulate\nrequests\npydantic>2\nfastapi>=0.110.3\nuvicorn\nhuggingface-hub>=0.19.4\ntyping_extensions\nmodelscope>=1.10.0\nsse_starlette>=1.6.5  # ensure_bytes API break change: https://github.com/sysid/sse-starlette/issues/65\nopenai>=1.40.0  # For typing\npython-jose[cryptography]\nbcrypt>=4.0.0\naioprometheus[starlette]>=23.12.0\nnvidia-ml-py\npynvml>=12\nasync-timeout\npeft<=0.17.1\nopencv-contrib-python-headless\nsetproctitle\ngguf\nuv\nopentelemetry-api>=1.20.0\nopentelemetry-sdk>=1.20.0\nopentelemetry-exporter-otlp-proto-http>=1.20.0\nopentelemetry-exporter-otlp-proto-grpc>=1.20.0\nopentelemetry-instrumentation-fastapi>=0.41b0\nopentelemetry-instrumentation-httpx>=0.41b0\n"
  },
  {
    "path": "xinference/deploy/docker/requirements/requirements-ml.txt",
    "content": "# transformers 4.53.2 and below globally register OTEL providers on import,\n# which conflicts with Xinference OTEL initialization.\ntransformers>=4.53.3\naccelerate>=0.28.0\nsentencepiece\ntransformers_stream_generator\nbitsandbytes\nprotobuf\neinops\ntiktoken>=0.6.0\nsentence-transformers>=3.1.0\ncontrolnet_aux\nautoawq!=0.2.6  # autoawq 0.2.6 pinned torch to 2.3\noptimum\nattrdict  # For deepseek VL\ntimm>=0.9.16  # For deepseek VL\nFlagEmbedding  # For rerank\nlightning>=2.0.0  # For CosyVoice, matcha\nhydra-core>=1.3.2  # For CosyVoice, matcha\ninflect  # For CosyVoice, matcha\nconformer  # For CosyVoice, matcha\ndiffusers>=0.32.0  # For CosyVoice, matcha\ngdown  # For CosyVoice, matcha\npyarrow  # For CosyVoice, matcha\nHyperPyYAML  # For CosyVoice\nonnxruntime-gpu>1.16.0; sys_platform == 'linux'  # For CosyVoice\nonnxruntime==1.16.0; sys_platform == 'darwin' or sys_platform == 'windows'  # For CosyVoice\npyworld>=0.3.4  # For CosyVoice\nboto3>=1.28.55,<1.28.65 # For tensorizer\ntensorizer~=2.9.0\neva-decord  # For video in VL\njj-pytorchvideo # For CogVLM2-video\nloralib  # For Fish Speech\nvector-quantize-pytorch<=1.17.3,>=1.14.24 # For Fish Speech\ntorchdiffeq  # For F5-TTS\nx_transformers>=1.31.14  # For F5-TTS\n\n# sglang\ndecord\nhf_transfer\nhuggingface_hub\ninteregular\noutlines>=0.0.44,<=0.1.11\npackaging\nprometheus-client>=0.20.0\npsutil\npython-multipart\npyzmq>=25.1.2\ntorchao>=0.7.0\nuvloop\nxgrammar>=0.1.10\ncuda-python\nsgl-kernel>=0.0.3.post3,<=0.1.4\nIPython\nnumpy==1.26.4\n"
  },
  {
    "path": "xinference/deploy/docker/requirements/requirements-models.txt",
    "content": "funasr==1.2.7\nomegaconf~=2.3.0  # For ChatTTS\nnemo_text_processing==1.1.0  # 1.1.0 requires pynini==2.1.6.post1\nWeTextProcessing<1.0.4.1  # 1.0.4 requires pynini==2.1.6\nlibrosa  # For ChatTTS\nChatTTS>=0.2.1\nxxhash  # For ChatTTS\npypinyin  # For F5-TTS\ntomli  # For F5-TTS\nvocos  # For F5-TTS\nlibrosa  # For F5-TTS\njieba  # For F5-TTS\nsoundfile  # For F5-TTS & MeloTTS\ncached_path  # For MeloTTS\nunidic-lite  # For MeloTTS, unidic requires manually download\ncn2an  # For MeloTTS\nmecab-python3  # For MeloTTS\nnum2words  # For MeloTTS\npykakasi  # For MeloTTS\nfugashi  # For MeloTTS\ng2p_en  # For MeloTTS\nanyascii  # For MeloTTS\ngruut[de,es,fr]  # For MeloTTS\nkokoro>=0.7.15  # Kokoro\nspacy>3.0.6\nmisaki[en,ja,zh]>=0.7.15  # Kokoro\nen_core_web_trf@https://github.com/explosion/spacy-models/releases/download/en_core_web_trf-3.8.0/en_core_web_trf-3.8.0-py3-none-any.whl  # Kokoro misaki[en]\nen_core_web_sm@https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl  # Kokoro misaki[en]\nqwen-vl-utils!=0.0.9 # For qwen2-vl\ndatamodel_code_generator # for minicpm-4B\njsonschema # for minicpm-4B\ndeepcache # for sd\nverovio>=4.3.1  # For got_ocr2\nlangdetect  # MegaTTS3\npyloudnorm  # MegaTTS3\norjson\nimageio-ffmpeg  # For video\nloguru  # For Fish Speech\nnatsort  # For Fish Speech\normsgpack  # For Fish Speech\ncachetools  # For Fish Speech\nsilero-vad  # For Fish Speech\nqwen_omni_utils  # For qwen2.5-omni\njson5 # IndexTTS2\nmunch # IndexTTS2\nmatplotlib # IndexTTS2\nflatten_dict # IndexTTS2\njulius # IndexTTS2\ntensorboard # IndexTTS2\nrandomname # IndexTTS2\nargbind # IndexTTS2\n"
  },
  {
    "path": "xinference/deploy/docker/requirements_cpu/requirements_cpu-base.txt",
    "content": "xoscar>=0.7.2\ngradio==5.22.0\npillow\nclick\ntqdm>=4.27\ntabulate\nrequests\npydantic>2\nfastapi>=0.110.3\nuvicorn\nhuggingface-hub>=0.19.4\ntyping_extensions\nboto3>=1.28.55,<1.28.65\nsse_starlette>=1.6.5\nopenai>1\npython-jose[cryptography]\nbcrypt>=4.0.0\naioprometheus[starlette]>=23.12.0\nnvidia-ml-py\nasync-timeout\norjson\nprotobuf\nsetproctitle\nuv\nloguru  # For Fish Speech\nnatsort  # For Fish Speech\normsgpack  # For Fish Speech\ncachetools  # For Fish Speech\nimageio-ffmpeg  # For video\nopencv-contrib-python-headless\ngguf\nopentelemetry-api>=1.20.0\nopentelemetry-sdk>=1.20.0\nopentelemetry-exporter-otlp-proto-http>=1.20.0\nopentelemetry-exporter-otlp-proto-grpc>=1.20.0\nopentelemetry-instrumentation-fastapi>=0.41b0\nopentelemetry-instrumentation-httpx>=0.41b0\n"
  },
  {
    "path": "xinference/deploy/docker/requirements_cpu/requirements_cpu-ml.txt",
    "content": "torch>=2.0.0\ntorchaudio\nsentencepiece\nsentence-transformers>=3.1.0\n# transformers 4.53.2 and below globally register OTEL providers on import,\n# which conflicts with Xinference OTEL initialization.\ntransformers>=4.53.3\ntransformers_stream_generator\naccelerate>=0.28.0\nbitsandbytes\ntiktoken>=0.6.0\nautoawq!=0.2.6\noptimum\npeft<=0.17.1\ntimm\ntensorizer~=2.9.0\nmodelscope>=1.19.0\nFlagEmbedding\ncontrolnet_aux\neinops\n"
  },
  {
    "path": "xinference/deploy/docker/requirements_cpu/requirements_cpu-models.txt",
    "content": "# ChatTTS\nChatTTS>=0.2.1\nomegaconf~=2.3.0\nlibrosa\nxxhash\n\n# CosyVoice, matcha\nlightning>=2.0.0\nhydra-core>=1.3.2\ninflect\nconformer\ndiffusers>=0.32.0\ngdown\npyarrow\nHyperPyYAML\nonnxruntime-gpu==1.16.0; sys_platform == 'linux'\nonnxruntime==1.16.0; sys_platform == 'darwin' or sys_platform == 'windows'\npyworld>=0.3.4  # For CosyVoice\n\n# Fish Speech\nloralib\nsilero-vad\nvector-quantize-pytorch<=1.17.3,>=1.14.24\n\n# F5-TTS\ntorchdiffeq\nx_transformers>=1.31.14\npypinyin\ntomli\nvocos\njieba\nsoundfile\n\n# MeloTTS\ncached_path\nunidic-lite\ncn2an\nmecab-python3\nnum2words\npykakasi\nfugashi\ng2p_en\nanyascii\ngruut[de,es,fr]\n\n# Kokoro\nkokoro>=0.7.15\nmisaki[en,ja,zh]>=0.7.15\nen_core_web_trf@https://github.com/explosion/spacy-models/releases/download/en_core_web_trf-3.8.0/en_core_web_trf-3.8.0-py3-none-any.whl\nen_core_web_sm@https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl\n\n# Qwen-VL\nqwen-vl-utils!=0.0.9\n\n# Qwen-Omni\nqwen_omni_utils\n\n# MiniCPM\ndatamodel_code_generator\njsonschema\n\n# CogVLM\njj-pytorchvideo\n\n# VLM (general)\neva-decord\n\n# OCR\nverovio>=4.3.1\n\n# MegaTTS3\nlangdetect\npyloudnorm\n\n# IndexTTS2\njson5\nmunch\nmatplotlib\nflatten_dict\njulius\ntensorboard\nrandomname\nargbind\n\n# Others\nfunasr==1.2.7\nnemo_text_processing<1.1.0  # 1.1.0 requires pynini==2.1.6.post1\nWeTextProcessing<1.0.4  # 1.0.4 requires pynini==2.1.6\n"
  },
  {
    "path": "xinference/deploy/local.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nimport multiprocessing\nimport signal\nimport sys\nimport traceback\nfrom multiprocessing.connection import Connection\nfrom typing import Dict, Optional\n\nimport xoscar as xo\nfrom xoscar.utils import get_next_port\n\nfrom ..constants import (\n    XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD,\n    XINFERENCE_HEALTH_CHECK_INTERVAL,\n    XINFERENCE_HEALTH_CHECK_TIMEOUT,\n)\nfrom ..core.supervisor import SupervisorActor\nfrom .utils import health_check\nfrom .worker import start_worker_components\n\nlogger = logging.getLogger(__name__)\n\n\nREADY = \"ok\"\n\n\nasync def _start_local_cluster(\n    address: str,\n    metrics_exporter_host: Optional[str] = None,\n    metrics_exporter_port: Optional[int] = None,\n    logging_conf: Optional[Dict] = None,\n    conn: Optional[Connection] = None,\n):\n    from .utils import create_worker_actor_pool\n\n    if logging_conf:\n        logging.config.dictConfig(logging_conf)  # type: ignore\n\n    pool = None\n    try:\n        pool = await create_worker_actor_pool(\n            address=address, logging_conf=logging_conf\n        )\n        await xo.create_actor(\n            SupervisorActor, address=address, uid=SupervisorActor.default_uid()\n        )\n        await start_worker_components(\n            address=address,\n            supervisor_address=address,\n            main_pool=pool,\n            metrics_exporter_host=metrics_exporter_host,\n            metrics_exporter_port=metrics_exporter_port,\n        )\n        if conn:\n            try:\n                conn.send(READY)\n            except BrokenPipeError:\n                # connection may be gc collected,\n                # just ignore this error\n                pass\n        await pool.join()\n    except asyncio.CancelledError:\n        if pool is not None:\n            await pool.stop()\n\n\ndef run(\n    address: str,\n    metrics_exporter_host: Optional[str] = None,\n    metrics_exporter_port: Optional[int] = None,\n    logging_conf: Optional[Dict] = None,\n    conn: Optional[Connection] = None,\n):\n    def sigterm_handler(signum, frame):\n        sys.exit(0)\n\n    signal.signal(signal.SIGTERM, sigterm_handler)\n\n    try:\n        loop = asyncio.get_event_loop()\n        task = loop.create_task(\n            _start_local_cluster(\n                address=address,\n                metrics_exporter_host=metrics_exporter_host,\n                metrics_exporter_port=metrics_exporter_port,\n                logging_conf=logging_conf,\n                conn=conn,\n            )\n        )\n        loop.run_until_complete(task)\n    except Exception:\n        tb = traceback.format_exc()\n        if conn:\n            try:\n                conn.send(f\"error: {tb}\")\n            except BrokenPipeError:\n                # connection may be gc collected,\n                # just ignore this error\n                pass\n        # raise again in subprocess\n        raise\n\n\ndef run_in_subprocess(\n    address: str,\n    metrics_exporter_host: Optional[str] = None,\n    metrics_exporter_port: Optional[int] = None,\n    logging_conf: Optional[Dict] = None,\n) -> multiprocessing.Process:\n    parent_conn, child_conn = multiprocessing.Pipe()\n    p = multiprocessing.Process(\n        target=run,\n        args=(address, metrics_exporter_host, metrics_exporter_port, logging_conf),\n        kwargs={\"conn\": child_conn},\n    )\n    # Since Xoscar 0.7, we do not uses multiprocessing to create subpool any more,\n    # we should be able to use daemon here\n    p.daemon = True\n    p.start()\n    if parent_conn.poll(timeout=XINFERENCE_HEALTH_CHECK_TIMEOUT):\n        msg = parent_conn.recv()\n        if msg != READY:\n            raise RuntimeError(\n                f\"Start service process failed during startup:\\n{msg}\"  # noqa: E231\n            )\n    else:\n        logger.info(\n            \"No response from process after %s seconds\", XINFERENCE_HEALTH_CHECK_TIMEOUT\n        )\n\n    return p\n\n\ndef main(\n    host: str,\n    port: int,\n    metrics_exporter_host: Optional[str] = None,\n    metrics_exporter_port: Optional[int] = None,\n    logging_conf: Optional[Dict] = None,\n    auth_config_file: Optional[str] = None,\n):\n    # force to set spawn,\n    # cuda may be inited in xoscar virtualenv\n    # which will raise error after sub pool is created\n    multiprocessing.set_start_method(\"spawn\")\n\n    supervisor_address = f\"{host}:{get_next_port()}\"  # noqa: E231\n    local_cluster = run_in_subprocess(\n        supervisor_address, metrics_exporter_host, metrics_exporter_port, logging_conf\n    )\n\n    if not health_check(\n        address=supervisor_address,\n        max_attempts=XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD,\n        sleep_interval=XINFERENCE_HEALTH_CHECK_INTERVAL,\n    ):\n        raise RuntimeError(\"Cluster is not available after multiple attempts\")\n\n    try:\n        from ..api import restful_api\n\n        restful_api.run(\n            supervisor_address=supervisor_address,\n            host=host,\n            port=port,\n            logging_conf=logging_conf,\n            auth_config_file=auth_config_file,\n        )\n    finally:\n        local_cluster.kill()\n"
  },
  {
    "path": "xinference/deploy/supervisor.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nimport multiprocessing\nimport signal\nimport sys\nfrom typing import Dict, Optional\n\nimport xoscar as xo\nfrom xoscar.utils import get_next_port\n\nfrom ..constants import (\n    XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD,\n    XINFERENCE_HEALTH_CHECK_INTERVAL,\n)\nfrom ..core.supervisor import SupervisorActor\nfrom .utils import health_check\n\nlogger = logging.getLogger(__name__)\n\n\nasync def _start_supervisor(address: str, logging_conf: Optional[Dict] = None):\n    logging.config.dictConfig(logging_conf)  # type: ignore\n\n    pool = None\n    try:\n        pool = await xo.create_actor_pool(\n            address=address, n_process=0, logging_conf={\"dict\": logging_conf}\n        )\n        await xo.create_actor(\n            SupervisorActor, address=address, uid=SupervisorActor.default_uid()\n        )\n        await pool.join()\n    except asyncio.exceptions.CancelledError:\n        if pool is not None:\n            await pool.stop()\n\n\ndef run(address: str, logging_conf: Optional[Dict] = None):\n    def sigterm_handler(signum, frame):\n        sys.exit(0)\n\n    signal.signal(signal.SIGTERM, sigterm_handler)\n\n    loop = asyncio.get_event_loop()\n    task = loop.create_task(\n        _start_supervisor(address=address, logging_conf=logging_conf)\n    )\n    loop.run_until_complete(task)\n\n\ndef run_in_subprocess(\n    address: str, logging_conf: Optional[Dict] = None\n) -> multiprocessing.Process:\n    p = multiprocessing.Process(target=run, args=(address, logging_conf))\n    p.start()\n    return p\n\n\ndef main(\n    host: str,\n    port: int,\n    supervisor_port: Optional[int],\n    logging_conf: Optional[Dict] = None,\n    auth_config_file: Optional[str] = None,\n):\n    supervisor_address = f\"{host}:{supervisor_port or get_next_port()}\"\n    local_cluster = run_in_subprocess(supervisor_address, logging_conf)\n\n    if not health_check(\n        address=supervisor_address,\n        max_attempts=XINFERENCE_HEALTH_CHECK_FAILURE_THRESHOLD,\n        sleep_interval=XINFERENCE_HEALTH_CHECK_INTERVAL,\n    ):\n        raise RuntimeError(\"Supervisor is not available after multiple attempts\")\n\n    try:\n        from ..api import restful_api\n\n        restful_api.run(\n            supervisor_address=supervisor_address,\n            host=host,\n            port=port,\n            logging_conf=logging_conf,\n            auth_config_file=auth_config_file,\n        )\n    finally:\n        local_cluster.kill()\n"
  },
  {
    "path": "xinference/deploy/test/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/deploy/test/test_cmdline.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport os\nimport tempfile\n\nimport pytest\nfrom click.testing import CliRunner\n\nfrom ...client import Client\nfrom ..cmdline import (\n    list_cached_models,\n    list_model_registrations,\n    model_chat,\n    model_generate,\n    model_launch,\n    model_list,\n    model_terminate,\n    register_model,\n    remove_cache,\n    unregister_model,\n)\n\n\n@pytest.mark.parametrize(\"stream\", [True, False])\n@pytest.mark.parametrize(\"model_uid\", [None, \"my_model_uid\"])\ndef test_cmdline(setup, stream, model_uid):\n    endpoint, _ = setup\n    runner = CliRunner()\n\n    # launch model\n    \"\"\"\n    result = runner.invoke(\n        model_launch,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-name\",\n            \"tiny-llama\",\n            \"--size-in-billions\",\n            1,\n            \"--model-format\",\n            \"ggufv2\",\n            \"--quantization\",\n            \"Q2_K\",\n        ],\n    )\n    assert result.exit_code == 0\n    assert \"Model uid: \" in result.stdout\n\n    model_uid = result.stdout.split(\"Model uid: \")[1].strip()\n    \"\"\"\n    # if use `model_launch` command to launch model, CI will fail.\n    # So use client to launch model in temporary\n    client = Client(endpoint)\n    # CI has limited resources, use replica 1\n    replica = 1\n    original_model_uid = model_uid\n    model_uid = client.launch_model(\n        model_name=\"qwen1.5-chat\",\n        model_engine=\"llama.cpp\",\n        model_uid=model_uid,\n        model_size_in_billions=\"0_5\",\n        quantization=\"q4_0\",\n        replica=replica,\n    )\n    if original_model_uid == \"my_model_uid\":\n        assert model_uid == \"my_model_uid\"\n    assert len(model_uid) != 0\n\n    # list model\n    result = runner.invoke(\n        model_list,\n        [\n            \"--endpoint\",\n            endpoint,\n        ],\n    )\n    assert result.exit_code == 0\n    assert model_uid in result.output\n\n    # model generate\n    result = runner.invoke(\n        model_generate,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-uid\",\n            model_uid,\n            \"--stream\",\n            stream,\n        ],\n        input=\"Once upon a time, there was a very old computer.\\n\\n\",\n    )\n    assert result.exit_code == 0\n    assert len(result.stdout) != 0\n    print(result.stdout)\n\n    # model chat\n    result = runner.invoke(\n        model_chat,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-uid\",\n            model_uid,\n            \"--stream\",\n            stream,\n        ],\n        input=\"Write a poem.\\n\\n\",\n    )\n    assert result.exit_code == 0\n    assert len(result.stdout) != 0\n    print(result.stdout)\n\n    # terminate model\n    result = runner.invoke(\n        model_terminate,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-uid\",\n            model_uid,\n        ],\n    )\n    assert result.exit_code == 0\n\n    # list model again\n    result = runner.invoke(\n        model_list,\n        [\n            \"--endpoint\",\n            endpoint,\n        ],\n    )\n    assert result.exit_code == 0\n    assert model_uid not in result.stdout\n\n\ndef test_cmdline_model_path_error(setup):\n    endpoint, _ = setup\n    runner = CliRunner(mix_stderr=False)\n\n    # launch model\n    result = runner.invoke(\n        model_launch,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-name\",\n            \"tiny-llama\",\n            \"--size-in-billions\",\n            1,\n            \"--model-format\",\n            \"ggufv2\",\n            \"--quantization\",\n            \"Q2_K\",\n            \"--model-path\",\n            \"/path/to/model\",\n            \"--model_path\",\n            \"/path/to/model\",\n        ],\n    )\n    assert result.exit_code > 0\n    with pytest.raises(\n        ValueError, match=\"Cannot set both for --model-path and --model_path\"\n    ):\n        t, e, tb = result.exc_info\n        raise e.with_traceback(tb)\n\n\ndef test_cmdline_of_custom_model(setup):\n    endpoint, _ = setup\n    runner = CliRunner()\n\n    # register custom model\n    custom_model_desc = \"\"\"{\n  \"version\": 2,\n  \"context_length\":2048,\n  \"model_name\": \"custom_model\",\n  \"model_lang\": [\n    \"en\", \"zh\"\n  ],\n  \"model_ability\": [\n    \"embed\",\n    \"chat\"\n  ],\n  \"model_family\": \"other\",\n  \"model_specs\": [\n    {\n      \"model_format\": \"pytorch\",\n      \"model_size_in_billions\": 7,\n      \"quantization\": \"none\",\n      \"model_id\": \"ziqingyang/chinese-alpaca-2-7b\"\n    }\n  ],\n  \"prompt_style\": {\n    \"style_name\": \"ADD_COLON_SINGLE\",\n    \"system_prompt\": \"Below is an instruction that describes a task. Write a response that appropriately completes the request.\",\n    \"roles\": [\n      \"Instruction\",\n      \"Response\"\n    ],\n    \"intra_message_sep\": \"\\\\n\\\\n### \"\n  }\n}\"\"\"\n    with tempfile.NamedTemporaryFile(delete=False) as temp_file:\n        temp_filename = temp_file.name\n        temp_file.write(custom_model_desc.encode(\"utf-8\"))\n    result = runner.invoke(\n        register_model,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-type\",\n            \"LLM\",\n            \"--file\",\n            temp_filename,\n        ],\n    )\n    assert result.exit_code == 0\n    os.unlink(temp_filename)\n\n    # list model registrations\n    result = runner.invoke(\n        list_model_registrations,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-type\",\n            \"LLM\",\n        ],\n    )\n    assert result.exit_code == 0\n    assert \"custom_model\" in result.stdout\n\n    # unregister custom model\n    result = runner.invoke(\n        unregister_model,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-type\",\n            \"LLM\",\n            \"--model-name\",\n            \"custom_model\",\n        ],\n    )\n    assert result.exit_code == 0\n\n    # list model registrations again\n    result = runner.invoke(\n        list_model_registrations,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-type\",\n            \"LLM\",\n        ],\n    )\n    assert result.exit_code == 0\n    assert \"custom_model\" not in result.stdout\n\n\ndef test_rotate_logs(setup_with_file_logging):\n    endpoint, _, log_file = setup_with_file_logging\n    client = Client(endpoint)\n    runner = CliRunner()\n    replica = 1 if os.name == \"nt\" else 2\n    model_uid = client.launch_model(\n        model_name=\"qwen1.5-chat\",\n        model_engine=\"llama.cpp\",\n        model_uid=None,\n        model_size_in_billions=\"0_5\",\n        quantization=\"q4_0\",\n        replica=replica,\n    )\n    assert model_uid is not None\n    assert len(model_uid) != 0\n\n    # model generate\n    result = runner.invoke(\n        model_generate,\n        [\n            \"--endpoint\",\n            endpoint,\n            \"--model-uid\",\n            model_uid,\n            \"--stream\",\n            False,\n        ],\n        input=\"Once upon a time, there was a very old computer.\\n\\n\",\n    )\n    assert result.exit_code == 0\n    assert len(result.stdout) != 0\n\n    # test logs\n    assert os.path.exists(log_file)\n    with open(log_file, \"r\") as f:\n        content = f.read()\n        assert len(content) > 0\n\n\ndef test_list_cached_models(setup):\n    endpoint, _ = setup\n    runner = CliRunner()\n\n    result = runner.invoke(\n        list_cached_models,\n        [\"--endpoint\", endpoint, \"--model_name\", \"qwen1.5-chat\"],\n    )\n    assert \"model_name\" in result.stdout\n    assert \"model_format\" in result.stdout\n    assert \"model_size_in_billions\" in result.stdout\n    assert \"quantization\" in result.stdout\n    assert \"model_version\" in result.stdout\n    assert \"path\" in result.stdout\n    assert \"actor_ip_address\" in result.stdout\n\n\ndef test_remove_cache(setup):\n    endpoint, _ = setup\n    runner = CliRunner()\n\n    result = runner.invoke(\n        remove_cache,\n        [\"--endpoint\", endpoint, \"--model_version\", \"qwen1.5-chat\"],\n        input=\"y\\n\",\n    )\n\n    assert result.exit_code == 0\n    assert \"Cache directory qwen1.5-chat has been deleted.\"\n\n\ndef test_launch_error_in_passing_parameters():\n    runner = CliRunner()\n\n    # Known parameter but not provided with value.\n    result = runner.invoke(\n        model_launch,\n        [\n            \"--model-engine\",\n            \"transformers\",\n            \"--model-name\",\n            \"qwen2.5-instruct\",\n            \"--model-uid\",\n            \"-s\",\n            \"0.5\",\n            \"-f\",\n            \"gptq\",\n            \"-q\",\n            \"INT4\",\n            \"111\",\n            \"-l\",\n        ],\n    )\n    assert result.exit_code == 1\n    assert (\n        \"You must specify extra kwargs with `--` prefix. There is an error in parameter passing that is 0.5.\"\n        in str(result)\n    )\n\n    # Unknown parameter\n    result = runner.invoke(\n        model_launch,\n        [\n            \"--model-engine\",\n            \"transformers\",\n            \"--model-name\",\n            \"qwen2.5-instruct\",\n            \"--model-uid\",\n            \"123\",\n            \"-s\",\n            \"0.5\",\n            \"-f\",\n            \"gptq\",\n            \"-q\",\n            \"INT4\",\n            \"-l\",\n            \"111\",\n        ],\n    )\n    assert result.exit_code == 1\n    assert (\n        \"You must specify extra kwargs with `--` prefix. There is an error in parameter passing that is -l.\"\n        in str(result)\n    )\n"
  },
  {
    "path": "xinference/deploy/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport os\nimport time\nimport typing\nfrom typing import TYPE_CHECKING, Any, Optional\n\nimport xoscar as xo\n\nfrom ..constants import XINFERENCE_DEFAULT_LOG_FILE_NAME, XINFERENCE_LOG_DIR\n\nif TYPE_CHECKING:\n    from xoscar.backends.pool import MainActorPoolType\n\nlogger = logging.getLogger(__name__)\n\n# mainly for k8s\nXINFERENCE_POD_NAME_ENV_KEY = \"XINFERENCE_POD_NAME\"\n\n\nclass LoggerNameFilter(logging.Filter):\n    def filter(self, record):\n        return record.name.startswith(\"xinference\") or (\n            record.name.startswith(\"uvicorn.error\")\n            and record.getMessage().startswith(\"Uvicorn running on\")\n        )\n\n\ndef get_log_file(sub_dir: str):\n    \"\"\"\n    sub_dir should contain a timestamp.\n    \"\"\"\n    pod_name = os.environ.get(XINFERENCE_POD_NAME_ENV_KEY, None)\n    if pod_name is not None:\n        sub_dir = sub_dir + \"_\" + pod_name\n    log_dir = os.path.join(XINFERENCE_LOG_DIR, sub_dir)\n    # Here should be creating a new directory each time, so `exist_ok=False`\n    os.makedirs(log_dir, exist_ok=False)\n    return os.path.join(log_dir, XINFERENCE_DEFAULT_LOG_FILE_NAME)\n\n\ndef get_config_dict(\n    log_level: str, log_file_path: str, log_backup_count: int, log_max_bytes: int\n) -> dict:\n    # for windows, the path should be a raw string.\n    log_file_path = (\n        log_file_path.encode(\"unicode-escape\").decode()\n        if os.name == \"nt\"\n        else log_file_path\n    )\n    log_level = log_level.upper()\n    config_dict = {\n        \"version\": 1,\n        \"disable_existing_loggers\": False,\n        \"formatters\": {\n            \"formatter\": {\n                \"format\": (\n                    \"%(asctime)s %(name)-12s %(process)d %(levelname)-8s %(message)s\"\n                )\n            },\n        },\n        \"filters\": {\n            \"logger_name_filter\": {\n                \"()\": __name__ + \".LoggerNameFilter\",\n            },\n        },\n        \"handlers\": {\n            \"stream_handler\": {\n                \"class\": \"logging.StreamHandler\",\n                \"formatter\": \"formatter\",\n                \"level\": log_level,\n                \"stream\": \"ext://sys.stderr\",\n                \"filters\": [\"logger_name_filter\"],\n            },\n            \"console_handler\": {\n                \"class\": \"logging.StreamHandler\",\n                \"formatter\": \"formatter\",\n                \"level\": log_level,\n                \"stream\": \"ext://sys.stderr\",\n            },\n            \"file_handler\": {\n                \"class\": \"logging.handlers.RotatingFileHandler\",\n                \"formatter\": \"formatter\",\n                \"level\": log_level,\n                \"filename\": log_file_path,\n                \"mode\": \"a\",\n                \"maxBytes\": log_max_bytes,\n                \"backupCount\": log_backup_count,\n                \"encoding\": \"utf8\",\n            },\n        },\n        \"loggers\": {\n            \"xinference\": {\n                \"handlers\": [\"stream_handler\", \"file_handler\"],\n                \"level\": log_level,\n                \"propagate\": False,\n            },\n            \"uvicorn\": {\n                \"handlers\": [\"stream_handler\", \"file_handler\"],\n                \"level\": log_level,\n                \"propagate\": False,\n            },\n            \"uvicorn.error\": {\n                \"handlers\": [\"stream_handler\", \"file_handler\"],\n                \"level\": log_level,\n                \"propagate\": False,\n            },\n            \"uvicorn.access\": {\n                \"handlers\": [\"stream_handler\", \"file_handler\"],\n                \"level\": log_level,\n                \"propagate\": False,\n            },\n            \"transformers\": {\n                \"handlers\": [\"console_handler\", \"file_handler\"],\n                \"level\": log_level,\n                \"propagate\": False,\n            },\n            \"vllm\": {\n                \"handlers\": [\"console_handler\", \"file_handler\"],\n                \"level\": log_level,\n                \"propagate\": False,\n            },\n        },\n    }\n    return config_dict\n\n\nasync def create_worker_actor_pool(\n    address: str, logging_conf: Optional[dict] = None\n) -> \"MainActorPoolType\":\n    return await xo.create_actor_pool(\n        address=address,\n        n_process=0,\n        auto_recover=\"process\",\n        logging_conf={\"dict\": logging_conf},\n    )\n\n\ndef health_check(address: str, max_attempts: int, sleep_interval: int = 3) -> bool:\n    async def health_check_internal():\n        import time\n\n        attempts = 0\n        while attempts < max_attempts:\n            time.sleep(sleep_interval)\n            try:\n                from ..core.supervisor import SupervisorActor\n\n                supervisor_ref: xo.ActorRefType[SupervisorActor] = await xo.actor_ref(  # type: ignore\n                    address=address, uid=SupervisorActor.default_uid()\n                )\n\n                await supervisor_ref.get_status()\n                return True\n            except Exception as e:\n                logger.debug(f\"Error while checking cluster: {e}\")\n\n            attempts += 1\n            if attempts < max_attempts:\n                logger.debug(\n                    f\"Cluster not available, will try {max_attempts - attempts} more times\"\n                )\n\n        return False\n\n    import asyncio\n\n    from ..isolation import Isolation\n\n    isolation = Isolation(asyncio.new_event_loop(), threaded=True)\n    isolation.start()\n    available = isolation.call(health_check_internal())\n    isolation.stop()\n    return available\n\n\ndef get_timestamp_ms():\n    t = time.time()\n    return int(round(t * 1000))\n\n\n@typing.no_type_check\ndef handle_click_args_type(arg: str) -> Any:\n    if arg == \"None\":\n        return None\n    if arg in (\"True\", \"true\"):\n        return True\n    if arg in (\"False\", \"false\"):\n        return False\n    try:\n        result = int(arg)\n        return result\n    except Exception:\n        pass\n\n    try:\n        result = float(arg)\n        return result\n    except Exception:\n        pass\n\n    return arg\n\n\ndef set_envs(key: str, value: str):\n    \"\"\"\n    Environment variables are set by the parent process and inherited by child processes\n    \"\"\"\n    os.environ[key] = value\n"
  },
  {
    "path": "xinference/deploy/worker.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nimport multiprocessing\nimport os\nfrom typing import Any, Optional\n\nimport xoscar as xo\nfrom xoscar import MainActorPoolType\n\nfrom ..core.worker import WorkerActor\nfrom ..device_utils import get_available_device_env_name, gpu_count\n\nlogger = logging.getLogger(__name__)\n\n\nasync def start_worker_components(\n    address: str,\n    supervisor_address: str,\n    main_pool: MainActorPoolType,\n    metrics_exporter_host: Optional[str],\n    metrics_exporter_port: Optional[int],\n):\n    gpu_device_indices = []\n    env_name = get_available_device_env_name()\n    cuda_visible_devices = os.environ.get(env_name) if env_name else None\n\n    if cuda_visible_devices and cuda_visible_devices != \"-1\":\n        gpu_device_indices.extend([int(i) for i in cuda_visible_devices.split(\",\")])\n    else:\n        gpu_device_indices = list(range(gpu_count()))\n\n    await xo.create_actor(\n        WorkerActor,\n        address=address,\n        uid=WorkerActor.default_uid(),\n        supervisor_address=supervisor_address,\n        main_pool=main_pool,\n        gpu_devices=gpu_device_indices,\n        metrics_exporter_host=metrics_exporter_host,\n        metrics_exporter_port=metrics_exporter_port,\n    )\n\n\nasync def _start_worker(\n    address: str,\n    supervisor_address: str,\n    metrics_exporter_host: Optional[str] = None,\n    metrics_exporter_port: Optional[int] = None,\n    logging_conf: Any = None,\n):\n    from .utils import create_worker_actor_pool\n\n    pool = await create_worker_actor_pool(address=address, logging_conf=logging_conf)\n    await start_worker_components(\n        address=address,\n        supervisor_address=supervisor_address,\n        main_pool=pool,\n        metrics_exporter_host=metrics_exporter_host,\n        metrics_exporter_port=metrics_exporter_port,\n    )\n    await pool.join()\n\n\ndef main(\n    address: str,\n    supervisor_address: str,\n    metrics_exporter_host: Optional[str] = None,\n    metrics_exporter_port: Optional[int] = None,\n    logging_conf: Optional[dict] = None,\n):\n    # force to set spawn,\n    # cuda may be inited in xoscar virtualenv\n    # which will raise error after sub pool is created\n    multiprocessing.set_start_method(\"spawn\")\n\n    loop = asyncio.get_event_loop()\n    task = loop.create_task(\n        _start_worker(\n            address,\n            supervisor_address,\n            metrics_exporter_host,\n            metrics_exporter_port,\n            logging_conf,\n        )\n    )\n\n    try:\n        loop.run_until_complete(task)\n    except KeyboardInterrupt:\n        task.cancel()\n        loop.run_until_complete(task)\n        # avoid displaying exception-unhandled warnings\n        task.exception()\n"
  },
  {
    "path": "xinference/device_utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom typing import Dict, Literal, Union\n\nimport torch\n\nDeviceType = Literal[\"cuda\", \"mps\", \"xpu\", \"vacc\", \"npu\", \"mlu\", \"musa\", \"cpu\"]\nDEVICE_TO_ENV_NAME = {\n    \"cuda\": \"CUDA_VISIBLE_DEVICES\",\n    \"npu\": \"ASCEND_RT_VISIBLE_DEVICES\",\n    \"mlu\": \"MLU_VISIBLE_DEVICES\",\n    \"vacc\": \"VACC_VISIBLE_DEVICES\",\n    \"musa\": \"MUSA_VISIBLE_DEVICES\",\n}\n\n\ndef is_vacc_available() -> bool:\n    try:\n        import torch\n        import torch_vacc  # noqa: F401\n\n        return torch.vacc.is_available()\n    except ImportError:\n        return False\n\n\ndef is_xpu_available() -> bool:\n    return hasattr(torch, \"xpu\") and torch.xpu.is_available()\n\n\ndef is_npu_available() -> bool:\n    try:\n        import torch\n        import torch_npu  # noqa: F401\n\n        return torch.npu.is_available()\n    except ImportError:\n        return False\n\n\ndef is_mlu_available() -> bool:\n    try:\n        import torch\n        import torch_mlu  # noqa: F401\n\n        return torch.mlu.is_available()\n    except ImportError:\n        return False\n\n\ndef is_musa_available() -> bool:\n    try:\n        import torch\n        import torch_musa  # noqa: F401\n        import torchada  # noqa: F401\n\n        return torch.musa.is_available()\n    except ImportError:\n        return False\n\n\ndef get_available_device() -> DeviceType:\n    if torch.cuda.is_available():\n        return \"cuda\"\n    elif torch.backends.mps.is_available():\n        return \"mps\"\n    elif is_xpu_available():\n        return \"xpu\"\n    elif is_npu_available():\n        return \"npu\"\n    elif is_mlu_available():\n        return \"mlu\"\n    elif is_vacc_available():\n        return \"vacc\"\n    elif is_musa_available():\n        return \"musa\"\n    return \"cpu\"\n\n\ndef is_device_available(device: str) -> bool:\n    if device == \"cuda\":\n        return torch.cuda.is_available()\n    elif device == \"mps\":\n        return torch.backends.mps.is_available()\n    elif device == \"xpu\":\n        return is_xpu_available()\n    elif device == \"npu\":\n        return is_npu_available()\n    elif device == \"mlu\":\n        return is_mlu_available()\n    elif device == \"vacc\":\n        return is_vacc_available()\n    elif device == \"musa\":\n        return is_musa_available()\n    elif device == \"cpu\":\n        return True\n\n    return False\n\n\ndef move_model_to_available_device(model):\n    device = get_available_device()\n\n    if device == \"cpu\":\n        return model\n\n    return model.to(device)\n\n\ndef get_device_preferred_dtype(device: str) -> Union[torch.dtype, None]:\n    if device == \"cpu\":\n        return torch.float32\n    elif (\n        device == \"cuda\"\n        or device == \"mps\"\n        or device == \"npu\"\n        or device == \"mlu\"\n        or device == \"vacc\"\n        or device == \"musa\"\n    ):\n        return torch.float16\n    elif device == \"xpu\":\n        return torch.bfloat16\n\n    return None\n\n\ndef is_hf_accelerate_supported(device: str) -> bool:\n    return (\n        device == \"cuda\"\n        or device == \"xpu\"\n        or device == \"npu\"\n        or device == \"mlu\"\n        or device == \"musa\"\n    )\n\n\ndef empty_cache():\n    if torch.cuda.is_available():\n        torch.cuda.empty_cache()\n    if torch.backends.mps.is_available():\n        try:\n            torch.mps.empty_cache()\n        except RuntimeError as e:\n            # Handle known MPS memory management issues in PyTorch 3.13+\n            if \"invalid low watermark ratio\" in str(e):\n                # This is a known issue with PyTorch 3.13+ on macOS.\n                # We can safely ignore this error as it doesn't affect functionality.\n                pass\n            else:\n                # Re-raise other RuntimeErrors\n                raise\n    if is_xpu_available():\n        torch.xpu.empty_cache()\n    if is_npu_available():\n        torch.npu.empty_cache()\n    if is_mlu_available():\n        torch.mlu.empty_cache()\n    if is_vacc_available():\n        torch.vacc.empty_cache()\n    if is_musa_available():\n        torch.musa.empty_cache()\n\n\ndef get_available_device_env_name():\n    return DEVICE_TO_ENV_NAME.get(get_available_device())\n\n\ndef gpu_count():\n    device_module = torch.get_device_module(get_available_device())\n    if torch.cuda.is_available() or is_vacc_available() or is_musa_available():\n        import os\n\n        visible_devices_env = os.getenv(get_available_device_env_name(), None)\n        if visible_devices_env is None:\n            return device_module.device_count()\n\n        visible_devices = visible_devices_env.split(\",\") if visible_devices_env else []\n\n        return min(device_module.device_count(), len(visible_devices))\n    elif is_xpu_available() or is_npu_available() or is_mlu_available():\n        return device_module.device_count()\n    else:\n        return 0\n\n\ndef _get_nvidia_gpu_mem_info(gpu_id: int) -> Dict[str, float]:\n    from pynvml import (\n        nvmlDeviceGetHandleByIndex,\n        nvmlDeviceGetMemoryInfo,\n        nvmlDeviceGetName,\n        nvmlDeviceGetUtilizationRates,\n    )\n\n    handler = nvmlDeviceGetHandleByIndex(gpu_id)\n    gpu_name = nvmlDeviceGetName(handler)\n    mem_info = nvmlDeviceGetMemoryInfo(handler)\n    utilization = nvmlDeviceGetUtilizationRates(handler)\n    return {\n        \"name\": gpu_name,\n        \"total\": mem_info.total,\n        \"used\": mem_info.used,\n        \"free\": mem_info.free,\n        \"util\": utilization.gpu,\n    }\n\n\ndef get_nvidia_gpu_info() -> Dict:\n    from pynvml import nvmlDeviceGetCount, nvmlInit, nvmlShutdown\n\n    try:\n        nvmlInit()\n        device_count = nvmlDeviceGetCount()\n        res = {}\n        for i in range(device_count):\n            res[f\"gpu-{i}\"] = _get_nvidia_gpu_mem_info(i)\n        return res\n    except Exception:\n        # Fall back to torch-based detection when NVML lacks support.\n        try:\n            import torch\n\n            if torch.cuda.is_available():\n                res = {}\n                for i in range(torch.cuda.device_count()):\n                    res[f\"gpu-{i}\"] = {\n                        \"name\": torch.cuda.get_device_name(i),\n                        \"total\": 0,\n                        \"used\": 0,\n                        \"free\": 0,\n                        \"util\": 0,\n                    }\n                return res\n        except Exception:\n            pass\n        # TODO: add log here\n        # logger.debug(f\"Cannot init nvml. Maybe due to lack of NVIDIA GPUs or incorrect installation of CUDA.\")\n        return {}\n    finally:\n        try:\n            nvmlShutdown()\n        except Exception:\n            pass\n"
  },
  {
    "path": "xinference/fields.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom ._compat import Field\n\nnone_field = Field(None)\n\nstream_interval_field = Field(default=2)\n\necho_field = Field(\n    default=False,\n    description=\"Whether to echo the prompt in the generated text. Useful for chatbots.\",\n)\n\nlogprobs_field = Field(\n    default=None,\n    ge=0,\n    description=\"The number of logprobs to generate. If None, no logprobs are generated.\",\n)\n\n# Note: changed from 1024 to None to let the model output maximum content which has better user experience\nmax_tokens_field = Field(\n    default=None,\n    ge=1,\n    description=\"The maximum number of tokens to generate.\",\n)\n\ntemperature_field = Field(\n    default=0.8,\n    ge=0.0,\n    le=2.0,\n    description=\"Adjust the randomness of the generated text.\\n\\n\"\n    \"Temperature is a hyperparameter that controls the randomness of the generated text. \"\n    \"It affects the probability distribution of the model's output tokens. \"\n    \"A higher temperature (e.g., 1.5) makes the output more random and creative, \"\n    \"while a lower temperature (e.g., 0.5) makes the output more focused, deterministic, and conservative. \"\n    \"The default value is 0.8, which provides a balance between randomness and determinism. \"\n    \"At the extreme, a temperature of 0 will always pick the most likely next token, \"\n    \"leading to identical outputs in each run.\",\n)\n\ntop_p_field = Field(\n    default=0.95,\n    ge=0.0,\n    le=1.0,\n    description=\"Limit the next token selection to a subset of tokens with \"\n    \"a cumulative probability above a threshold P.\\n\\n\"\n    \"Top-p sampling, also known as nucleus sampling, \"\n    \"is another text generation method that selects the next token from a subset of tokens \"\n    \"that together have a cumulative probability of at least p. \"\n    \"This method provides a balance between diversity and quality by considering \"\n    \"both the probabilities of tokens and the number of tokens to sample from. \"\n    \"A higher value for top_p (e.g., 0.95) will lead to more diverse text, \"\n    \"while a lower value (e.g., 0.5) will generate more focused and conservative text.\",\n)\n\nstop_field = Field(\n    default=[],\n    description=\"A list of tokens at which to stop generation. If None, no stop tokens are used.\",\n)\n\nstream_field = Field(\n    default=False,\n    description=\"Whether to stream the results as they are generated. Useful for chatbots.\",\n)\n\nstream_option_field = Field(\n    default={\n        \"include_usage\": False,\n    },\n    description=\"If set, an additional chunk will be streamed before the `data: [DONE]` message.\",\n)\n\ntop_k_field = Field(\n    default=40,\n    ge=0,\n    description=\"Limit the next token selection to the K most probable tokens.\\n\\n\"\n    \"Top-k sampling is a text generation method that selects the next token \"\n    \"only from the top k most likely tokens predicted by the model. \"\n    \"It helps reduce the risk of generating low-probability or nonsensical tokens, \"\n    \"but it may also limit the diversity of the output. \"\n    \"A higher value for top_k (e.g., 100) will consider more tokens and lead to more diverse text, \"\n    \"while a lower value (e.g., 10) will focus on the most probable tokens and \"\n    \"generate more conservative text.\",\n)\n\nrepeat_penalty_field = Field(\n    default=1.1,\n    ge=0.0,\n    description=\"A penalty applied to each token that is already generated. \"\n    \"This helps prevent the model from repeating itself.\\n\\n\"\n    \"Repeat penalty is a hyperparameter used to penalize the repetition of token sequences \"\n    \"during text generation. \"\n    \"It helps prevent the model from generating repetitive or monotonous text. \"\n    \"A higher value (e.g., 1.5) will penalize repetitions more strongly, \"\n    \"while a lower value (e.g., 0.9) will be more lenient.\",\n)\n\npresence_penalty_field = Field(\n    default=0.0,\n    ge=-2.0,\n    le=2.0,\n    description=\"Positive values penalize new tokens based on whether they appear in the text so far, \"\n    \"increasing the model's likelihood to talk about new topics.\",\n)\n\nfrequency_penalty_field = Field(\n    default=0.0,\n    ge=-2.0,\n    le=2.0,\n    description=\"Positive values penalize new tokens based on their existing frequency in the text so far, \"\n    \"decreasing the model's likelihood to repeat the same line verbatim.\",\n)\n\nmirostat_mode_field = Field(\n    default=0,\n    ge=0,\n    le=2,\n    description=\"Enable Mirostat constant-perplexity algorithm of the specified version (1 or 2; 0 = disabled)\",\n)\n\nmirostat_tau_field = Field(\n    default=5.0,\n    ge=0.0,\n    le=10.0,\n    description=\"Mirostat target entropy, i.e. the target perplexity - lower values produce focused and coherent text, \"\n    \"larger values produce more diverse and less coherent text\",\n)\n\nmirostat_eta_field = Field(\n    default=0.1, ge=0.001, le=1.0, description=\"Mirostat learning rate\"\n)\n"
  },
  {
    "path": "xinference/isolation.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport threading\nfrom typing import Any, Coroutine\n\n\nclass Isolation:\n    # TODO: better move isolation to xoscar.\n    def __init__(\n        self,\n        loop: asyncio.AbstractEventLoop,\n        threaded: bool = True,\n        daemon: bool = True,\n    ):\n        self._loop = loop\n        self._threaded = threaded\n\n        self._stopped = None\n        self._thread = None\n        self._thread_ident = None\n        self._daemon = daemon\n\n    def _run(self):\n        asyncio.set_event_loop(self._loop)\n        self._stopped = asyncio.Event()\n        self._loop.run_until_complete(self._stopped.wait())\n        self._cancel_all_tasks(self._loop)\n\n    @staticmethod\n    def _cancel_all_tasks(loop):\n        to_cancel = asyncio.all_tasks(loop)\n        if not to_cancel:\n            return\n\n        for task in to_cancel:\n            task.cancel()\n\n        loop.run_until_complete(asyncio.gather(*to_cancel, return_exceptions=True))\n\n        for task in to_cancel:\n            if task.cancelled():\n                continue\n            if task.exception() is not None:\n                loop.call_exception_handler(\n                    {\n                        \"message\": \"unhandled exception during asyncio.run() shutdown\",\n                        \"exception\": task.exception(),\n                        \"task\": task,\n                    }\n                )\n\n    def start(self):\n        if self._threaded:\n            self._thread = thread = threading.Thread(target=self._run)\n            if self._daemon:\n                thread.daemon = True\n            thread.start()\n            self._thread_ident = thread.ident\n\n    def call(self, coro: Coroutine) -> Any:\n        fut = asyncio.run_coroutine_threadsafe(coro, self._loop)\n        return fut.result()\n\n    @property\n    def thread_ident(self):\n        return self._thread_ident\n\n    @property\n    def loop(self):\n        return self._loop\n\n    async def _stop(self):\n        self._stopped.set()\n\n    def stop(self):\n        if self._threaded:\n            asyncio.run_coroutine_threadsafe(self._stop(), self._loop).result()\n            self._thread.join()\n"
  },
  {
    "path": "xinference/model/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\ndef _install():\n    from .audio import _install as audio_install\n    from .embedding import _install as embedding_install\n    from .flexible import _install as flexible_install\n    from .image import _install as image_install\n    from .llm import _install as llm_install\n    from .rerank import _install as rerank_install\n    from .video import _install as video_install\n\n    llm_install()\n    audio_install()\n    embedding_install()\n    flexible_install()\n    image_install()\n    rerank_install()\n    video_install()\n\n\n_install()\ndel _install\n"
  },
  {
    "path": "xinference/model/audio/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport codecs\nimport json\nimport os\nimport platform\nimport sys\nimport warnings\nfrom typing import Dict, List\n\nfrom ...constants import XINFERENCE_MODEL_DIR\nfrom ..utils import flatten_model_src\nfrom .core import (\n    AUDIO_MODEL_DESCRIPTIONS,\n    AudioModelFamilyV2,\n    generate_audio_description,\n    get_audio_model_descriptions,\n)\nfrom .custom import (\n    CustomAudioModelFamilyV2,\n    get_user_defined_audios,\n    register_audio,\n    unregister_audio,\n)\n\nBUILTIN_AUDIO_MODELS: Dict[str, List[\"AudioModelFamilyV2\"]] = {}\n\n\ndef register_custom_model():\n    from ..custom import migrate_from_v1_to_v2\n\n    # migrate from v1 to v2 first\n    migrate_from_v1_to_v2(\"audio\", CustomAudioModelFamilyV2)\n\n    # if persist=True, load them when init\n    user_defined_audio_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"audio\")\n    if os.path.isdir(user_defined_audio_dir):\n        for f in os.listdir(user_defined_audio_dir):\n            try:\n                with codecs.open(\n                    os.path.join(user_defined_audio_dir, f), encoding=\"utf-8\"\n                ) as fd:\n                    user_defined_audio_family = CustomAudioModelFamilyV2.parse_obj(\n                        json.load(fd)\n                    )\n                    register_audio(user_defined_audio_family, persist=False)\n            except Exception as e:\n                warnings.warn(f\"{user_defined_audio_dir}/{f} has error, {e}\")\n\n\ndef _need_filter(spec: dict):\n    if (sys.platform != \"darwin\" or platform.processor() != \"arm\") and spec.get(\n        \"engine\", \"\"\n    ).upper() == \"MLX\":\n        return True\n    return False\n\n\ndef _install():\n    # Install models with intelligent merging based on timestamps\n    from ..utils import install_models_with_merge\n\n    install_models_with_merge(\n        BUILTIN_AUDIO_MODELS,\n        \"model_spec.json\",\n        \"audio\",\n        \"audio_models.json\",\n        has_downloaded_models,\n        load_model_family_from_json,\n    )\n\n    # register model description after recording model revision\n    for model_name, model_specs in BUILTIN_AUDIO_MODELS.items():\n        model_spec = [x for x in model_specs if x.model_hub == \"huggingface\"][0]\n        if model_spec.model_name not in AUDIO_MODEL_DESCRIPTIONS:\n            AUDIO_MODEL_DESCRIPTIONS.update(generate_audio_description(model_spec))\n\n    register_custom_model()\n\n    # register model description\n    for ud_audio in get_user_defined_audios():\n        AUDIO_MODEL_DESCRIPTIONS.update(generate_audio_description(ud_audio))\n\n\ndef register_builtin_model():\n    \"\"\"Register built-in audio models.\"\"\"\n    _install()\n\n\ndef has_downloaded_models():\n    \"\"\"Check if downloaded JSON configurations exist.\"\"\"\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"audio\")\n    json_file_path = os.path.join(builtin_dir, \"audio_models.json\")\n    return os.path.exists(json_file_path)\n\n\ndef load_downloaded_models():\n    \"\"\"Load downloaded JSON configurations from the builtin directory.\"\"\"\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"audio\")\n    json_file_path = os.path.join(builtin_dir, \"audio_models.json\")\n\n    try:\n        load_model_family_from_json(json_file_path, BUILTIN_AUDIO_MODELS)\n    except Exception as e:\n        warnings.warn(\n            f\"Failed to load downloaded audio models from {json_file_path}: {e}\"\n        )\n        # Fall back to built-in models if download fails\n        load_model_family_from_json(\"model_spec.json\", BUILTIN_AUDIO_MODELS)\n\n\ndef load_model_family_from_json(json_filename, target_families):\n    # Handle both relative (module directory) and absolute paths\n    if os.path.isabs(json_filename):\n        json_path = json_filename\n    else:\n        json_path = os.path.join(os.path.dirname(__file__), json_filename)\n\n    flattened_model_specs = []\n    for spec in json.load(codecs.open(json_path, \"r\", encoding=\"utf-8\")):\n        flattened_model_specs.extend(flatten_model_src(spec))\n\n    for spec in flattened_model_specs:\n        if not _need_filter(spec):\n            if spec[\"model_name\"] not in target_families:\n                target_families[spec[\"model_name\"]] = [AudioModelFamilyV2(**spec)]\n            else:\n                target_families[spec[\"model_name\"]].append(AudioModelFamilyV2(**spec))\n\n    del json_path\n"
  },
  {
    "path": "xinference/model/audio/chattts.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nimport logging\nfrom io import BytesIO\nfrom typing import TYPE_CHECKING, Optional\n\nfrom ..utils import set_all_random_seed\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass ChatTTSModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        import ChatTTS\n        import torch\n\n        torch._dynamo.config.cache_size_limit = 64\n        torch._dynamo.config.suppress_errors = True\n        torch.set_float32_matmul_precision(\"high\")\n        self._model = ChatTTS.Chat()\n        logger.info(\"Load ChatTTS model with kwargs: %s\", self._kwargs)\n        ok = self._model.load(\n            source=\"custom\", custom_path=self._model_path, **self._kwargs\n        )\n        if not ok:\n            raise Exception(f\"The ChatTTS model is not correct: {self._model_path}\")\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n    ):\n        import ChatTTS\n        import numpy as np\n        import torch\n        import xxhash\n\n        from .utils import audio_stream_generator, audio_to_bytes\n\n        rnd_spk_emb = None\n\n        if len(voice) > 400:\n            try:\n                assert self._model is not None\n                b = base64.b64decode(voice)\n                bio = BytesIO(b)\n                tensor = torch.load(bio, map_location=\"cpu\")\n                rnd_spk_emb = self._model._encode_spk_emb(tensor)\n                logger.info(\"Speech by input speaker\")\n            except Exception as e:\n                logger.info(\"Fallback to random speaker due to %s\", e)\n\n        if rnd_spk_emb is None:\n            seed = xxhash.xxh32_intdigest(voice)\n\n            set_all_random_seed(seed)\n            torch.backends.cudnn.deterministic = True\n            torch.backends.cudnn.benchmark = False\n\n            assert self._model is not None\n            rnd_spk_emb = self._model.sample_random_speaker()\n            logger.info(\"Speech by voice %s\", voice)\n\n        default = 5\n        infer_speed = int(default * speed)\n        params_infer_code = ChatTTS.Chat.InferCodeParams(\n            prompt=f\"[speed_{infer_speed}]\", spk_emb=rnd_spk_emb\n        )\n\n        assert self._model is not None\n\n        output = self._model.infer(\n            [input], params_infer_code=params_infer_code, stream=stream\n        )\n        if stream:\n\n            def _gen_chunk():\n                for it in output:\n                    for chunk in it:\n                        yield chunk\n\n            return audio_stream_generator(\n                response_format=response_format,\n                sample_rate=24000,\n                output_generator=_gen_chunk(),\n                output_chunk_transformer=lambda c: torch.from_numpy(\n                    np.array([c]).transpose()\n                ),\n            )\n        else:\n            return audio_to_bytes(\n                response_format=response_format,\n                sample_rate=24000,\n                tensor=torch.from_numpy(output[0]).unsqueeze(0),\n            )\n"
  },
  {
    "path": "xinference/model/audio/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom collections import defaultdict\nfrom typing import Any, Dict, List, Literal, Optional, Union\n\nfrom ..core import CacheableModelSpec, VirtualEnvSettings\nfrom ..utils import ModelInstanceInfoMixin\nfrom .chattts import ChatTTSModel\nfrom .cosyvoice import CosyVoiceModel\nfrom .f5tts import F5TTSModel\nfrom .f5tts_mlx import F5TTSMLXModel\nfrom .fish_speech import FishSpeechModel\nfrom .funasr import FunASRModel\nfrom .indextts2 import Indextts2\nfrom .kokoro import KokoroModel\nfrom .kokoro_mlx import KokoroMLXModel\nfrom .kokoro_zh import KokoroZHModel\nfrom .megatts import MegaTTSModel\nfrom .melotts import MeloTTSModel\nfrom .qwen3_asr import Qwen3ASRModel\nfrom .whisper import WhisperModel\nfrom .whisper_mlx import WhisperMLXModel\n\nlogger = logging.getLogger(__name__)\n\n# Init when registering all the builtin models.\nAUDIO_MODEL_DESCRIPTIONS: Dict[str, List[Dict]] = defaultdict(list)\n\n\ndef get_audio_model_descriptions():\n    import copy\n\n    return copy.deepcopy(AUDIO_MODEL_DESCRIPTIONS)\n\n\nclass AudioModelFamilyV2(CacheableModelSpec, ModelInstanceInfoMixin):\n    version: Literal[2]\n    model_family: str\n    model_name: str\n    model_id: str\n    model_revision: Optional[str]\n    multilingual: bool\n    language: Optional[str]\n    model_ability: Optional[List[str]]\n    default_model_config: Optional[Dict[str, Any]]\n    default_transcription_config: Optional[Dict[str, Any]]\n    engine: Optional[str]\n    virtualenv: Optional[VirtualEnvSettings]\n\n    class Config:\n        extra = \"allow\"\n\n    def to_description(self):\n        return {\n            \"model_type\": \"audio\",\n            \"address\": getattr(self, \"address\", None),\n            \"accelerators\": getattr(self, \"accelerators\", None),\n            \"model_name\": self.model_name,\n            \"model_family\": self.model_family,\n            \"model_revision\": self.model_revision,\n            \"model_ability\": self.model_ability,\n        }\n\n    def to_version_info(self):\n        from ..cache_manager import CacheManager\n\n        cache_manager = CacheManager(self)\n\n        return {\n            \"model_version\": self.model_name,\n            \"model_file_location\": cache_manager.get_cache_dir(),\n            \"cache_status\": cache_manager.get_cache_status(),\n        }\n\n\ndef generate_audio_description(\n    audio_model: AudioModelFamilyV2,\n) -> Dict[str, List[Dict]]:\n    res = defaultdict(list)\n    res[audio_model.model_name].append(audio_model.to_version_info())\n    return res\n\n\ndef match_audio(\n    model_name: str,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n) -> AudioModelFamilyV2:\n    from ..utils import download_from_modelscope\n    from . import BUILTIN_AUDIO_MODELS\n    from .custom import get_user_defined_audios\n\n    for model_spec in get_user_defined_audios():\n        if model_spec.model_name == model_name:\n            return model_spec\n\n    if model_name in BUILTIN_AUDIO_MODELS:\n        model_families = BUILTIN_AUDIO_MODELS[model_name]\n        if download_hub is not None:\n            if download_hub == \"modelscope\":\n                return (\n                    [x for x in model_families if x.model_hub == \"modelscope\"]\n                    + [x for x in model_families if x.model_hub == \"huggingface\"]\n                )[0]\n            else:\n                return [x for x in model_families if x.model_hub == download_hub][0]\n        else:\n            if download_from_modelscope():\n                return (\n                    [x for x in model_families if x.model_hub == \"modelscope\"]\n                    + [x for x in model_families if x.model_hub == \"huggingface\"]\n                )[0]\n            else:\n                return [x for x in model_families if x.model_hub == \"huggingface\"][0]\n\n    else:\n        raise ValueError(\n            f\"Audio model {model_name} not found, available\"\n            f\"model list: {BUILTIN_AUDIO_MODELS.keys()}\"\n        )\n\n\ndef create_audio_model_instance(\n    model_uid: str,\n    model_name: str,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n    model_path: Optional[str] = None,\n    **kwargs,\n) -> Union[\n    WhisperModel,\n    WhisperMLXModel,\n    FunASRModel,\n    ChatTTSModel,\n    CosyVoiceModel,\n    FishSpeechModel,\n    F5TTSModel,\n    F5TTSMLXModel,\n    MeloTTSModel,\n    KokoroModel,\n    KokoroMLXModel,\n    KokoroZHModel,\n    MegaTTSModel,\n    Indextts2,\n    Qwen3ASRModel,\n]:\n    from ..cache_manager import CacheManager\n\n    kwargs.pop(\"enable_virtual_env\", None)\n    model_spec = match_audio(model_name, download_hub)\n    if model_path is None:\n        cache_manager = CacheManager(model_spec)\n        model_path = cache_manager.cache()\n    model: Union[\n        WhisperModel,\n        WhisperMLXModel,\n        FunASRModel,\n        ChatTTSModel,\n        CosyVoiceModel,\n        FishSpeechModel,\n        F5TTSModel,\n        F5TTSMLXModel,\n        MeloTTSModel,\n        KokoroModel,\n        KokoroMLXModel,\n        KokoroZHModel,\n        MegaTTSModel,\n        Indextts2,\n        Qwen3ASRModel,\n    ]\n    if model_spec.model_family == \"whisper\":\n        if not model_spec.engine:\n            model = WhisperModel(model_uid, model_path, model_spec, **kwargs)\n        else:\n            model = WhisperMLXModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"funasr\":\n        model = FunASRModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"ChatTTS\":\n        model = ChatTTSModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"CosyVoice\":\n        model = CosyVoiceModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"FishAudio\":\n        model = FishSpeechModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"F5-TTS\":\n        model = F5TTSModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"F5-TTS-MLX\":\n        model = F5TTSMLXModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"MeloTTS\":\n        model = MeloTTSModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"Kokoro\":\n        model = KokoroModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"Kokoro-zh\":\n        model = KokoroZHModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"Kokoro-MLX\":\n        model = KokoroMLXModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"MegaTTS\":\n        model = MegaTTSModel(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"IndexTTS2\":\n        model = Indextts2(model_uid, model_path, model_spec, **kwargs)\n    elif model_spec.model_family == \"qwen3_asr\":\n        model = Qwen3ASRModel(model_uid, model_path, model_spec, **kwargs)\n    else:\n        raise Exception(f\"Unsupported audio model family: {model_spec.model_family}\")\n    return model\n"
  },
  {
    "path": "xinference/model/audio/cosyvoice.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport io\nimport logging\nfrom typing import TYPE_CHECKING, Optional\n\nfrom ..utils import set_all_random_seed\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass CosyVoiceModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n        self._is_cosyvoice2 = False\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        import os\n        import sys\n\n        import torch\n\n        # The yaml config loaded from model has hard-coded the import paths. please refer to: load_hyperpyyaml\n        thirdparty_dir = os.path.join(os.path.dirname(__file__), \"../../thirdparty\")\n        sys.path.insert(0, thirdparty_dir)\n\n        kwargs = {}\n        if \"CosyVoice2\" in self._model_spec.model_name:\n            from cosyvoice.cli.cosyvoice import CosyVoice2 as CosyVoice\n\n            self._is_cosyvoice2 = True\n        else:\n            from cosyvoice.cli.cosyvoice import CosyVoice\n\n            self._is_cosyvoice2 = False\n\n        # Unify this configuration name as 'compile' to be compatible with the name 'load_jit'.\n        load_jit = self._kwargs.get(\"load_jit\", False) or self._kwargs.get(\n            \"compile\", False\n        )\n        logger.info(\"Loading CosyVoice model, compile=%s...\", load_jit)\n        self._model = CosyVoice(self._model_path, load_jit=load_jit, **kwargs)\n        if self._is_cosyvoice2:\n            spk2info_file = os.path.join(thirdparty_dir, \"cosyvoice/bin/spk2info.pt\")\n            self._model.frontend.spk2info = torch.load(\n                spk2info_file, map_location=self._device\n            )\n\n    def _speech_handle(\n        self,\n        stream,\n        input,\n        instruct_text,\n        prompt_speech,\n        prompt_text,\n        voice,\n        response_format,\n    ):\n        if prompt_speech:\n            from cosyvoice.utils.file_utils import load_wav\n\n            with io.BytesIO(prompt_speech) as prompt_speech_io:\n                prompt_speech_16k = load_wav(prompt_speech_io, 16000)\n\n            if prompt_text:\n                logger.info(\"CosyVoice inference_zero_shot\")\n                output = self._model.inference_zero_shot(\n                    input, prompt_text, prompt_speech_16k, stream=stream\n                )\n            elif instruct_text:\n                assert self._is_cosyvoice2\n                logger.info(\"CosyVoice inference_instruct\")\n                output = self._model.inference_instruct2(\n                    input,\n                    instruct_text=instruct_text,\n                    prompt_speech_16k=prompt_speech_16k,\n                    stream=stream,\n                )\n            else:\n                logger.info(\"CosyVoice inference_cross_lingual\")\n                output = self._model.inference_cross_lingual(\n                    input, prompt_speech_16k, stream=stream\n                )\n        else:\n            available_speakers = self._model.list_available_spks()\n            if not voice:\n                voice = available_speakers[0]\n                logger.info(\"Auto select speaker: %s\", voice)\n            else:\n                assert (\n                    voice in available_speakers\n                ), f\"Invalid voice {voice}, CosyVoice available speakers: {available_speakers}\"\n            if instruct_text:\n                logger.info(\"CosyVoice inference_instruct\")\n                output = self._model.inference_instruct(\n                    input, voice, instruct_text=instruct_text, stream=stream\n                )\n            else:\n                logger.info(\"CosyVoice inference_sft\")\n                output = self._model.inference_sft(input, voice, stream=stream)\n\n        import torch\n\n        from .utils import audio_stream_generator, audio_to_bytes\n\n        return (\n            audio_stream_generator(\n                response_format=response_format,\n                sample_rate=self._model.sample_rate,\n                output_generator=output,\n                output_chunk_transformer=lambda c: torch.transpose(\n                    c[\"tts_speech\"], 0, 1\n                ),\n            )\n            if stream\n            else audio_to_bytes(\n                response_format=response_format,\n                sample_rate=self._model.sample_rate,\n                tensor=torch.cat([o[\"tts_speech\"] for o in output], dim=1),\n            )\n        )\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        prompt_speech: Optional[bytes] = kwargs.pop(\"prompt_speech\", None)\n        prompt_text: Optional[str] = kwargs.pop(\"prompt_text\", None)\n        instruct_text: Optional[str] = kwargs.pop(\"instruct_text\", None)\n        seed: Optional[int] = kwargs.pop(\"seed\", 0)\n\n        if \"SFT\" in self._model_spec.model_name:\n            # inference_sft\n            assert (\n                prompt_speech is None\n            ), \"CosyVoice SFT model does not support prompt_speech\"\n            assert (\n                prompt_text is None\n            ), \"CosyVoice SFT model does not support prompt_text\"\n            assert (\n                instruct_text is None\n            ), \"CosyVoice SFT model does not support instruct_text\"\n        elif \"Instruct\" in self._model_spec.model_name:\n            # inference_instruct\n            assert (\n                prompt_speech is None\n            ), \"CosyVoice Instruct model does not support prompt_speech\"\n            assert (\n                prompt_text is None\n            ), \"CosyVoice Instruct model does not support prompt_text\"\n        elif self._is_cosyvoice2:\n            pass\n        else:\n            # inference_zero_shot\n            # inference_cross_lingual\n            assert prompt_speech is not None, \"CosyVoice model expect a prompt_speech\"\n            assert (\n                instruct_text is None\n            ), \"CosyVoice model does not support instruct_text\"\n\n        assert self._model is not None\n\n        set_all_random_seed(seed)\n\n        return self._speech_handle(\n            stream,\n            input,\n            instruct_text,\n            prompt_speech,\n            prompt_text,\n            voice,\n            response_format,\n        )\n"
  },
  {
    "path": "xinference/model/audio/custom.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom typing import Any, List, Optional\n\nfrom ..._compat import (\n    ROOT_KEY,\n    ErrorWrapper,\n    Literal,\n    Protocol,\n    StrBytes,\n    ValidationError,\n    load_str_bytes,\n)\nfrom ..custom import ModelRegistry\nfrom .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass CustomAudioModelFamilyV2(AudioModelFamilyV2):\n    version: Literal[2] = 2\n    model_id: Optional[str]  # type: ignore\n    model_revision: Optional[str]  # type: ignore\n    model_uri: Optional[str]\n\n    @classmethod\n    def parse_raw(\n        cls: Any,\n        b: StrBytes,\n        *,\n        content_type: Optional[str] = None,\n        encoding: str = \"utf8\",\n        proto: Protocol = None,\n        allow_pickle: bool = False,\n    ) -> AudioModelFamilyV2:\n        # See source code of BaseModel.parse_raw\n        try:\n            obj = load_str_bytes(\n                b,\n                proto=proto,\n                content_type=content_type,\n                encoding=encoding,\n                allow_pickle=allow_pickle,\n                json_loads=cls.__config__.json_loads,\n            )\n        except (ValueError, TypeError, UnicodeDecodeError) as e:\n            raise ValidationError([ErrorWrapper(e, loc=ROOT_KEY)], cls)\n\n        audio_spec: AudioModelFamilyV2 = cls.parse_obj(obj)\n\n        # check model_family\n        if audio_spec.model_family is None:\n            raise ValueError(\n                f\"You must specify `model_family` when registering custom Audio models.\"\n            )\n        assert isinstance(audio_spec.model_family, str)\n        return audio_spec\n\n\nUD_AUDIOS: List[CustomAudioModelFamilyV2] = []\n\n\nclass AudioModelRegistry(ModelRegistry):\n    model_type = \"audio\"\n\n    def __init__(self):\n        from . import BUILTIN_AUDIO_MODELS\n\n        super().__init__()\n        self.models = UD_AUDIOS\n        self.builtin_models = list(BUILTIN_AUDIO_MODELS.keys())\n\n\ndef get_user_defined_audios() -> List[CustomAudioModelFamilyV2]:\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"audio\")\n    return registry.get_custom_models()\n\n\ndef register_audio(model_spec: CustomAudioModelFamilyV2, persist: bool):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"audio\")\n    registry.register(model_spec, persist)\n\n\ndef unregister_audio(model_name: str, raise_error: bool = True):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"audio\")\n    registry.unregister(model_name, raise_error)\n"
  },
  {
    "path": "xinference/model/audio/f5tts.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport io\nimport logging\nimport os\nimport re\nfrom io import BytesIO\nfrom typing import TYPE_CHECKING, Optional, Union\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass F5TTSModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._vocoder = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        import os\n        import sys\n\n        # The yaml config loaded from model has hard-coded the import paths. please refer to: load_hyperpyyaml\n        sys.path.insert(0, os.path.join(os.path.dirname(__file__), \"../../thirdparty\"))\n\n        from f5_tts.infer.utils_infer import load_model, load_vocoder\n        from f5_tts.model import DiT\n\n        vocoder_name = self._kwargs.get(\"vocoder_name\", \"vocos\")\n        vocoder_path = self._kwargs.get(\"vocoder_path\")\n\n        if vocoder_name not in [\"vocos\", \"bigvgan\"]:\n            raise Exception(f\"Unsupported vocoder name: {vocoder_name}\")\n\n        if vocoder_path is not None:\n            self._vocoder = load_vocoder(\n                vocoder_name=vocoder_name, is_local=True, local_path=vocoder_path\n            )\n        else:\n            self._vocoder = load_vocoder(vocoder_name=vocoder_name, is_local=False)\n\n        model_cls = DiT\n        model_cfg = dict(\n            dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4\n        )\n        if vocoder_name == \"vocos\":\n            exp_name = \"F5TTS_Base\"\n            ckpt_step = 1200000\n        elif vocoder_name == \"bigvgan\":\n            exp_name = \"F5TTS_Base_bigvgan\"\n            ckpt_step = 1250000\n        else:\n            assert False\n        ckpt_file = os.path.join(\n            self._model_path, exp_name, f\"model_{ckpt_step}.safetensors\"\n        )\n        logger.info(f\"Loading %s...\", ckpt_file)\n        self._model = load_model(\n            model_cls, model_cfg, ckpt_file, mel_spec_type=vocoder_name\n        )\n\n    def _infer(self, ref_audio, ref_text, text_gen, model_obj, mel_spec_type, speed):\n        import numpy as np\n        from f5_tts.infer.utils_infer import infer_process, preprocess_ref_audio_text\n\n        config = {}\n        main_voice = {\"ref_audio\": ref_audio, \"ref_text\": ref_text}\n        if \"voices\" not in config:\n            voices = {\"main\": main_voice}\n        else:\n            voices = config[\"voices\"]\n            voices[\"main\"] = main_voice\n        for voice in voices:\n            (\n                voices[voice][\"ref_audio\"],\n                voices[voice][\"ref_text\"],\n            ) = preprocess_ref_audio_text(\n                voices[voice][\"ref_audio\"], voices[voice][\"ref_text\"]\n            )\n            logger.info(\"Voice:\", voice)\n            logger.info(\"Ref_audio:\", voices[voice][\"ref_audio\"])\n            logger.info(\"Ref_text:\", voices[voice][\"ref_text\"])\n\n        final_sample_rate = None\n        generated_audio_segments = []\n        reg1 = r\"(?=\\[\\w+\\])\"\n        chunks = re.split(reg1, text_gen)\n        reg2 = r\"\\[(\\w+)\\]\"\n        for text in chunks:\n            if not text.strip():\n                continue\n            match = re.match(reg2, text)\n            if match:\n                voice = match[1]\n            else:\n                logger.info(\"No voice tag found, using main.\")\n                voice = \"main\"\n            if voice not in voices:\n                logger.info(f\"Voice {voice} not found, using main.\")\n                voice = \"main\"\n            text = re.sub(reg2, \"\", text)\n            gen_text = text.strip()\n            ref_audio = voices[voice][\"ref_audio\"]\n            ref_text = voices[voice][\"ref_text\"]\n            logger.info(f\"Voice: {voice}\")\n            audio, final_sample_rate, spectragram = infer_process(\n                ref_audio,\n                ref_text,\n                gen_text,\n                model_obj,\n                self._vocoder,\n                mel_spec_type=mel_spec_type,\n                speed=speed,\n            )\n            generated_audio_segments.append(audio)\n\n        if generated_audio_segments:\n            final_wave = np.concatenate(generated_audio_segments)\n            return final_sample_rate, final_wave\n        return None, None\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        import f5_tts\n        import soundfile\n        import tomli\n\n        if stream:\n            raise Exception(\"F5-TTS does not support stream generation.\")\n\n        prompt_speech: Optional[bytes] = kwargs.pop(\"prompt_speech\", None)\n        prompt_text: Optional[str] = kwargs.pop(\"prompt_text\", None)\n\n        ref_audio: Union[str, io.BytesIO]\n        if prompt_speech is None:\n            base = os.path.dirname(f5_tts.__file__)\n            config = os.path.join(base, \"infer/examples/basic/basic.toml\")\n            with open(config, \"rb\") as f:\n                config_dict = tomli.load(f)\n            ref_audio = os.path.join(base, config_dict[\"ref_audio\"])\n            prompt_text = config_dict[\"ref_text\"]\n        else:\n            ref_audio = io.BytesIO(prompt_speech)\n            if prompt_text is None:\n                raise ValueError(\"`prompt_text` cannot be empty\")\n\n        assert self._model is not None\n        vocoder_name = self._kwargs.get(\"vocoder_name\", \"vocos\")\n        sample_rate, wav = self._infer(\n            ref_audio=ref_audio,\n            ref_text=prompt_text,\n            text_gen=input,\n            model_obj=self._model,\n            mel_spec_type=vocoder_name,\n            speed=speed,\n        )\n\n        # Save the generated audio\n        with BytesIO() as out:\n            with soundfile.SoundFile(\n                out, \"w\", sample_rate, 1, format=response_format.upper()\n            ) as f:\n                f.write(wav)\n            return out.getvalue()\n"
  },
  {
    "path": "xinference/model/audio/f5tts_mlx.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport datetime\nimport io\nimport logging\nimport os\nfrom io import BytesIO\nfrom pathlib import Path\nfrom typing import TYPE_CHECKING, Literal, Optional, Union\n\nimport numpy as np\nfrom tqdm import tqdm\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass F5TTSMLXModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n        self._model = None\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        try:\n            import mlx.core as mx\n            from f5_tts_mlx.cfm import F5TTS\n            from f5_tts_mlx.dit import DiT\n            from f5_tts_mlx.duration import DurationPredictor, DurationTransformer\n            from vocos_mlx import Vocos\n        except ImportError:\n            error_message = \"Failed to import module 'f5_tts_mlx'\"\n            installation_guide = [\n                \"Please make sure 'f5_tts_mlx' is installed.\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        path = Path(self._model_path)\n        # vocab\n\n        vocab_path = path / \"vocab.txt\"\n        vocab = {v: i for i, v in enumerate(Path(vocab_path).read_text().split(\"\\n\"))}\n        if len(vocab) == 0:\n            raise ValueError(f\"Could not load vocab from {vocab_path}\")\n\n        # duration predictor\n\n        duration_model_path = path / \"duration_v2.safetensors\"\n        duration_predictor = None\n\n        if duration_model_path.exists():\n            duration_predictor = DurationPredictor(\n                transformer=DurationTransformer(\n                    dim=512,\n                    depth=8,\n                    heads=8,\n                    text_dim=512,\n                    ff_mult=2,\n                    conv_layers=2,\n                    text_num_embeds=len(vocab) - 1,\n                ),\n                vocab_char_map=vocab,\n            )\n            weights = mx.load(duration_model_path.as_posix(), format=\"safetensors\")\n            duration_predictor.load_weights(list(weights.items()))\n\n        # vocoder\n\n        vocos = Vocos.from_pretrained(\"lucasnewman/vocos-mel-24khz\")\n\n        # model\n\n        model_path = path / \"model.safetensors\"\n\n        f5tts = F5TTS(\n            transformer=DiT(\n                dim=1024,\n                depth=22,\n                heads=16,\n                ff_mult=2,\n                text_dim=512,\n                conv_layers=4,\n                text_num_embeds=len(vocab) - 1,\n            ),\n            vocab_char_map=vocab,\n            vocoder=vocos.decode,\n            duration_predictor=duration_predictor,\n        )\n\n        weights = mx.load(model_path.as_posix(), format=\"safetensors\")\n        f5tts.load_weights(list(weights.items()))\n        mx.eval(f5tts.parameters())\n\n        self._model = f5tts\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        import mlx.core as mx\n        import soundfile as sf\n        import tomli\n        from f5_tts_mlx.generate import (\n            FRAMES_PER_SEC,\n            SAMPLE_RATE,\n            TARGET_RMS,\n            convert_char_to_pinyin,\n            split_sentences,\n        )\n\n        from .utils import ensure_sample_rate\n\n        if stream:\n            raise Exception(\"F5-TTS does not support stream generation.\")\n\n        prompt_speech: Optional[bytes] = kwargs.pop(\"prompt_speech\", None)\n        prompt_text: Optional[str] = kwargs.pop(\"prompt_text\", None)\n        duration: Optional[float] = kwargs.pop(\"duration\", None)\n        steps: Optional[int] = kwargs.pop(\"steps\", 8)\n        cfg_strength: Optional[float] = kwargs.pop(\"cfg_strength\", 2.0)\n        method: Literal[\"euler\", \"midpoint\"] = kwargs.pop(\"method\", \"rk4\")\n        sway_sampling_coef: float = kwargs.pop(\"sway_sampling_coef\", -1.0)\n        seed: Optional[int] = kwargs.pop(\"seed\", None)\n\n        prompt_speech_path: Union[str, io.BytesIO]\n        if prompt_speech is None:\n            base = os.path.join(os.path.dirname(__file__), \"../../thirdparty/f5_tts\")\n            config = os.path.join(base, \"infer/examples/basic/basic.toml\")\n            with open(config, \"rb\") as f:\n                config_dict = tomli.load(f)\n            prompt_speech_path = os.path.join(base, config_dict[\"ref_audio\"])\n            prompt_text = config_dict[\"ref_text\"]\n        else:\n            prompt_speech_path = io.BytesIO(prompt_speech)\n\n            if prompt_text is None:\n                raise ValueError(\"`prompt_text` cannot be empty\")\n\n        audio, sr = sf.read(prompt_speech_path)\n        audio = ensure_sample_rate(audio, sr, SAMPLE_RATE)\n\n        audio = mx.array(audio)\n        ref_audio_duration = audio.shape[0] / SAMPLE_RATE\n        logger.debug(\n            f\"Got reference audio with duration: {ref_audio_duration:.2f} seconds\"\n        )\n\n        rms = mx.sqrt(mx.mean(mx.square(audio)))\n        if rms < TARGET_RMS:\n            audio = audio * TARGET_RMS / rms\n\n        sentences = split_sentences(input)\n        is_single_generation = len(sentences) <= 1 or duration is not None\n\n        if is_single_generation:\n            generation_text = convert_char_to_pinyin([prompt_text + \" \" + input])  # type: ignore\n\n            if duration is not None:\n                duration = int(duration * FRAMES_PER_SEC)\n\n            start_date = datetime.datetime.now()\n\n            wave, _ = self._model.sample(  # type: ignore\n                mx.expand_dims(audio, axis=0),\n                text=generation_text,\n                duration=duration,\n                steps=steps,\n                method=method,\n                speed=speed,\n                cfg_strength=cfg_strength,\n                sway_sampling_coef=sway_sampling_coef,\n                seed=seed,\n            )\n\n            wave = wave[audio.shape[0] :]\n            mx.eval(wave)\n\n            generated_duration = wave.shape[0] / SAMPLE_RATE\n            print(\n                f\"Generated {generated_duration:.2f}s of audio in {datetime.datetime.now() - start_date}.\"\n            )\n\n        else:\n            start_date = datetime.datetime.now()\n\n            output = []\n\n            for sentence_text in tqdm(split_sentences(input)):\n                text = convert_char_to_pinyin([prompt_text + \" \" + sentence_text])  # type: ignore\n\n                if duration is not None:\n                    duration = int(duration * FRAMES_PER_SEC)\n\n                wave, _ = self._model.sample(  # type: ignore\n                    mx.expand_dims(audio, axis=0),\n                    text=text,\n                    duration=duration,\n                    steps=steps,\n                    method=method,\n                    speed=speed,\n                    cfg_strength=cfg_strength,\n                    sway_sampling_coef=sway_sampling_coef,\n                    seed=seed,\n                )\n\n                # trim the reference audio\n                wave = wave[audio.shape[0] :]\n                mx.eval(wave)\n\n                output.append(wave)\n\n            wave = mx.concatenate(output, axis=0)\n\n            generated_duration = wave.shape[0] / SAMPLE_RATE\n            logger.debug(\n                f\"Generated {generated_duration:.2f}s of audio in {datetime.datetime.now() - start_date}.\"\n            )\n\n        # Save the generated audio\n        with BytesIO() as out:\n            with sf.SoundFile(\n                out, \"w\", SAMPLE_RATE, 1, format=response_format.upper()\n            ) as f:\n                f.write(np.array(wave))\n                return out.getvalue()\n"
  },
  {
    "path": "xinference/model/audio/fish_speech.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nimport os.path\nimport sys\nfrom io import BytesIO\nfrom typing import TYPE_CHECKING, Optional\n\nimport numpy as np\nimport torch\n\nfrom ...device_utils import get_available_device, is_device_available\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\ndef wav_chunk_header(sample_rate=44100, bit_depth=16, channels=1):\n    import wave\n\n    buffer = BytesIO()\n\n    with wave.open(buffer, \"wb\") as wav_file:\n        wav_file.setnchannels(channels)\n        wav_file.setsampwidth(bit_depth // 8)\n        wav_file.setframerate(sample_rate)\n\n    wav_header_bytes = buffer.getvalue()\n    buffer.close()\n    return wav_header_bytes\n\n\nclass FishSpeechModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._llama_queue = None\n        self._model = None\n        self._engine = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        # There are too many imports from fish_speech.\n        sys.path.insert(\n            0, os.path.join(os.path.dirname(__file__), \"../../thirdparty/fish_speech\")\n        )\n\n        from tools.inference_engine import TTSInferenceEngine\n        from tools.llama.generate import launch_thread_safe_queue\n        from tools.vqgan.inference import load_model as load_decoder_model\n\n        if self._device is None:\n            self._device = get_available_device()\n        else:\n            if not is_device_available(self._device):\n                raise ValueError(f\"Device {self._device} is not available!\")\n\n        # https://github.com/pytorch/pytorch/issues/129207\n        if self._device == \"mps\":\n            logger.warning(\"The Conv1d has bugs on MPS backend, fallback to CPU.\")\n            self._device = \"cpu\"\n\n        enable_compile = self._kwargs.get(\"compile\", False)\n        precision = self._kwargs.get(\"precision\", torch.bfloat16)\n        logger.info(\"Loading Llama model, compile=%s...\", enable_compile)\n        self._llama_queue = launch_thread_safe_queue(\n            checkpoint_path=self._model_path,\n            device=self._device,\n            precision=precision,\n            compile=enable_compile,\n        )\n        logger.info(\"Llama model loaded, loading VQ-GAN model...\")\n\n        checkpoint_path = os.path.join(\n            self._model_path,\n            \"firefly-gan-vq-fsq-8x1024-21hz-generator.pth\",\n        )\n        self._model = load_decoder_model(\n            config_name=\"firefly_gan_vq\",\n            checkpoint_path=checkpoint_path,\n            device=self._device,\n        )\n\n        self._engine = TTSInferenceEngine(\n            self._llama_queue, self._model, precision, enable_compile\n        )\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        logger.warning(\"Fish speech does not support setting voice: %s.\", voice)\n        if speed != 1.0:\n            logger.warning(\"Fish speech does not support setting speed: %s.\", speed)\n        from tools.schema import ServeReferenceAudio, ServeTTSRequest\n\n        from .utils import audio_stream_generator, audio_to_bytes\n\n        prompt_speech = kwargs.get(\"prompt_speech\")\n        prompt_text = kwargs.get(\"prompt_text\", kwargs.get(\"reference_text\", \"\"))\n        if prompt_speech is not None:\n            r = ServeReferenceAudio(audio=prompt_speech, text=prompt_text)\n            references = [r]\n        else:\n            references = []\n\n        assert self._engine is not None\n        result = self._engine.inference(\n            ServeTTSRequest(\n                text=input,\n                references=references,\n                reference_id=kwargs.get(\"reference_id\"),\n                seed=kwargs.get(\"seed\"),\n                max_new_tokens=kwargs.get(\"max_new_tokens\", 1024),\n                chunk_length=kwargs.get(\"chunk_length\", 200),\n                top_p=kwargs.get(\"top_p\", 0.7),\n                repetition_penalty=kwargs.get(\"repetition_penalty\", 1.2),\n                temperature=kwargs.get(\"temperature\", 0.7),\n                streaming=stream,\n                format=response_format,\n            )\n        )\n\n        if stream:\n\n            def _gen_chunk():\n                for chunk in result:\n                    if chunk.code == \"final\":\n                        continue\n                    chunk = chunk.audio[1]\n                    if chunk is not None:\n                        yield chunk\n\n            return audio_stream_generator(\n                response_format=response_format,\n                sample_rate=self._model.spec_transform.sample_rate,\n                output_generator=_gen_chunk(),\n                output_chunk_transformer=lambda c: torch.from_numpy(\n                    c.reshape((c.shape[0], 1))\n                ),\n            )\n        else:\n            result = list(result)\n            sample_rate, audio = result[0].audio\n            audio = np.array([audio])\n            return audio_to_bytes(\n                response_format=response_format,\n                sample_rate=sample_rate,\n                tensor=torch.from_numpy(audio),\n            )\n"
  },
  {
    "path": "xinference/model/audio/funasr.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport tempfile\nfrom typing import TYPE_CHECKING, List, Optional\n\nfrom ...device_utils import get_available_device, is_device_available\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass FunASRModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def convert_to_openai_format(self, input_data):\n        if \"timestamp\" not in input_data:\n            return {\"task\": \"transcribe\", \"text\": input_data[\"text\"]}\n        start_time = input_data[\"timestamp\"][0][0] / 1000\n        end_time = input_data[\"timestamp\"][-1][1] / 1000\n        duration = end_time - start_time\n        word_timestamps = []\n        for ts in input_data[\"timestamp\"]:\n            word_timestamps.append({\"start\": ts[0] / 1000, \"end\": ts[1] / 1000})\n        if \"sentence_info\" not in input_data:\n            return {\n                \"task\": \"transcribe\",\n                \"text\": input_data[\"text\"],\n                \"words\": word_timestamps,\n                \"duration\": duration,\n            }\n        output = {\n            \"task\": \"transcribe\",\n            \"duration\": duration,\n            \"text\": input_data[\"text\"],\n            \"words\": word_timestamps,\n            \"segments\": [],\n        }\n        for sentence in input_data[\"sentence_info\"]:\n            seg_start = sentence[\"start\"] / 1000\n            seg_end = sentence[\"end\"] / 1000\n            output[\"segments\"].append(\n                {\n                    \"id\": len(output[\"segments\"]),\n                    \"start\": seg_start,\n                    \"end\": seg_end,\n                    \"text\": sentence[\"text\"],\n                    \"speaker\": sentence[\"spk\"],\n                }\n            )\n\n        return output\n\n    def load(self):\n        try:\n            from funasr import AutoModel\n        except ImportError:\n            error_message = \"Failed to import module 'funasr'\"\n            installation_guide = [\n                \"Please make sure 'funasr' is installed. \",\n                \"You can install it by `pip install funasr`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        if self._device is None:\n            self._device = get_available_device()\n        else:\n            if not is_device_available(self._device):\n                raise ValueError(f\"Device {self._device} is not available!\")\n\n        kwargs = (\n            self._model_spec.default_model_config.copy()\n            if getattr(self._model_spec, \"default_model_config\", None)\n            else {}\n        )\n        kwargs.update(self._kwargs)\n        logger.debug(\"Loading FunASR model with kwargs: %s\", kwargs)\n        self._model = AutoModel(model=self._model_path, device=self._device, **kwargs)\n\n    def transcriptions(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n        **kwargs,\n    ):\n        from funasr.utils.postprocess_utils import rich_transcription_postprocess\n\n        if temperature != 0:\n            raise RuntimeError(\"`temperature`is not supported for FunASR\")\n        if timestamp_granularities is not None:\n            raise RuntimeError(\"`timestamp_granularities`is not supported for FunASR\")\n        if prompt is not None:\n            logger.warning(\n                \"Prompt for funasr transcriptions will be ignored: %s\", prompt\n            )\n\n        language = \"auto\" if language is None else language\n\n        with tempfile.NamedTemporaryFile(buffering=0) as f:\n            f.write(audio)\n\n            kw = (\n                self._model_spec.default_transcription_config.copy()  # type: ignore\n                if getattr(self._model_spec, \"default_transcription_config\", None)\n                else {}\n            )\n            kw.update(kwargs)\n            logger.debug(\"Calling FunASR model with kwargs: %s\", kw)\n            result = self._model.generate(  # type: ignore\n                input=f.name, cache={}, language=language, **kw\n            )\n            if not result or not isinstance(result, list):\n                raise RuntimeError(f\"FunASR returned empty or invalid result: {result}\")\n            if \"text\" not in result[0]:\n                raise RuntimeError(f\"Missing 'text' field in result[0]: {result[0]}\")\n            text = rich_transcription_postprocess(result[0][\"text\"])\n\n            if response_format == \"json\":\n                return {\"text\": text}\n            elif response_format == \"verbose_json\":\n                verbose = result[0]\n                verbose[\"text\"] = text\n                return self.convert_to_openai_format(verbose)\n            else:\n                raise ValueError(f\"Unsupported response format: {response_format}\")\n\n    def translations(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n    ):\n        raise RuntimeError(\"FunASR does not support translations API\")\n"
  },
  {
    "path": "xinference/model/audio/indextts2.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nimport os\nimport sys\nfrom typing import TYPE_CHECKING, Optional\n\nfrom ..utils import set_all_random_seed\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass Indextts2:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        # The yaml config loaded from model has hard-coded the import paths\n        thirdparty_dir = os.path.join(os.path.dirname(__file__), \"../../thirdparty\")\n        sys.path.insert(0, thirdparty_dir)\n\n        from indextts.infer_v2 import IndexTTS2\n\n        config_path = os.path.join(self._model_path, \"config.yaml\")\n        use_fp16 = self._kwargs.get(\"use_fp16\", False)\n        use_deepspeed = self._kwargs.get(\"use_deepspeed\", False)\n\n        # Handle small model directory for offline deployment\n        small_models_config = (\n            self._model_spec.default_model_config\n            if getattr(self._model_spec, \"default_model_config\", None)\n            else {}\n        )\n        small_models_config.update(self._kwargs)\n\n        small_models_dir = small_models_config.get(\"small_models_dir\")\n        logger.info(\n            f\"Loading IndexTTS2 model... (small_models_dir: {small_models_dir})\"\n        )\n        self._model = IndexTTS2(\n            cfg_path=config_path,\n            model_dir=self._model_path,\n            use_fp16=use_fp16,\n            device=self._device,\n            use_deepspeed=use_deepspeed,\n            small_models_dir=small_models_dir,\n        )\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        from io import BytesIO\n\n        import soundfile\n\n        # Streaming support is now implemented\n\n        prompt_speech: Optional[bytes] = kwargs.pop(\"prompt_speech\", None)\n        emo_prompt_speech: Optional[bytes] = kwargs.pop(\"emo_prompt_speech\", None)\n        emo_alpha: float = kwargs.pop(\"emo_alpha\", 1.0)\n        emo_text: Optional[str] = kwargs.pop(\"emo_text\", None)\n        use_random: bool = kwargs.pop(\"use_random\", False)\n        emo_vector: Optional[list] = kwargs.pop(\"emo_vector\", None)\n        seed: Optional[int] = kwargs.pop(\"seed\", 0)\n        use_emo_text: bool = kwargs.pop(\"use_emo_text\", False)\n\n        if prompt_speech is None:\n            # IndexTTS2 requires reference audio for voice cloning\n            # We'll provide a helpful error message with usage examples\n            raise ValueError(\n                \"IndexTTS2 requires a reference audio for voice cloning.\\n\"\n                \"Please provide a short audio sample (3-10 seconds) as 'prompt_speech' parameter.\\n\"\n                \"Example usage:\\n\"\n                \"  with open('reference.wav', 'rb') as f:\\n\"\n                \"      prompt_speech = f.read()\\n\"\n                \"  audio_bytes = model.speech(\\n\"\n                \"      input='Hello, world!',\\n\"\n                \"      voice='default',\\n\"\n                \"      prompt_speech=prompt_speech\"\n                \"  )\\n\\n\"\n                \"For emotion control, you can also add:\\n\"\n                \"  emo_prompt_speech=emotion_audio_bytes  # Optional: emotion reference\\n\"\n                \"  emo_text='happy and cheerful'  # Optional: emotion description\\n\"\n                \"  emo_alpha=1.5  # Optional: emotion intensity\"\n            )\n\n        assert self._model is not None\n\n        set_all_random_seed(seed)\n\n        # Save prompt speech to temp file\n        import tempfile\n\n        with tempfile.NamedTemporaryFile(suffix=\".wav\", delete=False) as temp_prompt:\n            temp_prompt.write(prompt_speech)\n            temp_prompt_path = temp_prompt.name\n\n        emo_prompt_path = None\n        if emo_prompt_speech is not None:\n            with tempfile.NamedTemporaryFile(suffix=\".wav\", delete=False) as temp_emo:\n                temp_emo.write(emo_prompt_speech)\n                emo_prompt_path = temp_emo.name\n\n        # Generate complete audio first\n        with tempfile.NamedTemporaryFile(suffix=\".wav\", delete=False) as temp_output:\n            output_path = temp_output.name\n\n        try:\n            self._model.infer(\n                spk_audio_prompt=temp_prompt_path,\n                text=input,\n                output_path=output_path,\n                emo_audio_prompt=emo_prompt_path,\n                emo_alpha=emo_alpha,\n                emo_text=emo_text,\n                use_random=use_random,\n                emo_vector=emo_vector,\n                use_emo_text=use_emo_text,\n            )\n\n            # Read generated audio\n            audio, sample_rate = soundfile.read(output_path)\n\n            if stream:\n                # Streaming mode - return generator that yields chunks\n                def audio_stream_generator():\n                    with BytesIO() as out:\n                        with soundfile.SoundFile(\n                            out, \"w\", sample_rate, 1, format=response_format.upper()\n                        ) as f:\n                            f.write(audio)\n                        complete_audio = out.getvalue()\n\n                    # Clean up temp file\n                    os.unlink(output_path)\n\n                    # Yield the complete audio in chunks\n                    chunk_size = 8192  # 8KB chunks\n                    for i in range(0, len(complete_audio), chunk_size):\n                        yield complete_audio[i : i + chunk_size]\n\n                return audio_stream_generator()\n            else:\n                # Non-streaming mode - return bytes directly\n                with BytesIO() as out:\n                    with soundfile.SoundFile(\n                        out, \"w\", sample_rate, 1, format=response_format.upper()\n                    ) as f:\n                        f.write(audio)\n                    result = out.getvalue()\n\n                # Clean up temp file\n                os.unlink(output_path)\n                return result\n        finally:\n            # Clean up temp files\n            try:\n                os.unlink(temp_prompt_path)\n                if emo_prompt_path:\n                    os.unlink(emo_prompt_path)\n            except Exception:\n                pass\n"
  },
  {
    "path": "xinference/model/audio/kokoro.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom io import BytesIO\nfrom typing import TYPE_CHECKING, Optional\n\nimport numpy as np\n\nfrom ...device_utils import get_available_device, is_device_available\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass KokoroModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        if self._device is None:\n            self._device = get_available_device()\n        else:\n            if not is_device_available(self._device):\n                raise ValueError(f\"Device {self._device} is not available!\")\n\n        import os\n\n        from kokoro import KModel, KPipeline\n\n        config_path = os.path.join(self._model_path, \"config.json\")\n        model_path = os.path.join(self._model_path, \"kokoro-v1_0.pth\")\n        # LANG_CODES = dict(\n        #     # pip install misaki[en]\n        #     a='American English',\n        #     b='British English',\n        #\n        #     # espeak-ng\n        #     e='es',\n        #     f='fr-fr',\n        #     h='hi',\n        #     i='it',\n        #     p='pt-br',\n        #\n        #     # pip install misaki[ja]\n        #     j='Japanese',\n        #\n        #     # pip install misaki[zh]\n        #     z='Mandarin Chinese',\n        # )\n        lang_code = self._kwargs.get(\"lang_code\", \"a\")\n        logger.info(\"Launching Kokoro model with language code: %s\", lang_code)\n        self._model = KPipeline(\n            lang_code=lang_code,\n            model=KModel(config=config_path, model=model_path).to(self._device),\n            device=self._device,\n        )\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        import soundfile\n\n        if stream:\n            raise Exception(\"Kokoro does not support stream mode.\")\n        assert self._model is not None\n        if not voice:\n            voice = \"af_alloy\"\n            logger.info(\"Auto select speaker: %s\", voice)\n        elif voice.endswith(\".pt\"):\n            logger.info(\"Using custom voice pt: %s\", voice)\n        else:\n            logger.info(\"Using voice: %s\", voice)\n        logger.info(\"Speech kwargs: %s\", kwargs)\n        generator = self._model(text=input, voice=voice, speed=speed, **kwargs)\n        results = list(generator)\n        audio = np.concatenate([r[2] for r in results])\n        # Save the generated audio\n        with BytesIO() as out:\n            with soundfile.SoundFile(\n                out,\n                \"w\",\n                24000,\n                1,\n                format=response_format.upper(),\n            ) as f:\n                f.write(audio)\n            return out.getvalue()\n"
  },
  {
    "path": "xinference/model/audio/kokoro_mlx.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport os.path\nfrom io import BytesIO\nfrom typing import TYPE_CHECKING, Optional\n\nimport numpy as np\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass KokoroMLXModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        try:\n            from mlx_audio.tts.models.kokoro import KokoroPipeline as KokoroPipeline\n            from mlx_audio.tts.utils import load_model\n        except ImportError:\n            error_message = \"Failed to import module 'mlx_audio'\"\n            installation_guide = [\n                \"Please make sure 'mlx-audio' is installed.\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        model = load_model(self._model_path)\n        lang_code = self._kwargs.get(\"lang_code\", \"a\")\n        logger.info(\"Launching Kokoro model with language code: %s\", lang_code)\n        self._model = KokoroPipeline(\n            lang_code=lang_code, model=model, repo_id=\"prince-canuma/Kokoro-82M\"\n        )\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        import soundfile\n\n        if stream:\n            raise Exception(\"Kokoro does not support stream mode.\")\n        assert self._model is not None\n\n        if not voice:\n            voice = \"af_alloy\"\n            logger.info(\"Auto select speaker: %s\", voice)\n        elif not voice.endswith(\".pt\"):\n            # mlx-audio will try to download if not endswith .pt\n            # we just convert the internal voice to its path\n            logger.info(\"Using custom voice pt: %s\", voice)\n            voice = os.path.join(self._model_path, \"voices\", f\"{voice}.pt\")\n        else:\n            logger.info(\"Using voice: %s\", voice)\n\n        logger.info(\"Speech kwargs: %s\", kwargs)\n        generator = self._model(text=input, voice=voice, speed=speed, **kwargs)\n        results = list(generator)\n        audio = np.concatenate([r[2] for r in results])\n        # Save the generated audio\n        with BytesIO() as out:\n            with soundfile.SoundFile(\n                out,\n                \"w\",\n                24000,\n                1,\n                format=response_format.upper(),\n            ) as f:\n                f.write(audio[0])\n            return out.getvalue()\n"
  },
  {
    "path": "xinference/model/audio/kokoro_zh.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom io import BytesIO\nfrom typing import TYPE_CHECKING, Optional\n\nimport numpy as np\n\nfrom ...device_utils import get_available_device, is_device_available\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\nREPO_ID = \"hexgrad/Kokoro-82M-v1.1-zh\"\n\n\nclass KokoroZHModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n        self._en_pipeline = None\n\n    def _en_callable(self, text):\n        \"\"\"\n        Fixing the issue of English words being skipped in the Chinese model.\n        from https://hf-mirror.com/hexgrad/Kokoro-82M-v1.1-zh/blob/main/samples/make_zh.py\n        \"\"\"\n        if text == \"Kokoro\":\n            return \"kˈOkəɹO\"\n        elif text == \"Sol\":\n            return \"sˈOl\"\n        return next(self._en_pipeline(text)).phonemes\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        if self._device is None:\n            self._device = get_available_device()\n        else:\n            if not is_device_available(self._device):\n                raise ValueError(f\"Device {self._device} is not available!\")\n\n        import os\n\n        from kokoro import KModel, KPipeline\n\n        self._en_pipeline = KPipeline(lang_code=\"a\", repo_id=REPO_ID, model=False)\n\n        config_path = os.path.join(self._model_path, \"config.json\")\n        model_path = os.path.join(self._model_path, \"kokoro-v1_1-zh.pth\")\n        lang_code = self._kwargs.get(\"lang_code\", \"z\")\n        logger.info(\"Launching Kokoro model with language code: %s\", lang_code)\n\n        self._model = KPipeline(\n            lang_code=lang_code,\n            model=KModel(config=config_path, model=model_path).to(self._device),\n            repo_id=REPO_ID,\n            en_callable=self._en_callable,\n            device=self._device,\n        )\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        import soundfile\n\n        if stream:\n            raise Exception(\"Kokoro does not support stream mode.\")\n        assert self._model is not None\n        if not voice:\n            voice = \"zf_001\"\n            logger.info(\"Auto select speaker: %s\", voice)\n        elif voice.endswith(\".pt\"):\n            logger.info(\"Using custom voice pt: %s\", voice)\n        else:\n            logger.info(\"Using voice: %s\", voice)\n        logger.info(\"Speech kwargs: %s\", kwargs)\n        generator = self._model(text=input, voice=voice, speed=speed, **kwargs)\n        results = list(generator)\n        audio = np.concatenate([r[2] for r in results])\n        # Save the generated audio\n        with BytesIO() as out:\n            with soundfile.SoundFile(\n                out,\n                \"w\",\n                24000,\n                1,\n                format=response_format.upper(),\n            ) as f:\n                f.write(audio)\n            return out.getvalue()\n"
  },
  {
    "path": "xinference/model/audio/megatts.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport io\nimport logging\nfrom io import BytesIO\nfrom typing import TYPE_CHECKING, Optional\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass MegaTTSModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._vocoder = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        import os\n        import sys\n\n        # The yaml config loaded from model has hard-coded the import paths. please refer to: load_hyperpyyaml\n        sys.path.insert(\n            0, os.path.join(os.path.dirname(__file__), \"../../thirdparty/megatts3\")\n        )\n        # For whisper\n        sys.path.insert(0, os.path.join(os.path.dirname(__file__), \"../../thirdparty\"))\n\n        from tts.infer_cli import MegaTTS3DiTInfer\n\n        self._model = MegaTTS3DiTInfer(ckpt_root=self._model_path)\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        import soundfile\n\n        if stream:\n            raise Exception(\"MegaTTS3 does not support stream generation.\")\n        if voice:\n            raise Exception(\n                \"MegaTTS3 does not support voice, please specify prompt_speech and prompt_latent.\"\n            )\n\n        prompt_speech: Optional[bytes] = kwargs.pop(\"prompt_speech\", None)\n        prompt_latent: Optional[bytes] = kwargs.pop(\"prompt_latent\", None)\n        if not prompt_speech:\n            raise Exception(\"Please set prompt_speech for MegaTTS3.\")\n        if not prompt_latent:\n            raise Exception(\"Please set prompt_latent for MegaTTS3.\")\n\n        assert self._model is not None\n        with io.BytesIO(prompt_latent) as prompt_latent_io:\n            resource_context = self._model.preprocess(\n                prompt_speech, latent_file=prompt_latent_io\n            )\n        wav_bytes = self._model.forward(\n            resource_context,\n            input,\n            time_step=kwargs.get(\"time_step\", 32),\n            p_w=kwargs.get(\"p_w\", 1.6),\n            t_w=kwargs.get(\"t_w\", 2.5),\n        )\n\n        # Save the generated audio\n        with BytesIO() as out:\n            with soundfile.SoundFile(\n                out, \"w\", self._model.sr, 1, format=response_format.upper()\n            ) as f:\n                f.write(wav_bytes)\n            return out.getvalue()\n"
  },
  {
    "path": "xinference/model/audio/melotts.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom io import BytesIO\nfrom typing import TYPE_CHECKING, Optional\n\nfrom ...device_utils import get_available_device, is_device_available\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass MeloTTSModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        if self._device is None:\n            self._device = get_available_device()\n        else:\n            if not is_device_available(self._device):\n                raise ValueError(f\"Device {self._device} is not available!\")\n\n        import os\n        import sys\n\n        import nltk\n\n        # English language requires download averaged_perceptron_tagger_eng\n        nltk.download(\"averaged_perceptron_tagger_eng\")\n\n        # The yaml config loaded from model has hard-coded the import paths. please refer to: load_hyperpyyaml\n        sys.path.insert(0, os.path.join(os.path.dirname(__file__), \"../../thirdparty\"))\n\n        from melo.api import TTS\n\n        config_path = os.path.join(self._model_path, \"config.json\")\n        ckpt_path = os.path.join(self._model_path, \"checkpoint.pth\")\n        self._model = TTS(\n            language=self._model_spec.language,\n            device=self._device,\n            config_path=config_path,\n            ckpt_path=ckpt_path,\n        )\n\n    def speech(\n        self,\n        input: str,\n        voice: str,\n        response_format: str = \"mp3\",\n        speed: float = 1.0,\n        stream: bool = False,\n        **kwargs,\n    ):\n        import soundfile\n\n        if stream:\n            raise Exception(\"MeloTTS does not support stream mode.\")\n        assert self._model is not None\n        speaker_ids = self._model.hps.data.spk2id\n        if not voice:\n            voice = next(iter(speaker_ids.keys()))\n            logger.info(\"Auto select speaker: %s\", voice)\n        elif voice not in speaker_ids:\n            raise ValueError(\n                f\"Invalid voice: {voice}, available speakers: {speaker_ids}\"\n            )\n        audio = self._model.tts_to_file(\n            text=input, speaker_id=speaker_ids[voice], speed=speed, **kwargs\n        )\n        # Save the generated audio\n        with BytesIO() as out:\n            with soundfile.SoundFile(\n                out,\n                \"w\",\n                self._model.hps.data.sampling_rate,\n                1,\n                format=response_format.upper(),\n            ) as f:\n                f.write(audio)\n            return out.getvalue()\n"
  },
  {
    "path": "xinference/model/audio/model_spec.json",
    "content": "[\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-tiny\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-tiny\",\n        \"model_revision\": \"167c219b21f11ef214220b8fdb7536b8a88c2475\"\n      }\n    },\n    \"updated_at\": 1766386952,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-tiny.en\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-tiny.en\",\n        \"model_revision\": \"87c7102498dcde7456f24cfd30239ca606ed9063\"\n      }\n    },\n    \"updated_at\": 1766386982,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-base\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-base\",\n        \"model_revision\": \"8c1db9b51951100007a96a525d83a8ec81b3c237\"\n      }\n    },\n    \"updated_at\": 1766387032,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-base.en\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-base.en\",\n        \"model_revision\": \"911407f4214e0e1d82085af863093ec0b66f9cd6\"\n      }\n    },\n    \"updated_at\": 1766387034,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-small\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-small\",\n        \"model_revision\": \"998cb1a777c20db53d6033a61b977ed4c3792cac\"\n      }\n    },\n    \"updated_at\": 1766387035,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-small.en\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-small.en\",\n        \"model_revision\": \"e8727524f962ee844a7319d92be39ac1bd25655a\"\n      }\n    },\n    \"updated_at\": 1766387036,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-medium\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-medium\",\n        \"model_revision\": \"16688beb1294bedd0a6f5cd86fe7eec57bce41ed\"\n      }\n    },\n    \"updated_at\": 1766387038,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-medium.en\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-medium.en\",\n        \"model_revision\": \"2e98eb6279edf5095af0c8dedb36bdec0acd172b\"\n      }\n    },\n    \"updated_at\": 1766387039,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-large-v3\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-large-v3\",\n        \"model_revision\": \"6cdf07a7e3ec3806e5d55f787915b85d4cd020b1\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/whisper-large-v3\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387040,\n    \"featured\": true\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-large-v3-turbo\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"openai/whisper-large-v3-turbo\",\n        \"model_revision\": \"41f01f3fe87f28c78e2fbf8b568835947dd65ed9\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/whisper-large-v3-turbo\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387042,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Belle-distilwhisper-large-v2-zh\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"BELLE-2/Belle-distilwhisper-large-v2-zh\",\n        \"model_revision\": \"ed25d13498fa5bac758b2fc479435b698532dfe8\"\n      }\n    },\n    \"updated_at\": 1766387046,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Belle-whisper-large-v2-zh\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"BELLE-2/Belle-whisper-large-v2-zh\",\n        \"model_revision\": \"ec5bd5d78598545b7585814edde86dac2002b5b9\"\n      }\n    },\n    \"updated_at\": 1766387048,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Belle-whisper-large-v3-zh\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"BELLE-2/Belle-whisper-large-v3-zh\",\n        \"model_revision\": \"3bebc7247696b39f5ab9ed22db426943ac33f600\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Xorbits/Belle-whisper-large-v3-zh\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387049,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-tiny-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-tiny\"\n      }\n    },\n    \"updated_at\": 1766387051,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-tiny.en-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-tiny.en-mlx\"\n      }\n    },\n    \"updated_at\": 1766387052,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-base-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-base-mlx\"\n      }\n    },\n    \"updated_at\": 1766387054,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-base.en-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-base.en-mlx\"\n      }\n    },\n    \"updated_at\": 1766387055,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-small-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-small-mlx\"\n      }\n    },\n    \"updated_at\": 1766387056,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-small.en-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-small.en-mlx\"\n      }\n    },\n    \"updated_at\": 1766387057,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-medium-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-medium-mlx\"\n      }\n    },\n    \"updated_at\": 1766387058,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-medium.en-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-medium.en-mlx\"\n      }\n    },\n    \"updated_at\": 1766387060,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-large-v3-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-large-v3-mlx\"\n      }\n    },\n    \"updated_at\": 1766387061,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"whisper-large-v3-turbo-mlx\",\n    \"model_family\": \"whisper\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"engine\": \"mlx\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"mlx-community/whisper-large-v3-turbo\"\n      }\n    },\n    \"updated_at\": 1766387062,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"SenseVoiceSmall\",\n    \"model_family\": \"funasr\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": true,\n    \"default_model_config\": {\n      \"vad_model\": \"fsmn-vad\",\n      \"vad_kwargs\": {\n        \"max_single_segment_time\": 30000\n      }\n    },\n    \"default_transcription_config\": {\n      \"use_itn\": true,\n      \"batch_size_s\": 60,\n      \"merge_vad\": true,\n      \"merge_length_s\": 15\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"FunAudioLLM/SenseVoiceSmall\",\n        \"model_revision\": \"3eb3b4eeffc2f2dde6051b853983753db33e35c3\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/SenseVoiceSmall\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387063,\n    \"featured\": true\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"paraformer-zh\",\n    \"model_family\": \"funasr\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"default_model_config\": {\n      \"vad_model\": \"fsmn-vad\",\n      \"punc_model\": \"ct-punc\"\n    },\n    \"default_transcription_config\": {\n      \"batch_size_s\": 300\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"funasr/paraformer-zh\",\n        \"model_revision\": \"5ed094cdfc8f6a9b6b022bd08bc904ef862bc79e\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387065,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"paraformer-zh-hotword\",\n    \"model_family\": \"funasr\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"default_model_config\": {\n      \"vad_model\": \"fsmn-vad\",\n      \"punc_model\": \"ct-punc\"\n    },\n    \"default_transcription_config\": {\n      \"hotword\": \"\",\n      \"batch_size_s\": 300\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"JunHowie/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404\",\n        \"model_revision\": \"26d622993683d7b0c517ee5ec9c1c8bdde76e324\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387068,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"paraformer-zh-long\",\n    \"model_family\": \"funasr\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"default_model_config\": {\n      \"vad_model\": \"fsmn-vad\",\n      \"punc_model\": \"ct-punc\"\n    },\n    \"default_transcription_config\": {\n      \"batch_size_s\": 300\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"JunHowie/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch\",\n        \"model_revision\": \"b6d8cb81645e34056cd3dda41e5624a740587de3\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387070,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"paraformer-zh-spk\",\n    \"model_family\": \"funasr\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"default_model_config\": {\n      \"vad_model\": \"fsmn-vad\",\n      \"punc_model\": \"ct-punc\",\n      \"spk_model\": \"cam++\"\n    },\n    \"default_transcription_config\": {\n      \"batch_size_s\": 300\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"JunHowie/speech_paraformer-large-vad-punc-spk_asr_nat-zh-cn\",\n        \"model_revision\": \"36abd64af4392fe02bf76453bc86c081cf1ca6da\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/speech_paraformer-large-vad-punc-spk_asr_nat-zh-cn\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387072,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"seaco-paraformer-zh\",\n    \"model_family\": \"funasr\",\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"multilingual\": false,\n    \"default_model_config\": {\n      \"vad_model\": \"fsmn-vad\",\n      \"punc_model\": \"ct-punc\"\n    },\n    \"default_transcription_config\": {\n      \"hotword\": \"\",\n      \"batch_size_s\": 300\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"JunHowie/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch\",\n        \"model_revision\": \"42e6be00854cf8de0f40002794f99df2a444fa97\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387074,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"ChatTTS\",\n    \"model_family\": \"ChatTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"ChatTTS>=0.2.1\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"2Noise/ChatTTS\",\n        \"model_revision\": \"1a3c04a8b0651689bd9242fbb55b1f4b5a9aef84\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/ChatTTS\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387076,\n    \"featured\": true\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"CosyVoice-300M\",\n    \"model_family\": \"CosyVoice\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_voice_cloning\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"FunAudioLLM/CosyVoice-300M\",\n        \"model_revision\": \"39c4e13d46bd4dfb840d214547623e5fcd2428e2\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/CosyVoice-300M\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387078,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"CosyVoice-300M-SFT\",\n    \"model_family\": \"CosyVoice\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"FunAudioLLM/CosyVoice-300M-SFT\",\n        \"model_revision\": \"096a5cff8d497fabb3dec2756a200f3688457a1b\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/CosyVoice-300M-SFT\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387080,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"CosyVoice-300M-Instruct\",\n    \"model_family\": \"CosyVoice\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"FunAudioLLM/CosyVoice-300M-Instruct\",\n        \"model_revision\": \"ba5265d9a3169c1fedce145122c9dd4bc24e062c\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/CosyVoice-300M-Instruct\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387082,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"CosyVoice2-0.5B\",\n    \"model_family\": \"CosyVoice\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\",\n      \"text2audio_voice_cloning\"\n    ],\n    \"multilingual\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"librosa\",\n        \"tiktoken\",\n        \"lightning>=2.0.0\",\n        \"hydra-core>=1.3.2\",\n        \"inflect\",\n        \"conformer\",\n        \"diffusers==0.29.0\",\n        \"gdown\",\n        \"pyarrow\",\n        \"HyperPyYAML\",\n        \"onnxruntime>=1.16.0\",\n        \"pyworld>=0.3.4\",\n        \"wetext==0.0.9\",\n        \"transformers==4.51.3\",\n        \"#system_numpy#\",\n        \"#system_torch#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"JunHowie/CosyVoice2-0.5B\",\n        \"model_revision\": \"7ac9e9a026aec35efe48cde1196eaad6a00ad5f2\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"iic/CosyVoice2-0.5B\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387084,\n    \"featured\": true\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"FishSpeech-1.5\",\n    \"model_family\": \"FishAudio\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\",\n      \"text2audio_voice_cloning\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"fishaudio/fish-speech-1.5\",\n        \"model_revision\": \"268b6ec86243dd683bc78dab7e9a6cedf9191f2a\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"fishaudio/fish-speech-1.5\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387086,\n    \"featured\": true\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"F5-TTS\",\n    \"model_family\": \"F5-TTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\",\n      \"text2audio_voice_cloning\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"SWivid/F5-TTS\",\n        \"model_revision\": \"4dcc16f297f2ff98a17b3726b16f5de5a5e45672\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/F5-TTS\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387087,\n    \"featured\": true\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"F5-TTS-MLX\",\n    \"model_family\": \"F5-TTS-MLX\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\",\n      \"text2audio_voice_cloning\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"lucasnewman/f5-tts-mlx\",\n        \"model_revision\": \"7642bb232e3fcacf92c51c786edebb8624da6b93\"\n      }\n    },\n    \"updated_at\": 1766387089,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"MeloTTS-English\",\n    \"model_family\": \"MeloTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": false,\n    \"language\": \"EN\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"myshell-ai/MeloTTS-English\",\n        \"model_revision\": \"bb4fb7346d566d277ba8c8c7dbfdf6786139b8ef\"\n      }\n    },\n    \"updated_at\": 1766387090,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"MeloTTS-English-v2\",\n    \"model_family\": \"MeloTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": false,\n    \"language\": \"EN\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"myshell-ai/MeloTTS-English-v2\",\n        \"model_revision\": \"a53e3509c4ee4ff16d79272feb2474ff864e18f3\"\n      }\n    },\n    \"updated_at\": 1766387091,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"MeloTTS-English-v3\",\n    \"model_family\": \"MeloTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": false,\n    \"language\": \"EN\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"myshell-ai/MeloTTS-English-v3\",\n        \"model_revision\": \"f7c4a35392c0e9be24a755f1edb4c3f63040f759\"\n      }\n    },\n    \"updated_at\": 1766387093,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"MeloTTS-French\",\n    \"model_family\": \"MeloTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": false,\n    \"language\": \"FR\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"myshell-ai/MeloTTS-French\",\n        \"model_revision\": \"1e9bf590262392d8bffb679b0a3b0c16b0f9fdaf\"\n      }\n    },\n    \"updated_at\": 1766387094,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"MeloTTS-Japanese\",\n    \"model_family\": \"MeloTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": false,\n    \"language\": \"JP\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"myshell-ai/MeloTTS-Japanese\",\n        \"model_revision\": \"367f8795464b531b4e97c1515bddfc1243e60891\"\n      }\n    },\n    \"updated_at\": 1766387095,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"MeloTTS-Spanish\",\n    \"model_family\": \"MeloTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": false,\n    \"language\": \"ES\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"myshell-ai/MeloTTS-Spanish\",\n        \"model_revision\": \"dbb5496df39d11a66c1d5f5a9ca357c3c9fb95fb\"\n      }\n    },\n    \"updated_at\": 1766387096,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"MeloTTS-Chinese\",\n    \"model_family\": \"MeloTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": false,\n    \"language\": \"ZH\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"myshell-ai/MeloTTS-Chinese\",\n        \"model_revision\": \"af5d207a364ea4208c6f589c89f57f88414bdd16\"\n      }\n    },\n    \"updated_at\": 1766387097,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"MeloTTS-Korean\",\n    \"model_family\": \"MeloTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": false,\n    \"language\": \"KR\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"myshell-ai/MeloTTS-Korean\",\n        \"model_revision\": \"0207e5adfc90129a51b6b03d89be6d84360ed323\"\n      }\n    },\n    \"updated_at\": 1766387099,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Kokoro-82M\",\n    \"model_family\": \"Kokoro\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"hexgrad/Kokoro-82M\",\n        \"model_revision\": \"7884269d6fd3f9beabc271b6f1308e5699281fa9\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/Kokoro-82M\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387100,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Kokoro-82M-MLX\",\n    \"model_family\": \"Kokoro-MLX\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"prince-canuma/Kokoro-82M\",\n        \"model_revision\": \"2acc06939cce874e0ddc454c5cb544f7f812e793\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Xorbits/Kokoro-82M-MLX\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"mlx-audio==0.2.3\",\n        \"mlx-lm==0.24.1\",\n        \"en_core_web_sm@https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl\",\n        \"en_core_web_trf@https://github.com/explosion/spacy-models/releases/download/en_core_web_trf-3.8.0/en_core_web_trf-3.8.0-py3-none-any.whl\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"updated_at\": 1766387102,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"MegaTTS3\",\n    \"model_family\": \"MegaTTS\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": true,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"ByteDance/MegaTTS3\",\n        \"model_revision\": \"409a7002b006d80f0730fca6f80441b08c10e738\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"ByteDance/MegaTTS3\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387103,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Kokoro-82M-v1.1-zh\",\n    \"model_family\": \"Kokoro-zh\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\"\n    ],\n    \"multilingual\": false,\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"hexgrad/Kokoro-82M-v1.1-zh\",\n        \"model_revision\": \"01e7505bd6a7a2ac4975463114c3a7650a9f7218\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/Kokoro-82M-v1.1-zh\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387106,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"IndexTTS2\",\n    \"model_family\": \"IndexTTS2\",\n    \"model_ability\": [\n      \"text2audio\",\n      \"text2audio_zero_shot\",\n      \"text2audio_voice_cloning\",\n      \"text2audio_emotion_control\"\n    ],\n    \"multilingual\": true,\n    \"default_model_config\": {\n      \"small_models_dir\": null\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers==4.52.1\",\n        \"#system_torch#\",\n        \"#system_numpy#\",\n        \"json5\",\n        \"munch\",\n        \"matplotlib\",\n        \"flatten_dict\",\n        \"julius\",\n        \"tensorboard\",\n        \"randomname\",\n        \"argbind\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"IndexTeam/IndexTTS-2\",\n        \"model_revision\": \"main\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"IndexTeam/IndexTTS-2\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387108,\n    \"featured\": true\n  },\n  {\n    \"model_name\": \"Fun-ASR-Nano-2512\",\n    \"model_description\": \"This is a custom model description.\",\n    \"multilingual\": false,\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"model_family\": \"funasr\",\n    \"model_src\": {\n      \"modelscope\": {\n        \"model_id\": \"FunAudioLLM/Fun-ASR-Nano-2512\",\n        \"model_revision\": \"master\"\n      },\n      \"huggingface\": {\n        \"model_id\": \"FunAudioLLM/Fun-ASR-Nano-2512\",\n        \"model_revision\": \"main\"\n      }\n    },\n    \"default_model_config\": {\n      \"vad_model\": \"fsmn-vad\",\n      \"vad_kwargs\": {\n        \"max_single_segment_time\": 30000\n      }\n    },\n    \"default_transcription_config\": {\n      \"batch_size\": 1\n    },\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"funasr @ git+https://github.com/modelscope/FunASR@b25472b0b562d04f411da30ff9cc59786f68b0f2\"\n      ]\n    },\n    \"featured\": false,\n    \"updated_at\": 1768536254\n  },\n  {\n    \"model_name\": \"Fun-ASR-MLT-Nano-2512\",\n    \"model_description\": \"This is a custom model description.\",\n    \"multilingual\": false,\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"model_family\": \"funasr\",\n    \"model_src\": {\n      \"modelscope\": {\n        \"model_id\": \"FunAudioLLM/Fun-ASR-MLT-Nano-2512\",\n        \"model_revision\": \"master\"\n      },\n      \"huggingface\": {\n        \"model_id\": \"FunAudioLLM/Fun-ASR-MLT-Nano-2512\",\n        \"model_revision\": \"main\"\n      }\n    },\n    \"default_model_config\": {\n      \"vad_model\": \"fsmn-vad\",\n      \"vad_kwargs\": {\n        \"max_single_segment_time\": 30000\n      }\n    },\n    \"default_transcription_config\": {\n      \"batch_size\": 1\n    },\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"funasr @ git+https://github.com/modelscope/FunASR@b25472b0b562d04f411da30ff9cc59786f68b0f2\"\n      ]\n    },\n    \"featured\": false,\n    \"updated_at\": 1768536595\n  },\n  {\n    \"model_name\": \"Qwen3-ASR-0.6B\",\n    \"model_description\": \"This is a custom model description.\",\n    \"multilingual\": true,\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"model_family\": \"qwen3_asr\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Qwen/Qwen3-ASR-0.6B\",\n        \"model_revision\": \"main\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Qwen/Qwen3-ASR-0.6B\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"default_model_config\": {\n      \"forced_aligner\": \"Qwen/Qwen3-ForcedAligner-0.6B\"\n    },\n    \"default_transcription_config\": {},\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"qwen-asr\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"featured\": false,\n    \"updated_at\": 1770217332\n  },\n  {\n    \"model_name\": \"Qwen3-ASR-1.7B\",\n    \"model_description\": \"This is a custom model description.\",\n    \"multilingual\": true,\n    \"model_ability\": [\n      \"audio2text\"\n    ],\n    \"model_family\": \"qwen3_asr\",\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Qwen/Qwen3-ASR-1.7B\",\n        \"model_revision\": \"main\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Qwen/Qwen3-ASR-1.7B\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"default_model_config\": {\n      \"forced_aligner\": \"Qwen/Qwen3-ForcedAligner-0.6B\"\n    },\n    \"default_transcription_config\": {},\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"qwen-asr\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"featured\": false,\n    \"updated_at\": 1770262385\n  }\n]\n"
  },
  {
    "path": "xinference/model/audio/qwen3_asr.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport tempfile\nfrom typing import TYPE_CHECKING, List, Optional, Tuple\n\nfrom ...device_utils import (\n    get_available_device,\n    get_device_preferred_dtype,\n    is_device_available,\n)\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass Qwen3ASRModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        try:\n            from qwen_asr import Qwen3ASRModel as QwenASR\n        except ImportError:\n            error_message = \"Failed to import module 'qwen_asr'\"\n            installation_guide = [\n                \"Please make sure 'qwen-asr' is installed. \",\n                \"You can install it by `pip install qwen-asr`\\n\",\n            ]\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        if self._device is None:\n            self._device = get_available_device()\n        else:\n            if not is_device_available(self._device):\n                raise ValueError(f\"Device {self._device} is not available!\")\n\n        init_kwargs = (\n            self._model_spec.default_model_config.copy()\n            if getattr(self._model_spec, \"default_model_config\", None)\n            else {}\n        )\n        init_kwargs.update(self._kwargs)\n        init_kwargs.setdefault(\"device_map\", self._device)\n        init_kwargs.setdefault(\"dtype\", get_device_preferred_dtype(self._device))\n        if \"forced_aligner\" in init_kwargs:\n            forced_aligner_kwargs = init_kwargs.get(\"forced_aligner_kwargs\") or {}\n            forced_aligner_kwargs.setdefault(\"device_map\", self._device)\n            forced_aligner_kwargs.setdefault(\n                \"dtype\", get_device_preferred_dtype(self._device)\n            )\n            init_kwargs[\"forced_aligner_kwargs\"] = forced_aligner_kwargs\n        logger.debug(\"Loading Qwen3-ASR model with kwargs: %s\", init_kwargs)\n        self._model = QwenASR.from_pretrained(self._model_path, **init_kwargs)\n\n    def _extract_text_and_language(self, result) -> Tuple[str, Optional[str]]:\n        if isinstance(result, list):\n            if not result:\n                return \"\", None\n            result = result[0]\n\n        if hasattr(result, \"text\"):\n            text = result.text\n            language = getattr(result, \"language\", None)\n            return text, language\n\n        if isinstance(result, dict):\n            text = result.get(\"text\") or result.get(\"transcript\") or \"\"\n            language = result.get(\"language\")\n            return text, language\n\n        return str(result), None\n\n    def transcriptions(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n        **kwargs,\n    ):\n        if temperature != 0:\n            raise RuntimeError(\"`temperature` is not supported for Qwen3-ASR\")\n        if timestamp_granularities is not None:\n            raise RuntimeError(\n                \"`timestamp_granularities` is not supported for Qwen3-ASR\"\n            )\n        if prompt is not None:\n            logger.warning(\n                \"Prompt for Qwen3-ASR transcriptions will be ignored: %s\", prompt\n            )\n\n        kw = dict(getattr(self._model_spec, \"default_transcription_config\", None) or {})\n        kw.update(kwargs)\n\n        with tempfile.NamedTemporaryFile(buffering=0) as f:\n            f.write(audio)\n            assert self._model is not None\n            result = self._model.transcribe(audio=f.name, language=language, **kw)\n            text, detected_language = self._extract_text_and_language(result)\n\n        if response_format == \"json\":\n            return {\"text\": text}\n        if response_format == \"verbose_json\":\n            return {\n                \"task\": \"transcribe\",\n                \"language\": detected_language,\n                \"text\": text,\n            }\n        raise ValueError(f\"Unsupported response format: {response_format}\")\n\n    def translations(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n    ):\n        raise RuntimeError(\"Qwen3-ASR does not support translations API\")\n"
  },
  {
    "path": "xinference/model/audio/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/audio/tests/test_chattts.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport inspect\nimport os\nimport tempfile\n\nimport pandas as pd\n\n\ndef test_chattts(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"ChatTTS\",\n        model_type=\"audio\",\n        compile=False,\n        download_hub=\"huggingface\",\n    )\n    model = client.get_model(model_uid)\n    input_string = (\n        \"chat T T S is a text to speech model designed for dialogue applications.\"\n    )\n    response = model.speech(input_string)\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    df = pd.read_csv(\n        \"https://raw.githubusercontent.com/6drf21e/ChatTTS_Speaker/main/evaluation_results.csv\"\n    )\n    speaker = df[\"emb_data\"][0]\n\n    response = model.speech(input_string, voice=speaker)\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    response = model.speech(input_string, stream=True)\n    assert inspect.isgenerator(response)\n    with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n        i = 0\n        for chunk in response:\n            f.write(chunk)\n            i += 1\n            assert type(chunk) is bytes\n            assert len(chunk) > 0\n        assert i > 5\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with client.audio.speech.with_streaming_response.create(\n        model=model_uid, input=input_string, voice=\"echo\", response_format=\"pcm\"\n    ) as response:\n        with tempfile.NamedTemporaryFile(suffix=\".pcm\", delete=True) as f:\n            response.stream_to_file(f.name)\n            assert os.stat(f.name).st_size > 0\n"
  },
  {
    "path": "xinference/model/audio/tests/test_cosyvoice.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport inspect\nimport os.path\nimport tempfile\n\nimport pytest\n\n\n@pytest.mark.parametrize(\"model_name\", [\"CosyVoice-300M-SFT\", \"CosyVoice2-0.5B\"])\n@pytest.mark.skip(reason=\"The diffusers on the GPU CI action is not compatible.\")\ndef test_cosyvoice_sft(setup, model_name):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=model_name, model_type=\"audio\", download_hub=\"huggingface\"\n    )\n    model = client.get_model(model_uid)\n    input_string = \"你好，我是通义生成式语音大模型，请问有什么可以帮您的吗？\"\n\n    # inference_sft\n    response = model.speech(input_string)\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    # Test openai API\n    import openai\n\n    openai_client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    # ['中文女', '中文男', '日语男', '粤语女', '英文女', '英文男', '韩语女']\n    response = openai_client.audio.speech.create(\n        model=model_uid, input=input_string, voice=\"英文女\"\n    )\n    with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n        response.stream_to_file(f.name)\n        assert os.stat(f.name).st_size > 0\n\n    if \"CosyVoice2\" in model_name:\n        client.terminate_model(model_uid)\n        model_uid = client.launch_model(\n            model_name=model_name,\n            model_type=\"audio\",\n            download_hub=\"modelscope\",\n        )\n        model = client.get_model(model_uid)\n\n    # inference_sft\n    response = model.speech(input_string, stream=True, response_format=\"pcm\")\n    assert inspect.isgenerator(response)\n    i = 0\n    with tempfile.NamedTemporaryFile(suffix=\".pcm\", delete=True) as f:\n        for chunk in response:\n            f.write(chunk)\n            i += 1\n            assert type(chunk) is bytes\n            assert len(chunk) > 0\n        assert i > 5\n\n\n@pytest.mark.parametrize(\"model_name\", [\"CosyVoice-300M\", \"CosyVoice2-0.5B\"])\n@pytest.mark.skip(reason=\"The diffusers on the GPU CI action is not compatible.\")\ndef test_cosyvoice(setup, model_name):\n    endpoint, _ = setup\n    from ....client import Client\n\n    zero_shot_prompt_file = os.path.join(\n        os.path.dirname(__file__), \"zero_shot_prompt.wav\"\n    )\n    cross_lingual_prompt_file = os.path.join(\n        os.path.dirname(__file__), \"cross_lingual_prompt.wav\"\n    )\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=model_name,\n        model_type=\"audio\",\n        download_hub=\"modelscope\",\n    )\n    model = client.get_model(model_uid)\n    with open(zero_shot_prompt_file, \"rb\") as f:\n        zero_shot_prompt = f.read()\n    with open(cross_lingual_prompt_file, \"rb\") as f:\n        cross_lingual_prompt = f.read()\n    input_string = (\n        \"<|en|>And then later on, fully acquiring that company. So keeping management in line, interest in \"\n        \"line with the asset that's coming into the family is a reason why sometimes we don't buy the whole thing.\",\n    )\n\n    # inference_cross_lingual\n    response = model.speech(input_string, prompt_speech=cross_lingual_prompt)\n    assert type(response) is bytes, response\n    assert len(response) > 0\n    with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n        f.write(response)\n        assert os.stat(f.name).st_size > 0\n\n    # inference_zero_shot\n    response = model.speech(\n        \"收到好友从远方寄来的生日礼物，那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐，笑容如花儿般绽放。\",\n        prompt_text=\"希望你以后能够做的比我还好呦。\",\n        prompt_speech=zero_shot_prompt,\n    )\n    assert type(response) is bytes, response\n    assert len(response) > 0\n    with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n        f.write(response)\n        assert os.stat(f.name).st_size > 0\n\n\n@pytest.mark.parametrize(\"model_name\", [\"CosyVoice-300M-Instruct\", \"CosyVoice2-0.5B\"])\n@pytest.mark.skip(reason=\"The diffusers on the GPU CI action is not compatible.\")\ndef test_cosyvoice_instruct(setup, model_name):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=model_name,\n        model_type=\"audio\",\n        download_hub=\"modelscope\",\n    )\n    model = client.get_model(model_uid)\n\n    if \"CosyVoice2\" in model_name:\n        zero_shot_prompt_file = os.path.join(\n            os.path.dirname(__file__), \"zero_shot_prompt.wav\"\n        )\n        with open(zero_shot_prompt_file, \"rb\") as f:\n            zero_shot_prompt = f.read()\n        # inference with prompt speech\n        response = model.speech(\n            \"在面对挑战时，他展现了非凡的<strong>勇气</strong>与<strong>智慧</strong>。\",\n            prompt_speech=zero_shot_prompt,\n        )\n        assert type(response) is bytes\n        assert len(response) > 0\n        with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n            f.write(response)\n            assert os.stat(f.name).st_size > 0\n    else:\n        # inference without instruction\n        response = model.speech(\n            \"在面对挑战时，他展现了非凡的<strong>勇气</strong>与<strong>智慧</strong>。\",\n            voice=\"中文男\",\n        )\n        assert type(response) is bytes\n        assert len(response) > 0\n        with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n            f.write(response)\n            assert os.stat(f.name).st_size > 0\n        # inference_instruct\n        response = model.speech(\n            \"在面对挑战时，他展现了非凡的<strong>勇气</strong>与<strong>智慧</strong>。\",\n            voice=\"中文男\",\n            instruct_text=\"Theo 'Crimson', is a fiery, passionate rebel leader. \"\n            \"Fights with fervor for justice, but struggles with impulsiveness.\",\n        )\n        assert type(response) is bytes\n        assert len(response) > 0\n        with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n            f.write(response)\n            assert os.stat(f.name).st_size > 0\n"
  },
  {
    "path": "xinference/model/audio/tests/test_f5tts.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport tempfile\n\n\ndef test_f5tts(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"F5-TTS\",\n        model_type=\"audio\",\n        download_hub=\"huggingface\",\n    )\n    model = client.get_model(model_uid)\n    input_string = (\n        \"chat T T S is a text to speech model designed for dialogue applications.\"\n    )\n    response = model.speech(input_string)\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n        f.write(response)\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with client.audio.speech.with_streaming_response.create(\n        model=model_uid, input=input_string, voice=\"echo\"\n    ) as response:\n        with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n            response.stream_to_file(f.name)\n            assert os.stat(f.name).st_size > 0\n"
  },
  {
    "path": "xinference/model/audio/tests/test_f5tts_mlx.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport tempfile\n\n\ndef test_f5tts_mlx(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"F5-TTS-MLX\",\n        model_type=\"audio\",\n        download_hub=\"huggingface\",\n    )\n    model = client.get_model(model_uid)\n    input_string = (\n        \"chat T T S is a text to speech model designed for dialogue applications.\"\n    )\n    response = model.speech(input_string)\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n        f.write(response)\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with client.audio.speech.with_streaming_response.create(\n        model=model_uid, input=input_string, voice=\"echo\"\n    ) as response:\n        with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n            response.stream_to_file(f.name)\n            assert os.stat(f.name).st_size > 0\n"
  },
  {
    "path": "xinference/model/audio/tests/test_fish_speech.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport inspect\nimport os\nimport tempfile\n\n\ndef test_fish_speech(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"FishSpeech-1.5\", model_type=\"audio\", compile=False\n    )\n    model = client.get_model(model_uid)\n\n    input_string = \"你好，你是谁？\"\n    response = model.speech(input_string)\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    # Test copy voice\n    prompt_speech_path = os.path.join(os.path.dirname(__file__), \"basic_ref_en.wav\")\n    with open(prompt_speech_path, \"rb\") as f:\n        prompt_speech = f.read()\n    response = model.speech(\n        \"Hello\",\n        prompt_speech=prompt_speech,\n        prompt_text=\"Some call me nature, others call me mother nature.\",\n    )\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    # Test stream\n    input_string = \"瑞典王国，通称瑞典，是一个位于斯堪的纳维亚半岛的北欧国家，首都及最大城市为斯德哥尔摩。\"\n    response = model.speech(input_string, chunk_length=20, stream=True)\n    assert inspect.isgenerator(response)\n    i = 0\n    with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n        for chunk in response:\n            f.write(chunk)\n            i += 1\n            assert type(chunk) is bytes\n            assert len(chunk) > 0\n        assert i > 5\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with client.audio.speech.with_streaming_response.create(\n        model=model_uid, input=input_string, voice=\"echo\", response_format=\"pcm\"\n    ) as response:\n        with tempfile.NamedTemporaryFile(suffix=\".pcm\", delete=True) as f:\n            response.stream_to_file(f.name)\n            assert os.stat(f.name).st_size > 0\n"
  },
  {
    "path": "xinference/model/audio/tests/test_funasr.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os.path\n\nimport requests\n\n\ndef test_restful_api_for_funasr(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"SenseVoiceSmall\",\n        model_name=\"SenseVoiceSmall\",\n        model_type=\"audio\",\n    )\n    model = client.get_model(model_uid)\n    response = requests.get(\"https://github.com/openai/whisper/raw/main/tests/jfk.flac\")\n    audio = response.content\n\n    response = model.transcriptions(audio)\n    transcription = response[\"text\"].lower()\n    assert \"my fellow americans\" in transcription\n    assert \"your country\" in transcription\n    assert \"do for you\" in transcription\n\n    # Test openai API\n    import openai\n\n    zh_cn_audio_path = os.path.join(\n        os.path.dirname(__file__), \"common_voice_zh-CN_38026095.mp3\"\n    )\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with open(zh_cn_audio_path, \"rb\") as f:\n        completion = client.audio.transcriptions.create(model=model_uid, file=f)\n        assert \"列表\" in completion.text\n        assert \"香港\" in completion.text\n        assert \"航空\" in completion.text\n\n\ndef test_verbose_for_funasr(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"paraformer-zh-spk\",\n        model_name=\"paraformer-zh-spk\",\n        model_type=\"audio\",\n    )\n    model = client.get_model(model_uid)\n    audio_path = os.path.join(os.path.dirname(__file__), \"jfk.flac\")\n    with open(audio_path, \"rb\") as f:\n        audio = f.read()\n\n    response = model.transcriptions(audio, response_format=\"verbose_json\")\n    assert response[\"text\"]\n    assert len(response[\"segments\"]) == 1\n\n    assert response[\"text\"]\n    assert len(response[\"words\"]) == 22\n\n    zh_cn_audio_path = os.path.join(\n        os.path.dirname(__file__), \"common_voice_zh-CN_38026095.mp3\"\n    )\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with open(zh_cn_audio_path, \"rb\") as f:\n        completion = client.audio.transcriptions.create(\n            model=model_uid,\n            file=f,\n            response_format=\"verbose_json\",\n        )\n        assert len(completion.segments) == 1\n        assert len(completion.words) > 0\n"
  },
  {
    "path": "xinference/model/audio/tests/test_kokoro.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport tempfile\n\n\ndef test_kokoro(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"Kokoro-82M\",\n        model_type=\"audio\",\n        compile=False,\n        download_hub=\"huggingface\",\n    )\n    model = client.get_model(model_uid)\n    input_string = (\n        \"chat T T S is a text to speech model designed for dialogue applications.\"\n    )\n    response = model.speech(input_string)\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    response = model.speech(input_string, voice=\"af_sky\")\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with client.audio.speech.with_streaming_response.create(\n        model=model_uid, input=input_string, voice=\"am_fenrir\"\n    ) as response:\n        with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n            response.stream_to_file(f.name)\n            assert os.stat(f.name).st_size > 0\n\n\ndef test_kokoro_zh(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"Kokoro-82M\",\n        model_type=\"audio\",\n        compile=False,\n        download_hub=\"huggingface\",\n        lang_code=\"z\",\n    )\n    model = client.get_model(model_uid)\n    input_string = \"重新启动即可更新\"\n\n    response = model.speech(input_string, voice=\"zf_xiaoyi\")\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with client.audio.speech.with_streaming_response.create(\n        model=model_uid, input=input_string, voice=\"zf_xiaoyi\"\n    ) as response:\n        with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n            response.stream_to_file(f.name)\n            assert os.stat(f.name).st_size > 0\n"
  },
  {
    "path": "xinference/model/audio/tests/test_megatts.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\n\n\ndef test_megatts(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"MegaTTS3\",\n        model_type=\"audio\",\n        compile=False,\n        download_hub=\"huggingface\",\n    )\n    model = client.get_model(model_uid)\n\n    # Test copy voice\n    prompt_speech_path = os.path.join(os.path.dirname(__file__), \"bbc_news.wav\")\n    with open(prompt_speech_path, \"rb\") as f:\n        prompt_speech = f.read()\n    prompt_latent_path = os.path.join(os.path.dirname(__file__), \"bbc_news.npy\")\n    with open(prompt_latent_path, \"rb\") as f:\n        prompt_latent = f.read()\n    response = model.speech(\n        \"His death in this conjuncture was a public misfortune.\",\n        prompt_speech=prompt_speech,\n        prompt_latent=prompt_latent,\n    )\n    assert type(response) is bytes\n    assert len(response) > 0\n"
  },
  {
    "path": "xinference/model/audio/tests/test_melotts.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport tempfile\n\n\ndef test_melotts(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"MeloTTS-English-v3\",\n        model_type=\"audio\",\n        compile=False,\n        download_hub=\"huggingface\",\n    )\n    model = client.get_model(model_uid)\n    input_string = (\n        \"chat T T S is a text to speech model designed for dialogue applications.\"\n    )\n    response = model.speech(input_string)\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    response = model.speech(input_string, voice=\"EN-Newest\")\n    assert type(response) is bytes\n    assert len(response) > 0\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with client.audio.speech.with_streaming_response.create(\n        model=model_uid, input=input_string, voice=\"EN-Newest\"\n    ) as response:\n        with tempfile.NamedTemporaryFile(suffix=\".mp3\", delete=True) as f:\n            response.stream_to_file(f.name)\n            assert os.stat(f.name).st_size > 0\n"
  },
  {
    "path": "xinference/model/audio/tests/test_whisper.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os.path\nimport tempfile\nimport uuid\n\nimport pytest\n\n\ndef test_restful_api_for_whisper(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"whisper-1\",\n        model_name=\"whisper-small\",\n        model_type=\"audio\",\n    )\n    model = client.get_model(model_uid)\n    audio_path = os.path.join(os.path.dirname(__file__), \"jfk.flac\")\n    with open(audio_path, \"rb\") as f:\n        audio = f.read()\n\n    response = model.transcriptions(audio)\n    transcription = response[\"text\"].lower()\n    assert \"my fellow americans\" in transcription\n    assert \"your country\" in transcription\n    assert \"do for you\" in transcription\n\n    # Translation requires large-v3 model.\n    zh_cn_audio_path = os.path.join(\n        os.path.dirname(__file__), \"common_voice_zh-CN_38026095.mp3\"\n    )\n    with open(zh_cn_audio_path, \"rb\") as f:\n        zh_cn_audio = f.read()\n    response = model.translations(zh_cn_audio)\n    translation = response[\"text\"].lower()\n    assert \"airlines\" in translation\n    assert \"hong kong\" in translation\n\n    # If model multilingual is False, it can't be used for translations.\n    model_uid2 = client.launch_model(\n        model_uid=\"whisper-2\",\n        model_name=\"whisper-tiny.en\",\n        model_type=\"audio\",\n        n_gpu=None,\n    )\n    model2 = client.get_model(model_uid2)\n    with pytest.raises(RuntimeError, match=\"translations\"):\n        model2.translations(zh_cn_audio)\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with open(zh_cn_audio_path, \"rb\") as f:\n        completion = client.audio.transcriptions.create(model=model_uid, file=f)\n        assert \"列表\" in completion.text\n        assert \"香港\" in completion.text\n        assert \"航空\" in completion.text\n\n        completion = client.audio.translations.create(model=model_uid, file=f)\n        translation = completion.text.lower()\n        assert \"airlines\" in translation\n        assert \"hong kong\" in translation\n\n\ndef test_transcriptions_for_whisper(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"whisper-1\",\n        model_name=\"whisper-small\",\n        model_type=\"audio\",\n    )\n    model = client.get_model(model_uid)\n    audio_path = os.path.join(os.path.dirname(__file__), \"jfk.flac\")\n    with open(audio_path, \"rb\") as f:\n        audio = f.read()\n\n    response = model.transcriptions(audio, response_format=\"verbose_json\")\n    assert response[\"text\"]\n    assert len(response[\"segments\"]) == 1\n\n    seek_set = set()\n    for s in response[\"segments\"]:\n        if s[\"seek\"] in seek_set:\n            assert False, \"incorrect seek\"\n        seek_set.add(s[\"seek\"])\n\n    response = model.transcriptions(\n        audio, response_format=\"verbose_json\", timestamp_granularities=[\"word\"]\n    )\n    assert response[\"text\"]\n    assert len(response[\"words\"]) == 22\n\n    zh_cn_audio_path = os.path.join(\n        os.path.dirname(__file__), \"common_voice_zh-CN_38026095.mp3\"\n    )\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with open(zh_cn_audio_path, \"rb\") as f:\n        completion = client.audio.transcriptions.create(\n            model=model_uid,\n            file=f,\n            response_format=\"verbose_json\",\n            timestamp_granularities=[\"segment\"],\n        )\n        assert len(completion.segments) == 1\n\n        completion = client.audio.transcriptions.create(\n            model=model_uid,\n            file=f,\n            response_format=\"verbose_json\",\n            timestamp_granularities=[\"word\"],\n        )\n        # Sometimes it splits the whole sentence into one word.\n        assert len(completion.words) > 0\n\n\ndef test_register_custom_audio():\n    from ..custom import (\n        CustomAudioModelFamilyV2,\n        get_user_defined_audios,\n        register_audio,\n        unregister_audio,\n    )\n\n    # correct\n    family_a = CustomAudioModelFamilyV2(\n        model_family=\"my-whisper\",\n        model_name=f\"custom_test_a-{uuid.uuid4().hex[:8]}\",\n        model_id=\"test/custom_test_a\",\n        multilingual=True,\n        model_ability=[\"audio2text\"],\n    )\n\n    register_audio(family_a, False)\n    assert family_a in get_user_defined_audios()\n\n    # name conflict\n    family_b = CustomAudioModelFamilyV2(\n        model_family=\"my-whisper\",\n        model_name=f\"custom_test_b-{uuid.uuid4().hex[:8]}\",\n        model_id=\"test/custom_test_b\",\n        multilingual=True,\n        model_ability=[\"audio2text\"],\n    )\n    register_audio(family_b, False)\n    assert family_b in get_user_defined_audios()\n    with pytest.raises(ValueError):\n        register_audio(family_b, False)\n\n    # unregister\n    unregister_audio(family_a.model_name)\n    assert family_a not in get_user_defined_audios()\n    unregister_audio(family_b.model_name)\n    assert family_b not in get_user_defined_audios()\n\n\ndef test_persistent_custom_audio():\n    from ....constants import XINFERENCE_MODEL_DIR\n    from ..custom import (\n        CustomAudioModelFamilyV2,\n        get_user_defined_audios,\n        register_audio,\n        unregister_audio,\n    )\n\n    temp_dir = tempfile.mkdtemp()\n\n    # correct\n    family = CustomAudioModelFamilyV2(\n        model_family=\"my-whisper\",\n        model_name=f\"custom_test_a-{uuid.uuid4().hex[:8]}\",\n        model_id=\"test/custom_test_a\",\n        multilingual=True,\n        model_uri=os.path.abspath(temp_dir),\n        model_ability=[\"audio2text\"],\n    )\n\n    register_audio(family, True)\n    assert family in get_user_defined_audios()\n    assert f\"{family.model_name}.json\" in os.listdir(\n        os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"audio\")\n    )\n\n    unregister_audio(family.model_name)\n    assert f\"{family.model_name}.json\" not in os.listdir(\n        os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"audio\")\n    )\n"
  },
  {
    "path": "xinference/model/audio/tests/test_whisper_mlx.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os.path\nimport platform\nimport sys\n\nimport pytest\n\n\n@pytest.mark.skipif(\n    sys.platform != \"darwin\" or platform.processor() != \"arm\",\n    reason=\"MLX only works for Apple silicon chip\",\n)\ndef test_restful_api_for_whisper(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"whisper-1\",\n        model_name=\"whisper-small-mlx\",\n        model_type=\"audio\",\n    )\n    model = client.get_model(model_uid)\n    audio_path = os.path.join(os.path.dirname(__file__), \"jfk.flac\")\n    with open(audio_path, \"rb\") as f:\n        audio = f.read()\n\n    response = model.transcriptions(audio)\n    transcription = response[\"text\"].lower()\n    assert \"my fellow americans\" in transcription\n    assert \"your country\" in transcription\n    assert \"do for you\" in transcription\n\n    # Translation requires large-v3 model.\n    zh_cn_audio_path = os.path.join(os.path.dirname(__file__), \"zero_shot_prompt.wav\")\n    with open(zh_cn_audio_path, \"rb\") as f:\n        zh_cn_audio = f.read()\n    response = model.translations(zh_cn_audio)\n    translation = response[\"text\"].lower()\n    assert \"do better\" in translation\n\n    # If model multilingual is False, it can't be used for translations.\n    model_uid2 = client.launch_model(\n        model_uid=\"whisper-2\",\n        model_name=\"whisper-tiny.en-mlx\",\n        model_type=\"audio\",\n        n_gpu=None,\n    )\n    model2 = client.get_model(model_uid2)\n    with pytest.raises(RuntimeError, match=\"translations\"):\n        model2.translations(zh_cn_audio)\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with open(zh_cn_audio_path, \"rb\") as f:\n        completion = client.audio.transcriptions.create(model=model_uid, file=f)\n        assert \"希望\" in completion.text\n\n        completion = client.audio.translations.create(model=model_uid, file=f)\n        translation = completion.text.lower()\n        assert \"do better\" in translation\n\n\ndef test_transcriptions_for_whisper(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"whisper-1\",\n        model_name=\"whisper-small-mlx\",\n        model_type=\"audio\",\n    )\n    model = client.get_model(model_uid)\n    audio_path = os.path.join(os.path.dirname(__file__), \"jfk.flac\")\n    with open(audio_path, \"rb\") as f:\n        audio = f.read()\n\n    response = model.transcriptions(audio, response_format=\"verbose_json\")\n    assert response[\"text\"]\n    assert len(response[\"segments\"]) == 1\n\n    seek_set = set()\n    for s in response[\"segments\"]:\n        if s[\"seek\"] in seek_set:\n            assert False, \"incorrect seek\"\n        seek_set.add(s[\"seek\"])\n\n    response = model.transcriptions(\n        audio, response_format=\"verbose_json\", timestamp_granularities=[\"word\"]\n    )\n    assert response[\"text\"]\n    assert len(response[\"words\"]) == 22\n\n    zh_cn_audio_path = os.path.join(\n        os.path.dirname(__file__), \"common_voice_zh-CN_38026095.mp3\"\n    )\n\n    # Test openai API\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    with open(zh_cn_audio_path, \"rb\") as f:\n        completion = client.audio.transcriptions.create(\n            model=model_uid,\n            file=f,\n            response_format=\"verbose_json\",\n            timestamp_granularities=[\"segment\"],\n        )\n        assert len(completion.segments) == 1\n\n        completion = client.audio.transcriptions.create(\n            model=model_uid,\n            file=f,\n            response_format=\"verbose_json\",\n            timestamp_granularities=[\"word\"],\n        )\n        assert len(completion.words) == 11\n"
  },
  {
    "path": "xinference/model/audio/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport io\nimport logging\nimport typing\nimport wave\nfrom collections.abc import Callable\n\nimport numpy as np\nimport torch\nfrom packaging import version\n\nlogger = logging.getLogger(__name__)\n\n\ndef _extract_pcm_from_wav_bytes(wav_bytes):\n    with io.BytesIO(wav_bytes) as wav_io:\n        with wave.open(wav_io, \"rb\") as wav_file:\n            num_frames = wav_file.getnframes()\n            return wav_file.readframes(num_frames)\n\n\ndef ensure_sample_rate(\n    audio: np.ndarray, old_sample_rate: int, sample_rate: int\n) -> np.ndarray:\n    import soundfile as sf\n    from scipy.signal import resample\n\n    if old_sample_rate != sample_rate:\n        # Calculate the new data length\n        new_length = int(len(audio) * sample_rate / old_sample_rate)\n\n        # Resample the data\n        resampled_data = resample(audio, new_length)\n\n        # Use BytesIO to save the resampled data to memory\n        with io.BytesIO() as buffer:\n            # Write the resampled data to the memory buffer\n            sf.write(buffer, resampled_data, sample_rate, format=\"WAV\")\n\n            # Reset the buffer position to the beginning\n            buffer.seek(0)\n\n            # Read the data from the memory buffer\n            audio, sr = sf.read(buffer, dtype=\"float32\")\n\n    return audio\n\n\ndef audio_stream_generator(\n    response_format: str,\n    sample_rate: int,\n    output_generator: typing.Generator[typing.Any, None, None],\n    output_chunk_transformer: Callable,\n):\n    import torch\n    import torchaudio\n\n    response_pcm = response_format.lower() == \"pcm\"\n    with io.BytesIO() as out:\n        if response_pcm:\n            logger.info(\n                f\"PCM stream output, num_channels: 1, sample_rate: {sample_rate}\"\n            )\n            writer = torchaudio.io.StreamWriter(out, format=\"wav\")\n            writer.add_audio_stream(\n                sample_rate=sample_rate, num_channels=1, format=\"s16\"\n            )\n        else:\n            writer = torchaudio.io.StreamWriter(out, format=response_format)\n            writer.add_audio_stream(sample_rate=sample_rate, num_channels=1)\n        strip_header = True\n        last_pos = 0\n        with writer.open():\n            for chunk in output_generator:\n                trans_chunk = output_chunk_transformer(chunk)\n                if response_pcm:\n                    trans_chunk = trans_chunk.to(torch.float32)\n                    trans_chunk = (\n                        (trans_chunk * 32767).clamp(-32768, 32767).to(torch.int16)\n                    )\n                writer.write_audio_chunk(0, trans_chunk)\n                new_last_pos = out.tell()\n                if new_last_pos != last_pos:\n                    out.seek(last_pos)\n                    encoded_bytes = out.read()\n                    if response_pcm and strip_header:\n                        # http://soundfile.sapp.org/doc/WaveFormat\n                        yield _extract_pcm_from_wav_bytes(encoded_bytes)\n                        strip_header = False\n                    else:\n                        yield encoded_bytes\n                    last_pos = new_last_pos\n\n\ndef audio_to_bytes(response_format: str, sample_rate: int, tensor: \"torch.Tensor\"):\n    import torchaudio\n\n    response_pcm = response_format.lower() == \"pcm\"\n    if version.parse(torchaudio.version.__version__) < version.parse(\"2.9.0\"):\n        with io.BytesIO() as out:\n            if response_pcm:\n                logger.debug(f\"PCM output, num_channels: 1, sample_rate: {sample_rate}\")\n                torchaudio.save(\n                    out, tensor, sample_rate, format=\"wav\", encoding=\"PCM_S\"\n                )\n                # http://soundfile.sapp.org/doc/WaveFormat\n                return _extract_pcm_from_wav_bytes(out.getvalue())\n            else:\n                torchaudio.save(out, tensor, sample_rate, format=response_format)\n                return out.getvalue()\n    else:\n        import tempfile\n\n        with tempfile.NamedTemporaryFile(\n            delete=True, suffix=f\".{response_format}\"\n        ) as temp_file:\n            if response_pcm:\n                logger.debug(f\"PCM output, num_channels: 1, sample_rate: {sample_rate}\")\n                torchaudio.save(\n                    temp_file.name,\n                    tensor,\n                    sample_rate,\n                    format=\"wav\",\n                    encoding=\"PCM_S\",\n                )\n                # Read the temporary file and extract PCM data\n                with open(temp_file.name, \"rb\") as f:\n                    wav_bytes = f.read()\n                return _extract_pcm_from_wav_bytes(wav_bytes)\n            else:\n                torchaudio.save(\n                    temp_file.name, tensor, sample_rate, format=response_format\n                )\n                # Read the temporary file and return its content\n                with open(temp_file.name, \"rb\") as f:\n                    return f.read()\n"
  },
  {
    "path": "xinference/model/audio/whisper.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nimport os\nimport typing\nfrom glob import glob\nfrom typing import TYPE_CHECKING, Dict, List, Optional, Union\n\nfrom typing_extensions import TypedDict\n\nfrom ...device_utils import (\n    get_available_device,\n    get_device_preferred_dtype,\n    is_device_available,\n)\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass WhisperModelConfig(TypedDict, total=False):\n    chunk_length_s: Optional[float]\n    stride_length_s: Optional[float]\n    return_timestamps: Optional[bool]\n    batch_size: Optional[int]\n\n\nclass WhisperModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        max_new_tokens: Optional[int] = 128,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._max_new_tokens = max_new_tokens\n        self._model_config: WhisperModelConfig = self._sanitize_model_config(\n            typing.cast(WhisperModelConfig, kwargs)\n        )\n\n    def _sanitize_model_config(\n        self, model_config: Optional[WhisperModelConfig]\n    ) -> WhisperModelConfig:\n        if model_config is None:\n            model_config = WhisperModelConfig()\n        model_config.setdefault(\"chunk_length_s\", 30)\n        model_config.setdefault(\"stride_length_s\", None)\n        model_config.setdefault(\"return_timestamps\", False)\n        model_config.setdefault(\"batch_size\", 16)\n        return model_config\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline\n\n        if self._device is None:\n            self._device = get_available_device()\n        else:\n            if not is_device_available(self._device):\n                raise ValueError(f\"Device {self._device} is not available!\")\n\n        torch_dtype = get_device_preferred_dtype(self._device)\n        use_safetensors = any(glob(os.path.join(self._model_path, \"*.safetensors\")))\n\n        model = AutoModelForSpeechSeq2Seq.from_pretrained(\n            self._model_path,\n            torch_dtype=torch_dtype,\n            low_cpu_mem_usage=True,\n            use_safetensors=use_safetensors,\n        )\n        model.to(self._device)\n\n        processor = AutoProcessor.from_pretrained(self._model_path)\n\n        self._model = pipeline(\n            \"automatic-speech-recognition\",\n            model=model,\n            tokenizer=processor.tokenizer,\n            feature_extractor=processor.feature_extractor,\n            chunk_length_s=self._model_config.get(\"chunk_length_s\"),\n            stride_length_s=self._model_config.get(\"stride_length_s\"),\n            return_timestamps=self._model_config.get(\"return_timestamps\"),\n            batch_size=self._model_config.get(\"batch_size\"),\n            torch_dtype=torch_dtype,\n            device=self._device,\n        )\n\n    def _call_model(\n        self,\n        audio: bytes,\n        generate_kwargs: Dict,\n        response_format: str,\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n    ):\n        if temperature != 0:\n            generate_kwargs.update({\"temperature\": temperature, \"do_sample\": True})\n\n        if response_format == \"json\":\n            logger.debug(\"Call whisper model with generate_kwargs: %s\", generate_kwargs)\n            assert callable(self._model)\n            result = self._model(audio, generate_kwargs=generate_kwargs)\n            return {\"text\": result[\"text\"]}\n        elif response_format == \"verbose_json\":\n            return_timestamps: Union[bool, str] = False\n            if not timestamp_granularities:\n                return_timestamps = True\n            elif timestamp_granularities == [\"segment\"]:\n                return_timestamps = True\n            elif timestamp_granularities == [\"word\"]:\n                return_timestamps = \"word\"\n            else:\n                raise Exception(\n                    f\"Unsupported timestamp_granularities: {timestamp_granularities}\"\n                )\n            assert callable(self._model)\n            results = self._model(\n                audio,\n                generate_kwargs=generate_kwargs,\n                return_timestamps=return_timestamps,\n            )\n\n            language = generate_kwargs.get(\"language\", \"english\")\n\n            if return_timestamps is True:\n                segments: List[dict] = []\n\n                def _get_chunk_segment_json(idx, text, start, end):\n                    find_start = 0\n                    if segments:\n                        find_start = segments[-1][\"seek\"] + len(segments[-1][\"text\"])\n                    return {\n                        \"id\": idx,\n                        \"seek\": results[\"text\"].find(text, find_start),\n                        \"start\": start,\n                        \"end\": end,\n                        \"text\": text,\n                        \"tokens\": [],\n                        \"temperature\": temperature,\n                        # We can't provide these values.\n                        \"avg_logprob\": 0.0,\n                        \"compression_ratio\": 0.0,\n                        \"no_speech_prob\": 0.0,\n                    }\n\n                for idx, c in enumerate(results.get(\"chunks\", [])):\n                    text = c[\"text\"]\n                    start, end = c[\"timestamp\"]\n                    segments.append(_get_chunk_segment_json(idx, text, start, end))\n\n                return {\n                    \"task\": \"transcribe\",\n                    \"language\": language,\n                    \"duration\": segments[-1][\"end\"] if segments else 0,\n                    \"text\": results[\"text\"],\n                    \"segments\": segments,\n                }\n            else:\n                assert return_timestamps == \"word\"\n\n                words = []\n                for idx, c in enumerate(results.get(\"chunks\", [])):\n                    text = c[\"text\"]\n                    start, end = c[\"timestamp\"]\n                    words.append({\"word\": text, \"start\": start, \"end\": end})\n\n                return {\n                    \"task\": \"transcribe\",\n                    \"language\": language,\n                    \"duration\": words[-1][\"end\"] if words else 0,\n                    \"text\": results[\"text\"],\n                    \"words\": words,\n                }\n        else:\n            raise ValueError(f\"Unsupported response format: {response_format}\")\n\n    def transcriptions(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n    ):\n        if prompt is not None:\n            logger.warning(\n                \"Prompt for whisper transcriptions will be ignored: %s\", prompt\n            )\n        generate_kwargs = {\"max_new_tokens\": self._max_new_tokens, \"task\": \"transcribe\"}\n        if language is not None:\n            generate_kwargs[\"language\"] = language\n\n        return self._call_model(\n            audio=audio,\n            generate_kwargs=generate_kwargs,\n            response_format=response_format,\n            temperature=temperature,\n            timestamp_granularities=timestamp_granularities,\n        )\n\n    def translations(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n    ):\n        if not self._model_spec.multilingual:\n            raise RuntimeError(\n                f\"Model {self._model_spec.model_name} is not suitable for translations.\"\n            )\n        if prompt is not None:\n            logger.warning(\n                \"Prompt for whisper transcriptions will be ignored: %s\", prompt\n            )\n        return self._call_model(\n            audio=audio,\n            generate_kwargs=(\n                {\"language\": language, \"task\": \"translate\"}\n                if language is not None\n                else {\"task\": \"translate\"}\n            ),\n            response_format=response_format,\n            temperature=temperature,\n            timestamp_granularities=timestamp_granularities,\n        )\n"
  },
  {
    "path": "xinference/model/audio/whisper_mlx.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport functools\nimport itertools\nimport logging\nimport tempfile\nfrom typing import TYPE_CHECKING, List, Optional\n\nif TYPE_CHECKING:\n    from .core import AudioModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass WhisperMLXModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"AudioModelFamilyV2\",\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._device = device\n        self._model = None\n        self._kwargs = kwargs\n        self._use_lighting = False\n\n    @property\n    def model_ability(self):\n        return self._model_spec.model_ability\n\n    def load(self):\n        use_lightning = self._kwargs.get(\"use_lightning\", \"auto\")\n        if use_lightning not in (\"auto\", True, False, None):\n            raise ValueError(\"use_lightning can only be True, False, None or auto\")\n\n        if use_lightning == \"auto\" or use_lightning is True:\n            try:\n                import mlx.core as mx\n                from lightning_whisper_mlx.transcribe import ModelHolder\n            except ImportError:\n                if use_lightning == \"auto\":\n                    use_lightning = False\n                else:\n                    error_message = \"Failed to import module 'lightning_whisper_mlx'\"\n                    installation_guide = [\n                        \"Please make sure 'lightning_whisper_mlx' is installed.\\n\",\n                    ]\n\n                    raise ImportError(\n                        f\"{error_message}\\n\\n{''.join(installation_guide)}\"\n                    )\n            else:\n                use_lightning = True\n        if not use_lightning:\n            try:\n                import mlx.core as mx  # noqa: F811\n                from mlx_whisper.transcribe import ModelHolder  # noqa: F811\n            except ImportError:\n                error_message = \"Failed to import module 'mlx_whisper'\"\n                installation_guide = [\n                    \"Please make sure 'mlx_whisper' is installed.\\n\",\n                ]\n\n                raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n            else:\n                use_lightning = False\n\n        logger.info(\n            \"Loading MLX whisper from %s, use lightning: %s\",\n            self._model_path,\n            use_lightning,\n        )\n        self._use_lighting = use_lightning\n        self._model = ModelHolder.get_model(self._model_path, mx.float16)\n\n    def transcriptions(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n    ):\n        return self._call(\n            audio,\n            language=language,\n            prompt=prompt,\n            response_format=response_format,\n            temperature=temperature,\n            timestamp_granularities=timestamp_granularities,\n            task=\"transcribe\",\n        )\n\n    def translations(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n    ):\n        if not self._model_spec.multilingual:\n            raise RuntimeError(\n                f\"Model {self._model_spec.model_name} is not suitable for translations.\"\n            )\n        return self._call(\n            audio,\n            language=language,\n            prompt=prompt,\n            response_format=response_format,\n            temperature=temperature,\n            timestamp_granularities=timestamp_granularities,\n            task=\"translate\",\n        )\n\n    def _call(\n        self,\n        audio: bytes,\n        language: Optional[str] = None,\n        prompt: Optional[str] = None,\n        response_format: str = \"json\",\n        temperature: float = 0,\n        timestamp_granularities: Optional[List[str]] = None,\n        task: str = \"transcribe\",\n    ):\n        if self._use_lighting:\n            from lightning_whisper_mlx.transcribe import transcribe_audio\n\n            transcribe = functools.partial(\n                transcribe_audio, batch_size=self._kwargs.get(\"batch_size\", 12)\n            )\n        else:\n            from mlx_whisper import transcribe  # type: ignore\n\n        with tempfile.NamedTemporaryFile(delete=True) as f:\n            f.write(audio)\n\n            kwargs = {\"task\": task}\n            if response_format == \"verbose_json\":\n                if timestamp_granularities == [\"word\"]:\n                    kwargs[\"word_timestamps\"] = True  # type: ignore\n\n            result = transcribe(\n                f.name,\n                path_or_hf_repo=self._model_path,\n                language=language,\n                temperature=temperature,\n                initial_prompt=prompt,\n                **kwargs,\n            )\n            text = result[\"text\"]\n            segments = result[\"segments\"]\n            language = result[\"language\"]\n\n            if response_format == \"json\":\n                return {\"text\": text}\n            elif response_format == \"verbose_json\":\n                if not timestamp_granularities or timestamp_granularities == [\n                    \"segment\"\n                ]:\n                    return {\n                        \"task\": task,\n                        \"language\": language,\n                        \"duration\": segments[-1][\"end\"] if segments else 0,\n                        \"text\": text,\n                        \"segments\": segments,\n                    }\n                else:\n                    assert timestamp_granularities == [\"word\"]\n\n                    def _extract_word(word: dict) -> dict:\n                        return {\n                            \"start\": word[\"start\"].item(),\n                            \"end\": word[\"end\"].item(),\n                            \"word\": word[\"word\"],\n                        }\n\n                    words = [\n                        _extract_word(w)\n                        for w in itertools.chain(*[s[\"words\"] for s in segments])\n                    ]\n                    return {\n                        \"task\": task,\n                        \"language\": language,\n                        \"duration\": words[-1][\"end\"] if words else 0,\n                        \"text\": text,\n                        \"words\": words,\n                    }\n            else:\n                raise ValueError(f\"Unsupported response format: {response_format}\")\n"
  },
  {
    "path": "xinference/model/batch.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport inspect\nimport logging\nimport types\n\nfrom xoscar.batch import _ExtensibleWrapper\n\nfrom ..constants import XINFERENCE_BATCH_INTERVAL, XINFERENCE_BATCH_SIZE\n\nlogger = logging.getLogger(__name__)\n\n\nclass BatchMixin:\n    allow_batch = True\n    batch_size = XINFERENCE_BATCH_SIZE\n    batch_interval = XINFERENCE_BATCH_INTERVAL\n\n    def __init__(self, func: _ExtensibleWrapper, **kwargs):\n        self._queue = None\n        self._func = func\n        self._func_name = func.func.__name__\n        setattr(self, self._func_name, types.MethodType(self._wrap_method(), self))\n\n        self._is_process_batch_running = False\n\n        if \"batch_size\" in kwargs:\n            self.batch_size = int(kwargs.pop(\"batch_size\") or XINFERENCE_BATCH_SIZE)\n        if \"batch_interval\" in kwargs:\n            self.batch_interval = float(\n                kwargs.pop(\"batch_interval\") or XINFERENCE_BATCH_INTERVAL\n            )\n\n    @property\n    def queue(self):\n        if self._queue is None:\n            self._queue: asyncio.Queue = asyncio.Queue()\n        return self._queue\n\n    def _ensure_process_batch_running(self):\n        if self._is_process_batch_running:\n            return\n\n        # create asyncio task to process batch\n        asyncio.create_task(self._process_batch())\n        self._is_process_batch_running = True\n\n    def _get_batch_size(self, *args, **kwargs) -> int:\n        raise NotImplementedError\n\n    async def _process_batch(self):\n        while True:\n            # Wait until at least one item is available\n            (first_args, first_kwargs), first_future = await self._queue.get()\n\n            delays = [self._func.delay(*first_args, **first_kwargs)]\n            size = self._get_batch_size(*first_args, **first_kwargs)\n            futures = [first_future]\n\n            # Try to gather more items into the same batch within a short timeout window\n            while size <= self.batch_size:\n                try:\n                    # Wait for a new request for a short time window (e.g. 3ms)\n                    # This allows batching multiple requests that arrive close in time.\n                    (args, kwargs), future = await asyncio.wait_for(\n                        self._queue.get(), timeout=self.batch_interval\n                    )\n                    size += self._get_batch_size(*args, **kwargs)\n                    delays.append(self._func.delay(*args, **kwargs))\n                    futures.append(future)\n                except asyncio.TimeoutError:\n                    # No new items arrived within the timeout window,\n                    # stop collecting and start processing the current batch.\n                    break\n\n            logger.debug(\"Calling batch %s with %d size\", self._func_name, size)\n\n            try:\n                results = self._func.batch(*delays)\n                if inspect.isawaitable(results):\n                    results = await results\n            except Exception as e:  # Handle errors for the entire batch\n                for fut in futures:\n                    fut.set_exception(e)\n            else:\n                # Ensure the number of results matches the number of input futures\n                assert len(results) == len(\n                    futures\n                ), f\"#results should be equal to #futures, got {len(results)} and {len(futures)}\"\n                # Deliver the results to the corresponding waiting callers\n                for fut, result in zip(futures, results):\n                    fut.set_result(result)\n\n    def _wrap_method(self):\n\n        async def _replaced_async_method(model, *args, **kwargs):\n            self._ensure_process_batch_running()\n            loop = asyncio.get_running_loop()\n            fut = loop.create_future()\n            await self.queue.put(((args, kwargs), fut))\n            return await fut\n\n        return _replaced_async_method\n"
  },
  {
    "path": "xinference/model/cache_manager.py",
    "content": "import logging\nimport os\nfrom typing import TYPE_CHECKING\n\nif TYPE_CHECKING:\n    from .core import CacheableModelSpec\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass CacheManager:\n    is_initialized: bool = False\n\n    def __init__(self, model_family: \"CacheableModelSpec\"):\n        from ..constants import XINFERENCE_CACHE_DIR, XINFERENCE_MODEL_DIR\n\n        self._model_family = model_family\n        self._v2_cache_dir_prefix = os.path.join(XINFERENCE_CACHE_DIR, \"v2\")\n        self._v2_custom_dir_prefix = os.path.join(XINFERENCE_MODEL_DIR, \"v2\")\n        if not CacheManager.is_initialized:\n            os.makedirs(self._v2_cache_dir_prefix, exist_ok=True)\n            os.makedirs(self._v2_custom_dir_prefix, exist_ok=True)\n            CacheManager.is_initialized = True\n        self._cache_dir = os.path.join(\n            self._v2_cache_dir_prefix, self._model_family.model_name.replace(\".\", \"_\")\n        )\n\n    def get_cache_dir(self):\n        return self._cache_dir\n\n    def get_cache_status(self):\n        cache_dir = self.get_cache_dir()\n        return os.path.exists(cache_dir)\n\n    def _cache_from_uri(self, model_spec: \"CacheableModelSpec\") -> str:\n        from .utils import parse_uri\n\n        cache_dir = self.get_cache_dir()\n        if os.path.exists(cache_dir):\n            logger.info(\"cache %s exists\", cache_dir)\n            return cache_dir\n\n        assert model_spec.model_uri is not None\n        src_scheme, src_root = parse_uri(model_spec.model_uri)\n        if src_root.endswith(\"/\"):\n            # remove trailing path separator.\n            src_root = src_root[:-1]\n\n        if src_scheme == \"file\":\n            if not os.path.isabs(src_root):\n                raise ValueError(\n                    f\"Model URI cannot be a relative path: {model_spec.model_uri}\"\n                )\n            os.symlink(src_root, cache_dir, target_is_directory=True)\n            return cache_dir\n        else:\n            raise ValueError(f\"Unsupported URL scheme: {src_scheme}\")\n\n    def _cache(self) -> str:\n        from .utils import IS_NEW_HUGGINGFACE_HUB, create_symlink, retry_download\n\n        if (\n            hasattr(self._model_family, \"model_uri\")\n            and getattr(self._model_family, \"model_uri\", None) is not None\n        ):\n            logger.info(f\"Model caching from URI: {self._model_family.model_uri}\")\n            return self._cache_from_uri(model_spec=self._model_family)\n\n        cache_dir = self.get_cache_dir()\n        if self.get_cache_status():\n            return cache_dir\n\n        from_modelscope: bool = self._model_family.model_hub == \"modelscope\"\n        cache_config = (\n            self._model_family.cache_config.copy()\n            if self._model_family.cache_config\n            else {}\n        )\n        if from_modelscope:\n            from modelscope.hub.snapshot_download import (\n                snapshot_download as ms_download,\n            )\n\n            if \"ignore_file_pattern\" not in cache_config:\n                cache_config[\"ignore_file_pattern\"] = [\".gitkeep\"]\n            elif isinstance(cache_config[\"ignore_file_pattern\"], list):\n                cache_config[\"ignore_file_pattern\"].append(\".gitkeep\")\n\n            download_dir = retry_download(\n                ms_download,\n                self._model_family.model_name,\n                None,\n                self._model_family.model_id,\n                revision=self._model_family.model_revision,\n                **cache_config,\n            )\n            create_symlink(download_dir, cache_dir)\n        else:\n            from huggingface_hub import snapshot_download as hf_download\n\n            use_symlinks = cache_config\n            if not IS_NEW_HUGGINGFACE_HUB:\n                use_symlinks = {\"local_dir_use_symlinks\": True, \"local_dir\": cache_dir}\n            download_dir = retry_download(\n                hf_download,\n                self._model_family.model_name,\n                None,\n                self._model_family.model_id,\n                revision=self._model_family.model_revision,\n                **use_symlinks,\n            )\n            if IS_NEW_HUGGINGFACE_HUB:\n                create_symlink(download_dir, cache_dir)\n        return cache_dir\n\n    def cache(self) -> str:\n        return self._cache()\n\n    def register_custom_model(self, model_type: str):\n        persist_path = os.path.join(\n            self._v2_custom_dir_prefix,\n            model_type,\n            f\"{self._model_family.model_name}.json\",\n        )\n        os.makedirs(os.path.dirname(persist_path), exist_ok=True)\n        with open(persist_path, mode=\"w\") as fd:\n            fd.write(self._model_family.json())\n\n    def unregister_custom_model(self, model_type: str):\n        persist_path = os.path.join(\n            self._v2_custom_dir_prefix,\n            model_type,\n            f\"{self._model_family.model_name}.json\",\n        )\n        if os.path.exists(persist_path):\n            os.remove(persist_path)\n\n        cache_dir = self.get_cache_dir()\n        if self.get_cache_status():\n            logger.warning(\n                f\"Remove the cache of user-defined model {self._model_family.model_name}. \"\n                f\"Cache directory: {cache_dir}\"\n            )\n            if os.path.islink(cache_dir):\n                os.remove(cache_dir)\n            else:\n                logger.warning(\n                    f\"Cache directory is not a soft link, please remove it manually.\"\n                )\n"
  },
  {
    "path": "xinference/model/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import Any, List, Literal, Optional, Union\n\nfrom .._compat import BaseModel\nfrom ..types import PeftModelConfig\n\n\ndef create_model_instance(\n    model_uid: str,\n    model_type: str,\n    model_name: str,\n    model_engine: Optional[str],\n    model_format: Optional[str] = None,\n    model_size_in_billions: Optional[Union[int, str]] = None,\n    quantization: Optional[str] = None,\n    peft_model_config: Optional[PeftModelConfig] = None,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n    model_path: Optional[str] = None,\n    **kwargs,\n) -> Any:\n    from .audio.core import create_audio_model_instance\n    from .embedding.core import create_embedding_model_instance\n    from .flexible.core import create_flexible_model_instance\n    from .image.core import create_image_model_instance\n    from .llm.core import create_llm_model_instance\n    from .rerank.core import create_rerank_model_instance\n    from .video.core import create_video_model_instance\n\n    # enable_thinking is only meaningful for LLMs; drop it for other model types.\n    if model_type != \"LLM\":\n        kwargs.pop(\"enable_thinking\", None)\n\n    if model_type == \"LLM\":\n        return create_llm_model_instance(\n            model_uid,\n            model_name,\n            model_engine,\n            model_format,\n            model_size_in_billions,\n            quantization,\n            peft_model_config,\n            download_hub,\n            model_path,\n            **kwargs,\n        )\n    elif model_type == \"embedding\":\n        # allow trust_remote_code for engines that require it (e.g. vLLM)\n        if model_engine and model_engine.lower() != \"vllm\":\n            kwargs.pop(\"trust_remote_code\", None)\n        return create_embedding_model_instance(\n            model_uid,\n            model_name,\n            model_engine,\n            model_format,\n            quantization,\n            download_hub,\n            model_path,\n            **kwargs,\n        )\n    elif model_type == \"image\":\n        kwargs.pop(\"trust_remote_code\", None)\n        return create_image_model_instance(\n            model_uid,\n            model_name,\n            peft_model_config,\n            download_hub,\n            model_path,\n            model_engine,\n            model_format,\n            quantization,\n            **kwargs,\n        )\n    elif model_type == \"rerank\":\n        kwargs.pop(\"trust_remote_code\", None)\n        return create_rerank_model_instance(\n            model_uid,\n            model_name,\n            model_engine,\n            model_format,\n            quantization,\n            download_hub,\n            model_path,\n            **kwargs,\n        )\n    elif model_type == \"audio\":\n        kwargs.pop(\"trust_remote_code\", None)\n        return create_audio_model_instance(\n            model_uid,\n            model_name,\n            download_hub,\n            model_path,\n            **kwargs,\n        )\n    elif model_type == \"video\":\n        kwargs.pop(\"trust_remote_code\", None)\n        return create_video_model_instance(\n            model_uid,\n            model_name,\n            download_hub,\n            model_path,\n            **kwargs,\n        )\n    elif model_type == \"flexible\":\n        kwargs.pop(\"trust_remote_code\", None)\n        return create_flexible_model_instance(\n            model_uid, model_name, model_path, **kwargs\n        )\n    else:\n        raise ValueError(f\"Unsupported model type: {model_type}.\")\n\n\nclass CacheableModelSpec(BaseModel):\n    model_name: str\n    model_id: str\n    model_revision: Optional[str]\n    model_hub: str = \"huggingface\"\n    cache_config: Optional[dict]\n\n\nclass VirtualEnvSettings(BaseModel):\n    packages: List[str]\n    inherit_pip_config: bool = True\n    index_url: Optional[str] = None\n    extra_index_url: Optional[Union[str, List[str]]] = None\n    find_links: Optional[Union[str, List[str]]] = None\n    trusted_host: Optional[Union[str, List[str]]] = None\n    index_strategy: Optional[str] = None\n    no_build_isolation: Optional[bool] = None\n"
  },
  {
    "path": "xinference/model/custom.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport codecs\nimport json\nimport logging\nimport os\nimport threading\nimport warnings\nfrom typing import TYPE_CHECKING, Dict, List, Type\n\nif TYPE_CHECKING:\n    from .core import CacheableModelSpec\n\nlogger = logging.getLogger(__name__)\n\n\nclass ModelRegistry:\n    model_type = \"unknown\"\n\n    def __init__(self) -> None:\n        self.lock = threading.Lock()\n        self.models: List[\"CacheableModelSpec\"] = []\n        self.builtin_models: List[str] = []\n\n    def find_model(self, model_name: str):\n        model_spec = None\n        for f in self.models:\n            if f.model_name == model_name:\n                model_spec = f\n                break\n        return model_spec\n\n    def get_custom_models(self):\n        with self.lock:\n            return self.models.copy()\n\n    def check_model_uri(self, model_spec: \"CacheableModelSpec\"):\n        from .utils import is_valid_model_uri\n\n        model_uri = model_spec.model_uri\n        if model_uri and not is_valid_model_uri(model_uri):\n            raise ValueError(f\"Invalid model URI {model_uri}.\")\n\n    def add_ud_model(self, model_spec):\n        self.models.append(model_spec)\n\n    def register(self, model_spec: \"CacheableModelSpec\", persist: bool):\n        from .cache_manager import CacheManager\n        from .utils import is_valid_model_name\n\n        if not is_valid_model_name(model_spec.model_name):\n            raise ValueError(f\"Invalid model name {model_spec.model_name}.\")\n\n        self.check_model_uri(model_spec)\n\n        with self.lock:\n            for model_name in self.builtin_models + [\n                spec.model_name for spec in self.models\n            ]:\n                if model_spec.model_name == model_name:\n                    raise ValueError(\n                        f\"Model name conflicts with existing model {model_spec.model_name}\"\n                    )\n\n            self.add_ud_model(model_spec)\n\n        if persist:\n            cache_manager = CacheManager(model_spec)\n            cache_manager.register_custom_model(self.model_type)\n\n    def remove_ud_model(self, model_spec):\n        self.models.remove(model_spec)\n\n    def remove_ud_model_files(self, model_spec):\n        from .cache_manager import CacheManager\n\n        cache_manager = CacheManager(model_spec)\n        cache_manager.unregister_custom_model(self.model_type)\n\n    def unregister(\n        self, model_name: str, raise_error: bool = True, remove_file: bool = True\n    ):\n        with self.lock:\n            model_spec = self.find_model(model_name)\n            if model_spec:\n                self.remove_ud_model(model_spec)\n                if remove_file:\n                    self.remove_ud_model_files(model_spec)\n            else:\n                if raise_error:\n                    raise ValueError(f\"Model {model_name} not found\")\n                else:\n                    logger.warning(\n                        f\"Custom {self.model_type} model {model_name} not found\"\n                    )\n\n\nclass RegistryManager:\n    _instances: Dict[str, ModelRegistry] = {}\n\n    @classmethod\n    def get_registry(cls, model_type: str) -> ModelRegistry:\n        from .audio.custom import AudioModelRegistry\n        from .embedding.custom import EmbeddingModelRegistry\n        from .flexible.custom import FlexibleModelRegistry\n        from .image.custom import ImageModelRegistry\n        from .llm.custom import LLMModelRegistry\n        from .rerank.custom import RerankModelRegistry\n\n        if model_type not in cls._instances:\n            if model_type == \"rerank\":\n                cls._instances[model_type] = RerankModelRegistry()\n            elif model_type == \"image\":\n                cls._instances[model_type] = ImageModelRegistry()\n            elif model_type == \"audio\":\n                cls._instances[model_type] = AudioModelRegistry()\n            elif model_type == \"llm\":\n                cls._instances[model_type] = LLMModelRegistry()\n            elif model_type == \"flexible\":\n                cls._instances[model_type] = FlexibleModelRegistry()\n            elif model_type == \"embedding\":\n                cls._instances[model_type] = EmbeddingModelRegistry()\n            else:\n                raise ValueError(f\"Unknown model type: {model_type}\")\n        return cls._instances[model_type]\n\n\ndef migrate_from_v1_to_v2(model_type: str, model_spec_cls: Type):\n    from ..constants import XINFERENCE_MODEL_DIR\n\n    v1_user_defined_model_dir = os.path.join(XINFERENCE_MODEL_DIR, model_type)\n    v2_user_defined_model_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", model_type)\n    if os.path.isdir(v1_user_defined_model_dir):\n        for f in os.listdir(v1_user_defined_model_dir):\n            if os.path.exists(os.path.join(v2_user_defined_model_dir, f)):\n                # skip if v2 has already\n                continue\n\n            try:\n                with codecs.open(\n                    os.path.join(v1_user_defined_model_dir, f), encoding=\"utf-8\"\n                ) as fd:\n                    v1_model_json = json.load(fd)\n\n                    v1_model_json[\"version\"] = 2\n                    for spec in v1_model_json.get(\"model_specs\", []):\n                        if \"quantizations\" in spec:\n                            # change quantizations to quantization\n                            spec[\"quantization\"] = spec[\"quantizations\"][0]\n\n                    user_defined_model_family = model_spec_cls(**v1_model_json)\n                    registry = RegistryManager.get_registry(model_type)\n                    # register custom model file to v2\n                    registry.register(user_defined_model_family, persist=True)\n                    # unregister since it will be registered by v2\n                    registry.unregister(\n                        user_defined_model_family.model_name, remove_file=False\n                    )\n            except Exception as e:\n                warnings.warn(\n                    f\"Fail to migrate {v1_user_defined_model_dir}/{f}, error: {e}\"\n                )\n"
  },
  {
    "path": "xinference/model/embedding/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport codecs\nimport json\nimport os\nimport warnings\nfrom typing import Any, Dict, List\n\nfrom ..utils import flatten_quantizations\nfrom .core import (\n    EMBEDDING_MODEL_DESCRIPTIONS,\n    EmbeddingModelFamilyV2,\n    generate_embedding_description,\n    get_embedding_model_descriptions,\n)\nfrom .custom import (\n    CustomEmbeddingModelFamilyV2,\n    get_user_defined_embeddings,\n    register_embedding,\n    unregister_embedding,\n)\nfrom .embed_family import (\n    BUILTIN_EMBEDDING_MODELS,\n    EMBEDDING_ENGINES,\n    FLAG_EMBEDDER_CLASSES,\n    LLAMA_CPP_CLASSES,\n    SENTENCE_TRANSFORMER_CLASSES,\n    SUPPORTED_ENGINES,\n    VLLM_CLASSES,\n)\n\n\ndef register_builtin_model():\n    \"\"\"Register built-in embedding models.\"\"\"\n    _install()\n\n\ndef register_custom_model():\n    from ...constants import XINFERENCE_MODEL_DIR\n    from ..custom import migrate_from_v1_to_v2\n\n    # migrate from v1 to v2 first\n    migrate_from_v1_to_v2(\"embedding\", CustomEmbeddingModelFamilyV2)\n\n    user_defined_embedding_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"embedding\")\n    if os.path.isdir(user_defined_embedding_dir):\n        for f in os.listdir(user_defined_embedding_dir):\n            try:\n                with codecs.open(\n                    os.path.join(user_defined_embedding_dir, f), encoding=\"utf-8\"\n                ) as fd:\n                    user_defined_llm_family = CustomEmbeddingModelFamilyV2.parse_obj(\n                        json.load(fd)\n                    )\n                    register_embedding(user_defined_llm_family, persist=False)\n            except Exception as e:\n                warnings.warn(f\"{user_defined_embedding_dir}/{f} has error, {e}\")\n\n\ndef check_format_with_engine(model_format, engine):\n    if model_format in [\"ggufv2\"] and engine not in [\"llama.cpp\"]:\n        return False\n    if model_format not in [\"ggufv2\"] and engine == \"llama.cpp\":\n        return False\n    return True\n\n\ndef generate_engine_config_by_model_name(model_family: \"EmbeddingModelFamilyV2\"):\n    model_name = model_family.model_name\n    engines: Dict[str, List[Dict[str, Any]]] = EMBEDDING_ENGINES.get(\n        model_name, {}\n    )  # structure for engine query\n    for spec in [x for x in model_family.model_specs if x.model_hub == \"huggingface\"]:\n        model_format = spec.model_format\n        quantization = spec.quantization\n        for engine in SUPPORTED_ENGINES:\n            if not check_format_with_engine(model_format, engine):\n                continue\n            CLASSES = SUPPORTED_ENGINES[engine]\n            for cls in CLASSES:\n                # Every engine needs to implement match method\n                if cls.match(model_family, spec, quantization):\n                    # we only match the first class for an engine\n                    if engine not in engines:\n                        engines[engine] = [\n                            {\n                                \"model_name\": model_name,\n                                \"model_format\": model_format,\n                                \"quantization\": quantization,\n                                \"embedding_class\": cls,\n                            }\n                        ]\n                    else:\n                        engines[engine].append(\n                            {\n                                \"model_name\": model_name,\n                                \"model_format\": model_format,\n                                \"quantization\": quantization,\n                                \"embedding_class\": cls,\n                            }\n                        )\n                    break\n    EMBEDDING_ENGINES[model_name] = engines\n\n\ndef has_downloaded_models():\n    \"\"\"Check if downloaded JSON configurations exist.\"\"\"\n    from ...constants import XINFERENCE_MODEL_DIR\n\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"embedding\")\n    json_file_path = os.path.join(builtin_dir, \"embedding_models.json\")\n    return os.path.exists(json_file_path)\n\n\ndef load_downloaded_models():\n    \"\"\"Load downloaded JSON configurations from the builtin directory.\"\"\"\n    from ...constants import XINFERENCE_MODEL_DIR\n\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"embedding\")\n    json_file_path = os.path.join(builtin_dir, \"embedding_models.json\")\n\n    try:\n        load_model_family_from_json(json_file_path, BUILTIN_EMBEDDING_MODELS)\n    except Exception as e:\n        warnings.warn(\n            f\"Failed to load downloaded embedding models from {json_file_path}: {e}\"\n        )\n        # Fall back to built-in models if download fails\n        load_model_family_from_json(\"model_spec.json\", BUILTIN_EMBEDDING_MODELS)\n\n\ndef load_model_family_from_json(json_filename, target_families):\n    # Handle both relative (module directory) and absolute paths\n    if os.path.isabs(json_filename):\n        json_path = json_filename\n    else:\n        json_path = os.path.join(os.path.dirname(__file__), json_filename)\n\n    for json_obj in json.load(codecs.open(json_path, \"r\", encoding=\"utf-8\")):\n        flattened = []\n        for spec in json_obj[\"model_specs\"]:\n            flattened.extend(flatten_quantizations(spec))\n        json_obj[\"model_specs\"] = flattened\n        if json_obj[\"model_name\"] not in target_families:\n            target_families[json_obj[\"model_name\"]] = [\n                EmbeddingModelFamilyV2(**json_obj)\n            ]\n        else:\n            target_families[json_obj[\"model_name\"]].append(\n                EmbeddingModelFamilyV2(**json_obj)\n            )\n\n    del json_path\n\n\ndef load_downloaded_models_to_dict(target_dict):\n    \"\"\"Load downloaded JSON configurations into the specified dictionary.\"\"\"\n    from ...constants import XINFERENCE_MODEL_DIR\n\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"embedding\")\n    json_file_path = os.path.join(builtin_dir, \"embedding_models.json\")\n\n    try:\n        load_model_family_from_json(json_file_path, target_dict)\n    except Exception as e:\n        warnings.warn(\n            f\"Failed to load downloaded embedding models from {json_file_path}: {e}\"\n        )\n\n\n# will be called in xinference/model/__init__.py\ndef _install():\n    # Install models with intelligent merging based on timestamps\n    from ..utils import install_models_with_merge\n\n    install_models_with_merge(\n        BUILTIN_EMBEDDING_MODELS,\n        \"model_spec.json\",\n        \"embedding\",\n        \"embedding_models.json\",\n        has_downloaded_models,\n        load_model_family_from_json,\n    )\n\n    for model_name, model_spec_list in BUILTIN_EMBEDDING_MODELS.items():\n        # model_spec_list is a list containing one or more model specifications\n        for model_spec in model_spec_list:\n            if model_spec.model_name not in EMBEDDING_MODEL_DESCRIPTIONS:\n                EMBEDDING_MODEL_DESCRIPTIONS.update(\n                    generate_embedding_description(model_spec)\n                )\n\n    from .flag.core import FlagEmbeddingModel\n    from .llama_cpp.core import XllamaCppEmbeddingModel\n    from .sentence_transformers.core import SentenceTransformerEmbeddingModel\n    from .vllm.core import VLLMEmbeddingModel\n\n    SENTENCE_TRANSFORMER_CLASSES.extend([SentenceTransformerEmbeddingModel])\n    FLAG_EMBEDDER_CLASSES.extend([FlagEmbeddingModel])\n    VLLM_CLASSES.extend([VLLMEmbeddingModel])\n    LLAMA_CPP_CLASSES.extend([XllamaCppEmbeddingModel])\n\n    SUPPORTED_ENGINES[\"sentence_transformers\"] = SENTENCE_TRANSFORMER_CLASSES\n    SUPPORTED_ENGINES[\"flag\"] = FLAG_EMBEDDER_CLASSES\n    SUPPORTED_ENGINES[\"vllm\"] = VLLM_CLASSES\n    SUPPORTED_ENGINES[\"llama.cpp\"] = LLAMA_CPP_CLASSES\n\n    # Init embedding engine\n    for model_spec_list in BUILTIN_EMBEDDING_MODELS.values():\n        for model_spec in model_spec_list:\n            generate_engine_config_by_model_name(model_spec)\n\n    register_custom_model()\n\n    # register model description\n    for ud_embedding in get_user_defined_embeddings():\n        EMBEDDING_MODEL_DESCRIPTIONS.update(\n            generate_embedding_description(ud_embedding)\n        )\n"
  },
  {
    "path": "xinference/model/embedding/cache_manager.py",
    "content": "import os\nfrom typing import TYPE_CHECKING\n\nfrom ..cache_manager import CacheManager\n\nif TYPE_CHECKING:\n    from .core import EmbeddingModelFamilyV2\n\n\nclass EmbeddingCacheManager(CacheManager):\n    def __init__(self, model_family: \"EmbeddingModelFamilyV2\"):\n        from ..llm.cache_manager import LLMCacheManager\n\n        super().__init__(model_family)\n        # Composition design mode for avoiding duplicate code\n        self.cache_helper = LLMCacheManager(model_family)\n\n        spec = self._model_family.model_specs[0]\n        model_dir_name = (\n            f\"{self._model_family.model_name}-{spec.model_format}-{spec.quantization}\"\n        )\n        self._cache_dir = os.path.join(self._v2_cache_dir_prefix, model_dir_name)\n        self.cache_helper._cache_dir = self._cache_dir\n\n    def cache(self) -> str:\n        spec = self._model_family.model_specs[0]\n        if spec.model_uri is not None:\n            return self.cache_helper.cache_uri()\n        else:\n            if spec.model_hub == \"huggingface\":\n                return self.cache_helper.cache_from_huggingface()\n            elif spec.model_hub == \"modelscope\":\n                return self.cache_helper.cache_from_modelscope()\n            else:\n                raise ValueError(f\"Unknown model hub: {spec.model_hub}\")\n"
  },
  {
    "path": "xinference/model/embedding/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport abc\nimport gc\nimport inspect\nimport logging\nimport os\nfrom abc import abstractmethod\nfrom collections import defaultdict\nfrom typing import Annotated, Dict, List, Literal, Optional, Tuple, Union\n\nfrom xoscar import extensible\n\nfrom ..._compat import ROOT_KEY, BaseModel, ErrorWrapper, Field, ValidationError\nfrom ...device_utils import empty_cache\nfrom ...types import Embedding\nfrom ...utils import make_hashable\nfrom ..core import VirtualEnvSettings\nfrom ..utils import ModelInstanceInfoMixin\nfrom .embed_family import match_embedding\n\nlogger = logging.getLogger(__name__)\n\n# Used for check whether the model is cached.\n# Init when registering all the builtin models.\nEMBEDDING_MODEL_DESCRIPTIONS: Dict[str, List[Dict]] = defaultdict(list)\nEMBEDDING_EMPTY_CACHE_COUNT = int(\n    os.getenv(\"XINFERENCE_EMBEDDING_EMPTY_CACHE_COUNT\", \"10\")\n)\nEMBEDDING_EMPTY_CACHE_TOKENS = int(\n    os.getenv(\"XINFERENCE_EMBEDDING_EMPTY_CACHE_TOKENS\", \"8192\")\n)\nassert EMBEDDING_EMPTY_CACHE_COUNT > 0\nassert EMBEDDING_EMPTY_CACHE_TOKENS > 0\n\n\ndef get_embedding_model_descriptions():\n    import copy\n\n    return copy.deepcopy(EMBEDDING_MODEL_DESCRIPTIONS)\n\n\nclass TransformersEmbeddingSpecV1(BaseModel):\n    model_format: Literal[\"pytorch\"]\n    model_hub: str = \"huggingface\"\n    model_id: Optional[str]\n    model_uri: Optional[str]\n    model_revision: Optional[str]\n    quantization: str\n\n\nclass LlamaCppEmbeddingSpecV1(BaseModel):\n    model_format: Literal[\"ggufv2\"]\n    model_hub: str = \"huggingface\"\n    model_id: Optional[str]\n    model_uri: Optional[str]\n    model_revision: Optional[str]\n    quantization: str\n    model_file_name_template: str\n    model_file_name_split_template: Optional[str]\n    quantization_parts: Optional[Dict[str, List[str]]]\n\n\nEmbeddingSpecV1 = Annotated[\n    Union[TransformersEmbeddingSpecV1, LlamaCppEmbeddingSpecV1],\n    Field(discriminator=\"model_format\"),\n]\n\n\n# this class define the basic info of embedding model\nclass EmbeddingModelFamilyV2(BaseModel, ModelInstanceInfoMixin):\n    version: Literal[2]\n    model_name: str\n    dimensions: int\n    max_tokens: int\n    language: List[str]\n    model_specs: List[\"EmbeddingSpecV1\"]\n    cache_config: Optional[dict]\n    virtualenv: Optional[VirtualEnvSettings]\n\n    class Config:\n        extra = \"allow\"\n\n    def to_description(self):\n        spec = self.model_specs[0]\n        return {\n            \"model_type\": \"embedding\",\n            \"address\": getattr(self, \"address\", None),\n            \"accelerators\": getattr(self, \"accelerators\", None),\n            \"model_name\": self.model_name,\n            \"dimensions\": self.dimensions,\n            \"max_tokens\": self.max_tokens,\n            \"language\": self.language,\n            \"model_hub\": spec.model_hub,\n            \"model_revision\": spec.model_revision,\n            \"quantization\": spec.quantization,\n        }\n\n    def to_version_info(self):\n        from .cache_manager import EmbeddingCacheManager\n\n        cache_manager = EmbeddingCacheManager(self)\n\n        return {\n            \"model_version\": get_model_version(self),\n            \"model_file_location\": cache_manager.get_cache_dir(),\n            \"cache_status\": cache_manager.get_cache_status(),\n            \"dimensions\": self.dimensions,\n            \"max_tokens\": self.max_tokens,\n        }\n\n\ndef get_model_version(embedding_model: EmbeddingModelFamilyV2) -> str:\n    spec = embedding_model.model_specs[0]\n    return f\"{embedding_model.model_name}--{embedding_model.max_tokens}--{embedding_model.dimensions}--{spec.model_format}--{spec.quantization}\"\n\n\ndef generate_embedding_description(\n    model_family: EmbeddingModelFamilyV2,\n) -> Dict[str, List[Dict]]:\n    res = defaultdict(list)\n    specs = [x for x in model_family.model_specs if x.model_hub == \"huggingface\"]\n    for spec in specs:\n        family = model_family.copy()\n        family.model_specs = [spec]\n        res[model_family.model_name].append(family.to_version_info())\n    return res\n\n\nclass EmbeddingModel(abc.ABC):\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_family: EmbeddingModelFamilyV2,\n        quantization: Optional[str] = None,\n        device: Optional[str] = None,\n        **kwargs,\n    ):\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._device = device\n        self._model = None\n        self._tokenizer = None\n        self._counter = 0\n        self.model_family = model_family\n        self._model_spec = model_family.model_specs[0]\n        self._quantization = quantization\n        self._model_name = self.model_family.model_name\n        self._kwargs = kwargs\n\n    @classmethod\n    @abstractmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        pass\n\n    @classmethod\n    @abstractmethod\n    def match_json(\n        cls,\n        model_family: EmbeddingModelFamilyV2,\n        model_spec: EmbeddingSpecV1,\n        quantization: str,\n    ) -> Union[bool, Tuple[bool, str]]:\n        pass\n\n    @classmethod\n    def match(\n        cls,\n        model_family: EmbeddingModelFamilyV2,\n        model_spec: EmbeddingSpecV1,\n        quantization: str,\n    ):\n        \"\"\"\n        Return if the model_spec can be matched.\n        \"\"\"\n        lib_result = cls.check_lib()\n        if lib_result != True:\n            return False\n        match_result = cls.match_json(model_family, model_spec, quantization)\n        return match_result == True\n\n    @abstractmethod\n    def load(self):\n        \"\"\"\n        Load embedding model\n        \"\"\"\n\n    def _fix_langchain_openai_inputs(\n        self, sentences: Union[str, List[str], Dict[str, str], List[Dict[str, str]]]\n    ):\n        # Check if sentences is a two-dimensional list of integers\n        if (\n            isinstance(sentences, list)\n            and len(sentences) > 0\n            and isinstance(sentences[0], list)\n            and len(sentences[0]) > 0\n            and isinstance(sentences[0][0], int)\n        ):\n            # List[List[int]] stands for encoded inputs\n            import tiktoken\n\n            enc = tiktoken.get_encoding(\"cl100k_base\")\n            lines_decoded = []\n\n            for line in sentences:\n                try:\n                    # Decode each token into bytes, then join them into a complete string\n                    output = b\"\".join(\n                        enc.decode_single_token_bytes(token) for token in line\n                    )\n                    # Convert the byte sequence into a UTF-8 encoded string\n                    decoded_line = output.decode(\"utf-8\")\n                    lines_decoded.append(decoded_line)\n                except (ValueError, TypeError, UnicodeDecodeError) as e:\n                    raise ValidationError([ErrorWrapper(e, loc=ROOT_KEY)], self)\n\n            # Update sentences to be the list of decoded strings\n            if len(lines_decoded) == 1:\n                sentences = lines_decoded[0]\n            else:\n                sentences = lines_decoded\n        return sentences\n\n    @staticmethod\n    # copied from sentence-transformers\n    def _text_length(text):\n        if isinstance(text, dict):  # {key: value} case\n            return len(next(iter(text.values())))\n        elif not hasattr(text, \"__len__\"):  # Object has no len() method\n            return 1\n        elif len(text) == 0 or isinstance(text[0], int):  # Empty string or list of ints\n            return len(text)\n        else:\n            return sum([len(t) for t in text])  # Sum of length of individual strings\n\n    @abstractmethod\n    def _create_embedding(\n        self,\n        sentences: Union[str, List[str]],\n        **kwargs,\n    ):\n        \"\"\"\n        Creating embeddings from sentences.\n\n        Parameters\n        ----------\n        sentences: Union[str, List[str]]\n            Input text to embed, encoded as a string or array of tokens.\n            To embed multiple inputs in a single request, pass an array of strings or array of token arrays.\n\n        Returns\n        -------\n        Embedding\n           The resulted Embedding vector that can be easily consumed by machine learning models and algorithms.\n        \"\"\"\n\n    @extensible\n    def create_embedding(\n        self,\n        sentences: Union[str, List[str]],\n        **kwargs,\n    ):\n        return self._create_embedding(sentences, **kwargs)\n\n    @create_embedding.batch  # type: ignore\n    def create_embedding(self, args_list, kwargs_list):\n        grouped = defaultdict(\n            lambda: {\"sentences\": [], \"offsets\": [], \"kwargs\": None, \"indices\": []}\n        )\n\n        # 1. Group by kwargs hash\n        for i, (args, kwargs) in enumerate(zip(args_list, kwargs_list)):\n            sentences, extra_kwargs = self._extract_sentences_kwargs(args, kwargs)\n            if isinstance(sentences, str):\n                sentences = [sentences]\n\n            key = make_hashable(extra_kwargs)\n            group = grouped[key]\n            group[\"kwargs\"] = extra_kwargs\n\n            current_offset = len(group[\"sentences\"])\n            group[\"offsets\"].append((current_offset, len(sentences)))\n            group[\"sentences\"].extend(sentences)\n            group[\"indices\"].append(i)  # remember original position\n\n        results_with_index = []\n\n        # 2. Process each group separately\n        for key, group in grouped.items():\n            sentences = group[\"sentences\"]\n            kwargs = group[\"kwargs\"]\n            offsets = group[\"offsets\"]\n            indices = group[\"indices\"]\n\n            embedding_list = self._create_embedding(sentences, **kwargs)\n            usage = embedding_list.get(\"usage\", {})\n            model_uid = kwargs.get(\"model_uid\", \"unknown\")\n\n            # 3. Split and attach original index\n            for (offset, n), idx in zip(offsets, indices):\n                data = embedding_list[\"data\"][offset : offset + n]\n                result = Embedding(\n                    object=\"list\",\n                    model=model_uid,\n                    model_replica=self._model_uid,\n                    data=data,\n                    usage=usage,\n                )\n                results_with_index.append((idx, result))\n\n        # 4. Sort by original call order\n        results_with_index.sort(key=lambda x: x[0])\n        results = [r for _, r in results_with_index]\n        return results\n\n    def _extract_sentences_kwargs(self, args, kwargs):\n        \"\"\"\n        Extract the 'sentences' argument and remaining kwargs from (*args, **kwargs)\n        for a given function.\n\n        This uses inspect.signature(func).bind_partial() to automatically match\n        both positional and keyword arguments, while handling bound methods\n        (functions with 'self' as the first parameter).\n\n        Args:\n            func: The target function whose parameters define how to bind args/kwargs.\n            args: The positional arguments passed to the function.\n            kwargs: The keyword arguments passed to the function.\n\n        Returns:\n            A tuple (sentences, extra_kwargs), where:\n              - sentences: The extracted 'sentences' argument (never None).\n              - extra_kwargs: Remaining keyword arguments excluding 'sentences'.\n\n        Raises:\n            KeyError: If 'sentences' argument is not found.\n            TypeError: If args/kwargs do not match the function signature.\n        \"\"\"\n        sig = inspect.signature(self._create_embedding)\n        bound = sig.bind_partial(*args, **kwargs)\n        bound.apply_defaults()\n\n        if \"sentences\" not in bound.arguments:\n            raise KeyError(\"'sentences' argument not found in args/kwargs\")\n\n        sentences = bound.arguments[\"sentences\"]\n        extra_kwargs = {k: v for k, v in kwargs.items() if k != \"sentences\"}\n        return sentences, extra_kwargs\n\n    def _get_batch_size(self, *args, **kwargs) -> int:\n        sentences = self._extract_sentences_kwargs(args, kwargs)[0]\n        if isinstance(sentences, list):\n            return len(sentences)\n        else:\n            return 1\n\n    def convert_ids_to_tokens(\n        self,\n        batch_token_ids: Union[List[Union[int, str]], List[List[Union[int, str]]]],\n        **kwargs,\n    ) -> Union[List[str]]:\n        \"\"\"\n        Convert token ids to tokens\n        \"\"\"\n        assert self._model is not None\n        if isinstance(batch_token_ids, (int, str)):\n            return self._tokenizer.decode([int(str(batch_token_ids))])[0]\n\n        batch_decoded_texts: List[str] = []\n\n        # check if it's a nested list\n        if (\n            isinstance(batch_token_ids, list)\n            and batch_token_ids\n            and isinstance(batch_token_ids[0], list)\n        ):\n            for token_ids in batch_token_ids:\n                token_ids = [int(token_id) for token_id in token_ids]  # type: ignore\n                batch_decoded_texts.append(\n                    self._tokenizer.convert_ids_to_tokens(token_ids)\n                )\n        else:\n            batch_token_ids = [int(token_id) for token_id in batch_token_ids]  # type: ignore\n            batch_decoded_texts = self._tokenizer.convert_ids_to_tokens(batch_token_ids)\n        return batch_decoded_texts\n\n    def _clean_cache_if_needed(self, all_token_nums: int):\n        # clean cache if possible\n        self._counter += 1\n        if (\n            self._counter % EMBEDDING_EMPTY_CACHE_COUNT == 0\n            or all_token_nums >= EMBEDDING_EMPTY_CACHE_TOKENS\n        ):\n            logger.debug(\n                \"Empty embedding cache, calling count %s, all_token_nums %s\",\n                self._counter,\n                all_token_nums,\n            )\n            gc.collect()\n            empty_cache()\n\n\ndef create_embedding_model_instance(\n    model_uid: str,\n    model_name: str,\n    model_engine: Optional[str],\n    model_format: Optional[str] = None,\n    quantization: Optional[str] = None,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n    model_path: Optional[str] = None,\n    **kwargs,\n) -> EmbeddingModel:\n    from .cache_manager import EmbeddingCacheManager\n\n    enable_virtual_env = kwargs.pop(\"enable_virtual_env\", None)\n    model_family = match_embedding(model_name, model_format, quantization, download_hub)\n    if model_path is None:\n        cache_manager = EmbeddingCacheManager(model_family)\n        model_path = cache_manager.cache()\n\n    if model_engine is None:\n        # unlike LLM and for compatibility,\n        # we use sentence_transformers as the default engine for all models\n        model_engine = \"sentence_transformers\"\n\n    from .embed_family import (\n        check_engine_by_model_name_and_engine,\n        check_engine_by_model_name_and_engine_with_virtual_env,\n    )\n\n    if enable_virtual_env is None:\n        from ...constants import XINFERENCE_ENABLE_VIRTUAL_ENV\n\n        enable_virtual_env = XINFERENCE_ENABLE_VIRTUAL_ENV\n\n    if enable_virtual_env:\n        embedding_cls = check_engine_by_model_name_and_engine_with_virtual_env(\n            model_engine,\n            model_name,\n            model_format,\n            quantization,\n            model_family=model_family,\n        )\n    else:\n        embedding_cls = check_engine_by_model_name_and_engine(\n            model_engine,\n            model_name,\n            model_format,\n            quantization,\n        )\n    model = embedding_cls(\n        model_uid,\n        model_path,\n        model_family,\n        quantization,\n        **kwargs,\n    )\n    return model\n"
  },
  {
    "path": "xinference/model/embedding/custom.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import List\n\nfrom ..._compat import Literal\nfrom ..custom import ModelRegistry\nfrom .core import EmbeddingModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass CustomEmbeddingModelFamilyV2(EmbeddingModelFamilyV2):\n    version: Literal[2] = 2\n\n\nUD_EMBEDDINGS: List[CustomEmbeddingModelFamilyV2] = []\n\n\nclass EmbeddingModelRegistry(ModelRegistry):\n    model_type = \"embedding\"\n\n    def __init__(self):\n        from .embed_family import BUILTIN_EMBEDDING_MODELS\n\n        super().__init__()\n        self.models = UD_EMBEDDINGS\n        self.builtin_models = list(BUILTIN_EMBEDDING_MODELS.keys())\n\n    def add_ud_model(self, model_spec):\n        from . import generate_engine_config_by_model_name\n\n        UD_EMBEDDINGS.append(model_spec)\n        generate_engine_config_by_model_name(model_spec)\n\n    def check_model_uri(self, model_family: \"EmbeddingModelFamilyV2\"):\n        from ..utils import is_valid_model_uri\n\n        for spec in model_family.model_specs:\n            model_uri = spec.model_uri\n            if model_uri and not is_valid_model_uri(model_uri):\n                raise ValueError(f\"Invalid model URI {model_uri}.\")\n\n    def remove_ud_model(self, model_family: \"CustomEmbeddingModelFamilyV2\"):\n        from .embed_family import EMBEDDING_ENGINES\n\n        UD_EMBEDDINGS.remove(model_family)\n        del EMBEDDING_ENGINES[model_family.model_name]\n\n    def remove_ud_model_files(self, model_family: \"CustomEmbeddingModelFamilyV2\"):\n        from .cache_manager import EmbeddingCacheManager\n\n        _model_family = model_family.copy()\n        for spec in model_family.model_specs:\n            _model_family.model_specs = [spec]\n            cache_manager = EmbeddingCacheManager(_model_family)\n            cache_manager.unregister_custom_model(self.model_type)\n\n\ndef get_user_defined_embeddings() -> List[EmbeddingModelFamilyV2]:\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"embedding\")\n    return registry.get_custom_models()\n\n\ndef register_embedding(model_family: CustomEmbeddingModelFamilyV2, persist: bool):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"embedding\")\n    registry.register(model_family, persist)\n\n\ndef unregister_embedding(model_name: str, raise_error: bool = True):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"embedding\")\n    registry.unregister(model_name, raise_error)\n"
  },
  {
    "path": "xinference/model/embedding/embed_family.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import TYPE_CHECKING, Dict, List, Literal, Optional, Type, Union\n\nif TYPE_CHECKING:\n    from .core import EmbeddingModel, EmbeddingModelFamilyV2, EmbeddingSpecV1\n\nFLAG_EMBEDDER_CLASSES: List[Type[\"EmbeddingModel\"]] = []\nSENTENCE_TRANSFORMER_CLASSES: List[Type[\"EmbeddingModel\"]] = []\nVLLM_CLASSES: List[Type[\"EmbeddingModel\"]] = []\nLLAMA_CPP_CLASSES: List[Type[\"EmbeddingModel\"]] = []\n\nBUILTIN_EMBEDDING_MODELS: Dict[str, List[\"EmbeddingModelFamilyV2\"]] = {}\n\nlogger = logging.getLogger(__name__)\n\n\ndef match_embedding(\n    model_name: str,\n    model_format: Optional[str] = None,\n    quantization: Optional[str] = None,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n) -> \"EmbeddingModelFamilyV2\":\n    from ..utils import download_from_modelscope\n    from .custom import get_user_defined_embeddings\n\n    target_family = None\n\n    if model_name in BUILTIN_EMBEDDING_MODELS:\n        # BUILTIN_EMBEDDING_MODELS stores a list of model families for each model name\n        target_family_list = BUILTIN_EMBEDDING_MODELS[model_name]\n        # Use the first (latest) model family from the list\n        target_family = target_family_list[0] if target_family_list else None\n    else:\n        for model_family in get_user_defined_embeddings():\n            if model_name == model_family.model_name:\n                target_family = model_family\n                break\n\n    if target_family is None:\n        raise ValueError(\n            f\"Embedding model {model_name} not found, available \"\n            f\"models: {BUILTIN_EMBEDDING_MODELS.keys()}\"\n        )\n\n    if download_hub == \"modelscope\" or download_from_modelscope():\n        specs = [\n            x for x in target_family.model_specs if x.model_hub == \"modelscope\"\n        ] + [x for x in target_family.model_specs if x.model_hub == \"huggingface\"]\n    else:\n        specs = [x for x in target_family.model_specs if x.model_hub == \"huggingface\"]\n\n    def _match_quantization(q: Union[str, None], _quantization: str):\n        # Currently, the quantization name could include both uppercase and lowercase letters,\n        # so it is necessary to ensure that the case sensitivity does not\n        # affect the matching results.\n        if q is None:\n            return None\n        return _quantization if q.lower() == _quantization.lower() else None\n\n    def _apply_format_to_model_id(\n        _spec: \"EmbeddingSpecV1\", q: str\n    ) -> \"EmbeddingSpecV1\":\n        # Different quantized versions of some models use different model ids,\n        # Here we check the `{}` in the model id to format the id.\n        if _spec.model_id and \"{\" in _spec.model_id:\n            _spec.model_id = _spec.model_id.format(quantization=q)\n        return _spec\n\n    for spec in specs:\n        matched_quantization = _match_quantization(quantization, spec.quantization)\n        if (\n            model_format\n            and model_format != spec.model_format\n            or quantization\n            and matched_quantization is None\n        ):\n            continue\n        # Copy spec to avoid _apply_format_to_model_id modify the original spec.\n        spec = spec.copy()\n        _family = target_family.copy()\n        if quantization:\n            _family.model_specs = [\n                _apply_format_to_model_id(spec, matched_quantization)\n            ]\n            return _family\n        else:\n            # TODO: If user does not specify quantization, just use the first one\n            _q = \"none\" if spec.model_format == \"pytorch\" else spec.quantization\n            _family.model_specs = [_apply_format_to_model_id(spec, _q)]\n            return _family\n\n    raise ValueError(\n        f\"Embedding model {model_name} with format {model_format} and quantization {quantization} not found.\"\n    )\n\n\n# { embedding model name -> { engine name -> engine params } }\nEMBEDDING_ENGINES: Dict[str, Dict[str, List[Dict[str, Type[\"EmbeddingModel\"]]]]] = {}\nSUPPORTED_ENGINES: Dict[str, List[Type[\"EmbeddingModel\"]]] = {}\n\n\ndef check_engine_by_model_name_and_engine(\n    model_engine: str,\n    model_name: str,\n    model_format: Optional[str],\n    quantization: Optional[str],\n) -> Type[\"EmbeddingModel\"]:\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in EMBEDDING_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    if model_name not in EMBEDDING_ENGINES:\n        raise ValueError(f\"Model {model_name} not found.\")\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in EMBEDDING_ENGINES[model_name]:\n        raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n    match_params = EMBEDDING_ENGINES[model_name][model_engine]\n    for param in match_params:\n        if model_name != param[\"model_name\"]:\n            continue\n        if (model_format and model_format != param[\"model_format\"]) or (\n            quantization and quantization != param[\"quantization\"]\n        ):\n            continue\n        return param[\"embedding_class\"]\n    raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n\n\ndef check_engine_by_model_name_and_engine_with_virtual_env(\n    model_engine: str,\n    model_name: str,\n    model_format: Optional[str],\n    quantization: Optional[str],\n    model_family: Optional[\"EmbeddingModelFamilyV2\"] = None,\n) -> Type[\"EmbeddingModel\"]:\n    from ..utils import _collect_virtualenv_engine_markers\n\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in EMBEDDING_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    if model_family is None:\n        if model_name in BUILTIN_EMBEDDING_MODELS:\n            target_families = BUILTIN_EMBEDDING_MODELS[model_name]\n            model_family = target_families[0] if target_families else None\n        else:\n            from .custom import get_user_defined_embeddings\n\n            model_family = next(\n                (\n                    f\n                    for f in get_user_defined_embeddings()\n                    if f.model_name == model_name\n                ),\n                None,\n            )\n    engine_markers = _collect_virtualenv_engine_markers(model_family)\n\n    if model_name not in EMBEDDING_ENGINES:\n        engine_key = get_model_engine_from_spell(model_engine)\n        if engine_key.lower() in engine_markers:\n            engine_classes = SUPPORTED_ENGINES.get(engine_key, [])\n            if engine_classes:\n                logger.warning(\n                    \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                    engine_key,\n                )\n                return engine_classes[0]\n        raise ValueError(f\"Model {model_name} not found.\")\n\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in EMBEDDING_ENGINES[model_name]:\n        if model_engine.lower() in engine_markers:\n            engine_classes = SUPPORTED_ENGINES.get(model_engine, [])\n            if engine_classes:\n                logger.warning(\n                    \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                    model_engine,\n                )\n                return engine_classes[0]\n        raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n\n    match_params = EMBEDDING_ENGINES[model_name][model_engine]\n    if match_params:\n        return match_params[0][\"embedding_class\"]\n\n    raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n"
  },
  {
    "path": "xinference/model/embedding/flag/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/embedding/flag/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import List, Optional, Tuple, Union, no_type_check\n\nimport numpy as np\nimport torch\n\ntry:\n    from FlagEmbedding.inference.embedder.model_mapping import (\n        support_native_bge_model_list,\n    )\n\n    flag_installed = True\nexcept ImportError:\n    flag_installed = False\n\nfrom ....device_utils import get_available_device\nfrom ....types import Embedding, EmbeddingData, EmbeddingUsage\nfrom ...batch import BatchMixin\nfrom ...utils import check_dependency_available\nfrom ..core import EmbeddingModel, EmbeddingModelFamilyV2, EmbeddingSpecV1\n\nFLAG_EMBEDDER_MODEL_LIST = support_native_bge_model_list() if flag_installed else []\nlogger = logging.getLogger(__name__)\n\n\nclass FlagEmbeddingModel(EmbeddingModel, BatchMixin):\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_family: EmbeddingModelFamilyV2,\n        quantization: Optional[str] = None,\n        device: Optional[str] = None,\n        return_sparse: bool = False,\n        **kwargs,\n    ):\n        EmbeddingModel.__init__(\n            self, model_uid, model_path, model_family, quantization, device, **kwargs\n        )\n        BatchMixin.__init__(self, self.create_embedding, **kwargs)  # type: ignore\n        self._return_sparse = return_sparse\n\n    def load(self):\n        # add truncate_dim args hint\n        if self._kwargs and \"dimensions\" in self._kwargs:\n            raise NotImplementedError(\n                \"Flag embedder does not support dimensions argument now.\"\n            )\n        try:\n            from FlagEmbedding import BGEM3FlagModel\n        except ImportError:\n            error_message = \"Failed to import module 'BGEM3FlagModel'\"\n            installation_guide = [\n                \"Please make sure 'FlagEmbedding' is installed. \",\n                \"You can install it by `pip install FlagEmbedding`\\n\",\n            ]\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        torch_dtype = None\n        if torch_dtype_str := self._kwargs.get(\"torch_dtype\"):\n            try:\n                torch_dtype = getattr(torch, torch_dtype_str)\n                if torch_dtype not in [\n                    torch.float16,\n                    torch.float32,\n                    torch.bfloat16,\n                ]:\n                    logger.warning(\n                        f\"BGE engine only support fp16, but got {torch_dtype_str}. Using default torch dtype: fp16.\"\n                    )\n                    torch_dtype = torch.float16\n            except AttributeError:\n                logger.warning(\n                    f\"Load embedding model with  unknown torch dtype '{torch_dtype_str}'. Using default torch dtype: fp32.\"\n                )\n                torch_dtype = torch.float16\n\n        if torch_dtype and torch_dtype == torch.float16:\n            model_kwargs = {\"use_fp16\": True}\n        else:\n            model_kwargs = {}\n        self._model = BGEM3FlagModel(\n            self._model_path,\n            device=self._device,\n            trust_remote_code=True,\n            return_sparse=self._return_sparse,\n            **model_kwargs,\n        )\n        self._tokenizer = self._model.tokenizer\n\n    def _create_embedding(\n        self,\n        sentences: Union[str, List[str]],\n        **kwargs,\n    ):\n        from FlagEmbedding import BGEM3FlagModel\n\n        # flag embed dose not have this param\n        # kwargs.setdefault(\"normalize_embeddings\", True)\n        model_uid = kwargs.pop(\"model_uid\", None)\n\n        @no_type_check\n        def encode(\n            model: Union[BGEM3FlagModel],\n            sentences: Union[str, List[str]],\n            batch_size: int = 32,\n            show_progress_bar: bool = None,\n            output_value: str = \"sparse_embedding\",\n            convert_to_numpy: bool = True,\n            convert_to_tensor: bool = False,\n            device: str = None,\n            normalize_embeddings: bool = False,\n            **kwargs,\n        ):\n            \"\"\"\n            Computes sentence embeddings with bge-m3 model\n            Nothing special here, just replace sentence-transformer with FlagEmbedding\n            TODO: think about how to solve the redundant code of encode method in the future\n\n            :param sentences: the sentences to embed\n            :param batch_size: the batch size used for the computation\n            :param show_progress_bar: Output a progress bar when encode sentences\n            :param output_value:  Default sentence_embedding, to get sentence embeddings. Can be set to token_embeddings to get wordpiece token embeddings. Set to None, to get all output values\n            :param convert_to_numpy: If true, the output is a list of numpy vectors. Else, it is a list of pytorch tensors.\n            :param convert_to_tensor: If true, you get one large tensor as return. Overwrites any setting from convert_to_numpy\n            :param device: Which torch.device to use for the computation\n            :param normalize_embeddings: If set to true, returned vectors will have length 1. In that case, the faster dot-product (util.dot_score) instead of cosine similarity can be used.\n\n            :return:\n               By default, a list of tensors is returned. If convert_to_tensor, a stacked tensor is returned. If convert_to_numpy, a numpy matrix is returned.\n            \"\"\"\n            import torch\n            from tqdm.autonotebook import trange\n\n            if show_progress_bar is None:\n                show_progress_bar = (\n                    logger.getEffectiveLevel() == logging.INFO\n                    or logger.getEffectiveLevel() == logging.DEBUG\n                )\n\n            if convert_to_tensor:\n                convert_to_numpy = False\n\n            if output_value != \"sparse_embedding\":\n                convert_to_tensor = False\n                convert_to_numpy = False\n\n            input_was_string = False\n            if isinstance(sentences, str) or not hasattr(\n                sentences, \"__len__\"\n            ):  # Cast an individual sentence to a list with length 1\n                sentences = [sentences]\n                input_was_string = True\n\n            if device is None:\n                device = get_available_device()\n                logger.info(f\"Use pytorch device_name: {device}\")\n\n            all_embeddings = []\n\n            length_sorted_idx = np.argsort(\n                [-self._text_length(sen) for sen in sentences]\n            )\n            sentences_sorted = [sentences[idx] for idx in length_sorted_idx]\n\n            for start_index in trange(\n                0,\n                len(sentences),\n                batch_size,\n                desc=\"Batches\",\n                disable=not show_progress_bar,\n            ):\n                sentences_batch = sentences_sorted[\n                    start_index : start_index + batch_size\n                ]\n\n                with torch.no_grad():\n                    out_features = model.encode(sentences_batch, **kwargs)\n\n                    if output_value == \"token_embeddings\":\n                        embeddings = []\n                        for token_emb, attention in zip(\n                            out_features[output_value], out_features[\"attention_mask\"]\n                        ):\n                            last_mask_id = len(attention) - 1\n                            while (\n                                last_mask_id > 0 and attention[last_mask_id].item() == 0\n                            ):\n                                last_mask_id -= 1\n\n                            embeddings.append(token_emb[0 : last_mask_id + 1])\n                    elif output_value is None:  # Return all outputs\n                        embeddings = []\n                        for sent_idx in range(len(out_features[\"sentence_embedding\"])):\n                            row = {\n                                name: out_features[name][sent_idx]\n                                for name in out_features\n                            }\n                            embeddings.append(row)\n                    # for sparse embedding\n                    else:\n                        # TODO: Here need check if we can return density_vecs and lexical_weights at the same time\n                        if kwargs.get(\"return_sparse\"):\n                            embeddings = out_features[\"lexical_weights\"]\n                        else:\n                            embeddings = out_features[\"dense_vecs\"]\n\n                        if convert_to_numpy:\n                            embeddings = embeddings.cpu()\n\n                    all_embeddings.extend(embeddings)\n\n            all_embeddings = [\n                all_embeddings[idx] for idx in np.argsort(length_sorted_idx)\n            ]\n\n            if convert_to_tensor:\n                if len(all_embeddings):\n                    all_embeddings = torch.stack(all_embeddings)\n                else:\n                    all_embeddings = torch.Tensor()\n            elif convert_to_numpy:\n                all_embeddings = np.asarray([emb.numpy() for emb in all_embeddings])\n\n            if input_was_string:\n                all_embeddings = all_embeddings[0]\n\n            return all_embeddings\n\n        all_embeddings = encode(\n            self._model,\n            sentences,\n            convert_to_numpy=False,\n            **kwargs,\n        )\n\n        if isinstance(sentences, str):\n            all_embeddings = [all_embeddings]\n        embedding_list = []\n        for index, data in enumerate(all_embeddings):\n            if kwargs.get(\"return_sparse\"):\n                embedding_list.append(\n                    EmbeddingData(\n                        index=index,\n                        object=\"sparse_embedding\",\n                        embedding={k: float(v) for k, v in data.items()},\n                    )\n                )\n            else:\n                embedding_list.append(\n                    EmbeddingData(\n                        index=index, object=\"embedding\", embedding=data.tolist()\n                    )\n                )\n        usage = EmbeddingUsage(prompt_tokens=-1, total_tokens=-1)\n        result = Embedding(\n            object=(\"list\" if kwargs.get(\"return_sparse\") else \"dict\"),  # type: ignore\n            model=model_uid,\n            model_replica=self._model_uid,\n            data=embedding_list,\n            usage=usage,\n        )\n\n        # clean cache if possible\n        # TODO: support token statistics\n        self._clean_cache_if_needed(all_token_nums=0)\n\n        return result\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"FlagEmbedding\", \"FlagEmbedding\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls,\n        model_family: EmbeddingModelFamilyV2,\n        model_spec: EmbeddingSpecV1,\n        quantization: str,\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_spec.model_format not in [\"pytorch\"]:\n            return False, \"FlagEmbedding engine only supports pytorch format\"\n        if model_family.model_name not in FLAG_EMBEDDER_MODEL_LIST:\n            return False, f\"{model_family.model_name} is not supported by FlagEmbedding\"\n        return True\n"
  },
  {
    "path": "xinference/model/embedding/flag/tests/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/embedding/flag/tests/test_flag.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport shutil\n\nfrom ...cache_manager import EmbeddingCacheManager as CacheManager\nfrom ...core import (\n    EmbeddingModelFamilyV2,\n    TransformersEmbeddingSpecV1,\n    create_embedding_model_instance,\n)\n\nTEST_MODEL_SPEC = EmbeddingModelFamilyV2(\n    version=2,\n    model_name=\"bge-small-en-v1.5\",\n    dimensions=384,\n    max_tokens=512,\n    language=[\"en\"],\n    model_specs=[\n        TransformersEmbeddingSpecV1(\n            model_format=\"pytorch\",\n            model_id=\"BAAI/bge-small-en-v1.5\",\n            quantization=\"none\",\n            model_hub=\"modelscope\",\n        )\n    ],\n)\n\n\n# todo Refer to the return format of sentence_transformer\nasync def test_embedding_model_with_flag():\n    model_path = None\n    try:\n        model_path = CacheManager(TEST_MODEL_SPEC).cache()\n\n        model = create_embedding_model_instance(\n            \"mook\", \"bge-small-en-v1.5\", \"flag\", model_path=model_path\n        )\n        model.load()\n\n        # input is a string\n        input_text = \"what is the capital of China?\"\n\n        # test sparse and dense\n        r = await model.create_embedding(input_text, **{\"return_sparse\": True})\n        assert len(r[\"data\"]) == 1\n\n        r = await model.create_embedding(input_text)\n        assert len(r[\"data\"][0][\"embedding\"]) == 384\n\n        # input is a lit\n        input_texts = [\n            \"what is the capital of China?\",\n            \"how to implement quick sort in python?\",\n            \"Beijing\",\n            \"sorting algorithms\",\n        ]\n        # test sparse and dense\n        r = await model.create_embedding(input_texts, **{\"return_sparse\": True})\n        assert len(r[\"data\"]) == 4\n\n        r = await model.create_embedding(input_texts)\n        for d in r[\"data\"]:\n            assert len(d[\"embedding\"]) == 384\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n"
  },
  {
    "path": "xinference/model/embedding/llama_cpp/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/embedding/llama_cpp/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport concurrent.futures\nimport logging\nimport os\nimport platform\nimport pprint\nimport queue\nimport sys\nfrom typing import List, Optional, Tuple, Union\n\nfrom packaging import version\n\nfrom ....types import Embedding\nfrom ...batch import BatchMixin\nfrom ...utils import check_dependency_available\nfrom ..core import EmbeddingModel, EmbeddingModelFamilyV2, EmbeddingSpecV1\n\nlogger = logging.getLogger(__name__)\n\n\nclass _Done:\n    pass\n\n\nclass _Error:\n    def __init__(self, msg):\n        self.msg = msg\n\n\nclass XllamaCppEmbeddingModel(EmbeddingModel, BatchMixin):\n    def __init__(self, *args, **kwargs) -> None:\n        EmbeddingModel.__init__(self, *args, **kwargs)\n        BatchMixin.__init__(self, self.create_embedding, **kwargs)  # type: ignore\n        self._llm = None\n        self._executor: Optional[concurrent.futures.ThreadPoolExecutor] = None\n        llamacpp_model_config = self._kwargs.get(\"llamacpp_model_config\")\n        self._llamacpp_model_config = self._sanitize_model_config(llamacpp_model_config)\n\n    def _sanitize_model_config(self, llamacpp_model_config: Optional[dict]) -> dict:\n        if llamacpp_model_config is None:\n            llamacpp_model_config = {}\n\n        llamacpp_model_config.setdefault(\"embedding\", True)\n        llamacpp_model_config.setdefault(\"use_mmap\", False)\n        llamacpp_model_config.setdefault(\"use_mlock\", True)\n\n        if self._is_darwin_and_apple_silicon():\n            llamacpp_model_config.setdefault(\"n_gpu_layers\", -1)\n        elif self._is_linux():\n            llamacpp_model_config.setdefault(\"n_gpu_layers\", -1)\n\n        return llamacpp_model_config\n\n    def _is_darwin_and_apple_silicon(self):\n        return sys.platform == \"darwin\" and platform.processor() == \"arm\"\n\n    def _is_linux(self):\n        return sys.platform.startswith(\"linux\")\n\n    def load(self):\n        # add truncate_dim args hint\n        if \"dimensions\" in self._kwargs:\n            raise NotImplementedError(\n                \"LlamaCpp embedder does not support dimensions argument now.\"\n            )\n        try:\n            from xllamacpp import (\n                CommonParams,\n                Server,\n                __version__,\n                estimate_gpu_layers,\n                get_device_info,\n                ggml_backend_dev_type,\n                llama_pooling_type,\n            )\n\n            try:\n                if version.parse(__version__) < version.parse(\"0.2.0\"):\n                    raise RuntimeError(\n                        \"Please update xllamacpp to >= 0.2.0 by `pip install -U xllamacpp`\"\n                    )\n            except version.InvalidVersion:\n                pass  # If the version parse failed, we just skip the version check.\n        except ImportError:\n            error_message = \"Failed to import module 'xllamacpp'\"\n            installation_guide = [\"Please make sure 'xllamacpp' is installed. \"]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        # handle legacy cache.\n        if (\n            self._model_spec.model_file_name_split_template\n            and self._quantization in self._model_spec.quantization_parts\n        ):\n            part = self._model_spec.quantization_parts[self._quantization]\n            model_path = os.path.join(\n                self._model_path,\n                self._model_spec.model_file_name_split_template.format(\n                    quantization=self._quantization, part=part[0]\n                ),\n            )\n        else:\n            model_path = os.path.join(\n                self._model_path,\n                self._model_spec.model_file_name_template.format(\n                    quantization=self._quantization\n                ),\n            )\n\n        try:\n            params = CommonParams()\n            params.embedding = True\n            # Compatible with xllamacpp changes\n            try:\n                params.model = model_path\n            except Exception:\n                params.model.path = model_path\n\n            # This is the default value, could be overwritten by _llamacpp_model_config\n            params.n_parallel = min(8, os.cpu_count() or 1)\n            params.pooling_type = llama_pooling_type.LLAMA_POOLING_TYPE_LAST\n            for k, v in self._llamacpp_model_config.items():\n                try:\n                    if \".\" in k:\n                        parts = k.split(\".\")\n                        sub_param = params\n                        for p in parts[:-1]:\n                            sub_param = getattr(sub_param, p)\n                        setattr(sub_param, parts[-1], v)\n                    else:\n                        setattr(params, k, v)\n                except Exception as e:\n                    logger.error(\"Failed to set the param %s = %s, error: %s\", k, v, e)\n            n_threads = self._llamacpp_model_config.get(\"n_threads\", os.cpu_count())\n            params.cpuparams.n_threads = n_threads\n            params.cpuparams_batch.n_threads = n_threads\n            if params.n_gpu_layers == -1:\n                # Number of layers to offload to GPU (-ngl). If -1, all layers are offloaded.\n                # 0x7FFFFFFF is INT32 max, will be auto set to all layers\n                params.n_gpu_layers = 0x7FFFFFFF\n                try:\n                    device_info = get_device_info()\n                    gpus = [\n                        info\n                        for info in device_info\n                        if info[\"type\"]\n                        == ggml_backend_dev_type.GGML_BACKEND_DEVICE_TYPE_GPU\n                    ]\n                    if gpus:\n                        logger.info(\n                            \"Try to estimate num gpu layers, n_ctx: %s, n_batch: %s, n_parallel: %s, gpus:\\n%s\",\n                            params.n_ctx,\n                            params.n_batch,\n                            params.n_parallel,\n                            pprint.pformat(gpus),\n                        )\n                        estimate = estimate_gpu_layers(\n                            gpus=gpus,\n                            model_path=model_path,\n                            projectors=[],\n                            context_length=params.n_ctx,\n                            batch_size=params.n_batch,\n                            num_parallel=params.n_parallel,\n                            kv_cache_type=\"\",\n                        )\n                        logger.info(\"Estimate num gpu layers: %s\", estimate)\n                        if estimate.tensor_split:\n                            for i in range(len(estimate.tensor_split)):\n                                params.tensor_split[i] = estimate.tensor_split[i]\n                        else:\n                            params.n_gpu_layers = estimate.layers\n                except Exception as e:\n                    logger.exception(\n                        \"Estimate num gpu layers for llama.cpp backend failed: %s\", e\n                    )\n\n            self._llm = Server(params)\n            self._executor = concurrent.futures.ThreadPoolExecutor(\n                max_workers=max(10, n_threads)\n            )\n        except AssertionError:\n            raise RuntimeError(f\"Load model {self._model_name} failed\")\n\n    def _create_embedding(\n        self, sentences: Union[str, List[str]], **kwargs\n    ) -> Embedding:\n        if self._llm is None:\n            raise RuntimeError(\"Model is not loaded.\")\n\n        q: queue.Queue = queue.Queue()\n        if isinstance(sentences, str):\n            sentences = [sentences]\n\n        def _handle_embedding():\n            data = {\"input\": sentences}\n            model_uid: Optional[str] = kwargs.pop(\"model_uid\", None)\n            if model_uid:\n                data[\"model\"] = model_uid\n            try:\n                res = self._llm.handle_embeddings(data)\n                if res.get(\"code\"):\n                    q.put(_Error(res))\n                else:\n                    q.put(res)\n            except Exception as ex:\n                q.put(_Error(str(ex)))\n            q.put(_Done)\n\n        assert self._executor\n        self._executor.submit(_handle_embedding)\n\n        r = q.get()\n        if type(r) is _Error:\n            raise Exception(f\"Failed to create embedding: {r.msg}\")\n        r[\"model_replica\"] = self._model_uid\n        return Embedding(**r)  # type: ignore\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"xllamacpp\", \"xllamacpp\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls,\n        model_family: EmbeddingModelFamilyV2,\n        model_spec: EmbeddingSpecV1,\n        quantization: str,\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_spec.model_format not in [\"ggufv2\"]:\n            return False, \"llama.cpp embedding engine only supports ggufv2 format\"\n        return True\n"
  },
  {
    "path": "xinference/model/embedding/llama_cpp/tests/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/embedding/llama_cpp/tests/test_llama_cpp.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport shutil\n\nfrom ...cache_manager import EmbeddingCacheManager as CacheManager\nfrom ...core import (\n    EmbeddingModelFamilyV2,\n    LlamaCppEmbeddingSpecV1,\n    create_embedding_model_instance,\n)\n\nTEST_MODEL_SPEC = EmbeddingModelFamilyV2(\n    version=2,\n    model_name=\"Qwen3-Embedding-0.6B\",\n    dimensions=1024,\n    max_tokens=32768,\n    language=[\"en\"],\n    model_specs=[\n        LlamaCppEmbeddingSpecV1(\n            model_format=\"ggufv2\",\n            model_id=\"Qwen/Qwen3-Embedding-0.6B-GGUF\",\n            model_file_name_template=\"Qwen3-Embedding-0.6B-{quantization}.gguf\",\n            quantization=\"Q8_0\",\n            model_hub=\"huggingface\",\n        )\n    ],\n)\n\n\nasync def test_embedding_model_with_xllamacpp():\n    model_path = None\n    try:\n        model_path = CacheManager(TEST_MODEL_SPEC).cache()\n\n        model = create_embedding_model_instance(\n            \"mock\",\n            \"Qwen3-Embedding-0.6B\",\n            \"llama.cpp\",\n            model_format=\"ggufv2\",\n            quantization=\"Q8_0\",\n            model_path=model_path,\n        )\n        model.load()\n\n        # input is a lit\n        input_texts = [\n            \"what is the capital of China?\",\n            \"how to implement quick sort in python?\",\n            \"Beijing\",\n            \"sorting algorithms\",\n        ]\n        # test sparse and dense\n        r = await model.create_embedding(input_texts)\n        assert len(r[\"data\"]) == 4\n\n        r = await model.create_embedding(input_texts)\n        for d in r[\"data\"]:\n            assert len(d[\"embedding\"]) == 1024\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n"
  },
  {
    "path": "xinference/model/embedding/model_spec.json",
    "content": "[\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-large-en\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-large-en\",\n            \"model_revision\": \"d57a0d82f0d0884de76bbce093f201364d9b720e\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-large-en\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418278,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-base-en\",\n    \"dimensions\": 768,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-base-en\",\n            \"model_revision\": \"90e113f4f9cd0c83220c873b94ca7bc37f85de97\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-base-en\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418279,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"gte-large\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"thenlper/gte-large\",\n            \"model_revision\": \"2b5163b62ed28492dc70eb19a882b71c81dbc7c8\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/gte-large\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418280,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"gte-base\",\n    \"dimensions\": 768,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"thenlper/gte-base\",\n            \"model_revision\": \"792749e8178be77f479b26788a0e1adb4ec9c8a9\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/gte-base\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418281,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"e5-large-v2\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"intfloat/e5-large-v2\",\n            \"model_revision\": \"b322e09026e4ea05f42beadf4d661fb4e101d311\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/e5-large-v2\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418282,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-large-zh\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-large-zh\",\n            \"model_revision\": \"1b543b301eb63dd32914b56d939db2a972df15d5\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-large-zh\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418283,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-large-zh-noinstruct\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-large-zh-noinstruct\",\n            \"model_revision\": \"d971248454d6267756fab9caa431c2c2fc5f0f35\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-large-zh-noinstruct\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418284,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-base-zh\",\n    \"dimensions\": 768,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-base-zh\",\n            \"model_revision\": \"faefe5952238b3d28bc35d1c8fe63eb269d8cee0\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-base-zh\",\n            \"model_revision\": \"v0.0.2\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418285,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"multilingual-e5-large\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 514,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"intfloat/multilingual-e5-large\",\n            \"model_revision\": \"c505dce3578a12ec54e47bdc72bef5cd0eacb085\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/multilingual-e5-large\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418285,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-small-zh\",\n    \"dimensions\": 512,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-small-zh\",\n            \"model_revision\": \"52185a5f4aa5bb1fe80c0671b7303161880a2d79\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-small-zh\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418286,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-small-zh-v1.5\",\n    \"dimensions\": 512,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-small-zh-v1.5\",\n            \"model_revision\": \"a7ec18349c42fc774b0e86af26215e38a10fbe9d\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-small-zh-v1.5\",\n            \"model_revision\": \"v0.0.2\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418287,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-base-zh-v1.5\",\n    \"dimensions\": 768,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-base-zh-v1.5\",\n            \"model_revision\": \"fcd022c36ff982da395e71ae930a5ad0d4b9330f\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-base-zh-v1.5\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418288,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-large-zh-v1.5\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-large-zh-v1.5\",\n            \"model_revision\": \"029c4bfff6b0c5cfcd20b40c17ed52ec55202748\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-large-zh-v1.5\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418289,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-small-en-v1.5\",\n    \"dimensions\": 384,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-small-en-v1.5\",\n            \"model_revision\": \"88885630388d6249d876a3ab145b78b34665b79a\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-small-en-v1.5\",\n            \"model_revision\": \"v0.0.2\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418290,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-base-en-v1.5\",\n    \"dimensions\": 768,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-base-en-v1.5\",\n            \"model_revision\": \"1dafa38af496bee39ad5e0d11447fac46d0714e1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-base-en-v1.5\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418291,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-large-en-v1.5\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-large-en-v1.5\",\n            \"model_revision\": \"5888da4a3a013e65d33dd6f612ecd4625eb87a7d\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-large-en-v1.5\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418291,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"jina-embeddings-v2-small-en\",\n    \"dimensions\": 512,\n    \"max_tokens\": 8192,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"jinaai/jina-embeddings-v2-small-en\",\n            \"model_revision\": \"b811f03af3d4d7ea72a7c25c802b21fc675a5d99\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/jina-embeddings-v2-small-en\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418292,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"jina-embeddings-v2-base-en\",\n    \"dimensions\": 512,\n    \"max_tokens\": 8192,\n    \"language\": [\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"jinaai/jina-embeddings-v2-base-en\",\n            \"model_revision\": \"7302ac470bed880590f9344bfeee32ff8722d0e5\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/jina-embeddings-v2-base-en\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418293,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"jina-embeddings-v2-base-zh\",\n    \"dimensions\": 768,\n    \"max_tokens\": 8192,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"jinaai/jina-embeddings-v2-base-zh\",\n            \"model_revision\": \"67974cbef5cf50562eadd745de8afc661c52c96f\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"jinaai/jina-embeddings-v2-base-zh\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418294,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"text2vec-large-chinese\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 256,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"shibing624/text2vec-bge-large-chinese\",\n            \"model_revision\": \"f5027ca48ea8316d63ee26d2b9bd27a061de33a3\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Jerry0/text2vec-large-chinese\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418295,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"text2vec-base-chinese\",\n    \"dimensions\": 768,\n    \"max_tokens\": 128,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"shibing624/text2vec-base-chinese\",\n            \"model_revision\": \"8acc1289891d75f6b665ad623359798b55f86adb\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Jerry0/text2vec-base-chinese\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418296,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"text2vec-base-chinese-paraphrase\",\n    \"dimensions\": 768,\n    \"max_tokens\": 256,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"shibing624/text2vec-base-chinese-paraphrase\",\n            \"model_revision\": \"beaf10481a5d9ca3b0daa9f0df6831ec956bf739\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mwei23/text2vec-base-chinese-paraphrase\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418297,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"text2vec-base-chinese-sentence\",\n    \"dimensions\": 768,\n    \"max_tokens\": 256,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"shibing624/text2vec-base-chinese-sentence\",\n            \"model_revision\": \"e73a94e821f22c6163166bfab9408d03933a5525\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418298,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"text2vec-base-multilingual\",\n    \"dimensions\": 384,\n    \"max_tokens\": 256,\n    \"language\": [\n      \"zh\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"shibing624/text2vec-base-multilingual\",\n            \"model_revision\": \"f241877385fa56ebcc75f04d1850e1579cfa661d\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418299,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-m3\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 8192,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-m3\",\n            \"model_revision\": \"73a15ad29ab604f3bdc31601849a9defe86d563f\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-m3\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"lm-kit/bge-m3-gguf\",\n            \"model_revision\": \"9379ce497e8814b200f2dc0d18eb4045426dcb8c\",\n            \"quantizations\": [\n              \"F16\",\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"bge-m3-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-m3-gguf\",\n            \"quantizations\": [\n              \"F16\",\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"bge-m3-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418299,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"FlagEmbedding ; #engine# == \\\"flag\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bce-embedding-base_v1\",\n    \"dimensions\": 768,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"maidalun1020/bce-embedding-base_v1\",\n            \"model_revision\": \"236d9024fc1b4046f03848723f934521a66a9323\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"maidalun/bce-embedding-base_v1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418300,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"m3e-small\",\n    \"dimensions\": 512,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"moka-ai/m3e-small\",\n            \"model_revision\": \"44c696631b2a8c200220aaaad5f987f096e986df\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"AI-ModelScope/m3e-small\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418301,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"m3e-base\",\n    \"dimensions\": 768,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"moka-ai/m3e-base\",\n            \"model_revision\": \"764b537a0e50e5c7d64db883f2d2e051cbe3c64c\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"AI-ModelScope/m3e-base\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418302,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"m3e-large\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 512,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"moka-ai/m3e-large\",\n            \"model_revision\": \"12900375086c37ba5d83d1e417b21dc7d1d1f388\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"AI-ModelScope/m3e-large\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418303,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"gte-Qwen2\",\n    \"dimensions\": 3584,\n    \"max_tokens\": 32000,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Alibaba-NLP/gte-Qwen2-7B-instruct\",\n            \"model_revision\": \"e26182b2122f4435e8b3ebecbf363990f409b45b\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"iic/gte_Qwen2-7B-instruct\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418304,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-Embedding-0.6B\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 32768,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-0.6B\",\n            \"model_revision\": \"744169034862c8eec56628663995004342e4e449\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-0.6B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-0.6B-GGUF\",\n            \"model_revision\": \"48f36f50b4a081a6f56dd4a227f9b66668e1399f\",\n            \"quantizations\": [\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Embedding-0.6B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-0.6B-GGUF\",\n            \"quantizations\": [\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Embedding-0.6B-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418305,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-Embedding-4B\",\n    \"dimensions\": 2560,\n    \"max_tokens\": 32768,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-4B\",\n            \"model_revision\": \"408b81b7fab742073065d5b3661fa74c1b3ee0a1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-4B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-4B-GGUF\",\n            \"model_revision\": \"e85059c9a23c106d40df0da29d27a6b7c528265b\",\n            \"quantizations\": [\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Embedding-4B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-4B-GGUF\",\n            \"quantizations\": [\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Embedding-4B-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418306,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-Embedding-8B\",\n    \"dimensions\": 4096,\n    \"max_tokens\": 32768,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-8B\",\n            \"model_revision\": \"a3d38e32b9c835d5b3d0d0a3ef3c133bbea92539\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-8B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-8B-GGUF\",\n            \"model_revision\": \"e7cad3531ff6c346352edc899d1cf5f63e616b05\",\n            \"quantizations\": [\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Embedding-8B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-Embedding-8B-GGUF\",\n            \"quantizations\": [\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Embedding-8B-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418307,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"jina-embeddings-v3\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 8192,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"jinaai/jina-embeddings-v3\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"jinaai/jina-embeddings-v3\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418308,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"jina-clip-v2\",\n    \"dimensions\": 1024,\n    \"max_tokens\": 8192,\n    \"language\": [\n      \"89 languages supported\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"jinaai/jina-clip-v2\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"jinaai/jina-clip-v2\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"transformers==4.52.0\",\n        \"xformers\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"updated_at\": 1769418309,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"jina-embeddings-v4\",\n    \"dimensions\": 2048,\n    \"max_tokens\": 32768,\n    \"language\": [\n      \"30+ languages supported\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"jinaai/jina-embeddings-v4\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"jinaai/jina-embeddings-v4\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"transformers==4.52.0\",\n        \"xformers\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"updated_at\": 1769418310,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"gme-Qwen2-VL-2B-Instruct\",\n    \"dimensions\": 1536,\n    \"max_tokens\": 32768,\n    \"language\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"transformers==4.51.3\",\n        \"#system_torch# ; #engine# == \\\"sentence_transformers\\\"\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Alibaba-NLP/gme-Qwen2-VL-2B-Instruct\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"iic/gme-Qwen2-VL-2B-Instruct\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418311,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"gme-Qwen2-VL-7B-Instruct\",\n    \"dimensions\": 3584,\n    \"max_tokens\": 32768,\n    \"language\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"transformers==4.51.3\",\n        \"#system_torch# ; #engine# == \\\"sentence_transformers\\\"\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Alibaba-NLP/gme-Qwen2-VL-7B-Instruct\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"iic/gme-Qwen2-VL-7B-Instruct\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418312,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-VL-Embedding-2B\",\n    \"dimensions\": 2048,\n    \"max_tokens\": 8192,\n    \"language\": [\n      \"zh\",\n      \"en\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-VL-Embedding-2B\",\n            \"model_revision\": \"929a0c31d84149ec61d4594889136e0c663af1a6\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-VL-Embedding-2B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers>=4.57.0 ; #engine# == \\\"sentence_transformers\\\"\",\n        \"qwen-vl-utils>=0.0.14\",\n        \"Pillow\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"featured\": true,\n    \"updated_at\": 1769675758\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-VL-Embedding-8B\",\n    \"dimensions\": 4096,\n    \"max_tokens\": 8192,\n    \"language\": [\n        \"zh\",\n        \"en\"\n    ],\n    \"model_specs\": [\n        {\n            \"model_format\": \"pytorch\",\n            \"model_src\": {\n                \"huggingface\": {\n                    \"model_id\": \"Qwen/Qwen3-VL-Embedding-8B\",\n                    \"model_revision\": \"a12d6118f720ceb6d95f7d1cad4e8aeccddd9340\",\n                    \"quantizations\": [\n                        \"none\"\n                    ]\n                },\n                \"modelscope\": {\n                    \"model_id\": \"Qwen/Qwen3-VL-Embedding-8B\",\n                    \"quantizations\": [\n                        \"none\"\n                    ]\n                }\n            }\n        }\n    ],\n    \"virtualenv\": {\n        \"packages\": [\n            \"transformers==4.57.1 ; #engine# == \\\"sentence_transformers\\\"\",\n            \"qwen-vl-utils==0.0.11\",\n            \"Pillow\",\n            \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n            \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n        ]\n    },\n    \"featured\": false,\n    \"updated_at\": 1769418314\n  }\n]\n"
  },
  {
    "path": "xinference/model/embedding/sentence_transformers/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/embedding/sentence_transformers/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport importlib.util\nimport logging\nimport os\nfrom typing import Any, Dict, List, Optional, Tuple, Union, cast, no_type_check\n\nimport numpy as np\nimport torch\n\nfrom ....types import Embedding, EmbeddingData, EmbeddingUsage\nfrom ...batch import BatchMixin\nfrom ...utils import check_dependency_available, is_flash_attn_available\nfrom ..core import EmbeddingModel, EmbeddingModelFamilyV2, EmbeddingSpecV1\n\nlogger = logging.getLogger(__name__)\nSENTENCE_TRANSFORMER_MODEL_LIST: List[str] = []\n\n\nclass SentenceTransformerEmbeddingModel(EmbeddingModel, BatchMixin):\n    def __init__(self, *args, **kwargs) -> None:\n        EmbeddingModel.__init__(self, *args, **kwargs)\n        BatchMixin.__init__(self, self.create_embedding, **kwargs)  # type: ignore\n        self._embedder = None\n\n    def load(self):\n        # TODO: load model\n        if self.model_family.model_name.startswith(\"Qwen3-VL-Embedding\"):\n            module_path = os.path.join(\n                self._model_path, \"scripts\", \"qwen3_vl_embedding.py\"\n            )\n            if not os.path.exists(module_path):\n                raise FileNotFoundError(\n                    f\"Missing qwen3_vl_embedding.py under {self._model_path}. \"\n                    \"Please verify the model repository files.\"\n                )\n            spec = importlib.util.spec_from_file_location(\n                \"qwen3_vl_embedding\", module_path\n            )\n            if spec is None or spec.loader is None:\n                raise ImportError(f\"Failed to load embedding module from {module_path}\")\n            module = importlib.util.module_from_spec(spec)\n            spec.loader.exec_module(module)\n            self._embedder = module.Qwen3VLEmbedder(\n                model_name_or_path=self._model_path, **self._kwargs\n            )\n            return\n        try:\n            import sentence_transformers\n            from sentence_transformers import SentenceTransformer\n\n            if sentence_transformers.__version__ < \"3.1.0\":\n                raise ValueError(\n                    \"The sentence_transformers version must be greater than 3.1.0. \"\n                    \"Please upgrade your version via `pip install -U sentence_transformers` or refer to \"\n                    \"https://github.com/UKPLab/sentence-transformers\"\n                )\n        except ImportError:\n            error_message = \"Failed to import module 'SentenceTransformer'\"\n            installation_guide = [\n                \"Please make sure 'sentence-transformers' is installed. \",\n                \"You can install it by `pip install sentence-transformers`\\n\",\n            ]\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        class XSentenceTransformer(SentenceTransformer):\n            def to(self, *args, **kwargs):\n                pass\n\n        torch_dtype = None\n        if torch_dtype_str := self._kwargs.get(\"torch_dtype\"):\n            try:\n                torch_dtype = getattr(torch, torch_dtype_str)\n                if torch_dtype not in [\n                    torch.float16,\n                    torch.float32,\n                    torch.bfloat16,\n                ]:\n                    logger.warning(\n                        f\"Load embedding model with unsupported torch dtype :  {torch_dtype_str}. Using default torch dtype: fp32.\"\n                    )\n                    torch_dtype = torch.float32\n            except AttributeError:\n                logger.warning(\n                    f\"Load embedding model with  unknown torch dtype '{torch_dtype_str}'. Using default torch dtype: fp32.\"\n                )\n                torch_dtype = torch.float32\n\n        dimensions = self._kwargs.get(\"dimensions\")\n        assert dimensions is None or isinstance(dimensions, int), (\n            \"The `dimensions` argument must be an integer, \"\n            f\"but got {type(dimensions)}: {dimensions}\"\n        )\n\n        if (\n            \"gte\" in self.model_family.model_name.lower()\n            and \"qwen2\" in self.model_family.model_name.lower()\n        ):\n            model_kwargs = {\"device_map\": \"auto\"}\n            if torch_dtype:\n                model_kwargs[\"torch_dtype\"] = torch_dtype\n            self._model = XSentenceTransformer(\n                self._model_path,\n                device=self._device,\n                model_kwargs=model_kwargs,\n                truncate_dim=dimensions,\n            )\n        elif \"qwen3\" in self.model_family.model_name.lower():\n            # qwen3 embedding\n            flash_attn_enabled = self._kwargs.get(\n                \"enable_flash_attn\", is_flash_attn_available()\n            )\n            model_kwargs = {\"device_map\": \"auto\"}\n            tokenizer_kwargs = {}\n            if flash_attn_enabled:\n                model_kwargs[\"attn_implementation\"] = \"flash_attention_2\"\n                model_kwargs[\"torch_dtype\"] = \"bfloat16\"\n                tokenizer_kwargs[\"padding_side\"] = \"left\"\n            if torch_dtype:\n                model_kwargs[\"torch_dtype\"] = torch_dtype\n            logger.debug(\n                \"Loading qwen3 embedding with model kwargs: %s, tokenizer kwargs: %s\",\n                model_kwargs,\n                tokenizer_kwargs,\n            )\n            self._model = XSentenceTransformer(\n                self._model_path,\n                device=self._device,\n                model_kwargs=model_kwargs,\n                tokenizer_kwargs=tokenizer_kwargs,\n                truncate_dim=dimensions,\n            )\n        else:\n            model_kwargs = {\"torch_dtype\": torch_dtype} if torch_dtype else None\n            self._model = SentenceTransformer(\n                self._model_path,\n                device=self._device,\n                model_kwargs=model_kwargs,\n                trust_remote_code=True,\n                truncate_dim=dimensions,\n            )\n\n        if hasattr(self._model, \"tokenizer\"):\n            self._tokenizer = self._model.tokenizer\n\n    def _create_embedding(\n        self,\n        sentences: Union[str, List[str]],\n        **kwargs,\n    ):\n        if self._embedder is not None:\n            return self._create_qwen3_vl_embedding(sentences, **kwargs)\n        sentences = self._fix_langchain_openai_inputs(sentences)\n        model_uid = kwargs.pop(\"model_uid\", None)\n\n        from sentence_transformers import SentenceTransformer\n\n        kwargs.setdefault(\"normalize_embeddings\", True)\n        if kwargs.get(\"return_sparse\", False):\n            raise ValueError(\n                \"`return_sparse` is not supported for `sentence_transformers` backend, \"\n                \"please use `flag` instead\"\n            )\n\n        # copied from sentence-transformers, and modify it to return tokens num\n        @no_type_check\n        def encode(\n            model: SentenceTransformer,\n            sentences: Union[str, List[str]],\n            prompt_name: Optional[str] = None,\n            prompt: Optional[str] = None,\n            batch_size: int = 32,\n            show_progress_bar: bool = None,\n            output_value: str = \"sentence_embedding\",\n            convert_to_numpy: bool = True,\n            convert_to_tensor: bool = False,\n            device: str = None,\n            normalize_embeddings: bool = False,\n            **kwargs,\n        ):\n            \"\"\"\n            Computes sentence embeddings\n\n            :param sentences: the sentences to embed\n            :param batch_size: the batch size used for the computation\n            :param show_progress_bar: Output a progress bar when encode sentences\n            :param output_value:  Default sentence_embedding, to get sentence embeddings. Can be set to token_embeddings to get wordpiece token embeddings. Set to None, to get all output values\n            :param convert_to_numpy: If true, the output is a list of numpy vectors. Else, it is a list of pytorch tensors.\n            :param convert_to_tensor: If true, you get one large tensor as return. Overwrites any setting from convert_to_numpy\n            :param device: Which torch.device to use for the computation\n            :param normalize_embeddings: If set to true, returned vectors will have length 1. In that case, the faster dot-product (util.dot_score) instead of cosine similarity can be used.\n\n            :return:\n               By default, a list of tensors is returned. If convert_to_tensor, a stacked tensor is returned. If convert_to_numpy, a numpy matrix is returned.\n            \"\"\"\n            import torch\n            from sentence_transformers.util import batch_to_device\n            from tqdm.autonotebook import trange\n\n            model.eval()\n            if show_progress_bar is None:\n                show_progress_bar = (\n                    logger.getEffectiveLevel() == logging.INFO\n                    or logger.getEffectiveLevel() == logging.DEBUG\n                )\n\n            if convert_to_tensor:\n                convert_to_numpy = False\n\n            if output_value != \"sentence_embedding\":\n                convert_to_tensor = False\n                convert_to_numpy = False\n\n            input_was_string = False\n            if isinstance(sentences, str) or not hasattr(\n                sentences, \"__len__\"\n            ):  # Cast an individual sentence to a list with length 1\n                sentences = [sentences]\n                input_was_string = True\n\n            if prompt is None:\n                if prompt_name is not None:\n                    try:\n                        prompt = model.prompts[prompt_name]\n                    except KeyError:\n                        raise ValueError(\n                            f\"Prompt name '{prompt_name}' not found in the configured prompts dictionary with keys {list(model.prompts.keys())!r}.\"\n                        )\n                elif model.default_prompt_name is not None:\n                    prompt = model.prompts.get(model.default_prompt_name, None)\n            else:\n                if prompt_name is not None:\n                    logger.warning(\n                        \"Encode with either a `prompt`, a `prompt_name`, or neither, but not both. \"\n                        \"Ignoring the `prompt_name` in favor of `prompt`.\"\n                    )\n\n            extra_features = {}\n            if prompt is not None:\n                sentences = [prompt + sentence for sentence in sentences]\n\n                # Some models (e.g. INSTRUCTOR, GRIT) require removing the prompt before pooling\n                # Tracking the prompt length allow us to remove the prompt during pooling\n                tokenized_prompt = model.tokenize([prompt])\n                if \"input_ids\" in tokenized_prompt:\n                    extra_features[\"prompt_length\"] = (\n                        tokenized_prompt[\"input_ids\"].shape[-1] - 1\n                    )\n\n            if device is None:\n                device = model._target_device\n\n            if (\n                \"gte\" in self.model_family.model_name.lower()\n                and \"qwen2\" in self.model_family.model_name.lower()\n            ):\n                model.to(device)\n\n            all_embeddings = []\n            all_token_nums = 0\n            length_sorted_idx = np.argsort(\n                [-self._text_length(sen) for sen in sentences]\n            )\n            sentences_sorted = [sentences[idx] for idx in length_sorted_idx]\n\n            for start_index in trange(\n                0,\n                len(sentences),\n                batch_size,\n                desc=\"Batches\",\n                disable=not show_progress_bar,\n            ):\n                sentences_batch = sentences_sorted[\n                    start_index : start_index + batch_size\n                ]\n                features = model.tokenize(sentences_batch)\n                features = batch_to_device(features, device)\n                features.update(extra_features)\n                # when batching, the attention mask 1 means there is a token\n                # thus we just sum up it to get the total number of tokens\n                if (\n                    \"clip\" in self.model_family.model_name.lower()\n                    or \"jina-embeddings-v4\" in self.model_family.model_name.lower()\n                ):\n                    # support input_ids and text_input_ids\n                    for key in [\"input_ids\", \"text_input_ids\"]:\n                        if key in features and hasattr(features[key], \"numel\"):\n                            all_token_nums += features[key].numel()\n                    if \"pixel_values\" in features and hasattr(\n                        features[\"pixel_values\"], \"numel\"\n                    ):\n                        all_token_nums += features[\"pixel_values\"].numel()\n                else:\n                    all_token_nums += features[\"attention_mask\"].sum().item()\n\n                with torch.no_grad():\n                    out_features = model.forward(features, **kwargs)\n\n                    from sentence_transformers.util import truncate_embeddings\n\n                    out_features[\"sentence_embedding\"] = truncate_embeddings(\n                        out_features[\"sentence_embedding\"], model.truncate_dim\n                    )\n\n                    if output_value == \"token_embeddings\":\n                        embeddings = []\n                        for token_emb, attention in zip(\n                            out_features[output_value], out_features[\"attention_mask\"]\n                        ):\n                            last_mask_id = len(attention) - 1\n                            while (\n                                last_mask_id > 0 and attention[last_mask_id].item() == 0\n                            ):\n                                last_mask_id -= 1\n\n                            embeddings.append(token_emb[0 : last_mask_id + 1])\n                    elif output_value is None:  # Return all outputs\n                        embeddings = []\n                        for sent_idx in range(len(out_features[\"sentence_embedding\"])):\n                            row = {\n                                name: out_features[name][sent_idx]\n                                for name in out_features\n                            }\n                            embeddings.append(row)\n                    else:  # Sentence embeddings\n                        embeddings = out_features[output_value]\n                        embeddings = embeddings.detach()\n                        if normalize_embeddings:\n                            embeddings = torch.nn.functional.normalize(\n                                embeddings, p=2, dim=1\n                            )\n\n                        # fixes for #522 and #487 to avoid oom problems on gpu with large datasets\n                        if convert_to_numpy:\n                            embeddings = embeddings.cpu()\n\n                    all_embeddings.extend(embeddings)\n\n            all_embeddings = [\n                all_embeddings[idx] for idx in np.argsort(length_sorted_idx)\n            ]\n\n            if convert_to_tensor:\n                if len(all_embeddings):\n                    all_embeddings = torch.stack(all_embeddings)\n                else:\n                    all_embeddings = torch.Tensor()\n            elif convert_to_numpy:\n                all_embeddings = np.asarray([emb.numpy() for emb in all_embeddings])\n\n            if input_was_string:\n                all_embeddings = all_embeddings[0]\n\n            return all_embeddings, all_token_nums\n\n        # seems already support prompt in embedding model\n        if (\n            \"gte\" in self.model_family.model_name.lower()\n            and \"qwen2\" in self.model_family.model_name.lower()\n        ):\n            all_embeddings, all_token_nums = encode(\n                self._model,\n                sentences,\n                prompt_name=\"query\",\n                convert_to_numpy=False,\n                **kwargs,\n            )\n        elif (\n            \"clip\" in self.model_family.model_name.lower()\n            or \"jina-embeddings-v4\" in self.model_family.model_name.lower()\n        ):\n            import base64\n            import re\n            from io import BytesIO\n\n            from PIL import Image\n\n            def base64_to_image(base64_str: str) -> Image.Image:\n                # base64_data = re.sub(\"^data:image/.+;base64,\", \"\", base64_str)\n                base64_data = base64_str.split(\",\", 1)[1]\n                byte_data = base64.b64decode(base64_data)\n                image_data = BytesIO(byte_data)\n                img = Image.open(image_data)\n                return img\n\n            objs: list[str] = []\n            if isinstance(sentences, str):\n                objs.append(sentences)\n            else:\n                for item in sentences:\n                    if isinstance(item, dict):\n                        if item.get(\"text\") is not None:\n                            objs.append(item[\"text\"])\n                        elif item.get(\"image\") is not None:\n                            if re.match(r\"^data:image/.+;base64,\", item[\"image\"]):\n                                image = base64_to_image(item[\"image\"])\n                                objs.append(image)\n                            else:\n                                objs.append(item[\"image\"])\n                        else:\n                            raise ValueError(\"Please check the input data.\")\n                    elif isinstance(item, str):\n                        objs.append(item)\n                    else:\n                        raise ValueError(\"Please check the input data.\")\n\n            all_embeddings, all_token_nums = encode(\n                self._model,\n                objs,\n                convert_to_numpy=False,\n                **kwargs,\n            )\n        else:\n            all_embeddings, all_token_nums = encode(\n                self._model,\n                sentences,\n                convert_to_numpy=False,\n                **kwargs,\n            )\n        if isinstance(sentences, str):\n            all_embeddings = [all_embeddings]\n        embedding_list = []\n        for index, data in enumerate(all_embeddings):\n            embedding_list.append(\n                EmbeddingData(index=index, object=\"embedding\", embedding=data.tolist())\n            )\n        usage = EmbeddingUsage(\n            prompt_tokens=all_token_nums, total_tokens=all_token_nums\n        )\n        result = Embedding(\n            object=\"list\",\n            model=model_uid,\n            model_replica=self._model_uid,\n            data=embedding_list,\n            usage=usage,\n        )\n\n        # clean cache if possible\n        self._clean_cache_if_needed(all_token_nums)\n\n        return result\n\n    def _normalize_vl_inputs(\n        self, inputs: Union[str, Dict[str, Any], List[str], List[Dict[str, Any]]]\n    ) -> List[Dict[str, Any]]:\n        if isinstance(inputs, str):\n            return [{\"text\": inputs}]\n        if isinstance(inputs, dict):\n            return [inputs]\n        if isinstance(inputs, list):\n            if not inputs:\n                return []\n            if isinstance(inputs[0], str):\n                return [{\"text\": item} for item in inputs]\n            if isinstance(inputs[0], dict):\n                return cast(List[Dict[str, Any]], inputs)\n        raise ValueError(\"Unsupported input type for Qwen3-VL embedding.\")\n\n    def _create_qwen3_vl_embedding(self, sentences, **kwargs):\n        sentences = self._fix_langchain_openai_inputs(sentences)\n        model_uid = kwargs.pop(\"model_uid\", None)\n        normalize_embedding = kwargs.get(\"normalize_embedding\", True)\n        inputs = self._normalize_vl_inputs(sentences)\n        if not inputs:\n            return Embedding(\n                object=\"list\",\n                model=model_uid,\n                model_replica=self._model_uid,\n                data=[],\n                usage=EmbeddingUsage(prompt_tokens=0, total_tokens=0),\n            )\n\n        embeddings = self._embedder.process(inputs, normalize=normalize_embedding)\n        embedding_list = []\n        for index, data in enumerate(embeddings):\n            if isinstance(data, torch.Tensor):\n                data = data.tolist()\n            embedding_list.append(\n                EmbeddingData(index=index, object=\"embedding\", embedding=data)\n            )\n        usage = EmbeddingUsage(prompt_tokens=-1, total_tokens=-1)\n        return Embedding(\n            object=\"list\",\n            model=model_uid,\n            model_replica=self._model_uid,\n            data=embedding_list,\n            usage=usage,\n        )\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        return True\n\n    @classmethod\n    def match_json(\n        cls,\n        model_family: EmbeddingModelFamilyV2,\n        model_spec: EmbeddingSpecV1,\n        quantization: str,\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_family.model_name.startswith(\"Qwen3-VL-Embedding\"):\n            dep_check = check_dependency_available(\"transformers\", \"transformers\")\n            if dep_check != True:\n                return dep_check\n            dep_check = check_dependency_available(\"qwen_vl_utils\", \"qwen_vl_utils\")\n            if dep_check != True:\n                return dep_check\n            dep_check = check_dependency_available(\"PIL\", \"Pillow\")\n            if dep_check != True:\n                return dep_check\n            if model_spec.model_format not in [\"pytorch\"]:\n                return False, \"Qwen3-VL embedding supports pytorch format only\"\n            return True\n        dep_check = check_dependency_available(\n            \"sentence_transformers\", \"sentence-transformers\"\n        )\n        if dep_check != True:\n            return dep_check\n        if model_spec.model_format not in [\"pytorch\"]:\n            return False, \"SentenceTransformer embeddings require pytorch format\"\n        return True\n"
  },
  {
    "path": "xinference/model/embedding/sentence_transformers/tests/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/embedding/sentence_transformers/tests/test_sentence_transformers.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport shutil\n\nfrom ...cache_manager import EmbeddingCacheManager as CacheManager\nfrom ...core import (\n    EmbeddingModelFamilyV2,\n    TransformersEmbeddingSpecV1,\n    create_embedding_model_instance,\n)\n\nTEST_MODEL_SPEC = EmbeddingModelFamilyV2(\n    version=2,\n    model_name=\"bge-small-en-v1.5\",\n    dimensions=384,\n    max_tokens=512,\n    language=[\"en\"],\n    model_specs=[\n        TransformersEmbeddingSpecV1(\n            model_format=\"pytorch\",\n            model_id=\"BAAI/bge-small-en-v1.5\",\n            quantization=\"none\",\n            # use huggingface in ci\n            # model_hub=\"modelscope\",\n        )\n    ],\n)\n\n\nasync def test_embedding_model_with_sentence_transformer():\n    model_path = None\n\n    try:\n        model_path = CacheManager(TEST_MODEL_SPEC).cache()\n\n        model = create_embedding_model_instance(\n            \"mock\",\n            \"bge-small-en-v1.5\",\n            \"sentence_transformers\",\n            model_path=model_path,\n        )\n        model.load()\n\n        # input is a string\n        input_text = \"what is the capital of China?\"\n\n        # test sparse and dense\n        r = await model.create_embedding(input_text)\n        assert len(r[\"data\"]) == 1\n        assert len(r[\"data\"][0][\"embedding\"]) == 384\n\n        # input is a lit\n        input_texts = [\n            \"what is the capital of China?\",\n            \"how to implement quick sort in python?\",\n            \"Beijing\",\n            \"sorting algorithms\",\n        ]\n        # test sparse and dense\n        r = await model.create_embedding(input_texts)\n        assert len(r[\"data\"]) == 4\n        for d in r[\"data\"]:\n            assert len(d[\"embedding\"]) == 384\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n\n\nasync def test_embedding_model_with_sentence_transformer_truncate_dim():\n    model_path = None\n\n    try:\n        model_path = CacheManager(TEST_MODEL_SPEC).cache()\n\n        truncate_dim = 128\n        model = create_embedding_model_instance(\n            \"mock\",\n            \"bge-small-en-v1.5\",\n            \"sentence_transformers\",\n            model_path=model_path,\n            dimensions=truncate_dim,\n        )\n        model.load()\n\n        # input is a string\n        input_text = \"what is the capital of China?\"\n\n        # test sparse and dense\n        r = await model.create_embedding(input_text)\n        assert len(r[\"data\"]) == 1\n        assert len(r[\"data\"][0][\"embedding\"]) == truncate_dim\n\n        # input is a lit\n        input_texts = [\n            \"what is the capital of China?\",\n            \"how to implement quick sort in python?\",\n            \"Beijing\",\n            \"sorting algorithms\",\n        ]\n        # test sparse and dense\n        r = await model.create_embedding(input_texts)\n        assert len(r[\"data\"]) == 4\n        for d in r[\"data\"]:\n            assert len(d[\"embedding\"]) == truncate_dim\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n"
  },
  {
    "path": "xinference/model/embedding/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/embedding/tests/test_embedding_models.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport os\nimport shutil\nimport tempfile\n\nimport pytest\n\nfrom ..cache_manager import EmbeddingCacheManager as CacheManager\nfrom ..core import EmbeddingModelFamilyV2, TransformersEmbeddingSpecV1\n\nTEST_MODEL_SPEC = EmbeddingModelFamilyV2(\n    version=2,\n    model_name=\"gte-small\",\n    dimensions=384,\n    max_tokens=512,\n    language=[\"en\"],\n    model_specs=[\n        TransformersEmbeddingSpecV1(\n            model_format=\"pytorch\",\n            model_id=\"thenlper/gte-small\",\n            model_revision=\"d8e2604cadbeeda029847d19759d219e0ce2e6d8\",\n            quantization=\"none\",\n        )\n    ],\n)\n\nTEST_MODEL_SPEC2 = EmbeddingModelFamilyV2(\n    version=2,\n    model_name=\"gte-small\",\n    dimensions=384,\n    max_tokens=512,\n    language=[\"en\"],\n    model_specs=[\n        TransformersEmbeddingSpecV1(\n            model_format=\"pytorch\",\n            model_id=\"thenlper/gte-small\",\n            model_revision=\"c20abe89ac0cdf484944ebdc26ecaaa1bfc9cf89\",\n            quantization=\"none\",\n        )\n    ],\n)\n\nTEST_MODEL_SPEC_FROM_MODELSCOPE = EmbeddingModelFamilyV2(\n    version=2,\n    model_name=\"bge-small-zh-v1.5\",\n    dimensions=512,\n    max_tokens=512,\n    language=[\"zh\"],\n    model_specs=[\n        TransformersEmbeddingSpecV1(\n            model_format=\"pytorch\",\n            model_id=\"Xorbits/bge-small-zh-v1.5\",\n            model_revision=\"v0.0.2\",\n            quantization=\"none\",\n            model_hub=\"modelscope\",\n        )\n    ],\n)\nfrom ..embed_family import EMBEDDING_ENGINES\n\n\ndef test_engine_supported():\n    model_name = \"bge-small-en-v1.5\"\n    assert model_name in EMBEDDING_ENGINES\n    assert \"flag\" in EMBEDDING_ENGINES[model_name]\n    assert \"sentence_transformers\" in EMBEDDING_ENGINES[model_name]\n\n\nasync def test_model_from_modelscope():\n    from ..core import create_embedding_model_instance\n\n    model_path = CacheManager(TEST_MODEL_SPEC_FROM_MODELSCOPE).cache()\n    model = create_embedding_model_instance(\n        \"mock\",\n        \"bge-small-zh-v1.5\",\n        \"sentence_transformers\",\n        model_path=model_path,\n    )\n    # input is a string\n    input_text = \"乱条犹未变初黄，倚得东风势便狂。解把飞花蒙日月，不知天地有清霜。\"\n    model.load()\n    r = await model.create_embedding(input_text)\n    assert len(r[\"data\"]) == 1\n    for d in r[\"data\"]:\n        assert len(d[\"embedding\"]) == 512\n    shutil.rmtree(model_path, ignore_errors=True)\n\n\ndef test_get_cache_status():\n    model_path = None\n    try:\n        cache_manager = CacheManager(TEST_MODEL_SPEC)\n        assert cache_manager.get_cache_status() is False\n        model_path = cache_manager.cache()\n        assert cache_manager.get_cache_status() is True\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n\n\ndef test_from_local_uri():\n    from ..custom import CustomEmbeddingModelFamilyV2\n\n    tmp_dir = tempfile.mkdtemp()\n\n    model_family = CustomEmbeddingModelFamilyV2(\n        model_name=\"custom_test_a\",\n        dimensions=1024,\n        max_tokens=2048,\n        language=[\"zh\"],\n        model_specs=[\n            TransformersEmbeddingSpecV1(\n                model_format=\"pytorch\",\n                model_id=\"test/custom_test_a\",\n                model_uri=os.path.abspath(tmp_dir),\n                quantization=\"none\",\n            )\n        ],\n    )\n\n    cache_dir = CacheManager(model_family).cache()\n    assert os.path.exists(cache_dir)\n    assert os.path.islink(cache_dir)\n    assert os.path.samefile(os.path.realpath(cache_dir), tmp_dir)\n    os.remove(cache_dir)\n    shutil.rmtree(tmp_dir, ignore_errors=True)\n\n\ndef test_register_custom_embedding():\n    from ....constants import XINFERENCE_CACHE_DIR\n    from ..custom import (\n        CustomEmbeddingModelFamilyV2,\n        register_embedding,\n        unregister_embedding,\n    )\n\n    tmp_dir = tempfile.mkdtemp()\n\n    # correct\n    model_family = CustomEmbeddingModelFamilyV2(\n        model_name=\"custom_test_b\",\n        dimensions=1024,\n        max_tokens=2048,\n        language=[\"zh\"],\n        model_specs=[\n            TransformersEmbeddingSpecV1(\n                model_format=\"pytorch\",\n                model_id=\"test/custom_test_b\",\n                model_uri=os.path.abspath(tmp_dir),\n                quantization=\"none\",\n            )\n        ],\n    )\n\n    register_embedding(model_family, False)\n    CacheManager(model_family).cache()\n    model_cache_path = os.path.join(\n        XINFERENCE_CACHE_DIR, \"v2\", f\"{model_family.model_name}-pytorch-none\"\n    )\n    assert os.path.exists(model_cache_path)\n    assert os.path.islink(model_cache_path)\n    os.remove(model_cache_path)\n\n    # Invalid path\n    model_family = CustomEmbeddingModelFamilyV2(\n        model_name=\"custom_test_b-v15\",\n        dimensions=1024,\n        max_tokens=2048,\n        language=[\"zh\"],\n        model_specs=[\n            TransformersEmbeddingSpecV1(\n                model_format=\"pytorch\",\n                model_id=\"test/custom_test_b\",\n                model_uri=\"file:///c/d\",\n                quantization=\"none\",\n            )\n        ],\n    )\n    with pytest.raises(ValueError):\n        register_embedding(model_family, False)\n\n    # name conflict\n    model_family = CustomEmbeddingModelFamilyV2(\n        model_name=\"custom_test_c\",\n        dimensions=1024,\n        max_tokens=2048,\n        language=[\"zh\"],\n        model_specs=[\n            TransformersEmbeddingSpecV1(\n                model_format=\"pytorch\",\n                model_id=\"test/custom_test_c\",\n                model_uri=os.path.abspath(tmp_dir),\n                quantization=\"none\",\n            )\n        ],\n    )\n    register_embedding(model_family, False)\n    with pytest.raises(ValueError):\n        register_embedding(model_family, False)\n\n    # unregister\n    unregister_embedding(\"custom_test_b\")\n    unregister_embedding(\"custom_test_c\")\n    with pytest.raises(ValueError):\n        unregister_embedding(\"custom_test_d\")\n\n    shutil.rmtree(tmp_dir, ignore_errors=True)\n\n\ndef test_register_fault_embedding():\n    import warnings\n\n    from ....constants import XINFERENCE_MODEL_DIR\n    from .. import _install\n\n    embedding_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"embedding\")\n\n    os.makedirs(embedding_dir, exist_ok=True)\n    file_path = os.path.join(embedding_dir, \"GTE.json\")\n\n    data = {\n        \"model_name\": \"GTE\",\n        \"model_hub\": \"huggingface\",\n        \"dimensions\": 768,\n        \"max_tokens\": 512,\n        \"language\": [\"en\", \"zh\"],\n        \"model_specs\": [\n            {\n                \"model_format\": \"pytorch\",\n                \"model_id\": None,\n                \"model_revision\": None,\n                \"model_uri\": \"/new_data/cache/gte-Qwen2\",\n                \"quantization\": \"none\",\n            }\n        ],\n    }\n\n    with open(file_path, \"w\") as f:\n        json.dump(data, f, indent=4)\n\n    all_warnings = []\n\n    def custom_warning_handler(\n        message, category, filename, lineno, file=None, line=None\n    ):\n        warning_info = {\n            \"message\": str(message),\n            \"category\": category.__name__,\n            \"filename\": filename,\n            \"lineno\": lineno,\n        }\n        all_warnings.append(warning_info)\n\n    old_showwarning = warnings.showwarning\n    warnings.showwarning = custom_warning_handler\n\n    try:\n        _install()\n\n        warnings.showwarning = old_showwarning\n\n        with pytest.warns(UserWarning) as record:\n            _install()\n\n        found_warning = False\n        for warning in record:\n            message = str(warning.message)\n            if (\n                \"has error\" in message\n                and (\n                    \"Invalid model URI\" in message\n                    or \"Model URI cannot be a relative path\" in message\n                )\n                and \"/new_data/cache/gte-Qwen2\" in message\n            ):\n                found_warning = True\n                break\n\n        assert (\n            found_warning\n        ), f\"Expected warning about invalid model URI not found. Warnings: {[str(w.message) for w in record]}\"\n\n    finally:\n        warnings.showwarning = old_showwarning\n\n    if os.path.exists(file_path):\n        os.remove(file_path)\n\n\ndef test_convert_ids_to_tokens():\n    from ..core import create_embedding_model_instance\n\n    model_path = CacheManager(TEST_MODEL_SPEC_FROM_MODELSCOPE).cache()\n    model = create_embedding_model_instance(\n        \"mock\",\n        \"bge-small-zh-v1.5\",\n        \"sentence_transformers\",\n        model_path=model_path,\n    )\n    model.load()\n\n    ids = [[8074, 8059, 8064, 8056], [144, 147, 160, 160, 158]]\n    tokens = model.convert_ids_to_tokens(ids)\n\n    assert isinstance(tokens, list)\n    assert tokens == [[\"ｘ\", \"ｉ\", \"ｎ\", \"ｆ\"], [\"b\", \"e\", \"r\", \"r\", \"p\"]]\n\n    shutil.rmtree(model_path, ignore_errors=True)\n"
  },
  {
    "path": "xinference/model/embedding/tests/test_integrated_embedding.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nfrom io import BytesIO\n\nimport numpy as np\nimport requests\nfrom PIL import Image\n\nfrom ....client import Client\n\n\ndef test_sparse_embedding(setup):\n    endpoint, _ = setup\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"bge-m3\", model_type=\"embedding\", model_engine=\"flag\"\n    )\n    assert len(client.list_models()) == 1\n\n    model = client.get_model(model_uid)\n\n    result = model.create_embedding(\"What is BGE M3?\", return_sparse=True)\n    emb = result[\"data\"][0][\"embedding\"]\n    token_ids = []\n    values = []\n    for token_id, v in emb.items():\n        token_ids.append(token_id)\n        values.append(v)\n    words = model.convert_ids_to_tokens(token_ids)\n    assert len(words) == len(token_ids)\n    assert isinstance(words[0], str)\n\n\ndef test_clip_embedding(setup):\n    endpoint, _ = setup\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"jina-clip-v2\", model_type=\"embedding\", torch_dtype=\"float16\"\n    )\n    assert len(client.list_models()) == 1\n\n    model = client.get_model(model_uid)\n\n    def image_to_base64(image: Image.Image, fmt=\"png\") -> str:\n        output_buffer = BytesIO()\n        image.save(output_buffer, format=fmt)\n        byte_data = output_buffer.getvalue()\n        base64_str = base64.b64encode(byte_data).decode(\"utf-8\")\n        return f\"data:image/{fmt};base64,\" + base64_str\n\n    image_str = \"https://i.ibb.co/r5w8hG8/beach2.jpg\"\n    image_str_base64 = image_to_base64(\n        Image.open(BytesIO(requests.get(image_str).content))\n    )\n    input = [\n        {\"text\": \"This is a picture of diagram\"},\n        {\"image\": image_str_base64},\n        {\"text\": \"a dog\"},\n        {\"image\": image_str},\n        {\"text\": \"海滩上美丽的日落。\"},\n    ]\n    response = model.create_embedding(input)\n    for i in range(len(response[\"data\"])):\n        embedding = np.array([item for item in response[\"data\"][i][\"embedding\"]])\n        assert embedding.shape == (1024,)\n\n\ndef test_llama_cpp_embedding(setup):\n    endpoint, _ = setup\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"Qwen3-Embedding-0.6B\",\n        model_type=\"embedding\",\n        model_engine=\"llama.cpp\",\n        model_format=\"ggufv2\",\n        quantization=\"Q8_0\",\n        download_hub=\"huggingface\",\n    )\n    assert len(client.list_models()) == 1\n\n    model = client.get_model(model_uid)\n\n    result = model.create_embedding(\"What is BGE M3?\")\n    emb = result[\"data\"][0][\"embedding\"]\n    assert len(emb) == 1024\n"
  },
  {
    "path": "xinference/model/embedding/tests/test_qwen3_vl_engine_params.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport site\nimport sys\n\nimport pytest\nimport torch\n\nfrom xinference.constants import XINFERENCE_VIRTUAL_ENV_DIR\nfrom xinference.core import worker as worker_mod\nfrom xinference.core.worker import WorkerActor\nfrom xinference.model.embedding import _install\nfrom xinference.model.embedding.cache_manager import EmbeddingCacheManager\nfrom xinference.model.embedding.core import create_embedding_model_instance\nfrom xinference.model.embedding.embed_family import match_embedding\nfrom xinference.model.utils import (\n    check_dependency_available,\n    get_engine_params_by_name_with_virtual_env,\n)\n\n\ndef _assert_engine_params(params, engine_name):\n    assert engine_name in params\n    assert isinstance(params[engine_name], list)\n    assert params[engine_name], f\"{engine_name} params should not be empty\"\n    item = params[engine_name][0]\n    assert item.get(\"model_format\") == \"pytorch\"\n    assert item.get(\"quantization\") == \"none\"\n\n\ndef test_qwen3_vl_embedding_engine_params_with_virtualenv():\n    _install()\n    params = get_engine_params_by_name_with_virtual_env(\n        \"embedding\", \"Qwen3-VL-Embedding-2B\", enable_virtual_env=True\n    )\n    assert isinstance(params, dict)\n    _assert_engine_params(params, \"sentence_transformers\")\n    _assert_engine_params(params, \"vllm\")\n\n\ndef _get_cached_model_path():\n    family = match_embedding(\"Qwen3-VL-Embedding-2B\", \"pytorch\", \"none\")\n    cache_manager = EmbeddingCacheManager(family)\n    return cache_manager.cache()\n\n\ndef _get_virtualenv_site_packages(env_path: str) -> str:\n    py_version = f\"{sys.version_info.major}.{sys.version_info.minor}\"\n    if os.name == \"nt\":\n        return os.path.join(env_path, \"Lib\", \"site-packages\")\n    return os.path.join(env_path, \"lib\", f\"python{py_version}\", \"site-packages\")\n\n\ndef _purge_modules(prefixes):\n    for name in list(sys.modules):\n        if any(name == prefix or name.startswith(f\"{prefix}.\") for prefix in prefixes):\n            sys.modules.pop(name, None)\n\n\ndef _prepare_engine_virtualenv(engine_name: str, virtual_env_packages=None):\n    family = match_embedding(\"Qwen3-VL-Embedding-2B\", \"pytorch\", \"none\")\n    settings = family.virtualenv\n    if virtual_env_packages:\n        # If the caller pins numpy, drop any system numpy placeholder to avoid conflicts.\n        if any(pkg.lower().startswith(\"numpy\") for pkg in virtual_env_packages):\n            if settings is not None:\n                if hasattr(settings, \"model_copy\"):\n                    settings = settings.model_copy(deep=True)\n                else:\n                    settings = settings.copy(deep=True)\n                assert settings is not None  # for mypy type narrowing\n                settings.packages = [\n                    pkg\n                    for pkg in settings.packages\n                    if not pkg.strip().startswith(\"#system_numpy#\")\n                ]\n    py_version = (\n        f\"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}\"\n    )\n    env_path = os.path.join(\n        XINFERENCE_VIRTUAL_ENV_DIR,\n        \"v4\",\n        family.model_name,\n        engine_name.lower(),\n        py_version,\n    )\n    manager = WorkerActor._create_virtual_env_manager(True, None, env_path)\n    assert manager is not None\n    previous_skip_installed = worker_mod.XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED\n    worker_mod.XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED = False\n    WorkerActor._prepare_virtual_env(\n        manager,\n        settings,\n        virtual_env_packages=virtual_env_packages,\n        model_engine=engine_name,\n    )\n    worker_mod.XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED = previous_skip_installed\n    site_packages = _get_virtualenv_site_packages(env_path)\n    if os.path.isdir(site_packages):\n        site.addsitedir(site_packages)\n        if site_packages in sys.path:\n            sys.path.remove(site_packages)\n            sys.path.insert(0, site_packages)\n    return env_path\n\n\ndef test_qwen3_vl_embedding_sentence_transformers_startup_virtualenv():\n    if not torch.cuda.is_available():\n        pytest.skip(\"Qwen3-VL embedding startup tests require GPU\")\n    _install()\n    _prepare_engine_virtualenv(\"sentence_transformers\")\n    _purge_modules([\"transformers\", \"qwen_vl_utils\", \"PIL\"])\n    for module_name in (\"transformers\", \"qwen_vl_utils\", \"PIL\"):\n        dep_check = check_dependency_available(module_name, module_name)\n        if dep_check != True:\n            pytest.skip(dep_check[1])\n    model_path = _get_cached_model_path()\n    model = create_embedding_model_instance(\n        \"qwen3-vl-embedding-st\",\n        \"Qwen3-VL-Embedding-2B\",\n        \"sentence_transformers\",\n        model_format=\"pytorch\",\n        quantization=\"none\",\n        model_path=model_path,\n        enable_virtual_env=True,\n    )\n    model.load()\n"
  },
  {
    "path": "xinference/model/embedding/vllm/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/embedding/vllm/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport logging\nimport os\nfrom typing import Any, Dict, List, Tuple, Union, cast\n\nfrom ....device_utils import is_vacc_available\nfrom ....types import Embedding, EmbeddingData, EmbeddingUsage\nfrom ...batch import BatchMixin\nfrom ...utils import check_dependency_available\nfrom ..core import EmbeddingModel, EmbeddingModelFamilyV2, EmbeddingSpecV1\n\nlogger = logging.getLogger(__name__)\nSUPPORTED_MODELS_PREFIXES = [\"bge\", \"gte\", \"text2vec\", \"m3e\", \"gte\", \"Qwen3\"]\n\n\nclass VLLMEmbeddingModel(EmbeddingModel, BatchMixin):\n    def __init__(self, *args, **kwargs):\n        EmbeddingModel.__init__(self, *args, **kwargs)\n        BatchMixin.__init__(self, self.create_embedding, **kwargs)  # type: ignore\n        self._context_length = None\n\n    def load(self):\n        try:\n            if is_vacc_available():\n                import vllm_vacc  # noqa: F401\n            from packaging.version import Version\n            from vllm import LLM\n            from vllm import __version__ as vllm_version\n\n        except ImportError:\n            error_message = \"Failed to import module 'vllm'\"\n            installation_guide = [\n                \"Please make sure 'vllm' is installed. \",\n                \"You can install it by `pip install vllm`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n        if self.model_family.model_name in {\n            \"Qwen3-Embedding-0.6B\",\n            \"Qwen3-Embedding-4B\",\n            \"Qwen3-Embedding-8B\",\n        }:\n            if \"hf_overrides\" not in self._kwargs:\n                self._kwargs[\"hf_overrides\"] = {\n                    \"is_matryoshka\": True,\n                }\n            elif isinstance(self._kwargs[\"hf_overrides\"], dict):\n                self._kwargs[\"hf_overrides\"].update(\n                    is_matryoshka=True,\n                )\n            elif isinstance(self._kwargs[\"hf_overrides\"], str):\n                self._kwargs[\"hf_overrides\"] = json.loads(self._kwargs[\"hf_overrides\"])\n                self._kwargs[\"hf_overrides\"].update(\n                    is_matryoshka=True,\n                )\n\n        if self.model_family.model_name.startswith(\"Qwen3-VL-Embedding\"):\n            if Version(vllm_version) < Version(\"0.14.0\"):\n                raise ValueError(\"Qwen3-VL embedding requires vLLM>=0.14.0\")\n            self._model = LLM(model=self._model_path, runner=\"pooling\", **self._kwargs)\n        else:\n            if Version(vllm_version) >= Version(\"0.13.0\"):\n                self._model = LLM(\n                    model=self._model_path, runner=\"pooling\", **self._kwargs\n                )\n            else:\n                self._model = LLM(model=self._model_path, task=\"embed\", **self._kwargs)\n        self._tokenizer = self._model.get_tokenizer()\n\n    @staticmethod\n    def _get_detailed_instruct(task_description: str, query: str) -> str:\n        return f\"Instruct: {task_description}\\nQuery:{query}\"  # noqa: E231\n\n    def _create_embedding(\n        self,\n        sentences: Union[str, List[str]],\n        **kwargs,\n    ):\n        from packaging.version import Version\n        from vllm import PoolingParams\n        from vllm import __version__ as vllm_version\n\n        sentences = self._fix_langchain_openai_inputs(sentences)\n        model_uid = kwargs.pop(\"model_uid\", None)\n\n        normalize_embedding = kwargs.get(\"normalize_embedding\", True)\n        dimensions = kwargs.get(\"dimensions\", None)\n\n        assert self._model is not None\n\n        # Check and truncate sentences that exceed context_length\n        if self._context_length is not None:\n            truncated_sentences = []\n            for sentence in sentences if isinstance(sentences, list) else [sentences]:\n                # Use tokenizer to check token length\n                tokens = self._tokenizer(sentence, add_special_tokens=True)\n                if len(tokens.input_ids) > self._context_length:\n                    # Truncate to maximum length\n                    # Truncate one extra token to prevent overflow\n                    truncated_tokens = tokens.input_ids[: self._context_length - 1]\n                    truncated_sentence = self._tokenizer.decode(\n                        truncated_tokens, skip_special_tokens=True\n                    )\n                    truncated_sentences.append(truncated_sentence)\n                    logger.warning(\n                        f\"Sentence truncated from {len(tokens.input_ids)} tokens to {self._context_length} tokens\"\n                    )\n                else:\n                    truncated_sentences.append(sentence)\n\n            # If original input is string, maintain string format\n            if isinstance(sentences, str):\n                sentences = truncated_sentences[0]\n            else:\n                sentences = truncated_sentences\n        if Version(vllm_version) > Version(\"0.10.1\"):\n            pool_params = PoolingParams(\n                dimensions=dimensions, normalize=normalize_embedding\n            )\n        else:\n            if not normalize_embedding:\n                raise ValueError(\n                    f\"vLLM version {vllm_version} does not support \"\n                    f\"unnormalized embeddings. \"\n                    f\"Please upgrade to v0.10.1 or later.\"\n                )\n            pool_params = PoolingParams(dimensions=dimensions)\n        if self.model_family.model_name.startswith(\"Qwen3-VL-Embedding\"):\n            outputs = self._embed_vl(sentences)\n        else:\n            outputs = self._model.embed(\n                sentences, use_tqdm=False, pooling_params=pool_params\n            )\n        embedding_list = []\n        all_token_nums = 0\n        for index, output in enumerate(outputs):\n            embedding_list.append(\n                EmbeddingData(\n                    index=index, object=\"embedding\", embedding=output.outputs.embedding\n                )\n            )\n            if hasattr(output, \"prompt_token_ids\"):\n                all_token_nums += len(output.prompt_token_ids)\n        usage = EmbeddingUsage(\n            prompt_tokens=all_token_nums, total_tokens=all_token_nums\n        )\n        result = Embedding(\n            object=\"list\",\n            model=model_uid,\n            model_replica=self._model_uid,\n            data=embedding_list,\n            usage=usage,\n        )\n        self._clean_cache_if_needed(all_token_nums)\n\n        return result\n\n    def _embed_vl(\n        self, inputs: Union[str, List[str], Dict[str, Any], List[Dict[str, Any]]]\n    ):\n        import base64\n        import re\n        from io import BytesIO\n\n        from PIL import Image\n        from vllm.multimodal.utils import fetch_image\n\n        if isinstance(inputs, str):\n            normalized: List[Dict[str, Any]] = [{\"text\": inputs}]\n        elif isinstance(inputs, dict):\n            normalized = [inputs]\n        elif isinstance(inputs, list) and inputs and isinstance(inputs[0], str):\n            normalized = [{\"text\": item} for item in inputs]\n        elif isinstance(inputs, list):\n            normalized = cast(List[Dict[str, Any]], inputs)\n        else:\n            raise ValueError(\"Unsupported input type for Qwen3-VL embedding.\")\n\n        image_placeholder = \"<|vision_start|><|image_pad|><|vision_end|>\"\n        vllm_inputs: List[Dict[str, Any]] = []\n\n        def _load_image(val: Any) -> Any:\n            if isinstance(val, Image.Image):\n                return val.convert(\"RGB\")\n            if isinstance(val, str):\n                if re.match(r\"^data:image/.+;base64,\", val):\n                    base64_data = val.split(\",\", 1)[1]\n                    data = base64.b64decode(base64_data)\n                    return Image.open(BytesIO(data)).convert(\"RGB\")\n                if val.startswith((\"http://\", \"https://\", \"oss://\")):\n                    return fetch_image(val)\n                if os.path.exists(val):\n                    return Image.open(val).convert(\"RGB\")\n            return val\n\n        for item in normalized:\n            text = item.get(\"text\") if isinstance(item, dict) else None\n            image = item.get(\"image\") if isinstance(item, dict) else None\n            if image is not None:\n                image_obj = _load_image(image)\n                if text:\n                    prompt = f\"{image_placeholder}\\n{text}\"\n                else:\n                    prompt = image_placeholder\n                vllm_inputs.append(\n                    {\"prompt\": prompt, \"multi_modal_data\": {\"image\": image_obj}}\n                )\n            else:\n                vllm_inputs.append({\"prompt\": text or \"\"})\n\n        assert self._model is not None\n        return self._model.embed(vllm_inputs)\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"vllm\", \"vLLM\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls,\n        model_family: EmbeddingModelFamilyV2,\n        model_spec: EmbeddingSpecV1,\n        quantization: str,\n    ) -> Union[bool, Tuple[bool, str]]:\n\n        if model_family.model_name.startswith(\"Qwen3-VL-Embedding\"):\n            import vllm\n            from packaging import version\n\n            if version.parse(vllm.__version__) < version.parse(\"0.14.0\"):\n                return (\n                    False,\n                    f\"Qwen3-VL embedding requires vLLM>=0.14.0, current: {vllm.__version__}\",\n                )\n        if model_spec.model_format not in [\"pytorch\"]:\n            return False, \"vLLM embedding engine only supports pytorch format\"\n        prefix = model_family.model_name.split(\"-\", 1)[0]\n        if prefix not in SUPPORTED_MODELS_PREFIXES:\n            return (\n                False,\n                f\"Model family {model_family.model_name} is not in the supported prefix list for vLLM embeddings\",\n            )\n        return True\n\n    def wait_for_load(self):\n        # set context length after engine inited\n        self._set_context_length()\n\n    def _set_context_length(self):\n        \"\"\"Set context length\"\"\"\n        from packaging import version\n        from vllm import __version__ as vllm_version\n        from vllm import envs\n\n        # For vLLM >= 0.11.1, v1 is default; older versions rely on env var.\n        if version.parse(vllm_version) > version.parse(\"0.11.0\"):\n            use_v1 = True\n        else:\n            use_v1 = False\n            if hasattr(envs, \"VLLM_USE_V1\"):\n                try:\n                    use_v1 = envs.is_set(\"VLLM_USE_V1\") and envs.VLLM_USE_V1\n                except AttributeError:\n                    use_v1 = False\n\n        if not use_v1:\n            # v0\n            self._context_length = (\n                self._model.llm_engine.vllm_config.model_config.max_model_len\n            )\n        else:\n            # v1\n            logger.warning(\"vLLM v1 is not supported, ignore context length setting\")\n        logger.debug(\"Model context length: %s\", self._context_length)\n"
  },
  {
    "path": "xinference/model/embedding/vllm/tests/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/embedding/vllm/tests/test_vllm_embedding.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport shutil\n\nimport pytest\n\nfrom .....client import Client\nfrom ...cache_manager import EmbeddingCacheManager as CacheManager\nfrom ...core import (\n    EmbeddingModelFamilyV2,\n    TransformersEmbeddingSpecV1,\n    create_embedding_model_instance,\n)\nfrom ..core import VLLMEmbeddingModel\n\nTEST_MODEL_SPEC = EmbeddingModelFamilyV2(\n    version=2,\n    model_name=\"bge-small-en-v1.5\",\n    dimensions=384,\n    max_tokens=512,\n    language=[\"en\"],\n    model_specs=[\n        TransformersEmbeddingSpecV1(\n            model_format=\"pytorch\",\n            model_id=\"BAAI/bge-small-en-v1.5\",\n            quantization=\"none\",\n            model_hub=\"modelscope\",\n        )\n    ],\n)\n\n\n@pytest.mark.skipif(VLLMEmbeddingModel.check_lib() != True, reason=\"vllm not installed\")\nasync def test_embedding_model_with_vllm():\n    model_path = None\n\n    try:\n        model_path = CacheManager(TEST_MODEL_SPEC).cache()\n\n        model = create_embedding_model_instance(\n            \"mook\",\n            \"bge-small-en-v1.5\",\n            \"vllm\",\n            model_path=model_path,\n        )\n        model.load()\n\n        # input is a string\n        input_text = \"what is the capital of China?\"\n\n        # test sparse and dense\n        r = await model.create_embedding(input_text)\n        assert len(r[\"data\"]) == 1\n        assert len(r[\"data\"][0][\"embedding\"]) == 384\n\n        # input is a lit\n        input_texts = [\n            \"what is the capital of China?\",\n            \"how to implement quick sort in python?\",\n            \"Beijing\",\n            \"sorting algorithms\",\n        ]\n        # test sparse and dense\n        r = await model.create_embedding(input_texts)\n        assert len(r[\"data\"]) == 4\n        for d in r[\"data\"]:\n            assert len(d[\"embedding\"]) == 384\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n\n\n@pytest.mark.skipif(VLLMEmbeddingModel.check_lib() != True, reason=\"vllm not installed\")\nasync def test_embedding_model_with_vllm_long_text():\n    \"\"\"Test embedding model with text that exceeds 512 tokens.\"\"\"\n    model_path = None\n\n    try:\n        model_path = CacheManager(TEST_MODEL_SPEC).cache()\n\n        model = create_embedding_model_instance(\n            \"bge-small-en-v1.5\",\n            \"bge-small-en-v1.5\",\n            \"vllm\",\n            \"pytorch\",\n            \"none\",\n            model_path=model_path,\n        )\n        model.load()\n        model.wait_for_load()\n\n        # Create a long text that exceeds 512 tokens\n        # Each word is roughly 1-2 tokens, so we create a text with ~600 words to ensure >512 tokens\n        base_text = \"This is a very long text that is designed to exceed the maximum token limit of 512 tokens for the embedding model. \"\n        long_text = base_text * 20  # Repeat to create a very long text\n\n        # Add more content to ensure we definitely exceed 512 tokens\n        additional_content = (\n            \"We are testing the behavior of the VLLM embedding model when processing text that contains \"\n            \"significantly more tokens than the specified maximum limit. This test is important because \"\n            \"it helps us understand how the model handles token truncation or other processing strategies \"\n            \"when dealing with extremely long input sequences. The model should either truncate the input \"\n            \"or handle it gracefully without crashing. We expect the embedding dimension to remain consistent \"\n            \"at 384 dimensions regardless of the input length, as the model architecture should maintain \"\n            \"the same output dimensionality. This comprehensive test ensures robustness and reliability \"\n            \"of the embedding generation process under edge case conditions with very long text inputs.\"\n        )\n\n        long_text += additional_content\n\n        # Verify the text is indeed long (should be well over 512 tokens)\n        print(f\"Long text length in characters: {len(long_text)}\")\n        print(f\"Approximate word count: {len(long_text.split())}\")\n\n        # Test single long text\n        r = await model.create_embedding(long_text)\n        assert len(r[\"data\"]) == 1\n        assert len(r[\"data\"][0][\"embedding\"]) == 384\n\n        # Verify that token count is reported in usage\n        assert \"usage\" in r\n        assert \"prompt_tokens\" in r[\"usage\"]\n        print(f\"Reported token count: {r['usage']['prompt_tokens']}\")\n\n        # Test multiple long texts\n        long_texts = [\n            long_text,\n            long_text + \" Additional content for the second long text.\",\n            \"Another very long text: \" + long_text[: len(long_text) // 2],\n        ]\n\n        r_multiple = await model.create_embedding(long_texts)\n        assert len(r_multiple[\"data\"]) == 3\n        for d in r_multiple[\"data\"]:\n            assert len(d[\"embedding\"]) == 384\n\n        # Verify total token usage for multiple texts\n        assert r_multiple[\"usage\"][\"prompt_tokens\"] > r[\"usage\"][\"prompt_tokens\"]\n        print(\n            f\"Total token count for multiple texts: {r_multiple['usage']['prompt_tokens']}\"\n        )\n\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n\n\n@pytest.mark.skipif(VLLMEmbeddingModel.check_lib() != True, reason=\"vllm not installed\")\ndef test_change_dim(setup):\n    endpoint, _ = setup\n    client = Client(endpoint)\n    model_uid = client.launch_model(\n        model_name=\"Qwen3-Embedding-0.6B\",\n        model_type=\"embedding\",\n        model_engine=\"vllm\",\n    )\n\n    model = client.get_model(model_uid)\n\n    content = (\n        \"We are testing the behavior of the VLLM embedding model when processing text that contains \"\n        \"significantly more tokens than the specified maximum limit. This test is important because \"\n        \"it helps us understand how the model handles token truncation or other processing strategies \"\n        \"when dealing with extremely long input sequences. The model should either truncate the input \"\n        \"or handle it gracefully without crashing. We expect the embedding dimension to remain consistent \"\n        \"at 384 dimensions regardless of the input length, as the model architecture should maintain \"\n        \"the same output dimensionality. This comprehensive test ensures robustness and reliability \"\n        \"of the embedding generation process under edge case conditions with very long text inputs.\"\n    )\n\n    embeds = model.create_embedding(content, dimensions=500)\n    assert len(embeds[\"data\"][0][\"embedding\"]) == 500\n\n    embeds = model.create_embedding(content)\n    assert len(embeds[\"data\"][0][\"embedding\"]) == 1024\n"
  },
  {
    "path": "xinference/model/flexible/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport codecs\nimport json\nimport logging\nimport os\nimport warnings\n\nfrom ...constants import XINFERENCE_MODEL_DIR\nfrom .core import (\n    FLEXIBLE_MODEL_DESCRIPTIONS,\n    FlexibleModel,\n    FlexibleModelSpec,\n    generate_flexible_model_description,\n    get_flexible_model_descriptions,\n)\nfrom .custom import (\n    get_flexible_models,\n    register_flexible_model,\n    unregister_flexible_model,\n)\n\nlogger = logging.getLogger(__name__)\n\n\ndef register_custom_model():\n    from ..custom import migrate_from_v1_to_v2\n\n    # migrate from v1 to v2 first\n    migrate_from_v1_to_v2(\"flexible\", FlexibleModelSpec)\n\n    model_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"flexible\")\n    if os.path.isdir(model_dir):\n        for f in os.listdir(model_dir):\n            try:\n                with codecs.open(os.path.join(model_dir, f), encoding=\"utf-8\") as fd:\n                    model_spec = FlexibleModelSpec.parse_obj(json.load(fd))\n                    register_flexible_model(model_spec, persist=False)\n            except Exception as e:\n                warnings.warn(f\"{model_dir}/{f} has error, {e}\")\n\n\ndef _install():\n    register_custom_model()\n\n    # register model description\n    for model in get_flexible_models():\n        FLEXIBLE_MODEL_DESCRIPTIONS.update(generate_flexible_model_description(model))\n"
  },
  {
    "path": "xinference/model/flexible/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport logging\nfrom collections import defaultdict\nfrom typing import Dict, List, Optional\n\nfrom ..._compat import Literal\nfrom ..core import CacheableModelSpec, VirtualEnvSettings\nfrom ..utils import ModelInstanceInfoMixin\nfrom .utils import get_launcher\n\nlogger = logging.getLogger(__name__)\n\n\nclass FlexibleModelSpec(CacheableModelSpec, ModelInstanceInfoMixin):\n    version: Literal[1, 2] = 2\n    model_id: Optional[str]  # type: ignore\n    model_description: Optional[str]\n    model_uri: Optional[str]\n    launcher: str\n    launcher_args: Optional[str]\n    virtualenv: Optional[VirtualEnvSettings]\n\n    def parser_args(self):\n        return json.loads(self.launcher_args)\n\n    class Config:\n        extra = \"allow\"\n\n    def to_description(self):\n        return {\n            \"model_type\": \"flexible\",\n            \"address\": getattr(self, \"address\", None),\n            \"accelerators\": getattr(self, \"accelerators\", None),\n            \"model_name\": self.model_name,\n            \"launcher\": self.launcher,\n            \"launcher_args\": self.launcher_args,\n        }\n\n    def to_version_info(self):\n        return {\n            \"model_version\": self.model_name,\n            \"cache_status\": True,\n            \"model_file_location\": self.model_uri,\n            \"launcher\": self.launcher,\n            \"launcher_args\": self.launcher_args,\n        }\n\n\ndef generate_flexible_model_description(\n    model_spec: FlexibleModelSpec,\n) -> Dict[str, List[Dict]]:\n    res = defaultdict(list)\n    res[model_spec.model_name].append(model_spec.to_version_info())\n    return res\n\n\nFLEXIBLE_MODELS: List[FlexibleModelSpec] = []\nFLEXIBLE_MODEL_DESCRIPTIONS: Dict[str, List[Dict]] = defaultdict(list)\n\n\ndef get_flexible_model_descriptions():\n    import copy\n\n    return copy.deepcopy(FLEXIBLE_MODEL_DESCRIPTIONS)\n\n\nclass FlexibleModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_family: FlexibleModelSpec,\n        device: Optional[str] = None,\n        config: Optional[Dict] = None,\n    ):\n        self.model_family = model_family\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._device = device\n        self._config = config\n\n    def load(self):\n        \"\"\"\n        Load the model.\n        \"\"\"\n\n    def infer(self, *args, **kwargs):\n        \"\"\"\n        Call model to inference.\n        \"\"\"\n        raise NotImplementedError(\"infer method not implemented.\")\n\n    @property\n    def model_uid(self):\n        return self._model_uid\n\n    @property\n    def model_path(self):\n        return self._model_path\n\n    @property\n    def device(self):\n        return self._device\n\n    @property\n    def config(self):\n        return self._config\n\n\ndef match_flexible_model(model_name):\n    from .custom import get_flexible_models\n\n    for model_spec in get_flexible_models():\n        if model_name == model_spec.model_name:\n            return model_spec\n    return None\n\n\ndef create_flexible_model_instance(\n    model_uid: str,\n    model_name: str,\n    model_path: Optional[str] = None,\n    **kwargs,\n) -> FlexibleModel:\n    model_spec = match_flexible_model(model_name)\n    if not model_path:\n        model_path = model_spec.model_uri\n    launcher_name = model_spec.launcher\n    launcher_args = model_spec.parser_args()\n    kwargs.update(launcher_args)\n\n    model = get_launcher(launcher_name)(\n        model_uid=model_uid, model_spec=model_spec, **kwargs\n    )\n\n    return model\n"
  },
  {
    "path": "xinference/model/flexible/custom.py",
    "content": "from typing import TYPE_CHECKING\n\nfrom ..custom import ModelRegistry\n\nif TYPE_CHECKING:\n    from .core import FlexibleModelSpec\n\n\nclass FlexibleModelRegistry(ModelRegistry):\n    model_type = \"flexible\"\n\n    def __init__(self):\n        from .core import FLEXIBLE_MODELS\n\n        super().__init__()\n        self.models = FLEXIBLE_MODELS\n        self.builtin_models = []\n\n    def register(self, model_spec: \"FlexibleModelSpec\", persist: bool):\n        from ..cache_manager import CacheManager\n        from ..utils import is_valid_model_name, is_valid_model_uri\n\n        if not is_valid_model_name(model_spec.model_name):\n            raise ValueError(f\"Invalid model name {model_spec.model_name}.\")\n\n        model_uri = model_spec.model_uri\n        if model_uri and not is_valid_model_uri(model_uri):\n            raise ValueError(f\"Invalid model URI {model_uri}.\")\n\n        if model_spec.launcher_args:\n            try:\n                model_spec.parser_args()\n            except Exception:\n                raise ValueError(\n                    f\"Invalid model launcher args {model_spec.launcher_args}.\"\n                )\n\n        with self.lock:\n            for model_name in [spec.model_name for spec in self.models]:\n                if model_spec.model_name == model_name:\n                    raise ValueError(\n                        f\"Model name conflicts with existing model {model_spec.model_name}\"\n                    )\n            self.models.append(model_spec)\n\n        if persist:\n            cache_manager = CacheManager(model_spec)\n            cache_manager.register_custom_model(self.model_type)\n\n\ndef get_flexible_models():\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"flexible\")\n    return registry.get_custom_models()\n\n\ndef register_flexible_model(model_spec: \"FlexibleModelSpec\", persist: bool):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"flexible\")\n    registry.register(model_spec, persist)\n\n\ndef unregister_flexible_model(model_name: str, raise_error: bool = True):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"flexible\")\n    registry.unregister(model_name, raise_error)\n"
  },
  {
    "path": "xinference/model/flexible/launchers/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom .image_process_launcher import launcher as image_process\nfrom .modelscope_launcher import launcher as modelscope\nfrom .transformers_launcher import launcher as transformers\nfrom .yolo_launcher import launcher as yolo\n"
  },
  {
    "path": "xinference/model/flexible/launchers/image_process_launcher.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nfrom io import BytesIO\n\nimport PIL.Image\nimport PIL.ImageOps\n\nfrom ....types import Image\nfrom ..core import FlexibleModel, FlexibleModelSpec\n\n\nclass ImageRemoveBackgroundModel(FlexibleModel):\n    def infer(self, *args, **kwargs):\n        invert = kwargs.get(\"invert\", False)\n        b64_image: str = kwargs.get(\"image\")  # type: ignore\n        only_mask = kwargs.pop(\"only_mask\", True)\n        image_format = kwargs.pop(\"image_format\", \"PNG\")\n        if not b64_image:\n            raise ValueError(\"No image found to remove background\")\n        image = base64.b64decode(b64_image)\n\n        try:\n            from rembg import remove\n        except ImportError:\n            error_message = \"Failed to import module 'rembg'\"\n            installation_guide = [\n                \"Please make sure 'rembg' is installed. \",\n                \"You can install it by visiting the installation section of the git repo:\\n\",\n                \"https://github.com/danielgatis/rembg?tab=readme-ov-file#installation\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        im = PIL.Image.open(BytesIO(image))\n        om = remove(im, only_mask=only_mask, **kwargs)\n        if invert:\n            om = PIL.ImageOps.invert(om)\n\n        buffered = BytesIO()\n        om.save(buffered, format=image_format)\n        img_str = base64.b64encode(buffered.getvalue()).decode()\n        return Image(url=None, b64_json=img_str)\n\n\ndef launcher(model_uid: str, model_spec: FlexibleModelSpec, **kwargs) -> FlexibleModel:\n    task = kwargs.get(\"task\")\n    device = kwargs.get(\"device\")\n\n    if task == \"remove_background\":\n        return ImageRemoveBackgroundModel(\n            model_uid=model_uid,\n            model_path=model_spec.model_uri,  # type: ignore\n            model_family=model_spec,\n            device=device,\n            config=kwargs,\n        )\n    else:\n        raise ValueError(f\"Unknown Task for image processing: {task}\")\n"
  },
  {
    "path": "xinference/model/flexible/launchers/modelscope_launcher.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom ..core import FlexibleModel, FlexibleModelSpec\n\n\nclass ModelScopePipelineModel(FlexibleModel):\n    def load(self):\n        # we have to move import here,\n        # modelscope cannot be compatible with datasets>3.2.0\n        # if put outside, it will just raise error\n        # when enabled virtualenv,\n        # we can make sure mdoelscope works well\n        from modelscope.pipelines import pipeline\n\n        config = dict(self.config or {})\n        if self._device:\n            config[\"device\"] = self._device\n        self._pipeline = pipeline(model=self._model_path, **config)\n\n    def infer(self, *args, **kwargs):\n        return self._pipeline(*args, **kwargs)\n\n\ndef launcher(model_uid: str, model_spec: FlexibleModelSpec, **kwargs) -> FlexibleModel:\n    device = kwargs.get(\"device\")\n    if not kwargs.get(\"task\"):\n        raise ValueError(\"modelscope launcher requires `task`\")\n\n    model_path = model_spec.model_uri\n    if model_path is None:\n        raise ValueError(\"model_path required\")\n\n    return ModelScopePipelineModel(\n        model_uid=model_uid,\n        model_path=model_path,\n        model_family=model_spec,\n        device=device,\n        config=kwargs,\n    )\n"
  },
  {
    "path": "xinference/model/flexible/launchers/transformers_launcher.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom transformers import pipeline\n\nfrom ..core import FlexibleModel, FlexibleModelSpec\n\n\nclass MockModel(FlexibleModel):\n    def infer(self, *args, **kwargs):\n        return kwargs\n\n\nclass AutoModel(FlexibleModel):\n    def load(self):\n        config = self.config or {}\n        self._pipeline = pipeline(model=self.model_path, device=self.device, **config)\n\n    def infer(self, *args, **kwargs):\n        return self._pipeline(*args, **kwargs)\n\n\nclass TransformersTextClassificationModel(FlexibleModel):\n    def load(self):\n        config = self.config or {}\n\n        self._pipeline = pipeline(model=self._model_path, device=self._device, **config)\n\n    def infer(self, *args, **kwargs):\n        return self._pipeline(*args, **kwargs)\n\n\ndef launcher(model_uid: str, model_spec: FlexibleModelSpec, **kwargs) -> FlexibleModel:\n    task = kwargs.get(\"task\")\n    device = kwargs.get(\"device\")\n\n    model_path = model_spec.model_uri\n    if model_path is None:\n        raise ValueError(\"model_path required\")\n\n    if task == \"text-classification\":\n        return TransformersTextClassificationModel(\n            model_uid=model_uid,\n            model_path=model_path,\n            model_family=model_spec,\n            device=device,\n            config=kwargs,\n        )\n    elif task == \"mock\":\n        return MockModel(\n            model_uid=model_uid,\n            model_path=model_path,\n            model_family=model_spec,\n            device=device,\n            config=kwargs,\n        )\n    else:\n        return AutoModel(\n            model_uid=model_uid,\n            model_path=model_path,\n            model_family=model_spec,\n            device=device,\n            config=kwargs,\n        )\n"
  },
  {
    "path": "xinference/model/flexible/launchers/yolo_launcher.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nimport inspect\nimport io\nimport json\n\nimport PIL.Image\n\nfrom ..core import FlexibleModel, FlexibleModelSpec\n\n\nclass UltralyticsModel(FlexibleModel):\n    def load(self):\n        from ultralytics import YOLO\n\n        config = dict(self.config or {})\n        if self._device:\n            config[\"device\"] = self._device\n\n        self._model = YOLO(model=self._model_path, **config)\n\n    def infer(self, *args, **kwargs):\n        predict_func = self._model.predict\n\n        sig = inspect.signature(predict_func)\n        bound_args = sig.bind_partial(*args, **kwargs)  # 或 bind() 视场景选择\n        bound_args.apply_defaults()\n\n        if \"source\" in bound_args.arguments:\n            source = bound_args.arguments[\"source\"]\n            decoded = base64.b64decode(source)\n            img = PIL.Image.open(io.BytesIO(decoded))\n\n            bound_args.arguments[\"source\"] = img\n\n        results = predict_func(*bound_args.args, **bound_args.kwargs)\n        return [json.loads(r.to_json()) for r in results]\n\n\ndef launcher(model_uid: str, model_spec: FlexibleModelSpec, **kwargs) -> FlexibleModel:\n    device = kwargs.get(\"device\")\n\n    model_path = model_spec.model_uri\n    if model_path is None:\n        raise ValueError(\"model_path required\")\n\n    return UltralyticsModel(\n        model_uid=model_uid,\n        model_path=model_path,\n        model_family=model_spec,\n        device=device,\n        config=kwargs,\n    )\n"
  },
  {
    "path": "xinference/model/flexible/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/flexible/tests/test_flexible_models.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport shutil\nimport tempfile\n\n\ndef test_register_flexible_model():\n    from ..core import FlexibleModelSpec\n    from ..custom import register_flexible_model, unregister_flexible_model\n\n    tmp_dir = tempfile.mkdtemp()\n\n    model_spec = FlexibleModelSpec(\n        model_name=\"flexible_model\",\n        model_uri=os.path.abspath(tmp_dir),\n        launcher=\"xinference.model.flexible.launchers.transformers\",\n    )\n\n    register_flexible_model(model_spec, persist=False)\n\n    unregister_flexible_model(\"flexible_model\")\n\n    shutil.rmtree(tmp_dir, ignore_errors=True)\n\n\ndef test_model():\n    from ..core import FlexibleModelSpec\n    from ..utils import get_launcher\n\n    launcher = get_launcher(\"xinference.model.flexible.launchers.transformers\")\n    model = launcher(\n        model_uid=\"flexible_model\",\n        model_spec=FlexibleModelSpec(\n            model_name=\"mock\",\n            model_uri=\"mock\",\n            launcher=\"xinference.model.flexible.launchers.transformers\",\n        ),\n        task=\"mock\",\n    )\n\n    model.load()\n\n    result = model.infer(inputs=\"hello world\")\n    # assert result == {\"inputs\": \"hello world\"}\n    assert result is not None\n    assert \"inputs\" in result\n    assert result[\"inputs\"] == \"hello world\"\n"
  },
  {
    "path": "xinference/model/flexible/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport importlib\n\n\ndef get_launcher(launcher_name: str):\n    try:\n        i = launcher_name.rfind(\".\")\n        if i != -1:\n            module = importlib.import_module(launcher_name[:i])\n            fn = getattr(module, launcher_name[i + 1 :])\n        else:\n            importlib.import_module(launcher_name)\n            fn = locals().get(launcher_name)\n\n        if fn is None:\n            raise ValueError(f\"Launcher {launcher_name} not found.\")\n\n        return fn\n    except ImportError as e:\n        raise ImportError(f\"Failed to import {launcher_name}: {e}\")\n"
  },
  {
    "path": "xinference/model/image/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport codecs\nimport json\nimport os\nimport warnings\n\nfrom ...constants import XINFERENCE_MODEL_DIR\nfrom ..utils import flatten_model_src, flatten_quantizations\nfrom .core import (\n    BUILTIN_IMAGE_MODELS,\n    IMAGE_MODEL_DESCRIPTIONS,\n    ImageModelFamilyV2,\n    generate_image_description,\n    get_image_model_descriptions,\n)\nfrom .custom import (\n    CustomImageModelFamilyV2,\n    get_user_defined_images,\n    register_image,\n    unregister_image,\n)\nfrom .engine import register_builtin_image_engines\nfrom .engine_family import (\n    generate_engine_config_by_model_name as generate_image_engine_config,\n)\nfrom .ocr import register_builtin_ocr_engines\nfrom .ocr.ocr_family import generate_engine_config_by_model_name\n\n\ndef register_custom_model():\n    from ...constants import XINFERENCE_MODEL_DIR\n    from ..custom import migrate_from_v1_to_v2\n\n    # migrate from v1 to v2 first\n    migrate_from_v1_to_v2(\"image\", CustomImageModelFamilyV2)\n\n    user_defined_image_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"image\")\n    if os.path.isdir(user_defined_image_dir):\n        for f in os.listdir(user_defined_image_dir):\n            try:\n                with codecs.open(\n                    os.path.join(user_defined_image_dir, f), encoding=\"utf-8\"\n                ) as fd:\n                    user_defined_image_family = CustomImageModelFamilyV2.parse_obj(\n                        json.load(fd)\n                    )\n                    register_image(user_defined_image_family, persist=False)\n            except Exception as e:\n                warnings.warn(f\"{user_defined_image_dir}/{f} has error, {e}\")\n\n\ndef _install():\n    # Install models with intelligent merging based on timestamps\n    from ..utils import install_models_with_merge\n\n    install_models_with_merge(\n        BUILTIN_IMAGE_MODELS,\n        \"model_spec.json\",\n        \"image\",\n        \"image_models.json\",\n        has_downloaded_models,\n        load_model_family_from_json,\n    )\n\n    # register model description\n    for model_name, model_specs in BUILTIN_IMAGE_MODELS.items():\n        model_spec = [x for x in model_specs if x.model_hub == \"huggingface\"][0]\n        IMAGE_MODEL_DESCRIPTIONS.update(generate_image_description(model_spec))\n\n    register_builtin_image_engines()\n    register_builtin_ocr_engines()\n    for model_specs in BUILTIN_IMAGE_MODELS.values():\n        for model_spec in model_specs:\n            if model_spec.model_ability and \"ocr\" not in model_spec.model_ability:\n                generate_image_engine_config(model_spec)\n            if model_spec.model_ability and \"ocr\" in model_spec.model_ability:\n                generate_engine_config_by_model_name(model_spec)\n\n    register_custom_model()\n\n    for ud_image in get_user_defined_images():\n        IMAGE_MODEL_DESCRIPTIONS.update(generate_image_description(ud_image))\n        if ud_image.model_ability and \"ocr\" not in ud_image.model_ability:\n            generate_image_engine_config(ud_image)\n        if ud_image.model_ability and \"ocr\" in ud_image.model_ability:\n            generate_engine_config_by_model_name(ud_image)\n\n\ndef register_builtin_model():\n    \"\"\"Register built-in image models.\"\"\"\n    _install()\n\n\ndef has_downloaded_models():\n    \"\"\"Check if downloaded JSON configurations exist.\"\"\"\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"image\")\n    json_file_path = os.path.join(builtin_dir, \"image_models.json\")\n    return os.path.exists(json_file_path)\n\n\ndef load_downloaded_models():\n    \"\"\"Load downloaded JSON configurations from the builtin directory.\"\"\"\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"image\")\n    json_file_path = os.path.join(builtin_dir, \"image_models.json\")\n\n    try:\n        load_model_family_from_json(json_file_path, BUILTIN_IMAGE_MODELS)\n    except Exception as e:\n        warnings.warn(\n            f\"Failed to load downloaded image models from {json_file_path}: {e}\"\n        )\n        # Fall back to built-in models if download fails\n        load_model_family_from_json(\"model_spec.json\", BUILTIN_IMAGE_MODELS)\n\n\ndef load_model_family_from_json(json_filename, target_families):\n    # Handle both relative (module directory) and absolute paths\n    if os.path.isabs(json_filename):\n        json_path = json_filename\n    else:\n        json_path = os.path.join(os.path.dirname(__file__), json_filename)\n\n    flattened_model_specs = []\n    for spec in json.load(codecs.open(json_path, \"r\", encoding=\"utf-8\")):\n        base_info = {\n            key: value\n            for key, value in spec.items()\n            if key not in (\"model_src\", \"model_specs\")\n        }\n        if \"model_specs\" in spec:\n            for model_spec in spec[\"model_specs\"]:\n                spec_base = base_info.copy()\n                spec_base.update(\n                    {k: v for k, v in model_spec.items() if k != \"model_src\"}\n                )\n                if \"model_src\" in model_spec:\n                    spec_entry = spec_base.copy()\n                    spec_entry[\"model_src\"] = model_spec[\"model_src\"]\n                    if any(\n                        \"quantizations\" in hub_info\n                        for hub_info in model_spec[\"model_src\"].values()\n                    ):\n                        flattened_model_specs.extend(flatten_quantizations(spec_entry))\n                    else:\n                        flattened_model_specs.extend(flatten_model_src(spec_entry))\n                else:\n                    flattened_model_specs.append(spec_base)\n        else:\n            flattened_model_specs.extend(flatten_model_src(spec))\n\n    for spec in flattened_model_specs:\n        if spec[\"model_name\"] not in target_families:\n            target_families[spec[\"model_name\"]] = [ImageModelFamilyV2(**spec)]\n        else:\n            target_families[spec[\"model_name\"]].append(ImageModelFamilyV2(**spec))\n\n    del json_path\n"
  },
  {
    "path": "xinference/model/image/cache_manager.py",
    "content": "import os\nfrom typing import Optional\n\nfrom ..cache_manager import CacheManager\n\n\nclass ImageCacheManager(CacheManager):\n    def __init__(self, model_family):\n        super().__init__(model_family)\n        model_format = getattr(model_family, \"model_format\", None)\n        quantization = getattr(model_family, \"quantization\", None)\n        suffix_parts = []\n        if model_format:\n            suffix_parts.append(model_format)\n        if quantization:\n            suffix_parts.append(quantization)\n        if suffix_parts:\n            suffix = \"-\".join(suffix_parts)\n            self._cache_dir = os.path.join(\n                self._v2_cache_dir_prefix,\n                f\"{self._model_family.model_name.replace('.', '_')}-{suffix}\",\n            )\n\n    def cache_gguf(self, quantization: Optional[str] = None):\n        from ..utils import IS_NEW_HUGGINGFACE_HUB, retry_download, symlink_local_file\n        from .core import ImageModelFamilyV2\n\n        if not quantization:\n            return None\n\n        assert isinstance(self._model_family, ImageModelFamilyV2)\n        cache_dir = self.get_cache_dir()\n\n        if not self._model_family.gguf_model_file_name_template:\n            raise NotImplementedError(\n                f\"{self._model_family.model_name} does not support GGUF quantization\"\n            )\n        if quantization not in (self._model_family.gguf_quantizations or []):\n            raise ValueError(\n                f\"Cannot support quantization {quantization}, \"\n                f\"available quantizations: {self._model_family.gguf_quantizations}\"\n            )\n\n        filename = self._model_family.gguf_model_file_name_template.format(quantization=quantization)  # type: ignore\n        full_path = os.path.join(cache_dir, filename)\n\n        if self._model_family.model_hub == \"huggingface\":\n            import huggingface_hub\n\n            use_symlinks = {}\n            if not IS_NEW_HUGGINGFACE_HUB:\n                use_symlinks = {\"local_dir_use_symlinks\": True, \"local_dir\": cache_dir}\n            download_file_path = retry_download(\n                huggingface_hub.hf_hub_download,\n                self._model_family.model_name,\n                None,\n                self._model_family.gguf_model_id,\n                filename=filename,\n                **use_symlinks,\n            )\n            if IS_NEW_HUGGINGFACE_HUB:\n                symlink_local_file(download_file_path, cache_dir, filename)\n        elif self._model_family.model_hub == \"modelscope\":\n            from modelscope.hub.file_download import model_file_download\n\n            download_file_path = retry_download(\n                model_file_download,\n                self._model_family.model_name,\n                None,\n                self._model_family.gguf_model_id,\n                filename,\n                revision=self._model_family.model_revision,\n            )\n            symlink_local_file(download_file_path, cache_dir, filename)\n        else:\n            raise NotImplementedError\n\n        return full_path\n\n    def cache_lightning(self, lightning_version: Optional[str] = None):\n        from ..utils import IS_NEW_HUGGINGFACE_HUB, retry_download, symlink_local_file\n        from .core import ImageModelFamilyV2\n\n        if not lightning_version:\n            return None\n\n        assert isinstance(self._model_family, ImageModelFamilyV2)\n        cache_dir = self.get_cache_dir()\n\n        if not self._model_family.lightning_model_file_name_template:\n            raise NotImplementedError(\n                f\"{self._model_family.model_name} does not support lightning\"\n            )\n        if lightning_version not in (self._model_family.lightning_versions or []):\n            raise ValueError(\n                f\"Cannot support lightning version {lightning_version}, \"\n                f\"available lightning version: {self._model_family.lightning_versions}\"\n            )\n\n        filename = self._model_family.lightning_model_file_name_template.format(lightning_version=lightning_version)  # type: ignore\n        full_path = os.path.join(cache_dir, filename)\n\n        if self._model_family.model_hub == \"huggingface\":\n            import huggingface_hub\n\n            use_symlinks = {}\n            if not IS_NEW_HUGGINGFACE_HUB:\n                use_symlinks = {\"local_dir_use_symlinks\": True, \"local_dir\": cache_dir}\n            download_file_path = retry_download(\n                huggingface_hub.hf_hub_download,\n                self._model_family.model_name,\n                None,\n                self._model_family.lightning_model_id,\n                filename=filename,\n                **use_symlinks,\n            )\n            if IS_NEW_HUGGINGFACE_HUB:\n                symlink_local_file(download_file_path, cache_dir, filename)\n        elif self._model_family.model_hub == \"modelscope\":\n            from modelscope.hub.file_download import model_file_download\n\n            download_file_path = retry_download(\n                model_file_download,\n                self._model_family.model_name,\n                None,\n                self._model_family.lightning_model_id,\n                filename,\n                revision=self._model_family.model_revision,\n            )\n            symlink_local_file(download_file_path, cache_dir, filename)\n        else:\n            raise NotImplementedError\n\n        return full_path\n"
  },
  {
    "path": "xinference/model/image/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport collections.abc\nimport logging\nfrom collections import defaultdict\nfrom typing import Dict, List, Literal, Optional, Union, cast\n\nfrom ...types import PeftModelConfig\nfrom ..core import CacheableModelSpec, VirtualEnvSettings\nfrom ..utils import ModelInstanceInfoMixin\nfrom .engine_family import ImageEngineModel\nfrom .ocr.ocr_family import OCRModel\n\nlogger = logging.getLogger(__name__)\n\nIMAGE_MODEL_DESCRIPTIONS: Dict[str, List[Dict]] = defaultdict(list)\nBUILTIN_IMAGE_MODELS: Dict[str, List[\"ImageModelFamilyV2\"]] = {}\n\n\ndef get_image_model_descriptions():\n    import copy\n\n    return copy.deepcopy(IMAGE_MODEL_DESCRIPTIONS)\n\n\nclass ImageModelFamilyV2(CacheableModelSpec, ModelInstanceInfoMixin):\n    version: Literal[2] = 2\n    model_family: str\n    model_name: str\n    model_id: str\n    model_revision: str\n    model_hub: str = \"huggingface\"\n    model_ability: Optional[List[str]]\n    controlnet: Optional[List[\"ImageModelFamilyV2\"]]\n    default_model_config: Optional[dict] = {}\n    default_generate_config: Optional[dict] = {}\n    gguf_model_id: Optional[str]\n    gguf_quantizations: Optional[List[str]]\n    gguf_model_file_name_template: Optional[str]\n    lightning_model_id: Optional[str]\n    lightning_versions: Optional[List[str]]\n    lightning_model_file_name_template: Optional[str]\n\n    virtualenv: Optional[VirtualEnvSettings]\n\n    class Config:\n        extra = \"allow\"\n\n    def to_description(self):\n        if self.controlnet is not None:\n            controlnet = [cn.dict() for cn in self.controlnet]\n        else:\n            controlnet = self.controlnet\n        return {\n            \"model_type\": \"image\",\n            \"address\": getattr(self, \"address\", None),\n            \"accelerators\": getattr(self, \"accelerators\", None),\n            \"model_name\": self.model_name,\n            \"model_family\": self.model_family,\n            \"model_revision\": self.model_revision,\n            \"model_ability\": self.model_ability,\n            \"controlnet\": controlnet,\n        }\n\n    def to_version_info(self):\n        from .cache_manager import ImageCacheManager\n        from .utils import get_model_version\n\n        cache_manager = ImageCacheManager(self)\n\n        if not self.controlnet:\n            return [\n                {\n                    \"model_version\": get_model_version(self, None),\n                    \"model_file_location\": cache_manager.get_cache_dir(),\n                    \"cache_status\": cache_manager.get_cache_status(),\n                    \"controlnet\": \"zoe-depth\",\n                }\n            ]\n        else:\n            res = []\n            for cn in self.controlnet:\n                res.append(\n                    {\n                        \"model_version\": get_model_version(self, cn),\n                        \"model_file_location\": cache_manager.get_cache_dir(),\n                        \"cache_status\": cache_manager.get_cache_status(),\n                        \"controlnet\": cn.model_name,\n                    }\n                )\n            return res\n\n\ndef generate_image_description(\n    image_model: ImageModelFamilyV2,\n) -> Dict[str, List[Dict]]:\n    res = defaultdict(list)\n    res[image_model.model_name].extend(image_model.to_version_info())\n    return res\n\n\ndef match_diffusion(\n    model_name: str,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n) -> ImageModelFamilyV2:\n    from ..utils import download_from_modelscope\n    from . import BUILTIN_IMAGE_MODELS\n    from .custom import get_user_defined_images\n\n    for model_spec in get_user_defined_images():\n        if model_spec.model_name == model_name:\n            return model_spec\n\n    if model_name in BUILTIN_IMAGE_MODELS:\n        if download_hub == \"modelscope\" or download_from_modelscope():\n            return (\n                [\n                    x\n                    for x in BUILTIN_IMAGE_MODELS[model_name]\n                    if x.model_hub == \"modelscope\"\n                ]\n                + [\n                    x\n                    for x in BUILTIN_IMAGE_MODELS[model_name]\n                    if x.model_hub == \"huggingface\"\n                ]\n            )[0]\n        else:\n            return [\n                x\n                for x in BUILTIN_IMAGE_MODELS[model_name]\n                if x.model_hub == \"huggingface\"\n            ][0]\n    else:\n        raise ValueError(\n            f\"Image model {model_name} not found, available\"\n            f\"model list: {BUILTIN_IMAGE_MODELS.keys()}\"\n        )\n\n\ndef create_ocr_model_instance(\n    model_uid: str,\n    model_spec: ImageModelFamilyV2,\n    model_engine: Optional[str] = None,\n    model_path: Optional[str] = None,\n    **kwargs,\n) -> OCRModel:\n    from .cache_manager import ImageCacheManager\n    from .ocr.ocr_family import (\n        check_engine_by_model_name_and_engine,\n        check_engine_by_model_name_and_engine_with_virtual_env,\n    )\n\n    enable_virtual_env = kwargs.pop(\"enable_virtual_env\", None)\n    if not model_path:\n        cache_manager = ImageCacheManager(model_spec)\n        model_path = cache_manager.cache()\n\n    if model_engine is None:\n        model_engine = \"transformers\"\n\n    model_format = getattr(model_spec, \"model_format\", None)\n    quantization = getattr(model_spec, \"quantization\", None)\n    if enable_virtual_env is None:\n        from ...constants import XINFERENCE_ENABLE_VIRTUAL_ENV\n\n        enable_virtual_env = XINFERENCE_ENABLE_VIRTUAL_ENV\n\n    if enable_virtual_env:\n        ocr_cls = check_engine_by_model_name_and_engine_with_virtual_env(\n            model_engine,\n            model_spec.model_name,\n            model_format,\n            quantization,\n            model_family=model_spec,\n        )\n    else:\n        ocr_cls = check_engine_by_model_name_and_engine(\n            model_engine,\n            model_spec.model_name,\n            model_format,\n            quantization,\n        )\n    return ocr_cls(\n        model_uid,\n        model_path,\n        model_spec=model_spec,\n        **kwargs,\n    )\n\n\ndef create_image_model_instance(\n    model_uid: str,\n    model_name: str,\n    peft_model_config: Optional[PeftModelConfig] = None,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n    model_path: Optional[str] = None,\n    model_engine: Optional[str] = None,\n    model_format: Optional[str] = None,\n    quantization: Optional[str] = None,\n    gguf_quantization: Optional[str] = None,\n    gguf_model_path: Optional[str] = None,\n    lightning_version: Optional[str] = None,\n    lightning_model_path: Optional[str] = None,\n    **kwargs,\n) -> Union[\n    ImageEngineModel,\n    OCRModel,\n]:\n    from .cache_manager import ImageCacheManager\n\n    enable_virtual_env = kwargs.pop(\"enable_virtual_env\", None)\n    model_spec = match_diffusion(model_name, download_hub)\n    if model_spec.model_ability and \"ocr\" in model_spec.model_ability:\n        model_spec = _select_ocr_model_family(\n            model_name,\n            model_engine or \"transformers\",\n            download_hub,\n            model_format=model_format,\n            quantization=quantization,\n        )\n        return create_ocr_model_instance(\n            model_uid=model_uid,\n            model_spec=model_spec,\n            model_engine=model_engine,\n            model_path=model_path,\n            **kwargs,\n        )\n\n    # use default model config\n    model_default_config = (model_spec.default_model_config or {}).copy()\n    model_default_config.update(kwargs)\n    kwargs = model_default_config\n\n    controlnet = kwargs.get(\"controlnet\")\n    # Handle controlnet\n    if controlnet is not None:\n        if isinstance(controlnet, str):\n            controlnet = [controlnet]\n        elif not isinstance(controlnet, collections.abc.Sequence):\n            raise ValueError(\"controlnet should be a str or a list of str.\")\n        elif set(controlnet) != len(controlnet):\n            raise ValueError(\"controlnet should be a list of unique str.\")\n        elif not model_spec.controlnet:\n            raise ValueError(f\"Model {model_name} has empty controlnet list.\")\n\n        controlnet_model_paths = []\n        assert model_spec.controlnet is not None\n        for name in controlnet:\n            for cn_model_spec in model_spec.controlnet:\n                if cn_model_spec.model_name == name:\n                    cn_cache_manager = ImageCacheManager(cn_model_spec)\n                    controlnet_model_path = cn_cache_manager.cache()\n                    controlnet_model_paths.append(controlnet_model_path)\n                    break\n            else:\n                raise ValueError(\n                    f\"controlnet `{name}` is not supported for model `{model_name}`.\"\n                )\n        if len(controlnet_model_paths) == 1:\n            kwargs[\"controlnet\"] = (controlnet[0], controlnet_model_paths[0])\n        else:\n            kwargs[\"controlnet\"] = [\n                (n, path) for n, path in zip(controlnet, controlnet_model_paths)\n            ]\n    cache_manager = ImageCacheManager(model_spec)\n    if not model_path:\n        model_path = cache_manager.cache()\n    if not gguf_model_path and gguf_quantization:\n        gguf_model_path = cache_manager.cache_gguf(gguf_quantization)\n    if not lightning_model_path and lightning_version:\n        lightning_model_path = cache_manager.cache_lightning(lightning_version)\n    if peft_model_config is not None:\n        lora_model = peft_model_config.peft_model\n        lora_load_kwargs = peft_model_config.image_lora_load_kwargs\n        lora_fuse_kwargs = peft_model_config.image_lora_fuse_kwargs\n    else:\n        lora_model = None\n        lora_load_kwargs = None\n        lora_fuse_kwargs = None\n\n    from .engine_family import (\n        check_engine_by_model_name_and_engine,\n        check_engine_by_model_name_and_engine_with_virtual_env,\n    )\n\n    if model_engine is None:\n        model_engine = \"diffusers\"\n\n    if enable_virtual_env is None:\n        from ...constants import XINFERENCE_ENABLE_VIRTUAL_ENV\n\n        enable_virtual_env = XINFERENCE_ENABLE_VIRTUAL_ENV\n\n    if enable_virtual_env:\n        model_cls = check_engine_by_model_name_and_engine_with_virtual_env(\n            model_engine,\n            model_spec.model_name,\n            model_format,\n            quantization,\n            model_family=model_spec,\n        )\n    else:\n        model_cls = check_engine_by_model_name_and_engine(\n            model_engine,\n            model_spec.model_name,\n            model_format,\n            quantization,\n        )\n\n    model = model_cls(\n        model_uid,\n        model_path,\n        lora_model=lora_model,\n        lora_load_kwargs=lora_load_kwargs,\n        lora_fuse_kwargs=lora_fuse_kwargs,\n        model_spec=model_spec,\n        gguf_model_path=gguf_model_path,\n        lightning_model_path=lightning_model_path,\n        **kwargs,\n    )\n    return model\n\n\ndef _select_ocr_model_family(\n    model_name: str,\n    model_engine: str,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ],\n    model_format: Optional[str] = None,\n    quantization: Optional[str] = None,\n) -> ImageModelFamilyV2:\n    from ..utils import download_from_modelscope\n    from . import BUILTIN_IMAGE_MODELS\n    from .custom import get_user_defined_images\n\n    candidates: List[ImageModelFamilyV2] = []\n    for model_spec in get_user_defined_images():\n        if model_spec.model_name == model_name:\n            candidates.append(model_spec)\n\n    if not candidates and model_name in BUILTIN_IMAGE_MODELS:\n        candidates = BUILTIN_IMAGE_MODELS[model_name]\n\n    if not candidates:\n        raise ValueError(\n            f\"Image model {model_name} not found, available\"\n            f\"model list: {BUILTIN_IMAGE_MODELS.keys()}\"\n        )\n\n    prefer_modelscope = download_hub == \"modelscope\" or download_from_modelscope()\n    preferred_hubs = (\n        [\"modelscope\", \"huggingface\"]\n        if prefer_modelscope\n        else [\"huggingface\", \"modelscope\"]\n    )\n\n    def _hub_rank(spec: ImageModelFamilyV2) -> int:\n        try:\n            return preferred_hubs.index(spec.model_hub)\n        except ValueError:\n            return len(preferred_hubs)\n\n    engine = model_engine.lower()\n    if engine == \"mlx\":\n        filtered = [c for c in candidates if getattr(c, \"model_format\", None) == \"mlx\"]\n    else:\n        filtered = [c for c in candidates if getattr(c, \"model_format\", None) != \"mlx\"]\n        if not filtered:\n            filtered = candidates\n\n    if model_format:\n        requested_format = model_format.lower()\n        filtered = [\n            c\n            for c in filtered\n            if isinstance(getattr(c, \"model_format\", None), str)\n            and cast(str, getattr(c, \"model_format\", None)).lower() == requested_format\n        ]\n\n    if quantization:\n        requested_quant = quantization.lower()\n        filtered = [\n            c\n            for c in filtered\n            if isinstance(getattr(c, \"quantization\", None), str)\n            and cast(str, getattr(c, \"quantization\", None)).lower() == requested_quant\n        ]\n\n    if not filtered:\n        raise ValueError(\n            \"Image OCR model not found for \"\n            f\"name={model_name}, engine={model_engine}, \"\n            f\"format={model_format}, quantization={quantization}.\"\n        )\n\n    filtered.sort(key=_hub_rank)\n    return filtered[0]\n"
  },
  {
    "path": "xinference/model/image/custom.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom typing import List, Optional\n\nfrom ..._compat import Literal\nfrom ..custom import ModelRegistry\nfrom .core import ImageModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass CustomImageModelFamilyV2(ImageModelFamilyV2):\n    version: Literal[2] = 2\n    model_id: Optional[str]  # type: ignore\n    model_revision: Optional[str]  # type: ignore\n    model_uri: Optional[str]\n    controlnet: Optional[List[\"CustomImageModelFamilyV2\"]]\n\n\nUD_IMAGES: List[CustomImageModelFamilyV2] = []\n\n\nclass ImageModelRegistry(ModelRegistry):\n    model_type = \"image\"\n\n    def __init__(self):\n        from .core import BUILTIN_IMAGE_MODELS\n\n        super().__init__()\n        self.models = UD_IMAGES\n        self.builtin_models = list(BUILTIN_IMAGE_MODELS.keys())\n\n\ndef get_user_defined_images() -> List[ImageModelFamilyV2]:\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"image\")\n    return registry.get_custom_models()\n\n\ndef register_image(model_spec: CustomImageModelFamilyV2, persist: bool):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"image\")\n    registry.register(model_spec, persist)\n    if model_spec.model_ability and \"ocr\" in model_spec.model_ability:\n        from .ocr.ocr_family import generate_engine_config_by_model_name\n\n        generate_engine_config_by_model_name(model_spec)\n    else:\n        from .engine_family import generate_engine_config_by_model_name\n\n        generate_engine_config_by_model_name(model_spec)\n\n\ndef unregister_image(model_name: str, raise_error: bool = True):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"image\")\n    registry.unregister(model_name, raise_error)\n    from .engine_family import IMAGE_ENGINES\n    from .ocr.ocr_family import OCR_ENGINES\n\n    if model_name in OCR_ENGINES:\n        del OCR_ENGINES[model_name]\n    if model_name in IMAGE_ENGINES:\n        del IMAGE_ENGINES[model_name]\n"
  },
  {
    "path": "xinference/model/image/engine.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom typing import TYPE_CHECKING\n\nfrom .engine_family import SUPPORTED_ENGINES, ImageEngineModel\nfrom .stable_diffusion.core import DiffusionModel\n\nif TYPE_CHECKING:\n    from .core import ImageModelFamilyV2\n\n\nclass DiffusersImageModel(DiffusionModel, ImageEngineModel):\n    engine_model_format = \"diffusers\"\n    engine_quantization = \"none\"\n    required_libs = (\"diffusers\",)\n\n    @classmethod\n    def match(cls, model_family: \"ImageModelFamilyV2\") -> bool:\n        return model_family.model_family != \"ocr\"\n\n\nclass VLLMImageModel(ImageEngineModel):\n    @classmethod\n    def match(cls, model_family: \"ImageModelFamilyV2\") -> bool:\n        _ = model_family\n        return False\n\n    @classmethod\n    def check_lib(cls):\n        return (\n            False,\n            \"Engine vLLM is not compatible with current image model or environment\",\n        )\n\n\nclass SGLangImageModel(ImageEngineModel):\n    @classmethod\n    def match(cls, model_family: \"ImageModelFamilyV2\") -> bool:\n        _ = model_family\n        return False\n\n    @classmethod\n    def check_lib(cls):\n        return (\n            False,\n            \"Engine SGLang is not compatible with current image model or environment\",\n        )\n\n\ndef register_builtin_image_engines() -> None:\n    SUPPORTED_ENGINES[\"diffusers\"] = [DiffusersImageModel]\n    SUPPORTED_ENGINES[\"vLLM\"] = [VLLMImageModel]\n    SUPPORTED_ENGINES[\"SGLang\"] = [SGLangImageModel]\n"
  },
  {
    "path": "xinference/model/image/engine_family.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport importlib.util\nimport logging\nfrom typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Type, Union\n\nif TYPE_CHECKING:\n    from .core import ImageModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass ImageEngineModel:\n    required_libs: Tuple[str, ...] = ()\n\n    def __init__(self, *args: Any, **kwargs: Any) -> None:\n        pass\n\n    @classmethod\n    def match(cls, model_family: \"ImageModelFamilyV2\") -> bool:\n        raise NotImplementedError\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        for lib in cls.required_libs:\n            if importlib.util.find_spec(lib) is None:\n                return False, f\"Library '{lib}' is not installed\"\n        return True\n\n\n# { image model name -> { engine name -> engine params } }\nIMAGE_ENGINES: Dict[str, Dict[str, List[Dict[str, Any]]]] = {}\nSUPPORTED_ENGINES: Dict[str, List[Type[ImageEngineModel]]] = {}\n\n\ndef check_engine_by_model_name_and_engine(\n    model_engine: str,\n    model_name: str,\n    model_format: Optional[str],\n    quantization: Optional[str],\n) -> Type[ImageEngineModel]:\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in IMAGE_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    if model_name not in IMAGE_ENGINES:\n        raise ValueError(f\"Image model {model_name} not found.\")\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in IMAGE_ENGINES[model_name]:\n        raise ValueError(\n            f\"Image model {model_name} cannot be run on engine {model_engine}.\"\n        )\n    match_params = IMAGE_ENGINES[model_name][model_engine]\n    for param in match_params:\n        if model_name != param[\"model_name\"]:\n            continue\n        if (model_format and model_format != param[\"model_format\"]) or (\n            quantization and quantization != param[\"quantization\"]\n        ):\n            continue\n        return param[\"image_class\"]\n    raise ValueError(\n        f\"Image model {model_name} cannot be run on engine {model_engine}.\"\n    )\n\n\ndef check_engine_by_model_name_and_engine_with_virtual_env(\n    model_engine: str,\n    model_name: str,\n    model_format: Optional[str],\n    quantization: Optional[str],\n    model_family: Optional[\"ImageModelFamilyV2\"] = None,\n) -> Type[ImageEngineModel]:\n    from ..utils import _collect_virtualenv_engine_markers\n\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in IMAGE_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    if model_family is None:\n        raise ValueError(f\"Image model {model_name} not found.\")\n\n    engine_markers = _collect_virtualenv_engine_markers(model_family)\n    if model_name not in IMAGE_ENGINES:\n        if model_engine.lower() in engine_markers:\n            engine_classes = SUPPORTED_ENGINES.get(model_engine, [])\n            if engine_classes:\n                logger.warning(\n                    \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                    model_engine,\n                )\n                return engine_classes[0]\n        raise ValueError(f\"Image model {model_name} not found.\")\n\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in IMAGE_ENGINES[model_name]:\n        if model_engine.lower() in engine_markers:\n            engine_classes = SUPPORTED_ENGINES.get(model_engine, [])\n            if engine_classes:\n                logger.warning(\n                    \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                    model_engine,\n                )\n                return engine_classes[0]\n        raise ValueError(\n            f\"Image model {model_name} cannot be run on engine {model_engine}.\"\n        )\n\n    match_params = IMAGE_ENGINES[model_name][model_engine]\n    if match_params:\n        return match_params[0][\"image_class\"]\n\n    raise ValueError(\n        f\"Image model {model_name} cannot be run on engine {model_engine}.\"\n    )\n\n\ndef generate_engine_config_by_model_name(model_family: \"ImageModelFamilyV2\") -> None:\n    model_name = model_family.model_name\n    model_format = getattr(model_family, \"model_format\", None)\n    quantization = getattr(model_family, \"quantization\", None)\n    engines: Dict[str, List[Dict[str, Any]]] = IMAGE_ENGINES.get(model_name, {})\n    for engine, classes in SUPPORTED_ENGINES.items():\n        for cls in classes:\n            if cls.match(model_family):\n                engine_model_format = getattr(cls, \"engine_model_format\", model_format)\n                engine_quantization = quantization\n                if engine_quantization is None:\n                    engine_quantization = getattr(cls, \"engine_quantization\", None)\n                engine_params = engines.get(engine, [])\n                engine_params.append(\n                    {\n                        \"model_name\": model_name,\n                        \"model_format\": engine_model_format,\n                        \"quantization\": engine_quantization,\n                        \"image_class\": cls,\n                    }\n                )\n                engines[engine] = engine_params\n                break\n    if engines:\n        IMAGE_ENGINES[model_name] = engines\n"
  },
  {
    "path": "xinference/model/image/model_spec.json",
    "content": "[\n  {\n    \"version\": 2,\n    \"model_name\": \"FLUX.1-schnell\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\",\n      \"inpainting\"\n    ],\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder_2\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"black-forest-labs/FLUX.1-schnell\",\n        \"model_revision\": \"768d12a373ed5cc9ef9a9dea7504dc09fcc14842\",\n        \"gguf_model_id\": \"city96/FLUX.1-schnell-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q2_K\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"flux1-schnell-{quantization}.gguf\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/FLUX.1-schnell\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"Xorbits/FLUX.1-schnell-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q2_K\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"flux1-schnell-{quantization}.gguf\"\n      }\n    },\n    \"updated_at\": 1769418353,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"FLUX.1-dev\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\",\n      \"inpainting\"\n    ],\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder_2\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"cache_config\": {\n      \"ignore_patterns\": [\n        \"flux1-dev.safetensors\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"black-forest-labs/FLUX.1-dev\",\n        \"model_revision\": \"01aa605f2c300568dd6515476f04565a954fcb59\",\n        \"gguf_model_id\": \"city96/FLUX.1-dev-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q2_K\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"flux1-dev-{quantization}.gguf\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/FLUX.1-dev\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"AI-ModelScope/FLUX.1-dev-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q2_K\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"flux1-dev-{quantization}.gguf\"\n      }\n    },\n    \"featured\": false,\n    \"updated_at\": 1769418354,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"FLUX.1-Kontext-dev\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"image2image\"\n    ],\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder_2\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"cache_config\": {\n      \"ignore_patterns\": [\n        \"ae.safetensors\",\n        \"flux1-kontext-dev.safetensors\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"black-forest-labs/FLUX.1-Kontext-dev\",\n        \"model_revision\": \"5f6b5b0f9b24f61c714603ae90c01343563bc3dd\",\n        \"gguf_model_id\": \"bullerwins/FLUX.1-Kontext-dev-GGUF\",\n        \"gguf_quantizations\": [\n          \"BF16\",\n          \"Q2_K\",\n          \"Q3_K_S\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q4_K_S\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"flux1-kontext-dev-{quantization}.gguf\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"black-forest-labs/FLUX.1-Kontext-dev\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"bullerwins/FLUX.1-Kontext-dev-GGUF\",\n        \"gguf_quantizations\": [\n          \"BF16\",\n          \"Q2_K\",\n          \"Q3_K_S\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q4_K_S\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"flux1-kontext-dev-{quantization}.gguf\"\n      }\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers==0.35.1 ; #engine# == \\\"diffusers\\\"\",\n        \"huggingface-hub<1.0 ; #engine# == \\\"diffusers\\\"\",\n        \"peft>=0.17.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"updated_at\": 1769152886,\n    \"featured\": true\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen-Image\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\",\n      \"inpainting\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Qwen/Qwen-Image\",\n        \"model_revision\": \"4516c4d3058302ff35cd86c62ffa645d039fefad\",\n        \"gguf_model_id\": \"city96/Qwen-Image-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"qwen-image-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0\",\n          \"8steps-V1.0\",\n          \"8steps-V1.1-bf16\",\n          \"8steps-V1.1\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-Lightning-{lightning_version}.safetensors\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Qwen/Qwen-Image\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"city96/Qwen-Image-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"qwen-image-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0\",\n          \"8steps-V1.0\",\n          \"8steps-V1.1-bf16\",\n          \"8steps-V1.1\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-Lightning-{lightning_version}.safetensors\"\n      }\n    },\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {\n      \"guidance_scale\": 1,\n      \"true_cfg_scale\": 1\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers==0.35.1 ; #engine# == \\\"diffusers\\\"\",\n        \"huggingface-hub<1.0 ; #engine# == \\\"diffusers\\\"\",\n        \"peft>=0.17.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"updated_at\": 1769152887,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"sd3-medium\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\",\n      \"inpainting\"\n    ],\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder_3\"\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"stabilityai/stable-diffusion-3-medium-diffusers\",\n        \"model_revision\": \"ea42f8cef0f178587cf766dc8129abd379c90671\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/stable-diffusion-3-medium-diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418356,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"sd3.5-medium\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\",\n      \"inpainting\"\n    ],\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder_3\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"stabilityai/stable-diffusion-3.5-medium\",\n        \"model_revision\": \"94b13ccbe959c51e8159d91f562c58f29fac971a\",\n        \"gguf_model_id\": \"city96/stable-diffusion-3.5-medium-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"sd3.5_medium-{quantization}.gguf\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/stable-diffusion-3.5-medium\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"Xorbits/stable-diffusion-3.5-medium-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"sd3.5_medium-{quantization}.gguf\"\n      }\n    },\n    \"updated_at\": 1769418357,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"sd3.5-large\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\",\n      \"inpainting\"\n    ],\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder_3\",\n      \"torch_dtype\": \"bfloat16\",\n      \"transformer_quantization\": \"nf4\"\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"stabilityai/stable-diffusion-3.5-large\",\n        \"model_revision\": \"ceddf0a7fdf2064ea28e2213e3b84e4afa170a0f\",\n        \"gguf_model_id\": \"city96/stable-diffusion-3.5-large-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"sd3.5_large-{quantization}.gguf\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/stable-diffusion-3.5-large\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"Xorbits/stable-diffusion-3.5-large-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"sd3.5_large-{quantization}.gguf\"\n      }\n    },\n    \"updated_at\": 1769418358,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"sd3.5-large-turbo\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\",\n      \"inpainting\"\n    ],\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder_3\",\n      \"torch_dtype\": \"bfloat16\",\n      \"transformer_quantization\": \"nf4\"\n    },\n    \"default_generate_config\": {\n      \"guidance_scale\": 1,\n      \"num_inference_steps\": 4\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"stabilityai/stable-diffusion-3.5-large-turbo\",\n        \"model_revision\": \"ec07796fc06b096cc56de9762974a28f4c632eda\",\n        \"gguf_model_id\": \"city96/stable-diffusion-3.5-large-turbo-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"sd3.5_large_turbo-{quantization}.gguf\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/stable-diffusion-3.5-large-turbo\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"Xorbits/stable-diffusion-3.5-large-turbo-gguf\",\n        \"gguf_quantizations\": [\n          \"F16\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"sd3.5_large_turbo-{quantization}.gguf\"\n      }\n    },\n    \"updated_at\": 1769418359,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"HunyuanDiT-v1.2\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers\",\n        \"model_revision\": \"5e96094e0ad19e7f475de8711f03634ca0ccc40c\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Xorbits/HunyuanDiT-v1.2-Diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418360,\n    \"featured\": true,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"HunyuanDiT-v1.2-Distilled\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers-Distilled\",\n        \"model_revision\": \"ba991d1546d8c50936c4c16398ed0a87b9b99fb1\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Xorbits/HunyuanDiT-v1.2-Diffusers-Distilled\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418361,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"sd-turbo\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\"\n    ],\n    \"default_generate_config\": {\n      \"guidance_scale\": 0,\n      \"num_inference_steps\": 1\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"stabilityai/sd-turbo\",\n        \"model_revision\": \"1681ed09e0cff58eeb41e878a49893228b78b94c\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/sd-turbo\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418362,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"sdxl-turbo\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\"\n    ],\n    \"default_generate_config\": {\n      \"guidance_scale\": 0,\n      \"num_inference_steps\": 1\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"stabilityai/sdxl-turbo\",\n        \"model_revision\": \"f4b0486b498f84668e828044de1d0c8ba486e05b\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/sdxl-turbo\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418363,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"stable-diffusion-v1.5\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\"\n    ],\n    \"controlnet\": [\n      {\n        \"model_name\": \"canny\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"lllyasviel/sd-controlnet-canny\",\n        \"model_revision\": \"7f2f69197050967007f6bbd23ab5e52f0384162a\"\n      },\n      {\n        \"model_name\": \"mlsd\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"lllyasviel/sd-controlnet-mlsd\",\n        \"model_revision\": \"456fc1af4dc8f7d5fa6c949c5040d3828a24e3ad\"\n      },\n      {\n        \"model_name\": \"hed\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"lllyasviel/sd-controlnet-hed\",\n        \"model_revision\": \"04473d9334ab44908daa66107bbfb6f710aa056d\"\n      },\n      {\n        \"model_name\": \"scribble\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"lllyasviel/sd-controlnet-scribble\",\n        \"model_revision\": \"864edcd5ccc6ee2695eeebea5b4512100c83e7b3\"\n      },\n      {\n        \"model_name\": \"openpose\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"lllyasviel/sd-controlnet-openpose\",\n        \"model_revision\": \"df796456519d1ac5dbe674caa0653fcc9673bca8\"\n      },\n      {\n        \"model_name\": \"normal\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"lllyasviel/sd-controlnet-normal\",\n        \"model_revision\": \"1cbed9b3ca84422e4a2f23c14b9f5a114742b31d\"\n      },\n      {\n        \"model_name\": \"seg\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"lllyasviel/sd-controlnet-seg\",\n        \"model_revision\": \"ecdcb5645b5099c9a7500a504fb9ab3f743c4d96\"\n      }\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"runwayml/stable-diffusion-v1-5\",\n        \"model_revision\": \"1d0c4ebf6ff58a5caecab40fa1406526bca4b5b9\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/stable-diffusion-v1-5\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418364,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"stable-diffusion-xl-base-1.0\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\"\n    ],\n    \"controlnet\": [\n      {\n        \"model_name\": \"canny\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"diffusers/controlnet-canny-sdxl-1.0\",\n        \"model_revision\": \"eb115a19a10d14909256db740ed109532ab1483c\"\n      },\n      {\n        \"model_name\": \"depth\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"diffusers/controlnet-depth-sdxl-1.0\",\n        \"model_revision\": \"cb2e660019b26f7d2379e26922b5b2c87253dcf7\"\n      },\n      {\n        \"model_name\": \"zoe-depth\",\n        \"model_family\": \"controlnet\",\n        \"model_id\": \"diffusers/controlnet-zoe-depth-sdxl-1.0\",\n        \"model_revision\": \"62134b9d8e703b5d6f74f1534457287a8bba77ef\"\n      }\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"stabilityai/stable-diffusion-xl-base-1.0\",\n        \"model_revision\": \"f898a3e026e802f68796b95e9702464bac78d76f\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"AI-ModelScope/stable-diffusion-xl-base-1.0\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418365,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"kolors\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\"\n    ],\n    \"default_model_config\": {\n      \"variant\": \"fp16\"\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Kwai-Kolors/Kolors-diffusers\",\n        \"model_revision\": \"7e091c75199e910a26cd1b51ed52c28de5db3711\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"JunHowie/Kolors-diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418366,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"cogview4\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"THUDM/CogView4-6B\",\n        \"model_revision\": \"63a52b7f6dace7033380cd6da14d0915eab3e6b5\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"ZhipuAI/CogView4-6B\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418366,\n    \"featured\": true\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"stable-diffusion-inpainting\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"inpainting\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"runwayml/stable-diffusion-inpainting\",\n        \"model_revision\": \"51388a731f57604945fddd703ecb5c50e8e7b49d\"\n      }\n    },\n    \"updated_at\": 1769418367,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"stable-diffusion-2-inpainting\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"inpainting\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"stabilityai/stable-diffusion-2-inpainting\",\n        \"model_revision\": \"81a84f49b15956b60b4272a405ad3daef3da4590\"\n      }\n    },\n    \"updated_at\": 1769418368,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"stable-diffusion-xl-inpainting\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"inpainting\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"diffusers/stable-diffusion-xl-1.0-inpainting-0.1\",\n        \"model_revision\": \"115134f363124c53c7d878647567d04daf26e41e\"\n      }\n    },\n    \"updated_at\": 1769418369,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"GOT-OCR2_0\",\n    \"model_family\": \"ocr\",\n    \"model_ability\": [\n      \"ocr\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers==4.47.1 ; #engine# == \\\"transformers\\\"\",\n        \"httpx==0.24.0\",\n        \"deepspeed==0.12.3\",\n        \"peft==0.4.0\",\n        \"tiktoken==0.6.0\",\n        \"sentencepiece==0.1.99\",\n        \"einops==0.6.1\",\n        \"einops-exts==0.0.4\",\n        \"timm==0.6.13\",\n        \"#system_numpy#\",\n        \"#system_torch#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"stepfun-ai/GOT-OCR2_0\",\n        \"model_revision\": \"cf6b7386bc89a54f09785612ba74cb12de6fa17c\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"stepfun-ai/GOT-OCR2_0\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1769418370,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen-Image-Edit\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"image2image\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Qwen/Qwen-Image-Edit\",\n        \"model_revision\": \"0b71959872ea3bf4d106c578b7c480ebb133dba7\",\n        \"gguf_model_id\": \"QuantStack/Qwen-Image-Edit-GGUF\",\n        \"gguf_quantizations\": [\n          \"Q2_K\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"Qwen_Image_Edit-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0\",\n          \"8steps-V1.0-bf16\",\n          \"8steps-V1.0\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-Edit-Lightning-{lightning_version}.safetensors\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Qwen/Qwen-Image-Edit\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"QuantStack/Qwen-Image-Edit-GGUF\",\n        \"gguf_quantizations\": [\n          \"Q2_K\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"Qwen_Image_Edit-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0\",\n          \"8steps-V1.0-bf16\",\n          \"8steps-V1.0\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-Edit-Lightning-{lightning_version}.safetensors\"\n      }\n    },\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {\n      \"true_cfg_scale\": 4\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers==0.35.1 ; #engine# == \\\"diffusers\\\"\",\n        \"huggingface-hub<1.0 ; #engine# == \\\"diffusers\\\"\",\n        \"peft>=0.17.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"updated_at\": 1769152903,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen-Image-Edit-2509\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"image2image\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Qwen/Qwen-Image-Edit-2509\",\n        \"model_revision\": \"d3968ef930e841f4c73640fb8afa3b306a78167e\",\n        \"gguf_model_id\": \"QuantStack/Qwen-Image-Edit-2509-GGUF\",\n        \"gguf_quantizations\": [\n          \"Q2_K\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"Qwen-Image-Edit-2509-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0-fp32\",\n          \"8steps-V1.0-bf16\",\n          \"8steps-V1.0-fp32\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-Edit-2509/Qwen-Image-Edit-2509-Lightning-{lightning_version}.safetensors\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Qwen/Qwen-Image-Edit-2509\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"QuantStack/Qwen-Image-Edit-2509-GGUF\",\n        \"gguf_quantizations\": [\n          \"Q2_K\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"Qwen-Image-Edit-2509-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0-fp32\",\n          \"8steps-V1.0-bf16\",\n          \"8steps-V1.0-fp32\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-Edit-2509/Qwen-Image-Edit-2509-Lightning-{lightning_version}.safetensors\"\n      }\n    },\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {\n      \"true_cfg_scale\": 4\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"peft>=0.17.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"updated_at\": 1769418372,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"DeepSeek-OCR\",\n    \"model_family\": \"ocr\",\n    \"model_ability\": [\n      \"ocr\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"mlx-vlm ; #engine# == \\\"mlx\\\"\",\n        \"tokenizers==0.20.3\",\n        \"PyMuPDF\",\n        \"img2pdf\",\n        \"einops\",\n        \"easydict\",\n        \"addict\",\n        \"Pillow\",\n        \"#system_torch# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"deepseek-ai/DeepSeek-OCR\",\n            \"model_revision\": \"main\"\n          },\n          \"modelscope\": {\n            \"model_id\": \"deepseek-ai/DeepSeek-OCR\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/DeepSeek-OCR-{quantization}\",\n            \"model_revision\": \"main\",\n            \"quantizations\": [\n              \"8bit\",\n              \"6bit\",\n              \"5bit\",\n              \"4bit\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/DeepSeek-OCR-{quantization}\",\n            \"model_revision\": \"master\",\n            \"quantizations\": [\n              \"8bit\",\n              \"6bit\",\n              \"5bit\",\n              \"4bit\"\n            ]\n          }\n        }\n      }\n    ],\n    \"featured\": false,\n    \"updated_at\": 1769418373\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"HunyuanOCR\",\n    \"model_family\": \"ocr\",\n    \"model_ability\": [\n      \"ocr\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers @ git+https://github.com/huggingface/transformers@82a06db03535c49aa987719ed0746a76093b1ec4 ; #engine# == \\\"Transformers\\\"\",\n        \"accelerate>=0.34.2 ; #engine# == \\\"Transformers\\\"\",\n        \"#system_numpy#\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_torch# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"tencent/HunyuanOCR\",\n        \"model_revision\": \"9a0c8183f1cb1b544793b6e7ccc0612cf4f622da\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Tencent-Hunyuan/HunyuanOCR\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"featured\": false,\n    \"updated_at\": 1769418374\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"FLUX.2-dev\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\",\n      \"inpainting\"\n    ],\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"cache_config\": {\n      \"ignore_patterns\": [\n        \"flux2-dev.safetensors\"\n      ]\n    },\n    \"model_src\": {\n      \"modelscope\": {\n        \"model_id\": \"black-forest-labs/FLUX.2-dev\",\n        \"model_revision\": \"master\"\n      },\n      \"huggingface\": {\n        \"model_id\": \"black-forest-labs/FLUX.2-dev\",\n        \"model_revision\": \"420f8eb9f7869bf378c45a5206424814561903e7\",\n        \"gguf_model_id\": \"city96/FLUX.2-dev-gguf\",\n        \"gguf_quantizations\": [\n          \"BF16\",\n          \"Q2_K\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"flux2-dev-{quantization}.gguf\"\n      }\n    },\n    \"featured\": true,\n    \"updated_at\": 1769418375,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Z-Image-Turbo\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\",\n      \"low_cpu_mem_usage\": false\n    },\n    \"default_generate_config\": {\n      \"num_inference_steps\": 9,\n      \"guidance_scale\": 0\n    },\n    \"gguf_model_id\": \"unsloth/Z-Image-Turbo-GGUF\",\n    \"gguf_quantizations\": [\n      \"BF16\",\n      \"F16\",\n      \"Q2_K\",\n      \"Q3_K_L\",\n      \"Q3_K_M\",\n      \"Q3_K_S\",\n      \"Q4_0\",\n      \"Q4_1\",\n      \"Q4_K_M\",\n      \"Q4_K_S\",\n      \"Q5_0\",\n      \"Q5_1\",\n      \"Q5_K_M\",\n      \"Q5_K_S\",\n      \"Q6_K\",\n      \"Q8_0\"\n    ],\n    \"gguf_model_file_name_template\": \"z-image-turbo-{quantization}.gguf\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Tongyi-MAI/Z-Image-Turbo\",\n        \"model_revision\": \"013496ad041be2e9ded1c291c00d8cc4054a6422\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Tongyi-MAI/Z-Image-Turbo\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"featured\": true,\n    \"updated_at\": 1769418376\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"PaddleOCR-VL\",\n    \"model_family\": \"ocr\",\n    \"model_ability\": [\n      \"ocr\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"pillow==11.3.0\",\n        \"transformers==4.55.0\",\n        \"#system_numpy#\",\n        \"#system_torch#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"PaddlePaddle/PaddleOCR-VL\",\n        \"model_revision\": \"main\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"PaddlePaddle/PaddleOCR-VL\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766387632,\n    \"featured\": true\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen-Image-Layered\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"image2image\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Qwen/Qwen-Image-Layered\",\n        \"model_revision\": \"8f0ca708dfff6ba1dd5f2d85d78f8c108a040bcf\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Qwen/Qwen-Image-Layered\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {\n      \"true_cfg_scale\": 4\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.3\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"featured\": true,\n    \"updated_at\": 1769418378\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen-Image-Edit-2511\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"image2image\"\n    ],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Qwen/Qwen-Image-Edit-2511\",\n        \"model_revision\": \"6f3ccc0b56e431dc6a0c2b2039706d7d26f22cb9\",\n        \"gguf_model_id\": \"unsloth/Qwen-Image-Edit-2511-GGUF\",\n        \"gguf_quantizations\": [\n          \"BF16\",\n          \"F16\",\n          \"Q2_K\",\n          \"Q3_K_L\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"qwen-image-edit-2511-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-Edit-2511-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0-fp32\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-Edit-2511-Lightning-{lightning_version}.safetensors\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Qwen/Qwen-Image-Edit-2511\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"unsloth/Qwen-Image-Edit-2511-GGUF\",\n        \"gguf_quantizations\": [\n          \"BF16\",\n          \"F16\",\n          \"Q2_K\",\n          \"Q3_K_L\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"qwen-image-edit-2511-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-Edit-2511-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0-fp32\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-Edit-2511-Lightning-{lightning_version}.safetensors\"\n      }\n    },\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {\n      \"true_cfg_scale\": 4\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"peft>=0.17.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"featured\": true,\n    \"updated_at\": 1769418379\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen-Image-2512\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\",\n      \"inpainting\"\n    ],\n    \"default_model_config\": {\n      \"quantize\": true,\n      \"quantize_text_encoder\": \"text_encoder\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Qwen/Qwen-Image-2512\",\n        \"model_revision\": \"25468b98e3276ca6700de15c6628e51b7de54a26\",\n        \"gguf_model_id\": \"unsloth/Qwen-Image-2512-GGUF\",\n        \"gguf_quantizations\": [\n          \"BF16\",\n          \"F16\",\n          \"Q2_K\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"qwen-image-2512-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-2512-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0-fp32\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-2512-Lightning-{lightning_version}.safetensors\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Qwen/Qwen-Image-2512\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"unsloth/Qwen-Image-2512-GGUF\",\n        \"gguf_quantizations\": [\n          \"BF16\",\n          \"F16\",\n          \"Q2_K\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"qwen-image-2512-{quantization}.gguf\",\n        \"lightning_model_id\": \"lightx2v/Qwen-Image-2512-Lightning\",\n        \"lightning_versions\": [\n          \"4steps-V1.0-bf16\",\n          \"4steps-V1.0-fp32\"\n        ],\n        \"lightning_model_file_name_template\": \"Qwen-Image-2512-Lightning-{lightning_version}.safetensors\"\n      }\n    },\n    \"default_generate_config\": {\n      \"guidance_scale\": 1,\n      \"true_cfg_scale\": 1\n    },\n    \"virtualenv\": {\n      \"no_build_isolation\": true,\n      \"packages\": [\n        \"diffusers==0.35.1 ; #engine# == \\\"diffusers\\\"\",\n        \"huggingface-hub<1.0 ; #engine# == \\\"diffusers\\\"\",\n        \"peft>=0.17.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"featured\": true,\n    \"updated_at\": 1769152912\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Z-Image\",\n    \"model_family\": \"stable_diffusion\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\",\n      \"low_cpu_mem_usage\": false\n    },\n    \"default_generate_config\": {\n      \"num_inference_steps\": 28,\n      \"guidance_scale\": 4\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"#diffusers_dependencies# ; #engine# == \\\"diffusers\\\"\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Tongyi-MAI/Z-Image\",\n        \"model_revision\": \"e8fa147e7413241c5aa5146a8ae60dc38ade08ae\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Tongyi-MAI/Z-Image\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"featured\": true,\n    \"updated_at\": 1769594289\n  },\n  {\n    \"model_name\": \"FLUX.2-klein-4B\",\n    \"model_description\": \"FLUX.2 [klein] 4B is a 4 billion parameter rectified flow transformer capable of generating images from text descriptions and supports multi-reference editing capabilities.\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\"\n    ],\n    \"model_family\": \"stable_diffusion\",\n    \"controlnet\": [],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"black-forest-labs/FLUX.2-klein-4B\",\n        \"model_revision\": \"5e67da950fce4a097bc150c22958a05716994cea\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"black-forest-labs/FLUX.2-klein-4B\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"default_model_config\": {},\n    \"default_generate_config\": {},\n    \"cache_config\": {},\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"git+https://github.com/huggingface/diffusers\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"featured\": false,\n    \"updated_at\": 1770994941\n  },\n  {\n    \"model_name\": \"FLUX.2-klein-9B\",\n    \"model_description\": \"FLUX.2 [klein] 9B is a 9 billion parameter rectified flow transformer capable of generating images from text descriptions and supports multi-reference editing capabilities.\",\n    \"model_ability\": [\n      \"text2image\",\n      \"image2image\"\n    ],\n    \"model_family\": \"stable_diffusion\",\n    \"controlnet\": [],\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"black-forest-labs/FLUX.2-klein-9B\",\n        \"model_revision\": \"cd1bba5810fe2aba6666d9cf7352e25436426039\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"black-forest-labs/FLUX.2-klein-9B\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"default_model_config\": {},\n    \"default_generate_config\": {},\n    \"cache_config\": {},\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"git+https://github.com/huggingface/diffusers\",\n        \"transformers>=4.51.0\",\n        \"#system_torch#\",\n        \"#system_numpy#\"\n      ],\n      \"no_build_isolation\": true\n    },\n    \"featured\": false,\n    \"updated_at\": 1770994886\n  }\n]\n"
  },
  {
    "path": "xinference/model/image/ocr/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom .deepseek_ocr import DeepSeekOCRModel\nfrom .got_ocr2 import GotOCR2Model\nfrom .hunyuan_ocr import HunyuanOCRModel\nfrom .mlx import MLXDeepSeekOCRModel\nfrom .ocr_family import SUPPORTED_ENGINES\nfrom .paddleocr_vl import PaddleOCRVLModel\nfrom .vllm import (\n    VLLMDeepSeekOCRModel,\n    VLLMGotOCR2Model,\n    VLLMHunyuanOCRModel,\n    VLLMPaddleOCRVLModel,\n)\n\n__all__ = [\n    \"DeepSeekOCRModel\",\n    \"GotOCR2Model\",\n    \"HunyuanOCRModel\",\n    \"PaddleOCRVLModel\",\n]\n\n\ndef register_builtin_ocr_engines() -> None:\n    SUPPORTED_ENGINES[\"transformers\"] = [\n        DeepSeekOCRModel,\n        GotOCR2Model,\n        HunyuanOCRModel,\n        PaddleOCRVLModel,\n    ]\n    SUPPORTED_ENGINES[\"vllm\"] = [\n        VLLMDeepSeekOCRModel,\n        VLLMHunyuanOCRModel,\n    ]\n    SUPPORTED_ENGINES[\"mlx\"] = [MLXDeepSeekOCRModel]\n"
  },
  {
    "path": "xinference/model/image/ocr/deepseek_ocr.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport os\nimport re\nimport tempfile\nfrom typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union\n\nimport numpy as np\nimport PIL.Image\nimport torch\nimport torch.nn as nn\nfrom torchvision import transforms\n\nif TYPE_CHECKING:\n    from ..core import ImageModelFamilyV2\n\nfrom .ocr_family import OCRModel\n\nlogger = logging.getLogger(__name__)\n\n\nclass DeepSeekOCRModelSize:\n    \"\"\"DeepSeek-OCR model size configurations.\"\"\"\n\n    TINY = (\"tiny\", 512, 512, False)\n    SMALL = (\"small\", 640, 640, False)\n    BASE = (\"base\", 1024, 1024, False)\n    LARGE = (\"large\", 1280, 1280, False)\n    GUNDAM = (\"gundam\", 1024, 640, True)\n\n    def __init__(self, size_type: str):\n        self.size_type = size_type\n        # Map size type to configuration\n        self._config_map = {\n            \"tiny\": self.TINY,\n            \"small\": self.SMALL,\n            \"base\": self.BASE,\n            \"large\": self.LARGE,\n            \"gundam\": self.GUNDAM,\n        }\n\n        if size_type in self._config_map:\n            self.name, self.base_size, self.image_size, self.crop_mode = (\n                self._config_map[size_type]\n            )\n        else:\n            # Default to Gundam\n            self.name, self.base_size, self.image_size, self.crop_mode = self.GUNDAM\n\n    @classmethod\n    def from_string(cls, size_str: str) -> \"DeepSeekOCRModelSize\":\n        \"\"\"Get model size from string.\"\"\"\n        return cls(size_str.lower())\n\n    def __str__(self) -> str:\n        return self.name\n\n\ndef load_image(image_path: str) -> Optional[PIL.Image.Image]:\n    \"\"\"Load image with EXIF correction.\"\"\"\n    try:\n        image = PIL.Image.open(image_path)\n        # Correct image orientation based on EXIF data\n        corrected_image = PIL.ImageOps.exif_transpose(image)\n        return corrected_image\n    except Exception as e:\n        logger.error(f\"Error loading image {image_path}: {e}\")\n        try:\n            return PIL.Image.open(image_path)\n        except Exception:\n            return None\n\n\ndef find_closest_aspect_ratio(\n    aspect_ratio: float,\n    target_ratios: List[Tuple[int, int]],\n    width: int,\n    height: int,\n    image_size: int,\n) -> Tuple[int, int]:\n    \"\"\"Find the closest aspect ratio to target.\"\"\"\n    best_ratio_diff = float(\"inf\")\n    best_ratio = (1, 1)\n    area = width * height\n\n    for ratio in target_ratios:\n        target_aspect_ratio = ratio[0] / ratio[1]\n        ratio_diff = abs(aspect_ratio - target_aspect_ratio)\n        if ratio_diff < best_ratio_diff:\n            best_ratio_diff = ratio_diff\n            best_ratio = ratio\n        elif ratio_diff == best_ratio_diff:\n            if area > 0.5 * image_size * image_size * ratio[0] * ratio[1]:\n                best_ratio = ratio\n\n    return best_ratio\n\n\ndef dynamic_preprocess(\n    image: PIL.Image.Image,\n    min_num: int = 2,\n    max_num: int = 9,\n    image_size: int = 640,\n    use_thumbnail: bool = False,\n) -> Tuple[List[PIL.Image.Image], Tuple[int, int]]:\n    \"\"\"Dynamically preprocess image by cropping.\"\"\"\n    orig_width, orig_height = image.size\n    aspect_ratio = orig_width / orig_height\n\n    # Calculate target ratios\n    target_ratios = [\n        (i, j)\n        for n in range(min_num, max_num + 1)\n        for i in range(1, n + 1)\n        for j in range(1, n + 1)\n        if i * j <= max_num and i * j >= min_num\n    ]\n    target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])\n\n    # Find the closest aspect ratio\n    target_aspect_ratio = find_closest_aspect_ratio(\n        aspect_ratio, target_ratios, orig_width, orig_height, image_size\n    )\n\n    # Calculate target dimensions\n    target_width = image_size * target_aspect_ratio[0]\n    target_height = image_size * target_aspect_ratio[1]\n    blocks = target_aspect_ratio[0] * target_aspect_ratio[1]\n\n    # Resize the image\n    resized_img = image.resize((target_width, target_height))\n    processed_images = []\n\n    for i in range(blocks):\n        box = (\n            (i % (target_width // image_size)) * image_size,\n            (i // (target_width // image_size)) * image_size,\n            ((i % (target_width // image_size)) + 1) * image_size,\n            ((i // (target_width // image_size)) + 1) * image_size,\n        )\n        split_img = resized_img.crop(box)\n        processed_images.append(split_img)\n\n    assert len(processed_images) == blocks\n\n    if use_thumbnail and len(processed_images) != 1:\n        thumbnail_img = image.resize((image_size, image_size))\n        processed_images.append(thumbnail_img)\n\n    return processed_images, target_aspect_ratio\n\n\ndef normalize_transform(\n    mean: Optional[Union[Tuple[float, float, float], List[float]]],\n    std: Optional[Union[Tuple[float, float, float], List[float]]],\n):\n    \"\"\"Create normalization transform.\"\"\"\n    if mean is None and std is None:\n        return None\n    elif mean is None and std is not None:\n        mean = [0.0] * len(std)\n        return transforms.Normalize(mean=mean, std=std)\n    elif mean is not None and std is None:\n        std = [1.0] * len(mean)\n        return transforms.Normalize(mean=mean, std=std)\n    else:\n        return transforms.Normalize(mean=mean, std=std)\n\n\nclass BasicImageTransform:\n    \"\"\"Basic image transformation for DeepSeek-OCR.\"\"\"\n\n    def __init__(\n        self,\n        mean: Optional[Tuple[float, float, float]] = (0.5, 0.5, 0.5),\n        std: Optional[Tuple[float, float, float]] = (0.5, 0.5, 0.5),\n        normalize: bool = True,\n    ):\n        self.mean = mean\n        self.std = std\n\n        transform_pipelines = [transforms.ToTensor()]\n\n        if normalize:\n            normalize_transform_func = normalize_transform(mean, std)\n            if normalize_transform_func is not None:\n                transform_pipelines.append(normalize_transform_func)\n            else:\n                transform_pipelines.append(nn.Identity())\n\n        self.transform = transforms.Compose(transform_pipelines)\n\n    def __call__(self, x: PIL.Image.Image) -> torch.Tensor:\n        return self.transform(x)\n\n\ndef re_match(text: str) -> Tuple[List[Tuple], List[str], List[str]]:\n    \"\"\"Extract references and detections from text.\"\"\"\n    pattern = r\"(<\\|ref\\|>(.*?)<\\|/ref\\|><\\|det\\|>(.*?)<\\|/det\\|>)\"\n    matches = re.findall(pattern, text, re.DOTALL)\n\n    mathes_image = []\n    mathes_other = []\n    for a_match in matches:\n        if \"<|ref|>image<|/ref|>\" in a_match[0]:\n            mathes_image.append(a_match[0])\n        else:\n            mathes_other.append(a_match[0])\n    return matches, mathes_image, mathes_other\n\n\ndef extract_coordinates_and_label(\n    ref_text: Tuple, image_width: int, image_height: int\n) -> Optional[Tuple]:\n    \"\"\"Extract coordinates and label from reference text.\"\"\"\n    try:\n        label_type = ref_text[1]\n        cor_list = eval(ref_text[2])\n    except Exception as e:\n        logger.error(f\"Error extracting coordinates: {e}\")\n        return None\n\n    return (label_type, cor_list)\n\n\ndef draw_bounding_boxes(\n    image: PIL.Image.Image, refs: List[Tuple], output_path: str\n) -> PIL.Image.Image:\n    \"\"\"Draw bounding boxes on image with labels.\"\"\"\n    image_width, image_height = image.size\n\n    img_draw = image.copy()\n    draw = PIL.ImageDraw.Draw(img_draw)\n\n    overlay = PIL.Image.new(\"RGBA\", img_draw.size, (0, 0, 0, 0))\n    draw2 = PIL.ImageDraw.Draw(overlay)\n\n    # Use default font\n    try:\n        font = PIL.ImageFont.load_default()\n    except Exception:\n        font = None\n\n    img_idx = 0\n\n    for i, ref in enumerate(refs):\n        try:\n            result = extract_coordinates_and_label(ref, image_width, image_height)\n            if result:\n                label_type, points_list = result\n\n                color = (\n                    np.random.randint(0, 200),\n                    np.random.randint(0, 200),\n                    np.random.randint(0, 255),\n                )\n                color_a = color + (20,)\n\n                for points in points_list:\n                    x1, y1, x2, y2 = points\n\n                    # Convert from relative coordinates (0-999) to absolute pixel coordinates\n                    x1 = int(x1 / 999 * image_width)\n                    y1 = int(y1 / 999 * image_height)\n                    x2 = int(x2 / 999 * image_width)\n                    y2 = int(y2 / 999 * image_height)\n\n                    if label_type == \"image\":\n                        try:\n                            cropped = image.crop((x1, y1, x2, y2))\n                            cropped.save(f\"{output_path}/images/{img_idx}.jpg\")\n                        except Exception as e:\n                            logger.error(f\"Error saving cropped image: {e}\")\n                        img_idx += 1\n\n                    try:\n                        if label_type == \"title\":\n                            draw.rectangle([x1, y1, x2, y2], outline=color, width=4)\n                            draw2.rectangle(\n                                [x1, y1, x2, y2],\n                                fill=color_a,\n                                outline=(0, 0, 0, 0),\n                                width=1,\n                            )\n                        else:\n                            draw.rectangle([x1, y1, x2, y2], outline=color, width=2)\n                            draw2.rectangle(\n                                [x1, y1, x2, y2],\n                                fill=color_a,\n                                outline=(0, 0, 0, 0),\n                                width=1,\n                            )\n\n                        if font:\n                            text_x = x1\n                            text_y = max(0, y1 - 15)\n\n                            text_bbox = draw.textbbox((0, 0), label_type, font=font)\n                            text_width = text_bbox[2] - text_bbox[0]\n                            text_height = text_bbox[3] - text_bbox[1]\n\n                            draw.rectangle(\n                                [\n                                    text_x,\n                                    text_y,\n                                    text_x + text_width,\n                                    text_y + text_height,\n                                ],\n                                fill=(255, 255, 255, 30),\n                            )\n\n                            draw.text(\n                                (text_x, text_y), label_type, font=font, fill=color\n                            )\n                    except Exception as e:\n                        logger.error(f\"Error drawing text: {e}\")\n                        pass\n        except Exception as e:\n            logger.error(f\"Error processing reference: {e}\")\n            continue\n\n    img_draw.paste(overlay, (0, 0), overlay)\n    return img_draw\n\n\ndef process_image_with_refs(\n    image: PIL.Image.Image, ref_texts: List[Tuple], output_path: str\n) -> PIL.Image.Image:\n    \"\"\"Process image with reference texts and draw bounding boxes.\"\"\"\n    result_image = draw_bounding_boxes(image, ref_texts, output_path)\n    return result_image\n\n\ndef clean_ocr_annotations(text: str) -> str:\n    \"\"\"\n    Clean OCR annotations and return plain text.\n\n    Removes <|ref|>...<|/ref|><|det|>...<|/det|> annotations while preserving the text content.\n\n    Args:\n        text: Raw OCR output with annotations\n\n    Returns:\n        Cleaned plain text\n    \"\"\"\n    if not isinstance(text, str):\n        return str(text)\n\n    # Pattern to match the full annotation blocks\n    annotation_pattern = r\"<\\|ref\\|>.*?<\\|/ref\\|><\\|det\\|>\\[\\[.*?\\]\\]<\\|/det\\|>\"\n\n    # Remove all annotation blocks\n    cleaned_text = re.sub(annotation_pattern, \"\", text, flags=re.DOTALL)\n\n    # Clean up extra whitespace and line breaks\n    cleaned_text = re.sub(r\"\\n\\s*\\n\", \"\\n\", cleaned_text.strip())\n\n    return cleaned_text\n\n\ndef extract_text_blocks(text: str) -> List[Dict[str, Any]]:\n    \"\"\"\n    Extract text blocks with their coordinates from OCR annotations.\n\n    Args:\n        text: Raw OCR output with annotations\n\n    Returns:\n        List of dictionaries containing text and coordinates\n    \"\"\"\n    if not isinstance(text, str):\n        return []\n\n    # Pattern to extract text and coordinates\n    block_pattern = (\n        r\"<\\|ref\\|>(.*?)<\\|/ref\\|><\\|det\\|>\\[\\[(.*?)\\]\\]<\\|/det\\|>(.*?)(?=<\\|ref\\|>|$)\"\n    )\n\n    blocks = []\n    for match in re.finditer(block_pattern, text, re.DOTALL):\n        label_type = match.group(1).strip()\n        coords_str = match.group(2).strip()\n        content = match.group(3).strip()\n\n        try:\n            coords = eval(f\"[{coords_str}]\")  # Convert string coordinates to list\n            if isinstance(coords, list) and len(coords) > 0:\n                blocks.append(\n                    {\n                        \"label_type\": label_type,\n                        \"coordinates\": coords,\n                        \"text\": content,\n                        \"bbox\": coords[0] if len(coords) == 1 else coords,\n                    }\n                )\n        except Exception:\n            # Skip if coordinates can't be parsed\n            continue\n\n    return blocks\n\n\nclass DeepSeekOCRModel(OCRModel):\n    required_libs: Tuple[str, ...] = (\"transformers\",)\n\n    @classmethod\n    def match(cls, model_family: \"ImageModelFamilyV2\") -> bool:\n        model_format = getattr(model_family, \"model_format\", None)\n        return model_family.model_name == \"DeepSeek-OCR\" and model_format != \"mlx\"\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: Optional[str] = None,\n        device: Optional[str] = None,\n        model_spec: Optional[\"ImageModelFamilyV2\"] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._device = device\n        # model info when loading\n        self._model = None\n        self._tokenizer = None\n        # info\n        self._model_spec = model_spec\n        self._abilities = model_spec.model_ability or []  # type: ignore\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._abilities\n\n    def load(self):\n        from transformers import AutoModel, AutoTokenizer\n\n        logger.info(f\"Loading DeepSeek-OCR model from {self._model_path}\")\n\n        try:\n            self._tokenizer = AutoTokenizer.from_pretrained(\n                self._model_path,\n                trust_remote_code=True,\n                use_fast=False,\n            )\n            if self._device != \"cpu\":\n                # Use CUDA if available\n                model = AutoModel.from_pretrained(\n                    self._model_path,\n                    trust_remote_code=True,\n                    low_cpu_mem_usage=True,\n                    device_map=\"auto\",\n                    use_safetensors=True,\n                    pad_token_id=self._tokenizer.eos_token_id,\n                )\n                self._model = model.eval()\n            else:\n                # Force CPU-only execution\n                model = AutoModel.from_pretrained(\n                    self._model_path,\n                    trust_remote_code=True,\n                    low_cpu_mem_usage=True,\n                    device_map=\"cpu\",\n                    use_safetensors=True,\n                    pad_token_id=self._tokenizer.eos_token_id,\n                    torch_dtype=torch.float32,  # Use float32 for CPU\n                )\n                self._model = model.eval()\n            logger.info(\"DeepSeek-OCR model loaded successfully\")\n        except Exception as e:\n            logger.error(f\"Failed to load DeepSeek-OCR model: {e}\")\n            raise\n\n    def ocr(\n        self,\n        image: Union[PIL.Image.Image, List[PIL.Image.Image]],\n        **kwargs,\n    ) -> Union[Dict[str, Any], List[Dict[str, Any]]]:\n        \"\"\"\n        Perform OCR on single or multiple images with enhanced features.\n\n        Args:\n            image: PIL Image or list of PIL Images\n            **kwargs: Additional parameters including:\n                - prompt: OCR prompt (default: \"<image>\\nFree OCR.\")\n                - model_size: Model size (default: \"gundam\")\n                - test_compress: Whether to test compression ratio (default: False)\n                - save_results: Whether to save results (default: False)\n                - save_dir: Directory to save results\n                - eval_mode: Whether to use evaluation mode (default: False)\n\n        Returns:\n            OCR results as dict or list of dicts\n        \"\"\"\n        logger.info(\"DeepSeek-OCR kwargs: %s\", kwargs)\n\n        # Set default values for DeepSeek-OCR specific parameters\n        prompt = kwargs.pop(\"prompt\", \"<image>\\nFree OCR.\")\n        model_size = kwargs.pop(\"model_size\", \"gundam\")\n        test_compress = kwargs.pop(\"test_compress\", False)\n        save_results = kwargs.pop(\"save_results\", False)\n        save_dir = kwargs.pop(\"save_dir\", None)\n        eval_mode = kwargs.pop(\"eval_mode\", False)\n\n        # Smart detection: Check if this should be a visualization request\n        # Visualization is triggered when:\n        # 1. prompt contains grounding keywords\n        # 2. save_results is True (default behavior for visualization)\n        # 3. Explicit visualization parameters are provided\n        is_visualization_request = (\n            \"<|grounding|>\" in prompt\n            or save_results\n            or any(\n                key in kwargs\n                for key in [\"save_results\", \"output_format\", \"annotations\", \"visualize\"]\n            )\n        )\n\n        if is_visualization_request:\n            logger.info(\"Detected visualization request, delegating to visualize_ocr\")\n            # Delegate to visualize_ocr for visualization functionality\n            # Pass all parameters through kwargs to avoid duplication\n            return self.visualize_ocr(\n                image=image,\n                prompt=prompt,\n                model_size=model_size,\n                save_results=save_results,\n                save_dir=save_dir,\n                eval_mode=eval_mode,\n                **kwargs,\n            )\n\n        if self._model is None or self._tokenizer is None:\n            raise RuntimeError(\"Model not loaded. Please call load() first.\")\n\n        # Validate parameters\n        if save_results and not save_dir:\n            raise ValueError(\"save_dir must be provided when save_results=True\")\n\n        # Handle single image input\n        if isinstance(image, PIL.Image.Image):\n            return self._ocr_single(\n                image,\n                prompt,\n                model_size,\n                test_compress,\n                save_results,\n                save_dir,\n                eval_mode,\n                **kwargs,\n            )\n        # Handle batch image input\n        elif isinstance(image, list):\n            return [\n                self._ocr_single(\n                    img,\n                    prompt,\n                    model_size,\n                    test_compress,\n                    save_results,\n                    save_dir,\n                    eval_mode,\n                    **kwargs,\n                )\n                for img in image\n            ]\n        else:\n            raise ValueError(\"Input must be a PIL Image or list of PIL Images\")\n\n    def visualize_ocr(\n        self,\n        image: Union[PIL.Image.Image, List[PIL.Image.Image]],\n        prompt: str = \"<image>\\n<|grounding|>Convert the document to markdown.\",\n        model_size: str = \"gundam\",\n        save_results: bool = True,\n        save_dir: Optional[str] = None,\n        eval_mode: bool = False,\n        **kwargs,\n    ) -> Union[Dict[str, Any], List[Dict[str, Any]]]:\n        \"\"\"\n        Perform OCR with visualization (bounding boxes and annotations).\n\n        Args:\n            image: PIL Image or list of PIL Images\n            prompt: OCR prompt with grounding, defaults to document conversion\n            model_size: Model size configuration\n            save_results: Whether to save results with annotations\n            save_dir: Directory to save results\n            eval_mode: Whether to use evaluation mode\n            **kwargs: Additional parameters\n\n        Returns:\n            OCR results with visualization information\n        \"\"\"\n        if self._model is None or self._tokenizer is None:\n            raise RuntimeError(\"Model not loaded. Please call load() first.\")\n\n        # Handle single image input\n        if isinstance(image, PIL.Image.Image):\n            result = self._visualize_single(\n                image, prompt, model_size, save_results, save_dir, eval_mode, **kwargs\n            )\n\n            # Apply LaTeX post-processing using unified function\n            try:\n                from ...ui.gradio.utils.latex import process_ocr_result_with_latex\n\n                result = process_ocr_result_with_latex(\n                    result, output_format=\"markdown\", debug_info=True\n                )\n            except ImportError:\n                # Fallback: no LaTeX processing if import fails\n                pass\n\n            return result\n        # Handle batch image input\n        elif isinstance(image, list):\n            results = []\n            for img in image:\n                result = self._visualize_single(\n                    img, prompt, model_size, save_results, save_dir, eval_mode, **kwargs\n                )\n\n                # Apply LaTeX post-processing using unified function\n                try:\n                    from ...ui.gradio.utils.latex import process_ocr_result_with_latex\n\n                    result = process_ocr_result_with_latex(\n                        result, output_format=\"markdown\", debug_info=False\n                    )\n                except ImportError:\n                    # Fallback: no LaTeX processing if import fails\n                    pass\n\n                results.append(result)\n            return results\n        else:\n            raise ValueError(\"Input must be a PIL Image or list of PIL Images\")\n\n    def _visualize_single(\n        self,\n        image: PIL.Image.Image,\n        prompt: str,\n        model_size: str,\n        save_results: bool,\n        save_dir: Optional[str],\n        eval_mode: bool,\n        **kwargs,\n    ) -> Dict[str, Any]:\n        \"\"\"Perform OCR with visualization for a single image.\"\"\"\n        # Convert image to RGB if needed\n        if image.mode in [\"RGBA\", \"CMYK\"]:\n            image = image.convert(\"RGB\")\n\n        # Get model configuration\n        model_config = DeepSeekOCRModelSize.from_string(model_size)\n\n        # Create save directory if needed\n        if save_results and save_dir:\n            os.makedirs(save_dir, exist_ok=True)\n            os.makedirs(f\"{save_dir}/images\", exist_ok=True)\n\n        if self._model is None:\n            raise RuntimeError(\"Model is not loaded. Call load() method first.\")\n\n        try:\n            # Save image to temporary file\n            with tempfile.NamedTemporaryFile(suffix=\".jpg\", delete=False) as temp_file:\n                image.save(temp_file.name, \"JPEG\")\n                temp_image_path = temp_file.name\n\n            # Create output directory\n            output_path = tempfile.mkdtemp() if not save_dir else save_dir\n\n            try:\n                # Use DeepSeek-OCR's infer method with save_results enabled\n                result = self._model.infer(\n                    tokenizer=self._tokenizer,\n                    prompt=prompt,\n                    image_file=temp_image_path,\n                    output_path=output_path,\n                    base_size=model_config.base_size,\n                    image_size=model_config.image_size,\n                    crop_mode=model_config.crop_mode,\n                    save_results=save_results,\n                    eval_mode=eval_mode,\n                )\n\n                # Process visualization if save_results is enabled\n                visualization_info = {}\n                if save_results and save_dir and isinstance(result, str):\n                    try:\n                        # Extract references from result\n                        matches_ref, matches_images, matches_other = re_match(result)\n\n                        # Process image with references\n                        if matches_ref:\n                            result_image = process_image_with_refs(\n                                image.copy(), matches_ref, save_dir\n                            )\n                            result_image.save(f\"{save_dir}/result_with_boxes.jpg\")\n\n                            # Process image references in text\n                            processed_text = result\n                            for idx, match_image in enumerate(matches_images):\n                                processed_text = processed_text.replace(\n                                    match_image, f\"![](images/{idx}.jpg)\\n\"\n                                )\n\n                            # Remove other reference markers\n                            for idx, match_other in enumerate(matches_other):\n                                processed_text = processed_text.replace(match_other, \"\")\n\n                            # Save processed text as markdown\n                            with open(\n                                f\"{save_dir}/result.mmd\", \"w\", encoding=\"utf-8\"\n                            ) as f:\n                                f.write(processed_text)\n\n                            visualization_info = {\n                                \"has_annotations\": True,\n                                \"num_bounding_boxes\": len(matches_ref),\n                                \"num_extracted_images\": len(matches_images),\n                                \"annotated_image_path\": f\"{save_dir}/result_with_boxes.jpg\",\n                                \"markdown_path\": f\"{save_dir}/result.mmd\",\n                                \"extracted_images_dir\": f\"{save_dir}/images/\",\n                            }\n                        else:\n                            visualization_info = {\n                                \"has_annotations\": False,\n                                \"message\": \"No annotations found in OCR result\",\n                            }\n                    except Exception as e:\n                        logger.error(f\"Error processing visualization: {e}\")\n                        visualization_info = {\"error\": str(e)}\n\n                # Prepare response\n                response = {\n                    \"text\": result,\n                    \"model\": \"deepseek-ocr\",\n                    \"success\": True,\n                    \"model_size\": model_size,\n                    \"base_size\": model_config.base_size,\n                    \"image_size\": model_config.image_size,\n                    \"crop_mode\": model_config.crop_mode,\n                    \"visualization\": visualization_info,\n                }\n\n                # Add file info if saved\n                if save_results and save_dir:\n                    response[\"saved_files\"] = {\n                        \"output_dir\": save_dir,\n                        \"result_file\": (\n                            f\"{save_dir}/result.mmd\"\n                            if os.path.exists(f\"{save_dir}/result.mmd\")\n                            else None\n                        ),\n                        \"annotated_image\": (\n                            f\"{save_dir}/result_with_boxes.jpg\"\n                            if os.path.exists(f\"{save_dir}/result_with_boxes.jpg\")\n                            else None\n                        ),\n                    }\n\n                return response\n\n            finally:\n                # Clean up temporary file\n                os.unlink(temp_image_path)\n\n        except Exception as e:\n            logger.error(f\"OCR visualization failed: {e}\")\n            return {\n                \"text\": \"\",\n                \"model\": \"deepseek-ocr\",\n                \"success\": False,\n                \"error\": str(e),\n                \"model_size\": model_size,\n                \"visualization\": {\"error\": str(e)},\n            }\n\n    def _ocr_single(\n        self,\n        image: PIL.Image.Image,\n        prompt: str,\n        model_size: str = \"gundam\",\n        test_compress: bool = False,\n        save_results: bool = False,\n        save_dir: Optional[str] = None,\n        eval_mode: bool = False,\n        **kwargs,\n    ) -> Dict[str, Any]:\n        \"\"\"Perform OCR on a single image with all enhanced features.\"\"\"\n        # Convert image to RGB if needed\n        if image.mode in [\"RGBA\", \"CMYK\"]:\n            image = image.convert(\"RGB\")\n\n        if self._model is None or self._tokenizer is None:\n            raise RuntimeError(\"Model not loaded. Please call load() first.\")\n\n        # Get model configuration\n        model_config = DeepSeekOCRModelSize.from_string(model_size)\n\n        # Create save directory if needed\n        if save_results and save_dir:\n            os.makedirs(save_dir, exist_ok=True)\n            os.makedirs(f\"{save_dir}/images\", exist_ok=True)\n\n        try:\n            # Save image to temporary file for DeepSeek-OCR's infer method\n            with tempfile.NamedTemporaryFile(suffix=\".jpg\", delete=False) as temp_file:\n                image.save(temp_file.name, \"JPEG\")\n                temp_image_path = temp_file.name\n\n            # Create output directory\n            output_path = tempfile.mkdtemp() if not save_dir else save_dir\n\n            try:\n                # Use DeepSeek-OCR's infer method with all parameters\n                result = self._model.infer(\n                    tokenizer=self._tokenizer,\n                    prompt=prompt,\n                    image_file=temp_image_path,\n                    output_path=output_path,\n                    base_size=model_config.base_size,\n                    image_size=model_config.image_size,\n                    crop_mode=model_config.crop_mode,\n                    test_compress=test_compress,\n                    save_results=save_results,\n                    eval_mode=eval_mode,\n                )\n\n                # Apply LaTeX post-processing using unified function\n                try:\n                    from ...ui.gradio.utils.latex import process_ocr_result_with_latex\n\n                    # Process the result and extract LaTeX info\n                    processed_result = process_ocr_result_with_latex(\n                        result, output_format=\"markdown\", debug_info=True\n                    )\n\n                    # Extract text and LaTeX info\n                    if isinstance(processed_result, dict):\n                        latex_info = processed_result.get(\"latex_processing\")\n                        processed_result = processed_result.get(\"text\", result)\n                    else:\n                        processed_result = (\n                            processed_result if processed_result else result\n                        )\n                        latex_info = None\n\n                except ImportError:\n                    processed_result = result\n                    latex_info = None\n\n                # Prepare response\n                response = {\n                    \"text\": processed_result,\n                    \"model\": \"deepseek-ocr\",\n                    \"success\": True,\n                    \"model_size\": model_size,\n                    \"base_size\": model_config.base_size,\n                    \"image_size\": model_config.image_size,\n                    \"crop_mode\": model_config.crop_mode,\n                }\n\n                # If the model returned an empty result, fall back to visualization\n                # mode (same path as Gradio) to give users a usable response.\n                if processed_result is None or (\n                    isinstance(processed_result, str) and not processed_result.strip()\n                ):\n                    logger.warning(\n                        \"DeepSeek-OCR returned empty text, falling back to visualization mode.\"\n                    )\n                    return self.visualize_ocr(\n                        image=image,\n                        prompt=prompt,\n                        model_size=model_size,\n                        save_results=save_results,\n                        save_dir=save_dir,\n                        eval_mode=True,\n                        **kwargs,\n                    )\n\n                # Include LaTeX processing info in response\n                if latex_info:\n                    response[\"latex_processing\"] = latex_info\n\n                # Add compression info if tested\n                if test_compress:\n                    # Calculate compression ratio (simplified version)\n                    if hasattr(self._model, \"_last_compression_info\"):\n                        response.update(self._model._last_compression_info)\n\n                # Add file info if saved\n                if save_results and save_dir:\n                    response[\"saved_files\"] = {\n                        \"output_dir\": save_dir,\n                        \"result_file\": (\n                            f\"{save_dir}/result.mmd\"\n                            if os.path.exists(f\"{save_dir}/result.mmd\")\n                            else None\n                        ),\n                        \"annotated_image\": (\n                            f\"{save_dir}/result_with_boxes.jpg\"\n                            if os.path.exists(f\"{save_dir}/result_with_boxes.jpg\")\n                            else None\n                        ),\n                    }\n\n                return response\n\n            finally:\n                # Clean up temporary file\n                os.unlink(temp_image_path)\n\n        except Exception as e:\n            logger.error(f\"OCR processing failed: {e}\")\n            return {\n                \"text\": \"\",\n                \"model\": \"deepseek-ocr\",\n                \"success\": False,\n                \"error\": str(e),\n                \"model_size\": model_size,\n            }\n\n    def infer(\n        self,\n        image_paths: Union[str, List[str]],\n        prompt: str = \"<image>\\nFree OCR.\",\n        **kwargs,\n    ) -> Dict[str, Any]:\n        \"\"\"\n        Inference method for compatibility with Xinference interface.\n\n        Args:\n            image_paths: Single path or list of paths to images\n            prompt: OCR prompt\n            **kwargs: Additional parameters\n\n        Returns:\n            Dictionary containing OCR results\n        \"\"\"\n        from PIL import Image\n\n        # Convert string input to list\n        if isinstance(image_paths, str):\n            image_paths = [image_paths]\n\n        # Load images\n        images = []\n        for path in image_paths:\n            try:\n                img = Image.open(path)\n                images.append(img)\n            except Exception as e:\n                logger.error(f\"Failed to load image {path}: {e}\")\n                images.append(None)\n\n        # Process images\n        results = []\n        for i, img in enumerate(images):\n            if img is None:\n                results.append(\n                    {\n                        \"image\": image_paths[i],\n                        \"text\": \"\",\n                        \"success\": False,\n                        \"error\": \"Failed to load image\",\n                    }\n                )\n            else:\n                text_result = self._ocr_single(img, prompt, **kwargs)\n                results.append(\n                    {\"image\": image_paths[i], \"text\": text_result, \"success\": True}\n                )\n\n        return {\"results\": results}\n"
  },
  {
    "path": "xinference/model/image/ocr/got_ocr2.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import TYPE_CHECKING, Optional\n\nimport PIL.Image\n\nif TYPE_CHECKING:\n    from ..core import ImageModelFamilyV2\n\nfrom .ocr_family import OCRModel\n\nlogger = logging.getLogger(__name__)\n\n\nclass GotOCR2Model(OCRModel):\n    required_libs = (\"transformers\",)\n\n    @classmethod\n    def match(cls, model_family: \"ImageModelFamilyV2\") -> bool:\n        return model_family.model_name == \"GOT-OCR2_0\"\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: Optional[str] = None,\n        device: Optional[str] = None,\n        model_spec: Optional[\"ImageModelFamilyV2\"] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._device = device\n        # model info when loading\n        self._model = None\n        self._tokenizer = None\n        # info\n        self._model_spec = model_spec\n        self._abilities = model_spec.model_ability or []  # type: ignore\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._abilities\n\n    def load(self):\n        from transformers import AutoModel, AutoTokenizer\n\n        self._tokenizer = AutoTokenizer.from_pretrained(\n            self._model_path, trust_remote_code=True\n        )\n        model = AutoModel.from_pretrained(\n            self._model_path,\n            trust_remote_code=True,\n            low_cpu_mem_usage=True,\n            device_map=\"cuda\",\n            use_safetensors=True,\n            pad_token_id=self._tokenizer.eos_token_id,\n        )\n        self._model = model.eval().cuda()\n\n    def ocr(\n        self,\n        image: PIL.Image,\n        **kwargs,\n    ):\n        logger.info(\"Got OCR 2.0 kwargs: %s\", kwargs)\n        if \"ocr_type\" not in kwargs:\n            kwargs[\"ocr_type\"] = \"ocr\"\n        if image.mode == \"RGBA\" or image.mode == \"CMYK\":\n            # convert to RGB\n            image = image.convert(\"RGB\")\n        assert self._model is not None\n        # This chat API limits the max new tokens inside.\n        result = self._model.chat(self._tokenizer, image, gradio_input=True, **kwargs)\n        if result is None:\n            logger.warning(\"Got OCR 2.0 returned empty result.\")\n            return \"\"\n        return result\n"
  },
  {
    "path": "xinference/model/image/ocr/hunyuan_ocr.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import TYPE_CHECKING, Optional\n\nimport PIL.Image\nimport torch\n\nif TYPE_CHECKING:\n    from ..core import ImageModelFamilyV2\n\nfrom .ocr_family import OCRModel\n\nlogger = logging.getLogger(__name__)\n\n\nclass HunyuanOCRModel(OCRModel):\n    required_libs = (\"transformers\",)\n\n    @classmethod\n    def match(cls, model_family: \"ImageModelFamilyV2\") -> bool:\n        return model_family.model_name == \"HunyuanOCR\"\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: Optional[str] = None,\n        device: Optional[str] = None,\n        model_spec: Optional[\"ImageModelFamilyV2\"] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._device = device\n        self._model = None\n        self._processor = None\n        self._abilities = model_spec.model_ability or []  # type: ignore\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._abilities\n\n    def _load(self):\n        from transformers import AutoConfig, AutoProcessor\n\n        try:\n            from transformers import HunYuanVLForConditionalGeneration as ModelCls\n        except ImportError:\n            from transformers import AutoModelForSeq2SeqLM as ModelCls\n\n        attn_impl = self._kwargs.get(\"attn_implementation\", \"eager\")\n        torch_dtype = self._kwargs.get(\"torch_dtype\", torch.bfloat16)\n        device_map = self._kwargs.get(\"device_map\", \"auto\")\n\n        self._processor = AutoProcessor.from_pretrained(\n            self._model_path, use_fast=False, trust_remote_code=True\n        )\n        config = AutoConfig.from_pretrained(self._model_path, trust_remote_code=True)\n        self._model = ModelCls.from_pretrained(\n            self._model_path,\n            config=config,\n            attn_implementation=attn_impl,\n            torch_dtype=torch_dtype,\n            device_map=device_map,\n            trust_remote_code=True,\n        )\n\n    def load(self):\n        if self._model is None:\n            self._load()\n\n    def ocr(self, image: PIL.Image.Image, prompt: Optional[str] = None, **kwargs):\n        if self._model is None or self._processor is None:\n            self._load()\n\n        if image.mode in (\"RGBA\", \"CMYK\"):\n            image = image.convert(\"RGB\")\n\n        if prompt is None:\n            prompt = \"Detect and recognize text within images, then output the text coordinates in a formatted manner.\"\n\n        messages = [\n            {\"role\": \"system\", \"content\": \"\"},\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"image\", \"image\": image},\n                    {\"type\": \"text\", \"text\": prompt},\n                ],\n            },\n        ]\n        processor = self._processor\n        assert processor is not None  # type check helper\n\n        text = processor.apply_chat_template(\n            messages, tokenize=False, add_generation_prompt=True\n        )\n        inputs = processor(text=[text], images=image, padding=True, return_tensors=\"pt\")\n\n        max_new_tokens = kwargs.pop(\"max_new_tokens\", 2048)\n        do_sample = kwargs.pop(\"do_sample\", False)\n        temperature = kwargs.pop(\"temperature\", None)\n\n        with torch.no_grad():\n            device = next(self._model.parameters()).device  # type: ignore\n            inputs = inputs.to(device)\n            generated_ids = self._model.generate(  # type: ignore\n                **inputs,\n                max_new_tokens=max_new_tokens,\n                do_sample=do_sample,\n                temperature=temperature,\n            )\n\n        input_ids = inputs.get(\"input_ids\", inputs.get(\"inputs\"))\n        if input_ids is None:\n            logger.warning(\n                \"HunyuanOCR: input_ids missing in inputs, returning raw text\"\n            )\n            return processor.batch_decode(\n                generated_ids,\n                skip_special_tokens=True,\n                clean_up_tokenization_spaces=False,\n            )\n\n        generated_ids_trimmed = [\n            out_ids[len(in_ids) :] for in_ids, out_ids in zip(input_ids, generated_ids)\n        ]\n        output_texts = processor.batch_decode(\n            generated_ids_trimmed,\n            skip_special_tokens=True,\n            clean_up_tokenization_spaces=False,\n        )\n        if isinstance(output_texts, list):\n            if output_texts:\n                return output_texts[0]\n            logger.warning(\"HunyuanOCR returned empty decoded list.\")\n            return \"\"\n        if output_texts is None:\n            logger.warning(\"HunyuanOCR returned None output.\")\n            return \"\"\n        return output_texts\n"
  },
  {
    "path": "xinference/model/image/ocr/mlx.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport platform\nimport sys\nfrom typing import TYPE_CHECKING, Any, List, Optional, Tuple, Union\n\nimport PIL.Image\n\nfrom .deepseek_ocr import DeepSeekOCRModel\n\nlogger = logging.getLogger(__name__)\n\nif TYPE_CHECKING:\n    from ..core import ImageModelFamilyV2\n\n\nclass MLXDeepSeekOCRModel(DeepSeekOCRModel):\n    required_libs: Tuple[str, ...] = (\"mlx_vlm\", \"mlx\")\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: Optional[str] = None,\n        device: Optional[str] = None,\n        model_spec: Optional[\"ImageModelFamilyV2\"] = None,\n        **kwargs,\n    ):\n        super().__init__(model_uid, model_path, device, model_spec, **kwargs)\n        self._processor: Optional[Any] = None\n\n    @classmethod\n    def match(cls, model_family) -> bool:\n        model_format = getattr(model_family, \"model_format\", None)\n        return model_family.model_name == \"DeepSeek-OCR\" and model_format == \"mlx\"\n\n    @classmethod\n    def check_lib(cls):\n        if sys.platform != \"darwin\" or platform.processor() != \"arm\":\n            return False, \"MLX engine is only supported on Apple silicon Macs.\"\n        return super().check_lib()\n\n    def load(self):\n        if sys.platform != \"darwin\" or platform.processor() != \"arm\":\n            raise RuntimeError(\"MLX OCR engine only works on Apple silicon Macs.\")\n        try:\n            from mlx_vlm import load\n        except ImportError:\n            error_message = \"Failed to import module 'mlx_vlm'\"\n            installation_guide = [\n                \"Please make sure 'mlx_vlm' is installed. \",\n                \"You can install it by `pip install mlx_vlm`\\n\",\n            ]\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        try:\n            import mlx.core as mx\n\n            orig_uniform = mx.random.uniform\n            orig_zeros = mx.zeros\n\n            def _uniform(*args, **kwargs):\n                def _normalize_shape(shape):\n                    if shape is None:\n                        return []\n                    if isinstance(shape, dict):\n                        if \"shape\" in shape:\n                            return _normalize_shape(shape.get(\"shape\"))\n                        if \"size\" in shape:\n                            return _normalize_shape(shape.get(\"size\"))\n                        return []\n                    if isinstance(shape, (list, tuple)):\n                        normalized = []\n                        for value in shape:\n                            if isinstance(value, dict):\n                                extracted = _normalize_shape(value)\n                                if extracted:\n                                    return extracted\n                                return []\n                            try:\n                                normalized.append(int(value))\n                            except Exception:\n                                return []\n                        return normalized\n                    if hasattr(shape, \"tolist\"):\n                        try:\n                            return [int(x) for x in shape.tolist()]\n                        except Exception:\n                            return shape\n                    return shape\n\n                if kwargs:\n                    dtype = kwargs.get(\"dtype\") or mx.float32\n                    low = kwargs.get(\"low\", 0)\n                    high = kwargs.get(\"high\", 1)\n                    shape = _normalize_shape(kwargs.get(\"shape\", []))\n                    key = kwargs.get(\"key\", None)\n                    stream = kwargs.get(\"stream\", None)\n                    call_kwargs = {\"low\": low, \"high\": high, \"shape\": shape}\n                    if key is not None:\n                        call_kwargs[\"key\"] = key\n                    if stream is not None:\n                        call_kwargs[\"stream\"] = stream\n                    try:\n                        call_kwargs[\"dtype\"] = dtype\n                        return orig_uniform(**call_kwargs)\n                    except TypeError:\n                        call_kwargs.pop(\"dtype\", None)\n                        try:\n                            return orig_uniform(**call_kwargs)\n                        except TypeError:\n                            import numpy as np\n\n                            return mx.array(\n                                np.random.uniform(low, high, size=shape),\n                                dtype=dtype,\n                            )\n\n                if args:\n                    if len(args) == 3:\n                        low, high, shape = args\n                        shape = _normalize_shape(shape)\n                        try:\n                            return orig_uniform(low, high, shape, mx.float32)\n                        except TypeError:\n                            import numpy as np\n\n                            return mx.array(\n                                np.random.uniform(low, high, size=shape),\n                                dtype=mx.float32,\n                            )\n                    if len(args) == 4:\n                        low, high, shape, dtype = args\n                        shape = _normalize_shape(shape)\n                        try:\n                            return orig_uniform(low, high, shape, dtype)\n                        except TypeError:\n                            import numpy as np\n\n                            return mx.array(\n                                np.random.uniform(low, high, size=shape),\n                                dtype=dtype,\n                            )\n                    raise TypeError(\n                        f\"mlx.random.uniform unsupported positional args: {args}\"\n                    )\n\n                return orig_uniform(dtype=mx.float32)\n\n            mx.random.uniform = _uniform\n\n            def _zeros(shape, dtype=None, stream=None):\n                def _normalize_shape(value):\n                    if value is None:\n                        return []\n                    if isinstance(value, dict):\n                        if \"shape\" in value:\n                            return _normalize_shape(value.get(\"shape\"))\n                        if \"size\" in value:\n                            return _normalize_shape(value.get(\"size\"))\n                        return []\n                    if isinstance(value, (list, tuple)):\n                        normalized = []\n                        for item in value:\n                            if isinstance(item, dict):\n                                extracted = _normalize_shape(item)\n                                if extracted:\n                                    return extracted\n                                return []\n                            try:\n                                normalized.append(int(item))\n                            except Exception:\n                                return []\n                        if len(normalized) == 1:\n                            return normalized[0]\n                        return normalized\n                    try:\n                        return int(value)\n                    except Exception:\n                        return value\n\n                shape = _normalize_shape(shape)\n                if dtype is None:\n                    dtype = mx.float32\n                try:\n                    return orig_zeros(shape, dtype=dtype, stream=stream)\n                except TypeError:\n                    return orig_zeros(shape)\n\n            mx.zeros = _zeros\n        except Exception:\n            logger.debug(\"mlx random.uniform patch skipped.\")\n\n        try:\n            from mlx_vlm import utils as mlx_utils\n\n            orig_load_config = mlx_utils.load_config\n\n            def _patched_load_config(model_path, **kwargs):\n                config = orig_load_config(model_path, **kwargs)\n                vision_config = config.get(\"vision_config\", {})\n                width_config = vision_config.get(\"width\")\n                if isinstance(width_config, dict):\n                    preferred_key = vision_config.get(\"model_name\") or \"clip-l-14-224\"\n                    if preferred_key not in width_config:\n                        preferred_key = next(iter(width_config))\n                    selected = width_config.get(preferred_key, {})\n                    vision_config = dict(vision_config)\n                    vision_config[\"width\"] = selected.get(\n                        \"width\", vision_config.get(\"width\")\n                    )\n                    vision_config[\"layers\"] = selected.get(\n                        \"layers\", vision_config.get(\"layers\")\n                    )\n                    if \"patch_size\" in selected:\n                        vision_config[\"patch_size\"] = selected[\"patch_size\"]\n                    if \"image_size\" in selected:\n                        vision_config[\"image_size\"] = selected[\"image_size\"]\n                    if \"heads\" in selected:\n                        vision_config[\"num_attention_heads\"] = selected[\"heads\"]\n                    config[\"vision_config\"] = vision_config\n                return config\n\n            mlx_utils.load_config = _patched_load_config\n            self._model, self._processor = load(self._model_path)\n        finally:\n            try:\n                mlx_utils.load_config = orig_load_config\n            except Exception:\n                pass\n        self._tokenizer = self._processor.tokenizer\n\n    def ocr(\n        self,\n        image: Union[PIL.Image.Image, List[PIL.Image.Image]],\n        prompt: Optional[str] = None,\n        **kwargs,\n    ):\n        if prompt is None:\n            prompt = \"<image>\\nFree OCR.\"\n        if isinstance(image, list):\n            return [self._ocr_single(img, prompt, **kwargs) for img in image]\n        return self._ocr_single(image, prompt, **kwargs)\n\n    def _ocr_single(\n        self,\n        image: PIL.Image.Image,\n        prompt: str,\n        model_size: str = \"gundam\",\n        test_compress: bool = False,\n        save_results: bool = False,\n        save_dir: Optional[str] = None,\n        eval_mode: bool = False,\n        **kwargs,\n    ):\n        if image.mode in (\"RGBA\", \"CMYK\"):\n            image = image.convert(\"RGB\")\n        text = self._generate_text(image, prompt, **kwargs)\n        return {\n            \"text\": text,\n            \"model\": \"deepseek-ocr\",\n            \"success\": True,\n            \"model_size\": model_size,\n        }\n\n    def _prepare_inputs(self, image: PIL.Image.Image, prompt: str):\n        from mlx_vlm import prepare_inputs\n\n        processor = self._processor\n        inputs = prepare_inputs(processor=processor, images=[image], prompts=prompt)\n        input_ids = inputs[\"input_ids\"]\n        pixel_values = inputs[\"pixel_values\"]\n        mask = inputs[\"attention_mask\"]\n        extra = {\n            k: v\n            for k, v in inputs.items()\n            if k not in [\"input_ids\", \"pixel_values\", \"attention_mask\"]\n        }\n        return (input_ids, pixel_values, mask, extra)\n\n    def _generate_text(self, image: PIL.Image.Image, prompt: str, **kwargs) -> str:\n        try:\n            from mlx_vlm.generate import generate_step\n        except ImportError:\n            raise ImportError(\n                \"Failed to import mlx_vlm.generate.generate_step. \"\n                \"Please make sure mlx_vlm is installed.\"\n            )\n\n        input_ids, pixel_values, mask, extra = self._prepare_inputs(image, prompt)\n        stop_token_ids = kwargs.pop(\"stop_token_ids\", [])\n        max_new_tokens = kwargs.pop(\"max_new_tokens\", None)\n        if max_new_tokens is None:\n            max_new_tokens = kwargs.pop(\"max_tokens\", 512)\n        temperature = kwargs.pop(\"temperature\", 0.0)\n        top_p = kwargs.pop(\"top_p\", None)\n\n        gen_kwargs = {\"max_tokens\": max_new_tokens, \"temperature\": temperature}\n        if top_p is not None:\n            gen_kwargs[\"top_p\"] = top_p\n        gen_kwargs.update(extra)\n        gen_kwargs.update(kwargs)\n\n        processor = self._processor\n        assert processor is not None\n        detokenizer = processor.detokenizer\n        tokenizer = processor.tokenizer\n        detokenizer.reset()\n        text_parts = []\n\n        for token, _ in generate_step(\n            input_ids, self._model, pixel_values, mask, **gen_kwargs\n        ):\n            if token == tokenizer.eos_token_id or token in stop_token_ids:\n                break\n            detokenizer.add_token(token)\n            text_parts.append(detokenizer.last_segment)\n        detokenizer.finalize()\n        text_parts.append(detokenizer.last_segment)\n        return \"\".join(text_parts)\n"
  },
  {
    "path": "xinference/model/image/ocr/ocr_family.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport importlib.util\nimport logging\nfrom typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Type, Union\n\nif TYPE_CHECKING:\n    from ..core import ImageModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass OCRModel:\n    required_libs: Tuple[str, ...] = ()\n\n    def __init__(self, *args: Any, **kwargs: Any) -> None:\n        pass\n\n    @classmethod\n    def match(cls, model_family: \"ImageModelFamilyV2\") -> bool:\n        raise NotImplementedError\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        for lib in cls.required_libs:\n            if importlib.util.find_spec(lib) is None:\n                return False, f\"Library '{lib}' is not installed\"\n        return True\n\n\n# { ocr model name -> { engine name -> engine params } }\nOCR_ENGINES: Dict[str, Dict[str, List[Dict[str, Any]]]] = {}\nSUPPORTED_ENGINES: Dict[str, List[Type[OCRModel]]] = {}\n\n\ndef check_engine_by_model_name_and_engine(\n    model_engine: str,\n    model_name: str,\n    model_format: Optional[str],\n    quantization: Optional[str],\n) -> Type[OCRModel]:\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in OCR_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    if model_name not in OCR_ENGINES:\n        raise ValueError(f\"Model {model_name} not found.\")\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in OCR_ENGINES[model_name]:\n        raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n    match_params = OCR_ENGINES[model_name][model_engine]\n    for param in match_params:\n        if model_name != param[\"model_name\"]:\n            continue\n        if (model_format and model_format != param[\"model_format\"]) or (\n            quantization and quantization != param[\"quantization\"]\n        ):\n            continue\n        return param[\"ocr_class\"]\n    raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n\n\ndef check_engine_by_model_name_and_engine_with_virtual_env(\n    model_engine: str,\n    model_name: str,\n    model_format: Optional[str],\n    quantization: Optional[str],\n    model_family: Optional[\"ImageModelFamilyV2\"] = None,\n) -> Type[OCRModel]:\n    from ...utils import _collect_virtualenv_engine_markers\n\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in OCR_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    if model_family is None:\n        raise ValueError(f\"Model {model_name} not found.\")\n\n    engine_markers = _collect_virtualenv_engine_markers(model_family)\n    if model_name not in OCR_ENGINES:\n        if model_engine.lower() in engine_markers:\n            engine_classes = SUPPORTED_ENGINES.get(model_engine, [])\n            if engine_classes:\n                logger.warning(\n                    \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                    model_engine,\n                )\n                return engine_classes[0]\n        raise ValueError(f\"Model {model_name} not found.\")\n\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in OCR_ENGINES[model_name]:\n        if model_engine.lower() in engine_markers:\n            engine_classes = SUPPORTED_ENGINES.get(model_engine, [])\n            if engine_classes:\n                logger.warning(\n                    \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                    model_engine,\n                )\n                return engine_classes[0]\n        raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n\n    match_params = OCR_ENGINES[model_name][model_engine]\n    if match_params:\n        return match_params[0][\"ocr_class\"]\n\n    raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n\n\ndef generate_engine_config_by_model_name(model_family: \"ImageModelFamilyV2\") -> None:\n    model_name = model_family.model_name\n    model_format = getattr(model_family, \"model_format\", None)\n    quantization = getattr(model_family, \"quantization\", None)\n    engines: Dict[str, List[Dict[str, Any]]] = OCR_ENGINES.get(model_name, {})\n    for engine, classes in SUPPORTED_ENGINES.items():\n        for cls in classes:\n            if cls.match(model_family):\n                engine_params = engines.get(engine, [])\n                engine_params.append(\n                    {\n                        \"model_name\": model_name,\n                        \"model_format\": model_format,\n                        \"quantization\": quantization,\n                        \"ocr_class\": cls,\n                    }\n                )\n                engines[engine] = engine_params\n                break\n    if engines:\n        OCR_ENGINES[model_name] = engines\n"
  },
  {
    "path": "xinference/model/image/ocr/paddleocr_vl.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import TYPE_CHECKING, Any, Dict, List, Optional, Union\n\nimport PIL.Image\nimport torch\n\nif TYPE_CHECKING:\n    from ..core import ImageModelFamilyV2\n\nfrom .ocr_family import OCRModel\n\nlogger = logging.getLogger(__name__)\n\n\nclass PaddleOCRVLModel(OCRModel):\n    \"\"\"PaddleOCR-VL model for OCR, table recognition, formula recognition, and chart recognition.\"\"\"\n\n    required_libs = (\"transformers\",)\n\n    @classmethod\n    def match(cls, model_family: \"ImageModelFamilyV2\") -> bool:\n        return model_family.model_name == \"PaddleOCR-VL\"\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: Optional[str] = None,\n        device: Optional[str] = None,\n        model_spec: Optional[\"ImageModelFamilyV2\"] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._device = device\n        # model info when loading\n        self._model = None\n        self._processor = None\n        # info\n        self._model_spec = model_spec\n        self._abilities = model_spec.model_ability or []  # type: ignore\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._abilities\n\n    def load(self):\n        from transformers import AutoModelForCausalLM, AutoProcessor\n\n        logger.info(f\"Loading PaddleOCR-VL model from {self._model_path}\")\n\n        try:\n            # Determine device and dtype\n            if self._device == \"cpu\":\n                device = \"cpu\"\n                dtype = torch.float32\n            else:\n                device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n                dtype = torch.bfloat16\n\n            # Load processor\n            self._processor = AutoProcessor.from_pretrained(\n                self._model_path, trust_remote_code=True\n            )\n\n            # Load model\n            self._model = (\n                AutoModelForCausalLM.from_pretrained(\n                    self._model_path,\n                    trust_remote_code=True,\n                    torch_dtype=dtype,\n                )\n                .to(device)\n                .eval()\n            )\n\n            logger.info(\n                f\"PaddleOCR-VL model loaded successfully on {device} with dtype {dtype}\"\n            )\n        except Exception as e:\n            logger.error(f\"Failed to load PaddleOCR-VL model: {e}\")\n            raise\n\n    def ocr(\n        self,\n        image: Union[PIL.Image.Image, List[PIL.Image.Image]],\n        **kwargs,\n    ) -> Union[str, List[str], Dict[str, Any]]:\n        \"\"\"\n        Perform OCR, table recognition, formula recognition, or chart recognition.\n\n        Args:\n            image: PIL Image or list of PIL Images\n            **kwargs: Additional parameters including:\n                - task: Task type ('ocr', 'table', 'formula', 'chart'), default: 'ocr'\n                - prompt: Custom prompt (optional, overrides task-based prompt)\n                - max_new_tokens: Maximum number of tokens to generate (default: 1024)\n                - return_dict: Whether to return a dictionary with metadata (default: False)\n\n        Returns:\n            OCR results as string, list of strings, or dict\n        \"\"\"\n        logger.info(\"PaddleOCR-VL kwargs: %s\", kwargs)\n\n        if self._model is None or self._processor is None:\n            raise RuntimeError(\"Model not loaded. Please call load() first.\")\n\n        # Extract parameters\n        task = kwargs.get(\"task\", \"ocr\")\n        custom_prompt = kwargs.get(\"prompt\", None)\n        max_new_tokens = kwargs.get(\"max_new_tokens\", 1024)\n        return_dict = kwargs.get(\"return_dict\", False)\n\n        # Define task prompts\n        PROMPTS = {\n            \"ocr\": \"OCR:\",\n            \"table\": \"Table Recognition:\",\n            \"formula\": \"Formula Recognition:\",\n            \"chart\": \"Chart Recognition:\",\n        }\n\n        # Use custom prompt if provided, otherwise use task-based prompt\n        if custom_prompt:\n            prompt = custom_prompt\n        else:\n            prompt = PROMPTS.get(task, PROMPTS[\"ocr\"])\n\n        # Handle single image input\n        if isinstance(image, PIL.Image.Image):\n            result = self._process_single(image, prompt, max_new_tokens)\n            if return_dict:\n                return {\n                    \"text\": result,\n                    \"model\": \"paddleocr-vl\",\n                    \"task\": task,\n                    \"success\": True,\n                }\n            return result\n\n        # Handle batch image input\n        elif isinstance(image, list):\n            results = [\n                self._process_single(img, prompt, max_new_tokens) for img in image\n            ]\n            if return_dict:\n                return {\n                    \"text\": results,\n                    \"model\": \"paddleocr-vl\",\n                    \"task\": task,\n                    \"success\": True,\n                    \"num_images\": len(results),\n                }\n            return results\n\n        else:\n            raise ValueError(\"Input must be a PIL Image or list of PIL Images\")\n\n    def _process_single(\n        self, image: PIL.Image.Image, prompt: str, max_new_tokens: int\n    ) -> str:\n        \"\"\"Process a single image with the given prompt.\"\"\"\n        # Ensure model and processor are loaded\n        assert self._model is not None, \"Model not loaded. Call load() first.\"\n        assert self._processor is not None, \"Processor not loaded. Call load() first.\"\n\n        # Convert image to RGB if needed\n        if image.mode in [\"RGBA\", \"CMYK\"]:\n            image = image.convert(\"RGB\")\n\n        # Get device\n        device = next(self._model.parameters()).device\n\n        # Prepare messages in the format expected by PaddleOCR-VL\n        messages = [\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"image\", \"image\": image},\n                    {\"type\": \"text\", \"text\": prompt},\n                ],\n            }\n        ]\n\n        # Apply chat template\n        inputs = self._processor.apply_chat_template(\n            messages,\n            tokenize=True,\n            add_generation_prompt=True,\n            return_dict=True,\n            return_tensors=\"pt\",\n        ).to(device)\n\n        # Generate\n        with torch.inference_mode():\n            outputs = self._model.generate(**inputs, max_new_tokens=max_new_tokens)\n\n        # Decode output\n        # Slice to remove input prompt from output\n        generated_ids = outputs[:, inputs.input_ids.shape[1] :]\n        result = self._processor.batch_decode(generated_ids, skip_special_tokens=True)[\n            0\n        ]\n\n        return result\n"
  },
  {
    "path": "xinference/model/image/ocr/vllm.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import Any, Dict, List, Optional, Union\n\nimport PIL.Image\n\nfrom ....device_utils import is_vacc_available\nfrom .deepseek_ocr import DeepSeekOCRModel\nfrom .got_ocr2 import GotOCR2Model\nfrom .hunyuan_ocr import HunyuanOCRModel\nfrom .paddleocr_vl import PaddleOCRVLModel\n\nlogger = logging.getLogger(__name__)\n\n\ndef _load_vllm_model(model_path: str, model_kwargs: Dict[str, Any]):\n    try:\n        if is_vacc_available():\n            import vllm_vacc  # noqa: F401\n        from vllm import LLM\n    except ImportError as exc:\n        error_message = \"Failed to import module 'vllm'\"\n        installation_guide = [\n            \"Please make sure 'vllm' is installed. \",\n            \"You can install it by `pip install vllm`\\n\",\n        ]\n        raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\") from exc\n\n    filtered_kwargs = _filter_engine_args(model_kwargs)\n    if filtered_kwargs.keys() != model_kwargs.keys():\n        dropped = set(model_kwargs) - set(filtered_kwargs)\n        logger.info(\"Dropping unsupported vLLM args: %s\", sorted(dropped))\n    import inspect\n\n    llm_params = inspect.signature(LLM.__init__).parameters\n    if \"task\" in llm_params:\n        return LLM(model=model_path, task=\"generate\", **filtered_kwargs)\n    return LLM(model=model_path, **filtered_kwargs)\n\n\ndef _sanitize_vllm_kwargs(kwargs: Dict[str, Any]) -> Dict[str, Any]:\n    vllm_kwargs = dict(kwargs)\n    for key in (\n        \"device\",\n        \"device_map\",\n        \"torch_dtype\",\n        \"attn_implementation\",\n        \"use_fast\",\n    ):\n        vllm_kwargs.pop(key, None)\n    if \"cpu_offload\" in vllm_kwargs and \"cpu_offload_gb\" not in vllm_kwargs:\n        vllm_kwargs[\"cpu_offload_gb\"] = vllm_kwargs.pop(\"cpu_offload\")\n    return vllm_kwargs\n\n\ndef _filter_engine_args(model_kwargs: Dict[str, Any]) -> Dict[str, Any]:\n    try:\n        from vllm.engine.arg_utils import EngineArgs\n    except Exception:  # noqa: BLE001\n        return model_kwargs\n\n    import inspect\n\n    valid_keys = set(inspect.signature(EngineArgs.__init__).parameters.keys())\n    valid_keys.discard(\"self\")\n    return {key: value for key, value in model_kwargs.items() if key in valid_keys}\n\n\ndef _build_sampling_params(kwargs: Dict[str, Any]):\n    from vllm import SamplingParams\n\n    max_tokens = kwargs.pop(\"max_tokens\", None)\n    if max_tokens is None:\n        max_tokens = kwargs.pop(\"max_new_tokens\", 2048)\n\n    do_sample = kwargs.pop(\"do_sample\", False)\n    temperature = kwargs.pop(\"temperature\", None)\n    if temperature is None and not do_sample:\n        temperature = 0.0\n\n    top_p = kwargs.pop(\"top_p\", None)\n    stop = kwargs.pop(\"stop\", None)\n    params: Dict[str, Any] = {\n        \"max_tokens\": max_tokens,\n        \"temperature\": temperature,\n    }\n    if top_p is not None:\n        params[\"top_p\"] = top_p\n    if stop is not None:\n        params[\"stop\"] = stop\n    return SamplingParams(**params)\n\n\ndef _extract_text(outputs: List[Any]) -> List[str]:\n    texts: List[str] = []\n    for output in outputs:\n        if not output.outputs:\n            texts.append(\"\")\n            continue\n        texts.append((output.outputs[0].text or \"\").strip())\n    return texts\n\n\ndef _shutdown_vllm_model(model: Any) -> None:\n    if model is None:\n        return\n    try:\n        shutdown = getattr(model, \"shutdown\", None)\n        if callable(shutdown):\n            shutdown()\n            return\n    except Exception:\n        logger.debug(\"Failed to call vLLM model.shutdown()\", exc_info=True)\n\n    engine = getattr(model, \"llm_engine\", None) or getattr(model, \"engine\", None)\n    if engine is None:\n        return\n    try:\n        engine_shutdown = getattr(engine, \"shutdown\", None)\n        if callable(engine_shutdown):\n            engine_shutdown()\n    except Exception:\n        logger.debug(\"Failed to call vLLM engine.shutdown()\", exc_info=True)\n    try:\n        model_executor = getattr(engine, \"model_executor\", None)\n        executor_shutdown = getattr(model_executor, \"shutdown\", None)\n        if callable(executor_shutdown):\n            executor_shutdown()\n    except Exception:\n        logger.debug(\"Failed to call vLLM executor.shutdown()\", exc_info=True)\n\n\nclass VLLMDeepSeekOCRModel(DeepSeekOCRModel):\n    required_libs = (\"vllm\",)\n\n    def load(self):\n        vllm_kwargs = _sanitize_vllm_kwargs(self._kwargs)\n        self._model = _load_vllm_model(self._model_path, vllm_kwargs)\n        self._tokenizer = self._model.get_tokenizer()\n\n    def stop(self):\n        _shutdown_vllm_model(self._model)\n        self._model = None\n        self._tokenizer = None\n\n    def _prepare_inputs(\n        self, prompt: str, image: Union[PIL.Image.Image, List[PIL.Image.Image]]\n    ) -> List[Dict[str, Any]]:\n        images = image if isinstance(image, list) else [image]\n        return [\n            {\"prompt\": prompt, \"multi_modal_data\": {\"image\": [img]}} for img in images\n        ]\n\n    def ocr(\n        self,\n        image: Union[PIL.Image.Image, List[PIL.Image.Image]],\n        **kwargs,\n    ) -> Union[Dict[str, Any], List[Dict[str, Any]]]:\n        if self._model is None:\n            self.load()\n        assert self._model is not None\n\n        prompt = kwargs.pop(\"prompt\", \"<image>\\nFree OCR.\")\n        kwargs.pop(\"model_size\", None)\n        kwargs.pop(\"test_compress\", None)\n        kwargs.pop(\"save_results\", None)\n        kwargs.pop(\"save_dir\", None)\n        kwargs.pop(\"eval_mode\", None)\n\n        sampling_params = _build_sampling_params(kwargs)\n        inputs = self._prepare_inputs(prompt, image)\n        outputs = self._model.generate(inputs, sampling_params)\n        texts = _extract_text(outputs)\n\n        def _as_response(text: str) -> Dict[str, Any]:\n            return {\n                \"text\": text,\n                \"model\": \"deepseek-ocr\",\n                \"engine\": \"vllm\",\n                \"success\": True,\n            }\n\n        if isinstance(image, list):\n            return [_as_response(text) for text in texts]\n        return _as_response(texts[0] if texts else \"\")\n\n    def visualize_ocr(\n        self,\n        image: Union[PIL.Image.Image, List[PIL.Image.Image]],\n        prompt: str = \"<image>\\n<|grounding|>Convert the document to markdown.\",\n        model_size: str = \"gundam\",\n        save_results: bool = False,\n        save_dir: Optional[str] = None,\n        eval_mode: bool = False,\n        **kwargs,\n    ) -> Union[Dict[str, Any], List[Dict[str, Any]]]:\n        _ = (model_size, save_results, save_dir, eval_mode)\n        response = self.ocr(image=image, prompt=prompt, **kwargs)\n        if isinstance(response, list):\n            return [\n                {\n                    **item,\n                    \"visualization\": {\n                        \"has_annotations\": False,\n                        \"num_bounding_boxes\": 0,\n                        \"num_extracted_images\": 0,\n                    },\n                }\n                for item in response\n            ]\n        response[\"visualization\"] = {\n            \"has_annotations\": False,\n            \"num_bounding_boxes\": 0,\n            \"num_extracted_images\": 0,\n        }\n        return response\n\n\nclass VLLMGotOCR2Model(GotOCR2Model):\n    required_libs = (\"vllm\",)\n\n\nclass VLLMHunyuanOCRModel(HunyuanOCRModel):\n    required_libs = (\"vllm\",)\n\n    def load(self):\n        from transformers import AutoProcessor\n\n        vllm_kwargs = _sanitize_vllm_kwargs(self._kwargs)\n        self._model = _load_vllm_model(self._model_path, vllm_kwargs)\n        self._tokenizer = self._model.get_tokenizer()\n        self._processor = AutoProcessor.from_pretrained(\n            self._model_path, use_fast=False, trust_remote_code=True\n        )\n\n    def stop(self):\n        _shutdown_vllm_model(self._model)\n        self._model = None\n        self._tokenizer = None\n        self._processor = None\n\n    def _build_prompt(self, image: PIL.Image.Image, prompt: str) -> str:\n        processor = self._processor\n        assert processor is not None\n        messages = [\n            {\"role\": \"system\", \"content\": \"\"},\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"image\", \"image\": image},\n                    {\"type\": \"text\", \"text\": prompt},\n                ],\n            },\n        ]\n        return processor.apply_chat_template(\n            messages, tokenize=False, add_generation_prompt=True\n        )\n\n    def ocr(\n        self,\n        image: Union[PIL.Image.Image, List[PIL.Image.Image]],\n        prompt: Optional[str] = None,\n        **kwargs,\n    ) -> Union[str, List[str]]:\n        if self._model is None or self._processor is None:\n            self.load()\n        assert self._model is not None\n\n        if prompt is None:\n            prompt = (\n                \"Detect and recognize text within images, then output the text \"\n                \"coordinates in a formatted manner.\"\n            )\n\n        if isinstance(image, list):\n            prompts = [self._build_prompt(img, prompt) for img in image]\n            inputs = [\n                {\"prompt\": text, \"multi_modal_data\": {\"image\": [img]}}\n                for text, img in zip(prompts, image)\n            ]\n        else:\n            text = self._build_prompt(image, prompt)\n            inputs = [{\"prompt\": text, \"multi_modal_data\": {\"image\": [image]}}]\n\n        sampling_params = _build_sampling_params(kwargs)\n        outputs = self._model.generate(inputs, sampling_params)\n        texts = _extract_text(outputs)\n\n        if isinstance(image, list):\n            return texts\n        return texts[0] if texts else \"\"\n\n\nclass VLLMPaddleOCRVLModel(PaddleOCRVLModel):\n    required_libs = (\"vllm\",)\n"
  },
  {
    "path": "xinference/model/image/scheduler/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/image/scheduler/flux.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport asyncio\nimport logging\nimport os\nimport re\nimport typing\nfrom collections import deque\nfrom typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple\n\nimport numpy as np\nimport torch\nimport xoscar as xo\n\nfrom ..utils import handle_image_result\n\nif TYPE_CHECKING:\n    from ..stable_diffusion.core import DiffusionModel\n\n\nlogger = logging.getLogger(__name__)\nDEFAULT_MAX_SEQUENCE_LENGTH = 512\n\n\nclass Text2ImageRequest:\n    def __init__(\n        self,\n        unique_id,\n        future,\n        prompt: str,\n        n: int,\n        size: str,\n        response_format: str,\n        *args,\n        **kwargs,\n    ):\n        self._unique_id = unique_id\n        self.future = future\n        self._prompt = prompt\n        self._n = n\n        self._size = size\n        self._response_format = response_format\n        self._args = args\n        self._kwargs = kwargs\n        self._width = -1\n        self._height = -1\n        self._generate_kwargs: Dict[str, Any] = {}\n        self._set_width_and_height()\n        self.is_encode = True\n        self.scheduler = None\n        self.done_steps = 0\n        self.total_steps = 0\n        self.static_tensors: Dict[str, torch.Tensor] = {}\n        self.timesteps = None\n        self.dtype = None\n        self.output = None\n        self.error_msg: Optional[str] = None\n        self.aborted = False\n\n    def _set_width_and_height(self):\n        self._width, self._height = map(int, re.split(r\"[^\\d]+\", self._size))\n\n    def set_generate_kwargs(self, generate_kwargs: Dict):\n        self._generate_kwargs = {k: v for k, v in generate_kwargs.items()}\n\n    @property\n    def prompt(self):\n        return self._prompt\n\n    @property\n    def n(self):\n        return self._n\n\n    @property\n    def size(self):\n        return self._size\n\n    @property\n    def response_format(self):\n        return self._response_format\n\n    @property\n    def kwargs(self):\n        return self._kwargs\n\n    @property\n    def width(self):\n        return self._width\n\n    @property\n    def height(self):\n        return self._height\n\n    @property\n    def generate_kwargs(self):\n        return self._generate_kwargs\n\n    @property\n    def request_id(self):\n        return self._unique_id\n\n\nclass FluxBatchSchedulerActor(xo.StatelessActor):\n    @classmethod\n    def gen_uid(cls, model_uid: str):\n        return f\"{model_uid}-scheduler-actor\"\n\n    def __init__(self):\n        from ....device_utils import get_available_device\n\n        super().__init__()\n        self._waiting_queue: deque[Text2ImageRequest] = deque()  # type: ignore\n        self._running_queue: deque[Text2ImageRequest] = deque()  # type: ignore\n        self._model = None\n        self._available_device = get_available_device()\n        self._id_to_req: Dict[str, Text2ImageRequest] = {}  # type: ignore\n\n    def set_model(self, model):\n        \"\"\"\n        Must use `set_model`. Otherwise, the model will be copied once.\n        \"\"\"\n        self._model = model\n\n    async def __post_create__(self):\n        from ....isolation import Isolation\n\n        self._isolation = Isolation(\n            asyncio.new_event_loop(), threaded=True, daemon=True\n        )\n        self._isolation.start()\n        asyncio.run_coroutine_threadsafe(self.run(), loop=self._isolation.loop)\n\n    async def __pre_destroy__(self):\n        try:\n            assert self._isolation is not None\n            self._isolation.stop()\n            del self._isolation\n        except Exception as e:\n            logger.debug(\n                f\"Destroy scheduler actor failed, address: {self.address}, error: {e}\"\n            )\n\n    async def add_request(self, unique_id: str, future, *args, **kwargs):\n        req = Text2ImageRequest(unique_id, future, *args, **kwargs)\n        rid = req.request_id\n        if rid is not None:\n            if rid in self._id_to_req:\n                raise KeyError(f\"Request id: {rid} has already existed!\")\n            self._id_to_req[rid] = req\n        self._waiting_queue.append(req)\n\n    async def abort_request(self, req_id: str) -> str:\n        \"\"\"\n        Abort a request.\n        Abort a submitted request. If the request is finished or not found, this method will be a no-op.\n        \"\"\"\n        from ...scheduler.core import AbortRequestMessage\n\n        if req_id not in self._id_to_req:\n            logger.info(f\"Request id: {req_id} not found. No-op for xinference.\")\n            return AbortRequestMessage.NOT_FOUND.name\n        else:\n            self._id_to_req[req_id].aborted = True\n            logger.info(f\"Request id: {req_id} found to be aborted.\")\n            return AbortRequestMessage.DONE.name\n\n    def _handle_request(\n        self,\n    ) -> Optional[Tuple[List[Text2ImageRequest], List[Text2ImageRequest]]]:\n        \"\"\"\n        Every request may generate `n>=1` images.\n        Here we need to decide whether to wait or not based on the value of `n` of each request.\n        \"\"\"\n        if self._model is None:\n            return None\n        max_num_images = self._model.get_max_num_images_for_batching()\n        cur_num_images = 0\n        abort_list: List[Text2ImageRequest] = []\n        # currently, FCFS strategy\n        running_list: List[Text2ImageRequest] = []\n        while len(self._running_queue) > 0:\n            req = self._running_queue.popleft()\n            if req.aborted:\n                abort_list.append(req)\n            else:\n                running_list.append(req)\n                cur_num_images += req.n\n\n        # Remove all the aborted requests in the waiting queue\n        waiting_tmp_list: List[Text2ImageRequest] = []\n        while len(self._waiting_queue) > 0:\n            req = self._waiting_queue.popleft()\n            if req.aborted:\n                abort_list.append(req)\n            else:\n                waiting_tmp_list.append(req)\n        self._waiting_queue.extend(waiting_tmp_list)\n\n        waiting_list: List[Text2ImageRequest] = []\n        while len(self._waiting_queue) > 0:\n            req = self._waiting_queue[0]\n            if req.n + cur_num_images <= max_num_images:\n                waiting_list.append(self._waiting_queue.popleft())\n                cur_num_images += req.n\n            else:\n                logger.warning(\n                    f\"Current queue is full, with an upper limit of max_num_images: {max_num_images}. \"\n                    f\"Requests will continue to wait.\"\n                )\n                break\n\n        return waiting_list + running_list, abort_list\n\n    @staticmethod\n    def _empty_cache():\n        from ....device_utils import empty_cache\n\n        empty_cache()\n\n    async def step(self):\n        res = self._handle_request()\n        if res is None:\n            return\n        req_list, abort_list = res\n        # handle abort\n        if abort_list:\n            for r in abort_list:\n                r.future.set_exception(\n                    RuntimeError(\n                        f\"Request: {r.request_id} has been cancelled by another `abort_request` request.\"\n                    )\n                )\n                self._id_to_req.pop(r.request_id, None)\n        if not req_list:\n            return\n        _batch_text_to_image(self._model, req_list, self._available_device)\n        # handle results\n        for r in req_list:\n            if r.error_msg is not None:\n                r.future.set_exception(ValueError(r.error_msg))\n                self._id_to_req.pop(r.request_id, None)\n                continue\n            if r.output is not None:\n                r.future.set_result(\n                    handle_image_result(r.response_format, r.output.images)\n                )\n                self._id_to_req.pop(r.request_id, None)\n            else:\n                self._running_queue.append(r)\n        self._empty_cache()\n\n    async def run(self):\n        try:\n            while True:\n                # wait 10ms\n                await asyncio.sleep(0.01)\n                await self.step()\n        except Exception as e:\n            logger.exception(\n                f\"Scheduler actor uid: {self.uid}, address: {self.address} run with error: {e}\"\n            )\n\n\ndef _cat_tensors(infos: List[Dict]) -> Dict:\n    keys = infos[0].keys()\n    res = {}\n    for k in keys:\n        tmp = [info[k] for info in infos]\n        res[k] = torch.cat(tmp)\n    return res\n\n\n@typing.no_type_check\n@torch.inference_mode()\ndef _batch_text_to_image_internal(\n    model_cls: \"DiffusionModel\",\n    req_list: List[Text2ImageRequest],\n    available_device: str,\n):\n    from diffusers.pipelines.flux.pipeline_flux import (\n        calculate_shift,\n        retrieve_timesteps,\n    )\n    from diffusers.pipelines.flux.pipeline_output import FluxPipelineOutput\n    from diffusers.schedulers.scheduling_flow_match_euler_discrete import (\n        FlowMatchEulerDiscreteScheduler,\n    )\n\n    device = model_cls._model._execution_device\n    height, width = req_list[0].height, req_list[0].width\n    cur_batch_max_sequence_length = [\n        r.generate_kwargs.get(\"max_sequence_length\", DEFAULT_MAX_SEQUENCE_LENGTH)\n        for r in req_list\n        if not r.is_encode\n    ]\n    for r in req_list:\n        if r.is_encode:\n            generate_kwargs = model_cls._model_spec.default_generate_config.copy()\n            generate_kwargs.update({k: v for k, v in r.kwargs.items() if v is not None})\n            model_cls._filter_kwargs(model_cls._model, generate_kwargs)\n            r.set_generate_kwargs(generate_kwargs)\n\n            # check max_sequence_length\n            max_sequence_length = r.generate_kwargs.get(\n                \"max_sequence_length\", DEFAULT_MAX_SEQUENCE_LENGTH\n            )\n            if (\n                cur_batch_max_sequence_length\n                and max_sequence_length != cur_batch_max_sequence_length[0]\n            ):\n                r.is_encode = False\n                r.error_msg = (\n                    f\"The max_sequence_length of the current request: {max_sequence_length} is \"\n                    f\"different from the setting in the running batch: {cur_batch_max_sequence_length[0]}, \"\n                    f\"please be consistent.\"\n                )\n                continue\n\n            num_images_per_prompt = r.n\n            callback_on_step_end_tensor_inputs = r.generate_kwargs.get(\n                \"callback_on_step_end_tensor_inputs\", [\"latents\"]\n            )\n            num_inference_steps = r.generate_kwargs.get(\"num_inference_steps\", 28)\n            guidance_scale = r.generate_kwargs.get(\"guidance_scale\", 7.0)\n            generator = None\n            seed = r.generate_kwargs.get(\"seed\", None)\n            if seed is not None:\n                generator = torch.Generator(device=available_device)  # type: ignore\n                if seed != -1:\n                    generator = generator.manual_seed(seed)\n            latents = None\n            timesteps = None\n\n            # Each request must build its own scheduler instance,\n            # otherwise the mixing of variables at `scheduler.STEP` will result in an error.\n            r.scheduler = FlowMatchEulerDiscreteScheduler(\n                model_cls._model.scheduler.config.num_train_timesteps,\n                model_cls._model.scheduler.config.shift,\n                model_cls._model.scheduler.config.use_dynamic_shifting,\n                model_cls._model.scheduler.config.base_shift,\n                model_cls._model.scheduler.config.max_shift,\n                model_cls._model.scheduler.config.base_image_seq_len,\n                model_cls._model.scheduler.config.max_image_seq_len,\n            )\n\n            # check inputs\n            model_cls._model.check_inputs(\n                r.prompt,\n                None,\n                height,\n                width,\n                prompt_embeds=None,\n                pooled_prompt_embeds=None,\n                callback_on_step_end_tensor_inputs=callback_on_step_end_tensor_inputs,\n                max_sequence_length=max_sequence_length,\n            )\n\n            # handle prompt\n            (\n                prompt_embeds,\n                pooled_prompt_embeds,\n                text_ids,\n            ) = model_cls._model.encode_prompt(\n                prompt=r.prompt,\n                prompt_2=None,\n                prompt_embeds=None,\n                pooled_prompt_embeds=None,\n                device=device,\n                num_images_per_prompt=num_images_per_prompt,\n                max_sequence_length=max_sequence_length,\n                lora_scale=None,\n            )\n\n            # Prepare latent variables\n            num_channels_latents = model_cls._model.transformer.config.in_channels // 4\n            latents, latent_image_ids = model_cls._model.prepare_latents(\n                num_images_per_prompt,\n                num_channels_latents,\n                height,\n                width,\n                prompt_embeds.dtype,\n                device,\n                generator,\n                latents,\n            )\n\n            # Prepare timesteps\n            sigmas = np.linspace(1.0, 1 / num_inference_steps, num_inference_steps)\n            image_seq_len = latents.shape[1]\n\n            mu = calculate_shift(\n                image_seq_len,\n                r.scheduler.config[\"base_image_seq_len\"],\n                r.scheduler.config[\"max_image_seq_len\"],\n                r.scheduler.config[\"base_shift\"],\n                r.scheduler.config[\"max_shift\"],\n            )\n            timesteps, num_inference_steps = retrieve_timesteps(\n                r.scheduler,\n                num_inference_steps,\n                device,\n                timesteps,\n                sigmas,\n                mu=mu,\n            )\n\n            # handle guidance\n            if model_cls._model.transformer.config.guidance_embeds:\n                guidance = torch.full(\n                    [1], guidance_scale, device=device, dtype=torch.float32\n                )\n                guidance = guidance.expand(latents.shape[0])\n            else:\n                guidance = None\n\n            r.static_tensors[\"latents\"] = latents\n            r.static_tensors[\"guidance\"] = guidance\n            r.static_tensors[\"pooled_prompt_embeds\"] = pooled_prompt_embeds\n            r.static_tensors[\"prompt_embeds\"] = prompt_embeds\n            r.static_tensors[\"text_ids\"] = text_ids\n            r.static_tensors[\"latent_image_ids\"] = latent_image_ids\n            r.timesteps = timesteps\n            r.dtype = latents.dtype\n            r.total_steps = len(timesteps)\n            r.is_encode = False\n\n    running_req_list = [r for r in req_list if r.error_msg is None]\n    static_tensors = _cat_tensors([r.static_tensors for r in running_req_list])\n\n    # Do a step\n    timestep_tmp = []\n    for r in running_req_list:\n        timestep_tmp.append(r.timesteps[r.done_steps].expand(r.n).to(r.dtype))\n        r.done_steps += 1\n    timestep = torch.cat(timestep_tmp)\n    noise_pred = model_cls._model.transformer(\n        hidden_states=static_tensors[\"latents\"],\n        # YiYi notes: divide it by 1000 for now because we scale it by 1000 in the transformer model (we should not keep it but I want to keep the inputs same for the model for testing)\n        timestep=timestep / 1000,\n        guidance=static_tensors[\"guidance\"],\n        pooled_projections=static_tensors[\"pooled_prompt_embeds\"],\n        encoder_hidden_states=static_tensors[\"prompt_embeds\"],\n        txt_ids=static_tensors[\"text_ids\"],\n        img_ids=static_tensors[\"latent_image_ids\"],\n        joint_attention_kwargs=None,\n        return_dict=False,\n    )[0]\n\n    # update latents\n    start_idx = 0\n    for r in running_req_list:\n        n = r.n\n        # handle diffusion scheduler step\n        _noise_pred = noise_pred[start_idx : start_idx + n, ::]\n        _timestep = timestep[start_idx]\n        latents_out = r.scheduler.step(\n            _noise_pred, _timestep, r.static_tensors[\"latents\"], return_dict=False\n        )[0]\n        r.static_tensors[\"latents\"] = latents_out\n        start_idx += n\n\n        logger.info(\n            f\"Request {r.request_id} has done {r.done_steps} / {r.total_steps} steps.\"\n        )\n\n        # process result\n        if r.done_steps == r.total_steps:\n            output_type = r.generate_kwargs.get(\"output_type\", \"pil\")\n            _latents = r.static_tensors[\"latents\"]\n            if output_type == \"latent\":\n                image = _latents\n            else:\n                _latents = model_cls._model._unpack_latents(\n                    _latents, height, width, model_cls._model.vae_scale_factor\n                )\n                _latents = (\n                    _latents / model_cls._model.vae.config.scaling_factor\n                ) + model_cls._model.vae.config.shift_factor\n                image = model_cls._model.vae.decode(_latents, return_dict=False)[0]\n                image = model_cls._model.image_processor.postprocess(\n                    image, output_type=output_type\n                )\n\n            is_padded = r.generate_kwargs.get(\"is_padded\", None)\n            origin_size = r.generate_kwargs.get(\"origin_size\", None)\n\n            if is_padded and origin_size:\n                new_images = []\n                x, y = origin_size\n                for img in image:\n                    new_images.append(img.crop((0, 0, x, y)))\n                image = new_images\n\n            r.output = FluxPipelineOutput(images=image)\n            logger.info(\n                f\"Request {r.request_id} has completed total {r.total_steps} steps.\"\n            )\n\n\ndef _batch_text_to_image(\n    model_cls: \"DiffusionModel\",\n    req_list: List[Text2ImageRequest],\n    available_device: str,\n):\n    from ....core.model import OutOfMemoryError\n\n    try:\n        _batch_text_to_image_internal(model_cls, req_list, available_device)\n    except OutOfMemoryError:\n        logger.exception(\n            f\"Batch text_to_image out of memory. \"\n            f\"Xinference will restart the model: {model_cls._model_uid}. \"\n            f\"Please be patient for a few moments.\"\n        )\n        # Just kill the process and let xinference auto-recover the model\n        os._exit(1)\n    except Exception as e:\n        logger.exception(f\"Internal error for batch text_to_image: {e}.\")\n        # If internal error happens, just skip all the requests in this batch.\n        # If not handle here, the client will hang.\n        for r in req_list:\n            r.error_msg = str(e)\n"
  },
  {
    "path": "xinference/model/image/sdapi.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nimport io\nimport warnings\n\nfrom PIL import Image, ImageOps\n\n\nclass SDAPIToDiffusersConverter:\n    txt2img_identical_args = {\n        \"prompt\",\n        \"negative_prompt\",\n        \"seed\",\n        \"width\",\n        \"height\",\n        \"sampler_name\",\n        \"progressor\",\n    }\n    txt2img_arg_mapping = {\n        \"steps\": \"num_inference_steps\",\n        \"cfg_scale\": \"guidance_scale\",\n        \"denoising_strength\": \"strength\",\n    }\n    img2img_identical_args = {\n        \"prompt\",\n        \"negative_prompt\",\n        \"seed\",\n        \"width\",\n        \"height\",\n        \"sampler_name\",\n        \"progressor\",\n    }\n    img2img_arg_mapping = {\n        \"init_images\": \"image\",\n        \"mask\": \"mask_image\",\n        \"steps\": \"num_inference_steps\",\n        \"cfg_scale\": \"guidance_scale\",\n        \"denoising_strength\": \"strength\",\n        \"inpaint_full_res_padding\": \"padding_mask_crop\",\n    }\n\n    @staticmethod\n    def convert_to_diffusers(sd_type: str, params: dict) -> dict:\n        diffusers_params = {}\n\n        identical_args = getattr(SDAPIToDiffusersConverter, f\"{sd_type}_identical_args\")\n        mapping_args = getattr(SDAPIToDiffusersConverter, f\"{sd_type}_arg_mapping\")\n        for param, value in params.items():\n            if param in identical_args:\n                diffusers_params[param] = value\n            elif param in mapping_args:\n                diffusers_params[mapping_args[param]] = value\n            else:\n                raise ValueError(f\"Unknown arg: {param}\")\n\n        return diffusers_params\n\n    @staticmethod\n    def get_available_args(sd_type: str) -> set:\n        identical_args = getattr(SDAPIToDiffusersConverter, f\"{sd_type}_identical_args\")\n        mapping_args = getattr(SDAPIToDiffusersConverter, f\"{sd_type}_arg_mapping\")\n        return identical_args.union(mapping_args)\n\n\nclass SDAPIDiffusionModelMixin:\n    @staticmethod\n    def _check_kwargs(sd_type: str, kwargs: dict):\n        available_args = SDAPIToDiffusersConverter.get_available_args(sd_type)\n        unknown_args = []\n        available_kwargs = {}\n        for arg, value in kwargs.items():\n            if arg in available_args:\n                available_kwargs[arg] = value\n            else:\n                unknown_args.append(arg)\n        if unknown_args:\n            warnings.warn(\n                f\"Some args are not supported for now and will be ignored: {unknown_args}\"\n            )\n\n        converted_kwargs = SDAPIToDiffusersConverter.convert_to_diffusers(\n            sd_type, available_kwargs\n        )\n\n        width, height = converted_kwargs.pop(\"width\", None), converted_kwargs.pop(\n            \"height\", None\n        )\n        if width and height:\n            converted_kwargs[\"size\"] = f\"{width}*{height}\"\n\n        return converted_kwargs\n\n    def txt2img(self, **kwargs):\n        converted_kwargs = self._check_kwargs(\"txt2img\", kwargs)\n        result = self.text_to_image(response_format=\"b64_json\", **converted_kwargs)  # type: ignore\n\n        # convert to SD API result\n        return {\n            \"images\": [r[\"b64_json\"] for r in result[\"data\"]],\n            \"info\": {\"created\": result[\"created\"]},\n            \"parameters\": {},\n        }\n\n    @staticmethod\n    def _decode_b64_img(img_str: str) -> Image:\n        # img_str in a format: \"data:image/png;base64,\" + raw_b64_img(image)\n        f, data = img_str.split(\",\", 1)\n        f, encode_type = f.split(\";\", 1)\n        assert encode_type == \"base64\"\n        f = f.split(\"/\", 1)[1]\n        b = base64.b64decode(data)\n        return Image.open(io.BytesIO(b), formats=[f])\n\n    def img2img(self, **kwargs):\n        init_images = kwargs.pop(\"init_images\", [])\n        kwargs[\"init_images\"] = init_images = [\n            self._decode_b64_img(i) for i in init_images\n        ]\n        if len(init_images) == 1:\n            kwargs[\"init_images\"] = init_images[0]\n        mask_image = kwargs.pop(\"mask\", None)\n        if mask_image:\n            if kwargs.pop(\"inpainting_mask_invert\"):\n                mask_image = ImageOps.invert(mask_image)\n\n            kwargs[\"mask\"] = self._decode_b64_img(mask_image)\n\n            # process inpaint_full_res and inpaint_full_res_padding\n            if kwargs.pop(\"inpaint_full_res\", None):\n                kwargs[\"inpaint_full_res_padding\"] = kwargs.pop(\n                    \"inpaint_full_res_padding\", 0\n                )\n            else:\n                # inpaint_full_res_padding is turned `into padding_mask_crop`\n                # in diffusers, if padding_mask_crop is passed, it will do inpaint_full_res\n                # so if not inpaint_full_rs, we need to pop this option\n                kwargs.pop(\"inpaint_full_res_padding\", None)\n\n        clip_skip = kwargs.get(\"override_settings\", {}).get(\"clip_skip\")\n        converted_kwargs = self._check_kwargs(\"img2img\", kwargs)\n        if clip_skip:\n            converted_kwargs[\"clip_skip\"] = clip_skip\n\n        if not converted_kwargs.get(\"mask_image\"):\n            result = self.image_to_image(response_format=\"b64_json\", **converted_kwargs)  # type: ignore\n        else:\n            result = self.inpainting(response_format=\"b64_json\", **converted_kwargs)  # type: ignore\n\n        # convert to SD API result\n        return {\n            \"images\": [r[\"b64_json\"] for r in result[\"data\"]],\n            \"info\": {\"created\": result[\"created\"]},\n            \"parameters\": {},\n        }\n"
  },
  {
    "path": "xinference/model/image/stable_diffusion/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/image/stable_diffusion/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport contextlib\nimport gc\nimport importlib\nimport inspect\nimport itertools\nimport json\nimport logging\nimport math\nimport os\nimport re\nimport sys\nimport warnings\nfrom glob import glob\nfrom typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union\n\nimport PIL.Image\nimport torch\nfrom PIL import ImageOps\n\nfrom ....device_utils import (\n    get_available_device,\n    gpu_count,\n    move_model_to_available_device,\n)\nfrom ....types import LoRA\nfrom ..sdapi import SDAPIDiffusionModelMixin\nfrom ..utils import handle_image_result\n\nif TYPE_CHECKING:\n    from ....core.progress_tracker import Progressor\n    from ..core import ImageModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\nSAMPLING_METHODS = [\n    \"default\",\n    \"DPM++ 2M\",\n    \"DPM++ 2M Karras\",\n    \"DPM++ 2M SDE\",\n    \"DPM++ 2M SDE Karras\",\n    \"DPM++ SDE\",\n    \"DPM++ SDE Karras\",\n    \"DPM2\",\n    \"DPM2 Karras\",\n    \"DPM2 a\",\n    \"DPM2 a Karras\",\n    \"Euler\",\n    \"Euler a\",\n    \"Heun\",\n    \"LMS\",\n    \"LMS Karras\",\n]\n\n\ndef model_accept_param(params: Union[str, List[str]], model: Any) -> bool:\n    params = [params] if isinstance(params, str) else params\n    # model is diffusers Pipeline\n    parameters = inspect.signature(model.__call__).parameters  # type: ignore\n    allow_params = False\n    for param in parameters.values():\n        if param.kind == inspect.Parameter.VAR_KEYWORD:\n            # the __call__ can accept **kwargs,\n            # we treat it as it can accept any parameters\n            allow_params = True\n            break\n    if not allow_params:\n        if all(param in parameters for param in params):\n            allow_params = True\n    return allow_params\n\n\nclass DiffusionModel(SDAPIDiffusionModelMixin):\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: Optional[str] = None,\n        device: Optional[str] = None,\n        lora_model: Optional[List[LoRA]] = None,\n        lora_load_kwargs: Optional[Dict] = None,\n        lora_fuse_kwargs: Optional[Dict] = None,\n        model_spec: Optional[\"ImageModelFamilyV2\"] = None,\n        gguf_model_path: Optional[str] = None,\n        lightning_model_path: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._device = device\n        # model info when loading\n        self._model = None\n        self._lora_model = lora_model\n        self._lora_load_kwargs = lora_load_kwargs or {}\n        self._lora_fuse_kwargs = lora_fuse_kwargs or {}\n        # deepcache\n        self._deepcache_helper = None\n        # when a model has text2image ability,\n        # it will be loaded as AutoPipelineForText2Image\n        # for image2image and inpainting,\n        # we convert to the corresponding model\n        self._torch_dtype = None\n        self._ability_to_models: Dict[Tuple[str, Any], Any] = {}\n        self._controlnet_models: Dict[str, Any] = {}\n        # info\n        self._model_spec = model_spec\n        self._abilities = model_spec.model_ability or []  # type: ignore\n        self._kwargs = kwargs\n        self._has_bnb_quantization = False\n        # gguf\n        self._gguf_model_path = gguf_model_path\n        # lightning\n        self._lightning_model_path = lightning_model_path\n\n    @property\n    def model_ability(self):\n        return self._abilities\n\n    def _is_flux2_model(self) -> bool:\n        return bool(\n            self._model_spec\n            and \"flux.2\" in self._model_spec.model_name.lower()  # type: ignore\n        )\n\n    @staticmethod\n    def _get_pipeline_type(ability: str) -> type:\n        if ability == \"text2image\":\n            from diffusers import AutoPipelineForText2Image as AutoPipelineModel\n        elif ability == \"image2image\":\n            from diffusers import AutoPipelineForImage2Image as AutoPipelineModel\n        elif ability == \"inpainting\":\n            from diffusers import AutoPipelineForInpainting as AutoPipelineModel\n        else:\n            raise ValueError(f\"Unknown ability: {ability}\")\n        return AutoPipelineModel\n\n    def _get_controlnet_model(self, name: str, path: str):\n        from diffusers import ControlNetModel\n\n        try:\n            return self._controlnet_models[name]\n        except KeyError:\n            logger.debug(\"Loading controlnet %s, from %s\", name, path)\n            model = ControlNetModel.from_pretrained(path, torch_dtype=self._torch_dtype)\n            self._controlnet_models[name] = model\n            return model\n\n    def _get_model(\n        self,\n        ability: str,\n        controlnet_name: Optional[Union[str, List[str]]] = None,\n        controlnet_path: Optional[Union[str, List[str]]] = None,\n    ):\n        try:\n            return self._ability_to_models[ability, controlnet_name]\n        except KeyError:\n            model_type = self._get_pipeline_type(ability)\n\n        assert self._model is not None\n\n        if controlnet_name:\n            assert controlnet_path\n            if isinstance(controlnet_name, (list, tuple)):\n                controlnet = []\n                # multiple controlnet\n                for name, path in itertools.zip_longest(\n                    controlnet_name, controlnet_path\n                ):\n                    controlnet.append(self._get_controlnet_model(name, path))\n            else:\n                controlnet = self._get_controlnet_model(\n                    controlnet_name, controlnet_path\n                )\n            model = model_type.from_pipe(self._model, controlnet=controlnet)\n        else:\n            try:\n                from diffusers import (\n                    QwenImageImg2ImgPipeline,\n                    QwenImageInpaintPipeline,\n                    QwenImagePipeline,\n                )\n            except ImportError:\n                QwenImagePipeline = None\n                QwenImageImg2ImgPipeline = None\n                QwenImageInpaintPipeline = None\n\n            if QwenImagePipeline is not None and isinstance(\n                self._model, QwenImagePipeline\n            ):\n                # special process for Qwen-image\n                if ability == \"image2image\":\n                    model = QwenImageImg2ImgPipeline.from_pipe(\n                        self._model, torch_dtype=None\n                    )\n                else:\n                    assert ability == \"inpainting\"\n                    model = QwenImageInpaintPipeline.from_pipe(\n                        self._model, torch_dtype=None\n                    )\n            else:\n                model = model_type.from_pipe(self._model)\n        self._load_to_device(model)\n\n        self._ability_to_models[ability, controlnet_name] = model\n        return model\n\n    def _apply_lora(self):\n        if self._lora_model is not None:\n            logger.info(\n                f\"Loading the LoRA with load kwargs: {self._lora_load_kwargs}, fuse kwargs: {self._lora_fuse_kwargs}.\"\n            )\n            assert self._model is not None\n            for lora_model in self._lora_model:\n                self._model.load_lora_weights(\n                    lora_model.local_path, **self._lora_load_kwargs\n                )\n            self._model.fuse_lora(**self._lora_fuse_kwargs)\n            logger.info(f\"Successfully loaded the LoRA for model {self._model_uid}.\")\n\n    def _get_layer_cls(self, layer: str):\n        with open(os.path.join(self._model_path, \"model_index.json\")) as f:  # type: ignore\n            model_index = json.load(f)\n            layer_info = model_index[layer]\n            module_name, class_name = layer_info\n            module = importlib.import_module(module_name)\n            return getattr(module, class_name)\n\n    def load(self):\n        if \"text2image\" in self._abilities or \"image2image\" in self._abilities:\n            from diffusers import AutoPipelineForText2Image as AutoPipelineModel\n        elif \"inpainting\" in self._abilities:\n            from diffusers import AutoPipelineForInpainting as AutoPipelineModel\n        else:\n            raise ValueError(f\"Unknown ability: {self._abilities}\")\n\n        self._torch_dtype = torch_dtype = self._kwargs.get(\"torch_dtype\")\n        if sys.platform != \"darwin\" and torch_dtype is None:\n            # The following params crashes on Mac M2\n            self._torch_dtype = self._kwargs[\"torch_dtype\"] = torch.float16\n            self._kwargs[\"use_safetensors\"] = any(\n                glob(os.path.join(self._model_path, \"*/*.safetensors\"))\n            )\n        if isinstance(torch_dtype, str):\n            self._torch_dtype = torch_dtype = self._kwargs[\"torch_dtype\"] = getattr(\n                torch, torch_dtype\n            )\n\n        controlnet = self._kwargs.get(\"controlnet\")\n        if controlnet is not None:\n            if isinstance(controlnet, tuple):\n                self._kwargs[\"controlnet\"] = self._get_controlnet_model(*controlnet)\n            else:\n                self._kwargs[\"controlnet\"] = [\n                    self._get_controlnet_model(*cn) for cn in controlnet\n                ]\n\n        # quantizations\n        # text_encoder\n        quantize_text_encoder = self._kwargs.pop(\"quantize_text_encoder\", None)\n        self._quantize_text_encoder(quantize_text_encoder)\n        # transformer\n        if self._gguf_model_path:\n            self._quantize_transformer_gguf()\n        else:\n            self._quantize_transformer()\n\n        if self._has_bnb_quantization and not self._kwargs.get(\"device_map\"):\n            # Ensure bnb-loaded modules are placed explicitly on one device to avoid CPU/GPU mixing\n            self._kwargs[\"device_map\"] = get_available_device()\n\n        if (\n            (device_count := gpu_count()) > 1\n            and \"device_map\" not in self._kwargs\n            and not self._is_flux2_model()\n        ):\n            logger.debug(\n                \"Device count (%d) > 1, force to set device_map=balanced\", device_count\n            )\n            self._kwargs[\"device_map\"] = \"balanced\"\n\n        logger.debug(\n            \"Loading model from %s, kwargs: %s\", self._model_path, self._kwargs\n        )\n        with self._process_lightning(self._kwargs):\n            try:\n                self._model = AutoPipelineModel.from_pretrained(\n                    self._model_path,\n                    **self._kwargs,\n                )\n            except ValueError:\n                model_name_lower = self._model_spec.model_name.lower()\n                if \"klein\" in model_name_lower:\n                    from diffusers import Flux2KleinPipeline\n\n                    self._model = Flux2KleinPipeline.from_pretrained(\n                        self._model_path, **self._kwargs\n                    )\n                elif \"flux.2\" in model_name_lower:\n                    from diffusers import Flux2Pipeline\n\n                    self._model = Flux2Pipeline.from_pretrained(\n                        self._model_path, **self._kwargs\n                    )\n                elif \"flux\" in model_name_lower:\n                    from diffusers import FluxPipeline\n\n                    self._model = FluxPipeline.from_pretrained(\n                        self._model_path, **self._kwargs\n                    )\n                elif \"kontext\" in model_name_lower:\n                    # TODO: remove this branch when auto pipeline supports\n                    # flux.1-kontext-dev\n                    from diffusers import FluxKontextPipeline\n\n                    self._model = FluxKontextPipeline.from_pretrained(\n                        self._model_path, **self._kwargs\n                    )\n                elif \"qwen\" in model_name_lower:\n                    # TODO: remove this branch when auto pipeline supports\n                    # Qwen-Image\n                    from diffusers import DiffusionPipeline\n\n                    self._model = DiffusionPipeline.from_pretrained(\n                        self._model_path, **self._kwargs\n                    )\n                elif \"z-image\" in model_name_lower or \"zimage\" in model_name_lower:\n                    # TODO: remove this branch when auto pipeline supports Z-Image\n                    from diffusers import DiffusionPipeline\n\n                    self._model = DiffusionPipeline.from_pretrained(\n                        self._model_path, **self._kwargs\n                    )\n                else:\n                    raise\n            self._load_to_device(self._model)\n            self._apply_lora()\n\n        if self._kwargs.get(\"deepcache\", False):\n            try:\n                from DeepCache import DeepCacheSDHelper\n            except ImportError:\n                error_message = \"Failed to import module 'deepcache' when you launch with deepcache=True\"\n                installation_guide = [\n                    \"Please make sure 'deepcache' is installed. \",\n                    \"You can install it by `pip install deepcache`\\n\",\n                ]\n\n                raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n            else:\n                self._deepcache_helper = helper = DeepCacheSDHelper()\n                helper.set_params(\n                    cache_interval=self._kwargs.get(\"deepcache_cache_interval\", 3),\n                    cache_branch_id=self._kwargs.get(\"deepcache_cache_branch_id\", 0),\n                )\n\n        # Initialize batch scheduler if batching is enabled\n        self._image_batch_scheduler = None\n        if self._should_use_batching():\n            from ..scheduler.flux import FluxBatchScheduler\n\n            self._image_batch_scheduler = FluxBatchScheduler(self)\n            # Note: scheduler will be started when first request comes in\n\n    def _should_use_batching(self) -> bool:\n        \"\"\"Check if this model should use batch scheduling for images\"\"\"\n        from ....constants import XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE\n\n        return XINFERENCE_TEXT_TO_IMAGE_BATCHING_SIZE is not None\n\n    def _get_quantize_config(self, method: str, quantization: str, module: str):\n        if method == \"bnb\":\n            self._has_bnb_quantization = True\n            try:\n                import bitsandbytes  # noqa: F401\n            except ImportError:\n                error_message = \"Failed to import module 'bitsandbytes'\"\n                installation_guide = [\n                    \"Please make sure 'bitsandbytes' is installed. \",\n                    \"You can install it by `pip install bitsandbytes`\\n\",\n                ]\n\n                raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n            if module.startswith(\"diffusers.\"):\n                from diffusers import BitsAndBytesConfig\n            else:\n                assert module.startswith(\"transformers.\")\n                from transformers import BitsAndBytesConfig\n\n            if quantization == \"4-bit\":\n                return BitsAndBytesConfig(load_in_4bit=True)\n            elif quantization == \"8-bit\":\n                return BitsAndBytesConfig(load_in_8bit=True)\n            elif quantization == \"nf4\":\n                return BitsAndBytesConfig(\n                    load_in_4bit=True,\n                    bnb_4bit_quant_type=\"nf4\",\n                    bnb_4bit_compute_dtype=self._torch_dtype,\n                )\n        elif method == \"torchao\":\n            try:\n                import torchao  # noqa: F401\n            except ImportError:\n                error_message = \"Failed to import module 'torchao'\"\n                installation_guide = [\n                    \"Please make sure 'torchao' is installed. \",\n                    \"You can install it by `pip install torchao`\\n\",\n                ]\n\n                raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n            if module.startswith(\"diffusers.\"):\n                from diffusers import TorchAoConfig\n            else:\n                assert module.startswith(\"transformers.\")\n                from transformers import TorchAoConfig\n\n            return TorchAoConfig(quantization)\n        else:\n            raise ValueError(f\"Unknown quantization method for image model: {method}\")\n\n    def _quantize_text_encoder(self, quantize_text_encoder: Optional[str]):\n        if self._gguf_model_path:\n            # skip quantization when gguf applied to transformer\n            return\n\n        if not quantize_text_encoder:\n            logger.debug(\"No text encoder quantization\")\n            return\n\n        quantization_method = self._kwargs.pop(\"text_encoder_quantize_method\", \"bnb\")\n        quantization = self._kwargs.pop(\"text_encoder_quantization\", \"8-bit\")\n\n        logger.debug(\n            \"Quantize text encoder %s with method %s, quantization %s\",\n            quantize_text_encoder,\n            quantization_method,\n            quantization,\n        )\n\n        torch_dtype = self._torch_dtype\n        for text_encoder_name in quantize_text_encoder.split(\",\"):\n            quantization_kwargs: Dict[str, Any] = {}\n            if torch_dtype:\n                quantization_kwargs[\"torch_dtype\"] = torch_dtype\n            text_encoder_cls = self._get_layer_cls(text_encoder_name)\n            quantization_config = self._get_quantize_config(\n                quantization_method, quantization, text_encoder_cls.__module__\n            )\n            text_encoder = text_encoder_cls.from_pretrained(\n                self._model_path,\n                subfolder=text_encoder_name,\n                quantization_config=quantization_config,\n                **quantization_kwargs,\n            )\n            self._kwargs[text_encoder_name] = text_encoder\n        else:\n            if not self._kwargs.get(\"device_map\") and not self._is_flux2_model():\n                self._kwargs[\"device_map\"] = \"balanced\"\n\n    def _quantize_transformer(self):\n        quantization = None\n        nf4 = self._kwargs.pop(\"transformer_nf4\", None)\n        if nf4:\n            warnings.warn(\n                \"`transformer_nf4` is deprecated, please use `transformer_quantization=nf4`\",\n                category=DeprecationWarning,\n                stacklevel=2,\n            )\n            quantization = \"nf4\"\n        method = self._kwargs.pop(\"transformer_quantize_method\", \"bnb\")\n        if not quantization:\n            quantization = self._kwargs.pop(\"transformer_quantization\", None)\n\n        if not quantization:\n            # skip if no quantization specified\n            logger.debug(\"No transformer quantization\")\n            return\n\n        logger.debug(\n            \"Quantize transformer with %s, quantization %s\", method, quantization\n        )\n\n        torch_dtype = self._torch_dtype\n        transformer_cls = self._get_layer_cls(\"transformer\")\n        quantization_config = self._get_quantize_config(\n            method, quantization, transformer_cls.__module__\n        )\n        transformer_model = transformer_cls.from_pretrained(\n            self._model_path,\n            subfolder=\"transformer\",\n            quantization_config=quantization_config,\n            torch_dtype=torch_dtype,\n        )\n        self._kwargs[\"transformer\"] = transformer_model\n\n    def _quantize_transformer_gguf(self):\n        from diffusers import GGUFQuantizationConfig\n\n        # GGUF transformer\n        torch_dtype = self._torch_dtype\n        logger.debug(\"Quantize transformer with gguf file %s\", self._gguf_model_path)\n        self._kwargs[\"transformer\"] = self._get_layer_cls(\n            \"transformer\"\n        ).from_single_file(\n            self._gguf_model_path,\n            quantization_config=GGUFQuantizationConfig(compute_dtype=torch_dtype),\n            torch_dtype=torch_dtype,\n            config=os.path.join(self._model_path, \"transformer\"),\n        )\n\n    @contextlib.contextmanager\n    def _process_lightning(self, kwargs):\n        lightning_model_path = self._lightning_model_path\n        if not lightning_model_path:\n            yield\n            return\n\n        from diffusers import FlowMatchEulerDiscreteScheduler\n\n        if \"qwen\" in self._model_spec.model_name.lower():\n            scheduler_config = {\n                \"base_image_seq_len\": 256,\n                \"base_shift\": math.log(3),  # We use shift=3 in distillation\n                \"invert_sigmas\": False,\n                \"max_image_seq_len\": 8192,\n                \"max_shift\": math.log(3),  # We use shift=3 in distillation\n                \"num_train_timesteps\": 1000,\n                \"shift\": 1.0,\n                \"shift_terminal\": None,  # set shift_terminal to None\n                \"stochastic_sampling\": False,\n                \"time_shift_type\": \"exponential\",\n                \"use_beta_sigmas\": False,\n                \"use_dynamic_shifting\": True,\n                \"use_exponential_sigmas\": False,\n                \"use_karras_sigmas\": False,\n            }\n            scheduler = FlowMatchEulerDiscreteScheduler.from_config(scheduler_config)\n            kwargs[\"scheduler\"] = scheduler\n\n            yield\n\n            model = self._model\n            logger.debug(\"Loading lightning lora: %s\", self._lightning_model_path)\n            model.load_lora_weights(self._lightning_model_path)\n        else:\n            logger.debug(\"No lightning applied\")\n            yield\n\n    def _load_to_device(self, model):\n        if self._has_bnb_quantization and not any(\n            self._kwargs.get(flag) for flag in [\"cpu_offload\", \"sequential_cpu_offload\"]\n        ):\n            # Bitsandbytes modules do not support manual .to(); they are already on target device\n            logger.debug(\"Skip manual device move for bitsandbytes-quantized model\")\n            return\n        if self._kwargs.get(\"cpu_offload\", False):\n            logger.debug(\"CPU offloading model\")\n            model.enable_model_cpu_offload()\n        elif self._kwargs.get(\"sequential_cpu_offload\", False):\n            logger.debug(\"CPU sequential offloading model\")\n            model.enable_sequential_cpu_offload()\n        elif not self._kwargs.get(\"device_map\"):\n            logger.debug(\"Loading model to available device\")\n            model = move_model_to_available_device(model)\n        if self._kwargs.get(\"attention_slicing\", False):\n            model.enable_attention_slicing()\n        if self._kwargs.get(\"vae_tiling\", False):\n            try:\n                model.enable_vae_tiling()\n            except AttributeError:\n                model.vae.enable_tiling()\n        if self._kwargs.get(\"vae_slicing\", False):\n            try:\n                model.enable_vae_slicing()\n            except AttributeError:\n                model.vae.enable_slicing()\n\n    def get_max_num_images_for_batching(self):\n        return self._kwargs.get(\"max_num_images\", 16)\n\n    @staticmethod\n    def _get_scheduler(model: Any, sampler_name: str):\n        if not sampler_name or sampler_name == \"default\":\n            return\n\n        assert model is not None\n\n        import diffusers\n\n        kwargs = {}\n        if (\n            sampler_name.startswith(\"DPM++\")\n            and \"final_sigmas_type\" not in model.scheduler.config\n        ):\n            # `final_sigmas_type` will be set as `zero` by default which will cause error\n            kwargs[\"final_sigmas_type\"] = \"sigma_min\"\n\n        # see https://github.com/huggingface/diffusers/issues/4167\n        # to get A1111 <> Diffusers Scheduler mapping\n        if sampler_name == \"DPM++ 2M\":\n            return diffusers.DPMSolverMultistepScheduler.from_config(\n                model.scheduler.config, **kwargs\n            )\n        elif sampler_name == \"DPM++ 2M Karras\":\n            return diffusers.DPMSolverMultistepScheduler.from_config(\n                model.scheduler.config, use_karras_sigmas=True, **kwargs\n            )\n        elif sampler_name == \"DPM++ 2M SDE\":\n            return diffusers.DPMSolverMultistepScheduler.from_config(\n                model.scheduler.config, algorithm_type=\"sde-dpmsolver++\", **kwargs\n            )\n        elif sampler_name == \"DPM++ 2M SDE Karras\":\n            return diffusers.DPMSolverMultistepScheduler.from_config(\n                model.scheduler.config,\n                algorithm_type=\"sde-dpmsolver++\",\n                use_karras_sigmas=True,\n                **kwargs,\n            )\n        elif sampler_name == \"DPM++ SDE\":\n            return diffusers.DPMSolverSinglestepScheduler.from_config(\n                model.scheduler.config, **kwargs\n            )\n        elif sampler_name == \"DPM++ SDE Karras\":\n            return diffusers.DPMSolverSinglestepScheduler.from_config(\n                model.scheduler.config, use_karras_sigmas=True, **kwargs\n            )\n        elif sampler_name == \"DPM2\":\n            return diffusers.KDPM2DiscreteScheduler.from_config(\n                model.scheduler.config, **kwargs\n            )\n        elif sampler_name == \"DPM2 Karras\":\n            return diffusers.KDPM2DiscreteScheduler.from_config(\n                model.scheduler.config, use_karras_sigmas=True, **kwargs\n            )\n        elif sampler_name == \"DPM2 a\":\n            return diffusers.KDPM2AncestralDiscreteScheduler.from_config(\n                model.scheduler.config, **kwargs\n            )\n        elif sampler_name == \"DPM2 a Karras\":\n            return diffusers.KDPM2AncestralDiscreteScheduler.from_config(\n                model.scheduler.config, use_karras_sigmas=True, **kwargs\n            )\n        elif sampler_name == \"Euler\":\n            return diffusers.EulerDiscreteScheduler.from_config(\n                model.scheduler.config, **kwargs\n            )\n        elif sampler_name == \"Euler a\":\n            return diffusers.EulerAncestralDiscreteScheduler.from_config(\n                model.scheduler.config, **kwargs\n            )\n        elif sampler_name == \"Heun\":\n            return diffusers.HeunDiscreteScheduler.from_config(\n                model.scheduler.config, **kwargs\n            )\n        elif sampler_name == \"LMS\":\n            return diffusers.LMSDiscreteScheduler.from_config(\n                model.scheduler.config, **kwargs\n            )\n        elif sampler_name == \"LMS Karras\":\n            return diffusers.LMSDiscreteScheduler.from_config(\n                model.scheduler.config, use_karras_sigmas=True, **kwargs\n            )\n        else:\n            raise ValueError(f\"Unknown sampler: {sampler_name}\")\n\n    def _need_set_scheduler(self, scheduler: Any) -> bool:\n        \"\"\"Determine whether it is necessary to set up a scheduler\"\"\"\n        if self._model_spec is None:\n            return False\n        if scheduler is None:\n            return False\n        if \"FLUX\" in self._model_spec.model_name:\n            logger.warning(\"FLUX model, skipping scheduler setup\")\n            return False\n        return True\n\n    @contextlib.contextmanager\n    def _reset_when_done(self, model: Any, sampler_name: str):\n        scheduler = DiffusionModel._get_scheduler(model, sampler_name)\n        if self._need_set_scheduler(scheduler):\n            logger.debug(\"Use scheduler %s\", scheduler)\n            default_scheduler = model.scheduler\n            model.scheduler = scheduler\n            try:\n                yield\n            finally:\n                model.scheduler = default_scheduler\n        else:\n            yield\n\n    @staticmethod\n    @contextlib.contextmanager\n    def _release_after():\n        from ....device_utils import empty_cache\n\n        try:\n            yield\n        finally:\n            gc.collect()\n            empty_cache()\n\n    @contextlib.contextmanager\n    def _wrap_deepcache(self, model: Any):\n        if self._deepcache_helper:\n            self._deepcache_helper.pipe = model\n            self._deepcache_helper.enable()\n        try:\n            yield\n        finally:\n            if self._deepcache_helper:\n                self._deepcache_helper.disable()\n                self._deepcache_helper.pipe = None\n\n    @staticmethod\n    def _process_progressor(kwargs: dict):\n        import diffusers\n\n        progressor: Progressor = kwargs.pop(\"progressor\", None)\n\n        def report_status_callback(\n            pipe: diffusers.DiffusionPipeline,\n            step: int,\n            timestep: int,\n            callback_kwargs: dict,\n        ):\n            num_steps = pipe.num_timesteps\n            progressor.set_progress((step + 1) / num_steps)\n\n            return callback_kwargs\n\n        if progressor and progressor.request_id:\n            kwargs[\"callback_on_step_end\"] = report_status_callback\n\n    def _call_model(\n        self,\n        response_format: str,\n        model=None,\n        **kwargs,\n    ):\n        model = model if model is not None else self._model\n        is_padded = kwargs.pop(\"is_padded\", None)\n        origin_size = kwargs.pop(\"origin_size\", None)\n        seed = kwargs.pop(\"seed\", None)\n        return_images = kwargs.pop(\"_return_images\", None)\n        if seed is not None and seed != -1:\n            kwargs[\"generator\"] = generator = torch.Generator(device=get_available_device())  # type: ignore\n            if seed != -1:\n                kwargs[\"generator\"] = generator.manual_seed(seed)\n        sampler_name = kwargs.pop(\"sampler_name\", None)\n        self._process_progressor(kwargs)\n        assert callable(model)\n        with self._reset_when_done(\n            model, sampler_name\n        ), self._release_after(), self._wrap_deepcache(model):\n            logger.debug(\"stable diffusion args: %s, model: %s\", kwargs, model)\n            # Some pipelines (e.g., Z-Image img2img) can't handle guidance_scale=None.\n            if kwargs.get(\"guidance_scale\", \"unset\") is None:\n                kwargs.pop(\"guidance_scale\", None)\n            self._filter_kwargs(model, kwargs)\n            images = model(**kwargs).images\n\n        if images and isinstance(images[0], (list, tuple)):\n            images = list(itertools.chain.from_iterable(images))\n\n        # revert padding if padded\n        if is_padded and origin_size:\n            new_images = []\n            x, y = origin_size\n            for img in images:\n                new_images.append(img.crop((0, 0, x, y)))\n            images = new_images\n\n        if return_images:\n            return images\n\n        return handle_image_result(response_format, images)\n\n    @classmethod\n    def _filter_kwargs(cls, model, kwargs: dict):\n        for arg in [\"negative_prompt\", \"num_inference_steps\"]:\n            if not kwargs.get(arg):\n                kwargs.pop(arg, None)\n\n        for key in list(kwargs):\n            allow_key = model_accept_param(key, model)\n            if not allow_key:\n                logger.warning(f\"{type(model)} cannot accept `{key}`, will ignore it\")\n                kwargs.pop(key)\n\n    async def text_to_image(\n        self,\n        prompt: str,\n        n: int = 1,\n        size: str = \"1024*1024\",\n        response_format: str = \"url\",\n        **kwargs,\n    ):\n        \"\"\"Text to image method that handles both batching and non-batching\"\"\"\n        if self._image_batch_scheduler:\n            await self._ensure_scheduler_started()\n            # Use batching path\n            from concurrent.futures import Future as ConcurrentFuture\n\n            future: ConcurrentFuture = ConcurrentFuture()\n            await self._image_batch_scheduler.add_request(\n                prompt, future, n, size, response_format, **kwargs\n            )\n\n            fut = asyncio.wrap_future(future)\n            return await fut\n        else:\n            # Use direct path\n            return await self._direct_text_to_image(\n                prompt, n, size, response_format, **kwargs\n            )\n\n    async def _ensure_scheduler_started(self):\n        \"\"\"Ensure the image batch scheduler is started\"\"\"\n        if self._image_batch_scheduler and not self._image_batch_scheduler._running:\n            await self._image_batch_scheduler.start()\n\n    def _gen_config_for_lightning(self, kwargs):\n        if (\n            not kwargs.get(\"num_inference_steps\")\n            and self._lightning_model_path is not None\n        ):\n            is_4_steps = \"4steps\" in self._lightning_model_path\n            if is_4_steps:\n                kwargs[\"num_inference_steps\"] = 4\n            else:\n                assert \"8steps\" in self._lightning_model_path\n                kwargs[\"num_inference_steps\"] = 8\n\n    async def _direct_text_to_image(\n        self,\n        prompt: str,\n        n: int = 1,\n        size: str = \"1024*1024\",\n        response_format: str = \"url\",\n        **kwargs,\n    ):\n        width, height = map(int, re.split(r\"[^\\d]+\", size))\n        generate_kwargs = self._model_spec.default_generate_config.copy()  # type: ignore\n        generate_kwargs.update({k: v for k, v in kwargs.items() if v is not None})\n        generate_kwargs[\"width\"], generate_kwargs[\"height\"] = width, height\n        self._gen_config_for_lightning(generate_kwargs)\n\n        return await asyncio.to_thread(\n            self._call_model,\n            prompt=prompt,  # type: ignore\n            num_images_per_prompt=n,  # type: ignore\n            response_format=response_format,\n            **generate_kwargs,\n        )\n\n    async def abort_request(self, request_id: str) -> str:\n        \"\"\"Abort a running request.\"\"\"\n        from ....model.scheduler.core import AbortRequestMessage\n\n        # Check if we have a cancel callback for this request\n        if hasattr(self, \"_cancel_callbacks\") and request_id in self._cancel_callbacks:\n            cancel_callback = self._cancel_callbacks.pop(request_id)\n            cancel_callback()\n            return AbortRequestMessage.DONE.name\n\n        return AbortRequestMessage.NO_OP.name\n\n    @staticmethod\n    def pad_to_multiple(image, multiple=8):\n        x, y = image.size\n        padding_x = (multiple - x % multiple) % multiple\n        padding_y = (multiple - y % multiple) % multiple\n        padding = (0, 0, padding_x, padding_y)\n        return ImageOps.expand(image, padding)\n\n    @staticmethod\n    def _model_expects_four_channel_input(model: Any) -> bool:\n        vae = getattr(model, \"vae\", None)\n        input_channels = getattr(getattr(vae, \"config\", None), \"input_channels\", None)\n        return input_channels == 4\n\n    @staticmethod\n    def _ensure_four_channel_image(image: Any, model: Any):\n        image_processor = getattr(model, \"image_processor\", None)\n        if (\n            image_processor is not None\n            and getattr(image_processor, \"config\", None) is not None\n        ):\n            image_processor.config.do_convert_rgb = False\n\n        if isinstance(image, list):\n            if not image:\n                return image\n            if isinstance(image[0], PIL.Image.Image):\n                return [\n                    img.convert(\"RGBA\") if img.mode != \"RGBA\" else img for img in image\n                ]\n            return image\n        if isinstance(image, PIL.Image.Image):\n            return image.convert(\"RGBA\") if image.mode != \"RGBA\" else image\n        return image\n\n    @staticmethod\n    def _ensure_three_channel_image(image: Any):\n        if isinstance(image, list):\n            if not image:\n                return image\n            if isinstance(image[0], PIL.Image.Image):\n                return [\n                    img.convert(\"RGB\") if img.mode != \"RGB\" else img for img in image\n                ]\n            return image\n        if isinstance(image, PIL.Image.Image):\n            return image.convert(\"RGB\") if image.mode != \"RGB\" else image\n        return image\n\n    def image_to_image(\n        self,\n        image: Union[PIL.Image.Image, List[PIL.Image.Image]],\n        prompt: Optional[Union[str, List[str]]] = None,\n        n: int = 1,\n        size: Optional[str] = None,\n        response_format: str = \"url\",\n        **kwargs,\n    ):\n        if self._kwargs.get(\"controlnet\") or self._model_spec.model_ability == [  # type: ignore\n            \"image2image\"\n        ]:\n            model = self._model\n        else:\n            ability = \"image2image\"\n            if ability not in self._abilities:\n                raise RuntimeError(f\"{self._model_uid} does not support image2image\")\n            model = self._get_model(ability)\n\n        if padding_image_to_multiple := kwargs.pop(\"padding_image_to_multiple\", None):\n            # Model like SD3 image to image requires image's height and width is times of 16\n            # padding the image if specified\n            if isinstance(image, list):\n                origin_x, origin_y = image[0].size\n            else:\n                origin_x, origin_y = image.size\n            kwargs[\"origin_size\"] = (origin_x, origin_y)\n            kwargs[\"is_padded\"] = True\n            image = self.pad_to_multiple(image, multiple=int(padding_image_to_multiple))\n\n        if size:\n            width, height = map(int, re.split(r\"[^\\d]+\", size))\n            if padding_image_to_multiple:\n                if isinstance(image, list):\n                    width, height = image[0].size\n                else:\n                    width, height = image.size\n            kwargs[\"width\"] = width\n            kwargs[\"height\"] = height\n        else:\n            # SD3 image2image cannot accept width and height\n            allow_width_height = model_accept_param([\"width\", \"height\"], model)\n            if allow_width_height:\n                if isinstance(image, list):\n                    kwargs[\"width\"], kwargs[\"height\"] = image[0].size\n                else:\n                    kwargs[\"width\"], kwargs[\"height\"] = image.size\n\n        if self._model_expects_four_channel_input(model):\n            image = self._ensure_four_channel_image(image, model)\n        else:\n            image = self._ensure_three_channel_image(image)\n\n        # generate config for lightning\n        self._gen_config_for_lightning(kwargs)\n\n        return self._call_model(\n            image=image,\n            prompt=prompt,\n            num_images_per_prompt=n,\n            response_format=response_format,\n            model=model,\n            **kwargs,\n        )\n\n    def inpainting(\n        self,\n        image: PIL.Image,\n        mask_image: PIL.Image,\n        prompt: Optional[Union[str, List[str]]] = None,\n        n: int = 1,\n        size: str = \"1024*1024\",\n        response_format: str = \"url\",\n        **kwargs,\n    ):\n        ability = \"inpainting\"\n        if ability not in self._abilities:\n            raise RuntimeError(f\"{self._model_uid} does not support inpainting\")\n\n        if (\n            \"text2image\" in self._abilities or \"image2image\" in self._abilities\n        ) and self._model is not None:\n            model = self._get_model(ability)\n        else:\n            model = self._model\n\n        if mask_blur := kwargs.pop(\"mask_blur\", None):\n            logger.debug(\"Process mask image with mask_blur: %s\", mask_blur)\n            mask_image = model.mask_processor.blur(mask_image, blur_factor=mask_blur)  # type: ignore\n\n        if \"width\" not in kwargs:\n            kwargs[\"width\"], kwargs[\"height\"] = map(int, re.split(r\"[^\\d]+\", size))\n\n        if padding_image_to_multiple := kwargs.pop(\"padding_image_to_multiple\", None):\n            # Model like SD3 inpainting requires image's height and width is times of 16\n            # padding the image if specified\n            origin_x, origin_y = image.size\n            kwargs[\"origin_size\"] = (origin_x, origin_y)\n            kwargs[\"is_padded\"] = True\n            image = self.pad_to_multiple(image, multiple=int(padding_image_to_multiple))\n            mask_image = self.pad_to_multiple(\n                mask_image, multiple=int(padding_image_to_multiple)\n            )\n            # calculate actual image size after padding\n            kwargs[\"width\"], kwargs[\"height\"] = image.size\n\n        # generate config for lightning\n        self._gen_config_for_lightning(kwargs)\n\n        return self._call_model(\n            image=image,\n            mask_image=mask_image,\n            prompt=prompt,\n            num_images_per_prompt=n,\n            response_format=response_format,\n            model=model,\n            **kwargs,\n        )\n"
  },
  {
    "path": "xinference/model/image/stable_diffusion/mlx.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport contextlib\nimport gc\nimport logging\nimport re\nfrom typing import TYPE_CHECKING, Dict, List, Optional, Tuple\n\nimport numpy as np\nfrom PIL import Image\n\nfrom ....types import LoRA\nfrom ..sdapi import SDAPIDiffusionModelMixin\nfrom ..utils import handle_image_result\n\nif TYPE_CHECKING:\n    from ....core.progress_tracker import Progressor\n    from ..core import ImageModelFamilyV2\n\n\nlogger = logging.getLogger(__name__)\n\n\ndef quantization_predicate(name: str, m) -> bool:\n    return hasattr(m, \"to_quantized\") and m.weight.shape[1] % 512 == 0\n\n\ndef to_latent_size(image_size: Tuple[int, int]):\n    h, w = image_size\n    h = ((h + 15) // 16) * 16\n    w = ((w + 15) // 16) * 16\n\n    if (h, w) != image_size:\n        print(\n            \"Warning: The image dimensions need to be divisible by 16px. \"\n            f\"Changing size to {h}x{w}.\"\n        )\n\n    return (h // 8, w // 8)\n\n\nclass MLXDiffusionModel(SDAPIDiffusionModelMixin):\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: Optional[str] = None,\n        device: Optional[str] = None,\n        lora_model: Optional[List[LoRA]] = None,\n        lora_load_kwargs: Optional[Dict] = None,\n        lora_fuse_kwargs: Optional[Dict] = None,\n        model_spec: Optional[\"ImageModelFamilyV2\"] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._device = device\n        # model info when loading\n        self._model = None\n        self._lora_model = lora_model\n        self._lora_load_kwargs = lora_load_kwargs or {}\n        self._lora_fuse_kwargs = lora_fuse_kwargs or {}\n        # info\n        self._model_spec = model_spec\n        self._abilities = model_spec.model_ability or []  # type: ignore\n        self._kwargs = kwargs\n\n    @property\n    def model_ability(self):\n        return self._abilities\n\n    @staticmethod\n    def support_model(model_name: str) -> bool:\n        return \"flux\" in model_name.lower()\n\n    def load(self):\n        try:\n            import mlx.nn as nn\n        except ImportError:\n            error_message = \"Failed to import module 'mlx'\"\n            installation_guide = [\n                \"Please make sure 'mlx' is installed. \",\n                \"You can install it by `pip install mlx`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        from ....thirdparty.mlx.flux import FluxPipeline\n\n        logger.debug(\n            \"Loading model from %s, kwargs: %s\", self._model_path, self._kwargs\n        )\n        flux = self._model = FluxPipeline(\n            \"flux-\" + self._model_spec.model_name.split(\"-\")[1],\n            model_path=self._model_path,\n            t5_padding=self._kwargs.get(\"t5_padding\", True),\n        )\n        self._apply_lora()\n\n        quantize = self._kwargs.get(\"quantize\", True)\n        if quantize:\n            nn.quantize(flux.flow, class_predicate=quantization_predicate)\n            nn.quantize(flux.t5, class_predicate=quantization_predicate)\n            nn.quantize(flux.clip, class_predicate=quantization_predicate)\n\n    def _apply_lora(self):\n        if self._lora_model is not None:\n            import mlx.core as mx\n\n            for lora_model in self._lora_model:\n                weights, lora_config = mx.load(\n                    lora_model.local_path, return_metadata=True\n                )\n                rank = int(lora_config.get(\"lora_rank\", 8))\n                num_blocks = int(lora_config.get(\"lora_blocks\", -1))\n                flux = self._model\n                flux.linear_to_lora_layers(rank, num_blocks)\n                flux.flow.load_weights(list(weights.items()), strict=False)\n                flux.fuse_lora_layers()\n            logger.info(f\"Successfully loaded the LoRA for model {self._model_uid}.\")\n\n    @staticmethod\n    @contextlib.contextmanager\n    def _release_after():\n        import mlx.core as mx\n\n        try:\n            yield\n        finally:\n            gc.collect()\n            mx.metal.clear_cache()\n\n    def text_to_image(\n        self,\n        prompt: str,\n        n: int = 1,\n        size: str = \"1024*1024\",\n        response_format: str = \"url\",\n        **kwargs,\n    ):\n        import mlx.core as mx\n\n        flux = self._model\n        width, height = map(int, re.split(r\"[^\\d]+\", size))\n\n        # Make the generator\n        latent_size = to_latent_size((height, width))\n        gen_latent_kwargs = {}\n        if (num_steps := kwargs.get(\"num_inference_steps\")) is None:\n            num_steps = 50 if \"dev\" in self._model_spec.model_name else 2  # type: ignore\n        gen_latent_kwargs[\"num_steps\"] = num_steps\n        if guidance := kwargs.get(\"guidance_scale\"):\n            gen_latent_kwargs[\"guidance\"] = guidance\n        if seed := kwargs.get(\"seed\"):\n            gen_latent_kwargs[\"seed\"] = seed\n\n        with self._release_after():\n            latents = flux.generate_latents(  # type: ignore\n                prompt, n_images=n, latent_size=latent_size, **gen_latent_kwargs\n            )\n\n            # First we get and eval the conditioning\n            conditioning = next(latents)\n            mx.eval(conditioning)\n            peak_mem_conditioning = mx.metal.get_peak_memory() / 1024**3\n            mx.metal.reset_peak_memory()\n\n            progressor: Progressor = kwargs.pop(\"progressor\", None)\n            # Actual denoising loop\n            for i, x_t in enumerate(latents):\n                mx.eval(x_t)\n                progressor.set_progress((i + 1) / num_steps)\n\n            peak_mem_generation = mx.metal.get_peak_memory() / 1024**3\n            mx.metal.reset_peak_memory()\n\n            # Decode them into images\n            decoded = []\n            for i in range(n):\n                decoded.append(flux.decode(x_t[i : i + 1], latent_size))  # type: ignore\n                mx.eval(decoded[-1])\n            peak_mem_decoding = mx.metal.get_peak_memory() / 1024**3\n            peak_mem_overall = max(\n                peak_mem_conditioning, peak_mem_generation, peak_mem_decoding\n            )\n\n            images = []\n            x = mx.concatenate(decoded, axis=0)\n            x = (x * 255).astype(mx.uint8)\n            for i in range(len(x)):\n                im = Image.fromarray(np.array(x[i]))\n                images.append(im)\n\n        logger.debug(\n            f\"Peak memory used for the text:       {peak_mem_conditioning:.3f}GB\"\n        )\n        logger.debug(\n            f\"Peak memory used for the generation: {peak_mem_generation:.3f}GB\"\n        )\n        logger.debug(f\"Peak memory used for the decoding:   {peak_mem_decoding:.3f}GB\")\n        logger.debug(f\"Peak memory used overall:            {peak_mem_overall:.3f}GB\")\n\n        return handle_image_result(response_format, images)\n\n    def image_to_image(self, **kwargs):\n        raise NotImplementedError\n\n    def inpainting(self, **kwargs):\n        raise NotImplementedError\n"
  },
  {
    "path": "xinference/model/image/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/image/tests/test_got_ocr2.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport importlib.metadata\nimport importlib.util\nimport io\n\nimport pytest\nfrom diffusers.utils import load_image\nfrom packaging import version\n\n\n@pytest.mark.skipif(\n    importlib.util.find_spec(\"transformers\") is not None\n    and version.parse(importlib.metadata.version(\"transformers\"))\n    >= version.parse(\"4.48.0\"),\n    reason=\"Skip because transformers >= 4.48.0\",\n)\ndef test_got_ocr2(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"ocr_test\",\n        model_name=\"GOT-OCR2_0\",\n        model_type=\"image\",\n    )\n    model = client.get_model(model_uid)\n\n    url = \"https://huggingface.co/stepfun-ai/GOT-OCR2_0/resolve/main/assets/train_sample.jpg\"\n    image = load_image(url)\n    bio = io.BytesIO()\n    image.save(bio, format=\"JPEG\")\n    r = model.ocr(\n        image=bio.getvalue(),\n        ocr_type=\"ocr\",\n    )\n    assert \"Jesuits Estate\" in r\n"
  },
  {
    "path": "xinference/model/image/tests/test_stable_diffusion.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport base64\nimport io\nimport logging\nimport os.path\nimport shutil\nimport tempfile\nimport threading\nimport time\nimport uuid\nfrom io import BytesIO\n\nimport numpy as np\nimport pytest\nimport xoscar as xo\nfrom PIL import Image\n\nfrom ....core.progress_tracker import Progressor, ProgressTrackerActor\nfrom ..cache_manager import ImageCacheManager as CacheManager\nfrom ..core import ImageModelFamilyV2\nfrom ..stable_diffusion.core import DiffusionModel\n\nTEST_MODEL_SPEC = ImageModelFamilyV2(\n    model_family=\"stable_diffusion\",\n    model_name=\"small-stable-diffusion-v0\",\n    model_id=\"OFA-Sys/small-stable-diffusion-v0\",\n    model_revision=\"38e10e5e71e8fbf717a47a81e7543cd01c1a8140\",\n    model_ability=[\"text2image\"],\n)\n\nlogger = logging.getLogger(__name__)\n\n\nasync def test_model():\n    model_path = None\n    try:\n        model_path = CacheManager(TEST_MODEL_SPEC).cache()\n        model = DiffusionModel(\"mock\", model_path, model_spec=TEST_MODEL_SPEC)\n        # input is a string\n        input_text = \"an apple\"\n        model.load()\n        r = await model.text_to_image(input_text, size=\"256*256\")\n        assert len(r[\"data\"]) == 1\n        assert os.path.exists(r[\"data\"][0][\"url\"])\n        r = await model.text_to_image(\n            input_text, size=\"256*256\", response_format=\"b64_json\"\n        )\n        assert len(r[\"data\"]) == 1\n        b64_json = r[\"data\"][0][\"b64_json\"]\n        image_bytes = base64.b64decode(b64_json)\n        img = Image.open(BytesIO(image_bytes))\n        assert img.size == (256, 256)\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path)\n\n\n@pytest.mark.asyncio\nasync def test_progressor():\n    async def _run_model(**kwargs):\n        model_path = None\n        try:\n            model_path = CacheManager(TEST_MODEL_SPEC).cache()\n            model = DiffusionModel(\"mock\", model_path, model_spec=TEST_MODEL_SPEC)\n            # input is a string\n            input_text = \"an apple\"\n            model.load()\n            r = await model.text_to_image(input_text, size=\"256*256\", **kwargs)\n            assert len(r[\"data\"]) == 1\n            assert os.path.exists(r[\"data\"][0][\"url\"])\n        finally:\n            if model_path is not None:\n                shutil.rmtree(model_path)\n\n    pool = await xo.create_actor_pool(\"127.0.0.1\", n_process=0)\n    async with pool:\n        progress_tracker_ref = await xo.create_actor(\n            ProgressTrackerActor,\n            to_remove_interval=0,\n            check_interval=1,\n            address=pool.external_address,\n            uid=ProgressTrackerActor.default_uid(),\n        )\n        request_id = str(uuid.uuid4())\n        progressor = Progressor(\n            request_id, progress_tracker_ref, asyncio.get_running_loop()\n        )\n        await progressor.start()\n        with progressor:\n            progressor.split_stages(2, stage_weight=np.array([0, 0.99, 1]))\n            with progressor:\n                await _run_model(progressor=progressor)\n                assert progressor._current_progress == 0.99\n            assert await progress_tracker_ref.get_progress(request_id) == 0.99\n            with progressor:\n                progressor.set_progress(1.0)\n        await asyncio.sleep(2)\n        with pytest.raises(KeyError):\n            await progress_tracker_ref.get_progress(request_id)\n\n\n@pytest.mark.skip(reason=\"Stable diffusion controlnet requires too many GRAM.\")\ndef test_restful_api_for_image_with_canny_controlnet(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"my_controlnet\",\n        model_name=\"stable-diffusion-xl-base-1.0\",\n        model_type=\"image\",\n        controlnet=\"canny\",\n    )\n    model = client.get_model(model_uid)\n\n    import cv2\n    import numpy as np\n    from diffusers.utils import load_image\n    from PIL import Image\n\n    image = load_image(\n        \"https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/hf-logo.png\"\n    )\n    image = np.array(image)\n    image = cv2.Canny(image, 100, 200)\n    image = image[:, :, None]\n    image = np.concatenate([image, image, image], axis=2)\n    image = Image.fromarray(image)\n    prompt = \"aerial view, a futuristic research complex in a bright foggy jungle, hard lighting\"\n    negative_prompt = \"low quality, bad quality, sketches\"\n    bio = io.BytesIO()\n    image.save(bio, format=\"png\")\n    r = model.image_to_image(\n        image=bio.getvalue(),\n        prompt=prompt,\n        negative_prompt=negative_prompt,\n        controlnet_conditioning_scale=0.5,\n        num_inference_steps=25,\n    )\n    logger.info(\"test result %s\", r)\n\n\n@pytest.mark.skip(reason=\"Stable diffusion controlnet requires too many GRAM.\")\ndef test_restful_api_for_image_with_mlsd_controlnet(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"my_controlnet\",\n        model_name=\"stable-diffusion-v1.5\",\n        model_type=\"image\",\n        controlnet=\"mlsd\",\n    )\n    model = client.get_model(model_uid)\n\n    from controlnet_aux import MLSDdetector\n    from diffusers.utils import load_image\n\n    mlsd = MLSDdetector.from_pretrained(\"lllyasviel/ControlNet\")\n\n    # Replace the image path for your test.\n    image_path = os.path.expanduser(\"~/draft.png\")\n    logger.info(\"Image path: %s\", image_path)\n    image = load_image(image_path)\n    image = mlsd(image)\n    prompt = (\n        \"a modern house, use glass window, best quality, 8K wallpaper,(realistic:1.3), \"\n        \"photorealistic, photo realistic, hyperrealistic, orante, super detailed, \"\n        \"intricate, dramatic, morning lighting, shadows, high dynamic range,wooden,blue sky\"\n    )\n    negative_prompt = (\n        \"low quality, bad quality, sketches, signature, soft, blurry, drawing, \"\n        \"sketch, poor quality, ugly, text, type, word, logo, pixelated, \"\n        \"low resolution, saturated, high contrast, oversharpened\"\n    )\n    bio = io.BytesIO()\n    image.save(bio, format=\"png\")\n    r = model.image_to_image(\n        image=bio.getvalue(),\n        prompt=prompt,\n        negative_prompt=negative_prompt,\n        num_inference_steps=20,\n    )\n    logger.info(\"test result %s\", r)\n\n\n@pytest.mark.parametrize(\"model_name\", [\"sd-turbo\"])\ndef test_restful_api_abort(setup, model_name):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"my_controlnet\",\n        model_name=model_name,\n        model_type=\"image\",\n    )\n    model = client.get_model(model_uid)\n\n    request_id = str(uuid.uuid4())\n    client.abort_request(model_uid, request_id, 1)\n    time.sleep(2)\n    r = model.text_to_image(\n        prompt=\"A cinematic shot of a baby raccoon wearing an intricate italian priest robe.\",\n        size=\"512*512\",\n        num_inference_steps=10,\n        request_id=request_id,\n    )\n    assert \"created\" in r\n\n    request_id = str(uuid.uuid4())\n    client.abort_request(model_uid, request_id)\n    with pytest.raises(\n        RuntimeError, match=f\"The request has been aborted: {request_id}\"\n    ):\n        model.text_to_image(\n            prompt=\"A cinematic shot of a baby raccoon wearing an intricate italian priest robe.\",\n            size=\"512*512\",\n            num_inference_steps=10,\n            request_id=request_id,\n        )\n\n    request_id = str(uuid.uuid4())\n\n    def _abort():\n        time.sleep(\n            0.1\n        )  # Reduce delay to ensure abort_request is called before task completion\n        client.abort_request(model_uid, request_id)\n\n    t = threading.Thread(target=_abort)\n    t.start()\n    with pytest.raises(\n        RuntimeError, match=f\"The request has been cancelled: {request_id}\"\n    ):\n        model.text_to_image(\n            prompt=\"A cinematic shot of a baby raccoon wearing an intricate italian priest robe.\",\n            size=\"512*512\",\n            num_inference_steps=20,  # Increase inference steps to make task run longer\n            request_id=request_id,\n        )\n\n\n@pytest.mark.parametrize(\"model_name\", [\"sd-turbo\", \"sdxl-turbo\"])\ndef test_restful_api_for_sd_turbo(setup, model_name):\n    if model_name == \"sdxl-turbo\":\n        pytest.skip(\"sdxl-turbo cost too many resources.\")\n\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"my_controlnet\",\n        model_name=model_name,\n        model_type=\"image\",\n    )\n    model = client.get_model(model_uid)\n\n    r = model.text_to_image(\n        prompt=\"A cinematic shot of a baby raccoon wearing an intricate italian priest robe.\",\n        size=\"512*512\",\n        num_inference_steps=10,\n    )\n    logger.info(\"test result %s\", r)\n    from PIL import Image\n\n    with open(r[\"data\"][0][\"url\"], \"rb\") as f:\n        img = Image.open(f)\n        assert img.size == (512, 512)\n\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.images.generate(\n        model=model_uid,\n        prompt=\"A cinematic shot of a baby raccoon wearing an intricate italian priest robe.\",\n        size=\"512*512\",\n        response_format=\"b64_json\",\n    )\n    img_bytes = base64.b64decode(completion.data[0].b64_json)\n    img = Image.open(BytesIO(img_bytes))\n    assert img.size == (512, 512)\n\n\n@pytest.mark.skip(reason=\"Stable diffusion image2image requires too many GRAM.\")\ndef test_restful_api_for_sd_image2image(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"my_image2image\",\n        model_name=\"stable-diffusion-xl-base-1.0\",\n        model_type=\"image\",\n    )\n    model = client.get_model(model_uid)\n\n    from diffusers.utils import load_image\n\n    # Replace the image path for your test.\n    image_path = os.path.expanduser(\"~/raw.jpg\")\n    logger.info(\"Image path: %s\", image_path)\n    image = load_image(image_path)\n    bio = io.BytesIO()\n    image.save(bio, format=\"png\")\n\n    r = model.image_to_image(\n        prompt=\"desert, clear sky, white clouds\",\n        image=bio.getvalue(),\n        num_inference_steps=10,\n    )\n    logger.info(\"test result %s\", r)\n    from PIL import Image\n\n    with open(r[\"data\"][0][\"url\"], \"rb\") as f:\n        img = Image.open(f)\n        assert img.size == image.size\n\n\n@pytest.mark.skip(reason=\"Stable diffusion inpainting requires too many GRAM.\")\ndef test_restful_api_for_sd_inpainting(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"my_inpainting\",\n        model_name=\"stable-diffusion-2-inpainting\",\n        model_type=\"image\",\n    )\n    model = client.get_model(model_uid)\n\n    from diffusers.utils import load_image\n\n    # Replace the image path for your test.\n    image_path = os.path.expanduser(\"~/raw.jpg\")\n    logger.info(\"Image path: %s\", image_path)\n    image = load_image(image_path)\n    bio = io.BytesIO()\n    image.save(bio, format=\"png\")\n    mask_image_path = os.path.expanduser(\"~/mask.jpg\")\n    logger.info(\"Mask image path: %s\", mask_image_path)\n    mask_image = load_image(mask_image_path)\n    bio2 = io.BytesIO()\n    mask_image.save(bio2, format=\"png\")\n\n    r = model.inpainting(\n        prompt=\"desert, clear sky, white clouds\",\n        image=bio.getvalue(),\n        mask_image=bio2.getvalue(),\n        num_inference_steps=10,\n    )\n    logger.info(\"test result %s\", r)\n    from PIL import Image\n\n    with open(r[\"data\"][0][\"url\"], \"rb\") as f:\n        img = Image.open(f)\n        assert img.size == image.size\n\n\ndef test_get_cache_status():\n    model_path = None\n    cache_manager = CacheManager(TEST_MODEL_SPEC)\n    try:\n        assert cache_manager.get_cache_status() is False\n        model_path = cache_manager.cache()\n        assert cache_manager.get_cache_status() is True\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path)\n\n\ndef test_register_custom_image():\n    from ..custom import (\n        CustomImageModelFamilyV2,\n        get_user_defined_images,\n        register_image,\n        unregister_image,\n    )\n\n    with tempfile.TemporaryDirectory() as tmp_dir:\n        model_spec = CustomImageModelFamilyV2(\n            model_family=\"stable_diffusion\",\n            model_name=f\"my-custom-image-{uuid.uuid4().hex[:8]}\",\n            model_id=\"my-custom-image\",\n            model_uri=os.path.abspath(tmp_dir),\n        )\n\n        register_image(model_spec, persist=False)\n        assert model_spec in get_user_defined_images()\n\n        unregister_image(model_spec.model_name, raise_error=False)\n        assert model_spec not in get_user_defined_images()\n\n\ndef test_persist_custom_image():\n    from ....constants import XINFERENCE_MODEL_DIR\n    from ..custom import (\n        CustomImageModelFamilyV2,\n        get_user_defined_images,\n        register_image,\n        unregister_image,\n    )\n\n    tmp_dir = tempfile.mktemp()\n    os.makedirs(tmp_dir)\n\n    model_spec = CustomImageModelFamilyV2(\n        model_family=\"stable_diffusion\",\n        model_name=f\"my-custom-image-{uuid.uuid4().hex[:8]}\",\n        model_id=\"my-custom-image\",\n        model_uri=f\"file://{os.path.abspath(tmp_dir)}\",\n    )\n\n    register_image(model_spec, persist=True)\n    assert model_spec in get_user_defined_images()\n    assert f\"{model_spec.model_name}.json\" in os.listdir(\n        os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"image\")\n    )\n\n    unregister_image(model_spec.model_name)\n    assert model_spec not in get_user_defined_images()\n    assert f\"{model_spec.model_name}.json\" not in os.listdir(\n        os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"image\")\n    )\n\n\ndef test_launch_custom_image(setup):\n    endpoint, _ = setup\n    from ....client import Client\n    from ....constants import XINFERENCE_CACHE_DIR\n    from ....core.utils import json_dumps\n\n    client = Client(endpoint)\n\n    model_path = os.path.join(XINFERENCE_CACHE_DIR, \"v2\", \"sd-turbo\")\n\n    my_model = {\n        \"model_family\": \"stable_diffusion\",\n        \"model_uid\": \"my_sd\",\n        \"model_name\": \"my_sd\",\n        \"model_uri\": model_path,\n        \"model_ability\": [\"text2image\"],\n    }\n\n    client.register_model(\n        model_type=\"image\",\n        model=json_dumps(my_model).decode(\"utf-8\"),\n        persist=False,\n    )\n\n    model_uid = client.launch_model(\n        model_uid=\"my_image\",\n        model_name=\"my_sd\",\n        model_type=\"image\",\n    )\n    model = client.get_model(model_uid)\n\n    r = model.text_to_image(\n        prompt=\"A cinematic shot of a baby raccoon wearing an intricate italian priest robe.\",\n        size=\"512*512\",\n        num_inference_steps=10,\n    )\n    logger.info(\"test result %s\", r)\n\n    client.unregister_model(model_type=\"image\", model_name=my_model[\"model_name\"])\n\n    from PIL import Image\n\n    with open(r[\"data\"][0][\"url\"], \"rb\") as f:\n        img = Image.open(f)\n        assert img.size == (512, 512)\n\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.images.generate(\n        model=model_uid,\n        prompt=\"A cinematic shot of a baby raccoon wearing an intricate italian priest robe.\",\n        size=\"512*512\",\n        response_format=\"b64_json\",\n    )\n    img_bytes = base64.b64decode(completion.data[0].b64_json)\n    img = Image.open(BytesIO(img_bytes))\n    assert img.size == (512, 512)\n\n\n@pytest.mark.skip(reason=\"Stable diffusion controlnet requires too many GRAM.\")\ndef test_launch_custom_image_with_controlnet(setup):\n    endpoint, _ = setup\n    from ....client import Client\n    from ....constants import XINFERENCE_CACHE_DIR\n    from ....core.utils import json_dumps\n\n    client = Client(endpoint)\n\n    model_path = os.path.join(XINFERENCE_CACHE_DIR, \"stable-diffusion-v1.5\")\n    controlnet_path = os.path.join(XINFERENCE_CACHE_DIR, \"mlsd\")\n\n    my_controlnet = {\n        \"model_family\": \"controlnet\",\n        \"model_uid\": \"my_controlnet\",\n        \"model_name\": \"my_controlnet\",\n        \"model_uri\": controlnet_path,\n    }\n\n    my_model = {\n        \"model_family\": \"stable_diffusion\",\n        \"model_uid\": \"my_sd\",\n        \"model_name\": \"my_sd\",\n        \"model_uri\": model_path,\n        \"controlnet\": [\n            my_controlnet,\n        ],\n    }\n\n    client.register_model(\n        model_type=\"image\",\n        model=json_dumps(my_model),\n        persist=False,\n    )\n\n    model_uid = client.launch_model(\n        model_uid=\"my_image\",\n        model_name=\"my_sd\",\n        model_type=\"image\",\n        controlnet=\"my_controlnet\",\n    )\n    model = client.get_model(model_uid)\n\n    from controlnet_aux import MLSDdetector\n    from diffusers.utils import load_image\n\n    mlsd = MLSDdetector.from_pretrained(\"lllyasviel/ControlNet\")\n\n    # Replace the image path for your test.\n    image_path = os.path.expanduser(\"~/draft.png\")\n    logger.info(\"Image path: %s\", image_path)\n    image = load_image(image_path)\n    image = mlsd(image)\n    prompt = (\n        \"a modern house, use glass window, best quality, 8K wallpaper,(realistic:1.3), \"\n        \"photorealistic, photo realistic, hyperrealistic, orante, super detailed, \"\n        \"intricate, dramatic, morning lighting, shadows, high dynamic range,wooden,blue sky\"\n    )\n    negative_prompt = (\n        \"low quality, bad quality, sketches, signature, soft, blurry, drawing, \"\n        \"sketch, poor quality, ugly, text, type, word, logo, pixelated, \"\n        \"low resolution, saturated, high contrast, oversharpened\"\n    )\n    bio = io.BytesIO()\n    image.save(bio, format=\"png\")\n    r = model.image_to_image(\n        image=bio.getvalue(),\n        prompt=prompt,\n        negative_prompt=negative_prompt,\n        num_inference_steps=20,\n    )\n    logger.info(\"test result %s\", r)\n\n    client.unregister_model(model_type=\"image\", model_name=my_model[\"model_name\"])\n    client.unregister_model(model_type=\"image\", model_name=my_controlnet[\"model_name\"])\n"
  },
  {
    "path": "xinference/model/image/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport base64\nimport os\nimport time\nimport uuid\nfrom concurrent.futures import ThreadPoolExecutor\nfrom functools import partial\nfrom io import BytesIO\nfrom typing import TYPE_CHECKING, Optional\n\nfrom ...constants import XINFERENCE_IMAGE_DIR\nfrom ...types import Image, ImageList\n\nif TYPE_CHECKING:\n    from .core import ImageModelFamilyV2\n\n\ndef get_model_version(\n    image_model: \"ImageModelFamilyV2\", controlnet: Optional[\"ImageModelFamilyV2\"]\n) -> str:\n    return (\n        image_model.model_name\n        if controlnet is None\n        else f\"{image_model.model_name}--{controlnet.model_name}\"\n    )\n\n\ndef _flatten_images(images):\n    if images and isinstance(images[0], (list, tuple)):\n        flat_images = []\n        for group in images:\n            if isinstance(group, (list, tuple)):\n                flat_images.extend(group)\n            else:\n                flat_images.append(group)\n        return flat_images\n    return images\n\n\ndef _needs_png(image) -> bool:\n    if image.mode in (\"RGBA\", \"LA\"):\n        return True\n    if image.mode == \"P\" and \"transparency\" in image.info:\n        return True\n    return False\n\n\ndef handle_image_result(response_format: str, images) -> ImageList:\n    images = _flatten_images(images)\n    if response_format == \"url\":\n        os.makedirs(XINFERENCE_IMAGE_DIR, exist_ok=True)\n        image_list = []\n        with ThreadPoolExecutor() as executor:\n            for img in images:\n                use_png = _needs_png(img)\n                suffix = \".png\" if use_png else \".jpg\"\n                path = os.path.join(XINFERENCE_IMAGE_DIR, uuid.uuid4().hex + suffix)\n                image_list.append(Image(url=path, b64_json=None))\n                fmt = \"png\" if use_png else \"jpeg\"\n                executor.submit(img.save, path, fmt)\n        return ImageList(created=int(time.time()), data=image_list)\n    elif response_format == \"b64_json\":\n\n        def _gen_base64_image(_img):\n            buffered = BytesIO()\n            fmt = \"png\" if _needs_png(_img) else \"jpeg\"\n            _img.save(buffered, format=fmt)\n            return base64.b64encode(buffered.getvalue()).decode()\n\n        with ThreadPoolExecutor() as executor:\n            results = list(map(partial(executor.submit, _gen_base64_image), images))  # type: ignore\n            image_list = [Image(url=None, b64_json=s.result()) for s in results]  # type: ignore\n        return ImageList(created=int(time.time()), data=image_list)\n    else:\n        raise ValueError(f\"Unsupported response format: {response_format}\")\n"
  },
  {
    "path": "xinference/model/llm/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport codecs\nimport json\nimport os\nimport warnings\n\nfrom ..utils import flatten_quantizations\nfrom .core import (\n    LLM,\n    LLM_VERSION_INFOS,\n    generate_llm_version_info,\n    get_llm_version_infos,\n)\nfrom .custom import get_user_defined_llm_families, register_llm, unregister_llm\nfrom .llm_family import (\n    BUILTIN_LLM_FAMILIES,\n    BUILTIN_LLM_MODEL_CHAT_FAMILIES,\n    BUILTIN_LLM_MODEL_GENERATE_FAMILIES,\n    BUILTIN_LLM_MODEL_TOOL_CALL_FAMILIES,\n    BUILTIN_LLM_PROMPT_STYLE,\n    LLAMA_CLASSES,\n    LLM_ENGINES,\n    LMDEPLOY_CLASSES,\n    MLX_CLASSES,\n    SGLANG_CLASSES,\n    SUPPORTED_ENGINES,\n    TRANSFORMERS_CLASSES,\n    VLLM_CLASSES,\n    CustomLLMFamilyV2,\n    LlamaCppLLMSpecV2,\n    LLMFamilyV2,\n    LLMSpecV1,\n    MLXLLMSpecV2,\n    PytorchLLMSpecV2,\n    match_llm,\n)\n\n\ndef register_builtin_model():\n    \"\"\"Register built-in LLM models.\"\"\"\n    _install()\n\n\ndef check_format_with_engine(model_format, engine):\n    # only llama-cpp-python support and only support ggufv2\n    if model_format in [\"ggufv2\"] and engine not in [\"llama.cpp\", \"vLLM\"]:\n        return False\n    if model_format not in [\"ggufv2\"] and engine == \"llama.cpp\":\n        return False\n    return True\n\n\ndef generate_engine_config_by_model_family(model_family: \"LLMFamilyV2\"):\n    model_name = model_family.model_name\n    specs = model_family.model_specs\n    engines = LLM_ENGINES.get(model_name, {})  # structure for engine query\n    for spec in specs:\n        model_format = spec.model_format\n        model_size_in_billions = spec.model_size_in_billions\n        quantization = spec.quantization\n        # traverse all supported engines to match the name, format, size in billions and quantization of model\n        for engine in SUPPORTED_ENGINES:\n            if not check_format_with_engine(\n                model_format, engine\n            ):  # match the format of model with engine\n                continue\n            CLASSES = SUPPORTED_ENGINES[engine]\n            for cls in CLASSES:\n                if cls.match(model_family, spec, quantization):\n                    engine_params = engines.get(engine, [])\n                    already_exists = False\n                    # if the name, format and size in billions of model already exists in the structure, add the new quantization\n                    for param in engine_params:\n                        if (\n                            model_name == param[\"model_name\"]\n                            and model_format == param[\"model_format\"]\n                            and model_size_in_billions\n                            == param[\"model_size_in_billions\"]\n                        ):\n                            if quantization not in param[\"quantizations\"]:\n                                param[\"quantizations\"].append(quantization)\n                            if \"multimodal_projectors\" not in param and hasattr(\n                                spec, \"multimodal_projectors\"\n                            ):\n                                param[\"multimodal_projectors\"] = (\n                                    spec.multimodal_projectors\n                                )\n                            already_exists = True\n                            break\n                    # successfully match the params for the first time, add to the structure\n                    if not already_exists:\n                        engine_params.append(\n                            {\n                                \"model_name\": model_name,\n                                \"model_format\": model_format,\n                                \"model_size_in_billions\": model_size_in_billions,\n                                \"quantizations\": [quantization],\n                                \"llm_class\": cls,\n                            }\n                        )\n                        if hasattr(spec, \"multimodal_projectors\"):\n                            engine_params[-1][\n                                \"multimodal_projectors\"\n                            ] = spec.multimodal_projectors\n                    engines[engine] = engine_params\n                    break\n    LLM_ENGINES[model_name] = engines\n\n\ndef register_custom_model():\n    from ...constants import XINFERENCE_MODEL_DIR\n    from ..custom import migrate_from_v1_to_v2\n\n    # migrate from v1 to v2 first\n    migrate_from_v1_to_v2(\"llm\", CustomLLMFamilyV2)\n\n    user_defined_llm_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"llm\")\n    if os.path.isdir(user_defined_llm_dir):\n        for f in os.listdir(user_defined_llm_dir):\n            try:\n                with codecs.open(\n                    os.path.join(user_defined_llm_dir, f), encoding=\"utf-8\"\n                ) as fd:\n                    user_defined_llm_family = CustomLLMFamilyV2.parse_raw(fd.read())\n                    register_llm(user_defined_llm_family, persist=False)\n            except Exception as e:\n                warnings.warn(f\"{user_defined_llm_dir}/{f} has error, {e}\")\n\n\ndef has_downloaded_models():\n    \"\"\"Check if downloaded JSON configurations exist.\"\"\"\n    from ...constants import XINFERENCE_MODEL_DIR\n\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"llm\")\n    json_file_path = os.path.join(builtin_dir, \"llm_models.json\")\n    return os.path.exists(json_file_path)\n\n\ndef load_downloaded_models():\n    \"\"\"Load downloaded JSON configurations from the builtin directory.\"\"\"\n    from ...constants import XINFERENCE_MODEL_DIR\n\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"llm\")\n    json_file_path = os.path.join(builtin_dir, \"llm_models.json\")\n\n    try:\n        load_model_family_from_json(json_file_path, BUILTIN_LLM_FAMILIES)\n    except Exception as e:\n        warnings.warn(\n            f\"Failed to load downloaded llm models from {json_file_path}: {e}\"\n        )\n        # Fall back to built-in models if download fails\n        load_model_family_from_json(\"llm_family.json\", BUILTIN_LLM_FAMILIES)\n\n\ndef load_model_family_from_json(json_filename, target_families):\n    # Handle both relative (module directory) and absolute paths\n    if os.path.isabs(json_filename):\n        json_path = json_filename\n    else:\n        json_path = os.path.join(\n            os.path.dirname(os.path.abspath(__file__)), json_filename\n        )\n\n    for json_obj in json.load(codecs.open(json_path, \"r\", encoding=\"utf-8\")):\n        flattened = []\n        for spec in json_obj[\"model_specs\"]:\n            flattened.extend(flatten_quantizations(spec))\n        json_obj[\"model_specs\"] = flattened\n        model_spec = LLMFamilyV2.parse_obj(json_obj)\n        target_families.append(model_spec)\n\n        # register chat_template\n        if (\n            \"chat\" in model_spec.model_ability\n            and isinstance(model_spec.chat_template, str)\n            and model_spec.model_name not in BUILTIN_LLM_PROMPT_STYLE\n        ):\n            # note that the key is the model name,\n            # since there are multiple representations of the same prompt style name in json.\n            if model_spec.model_name not in BUILTIN_LLM_PROMPT_STYLE:\n                BUILTIN_LLM_PROMPT_STYLE[model_spec.model_name] = {\n                    \"chat_template\": model_spec.chat_template,\n                    \"stop_token_ids\": model_spec.stop_token_ids,\n                    \"stop\": model_spec.stop,\n                }\n                if model_spec.reasoning_start_tag and model_spec.reasoning_end_tag:\n                    BUILTIN_LLM_PROMPT_STYLE[model_spec.model_name][\n                        \"reasoning_start_tag\"\n                    ] = model_spec.reasoning_start_tag\n                    BUILTIN_LLM_PROMPT_STYLE[model_spec.model_name][\n                        \"reasoning_end_tag\"\n                    ] = model_spec.reasoning_end_tag\n                if model_spec.tool_parser:\n                    BUILTIN_LLM_PROMPT_STYLE[model_spec.model_name][\n                        \"tool_parser\"\n                    ] = model_spec.tool_parser\n\n        # register model family\n        if \"chat\" in model_spec.model_ability:\n            BUILTIN_LLM_MODEL_CHAT_FAMILIES.add(model_spec.model_name)\n        else:\n            BUILTIN_LLM_MODEL_GENERATE_FAMILIES.add(model_spec.model_name)\n        if \"tools\" in model_spec.model_ability:\n            BUILTIN_LLM_MODEL_TOOL_CALL_FAMILIES.add(model_spec.model_name)\n\n\ndef _install():\n    from .llama_cpp.core import XllamaCppModel\n    from .lmdeploy.core import LMDeployChatModel, LMDeployModel\n    from .mlx.core import MLXChatModel, MLXModel, MLXVisionModel\n    from .sglang.core import SGLANGChatModel, SGLANGModel, SGLANGVisionModel\n    from .transformers.core import PytorchChatModel, PytorchModel\n    from .vllm.core import VLLMChatModel, VLLMModel, VLLMMultiModel\n\n    # register llm classes.\n    LLAMA_CLASSES.extend([XllamaCppModel])\n    SGLANG_CLASSES.extend([SGLANGModel, SGLANGChatModel, SGLANGVisionModel])\n    VLLM_CLASSES.extend([VLLMModel, VLLMChatModel, VLLMMultiModel])\n    MLX_CLASSES.extend([MLXModel, MLXChatModel, MLXVisionModel])\n    LMDEPLOY_CLASSES.extend([LMDeployModel, LMDeployChatModel])\n    TRANSFORMERS_CLASSES.extend([PytorchChatModel, PytorchModel])\n\n    # support 4 engines for now\n    SUPPORTED_ENGINES[\"vLLM\"] = VLLM_CLASSES\n    SUPPORTED_ENGINES[\"SGLang\"] = SGLANG_CLASSES\n    SUPPORTED_ENGINES[\"Transformers\"] = TRANSFORMERS_CLASSES\n    SUPPORTED_ENGINES[\"llama.cpp\"] = LLAMA_CLASSES\n    SUPPORTED_ENGINES[\"MLX\"] = MLX_CLASSES\n    SUPPORTED_ENGINES[\"LMDEPLOY\"] = LMDEPLOY_CLASSES\n\n    # Install models with intelligent merging based on timestamps\n    # LLM models use a different structure (list instead of dict), so we need special handling\n\n    # Always load built-in models first to ensure we have the latest models\n    load_model_family_from_json(\"llm_family.json\", BUILTIN_LLM_FAMILIES)\n\n    # Then load user-defined models and merge with built-in models\n    if has_downloaded_models():\n        user_models = []\n        from ..utils import load_downloaded_models_to_dict\n\n        load_downloaded_models_to_dict(\n            {\"temp\": user_models},\n            \"llm\",\n            \"llm_models.json\",\n            lambda path, target: load_model_family_from_json(path, target[\"temp\"]),\n        )\n\n        if user_models:\n            # Create a copy of built-in models for merging\n            built_in_models_copy = list(BUILTIN_LLM_FAMILIES)\n\n            # Merge models, keeping the latest version based on updated_at\n            all_models = built_in_models_copy + user_models\n\n            # Sort by updated_at (newest first) and keep the latest for each model name\n            all_models.sort(key=lambda x: x.updated_at, reverse=True)\n\n            # Remove duplicates, keeping the first (newest) occurrence of each model name\n            seen_models = set()\n            merged_models = []\n\n            for model in all_models:\n                if model.model_name not in seen_models:\n                    seen_models.add(model.model_name)\n                    merged_models.append(model)\n\n            # Update BUILTIN_LLM_FAMILIES with merged results\n            BUILTIN_LLM_FAMILIES.clear()\n            BUILTIN_LLM_FAMILIES.extend(merged_models)\n\n    for family in BUILTIN_LLM_FAMILIES:\n        if family.model_name not in LLM_VERSION_INFOS:\n            LLM_VERSION_INFOS.update(generate_llm_version_info(family))\n\n    # traverse all families and add engine parameters corresponding to the model name\n    for family in BUILTIN_LLM_FAMILIES:\n        generate_engine_config_by_model_family(family)\n\n    register_custom_model()\n\n    # register model description\n    for ud_llm in get_user_defined_llm_families():\n        LLM_VERSION_INFOS.update(generate_llm_version_info(ud_llm))\n"
  },
  {
    "path": "xinference/model/llm/cache_manager.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport os\nfrom typing import TYPE_CHECKING, Optional\n\nfrom ..cache_manager import CacheManager\n\nif TYPE_CHECKING:\n    from .llm_family import LLMFamilyV2\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass LLMCacheManager(CacheManager):\n    def __init__(\n        self, llm_family: \"LLMFamilyV2\", multimodal_projector: Optional[str] = None\n    ):\n        super().__init__(llm_family)\n        self._llm_family = llm_family\n        self._model_name = llm_family.model_name\n        self._model_format = llm_family.model_specs[0].model_format\n        self._model_size_in_billions = getattr(\n            llm_family.model_specs[0], \"model_size_in_billions\", None\n        )\n        self._quantization = llm_family.model_specs[0].quantization\n        self._model_uri = llm_family.model_specs[0].model_uri\n        self._multimodal_projector = multimodal_projector\n        self._model_id = llm_family.model_specs[0].model_id\n        self._model_hub = llm_family.model_specs[0].model_hub\n        self._model_revision = llm_family.model_specs[0].model_revision\n        self._cache_dir = os.path.join(\n            self._v2_cache_dir_prefix,\n            f\"{self._model_name.replace('.', '_')}-{self._model_format}-\"\n            f\"{self._model_size_in_billions}b-{self._quantization}\",\n        )\n\n    def cache_uri(self) -> str:\n        from ..utils import parse_uri\n\n        cache_dir = self.get_cache_dir()\n        assert self._model_uri is not None\n        src_scheme, src_root = parse_uri(self._model_uri)\n        if src_root.endswith(\"/\"):\n            # remove trailing path separator.\n            src_root = src_root[:-1]\n\n        if src_scheme == \"file\":\n            if not os.path.isabs(src_root):\n                raise ValueError(\n                    f\"Model URI cannot be a relative path: {self._model_uri}\"\n                )\n            if os.path.exists(cache_dir):\n                logger.info(f\"Cache {cache_dir} exists\")\n                return cache_dir\n            else:\n                os.symlink(src_root, cache_dir, target_is_directory=True)\n            return cache_dir\n        else:\n            raise ValueError(f\"Unsupported URL scheme: {src_scheme}\")\n\n    def cache_from_huggingface(self) -> str:\n        \"\"\"\n        Cache model from Hugging Face. Return the cache directory.\n        \"\"\"\n        import huggingface_hub\n\n        from ..utils import (\n            IS_NEW_HUGGINGFACE_HUB,\n            create_symlink,\n            generate_model_file_names_with_quantization_parts,\n            merge_cached_files,\n            retry_download,\n            symlink_local_file,\n        )\n\n        cache_dir = self.get_cache_dir()\n        if self.get_cache_status():\n            return cache_dir\n\n        cache_config = (\n            self._llm_family.cache_config.copy()\n            if self._llm_family.cache_config\n            else {}\n        )\n        use_symlinks = {}\n        if not IS_NEW_HUGGINGFACE_HUB:\n            use_symlinks = {\"local_dir_use_symlinks\": True, \"local_dir\": cache_dir}\n            cache_config = {**cache_config, **use_symlinks}\n\n        if self._model_format in [\"pytorch\", \"gptq\", \"awq\", \"fp4\", \"fp8\", \"bnb\", \"mlx\"]:\n            download_dir = retry_download(\n                huggingface_hub.snapshot_download,\n                self._model_name,\n                {\n                    \"model_size\": self._model_size_in_billions,\n                    \"model_format\": self._model_format,\n                },\n                self._model_id,\n                revision=self._model_revision,\n                **cache_config,\n            )\n            if IS_NEW_HUGGINGFACE_HUB:\n                create_symlink(download_dir, cache_dir)\n        elif self._model_format in [\"ggufv2\"]:\n            file_names, final_file_name, need_merge = (\n                generate_model_file_names_with_quantization_parts(\n                    self._llm_family.model_specs[0], self._multimodal_projector\n                )\n            )\n\n            for file_name in file_names:\n                download_file_path = retry_download(\n                    huggingface_hub.hf_hub_download,\n                    self._model_name,\n                    {\n                        \"model_size\": self._model_size_in_billions,\n                        \"model_format\": self._model_format,\n                    },\n                    self._model_id,\n                    revision=self._model_revision,\n                    filename=file_name,\n                    **use_symlinks,\n                )\n                if IS_NEW_HUGGINGFACE_HUB:\n                    symlink_local_file(download_file_path, cache_dir, file_name)\n\n            if need_merge:\n                merge_cached_files(cache_dir, file_names, final_file_name)\n        else:\n            raise ValueError(f\"Unsupported model format: {self._model_format}\")\n\n        return cache_dir\n\n    def cache_from_modelscope(self) -> str:\n        \"\"\"\n        Cache model from Modelscope. Return the cache directory.\n        \"\"\"\n        from modelscope.hub.file_download import model_file_download\n        from modelscope.hub.snapshot_download import snapshot_download\n\n        from ..utils import (\n            create_symlink,\n            generate_model_file_names_with_quantization_parts,\n            merge_cached_files,\n            retry_download,\n            symlink_local_file,\n        )\n\n        cache_dir = self.get_cache_dir()\n        if self.get_cache_status():\n            return cache_dir\n\n        cache_config = (\n            self._llm_family.cache_config.copy()\n            if self._llm_family.cache_config\n            else {}\n        )\n        if self._model_format in [\n            \"pytorch\",\n            \"gptq\",\n            \"awq\",\n            \"fp4\",\n            \"bnb\",\n            \"fp8\",\n            \"bnb\",\n            \"mlx\",\n        ]:\n            download_dir = retry_download(\n                snapshot_download,\n                self._model_name,\n                {\n                    \"model_size\": self._model_size_in_billions,\n                    \"model_format\": self._model_format,\n                },\n                self._model_id,\n                revision=self._model_revision,\n                **cache_config,\n            )\n            create_symlink(download_dir, cache_dir)\n\n        elif self._model_format in [\"ggufv2\"]:\n            file_names, final_file_name, need_merge = (\n                generate_model_file_names_with_quantization_parts(\n                    self._llm_family.model_specs[0], self._multimodal_projector\n                )\n            )\n\n            for filename in file_names:\n                download_path = retry_download(\n                    model_file_download,\n                    self._model_name,\n                    {\n                        \"model_size\": self._model_size_in_billions,\n                        \"model_format\": self._model_format,\n                    },\n                    self._model_id,\n                    filename,\n                    revision=self._model_revision,\n                )\n                symlink_local_file(download_path, cache_dir, filename)\n\n            if need_merge:\n                merge_cached_files(cache_dir, file_names, final_file_name)\n        else:\n            raise ValueError(f\"Unsupported format: {self._model_format}\")\n\n        return cache_dir\n\n    def cache_from_openmind_hub(self) -> str:\n        \"\"\"\n        Cache model from openmind_hub. Return the cache directory.\n        \"\"\"\n        from openmind_hub import snapshot_download\n\n        from ..utils import create_symlink, retry_download\n\n        cache_dir = self.get_cache_dir()\n        if self.get_cache_status():\n            return cache_dir\n\n        if self._model_format in [\"pytorch\", \"mindspore\"]:\n            download_dir = retry_download(\n                snapshot_download,\n                self._model_name,\n                {\n                    \"model_size\": self._model_size_in_billions,\n                    \"model_format\": self._model_format,\n                },\n                self._model_id,\n                revision=self._model_revision,\n            )\n            create_symlink(download_dir, cache_dir)\n\n        else:\n            raise ValueError(f\"Unsupported format: {self._model_format}\")\n        return cache_dir\n\n    def cache_from_csghub(self) -> str:\n        \"\"\"\n        Cache model from CSGHub. Return the cache directory.\n        \"\"\"\n        from pycsghub.file_download import file_download\n        from pycsghub.snapshot_download import snapshot_download\n\n        from ...constants import XINFERENCE_CSG_ENDPOINT, XINFERENCE_ENV_CSG_TOKEN\n        from ..utils import (\n            create_symlink,\n            generate_model_file_names_with_quantization_parts,\n            merge_cached_files,\n            retry_download,\n            symlink_local_file,\n        )\n\n        cache_dir = self.get_cache_dir()\n        if self.get_cache_status():\n            return cache_dir\n\n        if self._model_format in [\"pytorch\", \"gptq\", \"awq\", \"fp4\", \"fp8\", \"bnb\", \"mlx\"]:\n            download_dir = retry_download(\n                snapshot_download,\n                self._model_name,\n                {\n                    \"model_size\": self._model_size_in_billions,\n                    \"model_format\": self._model_format,\n                },\n                self._model_id,\n                endpoint=XINFERENCE_CSG_ENDPOINT,\n                token=os.environ.get(XINFERENCE_ENV_CSG_TOKEN),\n            )\n            create_symlink(download_dir, cache_dir)\n        elif self._model_format in [\"ggufv2\"]:\n            file_names, final_file_name, need_merge = (\n                generate_model_file_names_with_quantization_parts(\n                    self._llm_family.model_specs[0], self._multimodal_projector\n                )\n            )\n\n            for filename in file_names:\n                download_path = retry_download(\n                    file_download,\n                    self._model_name,\n                    {\n                        \"model_size\": self._model_size_in_billions,\n                        \"model_format\": self._model_format,\n                    },\n                    self._model_id,\n                    file_name=filename,\n                    endpoint=XINFERENCE_CSG_ENDPOINT,\n                    token=os.environ.get(XINFERENCE_ENV_CSG_TOKEN),\n                )\n                symlink_local_file(download_path, cache_dir, filename)\n\n            if need_merge:\n                merge_cached_files(cache_dir, file_names, final_file_name)\n        else:\n            raise ValueError(f\"Unsupported format: {self._model_format}\")\n\n        return cache_dir\n\n    def cache(self) -> str:\n        if self._model_uri is not None:\n            return self.cache_uri()\n        else:\n            if self._model_hub == \"huggingface\":\n                return self.cache_from_huggingface()\n            elif self._model_hub == \"modelscope\":\n                return self.cache_from_modelscope()\n            elif self._model_hub == \"openmind_hub\":\n                return self.cache_from_openmind_hub()\n            elif self._model_hub == \"csghub\":\n                return self.cache_from_csghub()\n            else:\n                raise ValueError(f\"Unknown model hub: {self._model_hub}\")\n"
  },
  {
    "path": "xinference/model/llm/config_parser.py",
    "content": "import json\nimport os\nfrom typing import Any, Dict, List, Optional, Tuple, Union\n\n_BUILTIN_FAMILY_CACHE: Optional[List[Dict[str, Any]]] = None\n\n\ndef _resolve_config_and_dir(model_path: str) -> Tuple[str, str]:\n    if os.path.isdir(model_path):\n        config_path = os.path.join(model_path, \"config.json\")\n        model_dir = model_path\n    else:\n        model_dir = os.path.dirname(model_path) or \".\"\n        if os.path.basename(model_path) == \"config.json\":\n            config_path = model_path\n        else:\n            config_path = os.path.join(model_dir, \"config.json\")\n    if not os.path.exists(config_path):\n        raise ValueError(f\"config.json not found under {model_path}.\")\n    return config_path, model_dir\n\n\ndef _load_json_file(path: str) -> Dict[str, Any]:\n    with open(path, \"r\") as file:\n        return json.load(file)\n\n\ndef _load_tokenizer_config(model_dir: str) -> Optional[Dict[str, Any]]:\n    tokenizer_config_path = os.path.join(model_dir, \"tokenizer_config.json\")\n    if not os.path.exists(tokenizer_config_path):\n        return None\n    return _load_json_file(tokenizer_config_path)\n\n\ndef _load_chat_template_file(model_dir: str) -> Optional[str]:\n    chat_template_path = os.path.join(model_dir, \"chat_template.jinja\")\n    if not os.path.exists(chat_template_path):\n        return None\n    with open(chat_template_path, \"r\") as file:\n        content = file.read()\n    return content.strip() if content else None\n\n\ndef _get_first_value(config: Dict[str, Any], *keys: str) -> Optional[Any]:\n    for key in keys:\n        value = config.get(key)\n        if value is not None:\n            return value\n    return None\n\n\ndef _infer_context_length(config: Dict[str, Any]) -> int:\n    candidates = [\n        _get_first_value(config, \"max_sequence_length\"),\n        _get_first_value(config, \"seq_length\"),\n        _get_first_value(config, \"max_position_embeddings\"),\n        _get_first_value(config, \"max_seq_len\"),\n        _get_first_value(config, \"model_max_length\"),\n    ]\n    values = [v for v in candidates if isinstance(v, (int, float))]\n    return int(max(values)) if values else 2048\n\n\ndef _normalize_architectures(config: Dict[str, Any]) -> List[str]:\n    architectures = config.get(\"architectures\")\n    if isinstance(architectures, list):\n        return [str(item) for item in architectures if item]\n    if isinstance(architectures, str) and architectures:\n        return [architectures]\n    return []\n\n\ndef _match_family_by_architectures(\n    architectures: List[str],\n) -> Optional[Dict[str, Any]]:\n    if not architectures:\n        return None\n    families = _load_builtin_families()\n    matches: List[Dict[str, Any]] = []\n    for family in families:\n        if not family.get(\"architectures\"):\n            continue\n        if any(arch in family[\"architectures\"] for arch in architectures):\n            matches.append(family)\n    if len(matches) == 1:\n        return matches[0]\n    return None\n\n\ndef _load_builtin_families() -> List[Dict[str, Any]]:\n    global _BUILTIN_FAMILY_CACHE\n    if _BUILTIN_FAMILY_CACHE is not None:\n        return _BUILTIN_FAMILY_CACHE\n    json_path = os.path.join(\n        os.path.dirname(os.path.abspath(__file__)), \"llm_family.json\"\n    )\n    with open(json_path, \"r\") as file:\n        _BUILTIN_FAMILY_CACHE = json.load(file)\n    return _BUILTIN_FAMILY_CACHE\n\n\ndef _infer_languages(config: Dict[str, Any]) -> List[str]:\n    lang_value = _get_first_value(config, \"language\", \"languages\", \"lang\")\n    if isinstance(lang_value, list) and lang_value:\n        return [str(item) for item in lang_value]\n    if isinstance(lang_value, str) and lang_value:\n        return [lang_value]\n    return [\"en\"]\n\n\ndef _format_size_in_billions(size_in_billions: float) -> Union[int, str]:\n    rounded = round(size_in_billions, 1)\n    if abs(rounded - round(rounded)) < 0.05:\n        return int(round(rounded))\n    return str(rounded).replace(\".\", \"_\")\n\n\ndef _extract_numeric_size(value: Any) -> Optional[float]:\n    if value is None:\n        return None\n    if isinstance(value, (int, float)):\n        return float(value)\n    if isinstance(value, str):\n        text = value.strip()\n        if not text:\n            return None\n        unit = text[-1].lower()\n        if unit in {\"b\", \"m\"}:\n            try:\n                number = float(text[:-1])\n            except ValueError:\n                return None\n            if unit == \"b\":\n                return number\n            return number / 1000.0\n        try:\n            return float(text)\n        except ValueError:\n            return None\n    return None\n\n\ndef _infer_model_size_in_billions(config: Dict[str, Any]) -> Optional[Union[int, str]]:\n    size_value = _get_first_value(\n        config,\n        \"model_size_in_billions\",\n        \"num_parameters_in_billions\",\n    )\n    size_in_billions = _extract_numeric_size(size_value)\n    if size_in_billions:\n        return _format_size_in_billions(size_in_billions)\n\n    size_millions = _extract_numeric_size(\n        _get_first_value(config, \"num_parameters_in_millions\", \"num_params_in_millions\")\n    )\n    if size_millions:\n        return _format_size_in_billions(size_millions / 1000.0)\n\n    param_value = _extract_numeric_size(\n        _get_first_value(\n            config, \"num_parameters\", \"num_params\", \"n_params\", \"total_params\"\n        )\n    )\n    if param_value:\n        if param_value > 1e6:\n            return _format_size_in_billions(param_value / 1e9)\n        if param_value > 0:\n            return _format_size_in_billions(param_value)\n\n    hidden_size = _get_first_value(config, \"hidden_size\", \"d_model\", \"n_embd\")\n    num_layers = _get_first_value(config, \"num_hidden_layers\", \"num_layers\", \"n_layer\")\n    if hidden_size is None or num_layers is None:\n        return None\n    try:\n        hidden_size = int(hidden_size)\n        num_layers = int(num_layers)\n    except (TypeError, ValueError):\n        return None\n\n    vocab_size = _get_first_value(config, \"vocab_size\") or 0\n    try:\n        vocab_size = int(vocab_size)\n    except (TypeError, ValueError):\n        vocab_size = 0\n\n    intermediate_size = _get_first_value(\n        config, \"intermediate_size\", \"ffn_dim\", \"n_inner\"\n    )\n    try:\n        intermediate_size = (\n            int(intermediate_size) if intermediate_size else 4 * hidden_size\n        )\n    except (TypeError, ValueError):\n        intermediate_size = 4 * hidden_size\n\n    embedding_params = vocab_size * hidden_size\n    attention_params = 4 * hidden_size * hidden_size\n    mlp_params = 3 * hidden_size * intermediate_size\n    total_params = embedding_params + num_layers * (attention_params + mlp_params)\n    calculated_size_in_billions = total_params / 1e9\n    if calculated_size_in_billions <= 0:\n        return None\n    return _format_size_in_billions(calculated_size_in_billions)\n\n\ndef _infer_quantization(config: Dict[str, Any], model_format: str) -> str:\n    if model_format == \"pytorch\":\n        return \"none\"\n    quant_config = config.get(\"quantization_config\") or {}\n    if isinstance(quant_config, dict):\n        bits = _get_first_value(quant_config, \"bits\", \"wbits\")\n        if bits is not None:\n            try:\n                bits = int(bits)\n                return f\"Int{bits}\"\n            except (TypeError, ValueError):\n                pass\n        quant_method = quant_config.get(\"quant_method\") or quant_config.get(\"method\")\n        if isinstance(quant_method, str) and quant_method:\n            if \"gptq\" in quant_method.lower():\n                return \"Int4\"\n    quant = config.get(\"quantization\")\n    if isinstance(quant, str) and quant:\n        return quant\n    return \"\"\n\n\ndef _extract_chat_template(tokenizer_config: Optional[Dict[str, Any]]) -> Optional[str]:\n    if not tokenizer_config:\n        return None\n    chat_template = tokenizer_config.get(\"chat_template\")\n    if isinstance(chat_template, str) and chat_template.strip():\n        return chat_template\n    return None\n\n\ndef _infer_model_format(config: Dict[str, Any]) -> str:\n    quant_config = config.get(\"quantization_config\") or {}\n    quant_method = None\n    if isinstance(quant_config, dict):\n        quant_method = quant_config.get(\"quant_method\") or quant_config.get(\"method\")\n    if isinstance(quant_method, str) and quant_method:\n        lowered = quant_method.lower()\n        if \"awq\" in lowered:\n            return \"awq\"\n        if \"gptq\" in lowered:\n            return \"gptq\"\n        if \"fp8\" in lowered:\n            return \"fp8\"\n        if \"bnb\" in lowered or \"bitsandbytes\" in lowered:\n            return \"bnb\"\n    return \"pytorch\"\n\n\ndef build_llm_registration_from_local_config(\n    model_path: str, model_family: str\n) -> Dict[str, Any]:\n\n    config_path, model_dir = _resolve_config_and_dir(model_path)\n    config = _load_json_file(config_path)\n    tokenizer_config = _load_tokenizer_config(model_dir)\n    chat_template_file = _load_chat_template_file(model_dir)\n\n    model_lang = _infer_languages(config)\n    chat_template = _extract_chat_template(tokenizer_config) or chat_template_file\n    model_ability = [\"generate\"]\n    if chat_template:\n        model_ability.append(\"chat\")\n    if config.get(\"vision_config\") is not None:\n        model_ability.append(\"vision\")\n\n    prompt_style = None\n    if isinstance(model_family, str) and model_family:\n        from .llm_family import BUILTIN_LLM_PROMPT_STYLE\n\n        prompt_style = BUILTIN_LLM_PROMPT_STYLE.get(model_family)\n        if prompt_style:\n            if prompt_style.get(\"chat_template\") and \"chat\" not in model_ability:\n                model_ability.append(\"chat\")\n            if prompt_style.get(\"reasoning_start_tag\") and prompt_style.get(\n                \"reasoning_end_tag\"\n            ):\n                if \"reasoning\" not in model_ability:\n                    model_ability.append(\"reasoning\")\n\n    context_length = _infer_context_length(config)\n    model_size_in_billions = _infer_model_size_in_billions(config)\n    if model_size_in_billions is None:\n        raise ValueError(\"Unable to infer model_size_in_billions from config.json.\")\n\n    model_format = _infer_model_format(config)\n    quantization = _infer_quantization(config, model_format)\n    if model_format != \"pytorch\" and not quantization:\n        raise ValueError(\n            \"Unable to infer quantization for the selected model_format from config.json.\"\n        )\n\n    model_spec = {\n        \"model_uri\": model_dir,\n        \"model_format\": model_format,\n        \"model_size_in_billions\": model_size_in_billions,\n        \"quantization\": quantization,\n    }\n\n    result = {\n        \"context_length\": context_length,\n        \"model_lang\": model_lang,\n        \"model_family\": model_family,\n        \"model_ability\": model_ability,\n        \"model_specs\": [model_spec],\n    }\n    if \"chat\" in model_ability and prompt_style:\n        result[\"chat_template\"] = prompt_style.get(\"chat_template\")\n        result[\"stop\"] = prompt_style.get(\"stop\")\n        result[\"stop_token_ids\"] = prompt_style.get(\"stop_token_ids\")\n    if \"reasoning\" in model_ability and prompt_style:\n        result[\"reasoning_start_tag\"] = prompt_style.get(\"reasoning_start_tag\")\n        result[\"reasoning_end_tag\"] = prompt_style.get(\"reasoning_end_tag\")\n    return result\n"
  },
  {
    "path": "xinference/model/llm/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport abc\nimport inspect\nimport logging\nimport os\nimport platform\nimport warnings\nfrom abc import abstractmethod\nfrom collections import defaultdict\nfrom contextvars import ContextVar\nfrom functools import lru_cache\nfrom typing import TYPE_CHECKING, Dict, List, Literal, Optional, Tuple, Union\n\nfrom ...core.utils import parse_replica_model_uid\nfrom ...types import PeftModelConfig\nfrom .reasoning_parser import ReasoningParser\nfrom .tool_parsers import TOOL_PARSERS\n\nif TYPE_CHECKING:\n    from .llm_family import LLMFamilyV2, LLMSpecV1\n\nlogger = logging.getLogger(__name__)\n\n\nLLM_VERSION_INFOS: Dict[str, List[Dict]] = defaultdict(list)\n\n\ndef get_llm_version_infos():\n    import copy\n\n    return copy.deepcopy(LLM_VERSION_INFOS)\n\n\nclass LLM(abc.ABC):\n    allow_batch = False\n\n    def __init__(\n        self,\n        replica_model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        *args,\n        **kwargs,\n    ):\n        self.model_uid, self.rep_id = parse_replica_model_uid(replica_model_uid)\n        self.raw_model_uid = replica_model_uid\n        self.model_family = model_family\n        self.model_spec = model_family.model_specs[0]\n        self.quantization = model_family.model_specs[0].quantization\n        self.model_path = model_path\n        self.reasoning_parser = None\n        self.tool_parser = None\n        if args:\n            raise ValueError(f\"Unrecognized positional arguments: {args}\")\n        if kwargs:\n            raise ValueError(f\"Unrecognized keyword arguments: {kwargs}\")\n\n    @classmethod\n    @abstractmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        raise NotImplementedError\n\n    @staticmethod\n    def _is_darwin_and_apple_silicon():\n        return platform.system() == \"Darwin\" and platform.processor() == \"arm\"\n\n    @staticmethod\n    def _is_linux():\n        return platform.system() == \"Linux\"\n\n    @staticmethod\n    @lru_cache\n    def _has_cuda_device():\n        \"\"\"\n        Use pynvml to impl this interface.\n        DO NOT USE torch to impl this, which will lead to some unexpected errors.\n        \"\"\"\n        from pynvml import nvmlDeviceGetCount, nvmlInit, nvmlShutdown\n\n        device_count = 0\n        try:\n            nvmlInit()\n            device_count = nvmlDeviceGetCount()\n        except Exception:\n            pass\n        finally:\n            try:\n                nvmlShutdown()\n            except Exception:\n                pass\n\n        return device_count > 0\n\n    @staticmethod\n    @lru_cache\n    def _has_mlu_device():\n        \"\"\"\n        Use cnmon command to detect MLU devices.\n        DO NOT USE torch to impl this, which will lead to some unexpected errors.\n        \"\"\"\n        try:\n            import subprocess\n\n            result = subprocess.run(\n                [\"cnmon\", \"info\"], capture_output=True, text=True, timeout=5\n            )\n            return \"Card 0\" in result.stdout\n        except Exception:\n            return False\n\n    @staticmethod\n    @lru_cache\n    def _has_vacc_device():\n        \"\"\"\n        Use glob command to detect VACC devices.\n        DO NOT USE torch to impl this, which will lead to some unexpected errors.\n        \"\"\"\n        try:\n            import glob\n\n            return len(glob.glob(\"/dev/vacc*\")) > 0\n        except Exception:\n            return False\n\n    @staticmethod\n    @lru_cache\n    def _has_musa_device():\n        \"\"\"\n        Use pymtml to impl this interface.\n        DO NOT USE torch to impl this, which will lead to some unexpected errors.\n        \"\"\"\n        try:\n            from pymtml import nvmlDeviceGetCount, nvmlInit, nvmlShutdown\n        except Exception:\n            return False\n\n        device_count = 0\n        try:\n            nvmlInit()\n            device_count = nvmlDeviceGetCount()\n        except Exception:\n            pass\n        finally:\n            try:\n                nvmlShutdown()\n            except Exception:\n                pass\n\n        return device_count > 0\n\n    @staticmethod\n    @lru_cache\n    def _get_cuda_count():\n        from ...device_utils import get_available_device_env_name\n        from ...utils import cuda_count\n\n        env_name = get_available_device_env_name()\n        if env_name is None:\n            return cuda_count()\n\n        cuda_visible_devices = os.getenv(env_name, None)\n        if cuda_visible_devices is None:\n            return cuda_count()\n\n        if cuda_visible_devices == \"-1\":\n            return 0\n        else:\n            return len(cuda_visible_devices.split(\",\"))\n\n    @abstractmethod\n    def load(self):\n        raise NotImplementedError\n\n    @classmethod\n    def match(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> bool:\n        lib_result = cls.check_lib()\n        if lib_result != True:\n            return False\n        match_result = cls.match_json(llm_family, llm_spec, quantization)\n        return match_result == True\n\n    @classmethod\n    @abstractmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        raise NotImplementedError\n\n    def prepare_parse_reasoning_content(\n        self, reasoning_content: bool, enable_thinking: bool = True\n    ):\n        if \"hybrid\" not in self.model_family.model_ability and not enable_thinking:\n            enable_thinking = True\n            warnings.warn(\n                \"enable_thinking cannot be disabled for non hybrid model, will be ignored\"\n            )\n        # Initialize reasoning parser if model has reasoning ability\n        self.reasoning_parser = ReasoningParser(  # type: ignore\n            reasoning_content,\n            self.model_family.reasoning_start_tag,  # type: ignore\n            self.model_family.reasoning_end_tag,  # type: ignore\n            enable_thinking=enable_thinking,\n        )\n\n    def prepare_parse_tool_calls(self):\n        if self.model_family.tool_parser is None:\n            return\n        if self.model_family.tool_parser not in TOOL_PARSERS:\n            return\n        tool_parser = TOOL_PARSERS[self.model_family.tool_parser]\n        self.tool_parser = tool_parser()\n\n\n# Context variable for passing per-request chat context (e.g., chat_template_kwargs).\n# This variable should be set at the beginning of each chat or stream_chat call.\n# It allows downstream components (e.g., reasoning_parser) to access request-specific\n# settings like 'enable_thinking', without requiring those values to be passed explicitly\n# through every function layer.\n#\n# The context is automatically isolated per thread or coroutine, so concurrent requests\n# will not interfere with each other.\nchat_context_var: ContextVar[dict] = ContextVar(\"chat_context_var\", default={})\n\n\ndef generate_llm_version_info(llm_family: \"LLMFamilyV2\") -> Dict[str, List[Dict]]:\n    res = defaultdict(list)\n    # Use model_specs from huggingface, as HuggingFace is the most comprehensive.\n    hf_specs = [\n        spec for spec in llm_family.model_specs if spec.model_hub == \"huggingface\"\n    ]\n    for spec in hf_specs:\n        _llm_family = llm_family.copy()\n        _llm_family.model_specs = [spec]\n        multimodal_projectors = getattr(spec, \"multimodal_projectors\", None)\n        if multimodal_projectors:\n            for mmproj in multimodal_projectors:\n                _llm_family.multimodal_projector = mmproj\n                res[_llm_family.model_name].append(_llm_family.to_version_info())\n        else:\n            res[_llm_family.model_name].append(_llm_family.to_version_info())\n    return res\n\n\ndef create_llm_model_instance(\n    model_uid: str,\n    model_name: str,\n    model_engine: Optional[str],\n    model_format: Optional[str] = None,\n    model_size_in_billions: Optional[Union[int, str]] = None,\n    quantization: Optional[str] = None,\n    peft_model_config: Optional[PeftModelConfig] = None,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n    model_path: Optional[str] = None,\n    **kwargs,\n) -> LLM:\n    from .cache_manager import LLMCacheManager\n    from .llm_family import (\n        check_engine_by_spec_parameters,\n        check_engine_by_spec_parameters_with_virtual_env,\n        match_llm,\n    )\n\n    if model_engine is None:\n        raise ValueError(\"model_engine is required for LLM model\")\n    llm_family = match_llm(\n        model_name, model_format, model_size_in_billions, quantization, download_hub\n    )\n\n    if not llm_family:\n        raise ValueError(\n            f\"Model not found, name: {model_name}, format: {model_format}, \"\n            f\"size: {model_size_in_billions}, quantization: {quantization}\"\n        )\n\n    enable_virtual_env = kwargs.pop(\"enable_virtual_env\", None)\n    if enable_virtual_env is None:\n        from ...constants import XINFERENCE_ENABLE_VIRTUAL_ENV\n\n        enable_virtual_env = XINFERENCE_ENABLE_VIRTUAL_ENV\n    if enable_virtual_env:\n        llm_cls = check_engine_by_spec_parameters_with_virtual_env(\n            model_engine,\n            llm_family.model_name,\n            llm_family.model_specs[0].model_format,\n            llm_family.model_specs[0].model_size_in_billions,\n            llm_family.model_specs[0].quantization,\n            llm_family=llm_family,\n        )\n    else:\n        llm_cls = check_engine_by_spec_parameters(\n            model_engine,\n            llm_family.model_name,\n            llm_family.model_specs[0].model_format,\n            llm_family.model_specs[0].model_size_in_billions,\n            llm_family.model_specs[0].quantization,\n        )\n    logger.debug(f\"Launching {model_uid} with {llm_cls.__name__}\")\n\n    multimodal_projector = kwargs.get(\"multimodal_projector\")\n    if not model_path:\n        cache_manager = LLMCacheManager(llm_family, multimodal_projector)\n        model_path = cache_manager.cache()\n\n    peft_model = peft_model_config.peft_model if peft_model_config else None\n    if peft_model is not None:\n        if \"peft_model\" in inspect.signature(llm_cls.__init__).parameters:\n            model = llm_cls(\n                model_uid,\n                llm_family,\n                model_path,\n                kwargs,\n                peft_model,\n            )\n        else:\n            logger.warning(\n                f\"Model not supported with lora, name: {model_name}, format: {model_format}, engine: {model_engine}. \"\n                f\"Load this without lora.\"\n            )\n            model = llm_cls(model_uid, llm_family, model_path, kwargs)\n    else:\n        model = llm_cls(model_uid, llm_family, model_path, kwargs)\n    return model\n"
  },
  {
    "path": "xinference/model/llm/custom.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import TYPE_CHECKING, List\n\nfrom ..custom import ModelRegistry\n\nif TYPE_CHECKING:\n    from .llm_family import LLMFamilyV2\n\n\nlogger = logging.getLogger(__name__)\n\n\nUD_LLM_FAMILIES: List[\"LLMFamilyV2\"] = []\n\n\nclass LLMModelRegistry(ModelRegistry):\n    model_type = \"llm\"\n\n    def __init__(self):\n        from .llm_family import BUILTIN_LLM_FAMILIES\n\n        super().__init__()\n        self.models = UD_LLM_FAMILIES\n        self.builtin_models = [x.model_name for x in BUILTIN_LLM_FAMILIES]\n\n    def add_ud_model(self, model_spec):\n        from . import generate_engine_config_by_model_family\n\n        self.models.append(model_spec)\n        generate_engine_config_by_model_family(model_spec)\n\n    def check_model_uri(self, llm_family: \"LLMFamilyV2\"):\n        from ..utils import is_valid_model_uri\n\n        for spec in llm_family.model_specs:\n            model_uri = spec.model_uri\n            if model_uri and not is_valid_model_uri(model_uri):\n                raise ValueError(f\"Invalid model URI {model_uri}.\")\n\n    def remove_ud_model(self, llm_family: \"LLMFamilyV2\"):\n        from .llm_family import LLM_ENGINES\n\n        UD_LLM_FAMILIES.remove(llm_family)\n        del LLM_ENGINES[llm_family.model_name]\n\n    def remove_ud_model_files(self, llm_family: \"LLMFamilyV2\"):\n        from .cache_manager import LLMCacheManager\n\n        _llm_family = llm_family.copy()\n        for spec in llm_family.model_specs:\n            _llm_family.model_specs = [spec]\n            cache_manager = LLMCacheManager(_llm_family)\n            cache_manager.unregister_custom_model(self.model_type)\n\n\ndef get_user_defined_llm_families():\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"llm\")\n    return registry.get_custom_models()\n\n\ndef register_llm(llm_family: \"LLMFamilyV2\", persist: bool):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"llm\")\n    registry.register(llm_family, persist)\n\n\ndef unregister_llm(model_name: str, raise_error: bool = True):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"llm\")\n    registry.unregister(model_name, raise_error)\n"
  },
  {
    "path": "xinference/model/llm/harmony.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom copy import deepcopy\nfrom typing import TYPE_CHECKING, AsyncGenerator, Dict, Union\n\nif TYPE_CHECKING:\n    from ...types import ChatCompletion, ChatCompletionChunk\n\n\nclass HarmonyStreamParser:\n    def __init__(self):\n        # Current channel: either 'analysis', 'final', or None if not started yet\n        self.current_channel = None\n        # Buffer for accumulating text when looking for 'assistantfinal' marker\n        self.buffer = \"\"\n\n    def feed(self, text):\n        \"\"\"\n        Feed a chunk of text into the parser and return parsed segments.\n\n        Each segment is a dict:\n        {\n            \"channel\": \"analysis\" | \"final\",\n            \"content\": <string>\n        }\n\n        The parser detects 'assistantfinal' markers inside reasoning text,\n        splits the reasoning and final content correctly, and switches the channel.\n        \"\"\"\n        segments = []\n\n        # If we are currently in 'analysis' mode\n        if self.current_channel == \"analysis\":\n            # Add text to buffer and check for 'assistantfinal' marker\n            self.buffer += text\n            if \"assistantfinal\" in self.buffer:\n                # Split reasoning and final content\n                before, after = self.buffer.split(\"assistantfinal\", 1)\n                if before:\n                    segments.append({\"channel\": \"analysis\", \"content\": before})\n                # Switch to final channel\n                self.current_channel = \"final\"\n                self.buffer = \"\"\n                if after:\n                    segments.append({\"channel\": \"final\", \"content\": after})\n                return segments\n            else:\n                # Check if buffer ends with partial 'assistantfinal'\n                if any(\n                    self.buffer.endswith(\"assistantfinal\"[:i])\n                    for i in range(1, len(\"assistantfinal\") + 1)\n                ):\n                    # Don't emit anything yet, wait for more text\n                    return segments\n                else:\n                    # Emit what we have so far and keep buffer for next time\n                    if self.buffer:\n                        segments.append({\"channel\": \"analysis\", \"content\": self.buffer})\n                        self.buffer = \"\"\n                    return segments\n\n        # If we are currently in 'final' mode\n        if self.current_channel == \"final\":\n            # Check if this is actually a new message starting with 'analysis'\n            if text.startswith(\"analysis\"):\n                # Reset parser state for new message\n                self.current_channel = None\n                self.buffer = \"\"\n                # Re-process this text with the new state\n                return self.feed(text)\n            else:\n                segments.append({\"channel\": \"final\", \"content\": text})\n                return segments\n\n        # If no channel has been started yet\n        if text.startswith(\"analysis\"):\n            self.current_channel = \"analysis\"\n            rest = text[len(\"analysis\") :]\n            if \"assistantfinal\" in rest:\n                # Split immediately if marker is found in the first chunk\n                before, after = rest.split(\"assistantfinal\", 1)\n                if before:\n                    segments.append({\"channel\": \"analysis\", \"content\": before})\n                self.current_channel = \"final\"\n                if after:\n                    segments.append({\"channel\": \"final\", \"content\": after})\n            else:\n                # Start buffering for potential 'assistantfinal' marker\n                self.buffer = rest\n                # Check if buffer ends with partial 'assistantfinal'\n                if any(\n                    self.buffer.endswith(\"assistantfinal\"[:i])\n                    for i in range(1, len(\"assistantfinal\") + 1)\n                ):\n                    # Don't emit anything yet, wait for more text\n                    pass\n                else:\n                    # Emit what we have so far\n                    if self.buffer:\n                        segments.append({\"channel\": \"analysis\", \"content\": self.buffer})\n                        self.buffer = \"\"\n        elif text.startswith(\"assistantfinal\"):\n            self.current_channel = \"final\"\n            rest = text[len(\"assistantfinal\") :]\n            if rest:\n                segments.append({\"channel\": \"final\", \"content\": rest})\n\n        return segments\n\n\nasync def async_stream_harmony_chat_completion(\n    chunks: Union[\n        \"ChatCompletion\",\n        AsyncGenerator[\"ChatCompletionChunk\", None],\n    ],\n) -> AsyncGenerator[\"ChatCompletion\", None]:\n    \"\"\"\n    Parse Harmony-formatted content from either a full ChatCompletion (non-streaming)\n    or an async stream of ChatCompletionChunk (streaming), using the HarmonyStreamParser defined in this file.\n\n    Yields parsed objects incrementally.\n    \"\"\"\n\n    # --- Non-streaming: ChatCompletion ---\n    if isinstance(chunks, dict) and chunks.get(\"object\") == \"chat.completion\":\n        out_data = deepcopy(chunks)\n\n        for choice in out_data[\"choices\"]:\n            parser = HarmonyStreamParser()\n            msg = choice[\"message\"]\n\n            # Backup original content & reasoning\n            original_content = msg.get(\"content\") or \"\"\n            original_reasoning = msg.get(\"reasoning_content\") or \"\"\n\n            # Reset fields before parsing\n            msg[\"content\"] = \"\"\n            msg[\"reasoning_content\"] = \"\"\n            msg.setdefault(\"tool_calls\", [])\n\n            # Feed original content\n            for seg in parser.feed(original_content):\n                ch, c = seg[\"channel\"], seg[\"content\"]\n                if ch == \"final\":\n                    msg[\"content\"] += c\n                elif ch == \"analysis\":\n                    msg[\"reasoning_content\"] += c\n                elif ch == \"tool\":\n                    msg[\"tool_calls\"].append(c)\n\n            # Feed original reasoning_content\n            for seg in parser.feed(original_reasoning):\n                if seg[\"channel\"] == \"analysis\":\n                    msg[\"reasoning_content\"] += seg[\"content\"]\n                elif seg[\"channel\"] == \"tool\":\n                    msg[\"tool_calls\"].append(seg[\"content\"])\n\n            # Clean up reasoning_content: set to None if no reasoning content was parsed\n            if not msg[\"reasoning_content\"] and not original_reasoning:\n                msg[\"reasoning_content\"] = None  # type: ignore\n\n        yield out_data\n\n    else:\n        # Streaming: handle async generator\n        parsers_per_choice = {}\n\n        async for chunk in chunks:  # type: ignore\n            out_chunk = {  # type: ignore\n                \"id\": chunk[\"id\"],\n                \"model\": chunk[\"model\"],\n                \"object\": chunk[\"object\"],\n                \"created\": chunk[\"created\"],\n                \"choices\": [],\n            }\n\n            for i, choice in enumerate(chunk[\"choices\"]):\n                delta = choice.get(\"delta\", {})\n                text = delta.get(\"content\") or \"\"  # type: ignore\n\n                if i not in parsers_per_choice:\n                    parsers_per_choice[i] = HarmonyStreamParser()\n\n                # Feed text to parser and collect current delta only\n                curr_delta: Dict[str, object] = {\n                    \"content\": \"\",\n                    \"reasoning_content\": \"\",\n                    \"tool_calls\": [],\n                }\n\n                for seg in parsers_per_choice[i].feed(text):\n                    ch = seg[\"channel\"]\n                    c = seg[\"content\"]\n                    if ch == \"final\":\n                        curr_delta[\"content\"] += c  # type: ignore\n                    elif ch == \"analysis\":\n                        curr_delta[\"reasoning_content\"] += c  # type: ignore\n                    elif ch == \"tool\":\n                        curr_delta[\"tool_calls\"].append(c)  # type: ignore\n\n                if curr_delta[\"reasoning_content\"]:\n                    if not curr_delta[\"content\"]:\n                        curr_delta[\"content\"] = None\n\n                elif curr_delta[\"content\"]:\n                    if not curr_delta[\"reasoning_content\"]:\n                        curr_delta[\"reasoning_content\"] = None\n\n                elif (\n                    choice.get(\"finish_reason\") is not None\n                    and not curr_delta[\"reasoning_content\"]\n                ):\n                    # For the final chunk, if there's no new reasoning content,\n                    # don't include empty reasoning_content to avoid clearing existing state\n                    curr_delta[\"reasoning_content\"] = None\n\n                out_chunk[\"choices\"].append(  # type: ignore\n                    {\n                        \"index\": i,\n                        \"delta\": curr_delta,\n                        \"finish_reason\": choice.get(\"finish_reason\"),\n                    }\n                )\n\n            # Only yield if we have either content or reasoning_content\n            has_content = any(\n                choice[\"delta\"].get(\"content\")  # type: ignore\n                or choice[\"delta\"].get(\"reasoning_content\")  # type: ignore\n                or choice.get(\"finish_reason\") is not None  # type: ignore\n                for choice in out_chunk[\"choices\"]  # type: ignore\n            )\n            if has_content:\n                yield out_chunk  # type: ignore\n"
  },
  {
    "path": "xinference/model/llm/llama_cpp/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/llama_cpp/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport concurrent.futures\nimport logging\nimport os\nimport pprint\nimport queue\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union\n\nfrom packaging import version\n\nfrom ....constants import XINFERENCE_MAX_TOKENS\nfrom ....types import ChatCompletion, ChatCompletionChunk, Completion, CompletionChunk\nfrom ...utils import check_dependency_available\nfrom ..core import LLM, chat_context_var\nfrom ..llm_family import LLMFamilyV2, LLMSpecV1\nfrom ..utils import ChatModelMixin, normalize_response_format\n\nlogger = logging.getLogger(__name__)\n\n\ndef _schema_to_grammar(schema: Dict[str, Any]) -> Optional[str]:\n    try:\n        import xllamacpp\n    except Exception as e:  # pragma: no cover - optional dependency\n        logger.warning(\"json_schema provided but xllamacpp missing: %s\", e)\n        return None\n    try:\n        return xllamacpp.json_schema_to_grammar(schema)  # type: ignore[attr-defined]\n    except Exception as e:  # pragma: no cover - conversion failure\n        logger.warning(\"Failed to convert json_schema to grammar for xllamacpp: %s\", e)\n        return None\n\n\ndef _apply_response_format(generate_config: Dict[str, Any]) -> None:\n    response_format = generate_config.pop(\"response_format\", None)\n    normalized = normalize_response_format(response_format)\n    if not normalized or normalized.get(\"type\") != \"json_schema\":\n        return\n    schema_dict = normalized.get(\"schema_dict\")\n    if not schema_dict:\n        return\n    grammar = _schema_to_grammar(schema_dict)\n    if grammar:\n        # xllamacpp rejects configs containing both json_schema and grammar\n        generate_config.pop(\"json_schema\", None)\n        generate_config[\"grammar\"] = grammar\n    else:\n        generate_config.setdefault(\"json_schema\", schema_dict)\n\n\nclass _Done:\n    pass\n\n\nclass _Error:\n    def __init__(self, msg):\n        self.msg = msg\n\n\nclass XllamaCppModel(LLM, ChatModelMixin):\n    allow_batch = True\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        llamacpp_model_config: Optional[dict] = None,\n    ):\n        super().__init__(model_uid, model_family, model_path)  # type: ignore[call-arg]\n        self._llamacpp_model_config = self._sanitize_model_config(llamacpp_model_config)\n        self._llm = None\n        self._executor: Optional[concurrent.futures.ThreadPoolExecutor] = None\n\n    def _sanitize_model_config(self, llamacpp_model_config: Optional[dict]) -> dict:\n        if llamacpp_model_config is None:\n            llamacpp_model_config = {}\n\n        if self.model_family.context_length:\n            llamacpp_model_config.setdefault(\"n_ctx\", self.model_family.context_length)\n        llamacpp_model_config.setdefault(\"use_mmap\", False)\n        llamacpp_model_config.setdefault(\"use_mlock\", True)\n\n        if (\n            self.model_family.has_architecture(\"LlamaForCausalLM\")\n            and self.model_spec.model_size_in_billions == 70\n        ):\n            llamacpp_model_config[\"use_mlock\"] = False\n            llamacpp_model_config[\"n_gqa\"] = 8\n\n        if self._is_darwin_and_apple_silicon():\n            llamacpp_model_config.setdefault(\"n_gpu_layers\", -1)\n        elif self._is_linux():\n            llamacpp_model_config.setdefault(\"n_gpu_layers\", -1)\n        llamacpp_model_config.setdefault(\"reasoning_content\", False)\n\n        return llamacpp_model_config\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"xllamacpp\", \"xllamacpp\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls, llm_family: LLMFamilyV2, llm_spec: LLMSpecV1, quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"ggufv2\"]:\n            return False, \"llama.cpp engine only supports ggufv2 format\"\n        if (\n            \"chat\" not in llm_family.model_ability\n            and \"generate\" not in llm_family.model_ability\n        ):\n            return False, \"llama.cpp engine requires chat or generate ability\"\n        return True\n\n    def load(self):\n        try:\n            from xllamacpp import (\n                CommonParams,\n                Server,\n                __version__,\n                estimate_gpu_layers,\n                get_device_info,\n                ggml_backend_dev_type,\n            )\n\n            try:\n                if version.parse(__version__) < version.parse(\"0.2.0\"):\n                    raise RuntimeError(\n                        \"Please update xllamacpp to >= 0.2.0 by `pip install -U xllamacpp`\"\n                    )\n            except version.InvalidVersion:\n                pass  # If the version parse failed, we just skip the version check.\n        except ImportError:\n            error_message = \"Failed to import module 'xllamacpp'\"\n            installation_guide = [\"Please make sure 'xllamacpp' is installed. \"]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        reasoning_content = self._llamacpp_model_config.pop(\"reasoning_content\")\n        enable_thinking = self._llamacpp_model_config.pop(\"enable_thinking\", True)\n        self.prepare_parse_reasoning_content(\n            reasoning_content, enable_thinking=enable_thinking\n        )\n        self.prepare_parse_tool_calls()\n\n        if os.path.isfile(self.model_path):\n            # mostly passed from --model_path\n            model_path = self.model_path\n        else:\n            # handle legacy cache.\n            if (\n                self.model_spec.model_file_name_split_template\n                and self.quantization in self.model_spec.quantization_parts\n            ):\n                part = self.model_spec.quantization_parts[self.quantization]\n                model_path = os.path.join(\n                    self.model_path,\n                    self.model_spec.model_file_name_split_template.format(\n                        quantization=self.quantization, part=part[0]\n                    ),\n                )\n            else:\n                model_path = os.path.join(\n                    self.model_path,\n                    self.model_spec.model_file_name_template.format(\n                        quantization=self.quantization\n                    ),\n                )\n                legacy_model_file_path = os.path.join(self.model_path, \"model.bin\")\n                if os.path.exists(legacy_model_file_path):\n                    model_path = legacy_model_file_path\n\n        multimodal_projector = self._llamacpp_model_config.get(\n            \"multimodal_projector\", \"\"\n        )\n        mmproj = (\n            os.path.join(self.model_path, multimodal_projector)\n            if multimodal_projector\n            else \"\"\n        )\n\n        try:\n            params = CommonParams()\n            # Compatible with xllamacpp changes\n            try:\n                params.model = model_path\n            except Exception:\n                params.model.path = model_path\n            params.mmproj.path = mmproj\n            if self.model_family.chat_template:\n                params.chat_template = self.model_family.chat_template\n            params.use_jinja = True\n            # This is the default value, could be overwritten by _llamacpp_model_config\n            params.n_parallel = min(8, os.cpu_count() or 1)\n            for k, v in self._llamacpp_model_config.items():\n                try:\n                    if \".\" in k:\n                        parts = k.split(\".\")\n                        sub_param = params\n                        for p in parts[:-1]:\n                            sub_param = getattr(sub_param, p)\n                        setattr(sub_param, parts[-1], v)\n                    else:\n                        setattr(params, k, v)\n                except Exception as e:\n                    logger.error(\"Failed to set the param %s = %s, error: %s\", k, v, e)\n            n_threads = self._llamacpp_model_config.get(\"n_threads\", os.cpu_count())\n            params.cpuparams.n_threads = n_threads\n            params.cpuparams_batch.n_threads = n_threads\n            if params.n_gpu_layers == -1:\n                # Number of layers to offload to GPU (-ngl). If -1, all layers are offloaded.\n                # 0x7FFFFFFF is INT32 max, will be auto set to all layers\n                params.n_gpu_layers = 0x7FFFFFFF\n                try:\n                    device_info = get_device_info()\n                    gpus = [\n                        info\n                        for info in device_info\n                        if info[\"type\"]\n                        == ggml_backend_dev_type.GGML_BACKEND_DEVICE_TYPE_GPU\n                    ]\n                    if gpus:\n                        logger.info(\n                            \"Try to estimate num gpu layers, n_ctx: %s, n_batch: %s, n_parallel: %s, gpus:\\n%s\",\n                            params.n_ctx,\n                            params.n_batch,\n                            params.n_parallel,\n                            pprint.pformat(gpus),\n                        )\n                        estimate = estimate_gpu_layers(\n                            gpus=gpus,\n                            model_path=model_path,\n                            projectors=[mmproj] if mmproj else [],\n                            context_length=params.n_ctx,\n                            batch_size=params.n_batch,\n                            num_parallel=params.n_parallel,\n                            kv_cache_type=\"\",\n                        )\n                        logger.info(\"Estimate num gpu layers: %s\", estimate)\n                        if estimate.tensor_split:\n                            for i in range(len(estimate.tensor_split)):\n                                params.tensor_split[i] = estimate.tensor_split[i]\n                        else:\n                            params.n_gpu_layers = estimate.layers\n                except Exception as e:\n                    logger.exception(\n                        \"Estimate num gpu layers for llama.cpp backend failed: %s\", e\n                    )\n\n            self._llm = Server(params)\n            self._executor = concurrent.futures.ThreadPoolExecutor(\n                max_workers=max(10, n_threads)\n            )\n        except AssertionError:\n            raise RuntimeError(f\"Load model {self.model_family.model_name} failed\")\n\n    def generate(\n        self, prompt: str, generate_config: Optional[dict] = None\n    ) -> Union[Completion, Iterator[CompletionChunk]]:\n        generate_config = generate_config or {}\n        if not generate_config.get(\"max_tokens\") and XINFERENCE_MAX_TOKENS:\n            generate_config[\"max_tokens\"] = XINFERENCE_MAX_TOKENS\n        _apply_response_format(generate_config)\n        stream = generate_config.get(\"stream\", False)\n        q: queue.Queue = queue.Queue()\n\n        def _handle_completion():\n            data = generate_config\n            data.pop(\"stopping_criteria\", None)\n            data.pop(\"logits_processor\", None)\n            data.pop(\"suffix\", None)\n            data.pop(\"best_of\", None)\n            data.update(\n                {\n                    \"prompt\": prompt,\n                    \"stream\": stream,\n                    \"model\": self.model_uid,\n                }\n            )\n            try:\n\n                def _callback(res):\n                    if type(res) is list:\n                        for r in res:\n                            q.put(r)\n                    elif res.get(\"code\"):\n                        q.put(_Error(res))\n                    else:\n                        q.put(res)\n\n                self._llm.handle_completions(data, _callback)\n            except Exception as ex:\n                logger.exception(\"handle_completions failed: %s\", ex)\n                q.put(_Error(str(ex)))\n            q.put(_Done)\n\n        assert self._executor\n        self._executor.submit(_handle_completion)\n\n        if stream:\n\n            def _to_iterator():\n                while (r := q.get()) is not _Done:\n                    if type(r) is _Error:\n                        raise Exception(\"Got error in generate stream: %s\", r.msg)\n                    yield r\n\n            return _to_iterator()\n        else:\n            r = q.get()\n            if type(r) is _Error:\n                raise Exception(\"Got error in generate: %s\", r.msg)\n            return r\n\n    def chat(\n        self,\n        messages: List[dict],\n        generate_config: Optional[dict] = None,\n    ) -> Union[ChatCompletion, Iterator[ChatCompletionChunk]]:\n        generate_config = generate_config or {}\n        if not generate_config.get(\"max_tokens\") and XINFERENCE_MAX_TOKENS:\n            generate_config[\"max_tokens\"] = XINFERENCE_MAX_TOKENS\n        _apply_response_format(generate_config)\n        stream = generate_config.get(\"stream\", False)\n\n        chat_template_kwargs = (\n            self._get_chat_template_kwargs_from_generate_config(\n                generate_config, self.reasoning_parser\n            )\n            or {}\n        )\n        chat_context_var.set(chat_template_kwargs)\n\n        tools = generate_config.pop(\"tools\", []) if generate_config else None\n        q: queue.Queue = queue.Queue()\n\n        def _handle_chat_completion():\n            data = generate_config\n            data.pop(\"stopping_criteria\", None)\n            data.pop(\"logits_processor\", None)\n            data.pop(\"suffix\", None)\n            data.pop(\"best_of\", None)\n            data.update(\n                {\n                    \"messages\": messages,\n                    \"stream\": stream,\n                    \"tools\": tools,\n                    \"model\": self.model_uid,\n                }\n            )\n            if chat_template_kwargs:\n                data[\"chat_template_kwargs\"] = chat_template_kwargs\n\n            try:\n\n                def _callback(res):\n                    if type(res) is list:\n                        for r in res:\n                            q.put(r)\n                    elif res.get(\"code\"):\n                        q.put(_Error(res))\n                    else:\n                        q.put(res)\n\n                self._llm.handle_chat_completions(data, _callback)\n            except Exception as ex:\n                logger.exception(\"handle_chat_completions failed: %s\", ex)\n                q.put(_Error(str(ex)))\n            q.put(_Done)\n\n        assert self._executor\n        self._executor.submit(_handle_chat_completion)\n\n        if stream:\n\n            def _to_iterator():\n                while (r := q.get()) is not _Done:\n                    if type(r) is _Error:\n                        raise Exception(f\"Got error in chat stream: {r.msg}\")\n                    yield r\n\n            return self._to_chat_completion_chunks(\n                _to_iterator(), self.reasoning_parser\n            )\n        else:\n            r = q.get()\n            if type(r) is _Error:\n                raise Exception(f\"Got error in chat: {r.msg}\")\n            return self._to_chat_completion(r, self.reasoning_parser)\n"
  },
  {
    "path": "xinference/model/llm/llama_cpp/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/llama_cpp/tests/test_gguf.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport base64\nfrom pathlib import Path\n\nimport pytest\n\nfrom .....client import Client\n\n\ndef test_gguf(setup):\n    endpoint, _ = setup\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"tiny-llama\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=1,\n        model_format=\"ggufv2\",\n        quantization=\"q2_K\",\n    )\n    assert len(client.list_models()) == 1\n    model = client.get_model(model_uid)\n    completion = model.generate(\"AI is going to\", generate_config={\"max_tokens\": 5})\n    assert \"id\" in completion\n    assert \"text\" in completion[\"choices\"][0]\n    assert len(completion[\"choices\"][0][\"text\"]) > 0\n\n\n@pytest.fixture(scope=\"session\")\ndef surprise_image_base64():\n    img_path = Path(__file__).parent / \"assets\" / \"surprise.png\"\n\n    with open(img_path, \"rb\") as f:\n        img_base64 = base64.b64encode(f.read()).decode(\"utf-8\")\n\n    return \"data:image/png;base64,\" + img_base64\n\n\ndef test_gguf_multimodal(setup, surprise_image_base64):\n    endpoint, _ = setup\n    client = Client(endpoint)\n\n    r = client.query_engine_by_model_name(\"gemma-3-it\")\n    assert (\n        \"mmproj-google_gemma-3-4b-it-f16.gguf\"\n        in r[\"llama.cpp\"][0][\"multimodal_projectors\"]\n    )\n\n    model_uid = client.launch_model(\n        model_name=\"gemma-3-it\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=4,\n        model_format=\"ggufv2\",\n        quantization=\"IQ4_XS\",\n        multimodal_projector=\"mmproj-google_gemma-3-4b-it-f16.gguf\",\n        n_ctx=512,\n        n_batch=512,\n        n_parallel=1,\n    )\n    assert len(client.list_models()) == 1\n    model = client.get_model(model_uid)\n\n    completion = model.chat(\n        [\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"What is this:\\n\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": surprise_image_base64,\n                        },\n                    },\n                ],\n            }\n        ],\n        generate_config={\"max_tokens\": 128},\n    )\n    content = completion[\"choices\"][0][\"message\"][\"content\"]\n    assert \"id\" in completion\n    assert isinstance(content, str)\n    assert len(content) > 0\n"
  },
  {
    "path": "xinference/model/llm/llama_cpp/tests/test_structured.py",
    "content": "import importlib\nimport importlib.util\nimport json\nimport sys\nfrom enum import Enum\nfrom types import SimpleNamespace\nfrom typing import Any, Dict\n\nimport openai\nimport pytest\nfrom pydantic import BaseModel\n\nfrom xinference.client import Client\n\nfrom ..core import _apply_response_format\n\n\nclass CarType(str, Enum):\n    sedan = \"sedan\"\n    suv = \"SuV\"\n    truck = \"Truck\"\n    coupe = \"Coupe\"\n\n\nclass CarDescription(BaseModel):\n    brand: str\n    model: str\n    car_type: CarType\n\n\ndef _load_json_from_message(message: Any) -> Dict[str, Any]:\n    def _strip_think(text: str) -> str:\n        stripped = text.lstrip()\n        if stripped.startswith(\"<think>\"):\n            if \"</think>\" in stripped:\n                stripped = stripped.split(\"</think>\", 1)[1]\n            else:\n                stripped = stripped.split(\"<think>\", 1)[1]\n        return stripped.lstrip()\n\n    raw_content = message.content\n    if isinstance(raw_content, str):\n        return json.loads(_strip_think(raw_content))\n\n    if isinstance(raw_content, list):\n        text_blocks = []\n        for block in raw_content:\n            if isinstance(block, dict):\n                if block.get(\"type\") == \"text\" and \"text\" in block:\n                    text_blocks.append(_strip_think(block[\"text\"]))\n                continue\n\n            block_type = getattr(block, \"type\", None)\n            block_text = getattr(block, \"text\", None)\n            if block_type == \"text\" and block_text:\n                text_blocks.append(_strip_think(block_text))\n\n        if text_blocks:\n            return json.loads(\"\".join(text_blocks))\n\n    pytest.fail(f\"Unexpected message content format: {raw_content!r}\")\n    raise AssertionError(\"Unreachable\")\n\n\ndef test_apply_response_format_sets_grammar(monkeypatch):\n    fake_xllamacpp = SimpleNamespace(json_schema_to_grammar=lambda schema: \"GRAMMAR\")\n    monkeypatch.setitem(sys.modules, \"xllamacpp\", fake_xllamacpp)\n\n    cfg = {\n        \"response_format\": {\n            \"type\": \"json_schema\",\n            \"json_schema\": {\n                \"schema\": {\n                    \"type\": \"object\",\n                    \"properties\": {\"a\": {\"type\": \"string\"}},\n                    \"required\": [\"a\"],\n                }\n            },\n        }\n    }\n\n    _apply_response_format(cfg)\n\n    assert \"response_format\" not in cfg\n    assert \"json_schema\" not in cfg\n    assert cfg[\"grammar\"] == \"GRAMMAR\"\n\n\ndef test_apply_response_format_handles_conversion_failure(monkeypatch):\n    def _raise(_):\n        raise ValueError(\"bad schema\")\n\n    fake_xllamacpp = SimpleNamespace(json_schema_to_grammar=_raise)\n    monkeypatch.setitem(sys.modules, \"xllamacpp\", fake_xllamacpp)\n\n    cfg = {\n        \"response_format\": {\n            \"type\": \"json_schema\",\n            \"json_schema\": {\n                \"schema\": {\n                    \"type\": \"object\",\n                    \"properties\": {\"b\": {\"type\": \"string\"}},\n                    \"required\": [\"b\"],\n                }\n            },\n        }\n    }\n\n    _apply_response_format(cfg)\n\n    assert \"response_format\" not in cfg\n    assert cfg[\"json_schema\"][\"required\"] == [\"b\"]\n    assert \"grammar\" not in cfg\n\n\ndef test_apply_response_format_ignores_non_schema(monkeypatch):\n    cfg = {\"response_format\": {\"type\": \"json_object\"}}\n    _apply_response_format(cfg)\n    assert \"grammar\" not in cfg\n    assert \"json_schema\" not in cfg\n\n\ndef test_apply_response_format_uses_real_xllamacpp_if_available():\n    if importlib.util.find_spec(\"xllamacpp\") is None:\n        pytest.skip(\"xllamacpp not installed\")\n    xllamacpp = importlib.import_module(\"xllamacpp\")\n    if not hasattr(xllamacpp, \"json_schema_to_grammar\"):\n        pytest.skip(\"xllamacpp does not expose json_schema_to_grammar\")\n\n    cfg = {\n        \"response_format\": {\n            \"type\": \"json_schema\",\n            \"json_schema\": {\n                \"schema\": {\n                    \"type\": \"object\",\n                    \"properties\": {\"c\": {\"type\": \"integer\"}},\n                    \"required\": [\"c\"],\n                }\n            },\n        }\n    }\n\n    _apply_response_format(cfg)\n\n    assert \"response_format\" not in cfg\n    # Real xllamacpp should prefer grammar to avoid passing both\n    assert \"json_schema\" not in cfg\n    assert \"grammar\" in cfg and cfg[\"grammar\"]\n\n\ndef test_llamacpp_qwen3_json_schema(setup):\n    endpoint, _ = setup\n    client = Client(endpoint)\n    model_uid = client.launch_model(\n        model_name=\"qwen3\",\n        model_engine=\"llama.cpp\",\n        model_size_in_billions=\"0_6\",\n        model_format=\"ggufv2\",\n        quantization=\"Q4_K_M\",\n        n_gpu=None,\n    )\n\n    try:\n        api_client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        completion = api_client.chat.completions.create(\n            model=model_uid,\n            messages=[\n                {\n                    \"role\": \"user\",\n                    \"content\": (\n                        \"Generate a JSON containing the brand, model, and car_type of\"\n                        \" an iconic 90s car.\"\n                    ),\n                }\n            ],\n            temperature=0,\n            max_tokens=128,\n            response_format={\n                \"type\": \"json_schema\",\n                \"json_schema\": {\n                    \"name\": \"car-description\",\n                    \"schema\": CarDescription.model_json_schema(),\n                },\n            },\n        )\n\n        parsed = _load_json_from_message(completion.choices[0].message)\n        car_description = CarDescription.model_validate(parsed)\n        assert car_description.brand\n        assert car_description.model\n    finally:\n        if model_uid is not None:\n            client.terminate_model(model_uid)\n"
  },
  {
    "path": "xinference/model/llm/llm_family.json",
    "content": "[\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"codestral-v0.1\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Codestrall-22B-v0.1 is trained on a diverse dataset of 80+ programming languages, including the most popular ones, such as Python, Java, C, C++, JavaScript, and Bash\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Codestral-22B-v0.1\",\n            \"model_revision\": \"8f5fe23af91885222a1563283c87416745a5e212\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"bartowski/Codestral-22B-v0.1-GGUF\",\n            \"model_file_name_template\": \"Codestral-22B-v0.1-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Codestral-22B-v0.1-4bit\",\n            \"model_revision\": \"544626b38eb1c9524f0fa570ec7b29550c26b78d\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Codestral-22B-v0.1-8bit\",\n            \"model_revision\": \"0399a53970663950d57010e61a2796af524a1588\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418470,\n    \"featured\": false,\n    \"architectures\": [\n      \"MistralForCausalLM\"\n    ],\n    \"model_type\": \"mistral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"gorilla-openfunctions-v2\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"OpenFunctions is designed to extend Large Language Model (LLM) Chat Completion feature to formulate executable APIs call given natural language instructions and API context.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"gorilla-llm/gorilla-openfunctions-v2\",\n            \"model_revision\": \"0f91d705e64b77fb55e35a7eab5d03bf965c9b5c\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\"\n            ],\n            \"model_id\": \"gorilla-llm//gorilla-openfunctions-v2-GGUF\",\n            \"model_file_name_template\": \"gorilla-openfunctions-v2.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}\\n{% set add_generation_prompt = false %}\\n{% endif %}\\n{%- set ns = namespace(found=false) -%}\\n{%- for message in messages -%}\\n    {%- if message['role'] == 'system' -%}\\n        {%- set ns.found = true -%}\\n    {%- endif -%}\\n{%- endfor -%}\\n{{'<｜begin▁of▁sentence｜>'}}{%- if not ns.found -%}\\n{{'You are an AI programming assistant, utilizing the Gorilla LLM model, developed by Gorilla LLM, and you only answer questions related to computer science. For politically sensitive questions, security and privacy issues, and other non-computer science questions, you will refuse to answer\\n'}}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if message['role'] == 'system' %}\\n{{ message['content'] }}\\n    {%- else %}\\n        {%- if message['role'] == 'user' %}\\n{{'### Instruction:\\n' + message['content'] + '\\n'}}\\n        {%- else %}\\n{{'### Response:\\n' + message['content'] + '\\n<|EOT|>\\n'}}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{% if add_generation_prompt %}\\n{{'### Response:'}}\\n{% endif %}\",\n    \"stop_token_ids\": [\n      100015,\n      100001\n    ],\n    \"stop\": [\n      \"<|EOT|>\",\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"updated_at\": 1769418471,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 1024,\n    \"model_name\": \"gpt-2\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"GPT-2 is a Transformer-based LLM that is trained on WebTest, a 40 GB dataset of Reddit posts with 3+ upvotes.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openai-community/gpt2\",\n            \"model_revision\": \"607a30d783dfa663caf39e06633721c8d4cfcd7e\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418472,\n    \"featured\": false,\n    \"architectures\": [\n      \"GPT2LMHeadModel\"\n    ],\n    \"model_type\": \"gpt2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"llama-2\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Llama-2 is the second generation of Llama, open-source and trained on a larger amount of data.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-7B-GGUF\",\n            \"model_file_name_template\": \"llama-2-7b.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-7B-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-7B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-13B-GGUF\",\n            \"model_file_name_template\": \"llama-2-13b.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\"\n            ],\n            \"quantization_parts\": {\n              \"Q6_K\": [\n                \"split-a\",\n                \"split-b\"\n              ],\n              \"Q8_0\": [\n                \"split-a\",\n                \"split-b\"\n              ]\n            },\n            \"model_id\": \"TheBloke/Llama-2-70B-GGUF\",\n            \"model_file_name_template\": \"llama-2-70b.{quantization}.gguf\",\n            \"model_file_name_split_template\": \"llama-2-70b.{quantization}.gguf-{part}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Llama-2-7b-hf\",\n            \"model_revision\": \"6fdf2e60f86ff2481f2241aaee459f85b5b0bbb9\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Llama-2-13b-hf\",\n            \"model_revision\": \"db6b8eb1feabb38985fdf785a89895959e944936\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-13B-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-13B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Llama-2-70b-hf\",\n            \"model_revision\": \"cc8aa03a000ff08b4d5c5b39673321a2a396c396\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-70B-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-70B-AWQ\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418473,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"mistral-instruct-v0.3\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) is an improved instruct fine-tuned version of Mistral-7B-Instruct-v0.1.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Mistral-7B-Instruct-v0.3\",\n            \"model_revision\": \"83e9aa141f2e28c82232fea5325f54edf17c43de\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"neuralmagic/Mistral-7B-Instruct-v0.3-GPTQ-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"solidrust/Mistral-7B-Instruct-v0.3-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"MaziyarPanahi/Mistral-7B-Instruct-v0.3-GGUF\",\n            \"model_file_name_template\": \"Mistral-7B-Instruct-v0.3.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if messages[0][\\\"role\\\"] == \\\"system\\\" %}\\n    {%- set system_message = messages[0][\\\"content\\\"] %}\\n    {%- set loop_messages = messages[1:] %}\\n{%- else %}\\n    {%- set loop_messages = messages %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n    {%- set tools = none %}\\n{%- endif %}\\n{%- set user_messages = loop_messages | selectattr(\\\"role\\\", \\\"equalto\\\", \\\"user\\\") | list %}\\n\\n{#- This block checks for alternating user/assistant messages, skipping tool calling messages #}\\n{%- set ns = namespace() %}\\n{%- set ns.index = 0 %}\\n{%- for message in loop_messages %}\\n    {%- if not (message.role == \\\"tool\\\" or message.role == \\\"tool_results\\\" or (message.tool_calls is defined and message.tool_calls is not none)) %}\\n        {%- if (message[\\\"role\\\"] == \\\"user\\\") != (ns.index % 2 == 0) %}\\n            {{- raise_exception(\\\"After the optional system message, conversation roles must alternate user/assistant/user/assistant/...\\\") }}\\n        {%- endif %}\\n        {%- set ns.index = ns.index + 1 %}\\n    {%- endif %}\\n{%- endfor %}\\n\\n{{- '<s>' }}\\n{%- for message in loop_messages %}\\n    {%- if message[\\\"role\\\"] == \\\"user\\\" %}\\n        {%- if tools is not none and (message == user_messages[-1]) %}\\n            {{- \\\"[AVAILABLE_TOOLS] [\\\" }}\\n            {%- for tool in tools %}\\n                {%- set tool = tool.function %}\\n                {{- '{\\\"type\\\": \\\"function\\\", \\\"function\\\": {' }}\\n                {%- for key, val in tool.items() if key != \\\"return\\\" %}\\n                    {%- if val is string %}\\n                        {{- '\\\"' + key + '\\\": \\\"' + val + '\\\"' }}\\n                    {%- else %}\\n                        {{- '\\\"' + key + '\\\": ' + val|tojson }}\\n                    {%- endif %}\\n                    {%- if not loop.last %}\\n                        {{- \\\", \\\" }}\\n                    {%- endif %}\\n                {%- endfor %}\\n                {{- \\\"}}\\\" }}\\n                {%- if not loop.last %}\\n                    {{- \\\", \\\" }}\\n                {%- else %}\\n                    {{- \\\"]\\\" }}\\n                {%- endif %}\\n            {%- endfor %}\\n            {{- \\\"[/AVAILABLE_TOOLS]\\\" }}\\n            {%- endif %}\\n        {%- if loop.last and system_message is defined %}\\n            {{- \\\"[INST] \\\" + system_message + \\\"\\n\\n\\\" + message[\\\"content\\\"] + \\\"[/INST]\\\" }}\\n        {%- else %}\\n            {{- \\\"[INST] \\\" + message[\\\"content\\\"] + \\\"[/INST]\\\" }}\\n        {%- endif %}\\n    {%- elif message.tool_calls is defined and message.tool_calls is not none %}\\n        {{- \\\"[TOOL_CALLS] [\\\" }}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- set out = tool_call.function|tojson %}\\n            {{- out[:-1] }}\\n            {%- if not tool_call.id is defined or tool_call.id|length != 9 %}\\n                {{- raise_exception(\\\"Tool call IDs should be alphanumeric strings with length 9!\\\") }}\\n            {%- endif %}\\n            {{- ', \\\"id\\\": \\\"' + tool_call.id + '\\\"}' }}\\n            {%- if not loop.last %}\\n                {{- \\\", \\\" }}\\n            {%- else %}\\n                {{- \\\"]\\\" + '</s>' }}\\n            {%- endif %}\\n        {%- endfor %}\\n    {%- elif message[\\\"role\\\"] == \\\"assistant\\\" %}\\n        {{- \\\" \\\" + message[\\\"content\\\"]|trim + '</s>'}}\\n    {%- elif message[\\\"role\\\"] == \\\"tool_results\\\" or message[\\\"role\\\"] == \\\"tool\\\" %}\\n        {%- if message.content is defined and message.content.content is defined %}\\n            {%- set content = message.content.content %}\\n        {%- else %}\\n            {%- set content = message.content %}\\n        {%- endif %}\\n        {{- '[TOOL_RESULTS] {\\\"content\\\": ' + content|string + \\\", \\\" }}\\n        {%- if not message.tool_call_id is defined or message.tool_call_id|length != 9 %}\\n            {{- raise_exception(\\\"Tool call IDs should be alphanumeric strings with length 9!\\\") }}\\n        {%- endif %}\\n        {{- '\\\"call_id\\\": \\\"' + message.tool_call_id + '\\\"}[/TOOL_RESULTS]' }}\\n    {%- else %}\\n        {{- raise_exception(\\\"Only user and assistant roles are supported, with the exception of an initial optional system message!\\\") }}\\n    {%- endif %}\\n{%- endfor %}\\n\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418474,\n    \"featured\": false,\n    \"architectures\": [\n      \"MistralForCausalLM\"\n    ],\n    \"model_type\": \"mistral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 65536,\n    \"model_name\": \"mixtral-8x22B-instruct-v0.1\",\n    \"model_lang\": [\n      \"en\",\n      \"fr\",\n      \"it\",\n      \"de\",\n      \"es\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The Mixtral-8x22B-Instruct-v0.1 Large Language Model (LLM) is an instruct fine-tuned version of the Mixtral-8x22B-v0.1, specializing in chatting.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"141\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Mixtral-8x22B-Instruct-v0.1\",\n            \"model_revision\": \"ebb919ac9e9f7f9a900644621bae7963bc593f4f\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"141\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"MaziyarPanahi/Mixtral-8x22B-Instruct-v0.1-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"141\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"jarrelscy/Mixtral-8x22B-Instruct-v0.1-GPTQ-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"141\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6\",\n              \"Q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"MaziyarPanahi/Mixtral-8x22B-Instruct-v0.1-GGUF\",\n            \"model_file_name_template\": \"Mixtral-8x22B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Mixtral-8x22B-Instruct-v0.1.{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"Q2_K\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_L\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q6\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"fp16\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ]\n            }\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if messages[0][\\\"role\\\"] == \\\"system\\\" %}\\n    {%- set system_message = messages[0][\\\"content\\\"] %}\\n    {%- set loop_messages = messages[1:] %}\\n{%- else %}\\n    {%- set loop_messages = messages %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n    {%- set tools = none %}\\n{%- endif %}\\n{%- set user_messages = loop_messages | selectattr(\\\"role\\\", \\\"equalto\\\", \\\"user\\\") | list %}\\n\\n{#- This block checks for alternating user/assistant messages, skipping tool calling messages #}\\n{%- set ns = namespace() %}\\n{%- set ns.index = 0 %}\\n{%- for message in loop_messages %}\\n    {%- if not (message.role == \\\"tool\\\" or message.role == \\\"tool_results\\\" or (message.tool_calls is defined and message.tool_calls is not none)) %}\\n        {%- if (message[\\\"role\\\"] == \\\"user\\\") != (ns.index % 2 == 0) %}\\n            {{- raise_exception(\\\"After the optional system message, conversation roles must alternate user/assistant/user/assistant/...\\\") }}\\n        {%- endif %}\\n        {%- set ns.index = ns.index + 1 %}\\n    {%- endif %}\\n{%- endfor %}\\n\\n{{- '<s>' }}\\n{%- for message in loop_messages %}\\n    {%- if message[\\\"role\\\"] == \\\"user\\\" %}\\n        {%- if tools is not none and (message == user_messages[-1]) %}\\n            {{- \\\"[AVAILABLE_TOOLS] [\\\" }}\\n            {%- for tool in tools %}\\n                {%- set tool = tool.function %}\\n                {{- '{\\\"type\\\": \\\"function\\\", \\\"function\\\": {' }}\\n                {%- for key, val in tool.items() if key != \\\"return\\\" %}\\n                    {%- if val is string %}\\n                        {{- '\\\"' + key + '\\\": \\\"' + val + '\\\"' }}\\n                    {%- else %}\\n                        {{- '\\\"' + key + '\\\": ' + val|tojson }}\\n                    {%- endif %}\\n                    {%- if not loop.last %}\\n                        {{- \\\", \\\" }}\\n                    {%- endif %}\\n                {%- endfor %}\\n                {{- \\\"}}\\\" }}\\n                {%- if not loop.last %}\\n                    {{- \\\", \\\" }}\\n                {%- else %}\\n                    {{- \\\"]\\\" }}\\n                {%- endif %}\\n            {%- endfor %}\\n            {{- \\\"[/AVAILABLE_TOOLS]\\\" }}\\n            {%- endif %}\\n        {%- if loop.last and system_message is defined %}\\n            {{- \\\"[INST] \\\" + system_message + \\\"\\n\\n\\\" + message[\\\"content\\\"] + \\\"[/INST]\\\" }}\\n        {%- else %}\\n            {{- \\\"[INST] \\\" + message[\\\"content\\\"] + \\\"[/INST]\\\" }}\\n        {%- endif %}\\n    {%- elif message.tool_calls is defined and message.tool_calls is not none %}\\n        {{- \\\"[TOOL_CALLS] [\\\" }}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- set out = tool_call.function|tojson %}\\n            {{- out[:-1] }}\\n            {%- if not tool_call.id is defined or tool_call.id|length != 9 %}\\n                {{- raise_exception(\\\"Tool call IDs should be alphanumeric strings with length 9!\\\") }}\\n            {%- endif %}\\n            {{- ', \\\"id\\\": \\\"' + tool_call.id + '\\\"}' }}\\n            {%- if not loop.last %}\\n                {{- \\\", \\\" }}\\n            {%- else %}\\n                {{- \\\"]\\\" + '</s>' }}\\n            {%- endif %}\\n        {%- endfor %}\\n    {%- elif message[\\\"role\\\"] == \\\"assistant\\\" %}\\n        {{- \\\" \\\" + message[\\\"content\\\"]|trim + '</s>'}}\\n    {%- elif message[\\\"role\\\"] == \\\"tool_results\\\" or message[\\\"role\\\"] == \\\"tool\\\" %}\\n        {%- if message.content is defined and message.content.content is defined %}\\n            {%- set content = message.content.content %}\\n        {%- else %}\\n            {%- set content = message.content %}\\n        {%- endif %}\\n        {{- '[TOOL_RESULTS] {\\\"content\\\": ' + content|string + \\\", \\\" }}\\n        {%- if not message.tool_call_id is defined or message.tool_call_id|length != 9 %}\\n            {{- raise_exception(\\\"Tool call IDs should be alphanumeric strings with length 9!\\\") }}\\n        {%- endif %}\\n        {{- '\\\"call_id\\\": \\\"' + message.tool_call_id + '\\\"}[/TOOL_RESULTS]' }}\\n    {%- else %}\\n        {{- raise_exception(\\\"Only user and assistant roles are supported, with the exception of an initial optional system message!\\\") }}\\n    {%- endif %}\\n{%- endfor %}\\n\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418475,\n    \"featured\": false,\n    \"architectures\": [\n      \"MixtralForCausalLM\"\n    ],\n    \"model_type\": \"mixtral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"openhermes-2.5\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Openhermes 2.5 is a fine-tuned version of Mistral-7B-v0.1 on primarily GPT-4 generated data.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"teknium/OpenHermes-2.5-Mistral-7B\",\n            \"model_revision\": \"91ed666be78da7556f3d79abbb26fff0ee26cb54\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/OpenHermes-2.5-Mistral-7B-GGUF\",\n            \"model_file_name_template\": \"openhermes-2.5-mistral-7b.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      32000\n    ],\n    \"stop\": [\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418476,\n    \"featured\": false,\n    \"architectures\": [\n      \"MistralForCausalLM\"\n    ],\n    \"model_type\": \"mistral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 2048,\n    \"model_name\": \"opt\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Opt is an open-source, decoder-only, Transformer based LLM that was designed to replicate GPT-3.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 1,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"facebook/opt-125m\",\n            \"model_revision\": \"3d2b5f275bdf882b8775f902e1bfdb790e2cfc32\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418477,\n    \"featured\": false,\n    \"architectures\": [\n      \"OPTForCausalLM\"\n    ],\n    \"model_type\": \"opt\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 2048,\n    \"model_name\": \"phi-2\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Phi-2 is a 2.7B Transformer based LLM used for research on model safety, trained with data similar to Phi-1.5 but augmented with synthetic texts and curated websites.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/phi-2-GGUF\",\n            \"model_file_name_template\": \"phi-2.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"microsoft/phi-2\",\n            \"model_revision\": \"d3186761bf5c4409f7679359284066c25ab668ee\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418478,\n    \"featured\": false,\n    \"architectures\": [\n      \"PhiForCausalLM\"\n    ],\n    \"model_type\": \"phi\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"seallm_v2\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\",\n      \"vi\",\n      \"id\",\n      \"th\",\n      \"ms\",\n      \"km\",\n      \"lo\",\n      \"my\",\n      \"tl\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"We introduce SeaLLM-7B-v2, the state-of-the-art multilingual LLM for Southeast Asian (SEA) languages\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"SeaLLMs/SeaLLM-7B-v2\",\n            \"model_revision\": \"f1bd48e0d75365c24a3c5ad006b2d0a0c9dca30f\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q4_0\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"SeaLLMs/SeaLLM-7B-v2-gguf\",\n            \"model_file_name_template\": \"SeaLLM-7B-v2.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418479,\n    \"featured\": false,\n    \"architectures\": [\n      \"MistralForCausalLM\"\n    ],\n    \"model_type\": \"mistral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"seallm_v2.5\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\",\n      \"vi\",\n      \"id\",\n      \"th\",\n      \"ms\",\n      \"km\",\n      \"lo\",\n      \"my\",\n      \"tl\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"We introduce SeaLLM-7B-v2.5, the state-of-the-art multilingual LLM for Southeast Asian (SEA) languages\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"SeaLLMs/SeaLLM-7B-v2.5\",\n            \"model_revision\": \"c54a8eb8e2d58c5a680bfbbe3a7ae71753bb644b\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q4_K_M\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"SeaLLMs/SeaLLM-7B-v2.5-GGUF\",\n            \"model_file_name_template\": \"SeaLLM-7B-v2.5.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418480,\n    \"featured\": false,\n    \"architectures\": [\n      \"GemmaForCausalLM\"\n    ],\n    \"model_type\": \"gemma\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"DianJin-R1\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"Tongyi DianJin is a financial intelligence solution platform built by Alibaba Cloud, dedicated to providing financial business developers with a convenient artificial intelligence application development environment.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"DianJin/DianJin-R1-7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"DianJin/DianJin-R1-7B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"DianJin/DianJin-R1-32B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"DianJin/DianJin-R1-32B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"IQ4_XS\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"f16\"\n            ],\n            \"model_id\": \"mradermacher/DianJin-R1-7B-GGUF\",\n            \"model_file_name_template\": \"DianJin-R1-7B.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"i1-IQ1_S\",\n              \"i1-IQ1_M\",\n              \"i1-IQ2_XXS\",\n              \"i1-IQ2_XS\",\n              \"i1-IQ2_S\",\n              \"i1-IQ2_M\",\n              \"i1-Q2_K_S\",\n              \"i1-Q2_K\",\n              \"i1-IQ3_XXS\",\n              \"i1-IQ3_XS\",\n              \"i1-Q3_K_S\",\n              \"i1-IQ3_S\",\n              \"i1-IQ3_M\",\n              \"i1-Q3_K_M\",\n              \"i1-Q3_K_L\",\n              \"i1-IQ4_XS\",\n              \"i1-IQ4_NL\",\n              \"i1-Q4_0\",\n              \"i1-Q4_K_S\",\n              \"i1-Q4_K_M\",\n              \"i1-Q4_1\",\n              \"i1-Q5_K_S\",\n              \"i1-Q5_K_M\",\n              \"i1-Q6_K\"\n            ],\n            \"model_id\": \"mradermacher/DianJin-R1-7B-i1-GGUF\",\n            \"model_file_name_template\": \"DianJin-R1-7B.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"IQ4_XS\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"mradermacher/DianJin-R1-32B-GGUF\",\n            \"model_file_name_template\": \"DianJin-R1-32B.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"i1-IQ1_S\",\n              \"i1-IQ1_M\",\n              \"i1-IQ2_XXS\",\n              \"i1-IQ2_XS\",\n              \"i1-IQ2_S\",\n              \"i1-IQ2_M\",\n              \"i1-Q2_K_S\",\n              \"i1-Q2_K\",\n              \"i1-IQ3_XXS\",\n              \"i1-IQ3_XS\",\n              \"i1-Q3_K_S\",\n              \"i1-IQ3_S\",\n              \"i1-IQ3_M\",\n              \"i1-Q3_K_M\",\n              \"i1-Q3_K_L\",\n              \"i1-IQ4_XS\",\n              \"i1-Q4_0\",\n              \"i1-Q4_K_S\",\n              \"i1-Q4_K_M\",\n              \"i1-Q4_1\",\n              \"i1-Q5_K_S\",\n              \"i1-Q5_K_M\",\n              \"i1-Q6_K\"\n            ],\n            \"model_id\": \"mradermacher/DianJin-R1-32B-i1-GGUF\",\n            \"model_file_name_template\": \"DianJin-R1-32B.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418481,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"HuatuoGPT-o1-LLaMA-3.1\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"HuatuoGPT-o1 is a medical LLM designed for advanced medical reasoning. It generates a complex thought process, reflecting and refining its reasoning, before providing a final response.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"FreedomIntelligence/HuatuoGPT-o1-8B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"FreedomIntelligence/HuatuoGPT-o1-8B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"FreedomIntelligence/HuatuoGPT-o1-70B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"FreedomIntelligence/HuatuoGPT-o1-70B\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{{- bos_token }}\\n{%- if custom_tools is defined %}\\n    {%- set tools = custom_tools %}\\n{%- endif %}\\n{%- if not tools_in_user_message is defined %}\\n    {%- set tools_in_user_message = true %}\\n{%- endif %}\\n{%- if not date_string is defined %}\\n    {%- set date_string = \\\"26 Jul 2024\\\" %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n    {%- set tools = none %}\\n{%- endif %}\\n\\n{#- This block extracts the system message, so we can slot it into the right place. #}\\n{%- if messages[0]['role'] == 'system' %}\\n    {%- set system_message = messages[0]['content']|trim %}\\n    {%- set messages = messages[1:] %}\\n{%- else %}\\n    {%- set system_message = \\\"\\\" %}\\n{%- endif %}\\n\\n{#- System message + builtin tools #}\\n{{- \\\"<|start_header_id|>system<|end_header_id|>\\\\n\\\\n\\\" }}\\n{%- if builtin_tools is defined or tools is not none %}\\n    {{- \\\"Environment: ipython\\\\n\\\" }}\\n{%- endif %}\\n{%- if builtin_tools is defined %}\\n    {{- \\\"Tools: \\\" + builtin_tools | reject('equalto', 'code_interpreter') | join(\\\", \\\") + \\\"\\\\n\\\\n\\\"}}\\n{%- endif %}\\n{{- \\\"Cutting Knowledge Date: December 2023\\\\n\\\" }}\\n{{- \\\"Today Date: \\\" + date_string + \\\"\\\\n\\\\n\\\" }}\\n{%- if tools is not none and not tools_in_user_message %}\\n    {{- \\\"You have access to the following functions. To call a function, please respond with JSON for a function call.\\\" }}\\n    {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n    {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n    {%- for t in tools %}\\n        {{- t | tojson(indent=4) }}\\n        {{- \\\"\\\\n\\\\n\\\" }}\\n    {%- endfor %}\\n{%- endif %}\\n{{- system_message }}\\n{{- \\\"<|eot_id|>\\\" }}\\n\\n{#- Custom tools are passed in a user message with some extra guidance #}\\n{%- if tools_in_user_message and not tools is none %}\\n    {#- Extract the first user message so we can plug it in here #}\\n    {%- if messages | length != 0 %}\\n        {%- set first_user_message = messages[0]['content']|trim %}\\n        {%- set messages = messages[1:] %}\\n    {%- else %}\\n        {{- raise_exception(\\\"Cannot put tools in the first user message when there's no first user message!\\\") }}\\n{%- endif %}\\n    {{- '<|start_header_id|>user<|end_header_id|>\\\\n\\\\n' -}}\\n    {{- \\\"Given the following functions, please respond with a JSON for a function call \\\" }}\\n    {{- \\\"with its proper arguments that best answers the given prompt.\\\\n\\\\n\\\" }}\\n    {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n    {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n    {%- for t in tools %}\\n        {{- t | tojson(indent=4) }}\\n        {{- \\\"\\\\n\\\\n\\\" }}\\n    {%- endfor %}\\n    {{- first_user_message + \\\"<|eot_id|>\\\"}}\\n{%- endif %}\\n\\n{%- for message in messages %}\\n    {%- if not (message.role == 'ipython' or message.role == 'tool' or 'tool_calls' in message) %}\\n        {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\\\n\\\\n'+ message['content'] | trim + '<|eot_id|>' }}\\n    {%- elif 'tool_calls' in message %}\\n        {%- if not message.tool_calls|length == 1 %}\\n            {{- raise_exception(\\\"This model only supports single tool-calls at once!\\\") }}\\n        {%- endif %}\\n        {%- set tool_call = message.tool_calls[0].function %}\\n        {%- if builtin_tools is defined and tool_call.name in builtin_tools %}\\n            {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n            {{- \\\"<|python_tag|>\\\" + tool_call.name + \\\".call(\\\" }}\\n            {%- for arg_name, arg_val in tool_call.arguments | items %}\\n                {{- arg_name + '=\\\"' + arg_val + '\\\"' }}\\n                {%- if not loop.last %}\\n                    {{- \\\", \\\" }}\\n                {%- endif %}\\n                {%- endfor %}\\n            {{- \\\")\\\" }}\\n        {%- else  %}\\n            {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n            {{- '{\\\"name\\\": \\\"' + tool_call.name + '\\\", ' }}\\n            {{- '\\\"parameters\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- \\\"}\\\" }}\\n        {%- endif %}\\n        {%- if builtin_tools is defined %}\\n            {#- This means we're in ipython mode #}\\n            {{- \\\"<|eom_id|>\\\" }}\\n        {%- else %}\\n            {{- \\\"<|eot_id|>\\\" }}\\n        {%- endif %}\\n    {%- elif message.role == \\\"tool\\\" or message.role == \\\"ipython\\\" %}\\n        {{- \\\"<|start_header_id|>ipython<|end_header_id|>\\\\n\\\\n\\\" }}\\n        {%- if message.content is mapping or message.content is iterable %}\\n            {{- message.content | tojson }}\\n        {%- else %}\\n            {{- message.content }}\\n        {%- endif %}\\n        {{- \\\"<|eot_id|>\\\" }}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      128001,\n      128008,\n      128009\n    ],\n    \"stop\": [\n      \"<|end_of_text|>\",\n      \"<|eot_id|>\",\n      \"<|eom_id|>\"\n    ],\n    \"tool_parser\": \"llama3\",\n    \"updated_at\": 1769418481,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"HuatuoGPT-o1-Qwen2.5\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"HuatuoGPT-o1 is a medical LLM designed for advanced medical reasoning. It generates a complex thought process, reflecting and refining its reasoning, before providing a final response.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"FreedomIntelligence/HuatuoGPT-o1-7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"FreedomIntelligence/HuatuoGPT-o1-7B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"FreedomIntelligence/HuatuoGPT-o1-72B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"FreedomIntelligence/HuatuoGPT-o1-72B\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418482,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"InternVL3\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"InternVL3, an advanced multimodal large language model (MLLM) series that demonstrates superior overall performance.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 1,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-1B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-1B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 1,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-1B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-1B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-2B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-2B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-2B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-2B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-8B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-8B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-8B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-8B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-9B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-9B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-9B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-9B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-14B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-14B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-14B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-14B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 38,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-38B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-38B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 38,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-38B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-38B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 78,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-78B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-78B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 78,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-78B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenGVLab/InternVL3-78B-AWQ\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151645\n    ],\n    \"stop\": [\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418483,\n    \"featured\": false,\n    \"architectures\": [\n      \"InternVLChatModel\"\n    ],\n    \"model_type\": \"internvl_chat\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"MiniCPM-V-2.6\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"MiniCPM-V 2.6 is the latest model in the MiniCPM-V series. The model is built on SigLip-400M and Qwen2-7B with a total of 8B parameters.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM-V-2_6\",\n            \"model_revision\": \"3f7a8da1b7a8b928b5ee229fae33cf43fd64cf31\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM-V-2_6\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM-V-2_6-int4\",\n            \"model_revision\": \"051e2df6505f1fc4305f2c9bd42ed90db8bf4874\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM-V-2_6\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      151645,\n      151643\n    ],\n    \"stop\": [\n      \"<|im_end|>\",\n      \"<|endoftext|>\"\n    ],\n    \"updated_at\": 1769418484,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniCPMV\"\n    ],\n    \"model_type\": \"minicpmv\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"Ovis2\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"Ovis (Open VISion) is a novel Multimodal Large Language Model (MLLM) architecture, designed to structurally align visual and textual embeddings.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 1,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-1B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-1B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-2B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-2B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-4B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-4B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-8B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-8B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 16,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-16B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-16B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-34B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-34B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-2B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-2B-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-4B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-4B-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-8B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-8B-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 16,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-16B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-16B-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-34B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"AIDC-AI/Ovis2-34B-GPTQ-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151645,\n      151643\n    ],\n    \"stop\": [\n      \"<|im_end|>\",\n      \"<|endoftext|>\"\n    ],\n    \"updated_at\": 1769418485,\n    \"featured\": false,\n    \"architectures\": [\n      \"Ovis\"\n    ],\n    \"model_type\": \"ovis\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"QvQ-72B-Preview\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"QVQ-72B-Preview is an experimental research model developed by the Qwen team, focusing on enhancing visual reasoning capabilities.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/QVQ-72B-Preview\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/QVQ-72B-Preview\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/QVQ-72B-Preview-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/QVQ-72B-Preview-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% set image_count = namespace(value=0) %}{% set video_count = namespace(value=0) %}{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system\\nYou are a helpful and harmless assistant. You are Qwen developed by Alibaba. You should think step-by-step.<|im_end|>\\n{% endif %}<|im_start|>{{ message['role'] }}\\n{% if message['content'] is string %}{{ message['content'] }}<|im_end|>\\n{% else %}{% for content in message['content'] %}{% if content['type'] == 'image' or 'image' in content or 'image_url' in content %}{% set image_count.value = image_count.value + 1 %}{% if add_vision_id %}Picture {{ image_count.value }}: {% endif %}<|vision_start|><|image_pad|><|vision_end|>{% elif content['type'] == 'video' or 'video' in content %}{% set video_count.value = video_count.value + 1 %}{% if add_vision_id %}Video {{ video_count.value }}: {% endif %}<|vision_start|><|video_pad|><|vision_end|>{% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|>\\n{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant\\n{% endif %}\",\n    \"stop_token_ids\": [\n      151645,\n      151643\n    ],\n    \"stop\": [\n      \"<|im_end|>\",\n      \"<|endoftext|>\"\n    ],\n    \"updated_at\": 1769418486,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2VLForConditionalGeneration\"\n    ],\n    \"model_type\": \"qwen2_vl\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"QwQ-32B\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"tools\"\n    ],\n    \"model_description\": \"QwQ is the reasoning model of the Qwen series. Compared with conventional instruction-tuned models, QwQ, which is capable of thinking and reasoning, can achieve significantly enhanced performance in downstream tasks, especially hard problems. QwQ-32B is the medium-sized reasoning model, which is capable of achieving competitive performance against state-of-the-art reasoning models, e.g., DeepSeek-R1, o1-mini.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/QwQ-32B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/QwQ-32B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/QwQ-32B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/QwQ-32B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/QwQ-32B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/QwQ-32B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"Q8_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/QwQ-32B-GGUF\",\n            \"model_file_name_template\": \"QwQ-32B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"BF16/QwQ-32B-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"Q8_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/QwQ-32B-GGUF\",\n            \"model_file_name_template\": \"QwQ-32B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"BF16/QwQ-32B-{quantization}-{part}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- '' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n  {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" and not message.tool_calls %}\\n        {%- set content = message.content.split('</think>')[-1].lstrip('\\\\n') %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set content = message.content.split('</think>')[-1].lstrip('\\\\n') %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n<think>\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418487,\n    \"featured\": true,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"QwQ-32B-Preview\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"QwQ-32B-Preview is an experimental research model developed by the Qwen Team, focused on advancing AI reasoning capabilities.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/QwQ-32B-Preview\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/QwQ-32B-Preview\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"KirillR/QwQ-32B-Preview-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q3_K_L\",\n              \"Q4_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"lmstudio-community/QwQ-32B-Preview-GGUF\",\n            \"model_file_name_template\": \"QwQ-32B-Preview-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q3_K_L\",\n              \"Q4_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"AI-ModelScope/QwQ-32B-Preview-GGUF\",\n            \"model_file_name_template\": \"QwQ-32B-Preview-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen_QwQ-32B-Preview_MLX-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"okwinds/QwQ-32B-Preview-MLX-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen_QwQ-32B-Preview_MLX-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/QwQ-32B-Preview-MLX-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/QwQ-32B-Preview-bf16\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418488,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"Skywork\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Skywork is a series of large models developed by the Kunlun Group · Skywork team.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"skywork/Skywork-13B-base\",\n            \"model_revision\": \"bc35915066fbbf15b77a1a4a74e9b574ab167816\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"skywork/Skywork-13B-base\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418489,\n    \"featured\": false,\n    \"architectures\": [\n      \"SkyworkForCausalLM\"\n    ],\n    \"model_type\": \"skywork\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"Skywork-Math\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Skywork is a series of large models developed by the Kunlun Group · Skywork team.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"skywork/Skywork-13B-Math\",\n            \"model_revision\": \"70d1740208c8ba39f9ba250b22117ec25311ab33\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"skywork/Skywork-13B-Math\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418490,\n    \"featured\": false,\n    \"architectures\": [\n      \"SkyworkForCausalLM\"\n    ],\n    \"model_type\": \"skywork\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"XiYanSQL-QwenCoder-2504\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"The XiYanSQL-QwenCoder models, as multi-dialect SQL base models, demonstrating robust SQL generation capabilities.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"XGenerationLab/XiYanSQL-QwenCoder-7B-2504\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"XGenerationLab/XiYanSQL-QwenCoder-7B-2504\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"XGenerationLab/XiYanSQL-QwenCoder-32B-2504\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"XGenerationLab/XiYanSQL-QwenCoder-32B-2504\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418491,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"Yi\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"The Yi series models are large language models trained from scratch by developers at 01.AI.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Yi-34B-GGUF\",\n            \"model_file_name_template\": \"yi-34b.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-6B\",\n            \"model_revision\": \"25beebcb1166b9f49458459eb7b68130b9f9cf4d\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-6B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"wuhaicc/Yi-6B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-9B\",\n            \"model_revision\": \"f70a5ff8b2e51c5d5b20e649d7b5f4238ffe6d5b\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-9B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"wuhaicc/Yi-9B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-34B\",\n            \"model_revision\": \"168c48e05e1429779a896c7ef0d2e01b85e6bd8d\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-34B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418492,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"Yi-1.5\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Yi-1.5 is an upgraded version of Yi. It is continuously pre-trained on Yi with a high-quality corpus of 500B tokens and fine-tuned on 3M diverse fine-tuning samples.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-1.5-6B\",\n            \"model_revision\": \"741a657c42d2081f777ce4c6c5572090f8b8c886\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-1.5-6B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"HangZhou_Ascend/Yi-1.5-6B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-1.5-9B\",\n            \"model_revision\": \"9a6839c5b9db3dbb245fb98a072bfabc242621f2\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-1.5-9B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"HangZhou_Ascend/Yi-1.5-9B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-1.5-34B\",\n            \"model_revision\": \"4f83007957ec3eec76d87df19ad061eb0f57b5c5\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-1.5-34B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418493,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"Yi-1.5-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Yi-1.5 is an upgraded version of Yi. It is continuously pre-trained on Yi with a high-quality corpus of 500B tokens and fine-tuned on 3M diverse fine-tuning samples.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-1.5-6B-Chat\",\n            \"model_revision\": \"d68dab90947a3c869e28c9cb2806996af99a6080\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-1.5-6B-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-1.5-9B-Chat\",\n            \"model_revision\": \"1dc6e2b8dcfc12b95bede8dec67e6b6332ac64c6\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-1.5-9B-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-1.5-34B-Chat\",\n            \"model_revision\": \"fa695ee438bfcd0ec2b378fa1c7e0dea1b40393e\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-1.5-34B-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q3_K_L\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"f32\"\n            ],\n            \"model_id\": \"lmstudio-community/Yi-1.5-6B-Chat-GGUF\",\n            \"model_file_name_template\": \"Yi-1.5-6B-Chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q3_K_L\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"f32\"\n            ],\n            \"model_id\": \"lmstudio-community/Yi-1.5-9B-Chat-GGUF\",\n            \"model_file_name_template\": \"Yi-1.5-9B-Chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"lmstudio-community/Yi-1.5-34B-Chat-GGUF\",\n            \"model_file_name_template\": \"Yi-1.5-34B-Chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"modelscope/Yi-1.5-6B-Chat-GPTQ\",\n            \"model_revision\": \"2ad3a602e64d1c79e28e6e92beced2935047367c\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AI-ModelScope/Yi-1.5-6B-Chat-GPTQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"modelscope/Yi-1.5-9B-Chat-GPTQ\",\n            \"model_revision\": \"76f47d16982923f7b6674c4e23ddac7c3b1d2e03\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AI-ModelScope/Yi-1.5-9B-Chat-GPTQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"modelscope/Yi-1.5-34B-Chat-GPTQ\",\n            \"model_revision\": \"173fb4036265b2dac1d6296a8e2fd2f652c19968\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AI-ModelScope/Yi-1.5-34B-Chat-GPTQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"modelscope/Yi-1.5-6B-Chat-AWQ\",\n            \"model_revision\": \"23bf37f1666874e15e239422de0d3948d8735fa9\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AI-ModelScope/Yi-1.5-6B-Chat-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"modelscope/Yi-1.5-9B-Chat-AWQ\",\n            \"model_revision\": \"2605f388332672789eae1f422644add2901b433f\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AI-ModelScope/Yi-1.5-9B-Chat-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"modelscope/Yi-1.5-34B-Chat-AWQ\",\n            \"model_revision\": \"26234fea6ac49d456f32f8017289021fb1087a04\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"AI-ModelScope/Yi-1.5-34B-Chat-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Yi-1.5-6B-Chat-4bit\",\n            \"model_revision\": \"0177c9a12b869d6bc73f772b5a1981a7c966adb6\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Yi-1.5-6B-Chat-8bit\",\n            \"model_revision\": \"7756e65d1bf1e2e6e97aef6bc9484307225f536b\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Yi-1.5-9B-Chat-4bit\",\n            \"model_revision\": \"e15f886479c44e7d90f0ac13ace69b2319b71c2f\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Yi-1.5-9B-Chat-8bit\",\n            \"model_revision\": \"c1f742fcf3683edbe2d2c2fd1ad7ac2bb6c5ca36\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Yi-1.5-34B-Chat-4bit\",\n            \"model_revision\": \"945e3b306ef37c46ab444fdc857d1f3ea7247374\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Yi-1.5-34B-Chat-8bit\",\n            \"model_revision\": \"3c12761a2c6663f216caab6dff84b0dd29b472ac\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if messages[0]['role'] == 'system' %}{% set system_message = messages[0]['content'] %}{% endif %}{% if system_message is defined %}{{ system_message }}{% endif %}{% for message in messages %}{% set content = message['content'] %}{% if message['role'] == 'user' %}{{ '<|im_start|>user\\n' + content + '<|im_end|>\\n<|im_start|>assistant\\n' }}{% elif message['role'] == 'assistant' %}{{ content + '<|im_end|>' + '\\n' }}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      2,\n      6,\n      7,\n      8\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\",\n      \"<|im_sep|>\"\n    ],\n    \"updated_at\": 1769418494,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 16384,\n    \"model_name\": \"Yi-1.5-chat-16k\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Yi-1.5 is an upgraded version of Yi. It is continuously pre-trained on Yi with a high-quality corpus of 500B tokens and fine-tuned on 3M diverse fine-tuning samples.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-1.5-9B-Chat-16K\",\n            \"model_revision\": \"551220fb24d69b6bfec5defceeb160395ce5da8d\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-1.5-9B-Chat-16K\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-1.5-34B-Chat-16K\",\n            \"model_revision\": \"dfdbc67be750972bfcc1ac7ffd7fe48689c856fd\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-1.5-34B-Chat-16K\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"QuantFactory/Yi-1.5-9B-Chat-16K-GGUF\",\n            \"model_file_name_template\": \"Yi-1.5-9B-Chat-16K.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"bartowski/Yi-1.5-34B-Chat-16K-GGUF\",\n            \"model_file_name_template\": \"Yi-1.5-34B-Chat-16K-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if messages[0]['role'] == 'system' %}{% set system_message = messages[0]['content'] %}{% endif %}{% if system_message is defined %}{{ system_message }}{% endif %}{% for message in messages %}{% set content = message['content'] %}{% if message['role'] == 'user' %}{{ '<|im_start|>user\\n' + content + '<|im_end|>\\n<|im_start|>assistant\\n' }}{% elif message['role'] == 'assistant' %}{{ content + '<|im_end|>' + '\\n' }}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      2,\n      6,\n      7,\n      8\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\",\n      \"<|im_sep|>\"\n    ],\n    \"updated_at\": 1769418495,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Yi-200k\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"The Yi series models are large language models trained from scratch by developers at 01.AI.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-6B-200K\",\n            \"model_revision\": \"70649e36d43f91dff1357b576e6713cac03c1d4c\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-6B-200K\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"wuhaicc/Yi-6B-200K\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-34B-200K\",\n            \"model_revision\": \"591ae83b8f9c269700ef27f9dbd548934d800302\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-34B-200K\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418496,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"Yi-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The Yi series models are large language models trained from scratch by developers at 01.AI.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bits\"\n            ],\n            \"model_id\": \"01-ai/Yi-34B-Chat-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bits\"\n            ],\n            \"model_id\": \"01ai/Yi-34B-Chat-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 6,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-6B-Chat\",\n            \"model_revision\": \"1c20c960895e4c3877cf478bc2df074221b81d7b\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-6B-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01-ai/Yi-34B-Chat\",\n            \"model_revision\": \"a99ec35331cbfc9da596af7d4538fe2efecff03c\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"01ai/Yi-34B-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Yi-34B-Chat-GGUF\",\n            \"model_file_name_template\": \"yi-34b-chat.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% for message in messages %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      2,\n      6,\n      7,\n      8\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\",\n      \"<|im_sep|>\"\n    ],\n    \"updated_at\": 1769418497,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"baichuan-2\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Baichuan2 is an open-source Transformer based LLM that is trained on both Chinese and English data.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan2-7B-Base\",\n            \"model_revision\": \"f2cc3a689c5eba7dc7fd3757d0175d312d167604\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan2-7B-Base\",\n            \"model_revision\": \"v1.0.2\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"PyTorch-NPU/baichuan2_7b_base\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan2-13B-Base\",\n            \"model_revision\": \"fa88072fee36e36282287410e00897df2f59e09b\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan2-13B-Base\",\n            \"model_revision\": \"v1.0.3\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Baichuan/Baichuan2_13b_base_pt\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418498,\n    \"featured\": false,\n    \"architectures\": [\n      \"BaichuanForCausalLM\"\n    ],\n    \"model_type\": \"baichuan\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"baichuan-2-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Baichuan2-chat is a fine-tuned version of the Baichuan LLM, specializing in chatting.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan2-7B-Chat\",\n            \"model_revision\": \"2ce891951e000c36c65442608a0b95fd09b405dc\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan2-7B-Chat\",\n            \"model_revision\": \"v1.0.4\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Baichuan/Baichuan2_7b_chat_pt\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan2-13B-Chat\",\n            \"model_revision\": \"a56c793eb7a721ab6c270f779024e0375e8afd4a\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan2-13B-Chat\",\n            \"model_revision\": \"v1.0.3\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Baichuan/Baichuan2_13b_chat_pt\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{{ (messages|selectattr('role', 'equalto', 'system')|list|last).content|trim if (messages|selectattr('role', 'equalto', 'system')|list) else '' }}\\n\\n{% for message in messages %}\\n{% if message['role'] == 'user' %}\\n<reserved_106>\\n{{ message['content']|trim -}}\\n{% if not loop.last %}\\n\\n\\n{% endif %}\\n{% elif message['role'] == 'assistant' %}\\n<reserved_107>\\n{{ message['content']|trim -}}\\n{% if not loop.last %}\\n\\n\\n{% endif %}\\n{% endif %}\\n{% endfor %}\\n{% if add_generation_prompt and messages[-1]['role'] != 'assistant' %}\\n<reserved_107>\\n{% endif %}\",\n    \"stop_token_ids\": [\n      2,\n      195\n    ],\n    \"stop\": [],\n    \"updated_at\": 1769418499,\n    \"featured\": false,\n    \"architectures\": [\n      \"BaichuanForCausalLM\"\n    ],\n    \"model_type\": \"baichuan\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 100000,\n    \"model_name\": \"code-llama\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Code-Llama is an open-source LLM trained by fine-tuning LLaMA2 for generating and discussing code.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-7B-fp16\",\n            \"model_revision\": \"ce09049eb9140a19cf78051cb5d849607b6fa8ec\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/CodeLlama-7b-hf\",\n            \"model_revision\": \"v1.0.2\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-13B-fp16\",\n            \"model_revision\": \"d67ca1183da991d0d97927bdaaf35599556dfd76\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/CodeLlama-13b-hf\",\n            \"model_revision\": \"v1.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-34B-fp16\",\n            \"model_revision\": \"f91d0cf7fc338cdc726f9c72d5ea15fe51bb16e9\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/CodeLlama-34b-hf\",\n            \"model_revision\": \"v1.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-7B-GGUF\",\n            \"model_file_name_template\": \"codellama-7b.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-13B-GGUF\",\n            \"model_file_name_template\": \"codellama-13b.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-34B-GGUF\",\n            \"model_file_name_template\": \"codellama-34b.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418500,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 100000,\n    \"model_name\": \"code-llama-instruct\",\n    \"model_description\": \"Code-Llama-Instruct is an instruct-tuned version of the Code-Llama LLM.\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"codellama/CodeLlama-7b-Instruct-hf\",\n            \"model_revision\": \"6114dd1e16f69e0765ccbd7a64d33d04b265fbd2\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/CodeLlama-7b-Instruct-hf\",\n            \"model_revision\": \"v1.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"codellama/CodeLlama-13b-Instruct-hf\",\n            \"model_revision\": \"ff0983bc4267bb98ead4fb5168fe2f049b442787\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/CodeLlama-13b-Instruct-hf\",\n            \"model_revision\": \"v1.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"codellama/CodeLlama-34b-Instruct-hf\",\n            \"model_revision\": \"38a1e15d8524a1f0a7760a7acf8242b81ae4eb87\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/CodeLlama-34b-Instruct-hf\",\n            \"model_revision\": \"v1.0.2\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-7B-Instruct-GGUF\",\n            \"model_file_name_template\": \"codellama-7b-instruct.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/CodeLlama-7B-Instruct-GGUF\",\n            \"model_file_name_template\": \"codellama-7b-instruct.{quantization}.gguf\",\n            \"model_revision\": \"v0.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-13B-Instruct-GGUF\",\n            \"model_file_name_template\": \"codellama-13b-instruct.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/CodeLlama-13B-Instruct-GGUF\",\n            \"model_file_name_template\": \"codellama-13b-instruct.{quantization}.gguf\",\n            \"model_revision\": \"v0.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-34B-Instruct-GGUF\",\n            \"model_file_name_template\": \"codellama-34b-instruct.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/CodeLlama-34B-Instruct-GGUF\",\n            \"model_file_name_template\": \"codellama-34b-instruct.{quantization}.gguf\",\n            \"model_revision\": \"v0.1.0\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if messages[0]['role'] == 'system' %}{% set system_message = '<<SYS>>\\n' + messages[0]['content'] | trim + '\\n<</SYS>>\\n\\n' %}{% set messages = messages[1:] %}{% else %}{% set system_message = '' %}{% endif %}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if loop.index0 == 0 %}{% set content = system_message + message['content'] %}{% else %}{% set content = message['content'] %}{% endif %}{% if message['role'] == 'user' %}{{ '<s>' + '[INST] ' + content | trim + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ ' ' + content | trim + ' ' + '</s>' }}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418501,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 100000,\n    \"model_name\": \"code-llama-python\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Code-Llama-Python is a fine-tuned version of the Code-Llama LLM, specializing in Python.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-7B-Python-fp16\",\n            \"model_revision\": \"d51c51e625bc24b9a7a0616e82681b4859e2cfe4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Xorbits/CodeLlama-7B-Python-fp16\",\n            \"model_revision\": \"v1.0.0\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-13B-Python-fp16\",\n            \"model_revision\": \"442282f4207442b828953a72c51a919c332cba5c\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Xorbits/CodeLlama-13B-Python-fp16\",\n            \"model_revision\": \"v1.0.0\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-34B-Python-fp16\",\n            \"model_revision\": \"875f9d97fb6c9619d8867887dd1d80918ff0f593\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-7B-Python-GGUF\",\n            \"model_file_name_template\": \"codellama-7b-python.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"Xorbits/CodeLlama-7B-Python-GGUF\",\n            \"model_revision\": \"v1.0.0\",\n            \"model_file_name_template\": \"codellama-7b-python.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-13B-Python-GGUF\",\n            \"model_file_name_template\": \"codellama-13b-python.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"Xorbits/CodeLlama-13B-Python-GGUF\",\n            \"model_file_name_template\": \"codellama-13b-python.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/CodeLlama-34B-Python-GGUF\",\n            \"model_file_name_template\": \"codellama-34b-python.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418502,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"codegeex4\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"the open-source version of the latest CodeGeeX4 model series\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/codegeex4-all-9b\",\n            \"model_revision\": \"8c4ec1d2f2888412640825a7aa23355939a8f4c6\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/codegeex4-all-9b\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ3_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K_L\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"codegeex4-all-9b-{quantization}.gguf\",\n            \"model_id\": \"zai-org/codegeex4-all-9b-GGUF\",\n            \"model_revision\": \"6a04071c54c943949826d4815ee00717ed8cf153\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ3_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K_L\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"codegeex4-all-9b-{quantization}.gguf\",\n            \"model_id\": \"ZhipuAI/codegeex4-all-9b-GGUF\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for item in messages %}{% if loop.first and item['role'] == 'system' %}{{ '<|system|>\\n' + item['content'] }}{% elif loop.first %}{{ '<|system|>\\n你是一位智能编程助手，你叫CodeGeeX。你会为用户回答关于编程、代码、计算机方面的任何问题，并提供格式规范、可以执行、准确安全的代码，并在必要时提供详细的解释。' }}{% endif %}{% if item['role'] == 'user' %}{{ '<|user|>\\n' + item['content'] }}{% elif item['role'] == 'assistant' %}{{ '<|assistant|>\\n' + item['content'] }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"updated_at\": 1769418503,\n    \"featured\": false,\n    \"architectures\": [\n      \"ChatGLMModel\"\n    ],\n    \"model_type\": \"chatglm\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 65536,\n    \"model_name\": \"codeqwen1.5\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"CodeQwen1.5 is the Code-Specific version of Qwen1.5. It is a transformer-based decoder-only language model pretrained on a large amount of data of codes.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/CodeQwen1.5-7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/CodeQwen1.5-7B\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"HangZhou_Ascend/CodeQwen1.5-7B\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418503,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 65536,\n    \"model_name\": \"codeqwen1.5-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"CodeQwen1.5 is the Code-Specific version of Qwen1.5. It is a transformer-based decoder-only language model pretrained on a large amount of data of codes.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/CodeQwen1.5-7B-Chat-GGUF\",\n            \"model_file_name_template\": \"codeqwen-1_5-7b-chat-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/CodeQwen1.5-7B-Chat-GGUF\",\n            \"model_file_name_template\": \"codeqwen-1_5-7b-chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/CodeQwen1.5-7B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/CodeQwen1.5-7B-Chat\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"HangZhou_Ascend/CodeQwen1.5-7B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/CodeQwen1.5-7B-Chat-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/CodeQwen1.5-7B-Chat-AWQ\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418504,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8194,\n    \"model_name\": \"codeshell\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"CodeShell is a multi-language code LLM developed by the Knowledge Computing Lab of Peking University. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"WisdomShell/CodeShell-7B\",\n            \"model_revision\": \"1c79ab7fd316a62ab41d764facd3548a23fa5dee\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"WisdomShell/CodeShell-7B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418505,\n    \"featured\": false,\n    \"architectures\": [\n      \"CodeShellForCausalLM\"\n    ],\n    \"model_type\": \"kclgpt\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8194,\n    \"model_name\": \"codeshell-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"CodeShell is a multi-language code LLM developed by the Knowledge Computing Lab of Peking University.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"WisdomShell/CodeShell-7B-Chat\",\n            \"model_revision\": \"3cb06f589b7b1e2f8e728c77280b1114191d24de\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"WisdomShell/CodeShell-7B-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for item in messages %}{% if item['role'] == 'user' %}{{ '## human: ' + item['content'] + '|<end>|' }}{% elif item['role'] == 'assistant' %}{{ '## assistant: ' + item['content'] + '|<end>|' }}{% endif %}{% endfor %}{{ '## assistant: ' }}\",\n    \"stop_token_ids\": [\n      70000\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"|||\",\n      \"|<end>|\"\n    ],\n    \"updated_at\": 1769418506,\n    \"featured\": false,\n    \"architectures\": [\n      \"CodeShellForCausalLM\"\n    ],\n    \"model_type\": \"codeshell\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"cogagent\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"The CogAgent-9B-20241220 model is based on GLM-4V-9B, a bilingual open-source VLM base model. Through data collection and optimization, multi-stage training, and strategy improvements, CogAgent-9B-20241220 achieves significant advancements in GUI perception, inference prediction accuracy, action space completeness, and task generalizability. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"9\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/cogagent-9b-20241220\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/cogagent-9b-20241220\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"updated_at\": 1769418507,\n    \"featured\": false,\n    \"architectures\": [\n      \"ChatGLMForConditionalGeneration\"\n    ],\n    \"model_type\": \"chatglm\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"deepseek\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"DeepSeek LLM, trained from scratch on a vast dataset of 2 trillion tokens in both English and Chinese. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-llm-7b-base\",\n            \"model_revision\": \"7683fea62db869066ddaff6a41d032262c490d4f\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-llm-7b-base\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 67,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-llm-67b-base\",\n            \"model_revision\": \"c3f813a1121c95488a20132d3a4da89f4a46452f\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-llm-67b-base\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-llm-7B-chat-GGUF\",\n            \"model_file_name_template\": \"deepseek-llm-7b-chat.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 67,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-llm-67b-chat-GGUF\",\n            \"model_file_name_template\": \"deepseek-llm-67b-chat.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418508,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"deepseek-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"DeepSeek LLM is an advanced language model comprising 67 billion parameters. It has been trained from scratch on a vast dataset of 2 trillion tokens in both English and Chinese.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-llm-7b-chat\",\n            \"model_revision\": \"afbda8b347ec881666061fa67447046fc5164ec8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-llm-7b-chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 67,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-llm-67b-chat\",\n            \"model_revision\": \"79648bef7658bb824e4630740f6e1484c1b0620b\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-llm-67b-chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-llm-7B-chat-GGUF\",\n            \"model_file_name_template\": \"deepseek-llm-7b-chat.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 67,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-llm-67b-chat-GGUF\",\n            \"model_file_name_template\": \"deepseek-llm-67b-chat.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{{ '<｜begin▁of▁sentence｜>' }}{% for message in messages %}{% if message['role'] == 'user' %}{{ 'User: ' + message['content'] + '\\n\\n' }}{% elif message['role'] == 'assistant' %}{{ 'Assistant: ' + message['content'] + '<｜end▁of▁sentence｜>' }}{% elif message['role'] == 'system' %}{{ message['content'] + '\\n\\n' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ 'Assistant:' }}{% endif %}\",\n    \"stop_token_ids\": [\n      100001\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"updated_at\": 1769418509,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 16384,\n    \"model_name\": \"deepseek-coder\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Deepseek Coder is composed of a series of code language models, each trained from scratch on 2T tokens, with a composition of 87% code and 13% natural language in both English and Chinese. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-1.3b-base\",\n            \"model_revision\": \"c919139c3a9b4070729c8b2cca4847ab29ca8d94\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-1.3b-base\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"6_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-6.7b-base\",\n            \"model_revision\": \"ce2207a8bfef3ee92bd7dd4cc31c52cfa0046912\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-6.7b-base\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-7b-base-v1.5\",\n            \"model_revision\": \"98f0904cee2237e235f10408ae12292037b21dac\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 33,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-33b-base\",\n            \"model_revision\": \"45c85cadf3720ef3e85a492e24fd4b8c5d21d8ac\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-33b-base\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-1.3b-base-GGUF\",\n            \"model_file_name_template\": \"deepseek-coder-1.3b-base.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"6_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-6.7B-base-GGUF\",\n            \"model_file_name_template\": \"deepseek-coder-6.7b-base.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"dagbs/deepseek-coder-7b-base-v1.5-GGUF\",\n            \"model_file_name_template\": \"deepseek-coder-7b-base-v1.5.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 33,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-33B-base-GGUF\",\n            \"model_file_name_template\": \"deepseek-coder-33b-base.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-1.3b-base-GPTQ\",\n            \"model_revision\": \"a5bf3b76d70cda53327311a631b1003024d5de29\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"6_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-6.7B-base-GPTQ\",\n            \"model_revision\": \"6476ea3d6e623a1313d363dbc6e172773e031bb1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 33,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-33B-base-GPTQ\",\n            \"model_revision\": \"f527d7325e463a5cb091d044e4f2b15902674a70\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"1_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-1.3b-base-AWQ\",\n            \"model_revision\": \"ffb66f1a2a194401b4f29025edcd261d7f0a08a7\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"6_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-6.7B-base-AWQ\",\n            \"model_revision\": \"e3d4bdf39712665f5e9d5c05c9df6f20fe1e2d5a\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 33,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-33B-base-AWQ\",\n            \"model_revision\": \"c7edb2d5868d61a5dcf2591933a8992c8cbe3ef4\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418510,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 16384,\n    \"model_name\": \"deepseek-coder-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"deepseek-coder-instruct is a model initialized from deepseek-coder-base and fine-tuned on 2B tokens of instruction data.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-1.3b-instruct\",\n            \"model_revision\": \"2df081ceaca101a867fef2844e44f4d6a4857039\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-1.3b-instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"6_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-6.7b-instruct\",\n            \"model_revision\": \"cbb77d7448ea3168d884758817e7f895e3828d1c\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-6.7b-instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-7b-instruct-v1.5\",\n            \"model_revision\": \"2a050a4c59d687a85324d32e147517992117ed30\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 33,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-33b-instruct\",\n            \"model_revision\": \"ea15d17db84d1fc94ac5cba8e6fa97764c9549d3\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-coder-33b-instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-1.3b-instruct-GGUF\",\n            \"model_file_name_template\": \"deepseek-coder-1.3b-instruct.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"6_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-6.7B-instruct-GGUF\",\n            \"model_file_name_template\": \"deepseek-coder-6.7b-instruct.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"LoneStriker/deepseek-coder-7b-instruct-v1.5-GGUF\",\n            \"model_file_name_template\": \"deepseek-coder-7b-instruct-v1.5-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 33,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-33B-instruct-GGUF\",\n            \"model_file_name_template\": \"deepseek-coder-33b-instruct.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-1.3b-instruct-GPTQ\",\n            \"model_revision\": \"9c002e9af6cbdf3bd9244e2d7264b6a35d1dcacf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"6_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-6.7B-instruct-GPTQ\",\n            \"model_revision\": \"13ccea6e3a43dcfdcb655d92097610018b431a17\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 33,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-33B-instruct-GPTQ\",\n            \"model_revision\": \"08372729d98dfc248f9531a412fe69e14e607027\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"1_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-1.3b-instruct-AWQ\",\n            \"model_revision\": \"a2a484da6e4146d055316a9a63cf5b13955715a4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"6_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-6.7B-instruct-AWQ\",\n            \"model_revision\": \"502ae3e19e57ae78dc30a791ba33c565da72dc62\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 33,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/deepseek-coder-33B-instruct-AWQ\",\n            \"model_revision\": \"c40b499bac2712cd3c445cf1b05d2c6558ab0d29\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}\\n{% set add_generation_prompt = false %}\\n{% endif %}\\n{%- set ns = namespace(found=false) -%}\\n{%- for message in messages -%}\\n    {%- if message['role'] == 'system' -%}\\n        {%- set ns.found = true -%}\\n    {%- endif -%}\\n{%- endfor -%}\\n{{'<｜begin▁of▁sentence｜>'}}{%- if not ns.found -%}\\n{{'You are an AI programming assistant, utilizing the Deepseek Coder model, developed by Deepseek Company, and you only answer questions related to computer science. For politically sensitive questions, security and privacy issues, and other non-computer science questions, you will refuse to answer\\n'}}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if message['role'] == 'system' %}\\n{{ message['content'] }}\\n    {%- else %}\\n        {%- if message['role'] == 'user' %}\\n{{'### Instruction:\\n' + message['content'] + '\\n'}}\\n        {%- else %}\\n{{'### Response:\\n' + message['content'] + '\\n<|EOT|>\\n'}}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{% if add_generation_prompt %}\\n{{'### Response:'}}\\n{% endif %}\",\n    \"stop_token_ids\": [\n      32021\n    ],\n    \"stop\": [\n      \"<|EOT|>\"\n    ],\n    \"updated_at\": 1769418511,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 163840,\n    \"model_name\": \"deepseek-prover-v2\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\"\n    ],\n    \"model_description\": \"We introduce DeepSeek-Prover-V2, an open-source large language model designed for formal theorem proving in Lean 4, with initialization data collected through a recursive theorem proving pipeline powered by DeepSeek-V3. The cold-start training procedure begins by prompting DeepSeek-V3 to decompose complex problems into a series of subgoals. The proofs of resolved subgoals are synthesized into a chain-of-thought process, combined with DeepSeek-V3's step-by-step reasoning, to create an initial cold start for reinforcement learning. This process enables us to integrate both informal and formal mathematical reasoning into a unified model\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-Prover-V2-671B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-Prover-V2-671B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-Prover-V2-7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-Prover-V2-7B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-Prover-V2-7B-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-Prover-V2-7B-4bit\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true, is_last_user=false) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\\n\\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{%- set ns.is_first = false -%}{%- set ns.is_last_user = true -%}{{'<｜User｜>' + message['content'] + '<｜Assistant｜>'}}{%- endif %}{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{%- endif %}{%- set ns.is_first = false %}{%- set ns.is_tool = false -%}{%- set ns.is_output_first = true %}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if message['content'] is none %}{{'<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- else %}{{message['content'] + '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- endfor %}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none)%}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{{content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_last_user = false -%}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\n<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_last_user and not ns.is_tool %}{{'<｜Assistant｜>'}}{% endif %}\",\n    \"stop_token_ids\": [\n      1\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"updated_at\": 1769418511,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV3ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 163840,\n    \"model_name\": \"deepseek-r1\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\"\n    ],\n    \"model_description\": \"DeepSeek-R1, which incorporates cold-start data before RL. DeepSeek-R1 achieves performance comparable to OpenAI-o1 across math, code, and reasoning tasks.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1\",\n            \"model_revision\": \"8a58a132790c9935686eb97f042afa8013451c9f\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cognitivecomputations/DeepSeek-R1-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cognitivecomputations/DeepSeek-R1-awq\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"UD-IQ1_S\",\n              \"UD-IQ1_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-Q2_K_XL\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q2_K_XS\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-{quantization}/DeepSeek-R1-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"DeepSeek-R1-{quantization}/DeepSeek-R1-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"UD-IQ1_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ1_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ2_XXS\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q2_K_XS\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00015\",\n                \"00002-of-00015\",\n                \"00003-of-00015\",\n                \"00004-of-00015\",\n                \"00005-of-00015\",\n                \"00006-of-00015\",\n                \"00007-of-00015\",\n                \"00008-of-00015\",\n                \"00009-of-00015\",\n                \"00010-of-00015\",\n                \"00011-of-00015\",\n                \"00012-of-00015\",\n                \"00013-of-00015\",\n                \"00014-of-00015\",\n                \"00015-of-00015\"\n              ],\n              \"BF16\": [\n                \"00001-of-00030\",\n                \"00002-of-00030\",\n                \"00003-of-00030\",\n                \"00004-of-00030\",\n                \"00005-of-00030\",\n                \"00006-of-00030\",\n                \"00007-of-00030\",\n                \"00008-of-00030\",\n                \"00009-of-00030\",\n                \"00010-of-00030\",\n                \"00011-of-00030\",\n                \"00012-of-00030\",\n                \"00013-of-00030\",\n                \"00014-of-00030\",\n                \"00015-of-00030\",\n                \"00016-of-00030\",\n                \"00017-of-00030\",\n                \"00018-of-00030\",\n                \"00019-of-00030\",\n                \"00020-of-00030\",\n                \"00021-of-00030\",\n                \"00022-of-00030\",\n                \"00023-of-00030\",\n                \"00024-of-00030\",\n                \"00025-of-00030\",\n                \"00026-of-00030\",\n                \"00027-of-00030\",\n                \"00028-of-00030\",\n                \"00029-of-00030\",\n                \"00030-of-00030\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"UD-IQ1_S\",\n              \"UD-IQ1_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-Q2_K_XL\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q2_K_XS\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-{quantization}/DeepSeek-R1-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"DeepSeek-R1-{quantization}/DeepSeek-R1-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"UD-IQ1_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ1_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ2_XXS\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q2_K_XS\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00015\",\n                \"00002-of-00015\",\n                \"00003-of-00015\",\n                \"00004-of-00015\",\n                \"00005-of-00015\",\n                \"00006-of-00015\",\n                \"00007-of-00015\",\n                \"00008-of-00015\",\n                \"00009-of-00015\",\n                \"00010-of-00015\",\n                \"00011-of-00015\",\n                \"00012-of-00015\",\n                \"00013-of-00015\",\n                \"00014-of-00015\",\n                \"00015-of-00015\"\n              ],\n              \"BF16\": [\n                \"00001-of-00030\",\n                \"00002-of-00030\",\n                \"00003-of-00030\",\n                \"00004-of-00030\",\n                \"00005-of-00030\",\n                \"00006-of-00030\",\n                \"00007-of-00030\",\n                \"00008-of-00030\",\n                \"00009-of-00030\",\n                \"00010-of-00030\",\n                \"00011-of-00030\",\n                \"00012-of-00030\",\n                \"00013-of-00030\",\n                \"00014-of-00030\",\n                \"00015-of-00030\",\n                \"00016-of-00030\",\n                \"00017-of-00030\",\n                \"00018-of-00030\",\n                \"00019-of-00030\",\n                \"00020-of-00030\",\n                \"00021-of-00030\",\n                \"00022-of-00030\",\n                \"00023-of-00030\",\n                \"00024-of-00030\",\n                \"00025-of-00030\",\n                \"00026-of-00030\",\n                \"00027-of-00030\",\n                \"00028-of-00030\",\n                \"00029-of-00030\",\n                \"00030-of-00030\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"2bit\",\n              \"3bit\",\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-R1-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"2bit\",\n              \"3bit\",\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-R1-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<｜User｜>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<｜Assistant｜><｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '</think>' in content %}{% set content = content.split('</think>')[-1] %}{% endif %}{{'<｜Assistant｜>' + content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\\\n<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<｜Assistant｜><think>\\\\n'}}{% endif %}\",\n    \"stop_token_ids\": [\n      1\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"updated_at\": 1769418512,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV3ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 163840,\n    \"model_name\": \"deepseek-r1-0528\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"tools\"\n    ],\n    \"model_description\": \"DeepSeek-R1, which incorporates cold-start data before RL. DeepSeek-R1 achieves performance comparable to OpenAI-o1 across math, code, and reasoning tasks.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-0528\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-0528\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix-Lite\",\n              \"Int4-Int8Mix-Compact\",\n              \"Int4-Int8Mix-Medium\"\n            ],\n            \"model_id\": \"QuantTrio/DeepSeek-R1-0528-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix-Lite\",\n              \"Int4-Int8Mix-Compact\",\n              \"Int4-Int8Mix-Medium\"\n            ],\n            \"model_id\": \"tclf90/DeepSeek-R1-0528-GPTQ-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if not add_generation_prompt is defined %}{%- set add_generation_prompt = false %}{%- endif %}{%- set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true, is_last_user=false) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{%- set ns.system_prompt = ns.system_prompt + message['content'] %}{%- set ns.is_first_sp = false %}{%- else %}{%- set ns.system_prompt = ns.system_prompt + '\\n\\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{%- if tools is defined and tools is not none %}{%- set tool_ns = namespace(text='You are a helpful assistant with tool calling capabilities. ' + 'When a tool call is needed, you MUST use the following format to issue the call:\\n' + '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>function<｜tool▁sep｜>FUNCTION_NAME\\n' + '```json\\n{\\\"param1\\\": \\\"value1\\\", \\\"param2\\\": \\\"value2\\\"}\\n```<｜tool▁call▁end｜><｜tool▁calls▁end｜>\\n\\n' + 'Make sure the JSON is valid.' + '## Tools\\n\\n### Function\\n\\nYou have the following functions available:\\n\\n') %}{%- for tool in tools %}{%- set tool_ns.text = tool_ns.text + '\\n```json\\n' + (tool | tojson) + '\\n```\\n' %}{%- endfor %}{%- if ns.system_prompt|length != 0 %}{%- set ns.system_prompt = ns.system_prompt + '\\n\\n' + tool_ns.text %}{%- else %}{%- set ns.system_prompt = tool_ns.text %}{%- endif %}{%- endif %}{{- bos_token }}{{- ns.system_prompt }}{%- set last_index = (messages|length - 1) %}{%- for message in messages %}{%- set content = message['content'] %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{%- set ns.is_first = false -%}{%- set ns.is_last_user = true -%}{%- if loop.index0 == last_index %}{{- '<｜User｜>' + content }}{%- else %}{{- '<｜User｜>' + content + '<｜Assistant｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'assistant' %}{%- if '</think>' in content %}{%- set content = (content.split('</think>')|last) %}{%- endif %}{%- endif %}{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{- '<｜tool▁outputs▁end｜>'}}{%- endif %}{%- set ns.is_first = false %}{%- set ns.is_tool = false -%}{%- set ns.is_output_first = true %}{%- for tool in message['tool_calls'] %}{%- set arguments = tool['function']['arguments'] %}{%- if arguments is not string %}{%- set arguments = arguments|tojson %}{%- endif %}{%- if not ns.is_first %}{%- if content is none %}{{- '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + arguments + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- else %}{{- content + '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + arguments + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{- '\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + arguments + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- endfor %}{{- '<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{- '<｜tool▁outputs▁end｜>' + content + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{{- content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_last_user = false -%}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{- '<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + content + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{- '\\n<｜tool▁output▁begin｜>' + content + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{%- if ns.is_tool %}{{- '<｜tool▁outputs▁end｜>'}}{%- endif %}{%- if add_generation_prompt and not ns.is_tool %}{{- '<｜Assistant｜>'}}{%- endif %}\",\n    \"stop_token_ids\": [\n      1\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"tool_parser\": \"deepseek-r1\",\n    \"updated_at\": 1769418513,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV3ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"deepseek-r1-0528-qwen3\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\"\n    ],\n    \"model_description\": \"The DeepSeek R1 model has undergone a minor version upgrade, with the current version being DeepSeek-R1-0528. In the latest update, DeepSeek R1 has significantly improved its depth of reasoning and inference capabilities by leveraging increased computational resources and introducing algorithmic optimization mechanisms during post-training. The model has demonstrated outstanding performance across various benchmark evaluations, including mathematics, programming, and general logic. Its overall performance is now approaching that of leading models, such as O3 and Gemini 2.5 Pro\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-0528-Qwen3-8B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-0528-Qwen3-8B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-W4A16\",\n              \"Int8-W8A16\"\n            ],\n            \"model_id\": \"QuantTrio/DeepSeek-R1-0528-Qwen3-8B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-W4A16\",\n              \"Int8-W8A16\"\n            ],\n            \"model_id\": \"okwinds/DeepSeek-R1-0528-Qwen3-8B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/DeepSeek-R1-0528-Qwen3-8B-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/DeepSeek-R1-0528-Qwen3-8B-GPTQ-Int4-Int8Mix\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true, is_last_user=false) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\\n\\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{% set content = message['content'] %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{%- set ns.is_first = false -%}{%- set ns.is_last_user = true -%}{{'<｜User｜>' + content + '<｜Assistant｜>'}}{%- endif %}{%- if message['role'] == 'assistant' %}{% if '</think>' in content %}{% set content = content.split('</think>')[-1] %}{% endif %}{% endif %}{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{%- endif %}{%- set ns.is_first = false %}{%- set ns.is_tool = false -%}{%- set ns.is_output_first = true %}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if content is none %}{{'<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- else %}{{content + '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- endfor %}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none)%}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + content + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{{content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_last_user = false -%}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + content + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\n<｜tool▁output▁begin｜>' + content + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_last_user and not ns.is_tool %}{{'<｜Assistant｜>'}}{% endif %}\",\n    \"stop_token_ids\": [\n      151645\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"updated_at\": 1769418514,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen3ForCausalLM\"\n    ],\n    \"model_type\": \"qwen3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"deepseek-r1-distill-llama\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\"\n    ],\n    \"model_description\": \"deepseek-r1-distill-llama is distilled from DeepSeek-R1 based on Llama\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Llama-8B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Llama-8B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-R1-Distill-Llama-8B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"okwinds/DeepSeek-R1-Distill-Llama-8B-MLX-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Llama-70B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Llama-70B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"quantization_parts\": {\n              \"Q6_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"F16\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ]\n            },\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Llama-70B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-7B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"DeepSeek-R1-Distill-Llama-70B-{quantization}/DeepSeek-R1-Distill-Llama-70B-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"quantization_parts\": {\n              \"Q6_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"F16\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ]\n            },\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Llama-70B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-7B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"DeepSeek-R1-Distill-Llama-70B-{quantization}/DeepSeek-R1-Distill-Llama-70B-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-R1-Distill-Llama-70B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/DeepSeek-R1-Distill-Llama-70B-MLX-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"jakiAJK/DeepSeek-R1-Distill-Llama-8B_AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"jakiAJK/DeepSeek-R1-Distill-Llama-8B_GPTQ-int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Llama-8B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"casperhansen/deepseek-r1-distill-llama-70b-awq\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"empirischtech/DeepSeek-R1-Distill-Llama-70B-gptq-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Llama-8B-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<｜User｜>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<｜Assistant｜><｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '</think>' in content %}{% set content = content.split('</think>')[-1] %}{% endif %}{{'<｜Assistant｜>' + content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\\\n<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<｜Assistant｜><think>\\\\n'}}{% endif %}\",\n    \"stop_token_ids\": [\n      151643\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"tool_parser\": \"deepseek-r1\",\n    \"updated_at\": 1769418515,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"deepseek-r1-distill-qwen\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\"\n    ],\n    \"model_description\": \"deepseek-r1-distill-qwen is distilled from DeepSeek-R1 based on Qwen\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-1.5B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-1.5B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-R1-Distill-Qwen-1.5B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-R1-Distill-Qwen-1.5B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Qwen-7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Qwen-7B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"jakiAJK/DeepSeek-R1-Distill-Qwen-7B_GPTQ-int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/deepseek-r1-distill-qwen-7b-gptq-int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-7B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-7B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Qwen-14B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Qwen-14B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Qwen-14B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-14B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Qwen-14B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-14B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Qwen-32B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-R1-Distill-Qwen-32B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-32B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-R1-Distill-Qwen-32B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"casperhansen/deepseek-r1-distill-qwen-1.5b-awq\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"jakiAJK/DeepSeek-R1-Distill-Qwen-1.5B_GPTQ-int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"jakiAJK/DeepSeek-R1-Distill-Qwen-7B_AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-R1-Distill-Qwen-7B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/DeepSeek-R1-Distill-Qwen-7B-MLX-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"casperhansen/deepseek-r1-distill-qwen-14b-awq\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-R1-Distill-Qwen-14B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/DeepSeek-R1-Distill-Qwen-14B-MLX-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"casperhansen/deepseek-r1-distill-qwen-32b-awq\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-R1-Distill-Qwen-32B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"2bit\",\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/DeepSeek-R1-Distill-Qwen-32B-MLX-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/deepseek-r1-distill-qwen-32b-gptq-int4\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\\\\n\\\\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<｜User｜>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and 'tool_calls' in message %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if message['content'] is none %}{{'<｜Assistant｜><｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- else %}{{'<｜Assistant｜>' + message['content'] + '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'\\\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- endfor %}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- if message['role'] == 'assistant' and 'tool_calls' not in message %}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '</think>' in content %}{% set content = content.split('</think>')[-1] %}{% endif %}{{'<｜Assistant｜>' + content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{'<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<｜Assistant｜><think>\\\\n'}}{% endif %}\",\n    \"stop_token_ids\": [\n      151643\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"updated_at\": 1769418516,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 128000,\n    \"model_name\": \"deepseek-v2-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"DeepSeek-V2, a strong Mixture-of-Experts (MoE) language model characterized by economical training and efficient inference. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 16,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V2-Lite-Chat\",\n            \"model_revision\": \"85864749cd611b4353ce1decdb286193298f64c7\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V2-Lite-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 236,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V2-Chat\",\n            \"model_revision\": \"8e3f5f6c2226787e41ba3e9283a06389d178c926\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V2-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{{ '<｜begin▁of▁sentence｜>' }}{% for message in messages %}{% if message['role'] == 'user' %}{{ 'User: ' + message['content'] + '\\n\\n' }}{% elif message['role'] == 'assistant' %}{{ 'Assistant: ' + message['content'] + '<｜end▁of▁sentence｜>' }}{% elif message['role'] == 'system' %}{{ message['content'] + '\\n\\n' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ 'Assistant:' }}{% endif %}\",\n    \"stop_token_ids\": [\n      100001\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"updated_at\": 1769418517,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV2ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 128000,\n    \"model_name\": \"deepseek-v2-chat-0628\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"DeepSeek-V2-Chat-0628 is an improved version of DeepSeek-V2-Chat. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 236,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V2-Chat-0628\",\n            \"model_revision\": \"5d09e272c2b223830f4e84359cd9dd047a5d7c78\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V2-Chat-0628\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{{ '<｜begin▁of▁sentence｜>' }}{% for message in messages %}{% if message['role'] == 'user' %}{{ '<｜User｜>' + message['content'] }}{% elif message['role'] == 'assistant' %}{{ '<｜Assistant｜>' + message['content'] + '<｜end▁of▁sentence｜>' }}{% elif message['role'] == 'system' %}{{ message['content'] + '\\n\\n' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<｜Assistant｜>' }}{% endif %}\",\n    \"stop_token_ids\": [\n      100001\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"updated_at\": 1769418518,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV2ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 128000,\n    \"model_name\": \"deepseek-v2.5\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"DeepSeek-V2.5 is an upgraded version that combines DeepSeek-V2-Chat and DeepSeek-Coder-V2-Instruct. The new model integrates the general and coding abilities of the two previous versions.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 236,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V2.5\",\n            \"model_revision\": \"24b08cb750e0c2757de112d2e16327cb21ed4833\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V2.5\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}    {%- if message['role'] == 'system' %}        {% set ns.system_prompt = message['content'] %}    {%- endif %}{%- endfor %}{{'<｜begin▁of▁sentence｜>'}}{{ns.system_prompt}}{%- for message in messages %}    {%- if message['role'] == 'user' %}    {%- set ns.is_tool = false -%}{{'<｜User｜>' + message['content']}}    {%- endif %}    {%- if message['role'] == 'assistant' and message['content'] is none %}        {%- set ns.is_tool = false -%}        {%- for tool in message['tool_calls']%}            {%- if not ns.is_first %}{{'<｜Assistant｜><｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}            {%- set ns.is_first = true -%}            {%- else %}{{'\\\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}                   {%- endif %}        {%- endfor %}    {%- endif %}    {%- if message['role'] == 'assistant' and message['content'] is not none %}        {%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}        {%- set ns.is_tool = false -%}        {%- else %}{{'<｜Assistant｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}        {%- endif %}    {%- endif %}    {%- if message['role'] == 'tool' %}        {%- set ns.is_tool = true -%}        {%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}        {%- set ns.is_output_first = false %}        {%- else %}{{'\\\\n<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}        {%- endif %}    {%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<｜Assistant｜>'}}{% endif %}\",\n    \"stop_token_ids\": [\n      100001\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"updated_at\": 1769418519,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV2ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 163840,\n    \"model_name\": \"deepseek-v3\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"DeepSeek-V3, a strong Mixture-of-Experts (MoE) language model with 671B total parameters with 37B activated for each token. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V3\",\n            \"model_revision\": \"1d044fd82b15f1cedb197a288e50cc96a2c27205\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V3\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cognitivecomputations/DeepSeek-V3-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cognitivecomputations/DeepSeek-V3-awq\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K_L\",\n              \"Q2_K_XS\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-V3-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-V3-{quantization}/DeepSeek-V3-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"DeepSeek-V3-{quantization}/DeepSeek-V3-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"Q2_K_L\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q2_K_XS\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00016\",\n                \"00002-of-00016\",\n                \"00003-of-00016\",\n                \"00004-of-00016\",\n                \"00005-of-00016\",\n                \"00006-of-00016\",\n                \"00007-of-00016\",\n                \"00008-of-00016\",\n                \"00009-of-00016\",\n                \"00010-of-00016\",\n                \"00011-of-00016\",\n                \"00012-of-00016\",\n                \"00013-of-00016\",\n                \"00014-of-00016\",\n                \"00015-of-00016\",\n                \"00016-of-00016\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K_L\",\n              \"Q2_K_XS\",\n              \"Q3_K_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"unsloth/DeepSeek-V3-GGUF\",\n            \"model_file_name_template\": \"DeepSeek-V3-{quantization}/DeepSeek-V3-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"DeepSeek-V3-{quantization}/DeepSeek-V3-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"Q2_K_L\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q2_K_XS\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00016\",\n                \"00002-of-00016\",\n                \"00003-of-00016\",\n                \"00004-of-00016\",\n                \"00005-of-00016\",\n                \"00006-of-00016\",\n                \"00007-of-00016\",\n                \"00008-of-00016\",\n                \"00009-of-00016\",\n                \"00010-of-00016\",\n                \"00011-of-00016\",\n                \"00012-of-00016\",\n                \"00013-of-00016\",\n                \"00014-of-00016\",\n                \"00015-of-00016\",\n                \"00016-of-00016\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-V3-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-V3-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if messages %} {% if system or tools %} {% if system %} {{ system }} {% endif %} {% if tools %} {# Handle tools here if needed #} {% endif %} {% endif %} {% for message in messages %} {% set last = loop.index == loop.length %} {% if message.role == \\\"user\\\" %} <｜User｜> {% if tools and last %} Given the following functions, please respond with a JSON for a function call with its proper arguments that best answers the given prompt.  Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}. Do not use variables.  {{ tools }} {% endif %} {{ message.content }} {% if last %} <｜Assistant｜> {% endif %} {% elif message.role == \\\"assistant\\\" %} <｜Assistant｜> {% if message.tool_calls %} <｜tool▁calls▁begin｜> {% for tool in message.tool_calls %} <｜tool▁call▁begin｜> {\\\"name\\\": \\\"{{ tool.function.name }}\\\", \\\"parameters\\\": {{ tool.function.arguments }}} <｜tool▁call▁end｜> {% endfor %} <｜tool▁calls▁end｜> {% else %} {{ message.content }} {% if not last %} <｜end▁of▁sentence｜> {% endif %} {% endif %} {% elif message.role == \\\"tool\\\" %} <｜tool▁outputs▁begin｜> <｜tool▁output▁begin｜> {{ message.content }} <｜tool▁output▁end｜> <｜tool▁outputs▁end｜> {% if last and message.role != \\\"assistant\\\" %} <｜Assistant｜> {% endif %} {% endif %} {% endfor %} {% else %} {% if system %} {{ system }} {% endif %} {% if prompt %} <｜User｜> {{ prompt }} {% endif %} <｜Assistant｜> {{ response }} {% if response %} {{ response }} {% endif %} {% endif %}\",\n    \"stop_token_ids\": [\n      1\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"tool_parser\": \"deepseek_v3\",\n    \"updated_at\": 1769418520,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV3ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 163840,\n    \"model_name\": \"deepseek-v3-0324\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"DeepSeek-V3, a strong Mixture-of-Experts (MoE) language model with 671B total parameters with 37B activated for each token. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V3-0324\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V3-0324\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cognitivecomputations/DeepSeek-V3-0324-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cognitivecomputations/DeepSeek-V3-0324-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-V3-0324-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true, is_last_user=false) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\\n\\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{%- set ns.is_first = false -%}{%- set ns.is_last_user = true -%}{{'<｜User｜>' + message['content'] + '<｜Assistant｜>'}}{%- endif %}{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{%- endif %}{%- set ns.is_first = false %}{%- set ns.is_tool = false -%}{%- set ns.is_output_first = true %}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if message['content'] is none %}{{'<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- else %}{{message['content'] + '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- endif %}{%- endfor %}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none)%}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{{content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_last_user = false -%}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\n<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_last_user and not ns.is_tool %}{{'<｜Assistant｜>'}}{% endif %}\",\n    \"stop_token_ids\": [\n      1\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"updated_at\": 1769418521,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV3ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"deepseek-vl2\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"DeepSeek-VL2, an advanced series of large Mixture-of-Experts (MoE) Vision-Language Models that significantly improves upon its predecessor, DeepSeek-VL. DeepSeek-VL2 demonstrates superior capabilities across various tasks, including but not limited to visual question answering, optical character recognition, document/table/chart understanding, and visual grounding.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 27,\n        \"activated_size_in_billions\": \"4_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-vl2\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-vl2\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 16,\n        \"activated_size_in_billions\": \"2_8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-vl2-small\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-vl2-small\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 3,\n        \"activated_size_in_billions\": 1,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-vl2-tiny\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/deepseek-vl2-tiny\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"\",\n    \"stop_token_ids\": [\n      1\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"updated_at\": 1769418522,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV2ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_vl_v2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"fin-r1\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Fin-R1 is a large language model specifically designed for the field of financial reasoning\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"SUFE-AIFLM-Lab/Fin-R1\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/Fin-R1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Fin-R1-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Fin-R1-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"JunHowie/Fin-R1-FP8-Dynamic\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"JunHowie/Fin-R1-FP8-Dynamic\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418523,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"gemma-3-1b-it\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 1,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"google/gemma-3-1b-it\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/gemma-3-1b-it\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 1,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"fp16\"\n            ],\n            \"model_id\": \"mlx-community/gemma-3-1b-it-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"fp16\"\n            ],\n            \"model_id\": \"mlx-community/gemma-3-1b-it-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 1,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"model_id\": \"bartowski/google_gemma-3-1b-it-GGUF\",\n            \"model_file_name_template\": \"google_gemma-3-1b-it-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"model_id\": \"bartowski/google_gemma-3-1b-it-GGUF\",\n            \"model_file_name_template\": \"google_gemma-3-1b-it-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{{ bos_token }}\\n{%- if messages[0]['role'] == 'system' -%}\\n    {%- if messages[0]['content'] is string -%}\\n        {%- set first_user_prefix = messages[0]['content'] + '\\n\\n' -%}\\n    {%- else -%}\\n        {%- set first_user_prefix = messages[0]['content'][0]['text'] + '\\n\\n' -%}\\n    {%- endif -%}\\n    {%- set loop_messages = messages[1:] -%}\\n{%- else -%}\\n    {%- set first_user_prefix = \\\"\\\" -%}\\n    {%- set loop_messages = messages -%}\\n{%- endif -%}\\n{%- for message in loop_messages -%}\\n    {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) -%}\\n        {{ raise_exception(\\\"Conversation roles must alternate user/assistant/user/assistant/...\\\") }}\\n    {%- endif -%}\\n    {%- if (message['role'] == 'assistant') -%}\\n        {%- set role = \\\"model\\\" -%}\\n    {%- else -%}\\n        {%- set role = message['role'] -%}\\n    {%- endif -%}\\n    {{ '<start_of_turn>' + role + '\\n' + (first_user_prefix if loop.first else \\\"\\\") }}\\n    {%- if message['content'] is string -%}\\n        {{ message['content'] | trim }}\\n    {%- elif message['content'] is iterable -%}\\n        {%- for item in message['content'] -%}\\n            {%- if item['type'] == 'image' -%}\\n                {{ '<start_of_image>' }}\\n            {%- elif item['type'] == 'text' -%}\\n                {{ item['text'] | trim }}\\n            {%- endif -%}\\n        {%- endfor -%}\\n    {%- else -%}\\n        {{ raise_exception(\\\"Invalid content type\\\") }}\\n    {%- endif -%}\\n    {{ '<end_of_turn>\\n' }}\\n{%- endfor -%}\\n{%- if add_generation_prompt -%}\\n    {{'<start_of_turn>model\\n'}}\\n{%- endif -%}\\n\",\n    \"stop_token_ids\": [\n      1,\n      105,\n      106\n    ],\n    \"stop\": [\n      \"<eos>\",\n      \"<end_of_turn>\",\n      \"<start_of_turn>\"\n    ],\n    \"updated_at\": 1769418524,\n    \"featured\": false,\n    \"architectures\": [\n      \"Gemma3ForCausalLM\"\n    ],\n    \"model_type\": \"gemma3_text\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"gemma-3-it\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"Gemma is a family of lightweight, state-of-the-art open models from Google, built from the same research and technology used to create the Gemini models.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"google/gemma-3-4b-it\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/gemma-3-4b-it\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"google/gemma-3-12b-it\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/gemma-3-12b-it\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 27,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"google/gemma-3-27b-it\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/gemma-3-27b-it\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"fp16\"\n            ],\n            \"model_id\": \"mlx-community/gemma-3-4b-it-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"fp16\"\n            ],\n            \"model_id\": \"mlx-community/gemma-3-4b-it-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"fp16\"\n            ],\n            \"model_id\": \"mlx-community/gemma-3-12b-it-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"fp16\"\n            ],\n            \"model_id\": \"mlx-community/gemma-3-12b-it-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 27,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"fp16\"\n            ],\n            \"model_id\": \"mlx-community/gemma-3-27b-it-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"fp16\"\n            ],\n            \"model_id\": \"mlx-community/gemma-3-27b-it-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-google_gemma-3-4b-it-f16.gguf\",\n              \"mmproj-google_gemma-3-4b-it-f32.gguf\",\n              \"mmproj-google_gemma-3-4b-it-bf16.gguf\"\n            ],\n            \"model_id\": \"bartowski/google_gemma-3-4b-it-GGUF\",\n            \"model_file_name_template\": \"google_gemma-3-4b-it-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-google_gemma-3-4b-it-f16.gguf\",\n              \"mmproj-google_gemma-3-4b-it-f32.gguf\",\n              \"mmproj-google_gemma-3-4b-it-bf16.gguf\"\n            ],\n            \"model_id\": \"bartowski/google_gemma-3-4b-it-GGUF\",\n            \"model_file_name_template\": \"google_gemma-3-4b-it-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-google_gemma-3-12b-it-f16.gguf\",\n              \"mmproj-google_gemma-3-12b-it-f32.gguf\",\n              \"mmproj-google_gemma-3-12b-it-bf16.gguf\"\n            ],\n            \"model_id\": \"bartowski/google_gemma-3-12b-it-GGUF\",\n            \"model_file_name_template\": \"google_gemma-3-12b-it-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-google_gemma-3-12b-it-f16.gguf\",\n              \"mmproj-google_gemma-3-12b-it-f32.gguf\",\n              \"mmproj-google_gemma-3-12b-it-bf16.gguf\"\n            ],\n            \"model_id\": \"bartowski/google_gemma-3-12b-it-GGUF\",\n            \"model_file_name_template\": \"google_gemma-3-12b-it-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 27,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-google_gemma-3-27b-it-f16.gguf\",\n              \"mmproj-google_gemma-3-27b-it-f32.gguf\",\n              \"mmproj-google_gemma-3-27b-it-bf16.gguf\"\n            ],\n            \"model_id\": \"bartowski/google_gemma-3-27b-it-GGUF\",\n            \"model_file_name_template\": \"google_gemma-3-27b-it-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-google_gemma-3-27b-it-f16.gguf\",\n              \"mmproj-google_gemma-3-27b-it-f32.gguf\",\n              \"mmproj-google_gemma-3-27b-it-bf16.gguf\"\n            ],\n            \"model_id\": \"bartowski/google_gemma-3-27b-it-GGUF\",\n            \"model_file_name_template\": \"google_gemma-3-27b-it-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{{ bos_token }}\\n{%- if messages[0]['role'] == 'system' -%}\\n    {%- if messages[0]['content'] is string -%}\\n        {%- set first_user_prefix = messages[0]['content'] + '\\n\\n' -%}\\n    {%- else -%}\\n        {%- set first_user_prefix = messages[0]['content'][0]['text'] + '\\n\\n' -%}\\n    {%- endif -%}\\n    {%- set loop_messages = messages[1:] -%}\\n{%- else -%}\\n    {%- set first_user_prefix = \\\"\\\" -%}\\n    {%- set loop_messages = messages -%}\\n{%- endif -%}\\n{%- for message in loop_messages -%}\\n    {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) -%}\\n        {{ raise_exception(\\\"Conversation roles must alternate user/assistant/user/assistant/...\\\") }}\\n    {%- endif -%}\\n    {%- if (message['role'] == 'assistant') -%}\\n        {%- set role = \\\"model\\\" -%}\\n    {%- else -%}\\n        {%- set role = message['role'] -%}\\n    {%- endif -%}\\n    {{ '<start_of_turn>' + role + '\\n' + (first_user_prefix if loop.first else \\\"\\\") }}\\n    {%- if message['content'] is string -%}\\n        {{ message['content'] | trim }}\\n    {%- elif message['content'] is iterable -%}\\n        {%- for item in message['content'] -%}\\n            {%- if item['type'] == 'image' -%}\\n                {{ '<start_of_image>' }}\\n            {%- elif item['type'] == 'text' -%}\\n                {{ item['text'] | trim }}\\n            {%- endif -%}\\n        {%- endfor -%}\\n    {%- else -%}\\n        {{ raise_exception(\\\"Invalid content type\\\") }}\\n    {%- endif -%}\\n    {{ '<end_of_turn>\\n' }}\\n{%- endfor -%}\\n{%- if add_generation_prompt -%}\\n    {{'<start_of_turn>model\\n'}}\\n{%- endif -%}\\n\",\n    \"stop_token_ids\": [\n      1,\n      105,\n      106\n    ],\n    \"stop\": [\n      \"<eos>\",\n      \"<end_of_turn>\",\n      \"<start_of_turn>\"\n    ],\n    \"updated_at\": 1769418525,\n    \"featured\": true,\n    \"architectures\": [\n      \"Gemma3ForConditionalGeneration\"\n    ],\n    \"model_type\": \"gemma3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"glm-4v\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"GLM4 is the open source version of the latest generation of pre-trained models in the GLM-4 series launched by Zhipu AI.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/glm-4v-9b\",\n            \"model_revision\": \"01328faefe122fe605c1c127b62e6031d3ffebf7\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/glm-4v-9b\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/glm-4v-9b\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"updated_at\": 1769418526,\n    \"featured\": false,\n    \"architectures\": [\n      \"ChatGLMModel\"\n    ],\n    \"model_type\": \"chatglm\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"glm-edge-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The GLM-Edge series is our attempt to face the end-side real-life scenarios, which consists of two sizes of large-language dialogue models and multimodal comprehension models (GLM-Edge-1.5B-Chat, GLM-Edge-4B-Chat, GLM-Edge-V-2B, GLM-Edge-V-5B). Among them, the 1.5B / 2B model is mainly for platforms such as mobile phones and cars, and the 4B / 5B model is mainly for platforms such as PCs.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/glm-edge-1.5b-chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/glm-edge-1.5b-chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"4\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/glm-edge-4b-chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/glm-edge-4b-chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"ggml-model-{quantization}.gguf\",\n            \"model_id\": \"zai-org/glm-edge-1.5b-chat-gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"ggml-model-{quantization}.gguf\",\n            \"model_id\": \"ZhipuAI/glm-edge-1.5b-chat-gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"F16\"\n            ],\n            \"model_file_name_template\": \"glm-edge-1.5B-chat-{quantization}.gguf\",\n            \"model_id\": \"zai-org/glm-edge-1.5b-chat-gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"F16\"\n            ],\n            \"model_file_name_template\": \"glm-edge-1.5B-chat-{quantization}.gguf\",\n            \"model_id\": \"ZhipuAI/glm-edge-1.5b-chat-gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"4\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"ggml-model-{quantization}.gguf\",\n            \"model_id\": \"zai-org/glm-edge-4b-chat-gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"ggml-model-{quantization}.gguf\",\n            \"model_id\": \"ZhipuAI/glm-edge-4b-chat-gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"4\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"F16\"\n            ],\n            \"model_file_name_template\": \"glm-edge-4B-chat-{quantization}.gguf\",\n            \"model_id\": \"zai-org/glm-edge-4b-chat-gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"F16\"\n            ],\n            \"model_file_name_template\": \"glm-edge-4B-chat-{quantization}.gguf\",\n            \"model_id\": \"ZhipuAI/glm-edge-4b-chat-gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for item in messages %}{% if item['role'] == 'system' %}<|system|>\\n{{ item['content'] }}{% elif item['role'] == 'user' %}<|user|>\\n{{ item['content'] }}{% elif item['role'] == 'assistant' %}<|assistant|>\\n{{ item['content'] }}{% endif %}{% endfor %}{% if add_generation_prompt %}<|assistant|>\\n{% endif %}\",\n    \"stop_token_ids\": [\n      59246,\n      59253,\n      59255\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"updated_at\": 1769418527,\n    \"featured\": false,\n    \"architectures\": [\n      \"GlmForCausalLM\"\n    ],\n    \"model_type\": \"glm\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"glm4-0414\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"The GLM family welcomes new members, the GLM-4-32B-0414 series models, featuring 32 billion parameters. Its performance is comparable to OpenAI’s GPT series and DeepSeek’s V3/R1 series\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/GLM-4-9B-0414\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4-9B-0414\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/GLM-4-32B-0414\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4-32B-0414\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4-9B-0414-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4-9B-0414-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4-32B-0414-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4-32B-0414-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q3_K_XL\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"model_id\": \"bartowski/THUDM_GLM-4-9B-0414-GGUF\",\n            \"model_file_name_template\": \"THUDM_GLM-4-9B-0414-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q3_K_XL\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\",\n              \"bf16\"\n            ],\n            \"model_id\": \"bartowski/THUDM_GLM-4-9B-0414-GGUF\",\n            \"model_file_name_template\": \"THUDM_GLM-4-9B-0414-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ2_S\",\n              \"IQ2_XS\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q3_K_XL\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"bartowski/THUDM_GLM-4-9B-0414-GGUF\",\n            \"model_file_name_template\": \"THUDM_GLM-4-9B-0414-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ2_S\",\n              \"IQ2_XS\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q3_K_XL\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"bartowski/THUDM_GLM-4-9B-0414-GGUF\",\n            \"model_file_name_template\": \"THUDM_GLM-4-9B-0414-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"[gMASK]<sop>{%- if tools -%}<|system|>\\n# 可用工具\\n{% for tool in tools %}{%- set function = tool.function if tool.get(\\\"function\\\") else tool %}\\n\\n## {{ function.name }}\\n\\n{{ function | tojson(indent=4, ensure_ascii=False) }}\\n在调用上述函数时，请使用 Json 格式表示调用的参数。{%- endfor %}{%- endif -%}{%- for msg in messages %}{%- if msg.role == 'system' %}<|system|>\\n{{ msg.content }}{%- endif %}{%- endfor %}{%- for message in messages if message.role != 'system' %}{%- set role = message['role'] %}{%- set content = message['content'] %}{%- set meta = message.get(\\\"metadata\\\", \\\"\\\") %}{%- if role == 'user' %}<|user|>\\n{{ content }}{%- elif role == 'assistant' and not meta %}<|assistant|>\\n{{ content }}{%- elif role == 'assistant' and meta %}<|assistant|>{{ meta }} \\n{{ content }}{%- elif role == 'observation' %}<|observation|>\\n{{ content }}{%- endif %}{%- endfor %}{% if add_generation_prompt %}<|assistant|>{% endif %}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"updated_at\": 1769418528,\n    \"featured\": false,\n    \"architectures\": [\n      \"Glm4ForCausalLM\"\n    ],\n    \"model_type\": \"glm4\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"glm4-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"GLM4 is the open source version of the latest generation of pre-trained models in the GLM-4 series launched by Zhipu AI.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/glm-4-9b-chat-hf\",\n            \"model_revision\": \"c7f73fd9e0f378c87f3c8f2c25aec6ad705043cd\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/glm-4-9b-chat-hf\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/glm-4-9b-chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"IQ3_XS\",\n              \"IQ3_S\",\n              \"IQ3_M\",\n              \"Q3_K_S\",\n              \"Q3_K_L\",\n              \"Q3_K\",\n              \"IQ4_XS\",\n              \"IQ4_NL\",\n              \"Q4_K_S\",\n              \"Q4_K\",\n              \"Q5_K_S\",\n              \"Q5_K\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"FP16\"\n            ],\n            \"model_file_name_template\": \"glm-4-9b-chat.{quantization}.gguf\",\n            \"model_id\": \"legraphista/glm-4-9b-chat-GGUF\",\n            \"model_revision\": \"0155a14edf0176863e9a003cdd78ce599e4d62c0\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"IQ3_XS\",\n              \"IQ3_S\",\n              \"IQ3_M\",\n              \"Q3_K_S\",\n              \"Q3_K_L\",\n              \"Q3_K\",\n              \"IQ4_XS\",\n              \"IQ4_NL\",\n              \"Q4_K_S\",\n              \"Q4_K\",\n              \"Q5_K_S\",\n              \"Q5_K\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"FP16\"\n            ],\n            \"model_file_name_template\": \"glm-4-9b-chat.{quantization}.gguf\",\n            \"model_id\": \"LLM-Research/glm-4-9b-chat-GGUF\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"[gMASK]<sop>{% for item in messages %}{% if item['tools'] is defined %}<|system|>\\n你是一个名为 ChatGLM 的人工智能助手。你是基于智谱AI训练的语言模型 GLM-4 模型开发的，你的任务是针对用户的问题和要求提供适当的答复和支持。\\n\\n# 可用工具{% set tools = item['tools'] %}{% for tool in tools %}{% if tool['type'] == 'function' %}\\n\\n## {{ tool['function']['name'] }}\\n\\n{{ tool['function'] | tojson(indent=4) }}\\n在调用上述函数时，请使用 Json 格式表示调用的参数。{% elif tool['type'] == 'python' %}\\n\\n## python\\n\\n当你向 `python` 发送包含 Python 代码的消息时，该代码将会在一个有状态的 Jupyter notebook 环境中执行。\\n`python` 返回代码执行的输出，或在执行 60 秒后返回超时。\\n`/mnt/data` 将会持久化存储你的文件。在此会话中，`python` 无法访问互联网。不要使用 `python` 进行任何网络请求或者在线 API 调用，这些在线内容的访问将不会成功。{% elif tool['type'] == 'simple_browser' %}\\n\\n## simple_browser\\n\\n你可以使用 `simple_browser` 工具。该工具支持以下函数：\\n`search(query: str, recency_days: int)`：使用搜索引擎进行查询并显示结果，可以使用 `recency_days` 参数控制搜索内容的时效性。\\n`mclick(ids: list[int])`：获取一系列指定 id 的页面内容。每次调用时，须选择3-10个页面。选择多个角度的页面，同时尽可能选择可信任的信息来源。考虑到部分页面是无法加载的，你也可以多打开一些可能有用的页面而不用担心内容过多。\\n`open_url(url: str)`：打开指定的 URL。\\n\\n使用 `【{引用 id}†{引用文本}】` 来引用内容。\\n\\n操作步骤：1. 使用 `search` 来获得信息列表; 2. 使用 `mclick` 来获取指定 ID 页面的内容; 3. 根据获得的内容进行回复。在回复中应当引用信息来源。\\n 如果用户提供了 URL，也可以用 `open_url` 直接打开页面。\\n如果初次搜索结果没有找到合适的信息，也可以再次使用 `search` 进行搜索。{% elif tool['type'] == 'cogview' %}\\n\\n## cogview\\n\\n如果用户的请求中包含了对图像的描述，你可以使用 `cogview` 来生成图像并展示给用户。你需要向 `cogview` 发送图像描述，规则：\\n- 发送给 `cogview` 的消息必须使用英语。用户的中文描述必须完全翻译为英语。\\n- 应当尽可能详细地描述图像生成的需求，需求描述约 100 英文单词。\\n- 保持用户原始描述的意图。不要虚构内容或者没见过的人物。\\n- 如无特殊说明，所在地为中国，持有中国立场并遵循中国社会主义价值观。{% endif %}{% endfor %}{% endif %}{% if item['content'] %}<|{{ item['role'] }}|>{{ item['metadata'] }}\\n{{ item['content'] }}{% endif %}{% endfor %}{% if add_generation_prompt %}<|assistant|>{% endif %}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"tool_parser\": \"glm4\",\n    \"updated_at\": 1769418529,\n    \"featured\": false,\n    \"architectures\": [\n      \"GlmForCausalLM\"\n    ],\n    \"model_type\": \"glm\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 1048576,\n    \"model_name\": \"glm4-chat-1m\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"GLM4 is the open source version of the latest generation of pre-trained models in the GLM-4 series launched by Zhipu AI.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/glm-4-9b-chat-1m-hf\",\n            \"model_revision\": \"0588cb62942f0f0a5545c695e5c1b019d64eabdc\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/glm-4-9b-chat-1m-hf\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/glm-4-9b-chat-1m\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"IQ3_XS\",\n              \"IQ3_S\",\n              \"IQ3_M\",\n              \"Q3_K_S\",\n              \"Q3_K_L\",\n              \"Q3_K\",\n              \"IQ4_XS\",\n              \"IQ4_NL\",\n              \"Q4_K_S\",\n              \"Q4_K\",\n              \"Q5_K_S\",\n              \"Q5_K\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"FP16\"\n            ],\n            \"model_file_name_template\": \"glm-4-9b-chat-1m.{quantization}.gguf\",\n            \"model_id\": \"legraphista/glm-4-9b-chat-1m-GGUF\",\n            \"model_revision\": \"782e28bd5eee3c514c07108da15e0b5e06dcf776\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"IQ3_XS\",\n              \"IQ3_S\",\n              \"IQ3_M\",\n              \"Q3_K_S\",\n              \"Q3_K_L\",\n              \"Q3_K\",\n              \"IQ4_XS\",\n              \"IQ4_NL\",\n              \"Q4_K_S\",\n              \"Q4_K\",\n              \"Q5_K_S\",\n              \"Q5_K\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"FP16\"\n            ],\n            \"model_file_name_template\": \"glm-4-9b-chat-1m.{quantization}.gguf\",\n            \"model_id\": \"LLM-Research/glm-4-9b-chat-1m-GGUF\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"[gMASK]<sop>{% for item in messages %}{% if item['tools'] is defined %}<|system|>\\n你是一个名为 GLM-4 的人工智能助手。你是基于智谱AI训练的语言模型 GLM-4 模型开发的，你的任务是针对用户的问题和要求提供适当的答复和支持。\\n\\n# 可用工具{% set tools = item['tools'] %}{% for tool in tools %}{% if tool['type'] == 'function' %}\\n\\n## {{ tool['function']['name'] }}\\n\\n{{ tool['function'] | tojson(indent=4) }}\\n在调用上述函数时，请使用 Json 格式表示调用的参数。{% elif tool['type'] == 'python' %}\\n\\n## python\\n\\n当你向 `python` 发送包含 Python 代码的消息时，该代码将会在一个有状态的 Jupyter notebook 环境中执行。\\n`python` 返回代码执行的输出，或在执行 60 秒后返回超时。\\n`/mnt/data` 将会持久化存储你的文件。在此会话中，`python` 无法访问互联网。不要使用 `python` 进行任何网络请求或者在线 API 调用，这些在线内容的访问将不会成功。{% elif tool['type'] == 'simple_browser' %}\\n\\n## simple_browser\\n\\n你可以使用 `simple_browser` 工具。该工具支持以下函数：\\n`search(query: str, recency_days: int)`：使用搜索引擎进行查询并显示结果，可以使用 `recency_days` 参数控制搜索内容的时效性。\\n`mclick(ids: list[int])`：获取一系列指定 id 的页面内容。每次调用时，须选择3-10个页面。选择多个角度的页面，同时尽可能选择可信任的信息来源。考虑到部分页面是无法加载的，你也可以多打开一些可能有用的页面而不用担心内容过多。\\n`open_url(url: str)`：打开指定的 URL。\\n\\n使用 `【{引用 id}†{引用文本}】` 来引用内容。\\n\\n操作步骤：1. 使用 `search` 来获得信息列表; 2. 使用 `mclick` 来获取指定 ID 页面的内容; 3. 根据获得的内容进行回复。在回复中应当引用信息来源。\\n 如果用户提供了 URL，也可以用 `open_url` 直接打开页面。\\n如果初次搜索结果没有找到合适的信息，也可以再次使用 `search` 进行搜索。{% elif tool['type'] == 'cogview' %}\\n\\n## cogview\\n\\n如果用户的请求中包含了对图像的描述，你可以使用 `cogview` 来生成图像并展示给用户。你需要向 `cogview` 发送图像描述，规则：\\n- 发送给 `cogview` 的消息必须使用英语。用户的中文描述必须完全翻译为英语。\\n- 应当尽可能详细地描述图像生成的需求，需求描述约 100 英文单词。\\n- 保持用户原始描述的意图。不要虚构内容或者没见过的人物。\\n- 如无特殊说明，所在地为中国，持有中国立场并遵循中国社会主义价值观。{% endif %}{% endfor %}{% endif %}{% if item['content'] %}<|{{ item['role'] }}|>{{ item['metadata'] }}\\n{{ item['content'] }}{% endif %}{% endfor %}{% if add_generation_prompt %}<|assistant|>{% endif %}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"tool_parser\": \"glm4\",\n    \"updated_at\": 1769418530,\n    \"featured\": false,\n    \"architectures\": [\n      \"GlmForCausalLM\"\n    ],\n    \"model_type\": \"glm\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"internlm3-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"InternLM3 has open-sourced an 8-billion parameter instruction model, InternLM3-8B-Instruct, designed for general-purpose usage and advanced reasoning.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"internlm/internlm3-8b-instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Shanghai_AI_Laboratory/internlm3-8b-instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"internlm/internlm3-8b-instruct-gptq-int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Shanghai_AI_Laboratory/internlm3-8b-instruct-gptq-int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"internlm/internlm3-8b-instruct-awq\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Shanghai_AI_Laboratory/internlm3-8b-instruct-awq\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"internlm/internlm3-8b-instruct-gguf\",\n            \"model_file_name_template\": \"internlm3-8b-instruct-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Shanghai_AI_Laboratory/internlm3-8b-instruct-gguf\",\n            \"model_file_name_template\": \"internlm3-8b-instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/internlm3-8b-instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/internlm3-8b-instruct-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{{ bos_token }}{% for message in messages %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      2,\n      128131\n    ],\n    \"stop\": [\n      \"</s>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418531,\n    \"featured\": false,\n    \"architectures\": [\n      \"InternLM3ForCausalLM\"\n    ],\n    \"model_type\": \"internlm3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"llama-2-chat\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Llama-2-Chat is a fine-tuned version of the Llama-2 LLM, specializing in chatting.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Llama-2-7b-chat-hf\",\n            \"model_revision\": \"08751db2aca9bf2f7f80d2e516117a53d7450235\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"modelscope/Llama-2-7b-chat-ms\",\n            \"model_revision\": \"v1.0.5\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Llama-2-13b-chat-hf\",\n            \"model_revision\": \"0ba94ac9b9e1d5a0037780667e8b219adde1908c\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"modelscope/Llama-2-13b-chat-ms\",\n            \"model_revision\": \"v1.0.2\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Llama-2-70b-chat-hf\",\n            \"model_revision\": \"36d9a7388cc80e5f4b3e9701ca2f250d21a96c30\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"modelscope/Llama-2-70b-chat-ms\",\n            \"model_revision\": \"v1.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-7B-Chat-GGUF\",\n            \"model_file_name_template\": \"llama-2-7b-chat.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/Llama-2-7b-Chat-GGUF\",\n            \"model_file_name_template\": \"llama-2-7b-chat.{quantization}.gguf\",\n            \"model_revision\": \"v0.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-13B-chat-GGUF\",\n            \"model_file_name_template\": \"llama-2-13b-chat.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/Llama-2-13b-Chat-GGUF\",\n            \"model_file_name_template\": \"llama-2-13b-chat.{quantization}.gguf\",\n            \"model_revision\": \"v0.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\"\n            ],\n            \"quantization_parts\": {\n              \"Q6_K\": [\n                \"split-a\",\n                \"split-b\"\n              ],\n              \"Q8_0\": [\n                \"split-a\",\n                \"split-b\"\n              ]\n            },\n            \"model_id\": \"TheBloke/Llama-2-70B-Chat-GGUF\",\n            \"model_file_name_template\": \"llama-2-70b-chat.{quantization}.gguf\",\n            \"model_file_name_split_template\": \"llama-2-70b-chat.{quantization}.gguf-{part}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-7B-Chat-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-70B-Chat-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-70B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-7B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-13B-chat-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Llama-2-13B-chat-AWQ\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if messages[0]['role'] == 'system' %}{% set system_message = '<<SYS>>\\n' + messages[0]['content'] | trim + '\\n<</SYS>>\\n\\n' %}{% set messages = messages[1:] %}{% else %}{% set system_message = '' %}{% endif %}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if loop.index0 == 0 %}{% set content = system_message + message['content'] %}{% else %}{% set content = message['content'] %}{% endif %}{% if message['role'] == 'user' %}{{ '<s>' + '[INST] ' + content | trim + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ ' ' + content | trim + ' ' + '</s>' }}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [],\n    \"featured\": false,\n    \"updated_at\": 1769418532,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"llama-3\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Llama 3 is an auto-regressive language model that uses an optimized transformer architecture\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3-8B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3-8B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"QuantFactory/Meta-Llama-3-8B-GGUF\",\n            \"model_file_name_template\": \"Meta-Llama-3-8B.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3-70B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3-70B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q4_K_M\",\n              \"Q5_K_M\"\n            ],\n            \"model_id\": \"NousResearch/Meta-Llama-3-70B-GGUF\",\n            \"model_file_name_template\": \"Meta-Llama-3-70B-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418533,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"llama-3-instruct\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The Llama 3 instruction tuned models are optimized for dialogue use cases and outperform many of the available open source chat models on common industry benchmarks..\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3-8B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3-8B-Instruct\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"wuhaicc/Meta-Llama-3-8B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3-70B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3-70B-Instruct\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"wuhaicc/Meta-Llama-3-70B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ3_M\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"lmstudio-community/Meta-Llama-3-8B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Meta-Llama-3-8B-Instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ1_M\",\n              \"IQ2_XS\",\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"lmstudio-community/Meta-Llama-3-70B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Meta-Llama-3-70B-Instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3-8B-Instruct-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3-8B-Instruct-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3-8B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3-70B-Instruct-4bit-mlx\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3-70B-Instruct-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3-70B-Instruct-mlx-unquantized\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TechxGenus/Meta-Llama-3-8B-Instruct-GPTQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"swift/Meta-Llama-3-8B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TechxGenus/Meta-Llama-3-70B-Instruct-GPTQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"swift/Meta-Llama-3-70B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% set loop_messages = messages %}{% for message in loop_messages %}{% set content = '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\n\\n'+ message['content'] | trim + '<|eot_id|>' %}{% if loop.index0 == 0 %}{% set content = '<|begin_of_text|>' + content %}{% endif %}{{ content }}{% endfor %}{% if add_generation_prompt %}{{ '<|start_header_id|>assistant<|end_header_id|>\\n\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      128001,\n      128009\n    ],\n    \"stop\": [\n      \"<|end_of_text|>\",\n      \"<|eot_id|>\"\n    ],\n    \"updated_at\": 1769418534,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"llama-3.1\",\n    \"model_lang\": [\n      \"en\",\n      \"de\",\n      \"fr\",\n      \"it\",\n      \"pt\",\n      \"hi\",\n      \"es\",\n      \"th\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Llama 3.1 is an auto-regressive language model that uses an optimized transformer architecture\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3.1-8B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-8B\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/Meta-Llama-3.1-8B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"QuantFactory/Meta-Llama-3.1-8B-GGUF\",\n            \"model_file_name_template\": \"Meta-Llama-3.1-8B.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3.1-70B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-70B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 405,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3.1-405B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-405B\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418535,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"llama-3.1-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"de\",\n      \"fr\",\n      \"it\",\n      \"pt\",\n      \"hi\",\n      \"es\",\n      \"th\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"The Llama 3.1 instruction tuned models are optimized for dialogue use cases and outperform many of the available open source chat models on common industry benchmarks..\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3.1-8B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-8B-Instruct\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/Meta-Llama-3.1-8B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-8B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"hugging-quants/Meta-Llama-3.1-8B-Instruct-GPTQ-INT4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-8B-Instruct-GPTQ-INT4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-8B-Instruct-AWQ-INT4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3.1-70B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-70B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"unsloth/Meta-Llama-3.1-70B-Instruct-bnb-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-70B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"hugging-quants/Meta-Llama-3.1-70B-Instruct-GPTQ-INT4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-70B-Instruct-GPTQ-INT4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"hugging-quants/Meta-Llama-3.1-70B-Instruct-AWQ-INT4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-70B-Instruct-AWQ-INT4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 405,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3.1-405B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-405B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 405,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"hugging-quants/Meta-Llama-3.1-405B-Instruct-GPTQ-INT4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-405B-Instruct-GPTQ-INT4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 405,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"hugging-quants/Meta-Llama-3.1-405B-Instruct-AWQ-INT4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-405B-Instruct-AWQ-INT4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q3_K_L\",\n              \"IQ4_XS\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Meta-Llama-3.1-8B-Instruct-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q3_K_L\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"LLM-Research/Meta-Llama-3.1-8B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Meta-Llama-3.1-8B-Instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"quantization_parts\": {\n              \"Q5_K_M\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"lmstudio-community/Meta-Llama-3.1-70B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Meta-Llama-3.1-70B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Meta-Llama-3.1-70B-Instruct-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3.1-8B-Instruct-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3.1-8B-Instruct-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3.1-8B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3.1-70B-Instruct-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3.1-70B-Instruct-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Meta-Llama-3.1-70B-Instruct-bf16\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{{- bos_token }}\\n{%- if custom_tools is defined %}\\n    {%- set tools = custom_tools %}\\n{%- endif %}\\n{%- if not tools_in_user_message is defined %}\\n    {%- set tools_in_user_message = true %}\\n{%- endif %}\\n{%- if not date_string is defined %}\\n    {%- set date_string = \\\"26 Jul 2024\\\" %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n    {%- set tools = none %}\\n{%- endif %}\\n\\n{#- This block extracts the system message, so we can slot it into the right place. #}\\n{%- if messages[0]['role'] == 'system' %}\\n    {%- set system_message = messages[0]['content']|trim %}\\n    {%- set messages = messages[1:] %}\\n{%- else %}\\n    {%- set system_message = \\\"\\\" %}\\n{%- endif %}\\n\\n{#- System message + builtin tools #}\\n{{- \\\"<|start_header_id|>system<|end_header_id|>\\\\n\\\\n\\\" }}\\n{%- if builtin_tools is defined or tools is not none %}\\n    {{- \\\"Environment: ipython\\\\n\\\" }}\\n{%- endif %}\\n{%- if builtin_tools is defined %}\\n    {{- \\\"Tools: \\\" + builtin_tools | reject('equalto', 'code_interpreter') | join(\\\", \\\") + \\\"\\\\n\\\\n\\\"}}\\n{%- endif %}\\n{{- \\\"Cutting Knowledge Date: December 2023\\\\n\\\" }}\\n{{- \\\"Today Date: \\\" + date_string + \\\"\\\\n\\\\n\\\" }}\\n{%- if tools is not none and not tools_in_user_message %}\\n    {{- \\\"You have access to the following functions. To call a function, please respond with JSON for a function call.\\\" }}\\n    {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n    {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n    {%- for t in tools %}\\n        {{- t | tojson(indent=4) }}\\n        {{- \\\"\\\\n\\\\n\\\" }}\\n    {%- endfor %}\\n{%- endif %}\\n{{- system_message }}\\n{{- \\\"<|eot_id|>\\\" }}\\n\\n{#- Custom tools are passed in a user message with some extra guidance #}\\n{%- if tools_in_user_message and not tools is none %}\\n    {#- Extract the first user message so we can plug it in here #}\\n    {%- if messages | length != 0 %}\\n        {%- set first_user_message = messages[0]['content']|trim %}\\n        {%- set messages = messages[1:] %}\\n    {%- else %}\\n        {{- raise_exception(\\\"Cannot put tools in the first user message when there's no first user message!\\\") }}\\n{%- endif %}\\n    {{- '<|start_header_id|>user<|end_header_id|>\\\\n\\\\n' -}}\\n    {{- \\\"Given the following functions, please respond with a JSON for a function call \\\" }}\\n    {{- \\\"with its proper arguments that best answers the given prompt.\\\\n\\\\n\\\" }}\\n    {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n    {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n    {%- for t in tools %}\\n        {{- t | tojson(indent=4) }}\\n        {{- \\\"\\\\n\\\\n\\\" }}\\n    {%- endfor %}\\n    {{- first_user_message + \\\"<|eot_id|>\\\"}}\\n{%- endif %}\\n\\n{%- for message in messages %}\\n    {%- if not (message.role == 'ipython' or message.role == 'tool' or 'tool_calls' in message) %}\\n        {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\\\n\\\\n'+ message['content'] | trim + '<|eot_id|>' }}\\n    {%- elif 'tool_calls' in message %}\\n        {%- if not message.tool_calls|length == 1 %}\\n            {{- raise_exception(\\\"This model only supports single tool-calls at once!\\\") }}\\n        {%- endif %}\\n        {%- set tool_call = message.tool_calls[0].function %}\\n        {%- if builtin_tools is defined and tool_call.name in builtin_tools %}\\n            {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n            {{- \\\"<|python_tag|>\\\" + tool_call.name + \\\".call(\\\" }}\\n            {%- for arg_name, arg_val in tool_call.arguments | items %}\\n                {{- arg_name + '=\\\"' + arg_val + '\\\"' }}\\n                {%- if not loop.last %}\\n                    {{- \\\", \\\" }}\\n                {%- endif %}\\n                {%- endfor %}\\n            {{- \\\")\\\" }}\\n        {%- else  %}\\n            {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n            {{- '{\\\"name\\\": \\\"' + tool_call.name + '\\\", ' }}\\n            {{- '\\\"parameters\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- \\\"}\\\" }}\\n        {%- endif %}\\n        {%- if builtin_tools is defined %}\\n            {#- This means we're in ipython mode #}\\n            {{- \\\"<|eom_id|>\\\" }}\\n        {%- else %}\\n            {{- \\\"<|eot_id|>\\\" }}\\n        {%- endif %}\\n    {%- elif message.role == \\\"tool\\\" or message.role == \\\"ipython\\\" %}\\n        {{- \\\"<|start_header_id|>ipython<|end_header_id|>\\\\n\\\\n\\\" }}\\n        {%- if message.content is mapping or message.content is iterable %}\\n            {{- message.content | tojson }}\\n        {%- else %}\\n            {{- message.content }}\\n        {%- endif %}\\n        {{- \\\"<|eot_id|>\\\" }}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      128001,\n      128008,\n      128009\n    ],\n    \"stop\": [\n      \"<|end_of_text|>\",\n      \"<|eot_id|>\",\n      \"<|eom_id|>\"\n    ],\n    \"tool_parser\": \"llama3\",\n    \"updated_at\": 1769418535,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"llama-3.2-vision\",\n    \"model_lang\": [\n      \"en\",\n      \"de\",\n      \"fr\",\n      \"it\",\n      \"pt\",\n      \"hi\",\n      \"es\",\n      \"th\"\n    ],\n    \"model_ability\": [\n      \"generate\",\n      \"vision\"\n    ],\n    \"model_description\": \"The Llama 3.2-Vision instruction-tuned models are optimized for visual recognition, image reasoning, captioning, and answering general questions about an image...\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 11,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3.2-11B-Vision\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Llama-3.2-11B-Vision\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 90,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Meta-Llama-3.2-90B-Vision\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Llama-3.2-90B-Vision\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418536,\n    \"featured\": false,\n    \"architectures\": [\n      \"MllamaForConditionalGeneration\"\n    ],\n    \"model_type\": \"mllama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"llama-3.2-vision-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"de\",\n      \"fr\",\n      \"it\",\n      \"pt\",\n      \"hi\",\n      \"es\",\n      \"th\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"Llama 3.2-Vision instruction-tuned models are optimized for visual recognition, image reasoning, captioning, and answering general questions about an image...\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 11,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Llama-3.2-11B-Vision-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Llama-3.2-11B-Vision-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 90,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Llama-3.2-90B-Vision-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Llama-3.2-90B-Vision-Instruct\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if loop.index0 == 0 %}{{ bos_token }}{% endif %}{{ '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\n\\n' }}{% if message['content'] is string %}{{ message['content'] }}{% else %}{% for content in message['content'] %}{% if content['type'] == 'image' %}{{ '<|image|>' }}{% elif content['type'] == 'text' %}{{ content['text'] }}{% endif %}{% endfor %}{% endif %}{{ '<|eot_id|>' }}{% endfor %}{% if add_generation_prompt %}{{ '<|start_header_id|>assistant<|end_header_id|>\\n\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      128001,\n      128008,\n      128009\n    ],\n    \"stop\": [\n      \"<|end_of_text|>\",\n      \"<|eot_id|>\",\n      \"<|eom_id|>\"\n    ],\n    \"updated_at\": 1769418537,\n    \"featured\": false,\n    \"architectures\": [\n      \"MllamaForConditionalGeneration\"\n    ],\n    \"model_type\": \"mllama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"llama-3.3-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"de\",\n      \"fr\",\n      \"it\",\n      \"pt\",\n      \"hi\",\n      \"es\",\n      \"th\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"The Llama 3.3 instruction tuned models are optimized for dialogue use cases and outperform many of the available open source chat models on common industry benchmarks..\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"meta-llama/Llama-3.3-70B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Llama-3.3-70B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"shuyuej/Llama-3.3-70B-Instruct-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"casperhansen/llama-3.3-70b-instruct-awq\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"fp16\"\n            ],\n            \"model_id\": \"mlx-community/Llama-3.3-70B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q3_K_L\",\n              \"Q4_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"quantization_parts\": {\n              \"Q6_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"lmstudio-community/Llama-3.3-70B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Llama-3.3-70B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Llama-3.3-70B-Instruct-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q3_K_L\",\n              \"Q4_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"quantization_parts\": {\n              \"Q6_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"lmstudio-community/Llama-3.3-70B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Llama-3.3-70B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Llama-3.3-70B-Instruct-{quantization}-{part}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{{- bos_token }}\\n{%- if custom_tools is defined %}\\n    {%- set tools = custom_tools %}\\n{%- endif %}\\n{%- if not tools_in_user_message is defined %}\\n    {%- set tools_in_user_message = true %}\\n{%- endif %}\\n{%- if not date_string is defined %}\\n    {%- set date_string = \\\"26 Jul 2024\\\" %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n    {%- set tools = none %}\\n{%- endif %}\\n\\n{#- This block extracts the system message, so we can slot it into the right place. #}\\n{%- if messages[0]['role'] == 'system' %}\\n    {%- set system_message = messages[0]['content']|trim %}\\n    {%- set messages = messages[1:] %}\\n{%- else %}\\n    {%- set system_message = \\\"\\\" %}\\n{%- endif %}\\n\\n{#- System message + builtin tools #}\\n{{- \\\"<|start_header_id|>system<|end_header_id|>\\\\n\\\\n\\\" }}\\n{%- if builtin_tools is defined or tools is not none %}\\n    {{- \\\"Environment: ipython\\\\n\\\" }}\\n{%- endif %}\\n{%- if builtin_tools is defined %}\\n    {{- \\\"Tools: \\\" + builtin_tools | reject('equalto', 'code_interpreter') | join(\\\", \\\") + \\\"\\\\n\\\\n\\\"}}\\n{%- endif %}\\n{{- \\\"Cutting Knowledge Date: December 2023\\\\n\\\" }}\\n{{- \\\"Today Date: \\\" + date_string + \\\"\\\\n\\\\n\\\" }}\\n{%- if tools is not none and not tools_in_user_message %}\\n    {{- \\\"You have access to the following functions. To call a function, please respond with JSON for a function call.\\\" }}\\n    {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n    {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n    {%- for t in tools %}\\n        {{- t | tojson(indent=4) }}\\n        {{- \\\"\\\\n\\\\n\\\" }}\\n    {%- endfor %}\\n{%- endif %}\\n{{- system_message }}\\n{{- \\\"<|eot_id|>\\\" }}\\n\\n{#- Custom tools are passed in a user message with some extra guidance #}\\n{%- if tools_in_user_message and not tools is none %}\\n    {#- Extract the first user message so we can plug it in here #}\\n    {%- if messages | length != 0 %}\\n        {%- set first_user_message = messages[0]['content']|trim %}\\n        {%- set messages = messages[1:] %}\\n    {%- else %}\\n        {{- raise_exception(\\\"Cannot put tools in the first user message when there's no first user message!\\\") }}\\n{%- endif %}\\n    {{- '<|start_header_id|>user<|end_header_id|>\\\\n\\\\n' -}}\\n    {{- \\\"Given the following functions, please respond with a JSON for a function call \\\" }}\\n    {{- \\\"with its proper arguments that best answers the given prompt.\\\\n\\\\n\\\" }}\\n    {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n    {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n    {%- for t in tools %}\\n        {{- t | tojson(indent=4) }}\\n        {{- \\\"\\\\n\\\\n\\\" }}\\n    {%- endfor %}\\n    {{- first_user_message + \\\"<|eot_id|>\\\"}}\\n{%- endif %}\\n\\n{%- for message in messages %}\\n    {%- if not (message.role == 'ipython' or message.role == 'tool' or 'tool_calls' in message) %}\\n        {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\\\n\\\\n'+ message['content'] | trim + '<|eot_id|>' }}\\n    {%- elif 'tool_calls' in message %}\\n        {%- if not message.tool_calls|length == 1 %}\\n            {{- raise_exception(\\\"This model only supports single tool-calls at once!\\\") }}\\n        {%- endif %}\\n        {%- set tool_call = message.tool_calls[0].function %}\\n        {%- if builtin_tools is defined and tool_call.name in builtin_tools %}\\n            {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n            {{- \\\"<|python_tag|>\\\" + tool_call.name + \\\".call(\\\" }}\\n            {%- for arg_name, arg_val in tool_call.arguments | items %}\\n                {{- arg_name + '=\\\"' + arg_val + '\\\"' }}\\n                {%- if not loop.last %}\\n                    {{- \\\", \\\" }}\\n                {%- endif %}\\n                {%- endfor %}\\n            {{- \\\")\\\" }}\\n        {%- else  %}\\n            {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n            {{- '{\\\"name\\\": \\\"' + tool_call.name + '\\\", ' }}\\n            {{- '\\\"parameters\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- \\\"}\\\" }}\\n        {%- endif %}\\n        {%- if builtin_tools is defined %}\\n            {#- This means we're in ipython mode #}\\n            {{- \\\"<|eom_id|>\\\" }}\\n        {%- else %}\\n            {{- \\\"<|eot_id|>\\\" }}\\n        {%- endif %}\\n    {%- elif message.role == \\\"tool\\\" or message.role == \\\"ipython\\\" %}\\n        {{- \\\"<|start_header_id|>ipython<|end_header_id|>\\\\n\\\\n\\\" }}\\n        {%- if message.content is mapping or message.content is iterable %}\\n            {{- message.content | tojson }}\\n        {%- else %}\\n            {{- message.content }}\\n        {%- endif %}\\n        {{- \\\"<|eot_id|>\\\" }}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      128001,\n      128008,\n      128009\n    ],\n    \"stop\": [\n      \"<|end_of_text|>\",\n      \"<|eot_id|>\",\n      \"<|eom_id|>\"\n    ],\n    \"updated_at\": 1769418538,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"marco-o1\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"Marco-o1: Towards Open Reasoning Models for Open-Ended Solutions\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Marco-o1\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AIDC-AI/Marco-o1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"QuantFactory/Marco-o1-GGUF\",\n            \"model_file_name_template\": \"Marco-o1.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Marco-o1.{quantization}.gguf\",\n            \"model_id\": \"QuantFactory/Marco-o1-GGUF\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\\n\\n你是一个经过良好训练的AI助手，你的名字是Marco-o1.由阿里国际数字商业集团的AI Business创造.\\n        \\n## 重要！！！！！\\n当你回答问题时，你的思考应该在<Thought>内完成，<Output>内输出你的结果。\\n<Thought>应该尽可能是英文，但是有2个特例，一个是对原文中的引用，另一个是是数学应该使用markdown格式，<Output>内的输出需要遵循用户输入的语言。\\n        <|im_end|>\\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418539,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"minicpm-2b-dpo-bf16\",\n    \"model_lang\": [\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM-2B-dpo-bf16\",\n            \"model_revision\": \"f4a3ba49f3f18695945c2a7c12400d4da99da498\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM-2B-dpo-bf16\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/MiniCPM-2B-dpo-bf16\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if message['role'] == 'user' %}{{'<用户>' + message['content'].strip() + '<AI>'}}{% else %}{{message['content'].strip()}}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      1,\n      2\n    ],\n    \"stop\": [\n      \"<s>\",\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418540,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniCPMForCausalLM\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"minicpm-2b-dpo-fp16\",\n    \"model_lang\": [\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM-2B-dpo-fp16\",\n            \"model_revision\": \"e7a50289e4f839674cf8d4a5a2ce032ccacf64ac\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM-2B-dpo-fp16\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if message['role'] == 'user' %}{{'<用户>' + message['content'].strip() + '<AI>'}}{% else %}{{message['content'].strip()}}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      1,\n      2\n    ],\n    \"stop\": [\n      \"<s>\",\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418541,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniCPMForCausalLM\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"minicpm-2b-dpo-fp32\",\n    \"model_lang\": [\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM-2B-dpo-fp32\",\n            \"model_revision\": \"b560a1593779b735a84a6daf72fba96ae38da288\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM-2B-dpo-fp32\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if message['role'] == 'user' %}{{'<用户>' + message['content'].strip() + '<AI>'}}{% else %}{{message['content'].strip()}}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      1,\n      2\n    ],\n    \"stop\": [\n      \"<s>\",\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418542,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniCPMForCausalLM\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"minicpm-2b-sft-bf16\",\n    \"model_lang\": [\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM-2B-sft-bf16\",\n            \"model_revision\": \"fe1d74027ebdd81cef5f815fa3a2d432a6b5de2a\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/miniCPM-bf16\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/MiniCPM-2B-sft-bf16\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if message['role'] == 'user' %}{{'<用户>' + message['content'].strip() + '<AI>'}}{% else %}{{message['content'].strip()}}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      1,\n      2\n    ],\n    \"stop\": [\n      \"<s>\",\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418543,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniCPMForCausalLM\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"minicpm-2b-sft-fp32\",\n    \"model_lang\": [\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM-2B-sft-fp32\",\n            \"model_revision\": \"35b90dd57d977b6e5bc4907986fa5b77aa15a82e\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM-2B-sft-fp32\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if message['role'] == 'user' %}{{'<用户>' + message['content'].strip() + '<AI>'}}{% else %}{{message['content'].strip()}}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      1,\n      2\n    ],\n    \"stop\": [\n      \"<s>\",\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418544,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniCPMForCausalLM\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"minicpm3-4b\",\n    \"model_lang\": [\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"MiniCPM3-4B is the 3rd generation of MiniCPM series. The overall performance of MiniCPM3-4B surpasses Phi-3.5-mini-Instruct and GPT-3.5-Turbo-0125, being comparable with many recent 7B~9B models.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM3-4B\",\n            \"model_revision\": \"75f9f1097d9d66d11f37fff49210bf940455f8ac\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM3-4B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/MiniCPM3-4B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM3-4B-GPTQ-Int4\",\n            \"model_revision\": \"97a66a62f7d09c1ee35b087b42694716a8113dce\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM3-4B-GPTQ-Int4\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      1,\n      2\n    ],\n    \"stop\": [\n      \"<s>\",\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418545,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniCPM3ForCausalLM\"\n    ],\n    \"model_type\": \"minicpm3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"minicpm4\",\n    \"model_lang\": [\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"MiniCPM4 series are highly efficient large language models (LLMs) designed explicitly for end-side devices, which achieves this efficiency through systematic innovation in four key dimensions: model architecture, training data, training algorithms, and inference systems.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"JunHowie/MiniCPM4-0.5B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"JunHowie/MiniCPM4-0.5B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"JunHowie/MiniCPM4-8B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"JunHowie/MiniCPM4-8B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/MiniCPM4-8B-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/MiniCPM4-8B-4bit\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      2,\n      73440\n    ],\n    \"stop\": [\n      \"</s>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418546,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniCPMForCausalLM\"\n    ],\n    \"model_type\": \"minicpm\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"mistral-instruct-v0.1\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Mistral-7B-Instruct is a fine-tuned version of the Mistral-7B LLM on public datasets, specializing in chatting.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Mistral-7B-Instruct-v0.1\",\n            \"model_revision\": \"54766df6d50e4d3d7ccd66758e5341ba105a6d36\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Xorbits/Mistral-7B-Instruct-v0.1\",\n            \"model_revision\": \"v1.0.0\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Mistral-7B-Instruct-v0.1-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Mistral-7B-Instruct-v0.1-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Mistral-7B-Instruct-v0.1-GGUF\",\n            \"model_file_name_template\": \"mistral-7b-instruct-v0.1.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if messages[0]['role'] == 'system' %}\\n    {%- set system_message = messages[0]['content'] %}\\n    {%- set loop_messages = messages[1:] %}\\n{%- else %}\\n    {%- set loop_messages = messages %}\\n{%- endif %}\\n\\n{{- '<s>' }}\\n{%- for message in loop_messages %}\\n    {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}\\n        {{- raise_exception('After the optional system message, conversation roles must alternate user/assistant/user/assistant/...') }}\\n    {%- endif %}\\n    {%- if message['role'] == 'user' %}\\n        {%- if loop.first and system_message is defined %}\\n            {{- ' [INST] ' + system_message + '\\n\\n' + message['content'] + ' [/INST]' }}\\n        {%- else %}\\n            {{- ' [INST] ' + message['content'] + ' [/INST]' }}\\n        {%- endif %}\\n    {%- elif message['role'] == 'assistant' %}\\n        {{- ' ' + message['content'] + '</s>'}}\\n    {%- else %}\\n        {{- raise_exception('Only user and assistant roles are supported, with the exception of an initial optional system message!') }}\\n    {%- endif %}\\n{%- endfor %}\\n\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418547,\n    \"featured\": false,\n    \"architectures\": [\n      \"MistralForCausalLM\"\n    ],\n    \"model_type\": \"mistral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"mistral-instruct-v0.2\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The Mistral-7B-Instruct-v0.2 Large Language Model (LLM) is an improved instruct fine-tuned version of Mistral-7B-Instruct-v0.1.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Mistral-7B-Instruct-v0.2\",\n            \"model_revision\": \"b70aa86578567ba3301b21c8a27bea4e8f6d6d61\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/Mistral-7B-Instruct-v0.2\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Mistral-7B-Instruct-v0.2-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Mistral-7B-Instruct-v0.2-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Mistral-7B-Instruct-v0.2-GGUF\",\n            \"model_file_name_template\": \"mistral-7b-instruct-v0.2.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/Mistral-7B-Instruct-v0.2-GGUF\",\n            \"model_file_name_template\": \"mistral-7b-instruct-v0.2.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if messages[0]['role'] == 'system' %}\\n    {%- set system_message = messages[0]['content'] %}\\n    {%- set loop_messages = messages[1:] %}\\n{%- else %}\\n    {%- set loop_messages = messages %}\\n{%- endif %}\\n\\n{{- '<s>' }}\\n{%- for message in loop_messages %}\\n    {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}\\n        {{- raise_exception('After the optional system message, conversation roles must alternate user/assistant/user/assistant/...') }}\\n    {%- endif %}\\n    {%- if message['role'] == 'user' %}\\n        {%- if loop.first and system_message is defined %}\\n            {{- ' [INST] ' + system_message + '\\n\\n' + message['content'] + ' [/INST]' }}\\n        {%- else %}\\n            {{- ' [INST] ' + message['content'] + ' [/INST]' }}\\n        {%- endif %}\\n    {%- elif message['role'] == 'assistant' %}\\n        {{- ' ' + message['content'] + '</s>'}}\\n    {%- else %}\\n        {{- raise_exception('Only user and assistant roles are supported, with the exception of an initial optional system message!') }}\\n    {%- endif %}\\n{%- endfor %}\\n\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418548,\n    \"featured\": false,\n    \"architectures\": [\n      \"MistralForCausalLM\"\n    ],\n    \"model_type\": \"mistral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"mistral-large-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"fr\",\n      \"de\",\n      \"es\",\n      \"it\",\n      \"pt\",\n      \"zh\",\n      \"ru\",\n      \"ja\",\n      \"ko\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Mistral-Large-Instruct-2407 is an advanced dense Large Language Model (LLM) of 123B parameters with state-of-the-art reasoning, knowledge and coding capabilities.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 123,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Mistral-Large-Instruct-2407\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Mistral-Large-Instruct-2407\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 123,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"unsloth/Mistral-Large-Instruct-2407-bnb-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Mistral-Large-Instruct-2407\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 123,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"ModelCloud/Mistral-Large-Instruct-2407-gptq-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 123,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TechxGenus/Mistral-Large-Instruct-2407-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 123,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_K_S\",\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"MaziyarPanahi/Mistral-Large-Instruct-2407-GGUF\",\n            \"model_file_name_template\": \"Mistral-Large-Instruct-2407.{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Mixtral-8x22B-Instruct-v0.1.{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"Q3_K_L\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 123,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Mistral-Large-Instruct-2407-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 123,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Mistral-Large-Instruct-2407-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 123,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Mistral-Large-Instruct-2407-8bit\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if messages[0][\\\"role\\\"] == \\\"system\\\" %}\\n    {%- set system_message = messages[0][\\\"content\\\"] %}\\n    {%- set loop_messages = messages[1:] %}\\n{%- else %}\\n    {%- set loop_messages = messages %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n    {%- set tools = none %}\\n{%- endif %}\\n{%- set user_messages = loop_messages | selectattr(\\\"role\\\", \\\"equalto\\\", \\\"user\\\") | list %}\\n\\n{#- This block checks for alternating user/assistant messages, skipping tool calling messages #}\\n{%- set ns = namespace() %}\\n{%- set ns.index = 0 %}\\n{%- for message in loop_messages %}\\n    {%- if not (message.role == \\\"tool\\\" or message.role == \\\"tool_results\\\" or (message.tool_calls is defined and message.tool_calls is not none)) %}\\n        {%- if (message[\\\"role\\\"] == \\\"user\\\") != (ns.index % 2 == 0) %}\\n            {{- raise_exception(\\\"After the optional system message, conversation roles must alternate user/assistant/user/assistant/...\\\") }}\\n        {%- endif %}\\n        {%- set ns.index = ns.index + 1 %}\\n    {%- endif %}\\n{%- endfor %}\\n\\n{{- '<s>' }}\\n{%- for message in loop_messages %}\\n    {%- if message[\\\"role\\\"] == \\\"user\\\" %}\\n        {%- if tools is not none and (message == user_messages[-1]) %}\\n            {{- \\\"[AVAILABLE_TOOLS][\\\" }}\\n            {%- for tool in tools %}\\n                {%- set tool = tool.function %}\\n                {{- '{\\\"type\\\": \\\"function\\\", \\\"function\\\": {' }}\\n                {%- for key, val in tool.items() if key != \\\"return\\\" %}\\n                    {%- if val is string %}\\n                        {{- '\\\"' + key + '\\\": \\\"' + val + '\\\"' }}\\n                    {%- else %}\\n                        {{- '\\\"' + key + '\\\": ' + val|tojson }}\\n                    {%- endif %}\\n                    {%- if not loop.last %}\\n                        {{- \\\", \\\" }}\\n                    {%- endif %}\\n                {%- endfor %}\\n                {{- \\\"}}\\\" }}\\n                {%- if not loop.last %}\\n                    {{- \\\", \\\" }}\\n                {%- else %}\\n                    {{- \\\"]\\\" }}\\n                {%- endif %}\\n            {%- endfor %}\\n            {{- \\\"[/AVAILABLE_TOOLS]\\\" }}\\n            {%- endif %}\\n        {%- if loop.last and system_message is defined %}\\n            {{- \\\"[INST]\\\" + system_message + \\\"\\n\\n\\\" + message[\\\"content\\\"] + \\\"[/INST]\\\" }}\\n        {%- else %}\\n            {{- \\\"[INST]\\\" + message[\\\"content\\\"] + \\\"[/INST]\\\" }}\\n        {%- endif %}\\n    {%- elif (message.tool_calls is defined and message.tool_calls is not none) %}\\n        {{- \\\"[TOOL_CALLS][\\\" }}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- set out = tool_call.function|tojson %}\\n            {{- out[:-1] }}\\n            {%- if not tool_call.id is defined or tool_call.id|length != 9 %}\\n                {{- raise_exception(\\\"Tool call IDs should be alphanumeric strings with length 9!\\\") }}\\n            {%- endif %}\\n            {{- ', \\\"id\\\": \\\"' + tool_call.id + '\\\"}' }}\\n            {%- if not loop.last %}\\n                {{- \\\", \\\" }}\\n            {%- else %}\\n                {{- \\\"]\\\" + '</s>' }}\\n            {%- endif %}\\n        {%- endfor %}\\n    {%- elif message[\\\"role\\\"] == \\\"assistant\\\" %}\\n        {{- message[\\\"content\\\"] + '</s>'}}\\n    {%- elif message[\\\"role\\\"] == \\\"tool_results\\\" or message[\\\"role\\\"] == \\\"tool\\\" %}\\n        {%- if message.content is defined and message.content.content is defined %}\\n            {%- set content = message.content.content %}\\n        {%- else %}\\n            {%- set content = message.content %}\\n        {%- endif %}\\n        {{- '[TOOL_RESULTS]{\\\"content\\\": ' + content|string + \\\", \\\" }}\\n        {%- if not message.tool_call_id is defined or message.tool_call_id|length != 9 %}\\n            {{- raise_exception(\\\"Tool call IDs should be alphanumeric strings with length 9!\\\") }}\\n        {%- endif %}\\n        {{- '\\\"call_id\\\": \\\"' + message.tool_call_id + '\\\"}[/TOOL_RESULTS]' }}\\n    {%- else %}\\n        {{- raise_exception(\\\"Only user and assistant roles are supported, with the exception of an initial optional system message!\\\") }}\\n    {%- endif %}\\n{%- endfor %}\\n\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418548,\n    \"featured\": false,\n    \"architectures\": [\n      \"MistralForCausalLM\"\n    ],\n    \"model_type\": \"mistral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 1024000,\n    \"model_name\": \"mistral-nemo-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"fr\",\n      \"de\",\n      \"es\",\n      \"it\",\n      \"pt\",\n      \"zh\",\n      \"ru\",\n      \"ja\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The Mistral-Nemo-Instruct-2407 Large Language Model (LLM) is an instruct fine-tuned version of the Mistral-Nemo-Base-2407\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Mistral-Nemo-Instruct-2407\",\n            \"model_revision\": \"05b1e4f3e189ec1b5189fb3c973d4cf3369c27af\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/Mistral-Nemo-Instruct-2407\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"unsloth/Mistral-Nemo-Instruct-2407-bnb-4bit\",\n            \"model_revision\": \"1d85adc9e0fff0b8e4479a037bd75fe1346333ca\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/Mistral-Nemo-Instruct-2407\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"afrizalha/Mistral-Nemo-Instruct-2407-bnb-8bit\",\n            \"model_revision\": \"1d2dacf18a486c745219317d1507441406bc7e25\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/Mistral-Nemo-Instruct-2407\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"ModelCloud/Mistral-Nemo-Instruct-2407-gptq-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"LLM-Research/Mistral-Nemo-Instruct-2407-gptq-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"casperhansen/mistral-nemo-instruct-2407-awq\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"MaziyarPanahi/Mistral-Nemo-Instruct-2407-GGUF\",\n            \"model_file_name_template\": \"Mistral-Nemo-Instruct-2407.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Mistral-Nemo-Instruct-2407-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Mistral-Nemo-Instruct-2407-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Mistral-Nemo-Instruct-2407-8bit\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if messages[0][\\\"role\\\"] == \\\"system\\\" %}\\n    {%- set system_message = messages[0][\\\"content\\\"] %}\\n    {%- set loop_messages = messages[1:] %}\\n{%- else %}\\n    {%- set loop_messages = messages %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n    {%- set tools = none %}\\n{%- endif %}\\n{%- set user_messages = loop_messages | selectattr(\\\"role\\\", \\\"equalto\\\", \\\"user\\\") | list %}\\n\\n{#- This block checks for alternating user/assistant messages, skipping tool calling messages #}\\n{%- set ns = namespace() %}\\n{%- set ns.index = 0 %}\\n{%- for message in loop_messages %}\\n    {%- if not (message.role == \\\"tool\\\" or message.role == \\\"tool_results\\\" or (message.tool_calls is defined and message.tool_calls is not none)) %}\\n        {%- if (message[\\\"role\\\"] == \\\"user\\\") != (ns.index % 2 == 0) %}\\n            {{- raise_exception(\\\"After the optional system message, conversation roles must alternate user/assistant/user/assistant/...\\\") }}\\n        {%- endif %}\\n        {%- set ns.index = ns.index + 1 %}\\n    {%- endif %}\\n{%- endfor %}\\n\\n{{- '<s>' }}\\n{%- for message in loop_messages %}\\n    {%- if message[\\\"role\\\"] == \\\"user\\\" %}\\n        {%- if tools is not none and (message == user_messages[-1]) %}\\n            {{- \\\"[AVAILABLE_TOOLS][\\\" }}\\n            {%- for tool in tools %}\\n                {%- set tool = tool.function %}\\n                {{- '{\\\"type\\\": \\\"function\\\", \\\"function\\\": {' }}\\n                {%- for key, val in tool.items() if key != \\\"return\\\" %}\\n                    {%- if val is string %}\\n                        {{- '\\\"' + key + '\\\": \\\"' + val + '\\\"' }}\\n                    {%- else %}\\n                        {{- '\\\"' + key + '\\\": ' + val|tojson }}\\n                    {%- endif %}\\n                    {%- if not loop.last %}\\n                        {{- \\\", \\\" }}\\n                    {%- endif %}\\n                {%- endfor %}\\n                {{- \\\"}}\\\" }}\\n                {%- if not loop.last %}\\n                    {{- \\\", \\\" }}\\n                {%- else %}\\n                    {{- \\\"]\\\" }}\\n                {%- endif %}\\n            {%- endfor %}\\n            {{- \\\"[/AVAILABLE_TOOLS]\\\" }}\\n            {%- endif %}\\n        {%- if loop.last and system_message is defined %}\\n            {{- \\\"[INST]\\\" + system_message + \\\"\\n\\n\\\" + message[\\\"content\\\"] + \\\"[/INST]\\\" }}\\n        {%- else %}\\n            {{- \\\"[INST]\\\" + message[\\\"content\\\"] + \\\"[/INST]\\\" }}\\n        {%- endif %}\\n    {%- elif (message.tool_calls is defined and message.tool_calls is not none) %}\\n        {{- \\\"[TOOL_CALLS][\\\" }}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- set out = tool_call.function|tojson %}\\n            {{- out[:-1] }}\\n            {%- if not tool_call.id is defined or tool_call.id|length != 9 %}\\n                {{- raise_exception(\\\"Tool call IDs should be alphanumeric strings with length 9!\\\") }}\\n            {%- endif %}\\n            {{- ', \\\"id\\\": \\\"' + tool_call.id + '\\\"}' }}\\n            {%- if not loop.last %}\\n                {{- \\\", \\\" }}\\n            {%- else %}\\n                {{- \\\"]\\\" + '</s>' }}\\n            {%- endif %}\\n        {%- endfor %}\\n    {%- elif message[\\\"role\\\"] == \\\"assistant\\\" %}\\n        {{- message[\\\"content\\\"] + '</s>'}}\\n    {%- elif message[\\\"role\\\"] == \\\"tool_results\\\" or message[\\\"role\\\"] == \\\"tool\\\" %}\\n        {%- if message.content is defined and message.content.content is defined %}\\n            {%- set content = message.content.content %}\\n        {%- else %}\\n            {%- set content = message.content %}\\n        {%- endif %}\\n        {{- '[TOOL_RESULTS]{\\\"content\\\": ' + content|string + \\\", \\\" }}\\n        {%- if not message.tool_call_id is defined or message.tool_call_id|length != 9 %}\\n            {{- raise_exception(\\\"Tool call IDs should be alphanumeric strings with length 9!\\\") }}\\n        {%- endif %}\\n        {{- '\\\"call_id\\\": \\\"' + message.tool_call_id + '\\\"}[/TOOL_RESULTS]' }}\\n    {%- else %}\\n        {{- raise_exception(\\\"Only user and assistant roles are supported, with the exception of an initial optional system message!\\\") }}\\n    {%- endif %}\\n{%- endfor %}\\n\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418549,\n    \"featured\": false,\n    \"architectures\": [\n      \"MistralForCausalLM\"\n    ],\n    \"model_type\": \"mistral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"mistral-v0.1\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Mistral-7B is a unmoderated Transformer based LLM claiming to outperform Llama2 on all benchmarks.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Mistral-7B-v0.1\",\n            \"model_revision\": \"ae9d75c6b4eb39515def78c685fb4d71d49fc2cf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Xorbits/Mistral-7B-v0.1\",\n            \"model_revision\": \"v1.0.0\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"PyTorch-NPU/mistral_7b_v0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Mistral-7B-v0.1-GGUF\",\n            \"model_file_name_template\": \"mistral-7b-v0.1.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"Xorbits/Mistral-7B-v0.1-GGUF\",\n            \"model_file_name_template\": \"mistral-7b-v0.1.{quantization}.gguf\",\n            \"model_revision\": \"v1.0.0\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418550,\n    \"featured\": false,\n    \"architectures\": [\n      \"MistralForCausalLM\"\n    ],\n    \"model_type\": \"mistral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"mixtral-instruct-v0.1\",\n    \"model_lang\": [\n      \"en\",\n      \"fr\",\n      \"it\",\n      \"de\",\n      \"es\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Mistral-8x7B-Instruct is a fine-tuned version of the Mistral-8x7B LLM, specializing in chatting.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"46_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Mixtral-8x7B-Instruct-v0.1\",\n            \"model_revision\": \"125c431e2ff41a156b9f9076f744d2f35dd6e67a\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/Mixtral-8x7B-Instruct-v0.1\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"46_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Mixtral-8x7B-Instruct-v0.1-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"46_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Mixtral-8x7B-Instruct-v0.1-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"46_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_M\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF\",\n            \"model_file_name_template\": \"mixtral-8x7b-instruct-v0.1.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if messages[0]['role'] == 'system' %}\\n    {%- set system_message = messages[0]['content'] %}\\n    {%- set loop_messages = messages[1:] %}\\n{%- else %}\\n    {%- set loop_messages = messages %}\\n{%- endif %}\\n\\n{{- '<s>' }}\\n{%- for message in loop_messages %}\\n    {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}\\n        {{- raise_exception('After the optional system message, conversation roles must alternate user/assistant/user/assistant/...') }}\\n    {%- endif %}\\n    {%- if message['role'] == 'user' %}\\n        {%- if loop.first and system_message is defined %}\\n            {{- ' [INST] ' + system_message + '\\n\\n' + message['content'] + ' [/INST]' }}\\n        {%- else %}\\n            {{- ' [INST] ' + message['content'] + ' [/INST]' }}\\n        {%- endif %}\\n    {%- elif message['role'] == 'assistant' %}\\n        {{- ' ' + message['content'] + '</s>'}}\\n    {%- else %}\\n        {{- raise_exception('Only user and assistant roles are supported, with the exception of an initial optional system message!') }}\\n    {%- endif %}\\n{%- endfor %}\\n\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418551,\n    \"featured\": false,\n    \"architectures\": [\n      \"MixtralForCausalLM\"\n    ],\n    \"model_type\": \"mixtral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"mixtral-v0.1\",\n    \"model_lang\": [\n      \"en\",\n      \"fr\",\n      \"it\",\n      \"de\",\n      \"es\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"The Mixtral-8x7B Large Language Model (LLM) is a pretrained generative Sparse Mixture of Experts.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"46_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mistralai/Mixtral-8x7B-v0.1\",\n            \"model_revision\": \"58301445dc1378584211722b7ebf8743ec4e192b\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/Mixtral-8x7B-v0.1\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"46_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"TheBloke/Mixtral-8x7B-v0.1-GPTQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"46_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_M\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/Mixtral-8x7B-v0.1-GGUF\",\n            \"model_file_name_template\": \"mixtral-8x7b-v0.1.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418552,\n    \"featured\": false,\n    \"architectures\": [\n      \"MixtralForCausalLM\"\n    ],\n    \"model_type\": \"mixtral\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"moonlight-16b-a3b-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Kimi Muon is Scalable for LLM Training\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"moonshotai/Moonlight-16B-A3B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"moonshotai/Moonlight-16B-A3B-Instruct\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- for message in messages -%}{%- if loop.first and messages[0]['role'] != 'system' -%}<|im_system|>system<|im_middle|>You are a helpful assistant<|im_end|>{%- endif -%}{%- if message['role'] == 'system' -%}<|im_system|>{%- endif -%}{%- if message['role'] == 'user' -%}<|im_user|>{%- endif -%}{%- if message['role'] == 'assistant' -%}<|im_assistant|>{%- endif -%}{{ message['role'] }}<|im_middle|>{{message['content']}}<|im_end|>{%- endfor -%}{%- if add_generation_prompt -%}<|im_assistant|>assistant<|im_middle|>{%- endif -%}\",\n    \"stop_token_ids\": [\n      163586\n    ],\n    \"stop\": [\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418553,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV3ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"orion-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Orion-14B series models are open-source multilingual large language models trained from scratch by OrionStarAI.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OrionStarAI/Orion-14B-Chat\",\n            \"model_revision\": \"ea6fb9b7e1917f3693935accbeb0bfecfd6552a7\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OrionStarAI/Orion-14B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OrionStarAI/Orion-14B-Chat-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"OrionStarAI/Orion-14B-Chat-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if loop.first %}{{ '<s>' }}{% endif %}{% if message['role'] == 'user' %}{{ 'Human: ' + message['content'] + '\\n\\nAssistant: ' + '</s>' }}{% elif message['role'] == 'assistant' %}{{ message['content'] + '</s>' }}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      1,\n      2,\n      0\n    ],\n    \"stop\": [\n      \"<s>\",\n      \"</s>\",\n      \"<unk>\"\n    ],\n    \"updated_at\": 1769418554,\n    \"featured\": false,\n    \"architectures\": [\n      \"OrionForCausalLM\"\n    ],\n    \"model_type\": \"orion\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 128000,\n    \"model_name\": \"phi-3-mini-128k-instruct\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The Phi-3-Mini-128K-Instruct is a 3.8 billion-parameter, lightweight, state-of-the-art open model trained using the Phi-3 datasets.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"microsoft/Phi-3-mini-128k-instruct\",\n            \"model_revision\": \"ebee18c488086b396dde649f2aa6548b9b8d2404\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Phi-3-mini-128k-instruct\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if message['role'] == 'system' %}{{'<|system|>\\n' + message['content'] + '<|end|>\\n'}}{% elif message['role'] == 'user' %}{{'<|user|>\\n' + message['content'] + '<|end|>\\n'}}{% elif message['role'] == 'assistant' %}{{'<|assistant|>\\n' + message['content'] + '<|end|>\\n'}}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>\\n' }}{% else %}{{ '<|endoftext|>' }}{% endif %}\",\n    \"stop_token_ids\": [\n      32000,\n      32001,\n      32007\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|assistant|>\",\n      \"<|end|>\"\n    ],\n    \"updated_at\": 1769418555,\n    \"featured\": false,\n    \"architectures\": [\n      \"Phi3ForCausalLM\"\n    ],\n    \"model_type\": \"phi3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 4096,\n    \"model_name\": \"phi-3-mini-4k-instruct\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The Phi-3-Mini-4k-Instruct is a 3.8 billion-parameter, lightweight, state-of-the-art open model trained using the Phi-3 datasets.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp16\",\n              \"q4\"\n            ],\n            \"model_id\": \"microsoft/Phi-3-mini-4k-instruct-gguf\",\n            \"model_file_name_template\": \"Phi-3-mini-4k-instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"microsoft/Phi-3-mini-4k-instruct\",\n            \"model_revision\": \"b86bcaf57ea4dfdec5dbe12a377028b2fab0d480\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LLM-Research/Phi-3-mini-4k-instruct\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if message['role'] == 'system' %}{{'<|system|>\\n' + message['content'] + '<|end|>\\n'}}{% elif message['role'] == 'user' %}{{'<|user|>\\n' + message['content'] + '<|end|>\\n'}}{% elif message['role'] == 'assistant' %}{{'<|assistant|>\\n' + message['content'] + '<|end|>\\n'}}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>\\n' }}{% else %}{{ '<|endoftext|>' }}{% endif %}\",\n    \"stop_token_ids\": [\n      32000,\n      32001,\n      32007\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|assistant|>\",\n      \"<|end|>\"\n    ],\n    \"updated_at\": 1769418556,\n    \"featured\": false,\n    \"architectures\": [\n      \"Phi3ForCausalLM\"\n    ],\n    \"model_type\": \"phi3\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Qwen-chat is a fine-tuned version of the Qwen LLM trained with alignment techniques, specializing in chatting.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/Qwen-7B-Chat-GGUF\",\n            \"model_file_name_template\": \"Qwen-7B-Chat.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/Qwen-7B-Chat-GGUF\",\n            \"model_file_name_template\": \"Qwen-7B-Chat.{quantization}.gguf\",\n            \"model_revision\": \"v0.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/Qwen-14B-Chat-GGUF\",\n            \"model_file_name_template\": \"Qwen-14B-Chat.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q4_K_M\"\n            ],\n            \"model_id\": \"Xorbits/Qwen-14B-Chat-GGUF\",\n            \"model_file_name_template\": \"Qwen-14B-Chat.{quantization}.gguf\",\n            \"model_revision\": \"v0.0.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen-1_8B-Chat\",\n            \"model_revision\": \"c3db8007171847931da7efa4b2ed4309afcce021\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen-1_8B-Chat\",\n            \"model_revision\": \"v1.0.0\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"HangZhou_Ascend/Qwen-1_8B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen-7B-Chat\",\n            \"model_revision\": \"218aa3240fd5a5d1e80bb6c47d5d774361913706\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen-7B-Chat\",\n            \"model_revision\": \"v1.1.9\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"wuhaicc/Qwen-7B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen-14B-Chat\",\n            \"model_revision\": \"fab8385c8f7e7980ef61944729fe134ccbbca263\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen-14B-Chat\",\n            \"model_revision\": \"v1.0.7\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"wuhaicc/Qwen-14B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen-72B-Chat\",\n            \"model_revision\": \"2cd9f76279337941ec1a4abeec6f8eb3c38d0f55\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen-72B-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen-7B-Chat-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen-7B-Chat-{quantization}\",\n            \"model_revision\": \"v1.1.7\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen-1_8B-Chat-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen-1_8B-Chat-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen-14B-Chat-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen-14B-Chat-{quantization}\",\n            \"model_revision\": \"v1.0.7\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen-72B-Chat-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen-72B-Chat-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for item in messages %}{% if loop.first and item['role'] == 'system' %}{{ '<|im_start|>system\\n' + item['content'] + '<|im_end|>\\n' }}{% elif loop.first %}{{ '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n' }}{% endif %}{% if item['role'] == 'user' %}{{ '<|im_start|>user\\n' + item['content'] + '<|im_end|>' }}{% elif item['role'] == 'assistant' %}{{ '<|im_start|>assistant\\n' + item['content'] + '<|im_end|>' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418557,\n    \"featured\": false,\n    \"architectures\": [\n      \"QWenLMHeadModel\"\n    ],\n    \"model_type\": \"qwen\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen1.5-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen1.5 is the beta version of Qwen2, a transformer-based decoder-only language model pretrained on a large amount of data.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-0.5B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-0.5B-Chat\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"HangZhou_Ascend/Qwen1.5-0.5B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-1.8B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-1.8B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-4B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-4B-Chat\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"HangZhou_Ascend/Qwen1.5-4B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-7B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-7B-Chat\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"PyTorch-NPU/qwen1.5_7b_chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-14B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-14B-Chat\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"State_Cloud/Qwen1.5-14B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-32B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-32B-Chat\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"State_Cloud/Qwen1.5-32b-chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-72B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-72B-Chat\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"State_Cloud/Qwen1.5-72b-chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 110,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-110B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-110B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-0.5B-Chat-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-0.5B-Chat-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-1.8B-Chat-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-1.8B-Chat-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-4B-Chat-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-4B-Chat-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-7B-Chat-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-7B-Chat-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-14B-Chat-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-14B-Chat-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-32B-Chat-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-32B-Chat-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-72B-Chat-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-72B-Chat-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 110,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-110B-Chat-GPTQ-Int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-110B-Chat-GPTQ-Int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-0.5B-Chat-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-0.5B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"1_8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-1.8B-Chat-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-1.8B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-4B-Chat-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-4B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-7B-Chat-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-7B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-14B-Chat-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-14B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-32B-Chat-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-32B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-72B-Chat-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-72B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 110,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-110B-Chat-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-110B-Chat-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-0.5B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-0_5b-chat-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-0.5B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-0_5b-chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-1.8B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-1_8b-chat-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-1.8B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-1_8b-chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-4B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-4b-chat-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-4B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-4b-chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-7B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-7b-chat-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-7B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-7b-chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-14B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-14b-chat-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-14B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-14b-chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-32B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-32b-chat-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-32B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-32b-chat-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_k_m\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-72B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-72b-chat-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen1_5-72b-chat-{quantization}.gguf.{part}\",\n            \"quantization_parts\": {\n              \"q4_k_m\": [\n                \"a\",\n                \"b\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_k_m\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-72B-Chat-GGUF\",\n            \"model_file_name_template\": \"qwen1_5-72b-chat-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen1_5-72b-chat-{quantization}.gguf.{part}\",\n            \"quantization_parts\": {\n              \"q4_k_m\": [\n                \"a\",\n                \"b\"\n              ]\n            }\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- macro json_to_python_type(json_spec) %}\\n    {%- set basic_type_map = {\\n    \\\"string\\\": \\\"str\\\",\\n    \\\"number\\\": \\\"float\\\",\\n    \\\"integer\\\": \\\"int\\\",\\n    \\\"boolean\\\": \\\"bool\\\"\\n} %}\\n    {%- if basic_type_map[json_spec.type] is defined %}\\n        {{- basic_type_map[json_spec.type] }}\\n    {%- elif json_spec.type == \\\"array\\\" %}\\n        {{- \\\"list[\\\" +  json_to_python_type(json_spec|items) + \\\"]\\\" }}\\n    {%- elif json_spec.type == \\\"object\\\" %}\\n        {%- if json_spec.additionalProperties is defined %}\\n            {{- \\\"dict[str, \\\" + json_to_python_type(json_spec.additionalProperties) + ']' }}\\n        {%- else %}\\n            {{- \\\"dict\\\" }}\\n        {%- endif %}\\n    {%- elif json_spec.type is iterable %}\\n        {{- \\\"Union[\\\" }}\\n        {%- for t in json_spec.type %}\\n            {{- json_to_python_type({\\\"type\\\": t}) }}\\n            {%- if not loop.last %}\\n                {{- \\\",\\\" }}\\n            {%- endif %}\\n        {%- endfor %}\\n        {{- \\\"]\\\" }}\\n    {%- else %}\\n        {{- \\\"Any\\\" }}\\n    {%- endif %}\\n{%- endmacro %}\\n\\n{%- if tools %}\\n    {{- '<|im_start|>system\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] + '\\n\\n' }}\\n    {%- endif %}\\n    {{- '# Tools\\n\\n' }}\\n    {{- \\\"You are a function calling AI model. You are provided with function signatures within <tools></tools> XML tags. You may call one or more functions to assist with the user query. Don't make assumptions about what values to plug into functions. Here are the available tools: <tools> \\\" }}\\n    {%- for tool in tools %}\\n        {%- if tool.function is defined %}\\n            {%- set tool = tool.function %}\\n        {%- endif %}\\n        {{- '{\\\"type\\\": \\\"function\\\", \\\"function\\\": ' }}\\n        {{- '{\\\"name\\\": ' + tool.name + '\\\", ' }}\\n        {{- '\\\"description\\\": \\\"' + tool.name + '(' }}\\n        {%- for param_name, param_fields in tool.parameters.properties|items %}\\n            {{- param_name + \\\": \\\" + json_to_python_type(param_fields) }}\\n            {%- if not loop.last %}\\n                {{- \\\", \\\" }}\\n            {%- endif %}\\n        {%- endfor %}\\n        {{- \\\")\\\" }}\\n        {%- if tool.return is defined %}\\n            {{- \\\" -> \\\" + json_to_python_type(tool.return) }}\\n        {%- endif %}\\n        {{- \\\" - \\\" + tool.description + \\\"\\n\\n\\\" }}\\n        {%- for param_name, param_fields in tool.parameters.properties|items %}\\n            {%- if loop.first %}\\n                {{- \\\"    Args:\\n\\\" }}\\n            {%- endif %}\\n            {{- \\\"        \\\" + param_name + \\\"(\\\" + json_to_python_type(param_fields) + \\\"): \\\" + param_fields.description|trim }}\\n        {%- endfor %}\\n        {%- if tool.return is defined and tool.return.description is defined %}\\n            {{- \\\"\\n    Returns:\\n        \\\" + tool.return.description }}\\n        {%- endif %}\\n        {{- '\\\"' }}\\n        {{- ', \\\"parameters\\\": ' }}\\n        {%- if tool.parameters.properties | length == 0 %}\\n            {{- \\\"{}\\\" }}\\n        {%- else %}\\n            {{- tool.parameters|tojson }}\\n        {%- endif %}\\n        {{- \\\"}\\\" }}\\n        {%- if not loop.last %}\\n            {{- \\\"\\n\\\" }}\\n        {%- endif %}\\n    {%- endfor %}\\n    {{- \\\" </tools>\\\" }}\\n    {{- 'Use the following pydantic model json schema for each tool call you will make: {\\\"properties\\\": {\\\"arguments\\\": {\\\"title\\\": \\\"Arguments\\\", \\\"type\\\": \\\"object\\\"}, \\\"name\\\": {\\\"title\\\": \\\"Name\\\", \\\"type\\\": \\\"string\\\"}}, \\\"required\\\": [\\\"arguments\\\", \\\"name\\\"], \\\"title\\\": \\\"FunctionCall\\\", \\\"type\\\": \\\"object\\\"}\\n' }}\\n    {{- \\\"For each function call return a json object with function name and arguments within <tool_call></tool_call> XML tags as follows:\\n\\\" }}\\n    {{- \\\"<tool_call>\\n\\\" }}\\n    {{- '{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n' }}\\n    {{- '</tool_call><|im_end|>\\n' }}\\n{%- else %}\\n    {%- if messages[0]['role'] != 'system' %}\\n        {{- '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\n' + messages[0]['content'] + '<|im_end|>\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if message.role == \\\"user\\\" or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and message.tool_calls is not defined) %}\\n        {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role + '\\n<tool_call>\\n' }}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '{' }}\\n            {{- '\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {%- if tool_call.arguments is defined %}\\n                {{- ', ' }}\\n                {{- '\\\"arguments\\\": ' }}\\n                {{- tool_call.arguments|tojson }}\\n            {%- endif %}\\n            {{- '\\\"}' }}\\n            {{- '\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if not message.name is defined %}\\n            {{- raise_exception(\\\"Tool response dicts require a 'name' key indicating the name of the called function!\\\") }}\\n        {%- endif %}\\n        {{- '<|im_start|>user\\n<tool_response>\\n' }}\\n        {{- '{\\\"name\\\": \\\"' }}\\n        {{- message.name }}\\n        {{- '\\\", \\\"content\\\": ' }}\\n        {{- message.content|tojson + '}' }}\\n        {{- '\\n</tool_response><|im_end|>\\n' }}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\n' }}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418558,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen1.5-moe-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen1.5-MoE is a transformer-based MoE decoder-only language model pretrained on a large amount of data.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"2_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-MoE-A2.7B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-MoE-A2.7B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"2_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- macro json_to_python_type(json_spec) %}\\n    {%- set basic_type_map = {\\n    \\\"string\\\": \\\"str\\\",\\n    \\\"number\\\": \\\"float\\\",\\n    \\\"integer\\\": \\\"int\\\",\\n    \\\"boolean\\\": \\\"bool\\\"\\n} %}\\n    {%- if basic_type_map[json_spec.type] is defined %}\\n        {{- basic_type_map[json_spec.type] }}\\n    {%- elif json_spec.type == \\\"array\\\" %}\\n        {{- \\\"list[\\\" +  json_to_python_type(json_spec|items) + \\\"]\\\" }}\\n    {%- elif json_spec.type == \\\"object\\\" %}\\n        {%- if json_spec.additionalProperties is defined %}\\n            {{- \\\"dict[str, \\\" + json_to_python_type(json_spec.additionalProperties) + ']' }}\\n        {%- else %}\\n            {{- \\\"dict\\\" }}\\n        {%- endif %}\\n    {%- elif json_spec.type is iterable %}\\n        {{- \\\"Union[\\\" }}\\n        {%- for t in json_spec.type %}\\n            {{- json_to_python_type({\\\"type\\\": t}) }}\\n            {%- if not loop.last %}\\n                {{- \\\",\\\" }}\\n            {%- endif %}\\n        {%- endfor %}\\n        {{- \\\"]\\\" }}\\n    {%- else %}\\n        {{- \\\"Any\\\" }}\\n    {%- endif %}\\n{%- endmacro %}\\n\\n{%- if tools %}\\n    {{- '<|im_start|>system\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] + '\\n\\n' }}\\n    {%- endif %}\\n    {{- '# Tools\\n\\n' }}\\n    {{- \\\"You are a function calling AI model. You are provided with function signatures within <tools></tools> XML tags. You may call one or more functions to assist with the user query. Don't make assumptions about what values to plug into functions. Here are the available tools: <tools> \\\" }}\\n    {%- for tool in tools %}\\n        {%- if tool.function is defined %}\\n            {%- set tool = tool.function %}\\n        {%- endif %}\\n        {{- '{\\\"type\\\": \\\"function\\\", \\\"function\\\": ' }}\\n        {{- '{\\\"name\\\": ' + tool.name + '\\\", ' }}\\n        {{- '\\\"description\\\": \\\"' + tool.name + '(' }}\\n        {%- for param_name, param_fields in tool.parameters.properties|items %}\\n            {{- param_name + \\\": \\\" + json_to_python_type(param_fields) }}\\n            {%- if not loop.last %}\\n                {{- \\\", \\\" }}\\n            {%- endif %}\\n        {%- endfor %}\\n        {{- \\\")\\\" }}\\n        {%- if tool.return is defined %}\\n            {{- \\\" -> \\\" + json_to_python_type(tool.return) }}\\n        {%- endif %}\\n        {{- \\\" - \\\" + tool.description + \\\"\\n\\n\\\" }}\\n        {%- for param_name, param_fields in tool.parameters.properties|items %}\\n            {%- if loop.first %}\\n                {{- \\\"    Args:\\n\\\" }}\\n            {%- endif %}\\n            {{- \\\"        \\\" + param_name + \\\"(\\\" + json_to_python_type(param_fields) + \\\"): \\\" + param_fields.description|trim }}\\n        {%- endfor %}\\n        {%- if tool.return is defined and tool.return.description is defined %}\\n            {{- \\\"\\n    Returns:\\n        \\\" + tool.return.description }}\\n        {%- endif %}\\n        {{- '\\\"' }}\\n        {{- ', \\\"parameters\\\": ' }}\\n        {%- if tool.parameters.properties | length == 0 %}\\n            {{- \\\"{}\\\" }}\\n        {%- else %}\\n            {{- tool.parameters|tojson }}\\n        {%- endif %}\\n        {{- \\\"}\\\" }}\\n        {%- if not loop.last %}\\n            {{- \\\"\\n\\\" }}\\n        {%- endif %}\\n    {%- endfor %}\\n    {{- \\\" </tools>\\\" }}\\n    {{- 'Use the following pydantic model json schema for each tool call you will make: {\\\"properties\\\": {\\\"arguments\\\": {\\\"title\\\": \\\"Arguments\\\", \\\"type\\\": \\\"object\\\"}, \\\"name\\\": {\\\"title\\\": \\\"Name\\\", \\\"type\\\": \\\"string\\\"}}, \\\"required\\\": [\\\"arguments\\\", \\\"name\\\"], \\\"title\\\": \\\"FunctionCall\\\", \\\"type\\\": \\\"object\\\"}\\n' }}\\n    {{- \\\"For each function call return a json object with function name and arguments within <tool_call></tool_call> XML tags as follows:\\n\\\" }}\\n    {{- \\\"<tool_call>\\n\\\" }}\\n    {{- '{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n' }}\\n    {{- '</tool_call><|im_end|>\\n' }}\\n{%- else %}\\n    {%- if messages[0]['role'] != 'system' %}\\n        {{- '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\n' + messages[0]['content'] + '<|im_end|>\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if message.role == \\\"user\\\" or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and message.tool_calls is not defined) %}\\n        {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role + '\\n<tool_call>\\n' }}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '{' }}\\n            {{- '\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {%- if tool_call.arguments is defined %}\\n                {{- ', ' }}\\n                {{- '\\\"arguments\\\": ' }}\\n                {{- tool_call.arguments|tojson }}\\n            {%- endif %}\\n            {{- '\\\"}' }}\\n            {{- '\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if not message.name is defined %}\\n            {{- raise_exception(\\\"Tool response dicts require a 'name' key indicating the name of the called function!\\\") }}\\n        {%- endif %}\\n        {{- '<|im_start|>user\\n<tool_response>\\n' }}\\n        {{- '{\\\"name\\\": \\\"' }}\\n        {{- message.name }}\\n        {{- '\\\", \\\"content\\\": ' }}\\n        {{- message.content|tojson + '}' }}\\n        {{- '\\n</tool_response><|im_end|>\\n' }}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\n' }}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418559,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2MoeForCausalLM\"\n    ],\n    \"model_type\": \"qwen2_moe\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen2-audio-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"audio\"\n    ],\n    \"model_description\": \"Qwen2-Audio: A large-scale audio-language model which is capable of accepting various audio signal inputs and performing audio analysis or direct textual responses with regard to speech instructions.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-Audio-7B-Instruct\",\n            \"model_revision\": \"bac62d2c6808845904c709c17a0402d817558c64\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2-Audio-7B-Instruct\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% set audio_count = namespace(value=0) %}{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system You are a helpful assistant.<|im_end|> {% endif %}<|im_start|>{{ message['role'] }} {% if message['content'] is string %}{{ message['content'] }}<|im_end|> {% else %}{% for content in message['content'] %}{% if 'audio' in content or 'audio_url' in content or message['type'] == 'audio' or content['type'] == 'audio' %}{% set audio_count.value = audio_count.value + 1 %}Audio {{ audio_count.value }}: <|audio_bos|><|AUDIO|><|audio_eos|> {% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|> {% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant {% endif %}\",\n    \"prompt_style\": {\n      \"style_name\": \"QWEN\",\n      \"system_prompt\": \"You are a helpful assistant\",\n      \"roles\": [\n        \"user\",\n        \"assistant\"\n      ],\n      \"stop\": [\n        \"<|im_end|>\",\n        \"<|endoftext|>\"\n      ]\n    },\n    \"updated_at\": 1769418561,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2AudioForConditionalGeneration\"\n    ],\n    \"model_type\": \"qwen2_audio\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen2-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen2 is the new series of Qwen large language models\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-0.5B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2-0.5B-Instruct\"\n          },\n          \"csghub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-0.5B-Instruct\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"wuhaicc/Qwen2-0.5B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-1.5B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2-1.5B-Instruct\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"HangZhou_Ascend/Qwen2-1.5B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-7B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2-7B-Instruct\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"wuhaicc/Qwen2-7B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-72B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2-72B-Instruct\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"State_Cloud/Qwen2-72B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-0.5B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2-0.5B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-1.5B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2-1.5B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-7B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2-7B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-72B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2-72B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-0.5B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-0.5B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-1.5B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-1.5B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-7B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-7B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-72B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-72B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"neuralmagic/Qwen2-0.5B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"neuralmagic/Qwen2-0.5B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"neuralmagic/Qwen2-1.5B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"neuralmagic/Qwen2-7B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"liuzhenghua/Qwen2-7B-FP8-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"neuralmagic/Qwen2-72B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"liuzhenghua/Qwen2-72B-FP8-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-0.5B-Instruct-MLX\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"qwen/Qwen2-0.5B-Instruct-MLX\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-1.5B-Instruct-MLX\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"qwen/Qwen2-1.5B-Instruct-MLX\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-7B-Instruct-MLX\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"qwen/Qwen2-7B-Instruct-MLX\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2-72B-Instruct-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-0.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-0_5b-instruct-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"qwen/Qwen2-0.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-0_5b-instruct-{quantization}.gguf\"\n          },\n          \"csghub\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"qwen/Qwen2-0.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-0_5b-instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-1.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-1_5b-instruct-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"qwen/Qwen2-1.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-1_5b-instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-7B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-7b-instruct-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"qwen/Qwen2-7B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-7b-instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-72B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-72b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2-72b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q5_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"fp16\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"qwen/Qwen2-72B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-72b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2-72b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q5_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"fp16\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ]\n            }\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- macro json_to_python_type(json_spec) %}\\n    {%- set basic_type_map = {\\n    \\\"string\\\": \\\"str\\\",\\n    \\\"number\\\": \\\"float\\\",\\n    \\\"integer\\\": \\\"int\\\",\\n    \\\"boolean\\\": \\\"bool\\\"\\n} %}\\n    {%- if basic_type_map[json_spec.type] is defined %}\\n        {{- basic_type_map[json_spec.type] }}\\n    {%- elif json_spec.type == \\\"array\\\" %}\\n        {{- \\\"list[\\\" +  json_to_python_type(json_spec|items) + \\\"]\\\" }}\\n    {%- elif json_spec.type == \\\"object\\\" %}\\n        {%- if json_spec.additionalProperties is defined %}\\n            {{- \\\"dict[str, \\\" + json_to_python_type(json_spec.additionalProperties) + ']' }}\\n        {%- else %}\\n            {{- \\\"dict\\\" }}\\n        {%- endif %}\\n    {%- elif json_spec.type is iterable %}\\n        {{- \\\"Union[\\\" }}\\n        {%- for t in json_spec.type %}\\n            {{- json_to_python_type({\\\"type\\\": t}) }}\\n            {%- if not loop.last %}\\n                {{- \\\",\\\" }}\\n            {%- endif %}\\n        {%- endfor %}\\n        {{- \\\"]\\\" }}\\n    {%- else %}\\n        {{- \\\"Any\\\" }}\\n    {%- endif %}\\n{%- endmacro %}\\n\\n{%- if tools %}\\n    {{- '<|im_start|>system\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] + '\\n\\n' }}\\n    {%- endif %}\\n    {{- '# Tools\\n\\n' }}\\n    {{- \\\"You are a function calling AI model. You are provided with function signatures within <tools></tools> XML tags. You may call one or more functions to assist with the user query. Don't make assumptions about what values to plug into functions. Here are the available tools: <tools> \\\" }}\\n    {%- for tool in tools %}\\n        {%- if tool.function is defined %}\\n            {%- set tool = tool.function %}\\n        {%- endif %}\\n        {{- '{\\\"type\\\": \\\"function\\\", \\\"function\\\": ' }}\\n        {{- '{\\\"name\\\": ' + tool.name + '\\\", ' }}\\n        {{- '\\\"description\\\": \\\"' + tool.name + '(' }}\\n        {%- for param_name, param_fields in tool.parameters.properties|items %}\\n            {{- param_name + \\\": \\\" + json_to_python_type(param_fields) }}\\n            {%- if not loop.last %}\\n                {{- \\\", \\\" }}\\n            {%- endif %}\\n        {%- endfor %}\\n        {{- \\\")\\\" }}\\n        {%- if tool.return is defined %}\\n            {{- \\\" -> \\\" + json_to_python_type(tool.return) }}\\n        {%- endif %}\\n        {{- \\\" - \\\" + tool.description + \\\"\\n\\n\\\" }}\\n        {%- for param_name, param_fields in tool.parameters.properties|items %}\\n            {%- if loop.first %}\\n                {{- \\\"    Args:\\n\\\" }}\\n            {%- endif %}\\n            {{- \\\"        \\\" + param_name + \\\"(\\\" + json_to_python_type(param_fields) + \\\"): \\\" + param_fields.description|trim }}\\n        {%- endfor %}\\n        {%- if tool.return is defined and tool.return.description is defined %}\\n            {{- \\\"\\n    Returns:\\n        \\\" + tool.return.description }}\\n        {%- endif %}\\n        {{- '\\\"' }}\\n        {{- ', \\\"parameters\\\": ' }}\\n        {%- if tool.parameters.properties | length == 0 %}\\n            {{- \\\"{}\\\" }}\\n        {%- else %}\\n            {{- tool.parameters|tojson }}\\n        {%- endif %}\\n        {{- \\\"}\\\" }}\\n        {%- if not loop.last %}\\n            {{- \\\"\\n\\\" }}\\n        {%- endif %}\\n    {%- endfor %}\\n    {{- \\\" </tools>\\\" }}\\n    {{- 'Use the following pydantic model json schema for each tool call you will make: {\\\"properties\\\": {\\\"arguments\\\": {\\\"title\\\": \\\"Arguments\\\", \\\"type\\\": \\\"object\\\"}, \\\"name\\\": {\\\"title\\\": \\\"Name\\\", \\\"type\\\": \\\"string\\\"}}, \\\"required\\\": [\\\"arguments\\\", \\\"name\\\"], \\\"title\\\": \\\"FunctionCall\\\", \\\"type\\\": \\\"object\\\"}\\n' }}\\n    {{- \\\"For each function call return a json object with function name and arguments within <tool_call></tool_call> XML tags as follows:\\n\\\" }}\\n    {{- \\\"<tool_call>\\n\\\" }}\\n    {{- '{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n' }}\\n    {{- '</tool_call><|im_end|>\\n' }}\\n{%- else %}\\n    {%- if messages[0]['role'] != 'system' %}\\n        {{- '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\n' + messages[0]['content'] + '<|im_end|>\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if message.role == \\\"user\\\" or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and message.tool_calls is not defined) %}\\n        {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role + '\\n<tool_call>\\n' }}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '{' }}\\n            {{- '\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {%- if tool_call.arguments is defined %}\\n                {{- ', ' }}\\n                {{- '\\\"arguments\\\": ' }}\\n                {{- tool_call.arguments|tojson }}\\n            {%- endif %}\\n            {{- '\\\"}' }}\\n            {{- '\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if not message.name is defined %}\\n            {{- raise_exception(\\\"Tool response dicts require a 'name' key indicating the name of the called function!\\\") }}\\n        {%- endif %}\\n        {{- '<|im_start|>user\\n<tool_response>\\n' }}\\n        {{- '{\\\"name\\\": \\\"' }}\\n        {{- message.name }}\\n        {{- '\\\", \\\"content\\\": ' }}\\n        {{- message.content|tojson + '}' }}\\n        {{- '\\n</tool_response><|im_end|>\\n' }}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\n' }}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418562,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen2-moe-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen2 is the new series of Qwen large language models. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-57B-A14B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2-57B-A14B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-57B-A14B-Instruct-GPTQ-Int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-57B-A14B-Instruct-GPTQ-Int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-57B-A14B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-57b-a14b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2-57b-a14b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"fp16\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"qwen/Qwen2-57B-A14B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2-57b-a14b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2-57b-a14b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"fp16\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ]\n            }\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- macro json_to_python_type(json_spec) %}\\n    {%- set basic_type_map = {\\n    \\\"string\\\": \\\"str\\\",\\n    \\\"number\\\": \\\"float\\\",\\n    \\\"integer\\\": \\\"int\\\",\\n    \\\"boolean\\\": \\\"bool\\\"\\n} %}\\n    {%- if basic_type_map[json_spec.type] is defined %}\\n        {{- basic_type_map[json_spec.type] }}\\n    {%- elif json_spec.type == \\\"array\\\" %}\\n        {{- \\\"list[\\\" +  json_to_python_type(json_spec|items) + \\\"]\\\" }}\\n    {%- elif json_spec.type == \\\"object\\\" %}\\n        {%- if json_spec.additionalProperties is defined %}\\n            {{- \\\"dict[str, \\\" + json_to_python_type(json_spec.additionalProperties) + ']' }}\\n        {%- else %}\\n            {{- \\\"dict\\\" }}\\n        {%- endif %}\\n    {%- elif json_spec.type is iterable %}\\n        {{- \\\"Union[\\\" }}\\n        {%- for t in json_spec.type %}\\n            {{- json_to_python_type({\\\"type\\\": t}) }}\\n            {%- if not loop.last %}\\n                {{- \\\",\\\" }}\\n            {%- endif %}\\n        {%- endfor %}\\n        {{- \\\"]\\\" }}\\n    {%- else %}\\n        {{- \\\"Any\\\" }}\\n    {%- endif %}\\n{%- endmacro %}\\n\\n{%- if tools %}\\n    {{- '<|im_start|>system\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] + '\\n\\n' }}\\n    {%- endif %}\\n    {{- '# Tools\\n\\n' }}\\n    {{- \\\"You are a function calling AI model. You are provided with function signatures within <tools></tools> XML tags. You may call one or more functions to assist with the user query. Don't make assumptions about what values to plug into functions. Here are the available tools: <tools> \\\" }}\\n    {%- for tool in tools %}\\n        {%- if tool.function is defined %}\\n            {%- set tool = tool.function %}\\n        {%- endif %}\\n        {{- '{\\\"type\\\": \\\"function\\\", \\\"function\\\": ' }}\\n        {{- '{\\\"name\\\": ' + tool.name + '\\\", ' }}\\n        {{- '\\\"description\\\": \\\"' + tool.name + '(' }}\\n        {%- for param_name, param_fields in tool.parameters.properties|items %}\\n            {{- param_name + \\\": \\\" + json_to_python_type(param_fields) }}\\n            {%- if not loop.last %}\\n                {{- \\\", \\\" }}\\n            {%- endif %}\\n        {%- endfor %}\\n        {{- \\\")\\\" }}\\n        {%- if tool.return is defined %}\\n            {{- \\\" -> \\\" + json_to_python_type(tool.return) }}\\n        {%- endif %}\\n        {{- \\\" - \\\" + tool.description + \\\"\\n\\n\\\" }}\\n        {%- for param_name, param_fields in tool.parameters.properties|items %}\\n            {%- if loop.first %}\\n                {{- \\\"    Args:\\n\\\" }}\\n            {%- endif %}\\n            {{- \\\"        \\\" + param_name + \\\"(\\\" + json_to_python_type(param_fields) + \\\"): \\\" + param_fields.description|trim }}\\n        {%- endfor %}\\n        {%- if tool.return is defined and tool.return.description is defined %}\\n            {{- \\\"\\n    Returns:\\n        \\\" + tool.return.description }}\\n        {%- endif %}\\n        {{- '\\\"' }}\\n        {{- ', \\\"parameters\\\": ' }}\\n        {%- if tool.parameters.properties | length == 0 %}\\n            {{- \\\"{}\\\" }}\\n        {%- else %}\\n            {{- tool.parameters|tojson }}\\n        {%- endif %}\\n        {{- \\\"}\\\" }}\\n        {%- if not loop.last %}\\n            {{- \\\"\\n\\\" }}\\n        {%- endif %}\\n    {%- endfor %}\\n    {{- \\\" </tools>\\\" }}\\n    {{- 'Use the following pydantic model json schema for each tool call you will make: {\\\"properties\\\": {\\\"arguments\\\": {\\\"title\\\": \\\"Arguments\\\", \\\"type\\\": \\\"object\\\"}, \\\"name\\\": {\\\"title\\\": \\\"Name\\\", \\\"type\\\": \\\"string\\\"}}, \\\"required\\\": [\\\"arguments\\\", \\\"name\\\"], \\\"title\\\": \\\"FunctionCall\\\", \\\"type\\\": \\\"object\\\"}\\n' }}\\n    {{- \\\"For each function call return a json object with function name and arguments within <tool_call></tool_call> XML tags as follows:\\n\\\" }}\\n    {{- \\\"<tool_call>\\n\\\" }}\\n    {{- '{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n' }}\\n    {{- '</tool_call><|im_end|>\\n' }}\\n{%- else %}\\n    {%- if messages[0]['role'] != 'system' %}\\n        {{- '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\n' + messages[0]['content'] + '<|im_end|>\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if message.role == \\\"user\\\" or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and message.tool_calls is not defined) %}\\n        {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role + '\\n<tool_call>\\n' }}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '{' }}\\n            {{- '\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {%- if tool_call.arguments is defined %}\\n                {{- ', ' }}\\n                {{- '\\\"arguments\\\": ' }}\\n                {{- tool_call.arguments|tojson }}\\n            {%- endif %}\\n            {{- '\\\"}' }}\\n            {{- '\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if not message.name is defined %}\\n            {{- raise_exception(\\\"Tool response dicts require a 'name' key indicating the name of the called function!\\\") }}\\n        {%- endif %}\\n        {{- '<|im_start|>user\\n<tool_response>\\n' }}\\n        {{- '{\\\"name\\\": \\\"' }}\\n        {{- message.name }}\\n        {{- '\\\", \\\"content\\\": ' }}\\n        {{- message.content|tojson + '}' }}\\n        {{- '\\n</tool_response><|im_end|>\\n' }}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\n' }}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418563,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2MoeForCausalLM\"\n    ],\n    \"model_type\": \"qwen2_moe\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen2-vl-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"Qwen2-VL: To See the World More Clearly.Qwen2-VL is the latest version of the vision language models in the Qwen model familities.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-2B-Instruct\",\n            \"model_revision\": \"096da3b96240e3d66d35be0e5ccbe282eea8d6b1\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-2B-Instruct\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LlamaFactory/Qwen2-VL-2B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-2B-Instruct-GPTQ-Int8\",\n            \"model_revision\": \"d15fb11857ccc566903e2e71341f9db7babb567b\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-2B-Instruct-GPTQ-Int8\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-2B-Instruct-GPTQ-Int4\",\n            \"model_revision\": \"800d396518c82960ce6d231adecd07bbc474f0a9\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-2B-Instruct-GPTQ-Int4\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-2B-Instruct-AWQ\",\n            \"model_revision\": \"ea8c5854c0044e28626719292de0d9b1a671f6fc\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-2B-Instruct-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2-VL-2B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2-VL-2B-Instruct-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-7B-Instruct\",\n            \"model_revision\": \"6010982c1010c3b222fa98afc81575f124aa9bd6\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-7B-Instruct\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"LlamaFactory/Qwen2-VL-7B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-7B-Instruct-GPTQ-Int8\",\n            \"model_revision\": \"3d152a77eaccfd72d59baedb0b183a1b8fd56e48\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-7B-Instruct-GPTQ-Int8\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-7B-Instruct-GPTQ-Int4\",\n            \"model_revision\": \"5ab897112fa83b9699826be8753ef9184585c77d\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-7B-Instruct-GPTQ-Int4\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-7B-Instruct-AWQ\",\n            \"model_revision\": \"f94216e8b513933bccd567bcd9b7350199f32538\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-7B-Instruct-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-72B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-72B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-72B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-72B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2-VL-72B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2-VL-72B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2-VL-72B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2-VL-72B-Instruct-MLX-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2-VL-7B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2-VL-7B-Instruct-MLX-8bit\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% set image_count = namespace(value=0) %}{% set video_count = namespace(value=0) %}{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n{% endif %}<|im_start|>{{ message['role'] }}\\n{% if message['content'] is string %}{{ message['content'] }}<|im_end|>\\n{% else %}{% for content in message['content'] %}{% if content['type'] == 'image' or 'image' in content or 'image_url' in content %}{% set image_count.value = image_count.value + 1 %}{% if add_vision_id %}Picture {{ image_count.value }}: {% endif %}<|vision_start|><|image_pad|><|vision_end|>{% elif content['type'] == 'video' or 'video' in content %}{% set video_count.value = video_count.value + 1 %}{% if add_vision_id %}Video {{ video_count.value }}: {% endif %}<|vision_start|><|video_pad|><|vision_end|>{% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|>\\n{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant\\n{% endif %}\",\n    \"stop_token_ids\": [\n      151645,\n      151643\n    ],\n    \"stop\": [\n      \"<|im_end|>\",\n      \"<|endoftext|>\"\n    ],\n    \"updated_at\": 1769418564,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2VLForConditionalGeneration\"\n    ],\n    \"model_type\": \"qwen2_vl\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen2.5\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Qwen2.5 is the latest series of Qwen large language models. For Qwen2.5, we release a number of base language models and instruction-tuned language models ranging from 0.5 to 72 billion parameters.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-0.5B\",\n            \"model_revision\": \"2630d3d2321bc1f1878f702166d1b2af019a7310\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-0.5B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Tianjin_Ascend/qwen2.5-0.5b\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-1.5B\",\n            \"model_revision\": \"e5dfabbcffd9b0c7b31d89b82c5a6b72e663f32c\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-1.5B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Tianjin_Ascend/Qwen2.5-1.5B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-3B\",\n            \"model_revision\": \"e4aa5ac50aa507415cda96cc99eb77ad0a3d2d34\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-3B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Tianjin_Ascend/Qwen2.5-3B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-7B\",\n            \"model_revision\": \"09a0bac5707b43ec44508eab308b0846320c1ed4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-7B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/Qwen2.5-7B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-14B\",\n            \"model_revision\": \"d02b64ba1ce86bf9948668a13f82709600431ccc\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-14B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-32B\",\n            \"model_revision\": \"ff23665d01c3665be5fdb271d18a62090b65c06d\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-32B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/Qwen2.5-32B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-72B\",\n            \"model_revision\": \"587cc4061cf6a7cc0d429d05c109447e5cf063af\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-72B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418565,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen2.5-coder\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen).\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-0.5B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-0.5B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-1.5B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-1.5B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-3B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-3B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-7B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-14B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-14B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-32B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-32B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418565,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen2.5-coder-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen2.5-Coder is the latest series of Code-Specific Qwen large language models (formerly known as CodeQwen).\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-0.5B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-0.5B-Instruct\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-1.5B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-1.5B-Instruct\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-3B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-3B-Instruct\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-7B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-7B-Instruct\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-14B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-14B-Instruct\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-32B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-32B-Instruct\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-0.5B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-0.5B-Instruct-GPTQ-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-1.5B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-1.5B-Instruct-GPTQ-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-0.5B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-0.5B-Instruct-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-1.5B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-1.5B-Instruct-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-coder-1.5b-instruct-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-coder-1.5b-instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-7B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-coder-7b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-coder-7b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q4_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-7B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-coder-7b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-coder-7b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q4_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-3B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-7B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"14\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-14B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"32\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-32B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-3B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-7B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"14\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-14B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"32\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Coder-32B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-3B-Instruct-GPTQ-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-7B-Instruct-GPTQ-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-14B-Instruct-GPTQ-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-32B-Instruct-GPTQ-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-3B-Instruct-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-7B-Instruct-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-14B-Instruct-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-Coder-32B-Instruct-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418566,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen2.5-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen2.5 is the latest series of Qwen large language models. For Qwen2.5, we release a number of base language models and instruction-tuned language models ranging from 0.5 to 72 billion parameters.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-0.5B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-0.5B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-1.5B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-1.5B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-3B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-3B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-7B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-7B-Instruct\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/Qwen2.5-7B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-14B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-14B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-32B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-32B-Instruct\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-Research/Qwen2.5-32B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-72B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-72B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-0.5B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-0.5B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-1.5B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-1.5B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-3B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-3B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-7B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-7B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-14B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-14B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-32B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-32B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-72B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-72B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-0.5B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-0.5B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-1.5B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2-1.5B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-3B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-3B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-7B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-7B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-14B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-14B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-32B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-32B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-72B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-72B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-0.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-0.5b-instruct-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-0.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-0.5b-instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-1.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-1.5b-instruct-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-1.5B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-1.5b-instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-3B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-3b-instruct-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-3B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-3b-instruct-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-7B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-7b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-7b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q4_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-7B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-7b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-7b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q4_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-14B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-14b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-14b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q2_k\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q3_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q4_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-14B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2.5-14b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-14b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q2_k\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q3_k_m\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"q4_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-32B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2_5-32b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-32b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q2_k\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"q3_k_m\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"q4_0\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-32B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2_5-32b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-32b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q2_k\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"q3_k_m\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"q4_0\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-3B-Instruct-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-3B-Instruct-MLX-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-3B-Instruct-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-3B-Instruct-MLX-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-7B-Instruct-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-7B-Instruct-MLX-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-7B-Instruct-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-7B-Instruct-MLX-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-14B-Instruct-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-14B-Instruct-MLX-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-14B-Instruct-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-14B-Instruct-MLX-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-32B-Instruct-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-32B-Instruct-MLX-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-32B-Instruct-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-32B-Instruct-MLX-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-72B-Instruct-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-72B-Instruct-MLX-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-72B-Instruct-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-72B-Instruct-MLX-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\",\n              \"fp16\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-72B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2_5-72b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-72b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q2_k\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"q3_k_m\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"q4_0\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00013\",\n                \"00002-of-00013\",\n                \"00003-of-00013\",\n                \"00004-of-00013\",\n                \"00005-of-00013\",\n                \"00006-of-00013\",\n                \"00007-of-00013\",\n                \"00008-of-00013\",\n                \"00009-of-00013\",\n                \"00010-of-00013\",\n                \"00011-of-00013\",\n                \"00012-of-00013\",\n                \"00013-of-00013\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00014\",\n                \"00002-of-00014\",\n                \"00003-of-00014\",\n                \"00004-of-00014\",\n                \"00005-of-00014\",\n                \"00006-of-00014\",\n                \"00007-of-00014\",\n                \"00008-of-00014\",\n                \"00009-of-00014\",\n                \"00010-of-00014\",\n                \"00011-of-00014\",\n                \"00012-of-00014\",\n                \"00013-of-00014\",\n                \"00014-of-00014\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00016\",\n                \"00002-of-00016\",\n                \"00003-of-00016\",\n                \"00004-of-00016\",\n                \"00005-of-00016\",\n                \"00006-of-00016\",\n                \"00007-of-00016\",\n                \"00008-of-00016\",\n                \"00009-of-00016\",\n                \"00010-of-00016\",\n                \"00011-of-00016\",\n                \"00012-of-00016\",\n                \"00013-of-00016\",\n                \"00014-of-00016\",\n                \"00015-of-00016\",\n                \"00016-of-00016\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00021\",\n                \"00002-of-00021\",\n                \"00003-of-00021\",\n                \"00004-of-00021\",\n                \"00005-of-00021\",\n                \"00006-of-00021\",\n                \"00007-of-00021\",\n                \"00008-of-00021\",\n                \"00009-of-00021\",\n                \"00010-of-00021\",\n                \"00011-of-00021\",\n                \"00012-of-00021\",\n                \"00013-of-00021\",\n                \"00014-of-00021\",\n                \"00015-of-00021\",\n                \"00016-of-00021\",\n                \"00017-of-00021\",\n                \"00018-of-00021\",\n                \"00019-of-00021\",\n                \"00020-of-00021\",\n                \"00021-of-00021\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"q2_k\",\n              \"q3_k_m\",\n              \"q4_0\",\n              \"q4_k_m\",\n              \"q5_0\",\n              \"q5_k_m\",\n              \"q6_k\",\n              \"q8_0\"\n            ],\n            \"model_id\": \"qwen/Qwen2.5-72B-Instruct-GGUF\",\n            \"model_file_name_template\": \"qwen2_5-72b-instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"qwen2.5-72b-instruct-{quantization}-{part}.gguf\",\n            \"quantization_parts\": {\n              \"q2_k\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"q3_k_m\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"q4_0\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"q4_k_m\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"q5_0\": [\n                \"00001-of-00013\",\n                \"00002-of-00013\",\n                \"00003-of-00013\",\n                \"00004-of-00013\",\n                \"00005-of-00013\",\n                \"00006-of-00013\",\n                \"00007-of-00013\",\n                \"00008-of-00013\",\n                \"00009-of-00013\",\n                \"00010-of-00013\",\n                \"00011-of-00013\",\n                \"00012-of-00013\",\n                \"00013-of-00013\"\n              ],\n              \"q5_k_m\": [\n                \"00001-of-00014\",\n                \"00002-of-00014\",\n                \"00003-of-00014\",\n                \"00004-of-00014\",\n                \"00005-of-00014\",\n                \"00006-of-00014\",\n                \"00007-of-00014\",\n                \"00008-of-00014\",\n                \"00009-of-00014\",\n                \"00010-of-00014\",\n                \"00011-of-00014\",\n                \"00012-of-00014\",\n                \"00013-of-00014\",\n                \"00014-of-00014\"\n              ],\n              \"q6_k\": [\n                \"00001-of-00016\",\n                \"00002-of-00016\",\n                \"00003-of-00016\",\n                \"00004-of-00016\",\n                \"00005-of-00016\",\n                \"00006-of-00016\",\n                \"00007-of-00016\",\n                \"00008-of-00016\",\n                \"00009-of-00016\",\n                \"00010-of-00016\",\n                \"00011-of-00016\",\n                \"00012-of-00016\",\n                \"00013-of-00016\",\n                \"00014-of-00016\",\n                \"00015-of-00016\",\n                \"00016-of-00016\"\n              ],\n              \"q8_0\": [\n                \"00001-of-00021\",\n                \"00002-of-00021\",\n                \"00003-of-00021\",\n                \"00004-of-00021\",\n                \"00005-of-00021\",\n                \"00006-of-00021\",\n                \"00007-of-00021\",\n                \"00008-of-00021\",\n                \"00009-of-00021\",\n                \"00010-of-00021\",\n                \"00011-of-00021\",\n                \"00012-of-00021\",\n                \"00013-of-00021\",\n                \"00014-of-00021\",\n                \"00015-of-00021\",\n                \"00016-of-00021\",\n                \"00017-of-00021\",\n                \"00018-of-00021\",\n                \"00019-of-00021\",\n                \"00020-of-00021\",\n                \"00021-of-00021\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-0.5B-Instruct-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-0.5B-Instruct-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-0.5B-Instruct-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-1.5B-Instruct-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-1.5B-Instruct-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-1.5B-Instruct-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-3B-Instruct-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-7B-Instruct-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-14B-Instruct-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-32B-Instruct-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"2bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-32B-Instruct-MLX-2bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-72B-Instruct-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"2bit\"\n            ],\n            \"model_id\": \"okwinds/Qwen2.5-32B-Instruct-MLX-2bit\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418567,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 1010000,\n    \"model_name\": \"qwen2.5-instruct-1m\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Qwen2.5-1M is the long-context version of the Qwen2.5 series models, supporting a context length of up to 1M tokens.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-7B-Instruct-1M\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-7B-Instruct-1M\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-14B-Instruct-1M\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-14B-Instruct-1M\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- 'You are a helpful assistant.' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + message.content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151645,\n      151643\n    ],\n    \"stop\": [\n      \"<|im_end|>\",\n      \"<|endoftext|>\"\n    ],\n    \"updated_at\": 1769418568,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwen2.5-omni\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\",\n      \"audio\",\n      \"omni\"\n    ],\n    \"model_description\": \"Qwen2.5-Omni: the new flagship end-to-end multimodal model in the Qwen series.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Omni-3B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Omni-3B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Omni-7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-Omni-7B\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% set audio_count = namespace(value=0) %}{% set image_count = namespace(value=0) %}{% set video_count = namespace(value=0) %}{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n{% endif %}<|im_start|>{{ message['role'] }}\\n{% if message['content'] is string %}{{ message['content'] }}<|im_end|>\\n{% else %}{% for content in message['content'] %}{% if content['type'] == 'image' or 'image' in content or 'image_url' in content %}{% set image_count.value = image_count.value + 1 %}{% if add_vision_id %}Picture {{ image_count.value }}: {% endif %}<|vision_bos|><|IMAGE|><|vision_eos|>{% elif content['type'] == 'audio' or 'audio' in content or 'audio_url' in content %}{% set audio_count.value = audio_count.value + 1 %}{% if add_audio_id %}Audio {{ audio_count.value }}: {% endif %}<|audio_bos|><|AUDIO|><|audio_eos|>{% elif content['type'] == 'video' or 'video' in content %}{% set video_count.value = video_count.value + 1 %}{% if add_vision_id %}Video {{ video_count.value }}: {% endif %}<|vision_bos|><|VIDEO|><|vision_eos|>{% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|>\\n{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant\\n{% endif %}\",\n    \"stop_token_ids\": [\n      151645,\n      151643\n    ],\n    \"stop\": [\n      \"<|im_end|>\",\n      \"<|endoftext|>\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\",\n        \"qwen_omni_utils\",\n        \"soundfile\"\n      ]\n    },\n    \"updated_at\": 1769418569,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2_5OmniModel\"\n    ],\n    \"model_type\": \"qwen2_5_omni\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 128000,\n    \"model_name\": \"qwen2.5-vl-instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"Qwen2.5-VL: Qwen2.5-VL is the latest version of the vision language models in the Qwen model familities.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-3B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-3B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-7B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-7B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-32B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-32B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-72B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-72B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-3B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-3B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-7B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-7B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-32B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-32B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen2.5-VL-72B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-VL-3B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-VL-3B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-VL-7B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-VL-7B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-VL-32B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-VL-32B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 72,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-VL-72B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen2.5-VL-72B-Instruct-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% set image_count = namespace(value=0) %}{% set video_count = namespace(value=0) %}{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n{% endif %}<|im_start|>{{ message['role'] }}\\n{% if message['content'] is string %}{{ message['content'] }}<|im_end|>\\n{% else %}{% for content in message['content'] %}{% if content['type'] == 'image' or 'image' in content or 'image_url' in content %}{% set image_count.value = image_count.value + 1 %}{% if add_vision_id %}Picture {{ image_count.value }}: {% endif %}<|vision_start|><|image_pad|><|vision_end|>{% elif content['type'] == 'video' or 'video' in content %}{% set video_count.value = video_count.value + 1 %}{% if add_vision_id %}Video {{ video_count.value }}: {% endif %}<|vision_start|><|video_pad|><|vision_end|>{% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|>\\n{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant\\n{% endif %}\",\n    \"stop_token_ids\": [\n      151645,\n      151643\n    ],\n    \"stop\": [\n      \"<|im_end|>\",\n      \"<|endoftext|>\"\n    ],\n    \"updated_at\": 1769418570,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2_5_VLForConditionalGeneration\"\n    ],\n    \"model_type\": \"qwen2_5_vl\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 40960,\n    \"model_name\": \"qwen3\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"hybrid\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models. Built upon extensive training, Qwen3 delivers groundbreaking advancements in reasoning, instruction-following, agent capabilities, and multilingual support.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_6\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-0.6B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-0.6B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": \"0_6\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-0.6B-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-0.6B-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"0_6\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-0.6B-GPTQ-Int8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-0.6B-GPTQ-Int8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"0_6\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-0.6B-GPTQ-Int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-0.6B-GPTQ-Int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"0_6\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-0.6B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-0.6B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"0_6\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-0.6B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-0.6B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-0.6B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-0.6B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-1.7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-1.7B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": \"1_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-1.7B-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-1.7B-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-1.7B-GPTQ-Int8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-1.7B-GPTQ-Int8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": \"1_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-1.7B-GPTQ-Int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-1.7B-GPTQ-Int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"1_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-1.7B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-1.7B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"1_7\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-1.7B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-1.7B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-1.7B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-1.7B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-4B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-4B-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-4B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-4B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-4B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-4B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-4B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-4B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-8B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-8B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-8B-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-8B-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-8B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-8B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-8B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-8B-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-8B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-8B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-8B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-8B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-8B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-8B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-14B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-14B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-14B-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-14B-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-14B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-14B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-14B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-14B-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-14B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-14B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 14,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-14B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-14B-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-14B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-14B-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-30B-A3B-GPTQ-Int8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-30B-A3B-GPTQ-Int8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-GPTQ-Int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-GPTQ-Int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-30B-A3B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-30B-A3B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-30B-A3B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-30B-A3B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"BF16/Qwen3-30B-A3B-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-30B-A3B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-30B-A3B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"BF16/Qwen3-30B-A3B-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-32B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-32B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-32B-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-32B-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-32B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-32B-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-32B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-32B-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-32B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-32B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-32B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-32B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"BF16/Qwen3-32B-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-32B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-32B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"BF16/Qwen3-32B-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-235B-A22B-GPTQ-Int8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-235B-A22B-GPTQ-Int8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-GPTQ-Int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-GPTQ-Int4\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen/Qwen3-235B-A22B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-235B-A22B-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-235B-A22B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-235B-A22B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-235B-A22B-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"IQ4_NL\",\n              \"IQ4_XS\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-235B-A22B-GGUF\",\n            \"model_file_name_template\": \"Qwen3-235B-A22B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-235B-A22B-{quantization}-{part}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}\\n        {{- messages[0].content + '\\\\n\\\\n' }}\\n    {%- endif %}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0].content + '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\\n{%- for message in messages[::-1] %}\\n    {%- set index = (messages|length - 1) - loop.index0 %}\\n    {%- if ns.multi_step_tool and message.role == \\\"user\\\" and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\\n        {%- set ns.multi_step_tool = false %}\\n        {%- set ns.last_query_index = index %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set content = message.content %}\\n        {%- set reasoning_content = '' %}\\n        {%- if message.reasoning_content is defined and message.reasoning_content is not none %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in message.content %}\\n                {%- set content = message.content.split('</think>')[-1].lstrip('\\\\n') %}\\n                {%- set reasoning_content = message.content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if loop.index0 > ns.last_query_index %}\\n            {%- if loop.last or (not loop.last and reasoning_content) %}\\n                {{- '<|im_start|>' + message.role + '\\\\n<think>\\\\n' + reasoning_content.strip('\\\\n') + '\\\\n</think>\\\\n\\\\n' + content.lstrip('\\\\n') }}\\n            {%- else %}\\n                {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n            {%- endif %}\\n        {%- else %}\\n            {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- endif %}\\n        {%- if message.tool_calls %}\\n            {%- for tool_call in message.tool_calls %}\\n                {%- if (loop.first and content) or (not loop.first) %}\\n                    {{- '\\\\n' }}\\n                {%- endif %}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n                {{- tool_call.name }}\\n                {{- '\\\", \\\"arguments\\\": ' }}\\n                {%- if tool_call.arguments is string %}\\n                    {{- tool_call.arguments }}\\n                {%- else %}\\n                    {{- tool_call.arguments | tojson }}\\n                {%- endif %}\\n                {{- '}\\\\n</tool_call>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n    {%- if enable_thinking is defined and enable_thinking is false %}\\n        {{- '<think>\\\\n\\\\n</think>\\\\n\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418571,\n    \"featured\": true,\n    \"architectures\": [\n      \"Qwen3ForCausalLM\"\n    ],\n    \"model_type\": \"qwen3\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Qwen3-Instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"We introduce the updated version of the Qwen3-235B-A22B non-thinking mode, named Qwen3-235B-A22B-Instruct-2507\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-Instruct-2507\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-Instruct-2507\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-Instruct-2507\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-Instruct-2507\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-Instruct-2507\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-Instruct-2507\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-Instruct-2507-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-Instruct-2507-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-Instruct-2507-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-Instruct-2507-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-Instruct-2507-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-Instruct-2507-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-235B-A22B-Instruct-2507-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-235B-A22B-Instruct-2507-GPTQ-Int4-Int8Mix\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-30B-A3B-Instruct-2507-GPTQ-Int8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-30B-A3B-Instruct-2507-GPTQ-Int8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-4B-Instruct-2507-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-4B-Instruct-2507-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-235B-A22B-Instruct-2507-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-235B-A22B-Instruct-2507-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cpatonn/Qwen3-30B-A3B-Instruct-2507-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cpatonn-mirror/Qwen3-30B-A3B-Instruct-2507-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Eslzzyl/Qwen3-4B-Instruct-2507-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Eslzzyl/Qwen3-4B-Instruct-2507-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-235B-A22B-Instruct-2507-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-235B-A22B-Instruct-2507-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-30B-A3B-Instruct-2507-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-30B-A3B-Instruct-2507-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-4B-Instruct-2507-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-4B-Instruct-2507-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-235B-A22B-Instruct-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-235B-A22B-Instruct-2507-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-235B-A22B-Instruct-2507-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-235B-A22B-Instruct-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-235B-A22B-Instruct-2507-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-235B-A22B-Instruct-2507-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-30B-A3B-Instruct-2507-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-30B-A3B-Instruct-2507-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-30B-A3B-Instruct-2507-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-30B-A3B-Instruct-2507-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-4B-Instruct-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-4B-Instruct-2507-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-4B-Instruct-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-4B-Instruct-2507-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}\\n        {{- messages[0].content + '\\\\n\\\\n' }}\\n    {%- endif %}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0].content + '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\\n{%- for message in messages[::-1] %}\\n    {%- set index = (messages|length - 1) - loop.index0 %}\\n    {%- if ns.multi_step_tool and message.role == \\\"user\\\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\\n        {%- set ns.multi_step_tool = false %}\\n        {%- set ns.last_query_index = index %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- for message in messages %}\\n    {%- if message.content is string %}\\n        {%- set content = message.content %}\\n    {%- else %}\\n        {%- set content = '' %}\\n    {%- endif %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set reasoning_content = '' %}\\n        {%- if message.reasoning_content is string %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in content %}\\n                {%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n                {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if loop.index0 > ns.last_query_index %}\\n            {%- if loop.last or (not loop.last and reasoning_content) %}\\n                {{- '<|im_start|>' + message.role + '\\\\n<think>\\\\n' + reasoning_content.strip('\\\\n') + '\\\\n</think>\\\\n\\\\n' + content.lstrip('\\\\n') }}\\n            {%- else %}\\n                {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n            {%- endif %}\\n        {%- else %}\\n            {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- endif %}\\n        {%- if message.tool_calls %}\\n            {%- for tool_call in message.tool_calls %}\\n                {%- if (loop.first and content) or (not loop.first) %}\\n                    {{- '\\\\n' }}\\n                {%- endif %}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n                {{- tool_call.name }}\\n                {{- '\\\", \\\"arguments\\\": ' }}\\n                {%- if tool_call.arguments is string %}\\n                    {{- tool_call.arguments }}\\n                {%- else %}\\n                    {{- tool_call.arguments | tojson }}\\n                {%- endif %}\\n                {{- '}\\\\n</tool_call>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418573,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen3MoeForCausalLM\"\n    ],\n    \"model_type\": \"qwen3_moe\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Qwen3-Thinking\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"tools\"\n    ],\n    \"model_description\": \"we have continued to scale the thinking capability of Qwen3-235B-A22B, improving both the quality and depth of reasoning\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-Thinking-2507\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-Thinking-2507\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-Thinking-2507\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-Thinking-2507\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-Thinking-2507\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-Thinking-2507\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-Thinking-2507-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-235B-A22B-Thinking-2507-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-Thinking-2507-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-30B-A3B-Thinking-2507-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-Thinking-2507-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-4B-Thinking-2507-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-235B-A22B-Thinking-2507-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-235B-A22B-Thinking-2507-GPTQ-Int4-Int8Mix\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-30B-A3B-Thinking-2507-GPTQ-Int8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-30B-A3B-Thinking-2507-GPTQ-Int8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-4B-Thinking-2507-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"Int8\"\n            ],\n            \"model_id\": \"JunHowie/Qwen3-4B-Thinking-2507-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-235B-A22B-Thinking-2507-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-235B-A22B-Thinking-2507-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-30B-A3B-Thinking-2507-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-30B-A3B-Thinking-2507-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Eslzzyl/Qwen3-4B-Thinking-2507-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Eslzzyl/Qwen3-4B-Thinking-2507-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-235B-A22B-Thinking-2507-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-235B-A22B-Thinking-2507-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-30B-A3B-Thinking-2507-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-30B-A3B-Thinking-2507-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-4B-Thinking-2507-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-4B-Thinking-2507-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-235B-A22B-Thinking-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-235B-A22B-Thinking-2507-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-235B-A22B-Thinking-2507-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-235B-A22B-Thinking-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-235B-A22B-Thinking-2507-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-235B-A22B-Thinking-2507-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-30B-A3B-Thinking-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-30B-A3B-Thinking-2507-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-30B-A3B-Thinking-2507-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-30B-A3B-Thinking-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-30B-A3B-Thinking-2507-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-30B-A3B-Thinking-2507-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-4B-Thinking-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-4B-Thinking-2507-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"model_id\": \"unsloth/Qwen3-4B-Thinking-2507-GGUF\",\n            \"model_file_name_template\": \"Qwen3-4B-Thinking-2507-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}\\n        {{- messages[0].content + '\\\\n\\\\n' }}\\n    {%- endif %}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0].content + '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\\n{%- for message in messages[::-1] %}\\n    {%- set index = (messages|length - 1) - loop.index0 %}\\n    {%- if ns.multi_step_tool and message.role == \\\"user\\\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\\n        {%- set ns.multi_step_tool = false %}\\n        {%- set ns.last_query_index = index %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- for message in messages %}\\n    {%- if message.content is string %}\\n        {%- set content = message.content %}\\n    {%- else %}\\n        {%- set content = '' %}\\n    {%- endif %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set reasoning_content = '' %}\\n        {%- if message.reasoning_content is string %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in content %}\\n                {%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n                {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if loop.index0 > ns.last_query_index %}\\n            {%- if loop.last or (not loop.last and reasoning_content) %}\\n                {{- '<|im_start|>' + message.role + '\\\\n<think>\\\\n' + reasoning_content.strip('\\\\n') + '\\\\n</think>\\\\n\\\\n' + content.lstrip('\\\\n') }}\\n            {%- else %}\\n                {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n            {%- endif %}\\n        {%- else %}\\n            {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- endif %}\\n        {%- if message.tool_calls %}\\n            {%- for tool_call in message.tool_calls %}\\n                {%- if (loop.first and content) or (not loop.first) %}\\n                    {{- '\\\\n' }}\\n                {%- endif %}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n                {{- tool_call.name }}\\n                {{- '\\\", \\\"arguments\\\": ' }}\\n                {%- if tool_call.arguments is string %}\\n                    {{- tool_call.arguments }}\\n                {%- else %}\\n                    {{- tool_call.arguments | tojson }}\\n                {%- endif %}\\n                {{- '}\\\\n</tool_call>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n<think>\\\\n' }}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418574,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen3MoeForCausalLM\"\n    ],\n    \"model_type\": \"qwen3_moe\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Qwen3-Coder\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"we're announcing Qwen3-Coder, our most agentic code model to date\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 480,\n        \"activated_size_in_billions\": 35,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Coder-480B-A35B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Coder-480B-A35B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Coder-30B-A3B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Coder-30B-A3B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 480,\n        \"activated_size_in_billions\": 35,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 480,\n        \"activated_size_in_billions\": 35,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-Coder-480B-A35B-Instruct-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-Coder-480B-A35B-Instruct-GPTQ-Int4-Int8Mix\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-Coder-30B-A3B-Instruct-GPTQ-Int8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-Coder-30B-A3B-Instruct-GPTQ-Int8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 480,\n        \"activated_size_in_billions\": 35,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-Coder-480B-A35B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-Coder-480B-A35B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-Coder-30B-A3B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-Coder-30B-A3B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 480,\n        \"activated_size_in_billions\": 35,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-Coder-480B-A35B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-Coder-480B-A35B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-Coder-30B-A3B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-Coder-30B-A3B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 480,\n        \"activated_size_in_billions\": 35,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00021\",\n                \"00002-of-00021\",\n                \"00003-of-00021\",\n                \"00004-of-00021\",\n                \"00005-of-00021\",\n                \"00006-of-00021\",\n                \"00007-of-00021\",\n                \"00008-of-00021\",\n                \"00009-of-00021\",\n                \"00010-of-00021\",\n                \"00011-of-00021\",\n                \"00012-of-00021\",\n                \"00013-of-00021\",\n                \"00014-of-00021\",\n                \"00015-of-00021\",\n                \"00016-of-00021\",\n                \"00017-of-00021\",\n                \"00018-of-00021\",\n                \"00019-of-00021\",\n                \"00020-of-00021\",\n                \"00021-of-00021\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"UD-IQ3_XXS\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-Coder-480B-A35B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Qwen3-Coder-480B-A35B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-Coder-480B-A35B-Instruct-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00021\",\n                \"00002-of-00021\",\n                \"00003-of-00021\",\n                \"00004-of-00021\",\n                \"00005-of-00021\",\n                \"00006-of-00021\",\n                \"00007-of-00021\",\n                \"00008-of-00021\",\n                \"00009-of-00021\",\n                \"00010-of-00021\",\n                \"00011-of-00021\",\n                \"00012-of-00021\",\n                \"00013-of-00021\",\n                \"00014-of-00021\",\n                \"00015-of-00021\",\n                \"00016-of-00021\",\n                \"00017-of-00021\",\n                \"00018-of-00021\",\n                \"00019-of-00021\",\n                \"00020-of-00021\",\n                \"00021-of-00021\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"UD-IQ3_XXS\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-Coder-480B-A35B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Qwen3-Coder-480B-A35B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-Coder-480B-A35B-Instruct-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Qwen3-Coder-30B-A3B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-Coder-30B-A3B-Instruct-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\",\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Qwen3-Coder-30B-A3B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Qwen3-Coder-30B-A3B-Instruct-{quantization}-{part}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% macro render_extra_keys(json_dict, handled_keys) %}\\n    {%- if json_dict is mapping %}\\n        {%- for json_key in json_dict if json_key not in handled_keys %}\\n            {%- if json_dict[json_key] is mapping %}\\n                {{- '\\\\n<' ~ json_key ~ '>' ~ (json_dict[json_key] | tojson | safe) ~ '</' ~ json_key ~ '>' }}\\n            {%- else %}\\n                {{-'\\\\n<' ~ json_key ~ '>' ~ (json_dict[json_key] | string) ~ '</' ~ json_key ~ '>' }}\\n            {%- endif %}\\n        {%- endfor %}\\n    {%- endif %}\\n{% endmacro %}\\n\\n{%- if messages[0][\\\"role\\\"] == \\\"system\\\" %}\\n    {%- set system_message = messages[0][\\\"content\\\"] %}\\n    {%- set loop_messages = messages[1:] %}\\n{%- else %}\\n    {%- set loop_messages = messages %}\\n{%- endif %}\\n\\n{%- if not tools is defined %}\\n    {%- set tools = [] %}\\n{%- endif %}\\n\\n{%- if system_message is defined %}\\n    {{- \\\"<|im_start|>system\\\\n\\\" + system_message }}\\n{%- else %}\\n    {%- if tools is iterable and tools | length > 0 %}\\n        {{- \\\"<|im_start|>system\\\\nYou are Qwen, a helpful AI assistant that can interact with a computer to solve tasks.\\\" }}\\n    {%- endif %}\\n{%- endif %}\\n{%- if tools is iterable and tools | length > 0 %}\\n    {{- \\\"\\\\n\\\\nYou have access to the following functions:\\\\n\\\\n\\\" }}\\n    {{- \\\"<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {%- if tool.function is defined %}\\n            {%- set tool = tool.function %}\\n        {%- endif %}\\n        {{- \\\"\\\\n<function>\\\\n<name>\\\" ~ tool.name ~ \\\"</name>\\\" }}\\n        {%- if tool.description is defined %}\\n            {{- '\\\\n<description>' ~ (tool.description | trim) ~ '</description>' }}\\n        {%- endif %}\\n        {{- '\\\\n<parameters>' }}\\n        {%- if tool.parameters is defined and tool.parameters is mapping and tool.parameters.properties is defined and tool.parameters.properties is mapping %}\\n            {%- for param_name, param_fields in tool.parameters.properties|items %}\\n                {{- '\\\\n<parameter>' }}\\n                {{- '\\\\n<name>' ~ param_name ~ '</name>' }}\\n                {%- if param_fields.type is defined %}\\n                    {{- '\\\\n<type>' ~ (param_fields.type | string) ~ '</type>' }}\\n                {%- endif %}\\n                {%- if param_fields.description is defined %}\\n                    {{- '\\\\n<description>' ~ (param_fields.description | trim) ~ '</description>' }}\\n                {%- endif %}\\n                {%- set handled_keys = ['name', 'type', 'description'] %}\\n                {{- render_extra_keys(param_fields, handled_keys) }}\\n                {{- '\\\\n</parameter>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {% set handled_keys = ['type', 'properties'] %}\\n        {{- render_extra_keys(tool.parameters, handled_keys) }}\\n        {{- '\\\\n</parameters>' }}\\n        {%- set handled_keys = ['type', 'name', 'description', 'parameters'] %}\\n        {{- render_extra_keys(tool, handled_keys) }}\\n        {{- '\\\\n</function>' }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\" }}\\n    {{- '\\\\n\\\\nIf you choose to call a function ONLY reply in the following format with NO suffix:\\\\n\\\\n<tool_call>\\\\n<function=example_function_name>\\\\n<parameter=example_parameter_1>\\\\nvalue_1\\\\n</parameter>\\\\n<parameter=example_parameter_2>\\\\nThis is the value for the second parameter\\\\nthat can span\\\\nmultiple lines\\\\n</parameter>\\\\n</function>\\\\n</tool_call>\\\\n\\\\n<IMPORTANT>\\\\nReminder:\\\\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\\\\n- Required parameters MUST be specified\\\\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\\\\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\\\\n</IMPORTANT>' }}\\n{%- endif %}\\n{%- if system_message is defined %}\\n    {{- '<|im_end|>\\\\n' }}\\n{%- else %}\\n    {%- if tools is iterable and tools | length > 0 %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in loop_messages %}\\n    {%- if message.role == \\\"assistant\\\" and message.tool_calls is defined and message.tool_calls is iterable and message.tool_calls | length > 0 %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content is defined and message.content is string and message.content | trim | length > 0 %}\\n            {{- '\\\\n' + message.content | trim + '\\\\n' }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n<function=' + tool_call.name + '>\\\\n' }}\\n            {%- if tool_call.arguments is defined %}\\n                {%- for args_name, args_value in tool_call.arguments|items %}\\n                    {{- '<parameter=' + args_name + '>\\\\n' }}\\n                    {%- set args_value = args_value | tojson | safe if args_value is mapping else args_value | string %}\\n                    {{- args_value }}\\n                    {{- '\\\\n</parameter>\\\\n' }}\\n                {%- endfor %}\\n            {%- endif %}\\n            {{- '</function>\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"user\\\" or message.role == \\\"system\\\" or message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.previtem and loop.previtem.role != \\\"tool\\\" %}\\n            {{- '<|im_start|>user\\\\n' }}\\n        {%- endif %}\\n        {{- '<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>\\\\n' }}\\n        {%- if not loop.last and loop.nextitem.role != \\\"tool\\\" %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- elif loop.last %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- else %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418575,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen3MoeForCausalLM\"\n    ],\n    \"model_type\": \"qwen3_moe\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"seallms-v3\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\",\n      \"id\",\n      \"vi\",\n      \"th\",\n      \"ph\",\n      \"ms\",\n      \"mm\",\n      \"kh\",\n      \"la\",\n      \"in\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"SeaLLMs - Large Language Models for Southeast Asia\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_5\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"SeaLLMs/SeaLLMs-v3-1.5B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"SeaLLMs/SeaLLMs-v3-1.5B-Chat\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"SeaLLMs/SeaLLMs-v3-7B-Chat\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"SeaLLMs/SeaLLMs-v3-7B-Chat\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% set system_message = 'You are a helpful assistant.' %}{% if messages[0]['role'] == 'system' %}{% set system_message = messages[0]['content'] %}{% endif %}{% if system_message is defined %}{{ '<|im_start|>system\\n' + system_message + '<|im_end|>\\n' }}{% endif %}{% for message in messages %}{% set content = message['content'] %}{% if message['role'] == 'user' %}{{ '<|im_start|>user\\n' + content + '<|im_end|>\\n<|im_start|>assistant\\n' }}{% elif message['role'] == 'assistant' %}{{ content + '<|im_end|>' + '\\n' }}{% endif %}{% endfor %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418576,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"skywork-or1\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"We release the final version of Skywork-OR1 (Open Reasoner 1) series of models, including\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Skywork/Skywork-OR1-32B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Skywork/Skywork-OR1-32B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\",\n              \"Int4\"\n            ],\n            \"model_id\": \"JunHowie/Skywork-OR1-32B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\",\n              \"Int4\"\n            ],\n            \"model_id\": \"JunHowie/Skywork-OR1-32B-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Skywork/Skywork-OR1-7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Skywork/Skywork-OR1-7B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\",\n              \"Int4\"\n            ],\n            \"model_id\": \"JunHowie/Skywork-OR1-7B-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\",\n              \"Int4\"\n            ],\n            \"model_id\": \"JunHowie/Skywork-OR1-7B-GPTQ-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<｜User｜>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<｜Assistant｜><｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '</think>' in content %}{% set content = content.split('</think>')[-1] %}{% endif %}{{'<｜Assistant｜>' + content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\\\n<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<｜Assistant｜>'}}{% endif %}\",\n    \"stop_token_ids\": [\n      151643\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"updated_at\": 1769418577,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"skywork-or1-preview\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The Skywork-OR1 (Open Reasoner 1) model series consists of powerful math and code reasoning models trained using large-scale rule-based reinforcement learning with carefully designed datasets and training recipes.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Skywork/Skywork-OR1-32B-Preview\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Skywork/Skywork-OR1-32B-Preview\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"int8\"\n            ],\n            \"model_id\": \"JunHowie/Skywork-OR1-32B-Preview-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\",\n              \"int8\"\n            ],\n            \"model_id\": \"JunHowie/Skywork-OR1-32B-Preview-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Skywork/Skywork-OR1-7B-Preview\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Skywork/Skywork-OR1-7B-Preview\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ2_S\",\n              \"IQ2_XS\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q3_K_XL\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"bartowski/Skywork_Skywork-OR1-32B-Preview-GGUF\",\n            \"model_file_name_template\": \"Skywork_Skywork-OR1-32B-Preview-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ2_S\",\n              \"IQ2_XS\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q3_K_XL\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"bartowski/Skywork_Skywork-OR1-32B-Preview-GGUF\",\n            \"model_file_name_template\": \"Skywork_Skywork-OR1-32B-Preview-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ2_S\",\n              \"IQ2_XS\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q3_K_XL\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"bartowski/Skywork_Skywork-OR1-7B-Preview-GGUF\",\n            \"model_file_name_template\": \"Skywork_Skywork-OR1-7B-Preview-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"IQ2_M\",\n              \"IQ2_S\",\n              \"IQ2_XS\",\n              \"IQ3_M\",\n              \"IQ3_XS\",\n              \"IQ3_XXS\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q3_K_XL\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_L\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_L\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q6_K_L\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"bartowski/Skywork_Skywork-OR1-7B-Preview-GGUF\",\n            \"model_file_name_template\": \"Skywork_Skywork-OR1-7B-Preview-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<｜User｜>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<｜Assistant｜><｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '</think>' in content %}{% set content = content.split('</think>')[-1] %}{% endif %}{{'<｜Assistant｜>' + content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\\\n<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<｜Assistant｜><think>\\\\n'}}{% endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418577,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 8192,\n    \"model_name\": \"telechat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"The TeleChat is a large language model developed and trained by China Telecom Artificial Intelligence Technology Co., LTD. The 7B model base is trained with 1.5 trillion Tokens and 3 trillion Tokens and Chinese high-quality corpus.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Tele-AI/telechat-7B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TeleAI/telechat-7B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TeleAI/TeleChat-7B-pt\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"int4\",\n              \"int8\"\n            ],\n            \"model_id\": \"Tele-AI/telechat-7B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"int4\",\n              \"int8\"\n            ],\n            \"model_id\": \"TeleAI/telechat-7B-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Tele-AI/TeleChat-12B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TeleAI/TeleChat-12B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TeleAI/TeleChat-12B-pt\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"int4\",\n              \"int8\"\n            ],\n            \"model_id\": \"Tele-AI/TeleChat-12B-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"int4\",\n              \"int8\"\n            ],\n            \"model_id\": \"TeleAI/TeleChat-12B-{quantization}\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 52,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Tele-AI/TeleChat-52B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TeleAI/TeleChat-52B\",\n            \"model_revision\": \"master\"\n          },\n          \"openmind_hub\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"TeleAI/TeleChat-52B-pt\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{{ (messages|selectattr('role', 'equalto', 'system')|list|last).content|trim if (messages|selectattr('role', 'equalto', 'system')|list) else '' }}{%- for message in messages -%}{%- if message['role'] == 'user' -%}{{- '<_user>' + message['content'] +'<_bot>' -}}{%- elif message['role'] == 'assistant' -%}{{- message['content'] + '<_end>' -}}{%- endif -%}{%- endfor -%}\",\n    \"stop\": [\n      \"<_end>\",\n      \"<_start>\"\n    ],\n    \"stop_token_ids\": [\n      160133,\n      160132\n    ],\n    \"updated_at\": 1769418578,\n    \"featured\": false,\n    \"architectures\": [\n      \"TelechatForCausalLM\"\n    ],\n    \"model_type\": \"telechat\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 2048,\n    \"model_name\": \"tiny-llama\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"The TinyLlama project aims to pretrain a 1.1B Llama model on 3 trillion tokens.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 1,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF\",\n            \"model_file_name_template\": \"tinyllama-1.1b-chat-v0.3.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\"\n            ],\n            \"model_id\": \"Xorbits/TinyLlama-1.1B-step-50K-105b-GGUF\",\n            \"model_revision\": \"v0.0.1\",\n            \"model_file_name_template\": \"ggml-model-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418579,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"tinyllama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 100000,\n    \"model_name\": \"wizardcoder-python-v1.0\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"WizardLMTeam/WizardCoder-Python-13B-V1.0\",\n            \"model_revision\": \"5ac6748b1f5a4c282107ddc7d3b69fdc4a686d75\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/WizardCoder-Python-13B-V1.0\",\n            \"model_revision\": \"v1.0.0\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"WizardLMTeam/WizardCoder-Python-34B-V1.0\",\n            \"model_revision\": \"897fc6d9e12136c68c441b2350d015902c144b20\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"AI-ModelScope/WizardCoder-Python-34B-V1.0\",\n            \"model_revision\": \"v1.0.0\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/WizardCoder-Python-7B-V1.0-GGUF\",\n            \"model_file_name_template\": \"wizardcoder-python-7b-v1.0.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/WizardCoder-Python-13B-V1.0-GGUF\",\n            \"model_file_name_template\": \"wizardcoder-python-13b-v1.0.{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 34,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_id\": \"TheBloke/WizardCoder-Python-34B-V1.0-GGUF\",\n            \"model_file_name_template\": \"wizardcoder-python-34b-v1.0.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for item in messages %}{% if loop.first and item['role'] == 'system' %}{{ item['content'] + '\\n\\n### ' }}{% elif loop.first %}{{ 'Below is an instruction that describes a task. Write a response that appropriately completes the request.\\n\\n### ' }}{% endif %}{% if item['role'] == 'user' %}{{ 'Instruction: ' + item['content'] + '\\n\\n### ' }}{% elif item['role'] == 'assistant' %}{{ 'Response: ' + item['content'] + '\\n\\n### ' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ 'Response: Let\\\\'s think step by step.' }}{% endif %}\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418580,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 2048,\n    \"model_name\": \"wizardmath-v1.0\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"WizardMath is an open-source LLM trained by fine-tuning Llama2 with Evol-Instruct, specializing in math.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"WizardLMTeam/WizardMath-7B-V1.0\",\n            \"model_revision\": \"825a586f260d6c583b8aa9ceab6cdfaa3d9a4ddc\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Xorbits/WizardMath-7B-V1.0\",\n            \"model_revision\": \"v1.0.0\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 70,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"WizardLMTeam/WizardMath-70B-V1.0\",\n            \"model_revision\": \"4dd9f3fcd8c056561d67ec59ae011f7c146aebd2\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for item in messages %}{% if loop.first and item['role'] == 'system' %}{{ item['content'] + '\\n\\n### ' }}{% elif loop.first %}{{ 'Below is an instruction that describes a task. Write a response that appropriately completes the request.\\n\\n### ' }}{% endif %}{% if item['role'] == 'user' %}{{ 'Instruction: ' + item['content'] + '\\n\\n### ' }}{% elif item['role'] == 'assistant' %}{{ 'Response: ' + item['content'] + '\\n\\n### ' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ 'Response: Let\\\\'s think step by step.' }}{% endif %}\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"updated_at\": 1769418581,\n    \"featured\": false,\n    \"architectures\": [\n      \"LlamaForCausalLM\"\n    ],\n    \"model_type\": \"llama\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 2048,\n    \"model_name\": \"xverse\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"generate\"\n    ],\n    \"model_description\": \"XVERSE is a multilingual large language model, independently developed by Shenzhen Yuanxiang Technology.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-7B\",\n            \"model_revision\": \"3778b254def675586e9218ccb15b78d6ef66a3a7\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-7B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-13B\",\n            \"model_revision\": \"11ac840dda17af81046614229fdd0c658afff747\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-13B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 65,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-65B\",\n            \"model_revision\": \"7f1b7394f74c630f50612a19ba90bd021c373989\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-65B\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418582,\n    \"featured\": false,\n    \"architectures\": [\n      \"XverseForCausalLM\"\n    ],\n    \"model_type\": \"xverse\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 2048,\n    \"model_name\": \"xverse-chat\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"XVERSEB-Chat is the aligned version of model XVERSE.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 7,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-7B-Chat\",\n            \"model_revision\": \"60acc8c453c067b54df88be98bfdf60585ab5441\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-7B-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 13,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-13B-Chat\",\n            \"model_revision\": \"1e4944aaa1d8c8d0cdca28bb8e3a003303d0781b\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"xverse/XVERSE-13B-Chat\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for item in messages %}{% if loop.first and item['role'] == 'system' %}{{ '<|system|> \\n' + item['content'] }}{% endif %}{% if item['role'] == 'user' %}{{ '<|user|> \\n' + item['content'] }}{% elif item['role'] == 'assistant' %}{{ '<|assistant|> \\n' + item['content'] }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>' }}{% endif %}\",\n    \"stop_token_ids\": [\n      3\n    ],\n    \"stop\": [\n      \"<|endoftext|>\"\n    ],\n    \"updated_at\": 1769418583,\n    \"featured\": false,\n    \"architectures\": [\n      \"XverseForCausalLM\"\n    ],\n    \"model_type\": \"xverse\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"qwenLong-l1\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"QwenLong-L1: Towards Long-Context Large Reasoning Models with Reinforcement Learning\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Tongyi-Zhiwen/QwenLong-L1-32B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"iic/QwenLong-L1-32B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"Tongyi-Zhiwen/QwenLong-L1-32B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"iic/QwenLong-L1-32B-AWQ\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<｜User｜>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<｜Assistant｜><｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\\\n' + '<｜tool▁call▁begin｜>' + tool['type'] + '<｜tool▁sep｜>' + tool['function']['name'] + '\\\\n' + '```json' + '\\\\n' + tool['function']['arguments'] + '\\\\n' + '```' + '<｜tool▁call▁end｜>'}}{{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<｜tool▁outputs▁end｜>' + message['content'] + '<｜end▁of▁sentence｜>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '</think>' in content %}{% set content = content.split('</think>')[-1] %}{% endif %}{{'<｜Assistant｜>' + content + '<｜end▁of▁sentence｜>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<｜tool▁outputs▁begin｜><｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\\\n<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<｜tool▁outputs▁end｜>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<｜Assistant｜><think>\\\\n'}}{% endif %}\",\n    \"stop_token_ids\": [\n      151643\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"updated_at\": 1769418584,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"Ernie4.5\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"ERNIE 4.5, a new family of large-scale multimodal models comprising 10 distinct variants.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"0_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baidu/ERNIE-4.5-0.3B-PT\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"PaddlePaddle/ERNIE-4.5-0.3B-PT\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": \"0_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/ERNIE-4.5-0.3B-PT-GGUF\",\n            \"model_file_name_template\": \"ERNIE-4.5-0.3B-PT-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"F16\"\n            ],\n            \"model_id\": \"unsloth/ERNIE-4.5-0.3B-PT-GGUF\",\n            \"model_file_name_template\": \"ERNIE-4.5-0.3B-PT-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": \"0_3\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/ERNIE-4.5-0.3B-PT-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/ERNIE-4.5-0.3B-PT-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 21,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baidu/ERNIE-4.5-21B-A3B-Base-PT\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"PaddlePaddle/ERNIE-4.5-21B-A3B-Base-PT\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 21,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\"\n            ],\n            \"model_id\": \"unsloth/ERNIE-4.5-21B-A3B-PT-GGUF\",\n            \"model_file_name_template\": \"ERNIE-4.5-21B-A3B-PT-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"BF16\"\n            ],\n            \"model_id\": \"unsloth/ERNIE-4.5-21B-A3B-PT-GGUF\",\n            \"model_file_name_template\": \"ERNIE-4.5-21B-A3B-PT-{quantization}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 21,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/ERNIE-4.5-21B-A3B-PT-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/ERNIE-4.5-21B-A3B-PT-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 300,\n        \"activated_size_in_billions\": 47,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baidu/ERNIE-4.5-300B-A47B-PT\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"PaddlePaddle/ERNIE-4.5-300B-A47B-PT\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 300,\n        \"activated_size_in_billions\": 47,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q4_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"quantization_parts\": {\n              \"Q2_K\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ]\n            },\n            \"model_id\": \"unsloth/ERNIE-4.5-300B-A47B-PT-GGUF\",\n            \"model_file_name_template\": \"ERNIE-4.5-0.3B-PT-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/ERNIE-4.5-300B-A47B-PT-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q4_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"quantization_parts\": {\n              \"Q2_K\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ]\n            },\n            \"model_id\": \"unsloth/ERNIE-4.5-300B-A47B-PT-GGUF\",\n            \"model_file_name_template\": \"ERNIE-4.5-0.3B-PT-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/ERNIE-4.5-300B-A47B-PT-{quantization}-{part}.gguf\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 300,\n        \"activated_size_in_billions\": 47,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/ERNIE-4.5-300B-47B-PT-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/ERNIE-4.5-300B-47B-PT-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if not add_generation_prompt is defined -%}\\n    {%- set add_generation_prompt = true -%}\\n{%- endif -%}\\n{%- if not cls_token is defined -%}\\n    {%- set cls_token = \\\"<|begin_of_sentence|>\\\" -%}\\n{%- endif -%}\\n{%- if not sep_token is defined -%}\\n    {%- set sep_token = \\\"<|end_of_sentence|>\\\" -%}\\n{%- endif -%}\\n{{- cls_token -}}\\n{%- for message in messages -%}\\n    {%- if message[\\\"role\\\"] == \\\"user\\\" -%}\\n        {{- \\\"User: \\\" + message[\\\"content\\\"] + \\\"\\n\\\" -}}\\n    {%- elif message[\\\"role\\\"] == \\\"assistant\\\" -%}\\n        {{- \\\"Assistant: \\\" + message[\\\"content\\\"] + sep_token -}}\\n    {%- elif message[\\\"role\\\"] == \\\"system\\\" -%}\\n        {{- message[\\\"content\\\"] + \\\"\\n\\\" -}}\\n    {%- endif -%}\\n{%- endfor -%}\\n{%- if add_generation_prompt -%}\\n    {{- \\\"Assistant: \\\" -}}\\n{%- endif -%}\",\n    \"stop_token_ids\": [\n      2\n    ],\n    \"stop\": [\n      \"</s>\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"mlx-lm>=0.25.2 ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"updated_at\": 1769418585,\n    \"featured\": true,\n    \"architectures\": [\n      \"Ernie4_5ForCausalLM\"\n    ],\n    \"model_type\": \"ernie4_5\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 65536,\n    \"model_name\": \"glm-4.1v-thinking\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\",\n      \"reasoning\",\n      \"tools\"\n    ],\n    \"model_description\": \"GLM-4.1V-9B-Thinking, designed to explore the upper limits of reasoning in vision-language models.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.1V-9B-Thinking\",\n            \"model_revision\": \"b627c82cd8fc9175ff2b82b33fb439eba260055f\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.1V-9B-Thinking\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.1V-9B-Thinking-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.1V-9B-Thinking-AWQ\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 9,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.1V-9B-Thinking-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.1V-9B-Thinking-GPTQ-Int4-Int8Mix\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"[gMASK]<sop> {%- for msg in messages %} {%- if msg.role == 'system' %} <|system|> {{ msg.content }} {%- elif msg.role == 'user' %} <|user|>{{ '\\n' }} {%- if msg.content is string %} {{ msg.content }} {%- else %} {%- for item in msg.content %} {%- if item.type == 'video' or 'video' in item %} <|begin_of_video|><|video|><|end_of_video|> {%- elif item.type == 'image' or 'image' in item %} <|begin_of_image|><|image|><|end_of_image|> {%- elif item.type == 'text' %} {{ item.text }} {%- endif %} {%- endfor %} {%- endif %} {%- elif msg.role == 'assistant' %} {%- if msg.metadata %} <|assistant|>{{ msg.metadata }} {{ msg.content }} {%- else %} <|assistant|> {{ msg.content }} {%- endif %} {%- endif %} {%- endfor %} {% if add_generation_prompt %}<|assistant|> {% endif %}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers>=4.53.2 ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"Transformers\\\"\"\n      ]\n    },\n    \"featured\": false,\n    \"architectures\": [\n      \"Glm4vForConditionalGeneration\"\n    ],\n    \"updated_at\": 1769418605,\n    \"model_type\": \"glm4v\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"glm-4.5\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"hybrid\",\n      \"tools\"\n    ],\n    \"model_description\": \"The GLM-4.5 series models are foundation models designed for intelligent agents. \",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.5\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.5\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.5-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.5-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.5-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.5-GPTQ-Int4-Int8Mix\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.5-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.5-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.5-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.5-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.5-Air\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.5-Air\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.5-Air-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.5-Air-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.5-Air-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.5-Air-GPTQ-Int4-Int8Mix\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"AWQ-FP16Mix\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.5-Air-AWQ-FP16Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"AWQ-FP16Mix\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.5-Air-AWQ-FP16Mix\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"cpatonn-mirror/GLM-4.5-Air-AWQ-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"2bit\",\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.5-Air-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"2bit\",\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.5-Air-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"[gMASK]<sop>{%- if tools -%}<|system|># Tools You may call one or more functions to assist with the user query. You are provided with function signatures within <tools></tools> XML tags:<tools>{% for tool in tools %}{{ tool | tojson(ensure_ascii=False) }}{% endfor %}</tools>For each function call, output the function name and arguments within the following XML format:<tool_call>{function-name}<arg_key>{arg-key-1}</arg_key><arg_value>{arg-value-1}</arg_value><arg_key>{arg-key-2}</arg_key><arg_value>{arg-value-2}</arg_value>...</tool_call>{%- endif -%}{%- macro visible_text(content) -%}{%- if content is string -%}{{- content }}{%- elif content is iterable and content is not mapping -%}{%- for item in content -%}{%- if item is mapping and item.type == 'text' -%}{{- item.text }}{%- elif item is string -%}{{- item }}{%- endif -%}{%- endfor -%}{%- else -%}{{- content }}{%- endif -%}{%- endmacro -%}{%- set ns = namespace(last_user_index=-1) %}{% for m in messages %}{%- if m.role == 'user' %}{% set ns.last_user_index = loop.index0 -%}{%- endif %}{%- endfor %}{% for m in messages %}{%- if m.role == 'user' -%}<|user|>{{ visible_text(m.content) }}{{- '/nothink' if (enable_thinking is defined and not enable_thinking and not visible_text(m.content).endswith(\\\"/nothink\\\")) else '' -}}{%- elif m.role == 'assistant' -%}<|assistant|>{%- set reasoning_content = '' %}{%- set content = visible_text(m.content) %}{%- if m.reasoning_content is string %}{%- set reasoning_content = m.reasoning_content %}{%- else %}{%- if '</think>' in content %}{%- set reasoning_content = content.split('</think>')[0].rstrip('\\n').split('<think>')[-1].lstrip('\\n') %}{%- set content = content.split('</think>')[-1].lstrip('\\n') %}{%- endif %}{%- endif %}{%- if loop.index0 > ns.last_user_index and reasoning_content -%}{{ '\\n<think>' + reasoning_content.strip() +  '</think>'}}{%- else -%}{{ '\\n<think></think>' }}{%- endif %}{{ '\\n' + content.strip() if content.strip() }}{% if m.tool_calls %}{% for tc in m.tool_calls %}{%- if tc.function %}{%- set tc = tc.function %}{%- endif %}{{ '\\n<tool_call>' + tc.name }}{% set _args = tc.arguments %}{% for k, v in _args.items() %}<arg_key>{{ k }}</arg_key><arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>{% endfor %}</tool_call>{% endfor %}{% endif %}{%- elif m.role == 'tool' -%}{%- if m.content is string -%}{%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}{{- '<|observation|>' }}{%- endif %}{{- '\\n<tool_response>\\n' }}{{- m.content }}{{- '\\n</tool_response>' }}{%- else -%}<|observation|>{% for tr in m.content %}<tool_response>{{ tr.output if tr.output is defined else tr }}</tool_response>{% endfor -%}{% endif -%}{%- elif m.role == 'system' -%}<|system|>{{ visible_text(m.content) }}{%- endif -%}{%- endfor %}{%- if add_generation_prompt -%}<|assistant|>{{- '\\n<think></think>' if (enable_thinking is defined and not enable_thinking) else '' -}}{%- endif -%}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"tool_parser\": \"glm4\",\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"featured\": true,\n    \"architectures\": [\n      \"Glm4MoeForCausalLM\"\n    ],\n    \"updated_at\": 1769418586,\n    \"model_type\": \"glm4_moe\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"glm-4.5v\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\",\n      \"reasoning\",\n      \"tools\"\n    ],\n    \"model_description\": \"GLM-4.5V is based on ZhipuAI’s next-generation flagship text foundation model GLM-4.5-Air (106B parameters, 12B active). It continues the technical approach of GLM-4.1V-Thinking, achieving SOTA performance among models of the same scale on 42 public vision-language benchmarks.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.5V\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.5V\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.5V-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.5V-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.5V-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.5V-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 106,\n        \"activated_size_in_billions\": 12,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.5V-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.5V-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"[gMASK]<sop>\\n{%- if tools -%}\\n<|system|>\\n# Tools\\nYou may call one or more functions to assist with the user query.\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\\n{% for tool in tools %}\\n{{ tool | tojson(ensure_ascii=False) }}\\n{% endfor %}\\n</tools>\\nFor each function call, output the function name and arguments within the following XML format:\\n<tool_call>{function-name}\\n<arg_key>{arg-key-1}</arg_key>\\n<arg_value>{arg-value-1}</arg_value>\\n<arg_key>{arg-key-2}</arg_key>\\n<arg_value>{arg-value-2}</arg_value>\\n...\\n</tool_call>{%- endif -%}\\n{%- macro visible_text(content) -%}\\n    {%- if content is string -%}\\n        {{- content }}\\n    {%- elif content is iterable and content is not mapping -%}\\n        {%- for item in content -%}\\n            {%- if item is mapping and item.type == 'text' -%}\\n                {{- item.text }}\\n            {%- elif item is mapping and (item.type == 'image' or 'image' in item) -%}\\n                <|begin_of_image|><|image|><|end_of_image|>\\n            {%- elif item is mapping and (item.type == 'video' or 'video' in item) -%}\\n                <|begin_of_video|><|video|><|end_of_video|>\\n            {%- elif item is string -%}\\n                {{- item }}\\n            {%- endif -%}\\n        {%- endfor -%}\\n    {%- else -%}\\n        {{- content }}\\n    {%- endif -%}\\n{%- endmacro -%}\\n{%- set ns = namespace(last_user_index=-1) %}\\n{%- for m in messages %}\\n    {%- if m.role == 'user' %}\\n        {% set ns.last_user_index = loop.index0 -%}\\n    {%- endif %}\\n{%- endfor %}\\n{% for m in messages %}\\n{%- if m.role == 'user' -%}<|user|>\\n{% if m.content is string %}\\n{{ m.content }}\\n{%- else %}\\n{%- for item in m.content %}\\n{% if item.type == 'video' or 'video' in item %}\\n<|begin_of_video|><|video|><|end_of_video|>{% elif item.type == 'image' or 'image' in item %}\\n<|begin_of_image|><|image|><|end_of_image|>{% elif item.type == 'text' %}\\n{{ item.text }}\\n{%- endif %}\\n{%- endfor %}\\n{%- endif %}\\n{{- '/nothink' if (enable_thinking is defined and not enable_thinking and not visible_text(m.content).endswith(\\\"/nothink\\\")) else '' -}}\\n{%- elif m.role == 'assistant' -%}\\n<|assistant|>\\n{%- set reasoning_content = '' %}\\n{%- set content = visible_text(m.content) %}\\n{%- if m.reasoning_content is string %}\\n    {%- set reasoning_content = m.reasoning_content %}\\n{%- else %}\\n    {%- if '</think>' in content %}\\n        {%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n        {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n    {%- endif %}\\n{%- endif %}\\n{%- if loop.index0 > ns.last_user_index and reasoning_content -%}\\n{{ '\\\\n<think>' + reasoning_content.strip() +  '</think>'}}\\n{%- else -%}\\n{{ '\\\\n<think></think>' }}\\n{%- endif -%}\\n{%- if content.strip() -%}\\n{{ '\\\\n' + content.strip() }}\\n{%- endif -%}\\n{% if m.tool_calls %}\\n{% for tc in m.tool_calls %}\\n{%- if tc.function %}\\n    {%- set tc = tc.function %}\\n{%- endif %}\\n{{ '\\\\n<tool_call>' + tc.name }}\\n{% set _args = tc.arguments %}\\n{% for k, v in _args.items() %}\\n<arg_key>{{ k }}</arg_key>\\n<arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>\\n{% endfor %}\\n</tool_call>{% endfor %}\\n{% endif %}\\n{%- elif m.role == 'tool' -%}\\n{%- if m.content is string -%}\\n{%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n    {{- '<|observation|>' }}\\n{%- endif %}\\n{{- '\\\\n<tool_response>\\\\n' }}\\n{{- m.content }}\\n{{- '\\\\n</tool_response>' }}\\n{%- else -%}\\n<|observation|>{% for tr in m.content %}\\n<tool_response>\\n{{ tr.output if tr.output is defined else tr }}\\n</tool_response>{% endfor -%}\\n{% endif -%}\\n{%- elif m.role == 'system' -%}\\n<|system|>\\n{{ visible_text(m.content) }}\\n{%- endif -%}\\n{%- endfor -%}\\n{%- if add_generation_prompt -%}\\n<|assistant|>\\n{{'<think></think>\\\\n' if (enable_thinking is defined and not enable_thinking) else ''}}\\n{%- endif -%}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"tool_parser\": \"glm4\",\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"featured\": false,\n    \"architectures\": [\n      \"Glm4vMoeForConditionalGeneration\"\n    ],\n    \"updated_at\": 1769418587,\n    \"model_type\": \"glm4v_moe\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"gpt-oss\",\n    \"model_lang\": [\n      \"en\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\"\n    ],\n    \"model_description\": \"gpt-oss series, OpenAI’s open-weight models designed for powerful reasoning, agentic tasks, and versatile developer use cases.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 20,\n        \"activated_size_in_billions\": \"3_6\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openai/gpt-oss-20b\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openai-mirror/gpt-oss-20b\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"bnb\",\n        \"model_size_in_billions\": 20,\n        \"activated_size_in_billions\": \"3_6\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4-bit\"\n            ],\n            \"model_id\": \"unsloth/gpt-oss-20b-bnb-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4-bit\"\n            ],\n            \"model_id\": \"unsloth/gpt-oss-20b-bnb-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 120,\n        \"activated_size_in_billions\": \"5_1\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openai/gpt-oss-120b\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openai-mirror/gpt-oss-120b\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{#-\\n  In addition to the normal inputs of `messages` and `tools`, this template also accepts the\\n  following kwargs:\\n  - \\\"builtin_tools\\\": A list, can contain \\\"browser\\\" and/or \\\"python\\\".\\n  - \\\"model_identity\\\": A string that optionally describes the model identity.\\n  - \\\"reasoning_effort\\\": A string that describes the reasoning effort, defaults to \\\"medium\\\".\\n #}\\n\\n{#- Tool Definition Rendering ============================================== #}\\n{%- macro render_typescript_type(param_spec, required_params, is_nullable=false) -%}\\n    {%- if param_spec.type == \\\"array\\\" -%}\\n        {%- if param_spec['items'] -%}\\n            {%- if param_spec['items']['type'] == \\\"string\\\" -%}\\n                {{- \\\"string[]\\\" }}\\n            {%- elif param_spec['items']['type'] == \\\"number\\\" -%}\\n                {{- \\\"number[]\\\" }}\\n            {%- elif param_spec['items']['type'] == \\\"integer\\\" -%}\\n                {{- \\\"number[]\\\" }}\\n            {%- elif param_spec['items']['type'] == \\\"boolean\\\" -%}\\n                {{- \\\"boolean[]\\\" }}\\n            {%- else -%}\\n                {%- set inner_type = render_typescript_type(param_spec['items'], required_params) -%}\\n                {%- if inner_type == \\\"object | object\\\" or inner_type|length > 50 -%}\\n                    {{- \\\"any[]\\\" }}\\n                {%- else -%}\\n                    {{- inner_type + \\\"[]\\\" }}\\n                {%- endif -%}\\n            {%- endif -%}\\n            {%- if param_spec.nullable -%}\\n                {{- \\\" | null\\\" }}\\n            {%- endif -%}\\n        {%- else -%}\\n            {{- \\\"any[]\\\" }}\\n            {%- if param_spec.nullable -%}\\n                {{- \\\" | null\\\" }}\\n            {%- endif -%}\\n        {%- endif -%}\\n    {%- elif param_spec.type is defined and param_spec.type is iterable and param_spec.type is not string and param_spec.type is not mapping and param_spec.type[0] is defined -%}\\n        {#- Handle array of types like [\\\"object\\\", \\\"object\\\"] from Union[dict, list] #}\\n        {%- if param_spec.type | length > 1 -%}\\n            {{- param_spec.type | join(\\\" | \\\") }}\\n        {%- else -%}\\n            {{- param_spec.type[0] }}\\n        {%- endif -%}\\n    {%- elif param_spec.oneOf -%}\\n        {#- Handle oneOf schemas - check for complex unions and fallback to any #}\\n        {%- set has_object_variants = false -%}\\n        {%- for variant in param_spec.oneOf -%}\\n            {%- if variant.type == \\\"object\\\" -%}\\n                {%- set has_object_variants = true -%}\\n            {%- endif -%}\\n        {%- endfor -%}\\n        {%- if has_object_variants and param_spec.oneOf|length > 1 -%}\\n            {{- \\\"any\\\" }}\\n        {%- else -%}\\n            {%- for variant in param_spec.oneOf -%}\\n                {{- render_typescript_type(variant, required_params) -}}\\n                {%- if variant.description %}\\n                    {{- \\\"// \\\" + variant.description }}\\n                {%- endif -%}\\n                {%- if variant.default is defined %}\\n                    {{ \\\"// default: \\\" + variant.default|tojson }}\\n                {%- endif -%}\\n                {%- if not loop.last %}\\n                    {{- \\\" | \\\" }}\\n                {% endif -%}\\n            {%- endfor -%}\\n        {%- endif -%}\\n    {%- elif param_spec.type == \\\"string\\\" -%}\\n        {%- if param_spec.enum -%}\\n            {{- '\\\"' + param_spec.enum|join('\\\" | \\\"') + '\\\"' -}}\\n        {%- else -%}\\n            {{- \\\"string\\\" }}\\n            {%- if param_spec.nullable %}\\n                {{- \\\" | null\\\" }}\\n            {%- endif -%}\\n        {%- endif -%}\\n    {%- elif param_spec.type == \\\"number\\\" -%}\\n        {{- \\\"number\\\" }}\\n    {%- elif param_spec.type == \\\"integer\\\" -%}\\n        {{- \\\"number\\\" }}\\n    {%- elif param_spec.type == \\\"boolean\\\" -%}\\n        {{- \\\"boolean\\\" }}\\n\\n    {%- elif param_spec.type == \\\"object\\\" -%}\\n        {%- if param_spec.properties -%}\\n            {{- \\\"{\\n\\\" }}\\n            {%- for prop_name, prop_spec in param_spec.properties.items() -%}\\n                {{- prop_name -}}\\n                {%- if prop_name not in (param_spec.required or []) -%}\\n                    {{- \\\"?\\\" }}\\n                {%- endif -%}\\n                {{- \\\": \\\" }}\\n                {{ render_typescript_type(prop_spec, param_spec.required or []) }}\\n                {%- if not loop.last -%}\\n                    {{-\\\", \\\" }}\\n                {%- endif -%}\\n            {%- endfor -%}\\n            {{- \\\"}\\\" }}\\n        {%- else -%}\\n            {{- \\\"object\\\" }}\\n        {%- endif -%}\\n    {%- else -%}\\n        {{- \\\"any\\\" }}\\n    {%- endif -%}\\n{%- endmacro -%}\\n\\n{%- macro render_tool_namespace(namespace_name, tools) -%}\\n    {{- \\\"## \\\" + namespace_name + \\\"\\n\\n\\\" }}\\n    {{- \\\"namespace \\\" + namespace_name + \\\" {\\n\\n\\\" }}\\n    {%- for tool in tools %}\\n        {%- set tool = tool.function %}\\n        {{- \\\"// \\\" + tool.description + \\\"\\n\\\" }}\\n        {{- \\\"type \\\"+ tool.name + \\\" = \\\" }}\\n        {%- if tool.parameters and tool.parameters.properties %}\\n            {{- \\\"(_: {\\n\\\" }}\\n            {%- for param_name, param_spec in tool.parameters.properties.items() %}\\n                {%- if param_spec.description %}\\n                    {{- \\\"// \\\" + param_spec.description + \\\"\\n\\\" }}\\n                {%- endif %}\\n                {{- param_name }}\\n                {%- if param_name not in (tool.parameters.required or []) -%}\\n                    {{- \\\"?\\\" }}\\n                {%- endif -%}\\n                {{- \\\": \\\" }}\\n                {{- render_typescript_type(param_spec, tool.parameters.required or []) }}\\n                {%- if param_spec.default is defined -%}\\n                    {%- if param_spec.enum %}\\n                        {{- \\\", // default: \\\" + param_spec.default }}\\n                    {%- elif param_spec.oneOf %}\\n                        {{- \\\"// default: \\\" + param_spec.default }}\\n                    {%- else %}\\n                        {{- \\\", // default: \\\" + param_spec.default|tojson }}\\n                    {%- endif -%}\\n                {%- endif -%}\\n                {%- if not loop.last %}\\n                    {{- \\\",\\n\\\" }}\\n                {%- else %}\\n                    {{- \\\"\\n\\\" }}\\n                {%- endif -%}\\n            {%- endfor %}\\n            {{- \\\"}) => any;\\n\\n\\\" }}\\n        {%- else -%}\\n            {{- \\\"() => any;\\n\\n\\\" }}\\n        {%- endif -%}\\n    {%- endfor %}\\n    {{- \\\"} // namespace \\\" + namespace_name }}\\n{%- endmacro -%}\\n\\n{%- macro render_builtin_tools(browser_tool, python_tool) -%}\\n    {%- if browser_tool %}\\n        {{- \\\"## browser\\n\\n\\\" }}\\n        {{- \\\"// Tool for browsing.\\n\\\" }}\\n        {{- \\\"// The `cursor` appears in brackets before each browsing display: `[{cursor}]`.\\n\\\" }}\\n        {{- \\\"// Cite information from the tool using the following format:\\n\\\" }}\\n        {{- \\\"// `【{cursor}†L{line_start}(-L{line_end})?】`, for example: `【6†L9-L11】` or `【8†L3】`.\\n\\\" }}\\n        {{- \\\"// Do not quote more than 10 words directly from the tool output.\\n\\\" }}\\n        {{- \\\"// sources=web (default: web)\\n\\\" }}\\n        {{- \\\"namespace browser {\\n\\n\\\" }}\\n        {{- \\\"// Searches for information related to `query` and displays `topn` results.\\n\\\" }}\\n        {{- \\\"type search = (_: {\\n\\\" }}\\n        {{- \\\"query: string,\\n\\\" }}\\n        {{- \\\"topn?: number, // default: 10\\n\\\" }}\\n        {{- \\\"source?: string,\\n\\\" }}\\n        {{- \\\"}) => any;\\n\\n\\\" }}\\n        {{- \\\"// Opens the link `id` from the page indicated by `cursor` starting at line number `loc`, showing `num_lines` lines.\\n\\\" }}\\n        {{- \\\"// Valid link ids are displayed with the formatting: `【{id}†.*】`.\\n\\\" }}\\n        {{- \\\"// If `cursor` is not provided, the most recent page is implied.\\n\\\" }}\\n        {{- \\\"// If `id` is a string, it is treated as a fully qualified URL associated with `source`.\\n\\\" }}\\n        {{- \\\"// If `loc` is not provided, the viewport will be positioned at the beginning of the document or centered on the most relevant passage, if available.\\n\\\" }}\\n        {{- \\\"// Use this function without `id` to scroll to a new location of an opened page.\\n\\\" }}\\n        {{- \\\"type open = (_: {\\n\\\" }}\\n        {{- \\\"id?: number | string, // default: -1\\n\\\" }}\\n        {{- \\\"cursor?: number, // default: -1\\n\\\" }}\\n        {{- \\\"loc?: number, // default: -1\\n\\\" }}\\n        {{- \\\"num_lines?: number, // default: -1\\n\\\" }}\\n        {{- \\\"view_source?: boolean, // default: false\\n\\\" }}\\n        {{- \\\"source?: string,\\n\\\" }}\\n        {{- \\\"}) => any;\\n\\n\\\" }}\\n        {{- \\\"// Finds exact matches of `pattern` in the current page, or the page given by `cursor`.\\n\\\" }}\\n        {{- \\\"type find = (_: {\\n\\\" }}\\n        {{- \\\"pattern: string,\\n\\\" }}\\n        {{- \\\"cursor?: number, // default: -1\\n\\\" }}\\n        {{- \\\"}) => any;\\n\\n\\\" }}\\n        {{- \\\"} // namespace browser\\n\\n\\\" }}\\n    {%- endif -%}\\n\\n    {%- if python_tool %}\\n        {{- \\\"## python\\n\\n\\\" }}\\n        {{- \\\"Use this tool to execute Python code in your chain of thought. The code will not be shown to the user. This tool should be used for internal reasoning, but not for code that is intended to be visible to the user (e.g. when creating plots, tables, or files).\\n\\n\\\" }}\\n        {{- \\\"When you send a message containing Python code to python, it will be executed in a stateful Jupyter notebook environment. python will respond with the output of the execution or time out after 120.0 seconds. The drive at '/mnt/data' can be used to save and persist user files. Internet access for this session is UNKNOWN. Depends on the cluster.\\n\\n\\\" }}\\n    {%- endif -%}\\n{%- endmacro -%}\\n\\n{#- System Message Construction ============================================ #}\\n{%- macro build_system_message() -%}\\n    {%- if model_identity is not defined %}\\n        {%- set model_identity = \\\"You are ChatGPT, a large language model trained by OpenAI.\\\" %}\\n    {%- endif %}\\n    {{- model_identity + \\\"\\n\\\" }}\\n    {{- \\\"Knowledge cutoff: 2024-06\\n\\\" }}\\n    {{- \\\"Current date: \\\" + strftime_now(\\\"%Y-%m-%d\\\") + \\\"\\n\\n\\\" }}\\n    {%- if reasoning_effort is not defined %}\\n        {%- set reasoning_effort = \\\"medium\\\" %}\\n    {%- endif %}\\n    {{- \\\"Reasoning: \\\" + reasoning_effort + \\\"\\n\\n\\\" }}\\n    {%- if builtin_tools %}\\n        {{- \\\"# Tools\\n\\n\\\" }}\\n        {%- set available_builtin_tools = namespace(browser=false, python=false) %}\\n        {%- for tool in builtin_tools %}\\n            {%- if tool == \\\"browser\\\" %}\\n                {%- set available_builtin_tools.browser = true %}\\n            {%- elif tool == \\\"python\\\" %}\\n                {%- set available_builtin_tools.python = true %}\\n            {%- endif %}\\n        {%- endfor %}\\n        {{- render_builtin_tools(available_builtin_tools.browser, available_builtin_tools.python) }}\\n    {%- endif -%}\\n    {{- \\\"# Valid channels: analysis, commentary, final. Channel must be included for every message.\\\" }}\\n    {%- if tools -%}\\n        {{- \\\"\\nCalls to these tools must go to the commentary channel: 'functions'.\\\" }}\\n    {%- endif -%}\\n{%- endmacro -%}\\n\\n{#- Main Template Logic ================================================= #}\\n{#- Set defaults #}\\n\\n{#- Render system message #}\\n{{- \\\"<|start|>system<|message|>\\\" }}\\n{{- build_system_message() }}\\n{{- \\\"<|end|>\\\" }}\\n\\n{#- Extract developer message #}\\n{%- if messages[0].role == \\\"developer\\\" or messages[0].role == \\\"system\\\" %}\\n    {%- set developer_message = messages[0].content %}\\n    {%- set loop_messages = messages[1:] %}\\n{%- else %}\\n    {%- set developer_message = \\\"\\\" %}\\n    {%- set loop_messages = messages %}\\n{%- endif %}\\n\\n{#- Render developer message #}\\n{%- if developer_message or tools %}\\n    {{- \\\"<|start|>developer<|message|>\\\" }}\\n    {%- if developer_message %}\\n        {{- \\\"# Instructions\\n\\n\\\" }}\\n        {{- developer_message }}\\n    {%- endif %}\\n    {%- if tools -%}\\n        {{- \\\"\\n\\n\\\" }}\\n        {{- \\\"# Tools\\n\\n\\\" }}\\n        {{- render_tool_namespace(\\\"functions\\\", tools) }}\\n    {%- endif -%}\\n    {{- \\\"<|end|>\\\" }}\\n{%- endif %}\\n\\n{#- Render messages #}\\n{%- set last_tool_call = namespace(name=none) %}\\n{%- for message in loop_messages -%}\\n    {#- At this point only assistant/user/tool messages should remain #}\\n    {%- if message.role == 'assistant' -%}\\n        {#- Checks to ensure the messages are being passed in the format we expect #}\\n        {%- if \\\"content\\\" in message %}\\n            {%- if \\\"<|channel|>analysis<|message|>\\\" in message.content or \\\"<|channel|>final<|message|>\\\" in message.content %}\\n                {{- raise_exception(\\\"You have passed a message containing <|channel|> tags in the content field. Instead of doing this, you should pass analysis messages (the string between '<|message|>' and '<|end|>') in the 'thinking' field, and final messages (the string between '<|message|>' and '<|end|>') in the 'content' field.\\\") }}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if \\\"thinking\\\" in message %}\\n            {%- if \\\"<|channel|>analysis<|message|>\\\" in message.thinking or \\\"<|channel|>final<|message|>\\\" in message.thinking %}\\n                {{- raise_exception(\\\"You have passed a message containing <|channel|> tags in the thinking field. Instead of doing this, you should pass analysis messages (the string between '<|message|>' and '<|end|>') in the 'thinking' field, and final messages (the string between '<|message|>' and '<|end|>') in the 'content' field.\\\") }}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if \\\"tool_calls\\\" in message %}\\n            {#- We assume max 1 tool call per message, and so we infer the tool call name #}\\n            {#- in \\\"tool\\\" messages from the most recent assistant tool call name #}\\n            {%- set tool_call = message.tool_calls[0] %}\\n            {%- if tool_call.function %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {%- if message.content and message.thinking %}\\n                {{- raise_exception(\\\"Cannot pass both content and thinking in an assistant message with tool calls! Put the analysis message in one or the other, but not both.\\\") }}\\n            {%- elif message.content %}\\n                {{- \\\"<|start|>assistant<|channel|>analysis<|message|>\\\" + message.content + \\\"<|end|>\\\" }}\\n            {%- elif message.thinking %}\\n                {{- \\\"<|start|>assistant<|channel|>analysis<|message|>\\\" + message.thinking + \\\"<|end|>\\\" }}\\n            {%- endif %}\\n            {{- \\\"<|start|>assistant to=\\\" }}\\n            {{- \\\"functions.\\\" + tool_call.name + \\\"<|channel|>commentary \\\" }}\\n            {{- (tool_call.content_type if tool_call.content_type is defined else \\\"json\\\") + \\\"<|message|>\\\" }}\\n            {{- tool_call.arguments|tojson }}\\n            {{- \\\"<|call|>\\\" }}\\n            {%- set last_tool_call.name = tool_call.name %}\\n        {%- elif loop.last and not add_generation_prompt %}\\n            {#- Only render the CoT if the final turn is an assistant turn and add_generation_prompt is false #}\\n            {#- This is a situation that should only occur in training, never in inference. #}\\n            {%- if \\\"thinking\\\" in message %}\\n                {{- \\\"<|start|>assistant<|channel|>analysis<|message|>\\\" + message.thinking + \\\"<|end|>\\\" }}\\n            {%- endif %}\\n            {#- <|return|> indicates the end of generation, but <|end|> does not #}\\n            {#- <|return|> should never be an input to the model, but we include it as the final token #}\\n            {#- when training, so the model learns to emit it. #}\\n            {{- \\\"<|start|>assistant<|channel|>final<|message|>\\\" + message.content + \\\"<|return|>\\\" }}\\n        {%- else %}\\n            {#- CoT is dropped during all previous turns, so we never render it for inference #}\\n            {{- \\\"<|start|>assistant<|channel|>final<|message|>\\\" + message.content + \\\"<|end|>\\\" }}\\n            {%- set last_tool_call.name = none %}\\n        {%- endif %}\\n    {%- elif message.role == 'tool' -%}\\n        {%- if last_tool_call.name is none %}\\n            {{- raise_exception(\\\"Message has tool role, but there was no previous assistant message with a tool call!\\\") }}\\n        {%- endif %}\\n        {{- \\\"<|start|>functions.\\\" + last_tool_call.name }}\\n        {{- \\\" to=assistant<|channel|>commentary<|message|>\\\" + message.content|tojson + \\\"<|end|>\\\" }}\\n    {%- elif message.role == 'user' -%}\\n        {{- \\\"<|start|>user<|message|>\\\" + message.content + \\\"<|end|>\\\" }}\\n    {%- endif -%}\\n{%- endfor -%}\\n\\n{#- Generation prompt #}\\n{%- if add_generation_prompt -%}\\n<|start|>assistant\\n{%- endif -%}\",\n    \"stop_token_ids\": [\n      200002,\n      199999\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|return|>\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"updated_at\": 1769418588,\n    \"featured\": true,\n    \"architectures\": [\n      \"GptOssForCausalLM\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"reasoning_start_tag\": \"analysis\",\n    \"reasoning_end_tag\": \"assistantfinal\",\n    \"cache_config\": {\n      \"ignore_patterns\": [\n        \"metal/**\",\n        \"original/**\"\n      ],\n      \"ignore_file_pattern\": [\n        \"metal/*\",\n        \"original/*\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"KAT-V1\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\"\n    ],\n    \"model_description\": \"Kwaipilot-AutoThink ranks first among all open-source models on LiveCodeBench Pro, a challenging benchmark explicitly designed to prevent data leakage, and even surpasses strong proprietary systems such as Seed and o3-mini.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 40,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Kwaipilot/KAT-V1-40B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Kwaipilot/KAT-V1-40B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 40,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/KAT-V1-40B-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/KAT-V1-40B-GPTQ-Int4-Int8Mix\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 40,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/KAT-V1-40B-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/KAT-V1-40B-AWQ\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- messages[0]['content'] }}\\n    {%- else %}\\n        {{- '' }}\\n    {%- endif %}\\n    {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0]['role'] == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n    {%- else %}\\n        {{- '<|im_start|>system\\\\nYou are a helpful assistant.<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" and not message.tool_calls %}\\n        {%- set content = message.content %}\\n        {%- if not loop.last %}\\n            {%- set answer_blocks = message.content.split('<answer>\\\\n') %}\\n            {%- if answer_blocks|length > 1 %}\\n                {%- set last_answer_block = answer_blocks[-1] %}\\n                {%- if '\\\\n</answer>' in last_answer_block %}\\n                    {%- set content = last_answer_block.split('\\\\n</answer>')[0] %}\\n                {%- else %}\\n                    {%- set content = message.content.split('<think_off>')[-1].lstrip('\\\\n') %}\\n                    {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n                {%- endif %}\\n            {%- else %}\\n                {%- set content = message.content.split('<think_off>')[-1].lstrip('\\\\n') %}\\n                {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set content = message.content %}\\n        {%- if not loop.last %}\\n            {%- set answer_blocks = message.content.split('<answer>\\\\n') %}\\n            {%- if answer_blocks|length > 1 %}\\n                {%- set last_answer_block = answer_blocks[-1] %}\\n                {%- if '\\\\n</answer>' in last_answer_block %}\\n                    {%- set content = last_answer_block.split('\\\\n</answer>')[0] %}\\n                {%- else %}\\n                    {%- set content = message.content.split('<think_off>')[-1].lstrip('\\\\n') %}\\n                    {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n                {%- endif %}\\n            {%- else %}\\n                {%- set content = message.content.split('<think_off>')[-1].lstrip('\\\\n') %}\\n                {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {{- '<|im_start|>' + message.role }}\\n        {%- if message.content %}\\n            {{- '\\\\n' + content }}\\n        {%- endif %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if tool_call.function is defined %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": \\\\\\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\\\\\", \\\\\\\"arguments\\\\\\\": ' }}\\n            {{- tool_call.arguments | tojson }}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n<judge>\\\\n' }}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_end|>\"\n    ],\n    \"updated_at\": 1769418589,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"Deepseek-V3.1\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"hybrid\",\n      \"tools\"\n    ],\n    \"model_description\": \"DeepSeek-V3.1 is a hybrid model that supports both thinking mode and non-thinking mode.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V3.1\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"deepseek-ai/DeepSeek-V3.1\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cpatonn/DeepSeek-V3.1-GPTQ-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"cpatonn/DeepSeek-V3.1-GPTQ-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/DeepSeek-V3.1-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/DeepSeek-V3.1-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\",\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-V3.1-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\",\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/DeepSeek-V3.1-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}  {% set add_generation_prompt = false %}{% endif %}{% if not thinking is defined %}  {% set thinking = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, system_prompt='', is_first_sp=true, is_last_user=false) %}{%- for message in messages %}  {%- if message['role'] == 'system' %}    {%- if ns.is_first_sp %}      {% set ns.system_prompt = ns.system_prompt + message['content'] %}      {% set ns.is_first_sp = false %}    {%- else %}      {% set ns.system_prompt = ns.system_prompt + '\\n\\n' + message['content'] %}    {%- endif %}  {%- endif %}{%- endfor %}{% if tools is defined and tools is not none %}  {% set tool_ns = namespace(text='## Tools\\nYou have access to the following tools:\\n') %}  {% for tool in tools %}    {% set tool_ns.text = tool_ns.text + '\\n### ' + tool.function.name + '\\nDescription: ' + tool.function.description + '\\n\\nParameters: ' + (tool.function.parameters | tojson) + '\\n' %}  {% endfor %}  {% set tool_ns.text = tool_ns.text + \\\"\\nIMPORTANT: ALWAYS adhere to this exact format for tool use:\\n<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>tool_call_name<｜tool▁sep｜>tool_call_arguments<｜tool▁call▁end｜>{{additional_tool_calls}}<｜tool▁calls▁end｜>\\n\\nWhere:\\n\\n- `tool_call_name` must be an exact match to one of the available tools\\n- `tool_call_arguments` must be valid JSON that strictly follows the tool's Parameters Schema\\n- For multiple tool calls, chain them directly without separators or spaces\\n\\\" %}  {% set ns.system_prompt = ns.system_prompt + '\\n\\n' + tool_ns.text %}{% endif %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}  {%- if message['role'] == 'user' %}    {%- set ns.is_tool = false -%}    {%- set ns.is_first = false -%}    {%- set ns.is_last_user = true -%}    {{'<｜User｜>' + message['content']}}  {%- endif %}  {%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}    {%- if ns.is_last_user %}      {{'<｜Assistant｜></think>'}}    {%- endif %}    {%- set ns.is_last_user = false -%}    {%- set ns.is_first = false %}    {%- set ns.is_tool = false -%}    {%- for tool in message['tool_calls'] %}      {%- if not ns.is_first %}        {%- if message['content'] is none %}          {{'<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>'+ tool['function']['name'] + '<｜tool▁sep｜>' + tool['function']['arguments']|tojson + '<｜tool▁call▁end｜>'}}        {%- else %}          {{message['content'] + '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['function']['name'] + '<｜tool▁sep｜>' + tool['function']['arguments']|tojson + '<｜tool▁call▁end｜>'}}        {%- endif %}        {%- set ns.is_first = true -%}      {%- else %}        {{'<｜tool▁call▁begin｜>'+ tool['function']['name'] + '<｜tool▁sep｜>' + tool['function']['arguments']|tojson + '<｜tool▁call▁end｜>'}}      {%- endif %}    {%- endfor %}    {{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}  {%- endif %}  {%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) %}    {%- if ns.is_last_user %}      {{'<｜Assistant｜>'}}      {%- if message['prefix'] is defined and message['prefix'] and thinking %}        {{'<think>'}}        {%- else %}        {{'</think>'}}      {%- endif %}    {%- endif %}    {%- set ns.is_last_user = false -%}    {%- if ns.is_tool %}      {{message['content'] + '<｜end▁of▁sentence｜>'}}      {%- set ns.is_tool = false -%}    {%- else %}      {%- set content = message['content'] -%}      {%- if '</think>' in content %}        {%- set content = content.split('</think>', 1)[1] -%}      {%- endif %}      {{content + '<｜end▁of▁sentence｜>'}}    {%- endif %}  {%- endif %}  {%- if message['role'] == 'tool' %}    {%- set ns.is_last_user = false -%}    {%- set ns.is_tool = true -%}    {{'<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}  {%- endif %}{%- endfor -%}{%- if add_generation_prompt and ns.is_last_user and not ns.is_tool %}  {{'<｜Assistant｜>'}}  {%- if not thinking %}    {{'</think>'}}  {%- else %}    {{'<think>'}}  {%- endif %}{% endif %}\",\n    \"stop_token_ids\": [\n      1\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"tool_parser\": \"deepseek-v3.1\",\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"updated_at\": 1771925175,\n    \"featured\": false,\n    \"architectures\": [\n      \"DeepseekV3ForCausalLM\"\n    ],\n    \"model_type\": \"deepseek_v3\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 524288,\n    \"model_name\": \"seed-oss\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"tools\"\n    ],\n    \"model_description\": \"Seed-OSS is a series of open-source large language models developed by ByteDance's Seed Team, designed for powerful long-context, reasoning, agent and general capabilities, and versatile developer-friendly features. Although trained with only 12T tokens, Seed-OSS achieves excellent performance on several popular open benchmarks.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 36,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ByteDance-Seed/Seed-OSS-36B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ByteDance-Seed/Seed-OSS-36B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 36,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int8\",\n              \"Int4\",\n              \"Int3\"\n            ],\n            \"model_id\": \"QuantTrio/Seed-OSS-36B-Instruct-GPTQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int8\",\n              \"Int4\",\n              \"Int3\"\n            ],\n            \"model_id\": \"tclf90/Seed-OSS-36B-Instruct-GPTQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 36,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/Seed-OSS-36B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/Seed-OSS-36B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 36,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Seed-OSS-36B-Instruct-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Seed-OSS-36B-Instruct-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_size_in_billions\": 36,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Seed-OSS-36B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Seed-OSS-36B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Seed-OSS-36B-Instruct-{quantization}-{part}.gguf\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q2_K\",\n              \"Q2_K_L\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"model_id\": \"unsloth/Seed-OSS-36B-Instruct-GGUF\",\n            \"model_file_name_template\": \"Seed-OSS-36B-Instruct-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"{quantization}/Seed-OSS-36B-Instruct-{quantization}-{part}.gguf\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{# ------------- special token variables ------------- #}{%- set bos_token              = '<seed:bos>'               -%}{%- set eos_token              = '<seed:eos>'               -%}{%- set pad_token              = '<seed:pad>'               -%}{%- set toolcall_begin_token   = '<seed:tool_call>'         -%}{%- set toolcall_end_token     = '</seed:tool_call>'        -%}{%- set think_begin_token      = '<seed:think>'             -%}{%- set think_end_token        = '</seed:think>'            -%}{%- set budget_begin_token     = '<seed:cot_budget_reflect>'-%}{%- set budget_end_token       = '</seed:cot_budget_reflect>'-%}{# -------------- reflection-interval lookup -------------- #}{%- if not thinking_budget is defined %}{%- set thinking_budget = -1 -%}{%- endif -%}{%- set budget_reflections_v05 = {     0:      0,     512:    128,     1024:   256,     2048:   512,     4096:   512,     8192:   1024,     16384:  1024} -%}{%- set ns = namespace(interval = None) -%}{%- for k, v in budget_reflections_v05 | dictsort -%}    {%- if ns.interval is none and thinking_budget <= k -%}        {%- set ns.interval = v -%}    {%- endif -%}{%- endfor -%}{%- if ns.interval is none -%}    {%- set ns.interval = budget_reflections_v05[16384] -%}{%- endif -%}{%- if messages[0][\\\"role\\\"] == \\\"system\\\" %}{%- set system_message = messages[0][\\\"content\\\"] %}{%- set loop_messages = messages[1:] %}{%- else %}{%- set loop_messages = messages %}{%- endif %}{%- if not tools is defined or tools is none %}{%- set tools = [] %}{%- endif %}{%- macro py_type(t) -%}    {%- if t == \\\"string\\\" -%}str    {%- elif t in (\\\"number\\\", \\\"integer\\\") -%}int    {%- elif t == \\\"boolean\\\" -%}bool    {%- elif t == \\\"array\\\" -%}list    {%- else -%}Any{%- endif -%}{%- endmacro -%}{%- if system_message is defined %}{{ bos_token + \\\"system\\\\n\\\" + system_message }}{%- else %}{%- if tools is iterable and tools | length > 0 %}{{ bos_token + \\\"system\\\\nYou are Doubao, a helpful AI assistant. You may call one or more functions to assist with the user query.\\\" }}{%- endif %}{%- endif %}{%- if use_json_tooldef is defined and use_json_tooldef %}{{\\\"Tool List:\\\\nYou are authorized to use the following tools (described in JSON Schema format). Before performing any task, you must decide how to call them based on the descriptions and parameters of these tools.\\\"}}{{ tools | tojson(ensure_ascii=False) }}{%- else %}{%- for item in tools if item.type == \\\"function\\\" %}Function:def {{ item.function.name }}({%- for name, spec in item.function.parameters.properties.items() %}        {{- name }}: {{ py_type(spec.type) }}{% if not loop.last %},{% endif %}{%- endfor %}):    \\\"\\\"\\\"    {{ item.function.description | trim }}    {%- if item.function.parameters.properties %}    Args:    {%- for name, spec in item.function.parameters.properties.items() %}    - {{ name }} ({{ py_type(spec.type) }})      {%- if name in item.function.parameters.required %} [必填]{% else %} [选填]{% endif %}:      {{- \\\" \\\" ~ (spec.description or \\\"\\\") }}    {%- endfor %}    {%- endif %}    {%- if item.function.returns is defined           and item.function.returns.properties is defined           and item.function.returns.properties %}    Returns:    {%- for name, spec in item.function.returns.properties.items() %}    - {{ name }} ({{ py_type(spec.type) }}):      {{- \\\" \\\" ~ (spec.description or \\\"\\\") }}    {%- endfor %}    {%- endif %}    \\\"\\\"\\\"{%- endfor %}{%- endif %}{%- if tools is iterable and tools | length > 0 %}{{\\\"工具调用请遵循如下格式:\\\\n<seed:tool_call>\\\\n<function=example_function_name>\\\\n<parameter=example_parameter_1>value_1</parameter>\\\\n<parameter=example_parameter_2>This is the value for the second parameter\\\\nthat can span\\\\nmultiple lines</parameter>\\\\n</function>\\\\n</seed:tool_call>\\\\n\\\"}}{%- endif %}{%- if system_message is defined or tools is iterable and tools | length > 0 %}{{ eos_token }}{%- endif %}{%- if thinking_budget is defined %}{%- if thinking_budget == 0 %}{{ bos_token+\\\"system\\\" }}{{ \\\"You are an intelligent assistant that can answer questions in one step without the need for reasoning and thinking, that is, your thinking budget is 0. Next, please skip the thinking process and directly start answering the user's questions.\\\" }}{{ eos_token }}{%- elif not thinking_budget == -1 %}{{ bos_token+\\\"system\\\" }}{{ \\\"You are an intelligent assistant with reflective ability. In the process of thinking and reasoning, you need to strictly follow the thinking budget, which is \\\"}}{{thinking_budget}}{{\\\". That is, you need to complete your thinking within \\\"}}{{thinking_budget}}{{\\\" tokens and start answering the user's questions. You will reflect on your thinking process every \\\"}}{{ns.interval}}{{\\\" tokens, stating how many tokens have been used and how many are left.\\\"}}{{ eos_token }}{%- endif %}{%- endif %}{%- for message in loop_messages %}{%- if message.role == \\\"assistant\\\"   and message.tool_calls is defined   and message.tool_calls is iterable   and message.tool_calls | length > 0 %}{{ bos_token + message.role }}{%- if message.reasoning_content is defined and message.reasoning_content is string and message.reasoning_content | trim | length > 0 %}{{ \\\"\\\\n\\\" + think_begin_token + message.reasoning_content | trim + think_end_token }}{%- endif %}{%- if message.content is defined and message.content is string and message.content | trim | length > 0 %}{{ \\\"\\\\n\\\" + message.content | trim + \\\"\\\\n\\\" }}{%- endif %}{%- for tool_call in message.tool_calls %}{%- if tool_call.function is defined %}{% set tool_call = tool_call.function %}{% endif %}{{ \\\"\\\\n\\\" + toolcall_begin_token + \\\"\\\\n<function=\\\" + tool_call.name + \\\">\\\\n\\\" }}{%- if tool_call.arguments is defined %}{%- for arg_name, arg_value in tool_call.arguments | items %}{{ \\\"<parameter=\\\" + arg_name + \\\">\\\" }}{%- set arg_value = arg_value if arg_value is string else arg_value | string %}{{ arg_value+\\\"</parameter>\\\\n\\\" }}{%- endfor %}{%- endif %}{{ \\\"</function>\\\\n\\\" + toolcall_end_token }}{%- endfor %}{{ eos_token }}{%- elif message.role in [\\\"user\\\", \\\"system\\\"] %}{{ bos_token + message.role + \\\"\\\\n\\\" + message.content + eos_token }}{%- elif message.role == \\\"assistant\\\" %}{{ bos_token + message.role }}{%- if message.reasoning_content is defined and message.reasoning_content is string and message.reasoning_content | trim | length > 0 %}{{ \\\"\\\\n\\\" + think_begin_token + message.reasoning_content | trim + think_end_token }}{%- endif %}{%- if message.content is defined and message.content is string and message.content | trim | length > 0 %}{{ \\\"\\\\n\\\" + message.content | trim + eos_token }}{%- endif %}{%- else %}{{ bos_token + message.role + \\\"\\\\n\\\" + message.content + eos_token }}{%- endif %}{%- endfor %}{%- if add_generation_prompt %}{{ bos_token+\\\"assistant\\\\n\\\" }}{%- if thinking_budget == 0 %}{{ think_begin_token + \\\"\\\\n\\\" + budget_begin_token + \\\"The current thinking budget is 0, so I will directly start answering the question.\\\" + budget_end_token + \\\"\\\\n\\\" + think_end_token }}{%- endif %}{%- endif %}\",\n    \"stop_token_ids\": [\n      0,\n      1,\n      2\n    ],\n    \"stop\": [\n      \"<seed:bos>\",\n      \"<seed:pad>\",\n      \"<seed:eos>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"updated_at\": 1769418591,\n    \"featured\": false,\n    \"architectures\": [\n      \"SeedOssForCausalLM\"\n    ],\n    \"model_type\": \"seed_oss\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 131072,\n    \"model_name\": \"Baichuan-M2\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"hybrid\",\n      \"tools\"\n    ],\n    \"model_description\": \"Baichuan-M2-32B is Baichuan AI's medical-enhanced reasoning model, the second medical model released by Baichuan. Designed for real-world medical reasoning tasks, this model builds upon Qwen2.5-32B with an innovative Large Verifier System. Through domain-specific fine-tuning on real-world medical questions, it achieves breakthrough medical performance while maintaining strong general capabilities.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan-M2-32B\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan-M2-32B\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan-M2-32B-GPTQ-Int4\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"baichuan-inc/Baichuan-M2-32B-GPTQ-Int4\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}\\n        {{- messages[0].content + '\\\\n\\\\n' }}\\n    {%- endif %}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0].content + '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\\n{%- for message in messages[::-1] %}\\n    {%- set index = (messages|length - 1) - loop.index0 %}\\n    {%- if ns.multi_step_tool and message.role == \\\"user\\\" and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\\n        {%- set ns.multi_step_tool = false %}\\n        {%- set ns.last_query_index = index %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- for message in messages %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set content = message.content %}\\n        {%- set reasoning_content = '' %}\\n        {%- if message.reasoning_content is defined and message.reasoning_content is not none %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in message.content %}\\n                {%- set content = message.content.split('</think>')[-1].lstrip('\\\\n') %}\\n                {%- set reasoning_content = message.content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if loop.index0 > ns.last_query_index %}\\n            {%- if loop.last or (not loop.last and reasoning_content) %}\\n                {{- '<|im_start|>' + message.role + '\\\\n<think>\\\\n' + reasoning_content.strip('\\\\n') + '\\\\n</think>\\\\n\\\\n' + content.lstrip('\\\\n') }}\\n            {%- else %}\\n                {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n            {%- endif %}\\n        {%- else %}\\n            {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- endif %}\\n        {%- if message.tool_calls %}\\n            {%- for tool_call in message.tool_calls %}\\n                {%- if (loop.first and content) or (not loop.first) %}\\n                    {{- '\\\\n' }}\\n                {%- endif %}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n                {{- tool_call.name }}\\n                {{- '\\\", \\\"arguments\\\": ' }}\\n                {%- if tool_call.arguments is string %}\\n                    {{- tool_call.arguments }}\\n                {%- else %}\\n                    {{- tool_call.arguments | tojson }}\\n                {%- endif %}\\n                {{- '}\\\\n</tool_call>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- message.content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n    {%- if thinking_mode is defined %}\\n        {%- if thinking_mode == \\\"on\\\" %}\\n            {{- '<think>\\\\n' }}\\n        {%- elif thinking_mode == \\\"off\\\" %}\\n            {{- '<think>\\\\n\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151644,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_start|>\",\n      \"<|im_end|>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"updated_at\": 1769418592,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen2ForCausalLM\"\n    ],\n    \"model_type\": \"qwen2\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Qwen3-VL-Instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\",\n      \"tools\"\n    ],\n    \"model_description\": \"Meet Qwen3-VL — the most powerful vision-language model in the Qwen series to date.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-235B-A22B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-235B-A22B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-235B-A22B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-235B-A22B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-VL-235B-A22B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-VL-235B-A22B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-30B-A3B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-30B-A3B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-30B-A3B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-30B-A3B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn/Qwen3-VL-30B-A3B-Instruct-AWQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn-mirror/Qwen3-VL-30B-A3B-Instruct-AWQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-32B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-32B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-32B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-32B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-VL-32B-Instruct-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-VL-32B-Instruct-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-8B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-8B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-8B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-8B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn/Qwen3-VL-8B-Instruct-AWQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn-mirror/Qwen3-VL-8B-Instruct-AWQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-4B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-4B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-4B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-4B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn/Qwen3-VL-4B-Instruct-AWQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn-mirror/Qwen3-VL-4B-Instruct-AWQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-2B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-2B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-2B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-2B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-235B-A22B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-235B-A22B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-32B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-32B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Instruct-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 2,\n        \"activated_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Instruct-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Instruct-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"activated_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Instruct-3bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Instruct-3bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"activated_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Instruct-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Instruct-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"activated_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Instruct-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Instruct-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"activated_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Instruct-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Instruct-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"activated_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Instruct-3bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Instruct-3bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"activated_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"5bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Instruct-5bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"5bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Instruct-5bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"activated_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Instruct-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Instruct-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 30,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Instruct-3bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Instruct-3bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 30,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Instruct-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Instruct-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 32,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-32B-Instruct-3bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-32B-Instruct-3bit\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}\\n        {%- if messages[0].content is string %}\\n            {{- messages[0].content }}\\n        {%- else %}\\n            {%- for content in messages[0].content %}\\n                {%- if 'text' in content %}\\n                    {{- content.text }}\\n                {%- endif %}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '\\\\n\\\\n' }}\\n    {%- endif %}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {{- '<|im_start|>system\\\\n' }}\\n        {%- if messages[0].content is string %}\\n            {{- messages[0].content }}\\n        {%- else %}\\n            {%- for content in messages[0].content %}\\n                {%- if 'text' in content %}\\n                    {{- content.text }}\\n                {%- endif %}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- set image_count = namespace(value=0) %}\\n{%- set video_count = namespace(value=0) %}\\n{%- for message in messages %}\\n    {%- if message.role == \\\"user\\\" %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' }}\\n        {%- if message.content is string %}\\n            {{- message.content }}\\n        {%- else %}\\n            {%- for content in message.content %}\\n                {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\\n                    {%- set image_count.value = image_count.value + 1 %}\\n                    {%- if add_vision_id %}Picture {{ image_count.value }}: {% endif -%}\\n                    <|vision_start|><|image_pad|><|vision_end|>\\n                {%- elif content.type == 'video' or 'video' in content %}\\n                    {%- set video_count.value = video_count.value + 1 %}\\n                    {%- if add_vision_id %}Video {{ video_count.value }}: {% endif -%}\\n                    <|vision_start|><|video_pad|><|vision_end|>\\n                {%- elif 'text' in content %}\\n                    {{- content.text }}\\n                {%- endif %}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' }}\\n        {%- if message.content is string %}\\n            {{- message.content }}\\n        {%- else %}\\n            {%- for content_item in message.content %}\\n                {%- if 'text' in content_item %}\\n                    {{- content_item.text }}\\n                {%- endif %}\\n            {%- endfor %}\\n        {%- endif %}\\n        {%- if message.tool_calls %}\\n            {%- for tool_call in message.tool_calls %}\\n                {%- if (loop.first and message.content) or (not loop.first) %}\\n                    {{- '\\\\n' }}\\n                {%- endif %}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n                {{- tool_call.name }}\\n                {{- '\\\", \\\"arguments\\\": ' }}\\n                {%- if tool_call.arguments is string %}\\n                    {{- tool_call.arguments }}\\n                {%- else %}\\n                    {{- tool_call.arguments | tojson }}\\n                {%- endif %}\\n                {{- '}\\\\n</tool_call>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {%- if message.content is string %}\\n            {{- message.content }}\\n        {%- else %}\\n            {%- for content in message.content %}\\n                {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\\n                    {%- set image_count.value = image_count.value + 1 %}\\n                    {%- if add_vision_id %}Picture {{ image_count.value }}: {% endif -%}\\n                    <|vision_start|><|image_pad|><|vision_end|>\\n                {%- elif content.type == 'video' or 'video' in content %}\\n                    {%- set video_count.value = video_count.value + 1 %}\\n                    {%- if add_vision_id %}Video {{ video_count.value }}: {% endif -%}\\n                    <|vision_start|><|video_pad|><|vision_end|>\\n                {%- elif 'text' in content %}\\n                    {{- content.text }}\\n                {%- endif %}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418594,\n    \"featured\": true,\n    \"architectures\": [\n      \"Qwen3VLMoeForConditionalGeneration\"\n    ],\n    \"model_type\": \"qwen3_vl_moe\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Qwen3-VL-Thinking\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\",\n      \"reasoning\",\n      \"tools\"\n    ],\n    \"model_description\": \"Meet Qwen3-VL — the most powerful vision-language model in the Qwen series to date.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-235B-A22B-Thinking\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-235B-A22B-Thinking\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-235B-A22B-Thinking-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-235B-A22B-Thinking-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/Qwen3-VL-235B-A22B-Thinking-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/Qwen3-VL-235B-A22B-Thinking-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-30B-A3B-Thinking\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-30B-A3B-Thinking\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-30B-A3B-Thinking-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-VL-30B-A3B-Thinking-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn/Qwen3-VL-30B-A3B-Thinking-AWQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn-mirror/Qwen3-VL-30B-A3B-Thinking-AWQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 22,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-235B-A22B-Thinking-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-235B-A22B-Thinking-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Thinking-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Thinking-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 2,\n        \"activated_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Thinking-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Thinking-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 2,\n        \"activated_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Thinking-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Thinking-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 2,\n        \"activated_size_in_billions\": 2,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Thinking-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-2B-Thinking-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"activated_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Thinking-3bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Thinking-3bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"activated_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Thinking-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Thinking-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"activated_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Thinking-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Thinking-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 4,\n        \"activated_size_in_billions\": 4,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Thinking-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-4B-Thinking-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"activated_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-3bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-3bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"activated_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-4bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-4bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"activated_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"5bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-5bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"5bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-5bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"activated_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-8bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-8bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 8,\n        \"activated_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-8B-Thinking-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 30,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Thinking-3bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Thinking-3bit\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 30,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Thinking-bf16\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"bf16\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-30B-A3B-Thinking-bf16\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 235,\n        \"activated_size_in_billions\": 235,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-235B-A22B-Thinking-3bit\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"3bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-VL-235B-A22B-Thinking-3bit\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- set image_count = namespace(value=0) %}\\n{%- set video_count = namespace(value=0) %}\\n{%- macro render_content(content, do_vision_count) %}\\n    {%- if content is string %}\\n        {{- content }}\\n    {%- else %}\\n        {%- for item in content %}\\n            {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}\\n                {%- if do_vision_count %}\\n                    {%- set image_count.value = image_count.value + 1 %}\\n                {%- endif %}\\n                {%- if add_vision_id %}Picture {{ image_count.value }}: {% endif -%}\\n                <|vision_start|><|image_pad|><|vision_end|>\\n            {%- elif 'video' in item or item.type == 'video' %}\\n                {%- if do_vision_count %}\\n                    {%- set video_count.value = video_count.value + 1 %}\\n                {%- endif %}\\n                {%- if add_vision_id %}Video {{ video_count.value }}: {% endif -%}\\n                <|vision_start|><|video_pad|><|vision_end|>\\n            {%- elif 'text' in item %}\\n                {{- item.text }}\\n            {%- endif %}\\n        {%- endfor %}\\n    {%- endif %}\\n{%- endmacro %}\\n{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}\\n        {{- render_content(messages[0].content, false) + '\\\\n\\\\n' }}\\n    {%- endif %}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + render_content(messages[0].content, false) + '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\\n{%- for message in messages[::-1] %}\\n    {%- set index = (messages|length - 1) - loop.index0 %}\\n    {%- if ns.multi_step_tool and message.role == \\\"user\\\" %}\\n        {%- set content = render_content(message.content, false) %}\\n        {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}\\n            {%- set ns.multi_step_tool = false %}\\n            {%- set ns.last_query_index = index %}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- for message in messages %}\\n    {%- set content = render_content(message.content, True) %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set reasoning_content = '' %}\\n        {%- if message.reasoning_content is string %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in content %}\\n                {%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n                {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if loop.index0 > ns.last_query_index %}\\n            {%- if loop.last or (not loop.last and reasoning_content) %}\\n                {{- '<|im_start|>' + message.role + '\\\\n<think>\\\\n' + reasoning_content.strip('\\\\n') + '\\\\n</think>\\\\n\\\\n' + content.lstrip('\\\\n') }}\\n            {%- else %}\\n                {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n            {%- endif %}\\n        {%- else %}\\n            {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- endif %}\\n        {%- if message.tool_calls %}\\n            {%- for tool_call in message.tool_calls %}\\n                {%- if (loop.first and content) or (not loop.first) %}\\n                    {{- '\\\\n' }}\\n                {%- endif %}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n                {{- tool_call.name }}\\n                {{- '\\\", \\\"arguments\\\": ' }}\\n                {%- if tool_call.arguments is string %}\\n                    {{- tool_call.arguments }}\\n                {%- else %}\\n                    {{- tool_call.arguments | tojson }}\\n                {%- endif %}\\n                {{- '}\\\\n</tool_call>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n<think>\\\\n' }}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_end|>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418596,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen3VLMoeForConditionalGeneration\"\n    ],\n    \"model_type\": \"qwen3_vl_moe\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Qwen3-Next-Instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen3-Next-80B-A3B is the first installment in the Qwen3-Next series\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 80,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Next-80B-A3B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Next-80B-A3B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 80,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Next-80B-A3B-Instruct-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Next-80B-A3B-Instruct-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 80,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn/Qwen3-Next-80B-A3B-Instruct-AWQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn-mirror/Qwen3-Next-80B-A3B-Instruct-AWQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 80,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-Next-80B-A3B-Instruct-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-Next-80B-A3B-Instruct-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}\\n        {{- messages[0].content + '\\\\n\\\\n' }}\\n    {%- endif %}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0].content + '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- if message.content is string %}\\n        {%- set content = message.content %}\\n    {%- else %}\\n        {%- set content = '' %}\\n    {%- endif %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- if message.tool_calls %}\\n            {%- for tool_call in message.tool_calls %}\\n                {%- if (loop.first and content) or (not loop.first) %}\\n                    {{- '\\\\n' }}\\n                {%- endif %}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n                {{- tool_call.name }}\\n                {{- '\\\", \\\"arguments\\\": ' }}\\n                {%- if tool_call.arguments is string %}\\n                    {{- tool_call.arguments }}\\n                {%- else %}\\n                    {{- tool_call.arguments | tojson }}\\n                {%- endif %}\\n                {{- '}\\\\n</tool_call>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418597,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen3NextForCausalLM\"\n    ],\n    \"model_type\": \"qwen3_next\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Qwen3-Next-Thinking\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen3-Next-80B-A3B is the first installment in the Qwen3-Next series\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 80,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Next-80B-A3B-Thinking\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Next-80B-A3B-Thinking\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 80,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Next-80B-A3B-Thinking-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"fp8\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Next-80B-A3B-Thinking-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 80,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn/Qwen3-Next-80B-A3B-Thinking-AWQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn-mirror/Qwen3-Next-80B-A3B-Thinking-AWQ-{quantization}\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 80,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-Next-80B-A3B-Thinking-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/Qwen3-Next-80B-A3B-Thinking-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}\\n        {{- messages[0].content + '\\\\n\\\\n' }}\\n    {%- endif %}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {{- '<|im_start|>system\\\\n' + messages[0].content + '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\\n{%- for message in messages[::-1] %}\\n    {%- set index = (messages|length - 1) - loop.index0 %}\\n    {%- if ns.multi_step_tool and message.role == \\\"user\\\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\\n        {%- set ns.multi_step_tool = false %}\\n        {%- set ns.last_query_index = index %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- for message in messages %}\\n    {%- if message.content is string %}\\n        {%- set content = message.content %}\\n    {%- else %}\\n        {%- set content = '' %}\\n    {%- endif %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set reasoning_content = '' %}\\n        {%- if message.reasoning_content is string %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in content %}\\n                {%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n                {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if loop.index0 > ns.last_query_index %}\\n            {%- if loop.last or (not loop.last and reasoning_content) %}\\n                {{- '<|im_start|>' + message.role + '\\\\n<think>\\\\n' + reasoning_content.strip('\\\\n') + '\\\\n</think>\\\\n\\\\n' + content.lstrip('\\\\n') }}\\n            {%- else %}\\n                {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n            {%- endif %}\\n        {%- else %}\\n            {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- endif %}\\n        {%- if message.tool_calls %}\\n            {%- for tool_call in message.tool_calls %}\\n                {%- if (loop.first and content) or (not loop.first) %}\\n                    {{- '\\\\n' }}\\n                {%- endif %}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n                {{- tool_call.name }}\\n                {{- '\\\", \\\"arguments\\\": ' }}\\n                {%- if tool_call.arguments is string %}\\n                    {{- tool_call.arguments }}\\n                {%- else %}\\n                    {{- tool_call.arguments | tojson }}\\n                {%- endif %}\\n                {{- '}\\\\n</tool_call>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n<think>\\\\n' }}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_end|>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"tool_parser\": \"qwen\",\n    \"updated_at\": 1769418598,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen3NextForCausalLM\"\n    ],\n    \"model_type\": \"qwen3_next\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 32768,\n    \"model_name\": \"MiniCPM-V-4.5\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_description\": \"MiniCPM-V 4.5 is an improved version in the MiniCPM-V series with enhanced multimodal capabilities and better performance.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM-V-4_5\",\n            \"model_revision\": \"main\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM-V-4_5\",\n            \"model_revision\": \"master\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 8,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"openbmb/MiniCPM-V-4_5-int4\",\n            \"model_revision\": \"main\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"OpenBMB/MiniCPM-V-4_5-int4\",\n            \"model_revision\": \"master\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\\n' + message['content'] + '<|im_end|>' + '\\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\\n' }}{% endif %}\",\n    \"stop_token_ids\": [\n      151645,\n      151643\n    ],\n    \"stop\": [\n      \"<|im_end|>\"\n    ],\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"updated_at\": 1769418599,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniCPMV\"\n    ],\n    \"model_type\": \"minicpmv\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Qwen3-Omni-Thinking\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\",\n      \"audio\",\n      \"omni\",\n      \"reasoning\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen3-Omni is the natively end-to-end multilingual omni-modal foundation models. It processes text, images, audio, and video, and delivers real-time streaming responses in both text and natural speech. We introduce several architectural upgrades to improve performance and efficiency.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Omni-30B-A3B-Thinking\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Omni-30B-A3B-Thinking\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn/Qwen3-Omni-30B-A3B-Thinking-AWQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn-mirror/Qwen3-Omni-30B-A3B-Thinking-AWQ-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}{{- messages[0].content + '\\\\n\\\\n' }}{%- endif %}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {%- if messages[0].content is string %}\\n            {{- '<|im_start|>system\\\\n' + messages[0].content + '<|im_end|>\\\\n' }}\\n        {%- else %}\\n            {%- for content in messages[0].content %}\\n                {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\\n                    {{- '<|im_start|>system\\\\n' +\\\"<|vision_start|><|image_pad|><|vision_end|>\\\"+ '<|im_end|>\\\\n' }}\\n                {%- elif content.type == 'audio' or 'audio' in content or 'audio_url' in content %}\\n                    {{- '<|im_start|>system\\\\n' +\\\"<|audio_start|><|audio_pad|><|audio_end|>\\\"+ '<|im_end|>\\\\n' }}\\n                {%- elif content.type == 'video' or 'video' in content %}\\n                    {{- '<|im_start|>system\\\\n' +\\\"<|vision_start|><|video_pad|><|vision_end|>\\\"+ '<|im_end|>\\\\n' }}\\n                {%- elif content.type == 'text' %}\\n                    {{- '<|im_start|>system\\\\n' +content.text+ '<|im_end|>\\\\n' }}\\n                {%- endif %}\\n            {%- endfor %}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endif %}\\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\\n{%- for message in messages[::-1] %}\\n    {%- set index = (messages|length - 1) - loop.index0 %}\\n    {%- if ns.multi_step_tool and message.role == \\\"user\\\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\\n        {%- set ns.multi_step_tool = false %}\\n        {%- set ns.last_query_index = index %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- for message in messages %}\\n    {%- if message.content is string %}\\n        {%- set content = message.content %}\\n    {%- else %}\\n        {%- set content = namespace(text=\\\"\\\") %}\\n        {%- for mcontent in message.content %}\\n            {%- if mcontent.type == 'image' or 'image' in mcontent or 'image_url' in mcontent %}\\n                {%- set content.text = content.text~\\\"<|vision_start|><|image_pad|><|vision_end|>\\\" %}\\n            {%- elif mcontent.type == 'audio' or 'audio' in mcontent or 'audio_url' in mcontent %}\\n                {%- set content.text = content.text~\\\"<|audio_start|><|audio_pad|><|audio_end|>\\\" %}\\n            {%- elif mcontent.type == 'video' or 'video' in mcontent %}\\n                {%- set content.text = content.text~\\\"<|vision_start|><|video_pad|><|vision_end|>\\\" %}\\n            {%- elif mcontent.type == 'text' %}\\n                {%- set content.text = content.text~mcontent.text %}\\n            {%- endif %}\\n        {%- endfor %}\\n        {%- set content = content.text %}\\n    {%- endif %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set reasoning_content = \\\"\\\" %}\\n        {%- if message.reasoning_content is string %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in content %}\\n            {%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n            {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n        {%- endif %}\\n    {%- endif %}\\n    {%- if loop.index0 > ns.last_query_index %}\\n        {%- if loop.last or (not loop.last and reasoning_content) %}\\n            {{- '<|im_start|>' + message.role + '\\\\n<think>\\\\n' + reasoning_content.strip(\\\"\\\\n\\\") + '\\\\n</think>\\\\n\\\\n' + content.lstrip('\\\\n') }}\\n        {%- else %}\\n            {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- endif %}\\n    {%- else %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n    {%- endif %}\\n    {%- if message.tool_calls %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if (loop.first and content) or (not loop.first) %}{{- '\\\\n' }}{%- endif %}\\n            {%- if tool_call.function %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {%- if tool_call.arguments is string %}\\n                {{- tool_call.arguments }}\\n            {%- else %}\\n                {{- tool_call.arguments | tojson }}\\n            {%- endif %}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n    {%- endif %}\\n    {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}{{- '<|im_start|>user' }}{%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}{{- '<|im_end|>\\\\n' }}{%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n    {%- if enable_thinking is defined and enable_thinking is false %}{{- '<think>\\\\n\\\\n</think>\\\\n\\\\n' }}{%- endif %}\\n{%- endif %}\\n\",\n    \"stop_token_ids\": [\n      151643,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_end|>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"tool_parser\": \"qwen\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers==4.57.1 ; #engine# == \\\"Transformers\\\"\",\n        \"accelerate>=0.28.0 ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\",\n        \"qwen_omni_utils\",\n        \"soundfile\"\n      ]\n    },\n    \"updated_at\": 1769418600,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen3OmniMoeForConditionalGeneration\"\n    ],\n    \"model_type\": \"qwen3_omni_moe\"\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 262144,\n    \"model_name\": \"Qwen3-Omni-Instruct\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\",\n      \"audio\",\n      \"omni\",\n      \"tools\"\n    ],\n    \"model_description\": \"Qwen3-Omni is the natively end-to-end multilingual omni-modal foundation models. It processes text, images, audio, and video, and delivers real-time streaming responses in both text and natural speech. We introduce several architectural upgrades to improve performance and efficiency.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Omni-30B-A3B-Instruct\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"Qwen/Qwen3-Omni-30B-A3B-Instruct\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn/Qwen3-Omni-30B-A3B-Instruct-AWQ-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"cpatonn-mirror/Qwen3-Omni-30B-A3B-Instruct-AWQ-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{%- if tools %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {%- if messages[0].role == 'system' %}\\n        {%- if messages[0].content is string %}\\n            {{- messages[0].content }}\\n        {%- else %}\\n            {%- for content in messages[0].content %}\\n                {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\\n                    {{- \\\"<|vision_start|><|image_pad|><|vision_end|>\\\" }}\\n                {%- elif content.type == 'audio' or 'audio' in content or 'audio_url' in content %}\\n                    {{- \\\"<|audio_start|><|audio_pad|><|audio_end|>\\\" }}\\n                {%- elif content.type == 'video' or 'video' in content %}\\n                    {{- \\\"<|vision_start|><|video_pad|><|vision_end|>\\\" }}\\n                {%- elif content.type == 'text' %}\\n                    {{- content.text }}\\n                {%- endif %}\\n            {%- endfor %}\\n        {%- endif %}\\n    {%- endif %}\\n    {{- '\\\\n\\\\n' }}\\n    {{- \\\"# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\\n\\\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\\\n<tool_call>\\\\n{\\\\\\\"name\\\\\\\": <function-name>, \\\\\\\"arguments\\\\\\\": <args-json-object>}\\\\n</tool_call><|im_end|>\\\\n\\\" }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {%- if messages[0].content is string %}\\n            {{- '<|im_start|>system\\\\n' + messages[0].content + '<|im_end|>\\\\n' }}\\n        {%- else %}\\n            {%- for content in messages[0].content %}\\n                {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\\n                    {{- '<|im_start|>system\\\\n' +\\\"<|vision_start|><|image_pad|><|vision_end|>\\\"+ '<|im_end|>\\\\n' }}\\n                {%- elif content.type == 'audio' or 'audio' in content or 'audio_url' in content %}\\n                    {{- '<|im_start|>system\\\\n' +\\\"<|audio_start|><|audio_pad|><|audio_end|>\\\"+ '<|im_end|>\\\\n' }}\\n                {%- elif content.type == 'video' or 'video' in content %}\\n                    {{- '<|im_start|>system\\\\n' +\\\"<|vision_start|><|video_pad|><|vision_end|>\\\"+ '<|im_end|>\\\\n' }}\\n                {%- elif content.type == 'text' %}\\n                    {{- '<|im_start|>system\\\\n' +content.text+ '<|im_end|>\\\\n' }}\\n                {%- endif %}\\n            {%- endfor %}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endif %}\\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\\n{%- for message in messages[::-1] %}\\n    {%- set index = (messages|length - 1) - loop.index0 %}\\n    {%- if ns.multi_step_tool and message.role == \\\"user\\\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\\n        {%- set ns.multi_step_tool = false %}\\n        {%- set ns.last_query_index = index %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- for message in messages %}\\n    {%- if message.content is string %}\\n        {%- set content = message.content %}\\n    {%- else %}\\n        {%- set content = namespace(text=\\\"\\\") %}\\n        {%- for mcontent in message.content %}\\n            {%- if mcontent.type == 'image' or 'image' in mcontent or 'image_url' in mcontent %}\\n                {%- set content.text = content.text~\\\"<|vision_start|><|image_pad|><|vision_end|>\\\" %}\\n            {%- elif mcontent.type == 'audio' or 'audio' in mcontent or 'audio_url' in mcontent %}\\n                {%- set content.text = content.text~\\\"<|audio_start|><|audio_pad|><|audio_end|>\\\" %}\\n            {%- elif mcontent.type == 'video' or 'video' in mcontent %}\\n                {%- set content.text = content.text~\\\"<|vision_start|><|video_pad|><|vision_end|>\\\" %}\\n            {%- elif mcontent.type == 'text' %}\\n                {%- set content.text = content.text~mcontent.text %}\\n            {%- endif %}\\n        {%- endfor %}\\n        {%- set content = content.text %}\\n    {%- endif %}\\n    {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set reasoning_content = \\\"\\\" %}\\n        {%- if message.reasoning_content is string %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in content %}\\n            {%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n            {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n        {%- endif %}\\n    {%- endif %}\\n    {%- if loop.index0 > ns.last_query_index %}\\n        {%- if loop.last or (not loop.last and reasoning_content) %}\\n            {{- '<|im_start|>' + message.role + '\\\\n<think>\\\\n' + reasoning_content.strip(\\\"\\\\n\\\") + '\\\\n</think>\\\\n\\\\n' + content.lstrip('\\\\n') }}\\n        {%- else %}\\n            {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- endif %}\\n    {%- else %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n    {%- endif %}\\n    {%- if message.tool_calls %}\\n        {%- for tool_call in message.tool_calls %}\\n            {%- if (loop.first and content) or (not loop.first) %}{{- '\\\\n' }}{%- endif %}\\n            {%- if tool_call.function %}\\n                {%- set tool_call = tool_call.function %}\\n            {%- endif %}\\n            {{- '<tool_call>\\\\n{\\\"name\\\": \\\"' }}\\n            {{- tool_call.name }}\\n            {{- '\\\", \\\"arguments\\\": ' }}\\n            {%- if tool_call.arguments is string %}\\n                {{- tool_call.arguments }}\\n            {%- else %}\\n                {{- tool_call.arguments | tojson }}\\n            {%- endif %}\\n            {{- '}\\\\n</tool_call>' }}\\n        {%- endfor %}\\n    {%- endif %}\\n    {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}{{- '<|im_start|>user' }}{%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}{{- '<|im_end|>\\\\n' }}{%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n    {%- if enable_thinking is defined and enable_thinking is false %}{{- '<think>\\\\n\\\\n</think>\\\\n\\\\n' }}{%- endif %}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      151643,\n      151645\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers==4.57.1 ; #engine# == \\\"Transformers\\\"\",\n        \"accelerate>=0.28.0 ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\",\n        \"qwen_omni_utils\",\n        \"soundfile\"\n      ]\n    },\n    \"updated_at\": 1769418602,\n    \"featured\": false,\n    \"architectures\": [\n      \"Qwen3OmniMoeForConditionalGeneration\"\n    ],\n    \"model_type\": \"qwen3_omni_moe\"\n  },\n  {\n    \"model_name\": \"MiniMax-M2\",\n    \"model_description\": \"MiniMax-M2, a Mini model built for Max coding & agentic workflows.\",\n    \"context_length\": 196608,\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\",\n      \"reasoning\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_size_in_billions\": 230,\n        \"activated_size_in_billions\": 10,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"MiniMaxAI/MiniMax-M2\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"MiniMax/MiniMax-M2\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 230,\n        \"activated_size_in_billions\": 10,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/MiniMax-M2-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/MiniMax-M2-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 230,\n        \"activated_size_in_billions\": 10,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/MiniMax-M2-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/MiniMax-M2-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ]\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"{# ----------‑‑‑ special token variables ‑‑‑---------- #}\\n{%- set toolcall_begin_token   = '<minimax:tool_call>'         -%}\\n{%- set toolcall_end_token     = '</minimax:tool_call>'        -%}\\n{#- Tool Rendering Functions ============================================== -#}\\n{%- macro render_tool_namespace(namespace_name, tool_list) -%}\\n{%- for tool in tool_list -%}\\n<tool>{{ tool.function | tojson(ensure_ascii=False) }}</tool>\\n{% endfor -%}\\n{%- endmacro -%}\\n{%- macro visible_text(content) -%}\\n    {%- if content is string -%}\\n        {{ content }}\\n    {%- elif content is iterable and content is not mapping -%}\\n        {%- for item in content -%}\\n            {%- if item is mapping and item.type == 'text' -%}\\n                {{- item.text }}\\n            {%- elif item is string -%}\\n                {{- item }}\\n            {%- endif -%}\\n        {%- endfor -%}\\n    {%- else -%}\\n        {{- content }}\\n    {%- endif -%}\\n{%- endmacro -%}\\n{#- System Message Construction ============================================ -#}\\n{%- macro build_system_message(system_message) -%}\\n    {%- if system_message and system_message.content -%}\\n        {{- visible_text(system_message.content) }}\\n    {%- else -%}\\n        {%- if model_identity is not defined -%}\\n            {%- set model_identity = \\\"You are a helpful assistant.\\\" -%}\\n        {%- endif -%}\\n        {{- model_identity }}\\n    {%- endif -%}\\n    \\n    {#- Handle current_date -#}\\n    {%- if system_message and system_message.current_date -%}\\n        {{- '\\\\n' ~ 'Current date: ' + system_message.current_date }}\\n    {%- endif -%}\\n    {#- Handle current_location -#}\\n    {%- if system_message and system_message.current_location -%}\\n        {{- '\\\\n' ~ 'Current location: ' + system_message.current_location }}\\n    {%- endif -%}\\n{%- endmacro -%}\\n{#- Main Template Logic ================================================= -#}\\n{#- Extract system message (only first message if it's system) -#}\\n{%- set system_message = none -%}\\n{%- set conversation_messages = messages -%}\\n{%- if messages and messages[0].role == \\\"system\\\" -%}\\n    {%- set system_message = messages[0] -%}\\n    {%- set conversation_messages = messages[1:] -%}\\n{%- endif -%}\\n{#- Get the last user message turn, for interleved thinking -#}\\n{%- set ns = namespace(last_user_index=-1) %}\\n{% for m in conversation_messages %}\\n    {%- if m.role == 'user' %}\\n        {% set ns.last_user_index = loop.index0 -%}\\n    {%- endif %}\\n{%- endfor %}\\n{#- Render system message -#}\\n{{- ']~!b[' ~ ']~b]system' ~ '\\\\n' }}\\n{{- build_system_message(system_message) }}\\n{#- Render tools if available -#}\\n{%- if tools -%}\\n    {{- '\\\\n\\\\n' ~ '# Tools' ~ '\\\\n' ~ 'You may call one or more tools to assist with the user query.\\\\nHere are the tools available in JSONSchema format:' ~ '\\\\n' }}\\n    {{- '\\\\n' ~ '<tools>' ~ '\\\\n' }}\\n    {{- render_tool_namespace(\\\"functions\\\", tools) }}\\n    {{- '</tools>' ~ '\\\\n\\\\n' }}\\n{{- 'When making tool calls, use XML format to invoke tools and pass parameters:' ~ '\\\\n' }}\\n{{- '\\\\n' ~ toolcall_begin_token }}\\n<invoke name=\\\"tool-name-1\\\">\\n<parameter name=\\\"param-key-1\\\">param-value-1</parameter>\\n<parameter name=\\\"param-key-2\\\">param-value-2</parameter>\\n...\\n</invoke>\\n{{- '\\\\n' ~ toolcall_end_token }}\\n{%- endif -%}\\n{{- '[e~[\\\\n' }}\\n\\n{#- Render messages -#}\\n{%- set last_tool_call = namespace(name=none) -%}\\n{%- for message in conversation_messages -%}\\n    {%- if message.role == 'assistant' -%}\\n        {#- Only render reasoning_content if no user message follows -#}\\n        {{- ']~b]ai' ~ '\\\\n' }}\\n\\n        {%- set reasoning_content = '' %}\\n        {%- set content = visible_text(message.content) %}\\n        {%- if message.reasoning_content is string %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in content %}\\n                {%- set reasoning_content = content.split('</think>')[0].strip('\\\\n').split('<think>')[-1].strip('\\\\n') %}\\n                {%- set content = content.split('</think>')[-1].strip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if reasoning_content and loop.index0 > ns.last_user_index -%}\\n            {{- '<think>' ~ '\\\\n' ~ reasoning_content ~ '\\\\n' ~ '</think>' ~ '\\\\n\\\\n' }}\\n        {%- endif -%}\\n        {%- if content -%}\\n            {{- content }}\\n        {%- endif -%}\\n        {%- if message.tool_calls -%}\\n            {{- '\\\\n' ~ toolcall_begin_token ~ '\\\\n' }}\\n\\n            {%- for tool_call in message.tool_calls -%}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<invoke name=\\\"' + tool_call.name + '\\\">' }}\\n                {% set _args = tool_call.arguments %}\\n                {%- for k, v in _args.items() %}\\n                {{- '<parameter name=\\\"' + k + '\\\">' }}\\n                {{- v | tojson(ensure_ascii=False) if v is not string else v }}\\n                {{- '</parameter>' }}\\n                {% endfor %}\\n                {{- '</invoke>' ~ '\\\\n' }}\\n            {%- endfor -%}\\n            \\n            {{- toolcall_end_token}}\\n            {%- set last_tool_call.name = message.tool_calls[-1].name -%}\\n        {%- else -%}\\n            {%- set last_tool_call.name = none -%}\\n        {%- endif -%}\\n        {{- '[e~[' ~ '\\\\n' }}\\n        \\n    {%- elif message.role == 'tool' -%}\\n    {%- if last_tool_call.name is none -%}\\n        {{- raise_exception(\\\"Message has tool role, but there was no previous assistant message with a tool call!\\\") }}\\n    {%- endif -%}\\n    {%- if loop.first or (conversation_messages[loop.index0 - 1].role != 'tool') -%}\\n        {{- ']~b]tool' }}\\n    {%- endif -%}\\n    {%- if message.content is string -%}\\n        {{- '\\\\n<response>' }}\\n        {{- message.content }}\\n        {{- '</response>' }}\\n    {%- else -%}\\n        {%- for tr in message.content -%}\\n            {{- '\\\\n<response>' }}\\n            {{- tr.output if tr.output is defined else (tr.text if tr.type == 'text' and tr.text is defined else tr) }}\\n            {{- '\\\\n</response>' }}\\n        {%- endfor -%}\\n    {%- endif -%}\\n    {%- if loop.last or (conversation_messages[loop.index0 + 1].role != 'tool') -%}\\n        {{- '[e~[\\\\n' -}}\\n    {%- endif -%}\\n        \\n    {%- elif message.role == 'user' -%}\\n        {{- ']~b]user' ~ '\\\\n' }}\\n        {{- visible_text(message.content) }}\\n        {{- '[e~[' ~ '\\\\n' }}\\n    {%- endif -%}\\n{%- endfor -%}\\n\\n{#- Generation prompt -#}\\n{%- if add_generation_prompt -%}\\n{{- ']~b]ai' ~ '\\\\n' ~ '<think>' ~ '\\\\n' }}\\n{%- endif -%}\",\n    \"stop_token_ids\": [\n      200020\n    ],\n    \"stop\": [\n      \"[e~[\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"tool_parser\": \"minimax\",\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"updated_at\": 1769418603,\n    \"featured\": false,\n    \"architectures\": [\n      \"MiniMaxM2ForCausalLM\"\n    ],\n    \"model_type\": \"minimax_m2\"\n  },\n  {\n    \"model_name\": \"DeepSeek-V3.2\",\n    \"model_description\": \"We introduce DeepSeek-V3.2, a model that harmonizes high computational efficiency with superior reasoning and agent performance\",\n    \"context_length\": 163840,\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"hybrid\",\n      \"tools\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"deepseek-ai/DeepSeek-V3.2\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"deepseek-ai/DeepSeek-V3.2\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/DeepSeek-V3.2-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/DeepSeek-V3.2-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      }\n    ],\n    \"architectures\": [\n      \"DeepseekV32ForCausalLM\"\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}\\n  {% set add_generation_prompt = false %}\\n{% endif %}\\n{% if not thinking is defined %}\\n  {% set thinking = false %}\\n{% endif %}\\n{% set ns = namespace(is_first=false, is_tool=false, system_prompt='', is_first_sp=true, is_last_user=false, is_only_sys=false, is_prefix=false) %}\\n{%- for message in messages %}\\n  {%- if message['role'] == 'system' %}\\n    {%- if ns.is_first_sp %}\\n      {% set ns.system_prompt = ns.system_prompt + message['content'] %}\\n      {% set ns.is_first_sp = false %}\\n    {%- else %}\\n      {% set ns.system_prompt = ns.system_prompt + '\\\\n\\\\n' + message['content'] %}\\n    {%- endif %}\\n    {% set ns.is_only_sys = true %}\\n  {%- endif %}\\n{%- endfor %}\\n{{ bos_token }}{{ ns.system_prompt }}\\n{%- for message in messages %}\\n  {%- if message['role'] == 'user' %}\\n    {%- set ns.is_tool = false -%}\\n    {%- set ns.is_first = false -%}\\n    {%- set ns.is_last_user = true -%}\\n    {{'<｜User｜>' + message['content']}}\\n  {%- endif %}\\n  {%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}\\n    {%- if ns.is_last_user or ns.is_only_sys %}\\n      {{'<｜Assistant｜></think>'}}\\n    {%- endif %}\\n    {%- set ns.is_last_user = false -%}\\n    {%- set ns.is_first = false %}\\n    {%- set ns.is_tool = false -%}\\n    {%- for tool in message['tool_calls'] %}\\n      {%- if not ns.is_first %}\\n        {%- if message['content'] is none %}\\n          {{'<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>'+ tool['function']['name'] + '<｜tool▁sep｜>' + tool['function']['arguments'] + '<｜tool▁call▁end｜>'}}\\n        {%- else %}\\n          {{message['content'] + '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['function']['name'] + '<｜tool▁sep｜>' + tool['function']['arguments'] + '<｜tool▁call▁end｜>'}}\\n        {%- endif %}\\n        {%- set ns.is_first = true -%}\\n      {%- else %}\\n        {{'<｜tool▁call▁begin｜>'+ tool['function']['name'] + '<｜tool▁sep｜>' + tool['function']['arguments'] + '<｜tool▁call▁end｜>'}}\\n      {%- endif %}\\n    {%- endfor %}\\n    {{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}\\n  {%- endif %}\\n  {%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) %}\\n    {%- if ns.is_last_user %}\\n      {{'<｜Assistant｜>'}}\\n      {%- if message['prefix'] is defined and message['prefix'] and thinking %}\\n        {{'<think>'}}\\n      {%- else %}\\n        {{'</think>'}}\\n      {%- endif %}\\n    {%- endif %}\\n    {%- if message['prefix'] is defined and message['prefix'] %}\\n      {%- set ns.is_prefix = true -%}\\n    {%- endif %}\\n    {%- set ns.is_last_user = false -%}\\n    {%- if ns.is_tool %}\\n      {{message['content'] + '<｜end▁of▁sentence｜>'}}\\n      {%- set ns.is_tool = false -%}\\n    {%- else %}\\n      {%- set content = message['content'] -%}\\n      {%- if '</think>' in content %}\\n        {%- set content = content.split('</think>', 1)[1] -%}\\n      {%- endif %}\\n      {{content + '<｜end▁of▁sentence｜>'}}\\n    {%- endif %}\\n  {%- endif %}\\n  {%- if message['role'] == 'tool' %}\\n    {%- set ns.is_last_user = false -%}\\n    {%- set ns.is_tool = true -%}\\n    {{'<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}\\n  {%- endif %}\\n  {%- if message['role'] != 'system' %}\\n    {% set ns.is_only_sys = false %}\\n  {%- endif %}\\n{%- endfor -%}\\n{% if add_generation_prompt and not ns.is_tool%}\\n  {% if ns.is_last_user or ns.is_only_sys or not ns.is_prefix %}\\n    {{'<｜Assistant｜>'}}\\n    {%- if not thinking %}\\n      {{'</think>'}}\\n    {%- else %}\\n      {{'<think>'}}\\n    {%- endif %}\\n  {% endif %}\\n{% endif %}\",\n    \"stop_token_ids\": [\n      1\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"tool_parser\": \"deepseek-r1\",\n    \"featured\": true,\n    \"updated_at\": 1773028085\n  },\n  {\n    \"model_name\": \"DeepSeek-V3.2-Exp\",\n    \"model_description\": \"We are excited to announce the official release of DeepSeek-V3.2-Exp, an experimental version of our model. As an intermediate step toward our next-generation architecture, V3.2-Exp builds upon V3.1-Terminus by introducing DeepSeek Sparse Attention—a sparse attention mechanism designed to explore and validate optimizations for training and inference efficiency in long-context scenarios.\",\n    \"context_length\": 163840,\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"hybrid\",\n      \"tools\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"deepseek-ai/DeepSeek-V3.2-Exp\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"deepseek-ai/DeepSeek-V3.2-Exp\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 671,\n        \"activated_size_in_billions\": 37,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/DeepSeek-V3.2-Exp-{quantization}\",\n            \"quantizations\": [\n              \"AWQ\",\n              \"AWQ-Lite\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/DeepSeek-V3.2-Exp-{quantization}\",\n            \"quantizations\": [\n              \"AWQ\",\n              \"AWQ-Lite\"\n            ]\n          }\n        }\n      }\n    ],\n    \"architectures\": [\n      \"DeepseekV32ForCausalLM\"\n    ],\n    \"chat_template\": \"{% if not add_generation_prompt is defined %}\\n  {% set add_generation_prompt = false %}\\n{% endif %}\\n{% if not thinking is defined %}\\n  {% set thinking = false %}\\n{% endif %}\\n{% set ns = namespace(is_first=false, is_tool=false, system_prompt='', is_first_sp=true, is_last_user=false, is_only_sys=false, is_prefix=false) %}\\n{%- for message in messages %}\\n  {%- if message['role'] == 'system' %}\\n    {%- if ns.is_first_sp %}\\n      {% set ns.system_prompt = ns.system_prompt + message['content'] %}\\n      {% set ns.is_first_sp = false %}\\n    {%- else %}\\n      {% set ns.system_prompt = ns.system_prompt + '\\\\n\\\\n' + message['content'] %}\\n    {%- endif %}\\n    {% set ns.is_only_sys = true %}\\n  {%- endif %}\\n{%- endfor %}\\n{{ bos_token }}{{ ns.system_prompt }}\\n{%- for message in messages %}\\n  {%- if message['role'] == 'user' %}\\n    {%- set ns.is_tool = false -%}\\n    {%- set ns.is_first = false -%}\\n    {%- set ns.is_last_user = true -%}\\n    {{'<｜User｜>' + message['content']}}\\n  {%- endif %}\\n  {%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}\\n    {%- if ns.is_last_user or ns.is_only_sys %}\\n      {{'<｜Assistant｜></think>'}}\\n    {%- endif %}\\n    {%- set ns.is_last_user = false -%}\\n    {%- set ns.is_first = false %}\\n    {%- set ns.is_tool = false -%}\\n    {%- for tool in message['tool_calls'] %}\\n      {%- if not ns.is_first %}\\n        {%- if message['content'] is none %}\\n          {{'<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>'+ tool['function']['name'] + '<｜tool▁sep｜>' + tool['function']['arguments'] + '<｜tool▁call▁end｜>'}}\\n        {%- else %}\\n          {{message['content'] + '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>' + tool['function']['name'] + '<｜tool▁sep｜>' + tool['function']['arguments'] + '<｜tool▁call▁end｜>'}}\\n        {%- endif %}\\n        {%- set ns.is_first = true -%}\\n      {%- else %}\\n        {{'<｜tool▁call▁begin｜>'+ tool['function']['name'] + '<｜tool▁sep｜>' + tool['function']['arguments'] + '<｜tool▁call▁end｜>'}}\\n      {%- endif %}\\n    {%- endfor %}\\n    {{'<｜tool▁calls▁end｜><｜end▁of▁sentence｜>'}}\\n  {%- endif %}\\n  {%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) %}\\n    {%- if ns.is_last_user %}\\n      {{'<｜Assistant｜>'}}\\n      {%- if message['prefix'] is defined and message['prefix'] and thinking %}\\n        {{'<think>'}}\\n      {%- else %}\\n        {{'</think>'}}\\n      {%- endif %}\\n    {%- endif %}\\n    {%- if message['prefix'] is defined and message['prefix'] %}\\n      {%- set ns.is_prefix = true -%}\\n    {%- endif %}\\n    {%- set ns.is_last_user = false -%}\\n    {%- if ns.is_tool %}\\n      {{message['content'] + '<｜end▁of▁sentence｜>'}}\\n      {%- set ns.is_tool = false -%}\\n    {%- else %}\\n      {%- set content = message['content'] -%}\\n      {%- if '</think>' in content %}\\n        {%- set content = content.split('</think>', 1)[1] -%}\\n      {%- endif %}\\n      {{content + '<｜end▁of▁sentence｜>'}}\\n    {%- endif %}\\n  {%- endif %}\\n  {%- if message['role'] == 'tool' %}\\n    {%- set ns.is_last_user = false -%}\\n    {%- set ns.is_tool = true -%}\\n    {{'<｜tool▁output▁begin｜>' + message['content'] + '<｜tool▁output▁end｜>'}}\\n  {%- endif %}\\n  {%- if message['role'] != 'system' %}\\n    {% set ns.is_only_sys = false %}\\n  {%- endif %}\\n{%- endfor -%}\\n{% if add_generation_prompt and not ns.is_tool%}\\n  {% if ns.is_last_user or ns.is_only_sys or not ns.is_prefix %}\\n    {{'<｜Assistant｜>'}}\\n    {%- if not thinking %}\\n      {{'</think>'}}\\n    {%- else %}\\n      {{'<think>'}}\\n    {%- endif %}\\n  {% endif %}\\n{% endif %}\",\n    \"stop_token_ids\": [\n      1\n    ],\n    \"stop\": [\n      \"<｜end▁of▁sentence｜>\"\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"tool_parser\": \"deepseek-r1\",\n    \"featured\": true,\n    \"updated_at\": 1770205932\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 202752,\n    \"model_name\": \"GLM-4.6\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"hybrid\",\n      \"tools\"\n    ],\n    \"model_description\": \"GLM-4.6 significantly enhances context length (up to 200K tokens), code generation, reasoning with tool use, agent capabilities, and human-aligned writing compared to GLM-4.5.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.6\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.6\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.6-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.6-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.6-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.6-GPTQ-Int4-Int8Mix\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.6-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.6-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.6-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.6-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"[gMASK]<sop>{%- if tools -%}<|system|># Tools\\\\nYou may call one or more functions to assist with the user query.\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>{% for tool in tools %}{{ tool | tojson(ensure_ascii=False) }}{% endfor %}</tools>\\\\nFor each function call, output the function name and arguments within the following XML format:\\\\n<tool_call>{function-name}\\\\n<arg_key>{arg-key-1}</arg_key>\\\\n<arg_value>{arg-value-1}</arg_value>\\\\n<arg_key>{arg-key-2}</arg_key>\\\\n<arg_value>{arg-value-2}</arg_value>\\\\n...<tool_call>{%- endif -%}{%- macro visible_text(content) -%}{%- if content is string -%}{{- content }}{%- elif content is iterable and content is not mapping -%}{%- for item in content -%}{%- if item is mapping and item.type == 'text' -%}{{- item.text }}{%- elif item is string -%}{{- item }}{%- endif -%}{%- endfor -%}{%- else -%}{{- content }}{%- endif -%}{%- endmacro -%}{%- set ns = namespace(last_user_index=-1) %}{%- for m in messages %}{%- if m.role == 'user' %}{% set ns.last_user_index = loop.index0 -%}{%- endif %}{%- endfor %}{% for m in messages %}{%- if m.role == 'user' -%}<|user|>{{ visible_text(m.content) }}{{- '/nothink' if (enable_thinking is defined and not enable_thinking and not visible_text(m.content).endswith(\\\"/nothink\\\")) else '' }}{%- elif m.role == 'assistant' -%}<|assistant|>{%- set reasoning_content = '' %}{%- set content = visible_text(m.content) %}{%- if m.reasoning_content is string %}{%- set reasoning_content = m.reasoning_content %}{%- else %}{%- if '</think>' in content %}{%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}{%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}{%- endif %}{%- endif %}{%- if loop.index0 > ns.last_user_index and reasoning_content -%}{{ '\\\\n<think>\\\\' + reasoning_content.strip() + '</think>'}}{%- else -%}{{ '\\\\n<think></think>' }}{%- endif -%}{%- if content.strip() -%}{{ '\\\\n' + content.strip() }}{%- endif -%}{% if m.tool_calls %}{% for tc in m.tool_calls %}{%- if tc.function %}{%- set tc = tc.function %}{%- endif %}{{ '\\\\n<tool_call>' + tc.name }}{% set _args = tc.arguments %}{% for k, v in _args.items() %}<arg_key>{{ k }}</arg_key><arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>{% endfor %}<tool_call>{% endfor %}{% endif %}{%- elif m.role == 'tool' -%}{%- if m.content is string -%}{%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}{{- '<|observation|>' }}{%- endif %}{{- '\\\\n<tool_call>\\\\n' }}{{- m.content }}{{- '\\\\n<tool_call>' }}{%- else -%}<|observation|>{% for tr in m.content %}<tool_call>{{ tr.output if tr.output is defined else tr }}<tool_call>{% endfor -%}{% endif -%}{%- elif m.role == 'system' -%}<|system|>{{ visible_text(m.content) }}{%- endif -%}{%- endfor -%}{%- if add_generation_prompt -%}<|assistant|>{{- '\\\\n<think></think>' if (enable_thinking is defined and not enable_thinking) else '' -}}{%- endif -%}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"tool_parser\": \"glm4\",\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers_dependencies ; #engine# == \\\"Transformers\\\"\",\n        \"mlx_dependencies ; #engine# == \\\"MLX\\\"\",\n        \"vllm_dependencies ; #engine# == \\\"vllm\\\"\",\n        \"sglang_dependencies ; #engine# == \\\"sglang\\\"\",\n        \"https://github.com/sgl-project/whl/releases/download/v0.3.20/sgl_kernel-0.3.20+cu130-cp310-abi3-manylinux2014_x86_64.whl ; #engine# == \\\"sglang\\\" and cuda_version == \\\"13.0\\\" and platform_machine == \\\"x86_64\\\"\",\n        \"https://github.com/sgl-project/whl/releases/download/v0.3.20/sgl_kernel-0.3.20+cu130-cp310-abi3-manylinux2014_aarch64.whl ; #engine# == \\\"sglang\\\" and cuda_version == \\\"13.0\\\" and platform_machine == \\\"aarch64\\\"\",\n        \"sgl_kernel ; #engine# == \\\"sglang\\\" and cuda_version < \\\"13.0\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ],\n      \"extra_index_url\": [\n        \"https://wheels.vllm.ai/0.14.0/cu130\",\n        \"https://download.pytorch.org/whl/cu130\"\n      ],\n      \"index_strategy\": \"unsafe-best-match\"\n    },\n    \"featured\": true,\n    \"architectures\": [\n      \"Glm4MoeForCausalLM\"\n    ],\n    \"updated_at\": 1769680026\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 202752,\n    \"model_name\": \"GLM-4.7\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"hybrid\",\n      \"tools\"\n    ],\n    \"model_description\": \"GLM-4.7 significantly advances core and multilingual agentic coding, UI/vibe coding, tool use, and complex reasoning—outperforming GLM-4.6 across benchmarks like SWE-bench, Terminal Bench 2.0, τ²-Bench, and HLE—while also improving chat, creative writing, and role-play.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.7\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.7\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"fp8\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.7-FP8\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"FP8\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.7-FP8\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"gptq\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.7-GPTQ-Int4-Int8Mix\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4-Int8Mix\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.7-GPTQ-Int4-Int8Mix\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"awq\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"QuantTrio/GLM-4.7-AWQ\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"Int4\"\n            ],\n            \"model_id\": \"tclf90/GLM-4.7-AWQ\"\n          }\n        }\n      },\n      {\n        \"model_format\": \"mlx\",\n        \"model_size_in_billions\": 355,\n        \"activated_size_in_billions\": 32,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.7-{quantization}\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"4bit\",\n              \"6bit\",\n              \"8bit\"\n            ],\n            \"model_id\": \"mlx-community/GLM-4.7-{quantization}\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"[gMASK]<sop>{%- if tools -%}<|system|># Tools\\\\nYou may call one or more functions to assist with the user query.\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>{% for tool in tools %}{{ tool | tojson(ensure_ascii=False) }}{% endfor %}</tools>\\\\nFor each function call, output the function name and arguments within the following XML format:\\\\n<tool_call>{function-name}<arg_key>{arg-key-1}</arg_key><arg_value>{arg-value-1}</arg_value><arg_key>{arg-key-2}</arg_key><arg_value>{arg-value-2}</arg_value>...<tool_call>{%- endif -%}{%- macro visible_text(content) -%}{%- if content is string -%}{{- content }}{%- elif content is iterable and content is not mapping -%}{%- for item in content -%}{%- if item is mapping and item.type == 'text' -%}{{- item.text }}{%- elif item is string -%}{{- item }}{%- endif -%}{%- endfor -%}{%- else -%}{{- content }}{%- endif -%}{%- endmacro -%}{%- set ns = namespace(last_user_index=-1) %}{%- for m in messages %}{%- if m.role == 'user' %}{% set ns.last_user_index = loop.index0 -%}{%- endif %}{%- endfor %}{% for m in messages %}{%- if m.role == 'user' -%}<|user|>{{ visible_text(m.content) }}{%- elif m.role == 'assistant' -%}<|assistant|>{%- set reasoning_content = '' %}{%- set content = visible_text(m.content) %}{%- if m.reasoning_content is string %}{%- set reasoning_content = m.reasoning_content %}{%- else %}{%- if '</think>' in content %}{%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}{%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}{%- endif %}{%- endif %}{%- if ((clear_thinking is defined and not clear_thinking) or loop.index0 > ns.last_user_index) and reasoning_content -%}{{ '<think>' + reasoning_content.strip() + '</think>'}}{%- else -%}{{ '</think>' }}{%- endif -%}{%- if content.strip() -%}{{ content.strip() }}{%- endif -%}{% if m.tool_calls %}{% for tc in m.tool_calls %}{%- if tc.function %}{%- set tc = tc.function %}{%- endif %}{{- '<tool_call>' + tc.name -}}{% set _args = tc.arguments %}{% for k, v in _args.items() %}<arg_key>{{ k }}</arg_key><arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>{% endfor %}<tool_call>{% endfor %}{% endif %}{%- elif m.role == 'tool' -%}{%- if m.content is string -%}{%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}{{- '<|observation|>' }}{%- endif %}{{- '<tool_call>' }}{{- m.content }}{{- '<tool_call>' }}{%- else -%}<|observation|>{% for tr in m.content %}<tool_call>{{ tr.output if tr.output is defined else tr }}<tool_call>{% endfor -%}{% endif -%}{%- elif m.role == 'system' -%}<|system|>{{ visible_text(m.content) }}{%- endif -%}{%- endfor -%}{%- if add_generation_prompt -%}<|assistant|>{{- '</think>' if (enable_thinking is defined and not enable_thinking) else '<think>' -}}{%- endif -%}\",\n    \"stop_token_ids\": [\n      151329,\n      151336,\n      151338\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"tool_parser\": \"glm4\",\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers_dependencies ; #engine# == \\\"Transformers\\\"\",\n        \"mlx_dependencies ; #engine# == \\\"MLX\\\"\",\n        \"vllm_dependencies ; #engine# == \\\"vllm\\\"\",\n        \"sglang_dependencies ; #engine# == \\\"sglang\\\"\",\n        \"https://github.com/sgl-project/whl/releases/download/v0.3.20/sgl_kernel-0.3.20+cu130-cp310-abi3-manylinux2014_x86_64.whl ; #engine# == \\\"sglang\\\" and cuda_version == \\\"13.0\\\" and platform_machine == \\\"x86_64\\\"\",\n        \"https://github.com/sgl-project/whl/releases/download/v0.3.20/sgl_kernel-0.3.20+cu130-cp310-abi3-manylinux2014_aarch64.whl ; #engine# == \\\"sglang\\\" and cuda_version == \\\"13.0\\\" and platform_machine == \\\"aarch64\\\"\",\n        \"sgl_kernel ; #engine# == \\\"sglang\\\" and cuda_version < \\\"13.0\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ],\n      \"extra_index_url\": [\n        \"https://wheels.vllm.ai/0.14.0/cu130\",\n        \"https://download.pytorch.org/whl/cu130\"\n      ],\n      \"index_strategy\": \"unsafe-best-match\"\n    },\n    \"architectures\": [\n      \"Glm4MoeForCausalLM\"\n    ],\n    \"updated_at\": 1770100010\n  },\n  {\n    \"version\": 2,\n    \"context_length\": 202752,\n    \"model_name\": \"GLM-4.7-Flash\",\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"reasoning\",\n      \"hybrid\",\n      \"tools\"\n    ],\n    \"model_description\": \"GLM-4.7-Flash is a 30B-A3B MoE model. As the strongest model in the 30B class, it offers a lightweight deployment option that balances performance and efficiency.\",\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": 30,\n        \"activated_size_in_billions\": 3,\n        \"model_src\": {\n          \"huggingface\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"zai-org/GLM-4.7-Flash\"\n          },\n          \"modelscope\": {\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"model_id\": \"ZhipuAI/GLM-4.7-Flash\"\n          }\n        }\n      }\n    ],\n    \"chat_template\": \"[gMASK]<sop>{%- if tools -%}<|system|># Tools\\\\nYou may call one or more functions to assist with the user query.\\\\nYou are provided with function signatures within <tools></tools> XML tags:\\\\n<tools>{% for tool in tools %}{{ tool | tojson(ensure_ascii=False) }}{% endfor %}</tools>\\\\nFor each function call, output the function name and arguments within the following XML format:\\\\n<tool_call>{function-name}<arg_key>{arg-key-1}</arg_key><arg_value>{arg-value-1}</arg_value><arg_key>{arg-key-2}</arg_key><arg_value>{arg-value-2}</arg_value>...<tool_call>{%- endif -%}{%- macro visible_text(content) -%}{%- if content is string -%}{{- content }}{%- elif content is iterable and content is not mapping -%}{%- for item in content -%}{%- if item is mapping and item.type == 'text' -%}{{- item.text }}{%- elif item is string -%}{{- item }}{%- endif -%}{%- endfor -%}{%- else -%}{{- content }}{%- endif -%}{%- endmacro -%}{%- set ns = namespace(last_user_index=-1) %}{%- for m in messages %}{%- if m.role == 'user' %}{% set ns.last_user_index = loop.index0 -%}{%- endif %}{%- endfor %}{% for m in messages %}{%- if m.role == 'user' -%}<|user|>{{ visible_text(m.content) }}{%- elif m.role == 'assistant' -%}<|assistant|>{%- set reasoning_content = '' %}{%- set content = visible_text(m.content) %}{%- if m.reasoning_content is string %}{%- set reasoning_content = m.reasoning_content %}{%- else %}{%- if '</think>' in content %}{%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}{%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}{%- endif %}{%- endif %}{%- if ((clear_thinking is defined and not clear_thinking) or loop.index0 > ns.last_user_index) and reasoning_content -%}{{ '<think>' + reasoning_content.strip() + '</think>'}}{%- else -%}{{ '</think>' }}{%- endif -%}{%- if content.strip() -%}{{ content.strip() }}{%- endif -%}{% if m.tool_calls %}{% for tc in m.tool_calls %}{%- if tc.function %}{%- set tc = tc.function %}{%- endif %}{{- '<tool_call>' + tc.name -}}{% set _args = tc.arguments %}{% for k, v in _args.items() %}<arg_key>{{ k }}</arg_key><arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>{% endfor %}<tool_call>{% endfor %}{% endif %}{%- elif m.role == 'tool' -%}{%- if m.content is string -%}{%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}{{- '<|observation|>' }}{%- endif %}{{- '<tool_call>' }}{{- m.content }}{{- '<tool_call>' }}{%- else -%}<|observation|>{% for tr in m.content %}<tool_call>{{ tr.output if tr.output is defined else tr }}<tool_call>{% endfor -%}{% endif -%}{%- elif m.role == 'system' -%}<|system|>{{ visible_text(m.content) }}{%- endif -%}{%- endfor -%}{%- if add_generation_prompt -%}<|assistant|>{{- '</think>' if (enable_thinking is defined and not enable_thinking) else '<think>' -}}{%- endif -%}\",\n    \"stop_token_ids\": [\n      154820,\n      154827,\n      154829\n    ],\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|user|>\",\n      \"<|observation|>\"\n    ],\n    \"tool_parser\": \"glm4\",\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers_dependencies ; #engine# == \\\"Transformers\\\"\",\n        \"mlx_dependencies ; #engine# == \\\"MLX\\\"\",\n        \"vllm_dependencies ; #engine# == \\\"vllm\\\"\",\n        \"sglang_dependencies ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"architectures\": [\n      \"Glm4MoeLiteForCausalLM\"\n    ],\n    \"featured\": false,\n    \"updated_at\": 1770196377\n  },\n  {\n    \"model_name\": \"MinerU2.5-2509-1.2B\",\n    \"model_description\": \"MinerU2.5-2509-1.2B is a vision language model for document understanding.\",\n    \"context_length\": 32768,\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_size_in_billions\": \"1_2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"opendatalab/MinerU2.5-2509-1.2B\",\n            \"model_revision\": \"main\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"opendatalab/MinerU2.5-2509-1.2B\",\n            \"model_revision\": \"master\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"architectures\": [\n      \"Qwen2VLForConditionalGeneration\"\n    ],\n    \"chat_template\": \"{% set image_count = namespace(value=0) %}{% set video_count = namespace(value=0) %}{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n{% endif %}<|im_start|>{{ message['role'] }}\\n{% if message['content'] is string %}{{ message['content'] }}<|im_end|>\\n{% else %}{% for content in message['content'] %}{% if content['type'] == 'image' or 'image' in content or 'image_url' in content %}{% set image_count.value = image_count.value + 1 %}{% if add_vision_id %}Picture {{ image_count.value }}: {% endif %}<|vision_start|><|image_pad|><|vision_end|>{% elif content['type'] == 'video' or 'video' in content %}{% set video_count.value = video_count.value + 1 %}{% if add_vision_id %}Video {{ video_count.value }}: {% endif %}<|vision_start|><|video_pad|><|vision_end|>{% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|>\\n{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant\\n{% endif %}\",\n    \"stop_token_ids\": [\n      151645,\n      151643\n    ],\n    \"stop\": [\n      \"<|im_end|>\",\n      \"<|endoftext|>\"\n    ],\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"transformers>=4.45.0 ; #engine# == \\\"Transformers\\\"\",\n        \"mineru-vl-utils[transformers] ; #engine# == \\\"Transformers\\\"\",\n        \"vllm_dependencies ; #engine# == \\\"vllm\\\"\",\n        \"qwen-vl-utils\",\n        \"#system_torch#\",\n        \"#system_numpy#\",\n        \"qwen_omni_utils\"\n      ]\n    },\n    \"featured\": false,\n    \"updated_at\": 1770103567\n  },\n  {\n    \"model_name\": \"Kimi-K2.5\",\n    \"model_description\": \"Kimi K2.5 is an open-source, native multimodal agentic model built through continual pretraining on approximately 15 trillion mixed visual and text tokens atop Kimi-K2-Base. It seamlessly integrates vision and language understanding with advanced agentic capabilities, instant and thinking modes, as well as conversational and agentic paradigms.\",\n    \"context_length\": 262144,\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_size_in_billions\": \"1058_59\",\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"moonshotai/Kimi-K2.5\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"moonshotai/Kimi-K2.5\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": \"1058_59\",\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/Kimi-K2.5-GGUF\",\n            \"model_file_name_template\": \"\",\n            \"model_file_name_split_template\": \"Kimi-K2.5-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00046\",\n                \"00002-of-00046\",\n                \"00003-of-00046\",\n                \"00004-of-00046\",\n                \"00005-of-00046\",\n                \"00006-of-00046\",\n                \"00007-of-00046\",\n                \"00008-of-00046\",\n                \"00009-of-00046\",\n                \"00010-of-00046\",\n                \"00011-of-00046\",\n                \"00012-of-00046\",\n                \"00013-of-00046\",\n                \"00014-of-00046\",\n                \"00015-of-00046\",\n                \"00016-of-00046\",\n                \"00017-of-00046\",\n                \"00018-of-00046\",\n                \"00019-of-00046\",\n                \"00020-of-00046\",\n                \"00021-of-00046\",\n                \"00022-of-00046\",\n                \"00023-of-00046\",\n                \"00024-of-00046\",\n                \"00025-of-00046\",\n                \"00026-of-00046\",\n                \"00027-of-00046\",\n                \"00028-of-00046\",\n                \"00029-of-00046\",\n                \"00030-of-00046\",\n                \"00031-of-00046\",\n                \"00032-of-00046\",\n                \"00033-of-00046\",\n                \"00034-of-00046\",\n                \"00035-of-00046\",\n                \"00036-of-00046\",\n                \"00037-of-00046\",\n                \"00038-of-00046\",\n                \"00039-of-00046\",\n                \"00040-of-00046\",\n                \"00041-of-00046\",\n                \"00042-of-00046\",\n                \"00043-of-00046\",\n                \"00044-of-00046\",\n                \"00045-of-00046\",\n                \"00046-of-00046\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00013\",\n                \"00002-of-00013\",\n                \"00003-of-00013\",\n                \"00004-of-00013\",\n                \"00005-of-00013\",\n                \"00006-of-00013\",\n                \"00007-of-00013\",\n                \"00008-of-00013\",\n                \"00009-of-00013\",\n                \"00010-of-00013\",\n                \"00011-of-00013\",\n                \"00012-of-00013\",\n                \"00013-of-00013\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00013\",\n                \"00002-of-00013\",\n                \"00003-of-00013\",\n                \"00004-of-00013\",\n                \"00005-of-00013\",\n                \"00006-of-00013\",\n                \"00007-of-00013\",\n                \"00008-of-00013\",\n                \"00009-of-00013\",\n                \"00010-of-00013\",\n                \"00011-of-00013\",\n                \"00012-of-00013\",\n                \"00013-of-00013\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00013\",\n                \"00002-of-00013\",\n                \"00003-of-00013\",\n                \"00004-of-00013\",\n                \"00005-of-00013\",\n                \"00006-of-00013\",\n                \"00007-of-00013\",\n                \"00008-of-00013\",\n                \"00009-of-00013\",\n                \"00010-of-00013\",\n                \"00011-of-00013\",\n                \"00012-of-00013\",\n                \"00013-of-00013\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00013\",\n                \"00002-of-00013\",\n                \"00003-of-00013\",\n                \"00004-of-00013\",\n                \"00005-of-00013\",\n                \"00006-of-00013\",\n                \"00007-of-00013\",\n                \"00008-of-00013\",\n                \"00009-of-00013\",\n                \"00010-of-00013\",\n                \"00011-of-00013\",\n                \"00012-of-00013\",\n                \"00013-of-00013\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00016\",\n                \"00002-of-00016\",\n                \"00003-of-00016\",\n                \"00004-of-00016\",\n                \"00005-of-00016\",\n                \"00006-of-00016\",\n                \"00007-of-00016\",\n                \"00008-of-00016\",\n                \"00009-of-00016\",\n                \"00010-of-00016\",\n                \"00011-of-00016\",\n                \"00012-of-00016\",\n                \"00013-of-00016\",\n                \"00014-of-00016\",\n                \"00015-of-00016\",\n                \"00016-of-00016\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00015\",\n                \"00002-of-00015\",\n                \"00003-of-00015\",\n                \"00004-of-00015\",\n                \"00005-of-00015\",\n                \"00006-of-00015\",\n                \"00007-of-00015\",\n                \"00008-of-00015\",\n                \"00009-of-00015\",\n                \"00010-of-00015\",\n                \"00011-of-00015\",\n                \"00012-of-00015\",\n                \"00013-of-00015\",\n                \"00014-of-00015\",\n                \"00015-of-00015\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00018\",\n                \"00002-of-00018\",\n                \"00003-of-00018\",\n                \"00004-of-00018\",\n                \"00005-of-00018\",\n                \"00006-of-00018\",\n                \"00007-of-00018\",\n                \"00008-of-00018\",\n                \"00009-of-00018\",\n                \"00010-of-00018\",\n                \"00011-of-00018\",\n                \"00012-of-00018\",\n                \"00013-of-00018\",\n                \"00014-of-00018\",\n                \"00015-of-00018\",\n                \"00016-of-00018\",\n                \"00017-of-00018\",\n                \"00018-of-00018\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00023\",\n                \"00002-of-00023\",\n                \"00003-of-00023\",\n                \"00004-of-00023\",\n                \"00005-of-00023\",\n                \"00006-of-00023\",\n                \"00007-of-00023\",\n                \"00008-of-00023\",\n                \"00009-of-00023\",\n                \"00010-of-00023\",\n                \"00011-of-00023\",\n                \"00012-of-00023\",\n                \"00013-of-00023\",\n                \"00014-of-00023\",\n                \"00015-of-00023\",\n                \"00016-of-00023\",\n                \"00017-of-00023\",\n                \"00018-of-00023\",\n                \"00019-of-00023\",\n                \"00020-of-00023\",\n                \"00021-of-00023\",\n                \"00022-of-00023\",\n                \"00023-of-00023\"\n              ],\n              \"UD-IQ1_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-IQ1_S\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-IQ2_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-IQ2_XXS\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-IQ3_XXS\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00013\",\n                \"00002-of-00013\",\n                \"00003-of-00013\",\n                \"00004-of-00013\",\n                \"00005-of-00013\",\n                \"00006-of-00013\",\n                \"00007-of-00013\",\n                \"00008-of-00013\",\n                \"00009-of-00013\",\n                \"00010-of-00013\",\n                \"00011-of-00013\",\n                \"00012-of-00013\",\n                \"00013-of-00013\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00016\",\n                \"00002-of-00016\",\n                \"00003-of-00016\",\n                \"00004-of-00016\",\n                \"00005-of-00016\",\n                \"00006-of-00016\",\n                \"00007-of-00016\",\n                \"00008-of-00016\",\n                \"00009-of-00016\",\n                \"00010-of-00016\",\n                \"00011-of-00016\",\n                \"00012-of-00016\",\n                \"00013-of-00016\",\n                \"00014-of-00016\",\n                \"00015-of-00016\",\n                \"00016-of-00016\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00019\",\n                \"00002-of-00019\",\n                \"00003-of-00019\",\n                \"00004-of-00019\",\n                \"00005-of-00019\",\n                \"00006-of-00019\",\n                \"00007-of-00019\",\n                \"00008-of-00019\",\n                \"00009-of-00019\",\n                \"00010-of-00019\",\n                \"00011-of-00019\",\n                \"00012-of-00019\",\n                \"00013-of-00019\",\n                \"00014-of-00019\",\n                \"00015-of-00019\",\n                \"00016-of-00019\",\n                \"00017-of-00019\",\n                \"00018-of-00019\",\n                \"00019-of-00019\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00025\",\n                \"00002-of-00025\",\n                \"00003-of-00025\",\n                \"00004-of-00025\",\n                \"00005-of-00025\",\n                \"00006-of-00025\",\n                \"00007-of-00025\",\n                \"00008-of-00025\",\n                \"00009-of-00025\",\n                \"00010-of-00025\",\n                \"00011-of-00025\",\n                \"00012-of-00025\",\n                \"00013-of-00025\",\n                \"00014-of-00025\",\n                \"00015-of-00025\",\n                \"00016-of-00025\",\n                \"00017-of-00025\",\n                \"00018-of-00025\",\n                \"00019-of-00025\",\n                \"00020-of-00025\",\n                \"00021-of-00025\",\n                \"00022-of-00025\",\n                \"00023-of-00025\",\n                \"00024-of-00025\",\n                \"00025-of-00025\"\n              ],\n              \"UD-TQ1_0\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/Kimi-K2.5-GGUF\",\n            \"model_file_name_template\": \"\",\n            \"model_file_name_split_template\": \"Kimi-K2.5-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"none\"\n            ],\n            \"quantization_parts\": {\n              \"Q8_0\": [\n                \"00001-of-00023\",\n                \"00002-of-00023\",\n                \"00003-of-00023\",\n                \"00004-of-00023\",\n                \"00005-of-00023\",\n                \"00006-of-00023\",\n                \"00007-of-00023\",\n                \"00008-of-00023\",\n                \"00009-of-00023\",\n                \"00010-of-00023\",\n                \"00011-of-00023\",\n                \"00012-of-00023\",\n                \"00013-of-00023\",\n                \"00014-of-00023\",\n                \"00015-of-00023\",\n                \"00016-of-00023\",\n                \"00017-of-00023\",\n                \"00018-of-00023\",\n                \"00019-of-00023\",\n                \"00020-of-00023\",\n                \"00021-of-00023\",\n                \"00022-of-00023\",\n                \"00023-of-00023\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00013\",\n                \"00002-of-00013\",\n                \"00003-of-00013\",\n                \"00004-of-00013\",\n                \"00005-of-00013\",\n                \"00006-of-00013\",\n                \"00007-of-00013\",\n                \"00008-of-00013\",\n                \"00009-of-00013\",\n                \"00010-of-00013\",\n                \"00011-of-00013\",\n                \"00012-of-00013\",\n                \"00013-of-00013\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": \"1058_59\",\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/Kimi-K2.5-{quantization}\",\n            \"quantizations\": [\n              \"3bit\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/Kimi-K2.5-{quantization}\",\n            \"quantizations\": [\n              \"3bit\"\n            ]\n          }\n        }\n      }\n    ],\n    \"architectures\": [\n      \"KimiK25ForConditionalGeneration\"\n    ],\n    \"chat_template\": \"{%- macro render_content(msg) -%}\\n    {%- set c = msg.get('content') -%}\\n    {%- if c is string -%}\\n      {{ c }}\\n    {%- elif c is not none -%}\\n      {% for content in c -%}\\n        {% if content['type'] == 'image' or content['type'] == 'image_url' -%}\\n          <|media_begin|>image<|media_content|><|media_pad|><|media_end|>\\n        {% elif content['type'] == 'video' or content['type']== 'video_url'-%}\\n          <|kimi_k25_video_placeholder|>\\n        {% else -%}\\n          {{ content['text'] }}\\n        {%- endif -%}\\n      {%- endfor -%}\\n    {%- endif -%}\\n{%- endmacro -%}\\n\\n{% macro set_roles(message) -%}\\n  {%- set role_name =  message.get('name') or  message['role'] -%}\\n  {%- if message['role'] == 'user' -%}\\n    <|im_user|>{{role_name}}<|im_middle|>\\n  {%- elif message['role'] == 'assistant' -%}\\n    <|im_assistant|>{{role_name}}<|im_middle|>\\n  {%- else -%}\\n    <|im_system|>{{role_name}}<|im_middle|>\\n  {%- endif -%}\\n{%- endmacro -%}\\n\\n\\n{%- macro render_toolcalls(message) -%}\\n  <|tool_calls_section_begin|>\\n  {%- for tool_call in message['tool_calls'] -%}\\n    {%- set formatted_id = tool_call['id'] -%}\\n    <|tool_call_begin|>{{ formatted_id }}<|tool_call_argument_begin|>{% if tool_call['function']['arguments'] is string %}{{ tool_call['function']['arguments'] }}{% else %}{{ tool_call['function']['arguments'] | tojson }}{% endif %}<|tool_call_end|>\\n  {%- endfor -%}\\n  <|tool_calls_section_end|>\\n{%- endmacro -%}\\n\\n\\n{# Find last non-tool-call assisitant message #}\\n{%- set ns = namespace(last_non_tool_call_assistant_msg=-1) -%}\\n{%- for idx in range(messages|length-1, -1, -1) -%}\\n    {%- if messages[idx]['role'] == 'assistant' and not messages[idx].get('tool_calls') -%}\\n        {%- set ns.last_non_tool_call_assistant_msg = idx -%}\\n        {%- break -%}\\n    {%- endif -%}\\n{%- endfor -%}\\n\\n{# split all messages into history & suffix, reasoning_content in suffix should be reserved.#}\\n{%- set hist_msgs = messages[:ns.last_non_tool_call_assistant_msg+1] -%}\\n{%- set suffix_msgs = messages[ns.last_non_tool_call_assistant_msg+1:] -%}\\n\\n{%- if tools -%}\\n  {%- if tools_ts_str -%}\\n    <|im_system|>tool_declare<|im_middle|>{{ tools_ts_str }}<|im_end|>\\n  {%- else -%}\\n    <|im_system|>tool_declare<|im_middle|>{{ tools | tojson(separators=(',', ':')) }}<|im_end|>\\n  {%- endif -%}\\n{%- endif -%}\\n  \\n{%- for message in hist_msgs -%}\\n  {{set_roles(message)}}\\n  {%- if message['role'] == 'assistant' -%}\\n    <think></think>{{render_content(message)}}\\n    {%- if message.get('tool_calls') -%}\\n      {{render_toolcalls(message)}}\\n    {%- endif -%}\\n  {%- elif message['role'] == 'tool' -%}\\n    {%- set tool_call_id = message.tool_call_id -%}\\n    ## Return of {{ tool_call_id }}\\n{{render_content(message)}}\\n  {%- elif message['content'] is not none -%}\\n    {{render_content(message)}}\\n  {%- endif -%}\\n  <|im_end|>\\n{%- endfor -%}\\n\\n{%- for message in suffix_msgs -%}\\n  {{set_roles(message)}}\\n  {%- if message['role'] == 'assistant' -%}\\n    {%- if thinking is defined and thinking is false -%}\\n    <think></think>{{render_content(message)}}\\n    {%- else -%}\\n    {%- set rc = message.get('reasoning_content', '') -%}\\n    <think>{{rc}}</think>{{render_content(message)}}\\n    {%- endif -%}\\n    {%- if message.get('tool_calls') -%}\\n     {{render_toolcalls(message)}}\\n    {%- endif -%}\\n  {%- elif message['role'] == 'tool' -%}\\n    {%- set tool_call_id = message.tool_call_id -%}\\n    ## Return of {{ tool_call_id }}\\n{{render_content(message)}}\\n  {%- elif message['content'] is not none -%}\\n    {{render_content(message)}}\\n  {%- endif -%}\\n  <|im_end|>\\n{%- endfor -%}\\n\\n\\n{%- if add_generation_prompt -%}\\n  <|im_assistant|>assistant<|im_middle|>\\n  {%- if thinking is defined and thinking is false -%}\\n  <think></think>\\n  {%- else -%}\\n  <think>\\n  {%- endif -%}\\n{%- endif -%}\",\n    \"stop_token_ids\": [\n      163585\n    ],\n    \"stop\": [\n      \"[EOS]\"\n    ],\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"vllm_dependencies ; #engine# == \\\"vllm\\\"\",\n        \"sglang_dependencies ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"featured\": false,\n    \"updated_at\": 1773041680\n  },\n  {\n    \"model_name\": \"MiniMax-M2.5\",\n    \"model_description\": \"MiniMax-M2.5, a Mini model built for Max coding & agentic workflows.\",\n    \"context_length\": 196608,\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"tools\",\n      \"reasoning\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_size_in_billions\": 230,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"MiniMaxAI/MiniMax-M2.5\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"MiniMax/MiniMax-M2.5\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 230,\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/MiniMax-M2.5-GGUF\",\n            \"model_file_name_template\": \"MiniMax-M2.5-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"MiniMax-M2.5-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"MXFP4_MOE\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-IQ1_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ1_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ2_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ2_XXS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ3_XXS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/MiniMax-M2.5-GGUF\",\n            \"model_file_name_template\": \"MiniMax-M2.5-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"MiniMax-M2.5-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"MXFP4_MOE\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-IQ1_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ1_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ2_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ2_XXS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-IQ3_XXS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 230,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/MiniMax-M2.5-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/MiniMax-M2.5-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ]\n          }\n        }\n      }\n    ],\n    \"architectures\": [\n      \"MiniMaxM2ForCausalLM\"\n    ],\n    \"chat_template\": \"{# ----------‑‑‑ special token variables ‑‑‑---------- #}\\n{%- set toolcall_begin_token   = '<minimax:tool_call>'         -%}\\n{%- set toolcall_end_token     = '</minimax:tool_call>'        -%}\\n{#- Tool Rendering Functions ============================================== -#}\\n{%- macro render_tool_namespace(namespace_name, tool_list) -%}\\n{%- for tool in tool_list -%}\\n<tool>{{ tool.function | tojson(ensure_ascii=False) }}</tool>\\n{% endfor -%}\\n{%- endmacro -%}\\n{%- macro visible_text(content) -%}\\n    {%- if content is string -%}\\n        {{ content }}\\n    {%- elif content is iterable and content is not mapping -%}\\n        {%- for item in content -%}\\n            {%- if item is mapping and item.type == 'text' -%}\\n                {{- item.text }}\\n            {%- elif item is string -%}\\n                {{- item }}\\n            {%- endif -%}\\n        {%- endfor -%}\\n    {%- else -%}\\n        {{- content }}\\n    {%- endif -%}\\n{%- endmacro -%}\\n{#- System Message Construction ============================================ -#}\\n{%- macro build_system_message(system_message) -%}\\n    {%- if system_message and system_message.content -%}\\n        {{- visible_text(system_message.content) }}\\n    {%- else -%}\\n        {%- if model_identity is not defined -%}\\n            {%- set model_identity = \\\"You are a helpful assistant. Your name is MiniMax-M2.5 and is built by MiniMax.\\\" -%}\\n        {%- endif -%}\\n        {{- model_identity }}\\n    {%- endif -%}\\n    \\n    {#- Handle current_date -#}\\n    {%- if system_message and system_message.current_date -%}\\n        {{- '\\\\n' ~ 'Current date: ' + system_message.current_date }}\\n    {%- endif -%}\\n    {#- Handle current_location -#}\\n    {%- if system_message and system_message.current_location -%}\\n        {{- '\\\\n' ~ 'Current location: ' + system_message.current_location }}\\n    {%- endif -%}\\n{%- endmacro -%}\\n{#- Main Template Logic ================================================= -#}\\n{#- Extract system message (only first message if it's system) -#}\\n{%- set system_message = none -%}\\n{%- set conversation_messages = messages -%}\\n{%- if messages and messages[0].role == \\\"system\\\" -%}\\n    {%- set system_message = messages[0] -%}\\n    {%- set conversation_messages = messages[1:] -%}\\n{%- endif -%}\\n{#- Get the last user message turn, for interleved thinking -#}\\n{%- set ns = namespace(last_user_index=-1) %}\\n{% for m in conversation_messages %}\\n    {%- if m.role == 'user' %}\\n        {% set ns.last_user_index = loop.index0 -%}\\n    {%- endif %}\\n{%- endfor %}\\n{#- Render system message -#}\\n{{- ']~!b[' ~ ']~b]system' ~ '\\\\n' }}\\n{{- build_system_message(system_message) }}\\n{#- Render tools if available -#}\\n{%- if tools -%}\\n    {{- '\\\\n\\\\n' ~ '# Tools' ~ '\\\\n' ~ 'You may call one or more tools to assist with the user query.\\\\nHere are the tools available in JSONSchema format:' ~ '\\\\n' }}\\n    {{- '\\\\n' ~ '<tools>' ~ '\\\\n' }}\\n    {{- render_tool_namespace(\\\"functions\\\", tools) }}\\n    {{- '</tools>' ~ '\\\\n\\\\n' }}\\n{{- 'When making tool calls, use XML format to invoke tools and pass parameters:' ~ '\\\\n' }}\\n{{- '\\\\n' ~ toolcall_begin_token }}\\n<invoke name=\\\"tool-name-1\\\">\\n<parameter name=\\\"param-key-1\\\">param-value-1</parameter>\\n<parameter name=\\\"param-key-2\\\">param-value-2</parameter>\\n...\\n</invoke>\\n{{- '\\\\n' ~ toolcall_end_token }}\\n{%- endif -%}\\n{{- '[e~[\\\\n' }}\\n\\n{#- Render messages -#}\\n{%- set last_tool_call = namespace(name=none) -%}\\n{%- for message in conversation_messages -%}\\n    {%- if message.role == 'assistant' -%}\\n        {#- Only render reasoning_content if no user message follows -#}\\n        {{- ']~b]ai' ~ '\\\\n' }}\\n\\n        {%- set reasoning_content = '' %}\\n        {%- set content = visible_text(message.content) %}\\n        {%- if message.reasoning_content is string %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in content %}\\n                {%- set reasoning_content = content.split('</think>')[0].strip('\\\\n').split('<think>')[-1].strip('\\\\n') %}\\n                {%- set content = content.split('</think>')[-1].strip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- if reasoning_content and loop.index0 > ns.last_user_index -%}\\n            {{- '<think>' ~ '\\\\n' ~ reasoning_content ~ '\\\\n' ~ '</think>' ~ '\\\\n\\\\n' }}\\n        {%- endif -%}\\n        {%- if content -%}\\n            {{- content }}\\n        {%- endif -%}\\n        {%- if message.tool_calls -%}\\n            {{- '\\\\n' ~ toolcall_begin_token ~ '\\\\n' }}\\n\\n            {%- for tool_call in message.tool_calls -%}\\n                {%- if tool_call.function %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {{- '<invoke name=\\\"' + tool_call.name + '\\\">' }}\\n                {% set _args = tool_call.arguments %}\\n                {%- for k, v in _args.items() %}\\n                {{- '<parameter name=\\\"' + k + '\\\">' }}\\n                {{- v | tojson(ensure_ascii=False) if v is not string else v }}\\n                {{- '</parameter>' }}\\n                {% endfor %}\\n                {{- '</invoke>' ~ '\\\\n' }}\\n            {%- endfor -%}\\n            \\n            {{- toolcall_end_token}}\\n            {%- set last_tool_call.name = message.tool_calls[-1].name -%}\\n        {%- else -%}\\n            {%- set last_tool_call.name = none -%}\\n        {%- endif -%}\\n        {{- '[e~[' ~ '\\\\n' }}\\n        \\n    {%- elif message.role == 'tool' -%}\\n    {%- if last_tool_call.name is none -%}\\n        {{- raise_exception(\\\"Message has tool role, but there was no previous assistant message with a tool call!\\\") }}\\n    {%- endif -%}\\n    {%- if loop.first or (conversation_messages[loop.index0 - 1].role != 'tool') -%}\\n        {{- ']~b]tool' }}\\n    {%- endif -%}\\n    {%- if message.content is string -%}\\n        {{- '\\\\n<response>' }}\\n        {{- message.content }}\\n        {{- '</response>' }}\\n    {%- else -%}\\n        {%- for tr in message.content -%}\\n            {{- '\\\\n<response>' }}\\n            {{- tr.output if tr.output is defined else (tr.text if tr.type == 'text' and tr.text is defined else tr) }}\\n            {{- '\\\\n</response>' }}\\n        {%- endfor -%}\\n    {%- endif -%}\\n    {%- if loop.last or (conversation_messages[loop.index0 + 1].role != 'tool') -%}\\n        {{- '[e~[\\\\n' -}}\\n    {%- endif -%}\\n        \\n    {%- elif message.role == 'user' -%}\\n        {{- ']~b]user' ~ '\\\\n' }}\\n        {{- visible_text(message.content) }}\\n        {{- '[e~[' ~ '\\\\n' }}\\n    {%- endif -%}\\n{%- endfor -%}\\n\\n{#- Generation prompt -#}\\n{%- if add_generation_prompt -%}\\n{{- ']~b]ai' ~ '\\\\n' ~ '<think>' ~ '\\\\n' }}\\n{%- endif -%}\",\n    \"stop_token_ids\": [\n      200020\n    ],\n    \"stop\": [\n      \"[e~[\"\n    ],\n    \"tool_parser\": \"minimax\",\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"featured\": false,\n    \"updated_at\": 1772703453\n  },\n  {\n    \"model_name\": \"glm-5\",\n    \"model_description\": \"We are launching GLM-5, targeting complex systems engineering and long-horizon agentic tasks. Scaling is still one of the most important ways to improve the intelligence efficiency of Artificial General Intelligence (AGI). Compared to GLM-4.5, GLM-5 scales from 355B parameters (32B active) to 744B parameters (40B active), and increases pre-training data from 23T to 28.5T tokens. GLM-5 also integrates DeepSeek Sparse Attention (DSA), largely reducing deployment cost while preserving long-context capacity.  Reinforcement learning aims to bridge the gap between competence and excellence in pre-trained models. However, deploying it at scale for LLMs is a challenge due to the RL training inefficiency. To this end, we developed slime, a novel asynchronous RL infrastructure that substantially improves training throughput and efficiency, enabling more fine-grained post-training iterations. With advances in both pre-training and post-training, GLM-5 delivers significant improvement compared to GLM-4.7 across a wide range of academic benchmarks and achieves best-in-class performance among all open-source models in the world on reasoning, coding, and agentic tasks, closing the gap with frontier models.\",\n    \"context_length\": 202752,\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\",\n      \"tools\",\n      \"reasoning\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_size_in_billions\": 744,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"zai-org/GLM-5\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"ZhipuAI/GLM-5\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 744,\n        \"model_format\": \"fp8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"zai-org/GLM-5-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"ZhipuAI/GLM-5-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 744,\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/GLM-5-GGUF\",\n            \"model_file_name_template\": \"GLM-5-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"GLM-5-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00033\",\n                \"00002-of-00033\",\n                \"00003-of-00033\",\n                \"00004-of-00033\",\n                \"00005-of-00033\",\n                \"00006-of-00033\",\n                \"00007-of-00033\",\n                \"00008-of-00033\",\n                \"00009-of-00033\",\n                \"00010-of-00033\",\n                \"00011-of-00033\",\n                \"00012-of-00033\",\n                \"00013-of-00033\",\n                \"00014-of-00033\",\n                \"00015-of-00033\",\n                \"00016-of-00033\",\n                \"00017-of-00033\",\n                \"00018-of-00033\",\n                \"00019-of-00033\",\n                \"00020-of-00033\",\n                \"00021-of-00033\",\n                \"00022-of-00033\",\n                \"00023-of-00033\",\n                \"00024-of-00033\",\n                \"00025-of-00033\",\n                \"00026-of-00033\",\n                \"00027-of-00033\",\n                \"00028-of-00033\",\n                \"00029-of-00033\",\n                \"00030-of-00033\",\n                \"00031-of-00033\",\n                \"00032-of-00033\",\n                \"00033-of-00033\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"MXFP4_MOE\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00014\",\n                \"00002-of-00014\",\n                \"00003-of-00014\",\n                \"00004-of-00014\",\n                \"00005-of-00014\",\n                \"00006-of-00014\",\n                \"00007-of-00014\",\n                \"00008-of-00014\",\n                \"00009-of-00014\",\n                \"00010-of-00014\",\n                \"00011-of-00014\",\n                \"00012-of-00014\",\n                \"00013-of-00014\",\n                \"00014-of-00014\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00018\",\n                \"00002-of-00018\",\n                \"00003-of-00018\",\n                \"00004-of-00018\",\n                \"00005-of-00018\",\n                \"00006-of-00018\",\n                \"00007-of-00018\",\n                \"00008-of-00018\",\n                \"00009-of-00018\",\n                \"00010-of-00018\",\n                \"00011-of-00018\",\n                \"00012-of-00018\",\n                \"00013-of-00018\",\n                \"00014-of-00018\",\n                \"00015-of-00018\",\n                \"00016-of-00018\",\n                \"00017-of-00018\",\n                \"00018-of-00018\"\n              ],\n              \"UD-IQ1_M\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-IQ1_S\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-IQ2_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-IQ2_XXS\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-IQ3_XXS\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00015\",\n                \"00002-of-00015\",\n                \"00003-of-00015\",\n                \"00004-of-00015\",\n                \"00005-of-00015\",\n                \"00006-of-00015\",\n                \"00007-of-00015\",\n                \"00008-of-00015\",\n                \"00009-of-00015\",\n                \"00010-of-00015\",\n                \"00011-of-00015\",\n                \"00012-of-00015\",\n                \"00013-of-00015\",\n                \"00014-of-00015\",\n                \"00015-of-00015\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00019\",\n                \"00002-of-00019\",\n                \"00003-of-00019\",\n                \"00004-of-00019\",\n                \"00005-of-00019\",\n                \"00006-of-00019\",\n                \"00007-of-00019\",\n                \"00008-of-00019\",\n                \"00009-of-00019\",\n                \"00010-of-00019\",\n                \"00011-of-00019\",\n                \"00012-of-00019\",\n                \"00013-of-00019\",\n                \"00014-of-00019\",\n                \"00015-of-00019\",\n                \"00016-of-00019\",\n                \"00017-of-00019\",\n                \"00018-of-00019\",\n                \"00019-of-00019\"\n              ]\n            }\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/GLM-5-GGUF\",\n            \"model_file_name_template\": \"GLM-5-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"GLM-5-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00033\",\n                \"00002-of-00033\",\n                \"00003-of-00033\",\n                \"00004-of-00033\",\n                \"00005-of-00033\",\n                \"00006-of-00033\",\n                \"00007-of-00033\",\n                \"00008-of-00033\",\n                \"00009-of-00033\",\n                \"00010-of-00033\",\n                \"00011-of-00033\",\n                \"00012-of-00033\",\n                \"00013-of-00033\",\n                \"00014-of-00033\",\n                \"00015-of-00033\",\n                \"00016-of-00033\",\n                \"00017-of-00033\",\n                \"00018-of-00033\",\n                \"00019-of-00033\",\n                \"00020-of-00033\",\n                \"00021-of-00033\",\n                \"00022-of-00033\",\n                \"00023-of-00033\",\n                \"00024-of-00033\",\n                \"00025-of-00033\",\n                \"00026-of-00033\",\n                \"00027-of-00033\",\n                \"00028-of-00033\",\n                \"00029-of-00033\",\n                \"00030-of-00033\",\n                \"00031-of-00033\",\n                \"00032-of-00033\",\n                \"00033-of-00033\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"MXFP4_MOE\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00009\",\n                \"00002-of-00009\",\n                \"00003-of-00009\",\n                \"00004-of-00009\",\n                \"00005-of-00009\",\n                \"00006-of-00009\",\n                \"00007-of-00009\",\n                \"00008-of-00009\",\n                \"00009-of-00009\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00014\",\n                \"00002-of-00014\",\n                \"00003-of-00014\",\n                \"00004-of-00014\",\n                \"00005-of-00014\",\n                \"00006-of-00014\",\n                \"00007-of-00014\",\n                \"00008-of-00014\",\n                \"00009-of-00014\",\n                \"00010-of-00014\",\n                \"00011-of-00014\",\n                \"00012-of-00014\",\n                \"00013-of-00014\",\n                \"00014-of-00014\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00018\",\n                \"00002-of-00018\",\n                \"00003-of-00018\",\n                \"00004-of-00018\",\n                \"00005-of-00018\",\n                \"00006-of-00018\",\n                \"00007-of-00018\",\n                \"00008-of-00018\",\n                \"00009-of-00018\",\n                \"00010-of-00018\",\n                \"00011-of-00018\",\n                \"00012-of-00018\",\n                \"00013-of-00018\",\n                \"00014-of-00018\",\n                \"00015-of-00018\",\n                \"00016-of-00018\",\n                \"00017-of-00018\",\n                \"00018-of-00018\"\n              ],\n              \"UD-IQ1_M\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-IQ1_S\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-IQ2_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-IQ2_XXS\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-IQ3_XXS\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00012\",\n                \"00002-of-00012\",\n                \"00003-of-00012\",\n                \"00004-of-00012\",\n                \"00005-of-00012\",\n                \"00006-of-00012\",\n                \"00007-of-00012\",\n                \"00008-of-00012\",\n                \"00009-of-00012\",\n                \"00010-of-00012\",\n                \"00011-of-00012\",\n                \"00012-of-00012\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00015\",\n                \"00002-of-00015\",\n                \"00003-of-00015\",\n                \"00004-of-00015\",\n                \"00005-of-00015\",\n                \"00006-of-00015\",\n                \"00007-of-00015\",\n                \"00008-of-00015\",\n                \"00009-of-00015\",\n                \"00010-of-00015\",\n                \"00011-of-00015\",\n                \"00012-of-00015\",\n                \"00013-of-00015\",\n                \"00014-of-00015\",\n                \"00015-of-00015\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00019\",\n                \"00002-of-00019\",\n                \"00003-of-00019\",\n                \"00004-of-00019\",\n                \"00005-of-00019\",\n                \"00006-of-00019\",\n                \"00007-of-00019\",\n                \"00008-of-00019\",\n                \"00009-of-00019\",\n                \"00010-of-00019\",\n                \"00011-of-00019\",\n                \"00012-of-00019\",\n                \"00013-of-00019\",\n                \"00014-of-00019\",\n                \"00015-of-00019\",\n                \"00016-of-00019\",\n                \"00017-of-00019\",\n                \"00018-of-00019\",\n                \"00019-of-00019\"\n              ]\n            }\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 744,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/GLM-5-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit-MXFP8\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/GLM-5-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"8bit-MXFP8\"\n            ]\n          }\n        }\n      }\n    ],\n    \"architectures\": [\n      \"GlmMoeDsaForCausalLM\"\n    ],\n    \"chat_template\": \"[gMASK]<sop>\\n{%- if tools -%}\\n<|system|>\\n# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\\n{% for tool in tools %}\\n{{ tool | tojson(ensure_ascii=False) }}\\n{% endfor %}\\n</tools>\\n\\nFor each function call, output the function name and arguments within the following XML format:\\n<tool_call>{function-name}<arg_key>{arg-key-1}</arg_key><arg_value>{arg-value-1}</arg_value><arg_key>{arg-key-2}</arg_key><arg_value>{arg-value-2}</arg_value>...</tool_call>{%- endif -%}\\n{%- macro visible_text(content) -%}\\n    {%- if content is string -%}\\n        {{- content }}\\n    {%- elif content is iterable and content is not mapping -%}\\n        {%- for item in content -%}\\n            {%- if item is mapping and item.type == 'text' -%}\\n                {{- item.text }}\\n            {%- elif item is string -%}\\n                {{- item }}\\n            {%- endif -%}\\n        {%- endfor -%}\\n    {%- else -%}\\n        {{- content }}\\n    {%- endif -%}\\n{%- endmacro -%}\\n{%- set ns = namespace(last_user_index=-1) %}\\n{%- for m in messages %}\\n    {%- if m.role == 'user' %}\\n        {% set ns.last_user_index = loop.index0 -%}\\n    {%- endif %}\\n{%- endfor %}\\n{% for m in messages %}\\n{%- if m.role == 'user' -%}<|user|>{{ visible_text(m.content) }}\\n{%- elif m.role == 'assistant' -%}\\n<|assistant|>\\n{%- set reasoning_content = '' %}\\n{%- set content = visible_text(m.content) %}\\n{%- if m.reasoning_content is string %}\\n    {%- set reasoning_content = m.reasoning_content %}\\n{%- else %}\\n    {%- if '</think>' in content %}\\n        {%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n        {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n    {%- endif %}\\n{%- endif %}\\n{%- if ((clear_thinking is defined and not clear_thinking) or loop.index0 > ns.last_user_index) and reasoning_content -%}\\n{{ '<think>' + reasoning_content.strip() +  '</think>'}}\\n{%- else -%}\\n{{ '</think>' }}\\n{%- endif -%}\\n{%- if content.strip() -%}\\n{{ content.strip() }}\\n{%- endif -%}\\n{% if m.tool_calls %}\\n{% for tc in m.tool_calls %}\\n{%- if tc.function %}\\n    {%- set tc = tc.function %}\\n{%- endif %}\\n{{- '<tool_call>' + tc.name -}}\\n{% set _args = tc.arguments %}{% for k, v in _args.items() %}<arg_key>{{ k }}</arg_key><arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>{% endfor %}</tool_call>{% endfor %}\\n{% endif %}\\n{%- elif m.role == 'tool' -%}\\n{%- if m.content is string -%}\\n{%- if loop.first or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n    {{- '<|observation|>' }}\\n{%- endif %}\\n{{- '<tool_response>' }}\\n{{- m.content }}\\n{{- '</tool_response>' }}\\n{%- else -%}\\n<|observation|>{% for tr in m.content %}\\n<tool_response>{{ tr.output if tr.output is defined else tr }}</tool_response>{% endfor -%}\\n{% endif -%}\\n{%- elif m.role == 'system' -%}\\n<|system|>{{ visible_text(m.content) }}\\n{%- endif -%}\\n{%- endfor -%}\\n{%- if add_generation_prompt -%}\\n    <|assistant|>{{- '</think>' if (enable_thinking is defined and not enable_thinking) else '<think>' -}}\\n{%- endif -%}\",\n    \"stop_token_ids\": [\n      154820,\n      154827,\n      154829\n    ],\n    \"stop\": [\n      \"<|endoftext|>\"\n    ],\n    \"tool_parser\": \"glm4\",\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#transformers_dependencies# ; #engine# == \\\"Transformers\\\"\",\n        \"#mlx_dependencies# ; #engine# == \\\"MLX\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#sglang_dependencies# ; #engine# == \\\"sglang\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"featured\": false,\n    \"updated_at\": 1772702529\n  },\n  {\n    \"model_name\": \"qwen3.5\",\n    \"model_description\": \"Over recent months, we have intensified our focus on developing foundation models that deliver exceptional utility and performance. Qwen3.5 represents a significant leap forward, integrating breakthroughs in multimodal learning, architectural efficiency, reinforcement learning scale, and global accessibility to empower developers and enterprises with unprecedented capability and efficiency\",\n    \"context_length\": 262144,\n    \"model_lang\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"model_ability\": [\n      \"chat\",\n      \"vision\",\n      \"tools\",\n      \"reasoning\"\n    ],\n    \"model_specs\": [\n      {\n        \"model_size_in_billions\": 397,\n        \"activated_size_in_billions\": 17,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-397B-A17B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-397B-A17B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 397,\n        \"activated_size_in_billions\": 17,\n        \"model_format\": \"fp8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-397B-A17B-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-397B-A17B-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 397,\n        \"activated_size_in_billions\": 17,\n        \"model_format\": \"gptq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-397B-A17B-GPTQ-Int4\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-397B-A17B-GPTQ-Int4\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 397,\n        \"activated_size_in_billions\": 17,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/Qwen3.5-397B-A17B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/Qwen3.5-397B-A17B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 397,\n        \"activated_size_in_billions\": 17,\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/Qwen3.5-397B-A17B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-397B-A17B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Qwen3.5-397B-A17B-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00017\",\n                \"00002-of-00017\",\n                \"00003-of-00017\",\n                \"00004-of-00017\",\n                \"00005-of-00017\",\n                \"00006-of-00017\",\n                \"00007-of-00017\",\n                \"00008-of-00017\",\n                \"00009-of-00017\",\n                \"00010-of-00017\",\n                \"00011-of-00017\",\n                \"00012-of-00017\",\n                \"00013-of-00017\",\n                \"00014-of-00017\",\n                \"00015-of-00017\",\n                \"00016-of-00017\",\n                \"00017-of-00017\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"MXFP4_MOE\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"UD-IQ1_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ1_S\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ2_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ2_XXS\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ3_XXS\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ]\n            },\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/Qwen3.5-397B-A17B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-397B-A17B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Qwen3.5-397B-A17B-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"UD-TQ1_0\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00017\",\n                \"00002-of-00017\",\n                \"00003-of-00017\",\n                \"00004-of-00017\",\n                \"00005-of-00017\",\n                \"00006-of-00017\",\n                \"00007-of-00017\",\n                \"00008-of-00017\",\n                \"00009-of-00017\",\n                \"00010-of-00017\",\n                \"00011-of-00017\",\n                \"00012-of-00017\",\n                \"00013-of-00017\",\n                \"00014-of-00017\",\n                \"00015-of-00017\",\n                \"00016-of-00017\",\n                \"00017-of-00017\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"MXFP4_MOE\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q2_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q2_K_L\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"Q4_0\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q4_1\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00010\",\n                \"00002-of-00010\",\n                \"00003-of-00010\",\n                \"00004-of-00010\",\n                \"00005-of-00010\",\n                \"00006-of-00010\",\n                \"00007-of-00010\",\n                \"00008-of-00010\",\n                \"00009-of-00010\",\n                \"00010-of-00010\"\n              ],\n              \"UD-IQ1_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ1_S\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ2_M\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ2_XXS\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ3_XXS\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q2_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00006\",\n                \"00002-of-00006\",\n                \"00003-of-00006\",\n                \"00004-of-00006\",\n                \"00005-of-00006\",\n                \"00006-of-00006\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00007\",\n                \"00002-of-00007\",\n                \"00003-of-00007\",\n                \"00004-of-00007\",\n                \"00005-of-00007\",\n                \"00006-of-00007\",\n                \"00007-of-00007\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00008\",\n                \"00002-of-00008\",\n                \"00003-of-00008\",\n                \"00004-of-00008\",\n                \"00005-of-00008\",\n                \"00006-of-00008\",\n                \"00007-of-00008\",\n                \"00008-of-00008\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00011\",\n                \"00002-of-00011\",\n                \"00003-of-00011\",\n                \"00004-of-00011\",\n                \"00005-of-00011\",\n                \"00006-of-00011\",\n                \"00007-of-00011\",\n                \"00008-of-00011\",\n                \"00009-of-00011\",\n                \"00010-of-00011\",\n                \"00011-of-00011\"\n              ]\n            },\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 397,\n        \"activated_size_in_billions\": 17,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/Qwen3.5-397B-A17B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/Qwen3.5-397B-A17B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 122,\n        \"activated_size_in_billions\": 10,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-122B-A10B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-122B-A10B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 122,\n        \"activated_size_in_billions\": 10,\n        \"model_format\": \"fp8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-122B-A10B-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-122B-A10B-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 122,\n        \"activated_size_in_billions\": 10,\n        \"model_format\": \"gptq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-122B-A10B-GPTQ-Int4\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-122B-A10B-GPTQ-Int4\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 122,\n        \"activated_size_in_billions\": 10,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/Qwen3.5-122B-A10B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/Qwen3.5-122B-A10B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 122,\n        \"activated_size_in_billions\": 10,\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/Qwen3.5-122B-A10B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-122B-A10B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Qwen3.5-122B-A10B-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_S\",\n              \"UD-IQ3_XXS\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"MXFP4_MOE\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-IQ4_NL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ]\n            },\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/Qwen3.5-122B-A10B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-122B-A10B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Qwen3.5-122B-A10B-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"UD-IQ1_M\",\n              \"UD-IQ1_S\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00005\",\n                \"00002-of-00005\",\n                \"00003-of-00005\",\n                \"00004-of-00005\",\n                \"00005-of-00005\"\n              ],\n              \"IQ4_NL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"IQ4_XS\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"MXFP4_MOE\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q3_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q4_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_M\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q5_K_S\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"Q6_K\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"Q8_0\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q3_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q4_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q5_K_XL\": [\n                \"00001-of-00003\",\n                \"00002-of-00003\",\n                \"00003-of-00003\"\n              ],\n              \"UD-Q6_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ],\n              \"UD-Q8_K_XL\": [\n                \"00001-of-00004\",\n                \"00002-of-00004\",\n                \"00003-of-00004\",\n                \"00004-of-00004\"\n              ]\n            },\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 122,\n        \"activated_size_in_billions\": 10,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/Qwen3.5-122B-A10B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/Qwen3.5-122B-A10B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 35,\n        \"activated_size_in_billions\": 3,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-35B-A3B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-35B-A3B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 35,\n        \"activated_size_in_billions\": 3,\n        \"model_format\": \"fp8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-35B-A3B-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-35B-A3B-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 35,\n        \"activated_size_in_billions\": 3,\n        \"model_format\": \"gptq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-35B-A3B-GPTQ-Int4\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-35B-A3B-GPTQ-Int4\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 35,\n        \"activated_size_in_billions\": 3,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/Qwen3.5-35B-A3B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/Qwen3.5-35B-A3B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 35,\n        \"activated_size_in_billions\": 3,\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/Qwen3.5-35B-A3B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-35B-A3B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Qwen3.5-35B-A3B-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"MXFP4_MOE\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_S\",\n              \"UD-IQ3_XXS\",\n              \"UD-IQ4_NL\",\n              \"UD-IQ4_XS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_L\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_S\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/Qwen3.5-35B-A3B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-35B-A3B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Qwen3.5-35B-A3B-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"MXFP4_MOE\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ1_M\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_S\",\n              \"UD-IQ3_XXS\",\n              \"UD-IQ4_NL\",\n              \"UD-IQ4_XS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_L\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_S\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 35,\n        \"activated_size_in_billions\": 3,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/Qwen3.5-35B-A3B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/Qwen3.5-35B-A3B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 27,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-27B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-27B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 27,\n        \"model_format\": \"fp8\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-27B-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-27B-FP8\",\n            \"quantizations\": [\n              \"FP8\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 27,\n        \"model_format\": \"gptq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-27B-GPTQ-Int4\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-27b-GPTQ-Int4\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 27,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/Qwen3.5-27B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/Qwen3.5-27B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 27,\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/Qwen3.5-27B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-27B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Qwen3.5-27B-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/Qwen3.5-27B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-27B-{quantization}.gguf\",\n            \"model_file_name_split_template\": \"Qwen3.5-27B-{quantization}-{part}.gguf\",\n            \"quantizations\": [\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"quantization_parts\": {\n              \"BF16\": [\n                \"00001-of-00002\",\n                \"00002-of-00002\"\n              ]\n            },\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 27,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/Qwen3.5-27B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\",\n              \"mxfp8\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/Qwen3.5-27B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\",\n              \"mxfp8\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 9,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-9B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-9B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 9,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/Qwen3.5-9B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/Qwen3.5-9B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 9,\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/Qwen3.5-9B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-9B-{quantization}.gguf\",\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/Qwen3.5-9B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-9B-{quantization}.gguf\",\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 9,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/Qwen3.5-9B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/Qwen3.5-9B-{quantization}\",\n            \"quantizations\": [\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 4,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-4B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-4B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 4,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/Qwen3.5-4B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/Qwen3.5-4B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 4,\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/Qwen3.5-4B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-4B-{quantization}.gguf\",\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/Qwen3.5-4B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-4B-{quantization}.gguf\",\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 4,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/Qwen3.5-4B-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/Qwen3.5-4B-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"6bit\",\n              \"8bit\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 2,\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-2B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-2B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 2,\n        \"model_format\": \"awq\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantTrio/Qwen3.5-2B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"tclf90/Qwen3.5-2B-AWQ\",\n            \"quantizations\": [\n              \"Int4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 2,\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/Qwen3.5-2B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-2B-{quantization}.gguf\",\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/Qwen3.5-2B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-2B-{quantization}.gguf\",\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": 2,\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/Qwen3.5-2B-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\",\n              \"mxfp4\",\n              \"mxfp8\",\n              \"nvfp4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/Qwen3.5-2B-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\",\n              \"mxfp4\",\n              \"mxfp8\",\n              \"nvfp4\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": \"0_8\",\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3.5-0.8B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3.5-0.8B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": \"0_8\",\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"unsloth/Qwen3.5-0.8B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-0.8B-{quantization}.gguf\",\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"unsloth/Qwen3.5-0.8B-GGUF\",\n            \"model_file_name_template\": \"Qwen3.5-0.8B-{quantization}.gguf\",\n            \"quantizations\": [\n              \"BF16\",\n              \"IQ4_NL\",\n              \"IQ4_XS\",\n              \"Q3_K_M\",\n              \"Q3_K_S\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_M\",\n              \"Q4_K_S\",\n              \"Q5_K_M\",\n              \"Q5_K_S\",\n              \"Q6_K\",\n              \"Q8_0\",\n              \"UD-IQ2_M\",\n              \"UD-IQ2_XXS\",\n              \"UD-IQ3_XXS\",\n              \"UD-Q2_K_XL\",\n              \"UD-Q3_K_XL\",\n              \"UD-Q4_K_XL\",\n              \"UD-Q5_K_XL\",\n              \"UD-Q6_K_XL\",\n              \"UD-Q8_K_XL\"\n            ],\n            \"multimodal_projectors\": [\n              \"mmproj-BF16.gguf\",\n              \"mmproj-F16.gguf\",\n              \"mmproj-F32.gguf\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_size_in_billions\": \"0_8\",\n        \"model_format\": \"mlx\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"mlx-community/Qwen3.5-0.8B-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\",\n              \"mxfp4\",\n              \"mxfp8\",\n              \"nvfp4\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mlx-community/Qwen3.5-0.8B-{quantization}\",\n            \"quantizations\": [\n              \"3bit\",\n              \"4bit\",\n              \"5bit\",\n              \"6bit\",\n              \"8bit\",\n              \"bf16\",\n              \"mxfp4\",\n              \"mxfp8\",\n              \"nvfp4\"\n            ]\n          }\n        }\n      }\n    ],\n    \"version\": 2,\n    \"virtualenv\": {\n      \"packages\": [\n        \"sglang_dependencies ; #engine# == \\\"sglang\\\"\",\n        \"transformers>=5.2.0 ; #engine# == \\\"Transformers\\\"\",\n        \"qwen_omni_utils ; #engine# == \\\"vllm\\\"\",\n        \"vllm>=0.17.0 ; #engine# == \\\"vllm\\\"\"\n      ]\n    },\n    \"architectures\": [\n      \"Qwen3_5MoeForConditionalGeneration\"\n    ],\n    \"chat_template\": \"{%- set image_count = namespace(value=0) %}\\n{%- set video_count = namespace(value=0) %}\\n{%- macro render_content(content, do_vision_count, is_system_content=false) %}\\n    {%- if content is string %}\\n        {{- content }}\\n    {%- elif content is iterable and content is not mapping %}\\n        {%- for item in content %}\\n            {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}\\n                {%- if is_system_content %}\\n                    {{- raise_exception('System message cannot contain images.') }}\\n                {%- endif %}\\n                {%- if do_vision_count %}\\n                    {%- set image_count.value = image_count.value + 1 %}\\n                {%- endif %}\\n                {%- if add_vision_id %}\\n                    {{- 'Picture ' ~ image_count.value ~ ': ' }}\\n                {%- endif %}\\n                {{- '<|vision_start|><|image_pad|><|vision_end|>' }}\\n            {%- elif 'video' in item or item.type == 'video' %}\\n                {%- if is_system_content %}\\n                    {{- raise_exception('System message cannot contain videos.') }}\\n                {%- endif %}\\n                {%- if do_vision_count %}\\n                    {%- set video_count.value = video_count.value + 1 %}\\n                {%- endif %}\\n                {%- if add_vision_id %}\\n                    {{- 'Video ' ~ video_count.value ~ ': ' }}\\n                {%- endif %}\\n                {{- '<|vision_start|><|video_pad|><|vision_end|>' }}\\n            {%- elif 'text' in item %}\\n                {{- item.text }}\\n            {%- else %}\\n                {{- raise_exception('Unexpected item type in content.') }}\\n            {%- endif %}\\n        {%- endfor %}\\n    {%- elif content is none or content is undefined %}\\n        {{- '' }}\\n    {%- else %}\\n        {{- raise_exception('Unexpected content type.') }}\\n    {%- endif %}\\n{%- endmacro %}\\n{%- if not messages %}\\n    {{- raise_exception('No messages provided.') }}\\n{%- endif %}\\n{%- if tools and tools is iterable and tools is not mapping %}\\n    {{- '<|im_start|>system\\\\n' }}\\n    {{- \\\"# Tools\\\\n\\\\nYou have access to the following functions:\\\\n\\\\n<tools>\\\" }}\\n    {%- for tool in tools %}\\n        {{- \\\"\\\\n\\\" }}\\n        {{- tool | tojson }}\\n    {%- endfor %}\\n    {{- \\\"\\\\n</tools>\\\" }}\\n    {{- '\\\\n\\\\nIf you choose to call a function ONLY reply in the following format with NO suffix:\\\\n\\\\n<tool_call>\\\\n<function=example_function_name>\\\\n<parameter=example_parameter_1>\\\\nvalue_1\\\\n</parameter>\\\\n<parameter=example_parameter_2>\\\\nThis is the value for the second parameter\\\\nthat can span\\\\nmultiple lines\\\\n</parameter>\\\\n</function>\\\\n</tool_call>\\\\n\\\\n<IMPORTANT>\\\\nReminder:\\\\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\\\\n- Required parameters MUST be specified\\\\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\\\\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\\\\n</IMPORTANT>' }}\\n    {%- if messages[0].role == 'system' %}\\n        {%- set content = render_content(messages[0].content, false, true)|trim %}\\n        {%- if content %}\\n            {{- '\\\\n\\\\n' + content }}\\n        {%- endif %}\\n    {%- endif %}\\n    {{- '<|im_end|>\\\\n' }}\\n{%- else %}\\n    {%- if messages[0].role == 'system' %}\\n        {%- set content = render_content(messages[0].content, false, true)|trim %}\\n        {{- '<|im_start|>system\\\\n' + content + '<|im_end|>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\\n{%- for message in messages[::-1] %}\\n    {%- set index = (messages|length - 1) - loop.index0 %}\\n    {%- if ns.multi_step_tool and message.role == \\\"user\\\" %}\\n        {%- set content = render_content(message.content, false)|trim %}\\n        {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}\\n            {%- set ns.multi_step_tool = false %}\\n            {%- set ns.last_query_index = index %}\\n        {%- endif %}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if ns.multi_step_tool %}\\n    {{- raise_exception('No user query found in messages.') }}\\n{%- endif %}\\n{%- for message in messages %}\\n    {%- set content = render_content(message.content, true)|trim %}\\n    {%- if message.role == \\\"system\\\" %}\\n        {%- if not loop.first %}\\n            {{- raise_exception('System message must be at the beginning.') }}\\n        {%- endif %}\\n    {%- elif message.role == \\\"user\\\" %}\\n        {{- '<|im_start|>' + message.role + '\\\\n' + content + '<|im_end|>' + '\\\\n' }}\\n    {%- elif message.role == \\\"assistant\\\" %}\\n        {%- set reasoning_content = '' %}\\n        {%- if message.reasoning_content is string %}\\n            {%- set reasoning_content = message.reasoning_content %}\\n        {%- else %}\\n            {%- if '</think>' in content %}\\n                {%- set reasoning_content = content.split('</think>')[0].rstrip('\\\\n').split('<think>')[-1].lstrip('\\\\n') %}\\n                {%- set content = content.split('</think>')[-1].lstrip('\\\\n') %}\\n            {%- endif %}\\n        {%- endif %}\\n        {%- set reasoning_content = reasoning_content|trim %}\\n        {%- if loop.index0 > ns.last_query_index %}\\n            {{- '<|im_start|>' + message.role + '\\\\n<think>\\\\n' + reasoning_content + '\\\\n</think>\\\\n\\\\n' + content }}\\n        {%- else %}\\n            {{- '<|im_start|>' + message.role + '\\\\n' + content }}\\n        {%- endif %}\\n        {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}\\n            {%- for tool_call in message.tool_calls %}\\n                {%- if tool_call.function is defined %}\\n                    {%- set tool_call = tool_call.function %}\\n                {%- endif %}\\n                {%- if loop.first %}\\n                    {%- if content|trim %}\\n                        {{- '\\\\n\\\\n<tool_call>\\\\n<function=' + tool_call.name + '>\\\\n' }}\\n                    {%- else %}\\n                        {{- '<tool_call>\\\\n<function=' + tool_call.name + '>\\\\n' }}\\n                    {%- endif %}\\n                {%- else %}\\n                    {{- '\\\\n<tool_call>\\\\n<function=' + tool_call.name + '>\\\\n' }}\\n                {%- endif %}\\n                {%- if tool_call.arguments is defined %}\\n                    {%- for args_name, args_value in tool_call.arguments|items %}\\n                        {{- '<parameter=' + args_name + '>\\\\n' }}\\n                        {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}\\n                        {{- args_value }}\\n                        {{- '\\\\n</parameter>\\\\n' }}\\n                    {%- endfor %}\\n                {%- endif %}\\n                {{- '</function>\\\\n</tool_call>' }}\\n            {%- endfor %}\\n        {%- endif %}\\n        {{- '<|im_end|>\\\\n' }}\\n    {%- elif message.role == \\\"tool\\\" %}\\n        {%- if loop.previtem and loop.previtem.role != \\\"tool\\\" %}\\n            {{- '<|im_start|>user' }}\\n        {%- endif %}\\n        {{- '\\\\n<tool_response>\\\\n' }}\\n        {{- content }}\\n        {{- '\\\\n</tool_response>' }}\\n        {%- if not loop.last and loop.nextitem.role != \\\"tool\\\" %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- elif loop.last %}\\n            {{- '<|im_end|>\\\\n' }}\\n        {%- endif %}\\n    {%- else %}\\n        {{- raise_exception('Unexpected message role.') }}\\n    {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n    {{- '<|im_start|>assistant\\\\n' }}\\n    {%- if enable_thinking is defined and enable_thinking is false %}\\n        {{- '<think>\\\\n\\\\n</think>\\\\n\\\\n' }}\\n    {%- else %}\\n        {{- '<think>\\\\n' }}\\n    {%- endif %}\\n{%- endif %}\",\n    \"stop_token_ids\": [\n      248044,\n      248046\n    ],\n    \"reasoning_start_tag\": \"<think>\",\n    \"reasoning_end_tag\": \"</think>\",\n    \"stop\": [\n      \"<|endoftext|>\",\n      \"<|im_end|>\"\n    ],\n    \"tool_parser\": \"qwen\",\n    \"featured\": false,\n    \"updated_at\": 1773574253\n  }\n]\n"
  },
  {
    "path": "xinference/model/llm/llm_family.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport os\nfrom typing import Any, Dict, List, Optional, Set, Tuple, Type, Union\n\nfrom typing_extensions import Annotated, Literal\n\nfrom ..._compat import (\n    ROOT_KEY,\n    BaseModel,\n    ErrorWrapper,\n    Field,\n    Protocol,\n    StrBytes,\n    ValidationError,\n    load_str_bytes,\n    validator,\n)\nfrom ...constants import XINFERENCE_CACHE_DIR\nfrom ..core import VirtualEnvSettings\nfrom ..utils import (\n    ModelInstanceInfoMixin,\n    download_from_csghub,\n    download_from_modelscope,\n    download_from_openmind_hub,\n    retry_download,\n)\nfrom . import LLM\n\nlogger = logging.getLogger(__name__)\n\nDEFAULT_CONTEXT_LENGTH = 2048\nBUILTIN_LLM_PROMPT_STYLE: Dict[str, Dict[str, Any]] = {}\nBUILTIN_LLM_MODEL_CHAT_FAMILIES: Set[str] = set()\nBUILTIN_LLM_MODEL_GENERATE_FAMILIES: Set[str] = set()\nBUILTIN_LLM_MODEL_TOOL_CALL_FAMILIES: Set[str] = set()\n\n\nclass LlamaCppLLMSpecV2(BaseModel):\n    model_format: Literal[\"ggufv2\"]\n    # Must in order that `str` first, then `int`\n    model_size_in_billions: Union[str, int]\n    quantization: str\n    multimodal_projectors: Optional[List[str]]\n    model_id: Optional[str]\n    model_file_name_template: str\n    model_file_name_split_template: Optional[str]\n    quantization_parts: Optional[Dict[str, List[str]]]\n    model_hub: str = \"huggingface\"\n    model_uri: Optional[str]\n    model_revision: Optional[str]\n    # for MOE model, illustrates the activated model size\n    activated_size_in_billions: Optional[Union[str, int]]\n\n    @validator(\"model_size_in_billions\", \"activated_size_in_billions\", pre=False)\n    def validate_model_size_with_radix(cls, v: object) -> object:\n        if isinstance(v, str):\n            if (\n                \"_\" in v\n            ):  # for example, \"1_8\" just returns \"1_8\", otherwise int(\"1_8\") returns 18\n                return v\n            else:\n                return int(v)\n        return v\n\n\nclass PytorchLLMSpecV2(BaseModel):\n    model_format: Literal[\"pytorch\", \"gptq\", \"awq\", \"fp4\", \"fp8\", \"bnb\"]\n    # Must in order that `str` first, then `int`\n    model_size_in_billions: Union[str, int]\n    quantization: str\n    model_id: Optional[str]\n    model_hub: str = \"huggingface\"\n    model_uri: Optional[str]\n    model_revision: Optional[str]\n    # for MOE model, illustrates the activated model size\n    activated_size_in_billions: Optional[Union[str, int]]\n\n    @validator(\"model_size_in_billions\", \"activated_size_in_billions\", pre=False)\n    def validate_model_size_with_radix(cls, v: object) -> object:\n        if isinstance(v, str):\n            if (\n                \"_\" in v\n            ):  # for example, \"1_8\" just returns \"1_8\", otherwise int(\"1_8\") returns 18\n                return v\n            else:\n                return int(v)\n        return v\n\n\nclass MLXLLMSpecV2(BaseModel):\n    model_format: Literal[\"mlx\"]\n    # Must in order that `str` first, then `int`\n    model_size_in_billions: Union[str, int]\n    quantization: str\n    model_id: Optional[str]\n    model_hub: str = \"huggingface\"\n    model_uri: Optional[str]\n    model_revision: Optional[str]\n    # for MOE model, illustrates the activated model size\n    activated_size_in_billions: Optional[Union[str, int]]\n\n    @validator(\"model_size_in_billions\", \"activated_size_in_billions\", pre=False)\n    def validate_model_size_with_radix(cls, v: object) -> object:\n        if isinstance(v, str):\n            if (\n                \"_\" in v\n            ):  # for example, \"1_8\" just returns \"1_8\", otherwise int(\"1_8\") returns 18\n                return v\n            else:\n                return int(v)\n        return v\n\n\nclass LLMFamilyV2(BaseModel, ModelInstanceInfoMixin):\n    version: Literal[2]\n    context_length: Optional[int] = DEFAULT_CONTEXT_LENGTH\n    model_name: str\n    model_lang: List[str]\n    model_ability: List[\n        Literal[\n            \"embed\",\n            \"generate\",\n            \"chat\",\n            \"tools\",\n            \"vision\",\n            \"audio\",\n            \"omni\",\n            \"reasoning\",\n            \"hybrid\",\n        ]\n    ]\n    model_description: Optional[str]\n    # reason for not required str here: legacy registration\n    model_family: Optional[str]\n    model_specs: List[\"LLMSpecV1\"]\n    chat_template: Optional[str]\n    stop_token_ids: Optional[List[int]]\n    stop: Optional[List[str]]\n    architectures: Optional[List[str]]\n    reasoning_start_tag: Optional[str]\n    reasoning_end_tag: Optional[str]\n    cache_config: Optional[dict]\n    virtualenv: Optional[VirtualEnvSettings]\n    tool_parser: Optional[str]\n\n    class Config:\n        extra = \"allow\"\n\n    def _resolve_architectures(self) -> Optional[List[str]]:\n        if self.architectures:\n            return self.architectures\n        if not self.model_family:\n            return None\n        for family in BUILTIN_LLM_FAMILIES:\n            if family.model_name == self.model_family:\n                return family.architectures\n        return None\n\n    def has_architecture(self, *architectures: str) -> bool:\n        resolved = self._resolve_architectures()\n        if not architectures or not resolved:\n            return False\n        return any(arch in resolved for arch in architectures)\n\n    def matches_supported_architectures(\n        self, supported_architectures: List[str]\n    ) -> bool:\n        resolved = self._resolve_architectures()\n        if not resolved:\n            return False\n        return any(arch in supported_architectures for arch in resolved)\n\n    def to_description(self):\n        spec = self.model_specs[0]\n        return {\n            \"model_type\": \"LLM\",\n            \"address\": getattr(self, \"address\", None),\n            \"accelerators\": getattr(self, \"accelerators\", None),\n            \"model_name\": self.model_name,\n            \"model_lang\": self.model_lang,\n            \"model_ability\": self.model_ability,\n            \"model_description\": self.model_description,\n            \"model_format\": spec.model_format,\n            \"model_size_in_billions\": spec.model_size_in_billions,\n            \"model_family\": self.model_family or self.model_name,\n            \"quantization\": spec.quantization,\n            \"multimodal_projector\": getattr(self, \"multimodal_projector\", None),\n            \"model_hub\": spec.model_hub,\n            \"revision\": spec.model_revision,\n            \"context_length\": self.context_length,\n        }\n\n    def to_version_info(self):\n        \"\"\"\n        Entering this function means it is already bound to a model instance,\n        so there is only one spec.\n        \"\"\"\n        from .cache_manager import LLMCacheManager\n        from .utils import get_model_version\n\n        spec = self.model_specs[0]\n        multimodal_projector = getattr(self, \"multimodal_projector\", None)\n        cache_manager = LLMCacheManager(self, multimodal_projector)\n\n        return {\n            \"model_version\": get_model_version(\n                self.model_name,\n                spec.model_format,\n                spec.model_size_in_billions,\n                spec.quantization,\n            ),\n            \"model_file_location\": cache_manager.get_cache_dir(),\n            \"cache_status\": cache_manager.get_cache_status(),\n            \"quantization\": spec.quantization,\n            \"multimodal_projector\": multimodal_projector,\n            \"model_format\": spec.model_format,\n            \"model_size_in_billions\": spec.model_size_in_billions,\n        }\n\n\nclass CustomLLMFamilyV2(LLMFamilyV2):\n    @classmethod\n    def parse_raw(\n        cls: Any,\n        b: StrBytes,\n        *,\n        content_type: Optional[str] = None,\n        encoding: str = \"utf8\",\n        proto: Protocol = None,\n        allow_pickle: bool = False,\n    ) -> LLMFamilyV2:\n        # See source code of BaseModel.parse_raw\n        try:\n            obj = load_str_bytes(\n                b,\n                proto=proto,\n                content_type=content_type,\n                encoding=encoding,\n                allow_pickle=allow_pickle,\n                json_loads=cls.__config__.json_loads,\n            )\n        except (ValueError, TypeError, UnicodeDecodeError) as e:\n            raise ValidationError([ErrorWrapper(e, loc=ROOT_KEY)], cls)\n        llm_spec: CustomLLMFamilyV2 = cls.parse_obj(obj)\n        vision_model_names: Set[str] = {\n            family.model_name\n            for family in BUILTIN_LLM_FAMILIES\n            if \"vision\" in family.model_ability\n        }\n\n        # check model_family\n        if llm_spec.model_family is None:\n            raise ValueError(\n                f\"You must specify `model_family` when registering custom LLM models.\"\n            )\n        assert isinstance(llm_spec.model_family, str)\n        # TODO: Currently, tool call and vision models cannot be registered if it is not the builtin model_family\n        if (\n            \"tools\" in llm_spec.model_ability\n            and llm_spec.model_family not in BUILTIN_LLM_MODEL_TOOL_CALL_FAMILIES\n        ):\n            raise ValueError(\n                f\"`model_family` for tool call model must be one of the following values: \\n\"\n                f\"{', '.join(list(BUILTIN_LLM_MODEL_TOOL_CALL_FAMILIES))}\"\n            )\n        if (\n            \"vision\" in llm_spec.model_ability\n            and llm_spec.model_family not in vision_model_names\n        ):\n            raise ValueError(\n                f\"`model_family` for multimodal model must be one of the following values: \\n\"\n                f\"{', '.join(list(vision_model_names))}\"\n            )\n        # set chat_template when it is the builtin model family\n        if llm_spec.chat_template is None and \"chat\" in llm_spec.model_ability:\n            llm_spec.chat_template = llm_spec.model_family\n\n        # handle chat_template when user choose existing model_family\n        if (\n            llm_spec.chat_template is not None\n            and llm_spec.chat_template in BUILTIN_LLM_PROMPT_STYLE\n        ):\n            llm_spec.stop_token_ids = BUILTIN_LLM_PROMPT_STYLE[llm_spec.chat_template][\n                \"stop_token_ids\"\n            ]\n            llm_spec.stop = BUILTIN_LLM_PROMPT_STYLE[llm_spec.chat_template][\"stop\"]\n            llm_spec.reasoning_start_tag = BUILTIN_LLM_PROMPT_STYLE[\n                llm_spec.chat_template\n            ].get(\"reasoning_start_tag\")\n            llm_spec.reasoning_end_tag = BUILTIN_LLM_PROMPT_STYLE[\n                llm_spec.chat_template\n            ].get(\"reasoning_end_tag\")\n            llm_spec.chat_template = BUILTIN_LLM_PROMPT_STYLE[llm_spec.chat_template][\n                \"chat_template\"\n            ]\n\n        # check model ability, registering LLM only provides generate and chat\n        # but for vision models, we add back the abilities so that\n        # gradio chat interface can be generated properly\n        if (\n            llm_spec.model_family in vision_model_names\n            and \"vision\" not in llm_spec.model_ability\n        ):\n            llm_spec.model_ability.append(\"vision\")\n\n        return llm_spec\n\n\nLLMSpecV1 = Annotated[\n    Union[LlamaCppLLMSpecV2, PytorchLLMSpecV2, MLXLLMSpecV2],\n    Field(discriminator=\"model_format\"),\n]\n\nLLMFamilyV2.update_forward_refs()\nCustomLLMFamilyV2.update_forward_refs()\n\n\nLLAMA_CLASSES: List[Type[LLM]] = []\n\nBUILTIN_LLM_FAMILIES: List[\"LLMFamilyV2\"] = []\n\nSGLANG_CLASSES: List[Type[LLM]] = []\nTRANSFORMERS_CLASSES: List[Type[LLM]] = []\nVLLM_CLASSES: List[Type[LLM]] = []\nMLX_CLASSES: List[Type[LLM]] = []\nLMDEPLOY_CLASSES: List[Type[LLM]] = []\n\nLLM_ENGINES: Dict[str, Dict[str, List[Dict[str, Any]]]] = {}\nSUPPORTED_ENGINES: Dict[str, List[Type[LLM]]] = {}\n\n\n# Add decorator definition\ndef register_transformer(cls):\n    \"\"\"\n    Decorator function to register a class as a transformer.\n\n    This decorator appends the provided class to the TRANSFORMERS_CLASSES list.\n    It is used to keep track of classes that are considered transformers.\n\n    Args:\n        cls (class): The class to be registered as a transformer.\n\n    Returns:\n        class: The same class that was passed in, after being registered.\n    \"\"\"\n    # Append the class to the list of transformer classes\n    TRANSFORMERS_CLASSES.append(cls)\n    return cls\n\n\ndef cache_model_tokenizer_and_config(\n    llm_family: LLMFamilyV2,\n) -> str:\n    \"\"\"\n    Download model config.json and tokenizers only\n    \"\"\"\n    llm_spec = llm_family.model_specs[0]\n    cache_dir = _get_cache_dir_for_model_mem(llm_family, llm_spec, \"tokenizer_config\")\n    os.makedirs(cache_dir, exist_ok=True)\n    patterns = [\"tokenizer*\", \"config.json\", \"configuration*\", \"tokenization*\"]\n    if llm_spec.model_hub == \"huggingface\":\n        from huggingface_hub import snapshot_download\n\n        download_dir = retry_download(\n            snapshot_download,\n            llm_family.model_name,\n            {\n                \"model_size\": llm_spec.model_size_in_billions,\n                \"model_format\": llm_spec.model_format,\n            },\n            llm_spec.model_id,\n            revision=llm_spec.model_revision,\n            allow_patterns=patterns,\n            local_dir=cache_dir,\n        )\n    elif llm_spec.model_hub == \"modelscope\":\n        from modelscope.hub.snapshot_download import snapshot_download\n\n        download_dir = retry_download(\n            snapshot_download,\n            llm_family.model_name,\n            {\n                \"model_size\": llm_spec.model_size_in_billions,\n                \"model_format\": llm_spec.model_format,\n            },\n            llm_spec.model_id,\n            revision=llm_spec.model_revision,\n            allow_patterns=patterns,\n            local_dir=cache_dir,\n        )\n    else:\n        raise NotImplementedError(\n            f\"Does not support download config.json and \"\n            f\"tokenizer related files via {llm_spec.model_hub}\"\n        )\n    return download_dir\n\n\ndef cache_model_config(llm_family: LLMFamilyV2):\n    \"\"\"Download model config.json into cache_dir,\n    returns local filepath\n    \"\"\"\n    llm_spec = llm_family.model_specs[0]\n    cache_dir = _get_cache_dir_for_model_mem(llm_family, llm_spec, \"model_mem\")\n    config_file = os.path.join(cache_dir, \"config.json\")\n    if not os.path.islink(config_file) and not os.path.exists(config_file):\n        os.makedirs(cache_dir, exist_ok=True)\n        if llm_spec.model_hub == \"huggingface\":\n            from huggingface_hub import hf_hub_download\n\n            hf_hub_download(\n                repo_id=llm_spec.model_id, filename=\"config.json\", local_dir=cache_dir\n            )\n        else:\n            from modelscope.hub.file_download import model_file_download\n\n            download_path = model_file_download(\n                model_id=llm_spec.model_id, file_path=\"config.json\"\n            )\n            os.symlink(download_path, config_file)\n    return config_file\n\n\ndef _get_cache_dir_for_model_mem(\n    llm_family: LLMFamilyV2,\n    llm_spec: \"LLMSpecV1\",\n    category: str,\n    create_if_not_exist=True,\n):\n    \"\"\"\n    Get file dir for special usage, like `cal-model-mem` and download partial files for\n\n    e.g. for cal-model-mem, (might called from supervisor / cli)\n    Temporary use separate dir from worker's cache_dir, due to issue of different style of symlink.\n    \"\"\"\n    cache_dir_name = (\n        f\"{llm_family.model_name}-{llm_spec.model_format}\"\n        f\"-{llm_spec.model_size_in_billions}b-{llm_spec.quantization}\"\n    )\n    cache_dir = os.path.realpath(\n        os.path.join(XINFERENCE_CACHE_DIR, \"v2\", category, cache_dir_name)\n    )\n    if create_if_not_exist and not os.path.exists(cache_dir):\n        os.makedirs(cache_dir, exist_ok=True)\n    return cache_dir\n\n\ndef match_model_size(\n    model_size: Union[int, str], spec_model_size: Union[int, str]\n) -> bool:\n    if isinstance(model_size, str):\n        model_size = model_size.replace(\"_\", \".\")\n    if isinstance(spec_model_size, str):\n        spec_model_size = spec_model_size.replace(\"_\", \".\")\n\n    if model_size == spec_model_size:\n        return True\n\n    try:\n        ms = int(model_size)\n        ss = int(spec_model_size)\n        return ms == ss\n    except ValueError:\n        return False\n\n\ndef convert_model_size_to_float(\n    model_size_in_billions: Union[float, int, str],\n) -> float:\n    if isinstance(model_size_in_billions, str):\n        if \"_\" in model_size_in_billions:\n            ms = model_size_in_billions.replace(\"_\", \".\")\n            return float(ms)\n        elif \".\" in model_size_in_billions:\n            return float(model_size_in_billions)\n        else:\n            return int(model_size_in_billions)\n    return model_size_in_billions\n\n\ndef match_llm(\n    model_name: str,\n    model_format: Optional[str] = None,\n    model_size_in_billions: Optional[Union[int, str]] = None,\n    quantization: Optional[str] = None,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n) -> Optional[LLMFamilyV2]:\n    \"\"\"\n    Find an LLM family, spec, and quantization that satisfy given criteria.\n    \"\"\"\n    from .custom import get_user_defined_llm_families\n\n    user_defined_llm_families = get_user_defined_llm_families()\n\n    def _match_quantization(q: Union[str, None], quant: str):\n        # Currently, the quantization name could include both uppercase and lowercase letters,\n        # so it is necessary to ensure that the case sensitivity does not\n        # affect the matching results.\n        if q is None or q.lower() != quant.lower():\n            return None\n        return quant\n\n    def _apply_format_to_model_id(_spec: \"LLMSpecV1\", q: str) -> \"LLMSpecV1\":\n        # Different quantized versions of some models use different model ids,\n        # Here we check the `{}` in the model id to format the id.\n        if _spec.model_id and \"{\" in _spec.model_id:\n            _spec.model_id = _spec.model_id.format(quantization=q)\n        return _spec\n\n    def _get_model_specs(\n        _model_specs: List[\"LLMSpecV1\"], hub: str\n    ) -> List[\"LLMSpecV1\"]:\n        return [x for x in _model_specs if x.model_hub == hub]\n\n    # priority: download_hub > download_from_modelscope() and download_from_csghub()\n    # set base model\n    families = BUILTIN_LLM_FAMILIES + user_defined_llm_families\n\n    for family in families:\n        if model_name != family.model_name:\n            continue\n\n        # prepare possible quantization matching options\n        if download_hub is not None:\n            if download_hub == \"huggingface\":\n                model_specs = _get_model_specs(family.model_specs, download_hub)\n            else:\n                model_specs = _get_model_specs(\n                    family.model_specs, download_hub\n                ) + _get_model_specs(family.model_specs, \"huggingface\")\n        else:\n            if download_from_modelscope():\n                model_specs = _get_model_specs(\n                    family.model_specs, \"modelscope\"\n                ) + _get_model_specs(family.model_specs, \"huggingface\")\n            elif download_from_openmind_hub():\n                model_specs = _get_model_specs(\n                    family.model_specs, \"openmind_hub\"\n                ) + _get_model_specs(family.model_specs, \"huggingface\")\n            elif download_from_csghub():\n                model_specs = _get_model_specs(\n                    family.model_specs, \"csghub\"\n                ) + _get_model_specs(family.model_specs, \"huggingface\")\n            else:\n                model_specs = _get_model_specs(family.model_specs, \"huggingface\")\n\n        for spec in model_specs:\n            # check model_format and model_size_in_billions\n            if (\n                model_format\n                and model_format != spec.model_format\n                or model_size_in_billions\n                and not match_model_size(\n                    model_size_in_billions, spec.model_size_in_billions\n                )\n            ):\n                continue\n\n            # Check quantization\n            matched_quantization = _match_quantization(quantization, spec.quantization)\n            if quantization and matched_quantization is None:\n                continue\n            _llm_family = family.copy()\n            if quantization:\n                _llm_family.model_specs = [\n                    _apply_format_to_model_id(spec, matched_quantization)\n                ]\n                return _llm_family\n            else:\n                # TODO: If user does not specify quantization, just use the first one\n                _q = \"none\" if spec.model_format == \"pytorch\" else spec.quantization\n                _llm_family.model_specs = [_apply_format_to_model_id(spec, _q)]\n                return _llm_family\n    return None\n\n\ndef check_engine_by_spec_parameters(\n    model_engine: str,\n    model_name: str,\n    model_format: str,\n    model_size_in_billions: Union[str, int],\n    quantization: str,\n) -> Type[LLM]:\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in LLM_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    if model_name not in LLM_ENGINES:\n        raise ValueError(f\"Model {model_name} not found.\")\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in LLM_ENGINES[model_name]:\n        raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n    match_params = LLM_ENGINES[model_name][model_engine]\n    for param in match_params:\n        if (\n            model_name == param[\"model_name\"]\n            and model_format == param[\"model_format\"]\n            and model_size_in_billions == param[\"model_size_in_billions\"]\n            and quantization in param[\"quantizations\"]\n        ):\n            return param[\"llm_class\"]\n    raise ValueError(\n        f\"Model {model_name} cannot be run on engine {model_engine}, with format {model_format}, size {model_size_in_billions} and quantization {quantization}.\"\n    )\n\n\ndef check_engine_by_spec_parameters_with_virtual_env(\n    model_engine: str,\n    model_name: str,\n    model_format: str,\n    model_size_in_billions: Union[str, int],\n    quantization: str,\n    llm_family: Optional[\"LLMFamilyV2\"] = None,\n) -> Type[LLM]:\n    from ..utils import _collect_virtualenv_engine_markers\n\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in LLM_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    def _select_llm_spec(\n        family: \"LLMFamilyV2\",\n    ) -> Optional[\"LLMSpecV1\"]:\n        for spec in family.model_specs:\n            if model_format != spec.model_format:\n                continue\n            if not match_model_size(\n                model_size_in_billions, spec.model_size_in_billions\n            ):\n                continue\n            if quantization and quantization.lower() != spec.quantization.lower():\n                continue\n            return spec\n        return None\n\n    def _select_engine_class_fallback(\n        engine_classes: List[Type[LLM]],\n        family: \"LLMFamilyV2\",\n    ) -> Optional[Type[LLM]]:\n        if not engine_classes:\n            return None\n        abilities = set(getattr(family, \"model_ability\", []) or [])\n        preferred_tokens: List[Tuple[str, ...]] = []\n        if any(a in abilities for a in (\"vision\", \"audio\", \"omni\")):\n            preferred_tokens.append((\"multi\", \"vision\", \"omni\"))\n        if \"chat\" in abilities:\n            preferred_tokens.append((\"chat\",))\n        for tokens in preferred_tokens:\n            for engine_cls in engine_classes:\n                cls_name = engine_cls.__name__.lower()\n                if any(token in cls_name for token in tokens):\n                    return engine_cls\n        return engine_classes[0]\n\n    if model_name not in LLM_ENGINES:\n        raise ValueError(f\"Model {model_name} not found.\")\n    if llm_family is None:\n        llm_family = next(\n            (f for f in BUILTIN_LLM_FAMILIES if f.model_name == model_name), None\n        )\n    engine_markers = _collect_virtualenv_engine_markers(llm_family)\n    if engine_markers and model_engine.lower() not in engine_markers:\n        raise ValueError(\n            f\"Engine {model_engine} is not listed in virtualenv packages for model {model_name}.\"\n        )\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in LLM_ENGINES[model_name]:\n        if model_engine.lower() in engine_markers:\n            if model_engine.lower() == \"mlx\" and model_format != \"mlx\":\n                raise ValueError(\n                    f\"Engine {model_engine} only supports mlx format, got {model_format}.\"\n                )\n            if llm_family is None:\n                raise ValueError(f\"Model {model_name} not found.\")\n            llm_spec = _select_llm_spec(llm_family)\n            if llm_spec is None:\n                raise ValueError(\n                    f\"Model {model_name} cannot be run on engine {model_engine}, \"\n                    f\"with format {model_format}, size {model_size_in_billions} \"\n                    f\"and quantization {quantization}.\"\n                )\n            for engine_name, engine_classes in SUPPORTED_ENGINES.items():\n                if engine_name.lower() == model_engine.lower() and engine_classes:\n                    engine_cls = _select_engine_class_fallback(\n                        engine_classes, llm_family\n                    )\n                    if engine_cls is None:\n                        raise ValueError(\n                            f\"Model {model_name} cannot be run on engine {model_engine}, \"\n                            f\"with format {model_format}, size {model_size_in_billions} \"\n                            f\"and quantization {quantization}.\"\n                        )\n                    logger.warning(\n                        \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                        model_engine,\n                    )\n                    return engine_cls\n        raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n    match_params = LLM_ENGINES[model_name][model_engine]\n    for param in match_params:\n        if (\n            model_name == param[\"model_name\"]\n            and model_format == param[\"model_format\"]\n            and model_size_in_billions == param[\"model_size_in_billions\"]\n            and quantization in param[\"quantizations\"]\n        ):\n            return param[\"llm_class\"]\n    if model_engine.lower() in engine_markers:\n        if model_engine.lower() == \"mlx\" and model_format != \"mlx\":\n            raise ValueError(\n                f\"Engine {model_engine} only supports mlx format, got {model_format}.\"\n            )\n        if llm_family is None:\n            raise ValueError(f\"Model {model_name} not found.\")\n        llm_spec = _select_llm_spec(llm_family)\n        if llm_spec is None:\n            raise ValueError(\n                f\"Model {model_name} cannot be run on engine {model_engine}, \"\n                f\"with format {model_format}, size {model_size_in_billions} \"\n                f\"and quantization {quantization}.\"\n            )\n        for engine_name, engine_classes in SUPPORTED_ENGINES.items():\n            if engine_name.lower() == model_engine.lower() and engine_classes:\n                engine_cls = _select_engine_class_fallback(engine_classes, llm_family)\n                if engine_cls is None:\n                    raise ValueError(\n                        f\"Model {model_name} cannot be run on engine {model_engine}, \"\n                        f\"with format {model_format}, size {model_size_in_billions} \"\n                        f\"and quantization {quantization}.\"\n                    )\n                logger.warning(\n                    \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                    model_engine,\n                )\n                return engine_cls\n    raise ValueError(\n        f\"Model {model_name} cannot be run on engine {model_engine}, with format {model_format}, size {model_size_in_billions} and quantization {quantization}.\"\n    )\n"
  },
  {
    "path": "xinference/model/llm/lmdeploy/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/llm/lmdeploy/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nimport uuid\nfrom typing import (\n    AsyncGenerator,\n    Dict,\n    Iterator,\n    List,\n    Optional,\n    Tuple,\n    TypedDict,\n    Union,\n)\n\nimport torch\n\nfrom ....types import ChatCompletion, ChatCompletionChunk, Completion, LoRA\nfrom ...utils import check_dependency_available\nfrom ..core import LLM\nfrom ..llm_family import LLMFamilyV2, LLMSpecV1\nfrom ..utils import ChatModelMixin, generate_chat_completion, generate_completion_chunk\n\nlogger = logging.getLogger(__name__)\n\ntry:\n    import lmdeploy  # noqa: F401\n\n    LMDEPLOY_INSTALLED = True\nexcept ImportError:\n    LMDEPLOY_INSTALLED = False\n\nLMDEPLOY_SUPPORTED_CHAT_MODELS = [\"InternVLChatModel\"]\nLMDEPLOY_MODEL_CHAT_TEMPLATE_NAME = {\n    \"InternVLChatModel\": \"internvl-internlm2\",\n}\n\n\nclass LMDeployModelConfig(TypedDict, total=False):\n    model_format: Optional[str]\n    tp: Optional[int]\n    session_len: Optional[int]\n    max_batch_size: Optional[int]\n    cache_max_entry_count: Optional[float]\n    cache_block_seq_len: Optional[int]\n    enable_prefix_caching: Optional[bool]\n    quant_policy: Optional[int]\n    rope_scaling_factor: Optional[float]\n    use_logn_attn: Optional[bool]\n    download_dir: Optional[str]\n    revision: Optional[str]\n    max_prefill_token_num: Optional[int]\n    num_tokens_per_iter: Optional[int]\n    max_prefill_iters: Optional[int]\n\n\nclass LMDeployGenerateConfig(TypedDict, total=False):\n    n: Optional[int]\n    max_new_tokens: Optional[int]\n    top_p: Optional[float]\n    top_k: Optional[int]\n    temperature: Optional[float]\n    repetition_penalty: Optional[float]\n    ignore_eos: Optional[bool]\n    random_seed: Optional[int]\n    stop_words: Optional[List[int]]\n    bad_words: Optional[List[int]]\n    min_new_tokens: Optional[int]\n    skip_special_tokens: Optional[bool]\n    logprobs: Optional[int]\n\n\nclass LMDeployModel(LLM):\n    allow_batch = True\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        model_config: Optional[LMDeployModelConfig] = None,\n        peft_model: Optional[List[LoRA]] = None,\n    ):\n        super().__init__(model_uid, model_family, model_path)\n        self._model_config: LMDeployModelConfig = self._sanitize_model_config(\n            model_config\n        )\n        if peft_model is not None:\n            raise ValueError(\"LMDEPLOY engine has not supported lora yet.\")\n\n    def _sanitize_model_config(\n        self, model_config: Optional[LMDeployModelConfig]\n    ) -> LMDeployModelConfig:\n        if model_config is None:\n            model_config = LMDeployModelConfig()\n        model_config.setdefault(\"session_len\", 8192)\n        if self.model_spec.model_format == \"awq\":\n            model_config.setdefault(\"model_format\", \"awq\")\n        return model_config\n\n    def load(self):\n        try:\n            import lmdeploy  # noqa: F401, F811\n        except ImportError:\n            error_message = \"Failed to import module 'lmdeploy'\"\n            installation_guide = [\n                \"Please make sure 'lmdeploy' is installed. \",\n                \"You can install it by `pip install lmdeploy`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n        raise ValueError(\"LMDEPLOY engine has not supported generate yet.\")\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"lmdeploy\", \"lmdeploy\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        return False, \"LMDeploy engine has no standalone generate capability\"\n\n    def generate(\n        self,\n        prompt: str,\n        generate_config: Optional[Dict] = None,\n    ) -> Union[Completion, Iterator[ChatCompletionChunk]]:\n        raise NotImplementedError(\"LMDeploy generate ablility does not support now.\")\n\n\nclass LMDeployChatModel(LMDeployModel, ChatModelMixin):\n    def load(self):\n        try:\n            from lmdeploy import (\n                ChatTemplateConfig,\n                TurbomindEngineConfig,\n                VisionConfig,\n                pipeline,\n            )\n        except ImportError:\n            error_message = \"Failed to import module 'lmdeploy'\"\n            installation_guide = [\n                \"Please make sure 'lmdeploy' is installed. \",\n                \"You can install it by `pip install lmdeploy`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        chat_temp_name = \"\"\n        for key in LMDEPLOY_MODEL_CHAT_TEMPLATE_NAME.keys():\n            if self.model_family.has_architecture(key):\n                chat_temp_name = LMDEPLOY_MODEL_CHAT_TEMPLATE_NAME[key]\n                break\n        if chat_temp_name == \"\":\n            raise ValueError(f\"Can not find correct chat template.\")\n\n        chat_template_config = ChatTemplateConfig(chat_temp_name)\n        count = torch.cuda.device_count()\n        if count > 1:\n            self._model_config.setdefault(\"tp\", torch.cuda.device_count())\n\n        self._model = pipeline(\n            self.model_path,\n            chat_template_config=chat_template_config,\n            backend_config=TurbomindEngineConfig(**self._model_config),\n            vision_config=VisionConfig(thread_safe=True),\n        )\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format == \"awq\":\n            if \"4\" not in quantization:\n                return False, \"LMDeploy chat only supports 4-bit AWQ weights\"\n        if not llm_family.matches_supported_architectures(\n            LMDEPLOY_SUPPORTED_CHAT_MODELS\n        ):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not in LMDeploy supported chat list\",\n            )\n        if not LMDEPLOY_INSTALLED:\n            return False, \"lmdeploy library is not installed\"\n        return True\n\n    async def async_chat(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[Dict] = None,\n    ) -> Union[ChatCompletion, AsyncGenerator[ChatCompletionChunk, None]]:\n        stream = (\n            generate_config.get(\"stream\", False)\n            if isinstance(generate_config, dict)\n            else False\n        )\n        stream_options = (\n            generate_config.get(\"stream_options\", None)\n            if isinstance(generate_config, dict)\n            else False\n        )\n        include_usage = (\n            stream_options[\"include_usage\"]\n            if isinstance(stream_options, dict)\n            else False\n        )\n\n        if stream:\n            chunk = self._chat_stream(messages, include_usage)\n            return self._async_to_chat_completion_chunks(chunk)\n        else:\n            return await self._chat(messages)\n\n    async def _chat_stream(self, messages, include_usage):\n        from lmdeploy.messages import Response\n\n        prompt_tokens, completion_tokens, total_tokens = 0, 0, 0\n        completion_id = str(uuid.uuid1())\n        finish_reason = None\n        async for output in self._generate(\n            messages,\n            session_id=-1,\n            stream_response=True,\n        ):\n            new_text = output.text if isinstance(output, Response) else output.response\n            prompt_tokens = output.input_token_len\n            completion_tokens = output.generate_token_len\n            total_tokens = prompt_tokens + completion_tokens\n            finish_reason = output.finish_reason\n            yield generate_completion_chunk(\n                chunk_text=new_text,\n                finish_reason=None,\n                chunk_id=completion_id,\n                model_uid=self.model_uid,\n                prompt_tokens=prompt_tokens,\n                completion_tokens=completion_tokens,\n                total_tokens=total_tokens,\n            )\n\n        yield generate_completion_chunk(\n            chunk_text=None,\n            finish_reason=finish_reason,\n            chunk_id=completion_id,\n            model_uid=self.model_uid,\n            prompt_tokens=prompt_tokens,\n            completion_tokens=completion_tokens,\n            total_tokens=total_tokens,\n            has_choice=True,\n            has_content=False,\n        )\n        if include_usage:\n            yield generate_completion_chunk(\n                chunk_text=None,\n                finish_reason=None,\n                chunk_id=completion_id,\n                model_uid=self.model_uid,\n                prompt_tokens=prompt_tokens,\n                completion_tokens=completion_tokens,\n                total_tokens=total_tokens,\n                has_choice=False,\n                has_content=False,\n            )\n\n    async def _chat(self, messages) -> ChatCompletion:\n        from lmdeploy.messages import Response\n\n        response, finish_reason = \"\", None\n        prompt_tokens, completion_tokens, total_tokens = 0, 0, 0\n        async for output in self._generate(\n            messages,\n            session_id=-1,\n            stream_response=False,\n        ):\n            response += output.text if isinstance(output, Response) else output.response\n            prompt_tokens = output.input_token_len\n            completion_tokens = output.generate_token_len\n            total_tokens = output.input_token_len + output.generate_token_len\n            finish_reason = output.finish_reason\n\n        return generate_chat_completion(\n            self.model_uid,\n            response,\n            prompt_tokens=prompt_tokens,\n            completion_tokens=completion_tokens,\n            total_tokens=total_tokens,\n            finish_reason=finish_reason,\n        )\n\n    # copy from lmdeploy\n    # Reference: lmdeploy.serve.async_engine.py\n    async def _generate(\n        self,\n        messages: List[Dict],\n        session_id: int,\n        generate_config: Optional[Dict] = None,\n        tools: Optional[List[object]] = None,\n        stream_response: bool = True,\n        sequence_start: bool = True,\n        sequence_end: bool = True,  # no interactive mode by default\n        step: int = 0,\n        do_preprocess: bool = False,\n        adapter_name: Optional[str] = None,\n        **kwargs,\n    ):\n        import random\n\n        from lmdeploy.messages import EngineGenerationConfig, GenerationConfig\n        from lmdeploy.serve.async_engine import GenOut\n        from lmdeploy.tokenizer import DetokenizeState\n\n        from ..utils import get_stop_token_ids_from_config_file\n\n        session_id = -1\n\n        if str(session_id) not in self._model.id2step:\n            self._model.id2step[str(session_id)] = 0\n        if generate_config is None:\n            generate_config = GenerationConfig()\n        if type(generate_config) is GenerationConfig:\n            generate_config = EngineGenerationConfig.From(\n                generate_config, self._model.tokenizer\n            )\n        if generate_config.stop_words is None:  # type: ignore\n            stop_token_ids = get_stop_token_ids_from_config_file(self.model_path)\n            if stop_token_ids is not None:\n                generate_config.stop_words = stop_token_ids  # type: ignore\n        if generate_config.random_seed is None and sequence_start:  # type: ignore\n            generate_config.random_seed = random.getrandbits(64)  # type: ignore\n        if generate_config.n > 1:  # type: ignore\n            logger.warning(\n                f\"n({generate_config.n}) > 1 hasn't been supported yet. \"  # type: ignore\n                f\"Fallback to 1\"\n            )\n            generate_config.n = 1  # type: ignore\n\n        prompt_input = await self._get_prompt_input(messages)\n        prompt = prompt_input[\"prompt\"]\n        input_ids = prompt_input[\"input_ids\"]\n        finish_reason = None\n        logger.info(\n            f\"prompt={prompt!r}, \"\n            f\"gen_config={generate_config}, \"\n            f\"prompt_token_id={input_ids}, \"\n            f\"adapter_name={adapter_name}.\"\n        )\n        logger.info(\n            f\"session_id={session_id}, \"  # type: ignore\n            f\"history_tokens={self._model.id2step[str(session_id)]}, \"\n            f\"input_tokens={len(input_ids)}, \"\n            f\"max_new_tokens={generate_config.max_new_tokens}, \"\n            f\"seq_start={sequence_start}, seq_end={sequence_end}, \"\n            f\"step={step}, prep={do_preprocess}\"\n        )\n\n        if generate_config.max_new_tokens is None:  # type: ignore\n            # for interactive endpoint, will try maximum possible token num\n            generate_config.max_new_tokens = max(  # type: ignore\n                128,\n                self._model.session_len\n                - self._model.id2step[str(session_id)]\n                - len(input_ids),\n            )\n        elif (\n            self._model.id2step[str(session_id)]\n            + len(input_ids)\n            + generate_config.max_new_tokens  # type: ignore\n            > self._model.session_len\n        ):\n            generate_config.max_new_tokens = max(  # type: ignore\n                self._model.session_len\n                - self._model.id2step[str(session_id)]\n                - len(input_ids),\n                128,\n            )\n            logger.error(f\"Truncate max_new_tokens to {generate_config.max_new_tokens}\")  # type: ignore\n\n        if (\n            self._model.id2step[str(session_id)]\n            + len(input_ids)\n            + generate_config.max_new_tokens  # type: ignore\n            > self._model.session_len\n        ):\n            logger.error(f\"run out of tokens. session_id={session_id}.\")\n            yield GenOut(\n                \"\", self._model.id2step[str(session_id)], len(input_ids), 0, \"length\"\n            )\n            if sequence_end is True and sequence_start is False:\n                await self._model.end_session(session_id)\n        else:\n            generator = await self._model.get_generator(False, session_id)\n            async with self._model.safe_run(session_id):\n                state = DetokenizeState(len(input_ids))\n                start_ids_offset = state.ids_offset\n                response = \"\"\n                async for outputs in generator.async_stream_infer(\n                    session_id=session_id,\n                    **prompt_input,\n                    gen_config=generate_config,\n                    adapter_name=adapter_name,\n                    stream_output=stream_response,\n                    sequence_start=sequence_start,\n                    sequence_end=sequence_end,\n                    step=self._model.id2step[str(session_id)],\n                ):\n                    # decode res\n                    res, tokens = (\n                        input_ids + outputs.token_ids,\n                        outputs.num_token,\n                    )  # noqa\n                    if len(res) <= state.ids_offset:\n                        continue\n\n                    ids_offset = state.ids_offset\n                    response, state = self._model.tokenizer.detokenize_incrementally(\n                        res,\n                        state,\n                        skip_special_tokens=generate_config.skip_special_tokens,  # type: ignore\n                    )\n\n                    res = res[ids_offset:]\n                    logprobs = None\n                    if outputs.logprobs:\n                        log_offset = ids_offset - start_ids_offset\n                        logprobs = outputs.logprobs[log_offset:]\n\n                    # response, history token len,\n                    # input token len, gen token len\n                    yield GenOut(\n                        response,\n                        self._model.id2step[str(session_id)],\n                        len(input_ids),\n                        tokens,\n                        finish_reason,\n                        res,\n                        logprobs,\n                    )\n\n                finish_reason = (\n                    \"length\" if tokens >= generate_config.max_new_tokens else \"stop\"  # type: ignore\n                )\n                # utf-8 char at the end means it's a potential unfinished\n                # byte sequence\n                if not response.endswith(\"�\"):\n                    response = \"\"  # avaid returning the last response twice\n                yield GenOut(\n                    response,\n                    self._model.id2step[str(session_id)],\n                    len(input_ids),\n                    tokens,\n                    finish_reason,\n                )\n                # update step\n                self._model.id2step[str(session_id)] += len(input_ids) + tokens\n                if sequence_end:\n                    self._model.id2step[str(session_id)] = 0\n                # manually end pytorch session\n                # TODO modify pytorch or turbomind api\n                if self._model.backend == \"pytorch\" and sequence_end:\n                    await self._model.end_session(session_id)\n\n    # copy from lmdeploy\n    # Reference: lmdeploy.serve.vl_async_engine.py\n    async def _get_prompt_input(\n        self,\n        messages: List[Dict],\n        sequence_start: bool = True,\n        tools: Optional[List[object]] = None,\n        **kwargs,\n    ):\n        \"\"\"get input_ids, embeddings and offsets.\"\"\"\n        IMAGE_TOKEN = \"<IMAGE_TOKEN>\"\n        IMAGE_DUMMY_TOKEN_INDEX = 0\n        import numpy as np\n\n        model_family = self.model_family.model_family or self.model_family.model_name\n        decorated, _ = self.get_specific_prompt(model_family, messages)  # type: ignore\n        prompt = messages  # type: ignore\n\n        decorated = decorated.replace(\"<image>\", \"<img><IMAGE_TOKEN></img>\")\n\n        segs = decorated.split(IMAGE_TOKEN)\n\n        results = {}\n        input_ids = []  # type: ignore\n        if len(segs) > 1:\n            images = await self._model.vl_prompt_template.async_collect_pil_images(\n                prompt\n            )\n\n            features = await self._model.vl_encoder.async_infer(images)\n\n            from lmdeploy.vl.templates import MiniCPMVTempateWrapper\n\n            if isinstance(self._model.vl_prompt_template, MiniCPMVTempateWrapper):\n                (\n                    decorated,\n                    features,\n                ) = self._model.vl_prompt_template.update_image_token(  # noqa: E501\n                    decorated, features\n                )\n                segs = decorated.split(IMAGE_TOKEN)\n\n            features = [x.cpu().numpy() for x in features]\n            input_ids = []\n            begins = []\n            ends = []\n            if len(segs) != len(features) + 1:\n                logger.error(\n                    f\"the number of {IMAGE_TOKEN} is not equal \"\n                    f\"to input images, {len(segs) - 1} vs {len(features)}\"\n                )\n                features = features[: len(segs) - 1]\n            for i, seg in enumerate(segs):\n                if i > 0 and i <= len(features):\n                    image_dim = features[i - 1].shape[0]\n                    begins.append(len(input_ids))\n                    ends.append(begins[-1] + image_dim)\n                    input_ids.extend([IMAGE_DUMMY_TOKEN_INDEX] * image_dim)\n                seg_ids = self._model.tokenizer.encode(\n                    seg, add_bos=((i == 0) and sequence_start)\n                )\n                input_ids.extend(seg_ids)\n            ranges = np.stack([begins, ends], axis=1).tolist()\n            results[\"input_embeddings\"] = features\n            results[\"input_embedding_ranges\"] = ranges\n        else:\n            input_ids = self._model.tokenizer.encode(decorated, add_bos=sequence_start)\n\n        results[\"input_ids\"] = input_ids\n        results[\"prompt\"] = decorated\n\n        return results\n"
  },
  {
    "path": "xinference/model/llm/lmdeploy/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/memory.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# NOTE:\n#\n#   The algorithm is ported from https://github.com/RahulSChand/gpu_poor\n#\n#   Improvement:\n#\n#      The original js code only calculate kv_cache_dtype by float32, instead of most case we run model with float16.\n#\n#   Known Issue:\n#\n#       * On vllm, some MHA model use smaller memory than calculation (qwen1.5-7B-chat-gptq-int4,\n#       qwen1.5-14B-chat-gptq-int4 with large activation_mem).\n#\n#       * On vllm, gemma-it-7B pytorch format model use larger gpu mem than calculation\n\nimport json\nimport math\nfrom dataclasses import dataclass\nfrom logging import getLogger\nfrom math import ceil\nfrom typing import Any, Optional, Union\n\nfrom .llm_family import convert_model_size_to_float\n\nlogger = getLogger(__name__)\n\n\n@dataclass\nclass ModelLayersInfo:\n    vocab_size: int\n    heads: int  # num_attention_heads, num_heads or n_head\n    hidden_dim: int  # hidden_size, d_model, or n_embd\n    inter_dim: int  # intermediate_size, n_inner or d_ff\n    num_layers: int  # num_layers, num_hidden_layers or n_layer\n\n\n@dataclass\nclass ModelMemInfo:\n    \"\"\"Memory required by model, unit in MB\"\"\"\n\n    model_mem: int\n    kv_cache_mem: int\n    activation_mem: int\n    overhead: int\n    total: int\n\n\nQUANT_NORMALIZE = {\n    \"int4\": \"4-bit\",\n    \"int8\": \"8-bit\",\n    \"fp4\": \"4-bit\",\n    \"mxfp4\": \"4-bit\",\n    \"nvfp4\": \"4-bit\",\n    \"fp8\": \"8-bit\",\n    \"4-bit\": \"4-bit\",\n    \"8-bit\": \"8-bit\",\n}\n\nGGUF_MULTI_FACTOR_DICT = {\n    \"q4_0\": 18,\n    \"q4_1\": 20,\n    \"q5_0\": 22,\n    \"q5_1\": 24,\n    \"q8_0\": 34,\n    \"q8_1\": 40,\n}\n\nGGUF_MULTI_FACTOR_DICT_64 = {\n    \"q6_K\": 54.0,\n    \"q3\": 26.0,\n    \"q4\": 38.0,\n    \"q5\": 46.0,\n}\n\nGGUF_MULTI_FACTOR_DICT_COMBINE = {\n    \"q3_K_L\": [38.0, 26.0],\n    \"q3_K_M\": [46.0, 26.0],\n    \"q4_K_S\": [46.0, 38.0],\n    \"q4_K_M\": [54.0, 38.0],\n    \"q5_K_M\": [54.0, 46.0],\n    \"q2_K\": [26.0, 22.0],\n}\n\n\n# Return gpu memory in MB\ndef estimate_llm_gpu_memory(\n    model_size_in_billions: Union[str, int],\n    quantization: Optional[str],\n    context_length: int,  # input+output\n    model_format: str,\n    model_name: Optional[str] = None,\n    kv_cache_dtype: int = 16,\n) -> Optional[ModelMemInfo]:\n    \"\"\"\n    model_size_in_billions: must be str like 1_8 or 46_7, to match llm.\n    \"\"\"\n    info = get_model_layers_info(\n        model_size_in_billions,\n        model_name,\n        model_format,\n        quantization,\n    )\n    if info is None:\n        return None\n    size_in_billions = convert_model_size_to_float(model_size_in_billions)\n    return estimate_llm_gpu_memory_details(\n        info,\n        size_in_billions,\n        quantization,\n        context_length,\n        model_format,\n        kv_cache_dtype,\n    )\n\n\ndef estimate_llm_gpu_memory_details(\n    info: ModelLayersInfo,\n    size_in_billions: float,\n    quantization: Optional[str],\n    context_length: int,  # input+output\n    model_format: str,\n    kv_cache_dtype: int = 16,\n) -> ModelMemInfo:\n    \"\"\"return model_mem, kv_cache, overhead, activation_mem\"\"\"\n    if kv_cache_dtype not in [8, 16, 32]:\n        raise ValueError(f\"Invalid kv_cache_dtype {kv_cache_dtype}\")\n    if kv_cache_dtype == 8:\n        kv_dtype_size = 1\n    elif kv_cache_dtype == 16:\n        kv_dtype_size = 2\n    else:\n        kv_dtype_size = 4\n    overhead = 650.0\n    if model_format == \"ggufv2\":\n        assert quantization is not None and quantization != \"none\"\n        model_size_in_mb = _compute_model_size_gguf(info, quantization)\n        inference_mem = float(\n            context_length * kv_dtype_size * info.hidden_dim * info.num_layers\n        )\n        inference_mem = inference_mem / 1024.0 / 1024.0\n        activation_mem = _compute_inference_only_activation_memory(context_length, info)\n        overhead = overhead + context_length * 0.1\n    else:\n        if quantization is not None:\n            assert isinstance(quantization, str)\n            quantization = QUANT_NORMALIZE[quantization.lower()]\n            assert quantization is not None\n\n        model_size = size_in_billions * 1000000000.0\n        model_size_in_mb = _convert_to_mb_model_size(model_size, quantization)\n        # KV cache\n        inference_mem = float(\n            context_length * 2 * kv_dtype_size * info.hidden_dim * info.num_layers\n        )\n        inference_mem = inference_mem / 1024.0 / 1024.0\n        activation_mem = _compute_inference_only_activation_memory(context_length, info)\n\n    total_mem = ceil(inference_mem + model_size_in_mb + overhead + activation_mem)\n    return ModelMemInfo(\n        model_mem=ceil(model_size_in_mb),\n        kv_cache_mem=ceil(inference_mem),\n        activation_mem=ceil(activation_mem),\n        overhead=ceil(overhead),\n        total=total_mem,\n    )\n\n\ndef _load_item_from_json(config_data: Any, *keys: str) -> str:\n    assert len(keys) > 0\n    for key in keys:\n        v = config_data.get(key)\n        if v is not None:\n            return v\n    raise ValueError(\"load ModelLayersInfo: missing %s\" % (keys[0]))\n\n\ndef load_model_config_json(config_path: str) -> ModelLayersInfo:\n    with open(config_path, \"r\") as f:\n        config_data = json.load(f)\n        return ModelLayersInfo(\n            vocab_size=int(_load_item_from_json(config_data, \"vocab_size\")),\n            heads=int(\n                _load_item_from_json(\n                    config_data, \"num_key_value_heads\", \"num_attention_heads\"\n                )\n            ),\n            hidden_dim=int(\n                _load_item_from_json(config_data, \"hidden_size\", \"d_model\", \"n_embd\")\n            ),\n            inter_dim=int(_load_item_from_json(config_data, \"intermediate_size\")),\n            num_layers=int(\n                _load_item_from_json(\n                    config_data, \"num_hidden_layers\", \"num_layers\", \"n_layer\"\n                )\n            ),\n        )\n\n\ndef get_model_layers_info(\n    model_size_in_billions: Union[str, int],\n    model_name: Optional[str],\n    model_format: Optional[str],\n    quantization: Optional[str],\n) -> Optional[ModelLayersInfo]:\n    from . import match_llm\n    from .llm_family import cache_model_config\n\n    if not model_name:\n        logger.debug(\"get_model_layers_info by default size=%s\", model_size_in_billions)\n        size_in_billions = convert_model_size_to_float(model_size_in_billions)\n        return _get_default_layers_from_size(size_in_billions)\n    llm_family = match_llm(\n        model_name=model_name,\n        model_format=model_format,\n        model_size_in_billions=model_size_in_billions,\n        quantization=quantization,\n    )\n    if not llm_family:\n        return None\n    config_path = cache_model_config(llm_family)\n    return load_model_config_json(config_path)\n\n\ndef _get_default_layers_from_size(size_in_billion: float) -> ModelLayersInfo:\n    if size_in_billion < 5:\n        vocab_size = 32000\n        heads = 32\n        num_layers = 24\n    elif size_in_billion < 10:\n        vocab_size = 32000\n        heads = 32\n        num_layers = 32\n    elif size_in_billion < 24:\n        vocab_size = 32000\n        heads = 40\n        num_layers = 40\n    elif size_in_billion < 55:\n        vocab_size = 32000\n        heads = 60\n        num_layers = 48\n    else:\n        vocab_size = 32000\n        heads = 64\n        num_layers = 80\n\n    model_size = int(size_in_billion * 1000000000)\n    A = num_layers * 4 + 3 * 4 * num_layers\n    B = 2 * vocab_size\n    C = -1 * model_size\n    h = (-B + math.sqrt(B**2 - 4 * A * C)) / (2 * A)\n    h = math.ceil(h)\n    return ModelLayersInfo(\n        vocab_size=vocab_size,\n        heads=heads,\n        hidden_dim=h,\n        inter_dim=4 * h,\n        num_layers=num_layers,\n    )\n\n\ndef _convert_to_mb_model_size(model_size: float, quantization: Optional[str]) -> float:\n    extra = 0.0\n    fB = 2.0\n    size = (model_size * fB) / (1024.0 * 1024.0)\n    # bnb_q4 == 4-bit ?\n    if quantization == \"8-bit\" or quantization == \"4-bit\":\n        extra = 0.06 * size\n    if quantization == \"8-bit\":\n        size = size / 2\n    if quantization == \"4-bit\":\n        size = size / 4\n    return size + extra\n\n\ndef _compute_inference_only_activation_memory(\n    context_length: int, info: ModelLayersInfo\n) -> float:\n    hidden_dim = info.hidden_dim\n    heads = info.heads\n    ret = (\n        (context_length * hidden_dim * 5 * 2 + (context_length**2) * heads * 2)\n        / 1024\n        / 1024\n    )\n    return ret\n\n\ndef _compute_model_size_gguf(info: ModelLayersInfo, quantization: str) -> float:\n    assert quantization is not None\n    vocab_size = info.vocab_size\n    num_layers = info.num_layers\n    hidden_dim = info.hidden_dim\n    inter_dim = info.inter_dim\n    total_params = int(\n        vocab_size * hidden_dim * 2\n        + num_layers * 4 * (hidden_dim**2)\n        + num_layers * 3 * inter_dim * hidden_dim\n    )\n    other_v_down_params = (\n        num_layers * (hidden_dim**2) + num_layers * hidden_dim * inter_dim\n    )\n    other_param_q2k = (\n        total_params - (hidden_dim**2) * num_layers * 2 + 2 * vocab_size * hidden_dim\n    )\n\n    total = 0.0\n    v1 = GGUF_MULTI_FACTOR_DICT.get(quantization)\n    if v1 is not None:\n        total = (v1 * total_params) / (32 * 1024 * 1024)\n    v2 = GGUF_MULTI_FACTOR_DICT_64.get(quantization)\n    if v2 is not None:\n        total = (v2 * total_params) / (64 * 1024 * 1024)\n    v3 = GGUF_MULTI_FACTOR_DICT_COMBINE.get(quantization)\n    if v3 is not None:\n        factors = v3\n        if quantization == \"q2_K\":\n            total = (\n                (total_params - other_param_q2k) * factors[1]\n                + other_param_q2k * factors[0]\n            ) / (64 * 1024 * 1024)\n        else:\n            total = (\n                (total_params - other_v_down_params) * factors[1]\n                + other_v_down_params * factors[0]\n            ) / (64 * 1024 * 1024)\n    return total\n"
  },
  {
    "path": "xinference/model/llm/mlx/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/mlx/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport concurrent.futures\nimport importlib\nimport logging\nimport pathlib\nimport platform\nimport sys\nimport threading\nimport time\nimport uuid\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import (\n    Any,\n    AsyncGenerator,\n    Dict,\n    Iterator,\n    List,\n    Optional,\n    Tuple,\n    TypedDict,\n    Union,\n)\n\nimport xoscar as xo\n\nfrom ....constants import XINFERENCE_MAX_TOKENS\nfrom ....fields import max_tokens_field\nfrom ....types import (\n    ChatCompletion,\n    ChatCompletionChunk,\n    Completion,\n    CompletionChunk,\n    CompletionUsage,\n    LoRA,\n)\nfrom ...utils import check_dependency_available\nfrom ..core import LLM, chat_context_var\nfrom ..llm_family import LLMFamilyV2, LLMSpecV1\nfrom ..utils import (\n    DEEPSEEK_TOOL_CALL_FAMILY,\n    QWEN_TOOL_CALL_FAMILY,\n    ChatModelMixin,\n    generate_completion_chunk,\n)\n\nlogger = logging.getLogger(__name__)\n\n\nclass MLXBatchModel:\n    \"\"\"Wrapper around MLX-LM BatchGenerator for continuous batching.\"\"\"\n\n    # Class-level storage for multiple batch generators keyed by (temperature, top_p)\n    _batch_generators: Dict[Tuple[float, float], Dict[str, Any]] = (\n        {}\n    )  # (temp, top_p) -> {'generator': BatchGenerator, 'queues': dict, 'pending': dict, 'active': set, 'task': task}\n    _model_ref = None\n    _tokenizer_ref = None\n    _batch_size = 4\n    _max_context_length = 2048\n    _stop_tokens: set = set()\n    _lock: Optional[asyncio.Lock] = None  # Will be initialized lazily\n\n    def __init__(\n        self, model, tokenizer, batch_size: int = 4, max_context_length: int = 2048\n    ):\n        # Store references for creating new generators on demand\n        MLXBatchModel._model_ref = model\n        MLXBatchModel._tokenizer_ref = tokenizer\n        MLXBatchModel._batch_size = batch_size\n        MLXBatchModel._max_context_length = max_context_length\n        eos_token_ids = tokenizer.eos_token_ids\n        if isinstance(eos_token_ids, int):\n            eos_token_ids = [eos_token_ids]\n        MLXBatchModel._stop_tokens = set(eos_token_ids or [])\n\n    @staticmethod\n    def _get_lock() -> asyncio.Lock:\n        \"\"\"Get or create the async lock.\"\"\"\n        if MLXBatchModel._lock is None:\n            MLXBatchModel._lock = asyncio.Lock()\n        return MLXBatchModel._lock\n\n    def _get_or_create_generator(self, temperature: float, top_p: float):\n        \"\"\"Get or create a BatchGenerator for the given sampling parameters.\"\"\"\n        key = (round(temperature, 6), round(top_p, 6))\n\n        if key not in MLXBatchModel._batch_generators:\n            logger.info(\n                f\"Creating new BatchGenerator for temperature={temperature}, top_p={top_p}\"\n            )\n            from mlx_lm.generate import BatchGenerator\n            from mlx_lm.sample_utils import make_sampler\n\n            # Create sampler with specific settings\n            sampler = make_sampler(temp=temperature, top_p=top_p)\n\n            # Create batch generator\n            batch_generator = BatchGenerator(\n                model=MLXBatchModel._model_ref,\n                max_tokens=MLXBatchModel._max_context_length,\n                stop_tokens=MLXBatchModel._stop_tokens,\n                sampler=sampler,\n                completion_batch_size=MLXBatchModel._batch_size,\n                prefill_batch_size=1,  # Use 1 for lowest latency\n            )\n\n            MLXBatchModel._batch_generators[key] = {\n                \"generator\": batch_generator,\n                \"queues\": {},  # uid -> asyncio.Queue\n                \"pending\": {},  # uid -> list of results\n                \"active\": set(),  # active uids\n                \"task\": None,\n            }\n\n        return MLXBatchModel._batch_generators[key]\n\n    def _ensure_background_worker(self, gen_dict):\n        \"\"\"Ensure background worker is running for this generator.\"\"\"\n        if gen_dict[\"task\"] is None:\n            loop = asyncio.get_event_loop()\n            gen_dict[\"task\"] = loop.create_task(self._background_worker(gen_dict))\n\n    async def _background_worker(self, gen_dict):\n        \"\"\"Background worker that continuously calls next() and distributes results.\"\"\"\n        key = f\"temp={gen_dict['generator'].sampler}\"\n        logger.info(f\"Starting BatchGenerator background worker for {key}\")\n        batch_generator = gen_dict[\"generator\"]\n\n        while True:\n            try:\n                # Get next batch of results for ALL active requests\n                batch_results = batch_generator.next()\n\n                if not batch_results:\n                    # No active requests, sleep briefly\n                    await asyncio.sleep(0.001)\n                    continue\n\n                # Distribute results to respective request queues\n                async with MLXBatchModel._get_lock():\n                    for result in batch_results:\n                        if result.uid in gen_dict[\"queues\"]:\n                            queue = gen_dict[\"queues\"][result.uid]\n                            # Put result in queue\n                            try:\n                                queue.put_nowait(result)\n                            except asyncio.QueueFull:\n                                logger.warning(f\"Queue full for uid {result.uid}\")\n                        else:\n                            # Queue not ready yet, cache the result\n                            if result.uid not in gen_dict[\"pending\"]:\n                                gen_dict[\"pending\"][result.uid] = []\n                            gen_dict[\"pending\"][result.uid].append(result)\n                            logger.debug(\n                                f\"Cached result for uid {result.uid}, queue not ready yet\"\n                            )\n\n                        # Remove from active requests if finished\n                        if result.finish_reason is not None:\n                            if result.uid in gen_dict[\"active\"]:\n                                gen_dict[\"active\"].remove(result.uid)\n                                logger.debug(\n                                    f\"Request {result.uid} finished, removed from active set\"\n                                )\n\n                # Small delay to prevent busy waiting\n                await asyncio.sleep(0.0001)\n\n            except Exception as e:\n                logger.error(f\"Error in background worker: {e}\", exc_info=True)\n                await asyncio.sleep(0.01)\n\n    async def generate_stream(\n        self,\n        prompt: str,\n        max_tokens: int,\n        temperature: float = 0.0,\n        top_p: float = 1.0,\n        request_id: Optional[str] = None,\n        skip_special_tokens: bool = True,\n    ) -> AsyncGenerator[CompletionChunk, None]:\n        \"\"\"Async stream generate method using BatchGenerator.\"\"\"\n        # Get or create generator for this sampling configuration\n        gen_dict = self._get_or_create_generator(temperature, top_p)\n        batch_generator = gen_dict[\"generator\"]\n\n        # Ensure background worker is running for this generator\n        self._ensure_background_worker(gen_dict)\n\n        # Prepare request\n        assert MLXBatchModel._tokenizer_ref is not None\n        prompt_tokens = MLXBatchModel._tokenizer_ref.encode(prompt)\n        input_echo_len = len(prompt_tokens)\n\n        # Create queue first\n        queue: asyncio.Queue = asyncio.Queue()\n\n        # Insert prompt into batch to get the real uid\n        request_ids = batch_generator.insert([prompt_tokens], max_tokens=max_tokens)\n        inserted_uid = request_ids[0]\n\n        logger.debug(\n            f\"Inserted request {inserted_uid} into batch (temp={temperature}, top_p={top_p})\"\n        )\n\n        # Add to active requests set\n        async with MLXBatchModel._get_lock():\n            gen_dict[\"active\"].add(inserted_uid)\n            gen_dict[\"queues\"][inserted_uid] = queue\n\n            # Check if there are any pending results (early results that arrived before queue was ready)\n            if inserted_uid in gen_dict[\"pending\"]:\n                logger.debug(\n                    f\"Found {len(gen_dict['pending'][inserted_uid])} pending results for uid {inserted_uid}\"\n                )\n                for result in gen_dict[\"pending\"][inserted_uid]:\n                    try:\n                        queue.put_nowait(result)\n                    except asyncio.QueueFull:\n                        logger.warning(\n                            f\"Queue full for uid {inserted_uid} while adding pending results\"\n                        )\n                del gen_dict[\"pending\"][inserted_uid]\n\n        try:\n            # Track generated text\n            generated_tokens = []\n            chunk_id = str(uuid.uuid4())\n            token_count = 0\n\n            # Wait for results from background worker\n            while True:\n                try:\n                    # Wait for result with short timeout (so we can check if request is still active)\n                    result = await asyncio.wait_for(queue.get(), timeout=0.5)\n\n                    if result.token is not None:\n                        generated_tokens.append(result.token)\n                        token_count += 1\n\n                        # Decode current token\n                        assert MLXBatchModel._tokenizer_ref is not None\n                        token_text = MLXBatchModel._tokenizer_ref.decode(\n                            [result.token], skip_special_tokens=skip_special_tokens\n                        )\n                        token_text = token_text.strip(\"�\")\n\n                        # Generate completion chunk\n                        yield generate_completion_chunk(\n                            chunk_text=token_text,\n                            finish_reason=None,\n                            chunk_id=chunk_id,\n                            model_uid=None,\n                            prompt_tokens=input_echo_len,\n                            completion_tokens=token_count,\n                            total_tokens=input_echo_len + token_count,\n                        )\n\n                    # Check if generation is finished\n                    if result.finish_reason is not None:\n                        # Generate final chunk with finish reason\n                        finish_reason = (\n                            \"length\" if result.finish_reason == \"length\" else \"stop\"\n                        )\n                        yield generate_completion_chunk(\n                            chunk_text=\"\",\n                            finish_reason=finish_reason,\n                            chunk_id=chunk_id,\n                            model_uid=None,\n                            prompt_tokens=input_echo_len,\n                            completion_tokens=token_count,\n                            total_tokens=input_echo_len + token_count,\n                        )\n                        logger.debug(\n                            f\"Request {inserted_uid} finished with {finish_reason}\"\n                        )\n                        return\n\n                except asyncio.TimeoutError:\n                    # Check if request is still in active set\n                    async with MLXBatchModel._get_lock():\n                        is_active = inserted_uid in gen_dict[\"active\"]\n\n                    if not is_active:\n                        # Request has finished (removed from active set by background worker)\n                        logger.debug(\n                            f\"Request {inserted_uid} is no longer active, finishing\"\n                        )\n                        return\n                    # Otherwise, continue waiting (request is still being processed)\n\n        except Exception as e:\n            logger.error(f\"Error in generate_stream for request: {e}\", exc_info=True)\n            # Generate error chunk\n            yield generate_completion_chunk(\n                chunk_text=\"\",\n                finish_reason=\"error\",\n                chunk_id=chunk_id,\n                model_uid=None,\n                prompt_tokens=input_echo_len,\n                completion_tokens=token_count,\n                total_tokens=input_echo_len + token_count,\n            )\n        finally:\n            # Clean up queue using the correct uid\n            async with MLXBatchModel._get_lock():\n                if inserted_uid in gen_dict[\"queues\"]:\n                    del gen_dict[\"queues\"][inserted_uid]\n                    logger.debug(f\"Cleaned up queue for uid {inserted_uid}\")\n                # Also clean up any pending results\n                if inserted_uid in gen_dict[\"pending\"]:\n                    del gen_dict[\"pending\"][inserted_uid]\n                # And remove from active set (in case it's still there)\n                if inserted_uid in gen_dict[\"active\"]:\n                    gen_dict[\"active\"].remove(inserted_uid)\n\n    async def generate(\n        self,\n        prompt: str,\n        max_tokens: int,\n        temperature: float = 0.0,\n        top_p: float = 1.0,\n        stream: bool = False,\n        skip_special_tokens: bool = True,\n    ) -> str:\n        \"\"\"Async generate method using BatchGenerator.\"\"\"\n        # Non-streaming: collect all tokens\n        result_text = \"\"\n        async for chunk in self.generate_stream(\n            prompt=prompt,\n            max_tokens=max_tokens,\n            temperature=temperature,\n            top_p=top_p,\n            request_id=None,\n            skip_special_tokens=skip_special_tokens,\n        ):\n            if chunk.get(\"choices\") and len(chunk[\"choices\"]) > 0:\n                result_text += chunk[\"choices\"][0].get(\"text\", \"\")\n        return result_text\n\n\nclass MLXModelConfig(TypedDict, total=False):\n    revision: Optional[str]\n    max_gpu_memory: str\n    trust_remote_code: bool\n    reasoning_content: bool\n    # distributed\n    address: Optional[str]\n    shard: Optional[int]\n    n_worker: Optional[int]\n    # batch configuration\n    allow_batch: bool\n    batch_size: int\n\n\nclass MLXGenerateConfig(TypedDict, total=False):\n    max_tokens: int\n    temperature: float\n    repetition_penalty: Optional[float]\n    repetition_context_size: Optional[float]\n    top_p: float\n    logit_bias: Optional[Dict[int, float]]\n    stop: Optional[Union[str, List[str]]]\n    stop_token_ids: Optional[Union[int, List[int]]]\n    stream: bool\n    stream_options: Optional[Union[dict, None]]\n    tools: Optional[List[Dict]]\n    lora_name: Optional[str]\n\n\n@dataclass\nclass PromptCache:\n    cache: List[Any] = field(default_factory=list)\n    model_key: Tuple[str, Optional[str]] = (\"\", None)\n    tokens: List[int] = field(default_factory=list)\n\n\ndef get_context_length(config: dict) -> int:\n    \"\"\"Get the context length of a model from model config.\"\"\"\n    if config.get(\"max_sequence_length\") is not None:\n        max_sequence_length = config[\"max_sequence_length\"]\n    else:\n        max_sequence_length = 2048\n    if config.get(\"seq_length\") is not None:\n        seq_length = config[\"seq_length\"]\n    else:\n        seq_length = 2048\n    if config.get(\"max_position_embeddings\") is not None:\n        max_position_embeddings = config[\"max_position_embeddings\"]\n    else:\n        max_position_embeddings = 2048\n    return max(max_sequence_length, seq_length, max_position_embeddings)\n\n\nclass MLXModel(LLM):\n    _rank_to_addresses: Optional[Dict[int, str]]\n    allow_batch: bool = False\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        model_config: Optional[MLXModelConfig] = None,\n        peft_model: Optional[List[LoRA]] = None,\n    ):\n        super().__init__(model_uid, model_family, model_path)\n        self._use_fast_tokenizer = True\n        self._model_config: MLXModelConfig = self._sanitize_model_config(model_config)\n        self._context_length: Optional[int] = None\n        # for distributed\n        assert model_config is not None\n        self._address = model_config.pop(\"address\", None)\n        self._n_worker = model_config.pop(\"n_worker\", 1)\n        self._shard = model_config.pop(\"shard\", 0)\n        self._driver_info = model_config.pop(\"driver_info\", None)  # type: ignore\n        self._rank_to_addresses = None\n        self._loading_thread = None\n        self._loading_error = None\n        self._all_worker_started = asyncio.Event()\n        self._max_kv_size = None\n        self._prompt_cache = None\n        if peft_model is not None:\n            raise ValueError(\"MLX engine has not supported lora yet\")\n        # used to call async\n        self._loop = None\n        self._batch_model = None\n\n    def set_loop(self, loop: asyncio.AbstractEventLoop):\n        # loop will be passed into ModelWrapper,\n        # to call aynsc method with asyncio.run_coroutine_threadsafe\n        self._loop = loop  # type: ignore\n\n    def _cleanup_memory(self):\n        import gc\n\n        import mlx.core as mx\n\n        # mandatory recycling\n        gc.collect()\n        # clear the MLX cache\n        mx.clear_cache()\n\n    @property\n    def driver_info(self) -> Optional[dict]:\n        return self._driver_info\n\n    def set_shard_info(self, shard: int, address: str):\n        # set shard info to rank 0\n        if self._rank_to_addresses is None:\n            self._rank_to_addresses = {}\n        self._rank_to_addresses[shard] = address\n        if len(self._rank_to_addresses) == self._n_worker:\n            self._all_worker_started.set()\n\n    async def get_rank_addresses(self) -> Optional[Dict[int, str]]:\n        await self._all_worker_started.wait()\n        return self._rank_to_addresses\n\n    def _sanitize_model_config(\n        self, model_config: Optional[MLXModelConfig]\n    ) -> MLXModelConfig:\n        if model_config is None:\n            model_config = MLXModelConfig()\n        model_config.setdefault(\"revision\", self.model_spec.model_revision)\n        model_config.setdefault(\"trust_remote_code\", True)\n        model_config.setdefault(\"reasoning_content\", False)\n        return model_config\n\n    def _sanitize_generate_config(\n        self,\n        generate_config: Optional[MLXGenerateConfig],\n    ) -> MLXGenerateConfig:\n        if generate_config is None:\n            generate_config = MLXGenerateConfig()\n\n        # default config is adapted from\n        # https://github.com/ml-explore/mlx-examples/blob/f212b770d8b5143e23102eda20400ae43340f844/llms/mlx_lm/utils.py#L129\n        generate_config.setdefault(\"temperature\", 0.0)\n        generate_config.setdefault(\"logit_bias\", None)\n        generate_config.setdefault(\"repetition_penalty\", None)\n        generate_config.setdefault(\"repetition_context_size\", 20)\n        generate_config.setdefault(\"top_p\", 1.0)\n\n        max_tokens = max_tokens_field.default or XINFERENCE_MAX_TOKENS\n        if not generate_config.get(\"max_tokens\") and max_tokens:\n            generate_config[\"max_tokens\"] = max_tokens  # type: ignore\n        return generate_config\n\n    def _load_model(self, **kwargs):\n        try:\n            import mlx.core as mx\n            from mlx_lm import load\n        except ImportError:\n            error_message = \"Failed to import module 'mlx_lm'\"\n            installation_guide = [\n                \"Please make sure 'mlx_lm' is installed. \",\n                \"You can install it by `pip install mlx_lm`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        tokenizer_config = dict(\n            use_fast=self._use_fast_tokenizer,\n            trust_remote_code=kwargs[\"trust_remote_code\"],\n            revision=kwargs[\"revision\"],\n        )\n        logger.debug(\n            \"loading model with tokenizer config: %s, model config: %s\",\n            tokenizer_config,\n            self._model_config,\n        )\n\n        cache_limit_gb = kwargs.get(\"cache_limit_gb\", None)\n        if cache_limit_gb:\n            logger.debug(f\"Setting cache limit to {cache_limit_gb} GB\")\n            mx.metal.set_cache_limit(cache_limit_gb * 1024 * 1024 * 1024)\n\n        self._max_kv_size = kwargs.get(\"max_kv_size\", None)\n        self._prompt_cache = PromptCache()\n\n        model, tokenizer = load(\n            self.model_path,\n            tokenizer_config=tokenizer_config,\n            model_config=self._model_config,\n        )\n        if stop_token_ids := self.model_family.stop_token_ids:\n            for stop_token_id in stop_token_ids:\n                tokenizer.add_eos_token(stop_token_id)\n\n        # Store model and tokenizer for batch model creation later\n        self._model = model\n        self._tokenizer = tokenizer\n\n        return model, tokenizer\n\n    def _load_model_shard(self, **kwargs):\n        try:\n            import mlx.core as mx\n            from mlx_lm.utils import load_model, load_tokenizer\n        except ImportError:\n            error_message = \"Failed to import module 'mlx_lm'\"\n            installation_guide = [\n                \"Please make sure 'mlx_lm' is installed. \",\n                \"You can install it by `pip install mlx_lm`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        # Ensure some attributes correctly inited by model actor\n        assert (\n            self._loop is not None and self._rank_to_addresses is not None\n        ), \"Service not started correctly\"\n\n        tokenizer_config = dict(\n            use_fast=self._use_fast_tokenizer,\n            trust_remote_code=kwargs[\"trust_remote_code\"],\n            revision=kwargs[\"revision\"],\n        )\n        logger.debug(\n            \"loading model with tokenizer config: %s, model config: %s, shard: %d, n_worker: %d\",\n            tokenizer_config,\n            self._model_config,\n            self._shard,\n            self._n_worker,\n        )\n\n        cache_limit_gb = kwargs.get(\"cache_limit_gb\", None)\n        if cache_limit_gb:\n            logger.debug(f\"Setting cache limit to {cache_limit_gb} GB\")\n            mx.metal.set_cache_limit(cache_limit_gb * 1024 * 1024 * 1024)\n\n        self._max_kv_size = kwargs.get(\"max_kv_size\", None)\n        self._prompt_cache = PromptCache()\n\n        self._model, config = load_model(\n            pathlib.Path(self.model_path),\n            lazy=True,\n            get_model_classes=self._get_classes,\n        )\n        model = self._model.model\n        model.rank = self._shard\n        model.world_size = self._n_worker\n        model.model_uid = self.model_uid\n        model.loop = self._loop\n        model.address = self._address\n        model.rank_to_addresses = self._rank_to_addresses\n\n        # create actors and so forth\n        model.prepare()\n        # real load the partial weights\n        model.pipeline()\n        mx.eval(model.parameters())\n\n        self._tokenizer = load_tokenizer(\n            pathlib.Path(self.model_path),\n            tokenizer_config,\n            eos_token_ids=config.get(\"eos_token_id\", None),\n        )\n\n    @staticmethod\n    def _get_classes(config: dict):\n        \"\"\"\n        Retrieve the model and model args classes based on the configuration\n        that supported distributed inference.\n\n        Args:\n            config (dict): The model configuration.\n\n        Returns:\n            A tuple containing the Model class and the ModelArgs class.\n        \"\"\"\n        from mlx_lm.utils import MODEL_REMAPPING\n\n        model_type = config[\"model_type\"]\n        model_type = MODEL_REMAPPING.get(model_type, model_type)\n        try:\n            arch = importlib.import_module(\n                f\"xinference.model.llm.mlx.distributed_models.{model_type}\"\n            )\n        except ImportError:\n            msg = f\"Model type {model_type} not supported for distributed inference.\"\n            logger.error(msg)\n            raise ValueError(msg)\n\n        return arch.Model, arch.ModelArgs\n\n    def load(self):\n        reasoning_content = self._model_config.pop(\"reasoning_content\")\n        enable_thinking = self._model_config.pop(\"enable_thinking\", True)\n        self.prepare_parse_reasoning_content(\n            reasoning_content, enable_thinking=enable_thinking\n        )\n        self.prepare_parse_tool_calls()\n\n        kwargs = {}\n        kwargs[\"revision\"] = self._model_config.get(\n            \"revision\", self.model_spec.model_revision\n        )\n        kwargs[\"trust_remote_code\"] = self._model_config.get(\"trust_remote_code\")\n        kwargs[\"cache_limit_gb\"] = self._model_config.pop(\"cache_limit_gb\", None)\n\n        if self._n_worker <= 1:\n            self._model, self._tokenizer = self._load_model(**kwargs)\n        else:\n\n            def _load():\n                try:\n                    if self._shard == 0:\n                        self._driver_info = {\"address\": self._address}\n                        self.set_shard_info(0, self._address)\n                    else:\n                        assert self._driver_info is not None\n                        driver_address = self._driver_info[\"address\"]\n\n                        async def wait_for_all_shards():\n                            model_ref = await xo.actor_ref(\n                                address=driver_address, uid=self.raw_model_uid\n                            )\n                            # set shard info\n                            await model_ref.set_shard_info(self._shard, self._address)\n                            # wait for all shards\n                            self._rank_to_addresses = (\n                                await model_ref.get_rank_addresses()\n                            )\n\n                        asyncio.run_coroutine_threadsafe(\n                            wait_for_all_shards(), self._loop\n                        ).result()\n\n                    self._load_model_shard(**kwargs)\n                except Exception:\n                    logger.exception(\"Loading mlx shard model failed\")\n                    self._loading_error = sys.exc_info()\n\n            # distributed inference\n            self._loading_thread = threading.Thread(target=_load)\n            self._loading_thread.start()\n\n    def wait_for_load(self):\n        from mlx_lm.utils import load_config\n\n        if self._loading_thread:\n            self._loading_thread.join()\n            if self._loading_error:\n                _, err, tb = self._loading_error\n                raise err.with_traceback(tb)\n\n        # get context length\n        config = load_config(Path(self.model_path))\n        config.update(self._model_config)\n        self._context_length = get_context_length(config)\n\n        # Update allow_batch based on distributed inference\n        # Only enable continuous batching for non-distributed inference (single worker)\n        n_worker = self._n_worker if self._n_worker is not None else 1\n        if self.__class__.allow_batch and n_worker > 1:\n            # Distributed inference: disable continuous batching\n            self.allow_batch = False\n\n        # Create MLXBatchModel for continuous batching after context length is available\n        # Only enable continuous batching for non-distributed inference (single worker)\n        if (\n            self._batch_model is None\n            and hasattr(self, \"_model\")\n            and hasattr(self, \"_tokenizer\")\n            and self.allow_batch  # Check instance-level allow_batch\n        ):\n            batch_size = self._model_config.get(\"batch_size\", 4)\n            self._batch_model = MLXBatchModel(\n                model=self._model,\n                tokenizer=self._tokenizer,\n                batch_size=batch_size,\n                max_context_length=self._context_length,\n            )\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"mlx_lm\", \"mlx_lm\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"mlx\"]:\n            return False, \"MLX base engine only supports mlx format\"\n        if sys.platform != \"darwin\" or platform.processor() != \"arm\":\n            return False, \"MLX base engine only works on Apple silicon Macs\"\n        if \"generate\" not in llm_family.model_ability:\n            return False, \"MLX base engine requires generate ability\"\n        if \"chat\" in llm_family.model_ability or \"vision\" in llm_family.model_ability:\n            return False, \"MLX base engine does not handle chat or vision models\"\n        return True\n\n    def _get_prompt_cache(\n        self, prompt, lora_name: Optional[str] = None, model: Any = None\n    ):\n        from mlx_lm.models.cache import make_prompt_cache\n\n        assert self._prompt_cache is not None\n        cache_len = len(self._prompt_cache.tokens)\n        model_key = (self.model_path, lora_name)\n        if (\n            self._prompt_cache.model_key != model_key\n            or cache_len >= len(prompt)\n            or self._prompt_cache.tokens != prompt[:cache_len]\n        ):\n            self._prompt_cache.model_key = model_key\n            self._prompt_cache.cache = make_prompt_cache(\n                model or self._model, self._max_kv_size\n            )\n            self._prompt_cache.tokens = []\n            logger.debug(\"Making new prompt cache for %s\", self.model_uid)\n        else:\n            prompt = prompt[cache_len:]\n            logger.debug(\"Cache hit for %s\", self.model_uid)\n        self._prompt_cache.tokens.extend(prompt)\n        return prompt\n\n    def _generate_stream_inner(self, **kwargs):\n        try:\n            from mlx_lm.utils import (\n                make_logits_processors,\n                make_sampler,\n                stream_generate,\n            )\n        except ImportError:\n            # for mlx-lm >= 0.22.3\n            from mlx_lm.generate import stream_generate\n            from mlx_lm.sample_utils import make_logits_processors, make_sampler\n\n        sampler = make_sampler(\n            temp=kwargs.pop(\"temperature\"), top_p=kwargs.pop(\"top_p\")\n        )\n        prompt_token_ids = kwargs.pop(\"prompt_token_ids\")\n        logits_processors = make_logits_processors(\n            logit_bias=kwargs.pop(\"logits_bias\", None),\n            repetition_penalty=kwargs.pop(\"repetition_penalty\"),\n            repetition_context_size=kwargs.pop(\"repetition_context_size\"),\n        )\n        try:\n            yield from stream_generate(\n                self._model,\n                self._tokenizer,\n                prompt_token_ids,\n                sampler=sampler,\n                logits_processors=logits_processors,\n                **kwargs,\n            )\n        finally:\n            # after completing the inference, clear the memory.\n            self._cleanup_memory()\n\n    def _prepare_inputs(\n        self, prompt: Union[str, Dict[str, Any]], kwargs\n    ) -> Tuple[Any, int]:\n        prompt_token_ids = self._tokenizer.encode(prompt)\n        prompt_token_ids = self._get_prompt_cache(\n            prompt_token_ids, kwargs.get(\"lora_name\")\n        )\n        return prompt_token_ids, len(prompt_token_ids)\n\n    def _generate_stream(\n        self, prompt: Union[str, Dict[str, Any]], kwargs: MLXGenerateConfig\n    ):\n        model_uid = self.model_uid\n        tokenizer = self._tokenizer\n        max_tokens = kwargs[\"max_tokens\"]\n        chunk_id = str(uuid.uuid4())\n        stop_token_ids = kwargs.get(\"stop_token_ids\", [])\n        stream = kwargs.get(\"stream\", False)\n        stream_options = kwargs.pop(\"stream_options\", None)\n        include_usage = (\n            stream_options[\"include_usage\"]\n            if isinstance(stream_options, dict)\n            else False\n        )\n\n        prompt_token_ids, input_echo_len = self._prepare_inputs(prompt, kwargs)\n\n        if max_tokens is None:\n            # not set max_tokens\n            max_tokens = self._context_length - input_echo_len\n            logger.debug(\"No max_tokens set, setting to: %s\", max_tokens)\n\n        i = 0\n        start = time.time()\n        tokens = []\n        # For VLM models, let generate_step handle cache creation internally\n        # to avoid incompatible cache types between mlx_lm and mlx_vlm\n        stream_kwargs = {\n            \"prompt_token_ids\": prompt_token_ids,\n            \"max_tokens\": max_tokens,\n            \"temperature\": kwargs[\"temperature\"],\n            \"top_p\": kwargs[\"top_p\"],\n            \"repetition_penalty\": kwargs[\"repetition_penalty\"],\n            \"repetition_context_size\": kwargs[\"repetition_context_size\"],\n            \"stop_token_ids\": stop_token_ids,\n            # Don't pass prompt_cache for VLM models to let mlx_vlm handle it\n        }\n\n        for i, chunk_resp in enumerate(self._generate_stream_inner(**stream_kwargs)):\n            token = chunk_resp.token\n            tokens.append(token)\n\n            out = chunk_resp.text\n            if stream:\n                # this special character is mainly for qwen\n                out = out.strip(\"\")\n\n            # MINIMAL FIX: Always yield the delta (out) rather than an accumulated output.\n            # This prevents the calling generate() method from double-accumulating text.\n\n            completion_usage = CompletionUsage(\n                prompt_tokens=input_echo_len,\n                completion_tokens=i,\n                total_tokens=(input_echo_len + i),\n            )\n\n            yield generate_completion_chunk(\n                chunk_text=out,\n                finish_reason=None,\n                chunk_id=chunk_id,\n                model_uid=model_uid,\n                prompt_tokens=input_echo_len,\n                completion_tokens=i,\n                total_tokens=(input_echo_len + i),\n            ), completion_usage\n\n            if token == tokenizer.eos_token_id or token in stop_token_ids:  # type: ignore\n                break\n\n        logger.info(\n            f\"Average generation speed: {i / (time.time() - start):.2f} tokens/s.\"\n        )\n\n        if self._prompt_cache:\n            self._prompt_cache.tokens.extend(tokens)  # type: ignore\n\n        if i == max_tokens - 1:\n            finish_reason = \"length\"\n        else:\n            finish_reason = \"stop\"\n\n        completion_usage = CompletionUsage(\n            prompt_tokens=input_echo_len,\n            completion_tokens=i,\n            total_tokens=(input_echo_len + i),\n        )\n        yield generate_completion_chunk(\n            \"\",\n            finish_reason=finish_reason,\n            chunk_id=chunk_id,\n            model_uid=model_uid,\n            prompt_tokens=input_echo_len,\n            completion_tokens=i,\n            total_tokens=(input_echo_len + i),\n        ), completion_usage\n\n        if include_usage:\n            completion_chunk = CompletionChunk(\n                id=chunk_id,\n                object=\"text_completion\",\n                created=int(time.time()),\n                model=model_uid,\n                choices=[],\n            )\n            yield completion_chunk, completion_usage\n\n    def _run_non_drivers(\n        self, method: str, stream: bool, *args, **kwargs\n    ) -> Optional[concurrent.futures.Future]:\n        assert self._n_worker is not None and self._shard is not None\n        if self._n_worker == 1 or self._shard > 0:\n            # only run for distributed driver\n            return None\n\n        async def run_other_shard(shard: int):\n            assert self._rank_to_addresses is not None\n            address = self._rank_to_addresses[shard]\n            model_actor_ref = await xo.actor_ref(\n                address=address, uid=self.raw_model_uid\n            )\n            # we don't actually need to get the result from shard >= 1\n            if stream:\n                async for _ in await getattr(model_actor_ref, method)(*args, **kwargs):\n                    pass\n            else:\n                await getattr(model_actor_ref, method)(*args, **kwargs)\n\n        async def run_non_driver_shards():\n            logger.debug(\"Start to run non driver %s\", method)\n            coros = []\n            for rank in range(1, self._n_worker):\n                coros.append(run_other_shard(rank))\n            await asyncio.gather(*coros)\n\n        assert self._loop is not None\n        return asyncio.run_coroutine_threadsafe(run_non_driver_shards(), self._loop)\n\n    async def async_generate(\n        self,\n        prompt: Union[str, Dict[str, Any]],\n        generate_config: Optional[MLXGenerateConfig] = None,\n        request_id: Optional[str] = None,\n    ) -> Union[Completion, AsyncGenerator[CompletionChunk, None]]:\n        logger.debug(\n            \"Enter async_generate, prompt: %s, generate config: %s\",\n            prompt,\n            generate_config,\n        )\n\n        generate_config = self._sanitize_generate_config(generate_config)\n\n        assert self._model is not None\n        assert self._tokenizer is not None\n\n        stream = generate_config.get(\"stream\", False)\n\n        # If batch model is available (non-distributed inference), use continuous batching\n        if self._batch_model is not None:\n            # Extract prompt text\n            if isinstance(prompt, dict):\n                prompt_text = prompt.get(\"prompt\", \"\")\n            else:\n                prompt_text = prompt\n\n            # Handle max_tokens - use auto-calculation if not set\n            max_tokens = generate_config.get(\"max_tokens\")\n            if max_tokens is None:\n                # Calculate max_tokens automatically based on context length and prompt length\n                prompt_tokens = self._tokenizer.encode(prompt_text)\n                input_echo_len = len(prompt_tokens)\n                max_tokens = self._context_length - input_echo_len\n                logger.debug(\n                    f\"Auto-calculated max_tokens: {max_tokens} (context_length: {self._context_length}, input_echo_len: {input_echo_len})\"\n                )\n\n            if stream:\n                # Return async generator for streaming\n                async def stream_generator():\n                    async for chunk in self._batch_model.generate_stream(\n                        prompt=prompt_text,\n                        max_tokens=max_tokens,\n                        temperature=generate_config.get(\"temperature\", 1.0),\n                        top_p=generate_config.get(\"top_p\", 1.0),\n                        request_id=request_id or str(uuid.uuid4()),\n                        skip_special_tokens=generate_config.get(\n                            \"skip_special_tokens\", True\n                        ),\n                    ):\n                        # Set model_uid for each chunk\n                        if hasattr(chunk, \"get\"):\n                            chunk[\"model\"] = self.model_uid\n                            if chunk.get(\"choices\") and len(chunk[\"choices\"]) > 0:\n                                chunk[\"choices\"][0][\"index\"] = 0\n                        yield chunk\n\n                return stream_generator()\n            else:\n                # Non-streaming: get full result and return completion\n                result = await self._batch_model.generate(\n                    prompt=prompt_text,\n                    max_tokens=max_tokens,\n                    temperature=generate_config.get(\"temperature\", 1.0),\n                    top_p=generate_config.get(\"top_p\", 1.0),\n                    stream=False,\n                    skip_special_tokens=generate_config.get(\n                        \"skip_special_tokens\", True\n                    ),\n                )\n\n                # Return completion object\n                completion = Completion(\n                    id=str(uuid.uuid4()),\n                    object=\"text_completion\",\n                    created=int(time.time()),\n                    model=self.model_uid,\n                    choices=[\n                        {\n                            \"text\": str(result),\n                            \"index\": 0,\n                            \"logprobs\": None,\n                            \"finish_reason\": \"stop\",\n                        }\n                    ],\n                    usage=CompletionUsage(\n                        prompt_tokens=len(prompt_text),\n                        completion_tokens=len(str(result)),\n                        total_tokens=len(prompt_text) + len(str(result)),\n                    ),\n                )\n                return completion\n\n        # Fallback to original implementation for distributed inference\n        # For distributed inference, use _generate_stream which doesn't use BatchGenerator\n        if stream:\n\n            async def stream_generator():\n                loop = asyncio.get_event_loop()\n                chunk_iterator = await loop.run_in_executor(\n                    None, self._generate_stream, prompt, generate_config\n                )\n                for chunk, usage in chunk_iterator:\n                    chunk[\"model\"] = self.model_uid\n                    yield chunk\n\n            return stream_generator()\n        else:\n            # Non-streaming: collect all chunks and return completion\n            loop = asyncio.get_event_loop()\n            chunk_iterator = await loop.run_in_executor(\n                None, self._generate_stream, prompt, generate_config\n            )\n\n            text = \"\"\n            finish_reason = None\n            usage: Optional[CompletionUsage] = None\n            for chunk, chunk_usage in chunk_iterator:\n                if chunk.get(\"choices\") and len(chunk[\"choices\"]) > 0:\n                    text += chunk[\"choices\"][0].get(\"text\", \"\")\n                    finish_reason = chunk[\"choices\"][0].get(\"finish_reason\")\n                usage = chunk_usage\n\n            return Completion(\n                id=str(uuid.uuid4()),\n                object=\"text_completion\",\n                created=int(time.time()),\n                model=self.model_uid,\n                choices=[\n                    {\n                        \"text\": text,\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": finish_reason,\n                    }\n                ],\n                usage=(\n                    usage\n                    if usage is not None\n                    else CompletionUsage(\n                        prompt_tokens=0, completion_tokens=0, total_tokens=0\n                    )\n                ),\n            )\n\n\nclass MLXChatModel(MLXModel, ChatModelMixin):\n    allow_batch: bool = True\n\n    def _sanitize_generate_config(\n        self,\n        generate_config: Optional[MLXGenerateConfig],\n    ) -> MLXGenerateConfig:\n        generate_config = super()._sanitize_generate_config(generate_config)\n        if (not generate_config.get(\"stop\")) and self.model_family.stop:\n            generate_config[\"stop\"] = self.model_family.stop.copy()\n        if (\n            generate_config.get(\"stop_token_ids\", None) is None\n            and self.model_family.stop_token_ids\n        ):\n            generate_config[\"stop_token_ids\"] = self.model_family.stop_token_ids.copy()\n\n        return generate_config\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"mlx\"]:\n            return False, \"MLX chat engine only supports mlx format\"\n        if sys.platform != \"darwin\" or platform.processor() != \"arm\":\n            return False, \"MLX chat engine only works on Apple silicon Macs\"\n        if \"chat\" not in llm_family.model_ability:\n            return False, \"MLX chat engine requires chat ability\"\n        if \"vision\" in llm_family.model_ability:\n            return False, \"MLX chat engine does not support vision models\"\n        return True\n\n    async def async_chat(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[MLXGenerateConfig] = None,\n        request_id: Optional[str] = None,\n    ) -> Union[ChatCompletion, AsyncGenerator[ChatCompletionChunk, None]]:\n        model_family = self.model_family.model_family or self.model_family.model_name\n        tools = generate_config.pop(\"tools\", []) if generate_config else None\n        chat_template_kwargs = (\n            self._get_chat_template_kwargs_from_generate_config(\n                generate_config, self.reasoning_parser\n            )\n            or {}\n        )\n        chat_context_var.set(chat_template_kwargs)\n        full_context_kwargs = chat_template_kwargs.copy()\n        if tools:\n            if (\n                model_family in QWEN_TOOL_CALL_FAMILY\n                or model_family in DEEPSEEK_TOOL_CALL_FAMILY\n            ):\n                full_context_kwargs[\"tools\"] = tools\n        assert self.model_family.chat_template is not None\n        full_prompt = self.get_full_context(\n            messages, self.model_family.chat_template, **full_context_kwargs\n        )\n\n        generate_config = self._sanitize_generate_config(generate_config)\n\n        stream = generate_config.get(\"stream\", False)\n        if stream:\n            # Use async_generate for streaming\n            chunks = await self.async_generate(full_prompt, generate_config)\n            assert hasattr(\n                chunks, \"__aiter__\"\n            ), \"async_generate should return AsyncGenerator for streaming\"\n            # Type narrowing: we know chunks is an AsyncGenerator when stream=True\n            return self._async_to_chat_completion_chunks(\n                chunks,  # type: ignore[arg-type]\n                self.reasoning_parser,\n                chat_template_kwargs,\n            )\n        else:\n            # Use async_generate for non-streaming\n            c = await self.async_generate(full_prompt, generate_config)\n            assert not hasattr(\n                c, \"__aiter__\"\n            ), \"async_generate should return Completion for non-streaming\"\n            if tools:\n                return self._post_process_completion(\n                    self.model_family, self.model_uid, c\n                )\n            return self._to_chat_completion(c, self.reasoning_parser)\n\n\nclass MLXVisionModel(MLXModel, ChatModelMixin):\n    allow_batch: bool = False\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"mlx_vlm\", \"mlx_vlm\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"mlx\"]:\n            return False, \"MLX vision engine only supports mlx format\"\n        if sys.platform != \"darwin\" or platform.processor() != \"arm\":\n            return False, \"MLX vision engine only works on Apple silicon Macs\"\n        if \"vision\" not in llm_family.model_ability:\n            return False, \"MLX vision engine requires vision ability\"\n        return True\n\n    def generate(\n        self,\n        prompt: Union[str, Dict[str, Any]],\n        generate_config: Optional[MLXGenerateConfig] = None,\n        from_chat: bool = False,\n    ) -> Union[Completion, Iterator[CompletionChunk]]:\n        \"\"\"Generate method for vision models (not using continuous batching).\"\"\"\n        generate_config = self._sanitize_generate_config(generate_config)\n\n        assert self._model is not None\n        assert self._tokenizer is not None\n\n        stream = generate_config.get(\"stream\", False)\n\n        if stream:\n            # _generate_stream yields (chunk, usage) tuples; unwrap for the caller\n            # so that _to_chat_completion_chunks receives plain CompletionChunk objects.\n            def _unwrap():\n                for chunk, _usage in self._generate_stream(prompt, generate_config):\n                    yield chunk\n\n            return _unwrap()\n        else:\n            # Non-streaming: collect all chunks and return completion\n            text = \"\"\n            finish_reason = None\n            usage: Optional[CompletionUsage] = None\n            for chunk, chunk_usage in self._generate_stream(prompt, generate_config):\n                if chunk.get(\"choices\") and len(chunk[\"choices\"]) > 0:\n                    text += chunk[\"choices\"][0].get(\"text\", \"\")\n                    finish_reason = chunk[\"choices\"][0].get(\"finish_reason\")\n                usage = chunk_usage\n\n            return Completion(\n                id=str(uuid.uuid4()),\n                object=\"text_completion\",\n                created=int(time.time()),\n                model=self.model_uid,\n                choices=[\n                    {\n                        \"text\": text,\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": finish_reason,\n                    }\n                ],\n                usage=(\n                    usage\n                    if usage is not None\n                    else CompletionUsage(\n                        prompt_tokens=0, completion_tokens=0, total_tokens=0\n                    )\n                ),\n            )\n\n    def wait_for_load(self):\n        \"\"\"Override parent wait_for_load to skip MLXBatchModel creation.\"\"\"\n        if self._loading_thread:\n            self._loading_thread.join()\n            if self._loading_error:\n                _, err, tb = self._loading_error\n                raise err.with_traceback(tb)\n\n    def _load_model(self, **kwargs):\n        try:\n            from mlx_vlm import load\n        except ImportError:\n            error_message = \"Failed to import module 'mlx_vlm'\"\n            installation_guide = [\n                \"Please make sure 'mlx_vlm' is installed. \",\n                \"You can install it by `pip install mlx_vlm`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        self._prompt_cache = PromptCache()\n\n        return load(self.model_path)\n\n    def load(self):\n        from mlx_lm.utils import load_config\n\n        if self._n_worker > 1:\n            raise NotImplementedError(\n                \"Distributed inference is not supported for vision models\"\n            )\n\n        kwargs = {}\n        kwargs[\"revision\"] = self._model_config.get(\n            \"revision\", self.model_spec.model_revision\n        )\n        kwargs[\"trust_remote_code\"] = self._model_config.get(\"trust_remote_code\")\n        kwargs[\"cache_limit_gb\"] = self._model_config.pop(\"cache_limit_gb\", None)\n\n        self._model, self._processor = self._load_model(**kwargs)\n        self._tokenizer = self._processor.tokenizer\n\n        # get context length\n        config = load_config(Path(self.model_path))\n        config.update(self._model_config)\n        self._context_length = get_context_length(config)\n\n    def _generate_stream_inner(self, **kwargs):\n        import mlx.core as mx\n\n        try:\n            from mlx_lm.utils import GenerationResponse\n        except ImportError:\n            # for mlx-lm >= 0.22.3\n            from mlx_lm.generate import GenerationResponse\n        from mlx_vlm.generate import generate_step\n\n        inputs = kwargs.pop(\"prompt_token_ids\")\n        stop_token_ids = kwargs.pop(\"stop_token_ids\", [])\n\n        extra_kwargs = kwargs.copy()\n        input_ids, pixel_values, mask, kwargs = inputs\n        kwargs.update(extra_kwargs)\n\n        tokenizer = self._processor.tokenizer\n        detokenizer = self._processor.detokenizer\n\n        detokenizer.reset()\n        tic = time.perf_counter()\n        try:\n            for n, (token, logprobs) in enumerate(\n                generate_step(input_ids, self._model, pixel_values, mask, **kwargs),\n            ):\n                if n == 0:\n                    prompt_time = time.perf_counter() - tic\n                    prompt_tps = len(input_ids) / prompt_time\n                    tic = time.perf_counter()\n                if token == tokenizer.eos_token_id or token in stop_token_ids:\n                    break\n                detokenizer.add_token(token)\n\n                # Yield the last segment if streaming\n                yield GenerationResponse(\n                    text=detokenizer.last_segment,\n                    token=token,\n                    logprobs=logprobs,\n                    from_draft=False,\n                    prompt_tokens=len(input_ids),\n                    prompt_tps=prompt_tps,\n                    generation_tokens=n + 1,\n                    generation_tps=(n + 1) / (time.perf_counter() - tic),\n                    peak_memory=mx.metal.get_peak_memory() / 1e9,\n                )\n\n            detokenizer.finalize()\n            yield GenerationResponse(\n                text=detokenizer.last_segment,\n                token=token,\n                logprobs=logprobs,\n                from_draft=False,\n                prompt_tokens=len(input_ids),\n                prompt_tps=prompt_tps,\n                generation_tokens=n + 1,\n                generation_tps=(n + 1) / (time.perf_counter() - tic),\n                peak_memory=mx.metal.get_peak_memory() / 1e9,\n            )\n        finally:\n            # after completing the inference, clear the memory\n            self._cleanup_memory()\n\n    def _prepare_inputs(\n        self, prompt: Union[str, Dict[str, Any]], kwargs\n    ) -> Tuple[Any, int]:\n        import mlx.core as mx\n        from mlx_vlm import prepare_inputs\n\n        prompt_str = prompt.get(\"prompt\")  # type: ignore\n        images = prompt.get(\"multi_modal_data\", {}).get(\"image\")  # type: ignore\n        if images and not isinstance(images, list):\n            images = [images]\n        resize_shape = kwargs.pop(\"resize_shape\", None)\n        image_token_index = getattr(self._model.config, \"image_token_index\", None)\n\n        processor = self._processor\n        tokenizer = processor if hasattr(processor, \"encode\") else processor.tokenizer\n        prompt_tokens = mx.array(tokenizer.encode(prompt_str))\n\n        if not images:\n            input_ids = prompt_tokens[None, :]\n            pixel_values = mask = None\n            kwargs = {}\n            input_token_len = input_ids.size\n        else:\n            # Check if processor supports audio to avoid feature_extractor errors\n            supports_audio = hasattr(processor, \"feature_extractor\") or (\n                hasattr(processor, \"audio_tokenizer\")\n                and processor.audio_tokenizer is not None\n            )\n\n            # For processors that don't support audio (like Qwen3VLProcessor),\n            # explicitly set audio=None to prevent mlx-vlm from trying to process audio\n            if not supports_audio:\n                inputs = prepare_inputs(\n                    processor=processor,\n                    images=images,\n                    audio=None,\n                    prompts=prompt_str,\n                    image_token_index=image_token_index,\n                    resize_shape=resize_shape,\n                )\n            else:\n                inputs = prepare_inputs(\n                    processor=processor,\n                    images=images,\n                    prompts=prompt_str,\n                    image_token_index=image_token_index,\n                    resize_shape=resize_shape,\n                )\n            input_ids = inputs[\"input_ids\"]\n            pixel_values = inputs[\"pixel_values\"]\n            mask = inputs[\"attention_mask\"]\n            kwargs = {\n                k: v\n                for k, v in inputs.items()\n                if k not in [\"input_ids\", \"pixel_values\", \"attention_mask\"]\n            }\n            input_token_len = int(mask.sum())\n        return (input_ids, pixel_values, mask, kwargs), input_token_len\n\n    def chat(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[MLXGenerateConfig] = None,\n    ) -> Union[ChatCompletion, Iterator[ChatCompletionChunk]]:\n        messages = self._transform_messages(messages)  # type: ignore\n        tools = generate_config.pop(\"tools\", []) if generate_config else None\n\n        model_family = self.model_family.model_family or self.model_family.model_name\n\n        if \"internvl2\" not in model_family.lower():\n            from qwen_vl_utils import process_vision_info\n\n            chat_template_kwargs = (\n                self._get_chat_template_kwargs_from_generate_config(\n                    generate_config, self.reasoning_parser\n                )\n                or {}\n            )\n            chat_context_var.set(chat_template_kwargs)\n            full_context_kwargs = chat_template_kwargs.copy()\n            if tools and model_family in QWEN_TOOL_CALL_FAMILY:\n                full_context_kwargs[\"tools\"] = tools\n            assert self.model_family.chat_template is not None\n            prompt = self.get_full_context(\n                messages, self.model_family.chat_template, **full_context_kwargs\n            )\n            images, video_inputs = process_vision_info(messages)\n            if video_inputs:\n                raise ValueError(\"Not support video input now.\")\n        else:\n            prompt, images = self.get_specific_prompt(model_family, messages)  # type: ignore\n\n        if not images:\n            inputs = {\n                \"prompt\": prompt,\n            }\n        elif len(images) == 1:\n            inputs = {\n                \"prompt\": prompt,\n                \"multi_modal_data\": {\"image\": images[-1]},  # type: ignore\n            }\n        else:\n            inputs = {\n                \"prompt\": prompt,\n                \"multi_modal_data\": {\"image\": images},  # type: ignore\n            }\n        generate_config = self._sanitize_generate_config(generate_config)\n\n        stream = generate_config.get(\"stream\", False)\n        if stream:\n            it = self.generate(inputs, generate_config)\n            assert isinstance(it, Iterator)\n            return self._to_chat_completion_chunks(it)\n        else:\n            c = self.generate(inputs, generate_config)\n            assert not isinstance(c, Iterator)\n            if tools:\n                return self._post_process_completion(\n                    self.model_family, self.model_uid, c\n                )\n            return self._to_chat_completion(c)\n"
  },
  {
    "path": "xinference/model/llm/mlx/distributed_models/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/mlx/distributed_models/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nimport os\nfrom typing import TYPE_CHECKING, Dict, Optional\n\nimport xoscar as xo\nfrom xoscar.utils import lazy_import\n\nif TYPE_CHECKING:\n    import mlx.core as mx\nelse:\n    mx = lazy_import(\"mlx.core\")\nlogger = logging.getLogger(__name__)\n\nDEBUG_DISTRIBUTED_MLX = bool(int(os.getenv(\"XINFERENCE_DEBUG_DISTRIBUTED_MLX\", \"0\")))\n\n\nclass ReceiverActor(xo.StatelessActor):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        self._recv_queue = asyncio.Queue()\n\n    @classmethod\n    def gen_uid(cls, uid: str, rank: int):\n        return f\"Receiver-{uid}-{rank}\"\n\n    async def send(self, data: \"mx.array\"):\n        # no need to use async function,\n        # but make it more convenient to patch this function for test purpose\n        if not isinstance(data, mx.array):\n            data = mx.array(data)\n        self._recv_queue.put_nowait(data)\n\n    async def recv(self):\n        return await self._recv_queue.get()\n\n\nclass DistributedModelMixin:\n    rank: int\n    world_size: int\n    model_uid: Optional[str]\n    address: Optional[str]\n    _receiver_ref: Optional[xo.ActorRefType[ReceiverActor]]\n    rank_to_addresses: Optional[Dict[int, str]]\n\n    layers: list\n\n    def __init__(self):\n        self.rank = 0\n        self.world_size = 1\n        self.model_uid = None\n        self.loop = None\n        self.address = None\n        # actor ref\n        self._receiver_ref = None\n        self.rank_to_addresses = None\n\n    def prepare(self):\n        coro = xo.create_actor(\n            ReceiverActor,\n            uid=ReceiverActor.gen_uid(self.model_uid, self.rank),\n            address=self.address,\n        )\n        self._receiver_ref = asyncio.run_coroutine_threadsafe(coro, self.loop).result()\n        if DEBUG_DISTRIBUTED_MLX:\n            logger.debug(\"Finish preparing distributed env for rank %s\", self.rank)\n\n    def _send_stage_result(self, result: \"mx.array\"):\n        assert self.rank > 0\n        assert self.rank_to_addresses is not None\n        assert self.model_uid is not None\n        last_rank = self.rank - 1\n        if DEBUG_DISTRIBUTED_MLX:\n            logger.debug(\n                \"Start to send %s partial result to rank %d\", self.model_uid, last_rank\n            )\n\n        async def send():\n            receiver_ref = await xo.actor_ref(\n                uid=ReceiverActor.gen_uid(self.model_uid, last_rank),\n                address=self.rank_to_addresses[last_rank],\n            )\n            return await receiver_ref.send(result)\n\n        asyncio.run_coroutine_threadsafe(send(), self.loop).result()\n        if DEBUG_DISTRIBUTED_MLX:\n            logger.debug(\n                \"Finish send %s partial result to rank %d, shape %s\",\n                self.model_uid,\n                last_rank,\n                result.shape,\n            )\n\n    def _wait_prev_stage_result(self):\n        if DEBUG_DISTRIBUTED_MLX:\n            logger.debug(\"Wait for partial result from prev shard %d\", self.rank + 1)\n        coro = self._receiver_ref.recv()\n        result = asyncio.run_coroutine_threadsafe(coro, self.loop).result()\n        if DEBUG_DISTRIBUTED_MLX:\n            logger.debug(\n                \"Received partial result from prev shard %d, shape %s\",\n                self.rank + 1,\n                result.shape,\n            )\n        return result\n\n    def _broadcast_result(self, result: \"mx.array\"):\n        if DEBUG_DISTRIBUTED_MLX:\n            logger.debug(\"broadcast result from driver\")\n\n        async def broadcast(rank: int):\n            assert self.model_uid is not None\n            assert self.rank_to_addresses is not None\n\n            receiver = await xo.actor_ref(\n                uid=ReceiverActor.gen_uid(self.model_uid, rank),\n                address=self.rank_to_addresses[rank],\n            )\n            await receiver.send(result)\n\n        async def broadcast_all():\n            coros = []\n            for rank in range(1, self.world_size):\n                coros.append(broadcast(rank))\n            await asyncio.gather(*coros)\n\n        return asyncio.run_coroutine_threadsafe(broadcast_all(), self.loop).result()\n\n    def _get_result(self) -> \"mx.array\":\n        if DEBUG_DISTRIBUTED_MLX:\n            logger.debug(\"Get result from broadcasted data on self receiver\")\n        assert self.model_uid is not None\n        coro = xo.actor_ref(\n            uid=ReceiverActor.gen_uid(self.model_uid, self.rank), address=self.address\n        )\n        ref = asyncio.run_coroutine_threadsafe(coro, self.loop).result()\n        return asyncio.run_coroutine_threadsafe(ref.recv(), loop=self.loop).result()\n\n    def pipeline(self):\n        pipeline_size, rank = self.world_size, self.rank\n        layers_per_rank = len(self.layers) // pipeline_size\n        extra = len(self.layers) - layers_per_rank * pipeline_size\n        if self.rank < extra:\n            layers_per_rank += 1\n        self.start_idx = (pipeline_size - rank - 1) * layers_per_rank\n        self.end_idx = self.start_idx + layers_per_rank\n        self.layers = self.layers[: self.end_idx]\n        self.layers[: self.start_idx] = [None] * self.start_idx\n        self.num_layers = len(self.layers) - self.start_idx\n\n\nclass SafeKVCache:\n    \"\"\"\n    A safe wrapper around mlx_lm's KVCache that handles None keys gracefully.\n    This is needed because mlx_lm's generate function accesses cache.state\n    before the cache is properly initialized.\n    \"\"\"\n\n    def __init__(self):\n        from mlx_lm.models.cache import KVCache\n\n        self._cache = KVCache()\n\n    @property\n    def state(self):\n        # Safe access to state property\n        if self._cache.keys is None:\n            return None, None\n        if self._cache.offset == self._cache.keys.shape[2]:\n            return self._cache.keys, self._cache.values\n        else:\n            return (\n                self._cache.keys[..., : self._cache.offset, :],\n                self._cache.values[..., : self._cache.offset, :],\n            )\n\n    @state.setter\n    def state(self, v):\n        # Safe setter for state property\n        if v is None or v[0] is None:\n            self._cache.keys = None\n            self._cache.values = None\n            self._cache.offset = 0\n        else:\n            self._cache.keys, self._cache.values = v\n            self._cache.offset = self._cache.keys.shape[2]\n\n    def __getattr__(self, name):\n        # Delegate all other attributes and methods to the underlying cache\n        return getattr(self._cache, name)\n"
  },
  {
    "path": "xinference/model/llm/mlx/distributed_models/deepseek_v3.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom typing import Any, Optional\n\nimport mlx.core as mx\nimport mlx.nn as nn\nfrom mlx_lm.models.base import create_attention_mask\nfrom mlx_lm.models.deepseek_v3 import DeepseekV3Model as _DeepseekV3Model\nfrom mlx_lm.models.deepseek_v3 import Model as _Model\nfrom mlx_lm.models.deepseek_v3 import ModelArgs\n\nfrom .core import DistributedModelMixin\n\n\nclass DeepseekV3Model(_DeepseekV3Model, DistributedModelMixin):\n    def __init__(self, *args, **kwargs):\n        _DeepseekV3Model.__init__(self, *args, **kwargs)\n        DistributedModelMixin.__init__(self)\n\n    def __call__(\n        self,\n        x: mx.array,\n        cache: Optional[Any] = None,\n        mask: Optional[mx.array] = None,\n    ) -> mx.array:\n        h = self.embed_tokens(x)\n\n        pipeline_rank = self.rank\n        pipeline_size = self.world_size\n        if mask is None:\n            mask = create_attention_mask(h, cache)\n\n        if cache is None:\n            cache = [None] * self.num_layers\n\n        # Receive from the previous process in the pipeline\n\n        if pipeline_rank < pipeline_size - 1:\n            # wait for previous result\n            h = self._wait_prev_stage_result()\n\n        for i in range(self.num_layers):\n            h = self.layers[self.start_idx + i](h, mask, cache[i])\n        mx.eval(h)\n\n        if pipeline_rank != 0:\n            # Send to the next process in the pipeline\n            self._send_stage_result(h)\n            # wait for the final result\n            h = self._get_result()\n        else:\n            self._set_result(h)\n\n        return self.norm(h)\n\n\nclass Model(_Model):\n    def __init__(self, config: ModelArgs):\n        nn.Module.__init__(self)\n        self.args = config\n        self.model_type = config.model_type\n        self.model = DeepseekV3Model(config)\n        self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False)\n"
  },
  {
    "path": "xinference/model/llm/mlx/distributed_models/qwen2.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import Any, Optional\n\nimport mlx.core as mx\nimport mlx.nn as nn\nfrom mlx_lm.models.base import create_attention_mask\nfrom mlx_lm.models.qwen2 import Model as _Model\nfrom mlx_lm.models.qwen2 import ModelArgs\nfrom mlx_lm.models.qwen2 import Qwen2Model as _Qwen2Model\n\nfrom .core import DistributedModelMixin\n\nlogger = logging.getLogger(__name__)\n\n\nclass Qwen2Model(_Qwen2Model, DistributedModelMixin):\n    def __init__(self, *args, **kwargs):\n        _Qwen2Model.__init__(self, *args, **kwargs)\n        DistributedModelMixin.__init__(self)\n\n    def __call__(\n        self,\n        x: mx.array,\n        mask: Optional[mx.array] = None,\n        cache: Optional[Any] = None,\n        input_embeddings: Optional[mx.array] = None,\n    ) -> mx.array:\n        if input_embeddings is not None:\n            h = input_embeddings\n        else:\n            h = self.embed_tokens(x)\n\n        pipeline_rank = self.rank\n        pipeline_size = self.world_size\n\n        if cache is None:\n            cache = [None] * self.num_layers\n        mask = create_attention_mask(h, cache[0])\n\n        # Receive from the previous process in the pipeline\n\n        if pipeline_rank < pipeline_size - 1:\n            # wait for previous result\n            h = self._wait_prev_stage_result()\n\n        for i in range(self.num_layers):\n            h = self.layers[self.start_idx + i](h, mask, cache[i])\n        mx.eval(h)\n\n        # Send to the next process in the pipeline\n        if pipeline_rank != 0:\n            self._send_stage_result(h)\n            h = self._get_result()\n        else:\n            self._broadcast_result(h)\n\n        return self.norm(h)\n\n\nclass Model(_Model):\n    def __init__(self, args: ModelArgs):\n        nn.Module.__init__(self)\n        self.args = args\n        self.model_type = args.model_type\n        self.model = Qwen2Model(args)\n        if not args.tie_word_embeddings:\n            self.lm_head = nn.Linear(args.hidden_size, args.vocab_size, bias=False)\n"
  },
  {
    "path": "xinference/model/llm/mlx/distributed_models/qwen3.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import Any, Optional\n\nimport mlx.core as mx\nimport mlx.nn as nn\nfrom mlx_lm.models.base import create_attention_mask\nfrom mlx_lm.models.qwen3 import Model as _Model\nfrom mlx_lm.models.qwen3 import ModelArgs\nfrom mlx_lm.models.qwen3 import Qwen3Model as _Qwen3Model\n\nfrom .core import DistributedModelMixin\n\nlogger = logging.getLogger(__name__)\n\n\nclass Qwen3Model(_Qwen3Model, DistributedModelMixin):\n    def __init__(self, *args, **kwargs):\n        _Qwen3Model.__init__(self, *args, **kwargs)\n        DistributedModelMixin.__init__(self)\n\n    def __call__(\n        self,\n        x: mx.array,\n        mask: Optional[mx.array] = None,\n        cache: Optional[Any] = None,\n        input_embeddings: Optional[mx.array] = None,\n    ) -> mx.array:\n        if input_embeddings is not None:\n            h = input_embeddings\n        else:\n            h = self.embed_tokens(x)\n\n        pipeline_rank = self.rank\n        pipeline_size = self.world_size\n        if mask is None:\n            mask = create_attention_mask(h, cache)\n\n        if cache is None:\n            cache = [None] * self.num_layers\n\n        # Receive from the previous process in the pipeline\n\n        if pipeline_rank < pipeline_size - 1:\n            # wait for previous result\n            h = self._wait_prev_stage_result()\n\n        for i in range(self.num_layers):\n            h = self.layers[self.start_idx + i](h, mask, cache[i])\n        mx.eval(h)\n\n        # Send to the next process in the pipeline\n        if pipeline_rank != 0:\n            self._send_stage_result(h)\n            h = self._get_result()\n        else:\n            self._broadcast_result(h)\n\n        return self.norm(h)\n\n\nclass Model(_Model):\n    def __init__(self, args: ModelArgs):\n        nn.Module.__init__(self)\n        self.args = args\n        self.model_type = args.model_type\n        self.model = Qwen3Model(args)\n        if not args.tie_word_embeddings:\n            self.lm_head = nn.Linear(args.hidden_size, args.vocab_size, bias=False)\n"
  },
  {
    "path": "xinference/model/llm/mlx/distributed_models/qwen3_moe.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\n\nimport mlx.core as mx\nimport mlx.nn as nn\nfrom mlx_lm.models.base import create_attention_mask\nfrom mlx_lm.models.qwen3_moe import Model as _Model\nfrom mlx_lm.models.qwen3_moe import ModelArgs\nfrom mlx_lm.models.qwen3_moe import Qwen3MoeModel as _Qwen3MoeModel\n\nfrom .core import DistributedModelMixin\n\nlogger = logging.getLogger(__name__)\n\n\nclass Qwen3MoeModel(_Qwen3MoeModel, DistributedModelMixin):\n    def __init__(self, *args, **kwargs):\n        _Qwen3MoeModel.__init__(self, *args, **kwargs)\n        DistributedModelMixin.__init__(self)\n\n    def __call__(\n        self,\n        inputs: mx.array,\n        mask: mx.array = None,  # type: ignore\n        cache=None,\n    ):\n        h = self.embed_tokens(inputs)\n\n        pipeline_rank = self.rank\n        pipeline_size = self.world_size\n        if mask is None:\n            mask = create_attention_mask(h, cache)\n\n        if cache is None:\n            cache = [None] * self.num_layers\n\n        # Receive from the previous process in the pipeline\n\n        if pipeline_rank < pipeline_size - 1:\n            # wait for previous result\n            h = self._wait_prev_stage_result()\n\n        for i in range(self.num_layers):\n            h = self.layers[self.start_idx + i](h, mask, cache[i])\n        mx.eval(h)\n\n        # Send to the next process in the pipeline\n        if pipeline_rank != 0:\n            self._send_stage_result(h)\n            h = self._get_result()\n        else:\n            self._broadcast_result(h)\n\n        return self.norm(h)\n\n\nclass Model(_Model):\n    def __init__(self, args: ModelArgs):\n        nn.Module.__init__(self)\n        self.args = args\n        self.model_type = args.model_type\n        self.model = Qwen3MoeModel(args)\n        self.lm_head = nn.Linear(args.hidden_size, args.vocab_size, bias=False)\n"
  },
  {
    "path": "xinference/model/llm/mlx/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/mlx/tests/test_distributed_model.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport platform\nimport sys\nfrom pathlib import Path\n\nimport pytest\nimport pytest_asyncio\nimport xoscar as xo\n\n\nclass ModelActor(xo.StatelessActor):\n    def __init__(self, rank: int, model_uid: str, model_path: str):\n        super().__init__()\n        self.rank = rank\n        self.model_uid = model_uid\n        self.model_path = model_path\n        self.loop = asyncio.get_running_loop()\n\n    def set_rank_addresses(self, rank_addresses):\n        self.rank_to_addresses = rank_addresses\n\n    def _load(self):\n        import mlx.core as mx\n        from mlx_lm.utils import load_model, load_tokenizer\n\n        from ..distributed_models.core import SafeKVCache\n        from ..distributed_models.qwen2 import Model, ModelArgs\n\n        get_class = lambda *_, **__: (Model, ModelArgs)\n\n        self.model, config = load_model(\n            Path(self.model_path), lazy=True, get_model_classes=get_class\n        )\n        model = self.model.model\n        model.rank = self.rank\n        model.world_size = 2\n        model.model_uid = self.model_uid\n        model.loop = self.loop\n        model.address = self.address\n        model.rank_to_addresses = self.rank_to_addresses\n\n        model.prepare()\n        model.pipeline()\n        mx.eval(model.parameters())\n\n        self.tokenizer = load_tokenizer(\n            Path(self.model_path), {}, eos_token_ids=config.get(\"eos_token_id\", None)\n        )\n\n        # Patch the model's make_cache method to use SafeKVCache\n        def make_safe_cache():\n            num_layers = len(model.layers)\n            return [SafeKVCache() for _ in range(num_layers)]\n\n        self.model.make_cache = make_safe_cache\n\n    async def load(self):\n        return await asyncio.to_thread(self._load)\n\n    def _generate(self, prompt: str, **kwargs):\n        from mlx_lm.generate import generate\n\n        messages = [{\"role\": \"user\", \"content\": prompt}]\n        prompt = self.tokenizer.apply_chat_template(\n            messages, add_generation_prompt=True\n        )\n\n        return generate(self.model, self.tokenizer, prompt, **kwargs)\n\n    async def generate(self, prompt: str, **kwargs):\n        return await asyncio.to_thread(self._generate, prompt, **kwargs)\n\n\n@pytest_asyncio.fixture\nasync def setup_pool():\n    pool = await xo.create_actor_pool(\n        f\"127.0.0.1:{xo.utils.get_next_port()}\", n_process=2\n    )\n    async with pool:\n        yield pool\n\n\n@pytest.mark.skipif(\n    sys.platform != \"darwin\" or platform.processor() != \"arm\",\n    reason=\"MLX only works for Apple silicon chip\",\n)\n@pytest.mark.asyncio\nasync def test_distributed(setup_pool):\n    from huggingface_hub import snapshot_download\n\n    pool = setup_pool\n\n    model_path = snapshot_download(\"mlx-community/Qwen2.5-0.5B-Instruct-4bit\")\n\n    shard0 = await xo.create_actor(\n        ModelActor,\n        0,\n        \"qwen2.5-instruct\",\n        model_path,\n        address=pool.external_address,\n        allocate_strategy=xo.allocate_strategy.ProcessIndex(1),\n        uid=\"model_0\",\n    )\n    shard1 = await xo.create_actor(\n        ModelActor,\n        1,\n        \"qwen2.5-instruct\",\n        model_path,\n        address=pool.external_address,\n        allocate_strategy=xo.allocate_strategy.ProcessIndex(2),\n        uid=\"model_1\",\n    )\n    rank_addresses = {0: shard0.address, 1: shard1.address}\n    await shard0.set_rank_addresses(rank_addresses)\n    await shard1.set_rank_addresses(rank_addresses)\n\n    await shard0.load()\n    await shard1.load()\n\n    t1 = asyncio.create_task(shard0.generate(\"hello\", max_tokens=3))\n    t2 = asyncio.create_task(shard1.generate(\"hello\", max_tokens=3))\n    await asyncio.sleep(0)\n    await t2\n    result = await t1\n\n    assert result is not None\n"
  },
  {
    "path": "xinference/model/llm/mlx/tests/test_mlx.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nimport os\nimport platform\nimport sys\nimport threading\n\nimport pytest\n\nfrom .....client import Client\n\n\nclass InferenceThread(threading.Thread):\n    \"\"\"Thread for running parallel inference requests.\"\"\"\n\n    def __init__(self, prompt, generate_config, model):\n        super().__init__()\n        self._prompt = [{\"role\": \"user\", \"content\": prompt}]\n        self._generate_config = generate_config\n        self._model = model\n        self._ex = None\n        self._result = None\n\n    def run(self):\n        try:\n            if self._generate_config.get(\"stream\", False):\n                results = []\n                for res in self._model.chat(\n                    self._prompt, generate_config=self._generate_config\n                ):\n                    results.append(res)\n                assert len(results) > 0\n                self._result = results[-1]\n            else:\n                res = self._model.chat(\n                    self._prompt, generate_config=self._generate_config\n                )\n                assert isinstance(res, dict)\n                choices = res[\"choices\"]\n                assert isinstance(choices, list)\n                choice = choices[0][\"message\"]\n                assert isinstance(choice, dict)\n                content = choice[\"content\"]\n                assert len(content) > 0\n                self._result = res\n        except BaseException as e:\n            self._ex = e\n\n    def join(self, timeout=None):\n        super().join(timeout)\n        if self._ex is not None:\n            raise self._ex\n        return self._result\n\n\n@pytest.mark.skipif(\n    sys.platform != \"darwin\" or platform.processor() != \"arm\",\n    reason=\"MLX only works for Apple silicon chip\",\n)\ndef test_load_mlx(setup):\n    endpoint, _ = setup\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"qwen2-instruct\",\n        model_engine=\"MLX\",\n        model_size_in_billions=\"0_5\",\n        model_format=\"mlx\",\n        quantization=\"4bit\",\n    )\n    assert len(client.list_models()) == 1\n    model = client.get_model(model_uid)\n    messages = [{\"role\": \"user\", \"content\": \"write a poem.\"}]\n    completion = model.chat(messages)\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert len(completion[\"choices\"][0][\"message\"][\"content\"]) != 0\n    content = completion[\"choices\"][0][\"message\"][\"content\"]\n    messages.append({\"role\": \"assistant\", \"content\": content})\n    messages.append({\"role\": \"user\", \"content\": \"explain it\"})\n    completion = model.chat(messages)\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert len(completion[\"choices\"][0][\"message\"][\"content\"]) != 0\n\n\n@pytest.mark.skipif(\n    sys.platform != \"darwin\" or platform.processor() != \"arm\",\n    reason=\"MLX only works for Apple silicon chip\",\n)\ndef test_load_mlx_vision(setup):\n    endpoint, _ = setup\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"qwen2-vl-instruct\",\n        model_engine=\"MLX\",\n        model_size_in_billions=2,\n        model_format=\"mlx\",\n        quantization=\"4bit\",\n    )\n    assert len(client.list_models()) == 1\n    model = client.get_model(model_uid)\n\n    path = os.path.join(os.path.dirname(__file__), \"fish.png\")\n    with open(path, \"rb\") as f:\n        content = f.read()\n    b64_img = base64.b64encode(content).decode(\"utf-8\")\n\n    completion = model.chat(\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"图中有几条鱼？\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": f\"data:image/jpeg;base64,{b64_img}\",\n                        },\n                    },\n                ],\n            }\n        ],\n        generate_config={\"max_tokens\": 100},\n    )\n    assert \"图中\" in completion[\"choices\"][0][\"message\"][\"content\"]\n    assert \"鱼\" in completion[\"choices\"][0][\"message\"][\"content\"]\n\n    # test no image\n    messages = [{\"role\": \"user\", \"content\": \"write a poem.\"}]\n    completion = model.chat(messages)\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert \"content\" in completion[\"choices\"][0][\"message\"]\n    assert len(completion[\"choices\"][0][\"message\"][\"content\"]) != 0\n\n\n@pytest.mark.skipif(\n    sys.platform != \"darwin\" or platform.processor() != \"arm\",\n    reason=\"MLX only works for Apple silicon chip\",\n)\ndef test_mlx_parallel_inference(setup):\n    \"\"\"Test MLX continuous batching with parallel inference requests.\"\"\"\n    endpoint, _ = setup\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=\"qwen2-instruct\",\n        model_engine=\"MLX\",\n        model_size_in_billions=\"0_5\",\n        model_format=\"mlx\",\n        quantization=\"4bit\",\n    )\n    assert len(client.list_models()) == 1\n    model = client.get_model(model_uid)\n\n    # Test parallel streaming and non-streaming requests\n    thread1 = InferenceThread(\"1+1等于几？\", {\"stream\": True}, model)\n    thread2 = InferenceThread(\"中国的首都是哪里？\", {\"stream\": False}, model)\n    thread3 = InferenceThread(\"介绍一下Python。\", {\"stream\": True}, model)\n\n    # Start all threads\n    thread1.start()\n    thread2.start()\n    thread3.start()\n\n    # Wait for all to complete\n    result1 = thread1.join()\n    result2 = thread2.join()\n    result3 = thread3.join()\n\n    # Verify results\n    assert result1 is not None\n    assert result2 is not None\n    assert result3 is not None\n\n    # Check streaming results (should use 'delta' format)\n    assert \"choices\" in result1\n    assert len(result1[\"choices\"]) > 0\n    assert \"delta\" in result1[\"choices\"][0]\n    # Streaming can have empty content in last chunk (finish_reason only)\n    assert result1[\"choices\"][0][\"finish_reason\"] in [\"stop\", \"length\"]\n\n    # Check non-streaming results (should use 'message' format)\n    assert \"choices\" in result2\n    assert len(result2[\"choices\"]) > 0\n    assert \"message\" in result2[\"choices\"][0]\n    assert \"content\" in result2[\"choices\"][0][\"message\"]\n\n    # Check second streaming results (should use 'delta' format)\n    assert \"choices\" in result3\n    assert len(result3[\"choices\"]) > 0\n    assert \"delta\" in result3[\"choices\"][0]\n    assert result3[\"choices\"][0][\"finish_reason\"] in [\"stop\", \"length\"]\n"
  },
  {
    "path": "xinference/model/llm/reasoning_parser.py",
    "content": "import re\nfrom typing import Any, AsyncGenerator, Dict, Iterator, List, Optional, Tuple, Union\n\nfrom ...types import (\n    ChatCompletionChunk,\n    ChatCompletionChunkDelta,\n    CompletionChoice,\n    CompletionChunk,\n)\n\n\nclass ReasoningParser:\n    \"\"\"Reasoning parser for reasoning model.\"\"\"\n\n    def __init__(\n        self,\n        reasoning_content: bool = False,\n        reasoning_start_tag: str = \"\",\n        reasoning_end_tag: str = \"\",\n        enable_thinking: bool = True,\n    ):\n        self.reasoning_content = reasoning_content\n        self.reasoning_start_tag = reasoning_start_tag\n        self.reasoning_end_tag = reasoning_end_tag\n        self.reasoning_regex = re.compile(\n            rf\"{self.reasoning_start_tag}(.*?){self.reasoning_end_tag}\", re.DOTALL\n        )\n        # enable_thinking can be set to False only for hybrid model\n        # e.g. qwen3, which can support both thinking and non-thinking\n        self.enable_thinking = enable_thinking\n\n    def extract_reasoning_content_streaming(\n        self,\n        previous_text: str,\n        current_text: str,\n        delta_text: str,\n    ) -> ChatCompletionChunkDelta:\n        \"\"\"Extract reasoning content from DeepSeek-R1 model output in a streaming fashion.\n\n        Args:\n            previous_text (str): The previous accumulated text content.\n            current_text (Union[str, ChatCompletionChunk]): The current text chunk or completion chunk.\n\n        Yields:\n            str: Extracted reasoning content chunks.\n        \"\"\"\n        delta = ChatCompletionChunkDelta()\n\n        # Check if <think> is present in previous or delta.\n        # Keep compatibility with models that don't generate <think> tokens.\n        if self.reasoning_start_tag in previous_text:\n            if self.reasoning_end_tag in delta_text:\n                # <think> in previous, </think> in delta,\n                # extract reasoning content\n                end_idx = delta_text.find(self.reasoning_end_tag)\n                reasoning_content = delta_text[:end_idx]\n                content = delta_text[end_idx + len(self.reasoning_end_tag) :]\n                delta[\"reasoning_content\"] = reasoning_content\n                if content:\n                    delta[\"content\"] = content\n                else:\n                    delta[\"content\"] = None\n                return delta\n            elif self.reasoning_end_tag in previous_text:\n                # <think> in previous, </think> in previous,\n                # <think> in previous, </think> in previous,\n                # reasoning content ends\n                delta[\"reasoning_content\"] = None\n                delta[\"content\"] = delta_text\n                return delta\n            else:\n                # <think> in previous, no </think> in previous or delta,\n                # reasoning content continues\n                delta[\"reasoning_content\"] = delta_text\n                delta[\"content\"] = None\n                return delta\n        elif self.reasoning_start_tag in delta_text:\n            start_idx = delta_text.find(self.reasoning_start_tag)\n            if self.reasoning_end_tag in delta_text:\n                # <think> in delta, </think> in delta, extract reasoning content\n                end_idx = delta_text.find(self.reasoning_end_tag)\n                reasoning_content = delta_text[\n                    start_idx + len(self.reasoning_start_tag) : end_idx\n                ]\n                content = delta_text[end_idx + len(self.reasoning_end_tag) :]\n                delta[\"reasoning_content\"] = reasoning_content\n                if content:\n                    delta[\"content\"] = content\n                else:\n                    delta[\"content\"] = None\n                return delta\n            else:\n                # <think> in delta, no </think> in delta,\n                # reasoning content continues\n                reasoning_content = delta_text[\n                    start_idx + len(self.reasoning_start_tag) :\n                ]\n                delta[\"reasoning_content\"] = reasoning_content\n                delta[\"content\"] = None\n                return delta\n        else:\n            # No <think> in previous or delta, also need to check for </think>.\n            # Because the model may have generated </think> without <think>\n            # Ref https://huggingface.co/deepseek-ai/DeepSeek-R1/commit/8a58a132790c9935686eb97f042afa8013451c9f\n            if self.reasoning_end_tag in delta_text:\n                # </think> in delta with more tokens,\n                # extract reasoning content and content\n                end_idx = delta_text.find(self.reasoning_end_tag)\n                reasoning_content = delta_text[:end_idx]\n                content = delta_text[end_idx + len(self.reasoning_end_tag) :]\n                delta[\"reasoning_content\"] = reasoning_content\n                if content:\n                    delta[\"content\"] = content\n                else:\n                    delta[\"content\"] = None\n                return delta\n            elif self.reasoning_end_tag in previous_text:\n                # </think> in previous, thinking content ends\n                delta[\"reasoning_content\"] = None\n                delta[\"content\"] = delta_text\n                return delta\n            else:\n                # no </think> in previous or delta, reasoning content continues\n                delta[\"reasoning_content\"] = delta_text\n                delta[\"content\"] = None\n                return delta\n\n    def extract_reasoning_content(\n        self, model_output: Union[str, CompletionChoice]\n    ) -> Tuple[Optional[str], Optional[str]]:\n        \"\"\"Extract reasoning content from DeepSeek-R1 model output.\n\n        Args:\n            content (str): The model output content to parse.\n\n        Returns:\n            Optional[str]: Extracted reasoning content, or None if no reasoning content found.\n        \"\"\"\n        if not isinstance(model_output, str):\n            model_output = model_output[\"text\"]\n        # DeepSeek R1 doesn't generate <think> now.\n        # Thus we assume the reasoning content is always at the start.\n        # Ref https://huggingface.co/deepseek-ai/DeepSeek-R1/commit/8a58a132790c9935686eb97f042afa8013451c9f\n        if self.reasoning_end_tag not in model_output:\n            return model_output, \"\"\n        else:\n            # Add a start token if it's missing to keep compatibility.\n            if self.reasoning_start_tag not in model_output:\n                model_output = f\"{self.reasoning_start_tag}{model_output}\"\n            # Use a regex to find the reasoning content\n            reasoning_content = self.reasoning_regex.findall(model_output)[0]\n\n            end_index = len(\n                f\"{self.reasoning_start_tag}{reasoning_content}{self.reasoning_end_tag}\"\n            )\n            final_output = model_output[end_index:]\n\n            if len(final_output) == 0:\n                return reasoning_content, \"\"\n            return reasoning_content, final_output\n\n    def check_content_parser(self) -> bool:\n        \"\"\"Check if the parser should extract reasoning content.\n\n        Returns:\n            bool: True if reasoning content should be extracted, False otherwise\n        \"\"\"\n        if self.is_enable_thinking():\n            return self.reasoning_content\n        return False\n\n    def _create_chat_completion_chunk(\n        self, chunk: Union[Dict[str, Any], CompletionChunk], content: str\n    ) -> ChatCompletionChunk:\n        \"\"\"Helper method to create a ChatCompletionChunk with specified content.\n\n        Args:\n            chunk: The original chunk to copy metadata from\n            content: The content to include in the chunk\n\n        Returns:\n            ChatCompletionChunk: A new chat completion chunk\n        \"\"\"\n        return ChatCompletionChunk(\n            id=\"chat\" + chunk[\"id\"],\n            model=chunk[\"model\"],\n            created=chunk[\"created\"],\n            object=\"chat.completion.chunk\",\n            choices=[\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"content\": content,\n                    },\n                    \"finish_reason\": None,\n                }\n            ],\n        )\n\n    def _create_completion_chunk(\n        self, chunk: Union[Dict[str, Any], CompletionChunk], text: str\n    ) -> CompletionChunk:\n        \"\"\"Helper method to create a CompletionChunk with specified text.\n\n        Args:\n            chunk: The original chunk to copy metadata from\n            text: The text to include in the chunk\n\n        Returns:\n            CompletionChunk: A new completion chunk\n        \"\"\"\n        return CompletionChunk(\n            id=chunk[\"id\"],\n            model=chunk[\"model\"],\n            created=chunk[\"created\"],\n            object=\"text_completion\",\n            choices=[\n                {\n                    \"index\": 0,\n                    \"text\": text,\n                    \"logprobs\": None,\n                    \"finish_reason\": None,\n                }\n            ],\n        )\n\n    def is_enable_thinking(self):\n        from .core import chat_context_var\n\n        context = chat_context_var.get({})\n        return context.get(\"enable_thinking\", self.enable_thinking)\n\n    async def prepare_reasoning_content_streaming(\n        self, chunks: AsyncGenerator[CompletionChunk, None]\n    ):\n        \"\"\"Process the chunks from model output, check if the first chunk contains reasoning_start_tag,\n        if not, add a chunk with the tag at the beginning.\n\n        Args:\n            chunks (AsyncGenerator[CompletionChunk, None]): Chunks from model output\n\n        Yields:\n            AsyncGenerator[CompletionChunk, None]: Processed chunks\n        \"\"\"\n\n        # If reasoning_start_tag is not set, or disable thinking for hybrid model like qwen3,\n        # yield chunks as is\n        if not self.reasoning_start_tag or not self.is_enable_thinking():\n            async for chunk in chunks:\n                yield chunk\n            return\n\n        # If chunks is empty, return\n        if not chunks:\n            return\n\n        # Flag to identify the first chunk\n        is_first_chunk = True\n\n        async for chunk in chunks:\n            if is_first_chunk:\n                # Reset the flag after processing the first chunk\n                is_first_chunk = False\n                choices = chunk.get(\"choices\")\n                if not choices or not choices[0]:\n                    continue\n                if (\n                    chunk.get(\"object\") == \"chat.completion.chunk\"\n                    and \"delta\" in choices[0]\n                ):\n                    # For chat completion chunks with delta format\n                    delta = choices[0].get(\"delta\")\n                    if delta is None:\n                        continue\n                    assert isinstance(delta, dict)\n                    text = delta.get(\"content\")\n                    if not text:\n                        continue\n                    # If the first chunk doesn't contain the reasoning_start_tag\n                    if self.reasoning_start_tag not in text:\n                        # Create and yield chunks with reasoning_start_tag and newline\n                        yield self._create_chat_completion_chunk(\n                            chunk, f\"{self.reasoning_start_tag}\\n\"\n                        )\n                else:\n                    # For standard completion chunks\n                    text = choices[0].get(\"text\")\n                    if not text:\n                        continue\n                    # If the first chunk doesn't contain the reasoning_start_tag\n                    if self.reasoning_start_tag not in text:\n                        # Create and yield chunks with reasoning_start_tag and newline\n                        yield self._create_completion_chunk(\n                            chunk, f\"{self.reasoning_start_tag}\\n\"\n                        )\n                # Yield the original first chunk\n                yield chunk\n            else:\n                # For non-first chunks, yield directly\n                yield chunk\n\n    def prepare_reasoning_content_sync(self, chunks: Iterator[CompletionChunk]):\n        \"\"\"Process the chunks from model output, check if the first chunk contains reasoning_start_tag,\n        if not, add a chunk with the tag at the beginning. This is a synchronous version of\n        prepare_reasoning_content_streaming.\n\n        Args:\n            chunks (Iterator[CompletionChunk]): Chunks from model output\n\n        Returns:\n            Iterator[CompletionChunk]: Processed chunks\n        \"\"\"\n        # If reasoning_start_tag is not set, or disable thinking for hybrid model like qwen3,\n        # yield chunks as is\n        if not self.reasoning_start_tag or not self.is_enable_thinking():\n            for chunk in chunks:\n                yield chunk\n            return\n\n        # Flag to identify the first chunk\n        is_first_chunk = True\n\n        for chunk in chunks:\n            if is_first_chunk:\n                # Reset the flag after processing the first chunk\n                is_first_chunk = False\n                choices = chunk.get(\"choices\")\n                if not choices or not choices[0]:\n                    continue\n                if (\n                    chunk.get(\"object\") == \"chat.completion.chunk\"\n                    and \"delta\" in choices[0]\n                ):\n                    # For chat completion chunks with delta format\n                    delta = choices[0].get(\"delta\")\n                    if delta is None:\n                        continue\n                    assert isinstance(delta, dict)\n                    text = delta.get(\"content\")\n                    if text is None:\n                        continue\n                    # If the first chunk doesn't contain the reasoning_start_tag\n                    if self.reasoning_start_tag not in text:\n                        # Create and yield chunks with reasoning_start_tag and newline\n                        yield self._create_chat_completion_chunk(\n                            chunk, f\"{self.reasoning_start_tag}\\n\"\n                        )\n                else:\n                    # For standard completion chunks\n                    text = choices[0].get(\"text\")\n                    if text is None:\n                        continue\n                    # If the first chunk doesn't contain the reasoning_start_tag\n                    if self.reasoning_start_tag not in text:\n                        # Create and yield chunks with reasoning_start_tag and newline\n                        yield self._create_completion_chunk(\n                            chunk, f\"{self.reasoning_start_tag}\\n\"\n                        )\n                # Yield the original first chunk\n                yield chunk\n            else:\n                # For non-first chunks, yield directly\n                yield chunk\n\n    def prepare_reasoning_content(self, completion):\n        \"\"\"Ensures that the model output string starts with the reasoning_start_tag.\n\n        If the model_output is not a string (e.g., CompletionChoice), it extracts\n        the text content. If the reasoning_start_tag is not found in the text,\n        it prepends the tag to the text.\n\n        Args:\n            completion: The completion object containing model output,\n                which can be either a chat completion or a standard completion.\n        \"\"\"\n        if not self.reasoning_start_tag or not self.is_enable_thinking():\n            return completion\n\n        if completion.get(\"object\") == \"chat.completion\" and completion.get(\"choices\"):\n            text = completion[\"choices\"][0][\"message\"][\"content\"]\n            if self.reasoning_start_tag not in text:\n                text = f\"{self.reasoning_start_tag}\\n{text}\"\n            completion[\"choices\"][0][\"message\"][\"content\"] = text\n            return completion\n\n        text = completion[\"choices\"][0][\"text\"]\n        if self.reasoning_start_tag not in text:\n            text = f\"{self.reasoning_start_tag}\\n{text}\"\n        completion[\"choices\"][0][\"text\"] = text\n        return completion\n\n    def prepare_first_reasoning_content_chunk(\n        self,\n        chunk: CompletionChunk,\n    ) -> List[ChatCompletionChunk]:\n        \"\"\"Prepares the first chunk of a completion by adding reasoning_start_tag if needed.\n\n        This function checks if the first chunk contains the reasoning_start_tag. If not,\n        it creates two new chunks containing the reasoning_start_tag and a newline character\n        that will be inserted before the original chunk.\n\n        Args:\n            chunk (CompletionChunk): The first chunk of a completion to check and possibly modify\n\n        Returns:\n            List[ChatCompletionChunk]: A list of new chunks to insert before the original chunk,\n                or an empty list if no modification is needed\n        \"\"\"\n        chunks: List[ChatCompletionChunk] = []\n        if not self.reasoning_start_tag or not self.is_enable_thinking():\n            return chunks\n\n        choices = chunk.get(\"choices\")\n        if not choices or not choices[0]:\n            return chunks\n        text = choices[0].get(\"text\")\n        if not text:\n            return chunks\n\n        if self.reasoning_start_tag not in text:\n            # Create chunks with reasoning_start_tag and newline\n            chunks.append(\n                self._create_chat_completion_chunk(\n                    chunk, f\"{self.reasoning_start_tag}\\n\"\n                )\n            )\n\n        return chunks\n"
  },
  {
    "path": "xinference/model/llm/sglang/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/sglang/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport json\nimport logging\nimport multiprocessing\nimport os\nimport sys\nimport threading\nimport time\nimport uuid\nfrom typing import AsyncGenerator, Dict, List, Optional, Tuple, TypedDict, Union\n\nfrom xoscar.utils import get_next_port\n\nfrom ....constants import XINFERENCE_MAX_TOKENS\nfrom ....types import (\n    ChatCompletion,\n    ChatCompletionChunk,\n    ChatCompletionMessage,\n    Completion,\n    CompletionChoice,\n    CompletionChunk,\n    CompletionUsage,\n)\nfrom ...utils import check_dependency_available\nfrom .. import LLM, LLMFamilyV2, LLMSpecV1\nfrom ..core import chat_context_var\nfrom ..utils import (\n    DEEPSEEK_TOOL_CALL_FAMILY,\n    QWEN_TOOL_CALL_FAMILY,\n    QWEN_TOOL_CALL_SYMBOLS,\n    ChatModelMixin,\n    generate_completion_chunk,\n)\n\nlogger = logging.getLogger(__name__)\n\n\nclass SGLANGModelConfig(TypedDict, total=False):\n    tokenizer_mode: str\n    trust_remote_code: bool\n    tp_size: int\n    mem_fraction_static: float\n    log_level: str\n    attention_reduce_in_fp32: bool  # For gemma\n    quantization: Optional[str]\n    dtype: Optional[str]\n    # distributed\n    nnodes: Optional[int]\n    node_rank: Optional[int]\n    dist_init_addr: Optional[str]\n    reasoning_content: bool\n\n\nclass SGLANGGenerateConfig(TypedDict, total=False):\n    presence_penalty: float\n    frequency_penalty: float\n    temperature: float\n    top_p: float\n    top_k: int\n    max_new_tokens: int\n    stop: Optional[Union[str, List[str]]]\n    ignore_eos: bool\n    stream: bool\n    stream_options: Optional[Union[dict, None]]\n    json_schema: Optional[dict]\n    response_format: dict\n\n\ntry:\n    import sglang  # noqa: F401\n\n    SGLANG_INSTALLED = True\nexcept ImportError:\n    SGLANG_INSTALLED = False\n\nSGLANG_SUPPORTED_MODELS = [\n    \"LlamaForCausalLM\",\n    \"MistralForCausalLM\",\n    \"MixtralForCausalLM\",\n    \"Qwen2ForCausalLM\",\n    \"OPTForCausalLM\",\n]\nSGLANG_SUPPORTED_CHAT_MODELS = [\n    \"LlamaForCausalLM\",\n    \"QWenLMHeadModel\",\n    \"Qwen2ForCausalLM\",\n    \"Qwen2MoeForCausalLM\",\n    \"MistralForCausalLM\",\n    \"MixtralForCausalLM\",\n    \"GemmaForCausalLM\",\n    \"Gemma3ForCausalLM\",\n    \"DeepseekV2ForCausalLM\",\n    \"DeepseekV3ForCausalLM\",\n    \"Qwen3ForCausalLM\",\n]\nSGLANG_SUPPORTED_VISION_MODEL_LIST = [\n    \"Qwen2_5_VLForConditionalGeneration\",\n    \"Gemma3ForConditionalGeneration\",\n    \"MiniCPMV\",\n    \"MllamaForConditionalGeneration\",\n]\n\n\nclass SGLANGModel(LLM):\n    allow_batch = True\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        model_config: Optional[SGLANGModelConfig],\n    ):\n        super().__init__(model_uid, model_family, model_path)\n        self._model_config = model_config\n        self._engine = None\n        self._address = model_config.pop(\"address\", None)  # type: ignore\n        self._n_worker = model_config.pop(\"n_worker\", 1)  # type: ignore\n        self._shard = model_config.pop(\"shard\", 0)  # type: ignore\n        self._driver_info = model_config.pop(\"driver_info\", None)  # type: ignore\n        self._loading_thread = None\n        self._loading_error = None\n\n    @property\n    def driver_info(self) -> Optional[dict]:\n        return self._driver_info\n\n    def load(self):\n        try:\n            venv_bin = os.path.dirname(sys.executable)\n            if venv_bin:\n                path_entries = os.environ.get(\"PATH\", \"\").split(os.pathsep)\n                if venv_bin not in path_entries:\n                    os.environ[\"PATH\"] = os.pathsep.join(\n                        [venv_bin] + ([p for p in path_entries if p] or [])\n                    )\n            import sglang as sgl\n        except ImportError:\n            error_message = \"Failed to import module 'sglang'\"\n            installation_guide = [\n                \"Please make sure 'sglang' is installed. \",\n                \"You can install it by `pip install 'sglang[all]'`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        self._model_config = self._sanitize_model_config(self._model_config)\n        reasoning_content = self._model_config.pop(\"reasoning_content\")\n        enable_thinking = self._model_config.pop(\"enable_thinking\", False)\n        self.prepare_parse_reasoning_content(\n            reasoning_content, enable_thinking=enable_thinking\n        )\n        self.prepare_parse_tool_calls()\n\n        # Fix: GH#2169\n        if sgl.__version__ >= \"0.2.14\":\n            self._model_config.setdefault(\"triton_attention_reduce_in_fp32\", False)\n        else:\n            self._model_config.setdefault(\"attention_reduce_in_fp32\", False)\n\n        # gen port for sgl Runtime,\n        # this is useful for sglang service on a same machine.\n        # sglang typically find a port between [port, 40000]\n        # we need to ensure the generated port < 40000\n        sgl_port = None\n        for _ in range(10):\n            sgl_port = get_next_port()\n            if sgl_port >= 40000:\n                sgl_port = None\n            else:\n                break\n        if sgl_port is None:\n            raise ValueError(\"Failed to find a port for sglang\")\n\n        # fork may cause sglang stuck, force set to spawn\n        multiprocessing.set_start_method(\"spawn\")\n\n        if self._n_worker > 1:\n            # distributed inference\n            self._model_config[\"nnodes\"] = self._n_worker\n            self._model_config[\"node_rank\"] = self._shard\n            # model across multiple workers\n            if self._shard == 0:\n                # distributed, need to init driver_info\n                assert self._driver_info is None\n                # This must run inside Xoscar pool\n                dist_init_addr = f\"{self._address.split(':', 1)[0]}:{get_next_port()}\"\n                self._driver_info = {\"dist_init_addr\": dist_init_addr}\n                self._model_config[\"dist_init_addr\"] = dist_init_addr\n            else:\n                assert self._driver_info is not None\n                self._model_config[\"dist_init_addr\"] = self._driver_info[\n                    \"dist_init_addr\"\n                ]\n\n            logger.info(\n                f\"Loading {self.model_uid}, shard({self._shard} of {self._n_worker}) with following model config: {self._model_config}\"\n            )\n\n            def _load():\n                try:\n                    self._engine = sgl.Runtime(\n                        model_path=self.model_path,\n                        tokenizer_path=self.model_path,\n                        port=sgl_port,\n                        **self._model_config,\n                    )\n                except Exception:\n                    logger.exception(\"Creating sglang Runtime failed\")\n                    self._loading_error = sys.exc_info()\n\n            self._loading_thread = threading.Thread(target=_load)\n            self._loading_thread.start()\n            if self._shard == 0:\n                # wait for 3 seconds to ensure torch distributed inited first\n                self._loading_thread.join(3)\n        else:\n            logger.info(\n                f\"Loading {self.model_uid} with following model config: {self._model_config}\"\n            )\n\n            self._engine = sgl.Runtime(\n                model_path=self.model_path,\n                tokenizer_path=self.model_path,\n                port=sgl_port,\n                **self._model_config,\n            )\n\n    def wait_for_load(self):\n        if self._loading_thread:\n            if self._shard == 0:\n                # for the shard 0, we wait it to complete\n                # the sglang will serve forever for the other shards,\n                # so we only check if any error happens.\n                self._loading_thread.join()\n            if self._loading_error:\n                _, err, tb = self._loading_error\n                raise err.with_traceback(tb)\n\n    def stop(self):\n        logger.info(\"Stopping SGLang engine, sglang pid: %s\", self._engine.pid)\n        self._engine.shutdown()\n\n    def _sanitize_model_config(\n        self, model_config: Optional[SGLANGModelConfig]\n    ) -> SGLANGModelConfig:\n        if model_config is None:\n            model_config = SGLANGModelConfig()\n\n        cuda_count = self._get_cuda_count()\n        model_config.setdefault(\"tokenizer_mode\", \"auto\")\n        model_config.setdefault(\"trust_remote_code\", True)\n        model_config.setdefault(\"tp_size\", cuda_count * self._n_worker)\n        # See https://github.com/sgl-project/sglang/blob/00023d622a6d484e67ef4a0e444f708b8fc861c8/python/sglang/srt/server_args.py#L100-L109\n        mem_fraction_static = model_config.get(\"mem_fraction_static\")\n        if mem_fraction_static is None:\n            tp_size = model_config.get(\"tp_size\", cuda_count)\n            if tp_size >= 16:\n                model_config[\"mem_fraction_static\"] = 0.79\n            elif tp_size >= 8:\n                model_config[\"mem_fraction_static\"] = 0.81\n            elif tp_size >= 4:\n                model_config[\"mem_fraction_static\"] = 0.85\n            elif tp_size >= 2:\n                model_config[\"mem_fraction_static\"] = 0.87\n            else:\n                model_config[\"mem_fraction_static\"] = 0.88\n        model_config.setdefault(\"log_level\", \"info\")\n        model_config.setdefault(\"reasoning_content\", False)\n        self._apply_fp4_config(model_config)\n\n        return model_config\n\n    def _apply_fp4_config(self, model_config: SGLANGModelConfig) -> None:\n        if self.model_spec.model_format != \"fp4\":\n            return\n\n        if \"quantization\" in model_config:\n            logger.warning(\n                \"SGLang fp4 expects offline-quantized weights; ignoring quantization=%s\",\n                model_config[\"quantization\"],\n            )\n            model_config.pop(\"quantization\", None)\n        model_config.setdefault(\"dtype\", \"bfloat16\")\n\n    @staticmethod\n    def _sanitize_generate_config(\n        generate_config: Optional[SGLANGGenerateConfig] = None,\n    ) -> SGLANGGenerateConfig:\n        if generate_config is None:\n            generate_config = SGLANGGenerateConfig()\n\n        generate_config.setdefault(\"presence_penalty\", 0.0)\n        generate_config.setdefault(\"frequency_penalty\", 0.0)\n        generate_config.setdefault(\"temperature\", 1.0)\n        generate_config.setdefault(\"top_p\", 1.0)\n        generate_config.setdefault(\"top_k\", -1)\n        max_tokens = (\n            generate_config.pop(\"max_tokens\", XINFERENCE_MAX_TOKENS)  # type: ignore\n            or XINFERENCE_MAX_TOKENS\n        )\n        generate_config.setdefault(\"max_new_tokens\", max_tokens)  # type: ignore\n        generate_config.setdefault(\"stop\", [])\n        generate_config.setdefault(\"stream\", False)\n        stream_options = generate_config.get(\"stream_options\")\n        generate_config.setdefault(\"stream_options\", stream_options)\n        generate_config.setdefault(\"ignore_eos\", False)\n        response_format = generate_config.pop(\"response_format\", None)\n        if response_format:\n            json_schema_config = response_format.pop(\"json_schema\", None)\n            json_schema = None\n            if \"schema_\" in json_schema_config:\n                json_schema = json_schema_config.pop(\"schema_\")\n            elif \"schema\" in json_schema_config:\n                json_schema = json_schema_config.pop(\"schema\")\n            if json_schema:\n                generate_config.setdefault(\"json_schema\", json.dumps(json_schema))  # type: ignore\n\n        return generate_config\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"sglang\", \"sglang\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not cls._has_cuda_device():\n            return False, \"SGLang requires CUDA GPUs\"\n        if not cls._is_linux():\n            return False, \"SGLang backend is only supported on Linux\"\n        if llm_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"fp8\", \"bnb\"]:\n            return (\n                False,\n                \"SGLang supports pytorch/gptq/awq/fp8/bnb formats only\",\n            )\n        if llm_spec.model_format == \"fp4\":\n            return (\n                False,\n                \"SGLang does not support fp4 online quantization; use offline fp4 weights with a compatible SGLang version\",\n            )\n        if llm_spec.model_format == \"pytorch\":\n            if quantization not in (None, \"none\"):\n                return (\n                    False,\n                    \"pytorch format with quantization is not supported by SGLang\",\n                )\n        if not llm_family.matches_supported_architectures(SGLANG_SUPPORTED_MODELS):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not supported by SGLang\",\n            )\n        if \"generate\" not in llm_family.model_ability:\n            return False, \"SGLang base engine requires generate ability\"\n        if not SGLANG_INSTALLED:\n            return False, \"sglang library is not installed\"\n        return True\n\n    @staticmethod\n    def _convert_state_to_completion_chunk(\n        request_id: str, model: str, output_text: str, meta_info: Dict\n    ) -> CompletionChunk:\n        finish_reason_raw = meta_info.get(\"finish_reason\", None)\n        finish_reason: Optional[str] = None\n        if isinstance(finish_reason_raw, dict) and \"type\" in finish_reason_raw:\n            finish_reason = (\n                str(finish_reason_raw[\"type\"])\n                if finish_reason_raw[\"type\"] is not None\n                else None\n            )\n        elif isinstance(finish_reason_raw, str):\n            finish_reason = finish_reason_raw\n        choices: List[CompletionChoice] = [\n            CompletionChoice(\n                text=output_text,\n                index=0,\n                logprobs=None,\n                finish_reason=finish_reason,\n            )\n        ]\n        usage = CompletionUsage(\n            prompt_tokens=meta_info[\"prompt_tokens\"],\n            completion_tokens=meta_info[\"completion_tokens\"],\n            total_tokens=meta_info[\"prompt_tokens\"] + meta_info[\"completion_tokens\"],\n        )\n        chunk = CompletionChunk(\n            id=request_id,\n            object=\"text_completion\",\n            created=int(time.time()),\n            model=model,\n            choices=choices,\n            usage=usage,\n        )\n        return chunk\n\n    @staticmethod\n    def _convert_state_to_completion(\n        request_id: str, model: str, output_text: str, meta_info: Dict\n    ) -> Completion:\n        finish_reason_raw = meta_info.get(\"finish_reason\", None)\n        finish_reason: Optional[str] = None\n        if isinstance(finish_reason_raw, dict) and \"type\" in finish_reason_raw:\n            finish_reason = (\n                str(finish_reason_raw[\"type\"])\n                if finish_reason_raw[\"type\"] is not None\n                else None\n            )\n        elif isinstance(finish_reason_raw, str):\n            finish_reason = finish_reason_raw\n        choices = [\n            CompletionChoice(\n                text=output_text,\n                index=0,\n                logprobs=None,\n                finish_reason=finish_reason,\n            )\n        ]\n\n        usage = CompletionUsage(\n            prompt_tokens=meta_info[\"prompt_tokens\"],\n            completion_tokens=meta_info[\"completion_tokens\"],\n            total_tokens=meta_info[\"prompt_tokens\"] + meta_info[\"completion_tokens\"],\n        )\n        return Completion(\n            id=request_id,\n            object=\"text_completion\",\n            created=int(time.time()),\n            model=model,\n            choices=choices,\n            usage=usage,\n        )\n\n    @classmethod\n    def _filter_sampling_params(cls, sampling_params: dict):\n        if not sampling_params.get(\"lora_name\"):\n            sampling_params.pop(\"lora_name\", None)\n        return sampling_params\n\n    async def _stream_generate(\n        self,\n        prompt: str,\n        image_data: Optional[Union[List[str], str]] = None,\n        **sampling_params,\n    ):\n        import aiohttp\n\n        sampling_params = self._filter_sampling_params(sampling_params)\n        json_data = {\n            \"text\": prompt,\n            \"image_data\": image_data,\n            \"sampling_params\": sampling_params,\n            \"stream\": True,\n        }\n        pos = 0\n\n        timeout = aiohttp.ClientTimeout(total=3 * 3600)\n        async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:\n            async with session.post(\n                self._engine.generate_url, json=json_data  # type: ignore\n            ) as response:\n                async for chunk, _ in response.content.iter_chunks():\n                    chunk = chunk.decode(\"utf-8\")\n                    if chunk and chunk.startswith(\"data:\"):\n                        stop = \"data: [DONE]\\n\\n\"\n                        need_stop = False\n                        if chunk.endswith(stop):\n                            chunk = chunk[: -len(stop)]\n                            need_stop = True\n                        if chunk:\n                            data = json.loads(chunk[5:].strip(\"\\n\"))\n                            cur = data[\"text\"][pos:]\n                            if cur:\n                                yield data[\"meta_info\"], cur\n                            pos += len(cur)\n                            if need_stop:\n                                break\n\n    async def _non_stream_generate(\n        self,\n        prompt: str,\n        image_data: Optional[Union[List[str], str]] = None,\n        **sampling_params,\n    ) -> dict:\n        import aiohttp\n\n        sampling_params = self._filter_sampling_params(sampling_params)\n        json_data = {\n            \"text\": prompt,\n            \"image_data\": image_data,\n            \"sampling_params\": sampling_params,\n        }\n        async with aiohttp.ClientSession(trust_env=True) as session:\n            async with session.post(\n                self._engine.generate_url, json=json_data  # type: ignore\n            ) as response:\n                return await response.json()\n\n    async def async_generate(\n        self,\n        prompt: str,\n        *,\n        image_data: Optional[Union[List[str], str]] = None,\n        generate_config: Optional[SGLANGGenerateConfig] = None,\n        tools: Optional[List[Dict]] = None,\n        request_id: Optional[str] = None,\n    ) -> Union[Completion, AsyncGenerator[CompletionChunk, None]]:\n        sanitized_generate_config = self._sanitize_generate_config(generate_config)\n        logger.debug(\n            \"Enter generate, prompt: %s, generate config: %s\", prompt, generate_config\n        )\n        stream = sanitized_generate_config.pop(\"stream\")\n        stream_options = sanitized_generate_config.pop(\"stream_options\")\n\n        include_usage = (\n            stream_options.pop(\"include_usage\")\n            if isinstance(stream_options, dict)\n            else False\n        )\n        if not request_id:\n            request_id = str(uuid.uuid1())\n        if not stream:\n            state = await self._non_stream_generate(\n                prompt, image_data, **sanitized_generate_config\n            )\n            return self._convert_state_to_completion(\n                request_id,\n                model=self.model_uid,\n                output_text=state[\"text\"],\n                meta_info=state[\"meta_info\"],\n            )\n        else:\n\n            async def stream_results() -> AsyncGenerator[CompletionChunk, None]:\n                prompt_tokens, completion_tokens, total_tokens = 0, 0, 0\n                complete_response = \"\"\n                match_tool_call_tmp_results: List[CompletionChunk] = []\n                is_match_tool_call = False\n                chunk = None\n                finish_reason = None\n                async for meta_info, out in self._stream_generate(\n                    prompt, image_data, **sanitized_generate_config\n                ):\n                    chunk = self._convert_state_to_completion_chunk(\n                        request_id,\n                        self.model_uid,\n                        output_text=out,\n                        meta_info=meta_info,\n                    )\n                    complete_response += out\n                    finish_reason = meta_info[\"finish_reason\"]\n                    prompt_tokens = meta_info[\"prompt_tokens\"]\n                    completion_tokens = meta_info[\"completion_tokens\"]\n                    total_tokens = prompt_tokens + completion_tokens\n                    chunk[\"usage\"] = CompletionUsage(\n                        prompt_tokens=prompt_tokens,\n                        completion_tokens=completion_tokens,\n                        total_tokens=total_tokens,\n                    )\n                    if tools:\n                        \"\"\"\n                        The qwen2 tool call returns format like this:\n                        <tool_call>\n                        {...}\n                        </tool_call>\n                        Here is to match this.\n                        \"\"\"\n                        if (\n                            len(QWEN_TOOL_CALL_SYMBOLS[0]) > len(complete_response)\n                        ) and (\n                            not QWEN_TOOL_CALL_SYMBOLS[0].startswith(complete_response)\n                        ):\n                            for c in match_tool_call_tmp_results:\n                                yield c\n                            match_tool_call_tmp_results.clear()\n                            yield chunk\n                        elif (\n                            len(QWEN_TOOL_CALL_SYMBOLS[0]) > len(complete_response)\n                        ) and (QWEN_TOOL_CALL_SYMBOLS[0].startswith(complete_response)):\n                            match_tool_call_tmp_results.append(chunk)\n                        else:\n                            assert len(QWEN_TOOL_CALL_SYMBOLS[0]) <= len(\n                                complete_response\n                            )\n                            if not is_match_tool_call and complete_response.startswith(\n                                QWEN_TOOL_CALL_SYMBOLS[0]\n                            ):\n                                is_match_tool_call = True\n                                match_tool_call_tmp_results.clear()\n\n                            if not is_match_tool_call:\n                                for c in match_tool_call_tmp_results:\n                                    yield c\n                                match_tool_call_tmp_results.clear()\n                                yield chunk\n                            else:\n                                chunk[\"choices\"][0][\"text\"] = complete_response\n                    else:\n                        yield chunk\n\n                if is_match_tool_call:\n                    assert chunk is not None\n                    yield chunk\n\n                finish_reason = (\n                    \"stop\"\n                    if finish_reason is None\n                    or (\n                        isinstance(finish_reason, str)\n                        and finish_reason.lower() == \"none\"\n                    )\n                    else finish_reason\n                )\n                yield generate_completion_chunk(\n                    \"\",\n                    finish_reason=finish_reason,\n                    chunk_id=request_id,\n                    model_uid=self.model_uid,\n                    prompt_tokens=prompt_tokens,\n                    completion_tokens=completion_tokens,\n                    total_tokens=total_tokens,\n                )\n\n                if include_usage:\n                    chunk = CompletionChunk(\n                        id=request_id,\n                        object=\"text_completion\",\n                        created=int(time.time()),\n                        model=self.model_uid,\n                        choices=[],\n                    )\n                    chunk[\"usage\"] = CompletionUsage(\n                        prompt_tokens=prompt_tokens,\n                        completion_tokens=completion_tokens,\n                        total_tokens=total_tokens,\n                    )\n                    yield chunk\n\n            return stream_results()\n\n\nclass SGLANGChatModel(SGLANGModel, ChatModelMixin):\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"fp8\", \"bnb\"]:\n            return (\n                False,\n                \"SGLang chat engine supports pytorch/gptq/awq/fp8/bnb formats only\",\n            )\n        if llm_spec.model_format == \"fp4\":\n            return (\n                False,\n                \"SGLang chat engine does not support fp4 online quantization; use offline fp4 weights with a compatible SGLang version\",\n            )\n        if llm_spec.model_format == \"pytorch\":\n            if quantization not in (None, \"none\"):\n                return (\n                    False,\n                    \"pytorch format with quantization is not supported by SGLang chat\",\n                )\n        if not llm_family.matches_supported_architectures(SGLANG_SUPPORTED_CHAT_MODELS):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not supported by SGLang chat\",\n            )\n        if \"chat\" not in llm_family.model_ability:\n            return False, \"SGLang chat engine requires chat ability\"\n        if not SGLANG_INSTALLED:\n            return False, \"sglang library is not installed\"\n        return True\n\n    def _sanitize_chat_config(\n        self,\n        generate_config: Optional[Dict] = None,\n    ) -> Dict:\n        if not generate_config:\n            generate_config = {}\n        if self.model_family.stop:\n            if (not generate_config.get(\"stop\")) and self.model_family.stop:\n                generate_config[\"stop\"] = self.model_family.stop.copy()\n        generate_config.pop(\"chat_template_kwargs\", None)\n        return generate_config\n\n    @staticmethod\n    def is_tool_call_chunk_start(chunk):\n        return chunk[\"choices\"][0][\"text\"].startswith(QWEN_TOOL_CALL_SYMBOLS[0])\n\n    @staticmethod\n    def is_tool_call_chunk_end(chunk):\n        return chunk[\"choices\"][0][\"text\"].endswith(QWEN_TOOL_CALL_SYMBOLS[1])\n\n    async def async_chat(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[Dict] = None,\n        request_id: Optional[str] = None,\n    ) -> Union[ChatCompletion, AsyncGenerator[ChatCompletionChunk, None]]:\n        assert self.model_family.chat_template is not None\n        # fix: Object of type list_iterator is not JSON serializable\n        tools = list(generate_config.pop(\"tools\", [])) if generate_config else None\n        model_family = self.model_family.model_family or self.model_family.model_name\n        chat_template_kwargs = (\n            self._get_chat_template_kwargs_from_generate_config(\n                generate_config, self.reasoning_parser\n            )\n            or {}\n        )\n        chat_context_var.set(chat_template_kwargs)\n        full_context_kwargs = chat_template_kwargs.copy()\n        if tools:\n            if (\n                model_family in QWEN_TOOL_CALL_FAMILY\n                or model_family in DEEPSEEK_TOOL_CALL_FAMILY\n            ):\n                full_context_kwargs[\"tools\"] = tools\n        full_prompt = self.get_full_context(\n            messages, self.model_family.chat_template, **full_context_kwargs\n        )\n        generate_config = self._sanitize_chat_config(generate_config)\n        stream = generate_config.get(\"stream\", None)\n        if stream:\n            agen = await self.async_generate(full_prompt, generate_config=generate_config, tools=tools)  # type: ignore\n            assert isinstance(agen, AsyncGenerator)\n            if tools:\n                return self._async_to_tool_completion_chunks(agen)\n            return self._async_to_chat_completion_chunks(\n                agen, self.reasoning_parser, chat_template_kwargs\n            )\n        else:\n            c = await self.async_generate(full_prompt, generate_config=generate_config, tools=tools)  # type: ignore\n            assert not isinstance(c, AsyncGenerator)\n            if tools:\n                return self._post_process_completion(\n                    self.model_family, self.model_uid, c\n                )\n            return self._to_chat_completion(c, self.reasoning_parser)\n\n\nclass SGLANGVisionModel(SGLANGModel, ChatModelMixin):\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not cls._has_cuda_device():\n            return False, \"SGLang vision engine requires CUDA GPUs\"\n        if not cls._is_linux():\n            return False, \"SGLang vision engine is only supported on Linux\"\n        if llm_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"fp8\", \"bnb\"]:\n            return (\n                False,\n                \"SGLang vision engine supports pytorch/gptq/awq/fp8/bnb formats only\",\n            )\n        if llm_spec.model_format == \"fp4\":\n            return (\n                False,\n                \"SGLang vision engine does not support fp4 online quantization; use offline fp4 weights with a compatible SGLang version\",\n            )\n        if llm_spec.model_format == \"pytorch\":\n            if quantization not in (None, \"none\"):\n                return (\n                    False,\n                    \"pytorch format with quantization is not supported by SGLang vision\",\n                )\n        if not llm_family.matches_supported_architectures(\n            SGLANG_SUPPORTED_VISION_MODEL_LIST\n        ):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not supported by SGLang vision\",\n            )\n        if \"vision\" not in llm_family.model_ability:\n            return False, \"SGLang vision engine requires vision ability\"\n        if not SGLANG_INSTALLED:\n            return False, \"sglang library is not installed\"\n        return True\n\n    def _sanitize_chat_config(\n        self,\n        generate_config: Optional[Dict] = None,\n    ) -> Dict:\n        if not generate_config:\n            generate_config = {}\n        if self.model_family.stop:\n            if (not generate_config.get(\"stop\")) and self.model_family.stop:\n                generate_config[\"stop\"] = self.model_family.stop.copy()\n        return generate_config\n\n    async def async_chat(\n        self,\n        messages: List[ChatCompletionMessage],  # type: ignore\n        generate_config: Optional[Dict] = None,\n        request_id: Optional[str] = None,\n    ) -> Union[ChatCompletion, AsyncGenerator[ChatCompletionChunk, None]]:\n        import base64\n        from io import BytesIO\n\n        from PIL import Image\n        from qwen_vl_utils import process_vision_info\n\n        messages = self._transform_messages(messages)\n\n        chat_template: str = (\n            self.model_family.chat_template if self.model_family.chat_template else \"\"\n        )\n        chat_template_kwargs = (\n            self._get_chat_template_kwargs_from_generate_config(\n                generate_config, self.reasoning_parser\n            )\n            or {}\n        )\n        chat_context_var.set(chat_template_kwargs)\n        full_context_kwargs = chat_template_kwargs.copy()\n        prompt = self.get_full_context(messages, chat_template, **full_context_kwargs)\n\n        images, video_inputs = process_vision_info(messages)\n        if video_inputs:\n            raise ValueError(\"Not support video input now.\")\n\n        base64_images: Optional[List[str]] = None\n        if images:\n            base64_images = []\n            for image in images:\n                if isinstance(image, Image.Image):\n                    buffered = BytesIO()\n                    image.save(buffered, format=\"JPEG\", quality=100)\n                    base64_images.append(base64.b64encode(buffered.getvalue()).decode())\n                elif isinstance(image, str):\n                    base64_images.append(image)\n                else:\n                    raise ValueError(\n                        f\"Unsupported image type: {type(image)}, only support PIL.Image and base64 string\"\n                    )\n\n        generate_config = self._sanitize_chat_config(generate_config)\n        stream = generate_config.get(\"stream\", None)\n        if stream:\n            agen = await self.async_generate(prompt, image_data=base64_images, generate_config=generate_config)  # type: ignore\n            assert isinstance(agen, AsyncGenerator)\n            return self._async_to_chat_completion_chunks(agen, self.reasoning_parser)\n        else:\n            c = await self.async_generate(prompt, image_data=base64_images, generate_config=generate_config)  # type: ignore\n            assert not isinstance(c, AsyncGenerator)\n            return self._to_chat_completion(c, self.reasoning_parser)\n"
  },
  {
    "path": "xinference/model/llm/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/tests/test_harmony.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport re\n\nfrom ..harmony import HarmonyStreamParser, async_stream_harmony_chat_completion\n\n\ndef test_streaming_parser_multiple_texts():\n    parser = HarmonyStreamParser()\n\n    texts = [\n        'analysisThe user says \"你好\" (Hello). We need to respond in Chinese presumably. '\n        \"Should greet back and ask how can help.\\n\"\n        \"We should keep it short but friendly.assistantfinal你好！很高兴和你聊聊天。\"\n        \"请问有什么我可以帮忙的？祝你今天愉快！\",\n        'analysisThe user wrote \"你好\" (Hello in Chinese). We need to respond appropriately, '\n        \"presumably in Chinese. The system instructions say we should produce natural, friendly tone, \"\n        \"follow style guidelines.\\n\\n\"\n        \"We can greet back and ask how we can help. \"  # noqa: codespell\n        \"Possibly ask if they want assistance with something specific. Use Chinese. \"\n        \"Also note use of markdown optionally.\\n\\n\"\n        \"Will respond with a friendly greeting and ask what they need.\"\n        \"assistantfinal你好！有什么我可以帮忙的吗？😊如果有任何问题或需要讨论的话题，尽管告诉我。\",\n    ]\n\n    all_segments = []\n    for text in texts:\n        for seg in parser.feed(text):\n            all_segments.append(seg)\n\n    # We expect 4 segments total: 2 per text\n    assert len(all_segments) == 4\n\n    # Check channels\n    assert all_segments[0][\"channel\"] == \"analysis\"\n    assert all_segments[1][\"channel\"] == \"final\"\n    assert all_segments[2][\"channel\"] == \"analysis\"\n    assert all_segments[3][\"channel\"] == \"final\"\n\n    # Optionally, check some content keywords\n    assert \"The user says\" in all_segments[0][\"content\"]\n    assert \"你好！很高兴\" in all_segments[1][\"content\"]\n    assert \"The user wrote\" in all_segments[2][\"content\"]\n    assert \"你好！有什么我可以帮忙\" in all_segments[3][\"content\"]\n\n\nasync def test_harmony_streaming_and_nonstreaming():\n    texts = [\n        'analysisThe user says \"你好\" (Hello). We need to respond in Chinese presumably. '\n        \"Should greet back and ask how can help.\\n\"\n        \"We should keep it short but friendly.assistantfinal你好！很高兴和你聊聊天。\"\n        \"请问有什么我可以帮忙的？祝你今天愉快！\",\n        'analysisThe user wrote \"你好\" (Hello in Chinese). We need to respond appropriately, '\n        \"presumably in Chinese. The system instructions say we should produce natural, friendly tone, \"\n        \"follow style guidelines.\\n\\n\"\n        \"We can greet back and ask how we can help. \"\n        \"Possibly ask if they want assistance with something specific. Use Chinese. \"\n        \"Also note use of markdown optionally.\\n\\nWill respond with a friendly greeting and ask what they need.\"\n        \"assistantfinal你好！有什么我可以帮忙的吗？😊如果有任何问题或需要讨论的话题，尽管告诉我。\",\n    ]\n\n    ### --- Non-streaming test ---\n    full_chat = {\n        \"id\": \"full_test\",\n        \"object\": \"chat.completion\",\n        \"created\": 0,\n        \"model\": \"test-model\",\n        \"choices\": [\n            {\"index\": 0, \"message\": {\"content\": t, \"reasoning_content\": \"\"}}\n            for t in texts\n        ],\n        \"usage\": {},\n    }\n\n    parsed_full = []\n    async for chunk in async_stream_harmony_chat_completion(full_chat):\n        parsed_full.append(chunk)\n\n    assert len(parsed_full) == 1\n    for i, choice in enumerate(parsed_full[0][\"choices\"]):\n        msg = choice[\"message\"]\n        content = msg.get(\"content\", \"\")\n        reasoning = msg.get(\"reasoning_content\", \"\")\n        assert \"你好\" in content, \"Final content missing\"\n        assert \"The user\" in reasoning, \"Reasoning content missing\"\n        assert not content.startswith(\n            \"analysis\"\n        ), \"Final content incorrectly contains analysis prefix\"\n\n    ### --- Streaming test (realistic incremental chunks) ---\n    import asyncio\n\n    async def async_chunk_generator():\n        chunk_size = 15  # simulate token-level streaming\n\n        for t in texts:\n            # Split by key prefixes, keep prefixes with content\n            segments = re.split(r\"(analysis|assistantfinal)\", t)\n            segs_with_prefix = []\n\n            i = 0\n            while i < len(segments):\n                if segments[i] in (\"analysis\", \"assistantfinal\"):\n                    segs_with_prefix.append(segments[i] + segments[i + 1])\n                    i += 2\n                else:\n                    if segments[i]:\n                        segs_with_prefix.append(segments[i])\n                    i += 1\n\n            # Now cut each segment into smaller chunks\n            for seg in segs_with_prefix:\n                for j in range(0, len(seg), chunk_size):\n                    piece = seg[j : j + chunk_size]\n                    yield {\n                        \"id\": \"stream_test\",\n                        \"model\": \"test-model\",\n                        \"object\": \"chat.completion.chunk\",\n                        \"created\": 0,\n                        \"choices\": [\n                            {\n                                \"index\": 0,\n                                \"delta\": {\"content\": piece},\n                                \"finish_reason\": None,\n                            }\n                        ],\n                    }\n                    await asyncio.sleep(\n                        0\n                    )  # Small delay to simulate real async behavior\n\n    incremental_results = []\n    async for chunk in async_stream_harmony_chat_completion(async_chunk_generator()):\n        incremental_results.append(chunk)\n\n    # Streaming test: accumulate manually\n    accum_content = \"\"\n    accum_reasoning = \"\"\n\n    for chunk in incremental_results:\n        delta = chunk[\"choices\"][0][\"delta\"]\n        accum_content += delta.get(\"content\", \"\") or \"\"\n        reasoning_content = delta.get(\"reasoning_content\", \"\")\n        if reasoning_content is not None:\n            accum_reasoning += reasoning_content\n\n    # Verify accumulated result\n    assert \"你好\" in accum_content, \"Streaming final content missing\"\n    assert \"The user\" in accum_reasoning, \"Streaming reasoning content missing\"\n    assert not accum_content.startswith(\n        \"analysis\"\n    ), \"Streaming content incorrectly contains analysis prefix\"\n\n\nstream_chunks = [\n    {\n        \"id\": \"chat1\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090509,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\n                \"index\": 0,\n                \"delta\": {\"role\": \"assistant\", \"content\": \"\"},\n                \"finish_reason\": None,\n            }\n        ],\n    },\n    {\n        \"id\": \"chat2\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090509,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \"analysis\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat3\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090509,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \"The\"}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat4\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090509,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \" user says\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat5\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090510,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": ' \"你好'}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat6\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090510,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": '\" ('}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat7\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090510,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \"Hello).\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat8\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090510,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \" We should\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat9\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090510,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \" respond in\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat10\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090510,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \" Chinese,\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat11\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090510,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\n                \"index\": 0,\n                \"delta\": {\"content\": \" friendly greeting\"},\n                \"finish_reason\": None,\n            }\n        ],\n    },\n    {\n        \"id\": \"chat12\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090511,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \".\\n\\n We\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat13\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090511,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \" can say\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat14\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090511,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \" something like\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat15\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090511,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": ' \"你好'}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat16\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090511,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \"！有什么\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat17\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090511,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \"可以帮\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat18\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090511,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": '您?\"'}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat19\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090511,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \" Keep brief\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat20\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090512,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \".\"}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat21\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090512,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \"assistant\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat22\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090512,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \"final\"}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat23\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090512,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \"你好\"}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat24\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090512,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \"！很\"}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat25\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090512,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \"高兴\"}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat26\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090512,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \"见到\"}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat27\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090513,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \"你。\"}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat28\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090513,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \"请问\"}, \"finish_reason\": None}],\n    },\n    {\n        \"id\": \"chat29\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090513,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \"有什么我\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat30\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090513,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \"可以帮助\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat31\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090513,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [\n            {\"index\": 0, \"delta\": {\"content\": \"你的？\"}, \"finish_reason\": None}\n        ],\n    },\n    {\n        \"id\": \"chat32\",\n        \"model\": \"gpt-oss\",\n        \"created\": 1755090513,\n        \"object\": \"chat.completion.chunk\",\n        \"choices\": [{\"index\": 0, \"delta\": {\"content\": \"\"}, \"finish_reason\": \"stop\"}],\n    },\n]\n\n\nasync def test_async_stream_chunks():\n    \"\"\"Test with async generator instead of sync list\"\"\"\n    import asyncio\n\n    async def async_chunk_generator():\n        for chunk in stream_chunks:\n            yield chunk\n            await asyncio.sleep(0)  # Small delay to simulate real async behavior\n\n    content_accum = \"\"\n    reasoning_accum = \"\"\n    all_chunks = []\n\n    # Test that reasoning_content is None when content has value but reasoning_content is empty\n    chunk_with_content_count = 0\n    async for chunk in async_stream_harmony_chat_completion(async_chunk_generator()):\n        all_chunks.append(chunk)\n        delta = chunk[\"choices\"][0].get(\"delta\", {})\n        if delta.get(\"content\"):\n            chunk_with_content_count += 1\n            # 当 content 不为空时，reasoning_content 应该为 None\n            assert (\n                delta.get(\"reasoning_content\") is None\n            ), f\"Chunk {chunk_with_content_count}: reasoning_content should be None when content has value\"\n\n        if delta.get(\"reasoning_content\"):\n            reasoning_accum += delta.get(\"reasoning_content\", \"\")\n        else:\n            content_accum += delta.get(\"content\", \"\")\n\n    # Check that the last chunk has finish_reason: \"stop\"\n    last_chunk = all_chunks[-1]\n    last_choice = last_chunk[\"choices\"][0]\n    assert (\n        last_choice.get(\"finish_reason\") == \"stop\"\n    ), f\"Last chunk should have finish_reason 'stop', got {last_choice.get('finish_reason')}\"\n\n    expected_content = \"你好！很高兴见到你。请问有什么我可以帮助你的？\"\n    expected_reasoning = (\n        'The user says \"你好\" (Hello). We should respond in Chinese, friendly greeting.\\n\\n'\n        ' We can say something like \"你好！有什么可以帮您?\" Keep brief.'\n    )\n\n    assert content_accum == expected_content\n    assert reasoning_accum == expected_reasoning\n    assert chunk_with_content_count > 0, \"Should have chunks with content\"\n"
  },
  {
    "path": "xinference/model/llm/tests/test_llm_family.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport shutil\nimport tempfile\nfrom unittest.mock import patch\n\nimport pytest\n\nfrom ....constants import XINFERENCE_ENV_MODEL_SRC\nfrom ...utils import is_locale_chinese_simplified, is_valid_model_uri\nfrom ..cache_manager import LLMCacheManager as CacheManager\nfrom ..llm_family import (\n    CustomLLMFamilyV2,\n    LlamaCppLLMSpecV2,\n    LLMFamilyV2,\n    PytorchLLMSpecV2,\n    convert_model_size_to_float,\n    match_llm,\n    match_model_size,\n)\n\n\ndef test_deserialize_llm_family_v1():\n    serialized = \"\"\"{\n   \"version\":2,\n   \"context_length\":2048,\n   \"model_name\":\"TestModel\",\n   \"model_lang\":[\n      \"en\"\n   ],\n   \"model_ability\":[\n      \"embed\", \"generate\"\n   ],\n   \"model_specs\":[\n      {\n         \"model_format\":\"ggufv2\",\n         \"model_size_in_billions\":2,\n         \"quantization\": \"q4_0\",\n         \"quantization_parts\": {\n            \"q4_2\": [\"a\", \"b\"]\n         },\n         \"model_id\":\"example/TestModel\",\n         \"model_file_name_template\":\"TestModel.{quantization}.bin\",\n         \"model_file_name_split_template\":\"TestModel.{quantization}.bin.{part}\"\n      },\n      {\n         \"model_format\":\"ggufv2\",\n         \"model_size_in_billions\":2,\n         \"quantization\": \"q4_1\",\n         \"quantization_parts\": {\n            \"q4_2\": [\"a\", \"b\"]\n         },\n         \"model_id\":\"example/TestModel\",\n         \"model_file_name_template\":\"TestModel.{quantization}.bin\",\n         \"model_file_name_split_template\":\"TestModel.{quantization}.bin.{part}\"\n      },\n      {\n         \"model_format\":\"pytorch\",\n         \"model_size_in_billions\":3,\n         \"quantization\": \"none\",\n         \"model_id\":\"example/TestModel\"\n      }\n   ],\n   \"chat_template\": \"xyz\",\n   \"stop_token_ids\": [1, 2, 3],\n   \"stop\": [\"hello\", \"world\"]\n}\"\"\"\n    model_family = LLMFamilyV2.parse_raw(serialized)\n    assert isinstance(model_family, LLMFamilyV2)\n    assert model_family.version == 2\n    assert model_family.context_length == 2048\n    assert model_family.model_name == \"TestModel\"\n    assert model_family.model_lang == [\"en\"]\n    assert model_family.model_ability == [\"embed\", \"generate\"]\n    assert len(model_family.model_specs) == 3\n\n    gguf_spec = model_family.model_specs[0]\n    assert gguf_spec.model_format == \"ggufv2\"\n    assert gguf_spec.model_size_in_billions == 2\n    assert gguf_spec.model_id == \"example/TestModel\"\n    assert gguf_spec.model_hub == \"huggingface\"\n    assert gguf_spec.model_file_name_template == \"TestModel.{quantization}.bin\"\n    assert (\n        gguf_spec.model_file_name_split_template\n        == \"TestModel.{quantization}.bin.{part}\"\n    )\n    assert gguf_spec.quantization_parts[\"q4_2\"][0] == \"a\"\n    assert gguf_spec.quantization_parts[\"q4_2\"][1] == \"b\"\n\n    pytorch_spec = model_family.model_specs[-1]\n    assert pytorch_spec.model_format == \"pytorch\"\n    assert pytorch_spec.model_size_in_billions == 3\n    assert pytorch_spec.model_hub == \"huggingface\"\n    assert pytorch_spec.model_id == \"example/TestModel\"\n\n    assert model_family.chat_template == \"xyz\"\n    assert model_family.stop_token_ids == [1, 2, 3]\n    assert model_family.stop == [\"hello\", \"world\"]\n\n\ndef test_cache_from_huggingface_pytorch():\n    spec = PytorchLLMSpecV2(\n        model_format=\"pytorch\",\n        model_size_in_billions=1,\n        quantization=\"none\",\n        model_id=\"facebook/opt-125m\",\n    )\n    family = LLMFamilyV2(\n        version=2,\n        context_length=2048,\n        model_type=\"LLM\",\n        model_name=\"opt\",\n        model_lang=[\"en\"],\n        model_ability=[\"embed\", \"generate\"],\n        model_specs=[spec],\n        chat_template=None,\n        stop_token_ids=None,\n        stop=None,\n    )\n\n    cache_dir = CacheManager(family).cache_from_huggingface()\n\n    assert os.path.exists(cache_dir)\n    assert os.path.exists(os.path.join(cache_dir, \"README.md\"))\n    assert os.path.islink(os.path.join(cache_dir, \"README.md\"))\n    shutil.rmtree(cache_dir)\n\n\ndef test_cache_from_huggingface_gguf():\n    spec = LlamaCppLLMSpecV2(\n        model_format=\"ggufv2\",\n        model_size_in_billions=\"0_5\",\n        model_id=\"Qwen/Qwen1.5-0.5B-Chat-GGUF\",\n        quantization=\"q4_0\",\n        model_file_name_template=\"README.md\",\n    )\n    family = LLMFamilyV2(\n        version=2,\n        context_length=2048,\n        model_type=\"LLM\",\n        model_name=\"qwen1.5-chat\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\"],\n        model_specs=[spec],\n        chat_template=None,\n        stop_token_ids=None,\n        stop=None,\n    )\n\n    cache_manager = CacheManager(family)\n\n    cache_dir = cache_manager.get_cache_dir()\n    shutil.rmtree(cache_dir, ignore_errors=True)\n\n    cache_dir = cache_manager.cache_from_huggingface()\n\n    assert os.path.exists(cache_dir)\n    assert os.path.exists(os.path.join(cache_dir, \"README.md\"))\n    assert os.path.islink(os.path.join(cache_dir, \"README.md\"))\n    shutil.rmtree(cache_dir)\n\n\ndef test_cache_from_uri_local():\n    with open(\"model.bin\", \"w\") as fd:\n        fd.write(\"foo\")\n\n    spec = LlamaCppLLMSpecV2(\n        model_format=\"ggufv2\",\n        model_size_in_billions=3,\n        model_id=\"TestModel\",\n        model_uri=os.path.abspath(os.getcwd()),\n        quantization=\"\",\n        model_file_name_template=\"model.bin\",\n    )\n    family = LLMFamilyV2(\n        version=2,\n        context_length=2048,\n        model_type=\"LLM\",\n        model_name=\"test_cache_from_uri_local\",\n        model_lang=[\"en\"],\n        model_ability=[\"embed\", \"chat\"],\n        model_specs=[spec],\n        chat_template=None,\n        stop_token_ids=None,\n        stop=None,\n    )\n\n    cache_dir = CacheManager(family).cache()\n    assert os.path.exists(cache_dir)\n    assert os.path.islink(cache_dir)\n    assert os.path.exists(os.path.join(cache_dir, \"model.bin\"))\n    os.remove(cache_dir)\n    os.remove(\"model.bin\")\n\n\ndef test_custom_llm():\n    from ..custom import get_user_defined_llm_families, register_llm, unregister_llm\n\n    spec = LlamaCppLLMSpecV2(\n        model_format=\"ggufv2\",\n        model_size_in_billions=\"0_5\",\n        model_id=\"Qwen/Qwen1.5-0.5B-Chat-GGUF\",\n        quantization=\"\",\n        model_file_name_template=\"README.md\",\n    )\n    family = LLMFamilyV2(\n        version=2,\n        context_length=2048,\n        model_type=\"LLM\",\n        model_name=\"custom-qwen1.5-chat\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\"],\n        model_specs=[spec],\n        chat_template=None,\n        stop_token_ids=None,\n        stop=None,\n    )\n\n    register_llm(family, False)\n\n    assert family in get_user_defined_llm_families()\n\n    unregister_llm(family.model_name)\n    assert family not in get_user_defined_llm_families()\n\n\ndef test_persistent_custom_llm():\n    from ....constants import XINFERENCE_MODEL_DIR\n    from ..custom import get_user_defined_llm_families, register_llm, unregister_llm\n\n    spec = LlamaCppLLMSpecV2(\n        model_format=\"ggufv2\",\n        model_size_in_billions=\"0_5\",\n        model_id=\"Qwen/Qwen1.5-0.5B-Chat-GGUF\",\n        quantization=\"\",\n        model_file_name_template=\"README.md\",\n    )\n    family = LLMFamilyV2(\n        version=2,\n        context_length=2048,\n        model_type=\"LLM\",\n        model_name=\"custom_model\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\"],\n        model_specs=[spec],\n        chat_template=None,\n        stop_token_ids=None,\n        stop=None,\n    )\n\n    register_llm(family, True)\n\n    assert family in get_user_defined_llm_families()\n    assert f\"{family.model_name}.json\" in os.listdir(\n        os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"llm\")\n    )\n\n    unregister_llm(family.model_name)\n    assert family not in get_user_defined_llm_families()\n    assert f\"{family.model_name}.json\" not in os.listdir(\n        os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"llm\")\n    )\n\n\ndef test_is_locale_chinese_simplified():\n    def zh_cn():\n        return (\"zh_CN\", \"UTF-8\")\n\n    def en_us():\n        return (\"en_US\", \"UTF-8\")\n\n    with patch(\"locale.getdefaultlocale\", side_effect=zh_cn):\n        assert is_locale_chinese_simplified()\n\n    with patch(\"locale.getdefaultlocale\", side_effect=en_us):\n        assert not is_locale_chinese_simplified()\n\n\ndef test_match_llm():\n    assert match_llm(\"fake\") is None\n    family = match_llm(\"qwen1.5-chat\", model_format=\"ggufv2\")\n    assert family.model_name == \"qwen1.5-chat\"\n    assert family.model_specs[0].quantization == \"q2_k\"\n\n    family = match_llm(\"llama-2-chat\", model_format=\"ggufv2\", quantization=\"Q4_0\")\n    assert family.model_name == \"llama-2-chat\"\n    assert family.model_specs[0].quantization == \"Q4_0\"\n\n    family = match_llm(\"code-llama\", model_format=\"ggufv2\", quantization=\"q4_0\")\n    assert family.model_name == \"code-llama\"\n    assert family.model_specs[0].quantization == \"Q4_0\"\n\n    family = match_llm(\"code-llama\")\n    assert family.model_name == \"code-llama\"\n    assert family.model_specs[0].model_format == \"pytorch\"\n\n    try:\n        os.environ[XINFERENCE_ENV_MODEL_SRC] = \"modelscope\"\n        family = match_llm(\"llama-2-chat\", model_format=\"ggufv2\")\n        assert family.model_name == \"llama-2-chat\"\n        assert family.model_specs[0].model_hub == \"modelscope\"\n        assert family.model_specs[0].quantization == \"Q4_K_M\"\n        assert family.model_specs[0].model_format == \"ggufv2\"\n        # pytorch model\n        family = match_llm(\"baichuan-2-chat\", model_format=\"pytorch\")\n        assert family.model_name == \"baichuan-2-chat\"\n        assert family.model_specs[0].model_hub == \"modelscope\"\n        assert family.model_specs[0].quantization == \"none\"\n        assert family.model_specs[0].model_format == \"pytorch\"\n    finally:\n        os.environ.pop(XINFERENCE_ENV_MODEL_SRC)\n\n\ndef test_is_valid_file_uri():\n    with tempfile.NamedTemporaryFile() as tmp_file:\n        assert is_valid_model_uri(f\"file://{tmp_file.name}\") is True\n    assert is_valid_model_uri(f\"file://{tmp_file.name}\") is False\n\n\ndef test_get_cache_status_pytorch():\n    spec = PytorchLLMSpecV2(\n        model_format=\"pytorch\",\n        model_size_in_billions=1,\n        quantization=\"none\",\n        model_id=\"facebook/opt-125m\",\n        model_revision=\"3d2b5f275bdf882b8775f902e1bfdb790e2cfc32\",\n    )\n    family = LLMFamilyV2(\n        version=2,\n        context_length=2048,\n        model_type=\"LLM\",\n        model_name=\"opt\",\n        model_lang=[\"en\"],\n        model_ability=[\"embed\", \"generate\"],\n        model_specs=[spec],\n        chat_template=None,\n        stop_token_ids=None,\n        stop=None,\n    )\n\n    cache_manager = CacheManager(family)\n\n    cache_status = cache_manager.get_cache_status()\n    assert not isinstance(cache_status, list)\n    assert not cache_status\n\n    cache_dir = cache_manager.cache_from_huggingface()\n    cache_status = cache_manager.get_cache_status()\n    assert not isinstance(cache_status, list)\n    assert cache_status\n\n    assert os.path.exists(cache_dir)\n    assert os.path.exists(os.path.join(cache_dir, \"README.md\"))\n    assert os.path.islink(os.path.join(cache_dir, \"README.md\"))\n    shutil.rmtree(cache_dir)\n\n\ndef test_get_cache_status_gguf():\n    spec = LlamaCppLLMSpecV2(\n        model_format=\"ggufv2\",\n        model_size_in_billions=\"0_5\",\n        model_id=\"Qwen/Qwen1.5-0.5B-Chat-GGUF\",\n        quantization=\"q4_0\",\n        model_file_name_template=\"README.md\",\n    )\n    family = LLMFamilyV2(\n        version=2,\n        context_length=2048,\n        model_type=\"LLM\",\n        model_name=\"qwen1.5-chat\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\"],\n        model_specs=[spec],\n        chat_template=None,\n        stop_token_ids=None,\n        stop=None,\n    )\n\n    cache_manager = CacheManager(family)\n\n    cache_status = cache_manager.get_cache_status()\n    assert not cache_status\n\n    cache_dir = cache_manager.cache_from_huggingface()\n    cache_status = cache_manager.get_cache_status()\n    assert cache_status\n\n    assert os.path.exists(cache_dir)\n    assert os.path.exists(os.path.join(cache_dir, \"README.md\"))\n    assert os.path.islink(os.path.join(cache_dir, \"README.md\"))\n    shutil.rmtree(cache_dir)\n\n\ndef test_parse_chat_template():\n    from ..llm_family import BUILTIN_LLM_PROMPT_STYLE\n\n    assert len(BUILTIN_LLM_PROMPT_STYLE) > 0\n    # take some examples to assert\n    assert \"qwen-chat\" in BUILTIN_LLM_PROMPT_STYLE\n    assert \"glm4-chat\" in BUILTIN_LLM_PROMPT_STYLE\n    assert \"baichuan-2-chat\" in BUILTIN_LLM_PROMPT_STYLE\n\n    hf_spec = LlamaCppLLMSpecV2(\n        model_format=\"ggufv2\",\n        model_size_in_billions=2,\n        quantization=\"q4_0\",\n        model_id=\"example/TestModel\",\n        model_hub=\"huggingface\",\n        model_revision=\"123\",\n        model_file_name_template=\"TestModel.{quantization}.bin\",\n    )\n    ms_spec = LlamaCppLLMSpecV2(\n        model_format=\"ggufv2\",\n        model_size_in_billions=2,\n        quantization=\"q4_0\",\n        model_id=\"example/TestModel\",\n        model_hub=\"modelscope\",\n        model_revision=\"123\",\n        model_file_name_template=\"TestModel.{quantization}.bin\",\n    )\n\n    llm_family = CustomLLMFamilyV2(\n        version=2,\n        model_type=\"LLM\",\n        model_name=\"test_LLM\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\", \"generate\"],\n        model_specs=[hf_spec, ms_spec],\n        model_family=\"glm4-chat\",\n        chat_template=\"glm4-chat\",\n    )\n    model_spec = CustomLLMFamilyV2.parse_raw(bytes(llm_family.json(), \"utf8\"))\n    assert model_spec.model_name == llm_family.model_name\n\n    # test vision\n    llm_family = CustomLLMFamilyV2(\n        version=2,\n        model_type=\"LLM\",\n        model_name=\"test_LLM\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\", \"generate\"],\n        model_specs=[hf_spec, ms_spec],\n        model_family=\"qwen2-vl-instruct\",\n        chat_template=\"qwen2-vl-instruct\",\n    )\n    model_spec = CustomLLMFamilyV2.parse_raw(bytes(llm_family.json(), \"utf-8\"))\n    assert \"vision\" in model_spec.model_ability\n\n    # error: missing model_family\n    llm_family = CustomLLMFamilyV2(\n        version=2,\n        model_type=\"LLM\",\n        model_name=\"test_LLM\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\", \"generate\"],\n        model_specs=[hf_spec, ms_spec],\n        chat_template=\"glm4-chat\",\n    )\n    with pytest.raises(ValueError):\n        CustomLLMFamilyV2.parse_raw(bytes(llm_family.json(), \"utf8\"))\n\n    # successful new model family\n    llm_family = CustomLLMFamilyV2(\n        version=2,\n        model_type=\"LLM\",\n        model_name=\"test_LLM\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\", \"generate\"],\n        model_family=\"xyzz\",\n        model_specs=[hf_spec, ms_spec],\n        chat_template=\"glm4-chat\",\n    )\n    model_spec = CustomLLMFamilyV2.parse_raw(bytes(llm_family.json(), \"utf8\"))\n    assert (\n        model_spec.chat_template\n        == BUILTIN_LLM_PROMPT_STYLE[\"glm4-chat\"][\"chat_template\"]\n    )\n    assert (\n        model_spec.stop_token_ids\n        == BUILTIN_LLM_PROMPT_STYLE[\"glm4-chat\"][\"stop_token_ids\"]\n    )\n    assert model_spec.stop == BUILTIN_LLM_PROMPT_STYLE[\"glm4-chat\"][\"stop\"]\n\n    # when chat_template is None, chat_template = model_family\n    llm_family = CustomLLMFamilyV2(\n        version=2,\n        model_type=\"LLM\",\n        model_name=\"test_LLM\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\", \"generate\"],\n        model_specs=[hf_spec, ms_spec],\n        model_family=\"glm4-chat\",\n        chat_template=None,\n    )\n    model_spec = CustomLLMFamilyV2.parse_raw(bytes(llm_family.json(), \"utf8\"))\n    assert (\n        model_spec.chat_template\n        == BUILTIN_LLM_PROMPT_STYLE[\"glm4-chat\"][\"chat_template\"]\n    )\n    assert (\n        model_spec.stop_token_ids\n        == BUILTIN_LLM_PROMPT_STYLE[\"glm4-chat\"][\"stop_token_ids\"]\n    )\n    assert model_spec.stop == BUILTIN_LLM_PROMPT_STYLE[\"glm4-chat\"][\"stop\"]\n\n\ndef test_match_model_size():\n    assert match_model_size(\"1\", \"1\")\n    assert match_model_size(\"1\", 1)\n    assert match_model_size(1, 1)\n    assert not match_model_size(\"1\", \"b\")\n    assert not match_model_size(\"1\", \"1b\")\n    assert match_model_size(\"1.8\", \"1_8\")\n    assert match_model_size(\"1_8\", \"1.8\")\n    assert not match_model_size(\"1\", \"1_8\")\n    assert not match_model_size(\"1__8\", \"1_8\")\n    assert not match_model_size(\"1_8\", 18)\n    assert not match_model_size(\"1_8\", \"18\")\n    assert not match_model_size(\"1.8\", 18)\n    assert not match_model_size(\"1.8\", 1)\n    assert match_model_size(\"001\", 1)\n\n\ndef test_convert_model_size_to_float():\n    assert convert_model_size_to_float(\"1_8\") == 1.8\n    assert convert_model_size_to_float(\"1.8\") == 1.8\n    assert convert_model_size_to_float(7) == float(7)\n    assert convert_model_size_to_float(1.8) == 1.8\n\n\n@pytest.mark.skipif(\n    True,\n    reason=\"Current system does not support vLLM\",\n)\ndef test_quert_engine_vLLM():\n    from ..llm_family import LLM_ENGINES, check_engine_by_spec_parameters\n\n    model_name = \"qwen1.5-chat\"\n    assert model_name in LLM_ENGINES\n\n    assert (\n        \"vLLM\" in LLM_ENGINES[model_name] and len(LLM_ENGINES[model_name][\"vLLM\"]) == 21\n    )\n\n    assert check_engine_by_spec_parameters(\n        model_engine=\"vLLM\",\n        model_name=model_name,\n        model_format=\"gptq\",\n        model_size_in_billions=\"1_8\",\n        quantization=\"Int4\",\n    )\n    assert (\n        check_engine_by_spec_parameters(\n            model_engine=\"vLLM\",\n            model_name=model_name,\n            model_format=\"gptq\",\n            model_size_in_billions=\"1_8\",\n            quantization=\"Int8\",\n        )\n        is None\n    )\n    assert check_engine_by_spec_parameters(\n        model_engine=\"vLLM\",\n        model_name=model_name,\n        model_format=\"pytorch\",\n        model_size_in_billions=\"1_8\",\n        quantization=\"none\",\n    )\n    assert (\n        check_engine_by_spec_parameters(\n            model_engine=\"vLLM\",\n            model_name=model_name,\n            model_format=\"pytorch\",\n            model_size_in_billions=\"1_8\",\n            quantization=\"4-bit\",\n        )\n        is None\n    )\n    assert (\n        check_engine_by_spec_parameters(\n            model_engine=\"vLLM\",\n            model_name=model_name,\n            model_format=\"ggufv2\",\n            model_size_in_billions=\"1_8\",\n            quantization=\"q2_k\",\n        )\n        is None\n    )\n\n\n@pytest.mark.skipif(\n    True,\n    reason=\"Current system does not support SGLang\",\n)\ndef test_quert_engine_SGLang():\n    from ..llm_family import LLM_ENGINES, check_engine_by_spec_parameters\n\n    model_name = \"qwen1.5-chat\"\n    assert model_name in LLM_ENGINES\n\n    assert (\n        \"SGLang\" in LLM_ENGINES[model_name]\n        and len(LLM_ENGINES[model_name][\"SGLang\"]) == 21\n    )\n\n    assert check_engine_by_spec_parameters(\n        model_engine=\"SGLang\",\n        model_name=model_name,\n        model_format=\"gptq\",\n        model_size_in_billions=\"1_8\",\n        quantization=\"Int4\",\n    )\n    assert (\n        check_engine_by_spec_parameters(\n            model_engine=\"SGLang\",\n            model_name=model_name,\n            model_format=\"gptq\",\n            model_size_in_billions=\"1_8\",\n            quantization=\"Int8\",\n        )\n        is None\n    )\n    assert check_engine_by_spec_parameters(\n        model_engine=\"SGLang\",\n        model_name=model_name,\n        model_format=\"pytorch\",\n        model_size_in_billions=\"1_8\",\n        quantization=\"none\",\n    )\n    assert (\n        check_engine_by_spec_parameters(\n            model_engine=\"SGLang\",\n            model_name=model_name,\n            model_format=\"pytorch\",\n            model_size_in_billions=\"1_8\",\n            quantization=\"4-bit\",\n        )\n        is None\n    )\n    assert (\n        check_engine_by_spec_parameters(\n            model_engine=\"SGLang\",\n            model_name=model_name,\n            model_format=\"ggufv2\",\n            model_size_in_billions=\"1_8\",\n            quantization=\"q2_k\",\n        )\n        is None\n    )\n\n\ndef test_query_engine_general():\n    from ..custom import get_user_defined_llm_families, register_llm, unregister_llm\n    from ..llama_cpp.core import XllamaCppModel\n    from ..llm_family import LLM_ENGINES, check_engine_by_spec_parameters\n\n    model_name = \"qwen1.5-chat\"\n    assert model_name in LLM_ENGINES\n\n    assert \"Transformers\" in LLM_ENGINES[model_name]\n    assert \"llama.cpp\" in LLM_ENGINES[model_name]\n\n    assert check_engine_by_spec_parameters(\n        model_engine=\"transformers\",\n        model_name=model_name,\n        model_format=\"gptq\",\n        model_size_in_billions=\"1_8\",\n        quantization=\"Int4\",\n    )\n    assert check_engine_by_spec_parameters(\n        model_engine=\"transformers\",\n        model_name=model_name,\n        model_format=\"gptq\",\n        model_size_in_billions=\"1_8\",\n        quantization=\"Int8\",\n    )\n    assert check_engine_by_spec_parameters(\n        model_engine=\"transformers\",\n        model_name=model_name,\n        model_format=\"pytorch\",\n        model_size_in_billions=\"1_8\",\n        quantization=\"none\",\n    )\n    assert (\n        check_engine_by_spec_parameters(\n            model_engine=\"llama.cpp\",\n            model_name=model_name,\n            model_format=\"ggufv2\",\n            model_size_in_billions=\"1_8\",\n            quantization=\"q2_k\",\n        )\n        is XllamaCppModel\n    )\n    with pytest.raises(ValueError) as exif:\n        check_engine_by_spec_parameters(\n            model_engine=\"llama.cpp\",\n            model_name=model_name,\n            model_format=\"ggufv2\",\n            model_size_in_billions=\"2_2\",\n            quantization=\"q2_k\",\n        )\n    assert (\n        str(exif.value)\n        == \"Model qwen1.5-chat cannot be run on engine llama.cpp, with format ggufv2, size 2_2 and quantization q2_k.\"\n    )\n\n    spec = LlamaCppLLMSpecV2(\n        model_format=\"ggufv2\",\n        model_size_in_billions=\"0_5\",\n        model_id=\"Qwen/Qwen1.5-0.5B-Chat-GGUF\",\n        quantization=\"\",\n        model_file_name_template=\"README.md\",\n    )\n    family = LLMFamilyV2(\n        version=2,\n        context_length=2048,\n        model_type=\"LLM\",\n        model_name=\"custom_model\",\n        model_lang=[\"en\"],\n        model_ability=[\"chat\"],\n        model_specs=[spec],\n        chat_template=None,\n        stop_token_ids=None,\n        stop=None,\n    )\n\n    register_llm(family, False)\n\n    assert family in get_user_defined_llm_families()\n    assert \"custom_model\" in LLM_ENGINES and \"llama.cpp\" in LLM_ENGINES[\"custom_model\"]\n    assert check_engine_by_spec_parameters(\n        model_engine=\"llama.cpp\",\n        model_name=\"custom_model\",\n        model_format=\"ggufv2\",\n        model_size_in_billions=\"0_5\",\n        quantization=\"\",\n    )\n\n    unregister_llm(family.model_name)\n    assert family not in get_user_defined_llm_families()\n    assert \"custom_model\" not in LLM_ENGINES\n\n    spec = LlamaCppLLMSpecV2(\n        model_format=\"ggufv2\",\n        model_size_in_billions=\"1_8\",\n        model_id=\"null\",\n        quantization=\"default\",\n        model_file_name_template=\"qwen1_5-1_8b-chat-q4_0.gguf\",\n    )\n    family = LLMFamilyV2(\n        version=2,\n        context_length=2048,\n        model_type=\"LLM\",\n        model_name=\"custom-qwen1.5-chat\",\n        model_lang=[\"en\", \"zh\"],\n        model_ability=[\"generate\", \"chat\"],\n        model_specs=[spec],\n        chat_template=\"test\",\n        stop=[\"<|endoftext|>\", \"<|im_start|>\", \"<|im_end|>\"],\n        stop_token_ids=[151643, 151644, 151645],\n    )\n\n    register_llm(family, False)\n\n    assert family in get_user_defined_llm_families()\n    assert \"custom-qwen1.5-chat\" in LLM_ENGINES and [\"llama.cpp\"] == list(\n        LLM_ENGINES[\"custom-qwen1.5-chat\"].keys()\n    )\n\n    unregister_llm(family.model_name)\n    assert family not in get_user_defined_llm_families()\n    assert \"custom-qwen1.5-chat\" not in LLM_ENGINES\n"
  },
  {
    "path": "xinference/model/llm/tests/test_llm_model.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport importlib.util\nimport sys\n\nimport pytest\nimport torch\n\n\n@pytest.mark.skip(reason=\"Cost too many resources.\")\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\n    [\"model_engine\", \"model_size_in_billions\", \"model_format\", \"quantization\"],\n    [\n        (\"vLLM\", \"1_5\", \"pytorch\", None),\n        (\"Transformers\", \"1_5\", \"pytorch\", None),\n        (\"SGLang\", \"1_5\", \"pytorch\", None),\n        (\"llama.cpp\", \"1_5\", \"ggufv2\", None),\n        pytest.param(\n            \"MLX\",\n            \"1_5\",\n            \"mlx\",\n            None,\n            marks=pytest.mark.skipif(\n                sys.platform != \"darwin\", reason=\"only run at macOS\"\n            ),\n        ),\n    ],\n)\nasync def test_restful_api_for_deepseek_with_reasoning(\n    setup, model_engine, model_size_in_billions, model_format, quantization\n):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"deepseek-r1\",\n        model_name=\"deepseek-r1-distill-qwen\",\n        model_engine=model_engine,\n        model_size_in_billions=model_size_in_billions,\n        model_format=model_format,\n        quantization=quantization,\n        max_model_len=62032,\n        reasoning_content=True,\n    )\n    model = client.get_model(model_uid)\n    messages = [{\"role\": \"user\", \"content\": \"Hello! What can you do?\"}]\n    response = model.chat(messages)\n    assert \"reasoning_content\" in response[\"choices\"][0][\"message\"]\n\n    # openai client\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": \"Hello! What can you do?\",\n            }\n        ],\n    )\n    assert \"reasoning_content\" in completion.choices[0].message.to_dict()\n\n    client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    result = []\n    async for chunk in await client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": \"Hello! What can you do?\",\n            }\n        ],\n        stream=True,\n    ):\n        result.append(chunk)\n    assert result\n    assert \"reasoning_content\" in result[0].choices[0].delta.to_dict()\n    assert result[-1].choices[0].finish_reason == \"stop\"\n\n\n@pytest.mark.skip(reason=\"Cost too many resources.\")\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\n    [\"model_size_in_billions\", \"model_format\", \"quantization\"], [(7, \"pytorch\", None)]\n)\nasync def test_restful_api_for_deepseek_without_reasoning(\n    setup, model_size_in_billions, model_format, quantization\n):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"deepseek-r1\",\n        model_name=\"deepseek-r1-distill-qwen\",\n        model_engine=\"vLLM\",\n        model_size_in_billions=model_size_in_billions,\n        model_format=model_format,\n        quantization=quantization,\n        max_model_len=62032,\n    )\n    model = client.get_model(model_uid)\n    messages = [{\"role\": \"user\", \"content\": \"Hello! What can you do?\"}]\n    response = model.chat(messages)\n\n    assert \"reasoning_content\" not in response[\"choices\"][0][\"message\"]\n\n    # openai client\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": \"Hello! What can you do?\",\n            }\n        ],\n    )\n    assert \"reasoning_content\" not in completion.choices[0].message.to_dict()\n\n    client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    result = []\n    async for chunk in await client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": \"Hello! What can you do?\",\n            }\n        ],\n        stream=True,\n    ):\n        result.append(chunk)\n    assert result\n    assert \"reasoning_content\" not in result[0].choices[0].delta.to_dict()\n    assert result[-1].choices[0].finish_reason == \"stop\"\n\n\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\n    \"stream, enable_thinking, reasoning_content\",\n    [\n        (False, False, False),\n        (False, True, False),\n        (False, True, True),\n        (True, False, False),\n        (True, True, True),\n        (True, True, False),\n    ],\n)\nasync def test_qwen3_with_thinking_params(\n    setup, stream, enable_thinking, reasoning_content\n):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"qwen3\",\n        model_name=\"qwen3\",\n        model_engine=\"Transformers\",\n        model_format=\"pytorch\",\n        model_size_in_billions=\"0_6\",\n        quantization=\"none\",\n        n_gpu=\"auto\",\n        replica=1,\n        stream=stream,\n        enable_thinking=enable_thinking,\n        reasoning_content=reasoning_content,\n    )\n    model = client.get_model(model_uid)\n    assert model is not None\n\n    # openai client\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[{\"role\": \"user\", \"content\": \"Hello\"}],\n        stream=stream,\n    )\n\n    if stream:\n        full_content = \"\"\n        full_reasoning = \"\"\n        for chunk in completion:\n            delta = chunk.choices[0].delta\n            if hasattr(delta, \"content\") and delta.content:\n                full_content += delta.content\n            if hasattr(delta, \"reasoning_content\") and delta.reasoning_content:\n                full_reasoning += delta.reasoning_content\n        if enable_thinking:\n            if reasoning_content:\n                assert full_reasoning\n            else:\n                assert not full_reasoning\n                assert \"<think>\" in full_content\n        else:\n            assert not full_reasoning\n            assert \"<think>\" not in full_content\n    else:\n        assert completion is not None\n        assert completion.choices[0].message.content is not None\n        if enable_thinking:\n            if reasoning_content:\n                assert completion.choices[0].message.reasoning_content is not None\n            else:\n                assert \"<think>\" in completion.choices[0].message.content\n                assert \"reasoning_content\" not in completion.choices[0].message\n        else:\n            assert \"<think>\" not in completion.choices[0].message.content\n\n\n@pytest.mark.asyncio\nasync def test_qwen3_with_tools(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    # Launch model\n    model_uid = client.launch_model(\n        model_uid=\"qwen3\",\n        model_name=\"qwen3\",\n        model_engine=\"Transformers\",\n        model_format=\"pytorch\",\n        model_size_in_billions=\"0_6\",\n        quantization=\"none\",\n        n_gpu=\"auto\",\n        replica=1,\n        enable_thinking=True,\n    )\n    model = client.get_model(model_uid)\n    assert model is not None\n\n    # openai client\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[{\"role\": \"user\", \"content\": \"你好\"}],\n        tools=[\n            {\n                \"type\": \"function\",\n                \"function\": {\n                    \"name\": \"get_weather\",\n                    \"description\": \"查询天气\",\n                    \"parameters\": {},\n                },\n            }\n        ],\n        max_tokens=100,\n    )\n\n    assert completion is not None\n    assert completion.choices[0].message.content is not None\n    assert completion.choices[0].message.tool_calls is not None\n\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[{\"role\": \"user\", \"content\": \"查询上海天气\"}],\n        tools=[\n            {\n                \"type\": \"function\",\n                \"function\": {\n                    \"name\": \"get_weather\",\n                    \"description\": \"查询天气\",\n                    \"parameters\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"location\": {\n                                \"type\": \"string\",\n                                \"description\": \"城市或者地区，比如北京，上海\",\n                            }\n                        },\n                        \"required\": [\"location\"],\n                    },\n                },\n            }\n        ],\n        max_tokens=100,\n    )\n    assert completion is not None\n    assert completion.choices[0].message.content is not None\n    assert len(completion.choices[0].message.content) > 0\n\n    # Check if tool_calls is present and is a list\n    # Note: tool_calls might be None if the model didn't generate valid tool calls\n    if completion.choices[0].message.tool_calls is not None:\n        assert isinstance(completion.choices[0].message.tool_calls, list)\n\n        # If tool_calls list is not empty, check the structure\n        if len(completion.choices[0].message.tool_calls) > 0:\n            tool_call = completion.choices[0].message.tool_calls[0]\n            assert hasattr(tool_call, \"id\")\n            assert hasattr(tool_call, \"type\")\n            assert tool_call.type == \"function\"\n            assert hasattr(tool_call, \"function\")\n            assert hasattr(tool_call.function, \"name\")\n            assert hasattr(tool_call.function, \"arguments\")\n            # Check if arguments is a valid JSON string\n            import json\n\n            args = json.loads(tool_call.function.arguments)\n            assert isinstance(args, dict)\n            # Check specific parameters if expected\n            if \"location\" in args:\n                assert isinstance(args[\"location\"], str)\n\n\nENGINES = [\"Transformers\"]\nif importlib.util.find_spec(\"vllm\") is not None:\n    ENGINES.append(\"vLLM\")\n\n\n@pytest.fixture\ndef setup_cluster():\n    import xoscar as xo\n\n    from ....api.restful_api import run_in_subprocess as restful_api_run_in_subprocess\n    from ....conftest import TEST_FILE_LOGGING_CONF, TEST_LOGGING_CONF, api_health_check\n    from ....deploy.local import health_check\n    from ....deploy.local import run_in_subprocess as supervisor_run_in_subprocess\n\n    supervisor_address = f\"localhost:{xo.utils.get_next_port()}\"\n    local_cluster = supervisor_run_in_subprocess(\n        supervisor_address, None, None, TEST_LOGGING_CONF\n    )\n\n    if not health_check(address=supervisor_address, max_attempts=20, sleep_interval=1):\n        raise RuntimeError(\"Supervisor is not available after multiple attempts\")\n\n    port = xo.utils.get_next_port()\n    endpoint = f\"http://localhost:{port}\"\n    try:\n        restful_api_proc = restful_api_run_in_subprocess(\n            supervisor_address,\n            host=\"localhost\",\n            port=port,\n            logging_conf=TEST_FILE_LOGGING_CONF,\n        )\n        if not api_health_check(endpoint, max_attempts=10, sleep_interval=5):\n            raise RuntimeError(\"Endpoint is not available after multiple attempts\")\n\n        yield f\"http://localhost:{port}\", supervisor_address\n        restful_api_proc.kill()\n    finally:\n        local_cluster.kill()\n\n\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\n    \"stream, enable_model_thinking, enable_chat_thinking\",\n    [\n        (False, True, False),\n        (False, True, True),\n        (True, True, True),\n        (True, True, False),\n    ],\n)\n@pytest.mark.parametrize(\"engine\", ENGINES)\nasync def test_qwen3_enable_thinking(\n    setup_cluster, stream, enable_model_thinking, enable_chat_thinking, engine\n):\n    endpoint, _ = setup_cluster\n    from ....client import Client\n\n    if (\n        engine == \"vLLM\"\n        and enable_model_thinking\n        and torch.cuda.is_available()\n        and torch.cuda.get_device_capability()[0] < 8\n    ):\n        pytest.skip(\"vLLM reasoning requires compute capability >=8.0 (Ampere).\")\n    client = Client(endpoint)\n\n    kwargs = {}\n    if engine == \"vLLM\":\n        total_mem_bytes = torch.cuda.get_device_properties(0).total_memory\n        total_mem_gb = total_mem_bytes / (1024**3)\n        # 3G gpu memory\n        kwargs[\"gpu_memory_utilization\"] = min(3 / total_mem_gb, 1.0)\n        kwargs[\"max_model_len\"] = 1000\n        # enforce_eager to save launch time\n        kwargs[\"enforce_eager\"] = True\n\n    model_uid = client.launch_model(\n        model_uid=\"qwen3\",\n        model_name=\"qwen3\",\n        model_engine=engine,\n        model_format=\"pytorch\",\n        model_size_in_billions=\"0_6\",\n        quantization=\"none\",\n        n_gpu=\"auto\",\n        replica=1,\n        enable_thinking=enable_model_thinking,\n        reasoning_content=False,\n        **kwargs,\n    )\n    model = client.get_model(model_uid)\n    assert model is not None\n\n    completion = model.chat(\n        messages=[{\"role\": \"user\", \"content\": \"Hello\"}],\n        generate_config={\n            \"max_tokens\": 25,\n            \"chat_template_kwargs\": {\"enable_thinking\": enable_chat_thinking},\n            \"stream\": stream,\n        },\n    )\n\n    try:\n        if stream:\n            full_content = \"\"\n            for chunk in completion:\n                delta = chunk[\"choices\"][0][\"delta\"]\n                if delta.get(\"content\"):\n                    full_content += delta[\"content\"]\n            if enable_chat_thinking:\n                assert \"<think>\" in full_content\n            else:\n                assert \"<think>\" not in full_content\n        else:\n            assert completion is not None\n            assert completion[\"choices\"][0][\"message\"][\"content\"] is not None\n            if enable_chat_thinking:\n                assert \"<think>\" in completion[\"choices\"][0][\"message\"][\"content\"]\n            else:\n                assert \"<think>\" not in completion[\"choices\"][0][\"message\"][\"content\"]\n    finally:\n        client.terminate_model(model_uid)\n"
  },
  {
    "path": "xinference/model/llm/tests/test_memory_estimate.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom ..memory import estimate_llm_gpu_memory\n\n\ndef test_llm_estimate_memory():\n    # TODO GGML is not tested yet\n\n    # without model_name, use default ModelLayersInfo\n    mem_info = estimate_llm_gpu_memory(1.8, None, 2048, \"pytorch\", kv_cache_dtype=32)\n    assert mem_info.total == 5162\n    mem_info = estimate_llm_gpu_memory(\n        72, \"8-bit\", 1024 + 2048, \"pytorch\", kv_cache_dtype=32\n    )\n    assert mem_info.total == 92943\n    mem_info = estimate_llm_gpu_memory(\n        72, \"4-bit\", 1024 + 2048, \"pytorch\", kv_cache_dtype=32\n    )\n    assert mem_info.total == 58611\n    mem_info = estimate_llm_gpu_memory(7, \"Int4\", 32768, \"gptq\", kv_cache_dtype=32)\n    assert mem_info.total == 100550\n\n    # with model_name to match_llm\n    mem_info = estimate_llm_gpu_memory(\n        72, \"Int4\", 32768, \"gptq\", kv_cache_dtype=16, model_name=\"qwen1.5-chat\"\n    )\n    assert mem_info.total == 258775\n\n    # model_size_in_billions use int\n    mem_info = estimate_llm_gpu_memory(\n        32, \"Int4\", 32768, \"gptq\", kv_cache_dtype=8, model_name=\"qwen1.5-chat\"\n    )\n    # model_size_in_billions use str\n    mem_info = estimate_llm_gpu_memory(\n        \"32\", \"Int4\", 32768, \"gptq\", kv_cache_dtype=8, model_name=\"qwen1.5-chat\"\n    )\n    assert mem_info.total == 58035\n\n    # model_size_in_billions use float\n    mem_info = estimate_llm_gpu_memory(\n        \"1.8\", None, 2048, \"pytorch\", kv_cache_dtype=32, model_name=\"qwen1.5-chat\"\n    )\n    assert mem_info.total == 5020\n"
  },
  {
    "path": "xinference/model/llm/tests/test_multimodal.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport base64\n\nimport pytest\nimport requests\n\n\n@pytest.mark.skip(reason=\"Cost too many resources.\")\n@pytest.mark.parametrize(\n    \"model_format, quantization\", [(\"pytorch\", None), (\"gptq\", \"Int4\")]\n)\ndef test_restful_api_for_qwen_vl(setup, model_format, quantization):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"qwen-vl-chat\",\n        model_name=\"qwen-vl-chat\",\n        model_format=model_format,\n        quantization=quantization,\n    )\n    model = client.get_model(model_uid)\n    messages = [\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\"type\": \"text\", \"text\": \"What’s in this image?\"},\n                {\n                    \"type\": \"image_url\",\n                    \"image_url\": {\n                        \"url\": \"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg\"\n                    },\n                },\n            ],\n        }\n    ]\n    response = model.chat(messages)\n    assert \"grass\" in response[\"choices\"][0][\"message\"][\"content\"]\n    assert \"tree\" in response[\"choices\"][0][\"message\"][\"content\"]\n    assert \"sky\" in response[\"choices\"][0][\"message\"][\"content\"]\n\n    # openai client\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"What’s in this image?\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": \"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg\"\n                        },\n                    },\n                ],\n            }\n        ],\n    )\n    assert \"grass\" in completion.choices[0].message.content\n    assert \"tree\" in completion.choices[0].message.content\n    assert \"sky\" in completion.choices[0].message.content\n    messages = [\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\"type\": \"text\", \"text\": \"这是什么?\"},\n                {\n                    \"type\": \"image_url\",\n                    \"image_url\": {\n                        \"url\": \"https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg\",\n                    },\n                },\n            ],\n        }\n    ]\n    completion = client.chat.completions.create(model=model_uid, messages=messages)\n    assert \"女\" in completion.choices[0].message.content\n    assert \"狗\" in completion.choices[0].message.content\n    assert \"沙滩\" in completion.choices[0].message.content\n    messages.append(completion.choices[0].message.model_dump())\n    messages.append({\"role\": \"user\", \"content\": \"框出图中击掌的位置\"})\n    completion = client.chat.completions.create(model=model_uid, messages=messages)\n    assert \"击掌\" in completion.choices[0].message.content\n    assert \"<ref>\" in completion.choices[0].message.content\n    assert \"<box>\" in completion.choices[0].message.content\n\n    # Test base64 image\n    response = requests.get(\n        \"http://i.epochtimes.com/assets/uploads/2020/07/shutterstock_675595789-600x400.jpg\"\n    )\n\n    # https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images\n    # Function to encode the image\n    b64_img = base64.b64encode(response.content).decode(\"utf-8\")\n\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"图中有几条鱼？\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": f\"data:image/jpeg;base64,{b64_img}\",\n                        },\n                    },\n                ],\n            }\n        ],\n    )\n    assert \"四条\" in completion.choices[0].message.content\n\n\n@pytest.mark.skip(reason=\"Cost too many resources.\")\n@pytest.mark.parametrize(\"model_format, quantization\", [(\"pytorch\", None)])\ndef test_restful_api_for_yi_vl(setup, model_format, quantization):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"yi-vl-chat\",\n        model_name=\"yi-vl-chat\",\n        model_format=model_format,\n        quantization=quantization,\n    )\n    model = client.get_model(model_uid)\n    messages = [\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\"type\": \"text\", \"text\": \"What’s in this image?\"},\n                {\n                    \"type\": \"image_url\",\n                    \"image_url\": {\n                        \"url\": \"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg\"\n                    },\n                },\n            ],\n        }\n    ]\n    response = model.chat(messages)\n    assert \"green\" in response[\"choices\"][0][\"message\"][\"content\"]\n    assert \"tree\" in response[\"choices\"][0][\"message\"][\"content\"]\n    assert \"sky\" in response[\"choices\"][0][\"message\"][\"content\"]\n\n    # openai client\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"What’s in this image?\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": \"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg\"\n                        },\n                    },\n                ],\n            }\n        ],\n    )\n    assert \"green\" in completion.choices[0].message.content\n    assert \"tree\" in completion.choices[0].message.content\n    assert \"sky\" in completion.choices[0].message.content\n\n    # Test base64 image\n    response = requests.get(\n        \"http://i.epochtimes.com/assets/uploads/2020/07/shutterstock_675595789-600x400.jpg\"\n    )\n\n    # https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images\n    # Function to encode the image\n    b64_img = base64.b64encode(response.content).decode(\"utf-8\")\n\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"图中有几条鱼？\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": f\"data:image/jpeg;base64,{b64_img}\",\n                        },\n                    },\n                ],\n            }\n        ],\n    )\n    assert \"两条\" in completion.choices[0].message.content\n\n\n@pytest.mark.skip(reason=\"Cost too many resources.\")\n@pytest.mark.parametrize(\"model_format, quantization\", [(\"pytorch\", None)])\ndef test_restful_api_for_deepseek_vl(setup, model_format, quantization):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"deepseek-vl-chat\",\n        model_name=\"deepseek-vl-chat\",\n        model_format=model_format,\n        quantization=quantization,\n        temperature=0.0,\n    )\n    model = client.get_model(model_uid)\n    messages = [\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\"type\": \"text\", \"text\": \"What’s in this image?\"},\n                {\n                    \"type\": \"image_url\",\n                    \"image_url\": {\n                        \"url\": \"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg\"\n                    },\n                },\n            ],\n        }\n    ]\n    response = model.chat(messages)\n    assert any(\n        green in response[\"choices\"][0][\"message\"][\"content\"]\n        for green in [\"grass\", \"green\"]\n    )\n    assert any(\n        tree in response[\"choices\"][0][\"message\"][\"content\"]\n        for tree in [\"tree\", \"wooden\"]\n    )\n    assert \"sky\" in response[\"choices\"][0][\"message\"][\"content\"]\n\n    # openai client\n    import openai\n\n    client = openai.Client(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"What’s in this image?\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": \"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg\"\n                        },\n                    },\n                ],\n            }\n        ],\n    )\n    assert any(\n        green in response[\"choices\"][0][\"message\"][\"content\"]\n        for green in [\"grass\", \"green\"]\n    )\n    assert any(\n        tree in response[\"choices\"][0][\"message\"][\"content\"]\n        for tree in [\"tree\", \"wooden\"]\n    )\n    assert \"sky\" in completion.choices[0].message.content\n\n    # Test base64 image\n    response = requests.get(\n        \"http://i.epochtimes.com/assets/uploads/2020/07/shutterstock_675595789-600x400.jpg\"\n    )\n\n    # https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images\n    # Function to encode the image\n    b64_img = base64.b64encode(response.content).decode(\"utf-8\")\n\n    completion = client.chat.completions.create(\n        model=model_uid,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"图中有几条鱼？\"},\n                    {\n                        \"type\": \"image_url\",\n                        \"image_url\": {\n                            \"url\": f\"data:image/jpeg;base64,{b64_img}\",\n                        },\n                    },\n                ],\n            }\n        ],\n    )\n    assert any(\n        count in completion.choices[0].message.content for count in [\"两条\", \"四条\"]\n    )\n\n\n@pytest.mark.skip(reason=\"Cost too many resources.\")\ndef test_restful_api_for_qwen_audio(setup):\n    model_name = \"qwen2-audio-instruct\"\n\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_audio\",\n        \"model_name\": model_name,\n        \"model_engine\": \"transformers\",\n        \"model_size_in_billions\": 7,\n        \"model_format\": \"pytorch\",\n        \"quantization\": \"none\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_audio\"\n\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 1\n\n    url = f\"{endpoint}/v1/chat/completions\"\n    payload = {\n        \"model\": model_uid_res,\n        \"messages\": [\n            {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\n                        \"type\": \"audio\",\n                        \"audio_url\": \"https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/glass-breaking-151256.mp3\",\n                    },\n                    {\"type\": \"text\", \"text\": \"What's that sound?\"},\n                ],\n            },\n            {\"role\": \"assistant\", \"content\": \"It is the sound of glass shattering.\"},\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\"type\": \"text\", \"text\": \"What can you do when you hear that?\"},\n                ],\n            },\n            {\n                \"role\": \"assistant\",\n                \"content\": \"Stay alert and cautious, and check if anyone is hurt or if there is any damage to property.\",\n            },\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\n                        \"type\": \"audio\",\n                        \"audio_url\": \"https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/1272-128104-0000.flac\",\n                    },\n                    {\"type\": \"text\", \"text\": \"What does the person say?\"},\n                ],\n            },\n        ],\n    }\n    response = requests.post(url, json=payload)\n    completion = response.json()\n    assert len(completion[\"choices\"][0][\"message\"]) > 0\n"
  },
  {
    "path": "xinference/model/llm/tests/test_stream_options.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport os\nimport os.path\n\nimport openai\nimport pytest\nimport requests\nfrom packaging import version\n\nfrom ....constants import XINFERENCE_ENV_MODEL_SRC\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_llamacpp_chatglm(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_name\": \"qwen1.5-chat\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_format\": \"ggufv2\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"法国的首都是哪里?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_llamacpp(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    # os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"llama.cpp\",\n        \"model_name\": \"qwen1.5-chat\",\n        \"model_size_in_billions\": \"0_5\",\n        \"model_format\": \"ggufv2\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"What is the capital of France?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_pytorch_chatglm(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"Transformers\",\n        \"model_name\": \"chatglm3\",\n        \"model_size_in_billions\": \"6\",\n        \"quantization\": \"none\",\n        \"model_format\": \"pytorch\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"法国的首都是哪里?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_pytorch(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"Transformers\",\n        \"model_name\": \"baichuan-2-chat\",\n        \"model_size_in_billions\": \"7\",\n        \"quantization\": \"none\",\n        \"model_format\": \"pytorch\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"法国的首都是哪里?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_pytorch_deepseek_vl(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"Transformers\",\n        \"model_name\": \"deepseek-vl-chat\",\n        \"model_size_in_billions\": \"1_3\",\n        \"quantization\": \"none\",\n        \"model_format\": \"pytorch\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"法国的首都是哪里?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_pytorch_internlm2(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"Transformers\",\n        \"model_name\": \"internlm2-chat\",\n        \"model_size_in_billions\": \"7\",\n        \"quantization\": \"none\",\n        \"model_format\": \"pytorch\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"法国的首都是哪里?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_pytorch_qwen_vl(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"Transformers\",\n        \"model_name\": \"qwen-vl-chat\",\n        \"model_size_in_billions\": \"7\",\n        \"quantization\": \"none\",\n        \"model_format\": \"pytorch\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"法国的首都是哪里?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_pytorch_yi_vl(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"Transformers\",\n        \"model_name\": \"yi-vl-chat\",\n        \"model_size_in_billions\": \"6\",\n        \"quantization\": \"none\",\n        \"model_format\": \"pytorch\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"法国的首都是哪里?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_sgalng(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"SGLang\",\n        \"model_name\": \"qwen-chat\",\n        \"model_size_in_billions\": \"7\",\n        \"quantization\": \"Int4\",\n        \"model_format\": \"gptq\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"法国的首都是哪里?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_options_vllm(setup):\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"vLLM\",\n        \"model_name\": \"qwen-chat\",\n        \"model_size_in_billions\": \"7\",\n        \"quantization\": \"none\",\n        \"model_format\": \"pytorch\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    # chat\n    messages = [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"},\n        {\"role\": \"assistant\", \"content\": \"Hi what can I help you?\"},\n        {\"role\": \"user\", \"content\": \"法国的首都是哪里?\"},\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    result1 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": False,\n        },\n    ):\n        result1.append(chunk)\n    assert result1\n    assert type(result1[0]).__name__ == stream_chunk_type_name\n    # stop\n    assert result1[-1].choices[0].finish_reason == \"stop\"\n\n    result2 = await openai_chat_completion(\n        messages=messages, stream=False, model=model_uid_res\n    )\n\n    assert result2\n    assert type(result2).__name__ == response_type_name\n    # stop\n    assert result2.choices[0].finish_reason == \"stop\"\n\n    result3 = []\n    async for chunk in await openai_chat_completion(\n        messages=messages,\n        stream=True,\n        model=model_uid_res,\n        max_tokens=None,\n        stream_options={\n            \"include_usage\": True,\n        },\n    ):\n        result3.append(chunk)\n    assert result3\n    assert type(result3[0]).__name__ == stream_chunk_type_name\n    # usage\n    assert not result3[-1].choices\n    assert result3[-1].usage\n\n\n@pytest.mark.asyncio\n@pytest.mark.skip(reason=\"Too large model to be tested\")\nasync def test_openai_stream_tools_vllm(setup):\n    import json\n\n    endpoint, _ = setup\n    url = f\"{endpoint}/v1/models\"\n    os.environ.get(XINFERENCE_ENV_MODEL_SRC, \"modelscope\")\n\n    # list\n    response = requests.get(url)\n    response_data = response.json()\n    assert len(response_data[\"data\"]) == 0\n\n    # launch\n    payload = {\n        \"model_uid\": \"test_restful_api\",\n        \"model_engine\": \"vLLM\",\n        \"model_name\": \"qwen-chat\",\n        \"model_size_in_billions\": \"7\",\n        \"quantization\": \"none\",\n        \"model_format\": \"pytorch\",\n    }\n\n    response = requests.post(url, json=payload)\n    response_data = response.json()\n    model_uid_res = response_data[\"model_uid\"]\n    assert model_uid_res == \"test_restful_api\"\n\n    def get_current_weather(location: str, unit=\"fahrenheit\"):\n        \"\"\"Get the current weather in a given location\"\"\"\n        if \"tokyo\" in location.lower():\n            return json.dumps({\"location\": \"Tokyo\", \"temperature\": \"10\", \"unit\": unit})\n        else:\n            return json.dumps({\"location\": location, \"temperature\": \"unknown\"})\n\n    def handle_tools_response(messages, tool_calls):\n        for tool_call in tool_calls:\n            function_name = tool_call.function.name\n            function_to_call = get_current_weather\n            function_args = json.loads(tool_call.function.arguments)\n            function_response = function_to_call(\n                location=function_args.get(\"location\"),\n                unit=function_args.get(\"unit\"),\n            )\n            messages.append(\n                {\n                    \"tool_call_id\": tool_call.id,\n                    \"role\": \"tool\",\n                    \"name\": function_name,\n                    \"content\": function_response,\n                }\n            )\n\n    # create conversation with tool call\n    messages = [\n        {\n            \"role\": \"user\",\n            \"content\": \"What's the weather like in tokyo? Use tools to answer.\",\n        }\n    ]\n    tools = [\n        {\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": \"get_current_weather\",\n                \"description\": \"Get the current weather in a given location\",\n                \"parameters\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"location\": {\n                            \"type\": \"string\",\n                            \"description\": \"The city and state, e.g. San Francisco, CA\",\n                        },\n                        \"unit\": {\"type\": \"string\", \"enum\": [\"celsius\", \"fahrenheit\"]},\n                    },\n                    \"required\": [\"location\"],\n                },\n            },\n        }\n    ]\n\n    if version.parse(openai.__version__) < version.parse(\"1.0\"):\n        openai.api_key = \"\"\n        openai.api_base = f\"{endpoint}/v1\"\n        openai_chat_completion = openai.ChatCompletion.acreate\n        stream_chunk_type_name = \"OpenAIObject\"\n        response_type_name = \"OpenAIObject\"\n    else:\n        client = openai.AsyncClient(api_key=\"not empty\", base_url=f\"{endpoint}/v1\")\n        openai_chat_completion = client.chat.completions.create\n        stream_chunk_type_name = \"ChatCompletionChunk\"\n        response_type_name = \"ChatCompletion\"\n\n    # Step 1: Get the initial response with stream=True\n    result_stream_initial = []\n    for chunk in openai_chat_completion(\n        messages=messages,\n        model=model_uid_res,\n        stream=True,\n        tools=tools,\n    ):\n        result_stream_initial.append(chunk)\n\n    assert result_stream_initial\n    assert type(result_stream_initial[0]).__name__ == stream_chunk_type_name\n\n    # Simulate the tool calls for the initial stream response\n    tool_calls = result_stream_initial[-1].choices[0].delta.tool_calls\n    assert tool_calls\n    handle_tools_response(messages, tool_calls)\n\n    # Step 2: Get the final response after tool calls with stream=True\n    result_stream_final = []\n    for chunk in openai_chat_completion(\n        messages=messages,\n        model=model_uid_res,\n        stream=True,\n    ):\n        result_stream_final.append(chunk)\n\n    assert result_stream_final\n    assert type(result_stream_final[0]).__name__ == stream_chunk_type_name\n\n    # Combine streamed chunks into a single response\n    final_response_stream = \"\".join(\n        chunk.choices[0].delta.content for chunk in result_stream_final\n    )\n    assert \"tokyo\" in final_response_stream.lower()\n\n    # Step 3: Get the initial response with stream=False\n    messages = messages[:1]  # reset to initial messages\n    initial_response = openai_chat_completion(\n        messages=messages,  # reset to initial messages\n        model=model_uid_res,\n        tools=tools,\n        stream=False,\n    )\n\n    assert initial_response\n    assert type(initial_response).__name__ == response_type_name\n\n    # Simulate the tool calls for the initial non-stream response\n    tool_calls = initial_response.choices[0].message.tool_calls\n    assert tool_calls is not None\n    handle_tools_response(messages, tool_calls)\n\n    # Step 4: Get the final response after tool calls with stream=False\n    final_response = openai_chat_completion(\n        messages=messages, model=model_uid_res, stream=False\n    )\n\n    assert final_response\n    assert type(final_response).__name__ == response_type_name\n\n    # Check the final response contains the weather info\n    assert \"tokyo\" in final_response.choices[0].message.content.lower()\n"
  },
  {
    "path": "xinference/model/llm/tests/test_utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom ..reasoning_parser import ReasoningParser\nfrom ..tool_parsers.qwen_tool_parser import QwenToolParser\nfrom ..utils import ChatModelMixin\n\n\ndef test_is_valid_model_name():\n    from ...utils import is_valid_model_name\n\n    assert is_valid_model_name(\"foo\")\n    assert is_valid_model_name(\"foo-bar\")\n    assert is_valid_model_name(\"foo_bar\")\n    assert is_valid_model_name(\"123\")\n    assert is_valid_model_name(\"foo@bar\")\n    assert is_valid_model_name(\"_foo\")\n    assert is_valid_model_name(\"-foo\")\n    assert not is_valid_model_name(\"foo bar\")\n    assert not is_valid_model_name(\"foo/bar\")\n    assert not is_valid_model_name(\"   \")\n    assert not is_valid_model_name(\"\")\n\n\ndef filter_ids_and_created(data):\n    if isinstance(data, list):\n        return [filter_ids_and_created(item) for item in data]\n    elif isinstance(data, dict):\n        return {\n            k: filter_ids_and_created(v)\n            for k, v in data.items()\n            if k not in [\"id\", \"created\"]\n        }\n    return data\n\n\ndef test_post_process_completion_chunk_without_thinking():\n    mixin = ChatModelMixin()\n    mixin.tool_parser = QwenToolParser()\n\n    test_cases = [\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"<tool_call>\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": \"\\n\"}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '{\"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"name\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '\":'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": ' \"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": \"get\"}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"_current\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"_weather\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '\",'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": ' \"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"arguments\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '\":'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": ' {\"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"location\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '\":'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": ' \"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"\\u4e0a\\u6d77\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": '\"}}\\n'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"</tool_call>\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": \"\"}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": \"\"}, \"finish_reason\": \"stop\"}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n        ),\n    ]\n    expected_results = [\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        {\n            \"id\": \"chatcmpl-9a5150cb-5475-4a1b-9535-61599de39ad8\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756546331,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"role\": \"assistant\",\n                        \"content\": \"\",\n                        \"tool_calls\": [\n                            {\n                                \"index\": 0,\n                                \"id\": \"call_9a5150cb-5475-4a1b-9535-61599de39ad8\",\n                                \"type\": \"function\",\n                                \"function\": {\n                                    \"name\": \"get_current_weather\",\n                                    \"arguments\": '{\"location\": \"上海\"}',\n                                },\n                            }\n                        ],\n                    },\n                    \"logprobs\": None,\n                    \"finish_reason\": \"tool_calls\",\n                }\n            ],\n            \"usage\": None,\n        },\n        None,\n        {\n            \"id\": \"chatcmpl-99f6e3ba-bbc4-4a6d-93ad-a86e2f7705d6\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756646416,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\"role\": \"assistant\", \"content\": \"\", \"tool_calls\": []},\n                    \"logprobs\": None,\n                    \"finish_reason\": \"stop\",\n                }\n            ],\n            \"usage\": {\n                \"prompt_tokens\": 159,\n                \"completion_tokens\": 91,\n                \"total_tokens\": 250,\n            },\n        },\n    ]\n    previous_texts = [\"\"]\n\n    for i, (model_uid, chunk_data) in enumerate(test_cases):\n        result = mixin._post_process_completion_chunk(\n            None, model_uid=model_uid, c=chunk_data, previous_texts=previous_texts\n        )\n\n        expected = expected_results[i]\n\n        if expected is None:\n            assert result is None, f\"Expected None but got {result}\"\n        else:\n            result_filtered = filter_ids_and_created(result)\n            expected_filtered = filter_ids_and_created(expected)\n            assert (\n                result_filtered == expected_filtered\n            ), f\"Mismatch at case {i}: expected {expected_filtered}, got {result_filtered}\"\n\n\ndef test_post_process_completion_chunk_with_thinking():\n    mixin = ChatModelMixin()\n    mixin.tool_parser = QwenToolParser()\n    test_cases = [\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451239,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"<think>\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451239,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": \"\\n\"}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451239,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"\\u597d\\u7684\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"</think>\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"\\n\\n\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"<tool_call>\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": \"\\n\"}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '{\"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"name\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '\":'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": ' \"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": \"get\"}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"_current\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"_weather\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '\",'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": ' \"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"arguments\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '\":'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": ' {\"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"location\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": '\":'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": ' \"'}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"\\u4e0a\\u6d77\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": '\"}}\\n'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"content\": \"</tool_call>\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": \"\"}, \"finish_reason\": None}\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"index\": 0, \"delta\": {\"content\": \"\"}, \"finish_reason\": \"stop\"}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n        ),\n    ]\n    expected_results = [\n        {\n            \"id\": \"chatcmpl-7a377eb3-76a6-4503-b86f-1f8d4945bd76\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756546331,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"role\": \"assistant\",\n                        \"content\": \"<think>\",\n                        \"tool_calls\": [],\n                    },\n                    \"logprobs\": None,\n                    \"finish_reason\": None,\n                }\n            ],\n            \"usage\": None,\n        },\n        {\n            \"id\": \"chatcmpl-83dc7d9a-3672-4d2b-a053-cd42a187cef3\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756546331,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"role\": \"assistant\",\n                        \"content\": \"\\n\",\n                        \"tool_calls\": [],\n                    },\n                    \"logprobs\": None,\n                    \"finish_reason\": None,\n                }\n            ],\n            \"usage\": None,\n        },\n        {\n            \"id\": \"chatcmpl-2755f3b2-c020-4127-aa12-9998dfcda26e\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756546331,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"role\": \"assistant\",\n                        \"content\": \"好的\",\n                        \"tool_calls\": [],\n                    },\n                    \"logprobs\": None,\n                    \"finish_reason\": None,\n                }\n            ],\n            \"usage\": None,\n        },\n        {\n            \"id\": \"chatcmpl-4850ba39-7a0f-4d84-89c6-f1344d229616\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756546331,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"role\": \"assistant\",\n                        \"content\": \"</think>\",\n                        \"tool_calls\": [],\n                    },\n                    \"logprobs\": None,\n                    \"finish_reason\": None,\n                }\n            ],\n            \"usage\": None,\n        },\n        {\n            \"id\": \"chatcmpl-2f2a2673-2242-442e-9a70-9efc83e7a2e7\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756546331,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"role\": \"assistant\",\n                        \"content\": \"\\n\\n\",\n                        \"tool_calls\": [],\n                    },\n                    \"logprobs\": None,\n                    \"finish_reason\": None,\n                }\n            ],\n            \"usage\": None,\n        },\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        {\n            \"id\": \"chatcmpl-9a5150cb-5475-4a1b-9535-61599de39ad8\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756546331,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"role\": \"assistant\",\n                        \"content\": \"\",\n                        \"tool_calls\": [\n                            {\n                                \"index\": 0,\n                                \"id\": \"call_9a5150cb-5475-4a1b-9535-61599de39ad8\",\n                                \"type\": \"function\",\n                                \"function\": {\n                                    \"name\": \"get_current_weather\",\n                                    \"arguments\": '{\"location\": \"上海\"}',\n                                },\n                            }\n                        ],\n                    },\n                    \"logprobs\": None,\n                    \"finish_reason\": \"tool_calls\",\n                }\n            ],\n            \"usage\": None,\n        },\n        None,\n        {\n            \"id\": \"chatcmpl-882865ef-6c91-4cc0-9aec-1dff0f7cb21d\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756646459,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\"role\": \"assistant\", \"content\": \"\", \"tool_calls\": []},\n                    \"logprobs\": None,\n                    \"finish_reason\": \"stop\",\n                }\n            ],\n            \"usage\": {\n                \"prompt_tokens\": 159,\n                \"completion_tokens\": 91,\n                \"total_tokens\": 250,\n            },\n        },\n    ]\n    previous_texts = [\"\"]\n\n    for i, (model_uid, chunk_data) in enumerate(test_cases):\n        result = mixin._post_process_completion_chunk(\n            None, model_uid=model_uid, c=chunk_data, previous_texts=previous_texts\n        )\n\n        expected = expected_results[i]\n\n        if expected is None:\n            assert result is None, f\"Expected None but got {result}\"\n        else:\n            result_filtered = filter_ids_and_created(result)\n            expected_filtered = filter_ids_and_created(expected)\n            assert (\n                result_filtered == expected_filtered\n            ), f\"Mismatch at case {i}: expected {expected_filtered}, got {result_filtered}\"\n\n\ndef test_post_process_completion_chunk_with_parser():\n    mixin = ChatModelMixin()\n    mixin.tool_parser = QwenToolParser()\n    mixin.reasoning_parser = ReasoningParser(\n        reasoning_content=True,\n        reasoning_start_tag=\"<think>\",\n        reasoning_end_tag=\"</think>\",\n        enable_thinking=True,\n    )\n    test_cases = [\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": \"\\n\\n\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\n                            \"reasoning_content\": None,\n                            \"content\": \"<tool_call>\",\n                        },\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": \"\\n\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": '{\"'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": \"name\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": '\":'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": ' \"'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": \"get\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": \"_current\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": \"_weather\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": '\",'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": ' \"'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\n                            \"reasoning_content\": None,\n                            \"content\": \"arguments\",\n                        },\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": '\":'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": ' {\"'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": \"location\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": '\":'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": ' \"'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\n                            \"reasoning_content\": None,\n                            \"content\": \"\\u4e0a\\u6d77\",\n                        },\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": '\"}}\\n'},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\n                            \"reasoning_content\": None,\n                            \"content\": \"</tool_call>\",\n                        },\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": \"\"},\n                        \"finish_reason\": None,\n                    }\n                ],\n            },\n        ),\n        (\n            \"qwen\",\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": None, \"content\": \"\"},\n                        \"finish_reason\": \"stop\",\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n        ),\n    ]\n    expected_results = [\n        {\n            \"id\": \"chatcmpl-2f2a2673-2242-442e-9a70-9efc83e7a2e7\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756546331,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"role\": \"assistant\",\n                        \"content\": \"\\n\\n\",\n                        \"tool_calls\": [],\n                    },\n                    \"logprobs\": None,\n                    \"finish_reason\": None,\n                }\n            ],\n            \"usage\": None,\n        },\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        {\n            \"id\": \"chatcmpl-9a5150cb-5475-4a1b-9535-61599de39ad8\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756546331,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\n                        \"role\": \"assistant\",\n                        \"content\": \"\",\n                        \"tool_calls\": [\n                            {\n                                \"index\": 0,\n                                \"id\": \"call_9a5150cb-5475-4a1b-9535-61599de39ad8\",\n                                \"type\": \"function\",\n                                \"function\": {\n                                    \"name\": \"get_current_weather\",\n                                    \"arguments\": '{\"location\": \"上海\"}',\n                                },\n                            }\n                        ],\n                    },\n                    \"logprobs\": None,\n                    \"finish_reason\": \"tool_calls\",\n                }\n            ],\n            \"usage\": None,\n        },\n        None,\n        {\n            \"id\": \"chatcmpl-816b37c0-4e73-4a80-811c-8f7a7d9fd285\",\n            \"model\": \"qwen\",\n            \"object\": \"chat.completion.chunk\",\n            \"created\": 1756646644,\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": {\"role\": \"assistant\", \"content\": \"\", \"tool_calls\": []},\n                    \"logprobs\": None,\n                    \"finish_reason\": \"stop\",\n                }\n            ],\n            \"usage\": {\n                \"prompt_tokens\": 159,\n                \"completion_tokens\": 91,\n                \"total_tokens\": 250,\n            },\n        },\n    ]\n    previous_texts = [\"\"]\n\n    for i, (model_uid, chunk_data) in enumerate(test_cases):\n        result = mixin._post_process_completion_chunk(\n            None, model_uid=model_uid, c=chunk_data, previous_texts=previous_texts\n        )\n\n        expected = expected_results[i]\n\n        if expected is None:\n            assert result is None, f\"Expected None but got {result}\"\n        else:\n            result_filtered = filter_ids_and_created(result)\n            expected_filtered = filter_ids_and_created(expected)\n            assert (\n                result_filtered == expected_filtered\n            ), f\"Mismatch at case {i}: expected {expected_filtered}, got {result_filtered}\"\n\n\ndef test_post_process_completion_without_thinking():\n    mixin = ChatModelMixin()\n    mixin.tool_parser = QwenToolParser()\n\n    test_case = {\n        \"id\": \"255e6054-8686-11f0-a993-bc2411fe6c28\",\n        \"object\": \"text_completion\",\n        \"created\": 1756657116,\n        \"model\": \"qwen3\",\n        \"choices\": [\n            {\n                \"text\": '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n                \"index\": 0,\n                \"logprobs\": None,\n                \"finish_reason\": \"stop\",\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 163, \"completion_tokens\": 21, \"total_tokens\": 184},\n    }\n\n    expected_results = {\n        \"id\": \"chatcmpl-5d039f33-dcec-436f-b055-517c2ee928f9\",\n        \"model\": \"qwen3\",\n        \"object\": \"chat.completion\",\n        \"created\": 1756657638,\n        \"choices\": [\n            {\n                \"index\": 0,\n                \"message\": {\n                    \"role\": \"assistant\",\n                    \"content\": \"\",\n                    \"tool_calls\": [\n                        {\n                            \"id\": \"call_5d039f33-dcec-436f-b055-517c2ee928f9\",\n                            \"type\": \"function\",\n                            \"function\": {\n                                \"name\": \"get_current_weather\",\n                                \"arguments\": '{\"location\": \"上海\"}',\n                            },\n                        }\n                    ],\n                },\n                \"finish_reason\": \"tool_calls\",\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 163, \"completion_tokens\": 21, \"total_tokens\": 184},\n    }\n\n    result = mixin._post_process_completion(None, model_uid=\"qwen3\", c=test_case)\n\n    result_filtered = filter_ids_and_created(result)\n    expected_filtered = filter_ids_and_created(expected_results)\n\n    assert (\n        result_filtered == expected_filtered\n    ), f\"Mismatch: expected {expected_filtered}, got {result_filtered}\"\n\n\ndef test_post_process_completion_with_thinking():\n    mixin = ChatModelMixin()\n    mixin.tool_parser = QwenToolParser()\n    test_case = {\n        \"id\": \"7381cc1a-8688-11f0-a604-bc2411fe6c28\",\n        \"object\": \"text_completion\",\n        \"created\": 1756658106,\n        \"model\": \"qwen3\",\n        \"choices\": [\n            {\n                \"text\": '<think>\\n好的，用户问的是上海当前的天气。我需要调用get_current_weather这个工具，参数是location，也就是上海。首先确认一下工具的参数是否正确，location是必填的，所以没问题。然后生成对应的JSON请求，确保参数正确无误。最后返回工具调用的XML标签。\\n</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n                \"index\": 0,\n                \"logprobs\": None,\n                \"finish_reason\": \"stop\",\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 159, \"completion_tokens\": 91, \"total_tokens\": 250},\n    }\n    expected_results = {\n        \"id\": \"chatcmpl-47473344-4d79-4c64-b237-60622d52560c\",\n        \"model\": \"qwen3\",\n        \"object\": \"chat.completion\",\n        \"created\": 1756658106,\n        \"choices\": [\n            {\n                \"index\": 0,\n                \"message\": {\n                    \"role\": \"assistant\",\n                    \"content\": \"<think>\\n好的，用户问的是上海当前的天气。我需要调用get_current_weather这个工具，参数是location，也就是上海。首先确认一下工具的参数是否正确，location是必填的，所以没问题。然后生成对应的JSON请求，确保参数正确无误。最后返回工具调用的XML标签。\\n</think>\\n\\n\",\n                    \"tool_calls\": [\n                        {\n                            \"id\": \"call_47473344-4d79-4c64-b237-60622d52560c\",\n                            \"type\": \"function\",\n                            \"function\": {\n                                \"name\": \"get_current_weather\",\n                                \"arguments\": '{\"location\": \"上海\"}',\n                            },\n                        }\n                    ],\n                },\n                \"finish_reason\": \"tool_calls\",\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 159, \"completion_tokens\": 91, \"total_tokens\": 250},\n    }\n\n    result = mixin._post_process_completion(None, model_uid=\"qwen3\", c=test_case)\n\n    result_filtered = filter_ids_and_created(result)\n    expected_filtered = filter_ids_and_created(expected_results)\n\n    assert (\n        result_filtered == expected_filtered\n    ), f\"Mismatch: expected {expected_filtered}, got {result_filtered}\"\n\n\ndef test_post_process_completion_with_parser():\n    mixin = ChatModelMixin()\n    mixin.tool_parser = QwenToolParser()\n    mixin.reasoning_parser = ReasoningParser(\n        reasoning_content=True,\n        reasoning_start_tag=\"<think>\",\n        reasoning_end_tag=\"</think>\",\n        enable_thinking=True,\n    )\n    test_case = {\n        \"id\": \"0bd473e2-868d-11f0-88a0-bc2411fe6c28\",\n        \"object\": \"text_completion\",\n        \"created\": 1756660080,\n        \"model\": \"qwen3\",\n        \"choices\": [\n            {\n                \"text\": '<think>\\n好的，用户问的是上海当前的天气。我需要调用get_current_weather这个工具来获取数据。首先，确认工具的参数是location，必须填写城市名称。用户提到的是上海，所以参数应该是\"location\": \"上海\"。然后，生成对应的JSON格式，确保正确无误。检查一下有没有其他必填项，这里只有location，所以没问题。最后，用工具调用的格式返回结果。\\n</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n                \"index\": 0,\n                \"logprobs\": None,\n                \"finish_reason\": \"stop\",\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 159, \"completion_tokens\": 115, \"total_tokens\": 274},\n    }\n    expected_results = {\n        \"id\": \"chatcmpl-67b060a7-674a-4288-ba73-a4089f1c3c26\",\n        \"model\": \"qwen3\",\n        \"object\": \"chat.completion\",\n        \"created\": 1756660090,\n        \"choices\": [\n            {\n                \"index\": 0,\n                \"message\": {\n                    \"role\": \"assistant\",\n                    \"content\": \"\\n\\n\",\n                    \"tool_calls\": [\n                        {\n                            \"id\": \"call_67b060a7-674a-4288-ba73-a4089f1c3c26\",\n                            \"type\": \"function\",\n                            \"function\": {\n                                \"name\": \"get_current_weather\",\n                                \"arguments\": '{\"location\": \"上海\"}',\n                            },\n                        }\n                    ],\n                    \"reasoning_content\": '\\n好的，用户问的是上海当前的天气。我需要调用get_current_weather这个工具来获取数据。首先，确认工具的参数是location，必须填写城市名称。用户提到的是上海，所以参数应该是\"location\": \"上海\"。然后，生成对应的JSON格式，确保正确无误。检查一下有没有其他必填项，这里只有location，所以没问题。最后，用工具调用的格式返回结果。\\n',\n                },\n                \"finish_reason\": \"tool_calls\",\n            }\n        ],\n        \"usage\": {\"prompt_tokens\": 159, \"completion_tokens\": 115, \"total_tokens\": 274},\n    }\n    result = mixin._post_process_completion(None, model_uid=\"qwen3\", c=test_case)\n\n    result_filtered = filter_ids_and_created(result)\n    expected_filtered = filter_ids_and_created(expected_results)\n\n    assert (\n        result_filtered == expected_filtered\n    ), f\"Mismatch: expected {expected_filtered}, got {result_filtered}\"\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/__init__.py",
    "content": "from functools import wraps\nfrom typing import Any, Callable, Dict, Type\n\n# Global registry for tool parsers, mapping parser names to their classes\nTOOL_PARSERS: Dict[str, Type[Any]] = {}\n\n\ndef register_tool_parser(name: str):\n    \"\"\"\n    Decorator for registering ToolParser classes to the TOOL_PARSERS registry.\n\n    This decorator allows tool parser classes to be automatically registered\n    when they are defined, making them available for dynamic lookup.\n\n    Args:\n        name (str): The name to register the tool parser under. This should\n                   typically match the model family name (e.g., \"qwen\", \"glm4\").\n\n    Returns:\n        Callable: The decorator function that registers the class.\n\n    Example:\n        @register_tool_parser(\"qwen\")\n        class QwenToolParser(ToolParser):\n            def parse_tool_calls(self, text: str) -> List[ToolCall]:\n                # Implementation for parsing Qwen model tool calls\n                pass\n\n    Note:\n        The registered class should implement the ToolParser interface\n        and provide methods for parsing tool calls from model outputs.\n    \"\"\"\n\n    def decorator(cls: Type[Any]) -> Type[Any]:\n        \"\"\"\n        The actual decorator that performs the registration.\n\n        Args:\n            cls: The tool parser class to register.\n\n        Returns:\n            The same class (unmodified) after registration.\n        \"\"\"\n        TOOL_PARSERS[name] = cls\n        return cls\n\n    return decorator\n\n\n# Import all tool parser modules to trigger decorator registration\n# This ensures all tool parsers are automatically registered when this module is imported\nfrom . import (\n    deepseek_r1_tool_parser,\n    deepseek_v3_1_tool_parser,\n    deepseek_v3_tool_parser,\n    glm4_tool_parser,\n    llama3_tool_parser,\n    minimax_tool_parser,\n    qwen_tool_parser,\n)\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/abstract_tool_parser.py",
    "content": "class ToolParser:\n    \"\"\"\n    Abstract ToolParser class that should not be used directly. Provided\n    properties and methods should be used in\n    derived classes.\n    \"\"\"\n\n    def extract_tool_calls(self, model_output: str):\n        \"\"\"\n        Static method that should be implemented for extracting tool calls from\n        a complete model-generated string.\n        Used for non-streaming responses where we have the entire model response\n        available before sending to the client.\n        Static because it's stateless.\n        \"\"\"\n        raise NotImplementedError(\n            \"AbstractToolParser.extract_tool_calls has not been implemented!\"\n        )\n\n    def extract_tool_calls_streaming(\n        self, previous_text, current_text: str, delta_text: str\n    ):\n        \"\"\"\n        Instance method that should be implemented for extracting tool calls\n        from an incomplete response; for use when handling tool calls and\n        streaming. Has to be an instance method because  it requires state -\n        the current tokens/diffs, but also the information about what has\n        previously been parsed and extracted (see constructor)\n        \"\"\"\n        raise NotImplementedError(\n            \"AbstractToolParser.extract_tool_calls_streaming has not been \"\n            \"implemented!\"\n        )\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/deepseek_r1_tool_parser.py",
    "content": "import json\nimport logging\nimport re\nfrom typing import Any, List, Optional, Tuple\n\nfrom . import register_tool_parser\nfrom .abstract_tool_parser import ToolParser\n\nlogger = logging.getLogger(__name__)\n\n\n@register_tool_parser(\"deepseek-r1\")\nclass DeepseekR1ToolParser(ToolParser):\n    \"\"\"\n    Tool parser implementation for DeepSeek R1 model.\n\n    This parser handles the specific format used by DeepSeek R1 for tool calls,\n    which includes special Unicode tokens and JSON-formatted function arguments.\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        Initialize the DeepSeek R1 tool parser.\n        \"\"\"\n        super().__init__()\n\n        # Sentinel tokens for streaming mode\n        self.think_start_token: str = \"<think>\"\n        self.think_end_token: str = \"</think>\"\n        self.tool_call_start_token: str = \"<｜tool▁call▁begin｜>\"\n        self.tool_call_end_token: str = \"<｜tool▁call▁end｜>\"\n\n        # Regex pattern to match DeepSeek R1 tool call format\n        self.tool_calls_regex = (\n            r\"<\\｜tool▁call▁begin｜>function<\\｜tool▁sep｜>([^\\n]+)\\n\"\n            r\"```json\\n(.*?)\\n```<\\｜tool▁call▁end｜>\"\n        )\n\n        # Regex pattern to match the entire tool-calls wrapper block.\n        # We intentionally do NOT match <think> blocks here so that the\n        # \"text before\" chunk will include both the think block and any\n        # narrative text up to the tool calls wrapper, yielding exactly two\n        # blocks when there is a single tool calls section:\n        # [before_text_including_think, tool_calls_wrapper_block]\n        self.content_regex = r\"(<\\｜tool▁calls▁begin｜>.*?<\\｜tool▁calls▁end｜>)\"\n\n    def extract_tool_calls(\n        self, model_output: str\n    ) -> List[Tuple[Optional[str], Optional[str], Optional[dict]]]:\n        \"\"\"\n        Extract tool calls from complete model output.\n\n        Parses the model output to find tool call patterns and extracts\n        function names and arguments. Handles JSON parsing errors gracefully\n        and deduplicates identical tool calls.\n\n        Args:\n            model_output (str): The complete output string from the model.\n\n        Returns:\n            List[Tuple[Optional[str], Optional[str], Optional[dict]]]:\n            A list of tuples where each tuple contains:\n            - content (str or None): Raw content if parsing failed, None if successful\n            - function_name (str or None): Name of the function to call\n            - arguments (dict or None): Parsed function arguments\n\n        Example:\n            >>> parser = DeepseekR1ToolParser()\n            >>> output = '<｜tool▁call▁begin｜>function<｜tool▁sep｜>get_current_weather\\n```json\\n{\"location\": \"上海\", \"unit\": \"celsius\"}\\n```<｜tool▁call▁end｜>'\n            >>> result = parser.extract_tool_calls(output)\n            >>> print(result)\n            [(None, 'get_current_weather', {'location': 'Beijing'})]\n        \"\"\"\n        # If no tool call tokens, return original output as content\n        if self.tool_call_start_token not in model_output:\n            return [(model_output, None, None)]\n\n        # Get all content blocks (text, thinking blocks, tool calls)\n        function_calls = self._get_function_calls(model_output)\n\n        # Use set for deduplication of identical tool calls\n        tool_calls = set()\n        results: List[Tuple[Optional[str], Optional[str], Optional[dict]]] = []\n\n        for content_block in function_calls:\n            # Check if this block is a tool call\n            if (\n                self.tool_call_start_token in content_block\n                and self.tool_call_end_token in content_block\n            ):\n                # Extract function name and arguments from tool call block\n                matches = re.findall(self.tool_calls_regex, content_block, re.DOTALL)\n                if not matches:\n                    # Malformed tool call, treat as regular content\n                    results.append((content_block, None, None))\n                    continue\n\n                func_name, raw_json = matches[0]  # Take the first match\n\n                func_and_args = None\n                try:\n                    # Parse JSON arguments\n                    func_and_args = json.loads(raw_json)\n                    # Create hashable representation for deduplication\n                    arguments_hashable = frozenset(func_and_args.items())\n                    tool_call_tuple = (\n                        None,  # No content error\n                        func_name,\n                        func_and_args,\n                    )\n                except Exception as e:\n                    # JSON parsing failed, treat as raw content\n                    logger.warning(\n                        f\"Failed to parse tool call JSON: {raw_json}, error: {e}\"\n                    )\n                    tool_call_tuple = (raw_json, None, None)\n                    arguments_hashable = None\n\n                # Create deduplication key\n                dedup_key = (\n                    (func_name, arguments_hashable)\n                    if func_and_args is not None\n                    else raw_json\n                )\n\n                # Add to results if not already seen\n                if dedup_key not in tool_calls:\n                    tool_calls.add(dedup_key)\n                    results.append(tool_call_tuple)\n            else:\n                # This is regular content (text or thinking block), add as-is\n                if content_block.strip():  # Only add non-empty content\n                    results.append((content_block, None, None))\n\n        return results\n\n    def _get_function_calls(self, model_output: str) -> List[str]:\n        \"\"\"\n        Extract all function calls and content blocks from model output.\n\n        Parses the model output to separate thinking blocks, tool calls,\n        and regular content into individual components.\n\n        Args:\n            model_output (str): The complete model output to parse.\n\n        Returns:\n            List[str]: List of content blocks (text, thinking blocks, tool calls).\n        \"\"\"\n        functions_calls = []\n        last_end = 0\n        for m in re.finditer(self.content_regex, model_output, re.DOTALL):\n            # Add any text before the current match\n            if m.start() > last_end:\n                functions_calls.append(model_output[last_end : m.start()])\n            # Add the matched content (think or tool_call block)\n            functions_calls.append(m.group(0))\n            last_end = m.end()\n        # Add any remaining text after the last match\n        if last_end < len(model_output):\n            functions_calls.append(model_output[last_end:])\n        return functions_calls\n\n    def extract_tool_calls_streaming(\n        self, previous_text: List[str], current_text: str, delta_text: str\n    ) -> Optional[Any]:\n        \"\"\"\n        Extract tool calls from streaming output.\n\n        Currently not supported for DeepSeek R1 model. This method raises\n        a ValueError indicating that streaming tool call extraction is only\n        available for specific model/backend combinations.\n\n        Args:\n            previous_text (List[str]): Previous text chunks from the stream.\n            current_text (str): Current accumulated text.\n            delta_text (str): New text delta in this chunk.\n\n        Raises:\n            ValueError: Always raised as streaming is not supported.\n\n        Note:\n            DeepSeek R1 model does not currently support streaming tool call\n            extraction. Use extract_tool_calls() with complete output instead.\n        \"\"\"\n        raise NotImplementedError(\n            \"Streaming support for tool calls is available only when using \"\n            \"Qwen models with vLLM backend or GLM4-chat models without vLLM backend. \"\n            \"DeepSeek R1 does not support streaming tool call extraction.\"\n        )\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/deepseek_v3_1_tool_parser.py",
    "content": "import json\nimport logging\nimport re\nfrom typing import Any, Dict, List, Optional, Tuple\n\nfrom . import register_tool_parser\nfrom .abstract_tool_parser import ToolParser\n\nlogger = logging.getLogger(__name__)\n\n\n@register_tool_parser(\"deepseek-v3.1\")\nclass DeepseekV3_1ToolParser(ToolParser):\n    \"\"\"\n    Tool parser implementation for DeepSeek V3.1 model.\n\n    This parser handles the specific format used by DeepSeek V3.1 for tool calls,\n    which uses <｜tool▁calls▁begin｜>...<｜tool▁calls▁end｜> tokens.\n\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        Initialize the DeepSeek V3.1 tool parser.\n        \"\"\"\n        super().__init__()\n        # Sentinel tokens for streaming mode\n        self.new_tool_calls_regex = re.compile(\n            r\"(?:<｜tool▁calls▁begin｜>|<｜tool▁call▁begin｜>)(?:<｜tool▁call▁begin｜>)?\\s*(.*?)\\s*<｜tool▁sep｜>\\s*(.*?)\\s*<｜tool▁call▁end｜>\",\n            re.DOTALL,\n        )\n\n    def extract_tool_calls(\n        self, model_output: str\n    ) -> List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n        \"\"\"\n        Extract tool calls from complete model output.\n\n        Parses the model output to find JSON code blocks containing tool calls\n        and extracts function names and parameters. Handles JSON parsing errors\n        gracefully and deduplicates identical tool calls.\n\n        Args:\n            model_output (str): The complete output string from the model.\n\n        Returns:\n            List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n            A list of tuples where each tuple contains:\n            - content (str or None): Raw content if parsing failed, None if successful\n            - function_name (str or None): Name of the function to call\n            - parameters (dict or None): Function parameters\n\n        Example:\n            >>> parser = DeepseekV3_1ToolParser()\n            >>> output = '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>get_weather<｜tool▁sep｜>{\"location\": \"Beijing\"}<｜tool▁call▁end｜><｜tool▁calls▁end｜>'\n            >>> result = parser.extract_tool_calls(output)\n            >>> print(result)\n            [(None, 'get_weather', {'location': 'Beijing'})]\n        \"\"\"\n        new_matches = self.new_tool_calls_regex.findall(model_output)\n\n        if not new_matches:\n            # No tool calls found, return the original output as content\n            return [(model_output, None, None)]\n\n        # Use set for deduplication of identical tool calls\n        tool_calls = set()\n        results: List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]] = (\n            []\n        )\n\n        for name, args_json in new_matches:\n            tool_call_tuple: Tuple[\n                Optional[str], Optional[str], Optional[Dict[str, Any]]\n            ]\n            try:\n                arguments = json.loads(args_json)\n                arguments_hashable = frozenset(arguments)\n                tool_call_tuple = (\n                    None,\n                    name,\n                    arguments,\n                )\n            except json.JSONDecodeError:\n                tool_call_tuple = (\n                    f\"<｜tool▁call▁begin｜>{name}<｜tool▁sep｜>{args_json}<｜tool▁call▁end｜>\",\n                    None,\n                    None,\n                )\n                arguments_hashable = None\n\n            dedup_key = (\n                (name, arguments_hashable)\n                if arguments_hashable is not None\n                else (tool_call_tuple[0])\n            )\n\n            if dedup_key not in tool_calls:\n                tool_calls.add(dedup_key)\n                results.append(tool_call_tuple)\n\n        return results\n\n    def extract_tool_calls_streaming(\n        self, previous_text: List[str], current_text: str, delta_text: str\n    ) -> Optional[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n        \"\"\"\n        Extract tool calls from streaming output.\n\n        Processes streaming model output to detect and extract tool calls\n        as they are being generated. Handles incomplete tool calls and\n        determines when a complete tool call is available.\n\n        This method also handles cases where the <tool_call> tag is split\n        across multiple chunks (e.g., ['<', 'tool', '_call', '>']).\n\n        Args:\n            previous_text (List[str]): Previous text chunks from the stream.\n            current_text (str): Current accumulated text.\n            delta_text (str): New text delta in this chunk.\n\n        Returns:\n            Optional[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n            A tuple containing:\n            - content (str or None): Text content or None for tool calls\n            - function_name (str or None): Name of the function to call\n            - arguments (dict or None): Function arguments\n            Returns None if no complete tool call is ready yet or if we're\n            waiting to see if a tool_call tag is forming.\n        \"\"\"\n        try:\n            new_pattern_start = \"<｜tool▁calls▁begin｜>\"\n\n            # New pattern check\n            if new_pattern_start in current_text:\n                # Calculate tool calls in previous and current text to detect new completions\n                full_previous_text = \"\".join(previous_text)\n                previous_tool_calls = self.new_tool_calls_regex.findall(\n                    full_previous_text\n                )\n                current_tool_calls = self.new_tool_calls_regex.findall(current_text)\n\n                if len(current_tool_calls) > len(previous_tool_calls):\n                    # A new tool call has been completed\n                    last_tool_call = current_tool_calls[-1]\n                    name = last_tool_call[0]\n                    args_json = last_tool_call[1]\n                    try:\n                        arguments = json.loads(args_json)\n                        return None, name, arguments\n                    except json.JSONDecodeError:\n                        # If JSON is invalid, we ignore it for now (it might be fixed in next chunks?\n                        # No, if regex matched, it means we have end token, so it's final invalid JSON)\n                        pass\n\n                # In tool call mode, we suppress output until we find a complete tool call\n                return None\n\n            # Check for potential start of new pattern\n            for i in range(1, len(new_pattern_start)):\n                prefix = new_pattern_start[:i]\n                if current_text.endswith(prefix):\n                    return None\n\n            # No tool call detected and not forming one, return delta text as regular content\n            return (delta_text, None, None)\n\n        except json.JSONDecodeError as e:\n            logger.error(\"JSON decode error in streaming tool call extraction: %s\", e)\n            return None\n        except Exception as e:\n            logger.error(\"Error in DeepSeek V3.1 streaming tool call extraction: %s\", e)\n            raise\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/deepseek_v3_tool_parser.py",
    "content": "import json\nimport logging\nimport re\nfrom typing import Any, Dict, List, Optional, Tuple\n\nfrom . import register_tool_parser\nfrom .abstract_tool_parser import ToolParser\n\nlogger = logging.getLogger(__name__)\n\n\n@register_tool_parser(\"deepseek-v3\")\nclass DeepseekV3ToolParser(ToolParser):\n    \"\"\"\n    Tool parser implementation for DeepSeek V3 model.\n\n    This parser handles the specific format used by DeepSeek V3 for tool calls,\n    which uses JSON code blocks wrapped in markdown format.\n\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        Initialize the DeepSeek V3 tool parser.\n        \"\"\"\n        super().__init__()\n        # Regex pattern to match JSON code blocks\n        self.tool_calls_regex = r\"\\s*```json\\s*(.*?)\\s*```\"\n\n    def _parse_json_function_call(\n        self,\n        function_call_str: str,\n    ) -> str:\n        \"\"\"\n        Parse JSON function call from string.\n\n        Args:\n            function_call_str (str): The function call string to parse.\n\n        Returns:\n            str: Parsed result or original string if no match found.\n\n        \"\"\"\n        match = self.tool_calls_regex.search(function_call_str)\n        if match:\n            result = match.group(1)\n            return result\n        return function_call_str\n\n    def extract_tool_calls(\n        self, model_output: str\n    ) -> List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n        \"\"\"\n        Extract tool calls from complete model output.\n\n        Parses the model output to find JSON code blocks containing tool calls\n        and extracts function names and parameters. Handles JSON parsing errors\n        gracefully and deduplicates identical tool calls.\n\n        Args:\n            model_output (str): The complete output string from the model.\n\n        Returns:\n            List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n            A list of tuples where each tuple contains:\n            - content (str or None): Raw content if parsing failed, None if successful\n            - function_name (str or None): Name of the function to call\n            - parameters (dict or None): Function parameters\n\n        Example:\n            >>> parser = DeepseekV3ToolParser()\n            >>> output = '```json\\n{\"name\": \"get_weather\", \"parameters\": {\"location\": \"Beijing\"}}\\n```'\n            >>> result = parser.extract_tool_calls(output)\n            >>> print(result)\n            [(None, 'get_weather', {'location': 'Beijing'})]\n        \"\"\"\n        matches = re.findall(self.tool_calls_regex, model_output, re.DOTALL)\n\n        if not matches:\n            # No tool calls found, return the original output as content\n            return [(model_output, None, None)]\n\n        # Use set for deduplication of identical tool calls\n        tool_calls = set()\n        results: List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]] = (\n            []\n        )\n\n        for raw_json in matches:\n            func_and_args = None\n            try:\n                # Parse JSON to extract function call information\n                func_and_args = json.loads(raw_json)\n                # Convert dictionary to frozenset for deduplication\n                arguments_hashable = frozenset(func_and_args[\"parameters\"])\n                tool_call_tuple = (\n                    None,  # No content error\n                    func_and_args[\"name\"],\n                    func_and_args[\"parameters\"],\n                )\n            except json.JSONDecodeError:\n                tool_call_tuple = (\n                    raw_json,\n                    None,\n                    None,\n                )  # If parsing fails, treat as raw content\n                arguments_hashable = None  # No need for hashing\n\n            # Avoid duplicate entries\n            dedup_key = (\n                (func_and_args[\"name\"], arguments_hashable)\n                if func_and_args is not None\n                else (raw_json)\n            )\n\n            # Add to results if not already seen\n            if dedup_key not in tool_calls:\n                tool_calls.add(dedup_key)\n                results.append(tool_call_tuple)\n\n        return results\n\n    def extract_tool_calls_streaming(\n        self, previous_text: List[str], current_text: str, delta_text: str\n    ) -> Optional[Any]:\n        \"\"\"\n        Extract tool calls from streaming output.\n\n        Currently not supported for DeepSeek V3 model. This method raises\n        a ValueError indicating that streaming tool call extraction is only\n        available for specific model/backend combinations.\n\n        Args:\n            previous_text (List[str]): Previous text chunks from the stream.\n            current_text (str): Current accumulated text.\n            delta_text (str): New text delta in this chunk.\n\n        Raises:\n            ValueError: Always raised as streaming is not supported.\n        \"\"\"\n        raise NotImplementedError(\n            \"Streaming support for tool calls is available only when using \"\n            \"Qwen models with vLLM backend or GLM4-chat models without vLLM backend. \"\n            \"DeepSeek V3 does not support streaming tool call extraction.\"\n        )\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/glm4_tool_parser.py",
    "content": "import json\nimport logging\nfrom typing import Any, Dict, List, Optional, Tuple\n\nfrom . import register_tool_parser\nfrom .abstract_tool_parser import ToolParser\n\nlogger = logging.getLogger(__name__)\n\n\n@register_tool_parser(\"glm4\")\nclass Glm4ToolParser(ToolParser):\n    \"\"\"\n    Tool parser implementation for GLM4 model.\n\n    This parser handles the specific format used by GLM4 for tool calls,\n    which uses JSON code blocks wrapped in markdown format.\n\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        Initialize the GLM4 tool parser.\n        \"\"\"\n        super().__init__()\n        # Regex pattern to match JSON code blocks\n        self.tool_calls_regex = r\"\\s*```json\\s*(.*?)\\s*```\"\n\n    def _parse_json_function_call(\n        self,\n        function_call_str: str,\n    ) -> str:\n        \"\"\"\n        Parse JSON function call from string.\n\n        Args:\n            function_call_str (str): The function call string to parse.\n\n        Returns:\n            str: Parsed result or original string if no match found.\n\n        \"\"\"\n        match = self.tool_calls_regex.search(function_call_str)\n        if match:\n            result = match.group(1)\n            return result\n        return function_call_str\n\n    def extract_tool_calls(\n        self, model_output: str\n    ) -> List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n        \"\"\"\n        Extract tool calls from complete model output.\n\n        Parses the model output to find JSON code blocks containing tool calls\n        and extracts function names and parameters. Handles JSON parsing errors\n        gracefully and deduplicates identical tool calls.\n\n        Args:\n            model_output (str): The complete output string from the model.\n\n        Returns:\n            List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n            A list of tuples where each tuple contains:\n            - content (str or None): Raw content if parsing failed, None if successful\n            - function_name (str or None): Name of the function to call\n            - parameters (dict or None): Function parameters\n\n        Example:\n            >>> parser = Glm4ToolParser()\n            >>> output = {\"name\": \"get_weather\", \"parameters\": {\"location\": \"Beijing\"}}\n            >>> result = parser.extract_tool_calls(output)\n            >>> print(result)\n            [(None, 'get_weather', {'location': 'Beijing'})]\n        \"\"\"\n        try:\n            if isinstance(model_output, dict):\n                try:\n                    return [\n                        (\n                            None,\n                            model_output[\"name\"],\n                            json.loads(model_output[\"arguments\"]),\n                        )\n                    ]\n                except Exception:\n                    return [(None, model_output[\"name\"], model_output[\"arguments\"])]\n        except KeyError:\n            logger.error(\"Can't parse glm output: %s\", model_output)\n            return [(str(model_output), None, None)]\n        else:\n            return [(str(model_output), None, None)]\n\n    def extract_tool_calls_streaming(\n        self, previous_text: List[str], current_text: str, delta_text: str\n    ) -> Optional[Any]:\n        \"\"\"\n        Extract tool calls from streaming output.\n\n        Currently has limited support for GLM4 model streaming. This method raises\n        a ValueError indicating that streaming tool call extraction is only\n        available for specific model/backend combinations.\n\n        Args:\n            previous_text (List[str]): Previous text chunks from the stream.\n            current_text (str): Current accumulated text.\n            delta_text (str): New text delta in this chunk.\n        \"\"\"\n        try:\n            if isinstance(current_text, dict):\n                try:\n                    return (\n                        None,\n                        current_text[\"name\"],\n                        json.loads(current_text[\"arguments\"]),\n                    )\n                except Exception:\n                    return (None, current_text[\"name\"], current_text[\"arguments\"])\n        except KeyError:\n            logger.error(\"Can't parse glm output: %s\", current_text)\n            return (str(current_text), None, None)\n        else:\n            return (str(current_text), None, None)\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/llama3_tool_parser.py",
    "content": "import logging\nfrom typing import Any, Dict, List, Optional, Tuple\n\nfrom . import register_tool_parser\nfrom .abstract_tool_parser import ToolParser\n\nlogger = logging.getLogger(__name__)\n\n\n@register_tool_parser(\"llama3\")\nclass Llama3ToolParser(ToolParser):\n    \"\"\"\n    Tool parser implementation for Llama3 model.\n\n    This parser handles the specific format used by Llama3 for tool calls,\n    which uses Python dictionary format that needs to be evaluated safely.\n\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        Initialize the Llama3 tool parser.\n        \"\"\"\n        super().__init__()\n\n    def extract_tool_calls(\n        self, model_output: str\n    ) -> List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n        \"\"\"\n        Extract tool calls from complete model output.\n\n        Parses the model output using eval() to extract tool call information.\n        This method expects the output to be a valid Python dictionary format.\n\n        Args:\n            model_output (str): The complete output string from the model.\n\n        Returns:\n            List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n            A list of tuples where each tuple contains:\n            - content (str or None): Raw content if parsing failed, None if successful\n            - function_name (str or None): Name of the function to call\n            - parameters (dict or None): Function parameters\n        \"\"\"\n        try:\n            data = eval(model_output, {}, {})\n            return [(None, data[\"name\"], data[\"parameters\"])]\n        except Exception:\n            return [(model_output, None, None)]\n\n    def extract_tool_calls_streaming(\n        self, previous_text: List[str], current_text: str, delta_text: str\n    ) -> Optional[Any]:\n        \"\"\"\n        Extract tool calls from streaming output.\n\n        Currently not supported for Llama3 model. This method raises\n        a ValueError indicating that streaming tool call extraction is only\n        available for specific model/backend combinations.\n\n        Args:\n            previous_text (List[str]): Previous text chunks from the stream.\n            current_text (str): Current accumulated text.\n            delta_text (str): New text delta in this chunk.\n\n        Raises:\n            ValueError: Always raised as streaming is not supported.\n\n        Note:\n            Llama3 model does not currently support streaming tool call\n            extraction. Use extract_tool_calls() with complete output instead.\n        \"\"\"\n        raise NotImplementedError(\n            \"Streaming support for tool calls is available only when using \"\n            \"Qwen models with vLLM backend or GLM4-chat models without vLLM backend. \"\n            \"Llama3 does not support streaming tool call extraction.\"\n        )\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/minimax_tool_parser.py",
    "content": "import json\nimport logging\nimport re\nfrom typing import Any, Dict, List, Optional, Tuple\n\nfrom . import register_tool_parser\nfrom .abstract_tool_parser import ToolParser\n\nlogger = logging.getLogger(__name__)\n\n\n@register_tool_parser(\"minimax\")\nclass MiniMaxToolParser(ToolParser):\n    \"\"\"\n    Tool parser implementation for MiniMax models.\n\n    This parser handles MiniMax tool calls wrapped with <minimax:tool_call>\n    tags and <invoke>/<parameter> blocks.\n    \"\"\"\n\n    def __init__(self):\n        super().__init__()\n        self.think_start_token: str = \"<think>\"\n        self.think_end_token: str = \"</think>\"\n        self.tool_call_start_token: str = \"<minimax:tool_call>\"\n        self.tool_call_end_token: str = \"</minimax:tool_call>\"\n\n        self.think_regex = re.compile(r\"<think>(.*?)</think>\", re.DOTALL)\n        self.content_regex = (\n            r\"(<(?:think|minimax:tool_call)>.*?</(?:think|minimax:tool_call)>)\"\n        )\n        self.tool_call_complete_regex = re.compile(\n            r\"<minimax:tool_call>(.*?)</minimax:tool_call>\", re.DOTALL\n        )\n        self.tool_call_regex = re.compile(\n            r\"<minimax:tool_call>.*?</minimax:tool_call>|<minimax:tool_call>.*?$\",\n            re.DOTALL,\n        )\n        self.invoke_regex = re.compile(\n            r\"<invoke\\s+name=\\\"([^\\\"]+)\\\">(.*?)</invoke>\", re.DOTALL\n        )\n        self.param_regex = re.compile(\n            r\"<parameter\\s+name=\\\"([^\\\"]+)\\\">(.*?)</parameter>\", re.DOTALL\n        )\n\n    def _parse_param_value(self, value: str) -> Any:\n        value = value.strip()\n        if not value:\n            return \"\"\n        try:\n            return json.loads(value)\n        except Exception:\n            return value\n\n    def _parse_invoke_calls(self, tool_block: str) -> List[Tuple[str, Dict[str, Any]]]:\n        results = []\n        for name, body in self.invoke_regex.findall(tool_block):\n            args: Dict[str, Any] = {}\n            for key, val in self.param_regex.findall(body):\n                args[key] = self._parse_param_value(val)\n            results.append((name, args))\n        return results\n\n    def _get_function_calls(self, model_output: str) -> List[str]:\n        functions_calls = []\n        last_end = 0\n        for m in re.finditer(self.content_regex, model_output, re.DOTALL):\n            if m.start() > last_end:\n                functions_calls.append(model_output[last_end : m.start()])\n            functions_calls.append(m.group(0))\n            last_end = m.end()\n        if last_end < len(model_output):\n            functions_calls.append(model_output[last_end:])\n        return functions_calls\n\n    def _get_function_calls_streaming(self, model_output: str) -> List[str]:\n        matched_ranges = self.tool_call_regex.findall(model_output)\n        return matched_ranges\n\n    def is_contain_think(self, model_output: str) -> bool:\n        return self.think_regex.search(model_output) is not None\n\n    def _has_unclosed_tool_call(self, text: str) -> bool:\n        if not text:\n            return True\n        start_count = text.count(self.tool_call_start_token)\n        end_count = text.count(self.tool_call_end_token)\n        return start_count > end_count\n\n    def extract_tool_calls(\n        self, model_output: str\n    ) -> List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n        if self.tool_call_start_token not in model_output:\n            return [(model_output, None, None)]\n\n        results: List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]] = (\n            []\n        )\n        try:\n            function_calls = self._get_function_calls(model_output)\n            if not function_calls:\n                return [(model_output, None, None)]\n\n            for function_call in function_calls:\n                if self.tool_call_start_token in function_call:\n                    invokes = self._parse_invoke_calls(function_call)\n                    if not invokes:\n                        results.append((function_call, None, None))\n                        continue\n                    for name, args in invokes:\n                        results.append((None, name, args))\n                else:\n                    if function_call:\n                        results.append((function_call, None, None))\n            return results\n        except Exception as e:\n            logger.error(\n                \"Can't parse minimax tool call output: %s. Error: %s\",\n                model_output,\n                e,\n            )\n            return [(model_output, None, None)]\n\n    def extract_tool_calls_streaming(\n        self, previous_text: List[str], current_text: str, delta_text: str\n    ) -> Optional[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n        try:\n            if self.tool_call_start_token in current_text:\n                function_calls = self._get_function_calls_streaming(current_text)\n                if not function_calls:\n                    return None\n                if self.is_contain_think(function_calls[-1]):\n                    return None\n                if not self._has_unclosed_tool_call(previous_text[-1]):\n                    return None\n                tool_block = function_calls[-1]\n                if self.tool_call_end_token not in tool_block:\n                    return None\n                invokes = self._parse_invoke_calls(tool_block)\n                if not invokes:\n                    return None\n                name, args = invokes[-1]\n                return None, name, args\n            return (delta_text, None, None)\n        except Exception as e:\n            logger.error(\"Error in MiniMax streaming tool call extraction: %s\", e)\n            raise\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/qwen_tool_parser.py",
    "content": "import json\nimport logging\nimport re\nfrom typing import Any, Dict, List, Optional, Tuple\n\nfrom . import register_tool_parser\nfrom .abstract_tool_parser import ToolParser\n\nlogger = logging.getLogger(__name__)\n\n\n@register_tool_parser(\"qwen\")\nclass QwenToolParser(ToolParser):\n    \"\"\"\n    Tool parser implementation for Qwen model.\n\n    This parser handles the specific format used by Qwen for tool calls,\n    which uses XML-like tags for both thinking blocks and tool calls.\n\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"\n        Initialize the Qwen tool parser.\n\n        Sets up the XML-like tokens and regex patterns used for parsing\n        Qwen model outputs containing thinking blocks and tool calls.\n        \"\"\"\n        super().__init__()\n\n        # Sentinel tokens for streaming mode\n        self.think_start_token: str = \"<think>\"\n        self.think_end_token: str = \"</think>\"\n        self.tool_call_start_token: str = \"<tool_call>\"\n        self.tool_call_end_token: str = \"</tool_call>\"\n\n        # Regex patterns for parsing different content types\n        self.think_regex = re.compile(\"<think>(.*?)</think>\", re.DOTALL)\n        self.content_regex = r\"(<(think|tool_call)>.*?</\\2>)\"\n        self.tool_call_complete_regex = re.compile(\n            r\"<tool_call>(.*?)</tool_call>\", re.DOTALL\n        )\n        self.tool_call_regex = re.compile(\n            r\"<tool_call>.*?</tool_call>|<tool_call>.*?$\", re.DOTALL\n        )\n\n    def _parse_json_function_call(\n        self,\n        function_call_str: str,\n    ) -> str:\n        \"\"\"\n        Parse JSON function call from string.\n\n        Extracts the JSON content from tool_call XML tags.\n\n        Args:\n            function_call_str (str): The function call string to parse.\n\n        Returns:\n            str: Extracted JSON string or original string if no match found.\n        \"\"\"\n        # First try to find complete tool calls\n        function_calls = self.tool_call_complete_regex.findall(function_call_str)\n        if len(function_calls) > 0:\n            return function_calls[-1]\n\n        # If no complete tool calls found, try to extract from incomplete tool calls\n        # Handle cases like <tool_call><tool_call>_city\n        if self.tool_call_start_token in function_call_str:\n            # Extract content between the last tool_call start token and end of string\n            last_start = function_call_str.rfind(self.tool_call_start_token)\n            potential_json = function_call_str[\n                last_start + len(self.tool_call_start_token) :\n            ]\n            # Remove any trailing tool_call end tokens\n            if self.tool_call_end_token in potential_json:\n                potential_json = potential_json.split(self.tool_call_end_token)[0]\n            # Clean up any extra whitespace\n            potential_json = potential_json.strip()\n            if potential_json:\n                return potential_json\n\n        return function_call_str\n\n    def _parse_json_function_call_stream(\n        self,\n        function_call_str: str,\n    ) -> Optional[str]:\n        \"\"\"\n        Parse JSON function call from streaming string.\n\n        Extracts the JSON content from tool_call XML tags in streaming context.\n\n        Args:\n            function_call_str (str): The function call string to parse.\n\n        Returns:\n            Optional[str]: Extracted JSON string or None if no complete match found.\n        \"\"\"\n        function_calls = self.tool_call_complete_regex.findall(function_call_str)\n        if len(function_calls) == 0:\n            return None\n        return function_calls[-1]\n\n    def is_contain_think_end_token(self, model_output: str) -> bool:\n        \"\"\"\n        Check if the model output contains the think end token.\n\n        Args:\n            model_output (str): The model output to check.\n\n        Returns:\n            bool: True if think end token is present.\n        \"\"\"\n        return self.think_end_token in model_output\n\n    def is_contain_think(self, model_output: str) -> bool:\n        \"\"\"\n        Check if the model output contains complete thinking blocks.\n\n        Args:\n            model_output (str): The model output to check.\n\n        Returns:\n            bool: True if complete thinking blocks are present.\n        \"\"\"\n        return self.think_regex.search(model_output) is not None\n\n    def is_contain_tool_call(self, model_output: str) -> bool:\n        \"\"\"\n        Check if the model output contains complete tool calls.\n\n        Args:\n            model_output (str): The model output to check.\n\n        Returns:\n            bool: True if complete tool calls are present.\n        \"\"\"\n        return self.tool_call_complete_regex.search(model_output) is not None\n\n    def is_contain_tool_call_start_token(self, model_output: str) -> bool:\n        \"\"\"\n        Check if the model output contains the tool call start token.\n\n        Args:\n            model_output (str): The model output to check.\n\n        Returns:\n            bool: True if tool call start token is present.\n        \"\"\"\n        return self.tool_call_start_token in model_output\n\n    def is_contain_tool_call_end_token(self, model_output: str) -> bool:\n        \"\"\"\n        Check if the model output contains the tool call end token.\n\n        Args:\n            model_output (str): The model output to check.\n\n        Returns:\n            bool: True if tool call end token is present.\n        \"\"\"\n        return self.tool_call_end_token in model_output\n\n    def _get_function_calls(self, model_output: str) -> List[str]:\n        \"\"\"\n        Extract all function calls and content blocks from model output.\n\n        Parses the model output to separate thinking blocks, tool calls,\n        and regular content into individual components.\n\n        Args:\n            model_output (str): The complete model output to parse.\n\n        Returns:\n            List[str]: List of content blocks (text, thinking blocks, tool calls).\n        \"\"\"\n        functions_calls = []\n        last_end = 0\n        for m in re.finditer(self.content_regex, model_output, re.DOTALL):\n            # Add any text before the current match\n            if m.start() > last_end:\n                functions_calls.append(model_output[last_end : m.start()])\n            # Add the matched content (think or tool_call block)\n            functions_calls.append(m.group(0))\n            last_end = m.end()\n        # Add any remaining text after the last match\n        if last_end < len(model_output):\n            functions_calls.append(model_output[last_end:])\n        return functions_calls\n\n    def _get_function_calls_streaming(self, model_output: str) -> List[str]:\n        \"\"\"\n        Extract function calls from streaming model output.\n\n        Finds both complete and incomplete tool calls in streaming context.\n\n        Args:\n            model_output (str): The streaming model output to parse.\n\n        Returns:\n            List[str]: List of tool call blocks (complete or incomplete).\n        \"\"\"\n        matched_ranges = self.tool_call_regex.findall(model_output)\n        return matched_ranges\n\n    def extract_tool_calls(\n        self, model_output: str\n    ) -> List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n        \"\"\"\n        Extract tool calls from complete model output.\n\n        Parses the model output to find tool calls and thinking blocks,\n        extracting function names and arguments from JSON content within\n        tool_call XML tags.\n\n        Args:\n            model_output (str): The complete output string from the model.\n\n        Returns:\n            List[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n            A list of tuples where each tuple contains:\n            - content (str or None): Raw content if parsing failed, None if successful\n            - function_name (str or None): Name of the function to call\n            - arguments (dict or None): Function arguments\n\n        Example:\n            >>> parser = QwenToolParser()\n            >>> output = '<tool_call>\\n{\"name\": \"get_weather\", \"arguments\": {\"location\": \"Beijing\"}}\\n</tool_call>'\n            >>> result = parser.extract_tool_calls(output)\n            >>> print(result)\n            [(None, 'get_weather', {'location': 'Beijing'})]\n        \"\"\"\n        # If no tool call tokens, return original output as content\n        if self.tool_call_start_token not in model_output:\n            return [(model_output, None, None)]\n\n        try:\n            function_calls = self._get_function_calls(model_output)\n            if len(function_calls) == 0:\n                return [(model_output, None, None)]\n\n            results: List[\n                Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]\n            ] = []\n            for function_call in function_calls:\n                try:\n                    parsed_json = self._parse_json_function_call(function_call)\n                    res = json.loads(parsed_json, strict=False)\n                    # Validate that we have the required fields\n                    if \"name\" in res and \"arguments\" in res:\n                        results.append((None, res[\"name\"], res[\"arguments\"]))\n                    else:\n                        logger.warning(\n                            \"Invalid tool call format, missing required fields: %s\", res\n                        )\n                        results.append((function_call, None, None))\n                except Exception as e:\n                    logger.error(\n                        \"Can't parse single qwen tool call output: %s. Error: %s\",\n                        function_call,\n                        e,\n                    )\n                    results.append((function_call, None, None))\n            return results\n\n        except Exception as e:\n            logger.error(\n                \"Can't parse qwen tool call output: %s. Error: %s\",\n                model_output,\n                e,\n            )\n            return [(model_output, None, None)]\n\n    def _has_unclosed_tool_call(self, text: str) -> bool:\n        \"\"\"\n        Check if the text has unclosed tool_call tags.\n\n        Counts the number of opening and closing tool_call tags to determine\n        if there are any unclosed tool calls in the text.\n\n        Args:\n            text (str): The text to check for unclosed tags.\n\n        Returns:\n            bool: True if there are unclosed tool_call tags.\n        \"\"\"\n        if not text:\n            return True\n        start_count = text.count(self.tool_call_start_token)\n        end_count = text.count(self.tool_call_end_token)\n        return start_count > end_count\n\n    def extract_tool_calls_streaming(\n        self, previous_text: List[str], current_text: str, delta_text: str\n    ) -> Optional[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n        \"\"\"\n        Extract tool calls from streaming output.\n\n        Processes streaming model output to detect and extract tool calls\n        as they are being generated. Handles incomplete tool calls and\n        determines when a complete tool call is available.\n\n        Args:\n            previous_text (List[str]): Previous text chunks from the stream.\n            current_text (str): Current accumulated text.\n            delta_text (str): New text delta in this chunk.\n\n        Returns:\n            Optional[Tuple[Optional[str], Optional[str], Optional[Dict[str, Any]]]]:\n            A tuple containing:\n            - content (str or None): Text content or None for tool calls\n            - function_name (str or None): Name of the function to call\n            - arguments (dict or None): Function arguments\n            Returns None if no complete tool call is ready.\n\n        Note:\n            This method is designed to work with Qwen's streaming output format\n            and handles partial tool calls during generation.\n        \"\"\"\n        try:\n            # Check if current output contains tool_call start token\n            if self.is_contain_tool_call_start_token(current_text):\n                function_calls = self._get_function_calls_streaming(current_text)\n                # If the last function call contains thinking, it's not a tool call\n                if self.is_contain_think(function_calls[-1]):\n                    return None\n                # If the previous round's tool_call tags are closed, this is a new tool call\n                if not self._has_unclosed_tool_call(previous_text[-1]):\n                    return None\n                # Parse and return\n                function_call = self._parse_json_function_call_stream(\n                    function_calls[-1]\n                )\n                if function_call is None:\n                    return None\n                res = json.loads(function_call, strict=False)\n                return None, res[\"name\"], res[\"arguments\"]\n            else:\n                # Return delta text as regular content\n                return (delta_text, None, None)\n\n        except Exception as e:\n            logger.error(\"Error in Qwen streaming tool call extraction: %s\", e)\n            raise\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/tests/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/llm/tool_parsers/tests/test_deepseek_r1_tool_parser.py",
    "content": "from ..deepseek_r1_tool_parser import DeepseekR1ToolParser\n\n\ndef test_tool_parser_extract_calls_without_thinking():\n    parser = DeepseekR1ToolParser()\n\n    test_case = '<｜tool▁call▁begin｜>function<｜tool▁sep｜>get_current_weather\\n```json\\n{\"location\": \"上海\"}\\n```<｜tool▁call▁end｜>'\n\n    expected_results = [(None, \"get_current_weather\", {\"location\": \"上海\"})]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results, f\"Expected {expected_results}, but got {result}\"\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/tests/test_deepseek_v3_1_tool_parser.py",
    "content": "from ..deepseek_v3_1_tool_parser import DeepseekV3_1ToolParser\n\n\ndef test_extract_tool_calls_single_call():\n    \"\"\"Test extracting a single tool call.\"\"\"\n    parser = DeepseekV3_1ToolParser()\n\n    test_case = '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁calls▁end｜>'\n\n    expected_results = [(None, \"get_current_weather\", {\"location\": \"上海\"})]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results, f\"Expected {expected_results}, but got {result}\"\n\n\ndef test_extract_tool_calls_multiple_calls():\n    \"\"\"Test extracting multiple tool calls.\"\"\"\n    parser = DeepseekV3_1ToolParser()\n\n    test_case = (\n        '<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜>'\n        '<｜tool▁call▁begin｜>get_time<｜tool▁sep｜>{\"timezone\": \"UTC+8\"}<｜tool▁call▁end｜><｜tool▁calls▁end｜>'\n    )\n\n    expected_results = [\n        (None, \"get_current_weather\", {\"location\": \"上海\"}),\n        (None, \"get_time\", {\"timezone\": \"UTC+8\"}),\n    ]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results, f\"Expected {expected_results}, but got {result}\"\n\n\ndef test_extract_tool_calls_no_tool_call():\n    \"\"\"Test when no tool call is present.\"\"\"\n    parser = DeepseekV3_1ToolParser()\n\n    test_case = \"This is a normal response without any tool calls.\"\n\n    expected_results = [(test_case, None, None)]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results, f\"Expected {expected_results}, but got {result}\"\n\n\nSTREAMING_TEST_CASES = [\n    # (previous_texts, current_text, delta_text)\n    ([\"\"], \"<｜tool▁calls▁begin｜>\", \"<｜tool▁calls▁begin｜>\"),\n    ([\"<｜tool▁calls▁begin｜>\"], \"<｜tool▁calls▁begin｜>get\", \"get\"),\n    ([\"<｜tool▁calls▁begin｜>get\"], \"<｜tool▁calls▁begin｜>get_current\", \"_current\"),\n    (\n        [\"<｜tool▁calls▁begin｜>get_current\"],\n        \"<｜tool▁calls▁begin｜>get_current_weather\",\n        \"_weather\",\n    ),\n    (\n        [\"<｜tool▁calls▁begin｜>get_current_weather\"],\n        \"<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>\",\n        \"<｜tool▁sep｜>\",\n    ),\n    (\n        [\"<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>\"],\n        \"<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\",\n        \"{\",\n    ),\n    (\n        [\"<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location',\n        '\"location',\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":',\n        '\":',\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"',\n        ' \"',\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海',\n        \"上海\",\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}',\n        '\"}',\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜>',\n        \"<｜tool▁call▁end｜>\",\n    ),\n    (\n        [\n            '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}<｜tool▁call▁end｜>'\n        ],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁call▁end｜>',\n        \"<｜tool▁call▁end｜>\",\n    ),\n    (\n        [\n            '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}<｜tool▁call▁end｜><｜tool▁call▁end｜>'\n        ],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁call▁end｜>',\n        \"\",\n    ),\n]\n\nSTREAMING_TEST_MUTI_CASES = [\n    # (previous_texts, current_text, delta_text)\n    ([\"\"], \"<｜tool▁calls▁begin｜>\", \"<｜tool▁calls▁begin｜>\"),\n    ([\"<｜tool▁calls▁begin｜>\"], \"<｜tool▁calls▁begin｜>get\", \"get\"),\n    ([\"<｜tool▁calls▁begin｜>get\"], \"<｜tool▁calls▁begin｜>get_current\", \"_current\"),\n    (\n        [\"<｜tool▁calls▁begin｜>get_current\"],\n        \"<｜tool▁calls▁begin｜>get_current_weather\",\n        \"_weather\",\n    ),\n    (\n        [\"<｜tool▁calls▁begin｜>get_current_weather\"],\n        \"<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>\",\n        \"<｜tool▁sep｜>\",\n    ),\n    (\n        [\"<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>\"],\n        \"<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\",\n        \"{\",\n    ),\n    (\n        [\"<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location',\n        '\"location',\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":',\n        '\":',\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"',\n        ' \"',\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海',\n        \"上海\",\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}',\n        '\"}',\n    ),\n    (\n        ['<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}'],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜>',\n        \"<｜tool▁call▁end｜>\",\n    ),\n    (\n        [\n            '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}<｜tool▁call▁end｜>'\n        ],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>',\n        \"<｜tool▁call▁begin｜>\",\n    ),\n    (\n        [\n            '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>'\n        ],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time',\n        \"get_time\",\n    ),\n    (\n        [\n            '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time'\n        ],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time<｜tool▁sep｜>',\n        \"<｜tool▁sep｜>\",\n    ),\n    (\n        [\n            '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time'\n        ],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time<｜tool▁sep｜>{\"timezone\": \"UTC+8\"}',\n        '{\"timezone\": \"UTC+8\"}',\n    ),\n    (\n        [\n            '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time<｜tool▁sep｜>{\"timezone\": \"UTC+8\"}'\n        ],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time<｜tool▁sep｜>{\"timezone\": \"UTC+8\"}<｜tool▁call▁end｜>',\n        \"<｜tool▁call▁end｜>\",\n    ),\n    (\n        [\n            '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time<｜tool▁sep｜>{\"timezone\": \"UTC+8\"}<｜tool▁call▁end｜>'\n        ],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time<｜tool▁sep｜>{\"timezone\": \"UTC+8\"}<｜tool▁call▁end｜><｜tool▁calls▁end｜>',\n        \"<｜tool▁calls▁end｜>\",\n    ),\n    (\n        [\n            '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\":\"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time<｜tool▁sep｜>{\"timezone\": \"UTC+8\"}<｜tool▁call▁end｜><｜tool▁calls▁end｜>'\n        ],\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}<｜tool▁call▁end｜><｜tool▁call▁begin｜>get_time<｜tool▁sep｜>{\"timezone\": \"UTC+8\"}<｜tool▁call▁end｜><｜tool▁calls▁end｜>',\n        \"\",\n    ),\n]\n\n\ndef test_extract_tool_calls_streaming_full_sequence():\n    \"\"\"Test streaming extraction through a complete tool call sequence.\"\"\"\n    parser = DeepseekV3_1ToolParser()\n\n    tool_call_detected = False\n    detected_result = None\n\n    for previous_texts, current_text, delta_text in STREAMING_TEST_CASES:\n        result = parser.extract_tool_calls_streaming(\n            previous_texts, current_text, delta_text\n        )\n\n        # When tool call is complete, we should get the parsed result\n        if result is not None and result[1] is not None:\n            tool_call_detected = True\n            detected_result = result\n\n    assert tool_call_detected, \"Tool call should be detected during streaming\"\n    assert detected_result == (\n        None,\n        \"get_current_weather\",\n        {\"location\": \"上海\"},\n    ), f\"Expected tool call result, but got {detected_result}\"\n\n\ndef test_extract_tool_calls_streaming_multi_sequence():\n    \"\"\"Test streaming extraction through a complete multiple tool calls sequence.\"\"\"\n    parser = DeepseekV3_1ToolParser()\n    detected_results = []\n\n    for previous_texts, current_text, delta_text in STREAMING_TEST_MUTI_CASES:\n        result = parser.extract_tool_calls_streaming(\n            previous_texts, current_text, delta_text\n        )\n\n        if result is not None and result[1] is not None:\n            detected_results.append(result)\n\n    expected_results = [\n        (None, \"get_current_weather\", {\"location\": \"上海\"}),\n        (None, \"get_time\", {\"timezone\": \"UTC+8\"}),\n    ]\n\n    assert (\n        len(detected_results) == 2\n    ), f\"Expected 2 tool calls, but got {len(detected_results)}\"\n    assert (\n        detected_results == expected_results\n    ), f\"Expected {expected_results}, but got {detected_results}\"\n\n\ndef test_extract_tool_calls_streaming_split_token():\n    \"\"\"Test streaming extraction when tokens are split across chunks.\"\"\"\n    parser = DeepseekV3_1ToolParser()\n\n    # Case 1: Split end token <｜tool▁call▁end｜>\n    # Split as \"<｜tool▁call\" and \"▁end｜>\"\n    previous_texts = [\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}'\n    ]\n    current_text_base = (\n        '<｜tool▁calls▁begin｜>get_current_weather<｜tool▁sep｜>{\"location\": \"上海\"}'\n    )\n\n    # Step 1: Part 1 of end token\n    delta1 = \"<｜tool▁call\"\n    current_text1 = current_text_base + delta1\n    result1 = parser.extract_tool_calls_streaming(previous_texts, current_text1, delta1)\n    # Should be None (waiting)\n    assert result1 is None, f\"Expected None for partial token, got {result1}\"\n\n    # Step 2: Part 2 of end token\n    delta2 = \"▁end｜>\"\n    current_text2 = current_text1 + delta2\n    previous_texts.append(current_text1)\n    result2 = parser.extract_tool_calls_streaming(previous_texts, current_text2, delta2)\n\n    # Should detect tool call now\n    expected = (None, \"get_current_weather\", {\"location\": \"上海\"})\n    assert (\n        result2 == expected\n    ), f\"Expected {expected} after split token join, got {result2}\"\n\n\ndef test_extract_tool_calls_invalid_json():\n    \"\"\"Test behavior with invalid JSON in tool calls.\"\"\"\n    parser = DeepseekV3_1ToolParser()\n\n    # Non-streaming\n    invalid_json_input = \"<｜tool▁calls▁begin｜><｜tool▁call▁begin｜>func<｜tool▁sep｜>{invalid_json<｜tool▁call▁end｜><｜tool▁calls▁end｜>\"\n    result = parser.extract_tool_calls(invalid_json_input)\n    # Should return raw content or handle gracefully (current implementation returns raw content in tuple)\n    assert result[0][0] is not None, \"Should return raw content for invalid JSON\"\n    assert result[0][1] is None\n\n    # Streaming\n    # If JSON is invalid, streaming should eventually return None or log error, but not crash\n    # Note: Current implementation swallows invalid JSON in streaming loop and returns None\n    previous = [\"\"]\n    current = \"<｜tool▁calls▁begin｜>func<｜tool▁sep｜>{invalid_json<｜tool▁call▁end｜>\"\n    delta = \"<｜tool▁call▁end｜>\"\n\n    result_stream = parser.extract_tool_calls_streaming(previous, current, delta)\n    # Since JSON is invalid, it won't extract. It returns None (swallowing content).\n    assert result_stream is None\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/tests/test_deepseek_v3_tool_parser.py",
    "content": "from ..deepseek_v3_tool_parser import DeepseekV3ToolParser\n\n\ndef test_tool_parser_extract_calls_without_thinking():\n    parser = DeepseekV3ToolParser()\n\n    test_case = '```json\\n{\"name\": \"get_weather_and_time\", \"parameters\": {\"location\": \"Hangzhou\"}}\\n```'\n\n    expected_results = [(None, \"get_weather_and_time\", {\"location\": \"Hangzhou\"})]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results, f\"Expected {expected_results}, but got {result}\"\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/tests/test_glm4_tool_parser.py",
    "content": "from ..glm4_tool_parser import Glm4ToolParser\n\n\ndef test_tool_parser_extract_calls():\n    parser = Glm4ToolParser()\n\n    test_case = {\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\n\n    expected_results = [(None, \"get_current_weather\", {\"location\": \"上海\"})]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results, f\"Expected {expected_results}, but got {result}\"\n\n\ndef test_tool_parser_extract_calls_streaming():\n    parser = Glm4ToolParser()\n\n    test_case = {\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\n\n    expected_results = (None, \"get_current_weather\", {\"location\": \"上海\"})\n\n    result = parser.extract_tool_calls_streaming(None, test_case, test_case)\n\n    assert result == expected_results, f\"Expected {expected_results}, but got {result}\"\n"
  },
  {
    "path": "xinference/model/llm/tool_parsers/tests/test_llama3_tool_parser.py",
    "content": ""
  },
  {
    "path": "xinference/model/llm/tool_parsers/tests/test_qwen_tool_parser.py",
    "content": "from ..qwen_tool_parser import QwenToolParser\n\n\ndef test_tool_parser_extract_calls_streaming_without_thinking_multi():\n    parser = QwenToolParser()\n\n    test_cases = [\n        # (previous_texts, current_text, delta_text)\n        ([\"<tool_call>\"], \"<tool_call>\\n\", \"\\n\"),\n        ([\"<tool_call>\\n\"], '<tool_call>\\n{\"', '{\"'),\n        (['<tool_call>\\n{\"'], '<tool_call>\\n{\"name', \"name\"),\n        (['<tool_call>\\n{\"name'], '<tool_call>\\n{\"name\":', '\":'),\n        (['<tool_cal>\\n{\"name\":'], '<tool_call>\\n{\"name\": \"', ' \"'),\n        (['<tool_call>\\n{\"name\": \"'], '<tool_call>\\n{\"name\": \"get', \"get\"),\n        (\n            ['<tool_call>\\n{\"name\": \"get'],\n            '<tool_call>\\n{\"name\": \"get_current',\n            \"_current\",\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current'],\n            '<tool_call>\\n{\"name\": \"get_current_weather',\n            \"_weather\",\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\",',\n            '\",',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\",'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"',\n            ' \"',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments',\n            \"arguments\",\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":',\n            '\":',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"',\n            ' {\"',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location',\n            \"location\",\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":',\n            '\":',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"',\n            ' \"',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海',\n            \"上海\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n',\n            '\"}}\\n',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n            \"</tool_call>\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n            \"\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n',\n            \"\\n\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"',\n            '{\"',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name',\n            \"name\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\":',\n            '\":',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\":'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"',\n            ' \"',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get',\n            \"get\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current',\n            \"_current\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather',\n            \"_weather\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\",',\n            '\",',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\",'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"',\n            ' \"',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments',\n            \"arguments\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":',\n            '\":',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"',\n            ' {\"',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location',\n            \"location\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":',\n            '\":',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"',\n            ' \"',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"北京',\n            \"北京\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"北京'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"北京\"}}\\n',\n            '\"}}\\n',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"北京\"}}\\n'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"北京\"}}\\n</tool_call>',\n            \"</tool_call>\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"北京\"}}\\n</tool_call>'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"北京\"}}\\n</tool_call>',\n            \"\",\n        ),\n    ]\n\n    expected_results = [\n        None,  # 案例1-5: 普通文本输出\n        None,\n        None,\n        None,\n        None,\n        None,  # 案例6-24: 工具调用构建中，返回None\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        (None, \"get_current_weather\", {\"location\": \"上海\"}),  # 案例25: 完整工具调用\n        None,  # 案例26: 空增量文本\n        None,  # 案例1-5: 普通文本输出\n        None,\n        None,\n        None,\n        None,\n        None,  # 案例6-24: 工具调用构建中，返回None\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        (None, \"get_current_weather\", {\"location\": \"北京\"}),  # 案例25: 完整工具调用\n        None,  # 案例26: 空增量文本\n    ]\n\n    for i, (previous_texts, current_text, delta_text) in enumerate(test_cases):\n        result = parser.extract_tool_calls_streaming(\n            previous_texts, current_text, delta_text\n        )\n        expected = expected_results[i]\n\n        assert result == expected, f\"Case {i} failed: {result} != {expected}\"\n\n\ndef test_tool_parser_extract_calls_streaming_without_thinking():\n    parser = QwenToolParser()\n\n    test_cases = [\n        # (previous_texts, current_text, delta_text)\n        ([\"<tool_call>\"], \"<tool_call>\\n\", \"\\n\"),\n        ([\"<tool_call>\\n\"], '<tool_call>\\n{\"', '{\"'),\n        (['<tool_call>\\n{\"'], '<tool_call>\\n{\"name', \"name\"),\n        (['<tool_call>\\n{\"name'], '<tool_call>\\n{\"name\":', '\":'),\n        (['<tool_call>\\n{\"name\":'], '<tool_call>\\n{\"name\": \"', ' \"'),\n        (['<tool_call>\\n{\"name\": \"'], '<tool_call>\\n{\"name\": \"get', \"get\"),\n        (\n            ['<tool_call>\\n{\"name\": \"get'],\n            '<tool_call>\\n{\"name\": \"get_current',\n            \"_current\",\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current'],\n            '<tool_call>\\n{\"name\": \"get_current_weather',\n            \"_weather\",\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\",',\n            '\",',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\",'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"',\n            ' \"',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments',\n            \"arguments\",\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":',\n            '\":',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"',\n            ' {\"',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location',\n            \"location\",\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":',\n            '\":',\n        ),\n        (\n            ['<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":'],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"',\n            ' \"',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海',\n            \"上海\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n',\n            '\"}}\\n',\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n            \"</tool_call>\",\n        ),\n        (\n            [\n                '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>'\n            ],\n            '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n            \"\",\n        ),\n    ]\n\n    expected_results = [\n        None,  # 案例1-5: 普通文本输出\n        None,\n        None,\n        None,\n        None,\n        None,  # 案例6-24: 工具调用构建中，返回None\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        (None, \"get_current_weather\", {\"location\": \"上海\"}),  # 案例25: 完整工具调用\n        None,  # 案例26: 空增量文本\n    ]\n\n    for i, (previous_texts, current_text, delta_text) in enumerate(test_cases):\n        result = parser.extract_tool_calls_streaming(\n            previous_texts, current_text, delta_text\n        )\n        expected = expected_results[i]\n\n        assert result == expected, f\"Case {i} failed: {result} != {expected}\"\n\n\ndef test_tool_parser_extract_calls_streaming_with_thinking():\n    parser = QwenToolParser()\n\n    test_cases = [\n        # (previous_texts, current_text, delta_text)\n        ([\"\"], \"<think>\", \"<think>\"),\n        ([\"<think>\"], \"<think>\\n\", \"\\n\"),\n        ([\"<think>\\n\"], \"<think>\\n好的\", \"好的\"),\n        ([\"<think>\\n好的\"], \"<think>\\n好的</think>\", \"</think>\"),\n        ([\"<think>\\n好的</think>\"], \"<think>\\n好的</think>\\n\\n\", \"\\n\\n\"),\n        (\n            [\"<think>\\n好的</think>\\n\\n\"],\n            \"<think>\\n好的</think>\\n\\n<tool_call>\",\n            \"<tool_call>\",\n        ),\n        (\n            [\"<think>\\n好的</think>\\n\\n<tool_call>\"],\n            \"<think>\\n好的</think>\\n\\n<tool_call>\\n\",\n            \"\\n\",\n        ),\n        (\n            [\"<think>\\n好的</think>\\n\\n<tool_call>\\n\"],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"',\n            '{\"',\n        ),\n        (\n            ['<think>\\n好的</think>\\n\\n<tool_call>\\n{\"'],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name',\n            \"name\",\n        ),\n        (\n            ['<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name'],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\":',\n            '\":',\n        ),\n        (\n            ['<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\":'],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"',\n            ' \"',\n        ),\n        (\n            ['<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"'],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get',\n            \"get\",\n        ),\n        (\n            ['<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get'],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current',\n            \"_current\",\n        ),\n        (\n            ['<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current'],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather',\n            \"_weather\",\n        ),\n        (\n            ['<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather'],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\",',\n            '\",',\n        ),\n        (\n            ['<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\",'],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"',\n            ' \"',\n        ),\n        (\n            ['<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"'],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments',\n            \"arguments\",\n        ),\n        (\n            [\n                '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments'\n            ],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":',\n            '\":',\n        ),\n        (\n            [\n                '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":'\n            ],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"',\n            ' {\"',\n        ),\n        (\n            [\n                '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"'\n            ],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location',\n            \"location\",\n        ),\n        (\n            [\n                '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location'\n            ],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":',\n            '\":',\n        ),\n        (\n            [\n                '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":'\n            ],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"',\n            ' \"',\n        ),\n        (\n            [\n                '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"'\n            ],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海',\n            \"上海\",\n        ),\n        (\n            [\n                '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海'\n            ],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n',\n            '\"}}\\n',\n        ),\n        (\n            [\n                '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n'\n            ],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n            \"</tool_call>\",\n        ),\n        (\n            [\n                '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>'\n            ],\n            '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n            \"\",\n        ),\n    ]\n\n    expected_results = [\n        (\"<think>\", None, None),  # 案例1-5: 普通文本输出\n        (\"\\n\", None, None),\n        (\"好的\", None, None),\n        (\"</think>\", None, None),\n        (\"\\n\\n\", None, None),\n        None,  # 案例6-24: 工具调用构建中，返回None\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        (None, \"get_current_weather\", {\"location\": \"上海\"}),  # 案例25: 完整工具调用\n        None,  # 案例26: 空增量文本\n    ]\n\n    for i, (previous_texts, current_text, delta_text) in enumerate(test_cases):\n        result = parser.extract_tool_calls_streaming(\n            previous_texts, current_text, delta_text\n        )\n        expected = expected_results[i]\n\n        assert result == expected, f\"Case {i} failed: {result} != {expected}\"\n\n\ndef test_tool_parser_extract_calls_streaming_with_parser():\n    parser = QwenToolParser()\n\n    test_cases = [\n        # (previous_texts, current_text, delta_text)\n        ([\"\"], \"\\n\\n\", \"\\n\\n\"),\n        ([\"\\n\\n\"], \"\\n\\n<tool_call>\", \"<tool_call>\"),\n        ([\"\\n\\n<tool_call>\"], \"\\n\\n<tool_call>\\n\", \"\\n\"),\n        ([\"\\n\\n<tool_call>\\n\"], '\\n\\n<tool_call>\\n{\"', '{\"'),\n        (['\\n\\n<tool_call>\\n{\"'], '\\n\\n<tool_call>\\n{\"name', \"name\"),\n        (['\\n\\n<tool_call>\\n{\"name'], '\\n\\n<tool_call>\\n{\"name\":', '\":'),\n        (['\\n\\n<tool_call>\\n{\"name\":'], '\\n\\n<tool_call>\\n{\"name\": \"', ' \"'),\n        (['\\n\\n<tool_call>\\n{\"name\": \"'], '\\n\\n<tool_call>\\n{\"name\": \"get', \"get\"),\n        (\n            ['\\n\\n<tool_call>\\n{\"name\": \"get'],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current',\n            \"_current\",\n        ),\n        (\n            ['\\n\\n<tool_call>\\n{\"name\": \"get_current'],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather',\n            \"_weather\",\n        ),\n        (\n            ['\\n\\n<tool_call>\\n{\"name\": \"get_current_weather'],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\",',\n            '\",',\n        ),\n        (\n            ['\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\",'],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"',\n            ' \"',\n        ),\n        (\n            ['\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"'],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments',\n            \"arguments\",\n        ),\n        (\n            ['\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments'],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":',\n            '\":',\n        ),\n        (\n            ['\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\":'],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"',\n            ' {\"',\n        ),\n        (\n            ['\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"'],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location',\n            \"location\",\n        ),\n        (\n            [\n                '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location'\n            ],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":',\n            '\":',\n        ),\n        (\n            [\n                '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\":'\n            ],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"',\n            ' \"',\n        ),\n        (\n            [\n                '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"'\n            ],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海',\n            \"上海\",\n        ),\n        (\n            [\n                '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海'\n            ],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n',\n            '\"}}\\n',\n        ),\n        (\n            [\n                '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n'\n            ],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n            \"</tool_call>\",\n        ),\n        (\n            [\n                '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>'\n            ],\n            '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>',\n            \"\",\n        ),\n    ]\n\n    expected_results = [\n        (\"\\n\\n\", None, None),\n        None,  # 案例6-24: 工具调用构建中，返回None\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        None,\n        (None, \"get_current_weather\", {\"location\": \"上海\"}),  # 案例25: 完整工具调用\n        None,  # 案例26: 空增量文本\n    ]\n\n    for i, (previous_texts, current_text, delta_text) in enumerate(test_cases):\n        result = parser.extract_tool_calls_streaming(\n            previous_texts, current_text, delta_text\n        )\n        expected = expected_results[i]\n\n        assert result == expected, f\"Case {i} failed: {result} != {expected}\"\n\n\ndef test_tool_parser_extract_calls_without_thinking_multi():\n    parser = QwenToolParser()\n\n    test_case = '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call><tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"北京\"}}\\n</tool_call>'\n\n    expected_results = [\n        (None, \"get_current_weather\", {\"location\": \"上海\"}),\n        (None, \"get_current_weather\", {\"location\": \"北京\"}),\n    ]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results, f\"Case failed: {result} != {expected_results}\"\n\n\ndef test_tool_parser_extract_calls_without_thinking():\n    parser = QwenToolParser()\n\n    test_case = '<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>'\n\n    expected_results = [(None, \"get_current_weather\", {\"location\": \"上海\"})]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results, f\"Case failed: {result} != {expected_results}\"\n\n\ndef test_tool_parser_extract_calls_with_thinking():\n    parser = QwenToolParser()\n\n    test_case = '<think>\\n好的</think>\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>'\n\n    expected_results = [\n        (\"<think>\\n好的</think>\", None, None),\n        (\"\\n\\n\", None, None),\n        (None, \"get_current_weather\", {\"location\": \"上海\"}),\n    ]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results\n\n\ndef test_tool_parser_extract_calls_with_parser():\n    parser = QwenToolParser()\n\n    test_case = '\\n\\n<tool_call>\\n{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"上海\"}}\\n</tool_call>'\n\n    expected_results = [\n        (\"\\n\\n\", None, None),\n        (None, \"get_current_weather\", {\"location\": \"上海\"}),\n    ]\n\n    result = parser.extract_tool_calls(test_case)\n\n    assert result == expected_results, f\"Case failed: {result} != {expected_results}\"\n"
  },
  {
    "path": "xinference/model/llm/transformers/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Automatically scan and import all python scripts at the same level\nimport importlib\nimport os\nimport pkgutil\nfrom typing import Dict\n\n\ndef import_submodules(package_path: str, package_name: str, globals_dict: Dict) -> None:\n    \"\"\"\n    Recursively import all classes in submodules and subpackages\n    \"\"\"\n    for _, module_name, is_pkg in pkgutil.iter_modules([package_path]):\n        full_module_name = f\"{package_name}.{module_name}\"\n\n        if module_name.startswith(\n            (\"_\", \"test_\")\n        ):  # Skip the modules which start with \"_\" or \"test_\"\n            continue\n\n        module = importlib.import_module(full_module_name)\n        globals_dict[module_name] = module\n\n        # If it's a pkg, recursive processing\n        if is_pkg:\n            subpackage_path = os.path.join(package_path, module_name)\n            import_submodules(subpackage_path, full_module_name, globals_dict)\n\n\n# Get the path and name of the current package\n__path__ = [os.path.dirname(os.path.abspath(__file__))]\n__package__ = __name__\n\n# Automatic import of all sub-modules and sub-packages\nimport_submodules(__path__[0], __package__, globals())\n"
  },
  {
    "path": "xinference/model/llm/transformers/chatglm.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport json\nimport logging\nimport typing\nimport uuid\nfrom threading import Thread\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union\n\nimport torch\n\nfrom ....types import ChatCompletion, ChatCompletionChunk, LoRA, PytorchGenerateConfig\nfrom ...scheduler.request import InferenceRequest\nfrom ..core import chat_context_var\nfrom ..llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ..utils import (\n    GLM4_TOOL_CALL_FAMILY,\n    generate_chat_completion,\n    generate_completion_chunk,\n)\nfrom .core import PytorchChatModel, PytorchModelConfig, register_non_default_model\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"GlmForCausalLM\")\nclass ChatglmPytorchChatModel(PytorchChatModel):\n    GLM4_ARCHITECTURES = {\"GlmForCausalLM\", \"Glm4ForCausalLM\", \"Glm4MoeForCausalLM\"}\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        pytorch_model_config: Optional[PytorchModelConfig] = None,\n        peft_model: Optional[List[LoRA]] = None,\n    ):\n        super().__init__(\n            model_uid,\n            model_family,\n            model_path,\n            pytorch_model_config=pytorch_model_config,\n            peft_model=peft_model,\n        )\n\n    def _get_model_class(self):\n        from transformers import AutoModel\n\n        return AutoModel\n\n    def _load_model(self, **kwargs):\n        try:\n            from transformers import AutoModelForCausalLM, AutoTokenizer\n        except ImportError:\n            error_message = \"Failed to import module 'transformers'\"\n            installation_guide = [\n                \"Please make sure 'transformers' is installed. \",\n                \"You can install it by `pip install transformers`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        tokenizer = AutoTokenizer.from_pretrained(\n            self.model_path,\n            trust_remote_code=kwargs[\"trust_remote_code\"],\n            encode_special_tokens=True,\n            revision=kwargs[\"revision\"],\n        )\n        model = AutoModelForCausalLM.from_pretrained(\n            self.model_path,\n            **kwargs,\n        )\n        return model, tokenizer\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"pytorch\", \"fp4\"]:\n            return False, \"ChatGLM transformer only supports pytorch/fp4 format\"\n        if not llm_family.has_architecture(*cls.GLM4_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not GLM4\",\n            )\n        if \"chat\" not in llm_family.model_ability:\n            return False, \"ChatGLM transformer requires chat ability\"\n        return True\n\n    def _handle_tools(self, messages, generate_config):\n        \"\"\"Convert openai tools to ChatGLM tools.\"\"\"\n        if self.model_family.model_name not in GLM4_TOOL_CALL_FAMILY:\n            return None\n        if generate_config is None:\n            return None\n        tools = generate_config.pop(\"tools\", None)\n        if tools is None:\n            return None\n        # Convert an iterable to a list\n        tools = list(tools)\n        tool_choice = generate_config.pop(\"tool_choice\", \"none\")\n        messages[:] = self._process_messages(\n            messages, tools=tools, tool_choice=tool_choice\n        )\n        return tools\n\n    @staticmethod\n    def _process_messages(messages, tools=None, tool_choice=\"none\"):\n        # This method is adapted from https://github.com/THUDM/GLM-4/blob/main/basic_demo/openai_api_server.py\n        _messages = messages\n        processed_messages = []\n        msg_has_sys = False\n\n        def _filter_tools(_tool_choice, _tools):\n            function_name = _tool_choice.get(\"function\", {}).get(\"name\", None)\n            if not function_name:\n                return []\n            filtered_tools = [\n                tool\n                for tool in _tools\n                if tool.get(\"function\", {}).get(\"name\") == function_name\n            ]\n            return filtered_tools\n\n        if tool_choice != \"none\":\n            if isinstance(tool_choice, dict):\n                tools = _filter_tools(tool_choice, tools)\n\n        if tools:\n            processed_messages.append(\n                {\"role\": \"system\", \"content\": None, \"tools\": tools}\n            )\n            msg_has_sys = True\n\n        if isinstance(tool_choice, dict) and tools:\n            processed_messages.append(\n                {\n                    \"role\": \"assistant\",\n                    \"metadata\": tool_choice[\"function\"][\"name\"],\n                    \"content\": \"\",\n                }\n            )\n\n        for m in _messages:\n            role, content = m[\"role\"], m[\"content\"] or \"\"\n            tool_calls = m.get(\"tool_calls\")\n\n            if role == \"function\":\n                processed_messages.append({\"role\": \"observation\", \"content\": content})\n            elif role == \"tool\":\n                processed_messages.append(\n                    {\"role\": \"observation\", \"content\": content, \"function_call\": True}\n                )\n            elif role == \"assistant\":\n                if tool_calls:\n                    for tool_call in tool_calls:\n                        processed_messages.append(\n                            {\n                                \"role\": \"assistant\",\n                                \"metadata\": tool_call.get(\"function\", {}).get(\"name\"),\n                                \"content\": tool_call.get(\"function\", {}).get(\n                                    \"arguments\"\n                                ),\n                            }\n                        )\n                else:\n                    for response in content.split(\"\\n\"):\n                        if \"\\n\" in response:\n                            metadata, sub_content = response.split(\"\\n\", maxsplit=1)\n                        else:\n                            metadata, sub_content = \"\", response\n                        processed_messages.append(\n                            {\n                                \"role\": role,\n                                \"metadata\": metadata,\n                                \"content\": sub_content.strip(),\n                            }\n                        )\n            else:\n                if role == \"system\" and msg_has_sys:\n                    msg_has_sys = False\n                    continue\n                processed_messages.append({\"role\": role, \"content\": content})\n\n        if not tools or tool_choice == \"none\":\n            for m in _messages:\n                if m[\"role\"] == \"system\":\n                    processed_messages.insert(\n                        0, {\"role\": m[\"role\"], \"content\": m[\"content\"]}\n                    )\n                    break\n        return processed_messages\n\n    @staticmethod\n    @typing.no_type_check\n    def _process_response_non_streaming(\n        output: str, tools: Union[Dict, List[Dict]] = None, use_tool: bool = False\n    ) -> Union[str, dict]:\n        \"\"\"\n        Copied from https://github.com/THUDM/GLM-4/blob/main/basic_demo/openai_api_server.py#L150\n        \"\"\"\n        import re\n\n        lines = output.strip().split(\"\\n\")\n        arguments_json = None\n        special_tools = [\"cogview\", \"simple_browser\"]\n        tools = {tool[\"function\"][\"name\"] for tool in tools} if tools else {}\n\n        # 这是一个简单的工具比较函数，不能保证拦截所有非工具输出的结果，比如参数未对齐等特殊情况。\n        ##TODO 如果你希望做更多判断，可以在这里进行逻辑完善。\n\n        if len(lines) >= 2 and lines[1].startswith(\"{\"):\n            function_name = lines[0].strip()\n            arguments = \"\\n\".join(lines[1:]).strip()\n            if function_name in tools or function_name in special_tools:\n                try:\n                    arguments_json = json.loads(arguments)\n                    is_tool_call = True\n                except json.JSONDecodeError:\n                    is_tool_call = function_name in special_tools\n\n                if is_tool_call and use_tool:\n                    content = {\n                        \"name\": function_name,\n                        \"arguments\": json.dumps(\n                            (\n                                arguments_json\n                                if isinstance(arguments_json, dict)\n                                else arguments\n                            ),\n                            ensure_ascii=False,\n                        ),\n                    }\n                    if function_name == \"simple_browser\":\n                        search_pattern = re.compile(\n                            r'search\\(\"(.+?)\"\\s*,\\s*recency_days\\s*=\\s*(\\d+)\\)'\n                        )\n                        match = search_pattern.match(arguments)\n                        if match:\n                            content[\"arguments\"] = json.dumps(\n                                {\n                                    \"query\": match.group(1),\n                                    \"recency_days\": int(match.group(2)),\n                                },\n                                ensure_ascii=False,\n                            )\n                    elif function_name == \"cogview\":\n                        content[\"arguments\"] = json.dumps(\n                            {\"prompt\": arguments}, ensure_ascii=False\n                        )\n\n                    return content\n        return output.strip()\n\n    @staticmethod\n    def _process_response_streaming(output, tools, end=False):\n        # Copy from https://huggingface.co/THUDM/glm-4-9b-chat/blob/main/modeling_chatglm.py\n        content = \"\"\n        if not tools and end:\n            return None\n        for response in output.split(\"<|assistant|>\"):\n            if \"\\n\" in response:\n                metadata, content = response.split(\"\\n\", maxsplit=1)\n            else:\n                metadata, content = \"\", response\n            if not metadata.strip():\n                if tools and any(t.startswith(response) for t in tools) and not end:\n                    # Waiting for tool call complete.\n                    return None\n                content = content.strip()\n                content = content.replace(\"[[训练时间]]\", \"2023年\")\n            else:\n                if tools and metadata in tools and not end:\n                    return None\n                metadata = metadata.strip()\n                if tools and metadata in tools and end:\n                    try:\n                        parameters = json.loads(content)\n                        content = {\"name\": metadata.strip(), \"arguments\": parameters}\n                    except json.JSONDecodeError:\n                        content = {\"name\": metadata.strip(), \"content\": content}\n                else:\n                    content = {\"name\": metadata.strip(), \"content\": content}\n        return content\n\n    @torch.inference_mode()\n    def _stream_chat(self, inputs, tools, **kwargs):\n        from transformers import TextIteratorStreamer\n\n        streamer = TextIteratorStreamer(\n            self._tokenizer, skip_prompt=True, skip_special_tokens=True\n        )\n        tools = {tool[\"function\"][\"name\"] for tool in tools} if tools else {}\n        generation_kwargs = dict(inputs, streamer=streamer)\n        generation_kwargs.update(kwargs)\n        thread = Thread(target=self._model.generate, kwargs=generation_kwargs)\n        thread.start()\n\n        response = \"\"\n        for token in streamer:\n            response += token\n            if response and response[-1] != \"�\":\n                new_response = self._process_response_streaming(\n                    response, tools, end=False\n                )\n                if new_response is None:\n                    continue\n                yield new_response\n        if tools:\n            new_response = self._process_response_streaming(response, tools, end=True)\n            if new_response:\n                yield new_response\n\n    @staticmethod\n    def _get_generate_kwargs(generate_config):\n        kwargs: Dict[str, Any] = {}  # type: ignore\n        generate_config = generate_config or {}\n        temperature = generate_config.get(\"temperature\")\n        if temperature is not None:\n            kwargs[\"temperature\"] = float(temperature)\n        top_p = generate_config.get(\"top_p\")\n        if top_p is not None:\n            kwargs[\"top_p\"] = float(top_p)\n        max_new_tokens = generate_config.get(\"max_tokens\")\n        if max_new_tokens is not None:\n            kwargs[\"max_new_tokens\"] = int(max_new_tokens)\n        else:\n            kwargs[\"max_new_tokens\"] = 1024\n        do_sample = generate_config.get(\"do_sample\")\n        if do_sample is not None:\n            kwargs[\"do_sample\"] = bool(do_sample)\n        top_k = generate_config.get(\"top_k\")\n        if top_k is not None:\n            kwargs[\"top_k\"] = top_k\n        repetition_penalty = generate_config.get(\"repetition_penalty\")\n        if repetition_penalty is not None:\n            kwargs[\"repetition_penalty\"] = repetition_penalty\n        return kwargs\n\n    def chat(  # type: ignore\n        self,\n        messages: List[Dict],\n        generate_config: Optional[PytorchGenerateConfig] = None,\n    ) -> Union[ChatCompletion, Iterator[ChatCompletionChunk]]:\n        generate_config = generate_config or {}\n        kwargs: Dict[str, Any] = self._get_generate_kwargs(generate_config)\n        tools = self._handle_tools(messages, generate_config)\n        has_tools = tools is not None\n        stream = generate_config.get(\"stream\", False)\n        stream_options = generate_config.pop(\"stream_options\", None)\n        include_usage = (\n            stream_options[\"include_usage\"]\n            if isinstance(stream_options, dict)\n            else False\n        )\n        inputs = self._tokenizer.apply_chat_template(\n            messages,\n            return_tensors=\"pt\",\n            chat_template=self.model_family.chat_template,\n            add_generation_prompt=True,\n            return_dict=True,\n        )\n        inputs = inputs.to(self._model.device)\n\n        if not stream:\n            with torch.no_grad():\n                outputs = self._model.generate(**inputs, **kwargs)\n                outputs = outputs[:, inputs[\"input_ids\"].shape[1] :]\n                response = self._tokenizer.decode(outputs[0], skip_special_tokens=True)\n                # In some cases, the response starts with `\\n`\n                if response.startswith(\"\\n\"):\n                    response = response[1:]\n            if has_tools:\n                function_call = self._process_response_non_streaming(\n                    response, tools, use_tool=True\n                )\n                return self._post_process_completion(\n                    self.model_family, self.model_uid, function_call\n                )\n            else:\n                return generate_chat_completion(self.model_uid, response)\n        else:\n\n            def _stream_generator():\n                last_chunk_text_length = 0\n                chunk_id = \"chat-\" + str(uuid.uuid1())\n                prompt_tokens, completion_tokens, total_tokens = 0, 0, 0\n                prompt_tokens = len(inputs[\"input_ids\"][0])\n                for chunk_text in self._stream_chat(inputs, tools, **kwargs):\n                    if tools and isinstance(chunk_text, dict):\n                        yield self._post_process_completion_chunk(\n                            self.model_family, self.model_uid, chunk_text\n                        )\n                        return\n                    completion_tokens = completion_tokens + 1\n                    total_tokens = prompt_tokens + completion_tokens\n                    chunk_text = chunk_text[last_chunk_text_length:]\n                    last_chunk_text_length += len(chunk_text)\n                    yield generate_completion_chunk(\n                        chunk_text,\n                        finish_reason=None,\n                        chunk_id=chunk_id,\n                        model_uid=self.model_uid,\n                        prompt_tokens=prompt_tokens,\n                        completion_tokens=completion_tokens,\n                        total_tokens=total_tokens,\n                    )\n                yield generate_completion_chunk(\n                    None,\n                    finish_reason=\"stop\",\n                    chunk_id=chunk_id,\n                    model_uid=self.model_uid,\n                    prompt_tokens=prompt_tokens,\n                    completion_tokens=completion_tokens,\n                    total_tokens=total_tokens,\n                    has_choice=True,\n                    has_content=False,\n                )\n                if include_usage:\n                    yield generate_completion_chunk(\n                        None,\n                        finish_reason=None,\n                        chunk_id=chunk_id,\n                        model_uid=self.model_uid,\n                        prompt_tokens=prompt_tokens,\n                        completion_tokens=completion_tokens,\n                        total_tokens=total_tokens,\n                        has_choice=False,\n                    )\n\n            return self._to_chat_completion_chunks(_stream_generator())\n\n    def prepare_sanitize_generate_config(self, req: InferenceRequest):\n        \"\"\"\n        Set temperature and top_p to 0.8 by default\n        \"\"\"\n        raw_config = req.inference_kwargs.get(\"raw_params\", {})\n        temperature = raw_config.get(\"temperature\", None)\n        if temperature is None:\n            raw_config[\"temperature\"] = 0.8\n        top_p = raw_config.get(\"top_p\", None)\n        if top_p is None:\n            raw_config[\"top_p\"] = 0.8\n\n        return raw_config\n\n    def prepare_batch_inference(self, req_list: List[InferenceRequest]):\n        super(PytorchChatModel, self).prepare_batch_inference(req_list)\n        for r in req_list:\n            try:\n                if not r.stopped and r.is_prefill:\n                    tools = r.generate_config.get(\"tools\", None)\n                    tools = list(tools) if tools is not None else None\n                    tool_choice = r.generate_config.get(\"tool_choice\", \"none\")\n\n                    chat_template_kwargs = (\n                        self._get_chat_template_kwargs_from_generate_config(\n                            r.generate_config, self.reasoning_parser\n                        )\n                        or {}\n                    )\n                    chat_context_var.set(chat_template_kwargs)\n                    full_context_kwargs = chat_template_kwargs.copy()\n                    r.prompt = self._process_messages(\n                        r.prompt, tools=tools, tool_choice=tool_choice\n                    )\n                    assert isinstance(\n                        r.prompt, list\n                    ), \"r.prompt must be a list after processing\"\n                    r.full_prompt = self.get_full_context(\n                        r.prompt,\n                        self.model_family.chat_template,  # type: ignore\n                        tokenizer=self._tokenizer,\n                        **full_context_kwargs,\n                    )\n                    if tools:\n                        r.tools = tools\n            except Exception as e:\n                logger.exception(f\"prepare inference error with {e}\")\n                r.stopped = True\n                r.error_msg = str(e)\n\n    def handle_chat_result_non_streaming(self, req: InferenceRequest):\n        if req.tools:\n            response = req.completion[0][\"choices\"][0][\"text\"]\n            usage = req.completion[0][\"usage\"]\n            function_call = self._process_response_non_streaming(\n                response, req.tools, use_tool=True\n            )\n            req.completion[0] = self._post_process_completion(\n                self.model_family, self.model_uid, function_call\n            )\n            req.completion[0][\"usage\"] = usage\n        else:\n            req.completion[0] = self._to_chat_completion(req.completion[0])\n\n    def handle_chat_result_streaming(self, req: InferenceRequest):\n        results = []\n        tools = {tool[\"function\"][\"name\"] for tool in req.tools} if req.tools else {}\n        response = \"\".join(req.outputs)\n        eos_pos = response.find(\"<eos_stream>\")\n        if eos_pos != -1:\n            response = response[:eos_pos]\n\n        if \"<bos_stream>\" in req.completion:\n            bos_pos = req.completion.index(\"<bos_stream>\")\n            results.extend(\n                self._get_first_chat_completion_chunk(req.completion[bos_pos + 1])\n            )\n\n        if req.stopped:\n            if tools:\n                new_response = self._process_response_streaming(\n                    response, tools, end=True\n                )\n                if new_response:\n                    if isinstance(new_response, dict):  # tool call case\n                        chunk_id = [\n                            c for c in req.completion if not isinstance(c, str)\n                        ][0][\"id\"]\n                        results.append(\n                            self._post_process_completion_chunk(\n                                self.model_family,\n                                self.model_uid,\n                                new_response,\n                                chunk_id=chunk_id,\n                            )\n                        )\n                    else:  # normal case\n                        for c in req.completion:\n                            if c == \"<bos_stream>\":\n                                continue\n                            elif c == \"<eos_stream>\":\n                                break\n                            else:\n                                results.append(\n                                    self._to_chat_completion_chunk(\n                                        c, ensure_role=not results\n                                    )\n                                )\n            else:\n                for c in req.completion:\n                    if c == \"<bos_stream>\":\n                        continue\n                    elif c == \"<eos_stream>\":\n                        break\n                    else:\n                        results.append(\n                            self._to_chat_completion_chunk(c, ensure_role=not results)\n                        )\n        else:\n            if response and response[-1] != \"�\":\n                new_response = self._process_response_streaming(\n                    response, tools, end=False\n                )\n                if new_response is not None:  # normal case\n                    for c in req.completion:\n                        if c == \"<bos_stream>\":\n                            continue\n                        results.append(\n                            self._to_chat_completion_chunk(c, ensure_role=not results)\n                        )\n\n        if req.stopped and req.include_usage:\n            results.append(self._get_final_chat_completion_chunk(req.completion[-1]))\n        req.completion = results\n"
  },
  {
    "path": "xinference/model/llm/transformers/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport json\nimport logging\nimport os\nfrom functools import lru_cache\nfrom typing import Any, Dict, Iterable, Iterator, List, Optional, Set, Tuple, Union\n\nimport torch\n\nfrom ....constants import XINFERENCE_MAX_TOKENS\nfrom ....device_utils import (\n    get_device_preferred_dtype,\n    gpu_count,\n    is_hf_accelerate_supported,\n)\nfrom ....types import (\n    ChatCompletion,\n    ChatCompletionChunk,\n    CompletionChoice,\n    CompletionChunk,\n    CreateCompletionTorch,\n    LoRA,\n    PytorchGenerateConfig,\n    PytorchModelConfig,\n)\nfrom ...scheduler.request import InferenceRequest\nfrom ...utils import check_dependency_available, select_device\nfrom ..core import LLM, chat_context_var\nfrom ..llm_family import LLMFamilyV2, LLMSpecV1\nfrom ..utils import (\n    DEEPSEEK_TOOL_CALL_FAMILY,\n    LLAMA3_TOOL_CALL_FAMILY,\n    QWEN_TOOL_CALL_FAMILY,\n    ChatModelMixin,\n)\nfrom .utils import (\n    _get_pad_param,\n    convert_to_cache_cls,\n    get_context_length,\n    get_max_src_len,\n    pad_prefill_tokens,\n)\n\nlogger = logging.getLogger(__name__)\n\n# !!!!! Do not add model_name to this list; register architectures via `register_non_default_model` instead!\nNON_DEFAULT_MODEL_LIST: List[str] = []\n\n\n# Define the decorator to support multiple names registration\ndef register_non_default_model(*architectures: str):\n    \"\"\"\n    Decorator for registering non-default model architectures.\n\n    Args:\n        *architectures (str): One or more architecture names to be treated as non-default.\n\n    Returns:\n        A decorator function that adds the provided model names to the NON_DEFAULT_MODEL_LIST.\n    \"\"\"\n\n    def decorator(cls):\n        \"\"\"\n        Inner decorator function that modifies the class by registering model names.\n\n        Args:\n            cls: The class to be decorated.\n\n        Returns:\n            The original class after registering the model names.\n        \"\"\"\n        for name in architectures:\n            if name not in NON_DEFAULT_MODEL_LIST:\n                NON_DEFAULT_MODEL_LIST.append(name)\n        return cls\n\n    return decorator\n\n\nclass PytorchModel(LLM):\n    allow_batch = True\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        pytorch_model_config: Optional[PytorchModelConfig] = None,\n        peft_model: Optional[List[LoRA]] = None,\n    ):\n        super().__init__(model_uid, model_family, model_path)\n        self._use_fast_tokenizer = True\n        self._pytorch_model_config: PytorchModelConfig = self._sanitize_model_config(\n            pytorch_model_config\n        )\n        self._context_length: Optional[int] = None\n        self._peft_model = peft_model\n\n    def _sanitize_model_config(\n        self, pytorch_model_config: Optional[PytorchModelConfig]\n    ) -> PytorchModelConfig:\n        if pytorch_model_config is None:\n            pytorch_model_config = PytorchModelConfig()\n        pytorch_model_config.setdefault(\"revision\", self.model_spec.model_revision)\n        pytorch_model_config.setdefault(\"gptq_ckpt\", None)\n        pytorch_model_config.setdefault(\"gptq_wbits\", 16)\n        pytorch_model_config.setdefault(\"gptq_groupsize\", -1)\n        pytorch_model_config.setdefault(\"gptq_act_order\", False)\n        pytorch_model_config.setdefault(\"device\", \"auto\")\n        pytorch_model_config.setdefault(\"trust_remote_code\", True)\n        pytorch_model_config.setdefault(\"max_num_seqs\", 16)\n        pytorch_model_config.setdefault(\"enable_tensorizer\", False)\n        pytorch_model_config.setdefault(\"reasoning_content\", False)\n        pytorch_model_config.setdefault(\"quantization_config\", {})\n        return pytorch_model_config\n\n    def _sanitize_generate_config(\n        self,\n        generate_config: Optional[PytorchGenerateConfig],\n    ) -> PytorchGenerateConfig:\n        if generate_config is None:\n            generate_config = PytorchGenerateConfig(**CreateCompletionTorch().dict())\n        else:\n            # Validate generate_config and fill default values to the generate config.\n            generate_config = PytorchGenerateConfig(\n                **CreateCompletionTorch(**generate_config).dict()\n            )\n        if not generate_config.get(\"max_tokens\") and XINFERENCE_MAX_TOKENS:\n            generate_config[\"max_tokens\"] = XINFERENCE_MAX_TOKENS  # type: ignore\n        generate_config[\"model\"] = self.model_uid\n        return generate_config\n\n    def _check_tensorizer_integrity(self):\n        if not self._pytorch_model_config.get(\"enable_tensorizer\"):\n            return False\n\n        from .tensorizer_utils import check_tensorizer_integrity\n\n        integrity = check_tensorizer_integrity(\n            self.model_path,\n            [component[0] for component in self._get_components()],\n        )\n        logger.info(f\"Tensorizer files integrity: {integrity} {self.model_uid}\")\n        return integrity\n\n    def _load_tensorizer(self, **kwargs):\n        enable_tensorizer = self._pytorch_model_config.get(\"enable_tensorizer\", None)\n        if enable_tensorizer:\n            from .tensorizer_utils import load_from_tensorizer\n\n            component_metadata = [\n                (name, type, kwargs)\n                for name, _, type, kwargs in self._get_components(**kwargs)\n            ]\n            model, tokenizer = load_from_tensorizer(\n                self.model_path, component_metadata, self._get_model_class(), **kwargs\n            )\n            return model, tokenizer\n\n    def _save_tensorizer(self, **kwargs):\n        enable_tensorizer = self._pytorch_model_config.get(\"enable_tensorizer\", None)\n        if enable_tensorizer:\n            from .tensorizer_utils import save_to_tensorizer\n\n            components = [(name, obj) for name, obj, _, _ in self._get_components()]\n            save_to_tensorizer(self.model_path, self._model, components, **kwargs)\n\n    def _get_model_class(self):\n        from transformers import AutoModelForCausalLM\n\n        return AutoModelForCausalLM\n\n    def _get_components(self, **kwargs):\n        from transformers import AutoTokenizer\n\n        return [\n            (\n                \"tokenizer\",\n                getattr(self, \"_tokenizer\", None),\n                AutoTokenizer,\n                {\n                    \"use_fast\": self._use_fast_tokenizer,\n                    \"trust_remote_code\": kwargs.get(\"trust_remote_code\", True),\n                    \"revision\": kwargs.get(\"revision\"),\n                    \"code_revision\": kwargs.get(\"code_revision\", None),\n                },\n            )\n        ]\n\n    def _load_model(self, **kwargs):\n        try:\n            from transformers import AutoModelForCausalLM, AutoTokenizer\n        except ImportError:\n            error_message = \"Failed to import module 'transformers'\"\n            installation_guide = [\n                \"Please make sure 'transformers' is installed. \",\n                \"You can install it by `pip install transformers`\\n\",\n            ]\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        tokenizer = AutoTokenizer.from_pretrained(\n            self.model_path,\n            use_fast=self._use_fast_tokenizer,\n            trust_remote_code=kwargs[\"trust_remote_code\"],\n            revision=kwargs[\"revision\"],\n        )\n        model = AutoModelForCausalLM.from_pretrained(\n            self.model_path,\n            low_cpu_mem_usage=True,\n            **kwargs,\n        )\n\n        return model, tokenizer\n\n    def _apply_lora(self):\n        if self._peft_model is not None:\n            try:\n                from peft import PeftModel\n            except ImportError:\n                raise ImportError(\n                    f\"Failed to import 'PeftModel' from 'peft'. Please make sure 'peft' is installed.\\n\\n\"\n                )\n\n            for i, peft_model in enumerate(self._peft_model):\n                if i == 0:\n                    self._model = PeftModel.from_pretrained(\n                        self._model,\n                        peft_model.local_path,\n                        adapter_name=peft_model.lora_name,\n                    )\n                else:\n                    self._model.load_adapter(\n                        peft_model.local_path, adapter_name=peft_model.lora_name\n                    )\n                logger.info(\n                    f\"PEFT adaptor '{peft_model.lora_name}' successfully loaded for model '{self.model_uid}'.\"\n                )\n\n    def apply_bnb_quantization(\n        self, kwargs: Optional[Dict[str, Any]] = None\n    ) -> Dict[str, Any]:\n        _kwargs = kwargs if kwargs is not None else {}\n        quantization_config = (\n            self._pytorch_model_config.get(\"quantization_config\") or {}\n        )\n        if quantization_config:\n            # If `load_in_4bit` is enabled, apply default quantization presets.\n            if quantization_config.get(\"load_in_4bit\", False):\n                quantization_config.setdefault(\"bnb_4bit_compute_dtype\", torch.float16)\n                quantization_config.setdefault(\"bnb_4bit_use_double_quant\", True)\n                quantization_config.setdefault(\n                    \"llm_int8_skip_modules\",\n                    [\n                        \"lm_head\",\n                        \"encoder\",\n                        \"EncDecAttention\",\n                    ],\n                )\n\n            from transformers import BitsAndBytesConfig\n\n            _kwargs[\"quantization_config\"] = BitsAndBytesConfig(**quantization_config)\n        return _kwargs\n\n    def apply_fp_quantization(\n        self, kwargs: Optional[Dict[str, Any]] = None\n    ) -> Dict[str, Any]:\n        if self.model_spec.model_format != \"fp4\":\n            return kwargs if kwargs is not None else {}\n\n        _kwargs = kwargs if kwargs is not None else {}\n        quantization_config = (\n            self._pytorch_model_config.get(\"quantization_config\") or {}\n        )\n\n        try:\n            from transformers import FPQuantConfig\n        except ImportError as exc:\n            raise ImportError(\n                \"FP4 quantization requires `transformers` with FPQuantConfig support.\"\n            ) from exc\n\n        if isinstance(quantization_config, FPQuantConfig):\n            fp_config = quantization_config\n        elif isinstance(quantization_config, dict):\n            fp_kwargs = dict(quantization_config)\n            fp_kwargs.setdefault(\"pseudoquantization\", True)\n            if \"forward_dtype\" not in fp_kwargs:\n                model_quant = (self.model_spec.quantization or \"\").lower()\n                if model_quant in (\"mxfp4\", \"nvfp4\"):\n                    fp_kwargs[\"forward_dtype\"] = model_quant\n            fp_config = FPQuantConfig(**fp_kwargs)\n        else:\n            raise ValueError(\n                \"fp4 quantization_config must be a dict or FPQuantConfig instance\"\n            )\n\n        _kwargs[\"quantization_config\"] = fp_config\n        return _kwargs\n\n    def apply_quantization_config(\n        self, kwargs: Optional[Dict[str, Any]] = None\n    ) -> Dict[str, Any]:\n        if self.model_spec.model_format == \"fp4\":\n            return self.apply_fp_quantization(kwargs)\n        if self.model_spec.model_format == \"pytorch\":\n            return self.apply_bnb_quantization(kwargs)\n        return kwargs if kwargs is not None else {}\n\n    def load(self):\n        num_gpus = gpu_count()\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        self._pytorch_model_config[\"device\"] = select_device(device)\n        self._device = self._pytorch_model_config[\"device\"]\n\n        kwargs = {}\n\n        torch_dtype = self._pytorch_model_config.get(\"torch_dtype\")\n        if torch_dtype is not None:\n            if isinstance(torch_dtype, str) and torch_dtype != \"auto\":\n                torch_dtype = getattr(torch, torch_dtype)\n            kwargs[\"torch_dtype\"] = torch_dtype\n        else:\n            dtype = get_device_preferred_dtype(self._device)\n\n            if dtype is not None:\n                kwargs[\"torch_dtype\"] = dtype\n            else:\n                raise ValueError(f\"Device {self._device} is not supported in temporary\")\n\n        if self.model_spec.model_format == \"fp4\":\n            kwargs[\"torch_dtype\"] = torch.bfloat16\n\n        kwargs[\"revision\"] = self._pytorch_model_config.get(\n            \"revision\", self.model_spec.model_revision\n        )\n        kwargs[\"trust_remote_code\"] = self._pytorch_model_config.get(\n            \"trust_remote_code\"\n        )\n\n        is_device_map_auto = False\n\n        # This is required for Intel GPU to actually work with accelerate device_map until\n        # https://github.com/intel/intel-extension-for-pytorch/issues/522\n        # is resolved\n        max_memory_env = os.getenv(\"ACCELERATE_MAX_MEMORY\", None)\n\n        if max_memory_env is not None:\n            max_memory_raw = json.loads(max_memory_env)\n            max_memory = {\n                int(k) if k.isdigit() else k: max_memory_raw[k] for k in max_memory_raw\n            }\n            kwargs[\"max_memory\"] = max_memory\n\n        # handle quantization\n        kwargs = self.apply_quantization_config(kwargs)\n\n        if num_gpus > 0 and is_hf_accelerate_supported(self._device):\n            kwargs.update({\"device_map\": \"auto\"})\n            is_device_map_auto = True\n\n        reasoning_content = self._pytorch_model_config.pop(\"reasoning_content\")\n        enable_thinking = self._pytorch_model_config.pop(\"enable_thinking\", False)\n        self.prepare_parse_reasoning_content(\n            reasoning_content, enable_thinking=enable_thinking\n        )\n        self.prepare_parse_tool_calls()\n\n        logger.debug(\"Loading Transformers model with kwargs: %s\", kwargs)\n\n        if self._check_tensorizer_integrity():\n            self._model, self._tokenizer = self._load_tensorizer(**kwargs)\n        else:\n            self._model, self._tokenizer = self._load_model(**kwargs)\n\n        self._apply_lora()\n\n        if not is_device_map_auto:\n            self._model.to(self._device)\n\n        self._save_tensorizer(**kwargs)\n\n        # set context length\n        self._context_length = self._pytorch_model_config.get(\n            \"context_length\", get_context_length(self._model.config)\n        )\n\n        logger.debug(f\"Model Memory: {self._model.get_memory_footprint()}\")\n\n        # Initialize batch scheduler if batching is enabled\n        self._batch_scheduler = None\n        if self._should_use_batching():\n            from ...scheduler.batch import BatchScheduler\n\n            self._batch_scheduler = BatchScheduler(self)\n            # Note: scheduler will be started when first request comes in\n\n    def _should_use_batching(self) -> bool:\n        \"\"\"Check if this model should use batch scheduling\"\"\"\n        # Apply the original allow_batching logic\n        model_ability = getattr(self.model_family, \"model_ability\", [])\n\n        # For multimodal models, check if they're in the allowed list\n        if \"vision\" in model_ability or \"audio\" in model_ability:\n            from ....core.model import XINFERENCE_BATCHING_ALLOWED_VISION_MODELS\n\n            if (\n                self.model_family.model_name\n                in XINFERENCE_BATCHING_ALLOWED_VISION_MODELS\n                or getattr(self.model_family, \"model_family\", None)\n                in XINFERENCE_BATCHING_ALLOWED_VISION_MODELS\n            ):\n                max_num_seqs = self._pytorch_model_config.get(\"max_num_seqs\", 16)\n                return max_num_seqs > 1\n            else:\n                logger.warning(\n                    f\"Currently for multimodal models, \"\n                    f\"xinference only supports {', '.join(XINFERENCE_BATCHING_ALLOWED_VISION_MODELS)} for batching. \"\n                    f\"Your model {self.model_family.model_name} with model family {getattr(self.model_family, 'model_family', None)} is disqualified.\"\n                )\n                return False\n\n        # For regular PytorchModel (non-multimodal), enable batching by default\n        max_num_seqs = self._pytorch_model_config.get(\"max_num_seqs\", 16)\n        return max_num_seqs > 1\n\n    async def _ensure_scheduler_started(self):\n        \"\"\"Ensure the batch scheduler is started\"\"\"\n        if self._batch_scheduler and not self._batch_scheduler._running:\n            await self._batch_scheduler.start()\n\n    async def generate(self, prompt: str, generate_config: Optional[dict] = None):\n        \"\"\"Generate method that handles both batching and non-batching\"\"\"\n        if self._batch_scheduler:\n            await self._ensure_scheduler_started()\n            # Use batching path\n            from asyncio import Queue\n            from concurrent.futures import Future as ConcurrentFuture\n\n            # Check if streaming\n            stream = generate_config and generate_config.get(\"stream\", False)\n\n            if stream:\n                queue: Queue = Queue()\n                await self._batch_scheduler.add_request(\n                    prompt, queue, \"generate\", generate_config\n                )\n                # Return async generator for streaming\n                return self._queue_to_async_generator(queue)\n            else:\n                future: ConcurrentFuture = ConcurrentFuture()\n                await self._batch_scheduler.add_request(\n                    prompt, future, \"generate\", generate_config\n                )\n                import asyncio\n\n                fut = asyncio.wrap_future(future)\n                return await fut\n        else:\n            # Use direct path - subclasses should implement this\n            return await self._direct_generate(prompt, generate_config)\n\n    async def _direct_generate(\n        self, prompt: str, generate_config: Optional[dict] = None\n    ):\n        \"\"\"Direct generate implementation - to be implemented by subclasses\"\"\"\n        raise NotImplementedError(\"Subclasses must implement _direct_generate\")\n\n    async def _queue_to_async_generator(self, queue):\n        \"\"\"Convert queue to async generator for streaming\"\"\"\n        from ...scheduler.core import (\n            XINFERENCE_STREAMING_ABORT_FLAG,\n            XINFERENCE_STREAMING_DONE_FLAG,\n            XINFERENCE_STREAMING_ERROR_FLAG,\n        )\n\n        while True:\n            item = await queue.get()\n            if item == XINFERENCE_STREAMING_DONE_FLAG:\n                break\n            elif isinstance(item, str) and item.startswith(\n                XINFERENCE_STREAMING_ERROR_FLAG\n            ):\n                raise ValueError(item[len(XINFERENCE_STREAMING_ERROR_FLAG) :])\n            elif item == XINFERENCE_STREAMING_ABORT_FLAG:\n                raise RuntimeError(\"Request was aborted\")\n            else:\n                yield item\n\n    async def abort_request(self, request_id: str) -> Optional[str]:\n        \"\"\"Abort a request - delegate to batch scheduler if available\"\"\"\n        if self._batch_scheduler:\n            return await self._batch_scheduler.abort_request(request_id)\n        else:\n            # For non-batching models, indicate that model doesn't handle abort\n            return None\n\n    async def stop_scheduler(self):\n        \"\"\"Stop the batch scheduler\"\"\"\n        if self._batch_scheduler:\n            await self._batch_scheduler.stop()\n\n    def stop(self):\n        \"\"\"Stop the model and clean up resources\"\"\"\n        import asyncio\n\n        if self._batch_scheduler:\n            try:\n                loop = asyncio.get_event_loop()\n                if loop.is_running():\n                    # If in async context, create a task\n                    asyncio.create_task(self.stop_scheduler())\n                else:\n                    # If not in async context, run sync\n                    asyncio.run(self.stop_scheduler())\n            except Exception as e:\n                logger.warning(f\"Failed to stop scheduler: {e}\")\n        # Clean up model resources if needed\n        if hasattr(self, \"_model\"):\n            del self._model\n        if hasattr(self, \"_tokenizer\"):\n            del self._tokenizer\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"transformers\", \"transformers\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"bnb\", \"fp4\"]:\n            return (\n                False,\n                \"Transformers engine supports pytorch/gptq/awq/bnb/fp4 formats only\",\n            )\n        if llm_family.matches_supported_architectures(NON_DEFAULT_MODEL_LIST):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} require a custom transformer implementation\",\n            )\n        if \"generate\" not in llm_family.model_ability:\n            return False, \"Transformers engine requires generate ability\"\n        return True\n\n    def build_prefill_attention_mask(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        \"\"\"\n        Build attention mask for prefill phase.\n        Padding `0` on the left.\n        Note that the parameter `seq_length` is from `input_ids`.\n        \"\"\"\n        data = []\n        for r in reqs:\n            real_len = seq_length - r.padding_len\n            r.extra_kwargs[\"attention_mask_seq_len\"] = real_len\n\n            if self._tokenizer.padding_side == \"left\":\n                # [PAD][PAD]...[TOKEN]\n                x = torch.cat(\n                    [\n                        torch.full((r.padding_len,), 0, dtype=torch.long),\n                        torch.ones((real_len,), dtype=torch.long),\n                    ]\n                )\n            else:  # right padding\n                # [TOKEN]...[PAD][PAD]\n                x = torch.cat(\n                    [\n                        torch.ones((real_len,), dtype=torch.long),\n                        torch.full((r.padding_len,), 0, dtype=torch.long),\n                    ]\n                )\n            data.append(x)\n\n        return torch.stack(data).to(self._device)\n\n    def build_decode_attention_mask(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        \"\"\"\n        Build attention mask for decode phase.\n        Note that the `seq_length` parameter is from merged kv_cache.\n        So we need pad `0` on the left again.\n        \"\"\"\n        data = []\n        max_len = max(r.extra_kwargs[\"attention_mask_seq_len\"] for r in reqs) + 1\n        for r in reqs:\n            r.extra_kwargs[\"attention_mask_seq_len\"] += 1\n            real_len = r.extra_kwargs[\"attention_mask_seq_len\"]\n            pad_len = max_len - real_len\n\n            if self._tokenizer.padding_side == \"left\":\n                x = torch.cat(\n                    [\n                        (\n                            torch.full((pad_len,), 0, dtype=torch.long)\n                            if pad_len > 0\n                            else torch.tensor([], dtype=torch.long)\n                        ),\n                        torch.ones((real_len,), dtype=torch.long),\n                    ]\n                )\n            else:\n                x = torch.cat(\n                    [\n                        torch.ones((real_len,), dtype=torch.long),\n                        torch.full((pad_len,), 0, dtype=torch.long),\n                    ]\n                )\n            data.append(x)\n\n        return torch.stack(data).to(self._device)\n\n    def build_prefill_position_ids(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        \"\"\"\n        Build position ids for prefill phase.\n        Padding `0` on the left.\n        Note that the parameter `seq_length` is from `input_ids`.\n        Record the `max_position_id` on request for the decode phase.\n        \"\"\"\n        res = []\n        for r in reqs:\n            real_seq_len = seq_length - r.padding_len\n            res.append(\n                torch.cat(\n                    [\n                        torch.full((r.padding_len,), 0, dtype=torch.long),\n                        torch.arange(0, real_seq_len, dtype=torch.long),\n                    ]\n                )\n            )\n            r.extra_kwargs[\"max_position_id\"] = real_seq_len - 1\n        return torch.stack(res).to(self._device)\n\n    def build_decode_position_ids(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        \"\"\"\n        Build position ids for decode phase.\n        For most models, just let the `max_position_id` in previous step += 1 and use the latest `max_position_id`\n        \"\"\"\n        data = []\n        for r in reqs:\n            r.extra_kwargs[\"max_position_id\"] += 1\n            data.append([r.extra_kwargs[\"max_position_id\"]])\n        position_ids = torch.as_tensor(data, dtype=torch.long, device=self._device)\n        return position_ids\n\n    def build_prefill_token_type_ids(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        \"\"\"\n        Build token_type_ids for prefill phase.\n        For most models, this is not required.\n        \"\"\"\n        return None\n\n    def build_decode_token_type_ids(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        \"\"\"\n        Build token_type_ids for decode phase.\n        For most models, this is not required.\n        \"\"\"\n        return None\n\n    def build_prefill_inputs(self, prompts: List, req_list: List[InferenceRequest]):\n        \"\"\"\n        Get inputs for inference. Models may have their own impl.\n        \"\"\"\n        assert isinstance(prompts[0], str)\n        inputs = self._tokenizer(prompts, padding=False).input_ids\n        context_len = self.get_context_len()\n        input_ids = torch.as_tensor(\n            pad_prefill_tokens(inputs, context_len, req_list), device=self._device\n        )\n        return input_ids\n\n    def build_prefill_kwargs(self, prompts: List, req_list: List[InferenceRequest]):\n        \"\"\"\n        Get all inputs parameters for prefill phase. Models may have their own impl.\n        \"\"\"\n        input_ids = self.build_prefill_inputs(prompts, req_list)\n        res = {\"input_ids\": input_ids}\n        batch_size, seq_len = input_ids.shape\n        attention_mask = self.build_prefill_attention_mask(\n            batch_size, seq_len, req_list\n        )\n        if attention_mask is not None:\n            res[\"attention_mask\"] = attention_mask\n        position_ids = self.build_prefill_position_ids(batch_size, seq_len, req_list)\n        if position_ids is not None:\n            res[\"position_ids\"] = position_ids\n        token_type_ids = self.build_prefill_token_type_ids(\n            batch_size, seq_len, req_list\n        )\n        if token_type_ids is not None:\n            res[\"token_type_ids\"] = token_type_ids\n        return res\n\n    def build_decode_kwargs(\n        self,\n        prompts: List,\n        req_list: List[InferenceRequest],\n        batch_size: int,\n        seq_len: int,\n    ):\n        \"\"\"\n        Get all inputs parameters for decode phase. Models may have their own impl.\n        \"\"\"\n        res = {\"input_ids\": torch.as_tensor(prompts, device=self._device)}\n        attention_mask = self.build_decode_attention_mask(batch_size, seq_len, req_list)\n        if attention_mask is not None:\n            res[\"attention_mask\"] = attention_mask\n        position_ids = self.build_decode_position_ids(batch_size, seq_len, req_list)\n        if position_ids is not None:\n            res[\"position_ids\"] = position_ids\n        token_type_ids = self.build_decode_token_type_ids(batch_size, seq_len, req_list)\n        if token_type_ids is not None:\n            res[\"token_type_ids\"] = token_type_ids\n        return res\n\n    @staticmethod\n    def get_batch_size_and_seq_len_indexes_from_kv() -> Tuple[int, int]:\n        \"\"\"\n        From huggingface transformers document, the `pask_key_values` has the shape of\n        `(batch_size, num_heads, sequence_length, embed_size_per_head)`.\n        However, for some models, the shape may be changed.\n        \"\"\"\n        return 0, 2\n\n    def get_dtype(self):\n        raise NotImplementedError(\"Not implemented.\")\n\n    @lru_cache\n    def get_context_len(self):\n        assert self._context_length is not None\n        return self._context_length\n\n    def get_max_num_seqs(self) -> int:\n        return self._pytorch_model_config.get(\"max_num_seqs\")  # type: ignore\n\n    def prepare_sanitize_generate_config(self, req: InferenceRequest):\n        return self._sanitize_generate_config(req.generate_config)\n\n    def merge_kv_cache(self, past_cache, new_cache):\n        from torch.nn.functional import pad\n        from transformers import DynamicCache\n\n        # Handle case where past_cache is None\n        if past_cache is None:\n            return new_cache\n\n        # Convert both caches to DynamicCache if not already\n        if not isinstance(past_cache, DynamicCache):\n            past_cache = convert_to_cache_cls(past_cache)\n        if not isinstance(new_cache, DynamicCache):\n            new_cache = convert_to_cache_cls(new_cache)\n\n        _, seq_len_idx = self.get_batch_size_and_seq_len_indexes_from_kv()\n\n        # Handle empty caches\n        if len(past_cache) == 0:\n            return new_cache\n        if len(new_cache) == 0:\n            return past_cache\n\n        # Get first layer seq_len safely\n        past_first = past_cache[0] if len(past_cache) > 0 else (None, None)\n        new_first = new_cache[0] if len(new_cache) > 0 else (None, None)\n\n        if past_first[0] is None or past_first[1] is None:\n            return new_cache\n        if new_first[0] is None or new_first[1] is None:\n            return past_cache\n\n        past_seq_len = past_first[0].shape[seq_len_idx]\n        new_seq_len = new_first[0].shape[seq_len_idx]\n\n        # Pad the shorter cache\n        if past_seq_len != new_seq_len:\n            if past_seq_len > new_seq_len:\n                padding_target = new_cache\n                padding_len = past_seq_len - new_seq_len\n            else:\n                padding_target = past_cache\n                padding_len = new_seq_len - past_seq_len\n\n            pad_param = _get_pad_param(seq_len_idx, padding_len)\n            for idx in range(len(padding_target)):\n                k = padding_target.key_cache[idx]\n                v = padding_target.value_cache[idx]\n                if k is not None and v is not None:\n                    padding_target.key_cache[idx] = pad(k, pad_param)\n                    padding_target.value_cache[idx] = pad(v, pad_param)\n\n        # Merge caches\n        ret_kv = DynamicCache()\n        max_layers = max(len(past_cache), len(new_cache))\n\n        for idx in range(max_layers):\n            past_k = past_cache.key_cache[idx] if idx < len(past_cache) else None\n            past_v = past_cache.value_cache[idx] if idx < len(past_cache) else None\n            new_k = new_cache.key_cache[idx] if idx < len(new_cache) else None\n            new_v = new_cache.value_cache[idx] if idx < len(new_cache) else None\n\n            if past_k is not None and new_k is not None:\n                # Both layers exist - validate tensor dimensions before concatenation\n                if past_k.dim() != new_k.dim():\n                    logger.error(\n                        f\"KV cache tensor dimension mismatch at layer {idx}: \"\n                        f\"past_k.dim()={past_k.dim()}, new_k.dim()={new_k.dim()}\"\n                    )\n                    # Use the cache with higher batch size\n                    if past_k.shape[0] >= new_k.shape[0]:\n                        ret_kv.update(past_k, past_v, idx)\n                    else:\n                        ret_kv.update(new_k, new_v, idx)\n                    continue\n\n                if past_k.shape[1:] == new_k.shape[1:]:\n                    # Shapes are compatible, concatenate along batch dimension\n                    ret_kv.update(\n                        torch.cat((new_k, past_k), 0).contiguous(),\n                        torch.cat((new_v, past_v), 0).contiguous(),\n                        idx,\n                    )\n                else:\n                    # Detailed logging for shape mismatch\n                    logger.warning(\n                        f\"KV cache shape mismatch at layer {idx}: \"\n                        f\"past_k.shape={past_k.shape}, new_k.shape={new_k.shape}. \"\n                        f\"This may be due to inconsistent batch sizes in continuous batching.\"\n                    )\n\n                    # Choose the cache with larger batch size to preserve more data\n                    if past_k.shape[0] >= new_k.shape[0]:\n                        ret_kv.update(past_k, past_v, idx)\n                    else:\n                        ret_kv.update(new_k, new_v, idx)\n            elif past_k is not None:\n                ret_kv.update(past_k, past_v, idx)\n            elif new_k is not None:\n                ret_kv.update(new_k, new_v, idx)\n            else:\n                # both None, fill with None\n                ret_kv.update(None, None, idx)\n\n        return ret_kv\n\n    def prepare_batch_inference(self, req_list: List[InferenceRequest]):\n        # check some parameters\n        for r in req_list:\n            try:\n                if r.sanitized_generate_config is None:\n                    r.sanitized_generate_config = self.prepare_sanitize_generate_config(\n                        r\n                    )\n                if r.is_prefill:\n                    # check some generate params\n                    max_src_len = get_max_src_len(self.get_context_len(), r)  # type: ignore\n                    if max_src_len < 0:\n                        r.stopped = True\n                        r.error_msg = \"Max tokens exceeds model's max length\"\n                        continue\n                    if r.stream_interval <= 0:\n                        r.stopped = True\n                        r.error_msg = \"`stream_interval` must be greater than 0\"\n                        continue\n                    stop_str = r.sanitized_generate_config.get(\"stop\", None)\n                    if stop_str and (\n                        not (\n                            isinstance(stop_str, str) or isinstance(stop_str, Iterable)\n                        )\n                    ):\n                        r.stopped = True\n                        r.error_msg = \"Invalid `stop` field type\"\n                        continue\n            # Catch exception here. If not catch exception, the request would hang.\n            except Exception as e:\n                logger.exception(f\"prepare inference error with {e}\")\n                r.stopped = True\n                r.error_msg = str(e)\n\n    def get_builtin_stop_token_ids(self) -> Tuple:\n        from ..utils import get_stop_token_ids_from_config_file\n\n        try:\n            stop_token_ids = get_stop_token_ids_from_config_file(self.model_path)\n        except OSError:\n            # some model lacks of generation_config.json\n            stop_token_ids = None\n        if stop_token_ids is not None:\n            return tuple(stop_token_ids)\n        else:\n            return (\n                tuple(self.model_family.stop_token_ids)\n                if self.model_family.stop_token_ids\n                else tuple()\n            )\n\n    def handle_batch_inference_results(self, req_list: List[InferenceRequest]):\n        for req in req_list:\n            if req.error_msg is None:\n                # nothing need handle for non-stream case\n                if req.stream:\n                    results = []\n                    for i, c in enumerate(req.completion):\n                        if c == \"<bos_stream>\":\n                            chunk = req.completion[i + 1]\n                            results.append(\n                                CompletionChunk(\n                                    id=chunk[\"id\"],\n                                    object=chunk[\"object\"],\n                                    created=chunk[\"created\"],\n                                    model=chunk[\"model\"],\n                                    choices=[\n                                        CompletionChoice(\n                                            text=\"\",\n                                            index=0,\n                                            logprobs=None,\n                                            finish_reason=None,\n                                        )\n                                    ],\n                                )\n                            )\n                            continue\n                        elif c == \"<eos_stream>\":\n                            break\n                        else:\n                            results.append(c)\n\n                    if req.stopped and req.include_usage:\n                        results.append(req.completion[-1])\n                    req.completion = results\n\n    def batch_inference(self, req_list: List[InferenceRequest]):\n        from .utils import batch_inference_one_step\n\n        self.prepare_batch_inference(req_list)\n        batch_inference_one_step(\n            self, req_list, self.model_uid, self._model, self._tokenizer\n        )\n        self.handle_batch_inference_results(req_list)\n\n    def build_reduced_kv_cache(self, cache, skipped_indexes: Set[int]):\n        batch_size = cache.key_cache[0].shape[0]\n        batch_slices = [num for num in range(batch_size) if num not in skipped_indexes]\n        for idx in range(len(cache)):\n            cache.key_cache[idx] = cache.key_cache[idx][batch_slices, ::].contiguous()\n            cache.value_cache[idx] = cache.value_cache[idx][\n                batch_slices, ::\n            ].contiguous()\n        return cache\n\n\nclass PytorchChatModel(PytorchModel, ChatModelMixin):\n    def __init__(\n        self,\n        model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        pytorch_model_config: Optional[PytorchModelConfig] = None,\n        peft_model: Optional[List[LoRA]] = None,\n    ):\n        super().__init__(\n            model_uid,\n            model_family,\n            model_path,\n            pytorch_model_config,\n            peft_model,\n        )\n\n    def _sanitize_generate_config(\n        self,\n        generate_config: Optional[PytorchGenerateConfig],\n    ) -> PytorchGenerateConfig:\n        generate_config = super()._sanitize_generate_config(generate_config)\n        if (not generate_config.get(\"stop\")) and self.model_family.stop is not None:\n            generate_config[\"stop\"] = self.model_family.stop.copy()\n        if (\n            generate_config.get(\"stop_token_ids\", None) is None\n            and self.model_family.stop_token_ids is not None\n        ):\n            generate_config[\"stop_token_ids\"] = self.model_family.stop_token_ids.copy()\n\n        return generate_config\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"bnb\", \"fp4\"]:\n            return (\n                False,\n                \"Transformers chat engine supports pytorch/gptq/awq/bnb/fp4 formats only\",\n            )\n        if llm_family.matches_supported_architectures(NON_DEFAULT_MODEL_LIST):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} require a custom transformer implementation\",\n            )\n        if \"chat\" not in llm_family.model_ability:\n            return False, \"Transformers chat engine requires chat ability\"\n        return True\n\n    async def chat(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[PytorchGenerateConfig] = None,\n    ) -> Union[ChatCompletion, Iterator[ChatCompletionChunk]]:\n        \"\"\"Chat method that handles both batching and non-batching\"\"\"\n        if self._batch_scheduler:\n            await self._ensure_scheduler_started()\n            # Use batching path\n            from asyncio import Queue\n            from concurrent.futures import Future as ConcurrentFuture\n\n            # Check if streaming\n            stream = generate_config and generate_config.get(\"stream\", False)\n\n            if stream:\n                queue: Queue = Queue()\n                await self._batch_scheduler.add_request(\n                    messages, queue, \"chat\", generate_config\n                )\n                # Return async generator for streaming\n                return self._queue_to_async_generator(queue)\n            else:\n                future: ConcurrentFuture = ConcurrentFuture()\n                await self._batch_scheduler.add_request(\n                    messages, future, \"chat\", generate_config\n                )\n                import asyncio\n\n                fut = asyncio.wrap_future(future)\n                return await fut\n        else:\n            # Use direct path - call the original implementation\n            return await self._direct_chat(messages, generate_config)\n\n    async def _direct_chat(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[PytorchGenerateConfig] = None,\n    ) -> Union[ChatCompletion, Iterator[ChatCompletionChunk]]:\n        \"\"\"Direct chat implementation - to be implemented by subclasses\"\"\"\n        raise NotImplementedError(\"Subclasses must implement _direct_chat\")\n\n    def load(self):\n        super().load()\n\n    def _get_full_prompt(self, messages: List[Dict], tools, generate_config: dict):\n        model_family = self.model_family.model_family or self.model_family.model_name\n        chat_template_kwargs = (\n            self._get_chat_template_kwargs_from_generate_config(\n                generate_config, self.reasoning_parser\n            )\n            or {}\n        )\n        chat_context_var.set(chat_template_kwargs)\n        full_context_kwargs = chat_template_kwargs.copy()\n        if (\n            tools\n            and model_family in QWEN_TOOL_CALL_FAMILY\n            or model_family in LLAMA3_TOOL_CALL_FAMILY\n            or model_family in DEEPSEEK_TOOL_CALL_FAMILY\n        ):\n            full_context_kwargs[\"tools\"] = tools\n        assert self.model_family.chat_template is not None\n        full_prompt = self.get_full_context(\n            messages,\n            self.model_family.chat_template,\n            tokenizer=self._tokenizer,\n            **full_context_kwargs,\n        )\n        return full_prompt\n\n    def prepare_batch_inference(self, req_list: List[InferenceRequest]):\n        super().prepare_batch_inference(req_list)\n        for r in req_list:\n            try:\n                if not r.stopped and r.is_prefill:\n                    tools = r.generate_config.get(\"tools\", None)\n                    r.full_prompt = self._get_full_prompt(\n                        r.prompt, tools, r.generate_config\n                    )\n                    if tools:\n                        r.tools = tools\n            except Exception as e:\n                logger.exception(f\"prepare inference error with {e}\")\n                r.stopped = True\n                r.error_msg = str(e)\n\n    def handle_chat_result_non_streaming(self, req: InferenceRequest):\n        if req.tools:\n            req.completion[0] = self._post_process_completion(\n                self.model_family,\n                self.model_uid,\n                req.completion[0],\n            )\n        else:\n            req.completion[0] = self._to_chat_completion(\n                req.completion[0], self.reasoning_parser\n            )\n\n    def handle_chat_result_streaming(self, req: InferenceRequest):\n        results = []\n        for i, c in enumerate(req.completion):\n            if c == \"<bos_stream>\":\n                results.extend(\n                    self._get_first_chat_completion_chunk(\n                        req.completion[i + 1], self.reasoning_parser\n                    )\n                )\n            elif c == \"<eos_stream>\":\n                break\n            else:\n                results.append(\n                    self._to_chat_completion_chunk(\n                        c,\n                        self.reasoning_parser,\n                        req.previous_texts,\n                        ensure_role=not results,\n                    )\n                )\n\n        if req.stopped and req.include_usage:\n            results.append(self._get_final_chat_completion_chunk(req.completion[-1]))\n        req.completion = results\n\n    def handle_batch_inference_results(self, req_list: List[InferenceRequest]):\n        for req in req_list:\n            if req.error_msg is None and req.completion:\n                # The `generate` function can be called for some chat models.\n                # So that we cannot convert completion chunk to chat completion chunk.\n                if req.call_ability == \"generate\":\n                    results = []\n                    for c in req.completion:\n                        if c == \"<bos_stream>\":\n                            continue\n                        elif c == \"<eos_stream>\":\n                            break\n                        else:\n                            results.append(c)\n                    req.completion = results\n                    continue\n\n                if req.stream:\n                    self.handle_chat_result_streaming(req)\n                else:\n                    self.handle_chat_result_non_streaming(req)\n"
  },
  {
    "path": "xinference/model/llm/transformers/deepseek_v2.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom typing import Tuple, Union\n\nimport torch\n\nfrom ..llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom .core import PytorchChatModel, register_non_default_model\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"DeepseekV2ForCausalLM\")\nclass DeepSeekV2PytorchChatModel(PytorchChatModel):\n    DEEPSEEK_V2_ARCHITECTURES = {\"DeepseekV2ForCausalLM\"}\n\n    def _load_model(self, **kwargs):\n        try:\n            from transformers import (\n                AutoModelForCausalLM,\n                AutoTokenizer,\n                GenerationConfig,\n            )\n        except ImportError:\n            error_message = \"Failed to import module 'transformers'\"\n            installation_guide = [\n                \"Please make sure 'transformers' is installed. \",\n                \"You can install it by `pip install transformers`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        tokenizer = AutoTokenizer.from_pretrained(\n            self.model_path,\n            trust_remote_code=kwargs[\"trust_remote_code\"],\n        )\n        logger.info(f\"kwargs:{kwargs}\")\n        model = AutoModelForCausalLM.from_pretrained(\n            self.model_path,\n            attn_implementation=\"eager\",\n            torch_dtype=torch.bfloat16,\n            trust_remote_code=True,\n            device_map=\"auto\",\n            **kwargs,\n        )\n        model.generation_config = GenerationConfig.from_pretrained(self.model_path)\n        model.generation_config.pad_token_id = model.generation_config.eos_token_id\n        return model, tokenizer\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"pytorch\", \"fp4\"]:\n            return False, \"DeepSeek v2 transformer only supports pytorch/fp4 format\"\n        if not llm_family.has_architecture(*cls.DEEPSEEK_V2_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not DeepSeek v2\",\n            )\n        if \"chat\" not in llm_family.model_ability:\n            return False, \"DeepSeek v2 transformer requires chat ability\"\n        return True\n"
  },
  {
    "path": "xinference/model/llm/transformers/gemma3.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom typing import Dict, List, Set, Tuple, Union\n\nfrom ...scheduler.request import InferenceRequest\nfrom ..llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom .core import PytorchChatModel, register_non_default_model\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"Gemma3ForCausalLM\")\nclass Gemma3TextChatModel(PytorchChatModel):\n    GEMMA3_ARCHITECTURES = {\"Gemma3ForCausalLM\"}\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"bnb\", \"fp4\"]:\n            return (\n                False,\n                \"Gemma3 transformer supports pytorch/gptq/awq/bnb/fp4 formats only\",\n            )\n        if not model_family.has_architecture(*cls.GEMMA3_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not Gemma-3-1B-it\",\n            )\n        return True\n\n    def _load_model(self, **kwargs):\n        import torch\n        from transformers import AutoModelForCausalLM, AutoTokenizer\n\n        tokenizer = AutoTokenizer.from_pretrained(\n            self.model_path,\n            trust_remote_code=kwargs[\"trust_remote_code\"],\n            revision=kwargs[\"revision\"],\n        )\n        kwargs[\"torch_dtype\"] = torch.bfloat16\n        model = AutoModelForCausalLM.from_pretrained(\n            self.model_path,\n            **kwargs,\n        )\n        self._device = model.device\n        return model, tokenizer\n\n    def _get_full_prompt(self, messages: List[Dict], tools, generate_config: dict):\n        return messages\n\n    def build_prefill_kwargs(self, prompts: List, req_list: List[InferenceRequest]):\n        \"\"\"\n        Note that it is important to prepare `past_key_values` for gemma3 prefill phase\n        \"\"\"\n        from transformers import HybridCache\n\n        inputs = self._tokenizer.apply_chat_template(\n            prompts,\n            tokenize=True,\n            add_generation_prompt=True,\n            return_tensors=\"pt\",\n            return_dict=True,\n            padding=True,\n        ).to(self._device)\n\n        for i, r in enumerate(req_list):\n            r.prompt_tokens = inputs[\"input_ids\"][i].tolist()\n\n        batch_size = len(prompts)\n        max_cache_len = self.get_context_len()\n        kv = HybridCache(\n            self._model.config,\n            max_batch_size=batch_size,\n            max_cache_len=max_cache_len,\n            dtype=self._model.dtype,\n            device=self._device,\n        )\n        return {**inputs, \"past_key_values\": kv}\n\n    def merge_kv_cache(self, past_cache, new_cache):\n        \"\"\"\n        Note that: DO NOT use the `update` func of `HybridCache`, that is unrelated to KV cache merging.\n        \"\"\"\n        import torch\n        from transformers import HybridCache\n\n        max_cache_len = new_cache.max_cache_len\n        batch_size = past_cache.max_batch_size + new_cache.max_batch_size\n\n        kv_batch = HybridCache(\n            self._model.config,\n            max_batch_size=batch_size,\n            max_cache_len=max_cache_len,\n            dtype=self._model.dtype,\n            device=self._device,\n        )\n\n        new_ks = [\n            torch.cat([nk, pk], dim=0).contiguous()\n            for nk, pk in zip(new_cache.key_cache, past_cache.key_cache)\n        ]\n        new_vs = [\n            torch.cat([nv, pv], dim=0).contiguous()\n            for nv, pv in zip(new_cache.value_cache, past_cache.value_cache)\n        ]\n\n        kv_batch.key_cache.clear()\n        kv_batch.value_cache.clear()\n        kv_batch.key_cache.extend(new_ks)\n        kv_batch.value_cache.extend(new_vs)\n\n        return kv_batch\n\n    def build_decode_attention_mask(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        \"\"\"\n        In Gemma3's inference script, attention_mask is handled internally for decode phase.\n        \"\"\"\n        return None\n\n    def build_decode_position_ids(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        \"\"\"\n        In Gemma3's inference script, position_ids is handled internally for decode phase.\n        \"\"\"\n        return None\n\n    def build_reduced_kv_cache(self, cache, skipped_indexes: Set[int]):\n        from transformers import HybridCache\n\n        batch_slices = [\n            num for num in range(cache.max_batch_size) if num not in skipped_indexes\n        ]\n        batch_size = len(batch_slices)\n\n        kv_batch = HybridCache(\n            self._model.config,\n            max_batch_size=batch_size,\n            max_cache_len=cache.max_cache_len,\n            dtype=self._model.dtype,\n            device=self._device,\n        )\n\n        ks = cache.key_cache\n        vs = cache.value_cache\n\n        new_ks = [_k[batch_slices, ::].contiguous() for _k in ks]\n        new_vs = [_v[batch_slices, ::].contiguous() for _v in vs]\n        kv_batch.key_cache.clear()\n        kv_batch.value_cache.clear()\n        kv_batch.key_cache.extend(new_ks)\n        kv_batch.value_cache.extend(new_vs)\n\n        return kv_batch\n"
  },
  {
    "path": "xinference/model/llm/transformers/gpt_oss.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport inspect\nimport logging\nfrom typing import Dict, Iterator, List, Optional, Tuple, Union\n\nfrom ....types import (\n    ChatCompletion,\n    ChatCompletionChunk,\n    PytorchGenerateConfig,\n    PytorchModelConfig,\n)\nfrom ..harmony import async_stream_harmony_chat_completion\nfrom ..llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom .core import PytorchChatModel, register_non_default_model\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"GptOssForCausalLM\")\nclass GPTOSSPytorchChatModel(PytorchChatModel):\n    GPT_OSS_ARCHITECTURES = {\"GptOssForCausalLM\"}\n\n    def _sanitize_model_config(\n        self, pytorch_model_config: Optional[PytorchModelConfig]\n    ) -> PytorchModelConfig:\n        config = super()._sanitize_model_config(pytorch_model_config)\n        config.setdefault(\"torch_dtype\", \"auto\")\n        return config  # type:ignore\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"bnb\", \"fp4\"]:\n            return (\n                False,\n                \"GPT-OSS transformer supports pytorch/gptq/awq/bnb/fp4 formats only\",\n            )\n        if not llm_family.has_architecture(*cls.GPT_OSS_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not GPT-OSS\",\n            )\n        if \"chat\" not in llm_family.model_ability:\n            return False, \"GPT-OSS transformer requires chat ability\"\n        return True\n\n    async def chat(  # type:ignore\n        self,\n        messages: List[Dict],\n        generate_config: Optional[PytorchGenerateConfig] = None,\n    ) -> Union[ChatCompletion, Iterator[ChatCompletionChunk]]:\n        gen = super().chat(messages, generate_config=generate_config)\n\n        if inspect.iscoroutine(gen):\n            gen = await gen\n\n        if inspect.isasyncgen(gen):\n            # Streaming\n            async def stream_parser():\n                full_text = \"\"\n                full_reasoning = \"\"\n\n                async for parsed_chunk in async_stream_harmony_chat_completion(gen):\n                    choices = parsed_chunk.get(\"choices\")\n                    if choices and len(choices) > 0:\n                        delta = choices[0].get(\"delta\", {})\n                        if delta.get(\"content\"):\n                            full_text += delta[\"content\"]\n                        if delta.get(\"reasoning_content\"):\n                            full_reasoning += delta[\"reasoning_content\"]\n                    yield parsed_chunk\n\n                logger.debug(\n                    \"Chat finished, content: %r, reasoning: %r\",\n                    full_text,\n                    full_reasoning,\n                )\n\n            return stream_parser()\n\n        else:\n            # Non-streaming sync - handle single result\n            async for parsed_completion in async_stream_harmony_chat_completion(gen):  # type: ignore\n                return parsed_completion\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/cogagent.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nimport re\nfrom concurrent.futures import ThreadPoolExecutor\nfrom threading import Thread\nfrom typing import Any, Dict, Iterator, List, Literal, Optional, Tuple, Union\n\nimport torch\n\nfrom .....model.utils import select_device\nfrom ...core import chat_context_var\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ...utils import _decode_image, parse_messages\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"ChatGLMForConditionalGeneration\")\nclass CogAgentChatModel(PytorchMultiModalModel):\n    COGAGENT_ARCHITECTURES = {\"ChatGLMForConditionalGeneration\"}\n\n    def __init__(self, *args, **kws):\n        super().__init__(*args, **kws)\n        self._platform: Optional[Literal[\"Mac\", \"WIN\", \"Mobile\"]] = \"Mac\"  # type: ignore\n        self._format: Optional[  # type: ignore\n            Literal[\n                \"(Answer in Action-Operation-Sensitive format.)\",\n                \"(Answer in Status-Plan-Action-Operation format.)\",\n                \"(Answer in Status-Action-Operation-Sensitive format.)\",\n                \"(Answer in Status-Action-Operation format.)\",\n                \"(Answer in Action-Operation format.)\",\n            ]\n        ] = \"(Answer in Action-Operation-Sensitive format.)\"\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not model_family.has_architecture(*cls.COGAGENT_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not CogAgent\",\n            )\n        if \"vision\" not in model_family.model_ability:\n            return False, \"CogAgent transformer requires vision ability\"\n        return True\n\n    def decide_device(self):\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        self._device = select_device(device)\n\n    def load_processor(self):\n        from transformers import AutoTokenizer\n\n        self._tokenizer = AutoTokenizer.from_pretrained(\n            self.model_path, trust_remote_code=True\n        )\n\n    def load_multimodal_model(self):\n        from transformers import AutoModelForCausalLM\n\n        kwargs = self.apply_quantization_config()\n        self._model = AutoModelForCausalLM.from_pretrained(\n            self.model_path,\n            torch_dtype=torch.bfloat16,\n            trust_remote_code=True,\n            device_map=self._device,\n            **kwargs,\n        ).eval()\n\n    def _message_content_to_cogagent(self, content):\n        assert isinstance(content, list)\n        texts = []\n        image_urls = []\n        for c in content:\n            c_type = c.get(\"type\")\n            if c_type == \"text\":\n                texts.append(c[\"text\"])\n            elif c_type == \"image_url\":\n                image_urls.append(c[\"image_url\"][\"url\"])\n        image_futures = []\n        with ThreadPoolExecutor() as executor:\n            for image_url in image_urls:\n                fut = executor.submit(_decode_image, image_url)\n                image_futures.append(fut)\n        images = [fut.result() for fut in image_futures]\n        text = \" \".join(texts)\n        if len(images) == 0:\n            raise RuntimeError(\n                \"CogAgent requires image input to perform GUI Agent tasks. Pure text-based interaction cannot execute such tasks.\"\n            )\n        elif len(images) == 1:\n            return text, images[-1]\n        else:\n            logger.warning(\n                \"There are multiple images in the prompt, CogAgent will automatically use the most recently provided image as the input.\"\n            )\n            return text, images[-1]\n\n    def _history_content_to_cogagent(self, chat_history: List[Dict]):\n        grounded_pattern = r\"Grounded Operation:\\s*(.*)\"\n        action_pattern = r\"Action:\\s*(.*)\"\n\n        def extract_operations(_content: str):\n            \"\"\"extract grounded operation and action operation\"\"\"\n            _history_step = []\n            _history_action = []\n\n            matches_history = re.search(grounded_pattern, _content)\n            matches_actions = re.search(action_pattern, _content)\n\n            if matches_history:\n                grounded_operation = matches_history.group(1)\n                _history_step.append(grounded_operation)\n            if matches_actions:\n                action_operation = matches_actions.group(1)\n                _history_action.append(action_operation)\n\n            return _history_step, _history_action\n\n        history_step = []\n        history_action = []\n\n        for i in range(0, len(chat_history) - 1, 2):\n            content = chat_history[i + 1].get(\"content\")\n            if isinstance(content, str):  # 如果内容是字符串\n                steps, actions = extract_operations(content)\n                history_step.extend(steps)\n                history_action.extend(actions)\n\n            elif isinstance(content, list):  # 如果内容是列表\n                for c in content:\n                    c_content = c.get(\"content\")\n                    if isinstance(c_content, str):  # 确保是字符串类型\n                        steps, actions = extract_operations(c_content)\n                        history_step.extend(steps)\n                        history_action.extend(actions)\n\n        return history_step, history_action\n\n    def _get_query_and_history(\n        self,\n        prompt: Union[str, List[Dict]],\n        chat_history: Optional[List[Dict]] = None,\n    ):\n        task, image = self._message_content_to_cogagent(prompt)\n\n        history_step, history_action = [], []\n\n        if chat_history:\n            history_step, history_action = self._history_content_to_cogagent(\n                chat_history\n            )\n\n        # Verify history lengths match\n        if len(history_step) != len(history_action):\n            raise ValueError(\"Mismatch in lengths of history_step and history_action.\")\n\n        # Format history steps for output\n        history_str = \"\\nHistory steps: \"\n        for index, (step, action) in enumerate(zip(history_step, history_action)):\n            history_str += f\"\\n{index}. {step}\\t{action}\"\n\n        # Compose the query with task, platform, and selected format instructions\n        query = f\"Task: {task}{history_str}\\n{self._platform}{self._format}\"\n        logger.info(f\"query:{query}\")\n        return query, image\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        prompt, _, chat_history = parse_messages(messages)\n\n        query, image = self._get_query_and_history(prompt, chat_history)\n\n        full_context_kwargs = {\n            \"return_tensors\": \"pt\",\n            \"return_dict\": True,\n        }\n        chat_template_kwargs = (\n            self._get_chat_template_kwargs_from_generate_config(\n                generate_config, self.reasoning_parser\n            )\n            or {}\n        )\n        chat_context_var.set(chat_template_kwargs)\n        full_context_kwargs.update(chat_template_kwargs)\n        assert self.model_family.chat_template is not None\n        inputs = self.get_full_context(\n            [{\"role\": \"user\", \"image\": image, \"content\": query}],\n            self.model_family.chat_template,\n            self._tokenizer,\n            tokenize=True,\n            **full_context_kwargs,\n        )\n        inputs.to(self._model.device)\n        return inputs\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        generate_config = {} if generate_config is None else generate_config\n        self._platform = generate_config.pop(\"platform\", self._platform)\n        self._format = generate_config.pop(\"format\", self._format)\n        return {\n            \"max_length\": generate_config.get(\"max_tokens\") or 512,\n            \"top_k\": generate_config.get(\"top_k\", 1),\n            \"do_sample\": True,\n        }\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        from transformers import TextIteratorStreamer\n\n        config = self.build_generate_kwargs(generate_config)\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        streamer = TextIteratorStreamer(\n            self._tokenizer, skip_prompt=True, skip_special_tokens=True\n        )\n        generation_kwargs = {**inputs, **config, \"streamer\": streamer}\n\n        thread = Thread(target=self._model.generate, kwargs=generation_kwargs)\n        thread.start()\n        return streamer, len(inputs.input_ids[0])\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport uuid\nfrom abc import abstractmethod\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union, cast\n\nfrom .....types import (\n    ChatCompletion,\n    ChatCompletionChunk,\n    CompletionChunk,\n    PytorchGenerateConfig,\n)\nfrom ....utils import cache_clean\nfrom ...utils import generate_completion, generate_completion_chunk\nfrom ..core import PytorchChatModel\n\n\nclass PytorchMultiModalModel(PytorchChatModel):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self._tokenizer = None\n        self._device = None\n        self._processor = None\n        self._model = None\n\n    @abstractmethod\n    def decide_device(self):\n        \"\"\"\n        Update self._device\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def load_processor(self):\n        \"\"\"\n        Load self._processor and self._tokenizer\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def load_multimodal_model(self):\n        \"\"\"\n        Load self._model\n        \"\"\"\n        pass\n\n    def load(self):\n        self.decide_device()\n        reasoning_content = self._pytorch_model_config.pop(\"reasoning_content\")\n        enable_thinking = self._pytorch_model_config.pop(\"enable_thinking\", False)\n        self.prepare_parse_reasoning_content(\n            reasoning_content, enable_thinking=enable_thinking\n        )\n        self.prepare_parse_tool_calls()\n        self.load_processor()\n        self.load_multimodal_model()\n\n    @abstractmethod\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        \"\"\"\n        Convert from input OpenAI-formatted messages to\n        actual parameters needed for inference,\n        e.g. input_ids, attention_masks, etc.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        \"\"\"\n        Hyperparameters needed for generation,\n        e.g. temperature, max_new_tokens, etc.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        \"\"\"\n        Return the iterator needed for streaming inference and the length of prompt token for statisticians.\n        The length of prompt token usually comes from the input_ids.\n        In this interface you need to call the `build_inputs_from_messages` and `build_generate_kwargs`.\n        \"\"\"\n        pass\n\n    def get_stop_strs(self) -> List[str]:\n        return []\n\n    def check_conditions(self, new_text: str) -> Tuple[str, bool]:\n        stop_strs = self.get_stop_strs()\n        for ss in stop_strs:\n            if new_text.endswith(ss):\n                new_text = new_text[: -len(ss)]\n                break\n        return new_text, False\n\n    def generate_non_streaming(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[PytorchGenerateConfig] = None,\n    ) -> ChatCompletion:\n        generate_config = generate_config if generate_config else {}  # type: ignore\n        tools = generate_config.get(\"tools\", None)\n        streamer, prompt_tokens = self.build_streaming_iter(messages, generate_config)  # type: ignore\n        completion_tokens, total_tokens = 0, 0\n        res = \"\"\n        for i, new_text in enumerate(streamer):\n            new_text, should_stop = self.check_conditions(new_text)\n            if should_stop:\n                break\n            completion_tokens = i\n            total_tokens = prompt_tokens + completion_tokens\n            res += new_text\n        completion = generate_completion(\n            self.model_uid,\n            res,\n            prompt_tokens=prompt_tokens,\n            completion_tokens=completion_tokens if prompt_tokens != -1 else -1,\n            total_tokens=total_tokens if prompt_tokens != -1 else -1,\n        )\n        if tools and self.tool_parser:\n            return self._post_process_completion(\n                self.model_family,\n                self.model_uid,\n                completion,\n            )\n        return self._to_chat_completion(completion, self.reasoning_parser)\n\n    def generate_streaming(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[PytorchGenerateConfig] = None,\n    ) -> Iterator[CompletionChunk]:\n        generate_config = generate_config if generate_config else {}  # type: ignore\n        tools = generate_config.get(\"tools\", None)\n        use_tool_calls = bool(tools and self.tool_parser)\n        streamer, prompt_tokens = self.build_streaming_iter(messages, generate_config)  # type: ignore\n        stream_options = generate_config.pop(\"stream_options\", None)\n        include_usage = (\n            stream_options[\"include_usage\"]\n            if isinstance(stream_options, dict)\n            else False\n        )\n\n        completion_id = str(uuid.uuid1())\n        completion_tokens, total_tokens = 0, 0\n        previous_texts = [\"\"]\n        previous_tools_texts = [\"\"]\n        i = 0\n        for i, new_text in enumerate(streamer):\n            new_text, should_stop = self.check_conditions(new_text)\n            if should_stop:\n                break\n            completion_tokens = i\n            total_tokens = prompt_tokens + completion_tokens\n            completion_chunk = generate_completion_chunk(\n                chunk_text=new_text,\n                finish_reason=None,\n                chunk_id=completion_id,\n                model_uid=self.model_uid,\n                prompt_tokens=prompt_tokens,\n                completion_tokens=completion_tokens if prompt_tokens != -1 else -1,\n                total_tokens=total_tokens if prompt_tokens != -1 else -1,\n                has_choice=True,\n                has_content=True,\n            )\n            if use_tool_calls:\n                chat_chunk = self._to_chat_completion_chunk(\n                    completion_chunk,\n                    self.reasoning_parser,\n                    previous_texts,\n                    ensure_role=i == 0,\n                )\n                if (\n                    chat_chunk[\"choices\"]\n                    and \"reasoning_content\" in chat_chunk[\"choices\"][0][\"delta\"]\n                    and chat_chunk[\"choices\"][0][\"delta\"][\"reasoning_content\"]\n                    is not None\n                ):\n                    yield cast(CompletionChunk, chat_chunk)\n                else:\n                    processed_chunk = self._post_process_completion_chunk(\n                        self.model_family,\n                        self.model_uid,\n                        chat_chunk,\n                        previous_texts=previous_tools_texts,\n                    )\n                    if processed_chunk:\n                        yield cast(CompletionChunk, processed_chunk)\n            else:\n                yield completion_chunk\n        completion_chunk = generate_completion_chunk(\n            chunk_text=None,\n            finish_reason=\"stop\",\n            chunk_id=completion_id,\n            model_uid=self.model_uid,\n            prompt_tokens=prompt_tokens,\n            completion_tokens=completion_tokens if prompt_tokens != -1 else -1,\n            total_tokens=total_tokens if prompt_tokens != -1 else -1,\n            has_choice=True,\n            has_content=False,\n        )\n        if use_tool_calls:\n            chat_chunk = self._to_chat_completion_chunk(\n                completion_chunk,\n                self.reasoning_parser,\n                previous_texts,\n                ensure_role=i == 0,\n            )\n            processed_chunk = self._post_process_completion_chunk(\n                self.model_family,\n                self.model_uid,\n                chat_chunk,\n                previous_texts=previous_tools_texts,\n            )\n            if processed_chunk:\n                yield cast(CompletionChunk, processed_chunk)\n        else:\n            yield completion_chunk\n        if include_usage:\n            completion_chunk = generate_completion_chunk(\n                chunk_text=None,\n                finish_reason=None,\n                chunk_id=completion_id,\n                model_uid=self.model_uid,\n                prompt_tokens=prompt_tokens,\n                completion_tokens=completion_tokens if prompt_tokens != -1 else -1,\n                total_tokens=total_tokens if prompt_tokens != -1 else -1,\n                has_choice=False,\n                has_content=False,\n            )\n            if use_tool_calls:\n                chat_chunk = self._to_chat_completion_chunk(\n                    completion_chunk,\n                    self.reasoning_parser,\n                    previous_texts,\n                    ensure_role=i == 0,\n                )\n                processed_chunk = self._post_process_completion_chunk(\n                    self.model_family,\n                    self.model_uid,\n                    chat_chunk,\n                    previous_texts=previous_tools_texts,\n                )\n                if processed_chunk:\n                    yield cast(CompletionChunk, processed_chunk)\n            else:\n                yield completion_chunk\n\n    @cache_clean\n    def chat(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[PytorchGenerateConfig] = None,\n    ) -> Union[ChatCompletion, Iterator[ChatCompletionChunk]]:\n        stream = generate_config.get(\"stream\", False) if generate_config else False\n        return (\n            self._to_chat_completion_chunks(\n                self.generate_streaming(messages, generate_config)\n            )\n            if stream\n            else self.generate_non_streaming(messages, generate_config)\n        )\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/deepseek_vl2.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport base64\nimport logging\nimport os\nimport tempfile\nfrom concurrent.futures import ThreadPoolExecutor\nfrom io import BytesIO\nfrom typing import Any, Dict, Iterator, List, Tuple, Union\n\nimport requests\nimport torch\n\nfrom .....model.utils import select_device\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"DeepseekV2ForCausalLM\")\nclass DeepSeekVL2ChatModel(PytorchMultiModalModel):\n    DEEPSEEK_VL2_ARCHITECTURES = {\"DeepseekV2ForCausalLM\"}\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self._type = None\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not model_family.has_architecture(*cls.DEEPSEEK_VL2_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not DeepSeek-VL2\",\n            )\n        if \"vision\" not in model_family.model_ability:\n            return False, \"DeepSeek-VL2 transformer requires vision ability\"\n        return True\n\n    def decide_device(self):\n        self._device = self._pytorch_model_config.get(\"device\", \"auto\")\n        self._device = select_device(self._device)\n        self._type = torch.bfloat16\n\n    def load_processor(self):\n        from .....thirdparty.deepseek_vl2.models import DeepseekVLV2Processor\n\n        # specify the path to the model\n        self._processor: DeepseekVLV2Processor = DeepseekVLV2Processor.from_pretrained(  # type: ignore\n            self.model_path\n        )\n        self._tokenizer = self._processor.tokenizer\n\n    def load_multimodal_model(self):\n        from transformers import AutoModelForCausalLM\n\n        from .....thirdparty.deepseek_vl2.models import DeepseekVLV2ForCausalLM\n\n        kwargs = self.apply_quantization_config()\n        vl_gpt: DeepseekVLV2ForCausalLM = AutoModelForCausalLM.from_pretrained(  # type: ignore\n            self.model_path,\n            trust_remote_code=True,\n            device_map=self._device,\n            torch_dtype=self._type,\n            **kwargs,\n        )\n        self._model = vl_gpt.cuda().eval()\n\n    @staticmethod\n    def _message_content_to_deepseek(content) -> Tuple[str, List[str]]:\n        def _ensure_url(_url):\n            if _url.startswith(\"data:\"):\n                logging.info(\"Parse url by base64 decoder.\")\n                # https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images\n                # e.g. f\"data:image/jpeg;base64,{base64_image}\"\n                _type, data = _url.split(\";\")\n                _, ext = _type.split(\"/\")\n                data = data[len(\"base64,\") :]\n                data = base64.b64decode(data.encode(\"utf-8\"))\n\n                with tempfile.NamedTemporaryFile(suffix=f\".{ext}\", delete=False) as f:\n                    f.write(data)\n                logging.info(\"Dump base64 data to %s\", f.name)\n                return f.name\n            else:\n                if len(_url) > 2048:\n                    raise Exception(f\"Image url is too long, {len(_url)} > 2048.\")\n\n                return _url\n\n        def _download(_images):\n            local_images = []\n\n            # To make requests.get works\n            headers = {\n                \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\"\n            }\n            with ThreadPoolExecutor() as executor:\n                for url in images:\n                    try:\n                        if os.path.exists(url):\n                            local_images.append(url)\n                            continue\n                    except Exception as e:\n                        logger.debug(\"Image is remote: %s, e: %s\", url, e)\n                        pass\n                    # Append a placeholder\n                    local_images.append(None)\n\n                    def _fill_placeholder(_url, _index):\n                        response = requests.get(url, headers=headers)\n                        local_images[_index] = BytesIO(response.content)\n\n                    executor.submit(_fill_placeholder, url, len(local_images) - 1)\n            return local_images\n\n        if not isinstance(content, str):\n            # TODO(codingl2k1): Optimize _ensure_url\n\n            images = []\n            new_content = []\n            for c in content:\n                c_type = c.get(\"type\")\n                if c_type == \"image_url\":\n                    images.append(_ensure_url(c[\"image_url\"][\"url\"]))\n                elif c_type == \"text\":\n                    new_content.append(c[\"text\"])\n            if images:\n                images = _download(images)\n            return \"\".join(new_content), images\n        return content, []\n\n    def get_stop_strs(self) -> List[str]:\n        conversation = self._processor.new_chat_template()\n        stop_str = conversation.sep2\n        return [stop_str]\n\n    def build_generate_kwargs(self, generate_config: Dict):\n        max_new_tokens = generate_config.get(\"max_tokens\") or 512\n        return {\"max_new_tokens\": max_new_tokens}\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        deepseek_messages = []\n        for i, message in enumerate(messages):\n            role = message[\"role\"]\n            content = message[\"content\"]\n            if role == \"user\":\n                if isinstance(content, str):\n                    deepseek_messages.append(\n                        {\n                            \"role\": \"<|User|>\",\n                            \"content\": \"<image>\\n<|ref|>\" + content + \"<|/ref|>\",\n                        }\n                    )\n                else:\n                    content, images = self._message_content_to_deepseek(content)\n                    msg: Dict[str, Any] = {\n                        \"role\": \"<|User|>\",\n                        \"content\": \"<image>\\n<|ref|>\" + content + \"<|/ref|>\",\n                    }\n                    if images:\n                        msg[\"images\"] = images\n                    deepseek_messages.append(msg)\n                    deepseek_messages.append({\"role\": \"<|Assistant|>\", \"content\": \"\"})\n            elif role == \"assistant\":\n                deepseek_messages.append({\"role\": \"<|Assistant|>\", \"content\": content})\n            else:\n                logger.error(\n                    f\"Unexpected message in messages: role: {role}, message: {message}\"\n                )\n\n        from .....thirdparty.deepseek_vl2.utils.io import load_pil_images\n\n        # load images and prepare for inputs\n        pil_images = load_pil_images(deepseek_messages)\n        prepare_inputs = self._processor(\n            conversations=deepseek_messages,\n            images=pil_images,\n            force_batchify=True,\n            system_prompt=\"\",\n        ).to(self._model.device, self._model.dtype)\n\n        # run image encoder to get the image embeddings\n        inputs_embeds = self._model.prepare_inputs_embeds(**prepare_inputs)\n        return dict(\n            input_ids=prepare_inputs.input_ids,\n            inputs_embeds=inputs_embeds,\n            attention_mask=prepare_inputs.attention_mask,\n            pad_token_id=self._tokenizer.eos_token_id,\n            bos_token_id=self._tokenizer.bos_token_id,\n            eos_token_id=self._tokenizer.eos_token_id,\n        )\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        _inputs = self.build_inputs_from_messages(messages, generate_config)\n        configs = self.build_generate_kwargs(generate_config)\n        streamer = self._model.language.generate(\n            **_inputs,\n            **configs,\n            do_sample=False,\n            use_cache=True,\n        )\n        return streamer, len(_inputs[\"input_ids\"][0])\n\n    def check_conditions(self, new_text: str) -> Tuple[str, bool]:\n        stop_str = self.get_stop_strs()[0]\n        if isinstance(new_text, torch.Tensor):\n            new_text = self._tokenizer.decode(\n                new_text.cpu().tolist(), skip_special_tokens=True\n            )\n\n        if new_text.endswith(stop_str):\n            new_text = new_text[: -len(stop_str)]\n        return new_text, False\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/gemma3.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom threading import Thread\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union\n\nfrom .....model.utils import select_device\nfrom .....types import PytorchModelConfig\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"Gemma3ForConditionalGeneration\")\nclass Gemma3ChatModel(PytorchMultiModalModel):\n    GEMMA3_MM_ARCHITECTURES = {\"Gemma3ForConditionalGeneration\"}\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"bnb\", \"fp4\"]:\n            return (\n                False,\n                \"Gemma-3 multimodal transformer supports pytorch/gptq/awq/bnb/fp4 formats only\",\n            )\n        if not model_family.has_architecture(*cls.GEMMA3_MM_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not Gemma-3-it\",\n            )\n        return True\n\n    def _sanitize_model_config(\n        self, pytorch_model_config: Optional[PytorchModelConfig]\n    ) -> PytorchModelConfig:\n        pytorch_model_config = super()._sanitize_model_config(pytorch_model_config)\n        assert pytorch_model_config is not None\n        pytorch_model_config.setdefault(\"min_pixels\", 256 * 28 * 28)\n        pytorch_model_config.setdefault(\"max_pixels\", 1280 * 28 * 28)\n        return pytorch_model_config\n\n    def decide_device(self):\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        device = select_device(device)\n        self._device = device\n\n    def load_processor(self):\n        from transformers import AutoProcessor\n\n        min_pixels = self._pytorch_model_config.get(\"min_pixels\")\n        max_pixels = self._pytorch_model_config.get(\"max_pixels\")\n        self._processor = AutoProcessor.from_pretrained(\n            self.model_path,\n            min_pixels=min_pixels,\n            max_pixels=max_pixels,\n        )\n        self._tokenizer = self._processor.tokenizer\n\n    def load_multimodal_model(self):\n        from transformers import Gemma3ForConditionalGeneration\n\n        kwargs = self.apply_quantization_config()\n        self._model = Gemma3ForConditionalGeneration.from_pretrained(\n            self.model_path, device_map=\"auto\", torch_dtype=\"bfloat16\", **kwargs\n        )\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        messages = self._transform_messages(messages)\n        inputs = self._processor.apply_chat_template(\n            messages,\n            add_generation_prompt=True,\n            tokenize=True,\n            return_dict=True,\n            return_tensors=\"pt\",\n        ).to(self._device)\n        return inputs\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        return dict(\n            max_new_tokens=generate_config.get(\"max_tokens\") or 512,\n            temperature=generate_config.get(\"temperature\", 1),\n        )\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        from transformers import TextIteratorStreamer\n\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        configs = self.build_generate_kwargs(generate_config)\n\n        tokenizer = self._tokenizer\n        streamer = TextIteratorStreamer(\n            tokenizer, timeout=60.0, skip_prompt=True, skip_special_tokens=True\n        )\n\n        gen_kwargs = {\"streamer\": streamer, **inputs, **configs}\n        t = Thread(target=self._model.generate, kwargs=gen_kwargs)\n        t.start()\n        return streamer, len(inputs.input_ids[0])\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/glm4_1v.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom concurrent.futures import ThreadPoolExecutor\nfrom threading import Thread\nfrom typing import Any, Dict, Iterator, List, Tuple, Union\n\nimport torch\n\nfrom .....model.utils import select_device\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ...utils import _decode_image\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\n    \"Glm4vForConditionalGeneration\",\n    \"Glm4vMoeForConditionalGeneration\",\n)\nclass Glm4_1VModel(PytorchMultiModalModel):\n    GLM4V_ARCHITECTURES = {\n        \"Glm4vForConditionalGeneration\",\n        \"Glm4vMoeForConditionalGeneration\",\n    }\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not model_family.has_architecture(*cls.GLM4V_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not GLM-4.1V/4.5V\",\n            )\n        if \"vision\" not in model_family.model_ability:\n            return False, \"GLM-4.1V transformer requires vision ability\"\n        return True\n\n    def decide_device(self):\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        self._device = select_device(device)\n\n    def load_processor(self):\n        from transformers import AutoProcessor\n\n        self._processor = AutoProcessor.from_pretrained(self.model_path, use_fast=True)\n        self._tokenizer = self._processor.tokenizer\n\n    def load_multimodal_model(self):\n        from transformers import Glm4vForConditionalGeneration\n\n        kwargs = {\"device_map\": \"auto\"}\n        kwargs = self.apply_quantization_config(kwargs)\n\n        model = Glm4vForConditionalGeneration.from_pretrained(\n            self.model_path,\n            torch_dtype=torch.bfloat16,\n            **kwargs,\n        )\n        self._model = model.eval()\n        self._device = self._model.device\n\n    @staticmethod\n    def _get_processed_msgs(messages: List[Dict]) -> List[Dict]:\n        res = []\n        for message in messages:\n            role = message[\"role\"]\n            content = message[\"content\"]\n            if isinstance(content, str):\n                res.append({\"role\": role, \"content\": content})\n            else:\n                texts = []\n                image_urls = []\n                for c in content:\n                    c_type = c.get(\"type\")\n                    if c_type == \"text\":\n                        texts.append(c[\"text\"])\n                    else:\n                        assert (\n                            c_type == \"image_url\"\n                        ), \"Please follow the image input of the OpenAI API.\"\n                        image_urls.append(c[\"image_url\"][\"url\"])\n                if len(image_urls) > 1:\n                    raise RuntimeError(\"Only one image per message is supported\")\n                image_futures = []\n                with ThreadPoolExecutor() as executor:\n                    for image_url in image_urls:\n                        fut = executor.submit(_decode_image, image_url)\n                        image_futures.append(fut)\n                images = [fut.result() for fut in image_futures]\n                assert len(images) <= 1\n                text = \" \".join(texts)\n                if images:\n                    content = [\n                        {\"type\": \"image\", \"image\": images[0]},\n                        {\"type\": \"text\", \"text\": text},\n                    ]\n                    res.append({\"role\": role, \"content\": content})\n                else:\n                    res.append(\n                        {\"role\": role, \"content\": {\"type\": \"text\", \"text\": text}}\n                    )\n        return res\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        msgs = self._get_processed_msgs(messages)\n        chat_template_kwargs = (\n            self._get_chat_template_kwargs_from_generate_config(\n                generate_config, self.reasoning_parser\n            )\n            or {}\n        )\n        tools = generate_config.get(\"tools\", None) if generate_config else None\n        if tools:\n            chat_template_kwargs[\"tools\"] = tools\n        inputs = self._processor.apply_chat_template(\n            msgs,\n            add_generation_prompt=True,\n            tokenize=True,\n            return_tensors=\"pt\",\n            return_dict=True,\n            **chat_template_kwargs,\n        )  # chat mode\n        inputs = inputs.to(self._model.device)\n        return inputs\n\n    def get_stop_strs(self) -> List[str]:\n        return [\"<|endoftext|>\"]\n\n    def get_builtin_stop_token_ids(self) -> Tuple:\n        from transformers import AutoConfig\n\n        return tuple(AutoConfig.from_pretrained(self.model_path).eos_token_id)\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        return dict(\n            do_sample=True,\n            top_p=generate_config.get(\"top_p\", 1e-5),\n            repetition_penalty=generate_config.get(\"repetition_penalty\", 1.1),\n            top_k=generate_config.get(\"top_k\", 2),\n            max_new_tokens=generate_config.get(\"max_tokens\") or 512,\n        )\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        from transformers import TextIteratorStreamer\n\n        generate_kwargs = self.build_generate_kwargs(generate_config)\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        streamer = TextIteratorStreamer(\n            tokenizer=self._tokenizer,\n            timeout=60,\n            skip_prompt=True,\n            skip_special_tokens=False,\n        )\n        kwargs = {\n            **inputs,\n            **generate_kwargs,\n            \"streamer\": streamer,\n        }\n        logger.debug(\"Generate with kwargs: %s\", generate_kwargs)\n        t = Thread(target=self._model.generate, kwargs=kwargs)\n        t.start()\n        return streamer, len(inputs.input_ids[0])\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/glm4v.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nimport typing\nfrom concurrent.futures import ThreadPoolExecutor\nfrom threading import Thread\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union\n\nimport torch\n\nfrom .....core.model import register_batching_multimodal_models\nfrom .....model.utils import select_device\nfrom ....scheduler.request import InferenceRequest\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ...utils import _decode_image\nfrom ..core import register_non_default_model\nfrom ..utils import get_max_src_len\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_batching_multimodal_models(\"glm-4v\")\n@register_transformer\n@register_non_default_model(\"ChatGLMModel\")\nclass Glm4VModel(PytorchMultiModalModel):\n    GLM4V_ARCHITECTURES = {\n        \"Glm4vForConditionalGeneration\",\n        \"Glm4vMoeForConditionalGeneration\",\n    }\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not model_family.has_architecture(*cls.GLM4V_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not GLM-4V\",\n            )\n        if \"vision\" not in model_family.model_ability:\n            return False, \"GLM-4V transformer requires vision ability\"\n        return True\n\n    def decide_device(self):\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        self._device = select_device(device)\n\n    def load_processor(self):\n        from transformers import AutoTokenizer\n\n        self._tokenizer = AutoTokenizer.from_pretrained(\n            self.model_path, trust_remote_code=True\n        )\n\n    def load_multimodal_model(self):\n        from transformers import AutoModelForCausalLM\n\n        kwargs = {\"device_map\": self._device}\n        kwargs = self.apply_quantization_config(kwargs)\n\n        model = AutoModelForCausalLM.from_pretrained(\n            self.model_path,\n            low_cpu_mem_usage=True,\n            trust_remote_code=True,\n            torch_dtype=torch.float16,\n            **kwargs,\n        )\n        self._model = model.eval()\n\n    @staticmethod\n    def _get_processed_msgs(messages: List[Dict]) -> List[Dict]:\n        res = []\n        for message in messages:\n            role = message[\"role\"]\n            content = message[\"content\"]\n            if isinstance(content, str):\n                res.append({\"role\": role, \"content\": content})\n            else:\n                texts = []\n                image_urls = []\n                for c in content:\n                    c_type = c.get(\"type\")\n                    if c_type == \"text\":\n                        texts.append(c[\"text\"])\n                    else:\n                        assert (\n                            c_type == \"image_url\"\n                        ), \"Please follow the image input of the OpenAI API.\"\n                        image_urls.append(c[\"image_url\"][\"url\"])\n                if len(image_urls) > 1:\n                    raise RuntimeError(\"Only one image per message is supported\")\n                image_futures = []\n                with ThreadPoolExecutor() as executor:\n                    for image_url in image_urls:\n                        fut = executor.submit(_decode_image, image_url)\n                        image_futures.append(fut)\n                images = [fut.result() for fut in image_futures]\n                assert len(images) <= 1\n                text = \" \".join(texts)\n                if images:\n                    res.append({\"role\": role, \"content\": text, \"image\": images[0]})\n                else:\n                    res.append({\"role\": role, \"content\": text})\n        return res\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        msgs = self._get_processed_msgs(messages)\n        inputs = self._tokenizer.apply_chat_template(\n            msgs,\n            add_generation_prompt=True,\n            tokenize=True,\n            return_tensors=\"pt\",\n            return_dict=True,\n        )  # chat mode\n        inputs = inputs.to(self._model.device)\n        return inputs\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        return {\n            \"eos_token_id\": [151329, 151336, 151338],\n            \"do_sample\": True,\n            \"max_length\": generate_config.get(\"max_tokens\") or 2048,\n            \"temperature\": generate_config.get(\"temperature\", 0.7),\n        }\n\n    def get_stop_strs(self) -> List[str]:\n        return [\"<|endoftext|>\"]\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        from transformers import TextIteratorStreamer\n\n        generate_kwargs = self.build_generate_kwargs(generate_config)\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        streamer = TextIteratorStreamer(\n            tokenizer=self._tokenizer,\n            timeout=60,\n            skip_prompt=True,\n            skip_special_tokens=True,\n        )\n        kwargs = {\n            **inputs,\n            **generate_kwargs,\n            \"streamer\": streamer,\n        }\n        t = Thread(target=self._model.generate, kwargs=kwargs)\n        t.start()\n        return streamer, len(inputs.input_ids[0])\n\n    def _get_full_prompt(self, messages, tools, generate_config: dict):\n        msgs = self._get_processed_msgs(messages)\n        inputs = self._tokenizer.apply_chat_template(\n            msgs,\n            add_generation_prompt=True,\n            tokenize=True,\n            return_tensors=\"pt\",\n            return_dict=True,\n        )\n        return {\n            \"input_ids\": inputs.input_ids.squeeze(0),\n            \"images\": inputs.images.squeeze(0),\n        }\n\n    def prepare_sanitize_generate_config(self, req: InferenceRequest):\n        \"\"\"\n        Refer to https://huggingface.co/THUDM/glm-4v-9b/blob/main/generation_config.json\n        \"\"\"\n        raw_config = req.inference_kwargs.get(\"raw_params\", {})\n        temperature = raw_config.get(\"temperature\", None)\n        if temperature is None:\n            raw_config[\"temperature\"] = 0.8\n        top_p = raw_config.get(\"top_p\", None)\n        if top_p is None:\n            raw_config[\"top_p\"] = 0.8\n        return raw_config\n\n    def build_prefill_inputs(self, prompts: List, req_list: List[InferenceRequest]):\n        context_len = self.get_context_len()\n        assert isinstance(prompts[0], dict)\n        images = []\n        max_length = float(\"-inf\")\n        for i, feature in enumerate(prompts):\n            req = req_list[i]\n            if \"images\" in feature:\n                images.append(feature.pop(\"images\", None))\n            max_src_len = get_max_src_len(context_len, req)\n            input_ids = feature[\"input_ids\"][-max_src_len:]\n            req.prompt_tokens = input_ids.tolist()\n            feature[\"input_ids\"] = input_ids\n            max_length = max(len(input_ids), max_length)\n\n        def pad_to_max_length_internal(feature, max_len, idx):\n            padding_length = max_len - len(feature[\"input_ids\"])\n            req_list[idx].padding_len = padding_length\n            feature[\"input_ids\"] = torch.cat(\n                [torch.full((padding_length,), 0), feature[\"input_ids\"]]\n            )\n            return feature\n\n        features = [\n            pad_to_max_length_internal(feature, max_length, i)\n            for i, feature in enumerate(prompts)\n        ]\n        batch = {\n            key: torch.stack([feature[key] for feature in features])\n            for key in features[0].keys()\n        }\n        if images:\n            batch[\"images\"] = torch.stack(images).to(self._device)\n        batch[\"input_ids\"] = batch[\"input_ids\"].to(self._device)\n        return batch\n\n    @staticmethod\n    def is_empty(images_list: Optional[List[List[torch.Tensor]]]):\n        \"\"\"\n        Copied from https://huggingface.co/THUDM/glm-4v-9b/blob/main/modeling_chatglm.py\n        \"\"\"\n        if images_list is None or len(images_list) == 0:\n            return True\n        for image_list in images_list:\n            if image_list is not None:\n                return False\n        return True\n\n    @typing.no_type_check\n    def get_full_attention_mask(\n        self, attention_mask, input_ids, images, req_list: List[InferenceRequest]\n    ):\n        \"\"\"\n        Modified according to https://huggingface.co/THUDM/glm-4v-9b/blob/main/modeling_chatglm.py\n        \"\"\"\n        image_size: int = self._model.config.vision_config[\"image_size\"]\n        patch_size: int = self._model.config.vision_config[\"patch_size\"]\n        num_patches = (image_size // patch_size // 2) ** 2\n        new_attention_masks = []\n\n        # if not image, use this default id\n        eoi_token_pos = 6\n        boi_token_pos = 4\n\n        for i in range(len(input_ids)):\n            input_id = input_ids[i].tolist()\n            req = req_list[i]\n            if not self.is_empty(images):\n                _boi_token_pos, _eoi_token_pos = input_id.index(\n                    self._model.config.boi_token_id\n                ), input_id.index(self._model.config.eoi_token_id)\n            else:\n                _boi_token_pos = boi_token_pos + req.padding_len\n                _eoi_token_pos = eoi_token_pos + req.padding_len\n            assert eoi_token_pos - boi_token_pos == 2\n            new_attention_masks.append(\n                torch.cat(\n                    (\n                        attention_mask[i, : _boi_token_pos + 1],\n                        attention_mask.new_ones(num_patches),\n                        attention_mask[i, _eoi_token_pos:],\n                    )\n                )\n            )\n        attention_mask = torch.stack(new_attention_masks, dim=0).to(self._device)\n        return attention_mask\n\n    def build_prefill_kwargs(self, prompts: List, req_list: List[InferenceRequest]):\n        batch = self.build_prefill_inputs(prompts, req_list)\n        batch_size, seq_len = batch[\"input_ids\"].shape\n        attention_mask = self.build_prefill_attention_mask(\n            batch_size, seq_len, req_list\n        )\n        if attention_mask is not None:\n            full_attention_mask = self.get_full_attention_mask(\n                attention_mask, batch[\"input_ids\"], batch[\"images\"], req_list\n            )\n            batch[\"attention_mask\"] = full_attention_mask\n            for r in req_list:\n                r.extra_kwargs[\"attention_mask_seq_len\"] = full_attention_mask.shape[1]\n        position_ids = self.build_prefill_position_ids(batch_size, seq_len, req_list)\n        if position_ids is not None:\n            batch[\"position_ids\"] = position_ids\n        return batch\n\n    def build_decode_attention_mask(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        max_seq_len = max(r.extra_kwargs[\"attention_mask_seq_len\"] for r in reqs)\n\n        new_attention_mask = []\n        for r in reqs:\n            attn_mask_seq_len = r.extra_kwargs[\"attention_mask_seq_len\"]\n            pad_len = max_seq_len - attn_mask_seq_len\n            new_attention_mask.append(\n                torch.cat(\n                    [torch.full((pad_len,), 0), torch.ones((attn_mask_seq_len + 1,))]\n                )\n            )\n            r.extra_kwargs[\"attention_mask_seq_len\"] += 1\n        return torch.stack(new_attention_mask, dim=0).to(self._device)\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/intern_vl.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nimport math\nfrom concurrent.futures import ThreadPoolExecutor\nfrom threading import Thread\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union\n\nimport torch\n\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ...utils import _decode_image, parse_messages\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"InternVLChatModel\")\nclass InternVLChatModel(PytorchMultiModalModel):\n    INTERN_VL_ARCHITECTURES = {\"InternVLChatModel\"}\n\n    IMAGENET_MEAN = (0.485, 0.456, 0.406)\n    IMAGENET_STD = (0.229, 0.224, 0.225)\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not model_family.has_architecture(*cls.INTERN_VL_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not InternVL3\",\n            )\n        if \"vision\" not in model_family.model_ability:\n            return False, \"InternVL transformer requires vision ability\"\n        return True\n\n    def decide_device(self):\n        from transformers import AutoConfig\n\n        device_map = {}\n        world_size = torch.cuda.device_count()\n        # single gpu\n        if world_size == 1:\n            self._device = device_map\n            return\n        config = AutoConfig.from_pretrained(self.model_path, trust_remote_code=True)\n        num_layers = config.llm_config.num_hidden_layers\n\n        # Since the first GPU will be used for ViT, treat it as half a GPU.\n        num_layers_per_gpu = math.ceil(num_layers / (world_size - 0.5))\n        num_layers_per_gpu = [num_layers_per_gpu] * world_size\n        num_layers_per_gpu[0] = math.ceil(num_layers_per_gpu[0] * 0.5)\n        layer_cnt = 0\n        for i, num_layer in enumerate(num_layers_per_gpu):\n            for j in range(num_layer):\n                device_map[f\"language_model.model.layers.{layer_cnt}\"] = i\n                layer_cnt += 1\n        device_map[\"vision_model\"] = 0\n        device_map[\"mlp1\"] = 0\n        device_map[\"language_model.model.tok_embeddings\"] = 0\n        device_map[\"language_model.model.embed_tokens\"] = 0\n        device_map[\"language_model.output\"] = 0\n        device_map[\"language_model.model.norm\"] = 0\n        device_map[\"language_model.lm_head\"] = 0\n        device_map[f\"language_model.model.layers.{num_layers - 1}\"] = 0\n        self._device = device_map\n\n    def load_processor(self):\n        from transformers import AutoTokenizer\n\n        self._tokenizer = AutoTokenizer.from_pretrained(\n            self.model_path, trust_remote_code=True, use_fast=False\n        )\n\n    def load_multimodal_model(self):\n        from transformers import AutoModel\n\n        kwargs: Dict[str, Any] = {  # type: ignore\n            \"torch_dtype\": torch.bfloat16,\n            \"low_cpu_mem_usage\": True,\n            \"trust_remote_code\": True,\n        }\n        if self._device:\n            kwargs[\"device_map\"] = self._device\n        kwargs = self.apply_quantization_config(kwargs)\n\n        self._model = AutoModel.from_pretrained(self.model_path, **kwargs).eval()\n\n        if not self._device and \"none\" in self.quantization.lower():\n            self._model.cuda()\n\n    def _build_transform(self, input_size=448):\n        import torchvision.transforms as T\n        from torchvision.transforms.functional import InterpolationMode\n\n        MEAN, STD = self.IMAGENET_MEAN, self.IMAGENET_STD\n        transform = T.Compose(\n            [\n                T.Lambda(lambda img: img.convert(\"RGB\") if img.mode != \"RGB\" else img),\n                T.Resize(\n                    (input_size, input_size), interpolation=InterpolationMode.BICUBIC\n                ),\n                T.ToTensor(),\n                T.Normalize(mean=MEAN, std=STD),\n            ]\n        )\n        return transform\n\n    # video multi-round conversation\n    @staticmethod\n    def _get_index(bound, fps, max_frame, first_idx=0, num_segments=32):\n        import numpy as np\n\n        if bound:\n            start, end = bound[0], bound[1]\n        else:\n            start, end = -100000, 100000\n        start_idx = max(first_idx, round(start * fps))\n        end_idx = min(round(end * fps), max_frame)\n        seg_size = float(end_idx - start_idx) / num_segments\n        frame_indices = np.array(\n            [\n                int(start_idx + (seg_size / 2) + np.round(seg_size * idx))\n                for idx in range(num_segments)\n            ]\n        )\n        return frame_indices\n\n    def _find_closest_aspect_ratio(\n        self, aspect_ratio, target_ratios, width, height, image_size\n    ):\n        best_ratio_diff = float(\"inf\")\n        best_ratio = (1, 1)\n        area = width * height\n        for ratio in target_ratios:\n            target_aspect_ratio = ratio[0] / ratio[1]\n            ratio_diff = abs(aspect_ratio - target_aspect_ratio)\n            if ratio_diff < best_ratio_diff:\n                best_ratio_diff = ratio_diff\n                best_ratio = ratio\n            elif ratio_diff == best_ratio_diff:\n                if area > 0.5 * image_size * image_size * ratio[0] * ratio[1]:\n                    best_ratio = ratio\n        return best_ratio\n\n    def _dynamic_preprocess(\n        self, image, min_num=1, max_num=12, image_size=448, use_thumbnail=False\n    ):\n        orig_width, orig_height = image.size\n        aspect_ratio = orig_width / orig_height\n\n        # calculate the existing image aspect ratio\n        target_ratios = set(\n            (i, j)\n            for n in range(min_num, max_num + 1)\n            for i in range(1, n + 1)\n            for j in range(1, n + 1)\n            if i * j <= max_num and i * j >= min_num\n        )\n        target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])\n\n        # find the closest aspect ratio to the target\n        target_aspect_ratio = self._find_closest_aspect_ratio(\n            aspect_ratio, target_ratios, orig_width, orig_height, image_size\n        )\n\n        # calculate the target width and height\n        target_width = image_size * target_aspect_ratio[0]\n        target_height = image_size * target_aspect_ratio[1]\n        blocks = target_aspect_ratio[0] * target_aspect_ratio[1]\n\n        # resize the image\n        resized_img = image.resize((target_width, target_height))\n        processed_images = []\n        for i in range(blocks):\n            box = (\n                (i % (target_width // image_size)) * image_size,\n                (i // (target_width // image_size)) * image_size,\n                ((i % (target_width // image_size)) + 1) * image_size,\n                ((i // (target_width // image_size)) + 1) * image_size,\n            )\n            # split the image\n            split_img = resized_img.crop(box)\n            processed_images.append(split_img)\n        assert len(processed_images) == blocks\n        if use_thumbnail and len(processed_images) != 1:\n            thumbnail_img = image.resize((image_size, image_size))\n            processed_images.append(thumbnail_img)\n        return processed_images\n\n    def _load_video(\n        self, video_path, bound=None, input_size=448, max_num=1, num_segments=32\n    ):\n        from decord import VideoReader, cpu\n        from PIL import Image\n\n        vr = VideoReader(video_path, ctx=cpu(0), num_threads=1)\n        max_frame = len(vr) - 1\n        fps = float(vr.get_avg_fps())\n\n        pixel_values_list, num_patches_list = [], []\n        transform = self._build_transform(input_size=input_size)\n        frame_indices = self._get_index(\n            bound, fps, max_frame, first_idx=0, num_segments=num_segments\n        )\n        for frame_index in frame_indices:\n            img = Image.fromarray(vr[frame_index].asnumpy()).convert(\"RGB\")\n            img = self._dynamic_preprocess(\n                img, image_size=input_size, use_thumbnail=True, max_num=max_num\n            )\n            pixel_values = [transform(tile) for tile in img]\n            pixel_values = torch.stack(pixel_values)\n            pixel_values = pixel_values.to(torch.bfloat16).cuda()\n            num_patches_list.append(pixel_values.shape[0])\n            pixel_values_list.append(pixel_values)\n        pixel_values = torch.cat(pixel_values_list)\n        return pixel_values, num_patches_list\n\n    def _message_content_to_intern(self, content, image_cnt):\n        if not isinstance(content, str):\n            texts = []\n            image_urls = []\n            video_urls = []\n            for c in content:\n                c_type = c.get(\"type\")\n                if c_type == \"text\":\n                    texts.append(c[\"text\"])\n                elif c_type == \"image_url\":\n                    image_urls.append(c[\"image_url\"][\"url\"])\n                elif c_type == \"video_url\":\n                    video_urls.append(c[\"video_url\"][\"url\"])\n            if len(video_urls) > 1:\n                raise RuntimeError(\"Only one video per message is supported\")\n            image_futures = []\n            with ThreadPoolExecutor() as executor:\n                for image_url in image_urls:\n                    fut = executor.submit(_decode_image, image_url)\n                    image_futures.append(fut)\n            images = [fut.result() for fut in image_futures]\n            videos = []\n            for vid_url in video_urls:\n                videos.append(self._load_video(vid_url, num_segments=8, max_num=1))\n            prefix = \"\"\n            for i, _ in enumerate(images):\n                prefix += f\"Image-{image_cnt + i + 1}: <image>\\n\\n\"\n\n            if len(videos) > 0:\n                prefix = \"\".join(\n                    [f\"Frame{i + 1}: <image>\\n\" for i in range(len(videos[0][1]))]\n                )\n\n            text = prefix + \" \".join(texts)\n            return text, images, videos\n        return content, [], []\n\n    def _get_prompt_and_chat_history(\n        self,\n        prompt: Union[str, List[Dict]],\n        chat_history: Optional[List[Dict]] = None,\n    ):\n        # Convert openai history to intern vl history\n        images = []\n        videos = []\n        history = []\n        image_cnt = 0\n        for h1, h2 in zip(*[iter(chat_history or [])] * 2):\n            content1, img, vid = self._message_content_to_intern(\n                h1[\"content\"], image_cnt\n            )\n            content2, _, _ = self._message_content_to_intern(h2[\"content\"], image_cnt)\n            history.append([content1, content2])\n            images.extend(img)\n            image_cnt += len(img)\n            videos.extend(vid)\n\n        question, img, vid = self._message_content_to_intern(prompt, image_cnt)\n        images.extend(img)\n        videos.extend(vid)\n        return question, history, images, videos\n\n    def _load_image(self, image_file, input_size=448, max_num=12):\n        image = image_file.convert(\"RGB\")\n        transform = self._build_transform(input_size=input_size)\n        images = self._dynamic_preprocess(\n            image, image_size=input_size, use_thumbnail=True, max_num=max_num\n        )\n        pixel_values = [transform(image) for image in images]\n        pixel_values = torch.stack(pixel_values)\n        return pixel_values\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        from .....thirdparty.internvl.conversation import get_conv_template\n\n        prompt, _, chat_history = parse_messages(messages)\n        content, history, images, videos = self._get_prompt_and_chat_history(\n            prompt, chat_history\n        )\n        num_patches_list = []\n        if len(images) == 1:\n            content = content.replace(\"Image-1: <image>\\n\\n\", \"<image>\\n\")\n            history = [\n                [item[0].replace(\"Image-1: <image>\\n\\n\", \"<image>\\n\"), item[1]]\n                for item in history\n            ]\n            pixel_values = (\n                self._load_image(images[-1], max_num=12).to(torch.bfloat16).cuda()\n            )\n            num_patches_list = (\n                [pixel_values.shape[0]] if pixel_values is not None else []\n            )\n        elif len(images) > 1:\n            pixel_values = [\n                self._load_image(img, max_num=12).to(torch.bfloat16).cuda()\n                for img in images\n            ]\n            num_patches_list = [values.size(0) for values in pixel_values]\n            pixel_values = torch.cat(pixel_values, dim=0)\n        else:\n            pixel_values = None\n\n        if len(videos) > 0:\n            pixel_values = videos[0][0]\n            num_patches_list = videos[0][1]\n\n        assert pixel_values is None or len(pixel_values) == sum(num_patches_list)\n\n        IMG_START_TOKEN = \"<img>\"\n        IMG_END_TOKEN = \"</img>\"\n        IMG_CONTEXT_TOKEN = \"<IMG_CONTEXT>\"\n\n        img_context_token_id = self._tokenizer.convert_tokens_to_ids(IMG_CONTEXT_TOKEN)\n        self._model.img_context_token_id = img_context_token_id\n\n        template = get_conv_template(self._model.template)\n        template.system_message = self._model.system_message\n        eos_token_id = self._tokenizer.convert_tokens_to_ids(template.sep)\n\n        history = [] if history is None else history\n        for old_question, old_answer in history:\n            template.append_message(template.roles[0], old_question)\n            template.append_message(template.roles[1], old_answer)\n        template.append_message(template.roles[0], content)\n        template.append_message(template.roles[1], None)\n        query = template.get_prompt()\n\n        for num_patches in num_patches_list:\n            image_tokens = (\n                IMG_START_TOKEN\n                + IMG_CONTEXT_TOKEN * self._model.num_image_token * num_patches\n                + IMG_END_TOKEN\n            )\n            query = query.replace(\"<image>\", image_tokens, 1)\n\n        model_inputs = self._tokenizer(query, return_tensors=\"pt\")\n        input_ids = model_inputs[\"input_ids\"].cuda()\n        attention_mask = model_inputs[\"attention_mask\"].cuda()\n\n        return {\n            \"pixel_values\": pixel_values,\n            \"input_ids\": input_ids,\n            \"attention_mask\": attention_mask,\n            \"eos_token_id\": eos_token_id,\n        }\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        return {\n            \"max_new_tokens\": generate_config.get(\"max_tokens\") or 1024,\n            \"do_sample\": False,\n            \"temperature\": generate_config.get(\"temperature\", None),\n        }\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        from transformers import TextIteratorStreamer\n\n        # Initialize the streamer\n        streamer = TextIteratorStreamer(\n            self._tokenizer, skip_prompt=True, skip_special_tokens=True, timeout=10\n        )\n\n        configs = self.build_generate_kwargs(generate_config)\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        generate_kwargs = {**inputs, **configs, \"streamer\": streamer}\n        thread = Thread(\n            target=self._model.generate,\n            kwargs=generate_kwargs,\n        )\n        thread.start()\n        return streamer, len(inputs[\"input_ids\"][0])\n\n    def check_conditions(self, new_text: str) -> Tuple[str, bool]:\n        if new_text == self._model.conv_template.sep:\n            return \"\", True\n        return new_text, False\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/minicpmv26.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom concurrent.futures import ThreadPoolExecutor\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union\n\nimport torch\nfrom PIL import Image\n\nfrom .....core.model import register_batching_multimodal_models\nfrom .....model.utils import select_device\nfrom .....types import PytorchModelConfig\nfrom ....scheduler.request import InferenceRequest\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ...utils import _decode_image, parse_messages\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_batching_multimodal_models(\"MiniCPM-V-2.6\")\n@register_transformer\n@register_non_default_model(\"MiniCPMV\")\nclass MiniCPMV26Model(PytorchMultiModalModel):\n    MINICPMV_ARCHITECTURES = {\"MiniCPMV\"}\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not model_family.has_architecture(*cls.MINICPMV_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not MiniCPM-V-2.6\",\n            )\n        if \"vision\" not in model_family.model_ability:\n            return False, \"MiniCPM-V-2.6 transformer requires vision ability\"\n        return True\n\n    def _sanitize_model_config(\n        self, pytorch_model_config: Optional[PytorchModelConfig]\n    ) -> PytorchModelConfig:\n        pytorch_model_config = super()._sanitize_model_config(pytorch_model_config)\n        assert pytorch_model_config is not None\n        pytorch_model_config.setdefault(\"min_pixels\", 256 * 28 * 28)\n        pytorch_model_config.setdefault(\"max_pixels\", 1280 * 28 * 28)\n        return pytorch_model_config\n\n    def decide_device(self):\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        self._device = select_device(device)\n        self._device = (\n            \"auto\"\n            if self._device == \"cuda\" and self.quantization is None\n            else self._device\n        )\n\n    def load_processor(self):\n        from transformers import AutoProcessor, AutoTokenizer\n\n        min_pixels = self._pytorch_model_config.get(\"min_pixels\")\n        max_pixels = self._pytorch_model_config.get(\"max_pixels\")\n        self._processor = AutoProcessor.from_pretrained(\n            self.model_path,\n            trust_remote_code=True,\n            min_pixels=min_pixels,\n            max_pixels=max_pixels,\n        )\n\n        self._tokenizer = AutoTokenizer.from_pretrained(\n            self.model_path, trust_remote_code=True\n        )\n\n    def load_multimodal_model(self):\n        from transformers import AutoModel\n        from transformers.generation import GenerationConfig\n\n        if \"int4\" in self.model_path:\n            model = AutoModel.from_pretrained(self.model_path, trust_remote_code=True)\n        else:\n            kwargs = self.apply_quantization_config()\n            model = AutoModel.from_pretrained(\n                self.model_path,\n                trust_remote_code=True,\n                torch_dtype=torch.float16,\n                device_map=self._device,\n                **kwargs,\n            )\n        self._model = model.eval()\n        # Specify hyperparameters for generation\n        self._model.generation_config = GenerationConfig.from_pretrained(\n            self.model_path,\n            trust_remote_code=True,\n        )\n        self._device = self._model.device\n\n    def _message_content_to_chat(self, content):\n        MAX_NUM_FRAMES = 64\n\n        def encode_video(video_path):\n            from decord import VideoReader, cpu\n\n            def uniform_sample(l, n):\n                gap = len(l) / n\n                idxs = [int(i * gap + gap / 2) for i in range(n)]\n                return [l[i] for i in idxs]\n\n            vr = VideoReader(video_path, ctx=cpu(0))\n            sample_fps = round(vr.get_avg_fps() / 1)  # FPS\n            frame_idx = [i for i in range(0, len(vr), sample_fps)]\n            if len(frame_idx) > MAX_NUM_FRAMES:\n                frame_idx = uniform_sample(frame_idx, MAX_NUM_FRAMES)\n            frames = vr.get_batch(frame_idx).asnumpy()\n            frames = [Image.fromarray(v.astype(\"uint8\")) for v in frames]\n            logger.info(\n                f\"Num frames: {len(frames)} when decoding video for {self.model_uid}\"\n            )\n            return frames\n\n        def _load_video(_url):\n            frames = None\n            if _url.startswith(\"data:\"):\n                raise RuntimeError(\"Only video url format is supported\")\n            else:\n                frames = encode_video(_url)\n            return frames\n\n        if not isinstance(content, str):\n            texts = []\n            image_urls = []\n            video_urls = []\n            for c in content:\n                c_type = c.get(\"type\")\n                if c_type == \"text\":\n                    texts.append(c[\"text\"])\n                elif c_type == \"image_url\":\n                    image_urls.append(c[\"image_url\"][\"url\"])\n                elif c_type == \"video_url\":\n                    video_urls.append(c[\"video_url\"][\"url\"])\n            image_futures = []\n            with ThreadPoolExecutor() as executor:\n                for image_url in image_urls:\n                    fut = executor.submit(_decode_image, image_url)\n                    image_futures.append(fut)\n            images = [fut.result() for fut in image_futures]\n            frames = []\n            if len(video_urls) > 1:\n                raise RuntimeError(\"Only one video per message is supported\")\n            for v in video_urls:\n                frames = _load_video(v)\n            text = \" \".join(texts)\n            return text, images, frames\n        return content, [], []\n\n    def _convert_to_specific_style(self, messages: List[Dict]) -> Tuple:\n        video_existed = False\n        prompt, _, chat_history = parse_messages(messages)\n\n        content, images_chat, video_frames = self._message_content_to_chat(prompt)\n        if len(video_frames) > 0:\n            video_existed = True\n            images_chat = video_frames\n\n        msgs = []\n        query_to_response: List[Dict] = []\n        for h in chat_history or []:\n            images_history = []\n            role = h[\"role\"]\n            content_h, images_tmp, video_frames_h = self._message_content_to_chat(\n                h[\"content\"]\n            )\n            if images_tmp != []:\n                images_history = images_tmp\n            if len(video_frames_h) > 0:\n                video_existed = True\n                images_history = video_frames_h\n            if len(query_to_response) == 0 and role == \"user\":\n                query_to_response.append(\n                    {\"role\": \"user\", \"content\": images_history + [content_h]}\n                )\n            if len(query_to_response) == 1 and role == \"assistant\":\n                query_to_response.append(\n                    {\"role\": \"assistant\", \"content\": images_history + [content_h]}\n                )\n            if len(query_to_response) == 2:\n                msgs.extend(query_to_response)\n                query_to_response = []\n        msgs.append({\"role\": \"user\", \"content\": images_chat + [content]})\n        return msgs, video_existed\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        msgs, video_existed = self._convert_to_specific_style(messages)\n        # Set decode params for video\n        params = {}\n        if video_existed:\n            params = {\"use_image_id\": False, \"max_slice_nums\": 1}\n        return dict(msgs=msgs, image=None, **params)\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        return dict(**generate_config)\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        config = self.build_generate_kwargs(generate_config)\n        chat_iter = self._model.chat(\n            **inputs, **config, tokenizer=self._tokenizer, sampling=True\n        )\n\n        return chat_iter, -1\n\n    def prepare_sanitize_generate_config(self, req: InferenceRequest):\n        \"\"\"\n        Refer to https://huggingface.co/openbmb/MiniCPM-V-2_6/blob/main/modeling_minicpmv.py\n        \"\"\"\n        raw_config = req.inference_kwargs.get(\"raw_params\", {})\n        temperature = raw_config.get(\"temperature\", None)\n        if temperature is None:\n            raw_config[\"temperature\"] = 0.7\n        top_p = raw_config.get(\"top_p\", None)\n        if top_p is None:\n            raw_config[\"top_p\"] = 0.8\n        top_k = raw_config.get(\"top_k\", None)\n        if top_k is None:\n            raw_config[\"top_k\"] = 100\n        repetition_penalty = raw_config.get(\"repetition_penalty\", None)\n        if repetition_penalty is None:\n            raw_config[\"repetition_penalty\"] = 1.05\n        return raw_config\n\n    def _handle_input_ids_and_images(self, msgs: List[Dict]) -> Dict:\n        \"\"\"\n        Copied from https://huggingface.co/openbmb/MiniCPM-V-2_6/blob/main/modeling_minicpmv.py#L315\n        \"\"\"\n        from copy import deepcopy\n\n        copy_msgs = deepcopy(msgs)\n\n        images = []\n        for i, msg in enumerate(copy_msgs):\n            role = msg[\"role\"]\n            content = msg[\"content\"]\n            assert role in [\"user\", \"assistant\"]\n            if i == 0:\n                assert role == \"user\", \"The role of first msg should be user\"\n            if isinstance(content, str):\n                content = [content]\n            cur_msgs = []\n            for c in content:\n                if isinstance(c, Image.Image):\n                    images.append(c)\n                    cur_msgs.append(\"(<image>./</image>)\")\n                elif isinstance(c, str):\n                    cur_msgs.append(c)\n            msg[\"content\"] = \"\\n\".join(cur_msgs)\n\n        return {\n            \"prompt\": self._processor.tokenizer.apply_chat_template(\n                copy_msgs, tokenize=False, add_generation_prompt=True\n            ),\n            \"input_image\": images,\n        }\n\n    def _get_full_prompt(self, messages: List[Dict], tools, generate_config: dict):  # type: ignore\n        msgs, video_existed = self._convert_to_specific_style(messages)\n        if video_existed:\n            raise RuntimeError(\n                f\"Continuous batching does not support video inputs for this model: {self.model_uid}\"\n            )\n        return self._handle_input_ids_and_images(msgs)\n\n    def build_prefill_kwargs(self, prompts: List, req_list: List[InferenceRequest]):\n        prompts_lists = [x[\"prompt\"] for x in prompts]\n        input_images_lists = [x[\"input_image\"] for x in prompts]\n        inputs = self._processor(\n            prompts_lists,\n            input_images_lists,\n            max_slice_nums=None,\n            use_image_id=None,\n            return_tensors=\"pt\",\n            max_length=8192,\n        ).to(self._model.device)\n        inputs.pop(\"image_sizes\")\n\n        masked_input_ids = inputs[\"input_ids\"] * inputs[\"attention_mask\"]\n        for i in range(masked_input_ids.shape[0]):\n            non_zero_values = masked_input_ids[i][masked_input_ids[i] != 0].tolist()\n            req_list[i].prompt_tokens = non_zero_values\n            req_list[i].extra_kwargs[\"attention_mask_seq_len\"] = len(non_zero_values)\n            req_list[i].padding_len = masked_input_ids.shape[1] - len(non_zero_values)\n\n        model_inputs = {\n            \"input_ids\": inputs[\"input_ids\"],\n            \"image_bound\": inputs[\"image_bound\"],\n            \"pixel_values\": inputs[\"pixel_values\"],\n            \"tgt_sizes\": inputs[\"tgt_sizes\"],\n        }\n        model_inputs[\"inputs_embeds\"], _ = self._model.get_vllm_embedding(model_inputs)\n\n        return {\n            \"inputs_embeds\": model_inputs[\"inputs_embeds\"],\n            \"attention_mask\": inputs[\"attention_mask\"],\n        }\n\n    def build_decode_position_ids(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        return None\n\n    def batch_inference(self, req_list: List[InferenceRequest]):\n        \"\"\"\n        This method is rewritten\n        because the specific inference process is performed by `self._model.llm`,\n        not `self._model` itself\n        \"\"\"\n        from ..utils import batch_inference_one_step\n\n        self.prepare_batch_inference(req_list)\n        batch_inference_one_step(\n            self, req_list, self.model_uid, self._model.llm, self._tokenizer\n        )\n        self.handle_batch_inference_results(req_list)\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/minicpmv45.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom concurrent.futures import ThreadPoolExecutor\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union\n\nimport torch\nfrom PIL import Image\n\nfrom .....core.model import register_batching_multimodal_models\nfrom .....model.utils import select_device\nfrom .....types import PytorchModelConfig\nfrom ....scheduler.request import InferenceRequest\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ...utils import _decode_image, parse_messages\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_batching_multimodal_models(\"MiniCPM-V-4.5\")\n@register_transformer\n@register_non_default_model(\"MiniCPMV\")\nclass MiniCPMV45Model(PytorchMultiModalModel):\n    MINICPMV_ARCHITECTURES = {\"MiniCPMV\"}\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not model_family.has_architecture(*cls.MINICPMV_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not MiniCPM-V-4.5\",\n            )\n        if \"vision\" not in model_family.model_ability:\n            return False, \"MiniCPM-V-4.5 transformer requires vision ability\"\n        return True\n\n    def _sanitize_model_config(\n        self, pytorch_model_config: Optional[PytorchModelConfig]\n    ) -> PytorchModelConfig:\n        pytorch_model_config = super()._sanitize_model_config(pytorch_model_config)\n        assert pytorch_model_config is not None\n        # Configure pixel parameters for MiniCPM-V-4.5\n        pytorch_model_config.setdefault(\"min_pixels\", 256 * 28 * 28)\n        pytorch_model_config.setdefault(\"max_pixels\", 1280 * 28 * 28)\n        return pytorch_model_config\n\n    def decide_device(self):\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        self._device = select_device(device)\n        self._device = (\n            \"auto\"\n            if self._device == \"cuda\" and self.quantization is None\n            else self._device\n        )\n\n    def load_processor(self):\n        from transformers import AutoProcessor, AutoTokenizer\n\n        min_pixels = self._pytorch_model_config.get(\"min_pixels\")\n        max_pixels = self._pytorch_model_config.get(\"max_pixels\")\n        self._processor = AutoProcessor.from_pretrained(\n            self.model_path,\n            trust_remote_code=True,\n            min_pixels=min_pixels,\n            max_pixels=max_pixels,\n        )\n\n        self._tokenizer = AutoTokenizer.from_pretrained(\n            self.model_path, trust_remote_code=True\n        )\n\n    def load_multimodal_model(self):\n        from transformers import AutoModel\n        from transformers.generation import GenerationConfig\n\n        if \"int4\" in self.model_path:\n            model = AutoModel.from_pretrained(self.model_path, trust_remote_code=True)\n        else:\n            kwargs = self.apply_quantization_config()\n            model = AutoModel.from_pretrained(\n                self.model_path,\n                trust_remote_code=True,\n                torch_dtype=torch.float16,\n                device_map=self._device,\n                **kwargs,\n            )\n        self._model = model.eval()\n        # Specify hyperparameters for generation\n        self._model.generation_config = GenerationConfig.from_pretrained(\n            self.model_path,\n            trust_remote_code=True,\n        )\n        self._device = self._model.device\n\n    def _message_content_to_chat(self, content):\n        MAX_NUM_FRAMES = 64\n\n        def encode_video(video_path):\n            from decord import VideoReader, cpu\n\n            def uniform_sample(l, n):\n                gap = len(l) / n\n                idxs = [int(i * gap + gap / 2) for i in range(n)]\n                return [l[i] for i in idxs]\n\n            vr = VideoReader(video_path, ctx=cpu(0))\n            sample_fps = round(vr.get_avg_fps() / 1)  # FPS\n            frame_idx = [i for i in range(0, len(vr), sample_fps)]\n            if len(frame_idx) > MAX_NUM_FRAMES:\n                frame_idx = uniform_sample(frame_idx, MAX_NUM_FRAMES)\n            frames = vr.get_batch(frame_idx).asnumpy()\n            frames = [Image.fromarray(v.astype(\"uint8\")) for v in frames]\n            logger.info(\n                f\"Num frames: {len(frames)} when decoding video for {self.model_uid}\"\n            )\n            return frames\n\n        def _load_video(_url):\n            frames = None\n            if _url.startswith(\"data:\"):\n                raise RuntimeError(\"Only video url format is supported\")\n            else:\n                frames = encode_video(_url)\n            return frames\n\n        if not isinstance(content, str):\n            texts = []\n            image_urls = []\n            video_urls = []\n            for c in content:\n                c_type = c.get(\"type\")\n                if c_type == \"text\":\n                    texts.append(c[\"text\"])\n                elif c_type == \"image_url\":\n                    image_urls.append(c[\"image_url\"][\"url\"])\n                elif c_type == \"video_url\":\n                    video_urls.append(c[\"video_url\"][\"url\"])\n            image_futures = []\n            with ThreadPoolExecutor() as executor:\n                for image_url in image_urls:\n                    fut = executor.submit(_decode_image, image_url)\n                    image_futures.append(fut)\n            images = [fut.result() for fut in image_futures]\n            frames = []\n            if len(video_urls) > 1:\n                raise RuntimeError(\"Only one video per message is supported\")\n            for v in video_urls:\n                frames = _load_video(v)\n            text = \" \".join(texts)\n            return text, images, frames\n        return content, [], []\n\n    def _convert_to_specific_style(self, messages: List[Dict]) -> Tuple:\n        video_existed = False\n        prompt, _, chat_history = parse_messages(messages)\n\n        content, images_chat, video_frames = self._message_content_to_chat(prompt)\n        if len(video_frames) > 0:\n            video_existed = True\n            images_chat = video_frames\n\n        msgs = []\n        query_to_response: List[Dict] = []\n        for h in chat_history or []:\n            images_history = []\n            role = h[\"role\"]\n            content_h, images_tmp, video_frames_h = self._message_content_to_chat(\n                h[\"content\"]\n            )\n            if images_tmp != []:\n                images_history = images_tmp\n            if len(video_frames_h) > 0:\n                video_existed = True\n                images_history = video_frames_h\n            if len(query_to_response) == 0 and role == \"user\":\n                query_to_response.append(\n                    {\"role\": \"user\", \"content\": images_history + [content_h]}\n                )\n            if len(query_to_response) == 1 and role == \"assistant\":\n                query_to_response.append(\n                    {\"role\": \"assistant\", \"content\": images_history + [content_h]}\n                )\n            if len(query_to_response) == 2:\n                msgs.extend(query_to_response)\n                query_to_response = []\n        msgs.append({\"role\": \"user\", \"content\": images_chat + [content]})\n        return msgs, video_existed\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        msgs, video_existed = self._convert_to_specific_style(messages)\n        # Set decode params for video\n        params = {}\n        if video_existed:\n            params = {\"use_image_id\": False, \"max_slice_nums\": 1}\n        return dict(msgs=msgs, image=None, **params)\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        return dict(**generate_config)\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        config = self.build_generate_kwargs(generate_config)\n        chat_iter = self._model.chat(\n            **inputs, **config, tokenizer=self._tokenizer, sampling=True\n        )\n\n        return chat_iter, -1\n\n    def prepare_sanitize_generate_config(self, req: InferenceRequest):\n        \"\"\"\n        Refer to MiniCPM-V-4.5 documentation for generation parameters\n        \"\"\"\n        raw_config = req.inference_kwargs.get(\"raw_params\", {})\n        temperature = raw_config.get(\"temperature\", None)\n        if temperature is None:\n            raw_config[\"temperature\"] = 0.7\n        top_p = raw_config.get(\"top_p\", None)\n        if top_p is None:\n            raw_config[\"top_p\"] = 0.8\n        top_k = raw_config.get(\"top_k\", None)\n        if top_k is None:\n            raw_config[\"top_k\"] = 100\n        repetition_penalty = raw_config.get(\"repetition_penalty\", None)\n        if repetition_penalty is None:\n            raw_config[\"repetition_penalty\"] = 1.05\n        return raw_config\n\n    def _handle_input_ids_and_images(self, msgs: List[Dict]) -> Dict:\n        \"\"\"\n        Handle input IDs and images for MiniCPM-V-4.5\n        Based on MiniCPM-V-2.6 implementation with adaptations for 4.5\n        \"\"\"\n        from copy import deepcopy\n\n        copy_msgs = deepcopy(msgs)\n\n        images = []\n        for i, msg in enumerate(copy_msgs):\n            role = msg[\"role\"]\n            content = msg[\"content\"]\n            assert role in [\"user\", \"assistant\"]\n            if i == 0:\n                assert role == \"user\", \"The role of first msg should be user\"\n            if isinstance(content, str):\n                content = [content]\n            cur_msgs = []\n            for c in content:\n                if isinstance(c, Image.Image):\n                    images.append(c)\n                    cur_msgs.append(\"(<image>./</image>)\")\n                elif isinstance(c, str):\n                    cur_msgs.append(c)\n            msg[\"content\"] = \"\\n\".join(cur_msgs)\n\n        return {\n            \"prompt\": self._processor.tokenizer.apply_chat_template(\n                copy_msgs, tokenize=False, add_generation_prompt=True\n            ),\n            \"input_image\": images,\n        }\n\n    def _get_full_prompt(self, messages: List[Dict], tools, generate_config: dict):  # type: ignore\n        msgs, video_existed = self._convert_to_specific_style(messages)\n        if video_existed:\n            raise RuntimeError(\n                f\"Continuous batching does not support video inputs for this model: {self.model_uid}\"\n            )\n        return self._handle_input_ids_and_images(msgs)\n\n    def build_prefill_kwargs(self, prompts: List, req_list: List[InferenceRequest]):\n        prompts_lists = [x[\"prompt\"] for x in prompts]\n        input_images_lists = [x[\"input_image\"] for x in prompts]\n        inputs = self._processor(\n            prompts_lists,\n            input_images_lists,\n            max_slice_nums=None,\n            use_image_id=None,\n            return_tensors=\"pt\",\n            max_length=8192,\n        ).to(self._model.device)\n        inputs.pop(\"image_sizes\")\n\n        masked_input_ids = inputs[\"input_ids\"] * inputs[\"attention_mask\"]\n        for i in range(masked_input_ids.shape[0]):\n            non_zero_values = masked_input_ids[i][masked_input_ids[i] != 0].tolist()\n            req_list[i].prompt_tokens = non_zero_values\n            req_list[i].extra_kwargs[\"attention_mask_seq_len\"] = len(non_zero_values)\n            req_list[i].padding_len = masked_input_ids.shape[1] - len(non_zero_values)\n\n        model_inputs = {\n            \"input_ids\": inputs[\"input_ids\"],\n            \"image_bound\": inputs[\"image_bound\"],\n            \"pixel_values\": inputs[\"pixel_values\"],\n            \"tgt_sizes\": inputs[\"tgt_sizes\"],\n        }\n        model_inputs[\"inputs_embeds\"], _ = self._model.get_vllm_embedding(model_inputs)\n\n        return {\n            \"inputs_embeds\": model_inputs[\"inputs_embeds\"],\n            \"attention_mask\": inputs[\"attention_mask\"],\n        }\n\n    def build_decode_position_ids(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        return None\n\n    def batch_inference(self, req_list: List[InferenceRequest]):\n        \"\"\"\n        This method is rewritten\n        because the specific inference process is performed by `self._model.llm`,\n        not `self._model` itself\n        \"\"\"\n        from ..utils import batch_inference_one_step\n\n        self.prepare_batch_inference(req_list)\n        batch_inference_one_step(\n            self, req_list, self.model_uid, self._model.llm, self._tokenizer\n        )\n        self.handle_batch_inference_results(req_list)\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/ovis2.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom threading import Thread\nfrom typing import Any, Dict, Iterator, List, Tuple, Union\n\nimport torch\nfrom PIL import Image\n\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"Ovis\")\nclass Ovis2ChatModel(PytorchMultiModalModel):\n    OVIS_ARCHITECTURES = {\"Ovis\"}\n\n    def __init__(self, *args, **kws):\n        super().__init__(*args, **kws)\n        self._text_tokenizer = None\n        self._visual_tokenizer = None\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"bnb\", \"fp4\"]:\n            return (\n                False,\n                \"Ovis2 transformer supports pytorch/gptq/awq/bnb/fp4 formats only\",\n            )\n        if not model_family.has_architecture(*cls.OVIS_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not Ovis2\",\n            )\n        if \"vision\" not in model_family.model_ability:\n            return False, \"Ovis2 transformer requires vision ability\"\n        return True\n\n    def decide_device(self):\n        pass\n\n    def load_processor(self):\n        pass\n\n    def load_multimodal_model(self):\n        from transformers import AutoModelForCausalLM\n\n        kwargs = self.apply_quantization_config()\n        self._model = AutoModelForCausalLM.from_pretrained(\n            self.model_path,\n            torch_dtype=torch.bfloat16,\n            multimodal_max_length=32768,\n            trust_remote_code=True,\n            **kwargs,\n        ).cuda()\n        self._text_tokenizer = self._model.get_text_tokenizer()\n        self._visual_tokenizer = self._model.get_visual_tokenizer()\n\n    @staticmethod\n    def _parse_messages_ovis(messages: List[Dict]) -> List[Dict]:\n        ovis_msgs = []\n        for mess in messages:\n            contents = mess[\"content\"]\n            role = mess[\"role\"]\n            if role == \"user\":\n                role = \"human\"\n            elif role == \"assistant\":\n                role = \"gpt\"\n            elif role == \"system\":\n                role = \"system\"\n\n            for content in contents:\n                if content[\"type\"] == \"text\":\n                    ovis_msgs.append({\"from\": role, \"value\": content[\"text\"]})\n\n        return ovis_msgs\n\n    @staticmethod\n    def _convert_video_tensors_to_pil(video_inputs: List) -> List[Image.Image]:\n        \"\"\"Convert video tensors to a list of PIL images\"\"\"\n        from torchvision import transforms\n\n        to_pil = transforms.ToPILImage()\n        pil_images = []\n\n        for video_tensor_4d in video_inputs:\n            if isinstance(video_tensor_4d, torch.Tensor):\n                # Verify it's a 4D tensor\n                if video_tensor_4d.ndim == 4:\n                    # Iterate through the first dimension (frames) of 4D tensor\n                    for i in range(video_tensor_4d.size(0)):\n                        frame_tensor_3d = video_tensor_4d[\n                            i\n                        ]  # Get 3D frame tensor [C, H, W]\n                        # Ensure tensor is on CPU before conversion\n                        if frame_tensor_3d.is_cuda:\n                            frame_tensor_3d = frame_tensor_3d.cpu()\n                        try:\n                            pil_image = to_pil(frame_tensor_3d)\n                            pil_images.append(pil_image)\n                        except Exception as e:\n                            logger.error(\n                                f\"Error converting frame {i} to PIL Image: {e}\"\n                            )\n                            # Can choose to skip this frame or handle error differently\n                else:\n                    logger.warning(\n                        f\"Expected 4D tensor in video_inputs, but got {video_tensor_4d.ndim}D. Skipping this tensor.\"\n                    )\n            elif isinstance(video_tensor_4d, Image.Image):\n                # If fetch_video returns Image list, add directly\n                pil_images.append(video_tensor_4d)\n            else:\n                logger.warning(\n                    f\"Unexpected type in video_inputs: {type(video_tensor_4d)}. Skipping.\"\n                )\n\n        return pil_images\n\n    def _generate_chat_data(self, messages: List[Dict]):\n        from qwen_vl_utils import process_vision_info\n\n        messages_ovis = self._parse_messages_ovis(messages)\n        max_partition = None\n        prompt = messages_ovis[-1][\"value\"]\n\n        # Preparation for inference\n        image_inputs, video_inputs = process_vision_info(messages)\n\n        image_inputs = image_inputs if image_inputs else []\n\n        if image_inputs and len(image_inputs) > 0:\n            if len(image_inputs) == 1:\n                max_partition = 9\n                prompt = f\"<image>\\n{prompt}\"\n            else:\n                max_partition = len(image_inputs) + 1\n                prompt = (\n                    \"\\n\".join(\n                        [f\"Image {i+1}: <image>\" for i in range(len(image_inputs))]\n                    )\n                    + \"\\n\"\n                    + prompt\n                )\n        elif video_inputs and len(video_inputs) > 0:\n            if isinstance(video_inputs[0], torch.Tensor):\n                # Convert from list[Tensor] to list[Image]\n                pil_images = self._convert_video_tensors_to_pil(video_inputs)\n\n                video_inputs = pil_images  # Update video_inputs to PIL image list\n\n            max_partition = 1\n            image_inputs = video_inputs\n            prompt = \"\\n\".join([\"<image>\"] * len(video_inputs)) + \"\\n\" + prompt\n        else:\n            max_partition = 0\n            prompt = prompt\n\n        messages_ovis[-1][\"value\"] = prompt\n\n        # format conversation\n        prompt, input_ids, pixel_values = self._model.preprocess_inputs(\n            messages_ovis, image_inputs, max_partition=max_partition\n        )\n\n        attention_mask = torch.ne(input_ids, self._text_tokenizer.pad_token_id)\n        input_ids = input_ids.unsqueeze(0).to(device=self._model.device)\n        attention_mask = attention_mask.unsqueeze(0).to(device=self._model.device)\n        if pixel_values is not None:\n            pixel_values = pixel_values.to(\n                dtype=self._visual_tokenizer.dtype, device=self._visual_tokenizer.device\n            )\n        pixel_values = [pixel_values]\n\n        return input_ids, attention_mask, pixel_values\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        return dict(\n            max_new_tokens=generate_config.get(\"max_tokens\") or 1024,\n            do_sample=False,\n            top_p=None,\n            top_k=None,\n            temperature=generate_config.get(\"temperature\", None),\n            repetition_penalty=None,\n            eos_token_id=self._model.generation_config.eos_token_id,\n            pad_token_id=self._text_tokenizer.pad_token_id,\n            use_cache=True,\n        )\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        msgs = self._transform_messages(messages)\n        input_ids, attention_mask, pixel_values = self._generate_chat_data(msgs)\n        _, inputs_embeds, _, attention_mask = self._model.merge_multimodal(\n            text_input_ids=input_ids,\n            text_attention_masks=attention_mask,\n            text_labels=None,\n            pixel_values=pixel_values,\n            left_padding=True,\n        )\n        inputs_embeds = inputs_embeds.detach()\n        torch.cuda.empty_cache()\n        return dict(\n            input_ids=input_ids,\n            inputs_embeds=inputs_embeds,\n            attention_mask=attention_mask,\n        )\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        from transformers import TextIteratorStreamer\n\n        streamer = TextIteratorStreamer(\n            self._text_tokenizer, timeout=60, skip_prompt=True, skip_special_tokens=True\n        )\n        config = self.build_generate_kwargs(generate_config)\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        input_ids = inputs.pop(\"input_ids\")\n\n        gen_kwargs = dict(**inputs, **config, streamer=streamer)\n\n        thread = Thread(target=self._model.llm.generate, kwargs=gen_kwargs)\n        thread.start()\n        return streamer, len(input_ids[0])\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/qwen-omni.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport base64\nimport io\nimport logging\nimport time\nimport uuid\nfrom threading import Thread\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union\n\nimport torch\n\nfrom .....types import (\n    ChatCompletion,\n    ChatCompletionAudio,\n    ChatCompletionChoice,\n    CompletionUsage,\n)\nfrom ....utils import is_flash_attn_available, select_device\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ..core import PytorchGenerateConfig, register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\n    \"Qwen2_5OmniModel\",\n    \"Qwen3OmniMoeForConditionalGeneration\",\n)\nclass QwenOmniChatModel(PytorchMultiModalModel):\n    QWEN_OMNI_ARCHITECTURES = {\n        \"Qwen2_5OmniModel\",\n        \"Qwen3OmniMoeForConditionalGeneration\",\n    }\n    DEFAULT_SYSTEM_PROMPT = (\n        \"You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, \"\n        \"capable of perceiving auditory and visual inputs, as well as generating text and speech.\"\n    )\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        # 2.5 or 3\n        if self.model_family.has_architecture(\"Qwen2_5OmniModel\"):\n            self._omni_version = \"2.5\"\n        else:\n            self._omni_version = \"3\"\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"bnb\", \"fp4\"]:\n            return (\n                False,\n                \"Qwen Omni transformer supports pytorch/gptq/awq/bnb/fp4 formats only\",\n            )\n        if not model_family.has_architecture(*cls.QWEN_OMNI_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not Qwen Omni\",\n            )\n        abilities = model_family.model_ability\n        if (\n            \"omni\" not in abilities\n            and \"vision\" not in abilities\n            and \"audio\" not in abilities\n        ):\n            return (\n                False,\n                \"Qwen Omni transformer requires omni, vision, or audio ability\",\n            )\n        return True\n\n    def decide_device(self):\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        device = select_device(device)\n        self._device = device\n\n    def load_processor(self):\n        if self._omni_version == \"2.5\":\n            from transformers import Qwen2_5OmniProcessor as QwenOminiProcessor\n        else:\n            from transformers import Qwen3OmniMoeProcessor as QwenOminiProcessor\n\n        self._processor = QwenOminiProcessor.from_pretrained(\n            self.model_path, trust_remote_code=True\n        )\n        self._tokenizer = self._processor.tokenizer\n\n    def load_multimodal_model(self):\n        if self._omni_version == \"2.5\":\n            from transformers import (\n                Qwen2_5OmniForConditionalGeneration as QwenOmniForConditionalGeneration,\n            )\n        else:\n            from transformers import (\n                Qwen3OmniMoeForConditionalGeneration as QwenOmniForConditionalGeneration,\n            )\n\n        # for multiple GPU, set back to auto to make multiple devices work\n        device = \"auto\" if self._device == \"cuda\" else self._device\n        kwargs = {}\n        enable_flash_attn = self._pytorch_model_config.get(\n            \"enable_flash_attn\", is_flash_attn_available()\n        )\n        if enable_flash_attn:\n            kwargs[\"attn_implementation\"] = \"flash_attention_2\"\n        kwargs = self.apply_quantization_config(kwargs)\n        logger.debug(\"Loading model with extra kwargs: %s\", kwargs)\n\n        self._model = QwenOmniForConditionalGeneration.from_pretrained(\n            self.model_path,\n            torch_dtype=\"auto\",\n            device_map=device,\n            trust_remote_code=True,\n            **kwargs,\n        )\n\n    def _transform_messages(\n        self,\n        messages: List[dict],  # type: ignore\n    ):\n        messages = super()._transform_messages(messages)\n        if messages[0][\"role\"] != \"system\":\n            messages.insert(\n                0,\n                {\n                    \"role\": \"system\",\n                    \"content\": [{\"type\": \"text\", \"text\": self.DEFAULT_SYSTEM_PROMPT}],  # type: ignore\n                },\n            )\n        else:\n            logger.debug(\"Force to set system prompt\")\n            messages[0][\"content\"] = [{\"type\": \"text\", \"text\": self.DEFAULT_SYSTEM_PROMPT}]  # type: ignore\n        return messages\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        from qwen_omni_utils import process_mm_info\n\n        use_audio_in_video = generate_config.get(\"use_audio_in_video\", True)\n\n        messages = self._transform_messages(messages)\n        text = self._processor.apply_chat_template(\n            messages, tokenize=False, add_generation_prompt=True\n        )\n        audios, images, videos = process_mm_info(\n            messages, use_audio_in_video=use_audio_in_video\n        )\n        logger.debug(\n            \"Text, audio, image, video: %s, %s, %s, %s\", text, audios, images, videos\n        )\n        inputs = self._processor(\n            text=text,\n            images=images,\n            audio=audios,\n            videos=videos,\n            padding=True,\n            return_tensors=\"pt\",\n            use_audio_in_video=use_audio_in_video,\n        )\n        inputs = inputs.to(self._device)\n        return inputs\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        voice = generate_config.get(\"voice\", \"Chelsie\")\n        return {\n            \"max_new_tokens\": generate_config.get(\"max_tokens\") or 512,\n            \"temperature\": generate_config.get(\"temperature\", 1),\n            \"speaker\": voice,\n        }\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        from transformers import TextIteratorStreamer\n\n        tokenizer = self._tokenizer\n        streamer = TextIteratorStreamer(\n            tokenizer, timeout=60.0, skip_prompt=True, skip_special_tokens=True\n        )\n\n        config = self.build_generate_kwargs(generate_config)\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        gen_kwargs = dict(**inputs, **config, streamer=streamer)\n        thread = Thread(target=self._model.generate, kwargs=gen_kwargs)\n        thread.start()\n        return streamer, len(inputs.input_ids[0])\n\n    def generate_non_streaming(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[PytorchGenerateConfig] = None,\n    ) -> ChatCompletion:\n        \"\"\"\n        Special case for qwen2.5-omni, since it has audio output\n        \"\"\"\n        import soundfile as sf\n\n        generate_config = generate_config if generate_config else {}  # type: ignore\n        config = self.build_generate_kwargs(generate_config)  # type: ignore\n        inputs = self.build_inputs_from_messages(messages, generate_config)  # type: ignore\n        use_audio_in_video = generate_config.get(\"use_audio_in_video\", True)\n        gen_kwargs = dict(**inputs, **config, use_audio_in_video=use_audio_in_video)\n        # === Run model.generate() (handle both (ids, audio) and ids-only cases) ===\n        result = self._model.generate(**gen_kwargs)\n        if isinstance(result, tuple) and len(result) == 2:\n            # Qwen2.5-Omni returns (generated_ids, audio)\n            generated_ids, audio = result\n        else:\n            # Qwen3-Omni returns only generated_ids\n            generated_ids, audio = result, None\n        if hasattr(generated_ids, \"sequences\"):\n            generated_ids = generated_ids.sequences\n\n        # === Handle text decoding ===\n        input_len = inputs.input_ids.shape[1]\n        # Ensure we have a consistent 2D structure\n        # Normalize to list[list[int]]\n        if isinstance(generated_ids, torch.Tensor):\n            generated_ids = generated_ids.tolist()\n        elif isinstance(generated_ids, list) and all(\n            isinstance(x, int) for x in generated_ids\n        ):\n            # Single sequence as flat list of ints\n            generated_ids = [generated_ids]\n        elif isinstance(generated_ids, list) and all(\n            isinstance(x, list) for x in generated_ids\n        ):\n            pass  # already correct\n        else:\n            raise TypeError(f\"Unexpected generated_ids type: {type(generated_ids)}\")\n\n        # Remove prompt tokens\n        generated_ids_trimmed = [out_ids[input_len:] for out_ids in generated_ids]\n        output_text = self._processor.batch_decode(\n            generated_ids_trimmed,\n            skip_special_tokens=True,\n            clean_up_tokenization_spaces=False,\n        )[0]\n\n        wav_io = io.BytesIO()\n        sf.write(\n            wav_io,\n            audio.reshape(-1).detach().cpu().numpy(),\n            samplerate=24000,\n            format=\"WAV\",\n        )\n        wav_bytes = wav_io.getvalue()\n        audio_content = base64.b64encode(wav_bytes).decode()\n\n        return ChatCompletion(\n            id=\"chat\" + str(uuid.uuid1()),\n            object=\"chat.completion\",\n            created=int(time.time()),\n            model=self.model_uid,\n            choices=[\n                ChatCompletionChoice(\n                    index=0,\n                    message={\n                        \"role\": \"assistant\",\n                        \"content\": output_text,\n                        \"audio\": ChatCompletionAudio(\n                            id=\"audio\" + str(uuid.uuid1()),\n                            data=audio_content,\n                            expires_at=int(time.time()),\n                            transcript=\"\",\n                        ),\n                    },\n                    finish_reason=\"stop\",\n                )\n            ],\n            usage=CompletionUsage(\n                prompt_tokens=-1, completion_tokens=-1, total_tokens=-1\n            ),\n        )\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/qwen2_audio.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom io import BytesIO\nfrom threading import Thread\nfrom typing import Any, Dict, Iterator, List, Tuple, Union\nfrom urllib.request import urlopen\n\nimport numpy as np\n\nfrom .....model.utils import select_device\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_transformer\n@register_non_default_model(\"Qwen2AudioForConditionalGeneration\")\nclass Qwen2AudioChatModel(PytorchMultiModalModel):\n    QWEN2_AUDIO_ARCHITECTURES = {\"Qwen2AudioForConditionalGeneration\"}\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if not model_family.has_architecture(*cls.QWEN2_AUDIO_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not Qwen2-Audio\",\n            )\n        if \"audio\" not in model_family.model_ability:\n            return False, \"Qwen2-Audio transformer requires audio ability\"\n        return True\n\n    def decide_device(self):\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        self._device = select_device(device)\n\n    def load_processor(self):\n        from transformers import AutoProcessor\n\n        self._processor = AutoProcessor.from_pretrained(\n            self.model_path,\n            device_map=\"auto\" if self._device == \"cuda\" else self._device,\n            # trust_remote_code=True,\n            code_revision=self.model_spec.model_revision,\n        )\n\n        self._tokenizer = self._processor.tokenizer\n\n    def load_multimodal_model(self):\n        from transformers import Qwen2AudioForConditionalGeneration\n\n        kwargs = self.apply_quantization_config()\n        self._model = Qwen2AudioForConditionalGeneration.from_pretrained(\n            self.model_path,\n            device_map=\"auto\" if self._device == \"cuda\" else self._device,\n            # trust_remote_code=True,\n            revision=self.model_spec.model_revision,\n            **kwargs,\n        )\n\n    def _transform_messages(\n        self,\n        messages: List[dict],  # type: ignore\n    ):\n        import librosa\n\n        text = self._processor.apply_chat_template(\n            messages, add_generation_prompt=True, tokenize=False\n        )\n        audios: List[np.ndarray] = []\n        for msg in messages:\n            content = msg[\"content\"]\n            if isinstance(content, List):\n                for item in content:  # type: ignore\n                    if item.get(\"type\") == \"audio\" and \"audio_url\" in item:\n                        audio = librosa.load(\n                            BytesIO(urlopen(item[\"audio_url\"][\"url\"]).read()),\n                            sr=self._processor.feature_extractor.sampling_rate,\n                        )[0]\n                        audios.append(audio)\n\n        return text, audios\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        text, audios = self._transform_messages(messages)\n        inputs = self._processor(\n            text=text, audios=audios, return_tensors=\"pt\", padding=True\n        )\n        # Make sure that the inputs and the model are on the same device.\n        inputs.data = {k: v.to(self._device) for k, v in inputs.data.items()}\n        inputs.input_ids = inputs.input_ids.to(self._device)\n        return inputs\n\n    def build_generate_kwargs(\n        self,\n        generate_config: Dict,\n    ) -> Dict[str, Any]:\n        return dict(max_length=generate_config.get(\"max_tokens\") or 512)\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        from transformers import TextIteratorStreamer\n\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        config = self.build_generate_kwargs(generate_config)\n\n        tokenizer = self._processor.tokenizer\n        streamer = TextIteratorStreamer(\n            tokenizer, timeout=60.0, skip_prompt=True, skip_special_tokens=True\n        )\n\n        gen_kwargs = {\"streamer\": streamer, **inputs, **config}\n        thread = Thread(target=self._model.generate, kwargs=gen_kwargs)\n        thread.start()\n        return streamer, len(inputs.input_ids[0])\n"
  },
  {
    "path": "xinference/model/llm/transformers/multimodal/qwen2_vl.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom typing import Any, Dict, Iterator, List, Optional, Tuple, Union\n\nfrom .....core.model import register_batching_multimodal_models\nfrom .....device_utils import is_npu_available\nfrom .....types import PytorchModelConfig\nfrom ....scheduler.request import InferenceRequest\nfrom ....utils import is_flash_attn_available, select_device\nfrom ...llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom ..core import register_non_default_model\nfrom .core import PytorchMultiModalModel\n\nlogger = logging.getLogger(__name__)\n\n\n@register_batching_multimodal_models(\n    \"qwen2-vl-instruct\",\n    \"qwen2.5-vl-instruct\",\n    \"QvQ-72B-Preview\",\n    \"Qwen3-VL-Instruct\",\n    \"Qwen3-VL-Thinking\",\n    \"qwen3.5\",\n)\n@register_transformer\n@register_non_default_model(\n    \"Qwen2VLForConditionalGeneration\",\n    \"Qwen2_5_VLForConditionalGeneration\",\n    \"Qwen3VLMoeForConditionalGeneration\",\n    \"Qwen3_5ForConditionalGeneration\",\n)\nclass Qwen2VLChatModel(PytorchMultiModalModel):\n    QWEN2_VL_ARCHITECTURES = {\n        \"Qwen2VLForConditionalGeneration\",\n        \"Qwen2_5_VLForConditionalGeneration\",\n        \"Qwen3VLMoeForConditionalGeneration\",\n        \"Qwen3_5ForConditionalGeneration\",\n    }\n\n    def _sanitize_model_config(\n        self, pytorch_model_config: Optional[PytorchModelConfig]\n    ) -> PytorchModelConfig:\n        pytorch_model_config = super()._sanitize_model_config(pytorch_model_config)\n        assert pytorch_model_config is not None\n        pytorch_model_config.setdefault(\"min_pixels\", 256 * 28 * 28)\n        pytorch_model_config.setdefault(\"max_pixels\", 1280 * 28 * 28)\n        return pytorch_model_config\n\n    @classmethod\n    def match_json(\n        cls, model_family: \"LLMFamilyV2\", model_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_spec.model_format not in [\n            \"pytorch\",\n            \"gptq\",\n            \"awq\",\n            \"bnb\",\n            \"fp8\",\n            \"fp4\",\n        ]:\n            return (\n                False,\n                \"Qwen2 VL transformer supports pytorch/gptq/awq/bnb/fp8/fp4 formats only\",\n            )\n        if not model_family.has_architecture(*cls.QWEN2_VL_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {model_family.architectures} are not a supported Qwen2/3 VL variant\",\n            )\n        if \"vision\" not in model_family.model_ability:\n            return False, \"Qwen2 VL transformer requires vision ability\"\n        return True\n\n    def decide_device(self):\n        device = self._pytorch_model_config.get(\"device\", \"auto\")\n        device = select_device(device)\n        # for multiple GPU, set back to auto to make multiple devices work\n        self._device = device\n\n    def load_processor(self):\n        from transformers import AutoProcessor\n\n        min_pixels = self._pytorch_model_config.get(\"min_pixels\")\n        max_pixels = self._pytorch_model_config.get(\"max_pixels\")\n        self._processor = AutoProcessor.from_pretrained(\n            self.model_path,\n            trust_remote_code=True,\n            min_pixels=min_pixels,\n            max_pixels=max_pixels,\n        )\n        self._tokenizer = self._processor.tokenizer\n\n    def load_multimodal_model(self):\n        from transformers import Qwen2VLForConditionalGeneration\n\n        try:\n            from transformers import Qwen2_5_VLForConditionalGeneration\n        except ImportError:\n            Qwen2_5_VLForConditionalGeneration = None\n\n        try:\n            from transformers import Qwen3_5ForConditionalGeneration\n        except ImportError:\n            Qwen3_5ForConditionalGeneration = None\n\n        try:\n            from transformers import AutoModelForImageTextToText\n        except ImportError:\n            AutoModelForImageTextToText = None\n\n        kwargs = self.apply_quantization_config()\n        if self.model_family.has_architecture(\"Qwen2_5_VLForConditionalGeneration\"):\n            model_cls = Qwen2_5_VLForConditionalGeneration\n        elif self.model_family.has_architecture(\"Qwen3_5ForConditionalGeneration\"):\n            model_cls = Qwen3_5ForConditionalGeneration\n        elif self.model_family.has_architecture(\"Qwen3VLMoeForConditionalGeneration\"):\n            model_cls = AutoModelForImageTextToText\n        else:\n            model_cls = Qwen2VLForConditionalGeneration\n        if model_cls is None:\n            raise ImportError(\"`transformers` version is too old, please upgrade it\")\n        device = \"auto\" if self._device == \"cuda\" else self._device\n\n        enable_flash_attn = self._pytorch_model_config.get(\n            \"enable_flash_attn\", is_flash_attn_available()\n        )\n\n        if enable_flash_attn:\n            self._model = model_cls.from_pretrained(\n                self.model_path,\n                torch_dtype=\"bfloat16\",\n                attn_implementation=\"flash_attention_2\",\n                device_map=device,\n                trust_remote_code=True,\n                **kwargs,\n            ).eval()\n        elif is_npu_available():\n            # Ascend do not support bf16\n            self._model = model_cls.from_pretrained(\n                self.model_path,\n                device_map=\"auto\",\n                trust_remote_code=True,\n                torch_dtype=\"float16\",\n                **kwargs,\n            ).eval()\n        elif device == \"mps\":\n            # MacOS special, see https://github.com/QwenLM/Qwen2.5-VL/issues/761\n            self._model = model_cls.from_pretrained(\n                self.model_path,\n                torch_dtype=\"bfloat16\",\n                device_map=device,\n                attn_implementation=\"eager\",\n                low_cpu_mem_usage=True,\n                trust_remote_code=True,\n            ).eval()\n        else:\n            self._model = model_cls.from_pretrained(\n                self.model_path,\n                device_map=device,\n                trust_remote_code=True,\n                **kwargs,\n            ).eval()\n\n    def build_inputs_from_messages(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ):\n        from qwen_vl_utils import process_vision_info\n\n        messages = self._transform_messages(messages)\n        # Preparation for inference\n        text = self._processor.apply_chat_template(\n            messages, tokenize=False, add_generation_prompt=True\n        )\n        image_inputs, video_inputs = process_vision_info(messages)\n        inputs = self._processor(\n            text=[text],\n            images=image_inputs,\n            videos=video_inputs,\n            padding=True,\n            return_tensors=\"pt\",\n        )\n        inputs = inputs.to(self._device)\n        return inputs\n\n    def build_generate_kwargs(self, generate_config: Dict) -> Dict[str, Any]:\n        max_new_tokens = generate_config.get(\"max_tokens\") or 512\n        temperature = generate_config.get(\"temperature\", 1)\n        return {\"max_new_tokens\": max_new_tokens, \"temperature\": temperature}\n\n    def build_streaming_iter(\n        self,\n        messages: List[Dict],\n        generate_config: Dict,\n    ) -> Tuple[Iterator, int]:\n        from threading import Thread\n\n        from transformers import TextIteratorStreamer\n\n        tokenizer = self._tokenizer\n        streamer = TextIteratorStreamer(\n            tokenizer, timeout=60.0, skip_prompt=True, skip_special_tokens=True\n        )\n\n        inputs = self.build_inputs_from_messages(messages, generate_config)\n        config = self.build_generate_kwargs(generate_config)\n\n        def model_generate():\n            try:\n                return self._model.generate(**inputs, **config, streamer=streamer)\n            except Exception:\n                streamer.end()\n                raise\n\n        thread = Thread(target=model_generate)\n        thread.start()\n        return streamer, len(inputs.input_ids[0])\n\n    def prepare_sanitize_generate_config(self, req: InferenceRequest):\n        \"\"\"\n        This file corresponds to multiple models,\n        so the corresponding configuration is read directly through the transformers interface.\n        \"\"\"\n        from transformers import GenerationConfig\n\n        gen_config = GenerationConfig.from_pretrained(self.model_path).to_dict()\n        raw_config = req.inference_kwargs.get(\"raw_params\", {})\n        gen_config.update(raw_config)\n        return gen_config\n\n    def _get_full_prompt(self, messages: List[Dict], tools, generate_config: dict):\n        return self._transform_messages(messages)\n\n    def build_prefill_kwargs(self, prompts: List, req_list: List[InferenceRequest]):\n        import torch\n        from qwen_vl_utils import process_vision_info\n\n        batch_text = self._processor.apply_chat_template(\n            prompts, tokenize=False, add_generation_prompt=True\n        )\n        image_inputs, video_inputs = process_vision_info(prompts)\n        inputs = self._processor(\n            text=batch_text,\n            images=image_inputs,\n            videos=video_inputs,\n            padding=True,\n            padding_side=\"left\",\n            return_tensors=\"pt\",\n        )\n        inputs = inputs.to(self._model.device)\n        for r, _ids, attn_mask in zip(\n            req_list, inputs[\"input_ids\"], inputs[\"attention_mask\"]\n        ):\n            r.prompt_tokens = _ids.tolist()\n            real_len = torch.sum(attn_mask).item()\n            r.padding_len = attn_mask.numel() - real_len\n            r.extra_kwargs[\"attention_mask_seq_len\"] = real_len\n        input_ids = inputs[\"input_ids\"]\n        batch_size, seq_len = input_ids.shape\n        position_ids = self.build_prefill_position_ids(batch_size, seq_len, req_list)\n        return {**inputs, \"position_ids\": position_ids}\n"
  },
  {
    "path": "xinference/model/llm/transformers/opt.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom builtins import classmethod\nfrom typing import List, Optional, Tuple, Union\n\nfrom ....types import LoRA\nfrom ...scheduler.request import InferenceRequest\nfrom ..llm_family import LLMFamilyV2, LLMSpecV1, register_transformer\nfrom .core import PytorchModel, PytorchModelConfig, register_non_default_model\n\n\n@register_transformer\n@register_non_default_model(\"OPTForCausalLM\")\nclass OptPytorchModel(PytorchModel):\n    OPT_ARCHITECTURES = {\"OPTForCausalLM\"}\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        pytorch_model_config: Optional[PytorchModelConfig] = None,\n        peft_model: Optional[List[LoRA]] = None,\n    ):\n        super().__init__(\n            model_uid,\n            model_family,\n            model_path,\n            pytorch_model_config=pytorch_model_config,\n            peft_model=peft_model,\n        )\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\"pytorch\", \"fp4\"]:\n            return False, \"OPT transformer only supports pytorch/fp4 format\"\n        if not llm_family.has_architecture(*cls.OPT_ARCHITECTURES):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not OPT\",\n            )\n        return True\n\n    def build_prefill_position_ids(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        \"\"\"\n        Mainly for UT.\n        Transformers code in `main` branch supports `position_ids` parameter (https://github.com/huggingface/transformers/blob/main/src/transformers/models/opt/modeling_opt.py#L1076),\n        while in release branch, it doesn't (https://github.com/huggingface/transformers/blob/v4.45.2/src/transformers/models/opt/modeling_opt.py#L886).\n        \"\"\"\n        return None\n\n    def build_decode_position_ids(\n        self, batch_size: int, seq_length: int, reqs: List[InferenceRequest]\n    ):\n        return None\n"
  },
  {
    "path": "xinference/model/llm/transformers/tensorizer_utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport io\nimport logging\nimport os\nimport tempfile\nimport zipfile\nfrom functools import partial\nfrom pathlib import Path\nfrom typing import Any, Dict, List, Optional, Tuple\n\nfrom ....constants import XINFERENCE_TENSORIZER_DIR\nfrom ....device_utils import get_available_device\n\nlogger = logging.getLogger(__name__)\n\n__all__ = [\n    \"get_tensorizer_dir\",\n    \"check_tensorizer_integrity\",\n    \"load_from_tensorizer\",\n    \"save_to_tensorizer\",\n    \"_load_pretrained_from_tensorizer\",\n    \"_load_model_from_tensorizer\",\n    \"_tensorizer_serialize_model\",\n    \"_tensorizer_serialize_pretrained\",\n    \"_file_is_non_empty\",\n]\n\n\ndef _filter_kwargs(kwargs):\n    kwargs[\"trust_remote_code\"] = kwargs.get(\"trust_remote_code\", True)\n    return {\n        k: v for k, v in kwargs.items() if k in [\"code_revision\", \"trust_remote_code\"]\n    }\n\n\ndef _file_is_non_empty(\n    path: str,\n) -> bool:\n    try:\n        return os.stat(path).st_size > 0\n    except FileNotFoundError:\n        return False\n\n\ndef get_tensorizer_dir(model_path: str) -> str:\n    model_dir = os.path.basename(model_path.rstrip(\"/\"))\n    return f\"{XINFERENCE_TENSORIZER_DIR}/{model_dir}\"\n\n\ndef check_tensorizer_integrity(\n    model_path: str,\n    components: Optional[List[str]] = None,\n    model_prefix: Optional[str] = \"model\",\n) -> bool:\n    tensorizer_dir = get_tensorizer_dir(model_path)\n    dir = tensorizer_dir.rstrip(\"/\")\n    tensors_uri: str = f\"{dir}/{model_prefix}.tensors\"\n    # iterate over components and get their paths\n    paths = [tensors_uri]\n    if components is not None:\n        for component in components:\n            component_uri: str = f\"{tensorizer_dir.rstrip('/')}/{component}.zip\"\n            paths.append(component_uri)\n    return all(_file_is_non_empty(path) for path in paths)\n\n\ndef load_from_tensorizer(\n    model_path: str,\n    components: Optional[List[Tuple[str, Any, Dict[str, Any]]]] = None,\n    model_class: Any = None,\n    config_class: Any = None,\n    model_prefix: Optional[str] = \"model\",\n    **kwargs,\n):\n    kwargs = _filter_kwargs(kwargs)\n    try:\n        from transformers import AutoConfig, AutoModel\n    except ImportError:\n        error_message = \"Failed to import module 'transformers'\"\n        installation_guide = [\n            \"Please make sure 'transformers' is installed. \",\n            \"You can install it by `pip install transformers`\\n\",\n        ]\n        raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n    model_class = model_class or AutoModel\n    config_class = config_class or AutoConfig\n\n    tensorizer_dir = get_tensorizer_dir(model_path)\n    logger.debug(f\"Loading from tensorizer: {tensorizer_dir}\")\n\n    device = get_available_device()\n    tensorizer_model = (\n        _load_model_from_tensorizer(\n            model_path,\n            tensorizer_dir,\n            model_class,\n            config_class,\n            model_prefix,\n            device,\n            **kwargs,\n        )\n        .to(device)\n        .eval()\n    )\n\n    tensorizer_components = []\n\n    if components is not None:\n        for component, component_class, kwargs in components:\n            deserialized_component = _load_pretrained_from_tensorizer(\n                component_class, tensorizer_dir, component, **kwargs\n            )\n            tensorizer_components.append(deserialized_component)\n\n    return tensorizer_model, *tensorizer_components\n\n\ndef _load_pretrained_from_tensorizer(\n    component_class: Any,\n    tensorizer_dir: str,\n    prefix: str,\n    **kwargs,\n):\n    logger.debug(f\"Loading components from tensorizer: {component_class} {kwargs}\")\n\n    try:\n        from tensorizer import stream_io\n    except ImportError:\n        error_message = \"Failed to import module 'tensorizer'\"\n        installation_guide = [\n            \"Please make sure 'tensorizer' is installed.\\n\",\n        ]\n        raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n    _read_stream = partial(stream_io.open_stream, mode=\"rb\")\n\n    logger.debug(f\"Loading pretrained from tensorizer: {tensorizer_dir}\")\n    load_path: str = f\"{tensorizer_dir.rstrip('/')}/{prefix}.zip\"\n    logger.info(f\"Loading {load_path}\")\n    with io.BytesIO() as downloaded:\n        # Download to a BytesIO object first, because ZipFile doesn't play nice\n        # with streams that don't fully support random access\n        with _read_stream(load_path) as stream:\n            downloaded.write(stream.read())\n        downloaded.seek(0)\n        with zipfile.ZipFile(\n            downloaded, mode=\"r\"\n        ) as file, tempfile.TemporaryDirectory() as directory:\n            file.extractall(path=directory)\n            return component_class.from_pretrained(\n                directory, cache_dir=None, local_files_only=True, **kwargs\n            )\n\n\ndef _load_model_from_tensorizer(\n    model_path: str,\n    tensorizer_dir: str,\n    model_class,\n    config_class,\n    model_prefix: Optional[str] = \"model\",\n    device=None,\n    dtype=None,\n    **kwargs,\n):\n    logger.debug(f\"Loading model from tensorizer: {tensorizer_dir} {kwargs}\")\n\n    # assert device is not None\n    if device is None:\n        raise ValueError(\"device must be specified\")\n\n    import time\n\n    try:\n        import torch\n    except ImportError:\n        error_message = \"Failed to import module 'torch'\"\n        installation_guide = [\n            \"Please make sure 'torch' is installed.\\n\",\n        ]\n        raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n    try:\n        from transformers import PretrainedConfig\n    except ImportError:\n        error_message = \"Failed to import module 'transformers'\"\n        installation_guide = [\n            \"Please make sure 'transformers' is installed. \",\n            \"You can install it by `pip install transformers`\\n\",\n        ]\n\n        raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n    try:\n        from tensorizer import TensorDeserializer, stream_io, utils\n    except ImportError:\n        error_message = \"Failed to import module 'tensorizer'\"\n        installation_guide = [\n            \"Please make sure 'tensorizer' is installed.\\n\",\n        ]\n        raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n    if model_prefix is None:\n        model_prefix = \"model\"\n\n    dir: str = tensorizer_dir.rstrip(\"/\")\n    tensors_uri: str = f\"{dir}/{model_prefix}.tensors\"\n\n    _read_stream = partial(stream_io.open_stream, mode=\"rb\")\n\n    if config_class is None:\n        config_loader = model_class.load_config\n    else:\n        config_loader = config_class.from_pretrained\n    try:\n        config, _ = config_loader(model_path, return_unused_kwargs=True, **kwargs)\n        if isinstance(config, PretrainedConfig):\n            config.gradient_checkpointing = True\n    except ValueError:\n        config = config_loader(model_path, **kwargs)\n\n    with utils.no_init_or_tensor():\n        model_loader = getattr(model_class, \"from_config\", model_class)\n        model = model_loader(config, **kwargs)\n\n    is_cuda: bool = torch.device(device).type == \"cuda\"\n    ram_usage = utils.get_mem_usage()\n    logger.info(f\"Loading {tensors_uri}, {ram_usage}\")\n    begin_load = time.perf_counter()\n\n    with _read_stream(tensors_uri) as tensor_stream, TensorDeserializer(\n        tensor_stream, device=device, dtype=dtype, plaid_mode=is_cuda\n    ) as tensor_deserializer:\n        tensor_deserializer.load_into_module(model)\n        tensor_load_s = time.perf_counter() - begin_load\n        bytes_read: int = tensor_deserializer.total_bytes_read\n\n    rate_str = utils.convert_bytes(bytes_read / tensor_load_s)\n    tensors_sz = utils.convert_bytes(bytes_read)\n    logger.info(\n        f\"Model tensors loaded in {tensor_load_s:0.2f}s, read \"\n        f\"{tensors_sz} @ {rate_str}/s, {utils.get_mem_usage()}\"\n    )\n\n    return model\n\n\ndef save_to_tensorizer(\n    model_path: str,\n    model,\n    components: Optional[List[Tuple[str, Any]]] = None,\n    model_prefix: Optional[str] = \"model\",\n    force: Optional[bool] = False,\n    **kwargs,\n):\n    kwargs = _filter_kwargs(kwargs)\n    _tensorizer_serialize_model(model_path, model, model_prefix, force, **kwargs)\n\n    if components is not None:\n        for component_prefix, component in components:\n            _tensorizer_serialize_pretrained(model_path, component, component_prefix)\n\n\ndef _tensorizer_serialize_model(\n    model_path: str,\n    model,\n    model_prefix: Optional[str] = \"model\",\n    force: Optional[bool] = False,\n    **kwargs,\n):\n    try:\n        from tensorizer import TensorSerializer, stream_io\n    except ImportError:\n        error_message = \"Failed to import module 'tensorizer'\"\n        installation_guide = [\n            \"Please make sure 'tensorizer' is installed.\\n\",\n        ]\n        raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n    tensorizer_dir = get_tensorizer_dir(model_path)\n    tensor_path: str = f\"{tensorizer_dir}/{model_prefix}.tensors\"\n\n    _write_stream = partial(stream_io.open_stream, mode=\"wb+\")\n\n    if os.path.exists(tensor_path):\n        logger.info(f\"Cache {tensor_path} exists, skip tensorizer serialize model\")\n        return\n\n    logger.info(f\"Writing tensors to {tensor_path}\")\n    with _write_stream(tensor_path) as f:\n        serializer = TensorSerializer(f)\n        serializer.write_module(model, include_non_persistent_buffers=False)\n        serializer.close()\n\n    logger.info(f\"Tensorizer serialize model done: {tensor_path}\")\n\n\ndef _tensorizer_serialize_pretrained(\n    model_path: str, component, prefix: str = \"pretrained\"\n):\n    try:\n        from tensorizer import stream_io\n    except ImportError:\n        error_message = \"Failed to import module 'tensorizer'\"\n        installation_guide = [\n            \"Please make sure 'tensorizer' is installed.\\n\",\n        ]\n        raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n    tensorizer_dir = get_tensorizer_dir(model_path)\n    save_path: str = f\"{tensorizer_dir.rstrip('/')}/{prefix}.zip\"\n\n    if os.path.exists(save_path):\n        logger.info(f\"Cache {save_path} exists, skip tensorizer serialize pretrained\")\n        return\n\n    logger.info(f\"Writing component to {save_path}\")\n    _write_stream = partial(stream_io.open_stream, mode=\"wb+\")\n\n    with _write_stream(save_path) as stream, zipfile.ZipFile(\n        stream, mode=\"w\", compression=zipfile.ZIP_DEFLATED, compresslevel=5\n    ) as file, tempfile.TemporaryDirectory() as directory:\n        if hasattr(component, \"save_pretrained\"):\n            component.save_pretrained(directory)\n        else:\n            logger.warning(\"The component does not have a 'save_pretrained' method.\")\n        for path in Path(directory).iterdir():\n            file.write(filename=path, arcname=path.name)\n\n    logger.info(f\"Tensorizer serialize pretrained done: {save_path}\")\n"
  },
  {
    "path": "xinference/model/llm/transformers/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/transformers/tests/test_opt.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom concurrent.futures import ThreadPoolExecutor\n\nimport pytest\n\nfrom .....client import Client\nfrom .....client.restful.restful_client import RESTfulGenerateModelHandle\n\n\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\"quantization\", [\"none\"])\nasync def test_opt_pytorch_model(setup, quantization):\n    endpoint, _ = setup\n    client = Client(endpoint)\n    assert len(client.list_models()) == 0\n\n    if quantization == \"4-bit\":\n        with pytest.raises(ValueError):\n            client.launch_model(\n                model_name=\"opt\",\n                model_engine=\"transformers\",\n                model_size_in_billions=1,\n                model_format=\"pytorch\",\n                quantization=quantization,\n                device=\"cpu\",\n            )\n    else:\n        model_uid = client.launch_model(\n            model_name=\"opt\",\n            model_engine=\"transformers\",\n            model_size_in_billions=1,\n            model_format=\"pytorch\",\n            quantization=quantization,\n            device=\"cpu\",\n        )\n        assert len(client.list_models()) == 1\n\n        model = client.get_model(model_uid=model_uid)\n        assert isinstance(model, RESTfulGenerateModelHandle)\n\n        # Test concurrent generate is OK.\n        def _check():\n            completion = model.generate(\n                \"Once upon a time, there was a very old computer\",\n                generate_config={\"max_tokens\": 100},\n            )\n            assert isinstance(completion, dict)\n            assert \"text\" in completion[\"choices\"][0]\n\n        results = []\n        with ThreadPoolExecutor() as executor:\n            for _ in range(3):\n                r = executor.submit(_check)\n                results.append(r)\n        for r in results:\n            r.result()\n\n        client.terminate_model(model_uid=model_uid)\n        assert len(client.list_models()) == 0\n\n\n@pytest.mark.asyncio\nasync def test_opt_fp4_model(setup):\n    try:\n        from transformers import FPQuantConfig  # noqa: F401\n    except Exception:\n        pytest.skip(\"FPQuantConfig is not available in transformers.\")\n\n    endpoint, _ = setup\n    client = Client(endpoint)\n    assert len(client.list_models()) == 0\n\n    model_uid = client.launch_model(\n        model_name=\"opt\",\n        model_engine=\"transformers\",\n        model_size_in_billions=1,\n        model_format=\"fp4\",\n        quantization=\"mxfp4\",\n        device=\"cpu\",\n        quantization_config={\n            \"pseudoquantization\": True,\n            \"forward_dtype\": \"mxfp4\",\n        },\n        torch_dtype=\"bfloat16\",\n    )\n    assert len(client.list_models()) == 1\n\n    model = client.get_model(model_uid=model_uid)\n    assert isinstance(model, RESTfulGenerateModelHandle)\n\n    completion = model.generate(\n        \"Once upon a time, there was a very old computer\",\n        generate_config={\"max_tokens\": 32},\n    )\n    assert isinstance(completion, dict)\n    assert \"text\" in completion[\"choices\"][0]\n\n    client.terminate_model(model_uid=model_uid)\n    assert len(client.list_models()) == 0\n"
  },
  {
    "path": "xinference/model/llm/transformers/tests/test_tensorizer.py",
    "content": "import os\nimport shutil\nfrom unittest.mock import MagicMock, patch\n\nimport pytest\nfrom transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer\n\nfrom .....constants import XINFERENCE_CACHE_DIR\nfrom ...cache_manager import LLMCacheManager as CacheManager\nfrom ...llm_family import LLMFamilyV2, PytorchLLMSpecV2\nfrom ..tensorizer_utils import (\n    _tensorizer_serialize_model,\n    get_tensorizer_dir,\n    save_to_tensorizer,\n)\n\n\n# case1: test if tensorizer_serialize_model and .tensor file exists in the correct path\nclass TestTensorizerSerializeModel:\n    @pytest.fixture(autouse=True)\n    def setup_and_teardown(self):\n        # Setup: Load the model and tokenizer\n        model_full_name = \"qwen1.5-chat-pytorch-0_5b-none\"\n        self.model_path = os.path.join(\n            XINFERENCE_CACHE_DIR, \"v2\", model_full_name.replace(\".\", \"_\")\n        )\n        self.tensorizer_dir = get_tensorizer_dir(self.model_path)\n        spec = PytorchLLMSpecV2(\n            model_format=\"pytorch\",\n            model_size_in_billions=\"0_5\",\n            quantization=\"none\",\n            model_id=\"Qwen/Qwen1.5-0.5B-Chat\",\n            model_revision=None,\n        )\n        family = LLMFamilyV2(\n            version=2,\n            context_length=32768,\n            model_type=\"LLM\",\n            model_name=\"qwen1.5-chat\",\n            model_lang=[\"en\", \"zh\"],\n            model_ability=[\"chat\", \"tools\"],\n            model_specs=[spec],\n            chat_template=None,\n            stop_token_ids=None,\n            stop=None,\n        )\n\n        if not os.path.exists(self.model_path):\n            assert CacheManager(family).cache() == self.model_path\n\n        self.model_config = AutoConfig.from_pretrained(self.model_path)\n        self.tokenizer = AutoTokenizer.from_pretrained(self.model_path, use_fast=True)\n        self.model = AutoModelForCausalLM.from_pretrained(\n            self.model_path,\n            low_cpu_mem_usage=True,\n        )\n        self.model_prefix = \"model\"\n        self.force = True\n        yield\n\n        # Cleanup: Remove the entire directories after the test\n        self._cleanup_directory(self.tensorizer_dir)\n\n    def _cleanup_directory(self, directory):\n        if os.path.exists(directory):\n            shutil.rmtree(directory)\n\n    # Test if model.tensor & tokenizer.zip files generated\n    def test_tensor_file_exists(self):\n        expected_tensor_file = f\"{self.tensorizer_dir}/{self.model_prefix}.tensors\"\n        expected_tokenizer_file = f\"{self.tensorizer_dir}/tokenizer.zip\"\n\n        if os.path.exists(expected_tensor_file):\n            os.remove(expected_tensor_file)\n\n        if os.path.exists(expected_tokenizer_file):\n            os.remove(expected_tokenizer_file)\n\n        save_to_tensorizer(\n            self.model_path,\n            self.model,\n            [(\"tokenizer\", self.tokenizer)],\n        )\n\n        assert os.path.exists(\n            expected_tensor_file\n        ), f\"{expected_tensor_file} does not exist\"\n\n        assert os.path.exists(\n            expected_tokenizer_file\n        ), f\"{expected_tokenizer_file} does not exist\"\n\n\n@pytest.fixture\ndef mock_environment(tmp_path):\n    model_path = str(tmp_path / \"model\")\n    tensorizer_dir = str(tmp_path / \"tensorizer\")\n    os.makedirs(tensorizer_dir, exist_ok=True)\n    tensor_path = f\"{tensorizer_dir}/model.tensors\"\n    # Create a dummy cache file to simulate cache existence\n    with open(tensor_path, \"w\") as f:\n        f.write(\"dummy content\")\n    return model_path, tensorizer_dir, tensor_path\n\n\n@patch(\"xinference.model.llm.transformers.tensorizer_utils.get_tensorizer_dir\")\n@patch(\"xinference.model.llm.transformers.tensorizer_utils.logger\")\ndef test_tensorizer_serialize_model_cache_exists(\n    mock_logger, mock_get_tensorizer_dir, mock_environment\n):\n    model_path, tensorizer_dir, tensor_path = mock_environment\n    mock_get_tensorizer_dir.return_value = tensorizer_dir\n    model = MagicMock()\n\n    # Call the function with the mocked environment\n    _tensorizer_serialize_model(model_path, model)\n\n    # Check if the logger.info was called with the expected message, indicating early return due to cache existence\n    mock_logger.info.assert_called_with(\n        f\"Cache {tensor_path} exists, skip tensorizer serialize model\"\n    )\n"
  },
  {
    "path": "xinference/model/llm/transformers/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\nimport logging\nimport os\nimport time\nfrom typing import TYPE_CHECKING, Dict, List, Optional, Tuple\n\nimport torch\nfrom transformers.cache_utils import DynamicCache\nfrom transformers.generation.logits_process import (\n    LogitsProcessorList,\n    RepetitionPenaltyLogitsProcessor,\n    TemperatureLogitsWarper,\n    TopKLogitsWarper,\n    TopPLogitsWarper,\n)\n\nfrom ....device_utils import empty_cache\nfrom ....types import (\n    Completion,\n    CompletionChoice,\n    CompletionChunk,\n    CompletionUsage,\n    max_tokens_field,\n)\nfrom ...scheduler.request import InferenceRequest\n\nif TYPE_CHECKING:\n    from ...llm.transformers.core import PytorchModel\n\nlogger = logging.getLogger(__name__)\n\n\ndef get_context_length(config) -> int:\n    \"\"\"Get the context length of a model from a huggingface model config.\"\"\"\n    if (\n        hasattr(config, \"max_sequence_length\")\n        and config.max_sequence_length is not None\n    ):\n        max_sequence_length = config.max_sequence_length\n    else:\n        max_sequence_length = 2048\n    if hasattr(config, \"seq_length\") and config.seq_length is not None:\n        seq_length = config.seq_length\n    else:\n        seq_length = 2048\n    if (\n        hasattr(config, \"max_position_embeddings\")\n        and config.max_position_embeddings is not None\n    ):\n        max_position_embeddings = config.max_position_embeddings\n    else:\n        max_position_embeddings = 2048\n    return max(max_sequence_length, seq_length, max_position_embeddings)\n\n\ndef prepare_logits_processor(\n    temperature: float, repetition_penalty: float, top_p: float, top_k: int\n) -> LogitsProcessorList:\n    processor_list = LogitsProcessorList()\n    # TemperatureLogitsWarper doesn't accept 0.0, 1.0 makes it a no-op so we skip two cases.\n    if temperature >= 1e-5 and temperature != 1.0:\n        processor_list.append(TemperatureLogitsWarper(temperature))\n    if repetition_penalty > 1.0:\n        processor_list.append(RepetitionPenaltyLogitsProcessor(repetition_penalty))\n    if 1e-8 <= top_p < 1.0:\n        processor_list.append(TopPLogitsWarper(top_p))\n    if top_k > 0:\n        processor_list.append(TopKLogitsWarper(top_k))\n    return processor_list\n\n\ndef _get_token_from_logits(\n    req: InferenceRequest, i: int, logits, temperature, repetition_penalty, top_p, top_k\n):\n    logits_processor = prepare_logits_processor(\n        temperature, repetition_penalty, top_p, top_k\n    )\n\n    if logits_processor:\n        if repetition_penalty > 1.0:\n            tmp_output_ids = torch.as_tensor(\n                [req.prompt_tokens + req.new_tokens], device=logits.device\n            )\n        else:\n            tmp_output_ids = None\n        last_token_logits = logits_processor(tmp_output_ids, logits[i : i + 1, -1, :])[\n            0\n        ]\n    else:\n        last_token_logits = logits[i : i + 1, -1, :]\n\n    if temperature < 1e-5 or top_p < 1e-8:  # greedy\n        _, indices = torch.topk(last_token_logits, 2)\n    else:\n        probs = torch.softmax(last_token_logits, dim=-1)\n        indices = torch.multinomial(probs, num_samples=2)\n    token = indices[0].int().item()\n    return token\n\n\ndef _pad_to_max_length(x: List[int], max_len: int, pad: int) -> List[int]:\n    assert len(x) <= max_len\n    return [pad] * (max_len - len(x)) + x\n\n\ndef _pad_seqs_inplace(seqs: List[List[int]], reqs: List[InferenceRequest], pad: int):\n    max_len = max(len(seq) for seq in seqs)\n    n = len(seqs)\n    i = 0\n    while i < n:\n        prev_seq_len = len(seqs[i])\n        seqs[i] = _pad_to_max_length(seqs[i], max_len, pad)\n        padding_len = len(seqs[i]) - prev_seq_len\n        reqs[i].padding_len = padding_len\n        i += 1\n\n\ndef get_max_src_len(context_len: int, r: InferenceRequest) -> int:\n    # if max_tokens not set, we just treat max_src_len = context_len - 8\n    max_new_tokens = int(\n        r.sanitized_generate_config.get(\"max_tokens\") or max_tokens_field.default or 0\n    )\n    return context_len - max_new_tokens - 8\n\n\ndef pad_prefill_tokens(\n    input_ids: List[List[int]], context_len: int, req_list: List[InferenceRequest]\n):\n    prompt_tokens = []\n    for i, input_id in enumerate(input_ids):\n        req = req_list[i]\n        max_src_len = get_max_src_len(context_len, req)\n        req.prompt_tokens = input_id[-max_src_len:]\n        prompt_tokens.append(req.prompt_tokens)\n    _pad_seqs_inplace(prompt_tokens, req_list, 0)\n    return prompt_tokens\n\n\ndef _get_completion(\n    output: str,\n    chunk_id: str,\n    finish_reason: Optional[str],\n    model_uid: str,\n    r: InferenceRequest,\n    completion_tokens: int,\n):\n    completion_choice = CompletionChoice(\n        text=output, index=0, logprobs=None, finish_reason=finish_reason\n    )\n\n    completion_chunk = CompletionChunk(\n        id=chunk_id,\n        object=\"text_completion\",\n        created=int(time.time()),\n        model=model_uid,\n        choices=[completion_choice],\n    )\n    completion_usage = CompletionUsage(\n        prompt_tokens=len(r.prompt_tokens),\n        completion_tokens=completion_tokens,\n        total_tokens=len(r.prompt_tokens) + completion_tokens,\n    )\n    completion = Completion(\n        id=completion_chunk[\"id\"],\n        object=completion_chunk[\"object\"],\n        created=completion_chunk[\"created\"],\n        model=completion_chunk[\"model\"],\n        choices=completion_chunk[\"choices\"],\n        usage=completion_usage,\n    )\n    return completion\n\n\ndef _get_pad_param(seq_len_idx: int, pad_len: int) -> Tuple:\n    dimensions = [0] * 8\n    dimensions[-2 * (seq_len_idx + 1)] = pad_len\n    return tuple(dimensions)\n\n\ndef get_batch_size_and_seq_len_from_kv_cache(kv, xinf_model_obj: \"PytorchModel\"):\n    bs_idx, seq_len_idx = xinf_model_obj.get_batch_size_and_seq_len_indexes_from_kv()\n\n    try:\n        from transformers import HybridCache\n\n        if isinstance(kv, HybridCache):\n            return kv.key_cache[0].shape[bs_idx], kv.get_seq_length()\n    except ImportError:\n        if kv is None:\n            return 0, 0\n\n        if hasattr(kv, \"key_cache\"):\n            if len(kv.key_cache) == 0 or kv.key_cache[0] is None:\n                return 0, kv.get_seq_length() if hasattr(kv, \"get_seq_length\") else 0\n\n            key = kv.key_cache[0]\n            return key.shape[bs_idx], kv.get_seq_length()\n\n    return kv[0][0].shape[bs_idx], kv[0][0].shape[seq_len_idx] + 1\n\n\ndef convert_to_cache_cls(cache) -> DynamicCache:\n    \"\"\"\n    Compatible with some old models\n    \"\"\"\n    if isinstance(cache, tuple):\n        return DynamicCache.from_legacy_cache(cache)\n    return cache\n\n\n@torch.inference_mode()\ndef _batch_inference_one_step_internal(\n    xinf_model_obj: \"PytorchModel\",\n    req_list: List[InferenceRequest],\n    model_uid,\n    model,\n    tokenizer,\n    decode_round: int = 16,\n    bos_flag: str = \"<bos_stream>\",\n    eos_flag: str = \"<eos_stream>\",\n):\n    from ..utils import generate_completion_chunk\n\n    # need to judge stopped here,\n    # since some requests state may change to stopped due to invalid parameters, e.g. max_src_len\n    valid_req_list = [r for r in req_list if not r.stopped]\n    if not valid_req_list:\n        return\n    generate_config_mapping: Dict[InferenceRequest, Tuple] = {\n        r: r.get_generate_configs(\n            tokenizer.eos_token_id, xinf_model_obj.get_builtin_stop_token_ids()\n        )\n        for r in valid_req_list\n    }\n    s_time = time.time()\n\n    prefill_reqs = []\n    prompts = []\n    decode_reqs = []\n    for r in valid_req_list:\n        if r.is_prefill:\n            prompts.append(r.full_prompt if r.full_prompt is not None else r.prompt)\n            prefill_reqs.append(r)\n        else:\n            decode_reqs.append(r)\n\n    if prompts:  # prefill first\n        prefill_kws = xinf_model_obj.build_prefill_kwargs(prompts, prefill_reqs)\n        out = model(**prefill_kws, use_cache=True)\n\n        logits = out.logits\n        past_key_values = convert_to_cache_cls(out.past_key_values)\n\n        for i, r in enumerate(prefill_reqs):\n            (\n                max_new_tokens,\n                stream_interval,\n                include_usage,\n                stop_str,\n                stop_token_ids,\n                temperature,\n                repetition_penalty,\n                top_p,\n                top_k,\n            ) = generate_config_mapping[r]\n\n            if max_new_tokens == 0:\n                # max_tokens not set, we change it to the possible maximum\n                max_new_tokens = xinf_model_obj.get_context_len() - len(r.prompt_tokens)\n                new_gen_conf = list(generate_config_mapping[r])\n                new_gen_conf[0] = max_new_tokens\n                generate_config_mapping[r] = tuple(new_gen_conf)\n                logger.debug(\"No max_tokens set, setting to: %s\", max_new_tokens)\n\n            token = _get_token_from_logits(\n                r, i, logits, temperature, repetition_penalty, top_p, top_k\n            )\n            r.is_prefill = False\n            r.append_new_token(token)\n\n        if decode_reqs:\n            # Ensure all decode requests have the same kv_cache reference\n            # This prevents batch size mismatches during merging\n            decode_kv = decode_reqs[0].kv_cache\n\n            # prefill and decode kv cache need to be merged at `batch_size` and `seq_len` dimensions.\n            merged_kv_cache = xinf_model_obj.merge_kv_cache(decode_kv, past_key_values)\n            for r in valid_req_list:\n                r.kv_cache = merged_kv_cache\n            empty_cache()\n        else:\n            for r in valid_req_list:\n                r.kv_cache = past_key_values\n\n    past_key_values = valid_req_list[0].kv_cache\n    stop_token_mapping: Dict[InferenceRequest, int] = {}\n    output_mapping: Dict[InferenceRequest, str] = {}\n    # here, only decode phase, just run some rounds\n    for _i in range(decode_round):\n        batch_size, seq_len = get_batch_size_and_seq_len_from_kv_cache(\n            past_key_values, xinf_model_obj\n        )\n        decode_tokens: List[List[int]] = [[r.new_tokens[-1]] for r in valid_req_list]\n        inf_kws = xinf_model_obj.build_decode_kwargs(\n            decode_tokens, valid_req_list, batch_size, seq_len\n        )\n        out = model(**inf_kws, use_cache=True, past_key_values=past_key_values)\n        logits = out.logits\n        past_key_values = convert_to_cache_cls(out.past_key_values)\n\n        for i, r in enumerate(valid_req_list):\n            (\n                max_new_tokens,\n                stream_interval,\n                include_usage,\n                stop_str,\n                stop_token_ids,\n                temperature,\n                repetition_penalty,\n                top_p,\n                top_k,\n            ) = generate_config_mapping[r]\n\n            token = _get_token_from_logits(\n                r, i, logits, temperature, repetition_penalty, top_p, top_k\n            )\n            r.kv_cache = past_key_values\n            r.append_new_token(token)\n\n            output = None\n            if not r.stopped:\n                stopped = token in stop_token_ids\n\n                if stopped:\n                    finish_reason = \"stop\"\n                elif len(r.new_tokens) == max_new_tokens:\n                    finish_reason = \"length\"\n                    stopped = True\n                else:\n                    finish_reason = None\n\n                # handle stop str\n                if stop_str and r not in output_mapping:\n                    output = tokenizer.decode(\n                        r.new_tokens,\n                        skip_special_tokens=True,\n                        spaces_between_special_tokens=False,\n                        clean_up_tokenization_spaces=True,\n                    )\n                    if isinstance(stop_str, str):\n                        stop_str = [stop_str]\n                    for stop in stop_str:\n                        pos = output.rfind(stop)\n                        if pos != -1:\n                            output = output[:pos]\n                            output_mapping[r] = output\n                            stopped = True\n                            finish_reason = \"stop\"\n                            break\n\n                r.stopped = stopped\n                r.finish_reason = finish_reason\n\n            if r.stopped and r not in stop_token_mapping:\n                stop_token_mapping[r] = _i + 1\n\n            if r.stream:\n                \"\"\"\n                Note that you can't just decode based on the newest r.new_tokens here,\n                which may destroy the integrity of the parsed characters,\n                and at the same time is not good at handling some special characters.\n                So the implementation here is to decode all the tokens that have been generated each time,\n                and then take the slice.\n                \"\"\"\n                if r.stopped or len(r.new_tokens) % stream_interval == 0:\n                    if output is None:\n                        output = tokenizer.decode(\n                            r.new_tokens,\n                            skip_special_tokens=True,\n                            spaces_between_special_tokens=False,\n                            clean_up_tokenization_spaces=True,\n                        )\n\n                    if r.last_output_length == 0:\n                        r.completion.append(bos_flag)\n\n                    # this special character is mainly for qwen\n                    output = output.strip(\"�\")\n                    output = output[r.last_output_length :]\n                    r.last_output_length += len(output)\n                    r.outputs.append(output)\n\n                    completion_chunk = generate_completion_chunk(\n                        chunk_text=output,\n                        finish_reason=None,\n                        chunk_id=r.chunk_id,\n                        model_uid=model_uid,\n                        prompt_tokens=len(r.prompt_tokens),\n                        completion_tokens=len(r.new_tokens),\n                        total_tokens=len(r.prompt_tokens) + len(r.new_tokens),\n                    )\n                    r.completion.append(completion_chunk)\n                    if r.stopped:\n                        # OpenAI compatible chunk\n                        completion_chunk = generate_completion_chunk(\n                            chunk_text=\"\",\n                            finish_reason=r.finish_reason,\n                            chunk_id=r.chunk_id,\n                            model_uid=model_uid,\n                            prompt_tokens=len(r.prompt_tokens),\n                            completion_tokens=len(r.new_tokens),\n                            total_tokens=len(r.prompt_tokens) + len(r.new_tokens),\n                        )\n                        r.completion.append(completion_chunk)\n                        r.completion.append(eos_flag)\n                        r.outputs.append(eos_flag)\n\n                    # last round, handle stream result\n                    # append usage information when enable `include_usage` for OPENAI API compatibility\n                    # The reason for counting the usage in the last round of the iteration is that,\n                    # these tokens are real generated and should be counted.\n                    if r.stopped and _i == decode_round - 1 and include_usage:\n                        r.completion.append(\n                            generate_completion_chunk(\n                                chunk_text=None,\n                                finish_reason=None,\n                                chunk_id=r.chunk_id,\n                                model_uid=model_uid,\n                                prompt_tokens=len(r.prompt_tokens),\n                                completion_tokens=len(r.new_tokens),\n                                total_tokens=len(r.prompt_tokens) + len(r.new_tokens),\n                                has_choice=False,\n                                has_content=False,\n                            )\n                        )\n            else:\n                # last round, handle non-stream result\n                if r.stopped and _i == decode_round - 1:\n                    invalid_token_num = (\n                        (decode_round - stop_token_mapping[r] + 1)\n                        if r.finish_reason == \"stop\"\n                        else (decode_round - stop_token_mapping[r])\n                    )\n                    outputs = (\n                        tokenizer.decode(\n                            r.new_tokens[:-invalid_token_num],\n                            skip_special_tokens=True,\n                            spaces_between_special_tokens=False,\n                            clean_up_tokenization_spaces=True,\n                        )\n                        if r not in output_mapping\n                        else output_mapping[r]\n                    )\n                    completion = _get_completion(\n                        outputs,\n                        r.chunk_id,\n                        r.finish_reason,\n                        model_uid,\n                        r,\n                        len(r.new_tokens) - invalid_token_num,\n                    )\n                    r.completion = [completion]\n\n    e_time = time.time()\n    logger.debug(\n        f\"Average throughput for a step: {(len(valid_req_list) * decode_round + len(prompts)) / (e_time - s_time)} token/s.\"\n    )\n\n\ndef batch_inference_one_step(\n    xinf_model_obj: \"PytorchModel\",\n    req_list: List[InferenceRequest],\n    model_uid,\n    model,\n    tokenizer,\n):\n    from ....core.model import OutOfMemoryError\n\n    try:\n        _batch_inference_one_step_internal(\n            xinf_model_obj, req_list, model_uid, model, tokenizer\n        )\n    except OutOfMemoryError:\n        logger.exception(\n            f\"Batch inference out of memory. \"\n            f\"Xinference will restart the model: {model_uid}. \"\n            f\"Please be patient for a few moments.\"\n        )\n        # Just kill the process and let xinference auto-recover the model\n        os._exit(1)\n    except Exception as e:\n        logger.exception(f\"Internal error for batch inference: {e}.\")\n        # If internal error happens, just skip all the requests in this batch.\n        # If not handle here, the client will hang.\n        for r in req_list:\n            r.stopped = True\n            r.error_msg = str(e)\n"
  },
  {
    "path": "xinference/model/llm/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nimport functools\nimport json\nimport logging\nimport re\nimport time\nimport typing\nimport uuid\nfrom io import BytesIO\nfrom typing import (\n    Any,\n    AsyncGenerator,\n    Dict,\n    Iterable,\n    Iterator,\n    List,\n    Optional,\n    Tuple,\n    Union,\n    cast,\n)\n\nimport requests\nfrom PIL import Image\n\nfrom ...types import (\n    ChatCompletion,\n    ChatCompletionChoice,\n    ChatCompletionChunk,\n    ChatCompletionChunkChoice,\n    ChatCompletionChunkDelta,\n    ChatCompletionMessage,\n    Completion,\n    CompletionChoice,\n    CompletionChunk,\n    CompletionUsage,\n)\nfrom .core import chat_context_var\nfrom .reasoning_parser import ReasoningParser\nfrom .tool_parsers.glm4_tool_parser import Glm4ToolParser\n\nlogger = logging.getLogger(__name__)\n\n\nQWEN_TOOL_CALL_FAMILY = [\n    \"qwen1.5-chat\",\n    \"qwen1.5-moe-chat\",\n    \"qwen2-instruct\",\n    \"qwen2-moe-instruct\",\n    \"qwen2.5-instruct\",\n    \"qwen2.5-coder-instruct\",\n    \"XiYanSQL-QwenCoder-2504\",\n    \"QwQ-32B\",\n    \"qwen3\",\n    \"HuatuoGPT-o1-Qwen2.5\",\n    \"DianJin-R1\",\n    \"Qwen3-Thinking\",\n    \"Qwen3-Instruct\",\n    \"Qwen3-Coder\",\n    \"Qwen3-VL-Instruct\",\n    \"Qwen3-VL-Thinking\",\n    \"Qwen3-Next-Instruct\",\n    \"Qwen3-Next-Thinking\",\n    \"Qwen3-Omni-Instruct\",\n    \"Qwen3-Omni-Thinking\",\n    \"MiniMax-M2\",\n]\n\nGLM4_TOOL_CALL_FAMILY = [\n    \"glm4-chat\",\n    \"glm4-chat-1m\",\n    \"glm-4.5\",\n    \"glm-4.5v\",\n    \"GLM-4.6\",\n    \"GLM-4.7\",\n    \"GLM-4.7-Flash\",\n]\n\nLLAMA3_TOOL_CALL_FAMILY = [\n    \"llama-3.1-instruct\",\n    \"HuatuoGPT-o1-LLaMA-3.1\",\n]\n\nDEEPSEEK_TOOL_CALL_FAMILY = [\"deepseek-v3\", \"deepseek-r1-0528\", \"Deepseek-V3.1\"]\n\nTOOL_CALL_FAMILY = (\n    QWEN_TOOL_CALL_FAMILY\n    + GLM4_TOOL_CALL_FAMILY\n    + LLAMA3_TOOL_CALL_FAMILY\n    + DEEPSEEK_TOOL_CALL_FAMILY\n)\n\nQWEN_TOOL_CALL_SYMBOLS = [\"<tool_call>\", \"</tool_call>\"]\n\n\nclass ChatModelMixin:\n    def __init__(self):\n        self.model_family = None\n        self.model_uid = None\n        self.reasoning_parser = None\n        self.tool_parser = None\n\n    @staticmethod\n    @functools.lru_cache\n    def _compile_jinja_template(chat_template):\n        \"\"\"\n        Copied from transformers source code.\n        \"\"\"\n        try:\n            from jinja2.exceptions import TemplateError\n            from jinja2.sandbox import ImmutableSandboxedEnvironment\n        except ImportError:\n            raise ImportError(\"xinference requires jinja2 to be installed.\")\n\n        def raise_exception(message):\n            raise TemplateError(message)\n\n        jinja_env = ImmutableSandboxedEnvironment(trim_blocks=True, lstrip_blocks=True)\n        jinja_env.globals[\"raise_exception\"] = raise_exception\n        return jinja_env.from_string(chat_template)\n\n    def _build_from_raw_template(\n        self, messages: List, chat_template: str, **kwargs\n    ) -> str:\n        compiled_template = self._compile_jinja_template(chat_template)\n        rendered = compiled_template.render(\n            messages=messages, add_generation_prompt=True, **kwargs\n        )\n        return rendered\n\n    def get_full_context(\n        self,\n        messages: List,\n        chat_template: str,\n        tokenizer=None,\n        tokenize=False,\n        **kwargs,\n    ):\n        if \"vision\" not in self.model_family.model_ability and \"audio\" not in self.model_family.model_ability:  # type: ignore\n            messages = self.convert_messages_with_content_list_to_str_conversion(\n                messages\n            )\n        if tokenizer is not None:\n            try:\n                full_context = tokenizer.apply_chat_template(\n                    messages,\n                    tokenize=tokenize,\n                    chat_template=chat_template,\n                    add_generation_prompt=True,\n                    **kwargs,\n                )\n                logger.debug(\"Prompt: %s\", full_context)\n                return full_context\n            except Exception as e:\n                logger.warning(\n                    f\"tokenizer.apply_chat_template error. Maybe this is an old model: {e}\"\n                )\n                return self._build_from_raw_template(messages, chat_template, **kwargs)\n        else:\n            # build from jinja\n            # Compilation function uses a cache to avoid recompiling the same template\n            return self._build_from_raw_template(messages, chat_template, **kwargs)\n\n    @staticmethod\n    def _get_chat_template_kwargs_from_generate_config(\n        generate_config: Optional[Union[dict, Any]],\n        reasoning_parser: Optional[ReasoningParser] = None,\n    ) -> Optional[dict]:\n        if generate_config and \"chat_template_kwargs\" in generate_config:\n            kwargs = generate_config[\"chat_template_kwargs\"]\n            if isinstance(kwargs, str):\n                try:\n                    return json.loads(kwargs)\n                except json.JSONDecodeError:\n                    raise TypeError(\n                        f\"`chat_template_kwargs` should be json parsable, got: {kwargs}\"\n                    )\n            elif isinstance(kwargs, dict):\n                return kwargs\n            else:\n                raise TypeError(\n                    f\"`chat_template_kwargs` but be a JSON parsable str or dict, got: {kwargs}\"\n                )\n        elif reasoning_parser and not reasoning_parser.enable_thinking:\n            # hybrid model like qwen3,\n            # disabled thinking\n            return {\"enable_thinking\": False}\n        return None\n\n    @staticmethod\n    def convert_messages_with_content_list_to_str_conversion(\n        messages: List[Dict],\n    ) -> List[Dict]:\n        \"\"\"\n        Handles messages with content list conversion, in order to support Cline, see GH#2659 .\n        \"\"\"\n        for message in messages:\n            texts = \"\"\n            msg_content = message.get(\"content\")\n            if msg_content:\n                if isinstance(msg_content, str):\n                    texts = msg_content\n                elif isinstance(msg_content, list):\n                    texts = \"\\n\".join(item.get(\"text\", \"\") for item in msg_content)\n            if texts:\n                message[\"content\"] = texts\n        return messages\n\n    @staticmethod\n    def get_specific_prompt(model_family: str, messages: List[ChatCompletionMessage]):\n        \"\"\"\n        Inspired by FastChat. Format chat history into a prompt according to the prompty style of\n        different models.\n        \"\"\"\n        _messages = [x for x in messages]  # copy for not modifying the origin messages\n        _messages.append({\"role\": \"assistant\", \"content\": \"\"})\n\n        if \"internvl\" in model_family.lower():\n            system_prompt = (\n                messages[0][\"content\"] if messages[0][\"role\"] == \"system\" else \"\"\n            )\n            intra_message_sep = \"<|im_end|>\"\n            ret = (\n                \"<s>\"\n                if system_prompt == \"\"\n                else \"<s><|im_start|>system\\n\"  # type: ignore\n                + system_prompt\n                + intra_message_sep\n                + \"\\n\"\n            )\n            images = []  # type: ignore\n            for message in _messages:\n                role = \"<|im_start|>\" + message[\"role\"]\n                content = message[\"content\"]\n                if isinstance(content, str):\n                    if content:\n                        ret += role + \"\\n\" + content + intra_message_sep + \"\\n\"\n                    else:\n                        ret += role + \"\\n\"\n                elif isinstance(content, list):\n                    text = \"\"\n                    image_urls = []\n                    for c in content:\n                        c_type = c.get(\"type\")\n                        if c_type == \"text\":\n                            text = c[\"text\"]\n                        elif c_type == \"image_url\":\n                            image_urls.append(c[\"image_url\"][\"url\"])\n                    image_futures = []\n                    from concurrent.futures import ThreadPoolExecutor\n\n                    with ThreadPoolExecutor() as executor:\n                        for image_url in image_urls:\n                            fut = executor.submit(_decode_image, image_url)\n                            image_futures.append(fut)\n                    images.extend([fut.result() for fut in image_futures])\n                    if len(image_futures) == 0:\n                        ret += role + \"\\n\" + text + intra_message_sep + \"\\n\"\n                    else:\n                        placeholders = \"\\n\".join(\n                            f\"Image-{i + 1}: <image>\\n\"\n                            for i in range(\n                                len(images) - len(image_futures), len(images)\n                            )\n                        )\n                        ret += (\n                            role\n                            + \"\\n\"\n                            + f\"{placeholders}\\n{text}\"\n                            + intra_message_sep\n                            + \"\\n\"\n                        )\n            if len(images) == 1:\n                ret = ret.replace(\"Image-1: <image>\\n\", \"<image>\\n\")\n            return ret, images\n        else:\n            raise ValueError(f\"Invalid model family: {model_family}\")\n\n    @classmethod\n    def _to_chat_completion_chunk(\n        cls,\n        chunk: CompletionChunk,\n        reasoning_parser: Optional[ReasoningParser] = None,\n        previous_texts: Optional[List[str]] = None,\n        ensure_role: bool = False,\n    ) -> ChatCompletionChunk:\n        choices = chunk.get(\"choices\")\n        if (\n            chunk.get(\"object\") == \"chat.completion.chunk\"\n            and choices\n            and \"delta\" in choices[0]\n        ):\n            first_choice = cast(ChatCompletionChunkChoice, choices[0])\n            delta = first_choice[\"delta\"]\n            if first_choice[\"finish_reason\"] is None:\n                if reasoning_parser and reasoning_parser.check_content_parser():\n                    # process parsing reasoning content\n                    assert previous_texts is not None\n                    if text := delta.get(\"content\"):\n                        current_text = previous_texts[-1] + text\n                        delta = reasoning_parser.extract_reasoning_content_streaming(\n                            previous_text=previous_texts[-1],\n                            current_text=current_text,\n                            delta_text=text,\n                        )\n                        previous_texts[-1] = current_text\n                        first_choice[\"delta\"] = delta\n            elif first_choice[\"finish_reason\"] is not None:\n                if \"content\" not in delta:\n                    delta[\"content\"] = \"\"\n                if reasoning_parser and reasoning_parser.check_content_parser():\n                    delta[\"reasoning_content\"] = None\n            if ensure_role:\n                if delta.get(\"role\") is None:\n                    delta[\"role\"] = \"assistant\"\n                if \"content\" not in delta:\n                    delta[\"content\"] = None\n            # Already a ChatCompletionChunk, we don't need to convert chunk.\n            return cast(ChatCompletionChunk, chunk)\n\n        choices_list: List[ChatCompletionChunkChoice] = []\n        for i, choice in enumerate(choices):  # type: ignore\n            delta = ChatCompletionChunkDelta()\n            if \"text\" in choice and choice[\"finish_reason\"] is None:\n                if reasoning_parser and reasoning_parser.check_content_parser():\n                    assert previous_texts is not None\n                    current_text = previous_texts[-1] + choice[\"text\"]\n                    delta = reasoning_parser.extract_reasoning_content_streaming(\n                        previous_text=previous_texts[-1],\n                        current_text=current_text,\n                        delta_text=choice[\"text\"],\n                    )\n                    previous_texts[-1] = current_text\n                else:\n                    delta[\"content\"] = choice[\"text\"]\n            elif \"text\" in choice and choice[\"finish_reason\"] is not None:\n                delta[\"content\"] = choice[\"text\"]\n                if reasoning_parser and reasoning_parser.check_content_parser():\n                    delta[\"reasoning_content\"] = None\n            elif \"tool_calls\" in choice:\n                delta[\"tool_calls\"] = choice[\"tool_calls\"]\n            choices_list.append(\n                {\n                    \"index\": i,\n                    \"delta\": delta,\n                    \"finish_reason\": choice[\"finish_reason\"],\n                }\n            )\n        assert choices is not None\n        usage = (\n            chunk[\"usage\"]\n            if choices and choices[0][\"finish_reason\"] is not None or not choices\n            else None\n        )\n        chat_chunk = {\n            \"id\": \"chat\" + chunk[\"id\"],\n            \"model\": chunk[\"model\"],\n            \"created\": chunk[\"created\"],\n            \"object\": \"chat.completion.chunk\",\n            \"choices\": choices_list,\n            \"usage\": usage,\n        }\n        if ensure_role and choices_list:\n            first_delta: ChatCompletionChunkDelta = choices_list[0][\"delta\"]\n            if first_delta.get(\"role\") is None:\n                first_delta[\"role\"] = \"assistant\"\n            if \"content\" not in first_delta:\n                first_delta[\"content\"] = None\n        return cast(ChatCompletionChunk, chat_chunk)\n\n    @classmethod\n    def _get_first_chat_completion_chunk(\n        cls,\n        chunk: CompletionChunk,\n        reasoning_parser: Optional[ReasoningParser] = None,\n    ) -> List[ChatCompletionChunk]:\n        choices_list: List[ChatCompletionChunkChoice] = []\n        chunks: List[ChatCompletionChunk] = []\n        for i, choice in enumerate(chunk[\"choices\"]):\n            delta = ChatCompletionChunkDelta(role=\"assistant\", content=\"\")\n            if reasoning_parser and reasoning_parser.check_content_parser():\n                delta[\"content\"] = None\n                delta[\"reasoning_content\"] = \"\"\n            choices_list.append(\n                ChatCompletionChunkChoice(\n                    index=i,\n                    delta=delta,\n                    finish_reason=None,\n                )\n            )\n        chat_chunk = ChatCompletionChunk(\n            id=\"chat\" + chunk[\"id\"],\n            model=chunk[\"model\"],\n            created=chunk[\"created\"],\n            object=\"chat.completion.chunk\",\n            choices=choices_list,\n        )\n        chunks.append(chat_chunk)\n        if reasoning_parser:\n            chunks.extend(reasoning_parser.prepare_first_reasoning_content_chunk(chunk))\n        return chunks\n\n    @classmethod\n    def _get_final_chat_completion_chunk(\n        cls, chunk: CompletionChunk\n    ) -> ChatCompletionChunk:\n        chat_chunk = {\n            \"id\": \"chat\" + chunk[\"id\"],\n            \"model\": chunk[\"model\"],\n            \"created\": chunk[\"created\"],\n            \"object\": \"chat.completion.chunk\",\n            \"choices\": [\n                ChatCompletionChunkChoice(\n                    index=0, delta=ChatCompletionChunkDelta(), finish_reason=\"stop\"\n                )\n            ],\n        }\n        usage = chunk.get(\"usage\")\n        if usage is not None:\n            chat_chunk[\"usage\"] = usage\n        return cast(ChatCompletionChunk, chat_chunk)\n\n    @classmethod\n    def _to_chat_completion_chunks(\n        cls,\n        chunks: Iterator[CompletionChunk],\n        reasoning_parse: Optional[ReasoningParser] = None,\n    ) -> Iterator[ChatCompletionChunk]:\n        previous_texts = [\"\"]\n        is_first_chunk = True\n        if reasoning_parse:\n            chunks = reasoning_parse.prepare_reasoning_content_sync(chunks)\n        for _, chunk in enumerate(chunks):\n            # usage\n            choices = chunk.get(\"choices\")\n            if not choices:\n                # Fallback: convert plain content to choices for streaming\n                content = cast(Optional[str], chunk.get(\"content\"))\n                if content is not None:\n                    finish_reason = cast(Optional[str], chunk.get(\"finish_reason\"))\n                    chunk = chunk.copy()\n                    chunk[\"choices\"] = [\n                        CompletionChoice(\n                            index=0,\n                            text=content,\n                            logprobs=None,\n                            finish_reason=finish_reason,\n                        )\n                    ]\n                    choices = chunk[\"choices\"]\n                else:\n                    yield cls._get_final_chat_completion_chunk(chunk)\n                    continue\n\n            r = cls._to_chat_completion_chunk(\n                chunk, reasoning_parse, previous_texts, ensure_role=is_first_chunk\n            )\n            is_first_chunk = False\n            yield r\n\n    @classmethod\n    def _tools_to_messages_for_deepseek(\n        cls, messages: List[dict], tools: Iterable[dict]\n    ):\n        # deepseek integrates tool calls into messages\n        # we follow the chat template rule to integrate tools into messages\n        tool_call_message: Dict[str, Any] = {\n            \"role\": \"assistant\",\n            \"content\": None,\n            \"tool_calls\": [],\n        }\n\n        for tool in tools:\n            function_name = tool[\"function\"][\"name\"]\n            parameters = tool[\"function\"].get(\"parameters\", {}).get(\"properties\", {})\n            function_args_json = json.dumps(parameters)\n\n            tool_call_message[\"tool_calls\"].append(\n                {\n                    \"type\": \"function\",\n                    \"function\": {\n                        \"name\": function_name,\n                        \"arguments\": function_args_json,\n                    },\n                }\n            )\n\n        messages.append(tool_call_message)\n\n    @classmethod\n    async def _async_to_chat_completion_chunks(\n        cls,\n        chunks: AsyncGenerator[CompletionChunk, None],\n        reasoning_parser: Optional[ReasoningParser] = None,\n        ctx: Optional[Dict[str, Any]] = None,\n    ) -> AsyncGenerator[ChatCompletionChunk, None]:\n        def set_context():\n            if ctx:\n                chat_context_var.set(ctx)\n\n        previous_texts = [\"\"]\n        full_text = \"\"\n        is_first_chunk = True\n        # Process chunks\n        if reasoning_parser:\n            set_context()\n            chunks = reasoning_parser.prepare_reasoning_content_streaming(chunks)\n        async for chunk in chunks:\n            set_context()\n            choices = chunk.get(\"choices\")\n            if not choices:\n                # usage\n                chat_chunk = cls._get_final_chat_completion_chunk(chunk)\n            else:\n                if choices[0].get(\"text\"):\n                    full_text += choices[0][\"text\"]  # type: ignore\n\n                chat_chunk = cls._to_chat_completion_chunk(\n                    chunk,\n                    reasoning_parser,\n                    previous_texts,\n                    ensure_role=is_first_chunk,\n                )\n            is_first_chunk = False\n            yield chat_chunk\n        logger.debug(\"Chat finished, output: %s\", full_text)\n\n    @staticmethod\n    def _to_chat_completion(\n        completion: Completion, reasoning_parser: Optional[ReasoningParser] = None\n    ) -> ChatCompletion:\n        # prepare reasoning content\n        if reasoning_parser:\n            completion = reasoning_parser.prepare_reasoning_content(completion)\n\n        if completion.get(\"object\") == \"chat.completion\" and completion.get(\"choices\"):\n            # Already a ChatCompletion\n            for choice in completion[\"choices\"]:\n                message = choice[\"message\"]  # type: ignore\n                text = message[\"content\"]  # Original content from the message\n\n                if reasoning_parser and reasoning_parser.check_content_parser():\n                    # Parse into reasoning and content parts\n                    (\n                        reasoning_val,\n                        content_val,\n                    ) = reasoning_parser.extract_reasoning_content(text)\n                    message[\"content\"] = content_val\n                    if reasoning_val is not None:\n                        message[\"reasoning_content\"] = reasoning_val\n            return cast(ChatCompletion, completion)\n\n        choices = []\n        for i, choice in enumerate(completion[\"choices\"]):\n            content = choice[\"text\"]\n            reasoning_content = None\n\n            if reasoning_parser and reasoning_parser.check_content_parser():\n                reasoning_content, content = reasoning_parser.extract_reasoning_content(  # type: ignore\n                    choice\n                )\n\n            message = {\"role\": \"assistant\", \"content\": content}\n\n            # add only reasoning_content is None\n            if reasoning_content is not None:\n                message[\"reasoning_content\"] = reasoning_content\n\n            choices.append(\n                {\n                    \"index\": i,\n                    \"message\": message,\n                    \"finish_reason\": choice[\"finish_reason\"],\n                }\n            )\n        return {\n            \"id\": \"chat\" + completion[\"id\"],\n            \"object\": \"chat.completion\",\n            \"created\": completion[\"created\"],\n            \"model\": completion[\"model\"],\n            \"choices\": choices,  # type: ignore\n            \"usage\": completion[\"usage\"],\n        }\n\n    @staticmethod\n    def _eval_glm_chat_arguments(c) -> List[Tuple]:\n        \"\"\"\n        Currently, glm4 tool call only supports one function\n        \"\"\"\n        try:\n            if isinstance(c, dict):\n                try:\n                    return [(None, c[\"name\"], json.loads(c[\"arguments\"]))]\n                except Exception:\n                    return [(None, c[\"name\"], c[\"arguments\"])]\n        except KeyError:\n            logger.error(\"Can't parse glm output: %s\", c)\n            return [(str(c), None, None)]\n        else:\n            return [(str(c), None, None)]\n\n    @classmethod\n    def _handle_qwen_tool_result(cls, text: str) -> List[Tuple]:\n        text: str = text.strip()  # type: ignore\n\n        def split_into_blocks(text: str) -> list[str]:\n            # Match blocks starting with <think> or <tool_call> and ending with </think> or </tool_call>\n            pattern = r\"(<(think|tool_call)>.*?</\\2>)\"\n            parts = []\n            last_end = 0\n            # Find all label blocks and record their positions\n            for m in re.finditer(pattern, text, re.DOTALL):\n                # Text before adding tags\n                if m.start() > last_end:\n                    parts.append(text[last_end : m.start()])\n                # Add label block\n                parts.append(m.group(0))\n                last_end = m.end()\n            # Text after adding the last tag\n            if last_end < len(text):\n                parts.append(text[last_end:])\n            return parts\n\n        contents = split_into_blocks(text)\n        results: List[Tuple] = []\n        for content in contents:\n            if content.strip():\n                pos1 = content.find(QWEN_TOOL_CALL_SYMBOLS[0])\n                if pos1 != -1:\n                    content = content[pos1 + len(QWEN_TOOL_CALL_SYMBOLS[0]) :]\n                pos2 = content.find(QWEN_TOOL_CALL_SYMBOLS[1])\n                if pos2 != -1:\n                    content = content[:pos2]\n\n                # Skip empty content after extraction\n                if not content.strip():\n                    continue\n\n                try:\n                    res = json.loads(content, strict=False)\n                    if isinstance(res, dict):\n                        # Check if required fields exist\n                        if \"name\" in res and \"arguments\" in res:\n                            results.append((None, res[\"name\"], res[\"arguments\"]))\n                        else:\n                            logger.warning(\n                                \"Missing required fields in qwen tool call: %s\", content\n                            )\n                            results.append((content, None, None))\n                    else:\n                        logger.warning(\n                            \"Qwen tool call result is not a dict: %s\", content\n                        )\n                        results.append((content, None, None))\n                except json.JSONDecodeError as e:\n                    logger.error(\n                        \"Can't parse single qwen tool call output: %s. Error: %s\",\n                        content,\n                        e,\n                    )\n                    results.append((content, None, None))\n                except Exception as e:\n                    logger.error(\n                        \"Unexpected error parsing qwen tool call: %s. Error: %s\",\n                        content,\n                        e,\n                    )\n                    results.append((content, None, None))\n        return results\n\n    @classmethod\n    def _eval_qwen_chat_arguments(\n        cls, c, tool_call_text: Optional[str] = None\n    ) -> List[Tuple]:\n        text = c[\"choices\"][0][\"text\"]\n        if tool_call_text:\n            text = tool_call_text\n        return cls._handle_qwen_tool_result(text)\n\n    @classmethod\n    def _eval_llama3_chat_arguments(cls, c) -> List[Tuple]:\n        text = c[\"choices\"][0][\"text\"]\n        try:\n            data = eval(text, {}, {})\n            return [(None, data[\"name\"], data[\"parameters\"])]\n        except Exception:\n            return [(text, None, None)]\n\n    @classmethod\n    def _eval_deepseek_chat_arguments(cls, c) -> List[Tuple]:\n        \"\"\"\n        Parses tool calls from deepseek-v3 format and removes duplicates.\n\n        Returns:\n        List[Tuple[Optional[str], Optional[str], Optional[dict]]]\n        - (None, function_name, arguments) if successfully parsed.\n        - (content, None, None) if parsing failed (content is raw JSON text).\n\n        Example input:\n        ```json\n        {\n            \"name\": \"get_weather_and_time\",\n            \"parameters\": {\n                \"location\": \"Hangzhou\"\n            }\n        }\n        ```\n\n        Output:\n        [\n            (None, \"get_current_weather\", {\"location\": \"Hangzhou\"})\n        ]\n        \"\"\"\n\n        text = c[\"choices\"][0][\"text\"]\n\n        pattern = r\"\\s*```json\\s*(.*?)\\s*```\"\n        matches = re.findall(pattern, text, re.DOTALL)\n\n        if not matches:\n            return [(text, None, None)]\n\n        tool_calls = set()  # Used for deduplication\n        results = []\n\n        for raw_json in matches:\n            func_and_args = None\n            try:\n                func_and_args = json.loads(raw_json)\n                # Convert dictionary to frozenset for deduplication\n                arguments_hashable = frozenset(func_and_args[\"parameters\"])\n                tool_call_tuple = (\n                    None,\n                    func_and_args[\"name\"],\n                    func_and_args[\"parameters\"],\n                )\n            except json.JSONDecodeError:\n                tool_call_tuple = (\n                    raw_json,\n                    None,\n                    None,\n                )  # If parsing fails, treat as raw content\n                arguments_hashable = None  # No need for hashing\n\n            # Avoid duplicate entries\n            dedup_key = (\n                (func_and_args[\"name\"], arguments_hashable)\n                if func_and_args is not None\n                else (raw_json)\n            )\n            if dedup_key not in tool_calls:\n                tool_calls.add(dedup_key)\n                results.append(tool_call_tuple)\n\n        return results\n\n    @classmethod\n    def _eval_deepseek_r1_arguments(cls, c) -> List[Tuple]:\n        \"\"\"\n        Parses tool calls from deepseek-r1 (0528) chat template format.\n        Returns:\n            List of (None, function_name, arguments_dict)\n            or (raw_content, None, None) if parsing fails.\n        \"\"\"\n        text = c[\"choices\"][0][\"text\"]\n        pattern = (\n            r\"<\\｜tool▁call▁begin｜>function<\\｜tool▁sep｜>([^\\n]+)\\n\"\n            r\"```json\\n(.*?)\\n```<\\｜tool▁call▁end｜>\"\n        )\n\n        matches = re.findall(pattern, text, re.DOTALL)\n        if not matches:\n            return [(text, None, None)]\n\n        tool_calls = set()\n        results = []\n\n        for func_name, raw_json in matches:\n            func_and_args = None\n            try:\n                func_and_args = json.loads(raw_json)\n                arguments_hashable = frozenset(func_and_args.items())\n                tool_call_tuple = (\n                    None,\n                    func_name,\n                    func_and_args,\n                )\n            except Exception:\n                tool_call_tuple = (raw_json, None, None)\n                arguments_hashable = None\n\n            dedup_key = (\n                (func_name, arguments_hashable)\n                if func_and_args is not None\n                else raw_json\n            )\n            if dedup_key not in tool_calls:\n                tool_calls.add(dedup_key)\n                results.append(tool_call_tuple)\n\n        return results\n\n    @classmethod\n    def _eval_tool_arguments(\n        cls, model_family, c, tool_call_text: Optional[str] = None\n    ):\n        family = model_family.model_family or model_family.model_name\n        if family in GLM4_TOOL_CALL_FAMILY:\n            result = cls._eval_glm_chat_arguments(c)\n        elif family in QWEN_TOOL_CALL_FAMILY:\n            result = cls._eval_qwen_chat_arguments(c, tool_call_text)\n        elif family in LLAMA3_TOOL_CALL_FAMILY:\n            result = cls._eval_llama3_chat_arguments(c)\n        elif family in DEEPSEEK_TOOL_CALL_FAMILY:\n            if family == \"deepseek-r1-0528\":\n                result = cls._eval_deepseek_r1_arguments(c)\n            else:\n                result = cls._eval_deepseek_chat_arguments(c)\n        else:\n            raise Exception(\n                f\"Model {model_family.model_name} is not support tool calls.\"\n            )\n        logger.debug(f\"Tool call content: {result}\")\n        return result\n\n    def _post_process_completion_chunk(\n        self,\n        model_family,\n        model_uid,\n        c,\n        chunk_id=None,\n        previous_texts: List[str] = [\"\"],\n    ):\n        if not c.get(\"choices\"):\n            return c\n        _id = chunk_id if chunk_id is not None else str(uuid.uuid4())\n        tool_result = None\n        finish_reason = None\n        if isinstance(self.tool_parser, Glm4ToolParser):\n            tool_result = self.tool_parser.extract_tool_calls_streaming(\n                [],\n                c,\n                c,\n            )\n        else:\n            finish_reason = c[\"choices\"][0][\"finish_reason\"]\n            delta_text = c[\"choices\"][0][\"delta\"][\"content\"]\n            current_text = (\n                previous_texts[-1] + delta_text if previous_texts else delta_text\n            )\n            tool_result = self.tool_parser.extract_tool_calls_streaming(\n                previous_texts,\n                current_text,\n                delta_text,\n            )\n            previous_texts[-1] = current_text\n        if tool_result is None and not finish_reason:\n            return None\n        tool_calls = []\n        failed_contents = []\n        content, func, args = tool_result if tool_result else (\"\", None, None)\n        if func:\n            tool_calls.append(\n                {\n                    \"index\": 0,\n                    \"id\": f\"call_{str(uuid.uuid4())}\",\n                    \"type\": \"function\",\n                    \"function\": {\n                        \"name\": func,\n                        \"arguments\": json.dumps(args, ensure_ascii=False),\n                    },\n                }\n            )\n        else:\n            failed_contents.append(content)\n\n        finish_reason = \"tool_calls\" if tool_calls else finish_reason\n\n        content = \"\".join(failed_contents) if failed_contents else None\n\n        d = {\n            \"role\": \"assistant\",\n            \"content\": content if content else \"\",\n            \"tool_calls\": tool_calls,\n        }\n\n        # For tool completion chunks, use None for usage, actual values for stop\n        if finish_reason == \"tool_calls\":\n            usage = None\n        else:\n            usage = c.get(\"usage\")\n        return {\n            \"id\": \"chat\" + f\"cmpl-{_id}\",\n            \"model\": model_uid,\n            \"object\": \"chat.completion.chunk\",\n            \"created\": int(time.time()),\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"delta\": d,\n                    \"logprobs\": None,\n                    \"finish_reason\": finish_reason,\n                }\n            ],\n            \"usage\": usage,\n        }\n\n    def _post_process_completion(\n        self,\n        model_family,\n        model_uid,\n        c,\n    ):\n        if not self.tool_parser:\n            return self._get_final_chat_completion_chunk(c)\n\n        _id = str(uuid.uuid4())\n        reasoning_content = None\n        content = \"\"\n\n        # First, process reasoning content if reasoning parser exists\n        text = c[\"choices\"][0][\"text\"]\n        if self.reasoning_parser and self.reasoning_parser.check_content_parser():\n            # Extract reasoning content directly from the original text\n            reasoning_content, processed_content = (\n                self.reasoning_parser.extract_reasoning_content(text)\n            )\n            # Use the processed content (without thinking tags) for tool parsing\n            if processed_content:\n                text = processed_content\n\n        # Then, extract tool calls from the processed text (without thinking tags)\n        tool_calls = []\n        failed_contents = []\n        if isinstance(self.tool_parser, Glm4ToolParser):\n            tool_result = self.tool_parser.extract_tool_calls(c)\n        else:\n            tool_result = self.tool_parser.extract_tool_calls(text)\n\n        # Process tool results\n        for tool_content, func, args in tool_result:\n            if func:\n                tool_calls.append(\n                    {\n                        \"id\": f\"call_{str(uuid.uuid4())}\",\n                        \"type\": \"function\",\n                        \"function\": {\n                            \"name\": func,\n                            \"arguments\": json.dumps(args, ensure_ascii=False),\n                        },\n                    }\n                )\n            else:\n                if tool_content:\n                    failed_contents.append(tool_content)\n\n        # Determine the final content\n        if tool_calls:\n            # For tool calls, the main content should be empty or contain only non-tool parts\n            content = \"\".join(failed_contents) if failed_contents else \"\"\n        else:\n            # For non-tool calls, use the processed content from reasoning parser\n            content = text\n\n        finish_reason = \"tool_calls\" if tool_calls else \"stop\"\n\n        m = {\n            \"role\": \"assistant\",\n            \"content\": content,\n            \"tool_calls\": tool_calls,\n        }\n        # add only reasoning_content is None\n        if reasoning_content is not None:\n            m[\"reasoning_content\"] = reasoning_content\n\n        # For tool completion chunks, use actual usage values when available\n        usage = c.get(\"usage\")\n        if not usage or not isinstance(usage, dict) or \"prompt_tokens\" not in usage:\n            usage = {\n                \"prompt_tokens\": -1,\n                \"completion_tokens\": -1,\n                \"total_tokens\": -1,\n            }\n        return {\n            \"id\": \"chat\" + f\"cmpl-{_id}\",\n            \"model\": model_uid,\n            \"object\": \"chat.completion\",\n            \"created\": int(time.time()),\n            \"choices\": [\n                {\n                    \"index\": 0,\n                    \"message\": m,\n                    \"finish_reason\": finish_reason,\n                }\n            ],\n            \"usage\": usage,\n        }\n\n    def _transform_messages(\n        self,\n        messages: Union[List[ChatCompletionMessage], List[dict]],\n    ):\n        transformed_messages = []\n        for msg in messages:\n            new_content = []\n            role = msg[\"role\"]\n            content = msg[\"content\"]\n            if isinstance(content, str):\n                new_content.append({\"type\": \"text\", \"text\": content})\n            elif isinstance(content, List):\n                for item in content:  # type: ignore\n                    if \"text\" in item:\n                        new_content.append({\"type\": \"text\", \"text\": item[\"text\"]})\n                    elif \"image_url\" in item:\n                        new_content.append(\n                            {\"type\": \"image\", \"image\": item[\"image_url\"][\"url\"]}\n                        )\n                    elif \"video_url\" in item:\n                        new_content.append(\n                            {\"type\": \"video\", \"video\": item[\"video_url\"][\"url\"]}\n                        )\n                    elif \"audio_url\" in item:\n                        new_content.append(\n                            {\"type\": \"audio\", \"audio\": item[\"audio_url\"][\"url\"]}\n                        )\n                    else:\n                        logger.warning(\n                            \"Unknown message type, message: %s, this message may be ignored\",\n                            messages,\n                        )\n            new_message = {\"role\": role, \"content\": new_content}\n            transformed_messages.append(new_message)\n\n        return transformed_messages\n\n    async def _async_to_tool_completion_chunks(\n        self,\n        chunks: AsyncGenerator[CompletionChunk, None],\n        ctx: Optional[Dict[str, Any]] = None,\n    ) -> AsyncGenerator[ChatCompletionChunk, None]:\n        def set_context():\n            if ctx:\n                chat_context_var.set(ctx)\n\n        i = 0\n        previous_texts = [\"\"]\n        previous_tools_texts = [\"\"]\n        full_text = \"\"\n        if self.reasoning_parser:\n            set_context()\n            chunks = self.reasoning_parser.prepare_reasoning_content_streaming(chunks)\n        async for completion_chunk in chunks:\n            set_context()\n            chat_chunk = self._to_chat_completion_chunk(\n                completion_chunk,\n                self.reasoning_parser,\n                previous_texts,\n                ensure_role=i == 0,\n            )\n            if (\n                chat_chunk[\"choices\"]\n                and \"reasoning_content\" in chat_chunk[\"choices\"][0][\"delta\"]\n                and chat_chunk[\"choices\"][0][\"delta\"][\"reasoning_content\"] is not None\n            ):\n                yield chat_chunk\n                continue\n            processed_chunk = self._post_process_completion_chunk(\n                self.model_family,\n                self.model_uid,\n                chat_chunk,\n                previous_texts=previous_tools_texts,\n            )\n            if processed_chunk:\n                yield processed_chunk\n            i += 1\n        logger.debug(\"Chat finished, output: %s\", full_text)\n\n\ndef get_model_version(\n    model_name: str,\n    model_format: str,\n    model_size_in_billions: Union[str, int],\n    quantization: str,\n) -> str:\n    return f\"{model_name}--{model_size_in_billions}B--{model_format}--{quantization}\"\n\n\ndef _decode_image(_url):\n    if _url.startswith(\"data:\"):\n        logging.info(\"Parse url by base64 decoder.\")\n        # https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images\n        # e.g. f\"data:image/jpeg;base64,{base64_image}\"\n        _type, data = _url.split(\";\")\n        _, ext = _type.split(\"/\")\n        data = data[len(\"base64,\") :]\n        data = base64.b64decode(data.encode(\"utf-8\"))\n        return Image.open(BytesIO(data)).convert(\"RGB\")\n    else:\n        try:\n            response = requests.get(_url)\n        except requests.exceptions.MissingSchema:\n            return Image.open(_url).convert(\"RGB\")\n        else:\n            return Image.open(BytesIO(response.content)).convert(\"RGB\")\n\n\ndef _decode_image_without_rgb(_url):\n    if _url.startswith(\"data:\"):\n        logging.info(\"Parse url by base64 decoder.\")\n        # https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images\n        # e.g. f\"data:image/jpeg;base64,{base64_image}\"\n        _type, data = _url.split(\";\")\n        _, ext = _type.split(\"/\")\n        data = data[len(\"base64,\") :]\n        data = base64.b64decode(data.encode(\"utf-8\"))\n        return Image.open(BytesIO(data))\n    else:\n        try:\n            response = requests.get(_url)\n        except requests.exceptions.MissingSchema:\n            return Image.open(_url)\n        else:\n            return Image.open(BytesIO(response.content))\n\n\n@typing.no_type_check\ndef generate_completion_chunk(\n    chunk_text: Optional[str],\n    finish_reason: Optional[str],\n    chunk_id: str,\n    model_uid: str,\n    prompt_tokens: int,\n    completion_tokens: int,\n    total_tokens: int,\n    has_choice: bool = True,\n    has_content: bool = True,\n):\n    choices = []\n    if has_choice:\n        choices.append(\n            CompletionChoice(\n                text=chunk_text, index=0, logprobs=None, finish_reason=finish_reason\n            )\n            if has_content\n            else CompletionChoice(index=0, logprobs=None, finish_reason=finish_reason)\n        )\n    return CompletionChunk(\n        id=chunk_id,\n        object=\"text_completion\",\n        created=int(time.time()),\n        model=model_uid,\n        choices=choices,\n        usage=CompletionUsage(\n            prompt_tokens=prompt_tokens,\n            completion_tokens=completion_tokens,\n            total_tokens=total_tokens,\n        ),\n    )\n\n\ndef generate_completion(\n    model_uid: str,\n    response: str,\n    prompt_tokens=-1,\n    completion_tokens=-1,\n    total_tokens=-1,\n    finish_reason=\"stop\",\n) -> Completion:\n    return Completion(\n        id=str(uuid.uuid1()),\n        object=\"text_completion\",\n        created=int(time.time()),\n        model=model_uid,\n        choices=[\n            CompletionChoice(\n                text=response, index=0, logprobs=None, finish_reason=finish_reason\n            )\n        ],\n        usage=CompletionUsage(\n            prompt_tokens=prompt_tokens,\n            completion_tokens=completion_tokens,\n            total_tokens=total_tokens,\n        ),\n    )\n\n\ndef generate_chat_completion(\n    model_uid: str,\n    response: str,\n    prompt_tokens=-1,\n    completion_tokens=-1,\n    total_tokens=-1,\n    finish_reason=\"stop\",\n) -> ChatCompletion:\n    return ChatCompletion(\n        id=\"chat\" + str(uuid.uuid1()),\n        object=\"chat.completion\",\n        created=int(time.time()),\n        model=model_uid,\n        choices=[\n            ChatCompletionChoice(\n                index=0,\n                message={\"role\": \"assistant\", \"content\": response},\n                finish_reason=finish_reason,\n            )\n        ],\n        usage=CompletionUsage(\n            prompt_tokens=prompt_tokens,\n            completion_tokens=completion_tokens,\n            total_tokens=total_tokens,\n        ),\n    )\n\n\n@functools.lru_cache\ndef get_stop_token_ids_from_config_file(model_path: str) -> Optional[List[int]]:\n    from transformers import GenerationConfig as TransformersGenerationConfig\n\n    try:\n        transformers_config = TransformersGenerationConfig.from_pretrained(model_path)\n        if transformers_config.eos_token_id is not None:\n            stop_token_ids = (\n                transformers_config.eos_token_id\n                if isinstance(transformers_config.eos_token_id, list)\n                else [transformers_config.eos_token_id]\n            )\n            return stop_token_ids\n        return None\n    except OSError as e:\n        logger.warning(\n            \"Failed to load model config from path %s: %s. Stop tokens will not be applied.\",\n            model_path,\n            e,\n        )\n        return None\n\n\ndef normalize_response_format(\n    response_format: Optional[Dict[str, Any]],\n) -> Optional[Dict[str, Any]]:\n    \"\"\"\n    Normalize OpenAI-style response_format into a simple dict.\n    Returns:\n        None if missing/unsupported, or a dict with keys:\n            - type: \"json_schema\" | \"json_object\"\n            - schema_dict: dict (only for json_schema)\n    \"\"\"\n    if not response_format or not isinstance(response_format, dict):\n        return None\n\n    fmt_type = response_format.get(\"type\")\n    if fmt_type not in (\"json_schema\", \"json_object\"):\n        return None\n\n    normalized: Dict[str, Any] = {\"type\": fmt_type}\n    if fmt_type == \"json_schema\":\n        schema_block = response_format.get(\"json_schema\") or {}\n        schema_dict = schema_block.get(\"schema_\") or schema_block.get(\"schema\")\n        if schema_dict:\n            normalized[\"schema_dict\"] = schema_dict\n    return normalized\n\n\ndef parse_messages(messages: List[Dict]) -> Tuple:\n    \"\"\"\n    Some older models still follow the old way of parameter passing.\n    This function helps to parse out the needed information from OpenAI-compatible `messages`.\n    \"\"\"\n    system_messages = [mess[\"content\"] for mess in messages if mess[\"role\"] == \"system\"]\n    content_messages = [mess for mess in messages if mess[\"role\"] != \"system\"]\n    prompt = content_messages[-1][\"content\"]\n    system_prompt = \". \".join(system_messages) if system_messages else None\n    chat_history = content_messages[:-1]\n    return prompt, system_prompt, chat_history\n"
  },
  {
    "path": "xinference/model/llm/vllm/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/vllm/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport importlib\nimport importlib.util\nimport itertools\nimport json\nimport logging\nimport multiprocessing\nimport os\nimport sys\nimport threading\nimport time\nimport uuid\nfrom functools import partial\nfrom typing import (\n    TYPE_CHECKING,\n    Any,\n    AsyncGenerator,\n    Dict,\n    List,\n    Optional,\n    Tuple,\n    Type,\n    TypedDict,\n    Union,\n    cast,\n)\n\nimport xoscar as xo\nfrom packaging import version\nfrom typing_extensions import NotRequired\n\nfrom ....constants import XINFERENCE_MAX_TOKENS\nfrom ....device_utils import is_vacc_available\nfrom ....types import (\n    ChatCompletion,\n    ChatCompletionChunk,\n    ChatCompletionMessage,\n    Completion,\n    CompletionChoice,\n    CompletionChunk,\n    CompletionUsage,\n    LoRA,\n)\nfrom .. import BUILTIN_LLM_FAMILIES, LLM, LLMFamilyV2, LLMSpecV1\nfrom ..core import chat_context_var\nfrom ..llm_family import cache_model_tokenizer_and_config\nfrom ..utils import (\n    DEEPSEEK_TOOL_CALL_FAMILY,\n    QWEN_TOOL_CALL_FAMILY,\n    QWEN_TOOL_CALL_SYMBOLS,\n    ChatModelMixin,\n    generate_completion_chunk,\n)\nfrom .utils import vllm_check\n\nlogger = logging.getLogger(__name__)\n\nif TYPE_CHECKING:\n    from vllm.outputs import RequestOutput\n\n    # Handle ExecutorBase type import for different vLLM versions\n    # vLLM >= 0.11.1: from vllm.v1.executor import Executor\n    # vLLM < 0.11.1: from vllm.executor.executor_base import ExecutorBase\n    try:\n        from vllm.v1.executor import Executor as ExecutorBase\n    except ImportError:\n        try:\n            from vllm.executor.executor_base import ExecutorBase\n        except ImportError:\n            # If vLLM is not installed, define a placeholder for type checking\n            ExecutorBase = Any  # type: ignore\n\n\nclass VLLMModelConfig(TypedDict, total=False):\n    tokenizer_mode: Optional[str]\n    trust_remote_code: bool\n    tensor_parallel_size: int\n    pipeline_parallel_size: int\n    nnodes: int\n    node_rank: int\n    distributed_executor_backend: str\n    block_size: int\n    swap_space: int  # GiB\n    gpu_memory_utilization: float\n    max_num_batched_tokens: int\n    max_num_seqs: int\n    quantization: Optional[str]\n    max_model_len: Optional[int]\n    limit_mm_per_prompt: Optional[Dict[str, int]]\n    guided_decoding_backend: Optional[str]\n    scheduling_policy: Optional[str]\n    reasoning_content: bool\n    model_quantization: Optional[str]\n    mm_processor_kwargs: NotRequired[dict[str, Any]]\n    min_pixels: NotRequired[int]\n    max_pixels: NotRequired[int]\n    enable_expert_parallel: bool\n    speculative_config: Optional[Dict[str, Any]]\n    rope_scaling: Optional[Dict[str, Any]]\n    hf_overrides: Optional[Dict[str, Any]]\n\n\nclass VLLMGenerateConfig(TypedDict, total=False):\n    lora_name: Optional[str]\n    n: int\n    best_of: Optional[int]\n    seed: Optional[int]\n    presence_penalty: float\n    frequency_penalty: float\n    repetition_penalty: float\n    temperature: float\n    top_p: float\n    top_k: int\n    max_tokens: int\n    stop_token_ids: Optional[List[int]]\n    stop: Optional[Union[str, List[str]]]\n    stream: bool  # non-sampling param, should not be passed to the engine.\n    stream_options: Optional[Union[dict, None]]\n    skip_special_tokens: Optional[bool]\n    response_format: Optional[dict]\n    guided_json: Optional[Union[str, dict]]\n    guided_regex: Optional[str]\n    guided_choice: Optional[List[str]]\n    guided_grammar: Optional[str]\n    guided_json_object: Optional[bool]\n    guided_decoding_backend: Optional[str]\n    guided_whitespace_pattern: Optional[str]\n    ignore_eos: Optional[bool]\n\n\ntry:\n    if is_vacc_available():\n        import vllm_vacc  # noqa: F401\n\n    import vllm  # noqa: F401\n\n    if not getattr(vllm, \"__version__\", None):\n        raise ImportError(\n            \"vllm not installed properly, or wrongly be found in sys.path\"\n        )\n\n    VLLM_INSTALLED = True\n    VLLM_VERSION = version.parse(vllm.__version__)\nexcept ImportError:\n    VLLM_INSTALLED = False\n    VLLM_VERSION = None\n\nDEFAULT_VLLM_VERSION = version.parse(\"0.13.0\")\n\n\ndef _get_effective_vllm_version() -> version.Version:\n    if VLLM_VERSION is not None:\n        return VLLM_VERSION\n    try:\n        from ....constants import XINFERENCE_ENABLE_VIRTUAL_ENV\n    except Exception:\n        XINFERENCE_ENABLE_VIRTUAL_ENV = False\n    if XINFERENCE_ENABLE_VIRTUAL_ENV:\n        return DEFAULT_VLLM_VERSION\n    return version.parse(\"0.0.0\")\n\n\ndef _virtual_env_allows_missing_vllm() -> bool:\n    try:\n        from ....constants import XINFERENCE_ENABLE_VIRTUAL_ENV\n    except Exception:\n        return False\n    return bool(XINFERENCE_ENABLE_VIRTUAL_ENV)\n\n\ndef _append_unique(target: List[str], *items: str) -> None:\n    for item in items:\n        if item not in target:\n            target.append(item)\n\n\nVLLM_SUPPORTED_MULTI_MODEL_LIST: List[str] = []\nVLLM_SUPPORTED_MODELS = [\n    \"LlamaForCausalLM\",\n    \"MistralForCausalLM\",\n]\nVLLM_SUPPORTED_CHAT_MODELS = [\n    \"LlamaForCausalLM\",\n    \"BaichuanForCausalLM\",\n    \"InternLM2ForCausalLM\",\n    \"QWenLMHeadModel\",\n    \"MistralForCausalLM\",\n    \"MixtralForCausalLM\",\n    \"ChatGLMForConditionalGeneration\",\n    \"GlmForCausalLM\",\n    \"ChatGLMModel\",\n]\n\n\ndef _update_vllm_supported_lists() -> None:\n    effective_version = _get_effective_vllm_version()\n    if effective_version >= version.parse(\"0.3.0\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"Qwen2ForCausalLM\")\n        _append_unique(VLLM_SUPPORTED_MODELS, \"Qwen2ForCausalLM\")\n\n    if effective_version >= version.parse(\"0.3.2\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"GemmaForCausalLM\")\n\n    if effective_version >= version.parse(\"0.3.3\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"OrionForCausalLM\")\n\n    if effective_version >= version.parse(\"0.4.0\"):\n        _append_unique(\n            VLLM_SUPPORTED_CHAT_MODELS, \"Qwen2MoeForCausalLM\", \"CohereForCausalLM\"\n        )\n\n    if effective_version >= version.parse(\"0.5.1\"):\n        _append_unique(\n            VLLM_SUPPORTED_CHAT_MODELS,\n            \"DeepseekV2ForCausalLM\",\n            \"DeepseekV3ForCausalLM\",\n            \"Qwen3ForCausalLM\",\n        )\n\n    if effective_version >= version.parse(\"0.6.1\"):\n        _append_unique(VLLM_SUPPORTED_MULTI_MODEL_LIST, \"InternVLChatModel\")\n\n    if effective_version >= version.parse(\"0.6.2\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"MiniCPM3ForCausalLM\")\n\n    if effective_version >= version.parse(\"0.6.3\"):\n        _append_unique(VLLM_SUPPORTED_MODELS, \"MllamaForConditionalGeneration\")\n        _append_unique(\n            VLLM_SUPPORTED_MULTI_MODEL_LIST,\n            \"MllamaForConditionalGeneration\",\n            \"Qwen2VLForConditionalGeneration\",\n            \"Qwen2AudioForConditionalGeneration\",\n        )\n\n    if effective_version >= version.parse(\"0.7.0\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"InternLM3ForCausalLM\")\n\n    if effective_version >= version.parse(\"0.7.2\"):\n        _append_unique(\n            VLLM_SUPPORTED_MULTI_MODEL_LIST,\n            \"Qwen2_5_VLForConditionalGeneration\",\n            \"Qwen2AudioForConditionalGeneration\",\n        )\n\n    if effective_version >= version.parse(\"0.7.3\"):\n        _append_unique(VLLM_SUPPORTED_MULTI_MODEL_LIST, \"Qwen2_5OmniModel\")\n\n    if effective_version >= version.parse(\"0.8.0\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"Gemma3ForCausalLM\")\n        _append_unique(\n            VLLM_SUPPORTED_MULTI_MODEL_LIST, \"Gemma3ForConditionalGeneration\"\n        )\n\n    if effective_version >= version.parse(\"0.8.4\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"Glm4ForCausalLM\")\n\n    if effective_version >= version.parse(\"0.9.1\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"MiniCPMForCausalLM\")\n\n    if effective_version >= version.parse(\"0.9.2\"):\n        _append_unique(\n            VLLM_SUPPORTED_CHAT_MODELS,\n            \"Ernie4_5ForCausalLM\",\n            \"Qwen3MoeForCausalLM\",\n        )\n        _append_unique(VLLM_SUPPORTED_MULTI_MODEL_LIST, \"Glm4vForConditionalGeneration\")\n\n    if effective_version >= version.parse(\"0.10.0\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"Glm4MoeForCausalLM\")\n        _append_unique(\n            VLLM_SUPPORTED_MULTI_MODEL_LIST, \"Glm4vMoeForConditionalGeneration\"\n        )\n\n    if effective_version > version.parse(\"0.10.0\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"GptOssForCausalLM\")\n\n    if effective_version >= version.parse(\"0.10.2\"):\n        _append_unique(\n            VLLM_SUPPORTED_CHAT_MODELS, \"SeedOssForCausalLM\", \"Qwen3NextForCausalLM\"\n        )\n        _append_unique(VLLM_SUPPORTED_MULTI_MODEL_LIST, \"MiniCPMV\")\n\n    if effective_version >= version.parse(\"0.11.0\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"DeepseekV32ForCausalLM\")\n        _append_unique(\n            VLLM_SUPPORTED_MULTI_MODEL_LIST,\n            \"Qwen3VLMoeForConditionalGeneration\",\n            \"Qwen3OmniMoeForConditionalGeneration\",\n        )\n\n    if effective_version >= version.parse(\"0.11.2\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"MiniMaxM2ForCausalLM\")\n\n    if effective_version >= version.parse(\"0.15.0\"):\n        _append_unique(\n            VLLM_SUPPORTED_MULTI_MODEL_LIST, \"KimiK25ForConditionalGeneration\"\n        )\n\n    if effective_version >= version.parse(\"0.16.0\"):\n        _append_unique(VLLM_SUPPORTED_CHAT_MODELS, \"GlmMoeDsaForCausalLM\")\n\n    if effective_version > version.parse(\"0.16.0\"):\n        _append_unique(\n            VLLM_SUPPORTED_MULTI_MODEL_LIST, \"Qwen3_5MoeForConditionalGeneration\"\n        )\n\n\n_update_vllm_supported_lists()\n\n\nclass VLLMModel(LLM):\n    allow_batch = True\n\n    def __init__(\n        self,\n        model_uid: str,\n        model_family: \"LLMFamilyV2\",\n        model_path: str,\n        model_config: Optional[VLLMModelConfig],\n        peft_model: Optional[List[LoRA]] = None,\n    ):\n        super().__init__(model_uid, model_family, model_path)\n        self._model_config = model_config\n        self._engine = None\n        self.lora_modules = peft_model\n        self.lora_requests: List[Any] = []\n        self._xavier_config = None\n        self._context_length: Optional[int] = None\n        # distributed inference\n        self._device_count = None\n        self._address = model_config.pop(\"address\", None)  # type: ignore\n        self._n_worker = model_config.pop(\"n_worker\", 1)  # type: ignore\n        self._shard = model_config.pop(\"shard\", 0)  # type: ignore\n        self._driver_info = model_config.pop(\"driver_info\", None)  # type: ignore\n        self._loading_thread: Optional[threading.Thread] = None\n        self._loading_error = None\n        # variables used for distributed inference and multiple GPUs\n        self._pool_addresses = None\n        self._worker_addresses: Optional[Dict[int, List[str]]] = None\n        self._all_worker_ready: Optional[threading.Event] = None\n        # used to call async\n        self._loop = None\n\n    def set_xavier_config(self, value: Optional[Dict]):\n        self._xavier_config = value  # type: ignore\n\n    def set_worker_addresses(self, shard: int, worker_addresses: List[str]):\n        assert self._worker_addresses is not None\n        self._worker_addresses[shard] = worker_addresses\n        if (\n            self._all_worker_ready is not None\n            and len(self._worker_addresses) == self._n_worker\n        ):\n            self._all_worker_ready.set()\n\n    @property\n    def driver_info(self) -> Optional[dict]:\n        return self._driver_info\n\n    @property\n    def need_create_pools(self):\n        return True\n\n    def set_pool_addresses(self, pool_addresses: List[str]):\n        self._pool_addresses = pool_addresses  # type: ignore\n\n    def get_pool_addresses(self) -> Optional[List[str]]:\n        return self._pool_addresses\n\n    def set_loop(self, loop: asyncio.AbstractEventLoop):\n        # loop will be passed into XinferenceDistributedExecutor,\n        # to call aynsc method with asyncio.run_coroutine_threadsafe\n        self._loop = loop  # type: ignore\n\n    def _is_vllm_v1(self) -> bool:\n        \"\"\"\n        Check if vLLM v1 is being used.\n\n        For vLLM >= 0.11.1: v1 is the default, no VLLM_USE_V1 env var needed\n        For vLLM < 0.11.1: check VLLM_USE_V1 environment variable\n        \"\"\"\n        from vllm import envs\n\n        # For vLLM >= 0.11.1, v1 is default\n        if VLLM_VERSION > version.parse(\"0.11.0\"):\n            return True\n\n        # For older versions, check the environment variable\n        return envs.is_set(\"VLLM_USE_V1\") and envs.VLLM_USE_V1\n\n    def load(self):\n        try:\n            import vllm\n            from vllm.engine.arg_utils import AsyncEngineArgs\n            from vllm.engine.async_llm_engine import AsyncLLMEngine\n            from vllm.lora.request import LoRARequest\n\n            # Handle ExecutorBase import for different vLLM versions\n            # vLLM >= 0.11.1: from vllm.v1.executor import Executor\n            # vLLM < 0.11.1: from vllm.executor.executor_base import ExecutorBase\n            try:\n                from vllm.v1.executor import Executor as ExecutorBase\n            except ImportError:\n                from vllm.executor.executor_base import ExecutorBase\n        except ImportError:\n            error_message = \"Failed to import module 'vllm'\"\n            installation_guide = [\n                \"Please make sure 'vllm' is installed. \",\n                \"You can install it by `pip install vllm`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        if not getattr(vllm, \"__version__\", None):\n            raise ImportError(\n                \"vllm not installed properly, or wrongly be found in sys.path\"\n            )\n        global VLLM_INSTALLED, VLLM_VERSION\n        VLLM_INSTALLED = True\n        VLLM_VERSION = version.parse(vllm.__version__)\n        _update_vllm_supported_lists()\n\n        from ..llm_family import LlamaCppLLMSpecV2\n\n        if version.parse(\"0.3.1\") <= VLLM_VERSION <= version.parse(\"0.3.3\"):\n            # from vllm v0.3.1 to v0.3.3, it uses cupy as NCCL backend\n            # in which cupy will fork a process\n            # only for xoscar >= 0.3.0, new process is allowed in subpool\n            # besides, xinference set start method as forkserver for unix\n            # we need to set it to fork to make cupy NCCL work\n            multiprocessing.set_start_method(\"fork\", force=True)\n\n        self._device_count = self._get_cuda_count()\n        self._model_config = self._sanitize_model_config(self._model_config)\n        reasoning_content = self._model_config.pop(\"reasoning_content\")\n        enable_thinking = self._model_config.pop(\"enable_thinking\", False)\n        self.prepare_parse_reasoning_content(\n            reasoning_content, enable_thinking=enable_thinking\n        )\n        self.prepare_parse_tool_calls()\n\n        if (\n            isinstance(self.model_spec, LlamaCppLLMSpecV2)\n            and self.model_spec.model_format == \"ggufv2\"\n        ):\n            # gguf\n            self._preprocess_load_gguf()\n\n        if self.lora_modules is None:\n            self.lora_requests = []\n        else:\n            self.lora_requests = [\n                LoRARequest(\n                    lora_name=lora.lora_name,\n                    lora_int_id=i,\n                    lora_local_path=lora.local_path,\n                )\n                for i, lora in enumerate(self.lora_modules, start=1)\n            ]\n\n        enable_lora = len(self.lora_requests) > 0\n        max_loras = len(self.lora_requests)\n\n        logger.info(\n            f\"Loading {self.model_uid} with following model config: {self._model_config}\"\n            f\"Enable lora: {enable_lora}. Lora count: {max_loras}.\"\n        )\n\n        if self._xavier_config is not None:\n            from .xavier.engine import XavierEngine\n\n            # Enabling Xavier means that `enable_prefix_caching` is enabled by default.\n            self._model_config.setdefault(\"enable_prefix_caching\", True)\n            xavier_transfer_block_num = self._model_config.pop(\n                \"xavier_transfer_block_num\", 512\n            )\n            self._xavier_config[\"transfer_block_num\"] = xavier_transfer_block_num\n            engine_args = AsyncEngineArgs(\n                model=self.model_path,\n                enable_lora=enable_lora,\n                max_loras=max_loras,\n                **self._model_config,\n            )\n\n            logger.debug(f\"Start xavier for vllm with config: {self._xavier_config}\")\n            self._engine = XavierEngine.from_engine_args(\n                engine_args, xavier_config=self._xavier_config\n            )\n        elif self._n_worker > 1 or (\n            self._device_count > 1 and VLLM_VERSION >= version.parse(\"0.7.0\")\n        ):\n            from vllm.config import VllmConfig\n\n            # model across multiple workers or GPUs\n            engine_args = AsyncEngineArgs(\n                model=self.model_path,\n                enable_lora=enable_lora,\n                max_loras=max_loras,\n                **self._model_config,\n            )\n            self._enable_v1_if_supported(engine_args)\n\n            assert self._loop is not None\n            self._worker_addresses = {}\n\n            def _load():\n                try:\n                    assert self._pool_addresses\n\n                    if self._shard > 0:\n                        assert self._driver_info\n                        address = self._driver_info[\"address\"]\n\n                        coro = xo.actor_ref(address, self.raw_model_uid)\n                        model_ref = asyncio.run_coroutine_threadsafe(\n                            coro, self._loop\n                        ).result()\n                        coro = model_ref.set_worker_addresses(\n                            self._shard, self._pool_addresses\n                        )\n                        asyncio.run_coroutine_threadsafe(coro, self._loop).result()\n                    else:\n                        self.set_worker_addresses(0, self._pool_addresses)\n                        self._driver_info = {\"address\": self._address}\n\n                        if self._n_worker > 1:\n                            self._all_worker_ready = threading.Event()\n                            # if model across workers, wait for other workers ready\n                            self._all_worker_ready.wait()\n\n                        # gather all worker addresses\n                        worker_addresses = list(\n                            itertools.chain(\n                                *[\n                                    self._worker_addresses[shard]\n                                    for shard in range(self._n_worker)\n                                ]\n                            )\n                        )\n                        assert worker_addresses\n                        loop = self._loop\n\n                        if not self._is_vllm_v1():\n                            # vLLM v0\n                            from .distributed_executor import (\n                                XinferenceDistributedExecutor,\n                            )\n\n                            class XinferenceAsyncLLMEngine(AsyncLLMEngine):\n                                @classmethod\n                                def _get_executor_cls(\n                                    cls, engine_config: VllmConfig\n                                ) -> Type[ExecutorBase]:\n                                    return partial(  # type: ignore\n                                        XinferenceDistributedExecutor,\n                                        pool_addresses=worker_addresses,\n                                        n_worker=self._n_worker,\n                                        loop=loop,\n                                    )\n\n                            self._engine = XinferenceAsyncLLMEngine.from_engine_args(\n                                engine_args\n                            )\n                        else:\n                            from vllm.v1.executor.abstract import Executor\n\n                            # Import the appropriate executor based on vLLM version\n                            if VLLM_VERSION > version.parse(\"0.11.0\"):\n                                from .distributed_executor_v1 import (\n                                    XinferenceDistributedExecutorV1,\n                                )\n                            else:\n                                from .distributed_executor import (\n                                    XinferenceDistributedExecutorV1,\n                                )\n\n                            # vLLM V1\n                            # NOTE: loop has to be None for vLLM v1\n                            # in v1, a new process called EngineCore will be created via fork by default\n                            # in which executor is initialized, we cannot pass loop, or it will be stuck,\n                            # instead, a new loop will be created inside executor\n                            executor_cls = partial(  # type: ignore\n                                XinferenceDistributedExecutorV1,\n                                pool_addresses=worker_addresses,\n                                n_worker=self._n_worker,\n                            )\n                            # patch vllm Executor.get_class\n                            Executor.get_class = lambda vllm_config: executor_cls\n                            self._engine = AsyncLLMEngine.from_engine_args(engine_args)\n                except:  # noqa: E722\n                    logger.exception(\"Creating vllm engine failed\")\n                    self._loading_error = sys.exc_info()\n\n            self._loading_thread = threading.Thread(target=_load)\n            self._loading_thread.start()\n            # wait some time for init finish\n            if self._shard == 0:\n                self._loading_thread.join(1)\n        else:\n            engine_args = AsyncEngineArgs(\n                model=self.model_path,\n                enable_lora=enable_lora,\n                max_loras=max_loras,\n                **self._model_config,\n            )\n            self._enable_v1_if_supported(engine_args)\n            self._engine = AsyncLLMEngine.from_engine_args(engine_args)\n\n        self._check_health_task = None\n        if hasattr(self._engine, \"check_health\"):\n            # vLLM introduced `check_health` since v0.4.1\n            self._check_health_task = self._loop.create_task(self._check_healthy())\n\n    def wait_for_load(self):\n        if self._loading_thread:\n            self._loading_thread.join()\n            if self._loading_error:\n                _, err, tb = self._loading_error\n                raise err.with_traceback(tb)\n\n        # set context length after engine inited\n        # if shard > 0, the engine will be inited in another process\n        if self._engine:\n            self._set_context_length()\n\n    def _set_context_length(self):\n        if not self._is_vllm_v1():\n            # v0\n            self._context_length = (\n                self._engine.engine.vllm_config.model_config.max_model_len\n            )\n        else:\n            # v1\n            self._context_length = self._engine.model_config.max_model_len\n        assert self._context_length is not None\n        logger.debug(\"Model context length: %s\", self._context_length)\n\n    def _enable_v1_if_supported(self, engine_args: \"vllm.AsyncEngineArgs\"):\n        # For vLLM >= 0.11.1, v1 is the default, no need to set environment variable\n        if VLLM_VERSION >= version.parse(\"0.11.1\"):\n            logger.debug(\n                \"vLLM >= 0.11.1 detected, v1 is default, skip setting VLLM_USE_V1\"\n            )\n            return\n\n        if os.getenv(\"VLLM_USE_V1\") is not None:\n            logger.debug(\n                \"Setting vLLM v1 via environment variable already, skip checking\"\n            )\n            return\n\n        try:\n            supported_func = engine_args._is_v1_supported_oracle\n        except AttributeError:\n            logger.debug(\n                \"Cannot get `EngineArgs._is_v1_supported_oracle` \"\n                \"to decide enabling vLLM v1, perhaps vllm version is too old, \"\n                \"version: %s\",\n                VLLM_VERSION,\n            )\n            return\n        model_config = engine_args.create_model_config()\n        old_main_thread = threading.main_thread()\n        try:\n            # HACK: patch main thread to let vllm pass check\n            # vllm do some signal handling when on main thread\n            # but they will skip registering signal if not on main thread,\n            # however, the _is_v1_supported_oracle will return False\n            # when not on main thread, we patched the main thread temporially,\n            # It's OK because Xinference will take care of all processes\n            threading.main_thread = lambda: threading.current_thread()\n\n            if supported_func(model_config):\n                logger.debug(\"Setting vLLM v1 by checking model config\")\n                os.environ[\"VLLM_USE_V1\"] = \"1\"\n            else:\n                logger.debug(\"Use vLLM v0 due to not supported config\")\n        finally:\n            # patch back\n            threading.main_thread = lambda: old_main_thread\n\n    def _preprocess_load_gguf(self):\n        # check if it is multi gguf files\n        if (\n            not os.path.isfile(self.model_path)\n            and self.model_spec.quantization_parts\n            and self.quantization in self.model_spec.quantization_parts\n        ):\n            raise RuntimeError(\n                \"vllm does not support multiple gguf files, please merge them first and \"\n                \"provide `model_path` with merged file\"\n            )\n\n        if \"tokenizer\" not in self._model_config:\n            # find pytorch format without quantization\n            family = next(\n                family\n                for family in BUILTIN_LLM_FAMILIES\n                if family.model_name == self.model_family.model_name\n            ).copy()\n            non_quant_spec = next(\n                spec\n                for spec in family.model_specs\n                if spec.quantization == \"none\"\n                and spec.model_size_in_billions\n                == self.model_spec.model_size_in_billions\n                and spec.model_hub == self.model_spec.model_hub\n            )\n            family.model_specs = [non_quant_spec]\n            path = cache_model_tokenizer_and_config(family)\n            # other than gguf file, vllm requires to provide tokenizer and hf_config_path\n            self._model_config[\"tokenizer\"] = self._model_config[\"hf_config_path\"] = (\n                path\n            )\n\n        if not os.path.isfile(self.model_path):\n            self.model_path = os.path.realpath(\n                os.path.join(\n                    self.model_path,\n                    self.model_spec.model_file_name_template.format(\n                        quantization=self.quantization\n                    ),\n                )\n            )\n\n    def stop(self):\n        # though the vLLM engine will shutdown when deleted,\n        # but some issue e.g. GH#1682 reported\n        # when deleting, the engine exists still\n        logger.info(\"Stopping vLLM engine\")\n        if self._check_health_task:\n            self._check_health_task.cancel()\n        if self._engine:\n            if not self._is_vllm_v1():\n                # v0\n                if model_executor := getattr(\n                    self._engine.engine, \"model_executor\", None\n                ):\n                    model_executor.shutdown()\n                self._engine = None\n            else:\n                # v1\n                self._engine.shutdown()\n                self._engine = None\n\n    async def init_xavier(self):\n        await self._engine.init_xavier()\n\n    async def _check_healthy(self, interval: int = 30):\n        from vllm.engine.async_llm_engine import AsyncEngineDeadError\n\n        logger.debug(\"Begin to check health of vLLM\")\n\n        while self._engine is not None:\n            try:\n                await self._engine.check_health()\n            except (AsyncEngineDeadError, RuntimeError):\n                logger.info(\"Detecting vLLM is not health, prepare to quit the process\")\n                try:\n                    self.stop()\n                except:  # noqa: E722\n                    # ignore error when stop\n                    pass\n                # Just kill the process and let xinference auto-recover the model\n                os._exit(1)\n            else:\n                await asyncio.sleep(interval)\n\n    def parse_str_field_to_dict(\n        self, field_value, field_name: str = \"config_field\", default: dict = {}\n    ) -> dict:\n        \"\"\"\n        Generic function: Parse a string-type configuration field to a dictionary.\n        Returns an empty default dict and logs a warning if parsing fails.\n\n        Applicable scenarios: JSON-formatted strings passed via webui\n        (e.g., speculative_config, mm_processor_kwargs fields)\n\n        Args:\n            field_value: Value of the field to parse (may be str/dict/other types)\n            field_name: Name of the field (used for log messages, e.g., \"speculative_config\")\n            default: Default value returned when parsing fails, empty dict by default\n\n        Returns:\n            Parsed dictionary (returns default if parsing fails or input is non-string type)\n        \"\"\"\n        # Non-string type: Return original value if it's a dict, otherwise return default\n        if not isinstance(field_value, str):\n            return field_value if isinstance(field_value, dict) else default\n\n        # String type: Attempt JSON parsing\n        try:\n            parsed_dict = json.loads(field_value)\n            # Ensure parsing result is a dictionary (avoid list/number etc. from JSON string)\n            if isinstance(parsed_dict, dict):\n                return parsed_dict\n            else:\n                logger.warning(\n                    f\"Parsed result of {field_name} is not a dictionary (type: {type(parsed_dict)}), \"\n                    f\"using default empty dict\"\n                )\n                return default\n        except json.JSONDecodeError:\n            logger.warning(\n                f\"Failed to parse {field_name} as JSON string, using default empty dict\"\n            )\n            return default\n        except Exception as e:\n            logger.warning(\n                f\"Unexpected error parsing {field_name}: {str(e)}, using default empty dict\"\n            )\n            return default\n\n    def _sanitize_model_config(\n        self, model_config: Optional[VLLMModelConfig]\n    ) -> VLLMModelConfig:\n        if model_config is None:\n            model_config = VLLMModelConfig()\n\n        model_config.setdefault(\"tokenizer_mode\", \"auto\")\n        model_config.setdefault(\"trust_remote_code\", True)\n        model_config.setdefault(\"tensor_parallel_size\", self._device_count)  # type: ignore\n        model_config.setdefault(\"pipeline_parallel_size\", self._n_worker)  # type: ignore\n        if (\n            self._n_worker > 1\n            and VLLM_VERSION\n            and VLLM_VERSION >= version.parse(\"0.11.0\")\n        ):\n            # vLLM v1 requires nnodes/node_rank for multi-node world sizes.\n            model_config.setdefault(\"nnodes\", self._n_worker)  # type: ignore\n            model_config.setdefault(\"node_rank\", self._shard)  # type: ignore\n            # Use mp backend to satisfy vLLM validation; executor is patched later.\n            model_config.setdefault(\"distributed_executor_backend\", \"mp\")\n        model_config.setdefault(\"block_size\", 16)\n        model_config.setdefault(\"swap_space\", 4)\n        model_config.setdefault(\"gpu_memory_utilization\", 0.90)\n        model_config.setdefault(\"max_num_seqs\", 256)\n\n        if \"model_quantization\" in model_config:\n            model_config[\"quantization\"] = model_config.pop(\"model_quantization\")\n        else:\n            model_config.setdefault(\"quantization\", None)\n        model_config.setdefault(\"max_model_len\", None)\n        model_config.setdefault(\"reasoning_content\", False)\n\n        if \"speculative_config\" in model_config:\n            model_config[\"speculative_config\"] = self.parse_str_field_to_dict(\n                model_config.get(\"speculative_config\", {}), \"speculative_config\"\n            )\n        if \"rope_scaling\" in model_config:\n            rope_scaling = self.parse_str_field_to_dict(\n                model_config[\"rope_scaling\"], \"rope_scaling\"\n            )\n            model_config[\"hf_overrides\"] = {\"rope_scaling\": rope_scaling}\n            model_config.pop(\"rope_scaling\", {})\n\n        # Add scheduling policy if vLLM version is 0.6.3 or higher\n        if VLLM_VERSION >= version.parse(\"0.6.3\"):\n            model_config.setdefault(\"scheduling_policy\", \"fcfs\")\n            # init mm_processor_kwargs params\n            mm_processor_kwargs = self.parse_str_field_to_dict(\n                model_config.get(\"mm_processor_kwargs\", {}), \"mm_processor_kwargs\"\n            )\n            pixel_params: Dict[str, int] = {}\n            if \"min_pixels\" in model_config:\n                pixel_params[\"min_pixels\"] = model_config.pop(\"min_pixels\")\n            if \"max_pixels\" in model_config:\n                pixel_params[\"max_pixels\"] = model_config.pop(\"max_pixels\")\n            if pixel_params or mm_processor_kwargs:\n                model_config[\"mm_processor_kwargs\"] = {\n                    **mm_processor_kwargs,\n                    **pixel_params,\n                }\n        return model_config\n\n    @staticmethod\n    def _sanitize_generate_config(\n        generate_config: Optional[Dict] = None,\n    ) -> VLLMGenerateConfig:\n        if not generate_config:\n            generate_config = {}\n\n        sanitized = VLLMGenerateConfig()\n\n        response_format = generate_config.pop(\"response_format\", None)\n        guided_json_object = None\n        guided_json = None\n\n        if response_format is not None:\n            if response_format.get(\"type\") == \"json_object\":\n                guided_json_object = True\n            elif response_format.get(\"type\") == \"json_schema\":\n                json_schema = response_format.get(\"json_schema\")\n                assert json_schema is not None\n                guided_json = json_schema.get(\"json_schema\")\n\n        sanitized.setdefault(\"lora_name\", generate_config.get(\"lora_name\", None))\n        sanitized.setdefault(\"n\", generate_config.get(\"n\", 1))\n        sanitized.setdefault(\"best_of\", generate_config.get(\"best_of\", None))\n        sanitized.setdefault(\"seed\", generate_config.get(\"seed\", None))\n        sanitized.setdefault(\n            \"presence_penalty\", generate_config.get(\"presence_penalty\", 0.0)\n        )\n        sanitized.setdefault(\n            \"frequency_penalty\", generate_config.get(\"frequency_penalty\", 0.0)\n        )\n        sanitized.setdefault(\n            \"repetition_penalty\", generate_config.get(\"repetition_penalty\", 1.0)\n        )\n        sanitized.setdefault(\"temperature\", generate_config.get(\"temperature\", 1.0))\n        sanitized.setdefault(\"top_p\", generate_config.get(\"top_p\", 1.0))\n        sanitized.setdefault(\"top_k\", generate_config.get(\"top_k\", -1))\n        sanitized.setdefault(  # type: ignore\n            \"max_tokens\",\n            generate_config.get(\"max_tokens\", XINFERENCE_MAX_TOKENS)  # type: ignore\n            or XINFERENCE_MAX_TOKENS,\n        )\n        sanitized.setdefault(\"stop\", generate_config.get(\"stop\", None))\n        sanitized.setdefault(\n            \"stop_token_ids\", generate_config.get(\"stop_token_ids\", None)\n        )\n        sanitized.setdefault(\"stream\", generate_config.get(\"stream\", False))\n        sanitized.setdefault(\n            \"stream_options\", generate_config.get(\"stream_options\", None)\n        )\n        sanitized.setdefault(\n            \"skip_special_tokens\", generate_config.get(\"skip_special_tokens\", True)\n        )\n        sanitized.setdefault(\n            \"guided_json\", generate_config.get(\"guided_json\", guided_json)\n        )\n        sanitized.setdefault(\"guided_regex\", generate_config.get(\"guided_regex\", None))\n        sanitized.setdefault(\n            \"guided_choice\", generate_config.get(\"guided_choice\", None)\n        )\n        sanitized.setdefault(\n            \"guided_grammar\", generate_config.get(\"guided_grammar\", None)\n        )\n        sanitized.setdefault(\n            \"guided_whitespace_pattern\",\n            generate_config.get(\"guided_whitespace_pattern\", None),\n        )\n        sanitized.setdefault(\n            \"guided_json_object\",\n            generate_config.get(\"guided_json_object\", guided_json_object),\n        )\n        # 1. Try to get from generate config\n        ignore_eos_val = generate_config.get(\"ignore_eos\")\n\n        # 2. else, get from extra_body\n        # sometimes Xinference put unrecognized params into extra_body\n        if ignore_eos_val is None:\n            extra_body = generate_config.get(\"extra_body\")\n            if isinstance(extra_body, dict):\n                ignore_eos_val = extra_body.get(\"ignore_eos\")\n\n        # 3. write into sanitized\n        sanitized.setdefault(\n            \"ignore_eos\", ignore_eos_val if ignore_eos_val is not None else False\n        )\n\n        return sanitized\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        try:\n            importlib.import_module(\"vllm\")\n        except ImportError as exc:  # includes missing shared libs such as libcudart\n            return False, f\"Failed to import vLLM: {exc}\"\n        except OSError as exc:  # native extension load errors\n            return False, f\"Failed to load vLLM native extension: {exc}\"\n        return True\n\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if (\n            not cls._has_cuda_device()\n            and not cls._has_mlu_device()\n            and not cls._has_vacc_device()\n            and not cls._has_musa_device()\n        ):\n            return False, \"vLLM requires CUDA or MLU GPUs or VACC GPUs or MUSA GPUs\"\n        if not cls._is_linux():\n            return False, \"vLLM backend is only supported on Linux\"\n        if llm_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"fp4\", \"fp8\", \"bnb\"]:\n            return False, \"vLLM supports pytorch/gptq/awq/fp4/fp8/bnb formats only\"\n        if llm_spec.model_format == \"pytorch\":\n            if quantization not in (None, \"none\"):\n                return (\n                    False,\n                    \"pytorch format with quantization is not supported by vLLM\",\n                )\n        if llm_spec.model_format == \"awq\":\n            if \"4\" not in quantization:\n                return False, \"vLLM only supports 4-bit AWQ weights\"\n        if llm_spec.model_format == \"gptq\":\n            if VLLM_INSTALLED and VLLM_VERSION >= version.parse(\"0.3.3\"):\n                if not any(q in quantization for q in (\"3\", \"4\", \"8\")):\n                    return False, \"gptq quantization must be 3/4/8 bit for vLLM >=0.3.3\"\n            else:\n                if \"4\" not in quantization:\n                    return False, \"gptq quantization must be 4 bit for vLLM <0.3.3\"\n        if not llm_family.matches_supported_architectures(VLLM_SUPPORTED_MODELS):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not supported by vLLM\",\n            )\n        if \"generate\" not in llm_family.model_ability:\n            return False, \"vLLM base engine requires generate ability\"\n        if not VLLM_INSTALLED and not _virtual_env_allows_missing_vllm():\n            return False, \"vLLM library is not installed\"\n        return True\n\n    @staticmethod\n    def _convert_request_output_to_completion_chunk(\n        request_id: str, model: str, request_output: \"RequestOutput\"\n    ) -> Tuple[CompletionChunk, Optional[str]]:\n        choices: List[CompletionChoice] = []\n        finish_reason = None\n        for output in request_output.outputs:\n            choices.append(\n                CompletionChoice(\n                    text=output.text,\n                    index=output.index,\n                    logprobs=None,  # TODO: support logprobs.\n                    finish_reason=None,\n                )\n            )\n            finish_reason = output.finish_reason\n        return (\n            CompletionChunk(\n                id=request_id,\n                object=\"text_completion\",\n                created=int(time.time()),\n                model=model,\n                choices=choices,\n            ),\n            finish_reason,\n        )\n\n    @staticmethod\n    def _convert_request_output_to_completion(\n        request_id: str, model: str, request_output: \"RequestOutput\"\n    ) -> Completion:\n        choices = []\n        for output in request_output.outputs:\n            choices.append(\n                CompletionChoice(\n                    text=output.text,\n                    index=output.index,\n                    logprobs=None,  # TODO: support logprobs.\n                    finish_reason=output.finish_reason,\n                )\n            )\n\n        prompt_tokens = len(request_output.prompt_token_ids)\n        completion_tokens = sum(\n            len(output.token_ids) for output in request_output.outputs\n        )\n        usage = CompletionUsage(\n            prompt_tokens=prompt_tokens,\n            completion_tokens=completion_tokens,\n            total_tokens=prompt_tokens + completion_tokens,\n        )\n        return Completion(\n            id=request_id,\n            object=\"text_completion\",\n            created=int(time.time()),\n            model=model,\n            choices=choices,\n            usage=usage,\n        )\n\n    async def _get_tokenizer(self, lora_request: Any) -> Any:\n        import inspect\n\n        try:\n            # vLLM 0.11.0+ get_tokenizer doesn't accept lora_request parameter\n            if (\n                VLLM_VERSION >= version.parse(\"0.11.0\")\n                or VLLM_VERSION.base_version >= \"0.11.0\"\n            ):\n                result = self._engine.get_tokenizer()  # type: ignore\n                # In vLLM v1 (>= 0.15.0), get_tokenizer may return tokenizer directly\n                # instead of a coroutine. Check if we need to await.\n                if inspect.iscoroutine(result):\n                    return await result\n                return result\n            else:\n                result = self._engine.get_tokenizer(lora_request)  # type: ignore\n                if inspect.iscoroutine(result):\n                    return await result\n                return result\n        except AttributeError:\n            # Fallback to get_tokenizer_async for older versions\n            try:\n                result = self._engine.get_tokenizer_async(lora_request)  # type: ignore\n                if inspect.iscoroutine(result):\n                    return await result\n                return result\n            except (AttributeError, TypeError):\n                # If all else fails, try without parameters\n                result = self._engine.get_tokenizer()  # type: ignore\n                if inspect.iscoroutine(result):\n                    return await result\n                return result\n\n    def _tokenize(self, tokenizer: Any, prompt: str, config: dict) -> List[int]:\n        truncate_prompt_tokens = config.get(\"truncate_prompt_tokens\")\n        add_special_tokens = config.get(\"add_special_tokens\", True)\n\n        if truncate_prompt_tokens is None:\n            encoded = tokenizer(prompt, add_special_tokens=add_special_tokens)\n        elif truncate_prompt_tokens < 0:\n            # Negative means we cap at the model's max length\n            encoded = tokenizer(\n                prompt,\n                add_special_tokens=add_special_tokens,\n                truncation=True,\n                max_length=self._context_length,\n            )\n        else:\n            encoded = tokenizer(\n                prompt,\n                add_special_tokens=add_special_tokens,\n                truncation=True,\n                max_length=truncate_prompt_tokens,\n            )\n\n        return encoded.input_ids\n\n    async def _gen_tokens_prompt(\n        self, tokenizer, prompt: Union[str, dict], config: dict\n    ):\n        from vllm import TokensPrompt\n\n        token_ids = await asyncio.to_thread(\n            self._tokenize,\n            tokenizer,\n            prompt,  # type: ignore\n            config,\n        )\n        return TokensPrompt(prompt_token_ids=token_ids)\n\n    @vllm_check\n    async def async_generate(\n        self,\n        prompt: Union[str, Dict[str, Any]],\n        generate_config: Optional[Dict] = None,\n        tools: object = False,\n        request_id: Optional[str] = None,\n    ) -> Union[Completion, AsyncGenerator[CompletionChunk, None]]:\n        try:\n            from vllm.sampling_params import SamplingParams\n        except ImportError:\n            error_message = \"Failed to import module 'vllm'\"\n            installation_guide = [\n                \"Please make sure 'vllm' is installed. \",\n                \"You can install it by `pip install vllm`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        sanitized_generate_config = self._sanitize_generate_config(generate_config)\n        logger.debug(\n            \"Enter generate, prompt: %s, generate config: %s\", prompt, generate_config\n        )\n\n        lora_model = sanitized_generate_config.pop(\"lora_name\")\n\n        lora_request = None\n        if lora_model is not None:\n            for lora in self.lora_requests:\n                if lora_model == lora.lora_name:\n                    lora_request = lora\n                    break\n\n        stream = sanitized_generate_config.pop(\"stream\")\n        stream_options = sanitized_generate_config.pop(\"stream_options\", None)\n        include_usage = (\n            stream_options[\"include_usage\"]\n            if isinstance(stream_options, dict)\n            else False\n        )\n\n        if VLLM_INSTALLED and VLLM_VERSION >= version.parse(\"0.6.3\"):\n            # guided decoding only available for vllm >= 0.6.3\n            GuidedDecodingParams = None\n            StructuredOutputsParams = None\n            supports_guided = VLLM_VERSION < version.parse(\"1.12.0\")\n            try:\n                import vllm.sampling_params as _sampling_params\n            except ImportError:\n                if supports_guided:\n                    logger.info(\n                        \"GuidedDecodingParams not found in vLLM %s, \"\n                        \"trying StructuredOutputsParams fallback.\",\n                        VLLM_VERSION,\n                    )\n            else:\n                if supports_guided and hasattr(\n                    _sampling_params, \"GuidedDecodingParams\"\n                ):\n                    GuidedDecodingParams = _sampling_params.GuidedDecodingParams\n                elif supports_guided:\n                    logger.info(\n                        \"GuidedDecodingParams not found in vLLM %s, \"\n                        \"trying StructuredOutputsParams fallback.\",\n                        VLLM_VERSION,\n                    )\n\n                if hasattr(_sampling_params, \"StructuredOutputsParams\"):\n                    StructuredOutputsParams = _sampling_params.StructuredOutputsParams\n                elif GuidedDecodingParams is None:\n                    logger.warning(\n                        \"No guided decoding support found in vLLM %s \"\n                        \"(GuidedDecodingParams / StructuredOutputsParams).\",\n                        VLLM_VERSION,\n                    )\n\n            # Extract guided decoding parameters\n            guided_params: dict[str, Any] = {}\n            guided_json = sanitized_generate_config.pop(\"guided_json\", None)\n            if guided_json:\n                guided_params[\"json\"] = guided_json\n\n            guided_regex = sanitized_generate_config.pop(\"guided_regex\", None)\n            if guided_regex:\n                guided_params[\"regex\"] = guided_regex\n\n            guided_choice = sanitized_generate_config.pop(\"guided_choice\", None)\n            if guided_choice:\n                guided_params[\"choice\"] = guided_choice\n\n            guided_grammar = sanitized_generate_config.pop(\"guided_grammar\", None)\n            if guided_grammar:\n                guided_params[\"grammar\"] = guided_grammar\n\n            guided_json_object = sanitized_generate_config.pop(\n                \"guided_json_object\", None\n            )\n            if guided_json_object:\n                guided_params[\"json_object\"] = guided_json_object\n\n            guided_backend = sanitized_generate_config.pop(\n                \"guided_decoding_backend\", None\n            )\n            if guided_backend:\n                guided_params[\"_backend\"] = guided_backend\n\n            guided_whitespace_pattern = sanitized_generate_config.pop(\n                \"guided_whitespace_pattern\", None\n            )\n            if guided_whitespace_pattern:\n                guided_params[\"whitespace_pattern\"] = guided_whitespace_pattern\n\n            # Create GuidedDecodingParams / StructuredOutputsParams if we have any guided parameters\n            guided_options = None\n            if guided_params and GuidedDecodingParams:\n                try:\n                    guided_options = GuidedDecodingParams(**guided_params)\n                except Exception as e:\n                    logger.warning(f\"Failed to create GuidedDecodingParams: {e}\")\n                    guided_options = None\n            elif guided_params and StructuredOutputsParams:\n                try:\n                    guided_options = StructuredOutputsParams(**guided_params)\n                except Exception as e:\n                    logger.warning(f\"Failed to create StructuredOutputsParams: {e}\")\n                    guided_options = None\n\n            try:\n                import inspect\n\n                sp_sig = inspect.signature(SamplingParams)\n                unsupported_keys = [\n                    key\n                    for key in list(sanitized_generate_config.keys())\n                    if key not in sp_sig.parameters\n                ]\n                config_dict = cast(Dict[str, Any], sanitized_generate_config)\n                for key in unsupported_keys:\n                    config_dict.pop(key, None)\n                if unsupported_keys:\n                    logger.warning(\n                        \"Dropping unsupported sampling params for vLLM %s: %s\",\n                        VLLM_VERSION,\n                        unsupported_keys,\n                    )\n                # For v0.9.2 and similar versions, prioritize guided_decoding over structured_outputs\n                # structured_outputs was introduced later (around v0.11.0) and may not accept\n                # GuidedDecodingParams in earlier versions even if the parameter exists\n                if \"guided_decoding\" in sp_sig.parameters:\n                    sampling_params = SamplingParams(\n                        guided_decoding=guided_options, **sanitized_generate_config\n                    )\n                elif \"structured_outputs\" in sp_sig.parameters:\n                    try:\n                        sampling_params = SamplingParams(\n                            structured_outputs=guided_options,\n                            **sanitized_generate_config,\n                        )\n                    except TypeError as e:\n                        if \"structured_outputs\" in str(e):\n                            # structured_outputs parameter exists but doesn't accept GuidedDecodingParams\n                            # Fall back to no guided decoding\n                            logger.warning(\n                                f\"structured_outputs parameter failed: {e}. \"\n                                \"Falling back to no guided decoding for vLLM version compatibility.\"\n                            )\n                            sampling_params = SamplingParams(\n                                **sanitized_generate_config\n                            )\n                        else:\n                            raise\n                else:\n                    sampling_params = SamplingParams(**sanitized_generate_config)\n            except Exception as e:\n                logger.warning(\n                    f\"Failed to create SamplingParams with guided decoding: {e}\"\n                )\n                sampling_params = SamplingParams(**sanitized_generate_config)\n        else:\n            # ignore generate configs for older versions\n            sanitized_generate_config.pop(\"guided_json\", None)\n            sanitized_generate_config.pop(\"guided_regex\", None)\n            sanitized_generate_config.pop(\"guided_choice\", None)\n            sanitized_generate_config.pop(\"guided_grammar\", None)\n            sanitized_generate_config.pop(\"guided_json_object\", None)\n            sanitized_generate_config.pop(\"guided_decoding_backend\", None)\n            sanitized_generate_config.pop(\"guided_whitespace_pattern\", None)\n            import inspect\n\n            sp_sig = inspect.signature(SamplingParams)\n            unsupported_keys = [\n                key\n                for key in list(sanitized_generate_config.keys())\n                if key not in sp_sig.parameters\n            ]\n            config_dict = cast(Dict[str, Any], sanitized_generate_config)\n            for key in unsupported_keys:\n                config_dict.pop(key, None)\n            if unsupported_keys:\n                logger.warning(\n                    \"Dropping unsupported sampling params for vLLM %s: %s\",\n                    VLLM_VERSION,\n                    unsupported_keys,\n                )\n            sampling_params = SamplingParams(**sanitized_generate_config)\n\n        prompt_or_token_ids: Union[str, Dict[str, Any], List[int]] = prompt\n        if sampling_params.max_tokens is None:\n            # no max_tokens set, try to get the max tokens\n            # this requires tokenizing\n            tokenizer = await self._get_tokenizer(lora_request)\n            prompt_or_token_ids = await self._gen_tokens_prompt(\n                tokenizer,\n                prompt,\n                sanitized_generate_config,  # type: ignore\n            )\n            sampling_params.max_tokens = max_tokens = self._context_length - len(  # type: ignore\n                prompt_or_token_ids[\"prompt_token_ids\"]  # type: ignore\n            )\n            logger.debug(\"No max_tokens set, setting to: %s\", max_tokens)\n\n        if not request_id:\n            request_id = str(uuid.uuid1())\n\n        assert self._engine is not None\n        start_wall_time = time.time()\n        start_perf = time.perf_counter()\n        logger.debug(\n            \"Generate start, request_id: %s, stream: %s, start_time: %s\",\n            request_id,\n            stream,\n            time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime(start_wall_time)),\n        )\n        results_generator = self._engine.generate(\n            prompt_or_token_ids,\n            sampling_params,\n            request_id,\n            lora_request=lora_request,\n        )\n\n        async def stream_results() -> AsyncGenerator[CompletionChunk, None]:\n            previous_texts = [\"\"] * sanitized_generate_config[\"n\"]\n            prompt_tokens, completion_tokens, total_tokens = 0, 0, 0\n            complete_response = \"\"\n            match_tool_call_tmp_results = []\n            is_match_tool_call = False\n            chunk = None\n            finish_reason = None\n            async for _request_output in results_generator:\n                chunk, finish_reason = self._convert_request_output_to_completion_chunk(\n                    request_id=request_id,\n                    model=self.model_uid,\n                    request_output=_request_output,\n                )\n\n                for i, choice in enumerate(chunk[\"choices\"]):\n                    delta = choice[\"text\"][len(previous_texts[i]) :]\n                    previous_texts[i] = choice[\"text\"]\n                    choice[\"text\"] = delta\n                    complete_response += delta\n\n                prompt_tokens = len(_request_output.prompt_token_ids)\n                completion_tokens = sum(\n                    len(output.token_ids) for output in _request_output.outputs\n                )\n                total_tokens = prompt_tokens + completion_tokens\n                chunk[\"usage\"] = CompletionUsage(\n                    prompt_tokens=prompt_tokens,\n                    completion_tokens=completion_tokens,\n                    total_tokens=total_tokens,\n                )\n\n                if tools:\n                    \"\"\"\n                    The qwen2 tool call returns format like this:\n                    <tool_call>\n                    {...}\n                    </tool_call>\n                    Here is to match this.\n                    \"\"\"\n                    if (len(QWEN_TOOL_CALL_SYMBOLS[0]) > len(complete_response)) and (\n                        not QWEN_TOOL_CALL_SYMBOLS[0].startswith(complete_response)\n                    ):\n                        for c in match_tool_call_tmp_results:\n                            yield c\n                        match_tool_call_tmp_results.clear()\n                        yield chunk\n                    elif (len(QWEN_TOOL_CALL_SYMBOLS[0]) > len(complete_response)) and (\n                        QWEN_TOOL_CALL_SYMBOLS[0].startswith(complete_response)\n                    ):\n                        match_tool_call_tmp_results.append(chunk)\n                    else:\n                        assert len(QWEN_TOOL_CALL_SYMBOLS[0]) <= len(complete_response)\n                        if not is_match_tool_call and complete_response.startswith(\n                            QWEN_TOOL_CALL_SYMBOLS[0]\n                        ):\n                            is_match_tool_call = True\n                            match_tool_call_tmp_results.clear()\n\n                        if not is_match_tool_call:\n                            for c in match_tool_call_tmp_results:\n                                yield c\n                            match_tool_call_tmp_results.clear()\n                            yield chunk\n                        else:\n                            chunk[\"choices\"][0][\"text\"] = complete_response\n                else:\n                    yield chunk\n\n            if is_match_tool_call:\n                assert chunk is not None\n                yield chunk\n\n            elapsed = time.perf_counter() - start_perf\n            completion_tps = (\n                completion_tokens / elapsed if elapsed > 0 else completion_tokens\n            )\n            total_tps = total_tokens / elapsed if elapsed > 0 else total_tokens\n            logger.debug(\n                \"Generate finished, request_id: %s, stop reason: %s, prompt tokens: %s, \"\n                \"completion tokens: %s, all tokens: %s, elapsed: %.3fs, \"\n                \"throughput: completion %.2f tok/s, total %.2f tok/s\",\n                request_id,\n                finish_reason,\n                prompt_tokens,\n                completion_tokens,\n                total_tokens,\n                elapsed,\n                completion_tps,\n                total_tps,\n            )\n\n            # match OpenAI API stream\n            yield generate_completion_chunk(\n                chunk_text=\"\",\n                finish_reason=finish_reason,\n                chunk_id=request_id,\n                model_uid=self.model_uid,\n                prompt_tokens=prompt_tokens,\n                completion_tokens=completion_tokens,\n                total_tokens=total_tokens,\n            )\n\n            if include_usage:\n                chunk = CompletionChunk(\n                    id=request_id,\n                    object=\"text_completion\",\n                    created=int(time.time()),\n                    model=self.model_uid,\n                    choices=[],\n                )\n                chunk[\"usage\"] = CompletionUsage(\n                    prompt_tokens=prompt_tokens,\n                    completion_tokens=completion_tokens,\n                    total_tokens=total_tokens,\n                )\n                yield chunk\n\n        if stream:\n            return stream_results()\n        else:\n            final_output = None\n            async for request_output in results_generator:\n                final_output = request_output\n\n            assert final_output is not None\n            return self._convert_request_output_to_completion(\n                request_id, model=self.model_uid, request_output=final_output\n            )\n\n\nclass VLLMChatModel(VLLMModel, ChatModelMixin):\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if llm_spec.model_format not in [\n            \"pytorch\",\n            \"gptq\",\n            \"awq\",\n            \"fp4\",\n            \"fp8\",\n            \"bnb\",\n            \"ggufv2\",\n        ]:\n            return (\n                False,\n                \"vLLM chat mode supports pytorch/gptq/awq/fp4/fp8/bnb/ggufv2 formats only\",\n            )\n        if llm_spec.model_format == \"pytorch\":\n            if quantization not in (None, \"none\"):\n                return (\n                    False,\n                    \"pytorch format with quantization is not supported in vLLM chat\",\n                )\n        if llm_spec.model_format == \"awq\":\n            if not any(q in quantization for q in (\"4\", \"8\")):\n                return False, \"awq quantization must be 4 or 8 bit for vLLM chat\"\n        if llm_spec.model_format == \"gptq\":\n            if VLLM_INSTALLED and VLLM_VERSION >= version.parse(\"0.3.3\"):\n                if not any(q in quantization for q in (\"3\", \"4\", \"8\")):\n                    return False, \"gptq quantization must be 3/4/8 bit for vLLM >=0.3.3\"\n            else:\n                if \"4\" not in quantization:\n                    return False, \"gptq quantization must be 4 bit for vLLM <0.3.3\"\n        if llm_spec.model_format == \"ggufv2\":\n            if not (VLLM_INSTALLED and VLLM_VERSION >= version.parse(\"0.8.2\")):\n                return False, \"ggufv2 support requires vLLM >= 0.8.2\"\n        if not llm_family.matches_supported_architectures(VLLM_SUPPORTED_CHAT_MODELS):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not supported by vLLM chat\",\n            )\n        if \"chat\" not in llm_family.model_ability:\n            return False, \"vLLM chat engine requires chat ability\"\n        if not VLLM_INSTALLED and not _virtual_env_allows_missing_vllm():\n            return False, \"vLLM library is not installed\"\n        return True\n\n    def _sanitize_chat_config(\n        self,\n        generate_config: Optional[Dict] = None,\n    ) -> Dict:\n        if not generate_config:\n            generate_config = {}\n\n        if \"reasoning\" in getattr(self.model_family, \"model_ability\", []):\n            generate_config.pop(\"stop\", None)\n            generate_config.pop(\"stop_token_ids\", None)\n        else:\n            if not generate_config.get(\"stop\") and self.model_family.stop:\n                generate_config[\"stop\"] = self.model_family.stop.copy()\n            if (\n                not generate_config.get(\"stop_token_ids\")\n                and self.model_family.stop_token_ids\n            ):\n                generate_config[\"stop_token_ids\"] = (\n                    self.model_family.stop_token_ids.copy()\n                )\n\n        # if response_format exists，generate guided_json\n        if \"response_format\" in generate_config:\n            resp_format = generate_config[\"response_format\"]\n            if (\n                isinstance(resp_format, dict)\n                and resp_format.get(\"type\") == \"json_schema\"\n                and \"json_schema\" in resp_format\n            ):\n                schema = resp_format[\"json_schema\"].get(\"schema_\")\n                if schema:\n                    generate_config[\"guided_json\"] = schema\n\n        return generate_config\n\n    @staticmethod\n    def is_tool_call_chunk_start(chunk):\n        return chunk[\"choices\"][0][\"text\"].startswith(QWEN_TOOL_CALL_SYMBOLS[0])\n\n    @staticmethod\n    def is_tool_call_chunk_end(chunk):\n        return chunk[\"choices\"][0][\"text\"].endswith(QWEN_TOOL_CALL_SYMBOLS[1])\n\n    @staticmethod\n    def prefill_messages(messages: List[Dict]) -> List[Dict]:\n        \"\"\"\n        Preprocess messages to ensure content is not None\n\n        Args:\n            messages: Original message list\n\n        Returns:\n            Processed message list, where content is not None\n        \"\"\"\n        processed_messages = []\n\n        for msg in messages:\n            if isinstance(msg, dict):\n                if msg.get(\"content\") is None:\n                    msg_copy = msg.copy()\n                    msg_copy[\"content\"] = \"\"  # Replace None with empty string\n                    processed_messages.append(msg_copy)\n                else:\n                    processed_messages.append(msg)\n            else:\n                processed_messages.append(msg)\n\n        return processed_messages\n\n    @vllm_check\n    async def async_chat(\n        self,\n        messages: List[Dict],\n        generate_config: Optional[Dict] = None,\n        request_id: Optional[str] = None,\n    ) -> Union[ChatCompletion, AsyncGenerator[ChatCompletionChunk, None]]:\n        # Preprocess messages to ensure content is not None\n        messages = self.prefill_messages(messages)\n\n        tools = generate_config.pop(\"tools\", []) if generate_config else None\n        model_family = self.model_family.model_family or self.model_family.model_name\n        chat_template_kwargs = (\n            self._get_chat_template_kwargs_from_generate_config(\n                generate_config, self.reasoning_parser\n            )\n            or {}\n        )\n        chat_context_var.set(chat_template_kwargs)\n        full_context_kwargs = chat_template_kwargs.copy()\n        if tools:\n            if (\n                model_family in QWEN_TOOL_CALL_FAMILY\n                or model_family in DEEPSEEK_TOOL_CALL_FAMILY\n            ):\n                full_context_kwargs[\"tools\"] = tools\n        assert self.model_family.chat_template is not None\n\n        generate_config = self._sanitize_chat_config(generate_config)\n        stream = generate_config.get(\"stream\", None)\n\n        lora_request = None\n        lora_model = generate_config.get(\"lora_name\")\n        if lora_model is not None:\n            for lora in self.lora_requests:\n                if lora_model == lora.lora_name:\n                    lora_request = lora\n                    break\n        tokenizer = await self._get_tokenizer(lora_request)\n\n        full_prompt = self.get_full_context(\n            messages,\n            self.model_family.chat_template,\n            tokenizer=tokenizer,\n            **full_context_kwargs,\n        )\n\n        if stream:\n            agen = await self.async_generate(\n                full_prompt, generate_config, tools, request_id=request_id\n            )\n            assert isinstance(agen, AsyncGenerator)\n            if tools:\n                return self._async_to_tool_completion_chunks(agen, chat_template_kwargs)\n            return self._async_to_chat_completion_chunks(\n                agen, self.reasoning_parser, chat_template_kwargs\n            )\n        else:\n            c = await self.async_generate(\n                full_prompt, generate_config, request_id=request_id\n            )\n            assert not isinstance(c, AsyncGenerator)\n            if tools:\n                return self._post_process_completion(\n                    self.model_family, self.model_uid, c\n                )\n            return self._to_chat_completion(c, self.reasoning_parser)\n\n\nclass VLLMMultiModel(VLLMModel, ChatModelMixin):\n    @classmethod\n    def match_json(\n        cls, llm_family: \"LLMFamilyV2\", llm_spec: \"LLMSpecV1\", quantization: str\n    ) -> Union[bool, Tuple[bool, str]]:\n        if (\n            not cls._has_cuda_device()\n            and not cls._has_mlu_device()\n            and not cls._has_vacc_device()\n            and not cls._has_musa_device()\n        ):\n            return (\n                False,\n                \"vLLM multimodal engine requires CUDA or MLU GPUs or VACC GPUs or MUSA GPUs\",\n            )\n        if not cls._is_linux():\n            return False, \"vLLM multimodal engine is only supported on Linux\"\n        if llm_spec.model_format not in [\"pytorch\", \"gptq\", \"awq\", \"fp4\", \"fp8\", \"bnb\"]:\n            return (\n                False,\n                \"vLLM multimodal engine supports pytorch/gptq/awq/fp4/fp8/bnb formats only\",\n            )\n        if llm_spec.model_format == \"pytorch\":\n            if quantization not in (None, \"none\"):\n                return (\n                    False,\n                    \"pytorch format with quantization is not supported for vLLM multimodal\",\n                )\n        if llm_spec.model_format == \"awq\":\n            if not any(q in quantization for q in (\"4\", \"8\")):\n                return False, \"awq quantization must be 4 or 8 bit for vLLM multimodal\"\n        if llm_spec.model_format == \"gptq\":\n            if VLLM_INSTALLED and VLLM_VERSION >= version.parse(\"0.3.3\"):\n                if not any(q in quantization for q in (\"3\", \"4\", \"8\")):\n                    return False, \"gptq quantization must be 3/4/8 bit for vLLM >=0.3.3\"\n            else:\n                if \"4\" not in quantization:\n                    return False, \"gptq quantization must be 4 bit for vLLM <0.3.3\"\n        if not llm_family.matches_supported_architectures(\n            VLLM_SUPPORTED_MULTI_MODEL_LIST\n        ):\n            return (\n                False,\n                f\"Model architectures {llm_family.architectures} are not supported by vLLM multimodal engine\",\n            )\n        if (\n            \"vision\" not in llm_family.model_ability\n            and \"audio\" not in llm_family.model_ability\n            and \"omni\" not in llm_family.model_ability\n        ):\n            return (\n                False,\n                \"vLLM multimodal engine requires vision, audio, or omni ability\",\n            )\n        if not VLLM_INSTALLED:\n            return False, \"vLLM library is not installed\"\n        return True\n\n    @staticmethod\n    def _attach_video_metadata(\n        videos: List[Any], fps_list: Optional[List[Any]]\n    ) -> List[Any]:\n        if not fps_list:\n            return videos\n\n        attached: List[Any] = []\n        for idx, video in enumerate(videos):\n            fps = fps_list[idx] if idx < len(fps_list) else None\n            data = video\n            metadata: Dict[str, Any] = {}\n            if (\n                isinstance(video, tuple)\n                and len(video) == 2\n                and isinstance(video[1], dict)\n            ):\n                data = video[0]\n                metadata = dict(video[1])\n            if fps is not None:\n                metadata.setdefault(\"fps\", fps)\n                metadata.setdefault(\"video_fps\", fps)\n            attached.append((data, metadata) if metadata else data)\n        return attached\n\n    def _sanitize_model_config(\n        self, model_config: Optional[VLLMModelConfig]\n    ) -> VLLMModelConfig:\n        model_config = super()._sanitize_model_config(model_config)\n        if VLLM_VERSION >= version.parse(\"0.5.5\"):\n            raw_limit = model_config.get(\"limit_mm_per_prompt\")\n            if raw_limit:\n                parsed_limit: Dict[str, int]\n                if isinstance(raw_limit, dict):\n                    parsed_limit = raw_limit\n                else:\n                    try:\n                        if isinstance(raw_limit, list):\n                            # Web UI may split the JSON string into multiple list items.\n                            raw_value = \",\".join(\n                                str(item).strip() for item in raw_limit\n                            )\n                        else:\n                            raw_value = str(raw_limit)\n                        parsed_limit = json.loads(raw_value)\n                    except Exception as e:  # noqa: BLE001\n                        logger.warning(\n                            \"Failed to parse limit_mm_per_prompt %r, fallback to default: %s\",\n                            raw_limit,\n                            e,\n                        )\n                        parsed_limit = {}\n                model_config[\"limit_mm_per_prompt\"] = parsed_limit\n            if not model_config.get(\"limit_mm_per_prompt\"):\n                if \"omni\" in self.model_family.model_ability:\n                    model_config[\"limit_mm_per_prompt\"] = {\n                        \"image\": 2,\n                        \"video\": 2,\n                        \"audio\": 2,\n                    }\n                elif \"vision\" in self.model_family.model_ability:\n                    model_config[\"limit_mm_per_prompt\"] = {\"image\": 2, \"video\": 2}\n                elif \"audio\" in self.model_family.model_ability:\n                    model_config[\"limit_mm_per_prompt\"] = {\"audio\": 2}\n        return model_config\n\n    def _sanitize_chat_config(\n        self,\n        generate_config: Optional[Dict] = None,\n    ) -> Dict:\n        from ..utils import get_stop_token_ids_from_config_file\n\n        if not generate_config:\n            generate_config = {}\n        if generate_config.get(\"stop_token_ids\", None) is None:\n            stop_token_ids = get_stop_token_ids_from_config_file(self.model_path)\n            if stop_token_ids is not None:\n                generate_config.setdefault(\"stop_token_ids\", stop_token_ids)\n            else:\n                if self.model_family.stop_token_ids:\n                    generate_config.setdefault(\n                        \"stop_token_ids\", self.model_family.stop_token_ids.copy()\n                    )\n        return generate_config\n\n    async def _gen_tokens_prompt(\n        self, tokenizer, prompt: Union[str, dict], config: dict\n    ):\n        from vllm import TokensPrompt\n\n        if isinstance(prompt, str):\n            return super()._gen_tokens_prompt(tokenizer, prompt, config)\n\n        prompt_str = prompt[\"prompt\"]\n        multi_modal_data = prompt.get(\"multi_modal_data\")\n\n        token_ids = await asyncio.to_thread(\n            self._tokenize,\n            tokenizer,\n            prompt_str,\n            config,  # type: ignore\n        )\n        return TokensPrompt(\n            prompt_token_ids=token_ids, multi_modal_data=multi_modal_data\n        )\n\n    def _handle_base64_images(self, messages, temp_files):\n        import base64\n        import re\n        import tempfile\n\n        # Regex to match data URI scheme\n        data_uri_pattern = re.compile(\n            r\"data:([a-zA-Z0-9]+/[a-zA-Z0-9-.+]+);base64,(.*)\"\n        )\n\n        for msg in messages:\n            if isinstance(msg, dict) and isinstance(msg.get(\"content\"), list):\n                for content in msg[\"content\"]:\n                    if isinstance(content, dict):\n                        # check image_url\n                        if \"image_url\" in content and isinstance(\n                            content[\"image_url\"], dict\n                        ):\n                            url = content[\"image_url\"].get(\"url\", \"\")\n                            if isinstance(url, str) and url.startswith(\"data:\"):\n                                match = data_uri_pattern.match(url)\n                                if match:\n                                    mime_type, b64_data = match.groups()\n                                    try:\n                                        # Create temp file\n                                        suffix = \".bin\"\n                                        if \"pdf\" in mime_type:\n                                            suffix = \".pdf\"\n                                        elif \"png\" in mime_type:\n                                            suffix = \".png\"\n                                        elif \"jpeg\" in mime_type or \"jpg\" in mime_type:\n                                            suffix = \".jpg\"\n\n                                        with tempfile.NamedTemporaryFile(\n                                            delete=False, suffix=suffix\n                                        ) as tmp:\n                                            tmp.write(base64.b64decode(b64_data))\n                                            content[\"image_url\"][\"url\"] = tmp.name\n                                            temp_files.append(tmp.name)\n                                            logger.debug(\n                                                f\"Decoded base64 content to temp file: {tmp.name}\"\n                                            )\n                                    except Exception as e:\n                                        logger.error(\n                                            f\"Failed to decode base64 file: {e}\"\n                                        )\n\n    @vllm_check\n    async def async_chat(\n        self,\n        messages: List[ChatCompletionMessage],  # type: ignore\n        generate_config: Optional[Dict] = None,\n        request_id: Optional[str] = None,\n    ) -> Union[ChatCompletion, AsyncGenerator[ChatCompletionChunk, None]]:\n        tools = generate_config.pop(\"tools\", []) if generate_config else None\n\n        model_family = self.model_family.model_family or self.model_family.model_name\n        audios, images, videos, video_kwargs = None, None, None, None\n        if \"internvl\" not in model_family.lower():\n            from qwen_omni_utils import (\n                process_audio_info,\n                process_mm_info,\n                process_vision_info,\n            )\n\n            # Pre-process messages to handle base64 data URIs BEFORE transform\n            temp_files: List[str] = []\n            if (\n                \"vision\" in self.model_family.model_ability\n                or \"omni\" in self.model_family.model_ability\n            ):\n                self._handle_base64_images(messages, temp_files)\n\n            messages = self._transform_messages(messages)\n\n            chat_template_kwargs = (\n                self._get_chat_template_kwargs_from_generate_config(\n                    generate_config, self.reasoning_parser\n                )\n                or {}\n            )\n            chat_context_var.set(chat_template_kwargs)\n            full_context_kwargs = chat_template_kwargs.copy()\n            if tools and model_family in QWEN_TOOL_CALL_FAMILY:\n                full_context_kwargs[\"tools\"] = tools\n            assert self.model_family.chat_template is not None\n            if \"omni\" in self.model_family.model_ability:\n                audios, images, videos, video_kwargs = process_mm_info(\n                    messages, use_audio_in_video=True, return_video_kwargs=True\n                )\n            elif \"audio\" in self.model_family.model_ability:\n                audios = process_audio_info(messages, use_audio_in_video=False)\n            elif \"vision\" in self.model_family.model_ability:\n                images, videos, video_kwargs = process_vision_info(  # type: ignore\n                    messages, return_video_kwargs=True\n                )\n\n            prompt = self.get_full_context(\n                messages, self.model_family.chat_template, **full_context_kwargs\n            )\n\n        else:\n            prompt, images = self.get_specific_prompt(model_family, messages)\n        inputs = {\"prompt\": prompt, \"multi_modal_data\": {}, \"mm_processor_kwargs\": {}}\n        if images:\n            inputs[\"multi_modal_data\"][\"image\"] = images\n        if videos:\n            fps_list = None\n            if isinstance(video_kwargs, dict):\n                fps_list = video_kwargs.get(\"fps\")\n            videos = self._attach_video_metadata(videos, fps_list)\n            if fps_list:\n                inputs[\"mm_processor_kwargs\"][\"video_fps\"] = fps_list\n            inputs[\"multi_modal_data\"][\"video\"] = videos\n        if audios:\n            inputs[\"multi_modal_data\"][\"audio\"] = audios\n        if \"omni\" in self.model_family.model_ability:\n            inputs[\"mm_processor_kwargs\"][\"use_audio_in_video\"] = True\n        if inputs[\"multi_modal_data\"] == {}:\n            inputs.pop(\"multi_modal_data\")\n        if inputs[\"mm_processor_kwargs\"] == {}:\n            inputs.pop(\"mm_processor_kwargs\")\n        generate_config = self._sanitize_chat_config(generate_config)\n\n        stream = generate_config.get(\"stream\", None)\n\n        if stream:\n            agen = await self.async_generate(\n                inputs, generate_config, request_id=request_id\n            )\n            assert isinstance(agen, AsyncGenerator)\n            return self._async_to_chat_completion_chunks(agen)\n        else:\n            c = await self.async_generate(\n                inputs, generate_config, request_id=request_id\n            )\n            assert not isinstance(c, AsyncGenerator)\n            return self._to_chat_completion(c)\n"
  },
  {
    "path": "xinference/model/llm/vllm/distributed_executor.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nimport os\nfrom functools import partial\nfrom typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Union\n\nimport xoscar as xo\nfrom vllm import envs\nfrom vllm.executor.executor_base import DistributedExecutorBase\nfrom vllm.utils import _run_task_with_lock, get_distributed_init_method\nfrom vllm.worker.worker_base import WorkerWrapperBase\nfrom xoscar.utils import get_next_port\n\ntry:\n    from vllm.v1.executor.abstract import Executor as ExecutorV1\nexcept ImportError:\n    ExecutorV1 = None\n\nfrom ....isolation import Isolation\n\nif TYPE_CHECKING:\n    from vllm.config import VllmConfig\n    from vllm.model_executor.layers.sampler import SamplerOutput\n    from vllm.sequence import ExecuteModelRequest\n\nlogger = logging.getLogger(__name__)\n\nDEBUG_EXECUTOR = bool(int(os.getenv(\"XINFERENCE_DEBUG_VLLM_EXECUTOR\", \"0\")))\n\n\nclass WorkerActor(xo.StatelessActor):\n    def __init__(self, vllm_config: \"VllmConfig\", rpc_rank: int = 0, **kwargs):\n        super().__init__(**kwargs)\n        self._worker = WorkerWrapperBase(vllm_config, rpc_rank=rpc_rank)\n\n    async def __post_create__(self):\n        try:\n            # Change process title for model\n            import setproctitle\n\n            setproctitle.setproctitle(f\"Xinf vLLM worker: {self._worker.rpc_rank}\")\n        except ImportError:\n            pass\n\n    def __getattr__(self, item):\n        return getattr(self._worker, item)\n\n    @classmethod\n    def gen_uid(cls, rank):\n        return f\"VllmWorker_{rank}\"\n\n    def execute_method(self, method: Union[str, Callable], *args, **kwargs):\n        if DEBUG_EXECUTOR:\n            # NOTE: too many logs, but useful for debug\n            logger.debug(\n                \"Calling method %s in vllm worker %s, args: %s, kwargs: %s\",\n                method,\n                self.uid,\n                args,\n                kwargs,\n            )\n        if isinstance(method, str):\n            return getattr(self._worker, method)(*args, **kwargs)\n        else:\n            return method(self._worker, *args, **kwargs)\n\n\nclass WorkerWrapper:\n    def __init__(\n        self,\n        loop: asyncio.AbstractEventLoop,\n        worker_actor_ref: xo.ActorRefType[WorkerActor],\n    ):\n        self._loop = loop\n        self._worker_actor_ref = worker_actor_ref\n\n    def execute_method(self, method: Union[str, Callable], *args, **kwargs):\n        coro = self._worker_actor_ref.execute_method(method, *args, **kwargs)\n        return asyncio.run_coroutine_threadsafe(coro, self._loop)\n\n    async def execute_method_async(self, method: Union[str, Callable], *args, **kwargs):\n        return await self._worker_actor_ref.execute_method(method, *args, **kwargs)\n\n    def kill(self):\n        coro = xo.destroy_actor(self._worker_actor_ref)\n        return asyncio.run_coroutine_threadsafe(coro, self._loop)\n\n\nclass XinferenceDistributedExecutor(DistributedExecutorBase):\n    \"\"\"Xoscar based distributed executor\"\"\"\n\n    uses_ray: bool = False\n    _loop: asyncio.AbstractEventLoop\n    _pool_addresses: List[str]\n    _n_worker: int\n\n    def __init__(\n        self,\n        vllm_config: \"VllmConfig\",\n        pool_addresses: List[str],\n        n_worker: int,\n        loop: asyncio.AbstractEventLoop,\n        *args,\n        **kwargs,\n    ):\n        self._pool_addresses = pool_addresses\n        self._loop = loop\n        self._n_worker = n_worker\n        self._is_shutdown = False\n        super().__init__(vllm_config, *args, **kwargs)\n\n    def _create_workers(self, refs: xo.ActorRefType[WorkerActor]) -> None:\n        self.driver_worker: Optional[WorkerActor] = None\n        # The remaining workers are Xoscar actors\n        self.workers: List[WorkerWrapper] = []\n\n        self.workers = [WorkerWrapper(self._loop, ref) for ref in refs[1:]]\n\n        # driver worker only for vllm v0\n        self.driver_worker = WorkerActor(self.vllm_config, rpc_rank=0)\n\n        def driver_execute_method(*args, **kwargs):\n            func = partial(self.driver_worker.execute_method, *args, **kwargs)\n            return self._loop.run_in_executor(None, func)\n\n        self.driver_exec_method = driver_execute_method\n\n    def _init_executor(self) -> None:\n        # Create the parallel GPU workers.\n        world_size = self.parallel_config.world_size\n        tensor_parallel_size = self.parallel_config.tensor_parallel_size\n\n        assert (\n            self._pool_addresses and len(self._pool_addresses) == world_size\n        ), f\"Pool addresses(#{len(self._pool_addresses or [])} must be equal to worldsize(#{world_size})\"\n\n        futures = []\n        for rank in range(world_size):\n            coro = xo.create_actor(\n                WorkerActor,\n                self.vllm_config,\n                rpc_rank=rank,\n                address=self._pool_addresses[rank],\n                uid=WorkerActor.gen_uid(rank),\n            )\n            futures.append(asyncio.run_coroutine_threadsafe(coro, self._loop))\n        refs: List[xo.ActorRefType[WorkerActor]] = [fut.result() for fut in futures]\n\n        # create workers\n        self._create_workers(refs)\n\n        # Set environment variables for the driver and workers.\n        all_args_to_update_environment_variables: List[Dict[str, str]] = [\n            dict() for _ in range(world_size)\n        ]\n\n        for args in all_args_to_update_environment_variables:\n            # some carry-over env vars from the driver\n            # TODO: refactor platform-specific env vars\n            for name in [\n                \"VLLM_ATTENTION_BACKEND\",\n                \"TPU_CHIPS_PER_HOST_BOUNDS\",\n                \"TPU_HOST_BOUNDS\",\n                \"VLLM_USE_V1\",\n                \"VLLM_TRACE_FUNCTION\",\n            ]:\n                if name in os.environ:\n                    args[name] = os.environ[name]\n\n        self._env_vars_for_all_workers = all_args_to_update_environment_variables\n\n        self._run_workers(\n            \"update_environment_variables\", self._env_vars_for_all_workers\n        )\n\n        all_kwargs = []\n        distributed_init_method = get_distributed_init_method(\n            self._pool_addresses[0].split(\":\", 1)[0], get_next_port()\n        )\n        for rank in range(world_size):\n            local_rank = rank % (world_size // self._n_worker)\n            kwargs = dict(\n                vllm_config=self.vllm_config,\n                local_rank=local_rank,\n                rank=rank,\n                distributed_init_method=distributed_init_method,\n                is_driver_worker=not self.parallel_config\n                or (rank % tensor_parallel_size == 0),\n            )\n            all_kwargs.append(kwargs)\n        self._run_workers(\"init_worker\", all_kwargs)\n        self._run_workers(\"init_device\")\n        self._run_workers(\n            \"load_model\",\n            max_concurrent_workers=self.parallel_config.max_parallel_loading_workers,\n        )\n\n        # This is the list of workers that are rank 0 of each TP group EXCEPT\n        # global rank 0. These are the workers that will broadcast to the\n        # rest of the workers.\n        self.tp_driver_workers: List[WorkerWrapper] = []\n        # This is the list of workers that are not drivers and not the first\n        # worker in a TP group. These are the workers that will be\n        # broadcasted to.\n        self.non_driver_workers: List[WorkerWrapper] = []\n\n        # Enforce rank order for correct rank to return final output.\n        for index, worker in enumerate(self.workers):\n            # The driver worker is rank 0 and not in self.workers.\n            rank = index + 1\n            if rank % self.parallel_config.tensor_parallel_size == 0:\n                self.tp_driver_workers.append(worker)\n            else:\n                self.non_driver_workers.append(worker)\n\n        self.pp_locks: Optional[List[asyncio.Lock]] = None\n\n    def _run_workers(\n        self,\n        method: Union[str, Callable],\n        *args,\n        async_run_tensor_parallel_workers_only: bool = False,\n        max_concurrent_workers: Optional[int] = None,\n        **kwargs,\n    ) -> Any:\n        if max_concurrent_workers:\n            raise NotImplementedError(\"max_concurrent_workers is not supported yet.\")\n\n        workers = self.workers\n        if async_run_tensor_parallel_workers_only:\n            workers = self.non_driver_workers\n        worker_outputs = [\n            worker.execute_method(method, *args, **kwargs) for worker in workers\n        ]\n\n        if async_run_tensor_parallel_workers_only:\n            return worker_outputs\n\n        driver_worker_outputs = [\n            self.driver_worker.execute_method(method, *args, **kwargs)  # type: ignore\n        ]\n        return driver_worker_outputs + [output.result() for output in worker_outputs]\n\n    def _wait_for_tasks_completion(self, parallel_worker_tasks: Any) -> None:\n        \"\"\"Wait for futures returned from _run_workers() with\n        async_run_remote_workers_only to complete.\"\"\"\n        for result in parallel_worker_tasks:\n            result.get()\n\n    def check_health(self) -> None:\n        # Assume that the workers are healthy.\n        # TODO: check the health by checking if the workers all alive\n        return\n\n    def shutdown(self) -> None:\n        if self._is_shutdown:\n            return\n\n        try:\n            self._is_shutdown = True\n            futs = [worker.kill() for worker in self.workers]\n            _ = [fut.result() for fut in futs]\n        except (RuntimeError, ConnectionError, xo.ActorNotExist):\n            # event loop closed already, ignore\n            # or actor already removed\n            pass\n\n    def __del__(self):\n        return self.shutdown()\n\n    def _driver_execute_model(\n        self, execute_model_req: Optional[\"ExecuteModelRequest\"]\n    ) -> Optional[List[\"SamplerOutput\"]]:\n        return self.driver_worker.execute_method(\"execute_model\", execute_model_req)  # type: ignore\n\n    async def _driver_execute_model_async(\n        self,\n        execute_model_req: Optional[\"ExecuteModelRequest\"] = None,\n    ) -> List[\"SamplerOutput\"]:\n        if not self.tp_driver_workers:\n            return await self.driver_exec_method(\"execute_model\", execute_model_req)\n\n        if self.pp_locks is None:\n            # This locks each pipeline parallel stage so multiple virtual\n            # engines can't execute on the same stage at the same time\n            # We create the locks here to avoid creating them in the constructor\n            # which uses a different asyncio loop.\n            self.pp_locks = [\n                asyncio.Lock()\n                for _ in range(self.parallel_config.pipeline_parallel_size)\n            ]\n\n        tasks = [\n            asyncio.create_task(\n                _run_task_with_lock(\n                    self.driver_exec_method,\n                    self.pp_locks[0],\n                    \"execute_model\",\n                    execute_model_req,\n                )\n            )\n        ]\n        for pp_rank, driver_worker in enumerate(self.tp_driver_workers, start=1):\n            tasks.append(\n                asyncio.create_task(\n                    _run_task_with_lock(\n                        driver_worker.execute_method_async,\n                        self.pp_locks[pp_rank],\n                        \"execute_model\",\n                        execute_model_req,\n                    )\n                )\n            )\n\n        results = await asyncio.gather(*tasks)\n\n        # Only the last PP stage has the final results.\n        return results[-1]\n\n    async def _start_worker_execution_loop(self):\n        coros = [\n            worker.execute_method_async(\"start_worker_execution_loop\")\n            for worker in self.non_driver_workers\n        ]\n        return await asyncio.gather(*coros)\n\n\nif ExecutorV1:\n\n    class XinferenceDistributedExecutorV1(XinferenceDistributedExecutor, ExecutorV1):\n        def __init__(\n            self,\n            vllm_config: \"VllmConfig\",\n            pool_addresses: List[str],\n            n_worker: int,\n            *args,\n            **kwargs,\n        ):\n            assert envs.VLLM_USE_V1\n\n            isolation = Isolation(asyncio.new_event_loop())\n            isolation.start()\n            loop = isolation.loop\n\n            XinferenceDistributedExecutor.__init__(\n                self, vllm_config, pool_addresses, n_worker, loop, *args, **kwargs\n            )\n\n        def _create_workers(self, refs: xo.ActorRefType[WorkerActor]) -> None:\n            self.workers = [WorkerWrapper(self._loop, ref) for ref in refs]\n\n        def execute_model(\n            self,\n            execute_model_req: \"ExecuteModelRequest\",\n        ) -> List[\"SamplerOutput\"]:\n            outputs = self._run_workers(\"execute_model\", execute_model_req)\n            return outputs[0]\n\n        def _run_workers(\n            self,\n            method: Union[str, Callable],\n            *args,\n            async_run_tensor_parallel_workers_only: bool = False,\n            max_concurrent_workers: Optional[int] = None,\n            **kwargs,\n        ) -> Any:\n            if max_concurrent_workers:\n                raise NotImplementedError(\n                    \"max_concurrent_workers is not supported yet.\"\n                )\n\n            workers = self.workers\n            if async_run_tensor_parallel_workers_only:\n                workers = self.non_driver_workers\n            worker_outputs = [\n                worker.execute_method(method, *args, **kwargs) for worker in workers\n            ]\n\n            if async_run_tensor_parallel_workers_only:\n                return worker_outputs\n\n            return [output.result() for output in worker_outputs]\n"
  },
  {
    "path": "xinference/model/llm/vllm/distributed_executor_v1.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nimport os\nfrom concurrent.futures import Future\nfrom typing import (\n    TYPE_CHECKING,\n    Any,\n    Awaitable,\n    Callable,\n    Dict,\n    List,\n    Optional,\n    Tuple,\n    Union,\n)\n\nimport xoscar as xo\nfrom vllm.v1.executor.abstract import Executor\nfrom vllm.v1.worker.worker_base import WorkerWrapperBase\nfrom xoscar.utils import get_next_port\n\nfrom ....isolation import Isolation\nfrom .utils import get_distributed_init_method\n\nif TYPE_CHECKING:\n    from vllm.config import VllmConfig\n    from vllm.v1.core.sched.output import SchedulerOutput\n    from vllm.v1.outputs import ModelRunnerOutput\n\nlogger = logging.getLogger(__name__)\n\nDEBUG_EXECUTOR = bool(int(os.getenv(\"XINFERENCE_DEBUG_VLLM_EXECUTOR\", \"0\")))\n\n\nclass WorkerActor(xo.StatelessActor):\n    def __init__(self, vllm_config: \"VllmConfig\", rpc_rank: int = 0, **kwargs):\n        super().__init__(**kwargs)\n        self._worker = WorkerWrapperBase(rpc_rank=rpc_rank)\n\n    async def __post_create__(self):\n        try:\n            # Change process title for model\n            import setproctitle\n\n            setproctitle.setproctitle(f\"Xinf vLLM worker: {self._worker.rpc_rank}\")\n        except ImportError:\n            pass\n\n    def __getattr__(self, item):\n        from xoscar.core import NO_LOCK_ATTRIBUTE_HINT\n\n        if item == NO_LOCK_ATTRIBUTE_HINT:\n            return True\n        return getattr(self._worker, item)\n\n    @classmethod\n    def gen_uid(cls, rank):\n        return f\"VllmWorker_{rank}\"\n\n    def execute_method(self, method: Union[str, Callable], *args, **kwargs):\n        if DEBUG_EXECUTOR:\n            # NOTE: too many logs, but useful for debug\n            logger.debug(\n                \"Calling method %s in vllm worker %s, args: %s, kwargs: %s\",\n                method,\n                self.uid,\n                args,\n                kwargs,\n            )\n        if isinstance(method, str):\n            if method != \"sample_tokens\":\n                return getattr(self._worker, method)(*args, **kwargs)\n            else:\n                result = getattr(self._worker, method)(*args, **kwargs)\n                return self._sanitize_result(result)\n        else:\n            return method(self._worker, *args, **kwargs)\n\n    def _sanitize_result(self, obj):\n        output = obj.get_output()\n        return output\n\n\nclass WorkerWrapper:\n    def __init__(\n        self,\n        loop: asyncio.AbstractEventLoop,\n        worker_actor_ref: xo.ActorRefType[WorkerActor],\n    ):\n        self._loop = loop\n        self._worker_actor_ref = worker_actor_ref\n\n    def execute_method(self, method: Union[str, Callable], *args, **kwargs):\n        coro = self._worker_actor_ref.execute_method(method, *args, **kwargs)\n        return asyncio.run_coroutine_threadsafe(coro, self._loop)\n\n    async def execute_method_async(self, method: Union[str, Callable], *args, **kwargs):\n        return await self._worker_actor_ref.execute_method(method, *args, **kwargs)\n\n    def kill(self):\n        coro = xo.destroy_actor(self._worker_actor_ref)\n        return asyncio.run_coroutine_threadsafe(coro, self._loop)\n\n\nclass XinferenceDistributedExecutorV1(Executor):\n    \"\"\"Xoscar based distributed executor\"\"\"\n\n    _loop: asyncio.AbstractEventLoop\n    _pool_addresses: List[str]\n    _n_worker: int\n\n    def __init__(\n        self,\n        vllm_config: \"VllmConfig\",\n        pool_addresses: List[str],\n        n_worker: int,\n        *args,\n        **kwargs,\n    ):\n        # XinferenceDistributedExecutorV1\n        isolation = Isolation(asyncio.new_event_loop())\n        isolation.start()\n        loop = isolation.loop\n\n        # XinferenceDistributedExecutor\n        self._pool_addresses = pool_addresses\n        self._loop = loop\n        self._n_worker = n_worker\n        self._is_shutdown = False\n\n        # DistributedExecutorBase\n        self.parallel_worker_tasks: Optional[Union[Any, Awaitable[Any]]] = None\n\n        # Executor\n        Executor.__init__(self, vllm_config, *args, **kwargs)\n\n    def _init_executor(self) -> None:\n        # Create the parallel GPU workers.\n        world_size = self.parallel_config.world_size\n        tensor_parallel_size = self.parallel_config.tensor_parallel_size\n\n        assert (\n            self._pool_addresses and len(self._pool_addresses) == world_size\n        ), f\"Pool addresses(#{len(self._pool_addresses or [])} must be equal to worldsize(#{world_size})\"\n\n        futures = []\n        for rank in range(world_size):\n            coro = xo.create_actor(\n                WorkerActor,\n                self.vllm_config,\n                rpc_rank=rank,\n                address=self._pool_addresses[rank],\n                uid=WorkerActor.gen_uid(rank),\n            )\n            futures.append(asyncio.run_coroutine_threadsafe(coro, self._loop))\n        refs: List[xo.ActorRefType[WorkerActor]] = [fut.result() for fut in futures]\n\n        # create workers\n        self._create_workers(refs)\n\n        # Set environment variables for the driver and workers.\n        all_args_to_update_environment_variables: List[Dict[str, str]] = [\n            dict() for _ in range(world_size)\n        ]\n\n        for args in all_args_to_update_environment_variables:\n            # some carry-over env vars from the driver\n            # TODO: refactor platform-specific env vars\n            for name in [\n                \"VLLM_ATTENTION_BACKEND\",\n                \"TPU_CHIPS_PER_HOST_BOUNDS\",\n                \"TPU_HOST_BOUNDS\",\n                \"VLLM_USE_V1\",\n                \"VLLM_TRACE_FUNCTION\",\n            ]:\n                if name in os.environ:\n                    args[name] = os.environ[name]\n\n        self._env_vars_for_all_workers = all_args_to_update_environment_variables\n\n        self._run_workers(\n            \"update_environment_variables\", self._env_vars_for_all_workers\n        )\n\n        all_kwargs = []\n        distributed_init_method = get_distributed_init_method(\n            self._pool_addresses[0].split(\":\", 1)[0], get_next_port()\n        )\n        for rank in range(world_size):\n            local_rank = rank % (world_size // self._n_worker)\n            kwargs = dict(\n                vllm_config=self.vllm_config,\n                local_rank=local_rank,\n                rank=rank,\n                distributed_init_method=distributed_init_method,\n                is_driver_worker=not self.parallel_config\n                or (rank % tensor_parallel_size == 0),\n            )\n            all_kwargs.append(kwargs)\n        self._run_workers(\"init_worker\", all_kwargs)\n        self._run_workers(\"init_device\")\n        self._run_workers(\n            \"load_model\",\n            max_concurrent_workers=self.parallel_config.max_parallel_loading_workers,\n        )\n\n        # This is the list of workers that are rank 0 of each TP group EXCEPT\n        # global rank 0. These are the workers that will broadcast to the\n        # rest of the workers.\n        self.tp_driver_workers: List[WorkerWrapper] = []\n        # This is the list of workers that are not drivers and not the first\n        # worker in a TP group. These are the workers that will be\n        # broadcasted to.\n        self.non_driver_workers: List[WorkerWrapper] = []\n\n        # Enforce rank order for correct rank to return final output.\n        for index, worker in enumerate(self.workers):\n            # The driver worker is rank 0 and not in self.workers.\n            rank = index + 1\n            if rank % self.parallel_config.tensor_parallel_size == 0:\n                self.tp_driver_workers.append(worker)\n            else:\n                self.non_driver_workers.append(worker)\n\n        self.pp_locks: Optional[List[asyncio.Lock]] = None\n\n    def collective_rpc(\n        self,\n        method: Union[str, Callable],\n        timeout: Optional[float] = None,\n        args: Tuple = (),\n        kwargs: Optional[Dict] = None,\n        non_block: bool = False,\n    ) -> List[Any]:\n        return self._run_workers(method, *args, **(kwargs or {}))\n\n    def execute_model(\n        self, scheduler_output: \"SchedulerOutput\", non_block: bool = False\n    ) -> Union[\"ModelRunnerOutput\", None, Future[Union[\"ModelRunnerOutput\", None]]]:\n        outputs = self._run_workers(\n            \"execute_model\", scheduler_output, non_block=non_block\n        )\n        return outputs[0]\n\n    def check_health(self) -> None:\n        # Assume that the workers are healthy.\n        # TODO: check the health by checking if the workers all alive\n        return\n\n    def shutdown(self) -> None:\n        if self._is_shutdown:\n            return\n\n        try:\n            self._is_shutdown = True\n            futs = [worker.kill() for worker in self.workers]\n            _ = [fut.result() for fut in futs]\n        except (RuntimeError, ConnectionError, xo.ActorNotExist):\n            # event loop closed already, ignore\n            # or actor already removed\n            pass\n\n    def _create_workers(self, refs: xo.ActorRefType[WorkerActor]) -> None:\n        self.workers = [WorkerWrapper(self._loop, ref) for ref in refs]\n\n    def _run_workers(\n        self,\n        method: Union[str, Callable],\n        *args,\n        async_run_tensor_parallel_workers_only: bool = False,\n        max_concurrent_workers: Optional[int] = None,\n        non_block: bool = False,\n        **kwargs,\n    ) -> Any:\n        if max_concurrent_workers:\n            raise NotImplementedError(\"max_concurrent_workers is not supported yet.\")\n\n        workers = self.workers\n        if async_run_tensor_parallel_workers_only:\n            workers = self.non_driver_workers\n        worker_outputs = [\n            worker.execute_method(method, *args, **kwargs) for worker in workers\n        ]\n\n        if async_run_tensor_parallel_workers_only or non_block:\n            return worker_outputs\n\n        return [output.result() for output in worker_outputs]\n"
  },
  {
    "path": "xinference/model/llm/vllm/tests/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/llm/vllm/tests/test_core_chat_model.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom unittest.mock import MagicMock\n\nimport pytest\n\nfrom ...tool_parsers.qwen_tool_parser import QwenToolParser\n\n\ndef filter_ids_and_created(data):\n    if isinstance(data, list):\n        return [filter_ids_and_created(item) for item in data]\n    elif isinstance(data, dict):\n        return {\n            k: filter_ids_and_created(v)\n            for k, v in data.items()\n            if k not in [\"id\", \"created\"]\n        }\n    return data\n\n\nclass TestVLLMChatModel:\n\n    @pytest.fixture\n    def real_vllm_chat_model(self):\n        from ..core import VLLMChatModel\n\n        model = object.__new__(VLLMChatModel)\n\n        model.model_family = MagicMock()\n        model.model_family.model_family = \"qwen\"\n        model.model_family.reasoning_start_tag = \"<think>\"\n        model.model_family.reasoning_end_tag = \"</think>\"\n        model.model_uid = \"test-model-0\"\n        model.reasoning_parser = None\n        model.tool_parser = QwenToolParser()\n\n        return model\n\n    async def create_mock_chunks(self, chunks_data):\n        for chunk in chunks_data:\n            yield chunk\n\n    @pytest.mark.asyncio\n    async def test_async_to_tool_completion_chunks_without_thinking(\n        self, real_vllm_chat_model\n    ):\n        test_chunks = [\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"<tool_call>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 71,\n                    \"total_tokens\": 230,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\\n\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 72,\n                    \"total_tokens\": 231,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '{\"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 73,\n                    \"total_tokens\": 232,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"name\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 74,\n                    \"total_tokens\": 233,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\":', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 75,\n                    \"total_tokens\": 234,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' \"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 76,\n                    \"total_tokens\": 235,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"get\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 77,\n                    \"total_tokens\": 236,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"_current\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 78,\n                    \"total_tokens\": 237,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"_weather\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 79,\n                    \"total_tokens\": 238,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\",', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 80,\n                    \"total_tokens\": 239,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' \"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 81,\n                    \"total_tokens\": 240,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"arguments\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 82,\n                    \"total_tokens\": 241,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\":', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 83,\n                    \"total_tokens\": 242,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' {\"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 84,\n                    \"total_tokens\": 243,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"location\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 85,\n                    \"total_tokens\": 244,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\":', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 86,\n                    \"total_tokens\": 245,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' \"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 87,\n                    \"total_tokens\": 246,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"上海\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 88,\n                    \"total_tokens\": 247,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": '\"}}\\n',\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 89,\n                    \"total_tokens\": 248,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"</tool_call>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 90,\n                    \"total_tokens\": 249,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\", \"index\": 0, \"logprobs\": None, \"finish_reason\": \"stop\"}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n        ]\n\n        chunks_generator = self.create_mock_chunks(test_chunks)\n        result_chunks = []\n        expected_chunks = [\n            {\n                \"id\": \"chatcmpl-7fcac134-7380-4a19-b665-d93ffaacfbca\",\n                \"model\": \"test-model-0\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756644905,\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\n                            \"role\": \"assistant\",\n                            \"content\": \"\",\n                            \"tool_calls\": [\n                                {\n                                    \"index\": 0,\n                                    \"id\": \"call_7fcac134-7380-4a19-b665-d93ffaacfbca\",\n                                    \"type\": \"function\",\n                                    \"function\": {\n                                        \"name\": \"get_current_weather\",\n                                        \"arguments\": '{\"location\": \"上海\"}',\n                                    },\n                                }\n                            ],\n                        },\n                        \"logprobs\": None,\n                        \"finish_reason\": \"tool_calls\",\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": -1,\n                    \"completion_tokens\": -1,\n                    \"total_tokens\": -1,\n                },\n            },\n            {\n                \"id\": \"chatcmpl-06a03091-f455-4dfe-a348-2163cf285811\",\n                \"model\": \"test-model-0\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756644905,\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"role\": \"assistant\", \"content\": \"\", \"tool_calls\": []},\n                        \"logprobs\": None,\n                        \"finish_reason\": \"stop\",\n                    }\n                ],\n                \"usage\": {\n                    \"completion_tokens\": 91,\n                    \"prompt_tokens\": 159,\n                    \"total_tokens\": 250,\n                },\n            },\n        ]\n\n        i = 0\n        async for chunk in real_vllm_chat_model._async_to_tool_completion_chunks(\n            chunks_generator\n        ):\n            result = filter_ids_and_created(chunk)\n            expected_result = filter_ids_and_created(expected_chunks[i])\n            assert result == expected_result\n            result_chunks.append(chunk)\n            i += 1\n\n    @pytest.mark.asyncio\n    async def test_async_to_tool_completion_chunks_with_thinking(\n        self, real_vllm_chat_model\n    ):\n        test_chunks = [\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451239,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"<think>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 1,\n                    \"total_tokens\": 160,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451239,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\\n\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 2,\n                    \"total_tokens\": 161,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451239,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"好的\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 3,\n                    \"total_tokens\": 162,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"</think>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 69,\n                    \"total_tokens\": 228,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"\\n\\n\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 70,\n                    \"total_tokens\": 229,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"<tool_call>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 71,\n                    \"total_tokens\": 230,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\\n\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 72,\n                    \"total_tokens\": 231,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '{\"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 73,\n                    \"total_tokens\": 232,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"name\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 74,\n                    \"total_tokens\": 233,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\":', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 75,\n                    \"total_tokens\": 234,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' \"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 76,\n                    \"total_tokens\": 235,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"get\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 77,\n                    \"total_tokens\": 236,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"_current\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 78,\n                    \"total_tokens\": 237,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"_weather\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 79,\n                    \"total_tokens\": 238,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\",', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 80,\n                    \"total_tokens\": 239,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' \"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 81,\n                    \"total_tokens\": 240,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"arguments\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 82,\n                    \"total_tokens\": 241,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\":', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 83,\n                    \"total_tokens\": 242,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' {\"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 84,\n                    \"total_tokens\": 243,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"location\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 85,\n                    \"total_tokens\": 244,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\":', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 86,\n                    \"total_tokens\": 245,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' \"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 87,\n                    \"total_tokens\": 246,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"上海\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 88,\n                    \"total_tokens\": 247,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": '\"}}\\n',\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 89,\n                    \"total_tokens\": 248,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"</tool_call>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 90,\n                    \"total_tokens\": 249,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\", \"index\": 0, \"logprobs\": None, \"finish_reason\": \"stop\"}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n        ]\n\n        chunks_generator = self.create_mock_chunks(test_chunks)\n        result_chunks = []\n\n        gen = real_vllm_chat_model._async_to_tool_completion_chunks(chunks_generator)\n\n        async for chunk in gen:\n            result_chunks.append(chunk)\n\n    @pytest.mark.asyncio\n    async def test_async_to_tool_completion_chunks_with_parser(\n        self, real_vllm_chat_model\n    ):\n        test_chunks = [\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451239,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"<think>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 1,\n                    \"total_tokens\": 160,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451239,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\\n\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 2,\n                    \"total_tokens\": 161,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451239,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"好的\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 3,\n                    \"total_tokens\": 162,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"</think>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 69,\n                    \"total_tokens\": 228,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"\\n\\n\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 70,\n                    \"total_tokens\": 229,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"<tool_call>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 71,\n                    \"total_tokens\": 230,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\\n\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 72,\n                    \"total_tokens\": 231,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '{\"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 73,\n                    \"total_tokens\": 232,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"name\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 74,\n                    \"total_tokens\": 233,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\":', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 75,\n                    \"total_tokens\": 234,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' \"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 76,\n                    \"total_tokens\": 235,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"get\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 77,\n                    \"total_tokens\": 236,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"_current\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 78,\n                    \"total_tokens\": 237,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"_weather\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 79,\n                    \"total_tokens\": 238,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\",', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 80,\n                    \"total_tokens\": 239,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' \"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 81,\n                    \"total_tokens\": 240,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"arguments\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 82,\n                    \"total_tokens\": 241,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\":', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 83,\n                    \"total_tokens\": 242,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' {\"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 84,\n                    \"total_tokens\": 243,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"location\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 85,\n                    \"total_tokens\": 244,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": '\":', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 86,\n                    \"total_tokens\": 245,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": ' \"', \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 87,\n                    \"total_tokens\": 246,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"上海\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 88,\n                    \"total_tokens\": 247,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": '\"}}\\n',\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 89,\n                    \"total_tokens\": 248,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\n                        \"text\": \"</tool_call>\",\n                        \"index\": 0,\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 90,\n                    \"total_tokens\": 249,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\", \"index\": 0, \"logprobs\": None, \"finish_reason\": None}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n            {\n                \"id\": \"cd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"object\": \"text_completion\",\n                \"created\": 1756451240,\n                \"model\": \"qwen3\",\n                \"choices\": [\n                    {\"text\": \"\", \"index\": 0, \"logprobs\": None, \"finish_reason\": \"stop\"}\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n        ]\n\n        chunks_generator = self.create_mock_chunks(test_chunks)\n        result_chunks = []\n        expected_chunks = [\n            {\n                \"id\": \"chatcd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"model\": \"qwen3\",\n                \"created\": 1756451239,\n                \"object\": \"chat.completion.chunk\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": \"\", \"content\": None},\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": None,\n            },\n            {\n                \"id\": \"chatcd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"model\": \"qwen3\",\n                \"created\": 1756451239,\n                \"object\": \"chat.completion.chunk\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": \"\\n\", \"content\": None},\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": None,\n            },\n            {\n                \"id\": \"chatcd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"model\": \"qwen3\",\n                \"created\": 1756451239,\n                \"object\": \"chat.completion.chunk\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": \"好的\", \"content\": None},\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": None,\n            },\n            {\n                \"id\": \"chatcd40cd70-84a6-11f0-b7a4-bc2411fe6c28\",\n                \"model\": \"qwen3\",\n                \"created\": 1756451240,\n                \"object\": \"chat.completion.chunk\",\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"reasoning_content\": \"\", \"content\": None},\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": None,\n            },\n            {\n                \"id\": \"chatcmpl-e3ec64af-ed8f-4706-9544-4f8d7b42c85b\",\n                \"model\": \"test-model-0\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756646208,\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\n                            \"role\": \"assistant\",\n                            \"content\": \"\\n\\n\",\n                            \"tool_calls\": [],\n                        },\n                        \"logprobs\": None,\n                        \"finish_reason\": None,\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": -1,\n                    \"completion_tokens\": -1,\n                    \"total_tokens\": -1,\n                },\n            },\n            {\n                \"id\": \"chatcmpl-490011af-9e50-4dea-969b-f10828d5a5ea\",\n                \"model\": \"test-model-0\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756646208,\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\n                            \"role\": \"assistant\",\n                            \"content\": \"\",\n                            \"tool_calls\": [\n                                {\n                                    \"index\": 0,\n                                    \"id\": \"call_490011af-9e50-4dea-969b-f10828d5a5ea\",\n                                    \"type\": \"function\",\n                                    \"function\": {\n                                        \"name\": \"get_current_weather\",\n                                        \"arguments\": '{\"location\": \"上海\"}',\n                                    },\n                                }\n                            ],\n                        },\n                        \"logprobs\": None,\n                        \"finish_reason\": \"tool_calls\",\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": -1,\n                    \"completion_tokens\": -1,\n                    \"total_tokens\": -1,\n                },\n            },\n            {\n                \"id\": \"chatcmpl-b5a05647-d043-43bb-a7e6-58907e7f4288\",\n                \"model\": \"test-model-0\",\n                \"object\": \"chat.completion.chunk\",\n                \"created\": 1756646208,\n                \"choices\": [\n                    {\n                        \"index\": 0,\n                        \"delta\": {\"role\": \"assistant\", \"content\": \"\", \"tool_calls\": []},\n                        \"logprobs\": None,\n                        \"finish_reason\": \"stop\",\n                    }\n                ],\n                \"usage\": {\n                    \"prompt_tokens\": 159,\n                    \"completion_tokens\": 91,\n                    \"total_tokens\": 250,\n                },\n            },\n        ]\n        real_vllm_chat_model.prepare_parse_reasoning_content(True, enable_thinking=True)\n\n        i = 0\n        async for chunk in real_vllm_chat_model._async_to_tool_completion_chunks(\n            chunks_generator\n        ):\n            result_chunks.append(chunk)\n            result = filter_ids_and_created(chunk)\n            expected_result = filter_ids_and_created(expected_chunks[i])\n            assert result == expected_result\n            i = i + 1\n"
  },
  {
    "path": "xinference/model/llm/vllm/tests/test_distributed_executor.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nimport sys\nfrom functools import partial\nfrom typing import Type\n\nimport pytest\nimport xoscar as xo\nfrom xoscar.utils import lazy_import\n\nfrom .....device_utils import gpu_count\nfrom ...cache_manager import LLMCacheManager as CacheManager\nfrom ...llm_family import BUILTIN_LLM_FAMILIES\n\nvllm = lazy_import(\"vllm\")\n\n\n@pytest.fixture\nasync def actor_pool_context():\n    logging.basicConfig(level=logging.DEBUG)\n    pool = await xo.create_actor_pool(\"127.0.0.1\", n_process=0)\n    async with pool:\n        yield pool\n\n\n@pytest.mark.skipif(sys.platform != \"linux\", reason=\"Run for linux only\")\n@pytest.mark.skipif(vllm is None, reason=\"vllm need to be installed\")\n@pytest.mark.skipif(gpu_count() < 2, reason=\"At lease 2 gpus required to test\")\nasync def test_distributed_executor(actor_pool_context):\n    from vllm.config import VllmConfig\n    from vllm.engine.arg_utils import AsyncEngineArgs\n    from vllm.engine.async_llm_engine import AsyncLLMEngine as _AsyncLLMEngine\n    from vllm.executor.executor_base import ExecutorBase\n    from vllm.sampling_params import SamplingParams\n\n    from ..distributed_executor import XinferenceDistributedExecutor\n\n    class AsyncLLMEngine(_AsyncLLMEngine):\n        @classmethod\n        def _get_executor_cls(cls, engine_config: VllmConfig) -> Type[ExecutorBase]:\n            return partial(  # type: ignore\n                XinferenceDistributedExecutor,\n                pool_addresses=[worker_addr1, worker_addr2],\n                n_worker=1,\n                loop=loop,\n            )\n\n    pool = actor_pool_context\n\n    worker_addr1 = await pool.append_sub_pool(env={\"CUDA_VISIBLE_DEVICES\": \"0,1\"})\n    worker_addr2 = await pool.append_sub_pool(env={\"CUDA_VISIBLE_DEVICES\": \"0,1\"})\n    loop = asyncio.get_running_loop()\n\n    llm_family = next(\n        f for f in BUILTIN_LLM_FAMILIES if f.model_name == \"qwen2.5-instruct\"\n    )\n    llm_family = llm_family.copy()\n    spec = next(\n        s\n        for s in llm_family.model_specs\n        if s.model_size_in_billions == 7 and s.model_format == \"pytorch\"\n    )\n    llm_family.model_specs = [spec]\n    model_path = CacheManager(llm_family).cache()\n\n    def load(tp: bool = True):\n        if tp:\n            kwargs = {\"tensor_parallel_size\": 2}\n        else:\n            kwargs = {\"pipeline_parallel_size\": 2}\n        engine_args = AsyncEngineArgs(\n            model=model_path, gpu_memory_utilization=0.8, enforce_eager=True, **kwargs\n        )\n        engine = AsyncLLMEngine.from_engine_args(engine_args)\n        return engine\n\n    engine = await asyncio.to_thread(load, tp=True)\n    for _ in range(2):\n        # test 2 rounds\n        outputs = []\n        async for output in engine.generate(\n            \"Hi\", SamplingParams(max_tokens=1), None, None\n        ):\n            outputs.append(output)\n\n        assert len(outputs) == 1\n\n    await asyncio.to_thread(engine.engine.model_executor.shutdown)\n"
  },
  {
    "path": "xinference/model/llm/vllm/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport functools\nimport ipaddress\nimport logging\nimport os\n\nlogger = logging.getLogger(__name__)\n\n\ndef vllm_check(fn):\n    try:\n        from vllm.engine.async_llm_engine import AsyncEngineDeadError\n    except Exception:\n        return fn\n\n    @functools.wraps(fn)\n    async def _async_wrapper(self, *args, **kwargs):\n        try:\n            return await fn(self, *args, **kwargs)\n        except AsyncEngineDeadError:\n            logger.info(\"Detecting vLLM is not health, prepare to quit the process\")\n            try:\n                self.stop()\n            except Exception:\n                # ignore error when stop\n                pass\n            # Just kill the process and let xinference auto-recover the model\n            os._exit(1)\n\n    return _async_wrapper\n\n\ndef get_distributed_init_method(ip: str, port: int) -> str:\n    return get_tcp_uri(ip, port)\n\n\ndef get_tcp_uri(ip: str, port: int) -> str:\n    if is_valid_ipv6_address(ip):\n        return f\"tcp://[{ip}]:{port}\"  # noqa E231\n    else:\n        return f\"tcp://{ip}:{port}\"  # noqa E231\n\n\ndef is_valid_ipv6_address(address: str) -> bool:\n    try:\n        ipaddress.IPv6Address(address)\n        return True\n    except ValueError:\n        return False\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/allocator.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import Any, Dict, Optional\n\nfrom vllm.core.block.cpu_gpu_block_allocator import CpuGpuBlockAllocator\nfrom vllm.core.block.interfaces import DeviceAwareBlockAllocator\nfrom vllm.platforms import current_platform\nfrom vllm.utils import Device\n\nfrom .block import XavierPrefixCachingBlockAllocator\n\n\nclass XavierCpuGpuBlockAllocator(CpuGpuBlockAllocator):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self._xavier_config: Optional[Dict[str, Any]] = None  # type: ignore\n\n    @property\n    def xavier_config(self):\n        return self._xavier_config\n\n    @xavier_config.setter\n    def xavier_config(self, v: Dict[str, Any]):\n        self._xavier_config = v\n        self._allocators[Device.GPU].xavier_config = v\n\n    @staticmethod\n    def create(\n        allocator_type: str,\n        num_gpu_blocks: int,\n        num_cpu_blocks: int,\n        block_size: int,\n    ) -> DeviceAwareBlockAllocator:\n        \"\"\"Xinference Change!!!\n        1. The code is copied here because the `allocator` needs to be instantiated as a subclass.\n        2. Why not re-instantiate it externally?\n        Re-instantiating the `allocator` is costly because it requires initializing many tensors.\n        \"\"\"\n\n        # For HPU, block id 0 is used only for padding\n        reserved_blocks = 1 if current_platform.is_hpu() else 0\n        block_ids = list(range(reserved_blocks, num_gpu_blocks + num_cpu_blocks))\n        num_gpu_blocks -= reserved_blocks\n        gpu_block_ids = block_ids[:num_gpu_blocks]\n        cpu_block_ids = block_ids[num_gpu_blocks:]\n\n        gpu_allocator = XavierPrefixCachingBlockAllocator(\n            run_isolation=True,\n            num_blocks=num_gpu_blocks,\n            block_size=block_size,\n            block_ids=gpu_block_ids,\n        )\n\n        cpu_allocator = XavierPrefixCachingBlockAllocator(\n            num_blocks=num_cpu_blocks,\n            block_size=block_size,\n            block_ids=cpu_block_ids,\n        )\n\n        return XavierCpuGpuBlockAllocator(\n            cpu_block_allocator=cpu_allocator,\n            gpu_block_allocator=gpu_allocator,\n        )\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/block.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport asyncio\nimport logging\nfrom typing import Any, Dict, Optional\n\nimport xoscar as xo\nfrom vllm.core.block.interfaces import BlockId\nfrom vllm.core.block.prefix_caching_block import (\n    BlockTracker,\n    PrefixCachingBlockAllocator,\n)\n\nfrom .....isolation import Isolation\n\nlogger = logging.getLogger(__name__)\n\n\nclass XavierInnerBlockTracker(BlockTracker):\n    \"\"\"Used to track the status of a block inside the prefix caching allocator\"\"\"\n\n    \"\"\"\n    Here, two fixed attributes, `transferred` and `executed`,\n    have been added to the `BlockTracker` class to mark the status of the corresponding `block_id`.\n    We cannot directly set attributes on the `Block` object\n    because the `Block` objects are dynamically allocated with each scheduling.\n    The `Block` objects executed in two different scheduling steps may have the same `id`, `hash`, etc.,\n    but the instance objects may differ.\n    The BlockTracker object inside vllm is one-to-one with the block_id.\n    \"\"\"\n    __slots__ = (\"active\", \"last_accessed\", \"computed\", \"transferred\", \"executed\")\n\n    def __init__(self):\n        super().__init__()\n        self.transferred = False\n        self.executed = False\n\n\nclass XavierPrefixCachingBlockAllocator(PrefixCachingBlockAllocator):\n    def __init__(self, *args, run_isolation: bool = False, **kwargs):\n        super().__init__(*args, **kwargs)\n        for _id in self._block_tracker.keys():\n            self._block_tracker[_id] = XavierInnerBlockTracker()\n\n        self._xavier_config: Optional[Dict[str, Any]] = None\n        self._block_tracker_ref = None\n        if run_isolation:\n            self._isolation = Isolation(\n                asyncio.new_event_loop(), threaded=True, daemon=True\n            )\n            self._isolation.start()\n        else:\n            self._isolation = None  # type: ignore\n\n    def __del__(self):\n        if self._isolation is not None:\n            self._isolation.stop()\n\n    @property\n    def xavier_config(self):\n        return self._xavier_config\n\n    @xavier_config.setter\n    def xavier_config(self, v: Dict[str, Any]):\n        self._xavier_config = v\n\n    async def _get_block_tracker_ref(self):\n        if self._block_tracker_ref is None:\n            block_tracker_address = self.xavier_config.get(\"block_tracker_address\")\n            block_tracker_uid = self.xavier_config.get(\"block_tracker_uid\")\n            self._block_tracker_ref = await xo.actor_ref(\n                address=block_tracker_address, uid=block_tracker_uid\n            )\n        return self._block_tracker_ref\n\n    async def unregister_block(self, block_id: int):\n        assert self._xavier_config is not None\n        tracker_ref = await self._get_block_tracker_ref()\n        await tracker_ref.unregister_block(\n            self.xavier_config.get(\"virtual_engine\"),\n            self.xavier_config.get(\"rank\"),\n            block_id,\n        )\n\n    def _maybe_allocate_evicted_block_id(self) -> Optional[BlockId]:\n        \"\"\"\n        This is the only entry point where the `block_id` is evicted from the cache.\n        Therefore, when the `block_id` is evicted, the tracker actor needs to unregister the block information.\n        At the same time, make sure to reset the attributes corresponding to that `block_id`.\n        \"\"\"\n        evicted_block_id = super()._maybe_allocate_evicted_block_id()\n        logger.debug(f\"block_id: {evicted_block_id} will be evicted from the cache.\")\n        if evicted_block_id is not None and self._isolation is not None:\n            tracker = self._block_tracker[evicted_block_id]\n            assert isinstance(tracker, XavierInnerBlockTracker)\n            tracker.transferred = False\n            tracker.executed = False\n            self._isolation.call(self.unregister_block(evicted_block_id))\n            logger.debug(f\"block_id: {evicted_block_id} will be used again.\")\n        return evicted_block_id\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/block_manager.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom typing import Any, Dict, Optional\n\nfrom vllm.core.block.cpu_gpu_block_allocator import CpuGpuBlockAllocator\nfrom vllm.core.block.interfaces import Block\nfrom vllm.core.block_manager import SelfAttnBlockSpaceManager\nfrom vllm.sequence import SequenceGroup, SequenceStatus\nfrom vllm.utils import Device\n\nfrom .allocator import XavierCpuGpuBlockAllocator\n\nlogger = logging.getLogger(__name__)\n\n\nclass XavierBlockManager(SelfAttnBlockSpaceManager):\n    def __init__(self, *args, **kwargs):\n        # Monkey patch\n        CpuGpuBlockAllocator.create = XavierCpuGpuBlockAllocator.create\n        super().__init__(*args, **kwargs)\n        self._xavier_config: Optional[Dict[str, Any]] = None  # type: ignore\n        logger.debug(\"Init xavier block manager done.\")\n\n    @property\n    def xavier_config(self):\n        return self._xavier_config\n\n    @xavier_config.setter\n    def xavier_config(self, value: Dict[str, Any]):\n        self._xavier_config = value\n        self.block_allocator.xavier_config = value\n\n    def get_block_by_block_id(self, seq_id: int, block_id: int) -> Block:\n        table = self.block_tables[seq_id]\n        for b in table.blocks:\n            if b.block_id == block_id:\n                return b\n\n    def get_block_status_by_block_id(self, status_name: str, block_id: int) -> bool:\n        tracker = self.block_allocator._allocators[Device.GPU]._block_tracker[block_id]\n        return getattr(tracker, status_name)\n\n    def set_block_status_by_block_id(\n        self, status_name: str, block_id: int, status: bool\n    ) -> None:\n        tracker = self.block_allocator._allocators[Device.GPU]._block_tracker[block_id]\n        assert getattr(tracker, status_name, None) is not None\n        setattr(tracker, status_name, status)\n\n    def allocate(self, seq_group: SequenceGroup) -> None:\n        \"\"\"\n        If the `seq_group` has the `transferred` attribute,\n        it indicates that the `seq_group` has gone through the transfer process,\n        so the block allocation logic should not be executed again.\n        \"\"\"\n        waiting_seqs = seq_group.get_seqs(status=SequenceStatus.WAITING)\n        if all([getattr(s, \"transferred\", False) for s in waiting_seqs]):\n            return\n        super().allocate(seq_group)\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/block_tracker.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport random\nfrom typing import Dict, List, Optional, Set, Tuple\n\nimport xoscar as xo\n\n\nclass VLLMBlockTracker(xo.StatelessActor):\n    @classmethod\n    def default_uid(cls):\n        return f\"vllm-block-tracker-actor\"\n\n    def __init__(self):\n        super().__init__()\n        # engine -> hash -> (rank, block_id)\n        self._hash_to_rank_and_block_id: Dict[int, Dict[int, Set[Tuple[int, int]]]] = {}  # type: ignore\n        # engine -> rank -> (hash, block_id)\n        self._rank_to_hash_and_block_id: Dict[int, Dict[int, Set[Tuple[int, int]]]] = {}  # type: ignore\n        self._unavailable_ranks: Set[int] = set()  # type: ignore\n\n    def register_blocks(\n        self, virtual_engine: int, block_infos: List[Tuple[int, int]], rank: int\n    ):\n        # Update query meta\n        if virtual_engine not in self._hash_to_rank_and_block_id:\n            self._hash_to_rank_and_block_id[virtual_engine] = {}\n        hash_to_rank_and_block_id = self._hash_to_rank_and_block_id[virtual_engine]\n        for hash_content, block_id in block_infos:\n            if hash_content not in hash_to_rank_and_block_id:\n                hash_to_rank_and_block_id[hash_content] = {\n                    (rank, block_id),\n                }\n            else:\n                hash_to_rank_and_block_id[hash_content].add((rank, block_id))\n\n        # Update remove meta\n        if virtual_engine not in self._rank_to_hash_and_block_id:\n            self._rank_to_hash_and_block_id[virtual_engine] = {}\n        rank_to_hash_and_block_id = self._rank_to_hash_and_block_id[virtual_engine]\n        if rank not in rank_to_hash_and_block_id:\n            rank_to_hash_and_block_id[rank] = set()\n        rank_to_hash_and_block_id[rank].update(block_infos)\n\n    def query_blocks(\n        self, virtual_engine: int, hash_contents: List[Tuple[int, int]]\n    ) -> Dict[int, Set[Tuple[int, int, int]]]:\n        if virtual_engine not in self._hash_to_rank_and_block_id:\n            return {}\n        hash_to_rank_and_block_id = self._hash_to_rank_and_block_id[virtual_engine]\n        remote: Dict[int, Set[Tuple[int, int, int]]] = {}\n        for hash_content, _id in hash_contents:\n            if (\n                hash_content in hash_to_rank_and_block_id\n            ) and hash_to_rank_and_block_id[hash_content]:\n                # exclude ranks that are in the recovery process\n                rank_and_block_id = [\n                    (r, b)\n                    for r, b in hash_to_rank_and_block_id[hash_content]\n                    if r not in self._unavailable_ranks\n                ]\n                if rank_and_block_id:\n                    # TODO: Randomly select here, and try to distribute requests as evenly as possible.\n                    # There may be better methods in the future.\n                    rank, block_id = random.choice(rank_and_block_id)\n                    if rank not in remote:\n                        remote[rank] = {\n                            (hash_content, block_id, _id),\n                        }\n                    else:\n                        remote[rank].add((hash_content, block_id, _id))\n        return remote\n\n    def unregister_block(self, virtual_engine: int, rank: int, block_id: int):\n        if (virtual_engine not in self._rank_to_hash_and_block_id) or (\n            virtual_engine not in self._hash_to_rank_and_block_id\n        ):\n            return\n\n        # Update remove meta\n        rank_to_hash_and_block_id = self._rank_to_hash_and_block_id[virtual_engine]\n        if rank not in rank_to_hash_and_block_id:\n            return\n        hash_and_block_id = rank_to_hash_and_block_id[rank]\n        detail: Optional[Tuple[int, int]] = None\n        for hash_content, _id in hash_and_block_id.copy():\n            if _id == block_id:\n                detail = (hash_content, block_id)\n                hash_and_block_id.discard(detail)\n                break\n\n        # Update query meta\n        if detail is not None:\n            hash_to_rank_and_block_id = self._hash_to_rank_and_block_id[virtual_engine]\n            _hash = detail[0]\n            if _hash in hash_to_rank_and_block_id:\n                hash_to_rank_and_block_id[_hash].discard((rank, detail[1]))\n\n    def unregister_rank(self, rank: int):\n        \"\"\"\n        This rank is in the recovery process, and its query results will be excluded.\n        \"\"\"\n        self._unavailable_ranks.add(rank)\n\n    def register_rank(self, rank: int):\n        \"\"\"\n        After recovery is successful, clear all stale data of the rank and mark the rank as available.\n        \"\"\"\n        for _, rank_to_hash_and_block_id in self._rank_to_hash_and_block_id.items():\n            rank_to_hash_and_block_id.pop(rank, None)\n\n        for _, hash_to_rank_and_block_id in self._hash_to_rank_and_block_id.items():\n            for _, rank_and_block_id in hash_to_rank_and_block_id.items():\n                to_delete = [(r, b) for r, b in rank_and_block_id if r == rank]\n                if to_delete:\n                    rank_and_block_id.difference_update(to_delete)\n\n        self._unavailable_ranks.discard(rank)\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/collective.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom typing import List, Optional\n\nlogger = logging.getLogger(__name__)\n\n\nclass CollectiveRank:\n    def __init__(\n        self,\n        rank: int,\n        world_size: int,\n        rank_address: str,\n        store_address: str,\n        store_port: int,\n        world_addresses: List[str],\n    ):\n        self._rank = rank\n        self._world_size = world_size\n        self._rank_address = rank_address\n        self._world_addresses = world_addresses\n        self._store_address = store_address\n        self._store_port = store_port\n        self._device = None\n        self._tcp_store = None\n        self._context = None\n\n    def init_rank(self):\n        from xoscar.collective import xoscar_pygloo as xp\n\n        self._context = xp.rendezvous.Context(self._rank, self._world_size)\n\n        attr = xp.transport.tcp.attr(self._rank_address.split(\":\")[0])\n        self._device = xp.transport.tcp.CreateDevice(attr)\n\n        opt = xp.rendezvous.TCPStoreOptions()\n        opt.port = self._store_port\n        opt.numWorkers = self._world_size\n        opt.isServer = self._rank == 0\n        opt.waitWorkers = False\n\n        self._tcp_store = xp.rendezvous.TCPStore(self._store_address, opt)\n        if self._world_addresses:\n            self.connect_full_mesh()\n\n    def connect_full_mesh(\n        self, prefix: Optional[str] = None, world_addresses: Optional[List[str]] = None\n    ):\n        from xoscar.collective import xoscar_pygloo as xp\n\n        assert self._device is not None\n        assert self._tcp_store is not None\n        assert self._context is not None\n        if world_addresses is not None:\n            self._world_addresses = world_addresses\n        prefix_store = xp.rendezvous.PrefixStore(\n            prefix or str(self._world_size), self._tcp_store\n        )\n        self._context.connectFullMesh(prefix_store, self._device)\n        logger.debug(\n            f\"Rank {self._rank} arrives successfully, world addresses: {self._world_addresses}\"\n        )\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/collective_manager.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport asyncio\nimport logging\nimport traceback\nfrom typing import TYPE_CHECKING, Any, Dict, List, Optional, no_type_check\n\nimport xoscar as xo\n\nfrom .block_tracker import VLLMBlockTracker\n\nif TYPE_CHECKING:\n    from .transfer import Rank0TransferActor, TransferActor\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass Rank0ModelActor(xo.StatelessActor):\n    @classmethod\n    def default_uid(cls):\n        return \"rank0-model-actor\"\n\n    def __init__(self, xavier_config: Dict[str, Any]):\n        super().__init__()\n        self._rank = 0\n        self._xavier_config = xavier_config\n        self._transfer_ref: Optional[xo.ActorRefType[\"Rank0TransferActor\"]] = None\n\n    async def __pre_destroy__(self):\n        if self._transfer_ref is not None:\n            try:\n                await xo.destroy_actor(self._transfer_ref)\n                del self._transfer_ref\n            except Exception as e:\n                logger.debug(\n                    f\"Destroy transfer actor failed, rank: {self._rank}, address: {self.address}, error: {e}\"\n                )\n\n    @no_type_check\n    async def start_transfer_for_vllm(self, rank_addresses: List[str]):\n        from .transfer import Rank0TransferActor\n\n        self._transfer_ref = await xo.create_actor(\n            Rank0TransferActor,\n            address=self.address,\n            uid=f\"{Rank0TransferActor.default_uid()}-{self._rank}\",\n            rank=self._rank,\n            world_size=self._xavier_config.get(\"world_size\"),  # type: ignore\n            rank_address=self._xavier_config.get(\"rank_address\"),  # type: ignore\n            store_address=self._xavier_config.get(\"store_address\"),  # type: ignore\n            store_port=self._xavier_config.get(\"store_port\"),  # type: ignore\n            world_addresses=rank_addresses,\n        )\n        logger.debug(\n            f\"Init transfer actor: {self._transfer_ref.address}, rank: {self._rank} done for vllm.\"  # type: ignore\n        )\n\n\ndef with_lock(method):\n    async def wrapper(self, *args, **kwargs):\n        async with self._lock:\n            return await method(self, *args, **kwargs)\n\n    return wrapper\n\n\nclass CollectiveManager(xo.StatelessActor):\n    @classmethod\n    def default_uid(cls):\n        return f\"xavier-collective-manager\"\n\n    def __init__(self, model_uid: str):\n        super().__init__()\n        self._model_uid = model_uid\n        self._tracker_ref: Optional[xo.ActorRefType[\"VLLMBlockTracker\"]] = None\n        self._rank_to_ref: Dict[int, xo.ActorRefType[\"TransferActor\"]] = {}\n        self._lock = asyncio.Lock()\n\n    async def __post_create__(self):\n        self._tracker_ref = await xo.actor_ref(\n            address=self.address,\n            uid=f\"{VLLMBlockTracker.default_uid()}-{self._model_uid}\",\n        )\n\n    async def unregister_rank(self, rank: int):\n        self._rank_to_ref.pop(rank, None)\n        await self._tracker_ref.unregister_rank(rank)  # type: ignore\n        logger.debug(f\"Unregister rank: {rank}\")\n\n    async def register_rank(self, rank: int, address: str, update: bool = False):\n        from .transfer import TransferActor\n\n        rank_ref = await xo.actor_ref(\n            address=address, uid=f\"{TransferActor.default_uid()}-{rank}\"\n        )\n        self._rank_to_ref[rank] = rank_ref\n        logger.debug(f\"Register rank: {rank}, address: {address}\")\n        if update:\n            await self._update_world()\n            await self._tracker_ref.register_rank(rank)  # type: ignore\n\n    @with_lock\n    async def _update_world(self):\n        \"\"\"\n        Locking is used to prevent chaos when multiple replicas trigger recovery simultaneously.\n        \"\"\"\n        from .....core.utils import gen_random_string\n\n        prefix = gen_random_string(6)\n        tasks = []\n        rank_to_ref = self._rank_to_ref.copy()\n        world_addresses = [ref.address for _, ref in sorted(rank_to_ref.items())]\n        for rank, ref in rank_to_ref.items():\n            tasks.append(ref.connect_full_mesh(prefix, world_addresses))\n        try:\n            logger.debug(\n                f\"Rebuild collective communication with world_addresses: {world_addresses}, prefix: {prefix}\"\n            )\n            await asyncio.gather(*tasks)\n            logger.debug(\n                f\"Rebuild collective communication with world_addresses: {world_addresses}, prefix: {prefix} done.\"\n            )\n        except Exception as e:\n            \"\"\"\n            The exception here is most likely due to another replica triggering recovery during the recovery process,\n            causing `connect_full_mesh` to time out.\n            Simply log the exception and\n            let the subsequent update process handle the reconstruction of the collective communication world.\n            \"\"\"\n            logger.error(\n                f\"Rebuild collective communication with world_addresses: {world_addresses} failed. \"\n                f\"Exception: {e}\"\n            )\n            # Print the complete error stack\n            traceback.print_exception(type(e), e, e.__traceback__)\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/engine.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom typing import Dict, List, Optional, Type, Union\n\nfrom packaging import version\nfrom vllm import AsyncEngineArgs, EmbeddingRequestOutput, RequestOutput\nfrom vllm import __version__ as VLLM_VERSION\nfrom vllm.config import VllmConfig\nfrom vllm.engine.async_llm_engine import AsyncLLMEngine, _AsyncLLMEngine\nfrom vllm.engine.llm_engine import SchedulerOutputState\nfrom vllm.engine.metrics_types import StatLoggerBase\nfrom vllm.executor.executor_base import ExecutorBase\nfrom vllm.sequence import ExecuteModelRequest\nfrom vllm.usage.usage_lib import UsageContext\n\nfrom .executor import XavierExecutor\nfrom .scheduler import XavierScheduler\n\nlogger = logging.getLogger(__name__)\n\n\nclass XavierInternalEngine(_AsyncLLMEngine):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self._xavier_config = kwargs[\"vllm_config\"].xavier_config\n        self.scheduler = [\n            XavierScheduler(\n                self.scheduler_config,\n                self.cache_config,\n                self.lora_config,\n                self.parallel_config.pipeline_parallel_size,\n                (\n                    self.async_callbacks[v_id]\n                    if self.model_config.use_async_output_proc\n                    else None\n                ),\n                xavier_config=self._xavier_config,\n                virtual_engine=v_id,\n            )\n            for v_id in range(self.parallel_config.pipeline_parallel_size)\n        ]\n        self.output_processor.scheduler = self.scheduler\n        self.model_executor.scheduler = self.scheduler\n\n    async def step_async(\n        self, virtual_engine: int\n    ) -> List[Union[RequestOutput, EmbeddingRequestOutput]]:\n        \"\"\"Performs one decoding iteration and returns newly generated results.\n        The workers are ran asynchronously if possible.\n\n        This function performs one decoding iteration of the engine. It first\n        schedules the sequences to be executed in the next iteration and the\n        token blocks to be swapped in/out/copy. Then, it executes the model\n        and updates the scheduler with the model outputs. Finally, it decodes\n        the sequences and returns the newly generated results.\n        \"\"\"\n        # these are cached outputs from previous iterations. None if on first\n        # iteration\n        cached_outputs = self.cached_scheduler_outputs[virtual_engine]\n        seq_group_metadata_list = cached_outputs.seq_group_metadata_list\n        scheduler_outputs = cached_outputs.scheduler_outputs\n        allow_async_output_proc = cached_outputs.allow_async_output_proc\n\n        ctx = self.scheduler_contexts[virtual_engine]\n\n        # Clear outputs for each new scheduler iteration\n        ctx.request_outputs.clear()\n\n        # skip the scheduler if there are any remaining steps in the seq groups.\n        # This ensures that the scheduler is only called again when the current\n        # batch has completed.\n        if not self._has_remaining_steps(seq_group_metadata_list):\n            # Schedule iteration\n            \"\"\"Xinference Change!!!\n            Why copy the entire function code of vllm:\n            The purpose here is to modify the way the `schedule` function is invoked to asynchronous calling.\n            No other modifications were made elsewhere.\n            \"\"\"\n            (\n                seq_group_metadata_list,\n                scheduler_outputs,\n                allow_async_output_proc,\n            ) = await self.scheduler[virtual_engine].schedule()\n\n            ctx.seq_group_metadata_list = seq_group_metadata_list\n            ctx.scheduler_outputs = scheduler_outputs\n\n            # Maybe switch from async mode to sync mode\n            if not allow_async_output_proc and len(ctx.output_queue) > 0:\n                self._process_model_outputs(ctx=ctx)\n\n            if (\n                self.scheduler_config.is_multi_step\n                and scheduler_outputs.num_lookahead_slots > 0\n            ):\n                # cache the scheduler outputs for the next iteration if we have\n                # lookahead slots\n                self._cache_scheduler_outputs_for_multi_step(\n                    virtual_engine,\n                    seq_group_metadata_list,\n                    scheduler_outputs,\n                    allow_async_output_proc,\n                )\n\n        assert seq_group_metadata_list is not None\n        assert scheduler_outputs is not None\n\n        if not scheduler_outputs.is_empty():\n            finished_requests_ids = self.scheduler[\n                virtual_engine\n            ].get_and_reset_finished_requests_ids()\n\n            # Check if we have a cached last_output from the previous iteration.\n            # For supporting PP this is probably the best way to pass the\n            # sampled_token_ids, as a separate broadcast over all the PP stages\n            # will cause one virtual engine's microbatch to block the pipeline.\n            last_sampled_token_ids = self._get_last_sampled_token_ids(virtual_engine)\n\n            execute_model_req = ExecuteModelRequest(\n                seq_group_metadata_list=seq_group_metadata_list,\n                blocks_to_swap_in=scheduler_outputs.blocks_to_swap_in,\n                blocks_to_swap_out=scheduler_outputs.blocks_to_swap_out,\n                blocks_to_copy=scheduler_outputs.blocks_to_copy,\n                virtual_engine=virtual_engine,\n                num_lookahead_slots=scheduler_outputs.num_lookahead_slots,\n                running_queue_size=scheduler_outputs.running_queue_size,\n                finished_requests_ids=finished_requests_ids,\n                # We use ExecuteModelRequest to pass the last sampled_token_ids\n                # to each of the non-last PP stages for in-place prepare_input.\n                last_sampled_token_ids=last_sampled_token_ids,\n            )\n\n            if allow_async_output_proc:\n                execute_model_req.async_callback = self.async_callbacks[virtual_engine]\n\n            # Execute the model.\n            outputs = await self.model_executor.execute_model_async(execute_model_req)\n\n            # we need to do this here so that last step's sampled_token_ids can\n            # be passed to the next iteration for PP.\n            if self.scheduler_config.is_multi_step:\n                self._update_cached_scheduler_output(virtual_engine, outputs)\n        else:\n            if len(ctx.output_queue) > 0:\n                self._process_model_outputs(ctx=ctx)\n            outputs = []\n\n        # Finish the current step for all the sequence groups.\n        if self.scheduler_config.is_multi_step:\n            for seq_group in seq_group_metadata_list:\n                seq_group.finish_step()\n\n        if not self._has_remaining_steps(seq_group_metadata_list):\n            # Clear the cache if we have finished all the steps\n            if self.scheduler_config.is_multi_step:\n                self.cached_scheduler_outputs[virtual_engine] = SchedulerOutputState()\n\n            # is_first_step_output is True only when the num_steps of all\n            # the sequences are 1. When the num_steps > 1,\n            # multi_step_model_runner does the first-step output append.\n            is_first_step_output: bool = (\n                False\n                if not seq_group_metadata_list\n                else seq_group_metadata_list[0].state.num_steps == 1\n            )\n\n            ctx.append_output(\n                outputs=outputs,\n                seq_group_metadata_list=seq_group_metadata_list,\n                scheduler_outputs=scheduler_outputs,\n                is_async=allow_async_output_proc,\n                is_last_step=True,\n                is_first_step_output=is_first_step_output,\n            )\n\n            if outputs and allow_async_output_proc:\n                assert (\n                    len(outputs) == 1\n                ), \"Async postprocessor expects only a single output set\"\n                self._advance_to_next_step(\n                    outputs[0],\n                    seq_group_metadata_list,\n                    scheduler_outputs.scheduled_seq_groups,\n                )\n\n            if not allow_async_output_proc:\n                self._process_model_outputs(ctx=ctx)\n\n                # Log stats.\n                self.do_log_stats(scheduler_outputs, outputs)\n\n                # Tracing\n                self.do_tracing(scheduler_outputs)\n\n        else:\n            # Multi-step case\n            return ctx.request_outputs\n\n        if not self.has_unfinished_requests():\n            # Drain async postprocessor (if exists)\n            if len(ctx.output_queue) > 0:\n                self._process_model_outputs(ctx=ctx)\n            assert len(ctx.output_queue) == 0\n\n        return ctx.request_outputs\n\n\nclass XavierEngine(AsyncLLMEngine):\n    _engine_class: Type[_AsyncLLMEngine] = XavierInternalEngine\n    _xavier_config: Optional[Dict] = None\n\n    @classmethod\n    def _get_executor_cls(cls, engine_config: VllmConfig) -> Type[ExecutorBase]:\n        logger.debug(f\"Initializing Xavier executor.\")\n        return XavierExecutor\n\n    @classmethod\n    def from_engine_args(\n        cls,\n        engine_args: AsyncEngineArgs,\n        engine_config: Optional[VllmConfig] = None,\n        start_engine_loop: bool = True,\n        usage_context: UsageContext = UsageContext.ENGINE_CONTEXT,\n        stat_loggers: Optional[Dict[str, StatLoggerBase]] = None,\n        xavier_config: Optional[Dict] = None,\n    ) -> \"AsyncLLMEngine\":\n        cls._xavier_config = xavier_config\n        if version.parse(VLLM_VERSION) < version.parse(\"0.8.0\"):\n            # old vllm\n            args = (\n                engine_args,\n                engine_config,\n                start_engine_loop,\n                usage_context,\n                stat_loggers,\n            )\n        else:\n            args = engine_args, start_engine_loop, usage_context, stat_loggers  # type: ignore\n        return super().from_engine_args(*args)\n\n    def __init__(self, *args, **kwargs):\n        # set xavier_config to `vllm_config`,\n        # because it may be needed everywhere in the vllm internal components\n        kwargs[\"vllm_config\"].xavier_config = self._xavier_config\n        super().__init__(*args, **kwargs)\n\n    async def init_xavier(self):\n        await self.engine.model_executor.init_transfer()\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/executor.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import TYPE_CHECKING, List, Optional, Set, Tuple, Union\n\nimport xoscar as xo\nfrom vllm.executor.mp_distributed_executor import MultiprocessingDistributedExecutor\nfrom vllm.model_executor.layers.sampler import SamplerOutput\nfrom vllm.sequence import ExecuteModelRequest, PoolerOutput\nfrom vllm.utils import is_pin_memory_available\nfrom vllm.worker.cache_engine import CacheEngine\n\nfrom .utils import hash_block_tokens\n\nif TYPE_CHECKING:\n    from .scheduler import XavierScheduler\n\n\nclass XavierExecutor(MultiprocessingDistributedExecutor):\n    scheduler: Optional[List[\"XavierScheduler\"]] = None\n    # same as vllm.core.block.prefix_caching_block.PrefixCachingBlock._none_hash\n    _none_hash: int = -1\n\n    def _init_executor(self) -> None:\n        super()._init_executor()\n        self._transfer_ref = None\n        self._block_tracker_ref = None\n\n    async def init_transfer(self):\n        \"\"\"\n        In vllm, the `cache_engine` is the entity that truly manages the KV cache tensors.\n        Retrieve the necessary transmission information from the `cache_engine`.\n        \"\"\"\n        transfer_ref = await self._get_transfer_ref()\n        ref_cache_engine: CacheEngine = self.driver_worker.cache_engine[0]  # type: ignore\n        buffer_dtype = ref_cache_engine.dtype\n        buffer_device = \"cpu\"\n        buffer_pin_memory = is_pin_memory_available()\n        num_attn_layers = ref_cache_engine.num_attention_layers\n        kv_cache_shape = ref_cache_engine.gpu_cache[0].shape\n        assert kv_cache_shape[0] == 2\n        buffer_num = 2\n        transfer_block_num = self.vllm_config.xavier_config.get(\"transfer_block_num\")\n        buffer_shape = (\n            transfer_block_num,\n            num_attn_layers,\n            kv_cache_shape[0],\n            *kv_cache_shape[2:],\n        )\n        await transfer_ref.setup(\n            self.driver_worker.cache_engine,\n            self.scheduler,\n            num_buffer=buffer_num,\n            buffer_shape=buffer_shape,\n            buffer_dtype=buffer_dtype,\n            buffer_device=buffer_device,\n            pin_memory=buffer_pin_memory,\n        )\n\n    async def _get_block_tracker_ref(self):\n        if self._block_tracker_ref is None:\n            block_tracker_address = self.vllm_config.xavier_config.get(\n                \"block_tracker_address\"\n            )\n            block_tracker_uid = self.vllm_config.xavier_config.get(\"block_tracker_uid\")\n            self._block_tracker_ref = await xo.actor_ref(\n                address=block_tracker_address, uid=block_tracker_uid\n            )\n        return self._block_tracker_ref\n\n    async def _get_transfer_ref(self):\n        from .transfer import TransferActor\n\n        if self._transfer_ref is None:\n            transfer_address = self.vllm_config.xavier_config.get(\"rank_address\")\n            rank = self.vllm_config.xavier_config.get(\"rank\")\n            self._transfer_ref = await xo.actor_ref(\n                address=transfer_address, uid=f\"{TransferActor.default_uid()}-{rank}\"\n            )\n        return self._transfer_ref\n\n    def get_rank(self) -> int:\n        return self.vllm_config.xavier_config.get(\"rank\")\n\n    async def execute_model_async(\n        self,\n        execute_model_req: ExecuteModelRequest,\n    ) -> List[Union[SamplerOutput, PoolerOutput]]:\n        \"\"\"\n        Collect information about the blocks involved in the execution before the vllm `ModelRunner` executes.\n        This information will be used by the tracker after execution to register the locally computed blocks.\n        \"\"\"\n        virtual_engine = execute_model_req.virtual_engine\n        block_tracker_ref = await self._get_block_tracker_ref()\n        scheduler = self.scheduler[virtual_engine]  # type: ignore\n        rank = self.get_rank()\n        executed_blocks_details: Set[Tuple[int, int]] = set()\n        for meta in execute_model_req.seq_group_metadata_list:\n            block_tables = meta.block_tables\n            tmp_content_hash = None\n            for seq_id, block_ids in block_tables.items():\n                for _id in block_ids:\n                    b = scheduler.block_manager.get_block_by_block_id(seq_id, _id)\n                    # The `executed` attribute is used to prevent duplicate registration of the block.\n                    executed = scheduler.block_manager.get_block_status_by_block_id(\n                        \"executed\", _id\n                    )\n                    if b._prev_block is None:\n                        content_hash = hash_block_tokens(\n                            True,\n                            self._none_hash,\n                            b.token_ids,\n                            b._extra_hash,\n                            self._none_hash,\n                        )\n\n                    else:\n                        prev_content_hash: Optional[int] = tmp_content_hash\n                        content_hash = hash_block_tokens(\n                            False,\n                            prev_content_hash,\n                            b.token_ids,\n                            b._extra_hash,\n                            self._none_hash,\n                        )\n                    tmp_content_hash = content_hash\n                    detail = (content_hash, b.block_id)\n\n                    if (content_hash is not None) and (not executed):\n                        executed_blocks_details.add(detail)\n\n        res = await super().execute_model_async(execute_model_req)\n\n        if executed_blocks_details:\n            \"\"\"\n            Why not collect and register the information after execution?\n            Because after execution, the model's execution callback hook will release the block_id,\n            causing the block manager to lose access to the correct information.\n            \"\"\"\n            await block_tracker_ref.register_blocks(\n                virtual_engine, list(executed_blocks_details), rank\n            )\n\n            for _, _id in executed_blocks_details:\n                scheduler.block_manager.set_block_status_by_block_id(\n                    \"executed\", _id, True\n                )\n\n        return res\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/scheduler.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport asyncio\nimport logging\nimport time\nfrom collections import deque\nfrom typing import Callable, Deque, Dict, List, Optional, Set, Tuple, no_type_check\n\nimport xoscar as xo\nfrom vllm.config import CacheConfig, LoRAConfig, SchedulerConfig\nfrom vllm.core.block.interfaces import Block\nfrom vllm.core.interfaces import BlockSpaceManager\nfrom vllm.core.scheduler import ScheduledSequenceGroup, Scheduler, SchedulerOutputs\nfrom vllm.sequence import (\n    SequenceData,\n    SequenceGroup,\n    SequenceGroupMetadata,\n    SequenceGroupMetadataDelta,\n    SequenceStage,\n    SequenceStatus,\n)\n\nfrom .block_manager import XavierBlockManager\nfrom .utils import hash_block_tokens\n\nlogger = logging.getLogger(__name__)\n\n\nclass XavierScheduler(Scheduler):\n    # same as vllm.core.block.prefix_caching_block.PrefixCachingBlock._none_hash\n    _none_hash: int = -1\n\n    @staticmethod\n    def _get_block_space_manager_class(version: str):\n        logger.debug(\"Init xavier block manager.\")\n        return XavierBlockManager\n\n    def __init__(\n        self,\n        scheduler_config: SchedulerConfig,\n        cache_config: CacheConfig,\n        lora_config: Optional[LoRAConfig],\n        pipeline_parallel_size: int = 1,\n        output_proc_callback: Optional[Callable] = None,\n        xavier_config: Optional[Dict] = None,\n        virtual_engine: Optional[int] = 0,\n    ) -> None:\n        BlockSpaceManager.get_block_space_manager_class = (\n            self._get_block_space_manager_class\n        )\n        super().__init__(\n            scheduler_config,\n            cache_config,\n            lora_config,\n            pipeline_parallel_size,\n            output_proc_callback,\n        )\n        xavier_config[\"virtual_engine\"] = virtual_engine  # type: ignore\n        self.block_manager.xavier_config = xavier_config\n        self._xavier_config = xavier_config\n        self._virtual_engine = virtual_engine\n        self._block_tracker_ref = None\n        self._transfer_ref = None\n        self._transferring: Deque[SequenceGroup] = deque()\n        self._transfer_status: Dict[SequenceGroup, Set[int]] = {}\n\n    async def _get_block_tracker_ref(self):\n        if self._block_tracker_ref is None:\n            block_tracker_address = self._xavier_config.get(\"block_tracker_address\")\n            block_tracker_uid = self._xavier_config.get(\"block_tracker_uid\")\n            self._block_tracker_ref = await xo.actor_ref(\n                address=block_tracker_address, uid=block_tracker_uid\n            )\n        return self._block_tracker_ref\n\n    async def _get_transfer_ref(self):\n        from .transfer import TransferActor\n\n        if self._transfer_ref is None:\n            transfer_address = self._xavier_config.get(\"rank_address\")\n            rank = self._xavier_config.get(\"rank\")\n            self._transfer_ref = await xo.actor_ref(\n                address=transfer_address, uid=f\"{TransferActor.default_uid()}-{rank}\"\n            )\n        return self._transfer_ref\n\n    async def _get_transfer_details(\n        self,\n        virtual_engine: int,\n        block_tables: Dict[int, List[int]],\n        seq_group: SequenceGroup,\n    ) -> Tuple[Set[int], Dict[int, Set[Tuple[int, int, int]]]]:\n        # If the `seq_group` has the `force_calculation` attribute set to `True`,\n        # it indicates that there were issues during the transmission process.\n        # In this case, force the computation and exclude it from the Xavier process.\n        if getattr(seq_group, \"force_calculation\", False):\n            return set(), dict()\n        \"\"\"\n        Retrieve information from other replicas to check if any blocks have already been computed,\n        for the purpose of data transfer.\n        \"\"\"\n        details: Set[Tuple[int, int]] = set()\n        for seq in seq_group.get_seqs(status=SequenceStatus.RUNNING):\n            block_ids = block_tables[seq.seq_id]\n            tmp_content_hash = None\n            for _id in block_ids:\n                block: Block = self.block_manager.get_block_by_block_id(seq.seq_id, _id)\n                if block._prev_block is None:\n                    content_hash = hash_block_tokens(\n                        True,\n                        self._none_hash,\n                        block.token_ids,\n                        block._extra_hash,\n                        self._none_hash,\n                    )\n\n                else:\n                    prev_content_hash: Optional[int] = tmp_content_hash\n                    content_hash = hash_block_tokens(\n                        False,\n                        prev_content_hash,\n                        block.token_ids,\n                        block._extra_hash,\n                        self._none_hash,\n                    )\n                tmp_content_hash = content_hash\n                detail = (content_hash, _id)\n                \"\"\"\n                1. `block.content_hash is not None` means that the block has been filled with tokens.\n                Unless it is evicted from the cache, the computation result of this block is constant.\n                2. Check the `transferred` status of the block.\n                If it is `True`, it means the block has already been transferred locally\n                and does not need to be transferred again.\n                3. Check the `executed` status of the block.\n                If it is `True`, it means the block has already been computed locally\n                and does not need to be transferred.\n                \"\"\"\n                if (\n                    (content_hash is not None)\n                    and (\n                        not self.block_manager.get_block_status_by_block_id(\n                            \"transferred\", block.block_id\n                        )\n                    )\n                    and (\n                        not self.block_manager.get_block_status_by_block_id(\n                            \"executed\", block.block_id\n                        )\n                    )\n                ):\n                    details.add(detail)\n\n        if details:\n            tracker_ref = await self._get_block_tracker_ref()\n            remote = await tracker_ref.query_blocks(virtual_engine, list(details))\n            # Not all queried blocks have corresponding results in other replicas.\n            # Therefore, it is necessary to record which local block data was actually transferred.\n            local: Set[int] = set()\n            for _, remote_details in remote.items():\n                for _, _, local_block_id in remote_details:\n                    local.add(local_block_id)\n            if local:\n                logger.debug(\n                    f\"Data in local blocks: {local} will be transmitted from the remote.\"\n                )\n            return local, remote\n        else:\n            return set(), dict()\n\n    async def _do_transfer_inner(\n        self, virtual_engine: int, remote: Dict[int, Set[Tuple[int, int, int]]]\n    ):\n        transfer_ref = await self._get_transfer_ref()\n        for from_rank, hash_and_block_id in remote.items():\n            src_to_dst: Dict[int, int] = {x[1]: x[2] for x in hash_and_block_id}\n            await transfer_ref.recv(virtual_engine, from_rank, src_to_dst)\n\n    async def _do_transfer(\n        self,\n        virtual_engine: int,\n        local: Set[int],\n        remote: Dict[int, Set[Tuple[int, int, int]]],\n        seq_group: SequenceGroup,\n    ):\n        try:\n            await self._do_transfer_inner(virtual_engine, remote)\n        except Exception as e:\n            \"\"\"\n            The exception here is most likely due to the sender triggering recovery during the transmission process.\n            In this case, fallback to performing computation during the prefill stage.\n            \"\"\"\n            logger.error(f\"Transfer failed: {e}\")\n            # Force this `seq_group` to perform computation.\n            seq_group.force_calculation = True\n            self._transfer_status.pop(seq_group, None)\n            self.waiting.appendleft(seq_group)\n            self._transferring.remove(seq_group)\n        else:\n            # After the transfer is completed, update the corresponding metadata.\n            self._transfer_status[seq_group] = local\n            for _id in local:\n                self.block_manager.set_block_status_by_block_id(\n                    \"transferred\", _id, True\n                )\n            # After the transfer, place the `seq_group` back into the `waiting` queue to\n            # wait for the next scheduling execution.\n            self.waiting.appendleft(seq_group)\n            self._transferring.remove(seq_group)\n\n    @no_type_check\n    async def schedule(\n        self,\n    ) -> Tuple[List[SequenceGroupMetadata], SchedulerOutputs, bool]:\n        virtual_engine = self._virtual_engine\n\n        # Schedule sequence groups.\n        # This function call changes the internal states of the scheduler\n        # such as self.running, self.swapped, and self.waiting.\n        scheduler_start_time = time.perf_counter()\n\n        scheduler_outputs: SchedulerOutputs = self._schedule()\n        now = time.time()\n\n        if not self.cache_config.enable_prefix_caching:\n            common_computed_block_nums = []\n\n        allow_async_output_proc: bool = self.use_async_output_proc\n\n        \"\"\"Xinference Change!!!\n        Additional data structures required by Xavier.\n        \"\"\"\n        scheduled_seq_groups: List[ScheduledSequenceGroup] = []\n        has_transferring = False\n\n        # Create input data structures.\n        seq_group_metadata_list: List[SequenceGroupMetadata] = []\n        for i, scheduled_seq_group in enumerate(scheduler_outputs.scheduled_seq_groups):\n            seq_group = scheduled_seq_group.seq_group\n            token_chunk_size = scheduled_seq_group.token_chunk_size\n            seq_group.maybe_set_first_scheduled_time(now)\n\n            seq_group_metadata = self._seq_group_metadata_cache[\n                self.cache_id\n            ].get_object()\n            seq_group_metadata.seq_data.clear()\n            seq_group_metadata.block_tables.clear()\n\n            # seq_id -> SequenceData\n            seq_data: Dict[int, SequenceData] = {}\n            # seq_id -> physical block numbers\n            block_tables: Dict[int, List[int]] = {}\n\n            if seq_group.is_encoder_decoder():\n                # Encoder associated with SequenceGroup\n                encoder_seq = seq_group.get_encoder_seq()\n                assert encoder_seq is not None\n                encoder_seq_data = encoder_seq.data\n                # Block table for cross-attention\n                # Also managed at SequenceGroup level\n                cross_block_table = self.block_manager.get_cross_block_table(seq_group)\n            else:\n                encoder_seq_data = None\n                cross_block_table = None\n\n            for seq in seq_group.get_seqs(status=SequenceStatus.RUNNING):\n                seq_id = seq.seq_id\n                seq_data[seq_id] = seq.data\n                block_tables[seq_id] = self.block_manager.get_block_table(seq)\n                self.block_manager.access_all_blocks_in_seq(seq, now)\n\n            \"\"\"Xinference Change!!!\n            After completing the scheduling, the blocks have been allocated.\n            Therefore, it is possible to check whether some blocks have already been computed on other replicas based on this information,\n            and subsequently initiate the transfer.\n            According to the internal code comments in vllm,\n            whether `token_chunk_size` is 1 can indicate whether the `seq_group` is in the decode or prefill stage.\n            It is noted that data transmission is only applied during the prefill stage.\n            In the decode stage, it only applies to the last token of the block, which can negatively impact throughput.\n            \"\"\"\n            is_prefill: bool = token_chunk_size != 1\n            if is_prefill:\n                local, remote = await self._get_transfer_details(\n                    virtual_engine, block_tables, seq_group\n                )\n                if remote:\n                    running_seqs = seq_group.get_seqs(status=SequenceStatus.RUNNING)\n                    for seq in running_seqs:\n                        seq.status = SequenceStatus.WAITING\n                        # Additional attribute `transferred` to mark that this `seq_group` involves a transfer process.\n                        # During the next scheduling, block allocation will no longer be required\n                        # since it has already been completed.\n                        seq.transferred = True\n                        seq.data._stage = SequenceStage.PREFILL\n                    self._transfer_status[seq_group] = set()\n                    # Use `create_task` to avoid blocking subsequent scheduling.\n                    asyncio.create_task(\n                        self._do_transfer(virtual_engine, local, remote, seq_group)\n                    )\n                    # The `seq_group` that is currently being transferred enters a new queue.\n                    self._transferring.append(seq_group)\n                    has_transferring = True\n                    continue\n                else:\n                    scheduled_seq_groups.append(scheduled_seq_group)\n\n            if self.cache_config.enable_prefix_caching:\n                common_computed_block_nums = (\n                    self.block_manager.get_common_computed_block_ids(\n                        seq_group.get_seqs(status=SequenceStatus.RUNNING)\n                    )\n                )\n                \"\"\"Xinference Change!!!\n                This is very important and is the core of Xavier.\n                `computed_block_nums` is the key attribute that determines which blocks do not need to be computed,\n                as decided by the `model_runner`.\n                Therefore, after the transfer is completed, this attribute needs to be updated.\n                \"\"\"\n                if seq_group in self._transfer_status:\n                    transferred_blocks = self._transfer_status[seq_group]\n                    if transferred_blocks:\n                        common_computed_block_nums.extend(transferred_blocks)\n                        common_computed_block_nums = list(\n                            sorted(common_computed_block_nums)\n                        )\n                        del self._transfer_status[seq_group]\n\n            do_sample = True\n            is_prompt = seq_group.is_prefill()\n            # We should send the metadata to workers when the first prefill\n            # is sent. Subsequent requests could be chunked prefill or decode.\n            is_first_prefill = False\n            if is_prompt:\n                seqs = seq_group.get_seqs()\n                # Prefill has only 1 sequence.\n                assert len(seqs) == 1\n                num_computed_tokens = seqs[0].data.get_num_computed_tokens()\n                is_first_prefill = num_computed_tokens == 0\n                # In the next iteration, all prompt tokens are not computed.\n                # It means the prefill is chunked, and we don't need sampling.\n                # NOTE: We use get_len instead of get_prompt_len because when\n                # a sequence is preempted, prefill includes previous generated\n                # output tokens.\n                if token_chunk_size + num_computed_tokens < seqs[0].data.get_len():\n                    do_sample = False\n\n            # It assumes the scheduled_seq_groups is ordered by\n            # prefill < decoding.\n            if is_first_prefill or not self.scheduler_config.send_delta_data:\n                seq_group_metadata = SequenceGroupMetadata(\n                    request_id=seq_group.request_id,\n                    is_prompt=is_prompt,\n                    seq_data=seq_data,\n                    sampling_params=seq_group.sampling_params,\n                    block_tables=block_tables,\n                    do_sample=do_sample,\n                    pooling_params=seq_group.pooling_params,\n                    token_chunk_size=token_chunk_size,\n                    lora_request=seq_group.lora_request,\n                    computed_block_nums=common_computed_block_nums,\n                    encoder_seq_data=encoder_seq_data,\n                    cross_block_table=cross_block_table,\n                    state=seq_group.state,\n                    token_type_ids=seq_group.token_type_ids,\n                    # `multi_modal_data` will only be present for the 1st comm\n                    # between engine and worker.\n                    # the subsequent comms can still use delta, but\n                    # `multi_modal_data` will be None.\n                    multi_modal_data=(\n                        seq_group.multi_modal_data\n                        if scheduler_outputs.num_prefill_groups > 0\n                        else None\n                    ),\n                    multi_modal_placeholders=(\n                        seq_group.multi_modal_placeholders\n                        if scheduler_outputs.num_prefill_groups > 0\n                        else None\n                    ),\n                    # this arg removed by version >= 0.8.0\n                    # mm_processor_kwargs=seq_group.mm_processor_kwargs,\n                    prompt_adapter_request=seq_group.prompt_adapter_request,\n                )\n            else:\n                # When SPMD mode is enabled, we only send delta data except for\n                # the first request to reduce serialization cost.\n                seq_data_delta = {}\n                for id, data in seq_data.items():\n                    seq_data_delta[id] = data.get_delta_and_reset()\n                seq_group_metadata = SequenceGroupMetadataDelta(\n                    seq_data_delta,\n                    seq_group.request_id,\n                    block_tables,\n                    is_prompt,\n                    do_sample=do_sample,\n                    token_chunk_size=token_chunk_size,\n                    computed_block_nums=common_computed_block_nums,\n                )\n            seq_group_metadata_list.append(seq_group_metadata)\n\n            if allow_async_output_proc:\n                allow_async_output_proc = self._allow_async_output_proc(seq_group)\n\n        \"\"\"Xinference Change!!!\n        If the `seq_group` in this scheduling triggers a transfer,\n        it needs to be removed from the running queue (as it is already in the transferring queue).\n        It should remain in the transferring queue until the transfer is complete,\n        and then it can be placed back into the appropriate queue for scheduling.\n        \"\"\"\n        if has_transferring:\n            scheduler_outputs.scheduled_seq_groups = scheduled_seq_groups\n            for seq_group in self.running.copy():\n                if seq_group in self._transfer_status:\n                    self.running.remove(seq_group)\n\n        # Now that the batch has been created, we can assume all blocks in the\n        # batch will have been computed before the next scheduling invocation.\n        # This is because the engine assumes that a failure in model execution\n        # will crash the vLLM instance / will not retry.\n        for scheduled_seq_group in scheduler_outputs.scheduled_seq_groups:\n            self.block_manager.mark_blocks_as_computed(\n                scheduled_seq_group.seq_group, scheduled_seq_group.token_chunk_size\n            )\n\n        self._seq_group_metadata_cache[self.next_cache_id].reset()\n\n        scheduler_time = time.perf_counter() - scheduler_start_time\n        # Add this to scheduler time to all the sequences that are currently\n        # running. This will help estimate if the scheduler is a significant\n        # component in the e2e latency.\n        for seq_group in self.running:\n            if seq_group is not None and seq_group.metrics is not None:\n                if seq_group.metrics.scheduler_time is not None:\n                    seq_group.metrics.scheduler_time += scheduler_time\n                else:\n                    seq_group.metrics.scheduler_time = scheduler_time\n\n        # Move to next cache (if exists)\n        self.cache_id = self.next_cache_id\n\n        # Return results\n        return (seq_group_metadata_list, scheduler_outputs, allow_async_output_proc)\n\n    def has_unfinished_seqs(self) -> bool:\n        \"\"\"\n        This interface is used to determine whether the scheduling process should stop,\n        so it needs to include information about the transferring queue.\n        \"\"\"\n        res = super().has_unfinished_seqs()\n        return res or len(self._transferring) != 0\n\n    def get_num_unfinished_seq_groups(self) -> int:\n        \"\"\"\n        When retrieving information from this interface,\n        the information from the transferring queue needs to be taken into account.\n        \"\"\"\n        res = super().get_num_unfinished_seq_groups()\n        return res + len(self._transferring)\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/test/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/test/test_xavier.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport pytest\nimport xoscar as xo\n\nfrom ..block_tracker import VLLMBlockTracker\n\n\nclass ExtendedBlockTracker(VLLMBlockTracker):\n    def get_hash_to_rank_and_block_id(self):\n        return self._hash_to_rank_and_block_id\n\n    def get_rank_to_hash_and_block_id(self):\n        return self._rank_to_hash_and_block_id\n\n\n@pytest.fixture\nasync def actor_pool_context():\n    pool = await xo.create_actor_pool(\"127.0.0.1\", n_process=2)\n    async with pool:\n        yield pool\n\n\n@pytest.mark.asyncio\nasync def test_block_tracker(actor_pool_context):\n    actor_pool = actor_pool_context\n    addr = actor_pool.external_address\n    tracker_ref: xo.ActorRefType[ExtendedBlockTracker] = await xo.create_actor(  # type: ignore\n        ExtendedBlockTracker,\n        address=addr,\n        uid=VLLMBlockTracker.default_uid(),\n    )\n\n    virtual_engine = 0\n    rank = 0\n    block_infos = [(123, 0), (456, 1), (789, 2)]\n\n    # register blocks\n    await tracker_ref.register_blocks(virtual_engine, block_infos, rank)\n\n    # query blocks\n    res = await tracker_ref.query_blocks(virtual_engine, [(123, 4), (789, 5)])\n    assert len(res) == 1\n    assert rank in res\n    assert len(res[rank]) == 2\n    assert {x[0] for x in res[rank]} == {123, 789}\n    assert {x[1] for x in res[rank]} == {0, 2}\n    assert {x[2] for x in res[rank]} == {4, 5}\n\n    # query with extra info\n    res = await tracker_ref.query_blocks(virtual_engine, [(123, 4), (789, 5), (110, 6)])\n    assert len(res) == 1\n    assert rank in res\n    assert len(res[rank]) == 2\n    assert {x[0] for x in res[rank]} == {123, 789}\n    assert {x[1] for x in res[rank]} == {0, 2}\n    assert {x[2] for x in res[rank]} == {4, 5}\n\n    # unregister block\n    await tracker_ref.unregister_block(virtual_engine, rank, 1)\n    res = await tracker_ref.query_blocks(virtual_engine, [(123, 4), (456, 7)])\n    assert len(res) == 1\n    assert rank in res\n    assert len(res[rank]) == 1\n    assert {x[0] for x in res[rank]} == {123}\n    assert {x[1] for x in res[rank]} == {\n        0,\n    }\n    assert {x[2] for x in res[rank]} == {\n        4,\n    }\n    # nothing happens\n    await tracker_ref.unregister_block(virtual_engine, rank, 3)\n    res = await tracker_ref.query_blocks(virtual_engine, [(123, 4), (456, 7)])\n    assert len(res) == 1\n    assert rank in res\n    assert len(res[rank]) == 1\n    assert {x[0] for x in res[rank]} == {123}\n    assert {x[1] for x in res[rank]} == {\n        0,\n    }\n    assert {x[2] for x in res[rank]} == {\n        4,\n    }\n    # query returns empty\n    res = await tracker_ref.query_blocks(virtual_engine, [(456, 8)])\n    assert res == {}\n\n    # check internal data\n    hash_to_rank_and_block_id = await tracker_ref.get_hash_to_rank_and_block_id()\n    assert virtual_engine in hash_to_rank_and_block_id\n    assert hash_to_rank_and_block_id[virtual_engine] == {\n        123: {\n            (rank, 0),\n        },\n        456: set(),\n        789: {(rank, 2)},\n    }\n\n    rank_to_hash_and_block_id = await tracker_ref.get_rank_to_hash_and_block_id()\n    assert virtual_engine in rank_to_hash_and_block_id\n    assert rank_to_hash_and_block_id[virtual_engine] == {rank: {(123, 0), (789, 2)}}\n\n    # register blocks\n    new_rank = 1\n    block_infos = [(111, 7), (222, 8), (333, 9), (123, 10)]\n    await tracker_ref.register_blocks(virtual_engine, block_infos, new_rank)\n\n    # test unregister rank\n    await tracker_ref.unregister_rank(0)\n    res = await tracker_ref.query_blocks(virtual_engine, [(789, 5)])\n    assert len(res) == 0\n    res = await tracker_ref.query_blocks(virtual_engine, [(123, 6)])\n    assert len(res) == 1\n    assert new_rank in res\n\n    # check internal data\n    rank_to_hash_and_block_id = await tracker_ref.get_rank_to_hash_and_block_id()\n    assert rank in rank_to_hash_and_block_id[virtual_engine]\n    assert new_rank in rank_to_hash_and_block_id[virtual_engine]\n\n    # test register rank\n    await tracker_ref.register_rank(0)\n    rank_to_hash_and_block_id = await tracker_ref.get_rank_to_hash_and_block_id()\n    assert rank not in rank_to_hash_and_block_id[virtual_engine]\n    assert new_rank in rank_to_hash_and_block_id[virtual_engine]\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/transfer.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport asyncio\nimport logging\nfrom functools import lru_cache\nfrom queue import Queue\nfrom typing import Dict, List, Optional, no_type_check\n\nimport torch\nimport xoscar as xo\nfrom vllm.core.scheduler import Scheduler\nfrom vllm.utils import TORCH_DTYPE_TO_NUMPY_DTYPE, Device\nfrom vllm.worker.cache_engine import CacheEngine\n\nfrom .collective import CollectiveRank\n\nlogger = logging.getLogger(__name__)\n\n\nclass BufferTransferMixin:\n    def __init__(self):\n        self.num_buffer: int = 0  # type: ignore\n        self.buffers: List[torch.Tensor] = []  # type: ignore\n        self.buffer_queue: Optional[Queue] = None  # type: ignore\n        self.transfer_block_num = 0\n        self.num_attn_layers = 0\n\n    def init_buffer(\n        self, num_buffer: int, buffer_shape, buffer_dtype, buffer_device, pin_memory\n    ):\n        # (transfer_block_num, num_attn_layers, 2, *kv_cache_shape[2:])\n\n        if buffer_dtype is torch.bfloat16:\n            buffer_dtype = torch.float16\n\n        self.num_buffer = num_buffer\n        self.transfer_block_num = buffer_shape[0]\n        self.num_attn_layers = buffer_shape[1]\n\n        self.buffers = [\n            torch.zeros(\n                size=buffer_shape,\n                dtype=buffer_dtype,\n                device=buffer_device,\n                pin_memory=pin_memory,\n            )\n            for _ in range(self.num_buffer)\n        ]\n\n        self.buffer_queue = Queue()\n        for i in range(self.num_buffer):\n            self.buffer_queue.put_nowait(i)\n        logger.debug(\n            f\"Init buffer done. \"\n            f\"transfer_block_num: {self.transfer_block_num}, \"\n            f\"num_buffer: {self.num_buffer}, \"\n            f\"buffer_dtype: {buffer_dtype}, \"\n            f\"buffer_shape: {buffer_shape}\"\n        )\n\n    @no_type_check\n    def get_buffer_index(self) -> int:\n        return self.buffer_queue.get()\n\n    @no_type_check\n    def free_buffer_index(self, index: int) -> None:\n        self.buffer_queue.put_nowait(index)\n\n    def get_swap_buffer(self, index: int, num_blocks: int) -> torch.Tensor:\n        buf = self.buffers[index]\n        buffer = buf[:num_blocks].view(\n            self.num_attn_layers, 2, num_blocks, *buf.shape[3:]\n        )\n        return buffer\n\n    @lru_cache(maxsize=None)\n    def get_gloo_dtype(self, input_dtype: torch.dtype):\n        from xoscar.collective.common import TypeMappingGloo\n\n        return TypeMappingGloo[TORCH_DTYPE_TO_NUMPY_DTYPE[input_dtype]]\n\n\nclass TransferActor(xo.StatelessActor, BufferTransferMixin, CollectiveRank):\n    @classmethod\n    def default_uid(cls):\n        return f\"vllm-transfer-actor\"\n\n    def __init__(\n        self,\n        rank: int,\n        world_size: int,\n        rank_address: str,\n        store_address: str,\n        store_port: int,\n        world_addresses: List[str],\n    ):\n        super().__init__()\n        CollectiveRank.__init__(\n            self,\n            rank,\n            world_size,\n            rank_address,\n            store_address,\n            store_port,\n            world_addresses,\n        )\n        self._cache_engine: Optional[List[CacheEngine]] = None\n        self._scheduler: Optional[List[Scheduler]] = None\n        self._swap_stream = torch.cuda.Stream()\n\n    async def __post_create__(self):\n        self.init_rank()\n\n    def setup(\n        self,\n        cache_engine: List[CacheEngine],\n        scheduler: List[Scheduler],\n        num_buffer: int,\n        buffer_shape,\n        buffer_dtype,\n        buffer_device,\n        pin_memory: bool,\n    ):\n        self._cache_engine = cache_engine\n        self._scheduler = scheduler\n        self.init_buffer(\n            num_buffer, buffer_shape, buffer_dtype, buffer_device, pin_memory\n        )\n\n    async def __pre_destroy__(self):\n        self._context.closeConnections()\n\n    def _get_cache_engine(self, virtual_engine: int) -> CacheEngine:\n        return self._cache_engine[virtual_engine]  # type: ignore\n\n    @staticmethod\n    def _get_swap_block_ids(src_to_dst: Dict[int, int], is_sender: bool) -> List[int]:\n        return list(sorted([r if is_sender else l for r, l in src_to_dst.items()]))\n\n    def _swap_out_to_buffer(\n        self, cache_engine: CacheEngine, cpu_buf_index: int, block_ids: List[int]\n    ) -> torch.Tensor:\n        num_blocks = len(block_ids)\n        src_to_dst = torch.tensor(\n            [(block_num, idx) for idx, block_num in enumerate(block_ids)],\n            device=\"cpu\",\n            dtype=torch.int64,\n        ).view(-1, 2)\n        cpu_buf = self.get_swap_buffer(cpu_buf_index, num_blocks)\n        with torch.cuda.stream(self._swap_stream):\n            for i in range(self.num_attn_layers):\n                cache_engine.attn_backend.swap_blocks(\n                    cache_engine.gpu_cache[i], cpu_buf[i], src_to_dst\n                )\n        torch.cuda.Stream.synchronize(self._swap_stream)\n        return cpu_buf\n\n    def _swap_in_from_buffer(\n        self, cache_engine: CacheEngine, cpu_buf: torch.Tensor, block_ids: List[int]\n    ) -> None:\n        src_to_dst = torch.tensor(\n            [(idx, block_num) for idx, block_num in enumerate(block_ids)],\n            device=\"cpu\",\n            dtype=torch.int64,\n        ).view(-1, 2)\n        with torch.cuda.stream(self._swap_stream):\n            for i in range(self.num_attn_layers):\n                cache_engine.attn_backend.swap_blocks(\n                    cpu_buf[i], cache_engine.gpu_cache[i], src_to_dst\n                )\n        torch.cuda.Stream.synchronize(self._swap_stream)\n\n    def _incr_count_for_block_id(self, virtual_engine: int, block_ids: List[int]):\n        \"\"\"\n        The reference count of the `block_id` involved in the transfer is incremented by 1\n        to ensure it is not reclaimed.\n        \"\"\"\n        scheduler = self._scheduler[virtual_engine]  # type: ignore\n        gpu_allocator = scheduler.block_manager.block_allocator._allocators[Device.GPU]\n\n        for _id in block_ids:\n            gpu_allocator._refcounter.incr(_id)\n\n    def _decr_count_for_block_id(self, virtual_engine: int, block_ids: List[int]):\n        \"\"\"\n        After the transfer, the reference count is decremented by 1.\n        \"\"\"\n        scheduler = self._scheduler[virtual_engine]  # type: ignore\n        gpu_allocator = scheduler.block_manager.block_allocator._allocators[Device.GPU]\n\n        for _id in block_ids:\n            gpu_allocator._refcounter.decr(_id)\n\n    async def do_send(\n        self, virtual_engine: int, to_rank: int, src_to_dst: Dict[int, int]\n    ):\n        \"\"\"\n        Sending logic: GPU -> Buffer -> Gloo send.\n        GPU -> Buffer is directly handled using the internal `swap_out` interface of vllm.\n        \"\"\"\n        from xoscar.collective import xoscar_pygloo as xp\n\n        cache_engine = self._get_cache_engine(virtual_engine)\n\n        block_ids = self._get_swap_block_ids(src_to_dst, is_sender=True)\n        self._incr_count_for_block_id(virtual_engine, block_ids)\n        cpu_buf_index = self.get_buffer_index()\n        total_blocks: int = len(block_ids)\n\n        try:\n            for start_idx in range(0, total_blocks, self.transfer_block_num):\n                offset = min(self.transfer_block_num, total_blocks - start_idx)\n                send_block_ids = block_ids[start_idx : start_idx + offset]\n                sendbuf = self._swap_out_to_buffer(\n                    cache_engine, cpu_buf_index, send_block_ids\n                )\n                assert sendbuf.is_contiguous()\n                sendptr = sendbuf.numpy().ctypes.data\n                data_size = sendbuf.numel()\n                datatype = self.get_gloo_dtype(sendbuf.dtype)\n                peer = to_rank\n                xp.send(self._context, sendptr, data_size, datatype, peer)\n        finally:\n            self._decr_count_for_block_id(virtual_engine, block_ids)\n            self.free_buffer_index(cpu_buf_index)\n\n    async def do_recv(\n        self, virtual_engine: int, from_rank: int, src_to_dst: Dict[int, int]\n    ):\n        \"\"\"\n        Receiving logic: Gloo recv -> Buffer -> GPU.\n        Buffer -> GPU is directly handled using the internal `swap_in` interface of vllm.\n        \"\"\"\n        from xoscar.collective import xoscar_pygloo as xp\n\n        cache_engine = self._get_cache_engine(virtual_engine)\n\n        block_ids = self._get_swap_block_ids(src_to_dst, is_sender=False)\n        self._incr_count_for_block_id(virtual_engine, block_ids)\n        total_blocks = len(block_ids)\n        cpu_buf_index = self.get_buffer_index()\n\n        try:\n            for start_idx in range(0, total_blocks, self.transfer_block_num):\n                offset = min(self.transfer_block_num, total_blocks - start_idx)\n                recv_block_ids = block_ids[start_idx : start_idx + offset]\n                recvbuf = self.get_swap_buffer(cpu_buf_index, len(recv_block_ids))\n                assert recvbuf.is_contiguous()\n                recvptr = recvbuf.numpy().ctypes.data\n                data_size = recvbuf.numel()\n                datatype = self.get_gloo_dtype(recvbuf.dtype)\n                peer = from_rank\n                xp.recv(self._context, recvptr, data_size, datatype, peer)\n\n                self._swap_in_from_buffer(cache_engine, recvbuf, recv_block_ids)\n        finally:\n            self._decr_count_for_block_id(virtual_engine, block_ids)\n            self.free_buffer_index(cpu_buf_index)\n\n    async def recv(\n        self, virtual_engine: int, from_rank: int, src_to_dst: Dict[int, int]\n    ):\n        \"\"\"\n        This is the external entry point for the call.\n        The transfer logic is as follows:\n        the receiver requests the sender to send the data directly to itself in a point-to-point manner.\n        \"\"\"\n        from_address = self._world_addresses[from_rank]\n        sender_ref = await xo.actor_ref(\n            address=from_address, uid=f\"{TransferActor.default_uid()}-{from_rank}\"\n        )\n        await asyncio.gather(\n            sender_ref.do_send(virtual_engine, self._rank, src_to_dst),\n            self.do_recv(virtual_engine, from_rank, src_to_dst),\n        )\n\n\nclass Rank0TransferActor(xo.StatelessActor, CollectiveRank):\n    \"\"\"\n    The Rank 0 transfer actor is only used for constructing the collective communication world,\n    so it only needs to inherit the `CollectiveWorld` class.\n    \"\"\"\n\n    @classmethod\n    def default_uid(cls):\n        return f\"vllm-transfer-actor\"\n\n    def __init__(\n        self,\n        rank: int,\n        world_size: int,\n        rank_address: str,\n        store_address: str,\n        store_port: int,\n        world_addresses: List[str],\n    ):\n        CollectiveRank.__init__(\n            self,\n            rank,\n            world_size,\n            rank_address,\n            store_address,\n            store_port,\n            world_addresses,\n        )\n\n    async def __post_create__(self):\n        self.init_rank()\n"
  },
  {
    "path": "xinference/model/llm/vllm/xavier/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport struct\nfrom typing import List, Optional\n\nimport xxhash\n\n\ndef hash_block_tokens(\n    is_first_block: bool,\n    prev_block_hash: Optional[int],\n    cur_block_token_ids: List[int],\n    extra_hash: Optional[int] = None,\n    none_hash: int = -1,\n) -> int:\n    \"\"\"\n    Computes a stable hash value corresponding to the contents of a block\n    and the contents of the preceding block(s), using xxhash instead of\n    Python hash() for cross-process stability.\n    \"\"\"\n\n    if prev_block_hash is None:\n        prev_block_hash = none_hash\n    if extra_hash is None:\n        extra_hash = none_hash\n\n    buf = bytearray()\n\n    # 0. hash version\n    buf += b\"v1\"\n\n    # 1. is_first_block: bool -> 1 byte\n    buf += struct.pack(\"<?\", is_first_block)\n\n    # 2. prev_block_hash: int64\n    buf += struct.pack(\"<Q\", int(prev_block_hash) & 0xFFFFFFFFFFFFFFFF)\n\n    # 3. token count: uint32\n    buf += struct.pack(\"<I\", len(cur_block_token_ids))\n\n    # 4. token ids: int32[]\n    for tid in cur_block_token_ids:\n        buf += struct.pack(\"<i\", int(tid))\n\n    # 5. extra_hash: int64\n    buf += struct.pack(\"<Q\", int(extra_hash) & 0xFFFFFFFFFFFFFFFF)\n\n    # xxhash64, fixed seed for determinism\n    return xxhash.xxh64_intdigest(bytes(buf), seed=0)\n"
  },
  {
    "path": "xinference/model/rerank/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport codecs\nimport json\nimport os\nimport warnings\nfrom typing import Any, Dict, List\n\nfrom ...constants import XINFERENCE_MODEL_DIR\nfrom ..utils import flatten_quantizations\nfrom .core import (\n    RERANK_MODEL_DESCRIPTIONS,\n    RerankModelFamilyV2,\n    generate_rerank_description,\n    get_rerank_model_descriptions,\n)\nfrom .custom import (\n    CustomRerankModelFamilyV2,\n    get_user_defined_reranks,\n    register_rerank,\n    unregister_rerank,\n)\nfrom .rerank_family import (\n    BUILTIN_RERANK_MODELS,\n    LLAMA_CPP_CLASSES,\n    RERANK_ENGINES,\n    SENTENCE_TRANSFORMER_CLASSES,\n    SUPPORTED_ENGINES,\n    VLLM_CLASSES,\n)\n\n\ndef register_builtin_model():\n    \"\"\"Register built-in rerank models.\"\"\"\n    _install()\n\n\ndef register_custom_model():\n    from ..custom import migrate_from_v1_to_v2\n\n    # migrate from v1 to v2 first\n    migrate_from_v1_to_v2(\"rerank\", CustomRerankModelFamilyV2)\n\n    # if persist=True, load them when init\n    user_defined_rerank_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"rerank\")\n    if os.path.isdir(user_defined_rerank_dir):\n        for f in os.listdir(user_defined_rerank_dir):\n            try:\n                with codecs.open(\n                    os.path.join(user_defined_rerank_dir, f), encoding=\"utf-8\"\n                ) as fd:\n                    user_defined_rerank_spec = CustomRerankModelFamilyV2.parse_obj(\n                        json.load(fd)\n                    )\n                    register_rerank(user_defined_rerank_spec, persist=False)\n            except Exception as e:\n                warnings.warn(f\"{user_defined_rerank_dir}/{f} has error, {e}\")\n\n\ndef check_format_with_engine(model_format, engine):\n    if model_format in [\"ggufv2\"] and engine not in [\"llama.cpp\"]:\n        return False\n    if model_format not in [\"ggufv2\"] and engine == \"llama.cpp\":\n        return False\n    return True\n\n\ndef generate_engine_config_by_model_name(model_family: \"RerankModelFamilyV2\"):\n    model_name = model_family.model_name\n    engines: Dict[str, List[Dict[str, Any]]] = RERANK_ENGINES.get(\n        model_name, {}\n    )  # structure for engine query\n    for spec in [x for x in model_family.model_specs if x.model_hub == \"huggingface\"]:\n        model_format = spec.model_format\n        quantization = spec.quantization\n        for engine in SUPPORTED_ENGINES:\n            if not check_format_with_engine(model_format, engine):\n                continue\n            CLASSES = SUPPORTED_ENGINES[engine]\n            for cls in CLASSES:\n                # Every engine needs to implement match method\n                if cls.match(model_family, spec, quantization):\n                    # we only match the first class for an engine\n                    if engine not in engines:\n                        engines[engine] = [\n                            {\n                                \"model_name\": model_name,\n                                \"model_format\": model_format,\n                                \"quantization\": quantization,\n                                \"rerank_class\": cls,\n                            }\n                        ]\n                    else:\n                        engines[engine].append(\n                            {\n                                \"model_name\": model_name,\n                                \"model_format\": model_format,\n                                \"quantization\": quantization,\n                                \"rerank_class\": cls,\n                            }\n                        )\n                    break\n    RERANK_ENGINES[model_name] = engines\n\n\ndef has_downloaded_models():\n    \"\"\"Check if downloaded JSON configurations exist.\"\"\"\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"rerank\")\n    json_file_path = os.path.join(builtin_dir, \"rerank_models.json\")\n    return os.path.exists(json_file_path)\n\n\ndef load_downloaded_models():\n    \"\"\"Load downloaded JSON configurations from the builtin directory.\"\"\"\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"rerank\")\n    json_file_path = os.path.join(builtin_dir, \"rerank_models.json\")\n\n    try:\n        load_model_family_from_json(json_file_path, BUILTIN_RERANK_MODELS)\n    except Exception as e:\n        warnings.warn(\n            f\"Failed to load downloaded rerank models from {json_file_path}: {e}\"\n        )\n        # Fall back to built-in models if download fails\n        load_model_family_from_json(\"model_spec.json\", BUILTIN_RERANK_MODELS)\n\n\ndef load_model_family_from_json(json_filename, target_families):\n    # Handle both relative (module directory) and absolute paths\n    if os.path.isabs(json_filename):\n        json_path = json_filename\n    else:\n        json_path = os.path.join(os.path.dirname(__file__), json_filename)\n\n    for json_obj in json.load(codecs.open(json_path, \"r\", encoding=\"utf-8\")):\n        flattened = []\n        for spec in json_obj[\"model_specs\"]:\n            flattened.extend(flatten_quantizations(spec))\n        json_obj[\"model_specs\"] = flattened\n        if json_obj[\"model_name\"] not in target_families:\n            target_families[json_obj[\"model_name\"]] = [RerankModelFamilyV2(**json_obj)]\n        else:\n            target_families[json_obj[\"model_name\"]].append(\n                RerankModelFamilyV2(**json_obj)\n            )\n\n    del json_path\n\n\ndef _install():\n    # Install models with intelligent merging based on timestamps\n    from ..utils import install_models_with_merge\n\n    install_models_with_merge(\n        BUILTIN_RERANK_MODELS,\n        \"model_spec.json\",\n        \"rerank\",\n        \"rerank_models.json\",\n        has_downloaded_models,\n        load_model_family_from_json,\n    )\n\n    for model_name, model_spec_list in BUILTIN_RERANK_MODELS.items():\n        # model_spec_list is a list of RerankModelFamilyV2 objects\n        model_spec = model_spec_list[0]  # Take the first model family\n        if model_spec.model_name not in RERANK_MODEL_DESCRIPTIONS:\n            RERANK_MODEL_DESCRIPTIONS.update(generate_rerank_description(model_spec))\n\n    from .llama_cpp.core import XllamaCppRerankModel\n    from .sentence_transformers.core import SentenceTransformerRerankModel\n    from .vllm.core import VLLMRerankModel\n\n    SENTENCE_TRANSFORMER_CLASSES.extend([SentenceTransformerRerankModel])\n    VLLM_CLASSES.extend([VLLMRerankModel])\n    LLAMA_CPP_CLASSES.extend([XllamaCppRerankModel])\n\n    SUPPORTED_ENGINES[\"sentence_transformers\"] = SENTENCE_TRANSFORMER_CLASSES\n    SUPPORTED_ENGINES[\"vllm\"] = VLLM_CLASSES\n    SUPPORTED_ENGINES[\"llama.cpp\"] = LLAMA_CPP_CLASSES\n\n    for model_spec_list in BUILTIN_RERANK_MODELS.values():\n        for model_spec in model_spec_list:\n            generate_engine_config_by_model_name(model_spec)\n\n    register_custom_model()\n\n    # register model description\n    for ud_rerank in get_user_defined_reranks():\n        RERANK_MODEL_DESCRIPTIONS.update(generate_rerank_description(ud_rerank))\n"
  },
  {
    "path": "xinference/model/rerank/cache_manager.py",
    "content": "import os\nfrom typing import TYPE_CHECKING\n\nfrom ..cache_manager import CacheManager\n\nif TYPE_CHECKING:\n    from .core import RerankModelFamilyV2\n\n\nclass RerankCacheManager(CacheManager):\n    def __init__(self, model_family: \"RerankModelFamilyV2\"):\n        from ..llm.cache_manager import LLMCacheManager\n\n        super().__init__(model_family)\n        # Composition design mode for avoiding duplicate code\n        self.cache_helper = LLMCacheManager(model_family)\n\n        spec = self._model_family.model_specs[0]\n        model_dir_name = (\n            f\"{self._model_family.model_name}-{spec.model_format}-{spec.quantization}\"\n        )\n        self._cache_dir = os.path.join(self._v2_cache_dir_prefix, model_dir_name)\n        self.cache_helper._cache_dir = self._cache_dir\n\n    def cache(self) -> str:\n        spec = self._model_family.model_specs[0]\n        if spec.model_uri is not None:\n            return self.cache_helper.cache_uri()\n        else:\n            if spec.model_hub == \"huggingface\":\n                return self.cache_helper.cache_from_huggingface()\n            elif spec.model_hub == \"modelscope\":\n                return self.cache_helper.cache_from_modelscope()\n            else:\n                raise ValueError(f\"Unknown model hub: {spec.model_hub}\")\n"
  },
  {
    "path": "xinference/model/rerank/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n\nimport logging\nimport os\nfrom abc import abstractmethod\nfrom collections import defaultdict\nfrom typing import Annotated, Dict, List, Literal, Optional, Tuple, Union\n\nfrom ..._compat import BaseModel, Field\nfrom ...types import Rerank\nfrom ..core import VirtualEnvSettings\nfrom ..utils import ModelInstanceInfoMixin\nfrom .rerank_family import (\n    check_engine_by_model_name_and_engine,\n    check_engine_by_model_name_and_engine_with_virtual_env,\n    match_rerank,\n)\n\nlogger = logging.getLogger(__name__)\n\n# Used for check whether the model is cached.\n# Init when registering all the builtin models.\nRERANK_MODEL_DESCRIPTIONS: Dict[str, List[Dict]] = defaultdict(list)\nRERANK_EMPTY_CACHE_COUNT = int(os.getenv(\"XINFERENCE_RERANK_EMPTY_CACHE_COUNT\", \"10\"))\nassert RERANK_EMPTY_CACHE_COUNT > 0\n\n\ndef get_rerank_model_descriptions():\n    import copy\n\n    return copy.deepcopy(RERANK_MODEL_DESCRIPTIONS)\n\n\nclass TransformersRerankSpecV1(BaseModel):\n    model_format: Literal[\"pytorch\"]\n    model_hub: str = \"huggingface\"\n    model_id: Optional[str] = None\n    model_revision: Optional[str] = None\n    model_uri: Optional[str] = None\n    quantization: str = \"none\"\n\n\nclass LlamaCppRerankSpecV1(BaseModel):\n    model_format: Literal[\"ggufv2\"]\n    model_hub: str = \"huggingface\"\n    model_id: Optional[str]\n    model_uri: Optional[str]\n    model_revision: Optional[str]\n    quantization: str\n    model_file_name_template: str\n    model_file_name_split_template: Optional[str]\n    quantization_parts: Optional[Dict[str, List[str]]]\n\n\nRerankSpecV1 = Annotated[\n    Union[TransformersRerankSpecV1, LlamaCppRerankSpecV1],\n    Field(discriminator=\"model_format\"),\n]\n\n\nclass RerankModelFamilyV2(BaseModel, ModelInstanceInfoMixin):\n    version: Literal[2]\n    model_name: str\n    model_specs: List[RerankSpecV1]\n    language: List[str]\n    type: Optional[str] = \"unknown\"\n    max_tokens: Optional[int]\n    cache_config: Optional[dict] = None\n    virtualenv: Optional[VirtualEnvSettings]\n\n    class Config:\n        extra = \"allow\"\n\n    def to_description(self):\n        spec = self.model_specs[0]\n        return {\n            \"model_type\": \"rerank\",\n            \"address\": getattr(self, \"address\", None),\n            \"accelerators\": getattr(self, \"accelerators\", None),\n            \"type\": self.type,\n            \"model_name\": self.model_name,\n            \"language\": self.language,\n            \"model_revision\": spec.model_revision,\n        }\n\n    def to_version_info(self):\n        from .cache_manager import RerankCacheManager\n\n        cache_manager = RerankCacheManager(self)\n        return {\n            \"model_version\": self.model_name,\n            \"model_file_location\": cache_manager.get_cache_dir(),\n            \"cache_status\": cache_manager.get_cache_status(),\n            \"language\": self.language,\n        }\n\n\ndef generate_rerank_description(\n    model_spec: RerankModelFamilyV2,\n) -> Dict[str, List[Dict]]:\n    res = defaultdict(list)\n    res[model_spec.model_name].append(model_spec.to_version_info())\n    return res\n\n\nclass RerankModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_family: RerankModelFamilyV2,\n        quantization: Optional[str],\n        *,\n        device: Optional[str] = None,\n        use_fp16: bool = False,\n        **kwargs,\n    ):\n        self.model_family = model_family\n        self._model_spec = model_family.model_specs[0]\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._quantization = quantization\n        self._device = device\n        self._use_fp16 = use_fp16\n        self._model = None\n        self._counter = 0\n        self._kwargs = kwargs\n        if model_family.type == \"unknown\":\n            model_family.type = self._auto_detect_type(model_path)\n\n    @classmethod\n    @abstractmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        pass\n\n    @classmethod\n    @abstractmethod\n    def match_json(\n        cls,\n        model_family: RerankModelFamilyV2,\n        model_spec: RerankSpecV1,\n        quantization: str,\n    ) -> Union[bool, Tuple[bool, str]]:\n        pass\n\n    @classmethod\n    def match(\n        cls,\n        model_family: RerankModelFamilyV2,\n        model_spec: RerankSpecV1,\n        quantization: str,\n    ):\n        \"\"\"\n        Return if the model_spec can be matched.\n        \"\"\"\n        lib_result = cls.check_lib()\n        if lib_result != True:\n            return False\n        match_result = cls.match_json(model_family, model_spec, quantization)\n        return match_result == True\n\n    @staticmethod\n    def _get_tokenizer(model_path):\n        from transformers import AutoTokenizer\n\n        tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)\n        return tokenizer\n\n    @staticmethod\n    def _auto_detect_type(model_path):\n        \"\"\"This method may not be stable due to the fact that the tokenizer name may be changed.\n        Therefore, we only use this method for unknown model types.\"\"\"\n\n        type_mapper = {\n            \"LlamaTokenizerFast\": \"LLM-based layerwise\",\n            \"GemmaTokenizerFast\": \"LLM-based\",\n            \"XLMRobertaTokenizerFast\": \"normal\",\n        }\n\n        tokenizer = RerankModel._get_tokenizer(model_path)\n        rerank_type = type_mapper.get(type(tokenizer).__name__)\n        if rerank_type is None:\n            logger.warning(\n                f\"Can't determine the rerank type based on the tokenizer {tokenizer}, use normal type by default.\"\n            )\n            return \"normal\"\n        return rerank_type\n\n    @abstractmethod\n    def load(self): ...\n\n    @abstractmethod\n    def rerank(\n        self,\n        documents: List[str],\n        query: str,\n        top_n: Optional[int],\n        max_chunks_per_doc: Optional[int],\n        return_documents: Optional[bool],\n        return_len: Optional[bool],\n        **kwargs,\n    ) -> Rerank: ...\n\n\ndef create_rerank_model_instance(\n    model_uid: str,\n    model_name: str,\n    model_engine: Optional[str],\n    model_format: Optional[str] = None,\n    quantization: Optional[str] = None,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n    model_path: Optional[str] = None,\n    **kwargs,\n) -> RerankModel:\n    from .cache_manager import RerankCacheManager\n\n    enable_virtual_env = kwargs.pop(\"enable_virtual_env\", None)\n    model_family = match_rerank(model_name, model_format, quantization, download_hub)\n    if model_path is None:\n        cache_manager = RerankCacheManager(model_family)\n        model_path = cache_manager.cache()\n\n    if model_engine is None:\n        # unlike LLM and for compatibility,\n        # we use sentence_transformers as the default engine for all models\n        model_engine = \"sentence_transformers\"\n\n    if enable_virtual_env is None:\n        from ...constants import XINFERENCE_ENABLE_VIRTUAL_ENV\n\n        enable_virtual_env = XINFERENCE_ENABLE_VIRTUAL_ENV\n\n    if enable_virtual_env:\n        rerank_cls = check_engine_by_model_name_and_engine_with_virtual_env(\n            model_engine,\n            model_name,\n            model_format,\n            quantization,\n            model_family=model_family,\n        )\n    else:\n        rerank_cls = check_engine_by_model_name_and_engine(\n            model_engine,\n            model_name,\n            model_format,\n            quantization,\n        )\n    model = rerank_cls(\n        model_uid,\n        model_path,\n        model_family,\n        quantization,\n        **kwargs,\n    )\n    return model\n"
  },
  {
    "path": "xinference/model/rerank/custom.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom typing import List, Literal\n\nfrom ..custom import ModelRegistry\nfrom .core import RerankModelFamilyV2\n\nlogger = logging.getLogger(__name__)\n\n\nclass CustomRerankModelFamilyV2(RerankModelFamilyV2):\n    version: Literal[2] = 2\n\n\nUD_RERANKS: List[CustomRerankModelFamilyV2] = []\n\n\nclass RerankModelRegistry(ModelRegistry):\n    model_type = \"rerank\"\n\n    def __init__(self):\n        from .rerank_family import BUILTIN_RERANK_MODELS\n\n        super().__init__()\n        self.models = UD_RERANKS\n        self.builtin_models = list(BUILTIN_RERANK_MODELS.keys())\n\n    def add_ud_model(self, model_spec):\n        from . import generate_engine_config_by_model_name\n\n        UD_RERANKS.append(model_spec)\n        generate_engine_config_by_model_name(model_spec)\n\n    def check_model_uri(self, model_family: \"RerankModelFamilyV2\"):\n        from ..utils import is_valid_model_uri\n\n        for spec in model_family.model_specs:\n            model_uri = spec.model_uri\n            if model_uri and not is_valid_model_uri(model_uri):\n                raise ValueError(f\"Invalid model URI {model_uri}.\")\n\n    def remove_ud_model(self, model_family: \"CustomRerankModelFamilyV2\"):\n        from .rerank_family import RERANK_ENGINES\n\n        UD_RERANKS.remove(model_family)\n        del RERANK_ENGINES[model_family.model_name]\n\n    def remove_ud_model_files(self, model_family: \"CustomRerankModelFamilyV2\"):\n        from .cache_manager import RerankCacheManager\n\n        _model_family = model_family.copy()\n        for spec in model_family.model_specs:\n            _model_family.model_specs = [spec]\n            cache_manager = RerankCacheManager(_model_family)\n            cache_manager.unregister_custom_model(self.model_type)\n\n\ndef get_user_defined_reranks() -> List[CustomRerankModelFamilyV2]:\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"rerank\")\n    return registry.get_custom_models()\n\n\ndef register_rerank(model_family: CustomRerankModelFamilyV2, persist: bool):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"rerank\")\n    registry.register(model_family, persist)\n\n\ndef unregister_rerank(model_name: str, raise_error: bool = True):\n    from ..custom import RegistryManager\n\n    registry = RegistryManager.get_registry(\"rerank\")\n    registry.unregister(model_name, raise_error)\n"
  },
  {
    "path": "xinference/model/rerank/llama_cpp/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/rerank/llama_cpp/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport concurrent.futures\nimport importlib.util\nimport logging\nimport os\nimport platform\nimport pprint\nimport sys\nimport uuid\nfrom typing import List, Optional\n\nfrom packaging import version\n\nfrom ....types import DocumentObj, Meta, Rerank, RerankTokens\nfrom ..core import RerankModel, RerankModelFamilyV2, RerankSpecV1\n\nlogger = logging.getLogger(__name__)\n\n\nclass _Done:\n    pass\n\n\nclass _Error:\n    def __init__(self, msg):\n        self.msg = msg\n\n\nclass XllamaCppRerankModel(RerankModel):\n    def __init__(self, *args, **kwargs) -> None:\n        super().__init__(*args, **kwargs)\n        self._llm = None\n        self._executor: Optional[concurrent.futures.ThreadPoolExecutor] = None\n        llamacpp_model_config = self._kwargs.get(\"llamacpp_model_config\")\n        self._llamacpp_model_config = self._sanitize_model_config(llamacpp_model_config)\n\n    def _sanitize_model_config(self, llamacpp_model_config: Optional[dict]) -> dict:\n        if llamacpp_model_config is None:\n            llamacpp_model_config = {}\n\n        llamacpp_model_config.setdefault(\"rerank\", True)\n        llamacpp_model_config.setdefault(\"use_mmap\", False)\n        llamacpp_model_config.setdefault(\"use_mlock\", True)\n\n        if self._is_darwin_and_apple_silicon():\n            llamacpp_model_config.setdefault(\"n_gpu_layers\", -1)\n        elif self._is_linux():\n            llamacpp_model_config.setdefault(\"n_gpu_layers\", -1)\n\n        return llamacpp_model_config\n\n    def _is_darwin_and_apple_silicon(self):\n        return sys.platform == \"darwin\" and platform.processor() == \"arm\"\n\n    def _is_linux(self):\n        return sys.platform.startswith(\"linux\")\n\n    def load(self):\n        try:\n            from xllamacpp import (\n                CommonParams,\n                Server,\n                __version__,\n                estimate_gpu_layers,\n                get_device_info,\n                ggml_backend_dev_type,\n                llama_pooling_type,\n            )\n\n            try:\n                if version.parse(__version__) < version.parse(\"0.2.2\"):\n                    raise RuntimeError(\n                        \"Please update xllamacpp to >= 0.2.2 by `pip install -U xllamacpp`\"\n                    )\n            except version.InvalidVersion:\n                pass  # If the version parse failed, we just skip the version check.\n        except ImportError:\n            error_message = \"Failed to import module 'xllamacpp'\"\n            installation_guide = [\"Please make sure 'xllamacpp' is installed. \"]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        # handle legacy cache.\n        if (\n            self._model_spec.model_file_name_split_template\n            and self._quantization in self._model_spec.quantization_parts\n        ):\n            part = self._model_spec.quantization_parts[self._quantization]\n            model_path = os.path.join(\n                self._model_path,\n                self._model_spec.model_file_name_split_template.format(\n                    quantization=self._quantization, part=part[0]\n                ),\n            )\n        else:\n            model_path = os.path.join(\n                self._model_path,\n                self._model_spec.model_file_name_template.format(\n                    quantization=self._quantization\n                ),\n            )\n\n        try:\n            params = CommonParams()\n            params.embedding = True\n            # Compatible with xllamacpp changes\n            try:\n                params.model = model_path\n            except Exception:\n                params.model.path = model_path\n\n            # This is the default value, could be overwritten by _llamacpp_model_config\n            params.n_parallel = min(8, os.cpu_count() or 1)\n            params.pooling_type = llama_pooling_type.LLAMA_POOLING_TYPE_RANK\n            for k, v in self._llamacpp_model_config.items():\n                if k == \"rerank\":\n                    continue\n                try:\n                    if \".\" in k:\n                        parts = k.split(\".\")\n                        sub_param = params\n                        for p in parts[:-1]:\n                            sub_param = getattr(sub_param, p)\n                        setattr(sub_param, parts[-1], v)\n                    else:\n                        setattr(params, k, v)\n                except Exception as e:\n                    logger.error(\"Failed to set the param %s = %s, error: %s\", k, v, e)\n            n_threads = self._llamacpp_model_config.get(\"n_threads\", os.cpu_count())\n            params.cpuparams.n_threads = n_threads\n            params.cpuparams_batch.n_threads = n_threads\n            if params.n_gpu_layers == -1:\n                # Number of layers to offload to GPU (-ngl). If -1, all layers are offloaded.\n                # 0x7FFFFFFF is INT32 max, will be auto set to all layers\n                params.n_gpu_layers = 0x7FFFFFFF\n                try:\n                    device_info = get_device_info()\n                    gpus = [\n                        info\n                        for info in device_info\n                        if info[\"type\"]\n                        == ggml_backend_dev_type.GGML_BACKEND_DEVICE_TYPE_GPU\n                    ]\n                    if gpus:\n                        logger.info(\n                            \"Try to estimate num gpu layers, n_ctx: %s, n_batch: %s, n_parallel: %s, gpus:\\n%s\",\n                            params.n_ctx,\n                            params.n_batch,\n                            params.n_parallel,\n                            pprint.pformat(gpus),\n                        )\n                        estimate = estimate_gpu_layers(\n                            gpus=gpus,\n                            model_path=model_path,\n                            projectors=[],\n                            context_length=params.n_ctx,\n                            batch_size=params.n_batch,\n                            num_parallel=params.n_parallel,\n                            kv_cache_type=\"\",\n                        )\n                        logger.info(\"Estimate num gpu layers: %s\", estimate)\n                        if estimate.tensor_split:\n                            for i in range(len(estimate.tensor_split)):\n                                params.tensor_split[i] = estimate.tensor_split[i]\n                        else:\n                            params.n_gpu_layers = estimate.layers\n                except Exception as e:\n                    logger.exception(\n                        \"Estimate num gpu layers for llama.cpp backend failed: %s\", e\n                    )\n            self._llm = Server(params)\n            self._executor = concurrent.futures.ThreadPoolExecutor(\n                max_workers=max(10, n_threads)\n            )\n\n        except AssertionError:\n            raise RuntimeError(f\"Load model {self._model_name} failed\")\n        pass\n\n    def rerank(\n        self,\n        documents: List[str],\n        query: str,\n        top_n: Optional[int],\n        max_chunks_per_doc: Optional[int],\n        return_documents: Optional[bool],\n        return_len: Optional[bool],\n        **kwargs,\n    ) -> Rerank:\n        if kwargs:\n            raise RuntimeError(\"Unexpected keyword arguments: {}\".format(kwargs))\n        assert self._llm is not None\n        result = self._llm.handle_rerank({\"query\": query, \"documents\": documents})\n        if top_n is not None:\n            result[\"results\"] = result[\"results\"][:top_n]\n        reranked_docs = list(\n            map(\n                lambda doc: DocumentObj(\n                    index=doc[\"index\"],\n                    relevance_score=doc[\"relevance_score\"],\n                    document=documents[doc[\"index\"]] if return_documents else None,\n                ),\n                result[\"results\"],\n            )\n        )\n        tokens = result[\"usage\"][\"total_tokens\"]\n        metadata = Meta(\n            api_version=None,\n            billed_units=None,\n            tokens=(\n                RerankTokens(input_tokens=tokens, output_tokens=tokens)\n                if return_len\n                else None\n            ),\n            warnings=None,\n        )\n        return Rerank(id=str(uuid.uuid4()), results=reranked_docs, meta=metadata)\n\n    @classmethod\n    def check_lib(cls) -> bool:\n        return importlib.util.find_spec(\"xllamacpp\") is not None\n\n    @classmethod\n    def match_json(\n        cls,\n        model_family: RerankModelFamilyV2,\n        model_spec: RerankSpecV1,\n        quantization: str,\n    ) -> bool:\n        if model_spec.model_format not in [\"ggufv2\"]:\n            return False\n        return True\n"
  },
  {
    "path": "xinference/model/rerank/llama_cpp/tests/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/rerank/llama_cpp/tests/test_llama_cpp.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport shutil\n\nfrom ...cache_manager import RerankCacheManager as CacheManager\nfrom ...core import (\n    LlamaCppRerankSpecV1,\n    RerankModelFamilyV2,\n    create_rerank_model_instance,\n)\n\nTEST_MODEL_SPEC = RerankModelFamilyV2(\n    version=2,\n    model_name=\"bge-reranker-v2-m3\",\n    language=[\"en\"],\n    model_specs=[\n        LlamaCppRerankSpecV1(\n            model_format=\"ggufv2\",\n            model_id=\"gpustack/bge-reranker-v2-m3-GGUF\",\n            model_file_name_template=\"bge-reranker-v2-m3-{quantization}.gguf\",\n            quantization=\"Q4_K_M\",\n            model_hub=\"modelscope\",\n        )\n    ],\n)\n\n\ndef test_rerank_model_with_xllamacpp():\n    model_path = None\n    try:\n        model_path = CacheManager(TEST_MODEL_SPEC).cache()\n\n        model = create_rerank_model_instance(\n            \"mock\",\n            \"bge-reranker-v2-m3\",\n            \"llama.cpp\",\n            model_format=\"ggufv2\",\n            quantization=\"Q4_K_M\",\n            model_path=model_path,\n        )\n        model.load()\n\n        query = \"A man is eating pasta.\"\n\n        corpus = [\n            \"A man is eating food.\",\n            \"A man is eating a piece of bread.\",\n            \"The girl is carrying a baby.\",\n            \"A man is riding a horse.\",\n            \"A woman is playing violin.\",\n            \"Two men pushed carts through the woods.\",\n            \"A man is riding a white horse on an enclosed ground.\",\n            \"A monkey is playing drums.\",\n            \"A cheetah is running behind its prey.\",\n        ]\n\n        scores = model.rerank(corpus, query, None, None, True, True)\n        assert scores[\"results\"][0][\"index\"] == 0\n\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n"
  },
  {
    "path": "xinference/model/rerank/model_spec.json",
    "content": "[\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-reranker-large\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"max_tokens\": 512,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-reranker-large\",\n            \"model_revision\": \"27c9168d479987529781de8474dff94d69beca11\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-reranker-large\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418426,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-reranker-base\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"max_tokens\": 512,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-reranker-base\",\n            \"model_revision\": \"465b4b7ddf2be0a020c8ad6e525b9bb1dbb708ae\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Xorbits/bge-reranker-base\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418427,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bce-reranker-base_v1\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"max_tokens\": 512,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"maidalun1020/bce-reranker-base_v1\",\n            \"model_revision\": \"eaa31a577a0574e87a08959bd229ca14ce1b5496\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"maidalun/bce-reranker-base_v1\",\n            \"model_revision\": \"v0.0.1\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418428,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-reranker-v2-m3\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\",\n      \"multilingual\"\n    ],\n    \"max_tokens\": 8192,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-reranker-v2-m3\",\n            \"model_revision\": \"12e974610ba9083ed95f3edf08d7e899581f4de4\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"AI-ModelScope/bge-reranker-v2-m3\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"gpustack/bge-reranker-v2-m3-GGUF\",\n            \"quantizations\": [\n              \"Q3_K\",\n              \"Q3_K_M\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"bge-reranker-v2-m3-{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"model_id\": \"gpustack/bge-reranker-v2-m3-GGUF\",\n            \"quantizations\": [\n              \"Q3_K\",\n              \"Q3_K_M\",\n              \"Q4_0\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"bge-reranker-v2-m3-{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"featured\": false,\n    \"updated_at\": 1769418429,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-reranker-v2-gemma\",\n    \"type\": \"LLM-based\",\n    \"language\": [\n      \"en\",\n      \"zh\",\n      \"multilingual\"\n    ],\n    \"max_tokens\": 8192,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-reranker-v2-gemma\",\n            \"model_revision\": \"1787044f8b6fb740a9de4557c3a12377f84d9e17\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"AI-ModelScope/bge-reranker-v2-gemma\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418430,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"bge-reranker-v2-minicpm-layerwise\",\n    \"type\": \"LLM-based layerwise\",\n    \"language\": [\n      \"en\",\n      \"zh\",\n      \"multilingual\"\n    ],\n    \"max_tokens\": 2048,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"BAAI/bge-reranker-v2-minicpm-layerwise\",\n            \"model_revision\": \"47b5332b296c4d8cb6ee2c60502cc62a0d708881\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"mirror013/bge-reranker-v2-minicpm-layerwise\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418431,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"jina-reranker-v2\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\",\n      \"multilingual\"\n    ],\n    \"max_tokens\": 1024,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"jinaai/jina-reranker-v2-base-multilingual\",\n            \"model_revision\": \"298e48cada4a9318650d7fbd795f63827f884087\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"jinaai/jina-reranker-v2-base-multilingual\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418432,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"minicpm-reranker\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"max_tokens\": 1024,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"openbmb/MiniCPM-Reranker\",\n            \"model_revision\": \"5d2fd7345b6444c89d4c0fa59c92272888f3f2d0\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"OpenBMB/MiniCPM-Reranker\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418433,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-Reranker-0.6B\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"max_tokens\": 32768,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-Reranker-0.6B\",\n            \"model_revision\": \"6e9e69830b95c52b5fd889b7690dda3329508de3\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-Reranker-0.6B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantFactory/Qwen3-Reranker-0.6B-GGUF\",\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Reranker-0.6B.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"model_id\": \"QuantFactory/Qwen3-Reranker-0.6B-GGUF\",\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Reranker-0.6B.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"featured\": false,\n    \"updated_at\": 1769418434,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-Reranker-4B\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"max_tokens\": 32768,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-Reranker-4B\",\n            \"model_revision\": \"f16fc5d5d2b9b1d0db8280929242745d79794ef5\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-Reranker-4B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantFactory/Qwen3-Reranker-4B-GGUF\",\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Reranker-4B.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"model_id\": \"QuantFactory/Qwen3-Reranker-4B-GGUF\",\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Reranker-4B.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"featured\": false,\n    \"updated_at\": 1769418435,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-Reranker-8B\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\"\n    ],\n    \"max_tokens\": 32768,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"Qwen/Qwen3-Reranker-8B\",\n            \"model_revision\": \"5fa94080caafeaa45a15d11f969d7978e087a3db\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"Qwen/Qwen3-Reranker-8B\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      },\n      {\n        \"model_format\": \"ggufv2\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"QuantFactory/Qwen3-Reranker-8B-GGUF\",\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Reranker-8B.{quantization}.gguf\"\n          },\n          \"modelscope\": {\n            \"model_id\": \"QuantFactory/Qwen3-Reranker-8B-GGUF\",\n            \"quantizations\": [\n              \"Q2_K\",\n              \"Q3_K_S\",\n              \"Q3_K_M\",\n              \"Q3_K_L\",\n              \"Q4_0\",\n              \"Q4_1\",\n              \"Q4_K_S\",\n              \"Q4_K_M\",\n              \"Q5_0\",\n              \"Q5_1\",\n              \"Q5_K_S\",\n              \"Q5_K_M\",\n              \"Q6_K\",\n              \"Q8_0\"\n            ],\n            \"model_file_name_template\": \"Qwen3-Reranker-8B.{quantization}.gguf\"\n          }\n        }\n      }\n    ],\n    \"featured\": false,\n    \"updated_at\": 1769418436,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#llama_cpp_dependencies# ; #engine# == \\\"llama.cpp\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"jina-reranker-v3\",\n    \"type\": \"normal\",\n    \"language\": [\n      \"en\",\n      \"zh\",\n      \"multilingual\"\n    ],\n    \"max_tokens\": 131072,\n    \"model_specs\": [\n      {\n        \"model_format\": \"pytorch\",\n        \"model_src\": {\n          \"huggingface\": {\n            \"model_id\": \"jinaai/jina-reranker-v3\",\n            \"model_revision\": \"7fa51ea4da62cb1b13ac263a1a41e20962a36c81\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          },\n          \"modelscope\": {\n            \"model_id\": \"jinaai/jina-reranker-v3\",\n            \"quantizations\": [\n              \"none\"\n            ]\n          }\n        }\n      }\n    ],\n    \"updated_at\": 1769418437,\n    \"featured\": false,\n    \"virtualenv\": {\n      \"packages\": [\n        \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n        \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n        \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n      ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-VL-Reranker-8B\",\n    \"type\": \"normal\",\n    \"language\": [\n        \"en\",\n        \"zh\"\n    ],\n    \"max_tokens\": 8192,\n    \"model_specs\": [\n        {\n            \"model_format\": \"pytorch\",\n            \"model_src\": {\n                \"huggingface\": {\n                    \"model_id\": \"Qwen/Qwen3-VL-Reranker-8B\",\n                    \"model_revision\": \"8e52ab8fdc69d698b3e1c17f9977afb6fea4f656\",\n                    \"quantizations\": [\n                        \"none\"\n                    ]\n                },\n                \"modelscope\": {\n                    \"model_id\": \"Qwen/Qwen3-VL-Reranker-8B\",\n                    \"quantizations\": [\n                        \"none\"\n                    ]\n                }\n            }\n        }\n    ],\n    \"featured\": false,\n    \"updated_at\": 1769418439,\n    \"virtualenv\": {\n        \"packages\": [\n            \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n            \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n            \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n            \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n        ]\n    }\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Qwen3-VL-Reranker-2B\",\n    \"type\": \"normal\",\n    \"language\": [\n        \"en\",\n        \"zh\"\n    ],\n    \"max_tokens\": 8192,\n    \"model_specs\": [\n        {\n            \"model_format\": \"pytorch\",\n            \"model_src\": {\n                \"huggingface\": {\n                    \"model_id\": \"Qwen/Qwen3-VL-Reranker-2B\",\n                    \"model_revision\": \"76219daff7a696073e0ab28b74fa32aa81183052\",\n                    \"quantizations\": [\n                        \"none\"\n                    ]\n                },\n                \"modelscope\": {\n                    \"model_id\": \"Qwen/Qwen3-VL-Reranker-2B\",\n                    \"quantizations\": [\n                        \"none\"\n                    ]\n                }\n            }\n        }\n    ],\n    \"featured\": true,\n    \"updated_at\": 1769418438,\n    \"virtualenv\": {\n        \"packages\": [\n            \"#sentence_transformers_dependencies# ; #engine# == \\\"sentence_transformers\\\"\",\n            \"#system_torchvision# ; #engine# == \\\"sentence_transformers\\\"\",\n            \"#vllm_dependencies# ; #engine# == \\\"vllm\\\"\",\n            \"#system_numpy# ; #engine# == \\\"vllm\\\"\"\n        ]\n    }\n  }\n]\n"
  },
  {
    "path": "xinference/model/rerank/rerank_family.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom typing import TYPE_CHECKING, Dict, List, Literal, Optional, Type, Union\n\nif TYPE_CHECKING:\n    from .core import RerankModel, RerankModelFamilyV2, RerankSpecV1\n\nFLAG_RERANKER_CLASSES: List[Type[\"RerankModel\"]] = []\nSENTENCE_TRANSFORMER_CLASSES: List[Type[\"RerankModel\"]] = []\nVLLM_CLASSES: List[Type[\"RerankModel\"]] = []\nLLAMA_CPP_CLASSES: List[Type[\"RerankModel\"]] = []\n\nBUILTIN_RERANK_MODELS: Dict[str, \"RerankModelFamilyV2\"] = {}\n\nlogger = logging.getLogger(__name__)\n\n\ndef match_rerank(\n    model_name: str,\n    model_format: Optional[str] = None,\n    quantization: Optional[str] = None,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n) -> \"RerankModelFamilyV2\":\n    from ..utils import download_from_modelscope\n    from .custom import get_user_defined_reranks\n\n    target_family = None\n\n    if model_name in BUILTIN_RERANK_MODELS:\n        model_families = BUILTIN_RERANK_MODELS[model_name]\n        # Handle the case where BUILTIN_RERANK_MODELS stores lists\n        if isinstance(model_families, list):\n            target_family = model_families[0]  # Take the first model family\n        else:\n            target_family = model_families\n    else:\n        for model_family in get_user_defined_reranks():\n            if model_name == model_family.model_name:\n                target_family = model_family\n                break\n\n    if target_family is None:\n        raise ValueError(\n            f\"Rerank model {model_name} not found, available models: {BUILTIN_RERANK_MODELS.keys()}\"\n        )\n\n    if download_hub == \"modelscope\" or download_from_modelscope():\n        specs = [\n            x for x in target_family.model_specs if x.model_hub == \"modelscope\"\n        ] + [x for x in target_family.model_specs if x.model_hub == \"huggingface\"]\n    else:\n        specs = [x for x in target_family.model_specs if x.model_hub == \"huggingface\"]\n\n    def _match_quantization(q: Union[str, None], _quantization: str):\n        # Currently, the quantization name could include both uppercase and lowercase letters,\n        # so it is necessary to ensure that the case sensitivity does not\n        # affect the matching results.\n        if q is None:\n            return None\n        return _quantization if q.lower() == _quantization.lower() else None\n\n    def _apply_format_to_model_id(_spec: \"RerankSpecV1\", q: str) -> \"RerankSpecV1\":\n        # Different quantized versions of some models use different model ids,\n        # Here we check the `{}` in the model id to format the id.\n        if _spec.model_id and \"{\" in _spec.model_id:\n            _spec.model_id = _spec.model_id.format(quantization=q)\n        return _spec\n\n    for spec in specs:\n        matched_quantization = _match_quantization(quantization, spec.quantization)\n        if (\n            model_format\n            and model_format != spec.model_format\n            or quantization\n            and matched_quantization is None\n        ):\n            continue\n        # Copy spec to avoid _apply_format_to_model_id modify the original spec.\n        spec = spec.copy()\n        _family = target_family.copy()\n        if quantization:\n            _family.model_specs = [\n                _apply_format_to_model_id(spec, matched_quantization)\n            ]\n            return _family\n        else:\n            # TODO: If user does not specify quantization, just use the first one\n            _q = \"none\" if spec.model_format == \"pytorch\" else spec.quantization\n            _family.model_specs = [_apply_format_to_model_id(spec, _q)]\n            return _family\n\n    raise ValueError(\n        f\"Rerank model {model_name} with format {model_format} and quantization {quantization} not found.\"\n    )\n\n\n# { rerank model name -> { engine name -> engine params } }\nRERANK_ENGINES: Dict[str, Dict[str, List[Dict[str, Type[\"RerankModel\"]]]]] = {}\nSUPPORTED_ENGINES: Dict[str, List[Type[\"RerankModel\"]]] = {}\n\n\ndef check_engine_by_model_name_and_engine(\n    model_engine: str,\n    model_name: str,\n    model_format: Optional[str],\n    quantization: Optional[str],\n) -> Type[\"RerankModel\"]:\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in RERANK_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    if model_name not in RERANK_ENGINES:\n        raise ValueError(f\"Model {model_name} not found.\")\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in RERANK_ENGINES[model_name]:\n        raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n    match_params = RERANK_ENGINES[model_name][model_engine]\n    for param in match_params:\n        if model_name != param[\"model_name\"]:\n            continue\n        if (model_format and model_format != param[\"model_format\"]) or (\n            quantization and quantization != param[\"quantization\"]\n        ):\n            continue\n        return param[\"rerank_class\"]\n    raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n\n\ndef check_engine_by_model_name_and_engine_with_virtual_env(\n    model_engine: str,\n    model_name: str,\n    model_format: Optional[str],\n    quantization: Optional[str],\n    model_family: Optional[\"RerankModelFamilyV2\"] = None,\n) -> Type[\"RerankModel\"]:\n    from ..utils import _collect_virtualenv_engine_markers\n\n    def get_model_engine_from_spell(engine_str: str) -> str:\n        for engine in RERANK_ENGINES[model_name].keys():\n            if engine.lower() == engine_str.lower():\n                return engine\n        return engine_str\n\n    if model_family is None:\n        if model_name in BUILTIN_RERANK_MODELS:\n            model_families = BUILTIN_RERANK_MODELS[model_name]\n            model_family = (\n                model_families[0]\n                if isinstance(model_families, list)\n                else model_families\n            )\n        else:\n            from .custom import get_user_defined_reranks\n\n            model_family = next(\n                (f for f in get_user_defined_reranks() if f.model_name == model_name),\n                None,\n            )\n    if model_family is None:\n        raise ValueError(f\"Model {model_name} not found.\")\n\n    engine_markers = _collect_virtualenv_engine_markers(model_family)\n    if model_name not in RERANK_ENGINES:\n        engine_key = get_model_engine_from_spell(model_engine)\n        if engine_key.lower() in engine_markers:\n            engine_classes = SUPPORTED_ENGINES.get(engine_key, [])\n            if engine_classes:\n                logger.warning(\n                    \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                    engine_key,\n                )\n                return engine_classes[0]\n        raise ValueError(f\"Model {model_name} not found.\")\n\n    model_engine = get_model_engine_from_spell(model_engine)\n    if model_engine not in RERANK_ENGINES[model_name]:\n        if model_engine.lower() in engine_markers:\n            engine_classes = SUPPORTED_ENGINES.get(model_engine, [])\n            if engine_classes:\n                logger.warning(\n                    \"Bypassing engine compatibility checks for %s due to virtualenv marker.\",\n                    model_engine,\n                )\n                return engine_classes[0]\n        raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n\n    match_params = RERANK_ENGINES[model_name][model_engine]\n    if match_params:\n        return match_params[0][\"rerank_class\"]\n\n    raise ValueError(f\"Model {model_name} cannot be run on engine {model_engine}.\")\n"
  },
  {
    "path": "xinference/model/rerank/sentence_transformers/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/rerank/sentence_transformers/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport gc\nimport importlib.util\nimport inspect\nimport logging\nimport os\nimport threading\nimport uuid\nfrom collections import defaultdict\nfrom typing import Any, Dict, List, Optional, Sequence, Tuple, Union\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom xoscar import extensible\n\nfrom ....device_utils import empty_cache\nfrom ....types import Document, DocumentObj, Meta, Rerank, RerankTokens\nfrom ....utils import make_hashable\nfrom ...batch import BatchMixin\nfrom ...utils import check_dependency_available, is_flash_attn_available\nfrom ..core import (\n    RERANK_EMPTY_CACHE_COUNT,\n    RerankModel,\n    RerankModelFamilyV2,\n    RerankSpecV1,\n)\nfrom ..utils import preprocess_sentence\n\nlogger = logging.getLogger(__name__)\n\n\nclass _ModelWrapper(nn.Module):\n    def __init__(self, module: nn.Module):\n        super().__init__()\n        self.model = module\n        self._local_data = threading.local()\n\n    @property\n    def n_tokens(self):\n        return getattr(self._local_data, \"n_tokens\", 0)\n\n    @n_tokens.setter\n    def n_tokens(self, value):\n        self._local_data.n_tokens = value\n\n    @property\n    def input_tokens(self):\n        if not hasattr(self._local_data, \"input_tokens\"):\n            self._local_data.input_tokens = []\n        return self._local_data.input_tokens\n\n    @input_tokens.setter\n    def input_tokens(self, value):\n        self._local_data.input_tokens = value\n\n    @property\n    def input_ids(self):\n        if not hasattr(self._local_data, \"input_ids\"):\n            self._local_data.input_ids = []\n        return self._local_data.input_ids\n\n    @input_ids.setter\n    def input_ids(self, value):\n        self._local_data.input_ids = value\n\n    def forward(self, **kwargs):\n        attention_mask = kwargs.get(\"attention_mask\")\n        # when batching, the attention mask 1 means there is a token\n        # thus we just sum up it to get the total number of tokens\n        if attention_mask is not None:\n            self.n_tokens += attention_mask.sum().item()\n            per_sample_tokens = attention_mask.sum(dim=1).tolist()\n            # sentence transformers always process batch size > 1\n            self.input_tokens.extend(per_sample_tokens)\n            self.input_ids.extend(kwargs.get(\"input_ids\"))\n\n        return self.model(**kwargs)\n\n    def __getattr__(self, attr):\n        try:\n            return super().__getattr__(attr)\n        except AttributeError:\n            return getattr(self.model, attr)\n\n\nclass SentenceTransformerRerankModel(RerankModel, BatchMixin):\n    def __init__(self, *args, **kwargs) -> None:\n        RerankModel.__init__(self, *args, **kwargs)\n        BatchMixin.__init__(self, self.rerank, **kwargs)  # type: ignore\n        self._vl_reranker = None\n\n    def load(self):\n        # TODO: Split FlagReranker and sentence_transformers into different model_engines like FlagRerankModel\n        logger.info(\"Loading rerank model: %s\", self._model_path)\n        enable_flash_attn = self._kwargs.pop(\n            \"enable_flash_attn\", is_flash_attn_available()\n        )\n\n        self._kwargs.pop(\"batch_size\", None)\n        self._kwargs.pop(\"batch_interval\", None)\n\n        if enable_flash_attn:\n            logger.warning(\n                \"flash_attn can only support fp16 and bf16, will force set `use_fp16` to True\"\n            )\n            self._use_fp16 = True\n\n        if self.model_family.model_name.startswith(\"Qwen3-VL-Reranker\"):\n            module_path = os.path.join(\n                self._model_path, \"scripts\", \"qwen3_vl_reranker.py\"\n            )\n            if not os.path.exists(module_path):\n                raise FileNotFoundError(\n                    f\"Missing qwen3_vl_reranker.py under {self._model_path}. \"\n                    \"Please verify the model repository files.\"\n                )\n            spec = importlib.util.spec_from_file_location(\n                \"qwen3_vl_reranker\", module_path\n            )\n            if spec is None or spec.loader is None:\n                raise ImportError(f\"Failed to load reranker module from {module_path}\")\n            module = importlib.util.module_from_spec(spec)\n            spec.loader.exec_module(module)\n            self._vl_reranker = module.Qwen3VLReranker(\n                model_name_or_path=self._model_path, **self._kwargs\n            )\n            return\n\n        if (\n            self.model_family.type == \"normal\"\n            and \"qwen3\" not in self.model_family.model_name.lower()\n            and \"jina-reranker-v3\" not in self.model_family.model_name.lower()\n        ):\n            try:\n                import sentence_transformers\n                from sentence_transformers.cross_encoder import CrossEncoder\n\n                if sentence_transformers.__version__ < \"3.1.0\":\n                    raise ValueError(\n                        \"The sentence_transformers version must be greater than 3.1.0. \"\n                        \"Please upgrade your version via `pip install -U sentence_transformers` or refer to \"\n                        \"https://github.com/UKPLab/sentence-transformers\"\n                    )\n            except ImportError:\n                error_message = \"Failed to import module 'sentence-transformers'\"\n                installation_guide = [\n                    \"Please make sure 'sentence-transformers' is installed. \",\n                    \"You can install it by `pip install sentence-transformers`\\n\",\n                ]\n\n                raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n            self._model = CrossEncoder(\n                self._model_path,\n                device=self._device,\n                trust_remote_code=True,\n                max_length=getattr(self.model_family, \"max_tokens\"),\n                **self._kwargs,\n            )\n            if self._use_fp16:\n                self._model.model.half()\n            self._tokenizer = self._model.tokenizer\n        elif (\n            \"qwen3\" in self.model_family.model_name.lower()\n            or \"jina-reranker-v3\" in self.model_family.model_name.lower()\n        ):\n            # qwen3-reranker\n            # now we use transformers\n            # TODO: support engines for rerank models\n            try:\n                from transformers import AutoModelForCausalLM, AutoTokenizer\n            except ImportError:\n                error_message = \"Failed to import module 'transformers'\"\n                installation_guide = [\n                    \"Please make sure 'transformers' is installed. \",\n                    \"You can install it by `pip install transformers`\\n\",\n                ]\n\n                raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n            tokenizer = AutoTokenizer.from_pretrained(\n                self._model_path, padding_side=\"left\"\n            )\n            model_kwargs = {\"device_map\": \"auto\"}\n            if enable_flash_attn:\n                model_kwargs[\"attn_implementation\"] = \"flash_attention_2\"\n                model_kwargs[\"torch_dtype\"] = torch.float16\n            model_kwargs.update(self._kwargs)\n            logger.debug(\"Loading qwen3 rerank with kwargs %s\", model_kwargs)\n            model = self._model = AutoModelForCausalLM.from_pretrained(\n                self._model_path, **model_kwargs\n            ).eval()\n            max_length = getattr(self.model_family, \"max_tokens\")\n\n            prefix = (\n                \"<|im_start|>system\\nJudge whether the Document meets the requirements based on the Query \"\n                'and the Instruct provided. Note that the answer can only be \"yes\" or \"no\".'\n                \"<|im_end|>\\n<|im_start|>user\\n\"\n            )\n            suffix = \"<|im_end|>\\n<|im_start|>assistant\\n<think>\\n\\n</think>\\n\\n\"\n            prefix_tokens = tokenizer.encode(prefix, add_special_tokens=False)\n            suffix_tokens = tokenizer.encode(suffix, add_special_tokens=False)\n\n            def process_inputs(pairs):\n                inputs = tokenizer(\n                    pairs,\n                    padding=False,\n                    truncation=\"longest_first\",\n                    return_attention_mask=False,\n                    max_length=max_length - len(prefix_tokens) - len(suffix_tokens),\n                )\n                for i, ele in enumerate(inputs[\"input_ids\"]):\n                    inputs[\"input_ids\"][i] = prefix_tokens + ele + suffix_tokens\n                inputs = tokenizer.pad(\n                    inputs, padding=True, return_tensors=\"pt\", max_length=max_length\n                )\n                for key in inputs:\n                    inputs[key] = inputs[key].to(model.device)\n                return inputs\n\n            token_false_id = tokenizer.convert_tokens_to_ids(\"no\")\n            token_true_id = tokenizer.convert_tokens_to_ids(\"yes\")\n\n            @torch.inference_mode()\n            def compute_logits(inputs, **kwargs):\n                batch_scores = model(**inputs).logits[:, -1, :]\n                true_vector = batch_scores[:, token_true_id]\n                false_vector = batch_scores[:, token_false_id]\n                batch_scores = torch.stack([false_vector, true_vector], dim=1)\n                batch_scores = torch.nn.functional.log_softmax(batch_scores, dim=1)\n                scores = batch_scores[:, 1].exp().tolist()\n                return scores\n\n            self.process_inputs = process_inputs\n            self.compute_logits = compute_logits\n\n            self._tokenizer = tokenizer\n        else:\n            try:\n                if self.model_family.type == \"LLM-based\":\n                    from FlagEmbedding import FlagLLMReranker as FlagReranker\n                elif self.model_family.type == \"LLM-based layerwise\":\n                    from FlagEmbedding import LayerWiseFlagLLMReranker as FlagReranker\n                else:\n                    raise RuntimeError(\n                        f\"Unsupported Rank model type: {self.model_family.type}\"\n                    )\n            except ImportError:\n                error_message = \"Failed to import module 'FlagEmbedding'\"\n                installation_guide = [\n                    \"Please make sure 'FlagEmbedding' is installed. \",\n                    \"You can install it by `pip install FlagEmbedding`\\n\",\n                ]\n\n                raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n            self._model = FlagReranker(self._model_path, use_fp16=self._use_fp16)\n            self._tokenizer = self._model.tokenizer\n        # Wrap transformers model to record number of tokens\n        self._model.model = _ModelWrapper(self._model.model)\n\n    def _rerank(\n        self,\n        documents: List[str],\n        query: List[str],\n        top_n: Optional[int],\n        max_chunks_per_doc: Optional[int],\n        return_documents: Optional[bool],\n        return_len: Optional[bool],\n        **kwargs,\n    ) -> List[Any]:\n        if self._vl_reranker is not None:\n            return self._rerank_vl(documents, query, **kwargs)\n        assert self._model is not None\n        if max_chunks_per_doc is not None:\n            raise ValueError(\"rerank hasn't support `max_chunks_per_doc` parameter.\")\n        logger.info(\"Rerank with kwargs: %s, model: %s\", kwargs, self._model)\n\n        sentence_combinations = [\n            [\n                preprocess_sentence(\n                    pre_query,\n                    kwargs.get(\"instruction\", None),\n                    self.model_family.model_name,\n                ),\n                doc,\n            ]\n            for doc, pre_query in zip(documents, query)\n        ]\n        # reset n tokens\n        self._model.model.n_tokens = 0\n        # reset input_tokens\n        self._model.model.input_tokens = []\n        # reset input_tokens\n        self._model.model.input_ids = []\n        if (\n            self.model_family.type == \"normal\"\n            and \"qwen3\" not in self.model_family.model_name.lower()\n            and \"jina-reranker-v3\" not in self.model_family.model_name.lower()\n        ):\n            logger.debug(\"Passing processed sentences: %s\", sentence_combinations)\n            similarity_scores = self._model.predict(\n                sentence_combinations,\n                convert_to_numpy=False,\n                convert_to_tensor=True,\n                **kwargs,\n            ).cpu()\n            if similarity_scores.dtype == torch.bfloat16:\n                similarity_scores = similarity_scores.float()\n        elif (\n            \"qwen3\" in self.model_family.model_name.lower()\n            or \"jina-reranker-v3\" in self.model_family.model_name.lower()\n        ):\n\n            def format_instruction(instruction, query, doc):\n                if instruction is None:\n                    instruction = \"Given a web search query, retrieve relevant passages that answer the query\"\n                output = \"<Instruct>: {instruction}\\n<Query>: {query}\\n<Document>: {doc}\".format(\n                    instruction=instruction, query=query, doc=doc\n                )\n                return output\n\n            # reduce memory usage.\n            micro_bs = 4\n            similarity_scores = []\n            for i in range(0, len(documents), micro_bs):\n                sub_docs = documents[i : i + micro_bs]\n                sub_queries = query[i : i + micro_bs]\n                pairs = [\n                    format_instruction(kwargs.get(\"instruction\", None), pre_query, doc)\n                    for doc, pre_query in zip(sub_docs, sub_queries)\n                ]\n                # Tokenize the input texts\n                inputs = self.process_inputs(pairs)\n                similarity_scores.extend(self.compute_logits(inputs))\n        else:\n            # Related issue: https://github.com/xorbitsai/inference/issues/1775\n            similarity_scores = self._model.compute_score(\n                sentence_combinations, **kwargs\n            )\n\n            if not isinstance(similarity_scores, Sequence):\n                similarity_scores = [similarity_scores]\n            elif (\n                isinstance(similarity_scores, list)\n                and len(similarity_scores) > 0\n                and isinstance(similarity_scores[0], Sequence)\n            ):\n                similarity_scores = similarity_scores[0]\n\n        return similarity_scores\n\n    def _normalize_vl_text(self, val: Any) -> Dict[str, Any]:\n        if isinstance(val, dict):\n            return val\n        if isinstance(val, str):\n            return {\"text\": val}\n        raise ValueError(\"Unsupported input type for Qwen3-VL reranker.\")\n\n    def _rerank_vl(self, documents: List[Any], query: List[Any], **kwargs) -> List[Any]:\n        if self._vl_reranker is None:\n            raise RuntimeError(\"Qwen3-VL reranker is not initialized.\")\n\n        if len(query) == 0 or len(documents) == 0:\n            return []\n\n        query_obj = self._normalize_vl_text(query[0])\n        doc_objs = [self._normalize_vl_text(doc) for doc in documents]\n\n        payload: Dict[str, Any] = {\n            \"query\": query_obj,\n            \"documents\": doc_objs,\n        }\n        if \"instruction\" in kwargs:\n            payload[\"instruction\"] = kwargs.get(\"instruction\")\n        if \"fps\" in kwargs:\n            payload[\"fps\"] = kwargs.get(\"fps\")\n        if \"max_frames\" in kwargs:\n            payload[\"max_frames\"] = kwargs.get(\"max_frames\")\n\n        scores = self._vl_reranker.process(payload)\n        return [float(score) for score in scores]\n\n    @extensible\n    def rerank(\n        self,\n        documents: List[str],\n        query: str,\n        top_n: Optional[int] = None,\n        max_chunks_per_doc: Optional[int] = None,\n        return_documents: Optional[bool] = True,\n        return_len: Optional[bool] = False,\n        **kwargs,\n    ) -> Rerank:\n        documents_size = len(documents)\n        query_list = [query] * documents_size\n\n        similarity_scores = self._rerank(\n            documents,\n            query_list,\n            top_n,\n            max_chunks_per_doc,\n            return_documents,\n            return_len,\n            **kwargs,\n        )\n        sim_scores_argsort = list(reversed(np.argsort(similarity_scores)))\n        if top_n is not None:\n            sim_scores_argsort = sim_scores_argsort[:top_n]\n        if return_documents:\n            docs = [\n                DocumentObj(\n                    index=int(arg),\n                    relevance_score=float(similarity_scores[arg]),\n                    document=Document(text=documents[arg]),\n                )\n                for arg in sim_scores_argsort\n            ]\n        else:\n            docs = [\n                DocumentObj(\n                    index=int(arg),\n                    relevance_score=float(similarity_scores[arg]),\n                    document=None,\n                )\n                for arg in sim_scores_argsort\n            ]\n        if return_len:\n            input_len = self._model.model.n_tokens\n            # Rerank Model output is just score or documents\n            # while return_documents = True\n            output_len = input_len\n\n        # api_version, billed_units, warnings\n        # is for Cohere API compatibility, set to None\n        metadata = Meta(\n            api_version=None,\n            billed_units=None,\n            tokens=(\n                RerankTokens(input_tokens=input_len, output_tokens=output_len)\n                if return_len\n                else None\n            ),\n            warnings=None,\n        )\n\n        # clear cache if possible\n        self._counter += 1\n        if self._counter % RERANK_EMPTY_CACHE_COUNT == 0:\n            logger.debug(\"Empty rerank cache.\")\n            gc.collect()\n            empty_cache()\n\n        return Rerank(id=str(uuid.uuid1()), results=docs, meta=metadata)\n\n    @rerank.batch  # type: ignore\n    def rerank(self, args_list, kwargs_list):\n        grouped = defaultdict(\n            lambda: {\n                \"documents\": [],\n                \"query\": [],\n                \"offsets\": [],\n                \"kwargs\": None,\n                \"indices\": [],\n            }\n        )\n\n        # 1. Group by kwargs hash\n        for i, (args, kwargs) in enumerate(zip(args_list, kwargs_list)):\n\n            documents, query, extra_kwargs = self._extract_rerank_kwargs(args, kwargs)\n\n            key = make_hashable(extra_kwargs)\n            group = grouped[key]\n            group[\"kwargs\"] = extra_kwargs\n\n            current_offset = len(group[\"documents\"])\n            documents_size = len(documents)\n            group[\"offsets\"].append((current_offset, documents_size))\n            group[\"documents\"].extend(documents)\n            group[\"query\"].extend([query] * documents_size)\n            group[\"indices\"].append(i)  # remember original position\n\n        results_with_index = []\n\n        # 2. Process each group separately\n        for key, group in grouped.items():\n            documents = group[\"documents\"]\n            query = group[\"query\"]\n            kwargs = group[\"kwargs\"]\n            offsets = group[\"offsets\"]\n            indices = group[\"indices\"]\n            score_list = self._rerank(documents, query, **kwargs)\n            top_n = kwargs.pop(\"top_n\", None)\n            return_documents = kwargs.pop(\"return_documents\", None)\n            return_len = kwargs.pop(\"return_len\", None)\n\n            # 3. Split and attach original index\n            for (offset, n), idx in zip(offsets, indices):\n                tmp_documents = group[\"documents\"][offset : offset + n]\n                tmp_queries = group[\"query\"][offset : offset + n]\n                data = score_list[offset : offset + n]\n                sim_scores_argsort = list(reversed(np.argsort(data)))\n                if top_n is not None:\n                    sim_scores_argsort = sim_scores_argsort[:top_n]\n                if return_documents:\n                    docs = [\n                        DocumentObj(\n                            index=int(arg),\n                            relevance_score=float(data[arg]),\n                            document=Document(text=tmp_documents[arg]),\n                        )\n                        for arg in sim_scores_argsort\n                    ]\n                else:\n                    docs = [\n                        DocumentObj(\n                            index=int(arg),\n                            relevance_score=float(data[arg]),\n                            document=None,\n                        )\n                        for arg in sim_scores_argsort\n                    ]\n                if return_len:\n                    if (\n                        self.model_family.type == \"normal\"\n                        and \"qwen3\" not in self.model_family.model_name.lower()\n                        and \"jina-reranker-v3\"\n                        not in self.model_family.model_name.lower()\n                    ):\n                        input_len = sum(\n                            self._model.model.input_tokens[offset : offset + n]\n                        )\n                    elif (\n                        \"qwen3\" in self.model_family.model_name.lower()\n                        or \"jina-reranker-v3\" in self.model_family.model_name.lower()\n                    ):\n                        input_len = sum(\n                            self._model.model.input_tokens[offset : offset + n]\n                        )\n                    else:\n                        # flagEmbedding reranker, forward twice\n                        # input_ids was sorted, so we should traverse all prompt to match them\n                        input_len = 0\n                        for doc, q in zip(tmp_documents, tmp_queries):\n                            for index, input_id in enumerate(\n                                self._model.model.input_ids\n                            ):\n                                prompt = self._tokenizer.decode(input_id)\n                                if self.flag_engine_match_query_doc(prompt, q, doc):\n                                    input_len += (\n                                        self._model.model.input_tokens[index] * 2\n                                    )\n                                    break\n                    # Rerank Model output is just score or documents\n                    # while return_documents = True\n                    output_len = input_len\n\n                # api_version, billed_units, warnings\n                # is for Cohere API compatibility, set to None\n                metadata = Meta(\n                    api_version=None,\n                    billed_units=None,\n                    tokens=(\n                        RerankTokens(input_tokens=input_len, output_tokens=output_len)\n                        if return_len\n                        else None\n                    ),\n                    warnings=None,\n                )\n\n                # clear cache if possible\n                self._counter += 1\n                if self._counter % RERANK_EMPTY_CACHE_COUNT == 0:\n                    logger.debug(\"Empty rerank cache.\")\n                    gc.collect()\n                    empty_cache()\n                result = Rerank(id=str(uuid.uuid1()), results=docs, meta=metadata)\n                results_with_index.append((idx, result))\n\n        # 4. Sort by original call order\n        results_with_index.sort(key=lambda x: x[0])\n        results = [r for _, r in results_with_index]\n        return results\n\n    def _extract_rerank_kwargs(self, args, kwargs):\n        \"\"\"\n        Extract the 'documents' and 'query' argument and remaining kwargs from (*args, **kwargs)\n        for a given function.\n\n        This uses inspect.signature(func).bind_partial() to automatically match\n        both positional and keyword arguments, while handling bound methods\n        (functions with 'self' as the first parameter).\n\n        Args:\n            func: The target function whose parameters define how to bind args/kwargs.\n            args: The positional arguments passed to the function.\n            kwargs: The keyword arguments passed to the function.\n\n        Returns:\n            A tuple (documents, query, extra_kwargs), where:\n              - documents: The extracted 'documents' argument (never None).\n              - query: The extracted 'query' argument (never None).\n              - extra_kwargs: Remaining keyword arguments excluding 'documents' and 'query'.\n\n        Raises:\n            KeyError: If 'documents' or 'query' argument is not found.\n            TypeError: If args/kwargs do not match the function signature.\n        \"\"\"\n        sig = inspect.signature(self._rerank)\n        bound = sig.bind_partial(*args, **kwargs)\n        bound.apply_defaults()\n\n        if \"documents\" not in bound.arguments or \"query\" not in bound.arguments:\n            raise KeyError(\"'documents' or 'query' argument not found in args/kwargs\")\n\n        documents = bound.arguments[\"documents\"]\n        query = bound.arguments[\"query\"]\n\n        extra_args = {\n            k: v\n            for k, v in bound.arguments.items()\n            if k not in (\"documents\", \"query\", \"kwargs\")\n        }\n        extra_kwargs = {**extra_args, **bound.arguments.get(\"kwargs\", {})}\n        return documents, query, extra_kwargs\n\n    def _get_batch_size(self, *args, **kwargs) -> int:\n        reranks = self._extract_rerank_kwargs(args, kwargs)[0]\n        if isinstance(reranks, list):\n            return len(reranks)\n        else:\n            return 1\n\n    @staticmethod\n    def flag_engine_match_query_doc(prompt: str, query: str, doc: str) -> bool:\n        \"\"\"\n        prompt: str, query: str, doc: str\n        \"\"\"\n        try:\n            a_start = prompt.index(\"A: \") + len(\"A: \")\n        except ValueError:\n            return False\n\n        # from A: after exact match query\n        a_slice = prompt[a_start : a_start + len(query)]\n        if a_slice != query:\n            return False\n\n        doc_prompt = prompt[a_start + len(query) :]\n        try:\n            b_start = doc_prompt.index(\"B: \") + len(\"B: \")\n        except ValueError:\n            return False\n\n        # from B: after exact match doc\n        b_slice = doc_prompt[b_start : b_start + len(doc)]\n        if b_slice != doc:\n            return False\n        sep = \"\\n\"\n        default_prompt = \"Given a query A and a passage B, determine whether the passage contains an answer to the query by providing a prediction of either 'Yes' or 'No'.\"\n\n        remain_prompt = doc_prompt[b_start + len(doc) :]\n        if remain_prompt != f\" {sep} {default_prompt}\":\n            return False\n\n        return True\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        return True\n\n    @classmethod\n    def match_json(\n        cls,\n        model_family: RerankModelFamilyV2,\n        model_spec: RerankSpecV1,\n        quantization: str,\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_family.model_name.startswith(\"Qwen3-VL-Reranker\"):\n            dep_check = check_dependency_available(\"transformers\", \"transformers\")\n            if dep_check != True:\n                return dep_check\n            dep_check = check_dependency_available(\"qwen_vl_utils\", \"qwen_vl_utils\")\n            if dep_check != True:\n                return dep_check\n            dep_check = check_dependency_available(\"PIL\", \"Pillow\")\n            if dep_check != True:\n                return dep_check\n            dep_check = check_dependency_available(\"scipy\", \"scipy\")\n            if dep_check != True:\n                return dep_check\n            if model_spec.model_format not in [\"pytorch\"]:\n                return False, \"Qwen3-VL reranker supports pytorch format only\"\n            return True\n        dep_check = check_dependency_available(\n            \"sentence_transformers\", \"sentence-transformers\"\n        )\n        if dep_check != True:\n            return dep_check\n        if model_spec.model_format not in [\"pytorch\"]:\n            return False, \"SentenceTransformer rerank engine requires pytorch format\"\n        return True\n"
  },
  {
    "path": "xinference/model/rerank/sentence_transformers/tests/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/rerank/sentence_transformers/tests/test_sentence_transformers.py",
    "content": "import shutil\n\nfrom ...cache_manager import RerankCacheManager\nfrom ...core import RerankModelFamilyV2, TransformersRerankSpecV1\nfrom ..core import SentenceTransformerRerankModel\n\nTEST_MODEL_SPEC = RerankModelFamilyV2(\n    version=2,\n    model_name=\"bge-reranker-base\",\n    type=\"normal\",\n    max_tokens=512,\n    language=[\"en\", \"zh\"],\n    model_specs=[\n        TransformersRerankSpecV1(\n            model_id=\"BAAI/bge-reranker-base\",\n            model_revision=\"465b4b7ddf2be0a020c8ad6e525b9bb1dbb708ae\",\n            model_format=\"pytorch\",\n        )\n    ],\n)\n\n\nasync def test_model():\n    model_path = None\n    try:\n        model_path = RerankCacheManager(TEST_MODEL_SPEC).cache()\n        model = SentenceTransformerRerankModel(\n            \"mock\", model_path, TEST_MODEL_SPEC, \"none\"\n        )\n\n        query = \"A man is eating pasta.\"\n        # With all sentences in the corpus\n        corpus = [\n            \"A man is eating food.\",\n            \"A man is eating a piece of bread.\",\n            \"The girl is carrying a baby.\",\n            \"A man is riding a horse.\",\n            \"A woman is playing violin.\",\n            \"Two men pushed carts through the woods.\",\n            \"A man is riding a white horse on an enclosed ground.\",\n            \"A monkey is playing drums.\",\n            \"A cheetah is running behind its prey.\",\n        ]\n        model.load()\n        scores = await model.rerank(corpus, query, None, None, True, True)\n        assert scores[\"results\"][0][\"index\"] == 0\n        assert scores[\"results\"][0][\"document\"][\"text\"] == corpus[0]\n\n        n_tokens = scores[\"meta\"][\"tokens\"][\"input_tokens\"]\n        tokenizer = model._model.tokenizer\n        expect_n_tokens = sum(len(tokenizer.tokenize([query, d])) for d in corpus)\n        assert n_tokens >= expect_n_tokens\n\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n"
  },
  {
    "path": "xinference/model/rerank/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/rerank/tests/test_qwen3_vl_reranker_virtualenv.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport site\nimport sys\n\nimport pytest\nimport torch\n\nfrom xinference.constants import XINFERENCE_VIRTUAL_ENV_DIR\nfrom xinference.core import worker as worker_mod\nfrom xinference.core.worker import WorkerActor\nfrom xinference.model.rerank import _install\nfrom xinference.model.rerank.cache_manager import RerankCacheManager\nfrom xinference.model.rerank.core import create_rerank_model_instance\nfrom xinference.model.rerank.rerank_family import match_rerank\nfrom xinference.model.utils import check_dependency_available\n\n\ndef _get_cached_model_path():\n    family = match_rerank(\"Qwen3-VL-Reranker-2B\", \"pytorch\", \"none\")\n    cache_manager = RerankCacheManager(family)\n    return cache_manager.cache()\n\n\ndef _get_virtualenv_site_packages(env_path: str) -> str:\n    py_version = f\"{sys.version_info.major}.{sys.version_info.minor}\"\n    if os.name == \"nt\":\n        return os.path.join(env_path, \"Lib\", \"site-packages\")\n    return os.path.join(env_path, \"lib\", f\"python{py_version}\", \"site-packages\")\n\n\ndef _purge_modules(prefixes):\n    for name in list(sys.modules):\n        if any(name == prefix or name.startswith(f\"{prefix}.\") for prefix in prefixes):\n            sys.modules.pop(name, None)\n\n\ndef _prepare_engine_virtualenv(engine_name: str, virtual_env_packages=None):\n    family = match_rerank(\"Qwen3-VL-Reranker-2B\", \"pytorch\", \"none\")\n    py_version = (\n        f\"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}\"\n    )\n    env_path = os.path.join(\n        XINFERENCE_VIRTUAL_ENV_DIR,\n        \"v4\",\n        family.model_name,\n        engine_name.lower(),\n        py_version,\n    )\n    manager = WorkerActor._create_virtual_env_manager(True, None, env_path)\n    assert manager is not None\n    previous_skip_installed = worker_mod.XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED\n    worker_mod.XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED = False\n    WorkerActor._prepare_virtual_env(\n        manager,\n        family.virtualenv,\n        virtual_env_packages=virtual_env_packages,\n        model_engine=engine_name,\n    )\n    worker_mod.XINFERENCE_VIRTUAL_ENV_SKIP_INSTALLED = previous_skip_installed\n    site_packages = _get_virtualenv_site_packages(env_path)\n    if os.path.isdir(site_packages):\n        site.addsitedir(site_packages)\n        if site_packages in sys.path:\n            sys.path.remove(site_packages)\n            sys.path.insert(0, site_packages)\n    return env_path\n\n\ndef test_qwen3_vl_reranker_sentence_transformers_startup_virtualenv():\n    if not torch.cuda.is_available():\n        pytest.skip(\"Qwen3-VL reranker startup tests require GPU\")\n    _install()\n    _prepare_engine_virtualenv(\n        \"sentence_transformers\",\n        virtual_env_packages=[\n            \"transformers>=4.57.0\",\n            \"qwen-vl-utils>=0.0.14\",\n            \"Pillow\",\n            \"scipy\",\n        ],\n    )\n    _purge_modules([\"transformers\", \"qwen_vl_utils\", \"PIL\", \"scipy\"])\n    for module_name, friendly in (\n        (\"transformers\", \"transformers\"),\n        (\"qwen_vl_utils\", \"qwen-vl-utils\"),\n        (\"PIL\", \"Pillow\"),\n        (\"scipy\", \"scipy\"),\n    ):\n        dep_check = check_dependency_available(module_name, friendly)\n        if dep_check != True:\n            pytest.skip(dep_check[1])\n    model_path = _get_cached_model_path()\n    model = create_rerank_model_instance(\n        \"qwen3-vl-reranker-st\",\n        \"Qwen3-VL-Reranker-2B\",\n        \"sentence_transformers\",\n        model_format=\"pytorch\",\n        quantization=\"none\",\n        model_path=model_path,\n        enable_virtual_env=True,\n    )\n    model.load()\n"
  },
  {
    "path": "xinference/model/rerank/tests/test_rerank.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport os\nimport shutil\nimport tempfile\n\nimport pytest\n\nfrom ....client import Client\n\n\n@pytest.mark.parametrize(\"model_name\", [\"bge-reranker-v2-m3\", \"bge-reranker-base\"])\n@pytest.mark.parametrize(\"model_engine\", [\"sentence_transformers\", \"vllm\"])\ndef test_restful_api(model_name, model_engine, setup):\n    if model_name == \"bge-reranker-base\" and model_engine == \"vllm\":\n        pytest.skip(\"bge-reranker-base exceeds the max_model_len( 560 > 512 ) of vllm\")\n    if model_engine == \"vllm\":\n        pytest.importorskip(\"vllm\", reason=\"vllm is not installed\")\n\n    # Skip network-intensive tests on CI to avoid timeout issues\n    import os\n\n    if os.environ.get(\"CI\") and model_engine == \"sentence_transformers\":\n        pytest.skip(\"Skip network-intensive rerank test on CI to avoid timeout\")\n    endpoint, _ = setup\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_name=model_name,\n        model_type=\"rerank\",\n        model_engine=model_engine,\n    )\n    assert len(client.list_models()) == 1\n    model = client.get_model(model_uid)\n    # We want to compute the similarity between the query sentence\n    query = \"A man is eating pasta.\"\n\n    # With all sentences in the corpus\n    corpus = [\n        \"A man is eating food.\",\n        \"A man is eating a piece of bread.\",\n        \"The girl is carrying a baby.\",\n        \"A man is riding a horse.\",\n        \"A woman is playing violin.\",\n        \"Two men pushed carts through the woods.\",\n        \"A man is riding a white horse on an enclosed ground.\",\n        \"A monkey is playing drums.\",\n        \"A cheetah is running behind its prey.\",\n    ]\n\n    scores = model.rerank(corpus, query, return_documents=True)\n    assert scores[\"results\"][0][\"index\"] == 0\n    assert scores[\"results\"][0][\"document\"][\"text\"] == corpus[0]\n\n    scores = model.rerank(corpus, query, top_n=3, return_documents=True)\n    assert len(scores[\"results\"]) == 3\n    assert scores[\"results\"][0][\"index\"] == 0\n    assert scores[\"results\"][0][\"document\"][\"text\"] == corpus[0]\n\n    scores = model.rerank(corpus, query, return_len=True)\n    assert (\n        scores[\"meta\"][\"tokens\"][\"input_tokens\"]\n        == scores[\"meta\"][\"tokens\"][\"output_tokens\"]\n    )\n\n    scores = model.rerank(corpus, query)\n    assert scores[\"meta\"][\"tokens\"] is None\n\n    # testing long input\n    corpus2 = corpus.copy()\n    corpus2[-1] = corpus2[-1] * 50\n    scores = model.rerank(corpus2, query, top_n=3, return_documents=True)\n    assert len(scores[\"results\"]) == 3\n    assert scores[\"results\"][0][\"index\"] == 0\n    assert scores[\"results\"][0][\"document\"][\"text\"] == corpus2[0]\n\n    kwargs = {\n        \"invalid\": \"invalid\",\n    }\n    with pytest.raises(RuntimeError):\n        model.rerank(corpus, query, **kwargs)\n\n\ndef test_from_local_uri():\n    from ..cache_manager import RerankCacheManager\n    from ..core import TransformersRerankSpecV1\n    from ..custom import CustomRerankModelFamilyV2\n\n    tmp_dir = tempfile.mkdtemp()\n\n    model_family = CustomRerankModelFamilyV2(\n        model_name=\"custom_test_rerank_a\",\n        max_tokens=2048,\n        language=[\"zh\"],\n        model_specs=[\n            TransformersRerankSpecV1(\n                model_format=\"pytorch\",\n                model_id=\"test/custom_test_a\",\n                model_uri=os.path.abspath(tmp_dir),\n                quantization=\"none\",\n            )\n        ],\n    )\n\n    cache_dir = RerankCacheManager(model_family=model_family).cache()\n    assert os.path.exists(cache_dir)\n    assert os.path.islink(cache_dir)\n    os.remove(cache_dir)\n    shutil.rmtree(tmp_dir, ignore_errors=True)\n\n\ndef test_register_custom_rerank():\n    from ....constants import XINFERENCE_CACHE_DIR\n    from ..cache_manager import RerankCacheManager\n    from ..core import TransformersRerankSpecV1\n    from ..custom import CustomRerankModelFamilyV2, register_rerank, unregister_rerank\n\n    tmp_dir = tempfile.mkdtemp()\n\n    # correct\n    model_family = CustomRerankModelFamilyV2(\n        model_name=\"custom_test_rerank_b\",\n        max_tokens=2048,\n        language=[\"zh\"],\n        model_specs=[\n            TransformersRerankSpecV1(\n                model_format=\"pytorch\",\n                model_id=\"test/custom_test_b\",\n                model_uri=os.path.abspath(tmp_dir),\n                quantization=\"none\",\n            )\n        ],\n    )\n\n    register_rerank(model_family, False)\n    RerankCacheManager(model_family=model_family).cache()\n    model_cache_path = os.path.join(\n        XINFERENCE_CACHE_DIR, \"v2/\" + model_family.model_name + \"-pytorch-none\"\n    )\n    assert os.path.exists(model_cache_path)\n    assert os.path.islink(model_cache_path)\n    os.remove(model_cache_path)\n\n    # Invalid path\n    model_family = CustomRerankModelFamilyV2(\n        model_name=\"custom_test_rerank_c\",\n        max_tokens=2048,\n        language=[\"zh\"],\n        model_specs=[\n            TransformersRerankSpecV1(\n                model_format=\"pytorch\",\n                model_id=\"test/custom_test_b\",\n                model_uri=\"file:///sssad/faf\",\n                quantization=\"none\",\n            )\n        ],\n    )\n    with pytest.raises(ValueError):\n        register_rerank(model_family, False)\n\n    # name conflict\n    model_family = CustomRerankModelFamilyV2(\n        model_name=\"custom_test_rerank_c\",\n        max_tokens=2048,\n        language=[\"zh\"],\n        model_specs=[\n            TransformersRerankSpecV1(\n                model_format=\"pytorch\",\n                model_id=\"test/custom_test_b\",\n                model_uri=os.path.abspath(tmp_dir),\n                quantization=\"none\",\n            )\n        ],\n    )\n    register_rerank(model_family, False)\n    with pytest.raises(ValueError):\n        register_rerank(model_family, False)\n\n    # unregister\n    unregister_rerank(\"custom_test_rerank_b\")\n    unregister_rerank(\"custom_test_rerank_c\")\n    with pytest.raises(ValueError):\n        unregister_rerank(\"custom_test_rerank_d\")\n\n    shutil.rmtree(tmp_dir, ignore_errors=True)\n\n\ndef test_auto_detect_type():\n    from ..core import RerankModel\n\n    rerank_model_json = os.path.join(os.path.dirname(__file__), \"../model_spec.json\")\n    with open(rerank_model_json, \"r\") as f:\n        rerank_models = json.load(f)\n    for m in rerank_models:\n        if m[\"model_name\"] == \"minicpm-reranker\":\n            # TODO: we need to fix the auto detect type\n            continue\n        try:\n            assert m[\"type\"] == RerankModel._auto_detect_type(\n                m[\"model_specs\"][0][\"model_src\"][\"huggingface\"][\"model_id\"]\n            )\n        except EnvironmentError:\n            # gated repo, ignore\n            continue\n"
  },
  {
    "path": "xinference/model/rerank/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import TYPE_CHECKING, Any\n\nif TYPE_CHECKING:\n    from .core import RerankModelFamilyV2\n\n\ndef get_model_version(rerank_model: \"RerankModelFamilyV2\") -> str:\n    return rerank_model.model_name\n\n\ninstruction_cfg = {\n    \"minicpm-reranker\": \"Query: \",\n}\n\n\ndef preprocess_sentence(query: str, instruction: Any, model_name: str) -> str:\n    if instruction and isinstance(instruction, str):\n        return f\"{instruction}{query}\"\n    if instruction is None:\n        for k, v in instruction_cfg.items():\n            if k.lower() in model_name.lower():\n                return f\"{v}{query}\"\n    return query\n"
  },
  {
    "path": "xinference/model/rerank/vllm/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/rerank/vllm/core.py",
    "content": "import gc\nimport inspect\nimport logging\nimport uuid\nfrom collections import defaultdict\nfrom typing import Any, List, Optional, Tuple, Union\n\nfrom xoscar import extensible\n\nfrom ....device_utils import empty_cache, is_vacc_available\nfrom ....types import Document, DocumentObj, Meta, Rerank, RerankTokens\nfrom ....utils import make_hashable\nfrom ...batch import BatchMixin\nfrom ...utils import check_dependency_available\nfrom ..core import (\n    RERANK_EMPTY_CACHE_COUNT,\n    RerankModel,\n    RerankModelFamilyV2,\n    RerankSpecV1,\n)\n\nlogger = logging.getLogger(__name__)\nSUPPORTED_MODELS_PREFIXES = [\"bge\", \"gte\", \"text2vec\", \"m3e\", \"gte\", \"Qwen3\"]\n\n\nclass VLLMRerankModel(RerankModel, BatchMixin):\n    def __init__(self, *args, **kwargs) -> None:\n        RerankModel.__init__(self, *args, **kwargs)\n        BatchMixin.__init__(self, self.rerank, **kwargs)  # type: ignore\n\n    def load(self):\n        try:\n            if is_vacc_available():\n                import vllm_vacc  # noqa: F401\n            from packaging.version import Version\n            from vllm import LLM\n            from vllm import __version__ as vllm_version\n\n        except ImportError:\n            error_message = \"Failed to import module 'vllm'\"\n            installation_guide = [\n                \"Please make sure 'vllm' is installed. \",\n                \"You can install it by `pip install vllm`\\n\",\n            ]\n\n            raise ImportError(f\"{error_message}\\n\\n{''.join(installation_guide)}\")\n\n        self._kwargs.pop(\"batch_size\", None)\n        self._kwargs.pop(\"batch_interval\", None)\n\n        if self.model_family.model_name in {\n            \"Qwen3-Reranker-0.6B\",\n            \"Qwen3-Reranker-4B\",\n            \"Qwen3-Reranker-8B\",\n        }:\n            if \"hf_overrides\" not in self._kwargs:\n                self._kwargs[\"hf_overrides\"] = {\n                    \"architectures\": [\"Qwen3ForSequenceClassification\"],\n                    \"classifier_from_token\": [\"no\", \"yes\"],\n                    \"is_original_qwen3_reranker\": True,\n                }\n            elif isinstance(self._kwargs[\"hf_overrides\"], dict):\n                self._kwargs[\"hf_overrides\"].update(\n                    architectures=[\"Qwen3ForSequenceClassification\"],\n                    classifier_from_token=[\"no\", \"yes\"],\n                    is_original_qwen3_reranker=True,\n                )\n        if Version(vllm_version) >= Version(\"0.13.0\"):\n            self._model = LLM(model=self._model_path, **self._kwargs)\n        else:\n            self._model = LLM(model=self._model_path, task=\"score\", **self._kwargs)\n        self._tokenizer = self._model.get_tokenizer()\n\n    def _rerank(\n        self,\n        documents: List[str],\n        query: Union[str, List[str]],\n        top_n: Optional[int] = None,\n        max_chunks_per_doc: Optional[int] = None,\n        return_documents: Optional[bool] = None,\n        return_len: Optional[bool] = None,\n        **kwargs,\n    ) -> list[Any]:\n        \"\"\"\n        Rerank the documents based on the query using the VLLM model.\n\n        Args:\n            documents (List[str]): List of documents to be reranked.\n            query (str): The query string to rank the documents against.\n            top_n (Optional[int]): The number of top documents to return.\n            max_chunks_per_doc (Optional[int]): Maximum chunks per document.\n            return_documents (Optional[bool]): Whether to return the documents.\n            return_len (Optional[bool]): Whether to return the length of the documents.\n\n        Returns:\n            Rerank: The reranked results.\n        \"\"\"\n        if kwargs:\n            raise RuntimeError(\"Unexpected keyword arguments: {}\".format(kwargs))\n        assert self._model is not None\n\n        documents_size = len(documents)\n        if isinstance(query, str):\n            query_list = [query] * documents_size\n        else:\n            query_list = query\n\n        if self.model_family.model_name in {\n            \"Qwen3-Reranker-0.6B\",\n            \"Qwen3-Reranker-4B\",\n            \"Qwen3-Reranker-8B\",\n        }:\n            instruction = \"Given a web search query, retrieve relevant passages that answer the query\"\n            prefix = (\n                \"<|im_start|>system\\nJudge whether the Document meets the requirements based on\"\n                \" the Query and the Instruct provided. \"\n                'Note that the answer can only be \"yes\" or \"no\".<|im_end|>\\n<|im_start|>user\\n'\n            )\n            suffix = \"<|im_end|>\\n<|im_start|>assistant\\n<think>\\n\\n</think>\\n\\n\"\n            query_template = \"{prefix}<Instruct>: {instruction}\\n<Query>: {query}\\n\"\n            document_template = \"<Document>: {doc}{suffix}\"\n            processed_queries = [\n                query_template.format(\n                    prefix=prefix, instruction=instruction, query=query\n                )\n                for query in query_list\n            ]\n            processed_documents = [\n                document_template.format(doc=doc, suffix=suffix) for doc in documents\n            ]\n            outputs = self._model.score(\n                processed_queries,\n                processed_documents,\n                use_tqdm=False,\n            )\n\n        else:\n            outputs = self._model.score(\n                query_list,\n                documents,\n                use_tqdm=False,\n            )\n        # clear cache if possible\n        self._counter += 1\n        if self._counter % RERANK_EMPTY_CACHE_COUNT == 0:\n            logger.debug(\"Empty rerank cache.\")\n            gc.collect()\n            empty_cache()\n        return outputs\n\n    @extensible\n    def rerank(\n        self,\n        documents: List[str],\n        query: str,\n        top_n: Optional[int] = None,\n        max_chunks_per_doc: Optional[int] = None,\n        return_documents: Optional[bool] = None,\n        return_len: Optional[bool] = None,\n        **kwargs,\n    ) -> Rerank:\n        \"\"\"\n        Rerank the documents based on the query using the VLLM model.\n\n        Args:\n            documents (List[str]): List of documents to be reranked.\n            query (str): The query string to rank the documents against.\n            top_n (Optional[int]): The number of top documents to return.\n            max_chunks_per_doc (Optional[int]): Maximum chunks per document.\n            return_documents (Optional[bool]): Whether to return the documents.\n            return_len (Optional[bool]): Whether to return the length of the documents.\n\n        Returns:\n            Rerank: The reranked results.\n        \"\"\"\n        documents_size = len(documents)\n        query_list = [query] * documents_size\n        outputs = self._rerank(\n            documents,\n            query_list,\n            top_n,\n            max_chunks_per_doc,\n            return_documents,\n            return_len,\n            **kwargs,\n        )\n        scores = map(lambda scoreoutput: scoreoutput.outputs.score, outputs)\n        documents = list(map(lambda doc: Document(text=doc), documents))\n        document_parts = list(zip(range(documents_size), scores, documents))\n        document_parts.sort(key=lambda x: x[1], reverse=True)\n        if top_n is not None:\n            document_parts = document_parts[:top_n]\n        reranked_docs = list(\n            map(\n                lambda doc: DocumentObj(\n                    index=doc[0],\n                    relevance_score=doc[1],\n                    document=doc[2] if return_documents else None,\n                ),\n                document_parts,\n            )\n        )\n        tokens = sum(map(lambda x: len(x.prompt_token_ids), outputs))\n        metadata = Meta(\n            api_version=None,\n            billed_units=None,\n            tokens=(\n                RerankTokens(input_tokens=tokens, output_tokens=tokens)\n                if return_len\n                else None\n            ),\n            warnings=None,\n        )\n        return Rerank(id=str(uuid.uuid4()), results=reranked_docs, meta=metadata)\n\n    @rerank.batch  # type: ignore\n    def rerank(self, args_list, kwargs_list):\n        grouped = defaultdict(\n            lambda: {\n                \"documents\": [],\n                \"query\": [],\n                \"offsets\": [],\n                \"kwargs\": None,\n                \"indices\": [],\n            }\n        )\n\n        # 1. Group by kwargs hash\n        for i, (args, kwargs) in enumerate(zip(args_list, kwargs_list)):\n\n            documents, query, extra_kwargs = self._extract_rerank_kwargs(args, kwargs)\n\n            key = make_hashable(extra_kwargs)\n            group = grouped[key]\n            group[\"kwargs\"] = extra_kwargs\n\n            current_offset = len(group[\"documents\"])\n            documents_size = len(documents)\n            group[\"offsets\"].append((current_offset, documents_size))\n            group[\"documents\"].extend(documents)\n            group[\"query\"].extend([query] * documents_size)\n            group[\"indices\"].append(i)  # remember original position\n\n        results_with_index = []\n\n        # 2. Process each group separately\n        for key, group in grouped.items():\n            documents = group[\"documents\"]\n            query = group[\"query\"]\n            kwargs = group[\"kwargs\"]\n            offsets = group[\"offsets\"]\n            indices = group[\"indices\"]\n            score_list = self._rerank(documents, query, **kwargs)\n\n            top_n = kwargs.pop(\"top_n\", None)\n            return_documents = kwargs.pop(\"return_documents\", None)\n            return_len = kwargs.pop(\"return_len\", None)\n\n            # 3. Split and attach original index\n            for (offset, n), idx in zip(offsets, indices):\n                tmp_documents = group[\"documents\"][offset : offset + n]\n                data = score_list[offset : offset + n]\n                scores = map(lambda scoreoutput: scoreoutput.outputs.score, data)\n                tmp_documents = list(map(lambda doc: Document(text=doc), tmp_documents))\n                document_parts = list(zip(range(n), scores, tmp_documents))\n                document_parts.sort(key=lambda x: x[1], reverse=True)\n                if top_n is not None:\n                    document_parts = document_parts[:top_n]\n                reranked_docs = list(\n                    map(\n                        lambda doc: DocumentObj(\n                            index=doc[0],\n                            relevance_score=doc[1],\n                            document=doc[2] if return_documents else None,\n                        ),\n                        document_parts,\n                    )\n                )\n                tokens = sum(map(lambda x: len(x.prompt_token_ids), data))\n                metadata = Meta(\n                    api_version=None,\n                    billed_units=None,\n                    tokens=(\n                        RerankTokens(input_tokens=tokens, output_tokens=tokens)\n                        if return_len\n                        else None\n                    ),\n                    warnings=None,\n                )\n                result = Rerank(\n                    id=str(uuid.uuid4()), results=reranked_docs, meta=metadata\n                )\n                results_with_index.append((idx, result))\n\n        # 4. Sort by original call order\n        results_with_index.sort(key=lambda x: x[0])\n        results = [r for _, r in results_with_index]\n        return results\n\n    def _extract_rerank_kwargs(self, args, kwargs):\n        \"\"\"\n        Extract the 'documents' and 'query' argument and remaining kwargs from (*args, **kwargs)\n        for a given function.\n\n        This uses inspect.signature(func).bind_partial() to automatically match\n        both positional and keyword arguments, while handling bound methods\n        (functions with 'self' as the first parameter).\n\n        Args:\n            func: The target function whose parameters define how to bind args/kwargs.\n            args: The positional arguments passed to the function.\n            kwargs: The keyword arguments passed to the function.\n\n        Returns:\n            A tuple (documents, query, extra_kwargs), where:\n              - documents: The extracted 'documents' argument (never None).\n              - query: The extracted 'query' argument (never None).\n              - extra_kwargs: Remaining keyword arguments excluding 'documents' and 'query'.\n\n        Raises:\n            KeyError: If 'documents' or 'query' argument is not found.\n            TypeError: If args/kwargs do not match the function signature.\n        \"\"\"\n        sig = inspect.signature(self._rerank)\n        bound = sig.bind_partial(*args, **kwargs)\n        bound.apply_defaults()\n\n        if \"documents\" not in bound.arguments or \"query\" not in bound.arguments:\n            raise KeyError(\"'documents' or 'query' argument not found in args/kwargs\")\n\n        documents = bound.arguments[\"documents\"]\n        query = bound.arguments[\"query\"]\n\n        extra_args = {\n            k: v\n            for k, v in bound.arguments.items()\n            if k not in (\"documents\", \"query\", \"kwargs\")\n        }\n        extra_kwargs = {**extra_args, **bound.arguments.get(\"kwargs\", {})}\n        return documents, query, extra_kwargs\n\n    def _get_batch_size(self, *args, **kwargs) -> int:\n        reranks = self._extract_rerank_kwargs(args, kwargs)[0]\n        if isinstance(reranks, list):\n            return len(reranks)\n        else:\n            return 1\n\n    def stop(self):\n        logger.info(\"Stopping vLLM rerank engine\")\n        try:\n            if self._model is None:\n                return\n            engine = getattr(self._model, \"llm_engine\", None) or getattr(\n                self._model, \"engine\", None\n            )\n            if engine is not None and hasattr(engine, \"shutdown\"):\n                engine.shutdown()\n            if hasattr(self._model, \"shutdown\"):\n                self._model.shutdown()\n        finally:\n            self._model = None\n            gc.collect()\n            empty_cache()\n\n    @classmethod\n    def check_lib(cls) -> Union[bool, Tuple[bool, str]]:\n        dep_check = check_dependency_available(\"vllm\", \"vLLM\")\n        if dep_check != True:\n            return dep_check\n        return True\n\n    @classmethod\n    def match_json(\n        cls,\n        model_family: RerankModelFamilyV2,\n        model_spec: RerankSpecV1,\n        quantization: str,\n    ) -> Union[bool, Tuple[bool, str]]:\n        if model_family.model_name.startswith(\"Qwen3-VL-Reranker\"):\n            return False, \"Qwen3-VL reranker requires vLLM>=0.14.0\"\n        if model_spec.model_format not in [\"pytorch\"]:\n            return False, \"vLLM rerank engine only supports pytorch format\"\n        prefix = model_family.model_name.split(\"-\", 1)[0]\n        if prefix not in SUPPORTED_MODELS_PREFIXES:\n            return (\n                False,\n                f\"Model family {model_family.model_name} is not supported by vLLM rerank engine\",\n            )\n        return True\n"
  },
  {
    "path": "xinference/model/rerank/vllm/tests/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/model/rerank/vllm/tests/test_vllm.py",
    "content": "import shutil\n\nimport pytest\n\nfrom .....client import Client\nfrom ...cache_manager import RerankCacheManager\nfrom ...core import RerankModelFamilyV2, TransformersRerankSpecV1\nfrom ..core import VLLMRerankModel\n\nTEST_MODEL_SPEC = RerankModelFamilyV2(\n    version=2,\n    model_name=\"bge-reranker-base\",\n    type=\"normal\",\n    max_tokens=512,\n    language=[\"en\", \"zh\"],\n    model_specs=[\n        TransformersRerankSpecV1(\n            model_id=\"BAAI/bge-reranker-base\",\n            model_revision=\"465b4b7ddf2be0a020c8ad6e525b9bb1dbb708ae\",\n            model_format=\"pytorch\",\n        )\n    ],\n)\n\n\n@pytest.mark.skipif(VLLMRerankModel.check_lib() != True, reason=\"vllm not installed\")\ndef test_model():\n    model_path = None\n    try:\n        model_path = RerankCacheManager(TEST_MODEL_SPEC).cache()\n        model = VLLMRerankModel(\"mock\", model_path, TEST_MODEL_SPEC, \"none\")\n\n        query = \"A man is eating pasta.\"\n        # With all sentences in the corpus\n        corpus = [\n            \"A man is eating food.\",\n            \"A man is eating a piece of bread.\",\n            \"The girl is carrying a baby.\",\n            \"A man is riding a horse.\",\n            \"A woman is playing violin.\",\n            \"Two men pushed carts through the woods.\",\n            \"A man is riding a white horse on an enclosed ground.\",\n            \"A monkey is playing drums.\",\n            \"A cheetah is running behind its prey.\",\n        ]\n        model.load()\n        scores = model.rerank(corpus, query, None, None, True, True)\n        assert scores[\"results\"][0][\"index\"] == 0\n        assert scores[\"results\"][0][\"document\"][\"text\"] == corpus[0]\n\n    finally:\n        if model_path is not None:\n            shutil.rmtree(model_path, ignore_errors=True)\n\n\n@pytest.mark.skipif(VLLMRerankModel.check_lib() != True, reason=\"vllm not installed\")\ndef test_qwen3_vllm(setup):\n    endpoint, _ = setup\n    client = Client(endpoint)\n    model_uid = client.launch_model(\n        model_name=\"Qwen3-Reranker-0.6B\",\n        model_type=\"rerank\",\n        model_engine=\"vllm\",\n    )\n\n    model = client.get_model(model_uid)\n    # We want to compute the similarity between the query sentence\n    query = \"A man is eating pasta.\"\n\n    # With all sentences in the corpus\n    corpus = [\n        \"A man is eating food.\",\n        \"A man is eating a piece of bread.\",\n        \"The girl is carrying a baby.\",\n        \"A man is riding a horse.\",\n        \"A woman is playing violin.\",\n        \"Two men pushed carts through the woods.\",\n        \"A man is riding a white horse on an enclosed ground.\",\n        \"A monkey is playing drums.\",\n        \"A cheetah is running behind its prey.\",\n    ]\n\n    scores = model.rerank(corpus, query, return_documents=True)\n    assert scores[\"results\"][0][\"index\"] == 1\n"
  },
  {
    "path": "xinference/model/scheduler/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom .batch import BatchScheduler\nfrom .core import AbortRequestMessage\nfrom .request import InferenceRequest\n\n__all__ = [\"BatchScheduler\", \"InferenceRequest\", \"AbortRequestMessage\"]\n"
  },
  {
    "path": "xinference/model/scheduler/batch.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport logging\nfrom collections import deque\nfrom typing import Dict, List, Optional, Set, Union\n\nfrom .core import (\n    XINFERENCE_NON_STREAMING_ABORT_FLAG,\n    XINFERENCE_STREAMING_ABORT_FLAG,\n    XINFERENCE_STREAMING_DONE_FLAG,\n    XINFERENCE_STREAMING_ERROR_FLAG,\n    AbortRequestMessage,\n)\nfrom .request import InferenceRequest\n\nlogger = logging.getLogger(__name__)\n\n\nclass BatchScheduler:\n    def __init__(self, model):\n        self._waiting_queue: deque[InferenceRequest] = deque()  # type: ignore\n        self._running_queue: deque[InferenceRequest] = deque()  # type: ignore\n        self._model = model\n        self._id_to_req = {}\n        self._abort_req_ids: Set[str] = set()  # type: ignore\n        self._running = False\n        self._task = None\n\n    async def start(self):\n        \"\"\"Start the scheduler background task\"\"\"\n        if self._running:\n            return\n        self._running = True\n        self._task = asyncio.create_task(self._run())\n\n    async def stop(self):\n        \"\"\"Stop the scheduler background task\"\"\"\n        self._running = False\n        if self._task:\n            self._task.cancel()\n            try:\n                await self._task\n            except asyncio.CancelledError:\n                pass\n            self._task = None\n\n    def get_max_num_seqs(self):\n        assert self._model is not None\n        return self._model.get_max_num_seqs()\n\n    def _check_request_aborted(self, req: InferenceRequest):\n        if req.request_id and req.request_id in self._abort_req_ids:\n            req.aborted = True\n            req.stopped = True\n\n    def _handle_request(self) -> Optional[List[InferenceRequest]]:\n        if self._model is None:\n            return None\n        max_num_seqs = self.get_max_num_seqs()\n        # currently, FCFS strategy\n        running_list: List[InferenceRequest] = []\n        while len(self._running_queue) > 0:\n            if len(running_list) == max_num_seqs:\n                break\n            req = self._running_queue.popleft()\n            self._check_request_aborted(req)\n            running_list.append(req)\n\n        waiting_list: List[InferenceRequest] = []\n        if len(running_list) < max_num_seqs:\n            while len(self._waiting_queue) > 0:\n                req = self._waiting_queue.popleft()\n                self._check_request_aborted(req)\n                waiting_list.append(req)\n                if len(running_list) + len(waiting_list) == max_num_seqs:\n                    break\n        # must waiting_list in front\n        return waiting_list + running_list\n\n    @staticmethod\n    def _empty_cache():\n        # Function-level import to avoid circular dependency\n        from ..llm.transformers.utils import empty_cache\n\n        empty_cache()\n\n    async def step(self):\n        req_list = self._handle_request()\n        if not req_list:\n            return\n        self._model.batch_inference(req_list)\n\n        stopped_batch_indexes = set()\n        for idx, r in enumerate(req_list):\n            if r.stream:\n                for completion in r.completion:\n                    await r.future_or_queue.put(completion)\n                r.completion = []\n\n            if not r.stopped:\n                self._running_queue.append(r)\n            else:\n                if r.new_tokens:\n                    stopped_batch_indexes.add(idx)\n                # set kv_cache to None for collection\n                r.kv_cache = None\n                rid = r.request_id\n                # clear data structure\n                if rid is not None:\n                    self._id_to_req.pop(rid, None)\n                    self._abort_req_ids.discard(rid)\n\n                if r.aborted:  # stop due to abort\n                    # handle abort result\n                    if r.stream:\n                        await r.future_or_queue.put(XINFERENCE_STREAMING_ABORT_FLAG)\n                    else:\n                        r.future_or_queue.set_result(\n                            XINFERENCE_NON_STREAMING_ABORT_FLAG\n                        )\n                else:\n                    if r.error_msg is None:  # normal stop\n                        if not r.stream:\n                            r.future_or_queue.set_result(r.completion[0])\n                        else:\n                            await r.future_or_queue.put(XINFERENCE_STREAMING_DONE_FLAG)\n                    # Abnormal stop, currently indicates that the parameter check does not pass,\n                    # and does not participate in the inference\n                    else:\n                        if not r.stream:\n                            r.future_or_queue.set_exception(ValueError(r.error_msg))\n                        else:\n                            await r.future_or_queue.put(\n                                XINFERENCE_STREAMING_ERROR_FLAG + r.error_msg\n                            )\n\n        # Some requests have been completed. Batch size needs to be reduced for kv cache.\n        if stopped_batch_indexes and len(self._running_queue) > 0:\n            kv_cache = self._running_queue[0].kv_cache\n            reduced_kv_cache = self._model.build_reduced_kv_cache(\n                kv_cache, stopped_batch_indexes\n            )\n            for r in self._running_queue:\n                r.kv_cache = reduced_kv_cache\n\n        self._empty_cache()\n\n    async def add_request(\n        self,\n        prompt_or_messages: Union[str, List[Dict]],\n        future_or_queue,\n        call_ability,\n        *args,\n        **kwargs,\n    ):\n        req = InferenceRequest(\n            prompt_or_messages, future_or_queue, True, call_ability, *args, **kwargs\n        )\n        rid = req.request_id\n        if rid is not None:\n            if rid in self._id_to_req:\n                raise KeyError(f\"Request id: {rid} has already existed!\")\n            self._id_to_req[rid] = req\n        self._waiting_queue.append(req)\n\n    async def abort_request(self, req_id: str) -> str:\n        \"\"\"\n        Abort a request.\n        Abort a submitted request. If the request is finished or not found, this method will be a no-op.\n        \"\"\"\n        if req_id not in self._id_to_req:\n            logger.info(f\"Request id: {req_id} not found. No-op for xinference.\")\n            return AbortRequestMessage.NOT_FOUND.name\n        else:\n            self._abort_req_ids.add(req_id)\n            logger.info(f\"Request id: {req_id} found to be aborted.\")\n            return AbortRequestMessage.DONE.name\n\n    async def _run(self):\n        try:\n            while self._running:\n                # wait 10ms\n                await asyncio.sleep(0.01)\n                await self.step()\n        except asyncio.CancelledError:\n            logger.debug(f\"Scheduler stopped\")\n        except Exception as e:\n            logger.exception(f\"Scheduler run with error: {e}\")\n"
  },
  {
    "path": "xinference/model/scheduler/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom enum import Enum\n\n\nclass AbortRequestMessage(Enum):\n    NOT_FOUND = 1\n    DONE = 2\n    NO_OP = 3\n\n\n# Streaming flags\nXINFERENCE_STREAMING_DONE_FLAG = \"<XINFERENCE_STREAMING_DONE>\"\nXINFERENCE_STREAMING_ERROR_FLAG = \"<XINFERENCE_STREAMING_ERROR>\"\nXINFERENCE_STREAMING_ABORT_FLAG = \"<XINFERENCE_STREAMING_ABORT>\"\nXINFERENCE_NON_STREAMING_ABORT_FLAG = \"<XINFERENCE_NON_STREAMING_ABORT>\"\n"
  },
  {
    "path": "xinference/model/scheduler/request.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport functools\nimport uuid\nfrom typing import List, Optional, Tuple\n\n\nclass InferenceRequest:\n    def __init__(\n        self,\n        prompt_or_messages,\n        future_or_queue,\n        is_prefill,\n        call_ability,\n        *args,\n        **kwargs,\n    ):\n        # original prompt, prompt(str) for generate model and messages(List[Dict]) for chat model\n        self._prompt = prompt_or_messages\n        # full prompt that contains chat history and applies chat template\n        self._full_prompt = None\n        # whether the current request is in the prefill phase\n        self._is_prefill = is_prefill\n        # the ability that the user calls this model for, that is `generate` / `chat` for now,\n        # which is for results formatting\n        self._call_ability = call_ability\n        # full prompt tokens\n        self._prompt_tokens = None\n        # all new generated tokens during decode phase\n        self._new_tokens = []\n        # kv_cache used in decode phase\n        self._kv_cache = None\n        # use passed args from upstream interface\n        self._inference_args = args\n        # use passed kwargs from upstream interface, currently for getting raw generate config from upstream,\n        # which is useful for some special models\n        self._inference_kwargs = kwargs\n        # should this request be stopped\n        self._stopped = False\n        # finish reason. If this is set, self._stopped is True.\n        self._finish_reason = None\n        # should this request be aborted\n        # note that when this flag is True, assert self._stopped is True\n        self._aborted = False\n        # sanitized generate config\n        self._sanitized_generate_config = None\n        # Chunk id for results. In stream mode, all the chunk ids should be same.\n        self._stream_chunk_id = str(uuid.uuid4())\n        # For calculate attention mask if needed\n        self.padding_len = 0\n        # Use in stream mode\n        self.last_output_length = 0\n        # For tool call\n        self.tools = None\n        # Currently, for storing tool call streaming results.\n        self.outputs: List[str] = []  # type: ignore\n        # inference results,\n        # it is a list type because when stream=True,\n        # self.completion contains all the results in a decode round.\n        self.completion = []\n        # The way upstream gets the returned results,\n        # when stream=True, it is an asyncio.Queue,\n        # and when stream=False, it is an asyncio future.\n        self.future_or_queue = future_or_queue\n        # Record error message when this request has error.\n        # Must set stopped=True when this field is set.\n        self.error_msg: Optional[str] = None  # type: ignore\n        # For compatibility. Record some extra parameters for some special cases.\n        self.extra_kwargs = {}\n\n        # check the integrity of args passed upstream\n        self._check_args()\n\n        # for reasoning_content using\n        self.previous_texts = [\"\"]\n\n    def _check_args(self):\n        assert len(self._inference_args) == 1\n        # generate config\n        assert self._inference_args[0] is None or isinstance(\n            self._inference_args[0], dict\n        )\n\n    @property\n    def prompt(self):\n        \"\"\"\n        prompt for generate model and messages for chat model\n        \"\"\"\n        return self._prompt\n\n    @prompt.setter\n    def prompt(self, value: str):\n        self._prompt = value\n\n    @property\n    def call_ability(self):\n        return self._call_ability\n\n    @property\n    def full_prompt(self):\n        return self._full_prompt\n\n    @full_prompt.setter\n    def full_prompt(self, value: str):\n        self._full_prompt = value\n\n    @property\n    def is_prefill(self):\n        return self._is_prefill\n\n    @is_prefill.setter\n    def is_prefill(self, value: bool):\n        self._is_prefill = value\n\n    @property\n    def prompt_tokens(self):\n        return self._prompt_tokens\n\n    @prompt_tokens.setter\n    def prompt_tokens(self, value: List[int]):\n        self._prompt_tokens = value\n\n    @property\n    def kv_cache(self):\n        return self._kv_cache\n\n    @kv_cache.setter\n    def kv_cache(self, value):\n        self._kv_cache = value\n\n    @property\n    def new_tokens(self):\n        return self._new_tokens\n\n    def append_new_token(self, token: int):\n        self._new_tokens.append(token)\n\n    @property\n    def generate_config(self):\n        return self._inference_args[0]\n\n    @property\n    def sanitized_generate_config(self):\n        return self._sanitized_generate_config\n\n    @sanitized_generate_config.setter\n    def sanitized_generate_config(self, value: dict):\n        self._sanitized_generate_config = value\n\n    @property\n    def inference_kwargs(self):\n        return self._inference_kwargs\n\n    @property\n    def stopped(self):\n        return self._stopped\n\n    @stopped.setter\n    def stopped(self, value: bool):\n        self._stopped = value\n\n    @property\n    def finish_reason(self):\n        return self._finish_reason\n\n    @finish_reason.setter\n    def finish_reason(self, value: Optional[str]):\n        self._finish_reason = value\n\n    @property\n    def chunk_id(self):\n        return self._stream_chunk_id\n\n    @property\n    def stream(self) -> bool:\n        return (\n            False\n            if self.generate_config is None\n            else self.generate_config.get(\"stream\", False)\n        )\n\n    @property\n    def stream_interval(self) -> int:\n        return self.sanitized_generate_config.get(\"stream_interval\", 2)\n\n    @property\n    def include_usage(self) -> bool:\n        stream_options = self.sanitized_generate_config.get(\"stream_options\", None)\n        include_usage = (\n            stream_options[\"include_usage\"]\n            if isinstance(stream_options, dict)\n            else False\n        )\n        return include_usage\n\n    @property\n    def aborted(self) -> bool:\n        return self._aborted\n\n    @aborted.setter\n    def aborted(self, value: bool):\n        self._aborted = value\n\n    @property\n    def request_id(self) -> Optional[str]:\n        return (\n            None\n            if self.generate_config is None\n            else self.generate_config.get(\"request_id\", None)\n        )\n\n    @functools.lru_cache\n    def get_generate_configs(\n        self, eos_token_id: int, builtin_stop_token_ids: Optional[Tuple[int]] = None\n    ):\n        from ...types import max_tokens_field\n\n        max_new_tokens = int(\n            self.sanitized_generate_config.get(\"max_tokens\", max_tokens_field.default)\n            or 0\n        )\n        stream_interval = self.sanitized_generate_config.get(\"stream_interval\", 2)\n        include_usage = self.include_usage\n        stop_str = self.sanitized_generate_config.get(\"stop\", None)\n        stop_token_ids = (\n            self.sanitized_generate_config.get(\"stop_token_ids\", None) or []\n        )\n        stop_token_ids = set(stop_token_ids)\n        stop_token_ids.add(eos_token_id)\n        stop_token_ids.update(builtin_stop_token_ids or [])\n        temperature = float(self.sanitized_generate_config.get(\"temperature\", 1.0))\n        repetition_penalty = float(\n            self.sanitized_generate_config.get(\"repetition_penalty\", 1.0)\n        )\n        top_p = float(self.sanitized_generate_config.get(\"top_p\", 1.0))\n        top_k = int(self.sanitized_generate_config.get(\"top_k\", -1))  # -1 means disable\n        return (\n            max_new_tokens,\n            stream_interval,\n            include_usage,\n            stop_str,\n            stop_token_ids,\n            temperature,\n            repetition_penalty,\n            top_p,\n            top_k,\n        )\n"
  },
  {
    "path": "xinference/model/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/tests/test_utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport shutil\nimport sys\n\nimport pytest\nfrom tqdm.auto import tqdm\n\nfrom ...utils import get_real_path\nfrom ..utils import (\n    CancellableDownloader,\n    _apply_virtualenv_engine_overrides,\n    _collect_virtualenv_engine_markers,\n    _extract_engine_markers_from_packages,\n    _force_virtualenv_engine_params,\n    parse_uri,\n)\n\n\ndef test_parse_uri():\n    scheme, path = parse_uri(\"dir\")\n    assert scheme == \"file\"\n    assert path == \"dir\"\n\n    scheme, path = parse_uri(\"dir/file\")\n    assert scheme == \"file\"\n    assert path == \"dir/file\"\n\n    scheme, path = parse_uri(\"s3://bucket\")\n    assert scheme == \"s3\"\n    assert path == \"bucket\"\n\n    scheme, path = parse_uri(\"s3://bucket/dir\")\n    assert scheme == \"s3\"\n    assert path == \"bucket/dir\"\n\n\ndef test_tqdm_patch():\n    downloader = CancellableDownloader(cancel_error_cls=RuntimeError)\n\n    with downloader:\n        all_bar = tqdm(total=10)\n\n        download_bars = [tqdm(total=300, unit=\"B\") for _ in range(10)]\n\n        for i in range(5):\n            download_bars[i].update(300)\n\n        all_bar.update(5)\n\n        for i in range(5, 10):\n            download_bars[i].update(150)\n\n        expect = 0.5 + 0.5 * 1 / 2\n        assert expect == downloader.get_progress()\n\n        downloader.cancel()\n\n        with pytest.raises(RuntimeError):\n            all_bar.update(6)\n\n    assert downloader.done\n\n\ndef test_extract_engine_markers_from_packages():\n    packages = [\n        'vllm ; #engine# == \"vllm\"',\n        \"sglang ; #model_engine# == 'sglang'\",\n        \"transformers>=4.51.0\",\n    ]\n    assert _extract_engine_markers_from_packages(packages) == {\"vllm\", \"sglang\"}\n\n\ndef test_collect_virtualenv_engine_markers_platform_gating():\n    class _VirtualEnv:\n        packages = ['mlx-lm ; #engine# == \"mlx\"', 'vllm ; #engine# == \"vllm\"']\n\n    class _Family:\n        virtualenv = _VirtualEnv()\n        model_specs = []\n\n    engines = _collect_virtualenv_engine_markers(_Family())\n    assert \"vllm\" in engines\n    if sys.platform == \"darwin\":\n        assert \"mlx\" in engines\n    else:\n        assert \"mlx\" not in engines\n\n\nclass _DummyEngineMissing:\n    @staticmethod\n    def check_lib():\n        return False, \"missing dependency\"\n\n\nclass _DummyEngineOk:\n    @staticmethod\n    def check_lib():\n        return True\n\n\nclass _DummyEngineMatchJson:\n    @staticmethod\n    def match_json(family, spec, quantization):\n        return False\n\n\ndef test_force_virtualenv_engine_params_and_override():\n    class _Spec:\n        model_format = \"pytorch\"\n        model_size_in_billions = \"0_6\"\n        quantization = \"none\"\n\n    class _Family:\n        model_name = \"qwen3\"\n        model_specs = [_Spec()]\n\n    engine_params = {}\n    available_params = {}\n    supported = {\"SGLang\": [_DummyEngineMissing]}\n\n    match_status = _force_virtualenv_engine_params(\n        _Family(), supported, {\"sglang\"}, engine_params, available_params, False\n    )\n\n    assert \"SGLang\" in engine_params\n    assert match_status[\"SGLang\"] is False\n\n    _apply_virtualenv_engine_overrides(\n        engine_params, supported, {\"sglang\"}, True, match_status\n    )\n    assert engine_params[\"SGLang\"][0][\"virtualenv_required\"] is True\n\n\ndef test_virtualenv_override_disabled_marks_unavailable():\n    engine_params = {\"SGLang\": [{\"model_name\": \"qwen3\"}]}\n    supported = {\"SGLang\": [_DummyEngineMissing]}\n\n    _apply_virtualenv_engine_overrides(\n        engine_params, supported, {\"sglang\"}, False, {\"SGLang\": False}\n    )\n\n    assert isinstance(engine_params[\"SGLang\"], str)\n\n\nasync def test_download_hugginface():\n    import os\n\n    # Skip network-intensive tests on CI to avoid timeout issues\n    if os.environ.get(\"CI\"):\n        pytest.skip(\"Skip network-intensive download test on CI to avoid timeout\")\n\n    from ..llm import BUILTIN_LLM_FAMILIES\n    from ..llm.cache_manager import LLMCacheManager as CacheManager\n\n    cache_dir = None\n\n    try:\n        with CancellableDownloader() as downloader:\n            family = next(\n                f for f in BUILTIN_LLM_FAMILIES if f.model_name == \"qwen2.5-instruct\"\n            ).copy()\n            spec = next(\n                s\n                for s in family.model_specs\n                if s.model_format == \"pytorch\"\n                and s.model_size_in_billions == \"0_5\"\n                and s.model_hub == \"huggingface\"\n            )\n            family.model_specs = [spec]\n\n            async def check():\n                last = None\n                stagnant = 0\n                while not done:\n                    await asyncio.sleep(1)\n                    progress = downloader.get_progress()\n                    assert progress >= 0\n                    if progress == last:\n                        stagnant += 1\n                        if stagnant > 60:  # no changes for 1 minute\n                            raise TimeoutError(\"Download stuck\")\n                    else:\n                        stagnant = 0\n                    last = progress\n\n            done = False\n            check_task = asyncio.create_task(check())\n            # download from huggingface\n            cache_dir = await asyncio.to_thread(\n                CacheManager(family).cache_from_huggingface\n            )\n            done = True\n\n            await check_task\n            assert downloader.get_progress() == 1.0\n    finally:\n        if cache_dir:\n            shutil.rmtree(get_real_path(cache_dir))\n            shutil.rmtree(cache_dir)\n\n\nasync def test_download_modelscope():\n    import os\n\n    # Skip network-intensive tests on CI to avoid timeout issues\n    if os.environ.get(\"CI\"):\n        pytest.skip(\"Skip network-intensive download test on CI to avoid timeout\")\n\n    from ..llm import BUILTIN_LLM_FAMILIES\n    from ..llm.cache_manager import LLMCacheManager as CacheManager\n\n    cache_dir = None\n\n    try:\n        with CancellableDownloader() as downloader:\n            family = next(\n                f for f in BUILTIN_LLM_FAMILIES if f.model_name == \"qwen2.5-instruct\"\n            ).copy()\n            spec = next(\n                s\n                for s in family.model_specs\n                if s.model_format == \"pytorch\"\n                and s.model_size_in_billions == \"0_5\"\n                and s.model_hub == \"modelscope\"\n            )\n            family.model_specs = [spec]\n\n            async def check():\n                last = None\n                stagnant = 0\n                while not done:\n                    await asyncio.sleep(1)\n                    progress = downloader.get_progress()\n                    assert progress >= 0\n                    if progress == last:\n                        stagnant += 1\n                        if stagnant > 60:  # no changes for 1 minute\n                            raise TimeoutError(\"Download stuck\")\n                    else:\n                        stagnant = 0\n                    last = progress\n\n            done = False\n            check_task = asyncio.create_task(check())\n            # download from huggingface\n            cache_dir = await asyncio.to_thread(\n                CacheManager(family).cache_from_modelscope\n            )\n            done = True\n\n            await check_task\n            assert downloader.get_progress() == 1.0\n    finally:\n        if cache_dir:\n            shutil.rmtree(get_real_path(cache_dir))\n            shutil.rmtree(cache_dir)\n\n\nasync def test_cancel():\n    from ..llm import BUILTIN_LLM_FAMILIES\n    from ..llm.cache_manager import LLMCacheManager as CacheManager\n\n    with CancellableDownloader() as downloader:\n        family = next(\n            f for f in BUILTIN_LLM_FAMILIES if f.model_name == \"qwen2.5-instruct\"\n        ).copy()\n        spec = next(\n            s\n            for s in family.model_specs\n            if s.model_format == \"pytorch\"\n            and s.model_size_in_billions == \"0_5\"\n            and s.model_hub == \"modelscope\"\n        )\n        family.model_specs = [spec]\n\n        # download from huggingface\n        cache_task = asyncio.create_task(\n            asyncio.to_thread(CacheManager(family).cache_from_modelscope)\n        )\n\n        await asyncio.sleep(1)\n        downloader.cancel()\n\n        with pytest.raises(asyncio.CancelledError):\n            await cache_task\n        assert downloader.get_progress() == 1.0\n"
  },
  {
    "path": "xinference/model/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport asyncio\nimport functools\nimport importlib\nimport json\nimport logging\nimport os\nimport random\nimport re\nimport sys\nimport threading\nfrom abc import ABC, abstractmethod\nfrom copy import deepcopy\nfrom json import JSONDecodeError\nfrom pathlib import Path\nfrom typing import (\n    TYPE_CHECKING,\n    Any,\n    Callable,\n    Dict,\n    List,\n    Optional,\n    Set,\n    Tuple,\n    Type,\n    Union,\n    no_type_check,\n)\n\nimport huggingface_hub\nimport numpy as np\nimport torch\nfrom tqdm.auto import tqdm\n\nfrom ..constants import (\n    XINFERENCE_CACHE_DIR,\n    XINFERENCE_DOWNLOAD_MAX_ATTEMPTS,\n    XINFERENCE_ENABLE_VIRTUAL_ENV,\n    XINFERENCE_ENV_MODEL_SRC,\n)\nfrom ..device_utils import get_available_device, is_device_available\nfrom .core import CacheableModelSpec\n\nif TYPE_CHECKING:\n    from .embedding.core import LlamaCppEmbeddingSpecV1\n    from .llm.llm_family import LlamaCppLLMSpecV2\n\nlogger = logging.getLogger(__name__)\nIS_NEW_HUGGINGFACE_HUB: bool = huggingface_hub.__version__ >= \"0.23.0\"\n_ENGINE_MARKER_RE = re.compile(\n    r\"#(?:engine|model_engine)#\\s*==\\s*[\\\"']([^\\\"']+)[\\\"']\",\n    re.IGNORECASE,\n)\n\n\ndef _normalize_match_result(\n    result: Any, default_error: str, default_type: str\n) -> Tuple[bool, Optional[str], Optional[str], Optional[str]]:\n    if result is True:\n        return True, None, None, None\n    if result is False or result is None:\n        return False, default_error, default_type, None\n\n    if isinstance(result, tuple) and len(result) >= 2:\n        flag, reason = result[0], result[1]\n        if isinstance(flag, bool):\n            if flag:\n                return True, None, None, None\n            reason_str = str(reason) if reason is not None else default_error\n            return False, reason_str, default_type, None\n\n    if hasattr(result, \"is_match\"):\n        is_match = bool(getattr(result, \"is_match\"))\n        reason = getattr(result, \"reason\", None)\n        err_type = getattr(result, \"error_type\", default_type)\n        technical_details = getattr(result, \"technical_details\", None)\n        return is_match, reason, err_type, technical_details\n\n    if isinstance(result, str):\n        return False, result, default_type, None\n\n    return False, str(result), default_type, None\n\n\ndef _extract_engine_markers_from_packages(packages: List[str]) -> Set[str]:\n    engines: Set[str] = set()\n    for pkg in packages:\n        for match in _ENGINE_MARKER_RE.finditer(pkg):\n            engines.add(match.group(1).lower())\n    return engines\n\n\ndef _collect_virtualenv_engine_markers(family: Optional[Any]) -> Set[str]:\n    \"\"\"\n    Collect engine markers referenced by a model family.\n\n    This scans both the family-level virtualenv.packages and each spec-level\n    virtualenv.packages, extracts marker-based engine names (e.g. #engine# == \"vllm\"),\n    and returns the normalized, lowercase set.\n\n    On non-macOS platforms, the MLX engine marker is dropped because MLX is\n    only supported on macOS.\n    \"\"\"\n    packages: List[str] = []\n    if family is None:\n        return set()\n\n    virtualenv = getattr(family, \"virtualenv\", None)\n    if virtualenv and getattr(virtualenv, \"packages\", None):\n        packages.extend(virtualenv.packages)\n\n    for spec in getattr(family, \"model_specs\", []) or []:\n        spec_virtualenv = getattr(spec, \"virtualenv\", None)\n        if spec_virtualenv and getattr(spec_virtualenv, \"packages\", None):\n            packages.extend(spec_virtualenv.packages)\n\n    engines = _extract_engine_markers_from_packages(packages)\n    if sys.platform != \"darwin\":\n        engines.discard(\"mlx\")\n    return engines\n\n\ndef _build_engine_params_from_specs(\n    family: Any, specs: List[Any]\n) -> List[Dict[str, Any]]:\n    engine_param_list: List[Dict[str, Any]] = []\n    for spec in specs:\n        quantization = getattr(spec, \"quantization\", None) or \"none\"\n        model_format = getattr(spec, \"model_format\", None)\n        model_size_in_billions = getattr(spec, \"model_size_in_billions\", None)\n        existing = next(\n            (\n                item\n                for item in engine_param_list\n                if item.get(\"model_name\") == family.model_name\n                and item.get(\"model_format\") == model_format\n                and item.get(\"model_size_in_billions\") == model_size_in_billions\n            ),\n            None,\n        )\n        if existing:\n            if quantization not in existing[\"quantizations\"]:\n                existing[\"quantizations\"].append(quantization)\n        else:\n            new_item = {\n                \"model_name\": family.model_name,\n                \"model_format\": model_format,\n                \"model_size_in_billions\": model_size_in_billions,\n                \"quantizations\": [quantization],\n            }\n            if hasattr(spec, \"multimodal_projectors\"):\n                new_item[\"multimodal_projectors\"] = getattr(\n                    spec, \"multimodal_projectors\"\n                )\n            engine_param_list.append(new_item)\n    return engine_param_list\n\n\ndef _build_engine_params_from_specs_by_quantization(\n    family: Any, specs: List[Any]\n) -> List[Dict[str, Any]]:\n    engine_param_list: List[Dict[str, Any]] = []\n    for spec in specs:\n        quantization = getattr(spec, \"quantization\", None) or \"none\"\n        model_format = getattr(spec, \"model_format\", None)\n        model_size_in_billions = getattr(spec, \"model_size_in_billions\", None)\n        existing = next(\n            (\n                item\n                for item in engine_param_list\n                if item.get(\"model_name\") == family.model_name\n                and item.get(\"model_format\") == model_format\n                and item.get(\"model_size_in_billions\") == model_size_in_billions\n                and item.get(\"quantization\") == quantization\n            ),\n            None,\n        )\n        if existing:\n            continue\n\n        new_item = {\n            \"model_name\": family.model_name,\n            \"model_format\": model_format,\n            \"model_size_in_billions\": model_size_in_billions,\n            \"quantization\": quantization,\n        }\n        if hasattr(spec, \"multimodal_projectors\"):\n            new_item[\"multimodal_projectors\"] = getattr(spec, \"multimodal_projectors\")\n        engine_param_list.append(new_item)\n    return engine_param_list\n\n\ndef _force_virtualenv_engine_params(\n    family: Optional[Any],\n    supported_engines: Dict[str, List[Type[Any]]],\n    engine_markers: Set[str],\n    engine_params: Dict[str, Any],\n    available_params: Dict[str, List[Dict[str, Any]]],\n    enable_virtual_env: bool,\n    param_builder: Optional[Callable[[Any, List[Any]], List[Dict[str, Any]]]] = None,\n) -> Dict[str, bool]:\n    \"\"\"\n    Populate engine params for models with virtualenv markers.\n\n    Behavior:\n    - For virtualenv-enabled launches, use match_json to filter specs per engine.\n      If the engine is sglang and no specs match, fall back to vLLM's match_json\n      to reuse its compatibility logic.\n    - For non-virtualenv launches, keep strict matching and only include engines\n      with compatible specs.\n\n    Returns a map of engine name -> matched (True/False) used by override logic.\n    \"\"\"\n    match_status: Dict[str, bool] = {}\n    if family is None or not engine_markers:\n        return match_status\n    param_builder = param_builder or _build_engine_params_from_specs\n    specs = getattr(family, \"model_specs\", []) or []\n    for engine_name, engine_classes in supported_engines.items():\n        if engine_name.lower() not in engine_markers:\n            continue\n\n        if enable_virtual_env:\n            matched_specs: List[Any] = []\n            for spec in specs:\n                quantization = getattr(spec, \"quantization\", None) or \"none\"\n                for cls in engine_classes:\n                    match_func = getattr(cls, \"match_json\", None)\n                    if not callable(match_func):\n                        continue\n                    try:\n                        match_res = match_func(family, spec, quantization)\n                    except Exception:\n                        match_res = False\n                    is_match, _, _, _ = _normalize_match_result(\n                        match_res,\n                        f\"Engine {engine_name} is not compatible with current model or environment\",\n                        \"model_compatibility\",\n                    )\n                    if is_match:\n                        matched_specs.append(spec)\n                        break\n\n            if not matched_specs and engine_name.lower() == \"sglang\":\n                vllm_classes: Optional[List[Type[Any]]] = None\n                for candidate_name, candidate_classes in supported_engines.items():\n                    if candidate_name.lower() == \"vllm\":\n                        vllm_classes = candidate_classes\n                        break\n                if vllm_classes:\n                    for spec in specs:\n                        quantization = getattr(spec, \"quantization\", None) or \"none\"\n                        for cls in vllm_classes:\n                            match_func = getattr(cls, \"match_json\", None)\n                            if not callable(match_func):\n                                continue\n                            try:\n                                match_res = match_func(family, spec, quantization)\n                            except Exception:\n                                match_res = False\n                            is_match, _, _, _ = _normalize_match_result(\n                                match_res,\n                                \"Engine vLLM is not compatible with current model or environment\",\n                                \"model_compatibility\",\n                            )\n                            if is_match:\n                                matched_specs.append(spec)\n                                break\n\n            selected_specs = matched_specs or specs\n            engine_param_list = param_builder(family, selected_specs)\n            engine_params[engine_name] = engine_param_list\n            available_params[engine_name] = engine_param_list\n            match_status[engine_name] = bool(matched_specs)\n            continue\n\n        has_match = False\n        matched_specs = []\n        for spec in specs:\n            quantization = getattr(spec, \"quantization\", None) or \"none\"\n            for cls in engine_classes:\n                match_func = getattr(cls, \"match_json\", None)\n                if not callable(match_func):\n                    continue\n                try:\n                    match_res = match_func(family, spec, quantization)\n                except Exception:\n                    match_res = False\n                is_match, _, _, _ = _normalize_match_result(\n                    match_res,\n                    f\"Engine {engine_name} is not compatible with current model or environment\",\n                    \"model_compatibility\",\n                )\n                if is_match:\n                    has_match = True\n                    matched_specs.append(spec)\n                    break\n            if has_match:\n                continue\n\n        match_status[engine_name] = has_match\n        if engine_name in available_params and isinstance(\n            engine_params.get(engine_name), list\n        ):\n            continue\n        selected_specs = matched_specs or specs\n        engine_param_list = param_builder(family, selected_specs)\n        if engine_param_list:\n            engine_params[engine_name] = engine_param_list\n            available_params[engine_name] = engine_param_list\n    return match_status\n\n\ndef _apply_virtualenv_engine_overrides(\n    engine_params: Dict[str, Any],\n    supported_engines: Dict[str, List[Type[Any]]],\n    engine_markers: Set[str],\n    enable_virtual_env: bool,\n    match_status: Optional[Dict[str, bool]] = None,\n):\n    \"\"\"\n    Mark engines that require virtualenv, or replace them with a reason string.\n\n    If an engine is referenced by virtualenv markers but its library is not\n    available in the current environment, this annotates the engine params\n    with virtualenv_required/virtualenv_reason (when virtualenv is enabled),\n    or replaces the engine entry with a string reason (when disabled).\n    \"\"\"\n    if not engine_markers:\n        return\n    match_status = match_status or {}\n\n    for engine_name, params in list(engine_params.items()):\n        if not isinstance(params, list):\n            if engine_name not in supported_engines:\n                continue\n            if engine_name.lower() not in engine_markers:\n                continue\n            # string reason but marker matched: keep as-is for now\n            continue\n        if engine_name not in supported_engines:\n            continue\n        if engine_name.lower() not in engine_markers:\n            continue\n\n        lib_ok = False\n        for engine_class in supported_engines[engine_name]:\n            check_lib = getattr(engine_class, \"check_lib\", None)\n            result = check_lib() if callable(check_lib) else True\n            lib_ok, _, _, _ = _normalize_match_result(\n                result,\n                f\"Engine {engine_name} library is not installed\",\n                \"dependency_missing\",\n            )\n            if lib_ok:\n                break\n\n        require_virtualenv = not lib_ok or not match_status.get(engine_name, True)\n        reason = f\"Engine {engine_name} is not installed in the current environment; enable virtualenv to use it.\"\n        if enable_virtual_env and engine_name.lower() in engine_markers:\n            if require_virtualenv:\n                for param in engine_params[engine_name]:\n                    param[\"virtualenv_required\"] = True\n                    param[\"virtualenv_reason\"] = reason\n            continue\n\n        if require_virtualenv:\n            engine_params[engine_name] = reason\n\n\ndef check_dependency_available(\n    module_name: str, friendly_name: Optional[str] = None\n) -> Union[bool, Tuple[bool, str]]:\n    \"\"\"Check whether a dependency can be imported, returning detailed errors.\"\"\"\n    try:\n        importlib.import_module(module_name)\n    except ImportError as exc:\n        return False, f\"Failed to import {friendly_name or module_name}: {exc}\"\n    except OSError as exc:\n        return (\n            False,\n            f\"Failed to load {friendly_name or module_name} native extension: {exc}\",\n        )\n    except Exception as exc:\n        return False, f\"Error while importing {friendly_name or module_name}: {exc}\"\n    return True\n\n\ndef is_locale_chinese_simplified() -> bool:\n    import locale\n\n    try:\n        lang, _ = locale.getdefaultlocale()\n        return lang == \"zh_CN\"\n    except Exception:\n        return False\n\n\ndef download_from_modelscope() -> bool:\n    if os.environ.get(XINFERENCE_ENV_MODEL_SRC):\n        return os.environ.get(XINFERENCE_ENV_MODEL_SRC) == \"modelscope\"\n    elif is_locale_chinese_simplified():\n        return True\n    else:\n        return False\n\n\ndef download_from_openmind_hub() -> bool:\n    if os.environ.get(XINFERENCE_ENV_MODEL_SRC):\n        return os.environ.get(XINFERENCE_ENV_MODEL_SRC) == \"openmind_hub\"\n    else:\n        return False\n\n\ndef download_from_csghub() -> bool:\n    if os.environ.get(XINFERENCE_ENV_MODEL_SRC) == \"csghub\":\n        return True\n    return False\n\n\ndef symlink_local_file(path: str, local_dir: str, relpath: str) -> str:\n    from huggingface_hub.file_download import _create_symlink\n\n    # cross-platform transcription of filename, to be used as a local file path.\n    relative_filename = os.path.join(*relpath.split(\"/\"))\n    if os.name == \"nt\":\n        if relative_filename.startswith(\"..\\\\\") or \"\\\\..\\\\\" in relative_filename:\n            raise ValueError(\n                f\"Invalid filename: cannot handle filename '{relative_filename}' on Windows. Please ask the repository\"\n                \" owner to rename this file.\"\n            )\n    # Using `os.path.abspath` instead of `Path.resolve()` to avoid resolving symlinks\n    local_dir_filepath = os.path.join(local_dir, relative_filename)\n    if (\n        Path(os.path.abspath(local_dir))\n        not in Path(os.path.abspath(local_dir_filepath)).parents\n    ):\n        raise ValueError(\n            f\"Cannot copy file '{relative_filename}' to local dir '{local_dir}': file would not be in the local\"\n            \" directory.\"\n        )\n\n    os.makedirs(os.path.dirname(local_dir_filepath), exist_ok=True)\n    real_blob_path = os.path.realpath(path)\n    _create_symlink(real_blob_path, local_dir_filepath, new_blob=False)\n    return local_dir_filepath\n\n\ndef create_symlink(download_dir: str, cache_dir: str):\n    for subdir, dirs, files in os.walk(download_dir):\n        for file in files:\n            relpath = os.path.relpath(os.path.join(subdir, file), download_dir)\n            symlink_local_file(os.path.join(subdir, file), cache_dir, relpath)\n\n\ndef retry_download(\n    download_func: Callable,\n    model_name: str,\n    model_info: Optional[Dict],\n    *args,\n    **kwargs,\n):\n    last_ex = None\n    for current_attempt in range(1, XINFERENCE_DOWNLOAD_MAX_ATTEMPTS + 1):\n        try:\n            return download_func(*args, **kwargs)\n        except Exception as e:\n            remaining_attempts = XINFERENCE_DOWNLOAD_MAX_ATTEMPTS - current_attempt\n            last_ex = e\n            logger.debug(\n                \"Download failed: %s, download func: %s, download args: %s, kwargs: %s\",\n                e,\n                download_func,\n                args,\n                kwargs,\n            )\n            logger.warning(\n                f\"Attempt {current_attempt} failed. Remaining attempts: {remaining_attempts}\"\n            )\n\n    else:\n        model_size = (\n            model_info.pop(\"model_size\", None) if model_info is not None else None\n        )\n        model_format = (\n            model_info.pop(\"model_format\", None) if model_info is not None else None\n        )\n        if model_size is not None or model_format is not None:  # LLM models\n            raise RuntimeError(\n                f\"Failed to download model '{model_name}' \"\n                f\"(size: {model_size}, format: {model_format}) \"\n                f\"after multiple retries\"\n            ) from last_ex\n        else:  # Embedding models\n            raise RuntimeError(\n                f\"Failed to download model '{model_name}' after multiple retries\"\n            ) from last_ex\n\n\ndef valid_model_revision(\n    meta_path: str,\n    expected_model_revision: Optional[str],\n    expected_model_hub: Optional[str] = None,\n) -> bool:\n    if not os.path.exists(meta_path):\n        return False\n    with open(meta_path, \"r\") as f:\n        try:\n            meta_data = json.load(f)\n        except JSONDecodeError:  # legacy meta file for embedding models\n            logger.debug(\"Legacy meta file detected.\")\n            return True\n\n        if \"model_revision\" in meta_data:  # embedding, image\n            real_revision = meta_data[\"model_revision\"]\n        elif \"revision\" in meta_data:  # llm\n            real_revision = meta_data[\"revision\"]\n        else:\n            logger.warning(\n                f\"No `revision` information in the `__valid_download` file. \"\n            )\n            return False\n        if expected_model_hub is not None and expected_model_hub != meta_data.get(\n            \"model_hub\", \"huggingface\"\n        ):\n            logger.info(\"Use model cache from a different hub.\")\n            return True\n        else:\n            return real_revision == expected_model_revision\n\n\ndef get_cache_dir(model_spec: Any) -> str:\n    return os.path.realpath(os.path.join(XINFERENCE_CACHE_DIR, model_spec.model_name))\n\n\ndef is_model_cached(model_spec: Any, name_to_revisions_mapping: Dict):\n    cache_dir = get_cache_dir(model_spec)\n    meta_path = os.path.join(cache_dir, \"__valid_download\")\n    revisions = name_to_revisions_mapping[model_spec.model_name]\n    if model_spec.model_revision not in revisions:  # Usually for UT\n        revisions.append(model_spec.model_revision)\n    return any([valid_model_revision(meta_path, revision) for revision in revisions])\n\n\ndef is_valid_model_name(model_name: str) -> bool:\n    import re\n\n    if len(model_name) == 0:\n        return False\n\n    # check if contains +/?%#&=\\s\n    return re.match(r\"^[^+\\/?%#&=\\s]*$\", model_name) is not None\n\n\ndef parse_uri(uri: str) -> Tuple[str, str]:\n    import glob\n    from urllib.parse import urlparse\n\n    if os.path.exists(uri) or glob.glob(uri):\n        return \"file\", uri\n    else:\n        parsed = urlparse(uri)\n        scheme = parsed.scheme\n        path = parsed.netloc + parsed.path\n        if parsed.scheme == \"\" or len(parsed.scheme) == 1:  # len == 1 for windows\n            scheme = \"file\"\n        return scheme, path\n\n\ndef is_valid_model_uri(model_uri: Optional[str]) -> bool:\n    if not model_uri:\n        return False\n\n    src_scheme, src_root = parse_uri(model_uri)\n\n    if src_scheme == \"file\":\n        if not os.path.isabs(src_root):\n            raise ValueError(f\"Model URI cannot be a relative path: {model_uri}\")\n        return os.path.exists(src_root)\n    else:\n        # TODO: handle other schemes.\n        return True\n\n\ndef cache_from_uri(model_spec: CacheableModelSpec) -> str:\n    cache_dir = os.path.realpath(\n        os.path.join(XINFERENCE_CACHE_DIR, model_spec.model_name)\n    )\n    if os.path.exists(cache_dir):\n        logger.info(\"cache %s exists\", cache_dir)\n        return cache_dir\n\n    assert model_spec.model_uri is not None\n    src_scheme, src_root = parse_uri(model_spec.model_uri)\n    if src_root.endswith(\"/\"):\n        # remove trailing path separator.\n        src_root = src_root[:-1]\n\n    if src_scheme == \"file\":\n        if not os.path.isabs(src_root):\n            raise ValueError(\n                f\"Model URI cannot be a relative path: {model_spec.model_uri}\"\n            )\n        os.makedirs(XINFERENCE_CACHE_DIR, exist_ok=True)\n        os.symlink(src_root, cache_dir, target_is_directory=True)\n        return cache_dir\n    else:\n        raise ValueError(f\"Unsupported URL scheme: {src_scheme}\")\n\n\ndef select_device(device):\n    try:\n        import torch  # noqa: F401\n    except ImportError:\n        raise ImportError(\n            f\"Failed to import module 'torch'. Please make sure 'torch' is installed.\\n\\n\"\n        )\n\n    if device == \"auto\":\n        return get_available_device()\n    else:\n        if not is_device_available(device):\n            raise ValueError(f\"{device} is unavailable in your environment\")\n\n    return device\n\n\ndef convert_float_to_int_or_str(model_size: float) -> Union[int, str]:\n    \"\"\"convert float to int or string\n\n    if float can be presented as int, convert it to int, otherwise convert it to string\n    \"\"\"\n    if int(model_size) == model_size:\n        return int(model_size)\n    else:\n        return str(model_size)\n\n\ndef set_all_random_seed(seed: int):\n    random.seed(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)\n\n\nclass CancellableDownloader:\n    _global_lock = threading.Lock()\n    _active_instances = 0\n    _original_update = None  # Class-level original update method (tqdm.auto.tqdm)\n    _original_update_plain = None  # Class-level original update method (tqdm.tqdm)\n    _patch_lock = threading.Lock()  # Additional lock for patching operations\n\n    def __init__(\n        self,\n        cancel_error_cls: Type[BaseException] = asyncio.CancelledError,\n        cancelled_event: Optional[threading.Event] = None,\n    ):\n        self._cancelled = cancelled_event\n        if self._cancelled is None:\n            self._cancelled = threading.Event()\n        self._done_event = threading.Event()\n        self._cancel_error_cls = cancel_error_cls\n        # progress for tqdm that is main\n        self._main_progresses: Set[tqdm] = set()\n        # progress for file downloader\n        # mainly when tqdm unit is set\n        self._download_progresses: Set[tqdm] = set()\n        # Instance-specific tqdm tracking\n        self._patched_instances: Set[int] = set()\n\n    def reset(self):\n        self._main_progresses.clear()\n        self._download_progresses.clear()\n\n    def get_progress(self) -> float:\n        if self.done:\n            # directly return 1.0 when finished\n            return 1.0\n        # Don't return 1.0 when cancelled, calculate actual progress\n\n        tasks = finished_tasks = 0\n        for main_progress in self._main_progresses:\n            tasks += main_progress.total or 0\n            finished_tasks += main_progress.n\n\n        if tasks == 0:\n            # we assumed at least 1 task\n            tasks = 1\n\n        finished_ratio = finished_tasks / tasks\n\n        all_download_progress = finished_download_progress = 0\n        for download_progress in self._download_progresses:\n            # we skip finished download\n            if download_progress.n == download_progress.total:\n                continue\n            all_download_progress += download_progress.total or (\n                download_progress.n * 10\n            )\n            finished_download_progress += download_progress.n\n\n        if all_download_progress > 0:\n            rest_ratio = (\n                (tasks - finished_tasks)\n                / tasks\n                * (finished_download_progress / all_download_progress)\n            )\n            return finished_ratio + rest_ratio\n        else:\n            return finished_ratio\n\n    def cancel(self):\n        self._cancelled.set()\n        self._done_event.set()\n\n    @property\n    def cancelled(self):\n        return self._cancelled.is_set()\n\n    @property\n    def done(self):\n        return self._done_event.is_set()\n\n    def wait(self, timeout: float):\n        self._done_event.wait(timeout)\n\n    def raise_error(self, error_msg: str = \"Download cancelled\"):\n        raise self._cancel_error_cls(error_msg)\n\n    def patch_tqdm(self):\n        # Use class-level patching to avoid conflicts\n        with self._patch_lock:\n            import tqdm as tqdm_module\n\n            if self._original_update is None:\n                self._original_update = tqdm.update\n            if self._original_update_plain is None:\n                self._original_update_plain = tqdm_module.tqdm.update\n\n            if self._original_update is None or self._original_update_plain is None:\n                return\n\n            original_update_plain = self._original_update_plain\n\n            # Thread-safe patched update\n            def patched_update(tqdm_instance, n):\n                import gc\n\n                # Get all CancellableDownloader instances and check for cancellation\n                downloaders = [\n                    obj\n                    for obj in gc.get_objects()\n                    if isinstance(obj, CancellableDownloader)\n                ]\n\n                for downloader in downloaders:\n                    # if download cancelled, throw error\n                    if getattr(downloader, \"cancelled\", False):\n                        downloader.raise_error()\n\n                    progresses = None\n                    if not getattr(tqdm_instance, \"disable\", False):\n                        unit = getattr(tqdm_instance, \"unit\", \"it\")\n                        if unit == \"it\":\n                            progresses = getattr(downloader, \"_main_progresses\", None)\n                        else:\n                            progresses = getattr(\n                                downloader, \"_download_progresses\", None\n                            )\n\n                    if progresses is not None:\n                        progresses.add(tqdm_instance)\n                    else:\n                        logger.debug(f\"No progresses found for downloader {downloader}\")\n\n                # Call original update with safety check\n                return original_update_plain(tqdm_instance, n)\n\n            tqdm.update = patched_update\n            tqdm_module.tqdm.update = patched_update\n\n    def unpatch_tqdm(self):\n        with self._patch_lock:\n            if self._original_update is not None and self._active_instances == 0:\n                import tqdm as tqdm_module\n\n                tqdm.update = self._original_update\n                self._original_update = None\n                if self._original_update_plain is not None:\n                    tqdm_module.tqdm.update = self._original_update_plain\n                    self._original_update_plain = None\n\n    def __enter__(self):\n        # Use global lock to prevent concurrent patching\n        with self._global_lock:\n            if self._active_instances == 0:\n                self.patch_tqdm()\n            self._active_instances += 1\n        return self\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        # Use global lock to prevent concurrent unpatching\n        with self._global_lock:\n            self._active_instances -= 1\n            if self._active_instances == 0:\n                self.unpatch_tqdm()\n        try:\n            self._done_event.set()\n            self.reset()\n        except Exception as e:\n            logger.debug(f\"Error during CancellableDownloader cleanup: {e}\")\n\n\n@no_type_check\ndef get_engine_params_by_name(\n    model_type: Optional[str],\n    model_name: str,\n    enable_virtual_env: Optional[bool] = None,\n) -> Optional[Dict[str, Any]]:\n    engine_params: Dict[str, Any] = {}\n\n    def _append_available_engine(\n        engine: str, params: List[Dict[str, Any]], class_field: str\n    ):\n        cleaned_params: List[Dict[str, Any]] = []\n        for param in params:\n            new_param = {k: v for k, v in param.items() if k != class_field}\n            cleaned_params.append(new_param)\n        engine_params[engine] = cleaned_params\n\n    def _append_unavailable_engine(\n        engine: str,\n        reason: Optional[str],\n        error_type: Optional[str],\n        technical_details: Optional[str],\n    ):\n        engine_params[engine] = (\n            reason\n            or technical_details\n            or f\"Engine {engine} is not compatible with current model or environment\"\n        )\n\n    def _collect_supported_engines(\n        family: Optional[Any],\n        supported_engines: Dict[str, List[Type[Any]]],\n        engine_type_label: str,\n    ):\n        if family is None:\n            return\n        specs = getattr(family, \"model_specs\", [])\n        for engine_name, engine_classes in supported_engines.items():\n            if engine_name in engine_params:\n                continue\n\n            error_reason: Optional[str] = None\n            error_type: Optional[str] = None\n            error_details: Optional[str] = None\n            relevant = False\n\n            for engine_class in engine_classes:\n                try:\n                    lib_ok, lib_reason, lib_type, lib_details = _normalize_match_result(\n                        engine_class.check_lib(),\n                        f\"Engine {engine_name} library is not installed\",\n                        \"dependency_missing\",\n                    )\n                    if not lib_ok:\n                        relevant = True\n                        error_reason = lib_reason\n                        error_type = lib_type\n                        error_details = lib_details\n                        break\n\n                    for spec in specs:\n                        quantization = getattr(spec, \"quantization\", None) or \"none\"\n                        match_func = getattr(engine_class, \"match_json\", None)\n                        match_res = (\n                            match_func(family, spec, quantization)\n                            if callable(match_func)\n                            else False\n                        )\n                        (\n                            is_match,\n                            reason,\n                            m_err_type,\n                            m_details,\n                        ) = _normalize_match_result(\n                            match_res,\n                            f\"Engine {engine_name} is not compatible with current {engine_type_label} model or environment\",\n                            \"model_compatibility\",\n                        )\n                        if is_match:\n                            relevant = False\n                            error_reason = None\n                            break\n\n                        relevant = True\n                        if reason:\n                            error_reason = reason\n                        if m_err_type:\n                            error_type = m_err_type\n                        if m_details:\n                            error_details = m_details\n                        break\n                    if relevant and error_reason:\n                        break\n                except Exception as e:\n                    relevant = True\n                    error_reason = f\"Engine {engine_name} is not available: {str(e)}\"\n                    error_type = \"configuration_error\"\n                    break\n\n            if relevant:\n                _append_unavailable_engine(\n                    engine_name, error_reason, error_type, error_details\n                )\n\n    def _collect_supported_image_engines(\n        families: List[Any],\n        supported_engines: Dict[str, List[Type[Any]]],\n        engine_type_label: str,\n    ):\n        if not families:\n            return\n        for engine_name, engine_classes in supported_engines.items():\n            if engine_name in engine_params:\n                continue\n\n            error_reason: Optional[str] = None\n            error_type: Optional[str] = None\n            error_details: Optional[str] = None\n            relevant = False\n\n            for engine_class in engine_classes:\n                try:\n                    match_func = getattr(engine_class, \"match\", None)\n                    matched = False\n                    last_reason: Optional[str] = None\n                    last_type: Optional[str] = None\n                    last_details: Optional[str] = None\n                    for family in families:\n                        match_res = (\n                            match_func(family) if callable(match_func) else False\n                        )\n                        (\n                            is_match,\n                            reason,\n                            m_err_type,\n                            m_details,\n                        ) = _normalize_match_result(\n                            match_res,\n                            f\"Engine {engine_name} is not compatible with current {engine_type_label} model or environment\",\n                            \"model_compatibility\",\n                        )\n                        if is_match:\n                            matched = True\n                            break\n                        last_reason = reason or last_reason\n                        last_type = m_err_type or last_type\n                        last_details = m_details or last_details\n\n                    if matched:\n                        check_lib = getattr(engine_class, \"check_lib\", None)\n                        lib_ok, lib_reason, lib_type, lib_details = (\n                            _normalize_match_result(\n                                check_lib() if callable(check_lib) else True,\n                                f\"Engine {engine_name} library is not installed\",\n                                \"dependency_missing\",\n                            )\n                        )\n                        if not lib_ok:\n                            relevant = True\n                            error_reason = lib_reason\n                            error_type = lib_type\n                            error_details = lib_details\n                        else:\n                            relevant = False\n                            error_reason = None\n                            error_type = None\n                            error_details = None\n                        break\n\n                    relevant = True\n                    error_reason = last_reason\n                    error_type = last_type\n                    error_details = last_details\n                    break\n                except Exception as e:\n                    relevant = True\n                    error_reason = f\"Engine {engine_name} is not available: {str(e)}\"\n                    error_type = \"configuration_error\"\n                    break\n\n            if relevant:\n                _append_unavailable_engine(\n                    engine_name, error_reason, error_type, error_details\n                )\n\n    def _validate_available_image_engines(\n        families: List[Any],\n        supported_engines: Dict[str, List[Type[Any]]],\n        engine_type_label: str,\n    ):\n        if not families:\n            return\n        for engine_name, engine_data in list(engine_params.items()):\n            if not isinstance(engine_data, list):\n                continue\n            if engine_name not in supported_engines:\n                continue\n\n            matched = False\n            error_reason: Optional[str] = None\n            error_type: Optional[str] = None\n            error_details: Optional[str] = None\n\n            for engine_class in supported_engines[engine_name]:\n                try:\n                    match_func = getattr(engine_class, \"match\", None)\n                    for family in families:\n                        match_res = (\n                            match_func(family) if callable(match_func) else False\n                        )\n                        (\n                            is_match,\n                            reason,\n                            m_err_type,\n                            m_details,\n                        ) = _normalize_match_result(\n                            match_res,\n                            f\"Engine {engine_name} is not compatible with current {engine_type_label} model or environment\",\n                            \"model_compatibility\",\n                        )\n                        if is_match:\n                            matched = True\n                            break\n                        error_reason = reason or error_reason\n                        error_type = m_err_type or error_type\n                        error_details = m_details or error_details\n                    if matched:\n                        check_lib = getattr(engine_class, \"check_lib\", None)\n                        lib_ok, lib_reason, lib_type, lib_details = (\n                            _normalize_match_result(\n                                check_lib() if callable(check_lib) else True,\n                                f\"Engine {engine_name} library is not installed\",\n                                \"dependency_missing\",\n                            )\n                        )\n                        if not lib_ok:\n                            _append_unavailable_engine(\n                                engine_name, lib_reason, lib_type, lib_details\n                            )\n                        break\n                except Exception as e:\n                    _append_unavailable_engine(\n                        engine_name,\n                        f\"Engine {engine_name} is not available: {str(e)}\",\n                        \"configuration_error\",\n                        None,\n                    )\n                    break\n\n            if not matched and engine_name in engine_params:\n                _append_unavailable_engine(\n                    engine_name,\n                    error_reason,\n                    error_type,\n                    error_details,\n                )\n\n    if model_type == \"LLM\":\n        from .llm.llm_family import BUILTIN_LLM_FAMILIES, LLM_ENGINES, SUPPORTED_ENGINES\n\n        if model_name not in LLM_ENGINES:\n            return None\n\n        available_engines = deepcopy(LLM_ENGINES[model_name])\n        for engine, params in available_engines.items():\n            _append_available_engine(engine, params, \"llm_class\")\n\n        llm_family = next(\n            (f for f in BUILTIN_LLM_FAMILIES if f.model_name == model_name), None\n        )\n        _collect_supported_engines(llm_family, SUPPORTED_ENGINES, \"LLM\")\n        return engine_params\n\n    if model_type == \"embedding\":\n        from .embedding.embed_family import BUILTIN_EMBEDDING_MODELS, EMBEDDING_ENGINES\n        from .embedding.embed_family import (\n            SUPPORTED_ENGINES as EMBEDDING_SUPPORTED_ENGINES,\n        )\n\n        if model_name not in EMBEDDING_ENGINES:\n            return None\n\n        available_engines = deepcopy(EMBEDDING_ENGINES[model_name])\n        for engine, params in available_engines.items():\n            _append_available_engine(engine, params, \"embedding_class\")\n\n        embedding_family_list = BUILTIN_EMBEDDING_MODELS.get(model_name, [])\n        embedding_family = embedding_family_list[0] if embedding_family_list else None\n        _collect_supported_engines(\n            embedding_family, EMBEDDING_SUPPORTED_ENGINES, \"embedding\"\n        )\n        return engine_params\n\n    if model_type == \"rerank\":\n        from .rerank.rerank_family import BUILTIN_RERANK_MODELS, RERANK_ENGINES\n        from .rerank.rerank_family import SUPPORTED_ENGINES as RERANK_SUPPORTED_ENGINES\n\n        if model_name not in RERANK_ENGINES:\n            return None\n\n        available_engines = deepcopy(RERANK_ENGINES[model_name])\n        for engine, params in available_engines.items():\n            _append_available_engine(engine, params, \"rerank_class\")\n\n        from .rerank.core import RerankModelFamilyV2\n\n        rerank_family_list: List[RerankModelFamilyV2] = BUILTIN_RERANK_MODELS.get(\n            model_name, []\n        )\n        rerank_family = rerank_family_list[0] if rerank_family_list else None\n        _collect_supported_engines(rerank_family, RERANK_SUPPORTED_ENGINES, \"rerank\")\n        return engine_params\n\n    if model_type == \"image\":\n        from .image import BUILTIN_IMAGE_MODELS\n        from .image.custom import get_user_defined_images\n        from .image.engine_family import IMAGE_ENGINES\n        from .image.engine_family import SUPPORTED_ENGINES as IMAGE_SUPPORTED_ENGINES\n        from .image.ocr.ocr_family import OCR_ENGINES\n        from .image.ocr.ocr_family import SUPPORTED_ENGINES as OCR_SUPPORTED_ENGINES\n\n        def _get_image_families(model_name: str, is_ocr: bool) -> List[Any]:\n            families: List[Any] = []\n            if model_name in BUILTIN_IMAGE_MODELS:\n                families.extend(BUILTIN_IMAGE_MODELS[model_name])\n            families.extend(\n                f for f in get_user_defined_images() if f.model_name == model_name\n            )\n            if is_ocr:\n                return [\n                    f\n                    for f in families\n                    if getattr(f, \"model_ability\", None)\n                    and \"ocr\" in getattr(f, \"model_ability\")\n                ]\n            return [\n                f\n                for f in families\n                if not (\n                    getattr(f, \"model_ability\", None)\n                    and \"ocr\" in getattr(f, \"model_ability\")\n                )\n            ]\n\n        if model_name in OCR_ENGINES:\n            available_engines = deepcopy(OCR_ENGINES[model_name])\n            for engine, params in available_engines.items():\n                _append_available_engine(engine, params, \"ocr_class\")\n            ocr_families = _get_image_families(model_name, is_ocr=True)\n            _validate_available_image_engines(\n                ocr_families,\n                OCR_SUPPORTED_ENGINES,\n                \"OCR\",\n            )\n            _collect_supported_image_engines(ocr_families, OCR_SUPPORTED_ENGINES, \"OCR\")\n            return engine_params\n\n        if model_name not in IMAGE_ENGINES:\n            return None\n\n        available_engines = deepcopy(IMAGE_ENGINES[model_name])\n        for engine, params in available_engines.items():\n            _append_available_engine(engine, params, \"image_class\")\n        image_families = _get_image_families(model_name, is_ocr=False)\n        _validate_available_image_engines(\n            image_families,\n            IMAGE_SUPPORTED_ENGINES,\n            \"image\",\n        )\n        _collect_supported_image_engines(\n            image_families, IMAGE_SUPPORTED_ENGINES, \"image\"\n        )\n        return engine_params\n\n    return None\n\n\n@no_type_check\ndef get_engine_params_by_name_with_virtual_env(\n    model_type: Optional[str],\n    model_name: str,\n    enable_virtual_env: Optional[bool] = None,\n) -> Optional[Dict[str, Any]]:\n    \"\"\"\n    Resolve engine params for UI/launch flows with virtualenv awareness.\n\n    This method keeps engine discovery compatible with virtualenv markers:\n    - It expands engine params from model registries.\n    - It applies virtualenv marker-based selection without blocking engines\n      that rely on virtualenv-installed dependencies.\n    - It annotates engines that require virtualenv when dependencies are\n      missing in the current environment.\n    \"\"\"\n    engine_params: Dict[str, Any] = {}\n    available_params: Dict[str, List[Dict[str, Any]]] = {}\n    if enable_virtual_env is None:\n        enable_virtual_env = XINFERENCE_ENABLE_VIRTUAL_ENV\n\n    def _append_available_engine(\n        engine: str, params: List[Dict[str, Any]], class_field: str\n    ):\n        cleaned_params: List[Dict[str, Any]] = []\n        for param in params:\n            new_param = {k: v for k, v in param.items() if k != class_field}\n            cleaned_params.append(new_param)\n        engine_params[engine] = cleaned_params\n        available_params[engine] = cleaned_params\n\n    def _append_unavailable_engine(\n        engine: str,\n        reason: Optional[str],\n        error_type: Optional[str],\n        technical_details: Optional[str],\n    ):\n        # Keep legacy string format for unavailable engines\n        engine_params[engine] = (\n            reason\n            or technical_details\n            or f\"Engine {engine} is not compatible with current model or environment\"\n        )\n\n    def _collect_supported_engines(\n        family: Optional[Any],\n        supported_engines: Dict[str, List[Type[Any]]],\n        engine_type_label: str,\n    ):\n        if family is None:\n            return\n        specs = getattr(family, \"model_specs\", [])\n        for engine_name, engine_classes in supported_engines.items():\n            if engine_name in engine_params:\n                continue\n\n            error_reason: Optional[str] = None\n            error_type: Optional[str] = None\n            error_details: Optional[str] = None\n            relevant = False\n\n            for engine_class in engine_classes:\n                try:\n                    lib_ok, lib_reason, lib_type, lib_details = _normalize_match_result(\n                        engine_class.check_lib(),\n                        f\"Engine {engine_name} library is not installed\",\n                        \"dependency_missing\",\n                    )\n                    if not lib_ok:\n                        relevant = True\n                        error_reason = lib_reason\n                        error_type = lib_type\n                        error_details = lib_details\n                        break\n\n                    for spec in specs:\n                        quantization = getattr(spec, \"quantization\", None) or \"none\"\n                        match_func = getattr(engine_class, \"match_json\", None)\n                        match_res = (\n                            match_func(family, spec, quantization)\n                            if callable(match_func)\n                            else False\n                        )\n                        (\n                            is_match,\n                            reason,\n                            m_err_type,\n                            m_details,\n                        ) = _normalize_match_result(\n                            match_res,\n                            f\"Engine {engine_name} is not compatible with current {engine_type_label} model or environment\",\n                            \"model_compatibility\",\n                        )\n                        if is_match:\n                            relevant = False\n                            error_reason = None\n                            break\n\n                        relevant = True\n                        if reason:\n                            error_reason = reason\n                        if m_err_type:\n                            error_type = m_err_type\n                        if m_details:\n                            error_details = m_details\n                        # Return the first failure to avoid later specs overwriting the root cause.\n                        break\n                    if relevant and error_reason:\n                        break\n                except Exception as e:\n                    relevant = True\n                    error_reason = f\"Engine {engine_name} is not available: {str(e)}\"\n                    error_type = \"configuration_error\"\n                    break\n\n            if relevant:\n                _append_unavailable_engine(\n                    engine_name, error_reason, error_type, error_details\n                )\n\n    def _collect_supported_image_engines(\n        families: List[Any],\n        supported_engines: Dict[str, List[Type[Any]]],\n        engine_type_label: str,\n    ):\n        if not families:\n            return\n        for engine_name, engine_classes in supported_engines.items():\n            if engine_name in engine_params:\n                continue\n\n            error_reason: Optional[str] = None\n            error_type: Optional[str] = None\n            error_details: Optional[str] = None\n            relevant = False\n\n            for engine_class in engine_classes:\n                try:\n                    match_func = getattr(engine_class, \"match\", None)\n                    matched = False\n                    last_reason: Optional[str] = None\n                    last_type: Optional[str] = None\n                    last_details: Optional[str] = None\n                    for family in families:\n                        match_res = (\n                            match_func(family) if callable(match_func) else False\n                        )\n                        (\n                            is_match,\n                            reason,\n                            m_err_type,\n                            m_details,\n                        ) = _normalize_match_result(\n                            match_res,\n                            f\"Engine {engine_name} is not compatible with current {engine_type_label} model or environment\",\n                            \"model_compatibility\",\n                        )\n                        if is_match:\n                            matched = True\n                            break\n                        last_reason = reason or last_reason\n                        last_type = m_err_type or last_type\n                        last_details = m_details or last_details\n\n                    if matched:\n                        check_lib = getattr(engine_class, \"check_lib\", None)\n                        lib_ok, lib_reason, lib_type, lib_details = (\n                            _normalize_match_result(\n                                check_lib() if callable(check_lib) else True,\n                                f\"Engine {engine_name} library is not installed\",\n                                \"dependency_missing\",\n                            )\n                        )\n                        if not lib_ok:\n                            relevant = True\n                            error_reason = lib_reason\n                            error_type = lib_type\n                            error_details = lib_details\n                        else:\n                            relevant = False\n                            error_reason = None\n                            error_type = None\n                            error_details = None\n                        break\n\n                    relevant = True\n                    error_reason = last_reason\n                    error_type = last_type\n                    error_details = last_details\n                    break\n                except Exception as e:\n                    relevant = True\n                    error_reason = f\"Engine {engine_name} is not available: {str(e)}\"\n                    error_type = \"configuration_error\"\n                    break\n\n            if relevant:\n                _append_unavailable_engine(\n                    engine_name, error_reason, error_type, error_details\n                )\n\n    def _validate_available_image_engines(\n        families: List[Any],\n        supported_engines: Dict[str, List[Type[Any]]],\n        engine_type_label: str,\n        engine_markers: Set[str],\n        enable_virtual_env: bool,\n    ):\n        if not families:\n            return\n        for engine_name, engine_data in list(engine_params.items()):\n            if not isinstance(engine_data, list):\n                continue\n            if engine_name not in supported_engines:\n                continue\n\n            matched = False\n            error_reason: Optional[str] = None\n            error_type: Optional[str] = None\n            error_details: Optional[str] = None\n\n            for engine_class in supported_engines[engine_name]:\n                try:\n                    match_func = getattr(engine_class, \"match\", None)\n                    for family in families:\n                        match_res = (\n                            match_func(family) if callable(match_func) else False\n                        )\n                        (\n                            is_match,\n                            reason,\n                            m_err_type,\n                            m_details,\n                        ) = _normalize_match_result(\n                            match_res,\n                            f\"Engine {engine_name} is not compatible with current {engine_type_label} model or environment\",\n                            \"model_compatibility\",\n                        )\n                        if is_match:\n                            matched = True\n                            break\n                        error_reason = reason or error_reason\n                        error_type = m_err_type or error_type\n                        error_details = m_details or error_details\n                    if matched:\n                        check_lib = getattr(engine_class, \"check_lib\", None)\n                        lib_ok, lib_reason, lib_type, lib_details = (\n                            _normalize_match_result(\n                                check_lib() if callable(check_lib) else True,\n                                f\"Engine {engine_name} library is not installed\",\n                                \"dependency_missing\",\n                            )\n                        )\n                        if not lib_ok:\n                            if (\n                                enable_virtual_env\n                                and engine_name.lower() in engine_markers\n                            ):\n                                break\n                            _append_unavailable_engine(\n                                engine_name, lib_reason, lib_type, lib_details\n                            )\n                        break\n                except Exception as e:\n                    _append_unavailable_engine(\n                        engine_name,\n                        f\"Engine {engine_name} is not available: {str(e)}\",\n                        \"configuration_error\",\n                        None,\n                    )\n                    break\n\n            if not matched and engine_name in engine_params:\n                _append_unavailable_engine(\n                    engine_name,\n                    error_reason,\n                    error_type,\n                    error_details,\n                )\n\n    if model_type == \"LLM\":\n        from .llm.llm_family import BUILTIN_LLM_FAMILIES, LLM_ENGINES, SUPPORTED_ENGINES\n\n        if model_name not in LLM_ENGINES:\n            return None\n\n        available_engines = deepcopy(LLM_ENGINES[model_name])\n        for engine, params in available_engines.items():\n            _append_available_engine(engine, params, \"llm_class\")\n\n        llm_family = next(\n            (f for f in BUILTIN_LLM_FAMILIES if f.model_name == model_name), None\n        )\n        _collect_supported_engines(llm_family, SUPPORTED_ENGINES, \"LLM\")\n        engine_markers = _collect_virtualenv_engine_markers(llm_family)\n        match_status = _force_virtualenv_engine_params(\n            llm_family,\n            SUPPORTED_ENGINES,\n            engine_markers,\n            engine_params,\n            available_params,\n            enable_virtual_env,\n        )\n        _apply_virtualenv_engine_overrides(\n            engine_params,\n            SUPPORTED_ENGINES,\n            engine_markers,\n            enable_virtual_env,\n            match_status,\n        )\n        if enable_virtual_env and engine_markers:\n            for engine_name in list(engine_params.keys()):\n                if engine_name.lower() in engine_markers:\n                    continue\n                engine_params[engine_name] = (\n                    f\"Engine {engine_name} is not listed in model virtualenv packages.\"\n                )\n\n        return engine_params\n\n    elif model_type == \"embedding\":\n        from .embedding.embed_family import BUILTIN_EMBEDDING_MODELS, EMBEDDING_ENGINES\n        from .embedding.embed_family import (\n            SUPPORTED_ENGINES as EMBEDDING_SUPPORTED_ENGINES,\n        )\n\n        if model_name not in EMBEDDING_ENGINES:\n            return None\n\n        available_engines = deepcopy(EMBEDDING_ENGINES[model_name])\n        for engine, params in available_engines.items():\n            _append_available_engine(engine, params, \"embedding_class\")\n\n        embedding_family_list = BUILTIN_EMBEDDING_MODELS.get(model_name, [])\n        embedding_family = embedding_family_list[0] if embedding_family_list else None\n        _collect_supported_engines(\n            embedding_family, EMBEDDING_SUPPORTED_ENGINES, \"embedding\"\n        )\n        engine_markers = _collect_virtualenv_engine_markers(embedding_family)\n        match_status = _force_virtualenv_engine_params(\n            embedding_family,\n            EMBEDDING_SUPPORTED_ENGINES,\n            engine_markers,\n            engine_params,\n            available_params,\n            enable_virtual_env,\n            param_builder=_build_engine_params_from_specs_by_quantization,\n        )\n        _apply_virtualenv_engine_overrides(\n            engine_params,\n            EMBEDDING_SUPPORTED_ENGINES,\n            engine_markers,\n            enable_virtual_env,\n            match_status,\n        )\n\n        return engine_params\n\n    elif model_type == \"rerank\":\n        from .rerank.rerank_family import BUILTIN_RERANK_MODELS, RERANK_ENGINES\n        from .rerank.rerank_family import SUPPORTED_ENGINES as RERANK_SUPPORTED_ENGINES\n\n        if model_name not in RERANK_ENGINES:\n            return None\n\n        available_engines = deepcopy(RERANK_ENGINES[model_name])\n        for engine, params in available_engines.items():\n            _append_available_engine(engine, params, \"rerank_class\")\n\n        from .rerank.core import RerankModelFamilyV2\n\n        rerank_family_list: List[RerankModelFamilyV2] = BUILTIN_RERANK_MODELS.get(\n            model_name, []\n        )\n        rerank_family = rerank_family_list[0] if rerank_family_list else None\n        _collect_supported_engines(rerank_family, RERANK_SUPPORTED_ENGINES, \"rerank\")\n        engine_markers = _collect_virtualenv_engine_markers(rerank_family)\n        match_status = _force_virtualenv_engine_params(\n            rerank_family,\n            RERANK_SUPPORTED_ENGINES,\n            engine_markers,\n            engine_params,\n            available_params,\n            enable_virtual_env,\n            param_builder=_build_engine_params_from_specs_by_quantization,\n        )\n        _apply_virtualenv_engine_overrides(\n            engine_params,\n            RERANK_SUPPORTED_ENGINES,\n            engine_markers,\n            enable_virtual_env,\n            match_status,\n        )\n\n        return engine_params\n\n    elif model_type == \"image\":\n        from .image import BUILTIN_IMAGE_MODELS\n        from .image.custom import get_user_defined_images\n        from .image.engine_family import IMAGE_ENGINES\n        from .image.engine_family import SUPPORTED_ENGINES as IMAGE_SUPPORTED_ENGINES\n        from .image.ocr.ocr_family import OCR_ENGINES\n        from .image.ocr.ocr_family import SUPPORTED_ENGINES as OCR_SUPPORTED_ENGINES\n\n        def _get_image_families(model_name: str, is_ocr: bool) -> List[Any]:\n            families: List[Any] = []\n            if model_name in BUILTIN_IMAGE_MODELS:\n                families.extend(BUILTIN_IMAGE_MODELS[model_name])\n            families.extend(\n                f for f in get_user_defined_images() if f.model_name == model_name\n            )\n            if is_ocr:\n                return [\n                    f\n                    for f in families\n                    if getattr(f, \"model_ability\", None)\n                    and \"ocr\" in getattr(f, \"model_ability\")\n                ]\n            return [\n                f\n                for f in families\n                if not (\n                    getattr(f, \"model_ability\", None)\n                    and \"ocr\" in getattr(f, \"model_ability\")\n                )\n            ]\n\n        if model_name in OCR_ENGINES:\n            available_engines = deepcopy(OCR_ENGINES[model_name])\n            for engine, params in available_engines.items():\n                _append_available_engine(engine, params, \"ocr_class\")\n            ocr_families = _get_image_families(model_name, is_ocr=True)\n            ocr_engine_markers: Set[str] = set()\n            for family in ocr_families:\n                ocr_engine_markers |= _collect_virtualenv_engine_markers(family)\n            _validate_available_image_engines(\n                ocr_families,\n                OCR_SUPPORTED_ENGINES,\n                \"OCR\",\n                ocr_engine_markers,\n                enable_virtual_env,\n            )\n            _collect_supported_image_engines(ocr_families, OCR_SUPPORTED_ENGINES, \"OCR\")\n            _apply_virtualenv_engine_overrides(\n                engine_params,\n                OCR_SUPPORTED_ENGINES,\n                ocr_engine_markers,\n                enable_virtual_env,\n            )\n            return engine_params\n\n        if model_name not in IMAGE_ENGINES:\n            return None\n\n        available_engines = deepcopy(IMAGE_ENGINES[model_name])\n        for engine, params in available_engines.items():\n            _append_available_engine(engine, params, \"image_class\")\n        image_families = _get_image_families(model_name, is_ocr=False)\n        image_engine_markers: Set[str] = set()\n        for family in image_families:\n            image_engine_markers |= _collect_virtualenv_engine_markers(family)\n        _validate_available_image_engines(\n            image_families,\n            IMAGE_SUPPORTED_ENGINES,\n            \"image\",\n            image_engine_markers,\n            enable_virtual_env,\n        )\n        _collect_supported_image_engines(\n            image_families, IMAGE_SUPPORTED_ENGINES, \"image\"\n        )\n        _apply_virtualenv_engine_overrides(\n            engine_params,\n            IMAGE_SUPPORTED_ENGINES,\n            image_engine_markers,\n            enable_virtual_env,\n        )\n\n        return engine_params\n\n    raise ValueError(\n        \"Cannot support model_engine for \"\n        f\"{model_type}, only available for LLM, embedding, rerank, image\"\n    )\n\n\ndef generate_model_file_names_with_quantization_parts(\n    model_spec: Union[\"LlamaCppLLMSpecV2\", \"LlamaCppEmbeddingSpecV1\"],\n    multimodal_projector: Optional[str] = None,\n) -> Tuple[List[str], str, bool]:\n    file_names = []\n    final_file_name = model_spec.model_file_name_template.format(\n        quantization=model_spec.quantization\n    )\n    need_merge = False\n\n    if (\n        model_spec.quantization_parts is None\n        or model_spec.quantization not in model_spec.quantization_parts\n    ):\n        file_names.append(final_file_name)\n    elif (\n        model_spec.quantization is not None\n        and model_spec.quantization in model_spec.quantization_parts\n    ):\n        parts = model_spec.quantization_parts[model_spec.quantization]\n        need_merge = True\n\n        logger.info(\n            f\"Model {model_spec.model_id} {model_spec.model_format} {model_spec.quantization} has {len(parts)} parts.\"\n        )\n\n        if model_spec.model_file_name_split_template is None:\n            raise ValueError(\n                f\"No model_file_name_split_template for model spec {model_spec.model_id}\"\n            )\n\n        for part in parts:\n            file_name = model_spec.model_file_name_split_template.format(\n                quantization=model_spec.quantization, part=part\n            )\n            file_names.append(file_name)\n    if multimodal_projector:\n        file_names.append(multimodal_projector)\n\n    return file_names, final_file_name, need_merge\n\n\ndef merge_cached_files(\n    cache_dir: str, input_file_names: List[str], output_file_name: str\n):\n    # now llama.cpp can find the gguf parts automatically\n    # we only need to provide the first part\n    # thus we create the symlink to the first part\n    symlink_local_file(\n        os.path.join(cache_dir, input_file_names[0]), cache_dir, output_file_name\n    )\n\n    logger.info(f\"Merge complete.\")\n\n\ndef flatten_model_src(input_json: dict):\n    flattened = []\n    base_info = {\n        key: value\n        for key, value in input_json.items()\n        if key not in (\"model_src\", \"model_specs\")\n    }\n\n    if \"model_specs\" in input_json:\n        for spec in input_json[\"model_specs\"]:\n            spec_base = base_info.copy()\n            spec_base.update({k: v for k, v in spec.items() if k != \"model_src\"})\n            for model_hub, hub_info in spec[\"model_src\"].items():\n                record = spec_base.copy()\n                hub_info = hub_info.copy()\n                hub_info.pop(\"model_hub\", None)\n                record.update(hub_info)\n                record[\"model_hub\"] = model_hub\n                flattened.append(record)\n        return flattened\n\n    for model_hub, hub_info in input_json[\"model_src\"].items():\n        record = base_info.copy()\n        hub_info = hub_info.copy()\n        hub_info.pop(\"model_hub\", None)\n        record.update(hub_info)\n        record[\"model_hub\"] = model_hub\n        flattened.append(record)\n    return flattened\n\n\ndef flatten_quantizations(input_json: dict):\n    flattened = []\n\n    base_info = {key: value for key, value in input_json.items() if key != \"model_src\"}\n\n    for model_hub, hub_info in input_json[\"model_src\"].items():\n        quantizations = hub_info[\"quantizations\"]\n\n        for quant in quantizations:\n            record = base_info.copy()\n            record[\"model_hub\"] = model_hub\n            record[\"quantization\"] = quant\n\n            for key, value in hub_info.items():\n                if key != \"quantizations\":\n                    if isinstance(value, str) and \"{quantization}\" in value:\n                        try:\n                            value = value.format(quantization=quant)\n                        except Exception:\n                            pass\n                    record[key] = value\n\n            flattened.append(record)\n    return flattened\n\n\nclass ModelInstanceInfoMixin(ABC):\n    @abstractmethod\n    def to_description(self):\n        \"\"\"\"\"\"\n\n    @abstractmethod\n    def to_version_info(self):\n        \"\"\"\"\"\"\n\n\ndef is_flash_attn_available() -> bool:\n    \"\"\"\n    Check if flash_attention can be enabled in the current environment.\n\n    Checks the following conditions:\n    1. Whether the flash_attn package is installed\n    2. Whether CUDA GPU is available\n    3. Whether PyTorch supports CUDA\n    4. Whether GPU compute capability meets requirements (>= 8.0)\n\n    Returns:\n        bool: True if flash_attention can be enabled, False otherwise\n    \"\"\"\n    import importlib.util\n\n    # Check if flash_attn is installed\n    if importlib.util.find_spec(\"flash_attn\") is None:\n        logger.debug(\"flash_attn package not found\")\n        return False\n\n    try:\n        import torch\n\n        # Check if CUDA is available\n        if not torch.cuda.is_available():\n            logger.debug(\"CUDA not available\")\n            return False\n\n        # Check GPU count\n        if torch.cuda.device_count() == 0:\n            logger.debug(\"No CUDA devices found\")\n            return False\n\n        # Check current GPU compute capability\n        # Flash Attention typically requires compute capability >= 8.0 (A100, H100, etc.)\n        current_device = torch.cuda.current_device()\n        capability = torch.cuda.get_device_capability(current_device)\n        major, minor = capability\n        compute_capability = major + minor * 0.1\n\n        if compute_capability < 8.0:\n            logger.debug(\n                f\"GPU compute capability {compute_capability} < 8.0, \"\n                \"flash_attn may not work optimally\"\n            )\n            return False\n\n        # Try to import flash_attn core module to verify correct installation\n        try:\n            import flash_attn\n\n            logger.debug(\n                f\"flash_attn version: {getattr(flash_attn, '__version__', 'unknown')}\"\n            )\n            return True\n        except ImportError as e:\n            logger.debug(f\"Failed to import flash_attn: {e}\")\n            return False\n    except Exception as e:\n        logger.debug(f\"Error checking flash_attn availability: {e}\")\n        return False\n\n\ndef cache_clean(fn):\n    @functools.wraps(fn)\n    async def _async_wrapper(self, *args, **kwargs):\n        import gc\n\n        from ..device_utils import empty_cache\n\n        result = await fn(self, *args, **kwargs)\n\n        gc.collect()\n        empty_cache()\n        return result\n\n    @functools.wraps(fn)\n    def _wrapper(self, *args, **kwargs):\n        import gc\n\n        from ..device_utils import empty_cache\n\n        result = fn(self, *args, **kwargs)\n\n        gc.collect()\n        empty_cache()\n        return result\n\n    if asyncio.iscoroutinefunction(fn):\n        return _async_wrapper\n    else:\n        return _wrapper\n\n\ndef load_downloaded_models_to_dict(\n    target_dict: Dict[str, Any], model_type: str, json_filename: str, load_func\n):\n    \"\"\"Load downloaded JSON configurations into the specified dictionary.\n\n    Args:\n        target_dict: Dictionary to load models into\n        model_type: Type of model (e.g., \"llm\", \"embedding\", \"audio\", \"image\", \"rerank\")\n        json_filename: Name of the JSON file to load\n        load_func: Function to load model family from JSON\n    \"\"\"\n    from ..constants import XINFERENCE_MODEL_DIR\n\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", model_type)\n    json_file_path = os.path.join(builtin_dir, json_filename)\n\n    try:\n        load_func(json_file_path, target_dict)\n    except Exception as e:\n        import warnings\n\n        warnings.warn(\n            f\"Failed to load downloaded {model_type} models from {json_file_path}: {e}\"\n        )\n\n\ndef merge_models_by_timestamp(\n    built_in_models: Dict[str, List[Any]], user_models: Dict[str, List[Any]]\n) -> Dict[str, List[Any]]:\n    \"\"\"Merge built-in and user models, keeping the latest version based on updated_at.\n\n    Args:\n        built_in_models: Dictionary of built-in models\n        user_models: Dictionary of user-defined models\n\n    Returns:\n        Merged dictionary with latest models based on updated_at timestamp\n    \"\"\"\n    merged_models = {}\n\n    # First, add all built-in models\n    for model_name, model_list in built_in_models.items():\n        merged_models[model_name] = model_list.copy()\n\n    # Then merge with user models, keeping the latest based on updated_at\n    for model_name, user_model_list in user_models.items():\n        if model_name not in merged_models:\n            # New model from user, just add it\n            merged_models[model_name] = user_model_list.copy()\n        else:\n            # Existing model, need to compare and merge based on updated_at\n            built_in_list = merged_models[model_name]\n\n            # Create a mapping of updated_at to model for comparison\n            all_models = []\n\n            # Add built-in models\n            for model in built_in_list:\n                all_models.append((model.updated_at, model))\n\n            # Add user models\n            for model in user_model_list:\n                all_models.append((model.updated_at, model))\n\n            # Sort by updated_at (newest first) and keep the latest\n            all_models.sort(key=lambda x: x[0], reverse=True)\n\n            # Keep the latest version(s) - in case there are multiple with the same updated_at\n            latest_updated_at = all_models[0][0]\n            latest_models = [\n                model\n                for updated_at, model in all_models\n                if updated_at == latest_updated_at\n            ]\n\n            merged_models[model_name] = latest_models\n\n    return merged_models\n\n\ndef install_models_with_merge(\n    built_in_dict: Dict[str, Any],\n    builtin_json_file: str,\n    user_model_type: str,\n    user_json_filename: str,\n    has_downloaded_models_func,\n    load_model_family_func,\n) -> None:\n    \"\"\"Install models with intelligent merging based on timestamps.\n\n    Args:\n        built_in_dict: Dictionary to store built-in models\n        builtin_json_file: Path to built-in JSON file (relative to the model module)\n        user_model_type: Type of model for user models (e.g., \"llm\", \"embedding\")\n        user_json_filename: Name of user JSON file\n        has_downloaded_models_func: Function to check if user models exist\n        load_model_family_func: Function to load model family from JSON\n    \"\"\"\n    import os.path\n\n    # Always load built-in models first to ensure we have the latest models\n    # For built-in models, use the path relative to the current model module\n    current_dir = os.path.dirname(\n        os.path.abspath(load_model_family_func.__code__.co_filename)\n    )\n    builtin_json_path = os.path.join(current_dir, builtin_json_file)\n    load_model_family_func(builtin_json_path, built_in_dict)\n\n    # Then load user-defined models and merge with built-in models\n    if has_downloaded_models_func():\n        user_models: Dict[str, Any] = {}\n        load_downloaded_models_to_dict(\n            user_models, user_model_type, user_json_filename, load_model_family_func\n        )\n\n        # Create a copy of built-in models for merging\n        built_in_models_copy = dict(built_in_dict)\n\n        # Merge models, keeping the latest version based on updated_at\n        merged_models = merge_models_by_timestamp(built_in_models_copy, user_models)\n\n        # Update the dictionary with merged results\n        built_in_dict.clear()\n        built_in_dict.update(merged_models)\n"
  },
  {
    "path": "xinference/model/video/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport codecs\nimport json\nimport os\nimport warnings\n\nfrom ...constants import XINFERENCE_MODEL_DIR\nfrom ..utils import flatten_model_src\nfrom .core import (\n    BUILTIN_VIDEO_MODELS,\n    VIDEO_MODEL_DESCRIPTIONS,\n    VideoModelFamilyV2,\n    generate_video_description,\n    get_video_model_descriptions,\n)\n\n\ndef register_custom_model():\n    \"\"\"Register custom video models.\"\"\"\n    # Video models don't support custom models yet\n    pass\n\n\n# For compatibility with worker's custom registration system\nclass CustomVideoModelFamilyV2(VideoModelFamilyV2):\n    \"\"\"Custom video model family, currently not supported.\"\"\"\n\n    pass\n\n\ndef register_video(model_family, persist=True):\n    \"\"\"Register a video model family. Currently not supported.\"\"\"\n    # Video models don't support custom registration yet\n    pass\n\n\ndef unregister_video(model_name, version=None):\n    \"\"\"Unregister a video model family. Currently not supported.\"\"\"\n    # Video models don't support custom registration yet\n    pass\n\n\ndef register_builtin_model():\n    \"\"\"Register built-in video models.\"\"\"\n    _install()\n\n\ndef _install():\n    # Install models with intelligent merging based on timestamps\n    from ..utils import install_models_with_merge\n\n    install_models_with_merge(\n        BUILTIN_VIDEO_MODELS,\n        \"model_spec.json\",\n        \"video\",\n        \"video_models.json\",\n        has_downloaded_models,\n        load_model_family_from_json,\n    )\n\n    # register model description\n    for model_name, model_specs in BUILTIN_VIDEO_MODELS.items():\n        model_spec = [x for x in model_specs if x.model_hub == \"huggingface\"][0]\n        VIDEO_MODEL_DESCRIPTIONS.update(generate_video_description(model_spec))\n\n    register_custom_model()\n\n\ndef has_downloaded_models():\n    \"\"\"Check if downloaded JSON configurations exist.\"\"\"\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"video\")\n    json_file_path = os.path.join(builtin_dir, \"video_models.json\")\n    return os.path.exists(json_file_path)\n\n\ndef load_downloaded_models():\n    \"\"\"Load downloaded JSON configurations from the builtin directory.\"\"\"\n    builtin_dir = os.path.join(XINFERENCE_MODEL_DIR, \"v2\", \"builtin\", \"video\")\n    json_file_path = os.path.join(builtin_dir, \"video_models.json\")\n\n    try:\n        load_model_family_from_json(json_file_path, BUILTIN_VIDEO_MODELS)\n    except Exception as e:\n        warnings.warn(\n            f\"Failed to load downloaded video models from {json_file_path}: {e}\"\n        )\n        # Fall back to built-in models if download fails\n        load_model_family_from_json(\"model_spec.json\", BUILTIN_VIDEO_MODELS)\n\n\ndef load_model_family_from_json(json_filename, target_families):\n    # Handle both relative (module directory) and absolute paths\n    if os.path.isabs(json_filename):\n        json_path = json_filename\n    else:\n        json_path = os.path.join(os.path.dirname(__file__), json_filename)\n\n    flattened_model_specs = []\n    for spec in json.load(codecs.open(json_path, \"r\", encoding=\"utf-8\")):\n        flattened_model_specs.extend(flatten_model_src(spec))\n\n    for spec in flattened_model_specs:\n        if spec[\"model_name\"] not in target_families:\n            target_families[spec[\"model_name\"]] = [VideoModelFamilyV2(**spec)]\n        else:\n            target_families[spec[\"model_name\"]].append(VideoModelFamilyV2(**spec))\n\n    del json_path\n"
  },
  {
    "path": "xinference/model/video/cache_manager.py",
    "content": "import os\nfrom typing import Optional\n\nfrom ..cache_manager import CacheManager\n\n\nclass VideoCacheManager(CacheManager):\n    def cache_gguf(self, quantization: Optional[str] = None):\n        from ..utils import IS_NEW_HUGGINGFACE_HUB, retry_download, symlink_local_file\n        from .core import VideoModelFamilyV2\n\n        if not quantization:\n            return None\n\n        assert isinstance(self._model_family, VideoModelFamilyV2)\n        cache_dir = self.get_cache_dir()\n\n        if not self._model_family.gguf_model_file_name_template:\n            raise NotImplementedError(\n                f\"{self._model_family.model_name} does not support GGUF quantization\"\n            )\n        if quantization not in (self._model_family.gguf_quantizations or []):\n            raise ValueError(\n                f\"Cannot support quantization {quantization}, \"\n                f\"available quantizations: {self._model_family.gguf_quantizations}\"\n            )\n\n        filename = self._model_family.gguf_model_file_name_template.format(\n            quantization=quantization\n        )\n        full_path = os.path.join(cache_dir, filename)\n\n        if self._model_family.model_hub == \"huggingface\":\n            import huggingface_hub\n\n            use_symlinks = {}\n            if not IS_NEW_HUGGINGFACE_HUB:\n                use_symlinks = {\"local_dir_use_symlinks\": True, \"local_dir\": cache_dir}\n            download_file_path = retry_download(\n                huggingface_hub.hf_hub_download,\n                self._model_family.model_name,\n                None,\n                self._model_family.gguf_model_id,\n                filename=filename,\n                **use_symlinks,\n            )\n            if IS_NEW_HUGGINGFACE_HUB:\n                symlink_local_file(download_file_path, cache_dir, filename)\n        elif self._model_family.model_hub == \"modelscope\":\n            from modelscope.hub.file_download import model_file_download\n\n            download_file_path = retry_download(\n                model_file_download,\n                self._model_family.model_name,\n                None,\n                self._model_family.gguf_model_id,\n                filename,\n                revision=self._model_family.model_revision,\n            )\n            symlink_local_file(download_file_path, cache_dir, filename)\n        else:\n            raise NotImplementedError\n\n        return full_path\n"
  },
  {
    "path": "xinference/model/video/core.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nfrom collections import defaultdict\nfrom typing import Any, Dict, List, Literal, Optional\n\nfrom ..core import CacheableModelSpec, VirtualEnvSettings\nfrom ..utils import ModelInstanceInfoMixin\nfrom .diffusers import DiffusersVideoModel\n\nlogger = logging.getLogger(__name__)\n\nVIDEO_MODEL_DESCRIPTIONS: Dict[str, List[Dict]] = defaultdict(list)\nBUILTIN_VIDEO_MODELS: Dict[str, List[\"VideoModelFamilyV2\"]] = {}\n\n\ndef get_video_model_descriptions():\n    import copy\n\n    return copy.deepcopy(VIDEO_MODEL_DESCRIPTIONS)\n\n\nclass VideoModelFamilyV2(CacheableModelSpec, ModelInstanceInfoMixin):\n    version: Literal[2]\n    model_family: str\n    model_name: str\n    model_id: str\n    model_revision: str\n    model_hub: str = \"huggingface\"\n    model_ability: Optional[List[str]]\n    default_model_config: Optional[Dict[str, Any]]\n    default_generate_config: Optional[Dict[str, Any]]\n    gguf_model_id: Optional[str]\n    gguf_quantizations: Optional[List[str]]\n    gguf_model_file_name_template: Optional[str]\n    virtualenv: Optional[VirtualEnvSettings]\n\n    class Config:\n        extra = \"allow\"\n\n    def to_description(self):\n        return {\n            \"model_type\": \"video\",\n            \"address\": getattr(self, \"address\", None),\n            \"accelerators\": getattr(self, \"accelerators\", None),\n            \"model_name\": self.model_name,\n            \"model_family\": self.model_family,\n            \"model_revision\": self.model_revision,\n            \"model_ability\": self.model_ability,\n        }\n\n    def to_version_info(self):\n        from ..cache_manager import CacheManager\n\n        cache_manager = CacheManager(self)\n\n        return {\n            \"model_version\": self.model_name,\n            \"model_file_location\": cache_manager.get_cache_dir(),\n            \"cache_status\": cache_manager.get_cache_status(),\n        }\n\n\ndef generate_video_description(\n    video_model: VideoModelFamilyV2,\n) -> Dict[str, List[Dict]]:\n    res = defaultdict(list)\n    res[video_model.model_name].append(video_model.to_version_info())\n    return res\n\n\ndef match_diffusion(\n    model_name: str,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n) -> VideoModelFamilyV2:\n    from ..utils import download_from_modelscope\n    from . import BUILTIN_VIDEO_MODELS\n\n    if model_name in BUILTIN_VIDEO_MODELS:\n        model_families = BUILTIN_VIDEO_MODELS[model_name]\n        if download_hub == \"modelscope\" or download_from_modelscope():\n            return (\n                [x for x in model_families if x.model_hub == \"modelscope\"]\n                + [x for x in model_families if x.model_hub == \"huggingface\"]\n            )[0]\n        else:\n            return [x for x in model_families if x.model_hub == \"huggingface\"][0]\n    else:\n        raise ValueError(\n            f\"Video model {model_name} not found, available\"\n            f\"model list: {BUILTIN_VIDEO_MODELS.keys()}\"\n        )\n\n\ndef create_video_model_instance(\n    model_uid: str,\n    model_name: str,\n    download_hub: Optional[\n        Literal[\"huggingface\", \"modelscope\", \"openmind_hub\", \"csghub\"]\n    ] = None,\n    model_path: Optional[str] = None,\n    gguf_quantization: Optional[str] = None,\n    gguf_model_path: Optional[str] = None,\n    **kwargs,\n) -> DiffusersVideoModel:\n    from .cache_manager import VideoCacheManager\n\n    model_spec = match_diffusion(model_name, download_hub)\n\n    if not model_path:\n        cache_manager = VideoCacheManager(model_spec)\n        model_path = cache_manager.cache()\n    if not gguf_model_path and gguf_quantization:\n        cache_manager = VideoCacheManager(model_spec)\n        gguf_model_path = cache_manager.cache_gguf(gguf_quantization)\n    assert model_path is not None\n\n    model = DiffusersVideoModel(\n        model_uid,\n        model_path,\n        model_spec,\n        gguf_model_path=gguf_model_path,\n        **kwargs,\n    )\n    return model\n"
  },
  {
    "path": "xinference/model/video/diffusers.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nimport importlib\nimport json\nimport logging\nimport operator\nimport os\nimport time\nimport uuid\nfrom concurrent.futures import ThreadPoolExecutor\nfrom functools import partial, reduce\nfrom typing import TYPE_CHECKING, Any, List, Optional, Union\n\nimport numpy as np\nimport PIL.Image\n\nfrom ...constants import XINFERENCE_VIDEO_DIR\nfrom ...device_utils import gpu_count, move_model_to_available_device\nfrom ...types import Video, VideoList\n\nif TYPE_CHECKING:\n    from ...core.progress_tracker import Progressor\n    from .core import VideoModelFamilyV2\n\n\nlogger = logging.getLogger(__name__)\n\n\ndef export_to_video_imageio(\n    video_frames: Union[List[np.ndarray], List[\"PIL.Image.Image\"]],\n    output_video_path: str,\n    fps: int = 8,\n) -> str:\n    \"\"\"\n    Export the video frames to a video file using imageio lib to Avoid \"green screen\" issue (for example CogVideoX)\n    \"\"\"\n    import imageio\n\n    if isinstance(video_frames[0], PIL.Image.Image):\n        video_frames = [np.array(frame) for frame in video_frames]\n    with imageio.get_writer(output_video_path, fps=fps) as writer:\n        for frame in video_frames:\n            writer.append_data(frame)\n    return output_video_path\n\n\nclass DiffusersVideoModel:\n    def __init__(\n        self,\n        model_uid: str,\n        model_path: str,\n        model_spec: \"VideoModelFamilyV2\",\n        gguf_model_path: Optional[str] = None,\n        **kwargs,\n    ):\n        self.model_family = model_spec\n        self._model_uid = model_uid\n        self._model_path = model_path\n        self._model_spec = model_spec\n        self._abilities = model_spec.model_ability or []  # type: ignore\n        self._model = None\n        self._kwargs = kwargs\n        self._gguf_model_path = gguf_model_path\n\n    @property\n    def model_spec(self):\n        return self._model_spec\n\n    @property\n    def model_ability(self):\n        return self._abilities\n\n    def _get_layer_cls(self, layer: str):\n        with open(os.path.join(self._model_path, \"model_index.json\")) as f:\n            model_index = json.load(f)\n            layer_info = model_index[layer]\n            module_name, class_name = layer_info\n            module = importlib.import_module(module_name)\n            return getattr(module, class_name)\n\n    def _load_transformer_gguf(self, torch_dtype):\n        from diffusers import GGUFQuantizationConfig\n\n        logger.debug(\"Loading gguf transformer from %s\", self._gguf_model_path)\n        return self._get_layer_cls(\"transformer\").from_single_file(\n            self._gguf_model_path,\n            quantization_config=GGUFQuantizationConfig(compute_dtype=torch_dtype),\n            torch_dtype=torch_dtype,\n            config=os.path.join(self._model_path, \"transformer\"),\n        )\n\n    @staticmethod\n    def _register_transformer(pipeline, transformer):\n        if transformer is None:\n            return\n        if hasattr(pipeline, \"register_modules\"):\n            pipeline.register_modules(transformer=transformer)\n        else:\n            pipeline.transformer = transformer\n\n    def load(self):\n        import torch\n\n        kwargs = self._model_spec.default_model_config.copy()\n        kwargs.update(self._kwargs)\n\n        scheduler_cls_name = kwargs.pop(\"scheduler\", None)\n\n        torch_dtype = kwargs.get(\"torch_dtype\")\n        if isinstance(torch_dtype, str):\n            kwargs[\"torch_dtype\"] = getattr(torch, torch_dtype)\n            torch_dtype = kwargs[\"torch_dtype\"]\n        logger.debug(\"Loading video model with kwargs: %s\", kwargs)\n\n        transformer = None\n        if self._gguf_model_path and self._model_spec.model_family != \"HunyuanVideo\":\n            transformer = self._load_transformer_gguf(torch_dtype)\n\n        if self._model_spec.model_family == \"CogVideoX\":\n            import diffusers\n            from diffusers import CogVideoXPipeline\n\n            pipeline = self._model = CogVideoXPipeline.from_pretrained(\n                self._model_path, **kwargs\n            )\n            self._register_transformer(pipeline, transformer)\n        elif self._model_spec.model_family == \"HunyuanVideo\":\n            from diffusers import HunyuanVideoPipeline, HunyuanVideoTransformer3DModel\n\n            transformer_torch_dtype = kwargs.pop(\"transformer_torch_dtype\", None)\n            if isinstance(transformer_torch_dtype, str):\n                transformer_torch_dtype = getattr(torch, transformer_torch_dtype)\n            if transformer_torch_dtype is None:\n                transformer_torch_dtype = torch_dtype\n            if self._gguf_model_path:\n                transformer = self._load_transformer_gguf(transformer_torch_dtype)\n            else:\n                transformer = HunyuanVideoTransformer3DModel.from_pretrained(\n                    self._model_path,\n                    subfolder=\"transformer\",\n                    torch_dtype=transformer_torch_dtype,\n                )\n            pipeline = self._model = HunyuanVideoPipeline.from_pretrained(\n                self._model_path, transformer=transformer, **kwargs\n            )\n        elif self.model_spec.model_family == \"Wan\":\n            from diffusers import AutoencoderKLWan, WanImageToVideoPipeline, WanPipeline\n            from transformers import CLIPVisionModel\n\n            if \"text2video\" in self.model_spec.model_ability:\n                pipeline = self._model = WanPipeline.from_pretrained(\n                    self._model_path, **kwargs\n                )\n                self._register_transformer(pipeline, transformer)\n            else:\n                assert (\n                    \"image2video\" in self.model_spec.model_ability\n                    or \"firstlastframe2video\" in self.model_spec.model_ability\n                )\n\n                image_encoder = CLIPVisionModel.from_pretrained(\n                    self._model_path,\n                    subfolder=\"image_encoder\",\n                    torch_dtype=torch.float32,\n                )\n                vae = AutoencoderKLWan.from_pretrained(\n                    self._model_path, subfolder=\"vae\", torch_dtype=torch.float32\n                )\n                pipeline = self._model = WanImageToVideoPipeline.from_pretrained(\n                    self._model_path, vae=vae, image_encoder=image_encoder, **kwargs\n                )\n                self._register_transformer(pipeline, transformer)\n        else:\n            raise Exception(\n                f\"Unsupported model family: {self._model_spec.model_family}\"\n            )\n\n        if scheduler_cls_name:\n            logger.debug(\"Using scheduler: %s\", scheduler_cls_name)\n            pipeline.scheduler = getattr(diffusers, scheduler_cls_name).from_config(\n                pipeline.scheduler.config, timestep_spacing=\"trailing\"\n            )\n        if kwargs.get(\"compile_graph\", False):\n            pipeline.transformer = torch.compile(\n                pipeline.transformer, mode=\"max-autotune\", fullgraph=True\n            )\n        if kwargs.get(\"layerwise_cast\", False):\n            compute_dtype = pipeline.transformer.dtype\n            pipeline.transformer.enable_layerwise_casting(\n                storage_dtype=torch.float8_e4m3fn, compute_dtype=compute_dtype\n            )\n        if kwargs.get(\"cpu_offload\", False):\n            logger.debug(\"CPU offloading model\")\n            pipeline.enable_model_cpu_offload()\n            if kwargs.get(\"sequential_cpu_offload\", True):\n                pipeline.enable_sequential_cpu_offload()\n            try:\n                pipeline.vae.enable_slicing()\n            except AttributeError:\n                # model does not support slicing\n                pass\n            try:\n                pipeline.vae.enable_tiling()\n            except AttributeError:\n                # model does support tiling\n                pass\n        elif kwargs.get(\"group_offload\", False):\n            from diffusers.hooks.group_offloading import apply_group_offloading\n\n            onload_device = torch.device(\"cuda\")\n            offload_device = torch.device(\"cpu\")\n\n            apply_group_offloading(\n                pipeline.text_encoder,\n                onload_device=onload_device,\n                offload_device=offload_device,\n                offload_type=\"block_level\",\n                num_blocks_per_group=4,\n            )\n            group_offload_kwargs = {}\n            if kwargs.get(\"use_stream\", False):\n                group_offload_kwargs[\"offload_type\"] = \"block_level\"\n                group_offload_kwargs[\"num_blocks_per_group\"] = 4\n            else:\n                group_offload_kwargs[\"offload_type\"] = \"leaf_level\"\n                group_offload_kwargs[\"use_stream\"] = True\n            pipeline.transformer.enable_group_offload(\n                onload_device=onload_device,\n                offload_device=offload_device,\n                **group_offload_kwargs,\n            )\n            # Since we've offloaded the larger models already, we can move the rest of the model components to GPU\n            pipeline = move_model_to_available_device(pipeline)\n        elif not kwargs.get(\"device_map\"):\n            logger.debug(\"Loading model to available device\")\n            if gpu_count() > 1:\n                kwargs[\"device_map\"] = \"balanced\"\n            else:\n                pipeline = move_model_to_available_device(self._model)\n        # Recommended if your computer has < 64 GB of RAM\n        pipeline.enable_attention_slicing()\n\n    @staticmethod\n    def _process_progressor(kwargs: dict):\n        import diffusers\n\n        progressor: Progressor = kwargs.pop(\"progressor\", None)\n\n        def report_status_callback(\n            pipe: diffusers.DiffusionPipeline,\n            step: int,\n            timestep: int,\n            callback_kwargs: dict,\n        ):\n            num_steps = pipe.num_timesteps\n            progressor.set_progress((step + 1) / num_steps)\n\n            return callback_kwargs\n\n        if progressor and progressor.request_id:\n            kwargs[\"callback_on_step_end\"] = report_status_callback\n\n    def text_to_video(\n        self,\n        prompt: str,\n        n: int = 1,\n        num_inference_steps: int = 50,\n        response_format: str = \"b64_json\",\n        **kwargs,\n    ) -> VideoList:\n        assert self._model is not None\n        assert callable(self._model)\n        generate_kwargs = self._model_spec.default_generate_config.copy()\n        generate_kwargs.update(kwargs)\n        generate_kwargs[\"num_videos_per_prompt\"] = n\n        fps = generate_kwargs.pop(\"fps\", 10)\n        logger.debug(\n            \"diffusers text_to_video args: %s\",\n            generate_kwargs,\n        )\n        self._process_progressor(generate_kwargs)\n        output = self._model(\n            prompt=prompt,\n            num_inference_steps=num_inference_steps,\n            **generate_kwargs,\n        )\n        return self._output_to_video(output, fps, response_format)\n\n    def image_to_video(\n        self,\n        image: PIL.Image.Image,\n        prompt: str,\n        n: int = 1,\n        num_inference_steps: Optional[int] = None,\n        response_format: str = \"b64_json\",\n        **kwargs,\n    ):\n        assert self._model is not None\n        assert callable(self._model)\n        generate_kwargs = self._model_spec.default_generate_config.copy()\n        generate_kwargs.update(kwargs)\n        generate_kwargs[\"num_videos_per_prompt\"] = n\n        if num_inference_steps:\n            generate_kwargs[\"num_inference_steps\"] = num_inference_steps\n        fps = generate_kwargs.pop(\"fps\", 10)\n\n        # process image\n        max_area = generate_kwargs.pop(\"max_area\")\n        if isinstance(max_area, str):\n            max_area = [int(v) for v in max_area.split(\"*\")]\n        max_area = reduce(operator.mul, max_area, 1)\n        image = self._process_image(image, max_area)\n\n        height, width = image.height, image.width\n        generate_kwargs.pop(\"width\", None)\n        generate_kwargs.pop(\"height\", None)\n        self._process_progressor(generate_kwargs)\n        output = self._model(\n            image=image, prompt=prompt, height=height, width=width, **generate_kwargs\n        )\n        return self._output_to_video(output, fps, response_format)\n\n    def firstlastframe_to_video(\n        self,\n        first_frame: PIL.Image.Image,\n        last_frame: PIL.Image.Image,\n        prompt: str,\n        n: int = 1,\n        num_inference_steps: Optional[int] = None,\n        response_format: str = \"b64_json\",\n        **kwargs,\n    ):\n        assert self._model is not None\n        assert callable(self._model)\n        generate_kwargs = self._model_spec.default_generate_config.copy()\n        generate_kwargs.update(kwargs)\n        generate_kwargs[\"num_videos_per_prompt\"] = n\n        if num_inference_steps:\n            generate_kwargs[\"num_inference_steps\"] = num_inference_steps\n        fps = generate_kwargs.pop(\"fps\", 10)\n\n        # process first and last frame\n        max_area = generate_kwargs.pop(\"max_area\")\n        if isinstance(max_area, str):\n            max_area = [int(v) for v in max_area.split(\"*\")]\n        max_area = reduce(operator.mul, max_area, 1)\n        first_frame = self._process_image(first_frame, max_area)\n        width, height = first_frame.size\n        if last_frame.size != first_frame.size:\n            last_frame = self._center_crop_resize(last_frame, height, width)\n\n        generate_kwargs.pop(\"width\", None)\n        generate_kwargs.pop(\"height\", None)\n        self._process_progressor(generate_kwargs)\n        output = self._model(\n            image=first_frame,\n            last_image=last_frame,\n            prompt=prompt,\n            height=height,\n            width=width,\n            **generate_kwargs,\n        )\n        return self._output_to_video(output, fps, response_format)\n\n    def _process_image(self, image: PIL.Image.Image, max_area: int) -> PIL.Image.Image:\n        assert self._model is not None\n        aspect_ratio = image.height / image.width\n        mod_value = (\n            self._model.vae_scale_factor_spatial\n            * self._model.transformer.config.patch_size[1]\n        )\n        height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value\n        width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value\n        return image.resize((width, height))\n\n    @classmethod\n    def _center_crop_resize(\n        cls, image: PIL.Image.Image, height: int, width: int\n    ) -> PIL.Image.Image:\n        import torchvision.transforms.functional as TF\n\n        # Calculate resize ratio to match first frame dimensions\n        resize_ratio = max(width / image.width, height / image.height)\n\n        # Resize the image\n        width = round(image.width * resize_ratio)\n        height = round(image.height * resize_ratio)\n        size = [width, height]\n        image = TF.center_crop(image, size)\n\n        return image\n\n    def _output_to_video(self, output: Any, fps: int, response_format: str):\n        import gc\n\n        # cv2 bug will cause the video cannot be normally displayed\n        # thus we use the imageio one\n        from diffusers.utils import export_to_video\n\n        from ...device_utils import empty_cache\n\n        # clean cache\n        gc.collect()\n        empty_cache()\n\n        os.makedirs(XINFERENCE_VIDEO_DIR, exist_ok=True)\n        urls = []\n        for f in output.frames:\n            path = os.path.join(XINFERENCE_VIDEO_DIR, uuid.uuid4().hex + \".mp4\")\n            export = (\n                export_to_video\n                if self.model_spec.model_family != \"CogVideoX\"\n                else export_to_video_imageio\n            )\n            p = export(f, path, fps=fps)\n            urls.append(p)\n        if response_format == \"url\":\n            return VideoList(\n                created=int(time.time()),\n                data=[Video(url=url, b64_json=None) for url in urls],\n            )\n        elif response_format == \"b64_json\":\n\n            def _gen_base64_video(_video_url):\n                try:\n                    with open(_video_url, \"rb\") as f:\n                        return base64.b64encode(f.read()).decode()\n                finally:\n                    os.remove(_video_url)\n\n            with ThreadPoolExecutor() as executor:\n                results = list(map(partial(executor.submit, _gen_base64_video), urls))  # type: ignore\n                video_list = [Video(url=None, b64_json=s.result()) for s in results]\n            return VideoList(created=int(time.time()), data=video_list)\n        else:\n            raise ValueError(f\"Unsupported response format: {response_format}\")\n"
  },
  {
    "path": "xinference/model/video/model_spec.json",
    "content": "[\n  {\n    \"version\": 2,\n    \"model_name\": \"CogVideoX-2b\",\n    \"model_family\": \"CogVideoX\",\n    \"model_ability\": [\n      \"text2video\"\n    ],\n    \"default_model_config\": {\n      \"scheduler\": \"CogVideoXDDIMScheduler\",\n      \"torch_dtype\": \"float16\"\n    },\n    \"default_generate_config\": {\n      \"guidance_scale\": 6\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"THUDM/CogVideoX-2b\",\n        \"model_revision\": \"4bbfb1de622b80bc1b77b6e9aced75f816be0e38\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"ZhipuAI/CogVideoX-2b\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385300,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"CogVideoX-5b\",\n    \"model_family\": \"CogVideoX\",\n    \"model_ability\": [\n      \"text2video\"\n    ],\n    \"default_model_config\": {\n      \"scheduler\": \"CogVideoXDPMScheduler\",\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {\n      \"guidance_scale\": 7\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"THUDM/CogVideoX-5b\",\n        \"model_revision\": \"8d6ea3f817438460b25595a120f109b88d5fdfad\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"ZhipuAI/CogVideoX-5b\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385301,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"HunyuanVideo\",\n    \"model_family\": \"HunyuanVideo\",\n    \"model_ability\": [\n      \"text2video\"\n    ],\n    \"default_model_config\": {\n      \"transformer_torch_dtype\": \"bfloat16\",\n      \"torch_dtype\": \"float16\"\n    },\n    \"default_generate_config\": {},\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"hunyuanvideo-community/HunyuanVideo\",\n        \"model_revision\": \"e8c2aaa66fe3742a32c11a6766aecbf07c56e773\",\n        \"gguf_model_id\": \"city96/HunyuanVideo-gguf\",\n        \"gguf_quantizations\": [\n          \"BF16\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"hunyuan-video-t2v-720p-{quantization}.gguf\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Xorbits/HunyuanVideo\",\n        \"model_revision\": \"master\",\n        \"gguf_model_id\": \"city96/HunyuanVideo-gguf\",\n        \"gguf_quantizations\": [\n          \"BF16\",\n          \"Q3_K_M\",\n          \"Q3_K_S\",\n          \"Q4_0\",\n          \"Q4_1\",\n          \"Q4_K_M\",\n          \"Q4_K_S\",\n          \"Q5_0\",\n          \"Q5_1\",\n          \"Q5_K_M\",\n          \"Q5_K_S\",\n          \"Q6_K\",\n          \"Q8_0\"\n        ],\n        \"gguf_model_file_name_template\": \"hunyuan-video-t2v-720p-{quantization}.gguf\"\n      }\n    },\n    \"updated_at\": 1768188075,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Wan2.1-1.3B\",\n    \"model_family\": \"Wan\",\n    \"model_ability\": [\n      \"text2video\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {},\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers>=0.33.0\",\n        \"ftfy\",\n        \"imageio-ffmpeg\",\n        \"imageio\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Wan-AI/Wan2.1-T2V-1.3B-Diffusers\",\n        \"model_revision\": \"0fad780a534b6463e45facd96134c9f345acfa5b\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Wan-AI/Wan2.1-T2V-1.3B-Diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385303,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Wan2.1-14B\",\n    \"model_family\": \"Wan\",\n    \"model_ability\": [\n      \"text2video\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {},\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers>=0.33.0\",\n        \"ftfy\",\n        \"imageio-ffmpeg\",\n        \"imageio\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Wan-AI/Wan2.1-T2V-14B-Diffusers\",\n        \"model_revision\": \"38ec498cb3208fb688890f8cc7e94ede2cbd7f68\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Wan-AI/Wan2.1-T2V-14B-Diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385304,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Wan2.1-i2v-14B-480p\",\n    \"model_family\": \"Wan\",\n    \"model_ability\": [\n      \"image2video\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {\n      \"max_area\": [\n        480,\n        832\n      ]\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers>=0.33.0\",\n        \"ftfy\",\n        \"imageio-ffmpeg\",\n        \"imageio\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Wan-AI/Wan2.1-I2V-14B-480P-Diffusers\",\n        \"model_revision\": \"b184e23a8a16b20f108f727c902e769e873ffc73\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Wan-AI/Wan2.1-I2V-14B-480P-Diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385305,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Wan2.1-i2v-14B-720p\",\n    \"model_family\": \"Wan\",\n    \"model_ability\": [\n      \"image2video\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {\n      \"max_area\": [\n        720,\n        1280\n      ]\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers>=0.33.0\",\n        \"ftfy\",\n        \"imageio-ffmpeg\",\n        \"imageio\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Wan-AI/Wan2.1-I2V-14B-720P-Diffusers\",\n        \"model_revision\": \"eb849f76dfa246545b65774a9e25943ee69b3fa3\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Wan-AI/Wan2.1-I2V-14B-720P-Diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385306,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Wan2.1-flf2v-14B-720p\",\n    \"model_family\": \"Wan\",\n    \"model_ability\": [\n      \"firstlastframe2video\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {\n      \"max_area\": [\n        720,\n        1280\n      ]\n    },\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers==0.35.1\",\n        \"ftfy\",\n        \"imageio-ffmpeg\",\n        \"imageio\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Wan-AI/Wan2.1-FLF2V-14B-720P-diffusers\",\n        \"model_revision\": \"17c30769b1e0b5dcaa1799b117bf20a9c31f59d7\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Wan-AI/Wan2.1-FLF2V-14B-720P-diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385307,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Wan2.2-A14B\",\n    \"model_family\": \"Wan\",\n    \"model_ability\": [\n      \"text2video\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {},\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers==0.35.1\",\n        \"ftfy\",\n        \"imageio-ffmpeg\",\n        \"imageio\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Wan-AI/Wan2.2-T2V-A14B-Diffusers\",\n        \"model_revision\": \"5be7df9619b54f4e2667b2755bc6a756675b5cd7\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Wan-AI/Wan2.2-T2V-A14B-Diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385308,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Wan2.2-i2v-A14B\",\n    \"model_family\": \"Wan\",\n    \"model_ability\": [\n      \"image2video\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {},\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers==0.35.1\",\n        \"ftfy\",\n        \"imageio-ffmpeg\",\n        \"imageio\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Wan-AI/Wan2.2-I2V-A14B-Diffusers\",\n        \"model_revision\": \"596658fd9ca6b7b71d5057529bbf319ecbc61d74\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Wan-AI/Wan2.2-I2V-A14B-Diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385309,\n    \"featured\": false\n  },\n  {\n    \"version\": 2,\n    \"model_name\": \"Wan2.2-ti2v-5B\",\n    \"model_family\": \"Wan\",\n    \"model_ability\": [\n      \"text2video\",\n      \"image2video\"\n    ],\n    \"default_model_config\": {\n      \"torch_dtype\": \"bfloat16\"\n    },\n    \"default_generate_config\": {},\n    \"virtualenv\": {\n      \"packages\": [\n        \"diffusers==0.35.1\",\n        \"ftfy\",\n        \"imageio-ffmpeg\",\n        \"imageio\",\n        \"#system_numpy#\"\n      ]\n    },\n    \"model_src\": {\n      \"huggingface\": {\n        \"model_id\": \"Wan-AI/Wan2.2-TI2V-5B-Diffusers\",\n        \"model_revision\": \"b8fff7315c768468a5333511427288870b2e9635\"\n      },\n      \"modelscope\": {\n        \"model_id\": \"Wan-AI/Wan2.2-TI2V-5B-Diffusers\",\n        \"model_revision\": \"master\"\n      }\n    },\n    \"updated_at\": 1766385310,\n    \"featured\": false\n  }\n]\n"
  },
  {
    "path": "xinference/model/video/tests/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/model/video/tests/test_diffusers_video.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\n\nimport pytest\n\nfrom ...cache_manager import CacheManager\nfrom .. import BUILTIN_VIDEO_MODELS\nfrom ..diffusers import DiffusersVideoModel\n\nlogger = logging.getLogger(__name__)\n\n\n@pytest.mark.skip(reason=\"Video model requires too many GRAM.\")\ndef test_model():\n    test_model_spec = next(iter(BUILTIN_VIDEO_MODELS.values()))\n    model_path = CacheManager(test_model_spec).cache()\n    model = DiffusersVideoModel(\"mock\", model_path, test_model_spec)\n    # input is a string\n    input_text = \"an apple\"\n    model.load()\n    r = model.text_to_image(input_text)\n    assert r\n\n\n@pytest.mark.skip(reason=\"Video model requires too many GRAM.\")\ndef test_client(setup):\n    endpoint, _ = setup\n    from ....client import Client\n\n    client = Client(endpoint)\n\n    model_uid = client.launch_model(\n        model_uid=\"my_video_model\",\n        model_name=\"CogVideoX-2b\",\n        model_type=\"video\",\n    )\n    model = client.get_model(model_uid)\n    assert model\n\n    r = model.text_to_video(\n        prompt=\"A panda, dressed in a small, red jacket and a tiny hat, \"\n        \"sits on a wooden stool in a serene bamboo forest. \"\n        \"The panda's fluffy paws strum a miniature acoustic guitar, \"\n        \"producing soft, melodic tunes. Nearby, a few other pandas gather, \"\n        \"watching curiously and some clapping in rhythm. \"\n        \"Sunlight filters through the tall bamboo, casting a gentle glow on the scene. \"\n        \"The panda's face is expressive, showing concentration and joy as it plays. \"\n        \"The background includes a small, flowing stream and vibrant green foliage, \"\n        \"enhancing the peaceful and magical atmosphere of this unique musical performance.\"\n    )\n    assert r\n"
  },
  {
    "path": "xinference/thirdparty/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/audiotools/__init__.py",
    "content": "__version__ = \"0.7.4\"\nfrom .core import AudioSignal\nfrom .core import STFTParams\nfrom .core import Meter\nfrom .core import util\nfrom . import metrics\nfrom . import data\nfrom . import ml\nfrom .data import datasets\nfrom .data import transforms\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/__init__.py",
    "content": "from . import util\nfrom .audio_signal import AudioSignal\nfrom .audio_signal import STFTParams\nfrom .loudness import Meter\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/audio_signal.py",
    "content": "import copy\nimport functools\nimport hashlib\nimport math\nimport pathlib\nimport tempfile\nimport typing\nimport warnings\nfrom collections import namedtuple\nfrom pathlib import Path\n\nimport julius\nimport numpy as np\nimport soundfile\nimport torch\n\nfrom . import util\nfrom .display import DisplayMixin\nfrom .dsp import DSPMixin\nfrom .effects import EffectMixin\nfrom .effects import ImpulseResponseMixin\nfrom .ffmpeg import FFMPEGMixin\nfrom .loudness import LoudnessMixin\nfrom .playback import PlayMixin\nfrom .whisper import WhisperMixin\n\n\nSTFTParams = namedtuple(\n    \"STFTParams\",\n    [\"window_length\", \"hop_length\", \"window_type\", \"match_stride\", \"padding_type\"],\n)\n\"\"\"\nSTFTParams object is a container that holds STFT parameters - window_length,\nhop_length, and window_type. Not all parameters need to be specified. Ones that\nare not specified will be inferred by the AudioSignal parameters.\n\nParameters\n----------\nwindow_length : int, optional\n    Window length of STFT, by default ``0.032 * self.sample_rate``.\nhop_length : int, optional\n    Hop length of STFT, by default ``window_length // 4``.\nwindow_type : str, optional\n    Type of window to use, by default ``sqrt\\\\_hann``.\nmatch_stride : bool, optional\n    Whether to match the stride of convolutional layers, by default False\npadding_type : str, optional\n    Type of padding to use, by default 'reflect'\n\"\"\"\nSTFTParams.__new__.__defaults__ = (None, None, None, None, None)\n\n\nclass AudioSignal(\n    EffectMixin,\n    LoudnessMixin,\n    PlayMixin,\n    ImpulseResponseMixin,\n    DSPMixin,\n    DisplayMixin,\n    FFMPEGMixin,\n    WhisperMixin,\n):\n    \"\"\"This is the core object of this library. Audio is always\n    loaded into an AudioSignal, which then enables all the features\n    of this library, including audio augmentations, I/O, playback,\n    and more.\n\n    The structure of this object is that the base functionality\n    is defined in ``core/audio_signal.py``, while extensions to\n    that functionality are defined in the other ``core/*.py``\n    files. For example, all the display-based functionality\n    (e.g. plot spectrograms, waveforms, write to tensorboard)\n    are in ``core/display.py``.\n\n    Parameters\n    ----------\n    audio_path_or_array : typing.Union[torch.Tensor, str, Path, np.ndarray]\n        Object to create AudioSignal from. Can be a tensor, numpy array,\n        or a path to a file. The file is always reshaped to\n    sample_rate : int, optional\n        Sample rate of the audio. If different from underlying file, resampling is\n        performed. If passing in an array or tensor, this must be defined,\n        by default None\n    stft_params : STFTParams, optional\n        Parameters of STFT to use. , by default None\n    offset : float, optional\n        Offset in seconds to read from file, by default 0\n    duration : float, optional\n        Duration in seconds to read from file, by default None\n    device : str, optional\n        Device to load audio onto, by default None\n\n    Examples\n    --------\n    Loading an AudioSignal from an array, at a sample rate of\n    44100.\n\n    >>> signal = AudioSignal(torch.randn(5*44100), 44100)\n\n    Note, the signal is reshaped to have a batch size, and one\n    audio channel:\n\n    >>> print(signal.shape)\n    (1, 1, 44100)\n\n    You can treat AudioSignals like tensors, and many of the same\n    functions you might use on tensors are defined for AudioSignals\n    as well:\n\n    >>> signal.to(\"cuda\")\n    >>> signal.cuda()\n    >>> signal.clone()\n    >>> signal.detach()\n\n    Indexing AudioSignals returns an AudioSignal:\n\n    >>> signal[..., 3*44100:4*44100]\n\n    The above signal is 1 second long, and is also an AudioSignal.\n    \"\"\"\n\n    def __init__(\n        self,\n        audio_path_or_array: typing.Union[torch.Tensor, str, Path, np.ndarray],\n        sample_rate: int = None,\n        stft_params: STFTParams = None,\n        offset: float = 0,\n        duration: float = None,\n        device: str = None,\n    ):\n        audio_path = None\n        audio_array = None\n\n        if isinstance(audio_path_or_array, str):\n            audio_path = audio_path_or_array\n        elif isinstance(audio_path_or_array, pathlib.Path):\n            audio_path = audio_path_or_array\n        elif isinstance(audio_path_or_array, np.ndarray):\n            audio_array = audio_path_or_array\n        elif torch.is_tensor(audio_path_or_array):\n            audio_array = audio_path_or_array\n        else:\n            raise ValueError(\n                \"audio_path_or_array must be either a Path, \"\n                \"string, numpy array, or torch Tensor!\"\n            )\n\n        self.path_to_file = None\n\n        self.audio_data = None\n        self.sources = None  # List of AudioSignal objects.\n        self.stft_data = None\n        if audio_path is not None:\n            self.load_from_file(\n                audio_path, offset=offset, duration=duration, device=device\n            )\n        elif audio_array is not None:\n            assert sample_rate is not None, \"Must set sample rate!\"\n            self.load_from_array(audio_array, sample_rate, device=device)\n\n        self.window = None\n        self.stft_params = stft_params\n\n        self.metadata = {\n            \"offset\": offset,\n            \"duration\": duration,\n        }\n\n    @property\n    def path_to_input_file(\n        self,\n    ):\n        \"\"\"\n        Path to input file, if it exists.\n        Alias to ``path_to_file`` for backwards compatibility\n        \"\"\"\n        return self.path_to_file\n\n    @classmethod\n    def excerpt(\n        cls,\n        audio_path: typing.Union[str, Path],\n        offset: float = None,\n        duration: float = None,\n        state: typing.Union[np.random.RandomState, int] = None,\n        **kwargs,\n    ):\n        \"\"\"Randomly draw an excerpt of ``duration`` seconds from an\n        audio file specified at ``audio_path``, between ``offset`` seconds\n        and end of file. ``state`` can be used to seed the random draw.\n\n        Parameters\n        ----------\n        audio_path : typing.Union[str, Path]\n            Path to audio file to grab excerpt from.\n        offset : float, optional\n            Lower bound for the start time, in seconds drawn from\n            the file, by default None.\n        duration : float, optional\n            Duration of excerpt, in seconds, by default None\n        state : typing.Union[np.random.RandomState, int], optional\n            RandomState or seed of random state, by default None\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal containing excerpt.\n\n        Examples\n        --------\n        >>> signal = AudioSignal.excerpt(\"path/to/audio\", duration=5)\n        \"\"\"\n        info = util.info(audio_path)\n        total_duration = info.duration\n\n        state = util.random_state(state)\n        lower_bound = 0 if offset is None else offset\n        upper_bound = max(total_duration - duration, 0)\n        offset = state.uniform(lower_bound, upper_bound)\n\n        signal = cls(audio_path, offset=offset, duration=duration, **kwargs)\n        signal.metadata[\"offset\"] = offset\n        signal.metadata[\"duration\"] = duration\n\n        return signal\n\n    @classmethod\n    def salient_excerpt(\n        cls,\n        audio_path: typing.Union[str, Path],\n        loudness_cutoff: float = None,\n        num_tries: int = 8,\n        state: typing.Union[np.random.RandomState, int] = None,\n        **kwargs,\n    ):\n        \"\"\"Similar to AudioSignal.excerpt, except it extracts excerpts only\n        if they are above a specified loudness threshold, which is computed via\n        a fast LUFS routine.\n\n        Parameters\n        ----------\n        audio_path : typing.Union[str, Path]\n            Path to audio file to grab excerpt from.\n        loudness_cutoff : float, optional\n            Loudness threshold in dB. Typical values are ``-40, -60``,\n            etc, by default None\n        num_tries : int, optional\n            Number of tries to grab an excerpt above the threshold\n            before giving up, by default 8.\n        state : typing.Union[np.random.RandomState, int], optional\n            RandomState or seed of random state, by default None\n        kwargs : dict\n            Keyword arguments to AudioSignal.excerpt\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal containing excerpt.\n\n\n        .. warning::\n            if ``num_tries`` is set to None, ``salient_excerpt`` may try forever, which can\n            result in an infinite loop if ``audio_path`` does not have\n            any loud enough excerpts.\n\n        Examples\n        --------\n        >>> signal = AudioSignal.salient_excerpt(\n                \"path/to/audio\",\n                loudness_cutoff=-40,\n                duration=5\n            )\n        \"\"\"\n        state = util.random_state(state)\n        if loudness_cutoff is None:\n            excerpt = cls.excerpt(audio_path, state=state, **kwargs)\n        else:\n            loudness = -np.inf\n            num_try = 0\n            while loudness <= loudness_cutoff:\n                excerpt = cls.excerpt(audio_path, state=state, **kwargs)\n                loudness = excerpt.loudness()\n                num_try += 1\n                if num_tries is not None and num_try >= num_tries:\n                    break\n        return excerpt\n\n    @classmethod\n    def zeros(\n        cls,\n        duration: float,\n        sample_rate: int,\n        num_channels: int = 1,\n        batch_size: int = 1,\n        **kwargs,\n    ):\n        \"\"\"Helper function create an AudioSignal of all zeros.\n\n        Parameters\n        ----------\n        duration : float\n            Duration of AudioSignal\n        sample_rate : int\n            Sample rate of AudioSignal\n        num_channels : int, optional\n            Number of channels, by default 1\n        batch_size : int, optional\n            Batch size, by default 1\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal containing all zeros.\n\n        Examples\n        --------\n        Generate 5 seconds of all zeros at a sample rate of 44100.\n\n        >>> signal = AudioSignal.zeros(5.0, 44100)\n        \"\"\"\n        n_samples = int(duration * sample_rate)\n        return cls(\n            torch.zeros(batch_size, num_channels, n_samples), sample_rate, **kwargs\n        )\n\n    @classmethod\n    def wave(\n        cls,\n        frequency: float,\n        duration: float,\n        sample_rate: int,\n        num_channels: int = 1,\n        shape: str = \"sine\",\n        **kwargs,\n    ):\n        \"\"\"\n        Generate a waveform of a given frequency and shape.\n\n        Parameters\n        ----------\n        frequency : float\n            Frequency of the waveform\n        duration : float\n            Duration of the waveform\n        sample_rate : int\n            Sample rate of the waveform\n        num_channels : int, optional\n            Number of channels, by default 1\n        shape : str, optional\n            Shape of the waveform, by default \"saw\"\n            One of \"sawtooth\", \"square\", \"sine\", \"triangle\"\n        kwargs : dict\n            Keyword arguments to AudioSignal\n        \"\"\"\n        n_samples = int(duration * sample_rate)\n        t = torch.linspace(0, duration, n_samples)\n        if shape == \"sawtooth\":\n            from scipy.signal import sawtooth\n\n            wave_data = sawtooth(2 * np.pi * frequency * t, 0.5)\n        elif shape == \"square\":\n            from scipy.signal import square\n\n            wave_data = square(2 * np.pi * frequency * t)\n        elif shape == \"sine\":\n            wave_data = np.sin(2 * np.pi * frequency * t)\n        elif shape == \"triangle\":\n            from scipy.signal import sawtooth\n\n            # frequency is doubled by the abs call, so omit the 2 in 2pi\n            wave_data = sawtooth(np.pi * frequency * t, 0.5)\n            wave_data = -np.abs(wave_data) * 2 + 1\n        else:\n            raise ValueError(f\"Invalid shape {shape}\")\n\n        wave_data = torch.tensor(wave_data, dtype=torch.float32)\n        wave_data = wave_data.unsqueeze(0).unsqueeze(0).repeat(1, num_channels, 1)\n        return cls(wave_data, sample_rate, **kwargs)\n\n    @classmethod\n    def batch(\n        cls,\n        audio_signals: list,\n        pad_signals: bool = False,\n        truncate_signals: bool = False,\n        resample: bool = False,\n        dim: int = 0,\n    ):\n        \"\"\"Creates a batched AudioSignal from a list of AudioSignals.\n\n        Parameters\n        ----------\n        audio_signals : list[AudioSignal]\n            List of AudioSignal objects\n        pad_signals : bool, optional\n            Whether to pad signals to length of the maximum length\n            AudioSignal in the list, by default False\n        truncate_signals : bool, optional\n            Whether to truncate signals to length of shortest length\n            AudioSignal in the list, by default False\n        resample : bool, optional\n            Whether to resample AudioSignal to the sample rate of\n            the first AudioSignal in the list, by default False\n        dim : int, optional\n            Dimension along which to batch the signals.\n\n        Returns\n        -------\n        AudioSignal\n            Batched AudioSignal.\n\n        Raises\n        ------\n        RuntimeError\n            If not all AudioSignals are the same sample rate, and\n            ``resample=False``, an error is raised.\n        RuntimeError\n            If not all AudioSignals are the same the length, and\n            both ``pad_signals=False`` and ``truncate_signals=False``,\n            an error is raised.\n\n        Examples\n        --------\n        Batching a bunch of random signals:\n\n        >>> signal_list = [AudioSignal(torch.randn(44100), 44100) for _ in range(10)]\n        >>> signal = AudioSignal.batch(signal_list)\n        >>> print(signal.shape)\n        (10, 1, 44100)\n\n        \"\"\"\n        signal_lengths = [x.signal_length for x in audio_signals]\n        sample_rates = [x.sample_rate for x in audio_signals]\n\n        if len(set(sample_rates)) != 1:\n            if resample:\n                for x in audio_signals:\n                    x.resample(sample_rates[0])\n            else:\n                raise RuntimeError(\n                    f\"Not all signals had the same sample rate! Got {sample_rates}. \"\n                    f\"All signals must have the same sample rate, or resample must be True. \"\n                )\n\n        if len(set(signal_lengths)) != 1:\n            if pad_signals:\n                max_length = max(signal_lengths)\n                for x in audio_signals:\n                    pad_len = max_length - x.signal_length\n                    x.zero_pad(0, pad_len)\n            elif truncate_signals:\n                min_length = min(signal_lengths)\n                for x in audio_signals:\n                    x.truncate_samples(min_length)\n            else:\n                raise RuntimeError(\n                    f\"Not all signals had the same length! Got {signal_lengths}. \"\n                    f\"All signals must be the same length, or pad_signals/truncate_signals \"\n                    f\"must be True. \"\n                )\n        # Concatenate along the specified dimension (default 0)\n        audio_data = torch.cat([x.audio_data for x in audio_signals], dim=dim)\n        audio_paths = [x.path_to_file for x in audio_signals]\n\n        batched_signal = cls(\n            audio_data,\n            sample_rate=audio_signals[0].sample_rate,\n        )\n        batched_signal.path_to_file = audio_paths\n        return batched_signal\n\n    # I/O\n    def load_from_file(\n        self,\n        audio_path: typing.Union[str, Path],\n        offset: float,\n        duration: float,\n        device: str = \"cpu\",\n    ):\n        \"\"\"Loads data from file. Used internally when AudioSignal\n        is instantiated with a path to a file.\n\n        Parameters\n        ----------\n        audio_path : typing.Union[str, Path]\n            Path to file\n        offset : float\n            Offset in seconds\n        duration : float\n            Duration in seconds\n        device : str, optional\n            Device to put AudioSignal on, by default \"cpu\"\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal loaded from file\n        \"\"\"\n        import librosa\n\n        data, sample_rate = librosa.load(\n            audio_path,\n            offset=offset,\n            duration=duration,\n            sr=None,\n            mono=False,\n        )\n        data = util.ensure_tensor(data)\n        if data.shape[-1] == 0:\n            raise RuntimeError(\n                f\"Audio file {audio_path} with offset {offset} and duration {duration} is empty!\"\n            )\n\n        if data.ndim < 2:\n            data = data.unsqueeze(0)\n        if data.ndim < 3:\n            data = data.unsqueeze(0)\n        self.audio_data = data\n\n        self.original_signal_length = self.signal_length\n\n        self.sample_rate = sample_rate\n        self.path_to_file = audio_path\n        return self.to(device)\n\n    def load_from_array(\n        self,\n        audio_array: typing.Union[torch.Tensor, np.ndarray],\n        sample_rate: int,\n        device: str = \"cpu\",\n    ):\n        \"\"\"Loads data from array, reshaping it to be exactly 3\n        dimensions. Used internally when AudioSignal is called\n        with a tensor or an array.\n\n        Parameters\n        ----------\n        audio_array : typing.Union[torch.Tensor, np.ndarray]\n            Array/tensor of audio of samples.\n        sample_rate : int\n            Sample rate of audio\n        device : str, optional\n            Device to move audio onto, by default \"cpu\"\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal loaded from array\n        \"\"\"\n        audio_data = util.ensure_tensor(audio_array)\n\n        if audio_data.dtype == torch.double:\n            audio_data = audio_data.float()\n\n        if audio_data.ndim < 2:\n            audio_data = audio_data.unsqueeze(0)\n        if audio_data.ndim < 3:\n            audio_data = audio_data.unsqueeze(0)\n        self.audio_data = audio_data\n\n        self.original_signal_length = self.signal_length\n\n        self.sample_rate = sample_rate\n        return self.to(device)\n\n    def write(self, audio_path: typing.Union[str, Path]):\n        \"\"\"Writes audio to a file. Only writes the audio\n        that is in the very first item of the batch. To write other items\n        in the batch, index the signal along the batch dimension\n        before writing. After writing, the signal's ``path_to_file``\n        attribute is updated to the new path.\n\n        Parameters\n        ----------\n        audio_path : typing.Union[str, Path]\n            Path to write audio to.\n\n        Returns\n        -------\n        AudioSignal\n            Returns original AudioSignal, so you can use this in a fluent\n            interface.\n\n        Examples\n        --------\n        Creating and writing a signal to disk:\n\n        >>> signal = AudioSignal(torch.randn(10, 1, 44100), 44100)\n        >>> signal.write(\"/tmp/out.wav\")\n\n        Writing a different element of the batch:\n\n        >>> signal[5].write(\"/tmp/out.wav\")\n\n        Using this in a fluent interface:\n\n        >>> signal.write(\"/tmp/original.wav\").low_pass(4000).write(\"/tmp/lowpass.wav\")\n\n        \"\"\"\n        if self.audio_data[0].abs().max() > 1:\n            warnings.warn(\"Audio amplitude > 1 clipped when saving\")\n        soundfile.write(str(audio_path), self.audio_data[0].numpy().T, self.sample_rate)\n\n        self.path_to_file = audio_path\n        return self\n\n    def deepcopy(self):\n        \"\"\"Copies the signal and all of its attributes.\n\n        Returns\n        -------\n        AudioSignal\n            Deep copy of the audio signal.\n        \"\"\"\n        return copy.deepcopy(self)\n\n    def copy(self):\n        \"\"\"Shallow copy of signal.\n\n        Returns\n        -------\n        AudioSignal\n            Shallow copy of the audio signal.\n        \"\"\"\n        return copy.copy(self)\n\n    def clone(self):\n        \"\"\"Clones all tensors contained in the AudioSignal,\n        and returns a copy of the signal with everything\n        cloned. Useful when using AudioSignal within autograd\n        computation graphs.\n\n        Relevant attributes are the stft data, the audio data,\n        and the loudness of the file.\n\n        Returns\n        -------\n        AudioSignal\n            Clone of AudioSignal.\n        \"\"\"\n        clone = type(self)(\n            self.audio_data.clone(),\n            self.sample_rate,\n            stft_params=self.stft_params,\n        )\n        if self.stft_data is not None:\n            clone.stft_data = self.stft_data.clone()\n        if self._loudness is not None:\n            clone._loudness = self._loudness.clone()\n        clone.path_to_file = copy.deepcopy(self.path_to_file)\n        clone.metadata = copy.deepcopy(self.metadata)\n        return clone\n\n    def detach(self):\n        \"\"\"Detaches tensors contained in AudioSignal.\n\n        Relevant attributes are the stft data, the audio data,\n        and the loudness of the file.\n\n        Returns\n        -------\n        AudioSignal\n            Same signal, but with all tensors detached.\n        \"\"\"\n        if self._loudness is not None:\n            self._loudness = self._loudness.detach()\n        if self.stft_data is not None:\n            self.stft_data = self.stft_data.detach()\n\n        self.audio_data = self.audio_data.detach()\n        return self\n\n    def hash(self):\n        \"\"\"Writes the audio data to a temporary file, and then\n        hashes it using hashlib. Useful for creating a file\n        name based on the audio content.\n\n        Returns\n        -------\n        str\n            Hash of audio data.\n\n        Examples\n        --------\n        Creating a signal, and writing it to a unique file name:\n\n        >>> signal = AudioSignal(torch.randn(44100), 44100)\n        >>> hash = signal.hash()\n        >>> signal.write(f\"{hash}.wav\")\n\n        \"\"\"\n        with tempfile.NamedTemporaryFile(suffix=\".wav\") as f:\n            self.write(f.name)\n            h = hashlib.sha256()\n            b = bytearray(128 * 1024)\n            mv = memoryview(b)\n            with open(f.name, \"rb\", buffering=0) as f:\n                for n in iter(lambda: f.readinto(mv), 0):\n                    h.update(mv[:n])\n            file_hash = h.hexdigest()\n        return file_hash\n\n    # Signal operations\n    def to_mono(self):\n        \"\"\"Converts audio data to mono audio, by taking the mean\n        along the channels dimension.\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal with mean of channels.\n        \"\"\"\n        self.audio_data = self.audio_data.mean(1, keepdim=True)\n        return self\n\n    def resample(self, sample_rate: int):\n        \"\"\"Resamples the audio, using sinc interpolation. This works on both\n        cpu and gpu, and is much faster on gpu.\n\n        Parameters\n        ----------\n        sample_rate : int\n            Sample rate to resample to.\n\n        Returns\n        -------\n        AudioSignal\n            Resampled AudioSignal\n        \"\"\"\n        if sample_rate == self.sample_rate:\n            return self\n        self.audio_data = julius.resample_frac(\n            self.audio_data, self.sample_rate, sample_rate\n        )\n        self.sample_rate = sample_rate\n        return self\n\n    # Tensor operations\n    def to(self, device: str):\n        \"\"\"Moves all tensors contained in signal to the specified device.\n\n        Parameters\n        ----------\n        device : str\n            Device to move AudioSignal onto. Typical values are\n            \"cuda\", \"cpu\", or \"cuda:n\" to specify the nth gpu.\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal with all tensors moved to specified device.\n        \"\"\"\n        if self._loudness is not None:\n            self._loudness = self._loudness.to(device)\n        if self.stft_data is not None:\n            self.stft_data = self.stft_data.to(device)\n        if self.audio_data is not None:\n            self.audio_data = self.audio_data.to(device)\n        return self\n\n    def float(self):\n        \"\"\"Calls ``.float()`` on ``self.audio_data``.\n\n        Returns\n        -------\n        AudioSignal\n        \"\"\"\n        self.audio_data = self.audio_data.float()\n        return self\n\n    def cpu(self):\n        \"\"\"Moves AudioSignal to cpu.\n\n        Returns\n        -------\n        AudioSignal\n        \"\"\"\n        return self.to(\"cpu\")\n\n    def cuda(self):  # pragma: no cover\n        \"\"\"Moves AudioSignal to cuda.\n\n        Returns\n        -------\n        AudioSignal\n        \"\"\"\n        return self.to(\"cuda\")\n\n    def numpy(self):\n        \"\"\"Detaches ``self.audio_data``, moves to cpu, and converts to numpy.\n\n        Returns\n        -------\n        np.ndarray\n            Audio data as a numpy array.\n        \"\"\"\n        return self.audio_data.detach().cpu().numpy()\n\n    def zero_pad(self, before: int, after: int):\n        \"\"\"Zero pads the audio_data tensor before and after.\n\n        Parameters\n        ----------\n        before : int\n            How many zeros to prepend to audio.\n        after : int\n            How many zeros to append to audio.\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal with padding applied.\n        \"\"\"\n        self.audio_data = torch.nn.functional.pad(self.audio_data, (before, after))\n        return self\n\n    def zero_pad_to(self, length: int, mode: str = \"after\"):\n        \"\"\"Pad with zeros to a specified length, either before or after\n        the audio data.\n\n        Parameters\n        ----------\n        length : int\n            Length to pad to\n        mode : str, optional\n            Whether to prepend or append zeros to signal, by default \"after\"\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal with padding applied.\n        \"\"\"\n        if mode == \"before\":\n            self.zero_pad(max(length - self.signal_length, 0), 0)\n        elif mode == \"after\":\n            self.zero_pad(0, max(length - self.signal_length, 0))\n        return self\n\n    def trim(self, before: int, after: int):\n        \"\"\"Trims the audio_data tensor before and after.\n\n        Parameters\n        ----------\n        before : int\n            How many samples to trim from beginning.\n        after : int\n            How many samples to trim from end.\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal with trimming applied.\n        \"\"\"\n        if after == 0:\n            self.audio_data = self.audio_data[..., before:]\n        else:\n            self.audio_data = self.audio_data[..., before:-after]\n        return self\n\n    def truncate_samples(self, length_in_samples: int):\n        \"\"\"Truncate signal to specified length.\n\n        Parameters\n        ----------\n        length_in_samples : int\n            Truncate to this many samples.\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal with truncation applied.\n        \"\"\"\n        self.audio_data = self.audio_data[..., :length_in_samples]\n        return self\n\n    @property\n    def device(self):\n        \"\"\"Get device that AudioSignal is on.\n\n        Returns\n        -------\n        torch.device\n            Device that AudioSignal is on.\n        \"\"\"\n        if self.audio_data is not None:\n            device = self.audio_data.device\n        elif self.stft_data is not None:\n            device = self.stft_data.device\n        return device\n\n    # Properties\n    @property\n    def audio_data(self):\n        \"\"\"Returns the audio data tensor in the object.\n\n        Audio data is always of the shape\n        (batch_size, num_channels, num_samples). If value has less\n        than 3 dims (e.g. is (num_channels, num_samples)), then it will\n        be reshaped to (1, num_channels, num_samples) - a batch size of 1.\n\n        Parameters\n        ----------\n        data : typing.Union[torch.Tensor, np.ndarray]\n            Audio data to set.\n\n        Returns\n        -------\n        torch.Tensor\n            Audio samples.\n        \"\"\"\n        return self._audio_data\n\n    @audio_data.setter\n    def audio_data(self, data: typing.Union[torch.Tensor, np.ndarray]):\n        if data is not None:\n            assert torch.is_tensor(data), \"audio_data should be torch.Tensor\"\n            assert data.ndim == 3, \"audio_data should be 3-dim (B, C, T)\"\n        self._audio_data = data\n        # Old loudness value not guaranteed to be right, reset it.\n        self._loudness = None\n        return\n\n    # alias for audio_data\n    samples = audio_data\n\n    @property\n    def stft_data(self):\n        \"\"\"Returns the STFT data inside the signal. Shape is\n        (batch, channels, frequencies, time).\n\n        Returns\n        -------\n        torch.Tensor\n            Complex spectrogram data.\n        \"\"\"\n        return self._stft_data\n\n    @stft_data.setter\n    def stft_data(self, data: typing.Union[torch.Tensor, np.ndarray]):\n        if data is not None:\n            assert torch.is_tensor(data) and torch.is_complex(data)\n            if self.stft_data is not None and self.stft_data.shape != data.shape:\n                warnings.warn(\"stft_data changed shape\")\n        self._stft_data = data\n        return\n\n    @property\n    def batch_size(self):\n        \"\"\"Batch size of audio signal.\n\n        Returns\n        -------\n        int\n            Batch size of signal.\n        \"\"\"\n        return self.audio_data.shape[0]\n\n    @property\n    def signal_length(self):\n        \"\"\"Length of audio signal.\n\n        Returns\n        -------\n        int\n            Length of signal in samples.\n        \"\"\"\n        return self.audio_data.shape[-1]\n\n    # alias for signal_length\n    length = signal_length\n\n    @property\n    def shape(self):\n        \"\"\"Shape of audio data.\n\n        Returns\n        -------\n        tuple\n            Shape of audio data.\n        \"\"\"\n        return self.audio_data.shape\n\n    @property\n    def signal_duration(self):\n        \"\"\"Length of audio signal in seconds.\n\n        Returns\n        -------\n        float\n            Length of signal in seconds.\n        \"\"\"\n        return self.signal_length / self.sample_rate\n\n    # alias for signal_duration\n    duration = signal_duration\n\n    @property\n    def num_channels(self):\n        \"\"\"Number of audio channels.\n\n        Returns\n        -------\n        int\n            Number of audio channels.\n        \"\"\"\n        return self.audio_data.shape[1]\n\n    # STFT\n    @staticmethod\n    @functools.lru_cache(None)\n    def get_window(window_type: str, window_length: int, device: str):\n        \"\"\"Wrapper around scipy.signal.get_window so one can also get the\n        popular sqrt-hann window. This function caches for efficiency\n        using functools.lru\\\\_cache.\n\n        Parameters\n        ----------\n        window_type : str\n            Type of window to get\n        window_length : int\n            Length of the window\n        device : str\n            Device to put window onto.\n\n        Returns\n        -------\n        torch.Tensor\n            Window returned by scipy.signal.get_window, as a tensor.\n        \"\"\"\n        from scipy import signal\n\n        if window_type == \"average\":\n            window = np.ones(window_length) / window_length\n        elif window_type == \"sqrt_hann\":\n            window = np.sqrt(signal.get_window(\"hann\", window_length))\n        else:\n            window = signal.get_window(window_type, window_length)\n        window = torch.from_numpy(window).to(device).float()\n        return window\n\n    @property\n    def stft_params(self):\n        \"\"\"Returns STFTParams object, which can be re-used to other\n        AudioSignals.\n\n        This property can be set as well. If values are not defined in STFTParams,\n        they are inferred automatically from the signal properties. The default is to use\n        32ms windows, with 8ms hop length, and the square root of the hann window.\n\n        Returns\n        -------\n        STFTParams\n            STFT parameters for the AudioSignal.\n\n        Examples\n        --------\n        >>> stft_params = STFTParams(128, 32)\n        >>> signal1 = AudioSignal(torch.randn(44100), 44100, stft_params=stft_params)\n        >>> signal2 = AudioSignal(torch.randn(44100), 44100, stft_params=signal1.stft_params)\n        >>> signal1.stft_params = STFTParams() # Defaults\n        \"\"\"\n        return self._stft_params\n\n    @stft_params.setter\n    def stft_params(self, value: STFTParams):\n        default_win_len = int(2 ** (np.ceil(np.log2(0.032 * self.sample_rate))))\n        default_hop_len = default_win_len // 4\n        default_win_type = \"hann\"\n        default_match_stride = False\n        default_padding_type = \"reflect\"\n\n        default_stft_params = STFTParams(\n            window_length=default_win_len,\n            hop_length=default_hop_len,\n            window_type=default_win_type,\n            match_stride=default_match_stride,\n            padding_type=default_padding_type,\n        )._asdict()\n\n        value = value._asdict() if value else default_stft_params\n\n        for key in default_stft_params:\n            if value[key] is None:\n                value[key] = default_stft_params[key]\n\n        self._stft_params = STFTParams(**value)\n        self.stft_data = None\n\n    def compute_stft_padding(\n        self, window_length: int, hop_length: int, match_stride: bool\n    ):\n        \"\"\"Compute how the STFT should be padded, based on match\\\\_stride.\n\n        Parameters\n        ----------\n        window_length : int\n            Window length of STFT.\n        hop_length : int\n            Hop length of STFT.\n        match_stride : bool\n            Whether or not to match stride, making the STFT have the same alignment as\n            convolutional layers.\n\n        Returns\n        -------\n        tuple\n            Amount to pad on either side of audio.\n        \"\"\"\n        length = self.signal_length\n\n        if match_stride:\n            assert (\n                hop_length == window_length // 4\n            ), \"For match_stride, hop must equal n_fft // 4\"\n            right_pad = math.ceil(length / hop_length) * hop_length - length\n            pad = (window_length - hop_length) // 2\n        else:\n            right_pad = 0\n            pad = 0\n\n        return right_pad, pad\n\n    def stft(\n        self,\n        window_length: int = None,\n        hop_length: int = None,\n        window_type: str = None,\n        match_stride: bool = None,\n        padding_type: str = None,\n    ):\n        \"\"\"Computes the short-time Fourier transform of the audio data,\n        with specified STFT parameters.\n\n        Parameters\n        ----------\n        window_length : int, optional\n            Window length of STFT, by default ``0.032 * self.sample_rate``.\n        hop_length : int, optional\n            Hop length of STFT, by default ``window_length // 4``.\n        window_type : str, optional\n            Type of window to use, by default ``sqrt\\\\_hann``.\n        match_stride : bool, optional\n            Whether to match the stride of convolutional layers, by default False\n        padding_type : str, optional\n            Type of padding to use, by default 'reflect'\n\n        Returns\n        -------\n        torch.Tensor\n            STFT of audio data.\n\n        Examples\n        --------\n        Compute the STFT of an AudioSignal:\n\n        >>> signal = AudioSignal(torch.randn(44100), 44100)\n        >>> signal.stft()\n\n        Vary the window and hop length:\n\n        >>> stft_params = [STFTParams(128, 32), STFTParams(512, 128)]\n        >>> for stft_param in stft_params:\n        >>>     signal.stft_params = stft_params\n        >>>     signal.stft()\n\n        \"\"\"\n        window_length = (\n            self.stft_params.window_length\n            if window_length is None\n            else int(window_length)\n        )\n        hop_length = (\n            self.stft_params.hop_length if hop_length is None else int(hop_length)\n        )\n        window_type = (\n            self.stft_params.window_type if window_type is None else window_type\n        )\n        match_stride = (\n            self.stft_params.match_stride if match_stride is None else match_stride\n        )\n        padding_type = (\n            self.stft_params.padding_type if padding_type is None else padding_type\n        )\n\n        window = self.get_window(window_type, window_length, self.audio_data.device)\n        window = window.to(self.audio_data.device)\n\n        audio_data = self.audio_data\n        right_pad, pad = self.compute_stft_padding(\n            window_length, hop_length, match_stride\n        )\n        audio_data = torch.nn.functional.pad(\n            audio_data, (pad, pad + right_pad), padding_type\n        )\n        stft_data = torch.stft(\n            audio_data.reshape(-1, audio_data.shape[-1]),\n            n_fft=window_length,\n            hop_length=hop_length,\n            window=window,\n            return_complex=True,\n            center=True,\n        )\n        _, nf, nt = stft_data.shape\n        stft_data = stft_data.reshape(self.batch_size, self.num_channels, nf, nt)\n\n        if match_stride:\n            # Drop first two and last two frames, which are added\n            # because of padding. Now num_frames * hop_length = num_samples.\n            stft_data = stft_data[..., 2:-2]\n        self.stft_data = stft_data\n\n        return stft_data\n\n    def istft(\n        self,\n        window_length: int = None,\n        hop_length: int = None,\n        window_type: str = None,\n        match_stride: bool = None,\n        length: int = None,\n    ):\n        \"\"\"Computes inverse STFT and sets it to audio\\\\_data.\n\n        Parameters\n        ----------\n        window_length : int, optional\n            Window length of STFT, by default ``0.032 * self.sample_rate``.\n        hop_length : int, optional\n            Hop length of STFT, by default ``window_length // 4``.\n        window_type : str, optional\n            Type of window to use, by default ``sqrt\\\\_hann``.\n        match_stride : bool, optional\n            Whether to match the stride of convolutional layers, by default False\n        length : int, optional\n            Original length of signal, by default None\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal with istft applied.\n\n        Raises\n        ------\n        RuntimeError\n            Raises an error if stft was not called prior to istft on the signal,\n            or if stft_data is not set.\n        \"\"\"\n        if self.stft_data is None:\n            raise RuntimeError(\"Cannot do inverse STFT without self.stft_data!\")\n\n        window_length = (\n            self.stft_params.window_length\n            if window_length is None\n            else int(window_length)\n        )\n        hop_length = (\n            self.stft_params.hop_length if hop_length is None else int(hop_length)\n        )\n        window_type = (\n            self.stft_params.window_type if window_type is None else window_type\n        )\n        match_stride = (\n            self.stft_params.match_stride if match_stride is None else match_stride\n        )\n\n        window = self.get_window(window_type, window_length, self.stft_data.device)\n\n        nb, nch, nf, nt = self.stft_data.shape\n        stft_data = self.stft_data.reshape(nb * nch, nf, nt)\n        right_pad, pad = self.compute_stft_padding(\n            window_length, hop_length, match_stride\n        )\n\n        if length is None:\n            length = self.original_signal_length\n            length = length + 2 * pad + right_pad\n\n        if match_stride:\n            # Zero-pad the STFT on either side, putting back the frames that were\n            # dropped in stft().\n            stft_data = torch.nn.functional.pad(stft_data, (2, 2))\n\n        audio_data = torch.istft(\n            stft_data,\n            n_fft=window_length,\n            hop_length=hop_length,\n            window=window,\n            length=length,\n            center=True,\n        )\n        audio_data = audio_data.reshape(nb, nch, -1)\n        if match_stride:\n            audio_data = audio_data[..., pad : -(pad + right_pad)]\n        self.audio_data = audio_data\n\n        return self\n\n    @staticmethod\n    @functools.lru_cache(None)\n    def get_mel_filters(\n        sr: int, n_fft: int, n_mels: int, fmin: float = 0.0, fmax: float = None\n    ):\n        \"\"\"Create a Filterbank matrix to combine FFT bins into Mel-frequency bins.\n\n        Parameters\n        ----------\n        sr : int\n            Sample rate of audio\n        n_fft : int\n            Number of FFT bins\n        n_mels : int\n            Number of mels\n        fmin : float, optional\n            Lowest frequency, in Hz, by default 0.0\n        fmax : float, optional\n            Highest frequency, by default None\n\n        Returns\n        -------\n        np.ndarray [shape=(n_mels, 1 + n_fft/2)]\n            Mel transform matrix\n        \"\"\"\n        from librosa.filters import mel as librosa_mel_fn\n\n        return librosa_mel_fn(\n            sr=sr,\n            n_fft=n_fft,\n            n_mels=n_mels,\n            fmin=fmin,\n            fmax=fmax,\n        )\n\n    def mel_spectrogram(\n        self, n_mels: int = 80, mel_fmin: float = 0.0, mel_fmax: float = None, **kwargs\n    ):\n        \"\"\"Computes a Mel spectrogram.\n\n        Parameters\n        ----------\n        n_mels : int, optional\n            Number of mels, by default 80\n        mel_fmin : float, optional\n            Lowest frequency, in Hz, by default 0.0\n        mel_fmax : float, optional\n            Highest frequency, by default None\n        kwargs : dict, optional\n            Keyword arguments to self.stft().\n\n        Returns\n        -------\n        torch.Tensor [shape=(batch, channels, mels, time)]\n            Mel spectrogram.\n        \"\"\"\n        stft = self.stft(**kwargs)\n        magnitude = torch.abs(stft)\n\n        nf = magnitude.shape[2]\n        mel_basis = self.get_mel_filters(\n            sr=self.sample_rate,\n            n_fft=2 * (nf - 1),\n            n_mels=n_mels,\n            fmin=mel_fmin,\n            fmax=mel_fmax,\n        )\n        mel_basis = torch.from_numpy(mel_basis).to(self.device)\n\n        mel_spectrogram = magnitude.transpose(2, -1) @ mel_basis.T\n        mel_spectrogram = mel_spectrogram.transpose(-1, 2)\n        return mel_spectrogram\n\n    @staticmethod\n    @functools.lru_cache(None)\n    def get_dct(n_mfcc: int, n_mels: int, norm: str = \"ortho\", device: str = None):\n        \"\"\"Create a discrete cosine transform (DCT) transformation matrix with shape (``n_mels``, ``n_mfcc``),\n        it can be normalized depending on norm. For more information about dct:\n        http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II\n\n        Parameters\n        ----------\n        n_mfcc : int\n            Number of mfccs\n        n_mels : int\n            Number of mels\n        norm   : str\n            Use \"ortho\" to get a orthogonal matrix or None, by default \"ortho\"\n        device : str, optional\n            Device to load the transformation matrix on, by default None\n\n        Returns\n        -------\n        torch.Tensor [shape=(n_mels, n_mfcc)] T\n            The dct transformation matrix.\n        \"\"\"\n        from torchaudio.functional import create_dct\n\n        return create_dct(n_mfcc, n_mels, norm).to(device)\n\n    def mfcc(\n        self, n_mfcc: int = 40, n_mels: int = 80, log_offset: float = 1e-6, **kwargs\n    ):\n        \"\"\"Computes mel-frequency cepstral coefficients (MFCCs).\n\n        Parameters\n        ----------\n        n_mfcc : int, optional\n            Number of mels, by default 40\n        n_mels : int, optional\n            Number of mels, by default 80\n        log_offset: float, optional\n            Small value to prevent numerical issues when trying to compute log(0), by default 1e-6\n        kwargs : dict, optional\n            Keyword arguments to self.mel_spectrogram(), note that some of them will be used for self.stft()\n\n        Returns\n        -------\n        torch.Tensor [shape=(batch, channels, mfccs, time)]\n            MFCCs.\n        \"\"\"\n\n        mel_spectrogram = self.mel_spectrogram(n_mels, **kwargs)\n        mel_spectrogram = torch.log(mel_spectrogram + log_offset)\n        dct_mat = self.get_dct(n_mfcc, n_mels, \"ortho\", self.device)\n\n        mfcc = mel_spectrogram.transpose(-1, -2) @ dct_mat\n        mfcc = mfcc.transpose(-1, -2)\n        return mfcc\n\n    @property\n    def magnitude(self):\n        \"\"\"Computes and returns the absolute value of the STFT, which\n        is the magnitude. This value can also be set to some tensor.\n        When set, ``self.stft_data`` is manipulated so that its magnitude\n        matches what this is set to, and modulated by the phase.\n\n        Returns\n        -------\n        torch.Tensor\n            Magnitude of STFT.\n\n        Examples\n        --------\n        >>> signal = AudioSignal(torch.randn(44100), 44100)\n        >>> magnitude = signal.magnitude # Computes stft if not computed\n        >>> magnitude[magnitude < magnitude.mean()] = 0\n        >>> signal.magnitude = magnitude\n        >>> signal.istft()\n        \"\"\"\n        if self.stft_data is None:\n            self.stft()\n        return torch.abs(self.stft_data)\n\n    @magnitude.setter\n    def magnitude(self, value):\n        self.stft_data = value * torch.exp(1j * self.phase)\n        return\n\n    def log_magnitude(\n        self, ref_value: float = 1.0, amin: float = 1e-5, top_db: float = 80.0\n    ):\n        \"\"\"Computes the log-magnitude of the spectrogram.\n\n        Parameters\n        ----------\n        ref_value : float, optional\n            The magnitude is scaled relative to ``ref``: ``20 * log10(S / ref)``.\n            Zeros in the output correspond to positions where ``S == ref``,\n            by default 1.0\n        amin : float, optional\n            Minimum threshold for ``S`` and ``ref``, by default 1e-5\n        top_db : float, optional\n            Threshold the output at ``top_db`` below the peak:\n            ``max(10 * log10(S/ref)) - top_db``, by default -80.0\n\n        Returns\n        -------\n        torch.Tensor\n            Log-magnitude spectrogram\n        \"\"\"\n        magnitude = self.magnitude\n\n        amin = amin**2\n        log_spec = 10.0 * torch.log10(magnitude.pow(2).clamp(min=amin))\n        log_spec -= 10.0 * np.log10(np.maximum(amin, ref_value))\n\n        if top_db is not None:\n            log_spec = torch.maximum(log_spec, log_spec.max() - top_db)\n        return log_spec\n\n    @property\n    def phase(self):\n        \"\"\"Computes and returns the phase of the STFT.\n        This value can also be set to some tensor.\n        When set, ``self.stft_data`` is manipulated so that its phase\n        matches what this is set to, we original magnitudeith th.\n\n        Returns\n        -------\n        torch.Tensor\n            Phase of STFT.\n\n        Examples\n        --------\n        >>> signal = AudioSignal(torch.randn(44100), 44100)\n        >>> phase = signal.phase # Computes stft if not computed\n        >>> phase[phase < phase.mean()] = 0\n        >>> signal.phase = phase\n        >>> signal.istft()\n        \"\"\"\n        if self.stft_data is None:\n            self.stft()\n        return torch.angle(self.stft_data)\n\n    @phase.setter\n    def phase(self, value):\n        self.stft_data = self.magnitude * torch.exp(1j * value)\n        return\n\n    # Operator overloading\n    def __add__(self, other):\n        new_signal = self.clone()\n        new_signal.audio_data += util._get_value(other)\n        return new_signal\n\n    def __iadd__(self, other):\n        self.audio_data += util._get_value(other)\n        return self\n\n    def __radd__(self, other):\n        return self + other\n\n    def __sub__(self, other):\n        new_signal = self.clone()\n        new_signal.audio_data -= util._get_value(other)\n        return new_signal\n\n    def __isub__(self, other):\n        self.audio_data -= util._get_value(other)\n        return self\n\n    def __mul__(self, other):\n        new_signal = self.clone()\n        new_signal.audio_data *= util._get_value(other)\n        return new_signal\n\n    def __imul__(self, other):\n        self.audio_data *= util._get_value(other)\n        return self\n\n    def __rmul__(self, other):\n        return self * other\n\n    # Representation\n    def _info(self):\n        dur = f\"{self.signal_duration:0.3f}\" if self.signal_duration else \"[unknown]\"\n        info = {\n            \"duration\": f\"{dur} seconds\",\n            \"batch_size\": self.batch_size,\n            \"path\": self.path_to_file if self.path_to_file else \"path unknown\",\n            \"sample_rate\": self.sample_rate,\n            \"num_channels\": self.num_channels if self.num_channels else \"[unknown]\",\n            \"audio_data.shape\": self.audio_data.shape,\n            \"stft_params\": self.stft_params,\n            \"device\": self.device,\n        }\n\n        return info\n\n    def markdown(self):\n        \"\"\"Produces a markdown representation of AudioSignal, in a markdown table.\n\n        Returns\n        -------\n        str\n            Markdown representation of AudioSignal.\n\n        Examples\n        --------\n        >>> signal = AudioSignal(torch.randn(44100), 44100)\n        >>> print(signal.markdown())\n        | Key | Value\n        |---|---\n        | duration | 1.000 seconds |\n        | batch_size | 1 |\n        | path | path unknown |\n        | sample_rate | 44100 |\n        | num_channels | 1 |\n        | audio_data.shape | torch.Size([1, 1, 44100]) |\n        | stft_params | STFTParams(window_length=2048, hop_length=512, window_type='sqrt_hann', match_stride=False) |\n        | device | cpu |\n        \"\"\"\n        info = self._info()\n\n        FORMAT = \"| Key | Value \\n\" \"|---|--- \\n\"\n        for k, v in info.items():\n            row = f\"| {k} | {v} |\\n\"\n            FORMAT += row\n        return FORMAT\n\n    def __str__(self):\n        info = self._info()\n\n        desc = \"\"\n        for k, v in info.items():\n            desc += f\"{k}: {v}\\n\"\n        return desc\n\n    def __rich__(self):\n        from rich.table import Table\n\n        info = self._info()\n\n        table = Table(title=f\"{self.__class__.__name__}\")\n        table.add_column(\"Key\", style=\"green\")\n        table.add_column(\"Value\", style=\"cyan\")\n\n        for k, v in info.items():\n            table.add_row(k, str(v))\n        return table\n\n    # Comparison\n    def __eq__(self, other):\n        for k, v in list(self.__dict__.items()):\n            if torch.is_tensor(v):\n                if not torch.allclose(v, other.__dict__[k], atol=1e-6):\n                    max_error = (v - other.__dict__[k]).abs().max()\n                    print(f\"Max abs error for {k}: {max_error}\")\n                    return False\n        return True\n\n    # Indexing\n    def __getitem__(self, key):\n        if torch.is_tensor(key) and key.ndim == 0 and key.item() is True:\n            assert self.batch_size == 1\n            audio_data = self.audio_data\n            _loudness = self._loudness\n            stft_data = self.stft_data\n\n        elif isinstance(key, (bool, int, list, slice, tuple)) or (\n            torch.is_tensor(key) and key.ndim <= 1\n        ):\n            # Indexing only on the batch dimension.\n            # Then let's copy over relevant stuff.\n            # Future work: make this work for time-indexing\n            # as well, using the hop length.\n            audio_data = self.audio_data[key]\n            _loudness = self._loudness[key] if self._loudness is not None else None\n            stft_data = self.stft_data[key] if self.stft_data is not None else None\n\n        sources = None\n\n        copy = type(self)(audio_data, self.sample_rate, stft_params=self.stft_params)\n        copy._loudness = _loudness\n        copy._stft_data = stft_data\n        copy.sources = sources\n\n        return copy\n\n    def __setitem__(self, key, value):\n        if not isinstance(value, type(self)):\n            self.audio_data[key] = value\n            return\n\n        if torch.is_tensor(key) and key.ndim == 0 and key.item() is True:\n            assert self.batch_size == 1\n            self.audio_data = value.audio_data\n            self._loudness = value._loudness\n            self.stft_data = value.stft_data\n            return\n\n        elif isinstance(key, (bool, int, list, slice, tuple)) or (\n            torch.is_tensor(key) and key.ndim <= 1\n        ):\n            if self.audio_data is not None and value.audio_data is not None:\n                self.audio_data[key] = value.audio_data\n            if self._loudness is not None and value._loudness is not None:\n                self._loudness[key] = value._loudness\n            if self.stft_data is not None and value.stft_data is not None:\n                self.stft_data[key] = value.stft_data\n            return\n\n    def __ne__(self, other):\n        return not self == other\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/display.py",
    "content": "import inspect\nimport typing\nfrom functools import wraps\n\nfrom . import util\n\n\ndef format_figure(func):\n    \"\"\"Decorator for formatting figures produced by the code below.\n    See :py:func:`audiotools.core.util.format_figure` for more.\n\n    Parameters\n    ----------\n    func : Callable\n        Plotting function that is decorated by this function.\n\n    \"\"\"\n\n    @wraps(func)\n    def wrapper(*args, **kwargs):\n        f_keys = inspect.signature(util.format_figure).parameters.keys()\n        f_kwargs = {}\n        for k, v in list(kwargs.items()):\n            if k in f_keys:\n                kwargs.pop(k)\n                f_kwargs[k] = v\n        func(*args, **kwargs)\n        util.format_figure(**f_kwargs)\n\n    return wrapper\n\n\nclass DisplayMixin:\n    @format_figure\n    def specshow(\n        self,\n        preemphasis: bool = False,\n        x_axis: str = \"time\",\n        y_axis: str = \"linear\",\n        n_mels: int = 128,\n        **kwargs,\n    ):\n        \"\"\"Displays a spectrogram, using ``librosa.display.specshow``.\n\n        Parameters\n        ----------\n        preemphasis : bool, optional\n            Whether or not to apply preemphasis, which makes high\n            frequency detail easier to see, by default False\n        x_axis : str, optional\n            How to label the x axis, by default \"time\"\n        y_axis : str, optional\n            How to label the y axis, by default \"linear\"\n        n_mels : int, optional\n            If displaying a mel spectrogram with ``y_axis = \"mel\"``,\n            this controls the number of mels, by default 128.\n        kwargs : dict, optional\n            Keyword arguments to :py:func:`audiotools.core.util.format_figure`.\n        \"\"\"\n        import librosa\n        import librosa.display\n\n        # Always re-compute the STFT data before showing it, in case\n        # it changed.\n        signal = self.clone()\n        signal.stft_data = None\n\n        if preemphasis:\n            signal.preemphasis()\n\n        ref = signal.magnitude.max()\n        log_mag = signal.log_magnitude(ref_value=ref)\n\n        if y_axis == \"mel\":\n            log_mag = 20 * signal.mel_spectrogram(n_mels).clamp(1e-5).log10()\n            log_mag -= log_mag.max()\n\n        librosa.display.specshow(\n            log_mag.numpy()[0].mean(axis=0),\n            x_axis=x_axis,\n            y_axis=y_axis,\n            sr=signal.sample_rate,\n            **kwargs,\n        )\n\n    @format_figure\n    def waveplot(self, x_axis: str = \"time\", **kwargs):\n        \"\"\"Displays a waveform plot, using ``librosa.display.waveshow``.\n\n        Parameters\n        ----------\n        x_axis : str, optional\n            How to label the x axis, by default \"time\"\n        kwargs : dict, optional\n            Keyword arguments to :py:func:`audiotools.core.util.format_figure`.\n        \"\"\"\n        import librosa\n        import librosa.display\n\n        audio_data = self.audio_data[0].mean(dim=0)\n        audio_data = audio_data.cpu().numpy()\n\n        plot_fn = \"waveshow\" if hasattr(librosa.display, \"waveshow\") else \"waveplot\"\n        wave_plot_fn = getattr(librosa.display, plot_fn)\n        wave_plot_fn(audio_data, x_axis=x_axis, sr=self.sample_rate, **kwargs)\n\n    @format_figure\n    def wavespec(self, x_axis: str = \"time\", **kwargs):\n        \"\"\"Displays a waveform plot, using ``librosa.display.waveshow``.\n\n        Parameters\n        ----------\n        x_axis : str, optional\n            How to label the x axis, by default \"time\"\n        kwargs : dict, optional\n            Keyword arguments to :py:func:`audiotools.core.display.DisplayMixin.specshow`.\n        \"\"\"\n        import matplotlib.pyplot as plt\n        from matplotlib.gridspec import GridSpec\n\n        gs = GridSpec(6, 1)\n        plt.subplot(gs[0, :])\n        self.waveplot(x_axis=x_axis)\n        plt.subplot(gs[1:, :])\n        self.specshow(x_axis=x_axis, **kwargs)\n\n    def write_audio_to_tb(\n        self,\n        tag: str,\n        writer,\n        step: int = None,\n        plot_fn: typing.Union[typing.Callable, str] = \"specshow\",\n        **kwargs,\n    ):\n        \"\"\"Writes a signal and its spectrogram to Tensorboard. Will show up\n        under the Audio and Images tab in Tensorboard.\n\n        Parameters\n        ----------\n        tag : str\n            Tag to write signal to (e.g. ``clean/sample_0.wav``). The image will be\n            written to the corresponding ``.png`` file (e.g. ``clean/sample_0.png``).\n        writer : SummaryWriter\n            A SummaryWriter object from PyTorch library.\n        step : int, optional\n            The step to write the signal to, by default None\n        plot_fn : typing.Union[typing.Callable, str], optional\n            How to create the image. Set to ``None`` to avoid plotting, by default \"specshow\"\n        kwargs : dict, optional\n            Keyword arguments to :py:func:`audiotools.core.display.DisplayMixin.specshow` or\n            whatever ``plot_fn`` is set to.\n        \"\"\"\n        import matplotlib.pyplot as plt\n\n        audio_data = self.audio_data[0, 0].detach().cpu()\n        sample_rate = self.sample_rate\n        writer.add_audio(tag, audio_data, step, sample_rate)\n\n        if plot_fn is not None:\n            if isinstance(plot_fn, str):\n                plot_fn = getattr(self, plot_fn)\n            fig = plt.figure()\n            plt.clf()\n            plot_fn(**kwargs)\n            writer.add_figure(tag.replace(\"wav\", \"png\"), fig, step)\n\n    def save_image(\n        self,\n        image_path: str,\n        plot_fn: typing.Union[typing.Callable, str] = \"specshow\",\n        **kwargs,\n    ):\n        \"\"\"Save AudioSignal spectrogram (or whatever ``plot_fn`` is set to) to\n        a specified file.\n\n        Parameters\n        ----------\n        image_path : str\n            Where to save the file to.\n        plot_fn : typing.Union[typing.Callable, str], optional\n            How to create the image. Set to ``None`` to avoid plotting, by default \"specshow\"\n        kwargs : dict, optional\n            Keyword arguments to :py:func:`audiotools.core.display.DisplayMixin.specshow` or\n            whatever ``plot_fn`` is set to.\n        \"\"\"\n        import matplotlib.pyplot as plt\n\n        if isinstance(plot_fn, str):\n            plot_fn = getattr(self, plot_fn)\n\n        plt.clf()\n        plot_fn(**kwargs)\n        plt.savefig(image_path, bbox_inches=\"tight\", pad_inches=0)\n        plt.close()\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/dsp.py",
    "content": "import typing\n\nimport julius\nimport numpy as np\nimport torch\n\nfrom . import util\n\n\nclass DSPMixin:\n    _original_batch_size = None\n    _original_num_channels = None\n    _padded_signal_length = None\n\n    def _preprocess_signal_for_windowing(self, window_duration, hop_duration):\n        self._original_batch_size = self.batch_size\n        self._original_num_channels = self.num_channels\n\n        window_length = int(window_duration * self.sample_rate)\n        hop_length = int(hop_duration * self.sample_rate)\n\n        if window_length % hop_length != 0:\n            factor = window_length // hop_length\n            window_length = factor * hop_length\n\n        self.zero_pad(hop_length, hop_length)\n        self._padded_signal_length = self.signal_length\n\n        return window_length, hop_length\n\n    def windows(\n        self, window_duration: float, hop_duration: float, preprocess: bool = True\n    ):\n        \"\"\"Generator which yields windows of specified duration from signal with a specified\n        hop length.\n\n        Parameters\n        ----------\n        window_duration : float\n            Duration of every window in seconds.\n        hop_duration : float\n            Hop between windows in seconds.\n        preprocess : bool, optional\n            Whether to preprocess the signal, so that the first sample is in\n            the middle of the first window, by default True\n\n        Yields\n        ------\n        AudioSignal\n            Each window is returned as an AudioSignal.\n        \"\"\"\n        if preprocess:\n            window_length, hop_length = self._preprocess_signal_for_windowing(\n                window_duration, hop_duration\n            )\n\n        self.audio_data = self.audio_data.reshape(-1, 1, self.signal_length)\n\n        for b in range(self.batch_size):\n            i = 0\n            start_idx = i * hop_length\n            while True:\n                start_idx = i * hop_length\n                i += 1\n                end_idx = start_idx + window_length\n                if end_idx > self.signal_length:\n                    break\n                yield self[b, ..., start_idx:end_idx]\n\n    def collect_windows(\n        self, window_duration: float, hop_duration: float, preprocess: bool = True\n    ):\n        \"\"\"Reshapes signal into windows of specified duration from signal with a specified\n        hop length. Window are placed along the batch dimension. Use with\n        :py:func:`audiotools.core.dsp.DSPMixin.overlap_and_add` to reconstruct the\n        original signal.\n\n        Parameters\n        ----------\n        window_duration : float\n            Duration of every window in seconds.\n        hop_duration : float\n            Hop between windows in seconds.\n        preprocess : bool, optional\n            Whether to preprocess the signal, so that the first sample is in\n            the middle of the first window, by default True\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal unfolded with shape ``(nb * nch * num_windows, 1, window_length)``\n        \"\"\"\n        if preprocess:\n            window_length, hop_length = self._preprocess_signal_for_windowing(\n                window_duration, hop_duration\n            )\n\n        # self.audio_data: (nb, nch, nt).\n        unfolded = torch.nn.functional.unfold(\n            self.audio_data.reshape(-1, 1, 1, self.signal_length),\n            kernel_size=(1, window_length),\n            stride=(1, hop_length),\n        )\n        # unfolded: (nb * nch, window_length, num_windows).\n        # -> (nb * nch * num_windows, 1, window_length)\n        unfolded = unfolded.permute(0, 2, 1).reshape(-1, 1, window_length)\n        self.audio_data = unfolded\n        return self\n\n    def overlap_and_add(self, hop_duration: float):\n        \"\"\"Function which takes a list of windows and overlap adds them into a\n        signal the same length as ``audio_signal``.\n\n        Parameters\n        ----------\n        hop_duration : float\n            How much to shift for each window\n            (overlap is window_duration - hop_duration) in seconds.\n\n        Returns\n        -------\n        AudioSignal\n            overlap-and-added signal.\n        \"\"\"\n        hop_length = int(hop_duration * self.sample_rate)\n        window_length = self.signal_length\n\n        nb, nch = self._original_batch_size, self._original_num_channels\n\n        unfolded = self.audio_data.reshape(nb * nch, -1, window_length).permute(0, 2, 1)\n        folded = torch.nn.functional.fold(\n            unfolded,\n            output_size=(1, self._padded_signal_length),\n            kernel_size=(1, window_length),\n            stride=(1, hop_length),\n        )\n\n        norm = torch.ones_like(unfolded, device=unfolded.device)\n        norm = torch.nn.functional.fold(\n            norm,\n            output_size=(1, self._padded_signal_length),\n            kernel_size=(1, window_length),\n            stride=(1, hop_length),\n        )\n\n        folded = folded / norm\n\n        folded = folded.reshape(nb, nch, -1)\n        self.audio_data = folded\n        self.trim(hop_length, hop_length)\n        return self\n\n    def low_pass(\n        self, cutoffs: typing.Union[torch.Tensor, np.ndarray, float], zeros: int = 51\n    ):\n        \"\"\"Low-passes the signal in-place. Each item in the batch\n        can have a different low-pass cutoff, if the input\n        to this signal is an array or tensor. If a float, all\n        items are given the same low-pass filter.\n\n        Parameters\n        ----------\n        cutoffs : typing.Union[torch.Tensor, np.ndarray, float]\n            Cutoff in Hz of low-pass filter.\n        zeros : int, optional\n            Number of taps to use in low-pass filter, by default 51\n\n        Returns\n        -------\n        AudioSignal\n            Low-passed AudioSignal.\n        \"\"\"\n        cutoffs = util.ensure_tensor(cutoffs, 2, self.batch_size)\n        cutoffs = cutoffs / self.sample_rate\n        filtered = torch.empty_like(self.audio_data)\n\n        for i, cutoff in enumerate(cutoffs):\n            lp_filter = julius.LowPassFilter(cutoff.cpu(), zeros=zeros).to(self.device)\n            filtered[i] = lp_filter(self.audio_data[i])\n\n        self.audio_data = filtered\n        self.stft_data = None\n        return self\n\n    def high_pass(\n        self, cutoffs: typing.Union[torch.Tensor, np.ndarray, float], zeros: int = 51\n    ):\n        \"\"\"High-passes the signal in-place. Each item in the batch\n        can have a different high-pass cutoff, if the input\n        to this signal is an array or tensor. If a float, all\n        items are given the same high-pass filter.\n\n        Parameters\n        ----------\n        cutoffs : typing.Union[torch.Tensor, np.ndarray, float]\n            Cutoff in Hz of high-pass filter.\n        zeros : int, optional\n            Number of taps to use in high-pass filter, by default 51\n\n        Returns\n        -------\n        AudioSignal\n            High-passed AudioSignal.\n        \"\"\"\n        cutoffs = util.ensure_tensor(cutoffs, 2, self.batch_size)\n        cutoffs = cutoffs / self.sample_rate\n        filtered = torch.empty_like(self.audio_data)\n\n        for i, cutoff in enumerate(cutoffs):\n            hp_filter = julius.HighPassFilter(cutoff.cpu(), zeros=zeros).to(self.device)\n            filtered[i] = hp_filter(self.audio_data[i])\n\n        self.audio_data = filtered\n        self.stft_data = None\n        return self\n\n    def mask_frequencies(\n        self,\n        fmin_hz: typing.Union[torch.Tensor, np.ndarray, float],\n        fmax_hz: typing.Union[torch.Tensor, np.ndarray, float],\n        val: float = 0.0,\n    ):\n        \"\"\"Masks frequencies between ``fmin_hz`` and ``fmax_hz``, and fills them\n        with the value specified by ``val``. Useful for implementing SpecAug.\n        The min and max can be different for every item in the batch.\n\n        Parameters\n        ----------\n        fmin_hz : typing.Union[torch.Tensor, np.ndarray, float]\n            Lower end of band to mask out.\n        fmax_hz : typing.Union[torch.Tensor, np.ndarray, float]\n            Upper end of band to mask out.\n        val : float, optional\n            Value to fill in, by default 0.0\n\n        Returns\n        -------\n        AudioSignal\n            Signal with ``stft_data`` manipulated. Apply ``.istft()`` to get the\n            masked audio data.\n        \"\"\"\n        # SpecAug\n        mag, phase = self.magnitude, self.phase\n        fmin_hz = util.ensure_tensor(fmin_hz, ndim=mag.ndim)\n        fmax_hz = util.ensure_tensor(fmax_hz, ndim=mag.ndim)\n        assert torch.all(fmin_hz < fmax_hz)\n\n        # build mask\n        nbins = mag.shape[-2]\n        bins_hz = torch.linspace(0, self.sample_rate / 2, nbins, device=self.device)\n        bins_hz = bins_hz[None, None, :, None].repeat(\n            self.batch_size, 1, 1, mag.shape[-1]\n        )\n        mask = (fmin_hz <= bins_hz) & (bins_hz < fmax_hz)\n        mask = mask.to(self.device)\n\n        mag = mag.masked_fill(mask, val)\n        phase = phase.masked_fill(mask, val)\n        self.stft_data = mag * torch.exp(1j * phase)\n        return self\n\n    def mask_timesteps(\n        self,\n        tmin_s: typing.Union[torch.Tensor, np.ndarray, float],\n        tmax_s: typing.Union[torch.Tensor, np.ndarray, float],\n        val: float = 0.0,\n    ):\n        \"\"\"Masks timesteps between ``tmin_s`` and ``tmax_s``, and fills them\n        with the value specified by ``val``. Useful for implementing SpecAug.\n        The min and max can be different for every item in the batch.\n\n        Parameters\n        ----------\n        tmin_s : typing.Union[torch.Tensor, np.ndarray, float]\n            Lower end of timesteps to mask out.\n        tmax_s : typing.Union[torch.Tensor, np.ndarray, float]\n            Upper end of timesteps to mask out.\n        val : float, optional\n            Value to fill in, by default 0.0\n\n        Returns\n        -------\n        AudioSignal\n            Signal with ``stft_data`` manipulated. Apply ``.istft()`` to get the\n            masked audio data.\n        \"\"\"\n        # SpecAug\n        mag, phase = self.magnitude, self.phase\n        tmin_s = util.ensure_tensor(tmin_s, ndim=mag.ndim)\n        tmax_s = util.ensure_tensor(tmax_s, ndim=mag.ndim)\n\n        assert torch.all(tmin_s < tmax_s)\n\n        # build mask\n        nt = mag.shape[-1]\n        bins_t = torch.linspace(0, self.signal_duration, nt, device=self.device)\n        bins_t = bins_t[None, None, None, :].repeat(\n            self.batch_size, 1, mag.shape[-2], 1\n        )\n        mask = (tmin_s <= bins_t) & (bins_t < tmax_s)\n\n        mag = mag.masked_fill(mask, val)\n        phase = phase.masked_fill(mask, val)\n        self.stft_data = mag * torch.exp(1j * phase)\n        return self\n\n    def mask_low_magnitudes(\n        self, db_cutoff: typing.Union[torch.Tensor, np.ndarray, float], val: float = 0.0\n    ):\n        \"\"\"Mask away magnitudes below a specified threshold, which\n        can be different for every item in the batch.\n\n        Parameters\n        ----------\n        db_cutoff : typing.Union[torch.Tensor, np.ndarray, float]\n            Decibel value for which things below it will be masked away.\n        val : float, optional\n            Value to fill in for masked portions, by default 0.0\n\n        Returns\n        -------\n        AudioSignal\n            Signal with ``stft_data`` manipulated. Apply ``.istft()`` to get the\n            masked audio data.\n        \"\"\"\n        mag = self.magnitude\n        log_mag = self.log_magnitude()\n\n        db_cutoff = util.ensure_tensor(db_cutoff, ndim=mag.ndim)\n        mask = log_mag < db_cutoff\n        mag = mag.masked_fill(mask, val)\n\n        self.magnitude = mag\n        return self\n\n    def shift_phase(self, shift: typing.Union[torch.Tensor, np.ndarray, float]):\n        \"\"\"Shifts the phase by a constant value.\n\n        Parameters\n        ----------\n        shift : typing.Union[torch.Tensor, np.ndarray, float]\n            What to shift the phase by.\n\n        Returns\n        -------\n        AudioSignal\n            Signal with ``stft_data`` manipulated. Apply ``.istft()`` to get the\n            masked audio data.\n        \"\"\"\n        shift = util.ensure_tensor(shift, ndim=self.phase.ndim)\n        self.phase = self.phase + shift\n        return self\n\n    def corrupt_phase(self, scale: typing.Union[torch.Tensor, np.ndarray, float]):\n        \"\"\"Corrupts the phase randomly by some scaled value.\n\n        Parameters\n        ----------\n        scale : typing.Union[torch.Tensor, np.ndarray, float]\n            Standard deviation of noise to add to the phase.\n\n        Returns\n        -------\n        AudioSignal\n            Signal with ``stft_data`` manipulated. Apply ``.istft()`` to get the\n            masked audio data.\n        \"\"\"\n        scale = util.ensure_tensor(scale, ndim=self.phase.ndim)\n        self.phase = self.phase + scale * torch.randn_like(self.phase)\n        return self\n\n    def preemphasis(self, coef: float = 0.85):\n        \"\"\"Applies pre-emphasis to audio signal.\n\n        Parameters\n        ----------\n        coef : float, optional\n            How much pre-emphasis to apply, lower values do less. 0 does nothing.\n            by default 0.85\n\n        Returns\n        -------\n        AudioSignal\n            Pre-emphasized signal.\n        \"\"\"\n        kernel = torch.tensor([1, -coef, 0]).view(1, 1, -1).to(self.device)\n        x = self.audio_data.reshape(-1, 1, self.signal_length)\n        x = torch.nn.functional.conv1d(x, kernel, padding=1)\n        self.audio_data = x.reshape(*self.audio_data.shape)\n        return self\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/effects.py",
    "content": "import typing\n\nimport julius\nimport numpy as np\nimport torch\nimport torchaudio\n\nfrom . import util\n\n\nclass EffectMixin:\n    GAIN_FACTOR = np.log(10) / 20\n    \"\"\"Gain factor for converting between amplitude and decibels.\"\"\"\n    CODEC_PRESETS = {\n        \"8-bit\": {\"format\": \"wav\", \"encoding\": \"ULAW\", \"bits_per_sample\": 8},\n        \"GSM-FR\": {\"format\": \"gsm\"},\n        \"MP3\": {\"format\": \"mp3\", \"compression\": -9},\n        \"Vorbis\": {\"format\": \"vorbis\", \"compression\": -1},\n        \"Ogg\": {\n            \"format\": \"ogg\",\n            \"compression\": -1,\n        },\n        \"Amr-nb\": {\"format\": \"amr-nb\"},\n    }\n    \"\"\"Presets for applying codecs via torchaudio.\"\"\"\n\n    def mix(\n        self,\n        other,\n        snr: typing.Union[torch.Tensor, np.ndarray, float] = 10,\n        other_eq: typing.Union[torch.Tensor, np.ndarray] = None,\n    ):\n        \"\"\"Mixes noise with signal at specified\n        signal-to-noise ratio. Optionally, the\n        other signal can be equalized in-place.\n\n\n        Parameters\n        ----------\n        other : AudioSignal\n            AudioSignal object to mix with.\n        snr : typing.Union[torch.Tensor, np.ndarray, float], optional\n            Signal to noise ratio, by default 10\n        other_eq : typing.Union[torch.Tensor, np.ndarray], optional\n            EQ curve to apply to other signal, if any, by default None\n\n        Returns\n        -------\n        AudioSignal\n            In-place modification of AudioSignal.\n        \"\"\"\n        snr = util.ensure_tensor(snr).to(self.device)\n\n        pad_len = max(0, self.signal_length - other.signal_length)\n        other.zero_pad(0, pad_len)\n        other.truncate_samples(self.signal_length)\n        if other_eq is not None:\n            other = other.equalizer(other_eq)\n\n        tgt_loudness = self.loudness() - snr\n        other = other.normalize(tgt_loudness)\n\n        self.audio_data = self.audio_data + other.audio_data\n        return self\n\n    def convolve(self, other, start_at_max: bool = True):\n        \"\"\"Convolves self with other.\n        This function uses FFTs to do the convolution.\n\n        Parameters\n        ----------\n        other : AudioSignal\n            Signal to convolve with.\n        start_at_max : bool, optional\n            Whether to start at the max value of other signal, to\n            avoid inducing delays, by default True\n\n        Returns\n        -------\n        AudioSignal\n            Convolved signal, in-place.\n        \"\"\"\n        from . import AudioSignal\n\n        pad_len = self.signal_length - other.signal_length\n\n        if pad_len > 0:\n            other.zero_pad(0, pad_len)\n        else:\n            other.truncate_samples(self.signal_length)\n\n        if start_at_max:\n            # Use roll to rotate over the max for every item\n            # so that the impulse responses don't induce any\n            # delay.\n            idx = other.audio_data.abs().argmax(axis=-1)\n            irs = torch.zeros_like(other.audio_data)\n            for i in range(other.batch_size):\n                irs[i] = torch.roll(other.audio_data[i], -idx[i].item(), -1)\n            other = AudioSignal(irs, other.sample_rate)\n\n        delta = torch.zeros_like(other.audio_data)\n        delta[..., 0] = 1\n\n        length = self.signal_length\n        delta_fft = torch.fft.rfft(delta, length)\n        other_fft = torch.fft.rfft(other.audio_data, length)\n        self_fft = torch.fft.rfft(self.audio_data, length)\n\n        convolved_fft = other_fft * self_fft\n        convolved_audio = torch.fft.irfft(convolved_fft, length)\n\n        delta_convolved_fft = other_fft * delta_fft\n        delta_audio = torch.fft.irfft(delta_convolved_fft, length)\n\n        # Use the delta to rescale the audio exactly as needed.\n        delta_max = delta_audio.abs().max(dim=-1, keepdims=True)[0]\n        scale = 1 / delta_max.clamp(1e-5)\n        convolved_audio = convolved_audio * scale\n\n        self.audio_data = convolved_audio\n\n        return self\n\n    def apply_ir(\n        self,\n        ir,\n        drr: typing.Union[torch.Tensor, np.ndarray, float] = None,\n        ir_eq: typing.Union[torch.Tensor, np.ndarray] = None,\n        use_original_phase: bool = False,\n    ):\n        \"\"\"Applies an impulse response to the signal. If ` is`ir_eq``\n        is specified, the impulse response is equalized before\n        it is applied, using the given curve.\n\n        Parameters\n        ----------\n        ir : AudioSignal\n            Impulse response to convolve with.\n        drr : typing.Union[torch.Tensor, np.ndarray, float], optional\n            Direct-to-reverberant ratio that impulse response will be\n            altered to, if specified, by default None\n        ir_eq : typing.Union[torch.Tensor, np.ndarray], optional\n            Equalization that will be applied to impulse response\n            if specified, by default None\n        use_original_phase : bool, optional\n            Whether to use the original phase, instead of the convolved\n            phase, by default False\n\n        Returns\n        -------\n        AudioSignal\n            Signal with impulse response applied to it\n        \"\"\"\n        if ir_eq is not None:\n            ir = ir.equalizer(ir_eq)\n        if drr is not None:\n            ir = ir.alter_drr(drr)\n\n        # Save the peak before\n        max_spk = self.audio_data.abs().max(dim=-1, keepdims=True).values\n\n        # Augment the impulse response to simulate microphone effects\n        # and with varying direct-to-reverberant ratio.\n        phase = self.phase\n        self.convolve(ir)\n\n        # Use the input phase\n        if use_original_phase:\n            self.stft()\n            self.stft_data = self.magnitude * torch.exp(1j * phase)\n            self.istft()\n\n        # Rescale to the input's amplitude\n        max_transformed = self.audio_data.abs().max(dim=-1, keepdims=True).values\n        scale_factor = max_spk.clamp(1e-8) / max_transformed.clamp(1e-8)\n        self = self * scale_factor\n\n        return self\n\n    def ensure_max_of_audio(self, max: float = 1.0):\n        \"\"\"Ensures that ``abs(audio_data) <= max``.\n\n        Parameters\n        ----------\n        max : float, optional\n            Max absolute value of signal, by default 1.0\n\n        Returns\n        -------\n        AudioSignal\n            Signal with values scaled between -max and max.\n        \"\"\"\n        peak = self.audio_data.abs().max(dim=-1, keepdims=True)[0]\n        peak_gain = torch.ones_like(peak)\n        peak_gain[peak > max] = max / peak[peak > max]\n        self.audio_data = self.audio_data * peak_gain\n        return self\n\n    def normalize(self, db: typing.Union[torch.Tensor, np.ndarray, float] = -24.0):\n        \"\"\"Normalizes the signal's volume to the specified db, in LUFS.\n        This is GPU-compatible, making for very fast loudness normalization.\n\n        Parameters\n        ----------\n        db : typing.Union[torch.Tensor, np.ndarray, float], optional\n            Loudness to normalize to, by default -24.0\n\n        Returns\n        -------\n        AudioSignal\n            Normalized audio signal.\n        \"\"\"\n        db = util.ensure_tensor(db).to(self.device)\n        ref_db = self.loudness()\n        gain = db - ref_db\n        gain = torch.exp(gain * self.GAIN_FACTOR)\n\n        self.audio_data = self.audio_data * gain[:, None, None]\n        return self\n\n    def volume_change(self, db: typing.Union[torch.Tensor, np.ndarray, float]):\n        \"\"\"Change volume of signal by some amount, in dB.\n\n        Parameters\n        ----------\n        db : typing.Union[torch.Tensor, np.ndarray, float]\n            Amount to change volume by.\n\n        Returns\n        -------\n        AudioSignal\n            Signal at new volume.\n        \"\"\"\n        db = util.ensure_tensor(db, ndim=1).to(self.device)\n        gain = torch.exp(db * self.GAIN_FACTOR)\n        self.audio_data = self.audio_data * gain[:, None, None]\n        return self\n\n    def _to_2d(self):\n        waveform = self.audio_data.reshape(-1, self.signal_length)\n        return waveform\n\n    def _to_3d(self, waveform):\n        return waveform.reshape(self.batch_size, self.num_channels, -1)\n\n    def pitch_shift(self, n_semitones: int, quick: bool = True):\n        \"\"\"Pitch shift the signal. All items in the batch\n        get the same pitch shift.\n\n        Parameters\n        ----------\n        n_semitones : int\n            How many semitones to shift the signal by.\n        quick : bool, optional\n            Using quick pitch shifting, by default True\n\n        Returns\n        -------\n        AudioSignal\n            Pitch shifted audio signal.\n        \"\"\"\n        device = self.device\n        effects = [\n            [\"pitch\", str(n_semitones * 100)],\n            [\"rate\", str(self.sample_rate)],\n        ]\n        if quick:\n            effects[0].insert(1, \"-q\")\n\n        waveform = self._to_2d().cpu()\n        waveform, sample_rate = torchaudio.sox_effects.apply_effects_tensor(\n            waveform, self.sample_rate, effects, channels_first=True\n        )\n        self.sample_rate = sample_rate\n        self.audio_data = self._to_3d(waveform)\n        return self.to(device)\n\n    def time_stretch(self, factor: float, quick: bool = True):\n        \"\"\"Time stretch the audio signal.\n\n        Parameters\n        ----------\n        factor : float\n            Factor by which to stretch the AudioSignal. Typically\n            between 0.8 and 1.2.\n        quick : bool, optional\n            Whether to use quick time stretching, by default True\n\n        Returns\n        -------\n        AudioSignal\n            Time-stretched AudioSignal.\n        \"\"\"\n        device = self.device\n        effects = [\n            [\"tempo\", str(factor)],\n            [\"rate\", str(self.sample_rate)],\n        ]\n        if quick:\n            effects[0].insert(1, \"-q\")\n\n        waveform = self._to_2d().cpu()\n        waveform, sample_rate = torchaudio.sox_effects.apply_effects_tensor(\n            waveform, self.sample_rate, effects, channels_first=True\n        )\n        self.sample_rate = sample_rate\n        self.audio_data = self._to_3d(waveform)\n        return self.to(device)\n\n    def apply_codec(\n        self,\n        preset: str = None,\n        format: str = \"wav\",\n        encoding: str = None,\n        bits_per_sample: int = None,\n        compression: int = None,\n    ):  # pragma: no cover\n        \"\"\"Applies an audio codec to the signal.\n\n        Parameters\n        ----------\n        preset : str, optional\n            One of the keys in ``self.CODEC_PRESETS``, by default None\n        format : str, optional\n            Format for audio codec, by default \"wav\"\n        encoding : str, optional\n            Encoding to use, by default None\n        bits_per_sample : int, optional\n            How many bits per sample, by default None\n        compression : int, optional\n            Compression amount of codec, by default None\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal with codec applied.\n\n        Raises\n        ------\n        ValueError\n            If preset is not in ``self.CODEC_PRESETS``, an error\n            is thrown.\n        \"\"\"\n        torchaudio_version_070 = \"0.7\" in torchaudio.__version__\n        if torchaudio_version_070:\n            return self\n\n        kwargs = {\n            \"format\": format,\n            \"encoding\": encoding,\n            \"bits_per_sample\": bits_per_sample,\n            \"compression\": compression,\n        }\n\n        if preset is not None:\n            if preset in self.CODEC_PRESETS:\n                kwargs = self.CODEC_PRESETS[preset]\n            else:\n                raise ValueError(\n                    f\"Unknown preset: {preset}. \"\n                    f\"Known presets: {list(self.CODEC_PRESETS.keys())}\"\n                )\n\n        waveform = self._to_2d()\n        if kwargs[\"format\"] in [\"vorbis\", \"mp3\", \"ogg\", \"amr-nb\"]:\n            # Apply it in a for loop\n            augmented = torch.cat(\n                [\n                    torchaudio.functional.apply_codec(\n                        waveform[i][None, :], self.sample_rate, **kwargs\n                    )\n                    for i in range(waveform.shape[0])\n                ],\n                dim=0,\n            )\n        else:\n            augmented = torchaudio.functional.apply_codec(\n                waveform, self.sample_rate, **kwargs\n            )\n        augmented = self._to_3d(augmented)\n\n        self.audio_data = augmented\n        return self\n\n    def mel_filterbank(self, n_bands: int):\n        \"\"\"Breaks signal into mel bands.\n\n        Parameters\n        ----------\n        n_bands : int\n            Number of mel bands to use.\n\n        Returns\n        -------\n        torch.Tensor\n            Mel-filtered bands, with last axis being the band index.\n        \"\"\"\n        filterbank = (\n            julius.SplitBands(self.sample_rate, n_bands).float().to(self.device)\n        )\n        filtered = filterbank(self.audio_data)\n        return filtered.permute(1, 2, 3, 0)\n\n    def equalizer(self, db: typing.Union[torch.Tensor, np.ndarray]):\n        \"\"\"Applies a mel-spaced equalizer to the audio signal.\n\n        Parameters\n        ----------\n        db : typing.Union[torch.Tensor, np.ndarray]\n            EQ curve to apply.\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal with equalization applied.\n        \"\"\"\n        db = util.ensure_tensor(db)\n        n_bands = db.shape[-1]\n        fbank = self.mel_filterbank(n_bands)\n\n        # If there's a batch dimension, make sure it's the same.\n        if db.ndim == 2:\n            if db.shape[0] != 1:\n                assert db.shape[0] == fbank.shape[0]\n        else:\n            db = db.unsqueeze(0)\n\n        weights = (10**db).to(self.device).float()\n        fbank = fbank * weights[:, None, None, :]\n        eq_audio_data = fbank.sum(-1)\n        self.audio_data = eq_audio_data\n        return self\n\n    def clip_distortion(\n        self, clip_percentile: typing.Union[torch.Tensor, np.ndarray, float]\n    ):\n        \"\"\"Clips the signal at a given percentile. The higher it is,\n        the lower the threshold for clipping.\n\n        Parameters\n        ----------\n        clip_percentile : typing.Union[torch.Tensor, np.ndarray, float]\n            Values are between 0.0 to 1.0. Typical values are 0.1 or below.\n\n        Returns\n        -------\n        AudioSignal\n            Audio signal with clipped audio data.\n        \"\"\"\n        clip_percentile = util.ensure_tensor(clip_percentile, ndim=1)\n        min_thresh = torch.quantile(self.audio_data, clip_percentile / 2, dim=-1)\n        max_thresh = torch.quantile(self.audio_data, 1 - (clip_percentile / 2), dim=-1)\n\n        nc = self.audio_data.shape[1]\n        min_thresh = min_thresh[:, :nc, :]\n        max_thresh = max_thresh[:, :nc, :]\n\n        self.audio_data = self.audio_data.clamp(min_thresh, max_thresh)\n\n        return self\n\n    def quantization(\n        self, quantization_channels: typing.Union[torch.Tensor, np.ndarray, int]\n    ):\n        \"\"\"Applies quantization to the input waveform.\n\n        Parameters\n        ----------\n        quantization_channels : typing.Union[torch.Tensor, np.ndarray, int]\n            Number of evenly spaced quantization channels to quantize\n            to.\n\n        Returns\n        -------\n        AudioSignal\n            Quantized AudioSignal.\n        \"\"\"\n        quantization_channels = util.ensure_tensor(quantization_channels, ndim=3)\n\n        x = self.audio_data\n        x = (x + 1) / 2\n        x = x * quantization_channels\n        x = x.floor()\n        x = x / quantization_channels\n        x = 2 * x - 1\n\n        residual = (self.audio_data - x).detach()\n        self.audio_data = self.audio_data - residual\n        return self\n\n    def mulaw_quantization(\n        self, quantization_channels: typing.Union[torch.Tensor, np.ndarray, int]\n    ):\n        \"\"\"Applies mu-law quantization to the input waveform.\n\n        Parameters\n        ----------\n        quantization_channels : typing.Union[torch.Tensor, np.ndarray, int]\n            Number of mu-law spaced quantization channels to quantize\n            to.\n\n        Returns\n        -------\n        AudioSignal\n            Quantized AudioSignal.\n        \"\"\"\n        mu = quantization_channels - 1.0\n        mu = util.ensure_tensor(mu, ndim=3)\n\n        x = self.audio_data\n\n        # quantize\n        x = torch.sign(x) * torch.log1p(mu * torch.abs(x)) / torch.log1p(mu)\n        x = ((x + 1) / 2 * mu + 0.5).to(torch.int64)\n\n        # unquantize\n        x = (x / mu) * 2 - 1.0\n        x = torch.sign(x) * (torch.exp(torch.abs(x) * torch.log1p(mu)) - 1.0) / mu\n\n        residual = (self.audio_data - x).detach()\n        self.audio_data = self.audio_data - residual\n        return self\n\n    def __matmul__(self, other):\n        return self.convolve(other)\n\n\nclass ImpulseResponseMixin:\n    \"\"\"These functions are generally only used with AudioSignals that are derived\n    from impulse responses, not other sources like music or speech. These methods\n    are used to replicate the data augmentation described in [1].\n\n    1.  Bryan, Nicholas J. \"Impulse response data augmentation and deep\n        neural networks for blind room acoustic parameter estimation.\"\n        ICASSP 2020-2020 IEEE International Conference on Acoustics,\n        Speech and Signal Processing (ICASSP). IEEE, 2020.\n    \"\"\"\n\n    def decompose_ir(self):\n        \"\"\"Decomposes an impulse response into early and late\n        field responses.\n        \"\"\"\n        # Equations 1 and 2\n        # -----------------\n        # Breaking up into early\n        # response + late field response.\n\n        td = torch.argmax(self.audio_data, dim=-1, keepdim=True)\n        t0 = int(self.sample_rate * 0.0025)\n\n        idx = torch.arange(self.audio_data.shape[-1], device=self.device)[None, None, :]\n        idx = idx.expand(self.batch_size, -1, -1)\n        early_idx = (idx >= td - t0) * (idx <= td + t0)\n\n        early_response = torch.zeros_like(self.audio_data, device=self.device)\n        early_response[early_idx] = self.audio_data[early_idx]\n\n        late_idx = ~early_idx\n        late_field = torch.zeros_like(self.audio_data, device=self.device)\n        late_field[late_idx] = self.audio_data[late_idx]\n\n        # Equation 4\n        # ----------\n        # Decompose early response into windowed\n        # direct path and windowed residual.\n\n        window = torch.zeros_like(self.audio_data, device=self.device)\n        for idx in range(self.batch_size):\n            window_idx = early_idx[idx, 0].nonzero()\n            window[idx, ..., window_idx] = self.get_window(\n                \"hann\", window_idx.shape[-1], self.device\n            )\n        return early_response, late_field, window\n\n    def measure_drr(self):\n        \"\"\"Measures the direct-to-reverberant ratio of the impulse\n        response.\n\n        Returns\n        -------\n        float\n            Direct-to-reverberant ratio\n        \"\"\"\n        early_response, late_field, _ = self.decompose_ir()\n        num = (early_response**2).sum(dim=-1)\n        den = (late_field**2).sum(dim=-1)\n        drr = 10 * torch.log10(num / den)\n        return drr\n\n    @staticmethod\n    def solve_alpha(early_response, late_field, wd, target_drr):\n        \"\"\"Used to solve for the alpha value, which is used\n        to alter the drr.\n        \"\"\"\n        # Equation 5\n        # ----------\n        # Apply the good ol' quadratic formula.\n\n        wd_sq = wd**2\n        wd_sq_1 = (1 - wd) ** 2\n        e_sq = early_response**2\n        l_sq = late_field**2\n        a = (wd_sq * e_sq).sum(dim=-1)\n        b = (2 * (1 - wd) * wd * e_sq).sum(dim=-1)\n        c = (wd_sq_1 * e_sq).sum(dim=-1) - torch.pow(10, target_drr / 10) * l_sq.sum(\n            dim=-1\n        )\n\n        expr = ((b**2) - 4 * a * c).sqrt()\n        alpha = torch.maximum(\n            (-b - expr) / (2 * a),\n            (-b + expr) / (2 * a),\n        )\n        return alpha\n\n    def alter_drr(self, drr: typing.Union[torch.Tensor, np.ndarray, float]):\n        \"\"\"Alters the direct-to-reverberant ratio of the impulse response.\n\n        Parameters\n        ----------\n        drr : typing.Union[torch.Tensor, np.ndarray, float]\n            Direct-to-reverberant ratio that impulse response will be\n            altered to, if specified, by default None\n\n        Returns\n        -------\n        AudioSignal\n            Altered impulse response.\n        \"\"\"\n        drr = util.ensure_tensor(drr, 2, self.batch_size).to(self.device)\n\n        early_response, late_field, window = self.decompose_ir()\n        alpha = self.solve_alpha(early_response, late_field, window, drr)\n        min_alpha = (\n            late_field.abs().max(dim=-1)[0] / early_response.abs().max(dim=-1)[0]\n        )\n        alpha = torch.maximum(alpha, min_alpha)[..., None]\n\n        aug_ir_data = (\n            alpha * window * early_response\n            + ((1 - window) * early_response)\n            + late_field\n        )\n        self.audio_data = aug_ir_data\n        self.ensure_max_of_audio()\n        return self\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/ffmpeg.py",
    "content": "import json\nimport shlex\nimport subprocess\nimport tempfile\nfrom pathlib import Path\nfrom typing import Tuple\n\nimport ffmpy\nimport numpy as np\nimport torch\n\n\ndef r128stats(filepath: str, quiet: bool):\n    \"\"\"Takes a path to an audio file, returns a dict with the loudness\n    stats computed by the ffmpeg ebur128 filter.\n\n    Parameters\n    ----------\n    filepath : str\n        Path to compute loudness stats on.\n    quiet : bool\n        Whether to show FFMPEG output during computation.\n\n    Returns\n    -------\n    dict\n        Dictionary containing loudness stats.\n    \"\"\"\n    ffargs = [\n        \"ffmpeg\",\n        \"-nostats\",\n        \"-i\",\n        filepath,\n        \"-filter_complex\",\n        \"ebur128\",\n        \"-f\",\n        \"null\",\n        \"-\",\n    ]\n    if quiet:\n        ffargs += [\"-hide_banner\"]\n    proc = subprocess.Popen(ffargs, stderr=subprocess.PIPE, universal_newlines=True)\n    stats = proc.communicate()[1]\n    summary_index = stats.rfind(\"Summary:\")\n\n    summary_list = stats[summary_index:].split()\n    i_lufs = float(summary_list[summary_list.index(\"I:\") + 1])\n    i_thresh = float(summary_list[summary_list.index(\"I:\") + 4])\n    lra = float(summary_list[summary_list.index(\"LRA:\") + 1])\n    lra_thresh = float(summary_list[summary_list.index(\"LRA:\") + 4])\n    lra_low = float(summary_list[summary_list.index(\"low:\") + 1])\n    lra_high = float(summary_list[summary_list.index(\"high:\") + 1])\n    stats_dict = {\n        \"I\": i_lufs,\n        \"I Threshold\": i_thresh,\n        \"LRA\": lra,\n        \"LRA Threshold\": lra_thresh,\n        \"LRA Low\": lra_low,\n        \"LRA High\": lra_high,\n    }\n\n    return stats_dict\n\n\ndef ffprobe_offset_and_codec(path: str) -> Tuple[float, str]:\n    \"\"\"Given a path to a file, returns the start time offset and codec of\n    the first audio stream.\n    \"\"\"\n    ff = ffmpy.FFprobe(\n        inputs={path: None},\n        global_options=\"-show_entries format=start_time:stream=duration,start_time,codec_type,codec_name,start_pts,time_base -of json -v quiet\",\n    )\n    streams = json.loads(ff.run(stdout=subprocess.PIPE)[0])[\"streams\"]\n    seconds_offset = 0.0\n    codec = None\n\n    # Get the offset and codec of the first audio stream we find\n    # and return its start time, if it has one.\n    for stream in streams:\n        if stream[\"codec_type\"] == \"audio\":\n            seconds_offset = stream.get(\"start_time\", 0.0)\n            codec = stream.get(\"codec_name\")\n            break\n    return float(seconds_offset), codec\n\n\nclass FFMPEGMixin:\n    _loudness = None\n\n    def ffmpeg_loudness(self, quiet: bool = True):\n        \"\"\"Computes loudness of audio file using FFMPEG.\n\n        Parameters\n        ----------\n        quiet : bool, optional\n            Whether to show FFMPEG output during computation,\n            by default True\n\n        Returns\n        -------\n        torch.Tensor\n            Loudness of every item in the batch, computed via\n            FFMPEG.\n        \"\"\"\n        loudness = []\n\n        with tempfile.NamedTemporaryFile(suffix=\".wav\") as f:\n            for i in range(self.batch_size):\n                self[i].write(f.name)\n                loudness_stats = r128stats(f.name, quiet=quiet)\n                loudness.append(loudness_stats[\"I\"])\n\n        self._loudness = torch.from_numpy(np.array(loudness)).float()\n        return self.loudness()\n\n    def ffmpeg_resample(self, sample_rate: int, quiet: bool = True):\n        \"\"\"Resamples AudioSignal using FFMPEG. More memory-efficient\n        than using julius.resample for long audio files.\n\n        Parameters\n        ----------\n        sample_rate : int\n            Sample rate to resample to.\n        quiet : bool, optional\n            Whether to show FFMPEG output during computation,\n            by default True\n\n        Returns\n        -------\n        AudioSignal\n            Resampled AudioSignal.\n        \"\"\"\n        from audiotools import AudioSignal\n\n        if sample_rate == self.sample_rate:\n            return self\n\n        with tempfile.NamedTemporaryFile(suffix=\".wav\") as f:\n            self.write(f.name)\n            f_out = f.name.replace(\"wav\", \"rs.wav\")\n            command = f\"ffmpeg -i {f.name} -ar {sample_rate} {f_out}\"\n            if quiet:\n                command += \" -hide_banner -loglevel error\"\n            subprocess.check_call(shlex.split(command))\n            resampled = AudioSignal(f_out)\n            Path.unlink(Path(f_out))\n        return resampled\n\n    @classmethod\n    def load_from_file_with_ffmpeg(cls, audio_path: str, quiet: bool = True, **kwargs):\n        \"\"\"Loads AudioSignal object after decoding it to a wav file using FFMPEG.\n        Useful for loading audio that isn't covered by librosa's loading mechanism. Also\n        useful for loading mp3 files, without any offset.\n\n        Parameters\n        ----------\n        audio_path : str\n            Path to load AudioSignal from.\n        quiet : bool, optional\n            Whether to show FFMPEG output during computation,\n            by default True\n\n        Returns\n        -------\n        AudioSignal\n            AudioSignal loaded from file with FFMPEG.\n        \"\"\"\n        audio_path = str(audio_path)\n        with tempfile.TemporaryDirectory() as d:\n            wav_file = str(Path(d) / \"extracted.wav\")\n            padded_wav = str(Path(d) / \"padded.wav\")\n\n            global_options = \"-y\"\n            if quiet:\n                global_options += \" -loglevel error\"\n\n            ff = ffmpy.FFmpeg(\n                inputs={audio_path: None},\n                # For inputs that are m4a (and others?), the input audio can\n                # have samples that don't match the sample rate. This aresample\n                # option forces ffmpeg to read timing information in the source\n                # file instead of assuming constant sample rate.\n                #\n                # This fixes an issue where an input m4a file might be a\n                # different length than the output wav file\n                outputs={wav_file: \"-af aresample=async=1000\"},\n                global_options=global_options,\n            )\n            ff.run()\n\n            # We pad the file using the start time offset in case it's an audio\n            # stream starting at some offset in a video container.\n            pad, codec = ffprobe_offset_and_codec(audio_path)\n\n            # For mp3s, don't pad files with discrepancies less than 0.027s -\n            # it's likely due to codec latency. The amount of latency introduced\n            # by mp3 is 1152, which is 0.0261 44khz. So we set the threshold\n            # here slightly above that.\n            # Source: https://lame.sourceforge.io/tech-FAQ.txt.\n            if codec == \"mp3\" and pad < 0.027:\n                pad = 0.0\n            ff = ffmpy.FFmpeg(\n                inputs={wav_file: None},\n                outputs={padded_wav: f\"-af 'adelay={pad*1000}:all=true'\"},\n                global_options=global_options,\n            )\n            ff.run()\n\n            signal = cls(padded_wav, **kwargs)\n\n        return signal\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/loudness.py",
    "content": "import copy\n\nimport julius\nimport numpy as np\nimport scipy\nimport torch\nimport torch.nn.functional as F\nimport torchaudio\n\n\nclass Meter(torch.nn.Module):\n    \"\"\"Tensorized version of pyloudnorm.Meter. Works with batched audio tensors.\n\n    Parameters\n    ----------\n    rate : int\n        Sample rate of audio.\n    filter_class : str, optional\n        Class of weighting filter used.\n        K-weighting' (default), 'Fenton/Lee 1'\n        'Fenton/Lee 2', 'Dash et al.'\n        by default \"K-weighting\"\n    block_size : float, optional\n        Gating block size in seconds, by default 0.400\n    zeros : int, optional\n         Number of zeros to use in FIR approximation of\n         IIR filters, by default 512\n    use_fir : bool, optional\n        Whether to use FIR approximation or exact IIR formulation.\n        If computing on GPU, ``use_fir=True`` will be used, as its\n        much faster, by default False\n    \"\"\"\n\n    def __init__(\n        self,\n        rate: int,\n        filter_class: str = \"K-weighting\",\n        block_size: float = 0.400,\n        zeros: int = 512,\n        use_fir: bool = False,\n    ):\n        super().__init__()\n\n        self.rate = rate\n        self.filter_class = filter_class\n        self.block_size = block_size\n        self.use_fir = use_fir\n\n        G = torch.from_numpy(np.array([1.0, 1.0, 1.0, 1.41, 1.41]))\n        self.register_buffer(\"G\", G)\n\n        # Compute impulse responses so that filtering is fast via\n        # a convolution at runtime, on GPU, unlike lfilter.\n        impulse = np.zeros((zeros,))\n        impulse[..., 0] = 1.0\n\n        firs = np.zeros((len(self._filters), 1, zeros))\n        passband_gain = torch.zeros(len(self._filters))\n\n        for i, (_, filter_stage) in enumerate(self._filters.items()):\n            firs[i] = scipy.signal.lfilter(filter_stage.b, filter_stage.a, impulse)\n            passband_gain[i] = filter_stage.passband_gain\n\n        firs = torch.from_numpy(firs[..., ::-1].copy()).float()\n\n        self.register_buffer(\"firs\", firs)\n        self.register_buffer(\"passband_gain\", passband_gain)\n\n    def apply_filter_gpu(self, data: torch.Tensor):\n        \"\"\"Performs FIR approximation of loudness computation.\n\n        Parameters\n        ----------\n        data : torch.Tensor\n            Audio data of shape (nb, nch, nt).\n\n        Returns\n        -------\n        torch.Tensor\n            Filtered audio data.\n        \"\"\"\n        # Data is of shape (nb, nch, nt)\n        # Reshape to (nb*nch, 1, nt)\n        nb, nt, nch = data.shape\n        data = data.permute(0, 2, 1)\n        data = data.reshape(nb * nch, 1, nt)\n\n        # Apply padding\n        pad_length = self.firs.shape[-1]\n\n        # Apply filtering in sequence\n        for i in range(self.firs.shape[0]):\n            data = F.pad(data, (pad_length, pad_length))\n            data = julius.fftconv.fft_conv1d(data, self.firs[i, None, ...])\n            data = self.passband_gain[i] * data\n            data = data[..., 1 : nt + 1]\n\n        data = data.permute(0, 2, 1)\n        data = data[:, :nt, :]\n        return data\n\n    def apply_filter_cpu(self, data: torch.Tensor):\n        \"\"\"Performs IIR formulation of loudness computation.\n\n        Parameters\n        ----------\n        data : torch.Tensor\n            Audio data of shape (nb, nch, nt).\n\n        Returns\n        -------\n        torch.Tensor\n            Filtered audio data.\n        \"\"\"\n        for _, filter_stage in self._filters.items():\n            passband_gain = filter_stage.passband_gain\n\n            a_coeffs = torch.from_numpy(filter_stage.a).float().to(data.device)\n            b_coeffs = torch.from_numpy(filter_stage.b).float().to(data.device)\n\n            _data = data.permute(0, 2, 1)\n            filtered = torchaudio.functional.lfilter(\n                _data, a_coeffs, b_coeffs, clamp=False\n            )\n            data = passband_gain * filtered.permute(0, 2, 1)\n        return data\n\n    def apply_filter(self, data: torch.Tensor):\n        \"\"\"Applies filter on either CPU or GPU, depending\n        on if the audio is on GPU or is on CPU, or if\n        ``self.use_fir`` is True.\n\n        Parameters\n        ----------\n        data : torch.Tensor\n            Audio data of shape (nb, nch, nt).\n\n        Returns\n        -------\n        torch.Tensor\n            Filtered audio data.\n        \"\"\"\n        if data.is_cuda or self.use_fir:\n            data = self.apply_filter_gpu(data)\n        else:\n            data = self.apply_filter_cpu(data)\n        return data\n\n    def forward(self, data: torch.Tensor):\n        \"\"\"Computes integrated loudness of data.\n\n        Parameters\n        ----------\n        data : torch.Tensor\n            Audio data of shape (nb, nch, nt).\n\n        Returns\n        -------\n        torch.Tensor\n            Filtered audio data.\n        \"\"\"\n        return self.integrated_loudness(data)\n\n    def _unfold(self, input_data):\n        T_g = self.block_size\n        overlap = 0.75  # overlap of 75% of the block duration\n        step = 1.0 - overlap  # step size by percentage\n\n        kernel_size = int(T_g * self.rate)\n        stride = int(T_g * self.rate * step)\n        unfolded = julius.core.unfold(input_data.permute(0, 2, 1), kernel_size, stride)\n        unfolded = unfolded.transpose(-1, -2)\n\n        return unfolded\n\n    def integrated_loudness(self, data: torch.Tensor):\n        \"\"\"Computes integrated loudness of data.\n\n        Parameters\n        ----------\n        data : torch.Tensor\n            Audio data of shape (nb, nch, nt).\n\n        Returns\n        -------\n        torch.Tensor\n            Filtered audio data.\n        \"\"\"\n        if not torch.is_tensor(data):\n            data = torch.from_numpy(data).float()\n        else:\n            data = data.float()\n\n        input_data = copy.copy(data)\n        # Data always has a batch and channel dimension.\n        # Is of shape (nb, nt, nch)\n        if input_data.ndim < 2:\n            input_data = input_data.unsqueeze(-1)\n        if input_data.ndim < 3:\n            input_data = input_data.unsqueeze(0)\n\n        nb, nt, nch = input_data.shape\n\n        # Apply frequency weighting filters - account\n        # for the acoustic respose of the head and auditory system\n        input_data = self.apply_filter(input_data)\n\n        G = self.G  # channel gains\n        T_g = self.block_size  # 400 ms gating block standard\n        Gamma_a = -70.0  # -70 LKFS = absolute loudness threshold\n\n        unfolded = self._unfold(input_data)\n\n        z = (1.0 / (T_g * self.rate)) * unfolded.square().sum(2)\n        l = -0.691 + 10.0 * torch.log10((G[None, :nch, None] * z).sum(1, keepdim=True))\n        l = l.expand_as(z)\n\n        # find gating block indices above absolute threshold\n        z_avg_gated = z\n        z_avg_gated[l <= Gamma_a] = 0\n        masked = l > Gamma_a\n        z_avg_gated = z_avg_gated.sum(2) / masked.sum(2)\n\n        # calculate the relative threshold value (see eq. 6)\n        Gamma_r = (\n            -0.691 + 10.0 * torch.log10((z_avg_gated * G[None, :nch]).sum(-1)) - 10.0\n        )\n        Gamma_r = Gamma_r[:, None, None]\n        Gamma_r = Gamma_r.expand(nb, nch, l.shape[-1])\n\n        # find gating block indices above relative and absolute thresholds  (end of eq. 7)\n        z_avg_gated = z\n        z_avg_gated[l <= Gamma_a] = 0\n        z_avg_gated[l <= Gamma_r] = 0\n        masked = (l > Gamma_a) * (l > Gamma_r)\n        z_avg_gated = z_avg_gated.sum(2) / masked.sum(2)\n\n        # # Cannot use nan_to_num (pytorch 1.8 does not come with GCP-supported cuda version)\n        # z_avg_gated = torch.nan_to_num(z_avg_gated)\n        z_avg_gated = torch.where(\n            z_avg_gated.isnan(), torch.zeros_like(z_avg_gated), z_avg_gated\n        )\n        z_avg_gated[z_avg_gated == float(\"inf\")] = float(np.finfo(np.float32).max)\n        z_avg_gated[z_avg_gated == -float(\"inf\")] = float(np.finfo(np.float32).min)\n\n        LUFS = -0.691 + 10.0 * torch.log10((G[None, :nch] * z_avg_gated).sum(1))\n        return LUFS.float()\n\n    @property\n    def filter_class(self):\n        return self._filter_class\n\n    @filter_class.setter\n    def filter_class(self, value):\n        from pyloudnorm import Meter\n\n        meter = Meter(self.rate)\n        meter.filter_class = value\n        self._filter_class = value\n        self._filters = meter._filters\n\n\nclass LoudnessMixin:\n    _loudness = None\n    MIN_LOUDNESS = -70\n    \"\"\"Minimum loudness possible.\"\"\"\n\n    def loudness(\n        self, filter_class: str = \"K-weighting\", block_size: float = 0.400, **kwargs\n    ):\n        \"\"\"Calculates loudness using an implementation of ITU-R BS.1770-4.\n        Allows control over gating block size and frequency weighting filters for\n        additional control. Measure the integrated gated loudness of a signal.\n\n        API is derived from PyLoudnorm, but this implementation is ported to PyTorch\n        and is tensorized across batches. When on GPU, an FIR approximation of the IIR\n        filters is used to compute loudness for speed.\n\n        Uses the weighting filters and block size defined by the meter\n        the integrated loudness is measured based upon the gating algorithm\n        defined in the ITU-R BS.1770-4 specification.\n\n        Parameters\n        ----------\n        filter_class : str, optional\n            Class of weighting filter used.\n            K-weighting' (default), 'Fenton/Lee 1'\n            'Fenton/Lee 2', 'Dash et al.'\n            by default \"K-weighting\"\n        block_size : float, optional\n            Gating block size in seconds, by default 0.400\n        kwargs : dict, optional\n            Keyword arguments to :py:func:`audiotools.core.loudness.Meter`.\n\n        Returns\n        -------\n        torch.Tensor\n            Loudness of audio data.\n        \"\"\"\n        if self._loudness is not None:\n            return self._loudness.to(self.device)\n        original_length = self.signal_length\n        if self.signal_duration < 0.5:\n            pad_len = int((0.5 - self.signal_duration) * self.sample_rate)\n            self.zero_pad(0, pad_len)\n\n        # create BS.1770 meter\n        meter = Meter(\n            self.sample_rate, filter_class=filter_class, block_size=block_size, **kwargs\n        )\n        meter = meter.to(self.device)\n        # measure loudness\n        loudness = meter.integrated_loudness(self.audio_data.permute(0, 2, 1))\n        self.truncate_samples(original_length)\n        min_loudness = (\n            torch.ones_like(loudness, device=loudness.device) * self.MIN_LOUDNESS\n        )\n        self._loudness = torch.maximum(loudness, min_loudness)\n\n        return self._loudness.to(self.device)\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/playback.py",
    "content": "\"\"\"\nThese are utilities that allow one to embed an AudioSignal\nas a playable object in a Jupyter notebook, or to play audio from\nthe terminal, etc.\n\"\"\"  # fmt: skip\nimport base64\nimport io\nimport random\nimport string\nimport subprocess\nfrom tempfile import NamedTemporaryFile\n\nimport importlib_resources as pkg_resources\n\nfrom . import templates\nfrom .util import _close_temp_files\nfrom .util import format_figure\n\nheaders = pkg_resources.files(templates).joinpath(\"headers.html\").read_text()\nwidget = pkg_resources.files(templates).joinpath(\"widget.html\").read_text()\n\nDEFAULT_EXTENSION = \".wav\"\n\n\ndef _check_imports():  # pragma: no cover\n    try:\n        import ffmpy\n    except Exception:\n        ffmpy = False\n\n    try:\n        import IPython\n    except Exception:\n        raise ImportError(\"IPython must be installed in order to use this function!\")\n    return ffmpy, IPython\n\n\nclass PlayMixin:\n    def embed(self, ext: str = None, display: bool = True, return_html: bool = False):\n        \"\"\"Embeds audio as a playable audio embed in a notebook, or HTML\n        document, etc.\n\n        Parameters\n        ----------\n        ext : str, optional\n            Extension to use when saving the audio, by default \".wav\"\n        display : bool, optional\n            This controls whether or not to display the audio when called. This\n            is used when the embed is the last line in a Jupyter cell, to prevent\n            the audio from being embedded twice, by default True\n        return_html : bool, optional\n            Whether to return the data wrapped in an HTML audio element, by default False\n\n        Returns\n        -------\n        str\n            Either the element for display, or the HTML string of it.\n        \"\"\"\n        if ext is None:\n            ext = DEFAULT_EXTENSION\n        ext = f\".{ext}\" if not ext.startswith(\".\") else ext\n        ffmpy, IPython = _check_imports()\n        sr = self.sample_rate\n        tmpfiles = []\n\n        with _close_temp_files(tmpfiles):\n            tmp_wav = NamedTemporaryFile(mode=\"w+\", suffix=\".wav\", delete=False)\n            tmpfiles.append(tmp_wav)\n            self.write(tmp_wav.name)\n            if ext != \".wav\" and ffmpy:\n                tmp_converted = NamedTemporaryFile(mode=\"w+\", suffix=ext, delete=False)\n                tmpfiles.append(tmp_wav)\n                ff = ffmpy.FFmpeg(\n                    inputs={tmp_wav.name: None},\n                    outputs={\n                        tmp_converted.name: \"-write_xing 0 -codec:a libmp3lame -b:a 128k -y -hide_banner -loglevel error\"\n                    },\n                )\n                ff.run()\n            else:\n                tmp_converted = tmp_wav\n\n            audio_element = IPython.display.Audio(data=tmp_converted.name, rate=sr)\n            if display:\n                IPython.display.display(audio_element)\n\n        if return_html:\n            audio_element = (\n                f\"<audio \"\n                f\"  controls \"\n                f\"  src='{audio_element.src_attr()}'> \"\n                f\"</audio> \"\n            )\n        return audio_element\n\n    def widget(\n        self,\n        title: str = None,\n        ext: str = \".wav\",\n        add_headers: bool = True,\n        player_width: str = \"100%\",\n        margin: str = \"10px\",\n        plot_fn: str = \"specshow\",\n        return_html: bool = False,\n        **kwargs,\n    ):\n        \"\"\"Creates a playable widget with spectrogram. Inspired (heavily) by\n        https://sjvasquez.github.io/blog/melnet/.\n\n        Parameters\n        ----------\n        title : str, optional\n            Title of plot, placed in upper right of top-most axis.\n        ext : str, optional\n            Extension for embedding, by default \".mp3\"\n        add_headers : bool, optional\n            Whether or not to add headers (use for first embed, False for later embeds), by default True\n        player_width : str, optional\n            Width of the player, as a string in a CSS rule, by default \"100%\"\n        margin : str, optional\n            Margin on all sides of player, by default \"10px\"\n        plot_fn : function, optional\n            Plotting function to use (by default self.specshow).\n        return_html : bool, optional\n            Whether to return the data wrapped in an HTML audio element, by default False\n        kwargs : dict, optional\n            Keyword arguments to plot_fn (by default self.specshow).\n\n        Returns\n        -------\n        HTML\n            HTML object.\n        \"\"\"\n        import matplotlib.pyplot as plt\n\n        def _save_fig_to_tag():\n            buffer = io.BytesIO()\n\n            plt.savefig(buffer, bbox_inches=\"tight\", pad_inches=0)\n            plt.close()\n\n            buffer.seek(0)\n            data_uri = base64.b64encode(buffer.read()).decode(\"ascii\")\n            tag = \"data:image/png;base64,{0}\".format(data_uri)\n\n            return tag\n\n        _, IPython = _check_imports()\n\n        header_html = \"\"\n\n        if add_headers:\n            header_html = headers.replace(\"PLAYER_WIDTH\", str(player_width))\n            header_html = header_html.replace(\"MARGIN\", str(margin))\n            IPython.display.display(IPython.display.HTML(header_html))\n\n        widget_html = widget\n        if isinstance(plot_fn, str):\n            plot_fn = getattr(self, plot_fn)\n            kwargs[\"title\"] = title\n        plot_fn(**kwargs)\n\n        fig = plt.gcf()\n        pixels = fig.get_size_inches() * fig.dpi\n\n        tag = _save_fig_to_tag()\n\n        # Make the source image for the levels\n        self.specshow()\n        format_figure((12, 1.5))\n        levels_tag = _save_fig_to_tag()\n\n        player_id = \"\".join(random.choice(string.ascii_uppercase) for _ in range(10))\n\n        audio_elem = self.embed(ext=ext, display=False)\n        widget_html = widget_html.replace(\"AUDIO_SRC\", audio_elem.src_attr())\n        widget_html = widget_html.replace(\"IMAGE_SRC\", tag)\n        widget_html = widget_html.replace(\"LEVELS_SRC\", levels_tag)\n        widget_html = widget_html.replace(\"PLAYER_ID\", player_id)\n\n        # Calculate width/height of figure based on figure size.\n        widget_html = widget_html.replace(\"PADDING_AMOUNT\", f\"{int(pixels[1])}px\")\n        widget_html = widget_html.replace(\"MAX_WIDTH\", f\"{int(pixels[0])}px\")\n\n        IPython.display.display(IPython.display.HTML(widget_html))\n\n        if return_html:\n            html = header_html if add_headers else \"\"\n            html += widget_html\n            return html\n\n    def play(self):\n        \"\"\"\n        Plays an audio signal if ffplay from the ffmpeg suite of tools is installed.\n        Otherwise, will fail. The audio signal is written to a temporary file\n        and then played with ffplay.\n        \"\"\"\n        tmpfiles = []\n        with _close_temp_files(tmpfiles):\n            tmp_wav = NamedTemporaryFile(suffix=\".wav\", delete=False)\n            tmpfiles.append(tmp_wav)\n            self.write(tmp_wav.name)\n            print(self)\n            subprocess.call(\n                [\n                    \"ffplay\",\n                    \"-nodisp\",\n                    \"-autoexit\",\n                    \"-hide_banner\",\n                    \"-loglevel\",\n                    \"error\",\n                    tmp_wav.name,\n                ]\n            )\n        return self\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    from audiotools import AudioSignal\n\n    signal = AudioSignal(\n        \"tests/audio/spk/f10_script4_produced.mp3\", offset=5, duration=5\n    )\n\n    wave_html = signal.widget(\n        \"Waveform\",\n        plot_fn=\"waveplot\",\n        return_html=True,\n    )\n\n    spec_html = signal.widget(\"Spectrogram\", return_html=True, add_headers=False)\n\n    combined_html = signal.widget(\n        \"Waveform + spectrogram\",\n        plot_fn=\"wavespec\",\n        return_html=True,\n        add_headers=False,\n    )\n\n    signal.low_pass(8000)\n    lowpass_html = signal.widget(\n        \"Lowpassed audio\",\n        plot_fn=\"wavespec\",\n        return_html=True,\n        add_headers=False,\n    )\n\n    with open(\"/tmp/index.html\", \"w\") as f:\n        f.write(wave_html)\n        f.write(spec_html)\n        f.write(combined_html)\n        f.write(lowpass_html)\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/templates/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/audiotools/core/templates/headers.html",
    "content": "<style>\n    .player {\n        width: 100%;\n        /*border: 1px solid black;*/\n        margin: 10px;\n    }\n\n    .underlay img {\n        width: 100%;\n        height: 100%;\n    }\n\n    .spectrogram {\n        height: 0;\n        width: 100%;\n        position: relative;\n    }\n\n    .audio-controls {\n        width: 100%;\n        height: 54px;\n        display: flex;\n        /*border-top: 1px solid black;*/\n        /*background-color: rgb(241, 243, 244);*/\n        background-color: rgb(248, 248, 248);\n        background-color: rgb(253, 253, 254);\n        border: 1px solid rgb(205, 208, 211);\n        margin-top: 20px;\n        /*border: 1px solid black;*/\n        border-radius: 30px;\n\n    }\n\n    .play-img {\n        margin: auto;\n        height: 45%;\n        width: 45%;\n        display: block;\n    }\n\n    .download-img {\n        margin: auto;\n        height: 100%;\n        width: 100%;\n        display: block;\n    }\n\n    .pause-img {\n        margin: auto;\n        height: 45%;\n        width: 45%;\n        display: none\n    }\n\n    .playpause {\n        margin:11px 11px 11px 11px;\n        width: 32px;\n        min-width: 32px;\n        height: 32px;\n        /*background-color: rgb(241, 243, 244);*/\n        background-color: rgba(0, 0, 0, 0.0);\n        /*border-right: 1px solid black;*/\n        /*border: 1px solid red;*/\n        border-radius: 16px;\n        color: black;\n        transition: 0.25s;\n        box-sizing: border-box !important;\n    }\n\n    .download {\n        margin:11px 11px 11px 11px;\n        width: 32px;\n        min-width: 32px;\n        height: 32px;\n        /*background-color: rgb(241, 243, 244);*/\n        background-color: rgba(0, 0, 0, 0.0);\n        /*border-right: 1px solid black;*/\n        /*border: 1px solid red;*/\n        border-radius: 16px;\n        color: black;\n        transition: 0.25s;\n        box-sizing: border-box !important;\n    }\n\n    /*.playpause:disabled {\n        background-color: red;\n    }*/\n\n    .playpause:hover {\n        background-color: rgba(10, 20, 30, 0.03);\n    }\n\n    .playpause:focus {\n        outline:none;\n    }\n\n    .response {\n        padding:0px 20px 0px 0px;\n        width: calc(100% - 132px);\n        height: 100%;\n\n        /*border: 1px solid red;*/\n        /*border-bottom: 1px solid rgb(89, 89, 89);*/\n    }\n\n    .response-canvas {\n        height: 100%;\n        width: 100%;\n    }\n\n\n    .underlay {\n        height: 100%;\n        width: 100%;\n        position: absolute;\n        top: 0;\n        left: 0;\n    }\n\n    .overlay{\n        width: 0%;\n        height:100%;\n        top: 0;\n        right: 0px;\n\n        background:rgba(255, 255, 255, 0.15);\n        overflow:hidden;\n        position: absolute;\n        z-index: 10;\n        border-left: solid 1px rgba(0, 0, 0, 0.664);\n\n        position: absolute;\n        pointer-events: none;\n    }\n</style>\n\n<script>\n    !function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).pako=t()}}(function(){return function(){return function t(e,a,i){function n(s,o){if(!a[s]){if(!e[s]){var l=\"function\"==typeof require&&require;if(!o&&l)return l(s,!0);if(r)return r(s,!0);var h=new Error(\"Cannot find module '\"+s+\"'\");throw h.code=\"MODULE_NOT_FOUND\",h}var d=a[s]={exports:{}};e[s][0].call(d.exports,function(t){return n(e[s][1][t]||t)},d,d.exports,t,e,a,i)}return a[s].exports}for(var r=\"function\"==typeof require&&require,s=0;s<i.length;s++)n(i[s]);return n}}()({1:[function(t,e,a){\"use strict\";var i=t(\"./zlib/deflate\"),n=t(\"./utils/common\"),r=t(\"./utils/strings\"),s=t(\"./zlib/messages\"),o=t(\"./zlib/zstream\"),l=Object.prototype.toString,h=0,d=-1,f=0,_=8;function u(t){if(!(this instanceof u))return new u(t);this.options=n.assign({level:d,method:_,chunkSize:16384,windowBits:15,memLevel:8,strategy:f,to:\"\"},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new o,this.strm.avail_out=0;var a=i.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==h)throw new Error(s[a]);if(e.header&&i.deflateSetHeader(this.strm,e.header),e.dictionary){var c;if(c=\"string\"==typeof e.dictionary?r.string2buf(e.dictionary):\"[object ArrayBuffer]\"===l.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(a=i.deflateSetDictionary(this.strm,c))!==h)throw new Error(s[a]);this._dict_set=!0}}function c(t,e){var a=new u(e);if(a.push(t,!0),a.err)throw a.msg||s[a.err];return a.result}u.prototype.push=function(t,e){var a,s,o=this.strm,d=this.options.chunkSize;if(this.ended)return!1;s=e===~~e?e:!0===e?4:0,\"string\"==typeof t?o.input=r.string2buf(t):\"[object ArrayBuffer]\"===l.call(t)?o.input=new Uint8Array(t):o.input=t,o.next_in=0,o.avail_in=o.input.length;do{if(0===o.avail_out&&(o.output=new n.Buf8(d),o.next_out=0,o.avail_out=d),1!==(a=i.deflate(o,s))&&a!==h)return this.onEnd(a),this.ended=!0,!1;0!==o.avail_out&&(0!==o.avail_in||4!==s&&2!==s)||(\"string\"===this.options.to?this.onData(r.buf2binstring(n.shrinkBuf(o.output,o.next_out))):this.onData(n.shrinkBuf(o.output,o.next_out)))}while((o.avail_in>0||0===o.avail_out)&&1!==a);return 4===s?(a=i.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===h):2!==s||(this.onEnd(h),o.avail_out=0,!0)},u.prototype.onData=function(t){this.chunks.push(t)},u.prototype.onEnd=function(t){t===h&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=n.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Deflate=u,a.deflate=c,a.deflateRaw=function(t,e){return(e=e||{}).raw=!0,c(t,e)},a.gzip=function(t,e){return(e=e||{}).gzip=!0,c(t,e)}},{\"./utils/common\":3,\"./utils/strings\":4,\"./zlib/deflate\":8,\"./zlib/messages\":13,\"./zlib/zstream\":15}],2:[function(t,e,a){\"use strict\";var i=t(\"./zlib/inflate\"),n=t(\"./utils/common\"),r=t(\"./utils/strings\"),s=t(\"./zlib/constants\"),o=t(\"./zlib/messages\"),l=t(\"./zlib/zstream\"),h=t(\"./zlib/gzheader\"),d=Object.prototype.toString;function f(t){if(!(this instanceof f))return new f(t);this.options=n.assign({chunkSize:16384,windowBits:0,to:\"\"},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var a=i.inflateInit2(this.strm,e.windowBits);if(a!==s.Z_OK)throw new Error(o[a]);if(this.header=new h,i.inflateGetHeader(this.strm,this.header),e.dictionary&&(\"string\"==typeof e.dictionary?e.dictionary=r.string2buf(e.dictionary):\"[object ArrayBuffer]\"===d.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(a=i.inflateSetDictionary(this.strm,e.dictionary))!==s.Z_OK))throw new Error(o[a])}function _(t,e){var a=new f(e);if(a.push(t,!0),a.err)throw a.msg||o[a.err];return a.result}f.prototype.push=function(t,e){var a,o,l,h,f,_=this.strm,u=this.options.chunkSize,c=this.options.dictionary,b=!1;if(this.ended)return!1;o=e===~~e?e:!0===e?s.Z_FINISH:s.Z_NO_FLUSH,\"string\"==typeof t?_.input=r.binstring2buf(t):\"[object ArrayBuffer]\"===d.call(t)?_.input=new Uint8Array(t):_.input=t,_.next_in=0,_.avail_in=_.input.length;do{if(0===_.avail_out&&(_.output=new n.Buf8(u),_.next_out=0,_.avail_out=u),(a=i.inflate(_,s.Z_NO_FLUSH))===s.Z_NEED_DICT&&c&&(a=i.inflateSetDictionary(this.strm,c)),a===s.Z_BUF_ERROR&&!0===b&&(a=s.Z_OK,b=!1),a!==s.Z_STREAM_END&&a!==s.Z_OK)return this.onEnd(a),this.ended=!0,!1;_.next_out&&(0!==_.avail_out&&a!==s.Z_STREAM_END&&(0!==_.avail_in||o!==s.Z_FINISH&&o!==s.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(l=r.utf8border(_.output,_.next_out),h=_.next_out-l,f=r.buf2string(_.output,l),_.next_out=h,_.avail_out=u-h,h&&n.arraySet(_.output,_.output,l,h,0),this.onData(f)):this.onData(n.shrinkBuf(_.output,_.next_out)))),0===_.avail_in&&0===_.avail_out&&(b=!0)}while((_.avail_in>0||0===_.avail_out)&&a!==s.Z_STREAM_END);return a===s.Z_STREAM_END&&(o=s.Z_FINISH),o===s.Z_FINISH?(a=i.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===s.Z_OK):o!==s.Z_SYNC_FLUSH||(this.onEnd(s.Z_OK),_.avail_out=0,!0)},f.prototype.onData=function(t){this.chunks.push(t)},f.prototype.onEnd=function(t){t===s.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=n.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Inflate=f,a.inflate=_,a.inflateRaw=function(t,e){return(e=e||{}).raw=!0,_(t,e)},a.ungzip=_},{\"./utils/common\":3,\"./utils/strings\":4,\"./zlib/constants\":6,\"./zlib/gzheader\":9,\"./zlib/inflate\":11,\"./zlib/messages\":13,\"./zlib/zstream\":15}],3:[function(t,e,a){\"use strict\";var i=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;function n(t,e){return Object.prototype.hasOwnProperty.call(t,e)}a.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var a=e.shift();if(a){if(\"object\"!=typeof a)throw new TypeError(a+\"must be non-object\");for(var i in a)n(a,i)&&(t[i]=a[i])}}return t},a.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var r={arraySet:function(t,e,a,i,n){if(e.subarray&&t.subarray)t.set(e.subarray(a,a+i),n);else for(var r=0;r<i;r++)t[n+r]=e[a+r]},flattenChunks:function(t){var e,a,i,n,r,s;for(i=0,e=0,a=t.length;e<a;e++)i+=t[e].length;for(s=new Uint8Array(i),n=0,e=0,a=t.length;e<a;e++)r=t[e],s.set(r,n),n+=r.length;return s}},s={arraySet:function(t,e,a,i,n){for(var r=0;r<i;r++)t[n+r]=e[a+r]},flattenChunks:function(t){return[].concat.apply([],t)}};a.setTyped=function(t){t?(a.Buf8=Uint8Array,a.Buf16=Uint16Array,a.Buf32=Int32Array,a.assign(a,r)):(a.Buf8=Array,a.Buf16=Array,a.Buf32=Array,a.assign(a,s))},a.setTyped(i)},{}],4:[function(t,e,a){\"use strict\";var i=t(\"./common\"),n=!0,r=!0;try{String.fromCharCode.apply(null,[0])}catch(t){n=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){r=!1}for(var s=new i.Buf8(256),o=0;o<256;o++)s[o]=o>=252?6:o>=248?5:o>=240?4:o>=224?3:o>=192?2:1;function l(t,e){if(e<65534&&(t.subarray&&r||!t.subarray&&n))return String.fromCharCode.apply(null,i.shrinkBuf(t,e));for(var a=\"\",s=0;s<e;s++)a+=String.fromCharCode(t[s]);return a}s[254]=s[254]=1,a.string2buf=function(t){var e,a,n,r,s,o=t.length,l=0;for(r=0;r<o;r++)55296==(64512&(a=t.charCodeAt(r)))&&r+1<o&&56320==(64512&(n=t.charCodeAt(r+1)))&&(a=65536+(a-55296<<10)+(n-56320),r++),l+=a<128?1:a<2048?2:a<65536?3:4;for(e=new i.Buf8(l),s=0,r=0;s<l;r++)55296==(64512&(a=t.charCodeAt(r)))&&r+1<o&&56320==(64512&(n=t.charCodeAt(r+1)))&&(a=65536+(a-55296<<10)+(n-56320),r++),a<128?e[s++]=a:a<2048?(e[s++]=192|a>>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},a.buf2binstring=function(t){return l(t,t.length)},a.binstring2buf=function(t){for(var e=new i.Buf8(t.length),a=0,n=e.length;a<n;a++)e[a]=t.charCodeAt(a);return e},a.buf2string=function(t,e){var a,i,n,r,o=e||t.length,h=new Array(2*o);for(i=0,a=0;a<o;)if((n=t[a++])<128)h[i++]=n;else if((r=s[n])>4)h[i++]=65533,a+=r-1;else{for(n&=2===r?31:3===r?15:7;r>1&&a<o;)n=n<<6|63&t[a++],r--;r>1?h[i++]=65533:n<65536?h[i++]=n:(n-=65536,h[i++]=55296|n>>10&1023,h[i++]=56320|1023&n)}return l(h,i)},a.utf8border=function(t,e){var a;for((e=e||t.length)>t.length&&(e=t.length),a=e-1;a>=0&&128==(192&t[a]);)a--;return a<0?e:0===a?e:a+s[t[a]]>e?a:e}},{\"./common\":3}],5:[function(t,e,a){\"use strict\";e.exports=function(t,e,a,i){for(var n=65535&t|0,r=t>>>16&65535|0,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{r=r+(n=n+e[i++]|0)|0}while(--s);n%=65521,r%=65521}return n|r<<16|0}},{}],6:[function(t,e,a){\"use strict\";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],7:[function(t,e,a){\"use strict\";var i=function(){for(var t,e=[],a=0;a<256;a++){t=a;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}();e.exports=function(t,e,a,n){var r=i,s=n+a;t^=-1;for(var o=n;o<s;o++)t=t>>>8^r[255&(t^e[o])];return-1^t}},{}],8:[function(t,e,a){\"use strict\";var i,n=t(\"../utils/common\"),r=t(\"./trees\"),s=t(\"./adler32\"),o=t(\"./crc32\"),l=t(\"./messages\"),h=0,d=1,f=3,_=4,u=5,c=0,b=1,g=-2,m=-3,w=-5,p=-1,v=1,k=2,y=3,x=4,z=0,B=2,S=8,E=9,A=15,Z=8,R=286,C=30,N=19,O=2*R+1,D=15,I=3,U=258,T=U+I+1,F=32,L=42,H=69,j=73,K=91,M=103,P=113,Y=666,q=1,G=2,X=3,W=4,J=3;function Q(t,e){return t.msg=l[e],e}function V(t){return(t<<1)-(t>4?9:0)}function $(t){for(var e=t.length;--e>=0;)t[e]=0}function tt(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(n.arraySet(t.output,e.pending_buf,e.pending_out,a,t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))}function et(t,e){r._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,tt(t.strm)}function at(t,e){t.pending_buf[t.pending++]=e}function it(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function nt(t,e){var a,i,n=t.max_chain_length,r=t.strstart,s=t.prev_length,o=t.nice_match,l=t.strstart>t.w_size-T?t.strstart-(t.w_size-T):0,h=t.window,d=t.w_mask,f=t.prev,_=t.strstart+U,u=h[r+s-1],c=h[r+s];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do{if(h[(a=e)+s]===c&&h[a+s-1]===u&&h[a]===h[r]&&h[++a]===h[r+1]){r+=2,a++;do{}while(h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&r<_);if(i=U-(_-r),r=_-U,i>s){if(t.match_start=e,s=i,i>=o)break;u=h[r+s-1],c=h[r+s]}}}while((e=f[e&d])>l&&0!=--n);return s<=t.lookahead?s:t.lookahead}function rt(t){var e,a,i,r,l,h,d,f,_,u,c=t.w_size;do{if(r=t.window_size-t.lookahead-t.strstart,t.strstart>=c+(c-T)){n.arraySet(t.window,t.window,c,c,0),t.match_start-=c,t.strstart-=c,t.block_start-=c,e=a=t.hash_size;do{i=t.head[--e],t.head[e]=i>=c?i-c:0}while(--a);e=a=c;do{i=t.prev[--e],t.prev[e]=i>=c?i-c:0}while(--a);r+=c}if(0===t.strm.avail_in)break;if(h=t.strm,d=t.window,f=t.strstart+t.lookahead,_=r,u=void 0,(u=h.avail_in)>_&&(u=_),a=0===u?0:(h.avail_in-=u,n.arraySet(d,h.input,h.next_in,u,f),1===h.state.wrap?h.adler=s(h.adler,d,u,f):2===h.state.wrap&&(h.adler=o(h.adler,d,u,f)),h.next_in+=u,h.total_in+=u,u),t.lookahead+=a,t.lookahead+t.insert>=I)for(l=t.strstart-t.insert,t.ins_h=t.window[l],t.ins_h=(t.ins_h<<t.hash_shift^t.window[l+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[l+I-1])&t.hash_mask,t.prev[l&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=l,l++,t.insert--,!(t.lookahead+t.insert<I)););}while(t.lookahead<T&&0!==t.strm.avail_in)}function st(t,e){for(var a,i;;){if(t.lookahead<T){if(rt(t),t.lookahead<T&&e===h)return q;if(0===t.lookahead)break}if(a=0,t.lookahead>=I&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+I-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-T&&(t.match_length=nt(t,a)),t.match_length>=I)if(i=r._tr_tally(t,t.strstart-t.match_start,t.match_length-I),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=I){t.match_length--;do{t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+I-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else i=r._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(et(t,!1),0===t.strm.avail_out))return q}return t.insert=t.strstart<I-1?t.strstart:I-1,e===_?(et(t,!0),0===t.strm.avail_out?X:W):t.last_lit&&(et(t,!1),0===t.strm.avail_out)?q:G}function ot(t,e){for(var a,i,n;;){if(t.lookahead<T){if(rt(t),t.lookahead<T&&e===h)return q;if(0===t.lookahead)break}if(a=0,t.lookahead>=I&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+I-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=I-1,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-T&&(t.match_length=nt(t,a),t.match_length<=5&&(t.strategy===v||t.match_length===I&&t.strstart-t.match_start>4096)&&(t.match_length=I-1)),t.prev_length>=I&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-I,i=r._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-I),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=n&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+I-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=I-1,t.strstart++,i&&(et(t,!1),0===t.strm.avail_out))return q}else if(t.match_available){if((i=r._tr_tally(t,0,t.window[t.strstart-1]))&&et(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return q}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=r._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<I-1?t.strstart:I-1,e===_?(et(t,!0),0===t.strm.avail_out?X:W):t.last_lit&&(et(t,!1),0===t.strm.avail_out)?q:G}function lt(t,e,a,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=i,this.func=n}function ht(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=S,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new n.Buf16(2*O),this.dyn_dtree=new n.Buf16(2*(2*C+1)),this.bl_tree=new n.Buf16(2*(2*N+1)),$(this.dyn_ltree),$(this.dyn_dtree),$(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new n.Buf16(D+1),this.heap=new n.Buf16(2*R+1),$(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new n.Buf16(2*R+1),$(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function dt(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=B,(e=t.state).pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?L:P,t.adler=2===e.wrap?0:1,e.last_flush=h,r._tr_init(e),c):Q(t,g)}function ft(t){var e,a=dt(t);return a===c&&((e=t.state).window_size=2*e.w_size,$(e.head),e.max_lazy_match=i[e.level].max_lazy,e.good_match=i[e.level].good_length,e.nice_match=i[e.level].nice_length,e.max_chain_length=i[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=I-1,e.match_available=0,e.ins_h=0),a}function _t(t,e,a,i,r,s){if(!t)return g;var o=1;if(e===p&&(e=6),i<0?(o=0,i=-i):i>15&&(o=2,i-=16),r<1||r>E||a!==S||i<8||i>15||e<0||e>9||s<0||s>x)return Q(t,g);8===i&&(i=9);var l=new ht;return t.state=l,l.strm=t,l.wrap=o,l.gzhead=null,l.w_bits=i,l.w_size=1<<l.w_bits,l.w_mask=l.w_size-1,l.hash_bits=r+7,l.hash_size=1<<l.hash_bits,l.hash_mask=l.hash_size-1,l.hash_shift=~~((l.hash_bits+I-1)/I),l.window=new n.Buf8(2*l.w_size),l.head=new n.Buf16(l.hash_size),l.prev=new n.Buf16(l.w_size),l.lit_bufsize=1<<r+6,l.pending_buf_size=4*l.lit_bufsize,l.pending_buf=new n.Buf8(l.pending_buf_size),l.d_buf=1*l.lit_bufsize,l.l_buf=3*l.lit_bufsize,l.level=e,l.strategy=s,l.method=a,ft(t)}i=[new lt(0,0,0,0,function(t,e){var a=65535;for(a>t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(rt(t),0===t.lookahead&&e===h)return q;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+a;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,et(t,!1),0===t.strm.avail_out))return q;if(t.strstart-t.block_start>=t.w_size-T&&(et(t,!1),0===t.strm.avail_out))return q}return t.insert=0,e===_?(et(t,!0),0===t.strm.avail_out?X:W):(t.strstart>t.block_start&&(et(t,!1),t.strm.avail_out),q)}),new lt(4,4,8,4,st),new lt(4,5,16,8,st),new lt(4,6,32,32,st),new lt(4,4,16,16,ot),new lt(8,16,32,32,ot),new lt(8,16,128,128,ot),new lt(8,32,128,256,ot),new lt(32,128,258,1024,ot),new lt(32,258,258,4096,ot)],a.deflateInit=function(t,e){return _t(t,e,S,A,Z,z)},a.deflateInit2=_t,a.deflateReset=ft,a.deflateResetKeep=dt,a.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?g:(t.state.gzhead=e,c):g},a.deflate=function(t,e){var a,n,s,l;if(!t||!t.state||e>u||e<0)return t?Q(t,g):g;if(n=t.state,!t.output||!t.input&&0!==t.avail_in||n.status===Y&&e!==_)return Q(t,0===t.avail_out?w:g);if(n.strm=t,a=n.last_flush,n.last_flush=e,n.status===L)if(2===n.wrap)t.adler=0,at(n,31),at(n,139),at(n,8),n.gzhead?(at(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),at(n,255&n.gzhead.time),at(n,n.gzhead.time>>8&255),at(n,n.gzhead.time>>16&255),at(n,n.gzhead.time>>24&255),at(n,9===n.level?2:n.strategy>=k||n.level<2?4:0),at(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(at(n,255&n.gzhead.extra.length),at(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(t.adler=o(t.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=H):(at(n,0),at(n,0),at(n,0),at(n,0),at(n,0),at(n,9===n.level?2:n.strategy>=k||n.level<2?4:0),at(n,J),n.status=P);else{var m=S+(n.w_bits-8<<4)<<8;m|=(n.strategy>=k||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(m|=F),m+=31-m%31,n.status=P,it(n,m),0!==n.strstart&&(it(n,t.adler>>>16),it(n,65535&t.adler)),t.adler=1}if(n.status===H)if(n.gzhead.extra){for(s=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>s&&(t.adler=o(t.adler,n.pending_buf,n.pending-s,s)),tt(t),s=n.pending,n.pending!==n.pending_buf_size));)at(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>s&&(t.adler=o(t.adler,n.pending_buf,n.pending-s,s)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=j)}else n.status=j;if(n.status===j)if(n.gzhead.name){s=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>s&&(t.adler=o(t.adler,n.pending_buf,n.pending-s,s)),tt(t),s=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,at(n,l)}while(0!==l);n.gzhead.hcrc&&n.pending>s&&(t.adler=o(t.adler,n.pending_buf,n.pending-s,s)),0===l&&(n.gzindex=0,n.status=K)}else n.status=K;if(n.status===K)if(n.gzhead.comment){s=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>s&&(t.adler=o(t.adler,n.pending_buf,n.pending-s,s)),tt(t),s=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,at(n,l)}while(0!==l);n.gzhead.hcrc&&n.pending>s&&(t.adler=o(t.adler,n.pending_buf,n.pending-s,s)),0===l&&(n.status=M)}else n.status=M;if(n.status===M&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&tt(t),n.pending+2<=n.pending_buf_size&&(at(n,255&t.adler),at(n,t.adler>>8&255),t.adler=0,n.status=P)):n.status=P),0!==n.pending){if(tt(t),0===t.avail_out)return n.last_flush=-1,c}else if(0===t.avail_in&&V(e)<=V(a)&&e!==_)return Q(t,w);if(n.status===Y&&0!==t.avail_in)return Q(t,w);if(0!==t.avail_in||0!==n.lookahead||e!==h&&n.status!==Y){var p=n.strategy===k?function(t,e){for(var a;;){if(0===t.lookahead&&(rt(t),0===t.lookahead)){if(e===h)return q;break}if(t.match_length=0,a=r._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(et(t,!1),0===t.strm.avail_out))return q}return t.insert=0,e===_?(et(t,!0),0===t.strm.avail_out?X:W):t.last_lit&&(et(t,!1),0===t.strm.avail_out)?q:G}(n,e):n.strategy===y?function(t,e){for(var a,i,n,s,o=t.window;;){if(t.lookahead<=U){if(rt(t),t.lookahead<=U&&e===h)return q;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=I&&t.strstart>0&&(i=o[n=t.strstart-1])===o[++n]&&i===o[++n]&&i===o[++n]){s=t.strstart+U;do{}while(i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&n<s);t.match_length=U-(s-n),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=I?(a=r._tr_tally(t,1,t.match_length-I),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=r._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(et(t,!1),0===t.strm.avail_out))return q}return t.insert=0,e===_?(et(t,!0),0===t.strm.avail_out?X:W):t.last_lit&&(et(t,!1),0===t.strm.avail_out)?q:G}(n,e):i[n.level].func(n,e);if(p!==X&&p!==W||(n.status=Y),p===q||p===X)return 0===t.avail_out&&(n.last_flush=-1),c;if(p===G&&(e===d?r._tr_align(n):e!==u&&(r._tr_stored_block(n,0,0,!1),e===f&&($(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),tt(t),0===t.avail_out))return n.last_flush=-1,c}return e!==_?c:n.wrap<=0?b:(2===n.wrap?(at(n,255&t.adler),at(n,t.adler>>8&255),at(n,t.adler>>16&255),at(n,t.adler>>24&255),at(n,255&t.total_in),at(n,t.total_in>>8&255),at(n,t.total_in>>16&255),at(n,t.total_in>>24&255)):(it(n,t.adler>>>16),it(n,65535&t.adler)),tt(t),n.wrap>0&&(n.wrap=-n.wrap),0!==n.pending?c:b)},a.deflateEnd=function(t){var e;return t&&t.state?(e=t.state.status)!==L&&e!==H&&e!==j&&e!==K&&e!==M&&e!==P&&e!==Y?Q(t,g):(t.state=null,e===P?Q(t,m):c):g},a.deflateSetDictionary=function(t,e){var a,i,r,o,l,h,d,f,_=e.length;if(!t||!t.state)return g;if(2===(o=(a=t.state).wrap)||1===o&&a.status!==L||a.lookahead)return g;for(1===o&&(t.adler=s(t.adler,e,_,0)),a.wrap=0,_>=a.w_size&&(0===o&&($(a.head),a.strstart=0,a.block_start=0,a.insert=0),f=new n.Buf8(a.w_size),n.arraySet(f,e,_-a.w_size,a.w_size,0),e=f,_=a.w_size),l=t.avail_in,h=t.next_in,d=t.input,t.avail_in=_,t.next_in=0,t.input=e,rt(a);a.lookahead>=I;){i=a.strstart,r=a.lookahead-(I-1);do{a.ins_h=(a.ins_h<<a.hash_shift^a.window[i+I-1])&a.hash_mask,a.prev[i&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=i,i++}while(--r);a.strstart=i,a.lookahead=I-1,rt(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=I-1,a.match_available=0,t.next_in=h,t.input=d,t.avail_in=l,a.wrap=o,c},a.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":3,\"./adler32\":5,\"./crc32\":7,\"./messages\":13,\"./trees\":14}],9:[function(t,e,a){\"use strict\";e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],10:[function(t,e,a){\"use strict\";e.exports=function(t,e){var a,i,n,r,s,o,l,h,d,f,_,u,c,b,g,m,w,p,v,k,y,x,z,B,S;a=t.state,i=t.next_in,B=t.input,n=i+(t.avail_in-5),r=t.next_out,S=t.output,s=r-(e-t.avail_out),o=r+(t.avail_out-257),l=a.dmax,h=a.wsize,d=a.whave,f=a.wnext,_=a.window,u=a.hold,c=a.bits,b=a.lencode,g=a.distcode,m=(1<<a.lenbits)-1,w=(1<<a.distbits)-1;t:do{c<15&&(u+=B[i++]<<c,c+=8,u+=B[i++]<<c,c+=8),p=b[u&m];e:for(;;){if(u>>>=v=p>>>24,c-=v,0===(v=p>>>16&255))S[r++]=65535&p;else{if(!(16&v)){if(0==(64&v)){p=b[(65535&p)+(u&(1<<v)-1)];continue e}if(32&v){a.mode=12;break t}t.msg=\"invalid literal/length code\",a.mode=30;break t}k=65535&p,(v&=15)&&(c<v&&(u+=B[i++]<<c,c+=8),k+=u&(1<<v)-1,u>>>=v,c-=v),c<15&&(u+=B[i++]<<c,c+=8,u+=B[i++]<<c,c+=8),p=g[u&w];a:for(;;){if(u>>>=v=p>>>24,c-=v,!(16&(v=p>>>16&255))){if(0==(64&v)){p=g[(65535&p)+(u&(1<<v)-1)];continue a}t.msg=\"invalid distance code\",a.mode=30;break t}if(y=65535&p,c<(v&=15)&&(u+=B[i++]<<c,(c+=8)<v&&(u+=B[i++]<<c,c+=8)),(y+=u&(1<<v)-1)>l){t.msg=\"invalid distance too far back\",a.mode=30;break t}if(u>>>=v,c-=v,y>(v=r-s)){if((v=y-v)>d&&a.sane){t.msg=\"invalid distance too far back\",a.mode=30;break t}if(x=0,z=_,0===f){if(x+=h-v,v<k){k-=v;do{S[r++]=_[x++]}while(--v);x=r-y,z=S}}else if(f<v){if(x+=h+f-v,(v-=f)<k){k-=v;do{S[r++]=_[x++]}while(--v);if(x=0,f<k){k-=v=f;do{S[r++]=_[x++]}while(--v);x=r-y,z=S}}}else if(x+=f-v,v<k){k-=v;do{S[r++]=_[x++]}while(--v);x=r-y,z=S}for(;k>2;)S[r++]=z[x++],S[r++]=z[x++],S[r++]=z[x++],k-=3;k&&(S[r++]=z[x++],k>1&&(S[r++]=z[x++]))}else{x=r-y;do{S[r++]=S[x++],S[r++]=S[x++],S[r++]=S[x++],k-=3}while(k>2);k&&(S[r++]=S[x++],k>1&&(S[r++]=S[x++]))}break}}break}}while(i<n&&r<o);i-=k=c>>3,u&=(1<<(c-=k<<3))-1,t.next_in=i,t.next_out=r,t.avail_in=i<n?n-i+5:5-(i-n),t.avail_out=r<o?o-r+257:257-(r-o),a.hold=u,a.bits=c}},{}],11:[function(t,e,a){\"use strict\";var i=t(\"../utils/common\"),n=t(\"./adler32\"),r=t(\"./crc32\"),s=t(\"./inffast\"),o=t(\"./inftrees\"),l=0,h=1,d=2,f=4,_=5,u=6,c=0,b=1,g=2,m=-2,w=-3,p=-4,v=-5,k=8,y=1,x=2,z=3,B=4,S=5,E=6,A=7,Z=8,R=9,C=10,N=11,O=12,D=13,I=14,U=15,T=16,F=17,L=18,H=19,j=20,K=21,M=22,P=23,Y=24,q=25,G=26,X=27,W=28,J=29,Q=30,V=31,$=32,tt=852,et=592,at=15;function it(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function nt(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function rt(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg=\"\",e.wrap&&(t.adler=1&e.wrap),e.mode=y,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new i.Buf32(tt),e.distcode=e.distdyn=new i.Buf32(et),e.sane=1,e.back=-1,c):m}function st(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,rt(t)):m}function ot(t,e){var a,i;return t&&t.state?(i=t.state,e<0?(a=0,e=-e):(a=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?m:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=a,i.wbits=e,st(t))):m}function lt(t,e){var a,i;return t?(i=new nt,t.state=i,i.window=null,(a=ot(t,e))!==c&&(t.state=null),a):m}var ht,dt,ft=!0;function _t(t){if(ft){var e;for(ht=new i.Buf32(512),dt=new i.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(o(h,t.lens,0,288,ht,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;o(d,t.lens,0,32,dt,0,t.work,{bits:5}),ft=!1}t.lencode=ht,t.lenbits=9,t.distcode=dt,t.distbits=5}function ut(t,e,a,n){var r,s=t.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new i.Buf8(s.wsize)),n>=s.wsize?(i.arraySet(s.window,e,a-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):((r=s.wsize-s.wnext)>n&&(r=n),i.arraySet(s.window,e,a-n,r,s.wnext),(n-=r)?(i.arraySet(s.window,e,a-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=r))),0}a.inflateReset=st,a.inflateReset2=ot,a.inflateResetKeep=rt,a.inflateInit=function(t){return lt(t,at)},a.inflateInit2=lt,a.inflate=function(t,e){var a,tt,et,at,nt,rt,st,ot,lt,ht,dt,ft,ct,bt,gt,mt,wt,pt,vt,kt,yt,xt,zt,Bt,St=0,Et=new i.Buf8(4),At=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return m;(a=t.state).mode===O&&(a.mode=D),nt=t.next_out,et=t.output,st=t.avail_out,at=t.next_in,tt=t.input,rt=t.avail_in,ot=a.hold,lt=a.bits,ht=rt,dt=st,xt=c;t:for(;;)switch(a.mode){case y:if(0===a.wrap){a.mode=D;break}for(;lt<16;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if(2&a.wrap&&35615===ot){a.check=0,Et[0]=255&ot,Et[1]=ot>>>8&255,a.check=r(a.check,Et,2,0),ot=0,lt=0,a.mode=x;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&ot)<<8)+(ot>>8))%31){t.msg=\"incorrect header check\",a.mode=Q;break}if((15&ot)!==k){t.msg=\"unknown compression method\",a.mode=Q;break}if(lt-=4,yt=8+(15&(ot>>>=4)),0===a.wbits)a.wbits=yt;else if(yt>a.wbits){t.msg=\"invalid window size\",a.mode=Q;break}a.dmax=1<<yt,t.adler=a.check=1,a.mode=512&ot?C:O,ot=0,lt=0;break;case x:for(;lt<16;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if(a.flags=ot,(255&a.flags)!==k){t.msg=\"unknown compression method\",a.mode=Q;break}if(57344&a.flags){t.msg=\"unknown header flags set\",a.mode=Q;break}a.head&&(a.head.text=ot>>8&1),512&a.flags&&(Et[0]=255&ot,Et[1]=ot>>>8&255,a.check=r(a.check,Et,2,0)),ot=0,lt=0,a.mode=z;case z:for(;lt<32;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}a.head&&(a.head.time=ot),512&a.flags&&(Et[0]=255&ot,Et[1]=ot>>>8&255,Et[2]=ot>>>16&255,Et[3]=ot>>>24&255,a.check=r(a.check,Et,4,0)),ot=0,lt=0,a.mode=B;case B:for(;lt<16;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}a.head&&(a.head.xflags=255&ot,a.head.os=ot>>8),512&a.flags&&(Et[0]=255&ot,Et[1]=ot>>>8&255,a.check=r(a.check,Et,2,0)),ot=0,lt=0,a.mode=S;case S:if(1024&a.flags){for(;lt<16;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}a.length=ot,a.head&&(a.head.extra_len=ot),512&a.flags&&(Et[0]=255&ot,Et[1]=ot>>>8&255,a.check=r(a.check,Et,2,0)),ot=0,lt=0}else a.head&&(a.head.extra=null);a.mode=E;case E:if(1024&a.flags&&((ft=a.length)>rt&&(ft=rt),ft&&(a.head&&(yt=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),i.arraySet(a.head.extra,tt,at,ft,yt)),512&a.flags&&(a.check=r(a.check,tt,ft,at)),rt-=ft,at+=ft,a.length-=ft),a.length))break t;a.length=0,a.mode=A;case A:if(2048&a.flags){if(0===rt)break t;ft=0;do{yt=tt[at+ft++],a.head&&yt&&a.length<65536&&(a.head.name+=String.fromCharCode(yt))}while(yt&&ft<rt);if(512&a.flags&&(a.check=r(a.check,tt,ft,at)),rt-=ft,at+=ft,yt)break t}else a.head&&(a.head.name=null);a.length=0,a.mode=Z;case Z:if(4096&a.flags){if(0===rt)break t;ft=0;do{yt=tt[at+ft++],a.head&&yt&&a.length<65536&&(a.head.comment+=String.fromCharCode(yt))}while(yt&&ft<rt);if(512&a.flags&&(a.check=r(a.check,tt,ft,at)),rt-=ft,at+=ft,yt)break t}else a.head&&(a.head.comment=null);a.mode=R;case R:if(512&a.flags){for(;lt<16;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if(ot!==(65535&a.check)){t.msg=\"header crc mismatch\",a.mode=Q;break}ot=0,lt=0}a.head&&(a.head.hcrc=a.flags>>9&1,a.head.done=!0),t.adler=a.check=0,a.mode=O;break;case C:for(;lt<32;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}t.adler=a.check=it(ot),ot=0,lt=0,a.mode=N;case N:if(0===a.havedict)return t.next_out=nt,t.avail_out=st,t.next_in=at,t.avail_in=rt,a.hold=ot,a.bits=lt,g;t.adler=a.check=1,a.mode=O;case O:if(e===_||e===u)break t;case D:if(a.last){ot>>>=7&lt,lt-=7&lt,a.mode=X;break}for(;lt<3;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}switch(a.last=1&ot,lt-=1,3&(ot>>>=1)){case 0:a.mode=I;break;case 1:if(_t(a),a.mode=j,e===u){ot>>>=2,lt-=2;break t}break;case 2:a.mode=F;break;case 3:t.msg=\"invalid block type\",a.mode=Q}ot>>>=2,lt-=2;break;case I:for(ot>>>=7&lt,lt-=7&lt;lt<32;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if((65535&ot)!=(ot>>>16^65535)){t.msg=\"invalid stored block lengths\",a.mode=Q;break}if(a.length=65535&ot,ot=0,lt=0,a.mode=U,e===u)break t;case U:a.mode=T;case T:if(ft=a.length){if(ft>rt&&(ft=rt),ft>st&&(ft=st),0===ft)break t;i.arraySet(et,tt,at,ft,nt),rt-=ft,at+=ft,st-=ft,nt+=ft,a.length-=ft;break}a.mode=O;break;case F:for(;lt<14;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if(a.nlen=257+(31&ot),ot>>>=5,lt-=5,a.ndist=1+(31&ot),ot>>>=5,lt-=5,a.ncode=4+(15&ot),ot>>>=4,lt-=4,a.nlen>286||a.ndist>30){t.msg=\"too many length or distance symbols\",a.mode=Q;break}a.have=0,a.mode=L;case L:for(;a.have<a.ncode;){for(;lt<3;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}a.lens[At[a.have++]]=7&ot,ot>>>=3,lt-=3}for(;a.have<19;)a.lens[At[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,zt={bits:a.lenbits},xt=o(l,a.lens,0,19,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg=\"invalid code lengths set\",a.mode=Q;break}a.have=0,a.mode=H;case H:for(;a.have<a.nlen+a.ndist;){for(;mt=(St=a.lencode[ot&(1<<a.lenbits)-1])>>>16&255,wt=65535&St,!((gt=St>>>24)<=lt);){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if(wt<16)ot>>>=gt,lt-=gt,a.lens[a.have++]=wt;else{if(16===wt){for(Bt=gt+2;lt<Bt;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if(ot>>>=gt,lt-=gt,0===a.have){t.msg=\"invalid bit length repeat\",a.mode=Q;break}yt=a.lens[a.have-1],ft=3+(3&ot),ot>>>=2,lt-=2}else if(17===wt){for(Bt=gt+3;lt<Bt;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}lt-=gt,yt=0,ft=3+(7&(ot>>>=gt)),ot>>>=3,lt-=3}else{for(Bt=gt+7;lt<Bt;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}lt-=gt,yt=0,ft=11+(127&(ot>>>=gt)),ot>>>=7,lt-=7}if(a.have+ft>a.nlen+a.ndist){t.msg=\"invalid bit length repeat\",a.mode=Q;break}for(;ft--;)a.lens[a.have++]=yt}}if(a.mode===Q)break;if(0===a.lens[256]){t.msg=\"invalid code -- missing end-of-block\",a.mode=Q;break}if(a.lenbits=9,zt={bits:a.lenbits},xt=o(h,a.lens,0,a.nlen,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg=\"invalid literal/lengths set\",a.mode=Q;break}if(a.distbits=6,a.distcode=a.distdyn,zt={bits:a.distbits},xt=o(d,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,zt),a.distbits=zt.bits,xt){t.msg=\"invalid distances set\",a.mode=Q;break}if(a.mode=j,e===u)break t;case j:a.mode=K;case K:if(rt>=6&&st>=258){t.next_out=nt,t.avail_out=st,t.next_in=at,t.avail_in=rt,a.hold=ot,a.bits=lt,s(t,dt),nt=t.next_out,et=t.output,st=t.avail_out,at=t.next_in,tt=t.input,rt=t.avail_in,ot=a.hold,lt=a.bits,a.mode===O&&(a.back=-1);break}for(a.back=0;mt=(St=a.lencode[ot&(1<<a.lenbits)-1])>>>16&255,wt=65535&St,!((gt=St>>>24)<=lt);){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if(mt&&0==(240&mt)){for(pt=gt,vt=mt,kt=wt;mt=(St=a.lencode[kt+((ot&(1<<pt+vt)-1)>>pt)])>>>16&255,wt=65535&St,!(pt+(gt=St>>>24)<=lt);){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}ot>>>=pt,lt-=pt,a.back+=pt}if(ot>>>=gt,lt-=gt,a.back+=gt,a.length=wt,0===mt){a.mode=G;break}if(32&mt){a.back=-1,a.mode=O;break}if(64&mt){t.msg=\"invalid literal/length code\",a.mode=Q;break}a.extra=15&mt,a.mode=M;case M:if(a.extra){for(Bt=a.extra;lt<Bt;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}a.length+=ot&(1<<a.extra)-1,ot>>>=a.extra,lt-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=P;case P:for(;mt=(St=a.distcode[ot&(1<<a.distbits)-1])>>>16&255,wt=65535&St,!((gt=St>>>24)<=lt);){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if(0==(240&mt)){for(pt=gt,vt=mt,kt=wt;mt=(St=a.distcode[kt+((ot&(1<<pt+vt)-1)>>pt)])>>>16&255,wt=65535&St,!(pt+(gt=St>>>24)<=lt);){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}ot>>>=pt,lt-=pt,a.back+=pt}if(ot>>>=gt,lt-=gt,a.back+=gt,64&mt){t.msg=\"invalid distance code\",a.mode=Q;break}a.offset=wt,a.extra=15&mt,a.mode=Y;case Y:if(a.extra){for(Bt=a.extra;lt<Bt;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}a.offset+=ot&(1<<a.extra)-1,ot>>>=a.extra,lt-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){t.msg=\"invalid distance too far back\",a.mode=Q;break}a.mode=q;case q:if(0===st)break t;if(ft=dt-st,a.offset>ft){if((ft=a.offset-ft)>a.whave&&a.sane){t.msg=\"invalid distance too far back\",a.mode=Q;break}ft>a.wnext?(ft-=a.wnext,ct=a.wsize-ft):ct=a.wnext-ft,ft>a.length&&(ft=a.length),bt=a.window}else bt=et,ct=nt-a.offset,ft=a.length;ft>st&&(ft=st),st-=ft,a.length-=ft;do{et[nt++]=bt[ct++]}while(--ft);0===a.length&&(a.mode=K);break;case G:if(0===st)break t;et[nt++]=a.length,st--,a.mode=K;break;case X:if(a.wrap){for(;lt<32;){if(0===rt)break t;rt--,ot|=tt[at++]<<lt,lt+=8}if(dt-=st,t.total_out+=dt,a.total+=dt,dt&&(t.adler=a.check=a.flags?r(a.check,et,dt,nt-dt):n(a.check,et,dt,nt-dt)),dt=st,(a.flags?ot:it(ot))!==a.check){t.msg=\"incorrect data check\",a.mode=Q;break}ot=0,lt=0}a.mode=W;case W:if(a.wrap&&a.flags){for(;lt<32;){if(0===rt)break t;rt--,ot+=tt[at++]<<lt,lt+=8}if(ot!==(4294967295&a.total)){t.msg=\"incorrect length check\",a.mode=Q;break}ot=0,lt=0}a.mode=J;case J:xt=b;break t;case Q:xt=w;break t;case V:return p;case $:default:return m}return t.next_out=nt,t.avail_out=st,t.next_in=at,t.avail_in=rt,a.hold=ot,a.bits=lt,(a.wsize||dt!==t.avail_out&&a.mode<Q&&(a.mode<X||e!==f))&&ut(t,t.output,t.next_out,dt-t.avail_out)?(a.mode=V,p):(ht-=t.avail_in,dt-=t.avail_out,t.total_in+=ht,t.total_out+=dt,a.total+=dt,a.wrap&&dt&&(t.adler=a.check=a.flags?r(a.check,et,dt,t.next_out-dt):n(a.check,et,dt,t.next_out-dt)),t.data_type=a.bits+(a.last?64:0)+(a.mode===O?128:0)+(a.mode===j||a.mode===U?256:0),(0===ht&&0===dt||e===f)&&xt===c&&(xt=v),xt)},a.inflateEnd=function(t){if(!t||!t.state)return m;var e=t.state;return e.window&&(e.window=null),t.state=null,c},a.inflateGetHeader=function(t,e){var a;return t&&t.state?0==(2&(a=t.state).wrap)?m:(a.head=e,e.done=!1,c):m},a.inflateSetDictionary=function(t,e){var a,i=e.length;return t&&t.state?0!==(a=t.state).wrap&&a.mode!==N?m:a.mode===N&&n(1,e,i,0)!==a.check?w:ut(t,e,i,i)?(a.mode=V,p):(a.havedict=1,c):m},a.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":3,\"./adler32\":5,\"./crc32\":7,\"./inffast\":10,\"./inftrees\":12}],12:[function(t,e,a){\"use strict\";var i=t(\"../utils/common\"),n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],r=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],o=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(t,e,a,l,h,d,f,_){var u,c,b,g,m,w,p,v,k,y=_.bits,x=0,z=0,B=0,S=0,E=0,A=0,Z=0,R=0,C=0,N=0,O=null,D=0,I=new i.Buf16(16),U=new i.Buf16(16),T=null,F=0;for(x=0;x<=15;x++)I[x]=0;for(z=0;z<l;z++)I[e[a+z]]++;for(E=y,S=15;S>=1&&0===I[S];S--);if(E>S&&(E=S),0===S)return h[d++]=20971520,h[d++]=20971520,_.bits=1,0;for(B=1;B<S&&0===I[B];B++);for(E<B&&(E=B),R=1,x=1;x<=15;x++)if(R<<=1,(R-=I[x])<0)return-1;if(R>0&&(0===t||1!==S))return-1;for(U[1]=0,x=1;x<15;x++)U[x+1]=U[x]+I[x];for(z=0;z<l;z++)0!==e[a+z]&&(f[U[e[a+z]]++]=z);if(0===t?(O=T=f,w=19):1===t?(O=n,D-=257,T=r,F-=257,w=256):(O=s,T=o,w=-1),N=0,z=0,x=B,m=d,A=E,Z=0,b=-1,g=(C=1<<E)-1,1===t&&C>852||2===t&&C>592)return 1;for(;;){p=x-Z,f[z]<w?(v=0,k=f[z]):f[z]>w?(v=T[F+f[z]],k=O[D+f[z]]):(v=96,k=0),u=1<<x-Z,B=c=1<<A;do{h[m+(N>>Z)+(c-=u)]=p<<24|v<<16|k|0}while(0!==c);for(u=1<<x-1;N&u;)u>>=1;if(0!==u?(N&=u-1,N+=u):N=0,z++,0==--I[x]){if(x===S)break;x=e[a+f[z]]}if(x>E&&(N&g)!==b){for(0===Z&&(Z=E),m+=B,R=1<<(A=x-Z);A+Z<S&&!((R-=I[A+Z])<=0);)A++,R<<=1;if(C+=1<<A,1===t&&C>852||2===t&&C>592)return 1;h[b=N&g]=E<<24|A<<16|m-d|0}}return 0!==N&&(h[m+N]=x-Z<<24|64<<16|0),_.bits=E,0}},{\"../utils/common\":3}],13:[function(t,e,a){\"use strict\";e.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],14:[function(t,e,a){\"use strict\";var i=t(\"../utils/common\"),n=4,r=0,s=1,o=2;function l(t){for(var e=t.length;--e>=0;)t[e]=0}var h=0,d=1,f=2,_=29,u=256,c=u+1+_,b=30,g=19,m=2*c+1,w=15,p=16,v=7,k=256,y=16,x=17,z=18,B=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],S=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],E=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Z=new Array(2*(c+2));l(Z);var R=new Array(2*b);l(R);var C=new Array(512);l(C);var N=new Array(256);l(N);var O=new Array(_);l(O);var D,I,U,T=new Array(b);function F(t,e,a,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}function L(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function H(t){return t<256?C[t]:C[256+(t>>>7)]}function j(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function K(t,e,a){t.bi_valid>p-a?(t.bi_buf|=e<<t.bi_valid&65535,j(t,t.bi_buf),t.bi_buf=e>>p-t.bi_valid,t.bi_valid+=a-p):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)}function M(t,e,a){K(t,a[2*e],a[2*e+1])}function P(t,e){var a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1}function Y(t,e,a){var i,n,r=new Array(w+1),s=0;for(i=1;i<=w;i++)r[i]=s=s+a[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=P(r[o]++,o))}}function q(t){var e;for(e=0;e<c;e++)t.dyn_ltree[2*e]=0;for(e=0;e<b;e++)t.dyn_dtree[2*e]=0;for(e=0;e<g;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*k]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function G(t){t.bi_valid>8?j(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function X(t,e,a,i){var n=2*e,r=2*a;return t[n]<t[r]||t[n]===t[r]&&i[e]<=i[a]}function W(t,e,a){for(var i=t.heap[a],n=a<<1;n<=t.heap_len&&(n<t.heap_len&&X(e,t.heap[n+1],t.heap[n],t.depth)&&n++,!X(e,i,t.heap[n],t.depth));)t.heap[a]=t.heap[n],a=n,n<<=1;t.heap[a]=i}function J(t,e,a){var i,n,r,s,o=0;if(0!==t.last_lit)do{i=t.pending_buf[t.d_buf+2*o]<<8|t.pending_buf[t.d_buf+2*o+1],n=t.pending_buf[t.l_buf+o],o++,0===i?M(t,n,e):(M(t,(r=N[n])+u+1,e),0!==(s=B[r])&&K(t,n-=O[r],s),M(t,r=H(--i),a),0!==(s=S[r])&&K(t,i-=T[r],s))}while(o<t.last_lit);M(t,k,e)}function Q(t,e){var a,i,n,r=e.dyn_tree,s=e.stat_desc.static_tree,o=e.stat_desc.has_stree,l=e.stat_desc.elems,h=-1;for(t.heap_len=0,t.heap_max=m,a=0;a<l;a++)0!==r[2*a]?(t.heap[++t.heap_len]=h=a,t.depth[a]=0):r[2*a+1]=0;for(;t.heap_len<2;)r[2*(n=t.heap[++t.heap_len]=h<2?++h:0)]=1,t.depth[n]=0,t.opt_len--,o&&(t.static_len-=s[2*n+1]);for(e.max_code=h,a=t.heap_len>>1;a>=1;a--)W(t,r,a);n=l;do{a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],W(t,r,1),i=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=i,r[2*n]=r[2*a]+r[2*i],t.depth[n]=(t.depth[a]>=t.depth[i]?t.depth[a]:t.depth[i])+1,r[2*a+1]=r[2*i+1]=n,t.heap[1]=n++,W(t,r,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],function(t,e){var a,i,n,r,s,o,l=e.dyn_tree,h=e.max_code,d=e.stat_desc.static_tree,f=e.stat_desc.has_stree,_=e.stat_desc.extra_bits,u=e.stat_desc.extra_base,c=e.stat_desc.max_length,b=0;for(r=0;r<=w;r++)t.bl_count[r]=0;for(l[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;a<m;a++)(r=l[2*l[2*(i=t.heap[a])+1]+1]+1)>c&&(r=c,b++),l[2*i+1]=r,i>h||(t.bl_count[r]++,s=0,i>=u&&(s=_[i-u]),o=l[2*i],t.opt_len+=o*(r+s),f&&(t.static_len+=o*(d[2*i+1]+s)));if(0!==b){do{for(r=c-1;0===t.bl_count[r];)r--;t.bl_count[r]--,t.bl_count[r+1]+=2,t.bl_count[c]--,b-=2}while(b>0);for(r=c;0!==r;r--)for(i=t.bl_count[r];0!==i;)(n=t.heap[--a])>h||(l[2*n+1]!==r&&(t.opt_len+=(r-l[2*n+1])*l[2*n],l[2*n+1]=r),i--)}}(t,e),Y(r,h,t.bl_count)}function V(t,e,a){var i,n,r=-1,s=e[1],o=0,l=7,h=4;for(0===s&&(l=138,h=3),e[2*(a+1)+1]=65535,i=0;i<=a;i++)n=s,s=e[2*(i+1)+1],++o<l&&n===s||(o<h?t.bl_tree[2*n]+=o:0!==n?(n!==r&&t.bl_tree[2*n]++,t.bl_tree[2*y]++):o<=10?t.bl_tree[2*x]++:t.bl_tree[2*z]++,o=0,r=n,0===s?(l=138,h=3):n===s?(l=6,h=3):(l=7,h=4))}function $(t,e,a){var i,n,r=-1,s=e[1],o=0,l=7,h=4;for(0===s&&(l=138,h=3),i=0;i<=a;i++)if(n=s,s=e[2*(i+1)+1],!(++o<l&&n===s)){if(o<h)do{M(t,n,t.bl_tree)}while(0!=--o);else 0!==n?(n!==r&&(M(t,n,t.bl_tree),o--),M(t,y,t.bl_tree),K(t,o-3,2)):o<=10?(M(t,x,t.bl_tree),K(t,o-3,3)):(M(t,z,t.bl_tree),K(t,o-11,7));o=0,r=n,0===s?(l=138,h=3):n===s?(l=6,h=3):(l=7,h=4)}}l(T);var tt=!1;function et(t,e,a,n){K(t,(h<<1)+(n?1:0),3),function(t,e,a,n){G(t),n&&(j(t,a),j(t,~a)),i.arraySet(t.pending_buf,t.window,e,a,t.pending),t.pending+=a}(t,e,a,!0)}a._tr_init=function(t){tt||(function(){var t,e,a,i,n,r=new Array(w+1);for(a=0,i=0;i<_-1;i++)for(O[i]=a,t=0;t<1<<B[i];t++)N[a++]=i;for(N[a-1]=i,n=0,i=0;i<16;i++)for(T[i]=n,t=0;t<1<<S[i];t++)C[n++]=i;for(n>>=7;i<b;i++)for(T[i]=n<<7,t=0;t<1<<S[i]-7;t++)C[256+n++]=i;for(e=0;e<=w;e++)r[e]=0;for(t=0;t<=143;)Z[2*t+1]=8,t++,r[8]++;for(;t<=255;)Z[2*t+1]=9,t++,r[9]++;for(;t<=279;)Z[2*t+1]=7,t++,r[7]++;for(;t<=287;)Z[2*t+1]=8,t++,r[8]++;for(Y(Z,c+1,r),t=0;t<b;t++)R[2*t+1]=5,R[2*t]=P(t,5);D=new F(Z,B,u+1,c,w),I=new F(R,S,0,b,w),U=new F(new Array(0),E,0,g,v)}(),tt=!0),t.l_desc=new L(t.dyn_ltree,D),t.d_desc=new L(t.dyn_dtree,I),t.bl_desc=new L(t.bl_tree,U),t.bi_buf=0,t.bi_valid=0,q(t)},a._tr_stored_block=et,a._tr_flush_block=function(t,e,a,i){var l,h,_=0;t.level>0?(t.strm.data_type===o&&(t.strm.data_type=function(t){var e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return r;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return s;for(e=32;e<u;e++)if(0!==t.dyn_ltree[2*e])return s;return r}(t)),Q(t,t.l_desc),Q(t,t.d_desc),_=function(t){var e;for(V(t,t.dyn_ltree,t.l_desc.max_code),V(t,t.dyn_dtree,t.d_desc.max_code),Q(t,t.bl_desc),e=g-1;e>=3&&0===t.bl_tree[2*A[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),l=t.opt_len+3+7>>>3,(h=t.static_len+3+7>>>3)<=l&&(l=h)):l=h=a+5,a+4<=l&&-1!==e?et(t,e,a,i):t.strategy===n||h===l?(K(t,(d<<1)+(i?1:0),3),J(t,Z,R)):(K(t,(f<<1)+(i?1:0),3),function(t,e,a,i){var n;for(K(t,e-257,5),K(t,a-1,5),K(t,i-4,4),n=0;n<i;n++)K(t,t.bl_tree[2*A[n]+1],3);$(t,t.dyn_ltree,e-1),$(t,t.dyn_dtree,a-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,_+1),J(t,t.dyn_ltree,t.dyn_dtree)),q(t),i&&G(t)},a._tr_tally=function(t,e,a){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(N[a]+u+1)]++,t.dyn_dtree[2*H(e)]++),t.last_lit===t.lit_bufsize-1},a._tr_align=function(t){K(t,d<<1,3),M(t,k,Z),function(t){16===t.bi_valid?(j(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{\"../utils/common\":3}],15:[function(t,e,a){\"use strict\";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],\"/\":[function(t,e,a){\"use strict\";var i={};(0,t(\"./lib/utils/common\").assign)(i,t(\"./lib/deflate\"),t(\"./lib/inflate\"),t(\"./lib/zlib/constants\")),e.exports=i},{\"./lib/deflate\":1,\"./lib/inflate\":2,\"./lib/utils/common\":3,\"./lib/zlib/constants\":6}]},{},[])(\"/\")});\n</script>\n<script>\n    !function(){var e={};\"object\"==typeof module?module.exports=e:window.UPNG=e,function(e,r){e.toRGBA8=function(r){var t=r.width,n=r.height;if(null==r.tabs.acTL)return[e.toRGBA8.decodeImage(r.data,t,n,r).buffer];var i=[];null==r.frames[0].data&&(r.frames[0].data=r.data);for(var a,f=new Uint8Array(t*n*4),o=0;o<r.frames.length;o++){var s=r.frames[o],l=s.rect.x,c=s.rect.y,u=s.rect.width,d=s.rect.height,h=e.toRGBA8.decodeImage(s.data,u,d,r);if(0==o?a=h:0==s.blend?e._copyTile(h,u,d,a,t,n,l,c,0):1==s.blend&&e._copyTile(h,u,d,a,t,n,l,c,1),i.push(a.buffer),a=a.slice(0),0==s.dispose);else if(1==s.dispose)e._copyTile(f,u,d,a,t,n,l,c,0);else if(2==s.dispose){for(var v=o-1;2==r.frames[v].dispose;)v--;a=new Uint8Array(i[v]).slice(0)}}return i},e.toRGBA8.decodeImage=function(r,t,n,i){var a=t*n,f=e.decode._getBPP(i),o=Math.ceil(t*f/8),s=new Uint8Array(4*a),l=new Uint32Array(s.buffer),c=i.ctype,u=i.depth,d=e._bin.readUshort;if(6==c){var h=a<<2;if(8==u)for(var v=0;v<h;v++)s[v]=r[v];if(16==u)for(v=0;v<h;v++)s[v]=r[v<<1]}else if(2==c){var p=i.tabs.tRNS,b=-1,g=-1,m=-1;if(p&&(b=p[0],g=p[1],m=p[2]),8==u)for(v=0;v<a;v++){var y=3*v;s[M=v<<2]=r[y],s[M+1]=r[y+1],s[M+2]=r[y+2],s[M+3]=255,-1!=b&&r[y]==b&&r[y+1]==g&&r[y+2]==m&&(s[M+3]=0)}if(16==u)for(v=0;v<a;v++){y=6*v;s[M=v<<2]=r[y],s[M+1]=r[y+2],s[M+2]=r[y+4],s[M+3]=255,-1!=b&&d(r,y)==b&&d(r,y+2)==g&&d(r,y+4)==m&&(s[M+3]=0)}}else if(3==c){var w=i.tabs.PLTE,A=i.tabs.tRNS,U=A?A.length:0;if(1==u)for(var _=0;_<n;_++){var q=_*o,I=_*t;for(v=0;v<t;v++){var M=I+v<<2,T=3*(z=r[q+(v>>3)]>>7-((7&v)<<0)&1);s[M]=w[T],s[M+1]=w[T+1],s[M+2]=w[T+2],s[M+3]=z<U?A[z]:255}}if(2==u)for(_=0;_<n;_++)for(q=_*o,I=_*t,v=0;v<t;v++){M=I+v<<2,T=3*(z=r[q+(v>>2)]>>6-((3&v)<<1)&3);s[M]=w[T],s[M+1]=w[T+1],s[M+2]=w[T+2],s[M+3]=z<U?A[z]:255}if(4==u)for(_=0;_<n;_++)for(q=_*o,I=_*t,v=0;v<t;v++){M=I+v<<2,T=3*(z=r[q+(v>>1)]>>4-((1&v)<<2)&15);s[M]=w[T],s[M+1]=w[T+1],s[M+2]=w[T+2],s[M+3]=z<U?A[z]:255}if(8==u)for(v=0;v<a;v++){var z;M=v<<2,T=3*(z=r[v]);s[M]=w[T],s[M+1]=w[T+1],s[M+2]=w[T+2],s[M+3]=z<U?A[z]:255}}else if(4==c){if(8==u)for(v=0;v<a;v++){M=v<<2;var R=r[N=v<<1];s[M]=R,s[M+1]=R,s[M+2]=R,s[M+3]=r[N+1]}if(16==u)for(v=0;v<a;v++){var N;M=v<<2,R=r[N=v<<2];s[M]=R,s[M+1]=R,s[M+2]=R,s[M+3]=r[N+2]}}else if(0==c){b=i.tabs.tRNS?i.tabs.tRNS:-1;if(1==u)for(v=0;v<a;v++){var L=(R=255*(r[v>>3]>>7-(7&v)&1))==255*b?0:255;l[v]=L<<24|R<<16|R<<8|R}if(2==u)for(v=0;v<a;v++){L=(R=85*(r[v>>2]>>6-((3&v)<<1)&3))==85*b?0:255;l[v]=L<<24|R<<16|R<<8|R}if(4==u)for(v=0;v<a;v++){L=(R=17*(r[v>>1]>>4-((1&v)<<2)&15))==17*b?0:255;l[v]=L<<24|R<<16|R<<8|R}if(8==u)for(v=0;v<a;v++){L=(R=r[v])==b?0:255;l[v]=L<<24|R<<16|R<<8|R}if(16==u)for(v=0;v<a;v++){R=r[v<<1],L=d(r,v<<1)==b?0:255;l[v]=L<<24|R<<16|R<<8|R}}return s},e.decode=function(r){for(var t,n=new Uint8Array(r),i=8,a=e._bin,f=a.readUshort,o=a.readUint,s={tabs:{},frames:[]},l=new Uint8Array(n.length),c=0,u=0,d=[137,80,78,71,13,10,26,10],h=0;h<8;h++)if(n[h]!=d[h])throw\"The input is not a PNG file!\";for(;i<n.length;){var v=a.readUint(n,i);i+=4;var p=a.readASCII(n,i,4);if(i+=4,\"IHDR\"==p)e.decode._IHDR(n,i,s);else if(\"IDAT\"==p){for(h=0;h<v;h++)l[c+h]=n[i+h];c+=v}else if(\"acTL\"==p)s.tabs[p]={num_frames:o(n,i),num_plays:o(n,i+4)},t=new Uint8Array(n.length);else if(\"fcTL\"==p){var b;if(0!=u)(b=s.frames[s.frames.length-1]).data=e.decode._decompress(s,t.slice(0,u),b.rect.width,b.rect.height),u=0;var g={x:o(n,i+12),y:o(n,i+16),width:o(n,i+4),height:o(n,i+8)},m=f(n,i+22);m=f(n,i+20)/(0==m?100:m);var y={rect:g,delay:Math.round(1e3*m),dispose:n[i+24],blend:n[i+25]};s.frames.push(y)}else if(\"fdAT\"==p){for(h=0;h<v-4;h++)t[u+h]=n[i+h+4];u+=v-4}else if(\"pHYs\"==p)s.tabs[p]=[a.readUint(n,i),a.readUint(n,i+4),n[i+8]];else if(\"cHRM\"==p){s.tabs[p]=[];for(h=0;h<8;h++)s.tabs[p].push(a.readUint(n,i+4*h))}else if(\"tEXt\"==p){null==s.tabs[p]&&(s.tabs[p]={});var w=a.nextZero(n,i),A=a.readASCII(n,i,w-i),U=a.readASCII(n,w+1,i+v-w-1);s.tabs[p][A]=U}else if(\"iTXt\"==p){null==s.tabs[p]&&(s.tabs[p]={});w=0;var _=i;w=a.nextZero(n,_);A=a.readASCII(n,_,w-_),n[_=w+1],n[_+1];_+=2,w=a.nextZero(n,_);a.readASCII(n,_,w-_);_=w+1,w=a.nextZero(n,_);a.readUTF8(n,_,w-_);_=w+1;U=a.readUTF8(n,_,v-(_-i));s.tabs[p][A]=U}else if(\"PLTE\"==p)s.tabs[p]=a.readBytes(n,i,v);else if(\"hIST\"==p){var q=s.tabs.PLTE.length/3;s.tabs[p]=[];for(h=0;h<q;h++)s.tabs[p].push(f(n,i+2*h))}else if(\"tRNS\"==p)3==s.ctype?s.tabs[p]=a.readBytes(n,i,v):0==s.ctype?s.tabs[p]=f(n,i):2==s.ctype&&(s.tabs[p]=[f(n,i),f(n,i+2),f(n,i+4)]);else if(\"gAMA\"==p)s.tabs[p]=a.readUint(n,i)/1e5;else if(\"sRGB\"==p)s.tabs[p]=n[i];else if(\"bKGD\"==p)0==s.ctype||4==s.ctype?s.tabs[p]=[f(n,i)]:2==s.ctype||6==s.ctype?s.tabs[p]=[f(n,i),f(n,i+2),f(n,i+4)]:3==s.ctype&&(s.tabs[p]=n[i]);else if(\"IEND\"==p)break;i+=v;a.readUint(n,i);i+=4}0!=u&&((b=s.frames[s.frames.length-1]).data=e.decode._decompress(s,t.slice(0,u),b.rect.width,b.rect.height),u=0);return s.data=e.decode._decompress(s,l,s.width,s.height),delete s.compress,delete s.interlace,delete s.filter,s},e.decode._decompress=function(r,t,n,i){return 0==r.compress&&(t=e.decode._inflate(t)),0==r.interlace?t=e.decode._filterZero(t,r,0,n,i):1==r.interlace&&(t=e.decode._readInterlace(t,r)),t},e.decode._inflate=function(e){return r.inflate(e)},e.decode._readInterlace=function(r,t){for(var n=t.width,i=t.height,a=e.decode._getBPP(t),f=a>>3,o=Math.ceil(n*a/8),s=new Uint8Array(i*o),l=0,c=[0,0,4,0,2,0,1],u=[0,4,0,2,0,1,0],d=[8,8,8,4,4,2,2],h=[8,8,4,4,2,2,1],v=0;v<7;){for(var p=d[v],b=h[v],g=0,m=0,y=c[v];y<i;)y+=p,m++;for(var w=u[v];w<n;)w+=b,g++;var A=Math.ceil(g*a/8);e.decode._filterZero(r,t,l,g,m);for(var U=0,_=c[v];_<i;){for(var q=u[v],I=l+U*A<<3;q<n;){var M;if(1==a)M=(M=r[I>>3])>>7-(7&I)&1,s[_*o+(q>>3)]|=M<<7-((3&q)<<0);if(2==a)M=(M=r[I>>3])>>6-(7&I)&3,s[_*o+(q>>2)]|=M<<6-((3&q)<<1);if(4==a)M=(M=r[I>>3])>>4-(7&I)&15,s[_*o+(q>>1)]|=M<<4-((1&q)<<2);if(a>=8)for(var T=_*o+q*f,z=0;z<f;z++)s[T+z]=r[(I>>3)+z];I+=a,q+=b}U++,_+=p}g*m!=0&&(l+=m*(1+A)),v+=1}return s},e.decode._getBPP=function(e){return[1,null,3,1,2,null,4][e.ctype]*e.depth},e.decode._filterZero=function(r,t,n,i,a){var f=e.decode._getBPP(t),o=Math.ceil(i*f/8),s=e.decode._paeth;f=Math.ceil(f/8);for(var l=0;l<a;l++){var c=n+l*o,u=c+l+1,d=r[u-1];if(0==d)for(var h=0;h<o;h++)r[c+h]=r[u+h];else if(1==d){for(h=0;h<f;h++)r[c+h]=r[u+h];for(h=f;h<o;h++)r[c+h]=r[u+h]+r[c+h-f]&255}else if(0==l){for(h=0;h<f;h++)r[c+h]=r[u+h];if(2==d)for(h=f;h<o;h++)r[c+h]=255&r[u+h];if(3==d)for(h=f;h<o;h++)r[c+h]=r[u+h]+(r[c+h-f]>>1)&255;if(4==d)for(h=f;h<o;h++)r[c+h]=r[u+h]+s(r[c+h-f],0,0)&255}else{if(2==d)for(h=0;h<o;h++)r[c+h]=r[u+h]+r[c+h-o]&255;if(3==d){for(h=0;h<f;h++)r[c+h]=r[u+h]+(r[c+h-o]>>1)&255;for(h=f;h<o;h++)r[c+h]=r[u+h]+(r[c+h-o]+r[c+h-f]>>1)&255}if(4==d){for(h=0;h<f;h++)r[c+h]=r[u+h]+s(0,r[c+h-o],0)&255;for(h=f;h<o;h++)r[c+h]=r[u+h]+s(r[c+h-f],r[c+h-o],r[c+h-f-o])&255}}}return r},e.decode._paeth=function(e,r,t){var n=e+r-t,i=Math.abs(n-e),a=Math.abs(n-r),f=Math.abs(n-t);return i<=a&&i<=f?e:a<=f?r:t},e.decode._IHDR=function(r,t,n){var i=e._bin;n.width=i.readUint(r,t),t+=4,n.height=i.readUint(r,t),t+=4,n.depth=r[t],t++,n.ctype=r[t],t++,n.compress=r[t],t++,n.filter=r[t],t++,n.interlace=r[t],t++},e._bin={nextZero:function(e,r){for(;0!=e[r];)r++;return r},readUshort:function(e,r){return e[r]<<8|e[r+1]},writeUshort:function(e,r,t){e[r]=t>>8&255,e[r+1]=255&t},readUint:function(e,r){return 16777216*e[r]+(e[r+1]<<16|e[r+2]<<8|e[r+3])},writeUint:function(e,r,t){e[r]=t>>24&255,e[r+1]=t>>16&255,e[r+2]=t>>8&255,e[r+3]=255&t},readASCII:function(e,r,t){for(var n=\"\",i=0;i<t;i++)n+=String.fromCharCode(e[r+i]);return n},writeASCII:function(e,r,t){for(var n=0;n<t.length;n++)e[r+n]=t.charCodeAt(n)},readBytes:function(e,r,t){for(var n=[],i=0;i<t;i++)n.push(e[r+i]);return n},pad:function(e){return e.length<2?\"0\"+e:e},readUTF8:function(r,t,n){for(var i,a=\"\",f=0;f<n;f++)a+=\"%\"+e._bin.pad(r[t+f].toString(16));try{i=decodeURIComponent(a)}catch(i){return e._bin.readASCII(r,t,n)}return i}},e._copyTile=function(e,r,t,n,i,a,f,o,s){for(var l=Math.min(r,i),c=Math.min(t,a),u=0,d=0,h=0;h<c;h++)for(var v=0;v<l;v++)if(f>=0&&o>=0?(u=h*r+v<<2,d=(o+h)*i+f+v<<2):(u=(-o+h)*r-f+v<<2,d=h*i+v<<2),0==s)n[d]=e[u],n[d+1]=e[u+1],n[d+2]=e[u+2],n[d+3]=e[u+3];else if(1==s){var p=e[u+3]*(1/255),b=e[u]*p,g=e[u+1]*p,m=e[u+2]*p,y=n[d+3]*(1/255),w=n[d]*y,A=n[d+1]*y,U=n[d+2]*y,_=1-p,q=p+y*_,I=0==q?0:1/q;n[d+3]=255*q,n[d+0]=(b+w*_)*I,n[d+1]=(g+A*_)*I,n[d+2]=(m+U*_)*I}else if(2==s){p=e[u+3],b=e[u],g=e[u+1],m=e[u+2],y=n[d+3],w=n[d],A=n[d+1],U=n[d+2];p==y&&b==w&&g==A&&m==U?(n[d]=0,n[d+1]=0,n[d+2]=0,n[d+3]=0):(n[d]=b,n[d+1]=g,n[d+2]=m,n[d+3]=p)}else if(3==s){p=e[u+3],b=e[u],g=e[u+1],m=e[u+2],y=n[d+3],w=n[d],A=n[d+1],U=n[d+2];if(p==y&&b==w&&g==A&&m==U)continue;if(p<220&&y>20)return!1}return!0},e.encode=function(r,t,n,i,a,f){null==i&&(i=0),null==f&&(f=!1);var o=e.encode.compress(r,t,n,i,!1,f);return e.encode.compressPNG(o,-1),e.encode._main(o,t,n,a)},e.encodeLL=function(r,t,n,i,a,f,o){for(var s={ctype:0+(1==i?0:2)+(0==a?0:4),depth:f,frames:[]},l=(i+a)*f,c=l*t,u=0;u<r.length;u++)s.frames.push({rect:{x:0,y:0,width:t,height:n},img:new Uint8Array(r[u]),blend:0,dispose:1,bpp:Math.ceil(l/8),bpl:Math.ceil(c/8)});return e.encode.compressPNG(s,4),e.encode._main(s,t,n,o)},e.encode._main=function(r,t,n,i){var a=e.crc.crc,f=e._bin.writeUint,o=e._bin.writeUshort,s=e._bin.writeASCII,l=8,c=r.frames.length>1,u=!1,d=46+(c?20:0);if(3==r.ctype){for(var h=r.plte.length,v=0;v<h;v++)r.plte[v]>>>24!=255&&(u=!0);d+=8+3*h+4+(u?8+1*h+4:0)}for(var p=0;p<r.frames.length;p++){c&&(d+=38),d+=(q=r.frames[p]).cimg.length+12,0!=p&&(d+=4)}d+=12;var b=new Uint8Array(d),g=[137,80,78,71,13,10,26,10];for(v=0;v<8;v++)b[v]=g[v];if(f(b,l,13),s(b,l+=4,\"IHDR\"),f(b,l+=4,t),f(b,l+=4,n),b[l+=4]=r.depth,b[++l]=r.ctype,b[++l]=0,b[++l]=0,b[++l]=0,f(b,++l,a(b,l-17,17)),f(b,l+=4,1),s(b,l+=4,\"sRGB\"),b[l+=4]=1,f(b,++l,a(b,l-5,5)),l+=4,c&&(f(b,l,8),s(b,l+=4,\"acTL\"),f(b,l+=4,r.frames.length),f(b,l+=4,0),f(b,l+=4,a(b,l-12,12)),l+=4),3==r.ctype){f(b,l,3*(h=r.plte.length)),s(b,l+=4,\"PLTE\"),l+=4;for(v=0;v<h;v++){var m=3*v,y=r.plte[v],w=255&y,A=y>>>8&255,U=y>>>16&255;b[l+m+0]=w,b[l+m+1]=A,b[l+m+2]=U}if(f(b,l+=3*h,a(b,l-3*h-4,3*h+4)),l+=4,u){f(b,l,h),s(b,l+=4,\"tRNS\"),l+=4;for(v=0;v<h;v++)b[l+v]=r.plte[v]>>>24&255;f(b,l+=h,a(b,l-h-4,h+4)),l+=4}}var _=0;for(p=0;p<r.frames.length;p++){var q=r.frames[p];c&&(f(b,l,26),s(b,l+=4,\"fcTL\"),f(b,l+=4,_++),f(b,l+=4,q.rect.width),f(b,l+=4,q.rect.height),f(b,l+=4,q.rect.x),f(b,l+=4,q.rect.y),o(b,l+=4,i[p]),o(b,l+=2,1e3),b[l+=2]=q.dispose,b[++l]=q.blend,f(b,++l,a(b,l-30,30)),l+=4);var I=q.cimg;f(b,l,(h=I.length)+(0==p?0:4));var M=l+=4;s(b,l,0==p?\"IDAT\":\"fdAT\"),l+=4,0!=p&&(f(b,l,_++),l+=4);for(v=0;v<h;v++)b[l+v]=I[v];f(b,l+=h,a(b,M,l-M)),l+=4}return f(b,l,0),s(b,l+=4,\"IEND\"),f(b,l+=4,a(b,l-4,4)),l+=4,b.buffer},e.encode.compressPNG=function(r,t){for(var n=0;n<r.frames.length;n++){var i=r.frames[n],a=(i.rect.width,i.rect.height),f=new Uint8Array(a*i.bpl+a);i.cimg=e.encode._filterZero(i.img,a,i.bpp,i.bpl,f,t)}},e.encode.compress=function(r,t,n,i,a,f){null==f&&(f=!1);for(var o=6,s=8,l=255,c=0;c<r.length;c++)for(var u=new Uint8Array(r[c]),d=u.length,h=0;h<d;h+=4)l&=u[h+3];var v=255!=l,p=v&&a,b=e.encode.framize(r,t,n,a,p),g={},m=[],y=[];if(0!=i){var w=[];for(h=0;h<b.length;h++)w.push(b[h].img.buffer);var A=e.encode.concatRGBA(w,a),U=e.quantize(A,i),_=0,q=new Uint8Array(U.abuf);for(h=0;h<b.length;h++){var I=(F=b[h].img).length;y.push(new Uint8Array(U.inds.buffer,_>>2,I>>2));for(c=0;c<I;c+=4)F[c]=q[_+c],F[c+1]=q[_+c+1],F[c+2]=q[_+c+2],F[c+3]=q[_+c+3];_+=I}for(h=0;h<U.plte.length;h++)m.push(U.plte[h].est.rgba)}else for(c=0;c<b.length;c++){var M=b[c],T=new Uint32Array(M.img.buffer),z=M.rect.width,R=(d=T.length,new Uint8Array(d));y.push(R);for(h=0;h<d;h++){var N=T[h];if(0!=h&&N==T[h-1])R[h]=R[h-1];else if(h>z&&N==T[h-z])R[h]=R[h-z];else{var L=g[N];if(null==L&&(g[N]=L=m.length,m.push(N),m.length>=300))break;R[h]=L}}}var P=m.length;P<=256&&0==f&&(s=P<=2?1:P<=4?2:P<=16?4:8,a&&(s=8));for(c=0;c<b.length;c++){(M=b[c]).rect.x,M.rect.y,z=M.rect.width;var S=M.rect.height,D=M.img,B=(new Uint32Array(D.buffer),4*z),x=4;if(P<=256&&0==f){B=Math.ceil(s*z/8);for(var C=new Uint8Array(B*S),G=y[c],Z=0;Z<S;Z++){h=Z*B;var k=Z*z;if(8==s)for(var E=0;E<z;E++)C[h+E]=G[k+E];else if(4==s)for(E=0;E<z;E++)C[h+(E>>1)]|=G[k+E]<<4-4*(1&E);else if(2==s)for(E=0;E<z;E++)C[h+(E>>2)]|=G[k+E]<<6-2*(3&E);else if(1==s)for(E=0;E<z;E++)C[h+(E>>3)]|=G[k+E]<<7-1*(7&E)}D=C,o=3,x=1}else if(0==v&&1==b.length){C=new Uint8Array(z*S*3);var H=z*S;for(h=0;h<H;h++){var F,K=4*h;C[F=3*h]=D[K],C[F+1]=D[K+1],C[F+2]=D[K+2]}D=C,o=2,x=3,B=3*z}M.img=D,M.bpl=B,M.bpp=x}return{ctype:o,depth:s,plte:m,frames:b}},e.encode.framize=function(r,t,n,i,a){for(var f=[],o=0;o<r.length;o++){var s=new Uint8Array(r[o]),l=new Uint32Array(s.buffer),c=0,u=0,d=t,h=n,v=0;if(0==o||a)s=s.slice(0);else{for(var p=i||1==o||2==f[f.length-2].dispose?1:2,b=0,g=1e9,m=0;m<p;m++){for(var y=new Uint8Array(r[o-1-m]),w=new Uint32Array(r[o-1-m]),A=t,U=n,_=-1,q=-1,I=0;I<n;I++)for(var M=0;M<t;M++){var T=I*t+M;l[T]!=w[T]&&(M<A&&(A=M),M>_&&(_=M),I<U&&(U=I),I>q&&(q=I))}var z=-1==_?1:(_-A+1)*(q-U+1);z<g&&(g=z,b=m,-1==_?(c=u=0,d=h=1):(c=A,u=U,d=_-A+1,h=q-U+1))}y=new Uint8Array(r[o-1-b]);1==b&&(f[f.length-1].dispose=2);var R=new Uint8Array(d*h*4);new Uint32Array(R.buffer);e._copyTile(y,t,n,R,d,h,-c,-u,0),e._copyTile(s,t,n,R,d,h,-c,-u,3)?(e._copyTile(s,t,n,R,d,h,-c,-u,2),v=1):(e._copyTile(s,t,n,R,d,h,-c,-u,0),v=0),s=R}f.push({rect:{x:c,y:u,width:d,height:h},img:s,blend:v,dispose:a?1:0})}return f},e.encode._filterZero=function(t,n,i,a,f,o){if(-1!=o){for(var s=0;s<n;s++)e.encode._filterLine(f,t,s,a,i,o);return r.deflate(f)}for(var l=[],c=0;c<5;c++)if(!(n*a>5e5)||2!=c&&3!=c&&4!=c){for(s=0;s<n;s++)e.encode._filterLine(f,t,s,a,i,c);if(l.push(r.deflate(f)),1==i)break}for(var u,d=1e9,h=0;h<l.length;h++)l[h].length<d&&(u=h,d=l[h].length);return l[u]},e.encode._filterLine=function(r,t,n,i,a,f){var o=n*i,s=o+n,l=e.decode._paeth;if(r[s]=f,s++,0==f)for(var c=0;c<i;c++)r[s+c]=t[o+c];else if(1==f){for(c=0;c<a;c++)r[s+c]=t[o+c];for(c=a;c<i;c++)r[s+c]=t[o+c]-t[o+c-a]+256&255}else if(0==n){for(c=0;c<a;c++)r[s+c]=t[o+c];if(2==f)for(c=a;c<i;c++)r[s+c]=t[o+c];if(3==f)for(c=a;c<i;c++)r[s+c]=t[o+c]-(t[o+c-a]>>1)+256&255;if(4==f)for(c=a;c<i;c++)r[s+c]=t[o+c]-l(t[o+c-a],0,0)+256&255}else{if(2==f)for(c=0;c<i;c++)r[s+c]=t[o+c]+256-t[o+c-i]&255;if(3==f){for(c=0;c<a;c++)r[s+c]=t[o+c]+256-(t[o+c-i]>>1)&255;for(c=a;c<i;c++)r[s+c]=t[o+c]+256-(t[o+c-i]+t[o+c-a]>>1)&255}if(4==f){for(c=0;c<a;c++)r[s+c]=t[o+c]+256-l(0,t[o+c-i],0)&255;for(c=a;c<i;c++)r[s+c]=t[o+c]+256-l(t[o+c-a],t[o+c-i],t[o+c-a-i])&255}}},e.crc={table:function(){for(var e=new Uint32Array(256),r=0;r<256;r++){for(var t=r,n=0;n<8;n++)1&t?t=3988292384^t>>>1:t>>>=1;e[r]=t}return e}(),update:function(r,t,n,i){for(var a=0;a<i;a++)r=e.crc.table[255&(r^t[n+a])]^r>>>8;return r},crc:function(r,t,n){return 4294967295^e.crc.update(4294967295,r,t,n)}},e.quantize=function(r,t){for(var n=new Uint8Array(r),i=n.slice(0),a=new Uint32Array(i.buffer),f=e.quantize.getKDtree(i,t),o=f[0],s=f[1],l=(e.quantize.planeDst,n),c=a,u=l.length,d=new Uint8Array(n.length>>2),h=0;h<u;h+=4){var v=l[h]*(1/255),p=l[h+1]*(1/255),b=l[h+2]*(1/255),g=l[h+3]*(1/255),m=e.quantize.getNearest(o,v,p,b,g);d[h>>2]=m.ind,c[h>>2]=m.est.rgba}return{abuf:i.buffer,inds:d,plte:s}},e.quantize.getKDtree=function(r,t,n){null==n&&(n=1e-4);var i=new Uint32Array(r.buffer),a={i0:0,i1:r.length,bst:null,est:null,tdst:0,left:null,right:null};a.bst=e.quantize.stats(r,a.i0,a.i1),a.est=e.quantize.estats(a.bst);for(var f=[a];f.length<t;){for(var o=0,s=0,l=0;l<f.length;l++)f[l].est.L>o&&(o=f[l].est.L,s=l);if(o<n)break;var c=f[s],u=e.quantize.splitPixels(r,i,c.i0,c.i1,c.est.e,c.est.eMq255);if(c.i0>=u||c.i1<=u)c.est.L=0;else{var d={i0:c.i0,i1:u,bst:null,est:null,tdst:0,left:null,right:null};d.bst=e.quantize.stats(r,d.i0,d.i1),d.est=e.quantize.estats(d.bst);var h={i0:u,i1:c.i1,bst:null,est:null,tdst:0,left:null,right:null};h.bst={R:[],m:[],N:c.bst.N-d.bst.N};for(l=0;l<16;l++)h.bst.R[l]=c.bst.R[l]-d.bst.R[l];for(l=0;l<4;l++)h.bst.m[l]=c.bst.m[l]-d.bst.m[l];h.est=e.quantize.estats(h.bst),c.left=d,c.right=h,f[s]=d,f.push(h)}}f.sort(function(e,r){return r.bst.N-e.bst.N});for(l=0;l<f.length;l++)f[l].ind=l;return[a,f]},e.quantize.getNearest=function(r,t,n,i,a){if(null==r.left)return r.tdst=e.quantize.dist(r.est.q,t,n,i,a),r;var f=e.quantize.planeDst(r.est,t,n,i,a),o=r.left,s=r.right;f>0&&(o=r.right,s=r.left);var l=e.quantize.getNearest(o,t,n,i,a);if(l.tdst<=f*f)return l;var c=e.quantize.getNearest(s,t,n,i,a);return c.tdst<l.tdst?c:l},e.quantize.planeDst=function(e,r,t,n,i){var a=e.e;return a[0]*r+a[1]*t+a[2]*n+a[3]*i-e.eMq},e.quantize.dist=function(e,r,t,n,i){var a=r-e[0],f=t-e[1],o=n-e[2],s=i-e[3];return a*a+f*f+o*o+s*s},e.quantize.splitPixels=function(r,t,n,i,a,f){var o=e.quantize.vecDot;i-=4;for(;n<i;){for(;o(r,n,a)<=f;)n+=4;for(;o(r,i,a)>f;)i-=4;if(n>=i)break;var s=t[n>>2];t[n>>2]=t[i>>2],t[i>>2]=s,n+=4,i-=4}for(;o(r,n,a)>f;)n-=4;return n+4},e.quantize.vecDot=function(e,r,t){return e[r]*t[0]+e[r+1]*t[1]+e[r+2]*t[2]+e[r+3]*t[3]},e.quantize.stats=function(e,r,t){for(var n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],i=[0,0,0,0],a=t-r>>2,f=r;f<t;f+=4){var o=e[f]*(1/255),s=e[f+1]*(1/255),l=e[f+2]*(1/255),c=e[f+3]*(1/255);i[0]+=o,i[1]+=s,i[2]+=l,i[3]+=c,n[0]+=o*o,n[1]+=o*s,n[2]+=o*l,n[3]+=o*c,n[5]+=s*s,n[6]+=s*l,n[7]+=s*c,n[10]+=l*l,n[11]+=l*c,n[15]+=c*c}return n[4]=n[1],n[8]=n[2],n[9]=n[6],n[12]=n[3],n[13]=n[7],n[14]=n[11],{R:n,m:i,N:a}},e.quantize.estats=function(r){var t=r.R,n=r.m,i=r.N,a=n[0],f=n[1],o=n[2],s=n[3],l=0==i?0:1/i,c=[t[0]-a*a*l,t[1]-a*f*l,t[2]-a*o*l,t[3]-a*s*l,t[4]-f*a*l,t[5]-f*f*l,t[6]-f*o*l,t[7]-f*s*l,t[8]-o*a*l,t[9]-o*f*l,t[10]-o*o*l,t[11]-o*s*l,t[12]-s*a*l,t[13]-s*f*l,t[14]-s*o*l,t[15]-s*s*l],u=c,d=e.M4,h=[.5,.5,.5,.5],v=0,p=0;if(0!=i)for(var b=0;b<10&&(h=d.multVec(u,h),p=Math.sqrt(d.dot(h,h)),h=d.sml(1/p,h),!(Math.abs(p-v)<1e-9));b++)v=p;var g=[a*l,f*l,o*l,s*l];return{Cov:c,q:g,e:h,L:v,eMq255:d.dot(d.sml(255,g),h),eMq:d.dot(h,g),rgba:(Math.round(255*g[3])<<24|Math.round(255*g[2])<<16|Math.round(255*g[1])<<8|Math.round(255*g[0])<<0)>>>0}},e.M4={multVec:function(e,r){return[e[0]*r[0]+e[1]*r[1]+e[2]*r[2]+e[3]*r[3],e[4]*r[0]+e[5]*r[1]+e[6]*r[2]+e[7]*r[3],e[8]*r[0]+e[9]*r[1]+e[10]*r[2]+e[11]*r[3],e[12]*r[0]+e[13]*r[1]+e[14]*r[2]+e[15]*r[3]]},dot:function(e,r){return e[0]*r[0]+e[1]*r[1]+e[2]*r[2]+e[3]*r[3]},sml:function(e,r){return[e*r[0],e*r[1],e*r[2],e*r[3]]}},e.encode.concatRGBA=function(e,r){for(var t=0,n=0;n<e.length;n++)t+=e[n].byteLength;var i=new Uint8Array(t),a=0;for(n=0;n<e.length;n++){for(var f=new Uint8Array(e[n]),o=f.length,s=0;s<o;s+=4){var l=f[s],c=f[s+1],u=f[s+2],d=f[s+3];r&&(d=0==(128&d)?0:255),0==d&&(l=c=u=0),i[a+s]=l,i[a+s+1]=c,i[a+s+2]=u,i[a+s+3]=d}a+=o}return i.buffer}}(e,\"function\"==typeof require?require(\"pako\"):window.pako)}();\n</script>\n\n<script>\n    class Player {\n\n        constructor(container) {\n            this.container = container\n            this.global_frac = 0.0\n            this.container = document.getElementById(container)\n            this.progress = null;\n            this.mat = [[]]\n\n            this.player = this.container.querySelector('audio')\n            this.demo_img = this.container.querySelector('.underlay > img')\n            this.overlay = this.container.querySelector('.overlay')\n            this.playpause = this.container.querySelector(\".playpause\");\n            this.download = this.container.querySelector(\".download\");\n            this.play_img = this.container.querySelector('.play-img')\n            this.pause_img = this.container.querySelector('.pause-img')\n            this.canvas = this.container.querySelector('.response-canvas')\n            this.response_container = this.container.querySelector('.response')\n            this.context = this.canvas.getContext('2d');\n\n            // console.log(this.player.duration)\n            var togglePlayPause = () => {\n                if (this.player.networkState !== 1) {\n                    return\n                }\n                if (this.player.paused || this.player.ended) {\n                    this.play()\n                } else {\n                    this.pause()\n                }\n            }\n\n            this.update = () => {\n                this.global_frac = this.player.currentTime / this.player.duration\n                // this.global_frac = frac\n                // console.log(this.player.currentTime, this.player.duration, this.global_frac)\n                this.overlay.style.width = (100*(1.0 - this.global_frac)).toString() + '%'\n                this.redraw()\n            }\n\n            // var start = null;\n            this.updateLoop = (timestamp) => {\n                // if (!start) start = timestamp;\n                // var progress = timestamp - start;\n                this.update()\n                // this.progress = setTimeout(this.updateLoop, 10)\n                this.progress = window.requestAnimationFrame(this.updateLoop)\n            }\n\n            this.seek = (e) => {\n                this.global_frac = e.offsetX / this.demo_img.width\n                this.player.currentTime = this.global_frac * this.player.duration\n                // console.log(this.global_frac)\n                this.overlay.style.width = (100*(1.0 - this.global_frac)).toString() + '%'\n                this.redraw()\n            }\n\n            var download_audio = () => {\n                var url = this.player.querySelector('#src').src\n                const a = document.createElement('a')\n                a.href = url\n                a.download = \"download\"\n                document.body.appendChild(a)\n                a.click()\n                document.body.removeChild(a)\n            }\n\n            this.demo_img.onclick = this.seek;\n            this.playpause.disabled = true\n            this.player.onplay = this.updateLoop\n            this.player.onpause = () => {\n                window.cancelAnimationFrame(this.progress)\n                this.update();\n            }\n            this.player.onended = () => {this.pause()}\n            this.playpause.onclick = togglePlayPause;\n            this.download.onclick = download_audio;\n        }\n\n        load(audio_fname, img_fname, levels_fname) {\n            this.pause()\n            window.cancelAnimationFrame(this.progress)\n            this.playpause.disabled = true\n\n            this.player.querySelector('#src').setAttribute(\"src\", audio_fname)\n            this.player.load()\n            this.demo_img.setAttribute(\"src\", img_fname)\n            this.overlay.style.width = '0%'\n\n            fetch(levels_fname)\n            .then(response => response.arrayBuffer())\n            .then(text => {\n                this.mat = this.parse(text);\n                this.playpause.disabled = false;\n                this.redraw();\n            })\n        }\n\n        parse(buffer) {\n            var img = UPNG.decode(buffer)\n            var dat = UPNG.toRGBA8(img)[0]\n            var view = new DataView(dat)\n            var data = new Array(img.width).fill(0).map(() => new Array(img.height).fill(0));\n\n            var min =100\n            var max = -100\n            var idx = 0\n            for (let i=0; i < img.height*img.width*4; i+=4) {\n                var rgba = [view.getUint8(i, 1) / 255, view.getUint8(i + 1, 1) / 255, view.getUint8(i + 2, 1) / 255, view.getUint8(i + 3, 1) / 255]\n                var norm = Math.pow(Math.pow(rgba[0], 2) + Math.pow(rgba[1], 2) + Math.pow(rgba[2], 2), 0.5)\n                data[idx % img.width][img.height - Math.floor(idx / img.width) - 1] = norm\n\n                idx += 1\n                min = Math.min(min, norm)\n                max = Math.max(max, norm)\n            }\n            for (let i = 0; i < data.length; i++) {\n                for (let j = 0; j < data[i].length; j++) {\n                    data[i][j] = Math.pow((data[i][j] - min) / (max - min), 1.5)\n                }\n            }\n            var data3 = new Array(img.width).fill(0).map(() => new Array(img.height).fill(0));\n            for (let i = 0; i < data.length; i++) {\n                for (let j = 0; j < data[i].length; j++) {\n                    if (i == 0 || i == (data.length - 1)) {\n                        data3[i][j] = data[i][j]\n                    } else{\n                        data3[i][j] = 0.33*(data[i - 1][j]) + 0.33*(data[i][j]) + 0.33*(data[i + 1][j])\n                        // data3[i][j] = 0.00*(data[i - 1][j]) + 1.00*(data[i][j]) + 0.00*(data[i + 1][j])\n                    }\n                }\n            }\n\n            var scale = 5\n            var data2 = new Array(scale*img.width).fill(0).map(() => new Array(img.height).fill(0));\n            for (let j = 0; j < data[0].length; j++) {\n                for (let i = 0; i < data.length - 1; i++) {\n                    for (let k = 0; k < scale; k++) {\n                        data2[scale*i + k][j] = (1.0 - (k/scale))*data3[i][j] + (k / scale)*data3[i + 1][j]\n                    }\n                }\n            }\n            return data2\n        }\n\n        play() {\n            this.player.play();\n            this.play_img.style.display = 'none'\n            this.pause_img.style.display = 'block'\n        }\n\n        pause() {\n            this.player.pause();\n            this.pause_img.style.display = 'none'\n            this.play_img.style.display = 'block'\n        }\n\n        redraw() {\n            this.canvas.width = window.devicePixelRatio*this.response_container.offsetWidth;\n            this.canvas.height = window.devicePixelRatio*this.response_container.offsetHeight;\n\n            this.context.clearRect(0, 0, this.canvas.width, this.canvas.height)\n            this.canvas.style.width = (this.canvas.width / window.devicePixelRatio).toString() + \"px\";\n            this.canvas.style.height = (this.canvas.height / window.devicePixelRatio).toString() + \"px\";\n\n            var f = this.global_frac*this.mat.length\n            var tstep = Math.min(Math.floor(f), this.mat.length - 2)\n            var heights = this.mat[tstep]\n            var bar_width = (this.canvas.width / heights.length) - 1\n\n            for (let k = 0; k < heights.length - 1; k++) {\n                var height = Math.max(Math.round((heights[k])*this.canvas.height), 3)\n                this.context.fillStyle = '#696f7b';\n                this.context.fillRect(k*(bar_width + 1), (this.canvas.height - height) / 2, bar_width, height);\n            }\n        }\n    }\n</script>\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/templates/pandoc.css",
    "content": "/*\nCopyright (c) 2017 Chris Patuzzo\nhttps://twitter.com/chrispatuzzo\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\nbody {\n  font-family: Helvetica, arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.6;\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: white;\n  padding: 30px;\n  color: #333;\n}\n\nbody > *:first-child {\n  margin-top: 0 !important;\n}\n\nbody > *:last-child {\n  margin-bottom: 0 !important;\n}\n\na {\n  color: #4183C4;\n  text-decoration: none;\n}\n\na.absent {\n  color: #cc0000;\n}\n\na.anchor {\n  display: block;\n  padding-left: 30px;\n  margin-left: -30px;\n  cursor: pointer;\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin: 20px 0 10px;\n  padding: 0;\n  font-weight: bold;\n  -webkit-font-smoothing: antialiased;\n  cursor: text;\n  position: relative;\n}\n\nh2:first-child, h1:first-child, h1:first-child + h2, h3:first-child, h4:first-child, h5:first-child, h6:first-child {\n  margin-top: 0;\n  padding-top: 0;\n}\n\nh1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {\n  text-decoration: none;\n}\n\nh1 tt, h1 code {\n  font-size: inherit;\n}\n\nh2 tt, h2 code {\n  font-size: inherit;\n}\n\nh3 tt, h3 code {\n  font-size: inherit;\n}\n\nh4 tt, h4 code {\n  font-size: inherit;\n}\n\nh5 tt, h5 code {\n  font-size: inherit;\n}\n\nh6 tt, h6 code {\n  font-size: inherit;\n}\n\nh1 {\n  font-size: 28px;\n  color: black;\n}\n\nh2 {\n  font-size: 24px;\n  border-bottom: 1px solid #cccccc;\n  color: black;\n}\n\nh3 {\n  font-size: 18px;\n}\n\nh4 {\n  font-size: 16px;\n}\n\nh5 {\n  font-size: 14px;\n}\n\nh6 {\n  color: #777777;\n  font-size: 14px;\n}\n\np, blockquote, ul, ol, dl, li, table, pre {\n  margin: 15px 0;\n}\n\nhr {\n  border: 0 none;\n  color: #cccccc;\n  height: 4px;\n  padding: 0;\n}\n\nbody > h2:first-child {\n  margin-top: 0;\n  padding-top: 0;\n}\n\nbody > h1:first-child {\n  margin-top: 0;\n  padding-top: 0;\n}\n\nbody > h1:first-child + h2 {\n  margin-top: 0;\n  padding-top: 0;\n}\n\nbody > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {\n  margin-top: 0;\n  padding-top: 0;\n}\n\na:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {\n  margin-top: 0;\n  padding-top: 0;\n}\n\nh1 p, h2 p, h3 p, h4 p, h5 p, h6 p {\n  margin-top: 0;\n}\n\nli p.first {\n  display: inline-block;\n}\n\nul, ol {\n  padding-left: 30px;\n}\n\nul :first-child, ol :first-child {\n  margin-top: 0;\n}\n\nul :last-child, ol :last-child {\n  margin-bottom: 0;\n}\n\ndl {\n  padding: 0;\n}\n\ndl dt {\n  font-size: 14px;\n  font-weight: bold;\n  font-style: italic;\n  padding: 0;\n  margin: 15px 0 5px;\n}\n\ndl dt:first-child {\n  padding: 0;\n}\n\ndl dt > :first-child {\n  margin-top: 0;\n}\n\ndl dt > :last-child {\n  margin-bottom: 0;\n}\n\ndl dd {\n  margin: 0 0 15px;\n  padding: 0 15px;\n}\n\ndl dd > :first-child {\n  margin-top: 0;\n}\n\ndl dd > :last-child {\n  margin-bottom: 0;\n}\n\nblockquote {\n  border-left: 4px solid #dddddd;\n  padding: 0 15px;\n  color: #777777;\n}\n\nblockquote > :first-child {\n  margin-top: 0;\n}\n\nblockquote > :last-child {\n  margin-bottom: 0;\n}\n\ntable {\n  padding: 0;\n}\ntable tr {\n  border-top: 1px solid #cccccc;\n  background-color: white;\n  margin: 0;\n  padding: 0;\n}\n\ntable tr:nth-child(2n) {\n  background-color: #f8f8f8;\n}\n\ntable tr th {\n  font-weight: bold;\n  border: 1px solid #cccccc;\n  text-align: left;\n  margin: 0;\n  padding: 6px 13px;\n}\n\ntable tr td {\n  border: 1px solid #cccccc;\n  text-align: left;\n  margin: 0;\n  padding: 6px 13px;\n}\n\ntable tr th :first-child, table tr td :first-child {\n  margin-top: 0;\n}\n\ntable tr th :last-child, table tr td :last-child {\n  margin-bottom: 0;\n}\n\nimg {\n  max-width: 100%;\n}\n\nspan.frame {\n  display: block;\n  overflow: hidden;\n}\n\nspan.frame > span {\n  border: 1px solid #dddddd;\n  display: block;\n  float: left;\n  overflow: hidden;\n  margin: 13px 0 0;\n  padding: 7px;\n  width: auto;\n}\n\nspan.frame span img {\n  display: block;\n  float: left;\n}\n\nspan.frame span span {\n  clear: both;\n  color: #333333;\n  display: block;\n  padding: 5px 0 0;\n}\n\nspan.align-center {\n  display: block;\n  overflow: hidden;\n  clear: both;\n}\n\nspan.align-center > span {\n  display: block;\n  overflow: hidden;\n  margin: 13px auto 0;\n  text-align: center;\n}\n\nspan.align-center span img {\n  margin: 0 auto;\n  text-align: center;\n}\n\nspan.align-right {\n  display: block;\n  overflow: hidden;\n  clear: both;\n}\n\nspan.align-right > span {\n  display: block;\n  overflow: hidden;\n  margin: 13px 0 0;\n  text-align: right;\n}\n\nspan.align-right span img {\n  margin: 0;\n  text-align: right;\n}\n\nspan.float-left {\n  display: block;\n  margin-right: 13px;\n  overflow: hidden;\n  float: left;\n}\n\nspan.float-left span {\n  margin: 13px 0 0;\n}\n\nspan.float-right {\n  display: block;\n  margin-left: 13px;\n  overflow: hidden;\n  float: right;\n}\n\nspan.float-right > span {\n  display: block;\n  overflow: hidden;\n  margin: 13px auto 0;\n  text-align: right;\n}\n\ncode, tt {\n  margin: 0 2px;\n  padding: 0 5px;\n  white-space: nowrap;\n  border-radius: 3px;\n}\n\npre code {\n  margin: 0;\n  padding: 0;\n  white-space: pre;\n  border: none;\n  background: transparent;\n}\n\n.highlight pre {\n  font-size: 13px;\n  line-height: 19px;\n  overflow: auto;\n  padding: 6px 10px;\n  border-radius: 3px;\n}\n\npre {\n  font-size: 13px;\n  line-height: 19px;\n  overflow: auto;\n  padding: 6px 10px;\n  border-radius: 3px;\n}\n\npre code, pre tt {\n  background-color: transparent;\n  border: none;\n}\n\nbody {\n  max-width: 600px;\n}\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/templates/widget.html",
    "content": "<div id='PLAYER_ID' class='player' style=\"max-width: MAX_WIDTH;\">\n    <div class='spectrogram' style=\"padding-top: PADDING_AMOUNT;\">\n        <div class='overlay'></div>\n        <div class='underlay'>\n            <img>\n        </div>\n    </div>\n\n    <div class='audio-controls'>\n        <button id=\"playpause\" disabled class='playpause' title=\"play\">\n            <svg class='play-img' width=\"14px\" height=\"19px\" viewBox=\"0 0 14 19\">\n                <polygon id=\"Triangle\" fill=\"#000000\" transform=\"translate(9, 9.5) rotate(90) translate(-7, -9.5) \" points=\"7 2.5 16.5 16.5 -2.5 16.5\"></polygon>\n            </svg>\n            <svg class='pause-img' width=\"16px\" height=\"19px\" viewBox=\"0 0 16 19\">\n                <g fill=\"#000000\" stroke=\"#000000\">\n                    <rect id=\"Rectangle\" x=\"0.5\" y=\"0.5\" width=\"4\" height=\"18\"></rect>\n                    <rect id=\"Rectangle\" x=\"11.5\" y=\"0.5\" width=\"4\" height=\"18\"></rect>\n                </g>\n            </svg>\n        </button>\n\n        <audio class='play'>\n            <source id='src'>\n        </audio>\n        <div class='response'>\n            <canvas class='response-canvas'></canvas>\n        </div>\n\n        <button id=\"download\" class='download' title=\"download\">\n            <svg class='download-img' x=\"0px\" y=\"0px\" viewBox=\"0 0 29.978 29.978\" style=\"enable-background:new 0 0 29.978 29.978;\" xml:space=\"preserve\">\n            <g>\n                <path d=\"M25.462,19.105v6.848H4.515v-6.848H0.489v8.861c0,1.111,0.9,2.012,2.016,2.012h24.967c1.115,0,2.016-0.9,2.016-2.012\n                    v-8.861H25.462z\"/>\n                <path d=\"M14.62,18.426l-5.764-6.965c0,0-0.877-0.828,0.074-0.828s3.248,0,3.248,0s0-0.557,0-1.416c0-2.449,0-6.906,0-8.723\n                    c0,0-0.129-0.494,0.615-0.494c0.75,0,4.035,0,4.572,0c0.536,0,0.524,0.416,0.524,0.416c0,1.762,0,6.373,0,8.742\n                    c0,0.768,0,1.266,0,1.266s1.842,0,2.998,0c1.154,0,0.285,0.867,0.285,0.867s-4.904,6.51-5.588,7.193\n                    C15.092,18.979,14.62,18.426,14.62,18.426z\"/>\n            </g>\n            </svg>\n        </button>\n    </div>\n</div>\n\n<script>\n    var PLAYER_ID = new Player('PLAYER_ID')\n    PLAYER_ID.load(\n        \"AUDIO_SRC\",\n        \"IMAGE_SRC\",\n        \"LEVELS_SRC\"\n    )\n    window.addEventListener(\"resize\", function() {PLAYER_ID.redraw()})\n</script>\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/util.py",
    "content": "import csv\nimport glob\nimport math\nimport numbers\nimport os\nimport random\nimport typing\nfrom contextlib import contextmanager\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Dict\nfrom typing import List\n\nimport numpy as np\nimport torch\nimport torchaudio\nfrom flatten_dict import flatten\nfrom flatten_dict import unflatten\n\n\n@dataclass\nclass Info:\n    \"\"\"Shim for torchaudio.info API changes.\"\"\"\n\n    sample_rate: float\n    num_frames: int\n\n    @property\n    def duration(self) -> float:\n        return self.num_frames / self.sample_rate\n\n\ndef info(audio_path: str):\n    \"\"\"Shim for torchaudio.info to make 0.7.2 API match 0.8.0.\n\n    Parameters\n    ----------\n    audio_path : str\n        Path to audio file.\n    \"\"\"\n    # try default backend first, then fallback to soundfile\n    try:\n        info = torchaudio.info(str(audio_path))\n    except:  # pragma: no cover\n        info = torchaudio.backend.soundfile_backend.info(str(audio_path))\n\n    if isinstance(info, tuple):  # pragma: no cover\n        signal_info = info[0]\n        info = Info(sample_rate=signal_info.rate, num_frames=signal_info.length)\n    else:\n        info = Info(sample_rate=info.sample_rate, num_frames=info.num_frames)\n\n    return info\n\n\ndef ensure_tensor(\n    x: typing.Union[np.ndarray, torch.Tensor, float, int],\n    ndim: int = None,\n    batch_size: int = None,\n):\n    \"\"\"Ensures that the input ``x`` is a tensor of specified\n    dimensions and batch size.\n\n    Parameters\n    ----------\n    x : typing.Union[np.ndarray, torch.Tensor, float, int]\n        Data that will become a tensor on its way out.\n    ndim : int, optional\n        How many dimensions should be in the output, by default None\n    batch_size : int, optional\n        The batch size of the output, by default None\n\n    Returns\n    -------\n    torch.Tensor\n        Modified version of ``x`` as a tensor.\n    \"\"\"\n    if not torch.is_tensor(x):\n        x = torch.as_tensor(x)\n    if ndim is not None:\n        assert x.ndim <= ndim\n        while x.ndim < ndim:\n            x = x.unsqueeze(-1)\n    if batch_size is not None:\n        if x.shape[0] != batch_size:\n            shape = list(x.shape)\n            shape[0] = batch_size\n            x = x.expand(*shape)\n    return x\n\n\ndef _get_value(other):\n    from . import AudioSignal\n\n    if isinstance(other, AudioSignal):\n        return other.audio_data\n    return other\n\n\ndef hz_to_bin(hz: torch.Tensor, n_fft: int, sample_rate: int):\n    \"\"\"Closest frequency bin given a frequency, number\n    of bins, and a sampling rate.\n\n    Parameters\n    ----------\n    hz : torch.Tensor\n       Tensor of frequencies in Hz.\n    n_fft : int\n        Number of FFT bins.\n    sample_rate : int\n        Sample rate of audio.\n\n    Returns\n    -------\n    torch.Tensor\n        Closest bins to the data.\n    \"\"\"\n    shape = hz.shape\n    hz = hz.flatten()\n    freqs = torch.linspace(0, sample_rate / 2, 2 + n_fft // 2)\n    hz[hz > sample_rate / 2] = sample_rate / 2\n\n    closest = (hz[None, :] - freqs[:, None]).abs()\n    closest_bins = closest.min(dim=0).indices\n\n    return closest_bins.reshape(*shape)\n\n\ndef random_state(seed: typing.Union[int, np.random.RandomState]):\n    \"\"\"\n    Turn seed into a np.random.RandomState instance.\n\n    Parameters\n    ----------\n    seed : typing.Union[int, np.random.RandomState] or None\n        If seed is None, return the RandomState singleton used by np.random.\n        If seed is an int, return a new RandomState instance seeded with seed.\n        If seed is already a RandomState instance, return it.\n        Otherwise raise ValueError.\n\n    Returns\n    -------\n    np.random.RandomState\n        Random state object.\n\n    Raises\n    ------\n    ValueError\n        If seed is not valid, an error is thrown.\n    \"\"\"\n    if seed is None or seed is np.random:\n        return np.random.mtrand._rand\n    elif isinstance(seed, (numbers.Integral, np.integer, int)):\n        return np.random.RandomState(seed)\n    elif isinstance(seed, np.random.RandomState):\n        return seed\n    else:\n        raise ValueError(\n            \"%r cannot be used to seed a numpy.random.RandomState\" \" instance\" % seed\n        )\n\n\ndef seed(random_seed, set_cudnn=False):\n    \"\"\"\n    Seeds all random states with the same random seed\n    for reproducibility. Seeds ``numpy``, ``random`` and ``torch``\n    random generators.\n    For full reproducibility, two further options must be set\n    according to the torch documentation:\n    https://pytorch.org/docs/stable/notes/randomness.html\n    To do this, ``set_cudnn`` must be True. It defaults to\n    False, since setting it to True results in a performance\n    hit.\n\n    Args:\n        random_seed (int): integer corresponding to random seed to\n        use.\n        set_cudnn (bool): Whether or not to set cudnn into determinstic\n        mode and off of benchmark mode. Defaults to False.\n    \"\"\"\n\n    torch.manual_seed(random_seed)\n    np.random.seed(random_seed)\n    random.seed(random_seed)\n\n    if set_cudnn:\n        torch.backends.cudnn.deterministic = True\n        torch.backends.cudnn.benchmark = False\n\n\n@contextmanager\ndef _close_temp_files(tmpfiles: list):\n    \"\"\"Utility function for creating a context and closing all temporary files\n    once the context is exited. For correct functionality, all temporary file\n    handles created inside the context must be appended to the ```tmpfiles```\n    list.\n\n    This function is taken wholesale from Scaper.\n\n    Parameters\n    ----------\n    tmpfiles : list\n        List of temporary file handles\n    \"\"\"\n\n    def _close():\n        for t in tmpfiles:\n            try:\n                t.close()\n                os.unlink(t.name)\n            except Exception:\n                pass\n\n    try:\n        yield\n    except:  # pragma: no cover\n        _close()\n        raise\n    _close()\n\n\nAUDIO_EXTENSIONS = [\".wav\", \".flac\", \".mp3\", \".mp4\"]\n\n\ndef find_audio(folder: str, ext: List[str] = AUDIO_EXTENSIONS):\n    \"\"\"Finds all audio files in a directory recursively.\n    Returns a list.\n\n    Parameters\n    ----------\n    folder : str\n        Folder to look for audio files in, recursively.\n    ext : List[str], optional\n        Extensions to look for without the ., by default\n        ``['.wav', '.flac', '.mp3', '.mp4']``.\n    \"\"\"\n    folder = Path(folder)\n    # Take care of case where user has passed in an audio file directly\n    # into one of the calling functions.\n    if str(folder).endswith(tuple(ext)):\n        # if, however, there's a glob in the path, we need to\n        # return the glob, not the file.\n        if \"*\" in str(folder):\n            return glob.glob(str(folder), recursive=(\"**\" in str(folder)))\n        else:\n            return [folder]\n\n    files = []\n    for x in ext:\n        files += folder.glob(f\"**/*{x}\")\n    return files\n\n\ndef read_sources(\n    sources: List[str],\n    remove_empty: bool = True,\n    relative_path: str = \"\",\n    ext: List[str] = AUDIO_EXTENSIONS,\n):\n    \"\"\"Reads audio sources that can either be folders\n    full of audio files, or CSV files that contain paths\n    to audio files. CSV files that adhere to the expected\n    format can be generated by\n    :py:func:`audiotools.data.preprocess.create_csv`.\n\n    Parameters\n    ----------\n    sources : List[str]\n        List of audio sources to be converted into a\n        list of lists of audio files.\n    remove_empty : bool, optional\n        Whether or not to remove rows with an empty \"path\"\n        from each CSV file, by default True.\n\n    Returns\n    -------\n    list\n        List of lists of rows of CSV files.\n    \"\"\"\n    files = []\n    relative_path = Path(relative_path)\n    for source in sources:\n        source = str(source)\n        _files = []\n        if source.endswith(\".csv\"):\n            with open(source, \"r\") as f:\n                reader = csv.DictReader(f)\n                for x in reader:\n                    if remove_empty and x[\"path\"] == \"\":\n                        continue\n                    if x[\"path\"] != \"\":\n                        x[\"path\"] = str(relative_path / x[\"path\"])\n                    _files.append(x)\n        else:\n            for x in find_audio(source, ext=ext):\n                x = str(relative_path / x)\n                _files.append({\"path\": x})\n        files.append(sorted(_files, key=lambda x: x[\"path\"]))\n    return files\n\n\ndef choose_from_list_of_lists(\n    state: np.random.RandomState, list_of_lists: list, p: float = None\n):\n    \"\"\"Choose a single item from a list of lists.\n\n    Parameters\n    ----------\n    state : np.random.RandomState\n        Random state to use when choosing an item.\n    list_of_lists : list\n        A list of lists from which items will be drawn.\n    p : float, optional\n        Probabilities of each list, by default None\n\n    Returns\n    -------\n    typing.Any\n        An item from the list of lists.\n    \"\"\"\n    source_idx = state.choice(list(range(len(list_of_lists))), p=p)\n    item_idx = state.randint(len(list_of_lists[source_idx]))\n    return list_of_lists[source_idx][item_idx], source_idx, item_idx\n\n\n@contextmanager\ndef chdir(newdir: typing.Union[Path, str]):\n    \"\"\"\n    Context manager for switching directories to run a\n    function. Useful for when you want to use relative\n    paths to different runs.\n\n    Parameters\n    ----------\n    newdir : typing.Union[Path, str]\n        Directory to switch to.\n    \"\"\"\n    curdir = os.getcwd()\n    try:\n        os.chdir(newdir)\n        yield\n    finally:\n        os.chdir(curdir)\n\n\ndef prepare_batch(batch: typing.Union[dict, list, torch.Tensor], device: str = \"cpu\"):\n    \"\"\"Moves items in a batch (typically generated by a DataLoader as a list\n    or a dict) to the specified device. This works even if dictionaries\n    are nested.\n\n    Parameters\n    ----------\n    batch : typing.Union[dict, list, torch.Tensor]\n        Batch, typically generated by a dataloader, that will be moved to\n        the device.\n    device : str, optional\n        Device to move batch to, by default \"cpu\"\n\n    Returns\n    -------\n    typing.Union[dict, list, torch.Tensor]\n        Batch with all values moved to the specified device.\n    \"\"\"\n    if isinstance(batch, dict):\n        batch = flatten(batch)\n        for key, val in batch.items():\n            try:\n                batch[key] = val.to(device)\n            except Exception:\n                pass\n        batch = unflatten(batch)\n    elif torch.is_tensor(batch):\n        batch = batch.to(device)\n    elif isinstance(batch, list):\n        for i in range(len(batch)):\n            try:\n                batch[i] = batch[i].to(device)\n            except Exception:\n                pass\n    return batch\n\n\ndef sample_from_dist(dist_tuple: tuple, state: np.random.RandomState = None):\n    \"\"\"Samples from a distribution defined by a tuple. The first\n    item in the tuple is the distribution type, and the rest of the\n    items are arguments to that distribution. The distribution function\n    is gotten from the ``np.random.RandomState`` object.\n\n    Parameters\n    ----------\n    dist_tuple : tuple\n        Distribution tuple\n    state : np.random.RandomState, optional\n        Random state, or seed to use, by default None\n\n    Returns\n    -------\n    typing.Union[float, int, str]\n        Draw from the distribution.\n\n    Examples\n    --------\n    Sample from a uniform distribution:\n\n    >>> dist_tuple = (\"uniform\", 0, 1)\n    >>> sample_from_dist(dist_tuple)\n\n    Sample from a constant distribution:\n\n    >>> dist_tuple = (\"const\", 0)\n    >>> sample_from_dist(dist_tuple)\n\n    Sample from a normal distribution:\n\n    >>> dist_tuple = (\"normal\", 0, 0.5)\n    >>> sample_from_dist(dist_tuple)\n\n    \"\"\"\n    if dist_tuple[0] == \"const\":\n        return dist_tuple[1]\n    state = random_state(state)\n    dist_fn = getattr(state, dist_tuple[0])\n    return dist_fn(*dist_tuple[1:])\n\n\ndef collate(list_of_dicts: list, n_splits: int = None):\n    \"\"\"Collates a list of dictionaries (e.g. as returned by a\n    dataloader) into a dictionary with batched values. This routine\n    uses the default torch collate function for everything\n    except AudioSignal objects, which are handled by the\n    :py:func:`audiotools.core.audio_signal.AudioSignal.batch`\n    function.\n\n    This function takes n_splits to enable splitting a batch\n    into multiple sub-batches for the purposes of gradient accumulation,\n    etc.\n\n    Parameters\n    ----------\n    list_of_dicts : list\n        List of dictionaries to be collated.\n    n_splits : int\n        Number of splits to make when creating the batches (split into\n        sub-batches). Useful for things like gradient accumulation.\n\n    Returns\n    -------\n    dict\n        Dictionary containing batched data.\n    \"\"\"\n\n    from . import AudioSignal\n\n    batches = []\n    list_len = len(list_of_dicts)\n\n    return_list = False if n_splits is None else True\n    n_splits = 1 if n_splits is None else n_splits\n    n_items = int(math.ceil(list_len / n_splits))\n\n    for i in range(0, list_len, n_items):\n        # Flatten the dictionaries to avoid recursion.\n        list_of_dicts_ = [flatten(d) for d in list_of_dicts[i : i + n_items]]\n        dict_of_lists = {\n            k: [dic[k] for dic in list_of_dicts_] for k in list_of_dicts_[0]\n        }\n\n        batch = {}\n        for k, v in dict_of_lists.items():\n            if isinstance(v, list):\n                if all(isinstance(s, AudioSignal) for s in v):\n                    batch[k] = AudioSignal.batch(v, pad_signals=True)\n                else:\n                    # Borrow the default collate fn from torch.\n                    batch[k] = torch.utils.data._utils.collate.default_collate(v)\n        batches.append(unflatten(batch))\n\n    batches = batches[0] if not return_list else batches\n    return batches\n\n\nBASE_SIZE = 864\nDEFAULT_FIG_SIZE = (9, 3)\n\n\ndef format_figure(\n    fig_size: tuple = None,\n    title: str = None,\n    fig=None,\n    format_axes: bool = True,\n    format: bool = True,\n    font_color: str = \"white\",\n):\n    \"\"\"Prettifies the spectrogram and waveform plots. A title\n    can be inset into the top right corner, and the axes can be\n    inset into the figure, allowing the data to take up the entire\n    image. Used in\n\n    - :py:func:`audiotools.core.display.DisplayMixin.specshow`\n    - :py:func:`audiotools.core.display.DisplayMixin.waveplot`\n    - :py:func:`audiotools.core.display.DisplayMixin.wavespec`\n\n    Parameters\n    ----------\n    fig_size : tuple, optional\n        Size of figure, by default (9, 3)\n    title : str, optional\n        Title to inset in top right, by default None\n    fig : matplotlib.figure.Figure, optional\n        Figure object, if None ``plt.gcf()`` will be used, by default None\n    format_axes : bool, optional\n        Format the axes to be inside the figure, by default True\n    format : bool, optional\n        This formatting can be skipped entirely by passing ``format=False``\n        to any of the plotting functions that use this formater, by default True\n    font_color : str, optional\n        Color of font of axes, by default \"white\"\n    \"\"\"\n    import matplotlib\n    import matplotlib.pyplot as plt\n\n    if fig_size is None:\n        fig_size = DEFAULT_FIG_SIZE\n    if not format:\n        return\n    if fig is None:\n        fig = plt.gcf()\n    fig.set_size_inches(*fig_size)\n    axs = fig.axes\n\n    pixels = (fig.get_size_inches() * fig.dpi)[0]\n    font_scale = pixels / BASE_SIZE\n\n    if format_axes:\n        axs = fig.axes\n\n        for ax in axs:\n            ymin, _ = ax.get_ylim()\n            xmin, _ = ax.get_xlim()\n\n            ticks = ax.get_yticks()\n            for t in ticks[2:-1]:\n                t = axs[0].annotate(\n                    f\"{(t / 1000):2.1f}k\",\n                    xy=(xmin, t),\n                    xycoords=\"data\",\n                    xytext=(5, -5),\n                    textcoords=\"offset points\",\n                    ha=\"left\",\n                    va=\"top\",\n                    color=font_color,\n                    fontsize=12 * font_scale,\n                    alpha=0.75,\n                )\n\n            ticks = ax.get_xticks()[2:]\n            for t in ticks[:-1]:\n                t = axs[0].annotate(\n                    f\"{t:2.1f}s\",\n                    xy=(t, ymin),\n                    xycoords=\"data\",\n                    xytext=(5, 5),\n                    textcoords=\"offset points\",\n                    ha=\"center\",\n                    va=\"bottom\",\n                    color=font_color,\n                    fontsize=12 * font_scale,\n                    alpha=0.75,\n                )\n\n            ax.margins(0, 0)\n            ax.set_axis_off()\n            ax.xaxis.set_major_locator(plt.NullLocator())\n            ax.yaxis.set_major_locator(plt.NullLocator())\n\n        plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0)\n\n    if title is not None:\n        t = axs[0].annotate(\n            title,\n            xy=(1, 1),\n            xycoords=\"axes fraction\",\n            fontsize=20 * font_scale,\n            xytext=(-5, -5),\n            textcoords=\"offset points\",\n            ha=\"right\",\n            va=\"top\",\n            color=\"white\",\n        )\n        t.set_bbox(dict(facecolor=\"black\", alpha=0.5, edgecolor=\"black\"))\n\n\ndef generate_chord_dataset(\n    max_voices: int = 8,\n    sample_rate: int = 44100,\n    num_items: int = 5,\n    duration: float = 1.0,\n    min_note: str = \"C2\",\n    max_note: str = \"C6\",\n    output_dir: Path = \"chords\",\n):\n    \"\"\"\n    Generates a toy multitrack dataset of chords, synthesized from sine waves.\n\n\n    Parameters\n    ----------\n    max_voices : int, optional\n        Maximum number of voices in a chord, by default 8\n    sample_rate : int, optional\n        Sample rate of audio, by default 44100\n    num_items : int, optional\n        Number of items to generate, by default 5\n    duration : float, optional\n        Duration of each item, by default 1.0\n    min_note : str, optional\n        Minimum note in the dataset, by default \"C2\"\n    max_note : str, optional\n        Maximum note in the dataset, by default \"C6\"\n    output_dir : Path, optional\n        Directory to save the dataset, by default \"chords\"\n\n    \"\"\"\n    import librosa\n    from . import AudioSignal\n    from ..data.preprocess import create_csv\n\n    min_midi = librosa.note_to_midi(min_note)\n    max_midi = librosa.note_to_midi(max_note)\n\n    tracks = []\n    for idx in range(num_items):\n        track = {}\n        # figure out how many voices to put in this track\n        num_voices = random.randint(1, max_voices)\n        for voice_idx in range(num_voices):\n            # choose some random params\n            midinote = random.randint(min_midi, max_midi)\n            dur = random.uniform(0.85 * duration, duration)\n\n            sig = AudioSignal.wave(\n                frequency=librosa.midi_to_hz(midinote),\n                duration=dur,\n                sample_rate=sample_rate,\n                shape=\"sine\",\n            )\n            track[f\"voice_{voice_idx}\"] = sig\n        tracks.append(track)\n\n    # save the tracks to disk\n    output_dir = Path(output_dir)\n    output_dir.mkdir(exist_ok=True)\n    for idx, track in enumerate(tracks):\n        track_dir = output_dir / f\"track_{idx}\"\n        track_dir.mkdir(exist_ok=True)\n        for voice_name, sig in track.items():\n            sig.write(track_dir / f\"{voice_name}.wav\")\n\n    all_voices = list(set([k for track in tracks for k in track.keys()]))\n    voice_lists = {voice: [] for voice in all_voices}\n    for track in tracks:\n        for voice_name in all_voices:\n            if voice_name in track:\n                voice_lists[voice_name].append(track[voice_name].path_to_file)\n            else:\n                voice_lists[voice_name].append(\"\")\n\n    for voice_name, paths in voice_lists.items():\n        create_csv(paths, output_dir / f\"{voice_name}.csv\", loudness=True)\n\n    return output_dir\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/core/whisper.py",
    "content": "import torch\n\n\nclass WhisperMixin:\n    is_initialized = False\n\n    def setup_whisper(\n        self,\n        pretrained_model_name_or_path: str = \"openai/whisper-base.en\",\n        device: str = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n    ):\n        from transformers import WhisperForConditionalGeneration\n        from transformers import WhisperProcessor\n\n        self.whisper_device = device\n        self.whisper_processor = WhisperProcessor.from_pretrained(\n            pretrained_model_name_or_path\n        )\n        self.whisper_model = WhisperForConditionalGeneration.from_pretrained(\n            pretrained_model_name_or_path\n        ).to(self.whisper_device)\n        self.is_initialized = True\n\n    def get_whisper_features(self) -> torch.Tensor:\n        \"\"\"Preprocess audio signal as per the whisper model's training config.\n\n        Returns\n        -------\n        torch.Tensor\n            The prepinput features of the audio signal. Shape: (1, channels, seq_len)\n        \"\"\"\n        import torch\n\n        if not self.is_initialized:\n            self.setup_whisper()\n\n        signal = self.to(self.device)\n        raw_speech = list(\n            (\n                signal.clone()\n                .resample(self.whisper_processor.feature_extractor.sampling_rate)\n                .audio_data[:, 0, :]\n                .numpy()\n            )\n        )\n\n        with torch.inference_mode():\n            input_features = self.whisper_processor(\n                raw_speech,\n                sampling_rate=self.whisper_processor.feature_extractor.sampling_rate,\n                return_tensors=\"pt\",\n            ).input_features\n\n        return input_features\n\n    def get_whisper_transcript(self) -> str:\n        \"\"\"Get the transcript of the audio signal using the whisper model.\n\n        Returns\n        -------\n        str\n            The transcript of the audio signal, including special tokens such as <|startoftranscript|> and <|endoftext|>.\n        \"\"\"\n\n        if not self.is_initialized:\n            self.setup_whisper()\n\n        input_features = self.get_whisper_features()\n\n        with torch.inference_mode():\n            input_features = input_features.to(self.whisper_device)\n            generated_ids = self.whisper_model.generate(inputs=input_features)\n\n        transcription = self.whisper_processor.batch_decode(generated_ids)\n        return transcription[0]\n\n    def get_whisper_embeddings(self) -> torch.Tensor:\n        \"\"\"Get the last hidden state embeddings of the audio signal using the whisper model.\n\n        Returns\n        -------\n        torch.Tensor\n            The Whisper embeddings of the audio signal. Shape: (1, seq_len, hidden_size)\n        \"\"\"\n        import torch\n\n        if not self.is_initialized:\n            self.setup_whisper()\n\n        input_features = self.get_whisper_features()\n        encoder = self.whisper_model.get_encoder()\n\n        with torch.inference_mode():\n            input_features = input_features.to(self.whisper_device)\n            embeddings = encoder(input_features)\n\n        return embeddings.last_hidden_state\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/data/__init__.py",
    "content": "from . import datasets\nfrom . import preprocess\nfrom . import transforms\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/data/datasets.py",
    "content": "from pathlib import Path\nfrom typing import Callable\nfrom typing import Dict\nfrom typing import List\nfrom typing import Union\n\nimport numpy as np\nfrom torch.utils.data import SequentialSampler\nfrom torch.utils.data.distributed import DistributedSampler\n\nfrom ..core import AudioSignal\nfrom ..core import util\n\n\nclass AudioLoader:\n    \"\"\"Loads audio endlessly from a list of audio sources\n    containing paths to audio files. Audio sources can be\n    folders full of audio files (which are found via file\n    extension) or by providing a CSV file which contains paths\n    to audio files.\n\n    Parameters\n    ----------\n    sources : List[str], optional\n        Sources containing folders, or CSVs with\n        paths to audio files, by default None\n    weights : List[float], optional\n        Weights to sample audio files from each source, by default None\n    relative_path : str, optional\n        Path audio should be loaded relative to, by default \"\"\n    transform : Callable, optional\n        Transform to instantiate alongside audio sample,\n        by default None\n    ext : List[str]\n        List of extensions to find audio within each source by. Can\n        also be a file name (e.g. \"vocals.wav\"). by default\n        ``['.wav', '.flac', '.mp3', '.mp4']``.\n    shuffle: bool\n        Whether to shuffle the files within the dataloader. Defaults to True.\n    shuffle_state: int\n        State to use to seed the shuffle of the files.\n    \"\"\"\n\n    def __init__(\n        self,\n        sources: List[str] = None,\n        weights: List[float] = None,\n        transform: Callable = None,\n        relative_path: str = \"\",\n        ext: List[str] = util.AUDIO_EXTENSIONS,\n        shuffle: bool = True,\n        shuffle_state: int = 0,\n    ):\n        self.audio_lists = util.read_sources(\n            sources, relative_path=relative_path, ext=ext\n        )\n\n        self.audio_indices = [\n            (src_idx, item_idx)\n            for src_idx, src in enumerate(self.audio_lists)\n            for item_idx in range(len(src))\n        ]\n        if shuffle:\n            state = util.random_state(shuffle_state)\n            state.shuffle(self.audio_indices)\n\n        self.sources = sources\n        self.weights = weights\n        self.transform = transform\n\n    def __call__(\n        self,\n        state,\n        sample_rate: int,\n        duration: float,\n        loudness_cutoff: float = -40,\n        num_channels: int = 1,\n        offset: float = None,\n        source_idx: int = None,\n        item_idx: int = None,\n        global_idx: int = None,\n    ):\n        if source_idx is not None and item_idx is not None:\n            try:\n                audio_info = self.audio_lists[source_idx][item_idx]\n            except Exception:\n                audio_info = {\"path\": \"none\"}\n        elif global_idx is not None:\n            source_idx, item_idx = self.audio_indices[\n                global_idx % len(self.audio_indices)\n            ]\n            audio_info = self.audio_lists[source_idx][item_idx]\n        else:\n            audio_info, source_idx, item_idx = util.choose_from_list_of_lists(\n                state, self.audio_lists, p=self.weights\n            )\n\n        path = audio_info[\"path\"]\n        signal = AudioSignal.zeros(duration, sample_rate, num_channels)\n\n        if path != \"none\":\n            if offset is None:\n                signal = AudioSignal.salient_excerpt(\n                    path,\n                    duration=duration,\n                    state=state,\n                    loudness_cutoff=loudness_cutoff,\n                )\n            else:\n                signal = AudioSignal(\n                    path,\n                    offset=offset,\n                    duration=duration,\n                )\n\n        if num_channels == 1:\n            signal = signal.to_mono()\n        signal = signal.resample(sample_rate)\n\n        if signal.duration < duration:\n            signal = signal.zero_pad_to(int(duration * sample_rate))\n\n        for k, v in audio_info.items():\n            signal.metadata[k] = v\n\n        item = {\n            \"signal\": signal,\n            \"source_idx\": source_idx,\n            \"item_idx\": item_idx,\n            \"source\": str(self.sources[source_idx]),\n            \"path\": str(path),\n        }\n        if self.transform is not None:\n            item[\"transform_args\"] = self.transform.instantiate(state, signal=signal)\n        return item\n\n\ndef default_matcher(x, y):\n    return Path(x).parent == Path(y).parent\n\n\ndef align_lists(lists, matcher: Callable = default_matcher):\n    longest_list = lists[np.argmax([len(l) for l in lists])]\n    for i, x in enumerate(longest_list):\n        for l in lists:\n            if i >= len(l):\n                l.append({\"path\": \"none\"})\n            elif not matcher(l[i][\"path\"], x[\"path\"]):\n                l.insert(i, {\"path\": \"none\"})\n    return lists\n\n\nclass AudioDataset:\n    \"\"\"Loads audio from multiple loaders (with associated transforms)\n    for a specified number of samples. Excerpts are drawn randomly\n    of the specified duration, above a specified loudness threshold\n    and are resampled on the fly to the desired sample rate\n    (if it is different from the audio source sample rate).\n\n    This takes either a single AudioLoader object,\n    a dictionary of AudioLoader objects, or a dictionary of AudioLoader\n    objects. Each AudioLoader is called by the dataset, and the\n    result is placed in the output dictionary. A transform can also be\n    specified for the entire dataset, rather than for each specific\n    loader. This transform can be applied to the output of all the\n    loaders if desired.\n\n    AudioLoader objects can be specified as aligned, which means the\n    loaders correspond to multitrack audio (e.g. a vocals, bass,\n    drums, and other loader for multitrack music mixtures).\n\n\n    Parameters\n    ----------\n    loaders : Union[AudioLoader, List[AudioLoader], Dict[str, AudioLoader]]\n        AudioLoaders to sample audio from.\n    sample_rate : int\n        Desired sample rate.\n    n_examples : int, optional\n        Number of examples (length of dataset), by default 1000\n    duration : float, optional\n        Duration of audio samples, by default 0.5\n    loudness_cutoff : float, optional\n        Loudness cutoff threshold for audio samples, by default -40\n    num_channels : int, optional\n        Number of channels in output audio, by default 1\n    transform : Callable, optional\n        Transform to instantiate alongside each dataset item, by default None\n    aligned : bool, optional\n        Whether the loaders should be sampled in an aligned manner (e.g. same\n        offset, duration, and matched file name), by default False\n    shuffle_loaders : bool, optional\n        Whether to shuffle the loaders before sampling from them, by default False\n    matcher : Callable\n        How to match files from adjacent audio lists (e.g. for a multitrack audio loader),\n        by default uses the parent directory of each file.\n    without_replacement : bool\n        Whether to choose files with or without replacement, by default True.\n\n\n    Examples\n    --------\n    >>> from audiotools.data.datasets import AudioLoader\n    >>> from audiotools.data.datasets import AudioDataset\n    >>> from audiotools import transforms as tfm\n    >>> import numpy as np\n    >>>\n    >>> loaders = [\n    >>>     AudioLoader(\n    >>>         sources=[f\"tests/audio/spk\"],\n    >>>         transform=tfm.Equalizer(),\n    >>>         ext=[\"wav\"],\n    >>>     )\n    >>>     for i in range(5)\n    >>> ]\n    >>>\n    >>> dataset = AudioDataset(\n    >>>     loaders = loaders,\n    >>>     sample_rate = 44100,\n    >>>     duration = 1.0,\n    >>>     transform = tfm.RescaleAudio(),\n    >>> )\n    >>>\n    >>> item = dataset[np.random.randint(len(dataset))]\n    >>>\n    >>> for i in range(len(loaders)):\n    >>>     item[i][\"signal\"] = loaders[i].transform(\n    >>>         item[i][\"signal\"], **item[i][\"transform_args\"]\n    >>>     )\n    >>>     item[i][\"signal\"].widget(i)\n    >>>\n    >>> mix = sum([item[i][\"signal\"] for i in range(len(loaders))])\n    >>> mix = dataset.transform(mix, **item[\"transform_args\"])\n    >>> mix.widget(\"mix\")\n\n    Below is an example of how one could load MUSDB multitrack data:\n\n    >>> import audiotools as at\n    >>> from pathlib import Path\n    >>> from audiotools import transforms as tfm\n    >>> import numpy as np\n    >>> import torch\n    >>>\n    >>> def build_dataset(\n    >>>     sample_rate: int = 44100,\n    >>>     duration: float = 5.0,\n    >>>     musdb_path: str = \"~/.data/musdb/\",\n    >>> ):\n    >>>     musdb_path = Path(musdb_path).expanduser()\n    >>>     loaders = {\n    >>>         src: at.datasets.AudioLoader(\n    >>>             sources=[musdb_path],\n    >>>             transform=tfm.Compose(\n    >>>                 tfm.VolumeNorm((\"uniform\", -20, -10)),\n    >>>                 tfm.Silence(prob=0.1),\n    >>>             ),\n    >>>             ext=[f\"{src}.wav\"],\n    >>>         )\n    >>>         for src in [\"vocals\", \"bass\", \"drums\", \"other\"]\n    >>>     }\n    >>>\n    >>>     dataset = at.datasets.AudioDataset(\n    >>>         loaders=loaders,\n    >>>         sample_rate=sample_rate,\n    >>>         duration=duration,\n    >>>         num_channels=1,\n    >>>         aligned=True,\n    >>>         transform=tfm.RescaleAudio(),\n    >>>         shuffle_loaders=True,\n    >>>     )\n    >>>     return dataset, list(loaders.keys())\n    >>>\n    >>> train_data, sources = build_dataset()\n    >>> dataloader = torch.utils.data.DataLoader(\n    >>>     train_data,\n    >>>     batch_size=16,\n    >>>     num_workers=0,\n    >>>     collate_fn=train_data.collate,\n    >>> )\n    >>> batch = next(iter(dataloader))\n    >>>\n    >>> for k in sources:\n    >>>     src = batch[k]\n    >>>     src[\"transformed\"] = train_data.loaders[k].transform(\n    >>>         src[\"signal\"].clone(), **src[\"transform_args\"]\n    >>>     )\n    >>>\n    >>> mixture = sum(batch[k][\"transformed\"] for k in sources)\n    >>> mixture = train_data.transform(mixture, **batch[\"transform_args\"])\n    >>>\n    >>> # Say a model takes the mix and gives back (n_batch, n_src, n_time).\n    >>> # Construct the targets:\n    >>> targets = at.AudioSignal.batch([batch[k][\"transformed\"] for k in sources], dim=1)\n\n    Similarly, here's example code for loading Slakh data:\n\n    >>> import audiotools as at\n    >>> from pathlib import Path\n    >>> from audiotools import transforms as tfm\n    >>> import numpy as np\n    >>> import torch\n    >>> import glob\n    >>>\n    >>> def build_dataset(\n    >>>     sample_rate: int = 16000,\n    >>>     duration: float = 10.0,\n    >>>     slakh_path: str = \"~/.data/slakh/\",\n    >>> ):\n    >>>     slakh_path = Path(slakh_path).expanduser()\n    >>>\n    >>>     # Find the max number of sources in Slakh\n    >>>     src_names = [x.name for x in list(slakh_path.glob(\"**/*.wav\"))  if \"S\" in str(x.name)]\n    >>>     n_sources = len(list(set(src_names)))\n    >>>\n    >>>     loaders = {\n    >>>         f\"S{i:02d}\": at.datasets.AudioLoader(\n    >>>             sources=[slakh_path],\n    >>>             transform=tfm.Compose(\n    >>>                 tfm.VolumeNorm((\"uniform\", -20, -10)),\n    >>>                 tfm.Silence(prob=0.1),\n    >>>             ),\n    >>>             ext=[f\"S{i:02d}.wav\"],\n    >>>         )\n    >>>         for i in range(n_sources)\n    >>>     }\n    >>>     dataset = at.datasets.AudioDataset(\n    >>>         loaders=loaders,\n    >>>         sample_rate=sample_rate,\n    >>>         duration=duration,\n    >>>         num_channels=1,\n    >>>         aligned=True,\n    >>>         transform=tfm.RescaleAudio(),\n    >>>         shuffle_loaders=False,\n    >>>     )\n    >>>\n    >>>     return dataset, list(loaders.keys())\n    >>>\n    >>> train_data, sources = build_dataset()\n    >>> dataloader = torch.utils.data.DataLoader(\n    >>>     train_data,\n    >>>     batch_size=16,\n    >>>     num_workers=0,\n    >>>     collate_fn=train_data.collate,\n    >>> )\n    >>> batch = next(iter(dataloader))\n    >>>\n    >>> for k in sources:\n    >>>     src = batch[k]\n    >>>     src[\"transformed\"] = train_data.loaders[k].transform(\n    >>>         src[\"signal\"].clone(), **src[\"transform_args\"]\n    >>>     )\n    >>>\n    >>> mixture = sum(batch[k][\"transformed\"] for k in sources)\n    >>> mixture = train_data.transform(mixture, **batch[\"transform_args\"])\n\n    \"\"\"\n\n    def __init__(\n        self,\n        loaders: Union[AudioLoader, List[AudioLoader], Dict[str, AudioLoader]],\n        sample_rate: int,\n        n_examples: int = 1000,\n        duration: float = 0.5,\n        offset: float = None,\n        loudness_cutoff: float = -40,\n        num_channels: int = 1,\n        transform: Callable = None,\n        aligned: bool = False,\n        shuffle_loaders: bool = False,\n        matcher: Callable = default_matcher,\n        without_replacement: bool = True,\n    ):\n        # Internally we convert loaders to a dictionary\n        if isinstance(loaders, list):\n            loaders = {i: l for i, l in enumerate(loaders)}\n        elif isinstance(loaders, AudioLoader):\n            loaders = {0: loaders}\n\n        self.loaders = loaders\n        self.loudness_cutoff = loudness_cutoff\n        self.num_channels = num_channels\n\n        self.length = n_examples\n        self.transform = transform\n        self.sample_rate = sample_rate\n        self.duration = duration\n        self.offset = offset\n        self.aligned = aligned\n        self.shuffle_loaders = shuffle_loaders\n        self.without_replacement = without_replacement\n\n        if aligned:\n            loaders_list = list(loaders.values())\n            for i in range(len(loaders_list[0].audio_lists)):\n                input_lists = [l.audio_lists[i] for l in loaders_list]\n                # Alignment happens in-place\n                align_lists(input_lists, matcher)\n\n    def __getitem__(self, idx):\n        state = util.random_state(idx)\n        offset = None if self.offset is None else self.offset\n        item = {}\n\n        keys = list(self.loaders.keys())\n        if self.shuffle_loaders:\n            state.shuffle(keys)\n\n        loader_kwargs = {\n            \"state\": state,\n            \"sample_rate\": self.sample_rate,\n            \"duration\": self.duration,\n            \"loudness_cutoff\": self.loudness_cutoff,\n            \"num_channels\": self.num_channels,\n            \"global_idx\": idx if self.without_replacement else None,\n        }\n\n        # Draw item from first loader\n        loader = self.loaders[keys[0]]\n        item[keys[0]] = loader(**loader_kwargs)\n\n        for key in keys[1:]:\n            loader = self.loaders[key]\n            if self.aligned:\n                # Path mapper takes the current loader + everything\n                # returned by the first loader.\n                offset = item[keys[0]][\"signal\"].metadata[\"offset\"]\n                loader_kwargs.update(\n                    {\n                        \"offset\": offset,\n                        \"source_idx\": item[keys[0]][\"source_idx\"],\n                        \"item_idx\": item[keys[0]][\"item_idx\"],\n                    }\n                )\n            item[key] = loader(**loader_kwargs)\n\n        # Sort dictionary back into original order\n        keys = list(self.loaders.keys())\n        item = {k: item[k] for k in keys}\n\n        item[\"idx\"] = idx\n        if self.transform is not None:\n            item[\"transform_args\"] = self.transform.instantiate(\n                state=state, signal=item[keys[0]][\"signal\"]\n            )\n\n        # If there's only one loader, pop it up\n        # to the main dictionary, instead of keeping it\n        # nested.\n        if len(keys) == 1:\n            item.update(item.pop(keys[0]))\n\n        return item\n\n    def __len__(self):\n        return self.length\n\n    @staticmethod\n    def collate(list_of_dicts: Union[list, dict], n_splits: int = None):\n        \"\"\"Collates items drawn from this dataset. Uses\n        :py:func:`audiotools.core.util.collate`.\n\n        Parameters\n        ----------\n        list_of_dicts : typing.Union[list, dict]\n            Data drawn from each item.\n        n_splits : int\n            Number of splits to make when creating the batches (split into\n            sub-batches). Useful for things like gradient accumulation.\n\n        Returns\n        -------\n        dict\n            Dictionary of batched data.\n        \"\"\"\n        return util.collate(list_of_dicts, n_splits=n_splits)\n\n\nclass ConcatDataset(AudioDataset):\n    def __init__(self, datasets: list):\n        self.datasets = datasets\n\n    def __len__(self):\n        return sum([len(d) for d in self.datasets])\n\n    def __getitem__(self, idx):\n        dataset = self.datasets[idx % len(self.datasets)]\n        return dataset[idx // len(self.datasets)]\n\n\nclass ResumableDistributedSampler(DistributedSampler):  # pragma: no cover\n    \"\"\"Distributed sampler that can be resumed from a given start index.\"\"\"\n\n    def __init__(self, dataset, start_idx: int = None, **kwargs):\n        super().__init__(dataset, **kwargs)\n        # Start index, allows to resume an experiment at the index it was\n        self.start_idx = start_idx // self.num_replicas if start_idx is not None else 0\n\n    def __iter__(self):\n        for i, idx in enumerate(super().__iter__()):\n            if i >= self.start_idx:\n                yield idx\n        self.start_idx = 0  # set the index back to 0 so for the next epoch\n\n\nclass ResumableSequentialSampler(SequentialSampler):  # pragma: no cover\n    \"\"\"Sequential sampler that can be resumed from a given start index.\"\"\"\n\n    def __init__(self, dataset, start_idx: int = None, **kwargs):\n        super().__init__(dataset, **kwargs)\n        # Start index, allows to resume an experiment at the index it was\n        self.start_idx = start_idx if start_idx is not None else 0\n\n    def __iter__(self):\n        for i, idx in enumerate(super().__iter__()):\n            if i >= self.start_idx:\n                yield idx\n        self.start_idx = 0  # set the index back to 0 so for the next epoch\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/data/preprocess.py",
    "content": "import csv\nimport os\nfrom pathlib import Path\n\nfrom tqdm import tqdm\n\nfrom ..core import AudioSignal\n\n\ndef create_csv(\n    audio_files: list, output_csv: Path, loudness: bool = False, data_path: str = None\n):\n    \"\"\"Converts a folder of audio files to a CSV file. If ``loudness = True``,\n    the output of this function will create a CSV file that looks something\n    like:\n\n    ..  csv-table::\n        :header: path,loudness\n\n        daps/produced/f1_script1_produced.wav,-16.299999237060547\n        daps/produced/f1_script2_produced.wav,-16.600000381469727\n        daps/produced/f1_script3_produced.wav,-17.299999237060547\n        daps/produced/f1_script4_produced.wav,-16.100000381469727\n        daps/produced/f1_script5_produced.wav,-16.700000762939453\n        daps/produced/f3_script1_produced.wav,-16.5\n\n    ..  note::\n        The paths above are written relative to the ``data_path`` argument\n        which defaults to the environment variable ``PATH_TO_DATA`` if\n        it isn't passed to this function, and defaults to the empty string\n        if that environment variable is not set.\n\n    You can produce a CSV file from a directory of audio files via:\n\n    >>> import audiotools\n    >>> directory = ...\n    >>> audio_files = audiotools.util.find_audio(directory)\n    >>> output_path = \"train.csv\"\n    >>> audiotools.data.preprocess.create_csv(\n    >>>     audio_files, output_csv, loudness=True\n    >>> )\n\n    Note that you can create empty rows in the CSV file by passing an empty\n    string or None in the ``audio_files`` list. This is useful if you want to\n    sync multiple CSV files in a multitrack setting. The loudness of these\n    empty rows will be set to -inf.\n\n    Parameters\n    ----------\n    audio_files : list\n        List of audio files.\n    output_csv : Path\n        Output CSV, with each row containing the relative path of every file\n        to ``data_path``, if specified (defaults to None).\n    loudness : bool\n        Compute loudness of entire file and store alongside path.\n    \"\"\"\n\n    info = []\n    pbar = tqdm(audio_files)\n    for af in pbar:\n        af = Path(af)\n        pbar.set_description(f\"Processing {af.name}\")\n        _info = {}\n        if af.name == \"\":\n            _info[\"path\"] = \"\"\n            if loudness:\n                _info[\"loudness\"] = -float(\"inf\")\n        else:\n            _info[\"path\"] = af.relative_to(data_path) if data_path is not None else af\n            if loudness:\n                _info[\"loudness\"] = AudioSignal(af).ffmpeg_loudness().item()\n\n        info.append(_info)\n\n    with open(output_csv, \"w\") as f:\n        writer = csv.DictWriter(f, fieldnames=list(info[0].keys()))\n        writer.writeheader()\n\n        for item in info:\n            writer.writerow(item)\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/data/transforms.py",
    "content": "import copy\nfrom contextlib import contextmanager\nfrom inspect import signature\nfrom typing import List\n\nimport numpy as np\nimport torch\nfrom flatten_dict import flatten\nfrom flatten_dict import unflatten\nfrom numpy.random import RandomState\n\nfrom .. import ml\nfrom ..core import AudioSignal\nfrom ..core import util\nfrom .datasets import AudioLoader\n\ntt = torch.tensor\n\"\"\"Shorthand for converting things to torch.tensor.\"\"\"\n\n\nclass BaseTransform:\n    \"\"\"This is the base class for all transforms that are implemented\n    in this library. Transforms have two main operations: ``transform``\n    and ``instantiate``.\n\n    ``instantiate`` sets the parameters randomly\n    from distribution tuples for each parameter. For example, for the\n    ``BackgroundNoise`` transform, the signal-to-noise ratio (``snr``)\n    is chosen randomly by instantiate. By default, it chosen uniformly\n    between 10.0 and 30.0 (the tuple is set to ``(\"uniform\", 10.0, 30.0)``).\n\n    ``transform`` applies the transform using the instantiated parameters.\n    A simple example is as follows:\n\n    >>> seed = 0\n    >>> signal = ...\n    >>> transform = transforms.NoiseFloor(db = (\"uniform\", -50.0, -30.0))\n    >>> kwargs = transform.instantiate()\n    >>> output = transform(signal.clone(), **kwargs)\n\n    By breaking apart the instantiation of parameters from the actual audio\n    processing of the transform, we can make things more reproducible, while\n    also applying the transform on batches of data efficiently on GPU,\n    rather than on individual audio samples.\n\n    ..  note::\n        We call ``signal.clone()`` for the input to the ``transform`` function\n        because signals are modified in-place! If you don't clone the signal,\n        you will lose the original data.\n\n    Parameters\n    ----------\n    keys : list, optional\n        Keys that the transform looks for when\n        calling ``self.transform``, by default []. In general this is\n        set automatically, and you won't need to manipulate this argument.\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n\n    Examples\n    --------\n\n    >>> seed = 0\n    >>>\n    >>> audio_path = \"tests/audio/spk/f10_script4_produced.wav\"\n    >>> signal = AudioSignal(audio_path, offset=10, duration=2)\n    >>> transform = tfm.Compose(\n    >>>     [\n    >>>         tfm.RoomImpulseResponse(sources=[\"tests/audio/irs.csv\"]),\n    >>>         tfm.BackgroundNoise(sources=[\"tests/audio/noises.csv\"]),\n    >>>     ],\n    >>> )\n    >>>\n    >>> kwargs = transform.instantiate(seed, signal)\n    >>> output = transform(signal, **kwargs)\n\n    \"\"\"\n\n    def __init__(self, keys: list = [], name: str = None, prob: float = 1.0):\n        # Get keys from the _transform signature.\n        tfm_keys = list(signature(self._transform).parameters.keys())\n\n        # Filter out signal and kwargs keys.\n        ignore_keys = [\"signal\", \"kwargs\"]\n        tfm_keys = [k for k in tfm_keys if k not in ignore_keys]\n\n        # Combine keys specified by the child class, the keys found in\n        # _transform signature, and the mask key.\n        self.keys = keys + tfm_keys + [\"mask\"]\n\n        self.prob = prob\n\n        if name is None:\n            name = self.__class__.__name__\n        self.name = name\n\n    def _prepare(self, batch: dict):\n        sub_batch = batch[self.name]\n\n        for k in self.keys:\n            assert k in sub_batch.keys(), f\"{k} not in batch\"\n\n        return sub_batch\n\n    def _transform(self, signal):\n        return signal\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal = None):\n        return {}\n\n    @staticmethod\n    def apply_mask(batch: dict, mask: torch.Tensor):\n        \"\"\"Applies a mask to the batch.\n\n        Parameters\n        ----------\n        batch : dict\n            Batch whose values will be masked in the ``transform`` pass.\n        mask : torch.Tensor\n            Mask to apply to batch.\n\n        Returns\n        -------\n        dict\n            A dictionary that contains values only where ``mask = True``.\n        \"\"\"\n        masked_batch = {k: v[mask] for k, v in flatten(batch).items()}\n        return unflatten(masked_batch)\n\n    def transform(self, signal: AudioSignal, **kwargs):\n        \"\"\"Apply the transform to the audio signal,\n        with given keyword arguments.\n\n        Parameters\n        ----------\n        signal : AudioSignal\n            Signal that will be modified by the transforms in-place.\n        kwargs: dict\n            Keyword arguments to the specific transforms ``self._transform``\n            function.\n\n        Returns\n        -------\n        AudioSignal\n            Transformed AudioSignal.\n\n        Examples\n        --------\n\n        >>> for seed in range(10):\n        >>>     kwargs = transform.instantiate(seed, signal)\n        >>>     output = transform(signal.clone(), **kwargs)\n\n        \"\"\"\n        tfm_kwargs = self._prepare(kwargs)\n        mask = tfm_kwargs[\"mask\"]\n\n        if torch.any(mask):\n            tfm_kwargs = self.apply_mask(tfm_kwargs, mask)\n            tfm_kwargs = {k: v for k, v in tfm_kwargs.items() if k != \"mask\"}\n            signal[mask] = self._transform(signal[mask], **tfm_kwargs)\n\n        return signal\n\n    def __call__(self, *args, **kwargs):\n        return self.transform(*args, **kwargs)\n\n    def instantiate(\n        self,\n        state: RandomState = None,\n        signal: AudioSignal = None,\n    ):\n        \"\"\"Instantiates parameters for the transform.\n\n        Parameters\n        ----------\n        state : RandomState, optional\n            _description_, by default None\n        signal : AudioSignal, optional\n            _description_, by default None\n\n        Returns\n        -------\n        dict\n            Dictionary containing instantiated arguments for every keyword\n            argument to ``self._transform``.\n\n        Examples\n        --------\n\n        >>> for seed in range(10):\n        >>>     kwargs = transform.instantiate(seed, signal)\n        >>>     output = transform(signal.clone(), **kwargs)\n\n        \"\"\"\n        state = util.random_state(state)\n\n        # Not all instantiates need the signal. Check if signal\n        # is needed before passing it in, so that the end-user\n        # doesn't need to have variables they're not using flowing\n        # into their function.\n        needs_signal = \"signal\" in set(signature(self._instantiate).parameters.keys())\n        kwargs = {}\n        if needs_signal:\n            kwargs = {\"signal\": signal}\n\n        # Instantiate the parameters for the transform.\n        params = self._instantiate(state, **kwargs)\n        for k in list(params.keys()):\n            v = params[k]\n            if isinstance(v, (AudioSignal, torch.Tensor, dict)):\n                params[k] = v\n            else:\n                params[k] = tt(v)\n        mask = state.rand() <= self.prob\n        params[f\"mask\"] = tt(mask)\n\n        # Put the params into a nested dictionary that will be\n        # used later when calling the transform. This is to avoid\n        # collisions in the dictionary.\n        params = {self.name: params}\n\n        return params\n\n    def batch_instantiate(\n        self,\n        states: list = None,\n        signal: AudioSignal = None,\n    ):\n        \"\"\"Instantiates arguments for every item in a batch,\n        given a list of states. Each state in the list\n        corresponds to one item in the batch.\n\n        Parameters\n        ----------\n        states : list, optional\n            List of states, by default None\n        signal : AudioSignal, optional\n            AudioSignal to pass to the ``self.instantiate`` section\n            if it is needed for this transform, by default None\n\n        Returns\n        -------\n        dict\n            Collated dictionary of arguments.\n\n        Examples\n        --------\n\n        >>> batch_size = 4\n        >>> signal = AudioSignal(audio_path, offset=10, duration=2)\n        >>> signal_batch = AudioSignal.batch([signal.clone() for _ in range(batch_size)])\n        >>>\n        >>> states = [seed + idx for idx in list(range(batch_size))]\n        >>> kwargs = transform.batch_instantiate(states, signal_batch)\n        >>> batch_output = transform(signal_batch, **kwargs)\n        \"\"\"\n        kwargs = []\n        for state in states:\n            kwargs.append(self.instantiate(state, signal))\n        kwargs = util.collate(kwargs)\n        return kwargs\n\n\nclass Identity(BaseTransform):\n    \"\"\"This transform just returns the original signal.\"\"\"\n\n    pass\n\n\nclass SpectralTransform(BaseTransform):\n    \"\"\"Spectral transforms require STFT data to exist, since manipulations\n    of the STFT require the spectrogram. This just calls ``stft`` before\n    the transform is called, and calls ``istft`` after the transform is\n    called so that the audio data is written to after the spectral\n    manipulation.\n    \"\"\"\n\n    def transform(self, signal, **kwargs):\n        signal.stft()\n        super().transform(signal, **kwargs)\n        signal.istft()\n        return signal\n\n\nclass Compose(BaseTransform):\n    \"\"\"Compose applies transforms in sequence, one after the other. The\n    transforms are passed in as positional arguments or as a list like so:\n\n    >>> transform = tfm.Compose(\n    >>>     [\n    >>>         tfm.RoomImpulseResponse(sources=[\"tests/audio/irs.csv\"]),\n    >>>         tfm.BackgroundNoise(sources=[\"tests/audio/noises.csv\"]),\n    >>>     ],\n    >>> )\n\n    This will convolve the signal with a room impulse response, and then\n    add background noise to the signal. Instantiate instantiates\n    all the parameters for every transform in the transform list so the\n    interface for using the Compose transform is the same as everything\n    else:\n\n    >>> kwargs = transform.instantiate()\n    >>> output = transform(signal.clone(), **kwargs)\n\n    Under the hood, the transform maps each transform to a unique name\n    under the hood of the form ``{position}.{name}``, where ``position``\n    is the index of the transform in the list. ``Compose`` can nest\n    within other ``Compose`` transforms, like so:\n\n    >>> preprocess = transforms.Compose(\n    >>>     tfm.GlobalVolumeNorm(),\n    >>>     tfm.CrossTalk(),\n    >>>     name=\"preprocess\",\n    >>> )\n    >>> augment = transforms.Compose(\n    >>>     tfm.RoomImpulseResponse(),\n    >>>     tfm.BackgroundNoise(),\n    >>>     name=\"augment\",\n    >>> )\n    >>> postprocess = transforms.Compose(\n    >>>     tfm.VolumeChange(),\n    >>>     tfm.RescaleAudio(),\n    >>>     tfm.ShiftPhase(),\n    >>>     name=\"postprocess\",\n    >>> )\n    >>> transform = transforms.Compose(preprocess, augment, postprocess),\n\n    This defines 3 composed transforms, and then composes them in sequence\n    with one another.\n\n    Parameters\n    ----------\n    *transforms : list\n        List of transforms to apply\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(self, *transforms: list, name: str = None, prob: float = 1.0):\n        if isinstance(transforms[0], list):\n            transforms = transforms[0]\n\n        for i, tfm in enumerate(transforms):\n            tfm.name = f\"{i}.{tfm.name}\"\n\n        keys = [tfm.name for tfm in transforms]\n        super().__init__(keys=keys, name=name, prob=prob)\n\n        self.transforms = transforms\n        self.transforms_to_apply = keys\n\n    @contextmanager\n    def filter(self, *names: list):\n        \"\"\"This can be used to skip transforms entirely when applying\n        the sequence of transforms to a signal. For example, take\n        the following transforms with the names ``preprocess, augment, postprocess``.\n\n        >>> preprocess = transforms.Compose(\n        >>>     tfm.GlobalVolumeNorm(),\n        >>>     tfm.CrossTalk(),\n        >>>     name=\"preprocess\",\n        >>> )\n        >>> augment = transforms.Compose(\n        >>>     tfm.RoomImpulseResponse(),\n        >>>     tfm.BackgroundNoise(),\n        >>>     name=\"augment\",\n        >>> )\n        >>> postprocess = transforms.Compose(\n        >>>     tfm.VolumeChange(),\n        >>>     tfm.RescaleAudio(),\n        >>>     tfm.ShiftPhase(),\n        >>>     name=\"postprocess\",\n        >>> )\n        >>> transform = transforms.Compose(preprocess, augment, postprocess)\n\n        If we wanted to apply all 3 to a signal, we do:\n\n        >>> kwargs = transform.instantiate()\n        >>> output = transform(signal.clone(), **kwargs)\n\n        But if we only wanted to apply the ``preprocess`` and ``postprocess``\n        transforms to the signal, we do:\n\n        >>> with transform_fn.filter(\"preprocess\", \"postprocess\"):\n        >>>     output = transform(signal.clone(), **kwargs)\n\n        Parameters\n        ----------\n        *names : list\n            List of transforms, identified by name, to apply to signal.\n        \"\"\"\n        old_transforms = self.transforms_to_apply\n        self.transforms_to_apply = names\n        yield\n        self.transforms_to_apply = old_transforms\n\n    def _transform(self, signal, **kwargs):\n        for transform in self.transforms:\n            if any([x in transform.name for x in self.transforms_to_apply]):\n                signal = transform(signal, **kwargs)\n        return signal\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal = None):\n        parameters = {}\n        for transform in self.transforms:\n            parameters.update(transform.instantiate(state, signal=signal))\n        return parameters\n\n    def __getitem__(self, idx):\n        return self.transforms[idx]\n\n    def __len__(self):\n        return len(self.transforms)\n\n    def __iter__(self):\n        for transform in self.transforms:\n            yield transform\n\n\nclass Choose(Compose):\n    \"\"\"Choose logic is the same as :py:func:`audiotools.data.transforms.Compose`,\n    but instead of applying all the transforms in sequence, it applies just a single transform,\n    which is chosen for each item in the batch.\n\n    Parameters\n    ----------\n    *transforms : list\n        List of transforms to apply\n    weights : list\n        Probability of choosing any specific transform.\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n\n    Examples\n    --------\n\n    >>> transforms.Choose(tfm.LowPass(), tfm.HighPass())\n    \"\"\"\n\n    def __init__(\n        self,\n        *transforms: list,\n        weights: list = None,\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        super().__init__(*transforms, name=name, prob=prob)\n\n        if weights is None:\n            _len = len(self.transforms)\n            weights = [1 / _len for _ in range(_len)]\n        self.weights = np.array(weights)\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal = None):\n        kwargs = super()._instantiate(state, signal)\n        tfm_idx = list(range(len(self.transforms)))\n        tfm_idx = state.choice(tfm_idx, p=self.weights)\n        one_hot = []\n        for i, t in enumerate(self.transforms):\n            mask = kwargs[t.name][\"mask\"]\n            if mask.item():\n                kwargs[t.name][\"mask\"] = tt(i == tfm_idx)\n            one_hot.append(kwargs[t.name][\"mask\"])\n        kwargs[\"one_hot\"] = one_hot\n        return kwargs\n\n\nclass Repeat(Compose):\n    \"\"\"Repeatedly applies a given transform ``n_repeat`` times.\"\n\n    Parameters\n    ----------\n    transform : BaseTransform\n        Transform to repeat.\n    n_repeat : int, optional\n        Number of times to repeat transform, by default 1\n    \"\"\"\n\n    def __init__(\n        self,\n        transform,\n        n_repeat: int = 1,\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        transforms = [copy.copy(transform) for _ in range(n_repeat)]\n        super().__init__(transforms, name=name, prob=prob)\n\n        self.n_repeat = n_repeat\n\n\nclass RepeatUpTo(Choose):\n    \"\"\"Repeatedly applies a given transform up to ``max_repeat`` times.\"\n\n    Parameters\n    ----------\n    transform : BaseTransform\n        Transform to repeat.\n    max_repeat : int, optional\n        Max number of times to repeat transform, by default 1\n    weights : list\n        Probability of choosing any specific number up to ``max_repeat``.\n    \"\"\"\n\n    def __init__(\n        self,\n        transform,\n        max_repeat: int = 5,\n        weights: list = None,\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        transforms = []\n        for n in range(1, max_repeat):\n            transforms.append(Repeat(transform, n_repeat=n))\n        super().__init__(transforms, name=name, prob=prob, weights=weights)\n\n        self.max_repeat = max_repeat\n\n\nclass ClippingDistortion(BaseTransform):\n    \"\"\"Adds clipping distortion to signal. Corresponds\n    to :py:func:`audiotools.core.effects.EffectMixin.clip_distortion`.\n\n    Parameters\n    ----------\n    perc : tuple, optional\n        Clipping percentile. Values are between 0.0 to 1.0.\n        Typical values are 0.1 or below, by default (\"uniform\", 0.0, 0.1)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        perc: tuple = (\"uniform\", 0.0, 0.1),\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.perc = perc\n\n    def _instantiate(self, state: RandomState):\n        return {\"perc\": util.sample_from_dist(self.perc, state)}\n\n    def _transform(self, signal, perc):\n        return signal.clip_distortion(perc)\n\n\nclass Equalizer(BaseTransform):\n    \"\"\"Applies an equalization curve to the audio signal. Corresponds\n    to :py:func:`audiotools.core.effects.EffectMixin.equalizer`.\n\n    Parameters\n    ----------\n    eq_amount : tuple, optional\n        The maximum dB cut to apply to the audio in any band,\n        by default (\"const\", 1.0 dB)\n    n_bands : int, optional\n        Number of bands in EQ, by default 6\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        eq_amount: tuple = (\"const\", 1.0),\n        n_bands: int = 6,\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.eq_amount = eq_amount\n        self.n_bands = n_bands\n\n    def _instantiate(self, state: RandomState):\n        eq_amount = util.sample_from_dist(self.eq_amount, state)\n        eq = -eq_amount * state.rand(self.n_bands)\n        return {\"eq\": eq}\n\n    def _transform(self, signal, eq):\n        return signal.equalizer(eq)\n\n\nclass Quantization(BaseTransform):\n    \"\"\"Applies quantization to the input waveform. Corresponds\n    to :py:func:`audiotools.core.effects.EffectMixin.quantization`.\n\n    Parameters\n    ----------\n    channels : tuple, optional\n        Number of evenly spaced quantization channels to quantize\n        to, by default (\"choice\", [8, 32, 128, 256, 1024])\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        channels: tuple = (\"choice\", [8, 32, 128, 256, 1024]),\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.channels = channels\n\n    def _instantiate(self, state: RandomState):\n        return {\"channels\": util.sample_from_dist(self.channels, state)}\n\n    def _transform(self, signal, channels):\n        return signal.quantization(channels)\n\n\nclass MuLawQuantization(BaseTransform):\n    \"\"\"Applies mu-law quantization to the input waveform. Corresponds\n    to :py:func:`audiotools.core.effects.EffectMixin.mulaw_quantization`.\n\n    Parameters\n    ----------\n    channels : tuple, optional\n        Number of mu-law spaced quantization channels to quantize\n        to, by default (\"choice\", [8, 32, 128, 256, 1024])\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        channels: tuple = (\"choice\", [8, 32, 128, 256, 1024]),\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.channels = channels\n\n    def _instantiate(self, state: RandomState):\n        return {\"channels\": util.sample_from_dist(self.channels, state)}\n\n    def _transform(self, signal, channels):\n        return signal.mulaw_quantization(channels)\n\n\nclass NoiseFloor(BaseTransform):\n    \"\"\"Adds a noise floor of Gaussian noise to the signal at a specified\n    dB.\n\n    Parameters\n    ----------\n    db : tuple, optional\n        Level of noise to add to signal, by default (\"const\", -50.0)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        db: tuple = (\"const\", -50.0),\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.db = db\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal):\n        db = util.sample_from_dist(self.db, state)\n        audio_data = state.randn(signal.num_channels, signal.signal_length)\n        nz_signal = AudioSignal(audio_data, signal.sample_rate)\n        nz_signal.normalize(db)\n        return {\"nz_signal\": nz_signal}\n\n    def _transform(self, signal, nz_signal):\n        # Clone bg_signal so that transform can be repeatedly applied\n        # to different signals with the same effect.\n        return signal + nz_signal\n\n\nclass BackgroundNoise(BaseTransform):\n    \"\"\"Adds background noise from audio specified by a set of CSV files.\n    A valid CSV file looks like, and is typically generated by\n    :py:func:`audiotools.data.preprocess.create_csv`:\n\n    ..  csv-table::\n        :header: path\n\n        room_tone/m6_script2_clean.wav\n        room_tone/m6_script2_cleanraw.wav\n        room_tone/m6_script2_ipad_balcony1.wav\n        room_tone/m6_script2_ipad_bedroom1.wav\n        room_tone/m6_script2_ipad_confroom1.wav\n        room_tone/m6_script2_ipad_confroom2.wav\n        room_tone/m6_script2_ipad_livingroom1.wav\n        room_tone/m6_script2_ipad_office1.wav\n\n    ..  note::\n        All paths are relative to an environment variable called ``PATH_TO_DATA``,\n        so that CSV files are portable across machines where data may be\n        located in different places.\n\n    This transform calls :py:func:`audiotools.core.effects.EffectMixin.mix`\n    and :py:func:`audiotools.core.effects.EffectMixin.equalizer` under the\n    hood.\n\n    Parameters\n    ----------\n    snr : tuple, optional\n        Signal-to-noise ratio, by default (\"uniform\", 10.0, 30.0)\n    sources : List[str], optional\n        Sources containing folders, or CSVs with paths to audio files,\n        by default None\n    weights : List[float], optional\n        Weights to sample audio files from each source, by default None\n    eq_amount : tuple, optional\n        Amount of equalization to apply, by default (\"const\", 1.0)\n    n_bands : int, optional\n        Number of bands in equalizer, by default 3\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    loudness_cutoff : float, optional\n        Loudness cutoff when loading from audio files, by default None\n    \"\"\"\n\n    def __init__(\n        self,\n        snr: tuple = (\"uniform\", 10.0, 30.0),\n        sources: List[str] = None,\n        weights: List[float] = None,\n        eq_amount: tuple = (\"const\", 1.0),\n        n_bands: int = 3,\n        name: str = None,\n        prob: float = 1.0,\n        loudness_cutoff: float = None,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.snr = snr\n        self.eq_amount = eq_amount\n        self.n_bands = n_bands\n        self.loader = AudioLoader(sources, weights)\n        self.loudness_cutoff = loudness_cutoff\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal):\n        eq_amount = util.sample_from_dist(self.eq_amount, state)\n        eq = -eq_amount * state.rand(self.n_bands)\n        snr = util.sample_from_dist(self.snr, state)\n\n        bg_signal = self.loader(\n            state,\n            signal.sample_rate,\n            duration=signal.signal_duration,\n            loudness_cutoff=self.loudness_cutoff,\n            num_channels=signal.num_channels,\n        )[\"signal\"]\n\n        return {\"eq\": eq, \"bg_signal\": bg_signal, \"snr\": snr}\n\n    def _transform(self, signal, bg_signal, snr, eq):\n        # Clone bg_signal so that transform can be repeatedly applied\n        # to different signals with the same effect.\n        return signal.mix(bg_signal.clone(), snr, eq)\n\n\nclass CrossTalk(BaseTransform):\n    \"\"\"Adds crosstalk between speakers, whose audio is drawn from a CSV file\n    that was produced via :py:func:`audiotools.data.preprocess.create_csv`.\n\n    This transform calls :py:func:`audiotools.core.effects.EffectMixin.mix`\n    under the hood.\n\n    Parameters\n    ----------\n    snr : tuple, optional\n        How loud cross-talk speaker is relative to original signal in dB,\n        by default (\"uniform\", 0.0, 10.0)\n    sources : List[str], optional\n        Sources containing folders, or CSVs with paths to audio files,\n        by default None\n    weights : List[float], optional\n        Weights to sample audio files from each source, by default None\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    loudness_cutoff : float, optional\n        Loudness cutoff when loading from audio files, by default -40\n    \"\"\"\n\n    def __init__(\n        self,\n        snr: tuple = (\"uniform\", 0.0, 10.0),\n        sources: List[str] = None,\n        weights: List[float] = None,\n        name: str = None,\n        prob: float = 1.0,\n        loudness_cutoff: float = -40,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.snr = snr\n        self.loader = AudioLoader(sources, weights)\n        self.loudness_cutoff = loudness_cutoff\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal):\n        snr = util.sample_from_dist(self.snr, state)\n        crosstalk_signal = self.loader(\n            state,\n            signal.sample_rate,\n            duration=signal.signal_duration,\n            loudness_cutoff=self.loudness_cutoff,\n            num_channels=signal.num_channels,\n        )[\"signal\"]\n\n        return {\"crosstalk_signal\": crosstalk_signal, \"snr\": snr}\n\n    def _transform(self, signal, crosstalk_signal, snr):\n        # Clone bg_signal so that transform can be repeatedly applied\n        # to different signals with the same effect.\n        loudness = signal.loudness()\n        mix = signal.mix(crosstalk_signal.clone(), snr)\n        mix.normalize(loudness)\n        return mix\n\n\nclass RoomImpulseResponse(BaseTransform):\n    \"\"\"Convolves signal with a room impulse response, at a specified\n    direct-to-reverberant ratio, with equalization applied. Room impulse\n    response data is drawn from a CSV file that was produced via\n    :py:func:`audiotools.data.preprocess.create_csv`.\n\n    This transform calls :py:func:`audiotools.core.effects.EffectMixin.apply_ir`\n    under the hood.\n\n    Parameters\n    ----------\n    drr : tuple, optional\n        _description_, by default (\"uniform\", 0.0, 30.0)\n    sources : List[str], optional\n        Sources containing folders, or CSVs with paths to audio files,\n        by default None\n    weights : List[float], optional\n        Weights to sample audio files from each source, by default None\n    eq_amount : tuple, optional\n        Amount of equalization to apply, by default (\"const\", 1.0)\n    n_bands : int, optional\n        Number of bands in equalizer, by default 6\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    use_original_phase : bool, optional\n        Whether or not to use the original phase, by default False\n    offset : float, optional\n        Offset from each impulse response file to use, by default 0.0\n    duration : float, optional\n        Duration of each impulse response, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        drr: tuple = (\"uniform\", 0.0, 30.0),\n        sources: List[str] = None,\n        weights: List[float] = None,\n        eq_amount: tuple = (\"const\", 1.0),\n        n_bands: int = 6,\n        name: str = None,\n        prob: float = 1.0,\n        use_original_phase: bool = False,\n        offset: float = 0.0,\n        duration: float = 1.0,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.drr = drr\n        self.eq_amount = eq_amount\n        self.n_bands = n_bands\n        self.use_original_phase = use_original_phase\n\n        self.loader = AudioLoader(sources, weights)\n        self.offset = offset\n        self.duration = duration\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal = None):\n        eq_amount = util.sample_from_dist(self.eq_amount, state)\n        eq = -eq_amount * state.rand(self.n_bands)\n        drr = util.sample_from_dist(self.drr, state)\n\n        ir_signal = self.loader(\n            state,\n            signal.sample_rate,\n            offset=self.offset,\n            duration=self.duration,\n            loudness_cutoff=None,\n            num_channels=signal.num_channels,\n        )[\"signal\"]\n        ir_signal.zero_pad_to(signal.sample_rate)\n\n        return {\"eq\": eq, \"ir_signal\": ir_signal, \"drr\": drr}\n\n    def _transform(self, signal, ir_signal, drr, eq):\n        # Clone ir_signal so that transform can be repeatedly applied\n        # to different signals with the same effect.\n        return signal.apply_ir(\n            ir_signal.clone(), drr, eq, use_original_phase=self.use_original_phase\n        )\n\n\nclass VolumeChange(BaseTransform):\n    \"\"\"Changes the volume of the input signal.\n\n    Uses :py:func:`audiotools.core.effects.EffectMixin.volume_change`.\n\n    Parameters\n    ----------\n    db : tuple, optional\n        Change in volume in decibels, by default (\"uniform\", -12.0, 0.0)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        db: tuple = (\"uniform\", -12.0, 0.0),\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        super().__init__(name=name, prob=prob)\n        self.db = db\n\n    def _instantiate(self, state: RandomState):\n        return {\"db\": util.sample_from_dist(self.db, state)}\n\n    def _transform(self, signal, db):\n        return signal.volume_change(db)\n\n\nclass VolumeNorm(BaseTransform):\n    \"\"\"Normalizes the volume of the excerpt to a specified decibel.\n\n    Uses :py:func:`audiotools.core.effects.EffectMixin.normalize`.\n\n    Parameters\n    ----------\n    db : tuple, optional\n        dB to normalize signal to, by default (\"const\", -24)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        db: tuple = (\"const\", -24),\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.db = db\n\n    def _instantiate(self, state: RandomState):\n        return {\"db\": util.sample_from_dist(self.db, state)}\n\n    def _transform(self, signal, db):\n        return signal.normalize(db)\n\n\nclass GlobalVolumeNorm(BaseTransform):\n    \"\"\"Similar to :py:func:`audiotools.data.transforms.VolumeNorm`, this\n    transform also normalizes the volume of a signal, but it uses\n    the volume of the entire audio file the loaded excerpt comes from,\n    rather than the volume of just the excerpt. The volume of the\n    entire audio file is expected in ``signal.metadata[\"loudness\"]``.\n    If loading audio from a CSV generated by :py:func:`audiotools.data.preprocess.create_csv`\n    with ``loudness = True``, like the following:\n\n    ..  csv-table::\n        :header: path,loudness\n\n        daps/produced/f1_script1_produced.wav,-16.299999237060547\n        daps/produced/f1_script2_produced.wav,-16.600000381469727\n        daps/produced/f1_script3_produced.wav,-17.299999237060547\n        daps/produced/f1_script4_produced.wav,-16.100000381469727\n        daps/produced/f1_script5_produced.wav,-16.700000762939453\n        daps/produced/f3_script1_produced.wav,-16.5\n\n    The ``AudioLoader`` will automatically load the loudness column into\n    the metadata of the signal.\n\n    Uses :py:func:`audiotools.core.effects.EffectMixin.volume_change`.\n\n    Parameters\n    ----------\n    db : tuple, optional\n        dB to normalize signal to, by default (\"const\", -24)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        db: tuple = (\"const\", -24),\n        name: str = None,\n        prob: float = 1.0,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.db = db\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal):\n        if \"loudness\" not in signal.metadata:\n            db_change = 0.0\n        elif float(signal.metadata[\"loudness\"]) == float(\"-inf\"):\n            db_change = 0.0\n        else:\n            db = util.sample_from_dist(self.db, state)\n            db_change = db - float(signal.metadata[\"loudness\"])\n\n        return {\"db\": db_change}\n\n    def _transform(self, signal, db):\n        return signal.volume_change(db)\n\n\nclass Silence(BaseTransform):\n    \"\"\"Zeros out the signal with some probability.\n\n    Parameters\n    ----------\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 0.1\n    \"\"\"\n\n    def __init__(self, name: str = None, prob: float = 0.1):\n        super().__init__(name=name, prob=prob)\n\n    def _transform(self, signal):\n        _loudness = signal._loudness\n        signal = AudioSignal(\n            torch.zeros_like(signal.audio_data),\n            sample_rate=signal.sample_rate,\n            stft_params=signal.stft_params,\n        )\n        # So that the amound of noise added is as if it wasn't silenced.\n        # TODO: improve this hack\n        signal._loudness = _loudness\n\n        return signal\n\n\nclass LowPass(BaseTransform):\n    \"\"\"Applies a LowPass filter.\n\n    Uses :py:func:`audiotools.core.dsp.DSPMixin.low_pass`.\n\n    Parameters\n    ----------\n    cutoff : tuple, optional\n        Cutoff frequency distribution,\n        by default ``(\"choice\", [4000, 8000, 16000])``\n    zeros : int, optional\n        Number of zero-crossings in filter, argument to\n        ``julius.LowPassFilters``, by default 51\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        cutoff: tuple = (\"choice\", [4000, 8000, 16000]),\n        zeros: int = 51,\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.cutoff = cutoff\n        self.zeros = zeros\n\n    def _instantiate(self, state: RandomState):\n        return {\"cutoff\": util.sample_from_dist(self.cutoff, state)}\n\n    def _transform(self, signal, cutoff):\n        return signal.low_pass(cutoff, zeros=self.zeros)\n\n\nclass HighPass(BaseTransform):\n    \"\"\"Applies a HighPass filter.\n\n    Uses :py:func:`audiotools.core.dsp.DSPMixin.high_pass`.\n\n    Parameters\n    ----------\n    cutoff : tuple, optional\n        Cutoff frequency distribution,\n        by default ``(\"choice\", [50, 100, 250, 500, 1000])``\n    zeros : int, optional\n        Number of zero-crossings in filter, argument to\n        ``julius.LowPassFilters``, by default 51\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        cutoff: tuple = (\"choice\", [50, 100, 250, 500, 1000]),\n        zeros: int = 51,\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(name=name, prob=prob)\n\n        self.cutoff = cutoff\n        self.zeros = zeros\n\n    def _instantiate(self, state: RandomState):\n        return {\"cutoff\": util.sample_from_dist(self.cutoff, state)}\n\n    def _transform(self, signal, cutoff):\n        return signal.high_pass(cutoff, zeros=self.zeros)\n\n\nclass RescaleAudio(BaseTransform):\n    \"\"\"Rescales the audio so it is in between ``-val`` and ``val``\n    only if the original audio exceeds those bounds. Useful if\n    transforms have caused the audio to clip.\n\n    Uses :py:func:`audiotools.core.effects.EffectMixin.ensure_max_of_audio`.\n\n    Parameters\n    ----------\n    val : float, optional\n        Max absolute value of signal, by default 1.0\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(self, val: float = 1.0, name: str = None, prob: float = 1):\n        super().__init__(name=name, prob=prob)\n\n        self.val = val\n\n    def _transform(self, signal):\n        return signal.ensure_max_of_audio(self.val)\n\n\nclass ShiftPhase(SpectralTransform):\n    \"\"\"Shifts the phase of the audio.\n\n    Uses :py:func:`audiotools.core.dsp.DSPMixin.shift)phase`.\n\n    Parameters\n    ----------\n    shift : tuple, optional\n        How much to shift phase by, by default (\"uniform\", -np.pi, np.pi)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        shift: tuple = (\"uniform\", -np.pi, np.pi),\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(name=name, prob=prob)\n        self.shift = shift\n\n    def _instantiate(self, state: RandomState):\n        return {\"shift\": util.sample_from_dist(self.shift, state)}\n\n    def _transform(self, signal, shift):\n        return signal.shift_phase(shift)\n\n\nclass InvertPhase(ShiftPhase):\n    \"\"\"Inverts the phase of the audio.\n\n    Uses :py:func:`audiotools.core.dsp.DSPMixin.shift_phase`.\n\n    Parameters\n    ----------\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(self, name: str = None, prob: float = 1):\n        super().__init__(shift=(\"const\", np.pi), name=name, prob=prob)\n\n\nclass CorruptPhase(SpectralTransform):\n    \"\"\"Corrupts the phase of the audio.\n\n    Uses :py:func:`audiotools.core.dsp.DSPMixin.corrupt_phase`.\n\n    Parameters\n    ----------\n    scale : tuple, optional\n        How much to corrupt phase by, by default (\"uniform\", 0, np.pi)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self, scale: tuple = (\"uniform\", 0, np.pi), name: str = None, prob: float = 1\n    ):\n        super().__init__(name=name, prob=prob)\n        self.scale = scale\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal = None):\n        scale = util.sample_from_dist(self.scale, state)\n        corruption = state.normal(scale=scale, size=signal.phase.shape[1:])\n        return {\"corruption\": corruption.astype(\"float32\")}\n\n    def _transform(self, signal, corruption):\n        return signal.shift_phase(shift=corruption)\n\n\nclass FrequencyMask(SpectralTransform):\n    \"\"\"Masks a band of frequencies at a center frequency\n    from the audio.\n\n    Uses :py:func:`audiotools.core.dsp.DSPMixin.mask_frequencies`.\n\n    Parameters\n    ----------\n    f_center : tuple, optional\n        Center frequency between 0.0 and 1.0 (Nyquist), by default (\"uniform\", 0.0, 1.0)\n    f_width : tuple, optional\n        Width of zero'd out band, by default (\"const\", 0.1)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        f_center: tuple = (\"uniform\", 0.0, 1.0),\n        f_width: tuple = (\"const\", 0.1),\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(name=name, prob=prob)\n        self.f_center = f_center\n        self.f_width = f_width\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal):\n        f_center = util.sample_from_dist(self.f_center, state)\n        f_width = util.sample_from_dist(self.f_width, state)\n\n        fmin = max(f_center - (f_width / 2), 0.0)\n        fmax = min(f_center + (f_width / 2), 1.0)\n\n        fmin_hz = (signal.sample_rate / 2) * fmin\n        fmax_hz = (signal.sample_rate / 2) * fmax\n\n        return {\"fmin_hz\": fmin_hz, \"fmax_hz\": fmax_hz}\n\n    def _transform(self, signal, fmin_hz: float, fmax_hz: float):\n        return signal.mask_frequencies(fmin_hz=fmin_hz, fmax_hz=fmax_hz)\n\n\nclass TimeMask(SpectralTransform):\n    \"\"\"Masks out contiguous time-steps from signal.\n\n    Uses :py:func:`audiotools.core.dsp.DSPMixin.mask_timesteps`.\n\n    Parameters\n    ----------\n    t_center : tuple, optional\n        Center time in terms of 0.0 and 1.0 (duration of signal),\n        by default (\"uniform\", 0.0, 1.0)\n    t_width : tuple, optional\n        Width of dropped out portion, by default (\"const\", 0.025)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        t_center: tuple = (\"uniform\", 0.0, 1.0),\n        t_width: tuple = (\"const\", 0.025),\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(name=name, prob=prob)\n        self.t_center = t_center\n        self.t_width = t_width\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal):\n        t_center = util.sample_from_dist(self.t_center, state)\n        t_width = util.sample_from_dist(self.t_width, state)\n\n        tmin = max(t_center - (t_width / 2), 0.0)\n        tmax = min(t_center + (t_width / 2), 1.0)\n\n        tmin_s = signal.signal_duration * tmin\n        tmax_s = signal.signal_duration * tmax\n        return {\"tmin_s\": tmin_s, \"tmax_s\": tmax_s}\n\n    def _transform(self, signal, tmin_s: float, tmax_s: float):\n        return signal.mask_timesteps(tmin_s=tmin_s, tmax_s=tmax_s)\n\n\nclass MaskLowMagnitudes(SpectralTransform):\n    \"\"\"Masks low magnitude regions out of signal.\n\n    Uses :py:func:`audiotools.core.dsp.DSPMixin.mask_low_magnitudes`.\n\n    Parameters\n    ----------\n    db_cutoff : tuple, optional\n        Decibel value for which things below it will be masked away,\n        by default (\"uniform\", -10, 10)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        db_cutoff: tuple = (\"uniform\", -10, 10),\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(name=name, prob=prob)\n        self.db_cutoff = db_cutoff\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal = None):\n        return {\"db_cutoff\": util.sample_from_dist(self.db_cutoff, state)}\n\n    def _transform(self, signal, db_cutoff: float):\n        return signal.mask_low_magnitudes(db_cutoff)\n\n\nclass Smoothing(BaseTransform):\n    \"\"\"Convolves the signal with a smoothing window.\n\n    Uses :py:func:`audiotools.core.effects.EffectMixin.convolve`.\n\n    Parameters\n    ----------\n    window_type : tuple, optional\n        Type of window to use, by default (\"const\", \"average\")\n    window_length : tuple, optional\n        Length of smoothing window, by\n        default (\"choice\", [8, 16, 32, 64, 128, 256, 512])\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        window_type: tuple = (\"const\", \"average\"),\n        window_length: tuple = (\"choice\", [8, 16, 32, 64, 128, 256, 512]),\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(name=name, prob=prob)\n        self.window_type = window_type\n        self.window_length = window_length\n\n    def _instantiate(self, state: RandomState, signal: AudioSignal = None):\n        window_type = util.sample_from_dist(self.window_type, state)\n        window_length = util.sample_from_dist(self.window_length, state)\n        window = signal.get_window(\n            window_type=window_type, window_length=window_length, device=\"cpu\"\n        )\n        return {\"window\": AudioSignal(window, signal.sample_rate)}\n\n    def _transform(self, signal, window):\n        sscale = signal.audio_data.abs().max(dim=-1, keepdim=True).values\n        sscale[sscale == 0.0] = 1.0\n\n        out = signal.convolve(window)\n\n        oscale = out.audio_data.abs().max(dim=-1, keepdim=True).values\n        oscale[oscale == 0.0] = 1.0\n\n        out = out * (sscale / oscale)\n        return out\n\n\nclass TimeNoise(TimeMask):\n    \"\"\"Similar to :py:func:`audiotools.data.transforms.TimeMask`, but\n    replaces with noise instead of zeros.\n\n    Parameters\n    ----------\n    t_center : tuple, optional\n        Center time in terms of 0.0 and 1.0 (duration of signal),\n        by default (\"uniform\", 0.0, 1.0)\n    t_width : tuple, optional\n        Width of dropped out portion, by default (\"const\", 0.025)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        t_center: tuple = (\"uniform\", 0.0, 1.0),\n        t_width: tuple = (\"const\", 0.025),\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(t_center=t_center, t_width=t_width, name=name, prob=prob)\n\n    def _transform(self, signal, tmin_s: float, tmax_s: float):\n        signal = signal.mask_timesteps(tmin_s=tmin_s, tmax_s=tmax_s, val=0.0)\n        mag, phase = signal.magnitude, signal.phase\n\n        mag_r, phase_r = torch.randn_like(mag), torch.randn_like(phase)\n        mask = (mag == 0.0) * (phase == 0.0)\n\n        mag[mask] = mag_r[mask]\n        phase[mask] = phase_r[mask]\n\n        signal.magnitude = mag\n        signal.phase = phase\n        return signal\n\n\nclass FrequencyNoise(FrequencyMask):\n    \"\"\"Similar to :py:func:`audiotools.data.transforms.FrequencyMask`, but\n    replaces with noise instead of zeros.\n\n    Parameters\n    ----------\n    f_center : tuple, optional\n        Center frequency between 0.0 and 1.0 (Nyquist), by default (\"uniform\", 0.0, 1.0)\n    f_width : tuple, optional\n        Width of zero'd out band, by default (\"const\", 0.1)\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        f_center: tuple = (\"uniform\", 0.0, 1.0),\n        f_width: tuple = (\"const\", 0.1),\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(f_center=f_center, f_width=f_width, name=name, prob=prob)\n\n    def _transform(self, signal, fmin_hz: float, fmax_hz: float):\n        signal = signal.mask_frequencies(fmin_hz=fmin_hz, fmax_hz=fmax_hz)\n        mag, phase = signal.magnitude, signal.phase\n\n        mag_r, phase_r = torch.randn_like(mag), torch.randn_like(phase)\n        mask = (mag == 0.0) * (phase == 0.0)\n\n        mag[mask] = mag_r[mask]\n        phase[mask] = phase_r[mask]\n\n        signal.magnitude = mag\n        signal.phase = phase\n        return signal\n\n\nclass SpectralDenoising(Equalizer):\n    \"\"\"Applies denoising algorithm detailed in\n    :py:func:`audiotools.ml.layers.spectral_gate.SpectralGate`,\n    using a randomly generated noise signal for denoising.\n\n    Parameters\n    ----------\n    eq_amount : tuple, optional\n        Amount of eq to apply to noise signal, by default (\"const\", 1.0)\n    denoise_amount : tuple, optional\n        Amount to denoise by, by default (\"uniform\", 0.8, 1.0)\n    nz_volume : float, optional\n        Volume of noise to denoise with, by default -40\n    n_bands : int, optional\n        Number of bands in equalizer, by default 6\n    n_freq : int, optional\n        Number of frequency bins to smooth by, by default 3\n    n_time : int, optional\n        Number of time bins to smooth by, by default 5\n    name : str, optional\n        Name of this transform, used to identify it in the dictionary\n        produced by ``self.instantiate``, by default None\n    prob : float, optional\n        Probability of applying this transform, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self,\n        eq_amount: tuple = (\"const\", 1.0),\n        denoise_amount: tuple = (\"uniform\", 0.8, 1.0),\n        nz_volume: float = -40,\n        n_bands: int = 6,\n        n_freq: int = 3,\n        n_time: int = 5,\n        name: str = None,\n        prob: float = 1,\n    ):\n        super().__init__(eq_amount=eq_amount, n_bands=n_bands, name=name, prob=prob)\n\n        self.nz_volume = nz_volume\n        self.denoise_amount = denoise_amount\n        self.spectral_gate = ml.layers.SpectralGate(n_freq, n_time)\n\n    def _transform(self, signal, nz, eq, denoise_amount):\n        nz = nz.normalize(self.nz_volume).equalizer(eq)\n        self.spectral_gate = self.spectral_gate.to(signal.device)\n        signal = self.spectral_gate(signal, nz, denoise_amount)\n        return signal\n\n    def _instantiate(self, state: RandomState):\n        kwargs = super()._instantiate(state)\n        kwargs[\"denoise_amount\"] = util.sample_from_dist(self.denoise_amount, state)\n        kwargs[\"nz\"] = AudioSignal(state.randn(22050), 44100)\n        return kwargs\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/metrics/__init__.py",
    "content": "\"\"\"\nFunctions for comparing AudioSignal objects to one another.\n\"\"\"  # fmt: skip\nfrom . import distance\nfrom . import quality\nfrom . import spectral\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/metrics/distance.py",
    "content": "import torch\nfrom torch import nn\n\nfrom .. import AudioSignal\n\n\nclass L1Loss(nn.L1Loss):\n    \"\"\"L1 Loss between AudioSignals. Defaults\n    to comparing ``audio_data``, but any\n    attribute of an AudioSignal can be used.\n\n    Parameters\n    ----------\n    attribute : str, optional\n        Attribute of signal to compare, defaults to ``audio_data``.\n    weight : float, optional\n        Weight of this loss, defaults to 1.0.\n    \"\"\"\n\n    def __init__(self, attribute: str = \"audio_data\", weight: float = 1.0, **kwargs):\n        self.attribute = attribute\n        self.weight = weight\n        super().__init__(**kwargs)\n\n    def forward(self, x: AudioSignal, y: AudioSignal):\n        \"\"\"\n        Parameters\n        ----------\n        x : AudioSignal\n            Estimate AudioSignal\n        y : AudioSignal\n            Reference AudioSignal\n\n        Returns\n        -------\n        torch.Tensor\n            L1 loss between AudioSignal attributes.\n        \"\"\"\n        if isinstance(x, AudioSignal):\n            x = getattr(x, self.attribute)\n            y = getattr(y, self.attribute)\n        return super().forward(x, y)\n\n\nclass SISDRLoss(nn.Module):\n    \"\"\"\n    Computes the Scale-Invariant Source-to-Distortion Ratio between a batch\n    of estimated and reference audio signals or aligned features.\n\n    Parameters\n    ----------\n    scaling : int, optional\n        Whether to use scale-invariant (True) or\n        signal-to-noise ratio (False), by default True\n    reduction : str, optional\n        How to reduce across the batch (either 'mean',\n        'sum', or none).], by default ' mean'\n    zero_mean : int, optional\n        Zero mean the references and estimates before\n        computing the loss, by default True\n    clip_min : int, optional\n        The minimum possible loss value. Helps network\n        to not focus on making already good examples better, by default None\n    weight : float, optional\n        Weight of this loss, defaults to 1.0.\n    \"\"\"\n\n    def __init__(\n        self,\n        scaling: int = True,\n        reduction: str = \"mean\",\n        zero_mean: int = True,\n        clip_min: int = None,\n        weight: float = 1.0,\n    ):\n        self.scaling = scaling\n        self.reduction = reduction\n        self.zero_mean = zero_mean\n        self.clip_min = clip_min\n        self.weight = weight\n        super().__init__()\n\n    def forward(self, x: AudioSignal, y: AudioSignal):\n        eps = 1e-8\n        # nb, nc, nt\n        if isinstance(x, AudioSignal):\n            references = x.audio_data\n            estimates = y.audio_data\n        else:\n            references = x\n            estimates = y\n\n        nb = references.shape[0]\n        references = references.reshape(nb, 1, -1).permute(0, 2, 1)\n        estimates = estimates.reshape(nb, 1, -1).permute(0, 2, 1)\n\n        # samples now on axis 1\n        if self.zero_mean:\n            mean_reference = references.mean(dim=1, keepdim=True)\n            mean_estimate = estimates.mean(dim=1, keepdim=True)\n        else:\n            mean_reference = 0\n            mean_estimate = 0\n\n        _references = references - mean_reference\n        _estimates = estimates - mean_estimate\n\n        references_projection = (_references**2).sum(dim=-2) + eps\n        references_on_estimates = (_estimates * _references).sum(dim=-2) + eps\n\n        scale = (\n            (references_on_estimates / references_projection).unsqueeze(1)\n            if self.scaling\n            else 1\n        )\n\n        e_true = scale * _references\n        e_res = _estimates - e_true\n\n        signal = (e_true**2).sum(dim=1)\n        noise = (e_res**2).sum(dim=1)\n        sdr = -10 * torch.log10(signal / noise + eps)\n\n        if self.clip_min is not None:\n            sdr = torch.clamp(sdr, min=self.clip_min)\n\n        if self.reduction == \"mean\":\n            sdr = sdr.mean()\n        elif self.reduction == \"sum\":\n            sdr = sdr.sum()\n        return sdr\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/metrics/quality.py",
    "content": "import os\n\nimport numpy as np\nimport torch\n\nfrom .. import AudioSignal\n\n\ndef stoi(\n    estimates: AudioSignal,\n    references: AudioSignal,\n    extended: int = False,\n):\n    \"\"\"Short term objective intelligibility\n    Computes the STOI (See [1][2]) of a denoised signal compared to a clean\n    signal, The output is expected to have a monotonic relation with the\n    subjective speech-intelligibility, where a higher score denotes better\n    speech intelligibility. Uses pystoi under the hood.\n\n    Parameters\n    ----------\n    estimates : AudioSignal\n        Denoised speech\n    references : AudioSignal\n        Clean original speech\n    extended : int, optional\n        Boolean, whether to use the extended STOI described in [3], by default False\n\n    Returns\n    -------\n    Tensor[float]\n        Short time objective intelligibility measure between clean and\n        denoised speech\n\n    References\n    ----------\n    1.  C.H.Taal, R.C.Hendriks, R.Heusdens, J.Jensen 'A Short-Time\n        Objective Intelligibility Measure for Time-Frequency Weighted Noisy\n        Speech', ICASSP 2010, Texas, Dallas.\n    2.  C.H.Taal, R.C.Hendriks, R.Heusdens, J.Jensen 'An Algorithm for\n        Intelligibility Prediction of Time-Frequency Weighted Noisy Speech',\n        IEEE Transactions on Audio, Speech, and Language Processing, 2011.\n    3.  Jesper Jensen and Cees H. Taal, 'An Algorithm for Predicting the\n        Intelligibility of Speech Masked by Modulated Noise Maskers',\n        IEEE Transactions on Audio, Speech and Language Processing, 2016.\n    \"\"\"\n    import pystoi\n\n    estimates = estimates.clone().to_mono()\n    references = references.clone().to_mono()\n\n    stois = []\n    for i in range(estimates.batch_size):\n        _stoi = pystoi.stoi(\n            references.audio_data[i, 0].detach().cpu().numpy(),\n            estimates.audio_data[i, 0].detach().cpu().numpy(),\n            references.sample_rate,\n            extended=extended,\n        )\n        stois.append(_stoi)\n    return torch.from_numpy(np.array(stois))\n\n\ndef pesq(\n    estimates: AudioSignal,\n    references: AudioSignal,\n    mode: str = \"wb\",\n    target_sr: float = 16000,\n):\n    \"\"\"_summary_\n\n    Parameters\n    ----------\n    estimates : AudioSignal\n        Degraded AudioSignal\n    references : AudioSignal\n        Reference AudioSignal\n    mode : str, optional\n        'wb' (wide-band) or 'nb' (narrow-band), by default \"wb\"\n    target_sr : float, optional\n        Target sample rate, by default 16000\n\n    Returns\n    -------\n    Tensor[float]\n        PESQ score: P.862.2 Prediction (MOS-LQO)\n    \"\"\"\n    from pesq import pesq as pesq_fn\n\n    estimates = estimates.clone().to_mono().resample(target_sr)\n    references = references.clone().to_mono().resample(target_sr)\n\n    pesqs = []\n    for i in range(estimates.batch_size):\n        _pesq = pesq_fn(\n            estimates.sample_rate,\n            references.audio_data[i, 0].detach().cpu().numpy(),\n            estimates.audio_data[i, 0].detach().cpu().numpy(),\n            mode,\n        )\n        pesqs.append(_pesq)\n    return torch.from_numpy(np.array(pesqs))\n\n\ndef visqol(\n    estimates: AudioSignal,\n    references: AudioSignal,\n    mode: str = \"audio\",\n):  # pragma: no cover\n    \"\"\"ViSQOL score.\n\n    Parameters\n    ----------\n    estimates : AudioSignal\n        Degraded AudioSignal\n    references : AudioSignal\n        Reference AudioSignal\n    mode : str, optional\n        'audio' or 'speech', by default 'audio'\n\n    Returns\n    -------\n    Tensor[float]\n        ViSQOL score (MOS-LQO)\n    \"\"\"\n    from visqol import visqol_lib_py\n    from visqol.pb2 import visqol_config_pb2\n    from visqol.pb2 import similarity_result_pb2\n\n    config = visqol_config_pb2.VisqolConfig()\n    if mode == \"audio\":\n        target_sr = 48000\n        config.options.use_speech_scoring = False\n        svr_model_path = \"libsvm_nu_svr_model.txt\"\n    elif mode == \"speech\":\n        target_sr = 16000\n        config.options.use_speech_scoring = True\n        svr_model_path = \"lattice_tcditugenmeetpackhref_ls2_nl60_lr12_bs2048_learn.005_ep2400_train1_7_raw.tflite\"\n    else:\n        raise ValueError(f\"Unrecognized mode: {mode}\")\n    config.audio.sample_rate = target_sr\n    config.options.svr_model_path = os.path.join(\n        os.path.dirname(visqol_lib_py.__file__), \"model\", svr_model_path\n    )\n\n    api = visqol_lib_py.VisqolApi()\n    api.Create(config)\n\n    estimates = estimates.clone().to_mono().resample(target_sr)\n    references = references.clone().to_mono().resample(target_sr)\n\n    visqols = []\n    for i in range(estimates.batch_size):\n        _visqol = api.Measure(\n            references.audio_data[i, 0].detach().cpu().numpy().astype(float),\n            estimates.audio_data[i, 0].detach().cpu().numpy().astype(float),\n        )\n        visqols.append(_visqol.moslqo)\n    return torch.from_numpy(np.array(visqols))\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/metrics/spectral.py",
    "content": "import typing\nfrom typing import List\n\nimport numpy as np\nfrom torch import nn\n\nfrom .. import AudioSignal\nfrom .. import STFTParams\n\n\nclass MultiScaleSTFTLoss(nn.Module):\n    \"\"\"Computes the multi-scale STFT loss from [1].\n\n    Parameters\n    ----------\n    window_lengths : List[int], optional\n        Length of each window of each STFT, by default [2048, 512]\n    loss_fn : typing.Callable, optional\n        How to compare each loss, by default nn.L1Loss()\n    clamp_eps : float, optional\n        Clamp on the log magnitude, below, by default 1e-5\n    mag_weight : float, optional\n        Weight of raw magnitude portion of loss, by default 1.0\n    log_weight : float, optional\n        Weight of log magnitude portion of loss, by default 1.0\n    pow : float, optional\n        Power to raise magnitude to before taking log, by default 2.0\n    weight : float, optional\n        Weight of this loss, by default 1.0\n    match_stride : bool, optional\n        Whether to match the stride of convolutional layers, by default False\n\n    References\n    ----------\n\n    1.  Engel, Jesse, Chenjie Gu, and Adam Roberts.\n        \"DDSP: Differentiable Digital Signal Processing.\"\n        International Conference on Learning Representations. 2019.\n    \"\"\"\n\n    def __init__(\n        self,\n        window_lengths: List[int] = [2048, 512],\n        loss_fn: typing.Callable = nn.L1Loss(),\n        clamp_eps: float = 1e-5,\n        mag_weight: float = 1.0,\n        log_weight: float = 1.0,\n        pow: float = 2.0,\n        weight: float = 1.0,\n        match_stride: bool = False,\n        window_type: str = None,\n    ):\n        super().__init__()\n        self.stft_params = [\n            STFTParams(\n                window_length=w,\n                hop_length=w // 4,\n                match_stride=match_stride,\n                window_type=window_type,\n            )\n            for w in window_lengths\n        ]\n        self.loss_fn = loss_fn\n        self.log_weight = log_weight\n        self.mag_weight = mag_weight\n        self.clamp_eps = clamp_eps\n        self.weight = weight\n        self.pow = pow\n\n    def forward(self, x: AudioSignal, y: AudioSignal):\n        \"\"\"Computes multi-scale STFT between an estimate and a reference\n        signal.\n\n        Parameters\n        ----------\n        x : AudioSignal\n            Estimate signal\n        y : AudioSignal\n            Reference signal\n\n        Returns\n        -------\n        torch.Tensor\n            Multi-scale STFT loss.\n        \"\"\"\n        loss = 0.0\n        for s in self.stft_params:\n            x.stft(s.window_length, s.hop_length, s.window_type)\n            y.stft(s.window_length, s.hop_length, s.window_type)\n            loss += self.log_weight * self.loss_fn(\n                x.magnitude.clamp(self.clamp_eps).pow(self.pow).log10(),\n                y.magnitude.clamp(self.clamp_eps).pow(self.pow).log10(),\n            )\n            loss += self.mag_weight * self.loss_fn(x.magnitude, y.magnitude)\n        return loss\n\n\nclass MelSpectrogramLoss(nn.Module):\n    \"\"\"Compute distance between mel spectrograms. Can be used\n    in a multi-scale way.\n\n    Parameters\n    ----------\n    n_mels : List[int]\n        Number of mels per STFT, by default [150, 80],\n    window_lengths : List[int], optional\n        Length of each window of each STFT, by default [2048, 512]\n    loss_fn : typing.Callable, optional\n        How to compare each loss, by default nn.L1Loss()\n    clamp_eps : float, optional\n        Clamp on the log magnitude, below, by default 1e-5\n    mag_weight : float, optional\n        Weight of raw magnitude portion of loss, by default 1.0\n    log_weight : float, optional\n        Weight of log magnitude portion of loss, by default 1.0\n    pow : float, optional\n        Power to raise magnitude to before taking log, by default 2.0\n    weight : float, optional\n        Weight of this loss, by default 1.0\n    match_stride : bool, optional\n        Whether to match the stride of convolutional layers, by default False\n    \"\"\"\n\n    def __init__(\n        self,\n        n_mels: List[int] = [150, 80],\n        window_lengths: List[int] = [2048, 512],\n        loss_fn: typing.Callable = nn.L1Loss(),\n        clamp_eps: float = 1e-5,\n        mag_weight: float = 1.0,\n        log_weight: float = 1.0,\n        pow: float = 2.0,\n        weight: float = 1.0,\n        match_stride: bool = False,\n        mel_fmin: List[float] = [0.0, 0.0],\n        mel_fmax: List[float] = [None, None],\n        window_type: str = None,\n    ):\n        super().__init__()\n        self.stft_params = [\n            STFTParams(\n                window_length=w,\n                hop_length=w // 4,\n                match_stride=match_stride,\n                window_type=window_type,\n            )\n            for w in window_lengths\n        ]\n        self.n_mels = n_mels\n        self.loss_fn = loss_fn\n        self.clamp_eps = clamp_eps\n        self.log_weight = log_weight\n        self.mag_weight = mag_weight\n        self.weight = weight\n        self.mel_fmin = mel_fmin\n        self.mel_fmax = mel_fmax\n        self.pow = pow\n\n    def forward(self, x: AudioSignal, y: AudioSignal):\n        \"\"\"Computes mel loss between an estimate and a reference\n        signal.\n\n        Parameters\n        ----------\n        x : AudioSignal\n            Estimate signal\n        y : AudioSignal\n            Reference signal\n\n        Returns\n        -------\n        torch.Tensor\n            Mel loss.\n        \"\"\"\n        loss = 0.0\n        for n_mels, fmin, fmax, s in zip(\n            self.n_mels, self.mel_fmin, self.mel_fmax, self.stft_params\n        ):\n            kwargs = {\n                \"window_length\": s.window_length,\n                \"hop_length\": s.hop_length,\n                \"window_type\": s.window_type,\n            }\n            x_mels = x.mel_spectrogram(n_mels, mel_fmin=fmin, mel_fmax=fmax, **kwargs)\n            y_mels = y.mel_spectrogram(n_mels, mel_fmin=fmin, mel_fmax=fmax, **kwargs)\n\n            loss += self.log_weight * self.loss_fn(\n                x_mels.clamp(self.clamp_eps).pow(self.pow).log10(),\n                y_mels.clamp(self.clamp_eps).pow(self.pow).log10(),\n            )\n            loss += self.mag_weight * self.loss_fn(x_mels, y_mels)\n        return loss\n\n\nclass PhaseLoss(nn.Module):\n    \"\"\"Difference between phase spectrograms.\n\n    Parameters\n    ----------\n    window_length : int, optional\n        Length of STFT window, by default 2048\n    hop_length : int, optional\n        Hop length of STFT window, by default 512\n    weight : float, optional\n        Weight of loss, by default 1.0\n    \"\"\"\n\n    def __init__(\n        self, window_length: int = 2048, hop_length: int = 512, weight: float = 1.0\n    ):\n        super().__init__()\n\n        self.weight = weight\n        self.stft_params = STFTParams(window_length, hop_length)\n\n    def forward(self, x: AudioSignal, y: AudioSignal):\n        \"\"\"Computes phase loss between an estimate and a reference\n        signal.\n\n        Parameters\n        ----------\n        x : AudioSignal\n            Estimate signal\n        y : AudioSignal\n            Reference signal\n\n        Returns\n        -------\n        torch.Tensor\n            Phase loss.\n        \"\"\"\n        s = self.stft_params\n        x.stft(s.window_length, s.hop_length, s.window_type)\n        y.stft(s.window_length, s.hop_length, s.window_type)\n\n        # Take circular difference\n        diff = x.phase - y.phase\n        diff[diff < -np.pi] += 2 * np.pi\n        diff[diff > np.pi] -= -2 * np.pi\n\n        # Scale true magnitude to weights in [0, 1]\n        x_min, x_max = x.magnitude.min(), x.magnitude.max()\n        weights = (x.magnitude - x_min) / (x_max - x_min)\n\n        # Take weighted mean of all phase errors\n        loss = ((weights * diff) ** 2).mean()\n        return loss\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/ml/__init__.py",
    "content": "from . import decorators\nfrom . import layers\nfrom .accelerator import Accelerator\nfrom .experiment import Experiment\nfrom .layers import BaseModel\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/ml/accelerator.py",
    "content": "import os\nimport typing\n\nimport torch\nimport torch.distributed as dist\nfrom torch.nn.parallel import DataParallel\nfrom torch.nn.parallel import DistributedDataParallel\n\nfrom ..data.datasets import ResumableDistributedSampler as DistributedSampler\nfrom ..data.datasets import ResumableSequentialSampler as SequentialSampler\n\n\nclass Accelerator:  # pragma: no cover\n    \"\"\"This class is used to prepare models and dataloaders for\n    usage with DDP or DP. Use the functions prepare_model, prepare_dataloader to\n    prepare the respective objects. In the case of models, they are moved to\n    the appropriate GPU and SyncBatchNorm is applied to them. In the case of\n    dataloaders, a sampler is created and the dataloader is initialized with\n    that sampler.\n\n    If the world size is 1, prepare_model and prepare_dataloader are\n    no-ops. If the environment variable ``LOCAL_RANK`` is not set, then the\n    script was launched without ``torchrun``, and ``DataParallel``\n    will be used instead of ``DistributedDataParallel`` (not recommended), if\n    the world size (number of GPUs) is greater than 1.\n\n    Parameters\n    ----------\n    amp : bool, optional\n        Whether or not to enable automatic mixed precision, by default False\n    \"\"\"\n\n    def __init__(self, amp: bool = False):\n        local_rank = os.getenv(\"LOCAL_RANK\", None)\n        self.world_size = torch.cuda.device_count()\n\n        self.use_ddp = self.world_size > 1 and local_rank is not None\n        self.use_dp = self.world_size > 1 and local_rank is None\n        self.device = \"cpu\" if self.world_size == 0 else \"cuda\"\n\n        if self.use_ddp:\n            local_rank = int(local_rank)\n            dist.init_process_group(\n                \"nccl\",\n                init_method=\"env://\",\n                world_size=self.world_size,\n                rank=local_rank,\n            )\n\n        self.local_rank = 0 if local_rank is None else local_rank\n        self.amp = amp\n\n        class DummyScaler:\n            def __init__(self):\n                pass\n\n            def step(self, optimizer):\n                optimizer.step()\n\n            def scale(self, loss):\n                return loss\n\n            def unscale_(self, optimizer):\n                return optimizer\n\n            def update(self):\n                pass\n\n        self.scaler = torch.cuda.amp.GradScaler() if amp else DummyScaler()\n        self.device_ctx = (\n            torch.cuda.device(self.local_rank) if torch.cuda.is_available() else None\n        )\n\n    def __enter__(self):\n        if self.device_ctx is not None:\n            self.device_ctx.__enter__()\n        return self\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        if self.device_ctx is not None:\n            self.device_ctx.__exit__(exc_type, exc_value, traceback)\n\n    def prepare_model(self, model: torch.nn.Module, **kwargs):\n        \"\"\"Prepares model for DDP or DP. The model is moved to\n        the device of the correct rank.\n\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model that is converted for DDP or DP.\n\n        Returns\n        -------\n        torch.nn.Module\n            Wrapped model, or original model if DDP and DP are turned off.\n        \"\"\"\n        model = model.to(self.device)\n        if self.use_ddp:\n            model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model)\n            model = DistributedDataParallel(\n                model, device_ids=[self.local_rank], **kwargs\n            )\n        elif self.use_dp:\n            model = DataParallel(model, **kwargs)\n        return model\n\n    # Automatic mixed-precision utilities\n    def autocast(self, *args, **kwargs):\n        \"\"\"Context manager for autocasting. Arguments\n        go to ``torch.cuda.amp.autocast``.\n        \"\"\"\n        return torch.cuda.amp.autocast(self.amp, *args, **kwargs)\n\n    def backward(self, loss: torch.Tensor):\n        \"\"\"Backwards pass, after scaling the loss if ``amp`` is\n        enabled.\n\n        Parameters\n        ----------\n        loss : torch.Tensor\n            Loss value.\n        \"\"\"\n        self.scaler.scale(loss).backward()\n\n    def step(self, optimizer: torch.optim.Optimizer):\n        \"\"\"Steps the optimizer, using a ``scaler`` if ``amp`` is\n        enabled.\n\n        Parameters\n        ----------\n        optimizer : torch.optim.Optimizer\n            Optimizer to step forward.\n        \"\"\"\n        self.scaler.step(optimizer)\n\n    def update(self):\n        \"\"\"Updates the scale factor.\"\"\"\n        self.scaler.update()\n\n    def prepare_dataloader(\n        self, dataset: typing.Iterable, start_idx: int = None, **kwargs\n    ):\n        \"\"\"Wraps a dataset with a DataLoader, using the correct sampler if DDP is\n        enabled.\n\n        Parameters\n        ----------\n        dataset : typing.Iterable\n            Dataset to build Dataloader around.\n        start_idx : int, optional\n            Start index of sampler, useful if resuming from some epoch,\n            by default None\n\n        Returns\n        -------\n        _type_\n            _description_\n        \"\"\"\n\n        if self.use_ddp:\n            sampler = DistributedSampler(\n                dataset,\n                start_idx,\n                num_replicas=self.world_size,\n                rank=self.local_rank,\n            )\n            if \"num_workers\" in kwargs:\n                kwargs[\"num_workers\"] = max(kwargs[\"num_workers\"] // self.world_size, 1)\n            kwargs[\"batch_size\"] = max(kwargs[\"batch_size\"] // self.world_size, 1)\n        else:\n            sampler = SequentialSampler(dataset, start_idx)\n\n        dataloader = torch.utils.data.DataLoader(dataset, sampler=sampler, **kwargs)\n        return dataloader\n\n    @staticmethod\n    def unwrap(model):\n        \"\"\"Unwraps the model if it was wrapped in DDP or DP, otherwise\n        just returns the model. Use this to unwrap the model returned by\n        :py:func:`audiotools.ml.accelerator.Accelerator.prepare_model`.\n        \"\"\"\n        if hasattr(model, \"module\"):\n            return model.module\n        return model\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/ml/decorators.py",
    "content": "import math\nimport os\nimport time\nfrom collections import defaultdict\nfrom functools import wraps\n\nimport torch\nimport torch.distributed as dist\nfrom rich import box\nfrom rich.console import Console\nfrom rich.console import Group\nfrom rich.live import Live\nfrom rich.markdown import Markdown\nfrom rich.padding import Padding\nfrom rich.panel import Panel\nfrom rich.progress import BarColumn\nfrom rich.progress import Progress\nfrom rich.progress import SpinnerColumn\nfrom rich.progress import TimeElapsedColumn\nfrom rich.progress import TimeRemainingColumn\nfrom rich.rule import Rule\nfrom rich.table import Table\nfrom torch.utils.tensorboard import SummaryWriter\n\n\n# This is here so that the history can be pickled.\ndef default_list():\n    return []\n\n\nclass Mean:\n    \"\"\"Keeps track of the running mean, along with the latest\n    value.\n    \"\"\"\n\n    def __init__(self):\n        self.reset()\n\n    def __call__(self):\n        mean = self.total / max(self.count, 1)\n        return mean\n\n    def reset(self):\n        self.count = 0\n        self.total = 0\n\n    def update(self, val):\n        if math.isfinite(val):\n            self.count += 1\n            self.total += val\n\n\ndef when(condition):\n    \"\"\"Runs a function only when the condition is met. The condition is\n    a function that is run.\n\n    Parameters\n    ----------\n    condition : Callable\n        Function to run to check whether or not to run the decorated\n        function.\n\n    Example\n    -------\n    Checkpoint only runs every 100 iterations, and only if the\n    local rank is 0.\n\n    >>> i = 0\n    >>> rank = 0\n    >>>\n    >>> @when(lambda: i % 100 == 0 and rank == 0)\n    >>> def checkpoint():\n    >>>     print(\"Saving to /runs/exp1\")\n    >>>\n    >>> for i in range(1000):\n    >>>     checkpoint()\n\n    \"\"\"\n\n    def decorator(fn):\n        @wraps(fn)\n        def decorated(*args, **kwargs):\n            if condition():\n                return fn(*args, **kwargs)\n\n        return decorated\n\n    return decorator\n\n\ndef timer(prefix: str = \"time\"):\n    \"\"\"Adds execution time to the output dictionary of the decorated\n    function. The function decorated by this must output a dictionary.\n    The key added will follow the form \"[prefix]/[name_of_function]\"\n\n    Parameters\n    ----------\n    prefix : str, optional\n        The key added will follow the form \"[prefix]/[name_of_function]\",\n        by default \"time\".\n    \"\"\"\n\n    def decorator(fn):\n        @wraps(fn)\n        def decorated(*args, **kwargs):\n            s = time.perf_counter()\n            output = fn(*args, **kwargs)\n            assert isinstance(output, dict)\n            e = time.perf_counter()\n            output[f\"{prefix}/{fn.__name__}\"] = e - s\n            return output\n\n        return decorated\n\n    return decorator\n\n\nclass Tracker:\n    \"\"\"\n    A tracker class that helps to monitor the progress of training and logging the metrics.\n\n    Attributes\n    ----------\n    metrics : dict\n        A dictionary containing the metrics for each label.\n    history : dict\n        A dictionary containing the history of metrics for each label.\n    writer : SummaryWriter\n        A SummaryWriter object for logging the metrics.\n    rank : int\n        The rank of the current process.\n    step : int\n        The current step of the training.\n    tasks : dict\n        A dictionary containing the progress bars and tables for each label.\n    pbar : Progress\n        A progress bar object for displaying the progress.\n    consoles : list\n        A list of console objects for logging.\n    live : Live\n        A Live object for updating the display live.\n\n    Methods\n    -------\n    print(msg: str)\n        Prints the given message to all consoles.\n    update(label: str, fn_name: str)\n        Updates the progress bar and table for the given label.\n    done(label: str, title: str)\n        Resets the progress bar and table for the given label and prints the final result.\n    track(label: str, length: int, completed: int = 0, op: dist.ReduceOp = dist.ReduceOp.AVG, ddp_active: bool = \"LOCAL_RANK\" in os.environ)\n        A decorator for tracking the progress and metrics of a function.\n    log(label: str, value_type: str = \"value\", history: bool = True)\n        A decorator for logging the metrics of a function.\n    is_best(label: str, key: str) -> bool\n        Checks if the latest value of the given key in the label is the best so far.\n    state_dict() -> dict\n        Returns a dictionary containing the state of the tracker.\n    load_state_dict(state_dict: dict) -> Tracker\n        Loads the state of the tracker from the given state dictionary.\n    \"\"\"\n\n    def __init__(\n        self,\n        writer: SummaryWriter = None,\n        log_file: str = None,\n        rank: int = 0,\n        console_width: int = 100,\n        step: int = 0,\n    ):\n        \"\"\"\n        Initializes the Tracker object.\n\n        Parameters\n        ----------\n        writer : SummaryWriter, optional\n            A SummaryWriter object for logging the metrics, by default None.\n        log_file : str, optional\n            The path to the log file, by default None.\n        rank : int, optional\n            The rank of the current process, by default 0.\n        console_width : int, optional\n            The width of the console, by default 100.\n        step : int, optional\n            The current step of the training, by default 0.\n        \"\"\"\n        self.metrics = {}\n        self.history = {}\n        self.writer = writer\n        self.rank = rank\n        self.step = step\n\n        # Create progress bars etc.\n        self.tasks = {}\n        self.pbar = Progress(\n            SpinnerColumn(),\n            \"[progress.description]{task.description}\",\n            \"{task.completed}/{task.total}\",\n            BarColumn(),\n            TimeElapsedColumn(),\n            \"/\",\n            TimeRemainingColumn(),\n        )\n        self.consoles = [Console(width=console_width)]\n        self.live = Live(console=self.consoles[0], refresh_per_second=10)\n        if log_file is not None:\n            self.consoles.append(Console(width=console_width, file=open(log_file, \"a\")))\n\n    def print(self, msg):\n        \"\"\"\n        Prints the given message to all consoles.\n\n        Parameters\n        ----------\n        msg : str\n            The message to be printed.\n        \"\"\"\n        if self.rank == 0:\n            for c in self.consoles:\n                c.log(msg)\n\n    def update(self, label, fn_name):\n        \"\"\"\n        Updates the progress bar and table for the given label.\n\n        Parameters\n        ----------\n        label : str\n            The label of the progress bar and table to be updated.\n        fn_name : str\n            The name of the function associated with the label.\n        \"\"\"\n        if self.rank == 0:\n            self.pbar.advance(self.tasks[label][\"pbar\"])\n\n            # Create table\n            table = Table(title=label, expand=True, box=box.MINIMAL)\n            table.add_column(\"key\", style=\"cyan\")\n            table.add_column(\"value\", style=\"bright_blue\")\n            table.add_column(\"mean\", style=\"bright_green\")\n\n            keys = self.metrics[label][\"value\"].keys()\n            for k in keys:\n                value = self.metrics[label][\"value\"][k]\n                mean = self.metrics[label][\"mean\"][k]()\n                table.add_row(k, f\"{value:10.6f}\", f\"{mean:10.6f}\")\n\n            self.tasks[label][\"table\"] = table\n            tables = [t[\"table\"] for t in self.tasks.values()]\n            group = Group(*tables, self.pbar)\n            self.live.update(\n                Group(\n                    Padding(\"\", (0, 0)),\n                    Rule(f\"[italic]{fn_name}()\", style=\"white\"),\n                    Padding(\"\", (0, 0)),\n                    Panel.fit(\n                        group, padding=(0, 5), title=\"[b]Progress\", border_style=\"blue\"\n                    ),\n                )\n            )\n\n    def done(self, label: str, title: str):\n        \"\"\"\n        Resets the progress bar and table for the given label and prints the final result.\n\n        Parameters\n        ----------\n        label : str\n            The label of the progress bar and table to be reset.\n        title : str\n            The title to be displayed when printing the final result.\n        \"\"\"\n        for label in self.metrics:\n            for v in self.metrics[label][\"mean\"].values():\n                v.reset()\n\n        if self.rank == 0:\n            self.pbar.reset(self.tasks[label][\"pbar\"])\n            tables = [t[\"table\"] for t in self.tasks.values()]\n            group = Group(Markdown(f\"# {title}\"), *tables, self.pbar)\n            self.print(group)\n\n    def track(\n        self,\n        label: str,\n        length: int,\n        completed: int = 0,\n        op: dist.ReduceOp = dist.ReduceOp.AVG,\n        ddp_active: bool = \"LOCAL_RANK\" in os.environ,\n    ):\n        \"\"\"\n        A decorator for tracking the progress and metrics of a function.\n\n        Parameters\n        ----------\n        label : str\n            The label to be associated with the progress and metrics.\n        length : int\n            The total number of iterations to be completed.\n        completed : int, optional\n            The number of iterations already completed, by default 0.\n        op : dist.ReduceOp, optional\n            The reduce operation to be used, by default dist.ReduceOp.AVG.\n        ddp_active : bool, optional\n            Whether the DistributedDataParallel is active, by default \"LOCAL_RANK\" in os.environ.\n        \"\"\"\n        self.tasks[label] = {\n            \"pbar\": self.pbar.add_task(\n                f\"[white]Iteration ({label})\", total=length, completed=completed\n            ),\n            \"table\": Table(),\n        }\n        self.metrics[label] = {\n            \"value\": defaultdict(),\n            \"mean\": defaultdict(lambda: Mean()),\n        }\n\n        def decorator(fn):\n            @wraps(fn)\n            def decorated(*args, **kwargs):\n                output = fn(*args, **kwargs)\n                if not isinstance(output, dict):\n                    self.update(label, fn.__name__)\n                    return output\n                # Collect across all DDP processes\n                scalar_keys = []\n                for k, v in output.items():\n                    if isinstance(v, (int, float)):\n                        v = torch.tensor([v])\n                    if not torch.is_tensor(v):\n                        continue\n                    if ddp_active and v.is_cuda:  # pragma: no cover\n                        dist.all_reduce(v, op=op)\n                    output[k] = v.detach()\n                    if torch.numel(v) == 1:\n                        scalar_keys.append(k)\n                        output[k] = v.item()\n\n                # Save the outputs to tracker\n                for k, v in output.items():\n                    if k not in scalar_keys:\n                        continue\n                    self.metrics[label][\"value\"][k] = v\n                    # Update the running mean\n                    self.metrics[label][\"mean\"][k].update(v)\n\n                self.update(label, fn.__name__)\n                return output\n\n            return decorated\n\n        return decorator\n\n    def log(self, label: str, value_type: str = \"value\", history: bool = True):\n        \"\"\"\n        A decorator for logging the metrics of a function.\n\n        Parameters\n        ----------\n        label : str\n            The label to be associated with the logging.\n        value_type : str, optional\n            The type of value to be logged, by default \"value\".\n        history : bool, optional\n            Whether to save the history of the metrics, by default True.\n        \"\"\"\n        assert value_type in [\"mean\", \"value\"]\n        if history:\n            if label not in self.history:\n                self.history[label] = defaultdict(default_list)\n\n        def decorator(fn):\n            @wraps(fn)\n            def decorated(*args, **kwargs):\n                output = fn(*args, **kwargs)\n                if self.rank == 0:\n                    nonlocal value_type, label\n                    metrics = self.metrics[label][value_type]\n                    for k, v in metrics.items():\n                        v = v() if isinstance(v, Mean) else v\n                        if self.writer is not None:\n                            self.writer.add_scalar(f\"{k}/{label}\", v, self.step)\n                        if label in self.history:\n                            self.history[label][k].append(v)\n\n                    if label in self.history:\n                        self.history[label][\"step\"].append(self.step)\n\n                return output\n\n            return decorated\n\n        return decorator\n\n    def is_best(self, label, key):\n        \"\"\"\n        Checks if the latest value of the given key in the label is the best so far.\n\n        Parameters\n        ----------\n        label : str\n            The label of the metrics to be checked.\n        key : str\n            The key of the metric to be checked.\n\n        Returns\n        -------\n        bool\n            True if the latest value is the best so far, otherwise False.\n        \"\"\"\n        return self.history[label][key][-1] == min(self.history[label][key])\n\n    def state_dict(self):\n        \"\"\"\n        Returns a dictionary containing the state of the tracker.\n\n        Returns\n        -------\n        dict\n            A dictionary containing the history and step of the tracker.\n        \"\"\"\n        return {\"history\": self.history, \"step\": self.step}\n\n    def load_state_dict(self, state_dict):\n        \"\"\"\n        Loads the state of the tracker from the given state dictionary.\n\n        Parameters\n        ----------\n        state_dict : dict\n            A dictionary containing the history and step of the tracker.\n\n        Returns\n        -------\n        Tracker\n            The tracker object with the loaded state.\n        \"\"\"\n        self.history = state_dict[\"history\"]\n        self.step = state_dict[\"step\"]\n        return self\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/ml/experiment.py",
    "content": "\"\"\"\nUseful class for Experiment tracking, and ensuring code is\nsaved alongside files.\n\"\"\"  # fmt: skip\nimport datetime\nimport os\nimport shlex\nimport shutil\nimport subprocess\nimport typing\nfrom pathlib import Path\n\nimport randomname\n\n\nclass Experiment:\n    \"\"\"This class contains utilities for managing experiments.\n    It is a context manager, that when you enter it, changes\n    your directory to a specified experiment folder (which\n    optionally can have an automatically generated experiment\n    name, or a specified one), and changes the CUDA device used\n    to the specified device (or devices).\n\n    Parameters\n    ----------\n    exp_directory : str\n        Folder where all experiments are saved, by default \"runs/\".\n    exp_name : str, optional\n        Name of the experiment, by default uses the current time, date, and\n        hostname to save.\n    \"\"\"\n\n    def __init__(\n        self,\n        exp_directory: str = \"runs/\",\n        exp_name: str = None,\n    ):\n        if exp_name is None:\n            exp_name = self.generate_exp_name()\n        exp_dir = Path(exp_directory) / exp_name\n        exp_dir.mkdir(parents=True, exist_ok=True)\n\n        self.exp_dir = exp_dir\n        self.exp_name = exp_name\n        self.git_tracked_files = (\n            subprocess.check_output(\n                shlex.split(\"git ls-tree --full-tree --name-only -r HEAD\")\n            )\n            .decode(\"utf-8\")\n            .splitlines()\n        )\n        self.parent_directory = Path(\".\").absolute()\n\n    def __enter__(self):\n        self.prev_dir = os.getcwd()\n        os.chdir(self.exp_dir)\n        return self\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        os.chdir(self.prev_dir)\n\n    @staticmethod\n    def generate_exp_name():\n        \"\"\"Generates a random experiment name based on the date\n        and a randomly generated adjective-noun tuple.\n\n        Returns\n        -------\n        str\n            Randomly generated experiment name.\n        \"\"\"\n        date = datetime.datetime.now().strftime(\"%y%m%d\")\n        name = f\"{date}-{randomname.get_name()}\"\n        return name\n\n    def snapshot(self, filter_fn: typing.Callable = lambda f: True):\n        \"\"\"Captures a full snapshot of all the files tracked by git at the time\n        the experiment is run. It also captures the diff against the committed\n        code as a separate file.\n\n        Parameters\n        ----------\n        filter_fn : typing.Callable, optional\n            Function that can be used to exclude some files\n            from the snapshot, by default accepts all files\n        \"\"\"\n        for f in self.git_tracked_files:\n            if filter_fn(f):\n                Path(f).parent.mkdir(parents=True, exist_ok=True)\n                shutil.copyfile(self.parent_directory / f, f)\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/ml/layers/__init__.py",
    "content": "from .base import BaseModel\nfrom .spectral_gate import SpectralGate\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/ml/layers/base.py",
    "content": "import inspect\nimport shutil\nimport tempfile\nimport typing\nfrom pathlib import Path\n\nimport torch\nfrom torch import nn\n\n\nclass BaseModel(nn.Module):\n    \"\"\"This is a class that adds useful save/load functionality to a\n    ``torch.nn.Module`` object. ``BaseModel`` objects can be saved\n    as ``torch.package`` easily, making them super easy to port between\n    machines without requiring a ton of dependencies. Files can also be\n    saved as just weights, in the standard way.\n\n    >>> class Model(ml.BaseModel):\n    >>>     def __init__(self, arg1: float = 1.0):\n    >>>         super().__init__()\n    >>>         self.arg1 = arg1\n    >>>         self.linear = nn.Linear(1, 1)\n    >>>\n    >>>     def forward(self, x):\n    >>>         return self.linear(x)\n    >>>\n    >>> model1 = Model()\n    >>>\n    >>> with tempfile.NamedTemporaryFile(suffix=\".pth\") as f:\n    >>>     model1.save(\n    >>>         f.name,\n    >>>     )\n    >>>     model2 = Model.load(f.name)\n    >>>     out2 = seed_and_run(model2, x)\n    >>>     assert torch.allclose(out1, out2)\n    >>>\n    >>>     model1.save(f.name, package=True)\n    >>>     model2 = Model.load(f.name)\n    >>>     model2.save(f.name, package=False)\n    >>>     model3 = Model.load(f.name)\n    >>>     out3 = seed_and_run(model3, x)\n    >>>\n    >>> with tempfile.TemporaryDirectory() as d:\n    >>>     model1.save_to_folder(d, {\"data\": 1.0})\n    >>>     Model.load_from_folder(d)\n\n    \"\"\"\n\n    EXTERN = [\n        \"audiotools.**\",\n        \"tqdm\",\n        \"__main__\",\n        \"numpy.**\",\n        \"julius.**\",\n        \"torchaudio.**\",\n        \"scipy.**\",\n        \"einops\",\n    ]\n    \"\"\"Names of libraries that are external to the torch.package saving mechanism.\n    Source code from these libraries will not be packaged into the model. This can\n    be edited by the user of this class by editing ``model.EXTERN``.\"\"\"\n    INTERN = []\n    \"\"\"Names of libraries that are internal to the torch.package saving mechanism.\n    Source code from these libraries will be saved alongside the model.\"\"\"\n\n    def save(\n        self,\n        path: str,\n        metadata: dict = None,\n        package: bool = True,\n        intern: list = [],\n        extern: list = [],\n        mock: list = [],\n    ):\n        \"\"\"Saves the model, either as a torch package, or just as\n        weights, alongside some specified metadata.\n\n        Parameters\n        ----------\n        path : str\n            Path to save model to.\n        metadata : dict, optional\n            Any metadata to save alongside the model,\n            by default None\n        package : bool, optional\n            Whether to use ``torch.package`` to save the model in\n            a format that is portable, by default True\n        intern : list, optional\n            List of additional libraries that are internal\n            to the model, used with torch.package, by default []\n        extern : list, optional\n            List of additional libraries that are external to\n            the model, used with torch.package, by default []\n        mock : list, optional\n            List of libraries to mock, used with torch.package,\n            by default []\n\n        Returns\n        -------\n        str\n            Path to saved model.\n        \"\"\"\n        sig = inspect.signature(self.__class__)\n        args = {}\n\n        for key, val in sig.parameters.items():\n            arg_val = val.default\n            if arg_val is not inspect.Parameter.empty:\n                args[key] = arg_val\n\n        # Look up attibutes in self, and if any of them are in args,\n        # overwrite them in args.\n        for attribute in dir(self):\n            if attribute in args:\n                args[attribute] = getattr(self, attribute)\n\n        metadata = {} if metadata is None else metadata\n        metadata[\"kwargs\"] = args\n        if not hasattr(self, \"metadata\"):\n            self.metadata = {}\n        self.metadata.update(metadata)\n\n        if not package:\n            state_dict = {\"state_dict\": self.state_dict(), \"metadata\": metadata}\n            torch.save(state_dict, path)\n        else:\n            self._save_package(path, intern=intern, extern=extern, mock=mock)\n\n        return path\n\n    @property\n    def device(self):\n        \"\"\"Gets the device the model is on by looking at the device of\n        the first parameter. May not be valid if model is split across\n        multiple devices.\n        \"\"\"\n        return list(self.parameters())[0].device\n\n    @classmethod\n    def load(\n        cls,\n        location: str,\n        *args,\n        package_name: str = None,\n        strict: bool = False,\n        **kwargs,\n    ):\n        \"\"\"Load model from a path. Tries first to load as a package, and if\n        that fails, tries to load as weights. The arguments to the class are\n        specified inside the model weights file.\n\n        Parameters\n        ----------\n        location : str\n            Path to file.\n        package_name : str, optional\n            Name of package, by default ``cls.__name__``.\n        strict : bool, optional\n            Ignore unmatched keys, by default False\n        kwargs : dict\n            Additional keyword arguments to the model instantiation, if\n            not loading from package.\n\n        Returns\n        -------\n        BaseModel\n            A model that inherits from BaseModel.\n        \"\"\"\n        try:\n            model = cls._load_package(location, package_name=package_name)\n        except Exception:\n            model_dict = torch.load(location, \"cpu\")\n            metadata = model_dict[\"metadata\"]\n            metadata[\"kwargs\"].update(kwargs)\n\n            sig = inspect.signature(cls)\n            class_keys = list(sig.parameters.keys())\n            for k in list(metadata[\"kwargs\"].keys()):\n                if k not in class_keys:\n                    metadata[\"kwargs\"].pop(k)\n\n            model = cls(*args, **metadata[\"kwargs\"])\n            model.load_state_dict(model_dict[\"state_dict\"], strict=strict)\n            model.metadata = metadata\n\n        return model\n\n    def _save_package(self, path, intern=[], extern=[], mock=[], **kwargs):\n        package_name = type(self).__name__\n        resource_name = f\"{type(self).__name__}.pth\"\n\n        # Below is for loading and re-saving a package.\n        if hasattr(self, \"importer\"):\n            kwargs[\"importer\"] = (self.importer, torch.package.sys_importer)\n            del self.importer\n\n        # Why do we use a tempfile, you ask?\n        # It's so we can load a packaged model and then re-save\n        # it to the same location. torch.package throws an\n        # error if it's loading and writing to the same\n        # file (this is undocumented).\n        with tempfile.NamedTemporaryFile(suffix=\".pth\") as f:\n            with torch.package.PackageExporter(f.name, **kwargs) as exp:\n                exp.intern(self.INTERN + intern)\n                exp.mock(mock)\n                exp.extern(self.EXTERN + extern)\n                exp.save_pickle(package_name, resource_name, self)\n\n                if hasattr(self, \"metadata\"):\n                    exp.save_pickle(\n                        package_name, f\"{package_name}.metadata\", self.metadata\n                    )\n\n            shutil.copyfile(f.name, path)\n\n        # Must reset the importer back to `self` if it existed\n        # so that you can save the model again!\n        if \"importer\" in kwargs:\n            self.importer = kwargs[\"importer\"][0]\n        return path\n\n    @classmethod\n    def _load_package(cls, path, package_name=None):\n        package_name = cls.__name__ if package_name is None else package_name\n        resource_name = f\"{package_name}.pth\"\n\n        imp = torch.package.PackageImporter(path)\n        model = imp.load_pickle(package_name, resource_name, \"cpu\")\n        try:\n            model.metadata = imp.load_pickle(package_name, f\"{package_name}.metadata\")\n        except:  # pragma: no cover\n            pass\n        model.importer = imp\n\n        return model\n\n    def save_to_folder(\n        self,\n        folder: typing.Union[str, Path],\n        extra_data: dict = None,\n        package: bool = True,\n    ):\n        \"\"\"Dumps a model into a folder, as both a package\n        and as weights, as well as anything specified in\n        ``extra_data``. ``extra_data`` is a dictionary of other\n        pickleable files, with the keys being the paths\n        to save them in. The model is saved under a subfolder\n        specified by the name of the class (e.g. ``folder/generator/[package, weights].pth``\n        if the model name was ``Generator``).\n\n        >>> with tempfile.TemporaryDirectory() as d:\n        >>>     extra_data = {\n        >>>         \"optimizer.pth\": optimizer.state_dict()\n        >>>     }\n        >>>     model.save_to_folder(d, extra_data)\n        >>>     Model.load_from_folder(d)\n\n        Parameters\n        ----------\n        folder : typing.Union[str, Path]\n            _description_\n        extra_data : dict, optional\n            _description_, by default None\n\n        Returns\n        -------\n        str\n            Path to folder\n        \"\"\"\n        extra_data = {} if extra_data is None else extra_data\n        model_name = type(self).__name__.lower()\n        target_base = Path(f\"{folder}/{model_name}/\")\n        target_base.mkdir(exist_ok=True, parents=True)\n\n        if package:\n            package_path = target_base / f\"package.pth\"\n            self.save(package_path)\n\n        weights_path = target_base / f\"weights.pth\"\n        self.save(weights_path, package=False)\n\n        for path, obj in extra_data.items():\n            torch.save(obj, target_base / path)\n\n        return target_base\n\n    @classmethod\n    def load_from_folder(\n        cls,\n        folder: typing.Union[str, Path],\n        package: bool = True,\n        strict: bool = False,\n        **kwargs,\n    ):\n        \"\"\"Loads the model from a folder generated by\n        :py:func:`audiotools.ml.layers.base.BaseModel.save_to_folder`.\n        Like that function, this one looks for a subfolder that has\n        the name of the class (e.g. ``folder/generator/[package, weights].pth`` if the\n        model name was ``Generator``).\n\n        Parameters\n        ----------\n        folder : typing.Union[str, Path]\n            _description_\n        package : bool, optional\n            Whether to use ``torch.package`` to load the model,\n            loading the model from ``package.pth``.\n        strict : bool, optional\n            Ignore unmatched keys, by default False\n\n        Returns\n        -------\n        tuple\n            tuple of model and extra data as saved by\n            :py:func:`audiotools.ml.layers.base.BaseModel.save_to_folder`.\n        \"\"\"\n        folder = Path(folder) / cls.__name__.lower()\n        model_pth = \"package.pth\" if package else \"weights.pth\"\n        model_pth = folder / model_pth\n\n        model = cls.load(model_pth, strict=strict)\n        extra_data = {}\n        excluded = [\"package.pth\", \"weights.pth\"]\n        files = [x for x in folder.glob(\"*\") if x.is_file() and x.name not in excluded]\n        for f in files:\n            extra_data[f.name] = torch.load(f, **kwargs)\n\n        return model, extra_data\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/ml/layers/spectral_gate.py",
    "content": "import torch\nimport torch.nn.functional as F\nfrom torch import nn\n\nfrom ...core import AudioSignal\nfrom ...core import STFTParams\nfrom ...core import util\n\n\nclass SpectralGate(nn.Module):\n    \"\"\"Spectral gating algorithm for noise reduction,\n    as in Audacity/Ocenaudio. The steps are as follows:\n\n    1.  An FFT is calculated over the noise audio clip\n    2.  Statistics are calculated over FFT of the the noise\n        (in frequency)\n    3.  A threshold is calculated based upon the statistics\n        of the noise (and the desired sensitivity of the algorithm)\n    4.  An FFT is calculated over the signal\n    5.  A mask is determined by comparing the signal FFT to the\n        threshold\n    6.  The mask is smoothed with a filter over frequency and time\n    7.  The mask is appled to the FFT of the signal, and is inverted\n\n    Implementation inspired by Tim Sainburg's noisereduce:\n\n    https://timsainburg.com/noise-reduction-python.html\n\n    Parameters\n    ----------\n    n_freq : int, optional\n        Number of frequency bins to smooth by, by default 3\n    n_time : int, optional\n        Number of time bins to smooth by, by default 5\n    \"\"\"\n\n    def __init__(self, n_freq: int = 3, n_time: int = 5):\n        super().__init__()\n\n        smoothing_filter = torch.outer(\n            torch.cat(\n                [\n                    torch.linspace(0, 1, n_freq + 2)[:-1],\n                    torch.linspace(1, 0, n_freq + 2),\n                ]\n            )[..., 1:-1],\n            torch.cat(\n                [\n                    torch.linspace(0, 1, n_time + 2)[:-1],\n                    torch.linspace(1, 0, n_time + 2),\n                ]\n            )[..., 1:-1],\n        )\n        smoothing_filter = smoothing_filter / smoothing_filter.sum()\n        smoothing_filter = smoothing_filter.unsqueeze(0).unsqueeze(0)\n        self.register_buffer(\"smoothing_filter\", smoothing_filter)\n\n    def forward(\n        self,\n        audio_signal: AudioSignal,\n        nz_signal: AudioSignal,\n        denoise_amount: float = 1.0,\n        n_std: float = 3.0,\n        win_length: int = 2048,\n        hop_length: int = 512,\n    ):\n        \"\"\"Perform noise reduction.\n\n        Parameters\n        ----------\n        audio_signal : AudioSignal\n            Audio signal that noise will be removed from.\n        nz_signal : AudioSignal, optional\n            Noise signal to compute noise statistics from.\n        denoise_amount : float, optional\n            Amount to denoise by, by default 1.0\n        n_std : float, optional\n            Number of standard deviations above which to consider\n            noise, by default 3.0\n        win_length : int, optional\n            Length of window for STFT, by default 2048\n        hop_length : int, optional\n            Hop length for STFT, by default 512\n\n        Returns\n        -------\n        AudioSignal\n            Denoised audio signal.\n        \"\"\"\n        stft_params = STFTParams(win_length, hop_length, \"sqrt_hann\")\n\n        audio_signal = audio_signal.clone()\n        audio_signal.stft_data = None\n        audio_signal.stft_params = stft_params\n\n        nz_signal = nz_signal.clone()\n        nz_signal.stft_params = stft_params\n\n        nz_stft_db = 20 * nz_signal.magnitude.clamp(1e-4).log10()\n        nz_freq_mean = nz_stft_db.mean(keepdim=True, dim=-1)\n        nz_freq_std = nz_stft_db.std(keepdim=True, dim=-1)\n\n        nz_thresh = nz_freq_mean + nz_freq_std * n_std\n\n        stft_db = 20 * audio_signal.magnitude.clamp(1e-4).log10()\n        nb, nac, nf, nt = stft_db.shape\n        db_thresh = nz_thresh.expand(nb, nac, -1, nt)\n\n        stft_mask = (stft_db < db_thresh).float()\n        shape = stft_mask.shape\n\n        stft_mask = stft_mask.reshape(nb * nac, 1, nf, nt)\n        pad_tuple = (\n            self.smoothing_filter.shape[-2] // 2,\n            self.smoothing_filter.shape[-1] // 2,\n        )\n        stft_mask = F.conv2d(stft_mask, self.smoothing_filter, padding=pad_tuple)\n        stft_mask = stft_mask.reshape(*shape)\n        stft_mask *= util.ensure_tensor(denoise_amount, ndim=stft_mask.ndim).to(\n            audio_signal.device\n        )\n        stft_mask = 1 - stft_mask\n\n        audio_signal.stft_data *= stft_mask\n        audio_signal.istft()\n\n        return audio_signal\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/post.py",
    "content": "import tempfile\nimport typing\nimport zipfile\nfrom pathlib import Path\n\nimport markdown2 as md\nimport matplotlib.pyplot as plt\nimport torch\nfrom IPython.display import HTML\n\n\ndef audio_table(\n    audio_dict: dict,\n    first_column: str = None,\n    format_fn: typing.Callable = None,\n    **kwargs,\n):  # pragma: no cover\n    \"\"\"Embeds an audio table into HTML, or as the output cell\n    in a notebook.\n\n    Parameters\n    ----------\n    audio_dict : dict\n        Dictionary of data to embed.\n    first_column : str, optional\n        The label for the first column of the table, by default None\n    format_fn : typing.Callable, optional\n        How to format the data, by default None\n\n    Returns\n    -------\n    str\n        Table as a string\n\n    Examples\n    --------\n\n    >>> audio_dict = {}\n    >>> for i in range(signal_batch.batch_size):\n    >>>     audio_dict[i] = {\n    >>>         \"input\": signal_batch[i],\n    >>>         \"output\": output_batch[i]\n    >>>     }\n    >>> audiotools.post.audio_zip(audio_dict)\n\n    \"\"\"\n    from audiotools import AudioSignal\n\n    output = []\n    columns = None\n\n    def _default_format_fn(label, x, **kwargs):\n        if torch.is_tensor(x):\n            x = x.tolist()\n\n        if x is None:\n            return \".\"\n        elif isinstance(x, AudioSignal):\n            return x.embed(display=False, return_html=True, **kwargs)\n        else:\n            return str(x)\n\n    if format_fn is None:\n        format_fn = _default_format_fn\n\n    if first_column is None:\n        first_column = \".\"\n\n    for k, v in audio_dict.items():\n        if not isinstance(v, dict):\n            v = {\"Audio\": v}\n\n        v_keys = list(v.keys())\n        if columns is None:\n            columns = [first_column] + v_keys\n            output.append(\" | \".join(columns))\n\n            layout = \"|---\" + len(v_keys) * \"|:-:\"\n            output.append(layout)\n\n        formatted_audio = []\n        for col in columns[1:]:\n            formatted_audio.append(format_fn(col, v[col], **kwargs))\n\n        row = f\"| {k} | \"\n        row += \" | \".join(formatted_audio)\n        output.append(row)\n\n    output = \"\\n\" + \"\\n\".join(output)\n    return output\n\n\ndef in_notebook():  # pragma: no cover\n    \"\"\"Determines if code is running in a notebook.\n\n    Returns\n    -------\n    bool\n        Whether or not this is running in a notebook.\n    \"\"\"\n    try:\n        from IPython import get_ipython\n\n        if \"IPKernelApp\" not in get_ipython().config:  # pragma: no cover\n            return False\n    except ImportError:\n        return False\n    except AttributeError:\n        return False\n    return True\n\n\ndef disp(obj, **kwargs):  # pragma: no cover\n    \"\"\"Displays an object, depending on if its in a notebook\n    or not.\n\n    Parameters\n    ----------\n    obj : typing.Any\n        Any object to display.\n\n    \"\"\"\n    from audiotools import AudioSignal\n\n    IN_NOTEBOOK = in_notebook()\n\n    if isinstance(obj, AudioSignal):\n        audio_elem = obj.embed(display=False, return_html=True)\n        if IN_NOTEBOOK:\n            return HTML(audio_elem)\n        else:\n            print(audio_elem)\n    if isinstance(obj, dict):\n        table = audio_table(obj, **kwargs)\n        if IN_NOTEBOOK:\n            return HTML(md.markdown(table, extras=[\"tables\"]))\n        else:\n            print(table)\n    if isinstance(obj, plt.Figure):\n        plt.show()\n"
  },
  {
    "path": "xinference/thirdparty/audiotools/preference.py",
    "content": "##############################################################\n### Tools for creating preference tests (MUSHRA, ABX, etc) ###\n##############################################################\nimport copy\nimport csv\nimport random\nimport sys\nimport traceback\nfrom collections import defaultdict\nfrom pathlib import Path\nfrom typing import List\n\nimport gradio as gr\n\nfrom audiotools.core.util import find_audio\n\n################################################################\n### Logic for audio player, and adding audio / play buttons. ###\n################################################################\n\nWAVESURFER = \"\"\"<div id=\"waveform\"></div><div id=\"wave-timeline\"></div>\"\"\"\n\nCUSTOM_CSS = \"\"\"\n.gradio-container {\n    max-width: 840px !important;\n}\nregion.wavesurfer-region:before {\n    content: attr(data-region-label);\n}\n\nblock {\n    min-width: 0 !important;\n}\n\n#wave-timeline {\n    background-color: rgba(0, 0, 0, 0.8);\n}\n\n.head.svelte-1cl284s {\n    display: none;\n}\n\"\"\"\n\nload_wavesurfer_js = \"\"\"\nfunction load_wavesurfer() {\n    function load_script(url) {\n        const script = document.createElement('script');\n        script.src = url;\n        document.body.appendChild(script);\n\n        return new Promise((res, rej) => {\n            script.onload = function() {\n                res();\n            }\n            script.onerror = function () {\n                rej();\n            }\n        });\n    }\n\n    function create_wavesurfer() {\n        var options = {\n            container: '#waveform',\n            waveColor: '#F2F2F2', // Set a darker wave color\n            progressColor: 'white', // Set a slightly lighter progress color\n            loaderColor: 'white', // Set a slightly lighter loader color\n            cursorColor: 'black', // Set a slightly lighter cursor color\n            backgroundColor: '#00AAFF', // Set a black background color\n            barWidth: 4,\n            barRadius: 3,\n            barHeight: 1, // the height of the wave\n            plugins: [\n                WaveSurfer.regions.create({\n                    regionsMinLength: 0.0,\n                    dragSelection: {\n                        slop: 5\n                    },\n                    color: 'hsla(200, 50%, 70%, 0.4)',\n                }),\n                 WaveSurfer.timeline.create({\n                    container: \"#wave-timeline\",\n                    primaryLabelInterval: 5.0,\n                    secondaryLabelInterval: 1.0,\n                    primaryFontColor: '#F2F2F2',\n                    secondaryFontColor: '#F2F2F2',\n                }),\n            ]\n        };\n        wavesurfer = WaveSurfer.create(options);\n        wavesurfer.on('region-created', region => {\n            wavesurfer.regions.clear();\n        });\n        wavesurfer.on('finish', function () {\n            var loop =  document.getElementById(\"loop-button\").textContent.includes(\"ON\");\n            if (loop) {\n                wavesurfer.play();\n            }\n            else {\n                var button_elements = document.getElementsByClassName('playpause')\n                var buttons = Array.from(button_elements);\n\n                for (let j = 0; j < buttons.length; j++) {\n                    buttons[j].classList.remove(\"primary\");\n                    buttons[j].classList.add(\"secondary\");\n                    buttons[j].textContent = buttons[j].textContent.replace(\"Stop\", \"Play\")\n                }\n            }\n        });\n\n        wavesurfer.on('region-out', function () {\n            var loop =  document.getElementById(\"loop-button\").textContent.includes(\"ON\");\n            if (!loop) {\n                var button_elements = document.getElementsByClassName('playpause')\n                var buttons = Array.from(button_elements);\n\n                for (let j = 0; j < buttons.length; j++) {\n                    buttons[j].classList.remove(\"primary\");\n                    buttons[j].classList.add(\"secondary\");\n                    buttons[j].textContent = buttons[j].textContent.replace(\"Stop\", \"Play\")\n                }\n                wavesurfer.pause();\n            }\n        });\n\n        console.log(\"Created WaveSurfer object.\")\n    }\n\n    load_script('https://unpkg.com/wavesurfer.js@6.6.4')\n        .then(() => {\n            load_script(\"https://unpkg.com/wavesurfer.js@6.6.4/dist/plugin/wavesurfer.timeline.min.js\")\n                .then(() => {\n                    load_script('https://unpkg.com/wavesurfer.js@6.6.4/dist/plugin/wavesurfer.regions.min.js')\n                        .then(() => {\n                            console.log(\"Loaded regions\");\n                            create_wavesurfer();\n                            document.getElementById(\"start-survey\").click();\n                        })\n                })\n        });\n}\n\"\"\"\n\nplay = lambda i: \"\"\"\nfunction play() {\n    var audio_elements = document.getElementsByTagName('audio');\n    var button_elements = document.getElementsByClassName('playpause')\n\n    var audio_array = Array.from(audio_elements);\n    var buttons = Array.from(button_elements);\n\n    var src_link = audio_array[{i}].getAttribute(\"src\");\n    console.log(src_link);\n\n    var loop = document.getElementById(\"loop-button\").textContent.includes(\"ON\");\n    var playing = buttons[{i}].textContent.includes(\"Stop\");\n\n    for (let j = 0; j < buttons.length; j++) {\n        if (j != {i} || playing) {\n            buttons[j].classList.remove(\"primary\");\n            buttons[j].classList.add(\"secondary\");\n            buttons[j].textContent = buttons[j].textContent.replace(\"Stop\", \"Play\")\n        }\n        else {\n            buttons[j].classList.remove(\"secondary\");\n            buttons[j].classList.add(\"primary\");\n            buttons[j].textContent = buttons[j].textContent.replace(\"Play\", \"Stop\")\n        }\n    }\n\n    if (playing) {\n        wavesurfer.pause();\n        wavesurfer.seekTo(0.0);\n    }\n    else {\n        wavesurfer.load(src_link);\n        wavesurfer.on('ready', function () {\n            var region = Object.values(wavesurfer.regions.list)[0];\n\n            if (region != null) {\n                region.loop = loop;\n                region.play();\n            } else {\n                wavesurfer.play();\n            }\n        });\n    }\n}\n\"\"\".replace(\n    \"{i}\", str(i)\n)\n\nclear_regions = \"\"\"\nfunction clear_regions() {\n    wavesurfer.clearRegions();\n}\n\"\"\"\n\nreset_player = \"\"\"\nfunction reset_player() {\n    wavesurfer.clearRegions();\n    wavesurfer.pause();\n    wavesurfer.seekTo(0.0);\n\n    var button_elements = document.getElementsByClassName('playpause')\n    var buttons = Array.from(button_elements);\n\n    for (let j = 0; j < buttons.length; j++) {\n        buttons[j].classList.remove(\"primary\");\n        buttons[j].classList.add(\"secondary\");\n        buttons[j].textContent = buttons[j].textContent.replace(\"Stop\", \"Play\")\n    }\n}\n\"\"\"\n\nloop_region = \"\"\"\nfunction loop_region() {\n    var element = document.getElementById(\"loop-button\");\n    var loop = element.textContent.includes(\"OFF\");\n    console.log(loop);\n\n    try {\n        var region = Object.values(wavesurfer.regions.list)[0];\n        region.loop = loop;\n    } catch {}\n\n    if (loop) {\n        element.classList.remove(\"secondary\");\n        element.classList.add(\"primary\");\n        element.textContent = \"Looping ON\";\n    } else {\n        element.classList.remove(\"primary\");\n        element.classList.add(\"secondary\");\n        element.textContent = \"Looping OFF\";\n    }\n}\n\"\"\"\n\n\nclass Player:\n    def __init__(self, app):\n        self.app = app\n\n        self.app.load(_js=load_wavesurfer_js)\n        self.app.css = CUSTOM_CSS\n\n        self.wavs = []\n        self.position = 0\n\n    def create(self):\n        gr.HTML(WAVESURFER)\n        gr.Markdown(\n            \"Click and drag on the waveform above to select a region for playback. \"\n            \"Once created, the region can be moved around and resized. \"\n            \"Clear the regions using the button below. Hit play on one of the buttons below to start!\"\n        )\n\n        with gr.Row():\n            clear = gr.Button(\"Clear region\")\n            loop = gr.Button(\"Looping OFF\", elem_id=\"loop-button\")\n\n            loop.click(None, _js=loop_region)\n            clear.click(None, _js=clear_regions)\n\n        gr.HTML(\"<hr>\")\n\n    def add(self, name: str = \"Play\"):\n        i = self.position\n        self.wavs.append(\n            {\n                \"audio\": gr.Audio(visible=False),\n                \"button\": gr.Button(name, elem_classes=[\"playpause\"]),\n                \"position\": i,\n            }\n        )\n        self.wavs[-1][\"button\"].click(None, _js=play(i))\n        self.position += 1\n        return self.wavs[-1]\n\n    def to_list(self):\n        return [x[\"audio\"] for x in self.wavs]\n\n\n############################################################\n### Keeping track of users, and CSS for the progress bar ###\n############################################################\n\nload_tracker = lambda name: \"\"\"\nfunction load_name() {\n    function setCookie(name, value, exp_days) {\n        var d = new Date();\n        d.setTime(d.getTime() + (exp_days*24*60*60*1000));\n        var expires = \"expires=\" + d.toGMTString();\n        document.cookie = name + \"=\" + value + \";\" + expires + \";path=/\";\n    }\n\n    function getCookie(name) {\n        var cname = name + \"=\";\n        var decodedCookie = decodeURIComponent(document.cookie);\n        var ca = decodedCookie.split(';');\n        for(var i = 0; i < ca.length; i++){\n            var c = ca[i];\n            while(c.charAt(0) == ' '){\n                c = c.substring(1);\n            }\n            if(c.indexOf(cname) == 0){\n                return c.substring(cname.length, c.length);\n            }\n        }\n        return \"\";\n    }\n\n    name = getCookie(\"{name}\");\n    if (name == \"\") {\n        name = Math.random().toString(36).slice(2);\n        console.log(name);\n        setCookie(\"name\", name, 30);\n    }\n    name = getCookie(\"{name}\");\n    return name;\n}\n\"\"\".replace(\n    \"{name}\", name\n)\n\n# Progress bar\n\nprogress_template = \"\"\"\n<!DOCTYPE html>\n<html>\n  <head>\n    <title>Progress Bar</title>\n    <style>\n      .progress-bar {\n        background-color: #ddd;\n        border-radius: 4px;\n        height: 30px;\n        width: 100%;\n        position: relative;\n      }\n\n      .progress {\n        background-color: #00AAFF;\n        border-radius: 4px;\n        height: 100%;\n        width: {PROGRESS}%; /* Change this value to control the progress */\n      }\n\n      .progress-text {\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        transform: translate(-50%, -50%);\n        font-size: 18px;\n        font-family: Arial, sans-serif;\n        font-weight: bold;\n        color: #333 !important;\n        text-shadow: 1px 1px #fff;\n      }\n    </style>\n  </head>\n  <body>\n    <div class=\"progress-bar\">\n      <div class=\"progress\"></div>\n      <div class=\"progress-text\">{TEXT}</div>\n    </div>\n  </body>\n</html>\n\"\"\"\n\n\ndef create_tracker(app, cookie_name=\"name\"):\n    user = gr.Text(label=\"user\", interactive=True, visible=False, elem_id=\"user\")\n    app.load(_js=load_tracker(cookie_name), outputs=user)\n    return user\n\n\n#################################################################\n### CSS and HTML for labeling sliders for both ABX and MUSHRA ###\n#################################################################\n\nslider_abx = \"\"\"\n<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\">\n    <title>Labels Example</title>\n    <style>\n      body {\n        margin: 0;\n        padding: 0;\n      }\n\n      .labels-container {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        width: 100%;\n        height: 40px;\n        padding: 0px 12px 0px;\n      }\n\n      .label {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        width: 33%;\n        height: 100%;\n        font-weight: bold;\n        text-transform: uppercase;\n        padding: 10px;\n        font-family: Arial, sans-serif;\n        font-size: 16px;\n        font-weight: 700;\n        letter-spacing: 1px;\n        line-height: 1.5;\n      }\n\n      .label-a {\n        background-color: #00AAFF;\n        color: #333 !important;\n      }\n\n      .label-tie {\n        background-color: #f97316;\n        color: #333 !important;\n      }\n\n      .label-b {\n        background-color: #00AAFF;\n        color: #333 !important;\n      }\n    </style>\n  </head>\n  <body>\n    <div class=\"labels-container\">\n      <div class=\"label label-a\">Prefer A</div>\n      <div class=\"label label-tie\">Toss-up</div>\n      <div class=\"label label-b\">Prefer B</div>\n    </div>\n  </body>\n</html>\n\"\"\"\n\nslider_mushra = \"\"\"\n<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\">\n    <title>Labels Example</title>\n    <style>\n      body {\n        margin: 0;\n        padding: 0;\n      }\n\n      .labels-container {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        width: 100%;\n        height: 30px;\n        padding: 10px;\n      }\n\n      .label {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        width: 20%;\n        height: 100%;\n        font-weight: bold;\n        text-transform: uppercase;\n        padding: 10px;\n        font-family: Arial, sans-serif;\n        font-size: 13.5px;\n        font-weight: 700;\n        line-height: 1.5;\n      }\n\n      .label-bad {\n        background-color: #ff5555;\n        color: #333 !important;\n      }\n\n      .label-poor {\n        background-color: #ffa500;\n        color: #333 !important;\n      }\n\n      .label-fair {\n        background-color: #ffd700;\n        color: #333 !important;\n      }\n\n      .label-good {\n        background-color: #97d997;\n        color: #333 !important;\n      }\n\n      .label-excellent {\n        background-color: #04c822;\n        color: #333 !important;\n      }\n    </style>\n  </head>\n  <body>\n    <div class=\"labels-container\">\n      <div class=\"label label-bad\">bad</div>\n      <div class=\"label label-poor\">poor</div>\n      <div class=\"label label-fair\">fair</div>\n      <div class=\"label label-good\">good</div>\n      <div class=\"label label-excellent\">excellent</div>\n    </div>\n  </body>\n</html>\n\"\"\"\n\n#########################################################\n### Handling loading audio and tracking session state ###\n#########################################################\n\n\nclass Samples:\n    def __init__(self, folder: str, shuffle: bool = True, n_samples: int = None):\n        files = find_audio(folder)\n        samples = defaultdict(lambda: defaultdict())\n\n        for f in files:\n            condition = f.parent.stem\n            samples[f.name][condition] = f\n\n        self.samples = samples\n        self.names = list(samples.keys())\n        self.filtered = False\n        self.current = 0\n\n        if shuffle:\n            random.shuffle(self.names)\n\n        self.n_samples = len(self.names) if n_samples is None else n_samples\n\n    def get_updates(self, idx, order):\n        key = self.names[idx]\n        return [gr.update(value=str(self.samples[key][o])) for o in order]\n\n    def progress(self):\n        try:\n            pct = self.current / len(self) * 100\n        except:  # pragma: no cover\n            pct = 100\n        text = f\"On {self.current} / {len(self)} samples\"\n        pbar = (\n            copy.copy(progress_template)\n            .replace(\"{PROGRESS}\", str(pct))\n            .replace(\"{TEXT}\", str(text))\n        )\n        return gr.update(value=pbar)\n\n    def __len__(self):\n        return self.n_samples\n\n    def filter_completed(self, user, save_path):\n        if not self.filtered:\n            done = []\n            if Path(save_path).exists():\n                with open(save_path, \"r\") as f:\n                    reader = csv.DictReader(f)\n                    done = [r[\"sample\"] for r in reader if r[\"user\"] == user]\n            self.names = [k for k in self.names if k not in done]\n            self.names = self.names[: self.n_samples]\n            self.filtered = True  # Avoid filtering more than once per session.\n\n    def get_next_sample(self, reference, conditions):\n        random.shuffle(conditions)\n        if reference is not None:\n            self.order = [reference] + conditions\n        else:\n            self.order = conditions\n\n        try:\n            updates = self.get_updates(self.current, self.order)\n            self.current += 1\n            done = gr.update(interactive=True)\n            pbar = self.progress()\n        except Exception:\n            traceback.print_exc()\n            updates = [gr.update() for _ in range(len(self.order))]\n            done = gr.update(value=\"No more samples!\", interactive=False)\n            self.current = len(self)\n            pbar = self.progress()\n\n        return updates, done, pbar\n\n\ndef save_result(result, save_path):\n    with open(save_path, mode=\"a\", newline=\"\") as file:\n        writer = csv.DictWriter(file, fieldnames=sorted(list(result.keys())))\n        if file.tell() == 0:\n            writer.writeheader()\n        writer.writerow(result)\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/cosyvoice/bin/average_model.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc (Di Wu)\n# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport argparse\nimport glob\n\nimport yaml\nimport torch\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description='average model')\n    parser.add_argument('--dst_model', required=True, help='averaged model')\n    parser.add_argument('--src_path',\n                        required=True,\n                        help='src model path for average')\n    parser.add_argument('--val_best',\n                        action=\"store_true\",\n                        help='averaged model')\n    parser.add_argument('--num',\n                        default=5,\n                        type=int,\n                        help='nums for averaged model')\n\n    args = parser.parse_args()\n    print(args)\n    return args\n\n\ndef main():\n    args = get_args()\n    val_scores = []\n    if args.val_best:\n        yamls = glob.glob('{}/*.yaml'.format(args.src_path))\n        yamls = [\n            f for f in yamls\n            if not (os.path.basename(f).startswith('train')\n                    or os.path.basename(f).startswith('init'))\n        ]\n        for y in yamls:\n            with open(y, 'r') as f:\n                dic_yaml = yaml.load(f, Loader=yaml.BaseLoader)\n                loss = float(dic_yaml['loss_dict']['loss'])\n                epoch = int(dic_yaml['epoch'])\n                step = int(dic_yaml['step'])\n                tag = dic_yaml['tag']\n                val_scores += [[epoch, step, loss, tag]]\n        sorted_val_scores = sorted(val_scores,\n                                   key=lambda x: x[2],\n                                   reverse=False)\n        print(\"best val (epoch, step, loss, tag) = \" +\n              str(sorted_val_scores[:args.num]))\n        path_list = [\n            args.src_path + '/epoch_{}_whole.pt'.format(score[0])\n            for score in sorted_val_scores[:args.num]\n        ]\n    print(path_list)\n    avg = {}\n    num = args.num\n    assert num == len(path_list)\n    for path in path_list:\n        print('Processing {}'.format(path))\n        states = torch.load(path, map_location=torch.device('cpu'))\n        for k in states.keys():\n            if k not in ['step', 'epoch']:\n                if k not in avg.keys():\n                    avg[k] = states[k].clone()\n                else:\n                    avg[k] += states[k]\n    # average\n    for k in avg.keys():\n        if avg[k] is not None:\n            # pytorch 1.6 use true_divide instead of /=\n            avg[k] = torch.true_divide(avg[k], num)\n    print('Saving to {}'.format(args.dst_model))\n    torch.save(avg, args.dst_model)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/bin/export_jit.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom __future__ import print_function\n\nimport argparse\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nimport os\nimport sys\nimport torch\nROOT_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append('{}/../..'.format(ROOT_DIR))\nsys.path.append('{}/../../third_party/Matcha-TTS'.format(ROOT_DIR))\nfrom cosyvoice.cli.cosyvoice import CosyVoice, CosyVoice2\nfrom cosyvoice.utils.file_utils import logging\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description='export your model for deployment')\n    parser.add_argument('--model_dir',\n                        type=str,\n                        default='pretrained_models/CosyVoice-300M',\n                        help='local path')\n    args = parser.parse_args()\n    print(args)\n    return args\n\n\ndef get_optimized_script(model, preserved_attrs=[]):\n    script = torch.jit.script(model)\n    if preserved_attrs != []:\n        script = torch.jit.freeze(script, preserved_attrs=preserved_attrs)\n    else:\n        script = torch.jit.freeze(script)\n    script = torch.jit.optimize_for_inference(script)\n    return script\n\n\ndef main():\n    args = get_args()\n    logging.basicConfig(level=logging.DEBUG,\n                        format='%(asctime)s %(levelname)s %(message)s')\n\n    torch._C._jit_set_fusion_strategy([('STATIC', 1)])\n    torch._C._jit_set_profiling_mode(False)\n    torch._C._jit_set_profiling_executor(False)\n\n    try:\n        model = CosyVoice(args.model_dir)\n    except Exception:\n        try:\n            model = CosyVoice2(args.model_dir)\n        except Exception:\n            raise TypeError('no valid model_type!')\n\n    if not isinstance(model, CosyVoice2):\n        # 1. export llm text_encoder\n        llm_text_encoder = model.model.llm.text_encoder\n        script = get_optimized_script(llm_text_encoder)\n        script.save('{}/llm.text_encoder.fp32.zip'.format(args.model_dir))\n        script = get_optimized_script(llm_text_encoder.half())\n        script.save('{}/llm.text_encoder.fp16.zip'.format(args.model_dir))\n        logging.info('successfully export llm_text_encoder')\n\n        # 2. export llm llm\n        llm_llm = model.model.llm.llm\n        script = get_optimized_script(llm_llm, ['forward_chunk'])\n        script.save('{}/llm.llm.fp32.zip'.format(args.model_dir))\n        script = get_optimized_script(llm_llm.half(), ['forward_chunk'])\n        script.save('{}/llm.llm.fp16.zip'.format(args.model_dir))\n        logging.info('successfully export llm_llm')\n\n        # 3. export flow encoder\n        flow_encoder = model.model.flow.encoder\n        script = get_optimized_script(flow_encoder)\n        script.save('{}/flow.encoder.fp32.zip'.format(args.model_dir))\n        script = get_optimized_script(flow_encoder.half())\n        script.save('{}/flow.encoder.fp16.zip'.format(args.model_dir))\n        logging.info('successfully export flow_encoder')\n    else:\n        # 3. export flow encoder\n        flow_encoder = model.model.flow.encoder\n        script = get_optimized_script(flow_encoder)\n        script.save('{}/flow.encoder.fp32.zip'.format(args.model_dir))\n        script = get_optimized_script(flow_encoder.half())\n        script.save('{}/flow.encoder.fp16.zip'.format(args.model_dir))\n        logging.info('successfully export flow_encoder')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/bin/export_onnx.py",
    "content": "# Copyright (c) 2024 Antgroup Inc (authors: Zhoubofan, hexisyztem@icloud.com)\n# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom __future__ import print_function\n\nimport argparse\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nimport os\nimport sys\nimport onnxruntime\nimport random\nimport torch\nfrom tqdm import tqdm\nROOT_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append('{}/../..'.format(ROOT_DIR))\nsys.path.append('{}/../../third_party/Matcha-TTS'.format(ROOT_DIR))\nfrom cosyvoice.cli.cosyvoice import CosyVoice, CosyVoice2\nfrom cosyvoice.utils.file_utils import logging\n\n\ndef get_dummy_input(batch_size, seq_len, out_channels, device):\n    x = torch.rand((batch_size, out_channels, seq_len), dtype=torch.float32, device=device)\n    mask = torch.ones((batch_size, 1, seq_len), dtype=torch.float32, device=device)\n    mu = torch.rand((batch_size, out_channels, seq_len), dtype=torch.float32, device=device)\n    t = torch.rand((batch_size), dtype=torch.float32, device=device)\n    spks = torch.rand((batch_size, out_channels), dtype=torch.float32, device=device)\n    cond = torch.rand((batch_size, out_channels, seq_len), dtype=torch.float32, device=device)\n    return x, mask, mu, t, spks, cond\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description='export your model for deployment')\n    parser.add_argument('--model_dir',\n                        type=str,\n                        default='pretrained_models/CosyVoice-300M',\n                        help='local path')\n    args = parser.parse_args()\n    print(args)\n    return args\n\n\n@torch.no_grad()\ndef main():\n    args = get_args()\n    logging.basicConfig(level=logging.DEBUG,\n                        format='%(asctime)s %(levelname)s %(message)s')\n\n    try:\n        model = CosyVoice(args.model_dir)\n    except Exception:\n        try:\n            model = CosyVoice2(args.model_dir)\n        except Exception:\n            raise TypeError('no valid model_type!')\n\n    # 1. export flow decoder estimator\n    estimator = model.model.flow.decoder.estimator\n    estimator.eval()\n\n    device = model.model.device\n    batch_size, seq_len = 2, 256\n    out_channels = model.model.flow.decoder.estimator.out_channels\n    x, mask, mu, t, spks, cond = get_dummy_input(batch_size, seq_len, out_channels, device)\n    torch.onnx.export(\n        estimator,\n        (x, mask, mu, t, spks, cond),\n        '{}/flow.decoder.estimator.fp32.onnx'.format(args.model_dir),\n        export_params=True,\n        opset_version=18,\n        do_constant_folding=True,\n        input_names=['x', 'mask', 'mu', 't', 'spks', 'cond'],\n        output_names=['estimator_out'],\n        dynamic_axes={\n            'x': {2: 'seq_len'},\n            'mask': {2: 'seq_len'},\n            'mu': {2: 'seq_len'},\n            'cond': {2: 'seq_len'},\n            'estimator_out': {2: 'seq_len'},\n        }\n    )\n\n    # 2. test computation consistency\n    option = onnxruntime.SessionOptions()\n    option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n    option.intra_op_num_threads = 1\n    providers = ['CUDAExecutionProvider' if torch.cuda.is_available() else 'CPUExecutionProvider']\n    estimator_onnx = onnxruntime.InferenceSession('{}/flow.decoder.estimator.fp32.onnx'.format(args.model_dir),\n                                                  sess_options=option, providers=providers)\n\n    for _ in tqdm(range(10)):\n        x, mask, mu, t, spks, cond = get_dummy_input(batch_size, random.randint(16, 512), out_channels, device)\n        output_pytorch = estimator(x, mask, mu, t, spks, cond)\n        ort_inputs = {\n            'x': x.cpu().numpy(),\n            'mask': mask.cpu().numpy(),\n            'mu': mu.cpu().numpy(),\n            't': t.cpu().numpy(),\n            'spks': spks.cpu().numpy(),\n            'cond': cond.cpu().numpy()\n        }\n        output_onnx = estimator_onnx.run(None, ort_inputs)[0]\n        torch.testing.assert_allclose(output_pytorch, torch.from_numpy(output_onnx).to(device), rtol=1e-2, atol=1e-4)\n    logging.info('successfully export estimator')\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/bin/inference_deprecated.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom __future__ import print_function\n\nimport argparse\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nimport os\nimport torch\nfrom torch.utils.data import DataLoader\nimport torchaudio\nfrom hyperpyyaml import load_hyperpyyaml\nfrom tqdm import tqdm\nfrom cosyvoice.cli.model import CosyVoiceModel, CosyVoice2Model\nfrom cosyvoice.dataset.dataset import Dataset\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description='inference with your model')\n    parser.add_argument('--config', required=True, help='config file')\n    parser.add_argument('--prompt_data', required=True, help='prompt data file')\n    parser.add_argument('--prompt_utt2data', required=True, help='prompt data file')\n    parser.add_argument('--tts_text', required=True, help='tts input file')\n    parser.add_argument('--qwen_pretrain_path', required=False, help='qwen pretrain path')\n    parser.add_argument('--llm_model', required=True, help='llm model file')\n    parser.add_argument('--flow_model', required=True, help='flow model file')\n    parser.add_argument('--hifigan_model', required=True, help='hifigan model file')\n    parser.add_argument('--gpu',\n                        type=int,\n                        default=-1,\n                        help='gpu id for this rank, -1 for cpu')\n    parser.add_argument('--mode',\n                        default='sft',\n                        choices=['sft', 'zero_shot'],\n                        help='inference mode')\n    parser.add_argument('--result_dir', required=True, help='asr result file')\n    args = parser.parse_args()\n    print(args)\n    return args\n\n\ndef main():\n    args = get_args()\n    logging.basicConfig(level=logging.DEBUG,\n                        format='%(asctime)s %(levelname)s %(message)s')\n    os.environ['CUDA_VISIBLE_DEVICES'] = str(args.gpu)\n\n    # Init cosyvoice models from configs\n    use_cuda = args.gpu >= 0 and torch.cuda.is_available()\n    device = torch.device('cuda' if use_cuda else 'cpu')\n    try:\n        with open(args.config, 'r') as f:\n            configs = load_hyperpyyaml(f, overrides={'qwen_pretrain_path': args.qwen_pretrain_path})\n        model = CosyVoice2Model(configs['llm'], configs['flow'], configs['hift'])\n    except Exception:\n        try:\n            with open(args.config, 'r') as f:\n                configs = load_hyperpyyaml(f)\n            model = CosyVoiceModel(configs['llm'], configs['flow'], configs['hift'])\n        except Exception:\n            raise TypeError('no valid model_type!')\n\n    model.load(args.llm_model, args.flow_model, args.hifigan_model)\n\n    test_dataset = Dataset(args.prompt_data, data_pipeline=configs['data_pipeline'], mode='inference', shuffle=False, partition=False,\n                           tts_file=args.tts_text, prompt_utt2data=args.prompt_utt2data)\n    test_data_loader = DataLoader(test_dataset, batch_size=None, num_workers=0)\n\n    sample_rate = configs['sample_rate']\n    del configs\n    os.makedirs(args.result_dir, exist_ok=True)\n    fn = os.path.join(args.result_dir, 'wav.scp')\n    f = open(fn, 'w')\n    with torch.no_grad():\n        for _, batch in tqdm(enumerate(test_data_loader)):\n            utts = batch[\"utts\"]\n            assert len(utts) == 1, \"inference mode only support batchsize 1\"\n            text_token = batch[\"text_token\"].to(device)\n            text_token_len = batch[\"text_token_len\"].to(device)\n            tts_index = batch[\"tts_index\"]\n            tts_text_token = batch[\"tts_text_token\"].to(device)\n            tts_text_token_len = batch[\"tts_text_token_len\"].to(device)\n            speech_token = batch[\"speech_token\"].to(device)\n            speech_token_len = batch[\"speech_token_len\"].to(device)\n            speech_feat = batch[\"speech_feat\"].to(device)\n            speech_feat_len = batch[\"speech_feat_len\"].to(device)\n            utt_embedding = batch[\"utt_embedding\"].to(device)\n            spk_embedding = batch[\"spk_embedding\"].to(device)\n            if args.mode == 'sft':\n                model_input = {'text': tts_text_token, 'text_len': tts_text_token_len,\n                               'llm_embedding': spk_embedding, 'flow_embedding': spk_embedding}\n            else:\n                model_input = {'text': tts_text_token, 'text_len': tts_text_token_len,\n                               'prompt_text': text_token, 'prompt_text_len': text_token_len,\n                               'llm_prompt_speech_token': speech_token, 'llm_prompt_speech_token_len': speech_token_len,\n                               'flow_prompt_speech_token': speech_token, 'flow_prompt_speech_token_len': speech_token_len,\n                               'prompt_speech_feat': speech_feat, 'prompt_speech_feat_len': speech_feat_len,\n                               'llm_embedding': utt_embedding, 'flow_embedding': utt_embedding}\n            tts_speeches = []\n            for model_output in model.tts(**model_input):\n                tts_speeches.append(model_output['tts_speech'])\n            tts_speeches = torch.concat(tts_speeches, dim=1)\n            tts_key = '{}_{}'.format(utts[0], tts_index[0])\n            tts_fn = os.path.join(args.result_dir, '{}.wav'.format(tts_key))\n            torchaudio.save(tts_fn, tts_speeches, sample_rate=sample_rate, backend='soundfile')\n            f.write('{} {}\\n'.format(tts_key, tts_fn))\n            f.flush()\n    f.close()\n    logging.info('Result wav.scp saved in {}'.format(fn))\n\n\nif __name__ == '__main__':\n    logging.warning('this code has been deprecated, please refer to README for CosyVoice inference usage!')\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/bin/train.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom __future__ import print_function\nimport argparse\nimport datetime\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nfrom copy import deepcopy\nimport os\nimport torch\nimport torch.distributed as dist\nimport deepspeed\n\nfrom hyperpyyaml import load_hyperpyyaml\n\nfrom torch.distributed.elastic.multiprocessing.errors import record\n\nfrom cosyvoice.utils.losses import DPOLoss\nfrom cosyvoice.utils.executor import Executor\nfrom cosyvoice.utils.train_utils import (\n    init_distributed,\n    init_dataset_and_dataloader,\n    init_optimizer_and_scheduler,\n    init_summarywriter, save_model,\n    wrap_cuda_model, check_modify_and_save_config)\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description='training your network')\n    parser.add_argument('--train_engine',\n                        default='torch_ddp',\n                        choices=['torch_ddp', 'deepspeed'],\n                        help='Engine for paralleled training')\n    parser.add_argument('--model', required=True, help='model which will be trained')\n    parser.add_argument('--ref_model', required=False, help='ref model used in dpo')\n    parser.add_argument('--config', required=True, help='config file')\n    parser.add_argument('--train_data', required=True, help='train data file')\n    parser.add_argument('--cv_data', required=True, help='cv data file')\n    parser.add_argument('--qwen_pretrain_path', required=False, help='qwen pretrain path')\n    parser.add_argument('--checkpoint', help='checkpoint model')\n    parser.add_argument('--model_dir', required=True, help='save model dir')\n    parser.add_argument('--tensorboard_dir',\n                        default='tensorboard',\n                        help='tensorboard log dir')\n    parser.add_argument('--ddp.dist_backend',\n                        dest='dist_backend',\n                        default='nccl',\n                        choices=['nccl', 'gloo'],\n                        help='distributed backend')\n    parser.add_argument('--num_workers',\n                        default=0,\n                        type=int,\n                        help='num of subprocess workers for reading')\n    parser.add_argument('--prefetch',\n                        default=100,\n                        type=int,\n                        help='prefetch number')\n    parser.add_argument('--pin_memory',\n                        action='store_true',\n                        default=False,\n                        help='Use pinned memory buffers used for reading')\n    parser.add_argument('--use_amp',\n                        action='store_true',\n                        default=False,\n                        help='Use automatic mixed precision training')\n    parser.add_argument('--dpo',\n                        action='store_true',\n                        default=False,\n                        help='Use Direct Preference Optimization')\n    parser.add_argument('--deepspeed.save_states',\n                        dest='save_states',\n                        default='model_only',\n                        choices=['model_only', 'model+optimizer'],\n                        help='save model/optimizer states')\n    parser.add_argument('--timeout',\n                        default=60,\n                        type=int,\n                        help='timeout (in seconds) of cosyvoice_join.')\n    parser = deepspeed.add_config_arguments(parser)\n    args = parser.parse_args()\n    return args\n\n\n@record\ndef main():\n    args = get_args()\n    logging.basicConfig(level=logging.DEBUG,\n                        format='%(asctime)s %(levelname)s %(message)s')\n    # gan train has some special initialization logic\n    gan = True if args.model == 'hifigan' else False\n\n    override_dict = {k: None for k in ['llm', 'flow', 'hift', 'hifigan'] if k != args.model}\n    if gan is True:\n        override_dict.pop('hift')\n    try:\n        with open(args.config, 'r') as f:\n            configs = load_hyperpyyaml(f, overrides={**override_dict, 'qwen_pretrain_path': args.qwen_pretrain_path})\n    except Exception:\n        with open(args.config, 'r') as f:\n            configs = load_hyperpyyaml(f, overrides=override_dict)\n    if gan is True:\n        configs['train_conf'] = configs['train_conf_gan']\n    configs['train_conf'].update(vars(args))\n\n    # Init env for ddp\n    init_distributed(args)\n\n    # Get dataset & dataloader\n    train_dataset, cv_dataset, train_data_loader, cv_data_loader = \\\n        init_dataset_and_dataloader(args, configs, gan, args.dpo)\n\n    # Do some sanity checks and save config to arsg.model_dir\n    configs = check_modify_and_save_config(args, configs)\n\n    # Tensorboard summary\n    writer = init_summarywriter(args)\n\n    # load checkpoint\n    if args.dpo is True:\n        configs[args.model].forward = configs[args.model].forward_dpo\n    model = configs[args.model]\n    start_step, start_epoch = 0, -1\n    if args.checkpoint is not None:\n        if os.path.exists(args.checkpoint):\n            state_dict = torch.load(args.checkpoint, map_location='cpu')\n            model.load_state_dict(state_dict, strict=False)\n            if 'step' in state_dict:\n                start_step = state_dict['step']\n            if 'epoch' in state_dict:\n                start_epoch = state_dict['epoch']\n        else:\n            logging.warning('checkpoint {} do not exsist!'.format(args.checkpoint))\n\n    # Dispatch model from cpu to gpu\n    model = wrap_cuda_model(args, model)\n\n    # Get optimizer & scheduler\n    model, optimizer, scheduler, optimizer_d, scheduler_d = init_optimizer_and_scheduler(args, configs, model, gan)\n    scheduler.set_step(start_step)\n    if scheduler_d is not None:\n        scheduler_d.set_step(start_step)\n\n    # Save init checkpoints\n    info_dict = deepcopy(configs['train_conf'])\n    info_dict['step'] = start_step\n    info_dict['epoch'] = start_epoch\n    save_model(model, 'init', info_dict)\n\n    # DPO related\n    if args.dpo is True:\n        ref_model = deepcopy(configs[args.model])\n        state_dict = torch.load(args.ref_model, map_location='cpu')\n        ref_model.load_state_dict(state_dict, strict=False)\n        dpo_loss = DPOLoss(beta=0.01, label_smoothing=0.0, ipo=False)\n        # NOTE maybe it is not needed to wrap ref_model as ddp because its parameter is not updated\n        ref_model = wrap_cuda_model(args, ref_model)\n    else:\n        ref_model, dpo_loss = None, None\n\n    # Get executor\n    executor = Executor(gan=gan, ref_model=ref_model, dpo_loss=dpo_loss)\n    executor.step = start_step\n\n    # Init scaler, used for pytorch amp mixed precision training\n    scaler = torch.cuda.amp.GradScaler() if args.use_amp else None\n    print('start step {} start epoch {}'.format(start_step, start_epoch))\n\n    # Start training loop\n    for epoch in range(start_epoch + 1, info_dict['max_epoch']):\n        executor.epoch = epoch\n        train_dataset.set_epoch(epoch)\n        dist.barrier()\n        group_join = dist.new_group(backend=\"gloo\", timeout=datetime.timedelta(seconds=args.timeout))\n        if gan is True:\n            executor.train_one_epoc_gan(model, optimizer, scheduler, optimizer_d, scheduler_d, train_data_loader, cv_data_loader,\n                                        writer, info_dict, scaler, group_join)\n        else:\n            executor.train_one_epoc(model, optimizer, scheduler, train_data_loader, cv_data_loader, writer, info_dict, scaler, group_join, ref_model=ref_model)\n        dist.destroy_process_group(group_join)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/cli/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/cosyvoice/cli/cosyvoice.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport os\nimport time\nfrom typing import Generator\nfrom tqdm import tqdm\nfrom hyperpyyaml import load_hyperpyyaml\nfrom modelscope import snapshot_download\nimport torch\nfrom cosyvoice.cli.frontend import CosyVoiceFrontEnd\nfrom cosyvoice.cli.model import CosyVoiceModel, CosyVoice2Model\nfrom cosyvoice.utils.file_utils import logging\nfrom cosyvoice.utils.class_utils import get_model_type\n\n\nclass CosyVoice:\n\n    def __init__(self, model_dir, load_jit=False, load_trt=False, fp16=False, trt_concurrent=1):\n        self.instruct = True if '-Instruct' in model_dir else False\n        self.model_dir = model_dir\n        self.fp16 = fp16\n        if not os.path.exists(model_dir):\n            model_dir = snapshot_download(model_dir)\n        hyper_yaml_path = '{}/cosyvoice.yaml'.format(model_dir)\n        if not os.path.exists(hyper_yaml_path):\n            raise ValueError('{} not found!'.format(hyper_yaml_path))\n        with open(hyper_yaml_path, 'r') as f:\n            configs = load_hyperpyyaml(f)\n        assert get_model_type(configs) != CosyVoice2Model, 'do not use {} for CosyVoice initialization!'.format(model_dir)\n        self.frontend = CosyVoiceFrontEnd(configs['get_tokenizer'],\n                                          configs['feat_extractor'],\n                                          '{}/campplus.onnx'.format(model_dir),\n                                          '{}/speech_tokenizer_v1.onnx'.format(model_dir),\n                                          '{}/spk2info.pt'.format(model_dir),\n                                          configs['allowed_special'])\n        self.sample_rate = configs['sample_rate']\n        if torch.cuda.is_available() is False and (load_jit is True or load_trt is True or fp16 is True):\n            load_jit, load_trt, fp16 = False, False, False\n            logging.warning('no cuda device, set load_jit/load_trt/fp16 to False')\n        self.model = CosyVoiceModel(configs['llm'], configs['flow'], configs['hift'], fp16)\n        self.model.load('{}/llm.pt'.format(model_dir),\n                        '{}/flow.pt'.format(model_dir),\n                        '{}/hift.pt'.format(model_dir))\n        if load_jit:\n            self.model.load_jit('{}/llm.text_encoder.{}.zip'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/llm.llm.{}.zip'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/flow.encoder.{}.zip'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'))\n        if load_trt:\n            self.model.load_trt('{}/flow.decoder.estimator.{}.mygpu.plan'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/flow.decoder.estimator.fp32.onnx'.format(model_dir),\n                                trt_concurrent,\n                                self.fp16)\n        del configs\n\n    def list_available_spks(self):\n        spks = list(self.frontend.spk2info.keys())\n        return spks\n\n    def add_zero_shot_spk(self, prompt_text, prompt_speech_16k, zero_shot_spk_id):\n        assert zero_shot_spk_id != '', 'do not use empty zero_shot_spk_id'\n        model_input = self.frontend.frontend_zero_shot('', prompt_text, prompt_speech_16k, self.sample_rate, '')\n        del model_input['text']\n        del model_input['text_len']\n        self.frontend.spk2info[zero_shot_spk_id] = model_input\n        return True\n\n    def save_spkinfo(self):\n        torch.save(self.frontend.spk2info, '{}/spk2info.pt'.format(self.model_dir))\n\n    def inference_sft(self, tts_text, spk_id, stream=False, speed=1.0, text_frontend=True):\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            model_input = self.frontend.frontend_sft(i, spk_id)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n\n    def inference_zero_shot(self, tts_text, prompt_text, prompt_speech_16k, zero_shot_spk_id='', stream=False, speed=1.0, text_frontend=True):\n        prompt_text = self.frontend.text_normalize(prompt_text, split=False, text_frontend=text_frontend)\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            if (not isinstance(i, Generator)) and len(i) < 0.5 * len(prompt_text):\n                logging.warning('synthesis text {} too short than prompt text {}, this may lead to bad performance'.format(i, prompt_text))\n            model_input = self.frontend.frontend_zero_shot(i, prompt_text, prompt_speech_16k, self.sample_rate, zero_shot_spk_id)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n\n    def inference_cross_lingual(self, tts_text, prompt_speech_16k, zero_shot_spk_id='', stream=False, speed=1.0, text_frontend=True):\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            model_input = self.frontend.frontend_cross_lingual(i, prompt_speech_16k, self.sample_rate, zero_shot_spk_id)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n\n    def inference_instruct(self, tts_text, spk_id, instruct_text, stream=False, speed=1.0, text_frontend=True):\n        assert isinstance(self.model, CosyVoiceModel), 'inference_instruct is only implemented for CosyVoice!'\n        if self.instruct is False:\n            raise ValueError('{} do not support instruct inference'.format(self.model_dir))\n        instruct_text = self.frontend.text_normalize(instruct_text, split=False, text_frontend=text_frontend)\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            model_input = self.frontend.frontend_instruct(i, spk_id, instruct_text)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n\n    def inference_vc(self, source_speech_16k, prompt_speech_16k, stream=False, speed=1.0):\n        model_input = self.frontend.frontend_vc(source_speech_16k, prompt_speech_16k, self.sample_rate)\n        start_time = time.time()\n        for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n            speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n            logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n            yield model_output\n            start_time = time.time()\n\n\nclass CosyVoice2(CosyVoice):\n\n    def __init__(self, model_dir, load_jit=False, load_trt=False, load_vllm=False, fp16=False, trt_concurrent=1):\n        self.instruct = True if '-Instruct' in model_dir else False\n        self.model_dir = model_dir\n        self.fp16 = fp16\n        if not os.path.exists(model_dir):\n            model_dir = snapshot_download(model_dir)\n        hyper_yaml_path = '{}/cosyvoice2.yaml'.format(model_dir)\n        if not os.path.exists(hyper_yaml_path):\n            raise ValueError('{} not found!'.format(hyper_yaml_path))\n        with open(hyper_yaml_path, 'r') as f:\n            configs = load_hyperpyyaml(f, overrides={'qwen_pretrain_path': os.path.join(model_dir, 'CosyVoice-BlankEN')})\n        assert get_model_type(configs) == CosyVoice2Model, 'do not use {} for CosyVoice2 initialization!'.format(model_dir)\n        self.frontend = CosyVoiceFrontEnd(configs['get_tokenizer'],\n                                          configs['feat_extractor'],\n                                          '{}/campplus.onnx'.format(model_dir),\n                                          '{}/speech_tokenizer_v2.onnx'.format(model_dir),\n                                          '{}/spk2info.pt'.format(model_dir),\n                                          configs['allowed_special'])\n        self.sample_rate = configs['sample_rate']\n        if torch.cuda.is_available() is False and (load_jit is True or load_trt is True or fp16 is True):\n            load_jit, load_trt, fp16 = False, False, False\n            logging.warning('no cuda device, set load_jit/load_trt/fp16 to False')\n        self.model = CosyVoice2Model(configs['llm'], configs['flow'], configs['hift'], fp16)\n        self.model.load('{}/llm.pt'.format(model_dir),\n                        '{}/flow.pt'.format(model_dir),\n                        '{}/hift.pt'.format(model_dir))\n        if load_vllm:\n            self.model.load_vllm('{}/vllm'.format(model_dir))\n        if load_jit:\n            self.model.load_jit('{}/flow.encoder.{}.zip'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'))\n        if load_trt:\n            self.model.load_trt('{}/flow.decoder.estimator.{}.mygpu.plan'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/flow.decoder.estimator.fp32.onnx'.format(model_dir),\n                                trt_concurrent,\n                                self.fp16)\n        del configs\n\n    def inference_instruct(self, *args, **kwargs):\n        raise NotImplementedError('inference_instruct is not implemented for CosyVoice2!')\n\n    def inference_instruct2(self, tts_text, instruct_text, prompt_speech_16k, zero_shot_spk_id='', stream=False, speed=1.0, text_frontend=True):\n        assert isinstance(self.model, CosyVoice2Model), 'inference_instruct2 is only implemented for CosyVoice2!'\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            model_input = self.frontend.frontend_instruct2(i, instruct_text, prompt_speech_16k, self.sample_rate, zero_shot_spk_id)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/cli/frontend.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom functools import partial\nfrom typing import Generator\nimport json\nimport onnxruntime\nimport torch\nimport numpy as np\nimport whisper\nfrom typing import Callable\nimport torchaudio.compliance.kaldi as kaldi\nimport torchaudio\nimport os\nimport re\nimport inflect\ntry:\n    import ttsfrd\n    use_ttsfrd = True\nexcept ImportError:\n    print(\"failed to import ttsfrd, use wetext instead\")\n    from wetext import Normalizer as ZhNormalizer\n    from wetext import Normalizer as EnNormalizer\n    use_ttsfrd = False\nfrom cosyvoice.utils.file_utils import logging\nfrom cosyvoice.utils.frontend_utils import contains_chinese, replace_blank, replace_corner_mark, remove_bracket, spell_out_number, split_paragraph, is_only_punctuation\n\n\nclass CosyVoiceFrontEnd:\n\n    def __init__(self,\n                 get_tokenizer: Callable,\n                 feat_extractor: Callable,\n                 campplus_model: str,\n                 speech_tokenizer_model: str,\n                 spk2info: str = '',\n                 allowed_special: str = 'all'):\n        self.tokenizer = get_tokenizer()\n        self.feat_extractor = feat_extractor\n        self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n        option = onnxruntime.SessionOptions()\n        option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n        option.intra_op_num_threads = 1\n        self.campplus_session = onnxruntime.InferenceSession(campplus_model, sess_options=option, providers=[\"CPUExecutionProvider\"])\n        self.speech_tokenizer_session = onnxruntime.InferenceSession(speech_tokenizer_model, sess_options=option,\n                                                                     providers=[\"CUDAExecutionProvider\" if torch.cuda.is_available() else\n                                                                                \"CPUExecutionProvider\"])\n        if os.path.exists(spk2info):\n            self.spk2info = torch.load(spk2info, map_location=self.device)\n        else:\n            self.spk2info = {}\n        self.allowed_special = allowed_special\n        self.use_ttsfrd = use_ttsfrd\n        if self.use_ttsfrd:\n            self.frd = ttsfrd.TtsFrontendEngine()\n            ROOT_DIR = os.path.dirname(os.path.abspath(__file__))\n            assert self.frd.initialize('{}/../../pretrained_models/CosyVoice-ttsfrd/resource'.format(ROOT_DIR)) is True, \\\n                'failed to initialize ttsfrd resource'\n            self.frd.set_lang_type('pinyinvg')\n        else:\n            self.zh_tn_model = ZhNormalizer(remove_erhua=False)\n            self.en_tn_model = EnNormalizer()\n            self.inflect_parser = inflect.engine()\n\n    def _extract_text_token(self, text):\n        if isinstance(text, Generator):\n            logging.info('get tts_text generator, will return _extract_text_token_generator!')\n            # NOTE add a dummy text_token_len for compatibility\n            return self._extract_text_token_generator(text), torch.tensor([0], dtype=torch.int32).to(self.device)\n        else:\n            text_token = self.tokenizer.encode(text, allowed_special=self.allowed_special)\n            text_token = torch.tensor([text_token], dtype=torch.int32).to(self.device)\n            text_token_len = torch.tensor([text_token.shape[1]], dtype=torch.int32).to(self.device)\n            return text_token, text_token_len\n\n    def _extract_text_token_generator(self, text_generator):\n        for text in text_generator:\n            text_token, _ = self._extract_text_token(text)\n            for i in range(text_token.shape[1]):\n                yield text_token[:, i: i + 1]\n\n    def _extract_speech_token(self, speech):\n        assert speech.shape[1] / 16000 <= 30, 'do not support extract speech token for audio longer than 30s'\n        feat = whisper.log_mel_spectrogram(speech, n_mels=128)\n        speech_token = self.speech_tokenizer_session.run(None,\n                                                         {self.speech_tokenizer_session.get_inputs()[0].name:\n                                                          feat.detach().cpu().numpy(),\n                                                          self.speech_tokenizer_session.get_inputs()[1].name:\n                                                          np.array([feat.shape[2]], dtype=np.int32)})[0].flatten().tolist()\n        speech_token = torch.tensor([speech_token], dtype=torch.int32).to(self.device)\n        speech_token_len = torch.tensor([speech_token.shape[1]], dtype=torch.int32).to(self.device)\n        return speech_token, speech_token_len\n\n    def _extract_spk_embedding(self, speech):\n        feat = kaldi.fbank(speech,\n                           num_mel_bins=80,\n                           dither=0,\n                           sample_frequency=16000)\n        feat = feat - feat.mean(dim=0, keepdim=True)\n        embedding = self.campplus_session.run(None,\n                                              {self.campplus_session.get_inputs()[0].name: feat.unsqueeze(dim=0).cpu().numpy()})[0].flatten().tolist()\n        embedding = torch.tensor([embedding]).to(self.device)\n        return embedding\n\n    def _extract_speech_feat(self, speech):\n        speech_feat = self.feat_extractor(speech).squeeze(dim=0).transpose(0, 1).to(self.device)\n        speech_feat = speech_feat.unsqueeze(dim=0)\n        speech_feat_len = torch.tensor([speech_feat.shape[1]], dtype=torch.int32).to(self.device)\n        return speech_feat, speech_feat_len\n\n    def text_normalize(self, text, split=True, text_frontend=True):\n        if isinstance(text, Generator):\n            logging.info('get tts_text generator, will skip text_normalize!')\n            return [text]\n        if text_frontend is False or text == '':\n            return [text] if split is True else text\n        text = text.strip()\n        if self.use_ttsfrd:\n            texts = [i[\"text\"] for i in json.loads(self.frd.do_voicegen_frd(text))[\"sentences\"]]\n            text = ''.join(texts)\n        else:\n            if contains_chinese(text):\n                text = self.zh_tn_model.normalize(text)\n                text = text.replace(\"\\n\", \"\")\n                text = replace_blank(text)\n                text = replace_corner_mark(text)\n                text = text.replace(\".\", \"。\")\n                text = text.replace(\" - \", \"，\")\n                text = remove_bracket(text)\n                text = re.sub(r'[，,、]+$', '。', text)\n                texts = list(split_paragraph(text, partial(self.tokenizer.encode, allowed_special=self.allowed_special), \"zh\", token_max_n=80,\n                                             token_min_n=60, merge_len=20, comma_split=False))\n            else:\n                text = self.en_tn_model.normalize(text)\n                text = spell_out_number(text, self.inflect_parser)\n                texts = list(split_paragraph(text, partial(self.tokenizer.encode, allowed_special=self.allowed_special), \"en\", token_max_n=80,\n                                             token_min_n=60, merge_len=20, comma_split=False))\n        texts = [i for i in texts if not is_only_punctuation(i)]\n        return texts if split is True else text\n\n    def frontend_sft(self, tts_text, spk_id):\n        tts_text_token, tts_text_token_len = self._extract_text_token(tts_text)\n        embedding = self.spk2info[spk_id]['embedding']\n        model_input = {'text': tts_text_token, 'text_len': tts_text_token_len, 'llm_embedding': embedding, 'flow_embedding': embedding}\n        return model_input\n\n    def frontend_zero_shot(self, tts_text, prompt_text, prompt_speech_16k, resample_rate, zero_shot_spk_id):\n        tts_text_token, tts_text_token_len = self._extract_text_token(tts_text)\n        if zero_shot_spk_id == '':\n            prompt_text_token, prompt_text_token_len = self._extract_text_token(prompt_text)\n            prompt_speech_resample = torchaudio.transforms.Resample(orig_freq=16000, new_freq=resample_rate)(prompt_speech_16k)\n            speech_feat, speech_feat_len = self._extract_speech_feat(prompt_speech_resample)\n            speech_token, speech_token_len = self._extract_speech_token(prompt_speech_16k)\n            if resample_rate == 24000:\n                # cosyvoice2, force speech_feat % speech_token = 2\n                token_len = min(int(speech_feat.shape[1] / 2), speech_token.shape[1])\n                speech_feat, speech_feat_len[:] = speech_feat[:, :2 * token_len], 2 * token_len\n                speech_token, speech_token_len[:] = speech_token[:, :token_len], token_len\n            embedding = self._extract_spk_embedding(prompt_speech_16k)\n            model_input = {'prompt_text': prompt_text_token, 'prompt_text_len': prompt_text_token_len,\n                           'llm_prompt_speech_token': speech_token, 'llm_prompt_speech_token_len': speech_token_len,\n                           'flow_prompt_speech_token': speech_token, 'flow_prompt_speech_token_len': speech_token_len,\n                           'prompt_speech_feat': speech_feat, 'prompt_speech_feat_len': speech_feat_len,\n                           'llm_embedding': embedding, 'flow_embedding': embedding}\n        else:\n            model_input = self.spk2info[zero_shot_spk_id]\n        model_input['text'] = tts_text_token\n        model_input['text_len'] = tts_text_token_len\n        return model_input\n\n    def frontend_cross_lingual(self, tts_text, prompt_speech_16k, resample_rate, zero_shot_spk_id):\n        model_input = self.frontend_zero_shot(tts_text, '', prompt_speech_16k, resample_rate, zero_shot_spk_id)\n        # in cross lingual mode, we remove prompt in llm\n        del model_input['prompt_text']\n        del model_input['prompt_text_len']\n        del model_input['llm_prompt_speech_token']\n        del model_input['llm_prompt_speech_token_len']\n        return model_input\n\n    def frontend_instruct(self, tts_text, spk_id, instruct_text):\n        model_input = self.frontend_sft(tts_text, spk_id)\n        # in instruct mode, we remove spk_embedding in llm due to information leakage\n        del model_input['llm_embedding']\n        instruct_text_token, instruct_text_token_len = self._extract_text_token(instruct_text + '<endofprompt>')\n        model_input['prompt_text'] = instruct_text_token\n        model_input['prompt_text_len'] = instruct_text_token_len\n        return model_input\n\n    def frontend_instruct2(self, tts_text, instruct_text, prompt_speech_16k, resample_rate, zero_shot_spk_id):\n        model_input = self.frontend_zero_shot(tts_text, instruct_text + '<|endofprompt|>', prompt_speech_16k, resample_rate, zero_shot_spk_id)\n        del model_input['llm_prompt_speech_token']\n        del model_input['llm_prompt_speech_token_len']\n        return model_input\n\n    def frontend_vc(self, source_speech_16k, prompt_speech_16k, resample_rate):\n        prompt_speech_token, prompt_speech_token_len = self._extract_speech_token(prompt_speech_16k)\n        prompt_speech_resample = torchaudio.transforms.Resample(orig_freq=16000, new_freq=resample_rate)(prompt_speech_16k)\n        prompt_speech_feat, prompt_speech_feat_len = self._extract_speech_feat(prompt_speech_resample)\n        embedding = self._extract_spk_embedding(prompt_speech_16k)\n        source_speech_token, source_speech_token_len = self._extract_speech_token(source_speech_16k)\n        model_input = {'source_speech_token': source_speech_token, 'source_speech_token_len': source_speech_token_len,\n                       'flow_prompt_speech_token': prompt_speech_token, 'flow_prompt_speech_token_len': prompt_speech_token_len,\n                       'prompt_speech_feat': prompt_speech_feat, 'prompt_speech_feat_len': prompt_speech_feat_len,\n                       'flow_embedding': embedding}\n        return model_input\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/cli/model.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Bofan Zhou)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport os\nfrom typing import Generator\nimport torch\nimport numpy as np\nimport threading\nimport time\nfrom torch.nn import functional as F\nfrom contextlib import nullcontext\nimport uuid\nfrom cosyvoice.utils.common import fade_in_out\nfrom cosyvoice.utils.file_utils import convert_onnx_to_trt, export_cosyvoice2_vllm\nfrom cosyvoice.utils.common import TrtContextWrapper\n\n\nclass CosyVoiceModel:\n\n    def __init__(self,\n                 llm: torch.nn.Module,\n                 flow: torch.nn.Module,\n                 hift: torch.nn.Module,\n                 fp16: bool = False):\n        self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n        self.llm = llm\n        self.flow = flow\n        self.hift = hift\n        self.fp16 = fp16\n        if self.fp16 is True:\n            self.llm.half()\n            self.flow.half()\n        self.token_min_hop_len = 2 * self.flow.input_frame_rate\n        self.token_max_hop_len = 4 * self.flow.input_frame_rate\n        self.token_overlap_len = 20\n        # mel fade in out\n        self.mel_overlap_len = int(self.token_overlap_len / self.flow.input_frame_rate * 22050 / 256)\n        self.mel_window = np.hamming(2 * self.mel_overlap_len)\n        # hift cache\n        self.mel_cache_len = 20\n        self.source_cache_len = int(self.mel_cache_len * 256)\n        # speech fade in out\n        self.speech_window = np.hamming(2 * self.source_cache_len)\n        # rtf and decoding related\n        self.stream_scale_factor = 1\n        assert self.stream_scale_factor >= 1, 'stream_scale_factor should be greater than 1, change it according to your actual rtf'\n        self.llm_context = torch.cuda.stream(torch.cuda.Stream(self.device)) if torch.cuda.is_available() else nullcontext()\n        self.lock = threading.Lock()\n        # dict used to store session related variable\n        self.tts_speech_token_dict = {}\n        self.llm_end_dict = {}\n        self.mel_overlap_dict = {}\n        self.flow_cache_dict = {}\n        self.hift_cache_dict = {}\n\n    def load(self, llm_model, flow_model, hift_model):\n        self.llm.load_state_dict(torch.load(llm_model, map_location=self.device), strict=True)\n        self.llm.to(self.device).eval()\n        self.flow.load_state_dict(torch.load(flow_model, map_location=self.device), strict=True)\n        self.flow.to(self.device).eval()\n        # in case hift_model is a hifigan model\n        hift_state_dict = {k.replace('generator.', ''): v for k, v in torch.load(hift_model, map_location=self.device).items()}\n        self.hift.load_state_dict(hift_state_dict, strict=True)\n        self.hift.to(self.device).eval()\n\n    def load_jit(self, llm_text_encoder_model, llm_llm_model, flow_encoder_model):\n        llm_text_encoder = torch.jit.load(llm_text_encoder_model, map_location=self.device)\n        self.llm.text_encoder = llm_text_encoder\n        llm_llm = torch.jit.load(llm_llm_model, map_location=self.device)\n        self.llm.llm = llm_llm\n        flow_encoder = torch.jit.load(flow_encoder_model, map_location=self.device)\n        self.flow.encoder = flow_encoder\n\n    def load_trt(self, flow_decoder_estimator_model, flow_decoder_onnx_model, trt_concurrent, fp16):\n        assert torch.cuda.is_available(), 'tensorrt only supports gpu!'\n        if not os.path.exists(flow_decoder_estimator_model) or os.path.getsize(flow_decoder_estimator_model) == 0:\n            convert_onnx_to_trt(flow_decoder_estimator_model, self.get_trt_kwargs(), flow_decoder_onnx_model, fp16)\n        del self.flow.decoder.estimator\n        import tensorrt as trt\n        with open(flow_decoder_estimator_model, 'rb') as f:\n            estimator_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert estimator_engine is not None, 'failed to load trt {}'.format(flow_decoder_estimator_model)\n        self.flow.decoder.estimator = TrtContextWrapper(estimator_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_trt_kwargs(self):\n        min_shape = [(2, 80, 4), (2, 1, 4), (2, 80, 4), (2, 80, 4)]\n        opt_shape = [(2, 80, 500), (2, 1, 500), (2, 80, 500), (2, 80, 500)]\n        max_shape = [(2, 80, 3000), (2, 1, 3000), (2, 80, 3000), (2, 80, 3000)]\n        input_names = [\"x\", \"mask\", \"mu\", \"cond\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape, 'max_shape': max_shape, 'input_names': input_names}\n\n    def llm_job(self, text, prompt_text, llm_prompt_speech_token, llm_embedding, uuid):\n        with self.llm_context, torch.cuda.amp.autocast(self.fp16 is True and hasattr(self.llm, 'vllm') is False):\n            if isinstance(text, Generator):\n                assert isinstance(self, CosyVoice2Model) and not hasattr(self.llm, 'vllm'), 'streaming input text is only implemented for CosyVoice2 and do not support vllm!'\n                for i in self.llm.inference_bistream(text=text,\n                                                     prompt_text=prompt_text.to(self.device),\n                                                     prompt_text_len=torch.tensor([prompt_text.shape[1]], dtype=torch.int32).to(self.device),\n                                                     prompt_speech_token=llm_prompt_speech_token.to(self.device),\n                                                     prompt_speech_token_len=torch.tensor([llm_prompt_speech_token.shape[1]], dtype=torch.int32).to(self.device),\n                                                     embedding=llm_embedding.to(self.device)):\n                    self.tts_speech_token_dict[uuid].append(i)\n            else:\n                for i in self.llm.inference(text=text.to(self.device),\n                                            text_len=torch.tensor([text.shape[1]], dtype=torch.int32).to(self.device),\n                                            prompt_text=prompt_text.to(self.device),\n                                            prompt_text_len=torch.tensor([prompt_text.shape[1]], dtype=torch.int32).to(self.device),\n                                            prompt_speech_token=llm_prompt_speech_token.to(self.device),\n                                            prompt_speech_token_len=torch.tensor([llm_prompt_speech_token.shape[1]], dtype=torch.int32).to(self.device),\n                                            embedding=llm_embedding.to(self.device),\n                                            uuid=uuid):\n                    self.tts_speech_token_dict[uuid].append(i)\n        self.llm_end_dict[uuid] = True\n\n    def vc_job(self, source_speech_token, uuid):\n        self.tts_speech_token_dict[uuid] = source_speech_token.flatten().tolist()\n        self.llm_end_dict[uuid] = True\n\n    def token2wav(self, token, prompt_token, prompt_feat, embedding, uuid, finalize=False, speed=1.0):\n        with torch.cuda.amp.autocast(self.fp16):\n            tts_mel, self.flow_cache_dict[uuid] = self.flow.inference(token=token.to(self.device),\n                                                                      token_len=torch.tensor([token.shape[1]], dtype=torch.int32).to(self.device),\n                                                                      prompt_token=prompt_token.to(self.device),\n                                                                      prompt_token_len=torch.tensor([prompt_token.shape[1]], dtype=torch.int32).to(self.device),\n                                                                      prompt_feat=prompt_feat.to(self.device),\n                                                                      prompt_feat_len=torch.tensor([prompt_feat.shape[1]], dtype=torch.int32).to(self.device),\n                                                                      embedding=embedding.to(self.device),\n                                                                      flow_cache=self.flow_cache_dict[uuid])\n\n        # mel overlap fade in out\n        if self.mel_overlap_dict[uuid].shape[2] != 0:\n            tts_mel = fade_in_out(tts_mel, self.mel_overlap_dict[uuid], self.mel_window)\n        # append hift cache\n        if self.hift_cache_dict[uuid] is not None:\n            hift_cache_mel, hift_cache_source = self.hift_cache_dict[uuid]['mel'], self.hift_cache_dict[uuid]['source']\n            tts_mel = torch.concat([hift_cache_mel, tts_mel], dim=2)\n        else:\n            hift_cache_source = torch.zeros(1, 1, 0)\n        # keep overlap mel and hift cache\n        if finalize is False:\n            self.mel_overlap_dict[uuid] = tts_mel[:, :, -self.mel_overlap_len:]\n            tts_mel = tts_mel[:, :, :-self.mel_overlap_len]\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n            self.hift_cache_dict[uuid] = {'mel': tts_mel[:, :, -self.mel_cache_len:],\n                                          'source': tts_source[:, :, -self.source_cache_len:],\n                                          'speech': tts_speech[:, -self.source_cache_len:]}\n            tts_speech = tts_speech[:, :-self.source_cache_len]\n        else:\n            if speed != 1.0:\n                assert self.hift_cache_dict[uuid] is None, 'speed change only support non-stream inference mode'\n                tts_mel = F.interpolate(tts_mel, size=int(tts_mel.shape[2] / speed), mode='linear')\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n        return tts_speech\n\n    def tts(self, text=torch.zeros(1, 0, dtype=torch.int32), flow_embedding=torch.zeros(0, 192), llm_embedding=torch.zeros(0, 192),\n            prompt_text=torch.zeros(1, 0, dtype=torch.int32),\n            llm_prompt_speech_token=torch.zeros(1, 0, dtype=torch.int32),\n            flow_prompt_speech_token=torch.zeros(1, 0, dtype=torch.int32),\n            prompt_speech_feat=torch.zeros(1, 0, 80), source_speech_token=torch.zeros(1, 0, dtype=torch.int32), stream=False, speed=1.0, **kwargs):\n        # this_uuid is used to track variables related to this inference thread\n        this_uuid = str(uuid.uuid1())\n        with self.lock:\n            self.tts_speech_token_dict[this_uuid], self.llm_end_dict[this_uuid] = [], False\n            self.hift_cache_dict[this_uuid] = None\n            self.mel_overlap_dict[this_uuid] = torch.zeros(1, 80, 0)\n            self.flow_cache_dict[this_uuid] = torch.zeros(1, 80, 0, 2)\n        if source_speech_token.shape[1] == 0:\n            p = threading.Thread(target=self.llm_job, args=(text, prompt_text, llm_prompt_speech_token, llm_embedding, this_uuid))\n        else:\n            p = threading.Thread(target=self.vc_job, args=(source_speech_token, this_uuid))\n        p.start()\n        if stream is True:\n            token_hop_len = self.token_min_hop_len\n            while True:\n                time.sleep(0.1)\n                if len(self.tts_speech_token_dict[this_uuid]) >= token_hop_len + self.token_overlap_len:\n                    this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid][:token_hop_len + self.token_overlap_len]) \\\n                        .unsqueeze(dim=0)\n                    this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                                     prompt_token=flow_prompt_speech_token,\n                                                     prompt_feat=prompt_speech_feat,\n                                                     embedding=flow_embedding,\n                                                     uuid=this_uuid,\n                                                     finalize=False)\n                    yield {'tts_speech': this_tts_speech.cpu()}\n                    with self.lock:\n                        self.tts_speech_token_dict[this_uuid] = self.tts_speech_token_dict[this_uuid][token_hop_len:]\n                    # increase token_hop_len for better speech quality\n                    token_hop_len = min(self.token_max_hop_len, int(token_hop_len * self.stream_scale_factor))\n                if self.llm_end_dict[this_uuid] is True and len(self.tts_speech_token_dict[this_uuid]) < token_hop_len + self.token_overlap_len:\n                    break\n            p.join()\n            # deal with remain tokens, make sure inference remain token len equals token_hop_len when cache_speech is not None\n            this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid]).unsqueeze(dim=0)\n            this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                             prompt_token=flow_prompt_speech_token,\n                                             prompt_feat=prompt_speech_feat,\n                                             embedding=flow_embedding,\n                                             uuid=this_uuid,\n                                             finalize=True)\n            yield {'tts_speech': this_tts_speech.cpu()}\n        else:\n            # deal with all tokens\n            p.join()\n            this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid]).unsqueeze(dim=0)\n            this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                             prompt_token=flow_prompt_speech_token,\n                                             prompt_feat=prompt_speech_feat,\n                                             embedding=flow_embedding,\n                                             uuid=this_uuid,\n                                             finalize=True,\n                                             speed=speed)\n            yield {'tts_speech': this_tts_speech.cpu()}\n        with self.lock:\n            self.tts_speech_token_dict.pop(this_uuid)\n            self.llm_end_dict.pop(this_uuid)\n            self.mel_overlap_dict.pop(this_uuid)\n            self.hift_cache_dict.pop(this_uuid)\n            self.flow_cache_dict.pop(this_uuid)\n        if torch.cuda.is_available():\n            torch.cuda.empty_cache()\n            torch.cuda.current_stream().synchronize()\n\n\nclass CosyVoice2Model(CosyVoiceModel):\n\n    def __init__(self,\n                 llm: torch.nn.Module,\n                 flow: torch.nn.Module,\n                 hift: torch.nn.Module,\n                 fp16: bool = False):\n        self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n        self.llm = llm\n        self.flow = flow\n        self.hift = hift\n        self.fp16 = fp16\n        if self.fp16 is True:\n            self.llm.half()\n            self.flow.half()\n        # NOTE must matching training static_chunk_size\n        self.token_hop_len = 25\n        # hift cache\n        self.mel_cache_len = 8\n        self.source_cache_len = int(self.mel_cache_len * 480)\n        # speech fade in out\n        self.speech_window = np.hamming(2 * self.source_cache_len)\n        # rtf and decoding related\n        self.llm_context = torch.cuda.stream(torch.cuda.Stream(self.device)) if torch.cuda.is_available() else nullcontext()\n        self.lock = threading.Lock()\n        # dict used to store session related variable\n        self.tts_speech_token_dict = {}\n        self.llm_end_dict = {}\n        self.hift_cache_dict = {}\n\n    def load_jit(self, flow_encoder_model):\n        flow_encoder = torch.jit.load(flow_encoder_model, map_location=self.device)\n        self.flow.encoder = flow_encoder\n\n    def load_vllm(self, model_dir):\n        export_cosyvoice2_vllm(self.llm, model_dir, self.device)\n        from vllm import EngineArgs, LLMEngine\n        engine_args = EngineArgs(model=model_dir,\n                                 skip_tokenizer_init=True,\n                                 enable_prompt_embeds=True,\n                                 gpu_memory_utilization=0.2)\n        self.llm.vllm = LLMEngine.from_engine_args(engine_args)\n        self.llm.lock = threading.Lock()\n        del self.llm.llm.model.model.layers\n\n    def token2wav(self, token, prompt_token, prompt_feat, embedding, token_offset, uuid, stream=False, finalize=False, speed=1.0):\n        with torch.cuda.amp.autocast(self.fp16):\n            tts_mel, _ = self.flow.inference(token=token.to(self.device),\n                                             token_len=torch.tensor([token.shape[1]], dtype=torch.int32).to(self.device),\n                                             prompt_token=prompt_token.to(self.device),\n                                             prompt_token_len=torch.tensor([prompt_token.shape[1]], dtype=torch.int32).to(self.device),\n                                             prompt_feat=prompt_feat.to(self.device),\n                                             prompt_feat_len=torch.tensor([prompt_feat.shape[1]], dtype=torch.int32).to(self.device),\n                                             embedding=embedding.to(self.device),\n                                             streaming=stream,\n                                             finalize=finalize)\n        tts_mel = tts_mel[:, :, token_offset * self.flow.token_mel_ratio:]\n        # append hift cache\n        if self.hift_cache_dict[uuid] is not None:\n            hift_cache_mel, hift_cache_source = self.hift_cache_dict[uuid]['mel'], self.hift_cache_dict[uuid]['source']\n            tts_mel = torch.concat([hift_cache_mel, tts_mel], dim=2)\n        else:\n            hift_cache_source = torch.zeros(1, 1, 0)\n        # keep overlap mel and hift cache\n        if finalize is False:\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n            self.hift_cache_dict[uuid] = {'mel': tts_mel[:, :, -self.mel_cache_len:],\n                                          'source': tts_source[:, :, -self.source_cache_len:],\n                                          'speech': tts_speech[:, -self.source_cache_len:]}\n            tts_speech = tts_speech[:, :-self.source_cache_len]\n        else:\n            if speed != 1.0:\n                assert self.hift_cache_dict[uuid] is None, 'speed change only support non-stream inference mode'\n                tts_mel = F.interpolate(tts_mel, size=int(tts_mel.shape[2] / speed), mode='linear')\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n        return tts_speech\n\n    def tts(self, text=torch.zeros(1, 0, dtype=torch.int32), flow_embedding=torch.zeros(0, 192), llm_embedding=torch.zeros(0, 192),\n            prompt_text=torch.zeros(1, 0, dtype=torch.int32),\n            llm_prompt_speech_token=torch.zeros(1, 0, dtype=torch.int32),\n            flow_prompt_speech_token=torch.zeros(1, 0, dtype=torch.int32),\n            prompt_speech_feat=torch.zeros(1, 0, 80), source_speech_token=torch.zeros(1, 0, dtype=torch.int32), stream=False, speed=1.0, **kwargs):\n        # this_uuid is used to track variables related to this inference thread\n        this_uuid = str(uuid.uuid1())\n        with self.lock:\n            self.tts_speech_token_dict[this_uuid], self.llm_end_dict[this_uuid] = [], False\n            self.hift_cache_dict[this_uuid] = None\n        if source_speech_token.shape[1] == 0:\n            p = threading.Thread(target=self.llm_job, args=(text, prompt_text, llm_prompt_speech_token, llm_embedding, this_uuid))\n        else:\n            p = threading.Thread(target=self.vc_job, args=(source_speech_token, this_uuid))\n        p.start()\n        if stream is True:\n            token_offset = 0\n            prompt_token_pad = int(np.ceil(flow_prompt_speech_token.shape[1] / self.token_hop_len) * self.token_hop_len - flow_prompt_speech_token.shape[1])\n            while True:\n                time.sleep(0.1)\n                this_token_hop_len = self.token_hop_len + prompt_token_pad if token_offset == 0 else self.token_hop_len\n                if len(self.tts_speech_token_dict[this_uuid]) - token_offset >= this_token_hop_len + self.flow.pre_lookahead_len:\n                    this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid][:token_offset + this_token_hop_len + self.flow.pre_lookahead_len]).unsqueeze(dim=0)\n                    this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                                     prompt_token=flow_prompt_speech_token,\n                                                     prompt_feat=prompt_speech_feat,\n                                                     embedding=flow_embedding,\n                                                     token_offset=token_offset,\n                                                     uuid=this_uuid,\n                                                     stream=stream,\n                                                     finalize=False)\n                    token_offset += this_token_hop_len\n                    yield {'tts_speech': this_tts_speech.cpu()}\n                if self.llm_end_dict[this_uuid] is True and len(self.tts_speech_token_dict[this_uuid]) - token_offset < this_token_hop_len + self.flow.pre_lookahead_len:\n                    break\n            p.join()\n            # deal with remain tokens, make sure inference remain token len equals token_hop_len when cache_speech is not None\n            this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid]).unsqueeze(dim=0)\n            this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                             prompt_token=flow_prompt_speech_token,\n                                             prompt_feat=prompt_speech_feat,\n                                             embedding=flow_embedding,\n                                             token_offset=token_offset,\n                                             uuid=this_uuid,\n                                             finalize=True)\n            yield {'tts_speech': this_tts_speech.cpu()}\n        else:\n            # deal with all tokens\n            p.join()\n            this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid]).unsqueeze(dim=0)\n            this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                             prompt_token=flow_prompt_speech_token,\n                                             prompt_feat=prompt_speech_feat,\n                                             embedding=flow_embedding,\n                                             token_offset=0,\n                                             uuid=this_uuid,\n                                             finalize=True,\n                                             speed=speed)\n            yield {'tts_speech': this_tts_speech.cpu()}\n        with self.lock:\n            self.tts_speech_token_dict.pop(this_uuid)\n            self.llm_end_dict.pop(this_uuid)\n            self.hift_cache_dict.pop(this_uuid)\n        if torch.cuda.is_available():\n            torch.cuda.empty_cache()\n            torch.cuda.current_stream().synchronize()\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/dataset/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/cosyvoice/dataset/dataset.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc. (authors: Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport random\nimport math\nfrom functools import partial\n\nimport torch\nimport torch.distributed as dist\nfrom torch.utils.data import IterableDataset\nfrom cosyvoice.utils.file_utils import read_lists\n\n\nclass Processor(IterableDataset):\n\n    def __init__(self, source, f, *args, **kw):\n        assert callable(f)\n        self.source = source\n        self.f = f\n        self.args = args\n        self.kw = kw\n\n    def set_epoch(self, epoch):\n        self.source.set_epoch(epoch)\n\n    def __iter__(self):\n        \"\"\" Return an iterator over the source dataset processed by the\n            given processor.\n        \"\"\"\n        assert self.source is not None\n        assert callable(self.f)\n        return self.f(iter(self.source), *self.args, **self.kw)\n\n    def apply(self, f):\n        assert callable(f)\n        return Processor(self, f, *self.args, **self.kw)\n\n\nclass DistributedSampler:\n\n    def __init__(self, shuffle=True, partition=True):\n        self.epoch = -1\n        self.update()\n        self.shuffle = shuffle\n        self.partition = partition\n\n    def update(self):\n        assert dist.is_available()\n        if dist.is_initialized():\n            self.rank = dist.get_rank()\n            self.world_size = dist.get_world_size()\n        else:\n            self.rank = 0\n            self.world_size = 1\n        worker_info = torch.utils.data.get_worker_info()\n        if worker_info is None:\n            self.worker_id = 0\n            self.num_workers = 1\n        else:\n            self.worker_id = worker_info.id\n            self.num_workers = worker_info.num_workers\n        return dict(rank=self.rank,\n                    world_size=self.world_size,\n                    worker_id=self.worker_id,\n                    num_workers=self.num_workers)\n\n    def set_epoch(self, epoch):\n        self.epoch = epoch\n\n    def sample(self, data):\n        \"\"\" Sample data according to rank/world_size/num_workers\n\n            Args:\n                data(List): input data list\n\n            Returns:\n                List: data list after sample\n        \"\"\"\n        data = list(range(len(data)))\n        # force datalist even\n        if self.partition:\n            if self.shuffle:\n                random.Random(self.epoch).shuffle(data)\n            if len(data) < self.world_size:\n                data = data * math.ceil(self.world_size / len(data))\n                data = data[:self.world_size]\n            data = data[self.rank::self.world_size]\n        if len(data) < self.num_workers:\n            data = data * math.ceil(self.num_workers / len(data))\n            data = data[:self.num_workers]\n        data = data[self.worker_id::self.num_workers]\n        return data\n\n\nclass DataList(IterableDataset):\n\n    def __init__(self, lists, shuffle=True, partition=True):\n        self.lists = lists\n        self.sampler = DistributedSampler(shuffle, partition)\n\n    def set_epoch(self, epoch):\n        self.sampler.set_epoch(epoch)\n\n    def __iter__(self):\n        sampler_info = self.sampler.update()\n        indexes = self.sampler.sample(self.lists)\n        for index in indexes:\n            data = dict(src=self.lists[index])\n            data.update(sampler_info)\n            yield data\n\n\ndef Dataset(data_list_file,\n            data_pipeline,\n            mode='train',\n            gan=False,\n            dpo=False,\n            shuffle=True,\n            partition=True):\n    \"\"\" Construct dataset from arguments\n\n        We have two shuffle stage in the Dataset. The first is global\n        shuffle at shards tar/raw file level. The second is global shuffle\n        at training samples level.\n\n        Args:\n            data_type(str): raw/shard\n            tokenizer (BaseTokenizer): tokenizer to tokenize\n            partition(bool): whether to do data partition in terms of rank\n    \"\"\"\n    lists = read_lists(data_list_file)\n    dataset = DataList(lists,\n                       shuffle=shuffle,\n                       partition=partition)\n    # map partial arg to padding func\n    data_pipeline[-1] = partial(data_pipeline[-1], gan=gan, dpo=dpo)\n    for func in data_pipeline:\n        dataset = Processor(dataset, func, mode=mode)\n    return dataset\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/dataset/processor.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nimport random\n\nimport pyarrow.parquet as pq\nfrom io import BytesIO\nimport torch\nimport torchaudio\nfrom torch.nn.utils.rnn import pad_sequence\nimport torch.nn.functional as F\nimport pyworld as pw\n\n\nAUDIO_FORMAT_SETS = {'flac', 'mp3', 'm4a', 'ogg', 'opus', 'wav', 'wma'}\n\n\ndef parquet_opener(data, mode='train', tts_data={}):\n    \"\"\" Give url or local file, return file descriptor\n        Inplace operation.\n\n        Args:\n            data(Iterable[str]): url or local file list\n\n        Returns:\n            Iterable[{src, stream}]\n    \"\"\"\n    for sample in data:\n        assert 'src' in sample\n        url = sample['src']\n        try:\n            for df in pq.ParquetFile(url).iter_batches(batch_size=64):\n                df = df.to_pandas()\n                for i in range(len(df)):\n                    sample.update(dict(df.loc[i]))\n                    if mode == 'train':\n                        # NOTE do not return sample directly, must initialize a new dict\n                        yield {**sample}\n                    else:\n                        for index, text in enumerate(tts_data[df.loc[i, 'utt']]):\n                            yield {**sample, 'tts_index': index, 'tts_text': text}\n        except Exception as ex:\n            logging.warning('Failed to open {}, ex info {}'.format(url, ex))\n\n\ndef filter(data,\n           max_length=10240,\n           min_length=10,\n           token_max_length=200,\n           token_min_length=1,\n           min_output_input_ratio=0.0005,\n           max_output_input_ratio=1,\n           mode='train'):\n    \"\"\" Filter sample according to feature and label length\n        Inplace operation.\n\n        Args::\n            data: Iterable[{key, wav, label, sample_rate}]\n            max_length: drop utterance which is greater than max_length(10ms)\n            min_length: drop utterance which is less than min_length(10ms)\n            token_max_length: drop utterance which is greater than\n                token_max_length, especially when use char unit for\n                english modeling\n            token_min_length: drop utterance which is\n                less than token_max_length\n            min_output_input_ratio: minimal ration of\n                token_length / feats_length(10ms)\n            max_output_input_ratio: maximum ration of\n                token_length / feats_length(10ms)\n\n        Returns:\n            Iterable[{key, wav, label, sample_rate}]\n    \"\"\"\n    for sample in data:\n        sample['speech'], sample['sample_rate'] = torchaudio.load(BytesIO(sample['audio_data']))\n        sample['speech'] = sample['speech'].mean(dim=0, keepdim=True)\n        del sample['audio_data']\n        # sample['wav'] is torch.Tensor, we have 100 frames every second\n        num_frames = sample['speech'].size(1) / sample['sample_rate'] * 100\n        if num_frames < min_length:\n            continue\n        if num_frames > max_length:\n            continue\n        if len(sample['text_token']) < token_min_length:\n            continue\n        if len(sample['text_token']) > token_max_length:\n            continue\n        if len(sample['speech_token']) == 0:\n            continue\n        if 'reject_speech_token' in sample and len(sample['reject_speech_token']) == 0:\n            continue\n        if num_frames != 0:\n            if len(sample['text_token']) / num_frames < min_output_input_ratio:\n                continue\n            if len(sample['text_token']) / num_frames > max_output_input_ratio:\n                continue\n        yield sample\n\n\ndef resample(data, resample_rate=22050, min_sample_rate=16000, mode='train'):\n    \"\"\" Resample data.\n        Inplace operation.\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n            resample_rate: target resample rate\n\n        Returns:\n            Iterable[{key, wav, label, sample_rate}]\n    \"\"\"\n    for sample in data:\n        assert 'sample_rate' in sample\n        assert 'speech' in sample\n        sample_rate = sample['sample_rate']\n        waveform = sample['speech']\n        if sample_rate != resample_rate:\n            if sample_rate < min_sample_rate:\n                continue\n            sample['sample_rate'] = resample_rate\n            sample['speech'] = torchaudio.transforms.Resample(\n                orig_freq=sample_rate, new_freq=resample_rate)(waveform)\n        max_val = sample['speech'].abs().max()\n        if max_val > 1:\n            sample['speech'] /= max_val\n        yield sample\n\n\ndef truncate(data, truncate_length=24576, mode='train'):\n    \"\"\" Truncate data.\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n            truncate_length: truncate length\n\n        Returns:\n            Iterable[{key, wav, label, sample_rate}]\n    \"\"\"\n    for sample in data:\n        waveform = sample['speech']\n        if waveform.shape[1] > truncate_length:\n            start = random.randint(0, waveform.shape[1] - truncate_length)\n            waveform = waveform[:, start: start + truncate_length]\n        else:\n            waveform = torch.concat([waveform, torch.zeros(1, truncate_length - waveform.shape[1])], dim=1)\n        sample['speech'] = waveform\n        yield sample\n\n\ndef compute_fbank(data,\n                  feat_extractor,\n                  token_mel_ratio=0,\n                  mode='train'):\n    \"\"\" Extract fbank\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n    for sample in data:\n        assert 'sample_rate' in sample\n        assert 'speech' in sample\n        assert 'utt' in sample\n        assert 'text_token' in sample\n        waveform = sample['speech']\n        feat = feat_extractor(waveform).squeeze(dim=0).transpose(0, 1)\n        if token_mel_ratio != 0:\n            # trim to align speech_token and speech_feat\n            token_len = int(min(feat.shape[0] / token_mel_ratio, sample[\"speech_token\"].shape[0]))\n            feat = feat[:token_mel_ratio * token_len]\n            sample[\"speech_token\"] = sample[\"speech_token\"][:token_len]\n        sample['speech_feat'] = feat\n        yield sample\n\n\ndef compute_f0(data, sample_rate, hop_size, mode='train'):\n    \"\"\" Extract f0\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n    frame_period = hop_size * 1000 / sample_rate\n    for sample in data:\n        assert 'sample_rate' in sample\n        assert 'speech' in sample\n        assert 'utt' in sample\n        assert 'text_token' in sample\n        waveform = sample['speech']\n        _f0, t = pw.harvest(waveform.squeeze(dim=0).numpy().astype('double'), sample_rate, frame_period=frame_period)\n        if sum(_f0 != 0) < 5:  # this happens when the algorithm fails\n            _f0, t = pw.dio(waveform.squeeze(dim=0).numpy().astype('double'), sample_rate, frame_period=frame_period)  # if harvest fails, try dio\n        f0 = pw.stonemask(waveform.squeeze(dim=0).numpy().astype('double'), _f0, t, sample_rate)\n        f0 = F.interpolate(torch.from_numpy(f0).view(1, 1, -1), size=sample['speech_feat'].shape[0], mode='linear').view(-1)\n        sample['pitch_feat'] = f0\n        yield sample\n\n\ndef parse_embedding(data, normalize, mode='train'):\n    \"\"\" Parse utt_embedding/spk_embedding\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n    for sample in data:\n        sample['utt_embedding'] = torch.tensor(sample['utt_embedding'], dtype=torch.float32)\n        sample['spk_embedding'] = torch.tensor(sample['spk_embedding'], dtype=torch.float32)\n        if normalize:\n            sample['utt_embedding'] = F.normalize(sample['utt_embedding'], dim=0)\n            sample['spk_embedding'] = F.normalize(sample['spk_embedding'], dim=0)\n        yield sample\n\n\ndef tokenize(data, get_tokenizer, allowed_special, mode='train'):\n    \"\"\" Decode text to chars or BPE\n        Inplace operation\n\n        Args:\n            data: Iterable[{key, wav, txt, sample_rate}]\n\n        Returns:\n            Iterable[{key, wav, txt, tokens, label, sample_rate}]\n    \"\"\"\n    tokenizer = get_tokenizer()\n    for sample in data:\n        assert 'text' in sample\n        sample['text_token'] = tokenizer.encode(sample['text'], allowed_special=allowed_special)\n        yield sample\n\n\ndef shuffle(data, shuffle_size=10000, mode='train'):\n    \"\"\" Local shuffle the data\n\n        Args:\n            data: Iterable[{key, feat, label}]\n            shuffle_size: buffer size for shuffle\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n    buf = []\n    for sample in data:\n        buf.append(sample)\n        if len(buf) >= shuffle_size:\n            random.shuffle(buf)\n            for x in buf:\n                yield x\n            buf = []\n    # The sample left over\n    random.shuffle(buf)\n    for x in buf:\n        yield x\n\n\ndef sort(data, sort_size=500, mode='train'):\n    \"\"\" Sort the data by feature length.\n        Sort is used after shuffle and before batch, so we can group\n        utts with similar lengths into a batch, and `sort_size` should\n        be less than `shuffle_size`\n\n        Args:\n            data: Iterable[{key, feat, label}]\n            sort_size: buffer size for sort\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n\n    buf = []\n    for sample in data:\n        buf.append(sample)\n        if len(buf) >= sort_size:\n            buf.sort(key=lambda x: x['speech_feat'].size(0))\n            for x in buf:\n                yield x\n            buf = []\n    # The sample left over\n    buf.sort(key=lambda x: x['speech_feat'].size(0))\n    for x in buf:\n        yield x\n\n\ndef static_batch(data, batch_size=16):\n    \"\"\" Static batch the data by `batch_size`\n\n        Args:\n            data: Iterable[{key, feat, label}]\n            batch_size: batch size\n\n        Returns:\n            Iterable[List[{key, feat, label}]]\n    \"\"\"\n    buf = []\n    for sample in data:\n        buf.append(sample)\n        if len(buf) >= batch_size:\n            yield buf\n            buf = []\n    if len(buf) > 0:\n        yield buf\n\n\ndef dynamic_batch(data, max_frames_in_batch=12000, mode='train'):\n    \"\"\" Dynamic batch the data until the total frames in batch\n        reach `max_frames_in_batch`\n\n        Args:\n            data: Iterable[{key, feat, label}]\n            max_frames_in_batch: max_frames in one batch\n\n        Returns:\n            Iterable[List[{key, feat, label}]]\n    \"\"\"\n    buf = []\n    longest_frames = 0\n    for sample in data:\n        assert 'speech_feat' in sample\n        assert isinstance(sample['speech_feat'], torch.Tensor)\n        new_sample_frames = sample['speech_feat'].size(0)\n        longest_frames = max(longest_frames, new_sample_frames)\n        frames_after_padding = longest_frames * (len(buf) + 1)\n        if frames_after_padding > max_frames_in_batch:\n            yield buf\n            buf = [sample]\n            longest_frames = new_sample_frames\n        else:\n            buf.append(sample)\n    if len(buf) > 0:\n        yield buf\n\n\ndef batch(data, batch_type='static', batch_size=16, max_frames_in_batch=12000, mode='train'):\n    \"\"\" Wrapper for static/dynamic batch\n    \"\"\"\n    if batch_type == 'static':\n        return static_batch(data, batch_size)\n    elif batch_type == 'dynamic':\n        return dynamic_batch(data, max_frames_in_batch)\n    else:\n        logging.fatal('Unsupported batch type {}'.format(batch_type))\n\n\ndef padding(data, use_spk_embedding, mode='train', gan=False, dpo=False):\n    \"\"\" Padding the data into training data\n\n        Args:\n            data: Iterable[List[{key, feat, label}]]\n\n        Returns:\n            Iterable[Tuple(keys, feats, labels, feats lengths, label lengths)]\n    \"\"\"\n    for sample in data:\n        assert isinstance(sample, list)\n        speech_feat_len = torch.tensor([x['speech_feat'].size(1) for x in sample],\n                                       dtype=torch.int32)\n        order = torch.argsort(speech_feat_len, descending=True)\n\n        utts = [sample[i]['utt'] for i in order]\n        speech = [sample[i]['speech'].squeeze(dim=0) for i in order]\n        speech_len = torch.tensor([i.size(0) for i in speech], dtype=torch.int32)\n        speech = pad_sequence(speech, batch_first=True, padding_value=0)\n        speech_token = [torch.tensor(sample[i]['speech_token']) for i in order]\n        speech_token_len = torch.tensor([i.size(0) for i in speech_token], dtype=torch.int32)\n        speech_token = pad_sequence(speech_token,\n                                    batch_first=True,\n                                    padding_value=0)\n        speech_feat = [sample[i]['speech_feat'] for i in order]\n        speech_feat_len = torch.tensor([i.size(0) for i in speech_feat], dtype=torch.int32)\n        speech_feat = pad_sequence(speech_feat,\n                                   batch_first=True,\n                                   padding_value=0)\n        text = [sample[i]['text'] for i in order]\n        text_token = [torch.tensor(sample[i]['text_token']) for i in order]\n        text_token_len = torch.tensor([i.size(0) for i in text_token], dtype=torch.int32)\n        text_token = pad_sequence(text_token, batch_first=True, padding_value=0)\n        utt_embedding = torch.stack([sample[i]['utt_embedding'] for i in order], dim=0)\n        spk_embedding = torch.stack([sample[i]['spk_embedding'] for i in order], dim=0)\n        batch = {\n            \"utts\": utts,\n            \"speech\": speech,\n            \"speech_len\": speech_len,\n            \"speech_token\": speech_token,\n            \"speech_token_len\": speech_token_len,\n            \"speech_feat\": speech_feat,\n            \"speech_feat_len\": speech_feat_len,\n            \"text\": text,\n            \"text_token\": text_token,\n            \"text_token_len\": text_token_len,\n            \"utt_embedding\": utt_embedding,\n            \"spk_embedding\": spk_embedding,\n        }\n        if gan is True:\n            # in gan train, we need pitch_feat\n            pitch_feat = [sample[i]['pitch_feat'] for i in order]\n            pitch_feat_len = torch.tensor([i.size(0) for i in pitch_feat], dtype=torch.int32)\n            pitch_feat = pad_sequence(pitch_feat,\n                                      batch_first=True,\n                                      padding_value=0)\n            batch[\"pitch_feat\"] = pitch_feat\n            batch[\"pitch_feat_len\"] = pitch_feat_len\n        else:\n            # only gan train needs speech, delete it to save memory\n            del batch[\"speech\"]\n            del batch[\"speech_len\"]\n        if dpo is True:\n            reject_speech_token = [torch.tensor(sample[i]['reject_speech_token']) for i in order]\n            reject_speech_token_len = torch.tensor([i.size(0) for i in reject_speech_token], dtype=torch.int32)\n            reject_speech_token = pad_sequence(reject_speech_token,\n                                               batch_first=True,\n                                               padding_value=0)\n            batch['reject_speech_token'] = reject_speech_token\n            batch['reject_speech_token_len'] = reject_speech_token_len\n        if use_spk_embedding is True:\n            batch[\"embedding\"] = batch[\"spk_embedding\"]\n        else:\n            batch[\"embedding\"] = batch[\"utt_embedding\"]\n        yield batch\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/flow/decoder.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import Tuple\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import pack, rearrange, repeat\nfrom cosyvoice.utils.common import mask_to_bias\nfrom cosyvoice.utils.mask import add_optional_chunk_mask\nfrom matcha.models.components.decoder import SinusoidalPosEmb, Block1D, ResnetBlock1D, Downsample1D, TimestepEmbedding, Upsample1D\nfrom matcha.models.components.transformer import BasicTransformerBlock\n\n\nclass Transpose(torch.nn.Module):\n    def __init__(self, dim0: int, dim1: int):\n        super().__init__()\n        self.dim0 = dim0\n        self.dim1 = dim1\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = torch.transpose(x, self.dim0, self.dim1)\n        return x\n\n\nclass CausalConv1d(torch.nn.Conv1d):\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size: int,\n        stride: int = 1,\n        dilation: int = 1,\n        groups: int = 1,\n        bias: bool = True,\n        padding_mode: str = 'zeros',\n        device=None,\n        dtype=None\n    ) -> None:\n        super(CausalConv1d, self).__init__(in_channels, out_channels,\n                                           kernel_size, stride,\n                                           padding=0, dilation=dilation,\n                                           groups=groups, bias=bias,\n                                           padding_mode=padding_mode,\n                                           device=device, dtype=dtype)\n        assert stride == 1\n        self.causal_padding = kernel_size - 1\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = F.pad(x, (self.causal_padding, 0), value=0.0)\n        x = super(CausalConv1d, self).forward(x)\n        return x\n\n\nclass CausalBlock1D(Block1D):\n    def __init__(self, dim: int, dim_out: int):\n        super(CausalBlock1D, self).__init__(dim, dim_out)\n        self.block = torch.nn.Sequential(\n            CausalConv1d(dim, dim_out, 3),\n            Transpose(1, 2),\n            nn.LayerNorm(dim_out),\n            Transpose(1, 2),\n            nn.Mish(),\n        )\n\n    def forward(self, x: torch.Tensor, mask: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:\n        output = self.block(x * mask)\n        return output * mask\n\n\nclass CausalResnetBlock1D(ResnetBlock1D):\n    def __init__(self, dim: int, dim_out: int, time_emb_dim: int, groups: int = 8):\n        super(CausalResnetBlock1D, self).__init__(dim, dim_out, time_emb_dim, groups)\n        self.block1 = CausalBlock1D(dim, dim_out)\n        self.block2 = CausalBlock1D(dim_out, dim_out)\n\n\nclass ConditionalDecoder(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        channels=(256, 256),\n        dropout=0.05,\n        attention_head_dim=64,\n        n_blocks=1,\n        num_mid_blocks=2,\n        num_heads=4,\n        act_fn=\"snake\",\n    ):\n        \"\"\"\n        This decoder requires an input with the same shape of the target. So, if your text content\n        is shorter or longer than the outputs, please re-sampling it before feeding to the decoder.\n        \"\"\"\n        super().__init__()\n        channels = tuple(channels)\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n\n        self.time_embeddings = SinusoidalPosEmb(in_channels)\n        time_embed_dim = channels[0] * 4\n        self.time_mlp = TimestepEmbedding(\n            in_channels=in_channels,\n            time_embed_dim=time_embed_dim,\n            act_fn=\"silu\",\n        )\n        self.down_blocks = nn.ModuleList([])\n        self.mid_blocks = nn.ModuleList([])\n        self.up_blocks = nn.ModuleList([])\n\n        output_channel = in_channels\n        for i in range(len(channels)):  # pylint: disable=consider-using-enumerate\n            input_channel = output_channel\n            output_channel = channels[i]\n            is_last = i == len(channels) - 1\n            resnet = ResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            downsample = (\n                Downsample1D(output_channel) if not is_last else nn.Conv1d(output_channel, output_channel, 3, padding=1)\n            )\n            self.down_blocks.append(nn.ModuleList([resnet, transformer_blocks, downsample]))\n\n        for _ in range(num_mid_blocks):\n            input_channel = channels[-1]\n            out_channels = channels[-1]\n            resnet = ResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n\n            self.mid_blocks.append(nn.ModuleList([resnet, transformer_blocks]))\n\n        channels = channels[::-1] + (channels[0],)\n        for i in range(len(channels) - 1):\n            input_channel = channels[i] * 2\n            output_channel = channels[i + 1]\n            is_last = i == len(channels) - 2\n            resnet = ResnetBlock1D(\n                dim=input_channel,\n                dim_out=output_channel,\n                time_emb_dim=time_embed_dim,\n            )\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            upsample = (\n                Upsample1D(output_channel, use_conv_transpose=True)\n                if not is_last\n                else nn.Conv1d(output_channel, output_channel, 3, padding=1)\n            )\n            self.up_blocks.append(nn.ModuleList([resnet, transformer_blocks, upsample]))\n        self.final_block = Block1D(channels[-1], channels[-1])\n        self.final_proj = nn.Conv1d(channels[-1], self.out_channels, 1)\n        self.initialize_weights()\n\n    def initialize_weights(self):\n        for m in self.modules():\n            if isinstance(m, nn.Conv1d):\n                nn.init.kaiming_normal_(m.weight, nonlinearity=\"relu\")\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.GroupNorm):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.Linear):\n                nn.init.kaiming_normal_(m.weight, nonlinearity=\"relu\")\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n    def forward(self, x, mask, mu, t, spks=None, cond=None, streaming=False):\n        \"\"\"Forward pass of the UNet1DConditional model.\n\n        Args:\n            x (torch.Tensor): shape (batch_size, in_channels, time)\n            mask (_type_): shape (batch_size, 1, time)\n            t (_type_): shape (batch_size)\n            spks (_type_, optional): shape: (batch_size, condition_channels). Defaults to None.\n            cond (_type_, optional): placeholder for future use. Defaults to None.\n\n        Raises:\n            ValueError: _description_\n            ValueError: _description_\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n\n        t = self.time_embeddings(t).to(t.dtype)\n        t = self.time_mlp(t)\n\n        x = pack([x, mu], \"b * t\")[0]\n\n        if spks is not None:\n            spks = repeat(spks, \"b c -> b c t\", t=x.shape[-1])\n            x = pack([x, spks], \"b * t\")[0]\n        if cond is not None:\n            x = pack([x, cond], \"b * t\")[0]\n\n        hiddens = []\n        masks = [mask]\n        for resnet, transformer_blocks, downsample in self.down_blocks:\n            mask_down = masks[-1]\n            x = resnet(x, mask_down, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            attn_mask = add_optional_chunk_mask(x, mask_down.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n            hiddens.append(x)  # Save hidden states for skip connections\n            x = downsample(x * mask_down)\n            masks.append(mask_down[:, :, ::2])\n        masks = masks[:-1]\n        mask_mid = masks[-1]\n\n        for resnet, transformer_blocks in self.mid_blocks:\n            x = resnet(x, mask_mid, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            attn_mask = add_optional_chunk_mask(x, mask_mid.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n\n        for resnet, transformer_blocks, upsample in self.up_blocks:\n            mask_up = masks.pop()\n            skip = hiddens.pop()\n            x = pack([x[:, :, :skip.shape[-1]], skip], \"b * t\")[0]\n            x = resnet(x, mask_up, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            attn_mask = add_optional_chunk_mask(x, mask_up.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n            x = upsample(x * mask_up)\n        x = self.final_block(x, mask_up)\n        output = self.final_proj(x * mask_up)\n        return output * mask\n\n\nclass CausalConditionalDecoder(ConditionalDecoder):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        channels=(256, 256),\n        dropout=0.05,\n        attention_head_dim=64,\n        n_blocks=1,\n        num_mid_blocks=2,\n        num_heads=4,\n        act_fn=\"snake\",\n        static_chunk_size=50,\n        num_decoding_left_chunks=2,\n    ):\n        \"\"\"\n        This decoder requires an input with the same shape of the target. So, if your text content\n        is shorter or longer than the outputs, please re-sampling it before feeding to the decoder.\n        \"\"\"\n        torch.nn.Module.__init__(self)\n        channels = tuple(channels)\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.time_embeddings = SinusoidalPosEmb(in_channels)\n        time_embed_dim = channels[0] * 4\n        self.time_mlp = TimestepEmbedding(\n            in_channels=in_channels,\n            time_embed_dim=time_embed_dim,\n            act_fn=\"silu\",\n        )\n        self.static_chunk_size = static_chunk_size\n        self.num_decoding_left_chunks = num_decoding_left_chunks\n        self.down_blocks = nn.ModuleList([])\n        self.mid_blocks = nn.ModuleList([])\n        self.up_blocks = nn.ModuleList([])\n\n        output_channel = in_channels\n        for i in range(len(channels)):  # pylint: disable=consider-using-enumerate\n            input_channel = output_channel\n            output_channel = channels[i]\n            is_last = i == len(channels) - 1\n            resnet = CausalResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            downsample = (\n                Downsample1D(output_channel) if not is_last else CausalConv1d(output_channel, output_channel, 3)\n            )\n            self.down_blocks.append(nn.ModuleList([resnet, transformer_blocks, downsample]))\n\n        for _ in range(num_mid_blocks):\n            input_channel = channels[-1]\n            out_channels = channels[-1]\n            resnet = CausalResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n\n            self.mid_blocks.append(nn.ModuleList([resnet, transformer_blocks]))\n\n        channels = channels[::-1] + (channels[0],)\n        for i in range(len(channels) - 1):\n            input_channel = channels[i] * 2\n            output_channel = channels[i + 1]\n            is_last = i == len(channels) - 2\n            resnet = CausalResnetBlock1D(\n                dim=input_channel,\n                dim_out=output_channel,\n                time_emb_dim=time_embed_dim,\n            )\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            upsample = (\n                Upsample1D(output_channel, use_conv_transpose=True)\n                if not is_last\n                else CausalConv1d(output_channel, output_channel, 3)\n            )\n            self.up_blocks.append(nn.ModuleList([resnet, transformer_blocks, upsample]))\n        self.final_block = CausalBlock1D(channels[-1], channels[-1])\n        self.final_proj = nn.Conv1d(channels[-1], self.out_channels, 1)\n        self.initialize_weights()\n\n    def forward(self, x, mask, mu, t, spks=None, cond=None, streaming=False):\n        \"\"\"Forward pass of the UNet1DConditional model.\n\n        Args:\n            x (torch.Tensor): shape (batch_size, in_channels, time)\n            mask (_type_): shape (batch_size, 1, time)\n            t (_type_): shape (batch_size)\n            spks (_type_, optional): shape: (batch_size, condition_channels). Defaults to None.\n            cond (_type_, optional): placeholder for future use. Defaults to None.\n\n        Raises:\n            ValueError: _description_\n            ValueError: _description_\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n        t = self.time_embeddings(t).to(t.dtype)\n        t = self.time_mlp(t)\n\n        x = pack([x, mu], \"b * t\")[0]\n\n        if spks is not None:\n            spks = repeat(spks, \"b c -> b c t\", t=x.shape[-1])\n            x = pack([x, spks], \"b * t\")[0]\n        if cond is not None:\n            x = pack([x, cond], \"b * t\")[0]\n\n        hiddens = []\n        masks = [mask]\n        for resnet, transformer_blocks, downsample in self.down_blocks:\n            mask_down = masks[-1]\n            x = resnet(x, mask_down, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            if streaming is True:\n                attn_mask = add_optional_chunk_mask(x, mask_down.bool(), False, False, 0, self.static_chunk_size, -1)\n            else:\n                attn_mask = add_optional_chunk_mask(x, mask_down.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n            hiddens.append(x)  # Save hidden states for skip connections\n            x = downsample(x * mask_down)\n            masks.append(mask_down[:, :, ::2])\n        masks = masks[:-1]\n        mask_mid = masks[-1]\n\n        for resnet, transformer_blocks in self.mid_blocks:\n            x = resnet(x, mask_mid, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            if streaming is True:\n                attn_mask = add_optional_chunk_mask(x, mask_mid.bool(), False, False, 0, self.static_chunk_size, -1)\n            else:\n                attn_mask = add_optional_chunk_mask(x, mask_mid.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n\n        for resnet, transformer_blocks, upsample in self.up_blocks:\n            mask_up = masks.pop()\n            skip = hiddens.pop()\n            x = pack([x[:, :, :skip.shape[-1]], skip], \"b * t\")[0]\n            x = resnet(x, mask_up, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            if streaming is True:\n                attn_mask = add_optional_chunk_mask(x, mask_up.bool(), False, False, 0, self.static_chunk_size, -1)\n            else:\n                attn_mask = add_optional_chunk_mask(x, mask_up.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n            x = upsample(x * mask_up)\n        x = self.final_block(x, mask_up)\n        output = self.final_proj(x * mask_up)\n        return output * mask\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/flow/flow.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport logging\nimport random\nfrom typing import Dict, Optional\nimport torch\nimport torch.nn as nn\nfrom torch.nn import functional as F\nfrom omegaconf import DictConfig\nfrom cosyvoice.utils.mask import make_pad_mask\n\n\nclass MaskedDiffWithXvec(torch.nn.Module):\n    def __init__(self,\n                 input_size: int = 512,\n                 output_size: int = 80,\n                 spk_embed_dim: int = 192,\n                 output_type: str = \"mel\",\n                 vocab_size: int = 4096,\n                 input_frame_rate: int = 50,\n                 only_mask_loss: bool = True,\n                 encoder: torch.nn.Module = None,\n                 length_regulator: torch.nn.Module = None,\n                 decoder: torch.nn.Module = None,\n                 decoder_conf: Dict = {'in_channels': 240, 'out_channel': 80, 'spk_emb_dim': 80, 'n_spks': 1,\n                                       'cfm_params': DictConfig({'sigma_min': 1e-06, 'solver': 'euler', 't_scheduler': 'cosine',\n                                                                 'training_cfg_rate': 0.2, 'inference_cfg_rate': 0.7, 'reg_loss_type': 'l1'}),\n                                       'decoder_params': {'channels': [256, 256], 'dropout': 0.0, 'attention_head_dim': 64,\n                                                          'n_blocks': 4, 'num_mid_blocks': 12, 'num_heads': 8, 'act_fn': 'gelu'}},\n                 mel_feat_conf: Dict = {'n_fft': 1024, 'num_mels': 80, 'sampling_rate': 22050,\n                                        'hop_size': 256, 'win_size': 1024, 'fmin': 0, 'fmax': 8000}):\n        super().__init__()\n        self.input_size = input_size\n        self.output_size = output_size\n        self.decoder_conf = decoder_conf\n        self.mel_feat_conf = mel_feat_conf\n        self.vocab_size = vocab_size\n        self.output_type = output_type\n        self.input_frame_rate = input_frame_rate\n        logging.info(f\"input frame rate={self.input_frame_rate}\")\n        self.input_embedding = nn.Embedding(vocab_size, input_size)\n        self.spk_embed_affine_layer = torch.nn.Linear(spk_embed_dim, output_size)\n        self.encoder = encoder\n        self.encoder_proj = torch.nn.Linear(self.encoder.output_size(), output_size)\n        self.decoder = decoder\n        self.length_regulator = length_regulator\n        self.only_mask_loss = only_mask_loss\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        token = batch['speech_token'].to(device)\n        token_len = batch['speech_token_len'].to(device)\n        feat = batch['speech_feat'].to(device)\n        feat_len = batch['speech_feat_len'].to(device)\n        embedding = batch['embedding'].to(device)\n\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat text and prompt_text\n        mask = (~make_pad_mask(token_len)).float().unsqueeze(-1).to(device)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        h, h_lengths = self.encoder(token, token_len)\n        h = self.encoder_proj(h)\n        h, h_lengths = self.length_regulator(h, feat_len)\n\n        # get conditions\n        conds = torch.zeros(feat.shape, device=token.device)\n        for i, j in enumerate(feat_len):\n            if random.random() < 0.5:\n                continue\n            index = random.randint(0, int(0.3 * j))\n            conds[i, :index] = feat[i, :index]\n        conds = conds.transpose(1, 2)\n\n        mask = (~make_pad_mask(feat_len)).to(h)\n        # NOTE this is unnecessary, feat/h already same shape\n        loss, _ = self.decoder.compute_loss(\n            feat.transpose(1, 2).contiguous(),\n            mask.unsqueeze(1),\n            h.transpose(1, 2).contiguous(),\n            embedding,\n            cond=conds\n        )\n        return {'loss': loss}\n\n    @torch.inference_mode()\n    def inference(self,\n                  token,\n                  token_len,\n                  prompt_token,\n                  prompt_token_len,\n                  prompt_feat,\n                  prompt_feat_len,\n                  embedding,\n                  flow_cache):\n        assert token.shape[0] == 1\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat speech token and prompt speech token\n        token_len1, token_len2 = prompt_token.shape[1], token.shape[1]\n        token, token_len = torch.concat([prompt_token, token], dim=1), prompt_token_len + token_len\n        mask = (~make_pad_mask(token_len)).unsqueeze(-1).to(embedding)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        h, h_lengths = self.encoder(token, token_len)\n        h = self.encoder_proj(h)\n        mel_len1, mel_len2 = prompt_feat.shape[1], int(token_len2 / self.input_frame_rate * 22050 / 256)\n        h, h_lengths = self.length_regulator.inference(h[:, :token_len1], h[:, token_len1:], mel_len1, mel_len2, self.input_frame_rate)\n\n        # get conditions\n        conds = torch.zeros([1, mel_len1 + mel_len2, self.output_size], device=token.device).to(h.dtype)\n        conds[:, :mel_len1] = prompt_feat\n        conds = conds.transpose(1, 2)\n\n        mask = (~make_pad_mask(torch.tensor([mel_len1 + mel_len2]))).to(h)\n        feat, flow_cache = self.decoder(\n            mu=h.transpose(1, 2).contiguous(),\n            mask=mask.unsqueeze(1),\n            spks=embedding,\n            cond=conds,\n            n_timesteps=10,\n            prompt_len=mel_len1,\n            cache=flow_cache\n        )\n        feat = feat[:, :, mel_len1:]\n        assert feat.shape[2] == mel_len2\n        return feat.float(), flow_cache\n\n\nclass CausalMaskedDiffWithXvec(torch.nn.Module):\n    def __init__(self,\n                 input_size: int = 512,\n                 output_size: int = 80,\n                 spk_embed_dim: int = 192,\n                 output_type: str = \"mel\",\n                 vocab_size: int = 4096,\n                 input_frame_rate: int = 50,\n                 only_mask_loss: bool = True,\n                 token_mel_ratio: int = 2,\n                 pre_lookahead_len: int = 3,\n                 encoder: torch.nn.Module = None,\n                 decoder: torch.nn.Module = None,\n                 decoder_conf: Dict = {'in_channels': 240, 'out_channel': 80, 'spk_emb_dim': 80, 'n_spks': 1,\n                                       'cfm_params': DictConfig({'sigma_min': 1e-06, 'solver': 'euler', 't_scheduler': 'cosine',\n                                                                 'training_cfg_rate': 0.2, 'inference_cfg_rate': 0.7, 'reg_loss_type': 'l1'}),\n                                       'decoder_params': {'channels': [256, 256], 'dropout': 0.0, 'attention_head_dim': 64,\n                                                          'n_blocks': 4, 'num_mid_blocks': 12, 'num_heads': 8, 'act_fn': 'gelu'}},\n                 mel_feat_conf: Dict = {'n_fft': 1024, 'num_mels': 80, 'sampling_rate': 22050,\n                                        'hop_size': 256, 'win_size': 1024, 'fmin': 0, 'fmax': 8000}):\n        super().__init__()\n        self.input_size = input_size\n        self.output_size = output_size\n        self.decoder_conf = decoder_conf\n        self.mel_feat_conf = mel_feat_conf\n        self.vocab_size = vocab_size\n        self.output_type = output_type\n        self.input_frame_rate = input_frame_rate\n        logging.info(f\"input frame rate={self.input_frame_rate}\")\n        self.input_embedding = nn.Embedding(vocab_size, input_size)\n        self.spk_embed_affine_layer = torch.nn.Linear(spk_embed_dim, output_size)\n        self.encoder = encoder\n        self.encoder_proj = torch.nn.Linear(self.encoder.output_size(), output_size)\n        self.decoder = decoder\n        self.only_mask_loss = only_mask_loss\n        self.token_mel_ratio = token_mel_ratio\n        self.pre_lookahead_len = pre_lookahead_len\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        token = batch['speech_token'].to(device)\n        token_len = batch['speech_token_len'].to(device)\n        feat = batch['speech_feat'].to(device)\n        feat_len = batch['speech_feat_len'].to(device)\n        embedding = batch['embedding'].to(device)\n\n        # NOTE unified training, static_chunk_size > 0 or = 0\n        streaming = True if random.random() < 0.5 else False\n\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat text and prompt_text\n        mask = (~make_pad_mask(token_len)).float().unsqueeze(-1).to(device)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        h, h_lengths = self.encoder(token, token_len, streaming=streaming)\n        h = self.encoder_proj(h)\n\n        # get conditions\n        conds = torch.zeros(feat.shape, device=token.device)\n        for i, j in enumerate(feat_len):\n            if random.random() < 0.5:\n                continue\n            index = random.randint(0, int(0.3 * j))\n            conds[i, :index] = feat[i, :index]\n        conds = conds.transpose(1, 2)\n\n        mask = (~make_pad_mask(h_lengths.sum(dim=-1).squeeze(dim=1))).to(h)\n        loss, _ = self.decoder.compute_loss(\n            feat.transpose(1, 2).contiguous(),\n            mask.unsqueeze(1),\n            h.transpose(1, 2).contiguous(),\n            embedding,\n            cond=conds,\n            streaming=streaming,\n        )\n        return {'loss': loss}\n\n    @torch.inference_mode()\n    def inference(self,\n                  token,\n                  token_len,\n                  prompt_token,\n                  prompt_token_len,\n                  prompt_feat,\n                  prompt_feat_len,\n                  embedding,\n                  streaming,\n                  finalize):\n        assert token.shape[0] == 1\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat text and prompt_text\n        token, token_len = torch.concat([prompt_token, token], dim=1), prompt_token_len + token_len\n        mask = (~make_pad_mask(token_len)).unsqueeze(-1).to(embedding)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        if finalize is True:\n            h, h_lengths = self.encoder(token, token_len, streaming=streaming)\n        else:\n            token, context = token[:, :-self.pre_lookahead_len], token[:, -self.pre_lookahead_len:]\n            h, h_lengths = self.encoder(token, token_len, context=context, streaming=streaming)\n        mel_len1, mel_len2 = prompt_feat.shape[1], h.shape[1] - prompt_feat.shape[1]\n        h = self.encoder_proj(h)\n\n        # get conditions\n        conds = torch.zeros([1, mel_len1 + mel_len2, self.output_size], device=token.device).to(h.dtype)\n        conds[:, :mel_len1] = prompt_feat\n        conds = conds.transpose(1, 2)\n\n        mask = (~make_pad_mask(torch.tensor([mel_len1 + mel_len2]))).to(h)\n        feat, _ = self.decoder(\n            mu=h.transpose(1, 2).contiguous(),\n            mask=mask.unsqueeze(1),\n            spks=embedding,\n            cond=conds,\n            n_timesteps=10,\n            streaming=streaming\n        )\n        feat = feat[:, :, mel_len1:]\n        assert feat.shape[2] == mel_len2\n        return feat.float(), None\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/flow/flow_matching.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Bofan Zhou)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport torch\nimport torch.nn.functional as F\nfrom matcha.models.components.flow_matching import BASECFM\nfrom cosyvoice.utils.common import set_all_random_seed\n\n\nclass ConditionalCFM(BASECFM):\n    def __init__(self, in_channels, cfm_params, n_spks=1, spk_emb_dim=64, estimator: torch.nn.Module = None):\n        super().__init__(\n            n_feats=in_channels,\n            cfm_params=cfm_params,\n            n_spks=n_spks,\n            spk_emb_dim=spk_emb_dim,\n        )\n        self.t_scheduler = cfm_params.t_scheduler\n        self.training_cfg_rate = cfm_params.training_cfg_rate\n        self.inference_cfg_rate = cfm_params.inference_cfg_rate\n        in_channels = in_channels + (spk_emb_dim if n_spks > 0 else 0)\n        # Just change the architecture of the estimator here\n        self.estimator = estimator\n\n    @torch.inference_mode()\n    def forward(self, mu, mask, n_timesteps, temperature=1.0, spks=None, cond=None, prompt_len=0, cache=torch.zeros(1, 80, 0, 2)):\n        \"\"\"Forward diffusion\n\n        Args:\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): output_mask\n                shape: (batch_size, 1, mel_timesteps)\n            n_timesteps (int): number of diffusion steps\n            temperature (float, optional): temperature for scaling noise. Defaults to 1.0.\n            spks (torch.Tensor, optional): speaker ids. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n            cond: Not used but kept for future purposes\n\n        Returns:\n            sample: generated mel-spectrogram\n                shape: (batch_size, n_feats, mel_timesteps)\n        \"\"\"\n\n        z = torch.randn_like(mu).to(mu.device).to(mu.dtype) * temperature\n        cache_size = cache.shape[2]\n        # fix prompt and overlap part mu and z\n        if cache_size != 0:\n            z[:, :, :cache_size] = cache[:, :, :, 0]\n            mu[:, :, :cache_size] = cache[:, :, :, 1]\n        z_cache = torch.concat([z[:, :, :prompt_len], z[:, :, -34:]], dim=2)\n        mu_cache = torch.concat([mu[:, :, :prompt_len], mu[:, :, -34:]], dim=2)\n        cache = torch.stack([z_cache, mu_cache], dim=-1)\n\n        t_span = torch.linspace(0, 1, n_timesteps + 1, device=mu.device, dtype=mu.dtype)\n        if self.t_scheduler == 'cosine':\n            t_span = 1 - torch.cos(t_span * 0.5 * torch.pi)\n        return self.solve_euler(z, t_span=t_span, mu=mu, mask=mask, spks=spks, cond=cond), cache\n\n    def solve_euler(self, x, t_span, mu, mask, spks, cond, streaming=False):\n        \"\"\"\n        Fixed euler solver for ODEs.\n        Args:\n            x (torch.Tensor): random noise\n            t_span (torch.Tensor): n_timesteps interpolated\n                shape: (n_timesteps + 1,)\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): output_mask\n                shape: (batch_size, 1, mel_timesteps)\n            spks (torch.Tensor, optional): speaker ids. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n            cond: Not used but kept for future purposes\n        \"\"\"\n        t, _, dt = t_span[0], t_span[-1], t_span[1] - t_span[0]\n        t = t.unsqueeze(dim=0)\n\n        # I am storing this because I can later plot it by putting a debugger here and saving it to a file\n        # Or in future might add like a return_all_steps flag\n        sol = []\n\n        # Do not use concat, it may cause memory format changed and trt infer with wrong results!\n        x_in = torch.zeros([2, 80, x.size(2)], device=x.device, dtype=x.dtype)\n        mask_in = torch.zeros([2, 1, x.size(2)], device=x.device, dtype=x.dtype)\n        mu_in = torch.zeros([2, 80, x.size(2)], device=x.device, dtype=x.dtype)\n        t_in = torch.zeros([2], device=x.device, dtype=x.dtype)\n        spks_in = torch.zeros([2, 80], device=x.device, dtype=x.dtype)\n        cond_in = torch.zeros([2, 80, x.size(2)], device=x.device, dtype=x.dtype)\n        for step in range(1, len(t_span)):\n            # Classifier-Free Guidance inference introduced in VoiceBox\n            x_in[:] = x\n            mask_in[:] = mask\n            mu_in[0] = mu\n            t_in[:] = t.unsqueeze(0)\n            spks_in[0] = spks\n            cond_in[0] = cond\n            dphi_dt = self.forward_estimator(\n                x_in, mask_in,\n                mu_in, t_in,\n                spks_in,\n                cond_in,\n                streaming\n            )\n            dphi_dt, cfg_dphi_dt = torch.split(dphi_dt, [x.size(0), x.size(0)], dim=0)\n            dphi_dt = ((1.0 + self.inference_cfg_rate) * dphi_dt - self.inference_cfg_rate * cfg_dphi_dt)\n            x = x + dt * dphi_dt\n            t = t + dt\n            sol.append(x)\n            if step < len(t_span) - 1:\n                dt = t_span[step + 1] - t\n\n        return sol[-1].float()\n\n    def forward_estimator(self, x, mask, mu, t, spks, cond, streaming=False):\n        if isinstance(self.estimator, torch.nn.Module):\n            return self.estimator(x, mask, mu, t, spks, cond, streaming=streaming)\n        else:\n            [estimator, stream], trt_engine = self.estimator.acquire_estimator()\n            # NOTE need to synchronize when switching stream\n            torch.cuda.current_stream().synchronize()\n            with stream:\n                estimator.set_input_shape('x', (2, 80, x.size(2)))\n                estimator.set_input_shape('mask', (2, 1, x.size(2)))\n                estimator.set_input_shape('mu', (2, 80, x.size(2)))\n                estimator.set_input_shape('t', (2,))\n                estimator.set_input_shape('spks', (2, 80))\n                estimator.set_input_shape('cond', (2, 80, x.size(2)))\n                data_ptrs = [x.contiguous().data_ptr(),\n                             mask.contiguous().data_ptr(),\n                             mu.contiguous().data_ptr(),\n                             t.contiguous().data_ptr(),\n                             spks.contiguous().data_ptr(),\n                             cond.contiguous().data_ptr(),\n                             x.data_ptr()]\n                for i, j in enumerate(data_ptrs):\n                    estimator.set_tensor_address(trt_engine.get_tensor_name(i), j)\n                # run trt engine\n                assert estimator.execute_async_v3(torch.cuda.current_stream().cuda_stream) is True\n                torch.cuda.current_stream().synchronize()\n            self.estimator.release_estimator(estimator, stream)\n            return x\n\n    def compute_loss(self, x1, mask, mu, spks=None, cond=None, streaming=False):\n        \"\"\"Computes diffusion loss\n\n        Args:\n            x1 (torch.Tensor): Target\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): target mask\n                shape: (batch_size, 1, mel_timesteps)\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            spks (torch.Tensor, optional): speaker embedding. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n\n        Returns:\n            loss: conditional flow matching loss\n            y: conditional flow\n                shape: (batch_size, n_feats, mel_timesteps)\n        \"\"\"\n        b, _, t = mu.shape\n\n        # random timestep\n        t = torch.rand([b, 1, 1], device=mu.device, dtype=mu.dtype)\n        if self.t_scheduler == 'cosine':\n            t = 1 - torch.cos(t * 0.5 * torch.pi)\n        # sample noise p(x_0)\n        z = torch.randn_like(x1)\n\n        y = (1 - (1 - self.sigma_min) * t) * z + t * x1\n        u = x1 - (1 - self.sigma_min) * z\n\n        # during training, we randomly drop condition to trade off mode coverage and sample fidelity\n        if self.training_cfg_rate > 0:\n            cfg_mask = torch.rand(b, device=x1.device) > self.training_cfg_rate\n            mu = mu * cfg_mask.view(-1, 1, 1)\n            spks = spks * cfg_mask.view(-1, 1)\n            cond = cond * cfg_mask.view(-1, 1, 1)\n\n        pred = self.estimator(y, mask, mu, t.squeeze(), spks, cond, streaming=streaming)\n        loss = F.mse_loss(pred * mask, u * mask, reduction=\"sum\") / (torch.sum(mask) * u.shape[1])\n        return loss, y\n\n\nclass CausalConditionalCFM(ConditionalCFM):\n    def __init__(self, in_channels, cfm_params, n_spks=1, spk_emb_dim=64, estimator: torch.nn.Module = None):\n        super().__init__(in_channels, cfm_params, n_spks, spk_emb_dim, estimator)\n        set_all_random_seed(0)\n        self.rand_noise = torch.randn([1, 80, 50 * 300])\n\n    @torch.inference_mode()\n    def forward(self, mu, mask, n_timesteps, temperature=1.0, spks=None, cond=None, streaming=False):\n        \"\"\"Forward diffusion\n\n        Args:\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): output_mask\n                shape: (batch_size, 1, mel_timesteps)\n            n_timesteps (int): number of diffusion steps\n            temperature (float, optional): temperature for scaling noise. Defaults to 1.0.\n            spks (torch.Tensor, optional): speaker ids. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n            cond: Not used but kept for future purposes\n\n        Returns:\n            sample: generated mel-spectrogram\n                shape: (batch_size, n_feats, mel_timesteps)\n        \"\"\"\n\n        z = self.rand_noise[:, :, :mu.size(2)].to(mu.device).to(mu.dtype) * temperature\n        # fix prompt and overlap part mu and z\n        t_span = torch.linspace(0, 1, n_timesteps + 1, device=mu.device, dtype=mu.dtype)\n        if self.t_scheduler == 'cosine':\n            t_span = 1 - torch.cos(t_span * 0.5 * torch.pi)\n        return self.solve_euler(z, t_span=t_span, mu=mu, mask=mask, spks=spks, cond=cond, streaming=streaming), None\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/flow/length_regulator.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import Tuple\nimport torch.nn as nn\nimport torch\nfrom torch.nn import functional as F\nfrom cosyvoice.utils.mask import make_pad_mask\n\n\nclass InterpolateRegulator(nn.Module):\n    def __init__(\n            self,\n            channels: int,\n            sampling_ratios: Tuple,\n            out_channels: int = None,\n            groups: int = 1,\n    ):\n        super().__init__()\n        self.sampling_ratios = sampling_ratios\n        out_channels = out_channels or channels\n        model = nn.ModuleList([])\n        if len(sampling_ratios) > 0:\n            for _ in sampling_ratios:\n                module = nn.Conv1d(channels, channels, 3, 1, 1)\n                norm = nn.GroupNorm(groups, channels)\n                act = nn.Mish()\n                model.extend([module, norm, act])\n        model.append(\n            nn.Conv1d(channels, out_channels, 1, 1)\n        )\n        self.model = nn.Sequential(*model)\n\n    def forward(self, x, ylens=None):\n        # x in (B, T, D)\n        mask = (~make_pad_mask(ylens)).to(x).unsqueeze(-1)\n        x = F.interpolate(x.transpose(1, 2).contiguous(), size=ylens.max(), mode='linear')\n        out = self.model(x).transpose(1, 2).contiguous()\n        olens = ylens\n        return out * mask, olens\n\n    def inference(self, x1, x2, mel_len1, mel_len2, input_frame_rate=50):\n        # in inference mode, interploate prompt token and token(head/mid/tail) seprately, so we can get a clear separation point of mel\n        # NOTE 20 corresponds to token_overlap_len in cosyvoice/cli/model.py\n        # x in (B, T, D)\n        if x2.shape[1] > 40:\n            x2_head = F.interpolate(x2[:, :20].transpose(1, 2).contiguous(), size=int(20 / input_frame_rate * 22050 / 256), mode='linear')\n            x2_mid = F.interpolate(x2[:, 20:-20].transpose(1, 2).contiguous(), size=mel_len2 - int(20 / input_frame_rate * 22050 / 256) * 2,\n                                   mode='linear')\n            x2_tail = F.interpolate(x2[:, -20:].transpose(1, 2).contiguous(), size=int(20 / input_frame_rate * 22050 / 256), mode='linear')\n            x2 = torch.concat([x2_head, x2_mid, x2_tail], dim=2)\n        else:\n            x2 = F.interpolate(x2.transpose(1, 2).contiguous(), size=mel_len2, mode='linear')\n        if x1.shape[1] != 0:\n            x1 = F.interpolate(x1.transpose(1, 2).contiguous(), size=mel_len1, mode='linear')\n            x = torch.concat([x1, x2], dim=2)\n        else:\n            x = x2\n        out = self.model(x).transpose(1, 2).contiguous()\n        return out, mel_len1 + mel_len2\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/hifigan/discriminator.py",
    "content": "import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\ntry:\n    from torch.nn.utils.parametrizations import weight_norm, spectral_norm\nexcept ImportError:\n    from torch.nn.utils import weight_norm, spectral_norm\nfrom typing import List, Optional, Tuple\nfrom einops import rearrange\nfrom torchaudio.transforms import Spectrogram\n\nLRELU_SLOPE = 0.1\n\n\nclass MultipleDiscriminator(nn.Module):\n    def __init__(\n            self, mpd: nn.Module, mrd: nn.Module\n    ):\n        super().__init__()\n        self.mpd = mpd\n        self.mrd = mrd\n\n    def forward(self, y: torch.Tensor, y_hat: torch.Tensor):\n        y_d_rs, y_d_gs, fmap_rs, fmap_gs = [], [], [], []\n        this_y_d_rs, this_y_d_gs, this_fmap_rs, this_fmap_gs = self.mpd(y.unsqueeze(dim=1), y_hat.unsqueeze(dim=1))\n        y_d_rs += this_y_d_rs\n        y_d_gs += this_y_d_gs\n        fmap_rs += this_fmap_rs\n        fmap_gs += this_fmap_gs\n        this_y_d_rs, this_y_d_gs, this_fmap_rs, this_fmap_gs = self.mrd(y, y_hat)\n        y_d_rs += this_y_d_rs\n        y_d_gs += this_y_d_gs\n        fmap_rs += this_fmap_rs\n        fmap_gs += this_fmap_gs\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\nclass MultiResolutionDiscriminator(nn.Module):\n    def __init__(\n        self,\n        fft_sizes: Tuple[int, ...] = (2048, 1024, 512),\n        num_embeddings: Optional[int] = None,\n    ):\n        \"\"\"\n        Multi-Resolution Discriminator module adapted from https://github.com/descriptinc/descript-audio-codec.\n        Additionally, it allows incorporating conditional information with a learned embeddings table.\n\n        Args:\n            fft_sizes (tuple[int]): Tuple of window lengths for FFT. Defaults to (2048, 1024, 512).\n            num_embeddings (int, optional): Number of embeddings. None means non-conditional discriminator.\n                Defaults to None.\n        \"\"\"\n\n        super().__init__()\n        self.discriminators = nn.ModuleList(\n            [DiscriminatorR(window_length=w, num_embeddings=num_embeddings) for w in fft_sizes]\n        )\n\n    def forward(\n        self, y: torch.Tensor, y_hat: torch.Tensor, bandwidth_id: torch.Tensor = None\n    ) -> Tuple[List[torch.Tensor], List[torch.Tensor], List[List[torch.Tensor]], List[List[torch.Tensor]]]:\n        y_d_rs = []\n        y_d_gs = []\n        fmap_rs = []\n        fmap_gs = []\n\n        for d in self.discriminators:\n            y_d_r, fmap_r = d(x=y, cond_embedding_id=bandwidth_id)\n            y_d_g, fmap_g = d(x=y_hat, cond_embedding_id=bandwidth_id)\n            y_d_rs.append(y_d_r)\n            fmap_rs.append(fmap_r)\n            y_d_gs.append(y_d_g)\n            fmap_gs.append(fmap_g)\n\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\nclass DiscriminatorR(nn.Module):\n    def __init__(\n        self,\n        window_length: int,\n        num_embeddings: Optional[int] = None,\n        channels: int = 32,\n        hop_factor: float = 0.25,\n        bands: Tuple[Tuple[float, float], ...] = ((0.0, 0.1), (0.1, 0.25), (0.25, 0.5), (0.5, 0.75), (0.75, 1.0)),\n    ):\n        super().__init__()\n        self.window_length = window_length\n        self.hop_factor = hop_factor\n        self.spec_fn = Spectrogram(\n            n_fft=window_length, hop_length=int(window_length * hop_factor), win_length=window_length, power=None\n        )\n        n_fft = window_length // 2 + 1\n        bands = [(int(b[0] * n_fft), int(b[1] * n_fft)) for b in bands]\n        self.bands = bands\n        convs = lambda: nn.ModuleList(\n            [\n                weight_norm(nn.Conv2d(2, channels, (3, 9), (1, 1), padding=(1, 4))),\n                weight_norm(nn.Conv2d(channels, channels, (3, 9), (1, 2), padding=(1, 4))),\n                weight_norm(nn.Conv2d(channels, channels, (3, 9), (1, 2), padding=(1, 4))),\n                weight_norm(nn.Conv2d(channels, channels, (3, 9), (1, 2), padding=(1, 4))),\n                weight_norm(nn.Conv2d(channels, channels, (3, 3), (1, 1), padding=(1, 1))),\n            ]\n        )\n        self.band_convs = nn.ModuleList([convs() for _ in range(len(self.bands))])\n\n        if num_embeddings is not None:\n            self.emb = torch.nn.Embedding(num_embeddings=num_embeddings, embedding_dim=channels)\n            torch.nn.init.zeros_(self.emb.weight)\n\n        self.conv_post = weight_norm(nn.Conv2d(channels, 1, (3, 3), (1, 1), padding=(1, 1)))\n\n    def spectrogram(self, x):\n        # Remove DC offset\n        x = x - x.mean(dim=-1, keepdims=True)\n        # Peak normalize the volume of input audio\n        x = 0.8 * x / (x.abs().max(dim=-1, keepdim=True)[0] + 1e-9)\n        x = self.spec_fn(x)\n        x = torch.view_as_real(x)\n        x = rearrange(x, \"b f t c -> b c t f\")\n        # Split into bands\n        x_bands = [x[..., b[0]: b[1]] for b in self.bands]\n        return x_bands\n\n    def forward(self, x: torch.Tensor, cond_embedding_id: torch.Tensor = None):\n        x_bands = self.spectrogram(x)\n        fmap = []\n        x = []\n        for band, stack in zip(x_bands, self.band_convs):\n            for i, layer in enumerate(stack):\n                band = layer(band)\n                band = torch.nn.functional.leaky_relu(band, 0.1)\n                if i > 0:\n                    fmap.append(band)\n            x.append(band)\n        x = torch.cat(x, dim=-1)\n        if cond_embedding_id is not None:\n            emb = self.emb(cond_embedding_id)\n            h = (emb.view(1, -1, 1, 1) * x).sum(dim=1, keepdims=True)\n        else:\n            h = 0\n        x = self.conv_post(x)\n        fmap.append(x)\n        x += h\n\n        return x, fmap\n\n\nclass MultiResSpecDiscriminator(torch.nn.Module):\n\n    def __init__(self,\n                 fft_sizes=[1024, 2048, 512],\n                 hop_sizes=[120, 240, 50],\n                 win_lengths=[600, 1200, 240],\n                 window=\"hann_window\"):\n\n        super(MultiResSpecDiscriminator, self).__init__()\n        self.discriminators = nn.ModuleList([\n            SpecDiscriminator(fft_sizes[0], hop_sizes[0], win_lengths[0], window),\n            SpecDiscriminator(fft_sizes[1], hop_sizes[1], win_lengths[1], window),\n            SpecDiscriminator(fft_sizes[2], hop_sizes[2], win_lengths[2], window)])\n\n    def forward(self, y, y_hat):\n        y_d_rs = []\n        y_d_gs = []\n        fmap_rs = []\n        fmap_gs = []\n        for _, d in enumerate(self.discriminators):\n            y_d_r, fmap_r = d(y)\n            y_d_g, fmap_g = d(y_hat)\n            y_d_rs.append(y_d_r)\n            fmap_rs.append(fmap_r)\n            y_d_gs.append(y_d_g)\n            fmap_gs.append(fmap_g)\n\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\ndef stft(x, fft_size, hop_size, win_length, window):\n    \"\"\"Perform STFT and convert to magnitude spectrogram.\n    Args:\n        x (Tensor): Input signal tensor (B, T).\n        fft_size (int): FFT size.\n        hop_size (int): Hop size.\n        win_length (int): Window length.\n        window (str): Window function type.\n    Returns:\n        Tensor: Magnitude spectrogram (B, #frames, fft_size // 2 + 1).\n    \"\"\"\n    x_stft = torch.stft(x, fft_size, hop_size, win_length, window, return_complex=True)\n\n    # NOTE(kan-bayashi): clamp is needed to avoid nan or inf\n    return torch.abs(x_stft).transpose(2, 1)\n\n\nclass SpecDiscriminator(nn.Module):\n    \"\"\"docstring for Discriminator.\"\"\"\n\n    def __init__(self, fft_size=1024, shift_size=120, win_length=600, window=\"hann_window\", use_spectral_norm=False):\n        super(SpecDiscriminator, self).__init__()\n        norm_f = weight_norm if use_spectral_norm is False else spectral_norm\n        self.fft_size = fft_size\n        self.shift_size = shift_size\n        self.win_length = win_length\n        self.window = getattr(torch, window)(win_length)\n        self.discriminators = nn.ModuleList([\n            norm_f(nn.Conv2d(1, 32, kernel_size=(3, 9), padding=(1, 4))),\n            norm_f(nn.Conv2d(32, 32, kernel_size=(3, 9), stride=(1, 2), padding=(1, 4))),\n            norm_f(nn.Conv2d(32, 32, kernel_size=(3, 9), stride=(1, 2), padding=(1, 4))),\n            norm_f(nn.Conv2d(32, 32, kernel_size=(3, 9), stride=(1, 2), padding=(1, 4))),\n            norm_f(nn.Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))),\n        ])\n\n        self.out = norm_f(nn.Conv2d(32, 1, 3, 1, 1))\n\n    def forward(self, y):\n\n        fmap = []\n        y = y.squeeze(1)\n        y = stft(y, self.fft_size, self.shift_size, self.win_length, self.window.to(y.device))\n        y = y.unsqueeze(1)\n        for _, d in enumerate(self.discriminators):\n            y = d(y)\n            y = F.leaky_relu(y, LRELU_SLOPE)\n            fmap.append(y)\n\n        y = self.out(y)\n        fmap.append(y)\n\n        return torch.flatten(y, 1, -1), fmap\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/hifigan/f0_predictor.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Kai Hu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport torch\nimport torch.nn as nn\ntry:\n    from torch.nn.utils.parametrizations import weight_norm\nexcept ImportError:\n    from torch.nn.utils import weight_norm\n\n\nclass ConvRNNF0Predictor(nn.Module):\n    def __init__(self,\n                 num_class: int = 1,\n                 in_channels: int = 80,\n                 cond_channels: int = 512\n                 ):\n        super().__init__()\n\n        self.num_class = num_class\n        self.condnet = nn.Sequential(\n            weight_norm(\n                nn.Conv1d(in_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n        )\n        self.classifier = nn.Linear(in_features=cond_channels, out_features=self.num_class)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.condnet(x)\n        x = x.transpose(1, 2)\n        return torch.abs(self.classifier(x).squeeze(-1))\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/hifigan/generator.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Kai Hu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"HIFI-GAN\"\"\"\n\nfrom typing import Dict, Optional, List\nimport numpy as np\nfrom scipy.signal import get_window\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.nn import Conv1d\nfrom torch.nn import ConvTranspose1d\nfrom torch.nn.utils import remove_weight_norm\ntry:\n    from torch.nn.utils.parametrizations import weight_norm\nexcept ImportError:\n    from torch.nn.utils import weight_norm\nfrom torch.distributions.uniform import Uniform\n\nfrom cosyvoice.transformer.activation import Snake\nfrom cosyvoice.utils.common import get_padding\nfrom cosyvoice.utils.common import init_weights\n\n\n\"\"\"hifigan based generator implementation.\n\nThis code is modified from https://github.com/jik876/hifi-gan\n ,https://github.com/kan-bayashi/ParallelWaveGAN and\n https://github.com/NVIDIA/BigVGAN\n\n\"\"\"\n\n\nclass ResBlock(torch.nn.Module):\n    \"\"\"Residual block module in HiFiGAN/BigVGAN.\"\"\"\n    def __init__(\n        self,\n        channels: int = 512,\n        kernel_size: int = 3,\n        dilations: List[int] = [1, 3, 5],\n    ):\n        super(ResBlock, self).__init__()\n        self.convs1 = nn.ModuleList()\n        self.convs2 = nn.ModuleList()\n\n        for dilation in dilations:\n            self.convs1.append(\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation,\n                        padding=get_padding(kernel_size, dilation)\n                    )\n                )\n            )\n            self.convs2.append(\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1)\n                    )\n                )\n            )\n        self.convs1.apply(init_weights)\n        self.convs2.apply(init_weights)\n        self.activations1 = nn.ModuleList([\n            Snake(channels, alpha_logscale=False)\n            for _ in range(len(self.convs1))\n        ])\n        self.activations2 = nn.ModuleList([\n            Snake(channels, alpha_logscale=False)\n            for _ in range(len(self.convs2))\n        ])\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        for idx in range(len(self.convs1)):\n            xt = self.activations1[idx](x)\n            xt = self.convs1[idx](xt)\n            xt = self.activations2[idx](xt)\n            xt = self.convs2[idx](xt)\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for idx in range(len(self.convs1)):\n            remove_weight_norm(self.convs1[idx])\n            remove_weight_norm(self.convs2[idx])\n\n\nclass SineGen(torch.nn.Module):\n    \"\"\" Definition of sine generator\n    SineGen(samp_rate, harmonic_num = 0,\n            sine_amp = 0.1, noise_std = 0.003,\n            voiced_threshold = 0,\n            flag_for_pulse=False)\n    samp_rate: sampling rate in Hz\n    harmonic_num: number of harmonic overtones (default 0)\n    sine_amp: amplitude of sine-wavefrom (default 0.1)\n    noise_std: std of Gaussian noise (default 0.003)\n    voiced_thoreshold: F0 threshold for U/V classification (default 0)\n    flag_for_pulse: this SinGen is used inside PulseGen (default False)\n    Note: when flag_for_pulse is True, the first time step of a voiced\n        segment is always sin(np.pi) or cos(0)\n    \"\"\"\n\n    def __init__(self, samp_rate, harmonic_num=0,\n                 sine_amp=0.1, noise_std=0.003,\n                 voiced_threshold=0):\n        super(SineGen, self).__init__()\n        self.sine_amp = sine_amp\n        self.noise_std = noise_std\n        self.harmonic_num = harmonic_num\n        self.sampling_rate = samp_rate\n        self.voiced_threshold = voiced_threshold\n\n    def _f02uv(self, f0):\n        # generate uv signal\n        uv = (f0 > self.voiced_threshold).type(torch.float32)\n        return uv\n\n    @torch.no_grad()\n    def forward(self, f0):\n        \"\"\"\n        :param f0: [B, 1, sample_len], Hz\n        :return: [B, 1, sample_len]\n        \"\"\"\n\n        F_mat = torch.zeros((f0.size(0), self.harmonic_num + 1, f0.size(-1))).to(f0.device)\n        for i in range(self.harmonic_num + 1):\n            F_mat[:, i: i + 1, :] = f0 * (i + 1) / self.sampling_rate\n\n        theta_mat = 2 * np.pi * (torch.cumsum(F_mat, dim=-1) % 1)\n        u_dist = Uniform(low=-np.pi, high=np.pi)\n        phase_vec = u_dist.sample(sample_shape=(f0.size(0), self.harmonic_num + 1, 1)).to(F_mat.device)\n        phase_vec[:, 0, :] = 0\n\n        # generate sine waveforms\n        sine_waves = self.sine_amp * torch.sin(theta_mat + phase_vec)\n\n        # generate uv signal\n        uv = self._f02uv(f0)\n\n        # noise: for unvoiced should be similar to sine_amp\n        #        std = self.sine_amp/3 -> max value ~ self.sine_amp\n        # .       for voiced regions is self.noise_std\n        noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3\n        noise = noise_amp * torch.randn_like(sine_waves)\n\n        # first: set the unvoiced part to 0 by uv\n        # then: additive noise\n        sine_waves = sine_waves * uv + noise\n        return sine_waves, uv, noise\n\n\nclass SourceModuleHnNSF(torch.nn.Module):\n    \"\"\" SourceModule for hn-nsf\n    SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1,\n                 add_noise_std=0.003, voiced_threshod=0)\n    sampling_rate: sampling_rate in Hz\n    harmonic_num: number of harmonic above F0 (default: 0)\n    sine_amp: amplitude of sine source signal (default: 0.1)\n    add_noise_std: std of additive Gaussian noise (default: 0.003)\n        note that amplitude of noise in unvoiced is decided\n        by sine_amp\n    voiced_threshold: threhold to set U/V given F0 (default: 0)\n    Sine_source, noise_source = SourceModuleHnNSF(F0_sampled)\n    F0_sampled (batchsize, length, 1)\n    Sine_source (batchsize, length, 1)\n    noise_source (batchsize, length 1)\n    uv (batchsize, length, 1)\n    \"\"\"\n\n    def __init__(self, sampling_rate, upsample_scale, harmonic_num=0, sine_amp=0.1,\n                 add_noise_std=0.003, voiced_threshod=0):\n        super(SourceModuleHnNSF, self).__init__()\n\n        self.sine_amp = sine_amp\n        self.noise_std = add_noise_std\n\n        # to produce sine waveforms\n        self.l_sin_gen = SineGen(sampling_rate, harmonic_num,\n                                 sine_amp, add_noise_std, voiced_threshod)\n\n        # to merge source harmonics into a single excitation\n        self.l_linear = torch.nn.Linear(harmonic_num + 1, 1)\n        self.l_tanh = torch.nn.Tanh()\n\n    def forward(self, x):\n        \"\"\"\n        Sine_source, noise_source = SourceModuleHnNSF(F0_sampled)\n        F0_sampled (batchsize, length, 1)\n        Sine_source (batchsize, length, 1)\n        noise_source (batchsize, length 1)\n        \"\"\"\n        # source for harmonic branch\n        with torch.no_grad():\n            sine_wavs, uv, _ = self.l_sin_gen(x.transpose(1, 2))\n            sine_wavs = sine_wavs.transpose(1, 2)\n            uv = uv.transpose(1, 2)\n        sine_merge = self.l_tanh(self.l_linear(sine_wavs))\n\n        # source for noise branch, in the same shape as uv\n        noise = torch.randn_like(uv) * self.sine_amp / 3\n        return sine_merge, noise, uv\n\n\nclass SineGen2(torch.nn.Module):\n    \"\"\" Definition of sine generator\n    SineGen(samp_rate, harmonic_num = 0,\n            sine_amp = 0.1, noise_std = 0.003,\n            voiced_threshold = 0,\n            flag_for_pulse=False)\n    samp_rate: sampling rate in Hz\n    harmonic_num: number of harmonic overtones (default 0)\n    sine_amp: amplitude of sine-wavefrom (default 0.1)\n    noise_std: std of Gaussian noise (default 0.003)\n    voiced_thoreshold: F0 threshold for U/V classification (default 0)\n    flag_for_pulse: this SinGen is used inside PulseGen (default False)\n    Note: when flag_for_pulse is True, the first time step of a voiced\n        segment is always sin(np.pi) or cos(0)\n    \"\"\"\n\n    def __init__(self, samp_rate, upsample_scale, harmonic_num=0,\n                 sine_amp=0.1, noise_std=0.003,\n                 voiced_threshold=0,\n                 flag_for_pulse=False):\n        super(SineGen2, self).__init__()\n        self.sine_amp = sine_amp\n        self.noise_std = noise_std\n        self.harmonic_num = harmonic_num\n        self.dim = self.harmonic_num + 1\n        self.sampling_rate = samp_rate\n        self.voiced_threshold = voiced_threshold\n        self.flag_for_pulse = flag_for_pulse\n        self.upsample_scale = upsample_scale\n\n    def _f02uv(self, f0):\n        # generate uv signal\n        uv = (f0 > self.voiced_threshold).type(torch.float32)\n        return uv\n\n    def _f02sine(self, f0_values):\n        \"\"\" f0_values: (batchsize, length, dim)\n            where dim indicates fundamental tone and overtones\n        \"\"\"\n        # convert to F0 in rad. The interger part n can be ignored\n        # because 2 * np.pi * n doesn't affect phase\n        rad_values = (f0_values / self.sampling_rate) % 1\n\n        # initial phase noise (no noise for fundamental component)\n        rand_ini = torch.rand(f0_values.shape[0], f0_values.shape[2], device=f0_values.device)\n        rand_ini[:, 0] = 0\n        rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini\n\n        # instantanouse phase sine[t] = sin(2*pi \\sum_i=1 ^{t} rad)\n        if not self.flag_for_pulse:\n            rad_values = torch.nn.functional.interpolate(rad_values.transpose(1, 2),\n                                                         scale_factor=1 / self.upsample_scale,\n                                                         mode=\"linear\").transpose(1, 2)\n\n            phase = torch.cumsum(rad_values, dim=1) * 2 * np.pi\n            phase = torch.nn.functional.interpolate(phase.transpose(1, 2) * self.upsample_scale,\n                                                    scale_factor=self.upsample_scale, mode=\"linear\").transpose(1, 2)\n            sines = torch.sin(phase)\n        else:\n            # If necessary, make sure that the first time step of every\n            # voiced segments is sin(pi) or cos(0)\n            # This is used for pulse-train generation\n\n            # identify the last time step in unvoiced segments\n            uv = self._f02uv(f0_values)\n            uv_1 = torch.roll(uv, shifts=-1, dims=1)\n            uv_1[:, -1, :] = 1\n            u_loc = (uv < 1) * (uv_1 > 0)\n\n            # get the instantanouse phase\n            tmp_cumsum = torch.cumsum(rad_values, dim=1)\n            # different batch needs to be processed differently\n            for idx in range(f0_values.shape[0]):\n                temp_sum = tmp_cumsum[idx, u_loc[idx, :, 0], :]\n                temp_sum[1:, :] = temp_sum[1:, :] - temp_sum[0:-1, :]\n                # stores the accumulation of i.phase within\n                # each voiced segments\n                tmp_cumsum[idx, :, :] = 0\n                tmp_cumsum[idx, u_loc[idx, :, 0], :] = temp_sum\n\n            # rad_values - tmp_cumsum: remove the accumulation of i.phase\n            # within the previous voiced segment.\n            i_phase = torch.cumsum(rad_values - tmp_cumsum, dim=1)\n\n            # get the sines\n            sines = torch.cos(i_phase * 2 * np.pi)\n        return sines\n\n    def forward(self, f0):\n        \"\"\" sine_tensor, uv = forward(f0)\n        input F0: tensor(batchsize=1, length, dim=1)\n                  f0 for unvoiced steps should be 0\n        output sine_tensor: tensor(batchsize=1, length, dim)\n        output uv: tensor(batchsize=1, length, 1)\n        \"\"\"\n        # fundamental component\n        fn = torch.multiply(f0, torch.FloatTensor([[range(1, self.harmonic_num + 2)]]).to(f0.device))\n\n        # generate sine waveforms\n        sine_waves = self._f02sine(fn) * self.sine_amp\n\n        # generate uv signal\n        uv = self._f02uv(f0)\n\n        # noise: for unvoiced should be similar to sine_amp\n        #        std = self.sine_amp/3 -> max value ~ self.sine_amp\n        # .       for voiced regions is self.noise_std\n        noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3\n        noise = noise_amp * torch.randn_like(sine_waves)\n\n        # first: set the unvoiced part to 0 by uv\n        # then: additive noise\n        sine_waves = sine_waves * uv + noise\n        return sine_waves, uv, noise\n\n\nclass SourceModuleHnNSF2(torch.nn.Module):\n    \"\"\" SourceModule for hn-nsf\n    SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1,\n                 add_noise_std=0.003, voiced_threshod=0)\n    sampling_rate: sampling_rate in Hz\n    harmonic_num: number of harmonic above F0 (default: 0)\n    sine_amp: amplitude of sine source signal (default: 0.1)\n    add_noise_std: std of additive Gaussian noise (default: 0.003)\n        note that amplitude of noise in unvoiced is decided\n        by sine_amp\n    voiced_threshold: threhold to set U/V given F0 (default: 0)\n    Sine_source, noise_source = SourceModuleHnNSF(F0_sampled)\n    F0_sampled (batchsize, length, 1)\n    Sine_source (batchsize, length, 1)\n    noise_source (batchsize, length 1)\n    uv (batchsize, length, 1)\n    \"\"\"\n\n    def __init__(self, sampling_rate, upsample_scale, harmonic_num=0, sine_amp=0.1,\n                 add_noise_std=0.003, voiced_threshod=0):\n        super(SourceModuleHnNSF2, self).__init__()\n\n        self.sine_amp = sine_amp\n        self.noise_std = add_noise_std\n\n        # to produce sine waveforms\n        self.l_sin_gen = SineGen2(sampling_rate, upsample_scale, harmonic_num,\n                                  sine_amp, add_noise_std, voiced_threshod)\n\n        # to merge source harmonics into a single excitation\n        self.l_linear = torch.nn.Linear(harmonic_num + 1, 1)\n        self.l_tanh = torch.nn.Tanh()\n\n    def forward(self, x):\n        \"\"\"\n        Sine_source, noise_source = SourceModuleHnNSF(F0_sampled)\n        F0_sampled (batchsize, length, 1)\n        Sine_source (batchsize, length, 1)\n        noise_source (batchsize, length 1)\n        \"\"\"\n        # source for harmonic branch\n        with torch.no_grad():\n            sine_wavs, uv, _ = self.l_sin_gen(x)\n        sine_merge = self.l_tanh(self.l_linear(sine_wavs))\n\n        # source for noise branch, in the same shape as uv\n        noise = torch.randn_like(uv) * self.sine_amp / 3\n        return sine_merge, noise, uv\n\n\nclass HiFTGenerator(nn.Module):\n    \"\"\"\n    HiFTNet Generator: Neural Source Filter + ISTFTNet\n    https://arxiv.org/abs/2309.09493\n    \"\"\"\n    def __init__(\n            self,\n            in_channels: int = 80,\n            base_channels: int = 512,\n            nb_harmonics: int = 8,\n            sampling_rate: int = 22050,\n            nsf_alpha: float = 0.1,\n            nsf_sigma: float = 0.003,\n            nsf_voiced_threshold: float = 10,\n            upsample_rates: List[int] = [8, 8],\n            upsample_kernel_sizes: List[int] = [16, 16],\n            istft_params: Dict[str, int] = {\"n_fft\": 16, \"hop_len\": 4},\n            resblock_kernel_sizes: List[int] = [3, 7, 11],\n            resblock_dilation_sizes: List[List[int]] = [[1, 3, 5], [1, 3, 5], [1, 3, 5]],\n            source_resblock_kernel_sizes: List[int] = [7, 11],\n            source_resblock_dilation_sizes: List[List[int]] = [[1, 3, 5], [1, 3, 5]],\n            lrelu_slope: float = 0.1,\n            audio_limit: float = 0.99,\n            f0_predictor: torch.nn.Module = None,\n    ):\n        super(HiFTGenerator, self).__init__()\n\n        self.out_channels = 1\n        self.nb_harmonics = nb_harmonics\n        self.sampling_rate = sampling_rate\n        self.istft_params = istft_params\n        self.lrelu_slope = lrelu_slope\n        self.audio_limit = audio_limit\n\n        self.num_kernels = len(resblock_kernel_sizes)\n        self.num_upsamples = len(upsample_rates)\n        # NOTE in CosyVoice2, we use the original SourceModuleHnNSF implementation\n        this_SourceModuleHnNSF = SourceModuleHnNSF if self.sampling_rate == 22050 else SourceModuleHnNSF2\n        self.m_source = this_SourceModuleHnNSF(\n            sampling_rate=sampling_rate,\n            upsample_scale=np.prod(upsample_rates) * istft_params[\"hop_len\"],\n            harmonic_num=nb_harmonics,\n            sine_amp=nsf_alpha,\n            add_noise_std=nsf_sigma,\n            voiced_threshod=nsf_voiced_threshold)\n        self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(upsample_rates) * istft_params[\"hop_len\"])\n\n        self.conv_pre = weight_norm(\n            Conv1d(in_channels, base_channels, 7, 1, padding=3)\n        )\n\n        # Up\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):\n            self.ups.append(\n                weight_norm(\n                    ConvTranspose1d(\n                        base_channels // (2**i),\n                        base_channels // (2**(i + 1)),\n                        k,\n                        u,\n                        padding=(k - u) // 2,\n                    )\n                )\n            )\n\n        # Down\n        self.source_downs = nn.ModuleList()\n        self.source_resblocks = nn.ModuleList()\n        downsample_rates = [1] + upsample_rates[::-1][:-1]\n        downsample_cum_rates = np.cumprod(downsample_rates)\n        for i, (u, k, d) in enumerate(zip(downsample_cum_rates[::-1], source_resblock_kernel_sizes, source_resblock_dilation_sizes)):\n            if u == 1:\n                self.source_downs.append(\n                    Conv1d(istft_params[\"n_fft\"] + 2, base_channels // (2 ** (i + 1)), 1, 1)\n                )\n            else:\n                self.source_downs.append(\n                    Conv1d(istft_params[\"n_fft\"] + 2, base_channels // (2 ** (i + 1)), u * 2, u, padding=(u // 2))\n                )\n\n            self.source_resblocks.append(\n                ResBlock(base_channels // (2 ** (i + 1)), k, d)\n            )\n\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = base_channels // (2**(i + 1))\n            for _, (k, d) in enumerate(zip(resblock_kernel_sizes, resblock_dilation_sizes)):\n                self.resblocks.append(ResBlock(ch, k, d))\n\n        self.conv_post = weight_norm(Conv1d(ch, istft_params[\"n_fft\"] + 2, 7, 1, padding=3))\n        self.ups.apply(init_weights)\n        self.conv_post.apply(init_weights)\n        self.reflection_pad = nn.ReflectionPad1d((1, 0))\n        self.stft_window = torch.from_numpy(get_window(\"hann\", istft_params[\"n_fft\"], fftbins=True).astype(np.float32))\n        self.f0_predictor = f0_predictor\n\n    def remove_weight_norm(self):\n        print('Removing weight norm...')\n        for l in self.ups:\n            remove_weight_norm(l)\n        for l in self.resblocks:\n            l.remove_weight_norm()\n        remove_weight_norm(self.conv_pre)\n        remove_weight_norm(self.conv_post)\n        self.m_source.remove_weight_norm()\n        for l in self.source_downs:\n            remove_weight_norm(l)\n        for l in self.source_resblocks:\n            l.remove_weight_norm()\n\n    def _stft(self, x):\n        spec = torch.stft(\n            x,\n            self.istft_params[\"n_fft\"], self.istft_params[\"hop_len\"], self.istft_params[\"n_fft\"], window=self.stft_window.to(x.device),\n            return_complex=True)\n        spec = torch.view_as_real(spec)  # [B, F, TT, 2]\n        return spec[..., 0], spec[..., 1]\n\n    def _istft(self, magnitude, phase):\n        magnitude = torch.clip(magnitude, max=1e2)\n        real = magnitude * torch.cos(phase)\n        img = magnitude * torch.sin(phase)\n        inverse_transform = torch.istft(torch.complex(real, img), self.istft_params[\"n_fft\"], self.istft_params[\"hop_len\"],\n                                        self.istft_params[\"n_fft\"], window=self.stft_window.to(magnitude.device))\n        return inverse_transform\n\n    def decode(self, x: torch.Tensor, s: torch.Tensor = torch.zeros(1, 1, 0)) -> torch.Tensor:\n        s_stft_real, s_stft_imag = self._stft(s.squeeze(1))\n        s_stft = torch.cat([s_stft_real, s_stft_imag], dim=1)\n\n        x = self.conv_pre(x)\n        for i in range(self.num_upsamples):\n            x = F.leaky_relu(x, self.lrelu_slope)\n            x = self.ups[i](x)\n\n            if i == self.num_upsamples - 1:\n                x = self.reflection_pad(x)\n\n            # fusion\n            si = self.source_downs[i](s_stft)\n            si = self.source_resblocks[i](si)\n            x = x + si\n\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n\n        x = F.leaky_relu(x)\n        x = self.conv_post(x)\n        magnitude = torch.exp(x[:, :self.istft_params[\"n_fft\"] // 2 + 1, :])\n        phase = torch.sin(x[:, self.istft_params[\"n_fft\"] // 2 + 1:, :])  # actually, sin is redundancy\n\n        x = self._istft(magnitude, phase)\n        x = torch.clamp(x, -self.audio_limit, self.audio_limit)\n        return x\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        speech_feat = batch['speech_feat'].transpose(1, 2).to(device)\n        # mel->f0\n        f0 = self.f0_predictor(speech_feat)\n        # f0->source\n        s = self.f0_upsamp(f0[:, None]).transpose(1, 2)  # bs,n,t\n        s, _, _ = self.m_source(s)\n        s = s.transpose(1, 2)\n        # mel+source->speech\n        generated_speech = self.decode(x=speech_feat, s=s)\n        return generated_speech, f0\n\n    @torch.inference_mode()\n    def inference(self, speech_feat: torch.Tensor, cache_source: torch.Tensor = torch.zeros(1, 1, 0)) -> torch.Tensor:\n        # mel->f0\n        f0 = self.f0_predictor(speech_feat)\n        # f0->source\n        s = self.f0_upsamp(f0[:, None]).transpose(1, 2)  # bs,n,t\n        s, _, _ = self.m_source(s)\n        s = s.transpose(1, 2)\n        # use cache_source to avoid glitch\n        if cache_source.shape[2] != 0:\n            s[:, :, :cache_source.shape[2]] = cache_source\n        generated_speech = self.decode(x=speech_feat, s=s)\n        return generated_speech, s\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/hifigan/hifigan.py",
    "content": "from typing import Dict, Optional\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom matcha.hifigan.models import feature_loss, generator_loss, discriminator_loss\nfrom cosyvoice.utils.losses import tpr_loss, mel_loss\n\n\nclass HiFiGan(nn.Module):\n    def __init__(self, generator, discriminator, mel_spec_transform,\n                 multi_mel_spectral_recon_loss_weight=45, feat_match_loss_weight=2.0,\n                 tpr_loss_weight=1.0, tpr_loss_tau=0.04):\n        super(HiFiGan, self).__init__()\n        self.generator = generator\n        self.discriminator = discriminator\n        self.mel_spec_transform = mel_spec_transform\n        self.multi_mel_spectral_recon_loss_weight = multi_mel_spectral_recon_loss_weight\n        self.feat_match_loss_weight = feat_match_loss_weight\n        self.tpr_loss_weight = tpr_loss_weight\n        self.tpr_loss_tau = tpr_loss_tau\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        if batch['turn'] == 'generator':\n            return self.forward_generator(batch, device)\n        else:\n            return self.forward_discriminator(batch, device)\n\n    def forward_generator(self, batch, device):\n        real_speech = batch['speech'].to(device)\n        pitch_feat = batch['pitch_feat'].to(device)\n        # 1. calculate generator outputs\n        generated_speech, generated_f0 = self.generator(batch, device)\n        # 2. calculate discriminator outputs\n        y_d_rs, y_d_gs, fmap_rs, fmap_gs = self.discriminator(real_speech, generated_speech)\n        # 3. calculate generator losses, feature loss, mel loss, tpr losses [Optional]\n        loss_gen, _ = generator_loss(y_d_gs)\n        loss_fm = feature_loss(fmap_rs, fmap_gs)\n        loss_mel = mel_loss(real_speech, generated_speech, self.mel_spec_transform)\n        if self.tpr_loss_weight != 0:\n            loss_tpr = tpr_loss(y_d_gs, y_d_rs, self.tpr_loss_tau)\n        else:\n            loss_tpr = torch.zeros(1).to(device)\n        loss_f0 = F.l1_loss(generated_f0, pitch_feat)\n        loss = loss_gen + self.feat_match_loss_weight * loss_fm + \\\n            self.multi_mel_spectral_recon_loss_weight * loss_mel + \\\n            self.tpr_loss_weight * loss_tpr + loss_f0\n        return {'loss': loss, 'loss_gen': loss_gen, 'loss_fm': loss_fm, 'loss_mel': loss_mel, 'loss_tpr': loss_tpr, 'loss_f0': loss_f0}\n\n    def forward_discriminator(self, batch, device):\n        real_speech = batch['speech'].to(device)\n        # 1. calculate generator outputs\n        with torch.no_grad():\n            generated_speech, generated_f0 = self.generator(batch, device)\n        # 2. calculate discriminator outputs\n        y_d_rs, y_d_gs, fmap_rs, fmap_gs = self.discriminator(real_speech, generated_speech.detach())\n        # 3. calculate discriminator losses, tpr losses [Optional]\n        loss_disc, _, _ = discriminator_loss(y_d_rs, y_d_gs)\n        if self.tpr_loss_weight != 0:\n            loss_tpr = tpr_loss(y_d_rs, y_d_gs, self.tpr_loss_tau)\n        else:\n            loss_tpr = torch.zeros(1).to(device)\n        loss = loss_disc + self.tpr_loss_weight * loss_tpr\n        return {'loss': loss, 'loss_disc': loss_disc, 'loss_tpr': loss_tpr}\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/llm/llm.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Yabin Li, Qihua, Shengqiang Li)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport queue\nimport random\nimport time\nimport threading\nfrom typing import Dict, Optional, Callable, List, Generator\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\nfrom transformers import Qwen2ForCausalLM\nfrom torch.nn.utils.rnn import pad_sequence, unpad_sequence\nfrom cosyvoice.utils.common import IGNORE_ID\nfrom cosyvoice.transformer.label_smoothing_loss import LabelSmoothingLoss\nfrom cosyvoice.utils.common import th_accuracy\nfrom cosyvoice.utils.file_utils import logging\nfrom cosyvoice.utils.mask import make_pad_mask\n\n\nclass TransformerLM(torch.nn.Module):\n    def __init__(\n            self,\n            text_encoder_input_size: int,\n            llm_input_size: int,\n            llm_output_size: int,\n            text_token_size: int,\n            speech_token_size: int,\n            text_encoder: torch.nn.Module,\n            llm: torch.nn.Module,\n            sampling: Callable,\n            length_normalized_loss: bool = True,\n            lsm_weight: float = 0.0,\n            spk_embed_dim: int = 192,\n    ):\n        super().__init__()\n        self.llm_input_size = llm_input_size\n        self.speech_token_size = speech_token_size\n        # 1. build text token inputs related modules\n        self.text_embedding = torch.nn.Embedding(text_token_size, text_encoder_input_size)\n        self.text_encoder = text_encoder\n        self.text_encoder_affine_layer = nn.Linear(\n            self.text_encoder.output_size(),\n            llm_input_size\n        )\n\n        # 2. build speech token language model related modules\n        self.sos_eos = 0\n        self.task_id = 1\n        self.llm_embedding = torch.nn.Embedding(2, llm_input_size)\n        self.llm = llm\n        self.llm_decoder = nn.Linear(llm_output_size, speech_token_size + 1)\n        self.criterion_ce = LabelSmoothingLoss(\n            size=speech_token_size + 1,\n            padding_idx=IGNORE_ID,\n            smoothing=lsm_weight,\n            normalize_length=length_normalized_loss,\n        )\n\n        # 3. [Optional] build speech token related modules\n        self.speech_embedding = torch.nn.Embedding(speech_token_size, llm_input_size)\n        self.spk_embed_affine_layer = torch.nn.Linear(spk_embed_dim, llm_input_size)\n\n        # 4. sampling method\n        self.sampling = sampling\n\n    def encode(\n            self,\n            text: torch.Tensor,\n            text_lengths: torch.Tensor,\n    ):\n        encoder_out, encoder_mask = self.text_encoder(text, text_lengths, decoding_chunk_size=1, num_decoding_left_chunks=-1)\n        encoder_out_lens = encoder_mask.squeeze(1).sum(1)\n        encoder_out = self.text_encoder_affine_layer(encoder_out)\n        return encoder_out, encoder_out_lens\n\n    def pad_unpad_sequence(self, sos_eos_emb, embedding, text_token, text_token_len, task_id_emb, speech_token, speech_token_len):\n        text_token = unpad_sequence(text_token, text_token_len.cpu(), batch_first=True)\n        speech_token = unpad_sequence(speech_token, speech_token_len.cpu(), batch_first=True)\n        lm_input = [torch.concat([sos_eos_emb.squeeze(dim=0), embedding[i], text_token[i], task_id_emb.squeeze(dim=0), speech_token[i]], dim=0)\n                    for i in range(len(text_token))]\n        lm_input_len = torch.tensor([i.size(0) for i in lm_input], dtype=torch.int32)\n        lm_input = pad_sequence(lm_input, batch_first=True, padding_value=IGNORE_ID)\n        return lm_input, lm_input_len\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        \"\"\"\n        Args:\n            text: (B, L, D)\n            text_lengths: (B,)\n            audio: (B, T, N) or (B, T)\n            audio_lengths: (B,)\n        \"\"\"\n        text_token = batch['text_token'].to(device)\n        text_token_len = batch['text_token_len'].to(device)\n        speech_token = batch['speech_token'].to(device)\n        speech_token_len = batch['speech_token_len'].to(device)\n        embedding = batch['embedding'].to(device)\n\n        # 1. prepare llm_target\n        lm_target = [torch.tensor([IGNORE_ID] * (2 + text_token_len[i]) + speech_token[i, :speech_token_len[i]].tolist() +\n                                  [self.speech_token_size]) for i in range(text_token.size(0))]\n        lm_target = pad_sequence(lm_target, batch_first=True, padding_value=IGNORE_ID).to(device)\n\n        # 1. encode text_token\n        text_token = self.text_embedding(text_token)\n        text_token, text_token_len = self.encode(text_token, text_token_len)\n\n        # 2. embedding projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n        embedding = embedding.unsqueeze(1)\n\n        # 3. eos and task_id\n        sos_eos_emb = self.llm_embedding.weight[self.sos_eos].reshape(1, 1, -1)\n        task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n\n        # 4. encode speech_token\n        speech_token = self.speech_embedding(speech_token)\n\n        # 5. unpad and pad\n        lm_input, lm_input_len = self.pad_unpad_sequence(sos_eos_emb, embedding, text_token, text_token_len,\n                                                         task_id_emb, speech_token, speech_token_len)\n\n        # 6. run lm forward\n        lm_output, lm_output_mask = self.llm(lm_input, lm_input_len.to(device))\n        logits = self.llm_decoder(lm_output)\n        loss = self.criterion_ce(logits, lm_target)\n        acc = th_accuracy(logits.view(-1, self.speech_token_size + 1), lm_target, ignore_label=IGNORE_ID)\n        return {'loss': loss, 'acc': acc}\n\n    def sampling_ids(\n            self,\n            weighted_scores: torch.Tensor,\n            decoded_tokens: List,\n            sampling: int,\n            ignore_eos: bool = True,\n    ):\n        num_trials, max_trials = 0, 100\n        while True:\n            top_ids = self.sampling(weighted_scores, decoded_tokens, sampling)\n            if (not ignore_eos) or (self.speech_token_size not in top_ids):\n                break\n            num_trials += 1\n            if num_trials > max_trials:\n                raise RuntimeError('sampling reaches max_trials {} and still get eos when ignore_eos is True, check your input!'.format(max_trials))\n        return top_ids\n\n    @torch.inference_mode()\n    def inference(\n            self,\n            text: torch.Tensor,\n            text_len: torch.Tensor,\n            prompt_text: torch.Tensor,\n            prompt_text_len: torch.Tensor,\n            prompt_speech_token: torch.Tensor,\n            prompt_speech_token_len: torch.Tensor,\n            embedding: torch.Tensor,\n            sampling: int = 25,\n            max_token_text_ratio: float = 20,\n            min_token_text_ratio: float = 2,\n            uuid: str = '',\n    ) -> Generator[torch.Tensor, None, None]:\n        device = text.device\n        text = torch.concat([prompt_text, text], dim=1)\n        text_len += prompt_text_len\n        text = self.text_embedding(text)\n\n        # 1. encode text\n        text, text_len = self.encode(text, text_len)\n\n        # 2. encode embedding\n        if embedding.shape[0] != 0:\n            embedding = F.normalize(embedding, dim=1)\n            embedding = self.spk_embed_affine_layer(embedding)\n            embedding = embedding.unsqueeze(dim=1)\n        else:\n            embedding = torch.zeros(1, 0, self.llm_input_size, dtype=text.dtype).to(device).to(text.dtype)\n\n        # 3. concat llm_input\n        sos_eos_emb = self.llm_embedding.weight[self.sos_eos].reshape(1, 1, -1)\n        task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n        if prompt_speech_token_len != 0:\n            prompt_speech_token_emb = self.speech_embedding(prompt_speech_token)\n        else:\n            prompt_speech_token_emb = torch.zeros(1, 0, self.llm_input_size, dtype=text.dtype).to(device)\n        lm_input = torch.concat([sos_eos_emb, embedding, text, task_id_emb, prompt_speech_token_emb], dim=1)\n\n        # 4. cal min/max_length\n        min_len = int((text_len - prompt_text_len) * min_token_text_ratio)\n        max_len = int((text_len - prompt_text_len) * max_token_text_ratio)\n\n        # 5. step by step decode\n        out_tokens = []\n        offset = 0\n        att_cache, cnn_cache = torch.zeros((0, 0, 0, 0), device=lm_input.device), torch.zeros((0, 0, 0, 0), device=lm_input.device)\n        for i in range(max_len):\n            y_pred, att_cache, cnn_cache = self.llm.forward_chunk(lm_input, offset=offset, required_cache_size=-1,\n                                                                  att_cache=att_cache, cnn_cache=cnn_cache,\n                                                                  att_mask=torch.tril(torch.ones((1, lm_input.shape[1], lm_input.shape[1]),\n                                                                                                 device=lm_input.device)).to(torch.bool))\n            logp = self.llm_decoder(y_pred[:, -1]).log_softmax(dim=-1)\n            # force continue decode first token\n            if i == 0:\n                logp[:, self.speech_token_size] = -float('inf')\n            top_ids = self.sampling_ids(logp.squeeze(dim=0), out_tokens, sampling, ignore_eos=True if i < min_len else False).item()\n            if top_ids == self.speech_token_size:\n                break\n            # in stream mode, yield token one by one\n            yield top_ids\n            out_tokens.append(top_ids)\n            offset += lm_input.size(1)\n            lm_input = self.speech_embedding.weight[top_ids].reshape(1, 1, -1)\n\n\nclass Qwen2Encoder(torch.nn.Module):\n    def __init__(self, pretrain_path):\n        super().__init__()\n        self.model = Qwen2ForCausalLM.from_pretrained(pretrain_path)\n\n    def forward(self, xs: torch.Tensor, xs_lens: torch.Tensor):\n        T = xs.size(1)\n        masks = ~make_pad_mask(xs_lens, T)\n        outs = self.model(\n            inputs_embeds=xs,\n            attention_mask=masks,\n            output_hidden_states=True,\n            return_dict=True,\n        )\n        return outs.hidden_states[-1], masks.unsqueeze(1)\n\n    def forward_one_step(self, xs, masks, cache=None):\n        input_masks = masks[:, -1, :]\n        outs = self.model(\n            inputs_embeds=xs,\n            attention_mask=input_masks,\n            output_hidden_states=True,\n            return_dict=True,\n            use_cache=True,\n            past_key_values=cache,\n        )\n        xs = outs.hidden_states[-1]\n        new_cache = outs.past_key_values\n        return xs, new_cache\n\n\nclass Qwen2LM(TransformerLM):\n    def __init__(\n            self,\n            llm_input_size: int,\n            llm_output_size: int,\n            speech_token_size: int,\n            llm: torch.nn.Module,\n            sampling: Callable,\n            length_normalized_loss: bool = True,\n            lsm_weight: float = 0.0,\n            mix_ratio: List[int] = [5, 15],\n    ):\n        torch.nn.Module.__init__(self)\n        self.llm_input_size = llm_input_size\n        self.llm_output_size = llm_output_size\n        self.speech_token_size = speech_token_size\n        # 2. build speech token language model related modules\n        self.sos_eos = 0\n        self.task_id = 1\n        self.fill_token = 2\n\n        self.llm_embedding = torch.nn.Embedding(2, llm_input_size)\n        self.llm = llm\n        self.llm_decoder = nn.Linear(llm_output_size, speech_token_size + 3)\n        self.criterion_ce = LabelSmoothingLoss(\n            size=speech_token_size + 3,\n            padding_idx=IGNORE_ID,\n            smoothing=lsm_weight,\n            normalize_length=length_normalized_loss,\n        )\n\n        # 3. [Optional] build speech token related modules\n        self.speech_embedding = torch.nn.Embedding(speech_token_size + 3, llm_input_size)\n\n        # 4. sampling method\n        self.sampling = sampling\n        self.mix_ratio = mix_ratio\n\n        # 5. vllm related\n        self.stop_token_ids = [speech_token_size + i for i in range(3)]\n        self.vllm_output_queue = {}\n\n    def prepare_lm_input_target(self, text_token, text_token_emb, text_token_len, speech_token, speech_token_emb, speech_token_len):\n        lm_target, lm_input = [], []\n        text_token = unpad_sequence(text_token, text_token_len.cpu(), batch_first=True)\n        speech_token = unpad_sequence(speech_token, speech_token_len.cpu(), batch_first=True)\n        text_token_emb = unpad_sequence(text_token_emb, text_token_len.cpu(), batch_first=True)\n        speech_token_emb = unpad_sequence(speech_token_emb, speech_token_len.cpu(), batch_first=True)\n        for i in range(len(text_token)):\n            # bistream sequence\n            if random.random() < 0.5 and speech_token_len[i] / text_token_len[i] > self.mix_ratio[1] / self.mix_ratio[0]:\n                this_lm_target, this_lm_input = [], []\n                this_lm_target.append(IGNORE_ID)\n                this_lm_input.append(self.llm_embedding.weight[self.sos_eos].reshape(1, -1))\n                for j in range(((text_token_len[i] + 1) / self.mix_ratio[0]).ceil().int().item()):\n                    this_text_token = text_token[i][j * self.mix_ratio[0]: (j + 1) * self.mix_ratio[0]].tolist()\n                    this_speech_token = speech_token[i][j * self.mix_ratio[1]: (j + 1) * self.mix_ratio[1]].tolist()\n                    if len(this_text_token) == self.mix_ratio[0]:\n                        assert len(this_speech_token) == self.mix_ratio[1]\n                        this_lm_target += [IGNORE_ID] * (self.mix_ratio[0] - 1)\n                        this_lm_target += this_speech_token\n                        this_lm_target.append(self.speech_token_size + 2)\n                        this_lm_input.append(text_token_emb[i][j * self.mix_ratio[0]: (j + 1) * self.mix_ratio[0]])\n                        this_lm_input.append(speech_token_emb[i][j * self.mix_ratio[1]: (j + 1) * self.mix_ratio[1]])\n                    else:\n                        this_lm_target += [-1] * len(this_text_token)\n                        this_lm_target += speech_token[i][j * self.mix_ratio[1]:].tolist()\n                        this_lm_target.append(self.speech_token_size)\n                        this_lm_input.append(text_token_emb[i][j * self.mix_ratio[0]:])\n                        this_lm_input.append(self.llm_embedding.weight[self.task_id].reshape(1, -1))\n                        this_lm_input.append(speech_token_emb[i][j * self.mix_ratio[1]:])\n                this_lm_target, this_lm_input = torch.tensor(this_lm_target), torch.concat(this_lm_input, dim=0)\n            # unistream sequence\n            else:\n                this_lm_target = torch.tensor([IGNORE_ID] * (1 + text_token_len[i]) + speech_token[i].tolist() + [self.speech_token_size])\n                this_lm_input = torch.concat([self.llm_embedding.weight[self.sos_eos].reshape(1, -1), text_token_emb[i],\n                                              self.llm_embedding.weight[self.task_id].reshape(1, -1), speech_token_emb[i]], dim=0)\n            lm_target.append(this_lm_target)\n            lm_input.append(this_lm_input)\n        lm_input_len = torch.tensor([i.size(0) for i in lm_input], dtype=torch.int32)\n        lm_input = pad_sequence(lm_input, batch_first=True, padding_value=IGNORE_ID)\n        lm_target = pad_sequence(lm_target, batch_first=True, padding_value=IGNORE_ID)\n        return lm_target, lm_input, lm_input_len\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        \"\"\"\n        Args:\n            text: (B, L, D)\n            text_lengths: (B,)\n            audio: (B, T, N) or (B, T)\n            audio_lengths: (B,)\n        \"\"\"\n        text_token = batch['text_token'].to(device)\n        text_token_len = batch['text_token_len'].to(device)\n        speech_token = batch['speech_token'].to(device)\n        speech_token_len = batch['speech_token_len'].to(device)\n\n        # 1. encode text_token\n        text_token_emb = self.llm.model.model.embed_tokens(text_token)\n\n        # 2. encode speech_token\n        speech_token_emb = self.speech_embedding(speech_token)\n\n        # 3. prepare llm_input/target\n        lm_target, lm_input, lm_input_len = self.prepare_lm_input_target(text_token, text_token_emb, text_token_len, speech_token, speech_token_emb, speech_token_len)\n        lm_target = lm_target.to(device)\n\n        # 4. run lm forward\n        lm_output, lm_output_mask = self.llm(lm_input, lm_input_len.to(device))\n        logits = self.llm_decoder(lm_output)\n        loss = self.criterion_ce(logits, lm_target.to(device))\n        acc = th_accuracy(logits.view(-1, self.speech_token_size + 3), lm_target, ignore_label=IGNORE_ID)\n        return {'loss': loss, 'acc': acc}\n\n    def forward_dpo(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        text_token = batch['text_token'].to(device)\n        text_token_len = batch['text_token_len'].to(device)\n        speech_token = batch['speech_token'].to(device)\n        speech_token_len = batch['speech_token_len'].to(device)\n        reject_speech_token = batch['reject_speech_token'].to(device)\n        reject_speech_token_len = batch['reject_speech_token_len'].to(device)\n\n        # 1. encode text_token\n        text_token_emb = self.llm.model.model.embed_tokens(text_token)\n\n        # 2. encode speech_token\n        speech_token = unpad_sequence(speech_token, speech_token_len.cpu(), batch_first=True)\n        reject_speech_token = unpad_sequence(reject_speech_token, reject_speech_token_len.cpu(), batch_first=True)\n        speech_token_combined = speech_token + reject_speech_token\n        speech_token_combined = pad_sequence(speech_token_combined, batch_first=True, padding_value=0)\n        speech_token_combined_len = torch.concat([speech_token_len, reject_speech_token_len], dim=0)\n        speech_token_combined_emb = self.speech_embedding(speech_token_combined)\n\n        # 3. prepare llm_input/target\n        lm_target, lm_input, lm_input_len = self.prepare_lm_input_target(text_token.repeat(2, 1), text_token_emb.repeat(2, 1, 1), text_token_len.repeat(2),\n                                                                         speech_token_combined, speech_token_combined_emb, speech_token_combined_len)\n        lm_target = lm_target.to(device)\n\n        # 4. run lm forward\n        lm_output, lm_output_mask = self.llm(lm_input, lm_input_len.to(device))\n        logits = self.llm_decoder(lm_output)\n        chosen_logits = logits[:text_token.shape[0]]\n        rejected_logits = logits[text_token.shape[0]:]\n        chosen_lm_target = lm_target[:text_token.shape[0]]\n        rejected_lm_target = lm_target[text_token.shape[0]:]\n        loss = self.criterion_ce(chosen_logits, chosen_lm_target.to(device))\n        acc = th_accuracy(chosen_logits.view(-1, self.speech_token_size + 3), chosen_lm_target, ignore_label=IGNORE_ID)\n\n        # 5. calculate dpo logits\n        chosen_lm_mask = chosen_lm_target == IGNORE_ID\n        rejected_lm_mask = rejected_lm_target == IGNORE_ID\n        chosen_logps = torch.gather(chosen_logits.log_softmax(dim=-1), dim=2, index=chosen_lm_target.masked_fill(chosen_lm_mask, 0).unsqueeze(dim=-1)).squeeze(dim=-1)\n        rejected_logps = torch.gather(rejected_logits.log_softmax(dim=-1), dim=2, index=rejected_lm_target.masked_fill(rejected_lm_mask, 0).unsqueeze(dim=-1)).squeeze(dim=-1)\n        chosen_logps = (chosen_logps * chosen_lm_mask).sum(dim=-1) / chosen_lm_mask.sum(dim=-1)\n        rejected_logps = (rejected_logps * rejected_lm_mask).sum(dim=-1) / rejected_lm_mask.sum(dim=-1)\n        return {'loss': loss, 'acc': acc, 'chosen_logps': chosen_logps, 'rejected_logps': rejected_logps}\n\n    @torch.inference_mode()\n    def inference(\n            self,\n            text: torch.Tensor,\n            text_len: torch.Tensor,\n            prompt_text: torch.Tensor,\n            prompt_text_len: torch.Tensor,\n            prompt_speech_token: torch.Tensor,\n            prompt_speech_token_len: torch.Tensor,\n            embedding: torch.Tensor,\n            sampling: int = 25,\n            max_token_text_ratio: float = 20,\n            min_token_text_ratio: float = 2,\n            uuid: str = '',\n    ) -> Generator[torch.Tensor, None, None]:\n        device = text.device\n        text = torch.concat([prompt_text, text], dim=1)\n        text_len += prompt_text_len\n        text = self.llm.model.model.embed_tokens(text)\n\n        # 3. concat llm_input\n        sos_eos_emb = self.llm_embedding.weight[self.sos_eos].reshape(1, 1, -1)\n        task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n        if prompt_speech_token_len != 0:\n            prompt_speech_token_emb = self.speech_embedding(prompt_speech_token)\n        else:\n            prompt_speech_token_emb = torch.zeros(1, 0, self.llm_input_size, dtype=text.dtype).to(device)\n        lm_input = torch.concat([sos_eos_emb, text, task_id_emb, prompt_speech_token_emb], dim=1)\n\n        # 4. cal min/max_length\n        min_len = int((text_len - prompt_text_len) * min_token_text_ratio)\n        max_len = int((text_len - prompt_text_len) * max_token_text_ratio)\n\n        # 5. step by step decode\n        for token in self.inference_wrapper(lm_input, sampling, min_len, max_len, uuid):\n            yield token\n\n    @torch.inference_mode()\n    def inference_wrapper(self, lm_input, sampling, min_len, max_len, uuid):\n        if hasattr(self, 'vllm'):\n            from vllm import SamplingParams, RequestOutput\n            sampling_params = SamplingParams(top_k=sampling,\n                                             stop_token_ids=self.stop_token_ids,\n                                             min_tokens=min_len,\n                                             max_tokens=max_len)\n            with self.lock:\n                self.vllm.add_request(uuid, {\"prompt_embeds\": lm_input.squeeze(0).to(torch.bfloat16).to(lm_input.device)}, sampling_params)\n                self.vllm_output_queue[uuid] = queue.Queue()\n            out_tokens = []\n            while True:\n                with self.lock:\n                    if self.vllm_output_queue[uuid].empty() is True:\n                        request_outputs: List[RequestOutput] = self.vllm.step()\n                        for request_output in request_outputs:\n                            top_ids = list(request_output.outputs[0].token_ids)[-1]\n                            self.vllm_output_queue[request_output.request_id].put(top_ids)\n                if self.vllm_output_queue[uuid].empty() is False:\n                    top_ids = self.vllm_output_queue[uuid].get()\n                    if top_ids in self.stop_token_ids:\n                        break\n                    # in stream mode, yield token one by one\n                    yield top_ids\n                    out_tokens.append(top_ids)\n                    if len(out_tokens) == max_len:\n                        break\n                time.sleep(0.001)\n            with self.lock:\n                self.vllm_output_queue.pop(uuid)\n        else:\n            out_tokens = []\n            cache = None\n            for i in range(max_len):\n                y_pred, cache = self.llm.forward_one_step(lm_input,\n                                                          masks=torch.tril(torch.ones((1, lm_input.shape[1], lm_input.shape[1]), device=lm_input.device)).to(torch.bool),\n                                                          cache=cache)\n                logp = self.llm_decoder(y_pred[:, -1]).log_softmax(dim=-1)\n                top_ids = self.sampling_ids(logp.squeeze(dim=0), out_tokens, sampling, ignore_eos=True if i < min_len else False).item()\n                if top_ids == self.speech_token_size:\n                    break\n                if top_ids > self.speech_token_size:\n                    continue\n                # in stream mode, yield token one by one\n                yield top_ids\n                out_tokens.append(top_ids)\n                lm_input = self.speech_embedding.weight[top_ids].reshape(1, 1, -1)\n\n    @torch.inference_mode()\n    def inference_bistream(\n            self,\n            text: Generator,\n            prompt_text: torch.Tensor,\n            prompt_text_len: torch.Tensor,\n            prompt_speech_token: torch.Tensor,\n            prompt_speech_token_len: torch.Tensor,\n            embedding: torch.Tensor,\n            sampling: int = 25,\n            max_token_text_ratio: float = 20,\n            min_token_text_ratio: float = 2,\n    ) -> Generator[torch.Tensor, None, None]:\n\n        device = prompt_text.device\n        # 1. prepare input\n        sos_eos_emb = self.llm_embedding.weight[self.sos_eos].reshape(1, 1, -1)\n        task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n        if prompt_speech_token_len != 0:\n            prompt_speech_token_emb = self.speech_embedding(prompt_speech_token)\n        else:\n            prompt_speech_token_emb = torch.zeros(1, 0, self.llm_input_size, dtype=prompt_text.dtype).to(device)\n        lm_input = torch.concat([sos_eos_emb], dim=1)\n\n        # 2. iterate text\n        out_tokens = []\n        cache = None\n        # NOTE init prompt_text as text_cache as it is basically impossible prompt_speech_token/prompt_text < 15/5\n        text_cache = self.llm.model.model.embed_tokens(prompt_text)\n        next_fill_index = -1\n        for this_text in text:\n            text_cache = torch.concat([text_cache, self.llm.model.model.embed_tokens(this_text)], dim=1)\n            # prompt_speech_token_emb not empty, try append to lm_input\n            while prompt_speech_token_emb.size(1) != 0:\n                if text_cache.size(1) >= self.mix_ratio[0]:\n                    lm_input_text, lm_input_speech = text_cache[:, :self.mix_ratio[0]], prompt_speech_token_emb[:, :self.mix_ratio[1]]\n                    logging.info('append {} text token {} speech token'.format(lm_input_text.size(1), lm_input_speech.size(1)))\n                    lm_input = torch.concat([lm_input, lm_input_text, lm_input_speech], dim=1)\n                    text_cache, prompt_speech_token_emb = text_cache[:, self.mix_ratio[0]:], prompt_speech_token_emb[:, self.mix_ratio[1]:]\n                else:\n                    logging.info('not enough text token to decode, wait for more')\n                    break\n            # no prompt_speech_token_emb remain, can decode some speech token\n            if prompt_speech_token_emb.size(1) == 0:\n                if (len(out_tokens) != 0 and out_tokens[-1] == self.speech_token_size + 2) or (len(out_tokens) == 0 and lm_input.size(1) == 1):\n                    logging.info('get fill token, need to append more text token')\n                    if text_cache.size(1) >= self.mix_ratio[0]:\n                        lm_input_text = text_cache[:, :self.mix_ratio[0]]\n                        logging.info('append {} text token'.format(lm_input_text.size(1)))\n                        if len(out_tokens) != 0 and out_tokens[-1] == self.speech_token_size + 2:\n                            lm_input = lm_input_text\n                        else:\n                            lm_input = torch.concat([lm_input, lm_input_text], dim=1)\n                        text_cache = text_cache[:, self.mix_ratio[0]:]\n                    else:\n                        logging.info('not enough text token to decode, wait for more')\n                        continue\n                while True:\n                    seq_len = lm_input.shape[1] if cache is None else lm_input.shape[1] + cache[0][0].size(2)\n                    y_pred, cache = self.llm.forward_one_step(lm_input,\n                                                              masks=torch.tril(torch.ones((1, seq_len, seq_len), device=lm_input.device)).to(torch.bool),\n                                                              cache=cache)\n                    logp = self.llm_decoder(y_pred[:, -1]).log_softmax(dim=-1)\n                    if next_fill_index != -1 and len(out_tokens) == next_fill_index:\n                        top_ids = self.speech_token_size + 2\n                        next_fill_index += (self.mix_ratio[1] + 1)\n                    else:\n                        top_ids = self.sampling_ids(logp.squeeze(dim=0), out_tokens, sampling, ignore_eos=True).item()\n                    if top_ids == self.speech_token_size + 2:\n                        next_fill_index = len(out_tokens) + self.mix_ratio[1] + 1\n                        logging.info('fill_token index {} next fill_token index {}'.format(len(out_tokens), next_fill_index))\n                    out_tokens.append(top_ids)\n                    if top_ids >= self.speech_token_size:\n                        if top_ids == self.speech_token_size + 2:\n                            break\n                        else:\n                            raise ValueError('should not get token {}'.format(top_ids))\n                    yield top_ids\n                    lm_input = self.speech_embedding.weight[top_ids].reshape(1, 1, -1)\n\n        # 3. final decode\n        lm_input = torch.concat([lm_input, text_cache, task_id_emb], dim=1)\n        logging.info('no more text token, decode until met eos')\n        while True:\n            seq_len = lm_input.shape[1] if cache is None else lm_input.shape[1] + cache[0][0].size(2)\n            y_pred, cache = self.llm.forward_one_step(lm_input,\n                                                      masks=torch.tril(torch.ones((1, seq_len, seq_len), device=lm_input.device)).to(torch.bool),\n                                                      cache=cache)\n            logp = self.llm_decoder(y_pred[:, -1]).log_softmax(dim=-1)\n            top_ids = self.sampling_ids(logp.squeeze(dim=0), out_tokens, sampling, ignore_eos=False).item()\n            out_tokens.append(top_ids)\n            if top_ids >= self.speech_token_size:\n                if top_ids == self.speech_token_size:\n                    break\n                else:\n                    raise ValueError('should not get token {}'.format(top_ids))\n            # in stream mode, yield token one by one\n            yield top_ids\n            lm_input = self.speech_embedding.weight[top_ids].reshape(1, 1, -1)\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/tokenizer/assets/multilingual_zh_ja_yue_char_del.tiktoken",
    "content": "IQ== 0\nIg== 1\nIw== 2\nJA== 3\nJQ== 4\nJg== 5\nJw== 6\nKA== 7\nKQ== 8\nKg== 9\nKw== 10\nLA== 11\nLQ== 12\nLg== 13\nLw== 14\nMA== 15\nMQ== 16\nMg== 17\nMw== 18\nNA== 19\nNQ== 20\nNg== 21\nNw== 22\nOA== 23\nOQ== 24\nOg== 25\nOw== 26\nPA== 27\nPQ== 28\nPg== 29\nPw== 30\nQA== 31\nQQ== 32\nQg== 33\nQw== 34\nRA== 35\nRQ== 36\nRg== 37\nRw== 38\nSA== 39\nSQ== 40\nSg== 41\nSw== 42\nTA== 43\nTQ== 44\nTg== 45\nTw== 46\nUA== 47\nUQ== 48\nUg== 49\nUw== 50\nVA== 51\nVQ== 52\nVg== 53\nVw== 54\nWA== 55\nWQ== 56\nWg== 57\nWw== 58\nXA== 59\nXQ== 60\nXg== 61\nXw== 62\nYA== 63\nYQ== 64\nYg== 65\nYw== 66\nZA== 67\nZQ== 68\nZg== 69\nZw== 70\naA== 71\naQ== 72\nag== 73\naw== 74\nbA== 75\nbQ== 76\nbg== 77\nbw== 78\ncA== 79\ncQ== 80\ncg== 81\ncw== 82\ndA== 83\ndQ== 84\ndg== 85\ndw== 86\neA== 87\neQ== 88\neg== 89\new== 90\nfA== 91\nfQ== 92\nfg== 93\noQ== 94\nog== 95\now== 96\npA== 97\npQ== 98\npg== 99\npw== 100\nqA== 101\nqQ== 102\nqg== 103\nqw== 104\nrA== 105\nrg== 106\nrw== 107\nsA== 108\nsQ== 109\nsg== 110\nsw== 111\ntA== 112\ntQ== 113\ntg== 114\ntw== 115\nuA== 116\nuQ== 117\nug== 118\nuw== 119\nvA== 120\nvQ== 121\nvg== 122\nvw== 123\nwA== 124\nwQ== 125\nwg== 126\nww== 127\nxA== 128\nxQ== 129\nxg== 130\nxw== 131\nyA== 132\nyQ== 133\nyg== 134\nyw== 135\nzA== 136\nzQ== 137\nzg== 138\nzw== 139\n0A== 140\n0Q== 141\n0g== 142\n0w== 143\n1A== 144\n1Q== 145\n1g== 146\n1w== 147\n2A== 148\n2Q== 149\n2g== 150\n2w== 151\n3A== 152\n3Q== 153\n3g== 154\n3w== 155\n4A== 156\n4Q== 157\n4g== 158\n4w== 159\n5A== 160\n5Q== 161\n5g== 162\n5w== 163\n6A== 164\n6Q== 165\n6g== 166\n6w== 167\n7A== 168\n7Q== 169\n7g== 170\n7w== 171\n8A== 172\n8Q== 173\n8g== 174\n8w== 175\n9A== 176\n9Q== 177\n9g== 178\n9w== 179\n+A== 180\n+Q== 181\n+g== 182\n+w== 183\n/A== 184\n/Q== 185\n/g== 186\n/w== 187\nAA== 188\nAQ== 189\nAg== 190\nAw== 191\nBA== 192\nBQ== 193\nBg== 194\nBw== 195\nCA== 196\nCQ== 197\nCg== 198\nCw== 199\nDA== 200\nDQ== 201\nDg== 202\nDw== 203\nEA== 204\nEQ== 205\nEg== 206\nEw== 207\nFA== 208\nFQ== 209\nFg== 210\nFw== 211\nGA== 212\nGQ== 213\nGg== 214\nGw== 215\nHA== 216\nHQ== 217\nHg== 218\nHw== 219\nIA== 220\nfw== 221\ngA== 222\ngQ== 223\ngg== 224\ngw== 225\nhA== 226\nhQ== 227\nhg== 228\nhw== 229\niA== 230\niQ== 231\nig== 232\niw== 233\njA== 234\njQ== 235\njg== 236\njw== 237\nkA== 238\nkQ== 239\nkg== 240\nkw== 241\nlA== 242\nlQ== 243\nlg== 244\nlw== 245\nmA== 246\nmQ== 247\nmg== 248\nmw== 249\nnA== 250\nnQ== 251\nng== 252\nnw== 253\noA== 254\nrQ== 255\nIHQ= 256\nIGE= 257\nIHRo 258\naW4= 259\nZXI= 260\nIHc= 261\nIHM= 262\nb3U= 263\nIHRoZQ== 264\ncmU= 265\nb24= 266\nYXQ= 267\nZW4= 268\nIGM= 269\naXQ= 270\naXM= 271\nIGI= 272\nbmQ= 273\nIGQ= 274\nIG0= 275\nIGg= 276\nIG8= 277\naW5n 278\nZXM= 279\nIHA= 280\nIHRv 281\nYW4= 282\nIGY= 283\nb3I= 284\nbGw= 285\nIEk= 286\nIGw= 287\nIHk= 288\nYXI= 289\nIGc= 290\nIHlvdQ== 291\nZWQ= 292\nIGFuZA== 293\nIGlu 294\nIG9m 295\nYXM= 296\nIG4= 297\nb20= 298\naWM= 299\nIHRoYXQ= 300\ndXM= 301\nZXQ= 302\ndmU= 303\nYWw= 304\nb3c= 305\nbGU= 306\nIGlz 307\nIGU= 308\nIGl0 309\nb3Q= 310\nJ3M= 311\nIGJl 312\naW9u 313\nIFQ= 314\nIHdo 315\nIEE= 316\nZW50 317\nIFM= 318\nIHJl 319\nYXk= 320\nIHdl 321\nIG9u 322\nZXJl 323\nIGhh 324\ndXQ= 325\nYWM= 326\naWQ= 327\naWc= 328\nb3M= 329\na2U= 330\ndmVy 331\naW0= 332\nINA= 333\nIFRo 334\nYW0= 335\nYWxs 336\nIGZvcg== 337\nZWw= 338\nY2g= 339\ncm8= 340\nIHRoaXM= 341\nIHN0 342\nIFc= 343\nIHU= 344\nYWQ= 345\nb3V0 346\naXI= 347\nbGQ= 348\nY3Q= 349\nIGs= 350\naWY= 351\nIGdv 352\nLi4= 353\n0L4= 354\naXRo 355\nbHk= 356\naHQ= 357\ncXU= 358\nIC0= 359\nIGRv 360\nIGo= 361\nIGhhdmU= 362\nIEI= 363\nIGFu 364\nIHdpdGg= 365\nIGFyZQ== 366\nIHI= 367\nIGRl 368\nIHNl 369\nIHNv 370\nIHY= 371\nc3Q= 372\naWxs 373\ndXI= 374\nIGxp 375\nIE0= 376\nZXN0 377\nb2Q= 378\nYWxseQ== 379\nJ3Q= 380\ndXN0 381\nIGFz 382\nIEM= 383\nY2U= 384\nIG1l 385\n0LA= 386\n0LU= 387\naWw= 388\nIEg= 389\nIHdhcw== 390\ndGVy 391\ndGg= 392\nIGNhbg== 393\nYW50 394\nIGNvbQ== 395\nb3Vy 396\naWdodA== 397\nIFk= 398\nYXRpb24= 399\nIEFuZA== 400\nb2w= 401\nIHNo 402\n0YI= 403\nb3A= 404\nc2U= 405\nIG5vdA== 406\nIFNv 407\nIG5l 408\ndW4= 409\nIGFi 410\nIGxpa2U= 411\nIGF0 412\nIEQ= 413\naWU= 414\nIGhl 415\nIGNvbg== 416\nIGNo 417\nb3Jl 418\nIGFs 419\nIG9y 420\nIHF1 421\nIE8= 422\nb21l 423\ncmE= 424\ndWw= 425\nIE4= 426\ncHA= 427\nIHlvdXI= 428\nb3VsZA== 429\nIFA= 430\nIGZy 431\nZ2U= 432\nZXJz 433\nJ3Jl 434\n0Lg= 435\nIHRoZXk= 436\nIHdoYXQ= 437\ndXNl 438\nIGFsbA== 439\nIFRoZQ== 440\nIEw= 441\nZXNz 442\nZW0= 443\nIGtu 444\nIGp1c3Q= 445\nYXJ0 446\nIHBybw== 447\ndmVyeQ== 448\ndW0= 449\nIGxv 450\nIOw= 451\nIG15 452\nb2s= 453\nIGV4 454\nYWI= 455\nIHRoZXJl 456\nIGJ1dA== 457\nIGtub3c= 458\nIHN1 459\nIEc= 460\n0YE= 461\nIEU= 462\nIG1h 463\n0L7Q 464\nIGVu 465\nIGFib3V0 466\nIEl0 467\naXN0 468\nIHdvcg== 469\ncmk= 470\naW5k 471\nIG9uZQ== 472\nYXRl 473\nYW5k 474\naW5r 475\nIGxl 476\nb3J0 477\nJ20= 478\nIEY= 479\naWNo 480\n0YA= 481\naWRl 482\nIGdldA== 483\nIG91dA== 484\nLi4u 485\nIHdpbGw= 486\n44E= 487\naXZl 488\n0L0= 489\nIGZyb20= 490\nYWlu 491\nIFdl 492\nIHVw 493\ncGU= 494\ncmVz 495\nY2E= 496\nIFI= 497\nIGlm 498\nIHBs 499\nIGRvbg== 500\nYWNr 501\nIDE= 502\nICI= 503\nIHRy 504\nIHVz 505\nIFdo 506\naXR5 507\nIEo= 508\nIFlvdQ== 509\nIGhlcmU= 510\naGVy 511\nIHNvbWU= 512\nb3Vn 513\nYWs= 514\nYXJk 515\nIGdvaW5n 516\nIHVu 517\nbWVudA== 518\nIHRoaW5r 519\nIHBl 520\nZW5k 521\nICg= 522\nY2F1c2U= 523\nIHRpbQ== 524\nYXN0 525\nw6k= 526\nIG91cg== 527\nIHdhbnQ= 528\nYW1l 529\naWVz 530\nIOs= 531\ndWQ= 532\naW5l 533\nIHJlYWxseQ== 534\nIHRl 535\nIHNlZQ== 536\nY2k= 537\nIGJ5 538\nc28= 539\ndXJl 540\nb3Nl 541\nIFs= 542\nYXJl 543\nIG1vcmU= 544\nYWg= 545\nb25l 546\nY2s= 547\nb3BsZQ== 548\n0LDQ 549\nIHRoZW4= 550\nIHRoaW5n 551\nIHRoZW0= 552\ndmVu 553\nb3VuZA== 554\nb3N0 555\nb25n 556\nZWN0 557\nIHJpZ2h0 558\nYWc= 559\nIGludA== 560\nIHBlb3BsZQ== 561\nIHdoZW4= 562\nb3Vz 563\ncGw= 564\nIHRpbWU= 565\nIGlt 566\nIHdobw== 567\nIDI= 568\nYXA= 569\nIGJlY2F1c2U= 570\naGluZw== 571\nIG5v 572\naWNl 573\nIGxvb2s= 574\nIGhhcw== 575\nIHdvdWxk 576\nIGhvdw== 577\nYWN0 578\nIGZl 579\nbnQ= 580\nb3VnaA== 581\nIHBy 582\nIEJ1dA== 583\nIHNheQ== 584\n0YM= 585\nIG5vdw== 586\nIG1hbg== 587\nIHZlcnk= 588\nIHdvcms= 589\naXo= 590\nIEs= 591\naXY= 592\naXR0 593\nIGFy 594\nZXA= 595\nIGNs 596\nIHdoaWNo 597\nIGNv 598\nYW5z 599\nJ3Zl 600\nIHNh 601\nZmY= 602\nJ2xs 603\nIGFueQ== 604\nIGFjdA== 605\nIHll 606\nYmVy 607\nYWNo 608\nYWdl 609\ncGVy 610\nIGFsc28= 611\nZmVy 612\nIHRoZXNl 613\nIGFk 614\n0LXQ 615\ndGhlcg== 616\nYWNl 617\naWNr 618\nYWtl 619\ncmVhdA== 620\naXJl 621\ndWU= 622\nIGFn 623\nIFU= 624\ndWNo 625\naW9ucw== 626\ncnk= 627\nMDA= 628\nbmE= 629\nIGRpZA== 630\nIHF1ZQ== 631\nIGhhZA== 632\nIGV2ZXJ5 633\nIEhl 634\nIGxh 635\nIHdheQ== 636\nIHNw 637\nYmxl 638\nIFRoaXM= 639\nYXNz 640\nIHRoZWly 641\naXRl 642\nIG5lZWQ= 643\nIHBhcnQ= 644\nIHdlcmU= 645\nIGJhY2s= 646\naXA= 647\nb3du 648\nb21ldA== 649\nYmU= 650\nYXNl 651\nIG1ha2U= 652\naXJzdA== 653\naWE= 654\nZW5jZQ== 655\nYW5n 656\nYW5r 657\nIGdvdA== 658\nIHByZQ== 659\nIGNvbnQ= 660\nIG90aGVy 661\ncHQ= 662\nIFRoYXQ= 663\nb2c= 664\nIGdvb2Q= 665\nIGludG8= 666\nYWxr 667\nIGJlZW4= 668\nIGFt 669\nIG92ZXI= 670\ndWFsbHk= 671\nIOI= 672\n7J0= 673\nIHVuZA== 674\naGU= 675\nd2F5 676\nIGdy 677\n0Yw= 678\nIGRpZg== 679\nIHBlcg== 680\n0Y8= 681\nIElu 682\nIHR3 683\nb25k 684\nYXJz 685\naW50 686\nb3Jt 687\nIGxvdA== 688\nIHdoZXJl 689\nIMM= 690\nIFY= 691\nIHNvbWV0 692\n0Ls= 693\nZW5z 694\nIGd1 695\nIGFj 696\ndWc= 697\n0Ys= 698\nxLE= 699\nIGZpcnN0 700\ncmVl 701\nIGhpcw== 702\naXR0bGU= 703\nIGltcA== 704\nIG1v 705\nYXY= 706\nIGxpdHRsZQ== 707\nIFdoYXQ= 708\nIG11Y2g= 709\nIHo= 710\nIOo= 711\nYWJsZQ== 712\nINC/ 713\nIHBv 714\nIGNvbXA= 715\nbmU= 716\nIGRpcw== 717\nIGxldA== 718\nYW5jZQ== 719\nIGhlcg== 720\nIHRoaW5ncw== 721\nIHN0YXJ0 722\ndWx0 723\nIGFwcA== 724\nIHJlcw== 725\nIGZv 726\nIGNvdWxk 727\nIGludGVy 728\nIHRob3Nl 729\nIGRlcw== 730\nIHdlbGw= 731\nIHR3bw== 732\nIGtpbmQ= 733\neHQ= 734\ncmVzcw== 735\nZWx5 736\nw6Q= 737\nIGJy 738\nIHRocg== 739\nINCy 740\nIGk= 741\naXNo 742\nIGRpZmZlcg== 743\nIHJv 744\nIFN0 745\nIHNvbWV0aGluZw== 746\nIHRha2U= 747\nIGJv 748\neXM= 749\nIHNoZQ== 750\nIHRhbGs= 751\nbG8= 752\n0Yc= 753\nIGV2ZW4= 754\n0Lo= 755\n44A= 756\nINC9 757\nIGJ1 758\nIElm 759\nIGRvd24= 760\nIENo 761\nYWRl 762\nYXRpb25z 763\nIHVzZQ== 764\nb3Jk 765\nIG9mZg== 766\nIGFjdHVhbGx5 767\nIHNwZQ== 768\nZHU= 769\nYXRlZA== 770\nYXRlcg== 771\nb3Nz 772\nbmluZw== 773\nw7w= 774\nIGRvZXM= 775\nINGB 776\nIG5ldw== 777\nIGJldA== 778\ndmVs 779\nY2Vzcw== 780\ncGxl 781\nIGhhcHA= 782\ndGluZw== 783\nb25uYQ== 784\nIGVz 785\nIGRheQ== 786\nIG9ubHk= 787\naWdu 788\na2F5 789\nc2Vs 790\nZW50cw== 791\nb3VudA== 792\naWxk 793\naWxl 794\nIHNj 795\nIGhpbQ== 796\nIGFnYWlu 797\ndmluZw== 798\nIGdvbm5h 799\nIGNvbW0= 800\nIGhlbA== 801\nb3RoZXI= 802\nIGtl 803\naWNhbA== 804\nIDM= 805\nIGVs 806\nIHRocm91Z2g= 807\nIGNvbWU= 808\nYXJr 809\nZGF5 810\naWVy 811\nw7M= 812\nIHRoYW4= 813\nIFRoZXk= 814\nIG1heQ== 815\nIHNlcg== 816\n7ZU= 817\nIGNhbGw= 818\nIGRpZmZlcmVudA== 819\nIHNob3VsZA== 820\nIFRoZXJl 821\nYXJ5 822\nIE5vdw== 823\n44I= 824\ndGhpbmc= 825\nd2U= 826\nb3J5 827\nZnRlcg== 828\nIHB1dA== 829\nb3Jz 830\naWFs 831\n64s= 832\nIHVuZGVy 833\nIGluYw== 834\nIFll 835\ndWI= 836\nZm9ybQ== 837\nIHZpZGU= 838\n4Lg= 839\ndmVycw== 840\nIGZlZWw= 841\nw6E= 842\nb2R5 843\nZnQ= 844\nZm9yZQ== 845\nIGVt 846\nZ2V0 847\nIHNhaWQ= 848\naXRpb24= 849\nIHJlYw== 850\naW91cw== 851\nYXRjaA== 852\nIHRyeQ== 853\nIGhlbHA= 854\nIHNob3c= 855\n0LQ= 856\nIGJpdA== 857\ndWxs 858\n0LI= 859\n0YLQvg== 860\nZ3I= 861\nIHBsYXk= 862\naWZl 863\nYWls 864\nIFllYWg= 865\nIHF1ZXN0 866\nIG1hbnk= 867\nIHBlcnM= 868\nIGdyZWF0 869\nw60= 870\nIGVzdA== 871\nbmc= 872\nIOKZ 873\ndHk= 874\nbGE= 875\nIE9o 876\nINc= 877\n4K4= 878\nIEJl 879\nYWR5 880\nIG1vc3Q= 881\nY3Rpb24= 882\nIE5v 883\nIGRvaW5n 884\nIGJlaW5n 885\nIHRvbw== 886\nY2Vz 887\nIGJs 888\nLiI= 889\nIHJlbQ== 890\naXNz 891\nb25z 892\nPj4= 893\ncnU= 894\nd24= 895\nb250 896\naWI= 897\nZWxs 898\nIHNt 899\nb3Ro 900\ndWFs 901\nID4+ 902\nIHBo 903\nbGVz 904\nb2M= 905\nZnVs 906\nIHNlYw== 907\naXNl 908\nIGFkZA== 909\naWdo 910\nZXJ0 911\nIHNhbWU= 912\n4oA= 913\nIG1lYW4= 914\nIGZpbmQ= 915\nZWs= 916\nIGVuZA== 917\nLS0= 918\n0Lw= 919\nIHN0aWxs 920\nYXo= 921\nICc= 922\nIG1pbg== 923\nIHllYXJz 924\ndXJu 925\nIGFyb3VuZA== 926\nc2VsZg== 927\nIHdy 928\nYnM= 929\nb3VnaHQ= 930\nIOKZqg== 931\nIGZs 932\nYW5nZQ== 933\nIGFmdGVy 934\nIHBvaW50 935\nbWVy 936\ndmVk 937\nIGxvbmc= 938\nb3k= 939\n5Lg= 940\nIGNy 941\nd2F5cw== 942\nIHN5 943\nIHRyYQ== 944\nIDIw 945\nYXZl 946\nIGNoZQ== 947\nIGVudA== 948\nIGJlZm9yZQ== 949\ncGg= 950\nIGF0dA== 951\naWFu 952\naWx5 953\nIHBlcnNvbg== 954\nIGJpZw== 955\nIHNjaA== 956\nIHJlYWw= 957\nIG5leHQ= 958\nIGxvdmU= 959\nIHZpZGVv 960\nIExldA== 961\nIGZpbg== 962\nIG1haw== 963\naWJsZQ== 964\nIHRvZGF5 965\nZXJt 966\nIEFs 967\nb3dlcg== 968\nYW5u 969\naXg= 970\nIHBhcg== 971\nIHN0dWQ= 972\nw7Y= 973\nIGltcG9ydA== 974\ndGU= 975\nIGdpdmU= 976\ndmVz 977\nIGRpZQ== 978\nIGRlYw== 979\nIHRlbGw= 980\nINC6 981\n0YHRgg== 982\nIHdoeQ== 983\naWNhbGx5 984\naWN0 985\ncmVk 986\nIGJhcw== 987\nIHN1cmU= 988\nIGJlbA== 989\nYXRpbmc= 990\nIHRhaw== 991\nIHNldA== 992\nIGxpZmU= 993\nIGRpZG4= 994\n2Kc= 995\nb2I= 996\ndW5k 997\nYXRo 998\nIG9w 999\nINC+ 1000\nYWl0 1001\nIHdvcmxk 1002\nIHN1cHA= 1003\naW8= 1004\nIGNvdXI= 1005\nINC4 1006\nd2FyZA== 1007\n0LXQvQ== 1008\nIGFsd2F5cw== 1009\ndXA= 1010\nIGhhbmQ= 1011\nIEhvdw== 1012\nY2lhbA== 1013\nIGNvbnM= 1014\nINE= 1015\nIGluZA== 1016\nIDQ= 1017\nIEFz 1018\nIGZ1bg== 1019\namVjdA== 1020\nIGltcG9ydGFudA== 1021\nIHN1cg== 1022\nZXc= 1023\nYXRlcw== 1024\nIDU= 1025\nIGRp 1026\nIG1hZGU= 1027\nIGlucw== 1028\nIGFzaw== 1029\nIGV0 1030\nIG51bQ== 1031\nIGNhcg== 1032\nIE9rYXk= 1033\nIHNpbQ== 1034\naWs= 1035\nIGxhc3Q= 1036\nIEdv 1037\nIG11cw== 1038\nIHJlbA== 1039\ndWxhcg== 1040\ntOw= 1041\nIFdlbGw= 1042\ncGVjdA== 1043\nIFRoYW5r 1044\nIHRocmVl 1045\nw6M= 1046\n44M= 1047\nIGludg== 1048\nIGdlbg== 1049\nbGlj 1050\nIGhhcHBlbg== 1051\n64o= 1052\naWVu 1053\nZXZlcg== 1054\n0L7Qsg== 1055\nIHN0cg== 1056\nIEFsbA== 1057\nIGluc3Q= 1058\nIOKA 1059\nIGRlZg== 1060\nIHNs 1061\nIG1pZ2h0 1062\ndW5n 1063\nIHllYXI= 1064\nIG93bg== 1065\nIGtlZXA= 1066\nYm9keQ== 1067\nZGVy 1068\nINGC 1069\nINC0 1070\nIGFub3RoZXI= 1071\nIG1vZA== 1072\nIGV2 1073\nIGd1eXM= 1074\nIGFibGU= 1075\nw6Nv 1076\ncXVl 1077\naWRlbnQ= 1078\nIFllcw== 1079\nIGl0cw== 1080\nIHBsYWNl 1081\nIHByb2R1 1082\nYXJu 1083\nINC8 1084\nIHJlcA== 1085\nIGV4cGVy 1086\nIGZhbQ== 1087\naXRpZXM= 1088\naWZpYw== 1089\nIGhpZ2g= 1090\naWVk 1091\nb29s 1092\naWV3 1093\n0LXRgg== 1094\ncmVu 1095\nIGRvbmU= 1096\nIC4uLg== 1097\n64qU 1098\nc3RlbQ== 1099\nIFNl 1100\nIGJldHRlcg== 1101\nY29tZQ== 1102\nIGRlbA== 1103\nIHR5 1104\nIHVt 1105\nIGhv 1106\nIEFu 1107\nIG1vbg== 1108\naW5ncw== 1109\nIHNr 1110\nIG9i 1111\nY29t 1112\nYmxlbQ== 1113\nb3Bl 1114\nc3RhbmQ= 1115\nJ2Q= 1116\nbWVudHM= 1117\nIGVsZQ== 1118\nIElz 1119\nIGRh 1120\nIHJlZw== 1121\nbGVhc2U= 1122\naWtl 1123\nYWxz 1124\naXpl 1125\n6rA= 1126\nIGNhcmU= 1127\nIG5ldmVy 1128\n7J20 1129\nZXNl 1130\nIG1ldA== 1131\nb2xvZw== 1132\nIFdoZW4= 1133\ndWNr 1134\n0LXRgA== 1135\nIMOp 1136\nIGRhdA== 1137\nw6c= 1138\nIGV4YW0= 1139\naWxpdHk= 1140\nIGRldA== 1141\nY3Jp 1142\nIHVzZWQ= 1143\nIERv 1144\nIHRyYW5z 1145\nZWc= 1146\ndGVu 1147\n0Y4= 1148\nY3Vz 1149\nIHNlY29uZA== 1150\nIGJlc3Q= 1151\nIGhhcmQ= 1152\nIGlkZQ== 1153\nIHByb2JsZW0= 1154\n6rM= 1155\nIFVu 1156\n0YU= 1157\nIM4= 1158\nIHdhdGNo 1159\nIFNo 1160\nYXR0ZXI= 1161\nIHByZXQ= 1162\nIGRlcg== 1163\nIGNvdXJzZQ== 1164\nxZ8= 1165\nYXRpdmU= 1166\naWNz 1167\nIHF1ZXN0aW9u 1168\ndXRl 1169\n7Jc= 1170\nIEZvcg== 1171\nYXRoZXI= 1172\nIGNvbA== 1173\naWVuZA== 1174\nIO0= 1175\nIFo= 1176\nIGRvZXNu 1177\nYXJjaA== 1178\nIGludGVyZXN0 1179\nIHBvbA== 1180\nIGNvcg== 1181\naWVuY2U= 1182\nIHByZXM= 1183\nIGVhY2g= 1184\nIHN5c3RlbQ== 1185\nIGZhY3Q= 1186\naWVs 1187\nYWJseQ== 1188\nIGVy 1189\nIHJ1bg== 1190\nIOyd 1191\nIHRvcA== 1192\nbmVy 1193\nIHRob3VnaHQ= 1194\nIGVhcw== 1195\naWVudA== 1196\nIGNyZQ== 1197\n0Yg= 1198\nIGNvbW11bg== 1199\neWU= 1200\ncmVhZHk= 1201\nbGxvdw== 1202\nIGV2ZXJ5dGhpbmc= 1203\nb21t 1204\nIG1lZA== 1205\nmpQ= 1206\nIGNvdW50 1207\naXRz 1208\nIGNvbXBs 1209\naGlw 1210\n2YQ= 1211\nb29r 1212\nIHRvZ2V0 1213\nIHRvZ2V0aGVy 1214\nYW1w 1215\nIGdhbWU= 1216\nIGFscmVhZHk= 1217\n0LDQuw== 1218\nIGNhbGxlZA== 1219\nYWxl 1220\nxYI= 1221\nIE15 1222\nIHVuZGVyc3RhbmQ= 1223\nIGRy 1224\nIG1vbQ== 1225\naXRlZA== 1226\n0L7Quw== 1227\nIHVzaW5n 1228\nenk= 1229\nIG51bWJlcg== 1230\n44CB 1231\nY2Vk 1232\nIGNsZQ== 1233\n0L3Qvg== 1234\n64uk 1235\naW5jZQ== 1236\nIGxvb2tpbmc= 1237\nIHByZXR0eQ== 1238\nIHByb2I= 1239\nIFNoZQ== 1240\nIHZl 1241\nIGdldHRpbmc= 1242\nIHdlZWs= 1243\nIGVmZg== 1244\ndWZm 1245\nYWly 1246\ndWVz 1247\nZXJu 1248\nIFE= 1249\nb3Vw 1250\nZW50aW9u 1251\nIHNpZGU= 1252\n0L7QvA== 1253\nIGZvcm0= 1254\nIGJ1cw== 1255\nIGFzcw== 1256\nIGVk 1257\nYXNvbg== 1258\nd2Vlbg== 1259\n4oCm 1260\nIHR1cm4= 1261\nIGN1cg== 1262\nIGNvbGw= 1263\nIGRpcmU= 1264\nIEdvZA== 1265\nIDEw 1266\nIGVxdQ== 1267\nINCx 1268\nIG9wZW4= 1269\nIHN1Y2g= 1270\naXJk 1271\n0LDQug== 1272\nIGVhcg== 1273\nxJk= 1274\nZ2Fu 1275\nIHBhcnRpYw== 1276\nIGZyaWVuZA== 1277\nIGV4cA== 1278\nIGV4dA== 1279\nIGhvbWU= 1280\nIHdhdGVy 1281\nIE9u 1282\n0YLRjA== 1283\nb3Jr 1284\nINC/0YA= 1285\nIG1vdmU= 1286\nbmVzcw== 1287\nZW5zZQ== 1288\naG8= 1289\nIGNoYXI= 1290\nY28= 1291\naW5z 1292\nIGJvdGg= 1293\nIDE5 1294\nIGdyYQ== 1295\nIGJldHdlZW4= 1296\n4bs= 1297\nIOyV 1298\nYXNo 1299\nIFJl 1300\nYWk= 1301\nYWx0aA== 1302\ndXJlcw== 1303\nZW1iZXI= 1304\nIGF2 1305\nIHZlcg== 1306\nw6o= 1307\nb25leQ== 1308\nIHRoYW5r 1309\nIG1heWJl 1310\ndWM= 1311\naW1l 1312\n6rOg 1313\nIGF3YXk= 1314\nIG5hbWU= 1315\nb3VzZQ== 1316\nIGFjYw== 1317\nIG11c2lj 1318\nIGNoYW5nZQ== 1319\nIHBhc3M= 1320\nZ2Vy 1321\nIGJ1aWxk 1322\nIHZhbA== 1323\naW5lc3M= 1324\nYW55 1325\nIGZldw== 1326\ntOs= 1327\ndGE= 1328\nIGxpc3Q= 1329\nw6U= 1330\nIG9sZA== 1331\nIOye 1332\nIHNvcnQ= 1333\nIG1lbQ== 1334\nIGNh 1335\nY2VwdA== 1336\nIGdlbmVy 1337\nIHllYWg= 1338\nIHdoaWxl 1339\nIGFueXRoaW5n 1340\ncmlj 1341\nZ3JhbQ== 1342\nIGVpbg== 1343\nY3k= 1344\ndXJpbmc= 1345\nIERl 1346\nIHBvd2Vy 1347\nIGNvbWluZw== 1348\nIHdvcmQ= 1349\nIC0t 1350\nIGJlbGll 1351\nIGZvdW5k 1352\ndG8= 1353\n0L8= 1354\nIG1lYW5z 1355\nIGluZm9ybQ== 1356\nINg= 1357\nINGH 1358\nIHNtYWxs 1359\nMDAw 1360\nIGNhbWU= 1361\nIO2V 1362\nd2g= 1363\nIHdvcmtpbmc= 1364\nIGV4YW1wbGU= 1365\nIHBvcw== 1366\nIGRlcA== 1367\n6rI= 1368\n5Lo= 1369\nb3Rl 1370\nIGRlbQ== 1371\n7Kc= 1372\ndHM= 1373\nIHZhcg== 1374\nYXV0 1375\nIHRyaQ== 1376\nY2hu 1377\nIGhlYWQ= 1378\nIHdob2xl 1379\n15k= 1380\nemU= 1381\nIHRyeWluZw== 1382\nIHRlbQ== 1383\nIGNvdQ== 1384\nZXRz 1385\nIDY= 1386\nIGZpbA== 1387\ndmVsb3A= 1388\nIGNhc2U= 1389\n4K8= 1390\nIHByb2JhYmx5 1391\nIG9rYXk= 1392\nIHBsYW4= 1393\nIHNpdA== 1394\nIHNjaG9vbA== 1395\nIFRoZW4= 1396\nuOs= 1397\nbWU= 1398\nIHByb2Nlc3M= 1399\nIGZhcg== 1400\nIHJlYWQ= 1401\nIHBvc3M= 1402\nIGJyZQ== 1403\nIHNvbA== 1404\naWNodA== 1405\nIHN1cHBvcnQ= 1406\nIFRv 1407\nZXJ0YWlu 1408\nIHN0YXJ0ZWQ= 1409\nIGNhcA== 1410\nIGxlZnQ= 1411\nIGRhdGE= 1412\nIHRpbWVz 1413\n0LXQuw== 1414\nIHdhbnRlZA== 1415\n0LDQvQ== 1416\nIHRhbGtpbmc= 1417\nIGlzdA== 1418\nIGhhdmluZw== 1419\ndW1w 1420\nIGNvbnRpbg== 1421\nIHN1Yg== 1422\nINC3 1423\ncHI= 1424\n64uI 1425\naW5h 1426\nxbw= 1427\nIGNyZWF0 1428\nb2Rl 1429\n15U= 1430\n5pg= 1431\nISE= 1432\nIHRlcm0= 1433\naXNt 1434\n0L7QtA== 1435\nIEJlY2F1c2U= 1436\nIHdlbnQ= 1437\naWRlcg== 1438\nIHByb3Y= 1439\nIGNoaWxk 1440\nIGRlbg== 1441\nIGxpZ2h0 1442\nYnI= 1443\ns9C+ 1444\nb2g= 1445\nIGJvb2s= 1446\nINk= 1447\ndXRpb24= 1448\nIEp1c3Q= 1449\nZW5l 1450\nIGZvdXI= 1451\nIHZpcw== 1452\n6rCA 1453\nIGhvcGU= 1454\nIG1ha2luZw== 1455\nIExl 1456\n7JU= 1457\nIG9wcA== 1458\nYXU= 1459\nIG1vbmV5 1460\nIHByb2dyYW0= 1461\nw6g= 1462\nIHN0YW5k 1463\nSU4= 1464\nIHNpZ24= 1465\nIGxlYXJu 1466\nw6A= 1467\nIERvbg== 1468\nIHRlYW0= 1469\nINC90LA= 1470\nbHVk 1471\nIHJlc3Q= 1472\naWNlcw== 1473\n5pw= 1474\nINGA 1475\nIGF1dA== 1476\nIGxlYWQ= 1477\nYXRpb25hbA== 1478\nZGU= 1479\nZ3k= 1480\nIG5pY2U= 1481\nIGRhcw== 1482\nIGRpc3Q= 1483\nIGh1bQ== 1484\nIE9uZQ== 1485\n5og= 1486\nIGNvbWVz 1487\nIGpv 1488\nIGNlbnQ= 1489\nIGV4cGw= 1490\nIG1hcms= 1491\ncmVlbg== 1492\nbGVk 1493\nZ2lu 1494\n7JqU 1495\nIGxldmVs 1496\nIGNvbmY= 1497\ndXNo 1498\nIGRldmVsb3A= 1499\nIHRlc3Q= 1500\nZW5n 1501\ndmlvdXM= 1502\nYXR1cmU= 1503\n0LXQvA== 1504\ncmV0 1505\nIGpl 1506\nIHN0dWZm 1507\nIGNsYXNz 1508\nb3dz 1509\nIOq3 1510\nIHNp 1511\nIGxlcw== 1512\ncm9w 1513\n55o= 1514\nIHBvcg== 1515\nIHdhcg== 1516\n7JeQ 1517\nIGV2ZXJ5b25l 1518\nIGdl 1519\nIGNoZWNr 1520\nb3R0 1521\nIHNpbmc= 1522\nIGFydA== 1523\nIGZvbGxvdw== 1524\nIDIwMQ== 1525\nIEZy 1526\nYWlz 1527\n7JY= 1528\nzrE= 1529\n5bA= 1530\nIMOg 1531\naW1lcw== 1532\nIHJldA== 1533\nIGNoYW5n 1534\nIHB1Yg== 1535\nIGluZg== 1536\nIHRlY2hu 1537\nYWRh 1538\naXZlcw== 1539\nIGJlaA== 1540\nIGxvb2tz 1541\n44CC 1542\n0Lc= 1543\nIFdoeQ== 1544\nIGVub3VnaA== 1545\nIGJyYQ== 1546\naXRjaA== 1547\n5Ls= 1548\nIGFkdg== 1549\n0LE= 1550\nIHdpdGhvdXQ= 1551\nd2Vy 1552\nbWVyaWM= 1553\nZGVu 1554\nIGNvbXBsZXQ= 1555\nIGlkZWE= 1556\ndGVycw== 1557\nb2Nr 1558\nIGRlZmlu 1559\nIGV2ZXI= 1560\nIGds 1561\nIG9uY2U= 1562\nIGJyaW5n 1563\nIHNheWluZw== 1564\nIGFucw== 1565\nIGhlYXI= 1566\nbmVjdA== 1567\nIGxlc3M= 1568\nZ28= 1569\ncmVhbQ== 1570\nYWRv 1571\n7J4= 1572\nIG1pbmQ= 1573\nZW50ZQ== 1574\nIGZ1bGw= 1575\nIGJhZA== 1576\nIHdvbQ== 1577\nIHNvbWVvbmU= 1578\nIGR1 1579\nIHdvbg== 1580\nIGNvbnRybw== 1581\nb3J0dW4= 1582\nIGhlYWx0aA== 1583\nIGNobw== 1584\nIEFy 1585\nIGNvbmM= 1586\nIGluZm9ybWF0aW9u 1587\nIHN0b3A= 1588\nYXR0 1589\nYXRlbHk= 1590\n5L0= 1591\nIGdyb3Vw 1592\nINGD 1593\nIHF1aXRl 1594\nIHJlc3A= 1595\nRVI= 1596\ndWdodA== 1597\n6rg= 1598\nbWFu 1599\naXplZA== 1600\nIEJy 1601\nIHJlbWVtYmVy 1602\nIGZhbWlseQ== 1603\nIGJ1c2luZXNz 1604\nYXc= 1605\nIHNwZWM= 1606\nIGF1 1607\nIE9y 1608\nxIU= 1609\nIHNlZW4= 1610\nIGxhcg== 1611\nIDc= 1612\nZ2c= 1613\nYmVycw== 1614\nIGRyYQ== 1615\nIG1vbnRo 1616\nIHNheXM= 1617\nIGlzcw== 1618\nIGxpdmU= 1619\nIGxpbmU= 1620\nIG1vbWVudA== 1621\nIGV4Yw== 1622\nZWxz 1623\nIHNvdW5k 1624\nIGNvb2w= 1625\nIGxvYw== 1626\nIGNlcnRhaW4= 1627\nIGRyaQ== 1628\n0L7Rgg== 1629\nYW1lcw== 1630\nIG11c3Q= 1631\nbnk= 1632\n0LjRgg== 1633\nIGtpZA== 1634\nIGluY2x1ZA== 1635\n7J2E 1636\nYXRvcg== 1637\nxJ8= 1638\naGE= 1639\nYXJlZA== 1640\nIHNlZW0= 1641\n0Lk= 1642\n7IQ= 1643\nIGVsc2U= 1644\nIOyg 1645\naXJs 1646\nIDg= 1647\nIHZv 1648\nIHF1ZXN0aW9ucw== 1649\naW5lcw== 1650\nZWU= 1651\nw7xy 1652\nIEFtZXJpYw== 1653\nIHN0b3J5 1654\nIHNlcnY= 1655\ndmVybg== 1656\nYWdlcw== 1657\nbGFuZA== 1658\nIOKAkw== 1659\nZXJh 1660\nIENhbg== 1661\nIHBvcA== 1662\nZXRoZXI= 1663\nIG5h 1664\nIG9yZGVy 1665\nIG1ha2Vz 1666\nIHNpbmNl 1667\nY29u 1668\nY3Rvcg== 1669\nIHRob3VnaA== 1670\nIHByb2R1Y3Q= 1671\n0LvQuA== 1672\nIGxlZw== 1673\nIG1lZXQ= 1674\nYWxm 1675\n0YHRjw== 1676\ndW5jaA== 1677\naXRlcg== 1678\nb3Zl 1679\n15XX 1680\naWV0 1681\n0LDQvA== 1682\naXRhbA== 1683\nIHN1cGVy 1684\nbGluZw== 1685\nIHBheQ== 1686\nIHBhcmE= 1687\nIGpvYg== 1688\nIEhlcmU= 1689\nIHN3 1690\na3M= 1691\ncHRpb24= 1692\nbWE= 1693\nIGJlbGlldmU= 1694\nrOs= 1695\nIHdhaXQ= 1696\n0L7QuQ== 1697\nIHVudA== 1698\nIHF1aWNr 1699\naHI= 1700\nINGN 1701\nIFBybw== 1702\nIG1lbg== 1703\n4Lk= 1704\nIGRheXM= 1705\nIGdvZXM= 1706\nIHNwZWFr 1707\nIEF0 1708\nZW1lbnQ= 1709\nIG1pc3M= 1710\nIGF3 1711\nIGRlc2lnbg== 1712\nIHByb2plY3Q= 1713\n0L7RgA== 1714\naWo= 1715\nYW50cw== 1716\nYXRz 1717\nIENocg== 1718\nIDk= 1719\nIGN1dA== 1720\nIHJlcXU= 1721\nINC90LU= 1722\nIE5vdA== 1723\nYXN0ZXI= 1724\nIG1pbGw= 1725\nIHBhcnRpY3VsYXI= 1726\nIHBpZQ== 1727\nIHN0dWRlbnRz 1728\nIGZpdmU= 1729\nb3Vu 1730\nIE5l 1731\nIGdp 1732\nIHBhcw== 1733\nIGZyZWU= 1734\nIFNw 1735\nbGljaA== 1736\nIHByb2Y= 1737\nIGVuZw== 1738\nIHByb3Q= 1739\nIExpa2U= 1740\nb3NlZA== 1741\nIGNvbm5lY3Q= 1742\nYXBw 1743\nIOun 1744\naXRpbmc= 1745\nIGJsbw== 1746\nIGxvcw== 1747\naXN0cw== 1748\nIGV4cGVyaWVuY2U= 1749\ncmVudA== 1750\nIHN0YXk= 1751\nIGZvb2Q= 1752\ndG9u 1753\ncnVjdA== 1754\nIGhpc3Q= 1755\ndmlldw== 1756\naW5pbmc= 1757\nbW9zdA== 1758\naXZlcnM= 1759\nYm8= 1760\nIFRy 1761\nZ2Vu 1762\nIHBsZWFzZQ== 1763\nIGNvbW11bml0eQ== 1764\nIGNl 1765\nQU4= 1766\nbm8= 1767\nIGJvZHk= 1768\nIGhvdXI= 1769\nIHZlcnM= 1770\n4bo= 1771\nY2Vy 1772\nIOqw 1773\nIHJlYXNvbg== 1774\nIFJpZ2h0 1775\nIGxhdGVy 1776\nz4Q= 1777\nIGhvdXNl 1778\nIFg= 1779\n0L7QvQ== 1780\nIHN0YXRl 1781\nZmlj 1782\n5aQ= 1783\nxZs= 1784\naWVsZA== 1785\nIHByaQ== 1786\nIHBhc3Q= 1787\nIHdhbGs= 1788\nb2xvZ3k= 1789\nZXJpbmc= 1790\nYW5uYQ== 1791\nIHRlcg== 1792\nIGhvbGQ= 1793\nIG9yZ2Fu 1794\nYmVu 1795\nzr8= 1796\nw7Nu 1797\nIGVmZmVjdA== 1798\nIHlvdXJzZWxm 1799\nIHBsdXM= 1800\nYWo= 1801\nYW5kbw== 1802\ndXJhbA== 1803\nIHJvb20= 1804\nbGVjdA== 1805\n6rKM 1806\nPyI= 1807\nc2lkZQ== 1808\nIGJlY29tZQ== 1809\n0YY= 1810\nIMI= 1811\nb29k 1812\nIGNvbnN0 1813\nIG5pZ2h0 1814\ndXRlcw== 1815\n0LY= 1816\nIGJyZWFr 1817\nIHBhaW4= 1818\nIHN0ZXA= 1819\naXJlZA== 1820\nIG5vdGhpbmc= 1821\nIHVudGls 1822\n0ZY= 1823\n0LDQsg== 1824\n2Yo= 1825\nIGR1cmluZw== 1826\n7KeA 1827\nbGVzcw== 1828\nb2xs 1829\n0L3Riw== 1830\nzrk= 1831\nZmVjdA== 1832\naXZlcg== 1833\nj4Q= 1834\naXRoZXI= 1835\neWluZw== 1836\nIGJlZ2lu 1837\n15nX 1838\naXZpZA== 1839\nIMOn 1840\nIHNhbA== 1841\nIHRh 1842\nIHBvdA== 1843\nICQ= 1844\nIG1hcg== 1845\nIGNsZWFy 1846\nIGZhY2U= 1847\nIGdyb3c= 1848\nICo= 1849\nIGluc2lkZQ== 1850\nIGZyaWVuZHM= 1851\nIGxlYXZl 1852\nZW5u 1853\nIGVhc3k= 1854\nIGFyZWE= 1855\nYWxpdHk= 1856\nb3Vk 1857\nIGVhdA== 1858\n2YY= 1859\nIHB1cg== 1860\nb3Ju 1861\nIHNhdw== 1862\nIGFuc3dlcg== 1863\nIGZyb250 1864\nIGJlYXV0 1865\nvOs= 1866\nIG1hdHRlcg== 1867\nIHNvbg== 1868\nIE5ldw== 1869\nIHJlc3VsdA== 1870\naWRlcw== 1871\nY2hl 1872\nIGZ1dA== 1873\ncHM= 1874\nIGZvY3Vz 1875\nIGludGVyZXN0aW5n 1876\n5aU= 1877\nIGFw 1878\nIi4= 1879\nIGNyZWF0ZQ== 1880\n0L7RgQ== 1881\nIHByZXNz 1882\ncm9zcw== 1883\nIHBpY2s= 1884\nbGluZQ== 1885\nIHRvb2s= 1886\nIE1heQ== 1887\ncm93 1888\nIGljaA== 1889\nmOs= 1890\nIHJlZg== 1891\nIG1vcg== 1892\ncmFjdA== 1893\nYXJlbnQ= 1894\nQVI= 1895\nIGV4YWN0 1896\nIHNwYWNl 1897\nd29yaw== 1898\n0L3QuA== 1899\nIGJpcg== 1900\nIGRldg== 1901\n0LM= 1902\nIHRvbGQ= 1903\nIHB1YmxpYw== 1904\nY2lhbGx5 1905\nIHZpZXc= 1906\nIEhleQ== 1907\nbWVk 1908\nbGxv 1909\nY2M= 1910\nIGZhYw== 1911\nIGNvdXBsZQ== 1912\nIGhlYXJ0 1913\nbGVy 1914\nIHJlYWR5 1915\nIGFsbW9zdA== 1916\nYXJpbmc= 1917\nIGhhbGY= 1918\nIE1l 1919\nYXZvcg== 1920\naXF1ZQ== 1921\nIGNoYXJhYw== 1922\nIHByYWN0 1923\nT04= 1924\nYW5l 1925\nIGls 1926\n0L3QsA== 1927\nIHZp 1928\nbGlzaA== 1929\naGVhZA== 1930\nIGxlYXN0 1931\nIGJhc2ljYWxseQ== 1932\nYXNlZA== 1933\ncmlnaHQ= 1934\nIHlldA== 1935\nIHRha2luZw== 1936\nIGNvdW50cnk= 1937\nIHdpbg== 1938\nIGlzbg== 1939\nIHBvc3NpYmxl 1940\nIGNhbQ== 1941\nIGluY3Jl 1942\nIHBhdA== 1943\nIHdhbm5h 1944\nIGNvbnNpZGVy 1945\nIGFicw== 1946\nIHdpdGhpbg== 1947\nIGh1bWFu 1948\nIHRoaW5raW5n 1949\nIG9o 1950\noZw= 1951\nIHF1aQ== 1952\nYXNlcw== 1953\nIDA= 1954\naXRlbHk= 1955\nIGtpbGw= 1956\nIG1pbA== 1957\nIGludmVzdA== 1958\naXN0ZXI= 1959\nIHN1Yw== 1960\naW9uYWw= 1961\nZWxm 1962\nIHdoZXRoZXI= 1963\nIGNvbnRyb2w= 1964\nIGFnYWluc3Q= 1965\nb3Rz 1966\n64uI64uk 1967\naW9y 1968\nIHByZXNlbnQ= 1969\nINin 1970\nIHdhdGNoaW5n 1971\ndWJl 1972\nZXJ2 1973\nIG5pY2h0 1974\nIGdvdmVybg== 1975\nIFRoZXNl 1976\nIDo= 1977\ndWl0 1978\ndWdo 1979\nIHdvcmtz 1980\nb28= 1981\nIHdpcg== 1982\nIGFpcg== 1983\nIFRl 1984\n0LDQtw== 1985\naXNpb24= 1986\nd2hlcmU= 1987\nIHRvdA== 1988\nam95 1989\n7Is= 1990\nIHZvbA== 1991\nINC1 1992\nIGNsb3Nl 1993\nIEFk 1994\n0Yk= 1995\naW5lZA== 1996\nIHVuYQ== 1997\nIOq3uOs= 1998\nsOs= 1999\nb3JyeQ== 2000\nIGJybw== 2001\nIGZpbG0= 2002\naWZ0 2003\nMjA= 2004\nIHR5cGU= 2005\nIGhhcHBlbmVk 2006\nIEFt 2007\nIGdpcmw= 2008\nIEFyZQ== 2009\nd2FyZHM= 2010\nIHBvdXI= 2011\nIGNvbG9y 2012\nZWx0 2013\n0LDRgQ== 2014\nIHNlbnNl 2015\nbGV4 2016\nIFdpdGg= 2017\ndXNz 2018\ncmli 2019\nIHJlc2U= 2020\nIG5vcm0= 2021\nIGZ1dHVyZQ== 2022\nIGRlYWw= 2023\nZW5kaW5n 2024\nZXk= 2025\nIHg= 2026\nZXJv 2027\nIENs 2028\ndWs= 2029\nIHdoYXRldmVy 2030\nc2VsdmVz 2031\nIHlvdW5n 2032\n7Io= 2033\nIE1hcg== 2034\nIENocmlzdA== 2035\nIGd1ZXNz 2036\nIHBlcmZvcm0= 2037\nIGVuZXI= 2038\ncm9u 2039\nIGhpdA== 2040\nIHdvbmQ= 2041\nIGRpcmVjdA== 2042\nIEV2ZXJ5 2043\nIG9mdGVu 2044\nIGZh 2045\nIGFsb25n 2046\nIGNsaWNr 2047\nIExvb2s= 2048\nIHNpdHU= 2049\nIGhhcHB5 2050\nZWFk 2051\nIGFnbw== 2052\nIGVuYw== 2053\nIG15c2VsZg== 2054\nIGNvdmVy 2055\n0L7QsQ== 2056\nIG1pZA== 2057\nIGNvc3Q= 2058\nIHRlbg== 2059\nIFNjaA== 2060\nIGV4cGVjdA== 2061\nIHdhc24= 2062\nIHN0cm9uZw== 2063\naWZ1bA== 2064\nIG9wcG9ydHVu 2065\naW5hbA== 2066\neWxl 2067\nIHNoYXJl 2068\nIHRydWU= 2069\nIGFwcHJv 2070\nIGNoYWxs 2071\nIG1pbnV0ZXM= 2072\nIGNoYW5u 2073\nIOuC 2074\nzrU= 2075\nbGk= 2076\nIG1lc3M= 2077\nb3JpZXM= 2078\ncGVjaWFsbHk= 2079\nIHdyb25n 2080\nIHllcw== 2081\nIOyX 2082\naXJvbg== 2083\nIGFsbG93 2084\nIHN1YnM= 2085\nIGZvcmU= 2086\nIGZpZ2h0 2087\nIHNvY2lhbA== 2088\nIGNyYQ== 2089\nYW5h 2090\nIGFmZg== 2091\nIGVzcw== 2092\nIHdheXM= 2093\nIHNob3J0 2094\nIGZhbGw= 2095\nIGxhdw== 2096\nIFdobw== 2097\nIGVuam95 2098\nIGNhbA== 2099\nIGFjY2Vzcw== 2100\nZmU= 2101\nIG5vbg== 2102\nIGFjcm9zcw== 2103\nZXJ5 2104\ndmlvdXNseQ== 2105\nIEV4 2106\naWRlZA== 2107\nIGxpbms= 2108\nIFBy 2109\nIHRlcm1z 2110\nYWNlcw== 2111\nIGxhbmQ= 2112\nYXppbmc= 2113\nIDE1 2114\nIG11bHQ= 2115\nIHNwZWNpYWw= 2116\n5YA= 2117\naXZpbmc= 2118\n7J2A 2119\nIHR5cA== 2120\nIHN0ZQ== 2121\nIMQ= 2122\nIGZvcndhcmQ= 2123\n5Y8= 2124\nIGZyZQ== 2125\nIHJlc2VhcmNo 2126\n4K+N 2127\n0LDRgg== 2128\nIG1haW4= 2129\nIHJlY29yZA== 2130\nIGh1 2131\nIGRlZmluaXRlbHk= 2132\nIGVpdGhlcg== 2133\nIGxpc3Rlbg== 2134\nIGtleQ== 2135\nIG1hcmtldA== 2136\nINGH0YLQvg== 2137\naXphdGlvbg== 2138\nIHZpZGVvcw== 2139\nIGd1eQ== 2140\nIGZpZw== 2141\nIHN0cmE= 2142\nIFBs 2143\ndWxseQ== 2144\nYW1vcw== 2145\nIG1lbnRpb24= 2146\nIHNvbmc= 2147\nIGludGVybg== 2148\ncmFs 2149\ndXJz 2150\nIGhvbg== 2151\nIHZhbHVl 2152\nIGJhcg== 2153\nY2xl 2154\n0L7Qtg== 2155\nxIc= 2156\nnOs= 2157\nIHp1 2158\n0LjQvA== 2159\nIHNpbmdsZQ== 2160\nIGF1Y2g= 2161\nY3Vzcw== 2162\nIGdldHM= 2163\nIHNvbWV0aW1lcw== 2164\n5b4= 2165\nYW1i 2166\nbW0= 2167\nY2luZw== 2168\nIHBlcmZlY3Q= 2169\nIEJs 2170\nb3V0aA== 2171\n7KA= 2172\nIHNjaQ== 2173\ncGFy 2174\nIHJlZA== 2175\nIHBvc3Q= 2176\nIG1vdA== 2177\nIGVsZWN0 2178\nIEV1 2179\naXRpdmU= 2180\nIFNvbWU= 2181\nIGRlc2NyaQ== 2182\nIGN1cnJlbnQ= 2183\nw6lz 2184\nIHRyZQ== 2185\nIEVu 2186\nIG1pdA== 2187\nRU4= 2188\niOs= 2189\naXVt 2190\nIGhlYXJk 2191\nIHNpbXBsZQ== 2192\nbGFy 2193\nIGV2ZXJ5Ym9keQ== 2194\naWxhcg== 2195\nIG5lZWRz 2196\nIGRpZmZpYw== 2197\nIEdvb2Q= 2198\ndW1lbnQ= 2199\nY2VudA== 2200\nIG9wZXI= 2201\n0LDRgtGM 2202\nZXR5 2203\nIGJsYWNr 2204\nIGdpdmVu 2205\nb25lcw== 2206\nIHdlbA== 2207\n6YA= 2208\nIOyVhA== 2209\nIDMw 2210\nQVQ= 2211\nIHN0YXQ= 2212\nb3VjaA== 2213\nIE1y 2214\n0LDRgA== 2215\nIHNobw== 2216\nIGNvbmQ= 2217\n15Q= 2218\nbXk= 2219\nIGNoaWxkcmVu 2220\nIGV1 2221\n0LXQtA== 2222\n7JWE 2223\ndGVybg== 2224\nIHVo 2225\nIGhhcg== 2226\nIHByb20= 2227\nIHB1bGw= 2228\ncmV3 2229\nIGNvbXBhbnk= 2230\nIGJlYXV0aWZ1bA== 2231\ndXN0b20= 2232\n7ZWY 2233\n0LrQuA== 2234\nIHN0cmU= 2235\nIGFtYXppbmc= 2236\ncmllcw== 2237\nIHN1Y2Nlc3M= 2238\nIG1hY2g= 2239\nbm90 2240\nIGRpc2N1c3M= 2241\nIG5hdA== 2242\npqw= 2243\nIHVuZQ== 2244\nIGRpZmZpY3VsdA== 2245\nIHJpcw== 2246\nzr0= 2247\nIGNhbXA= 2248\nIGJ1eQ== 2249\nIG1hZw== 2250\ncG8= 2251\nIFlvdXI= 2252\nIGJlaGluZA== 2253\naWNh 2254\nxLFu 2255\nIE9L 2256\nIGxhbmc= 2257\nIHdvbWVu 2258\nIGVudg== 2259\nIHJlY2U= 2260\nIGNoYW5uZWw= 2261\naWFsbHk= 2262\ndWxl 2263\nIDEy 2264\ndGhlcnM= 2265\nIGJvdHQ= 2266\nIHJlcG9ydA== 2267\nZW50bHk= 2268\nZnVsbHk= 2269\nVGhl 2270\nIHNlbnQ= 2271\nIGV2ZW50 2272\nIGVuZXJneQ== 2273\nbHQ= 2274\nIHdvcmRz 2275\nYXJy 2276\nZGxl 2277\nIGFoZWFk 2278\nYXJkcw== 2279\n2LE= 2280\nIHRvb2w= 2281\nY29ub20= 2282\n0LXRgQ== 2283\nIGV4YWN0bHk= 2284\nIGZhdm9y 2285\nIGxvdw== 2286\nIHByb3Blcg== 2287\nIOyeiA== 2288\nICE= 2289\nIHJlbGF0aW9ucw== 2290\nIG1hcw== 2291\nIGtpZHM= 2292\nIGVudGlyZQ== 2293\ndWRl 2294\n2YU= 2295\nIFdoZXJl 2296\nIG9uZXM= 2297\nIGNpdHk= 2298\nb2x1dA== 2299\nIHNpeA== 2300\nYWJpbGl0eQ== 2301\nw7Zy 2302\naWxp 2303\nIEVz 2304\nIGhhcHBlbnM= 2305\nYWlucw== 2306\nIG1vZGVs 2307\nIHBpY3Q= 2308\nIGVzcGVjaWFsbHk= 2309\nIDEwMA== 2310\na3Q= 2311\nIHNvb24= 2312\nYnk= 2313\ncm9kdQ== 2314\nIGFubg== 2315\nIHN1YnNjcmk= 2316\nIFF1 2317\nIGF2YWls 2318\naW1lbnQ= 2319\nIHZvYw== 2320\na2E= 2321\nIDIwMA== 2322\nYXBlcg== 2323\nIEluZA== 2324\nIOyn 2325\naG9y 2326\njbA= 2327\nam9y 2328\n0LjQuw== 2329\nIHNxdQ== 2330\nQVU= 2331\nYXJuaW5n 2332\nINCz 2333\nSVM= 2334\nINC7 2335\n0LXQuQ== 2336\neWVz 2337\n5YU= 2338\nINCS 2339\nIG9yaWc= 2340\n0L7Qs9C+ 2341\nIGFza2Vk 2342\naWx0 2343\n0L7Qsw== 2344\nIGNvbnRpbnVl 2345\nIOyY 2346\ncmFt 2347\nIG90aGVycw== 2348\nRVM= 2349\nb2hu 2350\nIGxheQ== 2351\nIGJhc2Vk 2352\nIHB1 2353\nIGFwcGU= 2354\nIGxpbQ== 2355\nIHByb3A= 2356\ngOs= 2357\nbWlu 2358\nIGhvdA== 2359\nIExh 2360\nIGZhc3Q= 2361\nIHByb3RlY3Q= 2362\nIGFtb3VudA== 2363\nIGFxdQ== 2364\nIGZ1bmQ= 2365\nIGN1c3RvbQ== 2366\nIGN1bHQ= 2367\nIGhhbmRz 2368\nIGhhdmVu 2369\nIGF1ZA== 2370\nIG91dHNpZGU= 2371\nIEFmdGVy 2372\nYXBz 2373\nIGFuaW0= 2374\ncGxveQ== 2375\nIGhhdA== 2376\nIEZpcnN0 2377\nIHRyZWF0 2378\nIGVw 2379\nIG1hdGVy 2380\nIGJ1aWxkaW5n 2381\nIOuw 2382\n5ZA= 2383\n7ISc 2384\nemE= 2385\ndWdodGVy 2386\nIFBl 2387\nbmV5 2388\nZXRlcg== 2389\nYXRpYw== 2390\nIGVkdWM= 2391\n6riw 2392\nIG1vdg== 2393\nk6Q= 2394\nYW1h 2395\ncmF0aW9u 2396\nIHNu 2397\n2Yg= 2398\nIHN1bQ== 2399\nIHBob3Q= 2400\nINCd 2401\nIC4= 2402\nIGZpbmlzaA== 2403\naXR0aW5n 2404\n5a4= 2405\nIGxhcmdl 2406\nIOyW 2407\nIHdoaXRl 2408\nYXJh 2409\nIG1haXM= 2410\nIEhp 2411\nIGRhbQ== 2412\nINin2YQ= 2413\nIGJveA== 2414\nIEhlbGxv 2415\nIHNsZQ== 2416\nIG9wdA== 2417\ncmllZA== 2418\npbw= 2419\nIGFjdGl2 2420\nIG7Do28= 2421\nIENvbQ== 2422\nIHBsYXlpbmc= 2423\nVGg= 2424\nIGF2YWlsYWJsZQ== 2425\nIHBvcnQ= 2426\n5Yg= 2427\nIEFo 2428\nIGxhcw== 2429\nIGVhcmx5 2430\nIHdvbmRlcg== 2431\nsbA= 2432\nIDE4 2433\nY3Vs 2434\nIGZ1bmN0aW9u 2435\nIG1vcm5pbmc= 2436\nbGxl 2437\naWVudHM= 2438\ndXg= 2439\nIGNpcg== 2440\naXRpb25z 2441\nIGRlZXA= 2442\nIHBvbGl0 2443\neW9y 2444\nbXA= 2445\nYWtpbmc= 2446\njOs= 2447\nIE1hbg== 2448\nIG1pbGxpb24= 2449\nIC8= 2450\nIGluZGl2aWQ= 2451\nIHBhbg== 2452\nIGdvdmVybm1lbnQ= 2453\nIHdyaXRl 2454\nIFRvZA== 2455\nYW1lbnQ= 2456\nIM8= 2457\nIHdpbmQ= 2458\nIEVuZw== 2459\nY2hlbg== 2460\nV2g= 2461\n7Jw= 2462\nIGlkZW50 2463\ndmVudA== 2464\ndXJjaA== 2465\nIGh5 2466\nIHlh 2467\nIHRyYWQ= 2468\nIHJlbGF0aW9uc2hpcA== 2469\nw7o= 2470\nIGRvdQ== 2471\nT1I= 2472\nIHN3ZQ== 2473\nIG5lZw== 2474\naW5hdGlvbg== 2475\nIHRleHQ= 2476\naXBw 2477\nIGZpbmU= 2478\nw6Fz 2479\nIERy 2480\nIENvbWU= 2481\nIG1vbnRocw== 2482\nLCI= 2483\n0LXQvdC4 2484\nIGhvdXJz 2485\nIHBvZA== 2486\naXJ0 2487\nIGludm9s 2488\nIGNvbGxlY3Q= 2489\nIGF1Zg== 2490\nIHBh 2491\nIGhpc3Rvcnk= 2492\nbWI= 2493\naWZ5 2494\nID8= 2495\nIGJlbG93 2496\nYXN1cmU= 2497\nYWJ5 2498\nIGxhbmd1 2499\nIGFudA== 2500\nIGNvbWI= 2501\nYXRv 2502\nIGV4aXN0 2503\nIOuL 2504\nIHRha2Vz 2505\nIGNoYXJhY3Rlcg== 2506\nYWZm 2507\nIGZpZWxk 2508\nIGVjb25vbQ== 2509\naWVm 2510\nIHBpZWNl 2511\n5Zw= 2512\nIHJlYWNo 2513\nIOqy 2514\nb255 2515\nIG1hdGVyaWFs 2516\nIGRpZw== 2517\nIHBoeXM= 2518\nIGltcHJv 2519\nIHNpbWlsYXI= 2520\nSUM= 2521\nIG5ldA== 2522\neW4= 2523\nIHBvc2l0aW9u 2524\nw58= 2525\nIGJlbmU= 2526\ncmVhZA== 2527\nIGxlYXJuaW5n 2528\ndW1l 2529\nIGNsZWFu 2530\n0YLQvtGA 2531\nIGNvb2s= 2532\nIHNlZW1z 2533\nIG9s 2534\nIFVT 2535\nIEplcw== 2536\nIOCu 2537\nZW50aWFs 2538\naXZlcnNpdHk= 2539\nYWN5 2540\nINGP 2541\nb2x1dGVseQ== 2542\ncmVjdA== 2543\nIFBsZWFzZQ== 2544\nIHJlcHJlcw== 2545\nIHRvdWNo 2546\nbWVu 2547\nINCw 2548\nacOzbg== 2549\nIFRoYW5rcw== 2550\nIGFuZw== 2551\nIG1ham9y 2552\nIGl0c2VsZg== 2553\naWxscw== 2554\nIiw= 2555\naWFucw== 2556\nIHNjcmVlbg== 2557\nIGhvcg== 2558\nIGtub3du 2559\nIGVudmlyb24= 2560\nIGZpbmFs 2561\nIGZpZ3VyZQ== 2562\nIFR3 2563\nIGV5ZXM= 2564\nIGltYWc= 2565\nIHNlZWluZw== 2566\nIGhhaXI= 2567\ncmVt 2568\nIGFwcGxpYw== 2569\nZW5kcw== 2570\ncHV0 2571\nIG5ld3M= 2572\nIGNvbXBsZXRlbHk= 2573\ndWdocw== 2574\nIGtuZXc= 2575\naWZpZWQ= 2576\nIEpl 2577\nIERpZA== 2578\nIHNpdHVhdGlvbg== 2579\nIGZsbw== 2580\nbXM= 2581\nIHBob25l 2582\nIGJhbGw= 2583\nZG8= 2584\nIHBhcmVudA== 2585\nIHNvcnJ5 2586\ndXJ5 2587\n0LjQvQ== 2588\naXBz 2589\n0LDQtA== 2590\nIGluc3RlYWQ= 2591\nIGh1Z2U= 2592\nIHR1 2593\nIOOB 2594\nIEdy 2595\nIGRldGFpbA== 2596\nINCf 2597\nIGluZGl2aWR1YWw= 2598\nIGZpcmU= 2599\nIGNsb3M= 2600\nIHdlcg== 2601\ndW5l 2602\nIHJ1bm5pbmc= 2603\nIGNvbnZlcnM= 2604\nIHJlY29tbQ== 2605\nIGNvbW8= 2606\nIHNvbWVib2R5 2607\nIEpvaG4= 2608\nIOydtA== 2609\nIE91cg== 2610\ncGxlcw== 2611\nIFBo 2612\nIGFuYWw= 2613\nIDUw 2614\nIG9mZmVy 2615\nIDw= 2616\naXRpb25hbA== 2617\nZ2VzdA== 2618\nIHZvdXM= 2619\nbGV0 2620\naWN5 2621\nIGZlZWxpbmc= 2622\nTEU= 2623\ncm9z 2624\nIHRoaXJk 2625\n0L7Qug== 2626\nIHNlcmllcw== 2627\nIEFueQ== 2628\naXNlZA== 2629\nb2xk 2630\nIGRyYXc= 2631\nIHNlcnZpY2U= 2632\nIGNhbm5vdA== 2633\nYmFs 2634\nIGxpdmluZw== 2635\nxLFt 2636\nIGRpZmZlcmVuY2U= 2637\nIG9wcG9ydHVuaXR5 2638\nIG5lYXI= 2639\nb3J0aA== 2640\na2Vu 2641\nIGxvY2Fs 2642\n2Ko= 2643\nIENvbg== 2644\nIG9iamVjdA== 2645\nIGRhc3M= 2646\nkNc= 2647\nIHF1aWNrbHk= 2648\ncmFwaA== 2649\nIGlzc3Vlcw== 2650\nIEFtZXJpY2Fu 2651\nIHByZXA= 2652\nZW5jZXM= 2653\nIHByb2Zlc3M= 2654\nbGxpbmc= 2655\nb2Y= 2656\nIGZvb3Q= 2657\nYnJl 2658\nIHVzdWFsbHk= 2659\nIGdlbmVyYWw= 2660\nZGE= 2661\nYW5jZXM= 2662\nIGRlc3Q= 2663\nIG9jYw== 2664\nIG1lbWJlcnM= 2665\nIGRhbnM= 2666\nIGVxdWFs 2667\nenQ= 2668\nIGJlY29t 2669\nIG1vdmluZw== 2670\nIHNwZWNpZmlj 2671\nw61h 2672\nIGZ1cg== 2673\nIG5lY2Vzcw== 2674\nIGNvbW1vbg== 2675\nIGF0dGFjaw== 2676\nINGN0YLQvg== 2677\nIFRvZGF5 2678\nIHVucw== 2679\nIEd1 2680\naW9k 2681\nIGFjY291bnQ= 2682\nIGdyYW5k 2683\nIHNlbGY= 2684\nIEVs 2685\nIHRhc3Q= 2686\nIGNvbnRlbnQ= 2687\nIGN1 2688\nhOs= 2689\nIE1heWJl 2690\nIEplc3Vz 2691\nb3Jlcw== 2692\ncG9ydA== 2693\nqbQ= 2694\nIGdpdmVz 2695\nIG5vcm1hbA== 2696\n0YDRgw== 2697\nIGltcGFjdA== 2698\nw6Ry 2699\nIGRpZXM= 2700\nIGxhYg== 2701\nc2g= 2702\naW9z 2703\nIFByZXM= 2704\nIFVuZA== 2705\nIE9m 2706\nIGZpbmFsbHk= 2707\nIGRvbGw= 2708\nIHZvY8Oq 2709\ncGx5 2710\nIEFn 2711\nIHRha2Vu 2712\nIGdyb3VuZA== 2713\nZm9ydA== 2714\nIGdhdmU= 2715\nIEluc3Q= 2716\nIGxvc3Q= 2717\nIHdvcmtlZA== 2718\nIGxpdGVy 2719\nIGlzc3Vl 2720\nIGluZHVzdA== 2721\nIHJldHVybg== 2722\nIGhhcHBlbmluZw== 2723\nIHdhbnRz 2724\n0LjQsg== 2725\nIHByb2JsZW1z 2726\nIENhcg== 2727\nnbw= 2728\nIEFsc28= 2729\nIHNpemU= 2730\nIG9idmlvdXNseQ== 2731\nIFN1 2732\nIFNj 2733\nIHJlY29tbWVuZA== 2734\nb3VyY2Vz 2735\nYXN0aWM= 2736\nLi4uLg== 2737\nIG1p 2738\nbGllcg== 2739\nIEV2ZW4= 2740\nY2lh 2741\nIGh1cg== 2742\ndmE= 2743\nIG1hc3M= 2744\nIHdvdWxkbg== 2745\ndW50 2746\nY2tz 2747\nIGZlbHQ= 2748\nb3Nw 2749\nbGlnaHQ= 2750\n0L7Qu9GM 2751\nbmll 2752\nIGJvdHRvbQ== 2753\nINCx0Ys= 2754\nb3JlZA== 2755\naXNvbg== 2756\nIGdyYWQ= 2757\nIHVtYQ== 2758\nIHZh 2759\nIOyC 2760\ncmVzc2lvbg== 2761\ndWxhdGlvbg== 2762\nSUQ= 2763\naWRlbmNl 2764\nIGJ1cg== 2765\nIGdvbmU= 2766\nbHU= 2767\n7Ja07A== 2768\nIHJlZHU= 2769\nIGph 2770\n7J2Y 2771\naXRh 2772\nIHNvZnQ= 2773\nIMOnYQ== 2774\naWNv 2775\nZXJhbA== 2776\nw7E= 2777\nYWY= 2778\nIHBvaW50cw== 2779\nZ3U= 2780\nIGTDqQ== 2781\nYXB0 2782\nYXg= 2783\nIEFscmlnaHQ= 2784\nIGNhbWVyYQ== 2785\nIGFjaA== 2786\nINC/0L4= 2787\nIHNldmVy 2788\nNTA= 2789\nIHNpZQ== 2790\nz4E= 2791\nIG1hbA== 2792\nIGNvbXB1dA== 2793\nIG1pZGRsZQ== 2794\nIGNvdWxkbg== 2795\nbWluZw== 2796\nIOyL 2797\nIEhpcw== 2798\nIGdhbWVz 2799\nIGludHJvZHU= 2800\nIGNlbGw= 2801\ncG9y 2802\nIHNsZWVw 2803\nIOuz 2804\naWRpbmc= 2805\nIG91 2806\nIGRlZw== 2807\nIGRyaW5r 2808\nIGVudmlyb25tZW50 2809\nIFVuaXRlZA== 2810\nIHRhbGtlZA== 2811\nIGNob29zZQ== 2812\nIGpvdXI= 2813\nZWdl 2814\nIE1pbg== 2815\nIGludGU= 2816\nIHJhdGhlcg== 2817\nIG9mZmlj 2818\n0LrQsA== 2819\nYWNoaW5n 2820\nIG1lbnRpb25lZA== 2821\nIGZpbGw= 2822\nIHRyYWNr 2823\nIG5pZQ== 2824\nIHV0 2825\nINCy0Ys= 2826\naWJpbGl0eQ== 2827\nIHZhYw== 2828\nIHJhZA== 2829\nIHBhY2s= 2830\nIHNlbmQ= 2831\nIERhcw== 2832\nIEFi 2833\nIGVuZ2luZQ== 2834\nIGNvbXBldA== 2835\nw7Q= 2836\nINCy0YE= 2837\nIGRvb3I= 2838\nIGxvbmdlcg== 2839\nIGxhbmd1YWdl 2840\nIGV4dHJh 2841\ncGxheQ== 2842\nIHdlYnM= 2843\ndW1i 2844\ncm9vbQ== 2845\n55w= 2846\nIGJlZ2lubmluZw== 2847\nIHJlZmVy 2848\nQU0= 2849\nbmVu 2850\naWdoZXI= 2851\nZmFjZQ== 2852\nZXJj 2853\nIGZvcmdldA== 2854\nIGNvbW1lbnQ= 2855\n0LXQug== 2856\n0LvRjw== 2857\ncm9y 2858\nxbxl 2859\nIEdl 2860\nIGRhcms= 2861\nIGFueW9uZQ== 2862\nYW50ZQ== 2863\nZ2Vz 2864\n7Iq1 2865\n0ZE= 2866\nYmVk 2867\namU= 2868\ncnVjdHVyZQ== 2869\nIHByaW0= 2870\naWRh 2871\n6KY= 2872\nIG1peA== 2873\nIHN0YXJ0aW5n 2874\nIOydtOs= 2875\nIHByb3ZpZGU= 2876\nYWN0aW9u 2877\nIG1vdGhlcg== 2878\nIHBlcmlvZA== 2879\nIHN0aWNr 2880\nIFlvdVQ= 2881\nIHRlY2hub2xvZ3k= 2882\n6rk= 2883\nIGJlZA== 2884\nIGdpdmluZw== 2885\nIGV4cGxhaW4= 2886\nemVu 2887\naW1hdGU= 2888\nIHJlcHJlc2VudA== 2889\nbG9hZA== 2890\nIEhvd2V2ZXI= 2891\nIGxpdmVz 2892\ndXRo 2893\naXJpdA== 2894\nb2du 2895\nIGxpaw== 2896\nIHJlc3BvbnM= 2897\nIHByaXY= 2898\nIHRvbQ== 2899\nw6fDo28= 2900\naWFt 2901\nIGV4Y2l0ZWQ= 2902\nIGNhcmQ= 2903\nZ3JvdW5k 2904\nINeU 2905\nIHNlbnM= 2906\nIHRlYWNo 2907\naWRv 2908\naG9k 2909\nIGVwaXM= 2910\nIHdlbGNvbWU= 2911\nIHdhbGw= 2912\n5Lk= 2913\nIGNoYW5jZQ== 2914\naGVu 2915\nINCh 2916\nIMSR 2917\nIHNpbXBseQ== 2918\nINGC0LDQug== 2919\ncmluZw== 2920\namE= 2921\nYm9vaw== 2922\nIHNldmVyYWw= 2923\nc3Rl 2924\nIGNyZWF0ZWQ= 2925\nINC+0YI= 2926\nIHB1c2g= 2927\nPT0= 2928\nIGhpZ2hlcg== 2929\ndWY= 2930\nb3VyY2U= 2931\nb2tl 2932\nIG9ubGluZQ== 2933\nIHJlbGU= 2934\nIHRvbg== 2935\nZW5zaXZl 2936\nIGZhdm9yaXRl 2937\n0YPQtA== 2938\nIGxvb2tlZA== 2939\nIHZvbg== 2940\n4oCU 2941\nIGbDvHI= 2942\nIGJ1dHRvbg== 2943\nIGJpbGw= 2944\nIGNoYW5nZXM= 2945\nISI= 2946\nIHNsb3c= 2947\nYWJsZXM= 2948\nIGRlYXRo 2949\nYW5kcw== 2950\nYXRlZw== 2951\nIHRoZW1zZWx2ZXM= 2952\nIGNvcA== 2953\nIHBlcnNvbmFs 2954\ndWdoaW5n 2955\nIDEx 2956\nZ2Fy 2957\nYWRlcw== 2958\nIG5lZWRlZA== 2959\nIHN0dWR5 2960\nYWdlZA== 2961\n0YHRgtCy 2962\naW5v 2963\nIGRpc2M= 2964\na2k= 2965\nIGFkZHJlc3M= 2966\n16g= 2967\naXR0ZW4= 2968\nZXNvbWU= 2969\nINC2 2970\npOs= 2971\ndXJh 2972\nIG11 2973\nIGNvbnRpbnU= 2974\nZm9y 2975\nIG1hdGNo 2976\nIHN0cmFpZ2h0 2977\nkOs= 2978\nbmVycw== 2979\nIGRvZw== 2980\nIGRlYg== 2981\nIENP 2982\nIG9z 2983\nZ2Vk 2984\nY2FtZQ== 2985\nIGNvcnJlY3Q= 2986\nZXR0ZQ== 2987\nIFNlZQ== 2988\nIGluY2x1ZGluZw== 2989\nIEV1cm8= 2990\nZXN0ZXI= 2991\nIGp1bXA= 2992\nIFdoaWNo 2993\nINC60LDQug== 2994\nc29u 2995\neWE= 2996\nSU5H 2997\nIGVpbmU= 2998\nb3No 2999\nZW5jeQ== 3000\nIG1lZGlh 3001\nIHN1YnNjcmliZQ== 3002\n6YI= 3003\nIHByaW4= 3004\nIGhhYg== 3005\nIFBlcg== 3006\nIFdhcw== 3007\nIHBhZ2U= 3008\naXRvcg== 3009\nIHRvd2FyZHM= 3010\nIHRyaWVk 3011\nZW5nZQ== 3012\nYXJ0bWVudA== 3013\nIHZhcmk= 3014\nIHBhcGVy 3015\nIHBpY3R1cmU= 3016\nIHZlcnNpb24= 3017\nIGJyb3VnaHQ= 3018\nd2FyZQ== 3019\nIFN0YXRlcw== 3020\nIHNpY2g= 3021\nbGVkZ2U= 3022\nIHBlcmNlbnQ= 3023\nIGdvZA== 3024\nZWM= 3025\nIENvbW0= 3026\nIGRlY2lkZWQ= 3027\nIHNlbGVjdA== 3028\n7ZWc 3029\nKS4= 3030\ndXJpdHk= 3031\nIGZ1cnRoZXI= 3032\nIGNvbW1lbnRz 3033\nbGVtZW50 3034\nIGRyZWFt 3035\nIGNlbnRlcg== 3036\nbWk= 3037\nIGNhcw== 3038\nIHdvbWFu 3039\nIHJvYWQ= 3040\nIGZhaWw= 3041\nIGJlY2FtZQ== 3042\nbHVz 3043\naWxpdGllcw== 3044\nIENv 3045\nIG1hbmFnZQ== 3046\nIHJlY29nbg== 3047\nIGFjdGlvbg== 3048\nIGJlbmVm 3049\nIGVhcmxpZXI= 3050\n15w= 3051\nIHNwZWVk 3052\nIG1lbnQ= 3053\nIHNvY2k= 3054\nIHNob290 3055\ndWk= 3056\nIMOk 3057\nIGFwcGx5 3058\ndm8= 3059\neGlt 3060\nIGNhdXNl 3061\nIHN1cnBy 3062\nIGhhYmVu 3063\nREk= 3064\nIGZhdGhlcg== 3065\nIE5leHQ= 3066\nIFlvdVR1YmU= 3067\nIGNvZGU= 3068\nIHJvbGU= 3069\nZ3Jlc3M= 3070\nIGdyZWVu 3071\nZXR0 3072\nIGJ1aWx0 3073\nIGZsb3c= 3074\nIGJhc2U= 3075\nIHRyYWluaW5n 3076\nIHJvdW5k 3077\nIFdpbGw= 3078\nIHBhdGg= 3079\nIFJv 3080\nIGludGVyZXN0ZWQ= 3081\n7Ja0 3082\nIHJlc3BlY3Q= 3083\nIGNoYW5nZWQ= 3084\naXNzaW9u 3085\nIHN0dWRlbnQ= 3086\nb2dyYXBo 3087\nIGFwcHJvYWNo 3088\nIHNob3dz 3089\nIHRhcg== 3090\nIGNyaXQ= 3091\nIGdsbw== 3092\n7Iq164uI64uk 3093\nIGRlYWQ= 3094\nIFByZXNpZGVudA== 3095\nIHRob3Vz 3096\nIGJhbA== 3097\nc3Rlcg== 3098\nZXg= 3099\nIGFic29sdXRlbHk= 3100\nIG1pYw== 3101\nIHByYWN0aWNl 3102\nIHF1YWxpdHk= 3103\nIGxvd2Vy 3104\nb2dsZQ== 3105\nIHNlcGFy 3106\nYmFsbA== 3107\nbWVkaQ== 3108\nIHJldmlldw== 3109\nIEFwcA== 3110\nIG9r 3111\n4oCL 3112\nIGV4cGVyaWVu 3113\nIGNvbmNlcm4= 3114\nZW50aWFsbHk= 3115\nbW9yZQ== 3116\nIEpv 3117\nYXBhbg== 3118\nIEljaA== 3119\naXN0aWM= 3120\nIGZhaXI= 3121\nIHdlYnNpdGU= 3122\naXJlcw== 3123\nIEJ5 3124\nIHRyYXZlbA== 3125\nIHJpc2s= 3126\nIG1pcg== 3127\nIGJvYXJk 3128\nIHNlbg== 3129\nIHBhcmVudHM= 3130\nIFdvdw== 3131\nIGZlZWQ= 3132\nIHNhdmU= 3133\nIHNlcmlvdXM= 3134\nIGluaXQ= 3135\nRUw= 3136\ndW5kcmVk 3137\nQVM= 3138\nIHZhbg== 3139\nb3Jyb3c= 3140\nIHdvcnRo 3141\nIHNlYXJjaA== 3142\nIDE2 3143\nIHBhcnRz 3144\n0YHRgtGM 3145\nIGNvbXBhbg== 3146\nIG1vdmll 3147\nIG1ldGhvZA== 3148\nIGlsbA== 3149\nIHdpc2g= 3150\nZHk= 3151\nIGl0ZW0= 3152\nIG1pbnVz 3153\nYW5nZXI= 3154\nIHZvaWNl 3155\nIHNraW4= 3156\nIGFyZWFz 3157\nIGVpZ2h0 3158\nIG9icw== 3159\nICw= 3160\n0LDQuQ== 3161\nIG9pbA== 3162\nIGN5 3163\nIGJhYnk= 3164\nc3k= 3165\nIGVtcGxveQ== 3166\nIEtl 3167\nIHBsYWNlcw== 3168\nIGZpeA== 3169\nIGVzdMOh 3170\naXZlZA== 3171\nIGxvdHM= 3172\nIHNlYXNvbg== 3173\ndW5r 3174\nYWx0 3175\nIHRhYmxl 3176\nINCi 3177\nw6I= 3178\nIGF0dGVudGlvbg== 3179\nIEhlcg== 3180\nIGFnZQ== 3181\nIHByYQ== 3182\nYmFjaw== 3183\nY2ls 3184\nIG5ldHdvcms= 3185\ncml0 3186\nIGRvYw== 3187\nIGFyZW4= 3188\naWdlbg== 3189\nIOuE 3190\n2K8= 3191\nZW5kZXI= 3192\nIHRvdGFs 3193\nIHByaWNl 3194\nIGNyYXp5 3195\n7Jo= 3196\naXF1 3197\ndGhvdWdo 3198\nWW91 3199\n2Yc= 3200\nz4U= 3201\nIHNhdA== 3202\nIGJp 3203\nIERpZQ== 3204\nIHNoYQ== 3205\nIHRoYW5rcw== 3206\ndWg= 3207\nIHN0YWdl 3208\n0LDQtg== 3209\nIEZs 3210\nIGxlYXY= 3211\nIGJveQ== 3212\nIGFm 3213\nw7Zu 3214\nIEdldA== 3215\nIGFjY2VwdA== 3216\nIGVudGVy 3217\nIHR1cg== 3218\nIHNpxJk= 3219\nIGhvbmVzdA== 3220\n44CM 3221\nIHNhbQ== 3222\nIHJlcGw= 3223\nZ2luZw== 3224\nIGRldmVsb3BtZW50 3225\nIEFjdA== 3226\nb3Jh 3227\n44CN 3228\n5L4= 3229\nIGtub3dz 3230\nIGltYWdl 3231\nIExvcmQ= 3232\n0LjRgtGM 3233\nIHdlZWtz 3234\nIHNleA== 3235\nlOs= 3236\nIGh1bmRyZWQ= 3237\nIHNvdW5kcw== 3238\nIGxlYXJuZWQ= 3239\nIGJ1ZA== 3240\nINGB0YI= 3241\nIGluY3JlZA== 3242\n4pk= 3243\nIG5vcw== 3244\nIGRyb3A= 3245\nIGJlbg== 3246\nINCY 3247\nIHNhZmU= 3248\nYXRh 3249\nIGZ1Y2s= 3250\nc29jaQ== 3251\nIGRhbg== 3252\nIGNyb3Nz 3253\nMTA= 3254\nbW8= 3255\ndmVydA== 3256\nIDE3 3257\nemll 3258\n5ZU= 3259\nIGRvbQ== 3260\nIEJv 3261\nIHNldHRpbmc= 3262\nIGludm9sdmVk 3263\nYXJpbHk= 3264\nIHNpbmQ= 3265\nIHN1cw== 3266\nIHdvcnJ5 3267\nZXRo 3268\n6rmM 3269\nIHN1bg== 3270\nIGhpZXI= 3271\nIGNlcnRhaW5seQ== 3272\nb3Vs 3273\nb3J0cw== 3274\nIEVy 3275\nIFVt 3276\nIGNhdXM= 3277\nIG5hdHVyYWw= 3278\nIMO8 3279\nIGNyeQ== 3280\nIFNlYw== 3281\nIHNvbQ== 3282\n5rI= 3283\nIGVkdWNhdGlvbg== 3284\n0LDQtdGC 3285\nIG11bHRpcA== 3286\nIGFsb25l 3287\nIGV5ZQ== 3288\nIHJhdGU= 3289\nIEV1cm9wZQ== 3290\n6L8= 3291\nbW9u 3292\nIGZpdA== 3293\naXppbmc= 3294\ncHBlZA== 3295\nIHByZXNzdXJl 3296\ndGhl 3297\n0LjRgQ== 3298\naXRlcw== 3299\nIEFm 3300\ncmVjaQ== 3301\nYXR0bGU= 3302\nIHNlcnZpY2Vz 3303\nIEdvb2dsZQ== 3304\n6YE= 3305\nIGNhc2Vz 3306\nIGRyaXZl 3307\nIGNoYWxsZW5n 3308\ndXo= 3309\nIE1v 3310\n7Jy86w== 3311\ndmFs 3312\nIGZvbA== 3313\nIOyi 3314\nZmZpYw== 3315\nIHJh 3316\nIHNpbg== 3317\nIGJsdWU= 3318\nIGFmZmVjdA== 3319\nIG1pcw== 3320\nIHNob3Q= 3321\nINC+0LE= 3322\nYXNpbmc= 3323\nIHNpZ25pZmlj 3324\nIENoZQ== 3325\nIOqz 3326\nIHBvc2l0aXZl 3327\n7KM= 3328\nIHdpZQ== 3329\nIDQw 3330\nb3JkaW5n 3331\nIEZyb20= 3332\n6rU= 3333\nIGJyYW5k 3334\nIHRydXN0 3335\nIHBsZQ== 3336\nIGNvbW11bmlj 3337\nIHdlaWdodA== 3338\nIGFza2luZw== 3339\nIHRheA== 3340\nIEphcGFu 3341\nIO2VmA== 3342\nb3Bz 3343\nz4I= 3344\nIHB1dHRpbmc= 3345\nIHJvbGw= 3346\nIEFtZXJpY2E= 3347\ncmVn 3348\nntc= 3349\nYXR1cmVz 3350\nZW5zaW9u 3351\nIFNvbWV0 3352\nIG9yaWdpbmFs 3353\ncGluZw== 3354\nIMWf 3355\nIHByb2R1Y3Rz 3356\nIGNvbnRhY3Q= 3357\nb2x1dGlvbg== 3358\nIGdvYWw= 3359\nIHBvdw== 3360\nIHBlcmZvcm1hbmNl 3361\nIGJsb29k 3362\nYXRvcnM= 3363\nIE1pY2g= 3364\nIHRlbXBlcg== 3365\nIERhbg== 3366\nIHN1Z2c= 3367\n0YLQuA== 3368\nIGltbQ== 3369\nIG9mZmljZQ== 3370\nIGFycmk= 3371\nIGNvbWZvcnQ= 3372\nINCU 3373\nIHN1Z2dlc3Q= 3374\nIHBsYXQ= 3375\ngpg= 3376\nMTk= 3377\nIG9t 3378\nIHNldmVu 3379\nIENlbnQ= 3380\naWxsZQ== 3381\nIGNvbmNlcHQ= 3382\nIGJhZw== 3383\nw7xu 3384\naXZlbHk= 3385\nIGRpdg== 3386\nbW9z 3387\n5ok= 3388\nIGZlZWxz 3389\nIGly 3390\nYWtlcw== 3391\nbGV5 3392\nIHBhcnRpY2lw 3393\nINCa 3394\nZmw= 3395\nanVzdA== 3396\nIHNpbA== 3397\nIFBh 3398\nQUw= 3399\nIGdvdHRh 3400\nIGZhbg== 3401\nIGNoYWxsZW5nZQ== 3402\nIGNvbXBhbmllcw== 3403\nIFBlb3BsZQ== 3404\nPC8= 3405\n0L7Qtw== 3406\nIHBlbg== 3407\naXNpbmc= 3408\nIGF1cw== 3409\nZW1pYw== 3410\nYW1lbnRl 3411\nIG1lZXRpbmc= 3412\nIHZpc2l0 3413\nIHN1cHBvc2Vk 3414\nIE9uY2U= 3415\n0LTQsA== 3416\nb3JsZA== 3417\nMzA= 3418\nVVM= 3419\nIHZpb2w= 3420\nIG5vdGljZQ== 3421\nINCQ 3422\naGFu 3423\ncGVk 3424\n7Jg= 3425\naGg= 3426\nIHRyb3U= 3427\nIG1pbnV0ZQ== 3428\nIFBhcg== 3429\ncmF5 3430\nIHRpdA== 3431\nIHVwZA== 3432\nIGJsb2Nr 3433\nIGR1ZQ== 3434\nYXVy 3435\nIGZvcmNl 3436\nIGNvdW4= 3437\nIOKAlA== 3438\nIHR5cGVz 3439\n66c= 3440\nIGxhdGU= 3441\nIGltcHJvdmU= 3442\nIOyI 3443\nIGF2ZQ== 3444\ndWxlcw== 3445\nY2w= 3446\nYW1lZA== 3447\nIGF3ZXNvbWU= 3448\nIE9r 3449\nIHZvdA== 3450\nIG1hY2hpbmU= 3451\nIGZvbGxvd2luZw== 3452\nIG1lYXN1cmU= 3453\nYWNpw7Nu 3454\ndWVs 3455\nY2hhbg== 3456\nIGFiaWxpdHk= 3457\nIHRvdXQ= 3458\nIGlkZWFz 3459\nIGluY3JlYXNl 3460\nIGVucw== 3461\nINGF 3462\nIOuq 3463\nIGplc3Q= 3464\nINCc 3465\nIHRydXRo 3466\naHk= 3467\nIHNwZW5k 3468\nIHNjaWVuY2U= 3469\nZXRl 3470\nIDE0 3471\nIGVwaXNvZGU= 3472\nIGFsZw== 3473\nZW5kZWQ= 3474\nYXJp 3475\nbGxh 3476\nIGZpc2g= 3477\nIHRocm93 3478\nbWl0 3479\n5bk= 3480\nIGNpcmM= 3481\nIENhbA== 3482\nIHRvdXI= 3483\nIGRpcmVjdGlvbg== 3484\nIG5vY2g= 3485\n0LXQsg== 3486\nw6lu 3487\nIGNvdW50cmllcw== 3488\nIGluZHVzdHJ5 3489\naW55 3490\naWNsZQ== 3491\nIGZlZXQ= 3492\nSXQ= 3493\nIGxlYWRlcnM= 3494\nZXR6dA== 3495\nIHN0YWZm 3496\n55Q= 3497\nIHB1cnA= 3498\naXRv 3499\nPyE= 3500\nIEph 3501\nIHN0b3Jl 3502\nZXRpYw== 3503\nIENoaW5h 3504\nIOuQ 3505\nIFVuaXZlcnNpdHk= 3506\nICM= 3507\nIGRlY2lzaW9u 3508\nIGFjaGll 3509\nIGFjdHVhbA== 3510\ndWx5 3511\nIHNlY3Rpb24= 3512\nIHJlc3VsdHM= 3513\nIHN0YXI= 3514\nIG1pc3Q= 3515\naWJseQ== 3516\nIGRhZA== 3517\nIG51bWJlcnM= 3518\nb21i 3519\n6Ko= 3520\nIFNwZQ== 3521\nIG1lcg== 3522\nIDI1 3523\nIGF1dG9t 3524\nIGNvbGQ= 3525\n2Kg= 3526\nhJw= 3527\nYWdlcg== 3528\nIFRW 3529\nIFNpZQ== 3530\nIEhhdmU= 3531\nIMW8ZQ== 3532\ndWdn 3533\nYWluZWQ= 3534\nIHVwb24= 3535\nIGxvZw== 3536\nIGNvbXBsZXRl 3537\nIGJyYWlu 3538\nYWdpbmc= 3539\nIE11cw== 3540\nb3Zlcg== 3541\nIGVhc2llcg== 3542\nIGludGVncg== 3543\nIG3DoXM= 3544\nIHR1cm5lZA== 3545\nIHN0cmk= 3546\naXZhbA== 3547\nIGhlYXY= 3548\nIFRI 3549\nIHdyaXRpbmc= 3550\n0YDQsA== 3551\nIGNsYQ== 3552\nZGluZw== 3553\nIHRlbGxpbmc= 3554\n0LjQtA== 3555\naWNhdGVk 3556\nYWNodA== 3557\naGFwcw== 3558\nIFN0ZQ== 3559\nIHJlc291cmNlcw== 3560\nIGRhbm4= 3561\nIHBhcnR5 3562\nIM+E 3563\nIHNhZg== 3564\naXNlcw== 3565\ndHJl 3566\nb2ludA== 3567\nIGtub3dsZWRnZQ== 3568\nIGFueW1vcmU= 3569\nIGZseQ== 3570\nIG1haW50 3571\n0LjQug== 3572\n5ZE= 3573\nIHNlbGw= 3574\nbGF1Z2hz 3575\nIFlvcms= 3576\nIGJpZW4= 3577\nIG9k 3578\nIGVhc2lseQ== 3579\nIHJhbmdl 3580\nIG9wdGlvbg== 3581\n2Lk= 3582\nIGFwcHJlY2k= 3583\nb2Ny 3584\nIGRldGVybQ== 3585\n0YQ= 3586\nIG1lYW5pbmc= 3587\nIHNpdGU= 3588\nIGRpc2Nv 3589\ndmVyYWdl 3590\nIGxvc2U= 3591\nIGluc3RhbGw= 3592\nIGVtb3Q= 3593\nYW50bHk= 3594\nw6R0 3595\nIHRhbWI= 3596\nIFdhcg== 3597\nIEhv 3598\nIEdlbg== 3599\nZW15 3600\n0LXQtw== 3601\nIFBvbA== 3602\nIG1lc3NhZ2U= 3603\nIG5vdGU= 3604\njIA= 3605\nIGhldA== 3606\nIGltbWVkaQ== 3607\nIGF2bw== 3608\nIGJvb2tz 3609\nIGJlY29tZXM= 3610\ncmVzaA== 3611\nw6hz 3612\nYXNvbnM= 3613\nIGhpbXNlbGY= 3614\ndXRz 3615\nIGp1 3616\nIGF3YXJl 3617\nIHJlcXVpcmU= 3618\nIHN5c3RlbXM= 3619\nIEhhcg== 3620\nIGFtb25n 3621\nIGhvbQ== 3622\nIGJyZWF0 3623\nIHdlaXJk 3624\nIOu2 3625\nzrs= 3626\n2Kk= 3627\naWZm 3628\nb3Jpbmc= 3629\nIHBsYXRmb3Jt 3630\nIFRha2U= 3631\nIGhlbHBz 3632\ndXRpb25z 3633\nIGZvcmc= 3634\nIGx1Y2s= 3635\nIEVuZ2xpc2g= 3636\nIHdlYg== 3637\nIG5lZ2F0aXZl 3638\nIHR1dA== 3639\nIGFib3Zl 3640\nbmd0aA== 3641\nIOqxsA== 3642\nIHN0b3JpZXM= 3643\nIGxvYWQ= 3644\nIGJhY2tncm91bmQ= 3645\nIHN3aXRjaA== 3646\nZ2E= 3647\nIHByaW5jaQ== 3648\nIGZpbmFu 3649\nIHZhcmlvdXM= 3650\nIGzDoA== 3651\nIGtpbmRz 3652\nYWluaW5n 3653\nIG5hdHVyZQ== 3654\nINCe 3655\nY3o= 3656\nIHByYXk= 3657\nIGdhcg== 3658\naXJt 3659\nICY= 3660\nIOyD 3661\nbnM= 3662\nIFJlcA== 3663\nIEZl 3664\nIHJldg== 3665\ncmFuZA== 3666\nIGxpa2VseQ== 3667\nIHVuZGVyc3RhbmRpbmc= 3668\nxLFy 3669\nIGZhbA== 3670\nIDEz 3671\n0YbQuA== 3672\nIHN1ZA== 3673\nIGJyb3RoZXI= 3674\nIHBsYW50 3675\nIHRocm91Z2hvdXQ= 3676\nd2lzZQ== 3677\ncHJl 3678\nIGN1bHR1cmU= 3679\nINmF 3680\nIHdvbmRlcmZ1bA== 3681\nIGFo 3682\ncHBlcg== 3683\nIHNvbGQ= 3684\nIHN0YXJ0cw== 3685\nIHdyaXR0ZW4= 3686\nzq8= 3687\nbmk= 3688\nINeU1w== 3689\nIERhdg== 3690\nIHVsdA== 3691\nIGFybQ== 3692\nIHJvY2s= 3693\nIHdlYXI= 3694\n642w 3695\nYW5v 3696\ncmFn 3697\nIHNxdWFyZQ== 3698\n0LDQvdC4 3699\nY2FzdA== 3700\nbGVicg== 3701\nIGxpdGVyYWxseQ== 3702\nIHBsYXllZA== 3703\nIGhlYXQ= 3704\nb25zZQ== 3705\ncmljdA== 3706\nIGluc3A= 3707\naWRz 3708\nIHBvcHVsYXI= 3709\n64+E 3710\nIGNhdGNo 3711\nIG1vdW50 3712\nIGp1ZA== 3713\nV2hhdA== 3714\n0LXQsQ== 3715\nUkE= 3716\nYXVk 3717\n0LrQvg== 3718\nIHN1cmZhY2U= 3719\nIGNvbnY= 3720\nIHBpZWNlcw== 3721\nT2g= 3722\n5oA= 3723\nIHN0eWxl 3724\ncHBpbmc= 3725\nIHJlYWRpbmc= 3726\nIGNvbnZlcnNhdGlvbg== 3727\n0L7Qvw== 3728\nIEFnYWlu 3729\nIGJhbms= 3730\ndGltZQ== 3731\n0YPRgg== 3732\nZXJ2ZQ== 3733\nIEdyZWF0 3734\nIGNhcHQ= 3735\n0LDQsQ== 3736\nYXlz 3737\nIEZpbg== 3738\naWZpY2F0aW9u 3739\nIMOkcg== 3740\n0LDRjg== 3741\nIGVnZw== 3742\nIFdlbA== 3743\nIHRhcmdldA== 3744\ndWxh 3745\nY2hlcw== 3746\nYW5p 3747\nT08= 3748\naWNpb3Vz 3749\nbm93 3750\nz4M= 3751\nYm9hcmQ= 3752\nIGdlbnRl 3753\nIGRybw== 3754\nIEV0 3755\nIGRpbg== 3756\nIGNvcw== 3757\nIGF1dGhvcg== 3758\n2LM= 3759\nIG9jaA== 3760\nIGVtYWls 3761\nIHNwaXJpdA== 3762\nIHNpdHRpbmc= 3763\nbWFz 3764\nIHN0cmVuZ3Ro 3765\nIGJpZ2dlcg== 3766\nIFdhaXQ= 3767\nIG1hdA== 3768\nIHBvbGljZQ== 3769\ncmVzc2Vk 3770\nIHdhaXRpbmc= 3771\naXNoaW5n 3772\nIGRvbGxhcnM= 3773\naG9vZA== 3774\nc3M= 3775\nIGltYWdpbmU= 3776\naW5p 3777\nIG1lcw== 3778\nIGRpc2U= 3779\naWRnZQ== 3780\nYWJvcg== 3781\nIHBldA== 3782\nIGhvcA== 3783\nIEtpbmc= 3784\nIGNvbXB1dGVy 3785\nIGdvbGQ= 3786\nIG51 3787\nIGZpbmc= 3788\nKSw= 3789\nIHNlY3VyaXR5 3790\ncnVjdGlvbg== 3791\nIHNvbHV0aW9u 3792\nZXh0 3793\nIHBhdHRlcg== 3794\naWNrZW4= 3795\ndXJlZA== 3796\nIHN0YW5kYXJk 3797\n7Iuc 3798\nIGRvdWJsZQ== 3799\nzrc= 3800\nIHdpZmU= 3801\naXNh 3802\nIGRpcmVjdGx5 3803\nYWNlZA== 3804\nIGJ1bmNo 3805\nIMK/ 3806\n0LDQu9GM 3807\nIHJlZ2FyZA== 3808\nIHN3ZWV0 3809\nIHVuaXF1ZQ== 3810\nIOKZqw== 3811\nIHRyYWlu 3812\nIEdlcm0= 3813\nzqw= 3814\nUkU= 3815\nIGJlaGF2 3816\nIHByZWQ= 3817\n7IM= 3818\nc2V0 3819\nIGRlc2NyaXB0aW9u 3820\nw6ll 3821\nIGNhdA== 3822\n5ZM= 3823\nIGNvbGxlZ2U= 3824\n7Js= 3825\nIGFwcGxpY2F0aW9u 3826\nIFNlbg== 3827\nYXNr 3828\nIGNyZWQ= 3829\ndWJsaWM= 3830\nIG11bHRpcGxl 3831\nIG5p 3832\nIHByZXNpZGVudA== 3833\nIGFkZGVk 3834\nIHJvYg== 3835\nIGFxdWk= 3836\nIGhvc3A= 3837\nIHRvb2xz 3838\nIGd1bg== 3839\nIGJhc2lj 3840\nIGxpbmVz 3841\nIHN0cnVjdHVyZQ== 3842\nIFJ1c3M= 3843\nIHRvdGFsbHk= 3844\nIGJpZ2dlc3Q= 3845\nIGVlbg== 3846\nIGFyZw== 3847\nINec 3848\nIHBhcms= 3849\nIERlcw== 3850\nIGNlbGVicg== 3851\nIGZhaXQ= 3852\n0LXQvdGM 3853\nIHN1ZmY= 3854\nIHJlZ3VsYXI= 3855\nqOs= 3856\nIG1pbmU= 3857\nIEtvcmU= 3858\nIHByZXZpb3Vz 3859\nIHBp 3860\nIHNlZw== 3861\nIHBvbGljeQ== 3862\nINC60L4= 3863\nIFRydW1w 3864\nIHZhY2M= 3865\nw7N3 3866\nIFN5 3867\n0LjRhw== 3868\naXR0ZXI= 3869\nIHBvbGl0aWNhbA== 3870\ncmFz 3871\nIGFscw== 3872\n0LXQu9GM 3873\nIHNoYXBl 3874\nYW56 3875\nIG9udG8= 3876\nIGFyY2g= 3877\nIGFtYg== 3878\nYWdyYW0= 3879\nIFNt 3880\nY3Rpb25z 3881\nIGpvaW4= 3882\nYm9y 3883\n5Zs= 3884\nIGZyYW1l 3885\noIc= 3886\nIGNob2ljZQ== 3887\n4K+B 3888\n0YPRjg== 3889\nIENvcg== 3890\nIFN3 3891\nSVQ= 3892\nIHRlbmQ= 3893\nIEVhcg== 3894\nIHRvcg== 3895\nIGV2ZW50cw== 3896\nIGNsYWlt 3897\nIERh 3898\nIE1hcms= 3899\nIGdyb3Vwcw== 3900\nIGVhdGluZw== 3901\nIFdvcmxk 3902\nIHJlY2VudGx5 3903\nIHRhc3Rl 3904\nIHN1cnY= 3905\n4KQ= 3906\nIHNraWxscw== 3907\nINC40Lc= 3908\naXR0ZWQ= 3909\nIHNob3A= 3910\n7J207A== 3911\nIGVzdGFi 3912\nIOuCmA== 3913\nIHNlY29uZHM= 3914\nIFRob3Nl 3915\nIEVudA== 3916\nIOyE 3917\nZXJzb24= 3918\nIHRvd24= 3919\nIGNhbmQ= 3920\nIG9wdGlvbnM= 3921\nIGluZw== 3922\nVklE 3923\nIGVuY291cg== 3924\nIHLDqQ== 3925\n4pmq 3926\nIGVudHJl 3927\nIG1vdmVtZW50 3928\nIEJlbg== 3929\nIGJpcnRo 3930\nIHdoZQ== 3931\nIGhhbmc= 3932\nIEVt 3933\naWdl 3934\ncm9sbA== 3935\nIHVuZg== 3936\n7II= 3937\nIHJpZA== 3938\nIHNwcmVhZA== 3939\nIGhvc3Q= 3940\nYWxk 3941\nIEVk 3942\nIGNvbnN1bQ== 3943\nVU4= 3944\nIG9waW4= 3945\naXRhcg== 3946\nIE1lZA== 3947\nIHN1YmplY3Q= 3948\nIHBhbA== 3949\nIGNhcnJ5 3950\nIGFncmVl 3951\nIFdoaWxl 3952\nIGNhcmVlcg== 3953\nIHNjaWVudA== 3954\nIHN1ZGRlbg== 3955\nIGZpbGU= 3956\nemk= 3957\nIGV4Y2VwdA== 3958\n6bo= 3959\nIHBvdGVudGlhbA== 3960\nIEFub3RoZXI= 3961\nIGNvbXBsZXg= 3962\nIFNpbQ== 3963\nZW5kbw== 3964\nIHJhaXM= 3965\nIHBoeXNpY2Fs 3966\nIGRhdGU= 3967\nYWtlcg== 3968\nIENvbA== 3969\nIHBvd2VyZnVs 3970\nIG1lbWJlcg== 3971\ncmFw 3972\nIHNwb3Q= 3973\nIHNvdXJjZQ== 3974\nIGZlbQ== 3975\nw6lt 3976\nIGVtcA== 3977\namk= 3978\naWV0eQ== 3979\nIGluZmx1 3980\nIGRyeQ== 3981\nIGxvY2s= 3982\nIHplcm8= 3983\nIFVo 3984\nIHJvdXQ= 3985\nIHBvcnF1ZQ== 3986\nIDI0 3987\nIHRhbA== 3988\nIGZvbGtz 3989\nIGxhdW5jaA== 3990\nIGNvbXBvbg== 3991\nIFdlbGNvbWU= 3992\nIGthbm4= 3993\nw6Ru 3994\nINGN0YI= 3995\nZWVz 3996\nINmI 3997\nIGFueXdheQ== 3998\nIGF1ZGllbmNl 3999\nIHNsaWdodA== 4000\nb25h 4001\nIHVy 4002\nIHJlbGln 4003\nIGV4dHJlbQ== 4004\nxLF6 4005\nIE1h 4006\nzrw= 4007\nIMO2 4008\nIGFsbG93cw== 4009\nIGZhdA== 4010\nIEZhY2U= 4011\nIG5hdGlvbmFs 4012\nIGludGVydmlldw== 4013\nIE1j 4014\nw6l0 4015\nIGN1dGU= 4016\nZWxh 4017\nIHNlY3JldA== 4018\nIFdlc3Q= 4019\nIERlcA== 4020\nIGV4ZXJj 4021\nIGhpc3Rvcg== 4022\nIHByaW9y 4023\nIDYw 4024\nYXZh 4025\nYWNoZXI= 4026\neW9uZA== 4027\nIEhh 4028\nIGVzdGU= 4029\naW5hcnk= 4030\nIE5vcnRo 4031\nb25zdA== 4032\nIHNtYXJ0 4033\nYW1z 4034\n0LDQu9C4 4035\nIGRhcg== 4036\nZXJlZA== 4037\nIGZ1bm55 4038\nIE9i 4039\nIEJsYWNr 4040\nIHJlbGF0ZWQ= 4041\nIEJ1 4042\nIHNvbWV3aGVyZQ== 4043\nIFJlbQ== 4044\nbmVz 4045\nbWVudGU= 4046\nIFJlYWxseQ== 4047\nIGNyZWF0aW5n 4048\nIGZhbWls 4049\nIHNvY2lldHk= 4050\nIGdlbA== 4051\nIHRyYW5zZm9ybQ== 4052\nxIM= 4053\nIGluY2x1ZGU= 4054\nIGhvbA== 4055\nbGlrZQ== 4056\na28= 4057\nYWlycw== 4058\nINC/0L7QtA== 4059\nIHBlcnNwZWN0 4060\nIGJlcw== 4061\nIHBhcnRpY3VsYXJseQ== 4062\nIHNob3dpbmc= 4063\nIFBhcnQ= 4064\nIHF1YWw= 4065\nbG9jaw== 4066\nIHJlYWxpdHk= 4067\naG9sZA== 4068\naWN0aW9u 4069\nb29u 4070\nIHZpcg== 4071\naXRhcnk= 4072\nIGRydWc= 4073\nIGZlYXR1cmU= 4074\nIHJlYXNvbnM= 4075\nINep 4076\nIHdyb3Rl 4077\nIGZhbnQ= 4078\nIGJhbmQ= 4079\n2YM= 4080\nZW5h 4081\na2V5 4082\nIGVhcnRo 4083\nZG9t 4084\nIGZlYXR1cmVz 4085\nIGZsb29y 4086\nIHNwZWFraW5n 4087\nIHRpcA== 4088\nIEF1c3Q= 4089\nIHN0b2Nr 4090\nIGNodXJjaA== 4091\nIHJhYw== 4092\n7Jy866Gc 4093\n4LiZ 4094\na3k= 4095\nIHJlc3BvbnNl 4096\n24w= 4097\ndWxhdGlvbnM= 4098\nIHNsaWRl 4099\nIGdyYWR1 4100\nY2lvdXM= 4101\nIG1lYW50 4102\nID09 4103\nINeQ1w== 4104\n44U= 4105\nIGtpbmRh 4106\nIHNjZW5l 4107\nIG11aXQ= 4108\nIOqwgA== 4109\ncmFzdA== 4110\ncmVzdA== 4111\nIHBsYXllcnM= 4112\nd2E= 4113\nIGJyb2Fk 4114\nIHRvbW9ycm93 4115\nb2NvbA== 4116\nINGB0LI= 4117\nIEJhcg== 4118\nxLFr 4119\nIHNlYQ== 4120\nIHJlbW92ZQ== 4121\nIHJlbWluZA== 4122\n0L7QvNGD 4123\nIFNpbmNl 4124\nIGF2ZWM= 4125\nY2VsbA== 4126\n0LjRhQ== 4127\nIGRvY3VtZW50 4128\nIOq3uOuf 4129\nIG5laWdo 4130\nYmVhdA== 4131\nIHDDpQ== 4132\nIGFzcGVjdA== 4133\nIGRlZA== 4134\nbGlzaGVk 4135\naWxz 4136\nIG91cnNlbHZlcw== 4137\ndWNl 4138\nIGhleQ== 4139\nINC/0YDQvg== 4140\nZW50eQ== 4141\nIGFzc29jaQ== 4142\nYWRvcw== 4143\ndW1iZXI= 4144\nIF0= 4145\nbm92 4146\nIOyZ 4147\n0YPRhw== 4148\nIGNvbmRpdGlvbg== 4149\n64qU642w 4150\nIHZhbHVlcw== 4151\nIHNjZW4= 4152\nbWluaXN0 4153\nIGNhc3Q= 4154\nIGdyb3dpbmc= 4155\nIHVzZXI= 4156\nIHJlc3BvbmQ= 4157\nbGlt 4158\nw6ly 4159\neW0= 4160\nb3Nlcw== 4161\nc3ljaA== 4162\nINGA0LDQtw== 4163\nIGFwcGVhcg== 4164\nIHByb2dyZXNz 4165\nZW5ndGg= 4166\nIGphaw== 4167\nIERpcw== 4168\nIHBhdGllbnRz 4169\nIFNlcg== 4170\nIGdhcw== 4171\nw6hyZQ== 4172\n7Ja07JqU 4173\nIHJlY2k= 4174\n7J24 4175\nIHNjYQ== 4176\nZXBlbmQ= 4177\n0YHQug== 4178\n0LDQvw== 4179\nIGJhdHRlcg== 4180\nIHZlaA== 4181\n8J8= 4182\nIGFjY29t 4183\nIGJlYXQ= 4184\nIHBhaW50 4185\nIGNvbnRyaWI= 4186\nIHNhZA== 4187\nxrA= 4188\nYWxlcw== 4189\nIHRyZWU= 4190\nYmE= 4191\nIGJvcm4= 4192\naWNlZA== 4193\n4K6V 4194\nYmFuZA== 4195\nIG1lY2hhbg== 4196\nIERldA== 4197\nIGNhcGl0YWw= 4198\nIGRlbGl2ZXI= 4199\nIGZlYXI= 4200\nnpg= 4201\nIFNvdXRo 4202\nIGJvdWdodA== 4203\nIHN0cmVzcw== 4204\nIHZvcg== 4205\nPz8= 4206\naWg= 4207\n7JW8 4208\nIGVyYQ== 4209\n7J206w== 4210\n0LDRjw== 4211\naXNpb25z 4212\naXZpdHk= 4213\nIGhlbHBlZA== 4214\nIGFzc2lzdA== 4215\nIHBsYXllcg== 4216\ncmFu 4217\nIGltbWVkaWF0ZWx5 4218\nIG1vdmVk 4219\nY2ll 4220\n6rE= 4221\nIGFubm91bg== 4222\n5b8= 4223\n7J6Q 4224\nIHByb2R1Y3Rpb24= 4225\nIHN1bW1lcg== 4226\nIHR1bg== 4227\nIHByb2dyYW1z 4228\nR0g= 4229\nYWxpbmc= 4230\naXJh 4231\nZWxlc3M= 4232\nLik= 4233\nIGF2ZXJhZ2U= 4234\nIGdsYXNz 4235\nb21hbg== 4236\naWZpY2FsbHk= 4237\nIOuLpA== 4238\nIENvbmc= 4239\nIFZlcg== 4240\nIHRyaWNr 4241\nIGJlZ2Fu 4242\nIHZpbGw= 4243\n6rGw 4244\naG93 4245\n5q0= 4246\nIHRpbGw= 4247\nIDkw 4248\nYmVydA== 4249\nIOq4 4250\nIHRlbXBlcmF0dXJl 4251\nw7I= 4252\n4LmI 4253\nIGdyYXBo 4254\nIOq3uA== 4255\nIHJvdA== 4256\nIG1vYg== 4257\nQVk= 4258\nYWVs 4259\nIHJlcGU= 4260\nIGRldmljZQ== 4261\nIDE5OQ== 4262\nIHRlbGU= 4263\nIGtlcHQ= 4264\ncGE= 4265\n5pY= 4266\ndmVyc2U= 4267\nIHN0cmVhbQ== 4268\n0LXRhw== 4269\nZXNzaW9u 4270\nIHN0cnVnZw== 4271\neno= 4272\nIGRlZ3JlZQ== 4273\nIGhlbHBpbmc= 4274\nIHNtZWxs 4275\nIHBlcmhhcHM= 4276\ncHJv 4277\nIGNvbnRleHQ= 4278\nIGlr 4279\nINC/0LXRgA== 4280\nIGNhbGN1bA== 4281\nYmluZw== 4282\nIHJlYWxpemU= 4283\nbGFt 4284\nIENoYXI= 4285\neXQ= 4286\nIOydtOw= 4287\nIGRhbmdlcg== 4288\nIElt 4289\nYWE= 4290\nIGxvdmVk 4291\nIHB1cnBvc2U= 4292\nIGZpbmlzaGVk 4293\nIHBlYWNl 4294\nIG90 4295\nIGdsb2JhbA== 4296\nz4A= 4297\nIGFiZXI= 4298\nlog= 4299\nIGNoYXJhY3RlcnM= 4300\nIG51cg== 4301\nIGRhbWFnZQ== 4302\nIGVtZXI= 4303\nIHByZWM= 4304\nIFdpcg== 4305\nIGluc3RpdA== 4306\nkdc= 4307\nIGFsbG93ZWQ= 4308\nYm9u 4309\nIHRvZA== 4310\n0LXQs9C+ 4311\nIGpldHp0 4312\nIG1lZGlj 4313\nIHNtYWxsZXI= 4314\nY2VlZA== 4315\nIGxldmVscw== 4316\nIGludGVsbA== 4317\nV2U= 4318\nIHNlbQ== 4319\nIGN1cnJlbnRseQ== 4320\nIG1vZGVybg== 4321\nIGNvbnRyYWN0 4322\nIGRldGFpbHM= 4323\nb3J0dW5hdGVseQ== 4324\nT1M= 4325\nIHN0YXRlcw== 4326\nIGFkanVzdA== 4327\nYW50YWdl 4328\nZXo= 4329\nIFZlcnk= 4330\nIHNjYWxl 4331\nIHJlbGVhc2U= 4332\nIGZheg== 4333\nIGlj 4334\naXR1ZGU= 4335\nQUM= 4336\nIFBhdA== 4337\naWRlbg== 4338\nrZA= 4339\nIHByZWZlcg== 4340\nb2xvZ2ljYWw= 4341\nIEZhY2Vib29r 4342\nIOqwmQ== 4343\nIC4u 4344\nIE1ha2U= 4345\nINC60L7RgtC+0YA= 4346\nIERhdmlk 4347\nIEFmcmlj 4348\nIG1vZGU= 4349\nIENpdHk= 4350\nIHNoYWxs 4351\nINGE 4352\naW1pbg== 4353\nINC30LA= 4354\ncm9t 4355\ndWE= 4356\nIGJleW9uZA== 4357\nIGRpc3RyaWI= 4358\n0LrRgw== 4359\nIERvZXM= 4360\nIHZpY3Q= 4361\ncmF0ZQ== 4362\nIHZhaQ== 4363\nIHN1Y2Nlc3NmdWw= 4364\nIGhvdXM= 4365\nYWhh 4366\nZXN0cw== 4367\nIEVzdA== 4368\nIGRpc2NvdmVy 4369\nIHRoZXJlZm9yZQ== 4370\nY2hh 4371\nIGN1cA== 4372\nIHBvcHVsYXRpb24= 4373\nIEls 4374\nc2M= 4375\nIHNwZW50 4376\ncmVs 4377\nIHVzZWZ1bA== 4378\nIHRhYg== 4379\n5p0= 4380\nIMU= 4381\nIOygnA== 4382\nIGNvbnNl 4383\nIHF1YW50 4384\nYXlh 4385\nIGJvbg== 4386\nIENoaW4= 4387\nIOqygw== 4388\nb3VuZHM= 4389\n0LXRiA== 4390\nZWxsZQ== 4391\nIGljZQ== 4392\nMjE= 4393\nIGtpY2s= 4394\nIHN0ZXBz 4395\nIHRvbmlnaHQ= 4396\n0L3Ri9C5 4397\ncmVuY2g= 4398\nLic= 4399\nIGdyYWI= 4400\nIGltcGxlbWVudA== 4401\nIOyImA== 4402\nIG1pc3Npb24= 4403\nIGNsZWFybHk= 4404\nIGFwcHJlY2lhdGU= 4405\n6IA= 4406\nIGZyZXNo 4407\nYXJt 4408\nIFR3bw== 4409\nIGV4ZWM= 4410\nIHByb2plY3Rz 4411\nIGNvbW11bml0aWVz 4412\ncmlibGU= 4413\nIHJlZ2lvbg== 4414\nIGZyZXF1 4415\ncm95 4416\nIGhvd2V2ZXI= 4417\nIHBhcnRuZXJz 4418\nYW5j 4419\nIG1pbmlt 4420\nIGxhdA== 4421\nIGZhbWlsaWVz 4422\nIGV2aWRlbmNl 4423\nIHB1bg== 4424\ncmFmdA== 4425\nIGxvc3M= 4426\nIG1hcA== 4427\nIGFueWJvZHk= 4428\nIGNoYW5naW5n 4429\nIHJ1bGVz 4430\nIG9yZ2FuaXphdGlvbg== 4431\nIGVzc2VudGlhbGx5 4432\nIFJlZA== 4433\nIGVsZW1lbnQ= 4434\n5pc= 4435\nIHZpcnQ= 4436\ncmF0 4437\nIHByaW50 4438\nYW5kZXI= 4439\nYXJlbg== 4440\nZW1vcw== 4441\nzr/PhQ== 4442\nIGNvbmRpdGlvbnM= 4443\nYWJl 4444\nIGRhbmNl 4445\n0LjRgA== 4446\nIGRvcw== 4447\n0L7Rhw== 4448\nIFF1ZQ== 4449\nIHdhbGtpbmc= 4450\nIHRybw== 4451\nIGlk 4452\nIGFkZGl0aW9uYWw= 4453\nIGZ1bGx5 4454\nIGZhbnM= 4455\nIGFkZGl0aW9u 4456\nIGxpa2Vk 4457\nIMO8YmVy 4458\nIGJvdw== 4459\nZGk= 4460\nIG1hc3Rlcg== 4461\nb2Zm 4462\nKTo= 4463\nbWJlcg== 4464\nIOus 4465\n5a8= 4466\nbGF1c2U= 4467\nIG9kZXI= 4468\nIHNhZmV0eQ== 4469\nIHJlYWN0 4470\n4K6/ 4471\nYnQ= 4472\nIGRpc2FwcA== 4473\nIGdpcmxz 4474\nU3Q= 4475\nIEFuZw== 4476\nIGZhaXRo 4477\nIHR1cm5z 4478\nIHRpZ2h0 4479\nIG1vdXRo 4480\nYW1p 4481\nemVy 4482\nIHdlYXA= 4483\nINCx0YPQtA== 4484\nIGhvc3BpdGFs 4485\ncmFpZA== 4486\nIG1pY3Jv 4487\nIFN0YXRl 4488\nIE1vc3Q= 4489\nYWdu 4490\nIGRlY2lkZQ== 4491\nIHBhdGllbnQ= 4492\nIGNvcm5lcg== 4493\nIGRpZWQ= 4494\nTm8= 4495\nIFN0dWQ= 4496\ncmVuZA== 4497\nZW1wdA== 4498\nIGxpZQ== 4499\nIGxpZg== 4500\nIEJlZm9yZQ== 4501\ndMOz 4502\nIFN1cGVy 4503\nIGJlbGw= 4504\nNjA= 4505\nIHByaXZhdGU= 4506\nIFBhdWw= 4507\nIGdpYg== 4508\nIGFncmU= 4509\ntOyEnA== 4510\nIHNpZw== 4511\nIGludmVzdGln 4512\n0Y/Rgg== 4513\nZW5pbmc= 4514\nIGRpc3RhbmNl 4515\nIHdhcm0= 4516\nIGRpZ2l0YWw= 4517\naW5lcg== 4518\nIHBhbmQ= 4519\nIENPVklE 4520\n0LPQvg== 4521\nZ24= 4522\nIHJhY2U= 4523\nIHByb3Vk 4524\nIHRlYWNoaW5n 4525\nINGC0L4= 4526\n7J6l 4527\nIEFsbGFo 4528\nSW4= 4529\nIHdvb2Q= 4530\nIGNvbG9ycw== 4531\nIHdpcmQ= 4532\ndWo= 4533\naWRhZA== 4534\nIGN1c3RvbWVycw== 4535\nIGNvbm5lY3RlZA== 4536\nIGxheWVy 4537\nIGFjaGlldmU= 4538\nIHBlcnNwZWN0aXZl 4539\nIENvbGw= 4540\n2YI= 4541\nIGNsb3Vk 4542\nISEh 4543\nIGVuZGVk 4544\noIfqsow= 4545\nIG1hbmFnZW1lbnQ= 4546\nIHJpY2g= 4547\nIHN1YnN0 4548\nIHJlbW8= 4549\nIHNlcnZl 4550\nIHJlc2lzdA== 4551\nIHRob3VnaHRz 4552\nIGdyb3d0aA== 4553\naWxpYXI= 4554\nIHJpZ2h0cw== 4555\nIGNoYXJnZQ== 4556\nIGNvbnNpc3Q= 4557\nIHdlcmRlbg== 4558\nIGVtYg== 4559\nYW5kb20= 4560\nIGh1cnQ= 4561\nIGthbg== 4562\naWFz 4563\n0LvQvg== 4564\nIHNoaXQ= 4565\nIGJlZw== 4566\nIHJlY2VpdmVk 4567\naXRhdGlvbg== 4568\nIG1lYXQ= 4569\nIGlzc28= 4570\nZmZlZQ== 4571\nIGZhbW91cw== 4572\nIGNvbWZvcnRhYmxl 4573\nSUw= 4574\nIEJ5ZQ== 4575\nb3RoZXM= 4576\nIG1lZGljYWw= 4577\nIGVuam95ZWQ= 4578\nIGhlYWx0aHk= 4579\nIHd5 4580\nY2llcw== 4581\nIGVmZm9ydA== 4582\nIGRvY3Rvcg== 4583\nIG1pbGl0YXJ5 4584\nTEFV 4585\nIGdybw== 4586\nIGJhdHRsZQ== 4587\nIGZlZA== 4588\nIGNhcGFj 4589\nIGFmcmFpZA== 4590\naXZpbA== 4591\nINCy0YHQtQ== 4592\nIGxlbmd0aA== 4593\neXNpcw== 4594\nIGJlaQ== 4595\npO0= 4596\nIG9yZ2FuaXo= 4597\nb3Jn 4598\naW5j 4599\nIGludGVyYWN0 4600\nIENoaW5lc2U= 4601\nIGFjY29yZGluZw== 4602\nIGluY3JlZGlibGU= 4603\nIGtpbGxlZA== 4604\nIGRhdWdodGVy 4605\nIM+A 4606\n0YvQsg== 4607\nIHNjaG9vbHM= 4608\nIMKr 4609\nbGxlcg== 4610\nIHNob3VsZG4= 4611\nbmFs 4612\nIGNyaXM= 4613\nIGNoaWNrZW4= 4614\nIGZhc3Rlcg== 4615\nIGV4dHJlbWVseQ== 4616\nIG9wcG9z 4617\nIG5vdXM= 4618\nICs= 4619\ncmlh 4620\nIGZpbmFuY2lhbA== 4621\nIGV4Y2l0aW5n 4622\nIGpvdXJuZXk= 4623\n15nXnQ== 4624\noOs= 4625\nIGRpc3BsYXk= 4626\nIG1lbW9yeQ== 4627\nIGhlYXZ5 4628\n0L3QtQ== 4629\nIHBhc3NlZA== 4630\n0YDQuA== 4631\naWxlcw== 4632\nIHBzeWNo 4633\nIHNwZWNpZmljYWxseQ== 4634\nIGVuZ2FnZQ== 4635\nIGxlZA== 4636\nb3JnZQ== 4637\nIERlbQ== 4638\nb3JkZXI= 4639\nIDgw 4640\nIGNyZWFt 4641\nZXN0ZXJkYXk= 4642\nIGVkZ2U= 4643\nINC/0L7Quw== 4644\nIGJ1bGw= 4645\nIGluZGlj 4646\nIGt0w7M= 4647\nIGhvcGVmdWxseQ== 4648\ndW1lbnRz 4649\nYWdlbg== 4650\n0L3QvtCz0L4= 4651\nIGhhdGU= 4652\nY2h0 4653\nODA= 4654\nIGVmZmlj 4655\nIOyngA== 4656\nIGludGVybmV0 4657\nIGJ1ZGdldA== 4658\nIHByb3BlcnR5 4659\naWRheQ== 4660\nIOya 4661\nINC80L7Qtg== 4662\nb2xh 4663\nIHNob3dlZA== 4664\nIE1vbg== 4665\nIHRob3VzYW5k 4666\nQVA= 4667\nIHBvb3I= 4668\ndXNlZA== 4669\nIEphY2s= 4670\nIHPDpQ== 4671\ng70= 4672\nIGVzYw== 4673\nIHNvZnR3YXJl 4674\nIHF1YXI= 4675\nINio 4676\nIG5lY2Vzc2FyaWx5 4677\nb21lbg== 4678\naXk= 4679\nIGV2ZW50dWFsbHk= 4680\naXNoZWQ= 4681\nIGJyaWdodA== 4682\nRUQ= 4683\nIHNwbA== 4684\nIGRlbWFuZA== 4685\nIHRocmVhdA== 4686\nIHNpcg== 4687\nIHJlbGVhc2Vk 4688\nY2tldA== 4689\nIOKAqw== 4690\nIHJlcXVpcmVk 4691\nIHZvdGU= 4692\n7Lk= 4693\n4K6k 4694\nIGRldmVsb3BlZA== 4695\nIOyCrA== 4696\nYXRvcnk= 4697\nIGRpcg== 4698\nY2FwZQ== 4699\nIHNsaWdodGx5 4700\nw6w= 4701\n4LmJ 4702\ncmVldA== 4703\nIGRpc2Vhc2U= 4704\nIGNvdXJ0 4705\nIGl0ZW1z 4706\nIEVhcnRo 4707\n0YHRgtC4 4708\n0LbQtQ== 4709\n7LI= 4710\nIGNoYWxsZW5nZXM= 4711\nIEJyaXQ= 4712\nIGRlc2lnbmVk 4713\nMTI= 4714\nIGhlYXJpbmc= 4715\nIGxpc3RlbmluZw== 4716\nem8= 4717\nINGB0Ls= 4718\nIHBlcm8= 4719\nIHdlYXJpbmc= 4720\ncGxpYw== 4721\nIGNoZW0= 4722\nIGJhbGFuY2U= 4723\nIGJh 4724\nIHJlY2VpdmU= 4725\naW1h 4726\nIHNpZ25pZmljYW50 4727\nINC80Ys= 4728\nYW5jaA== 4729\nIENy 4730\nIENvdW4= 4731\n6riI 4732\nIGpvYnM= 4733\nIG9mZmljaWFs 4734\nIHBlcm0= 4735\nb21z 4736\nIG9wcG9ydHVuaXRpZXM= 4737\nIG92ZXJhbGw= 4738\nIGh1cw== 4739\nb2Rlcw== 4740\nIG5hdGlvbg== 4741\nIFJlZw== 4742\nIG9yZA== 4743\nIHJlc3RhdXI= 4744\nIOyG 4745\nIG1lbA== 4746\ndmlu 4747\nIHdlbm4= 4748\nIGvDtm4= 4749\n5oM= 4750\nIG9waW5pb24= 4751\n6Kw= 4752\nIFNvbWV0aW1lcw== 4753\n54I= 4754\n0YnQtQ== 4755\nYXNj 4756\nT1U= 4757\nIDIwMjA= 4758\nIGRlbGljaW91cw== 4759\naWdlcg== 4760\nIOyViA== 4761\nb2xl 4762\nIGhhbmRsZQ== 4763\nIGNpdA== 4764\nIO2VnA== 4765\nIGbDtnI= 4766\nb290aA== 4767\nIG5lY2Vzc2FyeQ== 4768\nIGluZGVwZW5k 4769\n5oQ= 4770\naXN0ZW4= 4771\naGFt 4772\nIMOpdA== 4773\nIG11bHRp 4774\nz4w= 4775\nPyk= 4776\nIGNhbXB1cw== 4777\nIHRvcGlj 4778\nIHJhaW4= 4779\nIHBhbmVs 4780\nIFNhbQ== 4781\nIGxhcmdlcg== 4782\nYXVkaWVuY2U= 4783\nIHBhaWQ= 4784\nIGVjb25vbWlj 4785\nb2x0 4786\nIHN0cmVldA== 4787\nIENvbnQ= 4788\nIGRyaXZpbmc= 4789\nIOyggA== 4790\nIGhheQ== 4791\nIHByb2Zlc3Npb25hbA== 4792\nIEludGVybg== 4793\n5bg= 4794\nIGlucHV0 4795\nIGNhdGVn 4796\nIGNybw== 4797\nIGxs 4798\nRVQ= 4799\n0YvQuQ== 4800\nKio= 4801\nIFpl 4802\nQkxF 4803\nIOyk 4804\ncmVlcw== 4805\nINCv 4806\nZWRl 4807\naWVydA== 4808\nIGZvbGQ= 4809\nIGR1cg== 4810\nIE5hdGlvbmFs 4811\nIOyWtOs= 4812\nYW5jZWQ= 4813\nIGZhaXJl 4814\ndXRlZA== 4815\nIGtpbmc= 4816\nIHdpbGQ= 4817\nb2k= 4818\ndXBiZWF0 4819\nIHByZXZlbnQ= 4820\naXVz 4821\nIMOo 4822\nIHdpZGU= 4823\nIHJpbmc= 4824\nIHRpdGxl 4825\nIHN0YW5kaW5n 4826\nIGFsdGhvdWdo 4827\nIGhp 4828\nIHNhdWNl 4829\nIHNpZGVz 4830\nIGFuaW1hbHM= 4831\naWxpbmc= 4832\nYXRpdmVz 4833\n7JeQ7ISc 4834\nIE92ZXI= 4835\nIGRlc3A= 4836\nIGNvbnNpZGVyZWQ= 4837\nYXJpZXM= 4838\naWVycw== 4839\nIGVpbmVu 4840\nIHNpc3Rlcg== 4841\nIOuV 4842\nIFN1cmU= 4843\ncmllbmQ= 4844\nYWlnbg== 4845\nIHNob3du 4846\nIHNhYw== 4847\nIHNvbnQ= 4848\nIGNlbnR1cnk= 4849\nIHRpZW4= 4850\nIM66 4851\nIFNU 4852\nIG9sZGVy 4853\naWVt 4854\nIHRydWx5 4855\nIFNp 4856\nIHdpbmRvdw== 4857\naXF1ZXM= 4858\nYXJpbw== 4859\nIGxvY2F0aW9u 4860\nzro= 4861\nIOyc 4862\ndmk= 4863\nYWd1ZQ== 4864\nIFNvcnJ5 4865\nIGRpc3A= 4866\nIGhlbGw= 4867\nIMOJ 4868\nIHRyYWRl 4869\nIGNyaXRpY2Fs 4870\nIOqx 4871\nIG5hbWVk 4872\nIHByZXBhcmVk 4873\nIEhvdXNl 4874\nYWx1 4875\nIHRvdWdo 4876\nIHRyaXA= 4877\nIHNhbmQ= 4878\nY2Vs 4879\nw7x6 4880\nIFB1dA== 4881\nIGFwYXJ0 4882\naXNm 4883\ndmlz 4884\nIGxpYnI= 4885\nYXZlbg== 4886\nIHZpZQ== 4887\nIGVmZmVjdGl2ZQ== 4888\n4Liy 4889\nIG1hZ24= 4890\nIG11aXRv 4891\nIOq1 4892\naGFs 4893\nIGxpbWl0 4894\nIG5pbmU= 4895\nIHdpbGxpbmc= 4896\nxLHFnw== 4897\nc3A= 4898\n0LXQsw== 4899\naGk= 4900\nIGFsdA== 4901\nIEphbg== 4902\nIG9yaWdpbg== 4903\nIFVz 4904\nIGVsZW1lbnRz 4905\nIHVzZXM= 4906\nIGhlbHBmdWw= 4907\nIGZsYXQ= 4908\nIGZhbWlsaWFy 4909\nIFBhcms= 4910\nIGNvcmU= 4911\nIGNsb3Nlcg== 4912\nIGFjdGl2ZQ== 4913\nIGFkbWluaXN0 4914\nQ0U= 4915\n0L3Ri9C1 4916\n54Q= 4917\nIHJlbGF0aXZl 4918\nIG1lbnRhbA== 4919\nIHJhbmRvbQ== 4920\nIHBhcnRuZXI= 4921\nIHV0aWw= 4922\ncGhvbmU= 4923\nIHJ1bGU= 4924\nd3c= 4925\nIOyglQ== 4926\nIHNjaG9u 4927\nIGNvZmZlZQ== 4928\nSEE= 4929\nIGNvbm5lY3Rpb24= 4930\nIHVuaXQ= 4931\nbGF1Z2hpbmc= 4932\nbG9n 4933\nIGFwcGw= 4934\n0LvQsA== 4935\ndXNpYw== 4936\nIEJyYQ== 4937\nIGFueXdoZXJl 4938\nQVVESQ== 4939\nIHNlcGFyYXRl 4940\nYm94 4941\nIGRpdmlk 4942\nIHRlc3Rpbmc= 4943\nIHNpY2s= 4944\nIHdlcmVu 4945\nINec1w== 4946\nIGFkdmFudGFnZQ== 4947\nIHRyYW5zZmVy 4948\nJy4= 4949\nIOu5 4950\nIGZpbmRpbmc= 4951\n0L3QvtC5 4952\nIOyiiw== 4953\nIGZvcnQ= 4954\nIGVjb25vbXk= 4955\nIGxhY2s= 4956\nIGxlYXZpbmc= 4957\nIGRpbQ== 4958\n5Y4= 4959\nIFJlcw== 4960\n2K0= 4961\nIGRpc2N1c3Npb24= 4962\n0LXQvw== 4963\nIGdlcw== 4964\nZHVjdA== 4965\nIGNoYWlu 4966\nIHVzZXJz 4967\nZWNo 4968\nxYJh 4969\nIGRpc2g= 4970\nIGNhcmVmdWw= 4971\nIHRlYWNoZXI= 4972\nIG9wdGlt 4973\nIGZsdQ== 4974\nYXRpY2FsbHk= 4975\nIHJlZmxlY3Q= 4976\nIHRyZWF0bWVudA== 4977\nZWVk 4978\nacSZ 4979\nw7k= 4980\n4K6+ 4981\nIGVxdWlw 4982\nIHBsYW5uaW5n 4983\nIHNvbHZl 4984\nIFRvbQ== 4985\nIGF2b2lk 4986\nIHBvdQ== 4987\nIGdyZWF0ZXI= 4988\nbGlu 4989\nT0w= 4990\nIEx1 4991\nIE1vcmU= 4992\nIGF0dHJhY3Q= 4993\nw6pu 4994\ndW5h 4995\nIHBob3Rv 4996\nZXJhdGlvbg== 4997\nIHBsYW5ldA== 4998\nIGNvcHk= 4999\nIHZpc3VhbA== 5000\naXJpbmc= 5001\nIGludGVybmF0aW9uYWw= 5002\nIGxhdWdoaW5n 5003\nIHRoaWNr 5004\nIGhvbGRpbmc= 5005\nIGJyaW5naW5n 5006\nIGxldHRlcg== 5007\nIGJ1cm4= 5008\nIGVmZmVjdHM= 5009\naXTDqQ== 5010\nb3Vycw== 5011\nT1Q= 5012\nw6ptZQ== 5013\nIFNjaG9vbA== 5014\n15XXqg== 5015\ncm9wcmk= 5016\nbGln 5017\nzrHOuQ== 5018\nIGFkdWx0 5019\nIHN1Z2Fy 5020\nIHJpZGU= 5021\nIGhpZ2hsaWdodA== 5022\nIG5vYm9keQ== 5023\nIDIx 5024\nIGNoYXQ= 5025\nINC/0YDQuA== 5026\nIGlubm92 5027\ndW5nZW4= 5028\nIGF0dGFjaA== 5029\nZWRvbQ== 5030\n5Yo= 5031\neWw= 5032\nIGxlZ2Fs 5033\nIHJpY2U= 5034\nIGNvbGxhYm9y 5035\na2luZw== 5036\nZG93bg== 5037\n5pk= 5038\nIGlo 5039\nIEFj 5040\nb3VzbHk= 5041\nIHJhcA== 5042\nIHNvbGlk 5043\nIGdlbmVyYWxseQ== 5044\nIHBhdHRlcm4= 5045\nYWxp 5046\n4Lit 5047\nIHRyYW5zbA== 5048\naW50ZXI= 5049\nYXVsdA== 5050\nIOuo 5051\nIGV4cHJlc3M= 5052\nIGV4YW1wbGVz 5053\nIGNob3Nl 5054\nIHRlbGxz 5055\nw61z 5056\nYWludA== 5057\nIFRlbGw= 5058\nIE1pY2hhZWw= 5059\n5qg= 5060\nIE51bWJlcg== 5061\nIHRhcA== 5062\nIGV4cGVyaW1lbnQ= 5063\nIGJlbmVmaXQ= 5064\nIOyw 5065\nIHNlcXU= 5066\nIGV4cGVuc2l2ZQ== 5067\nIGdlbmVyYXRpb24= 5068\nIE1hbnk= 5069\nIGFkZGluZw== 5070\nIGtpbA== 5071\nIGNhbXBhaWdu 5072\nIEFudA== 5073\ncmF3 5074\nb21tZW4= 5075\nIHNvdWw= 5076\nam8= 5077\nIEFjdHVhbGx5 5078\nYW1t 5079\n6rKg 5080\nIG1heGlt 5081\nIHNhbHQ= 5082\nIGNydQ== 5083\nIGNhbGxpbmc= 5084\nIGJhc2lz 5085\nYmFu 5086\nIGtlZXBpbmc= 5087\nIE1vcg== 5088\nZWRz 5089\n7IY= 5090\nIHRvZG8= 5091\n0LDQvNC4 5092\n0L3Rjw== 5093\nIGxpdmVk 5094\nIER1 5095\nZm9yY2U= 5096\nZmVyZW5jZQ== 5097\nYWxh 5098\nIG9jY3Vy 5099\nc2s= 5100\nIHJlY2VudA== 5101\nIGNhcnM= 5102\nIHRyYWRpdGlvbmFs 5103\nZW50bGU= 5104\nsog= 5105\nIGhlbGQ= 5106\nIG5hY2g= 5107\nIENlbnRlcg== 5108\nZXJlbg== 5109\nIGJpbg== 5110\n2YE= 5111\nIGNvbW1l 5112\nIHJldmU= 5113\nIOyYpA== 5114\nIGV4cGVjdGVk 5115\nYWJpbA== 5116\nIGZvY3VzZWQ= 5117\nb3Y= 5118\nIGlQ 5119\nb3JpYWw= 5120\naXJv 5121\nIGV0Yw== 5122\nYW1pbmc= 5123\nIFNvbg== 5124\nIHllc3RlcmRheQ== 5125\nIHN0cmF0ZQ== 5126\nINGG 5127\nIOuP 5128\ncGVz 5129\nIGFjdGl2aXR5 5130\nIGFkdmljZQ== 5131\nIG9wZW5pbmc= 5132\nZmlu 5133\nIHJlbGE= 5134\n6ZY= 5135\nIGluc3RhbmNl 5136\nIEV2ZXJ5b25l 5137\nYmw= 5138\ncGVu 5139\nIHZpc2lvbg== 5140\nIEFsZXg= 5141\naWZvcm4= 5142\nIHRpY2s= 5143\nSGU= 5144\nIHN0cmF0ZWd5 5145\nIGtvbQ== 5146\nUEU= 5147\nIEds 5148\nIGVsZWN0cmlj 5149\nMTU= 5150\nIGRhaWx5 5151\nIGh1c2JhbmQ= 5152\nIHN0YXRpb24= 5153\nIGFuYWx5c2lz 5154\neW5hbQ== 5155\nIGF0dGVtcHQ= 5156\nIGJpbGxpb24= 5157\ndmFudA== 5158\nIGZvcnRo 5159\nIG1hdGg= 5160\nYWx5 5161\nIGJlaGF2aW9y 5162\nIE1hcw== 5163\na2Fu 5164\nIERheQ== 5165\nIGJsZXNz 5166\nIGd1dA== 5167\nIEhpZ2g= 5168\nb3g= 5169\nIGRyZXNz 5170\nIGplZA== 5171\n6K8= 5172\n5ZY= 5173\nIGV4cGVyaWVuY2Vz 5174\naXN0YQ== 5175\nIGZpZ2h0aW5n 5176\n5bc= 5177\nINGB0Lo= 5178\nIG1vc3RseQ== 5179\nYXVzZQ== 5180\nIHBpY3R1cmVz 5181\n0LXQvdGC 5182\nIG1hZA== 5183\nIG1vZGVscw== 5184\n0YjQtQ== 5185\nIENvdW50 5186\nxYQ= 5187\nxYJv 5188\nZXB0 5189\nT00= 5190\nIEFO 5191\nIHRyb3VibGU= 5192\nNDA= 5193\nIGJpcmQ= 5194\ndWxhdGU= 5195\nIG11cg== 5196\nIHByb2R1Y2U= 5197\nIG1hcnJpZWQ= 5198\nYml0 5199\nIHRoZW9yeQ== 5200\n7Zg= 5201\nIGxlYWRlcg== 5202\nIExhc3Q= 5203\nQUE= 5204\n6LU= 5205\nIGltYWdlcw== 5206\nIGV4cGFuZA== 5207\nIFBvcg== 5208\nIHB1cmNo 5209\nIFNhbg== 5210\nIENocmlzdG1hcw== 5211\nIEF1c3RyYWw= 5212\nIHdpZA== 5213\nIE1pc3M= 5214\nIGtub3dpbmc= 5215\nIHpl 5216\nc2hpcA== 5217\na3U= 5218\n0YXQvtC0 5219\nIEluc3RhZ3JhbQ== 5220\nIEluZGlh 5221\nIGVzdGE= 5222\nIENhbGlmb3Ju 5223\nIDcw 5224\nIGRyYWc= 5225\nIGJydXNo 5226\nIG5hbWVz 5227\nQW5k 5228\nIHlv 5229\naWxsYQ== 5230\nIHNjaGVk 5231\nIGRlc3Ryb3k= 5232\neWVhcg== 5233\nIHZhbW9z 5234\nINmE 5235\nw6dh 5236\nIGZvcmdvdA== 5237\n0LjQtQ== 5238\nIHJhaXNl 5239\ncmVtZQ== 5240\n7ZW0 5241\nIEdpdmU= 5242\nIGNvbnRhaW4= 5243\ncmFi 5244\nIGdpZnQ= 5245\nINGB0L8= 5246\nIHJlcXVlc3Q= 5247\nIHNodXQ= 5248\nIGRlZ3JlZXM= 5249\nIGJlbmVmaXRz 5250\n0YvQtQ== 5251\nIHN0dWRpZXM= 5252\nIGVuZHM= 5253\nIGV2ZXJ5d2hlcmU= 5254\nIGhlcm8= 5255\nb3Bo 5256\nZXJyeQ== 5257\nIG1hdGVyaWFscw== 5258\nZW5lZA== 5259\nTkE= 5260\n5Y0= 5261\nIG11eQ== 5262\nIHdvcnNl 5263\nIE1hZA== 5264\nIGRlY2lzaW9ucw== 5265\naW9uZQ== 5266\nIGZvcmVpZ24= 5267\nbGF1Z2h0ZXI= 5268\naWJlcg== 5269\n0LXQvdC40Y8= 5270\n44WL 5271\nIHJlYWxpemVk 5272\nIGlnbg== 5273\nIHdlYWs= 5274\nIM68 5275\nIHNjYXJlZA== 5276\nIGFzc3Vt 5277\nQUs= 5278\n778= 5279\n77+9 5280\nIGNvdmVyZWQ= 5281\nIFNhdA== 5282\nINC+0L0= 5283\nIGluZGl2aWR1YWxz 5284\nIGNvbXBhcmVk 5285\nMTE= 5286\nIEFkZA== 5287\naWNsZXM= 5288\nIGNlcnQ= 5289\ncmFy 5290\nIGJyaWVm 5291\nIGFjdGl2aXRpZXM= 5292\nIGZhYg== 5293\nYmFy 5294\nIGFzdA== 5295\nIE90aGVy 5296\nIGNsYXNzZXM= 5297\nIG9n 5298\nIG1pc3Npbmc= 5299\n6Z0= 5300\nd2Vycw== 5301\n16k= 5302\nIGludHJvZHVjZQ== 5303\nIGVxdWF0aW9u 5304\nIG5vbQ== 5305\nIHBhaW50aW5n 5306\ndXNoaW5n 5307\nIEFQ 5308\nIGVuY291cmFnZQ== 5309\nIHNoaXA= 5310\naXR0ZWU= 5311\naXZlcnNl 5312\nb3Rh 5313\nbmFt 5314\nIGV4ZXJjaXNl 5315\nINCt 5316\nIG5hcw== 5317\nIHRob3VzYW5kcw== 5318\nIENhbGlmb3JuaWE= 5319\nIHNlcw== 5320\nIHJvdw== 5321\nnog= 5322\nIHBhbmRlbWlj 5323\nIHNraWxs 5324\nYmVs 5325\nIGRpcmVjdG9y 5326\nIG1pbGs= 5327\nIG51dA== 5328\nIG1vdGlvbg== 5329\nIGNsb3NlZA== 5330\n6Kg= 5331\nIGNyZWRpdA== 5332\nYWhy 5333\nIGNoZWVzZQ== 5334\nIGFsdGVybg== 5335\naW1hdGVseQ== 5336\nIHN1c3Q= 5337\nIFRyYQ== 5338\nIGdsYWQ= 5339\nIGhpZ2hseQ== 5340\nIHdh 5341\nIHJlZHVjZQ== 5342\nIGJsZQ== 5343\nYWRvcg== 5344\naW5hdGVk 5345\naW9uZXM= 5346\nY2llbnQ= 5347\nIGRlcGVuZGluZw== 5348\nIHNoYXJpbmc= 5349\nIGNhdWdodA== 5350\ncmFlbA== 5351\nIG1laHI= 5352\nIHBhc3Npb24= 5353\n55s= 5354\nIHJ1 5355\nIGZhcm0= 5356\nVEk= 5357\nYXZlcw== 5358\nIFJvYg== 5359\nIEJybw== 5360\nIG1vdGl2 5361\ncmV0Y2g= 5362\ncnVwdA== 5363\nIEJpZw== 5364\nIGFsbGU= 5365\nIGV0dA== 5366\ndWJz 5367\nIEphcGFuZXNl 5368\nIEhhbGw= 5369\n0LjQu9C4 5370\nQVVESUJMRQ== 5371\n56w= 5372\nIGNlbGxz 5373\naWth 5374\nZWxpbmU= 5375\naWxlcg== 5376\nIOyj 5377\nIHNreQ== 5378\nSU5BVURJQkxF 5379\nZW5kZQ== 5380\nYXB0ZXI= 5381\nIHBpbg== 5382\nIGdhdGhlcg== 5383\naG9s 5384\nbGVjdGlvbg== 5385\nIHN5bg== 5386\nIHBsdWc= 5387\ncm91bmQ= 5388\nIHVuaXZlcnNpdHk= 5389\naGli 5390\nIGZhbnRhc3RpYw== 5391\na24= 5392\nIGhvbGU= 5393\nIFJlbWVtYmVy 5394\naW5jdA== 5395\nYWtz 5396\nQ0g= 5397\nIGJyb2tlbg== 5398\nIHN0cmF0ZWc= 5399\nIGFsaXZl 5400\nIHRhbms= 5401\nIGNhcnQ= 5402\ncmF0ZWQ= 5403\ncmll 5404\nIFN0ZXA= 5405\nIEV2ZXJ5dGhpbmc= 5406\nIGJvdW5k 5407\nIHNvYnJl 5408\nIGN1c3RvbWVy 5409\noYw= 5410\ndXJn 5411\nIEJpbGw= 5412\nTGE= 5413\nd2hhdA== 5414\nIHJlYWN0aW9u 5415\nIHNlc3Npb24= 5416\nIHBsYW5z 5417\nIOydtOugh+qyjA== 5418\nIGRvd25sb2Fk 5419\n7Jk= 5420\ndWVy 5421\nIGNhYg== 5422\nIGluc3Ry 5423\naWZ5aW5n 5424\nIE5pY2U= 5425\nIHRlYW1z 5426\nxLFs 5427\nIGdvYWxz 5428\naXNjaA== 5429\nIHRyYW5zcG9ydA== 5430\nIGFuaW1hbA== 5431\nIGNvc3Rz 5432\nIGNhbGxz 5433\nIHNlaHI= 5434\n7Ig= 5435\ncmlhbg== 5436\nIGRpYWw= 5437\nIHdlYXRoZXI= 5438\n4LmA 5439\nINCy0L7Rgg== 5440\nIFBsYXk= 5441\nIHNoYXJlZA== 5442\nIHNtb290aA== 5443\nYWJh 5444\nIGxlYXZlcw== 5445\n4K6p 5446\nIGNvbmNlbnQ= 5447\nIHNoaWZ0 5448\nIOuQmA== 5449\nIEdvdmVybg== 5450\nIGRlbW9uc3Q= 5451\nIGJ1dHRlcg== 5452\nIOyXrA== 5453\nIHNhdGlzZg== 5454\niOus 5455\nIHJlY29nbml6ZQ== 5456\nIEZyZW5jaA== 5457\nIHZvbHVtZQ== 5458\nw6RuZA== 5459\n0YPQvA== 5460\nIOynhA== 5461\nIEtlZXA= 5462\nb3dh 5463\naXBwZWQ= 5464\n0YHRgtGA 5465\nIGRldGVjdA== 5466\nIM+D 5467\nIGxpZnQ= 5468\nIGNsb3RoZXM= 5469\nIFN0b3A= 5470\nw7U= 5471\nbWV0 5472\nIGNsaW4= 5473\nIGFycg== 5474\nZnJpZW5k 5475\nIHN0dWNr 5476\nWWU= 5477\naGFuZA== 5478\ndW1h 5479\nIHNjcmk= 5480\nIGZ1Y2tpbmc= 5481\nY3RvcnM= 5482\n16o= 5483\nIGpvaW5pbmc= 5484\nIGNldHRl 5485\nINij 5486\nIFdoaXRl 5487\nIGlocg== 5488\nzq0= 5489\nIGluY2x1ZGVk 5490\nZXNzbw== 5491\nIGFjYWQ= 5492\nYnVt 5493\nIHNhYg== 5494\nINC00LvRjw== 5495\ndWZhY3Q= 5496\nIFJlcHVibGlj 5497\ncmlt 5498\nIHllbGxvdw== 5499\nIGxpbWl0ZWQ= 5500\nVEVS 5501\nIFR5 5502\nIG5vdGVz 5503\ndmVzdA== 5504\n0LjQtw== 5505\nYWxlZA== 5506\nIHBoYXNl 5507\nYW5kYQ== 5508\nIE1vbQ== 5509\nUkk= 5510\nIGltbWVy 5511\nbWFs 5512\nIGluag== 5513\nIHlhbmc= 5514\ndWRpYmxl 5515\n0LDQsw== 5516\nIHNldHQ= 5517\nIG1hZ2lj 5518\nIGVuc3VyZQ== 5519\nIHNwcmluZw== 5520\nIHNob2Nr 5521\nIHdoZWVs 5522\n0L7Qs9C00LA= 5523\nIGNhbmNlcg== 5524\nIHJvb3Q= 5525\n0JA= 5526\nZ2VuY3k= 5527\nIOuN 5528\naWk= 5529\nIG91dHB1dA== 5530\nIGNvbW1pdA== 5531\nIHdvcmtlcnM= 5532\n7JWE7JqU 5533\nINGB0LDQvA== 5534\ndmV5 5535\nIHBldQ== 5536\nIGNpdmls 5537\naXNj 5538\nIGJyaW5ncw== 5539\n0YDQsNCy 5540\nYW5pYQ== 5541\nxIE= 5542\nY3JhZnQ= 5543\nbWJvbA== 5544\nIGludGVsbGln 5545\nYmk= 5546\nYWNpbmc= 5547\neW91 5548\nIGJlY29taW5n 5549\nIERlcg== 5550\nZW1h 5551\nIGluZ3JlZA== 5552\nIGNvbW1hbmQ= 5553\nIHVwZGF0ZQ== 5554\nIHByZW0= 5555\nIG9wZW5lZA== 5556\nhKQ= 5557\n0LXQvdC40LU= 5558\nIGdhcmQ= 5559\nIHN0YXRlbWVudA== 5560\nIHNjcmV3 5561\nIHByb3Rl 5562\nIGNhcmRz 5563\nIHRhc2s= 5564\nIGV2ZW5pbmc= 5565\nIHN0aXRjaA== 5566\naW5lbg== 5567\nIEJlcg== 5568\nbWFyaw== 5569\nIERhZA== 5570\nINC10YHRgtGM 5571\nINee1w== 5572\n7JeI 5573\nIGJhbg== 5574\nIGNsaW0= 5575\nIGZyZWVkb20= 5576\nIG5vcm1hbGx5 5577\n0LXRgdGM 5578\n5aY= 5579\nIHByb3ZpZGVk 5580\nIOyekA== 5581\nIOyVhOuLiA== 5582\nIEtpbQ== 5583\naWVkZXI= 5584\n7J2M 5585\nIGNpdGl6 5586\nIGJpa2U= 5587\nIGJhaw== 5588\nIG5vaXNl 5589\nIGNsaW1hdGU= 5590\naXplcw== 5591\nIGluY3JlYXNpbmc= 5592\nIFRIRQ== 5593\nIGxpcXU= 5594\nIHBlcnNvbmFsbHk= 5595\nZWY= 5596\ncmVzcA== 5597\nIGxlZ3M= 5598\naW5kZXI= 5599\nIHBlZA== 5600\nIOunjg== 5601\nIGRlcGVuZA== 5602\nIHZhcmlldHk= 5603\nIElzcmFlbA== 5604\nIHdhc2g= 5605\n5YY= 5606\nIHF1aWV0 5607\nIEphbWVz 5608\nIEpldw== 5609\nIGZvcmV2ZXI= 5610\nIEludA== 5611\nIGNvdW50ZXI= 5612\ndXJhbmNl 5613\nIEFueXdheQ== 5614\nY2FyZQ== 5615\nIE9ubHk= 5616\nY2nDs24= 5617\nYWRp 5618\nIEV2 5619\n64uI6rmM 5620\nIM6x 5621\nIHNsb3dseQ== 5622\nINC+0LQ= 5623\nIG5vdGljZWQ= 5624\naWVyZW4= 5625\nIGZlbGw= 5626\nINCR 5627\nIG3Dqm1l 5628\nIHdoZW5ldmVy 5629\nISk= 5630\nIEh5 5631\n5bw= 5632\nb3Jkcw== 5633\ndXNpb24= 5634\nIFN0YXI= 5635\nIO2Y 5636\nIE1hYw== 5637\naXZlbg== 5638\nIOyLnA== 5639\nIOyXhg== 5640\nIFR1cg== 5641\nIGdlcg== 5642\ncmlz 5643\nIHZleg== 5644\nINC70Y4= 5645\nIHZlcnN1cw== 5646\n2KfY 5647\nb2NvbGF0ZQ== 5648\nIHBsYW5l 5649\nIHpv 5650\nIHN1aXQ= 5651\nVGhpcw== 5652\nIG5lcnY= 5653\nIEFjYw== 5654\n0YPQtg== 5655\n7IKs 5656\nbmg= 5657\nZW1l 5658\nIGF1c3M= 5659\nIG1lYXM= 5660\nIHRyw6hz 5661\nz4k= 5662\n0YHQu9C4 5663\nIEFydA== 5664\nIFNlY29uZA== 5665\n0L7Qu9GM0LrQvg== 5666\nY2hv 5667\naXRlY3Q= 5668\n0LXRgdGC 5669\nIGJvc3M= 5670\nIGluY29tZQ== 5671\noKQ= 5672\nIHNoYWQ= 5673\nIGFwcHJvcHJp 5674\nIE1hbA== 5675\nb3B0 5676\nIGFydGlzdA== 5677\nIHBsYXlz 5678\nb3RoZXJz 5679\nIEludGVy 5680\nIHZpcnVz 5681\nIGh1bmc= 5682\nIGNvbnN0YW50 5683\nIHNjcmlwdA== 5684\nIHNub3c= 5685\ndWxm 5686\na2V0 5687\nIGRldmljZXM= 5688\nIG1ldGFs 5689\naWdodHM= 5690\n7IS4 5691\nIHNhbGVz 5692\nIHZlZ2V0 5693\nIGNvbGxlY3Rpb24= 5694\nIHZpYQ== 5695\na2Vy 5696\nIGdvdHRlbg== 5697\nT1c= 5698\nacOpbg== 5699\nIGFjY3Vy 5700\nIHdhdmU= 5701\ndWx0eQ== 5702\nIEFpcg== 5703\nIGxlYWRpbmc= 5704\naWNpbmc= 5705\nIGNlbnRyYWw= 5706\nIENocmlzdGlhbg== 5707\nZnI= 5708\nIEFsdGhvdWdo 5709\nIHNvbmdz 5710\nIGZpZg== 5711\n0L3Ri9GF 5712\nIGJlbG9uZw== 5713\nb3NzaWJsZQ== 5714\n7LA= 5715\nIHBob3Rvcw== 5716\naXNs 5717\nIHJlbGF4 5718\nc2E= 5719\nVVNJQw== 5720\n6rc= 5721\nIG1hbnVmYWN0 5722\nIFR3aXR0ZXI= 5723\nIGRhbmdlcm91cw== 5724\nIGh5ZA== 5725\nbGVhcg== 5726\naWFudA== 5727\nIOKApg== 5728\nIHN1ZGRlbmx5 5729\nIGxhdWdo 5730\nIGFuZ2xl 5731\nIEdvdA== 5732\nIHdvcnJpZWQ= 5733\n0L7QtQ== 5734\nIHBhcA== 5735\nIE1hcnQ= 5736\nZW5v 5737\nIGJhdHRlcnk= 5738\nINC/0L7RgQ== 5739\nIGxpZ2h0cw== 5740\nIGFybXM= 5741\nIEFicw== 5742\nbWVz 5743\n4oCT 5744\ndXNldW0= 5745\nIHRlYQ== 5746\nIE1pYw== 5747\nIGZvcm1lcg== 5748\nb2dyYXBoeQ== 5749\nIGFwcGxpY2F0aW9ucw== 5750\nIERpcmU= 5751\nIGZlZWRiYWNr 5752\naXRjaGVu 5753\neW9ydW0= 5754\ndWVk 5755\naWd0 5756\nxrDhuw== 5757\nb3NpdGlvbg== 5758\nIERlbA== 5759\nIO2VmOs= 5760\nIEJhY2s= 5761\nYWRz 5762\nIHByaW1l 5763\n7KO8 5764\n7KOg 5765\n15E= 5766\nIG11dA== 5767\nXS4= 5768\nINCX 5769\nbG9j 5770\na2lu 5771\nIGV4cGVydA== 5772\nIGFscmlnaHQ= 5773\ndW5ncw== 5774\nIHN1cHBseQ== 5775\nIGxlYWRlcnNoaXA= 5776\nIEZyYQ== 5777\nIHR5cGljYWxseQ== 5778\nIHNlbA== 5779\nIHRyZWVz 5780\nIDIy 5781\naGFy 5782\nIHdvcnN0 5783\nIGJ1c3k= 5784\nYW50bw== 5785\nIFVw 5786\nIEJhcw== 5787\nIHByZXNlbnRhdGlvbg== 5788\nIHN0cmFuZ2U= 5789\nIHRoaW4= 5790\n0YLQtQ== 5791\nIHZlaGljbGU= 5792\nINC00L4= 5793\nY2VsbGVudA== 5794\nNzA= 5795\nIHRpcmVk 5796\nIGNyaXNpcw== 5797\nIHRpbnk= 5798\nYXN5 5799\nIHJhbg== 5800\n6Yc= 5801\nIGZvcmNlcw== 5802\nINC+0Yc= 5803\nIGlkZW50aWZ5 5804\nIGFzc2Vzcw== 5805\n0LjRgtC1 5806\nU0U= 5807\nIGNyZWF0aXZl 5808\n558= 5809\nIGRlcGFydG1lbnQ= 5810\nIGluaXRpYWw= 5811\nIERhbQ== 5812\nYWt0 5813\ndmVyZQ== 5814\nIGluZmVjdA== 5815\nIHB1bXA= 5816\n4bqh 5817\nIHZpZWw= 5818\nIHJhcmU= 5819\nIGRvdA== 5820\nYXNoaW9u 5821\nZW1wbA== 5822\nIGZsZXg= 5823\nIGtvbg== 5824\nIHRydWNr 5825\nIGxlY3Q= 5826\nIHBsYXN0aWM= 5827\nbGF3 5828\nIGxpa2Vz 5829\nIHJvdWdo 5830\nIE1BVA== 5831\n7Z6I 5832\nIGNvbW1lcg== 5833\nIGFzc2U= 5834\nIGNha2U= 5835\nIGFjdGlvbnM= 5836\nIGFkbQ== 5837\nIG90aGVyd2lzZQ== 5838\nIEhlYWx0aA== 5839\nIGNvbGxl 5840\n4LmA4Lg= 5841\nIHJ1Yg== 5842\n5pQ= 5843\nIHNjcg== 5844\nIHp1bQ== 5845\nIEhpbQ== 5846\nIGNoYW1w 5847\nIGNvbmNlcm5lZA== 5848\nIDUwMA== 5849\nIHBsYXRl 5850\nIE91dA== 5851\nIGRvbmM= 5852\nIGVxdWlwbWVudA== 5853\nIHRhdWdodA== 5854\nbGxlZA== 5855\nIO2Z 5856\naXZh 5857\nIG1vdG9y 5858\nwrs= 5859\nIGd1aWRl 5860\n5Yk= 5861\nIHN0b3BwZWQ= 5862\nIHJhdA== 5863\nIGxhYm9y 5864\nIGFpbQ== 5865\nIHByZXBhcmU= 5866\nINGI 5867\nIHNob290aW5n 5868\nYW5uZWQ= 5869\nY3JpcHQ= 5870\nIGVuZW15 5871\nIGRlcGVuZHM= 5872\nIG5hdg== 5873\nIGJlcg== 5874\nIGxhbmRz 5875\nIHVuaXZlcnM= 5876\naXU= 5877\nIGZhY3Rvcg== 5878\nb2tpbmc= 5879\nIGNhcmJvbg== 5880\nYnV0 5881\nIExvdmU= 5882\nZWxk 5883\nIM61 5884\nIGdh 5885\nIMOpcw== 5886\nIGJyZWFk 5887\nIHZvbHQ= 5888\n7Yo= 5889\nIHdhc3Rl 5890\nIGtlZXBz 5891\nIHN0b3I= 5892\nIGhvbm9y 5893\nIHVubGVzcw== 5894\nIGNvbHVt 5895\nIOuMgA== 5896\nIHBsYW50cw== 5897\nWWVhaA== 5898\nIGluY2x1ZGVz 5899\nIG94 5900\nIHBldXQ= 5901\n66eM 5902\n7IOB 5903\naXN0cnk= 5904\n4Lix 5905\nIERlcGFydG1lbnQ= 5906\nYW50YQ== 5907\nIGZpbmdlcg== 5908\nIHN0cmV0Y2g= 5909\nIHN5bWJvbA== 5910\nIG5laWdoYm9y 5911\n5qw= 5912\n6rCE 5913\nfn4= 5914\nINGC0Ys= 5915\nIEFiZXI= 5916\na2Vz 5917\nIG1hc3NpdmU= 5918\nIENI 5919\nIFNhbA== 5920\n16A= 5921\nIGR5bmFt 5922\nYWNoZQ== 5923\nIFByZQ== 5924\nIG1vbml0b3I= 5925\nZW50ZWQ= 5926\nRU8= 5927\nIHJhaXNlZA== 5928\naXN0aWNz 5929\n2qk= 5930\nIHZvdQ== 5931\naXRlbg== 5932\nobA= 5933\nIGJ1c2luZXNzZXM= 5934\nIGVhcm4= 5935\nIG1vYmlsZQ== 5936\naWRhZGU= 5937\nIGhhYmU= 5938\neXI= 5939\nbGljdA== 5940\nIGNvbmR1Y3Q= 5941\nIGZlZGVyYWw= 5942\nIHdv 5943\nYnU= 5944\nIG5vbmU= 5945\nIHRlYWNoZXJz 5946\nINin2YTY 5947\naWRlbnRz 5948\n2KfZhA== 5949\nIHRyZW5k 5950\n0LXQtg== 5951\nIGFsYnVt 5952\nIG1pY2g= 5953\nYmFzZWQ= 5954\n4Li1 5955\nIHRyYW5zaXRpb24= 5956\nINC90L4= 5957\nw7Vlcw== 5958\naG9zdA== 5959\nZWR5 5960\nIFByb2Y= 5961\ncGFu 5962\naWpu 5963\nIGNhcGFjaXR5 5964\ndW5kbw== 5965\nINeR1w== 5966\nIGJyZWF0aA== 5967\nINC80LXQvQ== 5968\nIG3DvA== 5969\n7Zk= 5970\nIEF1dA== 5971\naGluZ3Rvbg== 5972\nIG5vcg== 5973\nIGdhaW4= 5974\ncG9pbnQ= 5975\nWWVz 5976\nINiq 5977\nIE5h 5978\nw6Vy 5979\nIGnDpw== 5980\nIE1hcnk= 5981\nIHNwaW4= 5982\nIGFudGk= 5983\nIHNvbWVob3c= 5984\nIGxhd3M= 5985\nIG1vbWVudHM= 5986\nIGdyZQ== 5987\nIG1vdmVz 5988\nIFdvdWxk 5989\nIHByZWRpY3Q= 5990\nIHZyYQ== 5991\nIDIwMTk= 5992\ntoQ= 5993\nIGZ1bmRhbWVudA== 5994\nMjU= 5995\nIHB1cmU= 5996\nIHdvdw== 5997\nIGlzbGFuZA== 5998\nIGludmVzdG1lbnQ= 5999\nIGJhdGg= 6000\nIFlh 6001\nIGhhcmRlcg== 6002\nIHRpcHM= 6003\n5Zc= 6004\nIGVsZWN0cm9u 6005\nIEJvYg== 6006\nIGJvbmQ= 6007\nb2RpZXM= 6008\nIEF1Zw== 6009\nIGdpYnQ= 6010\nIGNoYWly 6011\nIHR3aWNl 6012\nd29vZA== 6013\nIGNsYXI= 6014\nIG1hc2s= 6015\nIGhvbmVzdGx5 6016\nIDIwMTg= 6017\ndGllcw== 6018\nJyw= 6019\nIHBlbnM= 6020\nIHN1cnByaXNlZA== 6021\nIGNvbW11bmljYXRpb24= 6022\nIHNwcg== 6023\nIHdob3Nl 6024\nIHN0YXJz 6025\n15DX 6026\nIOKAiw== 6027\nIHByb3Blcmx5 6028\nIGdyZXc= 6029\nb3Npbmc= 6030\nIGRpdmVycw== 6031\nQUQ= 6032\nIGVtcHQ= 6033\nIGV4cHJlc3Npb24= 6034\n4bq/ 6035\nIFBhbA== 6036\nIGp1c3RpY2U= 6037\nIHBhaXI= 6038\nd28= 6039\nIHNlYXQ= 6040\nb3J0ZXI= 6041\nIGxpbmtz 6042\nIE1lcg== 6043\nIHJlbmQ= 6044\n0L3QvtC1 6045\ndXBpZA== 6046\nIEhlbA== 6047\nIE1hcmNo 6048\nIExv 6049\n0YHRjA== 6050\nIGhhc24= 6051\nIGV2YWx1 6052\naWxvcw== 6053\nIGZ1bmRpbmc= 6054\nIHZlbg== 6055\ndWFu 6056\nIE1hc3Rlcg== 6057\nIE9s 6058\nIEZyZQ== 6059\nIHlhcA== 6060\nIFNpcg== 6061\nc2No 6062\nIG1pc3Rha2U= 6063\nYW1hbg== 6064\nIGRpbm5lcg== 6065\nIFdhc2hpbmd0b24= 6066\nIG9yZ2FuaXphdGlvbnM= 6067\nINC20LU= 6068\nYXZpbmc= 6069\nIHbDrQ== 6070\nIGJpcnRoZGF5 6071\nIGJlYXI= 6072\nINmB 6073\nIGFmZm9yZA== 6074\nIHJldmVu 6075\nIHJlbGF0aW9uc2hpcHM= 6076\ncm91Z2g= 6077\nIFRpbWU= 6078\nIHRhZw== 6079\nIFN1bg== 6080\ndWFyeQ== 6081\nIFBv 6082\nY2Fy 6083\nYWJpbGl0aWVz 6084\nIHByaXNvbg== 6085\nIGxpYw== 6086\n7KCV 6087\naWRkZW4= 6088\nIHNwZWNpZXM= 6089\n6bs= 6090\nIGZpcm0= 6091\nIHNjb3Jl 6092\nIGRpdA== 6093\nIHNwZWN0 6094\nIHBlbA== 6095\nIGNvbXBsaWNhdGVk 6096\nIHJhbms= 6097\nIG9wcG9zaXRl 6098\nIHBpY2tlZA== 6099\nINC60L7QvQ== 6100\nZWxlcg== 6101\nIG1pZw== 6102\nIFNs 6103\nIE5ldA== 6104\nIG5lY2s= 6105\nIEZyYW5jZQ== 6106\nIHRlY2huaWNhbA== 6107\n4Lih 6108\nIG1pbGVz 6109\nIHByaW1hcnk= 6110\nIHNlaW4= 6111\nc2Vz 6112\nIGxhdWdocw== 6113\nYnJh 6114\nxZtjaQ== 6115\ncmlhZ2U= 6116\nIG5pYw== 6117\nZXRlcnM= 6118\nIMOq 6119\nb2xvZ2llcw== 6120\nIElT 6121\ncmFk 6122\ndWRv 6123\nxLFuZA== 6124\nbWFy 6125\nIGV4Y2g= 6126\nIGNvbXBldGl0aW9u 6127\nIGF1c3Np 6128\nIFNlcnY= 6129\nIHJlbnQ= 6130\nIGNob2NvbGF0ZQ== 6131\nIHdpZWRlcg== 6132\nIG5lYXJseQ== 6133\nIHNwZWVjaA== 6134\nIHVuYw== 6135\nIHBhcmFt 6136\nIEJyaXRpc2g= 6137\nIHJlbWFpbg== 6138\n4LiB 6139\ndXJ0 6140\nINi5 6141\nIGNyYWNr 6142\nYWlscw== 6143\nIHByb21pc2U= 6144\nIHBheWluZw== 6145\nacOf 6146\nIGFkYXB0 6147\n0LDQu9Cw 6148\nIG1vdmllcw== 6149\nIHdpcmU= 6150\nn6w= 6151\nIHRlcnJpYmxl 6152\nIHPDsw== 6153\nIHBlcmZlY3RseQ== 6154\nb3JkaW4= 6155\nIGrDoQ== 6156\nIGltcG9zc2libGU= 6157\nIFRocmVl 6158\nIG5o 6159\nIHR1cm5pbmc= 6160\ncnVt 6161\nIEJlbA== 6162\naWdn 6163\nIHJlc3BvbnNpYmxl 6164\n0LjQuQ== 6165\nIGluY3JlZGlibHk= 6166\nd2k= 6167\naWFubw== 6168\nIGh1bWFucw== 6169\nIMOH 6170\nIHNldHRpbmdz 6171\nIGpveQ== 6172\nb290 6173\nIGRlYWxpbmc= 6174\naWxsZWQ= 6175\nIHN1cnJvdW5k 6176\nIGZvbGxvd2Vk 6177\nIHBvc3NpYmx5 6178\nIGluaXRp 6179\nc3Rlbg== 6180\nIHByb3M= 6181\nIGNhbmRpZA== 6182\nIGFzc2lnbg== 6183\nIHZpb2xlbmNl 6184\nV2VsbA== 6185\nIHJpc2U= 6186\nUFM= 6187\nIHRhbWLDqW0= 6188\nIOuTpA== 6189\naWFuY2U= 6190\neWFu 6191\nIGF1ZGlv 6192\nIEJldA== 6193\nIEFtZXJpY2Fucw== 6194\nIEFzcw== 6195\naXNjaGVu 6196\n7J6F 6197\nIHVsdGltYXRlbHk= 6198\nIHBvbGlj 6199\nIG1ham9yaXR5 6200\nIEZpbmFsbHk= 6201\nZXJhcA== 6202\nIGd1YXJk 6203\nIE1BVFQ= 6204\nIGJyb3du 6205\n0LzQuA== 6206\nIGNoYQ== 6207\nIEhvbHk= 6208\nIG5lcnZvdXM= 6209\naXBwaW5n 6210\nxJlk 6211\nIFNh 6212\nk5zr 6213\ntoA= 6214\nbGll 6215\nIG51Yw== 6216\nIEFwcg== 6217\n6Zs= 6218\nIEtvcmVh 6219\nZWdv 6220\nIENhbmFkYQ== 6221\nIGvDtm5uZW4= 6222\nIGNvbXBhcg== 6223\nIGdhbno= 6224\nIE1haXM= 6225\nIHRoZW1l 6226\nIGtp 6227\nIGRyYXdpbmc= 6228\nYXpvbg== 6229\nIE9mZg== 6230\ndHQ= 6231\nIFdpbmQ= 6232\nIHRvZG9z 6233\nIG9idmlvdXM= 6234\n0L3QsNGP 6235\nSU0= 6236\nINCg 6237\nd2VsbA== 6238\nIGJsb3c= 6239\nIGhvb2s= 6240\nIGNpcmNsZQ== 6241\nIOuztA== 6242\nIGFyY2hpdGVjdA== 6243\nIEty 6244\nIGPDsw== 6245\nIHByb3RlY3Rpb24= 6246\nZWdh 6247\n5Yc= 6248\nIHdhdGNoZWQ= 6249\nIGFuc3dlcnM= 6250\nIGRpZXQ= 6251\naXZv 6252\nIHBvd2Rlcg== 6253\nIHlvdXJz 6254\nIGhpZ2hlc3Q= 6255\nRkY= 6256\n5bo= 6257\nIGJveXM= 6258\nw7Z5bGU= 6259\nIGx1bmNo 6260\nIElJ 6261\nIHNldHM= 6262\nIG1vbGU= 6263\n24E= 6264\nIHdpbnRlcg== 6265\nIGx1Y2t5 6266\nIHJlc3BvbnNpYmlsaXR5 6267\nIHNpZ25hbA== 6268\nIHdvbmRlcmluZw== 6269\nIGF4 6270\nIGNvb2tpbmc= 6271\n0L7QstC+0YA= 6272\nbGVn 6273\nINC/0L7Rgg== 6274\nIHN1cnByaXNl 6275\nIGRlbW9jcg== 6276\nIGxvb3A= 6277\nIGphZw== 6278\nIGN1cmlvdXM= 6279\nIG1hcmtldGluZw== 6280\n0J0= 6281\nYXJvbg== 6282\nIEFwcGxl 6283\nIHZpcnR1YWw= 6284\nIDE5OA== 6285\nbm9vbg== 6286\nIE1ldA== 6287\n0L7RgdGC0L4= 6288\n0L7QsdGL 6289\naXR1 6290\nIEF3 6291\nIGJ1eWluZw== 6292\nIHJlc3RhdXJhbnQ= 6293\nIEJ1ZA== 6294\nIGRvdWJ0 6295\nIGdyYW50 6296\nIHZlcmQ= 6297\nIGNhc2g= 6298\nIGZhY3VsdHk= 6299\nVGhhdA== 6300\nIEVpbg== 6301\nIHdlZA== 6302\naXRuZXNz 6303\nIE1hZw== 6304\nbmVs 6305\nIG5hcnI= 6306\nIGFjY2lkZW50 6307\nIG1lZGl1bQ== 6308\nZW1lbnRz 6309\nIGNyb3c= 6310\nbmlnaHQ= 6311\n7J28 6312\nIGxpYnJhcnk= 6313\n0LDRjtGC 6314\nIHRhbWJpw6lu 6315\nIHJlZmVyZW5jZQ== 6316\nIGZvdXJ0aA== 6317\naG91c2U= 6318\ndmVudGlvbg== 6319\nIGZpbGxlZA== 6320\nIENvdXI= 6321\naWJy 6322\nIG5n 6323\nIGRldmVsb3Bpbmc= 6324\nIHByb3ZpZGVz 6325\nIHBvbGw= 6326\nIHRyYWZmaWM= 6327\nYXJlbnRseQ== 6328\n4K6f 6329\nIGZvcm1z 6330\nIGNsaWVudA== 6331\nIGdlbnRsZQ== 6332\nIG11c3M= 6333\nIENvbmdyZXNz 6334\nIEluZGlhbg== 6335\nY2Vhbg== 6336\nIHBpbA== 6337\nIGN6eQ== 6338\nc3Rvb2Q= 6339\ndXR5 6340\nIG7DpA== 6341\nIHNwZW5kaW5n 6342\nIGNvbnN0cnVjdGlvbg== 6343\naW5hdWRpYmxl 6344\nIOuniA== 6345\niOustA== 6346\nIOyDnQ== 6347\nb21h 6348\nb3Nlbg== 6349\nYWdv 6350\nIGxhcmdlc3Q= 6351\n44WL44WL 6352\nIHVuaXZlcnNl 6353\nYmVz 6354\nb3Nh 6355\nINC10LPQvg== 6356\nIGR1ZGU= 6357\nIE1BUg== 6358\nIGluZGVlZA== 6359\nzrXOuQ== 6360\nIG1hbmFnZWQ= 6361\nIFNob3VsZA== 6362\nU28= 6363\nIGFwcGxpZWQ= 6364\nIGZhaXJseQ== 6365\nIERlbg== 6366\nIGFuYWx5 6367\nIGNvbnN0YW50bHk= 6368\n0YHQvw== 6369\nSG93 6370\nIFNheQ== 6371\nZW5jaWVz 6372\nIFBD 6373\nIGVnZ3M= 6374\n4K6w 6375\nIGV0aA== 6376\nIEVudMOjbw== 6377\naW5hcg== 6378\naW90 6379\nIGN6 6380\nIEV1cm9wZWFu 6381\nIEFN 6382\nIGPDoQ== 6383\nIHJhZGlv 6384\np4w= 6385\nIGhpZGU= 6386\nIFN0YXJ0 6387\nIGNsdWI= 6388\nIEhvcGU= 6389\nIGVmZm9ydHM= 6390\nbHVzaW9u 6391\nIGNpdGllcw== 6392\naG9uZQ== 6393\nIHJlYWNoZWQ= 6394\nIGd1aWQ= 6395\ncm9pZA== 6396\nIGhhcm0= 6397\nIGN1dHRpbmc= 6398\nIGJ1bA== 6399\nMTg= 6400\naWVzdA== 6401\nIE1leA== 6402\nIGlyb24= 6403\nIGFmdGVybm9vbg== 6404\nIGhhbGw= 6405\nIHByenk= 6406\nIGdvc2g= 6407\nIGluZmx1ZW5jZQ== 6408\nINCy0LjQtA== 6409\nIGluY3JlYXNlZA== 6410\nIE1pbmlzdGVy 6411\nIGRpc2Np 6412\nIFBldGVy 6413\nIHZlcnQ= 6414\nIG1lbnU= 6415\nIHNlbGxpbmc= 6416\ndXJhbGx5 6417\nIHF1b3Rl 6418\nIMKh 6419\nIGNvbnRpbnVlcw== 6420\nbXByZQ== 6421\nIMWfZXk= 6422\naXR1dGlvbg== 6423\nINC90LDRgQ== 6424\nY2xlcw== 6425\nIEdlcm1hbg== 6426\nY3p5 6427\nINCj 6428\nQmU= 6429\nIGtpdGNoZW4= 6430\nIFRyeQ== 6431\naXBl 6432\nIGljb24= 6433\nYXJw 6434\nIHByb3ZpZGluZw== 6435\nIFRyYW5z 6436\nIHRlY2huaXF1ZQ== 6437\nIGjDpHI= 6438\nIGluZnJhc3Q= 6439\nIHN1c3A= 6440\nw7xjaw== 6441\naWNpcA== 6442\nINCV 6443\nIGNpbg== 6444\n7Ja06w== 6445\nIHByeg== 6446\nIGNvbXBvbmVudA== 6447\nIGJ5ZQ== 6448\nIEJpYmxl 6449\naXplcg== 6450\nQ2g= 6451\nIHNvbHV0aW9ucw== 6452\nIGFjY29tcGw= 6453\nIDIwMTY= 6454\nSUU= 6455\nIFRh 6456\nIGFzc3VtZQ== 6457\nIGxpcXVpZA== 6458\nIOuouQ== 6459\nIHF1YXJ0ZXI= 6460\nIGZlbWFsZQ== 6461\nIFRoaW5r 6462\nIHN0YXR1cw== 6463\naXR1dGU= 6464\nIGNvYWNo 6465\nIHJlaW4= 6466\nIGNvbWJpbmF0aW9u 6467\n6Lc= 6468\nIFRlcg== 6469\nIG9iamVjdHM= 6470\nIGRpc3RyaWN0 6471\nIG1ha2V1cA== 6472\nIG11cmRlcg== 6473\nd2Fz 6474\nZmVu 6475\nIGJvd2w= 6476\nIHB1Ymxpc2hlZA== 6477\nIHNwb3J0cw== 6478\nIGlkZW50aXR5 6479\nIHNlZW1lZA== 6480\nIGFjdGluZw== 6481\n0LvRjg== 6482\ncml4 6483\nIHVwbG9hZA== 6484\nIGhhc3Q= 6485\nIGJvYXQ= 6486\nIE1vZA== 6487\ncmlv 6488\nID0= 6489\nIGN5Y2xl 6490\nr7g= 6491\nIGxvdWQ= 6492\ndXN0ZWQ= 6493\nY29taW5n 6494\nIDIwMTc= 6495\nIG9udA== 6496\nIGxlZ2lzbA== 6497\nIHN0cnVjdA== 6498\nIFNvbWV0aGluZw== 6499\nIGNvbmZsaWN0 6500\nIHVwcGVy 6501\nIG1hbmFnZXI= 6502\nIG1vcnQ= 6503\nIGZyYQ== 6504\nIMSw 6505\nIE1pa2U= 6506\nIFdvcms= 6507\nIG7Dsw== 6508\ncGhlcmU= 6509\nIOyCrOs= 6510\nIExhbmQ= 6511\nIGZpbHRlcg== 6512\nIHByb21vdA== 6513\n5rA= 6514\nlbw= 6515\nIHJlY29yZGluZw== 6516\n150= 6517\nIGFzc29jaWF0ZWQ= 6518\nIGZ1ZWw= 6519\ndW5kZXI= 6520\nIGVsZWN0aW9u 6521\nIGVtcGxveWVlcw== 6522\nIENvbXA= 6523\n0YDRg9Cz 6524\nIFdv 6525\ncm9s 6526\nIHNhdmVk 6527\nIEhvbg== 6528\nIFZp 6529\nYWNh 6530\ncHJldA== 6531\nIHdldA== 6532\nIHN0dXBpZA== 6533\nIGxhZA== 6534\nIGZlc3Q= 6535\nIHdha2U= 6536\nINC40L0= 6537\nIGdyZWF0ZXN0 6538\nIEppbQ== 6539\nIHNlcmlvdXNseQ== 6540\nIOy5 6541\nIGZlZWxpbmdz 6542\nIDMwMA== 6543\naWF0aW9u 6544\nIGJlYXV0eQ== 6545\nIOyemA== 6546\nIHNhbg== 6547\nk6A= 6548\nIC0o 6549\nIGNvbnNjaW91cw== 6550\nINC00LXQuw== 6551\nYnll 6552\n55k= 6553\nTWFu 6554\nIGxldHM= 6555\nIHNob2Vz 6556\neWQ= 6557\nIGRpc2FwcGU= 6558\nIENvdW50eQ== 6559\nIFNjb3R0 6560\nIGJ1dHQ= 6561\nIGFxdcOt 6562\nIGNvbmZpZw== 6563\ncmVzcG9uZA== 6564\nTEFVR0g= 6565\nqeuLiOuLpA== 6566\nIGRpdmlkZWQ= 6567\nIGFjcXU= 6568\nIHpvbmU= 6569\nIGtvbW0= 6570\nYcOnw6Nv 6571\n7Kec 6572\nY3V0 6573\nIDIz 6574\nIG1heGltdW0= 6575\ncm9n 6576\nIHJ1bnM= 6577\nIGNvbXBvbmVudHM= 6578\nIGFycml2ZWQ= 6579\nIGNvbmZpZGVudA== 6580\n0YDQvtCy 6581\nIGhlaWdodA== 6582\nIHByb2NlZA== 6583\nRU0= 6584\nINCt0YLQvg== 6585\nIE1lbg== 6586\nIHRhbGtz 6587\nIGNvbmZpZGVuY2U= 6588\nIENocmlz 6589\nIGxlYWRz 6590\nIG5vc2U= 6591\nZmFsbA== 6592\nYmI= 6593\nIE5vdGhpbmc= 6594\naXNlcg== 6595\nIGluZGVwZW5kZW50 6596\nIG1pbm9y 6597\nIHN5bQ== 6598\nbGVu 6599\nY2llbmNl 6600\nIGZhc2hpb24= 6601\nIHNleHVhbA== 6602\nIGJ1bg== 6603\naGVyZQ== 6604\nIHNvaWw= 6605\nIGRpZXNl 6606\nIHNoYXA= 6607\nIGVtcHR5 6608\nIGpvdXJuYWw= 6609\nYWdvbg== 6610\nIFRoZWly 6611\nIHdlZWtlbmQ= 6612\nw610 6613\nIGVycm9y 6614\nIG5hcg== 6615\nw7g= 6616\n6Kk= 6617\nYW5jeQ== 6618\nIOyVig== 6619\nIGZvcmVzdA== 6620\nIGhhY2Vy 6621\nIG1pc3NlZA== 6622\nIGV2aWw= 6623\nIHN0b3JhZ2U= 6624\nIHNpbmdpbmc= 6625\naW5oYQ== 6626\nIGtub2Nr 6627\nIGltcHJlc3M= 6628\nINC+0YfQtdC90Yw= 6629\nIEdvbGQ= 6630\nIFN1cg== 6631\nIFBvcnQ= 6632\nIExvbmQ= 6633\nIGZhemVy 6634\nb3R5 6635\nb3Rv 6636\nIGFueA== 6637\nIFdpbGxpYW0= 6638\nIGV4aXN0aW5n 6639\ncGxhY2U= 6640\nIENE 6641\nzrM= 6642\nIENvbGxlZ2U= 6643\nbG9y 6644\nIEVhc3Q= 6645\nc2Vu 6646\nZmFjaA== 6647\nb2Z0 6648\nIGV4cGVyaWVuY2Vk 6649\nIGxvdmVz 6650\naW1t 6651\nIHBvbHk= 6652\nIGVzc2U= 6653\n7KQ= 6654\nIEdyYW5k 6655\n6Kc= 6656\nY2hlcg== 6657\nIHZpY3RpbQ== 6658\nIEdlcw== 6659\n0LvRjA== 6660\ndmlzaW9u 6661\nIHRhbGw= 6662\nIGxlbnM= 6663\nINC30L3QsA== 6664\nIEJvdGg= 6665\nIOyy 6666\nIHN1c3RhaW4= 6667\nIGFyZ3VtZW50 6668\nIGZhY3RvcnM= 6669\nIGF1dG9tYXRpY2FsbHk= 6670\nIGZydWl0 6671\nIGxpYmVy 6672\nIGFsZQ== 6673\nIFByZXNz 6674\nIEJh 6675\nINCz0L4= 6676\nIGh1bmRyZWRz 6677\ndGhhdA== 6678\nIFJpY2g= 6679\nIHJlY2lwZQ== 6680\nIElU 6681\n6Ic= 6682\n4bql 6683\nIGRlc2NyaWJl 6684\nIGRyaXZlcg== 6685\nIE9jdA== 6686\nIE1hdA== 6687\n0LTQtQ== 6688\nIG1lYWw= 6689\nIGxhdGVzdA== 6690\nIHRoZXJhcA== 6691\nIGNvbXBhcmU= 6692\nIEFtYXpvbg== 6693\nIOyigA== 6694\nIFJ1c3NpYQ== 6695\nIHN0cmluZw== 6696\nIGth 6697\nIENvbW11bg== 6698\nIGRpYQ== 6699\nSXM= 6700\nIG1pbGxpb25z 6701\nIGNvcnBvcg== 6702\nIGNvcnJlc3BvbmQ= 6703\nIGZpeGVk 6704\nIEpvZQ== 6705\n2Y4= 6706\nIHZpZXdz 6707\nIHJpdmVy 6708\nIHN0dWRpbw== 6709\naWdnZXI= 6710\nIGZsYXZvcg== 6711\nIHByZXNlbmNl 6712\nIHVuaXRz 6713\nIHNhdmluZw== 6714\nYXZvdXI= 6715\nIHBlc3Nv 6716\nb3JpdGg= 6717\nIGhlcnM= 6718\nIE5hdA== 6719\nYXNpb24= 6720\nIEZyYW5r 6721\n0L7RiA== 6722\nxYJ5 6723\n7YQ= 6724\nIGVpbmVt 6725\nIGZ1bmN0aW9ucw== 6726\ndW1hbg== 6727\nIG5vcnRo 6728\nIOyghA== 6729\nIGhvcnNl 6730\ndmlk 6731\nIHBsZWFzdXJl 6732\n0LDRiA== 6733\nw6llcw== 6734\naW5kYQ== 6735\nIHRhaWw= 6736\nIGV4cGxvcmU= 6737\nU1Q= 6738\nIGNvbW1lcmNpYWw= 6739\nIER1cmluZw== 6740\nYXJs 6741\nXTo= 6742\nZml0 6743\nIHJhdGVz 6744\n5rM= 6745\nTVVTSUM= 6746\nIGhvdXNpbmc= 6747\nIGVpbmVy 6748\nIHNpdHVhdGlvbnM= 6749\n5os= 6750\nIGRlY3Jl 6751\nIGFwcHJvcHJpYXRl 6752\n0LXQvdC90L4= 6753\nJS4= 6754\nIGJhYw== 6755\nIHdhdA== 6756\nZW5zaXR5 6757\nw6Ro 6758\na25vd24= 6759\naXR6 6760\nIGVtb3Rpb25hbA== 6761\nZXJ2YXRpb24= 6762\nIGJsaW5k 6763\nMTY= 6764\n7YM= 6765\nIGpvaW5lZA== 6766\nIGxvY2F0ZWQ= 6767\nINGB0Lw= 6768\nYWRhcw== 6769\nYmVyZw== 6770\nIGRlc3M= 6771\nIGRlYXI= 6772\nZWRlbg== 6773\nY29z 6774\nIGFkb3B0 6775\nMTAw 6776\nb3dl 6777\nIENoZWNr 6778\naXNtbw== 6779\nIHNpbXBs 6780\nIGFuZ3J5 6781\nINC80LXQvdGP 6782\nIENhbQ== 6783\nIHBhZA== 6784\nIGF0dGVuZA== 6785\nIHNhbXBsZQ== 6786\nIOyb 6787\nIElO 6788\ndWxvdXM= 6789\nIFNhcg== 6790\nIFNob3c= 6791\nIGluZnJhc3RydWN0dXJl 6792\nIEF1Z3VzdA== 6793\nIGxlc3Nvbg== 6794\nIG5pZXQ= 6795\n5o4= 6796\nIGZvaQ== 6797\nIGJyb2tl 6798\ndHI= 6799\n55U= 6800\nIDQ1 6801\nIGdldw== 6802\n0YPQvw== 6803\nYXRp 6804\nIG1haW50YWlu 6805\nIGFydGlzdHM= 6806\naW5nZXI= 6807\nZXJ2ZWQ= 6808\nSUE= 6809\nIGVxdWFscw== 6810\nIG9wZXJhdGlvbg== 6811\naWxseQ== 6812\nIOuCtA== 6813\nIGNyb3dk 6814\nIGludGVybmFs 6815\nIHRlc3Rz 6816\nIFJvY2s= 6817\nIENvbnM= 6818\nIOuEiOustA== 6819\nd2Fy 6820\nIHNvdQ== 6821\nIGNoYXJ0 6822\nIEp1bmU= 6823\nIEFwcmls 6824\nZ2VudA== 6825\nIHZlbnQ= 6826\nIHF1YW5k 6827\nIEtvcmVhbg== 6828\naW1v 6829\n54k= 6830\naWRlcnM= 6831\nIG1vdW50YWlu 6832\n0YHRgtCw0LI= 6833\naWpr 6834\nIGRpc2NvdmVyZWQ= 6835\nIFN1bmQ= 6836\nIFNpbA== 6837\nIHNvbG8= 6838\nwrQ= 6839\nIHNjaG9s 6840\nIEVhY2g= 6841\n57U= 6842\nIGJhcmU= 6843\nIO2M 6844\nIHbDrWRl 6845\nIGluZ3JlZGllbnRz 6846\nIEl0cw== 6847\nnbzqs6A= 6848\nIOyK 6849\nz40= 6850\nIExlZQ== 6851\nIHNjYXJ5 6852\nIHByaW5jaXA= 6853\nIHNwaXJpdHVhbA== 6854\n7IU= 6855\nIEhvbGQ= 6856\nIGRlZmluZQ== 6857\nIExlcw== 6858\nIE5vcg== 6859\nIEVuZA== 6860\nIGJsb2c= 6861\nIEdyZWVu 6862\n0LDQtdGC0YHRjw== 6863\ncGFydA== 6864\nZWxlcw== 6865\nIFVuZGVy 6866\nIHBhcnRl 6867\nIDM1 6868\nIHNlY3Rvcg== 6869\nIFNlcHQ= 6870\nIGF1dGg= 6871\n4K6u 6872\nb21pbg== 6873\nIGNsaWVudHM= 6874\nIGNp 6875\nIEZyaWRheQ== 6876\nZXJhcw== 6877\nIHR3ZQ== 6878\ndWxhdGVk 6879\nIGN1bHR1cmFs 6880\nINGB0LLQvg== 6881\nIOuNlA== 6882\nIMO6 6883\nIHBhcmNl 6884\n4K6y 6885\nIHRyYWRpdGlvbg== 6886\nIGp1ZGdl 6887\nIEdlbmVyYWw= 6888\nIGRldGVybWluZQ== 6889\nIElzbg== 6890\nIFBM 6891\nbmVhdGg= 6892\nIG1hdHRlcnM= 6893\n7ZW07A== 6894\nIV0= 6895\n0LDRhQ== 6896\nIHBvb2w= 6897\nIHZhcmlhYmxl 6898\nIHZhY2NpbmU= 6899\nIGNhdXNlZA== 6900\nIHdlc3Q= 6901\nIFllcA== 6902\nZmFzdA== 6903\nIHBoaWxvcw== 6904\naG9yYQ== 6905\nIGNvbnRpbnVlZA== 6906\nIHVuZm9ydHVuYXRlbHk= 6907\n5pU= 6908\nIGZsaWdodA== 6909\nIHdyYXA= 6910\nIGh1aA== 6911\nIEFic29sdXRlbHk= 6912\nIHBpbms= 6913\nIHJlbWFpbnM= 6914\nIG7DqQ== 6915\nIGZsZQ== 6916\nIFNvbA== 6917\nIGxvc2luZw== 6918\nIGFsZ29yaXRo 6919\nIHJlcXVpcmVz 6920\nIGZvdW5kYXRpb24= 6921\nIEJ1cg== 6922\nIHByb2Zlc3Npb24= 6923\nIE1pZA== 6924\nIOutkA== 6925\nY2Fu 6926\nIE1pbA== 6927\nIHlvdW5nZXI= 6928\nIGFwcGVhcnM= 6929\ndGVybQ== 6930\n7ZWY6rOg 6931\nYWNsZQ== 6932\nIExvbmRvbg== 6933\nIGVuZ2luZWVyaW5n 6934\n4Lii 6935\nIGFkdmVudA== 6936\n7IS47JqU 6937\nIOq4sA== 6938\nIE1hag== 6939\n0YDQtdC8 6940\naW5ndQ== 6941\nIFVL 6942\ndXJv 6943\nc3Bl 6944\nIHRlbnQ= 6945\nIHJlcG9ydGVk 6946\nIEFM 6947\nSGV5 6948\nIOunkA== 6949\nIGRlbnQ= 6950\nIEF1c3RyYWxpYQ== 6951\nIEphbnVhcnk= 6952\ns7Q= 6953\nYWd1ZXM= 6954\nYXJzaA== 6955\ncmln 6956\nIHRpZW5l 6957\n4Lij 6958\nzq4= 6959\nIG1hY2hlbg== 6960\ndW50ZQ== 6961\n0YPRgQ== 6962\nIGVsZWN0cg== 6963\nIHR1dG9yaWFs 6964\nIHBsYWNlZA== 6965\nIOydtOqxsA== 6966\nIENvdW5jaWw= 6967\n7ZaI 6968\nsOumrA== 6969\nYWhyZW4= 6970\nIOq3uOuemA== 6971\nIHByb3Zl 6972\nZm9s 6973\nIHF1ZXI= 6974\nIGNoZWFw 6975\nIEZhdGhlcg== 6976\nIFBvd2Vy 6977\nk5w= 6978\nIHB1cnM= 6979\nIGVzcA== 6980\nIEJyZQ== 6981\n6riw6w== 6982\nb21hcw== 6983\n0LjQu9GM 6984\nIGdlaHQ= 6985\nb3N0ZXI= 6986\n6rO8 6987\nIGZpbGVz 6988\nINCn 6989\nYmVsbA== 6990\nIHdob20= 6991\nIOuY 6992\nIGV4Y2VsbGVudA== 6993\nIGRhdGFi 6994\nIGfDtg== 6995\nIOynhOynnA== 6996\nIGJlbGllZg== 6997\namV0 6998\nIGphY2s= 6999\nIHN3aW0= 7000\ncmlhbA== 7001\ndW1pbg== 7002\nYXVj 7003\nIHNvbGw= 7004\nIGVzc2VudGlhbA== 7005\n7ZWY64qU 7006\nIGV2b2w= 7007\nY2hhZnQ= 7008\nYWluZQ== 7009\ndGhsZXQ= 7010\nIGluY29y 7011\nIHJlcG9ydHM= 7012\nIGRlZmluaXRpb24= 7013\na2Vs 7014\nIGNpcmN1bQ== 7015\nIHByb2R1Y2Vk 7016\nINeb 7017\nYW50aWM= 7018\nbmV0 7019\nIGF3YXJk 7020\nIGR1cmNo 7021\nIHRyYW5zcA== 7022\nIG1hbGU= 7023\npqzr 7024\nIG1vb24= 7025\nIEdlb3JnZQ== 7026\nIGZseWluZw== 7027\nacOz 7028\nIHNvdXJjZXM= 7029\nIHBsZW50eQ== 7030\nIERlbW9jcg== 7031\nUk8= 7032\nIDAw 7033\nIHNlY3VyZQ== 7034\nIEJpcg== 7035\ncmFpbg== 7036\nIHp1cg== 7037\nIGVmZmljaWVudA== 7038\nIHJlcGVhdA== 7039\nIG1ldGhvZHM= 7040\nIGNhbG0= 7041\nIGRpc2N1c3NlZA== 7042\nIOyeiOuKlA== 7043\nIHNlcnZlcg== 7044\nYW5pZQ== 7045\nIEluc3RlYWQ= 7046\nIGlkZWFs 7047\nIGNvbnZlbg== 7048\nIGhvcGluZw== 7049\nIFRvcg== 7050\nIGRlcHRo 7051\nIGhlYXZlbg== 7052\nRU5DRQ== 7053\nIGhhYml0 7054\nZ3JhZA== 7055\nIGZsYWc= 7056\nIGluZQ== 7057\nIGto 7058\nIExJ 7059\nIGZhY2luZw== 7060\nIEFV 7061\nIFRpbQ== 7062\nIGdlbQ== 7063\nIEp1bA== 7064\nIGVsYQ== 7065\naXp6YQ== 7066\nIGZlbGxvdw== 7067\nIHF1ZWw= 7068\nIHNwb2tl 7069\nIGNpdGl6ZW5z 7070\ndWdl 7071\nIHBhZ2Vz 7072\nIGZhc2M= 7073\nIHJlbGlnaW91cw== 7074\nYXRlbg== 7075\nIGNoYXB0ZXI= 7076\nIFZhbA== 7077\nIGNvbnN1bHQ= 7078\nIE1pbGw= 7079\nZ2w= 7080\nb3Blcg== 7081\nIGluZmlu 7082\nIG1hcnJpYWdl 7083\nIG1lZGljaW5l 7084\nINC00LI= 7085\nIGRvZ3M= 7086\nIGluc3RydW1lbnQ= 7087\nIEV4YWN0 7088\nw6Fu 7089\nIDIwMjE= 7090\nIGZlcg== 7091\nIHdlYWx0aA== 7092\nIGdyYWRl 7093\n0YvRhQ== 7094\nIGNyaW1l 7095\nIHRocmVhZA== 7096\nIGVzc2E= 7097\nIHdpbmU= 7098\nY29ob2w= 7099\ncGhh 7100\n4LiH 7101\nb2d1ZQ== 7102\nIGluc3VyYW5jZQ== 7103\nYXJyYXRvcg== 7104\nIFNlcHRlbWJlcg== 7105\nIHZpZA== 7106\nIFNwaXJpdA== 7107\nIGdlc3Q= 7108\nIFJ1c3NpYW4= 7109\nIHByb3BlcnRpZXM= 7110\nIGFydGljbGU= 7111\nIHVuZGVybmVhdGg= 7112\neWVy 7113\nIGpvaW50 7114\nIHJlbGF0aXZlbHk= 7115\nIGluY2g= 7116\nIGRlc3BpdGU= 7117\nIEdyZWU= 7118\nIGNsYXNzaWM= 7119\nIHN1cHBvcnRpbmc= 7120\nIGluc3RydWN0 7121\nbHVzaXZl 7122\nIGRpYWdu 7123\n5oo= 7124\nIGFkbWluaXN0cmF0aW9u 7125\n0LDQsdC+0YI= 7126\nIE9wZW4= 7127\nINC/0L7Qug== 7128\nIGRvbGxhcg== 7129\nIGNvbnNlcXU= 7130\nb2Jlcg== 7131\nIEdlcm1hbnk= 7132\nIHRlcnI= 7133\nIFFV 7134\nINCT 7135\n574= 7136\nIHN0cm9uZ2Vy 7137\nyZk= 7138\nINmK 7139\nIGlQaG9uZQ== 7140\nIGZhYnJpYw== 7141\nw7xo 7142\nIGVuZW0= 7143\n5q8= 7144\nIHN1YnQ= 7145\nRUU= 7146\nb25kZQ== 7147\nIGNyZXc= 7148\nIHJlbW92ZWQ= 7149\nIGxhZHk= 7150\nIHBvdGVudGlhbGx5 7151\nINCd0L4= 7152\neWFs 7153\nIHN5bXB0 7154\nIGFybXk= 7155\nIGludHJvZHVjZWQ= 7156\ndGVz 7157\nIGFzcGVjdHM= 7158\nMTQ= 7159\nIExvdQ== 7160\nICk= 7161\nIGRlcGxveQ== 7162\ncGV0 7163\nIGhhbg== 7164\nIFdhdGNo 7165\nIHdlYXBvbnM= 7166\nIHBoZW4= 7167\nIHJlZ2lzdGVy 7168\nIGVpbmZhY2g= 7169\nIHNwb3J0 7170\nIGJyaWRnZQ== 7171\nIGlubmVy 7172\nIG1pbmltdW0= 7173\nIHdpdG5lc3M= 7174\nIGVzbw== 7175\nIHZpbGxhZ2U= 7176\nIG93bmVy 7177\npqzqs6A= 7178\nIHNjcmVhbQ== 7179\naWxlZA== 7180\nIHBpdGNo 7181\nYnJ1 7182\nIGFkdmFuY2U= 7183\nIHN1cHBvc2U= 7184\nIEF0dA== 7185\n0LXRgtGB0Y8= 7186\nIGRpZmZlcmVuY2Vz 7187\nYWtlZA== 7188\nIGludGVycHJldA== 7189\nw6Y= 7190\naWVuZG8= 7191\nIGFic29s 7192\nINCx0YPQtNC10YI= 7193\nIOuy 7194\nIHRyaWFs 7195\nIHRoaW5rcw== 7196\nbHlpbmc= 7197\nY2VwdGlvbg== 7198\nIEFmcmljYW4= 7199\nIGNoZW1pY2Fs 7200\nIHRhcGU= 7201\nIGNvbnZlcnNhdGlvbnM= 7202\nIGRpc3RyaWJ1dGlvbg== 7203\ndGk= 7204\nIEFJ 7205\nIGZsYXNo 7206\nIHVuZGVyc3Rvb2Q= 7207\nIEdvdmVybm1lbnQ= 7208\nIT8= 7209\nIFNr 7210\n6rGw6w== 7211\ncmllcg== 7212\nVFM= 7213\nIEFjY29yZGluZw== 7214\n0Y7Rgg== 7215\nIHNwb25z 7216\n0YLQvtCx0Ys= 7217\nIHZhbHU= 7218\nZXJlbQ== 7219\naWNodGln 7220\nIHJlc2lzdGFuY2U= 7221\nIEdhbA== 7222\nZ2VyeQ== 7223\nIGJlZ2lucw== 7224\nIGFkdmFuY2Vk 7225\nIHJlbGV2YW50 7226\nIHBvbGl0aWNz 7227\nIEZhbQ== 7228\nIMOnb2s= 7229\nIE5ldmVy 7230\naWxsaW5n 7231\nIGZvb3RiYWxs 7232\n0LjQuA== 7233\nIElE 7234\nIEFmcmljYQ== 7235\nIGZpbmdlcnM= 7236\nINCx0L7Qu9GM 7237\nIMOh 7238\nIGNsaXA= 7239\nIExhdA== 7240\nIOyngOq4iA== 7241\nZXNzZQ== 7242\nIHZvb3I= 7243\nIGFzaWRl 7244\n5p4= 7245\nIHRvd2FyZA== 7246\nIGJhdA== 7247\nIHZhbGlk 7248\nIE1lbnM= 7249\nIGNvbXBsZXRlZA== 7250\nxLHEnw== 7251\nIHBvZGNhc3Q= 7252\nIEJvbg== 7253\n25I= 7254\nIEp1bHk= 7255\naWxh 7256\nIHBhY2thZ2U= 7257\nIHB1bGxlZA== 7258\nY2hhcg== 7259\nIE1lbA== 7260\nb2lz 7261\nIHNvdXRo 7262\nIOuU 7263\nIGltcG9ydGFuY2U= 7264\nIHB1c2hpbmc= 7265\nIGlzb2w= 7266\nIHN0YW5kcw== 7267\nY2lsbA== 7268\n5Lw= 7269\nIPCf 7270\nb3Jp 7271\n6rCB 7272\nIGhvbWVz 7273\nIGNvbmNlcm5z 7274\nIGJpeg== 7275\n5b0= 7276\nYmll 7277\nIGJpcw== 7278\nIGdlYXI= 7279\nIE1T 7280\nIGh1bg== 7281\nIE1hdHQ= 7282\n4bqj 7283\nc2V5 7284\nIFNlY3JldA== 7285\nIG9kZA== 7286\nIE1heA== 7287\nb2xseQ== 7288\nZm9yZA== 7289\nIFNI 7290\nIHJlcGxhY2U= 7291\nIG5hdmln 7292\nIGluaQ== 7293\n0LjRjw== 7294\nIGdpYW50 7295\nIG1hbmQ= 7296\nIEhhcHA= 7297\nVElPTg== 7298\nZ3Vu 7299\naWFtbw== 7300\n7J6F64uI64uk 7301\nIGdhcA== 7302\nIMOqdHJl 7303\nIGNsYXNzcm9vbQ== 7304\nIGh5cA== 7305\nYWtp 7306\n6K4= 7307\naXN0ZXJz 7308\nYWNrcw== 7309\nINGB0L4= 7310\nIGJ1Zw== 7311\nIGdyYXY= 7312\nYW1pbg== 7313\nIGV2ZXJ5ZGF5 7314\nIOyhsA== 7315\nIGdhcmRlbg== 7316\nY2VtYmVy 7317\nIGVzdG8= 7318\n2Kw= 7319\nn7A= 7320\n5YE= 7321\nIHJvbQ== 7322\nIOygnOqwgA== 7323\nIGZhbGxpbmc= 7324\nIGZhdWx0 7325\nZWxseQ== 7326\nIGNoZXN0 7327\nINC70Lg= 7328\nIHBvdGF0bw== 7329\nIGJ1aWxkaW5ncw== 7330\nIG9wZXJhdGluZw== 7331\nIHBhcmU= 7332\nd3I= 7333\nRG9u 7334\nIEZvdXI= 7335\nIHZ1bA== 7336\nIGzDoQ== 7337\nIGZydXN0 7338\nIERhbm4= 7339\nb2xlcw== 7340\nbnlh 7341\nIOy2 7342\nINGA0LDRgQ== 7343\n15s= 7344\nIGHDrQ== 7345\nd29yZA== 7346\nIHdlYXBvbg== 7347\nIG9idA== 7348\nIEZhbGw= 7349\nIFN0ZXZl 7350\nIG1peGVk 7351\nIHBvZGU= 7352\nIEFT 7353\nIExlZw== 7354\nIGRlc2M= 7355\nIHNwbGl0 7356\nIGVtZXJnZW5jeQ== 7357\nIFNpbmc= 7358\nIHByb2ZpdA== 7359\nIHR5cGljYWw= 7360\nIERvbmM= 7361\nIGFubm91bmNl 7362\nIFRleA== 7363\nIHNhY3I= 7364\ndGVybmFs 7365\nIGNvbW1pdHRlZQ== 7366\naWdv 7367\nIGRpYW0= 7368\ncGhhcw== 7369\nIGRlZmU= 7370\nIFByb2Zlc3M= 7371\nIGRlY2w= 7372\n0YPRgA== 7373\nMjI= 7374\nb2xm 7375\nIE1vbmQ= 7376\ndXk= 7377\nIGF5 7378\nIGxlbQ== 7379\nIGxvdmVseQ== 7380\nIENvdWxk 7381\nIGd1YXI= 7382\nSEg= 7383\nIGNhcmVmdWxseQ== 7384\nIExpc3Rlbg== 7385\nINC60YA= 7386\nIHlvdXRo 7387\nIFRoZXJlZm9yZQ== 7388\nIGRyZWFtcw== 7389\nIEplZmY= 7390\nP10= 7391\nIOuI 7392\nREE= 7393\nIGJvZGllcw== 7394\nYXV4 7395\nIHRlY2huaXF1ZXM= 7396\nIG1lY2hhbmlzbQ== 7397\n15M= 7398\nINC+0L3QuA== 7399\nIGRlc2lyZQ== 7400\nw64= 7401\nIFZv 7402\ncXVlcw== 7403\nINGD0LbQtQ== 7404\nIFdob2E= 7405\nIEdhbWU= 7406\nIGhhbA== 7407\nYW5pc2g= 7408\nIHByYWN0aWNlcw== 7409\nNTAw 7410\nIHNvcnRz 7411\ndXBz 7412\nYXRlZnVs 7413\nIGhlcnNlbGY= 7414\nIGd1aXRhcg== 7415\nIHByb3Bvcw== 7416\nIHNpdGVz 7417\nIGJlYWNo 7418\nINei 7419\n0L3Rgw== 7420\nIGRyYW0= 7421\nIE5vdmU= 7422\nVkU= 7423\ncmFudA== 7424\nIHBsb3Q= 7425\nIOyXrOq4sA== 7426\nIENh 7427\nIGVzdGFibGlzaGVk 7428\nIDIwMTU= 7429\nIGluc3BpcmVk 7430\nIGFubm91bmNlZA== 7431\nINGC0YA= 7432\nIDI2 7433\nIHZveQ== 7434\nIHRlY2g= 7435\n7KCB 7436\nIHByb2Nlc3Nlcw== 7437\nb250bw== 7438\nIFBhbg== 7439\nIHJhcGlk 7440\naXN0YW4= 7441\nIDE5Nw== 7442\nIHJlbGlnaW9u 7443\nIDI4 7444\nIHNtaWxl 7445\nIGJhYg== 7446\nINqp 7447\nIFZpcg== 7448\nIHNjaGVkdWxl 7449\nIGV4ZWN1dA== 7450\nIHByb24= 7451\n0Y0= 7452\nINCd0YM= 7453\nbXVzaWM= 7454\n7JuQ 7455\nIGdhbg== 7456\n7Iug 7457\nIGRlZmF1bHQ= 7458\nIGJlbQ== 7459\n2Yk= 7460\nIGZvcmNlZA== 7461\nIE9idmlvdXNseQ== 7462\nIHN0b25l 7463\nIHRpZQ== 7464\nIGRyaW5raW5n 7465\nIHNlcnZlZA== 7466\nQ2F1c2U= 7467\nIGNvbmZlcmVuY2U= 7468\nIEV4YWN0bHk= 7469\noJw= 7470\n7JmA 7471\nIFJh 7472\nIGZha2U= 7473\nIGRpZmY= 7474\nIGNoYWxsZW5naW5n 7475\nIOykkQ== 7476\nz4c= 7477\nIGludGVsbGlnZW5jZQ== 7478\ncmV0ZQ== 7479\nIHN0dWR5aW5n 7480\nIGFwcG9pbnQ= 7481\nIHRhbg== 7482\nINC40Lw= 7483\nIGN1cnZl 7484\nIFRlYW0= 7485\nIEF6 7486\nINC30LQ= 7487\nIE11c2lj 7488\nZmllbGQ= 7489\naXJhdGlvbg== 7490\nIGZhaWxlZA== 7491\nIG5vdmVs 7492\nIGRpZmZlcmVudGx5 7493\nIGVzY2FwZQ== 7494\nIFlv 7495\nIE9jdG9iZXI= 7496\nxLF5b3I= 7497\nIGRlc2NyaWJlZA== 7498\nIGNvbnZlcnQ= 7499\nYWNlbWVudA== 7500\nIGhvdGVs 7501\naXNhdGlvbg== 7502\nIHN1aXM= 7503\nIHdhbGtlZA== 7504\nMjAw 7505\nIG5laWdoYm9yaG9vZA== 7506\naXNw 7507\nIExvcw== 7508\nIGhpZGRlbg== 7509\nIDI3 7510\n0LvQtQ== 7511\nIHBocg== 7512\nIElzbGFuZA== 7513\nIFN0cmVldA== 7514\nZW5kYQ== 7515\naGlwcw== 7516\nb3N1cmU= 7517\nIGRlZmluZWQ= 7518\n4Lin 7519\nIHZpZGE= 7520\nIGxhYmVs 7521\nIEV2ZXJ5Ym9keQ== 7522\nIGpva2U= 7523\naWFv 7524\n2KfZhg== 7525\nIGF0aGxldA== 7526\nLi4uIg== 7527\nIEZpcmU= 7528\nRG8= 7529\nIGRlZmVuc2U= 7530\nIGVudGVydGFpbg== 7531\nw6F0 7532\nIHBvbGljaWVz 7533\nIGFsY29ob2w= 7534\nIEVuZ2luZQ== 7535\nIGdhbA== 7536\nIEp1ZA== 7537\nIHZvbHVudGU= 7538\naWNrcw== 7539\nZXRh 7540\nYWd0 7541\nINeV 7542\nIG3Dtg== 7543\nMTM= 7544\nIGVuY291bg== 7545\nIGVo 7546\nIG9yYW5nZQ== 7547\nIGFic29y 7548\nIHNwYWNlcw== 7549\nIE5vdmVtYmVy 7550\n6rWs 7551\naWF0 7552\nIHRhbQ== 7553\nY2tub3c= 7554\nIHN0b3Jt 7555\nIERpcmVjdG9y 7556\nIHByZWdu 7557\nIOydvA== 7558\nINC+0L8= 7559\nIHJlc291cmNl 7560\nIGJhcmQ= 7561\nbmV3 7562\nIERlY2VtYmVy 7563\ndWl0cw== 7564\nIHdlaWw= 7565\nIGNvbnN0cnVjdA== 7566\nc2k= 7567\nbmlj 7568\nIGZsb3Vy 7569\nIHJlc3RyaWN0 7570\nw7x0 7571\nIGVudGlyZWx5 7572\nIGJyZWFraW5n 7573\nZW50bGljaA== 7574\nIHR3ZW50eQ== 7575\nIGNhdXNlcw== 7576\nIGVsZXY= 7577\nIFNwcg== 7578\nIEludGVybmV0 7579\nIGtpc3M= 7580\nIG9wZXJhdGlvbnM= 7581\nc3p5 7582\nIOuK 7583\nIHNjaWVudGlzdHM= 7584\nIGdyb3du 7585\nIG93bmVycw== 7586\nb3V0cw== 7587\nIGNvdXJzZXM= 7588\nIHVzdWFs 7589\nIGlubg== 7590\nIHRyYW5zbQ== 7591\nw7Fv 7592\nIG51ZXN0 7593\n0LrQvtCy 7594\nIGNhdGVnb3J5 7595\nIExpZmU= 7596\nIFBsdXM= 7597\nIGF0bW9z 7598\nd2hpbGU= 7599\nIHJlY29yZHM= 7600\nIGRlxJ8= 7601\n64uk6rOg 7602\nIOyCrOue 7603\nIHJlcXVpcmVtZW50cw== 7604\naW5u 7605\nIGltbWln 7606\nIGRlZXBlcg== 7607\n57Q= 7608\nIGFwcHM= 7609\nIGNvbGxlYWd1ZXM= 7610\nxbx5 7611\nIG9mZmVycw== 7612\nIHTDoQ== 7613\nIGNvbHVtbg== 7614\nbGF1ZA== 7615\nSVI= 7616\nIE1z 7617\nIGV4Y2hhbmdl 7618\nbGFz 7619\nIExhdw== 7620\nIEpvbg== 7621\naXNzZQ== 7622\ncm9nZW4= 7623\nIG1vaQ== 7624\n15c= 7625\nIHNlbmRpbmc= 7626\nIGhlbGxv 7627\n0LXQtQ== 7628\nxZvEhw== 7629\nIHN1Y2NlZWQ= 7630\nIHN1ZmZlcmluZw== 7631\nIGFkdmVydA== 7632\nIOyjvA== 7633\nIHJlY28= 7634\nxLFuxLE= 7635\nINC60L7QvA== 7636\nYWxsZXk= 7637\nIGZhaWx1cmU= 7638\naWVq 7639\nIOuVjA== 7640\nIGRydWdz 7641\nIGN1YW5kbw== 7642\nIOyWtOuW 7643\nIEFib3V0 7644\nIHF1YW5kbw== 7645\nOTA= 7646\nIEZlZA== 7647\nMTc= 7648\nU2g= 7649\naW5obw== 7650\nIFN1bmRheQ== 7651\nIFBoaWw= 7652\nIGFjYWRlbWlj 7653\nIEluYw== 7654\nIG1haW50ZW4= 7655\nIHJld2FyZA== 7656\nZXJk 7657\nIGNvbW1pdHRlZA== 7658\n7Iqk 7659\n0LPRgA== 7660\nIHN0YW5kYXJkcw== 7661\nIGthbA== 7662\nIGludGVudGlvbg== 7663\nIFpo 7664\nIGFja25vdw== 7665\n5L8= 7666\nID09PQ== 7667\nb2d5 7668\n5ac= 7669\nIGZpbG1z 7670\naXNr 7671\nIHRlZXRo 7672\nIHN0cnVnZ2xl 7673\ncmQ= 7674\ndWVu 7675\nIGRpc3M= 7676\nIERhcg== 7677\nYW15 7678\nIGVuZW1pZXM= 7679\nIHZlbG9j 7680\nIENhbGw= 7681\ndW1icw== 7682\n0LjRgtC10LvRjA== 7683\nIG9jZWFu 7684\nw6lk 7685\n7Jqw 7686\nIHRyZW0= 7687\naWVudG8= 7688\n0LXRiNGM 7689\nZmZpY2llbnQ= 7690\nIGJvdHRsZQ== 7691\nIGluc3RpdHV0aW9u 7692\nZXN0eQ== 7693\nIEhhbg== 7694\naGFi 7695\n64qY 7696\nIGFycmVzdA== 7697\nIGxldHRlcnM= 7698\nb3VuY2U= 7699\n7Yw= 7700\nQW4= 7701\nIGNyZWF0ZXM= 7702\nIGNsb2Nr 7703\nIGRlYnQ= 7704\nIGFuY2llbnQ= 7705\naWZpY2F0aW9ucw== 7706\nZ2k= 7707\nQnV0 7708\nIFR1 7709\na2w= 7710\nIGJvcmRlcg== 7711\nIG9vaw== 7712\nIEJheQ== 7713\nZXN0YQ== 7714\nIOuztOw= 7715\nIHdyYQ== 7716\ncHJlbmU= 7717\nIOqyjA== 7718\nYW5nbGU= 7719\nIGJlbGlldmVk 7720\naWVuY3k= 7721\nYWth 7722\nIGNyaXRpYw== 7723\nIGJvbWI= 7724\nIGhhbQ== 7725\nINCb 7726\n6rWt 7727\nIEd1eXM= 7728\ncm9zb2Z0 7729\nIGNyaW0= 7730\nZXRjaA== 7731\nQVJS 7732\nIHNpZ2h0 7733\n0LjQvdCw 7734\nIGFpbg== 7735\n4buR 7736\naXNjaGU= 7737\nIGF1eA== 7738\nIG51bWVy 7739\nIHN1cnZpdmU= 7740\nQWxs 7741\nQkM= 7742\nIHN6 7743\nn6zr 7744\nIGphbQ== 7745\nIENvdXJ0 7746\nIGFsbGVz 7747\nIHRyaWdnZXI= 7748\n0J4= 7749\nIGZvcm1hdA== 7750\nIGRlY2FkZXM= 7751\nIGNlcw== 7752\nIHNpZ25z 7753\nIHJvYm90 7754\nIENodXJjaA== 7755\nIGF6 7756\nIHNvdXA= 7757\nIFRleGFz 7758\ndXRlbg== 7759\nINGH0YLQvtCx0Ys= 7760\nIG5laWdoYg== 7761\nlteU 7762\nIGNvbW11bmljYXRl 7763\nxaE= 7764\nIGVsaW1pbg== 7765\nIGZyZXF1ZW5jeQ== 7766\naGVybg== 7767\naWRvcw== 7768\nIGVtcGhhcw== 7769\nIG1lc3NhZ2Vz 7770\nIGdlbmRlcg== 7771\nIFdlbm4= 7772\nINCy0L4= 7773\nIHByaWNlcw== 7774\nb2xv 7775\nINC/0L7QvQ== 7776\nd2luZw== 7777\nIEZpbA== 7778\n0LDQtdC8 7779\nIEN1cg== 7780\nIGZhbHNl 7781\nIGZpZWxkcw== 7782\nIHPDqQ== 7783\nMjQ= 7784\nIG1hYw== 7785\ndcWf 7786\nIGxheWVycw== 7787\nIGFkdm9j 7788\nd2Fu 7789\nIGthcg== 7790\nIMWe 7791\nIGRlY29y 7792\nIHdhbGxz 7793\nb2U= 7794\naXNzaW9ucw== 7795\nIHJlc29s 7796\n16I= 7797\nIENhcm9s 7798\nIFZpZGU= 7799\nbGVlcA== 7800\nIFlPVQ== 7801\nIGZsaXA= 7802\nIHN1cmdlcnk= 7803\nIGNob3A= 7804\nVVI= 7805\nLiw= 7806\nIGFnZW5jeQ== 7807\nIHdhbnRpbmc= 7808\nIHNvbGFy 7809\nIGhvcml6 7810\nIEFkYW0= 7811\nIHN0YXlpbmc= 7812\nb2xpYw== 7813\nIGdyYXRlZnVs 7814\nIHJlbWFyaw== 7815\nIHRlY2hub2xvZ2llcw== 7816\nIHByb3RlaW4= 7817\n0LTQtdC7 7818\nIE1vbnQ= 7819\nIHNob3VsZGVy 7820\nIHph 7821\ncmV5 7822\nIE9vaA== 7823\nIHN0eQ== 7824\naWNhcg== 7825\n0L7RgtGA 7826\nIHJvdXRl 7827\nIFR1cm4= 7828\nIGJvbQ== 7829\nIGRlYmF0ZQ== 7830\nIHBvc3NpYmlsaXR5 7831\nIO2VtOw= 7832\nYXBh 7833\nIGludmVudA== 7834\nw7xybGljaA== 7835\nIHByb2ZpbGU= 7836\nIHNlbmlvcg== 7837\ncHB5 7838\ndmFz 7839\nIG11bmRv 7840\nYXRldmVy 7841\nIGFwcGFyZW50bHk= 7842\nZW5lcg== 7843\n15A= 7844\n560= 7845\nIHByZWNpcw== 7846\nIGFsaWdu 7847\nIGtuaWZl 7848\nIFJvYmVydA== 7849\n5Ys= 7850\nIGZvb2w= 7851\nIGludml0ZQ== 7852\ndXNpbmc= 7853\nIGNpcmN1bXN0 7854\nIGNhcHR1cmU= 7855\nIGRvdWdo 7856\nIFNhbmQ= 7857\nIHNldQ== 7858\nIE5ld3M= 7859\nIGJpdGU= 7860\nIG5ldXQ= 7861\nd2lkZQ== 7862\nIGxlY3R1cmU= 7863\nIOuYkA== 7864\nIG9yaWdpbmFsbHk= 7865\nIGNob2ljZXM= 7866\nIEdhcg== 7867\nIHZlcnNl 7868\nIGxpdA== 7869\nIDE5Ng== 7870\n7ZWg 7871\nIG1lYXN1cmVz 7872\nw6fDtWVz 7873\nd2F0ZXI= 7874\ncml2ZQ== 7875\nIHppam4= 7876\n7YE= 7877\nIEJ1cw== 7878\nIGhlYg== 7879\n0LXRhQ== 7880\nIEthcg== 7881\nIE7Do28= 7882\nIGtpbGxpbmc= 7883\n4K6q 7884\nIG1pcnJvcg== 7885\nbW9k 7886\nIG1vbA== 7887\nIGNyZWF0aW9u 7888\nIGVzdGlt 7889\nIGF0bW9zcGhlcmU= 7890\nIGdhbQ== 7891\nIHRhYmxlcw== 7892\naXNp 7893\nIExpdHRsZQ== 7894\nIHRhcw== 7895\nIEVsZQ== 7896\nw6ls 7897\nIHNjZW5lcw== 7898\nIHRvbmU= 7899\nIGFmZmVjdGVk 7900\nIEFVREk= 7901\nIEJyb3du 7902\nSWY= 7903\nINmH 7904\nIERhbmllbA== 7905\ncXVlcg== 7906\nY2hp 7907\n7ZWY6w== 7908\nIG1pc3Rha2Vz 7909\nIHNsYQ== 7910\nIGVudHI= 7911\nINC10YHQu9C4 7912\nIHNob3V0 7913\nIHBvcnRpb24= 7914\n0Zc= 7915\nIHByZXZpb3VzbHk= 7916\n4buZ 7917\nINC/0YDQtdC0 7918\n0L7RgdGM 7919\nIGhlYWRz 7920\n544= 7921\n5a0= 7922\nIGdyYXNz 7923\n4Liw 7924\nY3JpYmU= 7925\nIHF1w6k= 7926\nIFNwYW5pc2g= 7927\nIG9mZmVyZWQ= 7928\nINCx0YvQu9C+ 7929\nIENsb3Vk 7930\nIHZlY3Rvcg== 7931\nIEh1aA== 7932\nIGthZA== 7933\naWZ0cw== 7934\nIM69 7935\nIGh1bmdyeQ== 7936\n0KE= 7937\nIHBhcmFsbA== 7938\nQU5E 7939\nIHbDrWRlbw== 7940\naXp6 7941\nIG9jY3Vw 7942\nIO2U 7943\nIHNlZWs= 7944\naGVz 7945\nIGRvb3Jz 7946\nIGhvdXNlcw== 7947\nIGNvbnNpZGVyaW5n 7948\nIGdyYWR1YXRl 7949\nIGZ1bGY= 7950\n6KM= 7951\nIGV4dHJlbWU= 7952\nIGZsb3dlcnM= 7953\naXRhdGU= 7954\nIFByaQ== 7955\nIGZ1bmRhbWVudGFs 7956\n0YfQsNGB 7957\nIHRleHR1cmU= 7958\njZg= 7959\nIEFORA== 7960\n4K6x 7961\nIFRlbQ== 7962\nIG5hZGE= 7963\n7KeE 7964\nIGNlbGVicmF0ZQ== 7965\ndW1z 7966\nIHBpbGw= 7967\nINC40LvQuA== 7968\nZ29pbmc= 7969\nIGhpcA== 7970\nIHN1cHBvcnRlZA== 7971\nIHBlcm1hbg== 7972\nIGFncmVlbWVudA== 7973\nIHR5bQ== 7974\nIOuR 7975\nk6TsnbQ= 7976\nIHB1cmNoYXNl 7977\n7ZQ= 7978\nIFBsYW4= 7979\nZWdlbg== 7980\nIHJlY292ZXI= 7981\nUFU= 7982\nIE1pY3Jvc29mdA== 7983\nZHVj 7984\nIGhvbGVz 7985\nIGRyb3BwZWQ= 7986\nIHBpZw== 7987\nIGVuZGluZw== 7988\nIGF0dGFja3M= 7989\nYmVj 7990\nIHJlbg== 7991\nIHJhcHA= 7992\nIOyasOumrA== 7993\nIHRlcnJvcg== 7994\nINeZ 7995\nIGVkaXQ= 7996\nIGFv 7997\nLjwv 7998\nIDIwMDA= 7999\nIFVuaW9u 8000\nIHNjaWVudGlmaWM= 8001\nIHB1bmNo 8002\nb3J0aW9u 8003\nIHB1dHM= 8004\nIE1vbmRheQ== 8005\nIEplcg== 8006\nRUM= 8007\nIG1hdHJpeA== 8008\nIGluc3RpdHV0aW9ucw== 8009\nIG1vbnQ= 8010\nIGV4aGli 8011\nIHNwZWFrZXI= 8012\nIG1ldGVycw== 8013\nLl0= 8014\nIHNlcnZpbmc= 8015\nIGRhdGFiYXNl 8016\nIExBVQ== 8017\nIGRhbW4= 8018\nIHBvZGVy 8019\nISEhIQ== 8020\nIO2WiA== 8021\nIEFVRElFTkNF 8022\nIGp1bg== 8023\nIEFD 8024\nIEl0YWw= 8025\nc2Vj 8026\nIFlvdW5n 8027\ncnVjaw== 8028\nb3V2ZQ== 8029\n4LiE 8030\n54g= 8031\nIOunjOs= 8032\nYWRpbmc= 8033\ndXJhdGlvbg== 8034\nIFBT 8035\n0Jo= 8036\nIFVuZg== 8037\n6IE= 8038\nb3JpYQ== 8039\nIG1hbmlm 8040\nIHNlbnRlbmNl 8041\nIHNpZ25lZA== 8042\nQlM= 8043\nIHByb29m 8044\nIE11c2xpbQ== 8045\nIG51Y2xlYXI= 8046\nINCz0L7QstC+0YA= 8047\nIHdvbGw= 8048\nIGZhdm91cg== 8049\nIFdI 8050\nIHZ1bG5lcg== 8051\nIGNsb3NlbHk= 8052\nIGluZGV4 8053\n0YLQtdGA 8054\nYWNoZWw= 8055\nIGNhcGFibGU= 8056\nIEJlcw== 8057\nIGNyb2No 8058\nZWt0 8059\nIHNoZWV0 8060\nIHNlZXM= 8061\nIG5hdHVyYWxseQ== 8062\nIEVuZ2xhbmQ= 8063\nIHBhcnRpY2lwYXRl 8064\nIGV4aXN0cw== 8065\nIHNoYXJw 8066\ncHk= 8067\nIGJyZWFrZmFzdA== 8068\nYm93 8069\nIHR3aXN0 8070\n56c= 8071\naW5hdGluZw== 8072\nb3Rp 8073\nIEZvdW5k 8074\nIGRldXg= 8075\nIHNlbGVjdGVk 8076\n7KCE 8077\nb3Npcw== 8078\nIHByZXNlbnRlZA== 8079\nIGxpbmVhcg== 8080\nIOq0 8081\nIGt1bg== 8082\nw7RuZw== 8083\nIGLEmWQ= 8084\nIHRlbXBvcg== 8085\nIGNhYmxl 8086\nINC/0YDQvtGB0YLQvg== 8087\n0LrQtQ== 8088\nINGC0LDQvA== 8089\nIHdpbm5pbmc= 8090\nmOuPhA== 8091\nIDIwMTQ= 8092\nIOyXrOs= 8093\nIFVO 8094\nIENsaWNr 8095\nIHByZXBhcg== 8096\nIFRP 8097\nIHN1YQ== 8098\nIEhhbQ== 8099\nIGzDpA== 8100\nIGFic29sdXRl 8101\nIGVuZ2FnZWQ= 8102\nIEhtbQ== 8103\nIGRhc2g= 8104\nVEE= 8105\nw7Fvcw== 8106\nIHNwbw== 8107\nKV0= 8108\nIHRlc3RlZA== 8109\nIGJsYW5r 8110\nIHJlamVjdA== 8111\nIGFzc2lt 8112\nIHJlYXI= 8113\nIFN0cg== 8114\nIGNyYXNo 8115\nINC90LDRiA== 8116\n0LjRgtGB0Y8= 8117\nIGNvbG9u 8118\nIFVudA== 8119\nIENl 8120\nIGFjaWQ= 8121\n6Zc= 8122\nIGtpdA== 8123\naWJpbGl0aWVz 8124\ndXRv 8125\nIHZhbHVhYmxl 8126\nbGlzdA== 8127\nIHBhcnRpZXM= 8128\nIE1t 8129\nIGNvbG91cg== 8130\nIGNoYW0= 8131\nIHN0ZWVs 8132\nIEltcA== 8133\nIGZ1bmRz 8134\nIEROQQ== 8135\nIEtlbg== 8136\naW5kZQ== 8137\n7ZW07ISc 8138\nIEhhcHB5 8139\nIFVzZQ== 8140\nIExpZ2h0 8141\nIGxpcA== 8142\nIGF1dGhvcml0eQ== 8143\nIExvbmc= 8144\nIElyYW4= 8145\nIGVsbA== 8146\nIGNvb3JkaW4= 8147\nIHN1Ym0= 8148\nIHJlY29yZGVk 8149\n0YPRiA== 8150\nIGRlbHRh 8151\nIHJlZm9ybQ== 8152\nIFN0aWxs 8153\nIG9wcG9u 8154\nIGFsbG93aW5n 8155\nIHBhdHRlcm5z 8156\nIGxldHRpbmc= 8157\nIHNsZWVwaW5n 8158\nT2theQ== 8159\nIHBpenph 8160\nIMWb 8161\nINC00L7Quw== 8162\nIHRhbGVudA== 8163\nZW5zaW9ucw== 8164\nIGVudmlyb25tZW50YWw= 8165\nIHByb2Zlc3Nvcg== 8166\nIHNob3Rz 8167\nIGNvbnRhaW5z 8168\ndWdhcg== 8169\neW8= 8170\nj5k= 8171\nIHNlcXVlbmNl 8172\nzrnOsQ== 8173\nYWRlcg== 8174\n6aA= 8175\n0LDRhw== 8176\n2YbYpw== 8177\nIElr 8178\nIHRvdXM= 8179\ndXJpZXM= 8180\nIHBvdW5kcw== 8181\nIGV4dGVybmFs 8182\naW1lbnRz 8183\nIHZyYWltZW50 8184\n7Iuk 8185\nIGhhcHBpbmVzcw== 8186\nIHByemU= 8187\nZXN0aWM= 8188\nIGVzdGFibGlzaA== 8189\nIEZsb3I= 8190\nIHJpZw== 8191\nIGhvbmV5 8192\nIHB1bA== 8193\nIHN5bXB0b21z 8194\nIGJyb3dz 8195\n0LXQu9C4 8196\nIM+Ezr8= 8197\nIHNoaXJ0 8198\nIFRlY2hu 8199\nIFByb2dyYW0= 8200\n0LXQvNGD 8201\nIHVwc2V0 8202\nIGd1ZXN0 8203\nYnVyZw== 8204\nIHVubGlrZQ== 8205\nIHNvbWV3aGF0 8206\nIGhhbmdpbmc= 8207\nYWU= 8208\nIHJ1bQ== 8209\nIHBob3RvZ3JhcGg= 8210\nIExp 8211\nIHN0YWJsZQ== 8212\nIHZvbHRhZ2U= 8213\nIEVsbA== 8214\nIGVudHJlcHJlbmU= 8215\ndXNlcw== 8216\nYXNzZW4= 8217\nrLg= 8218\nIOunjuydtA== 8219\nIGdob3N0 8220\nIHNhZ2Vu 8221\nIGNvbWJhdA== 8222\nIGfDtnI= 8223\nIENhcA== 8224\nIHPDo28= 8225\nIEthdA== 8226\nIGZvcm1h 8227\nIHN1bW0= 8228\nIG1hcmNo 8229\nIHZhc3Q= 8230\nw7xr 8231\nIGNvbW1pdG1lbnQ= 8232\naW1vcw== 8233\nTGV0 8234\nIGRlZGljYXRlZA== 8235\naXN0ZQ== 8236\nbGF5 8237\nIHRvcGljcw== 8238\nIG1hY2hpbmVz 8239\nIFBhcmlz 8240\nIOydtOufsA== 8241\nIG1pbmk= 8242\nIG1hcmtldHM= 8243\nIGtv 8244\nzrQ= 8245\ndmlsbGU= 8246\nIGdvb2RuZXNz 8247\nIGZyYW1ld29yaw== 8248\ndWx0dXJl 8249\nIGJhc2tldA== 8250\nZXNzYQ== 8251\n0LDRhtC4 8252\ndXN0ZXI= 8253\nIOq5 8254\nIGV4dGVudA== 8255\nIE1lbnNjaGVu 8256\nIGNvbnNpc3RlbnQ= 8257\nIGF1dG8= 8258\ncmlw 8259\nIG1lcmU= 8260\n4K+I 8261\n0ZQ= 8262\nIGVsbGU= 8263\njIDr 8264\nb2tlbg== 8265\nIHB1bGxpbmc= 8266\nIGNvdw== 8267\nb3V0aGVybg== 8268\nIG1lZXRpbmdz 8269\nIGNhZGE= 8270\n0L3Ri9C8 8271\naWVudGU= 8272\nIGJhc3Q= 8273\nYW5pbmc= 8274\nIGZvY3VzaW5n 8275\ncm9hZA== 8276\nIHJvb2Y= 8277\nIFByb2Zlc3Nvcg== 8278\nIFNQ 8279\n0YDQsNC3 8280\nIG5vb2Q= 8281\nIDQwMA== 8282\nIOydtOygnA== 8283\n7J6I 8284\nIE1vdW50 8285\n0LXQudGH0LDRgQ== 8286\nINeQ 8287\nV2h5 8288\n154= 8289\nxLFuZGE= 8290\nIHBvc2l0aW9ucw== 8291\nw6htZQ== 8292\n548= 8293\nINC00YDRg9Cz 8294\naXlvcg== 8295\nIHBhc3Npbmc= 8296\nIGFzc2VtYg== 8297\nIHNtb2tl 8298\nIHRpbA== 8299\nIG11c2V1bQ== 8300\n0JQ= 8301\nIFBlcnNvbg== 8302\n0L3QuNC8 8303\nbGVpY2g= 8304\nIGludGVudA== 8305\nIHNxdWU= 8306\nIGNyYWZ0 8307\n7IiY 8308\nb3JzdW4= 8309\nIDE1MA== 8310\nIGJyb3RoZXJz 8311\ndm9y 8312\nIFNwZWFrZXI= 8313\naWNpYW5z 8314\nIG9mZmljZXI= 8315\nIGnDp2lu 8316\nINGC0LXQsQ== 8317\nIHNjcmF0Y2g= 8318\nIGdlbmVyYXRl 8319\neWk= 8320\nIGVtb3Rpb25z 8321\nYXVz 8322\n7LmY 8323\nNDU= 8324\nIExpbms= 8325\nIFJlYWw= 8326\nIGF0ZQ== 8327\nINC90LDQtA== 8328\nIG5hdGl2ZQ== 8329\n4buH 8330\nxLF5 8331\nIGVub3Jt 8332\nIGJsb2Nrcw== 8333\nIGZhY2Vz 8334\nYWNj 8335\naXZlbmVzcw== 8336\nIGluY2hlcw== 8337\ndWlz 8338\naGVpdA== 8339\nIHN0cmVldHM= 8340\nIHByb2JhYmlsaXR5 8341\nYXNp 8342\nIGltcGw= 8343\nIOCk 8344\ndXJkYXk= 8345\nIGZhdXQ= 8346\nb215 8347\nIHBpcA== 8348\nIGlsbHVzdA== 8349\n4K6v 8350\nIEp1bg== 8351\nIGx5aW5n 8352\nOTk= 8353\nIG1lbW9yaWVz 8354\nIHByYWN0aWNhbA== 8355\naWFuYQ== 8356\nb25jZXM= 8357\nIHZpZXdlcnM= 8358\nIFRob21hcw== 8359\n5ow= 8360\nIEdpcmw= 8361\nIFdoZXRoZXI= 8362\nIGlubm92YXRpb24= 8363\nIGRpc2FwcG9pbnQ= 8364\nTXk= 8365\nIHdpbm5lcg== 8366\nIGln 8367\nIHJhdGlv 8368\nIEJsdWU= 8369\nIFN1Yg== 8370\nIGRvY3VtZW50cw== 8371\nIGZvcm11bGE= 8372\nIOup 8373\n0Yo= 8374\nIGFwcGVhcmVk 8375\ndmFy 8376\nYW5kb24= 8377\nIHNwcmF5 8378\nbWFr 8379\nIFFVRVM= 8380\nS0U= 8381\nIHdlZGRpbmc= 8382\nUmU= 8383\n0LDRgtGM0YHRjw== 8384\nIHVubw== 8385\nIGdhbGw= 8386\n7YSw 8387\nY2lv 8388\nY2Vycw== 8389\nINC80L3QtQ== 8390\nIHBlcHBlcg== 8391\nIEZlYnJ1 8392\nIGFsdGVybmF0aXZl 8393\nIGZ1 8394\nIEJhc2ljYWxseQ== 8395\nIFNtaXRo 8396\nIGdhdGU= 8397\nIFRhbQ== 8398\nIFdoYXRldmVy 8399\nIGFwcHJveGlt 8400\nIGNvbmNlcnQ= 8401\nIGp1aWNl 8402\nIEVzcGVjaWFsbHk= 8403\nIGR5bmFtaWM= 8404\nUXU= 8405\nb25kZXI= 8406\naXZlcnk= 8407\nIGJhbmc= 8408\nIHJ1bA== 8409\nIFBhcnR5 8410\nIHNjaG9sYXJz 8411\nIGNyeWluZw== 8412\nasSF 8413\n0KI= 8414\nIFFVRVNUSU9O 8415\ncmlk 8416\nIGFjY3VyYXRl 8417\nw6dv 8418\nIENvb2w= 8419\nY29pbg== 8420\nIOyDgQ== 8421\nIEZv 8422\nIHByw7M= 8423\nIFJvbWFu 8424\nINCf0YA= 8425\nIGNoZWNraW5n 8426\nPyc= 8427\nIGF0dGFjaGVk 8428\nIElzbGFt 8429\nIGV4cGVydHM= 8430\n16c= 8431\nIENvbnN0 8432\n0YDQsNC9 8433\nIHNoYWRvdw== 8434\nIGRlbGF5 8435\n0JI= 8436\nIG9yaWVudA== 8437\n64I= 8438\nZWxsZW4= 8439\nIGFzw60= 8440\n0LrQuNC5 8441\nIGhpc3RvcmljYWw= 8442\nIHVuY29t 8443\nb21w 8444\naG0= 8445\nIGJpbA== 8446\nIHBsYW5uZWQ= 8447\nIFVuZm9ydHVuYXRlbHk= 8448\nIFdpbmRvd3M= 8449\n2LQ= 8450\nIGVuY291bnRlcg== 8451\nIOyDneqwgQ== 8452\nIHJlZ2FyZGluZw== 8453\nYXJyYXNz 8454\nIHJlY292ZXJ5 8455\nIEh1cg== 8456\nIEVtcA== 8457\nIHPDrQ== 8458\n7ZWY6rKM 8459\nIGRlZmVuZA== 8460\nIGNldA== 8461\nYXNzZQ== 8462\n64uo 8463\nb2tlcw== 8464\nIHJlbW90ZQ== 8465\nINiz 8466\nIGFydHM= 8467\naXNjbw== 8468\nYXVjb3Vw 8469\nIE1leGljbw== 8470\nINC/0L7QvA== 8471\nIGNob3Nlbg== 8472\nZW1hdA== 8473\nb2Rpbmc= 8474\nIGZsb3dlcg== 8475\nc3RhbmRpbmc= 8476\nIEFzc29jaQ== 8477\ndW1teQ== 8478\nSUxM 8479\nIGNhbWVyYXM= 8480\nIEFyYWI= 8481\nIFN1bQ== 8482\nIHRlZ28= 8483\nIGNyaW1pbmFs 8484\naWZvcm0= 8485\nIHN0YWNr 8486\n7ISx 8487\nIERvbmFsZA== 8488\nIE9sZA== 8489\nIGR1c3Q= 8490\nIEpvc2U= 8491\nIGhlbQ== 8492\nIGluY3JlYXNlcw== 8493\nb3N0YQ== 8494\nIGR5aW5n 8495\nIFJpdmVy 8496\nIG1vaXN0 8497\n0YLQvtCy 8498\nYXJlcw== 8499\nIGRpc2NpcGw= 8500\ncmFpdA== 8501\nIEhhcw== 8502\neWdlbg== 8503\nIFRyZQ== 8504\nIOu0 8505\nIGxhbmd1YWdlcw== 8506\nIEhlbg== 8507\nIDM2 8508\nIERpc25leQ== 8509\naW50cw== 8510\nIGFsZ28= 8511\nIGZvb2Rz 8512\nIHNldHVw 8513\nbGFu 8514\nIGVmZmVjdGl2ZWx5 8515\nIHdoZXJldmVy 8516\nIHVudGVy 8517\nZm9ybWF0aW9u 8518\nIGhpdHM= 8519\nIHByaW5jaXBsZQ== 8520\nIHRhc3Rlcw== 8521\np4g= 8522\nIHRyZWF0ZWQ= 8523\nIHJlc29sdXRpb24= 8524\nIHByaXZpbGU= 8525\nIElQ 8526\n67A= 8527\nIHRlcnJpdA== 8528\nIHBvd2Vycw== 8529\nIO2D 8530\nIFZpY3Q= 8531\nIGJvdGhlcg== 8532\nIENoYWly 8533\nIG11c2NsZQ== 8534\nIHNhbGU= 8535\nIGRlY2VudA== 8536\nIGNvdXA= 8537\nIFNxdQ== 8538\nIGNvYXN0 8539\nIHJvZA== 8540\nIEZyYW5j 8541\nIGJhdGhyb29t 8542\nIHNob3BwaW5n 8543\nINC80L7QttC10YI= 8544\nIGnFnw== 8545\nIFN0YXk= 8546\nZ3JhZGU= 8547\nIGZvcm1lZA== 8548\nIGJhxZ8= 8549\nIGJyaWxs 8550\nam91cg== 8551\n7ZY= 8552\nd2ll 8553\naWNhdGU= 8554\nIOKAi+KAiw== 8555\nIE5vcm0= 8556\n4KU= 8557\nIG1haW5seQ== 8558\nIFNwYWNl 8559\nIHRyZW1lbmQ= 8560\naXRp 8561\n4K61 8562\nVVQ= 8563\nTXVzaWM= 8564\nIEZlYnJ1YXJ5 8565\nIGNvbnRyYXN0 8566\nZXN0aW5n 8567\nIM60 8568\naW5naW5n 8569\nINmG 8570\nc3Nlbg== 8571\nIEhvbWU= 8572\nIHNoZWxs 8573\nIEhheQ== 8574\nIGFsbGVy 8575\nIEFw 8576\nIFdlc3Rlcm4= 8577\nIFdvcmQ= 8578\nIFBMQVk= 8579\nIOuF 8580\nIEFxdQ== 8581\nIGVudHJ5 8582\nIGxhdW5jaGVk 8583\nIE1lbQ== 8584\nIFBvdXI= 8585\nIHp3ZQ== 8586\nIFNvbWVvbmU= 8587\naW5nZQ== 8588\nIFByb2I= 8589\nbWJsZQ== 8590\nIFJlbA== 8591\ndXJ1 8592\nIHJoeQ== 8593\nIGdpZw== 8594\nIGVuZ2FnZW1lbnQ= 8595\nw7zFnw== 8596\nIG9mZmVyaW5n 8597\nd2hlbA== 8598\nIGFjdG9y 8599\nQVBQ 8600\nd2VzdA== 8601\nIFJveQ== 8602\nIHJldHVybmVk 8603\nIHNpbHZlcg== 8604\ncmF0aW5n 8605\nIGVzdGFy 8606\nIHNrZQ== 8607\nIHRp 8608\naWNhdGlvbg== 8609\nIGFubm95 8610\nIGRlZXBseQ== 8611\n7Jqp 8612\nIG5hdMO8cmxpY2g= 8613\nRUxM 8614\nIENhdGg= 8615\nIHJhaWw= 8616\n0L3QvtCy 8617\nIHByYXllcg== 8618\nY29s 8619\nR0I= 8620\nINCi0LDQug== 8621\nIGdsYQ== 8622\nIFdhdGVy 8623\n0Y/RgtGM 8624\nIE5vbg== 8625\nw7R0 8626\nYWdlcnM= 8627\nIGh1Zw== 8628\nIGRvY3RvcnM= 8629\nYW5jaW5n 8630\nIFRhbGs= 8631\nemluZw== 8632\nIGhhZG4= 8633\nIGx1aQ== 8634\nIGF0w6k= 8635\nIOq3uOumrOqzoA== 8636\n6rmM7KeA 8637\naWNp 8638\nIGluY29ycG9y 8639\nIERp 8640\nemls 8641\nYW55YQ== 8642\nqoU= 8643\nIMK7 8644\nMzU= 8645\nIGJlZXI= 8646\nIGJlYXVjb3Vw 8647\nIE1D 8648\nIGVhcnM= 8649\nb2dlbg== 8650\nIFF1ZXN0 8651\nZWRh 8652\nIFNhdHVyZGF5 8653\nIGZhbGxz 8654\nc3Rvbg== 8655\nYmxlcw== 8656\nIHRodXM= 8657\nIOuEpA== 8658\n4LmE 8659\nIHRoZXJt 8660\nIGRpdmVyc2l0eQ== 8661\nIHNveQ== 8662\nYXp1 8663\naW1w 8664\nIHRlbGV2aXNpb24= 8665\nINep15w= 8666\nIHd1cg== 8667\nIGVkZ2Vz 8668\nIGxlc3NvbnM= 8669\nIEF1ZA== 8670\ndm9pcg== 8671\nYW1lbnRv 8672\nIGV4cGxhaW5lZA== 8673\nINC+0L3QsA== 8674\nIHRlbXBz 8675\nz44= 8676\nVGhleQ== 8677\nIHN1cnByaXNpbmc= 8678\n0LDQvdC40Y8= 8679\nIERyYWc= 8680\nIENsZQ== 8681\nIG5hbQ== 8682\nINC70Y7QtA== 8683\nIGhhcmR3YXJl 8684\nIHRodW1icw== 8685\nIM66zrHOuQ== 8686\nIFRvcA== 8687\nIMOl 8688\n6Zk= 8689\n15XXqA== 8690\nIOq3uOuemOyEnA== 8691\nIEJ1ZGQ= 8692\ndGhlcm4= 8693\nIGludGVyZXN0cw== 8694\n2LA= 8695\nIGRldmVsb3BlcnM= 8696\nIGhpdHRpbmc= 8697\nIG9wcG9zZWQ= 8698\nIGhlYXJ0cw== 8699\nIEFuZHJvaWQ= 8700\nIEhhbmQ= 8701\nIHJlcHJlc2VudHM= 8702\nZ2xpY2g= 8703\n7Yq4 8704\nIDMy 8705\nIGRvbWlu 8706\nIEFubg== 8707\nIMOpdMOp 8708\nIHpvb20= 8709\nIGt0w7NyZQ== 8710\nIGFkdWx0cw== 8711\nIG9yZGVyZWQ= 8712\nIHBpY2tpbmc= 8713\nIEhvbmc= 8714\nIGZpbG1pbmc= 8715\nIHNlZWQ= 8716\nIEFU 8717\nIGNhbGN1bGF0ZQ== 8718\nINC60L7Qs9C00LA= 8719\nIE9z 8720\naWNpdA== 8721\nIHJlbWFpbmluZw== 8722\nIHNlZ3U= 8723\nw7s= 8724\nIOyYpOuKmA== 8725\nIGFycml2ZQ== 8726\nIGNvbmdy 8727\nIGdyYW5kZQ== 8728\nIGhlYWx0aGNhcmU= 8729\nINC80L7QttC90L4= 8730\nU0E= 8731\nZXN0ZQ== 8732\nIGF3YXJlbmVzcw== 8733\nIHNxdWFyZWQ= 8734\neHR1cmU= 8735\nIEJlaW5n 8736\nIHNvbGRpZXJz 8737\n0YPQsQ== 8738\nIHJldm9sdXRpb24= 8739\nIHRyYWluZWQ= 8740\nZW5kZW4= 8741\n6LA= 8742\nIGRhbmNpbmc= 8743\nIGluc3RhbGxlZA== 8744\ncHJpc2U= 8745\nIHZldGVy 8746\nIG1lbm9z 8747\nbmVsbA== 8748\nIEJyb3RoZXI= 8749\nIG51bg== 8750\nIGltcG9ydGFudGx5 8751\nYWxsZWQ= 8752\naWHFgg== 8753\nYWJsZWQ= 8754\nIFN5c3RlbQ== 8755\nIFZvbA== 8756\nIGVsZA== 8757\nIGVtb3Rpb24= 8758\naWNhbg== 8759\nIEJhbms= 8760\naWtlcw== 8761\nIHZsb2c= 8762\nINCy0L7Qtw== 8763\nIHB1ZWRl 8764\n7Jik 8765\nIHRlZW4= 8766\nIHNldmVyZQ== 8767\nJSw= 8768\nIGNsZWFuaW5n 8769\nesSF 8770\nl5A= 8771\nIFRocm91Z2g= 8772\nIFNldA== 8773\nRVA= 8774\nIj8= 8775\nIE1vdGhlcg== 8776\nIGZpZ3VyZWQ= 8777\nIG11ZA== 8778\nINGW 8779\nIE9mZmljZQ== 8780\nIHJhdw== 8781\nIGRlc3Ryb3llZA== 8782\nZW50YQ== 8783\nIGFnZ3Jlc3M= 8784\nINC+0YE= 8785\nIOuqqOs= 8786\nw6TDpA== 8787\nIEFS 8788\nIGNvcnJlY3RseQ== 8789\nIHN0aXI= 8790\nIGV4dHJhY3Q= 8791\nIHZlaGljbGVz 8792\nIFJ1bg== 8793\nINCy0YDQtdC8 8794\nIHBhcmFsbGVs 8795\nIGxhZw== 8796\nanU= 8797\nIGRhcmU= 8798\nIE1vdA== 8799\nb25v 8800\nIGJlaW5ncw== 8801\nIHN0cm8= 8802\nIGV4Y3VzZQ== 8803\nIGFscGhh 8804\nIGFza3M= 8805\nIHBvY2tldA== 8806\nLi4uPw== 8807\nIGtpdGE= 8808\nw7xt 8809\nIGFwcGVhcmFuY2U= 8810\nb3JkYW4= 8811\nIGluc2VydA== 8812\nINC90LDRhw== 8813\nm2k= 8814\nIHRlbXBv 8815\nIGZhY2lsaXR5 8816\nIHZpc2libGU= 8817\n5ZI= 8818\nIFNjaWVuY2U= 8819\ndXJvcw== 8820\nINmB2Yo= 8821\nIFZhbg== 8822\nIHRlbnNpb24= 8823\nIO2VoA== 8824\nIGRlbGl2ZXJ5 8825\nIHN0aW0= 8826\nIHN1cnZleQ== 8827\nIEdyYQ== 8828\nIGJvbA== 8829\n5qA= 8830\nIHdlaXRlcg== 8831\nw59lbg== 8832\nIHByb2NlZWQ= 8833\nIGltcHJlc3NpdmU= 8834\nIFZvYw== 8835\naW91c2x5 8836\nINC00LA= 8837\naGFsZQ== 8838\nb2No 8839\nIGdsdWU= 8840\ncGhldA== 8841\nY29udA== 8842\nIGZpdHM= 8843\nIGJveGVz 8844\nIGNvbnRyb2xz 8845\nIENoaWxk 8846\nIHNjZW5hcmlv 8847\nIHRyb3A= 8848\nIHByb2Nlc3Npbmc= 8849\nINGC0L7Qu9GM0LrQvg== 8850\nIGJpcmRz 8851\nIENoaWM= 8852\nINC90LDQvw== 8853\nIDIwMTM= 8854\nIG3DvHNzZW4= 8855\nIEphZw== 8856\nIHPEhQ== 8857\nIHBlcmNl 8858\ncmVo 8859\nIEZvcmU= 8860\nIGNvbmZ1c2Vk 8861\nYWlyZQ== 8862\nIGFjY29tcGxpc2g= 8863\nIGNhc2E= 8864\nY2xvY2s= 8865\nIGluZmx1ZW4= 8866\nIFJP 8867\nIGJvbmU= 8868\naWNpYW4= 8869\nIFND 8870\nIHN0cmF0ZWdpZXM= 8871\nZ2g= 8872\n0LTRgw== 8873\nIGl0dQ== 8874\nIHBlcnNvbmFsaXR5 8875\nIGJhcmR6bw== 8876\nIGFjY2VwdGVk 8877\nIHN0b20= 8878\naWV2 8879\nIEhpc3Q= 8880\nIEF1cw== 8881\nIOuwlOs= 8882\nQVRPUg== 8883\nb2ly 8884\nIG1hZ2F6 8885\nIGV4cGxhbg== 8886\nIGNvcm4= 8887\nIGlscw== 8888\nIGNpcmN1aXQ= 8889\nIGdheQ== 8890\naG9w 8891\nIGVxdWl2YWw= 8892\nIGRpZXNlcg== 8893\nZXJ2ZXM= 8894\nY29tZXM= 8895\na2xpY2g= 8896\nIOuVjOs= 8897\nYWJldA== 8898\nIGV4aGE= 8899\nIG1hbm5lcg== 8900\nIOKZquKZqg== 8901\nw6lj 8902\nw6Rs 8903\nIGNvbmZpcm0= 8904\nIGVudGVyZWQ= 8905\nZW1wbG8= 8906\nIEZhcg== 8907\nIG/DuQ== 8908\nZXNzaW9ucw== 8909\nIG51cnM= 8910\nIGVudMOjbw== 8911\nIGFiYW5kb24= 8912\nbGlmZQ== 8913\nIHdpcw== 8914\nTmFycmF0b3I= 8915\nIOyWtA== 8916\nVGhlcmU= 8917\nIFJhbQ== 8918\nYXN0ZQ== 8919\nIGF0dHJpYg== 8920\nIEF5 8921\nIG1lc21v 8922\nIM69zrE= 8923\n6as= 8924\nZW5zZXM= 8925\nIGNyb3A= 8926\nINC30LTQtdGB0Yw= 8927\nIFVudGls 8928\nc3RlaW4= 8929\nIG92ZW4= 8930\nIHN1c3BlY3Q= 8931\naGV0 8932\nIHB1aXM= 8933\nIGNhcnJpZWQ= 8934\nw6ln 8935\nIERldg== 8936\nZW1z 8937\ncmVlbnM= 8938\nYmVycnk= 8939\nIHRlbXBs 8940\nIEJpdA== 8941\nIHZhcmlhYmxlcw== 8942\nIG92ZXJ3aGVs 8943\nzrzOtQ== 8944\nIGluaXRpYWxseQ== 8945\n7JWY 8946\nb3RoaW5n 8947\n0LXRgtGM 8948\nIEhpbGw= 8949\nIGRlcGFydA== 8950\nIG15c3Q= 8951\nYXp6 8952\nIGZsdWlk 8953\nIERD 8954\nIGNsaW5pY2Fs 8955\nIFJ5YW4= 8956\nIEZsb3JpZGE= 8957\nIFRhaw== 8958\nIGFueGlldHk= 8959\nYnJv 8960\nIGNpcmN1bXN0YW5jZXM= 8961\nINmD 8962\nIGV4aXN0ZW5jZQ== 8963\nIHRvbmc= 8964\nIDIwMTI= 8965\nIFNlY3JldGFyeQ== 8966\nIHNwaWN5 8967\nIFso 8968\nIFdpdGhvdXQ= 8969\nIGZhY3Rz 8970\nIHRvbnM= 8971\nQXBw 8972\nIFN0YW5k 8973\nIGxpZXM= 8974\nIEFE 8975\nd2lu 8976\nz4TOtQ== 8977\nYXBwbGF1c2U= 8978\nSVA= 8979\nc3Rh 8980\nIFN1cA== 8981\ncGhvbmVz 8982\nnpE= 8983\ncGll 8984\nIFBvdA== 8985\nIE5P 8986\nINee 8987\nINCU0LA= 8988\naWNhcw== 8989\nIEly 8990\nIHB1c2hlZA== 8991\nIHVuY2xl 8992\nINmF2YY= 8993\nIGxvbg== 8994\nIHByaW5jaXBsZXM= 8995\nIEludGVybmF0aW9uYWw= 8996\nIMOW 8997\nxb4= 8998\nIHNheWE= 8999\nIOqzoA== 9000\nIHJpYg== 9001\nIHBhc3Rl 9002\nIHdhcm5pbmc= 9003\nIG11c2ljYWw= 9004\nIGFncmVlZA== 9005\n0L7RgNC8 9006\nIGdhcmxpYw== 9007\nIG94eWdlbg== 9008\n7JiI 9009\nQWw= 9010\nIOunng== 9011\nZWxpbmVz 9012\nTEFVU0U= 9013\nZ3lwdA== 9014\nR0U= 9015\nY2tlcg== 9016\ndHU= 9017\nIHNoZWw= 9018\nIHN0YXllZA== 9019\nINCz0L7QtA== 9020\nIGxhcHQ= 9021\nIE1hcnRpbg== 9022\nIGludml0ZWQ= 9023\nIGNvbmZpcg== 9024\nIGVtYmFycmFzcw== 9025\nYWNpb25lcw== 9026\nIENhbXA= 9027\nIGhvbGRz 9028\nYXh5 9029\nIGRpdmU= 9030\ndWNrbGVz 9031\nIGJvb3N0 9032\nIHfDvHI= 9033\nc3RhbA== 9034\nINGA0LDQsdC+0YI= 9035\nIGTDqWM= 9036\nIG9mZmljZXJz 9037\nIOyVhOs= 9038\nb2xvZ2lzdA== 9039\n157X 9040\nIHNlZWRz 9041\nIGJ1ZmY= 9042\nIHVwZGF0ZXM= 9043\nZGVk 9044\nIGZyaWVuZGx5 9045\nIGNvdW5jaWw= 9046\nIFByb2JhYmx5 9047\nIHBpYW5v 9048\nIHJlZHVjZWQ= 9049\nz4TOsQ== 9050\nIGF1dGhlbnQ= 9051\nIGV4cGxvcw== 9052\ncGFzcw== 9053\nIEhpdA== 9054\nanVk 9055\nIE5hdg== 9056\nb21p 9057\nIGNvbW1pc3Npb24= 9058\nIGd5bQ== 9059\n0J8= 9060\nIHBvbg== 9061\n0YDQvtGB 9062\nIGludGVyZmFjZQ== 9063\nIHN0cnVjdHVyZXM= 9064\nIEplbg== 9065\nIHlvaw== 9066\nIG1ldQ== 9067\n7KeA66eM 9068\nbmVk 9069\nIFdpZQ== 9070\nIGlkZW50aWZpZWQ= 9071\nIGNoYW5uZWxz 9072\nxLFuYQ== 9073\nIHBoaWxvc29w 9074\na2VpdA== 9075\nIGJpdHM= 9076\nZW50ZXM= 9077\nIGZyYWc= 9078\nIEtpbmQ= 9079\nIGRvY2g= 9080\nIHNuZQ== 9081\naW5kaW5n 9082\nIEpld2lzaA== 9083\n0L7RgNC+0Yg= 9084\nIGZ1ZQ== 9085\nIO2P 9086\nIG3EsQ== 9087\nIGtlaW5l 9088\nIGxvY2F0aW9ucw== 9089\nIG1ldGVy 9090\nIGJlZWY= 9091\nIG1hbmlw 9092\nIHNvbm8= 9093\nenpsZQ== 9094\n57Y= 9095\nIHBlcw== 9096\nIGhvcnJpYmxl 9097\nIFNu 9098\nIGZhY3Rvcnk= 9099\nIGZpZnRo 9100\nIGNvb2tlZA== 9101\nIG1vb2Q= 9102\nIHZlbG9jaXR5 9103\nIG9ibGln 9104\nIGNvbm5lY3Rpb25z 9105\nxJ9pbQ== 9106\nIOqztQ== 9107\nIGRvbWFpbg== 9108\nIGFwcGx5aW5n 9109\nIHJpZGlj 9110\nIGNlbA== 9111\nIGNoaWxkaG9vZA== 9112\nIFRlc3Q= 9113\ncmF0dWxhdGlvbnM= 9114\nIFZpcmdpbg== 9115\nIENFTw== 9116\nINC/0Ls= 9117\nIGFsZ29yaXRobQ== 9118\nIGludGVyYWN0aW9u 9119\nYWdh 9120\nIGtpZGRpbmc= 9121\nIHRvbWF0bw== 9122\nIGNvbnRpbnVpbmc= 9123\nbGFk 9124\nc3RyZWFt 9125\n0L7QttC1 9126\nIOyYgQ== 9127\n0LXQu9C+0LI= 9128\nQkE= 9129\nIG5hcA== 9130\nIE5vYm9keQ== 9131\nIHRodW1i 9132\nIE9O 9133\nIHJ1c2g= 9134\nRFI= 9135\nIHN0cmlrZQ== 9136\nIGV2b2x1dGlvbg== 9137\naWNoZQ== 9138\nIOy7 9139\nIOq3uOufsA== 9140\n2KfYqg== 9141\nIGFr 9142\nIHdpbmRvd3M= 9143\nIGV4Y2Vzcw== 9144\nIGNvbmNsdWQ= 9145\nIGVwaXNvZGVz 9146\nIHN0cnVnZ2xpbmc= 9147\nIERhdA== 9148\nnbzr 9149\nIGtleXM= 9150\nIGtsZQ== 9151\nIHZlZ2V0YWJsZXM= 9152\neXN0ZW0= 9153\nw6puY2lh 9154\ncmljaw== 9155\nIHJldmVudWU= 9156\nIEhhdw== 9157\nIGxhbg== 9158\nYW50ZXM= 9159\naW5peg== 9160\n0LjRgdGC 9161\nIHN1cA== 9162\nqbTshJw= 9163\nIG1vbWVudG8= 9164\naXN0bw== 9165\nIEVyaWM= 9166\naW9ycw== 9167\nYmFq 9168\nIGludHJvZHVjdGlvbg== 9169\naXJ0eQ== 9170\nIGRlY2s= 9171\ncmVhbA== 9172\nIE1hcmlv 9173\nIGxvdmluZw== 9174\n4LiU 9175\nIHN1cHBvcnRz 9176\n0LjRh9C10YE= 9177\nIGluY2lkZW50 9178\ndXRjaA== 9179\ndXY= 9180\nIGJvb20= 9181\n0LXRgNGM 9182\nINC90YPQtg== 9183\nIGNvbWJpbmVk 9184\nIExpbg== 9185\nMjM= 9186\nb3JhdGlvbg== 9187\nbnRl 9188\nIHNvcg== 9189\nIGRpcnR5 9190\naWZlcg== 9191\nIEFQSQ== 9192\nIGNvbGxhYm9yYXRpb24= 9193\naWFibGU= 9194\nIHByaW9yaXR5 9195\nIEFsZQ== 9196\nIFByaW4= 9197\nIEV4Yw== 9198\nIHZhaXM= 9199\nIGdyYW4= 9200\nIHN0b29k 9201\nIHJlY3J1 9202\nIE11cg== 9203\nZXNpcw== 9204\nYXNw 9205\nIGxvY2tlZA== 9206\nIFBlcm8= 9207\nIEhhcnJ5 9208\nIHR1ZG8= 9209\nIFRlbg== 9210\n2LU= 9211\nZm9yY2VtZW50 9212\nKSk= 9213\nb2xp 9214\nIOyduA== 9215\nIHN1cHBs 9216\nIGNyb2NoZXQ= 9217\nIHBoZW5vbWVu 9218\nbG9z 9219\nYXRoYW4= 9220\nIFN1cHA= 9221\nIGVtYnI= 9222\nIGJlaw== 9223\nIFplaXQ= 9224\nZ2VuZA== 9225\nIHJvb21z 9226\nqr0= 9227\nVkVS 9228\nbnljaA== 9229\nIGRvbnQ= 9230\nIGNhYmlu 9231\nIGFjY291bnRz 9232\nIEVhc3Rlcg== 9233\n15XXnA== 9234\nIGZhY2lsaXRpZXM= 9235\nYmVpdA== 9236\nIGxpbmtlZA== 9237\nIEdlcg== 9238\nIHByb2dyYW1taW5n 9239\nb3RpYw== 9240\nIGRyYW1h 9241\nIDI5 9242\nIO2B 9243\nIGluc3RydWN0aW9ucw== 9244\nIGltcG9ydGFudGU= 9245\nIHdhdmVz 9246\nIGFpZA== 9247\nQ0s= 9248\n6rKg7Iq164uI64uk 9249\nIE1pcg== 9250\nIHRpZA== 9251\nIEhvdA== 9252\nIGFycmFuZ2U= 9253\nIEJhYnk= 9254\nIHRhY2s= 9255\nINGJ 9256\n7Z0= 9257\nIHZlcnRpY2Fs 9258\nIGhlZWw= 9259\nIEN1dA== 9260\nIG5hcnJvdw== 9261\nIEFyaQ== 9262\nIGtuZWU= 9263\nIEJyYXppbA== 9264\nIEZpdmU= 9265\nIHBvc3RlZA== 9266\nVUQ= 9267\nIHJvbGxpbmc= 9268\nzrg= 9269\nIGNsYWltcw== 9270\nIElucw== 9271\nT0s= 9272\ndWlu 9273\nIEluc3RpdHV0ZQ== 9274\nIGludGVuc2U= 9275\naWFy 9276\nIE5pY2s= 9277\nIHNlbGVjdGlvbg== 9278\nIGxlZ2VuZA== 9279\nIHVuaWZvcm0= 9280\nw7pu 9281\nIHN0dWRpZWQ= 9282\nINCl 9283\nIOyVjA== 9284\nZ2Vycw== 9285\nIGRvdw== 9286\nIENT 9287\nIGFnZW50 9288\nIEF1Zg== 9289\nIGpvZw== 9290\nIGFpcmNyYWZ0 9291\n64uY 9292\nIHZpdA== 9293\ndWxz 9294\nIHNlZ21lbnQ= 9295\nIG9yZGVycw== 9296\nIENsYXNz 9297\nIGFwb2xvZw== 9298\nIHBsYXRmb3Jtcw== 9299\nIG15dGg= 9300\n0LDQttC1 9301\nIEJvb2s= 9302\nIHNlbnNpdGl2ZQ== 9303\nINC/0L7Qu9GD0Yc= 9304\nIGRhbWl0 9305\nIENhcHQ= 9306\nc29sZQ== 9307\nIGFyY2hpdGVjdHVyZQ== 9308\nIFdpbA== 9309\nIGluaGVy 9310\nY2Fw 9311\nIEJveQ== 9312\nIGJ1cm5pbmc= 9313\nIFB1YmxpYw== 9314\nIGJlaGFsZg== 9315\nIOychA== 9316\nIHRoZXJhcHk= 9317\ndWJzY3JpYmU= 9318\nIGludm9sdmU= 9319\nIGV4cG9zZWQ= 9320\nacWf 9321\nw6p0cmU= 9322\nIHRvaWw= 9323\nIHNpbms= 9324\ncGly 9325\n5YM= 9326\nSUk= 9327\nIGFnZW5jaWVz 9328\nIHE= 9329\nIERvd24= 9330\nYXVm 9331\nIOunmw== 9332\nIHByb2M= 9333\nb2tlZA== 9334\nIHN0b3Jlcw== 9335\ncG93ZXI= 9336\nIFRoaW5ncw== 9337\nIGFjY2Vzc2libGU= 9338\nIHRlxbw= 9339\nIEVkdWM= 9340\nIHNwZWFrZXJz 9341\nIFNhcmFo 9342\nlJQ= 9343\nIGRpdmVyc2U= 9344\n7J6W 9345\nIFVsdA== 9346\nw6B5 9347\nIENoaWNhZ28= 9348\nU2hl 9349\nYXRoeQ== 9350\nIGVuYWJsZQ== 9351\nIHRyYWRpbmc= 9352\nIG11c2NsZXM= 9353\n5ps= 9354\nIENhcmU= 9355\nIFVy 9356\nIFNjb3Q= 9357\nIHBocmFzZQ== 9358\nRU5U 9359\nIOqyvQ== 9360\nIEphYw== 9361\ncGFjaw== 9362\nIGRldGVybWluZWQ= 9363\nw7xuZA== 9364\nIG5lZ290aQ== 9365\nIHZpZMOp 9366\nIHJveg== 9367\nIFN1cw== 9368\nIHJpZGluZw== 9369\naG1lbg== 9370\nIERlZg== 9371\nIENyZQ== 9372\nIFdhbGw= 9373\naWdhbg== 9374\nIHNlbXByZQ== 9375\n0ZbQtA== 9376\nIGRyaXZlbg== 9377\nIGZvb3RhZ2U= 9378\nIGZvbmQ= 9379\nIFdheQ== 9380\nw6Rt 9381\nIE9iYW1h 9382\nIFNlcnZpY2U= 9383\nIDc1 9384\nIERhcms= 9385\nIOq3vOs= 9386\nIENhdA== 9387\n2Lc= 9388\n6Yw= 9389\nIGp1Zw== 9390\nIGV0d2Fz 9391\nIGJyZWF0aGluZw== 9392\n4buD 9393\nIFdlYg== 9394\nIGZvaXM= 9395\nIGxpZ2h0aW5n 9396\nIERB 9397\nIG9ic3Q= 9398\nIGxldXI= 9399\nIEVneXB0 9400\nIEFybXk= 9401\naWNpZGU= 9402\n0LDRgtC4 9403\nIOuLpOs= 9404\nIGFwYXJ0bWVudA== 9405\nIGNoaWVm 9406\nIFdlZA== 9407\nIG5ldHdvcmtz 9408\nIGJhdHQ= 9409\n5rg= 9410\nIEx1Yw== 9411\nIG5pY2VseQ== 9412\nIHZlcmI= 9413\n4Li0 9414\n7LY= 9415\nb3NpdA== 9416\nIHJldmVhbGVk 9417\nIHRhdA== 9418\nIHRpZWQ= 9419\n4buB 9420\nIGFuaW1hdGlvbg== 9421\nIHJvbGVz 9422\n7Iqk7Q== 9423\nIHZlcnNpb25z 9424\n0YfQuNGC 9425\nIHRhc2tz 9426\nr7w= 9427\nIHJlc2M= 9428\nc2hl 9429\nIGxvb3Nl 9430\nIGPhuw== 9431\nIGNvaXNh 9432\nIGFsZXJ0 9433\nIG5pbg== 9434\nIFNBTQ== 9435\nIHRyYWJhag== 9436\naXJ1cw== 9437\nVEg= 9438\nxqE= 9439\nb2dldGhlcg== 9440\nIFRhaQ== 9441\nIGZpZ3VyZXM= 9442\nINeQ16o= 9443\nIGNyZWVw 9444\nIGludmVzdGlnYXRpb24= 9445\nIHJlY29tbWVuZGVk 9446\nIEFr 9447\nIHJlc2lkZW50cw== 9448\n0YHRgtCy0L4= 9449\nc2VjdA== 9450\n0LDQvdC40LU= 9451\nIG1pbmRz 9452\ndWluZw== 9453\n5bE= 9454\nb3dpbmc= 9455\nIG5vZw== 9456\nIHJheg== 9457\n2KfYsQ== 9458\nIHF1b3Q= 9459\nINC40YU= 9460\nIHNlZA== 9461\nIGFwcGxhdWQ= 9462\nIGNvdmVyYWdl 9463\ndm9s 9464\nIFJlYw== 9465\nxJs= 9466\nINCy0YHRkQ== 9467\nIGV4cGVjdGluZw== 9468\nIG9wZXJhdGU= 9469\nIGNvbnZlcg== 9470\nIFN1Y2g= 9471\nIFJhZA== 9472\nIFByaW1l 9473\nIHB1cnBsZQ== 9474\nIDIwMTA= 9475\nIOyViOs= 9476\nIGV4ZW0= 9477\nIGNvbXBhcmlzb24= 9478\nIGxhbmRzY2FwZQ== 9479\nIG5laXRoZXI= 9480\nIEVo 9481\n64U= 9482\nIHN0b21hY2g= 9483\nIGNhc28= 9484\nw6Ju 9485\nIHBlcmNlbnRhZ2U= 9486\nd2ljaA== 9487\naXRhbg== 9488\nIGts 9489\nIGV4cGFucw== 9490\nINin2YTZhQ== 9491\nIG9jY2FzaW9u 9492\ncmV0cw== 9493\naWduaW5n 9494\nIGtpbG9tZXQ= 9495\nIGd1c3Q= 9496\nY3pl 9497\nIHVyYmFu 9498\nIGFncmlj 9499\nIGFzc2lzdGFuY2U= 9500\nIHN1cmY= 9501\naW1ldGVy 9502\nIHBldGl0 9503\nIGFzc2Vzc21lbnQ= 9504\nIG1hbnVhbA== 9505\nIGltcHJvdmVk 9506\nYnN0 9507\nIHBpbG90 9508\nIE1hcnM= 9509\nIHZpZWxl 9510\nIENvbmdyYXR1bGF0aW9ucw== 9511\nIGFyZ3Vl 9512\nIHdpcmtsaWNo 9513\nIGNsaWNraW5n 9514\nUklT 9515\nIGxvZ28= 9516\nIG91dGNvbWU= 9517\nIENlbnRyYWw= 9518\nIEpp 9519\nIGdhbWluZw== 9520\nIGNvbnNlcnY= 9521\nIHVsdGltYXRl 9522\nIFZl 9523\nIFdhbA== 9524\nYXJv 9525\nc3Rhcg== 9526\nIGNvbnN1bWVy 9527\nIHRyYXZlbGluZw== 9528\naW1lcg== 9529\nIDEwMDA= 9530\n0L3QuNC6 9531\nIHByaW5jaXBhbA== 9532\nIHNha2U= 9533\n0ZbQsg== 9534\nIG1vdXNl 9535\nYXJpb3M= 9536\nIHJlbGF0aW9u 9537\nIG1vcmFs 9538\nIHRoZXRh 9539\nd3k= 9540\nIGthbQ== 9541\nIGVpZw== 9542\nIGdvbGRlbg== 9543\n16Q= 9544\nIGFtcGw= 9545\nIHZ1 9546\nc3Ry 9547\ncm9ycw== 9548\nIHdoZXJlYXM= 9549\naXphcg== 9550\nIGFkbWluaXN0cg== 9551\nIG7Ds3M= 9552\nIFByZXQ= 9553\nIEFjYWQ= 9554\nYW5naW5n 9555\nYmFnZQ== 9556\nw6l0YWl0 9557\ndXJp 9558\nIGhlYWxpbmc= 9559\nIHRpcG8= 9560\nIG1hcnJ5 9561\n0YPQsg== 9562\nIGVzdGF0ZQ== 9563\ndXU= 9564\n7JQ= 9565\nIEJlc3Q= 9566\nIHN1ZmZlcg== 9567\nIDE5NA== 9568\nIGJhY3Rlcg== 9569\nINCS0L7Rgg== 9570\nIE9t 9571\nIGR6 9572\n6LY= 9573\n7KY= 9574\nIG9sZHU= 9575\nIHBoeXNpY2FsbHk= 9576\nIExvdWlz 9577\nZXRpbWU= 9578\nY2FzZQ== 9579\nIHBpZXI= 9580\n7KCc 9581\ndmFu 9582\nIGFzc2V0cw== 9583\nIOuB 9584\ndmV0 9585\n0LjQsQ== 9586\nIHByb21vdGU= 9587\nIGNvbmdyYXQ= 9588\ndWVzZGF5 9589\nIGR1dHk= 9590\nIFZpZGVv 9591\n2K4= 9592\nIEpvaG5zb24= 9593\na3Rpb24= 9594\nIFZvY8Oq 9595\n44CL 9596\nIGFp 9597\nIGFubnVhbA== 9598\nIEpvc2g= 9599\naXR0ZQ== 9600\nIEpP 9601\nIHNsaWRlcw== 9602\nIGFuYw== 9603\nuYQ= 9604\ndGVlbg== 9605\nIGNhcnJ5aW5n 9606\nbHltcA== 9607\nZWRpbmc= 9608\nIGZybw== 9609\nIGFkbWl0 9610\ncmVy 9611\nIG9mZmljaWFscw== 9612\ncHRpb25z 9613\nZ2Fs 9614\nIGhldXRl 9615\nIHZvaWNlcw== 9616\nIGJhbGxz 9617\nIGd1ZXN0cw== 9618\nYW5uZXI= 9619\n44CK 9620\naXNoZXI= 9621\nIE1S 9622\nIFJpY2hhcmQ= 9623\nIHJvdWdobHk= 9624\nbMSx 9625\nIHZpY3Rvcnk= 9626\nIGFsZ3Vu 9627\nIE1ycw== 9628\nxZtjaWU= 9629\nIFVr 9630\nIGV5 9631\nIFdhcnM= 9632\nIGJyYW5jaA== 9633\nYXN0eQ== 9634\nIFByaW5jZQ== 9635\n0LXQutGC 9636\nIHJlY29nbml6ZWQ= 9637\nIG11Y2hv 9638\nIExlYXZl 9639\nY29ubmVjdA== 9640\nIHNwZWxs 9641\nIHRvdWNoZWQ= 9642\nIGFnZW5kYQ== 9643\n6L4= 9644\nYXJpYQ== 9645\nIEtvbmc= 9646\nb2dh 9647\nIHBhcmFtZXRlcnM= 9648\n64uk6w== 9649\nIGluc3RhbnQ= 9650\nIHJlZ3Vs 9651\nQ29u 9652\nIGVkaXRvcg== 9653\nIERpc3Q= 9654\nIHVua25vd24= 9655\nIHB1bmlzaA== 9656\nIGV4cGVjdGF0aW9ucw== 9657\nIGNyeXB0 9658\nIGRpdmlkZQ== 9659\nYWtlbg== 9660\nIE1lc3M= 9661\nIGh5cGVy 9662\nIFByb2plY3Q= 9663\naWtp 9664\nIGFnb3Jh 9665\nIGFidXNl 9666\nIGNhdXNpbmc= 9667\nIGNvbnZpbg== 9668\nIExB 9669\nIGNvbmNlbnRyYXRpb24= 9670\nIGJyZWFrcw== 9671\ndXJlcg== 9672\nIGNvbmNyZXRl 9673\nIGZvcm1hbA== 9674\nIGJldGE= 9675\naXRvcnM= 9676\nIENoYW1w 9677\nIGhlYWRpbmc= 9678\nIEJsbw== 9679\nIHByZW5k 9680\nIFNlbmF0ZQ== 9681\nIGFkdmVudHVyZQ== 9682\nb3Nv 9683\nIG9wZW5z 9684\nIFBMQVlJTkc= 9685\nIFNV 9686\ndXJlbg== 9687\naWt0 9688\nINC70Y7QsQ== 9689\nIEZvbGxvdw== 9690\nIEJpZGVu 9691\nZWxu 9692\nIFNreQ== 9693\nZXRpbmc= 9694\nIEV4dA== 9695\n0L3Rg9GO 9696\nIOyZnA== 9697\nIHNocg== 9698\nZWxsYQ== 9699\nIERpdg== 9700\nIHRyYW5zZm9ybWF0aW9u 9701\nIGhvdXNlaG9sZA== 9702\nZXRyeQ== 9703\n6KE= 9704\nIERlc3A= 9705\nIGNvdXJhZ2U= 9706\nIHBhcmtpbmc= 9707\nIGV0dMOk 9708\nY2Fs 9709\nbHlu 9710\nIGxhaWQ= 9711\nIHRyaWVz 9712\naXJ0cw== 9713\naWdh 9714\nIHJlY2FsbA== 9715\naWZpZXI= 9716\nz4HOsQ== 9717\nIGFhbg== 9718\nIGJ1dHRvbnM= 9719\nIHJlYWNoaW5n 9720\nIOq3vOuNsA== 9721\nIHNwYXJr 9722\nIFNvY2lhbA== 9723\nINC10YnQtQ== 9724\nIGNhbmFs 9725\nIGNyaXRlcg== 9726\nIGt0w7NyeQ== 9727\nIHRlbmVtb3M= 9728\ngqw= 9729\nINC90LXRgg== 9730\nIHR1YmU= 9731\nYWNsZXM= 9732\n0LjRiA== 9733\nIGRlxJ9pbA== 9734\nIHN0YW1w 9735\nIGluZmw= 9736\nIGFob3Jh 9737\nIHRyYWls 9738\nIG1peHR1cmU= 9739\nIFJvbGw= 9740\nIHJvdXRpbmU= 9741\nIGNvdW50eQ== 9742\nIGVuam95aW5n 9743\n0L3QvtGB0YLRjA== 9744\nZXJlcw== 9745\nIHB1cnBvc2Vz 9746\nIFNhbnRh 9747\nIGJyZWFzdA== 9748\nw6RuZw== 9749\nIHdyaXRlcg== 9750\n5Yw= 9751\n0YDQvg== 9752\nIG5lbQ== 9753\naWNvcw== 9754\n0LDRgdGC 9755\nIGRldGFpbGVk 9756\nIHJldmVyc2U= 9757\nIFJlYWR5 9758\nIGRpc3RyYWN0 9759\nIEFsb3Jz 9760\ndXR0ZXI= 9761\nIGRlc2VydmU= 9762\nIFJvbg== 9763\n0L3QvtC8 9764\nIG9ic2Vydg== 9765\nIGxvZ2lj 9766\nIFB5 9767\nIEtldmlu 9768\npbQ= 9769\n2YrZhg== 9770\nIHNrYQ== 9771\nIHRhY3Q= 9772\nIGhvbGlkYXk= 9773\nIGJ1bXA= 9774\nINC80L7Qsw== 9775\nIGRlaXg= 9776\n7YU= 9777\nIHdvcnNoaXA= 9778\nQ2w= 9779\nIHN1Y2s= 9780\nINGB0LXQsQ== 9781\nIGFwcGxhdXNl 9782\nIEVw 9783\nINC80L4= 9784\nIHBhdGNo 9785\n4bqt 9786\nIGxhZGllcw== 9787\nIGJyb2FkY2FzdA== 9788\nIGlsbGVn 9789\nIG5hcnJhdGl2ZQ== 9790\nb3NzYQ== 9791\nQVJSQVRPUg== 9792\nIHNhbmc= 9793\nIG1vdmVtZW50cw== 9794\nIHBhcnRuZXJzaGlw 9795\nIG9yZ2FuaXplZA== 9796\nIG5vZGU= 9797\nZXN0eWxl 9798\nIE1lZw== 9799\nIGluZHVzdHJpYWw= 9800\nIGdvbA== 9801\nIGJvcmluZw== 9802\nIGN1dHM= 9803\nIHJlY29u 9804\nYXNh 9805\nIGltcHJlc3Npb24= 9806\n7Jq0 9807\nZ2ll 9808\nTUE= 9809\nhrU= 9810\nIGVkaXRpbmc= 9811\ncm9udA== 9812\nIGZvbGxvd3M= 9813\nIEl0YWxpYW4= 9814\n0YDQvtC0 9815\nIOqwmeydgA== 9816\nIOuwqQ== 9817\nIHBhcnRpY2xlcw== 9818\nIEJvYXJk 9819\n15nXqg== 9820\nanVu 9821\ncm9uaWM= 9822\nIGVq 9823\nIM+Ezrc= 9824\n15XXkw== 9825\nY2lvbg== 9826\naXR0eQ== 9827\nIFR1ZXNkYXk= 9828\ndW1lcw== 9829\nIFByb3Q= 9830\nZWRlcg== 9831\nIHBlc3NvYXM= 9832\nINC90L7Qsg== 9833\nIHNraXA= 9834\nIG9iamVjdGl2ZQ== 9835\nw61hcw== 9836\nIGRlc2s= 9837\nIExvb2tz 9838\ndW5kZW4= 9839\nIHByaW1hcmlseQ== 9840\naW1lbnRv 9841\nIHJlcG9ydGluZw== 9842\nIGhhY2U= 9843\nIGNoZWNrZWQ= 9844\n6Zg= 9845\nIOuztOs= 9846\nIHNtZWxscw== 9847\nIGFjdG9ycw== 9848\nIEFzaWE= 9849\naWzDoA== 9850\nIHJlY2VpdmluZw== 9851\nIHRheGVz 9852\nIGdyYWNl 9853\nIGNvbXBldGl0aXZl 9854\nIGRpdmlzaW9u 9855\nIGVzcGVy 9856\nIHdoZWVscw== 9857\nIGtvbW10 9858\nIHRyZW1lbmRvdXM= 9859\nIGVzcGU= 9860\nLi4uKQ== 9861\nIOyehQ== 9862\nIGxpc3RlZA== 9863\nw6RsbA== 9864\nIHVudXM= 9865\nIEhvbGx5 9866\nIGd1aWRhbmNl 9867\nIGN1Yg== 9868\nIGludGVsbGVjdA== 9869\nINCx0YvQuw== 9870\nIHJlZ2FyZGxlc3M= 9871\nIFN0YW4= 9872\nIGNvbmNsdXNpb24= 9873\nYWNhxJ8= 9874\nIGxvbA== 9875\nIEJhdA== 9876\nIG1hbmlmZXN0 9877\nIENoaWVm 9878\nIHNoYW1l 9879\nIG91dGNvbWVz 9880\nIG1haWw= 9881\nIGt1cg== 9882\nzrnOug== 9883\nZXR6 9884\nIHByZXBhcmluZw== 9885\nMjc= 9886\nIFF1ZWVu 9887\n4K6z 9888\nIOu5hA== 9889\nIHRpc3M= 9890\nIGNvbnNjaW91c25lc3M= 9891\nIHBhbnRz 9892\nIG1lbHQ= 9893\ndWNodA== 9894\naW5o 9895\n7JuM 9896\nIHZvdHJl 9897\nIG1vZHVsZQ== 9898\nb3d5 9899\nIG1vbnN0ZXI= 9900\nIOuG 9901\nIGVsZWN0cm9uaWM= 9902\nIGNlbnRyZQ== 9903\nIHN0b3Bz 9904\nIHRvdQ== 9905\nIOut 9906\nIGxhbWI= 9907\nIGNvbnNlcXVlbmNlcw== 9908\nIHN0cmF3 9909\nIGltcGVy 9910\nIGV4dGVuZA== 9911\nIGFuc3dlcmVk 9912\nIE1haA== 9913\nIExBVVJB 9914\naWZ0aW5n 9915\ndWF0ZQ== 9916\nIFVTQg== 9917\nIEFuZHJldw== 9918\nIEZyZWQ= 9919\nIERF 9920\nIEdlb3Jn 9921\n57s= 9922\nw6xuaA== 9923\nIGRyYXdu 9924\nIGxpcHM= 9925\nYmly 9926\nIG1heW9y 9927\naW1p 9928\nIGVuY29yZQ== 9929\nZm9ydGFibGU= 9930\ndXJzZGF5 9931\nIEZvcm0= 9932\nIGJsYW1l 9933\nIHNob3dlcg== 9934\nIGNvbnRhaW5lcg== 9935\nc3RlcnM= 9936\ndWRlcw== 9937\nIFRheQ== 9938\n4Lil 9939\nIOyYiA== 9940\nIHZvbQ== 9941\nIGJhc3M= 9942\nIExhYg== 9943\naXNzYQ== 9944\nIGRpbWVuc2lvbg== 9945\nIGV4ZWN1dGl2ZQ== 9946\nIFJvbQ== 9947\n6rKM7JqU 9948\nIERvY3Rvcg== 9949\nIGRlbGl2ZXJlZA== 9950\nIGdhbmc= 9951\nIGNlcg== 9952\nIHBpdA== 9953\nZWxp 9954\nIGV4dHJhb3Jk 9955\namFy 9956\nIGRlcml2 9957\nIGlsbG5lc3M= 9958\nIGd1bnM= 9959\nIDIwMTE= 9960\nIGFpcnBvcnQ= 9961\n0JU= 9962\nIGF0dGl0dWRl 9963\nIGdyYXQ= 9964\nIFdy 9965\nIE5BUlJBVE9S 9966\nIOyalA== 9967\nIHJlbmV3 9968\nIGNvc2E= 9969\nIGNvbnRyb2xsZWQ= 9970\nb21teQ== 9971\nb25kcw== 9972\nIGVzZQ== 9973\nw6RjaA== 9974\nIHZlbmQ= 9975\nZGFt 9976\nIGFyZ3U= 9977\nIGFjY2VsZXI= 9978\nIG5haWw= 9979\naWVuZQ== 9980\n7IOd 9981\nIGVuY29udA== 9982\nZXNlYXJjaA== 9983\n6aE= 9984\nIGdvb2Rz 9985\nIGZpc2hpbmc= 9986\nQVBQTEFVU0U= 9987\nIE5BUw== 9988\nZWN0aW9u 9989\nIHRlbXBsZQ== 9990\nbGljaGU= 9991\nIGtleWJvYXJk 9992\nIGRlc2Rl 9993\nIGVkdWNhdGlvbmFs 9994\nIE5pZ2h0 9995\nMzM= 9996\nIGJyZWF0aGU= 9997\nbGljaGVu 9998\ndGht 9999\nacOocmU= 10000\n4Lia 10001\nbGFyxLE= 10002\nIGFsaQ== 10003\nIGNvbXBvcw== 10004\nIHNlbnNvcg== 10005\nIOu2gOs= 10006\nIG5ld3Nw 10007\nIEJ1bmQ= 10008\nIE1p 10009\nIHBlcmZvcm1pbmc= 10010\nIGRydW0= 10011\nQkU= 10012\nIHBvcms= 10013\nIGNvYWw= 10014\nZW5nZXI= 10015\nIHJhbQ== 10016\nIOuyiA== 10017\n0LjRgNC+0LI= 10018\nIFBvcA== 10019\nIHBob25lcw== 10020\nIGZhY2ls 10021\nIHRyYWNrcw== 10022\nb250ZQ== 10023\nIG9yZ2FuaWM= 10024\nIGRpYWxvZ3Vl 10025\nIEhhdmluZw== 10026\nIFBvc3Q= 10027\nIHBheW1lbnQ= 10028\nIGFycmF5 10029\nIGludGVuZGVk 10030\nw7pz 10031\nIGJhcnM= 10032\nIHJldmlld3M= 10033\nbGFuZHM= 10034\nIGtpbmdkb20= 10035\nIHN0YWdlcw== 10036\nIG1vdW50YWlucw== 10037\nIGR1bg== 10038\nIGRlY2ly 10039\nxI0= 10040\nIGJhbmtz 10041\nIHRocm93aW5n 10042\nIOuquw== 10043\nIGFuZ2Vy 10044\nINGB0LXQudGH0LDRgQ== 10045\nIGRpc3R1cg== 10046\nIGh1bWFuaXR5 10047\nIGVsZXM= 10048\nIHNob3VsZGVycw== 10049\nIFBlcmZlY3Q= 10050\nIGZhbmN5 10051\nIGJyaWxsaWFudA== 10052\nIGluc3BpcmF0aW9u 10053\naG1t 10054\nIGxpZA== 10055\nVUw= 10056\nIG3DpQ== 10057\naW5kaQ== 10058\n6Ig= 10059\nIHNoaWVsZA== 10060\nIOyYpOs= 10061\nQ1Q= 10062\nYWdpbmU= 10063\ndWJlcg== 10064\nIEJS 10065\nIHF1ZXN0bw== 10066\nINC30LDQug== 10067\nIEtub3c= 10068\nIHRhbmc= 10069\n7ZWp64uI64uk 10070\nIGJhcmVseQ== 10071\nIFNF 10072\nIG1hcmdpbg== 10073\ncmVp 10074\n0LDRgtC10LvRjA== 10075\nIGNvbnRy 10076\nIHbDoA== 10077\nIGxlZ2l0 10078\n0Jg= 10079\na2lucw== 10080\n0YDQtdC0 10081\nIEFzaA== 10082\nIGFkdmlz 10083\nIEdyZWVr 10084\n0YPQug== 10085\nIHNoYWtl 10086\naWRhZGVz 10087\n0LDRgdGM 10088\nIGNvbnZlbnRpb24= 10089\nIGNvbnRlc3Q= 10090\nTVM= 10091\nIFllYXI= 10092\nIHJlcHJlc2VudGF0aW9u 10093\naW5kZW4= 10094\nZW5kYXI= 10095\nIHByb3N0 10096\nIEh1bWFu 10097\nIEN5 10098\nYW5nZWQ= 10099\nUEE= 10100\nIGF4aXM= 10101\nIHRoZW9yZQ== 10102\nYXR6 10103\nIO2VmOqzoA== 10104\nIGVscw== 10105\nIFJlc2VhcmNo 10106\nIGJlbmVmaWM= 10107\nIGRlbnNpdHk= 10108\naW5kbw== 10109\n7Jy8 10110\naW1kaQ== 10111\nIHJlc2VhcmNoZXJz 10112\n6rGw65Og 10113\naWdocw== 10114\nZGFu 10115\nIGRpY2U= 10116\nIG1hYXI= 10117\nIHN1Ym1pdA== 10118\nIGR1bWI= 10119\nIGJpag== 10120\nYXdheQ== 10121\nIFBhc3M= 10122\nIGV4dGVuc2lvbg== 10123\nIGNydXNo 10124\nIGNvdmVyaW5n 10125\nZWRp 10126\nYm9ybg== 10127\naW5hdGlvbnM= 10128\nINGB0LTQtdC7 10129\n0LLQtdGA 10130\nIE90aGVyd2lzZQ== 10131\naXN0YW50 10132\n0LDQudGC0LU= 10133\nIHRhbnRv 10134\nIHBlcmZvcm1lZA== 10135\nINC30LDQvw== 10136\nYWxv 10137\nIEZvdW5kYXRpb24= 10138\nIHByb3RvY29s 10139\nIFpv 10140\nbWF5 10141\nIGhhY2s= 10142\nIGJ1ZGR5 10143\nbWFkZQ== 10144\nIGFkcw== 10145\nIGZhc2NpbmF0aW5n 10146\nIGVxdWl2YWxlbnQ= 10147\nZ2Vs 10148\nIGFyYw== 10149\nINGH0LXQu9C+0LI= 10150\nIHByb3Bvc2Vk 10151\nIG5vdHJl 10152\nYW5nZXM= 10153\nIGNvdW5zZWw= 10154\nYWxsYQ== 10155\nIDMx 10156\nd2VldA== 10157\nyJk= 10158\nIGVsZWN0cmljaXR5 10159\nIHRveA== 10160\nxYJhZA== 10161\nIOy0 10162\nIGRpZmZpY3VsdHk= 10163\noNeZ 10164\nbmVzZGF5 10165\n0LjRgdGM 10166\nIGFsbGVn 10167\nIEdP 10168\nIHF1aXQ= 10169\nIEhlcnI= 10170\nIGVzdMOhbg== 10171\nIGdpcmxmcmllbmQ= 10172\nIHRlbmc= 10173\naWZpY2lhbA== 10174\nIEphbQ== 10175\nIGNhbmNlbA== 10176\nIGZyZXF1ZW50bHk= 10177\nSVY= 10178\nIGNsb3Npbmc= 10179\nIGRlY2FkZQ== 10180\nIHJlcHJlc2VudGVk 10181\nIENhbmFk 10182\nINC60L7RgtC+0YDRi9C1 10183\nIGVzdGFtb3M= 10184\nIFRodXJzZGF5 10185\nIEdh 10186\nIExpdmU= 10187\nbGVt 10188\nYmJsZQ== 10189\nU09O 10190\nIDIwMDg= 10191\nIGRpY2g= 10192\nIEF3ZXNvbWU= 10193\nIGNvbmNlcHRz 10194\nUEVBSw== 10195\nIGxpdGVyYXR1cmU= 10196\nIE9seW1w 10197\n0LvQsNC0 10198\nIG5vc3Q= 10199\ndml0 10200\nIEVudGVy 10201\nb3JkZXJz 10202\naWNraW5n 10203\nbmllag== 10204\nIGV1Y2g= 10205\nIFRob3VnaA== 10206\nIGJhZ3M= 10207\nIGxpbWl0cw== 10208\nIHN0YWtl 10209\ng6U= 10210\nIG9j 10211\nIFZpcw== 10212\nIDEyMA== 10213\nIG51ZQ== 10214\nIGNvbmNl 10215\nIGRpc2Fn 10216\n56g= 10217\nIGFudGljaXA= 10218\noIg= 10219\nc2w= 10220\nIHZvdGluZw== 10221\nIGV4cG9zdXJl 10222\nIENvbW11bml0eQ== 10223\nIEp1c3RpY2U= 10224\nb3JuZXk= 10225\nc3p5c3Q= 10226\nIGZyaWVk 10227\n7Iuc6w== 10228\nIFdpbg== 10229\nIEA= 10230\nIEhvcGVmdWxseQ== 10231\nZXN6 10232\nIG1vbmRl 10233\nIGNvbWJpbmU= 10234\nZ21lbnQ= 10235\nIHJlY29tbWVuZGF0aW9ucw== 10236\nIHByZWduYW50 10237\n7Iud 10238\ncmFm 10239\nIGx1 10240\nZG9vcg== 10241\n0LDQt9GL0LI= 10242\ndWVnbw== 10243\nIGltcHJvdmVtZW50 10244\nIHRyaW0= 10245\nIGVpZ2Vu 10246\nIGFwcHJveGltYXRlbHk= 10247\nINCy0LDQvA== 10248\nYXdh 10249\nINGB0L7QsQ== 10250\nIGNvcm9u 10251\nIG9uZ29pbmc= 10252\nIGhlcw== 10253\nIGluanVyeQ== 10254\nIGZyYW5r 10255\nIGthZGFy 10256\ncmVuY3k= 10257\nIENvbG9y 10258\nIEdydQ== 10259\nIGRpcA== 10260\n0YDRiw== 10261\nIHRlYXJz 10262\nZ3Q= 10263\nIFBE 10264\nIHBhdXNl 10265\nb3Nj 10266\nIHVzdGVk 10267\nIFdvbw== 10268\nIHdpxJk= 10269\nIGRlbm4= 10270\nIFBldA== 10271\nIG92ZXJjb21l 10272\nIOuCtOqwgA== 10273\nIE1vdmU= 10274\nIGxpY2Vuc2U= 10275\nIHJlcGVhdGVk 10276\n4K+H 10277\nIGNhdGVnb3JpZXM= 10278\nIG5vb2RsZXM= 10279\nIGZsb29k 10280\nIE1hc3M= 10281\nIG51dHM= 10282\nIEplc3M= 10283\nIElo 10284\nIGNoYW5jZXM= 10285\nkJg= 10286\nIGRvbmRl 10287\nSUc= 10288\nIGFuZGVyZQ== 10289\nIGJvbmVz 10290\n7J6R 10291\nIGVmZmljaWVuY3k= 10292\nIG1vZGVy 10293\ncm9hdA== 10294\nIOydtOqyjA== 10295\naWxsZXI= 10296\nIG9tZWdh 10297\nINC/0L7Qsg== 10298\nIEdyb3Vw 10299\nIHByb2R1Y2luZw== 10300\nYW1v 10301\nIHBhcnRpY2lwYW50cw== 10302\ndXBw 10303\naWZpY2U= 10304\nIGZvcnR1bg== 10305\naWV0bmFt 10306\nYWNhaw== 10307\nIEtv 10308\nbWnFnw== 10309\nIGphaWw= 10310\nIEpvbmVz 10311\nxZtteQ== 10312\nIERldXRz 10313\nIGJyaWVmbHk= 10314\nIFRhbA== 10315\nIFBlcmhhcHM= 10316\nIFJ1Yg== 10317\nIEtu 10318\n64uk64qU 10319\ncsOp 10320\nIHZvY8Oqcw== 10321\nIENoYXJsZXM= 10322\n0LXRgtC1 10323\ncmllcnM= 10324\nIGhlYWw= 10325\nYW50ZWU= 10326\nIGRlbW9jcmFjeQ== 10327\nIGxvYW4= 10328\nIGNoZWY= 10329\n0Y/QvA== 10330\nIHVuY29tZm9ydGFibGU= 10331\nIGV0ZXJu 10332\nYXBwaW5n 10333\nIHJlcGFpcg== 10334\ncm90 10335\nIFRhcg== 10336\nIGNvdmVycw== 10337\nb21pbmc= 10338\nIEV0aA== 10339\nIM6t 10340\n0YfQvdC+ 10341\nIGFmdGVyd2FyZHM= 10342\nINCy0LXRgA== 10343\nIGRhaGE= 10344\nIGtuZWVz 10345\nIG9yZGluYXJ5 10346\nw7xs 10347\nZ2Fz 10348\nIHRpY2tldA== 10349\nIOyggOuKlA== 10350\nIOyeiOyKteuLiOuLpA== 10351\nY2h0ZQ== 10352\nTXI= 10353\nIHNpc3Q= 10354\naHVp 10355\n6re46w== 10356\n7Jes 10357\nIHZhcnk= 10358\nIG1lbW9y 10359\nIGNvbnRyb2xsZXI= 10360\nIGLEmWR6aWU= 10361\nIG1pbmlzdGVy 10362\n15I= 10363\nZmxvdw== 10364\nQUg= 10365\nIHRvd2Vy 10366\n55A= 10367\nIHNjYXI= 10368\nIFBlbg== 10369\nIHBhw61z 10370\n15g= 10371\n7J246w== 10372\nIGVuZXJn 10373\nIHN3b3Jk 10374\nIHBhcGVycw== 10375\n0LjQu9Cw 10376\nIFdlZG5lc2RheQ== 10377\nIEZvcmNl 10378\nIGV4dHJhb3JkaW5hcnk= 10379\nIExha2U= 10380\nIOqwgOs= 10381\nIEJlYXV0 10382\nIHJlYXNvbmFibGU= 10383\nIGNvbnRyaWJ1dGU= 10384\nIHBsZWFzZWQ= 10385\nIHVwZGF0ZWQ= 10386\nIHBpw7k= 10387\nZWxv 10388\nIHNpZ25pZmljYW50bHk= 10389\nIGJvdA== 10390\nIGdlbmVyYXRpb25z 10391\nIHByb3RlY3RlZA== 10392\nIGhpZGluZw== 10393\nIElsbA== 10394\nIG5ldXRyYWw= 10395\nXSw= 10396\nz4TOvw== 10397\nIHRvbmd1ZQ== 10398\nVGhhbms= 10399\nIOqzhA== 10400\nIHBheXM= 10401\nzq/OvQ== 10402\nIGFwcGxl 10403\nMDE= 10404\nZXJr 10405\naWVyYQ== 10406\nIGplZw== 10407\nIFN1YnNjcmliZQ== 10408\nIHRoZWF0ZXI= 10409\nIHN0cm9uZ2x5 10410\nIOyGjA== 10411\nINC/0YDQsNCy 10412\ndWNreQ== 10413\nIEppbg== 10414\na3dhcmQ= 10415\n6rG0 10416\nIG9wcG9uZW50 10417\nIFNP 10418\nIGhvbHk= 10419\nIGZpbGxpbmc= 10420\nOl0= 10421\nIGhpag== 10422\n0Jw= 10423\nIGJpc3M= 10424\nIGJsZW5k 10425\nIGltcGxpYw== 10426\nIOy9 10427\nbGxlaWNodA== 10428\n2YrYqQ== 10429\nYXNhbnQ= 10430\nZXJ0ZQ== 10431\nIFNhbWU= 10432\nIGludGVyaW9y 10433\nU2U= 10434\nIGJlbmNo 10435\nIHBvY28= 10436\nIG1hcmtz 10437\nIHdpbnM= 10438\nIM6z 10439\nIGRpc3RpbmN0 10440\nIEFzaWFu 10441\nIG1vbGVj 10442\nIEphY2tzb24= 10443\nIGVhc3Q= 10444\nIHBoeXNpY3M= 10445\naW1hbA== 10446\nIHBlYWs= 10447\nYXJpYW4= 10448\nZXBz 10449\nIG5lYXQ= 10450\nINCy0LDRgQ== 10451\ndXJuaW5n 10452\nIHN5bnRo 10453\nIHJldmVhbA== 10454\nxbo= 10455\nZ29u 10456\nbmlz 10457\nYXRpdg== 10458\nIExhcw== 10459\nIHB5 10460\nIE1hamVzdHk= 10461\nIFZhbGxleQ== 10462\nIGVuZg== 10463\nIGdlbnM= 10464\nIHJvb3Rz 10465\nZXpl 10466\nYmV0 10467\nIGFjdHM= 10468\n6Zo= 10469\n6JA= 10470\nIHBoaWxvc29waHk= 10471\nIG1hdGNoZXM= 10472\nnWk= 10473\nIGp1xbw= 10474\nIGRlc3Blcg== 10475\nIEVkdWNhdGlvbg== 10476\nIHNwb3Rz 10477\nIHJlZ2lvbnM= 10478\nQXI= 10479\nIE5hbQ== 10480\nZWVu 10481\nIGRpYWdyYW0= 10482\nIHJlbHk= 10483\nIHRlbnM= 10484\nIGRhdGluZw== 10485\nIGNvYXQ= 10486\nIEhvcg== 10487\nIGFja25vd2xlZGdl 10488\nIFByZXR0eQ== 10489\nINC/0L7Qvw== 10490\nIHZvaXI= 10491\nIGZhdm91cml0ZQ== 10492\nIG1vxbw= 10493\nIGtt 10494\nIERP 10495\nIGZlcnQ= 10496\nIOuPhA== 10497\nIFBhYw== 10498\nIGZvbnQ= 10499\nIGZpbmRz 10500\nIEl0YWx5 10501\nINC60L7Quw== 10502\nIGNvbXBhc3M= 10503\n67M= 10504\nbGlhbWVudA== 10505\nIG5vdGlvbg== 10506\nIGluamVjdA== 10507\nIHdpc2RvbQ== 10508\nIMOc 10509\nIE1vb24= 10510\nIEJ1c2luZXNz 10511\ncmljcw== 10512\nIFlvdXQ= 10513\nIGZvcmdpdmU= 10514\nIGZpbmFuY2U= 10515\naWxv 10516\n2KM= 10517\nYWhs 10518\nIGRlbW8= 10519\nIGNsaW1i 10520\nIGV4cG9ydA== 10521\n5aA= 10522\nIHN1Y2Nlc3NmdWxseQ== 10523\nIEZlcg== 10524\ncGVjdGVk 10525\nZGVt 10526\nIHJldGlyZQ== 10527\nIGxhcHRvcA== 10528\nIHNwaXI= 10529\nIEFzc29jaWF0aW9u 10530\nINCz0Ls= 10531\nIFNlbA== 10532\nIO2VnOs= 10533\nIGVtcGxveWVl 10534\nIG1vbHQ= 10535\nUkw= 10536\n0K8= 10537\nIGNvbnRyYQ== 10538\nIHVn 10539\nIEJhbGw= 10540\nIEphdmE= 10541\nw6lyaWU= 10542\nIHByb2NlZHVyZQ== 10543\nIGdyaWQ= 10544\nIOuKkOs= 10545\nIGJlbHQ= 10546\nINGN0YLQvtCz0L4= 10547\ndXJk 10548\nIGNvbXByZWg= 10549\nIGRldmVsb3Blcg== 10550\nINGN0YLQvtC8 10551\n5Zg= 10552\nY3I= 10553\nIOuT 10554\nIHNwb2tlbg== 10555\ncmVuY2U= 10556\nIHRlcm1pbg== 10557\nIGFnZ3Jlc3NpdmU= 10558\nIGJpc3NjaGVu 10559\nIGhhc3Rh 10560\nIEJyaWFu 10561\nIENvbW1pc3Npb24= 10562\nIFl1 10563\nIHByb21pc2Vk 10564\nIGVxdWl0eQ== 10565\naWtv 10566\ndmVydHk= 10567\nIHJlcGxhY2Vk 10568\nIEhlbHA= 10569\nIHBvc2U= 10570\nIE1pZGRsZQ== 10571\nIGtpbQ== 10572\nIG1laW4= 10573\nIENvdW5jaWxs 10574\nINCS0YE= 10575\nb3Jv 10576\nIEJlcm4= 10577\nIGJleg== 10578\nIGFuYWx5dA== 10579\nYW5nZW4= 10580\nIOyLtg== 10581\nIEdsbw== 10582\nIHF1YWQ= 10583\n0YLQsA== 10584\nIHNwZWFrcw== 10585\n7JiI7JqU 10586\nIOyXrOufrOs= 10587\nZnJlZQ== 10588\n0L3Rlg== 10589\ncmljaA== 10590\nIOuvuA== 10591\nIERpZXM= 10592\nYWJi 10593\npbg= 10594\nIGRlcHJlc3Npb24= 10595\nIHJldGFpbA== 10596\nhOuTpA== 10597\nIFZvdXM= 10598\nIExhdGlu 10599\n4bk= 10600\nIOyii+yVhA== 10601\nIHRvcnQ= 10602\nIGNvbXB1dGVycw== 10603\nIHNlYXJjaGluZw== 10604\nIHR1Yg== 10605\nYXRlbGw= 10606\nIG1lcmM= 10607\nIGdsYXNzZXM= 10608\ncGVyc29u 10609\nIGRpc2hlcw== 10610\nIGd1YXJhbnRlZQ== 10611\nIG1lZw== 10612\nc20= 10613\nIFdhbGs= 10614\n7Jy866m0 10615\nIGZvbGRlcg== 10616\nIE1pdA== 10617\nIHRpbWluZw== 10618\nIGFic3Q= 10619\nIExvZw== 10620\nIGFwcHJvdmVk 10621\nIFVTQQ== 10622\n0LLQtdGC 10623\nIHdpc2U= 10624\nZXNzZWQ= 10625\nIGRvdWI= 10626\nIHJlc2lkZW50 10627\nIGdlbmVyYXRlZA== 10628\nIHN0YXlz 10629\nIGV4cGxhbmF0aW9u 10630\nIHBvaXNvbg== 10631\nYXRyZQ== 10632\nIGluc2FuZQ== 10633\nIHJlZmVycmVk 10634\nYWlyZXM= 10635\nIFRSQQ== 10636\nIHNlaQ== 10637\nIGlubm9j 10638\nQWg= 10639\nIG1hbnQ= 10640\naHVz 10641\nIG91dGVy 10642\nZ2Vi 10643\nb2ljZQ== 10644\nIGRpc2N1c3Npbmc= 10645\nIGNvbnZlbmllbnQ= 10646\nX18= 10647\nIGF2b2ly 10648\nIHNoYXBlcw== 10649\nIGdyYXk= 10650\nIGRlbnRybw== 10651\nIG1hY2h0 10652\nIDE5NQ== 10653\n2Y8= 10654\nIGFkZHM= 10655\ndXRpbmc= 10656\nIGNhcGFiaWxpdGllcw== 10657\nIHNlY3Rpb25z 10658\nIHR1bmU= 10659\nIENhdXNl 10660\nYXJkZQ== 10661\nINGB0LrQsNC3 10662\nYXZpcnVz 10663\nIFJF 10664\nIHR1bmVk 10665\nIGxlYWY= 10666\ndGVyaW9y 10667\nIENhcHRhaW4= 10668\nINis 10669\nIGNob29zaW5n 10670\naGlu 10671\nZ2dpbmc= 10672\ndmlldA== 10673\nIHJlZ3JldA== 10674\nMjY= 10675\nb25kZXJu 10676\nIGJvbnVz 10677\nIFJheQ== 10678\nQXM= 10679\nIHRvcm4= 10680\nIEhpZXI= 10681\nIEVV 10682\nIHJpc2tz 10683\nIGFtYQ== 10684\nIFlldA== 10685\nIGNoYXJhY3RlcmlzdGljcw== 10686\nIOqwkA== 10687\nIFNlbmF0b3I= 10688\nIFZhbW9z 10689\nIHJvc2U= 10690\nIGNvcnBvcmF0ZQ== 10691\nZ2hhbg== 10692\nIGNlbnRlcnM= 10693\nc3RhaXJz 10694\nIG5pdA== 10695\nIHVudXN1YWw= 10696\nIFRvbnk= 10697\nIEdS 10698\nIFdpbGQ= 10699\nIFNpbWlsYXI= 10700\nIHRvZGFz 10701\nIGhvcml6b250 10702\nbWVs 10703\nIHN0cmljdA== 10704\nIGN1YWw= 10705\nIHdyaXQ= 10706\nIGV4dGVuZGVk 10707\nIO2VmOuKlA== 10708\nIHJlbGllZg== 10709\nIG9uaW9u 10710\nIGJhYmllcw== 10711\nIGRpZmVy 10712\nIGludGVncmF0ZWQ= 10713\nw7x6aWs= 10714\nZXBpbmc= 10715\nLS0tLQ== 10716\nIG1lbnM= 10717\nIHN0cmF0ZWdpYw== 10718\nZmluaXRlbHk= 10719\nIGVpZ2VudGxpY2g= 10720\nV2hv 10721\nIHs= 10722\nIFRyaQ== 10723\nIHBvaW50ZWQ= 10724\n8J0= 10725\nbmFtZW50 10726\n0LXRhg== 10727\nIHByaWRl 10728\nIFJlcHVibGljYW4= 10729\nIHNhbXBsZXM= 10730\nIGRvbWVzdGlj 10731\nTFk= 10732\ndmV6 10733\nIHdlYmluYXI= 10734\n2KfZhQ== 10735\nIGVuaA== 10736\nIHN1Z2dlc3RlZA== 10737\nIG1laW5l 10738\nIHB1ZWQ= 10739\nb3Jlbg== 10740\ncmly 10741\nIGhlYXZpbHk= 10742\nIGluc3RydWN0aW9u 10743\nIG1pY3JvcGhvbmU= 10744\nIGlndWFs 10745\nIElyYQ== 10746\nIHZ1bG5lcmFibGU= 10747\nIFZpcmdpbmlh 10748\nIGNvbnRpbnVvdXM= 10749\nIHBvdmVydHk= 10750\nIGJsYWRl 10751\nIHJlbGF0ZQ== 10752\nIGNhcmE= 10753\nIEdvaW5n 10754\nIHJlZ2lvbmFs 10755\nIEZ1Y2s= 10756\nIHRvdw== 10757\nIE11c2V1bQ== 10758\ncmFudHM= 10759\nINCx0LXQtw== 10760\nbGFpbQ== 10761\nIGNoYW1waW9u 10762\ndGxl 10763\nw61u 10764\nZW5jaWE= 10765\nIGRpZXNlbQ== 10766\nIERpZw== 10767\nbWF0ZXM= 10768\nIGludmVzdGluZw== 10769\nIEpvcmRhbg== 10770\nIGludGVncmF0aW9u 10771\nIO2O 10772\n4Lir 10773\nZW5zdXM= 10774\nIEFyY2g= 10775\nIHBlbmNpbA== 10776\n0LDQu9GM0L3Qvg== 10777\naXNzZW4= 10778\nIEth 10779\nIHJvY2tz 10780\nIHJhdGluZw== 10781\nIHJlZnVnZQ== 10782\nIGFwcg== 10783\nZXRlZA== 10784\nIGFzc2lzdGFudA== 10785\nIG1lYW5pbmdmdWw= 10786\nIHBlcm1hbmVudA== 10787\nIGhpbGw= 10788\nIHdzenlzdA== 10789\nIHdvdW5k 10790\nIEF0bA== 10791\nIGxha2U= 10792\nIEZvcnQ= 10793\nIHJlZHVjdGlvbg== 10794\nIHZpdg== 10795\nIHNvdXI= 10796\nIGVjb3M= 10797\nIGhheg== 10798\nIHN0ZWFs 10799\nIG15c3Rlcg== 10800\nINCa0LDQug== 10801\nINGN0YLQuA== 10802\nIFZpZXRuYW0= 10803\nIGFudGVz 10804\nIGNvbm5lY3Rpbmc= 10805\nIERhdmU= 10806\nIGLDtnlsZQ== 10807\nIENhc3Q= 10808\nTGU= 10809\nIGN1bA== 10810\nIGdlbnJl 10811\n66eQ 10812\nIGNvbXBsYWlu 10813\nIGh1cnJ5 10814\nYXJ0ZQ== 10815\nZ3JlZw== 10816\nIG1vbml0b3Jpbmc= 10817\nIGRlc2VydA== 10818\nINGB0L7Qsg== 10819\nZWxpbmc= 10820\nIFN1cHJlbWU= 10821\nIGdpYmk= 10822\nIGxhcmc= 10823\nIG5hdGlvbnM= 10824\nIFRvaw== 10825\nIG5lZWRsZQ== 10826\n5rU= 10827\nIGFzbGVlcA== 10828\nIGNvbXVu 10829\nIEpld3M= 10830\nIGFjaGlldmVk 10831\nIGV4aXQ= 10832\nIGRpc2Vhc2Vz 10833\nbGluZXM= 10834\ncmllbmRz 10835\nIHJlY3Q= 10836\nIHNjYW4= 10837\nIGh1cnRz 10838\nesSZ 10839\nIExvb2tpbmc= 10840\n7ZI= 10841\ndWx0dXJhbA== 10842\n4buT 10843\naW5lbnQ= 10844\nIHB1ZXM= 10845\nIGNoZWVyaW5n 10846\np4A= 10847\nYWdnZXI= 10848\nIGFkYQ== 10849\nTGF1Z2h0ZXI= 10850\nIFdvbWVu 10851\n6Ks= 10852\nIG9jY3VycmVk 10853\nIHNlYXRz 10854\nIGVtcG93ZXI= 10855\ndW51 10856\nZWxsaW5n 10857\nQkVS 10858\nZW5zaW9uYWw= 10859\nIGNvbnNvbGU= 10860\nYXNoaW5n 10861\nIGVpbm1hbA== 10862\nZmFyZQ== 10863\nIOuPvA== 10864\nIHNlc3Npb25z 10865\n2ZA= 10866\nIHJpZGljdWxvdXM= 10867\nw61hbg== 10868\nIEhlbnJ5 10869\nIEhvbA== 10870\nIGNvbGxlY3RlZA== 10871\nIGRpc2N1c3Npb25z 10872\nRGU= 10873\nIGRpc2FiaWxpdHk= 10874\nIO2b 10875\nIHN1YnNjcmliZXJz 10876\nIGlyZ2VuZA== 10877\nIGZlbA== 10878\nIGRpcmVjdGlvbnM= 10879\nIG1hbnVmYWN0dXJpbmc= 10880\nIFJvZA== 10881\nIOyWmA== 10882\n4LiX 10883\nIGNyaXRlcmlh 10884\nIG1vbGQ= 10885\nIGVudGVyaW5n 10886\ncmlq 10887\naXNlbg== 10888\nIFBhcmE= 10889\naWV2ZQ== 10890\nIGNoYXJnZWQ= 10891\nIGpvdQ== 10892\nIGNhdHM= 10893\n0LvQtdC0 10894\nYWRheXM= 10895\n0LDQvdC+0LI= 10896\nasSZ 10897\ndmF0aW9u 10898\nIGFzdHJvbg== 10899\naXRhbHM= 10900\nIEJyYW5k 10901\nIEthbg== 10902\nIHBsYWlu 10903\nIGFuZGVyZW4= 10904\nYW5kZQ== 10905\n0Y/Qtw== 10906\nIHRvbGVy 10907\nxYJlbQ== 10908\nIHByw6k= 10909\n0LzQvtGC0YA= 10910\nYWdlbWVudA== 10911\ndWN0 10912\nY2jDqQ== 10913\nIEVuZXI= 10914\nYWrEhQ== 10915\nIO2VtOs= 10916\nIHN0YQ== 10917\nIHJpbmdz 10918\nIHRvaWxldA== 10919\nIENyYQ== 10920\nIGV4cGVyaWVuY2luZw== 10921\nIHNsaXA= 10922\nIHNhbmR3aWNo 10923\nIFVzaW5n 10924\nIHNwZWN0cnVt 10925\nIFJvcw== 10926\nYXBzZQ== 10927\nIEpheQ== 10928\n0LzRgw== 10929\nRXg= 10930\nIHJlY29nbml0aW9u 10931\nIERpZG4= 10932\ndWRh 10933\nYWpl 10934\nZXN0bHk= 10935\nIGZlbWlu 10936\naXR1cmU= 10937\n0YDQsNGC 10938\nIGhpcmU= 10939\nIG5vd2hlcmU= 10940\n4bqn 10941\nIHdpbmc= 10942\nIHNhdg== 10943\nIFNlY3VyaXR5 10944\nIHJ1cmFs 10945\nIEZ1bg== 10946\nYXllcg== 10947\nIGFjY3Vz 10948\nIG1t 10949\nIEpvc2VwaA== 10950\nIHNjcmVlbnM= 10951\nIGJvcnJvdw== 10952\nIHN3aW5n 10953\nIDQ4 10954\nIHRvdWNoaW5n 10955\ndGhpcw== 10956\naW50ZW5kbw== 10957\n6YM= 10958\n0KA= 10959\nIFNjb3RsYW5k 10960\nIEphc29u 10961\nIFZlbg== 10962\nIGV4Y2VwdGlvbg== 10963\nIG5lYXJieQ== 10964\nIGJyb3dzZXI= 10965\nYW5nZXJz 10966\nIFNpbg== 10967\nz4DOvw== 10968\nb3NwZWw= 10969\nIHd1cmRl 10970\nIGRydW5r 10971\n7Zo= 10972\n7IaN 10973\nIOyKpO0= 10974\nIExpZQ== 10975\nb2Nv 10976\nIExlYWd1ZQ== 10977\nIGlnbm9yZQ== 10978\nIDop 10979\nIGxhbmRpbmc= 10980\nINi52YQ= 10981\nIFRhZw== 10982\nMjg= 10983\nIGRyYWZ0 10984\nIGFlcg== 10985\nIOq3uOuDpQ== 10986\nIHBlbnNl 10987\nINC00LDQttC1 10988\nIGJlZHJvb20= 10989\nIG5hag== 10990\n7KeA6rOg 10991\naWdlbm91cw== 10992\nIGRlYWxz 10993\nZWxsbw== 10994\nIHBvc2l0 10995\n6rs= 10996\nIHZpc2l0ZWQ= 10997\naWZpZXM= 10998\nIHByZW1p 10999\nIGNhbnQ= 11000\nIFJpY2s= 11001\nIHJhaXNpbmc= 11002\nIHBlcm1pc3Npb24= 11003\nIHB1Ymw= 11004\ndW5jaQ== 11005\nIGJlbmQ= 11006\nIGNoYW1waW9ucw== 11007\nZGll 11008\nIGF3ZnVs 11009\nIGp1bXBpbmc= 11010\nIGxsZWc= 11011\nIHN1c3RhaW5hYmxl 11012\nIFRvdA== 11013\nIGNhbmR5 11014\nIHNhdGlzZmllZA== 11015\nIHBpcGU= 11016\nIGNvY2s= 11017\n2LY= 11018\nc3RvbmU= 11019\nIG1vbWVudHVt 11020\nINCd0LA= 11021\nIGFsb3Jz 11022\nIHJldHVybnM= 11023\nYW1tZW4= 11024\n564= 11025\n0YvQvA== 11026\nYXdu 11027\nb3R0ZWQ= 11028\nIHdvbGxlbg== 11029\naWN0ZWQ= 11030\nIGNhbmRpZGF0ZXM= 11031\nIExhZHk= 11032\nIHlpZWxk 11033\nIG1haW50ZW5hbmNl 11034\nZmZlY3Q= 11035\nIGV4cGFuc2lvbg== 11036\nIExFRA== 11037\nIGRhcmtuZXNz 11038\nIG91dGZpdA== 11039\n7JWI 11040\nINC40YHQvw== 11041\ncnVwdGlvbg== 11042\nIGVuZ2FnaW5n 11043\nIGluc2lnaHQ= 11044\nIEFsd2F5cw== 11045\nIGdlZg== 11046\ncmFr 11047\nIHBpeA== 11048\nIHF1YW50aXR5 11049\nIGluaw== 11050\nIEtpbmdkb20= 11051\nIGNvcnQ= 11052\nIGdvdmVybm1lbnRz 11053\nIHByb3Rlc3Q= 11054\ncG9vbg== 11055\nINGC0L7Qs9C+ 11056\ndWNoZW4= 11057\ncXVhbGl0eQ== 11058\nIFBvcnF1ZQ== 11059\nIENsdWI= 11060\nIHJpdA== 11061\nIGFydGljbGVz 11062\nQkk= 11063\naWdpYmxl 11064\nIGRpc2FzdGVy 11065\n0LjQsw== 11066\nINC90LjQug== 11067\n2YfYpw== 11068\n66W8 11069\nYXJldA== 11070\nIHVuYWJsZQ== 11071\nIMOu 11072\nIGVyc3Q= 11073\nINeg 11074\ndmFyZA== 11075\nIGFubm95aW5n 11076\nIEtpcg== 11077\n0LXRgNC2 11078\nZW5uaXM= 11079\nIHVuY2VydGFpbg== 11080\nMzY= 11081\nw7Zz 11082\nIGVjb3N5c3RlbQ== 11083\nemVk 11084\nasOg 11085\nc3Vu 11086\n7Ja07ISc 11087\nIMW8ZWJ5 11088\nIG1hcHM= 11089\n64KY 11090\nIEp1c3Rpbg== 11091\nIHRyYXNo 11092\nIGVub3Jtb3Vz 11093\nIHN0YXRlZA== 11094\nIGJyYW5kcw== 11095\nIHlvdXQ= 11096\nINGH0LXQu9C+0LLQtdC6 11097\nIE1hdHRo 11098\nIHRyYW5zcG9ydGF0aW9u 11099\nIGxlZ2lzbGF0aW9u 11100\nIHByb3ZpZGVycw== 11101\nINit 11102\nIG1hZ2F6aW5l 11103\nIHNlaGVu 11104\nIERlc3BpdGU= 11105\nIHBhc3Nlcw== 11106\nIGFsdGVy 11107\nYWRhbg== 11108\nIGZhcm1lcnM= 11109\nIGNvbmZpcm1lZA== 11110\nIGVzYQ== 11111\naXRvcw== 11112\nIHJvYWRz 11113\nVklT 11114\nIHdvcmtlcg== 11115\nIGRlc2lnbnM= 11116\nIFNvdmlldA== 11117\nYnJpZA== 11118\nIHByYWN0aWNpbmc= 11119\nIOu2gA== 11120\nIFNlYQ== 11121\nINC/0YDQvtC0 11122\nIGNoaWxs 11123\nIGxlbW9u 11124\n7JeQ64qU 11125\nIGZsZXhpYmxl 11126\nIEV4Y3VzZQ== 11127\nIHRlcnJpdG9yeQ== 11128\nIGx1eA== 11129\nIGxpZmV0aW1l 11130\nIGRpc3Rpbmd1 11131\nIFRpbWVz 11132\nIGdyb3Nz 11133\nZW56 11134\nIHNjcm9sbA== 11135\nbcSxxZ8= 11136\nY2lw 11137\no7w= 11138\nRFA= 11139\nIHB1Ymxpc2g= 11140\nIGViZW4= 11141\nIHJlZ2lzdA== 11142\nIGVkaXRpb24= 11143\nIExF 11144\nIGNoYXJnaW5n 11145\ndXRhdGlvbg== 11146\neXJpY3M= 11147\naWRhcw== 11148\nIM6/ 11149\nINC60L7RgA== 11150\nIFRvbg== 11151\nIHdob2V2ZXI= 11152\nIEZveA== 11153\n6rGw65Og7JqU 11154\nIGZvdWdodA== 11155\nIGRyaWxs 11156\nIEFmZ2hhbg== 11157\nfiE= 11158\nIFRvbw== 11159\nIHNlY29uZGFyeQ== 11160\ncsOk 11161\nIEhlYWQ= 11162\naW5uZW4= 11163\nIHlhcm4= 11164\nINC90LDQvA== 11165\nIHdpZHRo 11166\nIGVuZ2luZWVy 11167\nacSF 11168\nIHdpbmdz 11169\nIOuVjOusuA== 11170\nIHRyYXVtYQ== 11171\nIHJlcHJvZHU= 11172\nIGNoaXA= 11173\nIHBhc3Npb25hdGU= 11174\nIGF3a3dhcmQ= 11175\nIO2K 11176\n0LDQttC0 11177\nIEJpdGNvaW4= 11178\nIGtow7RuZw== 11179\nIHLDsw== 11180\ncmVjdGlvbg== 11181\nINCz0LTQtQ== 11182\nIFVzdWFsbHk= 11183\nIGltcGxlbWVudGF0aW9u 11184\nIGdhbWVwbGF5 11185\nIG15c3Rlcnk= 11186\nINC+0Lo= 11187\nIGHDsW9z 11188\nYW5keQ== 11189\n0LjQvNC4 11190\nIHByaXZhY3k= 11191\nYWNv 11192\nIGR1bXA= 11193\nIFBheQ== 11194\nIGRpcGw= 11195\nIGZ1cm4= 11196\nIHNoaXBz 11197\nTEE= 11198\nINGF0L7RgNC+0Yg= 11199\nIGVj 11200\nIGRyb3Bz 11201\nY2hs 11202\nMzI= 11203\nIG9ic2VydmU= 11204\nIERldmVsb3A= 11205\nTcO8emlr 11206\nYW5uZWw= 11207\nb3dhxIc= 11208\nIGZhY2Vk 11209\nw6Fs 11210\nIHZpY3RpbXM= 11211\nIGdpZnRz 11212\nIGJvb3Q= 11213\nw59l 11214\ncm9k 11215\nIDIwMDk= 11216\nw7ZydA== 11217\nIHVuaXZlcnNhbA== 11218\nIG5vdXZl 11219\nIGJveWZyaWVuZA== 11220\nIGNldGVyYQ== 11221\n0YHRgtCw 11222\nJ1M= 11223\nIG5pdmU= 11224\nIGNydWNpYWw= 11225\nIHN1cnZl 11226\nIGNvaW4= 11227\nIHNvbmRlcm4= 11228\nIHNoYWRl 11229\nIGx1Z2Fy 11230\nIHN1cmVseQ== 11231\nIG1heA== 11232\nIGltcHJvdmluZw== 11233\nIHdlbg== 11234\nINeR 11235\nIOyWtOw= 11236\nIGVuZm9yY2VtZW50 11237\naWJs 11238\nIGxpdg== 11239\nbGVyaQ== 11240\nIG1lam9y 11241\nIENhcm9saW5h 11242\nIHZhcw== 11243\nIGNvbXByb20= 11244\nIGRpcnQ= 11245\nIHVwZ3JhZGU= 11246\nIEJlbGw= 11247\nIHJlc3RhdXJhbnRz 11248\nIHRyYXA= 11249\nIHRlYXM= 11250\nYmxpYw== 11251\nIEdyZWc= 11252\nc2Fu 11253\nIG93 11254\ndWVzdA== 11255\nIHByb3Bvc2Fs 11256\nIFJldA== 11257\nZnJvbnQ= 11258\nIHBhc3NhZ2U= 11259\nIHN1cnJvdW5kaW5n 11260\nIMO6bHQ= 11261\nIHVwY29taW5n 11262\nIGhvcnJvcg== 11263\nIGNsb3RoaW5n 11264\nIOyVvQ== 11265\nIGRpbA== 11266\ncm9tZQ== 11267\nIElk 11268\nIFJvYWQ= 11269\nINGN0YLQvtGC 11270\nY2hhaW4= 11271\nINCx0YvRgtGM 11272\nIE9mZmlj 11273\nINCd0LU= 11274\nIGluc2Fu 11275\nIGRlY3JlYXNl 11276\nINGF0L7Rgg== 11277\nYnVpbGQ= 11278\nIERyYWdvbg== 11279\n5YI= 11280\nIGludmVzdG9ycw== 11281\nYW50aQ== 11282\nIHNhY3JpZmljZQ== 11283\nIHRyb29wcw== 11284\nIEJhZA== 11285\nIHBhc3N3b3Jk 11286\nIGNvbnN0cmE= 11287\n4LiV 11288\nIMOHYQ== 11289\nYWRvdw== 11290\ndGhyb3VnaA== 11291\n0YbQsA== 11292\nQ2Fu 11293\nIGNhbmRpZGF0ZQ== 11294\nIGFudGli 11295\n7JeF 11296\nIHRhc3R5 11297\n2YjZhg== 11298\nIEluZg== 11299\nIEJhbmc= 11300\nacOfdA== 11301\naW5pdHk= 11302\nZmF0aGVy 11303\nIGNvbnRyb3ZlcnM= 11304\nIFBhaw== 11305\naWx0eQ== 11306\n6rWs6w== 11307\nIGxpZ2h0ZXI= 11308\nIGZhbGxlbg== 11309\nIHp1cw== 11310\nIEd1YXJk 11311\nIGNvdHQ= 11312\nIEZyZWU= 11313\nIGluaXRpYXRpdmU= 11314\nYWxvdXM= 11315\nIG5vdGlmaWNhdGlvbg== 11316\nIE1lZGlj 11317\nIENvbW1pdHRlZQ== 11318\n7Jew 11319\nIFdvb2Q= 11320\nIG11c2g= 11321\ndWx1bQ== 11322\n6LI= 11323\nYWhhaA== 11324\nIHN1ZmZpY2llbnQ= 11325\nIHNpbmdlcg== 11326\n0LrQvtC5 11327\nQUxJ 11328\nw6R0dA== 11329\nIFBS 11330\nIExhcg== 11331\nY3VsZXM= 11332\naWVtcG8= 11333\nIHVuZXg= 11334\nIGludGVncmFs 11335\nIHRyYW5zbWlzc2lvbg== 11336\nIGljaQ== 11337\n0YPRhQ== 11338\nZ2lj 11339\nIE5pbnRlbmRv 11340\nIENvcA== 11341\nIFRydXN0 11342\nZW5hcw== 11343\nIGFiaWxpdGllcw== 11344\nIGNoaXBz 11345\ncGF0 11346\nIGFuY2hl 11347\n0LvQtdC9 11348\nIGFwcHJvYWNoZXM= 11349\nIHRob3I= 11350\nIHNpc3RlcnM= 11351\nIGRyaXZlcnM= 11352\nIGFsbGE= 11353\nMDM= 11354\nIHJ1YmJlcg== 11355\nIG7DpQ== 11356\nQUNL 11357\nIGRpc2FwcGVhcg== 11358\n6rCc 11359\nIGNvbXBlbnM= 11360\nIHZpYnI= 11361\nR08= 11362\nIHNpemVz 11363\nIHRyYWNraW5n 11364\n7ZmU 11365\nIOyEuA== 11366\nIGltcGFjdHM= 11367\naWJpbA== 11368\nZmlzaA== 11369\nQlI= 11370\nIGFycm93 11371\nIGxhcmdlbHk= 11372\nYW5ueQ== 11373\nIGxhd3llcg== 11374\nam91cnM= 11375\n2ro= 11376\ndmlh 11377\nIGRlbGxh 11378\nIG1hdGhlbWF0 11379\nIE1pbmU= 11380\nIEtvbGw= 11381\n2LI= 11382\nIENyb3Nz 11383\nIDY1 11384\nIGdyYWM= 11385\nIGludm9sdmVz 11386\nIGRlbGlnaHQ= 11387\nIEhvbGx5d29vZA== 11388\nIGltbWVkaWF0ZQ== 11389\nb25pYw== 11390\nIGxhZG8= 11391\nIGJ1bGxldA== 11392\nIE5vdGU= 11393\nIHVubG9jaw== 11394\nIGRpc2NvdW50 11395\nIHJpc2luZw== 11396\ncHJlc3M= 11397\nIHBhY2U= 11398\nIHNob3J0ZXI= 11399\nIHRlbmVy 11400\nZ2Vvbg== 11401\nIG1hbmFnaW5n 11402\nIGNlcmU= 11403\nQ2hy 11404\nV2hlbg== 11405\nYWNoZW4= 11406\nIOyT 11407\nIEh1bg== 11408\nIG9mdA== 11409\nIDI1MA== 11410\naWVydW5n 11411\nIHN0YWJpbA== 11412\nIENvbm5lY3Q= 11413\nIHlhbmk= 11414\nIGRvd250 11415\nzrzOsQ== 11416\nIHZvY2Fs 11417\nzr3OsQ== 11418\nIGxlYW4= 11419\nIHZpZMOpbw== 11420\nIEZhbWlseQ== 11421\ncmVzZW50 11422\nIGFtb3VudHM= 11423\n7KeB 11424\nY2xhc3M= 11425\nIHZpYg== 11426\nIEF2 11427\nYXJzZQ== 11428\nIGdlbnRsZW1lbg== 11429\nIHNlZWtpbmc= 11430\nIHVuaW9u 11431\nIHJlZ3VsYXJseQ== 11432\n5o8= 11433\nIEphaHI= 11434\nIEZvb2Q= 11435\nIFByb2JsZW0= 11436\nIGFydGlmaWNpYWw= 11437\nIFNpeA== 11438\nIGltcHJlc3NlZA== 11439\nIHRvb3Ro 11440\nIEto 11441\nIHlhcmQ= 11442\nIO2VtA== 11443\nIG93bmVk 11444\nIOuPmQ== 11445\n7LKt 11446\nIHRvZGE= 11447\nIHBvcnRmb2w= 11448\nIOuCqA== 11449\nb3JnZW91cw== 11450\nIGRhdGVz 11451\n0L7Qu9GM0Lc= 11452\n0LXRh9C90L4= 11453\nIGNvbmZpZ3VyYXRpb24= 11454\nIHJlcXVpcmVtZW50 11455\nIGJlbGx5 11456\nIHBhaW5mdWw= 11457\nIGRlbW9uc3RyYXRl 11458\nIGdsZWljaA== 11459\nIHZpc2l0aW5n 11460\nIENvbmY= 11461\nIGRhbA== 11462\n2ZE= 11463\nIGFtZW5k 11464\nIEZ1cg== 11465\nIHZpdGFs 11466\n4buL 11467\nIG1hdGU= 11468\nIE91 11469\nIGxlZ2FjeQ== 11470\ndXN0aW5n 11471\nIGFjY29tbW9k 11472\nIHF1b2k= 11473\nYXVlbg== 11474\nIGxpZmVzdHlsZQ== 11475\nQ0M= 11476\nw6TDpG4= 11477\nYXJ0ZW4= 11478\nIG1pbmhh 11479\ncsOz 11480\nIOuqqA== 11481\nIGZvcm1hdGlvbg== 11482\nIHRyYWlsZXI= 11483\ncGVyb3I= 11484\nINCz0YA= 11485\nIHVk 11486\nenU= 11487\nIGtvbW1lbg== 11488\nIGNhdmU= 11489\nIENvdW5jaWxsb3I= 11490\nIHRocm93bg== 11491\nIHRyaWNrcw== 11492\nTEFVR0hURVI= 11493\nIEFjYWRlbXk= 11494\ncm93ZA== 11495\noZ0= 11496\n7KCA 11497\nIEltYWdpbmU= 11498\nIGluZm9ybWVk 11499\ncm9waA== 11500\nIGxpZw== 11501\nIHNrdWxs 11502\nYWJldGg= 11503\nIGZ1bmN0aW9uYWw= 11504\nZXJlaw== 11505\nT24= 11506\n6aY= 11507\nIGFuY2VzdA== 11508\nIHNhZmVseQ== 11509\nIEhU 11510\n64u5 11511\nIGRhdg== 11512\nIGRyaXZlcw== 11513\nQW1lcmlj 11514\nIHRpcmU= 11515\nIHNhaXM= 11516\nw6FyaQ== 11517\nYXZvcnM= 11518\nIGNvcnJlc3BvbmRpbmc= 11519\nIHByw6lz 11520\nY2hlc3Q= 11521\nIGJhY3Rlcmlh 11522\nIGluZmVjdGlvbg== 11523\ndXNhbA== 11524\nIGF2ZXo= 11525\nIGJhc2tldGJhbGw= 11526\nIHN1cHBsaWVz 11527\nIGV4cGVydGlzZQ== 11528\noKU= 11529\nZmE= 11530\nIHRpZW1wbw== 11531\nIFdhbnQ= 11532\nIHNpbGx5 11533\nIHVwcA== 11534\nIGVsZWN0ZWQ= 11535\nIGZpcmVk 11536\nINiv 11537\nIHVuaXZlcnNpdGllcw== 11538\nYWxsZQ== 11539\nIGphY2tldA== 11540\nwrA= 11541\nIHRyYXY= 11542\nbHM= 11543\nIGRlZmVhdA== 11544\nIGNvZ24= 11545\nIGVxdWF0aW9ucw== 11546\ndWtp 11547\nIFNoZXI= 11548\nIHRoaXJ0eQ== 11549\nIHN0cmVhbWluZw== 11550\nb3Ryb3M= 11551\nIFByb2R1 11552\nbmVq 11553\nIGRlc2lnbmVy 11554\nIOuKkOuC 11555\nIHBhaW50ZWQ= 11556\ncmFpbmU= 11557\nbWFpbA== 11558\nIHZlc3M= 11559\nIHJoeXRobQ== 11560\nbGVzaA== 11561\nIDk5 11562\nIGFpbmRh 11563\nY2hpZWQ= 11564\nIMOpdGFpdA== 11565\nIGFmZmVjdHM= 11566\n6aM= 11567\nIEZpbmQ= 11568\nIMOpbA== 11569\nIHBvdGF0b2Vz 11570\nIHBhZw== 11571\nINC/0LDRgA== 11572\nYXJ0cw== 11573\nIE5hY2g= 11574\nIDMz 11575\nIEhhcmQ= 11576\nIElyYXE= 11577\nIG9waW5pb25z 11578\nd2l0aA== 11579\nZXJtYW4= 11580\nw70= 11581\n6K0= 11582\nIFNQRUFL 11583\nrLw= 11584\nIHN0YWJpbGl0eQ== 11585\nIEhF 11586\nIGNhcHR1cmVk 11587\nIGJ1Y2tz 11588\nIG1hc2tz 11589\nIGNvbXBldGU= 11590\nIGZvcmdvdHRlbg== 11591\n0LvRjtGH 11592\nc2VxdQ== 11593\nIOyEoA== 11594\naWxsaW9u 11595\nIGdyYXBoaWNz 11596\nIGh1Yg== 11597\nIOyXsA== 11598\nZW1wb3I= 11599\nIGNyb3du 11600\nIHdpZGVy 11601\nIG9jY3Vycw== 11602\nRFM= 11603\n5oE= 11604\nIEJhdHRsZQ== 11605\nIGR1YWw= 11606\nIDYwMA== 11607\nYXRoZXJz 11608\n4LmB 11609\nIHNldHRsZQ== 11610\nIGF2YWl0 11611\nIGRvaXM= 11612\n0LrQuNGF 11613\nYWRvcmVz 11614\nIMOz 11615\nbmVnbw== 11616\nIEdlb3JnaWE= 11617\nIFJvZw== 11618\nIGRpdm9y 11619\nIFNvbmc= 11620\nIFNwZWNpYWw= 11621\nIG11bg== 11622\nIHByZXRlbmQ= 11623\nTUFO 11624\nIHZpb2xlbnQ= 11625\nIGJlc2lkZXM= 11626\ndnk= 11627\nIE5heg== 11628\nMjk= 11629\nIHN3ZWF0 11630\nIHp3 11631\nIEh1 11632\nIEJ1aWxk 11633\nIGhvcm0= 11634\nIENhcmQ= 11635\nIOycoA== 11636\nIHJlY29tbWVuZGF0aW9u 11637\nY2FsbGVk 11638\nc3RpY2s= 11639\nIFBvbGljZQ== 11640\nIGNvbnN1bWVycw== 11641\nIGdyb2Nlcg== 11642\nIHN0dW4= 11643\nINCS0Ys= 11644\n0KM= 11645\nIERhdGE= 11646\nIHN1YnN0YW50 11647\naXJlY3Q= 11648\n4LI= 11649\nINCy0Lc= 11650\nIEFybQ== 11651\nIHNlbWVzdGVy 11652\nIEJyYWQ= 11653\nIG91cnM= 11654\nINC60L7RgtC+0YDRi9C5 11655\np2E= 11656\nIGdyYW1z 11657\nIGV4ZXJjaXNlcw== 11658\nNzU= 11659\nIHN3ZWFy 11660\nIGluY2VudA== 11661\nz4HOvw== 11662\nIGlsbGVnYWw= 11663\nIERhbW4= 11664\nIG7Dug== 11665\nIG5lY2Vz 11666\nIGN1eg== 11667\naWNvbg== 11668\nIGhvcnM= 11669\nIENvbW8= 11670\nIOuRkA== 11671\nIG92ZXJzZQ== 11672\nIGhhcnZlc3Q= 11673\nIHRocmV3 11674\nINC/0L7RgtC+0LzRgw== 11675\n15nXlA== 11676\nIG90cm8= 11677\nINC/0LXRgNCy 11678\nIHNjb3Bl 11679\nIGdsb3J5 11680\nIE1pY2hpZ2Fu 11681\nIGFzc3VtaW5n 11682\nINGD0LQ= 11683\nIGJvbGQ= 11684\nZ3Vl 11685\nbW90aGVy 11686\nIHdhcmVu 11687\nINil 11688\nIEthbQ== 11689\naXNwaWVs 11690\nIHRvdWpvdXJz 11691\nIGNvbnN0aXR1dGlvbg== 11692\nIH4= 11693\nIGZyYW5rbHk= 11694\nb2xlbg== 11695\nb25zY2lvdXM= 11696\nIHfDvHJkZQ== 11697\ndGhvbg== 11698\nIE9G 11699\n7J6Q6w== 11700\ndW5kYQ== 11701\nINC/0L7RgA== 11702\nIGVtcGxveW1lbnQ= 11703\n0ZHRgg== 11704\nIHN0ZWFt 11705\nIERJ 11706\nIHByb2Zlc3Npb25hbHM= 11707\nIGVuZ2luZWVycw== 11708\nIFhpYQ== 11709\n56s= 11710\n7JiB 11711\nIER1bg== 11712\nIGJpdGNo 11713\nIEZvcmQ= 11714\nc2VjdGlvbg== 11715\nIHZpY2U= 11716\nIExhdGVy 11717\nb3N0b24= 11718\n0Y3Rgg== 11719\n16Y= 11720\nIEF6dXJl 11721\ncGxpbmc= 11722\nIDE4MA== 11723\nIENyZWF0 11724\nSVNIQQ== 11725\nIGJ1ZW5v 11726\n7Z2s 11727\ncnVw 11728\nbGVycw== 11729\nIFlhbmc= 11730\nIEhB 11731\nYmF0 11732\nIENhdGhvbGlj 11733\nIGFjY2VudA== 11734\nIG1peGluZw== 11735\nY2tldHM= 11736\nIGVuaGFuY2U= 11737\nw7xocg== 11738\nw6pz 11739\nIO2W 11740\nIHN3aW1taW5n 11741\nIGPhu6dh 11742\nIEVsaXo= 11743\nIGltbXVuZQ== 11744\nINCx0L7Quw== 11745\nIGZhcmU= 11746\nIEdhYg== 11747\n16E= 11748\nIHNhdGVsbA== 11749\nIEFueXRoaW5n 11750\nIGFzc2V0 11751\nIHNjaGVkdWw= 11752\nIHJhZGljYWw= 11753\nIHp3ZWk= 11754\nIE1F 11755\ncmVsYXRlZA== 11756\nIHNlcGFyYXRlZA== 11757\nIExpYnI= 11758\nIGdyaXA= 11759\nIOCuqg== 11760\nIGJlYW5z 11761\nIE9w 11762\n7IaM 11763\nIHBvdW5k 11764\nIGVudHJhbmNl 11765\nz4Y= 11766\nIE5pZQ== 11767\nIFJlcHVibGljYW5z 11768\nIGF0b20= 11769\nIHBlcnNvbmFz 11770\nIEFsaQ== 11771\nw6Rocg== 11772\nIGRyYW1hdGlj 11773\nIEZpbmU= 11774\nIHJlbWluZHM= 11775\n6Jk= 11776\nIGTDqWrDoA== 11777\nIGFmZm9yZGFibGU= 11778\nIGJyYW4= 11779\naWVybw== 11780\nYWxhcg== 11781\nY3U= 11782\nIFw= 11783\nIG1vxbxl 11784\nIGJsYXN0 11785\nIHJlY3k= 11786\nZmlyZQ== 11787\nIGxsZQ== 11788\nINCy0YDQtdC80Y8= 11789\nIFdX 11790\nIHZz 11791\nIER1ZGU= 11792\nIFJvbWU= 11793\nIGdyZWV0 11794\nIEhldA== 11795\nY2lhcw== 11796\nIOuLuQ== 11797\nbGVzc2x5 11798\nIHByZW1pdW0= 11799\nIGV4cGVyaW1lbnRz 11800\nYXRhcg== 11801\nw6lyaQ== 11802\nIG9mZmljaWFsbHk= 11803\nIGZlZQ== 11804\n4LmH 11805\nINGH0LXQvA== 11806\ncmVh 11807\nIHRveQ== 11808\nT1A= 11809\nIFRheWxvcg== 11810\nIE1jQw== 11811\naWxleQ== 11812\nIEJhaw== 11813\nIGFsdW0= 11814\nIFVudGVy 11815\nIG1hZ2ljYWw= 11816\nIHRyYWJhbA== 11817\nIHZvdGVz 11818\naXRhZ2U= 11819\nIG1lY2hhbmljYWw= 11820\naG4= 11821\nINC40L3RgtC10YA= 11822\nIGhpbnQ= 11823\nIGF1dGhvcml0aWVz 11824\nIE5BU0E= 11825\naXZlcnNhcnk= 11826\nINC/0L7Rhw== 11827\ncmFj 11828\nIFNQRUFLRVI= 11829\nw7Z0 11830\nIGZyYW1lcw== 11831\nIGdvb2RieWU= 11832\nIGNoZXI= 11833\naHU= 11834\nIG5ldXI= 11835\nIE1hY2g= 11836\nIEhlbGw= 11837\nIGZlc3RpdmFs 11838\n64WE 11839\ndXRh 11840\nIG11c2hyb29t 11841\nIHRhbnQ= 11842\nIHRhdHRv 11843\nIGRlbGV0ZQ== 11844\nIGRpeg== 11845\nIHbDpA== 11846\nIHNldmVudA== 11847\nIFF1aWNr 11848\nIGJha2luZw== 11849\nIGFzc2VtYmx5 11850\nR28= 11851\nIERyZWFt 11852\nIExhZA== 11853\nw6J5 11854\nYWdz 11855\nIGdyYXZpdHk= 11856\nIOynkQ== 11857\nZW1wbG95 11858\nIGRpZXNlcw== 11859\nIGRpc2NvdmVyeQ== 11860\n0YHRgtCy0LA= 11861\nIGhlYmJlbg== 11862\nIGdlcmFkZQ== 11863\nIERS 11864\nICcn 11865\nIHRlY2huaWNhbGx5 11866\nINCf0L4= 11867\nIHByaXZpbGVnZQ== 11868\nIEV2ZXI= 11869\nIFNlcnZpY2Vz 11870\ndXJhbg== 11871\nIGNvbnN1bXB0aW9u 11872\nIFJldg== 11873\nIFNoYWxs 11874\nYXNzZXI= 11875\ntoDthLA= 11876\nIHJhY2lhbA== 11877\nIFlvdXR1YmU= 11878\nIFByYQ== 11879\n0YHRgtCy0LXQvQ== 11880\nY2Vr 11881\n5rQ= 11882\nYXNoYQ== 11883\nINuB 11884\nkZw= 11885\nYWhu 11886\nSUNL 11887\nIGRyaW5rcw== 11888\nIGNhcmI= 11889\nIDY0 11890\nIE1tbQ== 11891\nIGVsZWN0cmljYWw= 11892\nIGZydWl0cw== 11893\nIEhE 11894\nw7Fh 11895\nIERlZmluaXRlbHk= 11896\nIOuwmw== 11897\nIGZhaXM= 11898\ncmF0aW9ucw== 11899\nIGNvZQ== 11900\nYWh1 11901\nIEZhaXI= 11902\nIGVhdGVu 11903\nIGZpcg== 11904\nIEF1 11905\n0YPQvQ== 11906\ndWxhdGluZw== 11907\naW5nbHk= 11908\nIHZhY2NpbmVz 11909\nIGRyYWdvbg== 11910\nIHBvaW50aW5n 11911\nIHBlbG8= 11912\nb3J0ZXJz 11913\nIHdvcmtvdXQ= 11914\n0LjQvNC10YA= 11915\nbW9uZA== 11916\nIE5vcGU= 11917\nINeW15Q= 11918\nINmC 11919\nIGFkb3B0ZWQ= 11920\nYnVs 11921\nIHNhbnM= 11922\nIHBvc3NpYmlsaXRpZXM= 11923\nIHBlbmQ= 11924\nIHphbWFu 11925\naG91 11926\nIHNoYXJlcw== 11927\nIGNhbGVuZGFy 11928\nIHBlcnNvbmE= 11929\nIHNlYWw= 11930\nIGdlbmU= 11931\nIHN0b3JlZA== 11932\nINC/0L7Qtw== 11933\nIGx5cmljcw== 11934\nIGluc3RydW1lbnRz 11935\nIE1B 11936\ngOydtA== 11937\nIGNsb3Vkcw== 11938\naG90 11939\n4bqv 11940\nIOqwmeyVhOyalA== 11941\nIEVtcGlyZQ== 11942\nIGJpbw== 11943\nd2luZA== 11944\naWVnbw== 11945\nIEV1cm9w 11946\nZWRnZQ== 11947\nIGJhY2t3YXJkcw== 11948\nIOyngOs= 11949\nIHF1ZWVu 11950\nIHNoaW5l 11951\nIMOnxLFr 11952\nIGNhZA== 11953\nIE9k 11954\nIOyCrOuejA== 11955\nIGJ1YmJsZQ== 11956\nw7Rp 11957\nemVz 11958\nIHJlYWN0aW9ucw== 11959\nIGp1ZGdtZW50 11960\nIERlbW9jcmF0cw== 11961\nIGNvc2Fz 11962\nYXNoZWQ= 11963\nINC00L7Qu9C2 11964\nxZtuaWU= 11965\n6rQ= 11966\nIGV4ZW1wbGU= 11967\nTVA= 11968\n4buv 11969\nIFZlcnM= 11970\nIHJlc2ls 11971\nIG3DoQ== 11972\nxYRzdA== 11973\nYmVsaWV2 11974\nIFZvcg== 11975\nIHNjaGVtZQ== 11976\nb25kYQ== 11977\nIHBvZGVtb3M= 11978\nIGNoYXJnZXM= 11979\nIGRlc3RpbmF0aW9u 11980\nIEt5 11981\nIFNT 11982\nIHNpbGVuY2U= 11983\nIGVtYmVk 11984\nbmF0 11985\n4bubaQ== 11986\nQU5U 11987\nZ2dlZA== 11988\nIHJlZHVjaW5n 11989\nIHVnbHk= 11990\nIG1pbQ== 11991\n0YPQtNCw 11992\nMzQ= 11993\nIGNvcmQ= 11994\nINGC0L7QttC1 11995\nIExpc2E= 11996\nIMO2bg== 11997\nIENocmlzdGlhbnM= 11998\ndW1ibGVz 11999\nb2xvZ2lzdHM= 12000\nYXph 12001\nIHRlbmRz 12002\nIENvb2s= 12003\nIGdlc2FndA== 12004\nIO2VmOuCmA== 12005\nIFRlcw== 12006\nZXJlbW9ueQ== 12007\nINC90YPQttC90L4= 12008\nIE1BUklTSEE= 12009\nIGVucm9sbA== 12010\nIENyeQ== 12011\nRVNT 12012\nIFNhZA== 12013\nIGltcGxlbWVudGVk 12014\nIGTDrWE= 12015\nw5w= 12016\nIHBpc3Q= 12017\nRHI= 12018\nIHNhYmU= 12019\nIFNvY2k= 12020\nw6RyZQ== 12021\nINC60YLQvg== 12022\nIEZyYW5jaXNjbw== 12023\nIOyepQ== 12024\nIGNyZWF0dXJlcw== 12025\nYXdz 12026\nIGVhcm5lZA== 12027\nIGNoZWFwZXI= 12028\nIGRsYQ== 12029\nIHdhcm4= 12030\nc2NoZQ== 12031\nIGJsYWg= 12032\nIG51dHI= 12033\n6Lw= 12034\nIGdvcmdlb3Vz 12035\nIEFuZ2VsZXM= 12036\nIGdlbWFjaHQ= 12037\nIGhvbWVsZXNz 12038\nb2dyYXBoaWM= 12039\nIFRhaXdhbg== 12040\nIFNvbQ== 12041\nIEhhZA== 12042\nYWN0aW9ucw== 12043\nIHBvc3Rz 12044\nIG91dHJh 12045\nIE1lYW4= 12046\na2Fy 12047\nIGNvdXM= 12048\nIGJyYWNr 12049\n0LjRgtGM0YHRjw== 12050\nIGJlbGlldmVz 12051\nIHN1aWNpZGU= 12052\nIGVxdWFsbHk= 12053\nIGNhcmVz 12054\n0L7QttC90L4= 12055\nIHN0ZW0= 12056\nIE11Y2g= 12057\nIHByb2R1Y2Vy 12058\n15XXkA== 12059\nIHByb3RlY3Rpbmc= 12060\nIFRSQVZJUw== 12061\nIGludGVydmlld3M= 12062\nIGFsaWVu 12063\nIEFzaw== 12064\nIHNvbGU= 12065\nQ08= 12066\nIFN1ZA== 12067\nIHN1cnZpdg== 12068\nIHNrZXRjaA== 12069\nIHfFgmE= 12070\nIGNvbG9j 12071\nIGFwb2xvZ2l6ZQ== 12072\nd2VpZ2h0 12073\nIDU1 12074\nID4= 12075\nIGhlcm9lcw== 12076\nIEJvc3Rvbg== 12077\nIGRlcGVuZGVudA== 12078\nIG1vdGl2YXRpb24= 12079\nZmxpeA== 12080\nIHNlYW0= 12081\n0LrQuNC1 12082\nIGRyYWlu 12083\nb2RlZA== 12084\nIGd1aWx0eQ== 12085\nIEplbm4= 12086\naW5nZW4= 12087\nIGdyYW50ZWQ= 12088\nIEtlbGx5 12089\nIFNhdg== 12090\nIFVuY2xl 12091\nIEhvbmVzdGx5 12092\nRUxJ 12093\nIG5hdmlnYXRl 12094\nIGJsZXNzZWQ= 12095\nY29yZQ== 12096\nIGVhcm5pbmc= 12097\nIHNpZ25hbHM= 12098\nIGRpc2s= 12099\naWFscw== 12100\nIGFnZXM= 12101\n5oU= 12102\nIHBhcnRpY2xl 12103\nINGH0LXRgA== 12104\nIGNhbm4= 12105\nIHRpZXI= 12106\nIHN0YXRlbWVudHM= 12107\n6rOg7JqU 12108\nIOuVjOusuOyXkA== 12109\nIENobw== 12110\nIHBvbGFy 12111\nYW7Dpw== 12112\nIEtlbm4= 12113\nIE5p 12114\nIEZpZ2h0 12115\nb3JnYW4= 12116\n6ZU= 12117\nIENoYQ== 12118\nIFPDrQ== 12119\nIHNsaWM= 12120\nIGNlcnRpZmlj 12121\nIHRlbXBsYXRl 12122\nIEZlZGVyYWw= 12123\nIGNvbnNpZGVyYXRpb24= 12124\nIGV4cGxv 12125\nIE1haW4= 12126\nIE5F 12127\nIGFsb25nc2lkZQ== 12128\nIGRyZXNzZWQ= 12129\nIFBvaW50 12130\nIGVudmlyb25tZW50cw== 12131\nIHByw7N4aW0= 12132\nIGRhYXI= 12133\nIHByb21wdA== 12134\nIHB1cnN1ZQ== 12135\nIGVudGVydGFpbm1lbnQ= 12136\nIHRocm9hdA== 12137\nIHByb2JsZW1h 12138\nIG1hcnQ= 12139\n7Lw= 12140\nIHByb3ZpZGVy 12141\n2Iw= 12142\nINeX 12143\naW50ZQ== 12144\nbWFraW5n 12145\nIHN0cm9rZQ== 12146\nIHRpc3N1ZQ== 12147\nVW4= 12148\nIHByZWNpb3Vz 12149\nIEFydHM= 12150\naW5raW5n 12151\nINCe0L0= 12152\nINC40YE= 12153\nbmFo 12154\nINCV0YHQu9C4 12155\nIGNvcm5lcnM= 12156\nIHRyaWNreQ== 12157\naW5jaA== 12158\nbGlqaw== 12159\nIHByZXNzaW5n 12160\nbGV2ZWw= 12161\nQU5H 12162\nIHJhZGlhdGlvbg== 12163\n7ISg 12164\nIGNvbmZyb250 12165\nIHZldA== 12166\nIHJlcHJlc2VudGF0aXZl 12167\nIHByb3BhZw== 12168\nIGNyYXA= 12169\nIERlYw== 12170\nIHJhbXA= 12171\n0LXQv9C10YDRjA== 12172\ndcOpcw== 12173\nZXNzZW4= 12174\nY3JpcHRpb24= 12175\nIGJpbGxz 12176\nIE1hdHRoZXc= 12177\nIGFuaW1l 12178\n4bqldA== 12179\nIGxvd2VzdA== 12180\naGFz 12181\nc2NyZWVu 12182\nb2dyYXA= 12183\n0LDQu9C+ 12184\naW50b24= 12185\nIEphaA== 12186\naXTDoA== 12187\nIGtheQ== 12188\nIHJvdGF0aW9u 12189\nIFdlcmU= 12190\nYWJlaQ== 12191\nIHRyaWFscw== 12192\nIGxldmVy 12193\naWdodHk= 12194\nIHNwb29u 12195\nIGh1bnQ= 12196\nY2xpbmc= 12197\nIGRpc20= 12198\nINCx0L7Qu9GM0Yg= 12199\nIGFzc2F1bHQ= 12200\nIO2YlQ== 12201\nIHdlZWtseQ== 12202\nIG1pc21v 12203\nIGdlbmV0aWM= 12204\ndWxwdA== 12205\nIFN0dWRlbnQ= 12206\nIHJlYWxpc3RpYw== 12207\nIGF1dGhlbnRpYw== 12208\nYXN0YQ== 12209\nIGFycmVzdGVk 12210\nIGd1aWRlbGluZXM= 12211\nINec15A= 12212\nINC00LDQsg== 12213\nIENvbWluZw== 12214\nZsO8cg== 12215\nIHJlcXVlc3Rz 12216\ng5A= 12217\nIGFuYWx5emU= 12218\nIGludGVyZXNz 12219\nIGhhbHQ= 12220\nIE9wZXI= 12221\nb25vbQ== 12222\nIGR1Y2s= 12223\nIHdpdGhk 12224\nc2Vy 12225\nIM+M 12226\nIEhpc3Rvcnk= 12227\nIHlvdXR1YmU= 12228\nIHNhYmVy 12229\nd2Fsaw== 12230\nZm9udA== 12231\nIG92ZXJ2aWV3 12232\nMzk= 12233\nw7x5 12234\nZXR0aQ== 12235\nIGZyb3plbg== 12236\nIGZsZXNo 12237\nxJ9p 12238\nIFBN 12239\nIOyZgA== 12240\n6aI= 12241\n0YbQuNC4 12242\nIOq4sOs= 12243\n7YGs 12244\nIHByb3Nl 12245\nb29vbw== 12246\ncmF0ZXM= 12247\nV1M= 12248\nIGF1dG9tYXRpYw== 12249\nIGNvbGxlY3Rpbmc= 12250\nxZE= 12251\nIG5laWdoYm9ycw== 12252\nwrsu 12253\nIEV4cGw= 12254\nIGNpcmN1bA== 12255\nY292ZXI= 12256\nd2Vn 12257\nIHN0aWNrcw== 12258\nIGVsbGVy 12259\nIHd3dw== 12260\nIGRvcm0= 12261\nIEV4cGVy 12262\nIHN0YXRpc3RpY3M= 12263\nIGVtYWlscw== 12264\nIGdyYXZl 12265\naW1peg== 12266\nSFM= 12267\nIHVpdA== 12268\nLCc= 12269\nIGxhc2Vy 12270\n6Ik= 12271\nINGC0LXQvA== 12272\n0YvRiA== 12273\n0YnRkQ== 12274\nIGdlbmF1 12275\nIHRpZW5lbg== 12276\nIG1lZGl0YXRpb24= 12277\nIE9yZ2Fu 12278\nIGVzdGltYXRl 12279\nIOustOw= 12280\nbGV0cw== 12281\nIG7DoHk= 12282\nIG1pbmRzZXQ= 12283\nIHJlc29u 12284\nIG3DqXM= 12285\nIG51bWVyb3Vz 12286\nIHZpZWxsZWljaHQ= 12287\nIFRoaXJk 12288\ndW91cw== 12289\nIERlYWQ= 12290\n0LDQvdC0 12291\nSE4= 12292\nIHJhY2luZw== 12293\nIGFnZW50cw== 12294\nIFV0 12295\nIHRlYXI= 12296\nIEhQ 12297\nIGNoZW1pc3RyeQ== 12298\nIHN1cnZpdmFs 12299\nIGNvbnZpbmNlZA== 12300\nIDs= 12301\nIHJlZ3VsYXRpb25z 12302\nIEVT 12303\nMzAw 12304\nIGVuc2U= 12305\nIOy1 12306\nIGRpY3Q= 12307\nR0E= 12308\nIGFow60= 12309\nIHRlag== 12310\nINC+0YHRgg== 12311\nIEVsZWN0 12312\nIGludGVsbGVjdHVhbA== 12313\nIGJpYXM= 12314\nIGJ1cmRlbg== 12315\nIOyWtOuWuw== 12316\nIGNoZWVy 12317\nIHNvcGg= 12318\nIHBvcnRmb2xpbw== 12319\ndWJh 12320\nIGVzdG9z 12321\nVFY= 12322\nRm9y 12323\nIGFzaA== 12324\nIGtvbW1lcg== 12325\nIGNvbGxlY3RpdmU= 12326\nIHdyZXN0 12327\nIEpldHp0 12328\nIFdhdA== 12329\ncmVpY2g= 12330\nIHByaW1lcg== 12331\nYWN0aXZl 12332\nIG1pZQ== 12333\naWNrZWQ= 12334\nIGh1bnRpbmc= 12335\nIHRlc3RpbQ== 12336\nIGNvbXBhc3Npb24= 12337\nINix 12338\nIGJydXQ= 12339\nIHNhbGFk 12340\n0L7QsdGJ0LU= 12341\nIHNvbHZpbmc= 12342\nIGZsb2F0aW5n 12343\n57c= 12344\nIGF0dHJhY3RpdmU= 12345\n2YjZhA== 12346\nIHBlcmQ= 12347\naWZmZXI= 12348\nIHNjdWxwdA== 12349\naGho 12350\nIFdlZWs= 12351\nIGVudGh1cw== 12352\nIG5hZA== 12353\nIG1lcmNo 12354\nIO2ZlQ== 12355\nIG1pbGU= 12356\nIM64 12357\nIOuCmOs= 12358\nMzg= 12359\nIGNoYWlucw== 12360\nIEFsbW9zdA== 12361\nIHRpY2tldHM= 12362\ncmlu 12363\nIEND 12364\nIGRpc3RyaWJ1dGVk 12365\nYWJldGVz 12366\nIHRlbXBlcmF0dXJlcw== 12367\nIGdhaW5lZA== 12368\nIGZsZXhpYmlsaXR5 12369\nIHNjcmVhbWluZw== 12370\nIGFicm9hZA== 12371\ndW5v 12372\nIGVudHJlcHJlbmV1cnM= 12373\nIE5ldHdvcms= 12374\nIENhbmFkaWFu 12375\nIHByZXY= 12376\nIHPDtg== 12377\nINGC0LXQsdGP 12378\nIFBva2U= 12379\nIFBvZA== 12380\nIFR1cmtleQ== 12381\nIGFic3RyYWN0 12382\nIHNuYWtl 12383\nIEFteQ== 12384\nIOuKkOuCjA== 12385\nIGJyYXZl 12386\nIOyeiOyWtOyalA== 12387\nIEthbA== 12388\nIDIwMDc= 12389\nw6FyaW8= 12390\nIG1hcmtlZA== 12391\nZ2luZXM= 12392\nIGFsbG9j 12393\nT05H 12394\nIHNjaWVudGlzdA== 12395\nIGVzY2E= 12396\nIHJhY2lzbQ== 12397\n15HX 12398\nIFNhbXM= 12399\nIFBlbm4= 12400\nIGxvYWRz 12401\nIOCuqA== 12402\nw7xiZXI= 12403\nTWU= 12404\naXjDsg== 12405\nIHBlcsOy 12406\nYW5uZQ== 12407\nIGV4cHJlc3NlZA== 12408\n0LzQtdGA 12409\nIG1vZXQ= 12410\nIHJldHVybmluZw== 12411\nbmlh 12412\nIGV4cG9u 12413\nUHJv 12414\nIGxveWFs 12415\nTUw= 12416\nIGxhbXA= 12417\nIHNoeQ== 12418\nIGNvbXBvc2l0aW9u 12419\nIEx5 12420\nIG1hZ25ldGlj 12421\nIHByZW1pZXI= 12422\nIG1lYXN1cmVk 12423\nIHN1bW1hcnk= 12424\nIGF0dGFja2Vk 12425\nIGZpbmlzaGluZw== 12426\n0Jc= 12427\n56U= 12428\nIHNpdHM= 12429\nIGh5ZHJvZ2Vu 12430\nIG1haQ== 12431\nIERldXRzY2g= 12432\nYXPEsQ== 12433\nIG9idGFpbg== 12434\ndmll 12435\nIHNvaXQ= 12436\nIOuwlA== 12437\nIGxhbmU= 12438\nIGNvbnNlZ3U= 12439\n0LLQvg== 12440\nIGVhc2U= 12441\nYWtpbg== 12442\nIEZh 12443\nIHVudHVr 12444\nIGJ1cnN0 12445\nIGN1bQ== 12446\nYWzEsW0= 12447\nw7pibGlj 12448\naWRp 12449\nIFJveWFs 12450\nIEtvbg== 12451\nIGNvbW1vbmx5 12452\nIHJlbW92aW5n 12453\nIGp1cg== 12454\naWxpYg== 12455\nIGFuY2g= 12456\n7ZaJ 12457\nxrDhu6M= 12458\nINCc0Ys= 12459\nIEFudGg= 12460\nIFPDpQ== 12461\nIGludGVycnVwdA== 12462\nIHN0ZXJl 12463\nIE9T 12464\nb255bQ== 12465\ndGVyeQ== 12466\nIE1hcmlh 12467\n6rKD 12468\nIGV4cGxvcmluZw== 12469\nIHRyYW5zcGFyZW50 12470\nIGZhdGU= 12471\nIEp1bmc= 12472\nIGdydXA= 12473\nIGRhcmtlcg== 12474\nIERvdWc= 12475\nIG1hbmU= 12476\n4bqhaQ== 12477\nZHJp 12478\nbG9vaw== 12479\nIERlc2lnbg== 12480\nIHR1dGFq 12481\nIGhvcml6b250YWw= 12482\ncmVvbg== 12483\nb3J0ZQ== 12484\nIENvcnJlY3Q= 12485\nIFN0ZXZlbg== 12486\nIHZpbmU= 12487\nMDI= 12488\nacSH 12489\nIHNpZW1wcmU= 12490\nIEtleQ== 12491\nIEdhbWVz 12492\nIG5hYXI= 12493\nIHNob2NrZWQ= 12494\nZWx2ZQ== 12495\nIFJvc2U= 12496\n7Ius 12497\nIHN0b3BwaW5n 12498\nb2hs 12499\nIE1peA== 12500\nIHN1ZmZlcmVk 12501\nIHNpZ21h 12502\nIHdlYWtuZXNz 12503\nIE93 12504\n4Li14LmI 12505\nSUY= 12506\nIOCuhQ== 12507\nYWRlZA== 12508\nIE5ldGZsaXg= 12509\nYW5lcw== 12510\nIHJlbWFpbmVk 12511\naXJ5 12512\nIHJpcA== 12513\nZWxsdA== 12514\nIHNpbGVudA== 12515\nIHByb3Zlbg== 12516\nIHRveGlj 12517\nIGFsdW1pbg== 12518\nIG11bHRpcGw= 12519\nYWxhbmQ= 12520\nIDM0 12521\nMDY= 12522\nIEJydQ== 12523\nIOygleunkA== 12524\nSnVzdA== 12525\nYm95 12526\nIHNob2U= 12527\nIGNyZWF0dXJl 12528\nIGhlYWRlZA== 12529\nINC+0YLQug== 12530\n5rE= 12531\nIGVzc2VuY2U= 12532\nIHJlbWFya2FibGU= 12533\nIG7Dum1lcg== 12534\nIGRyZXc= 12535\nIHB1enpsZQ== 12536\nIExpYnJhcnk= 12537\nIEZ1 12538\nYXNoZXM= 12539\na2s= 12540\nIElzdA== 12541\nprA= 12542\nIEJyeQ== 12543\nIGNlcmVtb255 12544\nIOCujg== 12545\nIGNyaQ== 12546\nZXF1 12547\nIHByaXpl 12548\nIGRpbWVuc2lvbnM= 12549\nb2dyYW0= 12550\nIGxlYXRoZXI= 12551\nIHBvcHVsYXRpb25z 12552\ndXVt 12553\nIHZlZ2Fu 12554\n0Y/QtA== 12555\nIGPDs21v 12556\n5YQ= 12557\nIHN0cmlw 12558\n5aM= 12559\nIHZhY2F0aW9u 12560\nhZU= 12561\nIG1lYWxz 12562\naWxpcHA= 12563\nIGVudHM= 12564\nYXJhbQ== 12565\ncmljaHQ= 12566\nIGdyYWlu 12567\nIFNwYWlu 12568\nIGNoZWVr 12569\nIEFmZg== 12570\nSU9O 12571\nIEJyaW5n 12572\nIDM4 12573\naWVsZW4= 12574\ndWx1 12575\nINCx0L7Qu9GM0YjQtQ== 12576\nIGFubm91bmNlbWVudA== 12577\nINGC0YPRgg== 12578\nIFByb3BoZXQ= 12579\nYXJkbw== 12580\nMzc= 12581\nIHdva2U= 12582\nIHRyYW5zbGF0aW9u 12583\nIE5PVA== 12584\nIENM 12585\nIGTDvMWf 12586\n0YbRlg== 12587\nYWNlcg== 12588\nIExvYw== 12589\nIHBlcmNlcHRpb24= 12590\nTk8= 12591\nIGRpZXNlbg== 12592\nTG9vaw== 12593\naGVhcnQ= 12594\nYXZlZA== 12595\nIGJvdW5kYXJ5 12596\nIGZsb3dz 12597\n0ZHQvA== 12598\nIGFyZ3VtZW50cw== 12599\nIGVsZWN0aW9ucw== 12600\nxLFz 12601\nIGhlY2s= 12602\nIHN1aXRhYmxl 12603\nIGZpYmVy 12604\nIFN0cmE= 12605\neHk= 12606\nIEh1bQ== 12607\nIG1vbnRobHk= 12608\ndXBlcg== 12609\nIGdvbGY= 12610\nIGxhdGVseQ== 12611\nIEdhcmQ= 12612\nIFJlbg== 12613\nIEFzdA== 12614\nIEZhbnQ= 12615\n0LDRgdGB 12616\nIG9ic2Vy 12617\n66Gc 12618\nIGVhc2llc3Q= 12619\njZTr 12620\nIHdlYnNpdGVz 12621\ncG9s 12622\nIGNvY29u 12623\nIOCuhw== 12624\nIFZlZw== 12625\nIHdhbGtz 12626\nIGludHJv 12627\nIGRpcmVjdGVk 12628\nIEFubmE= 12629\nIOuTpOyWtA== 12630\nIEVhc3Rlcm4= 12631\nIFNhaW50 12632\nIEJvdw== 12633\nIHJvYXN0 12634\nIFVSTA== 12635\nIGplZGVu 12636\ndXJhcw== 12637\nYWph 12638\nIHNlbWk= 12639\nIHJhcGlkbHk= 12640\nIHRhcmdldHM= 12641\nIENvbnRyb2w= 12642\nIGJhaA== 12643\nIHJlZmxlY3Rpb24= 12644\nIGNyZWF0aXZpdHk= 12645\naG9sZGVycw== 12646\nIOyYrOs= 12647\nIGFtb25nc3Q= 12648\nIGZlZWRpbmc= 12649\n0Y3RgtC+0LzRgw== 12650\nINCy0LjQtNC1 12651\nIOunjOuTpA== 12652\nIFNtYXJ0 12653\nIHJlbGlhYmxl 12654\nIHZlemVz 12655\nINeo 12656\nY2h1Y2tsZXM= 12657\nYXppb25l 12658\nIFdpbGxpYW1z 12659\nIGHDpw== 12660\nIHNsZWU= 12661\n0LXRiQ== 12662\nIHRpbWVsaW5l 12663\nIHRob3JvdWdo 12664\n4buN 12665\nIE90 12666\n4bqhbg== 12667\nIGltYWdpbmF0aW9u 12668\nIG1lY2hhbmljcw== 12669\ncmlzdA== 12670\nIGNsYWltZWQ= 12671\nz4TOtw== 12672\nw6p0ZQ== 12673\nIEh1cnJ5 12674\nIGlQYWQ= 12675\nIGNvbnN0cnU= 12676\nIENsYQ== 12677\nIEFscw== 12678\ndXR6 12679\nIGN1bHR1cmVz 12680\nIOyWtOuWu+qyjA== 12681\nIGJlbG9uZ3M= 12682\nIHllcg== 12683\nIERvZXNu 12684\nIGdlb21ldA== 12685\nIGJpZA== 12686\nIGZvYW0= 12687\nIGhvYg== 12688\nIEJyaXRhaW4= 12689\nIHN1YnN0YW5jZQ== 12690\nIGFubml2ZXJzYXJ5 12691\nIOuEiA== 12692\nIG5vdGVk 12693\nIGdvdmVybm9y 12694\nIHN0b2Nrcw== 12695\nMzE= 12696\nIGRpeWU= 12697\n7Iqk6w== 12698\nIHJlYg== 12699\nemVs 12700\nIG11bHRpcGx5 12701\nIG9wZXJhdG9y 12702\nhKTsmpQ= 12703\nIHdhdGVycw== 12704\nIGTDpHI= 12705\nIHVuc2Vy 12706\nIEVsaXphYmV0aA== 12707\nIGluY3JlYXNpbmdseQ== 12708\nIEdybw== 12709\nIGVuZ2luZXM= 12710\naXJz 12711\n2Ks= 12712\nIHRyZWFzdXJl 12713\nUEM= 12714\naW5jdGlvbg== 12715\naXJp 12716\nIGFjY3Vt 12717\nIHZhcmlhdGlvbg== 12718\nIHBvbQ== 12719\nIHRpdGxlcw== 12720\nIEZlc3Q= 12721\nw7Nz 12722\nIGVsZGVy 12723\nbnlt 12724\ncnVu 12725\n0Y/Qsg== 12726\nIGlubm92YXRpdmU= 12727\nIG5vbWJyZQ== 12728\nIGNvaW5j 12729\nIGZyYW5jaA== 12730\nIGVudG9uY2Vz 12731\nIG5pY2h0cw== 12732\nIGV4Y2x1c2l2ZQ== 12733\nIENoZWVycw== 12734\nIEJp 12735\ndWpl 12736\nIHBvaw== 12737\nIFByZW0= 12738\nIHJvY2tldA== 12739\nRUxJUEU= 12740\nIGhvc3BpdGFscw== 12741\ncml1bQ== 12742\nIGp1c3Rl 12743\nIGhhbW1lcg== 12744\nIHF1YW50dW0= 12745\nIHJlc3BvbnNlcw== 12746\nbGx5 12747\nZW5kaQ== 12748\nIGFjdGl2ZWx5 12749\nIGZyaWRnZQ== 12750\naWF0ZQ== 12751\nbG9uZw== 12752\nIHF1ZW0= 12753\nIGRlYXRocw== 12754\nIHN1cGVyaW9y 12755\nY2tlbg== 12756\n7J207JeQ 12757\na3RvcA== 12758\nIGdhdGhlcmVk 12759\no6g= 12760\nIGRhenU= 12761\nIHJlY2lwZXM= 12762\nIGJ1eno= 12763\nY2Vu 12764\nIGFueXRpbWU= 12765\nb25zZW5zZQ== 12766\nIGNpcmNsZXM= 12767\nIHNvbHZlZA== 12768\nIOyLoA== 12769\nIGNvcm9uYXZpcnVz 12770\nIEx1a2U= 12771\nIGJ1YmI= 12772\nIGNvbnRlbXBvcg== 12773\ncnp5 12774\nIEphbmU= 12775\nINC00L7QvA== 12776\nIHNjcmV3cw== 12777\nIGh5YnJpZA== 12778\nIGNhc3VhbA== 12779\nIHNlbGJzdA== 12780\nYmVpbmc= 12781\nIMSQ 12782\nIENvbHVtYg== 12783\nINGF0L7Rhw== 12784\nIGJ1Y2tldA== 12785\nIGV2YWx1YXRl 12786\nIGlkb2w= 12787\nIHJlcHV0YXRpb24= 12788\nIOyGjOs= 12789\n2YjYsQ== 12790\nIGhlY2hv 12791\nIHBvZW0= 12792\nIHN1YmplY3Rz 12793\ncGxhbnQ= 12794\nIEJlaA== 12795\nIFNwZWFraW5n 12796\nIGJhdHRlcmllcw== 12797\nIGZvbGxvd2Vycw== 12798\nw7Zs 12799\nIGdlbnRseQ== 12800\nIHNpeHQ= 12801\nIHBhcmFtZXRlcg== 12802\nIGlra2U= 12803\nIFRvdXI= 12804\nIERK 12805\nb3R0ZQ== 12806\nIEphaHJlbg== 12807\nIHByZXBhcmF0aW9u 12808\nINC00YPQvA== 12809\nIDgwMA== 12810\nY29w 12811\naWtpbmc= 12812\nIOusuA== 12813\nINC90YM= 12814\nINC70LXRgg== 12815\nIElkZQ== 12816\nIOyhsOq4iA== 12817\nIGxhdWdodGVy 12818\nIG1vbGVjdWxlcw== 12819\nIFJlc3Q= 12820\nIG9ic2VydmVk 12821\nZHppZQ== 12822\nIGFkdmVydGlzaW5n 12823\nZXJ0bw== 12824\nIG1vaW5z 12825\nIE1JVA== 12826\nIGV4Y2l0 12827\nIHR1bQ== 12828\nIHR5bA== 12829\nIGludmVzdGVk 12830\nIHBoYXJt 12831\nIHVuZXhwZWN0ZWQ= 12832\nIHBoaQ== 12833\nb3R5cGU= 12834\nd2Vpc2U= 12835\nIGdlw6c= 12836\nam91cmQ= 12837\nIGhvcnNlcw== 12838\nbsSF 12839\nPSI= 12840\nIFNN 12841\nIGZpYg== 12842\nIGNsaXBz 12843\nIHJlZ2ltZQ== 12844\nIHJvdGF0ZQ== 12845\ncm91 12846\nbmlr 12847\nIGFybW9y 12848\n8J+Y 12849\n0LXRgNCw 12850\nIE9jaA== 12851\nIHJpY2h0aWc= 12852\nw7x6ZWw= 12853\nYW5lb3VzbHk= 12854\nbWVr 12855\nIFhpYW8= 12856\nIGV4aXN0ZWQ= 12857\nd29ydGg= 12858\nIG5hdWdodA== 12859\nIGhlacOfdA== 12860\nIEJhbA== 12861\nIHJlc2lk 12862\naXZvdA== 12863\nb21hdGlj 12864\nIGhpcmVk 12865\nIGdyYWR1YWxseQ== 12866\nIG9uaW9ucw== 12867\nIGNvbXBhdA== 12868\nIGludGlt 12869\nIGpldw== 12870\nIGNvbnRyaWJ1dGlvbg== 12871\nIElyZQ== 12872\nYWNqaQ== 12873\nIHNsaWNl 12874\nIGltbXVu 12875\nIFJ1cw== 12876\nIGdyb3dz 12877\nIFNpbWlsYXJseQ== 12878\nIGhhcmRlc3Q= 12879\nIHN0cnVjaw== 12880\nIG1lYXN1cmVtZW50 12881\nLi4uXQ== 12882\ndGhleQ== 12883\nIOyggOs= 12884\nIHNuZWFr 12885\nIGFwcGxpZXM= 12886\nINC90LXQvA== 12887\n5pM= 12888\n15HXqA== 12889\nINCn0YLQvg== 12890\nIG91dHJv 12891\nIGlubm9jZW50 12892\nIG1vZw== 12893\nIFNhbXN1bmc= 12894\nIG1lcmN5 12895\nIGhhbmRsaW5n 12896\nIGludGVydmVudGlvbg== 12897\naWRheXM= 12898\nZ290 12899\nIGN1cnJpYw== 12900\nIGJvdW5kYXJpZXM= 12901\nIGNvbmZ1c2luZw== 12902\nnbzripQ= 12903\n5oc= 12904\nIHN0aXRjaGVz 12905\nw612ZWw= 12906\nIHR1bm5lbA== 12907\naXTDpA== 12908\nIGdvc3Q= 12909\naW15 12910\nIGN6YXM= 12911\nIG3DqQ== 12912\nIGNhdGFs 12913\nIFNpbW9u 12914\nIExJQU0= 12915\nbWlj 12916\nINCk 12917\nIGV5ZWw= 12918\naXNhcw== 12919\nIENQVQ== 12920\nIERvdQ== 12921\nIG7DpGNo 12922\nIGluZmluaXR5 12923\nIHJpZg== 12924\nIFBlYWNl 12925\nIEN1 12926\nIG1pbmltYWw= 12927\nIGxpc3RlbmVk 12928\nIHBvbGU= 12929\naGFsYg== 12930\nIGxvYWRlZA== 12931\nIHN0ZWFkeQ== 12932\nIEJlc2lkZXM= 12933\nw6pt 12934\nIGxhcA== 12935\nIGNvb3A= 12936\nIGZyaWVuZHNoaXA= 12937\nd29ybGQ= 12938\nIGdlaA== 12939\nIHR5bGtv 12940\nIExhdXJh 12941\nIHN1cnJvdW5kZWQ= 12942\nIEV2ZW50 12943\nIGNoYXA= 12944\nIFdvbmRlcg== 12945\nYnJlYWs= 12946\nIGRyb3Zl 12947\nIGJyb2FkZXI= 12948\nIGNoaQ== 12949\nRmk= 12950\nIGdlaGVu 12951\nIHdlc3Rlcm4= 12952\nIGludGVsbGlnZW50 12953\nIHBlcnNpc3Q= 12954\nIGZvdW5kZWQ= 12955\nIGhpc3Rvcmlj 12956\nIGZyw6U= 12957\nY2tzw6U= 12958\nIGhhbmR5 12959\nIHN5bXA= 12960\nIHJvd3M= 12961\nIG51dHJp 12962\nYnVy 12963\nIExlb24= 12964\nIHNpc3RlbWE= 12965\nIGV4dGVuc2l2ZQ== 12966\nINGD0LI= 12967\n7Y8= 12968\nIG5pZ2h0cw== 12969\nIGPDoWM= 12970\nIGNvdW50aW5n 12971\nIE11c3Q= 12972\nYWxsb3c= 12973\n0LXRgdGB 12974\nTW9t 12975\nINC90LDQtNC+ 12976\nIGJhcnJlbA== 12977\nQVJE 12978\nIGluc3RhbGxhdGlvbg== 12979\nIGluc2VjdA== 12980\nIOuFuOs= 12981\ndWrEhQ== 12982\nIMSRaQ== 12983\nIHBhY2tlZA== 12984\nIGZpY3Rpb24= 12985\nTm93 12986\nIFlheQ== 12987\nIHBlcnQ= 12988\ncm9ucw== 12989\ndW5kZQ== 12990\nYWNoZXM= 12991\nIHN0eWxlcw== 12992\nIGFwcsOocw== 12993\nb2t1 12994\nIFZpY2U= 12995\nxLFuxLF6 12996\nY29tbQ== 12997\nIGFzc2lnbmVk 12998\nIGludGVyYWN0aW9ucw== 12999\nIGFjYWI= 13000\nRkVMSVBF 13001\nIHJlc2N1ZQ== 13002\nIGluZHVzdHJpZXM= 13003\nIEFuZHk= 13004\nIHByYWlzZQ== 13005\nIGZsYW1l 13006\nIHNuYWNr 13007\n7YI= 13008\n54E= 13009\nIHN3bw== 13010\ncmVuZGVy 13011\nIGJvYXJkcw== 13012\nINGC0L7QvA== 13013\nZW5uZQ== 13014\nIHBhc3Rh 13015\nIGRldmls 13016\nIEZlbA== 13017\nIGhhdHRl 13018\nIGNvbGxlZw== 13019\nZWg= 13020\n7Ls= 13021\nIHByb2R1Y3RpdmU= 13022\nZm9yd2FyZA== 13023\n0LjQvw== 13024\nIHNtYXJ0cGhvbmU= 13025\nIGludmlz 13026\nIGJ1bQ== 13027\nIHdob2E= 13028\n7J6E 13029\nIG9ja3PDpQ== 13030\nIExhbmc= 13031\nIFN5cmlh 13032\nIHNlc2k= 13033\nzq/OsQ== 13034\nIGFwcHJvdmFs 13035\nNDg= 13036\nINC+0LTQuNC9 13037\nIOuW 13038\nIEhhcnI= 13039\nIEFkbWluaXN0 13040\nINek 13041\nIERlYW4= 13042\nZmk= 13043\nIGNpdGl6ZW4= 13044\nIHNoYXJr 13045\nMDU= 13046\nIGJvaWw= 13047\nIGluZGljYXRl 13048\n5aE= 13049\nQXJl 13050\nIGxheW91dA== 13051\nIHJlZnI= 13052\nIFBhY2lmaWM= 13053\nQUFBQQ== 13054\nIEF1c3RyYWxpYW4= 13055\nZ3Jlc3Npb24= 13056\nVm9pY2U= 13057\n0LDQu9GB0Y8= 13058\nIHNoZWx0ZXI= 13059\nVG8= 13060\nYXVwdA== 13061\nIGV2YWx1YXRpb24= 13062\nYXBvcg== 13063\nIGN1cnJlbmN5 13064\nINC80L3QvtCz0L4= 13065\naWdvcw== 13066\nIG9jdA== 13067\nIHJveWFs 13068\n6LM= 13069\nYXNpbA== 13070\nIENoaWxkcmVu 13071\nIHJpZW4= 13072\nIOuTnOs= 13073\nIGJhcnJpZXI= 13074\nIGVqZW1wbG8= 13075\nIGVr 13076\nTkQ= 13077\nZXNw 13078\n0LXQvdCw 13079\nIHBpYw== 13080\nIGtpbGxlcg== 13081\nIGludGVncmF0ZQ== 13082\nIGZld2Vy 13083\nIGRpc2FiaWxpdGllcw== 13084\nIC4uLi4= 13085\nIHRyaWFuZ2xl 13086\nIGZlZXM= 13087\nIHdpZGVseQ== 13088\nZW1p 13089\nIG92ZXJ3aGVsbWluZw== 13090\nIHpvbWI= 13091\nIGJlcmU= 13092\nIGhvb2Q= 13093\nIEF5ZQ== 13094\nIEhhcnZhcmQ= 13095\nZXY= 13096\nIM+Ezr/PhQ== 13097\nIGN1cHM= 13098\nIEF1Y2g= 13099\nem9uYQ== 13100\nIDE5OTA= 13101\nIHdlacOf 13102\nIGNydW5jaA== 13103\n5qU= 13104\nINC30LDQsg== 13105\nIG1lYXN1cmluZw== 13106\nIHN0YXRpb25z 13107\nIFN0ZXBoZW4= 13108\nIHNob3J0bHk= 13109\nIHNpZ25pbmc= 13110\nIGNvbWVkeQ== 13111\nb21v 13112\nIHN1Z2dlc3Rpb25z 13113\nIHNpZ25hdHVyZQ== 13114\nINC/0YDQuNCy 13115\nIGRpc29yZGVy 13116\nYXNrYQ== 13117\nIHdvcmxkcw== 13118\nIHByZWNpc2VseQ== 13119\nbm9ybQ== 13120\ncmF2 13121\nIENpdmls 13122\nSW50ZXI= 13123\nIENlcnRhaW4= 13124\nIGluanVyZWQ= 13125\nIHN1Z2dlc3Rz 13126\nIEdvbGRlbg== 13127\nIGN5YmVy 13128\nINi0 13129\nIHRlbXBvcmFyeQ== 13130\nIGNvb3Blcg== 13131\nIHZvdGVk 13132\nIG91Z2h0 13133\n4bqleQ== 13134\neHVhbA== 13135\nIHBhbmVscw== 13136\nIDk1 13137\nIGhhbmRzb21l 13138\nINC/0YDQvtCy 13139\nIHBlcm1pdA== 13140\nIGtlaW4= 13141\nIGJhZGx5 13142\nIG5vdGlmaWNhdGlvbnM= 13143\naXph 13144\nIE5vdGljZQ== 13145\nIGluY2x1c2l2ZQ== 13146\nIGFuc3dlcmluZw== 13147\nIO2X 13148\ndWxk 13149\n7YWM 13150\nIG5vd2FkYXlz 13151\nIDM3 13152\nIGJvbHQ= 13153\nIHN0YXRpYw== 13154\nIEhvcA== 13155\nIGF2YW50 13156\nYWpv 13157\nIOunm+yeiA== 13158\nIGZpZnR5 13159\nIEZpbmFs 13160\nIHNjb3Jlcw== 13161\nIFRhcA== 13162\nIGN5bA== 13163\nIGNvbnZpbmNl 13164\nIGFueXdheXM= 13165\nb2Rh 13166\nIOyVvA== 13167\nIHNlcnZlcw== 13168\nINGC0LDQutC+0Lk= 13169\nIFpvb20= 13170\nIHNhdmluZ3M= 13171\ndWxv 13172\nIHNvdXRoZXJu 13173\ndmlld2Vy 13174\nIGhvamU= 13175\nIHNlamE= 13176\nIHJlcHJlc2VudGluZw== 13177\niOuNmA== 13178\nbGlr 13179\nIFNvbWVib2R5 13180\nIGJlYXN0 13181\nIHN0aWNraW5n 13182\nIGluc2lzdA== 13183\nIHRhbGVudGVk 13184\nIGV4cGxhaW5pbmc= 13185\nIGF0dG9ybmV5 13186\nIHN0YWlycw== 13187\nIERvZw== 13188\n7Ys= 13189\nIGNpZw== 13190\nIHNoYXBlZA== 13191\nIHNvbnM= 13192\nz4HOuQ== 13193\ndXR0 13194\nIOyU 13195\nIHBhcmFk 13196\n7J24642w 13197\nIGhvcm4= 13198\nIEpvdXI= 13199\nYW5ubw== 13200\nIHdvcmxkd2lkZQ== 13201\nIHBhcnRpY2lwYXRpb24= 13202\npoQ= 13203\nIG3Ds3c= 13204\nIGJ1cm5lZA== 13205\nIHdyaXRlcnM= 13206\nYWxsYWg= 13207\nIEZ1bmQ= 13208\nIGNsZXZlcg== 13209\nIExldXRl 13210\nYmlu 13211\nIGJlYXRpbmc= 13212\nZm9vdA== 13213\nIOybkA== 13214\nIFN0dWRpbw== 13215\nIHZhZw== 13216\nYmV5 13217\ncnpl 13218\nIG9wcG9zaXRpb24= 13219\nINC20LjQtw== 13220\nd2hv 13221\nIOqxtA== 13222\nIHRyYWNl 13223\nINC00LXQvdGM 13224\nIGVwaWQ= 13225\nIGdlc2No 13226\nIE5hcg== 13227\nIEJF 13228\n0YPQuQ== 13229\nIFNpZ24= 13230\nZWRseQ== 13231\nIGNsYXk= 13232\nIGluc3RhbnRseQ== 13233\nIGdhdGhlcmluZw== 13234\nIEdhbGF4eQ== 13235\nIGJvcmVk 13236\nIEJ1ZGRo 13237\nY8Op 13238\nIG1hbQ== 13239\nIHNsb3Bl 13240\nIOuLpOydjA== 13241\nIHNjaMO2bg== 13242\nIHBpcg== 13243\nZ2Vm 13244\nYW1lcg== 13245\nIGjDtg== 13246\nIGNvbGxlYWd1ZQ== 13247\nIHByZXNlbnRz 13248\nYWRpdW0= 13249\nIOCutQ== 13250\nIGZhbGFy 13251\nYmVlcA== 13252\nIGRyaWVk 13253\naXNtcw== 13254\nIHJvcGU= 13255\nIHdvcmtzaG9w 13256\nIGVzdHVk 13257\nIGJhbmRz 13258\nIHRoZW1lcw== 13259\n2YrYsQ== 13260\nIHJlbWluZGVy 13261\n0YLRgw== 13262\nIEJo 13263\nIGNvY29udXQ= 13264\nINGB0YLQvg== 13265\nIENoYW5uZWw= 13266\nIGltbWlncmF0aW9u 13267\nw6Rz 13268\nLi4uLi4= 13269\nc3RvcA== 13270\nINC60LDRgA== 13271\nIGNvaW5z 13272\nINGH0LDRgQ== 13273\nIGRlc3RydWN0aW9u 13274\nbGluZWQ= 13275\nIGJhcnJpZXJz 13276\nYW50aW5l 13277\nIHByaW50ZWQ= 13278\nIGNvbmdyYXR1bGF0aW9ucw== 13279\nIEhlYXJ0 13280\nIGlucXU= 13281\ndGhh 13282\nIGhhcmRseQ== 13283\nIEF2ZW4= 13284\nIHRpbmhh 13285\nIFNvbnk= 13286\nIE5G 13287\nIGdyYWR1YXRlcw== 13288\nIHNxdWVlemU= 13289\nZXJlbXk= 13290\nz4TOuQ== 13291\nIGVwaWM= 13292\nIEp1 13293\nIG9sbQ== 13294\nIExhdWdodGVy 13295\nIGJlbGllZnM= 13296\nIENydQ== 13297\nIFRydWU= 13298\nIFNvdWw= 13299\nb3dlZW4= 13300\nIHJvbWFudGlj 13301\nINC30LI= 13302\nIGFub3M= 13303\nIFl1cA== 13304\nZGlt 13305\nIGluZmVy 13306\nINC30LDQvA== 13307\nIHNvYw== 13308\ndWth 13309\nIHByZWNpc2U= 13310\nIGRyb3BwaW5n 13311\nIGNsdWU= 13312\nIGVycm9ycw== 13313\nY2hhcmdl 13314\nIFB1 13315\nb21ldGVy 13316\nIGxhbWJkYQ== 13317\nYWNpb25hbA== 13318\nIERvbmc= 13319\nIGNoYW1iZXI= 13320\nIHRoYW5rZnVs 13321\nIE51 13322\nIEhhd2Fp 13323\nIGluZm8= 13324\nIGFjdGl2YXRl 13325\nIFF1YWw= 13326\nIHF1ZWQ= 13327\n0YPQu9GM 13328\nIGNsb3Ro 13329\nIHdpY2h0aWc= 13330\nNTU= 13331\nIG90cmE= 13332\nb2dyYXBoZXI= 13333\nIGN1cmlvcw== 13334\nIDE5ODA= 13335\nIGVtcHJlcw== 13336\nZGVzcw== 13337\nZXVy 13338\nIGNsdXN0ZXI= 13339\nYXJ0ZXI= 13340\nb2JpbGU= 13341\nIFlhbg== 13342\nIEFkdg== 13343\nIGRpc2NpcGxpbmU= 13344\nIOygleuPhA== 13345\nIFBsYWNl 13346\nIFNlbGVjdA== 13347\nVEU= 13348\nINCx0YvQu9Cw 13349\nIHdoaXM= 13350\nIGJheQ== 13351\nIERvcg== 13352\nZW5jaW5n 13353\nIHJlcGV0 13354\nIGZpY2Fy 13355\ncGFk 13356\nIGZvZw== 13357\ndXlvcg== 13358\nIHNuYXA= 13359\naWJ0 13360\nIHNvYmll 13361\nIGFwcG9pbnRtZW50 13362\nIFJ5 13363\nIGNlaWxpbmc= 13364\nb3Vyc2U= 13365\nIHdyaXRlcw== 13366\nIEFmZ2hhbmlzdGFu 13367\nIG1vcw== 13368\nYXpl 13369\nIHBlbmFs 13370\nIGNyeXN0YWw= 13371\nSUNF 13372\n6rCQ 13373\n6Z8= 13374\nIFRlc2xh 13375\nIHRoZW9yaWVz 13376\nIGFwcGVhbA== 13377\nIG5ld3NwYXBlcg== 13378\nIGNvb2tpZXM= 13379\n5qk= 13380\nINin2YTZhA== 13381\nIG1hag== 13382\nIEdldHRpbmc= 13383\na29tbWVu 13384\nIEhlYXZlbg== 13385\nZWxscw== 13386\nIGRpdmluZQ== 13387\nxKs= 13388\nIGFrdA== 13389\nIGhvcGVz 13390\nIENoZW4= 13391\nd2VnZW4= 13392\nKioq 13393\nIEZyYWdl 13394\nINC90Lg= 13395\n4Li5 13396\nbWluaXN0ZXI= 13397\nbmVzb3Rh 13398\nd2hpY2g= 13399\nIGV4cGxpY2l0 13400\nIHZlcmRhZA== 13401\nIGdyYWR1YXRlZA== 13402\nIFBoaWxpcHA= 13403\nUUw= 13404\nIE1J 13405\nIGRldm90 13406\nIGN1cmU= 13407\nIGNsb3Nlc3Q= 13408\nIMOE 13409\nIHNleHk= 13410\nIERlYXRo 13411\nb2tv 13412\ndWd1 13413\nIEFubmU= 13414\naXRhcmlhbg== 13415\nZXNh 13416\n0LXQs9C+0LQ= 13417\nIER1cg== 13418\nIDAwMA== 13419\nemVpdA== 13420\nIHRvdXJuYW1lbnQ= 13421\nIG1lbGhvcg== 13422\n4Liq 13423\nIGluZHU= 13424\nIGZsYXc= 13425\nIHdhcnM= 13426\nIE1pbmQ= 13427\nIElyb24= 13428\n0YLQsNC6 13429\nIFZS 13430\nIHNpeg== 13431\nIFNvdXRoZXJu 13432\nIOq3uOufrOs= 13433\nIGF3YWs= 13434\nIOyVng== 13435\nIGN1YmU= 13436\nYmVsaWV2YWJsZQ== 13437\naWZhbGw= 13438\nZGlz 13439\nIGFiYW5kb25lZA== 13440\nbWluZA== 13441\nIHBhcmw= 13442\nIGNsYXNzaWNhbA== 13443\n6Is= 13444\n4buZdA== 13445\nIEF1dG8= 13446\nIEJvcg== 13447\n56k= 13448\nNDAw 13449\nIFNvY2lldHk= 13450\nIHN1YnRsZQ== 13451\nIG1pc3Npb25z 13452\nIHJlbWVtYmVyZWQ= 13453\nIEVpdGhlcg== 13454\nIGRhZsO8cg== 13455\nT1JE 13456\nIGludGVuc2l0eQ== 13457\nRVNJTg== 13458\nIEN1cA== 13459\nIHJhcmVseQ== 13460\nIHRveXM= 13461\nIENoYXJsaWU= 13462\n4buf 13463\nIGdsYXViZQ== 13464\nIHJvdW5kcw== 13465\nVElO 13466\nIGNhcGFiaWxpdHk= 13467\nIGRlcml2YXRpdmU= 13468\nIHJlZmVycmluZw== 13469\nIGTDpQ== 13470\nIFRBTEk= 13471\nIGNvdHRvbg== 13472\nIGNvbmZlcg== 13473\nIGNvbHVtbnM= 13474\nIGxpYmVyYWw= 13475\nIG51bmNh 13476\nIM68zrU= 13477\nIGluZG8= 13478\naWJlbg== 13479\nIEJlaXNwaWVs 13480\nIOq3uOughw== 13481\nINGD0Yc= 13482\nIGhveQ== 13483\nIGZyeQ== 13484\nIFNjb3R0aXNo 13485\n6Io= 13486\nIGNpdg== 13487\nIGNvbnNlcnZhdGl2ZQ== 13488\nIGFpcnBs 13489\nIHNhcg== 13490\ncnVz 13491\nIGludmVzdG1lbnRz 13492\nIGluZmluaXRl 13493\nIOCulQ== 13494\nIFRBTElFU0lO 13495\nIEdhcnk= 13496\ndWVsbA== 13497\nINCw0Lo= 13498\nIENpcg== 13499\nIHJpdHVhbA== 13500\nID4+Pg== 13501\nIHRlbXB0 13502\nIFRlY2g= 13503\nIFBva2Vtb24= 13504\nIGltcHJvdmVtZW50cw== 13505\nIHNwYXJl 13506\nIHRyYW5zbGF0ZQ== 13507\nIHNvbnJh 13508\nIEZpbG0= 13509\nd29ydA== 13510\nINC80Lg= 13511\nIHBlcmlvZHM= 13512\nIGplYWxvdXM= 13513\nIHRpcg== 13514\nTUk= 13515\nIGNvbmR1Y3RlZA== 13516\nIOyViOuFlQ== 13517\nMDk= 13518\nIFBvbGl0 13519\nIFdoZXJlYXM= 13520\nIG1vaXN0dXJl 13521\nIHNpbnM= 13522\nIGthcA== 13523\nINGN0Lo= 13524\nIGJlbmlt 13525\nIGVsaW1pbmF0ZQ== 13526\nIGF0aGxldGVz 13527\nIE1hbmFnZXI= 13528\nIGZlYXR1cmVk 13529\nYXBvcmU= 13530\nIOuwnA== 13531\nIHBlcmY= 13532\nIFRodXM= 13533\nIGRlYnV0 13534\n0L7QsdGA 13535\nIHNlw7E= 13536\nIG15c3RlcmlvdXM= 13537\nd29yZHM= 13538\nlOqwgA== 13539\nIGNoZWNrcw== 13540\nIHZvbHVudGVlcg== 13541\nIHdhc2hpbmc= 13542\nIE1hcnZlbA== 13543\nIEFC 13544\naXNzb3Jz 13545\nISc= 13546\nIEZ1bGw= 13547\neWVvbg== 13548\nIHdlaWdo 13549\nIEpPSE4= 13550\nIHZvcw== 13551\nIHByb2NlZHVyZXM= 13552\nIGFkZHJlc3NlZA== 13553\nIEJlcmxpbg== 13554\ncHV0ZXI= 13555\nIEJhbg== 13556\nIG1lZGljYXRpb24= 13557\nIGRyb25l 13558\nINGD0LE= 13559\nIEplYW4= 13560\nIGNhcHM= 13561\nIGRpc2FwcG9pbnRlZA== 13562\nIHdvcmU= 13563\nIOq1rQ== 13564\nIG9yZ2FuaXpl 13565\nIEhhbGxvd2Vlbg== 13566\nIGZhbnRhc3k= 13567\neWFyZA== 13568\nIG5vc290cm9z 13569\nIGp1bXBlZA== 13570\nIHBob3RvZ3JhcGh5 13571\nIE5hbWU= 13572\ncmVj 13573\nQUI= 13574\nIGJsZXNzaW5n 13575\nIFNodXQ= 13576\nIGJpdHRlcg== 13577\ncG9w 13578\nIGRlaQ== 13579\nIGZ1bGZpbGw= 13580\nIGRlbmdhbg== 13581\nIGJlbG8= 13582\nIE1lYW53aGlsZQ== 13583\nIGRlcG9pcw== 13584\nIGRpYWJldGVz 13585\nIGJ1bmQ= 13586\nIFplYWxhbmQ= 13587\nIGRpZ2VzdA== 13588\nIHRpcmVz 13589\nIGRvZA== 13590\nYWduZQ== 13591\n4bq/dA== 13592\nIHBlZWw= 13593\nINC30LDQsQ== 13594\nIG5vZGVz 13595\nIHRyZW5kcw== 13596\nIFN3aXRjaA== 13597\nIEF3YXJk 13598\nIE9yaWc= 13599\nIEhhbA== 13600\nIGVzdGFz 13601\nIDM2MA== 13602\nIHNpbXVsdA== 13603\nIGNvbWlj 13604\nIG3DoA== 13605\nIGJhbGFuY2Vk 13606\nIFByaW5jZXNz 13607\nIGtpbG9tZXRlcnM= 13608\n4bup 13609\nIHBhcnRpcg== 13610\n7KSR 13611\nc29mdA== 13612\nIFZpZXc= 13613\nIGJpb2xvZ2ljYWw= 13614\naW5zdA== 13615\nNDQ= 13616\nIG1hbmVyYQ== 13617\nIGNvbXByZWhlbnNpdmU= 13618\nIFNhYg== 13619\nIGNyaW1lcw== 13620\neWVycw== 13621\nIENvbXBhbnk= 13622\nIFBob3Q= 13623\nIHBvdWNv 13624\naWFj 13625\nIGJlaW0= 13626\naW5hdGU= 13627\nIHN1YnNlcXU= 13628\nIE1heW9y 13629\nIGNlbnR1cmllcw== 13630\nw6hyZXM= 13631\n7J6W7JWE7JqU 13632\nIOq3uOufvA== 13633\nIEZyYXU= 13634\nIE9I 13635\nIOuBnQ== 13636\nIE5haA== 13637\nIFNlcmllcw== 13638\nIG92ZXJuaWdodA== 13639\n7ZKI 13640\nIOKAog== 13641\nIHRyYXZl 13642\nYXR0ZXJlZA== 13643\nIHdhcnJp 13644\nIEdydW5k 13645\nIEluZG9uZXM= 13646\nIHNjcmE= 13647\nb2J5 13648\nIEJyb29r 13649\nIGN1cnM= 13650\nIOu4 13651\nIGV4cGxhaW5z 13652\ncmFtYXRpYw== 13653\nIHBhcnRpY2lwYXRpbmc= 13654\nIG1pbnV0 13655\nIGNvbnRyYWN0cw== 13656\nIGdlZ2Vu 13657\nIGRpc2FwcGVhcmVk 13658\nIFNO 13659\nIHJvYnVzdA== 13660\nYXBo 13661\nIHNocmlt 13662\nIGRldmFzdA== 13663\nY29wZQ== 13664\nIG1lZXRz 13665\nIHBlYWNlZnVs 13666\nbWF0ZQ== 13667\nIHdlbGQ= 13668\nINeq 13669\nZG9u 13670\n0YPRgtGM 13671\nIHJlZ2lzdGVyZWQ= 13672\nIE5paw== 13673\namlu 13674\nIGNhdg== 13675\nIGVjaHQ= 13676\naW94 13677\nIGZsb3dpbmc= 13678\n0L3QvtGB0YLQuA== 13679\nIHRvZQ== 13680\nIGVudGl0eQ== 13681\n0L7QstCw 13682\nZml0cw== 13683\nIFBhdHJpY2s= 13684\n0YLRgA== 13685\nIGxldmVyYWdl 13686\nIGNvcnJlbA== 13687\naWFo 13688\nIHN0cmluZ3M= 13689\naXN0aW5jdA== 13690\nIGd1ZQ== 13691\nYXJjaHk= 13692\nIHRlbmdv 13693\nxLFtxLF6 13694\nIG9yYml0 13695\nINC10YnRkQ== 13696\nY2FrZQ== 13697\nINec15Q= 13698\nIE1pbm5lc290YQ== 13699\nIGJyYWtl 13700\nb3dpZQ== 13701\nIGNyYXc= 13702\n6riw66W8 13703\nIHByb2dyYW1tZQ== 13704\nINGB0LvRg9GH 13705\naWVuY2Vz 13706\nIE91aQ== 13707\nIFBlcnM= 13708\naW1pZW50bw== 13709\nIEludmVzdA== 13710\nIHNsb3dlcg== 13711\nIEJldGg= 13712\nIG51cnNl 13713\nIFNwcmluZw== 13714\nU3A= 13715\nIHVuZW1wbG95 13716\n0LTQuA== 13717\nIGdlbml1cw== 13718\nIEFhcm9u 13719\nIOq3uOufrA== 13720\nIGVp 13721\nIHRhbmtz 13722\nIGF1am91cmQ= 13723\nIGNvbXBsZXhpdHk= 13724\nINGA0LXRiA== 13725\nIG9sZGVzdA== 13726\nIGxldHo= 13727\nIHBoZW5vbWVub24= 13728\ncHJpbnQ= 13729\nIEJ1bmRlcw== 13730\naXRhdA== 13731\n6ruY 13732\nIDQy 13733\nIFdp 13734\nIGluY29t 13735\nIGdlaw== 13736\nIGVtYnJhY2U= 13737\nIHRpZXM= 13738\nb3V0ZQ== 13739\nIGRvc2U= 13740\nIEZyaWVuZHM= 13741\n0YvRgg== 13742\n0LXQs9C+0LTQvdGP 13743\nIG9yZw== 13744\nhOuhnA== 13745\nw7Nn 13746\nIGV4Y2VlZA== 13747\nIGdvZHM= 13748\nIOqxsOyYiOyalA== 13749\nIHNvY2lldA== 13750\nIFVuaXZlcnM= 13751\naXTDpHQ= 13752\nIHdvcmRlbg== 13753\nIHNtb2tpbmc= 13754\nIGludGVucw== 13755\nYWJ1bA== 13756\nZW1pYQ== 13757\n6JE= 13758\nNDc= 13759\nZmx5 13760\nIDIwMDY= 13761\nIFNlcmlvdXNseQ== 13762\nIHByemV6 13763\n5rw= 13764\nY3Jl 13765\nIG5hbg== 13766\nIG1vZGVz 13767\n0L7QstCw0YLRjA== 13768\nIEhhbmc= 13769\nZW1lbg== 13770\nIGJlbmVmaWNpYWw= 13771\nIHZvdGVycw== 13772\nIEJyb2Fk 13773\nIGJlbnQ= 13774\nV293 13775\nIG11bA== 13776\nIFVD 13777\nIGRhbWFnZWQ= 13778\nIFVrcmFpbmU= 13779\nIHdpcGU= 13780\nIHN0b25lcw== 13781\nIG1hbmFnZXJz 13782\nIHJhYg== 13783\n0YHRgtGA0L4= 13784\nbGF0 13785\nIGRlY2U= 13786\nIGdyYXBoaWM= 13787\nIGZvc3M= 13788\nIGRpc2FncmVl 13789\nIEFtZW4= 13790\nIHNlY3JldHM= 13791\naG9sZQ== 13792\naW5rbGU= 13793\nIGZvcnR1bmF0ZQ== 13794\nIOyx 13795\n7JyE 13796\nIGhhYml0cw== 13797\nIGJ1cmllZA== 13798\nIGhpbg== 13799\nIHZpcnR1YWxseQ== 13800\nb2xhcw== 13801\nIFJQ 13802\nIFRhYg== 13803\nbG93 13804\nIHNhY3JpZmlj 13805\nIGVzdGltYXRlZA== 13806\nb2xu 13807\n2Ys= 13808\nY3Vy 13809\nIEZlZWw= 13810\nIGNhc3RsZQ== 13811\nIHVzZWxlc3M= 13812\nIGRpc2c= 13813\nIEphY29i 13814\nIGdhYW4= 13815\nIHVwc2lkZQ== 13816\nIHBhcmVjZQ== 13817\nIHNoaXBwaW5n 13818\nIENS 13819\nIGRpc3J1cHQ= 13820\nYWN0ZXI= 13821\nVU5E 13822\nZnU= 13823\nIFBpY2s= 13824\nIENoYXJs 13825\nIEJ1bGw= 13826\nIGVudGVycHJpc2U= 13827\nIHB1bmlzaG1lbnQ= 13828\nYWNraW5n 13829\nIGZyYWN0aW9u 13830\nIHRhYmxldA== 13831\nIGNob3Jk 13832\nIHNpbWlsYXJseQ== 13833\nIFRvcm9udG8= 13834\nIGNvdXJ0cw== 13835\nxJ9s 13836\nZXN6Y3pl 13837\nIHByb25vdW4= 13838\nIFNpc3Rlcg== 13839\nIE1Q 13840\nIGdyZWF0bHk= 13841\nIERhbms= 13842\naWNvcA== 13843\nIGdhcmJhZ2U= 13844\nIHJlc29sdmU= 13845\nIFNhZg== 13846\nIEd1bg== 13847\nIGNvbXBvdW5k 13848\nIOuwsA== 13849\nIE11c2lr 13850\n4pmr 13851\nIGNoYW9z 13852\nIFdoZW5ldmVy 13853\nIGV1cm9z 13854\nIG9yY2hlc3Q= 13855\nIHJlZnJpZ2Vy 13856\nYWxhbg== 13857\n4Li3 13858\nIEFtYXppbmc= 13859\nIHB1ZA== 13860\nYWdhbg== 13861\nIGplc3pjemU= 13862\naXN5 13863\nIGFjY3VyYWN5 13864\nIEFtYQ== 13865\naXNvZGU= 13866\n64yA 13867\nIGludGVycHJldGF0aW9u 13868\nIExpYmVy 13869\n5rc= 13870\nY2Ft 13871\nIGV2b2x2ZWQ= 13872\nIEtheQ== 13873\n0YbRiw== 13874\nIGNyZWF0b3I= 13875\naXRhcw== 13876\nIGFsYXJt 13877\nIGNlbGVicmF0aW9u 13878\nemVudA== 13879\nIGZ1bmNpb24= 13880\nIG92 13881\ndW1ibGluZw== 13882\nICU= 13883\n4LiI 13884\nIHJlc3RyaWN0aW9ucw== 13885\nINC90LDQsg== 13886\nIEtpbmRlcg== 13887\nIGJhbmFuYQ== 13888\n0YzRjw== 13889\nIGRpYW1ldGVy 13890\nIG5vcnRoZXJu 13891\ndXJlcnM= 13892\nIFBhcw== 13893\nIHdvcmtmb3JjZQ== 13894\nIGp1bmc= 13895\nIGd1YXJhbnRl 13896\nIGVxdWlsaWI= 13897\nIHN1aXRl 13898\nIGV1cm8= 13899\nIGRlbGliZXI= 13900\nU3Rl 13901\nIGRvd250b3du 13902\nIGNoaW4= 13903\nIGNvZGVz 13904\nZWRpYQ== 13905\nIHNoZWVw 13906\ncmVzaG9sZA== 13907\nd25pZQ== 13908\nw7Ni 13909\nIHVuZGVybHlpbmc= 13910\nbGlh 13911\namVy 13912\nz4DPjA== 13913\n550= 13914\ndGhyb3A= 13915\nIHphcA== 13916\nIHZhY3V1bQ== 13917\nIEhhYg== 13918\nIHdyYXBwZWQ= 13919\n7KI= 13920\nIGludmVudG9yeQ== 13921\n0LzQsA== 13922\nIGNvb3Jk 13923\nIHBsYXRlcw== 13924\nIHN5bW0= 13925\nVGU= 13926\nIHfFgmHFm25pZQ== 13927\nIHJlYWNoZXM= 13928\nIGxvbmVseQ== 13929\nU2NyaXB0 13930\nbGVl 13931\nZXNzZXI= 13932\nIOqxuA== 13933\nIEdlc2No 13934\nIE1vdmluZw== 13935\nIHLDqXA= 13936\nIFZpbGw= 13937\nIFJhY2hlbA== 13938\nIHRlbW9z 13939\nT05F 13940\nIHN0cmFpbg== 13941\nIGFuZ2Vs 13942\nIGbDpQ== 13943\nVHI= 13944\nIGFjaG8= 13945\nIGhpZ2hsaWdodHM= 13946\nIFdlcg== 13947\nIENhcmw= 13948\nIGJsdXI= 13949\nIHJlZ2FyZHM= 13950\nwrc= 13951\n0LjQu9GB0Y8= 13952\nIHJlY3Jl 13953\nIFlhbmk= 13954\nVUNL 13955\noLg= 13956\nIGVsZWN0cm9ucw== 13957\nIFNwaWVs 13958\nIHZlZA== 13959\n2r4= 13960\nIGJlYW0= 13961\nIGlkaW90 13962\n65Ok 13963\n0L3QsNGH 13964\naWRk 13965\nIHNraQ== 13966\naXRhdGl2ZQ== 13967\nIGh5cG90aGVz 13968\nZW50ZXI= 13969\nIOyVhOuLiOs= 13970\nIGlocmU= 13971\nIHByZXZpZXc= 13972\nYW5nZWw= 13973\nIGRlbW9u 13974\nIGR1cw== 13975\nIGRpYw== 13976\nIEtvbQ== 13977\nTEVZ 13978\nLi4uIQ== 13979\nIHNpZWh0 13980\nIFNvbmlj 13981\nIHRlbmhv 13982\nYW5hcw== 13983\nIGRpZ2l0 13984\nIE1hYXI= 13985\nIHVuZGVyZ3JhZA== 13986\nb3VuY2Vy 13987\ndWZmeQ== 13988\nIGNvbnZlcnNpb24= 13989\nIGRpc2Nvbm5lY3Q= 13990\nIGVjaG8= 13991\nb21lcg== 13992\nIGN1cnJpY3VsdW0= 13993\nIHBlcmNow6k= 13994\nIHdhbmQ= 13995\nLi4/ 13996\nIHJvbGxlZA== 13997\nIGVudHJlcHJlbmV1cg== 13998\nIHRoZW9yZXQ= 13999\nINGJ0L4= 14000\nIGluc2lnaHRz 14001\nIHp1c2FtbWVu 14002\nb2lu 14003\ncmV0dA== 14004\ncHJvZHU= 14005\nIHZpc2l0b3Jz 14006\nZW91cw== 14007\nIGdyYW5kbW90aGVy 14008\nIGh1bW9y 14009\nINC90LjRhQ== 14010\nemVuaWE= 14011\naW5zb24= 14012\nIHJlc2V0 14013\nIGJhc2ViYWxs 14014\nIG1hdGNoaW5n 14015\n64uk6rCA 14016\nIHB1bnRv 14017\n7KE= 14018\nIHJlZGU= 14019\nIGFkZHJlc3Npbmc= 14020\nIGZvcmVjYXN0 14021\nIEJvbA== 14022\nIGNvbG9yZWQ= 14023\nIGRvY3VtZW50YXRpb24= 14024\nIGV4cGVjdGF0aW9u 14025\nIE5vcnRoZXJu 14026\nIGNyZW8= 14027\nIOCumg== 14028\nZm9u 14029\nIHVuc2VyZQ== 14030\nVU0= 14031\nIGNvcGllcw== 14032\nIGV4cGFuZGVk 14033\nIHZldGVyYW5z 14034\nIEFsbQ== 14035\nINCy0L7QvtCx0YnQtQ== 14036\nIHBzeWNob2xvZ2ljYWw= 14037\nIG5vc3Nv 14038\nIHBheW1lbnRz 14039\naW1ldGVycw== 14040\nIC0tPg== 14041\nIEplbm5pZmVy 14042\nIHZvbHVudGVlcnM= 14043\nb3NzZQ== 14044\nb3Jpb3Vz 14045\nINCx0YvQu9C4 14046\n6II= 14047\nIEVzcw== 14048\nd3M= 14049\nIEJD 14050\nIElD 14051\nV29tYW4= 14052\nIHZvbnQ= 14053\nIGV0aG5pYw== 14054\nRU5O 14055\n0LjQvNC+ 14056\nIGxvYg== 14057\nIG91aQ== 14058\nY3M= 14059\nIHJlaGU= 14060\nIOyggQ== 14061\nIGNoaWNr 14062\nw7pzaWNh 14063\nIGtvbnQ= 14064\nIERpc3RyaWN0 14065\nIHBpbGU= 14066\nINCw0LI= 14067\n0LXQudGB0YLQsg== 14068\nIMKj 14069\nIGlzc3VlZA== 14070\nINC60L7QvNC/ 14071\nIHByb3NwZXI= 14072\nIHByb2ZvdW5k 14073\nIERlYXI= 14074\nIGZ1bmRlZA== 14075\nIGJpc2E= 14076\nnpjr 14077\n158= 14078\nIOydmA== 14079\nIHR3ZWx2ZQ== 14080\nIENoYW1waW9ucw== 14081\n0YHQuw== 14082\nIDIwMDU= 14083\ncG0= 14084\nIG9uZGU= 14085\nIGRpZmbDqQ== 14086\nIENoYWxs 14087\nIGRpZmZpY3VsdGllcw== 14088\nIGdhcmFnZQ== 14089\nIGTDoQ== 14090\nw7xuaw== 14091\nIOusvA== 14092\nIHRyYW4= 14093\nIHN1Ym1pdHRlZA== 14094\nenc= 14095\n2YjYpw== 14096\nIGFyaw== 14097\nIOyEsQ== 14098\nIGdyb2Nlcnk= 14099\n0L7QvdCw 14100\naWVyZQ== 14101\nIGFlc3Q= 14102\nIGV4aGliaXRpb24= 14103\nIHLDqXM= 14104\nIGNvbnNpc3RlbmN5 14105\nIGNvb2tpZQ== 14106\n0L3QtdC5 14107\nIHJlcGxhY2VtZW50 14108\nIFNlbQ== 14109\nIOyCrOyaqQ== 14110\nODAw 14111\nIGdlbmVz 14112\nIHRyYW5zYWN0aW9u 14113\nIEVM 14114\nIGR1cmFudGU= 14115\naWJsZXM= 14116\nIEVhdA== 14117\ndGFpbA== 14118\naXNzYW5jZQ== 14119\nIHRvc3M= 14120\nIHN1cnZpdmVk 14121\nIG9mZmljZXM= 14122\nIHN1cHBvcnRpdmU= 14123\nV2hlcmU= 14124\nIHRvdXRlcw== 14125\nIOuniQ== 14126\nIGpva2Vz 14127\naWVyb24= 14128\nYXBlcnM= 14129\nIG1hdHVyZQ== 14130\nIE1hcnNo 14131\nIHNpZG8= 14132\na2luZA== 14133\nIHJlYWxtZW50ZQ== 14134\nIENoZWY= 14135\nIHF1ZWxxdWU= 14136\nIGp1ZGdlcw== 14137\nZWZ0 14138\nRVJT 14139\nIGpldA== 14140\nIHBlcnNvbnM= 14141\n6Ls= 14142\naXphdGlvbnM= 14143\ncmlr 14144\nIHNob3Bz 14145\nIFd5 14146\nIGVsZWc= 14147\ncXXDqA== 14148\ncXVvaQ== 14149\nIGp1Z2E= 14150\nIO2VnOuyiA== 14151\nIFF1ZXN0aW9u 14152\nIEdsb2JhbA== 14153\nIOyVveqwhA== 14154\nIFN0YXRpb24= 14155\nIE9oaW8= 14156\nIHN0aWNreQ== 14157\nIHN0cmVzc2Vk 14158\nIGfDvG4= 14159\nIO2d 14160\n0YHRgtGD0L8= 14161\nIFBoRA== 14162\naW1tZXI= 14163\nIG1lbnRvcg== 14164\nIGludmVudGVk 14165\nIHJldW4= 14166\nIGluZXZpdA== 14167\nIHBvbMOtdA== 14168\nIGV4ZWN1dGU= 14169\nIFN0b3J5 14170\nIG91dHN0YW5kaW5n 14171\nIGd1ZXI= 14172\nIFJhaW4= 14173\nIGNob3Nlcw== 14174\nIFRpdA== 14175\nINGB0LXRgA== 14176\nIFNpbmdhcG9yZQ== 14177\nIE5vbmU= 14178\nIGNocm9uaWM= 14179\nsOuNsA== 14180\nIGVnbw== 14181\nRVNU 14182\nIFdhbmc= 14183\nIE5BVA== 14184\nIGF1Zw== 14185\nIGRlc2t0b3A= 14186\nIGV0ZXJuYWw= 14187\nIOyCrOyLpA== 14188\nIENvbnN0aXR1dGlvbg== 14189\n7IKs6w== 14190\n15nXnA== 14191\ncHJlcw== 14192\nINCi0Ys= 14193\nIGludGVyZg== 14194\nIGxpc3Rz 14195\nIGZpZ2h0cw== 14196\nZnRlbg== 14197\nIElvd2E= 14198\nIG1vdGl2YXRlZA== 14199\nIEhvc3A= 14200\nIGVsc2V3aGVyZQ== 14201\nIHBhdGhz 14202\nIGluc3RhbmNlcw== 14203\nQmw= 14204\ncmFuZ2U= 14205\n4bux 14206\nIFNpdA== 14207\nbWFuYQ== 14208\nIOyLnOyekQ== 14209\nIG3DrG5o 14210\nYW5zYXM= 14211\nIHNuYQ== 14212\nIHBoaWxvc29waA== 14213\nIHBhc3Nl 14214\nxrDhu51p 14215\nYWto 14216\nZW50YWw= 14217\nIGlobg== 14218\ncnVjdG9y 14219\nINCy0LDRiA== 14220\nIGdlbmVyb3Vz 14221\nIHBpdm90 14222\n0L/QvtC7 14223\nIGphbWFpcw== 14224\nIGNvbWVudA== 14225\nIExldw== 14226\nb2R6aQ== 14227\nIFhib3g= 14228\nINCy0L7QtA== 14229\nIGNvbnNlbnQ= 14230\nieyepQ== 14231\nIGRpc3Bhcg== 14232\nbGFzcw== 14233\nIEdvdmVybm9y 14234\nQmVpZmFsbA== 14235\nIOqwnA== 14236\nIGJlbG92ZWQ= 14237\n16DXlQ== 14238\nc2VsbA== 14239\nIGhvbm9yZWQ= 14240\nbGVo 14241\nIHfDpHJl 14242\ndW50aW5n 14243\nIGZyYXVk 14244\nIFJBTQ== 14245\n6rG4 14246\nIGtpbGxz 14247\nIGVjb25vbWljcw== 14248\nMDQ= 14249\n0L/QtdGA 14250\nIGNvaXNhcw== 14251\nINC40LPRgA== 14252\nw61t 14253\nIG3DtmNodGU= 14254\nIOy1nA== 14255\nIHN0aW11bA== 14256\nIGZhc3Rlc3Q= 14257\nbHY= 14258\nIGfDqW4= 14259\nIFNvdW5kcw== 14260\nIDE5NzA= 14261\nIGhvbWV3b3Jr 14262\nc3BlYWtpbmc= 14263\nIGVuY291cmFnaW5n 14264\nIHF1ZXJ5 14265\nIHJldmVycw== 14266\ncHJvZml0 14267\nIGR5 14268\nIOyekQ== 14269\n64qU642w7JqU 14270\nIHNvYXA= 14271\nIEdhbGw= 14272\nIENO 14273\nIEFucw== 14274\nIGZpYw== 14275\nYW5rcw== 14276\nIGRlc3NlcnQ= 14277\nIOyggO2drA== 14278\nIE1ha2luZw== 14279\nIGNvbWXDpw== 14280\n6rOE 14281\nIGFzc29jaWF0aW9u 14282\nRGFk 14283\naGVl 14284\nIGhvZ3k= 14285\nIGFwcm8= 14286\nIGludmlzaWJsZQ== 14287\nQW1lcmljYW4= 14288\n7Y4= 14289\nIHZpYmU= 14290\nIGVtaXNzaW9ucw== 14291\nIGFkdm9jYXRl 14292\nIGtpY2tlZA== 14293\nIHZlbA== 14294\nIHN1bW1hcg== 14295\nIGZyZWFraW5n 14296\nY2hyb24= 14297\nIHBpbmNo 14298\nIHdzenlzdGs= 14299\naXNjYWw= 14300\nIHByb3ZlZA== 14301\nIG1pbmRmdWw= 14302\nIHTDpA== 14303\nIG5vaXNlcw== 14304\nIGlzb2xhdGVk 14305\nIGNyb3NzZWQ= 14306\nIOqwlQ== 14307\nIHZvaWzDoA== 14308\nIGNob3Jl 14309\nIFJB 14310\nQ29t 14311\nIHJlbGF4ZWQ= 14312\nYXRybw== 14313\nIHByZXZlbnRpb24= 14314\nVm9pY2VvdmVy 14315\nT0Q= 14316\nIENvdmlk 14317\nIHNlcGFyYXRpb24= 14318\nIC1b 14319\n0LjRh9C10LPQvg== 14320\nIFNE 14321\nYmxlZXA= 14322\nIGluZGVwZW5kZW5jZQ== 14323\nIHBhcnRpYWw= 14324\nIGFsZ29yaXRobXM= 14325\nIEFueW9uZQ== 14326\nIGFzc29jaWF0ZQ== 14327\naHVt 14328\naWN1bGFy 14329\nIGLhuqFu 14330\nIGJhdHRsZXM= 14331\nR29vZA== 14332\nQXBwbGF1c2U= 14333\nIGJhc3RhbnRl 14334\nIGFkdmFudA== 14335\nIFN3ZWV0 14336\nIHJlZnVzZWQ= 14337\nINGC0LXQsdC1 14338\ncGxldA== 14339\nIGVuY291cmFnZWQ= 14340\nIG1pcmFjbGU= 14341\nIEJ1bg== 14342\nIFZhcg== 14343\ncmltaW5hdGlvbg== 14344\nZWxlY3Q= 14345\nIE11bHQ= 14346\nIGRlbGl2ZXJpbmc= 14347\nZWluZw== 14348\nIGNt 14349\nbmVobWVu 14350\nIExpbmU= 14351\nIOunjA== 14352\nZW5jZWQ= 14353\nIFNvdW5k 14354\nIENvbnRpbg== 14355\naWpk 14356\nVU5H 14357\na2xl 14358\nIHRocmVzaG9sZA== 14359\nIGNvbXBhY3Q= 14360\nYWR0 14361\nIHRvZXM= 14362\nIFB1cg== 14363\nb3duZWQ= 14364\nbWVudGVk 14365\nIGRlc2lnbmluZw== 14366\nIHZhY2NpbmF0ZWQ= 14367\nIGV4aGF1c3Q= 14368\nIGJhc2ljcw== 14369\nIGNvbnNpc3Rz 14370\nIEd1eQ== 14371\nYWN6eQ== 14372\nIG3DrQ== 14373\nd29u 14374\nIDg1 14375\n5oI= 14376\nIG11bQ== 14377\nIGlnbm9y 14378\nIHByaW50aW5n 14379\nYWN1bGFy 14380\ncG93 14381\nIGV4cGFuZGluZw== 14382\nIGdpcg== 14383\nIENhYg== 14384\n7Zi4 14385\n0YLRjNGB0Y8= 14386\nIOyXrOufrOu2hA== 14387\nIGFuZ2xlcw== 14388\nIHRlcm1pbmFs 14389\nIFdvbg== 14390\nIEludGVyZXN0aW5n 14391\nIGNyb3NzaW5n 14392\nIGJvbmRz 14393\nIHB1ZWRlbg== 14394\nIG9yYg== 14395\nbGFyxLFu 14396\nIGNyZWVweQ== 14397\nIG51dHJpdGlvbg== 14398\nIGFsbGllcw== 14399\nIHdpcmVsZXNz 14400\nIGRlc2lyZWQ= 14401\nIGNvbXB1dGU= 14402\nIEFyaXpvbmE= 14403\nIEJlYXV0aWZ1bA== 14404\nIHByb2R1Y2Vz 14405\nIG51ZXN0cm8= 14406\ndGVk 14407\nIGVsaWdpYmxl 14408\nINGB0L7Qtw== 14409\naWNpYWw= 14410\nIEhlcm8= 14411\nIGNvbnN1bWU= 14412\nIHJvYm90cw== 14413\nIHB1cmNoYXNlZA== 14414\nY2Npw7Nu 14415\nIGl6 14416\nxrDhu6Nj 14417\nzq/Ovc6xzrk= 14418\nINij2YY= 14419\nIHNoYWRvd3M= 14420\nIE1lZGlh 14421\nIHByaW5jZXNz 14422\nIGtsYXI= 14423\nIHdvb2Rlbg== 14424\nIHVzYXI= 14425\nIGfDvHplbA== 14426\nIHNsb3Q= 14427\ncmFkZQ== 14428\nIOuS 14429\nIGhhcm1vbg== 14430\nIGluZ3JlZGllbnQ= 14431\nb3JzaGlw 14432\nZWtp 14433\nIGdyYW5kZmF0aGVy 14434\nIGV4Y2l0ZW1lbnQ= 14435\nIHBvbGl0aWNpYW5z 14436\nLi4h 14437\nIG91dHM= 14438\nIHNlcGFyYXRlbHk= 14439\nINGP0Lo= 14440\nIFdlbHQ= 14441\nIFBvdw== 14442\namFu 14443\nIG9yaWVudGF0aW9u 14444\nTEM= 14445\nYWdlbQ== 14446\n24zaug== 14447\nIGJyYW5jaGVz 14448\nYWRlbg== 14449\ncmVudGU= 14450\nIElocg== 14451\nYXNt 14452\nIGVzdMOjbw== 14453\nIE5pYw== 14454\nIHNsYXZl 14455\nIGNvbXByZXNz 14456\nY3Jvd2Q= 14457\nIGNsaW1iaW5n 14458\nIE1hbmFnZW1lbnQ= 14459\nIEJhaA== 14460\nIHBhbmlj 14461\nIGtvcg== 14462\nIGNvb2xpbmc= 14463\nIGJpbmQ= 14464\nINC30LDQtA== 14465\nIHJhY2s= 14466\nIGVudGl0 14467\nIHNlbmRz 14468\nIHlvdXJzZWx2ZXM= 14469\nZGVz 14470\nIE11c2xpbXM= 14471\nIO2a 14472\naXNtYQ== 14473\nY3ljbGU= 14474\ndW5rdA== 14475\nIENvcmU= 14476\nIGluanVyaWVz 14477\nIGlkZW50aWNhbA== 14478\n0LrQsNGP 14479\nIERldXRzY2hsYW5k 14480\nINC10LU= 14481\naXNhbg== 14482\nIHRydWM= 14483\nbGV0b24= 14484\nIGJhY2t1cA== 14485\nIHVsdHJh 14486\nIGFidW5k 14487\naWxsZXVycw== 14488\nIGJ5xYJv 14489\nb3J0ZWQ= 14490\nIGVhcnRocXU= 14491\nINC60Ls= 14492\nIG9ic2VydmF0aW9u 14493\nIG1haW50ZW5hbnQ= 14494\nZWxlbg== 14495\nIHNldHRsZWQ= 14496\nIHBlbGE= 14497\nIEVjb25vbQ== 14498\nINU= 14499\nIHN0ZWVyaW5n 14500\nIEFMTA== 14501\nIENoZXI= 14502\nIHBhdGllbmNl 14503\nIFNub3c= 14504\nIGJvcg== 14505\nIHdvcnRoeQ== 14506\nIGPDoWk= 14507\nINen 14508\nIM66zrE= 14509\nZG9n 14510\nIEthcmVu 14511\naWxsZXM= 14512\nzrI= 14513\nIGFncmljdWx0dXJl 14514\n15XXnw== 14515\nIFNlYW4= 14516\nIHNlbnNvcnM= 14517\n7ZW06w== 14518\nYWdo 14519\nIHB1YmxpY2x5 14520\nIHBldXg= 14521\nIEFsZXhhbmRlcg== 14522\nIHByaW9yaXQ= 14523\nIGxhenk= 14524\nYXJkb24= 14525\nYXR0ZXJpbmc= 14526\nIGNvc3R1bWU= 14527\n2LPYqg== 14528\nIHVudw== 14529\n0Js= 14530\nIHRoaWNrbmVzcw== 14531\ncXVpdG8= 14532\nZ3VudA== 14533\naXN0YXM= 14534\nbmV5cw== 14535\nIOuQmOqyjA== 14536\nIEJyYXNpbA== 14537\nIHRva2Vu 14538\nIGFmZmlsaQ== 14539\nbG9u 14540\nIGbDpXI= 14541\nIEJlYWNo 14542\nIHdpdGNo 14543\nIFNldmVu 14544\nIHBhbnQ= 14545\nzrvOuw== 14546\nIGNhcHRhaW4= 14547\n5Z0= 14548\nIHZldXQ= 14549\nIHBvdXZvaXI= 14550\nYWN6 14551\nIEJhcmI= 14552\nIHV0aWxpdHk= 14553\nIGNvbnRlbXBvcmFyeQ== 14554\nIG9idGFpbmVk 14555\nIHBhaW50aW5ncw== 14556\nZWFy 14557\nIHBlYW4= 14558\nIE9n 14559\nIGN1c3Q= 14560\n0LvQtdC8 14561\ngpjr 14562\nIElzc28= 14563\nIGFjb250ZQ== 14564\nIFRlbGU= 14565\nIEFzc2lzdGFudA== 14566\nw4k= 14567\n7ZaI7Iq164uI64uk 14568\nIGNvdW50cw== 14569\nIGJ1Y2s= 14570\nIERlZXA= 14571\nIHRhY2tsZQ== 14572\nIGhhcnNo 14573\nIGRlY2lkZXM= 14574\nLuKAiw== 14575\nIEFuZ2Vs 14576\nIGxheWluZw== 14577\nIGNhbG9yaWVz 14578\nIGNvbnRyb2xsaW5n 14579\nIGFkdmFudGFnZXM= 14580\nINGN0YLQvtC5 14581\nIGFwcHJvYWNoaW5n 14582\nIHRocmVhdHM= 14583\nYWthbg== 14584\nZW1hdGlj 14585\nbWFubg== 14586\n6rO1 14587\nbXVtYmxlcw== 14588\nYWNpw7M= 14589\nIG1haW50YWluaW5n 14590\nIGZvdW5kZXI= 14591\nbGFo 14592\nZmlnaHQ= 14593\nIGFkbWl0dGVk 14594\n4oCmLg== 14595\nlYw= 14596\nYWJvbA== 14597\nIHVzYWdl 14598\nIG5vbnNlbnNl 14599\nIFBhbGVzdA== 14600\nIGNvbnRyZQ== 14601\nIERlbW9jcmF0aWM= 14602\nIEVS 14603\namVrdA== 14604\nIGFyYml0 14605\nINCz0L7Quw== 14606\nIE1pY2hlbGxl 14607\naWNoZXI= 14608\nZXNo 14609\nIFBobw== 14610\n0LrQvtC8 14611\nNDk= 14612\nIEVuZXJneQ== 14613\nzr/PjQ== 14614\nIGNlbnRz 14615\nIHJlZmVycw== 14616\nIGdvc3BlbA== 14617\nIFNoYQ== 14618\nIFNoYXJl 14619\n15nXoA== 14620\nIGNsaW5pYw== 14621\nIOuEow== 14622\nIGVxdWFsaXR5 14623\ndWdz 14624\nIHNoZWQ= 14625\nIHBsYW5lcw== 14626\nIHRvdXRl 14627\ncmVjaw== 14628\nIHN0cmFuZA== 14629\nIGJpb2xvZ3k= 14630\nIGxlYWd1ZQ== 14631\nIFBvaw== 14632\nIG7Dum1lcm8= 14633\nIENvYXN0 14634\nIGNvbnNpc3RlbnRseQ== 14635\nIG51Y2xl 14636\nT09PTw== 14637\nIG9iamV0 14638\nIGNob3I= 14639\nIGdpbmdlcg== 14640\nIGRhYmVp 14641\nIGNvb3BlcmF0aW9u 14642\n4K+NLg== 14643\nbnRlbg== 14644\n56Q= 14645\nbMOg 14646\n7JaR 14647\ncmFkbw== 14648\nIHBhc3NpdmU= 14649\nIGdsb3Zlcw== 14650\nIHVuZGVyZ3JvdW5k 14651\nIGxvZ2ljYWw= 14652\nIGtldA== 14653\nIGZ1bmN0aW9uYWxpdHk= 14654\nuOumrA== 14655\nIHBvcnRhbA== 14656\nZWxsZXI= 14657\n15nXqA== 14658\nIFRlZA== 14659\nIEdyZQ== 14660\nkJw= 14661\nIHBlcnNvbm5lbA== 14662\nIGVtZXJnaW5n 14663\nIEbDvHI= 14664\nIG1lYW50aW1l 14665\ndXNhbGVt 14666\nIENsZWFy 14667\nIHRyYXBwZWQ= 14668\nIOyasA== 14669\nIGRpc3Bs 14670\nIG1ldHRyZQ== 14671\nIG11bmljaXA= 14672\nIHdpdGhkcmF3 14673\nIHNwYXQ= 14674\ndW5lcw== 14675\nIGFjY2Vzc2liaWxpdHk= 14676\nIGFwYXJl 14677\nIHByb3NwZWN0 14678\nINC90LDQtw== 14679\nIGNvcHBlcg== 14680\nIFBSTw== 14681\nz4XPhA== 14682\nIGF0dGFja2luZw== 14683\nIFZpbg== 14684\nIFN0b25l 14685\nIGludmVzdGlnYXRl 14686\nc3R5bGU= 14687\nIM67 14688\n66Gd 14689\n66eI 14690\nIGluc3BlY3Q= 14691\nIGxpdmVy 14692\n0LDQu9C40YHRjA== 14693\nIHNlcmE= 14694\naGFsdGVu 14695\nZW1hbg== 14696\nIG1pbmlzdHJ5 14697\nJyc= 14698\nIGRvdHM= 14699\n44WL44WL44WL44WL 14700\n0YPRgdGC 14701\nIEphaw== 14702\nQUtF 14703\nIGdhcHM= 14704\ndWNrZXI= 14705\nINC40L3RgtC10YDQtdGB 14706\nIEVtaWx5 14707\nIGludGVydmFs 14708\nIHRlbmRlcg== 14709\nIFRlY2hub2xvZ3k= 14710\nZ2FtZQ== 14711\nIHRyaWI= 14712\n2YTYpw== 14713\nIERldmVsb3BtZW50 14714\n2YXYpw== 14715\nIHdyaXN0 14716\nIGZpcmVz 14717\nIHRhcmdldGVk 14718\n7KCQ 14719\nIHNvZA== 14720\n7ZqM 14721\nIG9sZHXEnw== 14722\nIHNlYXNvbnM= 14723\ndmVudGlvbnM= 14724\nINC90LXQs9C+ 14725\nIHNvbWV0aW1l 14726\n0LvQuNCy 14727\nbsOp 14728\nIHTDug== 14729\nIERldXM= 14730\nIGV4ZWN1dGlvbg== 14731\nw6Fw 14732\nIENoYW5nZQ== 14733\nIEluZGVlZA== 14734\nIHJlZ3VsYXRpb24= 14735\nIEh1bmc= 14736\nw6lpcw== 14737\nIHdpc2hlcw== 14738\nIGpheno= 14739\nIHN0cnVjdHVyYWw= 14740\nIGJsb3dpbmc= 14741\nIGJ5xIc= 14742\nIHRoZXJtYWw= 14743\ncGhhbnQ= 14744\n0YDRg9C3 14745\n0LDQvdGC 14746\nIFB1bGw= 14747\nIGNvbmZ1c2lvbg== 14748\n0L3Ri9C80Lg= 14749\nIHNjZW5hcmlvcw== 14750\n7KCB7Jy866Gc 14751\nINC00LXRgg== 14752\nIHRhdHRvbw== 14753\nIGF1dHJl 14754\nIGhlYXRpbmc= 14755\nIHRyZWF0aW5n 14756\nINC/0L7QvdC40Lw= 14757\nIGV4Y2x1cw== 14758\nIExPTA== 14759\nd2Vhcg== 14760\nYWdsZQ== 14761\nIHp1csO8Y2s= 14762\nIHJhdGlvbmFs 14763\nc3U= 14764\nIGRldGVy 14765\nIE5hdGl2ZQ== 14766\n4K6V4K6z 14767\nYWNoZWQ= 14768\nIOOD 14769\nIEVudG9uY2Vz 14770\nIGhvcmE= 14771\n7J207JeQ7JqU 14772\nIGxpdGU= 14773\nw6s= 14774\nIHNpeHRo 14775\nINCx0L7Qu9C10LU= 14776\nYWN0b3I= 14777\nIHBzeWNob2xvZ3k= 14778\nIGRlbWFuZHM= 14779\nIHBlZXI= 14780\nIG5ld2x5 14781\nIFdXRQ== 14782\nRG9uYWxk 14783\nIEJveA== 14784\nIHBpbmU= 14785\nIGxvYWRpbmc= 14786\nIE5pY28= 14787\nIHPFgg== 14788\nb21tZQ== 14789\nQVJU 14790\nIHJlY3J1aXQ= 14791\nIGJ1Z3M= 14792\nYXJlbnRz 14793\nINC/0YDQvtCx 14794\nIEluc2lkZQ== 14795\naXBwZXI= 14796\nZHJhbWF0aWM= 14797\nIHBsYW5ldHM= 14798\nb3JkZQ== 14799\nIHlvZ2E= 14800\nY2hpbGQ= 14801\nIE1hcmll 14802\nIEJM 14803\nIGZpbG1lZA== 14804\nIHJlZnJlc2g= 14805\nIHRvbWF0b2Vz 14806\nIGZldA== 14807\nUXXDqQ== 14808\nICEh 14809\nIOuCtOs= 14810\ncmluZQ== 14811\nIGludGVyYWN0aXZl 14812\nc2Fs 14813\nYW5uYWg= 14814\ncGV6 14815\nIHVuZGVyc3RhbmRz 14816\nIFRva3lv 14817\nIGxpYnJhcmllcw== 14818\nIHJlYWRlcg== 14819\nkZA= 14820\nb3o= 14821\nIEVuZGU= 14822\nIEZsbw== 14823\nIG1pbGQ= 14824\nIHBvZXRyeQ== 14825\nINC20LjQsg== 14826\nIGJlaGF2ZQ== 14827\nIGRvZW4= 14828\nIFN1c2Fu 14829\ncGFnZQ== 14830\ncmFoYW0= 14831\nIGNvbW11bmljYXRpb25z 14832\nIHR1bmluZw== 14833\nIHBhYw== 14834\nIGFueGlvdXM= 14835\nSU8= 14836\nTWFyaw== 14837\nIGhpw6c= 14838\nYm9va3M= 14839\nIHBpc3M= 14840\nIGVuYWJsZWQ= 14841\nYWNoZWxvcg== 14842\nIEZPUg== 14843\nIMOpYw== 14844\nIFRS 14845\naWxzdA== 14846\naGF0 14847\nIOydjA== 14848\nIHR5Y2g= 14849\nIGphcg== 14850\nIGJ1aWxkcw== 14851\nIEFyZ2VudA== 14852\nIGludGVybWVkaQ== 14853\nIGxvdQ== 14854\nIGFyYQ== 14855\nIGFzc2lnbm1lbnQ= 14856\nIGNhYmluZXQ= 14857\nIHJldGlyZW1lbnQ= 14858\nIGRpc2FibGVk 14859\ncmljYQ== 14860\nIGF3YXJkcw== 14861\nIGJvb3Rz 14862\nIGFja25vd2xlZA== 14863\nIHRoeQ== 14864\nIOq1rA== 14865\nIHN5bmQ= 14866\n0L3QuNC5 14867\naWx0b24= 14868\nIHByb2Js 14869\nIEZhbA== 14870\nIHZlcmRhZGU= 14871\nIDcwMA== 14872\nIExlYXJuaW5n 14873\nb2N1cw== 14874\nIHBhbGFjZQ== 14875\nTm90 14876\ndGFpbg== 14877\nY20= 14878\nIG1hZ25ldA== 14879\naW5jb2xu 14880\nIGZpZ3VyaW5n 14881\nIEx5bg== 14882\nIEJvc3M= 14883\nIFZP 14884\nIGRpYWdub3Npcw== 14885\nIGVxdWlwcGVk 14886\nd2F0Y2g= 14887\naW5vcw== 14888\nYWRlcnM= 14889\nIHNoZWxm 14890\nIG9yZ2FuaXM= 14891\nIG5vZA== 14892\nIGvEsXo= 14893\ncHBlcnM= 14894\nIHJlc3RvcmU= 14895\nIGFydGlj 14896\nIFZvaWNl 14897\nxLF5b3J1bQ== 14898\n6rKp 14899\nIHNwcmVhZGluZw== 14900\nIGhpcHM= 14901\nIHdhcmQ= 14902\ndXJlYXU= 14903\nIGludGVyc2VjdGlvbg== 14904\nNjY= 14905\nIDM5 14906\n57M= 14907\nIHdhaXRlZA== 14908\n7LQ= 14909\naGhoaA== 14910\nIGR5cw== 14911\nIEVO 14912\nIGJhdGNo 14913\nIGNhZg== 14914\nIG1hcmtlcg== 14915\nb3JhYmxl 14916\nw7NyaWE= 14917\nIHN0ZXBwZWQ= 14918\nIGNlbGVicmF0aW5n 14919\n0LDQvdCw 14920\nIHdvcm4= 14921\nIEZvbA== 14922\nIHBsYQ== 14923\nIGF0dGVtcHRz 14924\nIHR3ZWV0 14925\nIHJ1c3Q= 14926\nZ2VuY2U= 14927\n7Ya1 14928\nIHJldmVs 14929\nIHJlY2VwdA== 14930\nZW5lc3M= 14931\nICgo 14932\nIeKAiw== 14933\nIOyGkA== 14934\nIGluZmx1ZW5jZWQ= 14935\n0LjQtg== 14936\nINC60L7QvdC10YfQvdC+ 14937\nIGNvbGxlZ2Vz 14938\naW9uaQ== 14939\nIHNhZw== 14940\nQW5u 14941\nb2xhcg== 14942\nIGV4cHJlc3Npb25z 14943\nIHN1aXRz 14944\nIG93bmVyc2hpcA== 14945\nZWxhbmQ= 14946\ncGllY2U= 14947\nIGRlc3B1w6lz 14948\nIHRlbA== 14949\nIGluc3VsdA== 14950\nIOq1ieyepQ== 14951\nIFNtYWxs 14952\nIEZS 14953\nb2th 14954\nYmVycmllcw== 14955\nIEFudG9u 14956\n0LXQu9GP 14957\n0Y/RgQ== 14958\nIHZhbHZl 14959\nYWN0cw== 14960\nIHdvb2Rz 14961\n4K6j 14962\nIGN1bHRpdg== 14963\nIGbDoQ== 14964\nIGNoZWVycw== 14965\nIGFzc3VtcHRpb24= 14966\nIGZpdG5lc3M= 14967\nw61jdWw= 14968\nIHBvZHI= 14969\nIHdlaXQ= 14970\nIEhpbmQ= 14971\nIGRpZ24= 14972\nINC30L0= 14973\nIHNxdWFk 14974\nIGRlc3Rybw== 14975\nY2VyZQ== 14976\nc2hpcnQ= 14977\naW1tdA== 14978\nZW5nZXJz 14979\nIHPDpA== 14980\na8WCYWQ= 14981\nIMiZ 14982\nIG9jY2Fz 14983\nIOykhA== 14984\nIHByb2Nlc3Nvcg== 14985\nIERN 14986\nIERhZGR5 14987\nIHNvb25lcg== 14988\nIHN0cmFpZ2h0Zm9yd2FyZA== 14989\nIGRlcGFydG1lbnRz 14990\nIENocm9tZQ== 14991\nIHdvcmtwbGFjZQ== 14992\nIFB5dGhvbg== 14993\nIG1lbmc= 14994\nIERBTg== 14995\nIEljZQ== 14996\nIOuIiA== 14997\nIEdp 14998\nIGhpcmluZw== 14999\nIGxhbmRlZA== 15000\nIGRlbW9jcmF0aWM= 15001\naWVkeg== 15002\nIHNldg== 15003\naWNpYQ== 15004\nIGVzcGVjaWFs 15005\nIE5vdXM= 15006\nIGjDpHQ= 15007\nIGJvdQ== 15008\ncGVydA== 15009\naWVzeg== 15010\nIHZpbA== 15011\nxZtsaQ== 15012\nIMOubg== 15013\nIGxvc3Nlcw== 15014\nIHRvYXN0 15015\nIHJlYWxt 15016\nIEF1c3Rpbg== 15017\nIEluZm9ybWF0aW9u 15018\nIHJlc3VtZQ== 15019\nIGNoYXNl 15020\nIHNhbGFyeQ== 15021\nIOu2hA== 15022\n0LvQuNGH 15023\nINGB0LvQtdC0 15024\nIEZ1cnRoZXI= 15025\nIGNhcmluZw== 15026\nIHZpZw== 15027\nIHZhbG9y 15028\nINGH0LA= 15029\nIGFuYWx5dGljcw== 15030\nIGdsb2Jl 15031\nIE1BTg== 15032\nIG5lbA== 15033\n7J207JW8 15034\nn7w= 15035\nIG95 15036\n7ZWY7IS47JqU 15037\namVu 15038\nIHRyb3VibGVz 15039\nYWhhaGE= 15040\nIGNodXJjaGVz 15041\ndWV0 15042\nIG1lYXN1cmVtZW50cw== 15043\nYmls 15044\n7L0= 15045\naWZ1bGx5 15046\n0LjQvdGD 15047\nIFdpbHNvbg== 15048\nprQ= 15049\nIO2MjA== 15050\nIOywqA== 15051\nIHDDumJsaWM= 15052\nIEplcnVzYWxlbQ== 15053\nIG5haWxz 15054\nIHNwaW5l 15055\nIGhlbW9z 15056\nIHpu 15057\ncXVpcw== 15058\nIExlYmVu 15059\nIHJlZmVyZW5jZXM= 15060\nSVRI 15061\naXBlcg== 15062\nINGB0LXQsdGP 15063\n7IE= 15064\nIFdh 15065\nc3RhdGU= 15066\np50= 15067\nIEdlbmVy 15068\nIGFjdHJlc3M= 15069\nIEVuam95 15070\n4LmD 15071\nINeS 15072\nIGluZmVjdGVk 15073\nIHNoYWtpbmc= 15074\nIG5pY2s= 15075\n4Li4 15076\nIGZvdA== 15077\nIGFjY29tcGxpc2hlZA== 15078\ndWtl 15079\nIHNoZWV0cw== 15080\nIGZlbmNl 15081\nIG51cnNpbmc= 15082\nIGludHJvZHVjaW5n 15083\nIGZlYXQ= 15084\nT25l 15085\nVE8= 15086\nIGNsdWJz 15087\nIEJydWNl 15088\nb25nZQ== 15089\nY2hhbmdl 15090\nIEJhdG1hbg== 15091\nIE9mZmljZXI= 15092\nIGh5ZHJv 15093\nIHN1cHBsZW1lbnQ= 15094\nIGNlbGE= 15095\nIGxvbmdlc3Q= 15096\nIGNvbXBldGluZw== 15097\nIGNvbmhl 15098\nZ2l2aW5n 15099\nIGJyYWlucw== 15100\nIGxvYW5z 15101\nIHdhZ2U= 15102\nIENsaW50b24= 15103\nIHPEgw== 15104\nYW5lb3Vz 15105\nIGxvcmQ= 15106\n0YDRg9C2 15107\nIHF1aXo= 15108\nIHN0aWZm 15109\nIExHQg== 15110\nc3o= 15111\nTUU= 15112\nbWFyZQ== 15113\ndGhlcmU= 15114\nIG7DpHI= 15115\nIE1hbmQ= 15116\nbGFzdA== 15117\nIGRhZw== 15118\nIGhhbGZ3YXk= 15119\nIEJhbmQ= 15120\nIOuLpOyLnA== 15121\nIEFyZW4= 15122\nIGlsZQ== 15123\nUE4= 15124\nZW50bw== 15125\nIGFsZ3Vt 15126\nIHNvY2Nlcg== 15127\nIGJsb2NrZWQ= 15128\nIEpvbmF0aGFu 15129\nIHNldw== 15130\nIFRlc3RhbWVudA== 15131\nIHZhbGU= 15132\nIGJlaGF2aQ== 15133\nIGNvbm5h 15134\nSUNI 15135\nIGF1ZGllbmNlcw== 15136\nbWw= 15137\nYW1tYWQ= 15138\nIOyCtOw= 15139\nSUdI 15140\nIHJhY2Vz 15141\nZW1lZA== 15142\nIG3hu5l0 15143\nw68= 15144\nIG92ZXJz 15145\nIGRlY2xhcmVk 15146\nIHNhbmE= 15147\nIFVuYQ== 15148\nINGA0LU= 15149\ndWNrcw== 15150\nIHBhaXJz 15151\nIGFuZ2U= 15152\nTmU= 15153\nIHVwcw== 15154\nYXZ5 15155\nw7hy 15156\ncmVlaw== 15157\nIGJlaGF2aW9ycw== 15158\nIHJlZmxlY3RlZA== 15159\nIHByaW9yaXRpZXM= 15160\nIGNvbmR1 15161\nIHJldHJlYXQ= 15162\nIGV4cGVuc2Vz 15163\nIOu0kA== 15164\nIHRyaXBsZQ== 15165\nIOq1ieyepe2eiA== 15166\nw6RsdA== 15167\nIGluZGlnZW5vdXM= 15168\nIG1pbmluZw== 15169\nIGFjY2VwdGFibGU= 15170\nIHJ1aW4= 15171\nQ0E= 15172\ndWluZQ== 15173\nIHBpcGVsaW5l 15174\nY3RpYw== 15175\nw6p0 15176\nINCy0YHQtdCz0L4= 15177\nIGJvdW4= 15178\nIERpZ2l0YWw= 15179\nIEJvb20= 15180\n0YbQtQ== 15181\nINC70YPRhw== 15182\nIGFzYw== 15183\njIDroZw= 15184\nIEdvb2RieWU= 15185\nIHJlbmRlcg== 15186\nZW5leg== 15187\nYXJyZQ== 15188\nIFRIQVQ= 15189\nYm91cg== 15190\naWNpw7Nu 15191\nRXZlcnk= 15192\nIHdpcmVz 15193\nIFBhcmxpYW1lbnQ= 15194\nbnVuZw== 15195\nYXRldXI= 15196\nIFNhdmU= 15197\nIFBoeXM= 15198\nIGFtb3I= 15199\nIEV2ZQ== 15200\nIGZyaWdodA== 15201\nIGdhbW1h 15202\nIG1pY3Jvcw== 15203\nbWl0dA== 15204\nIENvZGU= 15205\nIEJleQ== 15206\ncGxlZA== 15207\nINC40YHQv9C+0LvRjNC3 15208\n55c= 15209\n7IOJ 15210\nIG1vbmV0 15211\nIEphaHJl 15212\nIGx1eHVyeQ== 15213\nIGRlYWY= 15214\nIGJldHJheQ== 15215\nIOqysA== 15216\n0LjQutC4 15217\nIGRlZmVhdGVk 15218\nIHVuZGVydA== 15219\nIHdlZw== 15220\nIGNvb2xlcg== 15221\naWFtaQ== 15222\nIEplc3NpY2E= 15223\nIEpveQ== 15224\nIHNvcGhpc3RpYw== 15225\n0LXQvdC40Lg= 15226\n8J2Y 15227\nIGNoaWxp 15228\nIFR5cGU= 15229\nIHByb3RlaW5z 15230\nIHByZXNlbnRpbmc= 15231\nYWxpYQ== 15232\n7Jq4 15233\nIE1ham9y 15234\nIG1vbGVjdWxl 15235\ndW1lcg== 15236\nIGNvbGxhcHNl 15237\nIEFueXdheXM= 15238\nIE1vdW50YWlu 15239\nYW50ZWQ= 15240\n44CQ 15241\nINCy0LjQtNC10L4= 15242\nQXVk 15243\nIGNvbnF1 15244\nIHZvbGw= 15245\nIGtuaXQ= 15246\nIG1lbWJy 15247\nIE1hcmtldA== 15248\nIGRhcmk= 15249\nIGNhbGN1bGF0ZWQ= 15250\n0LPQuA== 15251\nIHNocmltcA== 15252\nIE11 15253\nINC/0YDQvtGC 15254\nIOyYgeyDgQ== 15255\nIHByb2R1Y3Rpdml0eQ== 15256\nIGNvZ25pdGl2ZQ== 15257\nIEhlYg== 15258\naWN0aW9ucw== 15259\n6rK9 15260\nIGNyw6k= 15261\nZsO2cg== 15262\nIHByYXlpbmc= 15263\nYXNoaQ== 15264\nIFRpaw== 15265\nw7Ny 15266\nd2Vu 15267\n0YzRjg== 15268\naXhv 15269\nICgi 15270\nINGC0LXQuw== 15271\nIOyWtOuWpA== 15272\nINC/0LXRgNC10LQ= 15273\nIERyaXZl 15274\n44CR 15275\nIEVxdQ== 15276\nIGVxdWlsaWJyaXVt 15277\nIGRlc2NyaWJlcw== 15278\n0L3QtdC1 15279\nNDI= 15280\nIEN1cnJlbnQ= 15281\neXk= 15282\nIGFic29yYg== 15283\nIHNvbGRpZXI= 15284\nZGVycw== 15285\nIHRlc3RpbW9ueQ== 15286\nIGRlY2xpbmU= 15287\nnOuhnA== 15288\nZ2FnZQ== 15289\nIGluc3BpcmU= 15290\nbGFwcGluZw== 15291\nIHNwaW5uaW5n 15292\nIHNsYXZlcnk= 15293\nIGZhY2lhbA== 15294\nIHRyYWRpdGlvbnM= 15295\nw6FyaW9z 15296\nIEhvc3BpdGFs 15297\nIG5lc3Q= 15298\nIOuIhA== 15299\nIHRvaQ== 15300\nIGZlYXJz 15301\n7IWo 15302\nIE11aA== 15303\nIGdyYWR1YXRpb24= 15304\nIGltcGFjdGVk 15305\nIGF1bnQ= 15306\nIExldHM= 15307\nIGFsdW1pbnVt 15308\nIGRvbWluYW50 15309\nIERhdmlz 15310\nIE5hdnk= 15311\nIGNvbXB0 15312\nb3BsZXM= 15313\nIGVzdGF2YQ== 15314\n6KU= 15315\nIHNjYWw= 15316\nIHByZXNlcnZl 15317\nIE9wcA== 15318\nIHByYWN0aWNhbGx5 15319\nIG1hZ25pdHVkZQ== 15320\nIGZpdHRpbmc= 15321\nIGNvb3JkaW5hdGU= 15322\nIGZ1cm5pdHVyZQ== 15323\nIEZhbWls 15324\nIGV4cGxvc2lvbg== 15325\nIGRvY3VtZW50YXJ5 15326\nIFNjcmlwdA== 15327\nIHBvcnRyYXk= 15328\nbWF0 15329\nIHNjaGVkdWxlZA== 15330\nIGR5bmFtaWNz 15331\ncGh5 15332\nYWt5 15333\nIFVJ 15334\nQ2hl 15335\nIGNvbnRpbnVvdXNseQ== 15336\nIFByb3Y= 15337\n0YPQtw== 15338\ncmFo 15339\nIGdlcm5l 15340\ncHJvb2Y= 15341\nIHNlY3JldGFyeQ== 15342\nIFBhdHJlb24= 15343\nc2NyZWFt 15344\nIEtpZHM= 15345\n4buTaQ== 15346\nIGtn 15347\nIHVuY2VydGFpbnR5 15348\nINC60LDQttC0 15349\nIG1pdGln 15350\nIHJlYWRz 15351\nIFJ1 15352\nIHByaWVzdA== 15353\nINC90LXQtA== 15354\nIGxpbWl0YXRpb25z 15355\nIGZsb2F0 15356\nNjAw 15357\nIFRveQ== 15358\nIEppbW15 15359\nIG9mZmVuc2l2ZQ== 15360\nZW5p 15361\nIFhp 15362\nIGV5ZWJy 15363\nIFR1cms= 15364\nIGFjY2lkZW50YWxseQ== 15365\nIG9obmU= 15366\nIFNhdWQ= 15367\nOTU= 15368\nIER1dGNo 15369\n0LDQvdGB 15370\nIFNlYXR0bGU= 15371\nIOuTsQ== 15372\nY2hlY2s= 15373\na8SZ 15374\nIGNvbnRyaWJ1dGlvbnM= 15375\nIGJlc2lkZQ== 15376\nIHF1aW5kaQ== 15377\nIGZsZXc= 15378\n2LDYpw== 15379\nIExP 15380\nIHdhaXN0 15381\nIEVW 15382\nIGhvbGlkYXlz 15383\nam9u 15384\nIG1pc3VuZGVy 15385\n0Y/QvQ== 15386\nIGJvdXQ= 15387\nIGRpbWlu 15388\n4bq9 15389\nw7Ns 15390\nIEdyYWNl 15391\nIGlucHV0cw== 15392\nIGRlbnk= 15393\nIGZvcm1pbmc= 15394\nIEJpbGQ= 15395\nIGFkZXF1 15396\nIGZvbGs= 15397\nIHJlamVjdGVk 15398\nc2VtYg== 15399\nIGZydXN0cmF0ZWQ= 15400\nb3Blbg== 15401\nIEJldHRlcg== 15402\naWxvbg== 15403\nIHRvd2Vs 15404\nIGRpZmZlcmVudGlhbA== 15405\nIHNhY3JlZA== 15406\nIHNhaWw= 15407\nZW50aW1lcw== 15408\nIGdlbnRsZW1hbg== 15409\nIGljb25pYw== 15410\nIGNvbXBhcmluZw== 15411\nIHNhZ3Q= 15412\nIHRleHRz 15413\nIGdyYW5kbWE= 15414\nIHJvbGxz 15415\nIGNvbnRlbnRz 15416\n0L7RgdGB 15417\nIHN1c3BlbnNpb24= 15418\ncm9pdA== 15419\nprw= 15420\nIGFzc2V6 15421\nIGRvcnQ= 15422\nIE1hdGg= 15423\nIFZpY3Rvcg== 15424\nIEphdmFTY3JpcHQ= 15425\nIGVuaGFu 15426\nxZk= 15427\nIEJ1c2g= 15428\nIHByb21vdGlvbg== 15429\nIGtpbg== 15430\nIG1vbnN0ZXJz 15431\nIENvbG9yYWRv 15432\nIM6y 15433\n7ZW07JqU 15434\naWZmZXJlbnQ= 15435\nIG5ha2Vk 15436\nIHByb2Q= 15437\nZXRpY3M= 15438\nIFdvbWFu 15439\nIHRyZWF0bWVudHM= 15440\nIGVzdG95 15441\ndsOp 15442\nIGxpZnRpbmc= 15443\nIHlhcHQ= 15444\nIFJvYmVy 15445\nIOy5nA== 15446\nIHN1YnN0aXR1dGU= 15447\nYWt1 15448\ncmlkZ2U= 15449\nIOqxsOs= 15450\nIHJlc3BvbmRlZA== 15451\nIGLDqQ== 15452\nIEVuZ2luZWVy 15453\nIHRyYW5zZmVycmVk 15454\n67I= 15455\nIGhhYmVy 15456\nb29w 15457\nIFdF 15458\nIHZlc3Q= 15459\nIGZvcnR5 15460\nIERT 15461\nIDIwMDQ= 15462\nIGNvYWNoaW5n 15463\nbm9t 15464\nIEJhYg== 15465\nIG5vc3Nh 15466\nIEpha2U= 15467\nIGd5 15468\nIGRlbGVn 15469\nIOyeoA== 15470\nINC60YDQsNGB 15471\nIHN0YW5kcG9pbnQ= 15472\nIGRpc2Fk 15473\nIGFydHdvcms= 15474\nQWQ= 15475\naWxsbw== 15476\nIMSRxrDhu6Nj 15477\nIFByb20= 15478\nIExpYg== 15479\nIGNyaXRpY2lzbQ== 15480\nIGNvbnRhY3Rz 15481\n0YDQsNC8 15482\nIGFjaGlldmVtZW50 15483\n0JTQsA== 15484\nIGRpc3NvbA== 15485\nIFZlZ2Fz 15486\nIHN0cmVhbXM= 15487\nIEtlbnQ= 15488\nINi52YTZiQ== 15489\nIHJhZGl1cw== 15490\nIHN1Y2tz 15491\nIEFjaA== 15492\nIGZp 15493\nb3VzdA== 15494\nINC70Y7QtNC4 15495\nIHBhbGV0dGU= 15496\nIEhheg== 15497\nIEFudGhvbnk= 15498\nIHRlbWE= 15499\nIENvcw== 15500\nIHNhZmVy 15501\nzrHPgg== 15502\nIGNvbnRyYWQ= 15503\nIG1haW9y 15504\nIGluZmxhdGlvbg== 15505\nIFNpbHZlcg== 15506\nIGF0dGVuZGluZw== 15507\n7ZWc7YWM 15508\nYXJ0bw== 15509\nIGFwcGxhdWRpbmc= 15510\nIGNvbXB1dGluZw== 15511\nIEhhdA== 15512\n5rs= 15513\na25vdw== 15514\nbWFrZXJz 15515\nIGNvbm9j 15516\nIGVkdWNhdGVk 15517\nIG1vZGlmaWVk 15518\nIGluY2x1c2lvbg== 15519\nbWVudGFs 15520\nnpA= 15521\naXNpYQ== 15522\nIM+Azr/PhQ== 15523\nIGF1bg== 15524\nIElyZWxhbmQ= 15525\nIGvDtg== 15526\nIGNvbXBsaWFuY2U= 15527\nIGluc3BpcmluZw== 15528\n0LjRgtC10LvRjNC90L4= 15529\nIGRpc3Bvcw== 15530\n7LCo 15531\nIHdpcA== 15532\ncmljYWw= 15533\ncmF3ZA== 15534\nIHRyZXM= 15535\nIG1vYmls 15536\nb2x1dGlvbnM= 15537\nQk8= 15538\nIGJvdW5jZQ== 15539\nIGFzc3VtZWQ= 15540\nIE1lZGljYWw= 15541\nIGZpc2NhbA== 15542\nIG5nxrDhu51p 15543\naXRpb25hbGx5 15544\nIHN0b2xlbg== 15545\nIEJN 15546\nIG1lY2hhbmlzbXM= 15547\nzrXOrw== 15548\nIHF1YWxpZmllZA== 15549\nIOyekOs= 15550\ndWdodGVycw== 15551\nIEhJVg== 15552\nIExvdHM= 15553\nIHNlcnZlcnM= 15554\nIGNhcnI= 15555\nIFRvZ2V0aGVy 15556\nIGF0dHJhY3RlZA== 15557\nIGty 15558\ndGh1cg== 15559\naW5pbg== 15560\nIEhhbGY= 15561\nyJs= 15562\nIFBhcA== 15563\nIHJlbWluZGVk 15564\nQUxM 15565\nIGhlbG1ldA== 15566\nIGJvdHRsZXM= 15567\nIHByb2Zlc3NvcnM= 15568\nIHNlaW5l 15569\nxYLEhQ== 15570\nIOqxsOyVvA== 15571\nINei15w= 15572\nZnVu 15573\nIEJpcmQ= 15574\nIGZpZ2h0ZXI= 15575\nIOuUsOs= 15576\nIFRvb2w= 15577\nIHRpbg== 15578\naW5vaXM= 15579\n67aE 15580\n15nXnw== 15581\nIENBUg== 15582\naXJzdHk= 15583\nIG91dGRvb3I= 15584\nIE5T 15585\n44WO 15586\nZmZlbg== 15587\nIGx1ZA== 15588\nSGVsbG8= 15589\nIHJvbGxlcg== 15590\naWVsZQ== 15591\nIFBvbGFuZA== 15592\nIGFwYQ== 15593\nZXhw 15594\nIGNlcnRpZmljYXRl 15595\nIFRvd24= 15596\n0LDRjtGC0YHRjw== 15597\naWxkZQ== 15598\nIGRldGVybWlu 15599\nUFI= 15600\nIGZyZWV6ZQ== 15601\nIG1haW5zdHJlYW0= 15602\nIG9iamVjdGl2ZXM= 15603\nYmxv 15604\nIHRha2ll 15605\nIOuwlOuhnA== 15606\nZWxldA== 15607\nIElW 15608\nIEZhc3Q= 15609\nIGRlcmU= 15610\nZW1w 15611\nIERyYQ== 15612\nIOyeiOyXiA== 15613\nIGRpc2NyaW1pbmF0aW9u 15614\nIM61zq/Ovc6xzrk= 15615\nbmVjZXNz 15616\n5q4= 15617\nxLHEn8Sx 15618\nIHBvc3Rpbmc= 15619\nd2nFm2NpZQ== 15620\nIGx1Yg== 15621\nIG9saXZl 15622\nIHJpbQ== 15623\nIG1vZGVsaW5n 15624\nIGHDsW8= 15625\nIFBha2lzdGFu 15626\nIG92ZXJs 15627\nIGluZmxhbQ== 15628\nTkU= 15629\n7JeQ6rKM 15630\nIGF0dGVuZGVk 15631\nIGRlYWx0 15632\nIEFsdA== 15633\nIExpbmNvbG4= 15634\nIGF3YWtl 15635\nIGZpbHRlcnM= 15636\nIFdpdGhpbg== 15637\nY3p5d2nFm2NpZQ== 15638\nIHPDuw== 15639\nIEpvaG5ueQ== 15640\nIGludGVncml0eQ== 15641\nIGlzb2xhdGlvbg== 15642\nIEVhc3k= 15643\nINC/0YDQuNC9 15644\nIEFsaWNl 15645\nIHNtaWxpbmc= 15646\nZW5peA== 15647\nLC4uLg== 15648\nzrY= 15649\nIGJlZ3Vu 15650\nIGpld2Vs 15651\nIGNvbnZlbnRpb25hbA== 15652\nIHN0YXRpc3Q= 15653\nIGhhbmRlZA== 15654\nIGlycmU= 15655\nIHByb2hpYg== 15656\nIHNhdGVsbGl0ZQ== 15657\nIEluZHVzdA== 15658\nIHRyYWdlZA== 15659\nIHRyYXZh 15660\nIGlobQ== 15661\nIGNydWVs 15662\nIEFnb3Jh 15663\nIERvYw== 15664\nIHpvbmVz 15665\nIG1hbGw= 15666\nIHRyYXk= 15667\n15XXoA== 15668\nIGlycml0 15669\nIGthbnM= 15670\nIEJlYXQ= 15671\ndWRnZQ== 15672\naWVsbGU= 15673\nIHRydXN0ZWQ= 15674\nIGJpa2Vz 15675\nINGD0L8= 15676\nIE1lbWJlcg== 15677\nd2ljaw== 15678\nIGNyZWF0b3Jz 15679\nIGhlcml0YWdl 15680\naW5kaXN0aW5jdA== 15681\nIHJlc3Vy 15682\nZW5uZW4= 15683\nQ29tZQ== 15684\nIGZpcmluZw== 15685\nIEJ1ZW5v 15686\nINCi0L4= 15687\naWthbg== 15688\nZXR0ZXM= 15689\nIGtlcw== 15690\nIHRyaXBz 15691\nIGRpdm9yY2U= 15692\nIEts 15693\nIGNvbnNvbA== 15694\na2VlcA== 15695\n6riw6rCA 15696\nIFJlcG9ydA== 15697\nIGhvc3Rpbmc= 15698\nIGRpYW1vbmQ= 15699\nIGNvbXBsaWM= 15700\nIGhlbGljb3A= 15701\nIGRlcHVpcw== 15702\nZHM= 15703\nIENoYW4= 15704\n0Y/Quw== 15705\nIHNjaXNzb3Jz 15706\naWxhdGlvbg== 15707\nIHByb3BvcnRpb24= 15708\nRVJF 15709\nINmI2KfZhA== 15710\naW50YQ== 15711\nIG11Y2hhcw== 15712\ndWF0aW9u 15713\naXRpcw== 15714\n0Y/RiQ== 15715\nIG5paW4= 15716\nIGVtcGhhc2l6ZQ== 15717\ndWVsYQ== 15718\nIHByb2R1Y2Vycw== 15719\nIHJ6ZQ== 15720\nw6RuZGVy 15721\nRVRI 15722\n5ro= 15723\nIGNvbnN0aXR1 15724\nIHBlcmZvcm1hbmNlcw== 15725\naXN0bGU= 15726\nZ292 15727\nIExpdGVy 15728\nIGluY29ycG9yYXRl 15729\nIGVkdWNhdGU= 15730\nIE5pbg== 15731\n7Kq9 15732\n2YfZhQ== 15733\nZWxlcmF0aW9u 15734\n15XXkQ== 15735\nIHlhxZ8= 15736\nb3JvdXM= 15737\nIENhcw== 15738\nIGdyYW50cw== 15739\n64ql 15740\nYW1lbA== 15741\nIOq3uOugh+qyjA== 15742\nIEVzdGU= 15743\n0YXQvtC00LjRgg== 15744\nINC/0L7RgdC70LU= 15745\nIGdlbnQ= 15746\nIGZvY3VzZXM= 15747\nYWxpdGllcw== 15748\nIFJo 15749\n67O0 15750\nIERhbmNl 15751\ncnI= 15752\nIGFtZXI= 15753\nIHV0aWxpemU= 15754\nIGzDrQ== 15755\nIEFtb25n 15756\nIHByZWduYW5jeQ== 15757\nIGxvb3Bz 15758\n0LDQu9C+0YHRjA== 15759\nIE1vaA== 15760\nIGNhdGNoaW5n 15761\nIGdsb2I= 15762\nIGFqdWQ= 15763\nIFs/ 15764\nIEFuYWw= 15765\nbG9va2luZw== 15766\nIHN1cmZhY2Vz 15767\nIHByb2dyZXNzaXZl 15768\nIHZpcmFs 15769\nMDg= 15770\nzr4= 15771\nS0E= 15772\nIMW8eQ== 15773\nIHBpY2tz 15774\nYW5ub24= 15775\nIGJ1bGs= 15776\nIFJvc3M= 15777\nIGRlc2NyaWJpbmc= 15778\nIEdlbA== 15779\nIGxvY2FsbHk= 15780\nIGVuZGxlc3M= 15781\nIG1hc3NhZ2U= 15782\nIGNsZWFuZWQ= 15783\nIHRyYXZlbGVk 15784\n0LXQvdGL 15785\nIHNlbnRpbWVudA== 15786\naWdtYQ== 15787\nIE5hcw== 15788\nIGNoZW1pY2Fscw== 15789\nIHJpZ2h0ZW91cw== 15790\nIE1hZ2lj 15791\nIHJlbGF0ZXM= 15792\nIHRydWNrcw== 15793\nIDE5NjA= 15794\nIGFwcGV0 15795\nIHNuYWNrcw== 15796\nIFN1bW1lcg== 15797\nIHnDvHo= 15798\nIHByaXM= 15799\nIE1leGljYW4= 15800\nIHRyYW5zcGFyZW4= 15801\nIG1pbm9yaXR5 15802\nIHZlcnRl 15803\nIGxhc3Nlbg== 15804\nNDY= 15805\n0LvQtdC6 15806\nw6lw 15807\nINGE0LjQu9GM 15808\nIGl5aQ== 15809\nIHNwYW4= 15810\n7ZWY7KeA 15811\nIGluZGljYXRlZA== 15812\ncXVhcg== 15813\nIHNjaG9sYXJzaGlw 15814\nIExHQlQ= 15815\nIGhpc3RvcmljYWxseQ== 15816\nw7PFgg== 15817\nIG1pbmlzdA== 15818\nIHBlbmV0 15819\nIFJhcA== 15820\nIGNvbnNlcnZhdGlvbg== 15821\nIEhvbmV5 15822\nIEJlaQ== 15823\naWRlbA== 15824\nIHJlc3BvbnNpYmlsaXRpZXM= 15825\nIG1lc3N5 15826\nIEV4Y2VwdA== 15827\nT1JF 15828\nIGluaXRpYXRpdmVz 15829\nIGp1bmlvcg== 15830\nIGRlc2lnbmVycw== 15831\nIGV4cGxvcmF0aW9u 15832\nIHNwb25zb3I= 15833\nIG1vYmlsaXR5 15834\nIGludGVn 15835\nbGFuZG8= 15836\nIGJhcms= 15837\nIGluZGljYXRlcw== 15838\n4LY= 15839\nIGVtcGxveWVy 15840\nIGNvdXNpbg== 15841\nIGJvaWxpbmc= 15842\nIGNocm9t 15843\nIMOnYWw= 15844\nIHBlcnBldA== 15845\nIGNvbnRhaW5lZA== 15846\nIHBhcmtz 15847\n0Ks= 15848\nIEVuZ2luZWVyaW5n 15849\nUGxlYXNl 15850\nIFN0YXJ0aW5n 15851\naGVybw== 15852\nIGxhd3llcnM= 15853\nIHpk 15854\nIGZyYW5jaGlzZQ== 15855\ncmFnZQ== 15856\nIGludHVpdA== 15857\nIEdM 15858\ncmVhY2g= 15859\nIEVsbGU= 15860\nIG5oxrA= 15861\nIE5vcmQ= 15862\nIGJlYW4= 15863\nMDc= 15864\nIHBsZWFzYW50 15865\ndmlyb24= 15866\nIGdyYWRpZW50 15867\nenVz 15868\nIEVN 15869\nIGVzc2F5 15870\n7JeQ7JqU 15871\n4bq/bg== 15872\nbnU= 15873\n4bur 15874\nIMOJcw== 15875\nIGRlbm9taW4= 15876\nIEdpcmxz 15877\nIHBlcnNvbm5lcw== 15878\nINin2YTYow== 15879\nYmlsZA== 15880\nIFN0YXQ= 15881\nIGNvbXBsaW1lbnQ= 15882\nIEthdGU= 15883\nIG9wdGltYWw= 15884\nIGhpZA== 15885\n2K/Zig== 15886\nIHF1aWNrZXI= 15887\nd2FsbA== 15888\nRW4= 15889\nSU5F 15890\nPz8/ 15891\n7LK0 15892\nIEFjdGlvbg== 15893\n5Z8= 15894\nIHBlbmFsdHk= 15895\nIEtheg== 15896\nJz8= 15897\nIGNyaWVk 15898\nIGNhbnZhcw== 15899\nZnRl 15900\nIGV4Y2x1ZA== 15901\nuOuhnA== 15902\nIGVtcGhhc2lz 15903\nIGVuenk= 15904\nIEhvdQ== 15905\nIG92ZXJzZWFz 15906\nw61hbW9z 15907\nw7ZnbGljaA== 15908\nIGhlYWRwaG9uZXM= 15909\nY24= 15910\nIEFnZQ== 15911\nIGFrYW4= 15912\nIGNoYXJhY3RlcmlzdGlj 15913\n7ZWY66m0 15914\nZ2V0cw== 15915\nIOu2iA== 15916\nIHJpdmFs 15917\nIGJvcmRlcnM= 15918\nZW1lbnRl 15919\nZW3DoXM= 15920\nIHlvbA== 15921\nIGNvbXBl 15922\nZW5kZXJz 15923\nxLFuZGFu 15924\nIG3DtmdsaWNo 15925\nIGJ1YmJsZXM= 15926\nbmF0dXJhbA== 15927\nIGFybWVk 15928\nIGVsYWJvcg== 15929\nIOydtOuyiA== 15930\nIHdhc2hlZA== 15931\nzr/Phc68zrU= 15932\nIGZsYXZvcnM= 15933\nIGV4aXN0ZQ== 15934\nIHByZXN0 15935\nIFRoZW1h 15936\n0L7Qv9GA0L7RgQ== 15937\nZXJvbg== 15938\nVUU= 15939\nZXJp 15940\nIGNvbmNlcg== 15941\nIGFpeMOy 15942\nIHByb3RlY3RpdmU= 15943\nINC30L3QsNGO 15944\nIOuCoA== 15945\nIElJSQ== 15946\nIG1lZXI= 15947\nIFNob3A= 15948\nbGxp 15949\nIE9yZGVy 15950\nIE1Z 15951\nIEdob3N0 15952\nYWRlbA== 15953\nIHN0b2xl 15954\nIHJlbGVhc2luZw== 15955\nIENvbW1lbnQ= 15956\nIHRyYWlucw== 15957\n66qF 15958\nIHdpc3Nlbg== 15959\nZW5zZWQ= 15960\nIGRlc2NlbmQ= 15961\nIGZpZXI= 15962\nIHJhZGk= 15963\nIHBlcnN1 15964\n56I= 15965\nINC80L0= 15966\nIERlc3Q= 15967\nIHdvcnJpZXM= 15968\naXRldA== 15969\nYmFz 15970\nIHN0YWI= 15971\nbmFtZQ== 15972\nb3JpYw== 15973\nIENsb3Nl 15974\nIGFsdW1uaQ== 15975\nIFNlbGY= 15976\nZmZl 15977\naXRhdGluZw== 15978\nYXRoZXJpbmU= 15979\nIFJpZ2h0cw== 15980\nIGVsbG9z 15981\nIHdhcnJhbnQ= 15982\nIG5lcnZl 15983\nIHZlZ2V0YWJsZQ== 15984\nIFRlaWw= 15985\nIOqwmeydtA== 15986\nUlk= 15987\nIHN1c3RhaW5hYmlsaXR5 15988\nIHN0ZWh0 15989\nIGJyaWQ= 15990\nYWRhxZ8= 15991\nIHR2 15992\nIGR1cmF0aW9u 15993\nIHBlc3NvYQ== 15994\nIG1ldHJpY3M= 15995\nIGFkYW0= 15996\nY2Fz 15997\n0LDRgNC4 15998\nIGV2aWRlbnQ= 15999\nIGRpc3BsYXllZA== 16000\n2KfYpg== 16001\nIHJlY2s= 16002\nIEJ1ZGRoYQ== 16003\nIGRlbGU= 16004\nIERpZWdv 16005\nb3NwaA== 16006\nIGJsYQ== 16007\nIE1paw== 16008\ndWxhdG9y 16009\nIDIwMDE= 16010\nIHByb21vdGluZw== 16011\neWNo 16012\nIEVY 16013\nIGxhc3RseQ== 16014\nIG91dGxpbmU= 16015\nIHNwaXJpdHM= 16016\nIHZldXg= 16017\nIHN1YnRyYWN0 16018\nIMWfaW1kaQ== 16019\nIHBpbnM= 16020\nIGJ1cmdlcg== 16021\nIG1vbHRv 16022\nIGhhYsOtYQ== 16023\nIOuwmA== 16024\naWd1 16025\nZXJzdA== 16026\nIG5lbg== 16027\nIGJhY29u 16028\naXRpb3Vz 16029\nIGNhcnJpZXM= 16030\nIHByb21pc2Vz 16031\nbmRl 16032\nIExlZnQ= 16033\nIExpbQ== 16034\n5qM= 16035\nIDQ0 16036\nIGNhcmVlcnM= 16037\nIOyjvOs= 16038\nIHNwZWVkcw== 16039\ncXXDqQ== 16040\nbWFk 16041\nbWFya2V0 16042\naXNtZQ== 16043\nIDIwMDM= 16044\nIHJlY2Vzcw== 16045\nIEpVRA== 16046\nIHJhY2lzdA== 16047\nIFNjaGw= 16048\nIHBhcmxlcg== 16049\nIG90cm9z 16050\naXNoZXM= 16051\nIGNvbnZlcnRlZA== 16052\nYWFhYQ== 16053\n0LDQvdC40Lg= 16054\nIEFyaw== 16055\nIENoYW5jZQ== 16056\nIGVsZW1lbnRhcnk= 16057\nzrXOvQ== 16058\naW5rcw== 16059\nSW50ZXJ2aWV3ZXI= 16060\nIGZyZWVseQ== 16061\nYWxhaA== 16062\nIOuLpOuluA== 16063\nIHJlcXVlc3RlZA== 16064\nIHRvcnF1ZQ== 16065\nbm/Fm2Np 16066\nb3VyZWQ= 16067\nIFN0YWZm 16068\nIHN0YWlu 16069\nIEFsYW4= 16070\nIHZlcmU= 16071\nIFdpbnRlcg== 16072\nIGRlZmVjdA== 16073\naWVkeQ== 16074\nIGJlYXRz 16075\nIGjDoQ== 16076\ndW1u 16077\nb29ucw== 16078\naXR1ZGVz 16079\nIHNlaXQ= 16080\nb2x5 16081\nIHJlc2Vydg== 16082\nIGV4dHI= 16083\nIHBoeXNpY2lhbg== 16084\ndmlzb3I= 16085\nIGhhbmRmdWw= 16086\nIE5hdGlvbnM= 16087\nIOyii+ydgA== 16088\ndWNjZXNz 16089\nIHVwc3RhaXJz 16090\nIFNxdWFyZQ== 16091\nIGhlaW4= 16092\nIFNlYXNvbg== 16093\nb2xpcw== 16094\nIHByaW5jZQ== 16095\nIGRlZmVuc2l2ZQ== 16096\n570= 16097\nINC80LXRgdGC 16098\n0ZbQuQ== 16099\nINin2YY= 16100\ndW1ibGU= 16101\n6rmM7JqU 16102\nIGFzc2Fzcw== 16103\nIGNpcmN1bGFy 16104\nIHF1YWxpdGllcw== 16105\nIGhtbQ== 16106\nIGJsb3du 16107\nIExpeg== 16108\nIEt1cg== 16109\nIFNB 16110\nIGZpbmRpbmdz 16111\nIGNvbG91cnM= 16112\nIGRlbGxl 16113\nIElS 16114\nIEF0aA== 16115\nIER1Yg== 16116\nIE94 16117\nINiu 16118\nIHBvY2tldHM= 16119\nIGdyaWxs 16120\nIHN3aXRjaGluZw== 16121\nIHByZWZlcnJlZA== 16122\nIFdhbGVz 16123\nIGV4ZW1wbG8= 16124\nIGNob3BwZWQ= 16125\nIHZhY2NpbmF0aW9u 16126\nIG5ldXJv 16127\nIHNwZWNpZnk= 16128\naXZvcw== 16129\nIHNlcsOh 16130\nIHppZQ== 16131\nIOCurg== 16132\nIHJlc3VsdGluZw== 16133\nIFVnaA== 16134\nIG1lc3NlZA== 16135\nQ0Q= 16136\nIHBhYXI= 16137\nIGNvbWVy 16138\nIGNvdWNo 16139\nIEZlc3RpdmFs 16140\nIDQ5 16141\ndm91cw== 16142\nemVucw== 16143\nIEtlbm5lZHk= 16144\nIFRz 16145\nIOuztOyX 16146\nIGRlbW9uc3RyYXRpb24= 16147\nIHVudG8= 16148\nIGZydXN0cmF0aW5n 16149\nIGxhYm9yYXRvcnk= 16150\nIGVneQ== 16151\nIGJlYXV0aWZ1bGx5 16152\nIOyerOs= 16153\nIGFsZ3U= 16154\nIMO2eWxl 16155\nIFBI 16156\nIGZvcnR1bmU= 16157\nIGNsZWFuZXI= 16158\nIFJvYmlu 16159\nIHNhdXM= 16160\nIEdlbGQ= 16161\nIGthdA== 16162\nb2Jz 16163\nIG9sdXI= 16164\nIG1hdHQ= 16165\nIHF1ZXN0YQ== 16166\nIHN1Z2dlc3Rpb24= 16167\nZW5jZXI= 16168\n0L7RgdGC 16169\nIHJhZGFy 16170\nIOyeoQ== 16171\naXNoYQ== 16172\n4K6o 16173\namVz 16174\nIHZlZWw= 16175\n7IKw 16176\nIGF1dGhvcnM= 16177\n44CO 16178\ncGxhbg== 16179\nIGNvbGxhYm9yYXRpdmU= 16180\nIGluc3RpbmN0 16181\nIGZhcm1pbmc= 16182\nYXVnZQ== 16183\nRWR1 16184\nIG1lbWJlcnNoaXA= 16185\nIHNpbXVsdGFuZW91c2x5 16186\nIGJha2U= 16187\nIGvDpA== 16188\nIGxlY3R1cmVz 16189\n0YfQtdGB 16190\nIHByZW5kcmU= 16191\nIGNvbGxhcHM= 16192\nIFNheWE= 16193\nIEZ1dA== 16194\nIHlvZw== 16195\nIFJhdGhlcg== 16196\n2LHZig== 16197\nIGNhbXBz 16198\n0L7Qu9C+0LQ= 16199\nIHNpbXVsYXRpb24= 16200\nIE1haw== 16201\nTGF1Z2hz 16202\nIGdyZXk= 16203\nIHNlbnRlbmNlcw== 16204\neWVu 16205\nIFVubGVzcw== 16206\nSmU= 16207\nIFNhdGFu 16208\nINGC0LDQutC20LU= 16209\nIE5B 16210\nIGJyb24= 16211\nID9d 16212\nIHNvdWxz 16213\nIGxpZ2h0bmluZw== 16214\nIGltYWdpbmVk 16215\nIGN6eWxp 16216\ncHNpbG9u 16217\nZXR0YQ== 16218\nIGJlbGlldmluZw== 16219\nIHN0cm9uZ2VzdA== 16220\nIENPTg== 16221\nIHF1ZWxxdWVz 16222\nIGltbWlncmFudHM= 16223\nIHdhbGxldA== 16224\nIEplcnNleQ== 16225\nIGltcGxpY2F0aW9ucw== 16226\nIGZvcmI= 16227\n44CP 16228\nIHVuYmVsaWV2YWJsZQ== 16229\n2KfYoQ== 16230\nIG9wZXJhdGlvbmFs 16231\nw7xz 16232\nIEdN 16233\nIOq3uOufsOuNsA== 16234\nIGdyYWNpYXM= 16235\nIGVudGVuZA== 16236\nIFJlZ2FyZA== 16237\ncm9i 16238\nINGC0LXRhQ== 16239\n6I8= 16240\nIFJldm9sdXRpb24= 16241\nIHdhYXI= 16242\nIEJpeg== 16243\ndGhlbGVzcw== 16244\nIHNwb25zb3JlZA== 16245\ncXVpZXI= 16246\nIOydvOs= 16247\nIHRlaw== 16248\nIOuQoA== 16249\naWdrZWl0 16250\nIEx1Y2s= 16251\nIENlcnRhaW5seQ== 16252\nIHRvbGw= 16253\nINC90LjRh9C10LPQvg== 16254\nIE1vbmV5 16255\nINGB0YLQvtGA 16256\nIERvdWJsZQ== 16257\nIFdvbGY= 16258\nIGNodW5r 16259\nzqzOvQ== 16260\naXTDqXM= 16261\nb25pbmc= 16262\nTWFy 16263\nIGdyYW5kZXM= 16264\nIGNvbGxlY3Rpb25z 16265\nIEV1cm9wYQ== 16266\nINCw0YA= 16267\nIOKAi+KAi+KAiw== 16268\nIOq3uOufrOuptA== 16269\nINC+0LHRig== 16270\nIOyLnOqwhA== 16271\nIEN1c3RvbQ== 16272\nIOyymA== 16273\n0ZbQu9GM 16274\nIGluZGl2aWR1YWxseQ== 16275\n7Zc= 16276\nIGRvemVu 16277\nIG93ZQ== 16278\nIFZpY3Rvcmlh 16279\nIGJlZXQ= 16280\ndXJi 16281\nIGFuYWxvZw== 16282\nacOnw6Nv 16283\ngpw= 16284\nc29ldmVy 16285\nIG1vZG8= 16286\nIHN1YnNjcmliZWQ= 16287\n7J6s 16288\nIGVudGl0aWVz 16289\nIGNsb3NldA== 16290\nIHJlc3BvbmRpbmc= 16291\nIHByaW50ZXI= 16292\nIFN0ZXBoYW4= 16293\nIGJ5xYI= 16294\nIERvbQ== 16295\nIEZlcm4= 16296\nIFBpZXI= 16297\nIHdpxJlj 16298\nIGhlbmNl 16299\nIG1vZHVsZXM= 16300\nIOuUsQ== 16301\nIERhbm55 16302\nINGB0LXQsdC1 16303\nIHZhZA== 16304\nIOyXhA== 16305\nIHNvdXM= 16306\nIHNwaGVyZQ== 16307\nQlk= 16308\nIFBlZA== 16309\naWduZWQ= 16310\nIHdoZWF0 16311\nIHVuZGVycw== 16312\nIGV2b2x2ZQ== 16313\nIGRlY2xhcg== 16314\nIGxpZ2h0bHk= 16315\nIGlkZW50aWZ5aW5n 16316\nIGxlZ2VuZGFyeQ== 16317\nIGdlbnVpbmU= 16318\nIGdyaW5k 16319\nIFVuZQ== 16320\nZ2ViZW4= 16321\nIGJpY3k= 16322\nIGp1bXBz 16323\nIHByb3ZpbmNl 16324\nemnEmQ== 16325\nINeQ16DXmQ== 16326\nIGhvYw== 16327\nINCx0Ls= 16328\nIEdyYWQ= 16329\nIHJldmVuZ2U= 16330\nINin2YTYqg== 16331\nb29o 16332\n0LDRhtC40Lg= 16333\nIGVsZWN0cm8= 16334\nIOuQkA== 16335\nIGZhbHM= 16336\ncmllbA== 16337\nb2tlcg== 16338\nIEV4Y2VsbGVudA== 16339\nIE1vcmdhbg== 16340\nIGJyaWNr 16341\nIHN1YnN0YW50aWFs 16342\nIHBvbGx1dGlvbg== 16343\nIFTDvHI= 16344\nIEV2ZXQ= 16345\nIGx1bmc= 16346\n15nXqQ== 16347\nb21tZXM= 16348\nIHJlYWxpemluZw== 16349\nIGh1bWJsZQ== 16350\nIExvY2s= 16351\nIGJvZA== 16352\nIOyWuA== 16353\nIHBlZXJz 16354\ndXp6 16355\nIGVtYmVkZGVk 16356\nIGNsYXJv 16357\nIGFnZ3JlZw== 16358\nIGVtcGxveWVycw== 16359\nIFJhag== 16360\nIFlp 16361\nIGpldQ== 16362\nYXRlcnM= 16363\nIHN0cmlrZXM= 16364\nbm9z 16365\nYXV0cmVz 16366\nZHI= 16367\nb3BoZXI= 16368\nIEFwcGFyZW50bHk= 16369\n7ZiE 16370\nIGluZmFudA== 16371\n2KfYqA== 16372\n0YLRiw== 16373\n7Zs= 16374\n2q8= 16375\nIHJlZGVz 16376\nYWNhxJ/EsW0= 16377\nIERBVklE 16378\nIENoaWNrZW4= 16379\nIHBlcnNwZWN0aXZlcw== 16380\nIHZpZXdlcg== 16381\nIHNoYXI= 16382\nINC/0YDQvtC40Lc= 16383\nbGlndA== 16384\nZXJvcw== 16385\naXRhYmxl 16386\n0LjQu9C+0YHRjA== 16387\nIGRpZsOt 16388\ntOuNsA== 16389\nIHJldGlyZWQ= 16390\nIHRoYXRz 16391\nemVuaWU= 16392\nYmVpdGVu 16393\nIG15Y2tldA== 16394\nIFJhYg== 16395\nIGluZmxhbW0= 16396\n7LCu 16397\nIGR1bQ== 16398\nIGRhZGR5 16399\nIGltbWVycw== 16400\nIHBsYXlsaXN0 16401\n4K+G 16402\nIHRyYXVt 16403\nIHJlZnVzZQ== 16404\nc3RlcA== 16405\n4K6a 16406\nY3Vw 16407\nIHBvcHM= 16408\ncmltaW4= 16409\nYXnEsW0= 16410\nIGFsZA== 16411\nIHVubmVjZXNz 16412\nIGRhaA== 16413\nIElyaXNo 16414\nIGNvbXBy 16415\nbGHFnw== 16416\nVFA= 16417\nIHRyYW5zbGF0ZWQ= 16418\nU2M= 16419\nY2XEn2lt 16420\ntJA= 16421\nIGRyZWk= 16422\nINC70Y7QtNC10Lk= 16423\nIHF1aWVybw== 16424\nIGhlbGU= 16425\nemxpY2g= 16426\nIGFwcGxlcw== 16427\nIGRpc3RyaWN0cw== 16428\nIGNyZWRpdHM= 16429\nIGFzcA== 16430\nIOuLqA== 16431\nb3JhbA== 16432\nIHN0ZXBwaW5n 16433\nIFZh 16434\nIGdhaW5z 16435\nNjU= 16436\nIG51ZXN0cmE= 16437\nZWRheQ== 16438\nYXNzYWRvcg== 16439\nIExpbmQ= 16440\nIGNyb3Bz 16441\nY2llbmRv 16442\naWd1ZQ== 16443\nIGJhbmE= 16444\nQW0= 16445\nIHBlbnQ= 16446\nIGFkZGljdGlvbg== 16447\nIHBhY2thZ2luZw== 16448\nw6Rk 16449\nqqg= 16450\nIHBlcnF1w6g= 16451\nIGNhbXBhaWducw== 16452\nIHN0ZWVw 16453\nIG5ldWU= 16454\nIGVtYmFycmFzc2Vk 16455\nIGRpc3RpbmN0aW9u 16456\naXR6ZXI= 16457\nIHJlZ2lzdHJhdGlvbg== 16458\nIGxsYW0= 16459\nIEFsbWlnaHR5 16460\nbGllc3Q= 16461\nIHV6 16462\nbmFr 16463\n57o= 16464\nIHRlcmF6 16465\naWFtZW50ZQ== 16466\nIHRyYW5zYWN0aW9ucw== 16467\nIGPDtHQ= 16468\nIHN3aXRjaGVk 16469\nIGNvbWJv 16470\nIHByYXllcnM= 16471\nIGludGVybnNoaXA= 16472\nIGFkZHJlc3Nlcw== 16473\nIGNoYXJpdHk= 16474\nIFdPTw== 16475\nIGJhaXQ= 16476\nIO+/vQ== 16477\nIGZpY2E= 16478\nIFR5bGVy 16479\nYXJ1 16480\nIGF0b21z 16481\nIExldmVs 16482\nINC/0L7RgtC+0Lw= 16483\nIGZhbWU= 16484\ndWxr 16485\nIHRlYWNoZXM= 16486\nIHJlYnVpbGQ= 16487\n0LXQtNGM 16488\nIEluZG9uZXNpYQ== 16489\ndXNoaQ== 16490\nIFNob3J0 16491\nIGVuc3VyaW5n 16492\nZnM= 16493\nZWxl 16494\nIG1hcmdpbmFs 16495\nIGNvbmNsdWRl 16496\nYW10 16497\nIHZlcmlmeQ== 16498\nIE1jRG9uYWxk 16499\nIHNrYWw= 16500\nIHJlY29uc3Q= 16501\nIE1hbm4= 16502\nIGJhc2VtZW50 16503\nIHRyYW5zZm9ybWVk 16504\nIG9jY2FzaW9uYWxseQ== 16505\nem9uZQ== 16506\nIERhbnM= 16507\nINC60LDQutC+0Lk= 16508\nIGRpYWdub3NlZA== 16509\nIM+EzrE= 16510\nIGNvbW1hbmRz 16511\nIHByZXNpZGVudGlhbA== 16512\nIGFiYg== 16513\nIGJyYWNrZXQ= 16514\nIExlbQ== 16515\nw6VuZw== 16516\nIGZhdm9yaXRlcw== 16517\nIHJldm9s 16518\nIO2KuQ== 16519\nIGhhcmFzcw== 16520\n6YU= 16521\nIGNsZWFucw== 16522\nc3TDpG5k 16523\nIGtub2NrZWQ= 16524\nIHBlb3BsZXM= 16525\nIG11c2ljaWFucw== 16526\nIG11dHVhbA== 16527\nIENvbGQ= 16528\nODg= 16529\nemVq 16530\nYXRpZQ== 16531\nIEhvbm9y 16532\nIG9ic2Vzc2Vk 16533\nIE1VU0lD 16534\nIEJyZWFr 16535\nw7puZw== 16536\nIG1vZGlmeQ== 16537\nIHPDtnlsZQ== 16538\nINee15Q= 16539\nIE9ubGluZQ== 16540\nZm8= 16541\nIE1pbGxlcg== 16542\nIGxpa2luZw== 16543\nIGluaGFi 16544\nIGdyYXRpdHVkZQ== 16545\nIEpvdXJuYWw= 16546\nYXJuZXNz 16547\nSm9obg== 16548\nIEdpdA== 16549\nIHNpbmNlcmU= 16550\nIFNjaQ== 16551\nIEVsaQ== 16552\nIHN5bWJvbHM= 16553\nIG1hbnVhbGx5 16554\nzrXPgg== 16555\nINCy0ZbQtA== 16556\nIEZhdA== 16557\nIGxhYmVscw== 16558\nIHNvcGhpc3RpY2F0ZWQ= 16559\ndW1wcw== 16560\nIHJlbGVhc2Vz 16561\nIDQ3 16562\nIE9N 16563\n6rCA6w== 16564\nIEJpZW4= 16565\nIFJlZg== 16566\nIFN0YQ== 16567\nIEVnZw== 16568\nIGluZGljYXRvcg== 16569\ncHNvbg== 16570\nIG5hc8SxbA== 16571\nUmlnaHQ= 16572\nIGNvbnZleQ== 16573\nIGtub3Q= 16574\nIGNvbm5lY3Rz 16575\ndWxhcw== 16576\nIHByZWNlZA== 16577\nIGluZXF1YWxpdHk= 16578\nYW1pZW50bw== 16579\nIHJlcGx5 16580\nT1k= 16581\nIGRpc21pc3M= 16582\nIOuQnA== 16583\nINGF0L7RgNC+0YjQvg== 16584\nIG3DqWQ= 16585\nIHJhbmRvbWx5 16586\nIE9udA== 16587\ndWFyZA== 16588\nIHB1bGxz 16589\nINGC0LXQv9C10YDRjA== 16590\nIE5lZWQ= 16591\nIFNvZnQ= 16592\nIHN0cmVuZ3Rocw== 16593\nIGdvZWQ= 16594\ndW1lbg== 16595\nIO2OuA== 16596\nINC00L7QsQ== 16597\nIGNsYXJpdHk= 16598\nIEFp 16599\nIGJhbGxvb24= 16600\nIFBhbmQ= 16601\nIOyVhOuL 16602\nIHNoaW55 16603\nIHNtYWxsZXN0 16604\nb25pYQ== 16605\naGlsbA== 16606\nb3Rpbmc= 16607\nIGVpbmc= 16608\nIG1lcmVseQ== 16609\nIHNldXM= 16610\nINC90LXQvw== 16611\nIO2GtQ== 16612\nIGd1aWRlcw== 16613\nIHNwZWNpYWxpc3Q= 16614\nIHN0ZWFr 16615\nIG1pZ3JhdGlvbg== 16616\ncXVlbGU= 16617\nIHJ1aW5lZA== 16618\nIHB1cHA= 16619\nIGtlbmQ= 16620\nYW5nYW4= 16621\nIHBhbG0= 16622\nIHVuZmFpcg== 16623\nIHpt 16624\nIERW 16625\nY2hlc3Rlcg== 16626\n0LjRjg== 16627\nIG9vaA== 16628\nZXJn 16629\nQVRI 16630\nsKk= 16631\ncmlzb24= 16632\nIGludm9sdmluZw== 16633\nIHBhcnRseQ== 16634\nYW7Dp2Fpcw== 16635\nIHZvdw== 16636\nIHByb21pbmVudA== 16637\nIGNyeXN0 16638\naWJh 16639\nIGRlc2VydmVz 16640\nIG92ZXJ0 16641\nIHNlbnNpdA== 16642\nIFdoZQ== 16643\nIHRpZ2h0ZW4= 16644\nIGludGltaWQ= 16645\nIGFsaW1lbnQ= 16646\nd2lsbA== 16647\nIHN0cmVuZ3RoZW4= 16648\nIFRhbg== 16649\nb25p 16650\nIE11bg== 16651\nIHByb3Bo 16652\nIHJlaGVhcnM= 16653\nIEtsZQ== 16654\nIHZlY2Vz 16655\nIHdvbmRlcmVk 16656\nb2tp 16657\nIHNlbnNlcw== 16658\ntOyL 16659\nxrDhu5s= 16660\nIMiZaQ== 16661\nIG11Y2hvcw== 16662\nIHdhdGNoZXM= 16663\nb3J0dW5hdGU= 16664\nIEp1YW4= 16665\n7J6W7JWE 16666\n0YDQtQ== 16667\nZWk= 16668\naW9uZW4= 16669\nIGV4cGVyaW1lbnRhbA== 16670\nIGRhdWdodGVycw== 16671\n4Lib 16672\nIG1lbnRhbGx5 16673\nYmVjY2E= 16674\nYXdhcmU= 16675\n7ISd 16676\nIHdoYXRzb2V2ZXI= 16677\nIGVuYWJsZXM= 16678\nIExvdw== 16679\nb2lk 16680\n4LiK 16681\nw7Nk 16682\n2Lo= 16683\nIGNvbnN0cnVjdGVk 16684\nIExhZGllcw== 16685\nIGFjY3VzZWQ= 16686\nINCw0L0= 16687\nRGFu 16688\nIHNwYXdu 16689\nIGNvbnRhaW5lcnM= 16690\nIGFydGlzdGlj 16691\nxLFw 16692\nIGRpc2Ns 16693\nIGF1dHJlcw== 16694\naW5hcw== 16695\nIE5hdGlvbg== 16696\nIG5hZw== 16697\nYmVhbg== 16698\nd2hl 16699\nnOuPhA== 16700\nIFNlb3Vs 16701\nIO2PrA== 16702\nIE5pY2g= 16703\nIGNvbXBsZW1lbnQ= 16704\nIGludGVydmVu 16705\nIE1vZGVs 16706\nIE9yYW5nZQ== 16707\nbmFtb24= 16708\nIGNhbGN1bGF0aW9u 16709\nc2Vl 16710\nIHVzdGVkZXM= 16711\nIGxlYg== 16712\nIGRvY3Q= 16713\n0ZbQvQ== 16714\nIGZvc3Rlcg== 16715\nIGVsYXN0aWM= 16716\nIEFoaA== 16717\nIGFjZQ== 16718\nIFBpbms= 16719\nIEplZw== 16720\nIGRlZXI= 16721\nc2lz 16722\nIGpha28= 16723\nIEVtbWE= 16724\n0YHRgtCy0LXQvdC90L4= 16725\nIHBvcnRyYWl0 16726\nIG1ha2Vy 16727\nIGF1bWVudA== 16728\n0YDQvtCx 16729\nIGFpcnBsYW5l 16730\nIHRyYW5zcGFyZW5jeQ== 16731\nIGFkanVzdG1lbnQ= 16732\nIENEQw== 16733\nw6dvbg== 16734\nIHVwbG9hZGVk 16735\nINC00LXQudGB0YLQsg== 16736\nINCz0L7RgtC+0LI= 16737\nIGl0ZXI= 16738\nIGN1cnNl 16739\nw7Ru 16740\nbWVyY2U= 16741\nYXJhbg== 16742\nIGxlYWs= 16743\nIGFic2VuY2U= 16744\n0YHQutC40Lk= 16745\nIHJlYWRlcnM= 16746\nYWxlcg== 16747\nIGJlbmVhdGg= 16748\nYW5nbw== 16749\naGV0aWM= 16750\nIGZpbm5z 16751\nIHBvb3A= 16752\nIGR1cGxpYw== 16753\nSGk= 16754\naWdz 16755\nb2xvZ2ljYWxseQ== 16756\nb3Bw 16757\nIGRpemVy 16758\nIEFsbGVu 16759\nIGdsaQ== 16760\nIGFjY2VsZXJhdGlvbg== 16761\nIHZpdGFtaW4= 16762\ndsOk 16763\nIEFjY2Vzcw== 16764\n4K6Z 16765\ncsOhcw== 16766\nIGFwcHJlY2lhdGVk 16767\nIG5haA== 16768\nIHBvc3Rlcg== 16769\nIHRhbGU= 16770\nIGhpZ2hsaWdodGVk 16771\nxbxlbGk= 16772\nIGJsb2NrY2hhaW4= 16773\nIG1pY3Jvdw== 16774\nIGNpbmVtYQ== 16775\nIENoYW5n 16776\nIFNlYXJjaA== 16777\ndXN0ZXJz 16778\nIFplcm8= 16779\nIERpdmlzaW9u 16780\n0YDQsNGB 16781\nIHNjYXJl 16782\nIGplbGx5 16783\nIEFkbWluaXN0cmF0aW9u 16784\nU08= 16785\nIGxpbmVk 16786\nIOqwhA== 16787\nIGdlYmVu 16788\nIHNvZGE= 16789\nIHdpbm5lcnM= 16790\ns7w= 16791\n2ZI= 16792\nIEFtYg== 16793\n5ZQ= 16794\nIHBlZw== 16795\nNDM= 16796\nIHJhdXM= 16797\nIHJld2FyZHM= 16798\nIGluY2x1cw== 16799\nIGhpZ2h3YXk= 16800\nIGhhaA== 16801\nIG11bHRpcGxpZWQ= 16802\nIHPhur0= 16803\nIGRpc2NpcGxlcw== 16804\nIG5pbmc= 16805\nIGRyZXNzaW5n 16806\nIGF0dHJpYnV0ZXM= 16807\nIE1vc2M= 16808\nIEdyZWVjZQ== 16809\nIHNlaw== 16810\nIExlYXJu 16811\nIGp1cw== 16812\ncmVuZHJl 16813\nIHBlcnNvbm5l 16814\ncGxldGU= 16815\nIHBsYWNpbmc= 16816\nIGx1ZWdv 16817\naWxsYW5jZQ== 16818\nINC+0LHRiQ== 16819\nIHByb3Zpc2lvbg== 16820\nIGxpb24= 16821\ndHJh 16822\nYm9hcmRz 16823\nIGJlaGF2aW91cg== 16824\naGV5 16825\nIHN1YnNjcmlwdGlvbg== 16826\nIHByb3RhZ29u 16827\nIHZhcmE= 16828\nIMWfdQ== 16829\nIGhhaGE= 16830\nIHRlYXNwb29u 16831\n5p8= 16832\nYXZvaXI= 16833\nIGNyeXB0bw== 16834\nINGB0YLQsNGA 16835\nIFN0b3Jl 16836\nYWJz 16837\nIFN0dWRlbnRz 16838\nIGxhdW5k 16839\naW50bw== 16840\nIGFwcHJvYWNoZWQ= 16841\nsJw= 16842\n0YPRjtGJ 16843\nIExhYm9y 16844\nb3Rlcw== 16845\naWF0cmlj 16846\nIGdyb8Of 16847\ndXRpdmU= 16848\nINC40LQ= 16849\nIEdpYg== 16850\nIHBsYWNlbWVudA== 16851\nIGRpZsOtY2ls 16852\nIGZyb2c= 16853\nINCy0YHQtdGF 16854\nIEpy 16855\nYXplZA== 16856\n0YPRiQ== 16857\nIOq8 16858\nZnJhbWU= 16859\n0LDQtdGI0Yw= 16860\nIGxvY2tkb3du 16861\nIG1lZGk= 16862\nINeU157X 16863\n0LXQvdC40Lk= 16864\nZW1hbGU= 16865\n7KKF 16866\nYXRlcmFs 16867\nIGRpc3RhbnQ= 16868\nIGJlYXJz 16869\nIGpvdXJuYWxpc3Q= 16870\nIE1hcnNoYWxs 16871\nIElobmVu 16872\ndWV0b290aA== 16873\nYmFn 16874\nIMSRw6M= 16875\nIEhpZ2huZXNz 16876\nIOywjQ== 16877\n0LjQutCw 16878\nIFd1 16879\nIEZyYW4= 16880\nIHBlbmc= 16881\nIGZvbg== 16882\nIGh5cG90aGVzaXM= 16883\nINGA0YM= 16884\nIGx5 16885\n15o= 16886\n7JuU 16887\nIFJhZGlv 16888\n4Lie 16889\nRGF2 16890\nIGVtYmFycmFzc2luZw== 16891\nIOyeiOyWtA== 16892\nIGNhc3Rpbmc= 16893\nIGNhZ2U= 16894\nIFBzeWNo 16895\nIOydvOuLqA== 16896\nIMW+ 16897\naW1i 16898\nIGRpcmVjdG9ycw== 16899\nU0g= 16900\nIM+EzrfOvQ== 16901\n4buBdQ== 16902\nIGtvbnXFnw== 16903\nIG9wdGlvbmFs 16904\ncXVhcnRlcnM= 16905\naWtlcg== 16906\nIFNhbnQ= 16907\nIHZlcnNlcw== 16908\n67aA 16909\nIG9sYXI= 16910\nIM+H 16911\nIM6zzrnOsQ== 16912\nIEltbQ== 16913\nIGNvbnRyb3ZlcnNpYWw= 16914\nIGVyc3Rlbg== 16915\nIHJlY2lw 16916\nIENocmlzdGlhbml0eQ== 16917\nIOq0nA== 16918\nb3Jkb24= 16919\n15XXqQ== 16920\nIHNsYXNo 16921\nIFBm 16922\n0YPQtNGM 16923\n15XXnQ== 16924\nIFBlcnJ5 16925\nIG1hbXk= 16926\nIGJhY2tncm91bmRz 16927\nIOCujuCuqQ== 16928\nIHBlbmRhbnQ= 16929\nIENvbHVtYmlh 16930\nIGludmVyc2U= 16931\nINGH0LXRgNC10Lc= 16932\nIHN2 16933\nIGRpZ2dpbmc= 16934\nNDE= 16935\nY2hlbQ== 16936\nIG5hdmlnYXRpb24= 16937\nIFNoaW4= 16938\nIEZyb250 16939\nUEQ= 16940\nIGJlYXJpbmc= 16941\nIFdhc3Nlcg== 16942\nIHdheA== 16943\nIENIUklT 16944\nY2hpbmc= 16945\nIHByZXNzZWQ= 16946\nRWw= 16947\nIERhbA== 16948\nb25zaW4= 16949\nIGJpbmRpbmc= 16950\n0YHQutC+0Lk= 16951\ncG9vbnM= 16952\nIG1vY2s= 16953\nYXJlc3Q= 16954\n0LrRgNCw 16955\nTU0= 16956\nIGNvcnJ1cHQ= 16957\nc3Rvcm0= 16958\nIHJlZnJlcw== 16959\nIENvYWNo 16960\nbGzDpA== 16961\nIFRISVM= 16962\nIHBhcmFn 16963\nIOyTsA== 16964\ncG9vbA== 16965\nIGJpbGxpb25z 16966\nIOq5gA== 16967\nZ3JvdXA= 16968\nIHdlbGNvbWluZw== 16969\nY2VsbGVuY2U= 16970\nIER1a2U= 16971\n6ri0 16972\nIHByaW1lcmE= 16973\n7KC4 16974\nIHBvbmQ= 16975\nIHN0YXR1ZQ== 16976\nIOq1rOs= 16977\nIGhhdGNo 16978\nIGluc3RydW1lbnRhbA== 16979\nIHJlc2lkZW50aWFs 16980\n7Luk 16981\nIGFjY2VwdGluZw== 16982\nb3NoaQ== 16983\nZGF0ZQ== 16984\nIOyUqA== 16985\nIHBsYW50ZWQ= 16986\nIGpva2luZw== 16987\nIOyEnA== 16988\nIGhhdGVk 16989\nINGA0LDRgdGB0Lo= 16990\nIHNsZXB0 16991\nIHBhY2thZ2Vz 16992\nIGlzbGFuZHM= 16993\nZXNlbg== 16994\nxJ/EsQ== 16995\nIGRpYWdvbg== 16996\nIE9zYw== 16997\nIG1lc2g= 16998\nIHNjYWxlcw== 16999\nYXJpdHk= 17000\nIERlZmVuc2U= 17001\nIExld2lz 17002\nINGB0LXQs9C+0LTQvdGP 17003\nIGZsaWVz 17004\ndWluZWx5 17005\nIENvbnNpZGVy 17006\nIHN0YXJr 17007\naGV3 17008\nIEFzw60= 17009\ns7Tr 17010\nIHByb3Bvc2U= 17011\nIO2VmOuptA== 17012\nb2Rv 17013\nIE5vcm1hbGx5 17014\nIGhlZWZ0 17015\nIEhhcnJpcw== 17016\nZ3Jv 17017\nIEJsb29k 17018\nYmFzZQ== 17019\nIGlPUw== 17020\nIHRvdWNoZXM= 17021\nIGluc3Bpcg== 17022\nINeT 17023\nIGJpbmFyeQ== 17024\nIOy2lA== 17025\nIHNlcmlhbA== 17026\nIGlvbg== 17027\nIHVuZW1wbG95bWVudA== 17028\nIG9kZHM= 17029\nIEZhYg== 17030\nIEZCSQ== 17031\nQlJVTg== 17032\nIHdlaWdodHM= 17033\nzr3Ovw== 17034\nYXRpbGU= 17035\nIG51cnNlcw== 17036\nIGludm9sdmVtZW50 17037\nIO2UvA== 17038\nIGdvdmVybmFuY2U= 17039\nIOKCrA== 17040\n0YDRg9C/ 17041\naWVycmE= 17042\n7ZiV 17043\nIEplcnJ5 17044\nIGJlYXJk 17045\nIHNhbHZhdGlvbg== 17046\nIEFsb25n 17047\nZ2VudGxl 17048\nIEtp 17049\nYm9s 17050\nIFBsYXQ= 17051\nIGhhc2h0 17052\nIHdhcmU= 17053\nIHBhcnRpZQ== 17054\neWN6 17055\nIGludHI= 17056\nRmlo 17057\nbmVudA== 17058\nIGNoZWF0 17059\naWxlbg== 17060\nIOuv 17061\nb3JpZQ== 17062\nIGbDoWNpbA== 17063\nZXRyaWM= 17064\nIGFmZmVjdGluZw== 17065\ndW5jaWF0aW9u 17066\nIGFmZmFpcnM= 17067\nIGJlZQ== 17068\nIHZpZXdpbmc= 17069\nIG9yYW5n 17070\nIExhbg== 17071\nINCh0YI= 17072\nIE1lcw== 17073\ng4E= 17074\nZXJpZQ== 17075\nIGVzcGE= 17076\nIGludGVycHJl 17077\nIHBvc3Nlc3M= 17078\nIHB1cmVseQ== 17079\ncml0bw== 17080\nZm91bmQ= 17081\nYXNtYQ== 17082\n7KCB7J24 17083\nIGV4YW1pbmU= 17084\nINGD0Lw= 17085\nIGJlc2No 17086\nIFRvbW9ycm93 17087\nIEJsb2Nr 17088\nIHZhcmlhbnQ= 17089\nIHByZWZlcmVuY2U= 17090\nIGNvYWNoZXM= 17091\nIG1lZGljYXRpb25z 17092\nIO2YhA== 17093\nIGVtcGlyZQ== 17094\n64Sk 17095\nIElsbGlub2lz 17096\nIGNyaXNweQ== 17097\nIHRow6w= 17098\nIGJlZXM= 17099\nNzc= 17100\nIGdsb3c= 17101\n6Lo= 17102\nIFN0dWRpZXM= 17103\nIENoYWxsZW5nZQ== 17104\nIHVubGlrZWx5 17105\n0Kc= 17106\nxLF5b3JzdW4= 17107\nRElF 17108\nIG1pbmltaXpl 17109\naXphcmQ= 17110\nIMO6bg== 17111\nIGVuY29udHJhcg== 17112\nIEtpbGw= 17113\n5bs= 17114\nIHZhbmlsbGE= 17115\nIEdyYW50 17116\nIEdU 17117\nc2Vh 17118\nIHNvdWdodA== 17119\n0LLQvtC0 17120\nIG7DpG0= 17121\nIEF1bnQ= 17122\nT1dO 17123\nIHB1bXBraW4= 17124\nc3RlbGxlbg== 17125\nIHJhZw== 17126\n0LXQs9C00LA= 17127\nIHN0b3J5dA== 17128\nIGZvcnVt 17129\nIGVzdGFiYQ== 17130\ndWNoZQ== 17131\nIGNvbmdyZXNz 17132\nIFJleQ== 17133\nIGRyYW1hdGljYWxseQ== 17134\nIFNwb3J0 17135\nIFllbGxvdw== 17136\nIOqzhOyGjQ== 17137\nIGRpc2d1c3Rpbmc= 17138\nIFJlY2VudA== 17139\nIGFjcXVpcmVk 17140\nIGNhYmxlcw== 17141\nZGlu 17142\nIHZpc3Rv 17143\nIGNvbW11bmljYXRpbmc= 17144\n0YHRgtCw0LLQu9GP 17145\n0LXRgdGC0L4= 17146\nIHLDqWc= 17147\nIHNvY2tz 17148\nIHByb2Nlcw== 17149\nYmVjYXVzZQ== 17150\nIHV0dGVy 17151\nIGNvbG9jYXI= 17152\nIG5ld2VzdA== 17153\nIGdyYW1t 17154\nIHNoaWZ0aW5n 17155\nIGNhcnJpZXI= 17156\nINGB0LrQvtGA 17157\nIFNjaHc= 17158\nIGV4ZWN1dGVk 17159\nIG1haW50YWluZWQ= 17160\nIM+G 17161\nIE1vc2Vz 17162\nIGRpc3Nl 17163\nIGhvcnI= 17164\n44Cc 17165\nIHJhbGx5 17166\nIGFsbGVt 17167\nIEV2ZW50dWFsbHk= 17168\nIGRpeW9y 17169\nbHZhbmlh 17170\nIHNjaG5lbGw= 17171\nIOqzvA== 17172\nIOunpA== 17173\nIHN0cnVnZ2xlcw== 17174\nbGF0ZQ== 17175\nIGNsYXJpZnk= 17176\nw6ltZW50 17177\nIG11bHRpcGxpYw== 17178\n0LjQsdC+ 17179\nIGpvdXJu 17180\nIGZyYWdy 17181\nIHN1cnByaXNpbmdseQ== 17182\nIGRlc3BlcmF0ZQ== 17183\nNTI= 17184\nIHN1bA== 17185\nIFJlYWQ= 17186\nIEZyaWVk 17187\nIG1vbmQ= 17188\nd29v 17189\nIG9yZ2FuaXppbmc= 17190\nIFNvb24= 17191\nINCy0L7Qv9GA0L7RgQ== 17192\nIE51cg== 17193\nINCX0LQ= 17194\nIHNwaWRlcg== 17195\n0LXRgdGP 17196\nIHR1dG9yaWFscw== 17197\nIG51dHJpZW50cw== 17198\nb3Jlcg== 17199\nIGNvZWZmaWNpZW50 17200\nIGFycmFuZ2VtZW50 17201\nIHByaWNpbmc= 17202\nbmFu 17203\neXU= 17204\nQkw= 17205\nIHRyaWJl 17206\nIEhvd2FyZA== 17207\ndW5rcw== 17208\nIG5ld2Vy 17209\nIHByb3Zpbg== 17210\nIHByZWRpY3Rpb24= 17211\naG9z 17212\nIG9sc3Vu 17213\nIEFyb3VuZA== 17214\nIHZpZXI= 17215\nINGB0YLQvtGA0L7QvQ== 17216\nIHZhbGxleQ== 17217\nIEVsYQ== 17218\naWZp 17219\nIGdhbGF4eQ== 17220\nIHRyYW5xdQ== 17221\nIGFkdmVycw== 17222\nIFRlbXBsZQ== 17223\naWZmcw== 17224\naWdlbmNl 17225\nIGvDtm5udGU= 17226\nIMSRw7M= 17227\nRGlk 17228\nIHBob3RvZ3JhcGhz 17229\nIEFXUw== 17230\n0YbQuNGP 17231\nIGd1YXJkcw== 17232\nIGFwcG9pbnRlZA== 17233\nIEdpbA== 17234\nINC80L7QvA== 17235\nIGNvZA== 17236\nIFVubGlrZQ== 17237\nIGV2ZW5seQ== 17238\naXNjb25zaW4= 17239\nIGVzdG91 17240\nIG1uaWU= 17241\nIEV4ZWM= 17242\nIE1W 17243\nIEVpbmU= 17244\nIFJvZ2Vy 17245\nIEZhYw== 17246\nIExpc3Q= 17247\nIGZ1ZXI= 17248\n0LDQtdGC0LU= 17249\nb21lZA== 17250\nIGF0dHJhY3Rpb24= 17251\nIHRlcnJhaW4= 17252\nIERyb3A= 17253\nIGNvcnBvcmF0aW9ucw== 17254\nIHNjaWVuY2Vz 17255\nIHRocm9uZQ== 17256\nIGFq 17257\nIFJvdA== 17258\nIHN1cHBvcnRlcnM= 17259\nIEJlcmU= 17260\nSGVyZQ== 17261\nIGRpZmVyZW50ZXM= 17262\nIHNpZ25pZmljYW5jZQ== 17263\nz4POtw== 17264\nIGNsYW1w 17265\nIOuMgOs= 17266\nIGZhYnVsb3Vz 17267\ncmV6 17268\nIGFzc3VtcHRpb25z 17269\ndXRoZXI= 17270\nd2lk 17271\ncG90 17272\nIHlhbg== 17273\ndWxpbg== 17274\n0YDRi9Cy 17275\nIFNsb3c= 17276\nIFBlbm5zeQ== 17277\nIO2VtOyEnA== 17278\nIG1laW8= 17279\nIHdlYWx0aHk= 17280\nIEVpZ2h0 17281\nIHB1bHNl 17282\nIGZyaWN0aW9u 17283\naWRpdHk= 17284\nIEhvbGw= 17285\naXlvcnVt 17286\nIHNvdW5kZWQ= 17287\nIENhcnI= 17288\nIGZvcms= 17289\n4pg= 17290\nIFBB 17291\nIGNvbnNwaXI= 17292\nIGNvZGluZw== 17293\ncnQ= 17294\nIFR5cA== 17295\nIOyWkQ== 17296\nINC/0L7Qsw== 17297\nIG1pc2Vy 17298\nINGB0LzQvtGC0YA= 17299\nIFN3ZWRlbg== 17300\nIG9sYXJhaw== 17301\nIFpoYW5n 17302\nIENoaQ== 17303\nIFRpdGFu 17304\nIHNjcmVlbmluZw== 17305\nIFNwaWRlcg== 17306\nIMWeaW1kaQ== 17307\nIG9ic3RhY2xlcw== 17308\nbGFyYQ== 17309\nIGNoYWxsZW5nZWQ= 17310\ncHNl 17311\nVE9O 17312\n4bul 17313\nIFBp 17314\nIGxhZ2k= 17315\naWV1cnM= 17316\nIGh1cnRpbmc= 17317\nIG5lZ2xlY3Q= 17318\nIGdlbmVyYXRpbmc= 17319\nIHlvdW5nZXN0 17320\nIGF1ZGl0 17321\nINGA0LXQtw== 17322\nz4HOrA== 17323\nIGRvbmF0ZQ== 17324\nIFBERg== 17325\nIHZpc2l0cw== 17326\nIGNydWlzZQ== 17327\nUFA= 17328\nYXNlcg== 17329\nIHdzcA== 17330\nYmFja3M= 17331\naXZhbHM= 17332\nIGRldmU= 17333\nIHByb3BvcnQ= 17334\nIGNhdGg= 17335\nIEVmZmVjdA== 17336\nIHdpbmRz 17337\nIOyZlA== 17338\nIGNoYXJ0cw== 17339\nIHNhbWE= 17340\nIGF1dG9tYXRpb24= 17341\nINC/0L7QutCw 17342\nIG9sYW4= 17343\nIGJvYXRz 17344\nIGNhZmU= 17345\nIGRlbmllZA== 17346\nIE1hbWE= 17347\nIGJsb2NraW5n 17348\nIFRob3I= 17349\nIHBoZW5vbWVuYWw= 17350\nIHN0YWtlaG9sZGVycw== 17351\nIHVub3M= 17352\n0YPQtdGC 17353\nIEFicmFoYW0= 17354\nIGRldGVjdGlvbg== 17355\nIGp1cmlz 17356\nIHBvd2VyZWQ= 17357\nemlhbA== 17358\nIHdlbGZhcmU= 17359\nIHVwZ3JhZA== 17360\nIG1vxbxuYQ== 17361\nIENhc2U= 17362\nY3VsYXI= 17363\nlOydtA== 17364\nIEd1ZXNz 17365\nIGN5Y2xlcw== 17366\ncm9jaw== 17367\ndW1p 17368\nIGVsaXRl 17369\nIHF1w6g= 17370\n0YLQvtC8 17371\nIHNob3Jl 17372\nZ3VudGE= 17373\nIGt1 17374\nIGZhaXRoZnVs 17375\nIEplcmVteQ== 17376\nYWlk 17377\n4Lc= 17378\ndWdhbA== 17379\nIFZlbA== 17380\nIHZyYWk= 17381\nc3RlbGw= 17382\nqLg= 17383\nIGtvbA== 17384\n6L0= 17385\nIHF1YW50bw== 17386\nINC30LDRgA== 17387\nIDIwMDI= 17388\nZXN5 17389\nIHJlc2VydmU= 17390\nINC80L7QvNC10L3Rgg== 17391\nIGRlcGxveWVk 17392\nIGRlZmluaW5n 17393\nIHNhdQ== 17394\nIGdhYXQ= 17395\nIik= 17396\nIHRyYW5zbWl0 17397\nIHB1Ymxpc2hpbmc= 17398\nIHJhbmtpbmc= 17399\nIG9mZmVuc2U= 17400\nIDQ2 17401\ncGlu 17402\nIFRha2luZw== 17403\nIGVudGl0bGVk 17404\nIGdlbnVpbmVseQ== 17405\nIHZhcmlhdGlvbnM= 17406\nIGZpbmRl 17407\nIHRhdQ== 17408\nIHVuZm9ydHVuYXRl 17409\nIFJhaA== 17410\ncG9ydHM= 17411\nIGPF 17412\nIG1vbmtleQ== 17413\nIGJyYWM= 17414\nd2Vp 17415\nbHVuZw== 17416\nIGFydGlm 17417\nIHN5cnVw 17418\nINCU0LDQsg== 17419\nIGxpZnRlZA== 17420\nIGNoZXo= 17421\nIEFkdmVudA== 17422\nIFN0b2Nr 17423\nIGRvbA== 17424\n0LzQtdC9 17425\n0LjRiNGM 17426\nIHlu 17427\nZ2lv 17428\nZGV0 17429\nIGRlc3Nl 17430\nIGdyaQ== 17431\nIENoYWlybWFu 17432\n54U= 17433\nIGN1ZW50YQ== 17434\nYW5pbQ== 17435\nIGNyYWI= 17436\nIGVzY2Fs 17437\nIHByZW1pw6hyZQ== 17438\nIEdlZg== 17439\nIGRpbmluZw== 17440\nIHNldmVudGg= 17441\nIGNoYXNpbmc= 17442\nIFRvd2Vy 17443\nIGJydXRhbA== 17444\nIGZ1bmRhbWVudGFsbHk= 17445\n0LvQtdC90LjRjw== 17446\nc3RhZ2U= 17447\nIGFjcXVpcw== 17448\nIGN5bGluZGVy 17449\nIGNvbW1hbmRlcg== 17450\nbWVt 17451\nIFVW 17452\naGFwcHk= 17453\nIGVwc2lsb24= 17454\nIGludml0YXRpb24= 17455\nIGZhcm1lcg== 17456\nY2hhaXI= 17457\nIGRlc3Rpbnk= 17458\nIHNvdmVyZQ== 17459\nIEhlYnJldw== 17460\nIHNlcnZhbnQ= 17461\nIGJldw== 17462\nIGdhc3Q= 17463\ndXRpZXM= 17464\nIGFkbWluaXN0cmF0aXZl 17465\nIENvbW1hbmQ= 17466\nw6l0YQ== 17467\nIG5pdHJvZ2Vu 17468\n6re8 17469\nIGFiaQ== 17470\nIHZpbGxhaW4= 17471\nIGJsYW5rZXQ= 17472\nIFNlbmQ= 17473\nIGJlYXRlbg== 17474\nsoQ= 17475\nIHZvbHVudA== 17476\nIHNjaG9sYXI= 17477\nIEVtcGVyb3I= 17478\nIDQz 17479\ndmFibGU= 17480\nIER1cw== 17481\nIEdV 17482\nIHRhcmdldGluZw== 17483\nd3d3 17484\nIGFtZW5kbWVudA== 17485\n7IaM6w== 17486\nIHRpbmc= 17487\nIG5hc3R5 17488\nIGdhdWdl 17489\nINGA0L7QtA== 17490\nIEhhbnM= 17491\nWW91cg== 17492\nzrHOvQ== 17493\nIHByb2pldA== 17494\nIEhhd2FpaQ== 17495\nIHN1c3BpY2lvdXM= 17496\nIHNjaHc= 17497\nIHJlbW92YWw= 17498\nIGludHJpZw== 17499\nIE1V 17500\nIHBvbnRv 17501\n4KS+ 17502\nINC+0LHRgNCw0Lc= 17503\nIGd1ZXNzaW5n 17504\ncGFjZQ== 17505\nIG1vdGhlcnM= 17506\nIG1pbGxpbWV0ZXI= 17507\n0LvQtdC90LjQtQ== 17508\nIGF2YWlsYWJpbGl0eQ== 17509\naWN6 17510\nIGZyYWN0 17511\nIGJhc2Vz 17512\na20= 17513\nIEJUUw== 17514\nIEZpZWxk 17515\nIGR6aWU= 17516\nIHNlZ3VuZG8= 17517\nIOuCmOuKlA== 17518\nIGxlZ2l0aW1hdGU= 17519\naW1hcw== 17520\nINCy0L0= 17521\nIGNvcnJ1cHRpb24= 17522\nIHNtYXNo 17523\nIFZhbGVudA== 17524\nIGFsaWduZWQ= 17525\nIFBlbm5zeWx2YW5pYQ== 17526\nIGdhYg== 17527\nIEV1bg== 17528\nZW50aA== 17529\nIE1vcm5pbmc= 17530\nIGNhbmRsZQ== 17531\nIGJhY2twYWNr 17532\nIElzbGFtaWM= 17533\nYcOnw7Vlcw== 17534\nIGVuY3J5 17535\nIG11c2hyb29tcw== 17536\n7YyM 17537\nZGl0 17538\nIHRyYW5zaXQ= 17539\nIFdpc2NvbnNpbg== 17540\nIHBhcnRpY2lwYXRlZA== 17541\nIElscw== 17542\nIHVuZm9sZA== 17543\ntoDr 17544\nIHByb2ZpdHM= 17545\nIHdhcm1pbmc= 17546\nIEdhbmc= 17547\nIG5ldHdvcmtpbmc= 17548\nIG1lZ2E= 17549\nIHRob3JvdWdobHk= 17550\nbGVtZW50cw== 17551\nIEht 17552\nIGRlY2lkaW5n 17553\nIGVtb3Rpb25hbGx5 17554\nIGV4aGF1c3RlZA== 17555\nINCf0L7Rgg== 17556\nY2lkbw== 17557\nIEhUTUw= 17558\nIGNvcHlyaWdodA== 17559\nIG1lbG9keQ== 17560\neWlt 17561\nIGFuZGVycw== 17562\nb3Nob3A= 17563\nIOuzvA== 17564\nIGF0aGxldGU= 17565\nIEdF 17566\nIGZyZXF1ZW50 17567\nIGRlc2lyZXM= 17568\nIG5lZWRpbmc= 17569\nIFl1bg== 17570\nIHJpZmxl 17571\nIGxvdmVy 17572\nJ1Q= 17573\nIGRlbnNl 17574\nIHTDo28= 17575\nIG5vdGlmaWVk 17576\nIGlkaQ== 17577\n7Jet 17578\n7YY= 17579\nIGludGVyYWN0aW5n 17580\nIHJhcHBvcnQ= 17581\n0LXRgNC4 17582\nc2tp 17583\nIGJlc3Nlcg== 17584\nIG1hbnVmYWN0dXJlcg== 17585\nIEt5bGU= 17586\nIGFjY291bnRhYmxl 17587\nIFNhaw== 17588\nIFBpbA== 17589\nIERvbWlu 17590\nIHByZXN1bQ== 17591\nINCS0YHQtQ== 17592\nIHZpbmVnYXI= 17593\nIGd1YXJhbnRlZWQ= 17594\nIGhhbmRsZWQ= 17595\nY2F0 17596\nIGNpdmlsaXphdGlvbg== 17597\nIGFjY29tcA== 17598\nIFZN 17599\nw6ltb24= 17600\nIGRlemU= 17601\nIGdyYWRlcw== 17602\nIHNvbGx0ZQ== 17603\nIHN0YXJpbmc= 17604\n15DXqg== 17605\nYXJudA== 17606\nIGhvcml6b24= 17607\nIHRyYXZhaWw= 17608\naG91cg== 17609\nIEVE 17610\nIERhaw== 17611\nIG55 17612\nIGNvbnZl 17613\nIENoYW0= 17614\nIGZpcm1z 17615\nIExpdQ== 17616\nINGB0YLRgNCw0L0= 17617\nIGxpYmVydA== 17618\nIGxlbnNlcw== 17619\nIGludGFrZQ== 17620\nINCy0YvQsQ== 17621\nIG1lbnNlbg== 17622\naGVs 17623\nIHByYWN0aXRpb24= 17624\nIDM1MA== 17625\nRk8= 17626\nIGJlZHM= 17627\nIGFuY2VzdG9ycw== 17628\nIOyXhOyyrQ== 17629\nIGRpc3R1cmI= 17630\nIExhc3RseQ== 17631\nIFN1cHBvcnQ= 17632\n4Li14LmJ 17633\nIENvcm9uYQ== 17634\nIGVudGh1c2k= 17635\nINCy0L7Qt9C8 17636\nIOyCrOuejOs= 17637\nIDUy 17638\nYmlyZA== 17639\nIHJlZHVjZXM= 17640\nIOyeiOydhA== 17641\nIEdlbmU= 17642\n6rWQ 17643\nxJlw 17644\nIMOcYmVy 17645\nIGNvbmNlcm5pbmc= 17646\ndXNlcg== 17647\nIGNvbmNlbnRyYXRl 17648\nIFdIQVQ= 17649\naXNob3A= 17650\nb255bW91cw== 17651\nbm9sZA== 17652\nIHN1Z2dlc3Rpbmc= 17653\nqbA= 17654\nIEZpc2g= 17655\nLi4uLi4uLi4= 17656\nIHZlc3NlbA== 17657\nIHRyYWJham8= 17658\nIE9jZWFu 17659\neWc= 17660\nIHRvd25z 17661\nZGVs 17662\nIHRlcnJpZnlpbmc= 17663\nIMOnYWzEscWf 17664\nIHNpbm8= 17665\nIGVhdHM= 17666\nIGdleg== 17667\nIGdlbWU= 17668\nIOyZhA== 17669\nIGNvbXBhcnQ= 17670\nIGltcGxlbWVudGluZw== 17671\nIFBvdHRlcg== 17672\nIEdlcm1hbnM= 17673\nIGfFgg== 17674\nIHRlbm5pcw== 17675\nIGNhcnBldA== 17676\nYXVlcg== 17677\nIFNhdWRp 17678\neWVvbmc= 17679\nIGN1cnJ5 17680\nIEZvcmVzdA== 17681\n0YvQuw== 17682\nIGZpZnRlZW4= 17683\nIGJvbHRz 17684\nIHtc 17685\nrLQ= 17686\nIHNldHRsZW1lbnQ= 17687\nIGxhbmdl 17688\nIGJhbQ== 17689\nR2V0 17690\n7ZWZ 17691\nIHN3YXA= 17692\nIEtoYW4= 17693\nIGNvbW1lbmNl 17694\nIHF1YXJhbnRpbmU= 17695\nIHNjb3JlZA== 17696\n55Y= 17697\nIDE5NTA= 17698\nIHRoaWNrZXI= 17699\nIHPDu3I= 17700\nIExhcnJ5 17701\nIGFsbGV6 17702\n7Iuc64qU 17703\nIGfDvA== 17704\nIHNwZWN0YWN1bGFy 17705\nLy8= 17706\nYm90aA== 17707\nIHN0YXRz 17708\nIE5hbmN5 17709\nIGJ1bnU= 17710\nIGNydXN0 17711\nIGFjdGl2YXRlZA== 17712\nIOq3uOue 17713\nb3V0aGU= 17714\nIHBvcnRz 17715\nIG5ldXJhbA== 17716\nIGphdw== 17717\nIG9ic2VydmF0aW9ucw== 17718\nIHZvaXQ= 17719\nYWJhbg== 17720\n4bqjaQ== 17721\npqzrpbw= 17722\nb21lcw== 17723\n4K+L 17724\ncXVp 17725\nIGtpbmRuZXNz 17726\n0JE= 17727\nIDQx 17728\nIG1vZGVyYXRl 17729\nIGFuZ2Vscw== 17730\nIFRhbWI= 17731\nw6h0 17732\nIGNobG9y 17733\nIEJpbGx5 17734\n7LKY6w== 17735\nYWNvbg== 17736\nIHNlbGVjdGluZw== 17737\nIERlbHRh 17738\nIG51bGw= 17739\nZGVubHk= 17740\nIGNpdWQ= 17741\nIHRlbmRlbmN5 17742\nIGJyZWFrZG93bg== 17743\nIG1pbnQ= 17744\n0YTQvtGA0Lw= 17745\nb3JwaA== 17746\nIGRhd24= 17747\nc3By 17748\nIFdJTEw= 17749\nw6RjaGxpY2g= 17750\nIHB1cHB5 17751\nNzAw 17752\nIOCupA== 17753\nIGZhaWxz 17754\nIENvbmM= 17755\nIHJlbGF0aXZlcw== 17756\nIGludml0aW5n 17757\nIGF1dG9ub20= 17758\nIGNvbXBvc2Vk 17759\nIHVuaXR5 17760\nIGRlY2lz 17761\nIGFjY2Vzc29yaWVz 17762\nIENhc3M= 17763\nIGJpc3Q= 17764\nIFRpcA== 17765\n7Ke4 17766\nIHB1bnQ= 17767\nIHLDoXA= 17768\nQU5L 17769\nZXhpc3Q= 17770\nIGNvbXBhdGlibGU= 17771\nIG5lcg== 17772\nINC10LzRgw== 17773\nIGFwbGlj 17774\nIGJhcHQ= 17775\nIGZhaWxpbmc= 17776\nIFRhbWFt 17777\nIG9zY2lsbA== 17778\nIGxldHp0ZW4= 17779\nIHJlcGVhdGVkbHk= 17780\nIGp1bmdsZQ== 17781\nIFB1c2g= 17782\naGFp 17783\nIM63 17784\nIGRlYWRseQ== 17785\n0Y/Qtg== 17786\nd2nEhQ== 17787\nIENvbW1vbg== 17788\nIM6V 17789\nIHNrYXRl 17790\nVEM= 17791\nIE1pbmk= 17792\nIGhvYmJ5 17793\n4bqnbg== 17794\nIHJvdXRlcw== 17795\nIGFtaWdvcw== 17796\nIGNvbmp1bg== 17797\nIHBhcnRuZXJzaGlwcw== 17798\nIG5vdm8= 17799\nIGF2ZXI= 17800\nIHBvdXZleg== 17801\nYnJpZGdl 17802\nIHByZW9j 17803\naGlt 17804\nIHR1cmI= 17805\nIHNvYg== 17806\nIFNuYXA= 17807\nIOywuA== 17808\nbWludXRl 17809\nIHRyYWplY3Q= 17810\ndWrEmQ== 17811\nIGVhZ2Vy 17812\nIHJlZ3VsYXRvcnk= 17813\nIGJhbmtpbmc= 17814\nYmxpbmc= 17815\n0YjRjA== 17816\nYcW8 17817\nIGJpemFycmU= 17818\naXRhdGVk 17819\nZGlyZQ== 17820\nIHRocmVhdGVuZWQ= 17821\nIHNoaW5pbmc= 17822\nIG5lc3Nl 17823\nIGNvcnBz 17824\nINGB0YM= 17825\nIHRlbGVz 17826\nIHRlbXA= 17827\ndGVt 17828\nINC60LDQvQ== 17829\nIGZldmVy 17830\nTmV3 17831\nIGhlYXZpZXI= 17832\nIFNhaA== 17833\nYnVk 17834\nIG91dHJvcw== 17835\nIOywvg== 17836\nIOuqhQ== 17837\nYXJyaW5n 17838\nIOq0nOywrg== 17839\nIE5hcA== 17840\nIHNlbWlu 17841\nIFRoYW4= 17842\naWZz 17843\nIGRlc2Vu 17844\nINGC0LDQutC+0LU= 17845\nIGxvc2Vz 17846\nIEJhbHQ= 17847\na29u 17848\nINC90LDQv9GA 17849\nIHZvaXM= 17850\nIE1vc2Nvdw== 17851\nIGNoYWlycw== 17852\naGlz 17853\nIHJlZnVnZWVz 17854\na2c= 17855\nIGtvbGU= 17856\njag= 17857\n0LDRgdC40LHQvg== 17858\npr0= 17859\nIFVuaXZlcnNl 17860\nIERpcmVjdA== 17861\nIGNoZWF0aW5n 17862\nIENpbg== 17863\nIHBhdHJp 17864\nIGFkdmlzZQ== 17865\nIE5ldGhlcg== 17866\nIHByaW1laXJv 17867\nIG1lbnRpb25pbmc= 17868\nbnV0 17869\nNTY= 17870\nYXLEsQ== 17871\nIHBldGl0ZQ== 17872\nYmxlZA== 17873\nIHBlbnNhcg== 17874\naWNpbw== 17875\nSU5E 17876\nIHZldGVyYW4= 17877\nIGxhZGRlcg== 17878\nIGNvbnNlcXVlbmNl 17879\n0L7QttCw0Ls= 17880\nIEJ1cm4= 17881\nIHJ1Zw== 17882\nIE1hZGU= 17883\nIGdpdA== 17884\nIi4uLg== 17885\nIGNvbXBldGl0b3Jz 17886\nIHByemVk 17887\nIGFwcGFyZW50 17888\nIEFyZ2VudGluYQ== 17889\nIFdvcmtpbmc= 17890\nIGNvbGxhYm9yYXRl 17891\nd29tYW4= 17892\nIHJldGFpbg== 17893\nIGxldXJz 17894\nIGRhc2hib2FyZA== 17895\n15nXkw== 17896\nIEVhcmx5 17897\nQk0= 17898\nINC10ZE= 17899\n0L7Qu9C+0LM= 17900\nIHNhdGlzZnlpbmc= 17901\nIG9mdGVudGltZXM= 17902\nIG1hcHBpbmc= 17903\nw7xua8O8 17904\nYXJ0aA== 17905\nZm9sZA== 17906\nIGxhdW5jaGluZw== 17907\nIGF1cmE= 17908\nIHByZWNpc2lvbg== 17909\nd29ya3M= 17910\nR29k 17911\nIHN0cmFw 17912\nIEltcGVy 17913\nIHJpdmVycw== 17914\nIHw= 17915\nIGN1ZXI= 17916\ncmVnb24= 17917\nIGFycml2YWw= 17918\n0LrQsNGF 17919\nIE1pYW1p 17920\n0LDQvdGL 17921\nIHN1cnZpdm9ycw== 17922\nIFNlbmlvcg== 17923\nRGF2aWQ= 17924\nIGVzdGFkbw== 17925\nIHNlY3RvcnM= 17926\nIHBvcHBpbmc= 17927\nIGNoaW0= 17928\nYXnEsQ== 17929\nIGt1bm5lbg== 17930\nIGdhbGxlcnk= 17931\nIHN1bmxpZ2h0 17932\nZXNlaGVu 17933\nIHllbGxpbmc= 17934\nIE1laW4= 17935\nIFBob2VuaXg= 17936\nIG1hbm8= 17937\nIGhpc3Rvcmlh 17938\nIG9jY3VycmluZw== 17939\n7Lg= 17940\n0LDQtNC4 17941\nIGluc3RpdHV0aW9uYWw= 17942\nIFR1dA== 17943\n57I= 17944\nIHNsYXZlcw== 17945\nIGZvcmdpdmVuZXNz 17946\nIHR3aW4= 17947\nIEh5dW4= 17948\n0L3RjA== 17949\nIEtvbW0= 17950\nYW5kcmE= 17951\nc2hvdA== 17952\nc3PDpA== 17953\nINGG0LU= 17954\nYXR0YQ== 17955\nIGV4cGVuc2U= 17956\nIEdQVQ== 17957\nIFBhc3Q= 17958\ncmlibHk= 17959\nIOutkOyVvA== 17960\nINCz0L7QtNCw 17961\nIHJlc3Bpcg== 17962\nIFF1ZWVucw== 17963\naG9wcw== 17964\nIHPDqXJpZQ== 17965\nIHByZWY= 17966\nIGNvbWVk 17967\nIHBsdXQ= 17968\nIE92ZXJhbGw= 17969\nIGN1c2g= 17970\nIHJpbmdpbmc= 17971\nIGluY29ycmVjdA== 17972\nINGB0YLRgA== 17973\nIGdlb21ldHJ5 17974\nIGFkdmVydGlz 17975\nINCo 17976\nIHJldmlld2Vk 17977\nIGRvemVucw== 17978\nIGRldGVybWluYXRpb24= 17979\nIFBoaWxs 17980\nIGNvbnRyaWJ1dGVk 17981\nIENpdA== 17982\nIHBhc3NlbmdlcnM= 17983\nIGPDtHTDqQ== 17984\nIHJldmVy 17985\nIHRlY2hub2xvZ2ljYWw= 17986\nIGFsbGVu 17987\nIHJhaW5pbmc= 17988\nYXZp 17989\nIHNhbHR5 17990\nIHR5cGluZw== 17991\nINGC0LU= 17992\nIHRpbHQ= 17993\nIOy5mA== 17994\nINC+0YA= 17995\nINC/0YDRj9C8 17996\nIHJvdQ== 17997\nIGFyZW5h 17998\nYXJhdA== 17999\nSEhISA== 18000\nIG1hbnVmYWN0dXJlcnM= 18001\nIEVkd2FyZA== 18002\nIHR1Y2s= 18003\nIGJsb3dz 18004\naW5nbw== 18005\nIE1hcmM= 18006\n7JWE7ISc 18007\nTWljaA== 18008\nIENsZWFu 18009\n6LQ= 18010\nZXN0bw== 18011\nIFBhY2s= 18012\nIHNoYWZ0 18013\nQlJVTk8= 18014\nIGF2ZW4= 18015\ndXVy 18016\n0YHQutC+0LvRjNC60L4= 18017\n6rSA 18018\nIGF1dG9tYXRlZA== 18019\nIHZlbnR1cmU= 18020\nIHN1cnZlaWxsYW5jZQ== 18021\nIEdyb3c= 18022\nIEVtZXI= 18023\nINC00L7RgA== 18024\nIGludmVzdG9y 18025\nIFlvaw== 18026\nIGxhdHRlcg== 18027\nIE5J 18028\nIGZ1bmN0aW9uaW5n 18029\nIEhhbWlsdG9u 18030\nIDUx 18031\nIG11cmRlcmVk 18032\nIGFuY2hvcg== 18033\nIGN1Yw== 18034\nIFNDUA== 18035\nIE1hZGFt 18036\nIGNvbnN0cmFpbnRz 18037\nIGJhcm4= 18038\nYW5rZW4= 18039\nIOunjuydgA== 18040\nIE1vdG9y 18041\nIERvaW5n 18042\nIGFtZW4= 18043\nZXR0cw== 18044\nIGluc3RydWN0b3I= 18045\nZWd0 18046\nYWtv 18047\nIHBvc3R1cmU= 18048\naXZpYQ== 18049\nIFBvbGlzaA== 18050\nINC00LLQsA== 18051\nIGNvbG9yZnVs 18052\nIGVsYm93 18053\nIHBhcmxl 18054\nIHBhc3Nlcg== 18055\nIGNvbmRlbQ== 18056\nb3J0YWw= 18057\nIGZlcnRpbA== 18058\n2KfYrw== 18059\nIENvbG9tYg== 18060\nIGFsaWdubWVudA== 18061\nIGFzdHJvbmF1dA== 18062\nIE11dA== 18063\nIHNhbG1vbg== 18064\nIHN0cnVjdHVyZWQ= 18065\nnteo 18066\nIGNsaWNrcw== 18067\nIG1pZWo= 18068\nIFJvdW5k 18069\nIHJhaW5ib3c= 18070\nIFZB 18071\n7KeI 18072\nb3R6 18073\nLDwv 18074\nIE5pY29sZQ== 18075\nbGlzaGluZw== 18076\nIHdoaWxzdA== 18077\nIHJlcHVibGlj 18078\nIHRhbWFt 18079\ndmVydGVk 18080\nIHJlY29nbml6aW5n 18081\nINCz0LvQsNCy 18082\nIGR1Yg== 18083\nIEpvcw== 18084\nZmFsbHM= 18085\naWNoaQ== 18086\nIGN6xJk= 18087\nINCm 18088\nIE1pdGNo 18089\nQ1I= 18090\nY2xpY2s= 18091\nIHN0dW5uaW5n 18092\nIEp1bGlh 18093\nbWVycw== 18094\nIFBvbHk= 18095\nIGRlc3Nh 18096\nIGludMOp 18097\nIOqzoOs= 18098\nIGRvxJ8= 18099\nIGRpdmVy 18100\nIHN0cmlraW5n 18101\nYXBob3I= 18102\nIGFwZW5hcw== 18103\nb3VzZXM= 18104\nIHRyYWdlZHk= 18105\nIEZhbg== 18106\nIFR1cmtpc2g= 18107\nIHByb3BoZXQ= 18108\nIGRpc3RhbmNpbmc= 18109\nIEhlbQ== 18110\nIGNhcnRvb24= 18111\nS2U= 18112\nYW50aW5n 18113\nIENsYXJr 18114\n578= 18115\nIGRhdm9u 18116\nIO2F 18117\nIHl1bW15 18118\nIGNvbXByb21pc2U= 18119\nIHN0YXJ0dXA= 18120\ncml0dA== 18121\nIGNlcnRpZmllZA== 18122\nIHBpbGxvdw== 18123\nYmVyZQ== 18124\n7KSA 18125\nIHNlZ3Vpcg== 18126\nIHN0YWRpdW0= 18127\nYXRpdm8= 18128\nIHNpbXBsZXI= 18129\ns7g= 18130\nIHZpc2E= 18131\nIHBhdGh3YXk= 18132\nIG51ZXZv 18133\nIHJheQ== 18134\n6Zw= 18135\nw7bDnw== 18136\nINC30LDQvQ== 18137\nIGNlbGVicml0eQ== 18138\n0LfQsA== 18139\nIGVpbmVz 18140\nIEdpdmVu 18141\nIEFyYQ== 18142\nIEpvYg== 18143\nIHlhaw== 18144\nIEFyYmVpdA== 18145\ncmVzc2luZw== 18146\nw6FuZA== 18147\nIGdyYWJiZWQ= 18148\ncGVuZA== 18149\nIHNpbmU= 18150\naXJr 18151\nINCe0YI= 18152\nIEZsZQ== 18153\naWNoZW4= 18154\n56Y= 18155\nIE5laWw= 18156\nIHJlcGVhdGluZw== 18157\nIGRyYXdpbmdz 18158\ncmlzZQ== 18159\nIGdsaXR0ZXI= 18160\nZml2ZQ== 18161\nIHN1cnQ= 18162\nIHNpY2hlcg== 18163\nIGFkanVzdG1lbnRz 18164\naXBwaQ== 18165\nY2tl 18166\nIHJlcHJlc2VudGF0aXZlcw== 18167\nIG1pZHN0 18168\nIHNwb2ls 18169\nbWV5ZQ== 18170\nIHRhZ3M= 18171\nIHllcA== 18172\nIFN0ZXBoYW5pZQ== 18173\nIGdlcmU= 18174\nIFJ1ZA== 18175\n54s= 18176\nIGdyb3M= 18177\nIHF1ZXVl 18178\nIGFjY29yZA== 18179\nIG9yZ2FuaXNhdGlvbg== 18180\nZW5keQ== 18181\nIFRleHQ= 18182\nw7x5b3I= 18183\nIMOt 18184\nIGNvbmNsdXM= 18185\nIOykgOs= 18186\nIGFtcA== 18187\nIExlc3M= 18188\nIOuQmOuKlA== 18189\nY2Fubw== 18190\nIFBpeA== 18191\nYXBlZA== 18192\nIGRhcmF1Zg== 18193\ndW8= 18194\neW50aA== 18195\nYWJlbA== 18196\nIERvbmU= 18197\nIGRpY2s= 18198\nYXRob24= 18199\nIGhpbGFy 18200\nYWNjbw== 18201\nIOyGjQ== 18202\nIE9yZWdvbg== 18203\nIFdlaWw= 18204\nIG1hdGhlbWF0aWNz 18205\nIGFsbQ== 18206\nIHBpeGVscw== 18207\nIGZyw6Vu 18208\n0LHQvg== 18209\nRkM= 18210\n0L3Rjg== 18211\naGVpbQ== 18212\nZ29z 18213\nIEZvcmdldA== 18214\nZmVuZA== 18215\nIFZvaWzDoA== 18216\nIEdyZWV0 18217\nIM6xz4XPhA== 18218\nIHJlY3Vy 18219\nNTE= 18220\nIOyeiOqzoA== 18221\nQXQ= 18222\nIHlhcmRz 18223\n0LjRgtC4 18224\nIG9mZnNldA== 18225\ncm9sbGluZw== 18226\nINCf0L7RgQ== 18227\nIGVubGlnaHQ= 18228\nIFBhZA== 18229\nbGltaXRlZA== 18230\n0LjQu9GM0L3Qvg== 18231\nIFNhcmE= 18232\nINGB0LTQtdC70LDRgtGM 18233\nbWFydA== 18234\nIEp1bXA= 18235\nIGFkb3JhYmxl 18236\nb3JzZQ== 18237\nY2hlZXJpbmc= 18238\nIGVtcGF0aHk= 18239\nIFRvbmlnaHQ= 18240\nb3Jw 18241\nIEh1bnRlcg== 18242\nUG9pbnQ= 18243\n0LPQsA== 18244\nIHBhc3Nlbmdlcg== 18245\nIEtuaWdodA== 18246\nIHNlZW1pbmdseQ== 18247\naHVo 18248\nIHRoZWF0cmU= 18249\nIHRvbWI= 18250\nIGRlcHJlc3NlZA== 18251\nIHN1bW1vbg== 18252\nIHNhdGlzZmFjdGlvbg== 18253\nZG9vcnM= 18254\nIEhvdXN0b24= 18255\n0LDRjtGJ 18256\nIFJpbw== 18257\n0LPQu9GP 18258\nIGFycmFuZ2Vk 18259\nIGhhbmRsZXM= 18260\nIHRyaWxsaW9u 18261\nIG5pZ2h0bWFyZQ== 18262\nIFF1YW5kbw== 18263\nIG9sZQ== 18264\nIEd1aWRl 18265\nb29v 18266\nIGJpbGU= 18267\nIGVtcGV6 18268\nIDcy 18269\nY3JpYmVk 18270\nIHByb2dyZXNzaW9u 18271\nIExpbnV4 18272\n66as 18273\nIOyymOydjA== 18274\nIGZvc3NpbA== 18275\nIHF1ZXJv 18276\n7Iah 18277\nYXRpdmE= 18278\nIHB1eno= 18279\nIFp1cw== 18280\nIHRocmlsbGVk 18281\nIENC 18282\nIG1pbmVy 18283\n0YDQsNGJ 18284\nIFNBUg== 18285\nIE5vcw== 18286\nINCz0L7RgNC+0LQ= 18287\nIGNhbWI= 18288\nINGC0LA= 18289\nIHJlc3VsdGVk 18290\nIERpY2s= 18291\nb3VuZw== 18292\nIGNvbWljcw== 18293\nIGFic29sdXQ= 18294\nc3Rhbg== 18295\nZGltZW5zaW9uYWw= 18296\nIHRlbnNl 18297\nbXVz 18298\nIEludGVsbA== 18299\nINGN0YLRgw== 18300\nIHBoYXNlcw== 18301\nIHZvbHRh 18302\nIHbDo28= 18303\nYm91bmQ= 18304\nIEFuZGVyc29u 18305\nIGN1cmlvc2l0eQ== 18306\nIHBvbnQ= 18307\nIGRlbW9uc3RyYXRlZA== 18308\nb2xpbmU= 18309\nIFNwZWVk 18310\nIG1hbWE= 18311\nIHNob2NraW5n 18312\nIGtpZWR5 18313\nIGVhcnRocXVha2U= 18314\nIGltcGxpZXM= 18315\nIGVudGVycw== 18316\nnoA= 18317\nIGVsZXZhdG9y 18318\nIGRlbGlnaHRlZA== 18319\nIE1pdHQ= 18320\nIEJhc2Vk 18321\nIERvbA== 18322\nIGtlbg== 18323\nIHdvcnJ5aW5n 18324\nIGZpbGVk 18325\nYWlsYW5k 18326\nINC80LXRgg== 18327\nIG1hc2M= 18328\nIM6R 18329\nIEp1bGll 18330\nIGRpbWVuc2lvbmFs 18331\naHVtYW4= 18332\nVG9r 18333\nw78= 18334\nIHVuc3Q= 18335\nIHNldWxl 18336\nIGVtYmFy 18337\nIO2VqeuLiOuLpA== 18338\nYWNpb24= 18339\nIOyJ 18340\nIOu2gOu2hA== 18341\nIGhlYXRlZA== 18342\n4oCm4oCm 18343\nIiE= 18344\nIHJlYWxpc2U= 18345\n0LXRgtGL 18346\naWVuaWE= 18347\naWV6 18348\nIGbDvGg= 18349\nIEVzc2U= 18350\nIHBz 18351\nIGTDsw== 18352\nYXN0ZXJz 18353\nIG9ucw== 18354\nUE0= 18355\nIHJldHJv 18356\nbWFrZXI= 18357\nd2hlbg== 18358\nIGVsbGE= 18359\nIExpdmluZw== 18360\nIExhbQ== 18361\nIHRyb25n 18362\nIGFwcHJvdmU= 18363\nIM64zrE= 18364\nIHN1bmc= 18365\n0LXQvdC40Y4= 18366\nIFJlbW92ZQ== 18367\nw6huZQ== 18368\naXJlbg== 18369\nIHN0cmFuZ2Vy 18370\n0LjQvdGL 18371\nIHbDpg== 18372\nYWZ0ZXI= 18373\nb3R0bw== 18374\nlOuhnA== 18375\nIEFob3Jh 18376\nbWlsbA== 18377\nSVNI 18378\nIGdyYWR1YXRpbmc= 18379\na3Rl 18380\nIHJlbm92 18381\nIHByb2Nlc3NlZA== 18382\na2V5cw== 18383\n0LXQutC+ 18384\nIGVucmljaA== 18385\nIMWfZWs= 18386\nIGluc2Vj 18387\nIE5hbg== 18388\nY2FrZXM= 18389\nIGlsbHVzaW9u 18390\nmOulvA== 18391\nIGFpcmw= 18392\naW1z 18393\nIGFudGVu 18394\n4buvbmc= 18395\nc24= 18396\nIHByZWNpc2E= 18397\n6riw7J6Q 18398\nINin2YTYuQ== 18399\nIGZvcmVtb3N0 18400\nIHBhcmFncmFwaA== 18401\nYXZhaXM= 18402\nINCy0L7RgQ== 18403\nIG1hbnM= 18404\nw61maWM= 18405\nYm90 18406\nINi52YY= 18407\nIGJyb3Ro 18408\nIGFsdGVybmF0ZQ== 18409\nIENoYXB0ZXI= 18410\nIHZlY3RvcnM= 18411\nZXNhcg== 18412\nIGluZGljYXRpb24= 18413\nIE5laW4= 18414\ntoE= 18415\nIGplYW5z 18416\nWUU= 18417\nY29uZA== 18418\nIHVuaXRlZA== 18419\nYWJp 18420\nIFNlcmdl 18421\nIHBhcnRpYWxseQ== 18422\nIG1hY3Jv 18423\nIGV0aGljYWw= 18424\ncnVpdA== 18425\nIHNoaWZ0ZWQ= 18426\nIGNhYmU= 18427\nIG1hdGhlbWF0aWNhbA== 18428\nIHJ1ZGU= 18429\n15nXldeq 18430\nIE1lcmM= 18431\nIGdhbnpl 18432\naWNpb24= 18433\nIHVuY29uc2Npb3Vz 18434\nIGJ1cm50 18435\nINGA0LXQsQ== 18436\n7Yq46w== 18437\nIGNoYXJt 18438\nYW5kYWw= 18439\n7LKc 18440\nb3RoeQ== 18441\nIEhhZGk= 18442\nIGFwcHJlY2lhdGlvbg== 18443\nRU5E 18444\nIHLDqWFs 18445\ntoTrk6Q= 18446\nIE5hZw== 18447\noKTqs6A= 18448\nIExhdXJlbg== 18449\nIHbhu5tp 18450\nIEJyaWRnZQ== 18451\nIFVtbQ== 18452\nIFdlZw== 18453\nIGNoYXF1ZQ== 18454\nIFNvcGg= 18455\nIGdkemll 18456\n7ZGc 18457\nIHN0ZXI= 18458\nIEJsYQ== 18459\nIHJlZmxlY3Rz 18460\nIGJlbmNobWFyaw== 18461\n0LLQsNGC 18462\nYW1pbmU= 18463\nIGFuaA== 18464\nIGNvbnRpbmVudA== 18465\nIEZEQQ== 18466\n7KGw 18467\nIMOqdGVz 18468\n15nXkA== 18469\nIGJsb29keQ== 18470\nIE5pbmU= 18471\naWVsdA== 18472\nZW1hbmQ= 18473\nIOuztOqzoA== 18474\nIHRpZGFr 18475\nIFNjaWVudA== 18476\ncGxleA== 18477\nb3N0ZW4= 18478\nIGFuaW1hdGVk 18479\nYXNzYQ== 18480\nIGRlcml2ZWQ= 18481\nINC40YHRgtC+0YA= 18482\nIE1pZw== 18483\n7IWY 18484\nIHJvcw== 18485\ncGx1cw== 18486\nb3NhdXI= 18487\nIF4= 18488\nIGludGVuc2l2ZQ== 18489\nIGdsb2JhbGx5 18490\nIGRpZmVyZW4= 18491\n7J206rOg 18492\nxIVk 18493\nIGTDqXM= 18494\nIHByZXNlbnRhdGlvbnM= 18495\nIENybw== 18496\nIGVzc2Vz 18497\nIEJldHdlZW4= 18498\nUGE= 18499\nIG5hdw== 18500\n4Lit4LiH 18501\nIGJyZWVk 18502\naWNodGU= 18503\nINCe0L3QuA== 18504\nIEJ1aWxkaW5n 18505\nIGNvbmZvcm0= 18506\nTU8= 18507\nINCW 18508\nIEtpZA== 18509\nbmFz 18510\nIER1ZQ== 18511\ncsOpcw== 18512\nIGRpb3g= 18513\nIEJpbg== 18514\nIHRheGk= 18515\nIHNhcA== 18516\nIEh1Yg== 18517\nIGNlbnRlcmVk 18518\nIHN1cmdl 18519\nIGF2b25z 18520\nIGxlYXJudA== 18521\nIFlhbQ== 18522\nIERpZXNl 18523\n0L3QuNC60Lg= 18524\nIEJlaWo= 18525\nV2lsbA== 18526\nIGF0dGVtcHRlZA== 18527\nIGdyaWVm 18528\nw7Nq 18529\nIGtpZG5leQ== 18530\nIG9wcG9uZW50cw== 18531\nIG5vbWU= 18532\nNTc= 18533\n0Y/RgtC90L4= 18534\nIG1pZG5pZ2h0 18535\nQW5ub3VuY2Vy 18536\nYWNpdHk= 18537\nb25lZA== 18538\nIHB1ZWRlcw== 18539\nIHByb2JsZW1hdGlj 18540\nIGNvcHM= 18541\nIFBldGU= 18542\ncmludA== 18543\ndW50ZWQ= 18544\nIGJpcA== 18545\n5qI= 18546\nIMOA 18547\nIGNlbnM= 18548\nYXRpdmVseQ== 18549\nIHVyZ2VudA== 18550\nIHN0cnVnZ2xlZA== 18551\nYWNodXM= 18552\nIG1pY3Jvd2F2ZQ== 18553\nIFNpZGU= 18554\nIERlbm4= 18555\nINGP0LI= 18556\nIHVyZ2U= 18557\nIGZvcmNpbmc= 18558\nd2FuZw== 18559\nINC60L7RgtC+0YDQsNGP 18560\nIG1hbW0= 18561\nIPCfjg== 18562\nIHRyaWJlcw== 18563\nIFNoYWRvdw== 18564\nIFNhbmc= 18565\nIEhpdGxlcg== 18566\nIGx1bg== 18567\nIHNjZW50 18568\n7KeR 18569\nIG92ZXJ3aGVsbWVk 18570\nIGJvbWJz 18571\nIGNyaW1pbg== 18572\nIGNvbnNvbGlk 18573\nIG1vbGVjdWxhcg== 18574\n15XXpw== 18575\nbm9y 18576\nIHBlcmNlaXZlZA== 18577\nIHbDqQ== 18578\nIGFsdG9nZXRoZXI= 18579\nIG9ydGg= 18580\nIHZlbQ== 18581\nIHp3YXI= 18582\naXpv 18583\nxas= 18584\nIG1lbHRlZA== 18585\nb3JkZW4= 18586\nIENoYXJsb3R0ZQ== 18587\nIEV4Y2Vs 18588\nYXJ0YQ== 18589\n7Jyg 18590\nIEdldw== 18591\nIHJvbWFuY2U= 18592\nZXJlbW9z 18593\nIGNvbG9uaWFs 18594\nIHRyYWRpdGlvbmFsbHk= 18595\nIHF1YW4= 18596\naG9v 18597\nIGNoYW1waW9uc2hpcA== 18598\nIGFyYml0cg== 18599\n7IWU 18600\nINC80LjQvQ== 18601\nIHNlbGZpc2g= 18602\nIGJsZXc= 18603\ncnlpbmc= 18604\nIG9wZXJhdG9ycw== 18605\nIGp1cmlzZA== 18606\nj4U= 18607\ndWl0aW9u 18608\nIEVD 18609\nIEFueWJvZHk= 18610\ndmF0ZQ== 18611\naWV0aWVz 18612\nIGFuYWx5c3Q= 18613\ntOyXkA== 18614\nINCy0YHQtdCz0LTQsA== 18615\nw6dlaw== 18616\nIEt1bg== 18617\nIGFnaW5n 18618\n1aE= 18619\n0YDQsNGE 18620\nIE1vbWVudA== 18621\nIEh1YQ== 18622\n6IM= 18623\ndGhlbg== 18624\n0LXQu9Cw 18625\nZXN0b25l 18626\nIGVuZGU= 18627\nIGF3YXJkZWQ= 18628\nIG7DpGNoc3Rlbg== 18629\nIFNwb3Q= 18630\nIE5lZw== 18631\nIGZhaXJ5 18632\nIENvdmVy 18633\nIGRlcG9zaXQ= 18634\nIHN0cmVzc2Z1bA== 18635\nIGp1bms= 18636\nIG1ldGFib2w= 18637\nSmE= 18638\nIOq3gA== 18639\nIHVuZGVyZ3JhZHVhdGU= 18640\nIGNhbmNlbGw= 18641\nIGNvbnNlbnN1cw== 18642\nIG9zbw== 18643\n4bq3 18644\nxJ9lcg== 18645\ncmFkYQ== 18646\nIFBhbGFjZQ== 18647\nIHBlZGFs 18648\nIGV4YWdnZXI= 18649\nIGJlaGF2aW9yYWw= 18650\ncGxheWVy 18651\nbGxlcw== 18652\nIGNvbm5lY3Rvcg== 18653\nIHNrZXB0 18654\njZTrnbzqs6A= 18655\nIG1pdHQ= 18656\nIEhhaGE= 18657\nIHBlcXVl 18658\nIEdvdHQ= 18659\nZmFuZw== 18660\n4LA= 18661\nam9z 18662\nIGtpY2tpbmc= 18663\nIG1vdW50ZWQ= 18664\nIHJlcGxhY2luZw== 18665\ndm9z 18666\nIHF1aWV0bHk= 18667\nIG1pbGl0 18668\nIG93bnM= 18669\nIG5pdmVhdQ== 18670\nIGF1cg== 18671\nIEJ1eQ== 18672\nIHByZWRpY3RlZA== 18673\nIGNvd3M= 18674\nIHBvbmVy 18675\nIERyaQ== 18676\nIHJlbWFya3M= 18677\nIHJlcG9ydGVy 18678\nIGFya2FkYcWf 18679\n0LXRgdGC0Lg= 18680\nIHNhdmVz 18681\nIMOnb2M= 18682\nIG1ldGFwaG9y 18683\nIEtlbA== 18684\nc3RhdGlvbg== 18685\nc2VtYmx5 18686\nIGFkdmlzb3I= 18687\nIHdvcmtzaG9wcw== 18688\nIGFjY291bnRpbmc= 18689\nIHRvaw== 18690\nbmllcg== 18691\naW5uZXI= 18692\nIGJ1cmFkYQ== 18693\nIEJC 18694\nIE9seW1waWM= 18695\nIFByYWN0 18696\nQ2hyaXN0 18697\nINGB0Y4= 18698\nIGthcw== 18699\nIHZpZXdlZA== 18700\nIG1hcmtlcnM= 18701\nIGZvdG8= 18702\nZ2V0aWM= 18703\nIEx1Y2Fz 18704\nIHBhZHM= 18705\nIEpvaA== 18706\nIENEVQ== 18707\nYWZmZW4= 18708\nYXJlbQ== 18709\nIEJlY2s= 18710\nIEdvc2g= 18711\nc2hpdA== 18712\nIE1hdGVy 18713\nYWJ1bGFyeQ== 18714\nIFJvb20= 18715\nbGxlbg== 18716\nIEZvbGxvd2luZw== 18717\nIGRvaXQ= 18718\nYmFsbHM= 18719\naXhh 18720\nIGdyb3VuZHM= 18721\nIOyeiOuKlOuNsA== 18722\nTFM= 18723\nIHdpbGRsaWZl 18724\nIFNRTA== 18725\nIHNoaWZ0cw== 18726\nQm9vaw== 18727\nIGhvc3RlZA== 18728\nbGxvcg== 18729\nIHNuYXBz 18730\nIGJlc29pbg== 18731\nINep15Q= 18732\nIHBlYW51dA== 18733\nw6RmdA== 18734\nuaA= 18735\nxZts 18736\nQXVkaWVuY2U= 18737\nIEJhcmJhcmE= 18738\nIGFkb3B0aW9u 18739\nIHdvbGY= 18740\nINC+0YHQvdC+0LI= 18741\nYXJkYQ== 18742\nIGV4cG9zZQ== 18743\nIOym 18744\namFz 18745\nxJM= 18746\nIGNvdW50bGVzcw== 18747\nIOyngQ== 18748\naGVhbHRo 18749\ndWVudA== 18750\naXNv 18751\nb3Rpb24= 18752\nIGh1bmdlcg== 18753\nIG1vaXM= 18754\nb2Zmcw== 18755\nIGNsYWltaW5n 18756\nIM6a 18757\nIEJlbGc= 18758\nINC90LDQuQ== 18759\n6riw64+E 18760\nIHVucHJl 18761\nIGdlZA== 18762\nIElv 18763\nINC/0L7RgdC80L7RgtGA 18764\nIGNvxZs= 18765\nIE5hcnJhdG9y 18766\nIMOHb2s= 18767\n7Zmp 18768\n4Lit4Lii 18769\nY2lwbA== 18770\nIHRpbWVy 18771\nIGRlZmlj 18772\nYXZpbg== 18773\nIGNhdGVnb3I= 18774\nIHRocm93cw== 18775\nIOuCnA== 18776\nINC/0L7RgdC70LXQtA== 18777\nIFRoYWk= 18778\nIG1hc2N1bA== 18779\nIGJla29tbWVu 18780\nIGludGVybmF0aW9u 18781\ndWxzZQ== 18782\nIGF5ZQ== 18783\nIHBvaQ== 18784\nIHBpeGVs 18785\nQ2hyaXM= 18786\nIHN0b3Zl 18787\nzr/OuQ== 18788\nIGdlbmVyYXRvcg== 18789\nIOy7rOs= 18790\nIGFjYWRlbQ== 18791\nIHByYWN0aWNlZA== 18792\nIGFxdWVzdA== 18793\nIGNvbnRyaWJ1dGluZw== 18794\nIEln 18795\nIOG7nw== 18796\nIGNvbnRhaW5pbmc= 18797\nIHdyZXN0bGluZw== 18798\nINGH0LXQs9C+ 18799\naGF1cHQ= 18800\nIGVzc2Fz 18801\ndmVsb3Bl 18802\nIGV4Y2VwdGlvbmFs 18803\nWVU= 18804\nIEFwcGxhdXNl 18805\ncmljYW5l 18806\nIGNvbnZlbmllbmNl 18807\nINC00LXQu9Cw0YLRjA== 18808\n0LjQu9C40YHRjA== 18809\nIEVudmlyb24= 18810\nODU= 18811\nIGPDog== 18812\nIOyViOuFle2VmOyEuOyalA== 18813\nIE1P 18814\nIFBvcGU= 18815\nIHNhaA== 18816\nb2Jp 18817\nIG1hc3RlcnM= 18818\nYWluZXM= 18819\nIGJsZXNzaW5ncw== 18820\nIG9iZXk= 18821\nIGZsdXg= 18822\nIGJyb3c= 18823\nIOyLpA== 18824\nIHBvcHVsYXJpdHk= 18825\nIExhbWI= 18826\nemV1Zw== 18827\n7JmU 18828\nj4TroZ0= 18829\naXR1YXRpb24= 18830\nIGFjY29tcGFu 18831\nIGRpYWxvZw== 18832\nIEphbWll 18833\nIHNld2luZw== 18834\nIGJsZWVkaW5n 18835\nIGJhaWw= 18836\nIHRocmVhZHM= 18837\nb2RnZQ== 18838\nIFNoYW5n 18839\nIGRlcGxveW1lbnQ= 18840\nY2hlZA== 18841\nIHNhdGlzZnk= 18842\nIGxheg== 18843\nIG1pc3NpbGU= 18844\nIExpbmtlZA== 18845\nIG1ha2Vycw== 18846\nY2l1bQ== 18847\nZnJl 18848\nIOuovA== 18849\nIOustOs= 18850\nIEVkZ2U= 18851\nIHNvY2lldGllcw== 18852\nIGFndWE= 18853\nIHN5bmNocm9u 18854\noaA= 18855\ndW5mdA== 18856\nIHVubQ== 18857\nIHRyaWFuZw== 18858\nIGluanVzdA== 18859\ndG9w 18860\nIG9yYWw= 18861\na29y 18862\nIO2VqA== 18863\nbGRpZ3Q= 18864\nY2XEnw== 18865\ncXVldA== 18866\nIExlbw== 18867\nIHNhdm9pcg== 18868\nIGVhc3Rlcm4= 18869\naWV1 18870\nIGV4cGVk 18871\nINCh0L8= 18872\nIHVubmVjZXNzYXJ5 18873\nIFBlcmZvcm0= 18874\nIE1pbmc= 18875\nINGA0LDQsg== 18876\nIGludGVudGlvbnM= 18877\nIGNvbXByZXNzaW9u 18878\nIFNhYw== 18879\nzr/Ouw== 18880\nYXJzb24= 18881\nIHRyb3V2ZQ== 18882\nIE11aGFtbWFk 18883\nINCy0YvRgQ== 18884\nIGZpbml0ZQ== 18885\nINC90LDRhdC+0LQ= 18886\ndWdh 18887\n0YDQsNC30YM= 18888\nIGNlbGVicmF0ZWQ= 18889\nIGNvbmZlc3M= 18890\nIHNxdWFyZXM= 18891\nIEdvcmRvbg== 18892\nIOuCmOyY 18893\nIHN5bmRyb21l 18894\nIGNvbXBsZXRpb24= 18895\nIGJhY2tpbmc= 18896\nIGRhcmY= 18897\nIFF1cmFu 18898\nIGludGVybWVkaWF0ZQ== 18899\nIGtlcg== 18900\nIGTDvA== 18901\naGVzaXZl 18902\nIGFjY291bnRhYmlsaXR5 18903\nIFJlYmVjY2E= 18904\nIFNsZWVw 18905\nIGRpZmbDqXJlbnQ= 18906\nb2xz 18907\nIFJpY2U= 18908\nIOuzuA== 18909\nIGFudGliaW90 18910\nz4TOrA== 18911\ncno= 18912\nYW1ibGluZw== 18913\nIHNlbnNpdGl2aXR5 18914\nIGNocm9u 18915\nYWxsYXM= 18916\nNjQ= 18917\nIGZsZWV0 18918\nIG9wdGltaXN0aWM= 18919\n0YHQutC+0LPQvg== 18920\nIGphZGk= 18921\nYWlsbGV1cnM= 18922\nIEVub3VnaA== 18923\nIHNlbmlu 18924\nIHBhY2tz 18925\nYm4= 18926\nIEFyZWE= 18927\nIFRybw== 18928\nqOumrA== 18929\n0LDRlA== 18930\nIFRob20= 18931\nIGhhcm1vbnk= 18932\n0L3QuNC60LA= 18933\nIHNvbWVkYXk= 18934\nSVNF 18935\nIEJyb2Fkd2F5 18936\nbGFyZXM= 18937\nZXJuZXNz 18938\n4LmE4Lih 18939\nIFRlbm4= 18940\nIE5BVE8= 18941\nIG1pbnV0b3M= 18942\nIEthbnNhcw== 18943\nIE1vbmc= 18944\nIGNvbXB0ZQ== 18945\niqQ= 18946\nIOyXrQ== 18947\nIHN1cGVyaGVybw== 18948\nIEdhcmRlbg== 18949\nIE1vcw== 18950\nIGF0dGFjaG1lbnQ= 18951\nIGJ1c3Q= 18952\n4K+K 18953\nIFRoYWlsYW5k 18954\nc3RhdA== 18955\nIHNwaWNl 18956\nIExlYg== 18957\nIGxlYXA= 18958\nemVjaA== 18959\nR0w= 18960\nIHZlcmw= 18961\nIGZpeGluZw== 18962\nIOuztOuptA== 18963\nIHBvcm4= 18964\nIGLDvHk= 18965\nINmF2Kc= 18966\nIFZpcnQ= 18967\nIFRvbW15 18968\nIGNhcmdv 18969\nIE9saGE= 18970\nIHJva3U= 18971\n2YPZhg== 18972\nIGJha2Vk 18973\nIHRhY3RpY3M= 18974\nIG1hcmtldHBsYWNl 18975\nIGt0w7NyYQ== 18976\nYXJsbw== 18977\nIHN3aXRjaGVz 18978\nIGNhY2hl 18979\nIEhS 18980\nIEdhbg== 18981\nIEdQUw== 18982\nIGR1YXM= 18983\naGVyZXM= 18984\n0LXRgNGI 18985\ndHJhY2s= 18986\nIGx1bmdz 18987\nU3RhdGlvbg== 18988\naWdnbGVz 18989\nIGNhbXBpbmc= 18990\nIGNvbXBsZXRpbmc= 18991\nYW1hcw== 18992\nIGN5Y2w= 18993\nIHByb3RvdHlwZQ== 18994\nIEp1ZGdl 18995\nb3R5cGVz 18996\nIGluZmVjdGlvbnM= 18997\noKTr 18998\n0LXRgNCz 18999\nb2Jh 19000\nIEJvZA== 19001\nIFNlY29uZGx5 19002\nIGFwb3N0 19003\nIHNvZ2Fy 19004\nIHJlYXNz 19005\naWVr 19006\nIGFzaGFtZWQ= 19007\nIGN1cnZlcw== 19008\nINCy0LDQtg== 19009\nIGVuc2VtYmxl 19010\nYXR1cg== 19011\nIHBob3RvZ3JhcGhlcg== 19012\nIGVpZ2h0aA== 19013\nIHdhc3RlZA== 19014\nIGRhbXA= 19015\nINC80LDQuw== 19016\nYXJlbmE= 19017\nIGludGVybmFsbHk= 19018\nIGhlZWxz 19019\nIFNhbHQ= 19020\nIGJsaXI= 19021\niOuCmA== 19022\nIGNvbnRyYXJ5 19023\nIHByaW1h 19024\nIG9zcw== 19025\nIHJhYmJpdA== 19026\nIGF1dG9y 19027\nIGJyb2FkbHk= 19028\nw61zdA== 19029\nIGJhY2tz 19030\n7ZSE 19031\nZXRv 19032\nIGp1cnk= 19033\n6LE= 19034\nIHByb3N0dQ== 19035\nIGJhcmE= 19036\nIHBhcmxpYW1lbnQ= 19037\nb3JpZW50 19038\n0LjQu9Cw0YHRjA== 19039\nIGluZGlyZWN0 19040\nw6Ft 19041\nIMOlcg== 19042\nIHRyYWl0cw== 19043\nIGTDrWFz 19044\n2YTZhQ== 19045\nIENU 19046\nYWx5c3Q= 19047\nIGxpdmVzdA== 19048\nIGtvcw== 19049\nTWF5 19050\nIEppbmc= 19051\nIGpvdXJuYWxpc3Rz 19052\n0YfQuNC6 19053\nYXJtcw== 19054\nIOqwkOyCrA== 19055\nINC40LzQtQ== 19056\nIMOpZ2Fs 19057\nIE5ld3Rvbg== 19058\nIHJlY292ZXJlZA== 19059\nIGJyYXVjaGVu 19060\nIEJyb24= 19061\n0LDQvdC+ 19062\nIHBhbGU= 19063\ncHJpc2Vz 19064\nIGhvcmFz 19065\nY2h0cw== 19066\nw7/Dvw== 19067\nYWtlcnM= 19068\nIEFsYXNrYQ== 19069\nemllag== 19070\nIHNjb29w 19071\n7J206rCA 19072\nY29y 19073\nw6lsw6k= 19074\nIHN1cmc= 19075\nIHZpZW5l 19076\nIEtyaXN0 19077\nNTQ= 19078\nIGJhbm5lZA== 19079\nIHNtb290aGx5 19080\nIHRyZWF0cw== 19081\nIHByb25vdW5jZQ== 19082\nIGZsdXNo 19083\nIGNhbWJp 19084\nIG11c2ljaWFu 19085\nIEFzaGxleQ== 19086\nIFNQRA== 19087\nIEJvYmJ5 19088\nIGdsb3Nz 19089\ncmVzcGVjdA== 19090\nIHJldmlld2luZw== 19091\nIGdlbmVyaWM= 19092\nxrDhu5tj 19093\nYXRzw6RjaGxpY2g= 19094\nIGhlYWx0aGllcg== 19095\ndWJlcnM= 19096\nINC00LDQvQ== 19097\nIE1lZGljYXJl 19098\nNTM= 19099\nIGNvbXBsYWludHM= 19100\namFj 19101\nIGFncmljdWx0dXJhbA== 19102\nU3Bl 19103\nIEpvbmc= 19104\nIGRpb3hpZGU= 19105\n6rKo 19106\nZWxpams= 19107\nIFNoaXQ= 19108\nYWludHM= 19109\nIElhbg== 19110\nIFNpbXBseQ== 19111\nIFN0cmU= 19112\nIEdEUA== 19113\nNTk= 19114\nYXN6 19115\nIEthdGll 19116\nINCx0YA= 19117\nIHBlZWs= 19118\nb3d5Y2g= 19119\nIHJlc29ydA== 19120\nIHJlc2lkZW5jZQ== 19121\nIHNwaWNlcw== 19122\nY2nDsw== 19123\nIGplZGVy 19124\nIGVtbw== 19125\nYXJpdW0= 19126\nIHB1ZmY= 19127\n66eJ 19128\n0YPQu9GM0YI= 19129\nIG1ldGE= 19130\nIOyghOs= 19131\nIG9wdGltaXphdGlvbg== 19132\nZ2FuZw== 19133\nIO2VhA== 19134\nIGVmZmljaWVudGx5 19135\nIHZpc3VhbGx5 19136\nIGZyb3N0 19137\nIEFydGh1cg== 19138\nIMW8 19139\nIGFjaGlldmluZw== 19140\nIHJvdGF0aW5n 19141\nIGxpbmluZw== 19142\nIG9jY3VwaWVk 19143\nbWVudGF0aW9u 19144\nIHN0cmV0Y2hpbmc= 19145\nIHN0YWxs 19146\nb3N0aWM= 19147\nIFNldmVy 19148\nIGdsdWM= 19149\nIHLDs8W8 19150\nIG91dHJlYWNo 19151\nc3RyYQ== 19152\naWtlbg== 19153\nIOyWmOq4sA== 19154\nIEpvaW4= 19155\nIGltcGU= 19156\nIGNvbXBlbnNhdGlvbg== 19157\nIFRhdA== 19158\nIENhcmxvcw== 19159\nw7xocnQ= 19160\nIEZyYW5jaXM= 19161\nY2pp 19162\neWVhaA== 19163\nIG1lbWJyYW5l 19164\nIGV4aGFsZQ== 19165\nIHJlbGk= 19166\nIE9S 19167\nIHJlZnJpZ2VyYXRvcg== 19168\nIFZlbmV6 19169\nTGlrZQ== 19170\nIHJhaXNlcw== 19171\nb3R0bGU= 19172\nYXR1cmE= 19173\nIHJ1bGVy 19174\nIHdlZXI= 19175\nIGd1aWRlZA== 19176\nIE1hZ24= 19177\nIENvcnBvcg== 19178\njZQ= 19179\nIGF0dHJpYnV0ZQ== 19180\nIFdvYWg= 19181\nIGFycm93cw== 19182\nIGF3YWl0 19183\nIFByaW0= 19184\nIGRpZ25pdHk= 19185\nIE9udGFyaW8= 19186\naXNjaGVy 19187\nIOyLnQ== 19188\naW1lbg== 19189\nb3V2ZXI= 19190\nQVNT 19191\n4buHbg== 19192\nb3B5 19193\nYWNodXNldHRz 19194\nIGVsZGVybHk= 19195\nRkE= 19196\nIERhaWx5 19197\nc2hpbmU= 19198\nIDU2 19199\n6KI= 19200\naWVybm8= 19201\nIHNraWxsZWQ= 19202\nIGdyb8OfZQ== 19203\nIE9haw== 19204\naWdnbGU= 19205\n0LXQu9C10Lk= 19206\nIGJpcmF6 19207\nIGFyZ3Vpbmc= 19208\nINC/0L7RjdGC0L7QvNGD 19209\nIGRyaWZ0 19210\nIGhhcm5lc3M= 19211\nIGRlaXhhcg== 19212\nYXV0cmU= 19213\nIFNlZWluZw== 19214\nIGNhcGl0YWxpc20= 19215\nIEVsZA== 19216\nemlvbmU= 19217\nIEJleW9uZA== 19218\nIHBlcmZlY3Rpb24= 19219\nIGhvZQ== 19220\nIGRlY2xhcmU= 19221\n0LDQu9Cw0YHRjA== 19222\nIHBva2U= 19223\nINeh 19224\nIGZpZ2h0ZXJz 19225\n6rKg64uk 19226\n0L7RgNC+0LI= 19227\nIGFjY29yZGluZ2x5 19228\nIElzYQ== 19229\nIG9wdGltaXpl 19230\nIE1pbmlzdHJ5 19231\nIHNhZ2U= 19232\n7Iuc66m0 19233\nIGJlbmk= 19234\nIGRvbmF0aW9u 19235\nIGNsZWFyZWQ= 19236\nIEx1Y2tpbHk= 19237\nIGhhcm1mdWw= 19238\ntey7pA== 19239\nIGNlbWVudA== 19240\n0L/QuNGB 19241\nIGRlZGk= 19242\nIENyYWln 19243\nIGRlbW9ucw== 19244\nIGN1c3RvbWl6ZQ== 19245\nIGlnbm9yZWQ= 19246\nIFRpYW4= 19247\nIGhvcGVk 19248\nIEJ1cmVhdQ== 19249\nIHJp 19250\nIFlhaA== 19251\nIHNvY2tldA== 19252\nIGZlYXR1cmluZw== 19253\nIHBhcmY= 19254\nIFRF 19255\nIFRlYWNoZXI= 19256\nIGNhdGFsb2c= 19257\n6rCA7KeA6rOg 19258\nIFNlaXRl 19259\nIGNvbmU= 19260\nIFBhbGVzdGlu 19261\nIGdld29vbg== 19262\nIGdhaW5pbmc= 19263\nINii 19264\nIGNhdGFzdA== 19265\nIG5laWdoYm91cg== 19266\nSVNU 19267\nIHN0ZWFsaW5n 19268\nIHRyb2lz 19269\nIGludGVuZA== 19270\nIFNob290 19271\nIHBpb25l 19272\nIEludGVs 19273\nIExJTg== 19274\nIGJyaWdodGVy 19275\nIFllc3RlcmRheQ== 19276\nIHNvdw== 19277\nc2lu 19278\nb2Rz 19279\nIGV0aGljcw== 19280\nIGludGVydmlld2Vk 19281\ncmVsbA== 19282\nIHJlZnJlc2hpbmc= 19283\nc8Ol 19284\nIGFic3VyZA== 19285\nIHBob3NwaA== 19286\nZmls 19287\nIHN0ZWhlbg== 19288\ndmFscw== 19289\nIGNhcmVk 19290\nIGRlbGw= 19291\nYm9uZQ== 19292\nIGhvY2g= 19293\nIHB1cA== 19294\nIGlv 19295\nIGFjb250ZWNl 19296\nZWxsZXM= 19297\nIFNwbA== 19298\naWdp 19299\nIHTDpG4= 19300\nIGVsZXBoYW50 19301\nIGdhdGVz 19302\nIHNsaWNlcw== 19303\nIHByYW5r 19304\nb2tyYXQ= 19305\nIGhpbGFyaW91cw== 19306\nIFNpZA== 19307\nIOuSpA== 19308\nIGVzc2VyZQ== 19309\nIHRlbGVwaG9uZQ== 19310\naW5hbGx5 19311\ncmF0b3I= 19312\nIGhlbGljb3B0ZXI= 19313\nIGnFn3Rl 19314\nIGdpZA== 19315\nIHRvdXJpc3Q= 19316\nIGNvbmZsaWN0cw== 19317\n0LDRgtCw 19318\nIHTDqQ== 19319\nIGFzc2VydA== 19320\nIGxhdW5kcnk= 19321\nIEJvbQ== 19322\nIHNwZWNpYWxpemVk 19323\nIE1vZGVybg== 19324\nb2dyYWY= 19325\nIGFubw== 19326\nIHJldHJpZQ== 19327\nIFB1dGlu 19328\nIEhBUg== 19329\nINC80LDRiA== 19330\nIM6xz4DPjA== 19331\nIHR1dHRp 19332\nINCy0YLQvtGA 19333\n7Ja1 19334\nIEJ1bA== 19335\n64uk66m0 19336\nxYJl 19337\nYXJpbg== 19338\nIHRoZXJhcGlzdA== 19339\nIGfDpXI= 19340\nIEN6eQ== 19341\ncHBl 19342\nbWly 19343\nIFRlcm0= 19344\nIEJlYXI= 19345\nbGFjZQ== 19346\nIE1vcmVvdmVy 19347\nIERpc2M= 19348\nIO2DgA== 19349\nIHRpdGxlZA== 19350\nIHN0cmlwcw== 19351\nIEZhaHI= 19352\nIFJpbmc= 19353\ncmFuZG8= 19354\nYWZh 19355\nIHNob3J0cw== 19356\nIHRydW5r 19357\nIHNlbnRpZG8= 19358\nz4nOvQ== 19359\nIGFjcmVz 19360\nIG92ZXJk 19361\nIE9seW1waWNz 19362\nIE1lcmNp 19363\nIOuCmOyYpA== 19364\nIGdlcm0= 19365\nYW1tZWQ= 19366\nIHByZWd1bnQ= 19367\nIE51dA== 19368\nIDwv 19369\nIHRyYXZlbHM= 19370\nIHZvY2FidWxhcnk= 19371\nZXRlbg== 19372\nb2Rlcg== 19373\nIGNvbnN1bWluZw== 19374\nd3JpdGluZw== 19375\nIGFwcGVhcmluZw== 19376\nIGFkanVzdGVk 19377\nc2Vt 19378\nIGZyZW50ZQ== 19379\nIG1heGltaXpl 19380\nIHp3aXNjaGVu 19381\nIHphbQ== 19382\nY29uc2Npb3Vz 19383\nemVr 19384\naGFv 19385\n7LKY65+8 19386\nIEVwaXNvZGU= 19387\nIHZpc2liaWxpdHk= 19388\nIG1pam4= 19389\nIHZpZWxlbg== 19390\nIEJyb3RoZXJz 19391\n15nXkQ== 19392\nIHbDpGxkaWd0 19393\nIGNydXNoZWQ= 19394\ndWZlbg== 19395\nYWN0aWM= 19396\nIEJlZA== 19397\nIEZB 19398\naXNzaXBwaQ== 19399\nIHJlbW90 19400\nIHBldHM= 19401\nIHRodW5kZXI= 19402\nIE1hbQ== 19403\n7JW17Luk 19404\ncGFyZW50cw== 19405\nIGLEsQ== 19406\nIHN1cnRvdXQ= 19407\nIHNlZ21lbnRz 19408\nIG5laG1lbg== 19409\nIHV0aWxpeg== 19410\nIFJ1Ynk= 19411\nIHLhu5Np 19412\nIGhhcHBpbHk= 19413\nIGJ1c2g= 19414\ndWx0YW4= 19415\n2Lg= 19416\nIEhpbA== 19417\nIGxhd24= 19418\nIGV5ZWJyb3dz 19419\nbWV6 19420\nIFN5ZA== 19421\ncmVw 19422\naW5m 19423\nIG92ZXJoZWFk 19424\nY3puaWU= 19425\nIG94aWQ= 19426\nIFdvbA== 19427\nIGRlc3Ryb3lpbmc= 19428\nIEFkZGl0aW9uYWxseQ== 19429\ndW1ibGVk 19430\nZGVw 19431\nIGRlcG9z 19432\nIGNvbW1vZA== 19433\nIGNha2Vz 19434\nIHRhbGVudHM= 19435\nIHBvdXJxdW9p 19436\nIGNvbnRlbXBs 19437\nbmVscw== 19438\n0L7RiQ== 19439\nIEFyYWJpYw== 19440\nIE1hcnlsYW5k 19441\nb3dv 19442\nIFBsYQ== 19443\nxJ9sdW0= 19444\nIHByb3BoZQ== 19445\nIFJlcHJlc2VudA== 19446\nb3BvbA== 19447\nYWNjb3Jk 19448\nIE1lYW5pbmc= 19449\nIGpvaW50cw== 19450\nIGJyYWtlcw== 19451\nY2t0 19452\nIDE5OTk= 19453\nIHB1YmxpY2F0aW9u 19454\nIFJldmlldw== 19455\n0L7QudC0 19456\nIG5pY2hl 19457\nIHNpZ25pZmljYQ== 19458\nIGRlYnI= 19459\nIG92ZXJsYXA= 19460\nIGRlbWFuZGluZw== 19461\nIFPDsw== 19462\nIHN1YnNlcXVlbnQ= 19463\nIHF1b3Rlcw== 19464\nIEN1cnJlbnRseQ== 19465\nIHByZXZlbnRpbmc= 19466\nIDEzMA== 19467\nIENlbA== 19468\nb25u 19469\nd25pZcW8 19470\n7JW9 19471\nINC60LDQutC40LU= 19472\nQUNI 19473\nIGd1bQ== 19474\nIElzcmFlbGk= 19475\n7Jy864uI6rmM 19476\n5ag= 19477\ncnVrdA== 19478\nIGNsYXBwaW5n 19479\nIE1hc3NhY2h1c2V0dHM= 19480\nIHJlc2lsaWVuY2U= 19481\nIHN1YnNjcmliaW5n 19482\nIGpld2Vscnk= 19483\nZ2VicmE= 19484\nIGNvcnJlY3Rpb24= 19485\nYm9v 19486\n2KY= 19487\nbGlv 19488\nc2Ft 19489\nIGVudmVsb3Bl 19490\na2Fs 19491\nIEZhcm0= 19492\nIGNhdHRsZQ== 19493\nIGJyYXM= 19494\nIHJlcGVudA== 19495\nIHRvbmVz 19496\nb3Npb24= 19497\ncGVjdGlvbg== 19498\nIGRlbmVu 19499\nyJtp 19500\nIE1hcmc= 19501\nIGFjcXVpcmU= 19502\naWJsaW5ncw== 19503\nIGFzcGly 19504\nIHNpemVk 19505\nIGFsYw== 19506\nIHZpYnJhdGlvbg== 19507\ndGls 19508\nZW1pbg== 19509\nIGNvcnJlbGF0aW9u 19510\nIHNpbmd1bGFy 19511\nINC/0L7Rj9Cy 19512\ncmVr 19513\nIGNoYXB0ZXJz 19514\nbWJyZQ== 19515\nIGF1ZGl0aW9u 19516\nw6dhcw== 19517\nIHZhbXA= 19518\nIHRlcw== 19519\nINGA0LDQt9Cy 19520\nIHJlc3BlY3RlZA== 19521\nY2lu 19522\nIGZ1Y2tpbg== 19523\nIMO8YmVyaGF1cHQ= 19524\nINC/0L7QsQ== 19525\nIGFsaWtl 19526\ntog= 19527\ncm9iaQ== 19528\nw650 19529\nIFRvdWNo 19530\nYW56YQ== 19531\nIGZpcm1seQ== 19532\nIEdyZWV0aW5ncw== 19533\nc2NhbGU= 19534\nZGFk 19535\n0LDQutGC0Lg= 19536\nIGJhY2t5YXJk 19537\n0L7QttC0 19538\nR3I= 19539\nIFNURQ== 19540\n0L7RgNGC 19541\nIGjDpHR0ZQ== 19542\nIEZpcnN0bHk= 19543\nIE9mdGVu 19544\nYXN1cmVz 19545\nIGRyYXdz 19546\ncmVkaXQ= 19547\nQVRF 19548\nUGU= 19549\nQ1A= 19550\nIGNvbXBlbGxpbmc= 19551\nIHN1YnNpZA== 19552\nIG5laWdoYm9yaG9vZHM= 19553\nIGRpcGxvbQ== 19554\nIGVudGVuZGVy 19555\ncGVyaW5n 19556\nYXVn 19557\nY2hhdA== 19558\n0J3Rgw== 19559\nIERvbGw= 19560\nIOygkA== 19561\nIGhvc2U= 19562\nbmFy 19563\nIHJld2FyZGluZw== 19564\nIFNvbGQ= 19565\nIHRha2k= 19566\nIGJsYWRlcw== 19567\nIEthdGg= 19568\nIGpvZ28= 19569\nIHNlbnNhdGlvbg== 19570\ndWFuYQ== 19571\ncGVs 19572\nIFJlY2VudGx5 19573\nIHBvbHltZXI= 19574\nIFVQ 19575\nLS0t 19576\nIGhvdmVy 19577\nIHJ1bGVk 19578\nINeU15DX 19579\nIGFmZmVjdGlvbg== 19580\nIMSR4buD 19581\nIGJyZWU= 19582\nIExheQ== 19583\nIFlvbmc= 19584\nIHJlY2VpdmVy 19585\nnOulvA== 19586\nIGRpc3Nv 19587\nIFFpbmc= 19588\nIMOpdg== 19589\nIG3DunNpY2E= 19590\nIGFlc3RoZXRpYw== 19591\nIEJyZWF0 19592\nIFRB 19593\nIGFjY3VyYXRlbHk= 19594\nP+KAiw== 19595\nIHdhZ2Vz 19596\ncmF3ZMSZ 19597\nIHN3YWxsb3c= 19598\nIGNvbXBsYWludA== 19599\nIGxpZWQ= 19600\nYmVjdWU= 19601\nIHJlbGF4aW5n 19602\nIFBva8OpbW9u 19603\nIHRlY24= 19604\nYmFuZw== 19605\ns7Ts 19606\nIHF1aWVu 19607\n0L3QvtC80YM= 19608\nIGhhYml0YXQ= 19609\nLi4uLi4u 19610\nYWJsaW5n 19611\nINGC0LDQutC40LU= 19612\nIGJlc29uZA== 19613\nIGVtcGxveWVk 19614\nIGFycml2ZXM= 19615\nIHZlc3NlbHM= 19616\nIEF4 19617\nIGRpc3BsYXlz 19618\nMTUw 19619\nb2xvZ2ll 19620\nIOyXkA== 19621\nIGNsbw== 19622\nINC00L7Qsg== 19623\nINCe0LQ= 19624\nIHZ1ZWw= 19625\nd2VuZA== 19626\nIHNsaXBw 19627\ndXJw 19628\nIExvdA== 19629\nIGJ1bGxldHM= 19630\nIHJhZ2U= 19631\nIHNraXJ0 19632\naWVudGVz 19633\nIG5o4buvbmc= 19634\nIE5hdHVyYWw= 19635\nIGhpbmQ= 19636\nIHdvcmtsb2Fk 19637\nbXU= 19638\n7YOc 19639\nIHN1bnNldA== 19640\n0LLQvtC7 19641\ncGl0 19642\nIEFTSA== 19643\nIOu2hOuTpA== 19644\nIGRvd25zdGFpcnM= 19645\n6a0= 19646\nIGNvdW50ZWQ= 19647\nIG5heg== 19648\n15XXpA== 19649\nIFBoaWxpcHBpbmVz 19650\nIDExMA== 19651\nIFBhcmtlcg== 19652\nIGdpdHU= 19653\nIGludGVyZXM= 19654\nIHVtYnJl 19655\nIE5hdHVyZQ== 19656\nIGplcg== 19657\nZW5vcw== 19658\nIHBhbmVsaXN0cw== 19659\nIGNvYXRpbmc= 19660\nIGNoZXJyeQ== 19661\nIFBlbnQ= 19662\nIE1pc3Q= 19663\ncmVnYXRpb24= 19664\nIHZpbmQ= 19665\nIENvcnBz 19666\nIE1pc3Npb24= 19667\nIG5vYmxl 19668\nIGZvbmN0aW9u 19669\nIHdhcnJpb3I= 19670\nIHByb3Rlc3Rz 19671\nb3VyaQ== 19672\nIGNvbnN0aXR1dGlvbmFs 19673\nxYJhbQ== 19674\nIGVtZXJnZWQ= 19675\nIGR5ZQ== 19676\nIFRyeWluZw== 19677\naWdt 19678\nw6lxdQ== 19679\nTE8= 19680\nIFZlcm0= 19681\nZXJ2aW5n 19682\nIFRJTQ== 19683\nIENp 19684\nIGZyZWV6ZXI= 19685\nIGdydXBv 19686\nIFNwb3J0cw== 19687\nINC/0YDQvtCz 19688\nINmE2Kc= 19689\nb3RoZXJhcA== 19690\naWZmYW55 19691\nYmlhbg== 19692\nIHJhbmtlZA== 19693\nIHByb3Bvc2Fscw== 19694\nIMSRw6J5 19695\nIGZyZWV6aW5n 19696\nIGluc2VjdHM= 19697\ndmls 19698\nIGNvbXBvc3Q= 19699\nIHNlbWFuYQ== 19700\nIGRpc3Rpbmd1aXNo 19701\nIGZhY2lsaXRhdGU= 19702\nIHBsdXNpZXVycw== 19703\nIHZlcmc= 19704\nIGFsZ3Vucw== 19705\nIFRpa1Rvaw== 19706\nIEV4cHJlc3M= 19707\n0LzQtdC90YI= 19708\nU1U= 19709\nIGludGltYXRl 19710\nIEF1dGhvcg== 19711\nIHdpdG5lc3Nlcw== 19712\nIGthbGF1 19713\nIGFyZ3VlZA== 19714\nIGF2b2lkaW5n 19715\nY3RpdmU= 19716\nIHB1cnN1aW5n 19717\nIHN5bGw= 19718\nw6F2ZWw= 19719\nIEF0bGFudGE= 19720\nIFV0YWg= 19721\nIFRpbGw= 19722\nIGVyZg== 19723\nIDIwMjI= 19724\nw6R0ZXI= 19725\nIGZ1bmVyYWw= 19726\nIEZsYXNo 19727\nIEF0bGFudGlj 19728\nIGdlbGU= 19729\n7KaI 19730\nIG1vcnRnYWdl 19731\nIOuEmA== 19732\nbGljaHQ= 19733\nIGFtYml0aW91cw== 19734\nIEJlaWppbmc= 19735\nIGRpdmluZw== 19736\nIHVuYm94 19737\naWxsYXM= 19738\nIG90cmFz 19739\nIGV2YWM= 19740\nIG1hcmluZQ== 19741\nINGB0L7Qt9C0 19742\nIENyZWF0ZQ== 19743\nIGdq 19744\nIGZyZXF1ZW5jaWVz 19745\naW5ndG9u 19746\nIFJvbWFucw== 19747\nIGFpbWluZw== 19748\nIEJ1ZmY= 19749\nIGVtcGVyb3I= 19750\nIE1vaQ== 19751\nIHByb21pc2luZw== 19752\nIGFsZ3VtYQ== 19753\nIHBhc2E= 19754\nIGRpc29yZGVycw== 19755\nU0k= 19756\nIHN1Y2NlZWRlZA== 19757\nIGN1ZXJwbw== 19758\nIHNvZGl1bQ== 19759\nIHN0dWI= 19760\naGVpcm8= 19761\nIGRlbGF5ZWQ= 19762\nZXRlcmE= 19763\ndHc= 19764\nIHN5bmM= 19765\naGQ= 19766\nIHRvdXJpc3Rz 19767\nIHN5c3Q= 19768\nIG3DqXQ= 19769\nIHF1YWxpZnk= 19770\nIE90aGVycw== 19771\nbGxlcnM= 19772\n0LDRgtC10LvRjNC90L4= 19773\nINCe0L3QsA== 19774\nIHBlcmNlaXZl 19775\nIOqygA== 19776\nIOqwgOyepQ== 19777\nINC40YHQug== 19778\nIE1hdHRlcg== 19779\nIEJsdWV0b290aA== 19780\nIHBlYXJs 19781\nIGFyaXNl 19782\nIG1vbnVtZW50 19783\nINC40LzQtdC90L3Qvg== 19784\nYWdp 19785\n2YTZig== 19786\nIHJobw== 19787\nIHNtYXJ0ZXI= 19788\nIGNvbmo= 19789\n0L7QutCw 19790\nIGtlZW4= 19791\nIFRyZWF0 19792\n0LrQu9GO0Yc= 19793\nIHBhY2tldA== 19794\nZWxzaXVz 19795\nIEFsYWI= 19796\n0LjQvdC4 19797\nIHBzaQ== 19798\nIGVuam95YWJsZQ== 19799\nIEVsbGVu 19800\nINCy0Lw= 19801\nIGVsaW1pbmF0ZWQ= 19802\nIFJvdw== 19803\nIHpvbWJpZQ== 19804\nIEt1 19805\nIHBocmFzZXM= 19806\nIGdyZW4= 19807\ndXRlcg== 19808\nIGRpcmVrdA== 19809\n15Y= 19810\nZW5lbg== 19811\ndXNh 19812\nINGB0LvQvtCy 19813\nxLA= 19814\nIEdo 19815\nIGNvcnJpZA== 19816\nIHF1ZWVy 19817\nIExpbmRh 19818\nIG9uYQ== 19819\nIG9ibGlnYXRpb24= 19820\nZGFy 19821\nINi1 19822\nZW1tZW50 19823\nYWNpZXM= 19824\nIHNjcmV3ZWQ= 19825\nIG5haw== 19826\nIGF5dWQ= 19827\nw6Fy 19828\nbGV6 19829\nIGRyb3du 19830\nIE1lZGljaW5l 19831\nIGxhYnM= 19832\nIGp1c3F1 19833\nIEdvbm5h 19834\nIHRlcnJvcmlzdA== 19835\ncXVlc3Q= 19836\nIGZhcnRoZXI= 19837\nIHJlcGxpZWQ= 19838\nIFNX 19839\nIE1pc3Npc3NpcHBp 19840\naXNobmE= 19841\nIGhvbGRlcg== 19842\nIHJlaWdu 19843\nIGFjY2VwdGFuY2U= 19844\nIHVs 19845\ntow= 19846\nIEhvdGVs 19847\nIENvb3Blcg== 19848\ndGFu 19849\nIEdyYWI= 19850\nIHZhcG9y 19851\nIGFjdGVk 19852\nIEthbmc= 19853\nZmFu 19854\nIOydtOyDgQ== 19855\ndXRldA== 19856\nIHdvcmR0 19857\nIGZhcm1z 19858\nZGF0 19859\nIGNvdXBsZXM= 19860\nIGJlYWRz 19861\naWVudG9z 19862\nVGhlbg== 19863\nb3NpdHk= 19864\nIFN0YW5mb3Jk 19865\nLi0= 19866\nV2FpdA== 19867\nIGRhdGFz 19868\nb2lyZQ== 19869\nIGhhc2h0YWc= 19870\naW1tZQ== 19871\nIGVuY291bnRlcmVk 19872\nIHNob3V0aW5n 19873\nIHJlc2lzdGFudA== 19874\nIFNldW5n 19875\nIHRyYWdpYw== 19876\nIERyYXc= 19877\nLCw= 19878\nIHNob3djYXNl 19879\nIEFG 19880\nIFN0cmk= 19881\nIGJhY2tlZA== 19882\nINGD0LM= 19883\nINCx0YPQtNGD0YI= 19884\nIENvbGU= 19885\nZXVycw== 19886\nKD8p 19887\nIGVzY2FwZWQ= 19888\nQVNU 19889\nIEFzc2VtYmx5 19890\nIHN0aWNrZXI= 19891\nIG1pZXV4 19892\nIGVudGVydGFpbmluZw== 19893\nIERPTg== 19894\nIEFtZW5k 19895\nIEthcmw= 19896\nIGluaGli 19897\nc3N0 19898\naWVn 19899\nfn5+ 19900\nIGhvb2tlZA== 19901\nIGxpdGVyYWw= 19902\nIHN1bm55 19903\nc3RlcHM= 19904\nIOuwnOs= 19905\nIE1hcmluZQ== 19906\nIHN1ZQ== 19907\nIHByaXNvbmVycw== 19908\nIEVi 19909\nNTg= 19910\nIGRydW1z 19911\nIGd1aWx0 19912\nYWxn 19913\nIGhhcHBpZXI= 19914\nIENN 19915\nIOyVhOuLiOyVvA== 19916\nINCf0LXRgA== 19917\n0YPQu9GP 19918\nIGtleXdvcmQ= 19919\nIFBhcmNl 19920\nIEZvcmVpZ24= 19921\nIEFtYW5kYQ== 19922\nIOuqqQ== 19923\ncGxlc3M= 19924\niKw= 19925\nw7Ntbw== 19926\nIHF1YWxxdWVy 19927\n7J2065286rOg 19928\nIGNvbnNwaXJhY3k= 19929\nIHN0cmF3YmVycnk= 19930\nIGhhdHRlbg== 19931\nRXM= 19932\nIHNwb3M= 19933\nIHZpbGxhZ2Vz 19934\nIGxldg== 19935\nINGB0YDQtdC0 19936\nIHdha2luZw== 19937\nIGNhbGN1bGF0aW9ucw== 19938\nINmF2Lk= 19939\nIHBvdXJpbmc= 19940\nIGxlYmlo 19941\nIHBvbGlzaA== 19942\nIFRvdXQ= 19943\nIGZ1bmt0aW9u 19944\n0LzQvg== 19945\nIFRp 19946\nIHdhc3Rpbmc= 19947\naXN0aWNhbGx5 19948\nIG1hbmlwdWxhdGU= 19949\nIHNpbXBsaWZ5 19950\nIHRlYW1tYXRlcw== 19951\nINCx0L4= 19952\nIGNvbnRhbQ== 19953\nIFF1aXRl 19954\nIGt1cno= 19955\nIENhbmQ= 19956\ndHlwZQ== 19957\nb3V0aGVhc3Q= 19958\nIGZpbmFuY2lhbGx5 19959\n0L7Qu9C9 19960\nZWxzb24= 19961\nIGZvcmVoZWFk 19962\ndWFnZQ== 19963\nbmF1ZGlibGU= 19964\nIEJlaGluZA== 19965\nIG5lZ290aWF0aW9ucw== 19966\nIOuniOydjA== 19967\nIGFsdGVybmF0aXZlcw== 19968\ncmFuaw== 19969\naG9sZGVy 19970\nIGhlYWxlZA== 19971\n0YLQvtGH 19972\nIFNwZWM= 19973\nIGV4aGliaXQ= 19974\nIHNoYWxsb3c= 19975\nIGdvYg== 19976\nIOuc 19977\nIGZydXN0cmF0aW9u 19978\nw61v 19979\nIG1lbHRpbmc= 19980\nIFN0b3Jt 19981\nIHBhdGVudA== 19982\nIEJhcmNlbA== 19983\nIHBlZGVzdA== 19984\n2YjZhQ== 19985\nIHRhaQ== 19986\nIE1vZGU= 19987\nIHdpbA== 19988\nIOuqqOultA== 19989\nIMOpZ2FsZW1lbnQ= 19990\nINeQ15c= 19991\nYXlhbg== 19992\nIGFtYXplZA== 19993\n7KeA64qU 19994\nIGhhY2llbmRv 19995\nIOydtOyVvA== 19996\nzrvOsQ== 19997\n4LiC 19998\n0LXRgtCw 19999\nIGV4YW1z 20000\nIHRyYXZlbGxpbmc= 20001\nUHJlc3M= 20002\n0LjRgNGD 20003\nIGJhc2VsaW5l 20004\nIGJ1c2Vz 20005\nIHJlaW5mb3I= 20006\ndmVuYW50 20007\nIFRydXRo 20008\nnb0= 20009\nb2Jl 20010\nIHllbGw= 20011\nIHNhdXNhZ2U= 20012\nVEY= 20013\nIEV2aWw= 20014\nIG1laW5lcg== 20015\n15nXpw== 20016\nIGhvcGVmdWw= 20017\nIHLDs3duaWXFvA== 20018\nIFBlcsOy 20019\ndHdv 20020\nbmRlcg== 20021\nINC80LjRgA== 20022\nIGNvbnNjaWVuY2U= 20023\nIFdhcnJlbg== 20024\naWNreQ== 20025\nIGFpbWVk 20026\nIGfDtnJh 20027\nWFQ= 20028\nIHB5cmFt 20029\nUmVk 20030\nYXR1 20031\nIEVzdGE= 20032\nIGVhcm5pbmdz 20033\nIGhhdHM= 20034\nIFN0YWR0 20035\naWNrZXQ= 20036\ncG9pbnRz 20037\naW5hbmRlcg== 20038\nIG1vdG9yY3ljbGU= 20039\nIOuPjA== 20040\nIO2VtOyVvA== 20041\na29t 20042\nIERpbmc= 20043\n5pI= 20044\nIHJlY3Vycw== 20045\nIGVzdGltYXRlcw== 20046\nIGRlcm5p 20047\nIHZlcnNjaA== 20048\nIE1JQw== 20049\n0LjQstCw0YLRjA== 20050\nINC/0YDQvtGI 20051\nIGRvc3Q= 20052\nINCy0YHRgtGA 20053\nIHdpZWw= 20054\nIHNpYmxpbmdz 20055\nINC00LXQsg== 20056\nIGVhcmxpZXN0 20057\nIGZhdGlndWU= 20058\nIG5oaQ== 20059\nIGd1c3Rh 20060\nIGJvbm5l 20061\nZnJvbQ== 20062\nIEplbm55 20063\nIHN1cHBvc2VkbHk= 20064\naW50YWdl 20065\nIGNvdW50aWVz 20066\nIHVucmU= 20067\nIHBsYW50aW5n 20068\nIEdyYWM= 20069\nIEdlbmVzaXM= 20070\nIEFscGhh 20071\neXN6 20072\nIHRpbGU= 20073\nIOqyveyasA== 20074\nINeZ16k= 20075\ncXVlbA== 20076\nIGRpc3RyaWJ1dGU= 20077\nZGVm 20078\nw6lyYWw= 20079\nIGNsdXRjaA== 20080\nYWRlbHBo 20081\nIFBsYXlTdGF0aW9u 20082\nhLg= 20083\nIHNq 20084\nYnJlYWtpbmc= 20085\nIOuQmOs= 20086\nIEN1YmE= 20087\nIFJ1c3NpYW5z 20088\nIE1BUks= 20089\nIHBlcnNl 20090\nIHJlc3RyaWN0ZWQ= 20091\naWdlcw== 20092\nIFRyYXZlbA== 20093\nIGVsZWN0cm9uaWNz 20094\nIHF1YXJ0ZXJz 20095\nIEtlaXRo 20096\nc2l6ZWQ= 20097\nIGRlYWRsaW5l 20098\nYXJlbnRo 20099\nIHbDrWRlb3M= 20100\nIHByb3RvY29scw== 20101\nYW1tZW50 20102\nIFRyYWluaW5n 20103\nIMOi 20104\nIHNlcXVlbA== 20105\n0L3QsNC6 20106\nIGtlaW5lbg== 20107\nIG1hdHRyZXNz 20108\nbHVkaW5n 20109\nIGNsYXNzaWZpZWQ= 20110\nIHJlYWN0b3I= 20111\nIEtvbnQ= 20112\nIHBhc3Nhcg== 20113\nIGhvbm91cg== 20114\nb3JpZw== 20115\nSU5B 20116\nIE5hdGhhbg== 20117\n0LLQsA== 20118\nINGB0LrQsNC30LDRgtGM 20119\ndMSxcg== 20120\nIGV4Y2x1c2l2ZWx5 20121\nIHNoYWRlcw== 20122\nINC/0YDQvtGG 20123\nIG9jY2FzaW9ucw== 20124\naWph 20125\nZmln 20126\nIHR1cw== 20127\nIHJlbWVt 20128\nIENocmlzdG9waGVy 20129\nIHNsaW1l 20130\nIGFsZ3VuYQ== 20131\nIEZvcnR1bmF0ZWx5 20132\nIGxvcnM= 20133\ndm9sbA== 20134\nYXZlcg== 20135\nIG91dGxldA== 20136\nIExpbmtlZElu 20137\nIEV4ZWN1dGl2ZQ== 20138\nIG9yZ2Fucw== 20139\nIEJlZ2lu 20140\nIO2ZlA== 20141\nIHRyYW5zcGxhbnQ= 20142\ncmFnZW4= 20143\nVk8= 20144\nIEbDtnI= 20145\nINio2KfZhA== 20146\nIEFuZHJl 20147\naXNpbmU= 20148\nIGxhc3Rz 20149\nIGhpc3TDs3JpYQ== 20150\nIGx1eg== 20151\nIGNvbGxhcg== 20152\nIGtpZG5h 20153\nIG9wdGljYWw= 20154\naW92 20155\nIHRvYg== 20156\nIGV4dGVyaW9y 20157\nIG1ldHJpYw== 20158\naWV1cg== 20159\nIHRyb2xs 20160\nINGA0L7Qtw== 20161\nIHTDtA== 20162\nIOyYiOyB 20163\nIEdlc2V0eg== 20164\nINC10LQ= 20165\nIGRlbm9taW5hdG9y 20166\n7LM= 20167\nIGxldHQ= 20168\nIGdyw7bDnw== 20169\nIEx1dGhlcg== 20170\nIHJlc3Rl 20171\nIHJlc2VtYg== 20172\nIHBlcm1ldA== 20173\na3Np 20174\nIGZpc2hlcg== 20175\nIFZvbg== 20176\n7ZS8 20177\nIM+Dz4TOvw== 20178\nIGxvY2tz 20179\nIHNob290cw== 20180\nIGthbXU= 20181\nIEtlcg== 20182\nIE9icw== 20183\nIGJpbGk= 20184\nIOuwsQ== 20185\nIHRvcnR1cmU= 20186\nYXNzeQ== 20187\nINC40LM= 20188\nIGxhc3Rpbmc= 20189\nIHRpZW5lcw== 20190\nIHJlY2VpdmVz 20191\nIE9zY2Fy 20192\nIHJlbWVtYmVyaW5n 20193\nIHByb2JsZW1hcw== 20194\nIGlh 20195\nIG1lbW9yYWJsZQ== 20196\nIGpvdXJz 20197\nIGZhw6dvbg== 20198\nYW1pYw== 20199\nIOu0pA== 20200\nYXRpcXVl 20201\nIOutlOqwgA== 20202\nIHppcA== 20203\naGFsdA== 20204\nIPCfmA== 20205\nIGZyaWVz 20206\nIGZpbmRlbg== 20207\nZ3Jh 20208\n0YDRg9C0 20209\naW1wb3J0 20210\nIOuLrOs= 20211\nIGlraQ== 20212\nIGNvbXBsYWluaW5n 20213\nIGZhemVuZG8= 20214\nIGdvb2dsZQ== 20215\nIHRhYnM= 20216\nIOuTpOyWtOw= 20217\ndWdv 20218\naWVydG8= 20219\nYXVmZW4= 20220\nIOuovOyggA== 20221\nIHNrdWxsZQ== 20222\nIHN1aXY= 20223\nIHNweQ== 20224\nIEthaQ== 20225\nIG1hcnRpYWw= 20226\nIG9uZGVy 20227\nYXRpbGl0eQ== 20228\nIGlyZ2VuZHdpZQ== 20229\nIGNsYXA= 20230\naW50ZWxs 20231\nIGluc3RhbGxpbmc= 20232\nIHVuaXF1 20233\nIENlbnRyZQ== 20234\nYXN0cw== 20235\ndWFy 20236\nIHJldmlz 20237\nIHRocmVhdGVuaW5n 20238\ncmFpcw== 20239\nIGN1aWQ= 20240\nc2th 20241\nIHJlc29sdmVk 20242\nIHJpZGVz 20243\nIGZhaWx1cmVz 20244\nIHNlbWI= 20245\nIG1hbGVz 20246\nVUZG 20247\nIHRyw6pz 20248\nYXBwZWQ= 20249\nIG5ld3NwYXBlcnM= 20250\ncmlldA== 20251\nIGFwcGxhdWRz 20252\n0JM= 20253\nIE5D 20254\nIGhldGVy 20255\nIGhhemFyZA== 20256\nIHJ5 20257\nIHN0cmljdGx5 20258\nIDU0 20259\nIOuTpOyWtOqwgA== 20260\nIHNwb250 20261\nIHRhdHPDpGNobGljaA== 20262\nIOunkOyU 20263\nbGF1Yg== 20264\nIGFic29yYmVk 20265\nYWNhxJ/EsXo= 20266\nIG9udQ== 20267\nINCQ0L0= 20268\nIGV4cGxpY2l0bHk= 20269\nIOyerA== 20270\nIEZ1dHVyZQ== 20271\nYWNodGVu 20272\nw6Bv 20273\neW9u 20274\nIHNlcmlh 20275\nIEhlcnJlbg== 20276\nY2Vq 20277\nIEFsYmVydA== 20278\n7J2064qU 20279\nZWN0b3I= 20280\nIHBhY2tpbmc= 20281\nIHZpcnR1ZQ== 20282\nIHZlbmly 20283\nREQ= 20284\nIHlheg== 20285\nIGxvZ3M= 20286\nIFBob3Rvc2hvcA== 20287\nIHNpZA== 20288\nbGluZ3M= 20289\nIHJlbW90ZWx5 20290\nIERpZmZlcmVudA== 20291\nIG9wZXJhdGVk 20292\nbGlnaHRz 20293\nIGRpc2NyaW1pbg== 20294\naXN0YW5jZQ== 20295\nIEdSRQ== 20296\nIHBsYWM= 20297\nIHNoaXJ0cw== 20298\nIGp1c3RpZnk= 20299\nIHRyYWJhbGhv 20300\ndXRpbA== 20301\ndm9j 20302\nIHF1YXJ0 20303\nIM6k 20304\nU0M= 20305\nIFNS 20306\nIC0i 20307\nIGhlc2l0YXRl 20308\nIHBhaw== 20309\nZ3Vh 20310\nSm8= 20311\nIHNvdXZlbnQ= 20312\nIEFuZ2VsYQ== 20313\nZXNzZWU= 20314\nYWRlbHBoaWE= 20315\nYXJrcw== 20316\nIHdlZWQ= 20317\nIGthbm5zdA== 20318\nIOq3uOufrOuLiOq5jA== 20319\nIHBsdXTDtHQ= 20320\nIENvbW1hbmRlcg== 20321\nIHN1bW1hcml6ZQ== 20322\n4K+A 20323\nIDk4 20324\nIGRldmVsb3BtZW50cw== 20325\nIENvc3Q= 20326\nIHRoZW9yZXRpY2Fs 20327\nIG9yZQ== 20328\nIG1ldGFsbA== 20329\nzr/Phc69 20330\nZmFocg== 20331\n0JrQkA== 20332\nIGNodWNr 20333\nIGFkYXB0ZWQ= 20334\nIE9rbGFo 20335\nIE5ldGhlcmxhbmRz 20336\nIHBvZXQ= 20337\nc3Rv 20338\na2F0 20339\nIHdlYXJz 20340\n568= 20341\nIOyWtOuUlA== 20342\nIEVzdG8= 20343\nIGxhdWdoZWQ= 20344\nIGRvbm5lcg== 20345\nIOuNsA== 20346\nIOybkOs= 20347\nb2N1cg== 20348\nIEtpY2s= 20349\nIERldHJvaXQ= 20350\nIGJpY3ljbGU= 20351\nIGxhY2tpbmc= 20352\ncGhhYmV0 20353\nIEtlbmQ= 20354\nQXNz 20355\nIHJldmVhbHM= 20356\nIM6g 20357\nIE5vYWg= 20358\npqzripQ= 20359\nIHNlbGxz 20360\nIEFsYWJhbWE= 20361\nIHRlcnJpZmlj 20362\nIEVsZW1lbnQ= 20363\nIO2G 20364\nIHR1cmJv 20365\nIEhvbQ== 20366\nIHRoZW9yZW0= 20367\nIGFkdmVudHVyZXM= 20368\nIHB1cmNoYXNpbmc= 20369\nIFTDoQ== 20370\nINC80LDRgg== 20371\nIHZlbW9z 20372\nIGR1dGllcw== 20373\nIHdlbmln 20374\nIGJvb3Ro 20375\nIGVudHJhcg== 20376\nVkE= 20377\nIGdlYXJz 20378\nIEphZQ== 20379\nw6hu 20380\nIGNhbGNpdW0= 20381\nIFJvYmVydHM= 20382\nINC/0YDQvtCx0LvQtdC8 20383\nIHJpYmJvbg== 20384\nINC90LDQt9GL0LI= 20385\nIGxhdg== 20386\nIGludGVydmVudGlvbnM= 20387\nIFVsdHJh 20388\nIG5hbWVseQ== 20389\nIGFkZXF1YXRl 20390\nIHJlY2Fw 20391\nIGRvY2s= 20392\nZnRpbmc= 20393\nIHZvaQ== 20394\nIGNvbnN1bHRhdGlvbg== 20395\nINGB0LXQvA== 20396\nIHBvZGVt 20397\nIHBvc3Nlc3Npb24= 20398\nIGNsdWVz 20399\nIFJ1c3NlbGw= 20400\nIHJlbmV3YWJsZQ== 20401\nINGD0Lc= 20402\naW5mb3JtYXRpb24= 20403\naWdnZXJz 20404\nV2l0aA== 20405\nd25v 20406\nIGVsYWJvcmF0ZQ== 20407\nY3RvcmFs 20408\nIERvdw== 20409\nIHJhbWVu 20410\n4buV 20411\nIGVyc3Rl 20412\nIFplbA== 20413\nIHF1YXNp 20414\nINC90LDQug== 20415\nIFN0YXJz 20416\nIHRyaWJhbA== 20417\nIHNlYXRlZA== 20418\nIHdvbA== 20419\nIGNob2w= 20420\nw6Rtw6Q= 20421\nIG91dGJyZWFr 20422\nIGNyZXM= 20423\nIHVuc2VyZXI= 20424\nIO2RnA== 20425\nIHVuZGVyd2F0ZXI= 20426\nIGFzc3VyZQ== 20427\nT09E 20428\nIG5hcHJhd2TEmQ== 20429\nIGVzdGFibGlzaG1lbnQ= 20430\nIGluY29u 20431\nIGRpZmVyZW50ZQ== 20432\nIGV4Y3Vz 20433\nIERpbQ== 20434\n0L7RhQ== 20435\nIExpbmc= 20436\ncm9sb2c= 20437\nIG91dGRvb3Jz 20438\nbmFq 20439\nIGVwaWRlbWlj 20440\nIHVudGVycw== 20441\nIDMwMDA= 20442\nIEdhYnJpZWw= 20443\nIOyXhuuKlA== 20444\nIGVuY2w= 20445\nIE9kZXI= 20446\nIEZvb3Q= 20447\ncGFz 20448\nIFp1aw== 20449\nIHdvcmtmbG93 20450\nIHVucA== 20451\nIGFsbGlhbmNl 20452\nZW5zY2hhZnQ= 20453\nIHlvZ3VydA== 20454\n0LjQvdC1 20455\nIGVydQ== 20456\nIGZpeg== 20457\nIGHFnw== 20458\nIGFwcmVuZA== 20459\nIGN1YWxxdWllcg== 20460\nIGNhcnJvdHM= 20461\nxLFuxLFu 20462\nYWZvb2Q= 20463\nIGZsb29ycw== 20464\nIGtleXdvcmRz 20465\nIHNwb3R0ZWQ= 20466\nIGRyYW5r 20467\nIHBhcmFz 20468\nIMO6bHRpbW8= 20469\nIGhhYmxhcg== 20470\nIHByb3NlY3V0 20471\n7JeQ64+E 20472\nIMOpcA== 20473\nIHN0aWNrZXJz 20474\nIHB1c2hlcw== 20475\na2g= 20476\nIHJlc3RhcnQ= 20477\nIFRodW5kZXI= 20478\n4budaQ== 20479\nIG11aXRh 20480\nIGZveA== 20481\nYXJkZcWf 20482\nIFphY2g= 20483\nIE1pbmVjcmFmdA== 20484\n57g= 20485\nID09PT0= 20486\nIGfDtnJl 20487\nIHN0YW5jZQ== 20488\naWd1bmc= 20489\n2Y7ZkQ== 20490\na8Ok 20491\nIHRlYWNoaW5ncw== 20492\n6YY= 20493\nIGRlY2F5 20494\nIHJpYw== 20495\nb21lbmE= 20496\nINCy0YHQtdC8 20497\nY2h0ZW4= 20498\nIFZlcnQ= 20499\nIO2VnOq1rQ== 20500\nrLTr 20501\nIGNvYw== 20502\nOik= 20503\na2VpdGVu 20504\nIEJB 20505\nZXRoZWxlc3M= 20506\nIGhlYWRxdWFydGVycw== 20507\nIHNwaWtl 20508\nIEJhc2U= 20509\nIDEwMQ== 20510\nIGNvb3JkaW5hdGVz 20511\nIHRhcmQ= 20512\nIGJvaWxlZA== 20513\nIE1vbnN0ZXI= 20514\nIG5vdGVib29r 20515\nIOq0gA== 20516\nIFdha2U= 20517\nIFNldHRpbmc= 20518\n7J207Jc= 20519\nIFN5ZG5leQ== 20520\nIEZpbm4= 20521\nIGxvYmJ5 20522\nIHNlbmlvcnM= 20523\n0L3QuNGF 20524\nYXZhbg== 20525\nIEpF 20526\nIHRyYWZm 20527\ndGhpbms= 20528\nIHNsYXA= 20529\nIENhc3RsZQ== 20530\nqW5n 20531\nIGFsZ3Vub3M= 20532\nIFBlcnNvbmFsbHk= 20533\nIE1hbGU= 20534\n7Yuw 20535\nIEdlbmVyYWxseQ== 20536\nIFBlbA== 20537\nIGRpYXM= 20538\nIGV2b2x2aW5n 20539\naXRvbA== 20540\n0LLQvtGA 20541\nIHBsZWlu 20542\nIGZsaWdodHM= 20543\nIGVsZXZlbg== 20544\nb3dlag== 20545\n4buRbmc= 20546\nIGFrdQ== 20547\nIGdsYW5jZQ== 20548\nIGNvbm5lY3Rpdml0eQ== 20549\nIGJhbGQ= 20550\n0YvRhw== 20551\nIGludGVzdA== 20552\nw6Fn 20553\nIEdSw5w= 20554\naWJsaWNhbA== 20555\nIFBhcGE= 20556\nIHBpdHk= 20557\nIGZhaW50 20558\nIHd1cmRlbg== 20559\nIGxlZ2FsbHk= 20560\nIHByZXk= 20561\nIFNjaWVuY2Vz 20562\nINC/0YDQvtGB 20563\nIHRyYWluZXI= 20564\nIHByb2Jsw6htZQ== 20565\nIGtpbG8= 20566\n0LrQvtCz0L4= 20567\nIGJyaWRnZXM= 20568\nODk= 20569\nIGxhc3RlZA== 20570\nIGVsZWdhbnQ= 20571\nYm93cw== 20572\nIHBhbGFi 20573\nIGRpcmVjdG9yeQ== 20574\nIGJ1bGI= 20575\ncGVvcGxl 20576\nSVg= 20577\nIGdlYg== 20578\nIDY2 20579\nIFRlbm5lc3NlZQ== 20580\nYWhsZW4= 20581\naWV2YWw= 20582\nIGNhdXQ= 20583\nIERhbWVu 20584\ncGxv 20585\naWFuZQ== 20586\n0LDQu9C1 20587\nYXR0YW4= 20588\nINin2YTYsw== 20589\nIHJpc2t5 20590\nIHNsZWV2ZQ== 20591\nIGluY2lkZW50cw== 20592\nIOuwlQ== 20593\nQ28= 20594\nIGFwcGxpY2FibGU= 20595\nIGltcGVyaWFs 20596\nIFBoaWxpcA== 20597\nIFllYQ== 20598\n0LXRgNC+ 20599\nINC/0L7QutCw0Lc= 20600\nw7xuZQ== 20601\n7JiA 20602\nSHVi 20603\ndG9y 20604\nIHNpZ3U= 20605\nY2VuZA== 20606\nIHBvbGl0aWNhbGx5 20607\nIOyCtA== 20608\nIHBhcnM= 20609\nIG91dg== 20610\nIHByaW1laXJh 20611\nIFNoYWg= 20612\nIHNhdHVy 20613\nIGNvbWJ1c3Q= 20614\nIHByb21vdGVk 20615\n7KO86w== 20616\nIHRlbXBsYXRlcw== 20617\nIOuLrA== 20618\nIGhhdWw= 20619\nINGC0LXRgA== 20620\nIHNsaWRpbmc= 20621\nY2VkZW50ZWQ= 20622\nY2hpbGRyZW4= 20623\nTVI= 20624\nIFdlaQ== 20625\nIGLDtnI= 20626\nIHByw7N4aW1v 20627\nYXLDrWE= 20628\nIHNhbXBsaW5n 20629\n0LXQu9C10L0= 20630\nZXNp 20631\nIERhbmllbGxl 20632\nIE9rbGFob21h 20633\n6IU= 20634\n0LXRgdC/ 20635\nIERWRA== 20636\nINCy0YvQvw== 20637\ncm91cw== 20638\nY29ucw== 20639\nIGVuaGFuY2Vk 20640\nIHBhc3Rvcg== 20641\nIFN1ZGRlbmx5 20642\nZmFy 20643\nUEVS 20644\nIE5n 20645\nMTAwMA== 20646\nIGNoZXc= 20647\nIHJ1bW9ycw== 20648\nIEFuYQ== 20649\nIGFubsOpZXM= 20650\nINGD0YHRgg== 20651\nIFBoaWxhZGVscGhpYQ== 20652\n0LXQttC00YM= 20653\nIGVmZmVjdGl2ZW5lc3M= 20654\nw6l0w6k= 20655\nIGRpbmc= 20656\nIHJlbGlnaW9ucw== 20657\nIGFnZWQ= 20658\nemllxIc= 20659\nIFJpYw== 20660\nIEthcA== 20661\nIFBhZ2U= 20662\nIHPDvA== 20663\nIG7DpG1saWNo 20664\nIG1hbmtpbmQ= 20665\nIHJlc3Rpbmc= 20666\nIGluZmx1ZW5jZXM= 20667\nIFNjaHVs 20668\nINC90LXQsg== 20669\nIG1hbmE= 20670\nIGNvbnN1bWVk 20671\nIFBvbQ== 20672\nIGNvbnNlZ3Vpcg== 20673\nIFRoYW5rc2dpdmluZw== 20674\nIEhpbmR1 20675\nbGFpcw== 20676\nIHRocml2ZQ== 20677\nIGNvbnRvdXI= 20678\n0LDRhtC40Y8= 20679\nIGZhbGFuZG8= 20680\nIErDoQ== 20681\nemFu 20682\n0LjRgtGD 20683\naXBoZXI= 20684\namFtaW4= 20685\nIEhhbGxv 20686\nIDE2MA== 20687\nINC+0YHQvtCx 20688\nIG1ldGU= 20689\nIOyVjOs= 20690\nIEJhcmNlbG9uYQ== 20691\nbGV0dGVy 20692\nINCd0LXRgg== 20693\n5Zk= 20694\nIGFkZW3DoXM= 20695\nIGNvb3JkaW5hdGlvbg== 20696\ndW50cw== 20697\nIHNsb3A= 20698\nINC/0YDQuNC0 20699\n7KeA66eJ 20700\nIHF1ZXN0aW9uaW5n 20701\nIGRpZXNlbA== 20702\nIGRlag== 20703\nIGFmZmlybQ== 20704\njZTrnbzqs6DsmpQ= 20705\naWVubmU= 20706\nIGNyYW5r 20707\nIHByZWRpY3Rpb25z 20708\nIHBoeXNp 20709\nY2hzZWw= 20710\nIGNvbWJpbmF0aW9ucw== 20711\nIGV4Y2VsbGVuY2U= 20712\n4bud 20713\nd2lkdGg= 20714\nd2VlZA== 20715\nhOulvA== 20716\nhOuniA== 20717\nIGFsdG8= 20718\nIGRhaXJ5 20719\nIE5vcm1hbA== 20720\ncHBlbg== 20721\nIG9iZW4= 20722\nIGRldmFzdGF0aW5n 20723\nIHBveg== 20724\nIEh1cw== 20725\nbWF6 20726\nIHdhcm5lZA== 20727\nIGRlbms= 20728\nIEF1c3M= 20729\nIHRyYWRlcw== 20730\naGVsbA== 20731\nIHByaW1lcm8= 20732\nIG1pYQ== 20733\n0LLQsNGA 20734\n2KjZig== 20735\nIGtpY2tz 20736\nIGHEnw== 20737\nIE3DvA== 20738\nIGx1Yw== 20739\n0LXQvdC40LXQvA== 20740\nIFN0YW5kYXJk 20741\ncmljZQ== 20742\nIEN1Yg== 20743\nIGdvdQ== 20744\nIEpvw6Nv 20745\n0YPRgdC6 20746\nIGVucXU= 20747\no4w= 20748\nZ2V3 20749\nIO2BsA== 20750\nb3dhbmlh 20751\naWFuaQ== 20752\nIGZha3Q= 20753\n0Y/QvdC4 20754\nIGJlZg== 20755\nIHRodW1ibmE= 20756\nIGNldXg= 20757\nYXBwbGU= 20758\nTkVO 20759\nIGdhZA== 20760\nYXBvbg== 20761\nIEZhbnRhc3RpYw== 20762\nIGNvbmNlbnRyYXRlZA== 20763\nZ2lybA== 20764\nbGVuZQ== 20765\nINCU0LvRjw== 20766\nIMOpdGE= 20767\nYWFu 20768\nIG91dHRh 20769\nIG5hcmM= 20770\nIEJvZHk= 20771\nYnJ1c2g= 20772\nIGxlZ2lzbGF0aXZl 20773\nIE1lZ2Fu 20774\nIG1pc3Rha2Vu 20775\nIE1pc3NvdXJp 20776\nIGxhYmVsZWQ= 20777\n0LvRj9C10YLRgdGP 20778\nIHJlYWxpc2Vk 20779\neW9yc3Vu 20780\nIFNhZmV0eQ== 20781\nIGFjY2VsZXJhdGU= 20782\nIHNhbmN0aW9ucw== 20783\nIHBlZQ== 20784\nIGp1ZWdv 20785\nIHBlcHBlcnM= 20786\nIHdhbA== 20787\n6riJ 20788\nZWxsb3c= 20789\nINC20LXQvQ== 20790\nIGNpbmNv 20791\nINGB0LjRgdGC 20792\nY292ZXJ5 20793\nIGdyYW0= 20794\nIMOpcG8= 20795\nIEJNVw== 20796\naXZvbA== 20797\nIENoZW0= 20798\ndXNlbWVudA== 20799\nIFN1cHBvc2U= 20800\nIOqwgOyngOqzoA== 20801\nIG1pbGxlbm4= 20802\nIFR1bg== 20803\nIG1lZGFs 20804\nIGhhY2lh 20805\nIHN0aW11bHVz 20806\nIGJyaWdodG5lc3M= 20807\nYWllbnQ= 20808\nIEhhbmRz 20809\naW5ldA== 20810\nIGNvYWxpdGlvbg== 20811\nIHJpc2Vz 20812\ncmluYQ== 20813\nIHNjb290 20814\nIGRlZmVuZGluZw== 20815\nIGludmVycw== 20816\nIGhpbGxz 20817\nIGZ1bGZpbGxlZA== 20818\nbGxpZQ== 20819\nIGFkb2xlcw== 20820\nIENoYXNl 20821\nIEpK 20822\nIG5ldWVu 20823\nIFRydQ== 20824\nIGluaGVyaXQ= 20825\nIHNpeHR5 20826\nIEV4cA== 20827\nIENsYXk= 20828\n0L7RgdC+0LE= 20829\nYXJuYQ== 20830\nIEltcGVyaWFs 20831\nINGN0YLQsA== 20832\nIHNvY2lhbGx5 20833\nYXR5 20834\nb2R5bmFt 20835\nIHJpYnM= 20836\nb21pYw== 20837\nIFRvbA== 20838\n0L7Qu9C2 20839\nIDE5OTg= 20840\nIGZyYW0= 20841\nIHJhbmtz 20842\nINCx0YPQtNGD 20843\nIENvbG9u 20844\nSHo= 20845\nIGFjY29tbW9kYXRl 20846\nIGV4cGxvZGU= 20847\n7YSw6w== 20848\nSEFFTA== 20849\nIEhhcnQ= 20850\nINC20LjQt9C90Lg= 20851\n5qE= 20852\nIGRlbGljYXRl 20853\noNeX 20854\nIHRvZnU= 20855\nIGFjaGlldmVtZW50cw== 20856\nIFNvcg== 20857\nIGFncmVlbWVudHM= 20858\nIDU3 20859\nIHRhbXA= 20860\nIGZyYW7Dp2Fpcw== 20861\nIGhlcmJz 20862\nY29ybg== 20863\nIGtvbms= 20864\nQU5B 20865\nIFFp 20866\nIHByw7Nw 20867\nIHRpZ2Vy 20868\nIOuRmA== 20869\nxINt 20870\nIGFwcHJlbnQ= 20871\nYWhhbg== 20872\nIHJ1bGluZw== 20873\nIHRzcA== 20874\nIHR3aXR0ZXI= 20875\nIHRlZW5hZ2Vy 20876\nYnVz 20877\nIO2S 20878\nIEFtZW5kbWVudA== 20879\nIHRhcHBpbmc= 20880\nIEFQSXM= 20881\nIG1hdGNoZWQ= 20882\n66m0 20883\nV0E= 20884\nIEJlYXV0eQ== 20885\nIGluZXZpdGFibGU= 20886\nIGdhc2Vz 20887\nINm+ 20888\naGlnaA== 20889\nIE9wdA== 20890\nIHByZWRvbWlu 20891\nz4HPjA== 20892\nIHR1YmVz 20893\nIOyVoA== 20894\nIEFh 20895\nb21ldG93bg== 20896\nIElN 20897\nIGRlc2Fy 20898\nw6RyZW4= 20899\nINC80LDRgQ== 20900\nIE3DtmdsaWNo 20901\nIHJlbnRhbA== 20902\nIO2VqOq7mA== 20903\nIERpYW5h 20904\nIGF1dGlzbQ== 20905\nIFB1ZXJ0bw== 20906\nxLFsZA== 20907\nIGZhbGFu 20908\nIGRyZWFtaW5n 20909\nIGd1dGU= 20910\nINC60LDQvA== 20911\nIHdyZWNr 20912\nIHN0b3J5dGVsbGluZw== 20913\nIExlZ2VuZA== 20914\nIFVrcmFpbg== 20915\nINC/0YDQvtC40YE= 20916\nIFNL 20917\nIO2WiQ== 20918\nIMWbd2k= 20919\nIEJlbGlldmU= 20920\nIG1vc3RyYXI= 20921\nIFRvZGQ= 20922\nIE5pZ2Vy 20923\naWN0aW5n 20924\naGFyZA== 20925\nOi8v 20926\naXJhYmxl 20927\naWdhdGlvbg== 20928\nIE1lbWJlcnM= 20929\nIOygnO2SiA== 20930\nIGRpc2NvdXI= 20931\nn70= 20932\ncmlrYQ== 20933\nIERO 20934\nIEZpZg== 20935\nIENhcGl0YWw= 20936\n0YDQvtC8 20937\nIFNhbnM= 20938\neXVu 20939\nIHBpbG90cw== 20940\nIHRyYXQ= 20941\nIG55dA== 20942\nIOuvvA== 20943\nIGV4cG9uZW50aWFs 20944\nIGVtZXJnZQ== 20945\nIHRyYWplY3Rvcnk= 20946\nINC/0L7Rh9C10LzRgw== 20947\nIHNlYWxlZA== 20948\nYXR0aQ== 20949\nIHdpZGVz 20950\nINC+0LPRgA== 20951\naWFuY2Vz 20952\nIHdpdG5lc3NlZA== 20953\nT3I= 20954\nb3Np 20955\nIEpvZWw= 20956\nb25hbA== 20957\nIEludGU= 20958\nY2VkZXM= 20959\nIEdvdHRh 20960\nYW5pdW0= 20961\nIGZlbWFsZXM= 20962\nIExlYmVucw== 20963\nIG1vaXN0dXI= 20964\nIFNpbXBsZQ== 20965\nIERvY2g= 20966\nYXLDoQ== 20967\nIGdlc2VoZW4= 20968\nVVNU 20969\nxqFp 20970\nIGNsYXNzaWZpY2F0aW9u 20971\nIGRpYWdvbmFs 20972\nIHBlcm1ldHQ= 20973\nY29tcA== 20974\nINin2YTYrQ== 20975\nIE1hbGF5cw== 20976\nIGdlaMO2cnQ= 20977\nIHBvcHBlZA== 20978\nIGNvbnRhY3RlZA== 20979\nINeb15w= 20980\nIDE0MA== 20981\nIGFkYXB0YXRpb24= 20982\nIG1hbnVz 20983\nIHR1cmtleQ== 20984\nIHByZWFjaA== 20985\nYnJpZ2h0 20986\nIGRvd25z 20987\nIHVucHJlY2VkZW50ZWQ= 20988\nIG1pZ2h0eQ== 20989\nIGNhdGVy 20990\naXR0aQ== 20991\nZ3M= 20992\nIERlcHV0eQ== 20993\nd3JpdGU= 20994\nIEJsZXNz 20995\nw6Fj 20996\nIHN1bW1pdA== 20997\nIOuPvOyalA== 20998\nIHRob3VnaHRmdWw= 20999\nIHNocmVk 21000\nc2luZ2luZw== 21001\nINC70YPRh9GI0LU= 21002\nIHllbg== 21003\nIHZpYnJhbnQ= 21004\nIFdhbHRlcg== 21005\nIGhvc3Rz 21006\nIGFtYnVs 21007\nIGludmFzaW9u 21008\nb2dhbg== 21009\nIHJlYXNvbmluZw== 21010\nIHN1Y2M= 21011\n0LvQtdC60YI= 21012\nIGZhbGE= 21013\nIGtpbmdz 21014\nIGdvaW4= 21015\nIGNhbGli 21016\nIEdSw5xORU4= 21017\nb3Rlcg== 21018\nIGVpbno= 21019\nIGluc3VsaW4= 21020\niqg= 21021\nIHNjYWxpbmc= 21022\nIENvcm4= 21023\naHlk 21024\nIG1hdHRl 21025\nUEw= 21026\nIGFsaWVucw== 21027\nIFNlZw== 21028\nZXN0aQ== 21029\nYXN0aWNz 21030\nIHdhcm1lcg== 21031\nIGluZ2Vu 21032\nIE1M 21033\nIHJvZGU= 21034\nIEV5ZQ== 21035\nYmVpdHM= 21036\nIEJhcm4= 21037\nwrss 21038\nIENodWNr 21039\nIHByb2ZpdGFibGU= 21040\ndWd1ZXNl 21041\nIEFyYWJpYQ== 21042\nIGNvY28= 21043\nIHB1ZWRv 21044\nIGluZmxhbW1hdGlvbg== 21045\nY2xpcA== 21046\nIHRhYmxlc3Bvb25z 21047\nIOygkQ== 21048\nIFN3ZWQ= 21049\nIGFuYXQ= 21050\n7Iig 21051\nIGFycmli 21052\nIGRhbmNlcg== 21053\nIENhcnRlcg== 21054\nIG1hZ25pZmlj 21055\nc3RvcmU= 21056\nIGZhZGU= 21057\nIGFjY29tcGFueQ== 21058\nIHdhaHI= 21059\nIHllYXN0 21060\nIG1pbmVyYWw= 21061\nIGxlZ2lzbGF0dXJl 21062\naXJvcw== 21063\nIGNyb3dkZWQ= 21064\n0YDQsNGI 21065\nb2NhZG8= 21066\n7Ja07JW8 21067\nIO2bhA== 21068\nIEJhcnJ5 21069\nbWFzdGVy 21070\nIG5pY2tuYW1l 21071\nICIuLi4= 21072\nIFJz 21073\nIE1vb3Jl 21074\nIHZlbnVl 21075\nINCx0YM= 21076\nbGlob29k 21077\nIEFnZW5jeQ== 21078\n0LvQvtCy 21079\nIGthaA== 21080\nIOyGjOumrA== 21081\nIG1hcnNo 21082\nIGluY29ycG9yYXRlZA== 21083\nYW50d29ydA== 21084\nIGtpbWNoaQ== 21085\nIHdvbw== 21086\nIGRpc3RyYWN0ZWQ= 21087\nZXJpZXM= 21088\nIGluZm9ybWFjacOzbg== 21089\nIENob29zZQ== 21090\nIEphZGk= 21091\nIGFuYWxvZ3k= 21092\nc2F5 21093\ndWZmbGU= 21094\nYm9r 21095\nIGFjaWRz 21096\nIGFjcXVpc2l0aW9u 21097\nIHZhcmlhbnRz 21098\nIHBhc3NpZXJ0 21099\n7J2064KY 21100\ncnVjdGl2ZQ== 21101\nYnJpZw== 21102\nIOOAjA== 21103\nZXBoZXI= 21104\nIHBI 21105\ndXRsaWNo 21106\nIHJlbGll 21107\ndWl0ZQ== 21108\nIHJlY2VwdGlvbg== 21109\nIGNvaA== 21110\nIFByZXA= 21111\nIGFudGljaXBhdGU= 21112\na2Vl 21113\nIGRlc2lnbmF0ZWQ= 21114\n0Y/RgtC4 21115\nIEtvcg== 21116\nIEFuaW0= 21117\nw7xobA== 21118\nIFdoaXQ= 21119\nIHVuY292ZXI= 21120\nIE1heWE= 21121\nINGC0L7Qs9C00LA= 21122\nsJU= 21123\ndXRlbmFudA== 21124\nIOyWvOs= 21125\nIGZvcmVzdHM= 21126\nIG1lbWU= 21127\nIGRpc3Rpbmd1aXNoZWQ= 21128\nIE1hcng= 21129\nIExpb24= 21130\nIHNlcnZhbnRz 21131\nIERpYW0= 21132\nIFBvbGljeQ== 21133\njbw= 21134\nIHRyaWdnZXJlZA== 21135\nYWJpbGly 21136\nIOydkQ== 21137\nIG5lZ290aWF0ZQ== 21138\nIGZleg== 21139\nIGVydw== 21140\nIHZhcmllcw== 21141\nIGplbWFuZA== 21142\nIGRpc2NoYXJnZQ== 21143\n0YHRj9GH 21144\nIFBBUg== 21145\nIEFmZmFpcnM= 21146\nIHZvdGVy 21147\nIGF0ZW4= 21148\nIGNyb2lz 21149\nb2JpbA== 21150\nIE9vcHM= 21151\nIEFyYw== 21152\nIEhlYXRoZXI= 21153\nYW5rYQ== 21154\nIHNpbXBsZXM= 21155\nzr/OvQ== 21156\nIj4= 21157\nIGNob3Jkcw== 21158\nIFNhbmRlcnM= 21159\nIOu2hOs= 21160\nQmVu 21161\nIGRhcsO8YmVy 21162\naWxpYW5z 21163\nIG9yZGVyaW5n 21164\nIE1hbmg= 21165\nIGtpbG9ncmFt 21166\nIGthcsWf 21167\nIGdyYXNw 21168\nIGdob3N0cw== 21169\nYWxlbg== 21170\nIEplZGk= 21171\nINCx0LvQuA== 21172\nIGRvd25sb2FkZWQ= 21173\nIGNvbmR1Y3Rpbmc= 21174\nIEhhaw== 21175\nIHJlc2VhcmNoZXI= 21176\naWxhbg== 21177\nZ29vZA== 21178\nIEhhbm5haA== 21179\nIGTDvMWfw7xu 21180\nIE1lc3NpYWg= 21181\ndWl0eQ== 21182\naW9uYQ== 21183\nIHByb2JhYmxl 21184\nIFlF 21185\nIGluZGVwZW5kZW50bHk= 21186\nIGJ1ZmZlcg== 21187\nYnVybg== 21188\nb3VyZA== 21189\nIE1jSw== 21190\nIGxpbmd1 21191\ndWplbXk= 21192\n0LXRgNGC 21193\nIGludHVpdGl2ZQ== 21194\nIGNyYWNrcw== 21195\nYXBwcm9wcmk= 21196\nbnR5 21197\nIGdlZW4= 21198\nIGxlbmQ= 21199\nIGNlcnRpZmljYXRpb24= 21200\nSURT 21201\ndW50ZXI= 21202\ncGVlcw== 21203\nIHRydW1w 21204\nIGJhbmtydXB0 21205\nIGZlYXM= 21206\n6Jc= 21207\nIGR1xbw= 21208\nIHZpcnVzZXM= 21209\nIDU4 21210\nZ29k 21211\nINC20LXQuw== 21212\nIHN0YWxr 21213\nSW5k 21214\nYWNoaQ== 21215\nIENG 21216\nIENvbmQ= 21217\nIHNhbmN0 21218\nIGNvbnRlbg== 21219\nIGZyZWVk 21220\nIFJU 21221\nIG1lbnRvcnM= 21222\n7KGx 21223\nIHBvcnRhYmxl 21224\nIFBhdWxv 21225\ncmFuZQ== 21226\nSEFIQQ== 21227\nIFNlY3Rpb24= 21228\n54Y= 21229\naHl1bg== 21230\nIM6tz4c= 21231\nIFB1Yg== 21232\nIEluZGVwZW5k 21233\nIGNvbXBvdW5kcw== 21234\nINGB0Ys= 21235\nIG1lc3NhZ2luZw== 21236\nIGRlZGljYXRpb24= 21237\nIG5vdGljaW5n 21238\nIGRldm90ZWQ= 21239\n0Y7RgtGB0Y8= 21240\nIHNuYWtlcw== 21241\nIGJhdHRsZWZpZWxk 21242\ncGVycw== 21243\nIGRlbGE= 21244\nOTI= 21245\nIGhhaQ== 21246\naWxsw6Q= 21247\nw6lyZXI= 21248\nZXZlcnk= 21249\nIHJlc3BvbnNpdmU= 21250\n15nXlQ== 21251\nb3Bm 21252\n6Yk= 21253\nirg= 21254\nQmVjYXVzZQ== 21255\nIHRvdXJpc20= 21256\nIOq3uOqyjA== 21257\n15XXpg== 21258\nIGNhbnM= 21259\nc3TDvHQ= 21260\nIGRvbm5l 21261\nIERpb3M= 21262\nIFViZXI= 21263\nYWN0b3J5 21264\nIG9yaWVudGVk 21265\nIEhlcm0= 21266\nIHBhdHJvbg== 21267\ndXJm 21268\nYmVp 21269\nIHByb2dyYW1h 21270\nIE9oaA== 21271\nZ2VuZXI= 21272\nIGZpc3Q= 21273\nIFdlbmR5 21274\nIGFuZGE= 21275\nIGd1ZXNzZWQ= 21276\nIGZyZWFr 21277\nIEtpbmdz 21278\nY2hvb2w= 21279\nIG9mZmxpbmU= 21280\nIEluZGlhbmE= 21281\nIEFsbGlhbmNl 21282\nIDUz 21283\nIHBhcnRpY3Vs 21284\nIEZvY3Vz 21285\nIGluaGFiaXQ= 21286\nIOqwmeydgOuNsA== 21287\nIE1jRw== 21288\nb3dza2k= 21289\nIOydtOqxtA== 21290\nIHBhxYRzdA== 21291\n0L7QvdC4 21292\naXR0YQ== 21293\nIGNvbmZpcm1hdGlvbg== 21294\nIEJyb29rbHlu 21295\nIG5vb2RsZQ== 21296\nZnVuZA== 21297\naXR1ZA== 21298\nIGdyYW5kcGFyZW50cw== 21299\nIGJhcmJlY3Vl 21300\nzrXOuc+C 21301\nIOE= 21302\nIGJhbGxvdA== 21303\nIFZldGVy 21304\nIHBpcGVz 21305\naWdpb3Vz 21306\nIEdyYXBo 21307\nZXN0ZWQ= 21308\nIOu4jOs= 21309\nIEtF 21310\nIGVpbnM= 21311\nIGhhdHJlZA== 21312\nIGRhbmc= 21313\nZWVlZQ== 21314\nIGFyY2hhZQ== 21315\nIEplc3Nl 21316\nIGRldGVjdGVk 21317\nIHNlbmk= 21318\nYnVyZ2g= 21319\nIGRpc3BsYWNlbWVudA== 21320\nIGRvcA== 21321\nIGNvbmRpdGlvbmluZw== 21322\nINC90LXRgdC60L7Qu9GM0LrQvg== 21323\nIGRpc3R1cmJpbmc= 21324\nUEg= 21325\nIHRoaW5uZXI= 21326\nIHdvdW5kZWQ= 21327\nIEN1YW5kbw== 21328\nIGN1c2hpb24= 21329\nIHdoaXRlcw== 21330\nIHByZWZlcmVuY2Vz 21331\nIOykgOu5hA== 21332\nIGthxbw= 21333\nIEdhdGU= 21334\nIFBhdGg= 21335\nZGxlcw== 21336\n4LiE4Lij 21337\naW1vcmU= 21338\nIOuztOyXrA== 21339\nIGRpc2NpcGxpbmVz 21340\n4buP 21341\nIG1lc21h 21342\nIOyDiOs= 21343\nIOyLrA== 21344\nIGdpbmc= 21345\nIHVtYnJlbGxh 21346\nSUdIVA== 21347\nIHBlbnNpb24= 21348\nIGNvbWJpbmluZw== 21349\nU1M= 21350\nIHJlY3RhbmdsZQ== 21351\n4buHdA== 21352\nIHByb3hpbQ== 21353\nIENvdw== 21354\nuIw= 21355\nIGludGVudGlvbmFs 21356\nIGRlY2lk 21357\nINGB0LrQsNC2 21358\nIFVtYQ== 21359\naWFzbQ== 21360\nYnV6 21361\nIGRlYnJpcw== 21362\nIGNhc3M= 21363\nIFByb3A= 21364\naXNrYQ== 21365\n66Cl 21366\nZXN0ZXJvbA== 21367\ndXNzaWFu 21368\n7J20656R 21369\nIHVubGltaXRlZA== 21370\nIGFkbWlyZQ== 21371\nIHRpZ2h0bHk= 21372\nIGdlbm9tZQ== 21373\nIEp1bmlvcg== 21374\ndmVuaXI= 21375\nZ3Vz 21376\nIGPEgw== 21377\nIFZsYWQ= 21378\nIO2C 21379\nIHJlbGF0aXY= 21380\naW5jaQ== 21381\nIGF1bnF1ZQ== 21382\nIEJveXM= 21383\n0YbQuNC+0L0= 21384\nIFN3aXNz 21385\nIHBoeXNpY2lhbnM= 21386\nIO2PiQ== 21387\nIFBFVA== 21388\nIHdvdW5kcw== 21389\nYWJvdXQ= 21390\nw6Bp 21391\nb256 21392\ndXJpdGllcw== 21393\nINGD0LLQuNC0 21394\nIG1lbnRhbGl0eQ== 21395\nIHZhcmlhbmNl 21396\nIHNlZ3VuZGE= 21397\nIHZvbGNhbm8= 21398\nYWxpZQ== 21399\n4KWH 21400\nIHRpbGVz 21401\nIFRlcnJ5 21402\nINin2YTZhNmH 21403\nIGNhbm9u 21404\nIHNjYXR0ZXJlZA== 21405\ncHRvbg== 21406\nIGRlZmluaXRpb25z 21407\nIGFsZ2VicmE= 21408\nb3Rlbg== 21409\nYWJsbw== 21410\naWp1YW5h 21411\nIHdyYXBwaW5n 21412\nIHNlc2FtZQ== 21413\nINC90LDRh9C40L3QsA== 21414\nIEFsZg== 21415\nINCg0L7RgdGB 21416\nb3Jubw== 21417\nIGFua2xl 21418\nIHNwZWNpYWx0eQ== 21419\nIGF0dGVtcHRpbmc= 21420\naWxpYXRpb24= 21421\nIDE5MjA= 21422\nIHBoZW5vbWVuYQ== 21423\nIFByb2R1Y3Q= 21424\nIEJ1Y2s= 21425\nIEF3dw== 21426\nc2Vlbg== 21427\nIHZvaWQ= 21428\nIEZyYW5rbGlu 21429\nIGFkdm9jYWN5 21430\nIFNlcA== 21431\nIGNvb2xlc3Q= 21432\nINGB0YDQsNC30YM= 21433\nIFF1YW5k 21434\nIDkwMA== 21435\nIFRyYWQ= 21436\nZGllcw== 21437\nIGhhc2g= 21438\nIHBvdHM= 21439\nIHNhZGx5 21440\nIHZpYWJsZQ== 21441\nIFRpZ2Vy 21442\nIE9ORQ== 21443\nIG5ldXJvbnM= 21444\nb3dhbmll 21445\nxJc= 21446\nIFNoYXI= 21447\nIExhbmRlcw== 21448\nIGNvbmZlcmVuY2Vz 21449\nIGNyZWRlbnRpYWw= 21450\nIGxpbWU= 21451\naW5lZQ== 21452\neGl0 21453\ncGF5 21454\nIGluY29ucw== 21455\nID4+Og== 21456\nIO2emOs= 21457\nIGxlc3Nlcg== 21458\nIHNwaWxs 21459\nIHByZW1pc2U= 21460\nIDM2NQ== 21461\nIEhvc3Q= 21462\nIHRvbWFy 21463\n15DXnA== 21464\n67KI 21465\nIFdoYXRz 21466\nIGxpZ2h0d2VpZ2h0 21467\nIE1hcA== 21468\nZmlh 21469\nZWxsc2NoYWZ0 21470\nIHZlbmRvcnM= 21471\ndWVzdG8= 21472\nIE1pc3Rlcg== 21473\nINCf0YDQuA== 21474\naG1h 21475\nIGludGVudGlvbmFsbHk= 21476\nIFRhbmc= 21477\nIGlkZW50aWZpY2F0aW9u 21478\nIGV0Y2V0ZXJh 21479\nIE5lZQ== 21480\nINGC0YDQuA== 21481\n6re4 21482\nIGNyeXB0b2N1cg== 21483\nIGluaGFsZQ== 21484\nIGFkZGljdA== 21485\nIG1hdQ== 21486\nINGC0LDQutCw0Y8= 21487\nIOuyhA== 21488\nIGNvbXByYXI= 21489\naWVkemllxIc= 21490\nINC+0YLQvdC+ 21491\nIGJlZ2lubmVy 21492\nINC80YPQtg== 21493\nIG9ic2M= 21494\nIGxpbWl0aW5n 21495\nYXNjdWxhcg== 21496\nIGluc3BlY3Rpb24= 21497\nYWNp 21498\nIHJlam8= 21499\nTXVz 21500\nIHphdGVu 21501\nIHN6Y3o= 21502\nIE1hZHJpZA== 21503\nIHZhcmlldGllcw== 21504\nIGVzdMOg 21505\nIFNoYWtlcw== 21506\nIGtpdHM= 21507\nIGFkbWluaXN0ZXI= 21508\nIGxhdmE= 21509\nIGfDpQ== 21510\n16rXmQ== 21511\nIFdheW5l 21512\nIGluc3RhZ3JhbQ== 21513\nIHJhdGVk 21514\ncGFwZXI= 21515\nIGJpbGQ= 21516\nIHByZXRlbmRpbmc= 21517\nIG9ic2VydmluZw== 21518\nINGB0LDQvNC+0Lw= 21519\nIHRyb3I= 21520\nIG9yZ2FuaXNtcw== 21521\nIGZhbHRh 21522\nIGhvbWV0b3du 21523\n57E= 21524\nIO2L 21525\nIGNoZWc= 21526\nIOyh 21527\nIGNvbW1h 21528\naXPDqQ== 21529\nIGxpa2VsaWhvb2Q= 21530\nYXZvcmVk 21531\nIGdlbGRp 21532\n0L3QuNC60L7Qsg== 21533\nIG1lZGlv 21534\nIGpha2ll 21535\nIEp1cA== 21536\nIGdyZWVuaG91c2U= 21537\nIHNwaXQ= 21538\n0LrQvtC1 21539\nINC60LDQtg== 21540\nIEdyYW0= 21541\nIENvbmZlcmVuY2U= 21542\nIGRlZmljaXQ= 21543\nc8Sxbg== 21544\naW5zZQ== 21545\ndcSf 21546\nIHJpY2h0 21547\nIGNvaW5jaWRlbmNl 21548\nIGV1cm9w 21549\nIGJ1dHRlcmZseQ== 21550\ncHJlYWQ= 21551\nIOyWvA== 21552\nIHdhdmVs 21553\nIEluZmlu 21554\nIFBsYW5ldA== 21555\nIHNlbGZpZQ== 21556\naWVudHJhcw== 21557\nIGFycm9n 21558\nb3Nlcg== 21559\naWRhbA== 21560\noNeX16DXlQ== 21561\nw7x0w7xu 21562\nIGZyZXNobWFu 21563\nIE1hY2hpbmU= 21564\nz4PPhA== 21565\nIERpYQ== 21566\n7J2064uk 21567\nbmVh 21568\nIGxpc3Rpbmc= 21569\nIGNvbmZpZ3VyZQ== 21570\ndXRvcg== 21571\nVXA= 21572\ndHNjaGFmdA== 21573\ncmnDqHJl 21574\nIHVwd2FyZHM= 21575\nINGF0L7Rh9GD 21576\nIHN3ZWVw 21577\nQnI= 21578\nIGV4cHJlc3Npbmc= 21579\nIHVuaGFwcHk= 21580\nIG1hbmRhdG9yeQ== 21581\nZ2VuZGVy 21582\nIEHDrQ== 21583\nIGluZGljYXRvcnM= 21584\nIG9pbHM= 21585\nbm90ZQ== 21586\nIHNlZ3Vy 21587\n0L7QttC10YI= 21588\neW5hc3R5 21589\nIGRpc3RhbmNlcw== 21590\nIG1lcmdl 21591\nQkVSVA== 21592\nIHN1cnJlbmRlcg== 21593\nIGJ1YXQ= 21594\nIEF3YXJkcw== 21595\nIHNlw7Fvcg== 21596\nb2RveA== 21597\nIGZsYXZvdXI= 21598\nIGFiZG9t 21599\nIGNvbmZpZ3Vy 21600\nODY= 21601\nIERJWQ== 21602\nIHJpZ2lk 21603\nsJg= 21604\nIGNvcnBvcmF0aW9u 21605\nIGdyb29t 21606\namF3 21607\nIE5lYXI= 21608\n0LjQu9C+ 21609\nIG9wZXJh 21610\nIElubm92 21611\n0LjRgNCw 21612\nk7E= 21613\nIHNwZWNpZmllZA== 21614\nIGNvc20= 21615\nIEZyZWVkb20= 21616\nIGNsb3du 21617\nIE5lbQ== 21618\nINCy0L7Quw== 21619\n0ZHQvQ== 21620\nIGNoYXJnZXI= 21621\n4LmB4Lil 21622\nIGluZmx1ZW50aWFs 21623\nw6RzaWRlbnQ= 21624\n6aQ= 21625\nIOyEoOs= 21626\nIHZvbHVtZXM= 21627\n5pA= 21628\nIG91dHJhcw== 21629\nIFR3aXRjaA== 21630\nIGZvdW5kaW5n 21631\nIGF3aGlsZQ== 21632\nIGNvaWw= 21633\n6rCZ 21634\nIGPhuqM= 21635\nIFRocm93 21636\nIEhlbmNl 21637\nb21tdA== 21638\nIEJlbmphbWlu 21639\n0LPQu9GP0LQ= 21640\nVGltZQ== 21641\nb2JpYw== 21642\nIG1vdXI= 21643\nIGRyZWFk 21644\nIEzDoA== 21645\nIENoaWxl 21646\nIHByZXZhbA== 21647\nIHZhaW4= 21648\nIGFydMSxaw== 21649\nIHByZXNlcnZlZA== 21650\nINC+0YLQtA== 21651\nIHdhcmVob3VzZQ== 21652\nIGJlc3Rl 21653\nIFNldmVyYWw= 21654\nIFNpdHVhdGlvbg== 21655\nIGNhcmRib2FyZA== 21656\nVG9k 21657\nZXJuYQ== 21658\nIGdhcmFudA== 21659\nIGdlc3R1cmU= 21660\nIGhlbg== 21661\nIHNwZWxsaW5n 21662\nb3NleHVhbA== 21663\nIGFubmU= 21664\nIG1pY2U= 21665\nIE1laW5l 21666\nY2FyZA== 21667\nIHJlYmVsbA== 21668\nIGNlcnRv 21669\nIOycoOs= 21670\nIHZlcnNjaGllZA== 21671\nIEJvcw== 21672\nIGludmVudGlvbg== 21673\nIHRyemU= 21674\nIG1hbmnDqHJl 21675\nIENoYWQ= 21676\nIHNwcmU= 21677\nIG9yZ2FuaXNhdGlvbnM= 21678\nIHBvb3JseQ== 21679\nIGFudGVyaW9y 21680\nIHN0YWly 21681\n0LrRgA== 21682\nIGF0b21pYw== 21683\nIHN5bXBhdGg= 21684\nIGNvbnRpbnVhbGx5 21685\nIGtsZWluZQ== 21686\nw6h0ZQ== 21687\n0LjRiQ== 21688\nzr/Pgg== 21689\ncGV1dA== 21690\nIHJlcG9zaXQ= 21691\nIGVudHJh 21692\nRW0= 21693\nIGZpbmFuY2luZw== 21694\nINC80L3QvtCz 21695\nIHRoZXNpcw== 21696\nIENvbXB1dGVy 21697\nZWF1 21698\nIFRyZWU= 21699\nIGJyaWRl 21700\nb25zaWV1cg== 21701\nc2hpcmU= 21702\nd2lj 21703\nREU= 21704\nIOyImOs= 21705\nIGFjb20= 21706\nIFBP 21707\nZXJzY2g= 21708\nINC/0L7QvNC+0Yk= 21709\nIEFybWVu 21710\nIOyjvQ== 21711\nIHpvcg== 21712\nIHByaW50cw== 21713\nIERhc3M= 21714\nIGR1cmFibGU= 21715\nIFRyYW5zcG9ydA== 21716\n7J6Q6rCA 21717\nINC70LXQsw== 21718\nIGTDqXQ= 21719\nw7RsZQ== 21720\nYW1vdXM= 21721\nWU4= 21722\nIGNsaWZm 21723\nIGdyYW1tYXI= 21724\nINCf0L7RjdGC0L7QvNGD 21725\nIGzDoG0= 21726\nZXNjaA== 21727\nIG1pc2VyYWJsZQ== 21728\nIHZvbHRz 21729\nIENhZA== 21730\ndWthbg== 21731\n0YLQuNCy 21732\ncnVzdA== 21733\nIOyYrOudvA== 21734\nIHZlcms= 21735\nIGNoaWNrZW5z 21736\nIFlvbw== 21737\nIG91dGZpdHM= 21738\nY29kZQ== 21739\nIGhpZXJhcmNoeQ== 21740\nbmV0ZXM= 21741\nIGNvdW50ZXJwYXJ0 21742\nIHTDtGk= 21743\nIHRlZA== 21744\nIEJhcnQ= 21745\nIOudvA== 21746\nIEdlbmF1 21747\nIGluY29taW5n 21748\nIEFCQw== 21749\ncmlxdWU= 21750\nINC+0YLQvw== 21751\ncXVhbA== 21752\nIGluY2VudGl2ZQ== 21753\nIGlocmVu 21754\n16DXmQ== 21755\nbG9l 21756\nIDE5MzA= 21757\nIGJhcmc= 21758\nIGRpY3Rpb24= 21759\nIMO2bmNl 21760\nSU5T 21761\nIHJlaA== 21762\naXNpYWo= 21763\nbW91dGg= 21764\nIHNjb3Jpbmc= 21765\nbMSxaw== 21766\nIOyVhOyjvA== 21767\nT1JJQQ== 21768\nIEVzdGFkb3M= 21769\nIGNvbXBhbmlvbg== 21770\nIGFzc2VtYmxl 21771\nIHB1bmlzaGVk 21772\nIGl0YWw= 21773\nIHByZXZlbnRz 21774\naXN0ZXM= 21775\nIEtlbnR1Y2t5 21776\nIGxvY2F0ZQ== 21777\nIGZhc3Rpbmc= 21778\ng4A= 21779\nIFNlYg== 21780\nIENyb3du 21781\nb3BpYQ== 21782\nIHdoaXA= 21783\ndXN6 21784\n0LrQsNC80Lg= 21785\nIGRhdGFiYXNlcw== 21786\nIHByb3NlYw== 21787\nIDE5OTc= 21788\nIOyCtOynnQ== 21789\nIFNvbGFy 21790\nIFB1ZXM= 21791\nIFplbg== 21792\nb2xsbw== 21793\nIEd1cnU= 21794\nIHNxdWVleg== 21795\nINCX0LA= 21796\nIMSN 21797\nY2VwdGlvbnM= 21798\nY2Nh 21799\naXphYmxl 21800\nbWFuZA== 21801\nIGJyZWFrdGhyb3VnaA== 21802\nIHRhYmxlc3Bvb24= 21803\nIFNFQw== 21804\naWto 21805\nIFPDo28= 21806\nINC/0LvQvg== 21807\nYW1lbg== 21808\nIHByYWM= 21809\nIGRhcmxpbmc= 21810\nIHRhbGxlcg== 21811\nIHJlbmRlcmluZw== 21812\nIOyasOumrOqwgA== 21813\nIM+EzrfPgg== 21814\nIG3Dow== 21815\nIGVzb3M= 21816\ndWVyZG8= 21817\nINGB0YfQuNGC 21818\nYWxsZXI= 21819\n7JeI7Ja07JqU 21820\nIG1pbGxvbmVz 21821\nbGVyaW4= 21822\nIHBlZ2Fy 21823\nb25uZQ== 21824\nIGVucm9sbG1lbnQ= 21825\nIGxpZWd0 21826\nIGJvYQ== 21827\nd2nEmQ== 21828\nYnNw 21829\nIGN5Y2xpbmc= 21830\nIEJlcm5pZQ== 21831\nIDE5ODk= 21832\nINC00LDQu9GM 21833\nIERha290YQ== 21834\nINGB0LLRj9C3 21835\nIENQ 21836\nIHN0YXJl 21837\n7YKk 21838\nIHByb3NwZXJpdHk= 21839\nIGFycmFuZ2VtZW50cw== 21840\nIGFycml2aW5n 21841\nbcOk 21842\nIGtheWFr 21843\naXB0 21844\nIHBhcmRvbg== 21845\nIHJlbGF0 21846\nIHZlcnN0ZQ== 21847\nIEZpZw== 21848\nIGZvaWw= 21849\nIFRhbGtpbmc= 21850\ncGVhcmU= 21851\nIG5vaQ== 21852\nINC/0YDQuNGI 21853\nIGhvY2tleQ== 21854\nIGFkbw== 21855\nIE9VVA== 21856\nNjc= 21857\nIGhvcm1vbmVz 21858\nIEF2ZW51ZQ== 21859\nIFN1cGVybWFu 21860\nIHByZXNjcmlwdGlvbg== 21861\ndWJlcm5ldGVz 21862\nQ0w= 21863\nb3RpdmU= 21864\nTklT 21865\naWVuZW4= 21866\nIHNhZG5lc3M= 21867\nIFZpdA== 21868\nVHk= 21869\nIHN0YXJ0ZXI= 21870\nIGJlZGU= 21871\nIGZvdW5kYXRpb25z 21872\nIHNvcmU= 21873\n0YnQtdGB0YLQsg== 21874\n7Jqw6w== 21875\nINGH0YPQsg== 21876\nbGluaw== 21877\nIG1hbmV1 21878\nd29ya2luZw== 21879\nw6Bu 21880\nIEF0dGFjaw== 21881\nIENhcnQ= 21882\ndmVpcw== 21883\nIFJlc3A= 21884\nZW5zaW5n 21885\nIOyii+yVhOyalA== 21886\nIGVzY3VjaA== 21887\nIFJOQQ== 21888\ngrQ= 21889\nIGFkb3A= 21890\nIGJlbmRpbmc= 21891\n2LnYrw== 21892\nIG1hbmFnZXM= 21893\ndXNw 21894\nIHRhcnQ= 21895\nIHJvdXRlcg== 21896\nQm8= 21897\nIGVzdGFibGlzaGluZw== 21898\nIGJhbGFuY2luZw== 21899\nIGF0aGxldGlj 21900\nIFNsbw== 21901\nIGZpbGxz 21902\nINC90LDQsQ== 21903\nINC00LDQuw== 21904\nIHBvc3Nv 21905\nIFZpZWxlbg== 21906\nIGNyaXRpY3M= 21907\nIGxhd3N1aXQ= 21908\nIElzYWFj 21909\nINGE0LjQu9GM0Lw= 21910\nIHRyYXM= 21911\nIHByYXc= 21912\nIENyYXp5 21913\nIG5ldQ== 21914\nIGt1bGw= 21915\nIHR1bW9y 21916\nIEFQUA== 21917\nZ2F0ZQ== 21918\nIEFSRQ== 21919\nOTg= 21920\nIFN0ZWFt 21921\nIGZ1Y2tlZA== 21922\nbGFnZQ== 21923\nIOKZrA== 21924\nIE1E 21925\nZnk= 21926\nIHNoZWxscw== 21927\nIFNlZW1z 21928\naXplcnM= 21929\nIHJhbmdlcw== 21930\nIEFudG9uaW8= 21931\nQVRJT04= 21932\nIEJhYmE= 21933\nIOyDiQ== 21934\na3Vu 21935\nIHByYXllZA== 21936\n0YDRjw== 21937\nINC/0YDQvtGC0LjQsg== 21938\nIHNlYXM= 21939\nYnVyeQ== 21940\nINeU16k= 21941\nIHRyYWl0 21942\nIERlcGVuZGluZw== 21943\nIGRyZQ== 21944\nIGvDtm5udA== 21945\n0YbRgw== 21946\nIGxpcHN0aWNr 21947\nZWV6 21948\nINC/0YDQuNC80LXRgA== 21949\nIGFzc2lnbm1lbnRz 21950\nQm9i 21951\nIG1ldGFscw== 21952\nIHNwZWNpYWxseQ== 21953\nIOyYiOs= 21954\nIMWh 21955\nIHZpc3Rh 21956\nIM6s 21957\nIHR3aW5z 21958\nIG5vdGFibGU= 21959\nIFNhdQ== 21960\nIGTDqXZlbG9w 21961\nIMOnZWs= 21962\nIHBvbHlub20= 21963\nYXZhbQ== 21964\nIHRhbWLDqQ== 21965\n0L7QvdC+0Lw= 21966\nIHBsYXNtYQ== 21967\nIGVmZWN0 21968\nIGzDpG5n 21969\nIGNhc2k= 21970\n0YHQsA== 21971\nxLFtxLE= 21972\nk6TsnYA= 21973\nIGxhYm91cg== 21974\nb3NzZW4= 21975\nIFB1bg== 21976\ncmlm 21977\nIGRvc2Vz 21978\nIG9wZXJhdGVz 21979\n0LjQu9C70Lg= 21980\nIGphYXI= 21981\nc3Rhdw== 21982\nIOyCrOuekQ== 21983\nIGF0bQ== 21984\nIHByb3RlY3Rz 21985\nIGltcGVk 21986\nSE8= 21987\nIGNpbWE= 21988\nIHRvY2g= 21989\nYWJpcw== 21990\nIHNlbmRv 21991\nbGF1cw== 21992\nIGN1cmw= 21993\nIE51bQ== 21994\nIHNwb25zb3Jz 21995\nIGTDqWJ1dA== 21996\nIEFsZXhh 21997\nIELDvHI= 21998\nIEFtZXI= 21999\nIGNvcGU= 22000\nINC40LfQsg== 22001\namFs 22002\nIDE5OTU= 22003\nYXBhdA== 22004\ncmVzc2U= 22005\nIFByaXpl 22006\nIENsYWlyZQ== 22007\nIEJyYW5kb24= 22008\nIHdzenlzdGtv 22009\nIHZhbHVlZA== 22010\n4LiZ4Liw 22011\nIHNlY3Q= 22012\nIHNlY3JldGx5 22013\nIGRpYW1vbmRz 22014\nIEV2YW4= 22015\nIFJQRw== 22016\niOuPhA== 22017\nIFVuaXZlcnNhbA== 22018\nIGRvdWJ0cw== 22019\nIFBpbg== 22020\nd2nEhXo= 22021\nmqk= 22022\nIGFsYm8= 22023\nIGJyYXVjaHQ= 22024\nQVVM 22025\nIE1vYmlsZQ== 22026\nZ3JhZGVz 22027\nIHNjaGVt 22028\nd2h5 22029\nIE5pY2h0 22030\ncGk= 22031\nZ2xl 22032\nIGNob3J1cw== 22033\nIGdseQ== 22034\nIHJlaW5mb3JjZQ== 22035\nIG11ZmY= 22036\nIFNoZW4= 22037\nIEhvbGE= 22038\n0YPQsw== 22039\ndmlkZW1tZW50 22040\ndmlhbA== 22041\nYWNpb3Vz 22042\nbGFpbWVk 22043\nIFJpY28= 22044\nIHZlZ2c= 22045\nIGlsbHVzdHJhdGlvbg== 22046\nIEJ1dHRlcg== 22047\nb3dhZA== 22048\nIGV1eA== 22049\nIGVuZmFudHM= 22050\nIExlYWRlcg== 22051\nIFZpbGxhZ2U= 22052\nZXRpY2FsbHk= 22053\n2YbZig== 22054\nIHN0ZXc= 22055\nIHN1cnByaXNlcw== 22056\nIGN1ZQ== 22057\nIEdyYW5kbWE= 22058\nIENlbHNpdXM= 22059\nIFJpY2h0 22060\nZW5j 22061\nIHBldGl0aW9u 22062\nIGhlcmI= 22063\nIHdpY2tlZA== 22064\nIHNjaGxl 22065\nb2NhbHk= 22066\nIHRyYW5zZg== 22067\nIHRva2Vucw== 22068\nIEdyYXk= 22069\nIEJCQw== 22070\nSUs= 22071\nIDE1MDA= 22072\nem4= 22073\nIE5ldg== 22074\nIGtveQ== 22075\nIHphcg== 22076\nIGJ1bGxzaGl0 22077\nIENvbG9tYmlh 22078\ndWxhdGl2ZQ== 22079\nIHdpZGVzcHJlYWQ= 22080\neWVjdA== 22081\na2l0 22082\nIGVtcHJlc2E= 22083\nIG5vdXI= 22084\nIGJ1cm5z 22085\nYXRpbg== 22086\nYWlyZWQ= 22087\nIHJldm9sdXRpb25hcnk= 22088\nINCz0L7QtNGD 22089\nIExvZ2Fu 22090\nIDE5OTY= 22091\nIEdyYWhhbQ== 22092\ncmVi 22093\nIE5IUw== 22094\nIGNvc3R1bWVz 22095\nIG5hd2V0 22096\nIGxvdmVycw== 22097\nIEx1Y3k= 22098\nIEluZGlnZW5vdXM= 22099\n7ZWY6riw 22100\nIGltbXVuaXR5 22101\npbTr 22102\ndWl0bw== 22103\nIGV4Y2Vzc2l2ZQ== 22104\nIGRvbmF0aW9ucw== 22105\nINeU16g= 22106\nIOyyqw== 22107\nIGRyeWluZw== 22108\nbWVsb24= 22109\nIHN1cnZleXM= 22110\nIOustOyKqA== 22111\nYWFh 22112\nIHByb2Jl 22113\nYW5jaWFs 22114\nIGxvdWRlcg== 22115\nIGhvdGVscw== 22116\nw7zEnw== 22117\nYWduZXI= 22118\nIG9yaWdpbnM= 22119\nIOuniOyngOuniQ== 22120\nICoq 22121\nIHN0cmFuZ2Vycw== 22122\nIEhhdXM= 22123\nY29tZWQ= 22124\nIGFudGhyb3A= 22125\nIHVzbw== 22126\nIOyVhOyngQ== 22127\nIFl1YW4= 22128\nIO2VhOyalA== 22129\ncGxlcg== 22130\ncmVzc2l2ZQ== 22131\nIHNwcmF3 22132\nIFN0ZXc= 22133\nIDE5OTQ= 22134\nIGVsZGVycw== 22135\nIG1laW5lbg== 22136\nIGp1bnQ= 22137\nIGFjb3VzdA== 22138\nIFdvaG4= 22139\nIGJhbmFuYXM= 22140\nIHByb2plY3Rpb24= 22141\nIFN0aWNr 22142\nbGVndA== 22143\nc3BlZWQ= 22144\nIGPFqW5n 22145\nIFdvcnQ= 22146\nIEJhbHRpbW9yZQ== 22147\nINGG0LXQuw== 22148\nIGR1bm5v 22149\nPyw= 22150\nIExvY2Fs 22151\nb3N0bw== 22152\n0K0= 22153\n0L7QtNCw 22154\nIFBvcnR1Z3Vlc2U= 22155\nIHRoZWlycw== 22156\nIGTDqW0= 22157\nIGRyYXVm 22158\nIEJ1ZGRoaXN0 22159\nZXJ0YQ== 22160\nR2U= 22161\nIGNhcnJvdA== 22162\nIFdvbmRlcmZ1bA== 22163\nIHNvYWs= 22164\nIGNoYWlybWFu 22165\nZ2dp 22166\nSUNB 22167\nZnJpZWQ= 22168\nIGZsaWNr 22169\nIFRocm91Z2hvdXQ= 22170\nIOyasOs= 22171\nIGNvdWdo 22172\nIGZsdWZmeQ== 22173\nc2Nob29s 22174\nIHJpcHBlZA== 22175\nLS0tLS0tLS0= 22176\nIFp1a3VuZnQ= 22177\nINC90LXQsQ== 22178\nIHN0bw== 22179\nIEJP 22180\ncGVudA== 22181\nIExhd3JlbmNl 22182\nz4nPgg== 22183\nc3RpY2tz 22184\nIEVpbnM= 22185\nINGA0Ys= 22186\nIFN0cm9uZw== 22187\nIGNhcmFtZWw= 22188\nIHNwaXRl 22189\nYXphcg== 22190\nIGNyaXRpY2FsbHk= 22191\nIG9icmE= 22192\nb3dpdHo= 22193\nIFpvbmU= 22194\nINGA0LXQug== 22195\nIHN1Zw== 22196\nYXJkZWQ= 22197\nIGfDrA== 22198\nZmZlbnRsaWNo 22199\nYW5jaGU= 22200\n2J8= 22201\nYXN0aWNhbGx5 22202\n7J286w== 22203\n0LvQsNCy 22204\nIHNpbXBsZXN0 22205\nIEZyaWVuZA== 22206\nIHF1ZWxsbw== 22207\nIGFtYml0aW9u 22208\nIGFiYmlhbW8= 22209\nINGE0L7RgNC8 22210\nIEVzc2E= 22211\nIGVkdWNhdG9ycw== 22212\nIHN0YXRpc3RpY2Fs 22213\nIGNoYW5nZXI= 22214\nIGF0YXU= 22215\nw6l0YWlz 22216\nIFNoYWtlc3BlYXJl 22217\n65CY 22218\nIHRyaWdnZXJz 22219\nIHJlYWxpeg== 22220\nIGNlbHVp 22221\nd2hlZWw= 22222\nIGxveWFsdHk= 22223\nIHNjcmVhbXM= 22224\na2Vocg== 22225\nIE1lZ2E= 22226\nZWFzdA== 22227\nIHRvcHM= 22228\nIFRvdGFsbHk= 22229\nb3VudGFpbg== 22230\nbG9yZA== 22231\nIHZpb2xhdGlvbg== 22232\nIEdB 22233\nIG5pY2Vy 22234\nIEZyZXNo 22235\nIE1lbGlzc2E= 22236\nZnVuY3Rpb24= 22237\nIHJhcGU= 22238\nIGV4Y2VwdGlvbnM= 22239\nIHNpbGljb24= 22240\nIGxpYmVydHk= 22241\nIGhvdXNlaG9sZHM= 22242\nIENB 22243\nINCe0LE= 22244\nIGxpYg== 22245\nnow= 22246\nY2lmaWM= 22247\nIHRyb3BpY2Fs 22248\nIGludmVzdGlnYXRpbmc= 22249\nSEQ= 22250\nIGFkYXB0ZXI= 22251\nIFBpdHQ= 22252\nYW5jaWE= 22253\nIFNoZWxs 22254\nZnJpZW5kbHk= 22255\nIGNvbmNsdXNpb25z 22256\nIHR1cnRsZQ== 22257\nIGRlY29tcA== 22258\nIGFuaW1hdGlvbnM= 22259\nINGB0LXQug== 22260\naW5zaQ== 22261\nIHJldGVudGlvbg== 22262\na2ll 22263\nIGluamVjdGlvbg== 22264\nIE1hZGlzb24= 22265\n7LCw 22266\nIHZpZW50 22267\nIHZhcmllZA== 22268\nIHZpb2xpbg== 22269\nIEJpbA== 22270\nIGx1Y2tpbHk= 22271\nIGh0dA== 22272\nbMOk 22273\nIHJhbmNo 22274\nIHPDs2xv 22275\n7JWF 22276\nIERlcmVr 22277\nIFNjcmlwdHVyZQ== 22278\n0L7RgNCw 22279\nIGNsYXNzcm9vbXM= 22280\nYXZpbA== 22281\nZm9ybWVk 22282\nIGJlZm9yZWhhbmQ= 22283\nIEdlbQ== 22284\ncHJlY2g= 22285\nIGxpbg== 22286\nIGdyZWVucw== 22287\n0YbQtdCy 22288\nIE1lcmNlZGVz 22289\nIGRyb3VnaHQ= 22290\nZ2FzcHM= 22291\nIGFib3J0aW9u 22292\nIHRlcnJpYmx5 22293\nIHNwb3PDs2I= 22294\nIHNlY3VyZWQ= 22295\nIGF0csOhcw== 22296\nIHdhdmVsZW5ndGg= 22297\nIGdyYWlucw== 22298\nZWN0aXZl 22299\nIHNwYWNlY3JhZnQ= 22300\nIHRvdXJz 22301\nIHByb2Zlcw== 22302\nIHN1cmdlb24= 22303\nIFBpZQ== 22304\nIGlkZWFsbHk= 22305\nYXJuZXI= 22306\nVVA= 22307\nb3BhcmQ= 22308\nc2Nl 22309\nIGltbWVuc2U= 22310\nIE9ydA== 22311\ncm9sbGVy 22312\nIERhbGxhcw== 22313\nIE5pY2hvbGFz 22314\nIHN1bGY= 22315\nIFRveW90YQ== 22316\nIHF1YW50aXRpZXM= 22317\nY2VhbnM= 22318\nIGN1aQ== 22319\nYW7Dp2E= 22320\nIENBTg== 22321\naXR6ZXJsYW5k 22322\nIHpvdQ== 22323\nIEN5YmVy 22324\nbGVnZW4= 22325\nIEluaXQ= 22326\nZWR1 22327\nIGFwZXJ0 22328\nIGFkamFj 22329\nb3V2 22330\ncnM= 22331\nIGNhYmJhZ2U= 22332\nIHdoZWVsY2hhaXI= 22333\naW55bA== 22334\nIER5bmFt 22335\nIOyVhOuLiOudvA== 22336\nIGxpbmc= 22337\naGw= 22338\nINC80L7Qs9GD 22339\nIGNyaXNw 22340\nIG1pag== 22341\nIGR1Zw== 22342\nbmlu 22343\nIGJsb3Nz 22344\nIGJlbG9uZ2luZw== 22345\nIGxvdWRseQ== 22346\nIG1pbmVyYWxz 22347\nIGNvbmNsdWRlZA== 22348\nIHNlYXJjaGVk 22349\nOTY= 22350\nIE1lZXQ= 22351\nIFNFTw== 22352\nINCh0Lo= 22353\nIEhvYg== 22354\nb3R0YQ== 22355\nIHByb3BhZ2FuZGE= 22356\nIGNpbm5hbW9u 22357\nIGh1bnRlcg== 22358\nIGdlbWVpbnM= 22359\nIHNjdWxwdHVyZQ== 22360\ndWxzaW9u 22361\nIHbDpGw= 22362\nIG1hZ2F6aW5lcw== 22363\nIGNvbnRyb3ZlcnN5 22364\nIHNlcXVlbmNlcw== 22365\nIO2ajA== 22366\nIGRlbGV0ZWQ= 22367\nkOuPhA== 22368\nIHZhcnlpbmc= 22369\nIG1vdW50aW5n 22370\nIGFmZmFpcg== 22371\nIHBhdGh3YXlz 22372\n5qY= 22373\nIGRpZ28= 22374\nINC00L7Qug== 22375\nQWxleA== 22376\nIHRvYmFjY28= 22377\nIENW 22378\nIGJvdGhlcmVk 22379\nIGFtYmllbnQ= 22380\naW5reQ== 22381\nIFNM 22382\nIGhhdGVz 22383\nIGplxbxlbGk= 22384\nIGNvbmdyZWc= 22385\nIGVsYXM= 22386\nIGRldXRz 22387\nIFN0dWRpb3M= 22388\nY2jEmQ== 22389\nIGRvY3VtZW50ZWQ= 22390\nIENydXo= 22391\nIExlbg== 22392\nIERvdWdsYXM= 22393\nIFBvcnR1Z2Fs 22394\nZW50aQ== 22395\nIHNwb3VzZQ== 22396\nIGFuYWx5cw== 22397\nYXZpYQ== 22398\nIGVkaXRlZA== 22399\nIGzhuqFp 22400\nYnVpbHQ= 22401\nIHZpbGxl 22402\nYWRvcmE= 22403\nIGJyYWNlbGV0 22404\nIHN1c2hp 22405\nIHBt 22406\nIHRyYWlscw== 22407\nIGx1Zw== 22408\nIMO2dmVy 22409\nIHNvcnJvdw== 22410\nIGNvbG9ueQ== 22411\nYWRveA== 22412\nIHNlcmll 22413\nYW55YWs= 22414\nINi3 22415\nIEd1bGY= 22416\nIFBW 22417\nIFNhbXVlbA== 22418\nIEtpdA== 22419\nIFJhbA== 22420\nb250aW4= 22421\nZXhwbA== 22422\nIGVudHJpZXM= 22423\nIGFjdGl2aXN0cw== 22424\nUHM= 22425\nIHNhbnQ= 22426\nINGC0L7Rhw== 22427\nIEJydW5v 22428\na2VsZXk= 22429\nIHR1dHRv 22430\n6ZQ= 22431\nIHZpbnRhZ2U= 22432\nIHRlcnJpZmllZA== 22433\nINC/0L7RhQ== 22434\ndXNpdmU= 22435\nb3dlcnM= 22436\n0LDQudGC 22437\n64+Z 22438\nIHR3aXN0ZWQ= 22439\nIFRob3VnaHQ= 22440\nIHRhaA== 22441\nIHNocmluaw== 22442\nIHNoZWVy 22443\nbGl0 22444\nIGRhbGFt 22445\nIGRpYg== 22446\nIHZhcmQ= 22447\nb3dhbmU= 22448\nIGRvYnI= 22449\nIFJlbmE= 22450\nINGB0LLQvtGO 22451\nIHBhw61zZXM= 22452\nIEVyYQ== 22453\nIEJVVA== 22454\nc2lnaHM= 22455\nIOq3uOqxsA== 22456\nIGdyb8OfZW4= 22457\nIOu5qOumrA== 22458\nIG5lcnZlcw== 22459\nIGNvbnN0aXQ= 22460\nIHByZW9jdXA= 22461\nIEdheQ== 22462\nIFh1 22463\na2VlcGVy 22464\naGV1cmU= 22465\nLi4p 22466\nIENhbG0= 22467\nIFVuaWRvcw== 22468\nIOydtOqygw== 22469\nIEFxdWk= 22470\nIOygnOydvA== 22471\nZMSxcg== 22472\n7KaY 22473\neW91cg== 22474\nINGN0YLQuNC8 22475\nMjAyMA== 22476\nIHJ1bmQ= 22477\nIEhP 22478\nIENhdGhlcmluZQ== 22479\naWVsaQ== 22480\nIGZ1c2lvbg== 22481\nIGlkZW9sb2d5 22482\nIGZvcmFt 22483\nc2hhcGVk 22484\nIO2bhOs= 22485\nIHd0 22486\nIHJldHI= 22487\nIHByw6lj 22488\nIOqwkQ== 22489\nIG9wZW5seQ== 22490\ndml0eQ== 22491\n6rWs7JqU 22492\nIG9ic3RhY2xl 22493\nIGJvbw== 22494\nIHNlaW5lcg== 22495\naWNvcm4= 22496\nIGVpZ2VubGlqaw== 22497\nIGhlYWRlcg== 22498\nYXJlbW9z 22499\nIHNvZnRlcg== 22500\nINCf0L7QtA== 22501\nIHByZWp1ZA== 22502\nIGRlZmluZXM= 22503\naWVydGU= 22504\nIGJsZW5kaW5n 22505\nIGJlbGlldmVycw== 22506\nIFdvY2hlbg== 22507\nINC90LjQutCw0Lo= 22508\nINCa0L7Qs9C00LA= 22509\nIFR5cGljYWxseQ== 22510\nIO2BrA== 22511\nY2lvcw== 22512\nIG1pc3NpbGVz 22513\nIHNwb25nZQ== 22514\nIEtpdGNoZW4= 22515\nIHRyZW4= 22516\nbmluZ2Vu 22517\nIHNjcmFw 22518\nIHNlcmFpdA== 22519\ntOyg 22520\n57k= 22521\nIOuwmOs= 22522\nIHJlc3RvcmVk 22523\nIHByenlrxYJhZA== 22524\nIEt1YmVybmV0ZXM= 22525\nIHNhaXQ= 22526\nIHV3 22527\nIGVuYWJsaW5n 22528\nIHRyYXZlcnM= 22529\nYW1wcw== 22530\nIE9NRw== 22531\nZW5zb3I= 22532\nIHpvc3Rh 22533\nIHByb25vdW5jZWQ= 22534\nQW5n 22535\nbm9ybWFs 22536\nIGVjb25vbWllcw== 22537\ndGlu 22538\nIENoYW1waW9u 22539\naXplbg== 22540\nIGFyYmVpdGVu 22541\nIEdvc3BlbA== 22542\nIFp1 22543\nbmdh 22544\nIGxpdGVyYWN5 22545\nIE1hbnM= 22546\nIGNpcmN1bGF0aW9u 22547\nIGFkYXA= 22548\nIFRvdGFs 22549\nIG1lcmVrYQ== 22550\nIG9sYWNhaw== 22551\n0YHRgtCw0YLQuA== 22552\nSmFjaw== 22553\nIG11bmQ= 22554\nIHRoaWVm 22555\nYmllcw== 22556\nIOqygQ== 22557\nYXF1ZQ== 22558\nINqp24w= 22559\nIFNjYXI= 22560\n5bI= 22561\nIGFib2w= 22562\nIGRldm90ZQ== 22563\nIDAx 22564\nIHNpdHRlbg== 22565\nIFZpc3VhbA== 22566\nd2Vlaw== 22567\nc29tZQ== 22568\naW5ndA== 22569\nIGpvdXJuYWxpc20= 22570\nIEhpcg== 22571\nIEJhY2hlbG9y 22572\naW5lcnk= 22573\nw5xORA== 22574\nIGNvbG9yaW5n 22575\nIENyaXN0 22576\nIGNlbGVicml0aWVz 22577\nINGH0LjRgQ== 22578\nIENyaXQ= 22579\nIGRpZmZlcmVudGlhdGU= 22580\nINCc0L3QtQ== 22581\nZWxpbQ== 22582\nIHNlYWZvb2Q= 22583\nIGFsZ3VtYXM= 22584\nb3RoZXJhcHk= 22585\nIGdsYXVi 22586\nIGFyYml0cmFyeQ== 22587\nZ2Vucw== 22588\nINCx0YPQtNC10Lw= 22589\nIHRhdg== 22590\nIGNyZWFteQ== 22591\nIENvdW50cnk= 22592\nYcOx 22593\n0LzQtdGC 22594\nIGhpbnRlcg== 22595\nIG1pc20= 22596\nIGlsbHVzdHJhdGU= 22597\nw5xORE5JUw== 22598\nIGRlY3JlYXNpbmc= 22599\nIHdlbmlnZXI= 22600\nQUtJ 22601\naXhvbg== 22602\nINC90LXQuQ== 22603\nIGZhdHRv 22604\nIG5lcmQ= 22605\n56A= 22606\nIGJpdHRl 22607\nUGVy 22608\nIHRhbmU= 22609\nIGfDtno= 22610\nIGZvcnRl 22611\nIEV5 22612\nINC90LDQstC10YA= 22613\nIFdvcmRQcmVzcw== 22614\nIE1pcw== 22615\nxa8= 22616\nesOkaA== 22617\nIGludMOpcmVzcw== 22618\nb3NhdXJz 22619\nIEZhbGxz 22620\nIG5lc3Nh 22621\nOTc= 22622\nIG11c2V1bXM= 22623\nIGNvcnJlc3BvbmRz 22624\nIHNpbmdz 22625\nZm91cg== 22626\nIGVkZXI= 22627\nIENvbW11bmlzdA== 22628\nb2E= 22629\nbmVr 22630\nIFdITw== 22631\nIGNvcnBv 22632\nIG1lc3Npbmc= 22633\nz4TOsc65 22634\nIGJydXNoZXM= 22635\nIGJpc2M= 22636\nIEFyYmVpdHM= 22637\nIFRheA== 22638\nIHNlbGU= 22639\nIGZsYWdz 22640\nb3VwZQ== 22641\nIGFudGljaXBhdGVk 22642\nIE5hZA== 22643\nIHBvdXJlZA== 22644\nIG1s 22645\nIGxsYW1h 22646\nIHZpc3VhbGl6ZQ== 22647\nIGxpc3RlbmVycw== 22648\n2YTZgw== 22649\nYWx0ZW4= 22650\nTWljaGFlbA== 22651\nIGNvc8Os 22652\n1aHV 22653\nb3B1cw== 22654\nIO2VtOyjvA== 22655\nIGhpa2U= 22656\nIEF0dG9ybmV5 22657\nIEhpbGxhcnk= 22658\ndWRlZA== 22659\nIO2VmOyngOunjA== 22660\nIGRvdmU= 22661\nIHN0b3Jtcw== 22662\n0LDQutGB 22663\nIGRvY3RyaW5l 22664\nIGhleA== 22665\naWtz 22666\nbm/Fm8SH 22667\nIHNjcmlwdHM= 22668\nIM60zrXOvQ== 22669\nINGN0YLQuNGF 22670\nINCG 22671\nYWJlcg== 22672\nIFZhcw== 22673\nIGNlbnRpbWV0ZXJz 22674\n157XlA== 22675\n0L3QuNCx 22676\nIHJpZGVycw== 22677\nIFRyaWI= 22678\nIHRha8W8ZQ== 22679\nIG5vdW4= 22680\nIGljb25z 22681\nIHNvbGVseQ== 22682\nbWluZGVk 22683\nIGRpc3Bvbg== 22684\nIFN3aXR6ZXJsYW5k 22685\nIGNsdXN0ZXJz 22686\nIHF1ZWRh 22687\nYWlsaW5n 22688\nIG1hbmdh 22689\nIDY4 22690\nhIg= 22691\nIHRldA== 22692\nZ2lucw== 22693\naGF1cw== 22694\nIE9Q 22695\nb3RlZA== 22696\nIG5vdXZlYXU= 22697\nQUxMWQ== 22698\n2YjYrw== 22699\nw7Ju 22700\nIG1vcnRhbGl0eQ== 22701\nIEdpdEh1Yg== 22702\nZHJvcA== 22703\nIGRpc2d1 22704\nIHJlY29t 22705\nIGxvY2Fscw== 22706\nIGhvbWVtYWRl 22707\nYW1iYQ== 22708\nIHByb251bmNpYXRpb24= 22709\nIGFscGhhYmV0 22710\n0LDQvdGM 22711\nb3dhbnk= 22712\naXJhcw== 22713\naWRlbmN5 22714\nT01F 22715\nINGA0LDRgdGB 22716\nYXJhaw== 22717\ndmlhbWVudGU= 22718\nIG5vbnByb2ZpdA== 22719\nIFlvdVR1YmVy 22720\nIHBhcmVudGg= 22721\nIEJvbw== 22722\ndmF0 22723\nIFN0aXI= 22724\nIHByZWNpcA== 22725\nIGFudHM= 22726\nIGFsbHk= 22727\nIE1hb3Jp 22728\nIOuMgO2VnA== 22729\nb2dlbmU= 22730\nIExhYm91cg== 22731\nYXJldHRl 22732\nIHJlY3ljbGluZw== 22733\nZW5zYQ== 22734\nIHB1cnN1aXQ= 22735\nIHNhaw== 22736\nINCX0LTQtdGB0Yw= 22737\nIHRvbGVyYW5jZQ== 22738\nIHNhYXQ= 22739\nIGNsaWNrZWQ= 22740\n4pml 22741\nIGZhY2Vib29r 22742\nIEludG8= 22743\nIGluY2VudGl2ZXM= 22744\n6riw64qU 22745\nIERlbm5pcw== 22746\nIFdpaw== 22747\nZ2VzY2g= 22748\n4LmA4Lib 22749\nIM+AzrE= 22750\nIFdob28= 22751\nIHJvdW5kZWQ= 22752\nIGRvcGU= 22753\nIGNhcHR1cmluZw== 22754\nIFdhcnJp 22755\nIGNpdmlsaWFu 22756\nIGNoYXJtaW5n 22757\nIGVzYXM= 22758\nIHN1c3RhaW5lZA== 22759\nIGxlYW5pbmc= 22760\nIGFidW5kYW5jZQ== 22761\nw61saWE= 22762\n0LDQu9GM0L3Ri9C5 22763\nIHBo4bqjaQ== 22764\nYWNqYQ== 22765\nIOqwmeyVhA== 22766\nYWN0aXY= 22767\n4Liy4Lii 22768\nIDk3 22769\nINC80L7QuQ== 22770\nY3Jv 22771\nIEphY2tpZQ== 22772\naXR0ZWVz 22773\nYnJhY2h0 22774\ndWxlbnQ= 22775\nIOygnOs= 22776\nIHBsdWdpbg== 22777\ndmFudGFnZQ== 22778\ncGFydHk= 22779\nIHN1YXM= 22780\nIGFudGU= 22781\n0YPQuw== 22782\n0J3QkA== 22783\nIM+Dz4U= 22784\nIG1ldGg= 22785\nIGVudGh1c2lhc20= 22786\n0Y/RgtGB0Y8= 22787\n7ZmU6w== 22788\nIHN5bnRoZXRpYw== 22789\nIHNlYXNvbmluZw== 22790\nIExvc3Q= 22791\nb25vbXk= 22792\nIFNwYXJr 22793\nIGJ1cmU= 22794\nIGFzc3VyZWQ= 22795\nIGltYWdpbg== 22796\nIGNhcnJv 22797\nU2hh 22798\nxIV0 22799\n0L3Rg9GC0Yw= 22800\nw6F0aWNh 22801\nVFk= 22802\nIGtlcm4= 22803\nIEJyYXppbGlhbg== 22804\nw7A= 22805\nIHN1c3BlbmRlZA== 22806\nIENhcmli 22807\nIGJpemlt 22808\nIE9saXZlcg== 22809\nVG9t 22810\nINC/0LvQsNC9 22811\nIG5vcGU= 22812\nb21ldGhpbmc= 22813\nIGJlaWRlbg== 22814\n0YbQtdC9 22815\nIGZsdWN0 22816\nIM68zr/PhQ== 22817\nIGZhdGhlcnM= 22818\nIEJsYWtl 22819\nIHVwd2FyZA== 22820\nIERhc2g= 22821\nIExpbA== 22822\nIOyImOuPhA== 22823\nIHJldmVsYXRpb24= 22824\nIGVsZXZhdGVk 22825\nIEppYW5n 22826\nTEVE 22827\nIFRob21wc29u 22828\nINC80L7Qs9GD0YI= 22829\n0YHRgtGA0YM= 22830\naWZpZXJz 22831\nIGNvbWViYWNr 22832\nIGJ1eWVycw== 22833\n6rKw 22834\nIFNhbGVz 22835\n0LjRh9C1 22836\nY2lvbmVz 22837\nIHdoaXN0bGU= 22838\nIGR1bGw= 22839\nTEVY 22840\nIO2VmOqyoOyKteuLiOuLpA== 22841\nIGNyaW1pbmFscw== 22842\nIGRlc2NlbnQ= 22843\naXBwbGU= 22844\nbWFzxLE= 22845\nIGZvb2xpc2g= 22846\nINC00YPQvNCw0Y4= 22847\ndGFy 22848\nIG1hbmdv 22849\nIGNob3Jlb2dyYXBoeQ== 22850\nTWF0dA== 22851\nIHRlcnJpdG9y 22852\nIGFjYWJh 22853\nIEVpbnN0ZWlu 22854\nIElCTQ== 22855\nIE1ldGFs 22856\nIENyeXN0YWw= 22857\nIHJhaA== 22858\nIGZvdWw= 22859\nIElzbGFuZHM= 22860\nIGludGFjdA== 22861\nIFJhaWw= 22862\nLjo= 22863\nIGFjw6E= 22864\nINC/0YDQvtC/ 22865\n0LXRgNC1 22866\nIFdyaXRl 22867\naGVoZQ== 22868\nIEZP 22869\nIM+Dz4TOtw== 22870\nIGRvaW4= 22871\naGVsZA== 22872\nIGFwcHJvcHJpYXRlbHk= 22873\nIGRlbGliZXJhdGVseQ== 22874\nIGFyY2hpdmU= 22875\nIGdpdmVhd2F5 22876\nIGZpbmFsZQ== 22877\n0LvQsNGB 22878\n0LXQvdC+ 22879\nxqFu 22880\nb2dv 22881\nIEF1ZGllbmNl 22882\n44Wg 22883\nIHN1YnVy 22884\nIGhlYWRhY2hl 22885\n0LDQvdC90Y8= 22886\nIFdpdGNo 22887\nIFN3ZWRpc2g= 22888\nIEJJ 22889\nIGVyYXNl 22890\nIGtoaQ== 22891\nIGNvbW1lbnRhcnk= 22892\nIFN1bHRhbg== 22893\n7YOd 22894\nIExlYmFu 22895\nIOuztOyL 22896\nIFBhbQ== 22897\ncGVrdA== 22898\nbW9udGg= 22899\nIGdyb3VuZGVk 22900\n6r4= 22901\nIMWfZWtpbGRl 22902\nMjUw 22903\nIFNDSA== 22904\naW9zbw== 22905\nIGluYXVn 22906\naGVpbWVy 22907\nIHJlZmxlY3Rpbmc= 22908\nIFJ1dGg= 22909\nIE9pbA== 22910\nIHRyb3V2ZXI= 22911\ndWVw 22912\nLi5d 22913\nIOyeiOs= 22914\nIG9saGE= 22915\nIHJlYXNvbmFibHk= 22916\nIGdsaXRjaA== 22917\nVUI= 22918\nIEdyYW4= 22919\nIGFkYWxhaA== 22920\nIGxlbnQ= 22921\n2LHYpw== 22922\nIHRyYWN0aW9u 22923\nIGFkanVzdGluZw== 22924\ntKQ= 22925\n0L3QuNCx0YPQtNGM 22926\nINC00L7Qvw== 22927\nIHN0cmV0Y2hlZA== 22928\nIG9ydA== 22929\nIGNvc2luZQ== 22930\ndmlvbA== 22931\nIOyF 22932\nY2ly 22933\nIGJhc3RhcmQ= 22934\nINGF0L7QtA== 22935\nIHF1aWVy 22936\nIHByZXNzdXJlcw== 22937\nIEFuaA== 22938\nIGVsbGVz 22939\nINC00YDRg9C3 22940\nINC80L7QttC10YLQtQ== 22941\nIGNo4bs= 22942\nIE3DqQ== 22943\nw7Zr 22944\n4bqndQ== 22945\n7KCI 22946\nemlu 22947\nIGNhdXRpb24= 22948\naWJhbg== 22949\nIGp1ZGdpbmc= 22950\n0YPRjtGC 22951\nIGJhag== 22952\nINCh0LXQudGH0LDRgQ== 22953\nIFBvb3I= 22954\nIE5hemk= 22955\nIHVwYmVhdA== 22956\neWFuZw== 22957\nIHdlZWtlbmRz 22958\nIEVzc2VudGlhbGx5 22959\nIG9sdXlvcg== 22960\nIHNwYXRpYWw= 22961\nYWNrZXI= 22962\nIHNlbGxlcg== 22963\nINeQ15XXqg== 22964\nkdec 22965\nIHZpdmlk 22966\nIEJvbmQ= 22967\n6raM 22968\naXNrdA== 22969\nIGdvYXQ= 22970\nZHJpdmVy 22971\nIG11Zw== 22972\naWN0aW9uYWw= 22973\nIGFsbHQ= 22974\nIEluaXRp 22975\nIFJhbmQ= 22976\nIGZpbmlzaGVz 22977\nIOqwiA== 22978\nIHZpdGFt 22979\nIHRlZW5hZ2Vycw== 22980\nIE1vcnJpcw== 22981\n7KSE 22982\nIE9yaQ== 22983\naXlh 22984\nIG15w7Zz 22985\nU3RlcA== 22986\nIEtyZQ== 22987\nIGRpbm9zYXVy 22988\nIOuqhw== 22989\nYWZmZQ== 22990\nIOuQqeuLiOuLpA== 22991\nIHplZw== 22992\nIE1hbmhhdHRhbg== 22993\nIHN1amV0 22994\ndWVsbGU= 22995\nc3RvZmY= 22996\nIGTDvHI= 22997\nIHN1Ym1hcg== 22998\nZXNlcw== 22999\nIGFxdWVsZQ== 23000\nIG5vdQ== 23001\nIEZhaXRo 23002\ndHo= 23003\nINGC0L7QvNGD 23004\nYWNldXQ= 23005\nbGllcnM= 23006\nIGJhbmR3aWR0aA== 23007\nxrDhu50= 23008\nIHJlc3BlY3RpdmU= 23009\nIEF2ZQ== 23010\nIHNwcmVhZHNoZQ== 23011\nIFNlbnQ= 23012\naWNhbWVudGU= 23013\nIGluZnJh 23014\nIGxlYXJuZXJz 23015\nIOCuiQ== 23016\nYWlhaA== 23017\ncmVuYWw= 23018\nIG11c3RhcmQ= 23019\nIGhhYnQ= 23020\n54M= 23021\nIFF1w6k= 23022\nIGFuYWx5emluZw== 23023\nIHNvbGlj 23024\nINeU15XXkA== 23025\nIGNhdXNh 23026\nIHdlbGNvbWVk 23027\nIFN1Y2Nlc3M= 23028\nIGZhY2lsZQ== 23029\nINCf0L7RgtC+0LzRgw== 23030\nc2NoZWlu 23031\nIGZldGNo 23032\nIHN0cmF0 23033\nINGB0YLQvtC40YI= 23034\n7JeQ7ISc64qU 23035\nINGB0L/QvtGB0L7QsQ== 23036\nbWFt 23037\nIHNlcsOtYQ== 23038\nbmFtZW50cw== 23039\nd3JpdGVy 23040\nIGNvbnN1bHRpbmc= 23041\n7ZiA 23042\nIEJlcmtlbGV5 23043\nZXU= 23044\nYXNpdmU= 23045\nVVU= 23046\nIEFuYWx5dA== 23047\nIHN1Ym1pc3Npb24= 23048\nIG1hZ25pZmljZW50 23049\nZW56YQ== 23050\nIGVjb24= 23051\nIHByb2ZpbGVz 23052\nIGluY2Fy 23053\nQWI= 23054\nIE51bg== 23055\nIGhpYw== 23056\nc2NyZWFtaW5n 23057\nIHJlc2lsaWVudA== 23058\nZ3J1bmQ= 23059\nIGNvbmN1cg== 23060\nIGJlcmVpdHM= 23061\nTEQ= 23062\nIG51cnQ= 23063\n7Ik= 23064\nIGZlYXN0 23065\nIGVuY3VlbnQ= 23066\nIE1pY2hlbA== 23067\nIHN1cHJlbQ== 23068\nIl0= 23069\nIGZlZWRz 23070\nIEtvbGxlZ2Vu 23071\naXNzZXI= 23072\nIEZlbmc= 23073\nIFdlbg== 23074\nbXVu 23075\nIHRlbsOtYQ== 23076\nIFdyZXN0 23077\nIOyYpOuKmOydgA== 23078\nIHN0ZWFk 23079\nIHJlc3RvcmF0aW9u 23080\nIGRvbmF0ZWQ= 23081\nIGRlbHM= 23082\nIGNlbnN1cw== 23083\nIGRlc3BlcmF0ZWx5 23084\nd29ydGh5 23085\nSEU= 23086\nIFNwYQ== 23087\nIEJyeWFu 23088\nIGhq 23089\nIFJhdw== 23090\n7JWE6w== 23091\nIENhbWVyYQ== 23092\nIHppZW4= 23093\nIHN0eWw= 23094\nIFRX 23095\nIENoZWVzZQ== 23096\nYm9ybmU= 23097\nIG9ibA== 23098\nIEFscmVhZHk= 23099\nIHVuc3RhYmxl 23100\nIGZsYW1lcw== 23101\ncG9zdA== 23102\nSGE= 23103\ncm9tYWdu 23104\nIOyXhOuniA== 23105\nZGVzdA== 23106\nIGtvbGVq 23107\nIHRlbXBvcmFyaWx5 23108\nIGRldGVybWluaW5n 23109\nIEdsYXNz 23110\n0YDQvtC9 23111\nb2xhbg== 23112\nIGRvbWluYXRlZA== 23113\nX19fXw== 23114\nINmH2LDYpw== 23115\nIERhbmE= 23116\nIGRpbmhlaXJv 23117\nYXF1 23118\n66+8 23119\nIMOgcw== 23120\nIEpvZXk= 23121\nIEdyaWZm 23122\nIGF0dGFpbg== 23123\nIHRyYW5zaXRpb25z 23124\nIExpdGVyYWxseQ== 23125\n0LXQvdC0 23126\nIEhhdmVu 23127\nIGdyYWJiaW5n 23128\nIGNyeXN0YWxz 23129\nIEZvdXJ0aA== 23130\nIGNhbmRsZXM= 23131\nINGB0LvRg9GH0LA= 23132\ncmljbw== 23133\nIDUwMDA= 23134\nZXR0bw== 23135\nIHVuZG8= 23136\nIGt0bw== 23137\nIGRpdmVydA== 23138\nIGNoaXI= 23139\nIHBlcnNlYw== 23140\nIGhpa2luZw== 23141\nIGFubm91bmNlbWVudHM= 23142\n0LfRiw== 23143\nIGF1Yw== 23144\nIHN5c3RlbWlj 23145\nIFJN 23146\nz4POsQ== 23147\nINCU0LY= 23148\nIHlhcg== 23149\nIFdhcmQ= 23150\nIHBpc3NlZA== 23151\nIGNhcm4= 23152\nIGF1dG9ub21vdXM= 23153\n44WO44WO 23154\nc292ZXI= 23155\nIHJlZmxleA== 23156\nIGdhcmRlbnM= 23157\nIGRhdGVk 23158\n7LE= 23159\nYW1pxJk= 23160\nIGNvbnRpbnVpdHk= 23161\nIGNpdGl6ZW5zaGlw 23162\nIHNjaHdlcg== 23163\nIHphaw== 23164\ndGFibGU= 23165\nINGB0Yc= 23166\nIM+DzrU= 23167\nIGdlbmVyYXRlcw== 23168\n6rWs64KY 23169\nw7Zo 23170\nw7Nt 23171\nYWxhbQ== 23172\nIEpVRFk= 23173\nIEJ1Zw== 23174\nIGRyb25lcw== 23175\nIMOhZ3Vh 23176\nYWNha3M= 23177\n5po= 23178\nINCa0L7QvQ== 23179\n15bXlA== 23180\nIHN0cml2ZQ== 23181\nIEFsdGVybg== 23182\nIG5lYXJlc3Q= 23183\nIHByb3llY3Q= 23184\ndGVyYQ== 23185\nIEFTSExFWQ== 23186\nIHdvcm0= 23187\nIHJlcGxheQ== 23188\nIHRhcmE= 23189\nIEluZGlhbnM= 23190\naWNhaWQ= 23191\nIOyInA== 23192\nIGFwcGVhbGluZw== 23193\nIFdlcw== 23194\nIG1lbnRpb25z 23195\nINC00LXQu9C1 23196\nIGt3 23197\nIGZyYWdpbGU= 23198\naXN6 23199\na8Ozdw== 23200\naGFuZw== 23201\nY29sb3I= 23202\nIHByZXNpZGVudGU= 23203\nODc= 23204\n0LXRhA== 23205\nINC00L7QsdCw0LI= 23206\nIE5lbHNvbg== 23207\nw6FmaWM= 23208\nIE1JQ0hBRUw= 23209\nIG1lY2hhbmlj 23210\nIG1ldHJlcw== 23211\nIG9jenl3acWbY2ll 23212\nIENpbmQ= 23213\nIG9nc8Ol 23214\nIGxhbmRzY2E= 23215\nQUNF 23216\nIGhlYWRsaW5lcw== 23217\nIGNhdGFseXN0 23218\nIENhdGNo 23219\naW5rbGVz 23220\nIHBpbGxz 23221\nb3Jkbw== 23222\nIGltbWlncmFudA== 23223\nIGV4YW1pbmF0aW9u 23224\nIGFjY2lkZW50cw== 23225\nesSFZA== 23226\nIHF1aWVyZQ== 23227\nIG5lbGxh 23228\nIDY3 23229\nIHBhc3Nh 23230\nIHN1cGVyZmlj 23231\naXN0b3I= 23232\nIG5vdg== 23233\n64u1 23234\nIG1hbmRhdGU= 23235\naXNvbnM= 23236\nIFZpcnR1YWw= 23237\nIHNlbGJlcg== 23238\nIGNvdW5zZWxpbmc= 23239\nIE5CQQ== 23240\nIHNlcHQ= 23241\nIGJlbGlldmVy 23242\nIG1hcnZlbA== 23243\nIEludGVncg== 23244\nINC80ZY= 23245\nIG9ycGg= 23246\nIGJhY2t3YXJk 23247\nIEdlbmVyYXRpb24= 23248\nIFBpY3Q= 23249\nINGC0L7Rgg== 23250\nIHRhcGk= 23251\ncHJvY2hlbg== 23252\nIGhhbGx3YXk= 23253\naHRl 23254\nINuB25I= 23255\nIFp1bQ== 23256\nYWNobWVudA== 23257\naXF1ZXI= 23258\nZm9sZw== 23259\nIEVkZGll 23260\nIEtpbA== 23261\nIHdlbGxuZXNz 23262\nc3RvY2s= 23263\nIGthw6c= 23264\nIHRlcnJvcmlzbQ== 23265\nIHBvaW50ZXI= 23266\nT2Y= 23267\naGVyaWM= 23268\nIFVsdGltYXRlbHk= 23269\nIG1lc2Vz 23270\nIFRyYWRl 23271\nIHBpbnQ= 23272\nIHR1aXRpb24= 23273\nIGRpc2FncmU= 23274\nIOqyjOyehA== 23275\nIG1hbnVzY3JpcHQ= 23276\nIHJvb21t 23277\nIG91dHB1dHM= 23278\n0LXRhtC4 23279\nIHJpZXM= 23280\nIHNhbHVk 23281\nb3R6ZGVt 23282\nIG1hc3Nlcw== 23283\nIGJ5xYJh 23284\nIGNsZWFyaW5n 23285\nIGRpc2NvdXJzZQ== 23286\nYXRzb24= 23287\nIGZvbGRlZA== 23288\nIEphcg== 23289\n2YTZiQ== 23290\nOTAw 23291\nINGD0YHQvw== 23292\nIHByb3BoZWN5 23293\nIGludGVyZmVyZQ== 23294\n0LjRhdC+0LQ= 23295\n4LmM 23296\nIHRocmk= 23297\nINee16k= 23298\nIGxhesSxbQ== 23299\nIDE5OTI= 23300\nIGZ1dHVybw== 23301\nIGxvY2tpbmc= 23302\nIGVtYmFyZ28= 23303\nIE5laXRoZXI= 23304\naXZhbWVudGU= 23305\nIG3DpXN0ZQ== 23306\nIG1paw== 23307\nIGNvbGxlY3Rvcg== 23308\n0LXQutC+0YLQvtGA 23309\nIEdhbmQ= 23310\nIHNlbnRpcg== 23311\nIE1pZ2h0 23312\nIGdhbnplbg== 23313\nVUM= 23314\nIHJlbGF0aW5n 23315\nU0Q= 23316\nIG1vc3F1aXRv 23317\nR1I= 23318\nIGhvbGxvdw== 23319\n4piF 23320\nIFdhbGtlcg== 23321\nIGFmZmlsaWF0ZQ== 23322\nIGR1cGxpY2F0ZQ== 23323\n0L3QtdC8 23324\nIGdyYXBl 23325\nIE9yZ2FuaXphdGlvbg== 23326\nIHN5bnQ= 23327\nSm9l 23328\nIGdlZw== 23329\nIHJldmVhbGluZw== 23330\nIEV0aGFu 23331\nb3V0ZXI= 23332\nIHlheQ== 23333\n0LvQsNGA 23334\nIHJlcG9ydGVkbHk= 23335\nIGlocmVy 23336\nIHJlY29nbmlzZQ== 23337\nIGJ1bXBlcg== 23338\nIFJhbmR5 23339\nIFZlbnVz 23340\ndGxlcw== 23341\nIGFwcGV0aXRl 23342\nIGdsdWNvc2U= 23343\nIGNob2R6aQ== 23344\nIEZ1cnRoZXJtb3Jl 23345\ndGly 23346\nIGNvbnRh 23347\nIGludHVpdGlvbg== 23348\nIGFsdGl0dWRl 23349\nIGNodW5rcw== 23350\nIEpvc2h1YQ== 23351\nxLHEn8SxbQ== 23352\ncnlsaWM= 23353\nbGVhbnM= 23354\nIO2UvOs= 23355\nTEw= 23356\nUXVl 23357\nIGdvcg== 23358\nINC30L3QsNGH0LjRgg== 23359\nIHBvZW1z 23360\nIGV4Y2Vs 23361\nIGV4cGxvcmVk 23362\nIHBvcHVs 23363\nIGluY2x1c28= 23364\nc3TDpA== 23365\nIEdhdmlu 23366\nYWxsaW5n 23367\nIM+Ezr/OvQ== 23368\n6ak= 23369\nYXJiZWl0 23370\nIEdhcw== 23371\nIGdsb3Jpb3Vz 23372\ncmllYmVu 23373\nIHNwYW0= 23374\nIGluZG9vcg== 23375\nIHRocnVzdA== 23376\nIEFsZA== 23377\nIFByaW9y 23378\nIG9uYm9hcmQ= 23379\nb2Nh 23380\nQVNI 23381\no6A= 23382\nIENocmlzdGluZQ== 23383\nIGRyYXdlcg== 23384\nIG5vb24= 23385\nIOyemOs= 23386\nIHBlcm1hbmVudGx5 23387\nINC90LDQv9GA0LjQvNC10YA= 23388\nIHBvZGNhc3Rz 23389\nZXJhcGV1dA== 23390\ncHJpdA== 23391\nIHN0YWlubGVzcw== 23392\nINqp25I= 23393\nIGZhbWlsaWE= 23394\nINGA0LDQt9GA 23395\ndW50bw== 23396\nINGB0YLQvtC7 23397\nIGjDpA== 23398\nIEhhaQ== 23399\nIFBC 23400\naXpvbg== 23401\nIGtvbm50ZQ== 23402\nIGLDvHnDvGs= 23403\nIHV0aWxpemFy 23404\n2oY= 23405\nIGFxdWVzdGE= 23406\nIG1peGVy 23407\ndWRlbnQ= 23408\n0LvQtdC60YE= 23409\nxYJ1 23410\nINGB0LjRgdGC0LXQvA== 23411\nINC90L7RgNC8 23412\nIGZhdGFs 23413\nIGNvbnNpZGVyYXRpb25z 23414\nIHZhbGlkYXRpb24= 23415\nIG9saQ== 23416\nIGthcmRlxZ8= 23417\nIEdMT1JJQQ== 23418\nIHBhbGw= 23419\n0LXRgdGC0LU= 23420\nIHJlY3Rhbmc= 23421\nIG1lZGlldmFs 23422\nYWxsYWhp 23423\nYXN0aQ== 23424\nIFN5cmlhbg== 23425\nIHNoZWFy 23426\nIGRlYnVn 23427\nIE1haQ== 23428\nIGtub2NraW5n 23429\nIExleA== 23430\nYXJkYW4= 23431\ncm92 23432\nIG1lbW9yaWFs 23433\nb29reQ== 23434\nIHN0dWZmZWQ= 23435\nIHBhc3PDqQ== 23436\nIHdpZw== 23437\ngqA= 23438\nIHByw7N4aW1h 23439\nIDE5OTE= 23440\nINC80LXQttC00YM= 23441\nIG51ZXN0cm9z 23442\nIEJlYXN0 23443\nIHNtbw== 23444\nYXRjaGVk 23445\nb2xvZ2lh 23446\nINC80L7QtA== 23447\nIGdlZQ== 23448\nIGNvbmNlcHR1YWw= 23449\nIMO0 23450\nIGRlY3JlYXNlcw== 23451\nIHF1ZXJpZXM= 23452\n0L7Qu9GM0Yg= 23453\nIEFwYXJ0 23454\nIGV4ZW1wbA== 23455\nIGZsZWQ= 23456\nIE9GRg== 23457\nZ2dhaw== 23458\nIGJlYWQ= 23459\naGly 23460\nbGllcw== 23461\nIENsZWFybHk= 23462\nxLFsYXI= 23463\nIGNoZXNz 23464\nIHdoaWNoZXZlcg== 23465\nIDk2 23466\n4bqx 23467\nIHJlc3BlY3Rz 23468\nINC80L7RgA== 23469\nIG9yZ2FuaXNt 23470\nIGdyYW5kcGE= 23471\nIFZpZQ== 23472\nIGZsb29kaW5n 23473\nIHVwZ3JhZGVk 23474\n0ZHRgA== 23475\nIGNoZWVrcw== 23476\nIGNvbnF1ZXI= 23477\nIHN0dWJib3Ju 23478\nIHB1enpsZXM= 23479\nIGF1Y3Rpb24= 23480\nIHJlbHlpbmc= 23481\nIFBST0Y= 23482\nIEVzcGVy 23483\nINCc0KM= 23484\nIGh5cGU= 23485\nIHBvc3NpYmls 23486\nIGltcHJpc29u 23487\nIEVybg== 23488\n7JeI7Iq164uI64uk 23489\nIGVudmll 23490\nIHJlc3VycmVjdGlvbg== 23491\nIHNwZXI= 23492\nIFZlbmV6dWVsYQ== 23493\nc29t 23494\nIOyeoOq5 23495\nIG5vdXZlbGxl 23496\nIGNsb3Nlcw== 23497\nIDE5NDA= 23498\nIHF1YQ== 23499\nIEphcmVk 23500\nIFBpcg== 23501\nIGluZGU= 23502\nIHNjcnVi 23503\ndWt1 23504\nIHJlcXVpcmluZw== 23505\nINCy0LDQvNC4 23506\nIGNvbnNpZGVyYWJsZQ== 23507\naWxpYQ== 23508\nIGlubmU= 23509\nIG1laW5lbQ== 23510\nIGhhcmRzaGlw 23511\nIHRyYXBz 23512\ncm9j 23513\nIOyEpOs= 23514\nIHJlc2VhcmNoaW5n 23515\nIE1hcmdhcmV0 23516\nIHBlbm55 23517\nIGLEsXJhaw== 23518\n0ZHQuw== 23519\nIHdvb2w= 23520\nIHJoZXQ= 23521\nIGZsYXR0ZW4= 23522\n54c= 23523\n4LmA4Lij 23524\nIHBpZWQ= 23525\nIENoYXA= 23526\nIHVuZGVybQ== 23527\nIGZyZXQ= 23528\nIGNyYXNoZWQ= 23529\nIEZyYXVlbg== 23530\n2LDZhw== 23531\naXZhbg== 23532\nIGxpdGVyYXJ5 23533\nbGF0ZWdv 23534\nIHNww6R0ZXI= 23535\nIHNpbWlsYXJpdGllcw== 23536\n4oY= 23537\nIENvcm9u 23538\nIENyZWVr 23539\nIGJvc3Nlcw== 23540\nIGFjY29tcGFuaWVk 23541\nIGRlYmF0ZXM= 23542\nIGFzc2VtYmxlZA== 23543\nIMOB 23544\nIFZhaQ== 23545\nIHRyYWN0 23546\nIHNpbXBsZW1lbnQ= 23547\nIEFyaW4= 23548\nIHZ1bG5lcmFiaWxpdHk= 23549\nIGhvcm1vbmU= 23550\nSUVM 23551\nT09L 23552\nIHJlbGF5 23553\nIEFuZHJlYQ== 23554\ncmls 23555\nIG5lY2Vzc2l0eQ== 23556\nYWNldXRpY2Fs 23557\n0Y7RiQ== 23558\nb3VzaW5n 23559\nbmFobWVu 23560\nIGZvb3RwcmludA== 23561\nbWFw 23562\nIFRpZXI= 23563\nYW5ueWE= 23564\naW50ZW5k 23565\n5aI= 23566\nIGRlY29yYXRl 23567\nIHpvbWJpZXM= 23568\nIEh5ZA== 23569\nIFN1eg== 23570\nIGNhbXB1c2Vz 23571\nIEVtYg== 23572\nIHRocm90dGxl 23573\nIGFkbWlu 23574\nIG9wb3J0dW4= 23575\nIG1pcnJvcnM= 23576\nIGlkZW50aXRpZXM= 23577\nIENsaW4= 23578\nIOu5hOs= 23579\n4bmj 23580\nIE90dA== 23581\nIGJsdWVz 23582\nIGltcHJlc3Npb25z 23583\nLSw= 23584\nIHZhZ3Vl 23585\nYWZl 23586\nIGluZmVyaW9y 23587\nZXJhbGQ= 23588\nIG1lZGljaW5lcw== 23589\nIHByZWd1bnRh 23590\nb3NlbHk= 23591\nIHTDqWzDqQ== 23592\nIE1vbnRo 23593\nIExlYWRlcnM= 23594\nIEVneXB0aWFu 23595\nIHJhdGlvbg== 23596\na2Vycw== 23597\naGVpdHM= 23598\nIHJlY2h0 23599\nUGxheQ== 23600\nIGVn 23601\nIHBvbGxz 23602\nIFdPT0RS 23603\nIHNsb3Rz 23604\namFt 23605\nQm90aA== 23606\nIFJhdA== 23607\n0YDQsNC2 23608\nIEJyaWdodA== 23609\n4buRaQ== 23610\ndXJpb3Vz 23611\nIHNpbmdlcnM= 23612\nIGxvZ2lu 23613\nIHTDqm0= 23614\nbGF0aW9u 23615\nIE11bQ== 23616\nxrDhu51uZw== 23617\nIEVkaXRvcg== 23618\nIGlubm92YXRpb25z 23619\naGF2ZQ== 23620\nIFNlaw== 23621\nIHdlYWtlcg== 23622\nIEdvYg== 23623\nQWZ0ZXI= 23624\ntOyngA== 23625\nIOusuOygnA== 23626\nIGRpc2FkdmFudGFnZQ== 23627\nIGdhemU= 23628\nIE1hY2s= 23629\nz4HOrw== 23630\nIEtpc3M= 23631\nIEhvbG8= 23632\nIEJpcnRo 23633\naXpp 23634\nYmFi 23635\n7Iuc6rOg 23636\n0LTQtdGA0LY= 23637\nIHNxdWF0 23638\n0LrRg9GB 23639\ndW5p 23640\nIENvbW1l 23641\nIFdPT0RSVUZG 23642\nIENoYW1waW9uc2hpcA== 23643\nIHdlbGNoZQ== 23644\nIFlvdXRo 23645\nemVt 23646\nIG9kcG93 23647\nIHBlcnNpc3RlbnQ= 23648\ncnV0 23649\n7JSp 23650\n7Zal 23651\nbGFpcg== 23652\naWt1 23653\nIHZlbmRvcg== 23654\nIGNow7puZw== 23655\nIGZpbmFuY2k= 23656\nIG92ZXJseQ== 23657\nw6J1 23658\nIGdsdXRlbg== 23659\nIDE4MDA= 23660\nIGRpdmlzaW9ucw== 23661\nIGNpdWRhZA== 23662\nIG9iZWQ= 23663\nIHdhcnVt 23664\nIGVoZXI= 23665\nIGVsaW0= 23666\nINCS0L4= 23667\nIHBldXZlbnQ= 23668\nIFdhbm5h 23669\nIGF0dGVuZGFuY2U= 23670\nIGFzc2Vzc21lbnRz 23671\nIEJvZw== 23672\nIGltYWdlcnk= 23673\nIGNvbGxlY3RpdmVseQ== 23674\nIGluZm9ybWFs 23675\nIFNjaHdl 23676\nIGRldXRsaWNo 23677\nIENoZWw= 23678\nIFBF 23679\nb3dlZA== 23680\nIGJhbm5lcg== 23681\nIHNoZWx2ZXM= 23682\nIFJldHVybg== 23683\nTEFVR0hT 23684\nIGNvbmdyYXR1bGF0ZQ== 23685\nIE5vcndheQ== 23686\nIGR3ZWxs 23687\nIENhcmliYmVhbg== 23688\nIG5vcm1z 23689\nIEFuaW1hbA== 23690\nIFZhbGVudGluZQ== 23691\nIGV4dGVuZGluZw== 23692\nIFZvdQ== 23693\nb3Jy 23694\nIENoZW5n 23695\nwqE= 23696\nINC00L7RgNC+0LM= 23697\nIHZlZw== 23698\nIGjDpQ== 23699\nIFhpbg== 23700\nIOy5tOs= 23701\nZW1ldA== 23702\nIGh5cG90aA== 23703\nIGludGVyZXNzYW50ZQ== 23704\ncmljZXM= 23705\nSVo= 23706\nIFVTRA== 23707\nIHJ1bm5lcg== 23708\nIEJhZw== 23709\nIOq9 23710\nIGNvbWXDp2Fy 23711\nIHBpZ3M= 23712\nIHdlYWtuZXNzZXM= 23713\nUGg= 23714\nIFZpb2w= 23715\nIGRyYWdnaW5n 23716\nIEFxdcOt 23717\nIENTUw== 23718\nIG1pbGxpbWV0ZXJz 23719\nIGVzdMOhcw== 23720\nIGFjdXRl 23721\nIGRlamFy 23722\nacSf 23723\nb2JyYQ== 23724\nTG92ZQ== 23725\nIHNpbGs= 23726\nKioqKg== 23727\nIGpvaW5z 23728\nIHByb2w= 23729\nIOqwkOyCrO2VqeuLiOuLpA== 23730\n2K3Yrw== 23731\nYWdoZXR0aQ== 23732\nw6RubmVy 23733\nIHN0cmFuZw== 23734\nIGRvdWJsZWQ= 23735\nIGRlc2NyaXB0aW9ucw== 23736\nIHN0ZWxsZW4= 23737\nIHBhcnRp 23738\nsoTr 23739\nIMO2xJ8= 23740\naWdoaW5n 23741\nIGFuZ3VsYXI= 23742\nIG5hdHV1cg== 23743\nIFNoZWw= 23744\nxrDGoQ== 23745\nIHJheXM= 23746\nIHNlcGVy 23747\nc3RhcnQ= 23748\ndmlzZWQ= 23749\nIHJ1c2hlZA== 23750\nIGludGVybmF0aW9uYWxseQ== 23751\nIG5pdmVs 23752\nIGJveGluZw== 23753\nZmFsbGVu 23754\n4buRYw== 23755\nIHNlaW5lbg== 23756\ncGxpY2l0eQ== 23757\nIGNhcmJvaA== 23758\nIFRyYXZpcw== 23759\ndXNv 23760\nIFBoYXNl 23761\nIGFjdGl2YXRpb24= 23762\nIG9waW8= 23763\nt6g= 23764\nIGRlY3JlYXNlZA== 23765\nQ2Fy 23766\nIGJ1bmRsZQ== 23767\nIGV4cGVuZA== 23768\nb3JtYWw= 23769\nIGFkamFjZW50 23770\nIG1lZQ== 23771\nINC+0YDQsw== 23772\nIHRyYW5zY3JpcHQ= 23773\nIExhbmd1YWdl 23774\nR1M= 23775\nIHNldWw= 23776\nw6BuaA== 23777\nIG55YQ== 23778\nbmluZ3M= 23779\nIOyLnOs= 23780\nIOuUsOudvA== 23781\nIEFncg== 23782\nw61k 23783\nIGFieQ== 23784\nIE5lbw== 23785\nxLF5b3J1eg== 23786\nIFRoaW5raW5n 23787\nYWltZQ== 23788\nIHZpdGU= 23789\nIHRyYXbDqXM= 23790\nINeR16I= 23791\nINC80LXQtA== 23792\nT3Vy 23793\naG9vdA== 23794\nIGxpbmVy 23795\nIFBpenph 23796\nIGh5Zw== 23797\nZmxpZXM= 23798\nIENvbnRpbnVl 23799\nIGRlbnRhbA== 23800\nIFRpYg== 23801\nIHJlZ3VsYXRl 23802\nbGllw58= 23803\nQUxL 23804\nIFRhZQ== 23805\n6ri4 23806\nIEJyZXhpdA== 23807\nIEd1dA== 23808\nIG9jY3VwYXRpb24= 23809\nIHpyb2Jp 23810\nw6Jt 23811\nIHdoaXNr 23812\nIGthbnNrZQ== 23813\nb21vbg== 23814\ncm9iZQ== 23815\nIHdhcmZhcmU= 23816\nIHRo4buD 23817\nIGpha2k= 23818\nIHN0cm9rZXM= 23819\nIHBlYXM= 23820\nIERhbWl0 23821\nSEFO 23822\nIGludGVyZmVyZW5jZQ== 23823\nINC80LjQvdGD0YI= 23824\nTkVS 23825\nb3V0aW5n 23826\nIHRleHR1cmVz 23827\nn4k= 23828\nb3dp 23829\nIO2VmQ== 23830\nIGRlbnM= 23831\nIHByb3RhZ29uaXN0 23832\nw6Rubg== 23833\nIGdvZGRlc3M= 23834\nIHdvbGx0ZQ== 23835\naWpv 23836\nIFdvY2hl 23837\nIFZQTg== 23838\nc3Rvcnk= 23839\nIGtpbmRlcmc= 23840\nIGZ1bm5lbA== 23841\nIGRpc3RyZXNz 23842\n0L3QvtGB0YLRjNGO 23843\nIG5vaXN5 23844\nINC/0YDQvtC00L7Qu9C2 23845\nIGRhcmFu 23846\nIGVuenltZQ== 23847\n0LvQvtC2 23848\nIG11dGU= 23849\nIGR3YXI= 23850\nINin2LM= 23851\nIGtvbXBs 23852\nIG1lcml0 23853\nIGZvc3Nl 23854\nIERyaW5r 23855\nIGZvcmE= 23856\nIHdvaGw= 23857\nIGJyZWV6ZQ== 23858\nIHNhbml0 23859\nIGRyaW4= 23860\nIOydtOqxsOuKlA== 23861\nIDYy 23862\nIOywqOs= 23863\nYWJ5dGVz 23864\nIGRlZWRz 23865\nINC5 23866\nacOobWU= 23867\naWdnbGluZw== 23868\nICIn 23869\nINGH0LDRgdGC0Yw= 23870\nIEFuc3dlcg== 23871\nIGV2YW5nZWw= 23872\nIDEwODA= 23873\nIFZpc2l0 23874\naWNpZW50 23875\nIHJlbGlhYmlsaXR5 23876\n0Y7RgdGM 23877\nIEVhcmxpZXI= 23878\nIGZpZA== 23879\nIHNsZWV2ZXM= 23880\naXlvcnN1bg== 23881\nIGJpYg== 23882\nIEFjY291bnQ= 23883\n0Y/Qu9C4 23884\nY2lwbGluYXJ5 23885\nemFz 23886\nINCx0LXRgA== 23887\nIG5lY2tsYWNl 23888\nIGJsZW5kZXI= 23889\nIFBoaWxsaXBz 23890\nZXRp 23891\nIEp1cGl0ZXI= 23892\nIHByb3ZvYw== 23893\nIFllYXJz 23894\nZW50cmU= 23895\nYWNpbw== 23896\nIGvDvA== 23897\nIGFudGVubmE= 23898\nIG5vdmVscw== 23899\nIGZhcnQ= 23900\nIFN1Z2Fy 23901\nIEp1ZHk= 23902\nIGNvbGxhcHNlZA== 23903\n57A= 23904\ncml0aXM= 23905\nIOyDge2ZqQ== 23906\n0JfQqw== 23907\nIFZlcmY= 23908\ncmFuZWFu 23909\nZXJldW0= 23910\nIFRhcmdldA== 23911\nIDg4 23912\nINCY0Lc= 23913\naWRlbw== 23914\nIHJlZ3Jlc3Npb24= 23915\n7Lac 23916\nIG3Ds3dp 23917\nIHN0dWRpb3M= 23918\naWVucw== 23919\naXBo 23920\nIGZyeWluZw== 23921\nIGZhc2NpbmF0ZWQ= 23922\nIFdhaA== 23923\nYnVja3M= 23924\nbWF5YQ== 23925\nIFNhdHVybg== 23926\nIE1vbW15 23927\nIHJhdGluZ3M= 23928\nIGF1dHVtbg== 23929\nxrDGoW5n 23930\nIGxvc2Vy 23931\nIGNlbnRybw== 23932\nw6lyaWV1cg== 23933\nIEZvbGQ= 23934\nIHN1cGVydmlzb3I= 23935\nIE5vYmVs 23936\nIHVuZGVyZXN0 23937\nb2JpYQ== 23938\nINCy0YHRjw== 23939\nIHZlcnc= 23940\nIGZ1ZWxz 23941\nIGFydGlmYWN0cw== 23942\nIOu2mQ== 23943\nIEF1dG9t 23944\n25Q= 23945\n15XXoQ== 23946\nIGlobmVu 23947\nIDU5 23948\nb3VuZGluZw== 23949\n0LXRgNGL 23950\naW5hcnM= 23951\nY2hhbnQ= 23952\nIGFkZGljdGVk 23953\nIGV4cGxvc2l2ZQ== 23954\nIGRpc3BlcnM= 23955\n4paI 23956\nYXhpcw== 23957\nQVJZ 23958\nIGx1bQ== 23959\nINGD0YHQuw== 23960\nINiM 23961\nIHJ1cGVlcw== 23962\nIFBlYXJs 23963\nY2FtcA== 23964\ndHY= 23965\nb3lh 23966\nIGNvbmNsdWRlcw== 23967\nIGNvbGxpc2lvbg== 23968\nIGJ1eWVy 23969\nIHBsYXlncm91bmQ= 23970\nIHNwcmluZ3M= 23971\nIGZlbWluaW5l 23972\nIFJhcw== 23973\nIGluY2FyY2Vy 23974\n7ZeY 23975\nIGRpYWxlY3Q= 23976\nIGNsb3N1cmU= 23977\nIGNoYXR0aW5n 23978\nIGJhYmU= 23979\nIHNwb3RsaWdodA== 23980\nIG5vdGF0aW9u 23981\nU3Rhcg== 23982\nacOjbw== 23983\nIHTDqnRl 23984\nIHRpZGU= 23985\nIGp1bnRv 23986\nIHNlbmF0b3I= 23987\n0KU= 23988\nIGV4Y3VzZXM= 23989\nIGJsaW5r 23990\nIGFkbWlzc2lvbg== 23991\nIExpbHk= 23992\n0YvQvNC4 23993\nIGFtaWdv 23994\nIGx1c3Q= 23995\n64us 23996\nIGFtaW5v 23997\nIGNvbnN1bHRhbnQ= 23998\nIEVsZWN0cmlj 23999\nIOuFuOuemA== 24000\ndWphaA== 24001\nIHNob290ZXI= 24002\naWNodGVu 24003\nIFVrcmFpbmlhbg== 24004\nIGFpbXM= 24005\nIEVudGVydGFpbg== 24006\nIG1pcmFjbGVz 24007\nIHplaWdlbg== 24008\nIGxhbQ== 24009\nIHJlc3M= 24010\nIEppbGw= 24011\neWxhbg== 24012\nIHJvb2s= 24013\nIGhheWE= 24014\nIHBhc3Nwb3J0 24015\nYWRhdGE= 24016\nIGp1aWN5 24017\nY29uZg== 24018\n0LvQtdC5 24019\nIFN6 24020\nIGludGVyY2VwdA== 24021\nIFRlYW1z 24022\nIG1ha2Vu 24023\naXJyZWw= 24024\nIExJS0U= 24025\n4bqteQ== 24026\n6rWw 24027\nIHNob3J0YWdl 24028\nIHBhcmFkaWdt 24029\nIHBhcGVs 24030\nIGFzdGVybw== 24031\nIHNvbGxlbg== 24032\nIE1pY2tleQ== 24033\nIE9ybGVhbnM= 24034\nIGNob2xlc3Rlcm9s 24035\nIGdvb3Nl 24036\n0YbQuNGO 24037\nIEZM 24038\nINCz0L7Qu9C+0LI= 24039\nIHRyaWJ1dGU= 24040\nIEdhbQ== 24041\nIMOpdmlkZW1tZW50 24042\n0Y/RhQ== 24043\nIGluYXBwcm9wcmk= 24044\ndWhhbg== 24045\nIG9yZ2FuaXphdGlvbmFs 24046\nYWlsZWQ= 24047\nIGVuZHVyZQ== 24048\nIDc2 24049\nIHNob3RndW4= 24050\nIGxpdnJl 24051\nIHN1aXRlZA== 24052\nIHdhcm10aA== 24053\nIFNJTQ== 24054\nIGVudmlzaW9u 24055\nIGRlZ3JhZA== 24056\nw65uZQ== 24057\nTGF1Z2hpbmc= 24058\nIFdob2V2ZXI= 24059\nIEJ1ZGRoaXNt 24060\nIHNwcmlua2xl 24061\nY2XEn2l6 24062\nIHJ1aW5z 24063\nIHN0YXJjaA== 24064\nIEhlcno= 24065\nIGluanVzdGljZQ== 24066\nIGh1bWlkaXR5 24067\n0L7QttCw0LvRg9C5 24068\nIE9iamVjdA== 24069\nIElnbg== 24070\nIEV4YW0= 24071\naWdlcnM= 24072\nIHRob3U= 24073\nIFNveQ== 24074\naXZhcw== 24075\nIHBvbGVz 24076\nbWF0aA== 24077\nINCy0L3QuNC8 24078\nSU5HSU5H 24079\nZWRyYWw= 24080\nIGV4cGxvcg== 24081\nIHJvYXN0ZWQ= 24082\nIGNyYXds 24083\nIGNvZmY= 24084\nIGFub20= 24085\nIHdpag== 24086\nIGltcHJvdmVz 24087\nIHRyZWF0eQ== 24088\nIGRpc2NvdmVyaW5n 24089\nIHN0YXR1dGU= 24090\nIG1lcmNhZG8= 24091\nINGB0LjQuw== 24092\nIGludGVs 24093\nIENoYW5jZWxsb3I= 24094\nIE1lZGljYWlk 24095\ndWdp 24096\nIHZlcmJhbA== 24097\nIGTDtm4= 24098\nIHNjcmlwdHVyZQ== 24099\nIGl0ZXJhdGlvbg== 24100\nZWtz 24101\nIE94Zm9yZA== 24102\nIHfDpGg= 24103\nIFZhZA== 24104\nIEFL 24105\nIOyVhOydtOs= 24106\nIGlldHM= 24107\nIG5lZWRsZXM= 24108\n2YPZhQ== 24109\nIHBhc2Fkbw== 24110\nIGFsYnVtcw== 24111\nIHllYQ== 24112\nZXR6ZW4= 24113\nhOuPhA== 24114\nIGRldGVybWluZXM= 24115\nIHRoZWU= 24116\nIFBsYXlpbmc= 24117\nw6RydA== 24118\nINem 24119\nY2xlZA== 24120\nIGRvd253YXJk 24121\nYWxvbmU= 24122\nIHNvbHU= 24123\nIHBhcnRpdGlvbg== 24124\nIHd6 24125\nZGQ= 24126\nIHBlc3NvYWw= 24127\nIGZhY3Rvcmllcw== 24128\nIGJsZWlidA== 24129\n4Lih4Liy 24130\nYWxzYQ== 24131\nIE5GTA== 24132\nIGZ1ZXJh 24133\nIHJlc2VydmVk 24134\nIEVhcm4= 24135\nIGhlbHQ= 24136\nIHNob3J0Y3V0 24137\nIGNvbnZpbmNpbmc= 24138\nc3BhY2U= 24139\nIGVuZm9yY2U= 24140\nIGNvcmVz 24141\nIGVmdGVy 24142\nIHJlY2Vzc2lvbg== 24143\neGljbw== 24144\nIHByb3Bvc2l0aW9u 24145\nYXJpYW5z 24146\ncm9wb2w= 24147\nIOuqsOs= 24148\nIM6c 24149\nIOyalOymmA== 24150\nIGFjdGl2aXN0 24151\nIGNvbnZpY3Rpb24= 24152\nIHphYg== 24153\nIGNhbmNlbGVk 24154\n0YLQvtGH0L3Qvg== 24155\nIM6u 24156\nbml0ZQ== 24157\nIGZ1bmRyYQ== 24158\nYnV6emVy 24159\n0LXQu9C+ 24160\naWNhdGlvbnM= 24161\nIHpvbmE= 24162\nIHRlZW5z 24163\nIG1ldGhvZG9sb2d5 24164\nIOykkeyalA== 24165\ndGhhbg== 24166\nIFVs 24167\nIEdyZXk= 24168\nIGhvZw== 24169\nSU5L 24170\nIFN1bmc= 24171\nIENsYXVk 24172\nIENOTg== 24173\nIGRlbGl2ZXJz 24174\nYWxpbg== 24175\nIEFkb2Jl 24176\nb3RoZQ== 24177\nIERlc3dlZ2Vu 24178\n4Liz 24179\nIHdlcmRl 24180\nIGdyZWFzZQ== 24181\nIHVwZ3JhZGVz 24182\nIEZpbmxhbmQ= 24183\nYWNjZXB0 24184\nIGludGVycm9n 24185\nYmVl 24186\nIHByZWRl 24187\nIE5lcA== 24188\nIENhbWJyaWRnZQ== 24189\nIGdyYXBocw== 24190\nIGhhdW50ZWQ= 24191\n0YHQtdC8 24192\n5qc= 24193\nU29tZQ== 24194\nIE1hbGw= 24195\nIHJlaGVhcnNhbA== 24196\nIFVyYmFu 24197\nIExhZw== 24198\nIG5pbQ== 24199\n6rCV 24200\nIHBvc2l0aW9uZWQ= 24201\nIGF2b2lkZWQ= 24202\nRU1B 24203\nIGxsZWdhcg== 24204\nIHLDoXBpZG8= 24205\nIGdvdXZlcm4= 24206\nIGhpbmc= 24207\nIGRlYWxlcg== 24208\nIHJlZm9ybXM= 24209\nIGZhdHR5 24210\n0LrQvtC7 24211\nIEFjZQ== 24212\nIG5lcA== 24213\nIOyyrQ== 24214\nIGNvbXB1dGF0aW9u 24215\nIFN0cmVhbQ== 24216\nYm91cm5l 24217\ndHVy 24218\nUG9y 24219\nIHNsZWVweQ== 24220\nIGJhbmdldA== 24221\nIHdlaWdocw== 24222\nIGJsZWliZW4= 24223\nIEdyZW4= 24224\nIHVuaW9ucw== 24225\nIOq1kA== 24226\nIGFwcmVuZGVy 24227\ndWl0YXI= 24228\nIEplc3Q= 24229\ndW1pbmc= 24230\nIFBsYXllcg== 24231\nIEV4dHJlbQ== 24232\nIGludGVnZXI= 24233\n0LDRh9C1 24234\nIGNvbmNlcnRz 24235\n15XXmw== 24236\nIHRyb2NoxJk= 24237\nIFJlcGU= 24238\n4LmC 24239\nxbxlbg== 24240\nIHNvdW5kaW5n 24241\nIGFub255bW91cw== 24242\nIGV4Y2E= 24243\nIElyYW5pYW4= 24244\nIGVuZXJnZXRpYw== 24245\nIHdpdmVz 24246\nINGG0LLQtdGC 24247\nIGFpcw== 24248\nIHN1ZGFo 24249\nIHVuZGVyd2Vhcg== 24250\nIGNydW5jaHk= 24251\nIFBhaW4= 24252\nIGdlcsOnZWs= 24253\ncmVkaWN0 24254\nIG1pc21h 24255\n0ZbRgg== 24256\nIHN1cnZpdmluZw== 24257\nzq3Pgg== 24258\nIHBhcnRpY2lwYW50 24259\nIEhlc3Nlbg== 24260\nw6FyaWFz 24261\nIHN1YndheQ== 24262\naXN0w6Q= 24263\nIGNvcmFs 24264\nIG1hcmlqdWFuYQ== 24265\nIE1lbW9yaWFs 24266\n0YjQuNC5 24267\ncml6 24268\nIHNhdGVsbGl0ZXM= 24269\nIGxlYXNl 24270\nIENhbWVyb24= 24271\ndW1waA== 24272\nIGNsYXNzbWF0ZXM= 24273\nw6Row6Ru 24274\n0YHRgtCy0LU= 24275\nIGh1ZQ== 24276\nk6TsnYQ= 24277\nIHByb3BvcnRpb25hbA== 24278\nIG5vc3M= 24279\nIGxhcHM= 24280\ncsOl 24281\nIGJpdGNvaW4= 24282\n0JfQq9Ca0JA= 24283\nIOy2qQ== 24284\nINmE2YQ= 24285\nIE1vcnQ= 24286\nIEVzcA== 24287\nYXJub3M= 24288\nINGB0LrQsNC30LDQuw== 24289\nIMOkbmQ= 24290\n15nXmded 24291\nIEdlYg== 24292\nZ2VoZW4= 24293\nSW5hdWRpYmxl 24294\nYm9yb3VnaA== 24295\n0YTRhA== 24296\nIGZlbGxvd3NoaXA= 24297\nIFBhcGVy 24298\nIGN1cnZlZA== 24299\nIEdFT1I= 24300\nIGNhbGN1bGF0b3I= 24301\nIENhdGFs 24302\nIHbDoG8= 24303\nIGJ5cGFzcw== 24304\n0LvQtdGC 24305\n4LM= 24306\ndHJhbnM= 24307\ncmVuY2llcw== 24308\n7KGM 24309\naWdlbnQ= 24310\nIHRhc3RlZA== 24311\nIG9jZWFucw== 24312\ndWZ0 24313\nZXJ2aWNl 24314\nINCc0KPQl9Cr0JrQkA== 24315\nIENsYXNzaWM= 24316\nIHJlc3BlY3RpdmVseQ== 24317\nfik= 24318\nw650cmU= 24319\nIE5hc2g= 24320\nIHppdA== 24321\nIOybgw== 24322\nIOuGkg== 24323\ncXVvdGU= 24324\nIFVucw== 24325\nIHRhYw== 24326\nIHByb3Zlcw== 24327\nIFBvcnRsYW5k 24328\nYmx5 24329\nIGVyZQ== 24330\n7LaU 24331\nIMOpcG9jYQ== 24332\nINGC0YvRgdGP0Yc= 24333\nNzY= 24334\nIGhhZGU= 24335\nIEZybw== 24336\nIHBvbMOtdGljYQ== 24337\ndGFn 24338\nIO2VrQ== 24339\nIHNjaMO2 24340\nYXJldHQ= 24341\nIHByb3Zpc2lvbnM= 24342\nIG1vdG9ycw== 24343\nIGltYWdpbmc= 24344\nIGRvaw== 24345\ndWxvdXNseQ== 24346\nIG1laWxsZQ== 24347\n65A= 24348\nIElTTw== 24349\nIFNURU0= 24350\nIEJvd2w= 24351\nIHRvd2Vycw== 24352\nIEVl 24353\nIFBlcmZvcm1hbmNl 24354\nIGxvaW4= 24355\nY3Vzc2lvbg== 24356\nIGNvYXN0YWw= 24357\naWFsZQ== 24358\nY29tcGFzcw== 24359\nIHNwZWxscw== 24360\nIGRpc2FwcG9pbnRpbmc= 24361\nIOuyiOynuA== 24362\nRUVS 24363\nIHZlcnNhdGlsZQ== 24364\nYXN1cnk= 24365\nIGVuZmlu 24366\nIGRvd25zaWRl 24367\nIGd1aWRpbmc= 24368\nINin2YTZgg== 24369\nIG5pbmV0eQ== 24370\nY2hhcmdlZA== 24371\nIEZhbnM= 24372\nIHBoaWxvc29waGljYWw= 24373\nIGdhcm4= 24374\nIG3DpW5nYQ== 24375\nIHdpbGxpbmduZXNz 24376\nIHBvcnRpb25z 24377\nYWJlbg== 24378\nIO8= 24379\nwr8= 24380\ncmF1bA== 24381\nIHNwcmludA== 24382\naWZlbg== 24383\nxLF5bGE= 24384\nINC60YPQvw== 24385\nIGVuc3VpdGU= 24386\nIENhcGl0b2w= 24387\nIDYz 24388\nINCz0L7QstC+0YDQuNGC 24389\nIGFwcG9pbnRtZW50cw== 24390\nb21pYXN0 24391\nIGNhcmVn 24392\nIHB1Ymxpc2hlcg== 24393\nIGhlcmF1cw== 24394\nIM61zq8= 24395\nIFZT 24396\nIHNhY3JpZmljZXM= 24397\ndGhpcmQ= 24398\nIGh1bWFuaXRhcmlhbg== 24399\nIOuCtOw= 24400\naW1vbg== 24401\nIGluZXF1 24402\nIHpvYg== 24403\nIGNvbWZvcnRhYmx5 24404\nIERpbmdl 24405\nIGNhbmNlbGxlZA== 24406\nIFBTQUtJ 24407\nIFJvYmluc29u 24408\nIGZpbnM= 24409\nKT8= 24410\nIEhpc3Rvcg== 24411\nINGH0LXQu9C+0LLQtdC60LA= 24412\nIHRic3A= 24413\ndGV4dA== 24414\na2lt 24415\nIHVwZGF0aW5n 24416\nIGdlbGQ= 24417\nZmVsZA== 24418\nj7w= 24419\nIG3DpA== 24420\nIGNhZsOp 24421\n1oA= 24422\nIFNyaQ== 24423\nIFJlZ2lvbg== 24424\nIEhhaGFoYQ== 24425\nIGZpbmFuY2Vz 24426\nINin2YTYtA== 24427\nIGJ1bms= 24428\ncnVr 24429\naGFmdA== 24430\nIGxhdGVyYWw= 24431\nIGV4dGVuc2lvbnM= 24432\nIOyVhOydtA== 24433\nIGRlZmluaXRl 24434\nIFpoYW8= 24435\nIEx1aXM= 24436\nc3R5 24437\nIGNhc29z 24438\nIEtsaW0= 24439\nIDE5OTM= 24440\nIHJlYWxpemF0aW9u 24441\nIGhpc3Rvcmlhbg== 24442\nIGNyYWNrZWQ= 24443\n64K0 24444\nIHN5c3TDqG1l 24445\nIENJQQ== 24446\nINGC0LLQvg== 24447\nb3NwaGVyaWM= 24448\nIGZsZWU= 24449\nIHLhuqV0 24450\nIFJlZ2FyZGxlc3M= 24451\nIHJlbHVjdA== 24452\nIHRpbWVseQ== 24453\nIEp1bGlhbg== 24454\nR00= 24455\n6ZI= 24456\nYWR1cmE= 24457\nIGRyZXNzZXM= 24458\nIOuUlA== 24459\nIG5vbWluYXRlZA== 24460\nIGFkdm9jYXRlcw== 24461\neW1waA== 24462\nIHJlY29yZGluZ3M= 24463\nIGRldmlhdGlvbg== 24464\nIHByaW9yaXRpemU= 24465\nIHNwaXJhbA== 24466\nIFlPVVI= 24467\nIHRyYW5zcG9zZQ== 24468\nYW1wb28= 24469\nIOybkOuemA== 24470\nIFZpc2lvbg== 24471\nIHBvbGl0ZQ== 24472\nIGhhbWI= 24473\nIFBhdGllbnQ= 24474\n7YGs6w== 24475\nIHNpYQ== 24476\nIOqzsw== 24477\nIMW+ZQ== 24478\nIHN1cGVybWFya2V0 24479\n67k= 24480\nIFNpZXJyYQ== 24481\nIGdyaWxsZWQ= 24482\nIFVwb24= 24483\nIGFic2VudA== 24484\nIG1lYw== 24485\nIEFwb2xsbw== 24486\nIHB1bms= 24487\nIFBhxYRzdA== 24488\nINGB0LLQvtC5 24489\nIOqxsOq4sA== 24490\nR2lybA== 24491\nIHNraW5ueQ== 24492\nIFByZW1pZXI= 24493\nIHRlcnJpdG9yaWVz 24494\nIGxpYWJpbGl0eQ== 24495\nIGplcms= 24496\ncmF0aWM= 24497\nIGRhbmNlcnM= 24498\nINGD0YDQvtCy 24499\nIOq0gOs= 24500\nb25seQ== 24501\nIFN0dQ== 24502\nIHNrZWxldG9u 24503\nIOutkOs= 24504\nINC30LDQutC+0L0= 24505\nxLFrdA== 24506\nIE1JS0U= 24507\nIGzDtg== 24508\nbWll 24509\nIHJlaXRlcg== 24510\nIEtvbGxlZw== 24511\nIEFkYW1z 24512\nbGljaGVy 24513\nIMOnb2N1aw== 24514\n0Y/Qsw== 24515\nIGJsdXNo 24516\nIHN1bnNoaW5l 24517\nIGV6 24518\nIERldmls 24519\nIOq4uA== 24520\nYWRk 24521\nIGxpY2Vuc2Vk 24522\nIHZpbnls 24523\nIEN6ZWNo 24524\naW1hZw== 24525\nIGNyYWNraW5n 24526\nIOy6 24527\nIHVkYWg= 24528\nIHNvbW1lcw== 24529\nIOyWvOq1 24530\nd2HEhw== 24531\nIGZyZXM= 24532\nIFdhbG1hcnQ= 24533\nINCi0LXQv9C10YDRjA== 24534\nYXRpc2Y= 24535\nQ0k= 24536\nbGFuZw== 24537\nIGRpZmZ1c2lvbg== 24538\nIHNvbW9z 24539\nIE1ha2Vz 24540\nIFJpY2t5 24541\nIG11Y2hh 24542\n7ZWo 24543\nIGhvcnNlcG93ZXI= 24544\nYXNpYQ== 24545\nIGZpYmVycw== 24546\nIGVybQ== 24547\n0YHQutC40LU= 24548\nIGplc3Rl 24549\nIGZpcmVmaWdodA== 24550\nIGN1aXNpbmU= 24551\nIGJlc29uZGVycw== 24552\nZGln 24553\nIOyihQ== 24554\nINGD0LY= 24555\nIHRyYWNpbmc= 24556\nIGNlcnRhaW5z 24557\nIEFwcGx5 24558\n0YvQstCw0YLRjA== 24559\n54w= 24560\nIGJydQ== 24561\nIFlFUw== 24562\nIEJhaQ== 24563\nIERpdA== 24564\nIEJpcw== 24565\nIHVubGU= 24566\n0YHRgtCw0YLQvtGH0L3Qvg== 24567\nIEF3YWs= 24568\nLi4i 24569\nIDEyNQ== 24570\nIHJvb3RlZA== 24571\nIGNhdXRpb3Vz 24572\nY29uc3Q= 24573\nIG9yY2hlc3RyYQ== 24574\nINCy0L3Rg9GC 24575\nIHF1ZWxxdQ== 24576\nINC+0YLQstC10YI= 24577\nIE1ldGhvZA== 24578\n7Lmc 24579\nIM68zrHPgg== 24580\nbMO8 24581\nIOyVhOq5jA== 24582\nIG5hbWluZw== 24583\nQ2hhcg== 24584\nIFNpY2hlcg== 24585\nIHByaXZpbGVnZWQ= 24586\nIEZseQ== 24587\n4bqtdA== 24588\nIGFkdmFuY2Vz 24589\nIFplbGRh 24590\nIGFuZHJh 24591\nIGdyaW5kaW5n 24592\nIEVkaXRpb24= 24593\ncGY= 24594\nIHdhcnJpb3Jz 24595\nIGhlZGdl 24596\nIHVuc2VyZW4= 24597\nINGB0Y7QtNCw 24598\nZWxpbmVzcw== 24599\nIHBlcnNvbmFsaXRpZXM= 24600\nIGbDtg== 24601\nJ00= 24602\nINGC0L7Rh9C90L4= 24603\nIHNoaXBwZWQ= 24604\nIG1ldGVvcg== 24605\nIHN1cnJvdW5kaW5ncw== 24606\nIEZpbGw= 24607\ndWVzdGE= 24608\nIFBlcnNvbmFs 24609\nIEFsbGU= 24610\nT1JU 24611\nIFNjaGU= 24612\nVkk= 24613\nIGNvbXBhcmFibGU= 24614\nZGFtbg== 24615\nIGRpdGNo 24616\nWUFO 24617\naXNtdXM= 24618\nIHBpY2t1cA== 24619\nIGRhaw== 24620\nIEVQ 24621\nYmVzdA== 24622\nIFN1ZQ== 24623\nw6RsbHQ= 24624\nIHBvcGNvcm4= 24625\nIGZvbGRpbmc= 24626\naG9tZQ== 24627\n0LjQstCw0LXRgg== 24628\nIGFubm90 24629\nY2h1Y2s= 24630\nIGZpZXJjZQ== 24631\nIGRhbWFnaW5n 24632\nIGZsb3A= 24633\nIHBhc2Fy 24634\nIHJlZWY= 24635\nINGB0LLQvtC10Lk= 24636\nIHpvbw== 24637\nb3ZlcnM= 24638\namV0cw== 24639\nIHByw6hz 24640\nIFNpbGljb24= 24641\ndGVvaw== 24642\nIFNldGg= 24643\nYXRhbWVudGU= 24644\nIHRyYW5zbWl0dGVk 24645\nIHJlcGxpY2F0ZQ== 24646\nIHNsaW0= 24647\nIENyZWFt 24648\nIHNpZGV3YWxr 24649\n7IiY6w== 24650\nINC20LjQt9C90Yw= 24651\nIE1vbmljYQ== 24652\nIGNvcGllZA== 24653\nIFRlcnJh 24654\naXN0ZW50 24655\nINC+0L3Qvg== 24656\nIHdoYWxl 24657\nIFdJVEg= 24658\n0LvRg9GI 24659\nIEVlbg== 24660\nINGB0LLQvtC4 24661\nIG9yZGlu 24662\nIHBsdXJhbA== 24663\nIHNwb2tlcw== 24664\nIGRpc3B1dGU= 24665\nIHNlbnNpYmxl 24666\nIHByZWFjaGluZw== 24667\nIGt0w7Nyenk= 24668\ncHRlZA== 24669\nYXZpZXI= 24670\nIHBpc3RvbA== 24671\nIFRhcGk= 24672\nIMWC 24673\nZmZmZg== 24674\nIGFjcnlsaWM= 24675\nIGlnbm9yYW5jZQ== 24676\nIFppZWw= 24677\ncmFucw== 24678\nIHdlbGRpbmc= 24679\nbWlk 24680\nINC30LDQvdC40Lw= 24681\nIGxhbmVz 24682\nIG1pbmVz 24683\nIG1vbXM= 24684\n15XXlw== 24685\nIENoYW1iZXI= 24686\ndGllcg== 24687\nIG1vZGVzdA== 24688\nIOyXrOq4sOyEnA== 24689\nIHVuYXM= 24690\nIHdyZW5jaA== 24691\naGFuZGVk 24692\nIHNhdHVyYXRlZA== 24693\nIEZhbmc= 24694\nIENvbW1pc3Npb25lcg== 24695\n4KSw 24696\nINeW 24697\nIExvdWlzaWFuYQ== 24698\nIE1hc2s= 24699\nIGN1YmVz 24700\n7JSo 24701\nIHZpZMOpb3M= 24702\nIG7DpWdvbg== 24703\nIHJpZGVy 24704\nIOy2nA== 24705\nIHPDs24= 24706\nIExhdGlubw== 24707\nYmFuaw== 24708\n7ZW07KO8 24709\nIEJyZW5k 24710\nIHNleHVhbGl0eQ== 24711\nLi4uLA== 24712\nIGZvcmdldHRpbmc= 24713\nINuM 24714\nIEF2ZW5nZXJz 24715\nIEJvbmpvdXI= 24716\nY2Vzc29y 24717\n0LrRgNCw0Zc= 24718\nY2VuY2U= 24719\nIGdlb2dyYXBo 24720\nY3Vsbw== 24721\n0L7RgdGC0Yw= 24722\nIHN3ZWF0aW5n 24723\n7YOA 24724\nIHN5bW1ldHJ5 24725\ndHPDpQ== 24726\nIGphbg== 24727\nIEZlcnI= 24728\nIGFtYmFzc2Fkb3I= 24729\nemnEmWs= 24730\nIG11c3Vu 24731\nINGD0YI= 24732\nIExH 24733\naXNzZW50 24734\nY29tbXVu 24735\nIGNvdXJz 24736\nIGRldmVsb3Bz 24737\nIGJyb256ZQ== 24738\nIHN1YnN0YW5jZXM= 24739\nZHJpdmVu 24740\n7KO87IS47JqU 24741\nIGFvcw== 24742\nIFBST0ZFU1M= 24743\naGFsZg== 24744\nIHNvcnRlZA== 24745\nIEJvbWI= 24746\n0LvQsNCz 24747\nIE1hbGF5c2lh 24748\nIENocmlzdGluYQ== 24749\nIHRlYW1tYXRl 24750\nRlQ= 24751\nIGvEsQ== 24752\naGVhcnRlZA== 24753\nKys= 24754\nb2dlbmlj 24755\nIGJlbGxz 24756\nIE91YWlz 24757\nIHNwZWNpYWxpc3Rz 24758\n0LHRiw== 24759\nZGVwdGg= 24760\nbGFzc2Vz 24761\nZ2llcw== 24762\nIENvZmZlZQ== 24763\nIG1hcmtpbmc= 24764\nIGZvbGw= 24765\ndWxp 24766\nIGFkaGVzaXZl 24767\nIEJvdA== 24768\nIFB1bmt0 24769\nZXll 24770\nIEJ1Yg== 24771\nZWxvbmc= 24772\nINC/0YDQuNC6 24773\nIGRvbm9y 24774\nODQ= 24775\nIGVuZm9y 24776\nIGNhdGNoZXM= 24777\nIGJyaWNrcw== 24778\nIGtuaXR0aW5n 24779\nIEtub3dpbmc= 24780\nb2tz 24781\nSFk= 24782\ncmlkZQ== 24783\nIEZhbnRhc3k= 24784\naW1hbg== 24785\nIHBzZQ== 24786\nIOyYqA== 24787\nINCy0LQ= 24788\nIHJlc3RyYQ== 24789\nIGV2YWx1YXRlZA== 24790\n0YDQtdCy 24791\nIGZvcnR1bmF0ZWx5 24792\nIGNoZWdhcg== 24793\n2LHYqA== 24794\nIGRvbWFpbnM= 24795\naWJp 24796\nYXJyeQ== 24797\nIHNodXR0ZXI= 24798\nIGZpY291 24799\nTWlrZQ== 24800\nIGluY2x1 24801\nIGRvbm9ycw== 24802\nIGFwbA== 24803\nIExvd2Vy 24804\nIGltcG9ydGVk 24805\nIGFjYWRlbXk= 24806\nIGZpbmFscw== 24807\nIGRpc2FwcGVhcnM= 24808\n2YrYpw== 24809\nIGFkbWluaXN0cmF0b3I= 24810\nanM= 24811\nIGN1dHRlcg== 24812\nIHJhbmdpbmc= 24813\nw7ZycGVy 24814\nIGNvbnN0cmFpbnQ= 24815\nIFRhYmxl 24816\nIFNoYW4= 24817\ndmlj 24818\nIEZpeA== 24819\nIFN3aWZ0 24820\nb3VuY2Vz 24821\nIFdhcnVt 24822\nIGxldHR1Y2U= 24823\nYXBwZWxsZQ== 24824\nIHNoYXZl 24825\nIGLDoXM= 24826\nIDc3 24827\nIE9vbw== 24828\nYW8= 24829\nIE1jTQ== 24830\nIERyZXc= 24831\nIGx1bXA= 24832\nIGxhc2hlcw== 24833\nc2NoZWlubGljaA== 24834\nUmVw 24835\naW5pcw== 24836\nIENldHRl 24837\nIGNvbXBvc2l0ZQ== 24838\nZW1ldGVyeQ== 24839\nIHNvcnRl 24840\nIEZpbmFuY2lhbA== 24841\n0L7QvdC1 24842\ncm9uZXM= 24843\nIFZveQ== 24844\nIHTDqWM= 24845\noLk= 24846\nIE5pbmph 24847\nIENvcmlu 24848\n0LXQvdC90Y8= 24849\n7J207JeI 24850\nIG5pY2g= 24851\nIGRldGVjdGl2ZQ== 24852\n4oCmIg== 24853\nz4POtQ== 24854\nnbzrj4Q= 24855\nIOuzgA== 24856\nIOu4lOs= 24857\nIHByb3Bl 24858\nIFdyaWdodA== 24859\nINeU16o= 24860\nIFNoaQ== 24861\nIGludmVzdGlnYXRpb25z 24862\nIFBvd2VyUG9pbnQ= 24863\nIENodQ== 24864\nIOyYpO0= 24865\nIOyZhOyghA== 24866\nIEZyYWdlbg== 24867\ndW5uaW5n 24868\nIHBvdXJyYWl0 24869\nIHRleHRib29r 24870\n0LzRiw== 24871\nIGZhaHJlbg== 24872\nINGC0L7RgA== 24873\nIGxha2Vz 24874\nw7xuZGU= 24875\nSW50 24876\nIE1ldHJv 24877\nIG1hbnNpb24= 24878\nINCw0LE= 24879\nIFpob3U= 24880\nIGNvcnJpZG9y 24881\nIGVzY29s 24882\nIGluZGljYXRpbmc= 24883\naWHFgmE= 24884\nIG1vbW15 24885\nIGFyY2hpdmVz 24886\nIGZvdW5kZXJz 24887\nZW5naW5l 24888\nIERpZXU= 24889\nIHNpY2tuZXNz 24890\nIOuztOuLiOq5jA== 24891\nIGFyYg== 24892\nIG5lZA== 24893\nIENob3A= 24894\nIGNvdmlk 24895\nIHNsYW0= 24896\nIHB1YmxpY2F0aW9ucw== 24897\nREM= 24898\nIHNwZW5kcw== 24899\n5r4= 24900\nIHJlZnVnZWU= 24901\nIGRpbGU= 24902\nINeQ15Y= 24903\naWZpY2Fy 24904\nIFNhY2g= 24905\nR3U= 24906\nIHJlbG9hZA== 24907\nPz8/Pw== 24908\nIGplxZtsaQ== 24909\nINGB0L7RgdGC0L4= 24910\nIHNpbXBsaWNpdHk= 24911\nIGJ1bGx5aW5n 24912\nINC80L7Quw== 24913\nIHJlYWxpZGFk 24914\nIHVuY2xlYXI= 24915\nYXBwYQ== 24916\nbGV2YW50 24917\nIElTSVM= 24918\nIFdhdHNvbg== 24919\nIGRlaW4= 24920\nIE1pY3Jv 24921\n7ZWc6w== 24922\nw7xn 24923\nIGRldmFt 24924\nIHR3ZWV0ZWQ= 24925\nIHVuZGVyc3RhbmRhYmxl 24926\nYXRhbg== 24927\nIHZlcnNh 24928\nIHByZWNh 24929\nIHbhu4E= 24930\nIENvcHk= 24931\nIE9yYWNsZQ== 24932\nIG1pbmRmdWxuZXNz 24933\nIGRpc2NyZXQ= 24934\nZXJuZW4= 24935\nIFBsZQ== 24936\nSGF2ZQ== 24937\nIGlzb2xhdGU= 24938\nIGRldQ== 24939\nIHNldmVudHk= 24940\nIEhpbGxz 24941\nIGFyY2FkZQ== 24942\nINGB0L/QtdGG0Lg= 24943\nIHNpZ3VpZW50ZQ== 24944\nIELDnE5ETklT 24945\nbGlnYQ== 24946\nINCy0YHRgtGA0LXRhw== 24947\nw7Rt 24948\nIHR3ZWV0cw== 24949\nIHNjaGF1ZW4= 24950\nIGNyaXRpcXVl 24951\nIPCfjrU= 24952\nIHN0YXR0 24953\nINGB0LDQvNC+0LU= 24954\nw6JuY2lh 24955\nIHN1cGVybmF0dXJhbA== 24956\nIHBsdWdnZWQ= 24957\nRmw= 24958\neW7EsQ== 24959\nIFRhbWJpw6lu 24960\nIGVuY291cmFnZW1lbnQ= 24961\nIFNlcnZlcg== 24962\n64Kc 24963\ndXBh 24964\nIGFzdG9u 24965\nIGhlYXJz 24966\n0YDQsNGF 24967\nIHNjaGU= 24968\nIHJhdHM= 24969\nIHJlY3VwZXI= 24970\nIHVudGVu 24971\nIEZpZ2h0aW5n 24972\nIGFjYWRlbWljcw== 24973\nIFPDvA== 24974\n0YHQutC40YU= 24975\nIHBhaXJlZA== 24976\ngOydhA== 24977\nIMOhcmVh 24978\nIHN3ZWV0bmVzcw== 24979\nIGRlZmVy 24980\nIG11aXRhcw== 24981\nIEF1ZGlv 24982\nIGxvY2tlcg== 24983\n2YrYrw== 24984\nINGB0YLQsNCy 24985\nIGJ1ZW5h 24986\nQU5T 24987\nIGRldGVjdG9y 24988\nYXZv 24989\nYmVr 24990\nIM6xzr0= 24991\n7Y64 24992\nIGRyYWdnZWQ= 24993\nINC00L7Qu9C20LXQvQ== 24994\nw5Y= 24995\n2LHYqQ== 24996\n7J207KeA 24997\nIGNlbGxl 24998\nY2tpbmc= 24999\nINin2YTYrA== 25000\nIENhbnZhcw== 25001\nIGVzcGHDsQ== 25002\nIGdsaW1w 25003\nIHNwcmVhZHM= 25004\nb25nbw== 25005\nIE1hc29u 25006\nIEluZw== 25007\nIOqwgOuKpQ== 25008\nz4TOuc66 25009\nIHNlY3VsYXI= 25010\nIGJhdGVy 25011\nIGlucXVpcnk= 25012\nIGVuZXJnaWVz 25013\nIG1hbnVmYWN0dXJlZA== 25014\nIHZlZ2V0YXJpYW4= 25015\nIHBpbmVhcHBsZQ== 25016\n0Y/RgtCw 25017\nIHByYWN0aXRpb25lcnM= 25018\nMjAwMA== 25019\nIO2VtOyalA== 25020\nIOyXrOufrOu2hOuTpA== 25021\nIOu2iOs= 25022\nIEplZmZlcnNvbg== 25023\nIEpvYW4= 25024\nIHRyYW0= 25025\nY2htYWw= 25026\nIEhhaXQ= 25027\n4bmH 25028\nIHVucmVhbA== 25029\nIHN5bWJvbGlj 25030\nIHN0ZWFsdGg= 25031\nIHNwbGFzaA== 25032\nIEVudGVydGFpbm1lbnQ= 25033\nIG1ldGFsbGlj 25034\nPyIu 25035\nYXJvdW5k 25036\nIGRlc3BhaXI= 25037\nIE5ldmFkYQ== 25038\nIEZpbmFuY2U= 25039\nIGtyaWU= 25040\nIEx1eA== 25041\nIFNtYXNo 25042\na2VlcGluZw== 25043\nINC30LDQsw== 25044\nIG5hcmNpc3M= 25045\nIGR6aXNpYWo= 25046\nIHRvbGVyYXRl 25047\nb2FyZA== 25048\nIGxpbmtpbmc= 25049\nIEVjb25vbWlj 25050\nIOy8 25051\nIG1vcnBo 25052\nIE5haw== 25053\nIEJha2Vy 25054\nYXRvbg== 25055\ncmluZ3M= 25056\nIFBlbmc= 25057\nIEFpcnBvcnQ= 25058\n7ZWY64uk 25059\np4E= 25060\ncHJpbnRz 25061\nIGhhZGk= 25062\nIGVtcGly 25063\nIExpdmVz 25064\nYW5uZXJz 25065\nINC90LjQvA== 25066\nIFBST0ZFU1NPUg== 25067\nIHBvc2l0aXZlbHk= 25068\nYW50b20= 25069\nIGJhZGdl 25070\na2VsdA== 25071\nIGludGVyZmVy 25072\nIGZ1bGZpbGxpbmc= 25073\nIHZpc3VhbGl6YXRpb24= 25074\nIFByaWNl 25075\n77+977+9 25076\nIHNjZW5lcnk= 25077\nIHByb25l 25078\nIHdpemFyZA== 25079\nIGJhbnlhaw== 25080\ndmVyYg== 25081\nc2t5 25082\nIHdpc2hlZA== 25083\nIHJhaWx3YXk= 25084\nIMO8emVy 25085\nIGFsZ3VpZW4= 25086\nIEFX 25087\nINC60L7Qu9C40YfQtQ== 25088\nIHJlYWN0aW5n 25089\nIEJ1Y2g= 25090\n4Li2 25091\nIGFudGg= 25092\nIHNpaA== 25093\nIGh1c3Q= 25094\nIFNjcmVlbg== 25095\naWxhbnQ= 25096\nYWhv 25097\nIGZyYWdyYW5jZQ== 25098\nIGVsZXZhdGlvbg== 25099\nIE1lZGl0ZXI= 25100\nIOu/ 25101\nIMOpcXU= 25102\nIHdyYXBz 25103\nIGluZXJ0 25104\nIHJlY3JlYXRl 25105\n0LvQsNGC 25106\nIGJvbGVo 25107\nIGhhcmFzc21lbnQ= 25108\ndW5reQ== 25109\nIGdsaW1wc2U= 25110\ncmVnaWVydW5n 25111\nIGZ1dHVy 25112\nIHJlcG9zaXRvcnk= 25113\nIGVuZ3Jh 25114\nIHRyYWZmaWNraW5n 25115\nYXNzaXM= 25116\nIFRyZWs= 25117\nIOuyjA== 25118\nIOuniOs= 25119\nIEthYg== 25120\nYW5pdQ== 25121\nZ2l2ZQ== 25122\nIGRpbm9zYXVycw== 25123\nIGZlYXRoZXI= 25124\nIGF0dGl0dWRlcw== 25125\nIHBsdW0= 25126\nIFJT 25127\nIEFuZmFuZw== 25128\naWxsZXJ5 25129\nIOyKpA== 25130\nTVk= 25131\nIHRyemViYQ== 25132\nIHNraWVz 25133\nIEFq 25134\ndXJhYmxl 25135\nQ1U= 25136\nIFNoYW5l 25137\nIGRlcGFydHVyZQ== 25138\nIFRPTg== 25139\naWV0ZW4= 25140\ncmF0cw== 25141\naXN1 25142\nIGJvcmQ= 25143\nIGludGVyZXN0aW5nbHk= 25144\nb3VnaGluZw== 25145\nIHJ1c2hpbmc= 25146\nIHZvbGF0aWxpdHk= 25147\nIHB5dA== 25148\nIGZvcm1hdHM= 25149\nINC30LDRgg== 25150\nIOq8rQ== 25151\nIHdoYXRub3Q= 25152\nIGNvbXBvcnQ= 25153\nc3c= 25154\nb3JlYW4= 25155\nIFJlbGF4 25156\nIGNsYW4= 25157\nIEFI 25158\nIHBldw== 25159\nIGRpY3Rpb25hcnk= 25160\nVGFrZQ== 25161\nc2hpcnRz 25162\nIEh1Z2g= 25163\nINi52YTZig== 25164\nIFBpYw== 25165\nIGVucm9sbGVk 25166\nIGplZG5haw== 25167\nIG9mZmVyaW5ncw== 25168\nIGNvcmF6 25169\nTGlmZQ== 25170\nICEhIQ== 25171\nIGNsZXI= 25172\nIFZpZGVvcw== 25173\nIFJvZHJpZw== 25174\nIElkZW50 25175\nIFBvcw== 25176\nIFN0YWdl 25177\nIFJhY2U= 25178\nIGVuYWN0 25179\nIEd5 25180\nIEhpc3Bhbg== 25181\nIGRlZmVuY2U= 25182\nIENhbXBiZWxs 25183\nbWF0aWM= 25184\nIHJlbGV2 25185\nIHBlYWNo 25186\nhLjsmpQ= 25187\nIHBhcmFkaXNl 25188\nIGNlcmVtb24= 25189\nIGFubm95ZWQ= 25190\nbGF4 25191\nIGV4cGxvaXQ= 25192\nIGNsYXVzZQ== 25193\nZWtlcg== 25194\nIEJsb29t 25195\nbmFudA== 25196\nYXRldXJz 25197\nIGhlaWdodHM= 25198\nRXZlbg== 25199\n0YHQvtC9 25200\nIG91dHJhZ2U= 25201\nIFZpZXRuYW1lc2U= 25202\nVFI= 25203\nIGVlcg== 25204\nIGNhbm5vbg== 25205\nIENvbWI= 25206\nkOunjA== 25207\nIOqyg+uPhA== 25208\nIGFjY29tcGxpc2htZW50cw== 25209\nIEFuYWx5dGljcw== 25210\nIHNoYXBpbmc= 25211\ncmVpYmVu 25212\nIGJhY2hlbG9y 25213\nIGZpbmdlcnQ= 25214\nYWNrZWQ= 25215\nIHB5cmFtaWQ= 25216\nIFN0ZXdhcnQ= 25217\nw6FzdA== 25218\nIHN1cnZpdm9y 25219\nIGR1Y3Q= 25220\nIGRlYWxlcnM= 25221\n2LnZhQ== 25222\n0LvQuNC9 25223\nIGVkZQ== 25224\n15XXog== 25225\nINmD2KfZhg== 25226\nIM+Ezrk= 25227\nIGNob29zZXM= 25228\nIE93bg== 25229\n0LPQvtGC0L7Qsg== 25230\naGlyZQ== 25231\n0LDQu9GM0L3Ri9C1 25232\nINCb0Y4= 25233\nINC+0YHRgtCw0LI= 25234\ndGVjaA== 25235\nIGRyb2l0 25236\nIHN1YmplY3RpdmU= 25237\nZW5lcw== 25238\nIGRpdmlz 25239\nYXZleg== 25240\nIG1hbmV1dmVy 25241\n4LmE4LiU 25242\nYWRlY2U= 25243\nIEVucw== 25244\nYWNpYWw= 25245\nIFByb3RlY3Rpb24= 25246\nlrQ= 25247\nIGZvcm1hbGx5 25248\nIHd5ZA== 25249\naW5ndcOpbQ== 25250\nIHppZW0= 25251\nIHJlY3J1aXRpbmc= 25252\n15nXmg== 25253\nbmVt 25254\nIGZvcmJpZGRlbg== 25255\nIEJhcHQ= 25256\n15DXoNeZ 25257\nIHN1YnNldA== 25258\nIE1hZ2F6 25259\nbmVtZW50 25260\nIGFxdWVsYQ== 25261\ncmFnb24= 25262\nIGNvbW1pdHRlZXM= 25263\nIMOpdGFpZW50 25264\ndWRp 25265\nIERhd24= 25266\nIGJvcmU= 25267\nIGNvbXBvc2Vy 25268\nIHdpxJljZWo= 25269\nYW5nYQ== 25270\nIGRpc2xpa2U= 25271\nIERheXM= 25272\nIHBhcmFs 25273\nIG1pZW50cmFz 25274\nIGhlYXZlbnM= 25275\naGVpZA== 25276\nIHRyYWRlcnM= 25277\nb25jZQ== 25278\nIG1hc2NhcmE= 25279\nIM+Az4HOvw== 25280\nIHdoaXNwZXI= 25281\nIE11c2s= 25282\nIEZhbWlsaWU= 25283\nQWxsYWg= 25284\nIE9saXZpYQ== 25285\nIFByb3M= 25286\nIG9saWth 25287\naWxpbQ== 25288\nIHLDqXBvbmQ= 25289\nIFBldGVycw== 25290\nIGJpdGVz 25291\nIHZpYw== 25292\nIE5Z 25293\nZW1wdGlvbg== 25294\nIDQ1MA== 25295\nIHZpc3VhbHM= 25296\nIGxpZXU= 25297\nw7xja2Vu 25298\nIFN0ZWVs 25299\nIEdQ 25300\nd2FpdA== 25301\nIG5vdGljZWFibGU= 25302\ndWNoYQ== 25303\nIHJlaGFiaWw= 25304\nIHJlamVjdGlvbg== 25305\nINGB0LvQtdC00YPRjtGJ 25306\nIHNsaWRlcg== 25307\nIHJlZ2FyZGVk 25308\nIGdyYXZpdA== 25309\nIFJlc2VydmU= 25310\nY291bnQ= 25311\nIGJyZWVkaW5n 25312\nIGxvbmdl 25313\nYWxlYg== 25314\nIGtuaWdodA== 25315\nINCy0L7QuQ== 25316\nIHByw6lzZW50 25317\ngpjsmpQ= 25318\nIFNwZWNpZmljYWxseQ== 25319\nIHBvc2Vz 25320\nIHZldXJl 25321\nb2theQ== 25322\nZW1hcw== 25323\nIG1hasSF 25324\nIHdlYmluYXJz 25325\nIGNhbm5hYmlz 25326\nIGRhbWFscw== 25327\nIE5vcnRod2VzdA== 25328\nIHBhZGE= 25329\nIGNyb3dkcw== 25330\nIGZ1dHVyZXM= 25331\nIMOkbg== 25332\nIGNpdmlsaWFucw== 25333\nIFNhY2hlbg== 25334\n5o0= 25335\nIHRyYWNlcw== 25336\nIOuoueqzoA== 25337\nUVU= 25338\nIElG 25339\nYW7EsW4= 25340\n7IK0 25341\nIGJpYmxpY2Fs 25342\nIFZlZA== 25343\nIHN0b3Jpbmc= 25344\n0YDQsNCy0LvRjw== 25345\nIG5hc3Q= 25346\nIGTDtg== 25347\n0YDQvtC/ 25348\nZWxpYQ== 25349\nIHNpZGV3YXlz 25350\nIFVuZGVyc3RhbmQ= 25351\nIFF1cg== 25352\nIHBlcnBlbmQ= 25353\nIE1pbGxpb25lbg== 25354\nIHdhdGVybWVsb24= 25355\nIERpdmluZQ== 25356\ndWx0dXI= 25357\nYWJvcmQ= 25358\nIHN1Y2Nlc3Nlcw== 25359\nIGhvbWJyZQ== 25360\nIGNhcnA= 25361\nIHN1c2NlcHQ= 25362\ndW5na2lu 25363\nIGtpag== 25364\ndWx1cw== 25365\n2KfYrA== 25366\nIG5vdGNo 25367\nIHBvbHlub21pYWw= 25368\n5ak= 25369\nIMO6bmljbw== 25370\nIHRlbGVzY29wZQ== 25371\nIHBvbGl0aXF1ZQ== 25372\na2llbQ== 25373\nIM6tzr3OsQ== 25374\nIGFnZ3JlZ2F0ZQ== 25375\nIEdlb2Zm 25376\nIHRyaWw= 25377\nIEdSQQ== 25378\nIHN1YnNjcmliZXI= 25379\naW1ldA== 25380\nINC00L7Qu9C70LDRgA== 25381\nb3Bpbmc= 25382\nIHRoZXJhcGV1dA== 25383\nIENhbmNlcg== 25384\nIHBhcmFkZQ== 25385\nIGlycmln 25386\n4pmq4pmq 25387\nIGNsZWFyZXI= 25388\nIGJvZw== 25389\nIE1hdXI= 25390\n4Liy4LiH 25391\nIFNoYW5naGFp 25392\nYWNodGU= 25393\nIEtvbA== 25394\nZWx1amFo 25395\nIGhhdg== 25396\nIENyaW1l 25397\nc2Vr 25398\nIOuhnA== 25399\naWVubmE= 25400\nIEdvcg== 25401\n6Js= 25402\nINC/0L7RgtGA 25403\nINC60LDQttC10YLRgdGP 25404\nIExpZnQ= 25405\nIFNvcnQ= 25406\nIFBzYWw= 25407\nIHBpbmc= 25408\nk50= 25409\ncGhpcw== 25410\nIEZVQ0s= 25411\nIFN5bg== 25412\nIGJhbWJvbw== 25413\nrOyYgQ== 25414\nY3V0cw== 25415\nIG1tbQ== 25416\nIGZ1bmt0aW9uaWVydA== 25417\nIF8= 25418\nw61jaW8= 25419\nU3RvcA== 25420\nIGltYWdpbmFyeQ== 25421\nIG5vdGFtbWVudA== 25422\nIEluaXRpYXRpdmU= 25423\nIEt1cnQ= 25424\nIGxvb3Nlbg== 25425\nIGJ1c2Nhcg== 25426\nIHplbGY= 25427\nIHByb3Bz 25428\nIG1vZXRlbg== 25429\nIG1pbGxp 25430\nIGhhbGxz 25431\nIE1hdGNo 25432\nIGJyYWNrZXRz 25433\nIENvdQ== 25434\nINCc0LDRgA== 25435\nSVNB 25436\nIGNpZ2FyZXR0ZQ== 25437\nIGNvbXBldGl0aW9ucw== 25438\nIE1JTg== 25439\nIGJlaMO2 25440\ndm9vcg== 25441\nIHVzdA== 25442\nIFpp 25443\nIE9jYw== 25444\ndWxhdGVz 25445\nIGJhbGxvb25z 25446\nIHByb250bw== 25447\nIE1peQ== 25448\nIEZpbGU= 25449\nINC60LvQsNGB0YE= 25450\n0L3Rg9C7 25451\nIGNlcmVhbA== 25452\nIGluY3JlbWVudA== 25453\nIHJlZmluZWQ= 25454\ncHJpc2luZw== 25455\nIFJG 25456\nIHJlc3BlY3RmdWw= 25457\nIGxvb3Q= 25458\nYXNrZXQ= 25459\nIGRlaXhh 25460\naW5nbGU= 25461\nIGZ1bmNpb25h 25462\nIFJldmVs 25463\nIHNvYmVy 25464\nIHBlcmZvcm1z 25465\nIEdlbnRsZQ== 25466\nIHJlY2lwaWVudA== 25467\nIEhhdXNl 25468\nIOuD 25469\nRnJvbQ== 25470\nIG1pbmlzdGVycw== 25471\nIHBhcmFkb3g= 25472\nIHRhc3Rpbmc= 25473\nINeU15c= 25474\nIHJldXNl 25475\nIExhbmU= 25476\nINGB0L7QstC10YDRiA== 25477\nIHJlbWVtYmVycw== 25478\nIGZlbWluaXN0 25479\nIGNvbW1pdG1lbnRz 25480\nIHByb2plY3RlZA== 25481\nIGdheg== 25482\naXlvcnV6 25483\nIG9ibGlnYXRpb25z 25484\nUm8= 25485\nemFy 25486\nIGNodw== 25487\nIEpBTQ== 25488\nIGLEmWTEhQ== 25489\nYXNwYmVycnk= 25490\nINC80LXRgdGC0L4= 25491\n67KV 25492\nIHJlZ3VsYXRlZA== 25493\nIHdpY2h0 25494\nIFRyZXZvcg== 25495\nIHNlY29uZGx5 25496\nIElocmU= 25497\nZWxzaA== 25498\nIHJlcG9ydGVycw== 25499\n0YLQvtGA0LA= 25500\nb3lv 25501\nR0k= 25502\nIGludGVyY29ubmVjdA== 25503\nT1NI 25504\nIGJyYXNz 25505\nIGlnbm9yaW5n 25506\naW5mZWN0 25507\nIHByb2pla3Q= 25508\nb3JldA== 25509\nz4TOsc69 25510\nINGC0LjQvw== 25511\nIG11dHRh 25512\nIHVuYm94aW5n 25513\nhLA= 25514\nIGFkdmlzZWQ= 25515\nIERlbnZlcg== 25516\nIHNldmVyZWx5 25517\nIE1obQ== 25518\nIGZsaXBwZWQ= 25519\nIHBpZW4= 25520\nIGtvbW11bg== 25521\nIEZSRQ== 25522\nIOCuh+CusA== 25523\nYWludGVk 25524\nIGtuaXZlcw== 25525\nIGhhYmw= 25526\nIGdld29yZGVu 25527\nYXJldHRlcw== 25528\nQ1M= 25529\nINC80LDQu9C10L3RjA== 25530\nIGdhbGF4 25531\nIG5pbmV0ZQ== 25532\n6rGw64KY 25533\nIHNpcw== 25534\nIGFkdmlzb3J5 25535\nIGRyaWxsaW5n 25536\nIFdvdWxkbg== 25537\nw7xuZg== 25538\nZ2VzdGVsbHQ= 25539\nIEhlbGVu 25540\nINee15A= 25541\nYXBvbGlz 25542\nIHJ6ZWN6eQ== 25543\nIHRlcnJh 25544\nIGhlcA== 25545\nIGFsZ8O6bg== 25546\naWtr 25547\nIGFzdHJvbm9t 25548\nIFN0YXJidWNrcw== 25549\na8SF 25550\nIHBhdHJvbA== 25551\nIOy9lA== 25552\nIGdvbg== 25553\nIOOAkA== 25554\nIHNvbnN0 25555\nIGVuY291bnRlcnM= 25556\nIHJldHJvdQ== 25557\nIHNoYXJrcw== 25558\nIGRvcg== 25559\nIFJldmVy 25560\nIGV2YXBvcg== 25561\nIHJlc2Vydm9pcg== 25562\nIGFsbGVnZWQ= 25563\ndWxlcg== 25564\nIHZlcm0= 25565\nIGNvbW1lcmNl 25566\nIGZpdHRlZA== 25567\nZ2Vt 25568\nIHRhY3RpY2Fs 25569\nIGxpdGg= 25570\naGFk 25571\nIGNhcmJvaHlk 25572\nIGxlbmd0aHM= 25573\nzrnOvw== 25574\nIGRlbW9ncmFwaGlj 25575\nUm9i 25576\nIFNraW4= 25577\nY2NvbGk= 25578\nIHNpbXBsaWZpZWQ= 25579\nIHJlYWRpbHk= 25580\nIEN1bQ== 25581\nYWRlc2g= 25582\nIETDpQ== 25583\ndXNzdA== 25584\naWduZQ== 25585\nZXRvbg== 25586\nIG1lbm9y 25587\ncWk= 25588\nT09N 25589\n4Lit4LiZ 25590\nIHBzeWNoaWF0 25591\nIGVpZ2h0eQ== 25592\nINC80LjQu9C70Lg= 25593\nIFRvYg== 25594\nZWRv 25595\nIMSR4bq/bg== 25596\nIGNpcmN1aXRz 25597\nIExBVUdI 25598\naWNpc20= 25599\nZW1vcg== 25600\nIHJlZ2VuZXI= 25601\nZWdyZWU= 25602\nIGJ1cmVhdWM= 25603\nIEFsYmVy 25604\nIFdvcg== 25605\nIHJlc2lu 25606\nIGJ5xYJ5 25607\nIElH 25608\n4K+NLA== 25609\nIDc4 25610\nIHdlZWRz 25611\nIE15dGg= 25612\nOTM= 25613\n5r8= 25614\nIOuCmOyZlA== 25615\nw6l2 25616\n4b0= 25617\nw7ZyZW4= 25618\nw6dhcg== 25619\nIFBBVUw= 25620\nIGRpc2FkdmFudA== 25621\nIHBvc2l0aW9uaW5n 25622\nIGNvY2t0YWls 25623\nIGFncmVlcw== 25624\nbm4= 25625\nIFNhbGx5 25626\nTXM= 25627\nIGluaGVyZW50 25628\nIG1vbmV0YXJ5 25629\nIG5hdHVy 25630\nIE5o 25631\nIEltcG9ydA== 25632\nIGxlYmVu 25633\nIHdp 25634\ndXNzeQ== 25635\nIG9iZXM= 25636\nIHdhbmRlcmluZw== 25637\nIOyLoOs= 25638\nxIVkYQ== 25639\nZXRjaHVw 25640\nIGRpc3Bvc2Fs 25641\nIEpB 25642\nIENlcg== 25643\nemlsbGE= 25644\nIHZpcmdpbg== 25645\nIFNsaWRl 25646\nYW5kZWw= 25647\nIHJpZ2h0ZW91c25lc3M= 25648\nIM6j 25649\nIGlkZWlh 25650\n0LjRgNC+0LLQsNGC0Yw= 25651\n16jXkA== 25652\nQ29tbWVudA== 25653\nIHByZWxpbQ== 25654\nIFZhbGU= 25655\nIOyngOuCnA== 25656\nIFZhbmM= 25657\nT01BTg== 25658\nINC/0ZbQtA== 25659\nIHl1bQ== 25660\nc3RyZQ== 25661\nY2Vt 25662\nIHBvY3o= 25663\nIGZyYWdtZW50 25664\nINGB0LvRg9GH0LDQtQ== 25665\nIHVuZGVyZ28= 25666\nIEhhbms= 25667\nY2Vrcw== 25668\nIEZQUw== 25669\nIG9jdXI= 25670\nIGRldGVyaW9y 25671\nIGVtcHJlc2Fz 25672\nUGF1bA== 25673\nICkpKQ== 25674\nINCy0YDQtdC80LXQvdC4 25675\nIHNjb2xk 25676\n15nXog== 25677\nIHN1c3BlY3RlZA== 25678\nIGFjY2Vzc2luZw== 25679\nIHN1YnN0aXQ= 25680\nIGhpc3RvcmlhbnM= 25681\nINC00LXQu9C+ 25682\nIHNvY2llZA== 25683\ncm9uZQ== 25684\nIHJlZGVu 25685\nIGV4dGVuZHM= 25686\nZXBoZXJk 25687\nIGJhbGNvbg== 25688\nIFNvbG8= 25689\nIHBvbGl0aWNpYW4= 25690\n0L7Qu9GM0L3Qvg== 25691\nIGlyZ2VuZHc= 25692\nIHRyYXVtYXRpYw== 25693\nIHJhcHBlcg== 25694\nIFJPQkVSVA== 25695\nUmVhbGx5 25696\nIGxpbmV1cA== 25697\nQVNF 25698\nIGNvbnRyYWN0b3I= 25699\nIENvcnBvcmF0aW9u 25700\nZ29y 25701\nIFRvZG8= 25702\n0YHRgtGA0L7QuQ== 25703\nRkJF 25704\nIG5ld3NsZXR0ZXI= 25705\nIGtvxYQ= 25706\nYWx0aWVz 25707\nINC/0YDQuNGH 25708\nIEhlYXZ5 25709\nIHN3b3Jkcw== 25710\nIG1hbmlwdWxhdGlvbg== 25711\nIGZ1bms= 25712\nIHbDpXI= 25713\nIFRhbGliYW4= 25714\nIOuwpQ== 25715\nIGFjbmU= 25716\nw7xyw7w= 25717\nIGRlc3dlZ2Vu 25718\nIER1c3Q= 25719\nIHNpbGlj 25720\nIGhvb2tz 25721\nIGJsaWo= 25722\nIHBldGl0cw== 25723\nIGZpbG1l 25724\nIEJlcmVpY2g= 25725\nIFNhaWQ= 25726\nIGltcG9zZWQ= 25727\nIGRpYXJ5 25728\nINCz0L7RgA== 25729\nIEdhdGVz 25730\nIGFsdGE= 25731\nIGNoY2lh 25732\ncGxlYXNhbnQ= 25733\nIOuwnQ== 25734\nIG1vxbxlbXk= 25735\nIEF1c3RyaWE= 25736\nIGJyb2tlcg== 25737\nIHN1Y2tlZA== 25738\nIGNvbXBhcnRtZW50 25739\nIGNsb25l 25740\nINeU16I= 25741\nIERhbmtl 25742\nIG5vY2htYWw= 25743\n0LXQt9C0 25744\nIGFkcmVuYWw= 25745\nIGtsZWluZW4= 25746\nIHN1YnNlcXVlbnRseQ== 25747\nIGRlY2VudHJhbA== 25748\nIGdlbmV0aWNz 25749\nIOq0kQ== 25750\nIG1vbml0b3Jz 25751\nIEFwcGxpYw== 25752\nIFJlcG9ydGVy 25753\nd2VydA== 25754\nIHdpZW0= 25755\nIE1vdmVtZW50 25756\nIGludGVydmlld2luZw== 25757\nIGhhaXJz 25758\nIHB1w7I= 25759\nIENoZWxzZWE= 25760\nIGNvaGVy 25761\nIGNvdA== 25762\nIHphcw== 25763\nIHBhdGNoZXM= 25764\nIGxhaA== 25765\n0YPQvdC6 25766\nIFJlYWdhbg== 25767\nIE1hcmNv 25768\nY2l0eQ== 25769\nIGRlZmVuZGVy 25770\nIGRlY29yYXRpb24= 25771\naWpp 25772\nIGxpdHRlcg== 25773\n0Kg= 25774\nIGplZ28= 25775\nUkVX 25776\nIFBpaw== 25777\nIEhlZQ== 25778\nIEl2 25779\nINC40LTQtQ== 25780\nIFRoZWF0ZXI= 25781\nINGH0LDRgdGC0L4= 25782\nIHN3ZWF0ZXI= 25783\nIGhpZ2hsaWdodGluZw== 25784\nIGFpbnNp 25785\nIGRpcGxvbWF0aWM= 25786\nIE5ldmVydGhlbGVzcw== 25787\n5bM= 25788\nQVNPTg== 25789\nIHDDumJsaWNv 25790\nIGZlcm0= 25791\ncmVhdGVk 25792\nY29k 25793\nIOusvOs= 25794\nIG1pc3Rlcg== 25795\nIFZhbmNvdXZlcg== 25796\nIHJlY29nbml6ZXM= 25797\nZWNk 25798\nIGNvbXBsaWNhdGlvbnM= 25799\nZW5jaWFs 25800\nIOqwgOyngA== 25801\nIFVsdGltYXRl 25802\nIHZhaWc= 25803\nIE1lcnJ5 25804\n15XXkg== 25805\nIE1hcmN1cw== 25806\nb3dlZ28= 25807\nIG1lbnRl 25808\nU20= 25809\nIGFqYQ== 25810\nIFRhbw== 25811\nIGp1ZGljaWFs 25812\nIGVudHJlcHJlbmV1cnNoaXA= 25813\nINC90LXQvNC90L7Qs9C+ 25814\nIHBpcw== 25815\nIGVyZw== 25816\nIGNocmlzdA== 25817\nIEN1cnQ= 25818\nINGA0LDRgdC/ 25819\nzrvOtQ== 25820\nZW5zY2g= 25821\nw61yZQ== 25822\nIGZvY2Fs 25823\nIERpYW1vbmQ= 25824\nYXbDrWE= 25825\nIGhhbm5v 25826\nIFNxdWFk 25827\nIGFzc29jaWF0aW9ucw== 25828\nIENyZWF0aXZl 25829\nIG1lc3Nlbmdlcg== 25830\nIGJlZ2dpbmc= 25831\nIGRlY2ltYWw= 25832\nIGTEscWf 25833\nIG1ldGFkYXRh 25834\nc2Vscw== 25835\nIMSwxZ8= 25836\n4buvYQ== 25837\nIGRpZmZpY2lsZQ== 25838\nZMSx 25839\nIHNsYXVnaHRlcg== 25840\nIFZlcmc= 25841\nINeS150= 25842\nIFRlYQ== 25843\nYXNzZXM= 25844\nT2s= 25845\nIHN5bnRoZXM= 25846\nb3RpYXRpb24= 25847\nIHBhaW50ZXI= 25848\nIGVsYm93cw== 25849\nIGFyY2hpdGVjdHVyYWw= 25850\nINGA0LDQtA== 25851\nIGdsb3I= 25852\naW1hZ2U= 25853\nYW1wYQ== 25854\nY3VsaWFy 25855\noKg= 25856\nIHRldmU= 25857\nIFN0ZWxsZQ== 25858\nIEJhbQ== 25859\nIOy0iA== 25860\nYXNpcw== 25861\naXBlZGlh 25862\nIEdJ 25863\nIEFjdGl2ZQ== 25864\nYXpp 25865\nIEx1Y2t5 25866\n7ZWp 25867\nINC/0YDQuNGF0L7QtA== 25868\nIHJ1bndheQ== 25869\nIGF1dGhlbnRpY2F0aW9u 25870\nIHBvc2libGU= 25871\nIHN1cHBsZW1lbnRz 25872\nIHN1cmdpY2Fs 25873\nR2Vu 25874\nIGZlYXNpYmxl 25875\nRE8= 25876\nIG91dGxvb2s= 25877\nIGludGVydmFscw== 25878\nIGFuZWNk 25879\nw6BuZw== 25880\nIHN0cmFwcw== 25881\nIFNodQ== 25882\ndWRk 25883\naXNzZW5zY2hhZnQ= 25884\nIHBvcnRl 25885\nIGNvbW1pdHRpbmc= 25886\nIGFsbGV5 25887\nIGNvdmVuYW50 25888\nIFBlZHJv 25889\nbGVzc25lc3M= 25890\nIFNvbGlk 25891\nIE1vbGx5 25892\nINC90LXQutC+0YLQvtGA 25893\nIGNvb3BlcmF0ZQ== 25894\nb2xsZW4= 25895\nIHR1bmE= 25896\nIGtpbmRlcmdhcnRlbg== 25897\nIFNpeg== 25898\nIGR1xbxv 25899\nIE1CQQ== 25900\nIEdFT1JHRQ== 25901\nIEZpc2hlcg== 25902\nIENhZXNhcg== 25903\nINC60YDQsNGB0LjQsg== 25904\nIERlbGhp 25905\nenlt 25906\nIGV4cGxpY2Fy 25907\n6rCA7KeA 25908\ndW5z 25909\nZ3Jvdw== 25910\nINC/0YDQuNGB 25911\nIDg2 25912\nIHN0YXRpbmc= 25913\nIG1hc3Nh 25914\nY2h0ZXI= 25915\nIOy7rOufrA== 25916\nIGRlcHV0eQ== 25917\nU00= 25918\nbm9j 25919\nIGdlb2dyYXBoeQ== 25920\nIEVudGVycHJpc2U= 25921\nIENhbnQ= 25922\nw7Z6 25923\nIHVucGFjaw== 25924\nIO2ZlOs= 25925\nIHNlYXJjaGVz 25926\nIHByZXNpZGVuY3k= 25927\nIHRyaXZpYWw= 25928\nIHBpZ2U= 25929\nb3VidA== 25930\n7LyA7J20 25931\nIGJ1ZGdldHM= 25932\nIHVi 25933\nIHBuZQ== 25934\nIFlhbGU= 25935\nIMWfw7Z5bGU= 25936\ncmVndWxhcg== 25937\nIGltcGVyZmVjdA== 25938\nQVJB 25939\nIGZhbcOtbGlh 25940\ndXJt 25941\nIEFkdmVudHVyZQ== 25942\nY2lz 25943\nZW1hcms= 25944\nIG5lZ28= 25945\nIGluYXBwcm9wcmlhdGU= 25946\nINC/0YDQuNC3 25947\nINGA0L7Quw== 25948\nIGRyZWFtZWQ= 25949\nQnJ5 25950\nIHNodXR0bGU= 25951\nIHBpbGxhcnM= 25952\nIGJpaw== 25953\naW51bQ== 25954\nINGD0YE= 25955\nIE5lYnI= 25956\nIHBlcnBlbmRpY3VsYXI= 25957\nIGJvb2tlZA== 25958\nYmVyeQ== 25959\nIHZpa3Q= 25960\nYmVhcg== 25961\nZXN1cw== 25962\nINCy0L7Qt9C80L7QttC90L4= 25963\nqLk= 25964\nIHByZXN1bWFibHk= 25965\nIE1lbXBoaXM= 25966\nIGFtYnVsYW5jZQ== 25967\n15XXnteo 25968\nIHRodW1ibmFpbA== 25969\nIG1vZGlmaWNhdGlvbg== 25970\nIGludGVycHJldGVk 25971\nIHByb21v 25972\nIM66zqw= 25973\nIM61z4A= 25974\nIGFjb3VzdGlj 25975\nIERC 25976\nIG5vbmV0aGVsZXNz 25977\nb3VsZQ== 25978\nIHBlcXU= 25979\nIGtub2I= 25980\nIOuPjOyVhA== 25981\nIHB1cmNoYXNlcw== 25982\nIMOHw7xua8O8 25983\nIGRpdmlkaW5n 25984\ncGVyZm9ybQ== 25985\ncmFjdGlvbg== 25986\naGVhbHRoeQ== 25987\nIFRpdGxl 25988\nIHVr 25989\nIGNlcmNh 25990\nIGFyZ3VhYmx5 25991\nIGZhbGU= 25992\n67O1 25993\nIGdhbWVycw== 25994\nIHV0aWxpemluZw== 25995\nIG9mZmVuZGVk 25996\nIHRhdmE= 25997\nYWzEsQ== 25998\nIG1lZGlhbg== 25999\nIGluZmVjdGlvdXM= 26000\nIEFubmll 26001\nIHNtYXJ0cGhvbmVz 26002\nIHBhcm9sZQ== 26003\nIEVwaWM= 26004\nenph 26005\nIHVuaWZpZWQ= 26006\nIOq3uOuVjA== 26007\nIGN1cnRhaW4= 26008\nIMSD 26009\nIHNleHVhbGx5 26010\nIHVuc2VyZW0= 26011\nIENvbnZlbnRpb24= 26012\nIGFsbGVnZWRseQ== 26013\nWWE= 26014\nIEhvbw== 26015\nZW5tZW50 26016\n7ZuE 26017\nIGdpZ2FudGlj 26018\nIG5vdGluZw== 26019\nIHJlYm8= 26020\nIEphbWE= 26021\nIEFseg== 26022\nIGJvcnJvd2Vk 26023\n7Lmo 26024\nIHBlcmlwaGVy 26025\n0L7RgtCw 26026\nIEdC 26027\nIEdlYXI= 26028\nIGVjb25vbWljYWxseQ== 26029\nIHRlbGVmb24= 26030\nIHF1ZXJlbW9z 26031\nINC00LDQu9GM0YjQtQ== 26032\nIHJhcw== 26033\nIFRlYWNo 26034\naWNpb3M= 26035\nYXRvcw== 26036\nIHBsZWRnZQ== 26037\nYmF1 26038\nIEhpbXNlbGY= 26039\nTGluaw== 26040\nIGVzcGVybw== 26041\nIGNocm9tb3M= 26042\nIFBFUg== 26043\nIGVybGU= 26044\nIHBvZGl1bQ== 26045\nw6dvcw== 26046\nIG5pZXU= 26047\nIGZlbg== 26048\nIEdPRA== 26049\nIENob2NvbGF0ZQ== 26050\nd2Vyaw== 26051\nIHThu6s= 26052\nIHN1cHByZXNz 26053\nzrvOtw== 26054\nIDI0MA== 26055\nIHNpdMOk 26056\nIGhvbmVzdHk= 26057\nIEJpbw== 26058\nIEJhcmQ= 26059\nINC+0LHRidC10Lw= 26060\nINC80YPQtw== 26061\nIG1hcmJsZQ== 26062\nINGG0LXQvdGC 26063\nIHByb2N1cmU= 26064\nIHJvdG9y 26065\nYmVybg== 26066\nIHR1aA== 26067\nIGhlYWRzZXQ= 26068\nYXRlbQ== 26069\nIHdhcnJhbnR5 26070\n4K60 26071\nIGZpbGluZw== 26072\nzrnOrA== 26073\nIGNvbXByZW5kcmU= 26074\nIGltcHVsc2U= 26075\nIHNhbHY= 26076\nd3JpdHRlbg== 26077\nIGluc3RpdHV0ZQ== 26078\nS2lt 26079\nIExHQlRR 26080\nZmljaWVudGU= 26081\nSGlz 26082\nIM6xz4XPhM+M 26083\nIHRlZW5hZ2U= 26084\nb3J1cw== 26085\nINGA0LDQt9Cx 26086\nU2Vl 26087\nIENvbnNlcnY= 26088\n4buBbg== 26089\nZnVsbmVzcw== 26090\nIHN0cmF3YmVycmllcw== 26091\nIEFidQ== 26092\n0LjQvtC9 26093\nIG9sbGE= 26094\nTk9JU0U= 26095\nIEVtcGxveQ== 26096\nIHdpcGVk 26097\ndXJnZXI= 26098\nIG1vZGlmaWNhdGlvbnM= 26099\nIO2VmOyngA== 26100\nIGZvb3RzdGVwcw== 26101\nIGhvbm9ycw== 26102\nIGFkdWw= 26103\nIGZsaXBwaW5n 26104\nIEhV 26105\nWlk= 26106\nIGludGVncmF0aW5n 26107\n2KjYsQ== 26108\ndWxsYQ== 26109\nIG5hdHV1cmxpams= 26110\nIO2XiA== 26111\nIEV0aGVyZXVt 26112\n2YrZhA== 26113\nd2Vk 26114\nIHBlYWtz 26115\nIEtlcw== 26116\nIGJsb29t 26117\nIGNyYXNoaW5n 26118\nIDkxMQ== 26119\nINC+0YLQu9C40Yc= 26120\nIGNvbnRyb2xsZXJz 26121\nIERvZA== 26122\nINCy0LzQtdGB0YLQtQ== 26123\nIHNvcnRpcg== 26124\nIFN0cmFpZ2h0 26125\nIEdyYWNpYXM= 26126\nIGdyb292ZQ== 26127\nIHRvZ2c= 26128\nIOyLtuydgA== 26129\nw6lybw== 26130\nIG91dHdhcmQ= 26131\nIFdB 26132\nIFJvY2t5 26133\nIHNjYW0= 26134\nIGhheWF0 26135\naWdudHk= 26136\n4oQ= 26137\ncGxpbmdz 26138\nIGFudGliaW90aWNz 26139\nIG5ldmVydGhlbGVzcw== 26140\namFuZw== 26141\nY29tbWVyY2U= 26142\nIHNwb2lsZXI= 26143\nIGdsb3Zl 26144\nIGNoYXR0ZXI= 26145\nIEJZ 26146\nfj8= 26147\nIO2YuA== 26148\nIGRlbW9s 26149\nd2VjaHNlbA== 26150\naW1pcg== 26151\nIHJhaWQ= 26152\n0LXRgNGF 26153\n7J6Q6riw 26154\nZW5m 26155\nIGNvbW1lbnRlZA== 26156\nIG9wdGltaXplZA== 26157\nIGNvbnZpY3RlZA== 26158\nIGJhdHM= 26159\nIFNC 26160\nIEF1cg== 26161\nIFRvbmc= 26162\nIGltcGxpY2l0 26163\nIEphbmV0 26164\nIHJlYWc= 26165\nIEFkdmFuY2Vk 26166\nIGltcG9zZQ== 26167\n16nXlA== 26168\nIHNjaGVtZXM= 26169\nb3VnaGVy 26170\nYWJvbGlj 26171\nIOqxsOyjoA== 26172\nIHNsb3dpbmc= 26173\nIHd0ZWR5 26174\nIGRlc3RydWN0aXZl 26175\nINC+0L/RgNC10LQ= 26176\nIGxhbmRtYXJr 26177\nIOuPiA== 26178\nIFdhbGtpbmc= 26179\n4bq5 26180\nIHRpamQ= 26181\nIEtO 26182\nIFF1YW50 26183\n7Jik6w== 26184\nINC60YDRgw== 26185\nIHBlcmRlcg== 26186\nIG5vdmU= 26187\nw6RuZGU= 26188\nYmlh 26189\nIGN1c3RvZHk= 26190\nIGJpb2Q= 26191\nIGRpcmVjdGluZw== 26192\nLi4u4oCL 26193\nIHJlbG9j 26194\nIGRlbWFuZGU= 26195\nIG/En2x1bQ== 26196\nINC+0LTQvdCw 26197\nIE1pbGs= 26198\nIEtyYQ== 26199\nIEhvbmRh 26200\nIHB1ZQ== 26201\nIGVsZWt0 26202\nIGJlZ2lubmVycw== 26203\nIHNwZWFy 26204\nw61uaA== 26205\nIEx1ZnQ= 26206\nIG5pZw== 26207\nIFNjaG9vbHM= 26208\nIGZvcnVtcw== 26209\nIFFpbg== 26210\ncHBv 26211\nIHphZw== 26212\nINCu 26213\nIHRvb3RocA== 26214\nIFN0eWxl 26215\n7LSI 26216\nIHB1bmN0 26217\nIHJlcHM= 26218\nIEFseQ== 26219\nIGFtZW5kbWVudHM= 26220\nIMO2eg== 26221\nIGRpZ2l0cw== 26222\ndXJhaQ== 26223\nIGNoYW90aWM= 26224\nIE1hc3RlcnM= 26225\nZW9u 26226\nIENhc2g= 26227\nIEN1eg== 26228\nIGJlZGV1dGV0 26229\nIHNjYW5uaW5n 26230\nINC20LQ= 26231\n0L3QtdGC 26232\nIGNlcnRhaW50eQ== 26233\namVr 26234\nIGRpam8= 26235\nIENsaW1hdGU= 26236\nIHJpbnNl 26237\nIGtyaWo= 26238\ndmVsYW5k 26239\nIHNvdW5kdHJhY2s= 26240\nIFNhZmU= 26241\nIE5vdmE= 26242\nOTQ= 26243\nIGF0aGU= 26244\nIFZlcmI= 26245\nb2xlcg== 26246\n7J207KOg 26247\nIHZpbg== 26248\nIHJlc3BpcmF0b3J5 26249\nIFN0dWR5 26250\nIENBTQ== 26251\nIGF2b2NhZG8= 26252\nIFpoZW4= 26253\nIGxhdGVuY3k= 26254\nIGZlYXRoZXJz 26255\nIGNvbnRhcg== 26256\nINCy0LXRiQ== 26257\nIGZhcms= 26258\nIGJsZW5kZWQ= 26259\nIGV4cGxvZGVk 26260\nIFhY 26261\nIEJlbmlt 26262\nIGFsZ3XDqW0= 26263\naXN0b2lyZQ== 26264\nIGNvbmZpZGVudGlhbA== 26265\nIG1hc3Q= 26266\nIOy/ 26267\nZ2Vo 26268\nIGRpc3Jlc3BlY3Q= 26269\nIFN5c3RlbXM= 26270\nxrBh 26271\nRWQ= 26272\nIHd5cw== 26273\nIGV4b3RpYw== 26274\nIGdsb3dpbmc= 26275\nw7luZw== 26276\nb3VuZ2U= 26277\n6IQ= 26278\n0LDQvdC40Lc= 26279\nIHBhbGF2 26280\nIFN3b3Jk 26281\nIGdpbQ== 26282\nIENyb3c= 26283\nIHBvdGVudA== 26284\nYmlzaA== 26285\nIGFidXNlZA== 26286\nIEplZA== 26287\nIGdhbWJsaW5n 26288\nIFNwZWN0 26289\nIGludmVzdGlnYXRvcnM= 26290\nIHJhdHQ= 26291\nIGRvYg== 26292\nIERFUw== 26293\naG9n 26294\nINC+0YLQutGA0Ys= 26295\n7YyF 26296\nINC00LXQvdGM0LPQuA== 26297\nIO2YuQ== 26298\nIOuouOumrA== 26299\nIHNhdHVyYXRpb24= 26300\nIGluaGVyaXRlZA== 26301\nIElubm92YXRpb24= 26302\n7JeI642Y 26303\nIHRhbmdpYmxl 26304\nIGRlcHJp 26305\naGVk 26306\nINC/0L7QvNC+0LM= 26307\nIHNsaWNlZA== 26308\n4KWN 26309\nIHRo4bq/ 26310\nxaU= 26311\nNjg= 26312\nIGNvcm9uYQ== 26313\nIGdpZnRlZA== 26314\nIHNvaXI= 26315\nIGh1bWlsaXR5 26316\nIOydtOqxuA== 26317\nIGZsYXdz 26318\nINC/0YDQsNC60YLQuA== 26319\nIGthbGQ= 26320\nd2HFvA== 26321\neXc= 26322\naXJ0ZWVu 26323\nIGNyb2NoZXRz 26324\npqzqsIA= 26325\nIOyghOyXkA== 26326\nIGRlc2U= 26327\nINC80LDQsw== 26328\nIGR6aWHFgg== 26329\nIGzDqWc= 26330\nY2hhbmdpbmc= 26331\nIGxsZXY= 26332\nxYRzaw== 26333\nIDE5ODQ= 26334\nb3Jucw== 26335\nIFdlbHNo 26336\nIHBoYXJtYWNldXRpY2Fs 26337\nIHB1bXBpbmc= 26338\nIFNoYXc= 26339\ncHVuaw== 26340\nIHZhdWx0 26341\nIGtpbmV0aWM= 26342\nIGh1cnJpY2FuZQ== 26343\nIEluY2x1ZGluZw== 26344\n4bupYw== 26345\nIEdyYW5kcGE= 26346\nYW5zaGlw 26347\nINCy0YvRhdC+0LQ= 26348\n0L3QvtC2 26349\nnKA= 26350\ndXR0YQ== 26351\nIOqygeuLiOuLpA== 26352\nIGJheg== 26353\nINC/0L7RiA== 26354\nIHBlY3VsaWFy 26355\nennEhw== 26356\nIEVsbGll 26357\nIGxlYXJucw== 26358\nIEtyaXNobmE= 26359\nIGNvbnNlY3V0 26360\nIGVtcGF0aA== 26361\nIERpbg== 26362\nIHRyYWRlZA== 26363\nIEJvcmlz 26364\ndWdnYWdl 26365\nb2xsYQ== 26366\nINC90LDQt9Cy 26367\nIGV0ZXJuaXR5 26368\nINCy0L8= 26369\nw6htZXM= 26370\nIGdyYXBw 26371\nYsOp 26372\nINC/0YDQtdC00YHRgtCw0LI= 26373\nIEZD 26374\njeuLiOuLpA== 26375\nZXZlbg== 26376\nIE5lYnJhc2th 26377\nb3J0dW5l 26378\nIGthcmVuYQ== 26379\nIEFnZW50 26380\nIHN0aW5n 26381\nIFBJ 26382\nIG11bmljaXBhbA== 26383\ncG93ZXJlZA== 26384\nIGNvbnNlZ3Vl 26385\nIE1hbmNoZXN0ZXI= 26386\nIHJhaW55 26387\nIGJsaQ== 26388\nIGtvc3Q= 26389\nIGhhbHRlbg== 26390\nIEFoaGg= 26391\naW5zdWxh 26392\nZXJ0aW5n 26393\nINin2YTZgQ== 26394\nIHJlbGFjaW9u 26395\nIGtvbWVu 26396\nIGRvbWU= 26397\nIHByaWVzdHM= 26398\nIEludHJvZHU= 26399\ncm9waGU= 26400\nc2hvcmU= 26401\ndmVsdA== 26402\nY2xpcHNl 26403\nINGA0YPRgQ== 26404\n15nXoQ== 26405\nIHNhYmVtb3M= 26406\nIEhvbGxhbmQ= 26407\nb2dp 26408\nYW5raQ== 26409\nIE1hdHM= 26410\nIHNtb2tlZA== 26411\ndWxsaWU= 26412\nIGV1cm9wZQ== 26413\nINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+ 26414\nIGJhcmR6aWVq 26415\nIHRyYW5zZm9ybWluZw== 26416\nIEV6 26417\nb3BhdGg= 26418\nIOyWuOuLiA== 26419\nINGB0YLQsNC9 26420\n4bqxbmc= 26421\n4Lix4LmJ 26422\nIE91Y2g= 26423\nIGNsZWFyYW5jZQ== 26424\ndXN0YWlu 26425\nIHNvbGlkYXJpdHk= 26426\nIHByb3Zpbmc= 26427\nINCY0L0= 26428\nINGB0Yo= 26429\nIHByb2xvbmc= 26430\n0LDQtNC90L4= 26431\nIHNvcw== 26432\nIERlYWw= 26433\nIDE3MA== 26434\nbW9ucw== 26435\nINC30LXQvA== 26436\nIGxvZ2dlZA== 26437\nIGxpZmVsb25n 26438\nIHNlbnNvcnk= 26439\nIGJlaG9sZA== 26440\nIEZBUg== 26441\nw6h0ZW1lbnQ= 26442\nIEZlZGVyYXRpb24= 26443\nIGRvZGdl 26444\nIFNoaXI= 26445\nIGRyYWdvbnM= 26446\nIEFyY3RpYw== 26447\nxIXFvA== 26448\nxY0= 26449\nwro= 26450\nIGRlbmtl 26451\nIHBvZHLDrWE= 26452\nY29sZQ== 26453\n0YPQu9GM0YLQsNGC 26454\nIHN5c3RlbWF0aWM= 26455\n0LDQvNCw 26456\nY2hvcw== 26457\nIGNsaW5pY3M= 26458\nIEJT 26459\nIHRhbGVz 26460\ndXNpb25z 26461\nIO2IrA== 26462\nIHByZXNlcnZhdGlvbg== 26463\nIGxvcmU= 26464\nIFByb3Rlc3Q= 26465\n4bub 26466\nIGFja25vd2xlZGdlZA== 26467\nIElzYWlhaA== 26468\nIOuVjOuKlA== 26469\nINeY 26470\nIGNvbXBldGl0b3I= 26471\nIGFkdmFuY2luZw== 26472\nemlw 26473\nIHRlbnRo 26474\nIExhdXJl 26475\nIGhpbnRz 26476\nIGV4ZXJjaXNpbmc= 26477\nnpzr 26478\nIEludGVsbGlnZW5jZQ== 26479\ndWF0ZWQ= 26480\nT1VU 26481\nb3BlZA== 26482\nIGF1dG9ub215 26483\nIGJyYW5kaW5n 26484\nIE1lZGl0ZXJyYW5lYW4= 26485\n0ZbQug== 26486\nIHNjcmV3ZHJpdmVy 26487\nIHN1cHJl 26488\nIHN0YXA= 26489\nIGp1cmlzZGljdGlvbg== 26490\nIFNldHRpbmdz 26491\nIGZvcmVmcm9udA== 26492\nIEZlbWFsZQ== 26493\nY29tZm9ydA== 26494\nIG11bHRpcGxpY2F0aW9u 26495\nIE11cnJheQ== 26496\nIGJvYg== 26497\nIFRhcw== 26498\nIHRhaHU= 26499\nIG9udW4= 26500\nZXR0ZXI= 26501\nIHByb3BoZXRz 26502\nbGFn 26503\nIHJldmVudWVz 26504\nIHByw6E= 26505\nIHVwbG9hZGluZw== 26506\nIG1hY2hpbmVyeQ== 26507\nYXNjYWw= 26508\nIEVzdMOh 26509\nIEdvdGg= 26510\nIEJhbGQ= 26511\nIFNhdw== 26512\nIHN0cmlwZXM= 26513\n7KCR 26514\nIHBvd2lu 26515\nIGhvc3RpbGU= 26516\nIGRhcnVt 26517\nIHByZXZlbnRlZA== 26518\n0L7QttCw0LvRg9C50YHRgtCw 26519\nIGFsZ3VuYXM= 26520\nIGhvcGVsZXNz 26521\nIHpuYWo= 26522\nIHJlYWRpbmdz 26523\nIGNyYXZpbmc= 26524\ndGF0 26525\nIFBpZw== 26526\nIGxpYXI= 26527\nIG11bHRpcGxheWVy 26528\nIGRhbGU= 26529\nIENvdXJzZQ== 26530\n7YG8 26531\nIEtpdGE= 26532\nIGN1c3RvbXM= 26533\nIHJlc3BvbmRz 26534\nZW5kcmE= 26535\nIG1ldHJv 26536\n0YHQvtC7 26537\nIG1pdGlnYXRl 26538\nIG9wcHJlc3Npb24= 26539\ncXVpbmhv 26540\nIGFtbW8= 26541\nIGVuZmVy 26542\nIHBvbnk= 26543\nIG91bmNlcw== 26544\nsJQ= 26545\nIOyImOqwgA== 26546\nIGRpY2hv 26547\nIERlYg== 26548\nIHdvbmRlcnM= 26549\nIFJvb3Nl 26550\nIHByaXplcw== 26551\nIEFMRVg= 26552\nIHRoYW5rZnVsbHk= 26553\nIHRpc3N1ZXM= 26554\nINGA0LDQstC90L4= 26555\nIEx1bmE= 26556\naW50ZWxsaWdpYmxl 26557\nIOyZuA== 26558\n6rCR 26559\nIEhlYXQ= 26560\nINGB0LjQtA== 26561\nIFF1aQ== 26562\nIGlvbnM= 26563\nIGFjY29tbW9kYXRpb24= 26564\nIEthcnQ= 26565\naWVuc3Q= 26566\nIHRhcmRl 26567\nIHNvYWtlZA== 26568\nIENhc2V5 26569\nIOy0nQ== 26570\nINGA0YPQsQ== 26571\nIGRpZmZlcmVudGk= 26572\nIGxlZnRvdmVy 26573\nIGV4Y2hhbmdlcw== 26574\nc2Vjb25k 26575\nIGZpcnN0bHk= 26576\nIGJ1aWxkZXI= 26577\ncmllbg== 26578\nIGR3 26579\nIGJvdW5jaW5n 26580\nPzwv 26581\nIOuMgO2VtOyEnA== 26582\nINGB0LU= 26583\nIE1pbGVz 26584\naWVuaWU= 26585\nINC/0L7QtNC/0LjRgQ== 26586\nIOustA== 26587\nIGFyaXNlcw== 26588\nIHN1YmNvbnNjaW91cw== 26589\nIFNhbmR5 26590\nIGxvdHRlcnk= 26591\n4oCR 26592\nYW1pbGlhcg== 26593\nIGNvb3JkaW5hdG9y 26594\n6Iw= 26595\nIGV4dHJhb3JkaW4= 26596\nIFJvbmFsZA== 26597\nIE1PTg== 26598\nZ3JlZW4= 26599\nIG1hbnVmYWN0dXJl 26600\nIFJlY29yZA== 26601\nIE1hcmtldGluZw== 26602\n0LjRhg== 26603\nIGNyZWRlbnRpYWxz 26604\nIHVwcmlnaHQ= 26605\nIEhlcml0YWdl 26606\nIGfDtnJk 26607\nZXhwZW5zaXZl 26608\n4bqtbg== 26609\nIOyxhA== 26610\nIG91dGxpbmVk 26611\nIE9vb2g= 26612\nb3JpZW50ZWQ= 26613\nIHdpcmVk 26614\nIG91dGxldHM= 26615\nIGh1Z2VseQ== 26616\nIO2WiOuKlOuNsA== 26617\n0LDRgNGC 26618\nIGxvZ2lzdGljcw== 26619\nIHNlYXNvbmFs 26620\nIGRlYmU= 26621\nIHRoZW9y 26622\nIHBpcmF0ZQ== 26623\nYXBweQ== 26624\nIGtub3Rz 26625\nIGZlbW1l 26626\nIFNvZnR3YXJl 26627\nZ2VuZGU= 26628\n0YLQsNC60Lg= 26629\nIHRlbXBsZXM= 26630\nIGxpbWl0YXRpb24= 26631\nIGFtcGxpdHVkZQ== 26632\nIGhhY2Vu 26633\nIGF1ZGk= 26634\nIOuWqA== 26635\nIFdhaGw= 26636\nIG5paA== 26637\nIGFtcGxpZmllcg== 26638\nYXJpdXM= 26639\naXphZG8= 26640\nYWNoYQ== 26641\nIGt1bGxhbg== 26642\nIFR3aW4= 26643\nIEZvcmNlcw== 26644\nIGFicmly 26645\nIEVQQQ== 26646\nIEFoYQ== 26647\nIOq3uOuemOuPhA== 26648\nIGJpb20= 26649\nINCi0LDQvA== 26650\nIHNhaWxpbmc= 26651\nIEpva2Vy 26652\nRmlyc3Q= 26653\nfl0= 26654\nb3JzY2g= 26655\nIHbDpnJl 26656\nIGJlZXRqZQ== 26657\nIFNwYcOf 26658\ncG9saXQ= 26659\nIHR1cmJ1bA== 26660\nIOyggO2drOqwgA== 26661\nIGNpYw== 26662\nIERyYWtl 26663\nIEJSSQ== 26664\naXphw6fDo28= 26665\nIOyeiOuLpA== 26666\nIEx5bm4= 26667\nIHRyYW5zZ2VuZGVy 26668\nIHJlc2lnbg== 26669\nIGNoYXJ0ZXI= 26670\nIEpI 26671\nIEhvbG1lcw== 26672\nIExpcA== 26673\nZGFz 26674\nIHBlZGlhdHJpYw== 26675\nIG1lbW9yaXpl 26676\nIGV2YWx1YXRpbmc= 26677\nIPCfkA== 26678\nY2Fr 26679\nIGNvbmp1bmN0aW9u 26680\nIHJlc2VydmVz 26681\nIHNoYW1wb28= 26682\nIGp1ZGdlZA== 26683\nIHdpZHo= 26684\nVklO 26685\nIGFib2FyZA== 26686\nYXJpcw== 26687\nIFJvaA== 26688\nIGNvb2xlZA== 26689\n0YHRgtC1 26690\nY2Vw 26691\ncm9zdA== 26692\naG90cw== 26693\nIE1lbGJvdXJuZQ== 26694\n0L7Rh9GM 26695\nIHZlbnRpbA== 26696\n0LjQvdC+0LI= 26697\nIG1vdGlvbnM= 26698\n7JeI64qU642w 26699\n0LzQtdGA0LjQug== 26700\nIENoYXQ= 26701\nIGdvdXZlcm5lbWVudA== 26702\nIEtpdm9s 26703\nIEtpdm9sb3dpdHo= 26704\nIG7Ds2k= 26705\nINC60YPQtNCw 26706\nIGh5ZHJhdWw= 26707\nIEJlcmc= 26708\neWx1bQ== 26709\nIFByw6RzaWRlbnQ= 26710\ncm9weQ== 26711\nIHNlbWlj 26712\n0Y/QtdGC 26713\nIENhcGU= 26714\nIGNhbmU= 26715\nIGJyaW5nZW4= 26716\nIHdpcmluZw== 26717\ndW55YQ== 26718\nIHJlcGF5 26719\nqqk= 26720\nIHdvbnQ= 26721\nw6FudA== 26722\nIGdvdmVy 26723\nIExpYmVydHk= 26724\nIGVsZWN0cm9tYWdu 26725\nIFNpbmdo 26726\nINCz0YDRg9C/ 26727\n0LPQvtCy 26728\niOustOs= 26729\nIFJ1bGU= 26730\nIHVuZGVyd2F5 26731\nIEZyZWRlcg== 26732\nIHR1cmJpbmU= 26733\naXNoaQ== 26734\nIGbDrXM= 26735\nIEN1bHR1cmU= 26736\nYWNyZQ== 26737\nIHdhbmRlcg== 26738\nIGd1ZXJyYQ== 26739\nIHPDtnk= 26740\nIEp1cg== 26741\nYXdheXM= 26742\nIHNjaHdpZXI= 26743\nZ3VhcmQ= 26744\nIEFiZA== 26745\ndWN0aW9u 26746\nIGFya2FkYcWfbGFy 26747\nIEhhbWI= 26748\nPy4= 26749\nc2l6ZQ== 26750\nIE9ydGg= 26751\nIHN3YXk= 26752\nIM6U 26753\nIGFic29ycHRpb24= 26754\naW5lZXM= 26755\nIHBhdHJvbnM= 26756\nIGJlYWNoZXM= 26757\nR0c= 26758\nIGNvbnRhbWlu 26759\naW50ZW5kZW50 26760\nINC90YDQsNCy 26761\nINC00LXRgNC2 26762\nIHF1aWx0 26763\nIGV2b2x1dGlvbmFyeQ== 26764\n7J206528 26765\nYXppb25p 26766\nIGVya2w= 26767\nIEJ1dGxlcg== 26768\nIGRvbw== 26769\nIG5lZ290aWF0aW9u 26770\nZW5kdW0= 26771\nIHRlcm1pbm9sb2d5 26772\nIGt1bA== 26773\nIFVudGVybmVobWVu 26774\nw6lyaWM= 26775\neGk= 26776\nYmFk 26777\nINC00L7Qu9C20L3Riw== 26778\nIE1pdGNoZWxs 26779\ndGhyZWU= 26780\nIHN1YnN0cmF0ZQ== 26781\nIEluaGFsZQ== 26782\nIEFncmlj 26783\ndW5nZQ== 26784\nINC30YA= 26785\nIGFkdmVyc2U= 26786\nIOyggOuPhA== 26787\nIHBpbGxhcg== 26788\nIE1pbnV0ZW4= 26789\nIE1hdGU= 26790\nIFBsYXR6 26791\nIGhlbHBsZXNz 26792\nIGFsYXI= 26793\nIGZyZW5jaA== 26794\nIGFsbG9jYXRpb24= 26795\nIHN0ZW1z 26796\nIG1hcmF0aG9u 26797\nIEhBUkY= 26798\naXphY2nDs24= 26799\nSmVzcw== 26800\nINC30L3QsNGH 26801\nIGRlY2xhcmF0aW9u 26802\nRUVSSU5H 26803\nc3RlcmRhbQ== 26804\nYXNzaXVt 26805\nIHNlaXo= 26806\nIHByZXNpZGVudHM= 26807\ndGFrZQ== 26808\nIHdpbGRlcm5lc3M= 26809\nIGNvc21pYw== 26810\nIOuqqOuRkA== 26811\nc3Rybw== 26812\nIHBvd2llZHo= 26813\nIE1hZ2F6aW5l 26814\nIFZJ 26815\nINC00LXRgA== 26816\nIHfDvHJkZW4= 26817\nIHRhYmxldHM= 26818\nIHBpZXJ3cw== 26819\nIG1vcnRhbA== 26820\nIHN1cHBsaWVk 26821\nIE7Ds3M= 26822\nIFByb3Blcg== 26823\nINC60LDQttC00YvQuQ== 26824\nb2zDs2c= 26825\n67Cp 26826\nIG1pc2Nvbg== 26827\nIHByb3hpbWl0eQ== 26828\nIEFsbGVz 26829\nINCz0LvQsNC3 26830\nIGxhbWU= 26831\nIHZpYmVz 26832\nIGRlZW1lZA== 26833\nIHVyaW5l 26834\nIHJlbWluZGluZw== 26835\nIGNpcmN1bXN0YW5jZQ== 26836\n65Ok7J20 26837\nIGxhcHRvcHM= 26838\nwrI= 26839\n7ZW07JW8 26840\nIE9tZWdh 26841\nTlk= 26842\nIHB1bXBz 26843\nIHJhaWxz 26844\nIHN1cnBhc3M= 26845\nIEJyb3M= 26846\nIG5hdGlvbmFsbHk= 26847\nIGdld2VzZW4= 26848\ns7Tri6Q= 26849\nb3NoaW5n 26850\n6rCI 26851\nIGNyaWFu 26852\nIOyCrOuejOydtA== 26853\nY2F1c3Q= 26854\n0YbQuNC/ 26855\nIE9iZXI= 26856\nIERBWQ== 26857\nIENhbm9u 26858\nenVuZw== 26859\nIOqwlg== 26860\nINCw0LLRgtC+0Lw= 26861\nIGRpdm9yY2Vk 26862\n15nXpA== 26863\nz4HOtQ== 26864\nY2VsYW5k 26865\nY2llcg== 26866\n0YDQtdC3 26867\nVG9kYXk= 26868\nIG9yYml0YWw= 26869\nIHN0cmV0 26870\nIHNhdHU= 26871\nIO2BrOs= 26872\nem9z 26873\nIFNjbw== 26874\nzrzOrQ== 26875\nIEd1YXJkaWFu 26876\naW50ZXJlc3Q= 26877\nIFZFUg== 26878\nw7xuZGVu 26879\nINGF0L7RgtC10Ls= 26880\ndGl0 26881\nQnk= 26882\nIGFubGF0 26883\nU2hvdw== 26884\nIG9pbHk= 26885\nIGxlZ2VuZHM= 26886\nIHNwZWN1bGF0aW9u 26887\nIFdpc2g= 26888\nIG1vbms= 26889\nR0FO 26890\nIGjhu40= 26891\nIGRhbmdlcnM= 26892\nIEJlbmU= 26893\naXF1ZW1lbnQ= 26894\nIOuCmOyZgA== 26895\nINCw0LQ= 26896\nIGRpc2NyZXRl 26897\nw4c= 26898\nIGNvbmRpdGlvbmFs 26899\nIEdpbGw= 26900\ndWF0ZXM= 26901\nINGB0L7QstGB0LXQvA== 26902\nIHNjcmVlbnNob3Q= 26903\nY2Fkbw== 26904\nIOuqqOuToA== 26905\nIGZpbmdlcnRpcHM= 26906\nIE1BQw== 26907\nIGR1ZGVz 26908\nY29zdA== 26909\nIGJ1bXBz 26910\nb25kbw== 26911\nIGRhdG9z 26912\nIGJlZXBz 26913\nIFByb24= 26914\nIEtoYWw= 26915\nemVnbw== 26916\nIEFiYnk= 26917\nVWg= 26918\nWW8= 26919\nIFRlbA== 26920\nIM68zq0= 26921\nS0k= 26922\nIHN0cmVzc2Vz 26923\nIHNwcmVhZHNoZWV0 26924\nIE5PVw== 26925\nREI= 26926\nIGxpYmVyYXRpb24= 26927\nIHByZWRpY3RhYmxl 26928\nIFF1ZXN0aW9ucw== 26929\nIHNwYWNpbmc= 26930\nIGluaGFiaXRhbnRz 26931\nIHp3acSFeg== 26932\nIFNBUA== 26933\nIGx1Z2dhZ2U= 26934\nIGhpcHA= 26935\n6JY= 26936\nIHRhbmdlbnQ= 26937\nIHbDpQ== 26938\n0LDQu9GM0L3QvtC5 26939\nc2VoZW4= 26940\nIHByb2Nlc3NvcnM= 26941\nIGZpbmRldA== 26942\nIGNhcnRyaWRnZQ== 26943\nIGFkbWluaXN0cmF0b3Jz 26944\nIOyWtOya 26945\nIHN1cHJlbWU= 26946\nIEFudGk= 26947\nIO2UhOuhnA== 26948\nIGluZm9ybWF0aXZl 26949\nIGtvbXQ= 26950\n15nXmA== 26951\nQXNzaXN0YW50 26952\nIGxpc3Rh 26953\nw7ZsbA== 26954\nIGRpc3RpbmN0aXZl 26955\nIEh1ZA== 26956\nIHNhbG9u 26957\nbcOqbWU= 26958\nIE1vdGlvbg== 26959\nIHNldWxlbWVudA== 26960\nIE1lbnNjaA== 26961\nIHB1bXBlZA== 26962\nw7xoZXI= 26963\naWJv 26964\nIHdhxbw= 26965\nIHF1YW50aXRhdGl2ZQ== 26966\n2b4= 26967\nIOuqqOyKtQ== 26968\nIHBvdWNo 26969\nIFRoZWF0cmU= 26970\nYWhp 26971\nIHNwaW5hY2g= 26972\nIHJlYWxpdGllcw== 26973\nIGxleQ== 26974\nIE1hcnRoYQ== 26975\nIHJlY2hlcg== 26976\nZWNoZXM= 26977\nIHBlcmlvZGlj 26978\nb2NpZGU= 26979\nIEluY3JlZA== 26980\nIHRo4bqleQ== 26981\nb3Rvbg== 26982\nIEVzbw== 26983\nIGfDqW7DqXJhbA== 26984\naWxpZ2h0 26985\nIGltYWdpbmluZw== 26986\naGVh 26987\nZXRpY2Fs 26988\n4but 26989\nIERlbW9rcmF0 26990\nIGVuam8= 26991\nIGFkanVzdGFibGU= 26992\nIHJhaW5z 26993\naWV3YcW8 26994\nIGp1c3RlbWVudA== 26995\nIGp1c3RpZmllZA== 26996\nIFNoYWtl 26997\ndml2 26998\n7IKs66W8 26999\nIG1ldHQ= 27000\nIEVudmlyb25tZW50YWw= 27001\nIHNvbGFtZW50ZQ== 27002\nIGludGVyc2VjdA== 27003\nIDE5ODg= 27004\nIHNpbXVsYXRl 27005\nSkE= 27006\nINC30LDRgQ== 27007\nIGNvbnRpbmc= 27008\nIFRlaw== 27009\nIHRvcmNo 27010\nINC00YDRg9Cz0L7QuQ== 27011\nIGluc2NyZQ== 27012\nIG1vZGVsbw== 27013\nIEdlZw== 27014\nIERlbW9jcmF0 27015\n0LrQsg== 27016\nIEJ1ZGR5 27017\nIHJlZHVuZA== 27018\nIGNyYWZ0cw== 27019\nIEhpag== 27020\nIGp1ZQ== 27021\nIEtpcms= 27022\nIGthYg== 27023\n4buj 27024\nIGFlc3RoZXQ= 27025\nIEpPTg== 27026\nIHN1cGVyY29t 27027\nINGB0LjRgtGD 27028\nIM+Mz4TOuQ== 27029\n2YXZhg== 27030\nIEVWRVI= 27031\n7JWY7Ja0 27032\nb2l0 27033\nIENsZXZlbGFuZA== 27034\nIHNpeHRlZW4= 27035\nIHdhdGVyZmFsbA== 27036\n77g= 27037\naW5mbA== 27038\nIGNvdW5zZWxvcg== 27039\nIFB1bms= 27040\nIHNwcmVjaGVu 27041\nZXhj 27042\nIFNraWxscw== 27043\ncm96 27044\nYWRhbWVudGU= 27045\nIHBhbmNha2Vz 27046\n6riw66Gc 27047\nIHBsYW5r 27048\nIHNvdmVyZWlnbnR5 27049\nIGZ1aQ== 27050\nINC90LXQvtCx 27051\nIFdpaQ== 27052\nIFNjaG9s 27053\n4oCO 27054\nIFNwZWFr 27055\nY2lsaWF0aW9u 27056\nIHRoaWdo 27057\nIOqxsOydmA== 27058\nIGpvdA== 27059\nIOy0rOyYgQ== 27060\nINmF24zaug== 27061\nIENDUA== 27062\nINC/0L7RgdGC 27063\nIG9ic2VydmVy 27064\nw6Fi 27065\nIHN0aWdtYQ== 27066\nIHByb3ByaWV0 27067\nIGNpZGFkZQ== 27068\nIGJhxZ9rYQ== 27069\n2LnYqQ== 27070\na3Jl 27071\nIHBvd2llZHppZcSH 27072\nIGNlYXNl 27073\nIHNraW5z 27074\nIHZlZ2dpZXM= 27075\nIG9wcG9zaW5n 27076\nb3BvbHk= 27077\nIEp1Zw== 27078\nIFlvb24= 27079\nIFVuaXQ= 27080\nIDE5ODY= 27081\nIGtvbnM= 27082\nIGRpYWdub3N0aWM= 27083\nIGVtcG93ZXJlZA== 27084\nIHRobw== 27085\nIGNlbg== 27086\nw6lyYXRpb24= 27087\nINGX 27088\nIHBoeXNpYw== 27089\nIFByYWN0aWNl 27090\nIFNvdXRoZWFzdA== 27091\nIEVzcGE= 27092\nIEdlb3I= 27093\ncm9wb3J0aW9u 27094\nIHNwZWNz 27095\nIGFkYXB0aXZl 27096\nIFVuaXR5 27097\nIFdvcmtz 27098\ndWdlbg== 27099\nIE1vbnRhbmE= 27100\nVGhhbmtz 27101\nIHdoaXBwZWQ= 27102\nIGR1bmdlb24= 27103\nIHZpdGFtaW5z 27104\nU1A= 27105\nIHNjYW5kYWw= 27106\nIGRpbmVybw== 27107\nb3Zh 27108\nIGVtYnJv 27109\nIEVhZ2xl 27110\nIHRoZW9sb2d5 27111\nIFZhbmVzc2E= 27112\nIEFJRFM= 27113\n65Cc 27114\nIGZyZWVs 27115\nIEFsemhlaW1lcg== 27116\nIMWa 27117\nSGVy 27118\nIHRvcm5hZG8= 27119\nYWdlbnM= 27120\nIOyeiOyWtOyEnA== 27121\nIFRyYW5zZm9ybQ== 27122\nIHByb2Nlc3Nv 27123\nIG1pbGxpc2U= 27124\nIHByb2Zlc3Npb25hbGx5 27125\nIG1lbWI= 27126\nb2NhdGlvbg== 27127\nIHN0eWxpbmc= 27128\nINC+0LHRj9C3 27129\nIE9wZXJhdGlvbg== 27130\nIHd5Z2w= 27131\nIFJhbg== 27132\nIEtpbg== 27133\n4buxYw== 27134\nIEJBUg== 27135\nIHBhcGVyd29yaw== 27136\nIHR1bGU= 27137\nIHF1ZXJpYQ== 27138\nIGNvbXBseQ== 27139\nIEhhaXI= 27140\n15nXmw== 27141\nINC/0YDQvtGB0YI= 27142\nIG11dGF0aW9u 27143\nIHJlcHLDqXM= 27144\nIG9jdG9wdXM= 27145\nIGltcG9ydGFudGVz 27146\nIGRlc2VydmVk 27147\nZXRy 27148\nIGRpc2FzdGVycw== 27149\nbMSxbmRh 27150\naXF1w6k= 27151\nIERlc2hhbGI= 27152\nc29v 27153\nb3NzaXA= 27154\nIHJlbGlldmVk 27155\nIENvbGxpbnM= 27156\nIHdhdGVycHJvb2Y= 27157\nIFl1aw== 27158\nIGNvcHlpbmc= 27159\nIGLDvHTDvG4= 27160\nIEhldXRl 27161\nIEVudHJl 27162\nIHJlc2lkdWFs 27163\nIGNvbG9uaWVz 27164\nIMOpbm9ybQ== 27165\nIEVyaW4= 27166\nIHN0YW4= 27167\nIHRyZW1lbmRvdXNseQ== 27168\nIGNhcHR1cmVz 27169\nIFNhaQ== 27170\nw6JjZQ== 27171\nIG1pYcWC 27172\nIDg3 27173\nIGxvZ2dpbmc= 27174\nIGluc2VydGVk 27175\nIGluaGVyZW50bHk= 27176\n7J2R 27177\nbGF2ZQ== 27178\n0L3QuNGH 27179\nIGZlbW1lcw== 27180\nIGTDqXA= 27181\ndWtz 27182\nYWNpYQ== 27183\nIFdhZGU= 27184\nIGppag== 27185\nIFZpbmNlbnQ= 27186\nIEljZWxhbmQ= 27187\naGVt 27188\nIGFwb2xvZ3k= 27189\nIFBlZw== 27190\nIGdsdWVk 27191\nIGNvbXBhbmlvbnM= 27192\nIExpdmVy 27193\nIGNyaXRpY2l6ZWQ= 27194\nbGVhZGluZw== 27195\nIHPDpGdh 27196\nIHNxdWlk 27197\nIG5hcnJhdGl2ZXM= 27198\nIHRha2E= 27199\nbmV6 27200\nd2VpdA== 27201\nIHRyaXBvZA== 27202\nIGV4cGxpYw== 27203\nIHNwaW5hbA== 27204\nIGFwcHJveGltYXRpb24= 27205\nIHBhZ2Fy 27206\nIENhbHZpbg== 27207\nINCy0LXQtNGM 27208\nIGxhYw== 27209\nIHByb2FjdGl2ZQ== 27210\nIFRyYWlu 27211\nb3Jm 27212\nIHN0ZW4= 27213\nIGdyYXBlcw== 27214\nIG1ldXM= 27215\nIGF1dG9tYXQ= 27216\nIGJpYXNlZA== 27217\nIGNoYcOubmU= 27218\nY29hbA== 27219\nIHJlbmNvbnQ= 27220\nIEt1bQ== 27221\nIGZlc3RpdmFscw== 27222\nIHN0YXJ0dXBz 27223\nIGFrYQ== 27224\nIGN5bGluZA== 27225\nc25h 27226\nQ1JJ 27227\nIHJlc3VsdGFkbw== 27228\nIG1pbGVzdG9uZQ== 27229\nIM+F 27230\nIHRlbGVwb3J0 27231\nenljaA== 27232\nNjI= 27233\nIEZlYXI= 27234\nIG51Y2xldXM= 27235\nIHNoaW5lcw== 27236\naG92 27237\nIFBhcnRuZXJz 27238\nIEthcw== 27239\nIG5hZGll 27240\nIGFsZXJ0cw== 27241\nIEJJTEw= 27242\nc3Ryb25n 27243\nIE5hdGU= 27244\nIERlbm1hcms= 27245\nIENhdg== 27246\nT1NU 27247\naMOkbHQ= 27248\nIOyVhOuLjA== 27249\nYW55b24= 27250\nIGVuY291cmFnZXM= 27251\nINC/0L7RgdGC0LDQsg== 27252\nIEh1YW5n 27253\nU1RB 27254\nIHBhaW50cw== 27255\nIHNjaGVkdWxlcw== 27256\nIGNoZWF0ZWQ= 27257\nIGFwcHJveA== 27258\nIO+3 27259\nIMK7Lg== 27260\nIHNtaWxlcw== 27261\naXN1cmU= 27262\nIG5lcmVk 27263\nYXJkZW4= 27264\nIGN1cnQ= 27265\nIOuM 27266\nIFJvdGg= 27267\nIHB1aXNxdWU= 27268\nIEdFVA== 27269\nIFZlZ2V0 27270\nIHByb2R1eg== 27271\nIEJlbGdpdW0= 27272\nIENhbXB1cw== 27273\n16jXmded 27274\naWN1dA== 27275\nINGB0L3QuNC8 27276\nIHLDqXVzcw== 27277\nIHNsaXBwZXJ5 27278\nIEV3 27279\nxbM= 27280\nIExlZ2VuZHM= 27281\nIFRpZmZhbnk= 27282\n0LDQu9C40Lc= 27283\nINC/0LXRgNC10LI= 27284\nINC+0LPRgNC+0Lw= 27285\nIGNyb3M= 27286\nIENF 27287\nQnU= 27288\nIGVuc3VyZXM= 27289\nIGdyYW5kY2hpbGRyZW4= 27290\nIGFjdWVyZG8= 27291\nIHByaXNvbmVy 27292\nIHRoaXJzdHk= 27293\nYmFuZQ== 27294\nIOu5oA== 27295\nIMO6bHRpbWE= 27296\nIExhdW5jaA== 27297\nbml0eQ== 27298\nIGNvbWJ1c3Rpb24= 27299\nIHVuaWNvcm4= 27300\nIGZhbWlsbGU= 27301\nIGxvd2VyaW5n 27302\nIFlpbmc= 27303\nYnVpbGRpbmc= 27304\nIGR1bw== 27305\nIE3DqXhpY28= 27306\nYXN0aWFu 27307\nIOuoueydhA== 27308\nIFJhbHBo 27309\nIHJld3JpdGU= 27310\nIGdsYW0= 27311\naWZpcXVl 27312\nRXI= 27313\nIFJ1bm5pbmc= 27314\n0L7QvdC+0LI= 27315\nIG1lYW5pbmdz 27316\nIGNoZXd5 27317\nIExlc2xpZQ== 27318\nIGZpbmVzdA== 27319\nIGhhaGFoYQ== 27320\nIFNURVA= 27321\nIGxvbmVsaW5lc3M= 27322\ncmlhbnM= 27323\nIHF1ZXN0aW9uZWQ= 27324\nIGVzcXVl 27325\nIHNpbmtpbmc= 27326\nIHBlc28= 27327\nIFdyb25n 27328\nYXNtaW5l 27329\nIGRlZmluaXRpdmU= 27330\nIGJ1eXM= 27331\nIGNydWM= 27332\nY29vbA== 27333\nIOugiA== 27334\nIHDDsw== 27335\nIHV0aWxpemVk 27336\nIHdvcnRod2hpbGU= 27337\nIER5bGFu 27338\nRVNF 27339\nIHZlcnRleA== 27340\ndMSx 27341\nIEZpcg== 27342\nIHphdw== 27343\nIEdlZA== 27344\nINCd0LDQvw== 27345\nZHo= 27346\nIGN1cnNvcg== 27347\nIHN3aXBl 27348\nIGluZXZpdGFibHk= 27349\nIHBvc3RlcnM= 27350\nIGluY2xpbmVk 27351\nIGdyZWV0aW5n 27352\nIGRpc2FwcG9pbnRtZW50 27353\nIHJlbGHDp8Ojbw== 27354\nVFQ= 27355\nIHJhYmI= 27356\nIE1haW5l 27357\nIGFuYWx5emVk 27358\nRkU= 27359\nINCf0L7Quw== 27360\nIFNhbmRyYQ== 27361\nIHBsYWd1ZQ== 27362\nQVJF 27363\nIHbDpHI= 27364\nIFZpdg== 27365\ndW1lZA== 27366\naGFuZG8= 27367\naG91ZXR0ZQ== 27368\nIEJhaWxleQ== 27369\neXNvbg== 27370\nIHNlbXVh 27371\nIGhhcmRjb3Jl 27372\n4oKs 27373\n0ZbQvA== 27374\nw6lyYQ== 27375\nT1RI 27376\nIGZvcmVpZ25lcnM= 27377\nIFBhbGVzdGluaWFu 27378\nIHByb3ByaW8= 27379\n0LDQvdC40Lk= 27380\nIG15dGhz 27381\nV0g= 27382\nIG5pbnRo 27383\nIENyZWF0b3I= 27384\n0LvQvtC8 27385\nIEZsaXA= 27386\nIGVtYW4= 27387\nIGtpxZ8= 27388\nemllaA== 27389\nIEVhcm5lc3Q= 27390\nc3lzdGVt 27391\nluyXkA== 27392\nIGFybWllcw== 27393\nIE91dHNpZGU= 27394\nIGhhcnVz 27395\n0L7QtNCw0YA= 27396\nIHZpc2l0b3I= 27397\nIHN0cmVuZ3RoZW5pbmc= 27398\nIDky 27399\ndmlv 27400\nIOumrA== 27401\nIGdyZWVkeQ== 27402\nIHBvcXVpdG8= 27403\ndWRlcg== 27404\nIEtvcGY= 27405\nIOuLpOydjOyXkA== 27406\nIHNlaXM= 27407\nw6F0aWNv 27408\nIHRydXN0aW5n 27409\nw61w 27410\nIEVtbQ== 27411\nbGVlbg== 27412\nINin2YTZhg== 27413\nIHJlY3J1aXRtZW50 27414\nIEZpbGlw 27415\nINmD2YQ= 27416\nQ2xpbnQ= 27417\nINCy0LXRgQ== 27418\nYXVmdA== 27419\nIGRvbWluYXRl 27420\nIHJlc3Rv 27421\nIGtyYQ== 27422\nw6Fp 27423\nIENhaXQ= 27424\ncm93cw== 27425\nIGNvdW50cnlzaWRl 27426\nIDE5NDU= 27427\n0LDRhtC40Y4= 27428\nINC00Lg= 27429\nIGtlcm5lbA== 27430\nbG92 27431\nIGNhbGN1bGF0aW5n 27432\n2K/Ypw== 27433\nIFdhbHQ= 27434\nIGVtcG93ZXJpbmc= 27435\nIGNoYXNzaXM= 27436\nbGluZWFy 27437\n0LPRgw== 27438\nIG5vdmE= 27439\nIHV5 27440\nIDY5 27441\nIGVuY29tcGFzcw== 27442\ndHJs 27443\nIGNvbXB1dGF0aW9uYWw= 27444\nIHdvcm1z 27445\nIG5oaeG7gXU= 27446\nIGFzdHJvbmF1dHM= 27447\nIHZlcw== 27448\nIHN5dHU= 27449\nIGRlbWFuZGVk 27450\nIGNz 27451\nIE1vbA== 27452\nIGA= 27453\nIGNoYW50 27454\nIHRoZXJlYnk= 27455\nIHBlbmlz 27456\nIGVtb2M= 27457\nd3lu 27458\n0YPQttC1 27459\nIHRyZWFk 27460\nw7NsZQ== 27461\nIGRlZXBlc3Q= 27462\nIG1hY2hl 27463\nIFZlbnQ= 27464\nIEFtc3RlcmRhbQ== 27465\nIHJlYmVs 27466\nIDYx 27467\nINCy0LrRg9GB 27468\ndWZmcw== 27469\nIGRvxJ9ydQ== 27470\nIE5hcG9sZQ== 27471\nzq7Pgw== 27472\nIHdvcmtvdXRz 27473\nIEdsYWQ= 27474\n0L3QtdGB 27475\nIHRlbnNpb25z 27476\nIFNoaWZ0 27477\nIEd1ZXI= 27478\n7YyQ 27479\nIOy5nOq1rA== 27480\n0JY= 27481\nIGltcGxhbnQ= 27482\nw6p1 27483\n6riA 27484\nIGF1dGhvcml6ZWQ= 27485\nQ0VS 27486\nIFJW 27487\nIGhpbA== 27488\nbGV2 27489\nY2ltZW50bw== 27490\nIFVGTw== 27491\n7IOI 27492\nd29y 27493\nIGRhbmNlcw== 27494\nIFBpeGVs 27495\nIHRyb3R6ZGVt 27496\nIG9idGVu 27497\nIEFsZnJlZA== 27498\nIGNvc3RseQ== 27499\nIFN0YW5sZXk= 27500\nIHRlcnJvcmlzdHM= 27501\nIFdpZA== 27502\nheuLiOuLpA== 27503\nIGxlaWNodA== 27504\n7J207Iqk 27505\nIGRvYnJ6ZQ== 27506\nIGhlc2l0 27507\nIGVyesOkaA== 27508\nIGVpbmlnZQ== 27509\nIGhlYnQ= 27510\n0YHQtQ== 27511\nIHVucHJlZGljdA== 27512\nQ8OzbW8= 27513\ncmVtb3M= 27514\nIFRoYW5rZnVsbHk= 27515\nIHB1cnNl 27516\nY2hz 27517\nYW5jZXI= 27518\ndWxvcw== 27519\nc3R1ZA== 27520\nIG5ldXJvbG9n 27521\nIEFuY2llbnQ= 27522\nT3V0 27523\nYXdzemU= 27524\nIG9wcG9zZQ== 27525\nIGFudGlib2RpZXM= 27526\nIFNvbWVob3c= 27527\ncm9wb2xpdGFu 27528\na3Rvcg== 27529\nINGB0YLQvtGA0L7QvdGL 27530\nIHJvY2tldHM= 27531\nIGRpc2FibGU= 27532\nIGNhdGFzdHJvcGg= 27533\ntOye 27534\nIGN5bg== 27535\nINC00YDRg9C30YzRjw== 27536\nIGluc3RydWN0b3Jz 27537\nZW1hYWw= 27538\nIGV0d2E= 27539\nIHl1YW4= 27540\nIEdyb3VuZA== 27541\nIHByZW1pZXJl 27542\n0YfQuNCy 27543\nIHNhaW50 27544\neWJh 27545\nIGtvaw== 27546\nIGNvbnRyYWN0b3Jz 27547\nIOqwgQ== 27548\nINeQ15w= 27549\nIGhlYWRsaW5l 27550\nIGNvbXBsZXRhbWVudGU= 27551\nIGluZXhwZW5zaXZl 27552\nIHZpdQ== 27553\nIEdyYW5kZQ== 27554\nIGJsZWVk 27555\n66y8 27556\nIDcz 27557\nIHRvZGF2w61h 27558\nIFJ1c2g= 27559\nIEVsZGVy 27560\n6rCA64qU 27561\nIFJvdQ== 27562\nINC20LXQvdGJ 27563\nIE1pcmE= 27564\nIGRlaW5l 27565\nIGthcm1h 27566\nIHVtbQ== 27567\nIGVudHNjaGU= 27568\nIEhvbG9jYXVzdA== 27569\nIGRpc2NvdmVyaWVz 27570\nYW1lbnRz 27571\nIHJhaXNvbg== 27572\nIGJ1cmdlcnM= 27573\nQmFjaw== 27574\nIGdkeQ== 27575\nIEFH 27576\nIERhdw== 27577\n7JWg 27578\naGVhZGVk 27579\nIENsYXI= 27580\nSW5zdA== 27581\nIExpZXV0ZW5hbnQ= 27582\nIEFmRA== 27583\nIENlcw== 27584\nIHBlcnNvbmFsaXplZA== 27585\nIGludGVyZmFjZXM= 27586\n4LiI4Liw 27587\nINGA0LXQtg== 27588\nIHN1aWM= 27589\nIHN0YXJ2aW5n 27590\nIG94aWRl 27591\nIGRlY29yYXRlZA== 27592\nIERV 27593\nIOyYiOyBmA== 27594\nIHF1bw== 27595\nIGRpc3RvcnRpb24= 27596\nIOuoueyWtOs= 27597\nIHN0YWtlcw== 27598\nIHN5bnRheA== 27599\nIGJp4bq/dA== 27600\ndGh5 27601\naWNpZQ== 27602\nIGJyYXNpbGU= 27603\naXNpcw== 27604\nUkM= 27605\nIHNob29r 27606\nIGRlcHRocw== 27607\nIENvc3Rh 27608\nIHZvY2Fscw== 27609\nIGNvYXN0ZXI= 27610\nIGZhbG91 27611\nZXR0bGU= 27612\nIGtlbm5lbg== 27613\nIGRlcml2ZQ== 27614\nIGFpZHM= 27615\nINCd0LjQug== 27616\nIGVudHdpYw== 27617\nIHZlcnRpY2FsbHk= 27618\nIM0= 27619\nIFNVVg== 27620\nIGZpcmV3b3Jrcw== 27621\nIHNwZWNpZmljcw== 27622\nIGluc2lzdGVk 27623\nIGRlc2hhbGI= 27624\nIEdvbno= 27625\nbG92ZQ== 27626\nIE1pbGl0YXJ5 27627\nIFBpZXJyZQ== 27628\nIOKI 27629\nIFdob3Nl 27630\nIHBlcmZ1bWU= 27631\nIM+AzrU= 27632\nIGxvd2VyZWQ= 27633\nIGNyb3NzZXM= 27634\nIHRyYW5zbGF0ZXM= 27635\nIGFycmliYQ== 27636\nw61kbw== 27637\nIExldg== 27638\nIENpYW8= 27639\nIHNjaG9sYXJzaGlwcw== 27640\nIGdlc3R1cmVz 27641\nINGA0LXQt9GD0LvRjNGC0LDRgg== 27642\nIHF1ZXN0w6Nv 27643\nIENvbG9uZWw= 27644\nIEJvdHQ= 27645\n2LHZgQ== 27646\nTklORw== 27647\nIFdhdGNoaW5n 27648\nIFB1cnBsZQ== 27649\n0YHRgtGA0LDQvQ== 27650\nIGV4ZWN1dGl2ZXM= 27651\nIEtyaXM= 27652\nb3JuZXlz 27653\n0LXQvdC90YvQuQ== 27654\nIGNvYXRlZA== 27655\nxKk= 27656\nIHBhcmtlZA== 27657\nINGB0LLQtdGC 27658\nISEhISE= 27659\nIEZsb3lk 27660\nxLFzxLE= 27661\nemnEhw== 27662\nIG1vdGl2YXRl 27663\nIEVsb24= 27664\nbGVhbg== 27665\nhpM= 27666\nIGlw 27667\nIG5pxbw= 27668\nIEV4cGVyaWVuY2U= 27669\nIFRpbmE= 27670\nIEtvbGxlZ2U= 27671\nIEFtYmFzc2Fkb3I= 27672\naW55YQ== 27673\nIHRoZWZ0 27674\nIGhldXJlcw== 27675\nIE15c3Q= 27676\nIG1haXNvbg== 27677\nbGVi 27678\nIGJvd2xz 27679\nIELDvHJnZXI= 27680\nIFJvb3NldmVsdA== 27681\nUlA= 27682\n6rCA7JqU 27683\nIERlbGljaW91cw== 27684\nZXJkaW5ncw== 27685\nIEFzc29jaWF0ZQ== 27686\nb3Vzc2U= 27687\nIENvcnQ= 27688\nIFJlcGVhdA== 27689\nIEdsb3J5 27690\nIGNvbnRhZw== 27691\n4LmA4Lil 27692\nIFBhcmFk 27693\nIEtlcnJ5 27694\nIOq/ 27695\nIFdhdmU= 27696\nIGdhdGV3YXk= 27697\nIeOAjQ== 27698\nIHRyYW5zY2VuZA== 27699\nIGRhbWFnZXM= 27700\nIHRhaWxz 27701\nIGdyYXZpdGF0aW9uYWw= 27702\nIFNoaWVsZA== 27703\nIHByaW1pdGl2ZQ== 27704\nIGNhcnJpZXJz 27705\nIEh1YXdlaQ== 27706\n2YLYrw== 27707\nIGZlbGl6 27708\nIE1pYQ== 27709\nINC/0YDRj9C80L4= 27710\nINC/0YDQvtC40YHRhdC+0LTQuNGC 27711\nIE11cnBoeQ== 27712\nIEFjdGl2 27713\nIGRpc2NvbWZvcnQ= 27714\n15HXlA== 27715\nIEtlbGw= 27716\nIENlbnR1cnk= 27717\nIHNwYWdoZXR0aQ== 27718\nIER1cmNo 27719\nIGNpZXJ0bw== 27720\nIEVtcHJlc3M= 27721\nIGd1dHM= 27722\nbmVn 27723\nINC00L7RgdGC0LDRgtC+0YfQvdC+ 27724\nIHZvbHVudGFyeQ== 27725\nIHNxdWlycmVs 27726\nIE1heg== 27727\ntOyLrA== 27728\nINCy0Lg= 27729\nINGC0LDQutC40YU= 27730\nIFNoYXJvbg== 27731\nIGVudGh1c2lhc3RpYw== 27732\naXJlbWVudA== 27733\nIO2emOuTpA== 27734\nIHBvdHJ6ZQ== 27735\nIGluaXRpYXRlZA== 27736\nIMWbcm9k 27737\nIOydtOumhA== 27738\nIHJlbWFrZQ== 27739\nIGN1bG1pbg== 27740\nIGNvbmZ1c2U= 27741\nbWl5b3I= 27742\ndXJhcg== 27743\nQ1RPUg== 27744\nIGJ1bm55 27745\nZWxw 27746\nIHZhbXBpcmU= 27747\nIGlsbHVtaW4= 27748\nIEhlbmQ= 27749\nINC60LDRh9C1 27750\nIFNhbHY= 27751\nINC60LDQvdCw0Ls= 27752\nIHBvcnRh 27753\nIGFzc2hvbGU= 27754\nIHN1cHBvcnRlcg== 27755\nIHNrZXB0aWNhbA== 27756\nIGtuZWFk 27757\nIOyYrA== 27758\nZXph 27759\nIHF1w6o= 27760\nIERI 27761\nIHJvZHo= 27762\nb3duZXJz 27763\nIHBsb3Rz 27764\nIGRlbGF5cw== 27765\nIGJlbG9uZ2Vk 27766\nIGFoaA== 27767\nIGNhcnZlZA== 27768\nIHJpc2Vu 27769\nIG9yZGVu 27770\ncGhvbnk= 27771\naXNzeQ== 27772\nISEhISEhISE= 27773\nIG9sZHXEn3VudQ== 27774\nIHJvc2Vz 27775\nIGludHJpbnM= 27776\nIEFuZ3N0 27777\nIGZpbmFsZW1lbnQ= 27778\n7Ked 27779\nU09VTkQ= 27780\nIGluZHVs 27781\nsIw= 27782\nINeV15Q= 27783\nY2h5 27784\n0LDQutGB0LjQvA== 27785\nIG5nZ2Fr 27786\nIGxpeg== 27787\nIGVsZWN0b3JhbA== 27788\nIFNoYXdu 27789\ncmljaWE= 27790\nIGFyc2Vu 27791\nIFBlcA== 27792\nIDIwMzA= 27793\nIHRyb3BoeQ== 27794\nIHNtb290aGVy 27795\nIGVycmU= 27796\nIGNyYXNoZXM= 27797\nIHNjaG5l 27798\nIGFzaQ== 27799\nIE1hw58= 27800\n0YPQu9C4 27801\n0YfQtdGB0LrQuA== 27802\naWV2ZXM= 27803\nUkVBTQ== 27804\nIHN0aXJyaW5n 27805\ndXN0YQ== 27806\nIGludmVy 27807\nc2lnaHQ= 27808\nb3JkdQ== 27809\nb29y 27810\nIMSDbg== 27811\nIHBlcm1pdHRlZA== 27812\n0YDRjA== 27813\nIGNoYWxr 27814\nIHRhdHRvb3M= 27815\nIFJlbGF0aW9ucw== 27816\nIEhveQ== 27817\na3NhbQ== 27818\nIGRlbnRpc3Q= 27819\nIOuvuOq1rQ== 27820\nIHNvZmE= 27821\nINGU 27822\nIGZvcm1l 27823\n2YLYqQ== 27824\nIOuyoA== 27825\nIGVtYnJhY2Vk 27826\nbWls 27827\nIHN1bmdsYXNzZXM= 27828\nIOqwlA== 27829\nIHNlYW1sZXNz 27830\nIGJlZXA= 27831\nw6RjaHN0 27832\nIHN3ZWV0cw== 27833\nIHNlbWFpbmU= 27834\nIGlycmVsZXZhbnQ= 27835\nIGRlc2Vudm9s 27836\nz4HPiQ== 27837\nINC/0YDQvtC40LfQstC+0LQ= 27838\nYW5ncw== 27839\nIGFyb21h 27840\nIHBvb2xz 27841\nIGdp4bud 27842\nIFVn 27843\nIGNsaW1iZWQ= 27844\nIHRyZW5kaW5n 27845\nIHNlcGVydGk= 27846\nIEJhcnI= 27847\nIHDFgg== 27848\nIE9yaWdpbmFsbHk= 27849\nINqv 27850\ndXR0bw== 27851\nirjr 27852\nINC60L7RgtC+0YDRi9GF 27853\nINC30LDRhQ== 27854\nIGVpZ2VuZW4= 27855\nIG11cmRlcmVy 27856\nZXJuYW1l 27857\nxZ4= 27858\nIGFubm91bmNpbmc= 27859\nIFBsYXRmb3Jt 27860\nIGV4cGxhbmF0aW9ucw== 27861\nIHByZXNlbnRl 27862\nIE5hc8SxbA== 27863\nIG9ycGhhbg== 27864\nIEZvcnRuaXRl 27865\ncm9zcGVjdA== 27866\nZXJlZGl0aA== 27867\nIOyXhuyWtA== 27868\nIE5JSA== 27869\nd2FnZW4= 27870\nIHJlbWVk 27871\np4Dr 27872\nbW9udA== 27873\nIEplZmZyZXk= 27874\ncHJvbQ== 27875\nIGbDvG5m 27876\nINC90LDQt9Cw0LQ= 27877\nIGN1Y3VtYmVy 27878\nIFN1bW1pdA== 27879\np6Q= 27880\n0J3QkNCv 27881\nIEpldA== 27882\nIGNhbWJpbw== 27883\n0YPQudGC0LU= 27884\nIGN1Ymlj 27885\nIGRpc3Byb3BvcnRpb24= 27886\nZXJleg== 27887\nIG1hZG5lc3M= 27888\nIHRpbnQ= 27889\nIGZ1ZXJvbg== 27890\nIGt5 27891\nIGJpcGFydA== 27892\nU2Ft 27893\nIOu9 27894\nIHJpdg== 27895\nIFRhbms= 27896\nIOuGkw== 27897\nIHJlbmRlcmVk 27898\nxZtsxJk= 27899\nY29uZHM= 27900\nIGRpc3J1cHRpb24= 27901\nIGluY29udmVu 27902\nIHF1aXNlcg== 27903\nIGRlbmlhbA== 27904\nIGdhbGF4aWVz 27905\nIHNvdmVyZWlnbg== 27906\nIHBvbHNr 27907\nz4HPjg== 27908\nIG1leA== 27909\nIGNhcmFjdGVy 27910\nIExlZ28= 27911\nYW5kZW4= 27912\nLici 27913\nIO2UjOs= 27914\nIGNvbXByZXNzb3I= 27915\nIE1vdmll 27916\nIGFwcGxpY2FudHM= 27917\nemllaGVu 27918\nIHZlZ2V0YXRpb24= 27919\nIGJlbGxl 27920\nIEdPT0Q= 27921\nIEJhdQ== 27922\nIHJlc2VudA== 27923\nc2V4 27924\nYW1lbnRvcw== 27925\nINeU15bXlA== 27926\nIG92ZXJsb2Fk 27927\nIHNpbGljb25l 27928\n0LXRgdGC0L3Qvg== 27929\nIGRlbmtlbg== 27930\nIGRlZmluaXQ= 27931\nIFdhc24= 27932\nIGFsdGVyZWQ= 27933\nIFNvbw== 27934\nIFdpbmc= 27935\naW5kcmU= 27936\nIE5QQw== 27937\nz4HOrQ== 27938\nIFR3ZW50eQ== 27939\nIExpZWJl 27940\nIGhvbWVsZXNzbmVzcw== 27941\nb3VsZGVy 27942\nINCY0YLQsNC6 27943\n0YHQutCw0Y8= 27944\nIGN1YXRybw== 27945\nIEhhcnZleQ== 27946\nIHBoaWxhbg== 27947\nIEJlZXQ= 27948\nIHBvbGljaW5n 27949\nIEFsZXhhbmQ= 27950\nINC80L7Qu9C+0LQ= 27951\nIG3DvHM= 27952\nIGhpem8= 27953\n67O064uk 27954\nINC/0L7Qt9Cy0L7Quw== 27955\nINC/0YvRgg== 27956\n0L7Rh9C10LzRgw== 27957\nIO2DnA== 27958\nIGNyeXB0b2N1cnJlbmN5 27959\nIGxvcm8= 27960\nIHN1bW1hdGlvbg== 27961\nIGJha2FsxLFt 27962\nIG5ldXJvcw== 27963\n2KU= 27964\nINC80L7QttC10Lw= 27965\nIMO8c3Q= 27966\nIHByZWxpbWluYXJ5 27967\nIGhvcm5z 27968\nIFRJ 27969\n2YPZhA== 27970\nWU8= 27971\nIGhpbmdl 27972\nIHJlcGFpcnM= 27973\nIGJvbmRpbmc= 27974\nIGJpemU= 27975\nINGI0YI= 27976\nIG1vdGl2ZQ== 27977\nIE5pZ2VyaWE= 27978\nMTIw 27979\nYmxvY2s= 27980\nIGF2aWF0aW9u 27981\nIEtvbW11bg== 27982\nINC+0LrQsNC3 27983\nIHRlbmhh 27984\nIGVkdWNhdGluZw== 27985\nIHN0YWF0 27986\nINGB0LrQvtC70YzQutC+ 27987\nIGZyaWdodGVuZWQ= 27988\nIHNlZWtz 27989\n0YDRg9GI 27990\ncXVlbnQ= 27991\nIE5vdQ== 27992\nIHByYXQ= 27993\nIFNob3Q= 27994\nV29yaw== 27995\na2FyYW5n 27996\nIExpZ2h0bmluZw== 27997\nbm9sZHM= 27998\ncm9sbGVk 27999\nZ2xhc3M= 28000\nIGNyZWRpYmlsaXR5 28001\nSVRZ 28002\nIGF0bW9zcGhlcmlj 28003\nIGhhdmlh 28004\nw6RuZGVybg== 28005\nY2hlZXJz 28006\nVGhlc2U= 28007\nIENlbGw= 28008\nIG1hZ25lcw== 28009\nIEJyYXZv 28010\nc2Vhc29u 28011\nIMWfZXlsZXI= 28012\n8J+O 28013\nd2hpdGU= 28014\nIE1C 28015\nIHN0YWNrZWQ= 28016\nIDc0 28017\nINC00LDQstCw0Lk= 28018\nIHBhdmU= 28019\nINC+0YU= 28020\nIGRhdGFzZXQ= 28021\nIHJldG91cg== 28022\nIG1hdHVyaXR5 28023\nIHF1YXNl 28024\nIDkz 28025\nIFN5bQ== 28026\nIGJyaWVmaW5n 28027\nIGN1bHR1cmFsbHk= 28028\nIOy3qA== 28029\naW5oYXM= 28030\nIG1hZGFt 28031\nIGFqdWRhcg== 28032\nIFRpYmV0 28033\nIGxlYWtz 28034\nY2lsZQ== 28035\nIHRoZWF0ZXJz 28036\n7Jio 28037\nNzI= 28038\nIFdhc2g= 28039\nIFF1YWxpdHk= 28040\nIEl2YW4= 28041\nIEJlbnQ= 28042\naWdhdG9y 28043\nIEdlc2NoaWNodGU= 28044\nIHJlYWN0aXZl 28045\nIDE5MDA= 28046\nIGNvbnRyYWRpY3Q= 28047\nIHppZW1saWNo 28048\nIGNvaG9ydA== 28049\n4bun 28050\nIHBlc3RpYw== 28051\nIG9yYXo= 28052\nIHRlbGxlbWVudA== 28053\n6b4= 28054\nIE5vd2FkYXlz 28055\nY3Jldw== 28056\nU3RldmU= 28057\nIGZpY3Rpb25hbA== 28058\nIGlsaw== 28059\nIGdhc29saW5l 28060\nemFt 28061\nIHBhbmNha2U= 28062\nw6huY2lh 28063\nIG11aXRvcw== 28064\nIGJ1cnk= 28065\nIGtvcA== 28066\nIElR 28067\nIHJlc2VydmF0aW9u 28068\nIFVwZGF0ZQ== 28069\nIGplag== 28070\nIEV5ZXM= 28071\nIHZpdmU= 28072\nIGNoY2U= 28073\nIEluaQ== 28074\ncmVzcG9ucw== 28075\nIHJlZmxlY3RpdmU= 28076\nIFdhbg== 28077\n0ZbQtw== 28078\nIGVuY2E= 28079\nIGVtYm9k 28080\nIEJ1cmdlcg== 28081\nIGFjYWRlbWlh 28082\nIENpcmM= 28083\nINC/0YDQtdC6 28084\nIGFubGFt 28085\nIHBoaWxhbnRocm9w 28086\nIEJhxZ8= 28087\nIEF1ZGk= 28088\nIHZvc3Q= 28089\nIHJlcGVy 28090\nUGV0ZXI= 28091\nIGNvbnNvbGVz 28092\nIHNjcnV0 28093\nIFR1cm5lcg== 28094\nINCx0YvQsg== 28095\nSUlJ 28096\nIEZsaWdodA== 28097\n4LiW 28098\nIFJhdmVu 28099\nIGNvcnJvcw== 28100\nZmVybg== 28101\nIHByb3Zh 28102\nIFNldg== 28103\nIHJlY2lwcm8= 28104\nIDE5ODU= 28105\nIG51ZXZh 28106\nIGRhYg== 28107\n44CB44CM 28108\nIG1leg== 28109\nIFN0YXJr 28110\ncHBpbmdz 28111\n0L7RgdGC0Lg= 28112\n7Kad 28113\nIGZyYW1pbmc= 28114\nINCg0LDQtw== 28115\nIHBvc3Rw 28116\nIFNoYW5ub24= 28117\nINC60YPRgA== 28118\nIGpha2J5 28119\naWVubmVudA== 28120\nIE1hcHM= 28121\nIFJldmVsYXRpb24= 28122\nINGB0YLQsNC7 28123\n7Jq0642w 28124\nIGRldmFudA== 28125\nIEdpdmluZw== 28126\nIFdBUw== 28127\nINC60L7Qs9C+ 28128\nIHJlbWE= 28129\nIFJD 28130\nbsOt 28131\nIHNsaXBwZWQ= 28132\nIFJhbXM= 28133\nIHdlZXQ= 28134\nIG1hc2N1bGluZQ== 28135\nIEVj 28136\nIHJlb3A= 28137\nIFBsYW50 28138\nIE1BWQ== 28139\nIHNwaWtlcw== 28140\nIG5venpsZQ== 28141\nIFdpa2lwZWRpYQ== 28142\nIENvaA== 28143\nSVNTQQ== 28144\nY2hsb3NzZW4= 28145\n7KeA66W8 28146\nIOuvuOs= 28147\nIE5lZGVy 28148\nSm9zaA== 28149\nINCg0L7RgdGB0LjQuA== 28150\nIDE5ODc= 28151\nIFRoZW9yeQ== 28152\nZWtr 28153\nIHV0YW4= 28154\nINC00L7QvNCw 28155\nY2h1 28156\nINGB0LE= 28157\nIGFwcm92ZQ== 28158\nVkVO 28159\ndWVwcmludA== 28160\nIDg0 28161\nQ29y 28162\nIHJpY2hlcg== 28163\nIHNhbmR3aWNoZXM= 28164\nYXRzdQ== 28165\n0YjQuNGF 28166\nIGxhdHQ= 28167\nfn5+fg== 28168\nZnJpZW5kcw== 28169\nIGRlcm5pw6hyZQ== 28170\nIHN0ZXJlbw== 28171\nINGN0LrRgdC/ 28172\nIHByb3RlY3Rpb25z 28173\nIGhhdXQ= 28174\nRXZlcnlvbmU= 28175\nIGVudGVycHJpc2Vz 28176\nIE1vc3RseQ== 28177\nIFNwb3RpZnk= 28178\nIFNleA== 28179\nIHVuZw== 28180\njOulvA== 28181\nIGFjdGl2aXNt 28182\nY3RpY2E= 28183\nb3JpZ2luYWw= 28184\nINC/0YDQvtCz0YDQsNC8 28185\nIGJyb2Njb2xp 28186\n4KY= 28187\n0L7Qs9GA0LDRhA== 28188\nIHNla2FyYW5n 28189\nIGNyYWZ0aW5n 28190\nINCx0LDQvQ== 28191\nIFJheg== 28192\nIG5haXZl 28193\nIHNjcm9sbGluZw== 28194\nIG51bWVyaWNhbA== 28195\nIHNjaGVkdWxpbmc= 28196\nIGFwYXJ0bWVudHM= 28197\n540= 28198\nIHN0cmV0Y2hlcw== 28199\nYWNleQ== 28200\nIEhFUg== 28201\nIHppbmM= 28202\nIGRhcm4= 28203\nIGPDqWw= 28204\nIHdhcmRyb2Jl 28205\nIHJlZGlyZWN0 28206\nIGp1bQ== 28207\nIFN0cmFuZ2U= 28208\nIG7DoG8= 28209\nIGV4cGVyaW1lbnRpbmc= 28210\nw6lyw6k= 28211\nIHZvdWxleg== 28212\nIGdlYmU= 28213\nIEthbm4= 28214\nIMSR4buZ 28215\nIE1heGlt 28216\nIEvDtm4= 28217\nIEdsYXM= 28218\nIHBvbGlzaGVk 28219\nIG51bWE= 28220\nSWNo 28221\nIHJpdHVhbHM= 28222\nIFNJ 28223\n0LjRgtC10LvQuA== 28224\nIGluZmlsdA== 28225\nIHNjYXJm 28226\nb3BoeQ== 28227\nIHlpbmU= 28228\nIGNpdmlj 28229\nIE1lbmc= 28230\nw6RuZ2U= 28231\n1aU= 28232\naGlzdG9pcmU= 28233\nIE9rZQ== 28234\nIOyYhg== 28235\nIHNvbGx0ZW4= 28236\nIDgy 28237\nIHByZXNjcmliZWQ= 28238\nIER1YmFp 28239\nIEVsdGVybg== 28240\nIG5hdGlvbndpZGU= 28241\nIHNrYXRpbmc= 28242\naWFyeQ== 28243\nIHJld2FyZGVk 28244\nIG1vcmFsaXR5 28245\nIE1hZ2dpZQ== 28246\nIE9oaGg= 28247\nIEZhaHJlbg== 28248\nb2x2ZWQ= 28249\nIGRldXhpw6htZQ== 28250\ndGVjaG4= 28251\ncm9sZQ== 28252\nIGxlaWRlcg== 28253\nIEpBWQ== 28254\nINC40L3RhNC+0YDQvA== 28255\nIGNhZmZl 28256\ncmVpY2hlbg== 28257\nIGthcnQ= 28258\nIEN1dGU= 28259\nZmZlY3RpdmU= 28260\nIGJ1bGx5 28261\nYWdhcg== 28262\nIGNvbW1vZGl0eQ== 28263\nIG9icmln 28264\nT1VS 28265\nIHVucGxlYXNhbnQ= 28266\nbm94 28267\nSnVs 28268\nb2xpdGg= 28269\n0YLQvtGP0Yk= 28270\nIEJlbGxh 28271\nIGRvbGxz 28272\nIEhvZmY= 28273\nIGFkdmlzb3Jz 28274\nIHRyYW5zZmVycw== 28275\nIEdva3U= 28276\nIDEyMDA= 28277\naW5ob3M= 28278\nUGFs 28279\nIOuYkQ== 28280\nIHJlcHQ= 28281\nIGFjY29tcGxpc2htZW50 28282\nIHdlYXZl 28283\nIG92ZXJzaWdodA== 28284\nIHVuaGVhbHRoeQ== 28285\nIGZpbHQ= 28286\nIHB1ZGRpbmc= 28287\nIE1pZ3VlbA== 28288\nIGNodWNrbGVz 28289\ndmVyc2lvbg== 28290\nIGNvbmZlc3Npb24= 28291\ndmFsdWU= 28292\nIHRyaXVtcGg= 28293\nIHNhaXI= 28294\nIOuFuA== 28295\nIGFydGU= 28296\nIE1hdGVyaWFs 28297\ndXRp 28298\nIGxpcXVvcg== 28299\nIEJheWVybg== 28300\nIE1haWw= 28301\nIO2WpQ== 28302\n0YHQutC+0Lw= 28303\nIGNoZWFwZXN0 28304\nINGH0LDRgdGC0Lg= 28305\nIEpvYnM= 28306\nIENhbnlvbg== 28307\naGFybWE= 28308\nYWxleQ== 28309\nYW5kcm8= 28310\nIGFwcGVhcmFuY2Vz 28311\ncHJvZg== 28312\nINC+0Lc= 28313\nbGFnZW4= 28314\nIC8v 28315\nINC70LjRiNGM 28316\nIHJlY292ZXJpbmc= 28317\n0LTQtg== 28318\ncHN5 28319\nIHN3aWZ0 28320\nIFNwaW4= 28321\nIHNlaW5lbQ== 28322\nIGRvbHBo 28323\nZsO8aHI= 28324\nw6J0 28325\nIGFsdGlqZA== 28326\nIE1hcnR5 28327\nIEhvY2g= 28328\nIHByZWRhdG9ycw== 28329\nIHZvcmhlcg== 28330\nINCU0LDQstCw0Lk= 28331\nIGZyYWdtZW50cw== 28332\nIHBhc3RyeQ== 28333\nIGNvbW1lbg== 28334\nIFNhbmE= 28335\nIOqxtOuNsA== 28336\ndXNzZW4= 28337\nIHRlbGE= 28338\nIE5pbmE= 28339\nbGVr 28340\nIGNyaWVz 28341\nIHRoaWdocw== 28342\nIEZsZXg= 28343\nIEJ1eno= 28344\n44Q= 28345\nVXM= 28346\nIHBhc28= 28347\nIGRlY2xpbmVk 28348\nIE55 28349\nYmFsYW5jZQ== 28350\nIG1hc2E= 28351\nIGpvcw== 28352\nINCh0L/QsNGB0LjQsdC+ 28353\nYWNodQ== 28354\nbG91ZA== 28355\nIHBlbmE= 28356\nIFdhbGQ= 28357\nIGVsaW1pbmF0aW9u 28358\nINCy0LXRgdGM 28359\nb3JhZ2U= 28360\nIG1pc3VuZGVyc3RhbmRpbmc= 28361\nIGVuZG9yc2U= 28362\nIG9nw7NsZQ== 28363\nIGdyZWVk 28364\nIGtsZWlu 28365\n15zXlA== 28366\nUkVZ 28367\nIEVhdGluZw== 28368\nIHNlbWluYXI= 28369\nIEJpcnRoZGF5 28370\nIHF1ZWxsZQ== 28371\nIE11bHRp 28372\nIHRpcmFy 28373\nIHBlcmNo 28374\nIGxhdm9y 28375\nIEppYQ== 28376\nIG11dGF0aW9ucw== 28377\nIGNpZ2FyZXR0ZXM= 28378\n2YjYrA== 28379\nIGNvdXNpbnM= 28380\nIGNhcHN1bGU= 28381\nIGhvcnJpZmlj 28382\nIHN0dXI= 28383\nIHplaWd0 28384\nbnV0cw== 28385\nIG1lYW53aGlsZQ== 28386\nIENvbGlu 28387\nIGdvYmllcm5v 28388\nIGd3 28389\nIHVoaA== 28390\nIEpFUg== 28391\nc3BlY2lmaWM= 28392\nIGFsbGVnYXRpb25z 28393\nIOupiw== 28394\nIEVsbGE= 28395\nb29rZWQ= 28396\nIEZpdA== 28397\nYWZmbGU= 28398\nIEFwcsOocw== 28399\nIER1Y2s= 28400\nIGNlbGx1bGFy 28401\nY8Ozdw== 28402\nINGH0YPQstGB0YLQsg== 28403\nZ2Vub21tZW4= 28404\n7Iqk7Yq4 28405\nIGxhaW4= 28406\naXNvbA== 28407\nIGhvbGRlcnM= 28408\nIGJvb3N0ZXI= 28409\nIFNhc2hh 28410\n0YvQstCw0LXRgg== 28411\ngbw= 28412\nIHNlcGFyYXRpbmc= 28413\nIHJlaW5mb3JjZW1lbnQ= 28414\nINC+0LTQvdC+0Lk= 28415\n7JeG 28416\nSURF 28417\nIE9wdGlvbg== 28418\ncGhvbg== 28419\nIHBsYWlz 28420\nIENhbWI= 28421\nIO2ZmA== 28422\nIHVuY29tbW9u 28423\nIjo= 28424\nbWl5b3J1bQ== 28425\nbW9p 28426\nYWNqZQ== 28427\n0LDQttGD 28428\n1bY= 28429\nIGdlbXM= 28430\nw7xsZXI= 28431\nb29scw== 28432\nIGVuenltZXM= 28433\nIGtpZG5hcHBlZA== 28434\nIGtldGNodXA= 28435\ndGFsaw== 28436\nIHphY2g= 28437\nIHdhc2hlcg== 28438\n44CC44CC 28439\nIEFyY2hpdGVjdA== 28440\ndmVudWU= 28441\nIFBsYW5uaW5n 28442\nIFNhdmlvcg== 28443\nINCz0YDRg9C/0L8= 28444\n7Yq8 28445\nYXJ5YQ== 28446\nIHByb2Nlc28= 28447\nIGxpbWJz 28448\nIHJlYWxpemVz 28449\naWFuZGVy 28450\nRlM= 28451\nYWpp 28452\nIHVuaXRl 28453\nIOydmOs= 28454\nIHBvc3PDrXZlbA== 28455\ncmFpdHM= 28456\nIEFncmU= 28457\n24zaqQ== 28458\n7ISc64+E 28459\nINCy0LXQuw== 28460\nINC80LXRgdGP 28461\nYW5vcg== 28462\nUGF0 28463\nIGRlcm5pZXI= 28464\nz4PPhM61 28465\nINC60LDQutCw0Y8= 28466\nIGzDpHNzdA== 28467\nIE1laA== 28468\nIG5naA== 28469\nIGFtYXRldXI= 28470\nRmU= 28471\nIOq2gQ== 28472\nIHNpdHVhY2nDs24= 28473\nIHNlZGFu 28474\nIGNsZWFuc2luZw== 28475\nbGFzdGluZw== 28476\nIGNvbW11bmlzdA== 28477\nQU5F 28478\nIGlycmVndWxhcg== 28479\nIHNvdXQ= 28480\nIENhcm5leQ== 28481\nIGFsbGVtYWFs 28482\nIG11Y2jDrXM= 28483\nIGxpYnJv 28484\n0K3RgtC+ 28485\nINCw0L8= 28486\nIGNvbnRpbnVhdGlvbg== 28487\nIExvcg== 28488\nPyIs 28489\ncXVpbg== 28490\nIGNoYXJhY3Rlcml6ZWQ= 28491\nYWplcw== 28492\nIHNpZ2h0cw== 28493\nINGP0LfRiw== 28494\nIFVoaA== 28495\nYmlydGg= 28496\nZG9uZw== 28497\nIGhhYmxhbmRv 28498\nIHN5bXB0b20= 28499\nIGNhcGFjaXRvcg== 28500\nIHRyYW5zcG9ydGVk 28501\nIGlnbm9yYW50 28502\nINC90LjQutC+0LPQtNCw 28503\nIGRyaXA= 28504\nIEV2YQ== 28505\nIGFkamVjdA== 28506\nIG1hc3NpdmVseQ== 28507\nIEV0aGk= 28508\nIENpcmNsZQ== 28509\nIHJhaW5mYWxs 28510\nIE1vdXNl 28511\nIHJlZnVuZA== 28512\nIFp3 28513\nYXNzZW1i 28514\nIDIyMA== 28515\nIE9yZA== 28516\nIHZlaW5z 28517\nIEdpYW50 28518\nIG3Do2U= 28519\nIHZhcA== 28520\nIG1pc3Nlcw== 28521\nzr/Phc+C 28522\nTW8= 28523\nIEVudHdpY2s= 28524\nSU5U 28525\n2YbYqg== 28526\nIHRoZW9yZXRpY2FsbHk= 28527\nIHRlYXJpbmc= 28528\nIHRyb3VibGVk 28529\ncHJlbQ== 28530\nIHJlcGV0aXRpdmU= 28531\nIOKW 28532\nIGhlYXZlbmx5 28533\nIEFtYmVy 28534\nINC/0L7Qu9C+0LY= 28535\nIO2VtOyk 28536\nIHZvd2Vs 28537\nYW5raW5n 28538\nIFdpcnRzY2hhZnQ= 28539\nIGlycg== 28540\nIGNvenk= 28541\nIHVuZmFtaWxpYXI= 28542\nIFBvcnM= 28543\nIOunnuyVhA== 28544\nIFRpbW90aHk= 28545\n0YHQvtC70Y7Rgg== 28546\ncGV4 28547\nIFZJUw== 28548\nKSg= 28549\nIHN1cGVyc3Q= 28550\nIGltcHJvdg== 28551\nIEJlbmc= 28552\nIGRpc2Nvbm5lY3RlZA== 28553\nIGFwdA== 28554\n0YDQtdC9 28555\nIEV4dHJh 28556\nINCx0LXQuw== 28557\nc2hvcA== 28558\nZGluZ3M= 28559\nIENvbm5lY3RpY3V0 28560\n7LCs 28561\nIEdD 28562\nYmVo 28563\nSmVyZW15 28564\nIEJhdHQ= 28565\nYXRoYQ== 28566\nIFp1c2FtbWVu 28567\nc2NyZWFtcw== 28568\nIGdyYXM= 28569\nYWZmdA== 28570\nIEluaXRpYWxseQ== 28571\nIEJyZXR0 28572\nIHNwZWNpZmljYXRpb25z 28573\nIHNlYXdlZWQ= 28574\nIG9hdGg= 28575\nIGZvdW50YWlu 28576\nINC60L7RgtC+0YDQvtC5 28577\nIFN0ZWlu 28578\nIENvcmludGg= 28579\nIGNvbmp1Zw== 28580\nIGNvbXBlbnNhdGU= 28581\nIOuKkOuCjOydtA== 28582\nIG9uemU= 28583\nIHNraW5jYXJl 28584\nQnJpYW4= 28585\nIHNlcnZpcg== 28586\nfX0= 28587\nIFZpaw== 28588\nIHVuaW50 28589\nIHN1cHBsaWVycw== 28590\nIGJhbGNvbnk= 28591\nIGVuZXJnaWE= 28592\nb21ldHJpYw== 28593\n0LfRjw== 28594\nIHNpZ2g= 28595\nIFRPTQ== 28596\nIFB1cmU= 28597\neXR0 28598\n0YvRgQ== 28599\nIFJhaW5ib3c= 28600\nIFBpdHRz 28601\n15nXng== 28602\nIHN0YXR1ZXM= 28603\naGVhZHM= 28604\nIGNvdXBsZWQ= 28605\nIGhlcmQ= 28606\nIGV4Y2x1ZGVk 28607\nIGdpbHQ= 28608\nINGO 28609\nIHN3b2pl 28610\nIFN2ZXI= 28611\nNjM= 28612\naXNzYW50 28613\nIGTDvHJmZW4= 28614\noIjr 28615\nIGtpc3Npbmc= 28616\nb29m 28617\nIGN1cnNlZA== 28618\nIHNob3dlcnM= 28619\nIHN3aW5naW5n 28620\nIHJlcHJvZHVjZQ== 28621\nIHPDpHR0 28622\nZWxjb21l 28623\nIGZ1bmRhbWVudGFscw== 28624\nIGFsbW9uZA== 28625\nIHDDqQ== 28626\nIHdlbGxiZWluZw== 28627\nIGh1bnRlcnM= 28628\nU2Vj 28629\nk5zrprQ= 28630\nIGVtaXNzaW9u 28631\nIHBzeWNob2xvZ2lzdA== 28632\nIGJldHJheWVk 28633\nIFJleW5vbGRz 28634\nTEVT 28635\nIHBvbGxpbmc= 28636\nIG5lZ2F0aXZlbHk= 28637\nIGNvbWJpbmVz 28638\n15zXkA== 28639\n0LDRgNCw 28640\nzrvOu86s 28641\nIFR1cm5z 28642\nT1RU 28643\nINeU15k= 28644\nYWlzb24= 28645\nIGFpcmxpbmU= 28646\nIHJlc3RyaWN0aW9u 28647\nd2Fs 28648\nIGF1cmFpdA== 28649\nIExlYmFub24= 28650\nIE1PUg== 28651\nIG1vbmtleXM= 28652\nw6luZXI= 28653\n0ZbRlw== 28654\nIG1vdGhlcmY= 28655\nINmH2LDZhw== 28656\nIGZldQ== 28657\nw7xocmVu 28658\nIGh5Z2llbmU= 28659\nZW50ZWVu 28660\nRGVz 28661\nIGRpc3NpcA== 28662\nRXN0 28663\nIHNhaW50cw== 28664\nIHBvdGFzc2l1bQ== 28665\nIHJlY2tvbg== 28666\nQ2xpbnR1cw== 28667\nIG1hbmlmZXN0YXRpb24= 28668\nIEFwcHJv 28669\nIEluc3BlY3Q= 28670\nIHZlbnRpbGF0aW9u 28671\nIGhlbG0= 28672\nIGthcmE= 28673\n4Liy4LiZ 28674\nIGZhdm9yYWJsZQ== 28675\nIOyViuyVmA== 28676\nIEhpc3Bhbmlj 28677\n4Lic 28678\nINeU15s= 28679\nIHZhbGlkYXRl 28680\nIFJlc2lkZW50 28681\nIGNvbWVueg== 28682\nYmVpdGVy 28683\nZXJlcg== 28684\nIGRhZG8= 28685\nYXRjaGluZw== 28686\nbWV0cm9z 28687\nIEhpbg== 28688\nIER1bQ== 28689\nIGhhesSxcg== 28690\nIE5hdGFsaWU= 28691\nIGVuY3J5cHRpb24= 28692\n0L7Rh9C60LA= 28693\nbW1h 28694\naG91c2Vz 28695\nIGFuYWx5dGljYWw= 28696\nIERhbmc= 28697\nZmlyc3Q= 28698\nIEVuYw== 28699\nY2FuZG8= 28700\nIGx1ZHpp 28701\nd2FydA== 28702\nIHN0YXRpc3RpYw== 28703\nIOyCsA== 28704\nIGNvbW1lbnRpbmc= 28705\nIGNvb3JkaW5hdGVk 28706\nIEh5cGVy 28707\n5Zo= 28708\nIEJlcnQ= 28709\nIEhpcA== 28710\na2Vt 28711\nw7xuw7w= 28712\nIHphbA== 28713\nIO2VmOuKlOuNsA== 28714\nIFJvYm90 28715\ncmF3bg== 28716\nIHJoZXRvcmlj 28717\ndWxsYWg= 28718\nIERpZXQ= 28719\nIHRha2ljaA== 28720\nIHBvc3Nlc3NlZA== 28721\nk5zripQ= 28722\nIHdha2Vz 28723\nIFJhZg== 28724\nTWFydA== 28725\nIGVjYw== 28726\nIEZN 28727\nIGRpZmlj 28728\nIEFsbGV6 28729\nIGN1cmVk 28730\nIFF1YWQ= 28731\nIGJlbGU= 28732\nIGpvdXJuYWxz 28733\nIHRhZA== 28734\nIHNvY2lhbGVz 28735\nIHdoYXRz 28736\nIEJhc3M= 28737\nIGplc3RlbQ== 28738\nIFNhZGx5 28739\nIFNvdXJjZQ== 28740\nIMO8w6c= 28741\nYWx0dW5n 28742\naWVydGVu 28743\nIGp1bGxpZQ== 28744\naWZh 28745\nINCa0L7RgA== 28746\nIERvb3I= 28747\nINCd0LDQtA== 28748\nINC30LTQvtGA0L7Qsg== 28749\nIHJ1bW9y 28750\nIHBpZXM= 28751\nINC/0LXRgNC1 28752\nINC+0YLQsg== 28753\n0LXQvdC90YvQtQ== 28754\nSG9zdA== 28755\nIFNvcGhpZQ== 28756\nYW50ZW4= 28757\nQW55 28758\nIEF1Zmc= 28759\nIEhEUg== 28760\nIFJvY2tldA== 28761\ncmVzc28= 28762\nIHZlcmRl 28763\nIHByw6lzaWRlbnQ= 28764\nIGluZG9vcnM= 28765\nIHN0YWdnZXI= 28766\nIHN0YXRv 28767\nIERpYWw= 28768\nIGJ1enppbmc= 28769\nZW1lcg== 28770\nINCS0YHRkQ== 28771\nINC00LXRgNC10LI= 28772\nIHBvdXY= 28773\nIHN0cmFuZHM= 28774\nIOqyg+ydtA== 28775\nIFBhcmw= 28776\n0L7QutC+0Lk= 28777\nIHNpcA== 28778\nICgq 28779\nw6RuZ3Q= 28780\nIGRlYmVy 28781\nIEFpbg== 28782\nIGRyYXN0aWNhbGx5 28783\nIFNsb3dseQ== 28784\nIEJyaWc= 28785\nIFRvcmFo 28786\nIGFjaGU= 28787\nID8/Pw== 28788\nIERvYg== 28789\na2FubnQ= 28790\nTWFyeQ== 28791\nIHN0YW0= 28792\nIERlbW9u 28793\ncGxh 28794\nIEZyZXVuZA== 28795\nIEJlbm4= 28796\nIGhpZ2hz 28797\nINqp2LE= 28798\nIFByZXBhcmU= 28799\nIHByb3h5 28800\nIGNhbXBv 28801\nIEF1Z2Vu 28802\no6jr 28803\nIENobG9l 28804\naWN1bGFybHk= 28805\neW91bmc= 28806\nqZTr 28807\nIHNjcmF0Y2hpbmc= 28808\nIGdsYWM= 28809\nIGdlbWVpbnNhbQ== 28810\nYW5hbA== 28811\nYWNha3PEsW4= 28812\nIEZvcnVt 28813\nZW5uaWFs 28814\nIFJlc291cmNlcw== 28815\nIG1laXN0ZW4= 28816\nIEZlbGw= 28817\nIHVuYW5pbQ== 28818\nIFRC 28819\nIFNlbGJzdA== 28820\n5oY= 28821\nIGludGltaWRhdGluZw== 28822\nIEdlZsO8aGw= 28823\nIOy9lOuhnA== 28824\naWRvcg== 28825\naWNpb25lcw== 28826\nYXJzYQ== 28827\nXS4u 28828\nYXpv 28829\nIGtlbmRp 28830\nIFRhZ2U= 28831\ndGVybWlu 28832\nIFByb3plbnQ= 28833\nTWF5YmU= 28834\nbMOp 28835\nIHF1ZXN0aQ== 28836\nIG1lbWVz 28837\nIGNvcnJl 28838\nIFZJUA== 28839\nIEdhbGxlcnk= 28840\nIHVyZ2VuY3k= 28841\nIG5vY2hl 28842\nIGtpbmRseQ== 28843\nIE1lcmVkaXRo 28844\nIHbhuq15 28845\nINin2YTYqA== 28846\nIEVzdGFkbw== 28847\nenVn 28848\nb3F1ZQ== 28849\nIG9iZXNpdHk= 28850\nT2Zm 28851\nIEV1cm9wZWFucw== 28852\nw7Zk 28853\n7Lm06w== 28854\nIGhvb3A= 28855\nIGVuam95cw== 28856\nIENoaXA= 28857\ncGF0aWVudA== 28858\nIG1pY3Jvc2NvcGU= 28859\nIGxlZ2l0aW0= 28860\nINGP0LLQu9GP0LXRgtGB0Y8= 28861\nz4POuQ== 28862\nYXJnZW50 28863\nIHNoYW0= 28864\nIGxpY2Vuc2luZw== 28865\nb2xpYQ== 28866\nU29ycnk= 28867\ncmFtYQ== 28868\nIGFjY2VsZXJhdGVk 28869\nIHd5bQ== 28870\nIGZhaXJuZXNz 28871\nIFJlYWRpbmc= 28872\nIHNsYWNr 28873\nIERvaw== 28874\nemnEmWt1asSZ 28875\nIHJ1YmJpbmc= 28876\n0LDRgtGD 28877\nIGFsbG9jYXRlZA== 28878\nanVuZw== 28879\nIHBhaW5z 28880\nIHdpbmRpbmc= 28881\nIGdlbGl5b3I= 28882\nIENV 28883\nbW90 28884\nY29jaw== 28885\nIFBvc2l0aW9u 28886\nYnJvcw== 28887\nIGxpdmVzdHJlYW0= 28888\nIEJyYWlu 28889\n7LCp 28890\nIHByemVr 28891\nIEVp 28892\nIENvY28= 28893\n0LHQsA== 28894\nIHNob3ZlbA== 28895\nZWE= 28896\nIGNob2NvbA== 28897\nIHJlYmVsbGlvbg== 28898\nIHNob3dj 28899\nIEhhbG8= 28900\nIGRpdmlkZW5k 28901\nbWlzc2lvbg== 28902\nIHVzYW5kbw== 28903\nIFsi 28904\nIGZhbGVp 28905\nQmxhY2s= 28906\nIFN1cmVseQ== 28907\nIMW7 28908\nIHBoaWxvc29waGVy 28909\nIG92ZXJoZQ== 28910\nIEJvcm4= 28911\nIG9iamV0aXZv 28912\nIDEyOA== 28913\nc2NoZWlk 28914\nIE5hemlz 28915\nIHNvbGNoZQ== 28916\nbGlmdA== 28917\nY2VkZQ== 28918\nYWRvcnM= 28919\nIG1hcnNobQ== 28920\nIExPUkQ= 28921\nlOydtO2BrA== 28922\nIG93bmluZw== 28923\nQ29udA== 28924\nIGxhbmRzY2FwZXM= 28925\nIGxlbmRpbmc= 28926\nIEF1dGhvcml0eQ== 28927\n0L7QstC+0Lk= 28928\nb3F1 28929\nIFNlcw== 28930\nIEZlcnJhcmk= 28931\nIHJlc3BvbnNhYmls 28932\nIHbDoXJpb3M= 28933\nIGRlbGlj 28934\nIGVtYmFyaw== 28935\nIGVtYnJvaWRlcg== 28936\nIGZyYW1ld29ya3M= 28937\nIHNpbW1lcg== 28938\nIG5hY2lvbmFs 28939\nIHJlbWFpbmRlcg== 28940\nIFZpZWxsZWljaHQ= 28941\nIHF1aWVyZXM= 28942\n7JeU 28943\nIHRlc3Rvc3Rlcg== 28944\naWhlbg== 28945\nIE96 28946\nw6hsZQ== 28947\nIHBvcnRyYXllZA== 28948\nzrrOtQ== 28949\nIFBvbGl0aWs= 28950\nIGFwZXJ0dXJl 28951\nIGJsYW5k 28952\naW5kdXN0 28953\nINC+0LHRgNCw0YI= 28954\nIFRob3Vz 28955\nQmF5 28956\nIGRhbmRv 28957\nIHNoZXI= 28958\nIGFkbWlzc2lvbnM= 28959\nIENyZXc= 28960\nINGW0L0= 28961\nU0lOR0lORw== 28962\nIG91bmNl 28963\nIGl5 28964\nIGJhc2ls 28965\nIG92ZXJ0aW1l 28966\nIHRocmVhdGVu 28967\nIHBhcnRuZXJlZA== 28968\nIENhbm4= 28969\nYXZhbmE= 28970\nINC30L3QsNC10YLQtQ== 28971\nINC+0YLRgQ== 28972\nIFR1ZG8= 28973\n7L2U 28974\nIOuGgOs= 28975\nZmVs 28976\nIHJlYXJy 28977\nIGlud2FyZA== 28978\nIFJvZ2Vycw== 28979\n4LmD4Lir 28980\nIHR3ZWFr 28981\nIGRyeWVy 28982\nY2Vzc2lvbg== 28983\nIHJpZ29yb3Vz 28984\nIERhYXI= 28985\nb21pY3M= 28986\nIGZhdHM= 28987\ndmFk 28988\nIHppcHBlcg== 28989\nYWNjZXB0YWJsZQ== 28990\nIGRlbW9uc3RyYXRpbmc= 28991\nIFl1bQ== 28992\nIGJlYXU= 28993\nIHJvc3Rlcg== 28994\nIHByZWRvbWluYW50bHk= 28995\n0LXRgNGD 28996\nbmluZ2Fy 28997\nIHRyaWFuZ2xlcw== 28998\nIHRleHRpbmc= 28999\nIGJlcnJpZXM= 29000\nIOyCrOynhA== 29001\nYWRkZXI= 29002\nIGZhaXRlcw== 29003\nIEltYWdl 29004\nbGVyZQ== 29005\nIGJvdW5kcw== 29006\nIExhdXI= 29007\nIOyVhOustOs= 29008\nIG1pbw== 29009\nIHVzYQ== 29010\nINiw 29011\nIHRvZW4= 29012\nIEphbmc= 29013\nxb5l 29014\nY2hvZA== 29015\nYW5hbg== 29016\nINC+0LHRgNCw0LfQvtC8 29017\nIHBlcnNldmVy 29018\nIFN3ZQ== 29019\nIGF1Z21lbnQ= 29020\ndWdnbGluZw== 29021\nacOocmVtZW50 29022\naXN0bGVz 29023\nYWNqxJk= 29024\nOTE= 29025\nIG1haA== 29026\nIEtJUg== 29027\nRGll 29028\nIGRvd25oaWxs 29029\nIDE5Njg= 29030\n0L7RgNC+0YjQvg== 29031\nb2dyYXBoaWNz 29032\nIHTDpHNzw6Q= 29033\n6rKg7KOg 29034\nINC70LjRhw== 29035\nQVVESU8= 29036\nINC/0LvQvtGF 29037\nIHByb3Bvc2luZw== 29038\nIHRlbXB0ZWQ= 29039\nIGNvbnZlcnRpbmc= 29040\nIExlaHI= 29041\nIHBlcnNvbmU= 29042\nIEZlZWxpbmc= 29043\n7Ja07KO8 29044\nb21icmVz 29045\nINec15k= 29046\nIGd1cnU= 29047\nIGRlbWVudA== 29048\n0L3QuNC3 29049\n0LjRgtC10LvQtdC5 29050\nIGNvbXBhw7E= 29051\nIHJlZG8= 29052\nIGNvbmR1Y3Rvcg== 29053\nbWlh 29054\nIGlkb2xz 29055\nIE11bA== 29056\nIGluZXg= 29057\nIHTDpG3DpA== 29058\nIGltcGFjdGluZw== 29059\nIGRheWxpZ2h0 29060\nZ2ls 29061\nIGhlbGZlbg== 29062\nIGVudHNwcmVjaA== 29063\nIHdpxJlrcw== 29064\nIHNjcmlwdHVyZXM= 29065\nIGRpc21pc3NlZA== 29066\nIFBvZGNhc3Q= 29067\n2YXYsQ== 29068\nIGFubnVhbGx5 29069\nIHVzYWJsZQ== 29070\nIGxpYnJl 29071\n0L7Qt9C8 29072\nIHJ1YmJpc2g= 29073\nIGNvbnRpbnVhcg== 29074\nIGh1bWlsaQ== 29075\nIHNwZWVjaGVz 29076\n0YDQsNGH 29077\nYmFyZA== 29078\nNzE= 29079\nPjw= 29080\nb2xvZ8OtYQ== 29081\nd2VhbHRo 29082\nIG1lZGl0YXRl 29083\nk6TsnZg= 29084\nIENyYWZ0 29085\ncml2 29086\nIEFnYWluc3Q= 29087\nIGNlcmFtaWM= 29088\nZXNww6hyZQ== 29089\nIGNvbXBldGVudA== 29090\nIEhvcGtpbnM= 29091\nIGtpbG9z 29092\nIGdyYXZlbA== 29093\nIHBpc3Rvbg== 29094\nIGZyaWVuZHNoaXBz 29095\nIGVzY3Jl 29096\nIHZveg== 29097\nIEdlc2VsbHNjaGFmdA== 29098\nIHVudGVyc3TDvHQ= 29099\nIG11ag== 29100\nIHdhcm5pbmdz 29101\ncG9z 29102\nIFByb2Zlc3Npb25hbA== 29103\nd3N6eQ== 29104\nb2RsZQ== 29105\nYmFuZHM= 29106\nIHRlYW13b3Jr 29107\nc3RlbGx1bmc= 29108\nIGR4 29109\nIGF0dG9ybmV5cw== 29110\nIHdlaXRlcmU= 29111\n44WL44WL44WL 29112\nIE9yaWdpbmFs 29113\n15nXlw== 29114\nIGJyb2FkY2FzdGluZw== 29115\nINC/0LXRgNCy0YvQuQ== 29116\ndWNoaQ== 29117\nIGhldXJl 29118\nIGdyYWJz 29119\nIFdPUg== 29120\nIFBsYWlk 29121\nTWlu 29122\nIHBheg== 29123\nIFB1aXM= 29124\ndW11 29125\naXRhdGVz 29126\nIGNvYXRz 29127\nIGJ1ZW4= 29128\nIGhlaXI= 29129\nIHBuZXVt 29130\n16nXqA== 29131\nZW5zZXI= 29132\nIEpVREdF 29133\nIGJsb25kZQ== 29134\n4bmb 29135\nIGdhaw== 29136\nIHPEsWs= 29137\nIHF1b3RlZA== 29138\nIGVxdWlwbw== 29139\nIHdpc2hpbmc= 29140\nw61jaWE= 29141\nIHZlcmJz 29142\nIENhbmFkaWFucw== 29143\nIGdvdmVybmluZw== 29144\nIEV2YW5z 29145\nRXVybw== 29146\nIGdlbnJlcw== 29147\nIHVudGVyc2NoaWVk 29148\nIEJlY2t5 29149\ns7zqsozsmpQ= 29150\nIGVpbmdl 29151\nIFJhaXNl 29152\nb2xhbmQ= 29153\nIFN0cmF0ZWc= 29154\nIGVyZXM= 29155\nIFZldGVyYW5z 29156\nIGJyZWFrb3V0 29157\nIHNhbnTDqQ== 29158\nIGFkZWw= 29159\nIGludmVzdGlnYXRlZA== 29160\nIHBldXI= 29161\nIGFnaWxl 29162\nIHJhaWxyb2Fk 29163\nYW5za2E= 29164\nINC10Lk= 29165\nIGV4cG9z 29166\nYXRvcmllcw== 29167\nIENvbnRlbnQ= 29168\nIHRydXRocw== 29169\nIFRyYWls 29170\nIGd1YQ== 29171\nIHBvcmVz 29172\nIHdyaXRpbmdz 29173\nIFVocg== 29174\nIFRoYXRz 29175\nIGljaW5n 29176\nT0M= 29177\nIFByb2R1Y3Rpb24= 29178\nIGNhcm5l 29179\nSVNT 29180\nIG5pbmd1w6lt 29181\nbm9u 29182\nIHZpY2lvdXM= 29183\n15XXlA== 29184\nIHJlY29ubmVjdA== 29185\nIGNlbnRyZXM= 29186\nIEtlbQ== 29187\nIGNyZWFzZQ== 29188\nIOydtOuvuA== 29189\n0LDQudGC0LXRgdGM 29190\nINCx0L7RgA== 29191\nIEhhecSxcg== 29192\nINGB0YPQtA== 29193\nIMO6bmljYQ== 29194\nb3dhxYI= 29195\nIGFkaGVy 29196\naHVh 29197\nWlo= 29198\nIHByZWNpc28= 29199\nIGN1cnJlbnRz 29200\nIHNlYXNvbmVk 29201\nIElvVA== 29202\nIEJpc2hvcA== 29203\nc3RlZA== 29204\nIEJlcm5hcmQ= 29205\n7KSY 29206\nIEdsZW5u 29207\nIGt0w7NyeW0= 29208\n4Li34LmI 29209\nIGFzdHJvbG9n 29210\nIEtvdA== 29211\nIHBhcmZvaXM= 29212\nIGZvcndhcmRz 29213\nIFdpxJk= 29214\nIM6Y 29215\nIG5hbm8= 29216\nc3Vi 29217\nIEJyaWxs 29218\nIGdyaXQ= 29219\nIGNpdGVk 29220\nZ2Fkbw== 29221\nIG1lbHRz 29222\nIGZvcmPDqQ== 29223\n4paI4paI 29224\nIGJham8= 29225\nIGRpc2NyZXRpb24= 29226\nsLA= 29227\nYXRpdml0eQ== 29228\nIHNpdHVhdGVk 29229\n0YnQtdC1 29230\nINC/0YDQuNC90YbQuNC/ 29231\nYW1heg== 29232\nIGFxdWFyaXVt 29233\nIGRpc3NvbHZl 29234\nIEdvZHM= 29235\nU3VwZXI= 29236\nIGFtaWQ= 29237\nems= 29238\nYW1wZg== 29239\nIGhlbGE= 29240\nJyE= 29241\nIGRldmVsb3BtZW50YWw= 29242\nIERpc2U= 29243\nINGA0LDQsdC+0YLQsNC10YI= 29244\nIHNuYXBzaG90 29245\n1bg= 29246\nIFl1ZQ== 29247\nIEh1bGs= 29248\nIERvb20= 29249\nIEZlbGl4 29250\nIHLDqWY= 29251\nTWFsZQ== 29252\ncGhhbnRz 29253\nRU5T 29254\nIE1lY2hhbg== 29255\nIEdvbGY= 29256\nIGdlbmVyb3NpdHk= 29257\nw6R0emU= 29258\nIHVubG9ja2Vk 29259\n7YOB 29260\nb2NhbHlwc2U= 29261\nQWxyaWdodA== 29262\nIOqwnOs= 29263\nINeQ15HXnA== 29264\nIEtlZXBpbmc= 29265\nIGNvbGxhYm9yYXRpbmc= 29266\nY2hpZWY= 29267\nIEZlcm5hbmRv 29268\nIGNoZWZz 29269\nIO2UvOu2gA== 29270\nIHNraXBwZWQ= 29271\nIHBlcnNvbm4= 29272\nIGF4ZQ== 29273\nY2hleg== 29274\nIGV4dHJhY3Rpb24= 29275\nIEFW 29276\nIEdpYmJz 29277\nIO2c 29278\nIHPEsQ== 29279\nSUFN 29280\nVmlldw== 29281\nIEdSQU5U 29282\nIOuquA== 29283\nIHZlcmlmaWNhdGlvbg== 29284\nIGRlcGljdGVk 29285\nIE1veg== 29286\nb3V4 29287\nIHR1bA== 29288\nIHNjYW5uZXI= 29289\nIGNvbWVkaWFu 29290\nIFZvbGtz 29291\nIEpFRkY= 29292\np4Q= 29293\nIGRpc3RyYWN0aW9u 29294\ncsOh 29295\nIElOVEVS 29296\nIHNpbmNlcg== 29297\nINee16o= 29298\nINep16A= 29299\nIGNvbnN0cnVjdGl2ZQ== 29300\nYXJm 29301\nIOuIhOs= 29302\nIGVjbw== 29303\ncmFtb3M= 29304\nIHJlbmV3ZWQ= 29305\naW5lbWVudA== 29306\nIFVi 29307\nIFBlcHBlcg== 29308\n7KeA6rCA 29309\nIERhcndpbg== 29310\nIG1lcmNoYW5k 29311\nIHbDoXJpYXM= 29312\nw6hjZQ== 29313\nTkc= 29314\nIOychO2VtOyEnA== 29315\nINCw0LrRgtC40LI= 29316\nIFVudGVycw== 29317\n2LnZhA== 29318\nIGludHJpYw== 29319\nb21tYQ== 29320\naWV2aW5n 29321\nIENhcm9saW5l 29322\nIFBSRVM= 29323\nIHBlcmZvcm1lcg== 29324\nIGF1dG91cg== 29325\nIHV0dGVybHk= 29326\nIHN5bnRoZXNpcw== 29327\nIGxlc2JpYW4= 29328\nIHJldHJpZXZl 29329\nIG1hbmVpcmE= 29330\nIGltcGFpcg== 29331\nIG1lbnRvcmluZw== 29332\nIFNvdWxz 29333\nIEdvUHJv 29334\n0YDQsNGC0Yw= 29335\nIGNvc2U= 29336\nIFNTRA== 29337\nSVJF 29338\nIHVwZnJvbnQ= 29339\nIEF1bg== 29340\nIGdhbWVy 29341\nIGxpdHQ= 29342\nIGFnZ3Jlc3Npb24= 29343\nIExpa2V3aXNl 29344\nIEJldHR5 29345\nIERhcnQ= 29346\nIERMQw== 29347\naXNobWVudA== 29348\n7J6l7J2E 29349\nY3JlYW0= 29350\nIEJhYnlsb24= 29351\nIG51Zw== 29352\nYnJhcg== 29353\nIGF5bsSx 29354\nYW1pbHk= 29355\nYmlrZQ== 29356\nYWhhaGFoYQ== 29357\nbG95ZA== 29358\nIG1pcmE= 29359\nIHBlcm1l 29360\nIEdhbWluZw== 29361\nIGZpcm13YXJl 29362\nTWE= 29363\nIGFzc2lzdGVk 29364\nYXRpY3M= 29365\nIOyVnuycvOuhnA== 29366\nIE1lbnRhbA== 29367\nbmllanM= 29368\nIEl6 29369\nb3fEhQ== 29370\nIHRvdWdoZXI= 29371\nIGRlZWQ= 29372\nIHN0eWxpc2g= 29373\nIFRvb2xz 29374\nIEhhbXA= 29375\nIHN1bnNjcmVlbg== 29376\nIGFydGljdWxhdGU= 29377\naXll 29378\n0LjRhA== 29379\nIFNwcmVhZA== 29380\nIEhBVkU= 29381\nIHN3aXJs 29382\nIHNwb25zb3Jpbmc= 29383\naW92YXNjdWxhcg== 29384\nbWVzaQ== 29385\nIHJlbGF4YXRpb24= 29386\nINGB0LLQvtC40YU= 29387\nIG1hcmdpbnM= 29388\nIHNhxJ8= 29389\nIFByaWRl 29390\nIM+Ezr/Phc+C 29391\n0LjRhtC4 29392\nZW5jaQ== 29393\nRG9lcw== 29394\nIGNvcnBzZQ== 29395\nIGVuZHVyYW5jZQ== 29396\nIO2emA== 29397\n7Lm0 29398\nIGhhaXJjdXQ= 29399\nIGludGVycnVwdGVk 29400\nIHdpbmR5 29401\nIENhbGVi 29402\nz4HPhw== 29403\nIFBvdXJxdW9p 29404\nIGhvbGlzdGlj 29405\ndWNsZWFy 29406\nIFdob2xl 29407\nQWN0 29408\nIGdhbGxvbg== 29409\nY2FkZQ== 29410\nIFJlZ2lvbmFs 29411\ncm9hZHM= 29412\nIFNjaG5l 29413\nw6FuZw== 29414\nINC40LfQvNC10L0= 29415\nIG1lbnVz 29416\nIHNwbGl0dGluZw== 29417\nIHByaWNlZA== 29418\nIM6T 29419\nIHVzZXJuYW1l 29420\nINCe0Yc= 29421\nIGNvbXByZXNzZWQ= 29422\neWlu 29423\nIGd1YXJkaWFu 29424\nIGdvb2Y= 29425\nIGNoZWNrbGlzdA== 29426\nIGludGVyY2hhbmdl 29427\nIGV4cGVkaXRpb24= 29428\nIGV4dGVybg== 29429\nIGluZnJhcmVk 29430\nZW5nbw== 29431\nIGRlbnlpbmc= 29432\nIHBhY2tldHM= 29433\nb25lbnQ= 29434\nQkI= 29435\nIEluY3Jl 29436\nIHNpbmk= 29437\nw59lcg== 29438\nw6hn 29439\nbWFhbA== 29440\nZ2VuZXJhdGlvbg== 29441\nIG1pbm9yaXRpZXM= 29442\nIGxsZXZhcg== 29443\nIG5vbWluYXRpb24= 29444\nIGNvbnNpZA== 29445\nINec16I= 29446\nbXXFnw== 29447\nIEVzYw== 29448\nIG51bWVyYXRvcg== 29449\nIGthaWs= 29450\nIGt0w7NyeWNo 29451\naWVzZW4= 29452\nIHbDqg== 29453\nIFVTUw== 29454\nIFByaXZhdGU= 29455\nINC+0LTQvdC+ 29456\nIGFsw6lt 29457\nw610dWxv 29458\nIGxpbWI= 29459\nIGZvcmdpdmVu 29460\nIGRpc2Nsb3N1cmU= 29461\nz4TOrw== 29462\nIG5pbmfDum4= 29463\nIHRoZXJhcGV1dGlj 29464\nIG5lZ290aWF0aW5n 29465\nIE5pa2U= 29466\nZW5zZWZ1bA== 29467\nIGluY2Fw 29468\nIGZsYWdzaGlw 29469\ndG93bg== 29470\n4og= 29471\nIM+Azr/Ouw== 29472\nIHdvbHZlcw== 29473\nIHZpb2xhdGlvbnM= 29474\nIEFybm9sZA== 29475\nIGludGVydmVuZQ== 29476\nIGhlYXRlcg== 29477\nIHJlY3Vyc29z 29478\nIG1haWQ= 29479\n6rK8 29480\nINC00LDQstCw0LnRgtC1 29481\nIENlbGVicg== 29482\nIGNhcGU= 29483\nIFN0eQ== 29484\nYWluZW4= 29485\nc2l0ZQ== 29486\nYmlq 29487\nINC/0L7Qu9GM0Lc= 29488\nIGZyYW1lZA== 29489\nIHB1Ymxpc2hlcnM= 29490\nINGH0YPRgtGM 29491\nIHRlbXB0YXRpb24= 29492\nIGNlcnRlemE= 29493\nIGV4ZW1wdA== 29494\n7Iq5 29495\nc2VsbGluZw== 29496\nIFRhc2s= 29497\naG9vbg== 29498\nIENvYw== 29499\nIFBhcmtz 29500\nIHJlcGV0aXRpb24= 29501\nINGC0YPQtNCw 29502\nIGVuc2w= 29503\nIGRlxJ9pxZ8= 29504\nIE9ybGFuZG8= 29505\nIE1haW50ZW4= 29506\nb2N1bWVudA== 29507\nIEhD 29508\nIHNjb290ZXI= 29509\nINC90LDQv9C40YE= 29510\nIHRpZ2h0ZXI= 29511\nIHRlYXNl 29512\nIHJlbW92ZXM= 29513\nIGtpamtlbg== 29514\nINGB0YPRidC10YHRgtCy 29515\nIHRow6k= 29516\nINCy0YvQs9C70Y/QtA== 29517\nIHJlbGlldmU= 29518\nIG1pdMOk 29519\nIHN0YXRpb25hcnk= 29520\nw7ZmZg== 29521\ncGFibGU= 29522\nIGFydGVy 29523\nIGTDqWY= 29524\ncmF0aXZl 29525\nIGNvbmVjdA== 29526\nIHNhZGRsZQ== 29527\nIERpYW5l 29528\nIGNvbW1lbW9y 29529\nZmVuZGlt 29530\nU8Ot 29531\nIO2BtOs= 29532\nIG1hbmdl 29533\nYXR0ZQ== 29534\nIGFycm9nYW50 29535\nIHJvYm90aWM= 29536\nIGdpw6A= 29537\nIG5laWdoYm91cmhvb2Q= 29538\naXNzb24= 29539\nINC00LLQuNC2 29540\nIFJJ 29541\nIE5vcm1hbg== 29542\nYnJhbmQ= 29543\nYW1hdGlvbg== 29544\nIHJhem9y 29545\nIG11cmRlcnM= 29546\nINGC0YM= 29547\nIHdzenlzdGtpbQ== 29548\nIHV0aWxpdGllcw== 29549\nIG1pY3Jvc2NvcA== 29550\n6r8= 29551\nIGRhcXVp 29552\nb2xsYXI= 29553\nINCU0LDQstCw0LnRgtC1 29554\nIGFubsOpZQ== 29555\nIGtpbG9tZXRyZXM= 29556\nIGhvbW9zZXh1YWw= 29557\nIGFyY2hpdGVjdHM= 29558\nIG5peWU= 29559\nTEVS 29560\nIG1pY3JvcGhvbmVz 29561\nIFN0dW5kZW4= 29562\nIGNvbnNlY3V0aXZl 29563\naWVuZGE= 29564\ndsOkbmQ= 29565\nREVS 29566\nIGxpZnRz 29567\nIE1lYXQ= 29568\nIHNhdmV6 29569\n7ZaI642Y 29570\nTWVu 29571\nIGRpc21hbnQ= 29572\n6rGw66W8 29573\nIGluc3VsYXRpb24= 29574\nIHNjYWxs 29575\nIHNwb29reQ== 29576\nIHBhcmM= 29577\nIGJhbGxldA== 29578\nIFdoYXRzQXBw 29579\nIGZyYW5j 29580\nIGRlbGliZXJhdGU= 29581\nIO2FjA== 29582\nIG1hcnM= 29583\nIFp1cg== 29584\nUHI= 29585\nZGlzY2lwbGluYXJ5 29586\nIG9ic2Vzc2lvbg== 29587\n0LzQtQ== 29588\nIG1hcmNoaW5n 29589\nIEVtZXJnZW5jeQ== 29590\naWd1b3Vz 29591\nIHN6eQ== 29592\nIExhbmRz 29593\nIGJvYXJkaW5n 29594\nINC/0L7Rh9GC0Lg= 29595\nIGVudnk= 29596\nIGNvbXBhc3Npb25hdGU= 29597\nIG1lcmNp 29598\nIGRlc2lyYWJsZQ== 29599\nZGFsZQ== 29600\nIGNhbsSxbQ== 29601\nIEFudGFy 29602\ndGVtcHM= 29603\nIGNvbmZpZ3VyZWQ= 29604\nIENvbXBhcmVk 29605\nbmVo 29606\naWNhdGluZw== 29607\nIG5pY2tlbA== 29608\n2YjZgg== 29609\n2YPZiNmG 29610\nb3Blcw== 29611\nIGZvcm11bGFz 29612\nINCV0YHRgtGM 29613\nIHBvYmw= 29614\nIFBK 29615\nIEx1ZA== 29616\nIEJyaWQ= 29617\nIEhvZw== 29618\nIEJyaXM= 29619\nSmVu 29620\nIHNoYWRpbmc= 29621\nIFlhcw== 29622\nIGRpc3R1cmJlZA== 29623\nIHJlY29tbWVuZGluZw== 29624\nIGPDqQ== 29625\nIEhPVw== 29626\n7JeI7Ja0 29627\nIHJldmVyc2Vk 29628\nIEludGVyZXN0aW5nbHk= 29629\naW94aWQ= 29630\nIOyYpOy8gOydtA== 29631\n4bq/dQ== 29632\neHg= 29633\nIG91YWlz 29634\nIFlvdVR1YmVycw== 29635\nIFJvc2E= 29636\nIEhhdXB0 29637\namFkaQ== 29638\nIHZsb2dz 29639\nIGN1bHR1cmE= 29640\nIExlYWRlcnNoaXA= 29641\nIEhlcA== 29642\nIGlsbHVt 29643\ntOuPmQ== 29644\nIGN1c3RvbWl6ZWQ= 29645\nIG1hcmNh 29646\nIHF1YXRybw== 29647\nINC90LDQsw== 29648\nIFNwYWNlWA== 29649\nIEVpZ2Vu 29650\nYXN0aW5n 29651\nIG9sZHXEn3U= 29652\nIGZvcnRz 29653\ncmltZW50 29654\naWVuY2lh 29655\nIHRlbmly 29656\ncm9mZmVu 29657\nIDE5Nzk= 29658\nIGNpZQ== 29659\nIOuQmOqzoA== 29660\nIGVzY3Jp 29661\nz4zPgg== 29662\n7Y+s 29663\ndXp6eQ== 29664\nQ29uZw== 29665\n7J247J20 29666\nR3JlYXQ= 29667\nc2ls 29668\nw6ljaA== 29669\nIG11bHRpYw== 29670\nIERpc2s= 29671\nspU= 29672\nIGZhemxh 29673\nIGxldmFudA== 29674\nIGFiYWpv 29675\ndXJyeQ== 29676\nc3RydQ== 29677\nIOuoueuKlA== 29678\nIGFjY2Vzc29yeQ== 29679\nINC00LLQuNCz 29680\nIFJpZA== 29681\nMjAxOQ== 29682\nIGRvd25zdHJlYW0= 29683\nIGtheg== 29684\ndXRhbg== 29685\nIGNoYXJjb2Fs 29686\nIGFmZWN0 29687\nd3U= 29688\nIGNvbnRleHRz 29689\nIGZlYXJlZA== 29690\nIOyEpA== 29691\nIGhpc3Rvcmllcw== 29692\nIGZhcw== 29693\nZW5zaWJsZQ== 29694\nIGNvY29h 29695\naWxsYXI= 29696\nZ2VvbnM= 29697\nIHNwaXJpdHVhbGl0eQ== 29698\nIFBldw== 29699\nIHBoYXJtYWN5 29700\nIHBhc3Npb25z 29701\nIGJvcw== 29702\nIGFsbMOh 29703\nIHRocml2aW5n 29704\nIFJlYWN0 29705\nIG9jY3VweQ== 29706\nIHdpdGhkcmF3YWw= 29707\nIGFsbG93YW5jZQ== 29708\nIEZyYWt0aW9u 29709\nIGJ1ZGRpZXM= 29710\nIGlkbGU= 29711\nIGRpc3NvbHZlZA== 29712\nIHByZXZhbGVudA== 29713\nIG1pbGl0YXI= 29714\nIHNlbnNpbmc= 29715\nIHBvamF3 29716\nIGFuY29yYQ== 29717\nIGFidW5kYW50 29718\nIGhhaXJzdA== 29719\nIHR3ZWU= 29720\nIG7DpGNoc3Rl 29721\nIE3DtmdsaWNoa2VpdA== 29722\nIGhvbw== 29723\ndWZmaWNpZW50 29724\nIGZhbnRhc3Q= 29725\nIGVkaWJsZQ== 29726\nIOuWqOyWtOw= 29727\n7JuD 29728\nIHZlaW4= 29729\ndWNjaQ== 29730\nIGRldm90aW9u 29731\nIGNvbmNlYWxlcg== 29732\naW5jb21l 29733\nIHJlY3ljbGVk 29734\nIOyKpO2DgA== 29735\nIHBvbnRvcw== 29736\nIGRlc3N1cw== 29737\nIHbDqXJpdA== 29738\nIHJlZmxlY3Rpb25z 29739\nIEFB 29740\nIHRha2Vhd2F5 29741\nYmFyZQ== 29742\nIENvbnRhY3Q= 29743\nZWls 29744\nIEhlYXI= 29745\nIG1pcmFj 29746\nIEdlcmlsaW0= 29747\nINGB0LDQvNGL0Lk= 29748\nIHZpdm8= 29749\nIGtpbG9ncmFtcw== 29750\nIENyaW0= 29751\nw7t0 29752\nNzg= 29753\nIHNpbmNlcmVseQ== 29754\ncmF6 29755\nIOuztQ== 29756\nIGFycml2 29757\nIGNvbmNlcHRpb24= 29758\nIFBlcnNpYW4= 29759\nIHNqw6Rs 29760\nIHN0YXJyaW5n 29761\nIOyVhOustA== 29762\nIEZvcmV2ZXI= 29763\n0LXRgdGC0Yw= 29764\nIHZlaWw= 29765\nIHN1YnRpdA== 29766\nb2RrYQ== 29767\nINC+0YLQvdC+0Yg= 29768\nIGNvb2tz 29769\n0LXQvdGP 29770\nS2F5 29771\nIG5pw7Fvcw== 29772\nIFBob25l 29773\nIHN0aXRjaGluZw== 29774\nIGZpbmdlcnByaW50 29775\nzrvOrA== 29776\nIGRlZGljYXRl 29777\nIExvYg== 29778\nIGJsYWNrcw== 29779\nIEJsZQ== 29780\nYm91dA== 29781\nIMSRYW5n 29782\nIGVrcw== 29783\nIHNxdWFzaA== 29784\nIEvDvA== 29785\nb2Rp 29786\nIG7GsOG7m2M= 29787\nIHZveWFnZQ== 29788\nIHBsYXlmdWw= 29789\nINil2YTZiQ== 29790\nYW5pYw== 29791\nIGNvbmRlbW4= 29792\nIELDtnlsZQ== 29793\nIFBvbGl6ZQ== 29794\nIGF5dWRh 29795\nIHBhbQ== 29796\n4LmE4Lib 29797\nIEthdGh5 29798\n0LXQtNC40L0= 29799\n0L3QvtCy0LA= 29800\nIGJyaWc= 29801\nZWdlcg== 29802\nIGVhZ2xl 29803\nIHZpc2lvbnM= 29804\nIO2VreyDgQ== 29805\nIHNoaXR0eQ== 29806\nIGhvdHQ= 29807\nIEJyaXR0 29808\ndXRvcnM= 29809\nRU5URQ== 29810\nIHBob24= 29811\nIEJpbmc= 29812\nINC/0L7QtNC00LXRgNC2 29813\nc3ByaW5n 29814\nZXR0ZW4= 29815\nIHBpbGdy 29816\nIGVkaXlvcg== 29817\n0LXQvdGC0Ys= 29818\nYWdnaW8= 29819\nIGp1bA== 29820\nIGNvbXByZW5k 29821\ndGVpbA== 29822\nINiy 29823\nIHBlcmZvcm1lcnM= 29824\nIGluZmFtb3Vz 29825\nIE1L 29826\n56o= 29827\nb3RsZQ== 29828\nZWZm 29829\nIEhhc2g= 29830\nIGNvd2FyZA== 29831\nIEJSQQ== 29832\nIERE 29833\nIGNvbWlkYQ== 29834\nIHBsYXRh 29835\nIGZsYXA= 29836\nIE1laHI= 29837\ncmlidXRpb24= 29838\nIFllbWVu 29839\nIG15c3Rlcmllcw== 29840\nIMSweWk= 29841\nIHN0ZWxs 29842\nIGV5ZWxpbmVy 29843\nIGRlbGVz 29844\nIG5haWxlZA== 29845\nIGlsbG5lc3Nlcw== 29846\nIHN0YWNrcw== 29847\nIHRyYWJhamFy 29848\nZmxvd2Vy 29849\nY2l1 29850\nIGNydWRl 29851\nIHN1YnN0YW50aWFsbHk= 29852\nIGhvbWVt 29853\nIG5lcGhldw== 29854\nIHN0YW1wcw== 29855\nIGNhcmJz 29856\n0YzRgtC1 29857\nbW9vdGg= 29858\nIHR1bm5lbHM= 29859\nYWNpZQ== 29860\nIFNlw7E= 29861\nIEhlcmE= 29862\nIOyVhOuLiOyXkOyalA== 29863\nIFd5b21pbmc= 29864\nIEhETUk= 29865\nIExpcw== 29866\ndWNpw7Nu 29867\nIHN0ZWVy 29868\n0L7Rjg== 29869\n0LjRgtCw 29870\nTlQ= 29871\nIOyWvOq1tA== 29872\nIHBhbG1z 29873\nIG5lb24= 29874\n0L7QstCw0L3QuNGP 29875\nIGZpbHRlcmluZw== 29876\nIGpvdWVy 29877\nIEjDtg== 29878\nINC90LXRgQ== 29879\n6rKg7Ja07JqU 29880\nIDgx 29881\nIHN0b3J5bGluZQ== 29882\nIHByemVw 29883\nIHRoYW5raW5n 29884\nIEJvZWluZw== 29885\nIHNvZnRseQ== 29886\namVt 29887\n0LDQu9GM0L3Ri9GF 29888\nIGZsYXNobGlnaHQ= 29889\nINC/0YM= 29890\nIFdPTUFO 29891\n4bqvYw== 29892\nw61jaA== 29893\nIGx1eHVyaW91cw== 29894\nIHfDvG4= 29895\nIGltcGFjdGZ1bA== 29896\nIGNvbnNvbg== 29897\ncmV1 29898\naXJyaW5n 29899\naWZ0ZXI= 29900\nIGNvbnN0aXR1ZW50cw== 29901\nIDk0 29902\nIFRvdQ== 29903\nZ29t 29904\nIOyDneqwgeydhA== 29905\nIHN0ZXJlb3R5cGVz 29906\nIG1vxbxsaQ== 29907\ngqg= 29908\nIHBlbmNpbHM= 29909\nINGB0LvQvtC2 29910\nIGlocmVt 29911\nIEJlc2No 29912\nIEtvaA== 29913\nIEVudHNjaGVpZA== 29914\nIGxlaw== 29915\nIGbDtnJz 29916\nIHRvdGFsbWVudGU= 29917\nIGxpdmVseQ== 29918\nIGVudHJvcHk= 29919\nIGRpc2Nlcm4= 29920\nINCX0L3QsA== 29921\nIGRvdg== 29922\nIG15dGhvbG9neQ== 29923\nYXBhbmVzZQ== 29924\nIGFwcHJveGltYXRl 29925\n0LDRgtC40LI= 29926\naWZpYWJsZQ== 29927\nIFNlbw== 29928\ntOyLrO2eiA== 29929\nIOyYtw== 29930\nIHRlbXBvcmFs 29931\nIGlU 29932\nIGVzdGF0 29933\n0LrQuNC8 29934\nIHNwcmluaw== 29935\nIGdydW5k 29936\nIGluZmFudHJ5 29937\nIHNjaGFmZmVu 29938\nIGFuaw== 29939\ncmlhZ2Vz 29940\nIFllb24= 29941\nIE1vcm9j 29942\nIGludmFzaXZl 29943\ngZQ= 29944\nIHBhcmVudGluZw== 29945\nIFJpcw== 29946\naWJpbGU= 29947\nIG1vZHM= 29948\nINC/0YDQvtCy0LXRgA== 29949\nIFRoaW5n 29950\nIFdoZXJldmVy 29951\nIGFja25vd2xlZGdpbmc= 29952\nIHBhd24= 29953\ndW1tZXI= 29954\nb3Ji 29955\nNjk= 29956\nIHJldHJvdXZl 29957\nIHJlbGllcw== 29958\nIEhpZ2h3YXk= 29959\nIGF3ZQ== 29960\naXRhaXJl 29961\nIGFwcGxpY2FudA== 29962\nIGFpc2xl 29963\nd29ybQ== 29964\nIHBheWxvYWQ= 29965\nIGNhcnJl 29966\nIEJhY2g= 29967\nIOy5nOq1rOs= 29968\n0L3QuNC1 29969\nIGl0w61z 29970\nb25uYWlzZQ== 29971\nc29s 29972\nYWxnaWE= 29973\nIHJvY2tpbmc= 29974\nIGJlc3Rlbg== 29975\ncml0ZXM= 29976\nXl4= 29977\n0LjQvdC+0Lk= 29978\nIGJhaXhv 29979\nIOq4sOyWtQ== 29980\n0L7RgtGA0Lg= 29981\nc2lt 29982\nIGluY2Fybg== 29983\n64uk7J2M 29984\nIGxpY2s= 29985\nc2lkZWQ= 29986\nIDcx 29987\nZm9yZGVy 29988\nIHJlc29uYW5jZQ== 29989\nIHRlZ2Vu 29990\nIG1ldGFwaA== 29991\nb3dzZXI= 29992\nINeQ16DXl9eg15U= 29993\nP+OAjQ== 29994\nIHNwaWVsZW4= 29995\nIHZvbGxleQ== 29996\nlOydtO2BrOyXhQ== 29997\nbG9va2Vk 29998\nIHNlbnRlbmNlZA== 29999\nIG11bHRpcGx5aW5n 30000\nIGlkZWFscw== 30001\nIHdhaHJzY2hlaW5saWNo 30002\nIGRlcG9zaXRz 30003\nYmlsaXI= 30004\nIGVmZmV0 30005\naWxsb24= 30006\niOunjA== 30007\nIHRlc3RpbW9u 30008\nIHphd3N6ZQ== 30009\nINC/0YDQvtGG0LXRgdGB 30010\nIExhdg== 30011\nIHRyYXZhaWxsZXI= 30012\nIGxhaXNzZQ== 30013\nIE1vdW50YWlucw== 30014\nINGA0L7QsQ== 30015\nIGV4YW1pbmVk 30016\naXR1cw== 30017\nV2Fz 30018\n0LvRiw== 30019\nIGF0dHJpYnV0ZWQ= 30020\nIOyKuQ== 30021\nIEJhcm9u 30022\nIGdlcA== 30023\nIGF0dGVudA== 30024\nIENvbGxlY3Rpb24= 30025\nIHRoZWF0 30026\nIENhaQ== 30027\nIHdlbGxz 30028\nIGh1bWFubw== 30029\nIEhhc3Q= 30030\nINGF0L7RgtGP 30031\nY3phcw== 30032\nIHBlcm1pdHM= 30033\nIGxlZ2c= 30034\nIGVwbw== 30035\nIEZlbg== 30036\nIHRoaQ== 30037\nIEZvaQ== 30038\nIMOpbGVjdA== 30039\nIDgz 30040\nIG92ZXJ0aA== 30041\nIHRlbmFudA== 30042\nTmV4dA== 30043\nIHByYWlzZWQ= 30044\nc2VjdXJpdHk= 30045\nIEltcGFjdA== 30046\nIHZvdWNo 30047\nIG5lZ8Oz 30048\nIHVudmU= 30049\nIGNyaXRpY2l6ZQ== 30050\nIEtlbnlh 30051\nIHRhY3RpYw== 30052\nIGxvZ3I= 30053\nIHBvaXM= 30054\nIHBhcGE= 30055\nc3BlYWtz 30056\n8J+R 30057\naXNwZXJz 30058\nIHN1cnBsdXM= 30059\nIGNvbGRlcg== 30060\ncGxldHM= 30061\nIFZpZW5uYQ== 30062\nIExlYWQ= 30063\nIGFlcmlhbA== 30064\nIFRhaA== 30065\n0LXQvdGC0L7Qsg== 30066\nIEdyZWVrcw== 30067\nQ2Ft 30068\nIG3DoXhpbQ== 30069\nIGt1aW4= 30070\nY2hpbw== 30071\nIGRlbW9uc3RyYXRlcw== 30072\nYW5vcw== 30073\nIENlcnQ= 30074\nINGN0L0= 30075\nIGJsb2dz 30076\nIOyEnOyauA== 30077\nIGJlYW1z 30078\n0LjQutC+0LI= 30079\nIHByb21wdGVk 30080\nIGZyaWdodGVuaW5n 30081\nIFBvcnNjaGU= 30082\nbGFyxLFuxLE= 30083\nIGNoaWxsaW5n 30084\naXNwaGVyZQ== 30085\nIGZsYXNoaW5n 30086\nIEthcmQ= 30087\nYnJlYWQ= 30088\nIGV4aA== 30089\nIHR5Y2tlcg== 30090\nIGVjb2xvZ2ljYWw= 30091\nIE1hZQ== 30092\nINee15DXldeT 30093\nIOuCmOuPhA== 30094\n0LvQvtC9 30095\neXNz 30096\nIHBlcmd1bnQ= 30097\nIHByaXg= 30098\naXp6YXJk 30099\nIGNhbmNlcnM= 30100\nIDkx 30101\nc3VzcA== 30102\nIEl0ZW0= 30103\nxZ9h 30104\nIHBlc3Q= 30105\nIHRha8SF 30106\nIGx5bXBo 30107\nIFBhdHJp 30108\nZmlsbA== 30109\nIHJlY29ubmE= 30110\nIG9wdGltaXNt 30111\nIG1pbWlj 30112\nIOyynA== 30113\nIE1hZGFtZQ== 30114\nb2N5 30115\nbGluaW5n 30116\nZXJtZQ== 30117\nIGZvbGRlcnM= 30118\nIGN6xYI= 30119\ndWNoYXI= 30120\nIGN1cnNv 30121\nIGJyZWFjaA== 30122\n0L3QuNGC0Yw= 30123\nIHBhbWnEmQ== 30124\nIGVsaWc= 30125\nIGF1dG9w 30126\nRmxvdw== 30127\nIHByb2dyYW1tZWQ= 30128\nIFByb2Nlc3M= 30129\nIGZpZ3Vy 30130\nIFNG 30131\nIEVsZXM= 30132\nIHByb2dyYW1tZXM= 30133\nIGRpenp5 30134\n7Iuc6rCE 30135\nINC70LjQsdC+ 30136\nIHNuaWZm 30137\nIFNlYmFzdGlhbg== 30138\nIEh5ZQ== 30139\nIDQwMDA= 30140\nIHBlcm1pdGU= 30141\nINC30LDRiQ== 30142\nIGd1aXQ= 30143\nIERhaXM= 30144\nIGFjY29yZGFuY2U= 30145\nIG1vZHVsYXI= 30146\nb2dlbmVvdXM= 30147\nIHBvdXF1aW5obw== 30148\nIGFydGlsbGVyeQ== 30149\nIGx1YnJpYw== 30150\nIHZvbGNhbg== 30151\nIE5I 30152\n8J+k 30153\nIGRlYW4= 30154\nUmg= 30155\nIG1pbmlzdHJl 30156\nIEludg== 30157\nIEJ1bGdhcg== 30158\nIERhdGVu 30159\n6I4= 30160\nSW0= 30161\nIG9yaWdpbmF0ZWQ= 30162\nIE5peG9u 30163\naW50ZWdy 30164\nIGxhY2tz 30165\nIE5hY2h0 30166\n7Ja064KY 30167\nY2FtZXJh 30168\nIHJhZGlzaA== 30169\na2l5ZQ== 30170\nIGFuZ2Vz 30171\nIHByw6lm 30172\nanVr 30173\nIEJlZQ== 30174\nIEJV 30175\nINCy0L7RgdC/ 30176\nIEJU 30177\nw6ptZXM= 30178\nIFN0w7xjaw== 30179\nIEluaw== 30180\nIFNlcmdlYW50 30181\nIE11bHRpcA== 30182\nIGhpw6diaXI= 30183\nINCh0LDQvA== 30184\nIETDqQ== 30185\nb2xwaA== 30186\n7Ja4 30187\nIGltcGF0 30188\nIOyViuqzoA== 30189\nINGC0LDQutC+0LPQvg== 30190\nINC90LDQstC10YDQvdC+0LU= 30191\nIHVucHJlZGljdGFibGU= 30192\nIG1lbmQ= 30193\nIOyXhuyWtOyalA== 30194\nIGpha2llxZs= 30195\nIGFubmk= 30196\nIGRvbm7DqQ== 30197\nIEtpcnN0eQ== 30198\nIHJlY3Rhbmd1bGFy 30199\nIGVtcGV6YXI= 30200\nIEV4Y2hhbmdl 30201\n6rCU 30202\nIMOpY29ub20= 30203\nZWxpbg== 30204\ncmVpYnQ= 30205\nINeU16Q= 30206\nIGNlbWV0ZXJ5 30207\nIGVzcGHDsW9s 30208\nb2xpbg== 30209\n0LvRjtC0 30210\nIGdyw6JjZQ== 30211\nYWxsZW4= 30212\nIFBoaWxvcw== 30213\nIEVyc3Q= 30214\nIOyDiA== 30215\nIFZpZA== 30216\nR2l2ZQ== 30217\nT0g= 30218\nzrzOvw== 30219\nIFBhcmU= 30220\nIG1ldGFib2xpc20= 30221\nIG1hcGxl 30222\nIGF4bGU= 30223\nIER5 30224\nIGtvbW1l 30225\nz47OvQ== 30226\nIGdyZWF0bmVzcw== 30227\nIHZlcmlmaWVk 30228\nIHNww6k= 30229\nIEZhaHJlbmhlaXQ= 30230\nIEJyZW4= 30231\nIENvbmZlZGVy 30232\nIGhpc3RvaXJl 30233\nIGVsaW1pbmF0aW5n 30234\nIEFkZGluZw== 30235\nIEFiaQ== 30236\nIGhvc3BpdGFsaXR5 30237\ndGlt 30238\nIGJvbml0bw== 30239\nIHBhcnRlcw== 30240\nINC00YDRg9Cz0LjRhQ== 30241\nIFNoYXk= 30242\nIFNlZA== 30243\nIHJlZ3JldHM= 30244\n0Y/QvNC4 30245\nIHRlbmFudHM= 30246\nIFBUUw== 30247\nIGRldmk= 30248\nIExhdGU= 30249\ndWV6 30250\nIHPDtnls 30251\nIOyerOuwjA== 30252\nIHRvZ2dsZQ== 30253\nIG1hc2tpbmc= 30254\n0LDQu9GM0L3QvtCz0L4= 30255\nIHBlcnPDtm4= 30256\nIGFtZXJpY2Fu 30257\nZmlr 30258\nIFJHQg== 30259\nZW5zb24= 30260\nIEtB 30261\nd3d3dw== 30262\nINGA0LXQsw== 30263\nbWV0aWNz 30264\nIGVkdWNhdG9y 30265\ncGFyaw== 30266\n0LXQu9GM0LfRjw== 30267\nYXJ1cw== 30268\n0YDQtdGC 30269\nIGZlaXRv 30270\nIGNob2ly 30271\nIGxhcmdv 30272\nIGVlbnM= 30273\nIHdhdHRz 30274\nIFNpbmdsZQ== 30275\nIHN1c2NlcHRpYmxl 30276\naWNlcg== 30277\nINCy0LrQu9GO0Yc= 30278\nIHB1cw== 30279\n7ZmY 30280\nRW5n 30281\nIGZhbnRhcw== 30282\nIHNwZWNpZmljYXRpb24= 30283\nIGNvbmZyb250ZWQ= 30284\nIENvbHVtYnVz 30285\n0LjQstC10YI= 30286\nYXLEsW0= 30287\nIGNhZmZlaW5l 30288\nbXVuaXRpb24= 30289\nIG1pZ3JhbnRz 30290\nbGlkZQ== 30291\naXRhdGlvbnM= 30292\nIEdlbWU= 30293\n4bqr 30294\nIHBsYW5uZXI= 30295\nIHN0aW11bGF0ZQ== 30296\nIGFwcm94aW0= 30297\nY2V1 30298\nIE5vbQ== 30299\nIHZvZw== 30300\nINGA0LDRgdGC 30301\nIGVuc2XDsQ== 30302\nIHNlbGxlcnM= 30303\nIGd1dGVu 30304\nemQ= 30305\nQ2Fs 30306\nIGRlc2NyaXB0 30307\nIHJlY29uY2lsaWF0aW9u 30308\nemluaG8= 30309\n4bmHYQ== 30310\nYWN5ag== 30311\nIENPTA== 30312\nc2F3 30313\nIO2ZleyduA== 30314\nIHZhcml0 30315\nIHBhcnRuZXJpbmc= 30316\nIGRldGVudGlvbg== 30317\nIGJvbWJpbmc= 30318\nY2xhcHBpbmc= 30319\naWVuY2llcw== 30320\nb25kdQ== 30321\nQU1F 30322\nIOqwmeyKteuLiOuLpA== 30323\nY8OtYQ== 30324\nINC/0L7RgdGC0L4= 30325\nIEFTTVI= 30326\nIGhvbWVwYWdl 30327\nIHNpw6g= 30328\nYW50aGE= 30329\nIFBvbGw= 30330\nIGlnZW4= 30331\nY3ljaA== 30332\nIOqwkeyekOq4sA== 30333\nIGNvbnNpZGVyYWJseQ== 30334\nIEFyaXN0 30335\nIHdpdGhzdGFuZA== 30336\nIHF1YWxpdGF0aXZl 30337\nIEtyYWZ0 30338\nINGN0LvQtdC60YI= 30339\nIEJlYWQ= 30340\n0LXQutGC0LjQsg== 30341\nIGNydXNoaW5n 30342\n7LOQ 30343\nIG5hdnk= 30344\n2Yjaug== 30345\nc2hv 30346\nIG9haw== 30347\naXBwZXJz 30348\nIHNvaWxz 30349\nIHBpZ21lbnQ= 30350\nIGV2aXRhcg== 30351\nIGZ1c2U= 30352\nIERhbGU= 30353\nOiI= 30354\nIGNvbXBsw6h0ZW1lbnQ= 30355\nIGtlbA== 30356\n4LmG 30357\nIHF1YXRyZQ== 30358\nIFVN 30359\nIOunkOs= 30360\nw61y 30361\nIGxlaXN1cmU= 30362\nIEhvdXNpbmc= 30363\nIGZvbGRz 30364\nZXN0aW9u 30365\nQVJT 30366\nIG1hc2g= 30367\ndXJwb3Nl 30368\nIGFjY3VtdWxhdGVk 30369\nIFN0dWZm 30370\nIHRhcGVz 30371\nINGB0LjQu9GM0L3Qvg== 30372\nIExPVkU= 30373\nIDE5ODI= 30374\nIHNjYXJz 30375\nIGNhcGl0YWxpc3Q= 30376\nIE5lZA== 30377\nIHNvZnRlbg== 30378\nIG5vdGFibHk= 30379\nIGZvcmPDqW1lbnQ= 30380\nIFJhdW0= 30381\nINC90LXQvtCx0YXQvtC0 30382\nIHRyYWRlbWFyaw== 30383\nIGZlcnRpZw== 30384\nID8h 30385\nIHJlaW5mb3JjZWQ= 30386\nIHJlY2hhcmdl 30387\nIFB1dHRpbmc= 30388\nIHZpbGxhaW5z 30389\nIGhhbmRpYw== 30390\nIGFkdmVydGlzZW1lbnQ= 30391\n2KrZig== 30392\nINGB0YPQvA== 30393\nIFJpbGV5 30394\n15XXkdc= 30395\nT3M= 30396\n2KfYsg== 30397\nQm95 30398\nIHNxdWlzaA== 30399\nb2NrZXQ= 30400\nIHRlc3RpZnk= 30401\nINec157X 30402\nINC80LDRgdGB 30403\nbWFudWVs 30404\nIEFya2Fuc2Fz 30405\naWZmZQ== 30406\nIGFuYWx5c3Rz 30407\nIERlYWY= 30408\nIGrDsw== 30409\nIGdyb2Nlcmllcw== 30410\nIFdoZWVs 30411\nINGA0LjRgQ== 30412\nIGPDsm4= 30413\nIENvYg== 30414\nIHByaXNvbnM= 30415\nw6h2ZQ== 30416\nIENhYmluZXQ= 30417\nIHBvc2Vk 30418\nIGd1ZXJyZQ== 30419\nIExsb3lk 30420\nIGNsZXJr 30421\nIGNyaXNlcw== 30422\nIFNobw== 30423\nIE9yZQ== 30424\nIEZvb3RiYWxs 30425\nIEFkdmlz 30426\nIFpoZW5n 30427\n6I0= 30428\nIEFNWQ== 30429\nIHVuZm9y 30430\nIG1vbmFzdGVy 30431\nIGNvbXBpbGU= 30432\nIGltbW9ydGFs 30433\nYXRhYmxl 30434\nIHBhcmFubw== 30435\nIHRpdmVy 30436\nIFN0ZXBo 30437\nIEZ1w58= 30438\nIGRpc2NvbnRpbg== 30439\nIHJpcGU= 30440\nIGhhY2tpbmc= 30441\nIHNpZW5kbw== 30442\nIHNlZ3Vybw== 30443\nYWx0cmVz 30444\nIGFuZGVyZXM= 30445\nIOumrOs= 30446\nIGV4cG9ydHM= 30447\nIHRhYmlp 30448\nIOq4sOuLpOs= 30449\nIGJvdGhlcmluZw== 30450\nIHBpY2tsZQ== 30451\nIEJSSUFO 30452\nIGFsdGFy 30453\nINC/0YDQuNCx 30454\nIHRyYW5zZmVycmluZw== 30455\nIFZvcnM= 30456\nINmH2Yg= 30457\nIFph 30458\nIEZyYW5jZXM= 30459\nIGJyb3dzZQ== 30460\nZW1pdA== 30461\nIGNoZXdpbmc= 30462\nIEZyZWRkeQ== 30463\nIGVkaXRvcnM= 30464\nw6RsbGU= 30465\nIO2MgA== 30466\nIFNxdWU= 30467\nIEN1bHR1cmFs 30468\nYXdr 30469\nIFNhY2hl 30470\nIENhcmJvbg== 30471\n4bqvdA== 30472\nRkw= 30473\nIE5HTw== 30474\ncGXFgg== 30475\nIFNvdQ== 30476\nIGh2b3I= 30477\ndW5pbnRlbGxpZ2libGU= 30478\nIOuylQ== 30479\nIMKw 30480\naWlu 30481\nINei150= 30482\nIGRlcnJpw6hyZQ== 30483\nIGN6eW0= 30484\nIEFwb3N0 30485\nIHJlZ2FyZGVy 30486\nIGFncmFkZQ== 30487\nIENhbmR5 30488\nIG1hcmU= 30489\nIGludHJvZHVjZXM= 30490\nYmlyZHM= 30491\nIHVuaXF1ZWx5 30492\nIG11aw== 30493\nIGNvb2tlcg== 30494\nIGNyZXdz 30495\nIGplaXRv 30496\nRVJU 30497\ntoTr 30498\nbmlzc2U= 30499\nIGVm 30500\nIGNhcnRl 30501\nIFlhaw== 30502\nIFBBVA== 30503\n0LjQvdC+ 30504\nYm9ra2k= 30505\nIG1hdGVz 30506\nIGRpc3RpbnQ= 30507\nIOy9lOuhnOuCmA== 30508\nIHnEsWw= 30509\nIM66zqzOvQ== 30510\nIGNvbmZpZ3VyYXRpb25z 30511\nZW5nYQ== 30512\ncmVjaHQ= 30513\nSGFwcHk= 30514\naW52ZXN0 30515\nIHJlY29uc3RydWN0 30516\nINGN0YLQvtC80YM= 30517\nIG1vc3F1ZQ== 30518\ncmF1bQ== 30519\nIHZveWV6 30520\nIE5CQw== 30521\nIOyekOyLoA== 30522\nIHN0dXJkeQ== 30523\nINC60LDQvw== 30524\nIGFuc2No 30525\nYWxpZA== 30526\nIG1hc2lo 30527\nIFJFUA== 30528\nIOy9lOs= 30529\nIGRlZHVjdA== 30530\nIHNhbGly 30531\nd3VyZg== 30532\naWxvdA== 30533\nIE11dHRlcg== 30534\nb2xkcw== 30535\nIEZFTUE= 30536\nIEJpYg== 30537\nIG5laWdoYm9yaW5n 30538\nIGJsaXNz 30539\nIO2YvA== 30540\n0LvQuNGB0Yw= 30541\nINGC0YDQtdCx 30542\nIGdyZW5hZGU= 30543\nIGVnYWw= 30544\nIGZpbmVseQ== 30545\nIHBldGFscw== 30546\nIGtlZXI= 30547\nIGNoeWJh 30548\nIHNraXBwaW5n 30549\nIHRoaXJ0ZWVu 30550\nIGdyYXZ5 30551\nIFNBVA== 30552\nNjE= 30553\nINC90L7Qsw== 30554\nIG1pbnM= 30555\nSVRF 30556\nIHNvemlhbA== 30557\n7ZWY66m07ISc 30558\ncnVrdHVy 30559\nINCy0L7Qt9C80L7Qtg== 30560\nINC+0L/Rj9GC0Yw= 30561\nIGFydGg= 30562\nIEN1YmFu 30563\nIHRyZWFzdXJlcw== 30564\nIGZlcnRpbGl6ZXI= 30565\nIGF3YWtlbmluZw== 30566\nIOuwseyLoA== 30567\nIHJhbGw= 30568\nIGRlcGljdA== 30569\nIFBhYmxv 30570\nIG5pbmV0ZWVu 30571\nIHdhdHQ= 30572\nIGVudGlyZXR5 30573\nS1M= 30574\nIFdvb2Rz 30575\nU2No 30576\nINqp2Yg= 30577\nIERyeQ== 30578\ndXZl 30579\nIHJlY29uc3RydWN0aW9u 30580\nIGFuYXRvbXk= 30581\niOulvA== 30582\nIGJhYmE= 30583\nIGxpc3RlbmVy 30584\nIHNoYXJwZW4= 30585\nIFBlcnU= 30586\nINCy0YvQtw== 30587\nIHJlY3JlYXRpb24= 30588\nIGluaXRpYXRl 30589\nIGNhbG9y 30590\nIE5hag== 30591\nZ2Vl 30592\nIEZlZWxz 30593\nIFNuYXBjaGF0 30594\nIFRldA== 30595\nIE5lc3Q= 30596\nIERhZg== 30597\nIEZpbmlzaA== 30598\nINGC0LDQutC40Lw= 30599\nw7pj 30600\naXplbnM= 30601\nIHNwaW5z 30602\nIGVtYnJ5 30603\nIHBhc3NhZ2Vz 30604\nIGNpZW50 30605\nIGp1c3RpZmljYXRpb24= 30606\nIG9sbWF6 30607\nIGZsb29kZWQ= 30608\nIGVtb2pp 30609\nIGVtYnJhY2luZw== 30610\nIGRpc2NhcmQ= 30611\nIEJhc2lj 30612\nYWdvZw== 30613\nIOychO2VtA== 30614\nIGFzeWx1bQ== 30615\nZXJpbg== 30616\nIGZpbQ== 30617\nIG5pbmph 30618\nIGF1dG9tYXRl 30619\nIGFsbGVyZ2lj 30620\nw7/Dv8O/w78= 30621\nYW1hbQ== 30622\nINC80LDRgA== 30623\nIE9p 30624\nw6R1cw== 30625\nIGluZHVjdA== 30626\nIEJFTg== 30627\nIHrFgg== 30628\nIGthxbxkeQ== 30629\nIEFNUA== 30630\nbsSb 30631\nU3VyZQ== 30632\nIHF1aWw= 30633\nIGVzcGVj 30634\ncm9r 30635\nQlNDUkk= 30636\nIGxpZWJl 30637\ncHVz 30638\nYWNoc2Vu 30639\nIGNyaWNrZXQ= 30640\n64qQ 30641\nIEZyYW1l 30642\nZWtrw7xy 30643\nYXJi 30644\nIHDFmQ== 30645\n0LjRgdGB 30646\nIHplZ2dlbg== 30647\nIGRvdWJsZXM= 30648\nIERyZQ== 30649\ndGVzdA== 30650\naW5zcA== 30651\nYm95cw== 30652\nIG3Do28= 30653\nIFZlcnNl 30654\nIG11c2N1bGFy 30655\nIE1BTEU= 30656\nIGR1bHU= 30657\nIG9jY2FzaW9uYWw= 30658\nTG8= 30659\nY29ub21pYw== 30660\nIHZhaw== 30661\nIHJlbWVkeQ== 30662\nIOKZquKZquKZqg== 30663\ndmVt 30664\nIMO2bmVt 30665\nIGthcsWfxLE= 30666\nIFNoYXJw 30667\naHVy 30668\nIOuwqeuylQ== 30669\nIGdyYW5kc29u 30670\nIGFrdGl2 30671\nIFRocm9uZXM= 30672\nIOyViOyXkA== 30673\nIHRvdHM= 30674\nIHN1YmQ= 30675\nIFBhdWxh 30676\nIGdyYXZlcw== 30677\nIEJyZW50 30678\nINC90LjQutGC0L4= 30679\nIHPDtno= 30680\nIGNyZWM= 30681\nIFZsYWRpbWly 30682\nINC/0L7QuQ== 30683\nICIt 30684\nIHBzeQ== 30685\nYXRyaQ== 30686\naWRhbg== 30687\nIGHDum4= 30688\nIHN0YW5kYXJkaXplZA== 30689\n7LmY6w== 30690\nINC60YDQvtCy 30691\nIFpodQ== 30692\nc29tZXRoaW5n 30693\nIDc1MA== 30694\nIG11amVyZXM= 30695\nIGFpdA== 30696\nYWd1 30697\nIGNvcnJlY3RlZA== 30698\naWtrYQ== 30699\nZWxlZA== 30700\nIENhcmVlcg== 30701\nb3d5bQ== 30702\nIHJvb21tYXRl 30703\nIGRlc2NlbmRhbnRz 30704\nIE5hcG9sZW9u 30705\nINCU0L4= 30706\n7ZaI7Ja07JqU 30707\nIGJ1bnVu 30708\nIE1pY2hh 30709\nIGRlc2NvYg== 30710\nUEk= 30711\nIHBhbGFicmE= 30712\nIHRyYWNrZWQ= 30713\nIGRlcGVuZGVuY2U= 30714\nIEJhcmFjaw== 30715\nIGZlcnRpbGl0eQ== 30716\nIFNvdXRod2VzdA== 30717\nIGluY29tcGxldGU= 30718\nIGNvbXVuaWM= 30719\nIGNvbXByaXM= 30720\nIFJlc3RhdXI= 30721\nIGFjcm9u 30722\nzrrOsQ== 30723\nIGFwcHJlbnRpY2Vz 30724\nIG11c3N0 30725\nIEFicg== 30726\nIHBlbnRydQ== 30727\nIENvbnNvcnQ= 30728\nIEF2ZWM= 30729\nIGR1bXBsaW5ncw== 30730\nTFI= 30731\nIHdzenlzdGtpZQ== 30732\nIHN3YW1w 30733\n0L3QtdCy 30734\ndWdnbGU= 30735\nIHdhdGVyY29sb3I= 30736\nIHByb3Rvbg== 30737\nIEVzcGHDsWE= 30738\nb2NraW5n 30739\n0L7QstCw0Ls= 30740\nIHRha2lt 30741\nVmVyeQ== 30742\nIGRlbWVudGlh 30743\nIMWfZXlp 30744\nSmFj 30745\nIE1hY0Jvb2s= 30746\nIExpdg== 30747\nZmZpY2llbnRz 30748\nIEh1bnQ= 30749\nIG92ZXJsYXk= 30750\nIFNreXBl 30751\ncHVua3Q= 30752\nIGNvbmZpbmVk 30753\nIEFkcmlhbg== 30754\n2LHZgw== 30755\nIEplZXA= 30756\nIGVucXVhbnRv 30757\nIGFuZXN0 30758\n0L7RgtCy0LXRgg== 30759\nINC80LXQvdGM 30760\nIGlycmlnYXRpb24= 30761\n4buRbg== 30762\nIGVpZ2h0ZWVu 30763\nIFBvbg== 30764\nIHJlc2N1ZWQ= 30765\nIDE5ODM= 30766\ncsO8 30767\namFl 30768\nIEplb25n 30769\nIGFtYXppbmdseQ== 30770\nIEZEUA== 30771\nIGJhY2tzdGFnZQ== 30772\nY3Vl 30773\nIM+Dz4TOt869 30774\nINin2YTYtQ== 30775\nIGxpdmVzdG9jaw== 30776\nIFdhcm5lcg== 30777\nIG1ham9ycw== 30778\nIGNvb3BlcmF0aXZl 30779\nIEJyYWR5 30780\ncmFpbmVk 30781\ncmllYg== 30782\nINeR157X 30783\nINC00L7QstC+0LvRjNC90L4= 30784\nIEZF 30785\nIGxlYWtlZA== 30786\nIE1lcmN1cnk= 30787\nIHBlcnN1YWRl 30788\nIHRyYW5zZm9ybWVy 30789\nIE5vcndlZw== 30790\nIOyXrOufrA== 30791\nIHpyb2JpxIc= 30792\nIGNhcmRpb3Zhc2N1bGFy 30793\nIENyYXNo 30794\nIGdvc3NpcA== 30795\n0LDRgdGC0Yw= 30796\nIOyqvQ== 30797\nIHN3ZXB0 30798\nIEhvcm4= 30799\nIEF0w6k= 30800\nIGJ1a2Fu 30801\nIEthdw== 30802\nS1k= 30803\nIFN0b3JpZXM= 30804\nR2FyeQ== 30805\nIGdhcmRlbmluZw== 30806\nIFF1aWNrbHk= 30807\nIEZhbGNvbg== 30808\nIG92YXQ= 30809\nY8Sx 30810\nIENvbXBsZXQ= 30811\nIERhdGU= 30812\nINC/0YDQuNC8 30813\nIGzDpHVmdA== 30814\nIEF1ZHJleQ== 30815\nIFdlbnQ= 30816\nIHBlbMOtY3Vs 30817\nIGNhcnJpYWdl 30818\nIHVuYWNjZXB0YWJsZQ== 30819\nbnltaQ== 30820\nINGB0LvRi9GI 30821\nIHRlcnJl 30822\ndWVsbGVtZW50 30823\nRUVFRQ== 30824\nIHBoYXJtYWM= 30825\naMO1ZXM= 30826\nIHppY2g= 30827\nIG1pZ3JhdGU= 30828\nIEZyeQ== 30829\nw7FhbmE= 30830\nIE11aXRv 30831\nRU9WRVI= 30832\nIGZvcnRyZXNz 30833\nIENvbXBhbg== 30834\nIEpTT04= 30835\nb3JkbnVuZw== 30836\nIHdhcnRv 30837\nIHVuZ2Vm 30838\n7IWU7ISc 30839\nINGA0L7Qug== 30840\nIHBhZGRsZQ== 30841\nSmFyZWQ= 30842\nIHN1Ym1pdHRpbmc= 30843\nIGxhdGNo 30844\nIGZ1Zw== 30845\nINC60L7RgQ== 30846\nIEVm 30847\nIGxhdW5jaGVz 30848\nIGZ0 30849\nb3RlY2hu 30850\nIHRyYXZlbGxlZA== 30851\n2KfZgQ== 30852\nIHByb2No 30853\nIGRlZGlt 30854\nODM= 30855\nIHJlYm91bmQ= 30856\nIExV 30857\ncGF0aA== 30858\nINGB0L/RgNCw0LI= 30859\nIMO2bA== 30860\nIO2CpA== 30861\nIHByaXZhdA== 30862\nIHRyYWN0b3I= 30863\nIEF0dGVudGlvbg== 30864\nU2Vy 30865\nIGNvc2Vz 30866\nw6FyaWE= 30867\ncGFs 30868\nIOydgA== 30869\nIHN1Y2Nlc3Nvcg== 30870\nIGNvbm5lY3RvcnM= 30871\nINGD0YHRgtCw0L3QvtCy 30872\nIGdlbm9jaWRl 30873\nIHN1ZmZpY2llbnRseQ== 30874\nIEFpeMOy 30875\nIHN0YWJpbGl6ZQ== 30876\nIGNvbmdlc3Q= 30877\nIGNhcnZpbmc= 30878\nIHpvc3Q= 30879\nINCx0YvRgdGC0YDQvg== 30880\nIHNob3J0ZXN0 30881\nIGxpdmVs 30882\nIDg5 30883\nIGVyaw== 30884\nIHBvcnRyYWl0cw== 30885\n4KWA 30886\n6Jg= 30887\nYm9hdA== 30888\nbGxhaA== 30889\nQU5D 30890\nIGVtcGlyaWNhbA== 30891\nIEVjaG8= 30892\nIE5lZGVybGFuZA== 30893\nTmV0 30894\nIGN1aWRhZG8= 30895\nIFJvbWE= 30896\nIGNhbGY= 30897\nIGdpYW50cw== 30898\nIEV4cGxvcmVy 30899\nIENvbGxlY3Q= 30900\nYWxpdGlvbg== 30901\nIERlc3Rpbnk= 30902\nIGF1c2dl 30903\nIEVkdQ== 30904\nIENsbw== 30905\nIGVhcnJpbmdz 30906\nIFRyYWNr 30907\nIFJPUw== 30908\nIEJlbGxl 30909\nIHB1ZWRh 30910\nIGRheXRpbWU= 30911\nIHN1cHBsaWVy 30912\nIFNW 30913\nIEV4aGFsZQ== 30914\nIGdhbGVyYQ== 30915\nY291cnNl 30916\nIGNlbnRpbWV0ZXI= 30917\nIEJhc3Q= 30918\nbXVk 30919\nIHNhbmdhdA== 30920\nIFBoeXNpY2Fs 30921\nIHByaXZhdGVseQ== 30922\nIHRyYXRh 30923\nbHlubg== 30924\naWxsaQ== 30925\nIOuplOydtO2BrOyXhQ== 30926\nIGNyeXN0YWxs 30927\nIHBvZHM= 30928\n4bqjbg== 30929\naW5hdG9y 30930\nIFJlY29yZHM= 30931\nxJ9pbWl6 30932\naXNzZW1lbnQ= 30933\naGFyZQ== 30934\naGFkb3c= 30935\nIERL 30936\nIOyVjOqzoA== 30937\nIHd5bg== 30938\nIHJlcXVlc3Rpbmc= 30939\nIERvbm5h 30940\nIOyXtOyLrO2eiA== 30941\naW5lYQ== 30942\nIGV4ZXJ0 30943\nIER1bmNhbg== 30944\nINCy0LXRhw== 30945\nIEhhaA== 30946\n4KSC 30947\nIExpZg== 30948\nIEZpbmRpbmc= 30949\nIE5vdg== 30950\nINC30L3QsNC6 30951\nINC+0YQ= 30952\nIFF1w6g= 30953\nIHF1YXJ0ZXJiYWNr 30954\nINGE0LDQug== 30955\nIGJpcGFydGlzYW4= 30956\nxJ9pbg== 30957\nIG7DqWNlc3M= 30958\nIHJlZmVyZW5kdW0= 30959\nIGNvbXBpbGVy 30960\nIHByb2JhYmls 30961\n0LXQtNC4 30962\nIHRyYWRlcg== 30963\nIFJ1bQ== 30964\nZ2VtZQ== 30965\nIGRpbw== 30966\nIGLEmWR6aWVteQ== 30967\nIM+Azqw= 30968\n6r64 30969\n15XXmA== 30970\nIOCklQ== 30971\nINCx0LvQsNCz 30972\nIHNjYWxw 30973\nIFBhdXNl 30974\nIGNhcHRpb24= 30975\nIGVuZGFuZ2Vy 30976\nIGVubGFy 30977\nIHJvdHRlbg== 30978\nIHdhaA== 30979\nIGR6aQ== 30980\nIEluc3RhbGw= 30981\nQXk= 30982\nIGNyZWFy 30983\n0LXQvdGC0LA= 30984\nIHdlaWdoaW5n 30985\nIGJ1dHRlcmZsaWVz 30986\nIEdhc3Q= 30987\naG9ybg== 30988\nd2Fyeg== 30989\nSUNFT1ZFUg== 30990\nINC90LDQudGC0Lg= 30991\nIGNvZWZmaWNpZW50cw== 30992\nIFNwZW5jZXI= 30993\nIEhpZ2hlcg== 30994\nIGNvd29yaw== 30995\nINC60L7RgtC+0YDQvtC1 30996\nIG1vbml0 30997\nIGR5c2Z1bmN0aW9u 30998\nINGB0YLQsNC90L7Qsg== 30999\nIHRvdXJuYW1lbnRz 31000\nIG95c3Rlcg== 31001\nQk4= 31002\nIHRydWQ= 31003\nc2xvdw== 31004\nIFBlbm55 31005\nIE9keXM= 31006\nw6Zy 31007\nIGZvdQ== 31008\nIGVuam95bWVudA== 31009\n0LDRgtGL 31010\nIHd5Z2zEhWRh 31011\n0LDQu9GM0L3QsNGP 31012\nIFByb3RlY3Q= 31013\nIG1veQ== 31014\nIGNsYXc= 31015\nIHN1c3BpY2lvbg== 31016\nIHNhY3JpZmljZWQ= 31017\nIGdvc3Rv 31018\nQmln 31019\nIGFnZ3Jlc3NpdmVseQ== 31020\nIHZvcm5l 31021\nIGJsYW1lZA== 31022\nIFNlaHI= 31023\n16TXqA== 31024\nY2l0bw== 31025\nIHNlYWxz 31026\nIG11amVy 31027\nIFdlaXJk 31028\nIGZvcmVucw== 31029\nIGNvbnRyaWJ1dGVz 31030\nZXN0cmE= 31031\nIHBvZw== 31032\nTE9M 31033\nIGhhY2VybG8= 31034\n0L7RgtGM 31035\nZmljdGlvbg== 31036\nNzk= 31037\nzrvOvw== 31038\nINGC0L7QsQ== 31039\nIEdT 31040\nIENsYXJh 31041\naXRleg== 31042\nIGFkdm9jYXRpbmc= 31043\nIO2UhOs= 31044\nc3VuZw== 31045\nIHZlcnRpY2Vz 31046\nIG5hdmlnYXRpbmc= 31047\nIGV1cm9ww6k= 31048\nIHNsb3dlZA== 31049\nIGZvcmVncm91bmQ= 31050\nIEluZHVzdHJpYWw= 31051\nIGFkb3Jl 31052\n7Iut 31053\nIGNyw6llcg== 31054\nY2huaXR0 31055\nIHVuYXdhcmU= 31056\nIGN1cmx5 31057\nZW50YXI= 31058\nIGxlcg== 31059\nIHByb2hpYml0ZWQ= 31060\nIEhlcm9lcw== 31061\nIFJlZWQ= 31062\ndWNh 31063\nIHNtb2s= 31064\nIGt1bm5h 31065\nemVpdGln 31066\naW1tZW4= 31067\nIEx1bg== 31068\nINCw0LHRgdC+0LvRjtGC 31069\nIGRlZ2xp 31070\nIHZpbGxhZ2Vycw== 31071\nIHByZXNldA== 31072\nemVwdA== 31073\ndWRz 31074\nIGVtaXQ= 31075\nIOuJ 31076\n64qU7KeA 31077\n0L3QsNC60L4= 31078\nIG9zw7Ni 31079\nIDE5Njk= 31080\nINCQ0YA= 31081\nIG1hbmNobWFs 31082\nIEJyb2Nr 31083\nIG1hbnRyYQ== 31084\nIFdJTA== 31085\nYmFjaA== 31086\naW7DpA== 31087\nZWxhcw== 31088\na2Vsbg== 31089\nIGRpc2NpcGxl 31090\nIHF1YWxj 31091\nIGRlaHlk 31092\n7J20652864qU 31093\nQWY= 31094\n7ISx7J20 31095\nUnlhbg== 31096\nIHB1cHBldA== 31097\nINC00YDRg9Cz0LjQtQ== 31098\nIHJ1ZA== 31099\nIHBlbmRpbmc= 31100\nUGx1cw== 31101\nIOyViuydhA== 31102\nIGLhu4s= 31103\nIFNlZ2E= 31104\nw6dl 31105\nIHByb2dyYW1tZXI= 31106\nYmxp 31107\nIHVubA== 31108\nIGVuc2xhdmVk 31109\nIHNvY2nDqXTDqQ== 31110\nxIFo 31111\nIGluaGVyaXRhbmNl 31112\nIEJhbmds 31113\nZXJtYWlk 31114\nIHByYWN0aXRpb25lcg== 31115\nIFN0YWxpbg== 31116\nIFVzZXI= 31117\nY2libGU= 31118\nIGNhcmRpYWM= 31119\nIEtvcmVhbnM= 31120\nIGR1bXBlZA== 31121\nINeU15nXlA== 31122\nw6Fpcw== 31123\nIGh5ZHJhdWxpYw== 31124\nb3VidGVkbHk= 31125\nIFBpdA== 31126\nIHBpY25pYw== 31127\nIGJlaMO2dmVy 31128\nINGB0LzQvtCz 31129\nIGJyYWtpbmc= 31130\ndXRhcg== 31131\nIOyEuOs= 31132\ndWJs 31133\nIMO8eg== 31134\nIG1hamVzdHk= 31135\nIGJlcnM= 31136\ndXRhYmxl 31137\nIGhvdHRlcg== 31138\n24zZhg== 31139\nIGJpYXNlcw== 31140\nIHN1YmplY3RlZA== 31141\nIG5hdWdodHk= 31142\nIGNpcmN1cw== 31143\nIEltbWVkaQ== 31144\nIFN0ZWZhbg== 31145\nIFRyaXBsZQ== 31146\nZW5r 31147\nIHdpdA== 31148\nIHJlY3ljbGU= 31149\nZW1pZQ== 31150\nZGF0ZWQ= 31151\nIHVubG9hZA== 31152\nIHBvcHVsYQ== 31153\nY2hpbg== 31154\nIHlpZWxkcw== 31155\nIGVuZ2xpc2g= 31156\nIEJvbm5pZQ== 31157\nIHNwaWRlcnM= 31158\nw4E= 31159\nIGVyb3Npb24= 31160\nIE5JQ0s= 31161\n0LjRj9GF 31162\nIGltcGFydA== 31163\nINC60L3QuA== 31164\nIHJlc29sdXRpb25z 31165\nIGxpdGhpdW0= 31166\nIGNvbnZlcmdlbmNl 31167\nIFRhcmE= 31168\nINC00LLQtQ== 31169\ndGhz 31170\nIENpbmR5 31171\nIERJRQ== 31172\nIGFzc3VyYW5jZQ== 31173\nINC+0L/QuNGB 31174\nIGJ1Y2tldHM= 31175\nIGN1ZXM= 31176\nIFF1aWV0 31177\nIHNpbWlsYXJpdHk= 31178\nIGZvdW5kYXRpb25hbA== 31179\nIE1pbmlzdA== 31180\nIHBpYW4= 31181\nIGNlbnRy 31182\nIG51bWI= 31183\nIG1vbmtz 31184\ndWpvdXJk 31185\nZW56aWU= 31186\nIHNrYXRlYm9hcmQ= 31187\nIGRsYXRlZ28= 31188\nINGB0L7Rgg== 31189\nIEFF 31190\nIG1hc3RlcnBpZWNl 31191\nIFNvbG9tb24= 31192\nIFJlZGRpdA== 31193\nIHJpb3Q= 31194\nYWJs 31195\nIEpheno= 31196\nIGVsZWN0cm9tYWduZXRpYw== 31197\nIGluc2VjdXJl 31198\nIENvbXBldA== 31199\nZ2VyaWVz 31200\n0L7QsdC+0LQ= 31201\noNeV 31202\n8J+S 31203\nIHNlbmF0b3Jz 31204\nIEJyaXNiYW5l 31205\nIEFsYg== 31206\ndXR0ZXJpbmc= 31207\nIEFsbG93 31208\nemVybw== 31209\nIHBhaQ== 31210\nINCQ0LvQtdC60YE= 31211\nIERpc3BsYXk= 31212\nIEJsYWRl 31213\nIEFwcHM= 31214\nIHDDpA== 31215\nINC00LXRgdGP 31216\nIHF1ZWxsYQ== 31217\nIEdhbw== 31218\n0LXQvdC90YvRhQ== 31219\nIHNwb2lsZXJz 31220\nIGdhbGxvbnM= 31221\nINmE2Yo= 31222\nIFppb24= 31223\nb25pZQ== 31224\ncmFndA== 31225\nIENoYW5k 31226\nIOuzkQ== 31227\nIGJsdW50 31228\nIHVzdQ== 31229\nIEthZA== 31230\ncmFrdA== 31231\nIGNpbmVtYXRpYw== 31232\nIGFtbXVuaXRpb24= 31233\ncmVuZQ== 31234\nIGZvdXJ0ZWVu 31235\nIENhcm4= 31236\nY3JpdA== 31237\nIHRlbnVyZQ== 31238\ndnU= 31239\nIHByaW5jaXBhbG1lbnRl 31240\nIGFsbGVlbg== 31241\nIGtvbXBsZXR0 31242\nIGTDvG55 31243\nSmFtZXM= 31244\nIHJlY2VwdG9y 31245\nIG9uZXNlbGY= 31246\nZ3VydQ== 31247\nIG1lcmNoYW50 31248\nbGluZXNz 31249\nIG92ZXJsb29rZWQ= 31250\nIGhhcm1vbmlj 31251\naWVzbw== 31252\n15XXng== 31253\nY29sbQ== 31254\nINC/0YDQvtC10LrRgg== 31255\nIEFkYQ== 31256\n2KfYsw== 31257\nVGlt 31258\nIHJlY3VycmluZw== 31259\nIHByb2NlZWRz 31260\nIFBhcnRpY3VsYXJseQ== 31261\nIERvd25sb2Fk 31262\nZXRyaWNhbA== 31263\nIG1hdHJpY2Vz 31264\nIHByb3llY3Rv 31265\nYW5jaWVz 31266\nIFVobQ== 31267\nIGNhdmVz 31268\nIOyWtOugpA== 31269\nIExlYWY= 31270\nINC+0LHRi9GH 31271\nIOydtOycoA== 31272\nRXVyb3Bl 31273\nIHTEhQ== 31274\nIHB1bHM= 31275\nIHRha2llZ28= 31276\n0J3QtQ== 31277\nR1U= 31278\nIGZvcnM= 31279\nz4HOsw== 31280\nIGZvdG9z 31281\nICkp 31282\nIOuppOs= 31283\nIGFxdWlsbw== 31284\nIEt1cmQ= 31285\n77iP 31286\ncHRpYw== 31287\nIERvcnQ= 31288\nIG1pc2VyeQ== 31289\nYXVzbw== 31290\nY2h1Y2tsaW5n 31291\nIFJpZGdl 31292\nIO2WiOyKteuLiOuLpA== 31293\nICoqKg== 31294\nIEhtbW0= 31295\nIGdlb2dyYXBoaWM= 31296\nIGFueXM= 31297\nIHRhbHZleg== 31298\nIHNrZWxldA== 31299\nIHNpZ25hdHVyZXM= 31300\nIGxpdGVycw== 31301\nkOuptA== 31302\nINGB0LLQvtC10LPQvg== 31303\nIHNraWluZw== 31304\nINCc0L7RgQ== 31305\nIGFkb3B0aW5n 31306\nIGhhZnQ= 31307\nIHN5bW1ldHJpYw== 31308\nIExpcXU= 31309\nIHRoeXJvaWQ= 31310\nIG1pc2lu 31311\nbHVkZQ== 31312\nIGh1bGw= 31313\nIFhE 31314\nIEd1c3Q= 31315\nemVpY2g= 31316\nIHZpYnJhdGlvbnM= 31317\nIGVzZW1w 31318\nINCy0YHRjg== 31319\nIFF1ZW0= 31320\nIMO8YnJpZw== 31321\nIFNrZQ== 31322\nIEx5bmNo 31323\ncm9vbXM= 31324\nYXJ0ZXQ= 31325\nZmVzdA== 31326\nIGZyw7xoZXI= 31327\nIGx1cmU= 31328\nIOyVjOyVhA== 31329\nIFdJTg== 31330\nIFJZQU4= 31331\nINC60L7RgtC+0YDRg9GO 31332\nIEthc2g= 31333\nINeU154= 31334\nIHNhZmVn 31335\nIEhhbGxlbHVqYWg= 31336\nINC00LLRg9GF 31337\nIHN0YXBsZQ== 31338\nIHNlZGltZW50 31339\nIEFjdHM= 31340\nIGJsYW1pbmc= 31341\nIG1haW5sYW5k 31342\nIHNwb3J0aW5n 31343\nIGRlY29yYXRpb25z 31344\nIGV4ZWN1dGluZw== 31345\nIHBhcmFu 31346\nIERvbGxhcg== 31347\nIHByb2plY3Rpb25z 31348\nIGNvbW1pc3Npb25lZA== 31349\nIGJvdXI= 31350\nw7Zt 31351\nIHN0ZWFtZWQ= 31352\nIOutmA== 31353\nIHBldHJvbA== 31354\nIGNlbHVsYXI= 31355\nIEh1bmdhcnk= 31356\nIHJlbnRlZA== 31357\nINCy0LDRgNC4 31358\nYmJpZQ== 31359\nIHPDqWN1cg== 31360\nw7xsbA== 31361\nIHN3aW5ncw== 31362\nYmV0d2Vlbg== 31363\nINC40YI= 31364\nZXN0cm8= 31365\nIG5pZW1hbmQ= 31366\nIOyCvA== 31367\nIFBhcmRvbg== 31368\nZXNzZXM= 31369\nIE1JRA== 31370\nIGNlbnRyYWxpemVk 31371\nIEFsaWVu 31372\nY3Vsb3M= 31373\nIGNyaXNl 31374\nIGNsYXNzZQ== 31375\nYmVpdGV0 31376\nacSfaQ== 31377\nIHdoYWxlcw== 31378\nIHBlcmltZXRlcg== 31379\nIHR5aW5n 31380\nIHN0cm9ueQ== 31381\nIGxpa2V3aXNl 31382\nIFB1bmNo 31383\nRGE= 31384\nIEJhcHRpc3Q= 31385\nIHNvcnRpbmc= 31386\nIGl2 31387\nIO2VqQ== 31388\nIHJlaGFi 31389\nIGV0YQ== 31390\ncml2ZXI= 31391\nIHNhaQ== 31392\nb2R1cw== 31393\nIGVzc2F5ZXI= 31394\nIHR1cnRsZXM= 31395\nIEhhenJhdA== 31396\nIGZhYnJpY3M= 31397\nIGNhdml0eQ== 31398\nIHBvbmlld2HFvA== 31399\nIHNjaGxlY2h0 31400\nIHNhbHNh 31401\nxZ9la2vDvHI= 31402\nIHNlYXRpbmc= 31403\nIGVjb25vbWlzdHM= 31404\nIG1hbmc= 31405\nIHNlZ3VpbnRl 31406\nIHJhbmc= 31407\nIHJhdGlvcw== 31408\nIGNvbnN0ZWxs 31409\nIGxvbmd0ZW1wcw== 31410\ndWF0aW5n 31411\nIHNwb2lsZWQ= 31412\nIHJlY2lwaWVudHM= 31413\nIHNuaXBlcg== 31414\n7Iq164uI6rmM 31415\nIHdw 31416\nIExJTktF 31417\nIGZsYXJl 31418\nIEFkcmk= 31419\nw7Fhcw== 31420\nIGJhY2ts 31421\nbcOkw58= 31422\nIEJlbmQ= 31423\nIHdvcmtsb2Fkcw== 31424\nINGB0YPQvw== 31425\nIDE5NzU= 31426\n0LjQvNGB0Y8= 31427\n0LDQvdC1 31428\nINC80L7QvQ== 31429\nIGFzcGlyYXRpb25z 31430\nIEFlcg== 31431\nINCz0L7QstC+0YDQuNGC0Yw= 31432\nIFFpYW4= 31433\nIGNvbXByb21pc2Vk 31434\nIHlvbGs= 31435\n0LvQsNGB0YI= 31436\nIGhlbWVu 31437\ncm92ZQ== 31438\nZGVucw== 31439\nINC60L7QvNC80LXQvdGC 31440\nIC0tLQ== 31441\nIGZsdW9yZXM= 31442\n0L3QvtGB 31443\nIExpdmVycG9vbA== 31444\nINGB0L7QsdC+0Lk= 31445\nIFp3ZQ== 31446\nIGx1bWlu 31447\nIE9H 31448\n4bg= 31449\naG9sbQ== 31450\ncHJvZml0cw== 31451\nU04= 31452\nIHByb3BvcnRpb25z 31453\nIG1pY2E= 31454\nIEJvaA== 31455\nIEF0bGFz 31456\nIHVuc3VyZQ== 31457\nIHRvdXJpbmc= 31458\nIG5pZWQ= 31459\nIHTEmQ== 31460\nIGltcGVyYXRpdmU= 31461\nIGRlbWVr 31462\nIFNoZXJpZmY= 31463\ncmFuY2U= 31464\nIGhvbWVsYW5k 31465\nIEhhaWw= 31466\nIEdhbno= 31467\neW1t 31468\nTW9u 31469\ndmlkYQ== 31470\nIGRlc2Fycm9sbA== 31471\nIGludHJpZ3Vpbmc= 31472\nIEh1Z28= 31473\n6aw= 31474\n0LDRhg== 31475\nIFdpxJlj 31476\nYXR0ZWQ= 31477\nIOyVhOuLiOqzoA== 31478\nIFZhcmk= 31479\nw6Fk 31480\nIHN1cnJlYWw= 31481\nIGRpc3Bhcml0aWVz 31482\nIG3Dsw== 31483\ndWxsZW4= 31484\nIOyeiOuLpOqzoA== 31485\nINC/0L7QttCw0LvRg9C50YHRgtCw 31486\nIG1haW5z 31487\nIGVqZWN0 31488\nIG1ldGhhbmU= 31489\nIG1hcmdpbmFsaXplZA== 31490\nIGNoaWxsaQ== 31491\ncsOocw== 31492\nIHllbQ== 31493\nIENodW4= 31494\nIGRlYnRz 31495\nIGRvd25sb2FkaW5n 31496\nIEF0aGVucw== 31497\naXNpZXJ1bmc= 31498\ncnlu 31499\nIHRla24= 31500\nIFF1aW5kaQ== 31501\nIHRhcmFm 31502\nIGjDqQ== 31503\nIGNvbnNjaW91c2x5 31504\nIGZpeGVz 31505\ndWNrbGU= 31506\nbWF5xLFu 31507\nIGZyZWk= 31508\nIHNwYQ== 31509\nIOynhO2WiQ== 31510\nINin2YTYsA== 31511\nINGD0Lo= 31512\nbGV0dA== 31513\nIG9sbXXFnw== 31514\nIGNoZWVzeQ== 31515\n4Liy4LiB 31516\nbmFpcmU= 31517\nIHdpZGVu 31518\nIGxpZW4= 31519\nIGVzY2FwaW5n 31520\naWdncw== 31521\nIEJsaWNr 31522\nY8SF 31523\nIOyEnOs= 31524\nINeU16E= 31525\nINCy0L/QtdGA 31526\nb3Bob25l 31527\naWVsbA== 31528\nIFNVQlNDUkk= 31529\nIGxpb25z 31530\nIOq3uOqygw== 31531\nIGluc3BpcmVz 31532\nIGd1YXJhbnRlZXM= 31533\nIGNvbWXDp2E= 31534\nIEdyb3dpbmc= 31535\nIG5lZ2xpZw== 31536\nIEZyYW5rZg== 31537\nIGdlZ2ViZW4= 31538\nIMSR4bqndQ== 31539\nIGVuZGxpY2g= 31540\nIOyNqA== 31541\nIFRU 31542\nIExpdGg= 31543\nz4DOsQ== 31544\nYXN0ZXJu 31545\nIEF6ZXI= 31546\nIGx1bmFy 31547\naGlj 31548\nINC90LDRgNC+0LQ= 31549\nIG5lbmh1bQ== 31550\nIFNhbHZhZG9y 31551\nIFByb2dyZXNz 31552\nIHByaXZpbGVnZXM= 31553\nIOuPmeyViA== 31554\nIGFudGFnb24= 31555\nIEltcGY= 31556\nIGRlc2N1Yg== 31557\nIExlaQ== 31558\nIOyDiOuhnA== 31559\n0YfQtQ== 31560\nIGTDs2xhcmVz 31561\nIE1lZ2hhbg== 31562\nIFdpcmU= 31563\ndG9v 31564\nYXlpbmc= 31565\ndXNj 31566\nIHR1ZA== 31567\nIGFwcGVhbHM= 31568\nZWR1Yw== 31569\nIHBhbmU= 31570\nIGpp 31571\nIGRlY2tz 31572\nIEFsdGVy 31573\n7ISk 31574\nIHByb2R1Y3Rpb25z 31575\nIFdJTExJQU0= 31576\nIGltcGxpZWQ= 31577\nIGZ1bGZpbGxtZW50 31578\nIEFhaA== 31579\nIHNhamE= 31580\neHVz 31581\nIM6azrHOuQ== 31582\nw6Bz 31583\ndWNjaA== 31584\n0L7QutC+ 31585\nIERpc2NvcmQ= 31586\nIFNZ 31587\nanNr 31588\nIFdhbGxhY2U= 31589\ndW5jdGlvbg== 31590\nRGFuaWVs 31591\nIGvDtnQ= 31592\naWphaA== 31593\nIG1hcmNoZQ== 31594\nIGRpc2dy 31595\nIG11bmdraW4= 31596\nIGFsbWE= 31597\ns7U= 31598\nIGV4dGVuc2l2ZWx5 31599\nIEZsb3Jlbg== 31600\nIEFsbGlzb24= 31601\n2YrZhQ== 31602\nIGp1dmVu 31603\nIFJlbmFpc3NhbmNl 31604\nIGZ1bmRyYWlzaW5n 31605\nIENoYW9z 31606\nIHBhcmFseQ== 31607\nIG5hcnJhdG9y 31608\nIGVjb3N5c3RlbXM= 31609\nQXNo 31610\nIG1pdGlnYXRpb24= 31611\nIEF1am91cmQ= 31612\nIElkZWU= 31613\nISw= 31614\nIMK9 31615\nIGxhbmRsb3Jk 31616\nIGRlZmVjdHM= 31617\nIGFjcmU= 31618\ndWxzaXZl 31619\nIGFsZ2Fl 31620\ncGVr 31621\nIGVtYmE= 31622\nIFJvYw== 31623\na3NvbQ== 31624\nw6RjaGU= 31625\nIGxldWs= 31626\nIGxldmVyYWdpbmc= 31627\nIOq3uOugh+yngA== 31628\nIFBhbG0= 31629\nIMOkdmVu 31630\nIGxpcw== 31631\nIEluc3A= 31632\nIFJpdGE= 31633\nIEFiYg== 31634\naXRobQ== 31635\nIHN1cGVydmlzaW9u 31636\nIHJldmlzaXQ= 31637\nIHBpxJk= 31638\nIGV1aA== 31639\nIGZhZGVz 31640\nIG1vdHRv 31641\n0LXQt9C2 31642\nIFNoaW0= 31643\nIHJlbGV2YW5jZQ== 31644\nIG9v 31645\nIG9zdGF0 31646\nbmljYQ== 31647\nIGNob2l4 31648\nIEZhY3VsdHk= 31649\nIOykkeyXkA== 31650\nIEFib3Zl 31651\nINC90LXQsdC+0LvRjNGI 31652\nIHNlcXVlbmNpbmc= 31653\nIG51dHJpZW50 31654\nIGNvbnF1ZXJlZA== 31655\nIGRpZ2VzdGl2ZQ== 31656\nIGJhY2tkcm9w 31657\nIExvcmk= 31658\nYWlsYWJsZQ== 31659\nR2FtZQ== 31660\nIG5lZ2xlY3RlZA== 31661\nb21vcnBo 31662\naWxsYWg= 31663\nIGtuZQ== 31664\nIHNpaXTDpA== 31665\nIHdvcmtzcGFjZQ== 31666\nIFZlbmljZQ== 31667\nIEtuZQ== 31668\n0YnQvg== 31669\nhYA= 31670\nIEhhc3M= 31671\nIHZpdGE= 31672\nnbzrqbQ= 31673\nIGxheXM= 31674\nw6puY2lhcw== 31675\nw6lyaWNh 31676\nIExs 31677\nIENvY2E= 31678\nIFdIWQ== 31679\nIHJvdXRpbmc= 31680\nIHBlcm1pc3Npb25z 31681\nIGRpbmdz 31682\ncHJlbmQ= 31683\ncHJvZ3JhbQ== 31684\nIGNyb2NvZA== 31685\nYnJhbA== 31686\nQUFBQUFBQUE= 31687\nYWdpdA== 31688\nIE7DpA== 31689\nIGdla29tbWVu 31690\nYXR0ZW4= 31691\nIHJlZmVyZW5jZWQ= 31692\nIHBhaXJpbmc= 31693\nIFBhcnRuZXI= 31694\nIENvcm9uYXZpcnVz 31695\n0ZbRgQ== 31696\nINeU15M= 31697\nIGVzcGVjw61maWM= 31698\nYXJzaQ== 31699\ncXVlbGxl 31700\nIHNwb250YW5lb3Vz 31701\nIOqyg+ydhA== 31702\nINCf0L7RgdC70LU= 31703\nINin2YTYrw== 31704\nIFNob3V0 31705\nINC90LDQuw== 31706\nIGRpc2d1aXNl 31707\nIEpvcmQ= 31708\nIHdlZQ== 31709\nIG1pZWpzYw== 31710\nIHNlcnVt 31711\nIHBsYWlzaXI= 31712\nIGNyZWRpYmxl 31713\nIGLDpQ== 31714\nIEFK 31715\nbWFyZXM= 31716\nIHJvZHM= 31717\nIGVyYW4= 31718\nIHDDpMOk 31719\nIFVB 31720\nIFVua25vd24= 31721\nINmE2YU= 31722\nIFJhYmJp 31723\nIGxhYXQ= 31724\nIGhhaXJzdHlsZQ== 31725\nINi6 31726\nIGNhY2g= 31727\nIFdyaXRpbmc= 31728\n0L7Rh9C60Lg= 31729\nYWJhZA== 31730\nIHN0cmFpZ2h0ZW4= 31731\nLS0i 31732\nd2lmZQ== 31733\nIGhvdHRlc3Q= 31734\nIHB1bnlh 31735\nIEZhc2hpb24= 31736\nZ3JpZmY= 31737\nIFFS 31738\nb3RjaA== 31739\nINCc0L7QttC10YI= 31740\nQ2xvdWQ= 31741\nIFN0cmlrZQ== 31742\nIEhlaW4= 31743\nIGxlaQ== 31744\nIEZsb3c= 31745\nd2Vncw== 31746\nIGhhYnI= 31747\nbmFobWU= 31748\nzIE= 31749\nIHBsZWFzaW5n 31750\nb3BwaW5n 31751\nIOq1rOuPhQ== 31752\nIGRyYW4= 31753\nIGJhbmdz 31754\nIDc5 31755\nIHNrZXQ= 31756\nIGNhdmFs 31757\nIE1hY3Jvbg== 31758\nIHdlaWdodGVk 31759\nIG11dGVk 31760\nIG51ZXN0cmFz 31761\nRUVQ 31762\nIG1hdGhlbWF0aWM= 31763\nIE1SSQ== 31764\nYWd1cw== 31765\nIHRoZXJhcGllcw== 31766\nzrjOtQ== 31767\nIHVucGw= 31768\nIGNvbW1lbmNlcg== 31769\nZnVsbA== 31770\nIHRvd2Vscw== 31771\nIHBydWU= 31772\nIGxpY2Vuc2Vz 31773\n15vXldec 31774\nINCf0L7Rh9C10LzRgw== 31775\nIHBvaW50bGVzcw== 31776\nQnll 31777\nIGVsaWdpYmlsaXR5 31778\nIHNjcmFwZQ== 31779\nIGFidXNpdmU= 31780\nIE1hbnQ= 31781\nIGpldW5lcw== 31782\ndGFs 31783\nIFByaW5jaXA= 31784\nIE9ydGhvZG94 31785\nIG1lbG9k 31786\nINC80LDRgtC10YDQuA== 31787\nIHByb3NlY3V0b3I= 31788\nIG9waW9pZA== 31789\nINGD0LLQtdGA 31790\nIEJlZW4= 31791\nIOygkeyihQ== 31792\nIGR5bmFzdHk= 31793\nIGFqdWRh 31794\nIGVudHJlZw== 31795\nIHdlaWdoZWQ= 31796\nIGV1cmU= 31797\nIEJlbQ== 31798\nIGFibm9ybWFs 31799\nODI= 31800\nIEpS 31801\nIEFrdA== 31802\nIEJyaQ== 31803\nw7p0 31804\nIHN0YWdu 31805\nISo= 31806\nIHdlZ2Vu 31807\nIGxlYWtpbmc= 31808\nIFdvcmRz 31809\nIE1hdQ== 31810\nIHZ1ZQ== 31811\nIExpYW0= 31812\n0LDQvdC40LXQvA== 31813\nIGNsaW5pY2lhbnM= 31814\nIFB1bXA= 31815\nIGbDtnJzdA== 31816\nPy4uLg== 31817\nIGF1dG9tb3RpdmU= 31818\nIE93ZW4= 31819\nenVzYWdlbg== 31820\nIEh1bmRyZWQ= 31821\nIGRlY2VudHJhbGl6ZWQ= 31822\nIGJ1bGJz 31823\nINec15s= 31824\nIHByb3ZpbmNlcw== 31825\nIE1pbGFu 31826\nODE= 31827\na2Fz 31828\nIOuTow== 31829\nIGZvcsOnYQ== 31830\nIHJpZ2h0bHk= 31831\ncsSF 31832\nIHZlbnVlcw== 31833\nIHdhaQ== 31834\nIHByZWRpY3Rpbmc= 31835\nIFdpRmk= 31836\nIOq2geq4iA== 31837\n2LHZiA== 31838\nINeU15Y= 31839\nY2VudHVyeQ== 31840\nIGdyYWR1YWw= 31841\nIFByb2JsZW1l 31842\nIOyXhQ== 31843\nIGNvcGluZw== 31844\nIEJydXM= 31845\nIHBlYW51dHM= 31846\naXJ0c2NoYWZ0 31847\nINC30LDQuw== 31848\nIFRyb3k= 31849\nIHNwZXJt 31850\nIE1pdGFy 31851\nIFTDvHJraXll 31852\nZ3JhbmQ= 31853\npq0= 31854\nINee16E= 31855\nIHBhbnM= 31856\nIEtub3dsZWRnZQ== 31857\nYmVybHk= 31858\nINCV0LPQvg== 31859\nIGRhbmNlZA== 31860\nIEZyb3N0 31861\nIEJ1cmc= 31862\nIGJpdGluZw== 31863\n7KCV7J2E 31864\nbWVhbA== 31865\nIGhlcm9pYw== 31866\nIG1vdGhlcmJvYXJk 31867\nIExpY2h0 31868\nbGxhbg== 31869\n0LDQudC9 31870\nINGA0Y/QtA== 31871\nIOC5gOC4 31872\nb25lbg== 31873\naXJpZQ== 31874\nQXJ0 31875\ncmFuZw== 31876\nzr3Otw== 31877\nIG5ld2Jvcm4= 31878\nIGFtaXM= 31879\nINin2YjYsQ== 31880\nIHNvcGhvbQ== 31881\nIENhcmVmdWw= 31882\nIHByb3NwZWN0cw== 31883\nZW5zZW4= 31884\nIHRocmlsbA== 31885\nIFZp4buHdA== 31886\nQWRhbQ== 31887\ncml0aW9u 31888\nZW50cmlj 31889\ndWRlbg== 31890\nIGNlcnRpZmljYXRlcw== 31891\nIGFzaGVz 31892\ncGxheWluZw== 31893\nIHNhZGVjZQ== 31894\nIG9zdA== 31895\nIGFpcnBsYW5lcw== 31896\n0YDQvtC6 31897\nb25lcg== 31898\nIG1hZ25lc2l1bQ== 31899\nIGdvZGRhbW4= 31900\nIDE5NzI= 31901\nIFNjaHVsZQ== 31902\nIHRlbWF0 31903\nIHBhcnRvdXQ= 31904\n4K+C 31905\nIGludmU= 31906\nIFNjaWVudGlzdHM= 31907\nIEh1ZHNvbg== 31908\nd2lubmluZw== 31909\nY2Vrc2lu 31910\nIGNvbmdyZXNzaW9uYWw= 31911\nb3J1 31912\nIHJvcGVz 31913\n0LLQtdC0 31914\nIG1hZHJl 31915\nIGZlcnJ5 31916\nIENvaGVu 31917\nIFByZWQ= 31918\nIHZhZ3k= 31919\nINCx0LXRgdC/ 31920\nIG11bHRpbQ== 31921\nIGRyYWluYWdl 31922\nIHNpbXVsYXRvcg== 31923\nZ2lnZ2xlcw== 31924\nIFN0YWRpdW0= 31925\n0L7QsdGJ 31926\nIG5vdGljZXM= 31927\nIGNyYXdsaW5n 31928\nIGdyb3VwZQ== 31929\nIGt0b8Wb 31930\nIFlvZ2E= 31931\nIG1lZGlkYQ== 31932\nINGF0LLQsNGC 31933\nIExpdGU= 31934\nIHJhdg== 31935\nb3JhbWE= 31936\nIGRpc2NvcmQ= 31937\nIERJUkU= 31938\nIHRlaA== 31939\nIE51cnM= 31940\nIHBpdGNoZWQ= 31941\nIGJhcmtpbmc= 31942\nIENva2U= 31943\nd2lhZA== 31944\nIHBvcHVsYXRlZA== 31945\ncGVsbGVk 31946\nINCx0L7Qsw== 31947\nIHBld25v 31948\nIEN1YmU= 31949\nIHJlY3J1aXRlZA== 31950\nIENhcmE= 31951\nxLHEn8SxbsSx 31952\naW1hdGVk 31953\nINGI0LrQvtC7 31954\naWNpb25hbA== 31955\nINC/0YDQvtGE 31956\nIGNvbnRhbWluYXRpb24= 31957\nIMO6bHRpbW9z 31958\nIGZlYXJmdWw= 31959\nIGVsZXBoYW50cw== 31960\ndXNp 31961\nIGlUdW5lcw== 31962\nIFN3YW1p 31963\n6rw= 31964\nIOyEpOuqhQ== 31965\nIFJpY2hhcmRz 31966\nIG1hZ25ldHM= 31967\nIFJpY2h0dW5n 31968\nIExlZ2lvbg== 31969\nIGtpdHR5 31970\nIGtpc3NlZA== 31971\nIHdhdGVyaW5n 31972\nIGNvbm8= 31973\nIFBhbGVzdGluZQ== 31974\naWRpcg== 31975\nIG1hemU= 31976\nIGZsdWlkcw== 31977\nIFByb2R1Y2Vy 31978\nIEtyc25h 31979\nbGFm 31980\nINeQ15U= 31981\nIG1pZXN6 31982\nIFhpbmc= 31983\nb2ludGVk 31984\nc2Vpbg== 31985\nIEZ1aw== 31986\nIERlcHJlc3Npb24= 31987\nIER1dHk= 31988\nIFBhbnRoZXI= 31989\nIHN1bmQ= 31990\nIHJlZmVyZQ== 31991\nIGV4Y2x1c2lvbg== 31992\nIG5hdmFs 31993\nIFdpbnN0b24= 31994\nIHNsb2dhbg== 31995\nIGh5cG90aGV0aWNhbA== 31996\nIGVsZXZhdGU= 31997\n66C5 31998\nIGNhYmXDp2E= 31999\nIEdlc3VuZA== 32000\nbWV0ZXI= 32001\nIOyVhOuLiOuptA== 32002\nIGNsb3VkeQ== 32003\n4oCmPw== 32004\nIFNjaHJpdHQ= 32005\nIEpT 32006\n7I0= 32007\nIFNwcmluZ3M= 32008\nIEJhdHRlcg== 32009\nt7A= 32010\nIHRhaWxvcg== 32011\nIFBUU0Q= 32012\nIEdlbnQ= 32013\nIGJhxJ8= 32014\nIHNwYXR1bGE= 32015\nIGNyYXk= 32016\nIExlZ2lzbA== 32017\nIHPDug== 32018\nIGxldmU= 32019\n4Liy4Lih 32020\nIGVyYWQ= 32021\nIGRvbmc= 32022\nIGRlcm0= 32023\nIEJhbmtz 32024\naWNobw== 32025\nIEZyYW56 32026\ncmF2ZWw= 32027\n0L7Qu9C+ 32028\nIGZsdXRl 32029\nIEVr 32030\nIGpveWZ1bA== 32031\nIGNoYXNlZA== 32032\nIExhcmdl 32033\nT3Zlcg== 32034\nIGVudHJlcHJlbmV1cmlhbA== 32035\nIGNvbnNpZGVycw== 32036\n0YPQtdC8 32037\nb3Bh 32038\nIGRvcm1pcg== 32039\nIEVsZW1lbnRhcnk= 32040\nIHByenlwYWQ= 32041\n0YPRgdC60LA= 32042\nINC+0YfQtdGA 32043\ndWdlbmU= 32044\nIHRlbmlkbw== 32045\nIGx1Z2FyZXM= 32046\n66U= 32047\nINGH0LDRgdGC 32048\nIHNhbw== 32049\nIGJyYWlk 32050\nIFZlcmU= 32051\nIFJlaWNo 32052\nIFBvc3M= 32053\nIGluYW4= 32054\nd2FuZA== 32055\ncmVm 32056\nIG1vbnRyZXI= 32057\nIDE5ODE= 32058\nYXPEsW5kYQ== 32059\nIGNocm9tZQ== 32060\nIFRyaW5pdHk= 32061\nIGV4cGxvaXRhdGlvbg== 32062\nIFNlbnNl 32063\nIENNUw== 32064\nIE5vYmxl 32065\nIOyEoO2DnQ== 32066\nIHN3ZWxsaW5n 32067\nZWxlY3Ryb25pYw== 32068\nXT8= 32069\nIGJydXNoaW5n 32070\nIGxpcXVpZGl0eQ== 32071\nIEhvb2s= 32072\nIENvbm5vcg== 32073\nIEFsdW0= 32074\nIGd1Y2tlbg== 32075\nc3VpdGU= 32076\nIHdpZWxl 32077\nIGJhcnJlbHM= 32078\nIFJlZ2Vs 32079\nIE1lbnQ= 32080\nIFRyaXA= 32081\nIEJydXNo 32082\nIEVyaWs= 32083\ndXJhdGU= 32084\nyZly 32085\nIEN5cg== 32086\nb3VibGU= 32087\nIEJlY2Nh 32088\nIHBhc3N3b3Jkcw== 32089\nxbE= 32090\nYm9yZw== 32091\nIHZlbmRv 32092\nIENsYXVz 32093\nIEZheg== 32094\naW5kZXN0 32095\nIGRlY2Vhc2Vk 32096\nIGNvbXBhcmlzb25z 32097\nIExDRA== 32098\nIFBvcms= 32099\nIGV2ZW50dWFs 32100\nIHBhdHJlb24= 32101\nIGluYWJpbGl0eQ== 32102\nIGV4dGluY3Rpb24= 32103\nIOyii+yVhO2VmOuKlA== 32104\nINGB0L7RgQ== 32105\nYWp1 32106\nINeR15DX 32107\nIHNvZm9ydA== 32108\nIGRlc3RpbmVk 32109\nIFJpbg== 32110\nIG1vdXRocw== 32111\nIE5hdMO8cmxpY2g= 32112\nIHByZXNlcnZpbmc= 32113\nIGxpbXA= 32114\nb2N1c2Vk 32115\n0LjQvdCz 32116\nIGV4cG9zaW5n 32117\nIM6+ 32118\n640= 32119\nbGF1Z2g= 32120\nIGhpc3M= 32121\nIGluZGll 32122\nIGRldGFs 32123\n0YDQsNCy0YHRgtCy 32124\nIHRyw6pu 32125\nIG9nbmk= 32126\nIHNpbXBsZW1lbnRl 32127\nIDE5Nzg= 32128\nIGdvbw== 32129\nIDE5Njc= 32130\nIGdlbnVn 32131\naMO2 32132\nIGhpc3TDsw== 32133\nIGxvYnN0ZXI= 32134\nY2VuZG8= 32135\nIHRlaWw= 32136\nIGFsbGV2aQ== 32137\nMDAwMA== 32138\nT0xE 32139\nIHBlc29z 32140\nIGJvbnVzZXM= 32141\nIGFtaQ== 32142\nIHJldml2YWw= 32143\nIEhvcnNl 32144\nIHNhY2s= 32145\nVGFsaw== 32146\nIG11bGhlcg== 32147\nINC/0L7RgdGC0L7Rj9C9 32148\nIEhvb2Q= 32149\nSHVo 32150\nIOu2gQ== 32151\nIGh5dW5n 32152\nIE1lZXRpbmc= 32153\nIGltcG9ydGE= 32154\nIOywvuyVhA== 32155\nIFZlcm4= 32156\nIHN0cmlwcGVk 32157\nIHJlZnVzZXM= 32158\nIHF1YWxpZmljYXRpb25z 32159\nb3Bs 32160\ngOuPhA== 32161\naXjDrQ== 32162\nIGRpYWI= 32163\naXRpbWU= 32164\nZmxvd3M= 32165\nIGluYWM= 32166\nIEdvbmc= 32167\nIG1lYW5pbmdsZXNz 32168\nIGNvdXJhZ2VvdXM= 32169\nIG1pY3JvYmk= 32170\nYXp5 32171\naGlzdA== 32172\nIHZvbHVudGVlcmluZw== 32173\nVklF 32174\nIHZpb2xhdGVk 32175\nIHN5bXBhdGh5 32176\nIEVkaXQ= 32177\nZWxlY3RyaWM= 32178\ncHJvZHVjdA== 32179\nIHBhbmRlbWlh 32180\nIGdlb21ldHJpYw== 32181\nIENvbnZlcnM= 32182\nZ3Jl 32183\nIGdsdXQ= 32184\naXN0ZWQ= 32185\nINin2YTZgw== 32186\nIENoYWlu 32187\nIFByZXNlbnQ= 32188\nIFlpbg== 32189\nINGB0L7Qsw== 32190\nIFZsb2c= 32191\nIOyWtOuouA== 32192\nIGRvbm4= 32193\nIGhpdGNo 32194\ndWNraW5n 32195\nd2FsZA== 32196\ncmlzaw== 32197\nIGhhcmk= 32198\nIEtlbnM= 32199\nIElkb2w= 32200\nINCy0L3QuNC80LDQvdC40LU= 32201\nIHRvZGQ= 32202\nIHNtYXNoZWQ= 32203\nIGludmFyaQ== 32204\nINC60L7QvdGC0YA= 32205\nIGF1dGlzdGlj 32206\n7J6l64uY 32207\nUmVz 32208\n0LTRiw== 32209\nY2hhdQ== 32210\nIHNlbHY= 32211\nIGjDpHR0ZW4= 32212\n4KS/ 32213\nIGV4cGVjdHM= 32214\nz4HOtw== 32215\nIGHDp8Sxaw== 32216\nIEhUVFA= 32217\nbGXFnw== 32218\nIHN3ZWVwaW5n 32219\nIEJldGE= 32220\nIGNvdW50ZXJwYXJ0cw== 32221\nYWJpbGU= 32222\nIFNpbXM= 32223\nQ3M= 32224\nIHJlcGFy 32225\nc3F1 32226\nIHByb3ZpbmNpYWw= 32227\nIHNoYXJlaG9sZGVycw== 32228\nIHJ1bnRlcg== 32229\nIGdlZGFjaHQ= 32230\nIFRlZW4= 32231\nIGdyYW5kcw== 32232\nYWdsZXM= 32233\nIHJvY2t5 32234\ndmVucw== 32235\nIHJpdmFscw== 32236\ndW5hbA== 32237\nIHJlYWN0cw== 32238\n66k= 32239\nIG1lcmN1cnk= 32240\nIEx1aWdp 32241\nINC+0LM= 32242\nIEpVU1Q= 32243\nIGxvZA== 32244\nIGNvcnRleA== 32245\nd2ln 32246\nIGxha2g= 32247\n7KSR7JeQ 32248\nIFZpYw== 32249\nIE11bmQ= 32250\nIG1hcHBlZA== 32251\nIERlbGw= 32252\nIERydWNr 32253\nIGxpZmVz 32254\n0LDQu9GM0L3QvtC1 32255\naXZpZHVhbA== 32256\nYWTEsW0= 32257\nIGF0cmF2 32258\nIEZsdWc= 32259\nIEtsZWlu 32260\n6rGw7JW8 32261\n4Lir4LiZ 32262\nIGFwcGxp 32263\n4K6+Pw== 32264\nw7x5b3J1bQ== 32265\nINC40L3RgtC10YDQtdGB0L3Qvg== 32266\nIGRpc2luZmVjdA== 32267\nPi0= 32268\nIGNoYW1wYWduZQ== 32269\nIGtsYQ== 32270\nb3BlcnM= 32271\nVHJhbnM= 32272\nIERlc2VydA== 32273\nIGN1bHRpdmF0ZQ== 32274\nIEZ1Y2tpbmc= 32275\naWRlbGl0eQ== 32276\nINGC0LDQvQ== 32277\nIGluY3Vi 32278\nIHRlbXU= 32279\nIGxlYXJuZXI= 32280\nZm91bmRlcg== 32281\nIFN5bA== 32282\nIGZhdG8= 32283\nemllcg== 32284\nIOyXhuydtA== 32285\nIOyIqA== 32286\nIHBzeWNobw== 32287\nINGC0LXQu9C10YQ= 32288\nIHJlZ2FyZGU= 32289\nIHJlcHJlc2VudGF0aW9ucw== 32290\nIGxpdGlnYXRpb24= 32291\nIHNwYW5u 32292\ndWx0cw== 32293\nYmlvcg== 32294\nIFN1cnZleQ== 32295\nIExFRHM= 32296\nIHRyw6Q= 32297\nIGzDqm4= 32298\nIGFudGlveGlk 32299\n0LXRgNC+0Lw= 32300\nIGluZHVjdGlvbg== 32301\nIGZvb2xlZA== 32302\nw6R0emxpY2g= 32303\nINCz0L7QstC+0YDRj9GC 32304\nIEZhY3Q= 32305\ndW1iYWk= 32306\nIHdpZ2dsZQ== 32307\nTk9VTg== 32308\nIGTDqXZlbG9wcA== 32309\nIENsYXJv 32310\nIOy4 32311\n66w= 32312\nIGFjY3VtdWxhdGU= 32313\nIG1haW50YWlucw== 32314\n64Q= 32315\nIEZpZ2h0ZXI= 32316\n7Yag 32317\nIG1hdGlu 32318\nIGNvdXBvbg== 32319\nIHN0dW50 32320\nIGRlYnV0ZWQ= 32321\nIHByYWc= 32322\n0LjQstCw0LXQvA== 32323\nNzM= 32324\nIGV4cHJlcw== 32325\nIOyYpOu5oA== 32326\nINC/0LXRgNGB0L7QvQ== 32327\nIGNhbGN1bHVz 32328\nIGFicnVwdA== 32329\nIEluc3BlY3Rvcg== 32330\nb3VydA== 32331\nxbpuaWVq 32332\naW50ZW5zZQ== 32333\nQmE= 32334\nIGxvdW5nZQ== 32335\nIGFzdGhtYQ== 32336\nIEhpw6c= 32337\nqrs= 32338\nIGVkaXRvcmlhbA== 32339\nIHNlaXpl 32340\nIGvEsXI= 32341\nIG1vdXZl 32342\nIHRpZXJyYQ== 32343\nIHRlc3Rvc3Rlcm9uZQ== 32344\nIHJo 32345\nIEtpbmdzdG9u 32346\nRUxMRQ== 32347\nIFJlcHJlc2VudGF0aXZl 32348\nIDE5NzQ= 32349\nIGliYQ== 32350\nVHM= 32351\nIHNvcnRh 32352\nICg/KQ== 32353\nINiq2Yg= 32354\nIOuCtOugpA== 32355\nIGJla29tbXQ= 32356\nIHNwaXJpdHVhbGx5 32357\nIGRpc3RvcnRlZA== 32358\nTWFk 32359\nIHJlaW0= 32360\nw6FuaA== 32361\nIE90dG9tYW4= 32362\nIFJlbGln 32363\nIEVscw== 32364\nIHJldGFpbmVk 32365\nIExhdWdocw== 32366\nIFNBUw== 32367\nINC60L7Qu9C40YfQtdGB0YLQstC+ 32368\n15XXqteo 32369\nIGlubm92YXRl 32370\nIGtvcms= 32371\nINGA0LDRgdGB0LrQsNC30YvQsg== 32372\nb25kZXJl 32373\naXZp 32374\nYXll 32375\nb3VudHk= 32376\nINC/0L7Qu9GD0YfQsNC10YLRgdGP 32377\nIGJ1bnM= 32378\nIHnDvHpkZW4= 32379\nIHN1cmdlcmllcw== 32380\n2KPZhg== 32381\nIGJhbmtydXB0Y3k= 32382\nd2VsdA== 32383\nIHNpYW1v 32384\nIGRhcmtlc3Q= 32385\nIEhhbm4= 32386\nZ2dh 32387\nIGZvcm1hcw== 32388\nIERq 32389\nbmFtZWQ= 32390\nIHNoaWVsZHM= 32391\ndWVsbGVy 32392\nIEZldw== 32393\nIGxhY2U= 32394\nIGZ1cmlvdXM= 32395\nIFlV 32396\nIHNvY2lldGFs 32397\nIGp1ZGdlbWVudA== 32398\nIERvcw== 32399\nIGphYg== 32400\nbGF3cw== 32401\nIHJlaW52ZW50 32402\nIEthdGhlcmluZQ== 32403\nIENob2k= 32404\nYWRvd3M= 32405\nIHJhbnM= 32406\nb2Rlbg== 32407\nIE1pZHdlc3Q= 32408\nbsSxbg== 32409\nIGRlcG9ydA== 32410\nIERpcA== 32411\nIGF0ZW5jacOzbg== 32412\nIENvdXJ0bmV5 32413\naXZpZGFk 32414\nINqp24E= 32415\nIGVmZmljYWN5 32416\nIEJyb29rcw== 32417\nIHJlZmVycmFs 32418\nINC60L7QvdGG 32419\nIG1hbGljaW91cw== 32420\nIGtpcg== 32421\nIEdvZGRlc3M= 32422\nIGZ1bmt5 32423\nIGludGVyaW0= 32424\nIEvDtnJwZXI= 32425\nIOyWvOun 32426\na3Vy 32427\nINC60LvQuA== 32428\nIHRydWNz 32429\nZ2VzZXR6 32430\nIHp1Zw== 32431\nIEdsw7xjaw== 32432\nIE1pbnV0ZQ== 32433\nIHByZXN0aWdpb3Vz 32434\nIG5pZXo= 32435\nIGNvbmNlbnRyYXRpb25z 32436\n0LvQsNGB0YLQuA== 32437\nIFNpcw== 32438\nIFZpdGFtaW4= 32439\na292 32440\nIFBCUw== 32441\nINC90LXQtQ== 32442\nIHJldGFpbGVycw== 32443\nIGNvbnZlbnRpb25z 32444\nIFNhbWFudGhh 32445\nIHByb3VkbHk= 32446\nSm9yZGFu 32447\nIEpBU09O 32448\nYXRr 32449\nIHRyaXN0ZQ== 32450\nIHN0w6Ry 32451\nIHJlaXRlcmF0ZQ== 32452\nIHBvc3Rlcmlvcg== 32453\nIDE5NzM= 32454\nIFBpbmU= 32455\nIEp1bGlldA== 32456\nIHBlZGly 32457\na2ls 32458\nIG92ZXJsYXBwaW5n 32459\nIGV4Y2x1ZGU= 32460\nIGVjb27Ds20= 32461\nIGFjY2VwdHM= 32462\nIFN0ZXI= 32463\nIOyatOuPmQ== 32464\nZXN0YWI= 32465\nIHR1Zw== 32466\nYXJn 32467\nIGxpdnJv 32468\n2KfYtQ== 32469\nIHNlYW1z 32470\nIGJ1cmF5YQ== 32471\nIGVsbG8= 32472\nIFRN 32473\nIFBhdw== 32474\nIEluZGV4 32475\nRXhj 32476\nIGluc3BpcmF0aW9uYWw= 32477\nIGR1bms= 32478\nYWt0ZXI= 32479\nIGNvbmRpdGlvbmVy 32480\nIFNhbHV0 32481\nxYJlYw== 32482\nIOyJvQ== 32483\nINGD0LfQvdCw 32484\nIFJvbWVv 32485\nZnJ1aXQ= 32486\nIFlP 32487\nIGNo4buJ 32488\n0LHRgw== 32489\nYm9ucw== 32490\nIHJlcHJvZHVjdGl2ZQ== 32491\nIG9yYWRh 32492\nIO2aqA== 32493\nIHRlbnRhcg== 32494\nIG1hw7FhbmE= 32495\nIHNvbHZlbnQ= 32496\nSmVzc2ljYQ== 32497\nIExlZ2Fs 32498\nIHR1YQ== 32499\nIHNpYw== 32500\nIEVR 32501\nYXVrZWU= 32502\n7Iuc64uk 32503\nIMWedQ== 32504\nIGFkaGVyZQ== 32505\nIFR1bA== 32506\nIOCuhg== 32507\nIHRleHRib29rcw== 32508\nIEZpZnRo 32509\nIGV4cGVyaQ== 32510\nIGNoaWM= 32511\nIGhlYXA= 32512\naW5lbHk= 32513\nYXRyYQ== 32514\nVHdv 32515\nIGhlbGVtYWFs 32516\nIGZyZW4= 32517\nIGJpc2hlcg== 32518\n2KfYtA== 32519\nIOyEoOyDnQ== 32520\nIFRhZ2Vz 32521\nIHPhu7E= 32522\nIGJ1bGxpZWQ= 32523\n2KQ= 32524\nIGJlbmVmaXRlZA== 32525\nIFByZXZpb3VzbHk= 32526\nINGN0YTRhA== 32527\n2Y0= 32528\nIHNlbmF0ZQ== 32529\nIE1vcm0= 32530\naWprZQ== 32531\nIEZsdQ== 32532\nIGluY29ycG9yYXRpbmc= 32533\namFjaw== 32534\nINC/0LjRgg== 32535\nIGltcGx5 32536\nIGhhY2tz 32537\nIFJJQ0g= 32538\nINC60LLQsNGA 32539\nINC/0YDQtdC60YDQsNGB 32540\nIGRlcGVuZGVuY3k= 32541\nIOyaqQ== 32542\nIOyxhQ== 32543\nIHfDpGhyZW5k 32544\nIHN1bGxh 32545\nIFBpdHRzYnVyZ2g= 32546\nIGVzZW1waW8= 32547\nvOuhnA== 32548\ncHJvdA== 32549\nIFJvc2Vu 32550\nIEluZGVwZW5kZW5jZQ== 32551\nIHBhcnNsZXk= 32552\naWVnZW4= 32553\nIGhhdw== 32554\nIGFxdWVsbA== 32555\nIENBUA== 32556\nINGA0LDQsdC+0YLQsNGC0Yw= 32557\nIENsaWZm 32558\naW9uYXI= 32559\nIHNlY3VyaW5n 32560\nzr3OtQ== 32561\nIHV0aWxpcw== 32562\nIGNvdWxl 32563\nIFBpbmc= 32564\nIHRyZWs= 32565\nIGZhaw== 32566\nIGVub3JtZQ== 32567\nIOyLqw== 32568\nIGRvdWJsaW5n 32569\nINC90YDQsNCy0LjRgtGB0Y8= 32570\nIGhlZA== 32571\naG92ZW4= 32572\nIFN0YW5kaW5n 32573\nIG3DrW4= 32574\nIEppbWlu 32575\nIG1vbmFyY2g= 32576\nIGNva2U= 32577\nIG1y 32578\nIGNsaWM= 32579\nw40= 32580\nIGltcGVhY2htZW50 32581\nIGR1cmFiaWxpdHk= 32582\nIHZhcmlvcw== 32583\nIGNvbW1lcmNpYWxz 32584\nIGdyZWV0aW5ncw== 32585\nIFJp 32586\nIEFwcHJlY2k= 32587\n7J6I64qU 32588\nIHLDqXN1bHQ= 32589\nw6lydA== 32590\nIHNhbHV0ZQ== 32591\nIHBvZGVyaWE= 32592\nIHN1bnJpc2U= 32593\ndmVjaw== 32594\nIHJlbHVjdGFudA== 32595\nIGNvbW1pc3Npb25lcg== 32596\nw6J0ZQ== 32597\nIEtlbm55 32598\nIFNpcmk= 32599\nIOuKmA== 32600\nIEVF 32601\nIHVuY2g= 32602\n0LrQvtC9 32603\nINin2YTYpQ== 32604\nIGJlbHRz 32605\nIGhhc3M= 32606\nINC80L7Rjw== 32607\nIGRpc3BsYWNlZA== 32608\nIGFicmE= 32609\nzq3Ouw== 32610\nIHNjcmF0Y2hlcw== 32611\nIGNvbWV0 32612\nIGF1dGhvcml6YXRpb24= 32613\nIExMQw== 32614\nIHByb2R1aw== 32615\nIHJlaGFiaWxpdGF0aW9u 32616\n5Z4= 32617\n0ZbRhw== 32618\ndWRpbmc= 32619\nb2xpdA== 32620\nIDEwNQ== 32621\nIGV4cGFuZHM= 32622\nIGFsdHJp 32623\nIEtvbW1lbnQ= 32624\nIGFuZg== 32625\nUGw= 32626\nIE1hbmE= 32627\nZmVk 32628\nIGJyaQ== 32629\nIG9yYQ== 32630\nR3M= 32631\nIEd1cg== 32632\ndWNrbGFuZA== 32633\nIGp1bmN0aW9u 32634\nIGlyb25pYw== 32635\nIEZlZWQ= 32636\nIHByYWt0 32637\nIEhhbW1lcg== 32638\njOuPhA== 32639\nIFRyYWN5 32640\nIEFzaWRl 32641\n0L3QtdCz0L4= 32642\nINC40YHQv9C+0LvRjNC30L7QstCw0YLRjA== 32643\nIHphag== 32644\nIGVxdWl0YWJsZQ== 32645\nIGN1cmI= 32646\nIGRlcml2YXRpdmVz 32647\nIHB1cHBpZXM= 32648\nIEtlbm5ldGg= 32649\nIENvbXBs 32650\naWdyYW0= 32651\nIEdhcmNpYQ== 32652\nKSI= 32653\nIEhhcmJvcg== 32654\nZXN0aWFs 32655\nIGVycw== 32656\n5rk= 32657\nIHVud2FudGVk 32658\nIGJlbGFuZw== 32659\n0LDQs9C+ 32660\nZW1i 32661\nZG9z 32662\nIOyZnOs= 32663\nIEJ1ZGdldA== 32664\nIGJhdHRsaW5n 32665\n2K3Yqg== 32666\na29r 32667\n0L3QsNGH0LDQu9Cw 32668\nIHBsYWc= 32669\nIGNhbnRpZGFk 32670\nIGdydXBvcw== 32671\nIHBsdWdpbnM= 32672\nbGVyaW5p 32673\nINC40LzQtdC10YI= 32674\nIHNvenVzYWdlbg== 32675\nb2xpY3M= 32676\nIHB1ZWJsbw== 32677\nIHJlbWluaXM= 32678\ncsOkbg== 32679\nIE1vcnJpc29u 32680\nIGxpbmhh 32681\nIGJyZWF0aHM= 32682\nIFRhc3Rl 32683\nIGVuZnJlbnQ= 32684\nIERvY2tlcg== 32685\nINC00LXQvQ== 32686\nIGV0aG5pY2l0eQ== 32687\nIHdvYg== 32688\nIHN1ZmZlcnM= 32689\nIHRyYW5zaXRpb25pbmc= 32690\nIFJhbmdl 32691\nxJlkenk= 32692\nINC60LDRgg== 32693\nIHN5bmVy 32694\nIGRvbnV0 32695\nIHByb2JhYmlsaXRpZXM= 32696\nIE9tYXI= 32697\nV2hpY2g= 32698\ndWlzaA== 32699\naXNpbg== 32700\nIGRlbW9z 32701\nIOyggOq4sA== 32702\nIOuYkeqwmQ== 32703\nINC10LTQuNC9 32704\nIGNlcnZl 32705\nIGpva2E= 32706\nSUFO 32707\nIGtpbG9tZXRlcg== 32708\nIGhvcml6b250YWxseQ== 32709\nIEJoYWc= 32710\nIC0+ 32711\nIE1vbml0b3I= 32712\nIGtub3dsZWRnZWFibGU= 32713\nIGZhdg== 32714\nIHBpbm5lZA== 32715\nIGVCYXk= 32716\naWNrZXI= 32717\nIOyeoOq5kOunjA== 32718\nIFhpYW9taQ== 32719\nIGNhcGl0 32720\nIG5w 32721\nIDE5NjU= 32722\naG9l 32723\nIG5vaw== 32724\nIFNhZ2U= 32725\nINC90LXQu9GM0LfRjw== 32726\nIFRvdw== 32727\nZ2Ft 32728\nIGRpY2Vu 32729\nIFNVQlNDUklCRQ== 32730\nIHJlYm9vdA== 32731\nIHBhag== 32732\nIOuztOyXrOs= 32733\nIHRoaWNrZW4= 32734\nIFJlYWxpdHk= 32735\naWTDpG4= 32736\nTmE= 32737\nIOqyg+ydgA== 32738\nISEp 32739\nIHJvdXRpbmVz 32740\nINC+0LTQvdC+0LPQvg== 32741\nIGV4dGluZw== 32742\nIOymnQ== 32743\nIHN1bGZ1cg== 32744\nIGNhcnZl 32745\nIGFzdGVyb2lk 32746\nIFdhcnJpb3I= 32747\nIHBob3RvZ3JhcGhlcnM= 32748\nIHBlbGw= 32749\nIGNyb3Nzb3Zlcg== 32750\nIGhhY2Vtb3M= 32751\nIE5lag== 32752\nIHNldHRsaW5n 32753\nIGlybQ== 32754\nIEJvb2tz 32755\naWVudMO0dA== 32756\nIGVzcGFjaW8= 32757\nIFNjaG9sYXJz 32758\nIGRvb21lZA== 32759\nIElSUw== 32760\nd29obA== 32761\nIHNlZ3Vl 32762\nIOuIhOqwgA== 32763\nIHByYXRpYw== 32764\nQlQ= 32765\nIENvbnNpZGVyaW5n 32766\nIEJ1ZmZhbG8= 32767\nIHRyYWluaW5ncw== 32768\nIGdlYnJ1 32769\nIEdsZWljaA== 32770\nIHBpcmF0ZXM= 32771\nIGVudmVsb3A= 32772\nIHJlb3Blbg== 32773\naW1hdA== 32774\nIHRlZQ== 32775\nIHN1ZWQ= 32776\nZmVo 32777\nINeU16c= 32778\nIGRpZXRz 32779\nIGp1bnRvcw== 32780\nYXN0bw== 32781\nIG1pc3VuZGVyc3Rvb2Q= 32782\nIHJ1aW0= 32783\nIGNsYXNzaWZ5 32784\nINC/0YDQvtC00YPQug== 32785\nIGluc2U= 32786\nIGlsbHVzdHJhdGVk 32787\nIGNvcnJvc2lvbg== 32788\nIGFjY3JlZA== 32789\nIEF1bnRpZQ== 32790\nINC/0YDQuNCy0LXRgg== 32791\nIExJVkU= 32792\nIHJlaw== 32793\nIHJlY2VpcHQ= 32794\nIEJhcmJpZQ== 32795\nIFNuYWtl 32796\ndHVybg== 32797\nSmVmZg== 32798\nlYQ= 32799\nVk9JQ0VPVkVS 32800\nY29sbA== 32801\nIHJ1bm5lcnM= 32802\n7KCc6w== 32803\nb3Nvcw== 32804\nbW9vbg== 32805\nIGtleW5vdGU= 32806\nIEluc3RpdA== 32807\nU1BFQUs= 32808\nIHBsdWdz 32809\nIGN1cnY= 32810\nIFl1cmk= 32811\nIFRoZXJlcw== 32812\nIFBz 32813\nIM68z4DOvw== 32814\nIGNvbnZlcnRlcg== 32815\nIHJlZmluZQ== 32816\nIGJhZGFzcw== 32817\nIM6/zrk= 32818\nIHJlZ2Vu 32819\nYXp6aQ== 32820\n2YrZgQ== 32821\nIHNlaXplZA== 32822\nIGnDp2Vy 32823\naWxlZQ== 32824\nIHVwc3RyZWFt 32825\nIGJ1ZHM= 32826\nIHBpbQ== 32827\nIO2VmOujqA== 32828\nIGFsbHVkZWQ= 32829\nIHRoZW1lZA== 32830\nIGNvbnNpc3Rpbmc= 32831\nIGJvbnM= 32832\ndW51eg== 32833\nINC/0YDQvtCy0L7QtA== 32834\nIExvdmVseQ== 32835\n4KWL 32836\nIHBhcmFjaA== 32837\nIFN0YWF0cw== 32838\nIHNlbGVjdGl2ZQ== 32839\nIGZhc2U= 32840\nIEdlb3JnZXQ= 32841\nIGNvY2FpbmU= 32842\nIHJlcHJvZHVjdGlvbg== 32843\nIExhcmE= 32844\nIExE 32845\nIGdo 32846\nSm9u 32847\nIGzDpQ== 32848\nIOuRkOs= 32849\nIHR5cGVk 32850\nIEJhbmE= 32851\n65Oc6w== 32852\nIHNhdm9yeQ== 32853\nIFpvbWI= 32854\nc3RhbmRlbg== 32855\nIHBlZGVzdHJpYW4= 32856\nIGRpZmbDqXJlbnRz 32857\nIOyLuA== 32858\nIGNvbXBsYWluZWQ= 32859\nINCa0YLQvg== 32860\nINec16Q= 32861\nYWxpxZtteQ== 32862\nIG1vcnRhcg== 32863\nIHZlcmRpY3Q= 32864\nIHN1ZmljaWVudGU= 32865\nIE1pbGxpb24= 32866\nbWl0dGVs 32867\naW5hbHM= 32868\nINin2YTYrg== 32869\n0LDRjtGB0Yw= 32870\nIG1pxJlkenk= 32871\nIE9sZQ== 32872\nIGludmVydA== 32873\nY3p5xIc= 32874\n0L7Qt9C80L7QttC90L4= 32875\nc3RhcnRlcg== 32876\nIGF1ZGl0b3I= 32877\nIFNjb3V0 32878\nY2hpZW4= 32879\nIFN2ZXJpZ2U= 32880\ndWZmbGVk 32881\nIHplaG4= 32882\nIEF1Y2tsYW5k 32883\nIGFyZ2VudA== 32884\nIDE5NzY= 32885\nIEhvZQ== 32886\nIGJvdGhlcnM= 32887\nIHNvY2lhbGlzdA== 32888\nIHBsaWVycw== 32889\nIGVtZXJnZW4= 32890\nIFhQ 32891\n0LXRgNC+0LI= 32892\nTW9yZQ== 32893\nIExldmk= 32894\nIEFuZGVycw== 32895\naWJpbGlkYWQ= 32896\nIFBhcmVudHM= 32897\nIGluZHVjZWQ= 32898\n7Ja07KQ= 32899\nIGJhbGFuY2Vz 32900\nINCy0YvRiA== 32901\nIHN1Ym1hcmluZQ== 32902\nU3RhcnQ= 32903\nIGRyaWVz 32904\nIHZvbHZlcg== 32905\nIHRpY2tpbmc= 32906\nY290dA== 32907\nIGZhag== 32908\ncHLDqXM= 32909\nIFNhYmI= 32910\nINC30LDRhw== 32911\nINC/0L7QutGD0L8= 32912\nIGJhcHRpemVk 32913\nIEJyaWxsaWFudA== 32914\nINCR0L7Qsw== 32915\nIG1vdHM= 32916\nYml0cw== 32917\nIGxhdHRpY2U= 32918\nIGNvcmlhbmRlcg== 32919\nIHJlc2lkZW5jeQ== 32920\neW5j 32921\nIHBpZXJ3c3p5 32922\nIEtub2Nr 32923\nIFphcA== 32924\nINCV0LI= 32925\n6rKs 32926\nIHVuZXZlbg== 32927\nIEphcw== 32928\nb2Rvcg== 32929\nNzQ= 32930\nIFNpdGU= 32931\nIGFjb250ZWNldQ== 32932\neW1wdA== 32933\nIHRyaWxvZ3k= 32934\nIGxhbnRlcm4= 32935\nIFp1Y2tlcg== 32936\ndmFyaQ== 32937\nd2VsbGluZw== 32938\nIFBvdGF0bw== 32939\nZ29tZXJ5 32940\nIHJlYWN0ZWQ= 32941\nIENocm9u 32942\nIGplZGU= 32943\nYmVlbGQ= 32944\nIHR3ZW50 32945\nIGxhY3Q= 32946\nIHLDqXNl 32947\nIHJlbGVudA== 32948\nIGZ1cm5hY2U= 32949\nIHdpZGdldA== 32950\nIGVhcnRocXVha2Vz 32951\nIEFkanVzdA== 32952\naWxpdA== 32953\nINij2Yg= 32954\nIGhlYXJpbmdz 32955\nIGRlZmVuZGFudA== 32956\naXJzaW5peg== 32957\nIGJhc2s= 32958\nY2ph 32959\nnKg= 32960\nIHJpZmxlcw== 32961\nIGluc3RhbA== 32962\nIEZvcmdpdmU= 32963\ncGljYWw= 32964\nINCe0YfQtdC90Yw= 32965\nIHBldGl0ZXM= 32966\nIGhw 32967\nIHJlbm93bmVk 32968\nIElubg== 32969\nIOyjvOyEuOyalA== 32970\nIGVtcGhhc2l6ZWQ= 32971\nIOyeiOyjoA== 32972\nIOqyg+ycvOuhnA== 32973\nxZM= 32974\nZ2lsaQ== 32975\nRGF2ZQ== 32976\nIGV4aGF1c3Rpbmc= 32977\nxYJ1Zw== 32978\nIHNjaGVtYQ== 32979\nzrzOrA== 32980\nY3ljbA== 32981\nIGF1dGFudA== 32982\nIHBhcmNlbA== 32983\nIG1hdGVyaWE= 32984\nIEJlcnJ5 32985\nINGB0LDQvNC4 32986\nIGV4dHJhY3RlZA== 32987\nIFNheWluZw== 32988\naXNtYXRpYw== 32989\nINC/0L7Qv9GA0L7QsQ== 32990\nIG5ldXJvbg== 32991\nZ3JhcGg= 32992\nnOuptA== 32993\nIGVuY2xvc3VyZQ== 32994\nIEpvaGFubg== 32995\nIGFmdGVybWF0aA== 32996\n0YLQvtCx 32997\nIHXFvHk= 32998\nIHNhbXA= 32999\nMzYw 33000\nIE1laQ== 33001\nIHRhY28= 33002\nIHJlY2VwdG9ycw== 33003\nIHB1bmNoZXM= 33004\nIEhvamU= 33005\nINmH2YbYpw== 33006\nPSIj 33007\nIEFuZ3VsYXI= 33008\nIG11c2lxdWU= 33009\nIHJvbA== 33010\nIMOx 33011\nc3RlcnJlaWNo 33012\nIGNsYW0= 33013\nIFRyZWFzdXJ5 33014\nY2hlbWljYWw= 33015\nIGFwYXI= 33016\nIGFwcGVuZA== 33017\nIGZvcmJpZA== 33018\nIEhhbWJ1cmc= 33019\n0LDQutC+0LI= 33020\nIOq4iA== 33021\naWxkYQ== 33022\nIHByZXBhcmF0aW9ucw== 33023\nIG1vZ8SF 33024\nIGNhbWlubw== 33025\nRXJpYw== 33026\nIEJsaW5k 33027\nIERpc2NvdmVyeQ== 33028\n7Lig 33029\nIGludGVycHJldGVy 33030\nIGJyZWQ= 33031\nIFBzYWxt 33032\nIGRlZmVuZGVk 33033\n7Ims 33034\nIEVyZmFocg== 33035\nIFBlYWNo 33036\nIG1vb25z 33037\nIE9zdA== 33038\nIHNww6ljaWFs 33039\nIGFycml2ZXI= 33040\nIFdpcw== 33041\ndWNp 33042\nIHJvYm90aWNz 33043\nSVZF 33044\nIHNpZWdl 33045\nYXJsYQ== 33046\nIHNlcGFyYXRlcw== 33047\nIFRD 33048\n7Y+w 33049\ncXVpc2l0ZQ== 33050\nIHBhcmVudGhlc2Vz 33051\n0LjQutC1 33052\nIHRyb3Vz 33053\nINGB0LjQu9GM 33054\nIGJlZXJz 33055\nINC/0LvQsNGC 33056\nIHNvbGE= 33057\nIGTDqHM= 33058\nbWluZ2hhbQ== 33059\naWt0ZQ== 33060\nIG9vcHM= 33061\nIHR3aXRjaA== 33062\nz4g= 33063\nIFNob3VsZG4= 33064\ndXZyZQ== 33065\nIGxlZXI= 33066\nY3JpcHRpb25z 33067\nIGV5ZXNoYWRvdw== 33068\nIEd1bw== 33069\nIFBvd2VsbA== 33070\nIHN1cHVlc3Rv 33071\nIGFuYQ== 33072\ncmFscw== 33073\nIE1vbnRyZWFs 33074\nIHN1cmZpbmc= 33075\nINCf0LXRgNCy 33076\n157XlQ== 33077\nIG1pbGxpc2Vjb25kcw== 33078\nIHN1YnVyYnM= 33079\nIHBsYW5ldGE= 33080\n0YPRiNC60LA= 33081\naHJsaWNo 33082\nIEhZ 33083\nINiz25I= 33084\nIE1N 33085\nIEVmZg== 33086\nIEhT 33087\nYW5zb24= 33088\nIOyngeygkQ== 33089\nIHN1bw== 33090\nIGRlcGxveWluZw== 33091\nIGt1bnQ= 33092\ndGVyaW5n 33093\nIGVyZWN0 33094\n7J6l7J20 33095\nIOydjOyLnQ== 33096\nIHNwZWNpbWVu 33097\nIS4uLg== 33098\nIGxpZ25l 33099\nIGtvbnN0 33100\nYWRlcXU= 33101\nIOyDge2DnA== 33102\nIGFjY2Vzc2Vk 33103\nIFBvbGU= 33104\na2lsbA== 33105\nIOuyhOs= 33106\nIGF1dGhlbnRpY2l0eQ== 33107\nIGFwcGVsbGU= 33108\ndWxsZQ== 33109\nIHJldmlzaW9u 33110\nIGdvYXRz 33111\n0LPQu9C4 33112\nIHBhdQ== 33113\nIFJhbmdlcg== 33114\nIEltYWc= 33115\nYXV0aG9y 33116\nIGV2ZQ== 33117\nIE1lc3Nlbmdlcg== 33118\nIG5heQ== 33119\nIHdob2xlcw== 33120\nw6R0dGU= 33121\nIG9ud2FyZHM= 33122\nIERlcG9pcw== 33123\nIO2RnO2YhA== 33124\nIFNBUlM= 33125\nIHdzenlzdGtpY2g= 33126\nIGRlc3RydQ== 33127\ndW1iaW5n 33128\nIGNvbXBhdGliaWxpdHk= 33129\nIG1pc2luZm9ybWF0aW9u 33130\nb2RvcmU= 33131\nIEZhdm9y 33132\nZWtv 33133\nj4w= 33134\nd2F1a2Vl 33135\nIFRlYWNoaW5n 33136\nIEtP 33137\nIGJldHRpbmc= 33138\nIHF1ZXN0cw== 33139\nIHZpdnJl 33140\nINC80YPQt9GL 33141\nIHNhZ2E= 33142\nIHN3ZWxs 33143\nIGdlaGU= 33144\nINC+0YDQs9Cw0L3QuNC3 33145\nIGdpZGU= 33146\nIEdyb3Nz 33147\nIGRhbGVq 33148\nIGNsYXdz 33149\n4buZYw== 33150\nIHByZWp1ZGljZQ== 33151\nIGluc2lnbg== 33152\naWhvb2Q= 33153\nIHBsZWQ= 33154\nIGTDs25kZQ== 33155\nIFBvbGl0aWNhbA== 33156\nIHByZW1pc2Vz 33157\ndW5kZXJ0 33158\n2LnYqg== 33159\nb25uZW4= 33160\nIGVzcGHDp28= 33161\nIGbDqQ== 33162\nIEhhcnJpc29u 33163\nIENlbnN1cw== 33164\nIGNhcmRpbw== 33165\nIGRpeQ== 33166\nIG1pbGlldQ== 33167\nIGpvdXJuw6ll 33168\nIFJlbGVhc2U= 33169\nTklF 33170\nIE11aw== 33171\naWTDqWU= 33172\n4buNaQ== 33173\nIGnDp2luZGU= 33174\nnpk= 33175\nIHJlc29uYXRl 33176\nIG1vbGVz 33177\nIEZseWluZw== 33178\nIEdsb3JpYQ== 33179\nIFBhc3Rvcg== 33180\nIEFyZW5h 33181\nTk9O 33182\n0L7Qu9C+0LI= 33183\nIGFsbMOt 33184\nb21hdA== 33185\n7Ja064+E 33186\nIGNhcmFjdGVyw61zdA== 33187\nIGRlY2xpbmluZw== 33188\n0ZbRjw== 33189\nYW5jbw== 33190\nIEluZm9ybQ== 33191\nIGJhcmdhaW4= 33192\nIGJ1c2hlcw== 33193\nIE5hdHVyYWxseQ== 33194\nIHJlY2h0cw== 33195\nIFRlbnNvcg== 33196\nIFBhdHJpY2lh 33197\nIHByaW5jaXBpbw== 33198\nIE11bWJhaQ== 33199\nIHdvbWI= 33200\nIG5vc3RyYQ== 33201\nIGRpbGVtbWE= 33202\nIGlyZ2VuZHdhbm4= 33203\nIDE5NjQ= 33204\nIGVuZXJnw61h 33205\nINC90LDRgA== 33206\nIHNlZ3JlZ2F0aW9u 33207\nIEF0aGxldA== 33208\nIMK7LA== 33209\nIHllbmk= 33210\nIFNlaXQ= 33211\nIHZlbm9t 33212\nIGRha2lrYQ== 33213\nIOuPjOs= 33214\nIMOJbA== 33215\nIGZ1cw== 33216\nIE1vZw== 33217\npr3ri4jri6Q= 33218\nIHJlbWFy 33219\nIFRlZGR5 33220\nIGJyZWFzdHM= 33221\naWNhbnM= 33222\na2Fw 33223\nIGjGoW4= 33224\nIEpQ 33225\nIHJlc3VycmVjdA== 33226\nIOyduOs= 33227\naGVyaWNhbA== 33228\nIGZvdG9ncmFm 33229\nIEpvc8Op 33230\nIGxpdmVsaWhvb2Q= 33231\nIGJpYmxp 33232\ndGVyaQ== 33233\nIHZvcnN0ZWxsZW4= 33234\nIEFBQQ== 33235\nIGFzc2Vzc2luZw== 33236\nWUE= 33237\nIHNwbGVuZA== 33238\nIGV4Y2F2 33239\nIGJhcHRpc20= 33240\neWxs 33241\nd293 33242\nTWFj 33243\nIHBsYXN0aWNz 33244\ndGVva2Jva2tp 33245\nIGludMOpcmVzc2FudA== 33246\nIGNvbW1hbmRlZA== 33247\nIGZhbW91c2x5 33248\nINCY0LvQuA== 33249\nIE1hbnVlbA== 33250\nIHNvdXRod2VzdA== 33251\nIGRlZm9ybWF0aW9u 33252\nw61jdWxv 33253\nINC90LDRhdC+0LTQuNGC0YHRjw== 33254\nIFBhdHRlcg== 33255\nZGVncmVl 33256\nIGN6xJlzdG8= 33257\nIi0= 33258\nIOyFiw== 33259\nIG1hbmdlcg== 33260\nIFRydXN0ZWU= 33261\ngOumrA== 33262\nIHB1bnRvcw== 33263\naXZhYmxl 33264\nIHZvbGF0aWxl 33265\nIOuKkA== 33266\nIGluc3RhYmlsaXR5 33267\nIGNpZWw= 33268\nY2nEhQ== 33269\nIHB1cml0eQ== 33270\n0L3QvtGB0YI= 33271\nU2ls 33272\nZWRhcg== 33273\nTk9VTkNFUg== 33274\nIHNwZWxsZWQ= 33275\nR0VS 33276\nIHNhbmN0dWFyeQ== 33277\nIGFjY2VsZXJhdGluZw== 33278\nIHNjb3V0 33279\nINC/0YDQtdCy 33280\nZmFocmVu 33281\nIOuCmOyYqA== 33282\nIHBvY3rEhXQ= 33283\nIE1ldQ== 33284\na2Fhcg== 33285\ns7Tqs6A= 33286\nYWtyYQ== 33287\nRG93bg== 33288\nIMOEcg== 33289\nIEVsaXRl 33290\nIGFsbG9ucw== 33291\nIG1heW9ubmFpc2U= 33292\nIFN1c3RhaW4= 33293\ncHJpc2luZ2x5 33294\nIHN1cGVydmlz 33295\nIOq3uOugh+yjoA== 33296\nIHVuZW1wbG95ZWQ= 33297\nIGZyZXNobHk= 33298\nINee16I= 33299\nIERo 33300\nIHRhY2tsaW5n 33301\nIG9ncg== 33302\nIOy0iOs= 33303\nIGxvZnQ= 33304\nYXJhaA== 33305\nIEFpcmw= 33306\nIERpcg== 33307\nINCc0L7QttC90L4= 33308\nIGJvb2tpbmc= 33309\nIENSQQ== 33310\nIGh0dHBz 33311\nIGNob2tl 33312\nIGdvd24= 33313\nIG5vaXRl 33314\nIHphYw== 33315\naXN0b2w= 33316\nIHNlY3Jl 33317\nIHJlc2VtYmxlcw== 33318\nIGN1YWQ= 33319\n7IKs6rCA 33320\nc2hvdw== 33321\nIGJsYW5j 33322\nIGFndQ== 33323\nIFByaW50 33324\nYXN0ZWQ= 33325\nIFdlYXRoZXI= 33326\naXBs 33327\nIG9ic2N1cmU= 33328\nIGNvbnRl 33329\nb3VnaHM= 33330\nKTs= 33331\nIERhbWU= 33332\nIGNsYXJpZmljYXRpb24= 33333\nIGludGltYWN5 33334\nIHVwaG9sZA== 33335\nIE1pcnJvcg== 33336\nIHdhZ29u 33337\neGlkZQ== 33338\nIGNsb2c= 33339\nYXBwZXI= 33340\nIEltbWVkaWF0ZWx5 33341\nw7pkZQ== 33342\nIHRvdWNoZG93bg== 33343\nIHJvb2Z0 33344\n0LDRiNCw 33345\nIMOnxLFrdA== 33346\nIGxhaXNzZXI= 33347\nIFVucmVhbA== 33348\nZW5zaXRpdmU= 33349\nIDEyMw== 33350\nIHBsYXN0ZXI= 33351\nIGR1Y2tz 33352\nIGV0bWU= 33353\nIGJpc2hvcA== 33354\nYnJldmk= 33355\nIGJpYw== 33356\nIHJ1bnRpbWU= 33357\nIGFtYml0aW9ucw== 33358\n0LzQsNGC 33359\nIFdlaW4= 33360\nIE1hcmk= 33361\nIO2KuOs= 33362\nIHJlc29sdmVy 33363\nIG5nw6B5 33364\nIFJpc2U= 33365\nIENydXM= 33366\nIG1lcmNoYW5kaXNl 33367\nIGVsaQ== 33368\nIHN0YXRld2lkZQ== 33369\nIG93bA== 33370\nIHR3aXN0aW5n 33371\nIGNvbnRhbWluYXRlZA== 33372\nIENvbW1lcmNl 33373\naHl0aG0= 33374\nIMOI 33375\nIOyLpOs= 33376\nIG11c3N0ZQ== 33377\ndWly 33378\nIHN1bXM= 33379\nIFNvbWV3aGVyZQ== 33380\nIGthbWk= 33381\nIGFpcmVk 33382\nIEFORFJFVw== 33383\nIOq6 33384\nIHZpZW5kbw== 33385\nIGFudGlib2R5 33386\nIGFic29sdW1lbnQ= 33387\nIHByb3Rlc3RlcnM= 33388\nIFF1w6liZWM= 33389\nc3RhZHQ= 33390\nU2hhdW4= 33391\nIGNoYW1iZXJz 33392\nIFdlYXI= 33393\nIEVmZmVjdHM= 33394\nIGhhemFyZHM= 33395\nIG5laQ== 33396\nIGNvcmF6w7Nu 33397\nIOG8 33398\nIFNH 33399\nlKk= 33400\nIOyXreyLnA== 33401\nIGNvbWZ5 33402\nIENvZHk= 33403\nIHBlbnNhbmRv 33404\nIGdhbnNrYQ== 33405\nIEFjcm9zcw== 33406\nw7ZsbGln 33407\nYWJ5dGU= 33408\nIHdlZGdl 33409\nIGthbGlhbg== 33410\nIHNpZ3Vl 33411\nZW5kZXM= 33412\nIEdyb8Of 33413\nIHV0aWxpc2Vy 33414\nIGZsb3du 33415\n0LDQvdC40Y4= 33416\nIGxldmFy 33417\ncmVzdHJpYWw= 33418\nIGlsbHVzdHJhdGlvbnM= 33419\nIGFzbMSxbmRh 33420\nQkxFRVA= 33421\nINC00L7RgdGC 33422\nIHR1cnJldA== 33423\nIHN1aXRjYXNl 33424\nemnEmWtp 33425\nIHNrZXRjaGVz 33426\nIGFjcmVk 33427\nIFJlaQ== 33428\nIHRzdW4= 33429\nIFNhZw== 33430\nIHRoaXJkcw== 33431\nIEtJUkJZ 33432\ncmFp 33433\nIGh1bWFub3M= 33434\nIHJlY29tbWVuZHM= 33435\nIGV4dHJhb3JkaW5hcmlseQ== 33436\nIGNvbW1lbmNlbWVudA== 33437\nS04= 33438\nb3Bleg== 33439\nINeR16k= 33440\nIGxldGhhbA== 33441\nIEVzdGFtb3M= 33442\nIGluc3BlY3Rvcg== 33443\nIFNlb2s= 33444\nZXVu 33445\nIG9mZnNob3Jl 33446\nIGdldHRpbg== 33447\neWVhcnM= 33448\nIFNpbGVuY2U= 33449\nIE5hdHVy 33450\ndXB1bg== 33451\nIHRyenk= 33452\nIG5vZ2V0 33453\nIGhhbWJ1cmdlcg== 33454\nIFByYWlzZQ== 33455\nw6luZA== 33456\nIDE5NzE= 33457\neWxpZQ== 33458\na3JpdA== 33459\nIOyDneqwgeydtA== 33460\nIG1vbWVudG9z 33461\nIGVzdMOp 33462\nIGRpc3NlbWlu 33463\nIGdpZ3M= 33464\nIGRlc2Fm 33465\nIGF2aXM= 33466\nIFpvbw== 33467\nIOyViuydgA== 33468\naMOkbmc= 33469\naGFrZQ== 33470\nIEJpc20= 33471\nIHJldGhpbms= 33472\nIE1hbGNvbG0= 33473\nIGlkZW50aWZpZXM= 33474\nbG93ZXI= 33475\naXhlbA== 33476\nIHR2w6U= 33477\na2Vk 33478\naWVyeg== 33479\nIMO2ZmZlbnRsaWNo 33480\nIHByb2NsYWlt 33481\nc29vbg== 33482\nbG9s 33483\nIGxvaQ== 33484\nIGJpdHRlbg== 33485\ncm9sbG8= 33486\nIHNlcm1vbg== 33487\nIGVzcXU= 33488\nIGphY2tldHM= 33489\nIGdyw6FmaWM= 33490\nINC/0L7QutCw0LfRi9Cy 33491\nIGNhYmV6YQ== 33492\nY2hvZHpp 33493\nIHBlbHZpcw== 33494\nIG5vc3RhbGdpYQ== 33495\nIGJyZXc= 33496\nIHNob3J0Y3V0cw== 33497\nIEFkZW3DoXM= 33498\nIHN1cGVyZmljaWFs 33499\nIGJvY2E= 33500\naW1lbnRvcw== 33501\nIHNwcm91dHM= 33502\nIEpvbmFz 33503\nIEZsb3JlbmNl 33504\nc3RhdGlj 33505\nZGF1Z2h0ZXI= 33506\nKik= 33507\nxYJieQ== 33508\nZmFzaGlvbg== 33509\nIEdpbmdlcg== 33510\nIOunpOs= 33511\nIGh1c3RsZQ== 33512\ndXRvcw== 33513\nINGC0Y/Qtg== 33514\nIEzDtnM= 33515\n16nXmded 33516\nYW55Y2g= 33517\ndHViZXI= 33518\nIHRpZHk= 33519\nIGZyb250YWw= 33520\nIHdoaXNrZXk= 33521\nIGh1bWlk 33522\nIM6f 33523\nIHJpZGdl 33524\nIG1hcmlu 33525\nIGJpZW50w7R0 33526\nIENhcnJpZQ== 33527\nY2h3 33528\nIHRhaHVu 33529\nIEVyZ2Vi 33530\nRlI= 33531\nIOygleu2gA== 33532\nIFNvbGRpZXI= 33533\nIGVubGlnaHRlbm1lbnQ= 33534\nIGV4YW1pbmluZw== 33535\nIE5vdHJl 33536\nIGVyYW0= 33537\nIFN1bm55 33538\nIGxheWVyZWQ= 33539\nIERhenU= 33540\ncmFkZXM= 33541\nINC90LDRiNC10Lk= 33542\nIHRpbWJlcg== 33543\nIG1hbm5lcnM= 33544\nIEJpcm1pbmdoYW0= 33545\nIG1pbmlhdHVyZQ== 33546\nb21ldGVycw== 33547\nIGZpbGxlcg== 33548\nIFJpcA== 33549\nIEtvbWI= 33550\nb3duZXI= 33551\n7L8= 33552\naWRpYW4= 33553\nIGRlbcOhcw== 33554\nINmI2Ko= 33555\nIHByZWNhdXRpb25z 33556\nIGdvdmVybm8= 33557\nemVsZg== 33558\nIENvbXBsZXRl 33559\nIFBoYW50b20= 33560\nINC90LXQtw== 33561\nINC60LDRgNGC 33562\nIEFudHdvcnQ= 33563\nIFBmaXplcg== 33564\nIEZyYW5jbw== 33565\nIHfFgg== 33566\nIGZyaWc= 33567\nZXNwZXI= 33568\nIGthbGU= 33569\nIGZpbG1tYWtlcg== 33570\nIGt1cnQ= 33571\nIGludmFsaWQ= 33572\nYXJlbGxh 33573\nxINuZw== 33574\ncmFtZW50bw== 33575\nIG51dHJpdGlvbmFs 33576\nIGRpY3RhdG9ycw== 33577\nIGFmaW4= 33578\nIGZ1enp5 33579\nIEdpbmE= 33580\nw7N0 33581\nIEV4dHJlbWFkdXJh 33582\nIGRlbW9uc3RyYXRpb25z 33583\nIE1vbnRnb21lcnk= 33584\n7ZW07ISk 33585\nIEdhbmRoaQ== 33586\nIHJldW5pb24= 33587\nIGpha2nFmw== 33588\nIFp1Zw== 33589\nT1VHSA== 33590\nbGlmdGluZw== 33591\nIOCy 33592\n4bmb4bmj 33593\nZWI= 33594\nIFdPVw== 33595\nIFNoaXZh 33596\nb21ldHJ5 33597\nIHdpbGRseQ== 33598\nIHRlbmRlZA== 33599\nIG1lZ2Fw 33600\n7LKY 33601\nIG5hdXNl 33602\nIGdlcmVr 33603\nIE1hcmNlbA== 33604\nIG5lc3Rl 33605\n2K7YsQ== 33606\nIGZlaA== 33607\nc3VzcGVuc2VmdWw= 33608\nIFdyZXN0bGU= 33609\nIFBhbGVzdGluaWFucw== 33610\nIEdPUkQ= 33611\naXlldA== 33612\nINGA0LDQtNC4 33613\nIHZlcnN1Y2hlbg== 33614\nIHRyYW5zaXN0b3I= 33615\nINCf0YDQvtGB0YLQvg== 33616\nINC/0L7QvdGA0LDQsg== 33617\nIHJoeW1l 33618\nIFZlcm1vbnQ= 33619\ncGxhdHo= 33620\nIMSwxZ90ZQ== 33621\nIEhhZw== 33622\nINCY0Lw= 33623\nINGA0LDRgdGB0LrQsNC3 33624\nIG1ldHJvcw== 33625\nIEluZmluaXR5 33626\nd29sZg== 33627\naWJhbA== 33628\nZnRpZw== 33629\nINqG 33630\nIO2YueyLnA== 33631\nIG9nZ2k= 33632\nIGRpc3Bvc2l0 33633\nINC/0YDQuNC7 33634\nINCy0YvQv9C+0Ls= 33635\nIHRow7Rp 33636\nIEtFTk4= 33637\nIGhhbmRpbmc= 33638\nYWN0dXM= 33639\nIHRhY29z 33640\nIGZvcm1lcmx5 33641\nIENvcmludGhpYW5z 33642\n0YbRltGX 33643\nIHBhZHJl 33644\nIGNvbmdyZWdhdGlvbg== 33645\n5pE= 33646\nZmVydA== 33647\nIHN1Ymly 33648\nYWlzZXI= 33649\ncXVh 33650\nYXJhb2g= 33651\nIEN1cnJ5 33652\nIOyViuuKlA== 33653\n0LXQu9GO 33654\nIGZ1c3M= 33655\nIGJvb3R5 33656\nIGxvd3M= 33657\nIGhvbW1lcw== 33658\nIE1I 33659\nIERpc25leWxhbmQ= 33660\nd2VudA== 33661\nIHJlc2lkdWU= 33662\nIGJlZXBpbmc= 33663\nw6R0dGE= 33664\nIG1vdWxk 33665\nIFByb2pla3Q= 33666\nc3RhbGs= 33667\nIGFydGlmYWN0 33668\nIEFudHJhZw== 33669\nIEFNRA== 33670\nIENyeXB0 33671\nIOuplA== 33672\nIEZlbGlwZQ== 33673\nIENPQg== 33674\nZWx1 33675\nIHNlbGZpZXM= 33676\nIFNhbnRp 33677\nY2h1dHo= 33678\nINCj0LrRgNCw0Zc= 33679\nZ2VzYW10 33680\nIGZsb2Nr 33681\namF6 33682\ncGxhaW4= 33683\nIHdyaW5rbGVz 33684\nIHJlYWlz 33685\nIHBhbGpvbg== 33686\nIGVtcG93ZXJtZW50 33687\nIGF0dGVuZGVlcw== 33688\ncHBh 33689\nIG5lZGVu 33690\n0L7QvdGL 33691\nIHRpbWVmcmFtZQ== 33692\nIENoZXJyeQ== 33693\nIGlkw6ll 33694\nIGdhZw== 33695\nIGRvbmtleQ== 33696\nIMO0bmc= 33697\nIEhhcmU= 33698\nIEthcmE= 33699\nIGFjb21wYW4= 33700\ncGxhY2Vz 33701\naW1pZW50b3M= 33702\nIEhhbW0= 33703\n0LHQuA== 33704\ndWJlbg== 33705\naWxpeW9y 33706\nIHRoaXJzdA== 33707\nIGtyeQ== 33708\nIEdlb3JnZXRvd24= 33709\n16DXlA== 33710\nIG9yY2g= 33711\nIGhlYXJ0YmVhdA== 33712\nIHRyYW5zZm9ybWF0aW9ucw== 33713\nZXN0b25lcw== 33714\nIEtI 33715\nIGNhcnRvb25z 33716\nIGFuY2k= 33717\nIHdvcnRobGVzcw== 33718\nIHRhaWxvcmVk 33719\ncHU= 33720\nQW1lcmljYW5z 33721\nIHBpbGVz 33722\nIE1vbmtleQ== 33723\nIGJhc2lu 33724\nIFRlbXBlcg== 33725\nIFBhaW50 33726\nIHB1bmNoaW5n 33727\nIGJhaWs= 33728\nIE9ha2xhbmQ= 33729\ndnJl 33730\nxZ9hbGxhaA== 33731\neWRk 33732\nIGNhc3VhbGx5 33733\nb2R1 33734\nIGNvZGVk 33735\nIE5vcndlZ2lhbg== 33736\nIFZpbmNl 33737\nIHByZW1hdHVyZQ== 33738\nIFByb21pc2U= 33739\n0LXQutGB0YI= 33740\nIGRldmFzdGF0ZWQ= 33741\nIFByZW1pdW0= 33742\nIFBhcmFt 33743\nIMOWeWxl 33744\ndW11eg== 33745\nUE8= 33746\ncmF0b3Jz 33747\nIGxhbXBz 33748\nIHRlcnJpdG9yaWFs 33749\nIGJhY2tib25l 33750\nbGlzdGVk 33751\nRFk= 33752\nINin2YTYsQ== 33753\nIHB1cnN1ZWQ= 33754\nIENvbW1vbnM= 33755\nIOqzoQ== 33756\nbG9ja3M= 33757\nZWRvcg== 33758\nIGNvbmNlaXZlZA== 33759\nZ2VyZQ== 33760\nIGRpc2FwcGVhcmluZw== 33761\nIFN1bGw= 33762\nIOyXsOs= 33763\nIGhvZmZl 33764\nIGRldG94 33765\n7ZSM 33766\nIHJldGly 33767\nIOuBneuC 33768\nIHBlcmd1bnRh 33769\nIEJPWQ== 33770\nIHBlbm4= 33771\naMOpcw== 33772\naG9u 33773\nIGNhdGFzdHJvcGhpYw== 33774\nIGF1c3Q= 33775\nIHRvcnNv 33776\nIOyWtOuKkA== 33777\nIOyCrOuejOuTpOydtA== 33778\nIG1hcnZlbG91cw== 33779\nIEhhcmxleQ== 33780\nYWNoaW5l 33781\nIHRp4bq/ 33782\naXR0bw== 33783\nIEnDrW0= 33784\neWxvbg== 33785\nIHNodXRkb3du 33786\nLicn 33787\nIGFwb2xvZ2llcw== 33788\nIENvbW11bmljYXRpb24= 33789\nINCz0L7QstC+0YDRjg== 33790\n4oSi 33791\nw612ZWlz 33792\nYWN1bg== 33793\nIHJldGFpbmluZw== 33794\nIGNvbnRyYWRpY3Rpb24= 33795\nIEFEQU0= 33796\nQ09N 33797\nQnJ5YW4= 33798\nIE1vbnNpZXVy 33799\nIGFkYXB0aW5n 33800\n0KjQkA== 33801\nIFNjcg== 33802\nw6RuZGVydA== 33803\nIHBsYXVz 33804\nIG9uc2V0 33805\nIGFzc2lzdGFudHM= 33806\nIHZhbHZlcw== 33807\nIHNjYXR0ZXI= 33808\nIFJ1c3Q= 33809\nYXdpYQ== 33810\nIHJlYWRpbmVzcw== 33811\nIHBhaXM= 33812\nIGJpYmxl 33813\nIGFtYmllbnRl 33814\nINCw0LzQtdGA0LjQug== 33815\nIHVuY29uZA== 33816\nIGthbGs= 33817\nIG1vYw== 33818\ndW5u 33819\nIGFjdHU= 33820\nIGh1bW1pbmc= 33821\naXNzaW1v 33822\nIFBhdHJvbA== 33823\nZ293 33824\nIFRIRVk= 33825\nIEJvZGVu 33826\nIEJpZQ== 33827\nIHJlZWw= 33828\nINGD0YHQu9C+0LI= 33829\nIGVuZGVhdm9y 33830\nIFBlcmlvZA== 33831\ndXN0b21lZA== 33832\nbWFscw== 33833\nYWxvbg== 33834\nQm94 33835\nIM+DzrHPgg== 33836\nIG9tZGF0 33837\nIGFsdHJl 33838\nIEhlaA== 33839\na2Fk 33840\nIHByb3RlY3Rvcg== 33841\nIGRvbWluYW5jZQ== 33842\nb2R5bmFtaWM= 33843\nIGNvbW11bmljYXRlZA== 33844\na8O2 33845\nIHByZWRlY2Vzc29y 33846\nIEx1aw== 33847\nIEZsb3dlcg== 33848\ncG9xdWU= 33849\n0YLQuNGA0L7Qsg== 33850\nIHJldHJvc3BlY3Q= 33851\nIGRlY2lzaXZl 33852\nIGV4ZW1wZWw= 33853\ne1w= 33854\nIFLDvGNr 33855\ncml0ZQ== 33856\nIFpldXM= 33857\nIGNhbG9yaWU= 33858\nIGF0dHJhY3Rpb25z 33859\nIEhpbnRlcg== 33860\nIHVobQ== 33861\nIO2MkA== 33862\nIHJ1bGVycw== 33863\nIGRpc2NvdXJhZ2Vk 33864\nIGFjb250ZWNlcg== 33865\nIGFjY2VudHM= 33866\nIE9wdGlt 33867\nIEFsZw== 33868\na2lkcw== 33869\nMjAyMQ== 33870\nIExpbmRzYXk= 33871\nIGZpbG1tYWtlcnM= 33872\ncHJvd2Fk 33873\nIHRlcnVn 33874\n64u0 33875\nIFNvbW1lcg== 33876\nMjAxOA== 33877\nIGJvcnJvd2luZw== 33878\nIFRyYW5zZmVy 33879\n0L3QvtC/ 33880\nYXJpYXM= 33881\nIGhlYWRwaG9uZQ== 33882\n7Lyc 33883\nIHRyYW5zbGF0aW5n 33884\nIGF1Zmdl 33885\n4K6q4K6f 33886\nd2Vpcw== 33887\nYXZhbnQ= 33888\ncGFpZA== 33889\nYmFieQ== 33890\nIHRvdWdoZXN0 33891\nIHJlcGVhdHM= 33892\nIFRlcmVzYQ== 33893\nTG9yZA== 33894\nIGFjYWJhcg== 33895\nIFJpZGU= 33896\nZGly 33897\nIGxlbmc= 33898\nIGR3YQ== 33899\nIGhlYWRhY2hlcw== 33900\nIG7hu69h 33901\nINC90LDRgdGC0L7Rj9GJ 33902\nIGJvaWxz 33903\nIGxvbmdpbmc= 33904\ncmlhcw== 33905\nw7NyaW8= 33906\nIFBhcmFkaXNl 33907\nIFNlw7Fvcg== 33908\nZXJkZW0= 33909\nIHJlaW5zdA== 33910\nIHNhbGFyaWVz 33911\nIGluc2VjdXJpdHk= 33912\nxYJvxZtjaQ== 33913\nINCw0LHRgdC+0LvRjtGC0L3Qvg== 33914\naW5rZW4= 33915\nIEVkZHk= 33916\ndWRvcw== 33917\nIGR1bW15 33918\n0JrQsNC6 33919\nc2l4 33920\nIGluYm94 33921\n4bqp 33922\nUGVvcGxl 33923\n4buTbmc= 33924\nIG9yZ2FuaXplcnM= 33925\nZmluZA== 33926\nIMO8bA== 33927\nIENPTQ== 33928\nxbxh 33929\nd2VpbGU= 33930\nQ29tbWVudGFyeQ== 33931\n7Yq466W8 33932\nIE1pdHRlbA== 33933\na3Vz 33934\n4KSo 33935\naXJhbA== 33936\nIGdhcm1lbnQ= 33937\nzrnOus6s 33938\nIHN0b29s 33939\ncGF5ZXJz 33940\nIHNoaW1tZXI= 33941\nIE9sbGll 33942\nIEplxbxlbGk= 33943\nIDE5Nzc= 33944\nIGpldXg= 33945\nIGV4dGluY3Q= 33946\nIFRyYW5zcG9ydGF0aW9u 33947\nIE1ha2Vy 33948\nIGpvaG4= 33949\nIHJpY2hlc3Q= 33950\nIHRyYXVtYXQ= 33951\nIGxpZWdlbg== 33952\ntOulvA== 33953\nIHVucmVzdA== 33954\nIFN0cmF3 33955\nIGNvbWE= 33956\nIEtyaXN0ZW4= 33957\nINCa0L7QvdC10YfQvdC+ 33958\nIEJyeWNl 33959\nINGP0LrRlg== 33960\nIHBlYXJscw== 33961\nINC/0L7QvdC40LzQsNGO 33962\nIGFkZGl0aW9ucw== 33963\nIGFzeW1wdA== 33964\nINC80LXQvdGM0YjQtQ== 33965\nIHNjYW5z 33966\nQ2hpbGQ= 33967\nIEhpZGU= 33968\n0LrRg9GO 33969\nZXRhcw== 33970\nIGRhbms= 33971\nIHBsZWFz 33972\nIGVzc2F5cw== 33973\nIGpldHM= 33974\nINCy0LXQtA== 33975\nIHBvc2l0aXZlcw== 33976\naG9m 33977\nLSk= 33978\nenpv 33979\nIHN0YXJ0ZXJz 33980\nIHNtaWxlZA== 33981\nIDE5NDQ= 33982\ncXVpZXJh 33983\nIHJvaw== 33984\nIHB1ZXN0bw== 33985\nTmljbw== 33986\nIHNpbXVsYXRpb25z 33987\nIOC2 33988\nIGludHJpZ3VlZA== 33989\nIE92ZXJ3YXRjaA== 33990\nc2lnaA== 33991\nYmFp 33992\nIOunkOqzoA== 33993\naWTDqQ== 33994\nIGNyYWJz 33995\n4bqtcA== 33996\nIElyYXFp 33997\n7J2066W8 33998\n0YLRjw== 33999\nIFNvcGhpYQ== 34000\nIEROUw== 34001\nIMO2bmVtbGk= 34002\nIEx1bw== 34003\nnaQ= 34004\nIENvdW5zZWw= 34005\nbGlnZW4= 34006\n0LDQvdGM0YjQtQ== 34007\nIHRydW1wZXQ= 34008\nIGRhcGF0 34009\nIEpN 34010\nIEVWRVJZ 34011\nIExheWVy 34012\nIGPDtA== 34013\n0L3QsNC7 34014\nIEpvbw== 34015\nIEhhY2s= 34016\nIHN1bnQ= 34017\nIExlb25hcmQ= 34018\nIEZpcmViYXNl 34019\nw6RuZ2Vy 34020\nIGV4cGxvZGluZw== 34021\ndm95 34022\nIOymkA== 34023\nINGB0LXRgNGM 34024\nIHNldmVyaXR5 34025\nIGJlc3RpbW0= 34026\nIHRpcmluZw== 34027\nIHByb2N1cmVtZW50 34028\nIGRpcGxvbWFjeQ== 34029\nIGRlY29yYXRpdmU= 34030\nINmK2Kc= 34031\nIHBlbmV0cmF0aW9u 34032\n1as= 34033\nIG91dHJpZ2h0 34034\nRU5F 34035\nIFVuaQ== 34036\nb2RsZXM= 34037\nIHplcm9z 34038\nIGRlbGlnaHRmdWw= 34039\nam0= 34040\nIGRvcG8= 34041\nIHBvc2l0aXZpdHk= 34042\nIFZJU1RB 34043\nIFJlc291cmNl 34044\n7YOA6w== 34045\n0YjQuNC1 34046\nQ2FybA== 34047\nIHBpcGluZw== 34048\nIGNob3BwaW5n 34049\nIEdhbnpl 34050\nw7xzcw== 34051\nIEFv 34052\nIHNoYXR0ZXJlZA== 34053\nIERldGVjdGl2ZQ== 34054\nIHVuZG91YnRlZGx5 34055\nIGhhbGx1Yw== 34056\nIGVuY2g= 34057\n0YvRh9C90L4= 34058\n0YPQu9GP0YA= 34059\naXNlc3Rp 34060\nIHBlZGFscw== 34061\nIGR1cnVt 34062\npO2U 34063\nbGFpbWVy 34064\nIHByb3ByZQ== 34065\nQ3U= 34066\nIHRyYW5zbGF0b3I= 34067\nIGNhxYI= 34068\nIOq3uOqxuA== 34069\nIGNhxYJ5 34070\nVUE= 34071\nIHJldmlzZWQ= 34072\nINC/0L7QtNC+0LE= 34073\nIEFydGljbGU= 34074\nIEhhaXRp 34075\nIMOT 34076\nIEN0cmw= 34077\nIHJvem0= 34078\nbGFpdA== 34079\nIGxldHp0ZQ== 34080\naXNwZXJpbmc= 34081\nZGlzcGxheQ== 34082\nIGFsdW1pbml1bQ== 34083\nIHBhbGFicmFz 34084\nIGNvbm9jZXI= 34085\nIHppdHRlbg== 34086\nIGRpcmln 34087\nIGJyYWluc3Rvcm0= 34088\nIHdpZmk= 34089\nIFBhcnRpY2lw 34090\nIHZpZXdwb2ludA== 34091\nIFF1YW4= 34092\nIGhpZXJhcmNo 34093\nV2VsY29tZQ== 34094\nIG9mZmVu 34095\nIFJlY292ZXJ5 34096\nZ2Fubw== 34097\nV291bGQ= 34098\nIHJlcHJv 34099\nIHBlcmNlcHRpb25z 34100\nIGRlbWFzaQ== 34101\nIEJhbmdsYWRlc2g= 34102\nIEluY3JlZGlibGU= 34103\nIGxldHp0 34104\nIGJlaGF2aW5n 34105\nIGFzdG9uaXNoaW5n 34106\nIOKG 34107\nIOuCqOyekA== 34108\nIEdPUkRPTg== 34109\nQ0FS 34110\nPyEi 34111\nIFByZXN0 34112\nIOunnuyVhOyalA== 34113\nIHRhbmQ= 34114\nIGxhc2g= 34115\n54o= 34116\naWZpY2FudA== 34117\nIGludG9sZXI= 34118\nINCz0LXRgNC+ 34119\nIHRldQ== 34120\nYXNv 34121\nINGB0L7QstC10YI= 34122\nIHRyYXZlbGVycw== 34123\nIFN5bmQ= 34124\nINCy0LXRgNGB 34125\nRm9uZGE= 34126\nYWTEsQ== 34127\nIHRyYW5zY3JpcHRpb24= 34128\nIHRpdGFuaXVt 34129\nIHR3aXN0cw== 34130\nIGdlYXJib3g= 34131\nZW5zYXRpb24= 34132\nZmF0 34133\nQ29sbA== 34134\nIENvbW1vbndlYWx0aA== 34135\nem9u 34136\nIFBvbGl6ZWk= 34137\nIEFQUExBVVNF 34138\nZnJ5 34139\nIEp1ZGE= 34140\nZXN0ZWVt 34141\nIHNvY2s= 34142\nIEp1Z2VuZA== 34143\nINC60YHRgtCw0YLQuA== 34144\nIERybw== 34145\nIHByb2NoYWluZQ== 34146\nIGxpa3NvbQ== 34147\nIEVuZXJnaWU= 34148\nIE1hcmluYQ== 34149\nIDIzMA== 34150\nIOqwgOyEnA== 34151\ndW1waW5n 34152\nIGxvbmU= 34153\nIGZvbnRz 34154\nIGJ1c2luZXNzbWFu 34155\nIHBseQ== 34156\nIGRvZQ== 34157\nZ3JpZA== 34158\nIE1pbHdhdWtlZQ== 34159\nIEVkZW4= 34160\nISIu 34161\nINuM24E= 34162\nb2dlbnM= 34163\nIHRlYXNlcg== 34164\nIHF1acOpbg== 34165\nIGluY2VudGl2 34166\nZ292ZXJu 34167\nIGNoaWxkY2FyZQ== 34168\nIHNuZWFrZXJz 34169\nIGltcHJpc29uZWQ= 34170\nwq4= 34171\n0LjRgtC10YHRjA== 34172\nYW5idWw= 34173\nIHJlZ2Fpbg== 34174\nIHRyYW5xdWls 34175\nUmVkbmVy 34176\nSUZB 34177\nIGlkZW9sb2dpY2Fs 34178\nIG1heW9yw61h 34179\nIGJ1cmVhdQ== 34180\nZXRlcm0= 34181\nIERJRA== 34182\n7Iq3 34183\nIHdhdmluZw== 34184\nIGJlYg== 34185\nIMOhcg== 34186\nINC60LI= 34187\nIGVudm95 34188\nYW51dA== 34189\n0LjQutGD 34190\nIEVudmlyb25tZW50 34191\nIEFzc2Fzcw== 34192\nIEJyZWFk 34193\nINCi0YPRgg== 34194\nIHN0YWlyY2FzZQ== 34195\nIERpc2Vhc2U= 34196\nIGF1Y3Vu 34197\nIOuLiA== 34198\nIGNvbmZyb250YXRpb24= 34199\nIDE5NDE= 34200\nIGlyb255 34201\nIHdvcnNo 34202\nIGZpY2s= 34203\nIE5hb21p 34204\nIGJhY2tzaWRl 34205\naWV1eA== 34206\nS2Fw 34207\nIHZlZGVyZQ== 34208\nIGxlbmd0aHk= 34209\nIGJyZWFrZXI= 34210\nIFJvbGxl 34211\nIHByZWRhdG9y 34212\nIG5vc3Nvcw== 34213\nIGFkdmVydGlzZQ== 34214\n0YDQvtC00LU= 34215\nUmVkbmVyd2VjaHNlbA== 34216\ncmV0ZW4= 34217\nIGNvbGxlY3RvcnM= 34218\nxLHEn8SxbcSxeg== 34219\nIHRyaWc= 34220\nIGF4ZXM= 34221\naW50ZXJz 34222\nIHBlbmFsdGllcw== 34223\nIE9zbWFu 34224\nIEplbm5h 34225\nIGZsYWtlcw== 34226\nIHRyYWluZXJz 34227\nIHN0dW5uZWQ= 34228\nIFNjcm9sbA== 34229\nIFBpcA== 34230\nINC90LDRgdGC 34231\nIG5ow6A= 34232\nIFNtYWNr 34233\n4bqrbg== 34234\ncmF0b3M= 34235\nINGA0LDQsdC+0YLRiw== 34236\nIHVjeg== 34237\nIExlbW9u 34238\nIFNpbmQ= 34239\nIHBzeWNoaWM= 34240\nIEFiZw== 34241\nIG1hbW1hbHM= 34242\nIGltbWVyc2l2ZQ== 34243\nIGJvdHM= 34244\nIHZlcnNjaGllZGVuZQ== 34245\nIGdlcmFs 34246\nIGZvbGxvd2Vy 34247\nIHNlZ3VyaWRhZA== 34248\nIGltbWVyc2Vk 34249\nZmVpdG8= 34250\nY3Jvc3M= 34251\nIMO2bGQ= 34252\n7YOE 34253\nINeU15nXkA== 34254\nIEppYW4= 34255\nIGJpbGl5b3I= 34256\nYXJlYQ== 34257\nIGthZg== 34258\nIGdvZHQ= 34259\nIOuwqeyGoQ== 34260\nIGRldHJpbWVudA== 34261\n0ZbQuw== 34262\nIMSRw6J1 34263\nIGNobG9yaWRl 34264\nw7hyZQ== 34265\nbGVp 34266\nIG1vbnRl 34267\nIGRpZmbDqXJlbnRlcw== 34268\n4K+BLg== 34269\nIGNhcmVnaXZlcnM= 34270\nIGluYWRlcXU= 34271\nIGZhcmV3ZWxs 34272\nINGC0LjQv9Cw 34273\nb250ZWM= 34274\nIEVwaA== 34275\nSEhI 34276\nIFRvZG9z 34277\nINCh0KjQkA== 34278\nIHRyb3Y= 34279\nIGxpZ2U= 34280\nIGPDtG5n 34281\nIENpdg== 34282\nIGNhcGF6 34283\nIFZhbGxhaGk= 34284\nIHF1ZXN0ZQ== 34285\nIHJlcGxpY2E= 34286\n2LPYqA== 34287\nem5h 34288\nINGB0LvRg9C2 34289\nIFBU 34290\nd2F2ZQ== 34291\naWVuaQ== 34292\nIHJlbGllZA== 34293\nZGV2ZWxvcA== 34294\nIGRlbWU= 34295\nIEFtYW4= 34296\nIFsuLi5d 34297\nIGNvbXBsaW1lbnRz 34298\ndWFpcw== 34299\nIO2MqA== 34300\nIHNtZWxsaW5n 34301\nIGRhZHVyY2g= 34302\n2YjYqg== 34303\nIG9yYW5nZXM= 34304\nINC70LDQuQ== 34305\nIHN0YWJpbGl6YXRpb24= 34306\nIGFwcGxpYW5jZXM= 34307\nIGht 34308\ng5DrqbQ= 34309\nb2R5bmFtaWNz 34310\nIGNpxJk= 34311\nIENvdHQ= 34312\nTU9O 34313\nIE1hbmc= 34314\nIGFsbGVyZGluZ3M= 34315\nzrnOus6u 34316\nc2hvdHM= 34317\nIHRz 34318\nIEfDtnI= 34319\nIENIQVI= 34320\nIDoo 34321\nIHdyYXRo 34322\nIGZpcXVl 34323\nIGbDvGhyZW4= 34324\nIHRlc3RhbWVudA== 34325\nIF5e 34326\n4bmb4bmj4bmHYQ== 34327\nQUxE 34328\nIHRleHRv 34329\nIERvZ3M= 34330\nIHNpYg== 34331\nIHBhdGhldGlj 34332\nb2Nrcw== 34333\nIHJhZGljYWxseQ== 34334\nIE1PUkU= 34335\nIEpBTUVT 34336\nIGluZ2w= 34337\nIFRlY2huaWNhbA== 34338\nIHBvcmNo 34339\nIFVU 34340\nINC+0LHRj9C30LDRgtC10LvRjNC90L4= 34341\nIHJlbmV3YWw= 34342\nIGFlc3RoZXRpY3M= 34343\naWt1bQ== 34344\nIGJldmVyYWdl 34345\nZGVybg== 34346\nIHByZWRpY3RpdmU= 34347\nIGNodXk= 34348\nIFJlZ2FyZGluZw== 34349\nIEZvcndhcmQ= 34350\nINmI2YQ= 34351\nIGNvbnRleHR1YWw= 34352\nIGR3YXJm 34353\nIHByZWhl 34354\nIGdvdmVybmVk 34355\nhYQ= 34356\nIHRyYWJhbGhhcg== 34357\nIG5lZ8OzY2lv 34358\nINCx0L7Qu9GM0YjQvtC5 34359\n0LXRh9Cw0YI= 34360\nINC00YPRhQ== 34361\nIGZsb29kcw== 34362\nIGJvd2xpbmc= 34363\nIE9C 34364\nIEjDpHI= 34365\nIGdyYWRpbmc= 34366\n7KO864qU 34367\nIGdhcnM= 34368\nZGxpbmc= 34369\nIHJhaw== 34370\n64g= 34371\nY3JlYXQ= 34372\nINGJ0LU= 34373\nIG5laWdoYm91cnM= 34374\nZm9vZA== 34375\nUXVlcnk= 34376\nIGhlcm9pbg== 34377\naWNlcHM= 34378\nIEtpbmRh 34379\nTkVU 34380\nIG1hcmk= 34381\nIGltaXRhdGU= 34382\nIGFjaHRlcg== 34383\nIHNldHRsZW1lbnRz 34384\ncmFyZQ== 34385\nY2Npb25lcw== 34386\nIOuTnA== 34387\nIGZpaw== 34388\naXR1bmc= 34389\nINC80LDQutGB0LjQvA== 34390\nIGVsZg== 34391\nIGRhbGxh 34392\nIFBvbHNjZQ== 34393\nIFB1bA== 34394\n0KfRgtC+ 34395\nIE1vcmdlbg== 34396\n2K3ZhQ== 34397\nIHN1cHJlbWFjeQ== 34398\nIGt5cw== 34399\nIEh1cnJpY2FuZQ== 34400\nIEdUQQ== 34401\nIEZlaA== 34402\nIGZpbmFsbWVudGU= 34403\nbXVuZA== 34404\nIEtyaWU= 34405\nw6lwb3F1ZQ== 34406\nIFR1Y2tlcg== 34407\nSVRU 34408\nIGx1cg== 34409\nIGRpcHBpbmc= 34410\nw6R2 34411\nIGVlcnN0ZQ== 34412\nIEZsaW50 34413\nYmlsZHVuZw== 34414\n4Li54LmJ 34415\nIHRvaW0= 34416\nIHByYWN5 34417\nIHRyYW5zZm9ybXM= 34418\nIHNwZWVkaW5n 34419\nIHByZXNlbnRlcg== 34420\nIGZlbGxvd3M= 34421\nZmlsbGVk 34422\naWV6YQ== 34423\nIGFkdmlzaW5n 34424\nIEludGVydmlldw== 34425\n0LjQs9GA 34426\nd2Vocg== 34427\nIERhbnRl 34428\ncHR1cmU= 34429\niOusuA== 34430\nr7jr 34431\nkJA= 34432\nIENvdW50ZXI= 34433\nIGNyaXN0 34434\nIOynnA== 34435\nIGpldW5l 34436\nINGB0YLRgNCw0Yg= 34437\nIG1pZcSH 34438\nIHR1dG9y 34439\nIG1hc2FsYQ== 34440\nIHBvd2RlcmVk 34441\nIG5hdQ== 34442\nIEZyZWRlcmljaw== 34443\nIGJpbGxpbmc= 34444\nIEVpc2Vu 34445\nINC00L7QsdGA 34446\nIG1lc3Q= 34447\n5r0= 34448\nIHNuaXBw 34449\nIG1vbm8= 34450\nIEFsbw== 34451\nIE1lcmN5 34452\nw6lyaWVuY2U= 34453\nIGNhc3VhbHRpZXM= 34454\nIEFOTk9VTkNFUg== 34455\nIHRvY2Fy 34456\nIGJhY3RlcmlhbA== 34457\nSG8= 34458\nIHN0cmVhaw== 34459\nIEpFTk4= 34460\nIHBsYXN0 34461\n0YHQu9C10LQ= 34462\nIHJlYXBw 34463\nIHBheWNoZWNr 34464\nIG1pbmVycw== 34465\naGFidA== 34466\nIEphcA== 34467\n0L3Rg9GC 34468\nIHJlZGVtcHRpb24= 34469\nIHF1aXI= 34470\naG5saWNo 34471\nIGFjY3VtdWxhdGlvbg== 34472\nIHNob3Zl 34473\nIGFkcmVuYWxpbmU= 34474\nTWFrZQ== 34475\nIEhlcm4= 34476\nb3NzaW5n 34477\nIFZpbA== 34478\ndWJieQ== 34479\naGVydHo= 34480\nYnJlYWtz 34481\nIHNwdXI= 34482\nIERhaGE= 34483\nVVNUSU4= 34484\nIGNvbnRpbnVlcg== 34485\nIFNhdWw= 34486\nIO2PrQ== 34487\nIOuQmOuptA== 34488\nIOunkOyUgA== 34489\nINC+0LY= 34490\nIHN1c3BlY3Rz 34491\nIGxhcXVlbGxl 34492\nIE11Y2hhcw== 34493\nIHbDtmxsaWc= 34494\ndWxlbg== 34495\nIGltcHJlcw== 34496\nIGxvYmI= 34497\nZW5lZQ== 34498\nINC90LDQtg== 34499\nVGE= 34500\nIHLDqWFsaXTDqQ== 34501\nIFJleA== 34502\nIGhhcnZlc3Rpbmc= 34503\nIGVzdHI= 34504\n5rY= 34505\nb3NwYWNl 34506\nT1NT 34507\nIGRpc3R1cmJhbmNl 34508\nYXNzaWM= 34509\nIElzYWI= 34510\nIGTDqWNvdXY= 34511\nIEhhbXBzaGlyZQ== 34512\nIG9ybmFtZW50 34513\nIGx1w7Ru 34514\nIFVX 34515\nIGrEhQ== 34516\nIHJlc3BlY3Rv 34517\nIGNvbXVuaWRhZA== 34518\nIGNvbWlnbw== 34519\nYWduYQ== 34520\nIGludHJpbnNpYw== 34521\nIEFsdW1uaQ== 34522\nIHNlc2xlcmk= 34523\nIGVzdGltYXRpb24= 34524\n4oCU4oCU 34525\nIHByb2R1aXQ= 34526\n44CC44CN 34527\nINCy0YA= 34528\nIHdoaXJs 34529\nIGFjY2Vz 34530\nw6d1 34531\nIHZhcmlhYmlsaXR5 34532\nIHZvZGth 34533\naXRzdQ== 34534\nIGludGVybnNoaXBz 34535\nIGFsbG9jYXRl 34536\nUlI= 34537\n7ZuI 34538\nIGluc3RydWN0aW9uYWw= 34539\ndGFudA== 34540\nIOCuheCupA== 34541\nIGludml0ZXM= 34542\nIGhhaw== 34543\nIHNjYXJlcw== 34544\nIGVjbGlwc2U= 34545\n0L/QvtCy 34546\n0LrQvtC70Yw= 34547\nYXRpdmFz 34548\nIHN0YWJiZWQ= 34549\nIERPTQ== 34550\ncm9vdHM= 34551\nIFBpY3R1cmU= 34552\n7Zi8 34553\nIENIQQ== 34554\naWVj 34555\nxLHEsQ== 34556\naGFub2w= 34557\nIG1pc3VuZGVyc3RhbmQ= 34558\nUmF5 34559\nIHJvYWRtYXA= 34560\nb2N1bWVudGVk 34561\naXppb25l 34562\nIE9saXZl 34563\ncmlmdA== 34564\nINeU16A= 34565\nbGVzdA== 34566\nOzs= 34567\nIEVB 34568\n0L7QtNGD 34569\nIGhvYmJpZXM= 34570\nIGJ1cmlhbA== 34571\n0KQ= 34572\nbGVnZQ== 34573\nIEhK 34574\nIG9iamVjdGlvbg== 34575\nY3Rvcnk= 34576\nIGluY3JlbWVudGFs 34577\nIGd5bW4= 34578\nIGVwaWRlbWk= 34579\n0YHRi9C7 34580\nw5E= 34581\nIGFkdmFuY2VtZW50 34582\nIHBhcmNo 34583\nTmV3cw== 34584\nIGF5cg== 34585\n0LvQsNC8 34586\nINec16k= 34587\nIGRpcGxvbWE= 34588\nIHJvYmJlZA== 34589\nT25seQ== 34590\nIGluY3Vy 34591\nIGNoYW50aW5n 34592\nIO2VtOuPhA== 34593\nIHJpY2hlcw== 34594\nIENhcm1lbg== 34595\nIG5vc3Rybw== 34596\nzrvOrQ== 34597\nIFBvd2Rlcg== 34598\n4LmA4Lir 34599\nIOyeiOycvOuptA== 34600\nIGdlcsOnZWt0ZW4= 34601\nIFBpa2FjaHU= 34602\n0LXQvNC+0L0= 34603\nT0xM 34604\nIHBsYW5ldGFyeQ== 34605\nIHNsb3dz 34606\nIGNsb2Nrd2lzZQ== 34607\nYWxpb24= 34608\nIOyM 34609\nIHZlcm4= 34610\nIGhvbW1l 34611\nIGVuZHBvaW50 34612\nIGlubm9jZW5jZQ== 34613\nIGVsZW1lbnRvcw== 34614\nIHNvcGhvbW9yZQ== 34615\nIG5vdGlvbnM= 34616\nIENvdWxkbg== 34617\ncHVy 34618\nIHphdA== 34619\nIG9ic2Vzcw== 34620\nIG1vdGl2bw== 34621\nIEt1Yg== 34622\nIERydWc= 34623\nQW50 34624\nIFBsYXllcnM= 34625\nIEh1bWFucw== 34626\nIG1lbGVl 34627\nIFdpbGRsaWZl 34628\nIFZQ 34629\nIHZvbGNhbmlj 34630\nIGNvbWlu 34631\nIEd1YW5n 34632\nIM+EzrnPgg== 34633\nINC+0YHQvtCx0LXQvdC90L4= 34634\nIFNpemU= 34635\nTGlzdGVu 34636\nIEFhYQ== 34637\nYXBwcm8= 34638\nIGJhcmJhcg== 34639\nIFBhcmtpbnNvbg== 34640\n0L3Rj9GC0Yw= 34641\nIHVuZGVyZXN0aW1hdGU= 34642\nIHN1YnN0aXR1dGlvbg== 34643\nIGNvc21ldGlj 34644\nIHdpbGxlbg== 34645\nIGJlaWRl 34646\nYW5uaQ== 34647\nIGNvbmRpdGlvbmVk 34648\nIERlYmJpZQ== 34649\nIGlzdG8= 34650\nIEVkd2FyZHM= 34651\n7JuM7JqU 34652\nINGC0L7Qsg== 34653\nIGFiYnJldmk= 34654\nIE3DvG4= 34655\nIFByaW5j 34656\nIExpYW5n 34657\nIHN0aW5r 34658\nIHJhZGlvYWN0aXZl 34659\nIGFjb250ZWM= 34660\nIHVuY29u 34661\nIFR1cmJv 34662\nIGtpc3Nlcw== 34663\n0LXRgtGA0L7Qsg== 34664\nIGZyb250aWVy 34665\nIFNweQ== 34666\nIEJlbGFydXM= 34667\nIENCUw== 34668\n4buX 34669\nYW1vdG8= 34670\n7ZWc642w 34671\nINGB0YLRgNC+ 34672\nIEVuZmlu 34673\nIGJyZWFkdGg= 34674\nIENhZmU= 34675\nIERhZsO8cg== 34676\nIEJvdXI= 34677\nYXJhcw== 34678\nIGJsdWVwcmludA== 34679\nYW7EsQ== 34680\nIGNvbnN0YW50cw== 34681\nIGF0dGFja2Vy 34682\nIEZvcm11bGE= 34683\nemHEhw== 34684\nIHNvd2ll 34685\nIGV5ZWJyb3c= 34686\nb2Jvb2s= 34687\nIHNldHplbg== 34688\nb25zaWRlcg== 34689\nYXduaW5n 34690\nIHPDtnlsZXll 34691\nIGludmFkZWQ= 34692\nIHByb25vdW5z 34693\nIGRvYnJ5 34694\nU2k= 34695\nINCl0L7Rgg== 34696\nIHZvbGxleWJhbGw= 34697\nIGxhbWVudA== 34698\naXNjaGVz 34699\nYXJtZQ== 34700\nYXBp 34701\nIFdpa2k= 34702\n0LvQuNGI 34703\nIGthc2lo 34704\nIHBlc3M= 34705\nINGE0L7Rgg== 34706\nIFN1bA== 34707\nIHBzZXVkbw== 34708\nIG1lbW8= 34709\nIOyXsOyKtQ== 34710\nINC00L7Qu9C70LDRgNC+0LI= 34711\nINC/0LXRgNC10Lw= 34712\nIFJlYWNo 34713\nbWlyYWw= 34714\nYWx0ZWQ= 34715\nIHN0YXR1dA== 34716\ncmVhZGluZw== 34717\nIHPDtnlsZWQ= 34718\nIExpbmRzZXk= 34719\nIEFobWFk 34720\n67aA6w== 34721\nINCh0LXQs9C+0LTQvdGP 34722\nIHByenlnb3Q= 34723\nIGh5c3Rlcg== 34724\nVVJF 34725\nIE5laWdo 34726\nUmVwb3J0ZXI= 34727\nIEJ1bnU= 34728\nIFRyZWF0eQ== 34729\nIFJhbms= 34730\nIEZhbWU= 34731\naW5pc2hlZA== 34732\nIGdlYXJlZA== 34733\nIGNvbXBvc2U= 34734\nb2RpYQ== 34735\nIExvbg== 34736\nIGplc3RlxZtteQ== 34737\nIERJUkVDVE9S 34738\nIGVsa2Fhcg== 34739\nIFZpZWw= 34740\n15DXqQ== 34741\neW50aGlh 34742\nIG3DqHJl 34743\nIFRvbWF0bw== 34744\nIGV4YXRhbWVudGU= 34745\nbmnEmQ== 34746\nIEZyZWk= 34747\nIERpZg== 34748\nIG9wZW5pbmdz 34749\nIGdyYXBoaWNhbA== 34750\nINGD0LTQvtCx 34751\nINCy0YHQvw== 34752\nIFdlZWtseQ== 34753\n0LXQstCw 34754\nIGhhbmdz 34755\nIHVuc2FmZQ== 34756\nIGVtYmxlbQ== 34757\nIEtvbGxlZ2lubmVu 34758\nYWxheQ== 34759\nIGtzaQ== 34760\nIGhpZGVz 34761\nIG9sbWF5 34762\nIGVudHN0ZQ== 34763\nIGFydGhyaXRpcw== 34764\nw59lcmRlbQ== 34765\nIGJpbm5lbg== 34766\nIGxpc3RlbnM= 34767\nIEhlc3M= 34768\nIExvdWlzZQ== 34769\nbGRlbg== 34770\n0LXQvdGB 34771\nIFZlcnNpb24= 34772\nIEFncmljdWx0dXJl 34773\n7Iqk66W8 34774\n0LzQsNC9 34775\n64Sk7JqU 34776\nIHdpbmVz 34777\nIElORg== 34778\ncnVs 34779\nIEpL 34780\nxLF5b3JsYXI= 34781\nc2hpZWxk 34782\ncmVhdGg= 34783\nIHRlcnVz 34784\nIEx1bQ== 34785\nIGFudGljaXBhdGlvbg== 34786\nIGFjY3VzdG9tZWQ= 34787\nIE1pbmE= 34788\nIHdpZWxk 34789\naW/DqA== 34790\nbWVyYQ== 34791\nIGNvdW50ZG93bg== 34792\nIGNsaW5n 34793\nIGNvbW1lbmQ= 34794\nIGZha3Rpc2t0 34795\nIGRlZmVuc2Vz 34796\nIGNvY2twaXQ= 34797\nINC60L7QvNCw0L3QtA== 34798\nIGRpc2h3YXM= 34799\nIFRoYW5vcw== 34800\nIGtpZG5leXM= 34801\nIHNlaGU= 34802\nIG1pY3JvYmVz 34803\nIGN1ZmY= 34804\nINCy0YvRgdC+0Lo= 34805\nIFNwaWN5 34806\n4K614K6w 34807\nY3VsdXM= 34808\nb3Jj 34809\naXhlcw== 34810\nIENyZWRpdA== 34811\nIHJhag== 34812\nIGJyaW5ndA== 34813\nIE5pc3M= 34814\nIGdyaW0= 34815\nIFNPTA== 34816\nIHRlbmlt 34817\nIFN1ZGFu 34818\nIFNwYXJ0 34819\nIHByb21vdGVz 34820\nIE5vc3Nh 34821\nINGB0L7RgdGC0L7Rj9C90Lg= 34822\nIOywqQ== 34823\nIHVuY29udA== 34824\nIExpYmVyYWw= 34825\nINCi0L7Qu9GM0LrQvg== 34826\nIFZpZWxl 34827\nIGt0w7NyZWo= 34828\nICoqKio= 34829\nTWF4 34830\nINCn0YLQvtCx0Ys= 34831\nMzUw 34832\nIO2YvOyekA== 34833\nIOu2hOuTpOydtA== 34834\nIHdhcnA= 34835\nIHRlbmdh 34836\nIHN5bXBhdGhldGlj 34837\nIGJpemk= 34838\nIFphY2s= 34839\naWVkbw== 34840\nIOuJtOw= 34841\ncGllbA== 34842\nINGC0L7Quw== 34843\nIHNjYWxlZA== 34844\nIFBFVEVS 34845\nIENPTU0= 34846\nIENhbWU= 34847\nIGNhdGFzdHJvcGhl 34848\nIHN3ZWF0eQ== 34849\naWdyYXRpb24= 34850\nIHN0dWZmaW5n 34851\nIM+Azr/Ou8+N 34852\nIERyaXZlcg== 34853\nenlzdA== 34854\nVGVjaA== 34855\nIGFzc2Vzc2Vk 34856\nIFN1cmZhY2U= 34857\nxLFyxLFt 34858\nc3Vy 34859\nbGVyd2VpbGU= 34860\nINC00L7Qsw== 34861\nIHNodXR0aW5n 34862\nIGZyYWN0aW9ucw== 34863\nINGB0L7Quw== 34864\nZXZlcnlvbmU= 34865\nIGVybg== 34866\nINCd0L7Qsg== 34867\nIGRlZmVuZGVycw== 34868\nIHZlcnN1Y2h0 34869\nIHBvbGl0eQ== 34870\nINCf0L7QvQ== 34871\ndmVyc3TDpG5k 34872\nIGJyb3dzZXJz 34873\nIHRyYW5zZm9ybWF0aXZl 34874\nIGRpY3RhdGU= 34875\nIExFR08= 34876\nIG5pbmd1bmE= 34877\n6rSR 34878\nIHBpeno= 34879\nIEhhcm9sZA== 34880\nIExvcGV6 34881\n2r7bjA== 34882\nYW7EsXo= 34883\nYXRjaGV0 34884\n2YrYqg== 34885\nIGxlcm5lbg== 34886\nIOq3gOyXrA== 34887\nIGhvdXNlZA== 34888\nIGNsZWFuc2U= 34889\nIFdBVA== 34890\nbGFyYXRpb24= 34891\nIGJ5dGVz 34892\nIHR1Y2tlZA== 34893\nIGZhdWx0cw== 34894\n0LTQvg== 34895\nRlg= 34896\nIOyWvOuniOuCmA== 34897\nIGRlZm9ybQ== 34898\nIGNvbnRyYWN0aW5n 34899\nIFRJTUU= 34900\naXJzZQ== 34901\nIG5lYmVu 34902\nIGNlcmM= 34903\nIEFybXN0cm9uZw== 34904\nIHRlc3Rlcg== 34905\nIHBhcmZhaXQ= 34906\nIGplYWxvdXN5 34907\nIHRveGlucw== 34908\nIGRpc2JlbA== 34909\n0YPRgNGL 34910\naW1wcmVzc2lvbg== 34911\nIHByb3N0YXRl 34912\nIGZpcmV3YWxs 34913\nIGNsYXNzaWNz 34914\n0LXRh9GM 34915\nIHNvY2lhbGlzbQ== 34916\nIGdyYWNpb3Vz 34917\nINGB0L3QvtCy0LA= 34918\nINC00L3Rjw== 34919\nIGJ1cm5lcg== 34920\nIE1pbm9y 34921\nIOyasOumrOs= 34922\nIGplZGVz 34923\nIGNvbnRpbnV1bQ== 34924\nIGhvdHM= 34925\nIG9jY3VycmVuY2U= 34926\nIGFkbWluaXN0ZXJlZA== 34927\nINC30LDQvNC10YI= 34928\nIGhlc2l0YXRpb24= 34929\nIGRyaWxscw== 34930\nZXJjYQ== 34931\nINCy0YLQvtGA0L7QuQ== 34932\nIHN0ZWFkaWx5 34933\nIGluc2FubGFy 34934\nIGloYW4= 34935\n7ZE= 34936\nIGhlbHBlcg== 34937\nIFNlbmlu 34938\n0L7QstCw0L3QuNC1 34939\nIEVSSUM= 34940\nYmxh 34941\nIEFjYWRlbWlj 34942\nIGh1bWFuaXRpZXM= 34943\nYmxhY2s= 34944\ndW1weQ== 34945\nb3J0ZXg= 34946\nIOygiOs= 34947\nINil2YY= 34948\nIGRpc2Nsb3Nl 34949\nIEVsaWphaA== 34950\nIM67zq0= 34951\nIFF1ZXI= 34952\n2KjZhA== 34953\nVGVsbA== 34954\nYXJsZQ== 34955\n0ZbRgA== 34956\nIGF1Z21lbnRlZA== 34957\nIOu5hOyKtw== 34958\nIGFuZHJvaWQ= 34959\n4KSk 34960\nYXJtYQ== 34961\nIHN6ZXI= 34962\nZ2VvcmQ= 34963\nIGdlZWs= 34964\nIHlldXg= 34965\nIHBvbmc= 34966\nIHRvcnR1cmVk 34967\nIEJhdGg= 34968\nemln 34969\nYXNvbmFibGU= 34970\nIG5ldHM= 34971\nIGJhcnU= 34972\nIEZsYXQ= 34973\nIFZhdGVy 34974\nIFRlcnJvcg== 34975\nIEF2bw== 34976\nIGNlcmVtb25pZXM= 34977\ncm9l 34978\n2YHYsw== 34979\nT3Bz 34980\nIGh5dmlu 34981\nIGFwcmVzZW50 34982\nb2xvcg== 34983\nINC40LPRgNGL 34984\nb3J0b24= 34985\nIOq3uOuerA== 34986\nIGxvb2tpbg== 34987\nIFRZ 34988\nIE1pbnQ= 34989\nQWRk 34990\nIG1pdGU= 34991\nIFNtb2tl 34992\nIG5vdGE= 34993\nIG1vc3M= 34994\nIEFiZW5k 34995\nIOy7qA== 34996\nIGV4YWdnZXJhdGVk 34997\nZmlyZXM= 34998\nIHJlZGlzdA== 34999\nZmZpdGk= 35000\nIG9wZW5uZXNz 35001\n6rCQ7J20 35002\nZW5kZXU= 35003\n0LXQvdC90L7QuQ== 35004\nV2F0Y2g= 35005\nIGF2YXRhcg== 35006\nIFBleQ== 35007\ndXJ1bg== 35008\nIHNlbnph 35009\nIOyngOyXrQ== 35010\nIE5hdG9taWFzdA== 35011\nIGVtZXJnZW5jZQ== 35012\ncmF5cw== 35013\nIGNyYWZ0ZWQ= 35014\nZ2FyeQ== 35015\nw7xuZw== 35016\nLSI= 35017\nIGhhY2tlZA== 35018\nIHN0cmF5 35019\nZW5jaWU= 35020\nZW1v 35021\nIGNvbWVu 35022\nIEvEsXo= 35023\nIEphc21pbmU= 35024\nIEhpbmRp 35025\nbWFuYXM= 35026\nIGluZmluaXRlbHk= 35027\nZW1vbg== 35028\n7J24642w7JqU 35029\namFr 35030\nIHJvYXJpbmc= 35031\nw6lyaXF1ZQ== 35032\nc3dlaXNl 35033\nIFJvbGV4 35034\nIFN0dWFydA== 35035\nYm5i 35036\nIGRpYWdub3Nl 35037\nIGNvaGVyZW50 35038\nIE1K 35039\nIHBpa2U= 35040\nbGF2 35041\nIG9yY2hlc3RyYWw= 35042\n0LDRgdGC0Lg= 35043\nIHRlcm1pbmFy 35044\nIGdhdGhlcmluZ3M= 35045\nIGNvbXBsaWFudA== 35046\nIHVwZ3JhZGluZw== 35047\nIHJlZ3VsYXRvcg== 35048\nIGxhbsOn 35049\nIG1lcmNoYW50cw== 35050\ndGF3YQ== 35051\nIG1vbml0b3JlZA== 35052\nIHJlbmRyZQ== 35053\nIHVudGVyd2Vncw== 35054\nYW5ndWFyZA== 35055\nZ2FyZA== 35056\nIEJlbG93 35057\nZHVpbm8= 35058\nINCm0LU= 35059\nIGltcGVkYW5jZQ== 35060\n7Jyh 35061\nIGFrdHVlbGw= 35062\nIFZhdGlj 35063\nIHN0ZXdhcmRz 35064\nIGJyaWdodGVzdA== 35065\nIGtlbm4= 35066\nIGthdQ== 35067\nIE1hdHJpeA== 35068\nIEJhcms= 35069\nIPCfkQ== 35070\nIHRhcGVy 35071\nIGNhc2lubw== 35072\n16jXlA== 35073\neXNpY2Fs 35074\nIGJ1aWxkZXJz 35075\nIGN6xYJvd2ll 35076\nIE5lcGFs 35077\nICEi 35078\nIHRlcm1l 35079\nIGlubnljaA== 35080\nIG1hdGhz 35081\nIGRyYWZ0ZWQ= 35082\nIEJhbGs= 35083\nIGhlc2l0YW50 35084\nIHZvbHRhcg== 35085\nIHJldml2ZQ== 35086\nINGE0LjQu9GM0LzQsA== 35087\nIGFzc2Fzc2lu 35088\nIFNvbHV0aW9ucw== 35089\nIGR1ZWw= 35090\nIGJlYXJpbmdz 35091\n4LiE4Liw 35092\nIHJvb2tpZQ== 35093\naWthdA== 35094\nIGJpc2N1aXRz 35095\nIGNvcmRz 35096\n0YPQstCw0YLQuA== 35097\nQVJJTg== 35098\nIHByb2dyZXNzaW5n 35099\nIEdpcg== 35100\nIHBlbmV0cmF0ZQ== 35101\nIFN0b3JhZ2U= 35102\nZWlnaHQ= 35103\nINGC0YDRgw== 35104\nIGRvbsOtdA== 35105\nIHNpemlu 35106\nIG91dGRhdGVk 35107\nINC90LDRiNC4 35108\nIGFmZmly 35109\nIHNwb29ucw== 35110\nIG9uaQ== 35111\nIGZsYW5r 35112\nIEdvbA== 35113\naMOj 35114\nIHDDqXJp 35115\nIGhvbm9yYWJsZQ== 35116\nIEJyZWF0aGU= 35117\nc2NlbmVz 35118\nIG9idmlhbWVudGU= 35119\n0LjQutGB 35120\nINep157X 35121\nIHNtb290aGll 35122\nnojr 35123\nIGRpbWU= 35124\nIO2WiOyWtOyalA== 35125\nIGFwcGVs 35126\nIENhdGhvbGljcw== 35127\nIHNpbmdsZXM= 35128\nIGxhdGVu 35129\nIMOnw7xua8O8 35130\nIFZhZGVy 35131\nIHZhcmTEsQ== 35132\nIElzdGFuYnVs 35133\nZ3LDqQ== 35134\nIEVsc2E= 35135\nw6ts 35136\nIGludmVjZQ== 35137\nIGNyYW5l 35138\nIG9iZQ== 35139\nIFNoYXJr 35140\nIHNtYWNr 35141\nIHJlc3RvcmluZw== 35142\nLlw= 35143\nIOu5oOs= 35144\nIGZhZGVk 35145\ndW1iZXJz 35146\nU2luZ2luZw== 35147\nIGRlcHJlc3Npbmc= 35148\ndGhlc3Q= 35149\nIFdhaHI= 35150\nIG11bHRpdHVkZQ== 35151\n0YDQsNCy0YHRgtCy0YPQudGC0LU= 35152\ncmlqaw== 35153\nZWth 35154\nIGNvbXBsZXRlcw== 35155\nIFdlbGxz 35156\nIHJveQ== 35157\nIFByYXk= 35158\nIEthbGF1 35159\naXppbg== 35160\naWHFgmVt 35161\nIGxvY29t 35162\nIE5hc2h2aWxsZQ== 35163\nIFBlbnRhZ29u 35164\n66+4 35165\nIE5FVw== 35166\nxIXEhw== 35167\nw61zcw== 35168\nIG1hcnJ5aW5n 35169\nIGZldWQ= 35170\n7ZmV 35171\nKSE= 35172\nIE9wZXJhdGlvbnM= 35173\n0YPRlA== 35174\nIG1vamU= 35175\nIGluc3RydWN0ZWQ= 35176\nIOuIhOq1rA== 35177\nINeU15I= 35178\nINC/0L7QvNC+0YnRjNGO 35179\nIHNhYmlh 35180\n7JWY7Ja07JqU 35181\ncGxhbmU= 35182\ncHJp 35183\nINC/0L7Qu9C90L7RgdGC0YzRjg== 35184\nIEtpdHR5 35185\nIHByw7Nwcmlv 35186\nZWRlcmU= 35187\nIGludGVyZXNhbnRl 35188\nINC00LU= 35189\nIGNvbmRlbnNlZA== 35190\nIGF2ZW50 35191\nVE9S 35192\nIGdyZWFzeQ== 35193\nQVJL 35194\nb3J0YQ== 35195\nQUo= 35196\nIGRpc3JlZw== 35197\nIGNvcnJlY3Rpb25z 35198\nIHN0ZXJv 35199\nIGluZmx1ZW56YQ== 35200\nIGRlc3Nlcw== 35201\nIGJhbGxvdHM= 35202\nIG1lZ2V0 35203\nIG1hZmlh 35204\nIGLDtmw= 35205\nbm9zdA== 35206\nINGB0YLQsNGC0Yw= 35207\nIHJlc3BvbmRlcg== 35208\nIGhpbnRlbg== 35209\nZ3Jhdg== 35210\n4Lit4Liw 35211\neW5jaHJvbg== 35212\nIHZpZW5z 35213\nIHNhbW8= 35214\nIGR0 35215\ncGFubnQ= 35216\nIMWbd2lhdA== 35217\nINC30LDQv9C40YE= 35218\nIG1lcmdlZA== 35219\nIGtlcA== 35220\nIG1pc2xlYWRpbmc= 35221\nIGRpZ2Ftb3M= 35222\nIGFtbW9u 35223\nY2hldA== 35224\nIOqwgOyguA== 35225\nIHVuaQ== 35226\nIOuQmOuKlOuNsA== 35227\nINC90LDQv9GA0LDQsg== 35228\nINC60L7RgtC+0YDQvtCz0L4= 35229\nIGFuaW1hdGU= 35230\n15XXkNc= 35231\n0LXRgNCy 35232\nIG1pbmNlZA== 35233\nIGthdW0= 35234\nz4DOtQ== 35235\n0LvQtdCz 35236\nZXhpc3Rpbmc= 35237\nIHBsYXRhZm9ybQ== 35238\nIEtSSVM= 35239\n7Jug 35240\nIEZhbWlsaWVu 35241\nIExpYnlh 35242\nIGJpb2RpdmVyc2l0eQ== 35243\nIGlkaW90cw== 35244\naXJkaQ== 35245\nIHN6eWI= 35246\nIFJvbGxpbmc= 35247\nw7xjaHQ= 35248\nINGD0LTQuNCy 35249\n0YHRg9C0 35250\nIHJlYWxpemFy 35251\nIGNhbm5lZA== 35252\nINGA0LDQvQ== 35253\nIG1ldGFib2xpYw== 35254\nIEJlZWY= 35255\nIGtpbGth 35256\n0LvRjtGB 35257\nIHJlZ2lzdHJ5 35258\n0LzQvtGC0YDQuNGC0LU= 35259\nIHZpZWzDpA== 35260\nIG9kYw== 35261\nIGNvbmRlbW5lZA== 35262\nZmFs 35263\nIERpbA== 35264\nd2/Fm2Np 35265\nQXc= 35266\nIHN0YXRpc3RpY2FsbHk= 35267\nIHNvZ2Vu 35268\nIEJFVEg= 35269\nIHNoYXZpbmc= 35270\nb2NhbA== 35271\nIEZ1bm55 35272\nIHBlYWNlZnVsbHk= 35273\nIGFkZGljdGl2ZQ== 35274\nIEluc2VydA== 35275\nbGF1Zg== 35276\nIGV4cGVyaWVuY2lh 35277\n0LjRgtC10LvRjw== 35278\nw61nZW4= 35279\nw6FnaW5h 35280\nIGFiZG9tZW4= 35281\n7ZWc64uk 35282\naWN1cw== 35283\naW1hbmE= 35284\n7I2o 35285\nYXJjaGluZw== 35286\nIGtvbmtyZXQ= 35287\n7JWY6w== 35288\n0LXQutCw 35289\nb3VmbA== 35290\naXZlbA== 35291\nIG51ZGU= 35292\nw6h0cmVz 35293\nIG1vbnNpZXVy 35294\nIGNsYXNo 35295\nIHRoZXJhcGlzdHM= 35296\nIGN1YmVk 35297\nIHJldHJvdXZlcg== 35298\nIHdhdmVmb3Jt 35299\nIHBvdGVt 35300\nIEZvcm1lcg== 35301\naXNpw7Nu 35302\nINeQ150= 35303\ndW5kb3M= 35304\nIE1laW51bmc= 35305\n2LXZhA== 35306\nIEp1ZGU= 35307\nIG7DpXI= 35308\nIExlb25hcmRv 35309\nIENyaXN0bw== 35310\nIEdPVA== 35311\n0YHRgtGA0YPQug== 35312\nTEFO 35313\nIGfDpW5n 35314\nIGTDqWI= 35315\nIEZyYW5rZnVydA== 35316\nIGNyYXBweQ== 35317\nIGxpbA== 35318\nYW5uw6ll 35319\nINC80LXRgdGC0LU= 35320\nUkVU 35321\nIE5lcg== 35322\nIENPU1RB 35323\nIGplZGVt 35324\nIGN1cnRhaW5z 35325\nIGl0ZXJhdGlvbnM= 35326\nIHVuYXY= 35327\nIHBsYXF1ZQ== 35328\nb3J1bQ== 35329\nIM62 35330\nIG7Dum1lcm9z 35331\nIGRlc2Fw 35332\nsr0= 35333\nIGNvbXBpbGVk 35334\nIHJlZmxl 35335\nIHJhbmtpbmdz 35336\nIHJlcGFpcmVk 35337\nINCd0LDQv9GA 35338\nIGRvd25sb2Fkcw== 35339\nIGFybW91cg== 35340\nINeZ15XXqteo 35341\nIGxvbmdldml0eQ== 35342\nIFRPTkVS 35343\nINC60L7QvNC80LXQvdGC0LDRgA== 35344\nIGN6ZWdv 35345\nIG5vdGlmeQ== 35346\nIGFpcnBvcnRz 35347\nIGVuZHVyaW5n 35348\nbGV0dGU= 35349\nIGFwcGFyYXQ= 35350\nIGhhYmls 35351\n4buHYw== 35352\nbmFk 35353\nSUNP 35354\nIEJyYWg= 35355\nIHNlZ8O6bg== 35356\nIGdvdmVybm9ycw== 35357\na2FoYQ== 35358\nIFNjaGx1c3M= 35359\nIG9kcG93aWVk 35360\naXJ0aW5n 35361\nIHJlbXBs 35362\nIEFib3JpZ2luYWw= 35363\naWRlbnRhbGx5 35364\nIGVuaGFuY2luZw== 35365\nbGljdGluZw== 35366\nIEhhd2FpaWFu 35367\nIHN0cml2aW5n 35368\nIE5pZXQ= 35369\nIHpuYWN6eQ== 35370\nIG9iZWRpZW5jZQ== 35371\nIG7DpWdvdA== 35372\nIGV4cGlyZWQ= 35373\nIDE5MTg= 35374\ncHJlc2VudGVk 35375\nIHByb3dhZA== 35376\nIFRlcnI= 35377\nIFByaW5jZXRvbg== 35378\nIG1vcmdlbg== 35379\nIGF0dHJhY3Rpbmc= 35380\nIFNpZ21h 35381\naWduZXI= 35382\nIFJlY2h0cw== 35383\nIFBla2k= 35384\nIG1ldGh5 35385\nIGhhbW0= 35386\nIGRpcmVpdG8= 35387\nIGRlbGVnYXRpb24= 35388\n0LjQstCw0Y7Rgg== 35389\nIGdpbg== 35390\nWW91bmc= 35391\nIGRlcGVuZGVuY2llcw== 35392\nIEJyYWRsZXk= 35393\nYnVkcw== 35394\nIGZpcw== 35395\nIHB5dGFuaWU= 35396\nIGludGVyY29ubmVjdGVk 35397\nIGVtYmFpeG8= 35398\nIFNhcw== 35399\nIHJ1aA== 35400\nIFNpY2h0 35401\nU3Vy 35402\nIHN1cGVyYg== 35403\nIFNhYmJhdGg= 35404\nIERhbmdlcg== 35405\na29s 35406\nIGhvdQ== 35407\nc3VwcA== 35408\nIE5hY2lvbmFs 35409\nIHN1Y2Nlc3Npb24= 35410\nIHbDoQ== 35411\nIE1hw59uYWhtZW4= 35412\nIEplc3NpZQ== 35413\nIElkYWhv 35414\nZm9yZXN0 35415\nhZg= 35416\nINee15M= 35417\nINij2Yo= 35418\nIHN3ZWV0aGVhcnQ= 35419\nIG5lYXRseQ== 35420\nIEV2YW5nZWw= 35421\n6rOh 35422\nIFN1aXRl 35423\nw7pibGljYQ== 35424\nINGD0LvQuA== 35425\nIEFubm91bmNlcg== 35426\nbGlnaA== 35427\nIHNlbnNhdGlvbnM= 35428\nIHNoZWx0ZXJz 35429\nIGhhcnQ= 35430\nIHNxdWVlemluZw== 35431\nIFJpdmVycw== 35432\nIENvb2tpbmc= 35433\n7LGF 35434\ncGVyc29uYWw= 35435\nIG1hbm9z 35436\n0ZHRgtGB0Y8= 35437\nd2lq 35438\nIGdvZ2c= 35439\nIE1pbGxp 35440\nIEZQ 35441\nw7xuc3Q= 35442\nIExT 35443\nIHNwcmF5aW5n 35444\nIGZhdXg= 35445\nIGF1dG9ncmFwaA== 35446\nb2xvZ2lj 35447\nIHRvcm1lbnQ= 35448\nIGVuY3J5cHRlZA== 35449\n4buF 35450\nIGVzdHJl 35451\n4LE= 35452\nIHN0dW1ibGVk 35453\nIGFpZGVy 35454\nIHNhYmVu 35455\neHRlcg== 35456\nIENpdGllcw== 35457\nIFTDvHJr 35458\n64ul 35459\nY2hpbmU= 35460\nIHRvcHBpbmc= 35461\nIHBvaXNvbmVk 35462\nIFJvbWFuaWE= 35463\n15PXmQ== 35464\ngOuhnA== 35465\nINC/0L7RgNGP0LQ= 35466\nIGNoaXJwaW5n 35467\nIOyZhOs= 35468\n15HXog== 35469\nIGN1YW50bw== 35470\nIGRvbmF0aW5n 35471\nIFJlZ2VudA== 35472\nIEJlcnVm 35473\nIGRpc3RyYWN0aW5n 35474\nIHN0YW1pbmE= 35475\nIERhcnJlbg== 35476\nIOy2lQ== 35477\nbGlzdHM= 35478\nZGFs 35479\nY2h1c3M= 35480\nIGVjb25vbWlzdA== 35481\nb3JndA== 35482\nIGlzdGl5b3J1bQ== 35483\nIFN1cnByaXNl 35484\nIEhhbw== 35485\nIOy1nOqzoA== 35486\nIEdX 35487\nIElubmVy 35488\nIHF1aWVyZW4= 35489\nIG1pbmRlZA== 35490\nIHN1cGVyY29tcHV0ZXI= 35491\nIGRpYWdyYW1z 35492\n7Yqc6w== 35493\n6rKg7Ja0 35494\nINC+0LHRitGP0YE= 35495\nIGVzdGFiYW4= 35496\nIGRlc3Ryb3lz 35497\nIEJyZWFraW5n 35498\nIGthcsSxxZ8= 35499\nIHJlYnVpbGRpbmc= 35500\nnOuMgA== 35501\n0LvQuNCy0L4= 35502\nIFNhdWNl 35503\nIEZ1c2lvbg== 35504\n15XXntc= 35505\nIFF1aW5u 35506\nIGdhdWNoZQ== 35507\nINmI2KM= 35508\nIMg= 35509\nIHRlY2hubw== 35510\nIGRpc3BhdGNo 35511\nIGHFn2s= 35512\nIGVpbnplbA== 35513\nIEdtYWls 35514\n554= 35515\nIOqwnOyduA== 35516\nINGB0LXQvNGM 35517\nIGpvdXJuZXlz 35518\nIGlodA== 35519\nIGZpYnJl 35520\nIGRyYW1hcw== 35521\nb3VjaGVk 35522\nIHJlbmFtZQ== 35523\nINC+0L/QtdGA 35524\nIHBvbw== 35525\nIERydQ== 35526\nINC40YLQvtCz 35527\nIHphc3Q= 35528\nIGNveg== 35529\nIHp1Y2No 35530\nIG9idGFpbmluZw== 35531\nIGNvbW11dGU= 35532\nIHN1Ym1lcg== 35533\nIFZpc2g= 35534\nIFJhYmI= 35535\nb2dn 35536\nIGh1dA== 35537\n7ZaI7Ja0 35538\nZXJlbWk= 35539\nIM68zrE= 35540\nIGRpc2t1dA== 35541\nINCx0YPQug== 35542\nIGltcGFpcmVk 35543\nZGVwZW5k 35544\nINmI2Kc= 35545\nINGA0YPQug== 35546\nINCx0LDRgA== 35547\nIG94aWRhdGlvbg== 35548\nIHNpdHVhw6fDo28= 35549\nyZlu 35550\ndcOnw6Nv 35551\nIHNhZ3Rl 35552\nIFNFUg== 35553\nIENha2U= 35554\nIHR1cm1lcmlj 35555\nIEthaw== 35556\nYnVuZw== 35557\nIEvhuZvhuaPhuYdh 35558\nIHBvaXNvbmluZw== 35559\nIHNsaXBwaW5n 35560\nIFNheXM= 35561\nw7JuZw== 35562\nwqs= 35563\nIENsYXVkaWE= 35564\nIENoYXJhY3Rlcg== 35565\n0L3QuNGG 35566\nY29hdA== 35567\nIHByb2dyZXNzZWQ= 35568\nIEZlcmd1cw== 35569\nIOyYpOuK 35570\nIG9hdA== 35571\nb3JkYWJsZQ== 35572\nIExleQ== 35573\nIEhlcmF1cw== 35574\nIHJlc3VsdGFkb3M= 35575\nIEtheWxh 35576\nIHJpZmY= 35577\nIGNoZWdvdQ== 35578\nIHhp 35579\nIHNwYWNpb3Vz 35580\nIHJlY29nbmlzZWQ= 35581\nIGVjaA== 35582\nIFRpZQ== 35583\nIGxhdW5jaGVy 35584\nSmlt 35585\nIHN1cHByZXNzaW9u 35586\nIEltcG9zc2libGU= 35587\nIGd1aXRhcnM= 35588\nIEZvdXJpZXI= 35589\n0LjRh9C10YHQutC40Lk= 35590\nIFRoZXJhcA== 35591\nIEthZg== 35592\nY2VudGVyZWQ= 35593\nINGB0L7QvtGC0LLQtdGC 35594\nIGtsaW0= 35595\nIGNhcmJvaHlkcmF0ZXM= 35596\naWduYW50 35597\nIEFzdHJvbg== 35598\nIGVtcGxl 35599\nIGRyYXN0aWM= 35600\nINC80LjRgNC1 35601\n0LLQuNC9 35602\ndXc= 35603\nIHByZXR0aWVy 35604\nIGRvbnV0cw== 35605\nIEF0aGVuYQ== 35606\nIGRpc3NlcnQ= 35607\nIHBsYW50ZQ== 35608\nIHVyYW5pdW0= 35609\n7J2M6w== 35610\nYXLDqQ== 35611\nIHJ6ZWN6 35612\nIGRpc3BsYXlpbmc= 35613\nIHNhcmM= 35614\ncsOjbw== 35615\nIHRhbXBvY28= 35616\nIHBoaWxvc29waGVycw== 35617\nIFJlY2h0 35618\nIGNvbWVudGFyaW9z 35619\neXNl 35620\nIOycpA== 35621\nIG1pc2U= 35622\nIEdpbg== 35623\nINC90L7QvA== 35624\nIEZST00= 35625\nbGluZXI= 35626\nYXRpZg== 35627\nIHNwb8WCZWM= 35628\neGE= 35629\nINGC0YDRg9C0 35630\nIHdhZw== 35631\n6riw7JeQ 35632\nIE1H 35633\nIG9mZnNwcmluZw== 35634\nIFVuZGVyc3RhbmRpbmc= 35635\nT1JB 35636\nIHdoaXJyaW5n 35637\nIHN1cnJlbmQ= 35638\nIHBva2Vy 35639\nIG1vbnVtZW50cw== 35640\nIOKZqQ== 35641\nIG9yZ2FuaXNlZA== 35642\nIFNvemlhbA== 35643\nIEZhY3Rvcnk= 35644\n0YXQsA== 35645\nIHJlc2VtYmxl 35646\n0LfQtA== 35647\nIGV4cGxvc2lvbnM= 35648\nIHBheXJvbGw= 35649\nIG9tbg== 35650\nIEpvcmdl 35651\nzrnPgw== 35652\nIGZyYWN0dXJl 35653\nIHBlcnNlY3V0aW9u 35654\nIGRlbWFpcw== 35655\nRUNI 35656\nLCk= 35657\nIGNyaWFy 35658\nIEpPU0g= 35659\nIGRlbW9ncmFwaGljcw== 35660\nIDE2MDA= 35661\nIGN1cnJlbmNpZXM= 35662\nIFRpcHM= 35663\nIFJlZmVy 35664\nIERhbmNpbmc= 35665\nIGluY29uc2lzdGVudA== 35666\nIGRlaA== 35667\nIGltbWVucw== 35668\nIG1laXN0 35669\nIGltcGF0aWVudA== 35670\nIGJlaGF2ZXM= 35671\nIOuCtOyaqQ== 35672\nIGJhY2tzdG9yeQ== 35673\nIGFncmVlaW5n 35674\nIMWB 35675\naWhpbg== 35676\nIHRlbXBlcmF0dXJh 35677\nIEJhY2tncm91bmQ= 35678\nIG51dHplbg== 35679\nIOuFuQ== 35680\nIE3DpG5uZXI= 35681\nIGNvbGxhYm9yYXRpb25z 35682\nIEtvcw== 35683\nIG5pZ2h0bWFyZXM= 35684\n65Ox 35685\nIFF1ZWVuc2xhbmQ= 35686\nIGFzc29jaWF0ZXM= 35687\nIEtvaw== 35688\nIGZhY3RvcmlhbA== 35689\nIEh5dW5n 35690\nIOq3uOuLpOydjA== 35691\nIGZpbGhv 35692\nIGVsw6l0 35693\nIO2WieuztQ== 35694\nsLE= 35695\nIGdlZnVuZGVu 35696\nIHNlbWljb25kdQ== 35697\nIGNvdW5zZWxvcnM= 35698\nIFVwcGVy 35699\nIEF1Yg== 35700\naWNrZXJz 35701\nVmVy 35702\nIG5vcnRod2VzdA== 35703\nIE1haW50ZW5hbnQ= 35704\nIExha2Vz 35705\n0LDRj9Cy 35706\naW50w6k= 35707\n7LC9 35708\nINCz0LDQtw== 35709\nIGdpb3Ju 35710\nIGRpZ2l0YWxseQ== 35711\nIENpcmN1aXQ= 35712\n7LyA 35713\nIGNoZWVyZnVs 35714\nIFBldGVyc29u 35715\nIERhbmlzaA== 35716\nYXRpdm9z 35717\nIGxpa2Vu 35718\nIGhhcmJvcg== 35719\n0LDQu9C40YHRgg== 35720\neGU= 35721\nIGN1cmxz 35722\nIFJob2Q= 35723\nRW5k 35724\nIEVU 35725\nIGFjcXVhaW50 35726\nIEtlbHZpbg== 35727\nIHRyaWY= 35728\nIEF3YXk= 35729\n7J6Q64qU 35730\ndnM= 35731\nIHDDoWdpbmE= 35732\nIGlubGV0 35733\nIFNhbnRvcw== 35734\nIOyasOyZgA== 35735\nIHlhcMSxeW9yc3Vu 35736\ndGhlbWU= 35737\nIHNvdWZm 35738\nIGluamVjdGVk 35739\nIHDDs8W6bmllag== 35740\naXZlcnNv 35741\nYW1wZWQ= 35742\nIGRhaGVy 35743\nIGRhZ2dlcg== 35744\nINC70Y7QsdC40Lw= 35745\nIHR1bW15 35746\nIGVubGlnaHRlbmVk 35747\nY2VudHM= 35748\nIERhaA== 35749\nIGN1ZXN0 35750\nSUxZ 35751\nINeR16g= 35752\nIGJhbmdpbmc= 35753\nIEVtaWw= 35754\nIENsZXI= 35755\nIEJvcmRlcg== 35756\n0LjQttGD 35757\nIHByZXNlbnRlcnM= 35758\nIFNUVUQ= 35759\nY29pbnM= 35760\nIO2ZjQ== 35761\nIHBlcmtz 35762\nIHBhcmFw 35763\nIGNlcnRhaW5lcw== 35764\nIExvcmU= 35765\nw7ZzdA== 35766\nIE1BUlRJTg== 35767\nIGJpb3M= 35768\nIHdoZXJlYnk= 35769\ndmVydHM= 35770\nIE1pcmFuZGE= 35771\nIHN0aXA= 35772\nYW5kZXo= 35773\n15vXnA== 35774\ndWppbg== 35775\nIOq+ 35776\nIGFsbGVyZ2llcw== 35777\ncGxhdGU= 35778\nIHlhcMSxbA== 35779\nIHVuZGVydGFrZQ== 35780\nIOuCmOqwgA== 35781\nUGFydA== 35782\nIGvEsXrEsW0= 35783\naGd1cnU= 35784\nIEpvaG5z 35785\nIGV5ZWxhc2hlcw== 35786\nIGRyYWluZWQ= 35787\nIHN0w6Vy 35788\nIEphZGU= 35789\nIGNhbGVuZA== 35790\nZmlsbQ== 35791\nIG1lc2E= 35792\nIGx1ZHppZQ== 35793\nIGF0dHJhY3Rz 35794\nIGp1aWNlcw== 35795\nINC60LjQuw== 35796\nIG5pZXV3ZQ== 35797\nIG1lbmNpb24= 35798\nIGlnbml0aW9u 35799\nIGJsYWRkZXI= 35800\nYW5kYWFn 35801\nIEV4dGVuc2lvbg== 35802\n7YKo 35803\nZmVlZA== 35804\nINmI2Yc= 35805\nIHNwdW4= 35806\nIHTDpHQ= 35807\n0L7RgNC+0YI= 35808\ndHlhcmQ= 35809\ncm9uaWNz 35810\nIEh1Z2U= 35811\n0YPQttC0 35812\nc3RyaW5n 35813\nIHVuanVzdA== 35814\nIHByYXdu 35815\nIGZyb3N0aW5n 35816\nIGRpc2FwcGVhcmFuY2U= 35817\naW9zYQ== 35818\nIGNhcmRp 35819\nIFByaWVzdA== 35820\nIGNpZW50w61maWM= 35821\nINCS0LDRgQ== 35822\nIOu2gO2DgQ== 35823\nIHRoaWV2ZXM= 35824\nIHBoeXNpcXVl 35825\nIEV1Z2VuZQ== 35826\nINCx0LvQuNC3 35827\nIG1vbm9wb2x5 35828\nIGJpb2dyYXBoeQ== 35829\nIGhvxZ8= 35830\nIHTDtg== 35831\nbWFj 35832\nIHNob2Nrcw== 35833\n7IS46w== 35834\naGl0 35835\nIHNudWc= 35836\nIGluY2w= 35837\nIGRlZGlj 35838\nIHVsdHJhcw== 35839\nINC40LfQstC10YHRgg== 35840\nIHV0aWxpemF0aW9u 35841\nINGB0L7QstC10YDRiNC10L3QvdC+ 35842\nIHNlcnZp 35843\nc3RhZw== 35844\nMTgw 35845\nIHNld2Vy 35846\nIENob2ljZQ== 35847\nIGRpc2NoYXJnZWQ= 35848\nIEpE 35849\n0L7Qu9C10YI= 35850\nINC60LLQsNGA0YLQuA== 35851\nIHRlbGVzY29w 35852\nIEplxZtsaQ== 35853\nIE5hbmE= 35854\nY2FsZQ== 35855\nINGC0L7QvQ== 35856\nbW1t 35857\nIGdlaGFidA== 35858\n64Kg 35859\n4LiZ4LiZ 35860\nIGV0aGVy 35861\nIHplbg== 35862\nIHJlc2VhcmNoZWQ= 35863\nIEN6eWxp 35864\nd29ya2Vycw== 35865\nIOqyveywsA== 35866\nIHNoZXJpZmY= 35867\nYWxsbw== 35868\nIHRpcG9z 35869\nIHByb3NlY3V0aW9u 35870\nIGZyb2dz 35871\nIGZhbHQ= 35872\namQ= 35873\nIO2MlA== 35874\nIGZpbHRlcmVk 35875\nIE9mdA== 35876\nIOyN 35877\nIGRpc2Zy 35878\nIE11c3Rhbmc= 35879\nIHdvYWg= 35880\nIFJFQUxMWQ== 35881\nINC80L7Qs9C70Lg= 35882\nIGVudHJhZGE= 35883\nINC40LPRgNCw 35884\nIG1peGVz 35885\nINCw0LLRgtC+0LzQvtCx 35886\n0Jk= 35887\nIHNoaW4= 35888\nIHBhcmFub3JtYWw= 35889\nIHNvbWVwbGFjZQ== 35890\nIGRpc2hvbg== 35891\nZXRhYW4= 35892\nIGZ1ZXJ0ZQ== 35893\n2bk= 35894\nIGRvb20= 35895\n7Iic 35896\nIGV4aXN0ZW50aWFs 35897\nIGJ1bGQ= 35898\nIFNESw== 35899\nINC/0YDQsNCy0LTQsA== 35900\nIHR1cm5vdmVy 35901\nIOyXrOq4sOyXkA== 35902\nIOCkuQ== 35903\nIG1vZGVsZWQ= 35904\nIGJ1Z8O8bg== 35905\nIGV4cGVyaW1lbnRhdGlvbg== 35906\nIG1vcm5pbmdz 35907\nIG1lZG8= 35908\nU3Rldmll 35909\nIHBsYXlhYmxl 35910\nIGFpcmxpbmVz 35911\nZ21lbnRz 35912\nIOq4sOu2hA== 35913\nIFRvbWI= 35914\nIE1WUA== 35915\nQVVESUVOQ0U= 35916\nIGNoZWNrb3V0 35917\nIHBhc3N0 35918\nIGJlaXNwaWVs 35919\nIExpbmtz 35920\naGVhdnk= 35921\nIHF1ZXN0aW9uYWJsZQ== 35922\nIOyTsOs= 35923\nIHNpbGw= 35924\nIG1hbmlwdWxhdGVk 35925\nIExvcmVu 35926\nIOycvA== 35927\nIHZlcmdl 35928\nw6Fr 35929\nSUVT 35930\nIHNhYm90 35931\nIEN1c3RvbWVy 35932\nYWxlxbx5 35933\nIG5vbWluZWU= 35934\nIEdhZA== 35935\nIG5vdXZlbGxlcw== 35936\nIFNQRQ== 35937\naXN0bGluZw== 35938\nIG92YWw= 35939\n0L7QsdGA0LDQtg== 35940\naWZ0eQ== 35941\nIGJlemVs 35942\neWV0 35943\nIGZyZWlnaHQ= 35944\nIEhhbsSxbQ== 35945\ncsOtYQ== 35946\nIHpvbmluZw== 35947\nIGluZGVt 35948\nIELDvA== 35949\nIGZlbWluaXNt 35950\nIHZvaXg= 35951\nIG9maWNpYWw= 35952\nIGRpeW9ydW0= 35953\nu5A= 35954\nIGFyb3Nl 35955\nIHBhcmFy 35956\n7J247KeA 35957\nIE1hcnRpbmU= 35958\nIExlY3Q= 35959\nIHJlc3Rlcg== 35960\nIGRyb3duaW5n 35961\ndXlh 35962\nY2lkYQ== 35963\nIEFyaWVs 35964\nIDAy 35965\nINeU15Q= 35966\nIFdlcnQ= 35967\n0KLRiw== 35968\nIHdpZG93 35969\nIHBhcmNobWVudA== 35970\nIGNvdHRhZ2U= 35971\nIFhM 35972\nIFNsYWNr 35973\nIE5FUw== 35974\nIHJvYmU= 35975\nIGdpbW0= 35976\nIGNhbWluaG8= 35977\nIEhhcnBlcg== 35978\nIGNpdHJ1cw== 35979\nIGZpcmVmaWdodGVycw== 35980\nIGRvcGFtaW5l 35981\nZWxldHM= 35982\nIGRlbW9jcmF0 35983\n7KCc66Gc 35984\nIHBsYXliYWNr 35985\nb2o= 35986\nINC/0YDQvtC6 35987\nIFN1bGxpdmFu 35988\nc2VtYmxl 35989\nIFdvcnRo 35990\nIE11c3RhZmE= 35991\n4Liy4Lij 35992\nIG1ldHM= 35993\n0LvQvtGB0Yw= 35994\nIGluZXJ0aWE= 35995\nIHVuaWZvcm1z 35996\nw6lyaW8= 35997\n15XXqNeU 35998\nw6ludA== 35999\nIOCukg== 36000\nINGB0LDQvNGL0YU= 36001\nIHZvdWxhaXM= 36002\nIFppbW1lcg== 36003\n6rKg6w== 36004\nINC90L7RgQ== 36005\nZW5jaWFz 36006\nIHJlbGFjacOzbg== 36007\nIOqxuOs= 36008\nIGZhY3Rpb24= 36009\nIGdvc3A= 36010\n0L/QvtC70L7Qtg== 36011\nbmFw 36012\naGFr 36013\nIHByb2NlZWRpbmdz 36014\nIOyGlA== 36015\n7JWE64uI 36016\nIOyekOq4sA== 36017\nIHdlcmQ= 36018\nIHNvZg== 36019\nIHNjaGxpbQ== 36020\nIGZsYXZvcmVk 36021\nIHF1YWRyYXRpYw== 36022\nIEJvb3Q= 36023\nIHB1YmxpY2l0eQ== 36024\nIENhcm8= 36025\nID8i 36026\n0L3QuNGG0LA= 36027\nbWFuaWE= 36028\nIFNVUg== 36029\nIEJVUg== 36030\nbGFuY2U= 36031\nw6l0aWNh 36032\nIHpvYmFjenk= 36033\nIHRyaW8= 36034\nc2FtYQ== 36035\nIHRhxZ8= 36036\nIGFzeW1t 36037\ncmVzc2Vy 36038\nINiq2Lk= 36039\nINC/0LXRgQ== 36040\nIGJlZ2lubmluZ3M= 36041\nbGFkxLFt 36042\nINCx0YvRgdGC0YA= 36043\nIG1vbw== 36044\nIEdlbmV2YQ== 36045\nZXJ1cw== 36046\nYm9yYWg= 36047\nIHJlZnVzaW5n 36048\nYnVsbA== 36049\nIFdhaXRpbmc= 36050\nIEluZGl2aWR1YWw= 36051\nIGFub255bQ== 36052\naW1lbnM= 36053\nIG1lZGlkYXM= 36054\nIGZyYWdyYW50 36055\nIGRpcmVjdGVtZW50 36056\nIOyVhOuniA== 36057\ndXJpYQ== 36058\nIHNwaGVyaWNhbA== 36059\nIGFiZ2U= 36060\nIFZpY3Rvcmlhbg== 36061\nIHNwZWN0YWNsZQ== 36062\nIFJvZHJpZ3Vleg== 36063\nIG9jdXA= 36064\nIE7DpHI= 36065\nbWFya3M= 36066\nbmd1bG8= 36067\nIEx1Y2k= 36068\nIHNob3V0ZWQ= 36069\nIHJlZ3VsYXRvcnM= 36070\nxJ9pbmk= 36071\nIGRpc2VudA== 36072\nINGA0YvQvQ== 36073\n64Ko 36074\nIOyCtOs= 36075\nIHByb2Jsw6htZXM= 36076\nIEZpbmdlcg== 36077\nYXNzZW1ibGU= 36078\nIHBlYXI= 36079\nIGRyb2l0ZQ== 36080\nIEV2ZXJ5d2hlcmU= 36081\ndGFt 36082\n0L7RgtC40LI= 36083\n0LLQvtC5 36084\nb3JkaW5hdGU= 36085\nIExhaw== 36086\nIG3hu5tp 36087\nIFRlbGV2aXNpb24= 36088\nIGV4cG9uZW50aWFsbHk= 36089\nYXZhcw== 36090\nIGJsZXY= 36091\nIE1U 36092\nQ29ubmVsbA== 36093\nIOq1reuvvA== 36094\nINGB0LLQvtC40Lw= 36095\nIGFjaGE= 36096\nIER5bmFzdHk= 36097\nSmlu 36098\nIHRvcmU= 36099\nIGZsb3I= 36100\nINC80L3QvtCz0LjQtQ== 36101\nb3dhbg== 36102\nYmFo 36103\nIOyjhA== 36104\nIENlbGE= 36105\nIOy1nOq3vA== 36106\nIHBlcm1ldHRyZQ== 36107\nIGFicmFz 36108\nIHZlcnN0ZWhlbg== 36109\nIGVzY29ydA== 36110\nIFRoZW0= 36111\nw6Rya2U= 36112\ncG9ydGVy 36113\nIGthaGthaGE= 36114\nIGhlY3Q= 36115\nIGRhdQ== 36116\nd2Fo 36117\nb2x2ZQ== 36118\nIEFnZXM= 36119\nc2NoYWZ0 36120\nIFN0ZWxs 36121\nbmVsbGU= 36122\nIEVuc3VpdGU= 36123\nINCS0YHQtdC8 36124\nIGNyw6lk 36125\nIFBQ 36126\nbG9yZHM= 36127\nZ3J1bnRpbmc= 36128\nIGNvbnRyYWN0aW9u 36129\nR290 36130\nIGFjcXVpcmluZw== 36131\nIHNvcHI= 36132\nIHBvaXNvbm91cw== 36133\nUk5B 36134\nIGFuYXI= 36135\nIEhvZg== 36136\nJyk= 36137\nIHJlbWFya2FibHk= 36138\nIGludGVybmFjaW9uYWw= 36139\nw7xja2U= 36140\naW5xdQ== 36141\nIGR1eQ== 36142\nIGJlYXN0cw== 36143\nIExBTg== 36144\nIHByZWNlZGVudA== 36145\nIFJQTQ== 36146\nIHNlbG9u 36147\nIG1vcnRl 36148\nIGNvbWXDp291 36149\n0Y/Qu9Cw 36150\nIGludGVycHJldGluZw== 36151\nIEJ1cmtl 36152\n0YLRgNCw 36153\nIOydtOufrA== 36154\nIHBlc3NpbQ== 36155\nIE5vaw== 36156\n7Yyd 36157\nRmVtYWxl 36158\nIOyLpO0= 36159\nmYA= 36160\nIHN0aW11bGF0aW9u 36161\nIHNsaWNr 36162\nIOqwgOuKlA== 36163\nINC60LDQtw== 36164\nIEhCTw== 36165\nIHBhcGllcg== 36166\nIGvDtm5udGVu 36167\n0YPQsdC70Lg= 36168\nIENvbnN0YW50 36169\nU1BFQUtJTkc= 36170\nIGt0w7NyxIU= 36171\nIGNvc21ldGljcw== 36172\nIFRyZW5k 36173\nIHJvYmJlcnk= 36174\nIHRpdHQ= 36175\nIGdqb3J0 36176\nIGRpZXRhcnk= 36177\noIw= 36178\nIEtpcmJ5 36179\nINC/0YDQuNC80LXRgNC90L4= 36180\nIHF1YWxpZmljYXRpb24= 36181\nIOyViQ== 36182\nIGNhYmluZXRz 36183\nIGh0dHA= 36184\nIEVyaWNh 36185\nIGRpc2FkdmFudGFnZXM= 36186\nIGNoYXR0ZXJpbmc= 36187\neXo= 36188\nZmVpdA== 36189\nIGd1aWxk 36190\nIEVURg== 36191\nIERyYWdvbnM= 36192\nIEhFUkU= 36193\ndmVudGg= 36194\n2YTYp9mF 36195\nIG1hcmNow6k= 36196\nRGFt 36197\nIHBob3Rvbg== 36198\nIGVzdGFibGU= 36199\nTWFn 36200\nIG9saGFy 36201\nIGNvdXBsaW5n 36202\nIEhpbGZl 36203\nIFdpemFyZA== 36204\nINC80LDQu9C+ 36205\naGVscA== 36206\nIGzDrW5lYQ== 36207\nIOyr 36208\nIHN0YW5kYWxvbmU= 36209\nIG1vcmFsZQ== 36210\nIHp3ZWl0ZQ== 36211\nw6RocnQ= 36212\nIGRvdHRlZA== 36213\nIGRyaXBwaW5n 36214\nIEZsYWc= 36215\ncm9ja2V0 36216\ncmF0ZWd5 36217\naXJpbQ== 36218\nIO2VmOuptOyEnA== 36219\nIHNvZ2VuYW4= 36220\nIFVubw== 36221\nIFNjaHV0eg== 36222\nIGVzdGlsbw== 36223\nIFN1YnM= 36224\nIERhaXN5 36225\n0J3QtdGC 36226\nJy4uLg== 36227\nIHBsYXRpbnVt 36228\nIGJpcmw= 36229\nIFNvdmk= 36230\nIHZpb2xhdGU= 36231\n0YPQtdGC0YHRjw== 36232\ncmlsbA== 36233\nIHRyYXo= 36234\nIHNuaXA= 36235\nIGN1bXBs 36236\n4Lit4LiB 36237\nIGN1aw== 36238\nIFBhcmxhbWVudA== 36239\nIGh5cGVydA== 36240\nIHB1bHA= 36241\nIHRvbmd1ZXM= 36242\nYXR0bw== 36243\nIGJ1c2Nh 36244\naWhu 36245\nRVJP 36246\nINmK2Lk= 36247\nIHZhcmlhcw== 36248\nIE1hcmlhbg== 36249\nIGJvdW5kZWQ= 36250\nIHBpdGNoaW5n 36251\nIGRlZmljaWVuY3k= 36252\nIEJsZXNzZWQ= 36253\nIEV4ZXJj 36254\ndWNocw== 36255\nIG5oxrBuZw== 36256\nIHJhcGVk 36257\naGFsZXM= 36258\nIG1hbGE= 36259\ncGlj 36260\nIDQwMQ== 36261\nxZtuaWVq 36262\nYXJpbmE= 36263\n65Ok7J2E 36264\nb3R0aQ== 36265\nINC00L7Qu9Cz0L4= 36266\nIHRyYWNrZXI= 36267\nIFNoZWxieQ== 36268\nIHZhbmlzaGVk 36269\nIGJha2VyeQ== 36270\nS2FwxLE= 36271\nSmVzdXM= 36272\nIEtS 36273\nSk8= 36274\nhbg= 36275\nIGRpc2Nz 36276\n7ISv 36277\n7KeA6w== 36278\n15nXpg== 36279\nZW1hcnk= 36280\nS2VuZHJh 36281\nIHnDvGs= 36282\nw7xja3Q= 36283\nIHZheg== 36284\nIGt1cA== 36285\nYWt0dQ== 36286\nINGB0L/QsNGB0LjQsdC+ 36287\nIGFpaw== 36288\nIG51cnNlcnk= 36289\nIGVuZGFuZ2VyZWQ= 36290\nw6ptZW1lbnQ= 36291\nZW1hdGljcw== 36292\nIHJlc3BvbmRlcnM= 36293\nIFJlcHJlc2VudGF0aXZlcw== 36294\nIHNjdWxwdHVyZXM= 36295\naWdrZWl0ZW4= 36296\nIGRlcGw= 36297\nIGludGVycHJldGF0aW9ucw== 36298\nIGRlYWRsaW5lcw== 36299\nIDE5NDI= 36300\nw5c= 36301\nIHN1Z2Fycw== 36302\nZW11 36303\nbGl2ZWx5 36304\nIHJlY3JlYXRpb25hbA== 36305\nIGRpc3RvcnQ= 36306\nIHVuZGVyc2NvcmU= 36307\nIHVucXVvdGU= 36308\nIHNhZmVzdA== 36309\nIHN3b2xsZW4= 36310\nIGFuYWx5c2Vz 36311\nIGNvbW1lbmPDqQ== 36312\nYW5kaW4= 36313\nINCl0L7RgNC+0YjQvg== 36314\nIGRpYXJy 36315\nemllc3Q= 36316\nIHRvb3RoYnJ1c2g= 36317\ndWF0aW9ucw== 36318\nIGNhZGU= 36319\nIGJhY2tsYXNo 36320\naGluZA== 36321\nIHJpc3F1ZQ== 36322\nemVzcw== 36323\nIOydtOyVvOq4sA== 36324\nIGVzcGVyYXI= 36325\nIHRyYW5zbGF0aW9ucw== 36326\naW9uZWQ= 36327\nZ3JvYW5z 36328\nINC/0YPRgg== 36329\nIGdlbmV0aWNhbGx5 36330\nIGhhcHBpZXN0 36331\nIHdlcms= 36332\nYXRvb24= 36333\nIG11c2k= 36334\nIGZ1bsOnw6Nv 36335\nIOyeheuLiOuLpA== 36336\nINGA0LDQuQ== 36337\nIGJldm9y 36338\nQkxBTks= 36339\nIHJlcGVudGFuY2U= 36340\nUHV0 36341\nIHBvdHJ6ZWI= 36342\nIHNhbGE= 36343\nIGNhbXBh 36344\nV0VS 36345\nIGRlY8OtYQ== 36346\nIHPDqWN1cml0w6k= 36347\nIEFwcHJlY2lhdGU= 36348\n0YfQuA== 36349\nIFJhbmRvbQ== 36350\n67OE 36351\na2Fo 36352\nIG3Dtmo= 36353\nIHPDpGdlcg== 36354\nINeZ15vXldec 36355\nIDE5MA== 36356\neHR1cmVz 36357\nRXU= 36358\nIGfDpA== 36359\nINeR16o= 36360\nIENyb2F0 36361\nYXBv 36362\nUExF 36363\nIHBlcnNpc3RlbmNl 36364\nIGJsZW5kcw== 36365\nIHRyZWZmZW4= 36366\nIFNhbnRpYWdv 36367\neWRpYQ== 36368\nYWxkbw== 36369\nIFRlbnNvckZsb3c= 36370\nIER1YWw= 36371\nIGNoaWZm 36372\n7Je0 36373\nIGNvbnRyYWN0ZWQ= 36374\nIHNlZ3JlZw== 36375\nIEZhaXJ5 36376\nIHdpc2VseQ== 36377\nIHZ1bG5lcmFiaWxpdGllcw== 36378\nIGhhbmRoZWxk 36379\nIGdhZGdldHM= 36380\nIGJvxZ8= 36381\nIFBvcHVsYXI= 36382\nIGN1cnZhdHVyZQ== 36383\n66y4 36384\nIE1BUlk= 36385\n7J207Io= 36386\nIGZvcm11bGF0aW9u 36387\nIGNlbGVyeQ== 36388\nIGJsdXJyeQ== 36389\nIFRT 36390\nYWxleg== 36391\nIHdz 36392\nIHByb2dyYW1t 36393\nIFN0YWNr 36394\nIEpJTQ== 36395\n0L7QstCw0LvQuA== 36396\nxLFsbA== 36397\nIHDDqHJl 36398\nIEthbnll 36399\nIERlbGF3YXJl 36400\nIGRhdW50aW5n 36401\nINCx0LXRgQ== 36402\nIFN0dXBpZA== 36403\nYmln 36404\nZmZpY2lhbA== 36405\nIHByZWNpcGl0YXRpb24= 36406\nIHBsdW5n 36407\n4bulYw== 36408\nYnVyc2U= 36409\nIGRhcmxl 36410\nIGNyaXBw 36411\nIHBpb25lZXI= 36412\nIGRpc3B1dA== 36413\nIHNlYW4= 36414\nIHJlc2lzdG9y 36415\nIGFsbGVpbg== 36416\naXBwbGVz 36417\nYXJlbA== 36418\nIGVuZG9ycw== 36419\nenVzdA== 36420\nINGA0LXQsdGP0YLQsA== 36421\nZWRlZA== 36422\nIOy5tOuplOs= 36423\nIGxsZXZh 36424\nIGtlbm50 36425\nINCx0LDQuw== 36426\nIERvY3VtZW50 36427\nIEtuaWdodHM= 36428\nIGJ1Y2tsZQ== 36429\nIOyJrA== 36430\nIGFsaw== 36431\nIEV2ZXJ5ZGF5 36432\nYXR0ZXJz 36433\nIHRvaWxldHM= 36434\nIGp1Z2Fy 36435\nIOyeiOyngA== 36436\nIGdlbmF1c28= 36437\nIExhbmRlc3JlZ2llcnVuZw== 36438\naWpl 36439\nIHRyYWlsZXJz 36440\nIFRpZ2Vycw== 36441\nIGdpdHRp 36442\nIGZvcmdpdmluZw== 36443\nIGNvbmN1cnJlbnQ= 36444\nIFZ1 36445\nIO2Kue2eiA== 36446\nIEJST1dO 36447\nb3VuZGVk 36448\nIjs= 36449\nIHRyZW1i 36450\nIHRpZXQ= 36451\nINGA0LXQttC40Lw= 36452\nIG51dHNoZWxs 36453\n0LXQu9C40Yc= 36454\nIGxvc2Vycw== 36455\ncmljdGluZw== 36456\nIHJlZGVlbQ== 36457\nZGVmaW5lZA== 36458\nTmljZQ== 36459\nIGJyb2FkYmFuZA== 36460\nS08= 36461\nIHRlYXNpbmc= 36462\nIHBhcnRpc2Fu 36463\nxLFtYQ== 36464\nIOyerOuvuA== 36465\nIEpvdXJuZXk= 36466\nIHNsb3Blcw== 36467\ndW5pbmc= 36468\nZ3J1bnRz 36469\nIHTDpGxs 36470\nIHVuY292ZXJlZA== 36471\nIG15xZtsxJk= 36472\nIEVzdGhlcg== 36473\nIEhlYWx0aHk= 36474\nIOuwkQ== 36475\ncsOpZQ== 36476\nIHBvbGFyaXphdGlvbg== 36477\nIGZsYXY= 36478\nIGNhbWJpYXI= 36479\nIHly 36480\nIFJhbmNo 36481\nIHNwbGl0cw== 36482\nIHRyb3V2w6k= 36483\nIHJlY29yZGVy 36484\nIGTDqXBhcnQ= 36485\n2YjYqA== 36486\nIEtyeQ== 36487\nIGludGVyZXNzYW50 36488\nIGVkZXJpbQ== 36489\nxZt3aWFk 36490\naWxhdGVyYWw= 36491\nd3JpZ2h0 36492\nIHBvdXJyYQ== 36493\nw6p0ZXI= 36494\nIGNhbWVs 36495\n4Z4= 36496\nIHJhcGlkZW1lbnQ= 36497\nIG1lag== 36498\nIHN0aWZmbmVzcw== 36499\nQURBUw== 36500\nIGRpZmZlcnM= 36501\nIGFsb3Q= 36502\nIFNpZw== 36503\n0Y/RgtC10LvRjA== 36504\nIGFic3RyYWN0aW9u 36505\nIGtlaW5lcg== 36506\nZ3J1cHA= 36507\nIFNoZXJsb2Nr 36508\n7ZiU 36509\nIGNpdGU= 36510\nIG92ZXJmbG93 36511\nIHThuqFp 36512\nw7pjYXI= 36513\nYnVsYQ== 36514\nIGNvbmp1bnRv 36515\nIENJ 36516\nIG1vZGVyYXRvcg== 36517\nIGluZGlyZWN0bHk= 36518\nIGFsbGVpbmU= 36519\n4oI= 36520\n0YjQuNCx 36521\nINCx0LDQsQ== 36522\nIGRhbmFjaA== 36523\nIDE5Mzk= 36524\nIHByb21ldA== 36525\nIGRlc3RpbmF0aW9ucw== 36526\nIElsbHVzdA== 36527\nzrnOus+M 36528\nIHNhYmVz 36529\nIGhlaA== 36530\nIEdlc2V0emVudA== 36531\nIE1peg== 36532\n0LXQvdC60L4= 36533\nIE15cw== 36534\n0Kw= 36535\nIEp1ZGFpc20= 36536\nIG11c3RhY2hl 36537\nIHN0aW1tdA== 36538\nIEdhemE= 36539\nIHZvbHRl 36540\nIG51bw== 36541\nIG3Ds24= 36542\nIENvbXB1dA== 36543\n4Li54LmI 36544\nIFJhZGk= 36545\nIGV4Y2VwdGlvbmFsbHk= 36546\nIGFzc3VtZXM= 36547\naW5mb3Jt 36548\nIHNocmluZQ== 36549\nIGltcGxpY2F0aW9u 36550\nIEZpdHo= 36551\nIS4= 36552\nIGx0 36553\nIGFsbG95 36554\nIGV0aGlj 36555\nIG1vbmFzdGVyeQ== 36556\n7Iuc7KOg 36557\naWNhw6fDo28= 36558\nIGNvb3JkaW5hdGluZw== 36559\nIE1vdG8= 36560\nIG92ZXJsb29r 36561\nIGNob2lz 36562\nIGFudGliaW90aWM= 36563\nIE1pbm5l 36564\nIEJK 36565\nIEFwYQ== 36566\nb3JpYW4= 36567\nIHNwaWxsZWQ= 36568\nSmFt 36569\nIGh1c2JhbmRz 36570\nIGNyZWF0aW9ucw== 36571\nIGHDsQ== 36572\nw7xzc2Vs 36573\nIOydtOyaqQ== 36574\nIGFuYWx5c2U= 36575\ncm9zZQ== 36576\nIHB1bmNoZWQ= 36577\nIHByZXNxdWU= 36578\nIGFzdHJvbm9teQ== 36579\nIHNjaHdpZXJpZw== 36580\nIEVib2xh 36581\nIGNpcw== 36582\nIGFjZXQ= 36583\nIEZY 36584\nZW5kcmU= 36585\nIOydjOyVhQ== 36586\nIHdlYnBhZ2U= 36587\nIGZyZWFrZWQ= 36588\nIGxhdHRl 36589\nIOy/oA== 36590\nIOuouOs= 36591\nTmV2ZXI= 36592\nR3Jh 36593\n7ZmU66W8 36594\nZXllZA== 36595\nIOuwnOudvA== 36596\nIGVzcGVyYQ== 36597\nIGFwYXJlY2U= 36598\ncmHDp8Ojbw== 36599\nIGRpc3J1cHRpdmU= 36600\nIEpvaW50 36601\ndXJvdXM= 36602\ncmVhcw== 36603\nIHF1ZXLDrWE= 36604\nIGRpc3RyaWJ1dGlvbnM= 36605\nIGV4cG9uZW50 36606\n7LmY66W8 36607\nIGRs 36608\nemhvdQ== 36609\nIEhlYXJpbmc= 36610\nIENyYXc= 36611\nIGZsb2F0cw== 36612\nb3VuY2Vk 36613\nTGFi 36614\nV29ybGQ= 36615\nIGJ1cmRlbnM= 36616\nIGF1dGhvcml0YXJpYW4= 36617\nIEJvbHQ= 36618\nINC+0LTQvdGD 36619\nIHBpZ2Vvbg== 36620\nIGRpc3RyYWN0aW9ucw== 36621\nIEhlcmF1c2ZvcmRlcg== 36622\nIHplc3Q= 36623\nZXNj 36624\nIHNoYWtlcw== 36625\nYXRhcw== 36626\nINmF2LQ= 36627\naG9sZXM= 36628\nIHRoaW5rZXJz 36629\nYWx0YQ== 36630\nIGFyY2hl 36631\nIFN1aw== 36632\nYW5oYQ== 36633\nIHRlbXB0aW5n 36634\nIHlvdXR1YmVy 36635\nIHbDrA== 36636\nIGR6aWHFgmE= 36637\nIFZhdGljYW4= 36638\nUGFyaw== 36639\nIHN1cGVycw== 36640\nIE5pa2tp 36641\n64qQ6w== 36642\nb3Jhbmc= 36643\ncmFtaWVudA== 36644\nIOqwluqzoA== 36645\nIGRlc3NlcnRz 36646\nIGF2ZXJl 36647\nIEdyZWdvcnk= 36648\nIOuTpOyWtOyY 36649\nIGNvc3Rpbmc= 36650\nIENsaW5pYw== 36651\nIHJlYmVscw== 36652\nIE1vYg== 36653\nIGJ1bmxhcg== 36654\nIFlvdXJz 36655\nZXJ0aW1l 36656\nIHJldGFsaQ== 36657\nbWFyYQ== 36658\nYXR1cw== 36659\nYWxsZXM= 36660\nINC00YA= 36661\nINC00LjRgQ== 36662\nIGRpc2NvdW50cw== 36663\nIEdVWQ== 36664\nINC60LDQutC+0LU= 36665\nIEV4cGVyaW1lbnQ= 36666\ncmVtZW50 36667\nIFhpYW5n 36668\nIGJhdGU= 36669\nV0U= 36670\nIHNwZWNpYWxpemU= 36671\nIGRlaXR5 36672\nIExva2k= 36673\nbWFn 36674\nIE5pdA== 36675\nV2VzdA== 36676\nIG1hdGVybmFs 36677\nIHF1aXM= 36678\nYnJva2Vu 36679\nIGxhc2Vycw== 36680\nIGhha2s= 36681\nIEFuZ2Vscw== 36682\nIG1hc3Rlcnk= 36683\nYW50aXM= 36684\nVGlmZmFueQ== 36685\nZWVl 36686\n55E= 36687\nb3JlbQ== 36688\nIGluYWNj 36689\nIGp1cmlzZGljdGlvbnM= 36690\nIEthcmRhc2g= 36691\nSWw= 36692\nIFNpbm4= 36693\nIGF0aGxldGljcw== 36694\nY8SZ 36695\nIGxvb3NlbHk= 36696\nIGRpZXRh 36697\nQWc= 36698\nID8/ 36699\nIOuMgO2RnA== 36700\nIHN1cGVydg== 36701\nIG51dHJpdA== 36702\nIGRyaWZ0aW5n 36703\nIOyEoOyDneuLmA== 36704\nINC/0L7QvdGP0Ls= 36705\nIFZpY3Rvcnk= 36706\n2YTYqQ== 36707\n15XXoNeU 36708\nINC/0LjRiA== 36709\nIHNoYXZlZA== 36710\nIG1lc3VyZQ== 36711\nb25kZW4= 36712\n2YPYsQ== 36713\nIGV4aWxl 36714\nIERlc2Rl 36715\nIFBpbnRlcmVzdA== 36716\nIGF0dGFjaG1lbnRz 36717\nIGhvbWJyZXM= 36718\nIGZpbmVz 36719\nIOyEuOyDgQ== 36720\nIHNsZWVwcw== 36721\nIFRhY28= 36722\nIElSQQ== 36723\ncmlvcw== 36724\nIG9sbA== 36725\nZXRlcw== 36726\nIHVudXQ= 36727\nZmFzaGlvbmVk 36728\nIHRyZWJhbGw= 36729\nIE5lYXJseQ== 36730\nINGA0LXQsNC70YzQvdC+ 36731\nIGNoaWw= 36732\nxJ9h 36733\nIE1FTA== 36734\ncm9zY29w 36735\nIENH 36736\nIHZlbmdl 36737\nIGRpc2h3YXNoZXI= 36738\nYWxnaWM= 36739\nIG1vZGlmaWVy 36740\nIGVtYmFzc3k= 36741\ndGltZXI= 36742\nZW1pY3M= 36743\nIGludHJpY2F0ZQ== 36744\nIGV2ZXQ= 36745\nIOuMgOuwlQ== 36746\nIGlzb3Q= 36747\nINC90LDRg9GH 36748\nIFF1aXo= 36749\ncmVzbw== 36750\nzrTPjg== 36751\nIHllbGxlZA== 36752\nIGZlZGVy 36753\nRUxMRVI= 36754\nIGV4Y2VlZGVk 36755\nb25hcw== 36756\naWNhbm8= 36757\nINC20LjQstC+0YI= 36758\nIE1hbw== 36759\nIEthenV0bw== 36760\nIOOFi+OFi+OFi+OFiw== 36761\nIGZyb250bGluZQ== 36762\nIEh1bmdhcmlhbg== 36763\nIMO8YmVyYWxs 36764\nYXdhdA== 36765\nIGdyaXBz 36766\nacOnw7Vlcw== 36767\nYXJueWE= 36768\nIM2h 36769\nIHNlaWQ= 36770\nIGFuYWs= 36771\nIGFjYWJvdQ== 36772\n7ZWR 36773\nIG5vdG9yaW91cw== 36774\nIEdvZHppbGxh 36775\nIG92ZXJjb21pbmc= 36776\nIFBlbmQ= 36777\nIG9sYWJpbGly 36778\nw7xsbWU= 36779\nIGVyaGFsdGVu 36780\n6re5 36781\nIE1ldGVy 36782\nIHN0YWFu 36783\nT2w= 36784\nIGNoYXRz 36785\nIEJ1ZW5vcw== 36786\nw612ZQ== 36787\nYWx1YWJsZQ== 36788\nIHN0cmF0ZWdpY2FsbHk= 36789\nIGNvbXByaXNlZA== 36790\nINC/0LXRgNGB0L7QvdCw0LY= 36791\nIHdhbm4= 36792\nIENlbg== 36793\n0L3QuNGC0LU= 36794\nn4E= 36795\nINGC0L7QsdC+0Lk= 36796\naWFk 36797\nIGthcmRlxZ9pbQ== 36798\nIENvbmdyZXNzbWFu 36799\ncmVhbWluZw== 36800\naG9tbWU= 36801\nIGNvbW11bmF1dA== 36802\nIGFsY29ob2xpYw== 36803\nIHBpY2tsZWQ= 36804\nIGFjb3Jk 36805\ncG9zaXRpb24= 36806\nZWfDs2w= 36807\nIHRyb3VibGluZw== 36808\nIE1hcmNoZWc= 36809\nIHp1bWluZGVzdA== 36810\nIHNlYW1sZXNzbHk= 36811\nIG9sdW4= 36812\nIFRWcw== 36813\nINC/0YDQsNC60YLQuNGH0LXRgdC60Lg= 36814\nIGJhY2tlbmQ= 36815\naWRhYmxl 36816\nIGdhZGdldA== 36817\nIGZhw6dv 36818\nIE1hcmNoZWdpYW5p 36819\nIOuwpA== 36820\nIGFjY2lkZW50YWw= 36821\nIExQ 36822\nIGVsZGVzdA== 36823\nIEFkbWlyYWw= 36824\nIG7Eg20= 36825\nbGV2ZXI= 36826\nIHBhc3RlbA== 36827\nIGZvbmRv 36828\nQ29ubmll 36829\nIHRlcmNlcg== 36830\nIHBhY3Q= 36831\nIE1vbnRl 36832\nIG1lYXRz 36833\nIFNNUw== 36834\nIEF1c3RyYWxpYW5z 36835\n57w= 36836\nUmhldHQ= 36837\nIGV4YWN0ZW1lbnQ= 36838\nIOu5vA== 36839\nIE1PRA== 36840\n56E= 36841\nIFJhcHQ= 36842\nIE5vY2g= 36843\nIGFib3J0 36844\nIE5hdmFs 36845\nIEZ1amk= 36846\nSU5URVI= 36847\nINC90L7QstGL0Lk= 36848\nIG1pZWpzY2U= 36849\nIElDVQ== 36850\nIEdyYWR1YXRl 36851\nIEdsZW4= 36852\nYXJkaQ== 36853\nIMiY 36854\nIHNvbGRlcg== 36855\nIHByb2Zlc3Npb25z 36856\nIG9ydGhvZw== 36857\nb21u 36858\naW50cm9kdQ== 36859\nIERlbmlzZQ== 36860\n7J6Q66W8 36861\nIGNvcnJlc3BvbmRlbmNl 36862\nQU1B 36863\nIGluZmxpY3Q= 36864\nIGZhbmQ= 36865\nIEfDvA== 36866\nINGH0LXRgg== 36867\nIHRyYWNlZA== 36868\nIHBhdGVudHM= 36869\nIGFtYnVzaA== 36870\nIGxvdHRh 36871\nZmZlcg== 36872\nIFdhZ25lcg== 36873\nIGltcGVyc29u 36874\nIGV4dHLDqm1lbWVudA== 36875\n2YLYqg== 36876\nY29uZHVjdA== 36877\nQXR0 36878\nIE11ZWxsZXI= 36879\nIEFsaWNpYQ== 36880\nIGN5Yw== 36881\nIGhhY2tlcg== 36882\nIHR5cw== 36883\nIGhhaWw= 36884\nINC30LDRj9Cy 36885\nIHBhc3Nv 36886\nIOy2lOqwgA== 36887\nIM6I 36888\nIHBhY2thZ2Vk 36889\nIEN5bnRoaWE= 36890\naGVldA== 36891\nIE5pc3Nhbg== 36892\nIFF1ZXN0bw== 36893\n6ag= 36894\nZGlk 36895\nIM68zrnOsQ== 36896\nIEVsbGlz 36897\nIEFuYWx5c2lz 36898\nY2Vtb3M= 36899\nIGFzZWc= 36900\nIE15c3Rlcg== 36901\nIENhbw== 36902\nIHR1dg== 36903\nIEluZHVzdHJ5 36904\n7KO86rOg 36905\nb3RhbA== 36906\nIHBlcXVlw7Fv 36907\nYnJhcw== 36908\nIGNvbXByZWhlbmQ= 36909\nIFNpbXBzb24= 36910\n0YHRgtCy0LjQtQ== 36911\nb2NyYWN5 36912\n0LjRh9C10YHQutC4 36913\nIE11c2g= 36914\nIExhdXJpZQ== 36915\nIHRyaWFuZ3VsYXI= 36916\nIFByZXNlbnRz 36917\nIEt1bmRlbg== 36918\nIElzcw== 36919\nIERlY2s= 36920\n4buDbg== 36921\nIERhcmtuZXNz 36922\nIGluZmxhbW1hdG9yeQ== 36923\nZXJlbWlhaA== 36924\nIHdhcm1lZA== 36925\ndmV5YXJk 36926\nIE1lbW9yeQ== 36927\nZXR0eQ== 36928\nIHRheHBheWVycw== 36929\n4LiT 36930\n2KE= 36931\nIHByYWN0aXNl 36932\n64us6w== 36933\nIGRyaWxsZWQ= 36934\nbcO8xZ8= 36935\nbG9nbw== 36936\nIEZhY2g= 36937\npOuhnA== 36938\nIMO8YnJpZ2Vucw== 36939\nIGtvbm50ZW4= 36940\nIG5vcm1hbG1lbnRl 36941\nIGFyZ3Vlcw== 36942\naWxpbmd1YWw= 36943\nsOulvA== 36944\nZWdhbA== 36945\nIHRyYXZhaWxs 36946\nb3Z5 36947\n0LDRgtC+ 36948\nIHJ1dGg= 36949\nIExpZ2h0cw== 36950\nIGNvbnNpc3RlZA== 36951\n15HXqNeZ150= 36952\nIHN0ZXJlb3R5cGU= 36953\nIHBheWVy 36954\nIFJlZQ== 36955\nIEFpcmJuYg== 36956\nIGRyb3duZWQ= 36957\nIFpvZQ== 36958\nIGNhbm9weQ== 36959\nIGJhcnI= 36960\nINC90L7Rhw== 36961\nIHBhZ2Fu 36962\nIGphcnM= 36963\nIHLDqg== 36964\nZXJ2ZXI= 36965\naWViZW4= 36966\nIGVzcGVjdA== 36967\nIEZp 36968\nIHVud2lsbGluZw== 36969\nIHRlY2huaWNpYW4= 36970\n4bq3dA== 36971\nbWVtYmVy 36972\nIENhbmFs 36973\n2LPZhQ== 36974\nIGxpZWJlcg== 36975\nIGluZmVyZW5jZQ== 36976\nIGhvbm9yaW5n 36977\nIENhbXBhaWdu 36978\nIGxpbmVhZ2U= 36979\nIFN0cmVzcw== 36980\nIHZpY3Rvcmllcw== 36981\nIGRlamE= 36982\n16M= 36983\nw6p0ZXM= 36984\nYmxpY2s= 36985\nINC80LXQvdC10LU= 36986\nb3Rocw== 36987\nIENvdXBsZQ== 36988\nSmFzb24= 36989\nIE5pY29sYXM= 36990\n0LXQutGB 36991\nbGli 36992\nIGhlcnJhbWllbnQ= 36993\nINeQ15XXnteo 36994\nINCy0LjQtNC40Lw= 36995\nbWlsbGltZXRlcg== 36996\nIHNpbGhvdWV0dGU= 36997\nIGRyaXZld2F5 36998\nIGNoZXJpc2g= 36999\n44Wg44Wg 37000\nIHJhbnNvbQ== 37001\nIGludGVyZGlzY2lwbGluYXJ5 37002\nIFBvcnRhbA== 37003\nIHRyYWc= 37004\ndGhvb2Q= 37005\nIHRlZGlvdXM= 37006\nIGdsb3NzeQ== 37007\nIHByw6lwYXI= 37008\nIENheQ== 37009\nIFRvb2s= 37010\nIEJvdHRvbQ== 37011\nIHppZw== 37012\n5as= 37013\ncmVwcmVzZW50ZWQ= 37014\n4LmA4Lil4Lii 37015\nIGRlc2Fycm9sbG8= 37016\n7ISc6w== 37017\nIHZpc2Nvcw== 37018\nIG1pbGxpZ3JhbQ== 37019\nIEd1bmQ= 37020\nIGZlcm1lbnQ= 37021\nZHJ1bQ== 37022\nIGRyYXdlcnM= 37023\nTGF1Z2g= 37024\nIHBlbG9z 37025\nIHBhdmVtZW50 37026\nIG1lbW9pcg== 37027\nYXZhaXQ= 37028\nIDIwNTA= 37029\npOulvA== 37030\nIHJhesOzbg== 37031\nIGZsb3VyaXNo 37032\nIHN0ZXJu 37033\nIENodW5n 37034\nIHNlcnBlbnQ= 37035\nIEdlbnRsZW1lbg== 37036\na29vaw== 37037\nIGx1dA== 37038\naW1wb3J0ZQ== 37039\ncGFyZW50 37040\nIHdzeg== 37041\nIHNjcmVl 37042\nIE1pdGFyYmVpdGVy 37043\nbXV0 37044\nIOyWmOq4sOulvA== 37045\nIHNlbWJsZQ== 37046\nIE9X 37047\nIGludmVzdGlnYXRvcg== 37048\nIENoZXJ5bA== 37049\nIEdlcmFsZA== 37050\nIHByZXJl 37051\nIGNvbXBhcmVz 37052\nbnl0 37053\nIGRpZmVyZW7Dp2E= 37054\nPy0= 37055\nIHF1w6E= 37056\n16jXmQ== 37057\nU2Vu 37058\nIGhlcHM= 37059\nIGdyYXR1aXQ= 37060\nIGNvbnNvcnQ= 37061\nIFNUT1A= 37062\nIFByb3Rlc3RhbnQ= 37063\nIGVsZWN0cm9kZQ== 37064\n4pc= 37065\nIHNlY3VyZWx5 37066\n0LjRh9C10YHQutC+0Lk= 37067\nIHTDpMOk 37068\nIHJlZ2lzdGVycw== 37069\nIEhlYXZlbmx5 37070\nb2dseQ== 37071\naXNzw6Q= 37072\nIFBoeXNpY3M= 37073\nIE1lcmtlbA== 37074\nIHLDqXY= 37075\nIGVyYXNlZA== 37076\nIFNhY3JhbWVudG8= 37077\nIGNvZmZpbg== 37078\nIGV4YWNlcg== 37079\nIGxhbno= 37080\nIHBvZXRz 37081\ndWxpZg== 37082\nIOy5mOs= 37083\nIE5lcmQ= 37084\nIE5DVA== 37085\nIEhvdXI= 37086\nbmVobWVy 37087\nnpjrj4Q= 37088\nIFByaW5jaQ== 37089\nU3c= 37090\nbWllcw== 37091\nYXJtZWQ= 37092\nIEJlYXRsZXM= 37093\nIHByb3BhZ2F0aW9u 37094\nIGV4Y2hhbmdlZA== 37095\nIGN1bXVsYXRpdmU= 37096\nIOynkeyXkA== 37097\nIGRlZmVhdGluZw== 37098\nYmVscw== 37099\nIHdlcw== 37100\nIE9keXNzZXk= 37101\nYXZpb3I= 37102\nIOychOyXkA== 37103\nIGJyaXQ= 37104\nIGhpam8= 37105\nREFZ 37106\nINin2YTYqtmK 37107\nINCh0LXRgNCz 37108\n0YPQutCw 37109\nZWRzacSZ 37110\nIGltcG9z 37111\nIGVsbGFz 37112\nIGZpcmVhcm1z 37113\nIE5S 37114\nINeR15A= 37115\nINCf0L7QutCw 37116\nYXdp 37117\nIOyEseqztQ== 37118\nIHB1cGlscw== 37119\nIFRhY2s= 37120\nIGZyYXNl 37121\nIFNoaXA= 37122\nIHN0YWQ= 37123\nIEdyZWF0ZXI= 37124\ndW51bg== 37125\naW1tdW5n 37126\nZ3Jvd24= 37127\nIE5YVA== 37128\nIEFtZXJpY2Fz 37129\nZm94 37130\nIG1hbnRlbg== 37131\nINGB0L7Qug== 37132\nIHJpa3Q= 37133\nbGVjdHJpYw== 37134\nZGVlcA== 37135\nINC30L3QsNC10YjRjA== 37136\nIGJlbnV0 37137\nIEluZnJhc3Q= 37138\nIEVtaXI= 37139\nINC+0YLQv9GA0LDQsg== 37140\nIEtpbWNoaQ== 37141\nIEZpbm5pc2g= 37142\ntOyggQ== 37143\naW5haXJl 37144\nIG9pa2U= 37145\nIGhvc3RhZ2U= 37146\nIEJ1dHRvbg== 37147\n2YLZig== 37148\nZWtpbmc= 37149\nIEthemFraA== 37150\nIGNvbWZvcnRpbmc= 37151\nIHNvZw== 37152\nIGdyZWV0ZWQ= 37153\nZ3VpdGFy 37154\ncGF5ZXI= 37155\nIHJlbGF0aW9uYWw= 37156\nIGNvbnN0cnVpcg== 37157\nb3BpYW4= 37158\nIFZvbHVtZQ== 37159\naWV0aA== 37160\n0YHRgtCy0L7QvA== 37161\ndXJyZWN0aW9u 37162\nbGnFm215 37163\nIGhlbWlzcGhlcmU= 37164\nIEJlYW4= 37165\nSUdO 37166\nIGvDtnTDvA== 37167\nIEZhbGxvdXQ= 37168\nIGJyYWNl 37169\nz4DOrA== 37170\nIEhBUw== 37171\nIGfDqQ== 37172\nIGNoYXJhY3Rlcml6ZQ== 37173\n4bq3Yw== 37174\nIE1pbGt5 37175\nIHR1bW9ycw== 37176\nIG51aXQ= 37177\nIEdheg== 37178\nIOyeiOuLpOuKlA== 37179\nINCz0LDRgA== 37180\nZXNzbWVudA== 37181\nIEFiZQ== 37182\nIOu9kQ== 37183\nIEVpbnNhdHo= 37184\nSklO 37185\nasOk 37186\nQ3J5 37187\nIFByb21pc2Vk 37188\nINGB0LXRgNC0 37189\nb2t1cw== 37190\nIHNjYWxhYmxl 37191\nINC/0L7RgdC80L7RgtGA0LXRgtGM 37192\nw7xja2xpY2g= 37193\nIHJlYWxpc20= 37194\nIG1heW8= 37195\nIGp1dmVuaWxl 37196\nIGhlYWRsaWdodHM= 37197\nIGfDtnLDvMWf 37198\nIFJlZm9ybQ== 37199\nIGhhbHZlcw== 37200\nY3puZQ== 37201\nIGJyZWFrdXA= 37202\nxbxlag== 37203\nIHLDpHR0 37204\nRGF5 37205\nIOydvOuzuA== 37206\nIG11ZXJ0ZQ== 37207\nIHR1bmVz 37208\nIFNtaWxl 37209\ncmVjb3Jk 37210\nIHJlY2hlcmNoZQ== 37211\nYXRpc2ZpZWQ= 37212\nIHBvemk= 37213\nIGNlbGVicmF0aW9ucw== 37214\naXNleHVhbA== 37215\nIFJPQg== 37216\ndGhpcmRz 37217\nIEZvcnR1bmU= 37218\nINGC0L7QuQ== 37219\nIGJyYW5kZWQ= 37220\nbG9v 37221\nIGR1ZA== 37222\nIHJhbmRvbWl6ZWQ= 37223\nIGNvbWJpbg== 37224\naWVyYW4= 37225\nY3plbmlh 37226\nIGN1cmF0b3I= 37227\nIGFydGVyeQ== 37228\nINGD0Yg= 37229\nINGH0LjRgg== 37230\nIHN1YnNpZGllcw== 37231\nIGJsb3Nzb20= 37232\nIFR3aWxpZ2h0 37233\nIGh5dsOk 37234\nIFBvbXBl 37235\nIENpc2Nv 37236\nINCf0YDQvg== 37237\nIGJpcmk= 37238\nIGdlcm4= 37239\nIHJlYnVpbHQ= 37240\nIHdjemU= 37241\nIGJlbmVmaWNp 37242\nIGRydW1tZXI= 37243\nIHNvbGlkcw== 37244\nIGRpeW9yc3Vu 37245\nbGF0ZWQ= 37246\nIG11ZGR5 37247\nIGhvbG9n 37248\nIGNsYXBz 37249\nIFJpbmdz 37250\nIE9rZXk= 37251\nIEJyYXZl 37252\nIHZhbHVhdGlvbg== 37253\nIG1pZ3JhbnQ= 37254\nIGludGVybWl0dA== 37255\nIGVpZ2VuZQ== 37256\naWxpYXJ5 37257\nbWFya3Q= 37258\na3I= 37259\nIFJpYg== 37260\n4buZaQ== 37261\nIGFjY3VzYXRpb25z 37262\nIGFyYWI= 37263\nd2FzaA== 37264\nIEJhcmR6bw== 37265\nIHVnaA== 37266\nZXN0ZXJz 37267\nb3BocmVu 37268\nIGFsaW1lbnRvcw== 37269\nIFV6 37270\n1oI= 37271\nIDY1MA== 37272\nINC/0YDQuNC10YU= 37273\nRkk= 37274\nIHNhbXBhaQ== 37275\nIHBhcmzDqQ== 37276\naGVzaW9u 37277\nIHPEsXI= 37278\nIGFwcGFyYXR1cw== 37279\nIGNvcnJlbGF0ZWQ= 37280\nIFByaW5jaXBhbA== 37281\nIGNvcnI= 37282\nIE9mZmljaWFs 37283\n0LjRh9C10YHQutC40LU= 37284\nIHRlcm1pbmFscw== 37285\nU2hvdWxk 37286\nIHZhY3Vu 37287\nIHN0ZWxsdA== 37288\nIG1vb2k= 37289\nZXR6dW5n 37290\nINC60YDQsA== 37291\nIGRhaQ== 37292\nINC/0L7Qtg== 37293\nVGVhbQ== 37294\nIFBQRQ== 37295\nINCe0YE= 37296\nIExlYWg= 37297\nIEl2eQ== 37298\neXN0 37299\nIHVoaGg= 37300\nIG5pZ2h0dGltZQ== 37301\nIHRyZW5keQ== 37302\nIHNlY3VyaXRpZXM= 37303\nIGNvbnRpbmVudHM= 37304\nIGZpcnN0aGFuZA== 37305\nIFZlcm9u 37306\nIOuCrg== 37307\nIGJyb3dzaW5n 37308\nIENhZGE= 37309\ndHJv 37310\nIHRyYW1w 37311\ncmVpYg== 37312\nIGVyc3RtYWw= 37313\naXJsZXI= 37314\nIHBzaWM= 37315\nIGdldGly 37316\nIE5Q 37317\nIGR6aWVjaQ== 37318\n0L7QsdGA0LDQtw== 37319\nIG1hZ2ljaWFu 37320\nIHNjcnV0aW55 37321\nIHNsYWI= 37322\nIE9U 37323\naXN0eQ== 37324\naXJpZXM= 37325\nb3Jlc3Q= 37326\nIHRhc2tlZA== 37327\nIG1vcmFsbHk= 37328\n7JW87KeA 37329\ndXN0ZXJlZA== 37330\nIGZvb2xz 37331\nIGlycmVzcG9ucw== 37332\nIGVpbmY= 37333\nIHZp4buHYw== 37334\nIHNjb3I= 37335\nIHBpbGxvd3M= 37336\nIEdlZ2Vu 37337\nIHR1dHRl 37338\nIHF1YXJ0ZXJseQ== 37339\nIGRpZG50 37340\nIEd5bQ== 37341\nIEV0aGVy 37342\nINir 37343\n0LvQuNGI0LrQvtC8 37344\nIHNpZ25hbGluZw== 37345\nIE5vZGU= 37346\nIERvbmNz 37347\nIHlhaA== 37348\nIEthbmFs 37349\nIGZhZGluZw== 37350\nZXRpbg== 37351\nIGluZmx1ZW5jZXJz 37352\nIG1lZGFscw== 37353\nIGVuZ2luZWVyZWQ= 37354\nIGZlcm1lbnRlZA== 37355\n6rKg7KeA66eM 37356\nIEJlZXRob3Zlbg== 37357\n157XqQ== 37358\naW5lbnRhbA== 37359\nIOyVjOugpA== 37360\nw7x0ZmVu 37361\nYWxueWE= 37362\nIG92ZXJl 37363\nIGRlbmt0 37364\n0LDQutGC0LXRgA== 37365\nIOKY 37366\nIG5lY2VzaXQ= 37367\nIGdlbmVyYXRvcnM= 37368\nZ3Jhc3M= 37369\nINC/0L7QtNGD0Lw= 37370\nbGllw59lbg== 37371\nQmFy 37372\nnOuPmQ== 37373\nINC00LXRgtC10Lk= 37374\nIHN1Y2tpbmc= 37375\nIHN0ZW5jaWw= 37376\nIHByaW1v 37377\nIEJyZWF0aA== 37378\nc3Ryb20= 37379\nIGltbWVuc2VseQ== 37380\nIGFwcHJlaA== 37381\n7KCV7J20 37382\nUG9w 37383\nIGpvbmc= 37384\nIEdpdWw= 37385\nIEFESEQ= 37386\nIGjDtnJlbg== 37387\nIGVsbw== 37388\naXZlbnQ= 37389\nIHJ1cw== 37390\nIG91dHJhZ2VvdXM= 37391\nIG1hc3RlcmVk 37392\nIOy7pA== 37393\n2YjZgQ== 37394\naXBlcw== 37395\nIFJ1ZHk= 37396\nSmFjb2I= 37397\nIGJ1bGxpc2g= 37398\nIHRhcHBlZA== 37399\nIGZhdWQ= 37400\naXpvcGhyZW4= 37401\nINGB0L7RhQ== 37402\nIERhcmxpbmc= 37403\nIDE5NjM= 37404\nIFByZXZlbnRpb24= 37405\nspQ= 37406\nIGFiZG9taW5hbA== 37407\nc3RvbmVz 37408\nIGF2YWllbnQ= 37409\n4buVaQ== 37410\nbWFrZQ== 37411\nIHNhcmU= 37412\nIEluc3RhbnQ= 37413\n0LrQsNC8 37414\nIGtlZXBlcg== 37415\nIGJsYW5rZXRz 37416\nIHN3ZWF0cw== 37417\nIE1pbm5lYXBvbGlz 37418\nIGdlbm9tbWVu 37419\nIGZhc3Rlbg== 37420\nIEJydXNzZWxz 37421\nIGNhZmV0ZXI= 37422\nIGFic29yYmluZw== 37423\nIGhhZ28= 37424\nIEVsbW8= 37425\nIGd1c3Rv 37426\nIFlhcA== 37427\nTcO6c2ljYQ== 37428\nIHRlcnQ= 37429\nIGJhbmRh 37430\nIG1pbHk= 37431\nIHRoZXJlYWZ0ZXI= 37432\nIFN0b2NraG9sbQ== 37433\nIENhcnNvbg== 37434\nIGNhbGlicmF0aW9u 37435\nYXZhxZ8= 37436\nYW5zYQ== 37437\naWtrZQ== 37438\nIGZvcmVzZWU= 37439\nIHF1YWxjaGU= 37440\nIGRlc3Rl 37441\n5qQ= 37442\nw7xuw7x6 37443\nIGZvcmdl 37444\nRGlz 37445\nZXN0ZW4= 37446\nIM60zrnOsQ== 37447\nIGVuY2Fwcw== 37448\nIEdlc3By 37449\nIGNoZXJjaGVy 37450\naWNrZXRz 37451\n0YLQvtGA0Ys= 37452\nQ3I= 37453\nINCi0LDQutC20LU= 37454\nIHJhYmJpdHM= 37455\nIERvdA== 37456\naGVpdGVu 37457\nIGNhdXNhbA== 37458\nIEZvc3Rlcg== 37459\nYWrEhWM= 37460\nIGJlcmVpdA== 37461\nIGF5dWRhcg== 37462\nc29uZw== 37463\nY29tYg== 37464\nIGZyaW5nZQ== 37465\nIGN5YmVyc2VjdXJpdHk= 37466\nIOucqA== 37467\nIGtpZXI= 37468\nIGJlc2Now6RmdA== 37469\nINC60L7QvdGG0LU= 37470\nIGZhY2lsaXQ= 37471\nIE5hbWVu 37472\nIGJpbGF0ZXJhbA== 37473\ndHg= 37474\nIFdpc3NlbnNjaGFmdA== 37475\nIG51YW5jZXM= 37476\nIHJpcHBpbmc= 37477\nIGZ5 37478\nIFNpY2hlcmhlaXQ= 37479\nIEdoYW5h 37480\nb2xvbg== 37481\nIHRvcHBlZA== 37482\nIE1vcm9jY28= 37483\nIHJhZGlhbA== 37484\nIExFRQ== 37485\nIEFuZHJlYXM= 37486\nZWRk 37487\nIOyXtOs= 37488\nIEFpcmxpbmVz 37489\nIHZhbG9yZXM= 37490\n6rec 37491\nSHk= 37492\nINC30LDQtNCw0Yc= 37493\nIEtlbmRhbGw= 37494\nINGF0LDRgA== 37495\nIFZhbXA= 37496\nIHB5dGhvbg== 37497\nIG1hbmFnZWFibGU= 37498\nIEdlbnRl 37499\nb2lzZQ== 37500\naWNpYXJ5 37501\nIGltcG9zcw== 37502\nIEJ1bm55 37503\naWVzdGE= 37504\nQW5kcmV3 37505\nIHNlcnQ= 37506\nIENlYw== 37507\nenphcmVsbGE= 37508\nIGF1dG9tb2JpbGU= 37509\nIFRpZXJl 37510\nYWxsb3dz 37511\nIOuwgA== 37512\nIFNjb3Jw 37513\nIEplbGx5 37514\nYWdhcmE= 37515\nIFN0cmV0Y2g= 37516\nIHJlZGVm 37517\nIGV4YWNlcmI= 37518\nIFNIQQ== 37519\nw6lm 37520\nb3JzYQ== 37521\nIGZsYXdlZA== 37522\nIE5vZWw= 37523\nPyE/ 37524\nIHByb2NlbnQ= 37525\nIG1lbnN0cnU= 37526\nINC/0YDQvtGH 37527\nIGluZmFudHM= 37528\n8J+OtQ== 37529\ncGF1c2U= 37530\nIFJhY2luZw== 37531\nIDE5NDg= 37532\nIHN1cGVyaW50ZW5kZW50 37533\naWRvcmVz 37534\naWR5 37535\nYnJhaGlt 37536\nIHVubHVja3k= 37537\nIHBlcms= 37538\nYW5jaQ== 37539\nIOunjOuCmA== 37540\nINCc0L7RgdC60LI= 37541\nIGZpbmFucw== 37542\nIGRpZmVyZW5jaWE= 37543\noIjsnbQ= 37544\nT1JZ 37545\nIFRhYw== 37546\n24zYpw== 37547\nIGRlc2Vt 37548\nINCy0LDQttC90L4= 37549\nIEpV 37550\nIOyeiOyeluyVhOyalA== 37551\nIM6d 37552\nIGluZm9ybWF0aW9ucw== 37553\nIEhFTA== 37554\naHN0 37555\nINC/0L7Qs9C+0LLQvtGA 37556\nIHZvaXR1cmU= 37557\nIHJldXM= 37558\nw6RuZGln 37559\nINC/0L7RhdC+0LY= 37560\namluZw== 37561\nIGRydQ== 37562\nYWx0cmE= 37563\nIHByb2R1aXRz 37564\nIGtpdGU= 37565\nIGV5ZWJhbGw= 37566\nIEJlbHQ= 37567\nIFJlc3RhdXJhbnQ= 37568\nIGdhbWI= 37569\nIHBvcnJpZGdl 37570\naXR0ZXJz 37571\nIGNvbnZlcnRz 37572\nIHlhcmTEsW0= 37573\nIG3DoXhpbW8= 37574\nd2lydHNjaGFmdA== 37575\nIO2VmOuCmOs= 37576\nIOykgA== 37577\nIGljZWJlcmc= 37578\nIHZvcmJlaQ== 37579\nIDI1Ng== 37580\nb2NyYXRpYw== 37581\nIHJlY2tsZXNz 37582\nb25uZXI= 37583\nIG3DunM= 37584\nIGxvZ2ljYWxseQ== 37585\nIFByaXNvbg== 37586\nIE5ldHo= 37587\nIHZhY2FudA== 37588\nIG5pbW10 37589\nIEhBUlI= 37590\nINC30L7Qsg== 37591\nIERlZQ== 37592\ncmluZ2U= 37593\nbmllc3Q= 37594\nIFJ1bGVz 37595\n7Iqk65+9 37596\nY3Vzc2lvbnM= 37597\nIGZsb3JhbA== 37598\nIGNvbnN0cmFpbmVk 37599\nIGRpZmZlcmVudGlhdGlvbg== 37600\nIFF1ZWJlYw== 37601\nINuB24zaug== 37602\nIHDDumJsaWNh 37603\naXRlbA== 37604\nIGFjY29tbW9kYXRpb25z 37605\nIEdyw7w= 37606\n7Zw= 37607\nIHBpY2tsZXM= 37608\n0LjRh9C10YHQutC40YU= 37609\nIGNvbW1pc3Npb25z 37610\nIEJhZWs= 37611\nIMOnb2N1xJ8= 37612\nIE1lZGl1bQ== 37613\nIHBlcmlvZGljYWxseQ== 37614\nIHdvbmRlcmZ1bGx5 37615\nIHN0YWZmaW5n 37616\n7JuQ6w== 37617\ncmlyZQ== 37618\nZmxl 37619\nIE1jTA== 37620\nINGC0LXQvw== 37621\nINC/0LXRgNC10Lo= 37622\n0L3QvtC70L7Qsw== 37623\nIO2BrOqyjA== 37624\nIHByb3NwZXJvdXM= 37625\nIFNwaXJpdHVhbA== 37626\nIENoaWNr 37627\nRElB 37628\nINCf0YDQuNCy0LXRgg== 37629\nIHBlcsOt 37630\n0YzRjtGC 37631\nIGNvbnN1bHRhbnRz 37632\nIEVhcmw= 37633\nIHJ1aW5pbmc= 37634\n0L7RgNC1 37635\nIHBlbnNlcg== 37636\nIHRha2llag== 37637\nIHN0cmVuZ3RoZW5lZA== 37638\nIExpcXVpZA== 37639\n0L7QvdC10YY= 37640\n0LDQstCw0YLRjA== 37641\nIGNhbWVy 37642\nIGRpc2FncmVlbWVudA== 37643\nIGJhdGhpbmc= 37644\nIFlvc2g= 37645\nYWFs 37646\ncHJlY2hlbg== 37647\nUklTQURBUw== 37648\nIHN1cGVyc3Rhcg== 37649\n0LvRj9GC0Yw= 37650\nIG5pYg== 37651\nIFRoZXJt 37652\nIERBTklFTA== 37653\nIHBhdw== 37654\nIGxpcXVpZHM= 37655\nIGNhcGFjaXQ= 37656\nYXJrZW4= 37657\nIHZhZ2luYQ== 37658\nIG1hc2hlZA== 37659\nIGVtZXJnZXM= 37660\neXNjeQ== 37661\nIHVucmVsYXRlZA== 37662\nIEd1aWxk 37663\nIGludmVydGVk 37664\naXRpdmVz 37665\nVHJh 37666\nIGJlZ3I= 37667\nIGFsdGU= 37668\n7KeV 37669\nINGA0LDQt9GA0LDQsdC+0YI= 37670\nZmluZGVy 37671\nINC00LDQu9C10LU= 37672\nINCx0LvQsNCz0L7QtNCw0YA= 37673\nd2Fsa2Vy 37674\nIGNyYXRlcg== 37675\nYXNzYWRvcnM= 37676\ncmVuY2Vz 37677\naW5za2k= 37678\nIEtJTQ== 37679\nIEVsbGlvdA== 37680\nMjAxNw== 37681\nIFNy 37682\naW5rYQ== 37683\nYW5vdg== 37684\nIOyemOuquw== 37685\nIHByb3ByaWV0YXJ5 37686\nZGlzcGxheXN0eWxl 37687\nINGB0LjQvA== 37688\nINC40LfQsQ== 37689\nIFBhbmVs 37690\nIGluc3RpbmN0cw== 37691\nIENvbW11bmljYXRpb25z 37692\nbWlkdA== 37693\nIOunjOuTpOyWtA== 37694\nINGB0LvQvtCy0LA= 37695\nIEdpbGJlcnQ= 37696\n0KLQsNC6 37697\ndm9vcmJlZWxk 37698\n0LXRjtGB0Yw= 37699\nYXJ5bg== 37700\ncXVleg== 37701\nIGRhcnQ= 37702\n0ZbRiA== 37703\nIEh1dA== 37704\nU2Fs 37705\nIHNvdXRoZWFzdA== 37706\nIHBlc3RpY2lkZXM= 37707\nIGhlbGljb3B0ZXJz 37708\nIGVuZHVyZWQ= 37709\naWFkYQ== 37710\nIGJyZXdpbmc= 37711\n7Jes6w== 37712\nINGB0LLQvtCx0L7QtA== 37713\nIFNhaW50cw== 37714\nIEZyYW7Dp2Fpcw== 37715\nIEVjb25vbWljcw== 37716\nIGRpc2xvYw== 37717\nb3Bob2JpYQ== 37718\nQ2FtZXI= 37719\nIG5lZ290aWF0ZWQ= 37720\nINGB0YLQsNC70Lg= 37721\n7Iqk7YE= 37722\nb2dpZQ== 37723\nIHRzdW5hbWk= 37724\nIHBlZWxlZA== 37725\nIG1vdGl2YXRpb25z 37726\nb3N0YXQ= 37727\nZmxhbg== 37728\nIERBQw== 37729\nIGthdg== 37730\nJ1JF 37731\nIFBlYXJzb24= 37732\nYmJl 37733\nY3plbmll 37734\nIGF0ZW7Dp8Ojbw== 37735\n7Ya166C5 37736\nINGD0LTQsNGA 37737\nIGludHJvZHVjdG9yeQ== 37738\nIEljaQ== 37739\n64yA6w== 37740\nYWthdA== 37741\nIHRyZW5jaA== 37742\nIHByb2NlZWRlZA== 37743\nIENvaW4= 37744\nIGRlcmVjaG8= 37745\nIFJlZGU= 37746\n0LDQvdC90YvQuQ== 37747\nIGluY2FyY2VyYXRlZA== 37748\nIFJpY2htb25k 37749\nUm9jaw== 37750\nIFBhdg== 37751\nIEthcm1h 37752\ndWdlcw== 37753\nIGNvbnRlw7o= 37754\n67mE 37755\nIOq3uOunjA== 37756\nIEdvbmU= 37757\nIHdzcMOzxYI= 37758\nIFJhaG1lbg== 37759\ndW5rZW4= 37760\nIOykkeyalO2VnA== 37761\nIGli 37762\nIGF0dGFjaGluZw== 37763\nSGF5 37764\nIHN1a2E= 37765\n7I25 37766\nIHBpdm90YWw= 37767\nIFJlc3BlY3Q= 37768\nw61kYQ== 37769\nSUI= 37770\nIFZlcmFudHdvcnQ= 37771\nd2lldA== 37772\nIGZvcmVuc2lj 37773\n0YDQuNGB0YI= 37774\nINC/0YDQuNC90YbQuNC/0LU= 37775\nIG1hcmtpbmdz 37776\nIGtldHRsZQ== 37777\nIE9wZXJh 37778\nIERvY3RvcnM= 37779\nIHNocmVkZGVk 37780\nIHJlY3Vlcg== 37781\nIHZpZ2ls 37782\nIEZhaWw= 37783\nIGVudHJldg== 37784\nINC00YPRiA== 37785\nIG91dGJyZWFrcw== 37786\nIM+Azr8= 37787\nIHJvZ3Vl 37788\nYW5nbGVk 37789\nIHllYXJseQ== 37790\nIENyZWVk 37791\nIHdhbQ== 37792\nIGxvdHVz 37793\n6rO86w== 37794\n44CB44CB 37795\nIFNwaXQ= 37796\nIEl0dQ== 37797\nIHN0cmFpbnM= 37798\nIHN0YW1wZWQ= 37799\nIHBsYWludA== 37800\nIHBvdGlvbg== 37801\nIGNvbnNvbGlkYXRpb24= 37802\n0L7Rh9C60YM= 37803\nIHZsb2dnaW5n 37804\nIHNsYXRl 37805\nIEF1ZnQ= 37806\nIEluY29y 37807\n4burbmc= 37808\np5A= 37809\nZW5o 37810\nIGhlacOf 37811\nIGRvbWVzdA== 37812\nIFN0cm9t 37813\nYWtpcw== 37814\nIGZyYWdlbg== 37815\nIGZpbmVy 37816\nIFN1Zw== 37817\nIHVwaGlsbA== 37818\nIMOpw6lu 37819\n4oCmKQ== 37820\nINGB0L7Qvw== 37821\nIENvcmV5 37822\nIHNpZWJpZQ== 37823\nIG11c2U= 37824\nIGNsb3Zlcw== 37825\nIHBvdXM= 37826\nIEZpbmFueg== 37827\nIFJvdXRl 37828\nYW1hdA== 37829\nIG11dHVhbGx5 37830\nINCy0L3Rg9GC0YDQuA== 37831\nIFNlbGVuYQ== 37832\n65Q= 37833\nIEdhdXNzaWFu 37834\n67aA7YSw 37835\nINeR15s= 37836\nIGVqZXJj 37837\na2Vh 37838\nIEdlcnJ5 37839\nIFNpYw== 37840\nIDE5NjY= 37841\naWVzZQ== 37842\nIGZvc3NpbHM= 37843\nIGVzdGFk 37844\nIEthbmU= 37845\nY2nEhw== 37846\nIOycoO2KnOs= 37847\nINC/0LDQvA== 37848\nIENydWlzZQ== 37849\naW50w6lyaWV1cg== 37850\nIGJla2FubnQ= 37851\nIFBvZGU= 37852\nIGRlbWFuZGVy 37853\nUmVt 37854\nIGludmFkZQ== 37855\nIGRlY29yYXRpbmc= 37856\ncm9waWM= 37857\nIGNvd2JveQ== 37858\nIFBob3Rv 37859\nb3BvbGl0 37860\nIOy7rOufrOs= 37861\nIHJlYXA= 37862\nIGhhbmR3cml0aW5n 37863\n4LmE4Lij 37864\nIOua 37865\nINio2LnYrw== 37866\nIE10 37867\n2YA= 37868\nIHNwYWNlc2hpcA== 37869\nIG5hdGlvbmFsaXNt 37870\nIGNvdW5jaWxz 37871\nIEdyaWZmaW4= 37872\nIEFobWVk 37873\nIGNsaWNo 37874\nIE9M 37875\nd2w= 37876\nIFBpbG90 37877\nIGFjcm9ueW0= 37878\nIGdlbHM= 37879\nIGVsZWN0cm9seQ== 37880\n6JM= 37881\nINC80L3QvtC5 37882\nIGVwaXNvZA== 37883\nIERpZXNlcw== 37884\nIEFUUA== 37885\nIGVkaXlvcnVt 37886\nIGV4cHJlc3Nlcw== 37887\nIGV4aGliaXRz 37888\nQ29tbQ== 37889\nINC60YDRg9C/ 37890\nIG1hdGFy 37891\nIDIwMjU= 37892\nIEFydGVt 37893\ndmFzaXZl 37894\ncsOg 37895\nIGJlxZ8= 37896\nIGxpemFyZA== 37897\nIGZpbGxl 37898\nIOyniOusuA== 37899\nINC80L7RiQ== 37900\nIHTDvHI= 37901\nIGN1bHByaXQ= 37902\nIHdvdmVu 37903\nIEFOWQ== 37904\nbmlt 37905\nIHRheQ== 37906\nIHByb21pbg== 37907\nIGFjb21wYQ== 37908\nIGlkw6k= 37909\nIGJvaWxlcg== 37910\nIFRoZW1lbg== 37911\nIGF2ZW51ZQ== 37912\nIE11ZA== 37913\nINC90L7QstGL0LU= 37914\nIHdpdG5lc3Npbmc= 37915\nIGxhbmNl 37916\nIENIQU4= 37917\nIEJldmVy 37918\n2KrZhQ== 37919\nIGNoZW1vdGhlcmFweQ== 37920\nS2luZw== 37921\nIGLEmWTEmQ== 37922\nIGF0dWFs 37923\nIHRpdmU= 37924\nIHRhbGtpbg== 37925\nIHF1ZWRhcg== 37926\naWXDnw== 37927\nZWRlbA== 37928\nIOyWtOygnA== 37929\nIGpvZ2Fy 37930\nIMO2cg== 37931\nIHVuZGVydGFraW5n 37932\nIFN0cmVuZ3Ro 37933\nIG1pbGjDtWVz 37934\nIFdpbmU= 37935\nIE1vbHQ= 37936\nIHVuZGVybWluZQ== 37937\nIEFyY2hpdmVz 37938\ndmFuYQ== 37939\nbWVyY2lhbA== 37940\nTUM= 37941\nIGNhc3Rl 37942\n0L/RgA== 37943\nIGxlZ2lzbGF0b3Jz 37944\ndWxhdG9ycw== 37945\nw6puaW8= 37946\nIOuNsOs= 37947\nINGF0L7RgtC40YLQtQ== 37948\nINC90LXQug== 37949\nIHN1cm4= 37950\nIGNvbnNjaQ== 37951\nIFBPVw== 37952\nIGN1bGluYXJ5 37953\nIEtBVA== 37954\nIEZvbGtz 37955\n0YvQstCw0LXQvA== 37956\nINCy0L7Qug== 37957\nc2VydmljZQ== 37958\ncHRz 37959\nINC/0L7QsdC10LQ= 37960\nIHRlbnRz 37961\nIG5vcmQ= 37962\nU1RF 37963\nIHJlcHVibGljYW4= 37964\nIHd5aw== 37965\nIG1pbmlvbnM= 37966\nIG1lbWFuZw== 37967\namVzdA== 37968\nIGNvbXBhcmF0aXZl 37969\nIHR5bGU= 37970\nY2FyYm9u 37971\nYmVkaW5ndA== 37972\na3Nlbg== 37973\nIG5lZ2F0aXZpdHk= 37974\nIHNqw6Rsdg== 37975\nIGTDug== 37976\nIHJlY2FsbGVk 37977\nY3Jh 37978\nIFRhZGE= 37979\nINGA0YPQutC4 37980\nINC+0L/RgNC10LTQtdC7 37981\nIHByb2NyYXN0 37982\nIGpvZ29z 37983\nIE9v 37984\nIEhlYXJ0cw== 37985\nIMOpY2g= 37986\nIGtzacSFxbw= 37987\nIGNvYXJzZQ== 37988\nIFR1YmU= 37989\nIEdyZWVucw== 37990\nIMOpbg== 37991\nIGR1bWJiZWxs 37992\nINGC0Lg= 37993\nIHF1ZXJlcg== 37994\n2KfYrQ== 37995\nz4POtc65 37996\nINC/0YDQsNCy0LjQu9GM0L3Qvg== 37997\nINC/0LDQvw== 37998\nIGNvbXByYQ== 37999\nIHTDqXI= 38000\nIEFudGVz 38001\nIG9wdGltdW0= 38002\nIGJpc2N1aXQ= 38003\nzrrOuQ== 38004\nYWN6ZWdv 38005\nIOyLnOqwhOydtA== 38006\nIE1hcmluZXM= 38007\ndmVybw== 38008\nIHZhY2NpbmF0aW9ucw== 38009\nIHBldHR5 38010\ncml0ZXJz 38011\nINCw0Ls= 38012\nY291bnRyeQ== 38013\nIGNvdW50ZXJz 38014\nIGF0dGVuZGFudA== 38015\nIEh1aQ== 38016\nY2th 38017\n0YHRgtCy0LXQvdC90YvQuQ== 38018\nZ3V5 38019\nIHRyaWNrZWQ= 38020\nIFJFRA== 38021\nIHRocmlsbGluZw== 38022\nz4DOv865 38023\nIHBpZ2d5 38024\nIGFudW5jaQ== 38025\nT1JURVI= 38026\nIFZhbHVl 38027\nIHJvbmQ= 38028\nIEFEQQ== 38029\nIHBvc2Vy 38030\naG9yZXM= 38031\nIFJvbGFuZA== 38032\nk68= 38033\nIG5vaXI= 38034\nINep15DX 38035\n67Cc 38036\naWVtYW5k 38037\nINC/0L7RgtC10YA= 38038\n6rOz 38039\nIOqxsQ== 38040\nIGZvcm1hdHRpbmc= 38041\nIExlZA== 38042\nIGtpbGxlcnM= 38043\nIMSR4bqleQ== 38044\nIGhhYXI= 38045\nYWdhaW4= 38046\nITwv 38047\nIHNvbWV0aGlu 38048\nIGNvdWdoaW5n 38049\nIG5hdmU= 38050\nIHByb3NwZWN0aXZl 38051\nIEhL 38052\nIFJlc2N1ZQ== 38053\nbWF5YmU= 38054\nZ2dlcg== 38055\nINGA0LDQsdC+0YLRgw== 38056\n15XXnNed 38057\ndGFpbHM= 38058\n7ZWY7ZWY 38059\nIGV5ZWxpZA== 38060\nIGN1c3RvbWl6YXRpb24= 38061\nYXZpbGlvbg== 38062\nIHByb2NoYWlu 38063\nIGdsYXpl 38064\nU2lt 38065\nINC+0L/QsNGB 38066\nIG1vc3F1aXRvZXM= 38067\nIGZlbnQ= 38068\nIGNhcGFjaXRpZXM= 38069\nIGFwb3N0bGVz 38070\nIGFsdHVyYQ== 38071\nIOusuw== 38072\nIHNlcm9udA== 38073\nIEFueXRpbWU= 38074\npbTripQ= 38075\nIGNvc3BsYXk= 38076\nIHNwYWM= 38077\nIHNhbWVu 38078\ndWNj 38079\nacOocmVz 38080\nIHNpYmxpbmc= 38081\nIENvY2s= 38082\nIOuPhQ== 38083\nINC/0YDQtdC00YHRgtCw0LLQu9GP 38084\nIGluc3RhbGxtZW50 38085\nIGRpamU= 38086\nIE1DVQ== 38087\nIEVI 38088\nIE5pbmc= 38089\nIHByZXBhcmVz 38090\nIGh5cG9jcg== 38091\ncHR5 38092\nIGthZMSxbg== 38093\nIEZyb3plbg== 38094\naGF1bA== 38095\nIEt5bGll 38096\nIHNodWZmbGU= 38097\nIGVsZW1lbnRhbA== 38098\nIGF1w59lcg== 38099\nIEtOT1c= 38100\nIEFMSVNTQQ== 38101\nWkE= 38102\n7LKg 38103\nIHJlY2l0ZQ== 38104\nIHNjcmli 38105\nIDExNQ== 38106\nIHN0YXJyZWQ= 38107\nIGxlcXVlbA== 38108\nIGJyZXdlcg== 38109\nIE9wcG9ydHVu 38110\nIHLDpA== 38111\nIGNob3BzdGlja3M= 38112\nIEthaA== 38113\nIEV0aGlvcGlh 38114\nIGhhbmRtYWRl 38115\nIGVyZm9sZw== 38116\nIER6 38117\naXR0ZW5z 38118\n0LLQsNC7 38119\nzrfOvQ== 38120\nYnJpbmdlbg== 38121\nIHVucGx1Zw== 38122\nIG9mZnM= 38123\nIGhlcm1hbg== 38124\nbGllZA== 38125\nYXNvbmlj 38126\nIFNlcmJpYQ== 38127\nIEd1YXRlbQ== 38128\nIC4uLiI= 38129\nIGVycmVpY2hlbg== 38130\nIGFtYmlndW91cw== 38131\nIFdoaXRuZXk= 38132\nenVm 38133\nTUFORA== 38134\noLU= 38135\nIHNxdWVlemVk 38136\neWFz 38137\nIFNob2Nr 38138\nIHV0aWxpc2U= 38139\ndWtv 38140\nYm9sdA== 38141\nIG1vdGlm 38142\nIGlubWF0ZXM= 38143\nIGNvcnJ1cHRlZA== 38144\nIGNvbmNyZXQ= 38145\nIENyaXRpY2Fs 38146\nIFNpbmdpbmc= 38147\nINGE0YPQvdC6 38148\nbm92YQ== 38149\ncmViYmU= 38150\nZHQ= 38151\nVW5pcw== 38152\nIHdlYmNhbQ== 38153\nIGNhbW91Zmw= 38154\nS2Vu 38155\nIGxhd3N1aXRz 38156\nIENvbnN1bWVy 38157\nIHJlY29sbA== 38158\nIGtsZWluZXI= 38159\nIEZJRkE= 38160\nIDE5NjI= 38161\nIG1hbGFk 38162\nIOywvQ== 38163\nIMOldA== 38164\nIGluZmx1ZW5jZXI= 38165\nIEFydGlzdA== 38166\nc3Rp 38167\n4Lin4Lii 38168\neXPFgg== 38169\nIEJpYW4= 38170\niOuEpA== 38171\nIGZpcmVwbGFjZQ== 38172\nIEFwcGxpY2F0aW9u 38173\nIG1uaWVq 38174\nIGFjaWRpYw== 38175\nIE1vcm1vbg== 38176\nc3Nh 38177\nIHNuZWFreQ== 38178\nIG9qb3M= 38179\nIHZvdWQ= 38180\nIERhaQ== 38181\nIGdyYXNzcm9vdHM= 38182\nIFVuYmVsaWV2YWJsZQ== 38183\nIEdhYmU= 38184\nIEV4dHJlbWU= 38185\nIGhhc3NsZQ== 38186\nIGNvYg== 38187\nbXVtYmxpbmc= 38188\nUGFzcw== 38189\njOufrA== 38190\nIHN5c3RlbWF0aWNhbGx5 38191\nIHNldmVudGVlbg== 38192\nz4DOtc65 38193\n4pmh 38194\nINC60L7Rgg== 38195\nIHNlbmRpcmk= 38196\nIGJhdGhyb29tcw== 38197\nIFN0ZXJu 38198\nIEFyZHVpbm8= 38199\n6Lk= 38200\nY3JpYmluZw== 38201\nIHJlb3BlbmluZw== 38202\nIGNlcnY= 38203\ncGVl 38204\nQVJJ 38205\nIGNhZHJl 38206\nIEFuY2g= 38207\nTGVl 38208\nIE1BWA== 38209\nIG3DpG5u 38210\nIGNob3Jlcw== 38211\nIGFkZXNzbw== 38212\nIE5pZw== 38213\nIGRpc3NlcnRhdGlvbg== 38214\nIFZheQ== 38215\nU1RBTEs= 38216\n0LDQutCw 38217\nYXZhdA== 38218\nIHB1bmt0 38219\nIHBhZGRpbmc= 38220\nIFRlbXBs 38221\nIGVqZQ== 38222\nIO2EsA== 38223\nIGF6dA== 38224\nIOuMgO2GteuguQ== 38225\nIHJlYXJyYW5nZQ== 38226\nw6FjaA== 38227\nIOyCrOuejOuTpA== 38228\nIGZyZWFraW4= 38229\nY3JpcmU= 38230\nIOy7pOs= 38231\nIEV4cGxhaW4= 38232\nIM+Ez4nOvQ== 38233\nIGJvZGlseQ== 38234\nIExlaXN0 38235\nIHNpZ3Vp 38236\nIGJ1bmtlcg== 38237\nIGF6dWw= 38238\nIEhhdXNo 38239\nU3Vi 38240\nINCQ0L3QtA== 38241\nINC60YDQsNC5 38242\nIGlsbGVnYWxseQ== 38243\nIE11eQ== 38244\nIEZlaQ== 38245\nIEJhbmFuYQ== 38246\nIHNjaG9sYXJseQ== 38247\nIFByenk= 38248\nIE1vc3M= 38249\nIEZpbHRlcg== 38250\nIOyWtOuWoQ== 38251\nIE1heHdlbGw= 38252\ndGVuc2U= 38253\nIGxvbmdpdHVk 38254\nIGxhbmdzYW0= 38255\nINee16c= 38256\nc21pdGg= 38257\naXphZGE= 38258\nINC90L7RgNC80LDQu9GM0L3Qvg== 38259\nIFZvbGw= 38260\nIEVsZW5h 38261\nINGF0L7RgtGM 38262\nIERhYmVp 38263\nIGNvbnNlcnZhdGl2ZXM= 38264\nIHByw7Nwcmlh 38265\nIERpZXNlcg== 38266\nIEJyZW5kYQ== 38267\nb29raWU= 38268\nIGJhbmM= 38269\n7J207KY= 38270\n7JuD7J2M 38271\nIGtlaA== 38272\nIHdlZGRpbmdz 38273\nIHRodW5kZXJzdG9ybQ== 38274\nIENvb3JkaW4= 38275\n7IiY6rCA 38276\nIHByemVjaQ== 38277\nT1NTVEFMSw== 38278\nbWFhbg== 38279\nIOqxtOs= 38280\nINio2Yc= 38281\nIMW8YWQ= 38282\nIHlhY2h0 38283\nIGfDtnQ= 38284\nIGJsZWFjaA== 38285\nIHNob3J0ZW4= 38286\nINGB0YLQsNC70L4= 38287\ndXNhbg== 38288\nIOyekOyXsA== 38289\nIGRlcnM= 38290\neGlz 38291\njZTri4g= 38292\nIHF1YW50aWRhZGU= 38293\nIG9wcHJlc3NlZA== 38294\nINC30LDQutC+0L3Rhw== 38295\nINGH0LXRgtGL 38296\nINCd0LDQv9GA0LjQvNC10YA= 38297\ndWxw 38298\n2YLZiNmE 38299\n0L7Rh9C1 38300\nzqzOuw== 38301\nemVuaXU= 38302\nIGZvcm1hdGlvbnM= 38303\nIHNwYXJrZWQ= 38304\nIEVudHdpY2tsdW5n 38305\nYWxscw== 38306\nIHZpdmly 38307\nIGV4cGlyYXRpb24= 38308\nb3RpbmU= 38309\nINCn0LXRgA== 38310\nIFR1cm5pbmc= 38311\nIHRhcmlmZnM= 38312\nIG5hc3TEmXA= 38313\nIGFiaWRl 38314\naWtzaQ== 38315\nIGZsYXNoZXM= 38316\nIGRpc3B1dGVz 38317\nIOyytA== 38318\nIG1lcmFr 38319\nIGVub3Jtb3VzbHk= 38320\nemFobA== 38321\nIGbDvGhydA== 38322\n0LLQvtC9 38323\nINC30LDQstC40YE= 38324\nIHBlcnNldmVyYW5jZQ== 38325\nIGRpdmlkZW5kcw== 38326\nIGNvbnRlc3RhbnRz 38327\nIHByb3N6xJk= 38328\nIEZyYW5rZW4= 38329\nIGV4cGxvcmVy 38330\nIGJ1ZmZhbG8= 38331\n4oCV 38332\nIGVjb2xvZ3k= 38333\nIHNjYWxhcg== 38334\nIGNyYW4= 38335\nzrXPhM6xzrk= 38336\nxbx5xIc= 38337\nIOyalOs= 38338\nIGdpYQ== 38339\nIEdvZw== 38340\nIFByaXY= 38341\nIOunkOydhA== 38342\nIFJlYXNvbg== 38343\ncmFrdGlvbg== 38344\nIERlYm9yYWg= 38345\nIGtpdHRlbg== 38346\nIEVkaW4= 38347\ncGllag== 38348\nIOuLtA== 38349\nIG3DoXF1 38350\nIGJpZGRpbmc= 38351\nIGFmZmluaXR5 38352\nIGFpa2E= 38353\nZm9saw== 38354\nIENvbnNl 38355\nIGRldXRzY2hlbg== 38356\n6IY= 38357\nIGRlYml0 38358\nxLHEn8Sxbg== 38359\naXNlbA== 38360\nIOykkeq1rQ== 38361\nIOutkOqwgA== 38362\nIHRydXN0d29ydGh5 38363\nIFN0YXJ0ZWQ= 38364\nw7xyZA== 38365\nINC/0L7QvdGP0YLQvdC+ 38366\nIHNjaWVudGlmaWNhbGx5 38367\nUG9kcw== 38368\nQ1JPU1NUQUxL 38369\nIHByZWd1bnRhcw== 38370\nIGNhbG1pbmc= 38371\nIFByZW1pZXJl 38372\n15vXqQ== 38373\nINGF0L7Qu9C+0LQ= 38374\nIGNhcGl0YQ== 38375\nIHRvbWE= 38376\nIG11cm0= 38377\nIGZ1ZXJ6YQ== 38378\nIEhhbmk= 38379\nw7xm 38380\nYXJsb3M= 38381\nIGjDpHVm 38382\nIG9zb2J5 38383\namVnbw== 38384\nINC/0LjRgQ== 38385\nIGNhbG1seQ== 38386\naWRldA== 38387\nYnVjaA== 38388\nZ29uZQ== 38389\nIHZpc2Nvc2l0eQ== 38390\nIG1vZGFs 38391\nIGdlc2Ft 38392\nIEh6 38393\nIG11bmljaXBhbGl0aWVz 38394\nIGNpcmN1bGF0aW5n 38395\nb2xpbmE= 38396\nU2hv 38397\nIEJlbmVk 38398\nb2x1 38399\nIHJlc3Rz 38400\nIGzDpW5n 38401\nINCe0LTQvdCw0LrQvg== 38402\nIHByemV3 38403\nIHBlcHA= 38404\nIG1hcnJpYWdlcw== 38405\nIEJJRw== 38406\nYW5kYW4= 38407\nIG1hZ2ljYWxseQ== 38408\nIGJhYnlz 38409\nIOuMkw== 38410\nIGhhY2tlcnM= 38411\nQmFieQ== 38412\nIE1vbnN0 38413\nIGNpZXI= 38414\nIEFyYWJz 38415\nINC80LDQs9Cw0Lc= 38416\nIEluZG9uZXNpYW4= 38417\nIE1hcmt0 38418\nIGRhY2h0ZQ== 38419\nIFNjaMO8bGVy 38420\nIFZORA== 38421\nIHNwaWVsdA== 38422\nIHBlcmx1 38423\nINC/0YDQvtGF0L7QtA== 38424\nIHNhbHRlZA== 38425\nIGltcHJvdmlz 38426\nIEluc3Ry 38427\ndmVsbWVudGU= 38428\nIG5lc3M= 38429\nIGZ1bmd1cw== 38430\nIGNvbGxhYm9yYXRvcnM= 38431\nIFZpcnVz 38432\nZXN0YXI= 38433\nIHByb2plY3Rvcg== 38434\nINCf0YDQsNCy 38435\nIGFnaWxpdHk= 38436\n15nXoNeV 38437\nZXJlbA== 38438\nINCy0L7Qt9Cy 38439\nINCx0LDQtw== 38440\nIENhdGh5 38441\nxJ91 38442\nINCz0L7QstC+0YDQuNC7 38443\nYmlsaXR5 38444\nIExhbmM= 38445\nIEtpbWJlcmx5 38446\nIEJyaWVm 38447\nIHV0dmVjaw== 38448\nIGdvZ2dsZXM= 38449\nIHByZXNjaG9vbA== 38450\nQVRIRVI= 38451\nIG1vdGl2ZXM= 38452\nIEJvbmc= 38453\nRVg= 38454\nIGNoaWxseQ== 38455\nIEFkdmlzb3J5 38456\n4oCL4oCL 38457\nINC60L7RgtC+0YDQvtC8 38458\nIHRyYWl0b3I= 38459\nIGRlbWFzaWFkbw== 38460\nINGG0LXQvQ== 38461\nINC80L7QuA== 38462\nIG11bHRpZg== 38463\n7JSs 38464\nIEFsZXhpcw== 38465\nIHppZXQ= 38466\nIFJhbWE= 38467\nYnJhbmNl 38468\nIHNhbmN0aW9u 38469\naXRvdXM= 38470\n15XXmg== 38471\nIOuztOuC 38472\n0YHRgtCw0L3QvtCy 38473\nINGA0LXRgQ== 38474\nIENodXJjaGlsbA== 38475\nINC/0YDQtdC3 38476\nIElP 38477\nIEdlZQ== 38478\nIEdhdGhlcg== 38479\nYXRvcmk= 38480\nVHlsZXI= 38481\nINC90LXQvNC90L7Qtg== 38482\nIGLDpWRl 38483\nIEtpbGxlcg== 38484\nIHR1YmVy 38485\nIFJhbWFkYW4= 38486\n4b8= 38487\naWVodA== 38488\nIHN0cmFuZ2VseQ== 38489\n0LvRgw== 38490\nIHJlZGVzaWdu 38491\nIGluY3VtYg== 38492\nIGJlcmFiZXI= 38493\nIFZvbGtzd2FnZW4= 38494\nbWV0YWw= 38495\nZHp5 38496\ncGNpw7Nu 38497\nIOyViuyVhA== 38498\nIEdvb2RuZXNz 38499\n0LjQstCw0LXRgtGB0Y8= 38500\nYmFobg== 38501\nIEFudGFyY3RpY2E= 38502\n0LXQutGC0L7RgA== 38503\nIGhvbWVvd25lcnM= 38504\nemVpZ3Q= 38505\nIO2YhOyerA== 38506\n7KeA64+E 38507\nIGdlb2dyYXBoaWNhbA== 38508\ndGhpbmtpbmc= 38509\nIGdvc3Rh 38510\nIEltYW0= 38511\ndWxpZmxvd2Vy 38512\nZGFn 38513\nYW5udA== 38514\nYWtvdg== 38515\nIGRvd253YXJkcw== 38516\n7LK06rCA 38517\nQ1VCRQ== 38518\nINCa0YHRgtCw0YLQuA== 38519\nINC/0L7Qu9C+0LI= 38520\nIHBsYXRlYXU= 38521\n4bil 38522\nIGNobG9yaW5l 38523\nIGFjY2VsZXJhdG9y 38524\nIHNvbHZlcw== 38525\nIEdyYXNz 38526\ncGlhbm8= 38527\nINqp2Kc= 38528\nINio2Ko= 38529\nIFJvY2hlc3Rlcg== 38530\nINmH2Yo= 38531\nIGNvbGxlY3Rz 38532\njZTrnbw= 38533\nIENoZWVy 38534\nbGluZ2Vu 38535\nINGA0LDQt9Cz 38536\nIGFtw6lyaWM= 38537\naHRh 38538\nRUNU 38539\nIGFydGlmaWM= 38540\nIFBheVBhbA== 38541\naGFuYQ== 38542\nU3RlcGhlbg== 38543\nIEdlc3Q= 38544\ncGhhbHQ= 38545\nIHJlcGxpY2F0aW9u 38546\nIFdpbGxpZQ== 38547\nIG5ldXRy 38548\nIGlycmF0aW9uYWw= 38549\nIGRhZG9z 38550\nIEFpZA== 38551\na2Ft 38552\nYW50ZXI= 38553\nINC00YPQttC1 38554\nIGRldG9u 38555\nIGhhcmU= 38556\nIGJldHM= 38557\nYmFnYWk= 38558\nIHN0YWluZWQ= 38559\nIHBsYXVzaWJsZQ== 38560\nIHBlZWxpbmc= 38561\nIGNyw610 38562\nIGdyb3Rl 38563\n7Law 38564\npbTqsow= 38565\nYWx0ZXQ= 38566\nUGhvbmU= 38567\nRmls 38568\nU1FM 38569\nIGdlZmFsbGVu 38570\nIHNhw7pkZQ== 38571\nIFRhbWls 38572\nY291cw== 38573\nINCz0LvQsNCy0L3QvtC1 38574\nIGF0cmF2w6lz 38575\ndXNzaWE= 38576\nIHp3ZWl0ZW4= 38577\nIEVsdmlz 38578\nIG1vdmVy 38579\nIGxpbWl0ZQ== 38580\nYXJleg== 38581\npbTqs6A= 38582\nIEtyYW5rZW4= 38583\nw7xyZQ== 38584\nIOyViuyVhOyalA== 38585\nIHRow6BuaA== 38586\nIHByb2ZvdW5kbHk= 38587\nIGJlZHJvb21z 38588\nIHRvb3RocGFzdGU= 38589\nIEFjY2VwdA== 38590\nw6l0aWNv 38591\nIGvDvMOn 38592\nIEFyeQ== 38593\nYWRpbg== 38594\nIGdyYW51bGFy 38595\nZWN0ZWQ= 38596\nIG1lbmphZGk= 38597\nIGNvbXBldGVuY2U= 38598\nZG9j 38599\nIHNwYXJrbGluZw== 38600\nIOyii+ydhA== 38601\nIGNvbnN0cnVjdGluZw== 38602\nIGFtdXNlbWVudA== 38603\nIEluc3VyYW5jZQ== 38604\nIEZldWVy 38605\nIHJlbm92YXRpb24= 38606\nc3VjaA== 38607\ncGxhdA== 38608\nIHByb3N0aA== 38609\nIGJleQ== 38610\nIENvbXBsZXRlbHk= 38611\nIHpvZA== 38612\nYWxu 38613\nVmljdA== 38614\nIGNvbmZpcm1z 38615\nw6R0eg== 38616\n4pY= 38617\naGFtbWVy 38618\nINC30L3QsNC10YI= 38619\nIGFkbWlyZWQ= 38620\noOulvA== 38621\nIEZydWl0 38622\nZXJ0ZW4= 38623\nIG5pZWNl 38624\nIFRpbnk= 38625\nIHBsdW1iaW5n 38626\nZXJtYQ== 38627\nINC70LXQs9C60L4= 38628\nIHdpbmRzaGllbGQ= 38629\nINGB0LzQtdGA 38630\nIGJ6dw== 38631\nIGFib2xpdGlvbg== 38632\nIFNhZGhndXJ1 38633\nIHByZWFjaGVk 38634\nIENyZWF0aW5n 38635\ncGVyZWQ= 38636\nIHZvbG9udA== 38637\nIHF1aW50 38638\nIHByaW50ZXJz 38639\nIG5lZ3Jv 38640\nIGdyb3NzZQ== 38641\nIFRoeQ== 38642\nIEZlbGxvd3M= 38643\nIHN0YW5pZQ== 38644\nIG5ld2NvbQ== 38645\nIEh1ZQ== 38646\nIEZyZXVuZGU= 38647\nIENvbnN0cnVjdGlvbg== 38648\nIGFkdmVyc2l0eQ== 38649\nIG5lZ2F0aXZlcw== 38650\nIGhhemFyZG91cw== 38651\nIGNvbXBlbGxlZA== 38652\nIHdvaw== 38653\nIE95 38654\n0L/QsA== 38655\nqqjr 38656\nIHJlbmRleg== 38657\nIG92ZXJj 38658\nIHdlYXZpbmc= 38659\nINC40LTQtdGC 38660\nIHByb3NlY3V0b3Jz 38661\nIGF1ZGlvYm9vaw== 38662\nIGFuY2VzdG9y 38663\nIHVuZGVyZ29pbmc= 38664\nIHBvdW5kaW5n 38665\nIO2SgA== 38666\nIOy2pA== 38667\nIHR1bGVl 38668\nIOyXtOw= 38669\nIHpvYWxz 38670\nIG5laW4= 38671\nIG9rZQ== 38672\nIEpveWNl 38673\nIG51ZA== 38674\nIGRpbGlnZW5jZQ== 38675\nIExhYnM= 38676\nIHZlbnRz 38677\nIGFuY2VzdHJhbA== 38678\n4Lir4Lih 38679\nINC80YPQttGH 38680\nIG5vbcOpcw== 38681\nd2FsaQ== 38682\ncWluZw== 38683\nIE11bHRpcGxl 38684\nIENvbnN1bHQ= 38685\nIGlzdGVkaQ== 38686\nIERveQ== 38687\nYWthaA== 38688\nIGRpc2NpcGxpbmVk 38689\nIGFsdGVybmF0aW5n 38690\n55I= 38691\nIHZlcm1l 38692\nINC+0Yk= 38693\nIHRvdGE= 38694\nIFByYWc= 38695\nIHN3b3Ju 38696\nIGJlYmVy 38697\nIEF1ZmdhYmU= 38698\n7Jq06w== 38699\nIHl1cA== 38700\nIHJlY2xhaW0= 38701\nb251dA== 38702\nIGF1Y3VuZQ== 38703\nIGFtcGg= 38704\nIMWbd2ll 38705\nIGFh 38706\naXNjb3Zlcg== 38707\nIEFyZw== 38708\nY2llxbw= 38709\nIGRlc3Nhcw== 38710\nIFfDpGg= 38711\n4bu5 38712\nINC00LDQstC90L4= 38713\nIHNpbGVudGx5 38714\nYXJj 38715\nIO2bhOuztA== 38716\nIHR3ZWV0aW5n 38717\nIE9uZA== 38718\npqzrqbQ= 38719\nIGJvd2Vs 38720\n7IWo7Ja07JqU 38721\nT1NF 38722\nIHByb3Bpbw== 38723\nIEt1bnN0 38724\na3VuZw== 38725\nIGRvbm7DqWVz 38726\nIEhvcml6b24= 38727\nIEZyb2c= 38728\nIGFyaXN0 38729\nw6Js 38730\nINC60L7Qtg== 38731\nIHNlZ3VuZG9z 38732\nIFNob3J0bHk= 38733\nIENyb3dk 38734\naXJhbg== 38735\nIHfFgmHFm2Np 38736\nIExhYw== 38737\naWRlbnRl 38738\nIOqwgOyekA== 38739\nIGxlbg== 38740\nIFNVUw== 38741\nIE1vdG9ycw== 38742\nIFRyZW50 38743\nb21pZQ== 38744\nIHRyYW5zbWl0dGVy 38745\nIEFzc2Fk 38746\nIHBzeWNoaWF0cmlj 38747\nINC20LjRgtGM 38748\nIG91dGxpbmVz 38749\nIGVmZmVjdGl2ZW1lbnQ= 38750\nIFJlbGlnaW9u 38751\ncHJlaA== 38752\nINC00L7Qu9C20L3QsA== 38753\nIM2hwrA= 38754\nIENvbnNlcnZhdGlvbg== 38755\nIOG7 38756\nINC30LDQuQ== 38757\nIHJlc2lkZQ== 38758\nIGNvbXBsZXRv 38759\nS0VO 38760\nIOuCmOyYpOuKlA== 38761\nIHN1YnVyYmFu 38762\nIHLDqXBvbmRyZQ== 38763\nINGA0LDQt9C70LjRhw== 38764\nIGdhbGxlcmllcw== 38765\nIHJhcHQ= 38766\nKS4uLg== 38767\nIGNydWVsdHk= 38768\nIFZNd2FyZQ== 38769\n7Yis 38770\nIGhhecSxcg== 38771\nIGdyb3VwaW5n 38772\nIFJpZGVy 38773\nIHN5bGxhYmxl 38774\nIGJlaXNwaWVsc3dlaXNl 38775\nIHNhZmVndWFyZA== 38776\nIHBlbMOtY3VsYQ== 38777\nYXJ0aQ== 38778\nINCh0L4= 38779\nIGNoZWdh 38780\nINC60L7QvNGD 38781\nIHNlaXNt 38782\nIGhhcm1sZXNz 38783\nIFdhcnJpb3Jz 38784\nINC/0YE= 38785\nIHNoYW1lbGVzcw== 38786\nIEJhdW0= 38787\naW5zdGFsbA== 38788\nIHRvb2xraXQ= 38789\nIHBpcGVsaW5lcw== 38790\nIHB1c3N5 38791\nIGNvbmNlYWw= 38792\nIHByb3Rlc3Rpbmc= 38793\nb2Nob25k 38794\nIGR1YQ== 38795\nIFBvc2U= 38796\nIGhlbGl1bQ== 38797\nIFVY 38798\naWtsZQ== 38799\nIFN1ZmY= 38800\nIOyEuOqzhA== 38801\naW5nZXJz 38802\nINGB0LvRg9GH0LDQuQ== 38803\nIGRlc2NlbmRpbmc= 38804\nIG1vbnRhZ2U= 38805\nSGlnaA== 38806\nIOydtOyW 38807\nIElkaQ== 38808\nINeR16E= 38809\nIGV4cHJlc3NpdmU= 38810\nINC/0L7Qu9C10Lc= 38811\nIHBvbmU= 38812\nIGFkb2xlc2NlbnQ= 38813\n0LDQvdC90YvQtQ== 38814\nIGFzc2Fzc2luYXRpb24= 38815\nd2Vpc2Vu 38816\nZW1hdGljYWxseQ== 38817\nYXV0aA== 38818\nIHVyZw== 38819\nIGdhbmhhcg== 38820\nIGZ1bmRv 38821\nIFJob2Rl 38822\nINC40YHRgtC+0YDQuNC4 38823\nIGNvbXBhcnRpbA== 38824\nIGRpbWluaXNoZWQ= 38825\nIGFwcHJlbnRpY2U= 38826\nINCR0YPQtA== 38827\nIHBob3RvbnM= 38828\nIGPDs2Q= 38829\nb25haw== 38830\nIGFkZWxhbnRl 38831\nIGNodQ== 38832\nb3BpYw== 38833\nIGFpeMOt 38834\nZWRkYXI= 38835\nIENvbmdyYXRz 38836\nbW9y 38837\nIHJlc2VydmF0aW9ucw== 38838\nIFRvYnk= 38839\nIEtlcm4= 38840\nIHJhemVt 38841\nIGZvcmdlZA== 38842\nIGhvcnJpZnlpbmc= 38843\n2YrYuQ== 38844\nIEpvaW5pbmc= 38845\nIEF1dGg= 38846\nZGFo 38847\nIGNvbnNpZw== 38848\nIGludGltaWRhdGVk 38849\nIHBlcmlwaGVyYWw= 38850\nIG1lbm8= 38851\nIGRldGVjdGluZw== 38852\nIHRlb3I= 38853\nIHRhZ2dlZA== 38854\nIG5vc3RhbGdpYw== 38855\nIOuvuOyViA== 38856\nIHZlcmRp 38857\nIGxhYmVsaW5n 38858\n0L/QvtC0 38859\nYXN0ZXM= 38860\nIHZpc3Q= 38861\nIGN5dA== 38862\nIGZsaXBz 38863\n0YDQuNC3 38864\nYmFsYW5jZWQ= 38865\nINC+0YjQuNCx 38866\nIGRlc3Rpbg== 38867\nbGFzc2U= 38868\nZXJlaQ== 38869\nIGthbG8= 38870\nIGFycXU= 38871\nIHBsYW5v 38872\nIG9yZGluYW5jZQ== 38873\nIGNvbXBpbGF0aW9u 38874\nIFZvY8Oqcw== 38875\nIEVjbw== 38876\nIOy2lOyynA== 38877\nIGVuY2ltYQ== 38878\nIEdhcnJldHQ= 38879\nIENvcmQ= 38880\nw7Zsa2Vy 38881\nIEFycm93 38882\nIHByb3RvbnM= 38883\nLOKAiw== 38884\nIOyymOs= 38885\nIHNjYW5k 38886\nIGJlaWdl 38887\nY29uZw== 38888\nIGJpa2luZw== 38889\nIFRM 38890\n0YPQvdC0 38891\nIOyGlOyngQ== 38892\nIFZpbGxh 38893\nIEpBQ0s= 38894\nIMO2xJ9yZW4= 38895\nIHRlbWFz 38896\nIEt5dW5n 38897\nSmVubg== 38898\nIGN1ZA== 38899\nIGltcG9zaW5n 38900\nIGNvbW1hbmRtZW50cw== 38901\nIE1lYW5z 38902\nIETDpHI= 38903\nIHJlY29tZW5k 38904\nIGRpc3Bvc2l0aW9u 38905\n2KfZhw== 38906\nIHRodQ== 38907\nIHJlZHVjdGlvbnM= 38908\nIGRpdQ== 38909\nINeV15DX 38910\nINC40YHRgdC70LXQtA== 38911\ndGhyZW4= 38912\nIGxhZG9z 38913\nIFJC 38914\naXhlZA== 38915\nIOyP 38916\nRnI= 38917\nc3RpbGw= 38918\nIG9sbWFz 38919\nQ0hVQ0s= 38920\nIO2GoA== 38921\nIEluZGVwZW5kZW50 38922\n0JLQng== 38923\nIHBpdHM= 38924\nIHVuZGVydGFrZW4= 38925\nIGbDuHI= 38926\nIE5hdw== 38927\nIOyekeyXhQ== 38928\nIHNoZXBoZXJk 38929\nIGxhbmd1ZQ== 38930\nIEphYg== 38931\nIERydW0= 38932\nIEVsZWt0 38933\n4buRdA== 38934\nIOydtOyqvQ== 38935\nIGJlZ2lubmVu 38936\nIEZ1cnk= 38937\n4buDdQ== 38938\nc2VjdGlvbnM= 38939\nIHNwcmF5ZWQ= 38940\nIG3DoXI= 38941\nIFZvbHQ= 38942\nIFNlb25n 38943\n0LjRgtC10Ls= 38944\nZHVjdGlvbg== 38945\nYXNhbg== 38946\nIGp1ZGdtZW50cw== 38947\naW1hYW4= 38948\nnteq 38949\nIHNpZW50bw== 38950\nIEFDVA== 38951\nIEJI 38952\nZGV2 38953\nIOyii+yVhO2VmA== 38954\nIGpvcm4= 38955\nSVNUSU4= 38956\nIHJvYXI= 38957\nIGltbWVyc2lvbg== 38958\nYWZmbGVz 38959\nIHRyYWluZWU= 38960\nIEJpbGxib2FyZA== 38961\ncmVzc2Vz 38962\nIFdhcm0= 38963\nIFJvYmVydG8= 38964\nIHV0aWxpeno= 38965\nIElnb3I= 38966\nIHJhc2g= 38967\nIGFuYWx5dGlj 38968\naXJhbQ== 38969\nIHN5bW1ldHJpY2Fs 38970\nIGxpZmVzcGFu 38971\nIGVhdGVy 38972\nIEJsb29tYmVyZw== 38973\nYXRlcmlhbA== 38974\nIOuvvw== 38975\nIGlzdGVy 38976\nIGludmFsdWFibGU= 38977\nIGFzc2lzdGluZw== 38978\nIHNoYWNr 38979\nzrzOsc+EzrE= 38980\namlz 38981\nZW5peg== 38982\nINC/0YDQtdC00LvQvtC2 38983\nIGRlY2xhcmluZw== 38984\nIFZpa2luZw== 38985\nIEFzc2lt 38986\nIGV4cGVuZGl0dXJl 38987\nIHBvc2luZw== 38988\nIE9udW4= 38989\nIGluaWM= 38990\n0LDRjtGC0Yw= 38991\ncmV2 38992\nIG1pZWRv 38993\nIGZpbHRoeQ== 38994\nIElC 38995\nIERpc2NvdmVy 38996\naWNodGV0 38997\nbWlsbGlvbg== 38998\ntoTrk6TsnbQ= 38999\nIGFtYmlndQ== 39000\nIEZseW5u 39001\nYmFyZHppZWo= 39002\nIGluY29tcA== 39003\n0LDQstC90L4= 39004\nemlh 39005\nIGluZmx1ZW5jaW5n 39006\nIHdvcmxkbHk= 39007\nIFNhbGVzZm9yY2U= 39008\nemV0 39009\nIHBhcnRpY3VsaWVy 39010\nIEtvY2g= 39011\nIDE5NDM= 39012\nIHRvbmVy 39013\nINGN0LrRgdC/0LXRgA== 39014\nIHN1c2NyaQ== 39015\nIHRyaWdnZXJpbmc= 39016\nSUNFUw== 39017\n7Iqk6rCA 39018\nzrTOsQ== 39019\n0YDQsNCx0L7Rgg== 39020\nIGFmdGVyd2FyZA== 39021\ncGluZQ== 39022\nIElM 39023\nYXJldGg= 39024\nINC/0LDQuw== 39025\nIHNha2Vy 39026\nIDE5NDc= 39027\nQUY= 39028\ndXlvcnN1bg== 39029\nIOyKpOs= 39030\nIHF1YW50aWZ5 39031\nIG1lbnRvcnNoaXA= 39032\nIGxsZWdh 39033\nIFRhbWFyYQ== 39034\nIG9wdGltaXppbmc= 39035\nIGZyb250cw== 39036\nb3N0ZXJz 39037\nIGVzcXVlcg== 39038\nIHN1Ym1pc3Npb25z 39039\nIGFubmlo 39040\nIHN1Y3Rpb24= 39041\nbHVlbmNl 39042\nY2hpZWRlbg== 39043\nSU5HUw== 39044\nINeR15Q= 39045\nINGB0YbQtdC9 39046\nIHdpZWx1 39047\nIG9iamV0bw== 39048\nIGJvb2Jz 39049\nIEdlc2Now6RmdA== 39050\nIGVhcmJ1ZHM= 39051\nINGA0LDQvdGM0YjQtQ== 39052\nIHJvdXRpbmVseQ== 39053\nIGNvbGxhZ2Vu 39054\n0L7QtNGL 39055\nIENpbm5hbW9u 39056\nIGJhaXg= 39057\n2K/ZhQ== 39058\nZnJhZ2U= 39059\nINC60L3QvtC/ 39060\nIGRlY2VwdGlvbg== 39061\nIHVuZXhwZWN0ZWRseQ== 39062\nIHNtZWxsZWQ= 39063\nIGxvb3M= 39064\nIGhpZ2hsaWdodGVy 39065\nIOq4sOuzuA== 39066\nIEdsYXNnb3c= 39067\nb3dhbmE= 39068\nbW4= 39069\nIEplcmVtaWFo 39070\nIERhdGFi 39071\naWV0ZQ== 39072\nIGJhdw== 39073\nIHByb3BpYQ== 39074\nIHByb3ByaQ== 39075\nT09PT09PT08= 39076\naW5rZXI= 39077\nIHBlcnR1cmI= 39078\nIEZha2U= 39079\n7J207JY= 39080\naW1taW5n 39081\nIHVuZG9jdW1lbnRlZA== 39082\nIHRyYWJhamFuZG8= 39083\nIHJvYW0= 39084\nINC00L7Qu9C20L3Qvg== 39085\nIGFyYmU= 39086\nIGFuaQ== 39087\nYXRhbA== 39088\nIGFyYWRh 39089\nIEFuZGE= 39090\nIOybgA== 39091\nIEJyYW5jaA== 39092\nb2lyZXM= 39093\nIG91dHNpZGVy 39094\nZG9sbGFy 39095\naXNzZXM= 39096\nYmVhbnM= 39097\nIEdpZw== 39098\ncmFkb3M= 39099\nIFN1dA== 39100\nIExhbmNl 39101\nZWRzacSZYmlvcg== 39102\nIGNvbGE= 39103\nb25lbnRz 39104\nIHJlY29uc2lkZXI= 39105\nIG1vbmRv 39106\nIHVuc3VjY2Vzcw== 39107\nIEvDpA== 39108\nIHJlZ2Vs 39109\nIGJpc29n 39110\nZXR1cw== 39111\nIHVucmF2ZWw= 39112\nIHN3ZWV0aWU= 39113\nIHJlcHLDqXNlbnQ= 39114\nb3VyaW5n 39115\nIGdyb3VuZHdhdGVy 39116\nIEJldw== 39117\nIHNjcmF0Y2hlZA== 39118\nIGNhc3NldHRl 39119\nIGNpZGVy 39120\ncGlz 39121\nINGB0LDQvNCw 39122\nIGdsb2JhbGl6YXRpb24= 39123\nIGRlZ3JhZGF0aW9u 39124\nIGRlZ2VuZXI= 39125\nIFJvc2ll 39126\naWNrdA== 39127\nIG92ZXJ3ZWlnaHQ= 39128\nIE1FTQ== 39129\nIGd1YXJkaWFucw== 39130\nIGNvbnNlYw== 39131\nSG1t 39132\nINC/0L7RgtGA0LXQsQ== 39133\nIG1ldmE= 39134\nIGdyYWZmaXRp 39135\nIGZsaXJ0 39136\nIEJQ 39137\nIGp1c3Rv 39138\nIFRob3VzYW5kcw== 39139\nn6zsmrQ= 39140\nLio= 39141\nIFJBVw== 39142\nIGZsdW9y 39143\naXlp 39144\nYW50YWw= 39145\namVk 39146\nIFNoZW5n 39147\nIEVsaXNl 39148\nIENoYXJnZQ== 39149\n7J207Yq4 39150\nIGNvbmVz 39151\nbmllcw== 39152\nZ2lh 39153\nINC90LDRh9Cw0LvQsA== 39154\nIERoYXJtYQ== 39155\nIOuLpOyWkQ== 39156\nIGZhdm9ycw== 39157\nIFRydW5n 39158\naGV0dG8= 39159\nIHBvenc= 39160\nIGxvbmdv 39161\nIGtlbHU= 39162\nIGRpZ2VzdGlvbg== 39163\nIEVpZw== 39164\nIFRIRVJF 39165\nIHRpZXJz 39166\nIHN1bms= 39167\nIG15c3RpY2Fs 39168\nenVi 39169\nIMOJdA== 39170\nIGFudGljaXBhdGluZw== 39171\nIFZpbmU= 39172\nWVk= 39173\nIGNvbmNlbnRyYXRpbmc= 39174\nIEFncmVlbWVudA== 39175\nINC+0LrQvtC70L4= 39176\nIGxpZHQ= 39177\nIFlhbw== 39178\nINGB0LvQuNGI0LrQvtC8 39179\ncsOt 39180\nSVNUSU5DVA== 39181\nIE9GRklD 39182\nIHNvYWtpbmc= 39183\nIHNpaWhlbg== 39184\nIHJlZmVyZW5jaW5n 39185\nIFRhbXBh 39186\nYW5leQ== 39187\nIHJlc3B1ZXN0YQ== 39188\nIENvYWxpdGlvbg== 39189\nINGB0L7Qs9C70LDRgQ== 39190\nYW5raW5k 39191\nIOub 39192\nIFl1bW15 39193\n67Cw 39194\nIG9uYw== 39195\ndWnDp8Ojbw== 39196\nIHRoZW8= 39197\nIG11cmFs 39198\nIFRlYWNoZXJz 39199\nIHdhaXRz 39200\nIHJlbnRpbmc= 39201\nIEhhcm1vbg== 39202\nIGXFnw== 39203\nIE11bmljaA== 39204\n7Zmc 39205\n7Ja8 39206\nY2FyZHM= 39207\nIHJvdWdl 39208\nIG7Dqm4= 39209\nY2x1Yg== 39210\nIHVuc2Vlbg== 39211\nIGRlcHJlY2k= 39212\nIGNvbXB1dGVk 39213\nIHdpcGluZw== 39214\nIEVsbGk= 39215\naWRlbnRpZmllZA== 39216\nIGNsdXR0ZXI= 39217\ncm9sZXVt 39218\nIHRlbGVm 39219\nIGxldmVsaW5n 39220\nIFdvb2R5 39221\nIEd1cw== 39222\nIEJlbm5ldHQ= 39223\nIHNpdGlv 39224\nacWC 39225\nIHBvc3Nlc3Npb25z 39226\nIE5hdGFzaGE= 39227\nb2xkb3du 39228\nINGB0L7QvtCx0Yk= 39229\nIExpYw== 39230\nIOunjOuToA== 39231\nIGxvcnNxdWU= 39232\nd2Vo 39233\nINC80LDQvA== 39234\nbGl0ZXI= 39235\nYWRvbW8= 39236\nIGZpbmk= 39237\nz47Pgg== 39238\nINGD0LHQuNC5 39239\nIGluZGlzcA== 39240\nIHRlbGV2aXM= 39241\nIHDDoQ== 39242\nIENyZW8= 39243\nw61sbA== 39244\nIGd1cg== 39245\nIE1BTA== 39246\nINGA0LDQt9C90YvRhQ== 39247\nIHppZWhlbg== 39248\nIGZhc2hpb25lZA== 39249\nIGRlYmF0aW5n 39250\nIFNvdXA= 39251\nIFByb3ZpbmNl 39252\n6re466CH 39253\nIGltcHJvcGVy 39254\nIGltYWdlbg== 39255\nINGB0LTQtdC70LDQuw== 39256\nIGxvZ29z 39257\nIGV2ZW50bw== 39258\n4bqjbw== 39259\nbGFyZGE= 39260\nINC90LDQt9GL0LLQsNC10YLRgdGP 39261\nIHZlcmY= 39262\nIHNjcmVlbnNob3Rz 39263\n15XXk9ei 39264\nIEF1cm9yYQ== 39265\nIEJhbGk= 39266\ndGVyZWQ= 39267\nIGNvbnRhZ2lvdXM= 39268\nIGNvbXBhcnRpcg== 39269\ndmVuaWRvcw== 39270\ncmlrZQ== 39271\nINCy0YvQs9C70Y/QtNC40YI= 39272\nIGZyZWVkb21z 39273\nbmljYXM= 39274\noKTshJw= 39275\nIHJlZHV6 39276\nIEVjdQ== 39277\nIGFib25u 39278\nIFNFw5E= 39279\nIEJpdGNo 39280\nIHByb2pldG8= 39281\n0LjRh9C90L4= 39282\nZXR0cmU= 39283\nQU5OQQ== 39284\ndGhhbms= 39285\nIEFP 39286\nYXJuaXNo 39287\naWXDn2Vu 39288\nIHJpcHBsZQ== 39289\nIHBhbnRyeQ== 39290\nIEdI 39291\nzrPOsQ== 39292\nIOydtOuyiOyXkA== 39293\nIHZhbGlkYXRlZA== 39294\nIGJydXNoZWQ= 39295\nIEVtaW4= 39296\nIERhcnRo 39297\nZXNpbg== 39298\nLC4= 39299\nIHZhbGxl 39300\nIGplcnNleQ== 39301\ndWxhbg== 39302\nUmVhZA== 39303\nIFJhbmdlcnM= 39304\nIHNvb3RoaW5n 39305\nIGNvbXBsZW1lbnRhcnk= 39306\nIFZlcmtlaHI= 39307\nYWNha3Q= 39308\nIGJhdGh0 39309\nIE5E 39310\nU29u 39311\nIO2ZlOyepQ== 39312\nIEF2aQ== 39313\nIFNBTA== 39314\nYWlzc2U= 39315\nIHNlbWFpbmVz 39316\nIFN1cnY= 39317\nd2llcg== 39318\nINCy0LjQtNC10Ls= 39319\nIHNpZXRl 39320\nlOuPhA== 39321\nIFJhbXNheQ== 39322\nIFF1ZWVuc2Jvcm91Z2g= 39323\nIE1lbmdl 39324\nIEZvb2Rz 39325\nIHRoZW9sb2dpY2Fs 39326\nIFsj 39327\nINCy0L7QvdC4 39328\nIGltbWlu 39329\naW9zaXR5 39330\nIEFiZ2VvcmQ= 39331\nIEFjaG8= 39332\nIMOU 39333\nIHN0YWlucw== 39334\nIHJlYWxpc3RpY2FsbHk= 39335\nIGZhc2hpb25hYmxl 39336\nIENFT3M= 39337\nIFNraWxs 39338\nINCy0LbQtQ== 39339\nIGRldmVy 39340\nIFBsdWc= 39341\n5qo= 39342\nUG9k 39343\nIGxvYWY= 39344\nIGdlYnJhY2h0 39345\nIGFic29yYnM= 39346\nIEdyYW5ueQ== 39347\nIG1hbHdhcmU= 39348\nYWfEmQ== 39349\nIGNpdmlsaXphdGlvbnM= 39350\nIM+B 39351\nIGjDpGx0 39352\n0KHQog== 39353\nZ3JlYXQ= 39354\nIGxheWVyaW5n 39355\nc2luZ3M= 39356\nINCy0ZbQvQ== 39357\nIHJlY29nbml6YWJsZQ== 39358\nIHdvag== 39359\nIHdldGVu 39360\nzrPOvw== 39361\nU3R1ZGVudA== 39362\nIGTDqWZpbg== 39363\ncGxlYXNl 39364\nZW5jaA== 39365\nIGF0dGlj 39366\nIE90dGF3YQ== 39367\nIG9wdGVk 39368\nIGNhcHRpdg== 39369\nIG3Fgg== 39370\nIFlB 39371\nIFdhbmQ= 39372\nIGJvdW50eQ== 39373\nIDI3MA== 39374\nIHNwZWN1bGF0ZQ== 39375\nIGVuaGFuY2VtZW50 39376\nIGNvbW1vZGl0aWVz 39377\nIE1pbHRvbg== 39378\nZWo= 39379\nYWxvbQ== 39380\nRGFz 39381\nIGNvb2xkb3du 39382\n16jXkNec 39383\nINeQ16Q= 39384\nIHdjemXFm25pZWo= 39385\nIGVsb25n 39386\nIGRpb2Rl 39387\naW5hw6fDo28= 39388\nIElyaXM= 39389\nIEli 39390\nIHN1bW1vbmVk 39391\nIHJlc3Bl 39392\nIFJhY2g= 39393\nIMK7Og== 39394\nIHZ1cg== 39395\nIG1vdmltZW50bw== 39396\nIGZsdWVudA== 39397\nIEV2b2x1dGlvbg== 39398\nIEJ1dHQ= 39399\naWZpY2FjacOzbg== 39400\nlJTslrQ= 39401\nINGN0L3QtdGA0LM= 39402\nIG1hbmlwdWxhdGluZw== 39403\nIHBvc2l0aXY= 39404\n0LzQvtGB 39405\nIHdpeg== 39406\nIGludG94 39407\nzq3PgQ== 39408\n0LXQvNGB0Y8= 39409\naXZlc3Nl 39410\naW1pemk= 39411\nIOyauA== 39412\nIGtub2Nrcw== 39413\nIGNvbmdlc3Rpb24= 39414\nIElkZWFsbHk= 39415\nIEhvbGRpbmc= 39416\nIHBvYnJl 39417\nIEpVTA== 39418\nIOu2hOuTpOydgA== 39419\nIM6xzro= 39420\nIEZlcmd1c29u 39421\nIExhYm9yYXRvcnk= 39422\ncmljaHRlbg== 39423\ncm9waHk= 39424\ncHJvZHVjdGlvbg== 39425\nYXNzdW5n 39426\nSVRB 39427\nIHNpw6hjbGU= 39428\n16jXqg== 39429\nY2lzaW9u 39430\nINek15Q= 39431\nIElyZW5l 39432\nYW5jYQ== 39433\nIOyCrOqzoA== 39434\nIHBpbnBvaW50 39435\nIGRlc2lnbmF0aW9u 39436\nxZ9hbQ== 39437\nbMSxxZ8= 39438\nYWF0 39439\nIG7DpWdyYQ== 39440\nIG15dGhpY2Fs 39441\nIERlY2xhcmF0aW9u 39442\nIOyeoeyVhA== 39443\nIGJ5dGU= 39444\nLuKZqg== 39445\nRGVs 39446\nIO2NvA== 39447\nIG51dHJpdGlvdXM= 39448\nINGA0YPQsdC70LXQuQ== 39449\nU0FZ 39450\nTWFzdGVy 39451\nINGE0L7RgtC+0LPRgNCw0YQ= 39452\nIOuSpOyXkA== 39453\nIG5laA== 39454\nIGRva3VtZW50 39455\nIGN6YXN1 39456\nIGNvbnRpbnVh 39457\nIFNpbGVudA== 39458\nIHRlbnNvcg== 39459\nIHRhbnRh 39460\nIGlyZ2VuZHdv 39461\nIExFVA== 39462\nIFNoYWt0 39463\nbGFtYQ== 39464\nY2hsYWc= 39465\nIGRpbmdlbg== 39466\n0YHRgtGA0LA= 39467\nIGVocmxpY2g= 39468\nIE1hY2h0 39469\ncmVscw== 39470\nw6BjaWVz 39471\ndmlkZW8= 39472\nIG5hdHVyYWxl 39473\nIFNURVZF 39474\ndW1t 39475\nQkFDSw== 39476\nIDcyMA== 39477\nIG1vbWVuY2ll 39478\nIFN3YW4= 39479\nIHRlY2huaWNpYW5z 39480\nIGdlZWhy 39481\nIE1lbmQ= 39482\nUmVn 39483\nIHNjYWZm 39484\nIGFpZGU= 39485\nIOuztOuKlA== 39486\nIHByZXNzZXM= 39487\nbGVyZGU= 39488\nXCc= 39489\nIHVsdHJhc291bmQ= 39490\nIGRpc2NsYWltZXI= 39491\nIE1pdHM= 39492\nIEhvbGlkYXk= 39493\nIGV4dGVybmFsbHk= 39494\nIEZhdGU= 39495\nSU5P 39496\nIENhdHM= 39497\n67CV 39498\ndW1v 39499\nY29udHJvbA== 39500\nIHRoZUNVQkU= 39501\ndGlj 39502\naWVydW5ncw== 39503\nINC30L3QsNC60L7QvA== 39504\nIGZyZWVzdHlsZQ== 39505\nTUFOREFSSU4= 39506\nIGlzZQ== 39507\nYXVydXM= 39508\nIFN0cmF0ZWd5 39509\nIEJlYW0= 39510\ncsOkZ2U= 39511\nIGV4cGxvaXRlZA== 39512\naWRpcw== 39513\nIGNoaW1l 39514\nIFBlbmluc3VsYQ== 39515\nIG1lcml0cw== 39516\nIGFsdHJv 39517\nIFRPUA== 39518\nIFNlbnM= 39519\nIEthbnQ= 39520\nb3Jhcw== 39521\nIHJveWFsdHk= 39522\nIElERQ== 39523\ncmFjeQ== 39524\nIFRIT00= 39525\nb21vcw== 39526\nIGzDpG5nZXI= 39527\nIG51bWJlcmVk 39528\nVW0= 39529\nIE5peWU= 39530\nzrjOtw== 39531\nenlrYQ== 39532\nbGltZQ== 39533\nIFBlcnNvbmVu 39534\nIHZhbGlkaXR5 39535\nIGNvbnRyYXQ= 39536\nIENvbWlj 39537\nw6dvbnM= 39538\nIEhlaWRp 39539\nIHpn 39540\nIHJlbmFtZWQ= 39541\nIGN1bWlu 39542\nIEpG 39543\naW5lbA== 39544\nIGVuZm9yY2Vk 39545\nIGNoYW1h 39546\n0LvQuNGH0L3Qvg== 39547\n4bq7 39548\nINC00LXQvdC10LM= 39549\nIHByb2Z1bmQ= 39550\nIHBlbHZpYw== 39551\nIHBhbGF2cmE= 39552\nIGV4dHJhcw== 39553\nIGFua2xlcw== 39554\n7JeQ7ISc64+E 39555\nIFRG 39556\nIGluc2FuZWx5 39557\nINC80Y/RgQ== 39558\nIHLDqXBvbnNl 39559\nIGfDtnN0ZXI= 39560\nIEJCUQ== 39561\nINGD0YfQsNGB0YI= 39562\nIHNoYWtlbg== 39563\nIGFsbW9uZHM= 39564\nZGlzaA== 39565\nIFBH 39566\nIEJsaXp6YXJk 39567\n0YzQvtCz0L4= 39568\nIOOF 39569\nIGtuYXBw 39570\nVG9v 39571\nIHVuZGU= 39572\nIG1vdW50cw== 39573\n0L7QvNC40L3QsA== 39574\nIG5vcnRoZWFzdA== 39575\nIGNlbnNvcnNoaXA= 39576\n0Y/RgtGM0YHRjw== 39577\nbHI= 39578\nIGxhd21ha2Vycw== 39579\nIHPDpWRhbg== 39580\nIGluc2lkZXI= 39581\nIGNsZWFudXA= 39582\nIE5hZGE= 39583\nw7Nj 39584\nIGhhcnZlc3RlZA== 39585\nIERlc3B1w6lz 39586\n7ZqN 39587\nIHJlZHVuZGFudA== 39588\nRU5B 39589\nIGRlbGVnYXRl 39590\nIGJ1cmc= 39591\nIEFsaXNvbg== 39592\nIGNlbGVzdGlhbA== 39593\nIHNpbm5lcnM= 39594\nIG1hcnR5cg== 39595\nIFBlcm0= 39596\nIHNwZWNpbWVucw== 39597\nIG1pdG9jaG9uZA== 39598\nIG1hcmF2aWw= 39599\nIGNhdmFscnk= 39600\nIGFycmF5cw== 39601\nIGFubmV4 39602\nIGxhYm9yYXRvcmllcw== 39603\nIEJ5eg== 39604\nIGF0YWM= 39605\nINGB0LvQvtC20L3Qvg== 39606\nIHRvcGw= 39607\nIGdlcmk= 39608\nIENvbWJhdA== 39609\n0YHRj9GC 39610\nZWtlbg== 39611\nINCS0LvQsNC0 39612\nIGFqdXN0 39613\nIG1hcnF1ZQ== 39614\nIGxvb2tvdXQ= 39615\nIExvbA== 39616\nIHJvb2Z0b3A= 39617\nIE9yaW9u 39618\nINCx0L7QuQ== 39619\nIGhlYXJ0YnJlYWtpbmc= 39620\nIGRldHRv 39621\nemg= 39622\nw6R0dGVy 39623\nY2VyYQ== 39624\nIGhlYXRz 39625\nIGFudGlxdQ== 39626\nIHVuZmluaXNoZWQ= 39627\nIEthenU= 39628\nxLFsxLE= 39629\nIHNsaWdodGVzdA== 39630\nbGVv 39631\nIHbDpXJh 39632\nIHZlcnNjaGllZGVuZW4= 39633\nIGxvdGlvbg== 39634\n0YjQtdCz0L4= 39635\nY3Rpb25hbA== 39636\nIOydtOyg 39637\nZHJhZ29u 39638\nIHJlc29uYXRlcw== 39639\nIGlubQ== 39640\nYXZpYw== 39641\nIGZ1bGZpbA== 39642\nIOq4sOuMgA== 39643\nIGp1c3RhbWVudGU= 39644\nINC00L7RgdGC0YPQvw== 39645\nIOq3uOqxtA== 39646\nIHJlY29uY2lsZQ== 39647\nIFNjaMO2bg== 39648\nIEF2b2lk 39649\n6rmA 39650\nJ0Q= 39651\nIGNvbmZpbmVtZW50 39652\nIO2R 39653\nIG1vdGl2YXRpbmc= 39654\nIEJyaXR0YW55 39655\nIHNjcmVhbWVk 39656\nb2JqZWN0 39657\nIGRlY3JlZQ== 39658\nIHRyYXZhaWxsZQ== 39659\naXNzaWJsZQ== 39660\nIGJ1c3RlZA== 39661\ncHJvY2Vzcw== 39662\nIG1hc3NhY3Jl 39663\nIG5naMSp 39664\naWx5bg== 39665\nINCy0YDQvtC00LU= 39666\nIHBvZXRpYw== 39667\nIG5o4bqldA== 39668\nIGlyb25pY2FsbHk= 39669\ndXN1 39670\nbmlv 39671\nIHN0YWdpbmc= 39672\nb21lZGljYWw= 39673\nbGVhc2Vk 39674\nIOyDiOuhnOyatA== 39675\nIE5a 39676\nYWN0aW5n 39677\nIEJhdHRsZWZpZWxk 39678\ncGxheWZ1bA== 39679\nVmk= 39680\nIHNlw7FvcmE= 39681\nIHByb21wdHM= 39682\nbGljaGtlaXQ= 39683\nIMOnxLFrYXI= 39684\namlhbmc= 39685\nIHBpY2t5 39686\nIENhdmU= 39687\nIG1pcmFjdWxvdXM= 39688\nIEh1Z2hlcw== 39689\nMjAxNg== 39690\nIHh1 39691\nIERvcm90aHk= 39692\nIHZpcnR1ZXM= 39693\nIHJldHJhY3Q= 39694\nIHR5cg== 39695\nIGNoYXJpc21hdGlj 39696\nIGJvbGE= 39697\n6bw= 39698\nIOunkOyUgOs= 39699\nIHBhcmVudGFs 39700\nIG1pbGxpb25haXJl 39701\nYXJpYXQ= 39702\nIGludm9rZQ== 39703\nxbxlbmll 39704\nIGV4dHJlbWVz 39705\nIEFrdQ== 39706\naXZpZGFkZQ== 39707\nIO+3ug== 39708\nIOyLnOyyrQ== 39709\nIEdhcmxpYw== 39710\nUklB 39711\nINC00L7RgQ== 39712\nIFBvbnQ= 39713\nIG1pbGo= 39714\nZWxsaQ== 39715\nIHJhY2tldA== 39716\nIGNvbXBldGl0 39717\nIFdoaXM= 39718\nIHJlYWx0 39719\naWdubWVudA== 39720\nZXN0cmU= 39721\nIHBlcm5haA== 39722\nIE9wZW5pbmc= 39723\nIEZT 39724\nIERlbW9rcmF0ZW4= 39725\nYWNlbWVudHM= 39726\nIHdvcmxkdmlldw== 39727\nIHBsYXlvZmZz 39728\nIENBRA== 39729\nIMOpdGFudA== 39730\nIHllbWVr 39731\nIHNlbnRpbWVudHM= 39732\nb2RlbA== 39733\nYnVzdGVy 39734\nYcWf 39735\nIEtZ 39736\nY3rEmQ== 39737\nIHNjaMO2bmU= 39738\nYXBl 39739\nIFJhc3BiZXJyeQ== 39740\nIGNyZWRpdGVk 39741\nIEhpZGRlbg== 39742\nIHNhdXNhZ2Vz 39743\ncnVjZQ== 39744\nIEJldg== 39745\naWxhbnRybw== 39746\nIHBva2Vtb24= 39747\nIOqwgOqyqQ== 39748\nIHByb2NlZWRpbmc= 39749\nIHZlaW8= 39750\nIDE3NQ== 39751\n6Lg= 39752\nbWF4 39753\nIGZyYXRlcg== 39754\n7KCE7JeQ 39755\nIGVnZW50 39756\nIDI1MDA= 39757\ndXNjaA== 39758\nVHViZQ== 39759\nIGFtcGxpZnk= 39760\nIHByYXdk 39761\nIG9kb3I= 39762\nIFNjYW4= 39763\nIHBsb3R0aW5n 39764\naXRobWV0aWM= 39765\nIHJlc2lnbmVk 39766\nIFNDT1RU 39767\nIHN0ZXJlb3R5 39768\nIGRvYWJsZQ== 39769\nIENvbXBsZXg= 39770\n2YHZig== 39771\ndMSxbQ== 39772\n0YDQuNCz 39773\nbGFyZGFu 39774\nZXNv 39775\nREVO 39776\nIGhvb2RpZQ== 39777\nIENBVA== 39778\n2KfYtw== 39779\nIGJvbmRlZA== 39780\nIEJ1cm5z 39781\n0L7Qv9Cw0YE= 39782\nIHLEmQ== 39783\nzrXOuc6x 39784\nINC+0YLQtNC10LvRjA== 39785\nIHRpbWVsZXNz 39786\nIFZpag== 39787\nIFBhbmFtYQ== 39788\nIHJlb3JnYW4= 39789\nIFTDpA== 39790\nIFBsdXRv 39791\nT3Jhbmdl 39792\nINC/0L7QudC0 39793\nIEJyaXN0b2w= 39794\ndWNlZA== 39795\nIOuQmOyWtA== 39796\nIHVuYmVkaW5ndA== 39797\nYWRsZQ== 39798\nIHZvbHVudGVlcmVk 39799\nIG1pZWxp 39800\nIEVkaW5idXJnaA== 39801\naWthbA== 39802\nIGFsdGVu 39803\nIEFyc2Vu 39804\nIG1vdXZlbWVudA== 39805\nIGFudGlxdWU= 39806\nIGJo 39807\nIEhlcnM= 39808\nIHNhdXRl 39809\nIGFzcGlyZQ== 39810\nIHNwaGVyZXM= 39811\nIFdhbQ== 39812\n4bqvbQ== 39813\nIHdpcGVz 39814\nIDI4MA== 39815\nIFZlaA== 39816\nIGNvbG9jYQ== 39817\n0LDRhA== 39818\nINCy0L7Qt9C80L7QttC90L7RgdGC0Yw= 39819\nIHBoeXNpb2xvZ2ljYWw= 39820\naHdh 39821\nZXR1 39822\nIHByb2xvbmdlZA== 39823\nIGV4cGVyacOqbmNpYQ== 39824\nINCy0LjQtNC90L4= 39825\nIHF1YXJhbnQ= 39826\nIHB1ZWRhbg== 39827\n6JQ= 39828\ndmluZQ== 39829\nIFVTREE= 39830\ncGhlbQ== 39831\nIGZvcm1pZGFibGU= 39832\nIGZsYXR0ZXI= 39833\n7Ja07KeA 39834\nIGLDqW4= 39835\n4LmB4LiV 39836\nIOusvOuhoA== 39837\nIGZhY3Rpb25z 39838\nIExlYXZpbmc= 39839\nINeQ16rXlA== 39840\nIEV4cGVydA== 39841\nZGlv 39842\nIFZlcmQ= 39843\nIHNpbnQ= 39844\n2YbYrw== 39845\nbnVtYmVy 39846\nIG93ZWQ= 39847\nIGluZHVjZQ== 39848\nIEZyZWRkaWU= 39849\nYWJv 39850\nIEZpbGlwaW5v 39851\nr7zr 39852\nYmVsaWV2YWJseQ== 39853\nYXRobG9u 39854\nYW1hYW4= 39855\nIGRldmVuaXI= 39856\nIEdvcw== 39857\nIEplbmtpbnM= 39858\nYmFpdA== 39859\nIGJpbnM= 39860\nIE1JQ0g= 39861\ndXlvcnVt 39862\naWdyYWRl 39863\naXNzbw== 39864\nIOyXtA== 39865\nIOyVhOu5oA== 39866\nIGRpYXJyaGVh 39867\nIHRvcm5hcg== 39868\nYWRkaW4= 39869\nIHVuZ2Vmw6Rocg== 39870\nIHJlc3Ryb29t 39871\nIHBzeWNoaWF0cmlzdA== 39872\nIEtpY2tzdGFydGVy 39873\nIGdlcmE= 39874\nIGFscmVk 39875\nIFdyYXA= 39876\nz4zPgw== 39877\nIHNpbm5lcg== 39878\nQ0hFRVJJTkc= 39879\nIGtpbG93 39880\nIGRldGVybWluYW50 39881\nIGRlbW9uaWM= 39882\naWRlbmNlcw== 39883\nY2hhcw== 39884\nIERlZA== 39885\nIHN0dW1ibGU= 39886\nIFVycw== 39887\nIGRlY2VpdmVk 39888\nIFRFUg== 39889\nIEPDsw== 39890\nZWxsZWQ= 39891\nIG5vdHdlbmQ= 39892\nIOyngOq4iOq5jOyngA== 39893\nIHBhcnRpZG8= 39894\nIGRlc2NlbmRlZA== 39895\nIHZhcmTEsXI= 39896\nIGVuYWN0ZWQ= 39897\nIGN6xJnFm2Np 39898\nIHRyYWluZWVz 39899\nIGF1ZGlibGU= 39900\nIG1hbGY= 39901\nIHZlbw== 39902\nw6xu 39903\nIEdQQQ== 39904\nIEFwcGU= 39905\nIHJ1dA== 39906\nIENhcmxh 39907\na2FjaA== 39908\nIHNhdmlvcg== 39909\naXRjaGVk 39910\nIGNsaW1heA== 39911\n0LDRgtC10LvRjw== 39912\nIE1jQ29ubmVsbA== 39913\n0L7Qu9GP 39914\nZXJleWU= 39915\nINGB0L7Qt9C9 39916\nIGNhYm8= 39917\nIFNuZQ== 39918\nIEFmZm9yZGFibGU= 39919\nIHNhcsOg 39920\nIGxlZ2l0aW1hY3k= 39921\nIHNjYXJjZQ== 39922\nLi4uPC8= 39923\nIDEwOA== 39924\nIGFjdW0= 39925\nIEZyYW5rbHk= 39926\nIHJhZGlhdG9y 39927\nIGdlbmVyYWxz 39928\nIGRpdmlkZXM= 39929\nIGNoZWVzZWNha2U= 39930\nIHNvcmNlcg== 39931\nIG1pc2NvbmNlcHRpb24= 39932\nIGhhcmRzaGlwcw== 39933\nIE9uZVBsdXM= 39934\nw7x5b3JzdW4= 39935\nIFNvdmlldHM= 39936\nIEl0YWxpYQ== 39937\naWNraQ== 39938\nIEFmdGVyd2FyZHM= 39939\nIHJpZGljdWxvdXNseQ== 39940\nIGdkemllxZs= 39941\nIE5vdGVz 39942\n2YPYp9mG 39943\nIHJvbWFu 39944\nIG9yZ2FuaXplcg== 39945\nIGNvdXJ0eWFyZA== 39946\nINGH0LXQu9C+0LLQtdGH 39947\nIFdpdG5lc3M= 39948\nINC/0Y/Rgg== 39949\nIENoaWxs 39950\nIFZhbHZl 39951\nIM6szrvOuw== 39952\nIEtQ 39953\nY2hsdXNz 39954\nIGRlZmxlY3Q= 39955\nIFRvbmk= 39956\nIGNsYWly 39957\nIHN0YWNraW5n 39958\ncmFzemFt 39959\nIFNvbnJh 39960\nIEF0YXJp 39961\nIHBhc8Oz 39962\nIGNoYXJtcw== 39963\nYW5zdA== 39964\nIHRlcmNl 39965\nIExpbGx5 39966\nIHBzeWNob2xvZ2ljYWxseQ== 39967\nIGPFkw== 39968\ndXN0ZQ== 39969\npbTs 39970\nQ1RW 39971\nIG1pZWw= 39972\nQ2FyZQ== 39973\nIOKAkQ== 39974\nIHNuYXBwZWQ= 39975\nIOqwkOs= 39976\n0L7RgtGL 39977\nIG3DqnM= 39978\nLj8= 39979\nIHRvbm5lcw== 39980\n15XXk9eU 39981\n4LiE4LiZ 39982\nVHU= 39983\nIGRpc3RyaWJ1dGluZw== 39984\nIGNyYWNrZXJz 39985\nIGNvcmHDp8Ojbw== 39986\nw6Rtw6Ru 39987\nY2xhbWF0aW9u 39988\n0L7RgNC0 39989\nk5zrprTqsozsmpQ= 39990\nIFVudGVyc2NoaWVk 39991\nRmluZQ== 39992\nY2tv 39993\nINGA0LXQsdC10L0= 39994\nIHNwaWM= 39995\nIGRvY3RvcmFs 39996\nINGB0LrQvtGA0LXQtQ== 39997\ndW5pdmVycw== 39998\nYWN1bGE= 39999\nIMOWc3RlcnJlaWNo 40000\nIGdyaW5kZXI= 40001\nIGFtYm9z 40002\nIHZhc3RseQ== 40003\nIGNvbmZlc3NlZA== 40004\nIFNoaA== 40005\nYW5kZXJz 40006\nIEd1YW4= 40007\nINC90LXQvtCx0YXQvtC00LjQvNC+ 40008\nIGNoYW1waW9uc2hpcHM= 40009\nIFZ1bA== 40010\nIFBoaQ== 40011\nIE1lYXN1cmU= 40012\nIGluc2dlc2FtdA== 40013\ndmV0dGU= 40014\nIGdlbm9t 40015\naW5kdW5n 40016\nZ2xp 40017\nRGV0 40018\nIHVubXV0ZQ== 40019\nIHNhdWNlcw== 40020\nIER3 40021\n15HXqg== 40022\nIEJSRQ== 40023\nIG51cnR1cmU= 40024\nIGRldGFpbmVk 40025\nIEJlZXI= 40026\nINC80LjRgNCw 40027\n0LLQtQ== 40028\nIEJpcmRz 40029\nIG1laWxsZXVy 40030\nIHJld2luZA== 40031\nIHBvcmU= 40032\n15nXlg== 40033\nw6lnZXI= 40034\ncXVlbGE= 40035\nIHRyb3VzZXJz 40036\nIHNpaW7DpA== 40037\nIEdhZ2E= 40038\nIEJSQU5E 40039\nbGViZW4= 40040\nIHJhc3BiZXJyeQ== 40041\naWxpaw== 40042\nIHZlcnPDo28= 40043\nbGFr 40044\nIGxvZ2Fy 40045\nIE1JREk= 40046\nIOychO2VnA== 40047\nINC/0YDQvtC40LfQvtGI 40048\nIHN0ZXJpbA== 40049\nIGhhcm1lZA== 40050\n0LDQstC70LjQsg== 40051\nINGB0YHRi9C7 40052\nIGxhY2tlZA== 40053\nIGNvbnRhY3Rpbmc= 40054\nIOq4sOyekA== 40055\nIGdlZsOkaHI= 40056\nIGNveQ== 40057\naWtlbA== 40058\nIGJpbmdl 40059\nIG9ydGhvZ29uYWw= 40060\nIGVudGVuZHU= 40061\nIFRoaXJ0eQ== 40062\nIHNtYXJ0ZXN0 40063\nIHJhc2E= 40064\nIFF14buRYw== 40065\n0YvQstCw0Y7Rgg== 40066\nIHNsdXQ= 40067\n0LvRg9GH 40068\naWd0ZW4= 40069\nINGA0LDQsQ== 40070\nIHRhbWFu 40071\nIHF1YWxpZGFkZQ== 40072\nIGRvbWluYXRpb24= 40073\nIHNpbnVz 40074\nIHByb2dyYW1tZXJz 40075\nIGFsbGVyZ3k= 40076\nIFRvcnJlcw== 40077\nIEF1c3RyaWFu 40078\nbmFudHM= 40079\nTWVs 40080\nINGD0LLQtdC70LjRhw== 40081\nIEFnZw== 40082\nIHNvaw== 40083\nIHBsdWNr 40084\nIGJpbmRz 40085\nIHByb3Bvcg== 40086\nIE1hZg== 40087\nIG9zb2I= 40088\nIFZJQw== 40089\n6aU= 40090\nINC30LDRh9C10Lw= 40091\nIGV4aGliaXRpb25z 40092\nIGV0dGk= 40093\nY3ph 40094\nINC90LDRiNC40YU= 40095\nIE1pdHRl 40096\n0L7QsdGL0YLQuA== 40097\nIGNsb2Nrcw== 40098\nIHJpY28= 40099\nINC40YHRgtC+0YDQuNGP 40100\nIHNjaGl6b3BocmVu 40101\nIGZsdWZm 40102\nINGB0L7QsdC40YA= 40103\nIGFwb3k= 40104\nIHByaW5jZXM= 40105\nIGJyYWNlcw== 40106\nIEZJUg== 40107\nIFNuYQ== 40108\nIDsp 40109\ndmVuZXM= 40110\nIHZ1ZWx0YQ== 40111\nIG1pZXM= 40112\nIGJyb29t 40113\nIG1lcnJ5 40114\nIGVzcGVjaWFsbWVudGU= 40115\nIEFsYmFu 40116\nINC/0L7RgdGC0L7Rj9C90L3Qvg== 40117\nIExlbmE= 40118\nIEN1bHQ= 40119\nYWxzbw== 40120\nIHF1b3Rpbmc= 40121\nIGdlbmVyZQ== 40122\nIFlhcg== 40123\nIExhZ2U= 40124\nIGRlbW9zdA== 40125\nIGRhZ2U= 40126\nIEVjdWFkb3I= 40127\nIGFudsOkbmQ= 40128\ndcOfZW4= 40129\nIOuwm+yVhA== 40130\nIHBzeWNob2xvZ2lzdHM= 40131\nIExhcnM= 40132\nIHBvc3Nh 40133\nIG91dGdvaW5n 40134\nIG1ldGlj 40135\nIGJhZ2dhZ2U= 40136\nZXJpYQ== 40137\nIHJpY2h0aWdl 40138\n7Iuc7JeQ 40139\nINGB0L7RhdGA0LDQvQ== 40140\nIHJvb3Rpbmc= 40141\nIGRyb3BsZXRz 40142\nIG5hc2Fs 40143\nIENveA== 40144\nWGk= 40145\nIGRpc3Bvc2FibGU= 40146\nIGJ1dGNoZXI= 40147\nIFphcg== 40148\nIEFybWVuaWFu 40149\nIOu/jOs= 40150\nIEZvb2w= 40151\nIENCRA== 40152\nIHNvc3Q= 40153\nIHBlcmlzaA== 40154\nIFLDqXA= 40155\nIEZyZXVk 40156\nIGZhbmRvbQ== 40157\nIGJsb3F1ZQ== 40158\nIGludmVudG9y 40159\nIGFicmU= 40160\nIMOpbm9ybcOpbWVudA== 40161\nIGltcG9ydHM= 40162\n6Yg= 40163\nIG90dXI= 40164\nIFJ5dQ== 40165\nIOKGkg== 40166\nIHNlY29uZG8= 40167\nIGluY29tcGV0 40168\nIGluY2FyY2VyYXRpb24= 40169\nIGFzY2VuZA== 40170\nYmVuZQ== 40171\nIG9sdXJz 40172\nbm9jaA== 40173\nIGJyZWVkcw== 40174\n0LvQuNC3 40175\nIFZlcmbDvGc= 40176\nIG1haWxpbmc= 40177\ncmVhbGx5 40178\nIGVzZg== 40179\nIHBlbGU= 40180\nIGxlYXNo 40181\nIGRpc2tz 40182\nINC30LDQvNC10Yc= 40183\n7JWE7JWE 40184\nYWJvdXRz 40185\nIE11bGw= 40186\nIERlbnQ= 40187\nZWRlcmVlbg== 40188\nRHJpdmU= 40189\nIHRpcHBpbmc= 40190\nIG5pZ2dh 40191\nb3JkdW0= 40192\nIHBvcnRlcg== 40193\nIGthcmFva2U= 40194\nIGRvY3VtZW50YXJpZXM= 40195\nIFJJR0hU 40196\nIFB1cmQ= 40197\nINC+0YHRgtCw0L0= 40198\n0LrQu9Cw0LQ= 40199\nw6lyZW5jZQ== 40200\nIOqxuOuhnA== 40201\nINGC0L7Qvw== 40202\nIFdvbmc= 40203\nINC/0YDQuNGA 40204\nIG5vbWluYWw= 40205\nIGF1bGE= 40206\nINGN0LrRgNCw0L0= 40207\nIGNoZXJjaGU= 40208\nIFRocg== 40209\nIGxhdWZlbg== 40210\nIEthdGhsZWVu 40211\nIHJlYWN0b3Jz 40212\naWhhdA== 40213\nIHNpZGVk 40214\nIFNpbW9uZQ== 40215\nIGd1aWRlbGluZQ== 40216\naW1wb3J0YW50 40217\nYnVtcHM= 40218\ndG9uZQ== 40219\nIGVudHJlcHJpc2Vz 40220\nIGNvbnN0aXR1dGU= 40221\nb3Njb3Bl 40222\nIE15c3Rlcnk= 40223\nY3ljbGVz 40224\nIFdhcnNhdw== 40225\nIGJ1cnN0cw== 40226\nIFpob25n 40227\nIFNBUkFI 40228\nIOuKkOq7 40229\n6Y0= 40230\nIGJlYWNvbg== 40231\nQURF 40232\nIOyngOuCmA== 40233\nIGVyc2No 40234\nIGludGVnZXJz 40235\nIENyb3NzaW5n 40236\nc291cmNl 40237\nIHNjaG9vbGluZw== 40238\nIFJPTQ== 40239\nYXRvcml1bQ== 40240\nIOyeiOqyjA== 40241\nIHLDtGxl 40242\n0JXQnQ== 40243\nQ2hhdA== 40244\nIHNocmlua2luZw== 40245\nIHJlaW1idXJzZQ== 40246\nIGx1bWJlcg== 40247\nw7xja3M= 40248\nIHNhbGFo 40249\nTW90aGVy 40250\nIGthbGk= 40251\nIFFhdGFy 40252\nb3Rpb25hbA== 40253\nIG9wYWNpdHk= 40254\nIG5lZQ== 40255\nIENvcnk= 40256\nIOy4oQ== 40257\nIHR1cmJ1bGVudA== 40258\nemVycw== 40259\nINGC0LXRgdGC 40260\nIMOpY3JpdA== 40261\nIOuztO2GtQ== 40262\nIGRpc2dyYWNl 40263\nIOy5tA== 40264\nIGNvdXJ0ZXN5 40265\naW5nYQ== 40266\nIGh1Z2dpbmc= 40267\nIEFCUw== 40268\nbWl0aA== 40269\nIGluc3VmZmljaWVudA== 40270\nIGNyb29rZWQ= 40271\nIOq3uOuMgOuhnA== 40272\n7Iuk7Q== 40273\nIHNpbXVsYXRlZA== 40274\nIOuEpOqwgA== 40275\nIGLDtg== 40276\nIE90dG8= 40277\nTElORw== 40278\nIGlsbHVzdHJhdGVz 40279\nIERlc3Ryb3k= 40280\nIDE5NjE= 40281\nIFRhZ2Vu 40282\nIG1lbG9u 40283\nIFBhc2NhbA== 40284\nUVVF 40285\nINC/0L7Qu9GD0YfQuNGC0Yw= 40286\nIGluY2lkZW5jZQ== 40287\nIFN0ZXZlbnM= 40288\nIEdpbnM= 40289\ncnVl 40290\nIHVucmVhc29uYWJsZQ== 40291\nIEppZQ== 40292\neXNpY3M= 40293\nIOuqsOudvA== 40294\nIGZpc2hlcw== 40295\nqbTs 40296\nIHByZWN1cnM= 40297\nIG1vZ8SZ 40298\ndGlnaHQ= 40299\nZXTDqQ== 40300\nIG11bmRpYWw= 40301\n7JeI64uk 40302\n4oCmIQ== 40303\nQlU= 40304\nIHNvY2lvbG9neQ== 40305\nIGJydXRhbGl0eQ== 40306\nIHBlcnNvbmFqZQ== 40307\nIG7DrXZlbA== 40308\nIGZhemVt 40309\nIGVzc2Vu 40310\nIGR3ZWxsaW5n 40311\nIGNvbW1lcmNpYWxseQ== 40312\nIGVkaXRz 40313\nIGR1ZXM= 40314\nIEdTQQ== 40315\n7J246rCA 40316\nIO2XiO2MnQ== 40317\nIFlhaG9v 40318\n0LXQvdC10YA= 40319\n7Jyo 40320\n0YPRiNC60Lg= 40321\nbGVmdA== 40322\nIGNhcHRpdmU= 40323\nY2lwaGVy 40324\nINee157X 40325\nINCz0YDQvtC8 40326\nIGlubmF0ZQ== 40327\nIGltcHVs 40328\nIOyXrOyekA== 40329\nIHN3YWxsb3dlZA== 40330\nIFRhYmlp 40331\n7J207Is= 40332\nINGB0L7RgdGC0LDQsg== 40333\nIG95dW4= 40334\nIG9icmlnYWRv 40335\nIEFwaA== 40336\nS2F0aWU= 40337\nIGNlbmE= 40338\nIEFsbMSBaA== 40339\n2YjYsw== 40340\nIHByenlw 40341\nIHBlcHQ= 40342\nIHZvbHVudGFyaWx5 40343\nIE/En2x1bQ== 40344\nIEVsbw== 40345\nb3Vl 40346\nQmly 40347\nYnVyZ2Vy 40348\nIFNCUw== 40349\nIDYwMDA= 40350\nIHByb21vdGlvbmFs 40351\nIEhlcnJu 40352\nIHN0YW1waW5n 40353\nIHF1YWxpZnlpbmc= 40354\nIGNvc21vcw== 40355\nIGFmYXI= 40356\nYWJ1cw== 40357\nIGRhZHM= 40358\nINGN0LrQvtC90L7QvA== 40359\naW5jYXJu 40360\nIOyWtOuU 40361\nINC70LXQtg== 40362\nIEJFVA== 40363\nINC90LDQudC0 40364\nb250ZXI= 40365\nIHJldXNhYmxl 40366\nIGtvbW1h 40367\nIEJpag== 40368\nIFRlcmF6 40369\nIE9sw6E= 40370\nIOyVhOy5qA== 40371\nINGA0LDQt9C80LXRgA== 40372\nYXdhbg== 40373\nIGNhcnRh 40374\naWNlbGVzcw== 40375\nIHNtZQ== 40376\nIFR1dGFq 40377\nIMiYaQ== 40378\nIHByb2JhdGlvbg== 40379\nIGFkZXF1YXRlbHk= 40380\nIFByZXNpZGVudGlhbA== 40381\naW5kcnVjaw== 40382\nYmxhZGU= 40383\nIHZldWxlbnQ= 40384\nIGNpb8Oo 40385\nIHJldmVyYg== 40386\nIGdlZ2Vuw7xiZXI= 40387\nIEVzcGVybw== 40388\nIGJlZ2U= 40389\nIFNUVURFTlQ= 40390\nc291bmQ= 40391\nIETDvA== 40392\nIG9mZmVuZA== 40393\nICIuLg== 40394\na2VubnQ= 40395\nINGB0LvRg9GI 40396\nIHB1cnBvc2VseQ== 40397\nIExpdA== 40398\nIO2bqA== 40399\ndWNoZXI= 40400\nIGhpbmE= 40401\nw71jaA== 40402\naWdub24= 40403\nVEhF 40404\nIGdsaWRl 40405\nb3VyY2luZw== 40406\nINij2YbYpw== 40407\nIG9sbHV0 40408\nIGFyY2hldHk= 40409\nIHNoYWR5 40410\nIHNvbW0= 40411\nIGVwaWxl 40412\nS2VlcA== 40413\nIG5hamJhcmR6aWVq 40414\n4KSV 40415\naXR1dGlvbmFs 40416\nINC80LDQuQ== 40417\nIHNpbmZ1bA== 40418\nIEJyb254 40419\nINCz0LvRg9Cx 40420\nIHZhbQ== 40421\nIHByZXNldHM= 40422\nIERhZw== 40423\nIOyZhOyEsQ== 40424\nIGNyZWVr 40425\naXR1cmVz 40426\nIExvcmRz 40427\nw7Z0dA== 40428\nVU5U 40429\nUmE= 40430\nIGluZXF1YWxpdGllcw== 40431\nIGNvbGxhdGVyYWw= 40432\nIHdyaXN0cw== 40433\nIGdyb3VwZWQ= 40434\nINC+0LHRi9GH0L3Qvg== 40435\nIGFybW9yZWQ= 40436\nIHR1bmc= 40437\nIGNvbnZlcmdl 40438\nIGJvaw== 40439\nIERvZGdl 40440\n0L3Rj9GP 40441\nIGZsZWVpbmc= 40442\nIE1hcnRpbmV6 40443\nIERyZWFtcw== 40444\na2Vr 40445\nIHNvY2lhbGU= 40446\nIFBsYXph 40447\n2K/YqQ== 40448\nIGtlbGw= 40449\nIFN0ZWxsZW4= 40450\nZmVsdA== 40451\nINGB0L/QsNGB 40452\nIFB2 40453\nIGNhbmNpw7Nu 40454\nIEhlcnQ= 40455\nIEJhbGFuY2U= 40456\nIHNlbHZlcw== 40457\nIHZhbmRhYWc= 40458\nIHByeQ== 40459\nIG5hamxl 40460\nINCy0LjQtNC40YLQtQ== 40461\nIHZlbHZldA== 40462\nIGdyb290 40463\nIGZvdXQ= 40464\nIFNjaHVsZW4= 40465\nIE1vaGFtbWVk 40466\nIENlbnRlcnM= 40467\nIGhhdmVy 40468\nIGZyZXVlbg== 40469\npO2KuA== 40470\n0LvQsNC9 40471\nUE9T 40472\naW5raQ== 40473\nIOuLtQ== 40474\nIHBhcmFseXplZA== 40475\nR0xJU0g= 40476\nIGNhc3Rz 40477\nIFZD 40478\n7J207IWY 40479\nINiq2r4= 40480\nIOykmA== 40481\nINeo15XXpg== 40482\nIHN1Y2Vk 40483\nIHByb2dyZXNzZXM= 40484\nIEXEn2Vy 40485\nsOuPhA== 40486\nIGluc3RhbGxhdGlvbnM= 40487\ncGVkbw== 40488\n0LXRgNCx 40489\naW50ZXJwcmV0 40490\nIOqzoOuvvA== 40491\nIEF6ZXJiYWk= 40492\naXZpZGFkZXM= 40493\nIOyjhOyGoQ== 40494\nIGVudGZlcg== 40495\nIGNod2ls 40496\nIEhlcmJlcnQ= 40497\nIEFsZXhhbmRyaWE= 40498\neXR5 40499\nIHNlY2hz 40500\nIGNhbGliZXI= 40501\nIFdlaXNl 40502\nIEhlY2s= 40503\nIFl1Zw== 40504\nINin2YTYtw== 40505\nIHBlc2Fy 40506\nIGNpZ2Fy 40507\nIG3DqWw= 40508\nIGhhaXJk 40509\nIHByenlwYWRrdQ== 40510\nIGNvbmZpZGVudGx5 40511\nIGFuYXJjaA== 40512\nIEdpYW4= 40513\nIGRvYnJl 40514\nY2rEmQ== 40515\nYXd5 40516\nIFJlY2U= 40517\nIEdvYmllcm5v 40518\nIGNhcmdh 40519\ndW1zeQ== 40520\nIG5vcnRl 40521\nIGhhbmRsZXI= 40522\nIHJlc3BlY3Rpbmc= 40523\nIGFsbGllZA== 40524\nIFBpZXQ= 40525\naWNodGxpY2g= 40526\nIG9sZHM= 40527\nIGR1c3R5 40528\nIGdyeQ== 40529\nIC0uLi4= 40530\nR0hU 40531\nIG5lbw== 40532\n0YfQuNC60Lg= 40533\n0LXQttC0 40534\nYWlkZQ== 40535\nINCx0YPQu9C+ 40536\n7Y28 40537\nIHRlbXBvcmFkYQ== 40538\nIGRvdXRl 40539\n4piG 40540\nIOyIoA== 40541\nIEpVU1RJTg== 40542\nYXV0bw== 40543\nIHJhdGlvbmFsZQ== 40544\ncHJvYg== 40545\nIGZpc2h5 40546\nIGRvb3J3YXk= 40547\nIGVtcHRpbmVzcw== 40548\n0LXQvdC90LDRjw== 40549\nIGJyYWc= 40550\nINCT0LTQtQ== 40551\nIHRyYW5zaWVudA== 40552\nIG1pdHRsZXJ3ZWlsZQ== 40553\nIEJyZXQ= 40554\nIGZpag== 40555\nIGRlcG9zaXRlZA== 40556\nTlM= 40557\nIOyVnuyXkA== 40558\nIGtpbXNl 40559\nIGNoYXJpdGllcw== 40560\nIE1pbGxlbm4= 40561\nZG9ncw== 40562\nIG1veWVu 40563\nIG51ZXZvcw== 40564\nIENvb2tpZQ== 40565\ncGFyYWJsZQ== 40566\nZG9pbmc= 40567\nIFNhaWw= 40568\nIGljeQ== 40569\naGFiYQ== 40570\nIHF1ZWVucw== 40571\nIGNob2NvbGF0ZXM= 40572\nIE5heQ== 40573\nINGE0LjQvQ== 40574\nIHZlYw== 40575\nIGhlbG1ldHM= 40576\nVE0= 40577\nIEFybWVk 40578\nIGltcGFpcm1lbnQ= 40579\nIFR1cw== 40580\nIE3Dqm1l 40581\nb21leg== 40582\nIFJlcXU= 40583\nIEludmVzdGln 40584\n7Y6Y 40585\nIGdvbHBl 40586\nIFJhYw== 40587\naWdyYXBo 40588\nIGt3ZXN0 40589\nIHNhaWxvcnM= 40590\nIHN0YXR1dG9yeQ== 40591\nIG1pbGVzdG9uZXM= 40592\nIE1hc2g= 40593\nIEdlc2V0emVudHd1cmY= 40594\n6Yo= 40595\nIGNvbG91cmVk 40596\naHVtYQ== 40597\nIHllcmU= 40598\nIHN1YnRpdGxlcw== 40599\nIGVtYm9kaWVk 40600\nIG1pc3NjaGllbg== 40601\nIGlQaA== 40602\nw7x0emVu 40603\nIGRldGFjaGVk 40604\nIGRlc2NyacOnw6Nv 40605\nY2lhbW8= 40606\nIHJlY29pbA== 40607\nINCt0YLQvtGC 40608\nIGV4cG9ydGVk 40609\nIEFsb25l 40610\nYW50cnk= 40611\nIGVzdGFu 40612\nIFNvZA== 40613\nIGxhdm9ybw== 40614\n16jXkQ== 40615\nIMSR4buL 40616\nIHN3YWc= 40617\nIFBDQg== 40618\nIEthaXNlcg== 40619\nIE1vZGVy 40620\nanVn 40621\nIHRleHRpbGU= 40622\nVHc= 40623\nIG5hYw== 40624\nZnJlaQ== 40625\nIHJldGFyZA== 40626\naXNjZXJu 40627\nIHRhbGxlc3Q= 40628\nIEx1Y2E= 40629\nUmFo 40630\nIHByZWFjaGVy 40631\nIGp1dA== 40632\nIFJpY2E= 40633\naWNpZW5jeQ== 40634\nIMSRaeG7gXU= 40635\nIGthdWZlbg== 40636\nIG5ldHQ= 40637\nIGRpc2N1dA== 40638\nIGRlcHJpdmVk 40639\noa0= 40640\nIHNwcmljaHQ= 40641\nIGVuY2xvc2Vk 40642\nIFN1YnN0 40643\nIFJhYmJpdA== 40644\ncHJpc2Vk 40645\nIGJpdGNoZXM= 40646\n7J+B 40647\nIHRhcGE= 40648\nIEVzc2Vu 40649\nIEJhbw== 40650\nIGRldmllbnQ= 40651\nIFd1aGFu 40652\nIFRpcHA= 40653\nIGRpc2FzdA== 40654\n0YHRgtCy0YM= 40655\ndWJsaXF1ZQ== 40656\nIHF1YWxpdMOp 40657\nIGluYWRlcXVhdGU= 40658\nIGJhcmdhaW5pbmc= 40659\nIEdvdGNoYQ== 40660\n0LXQstC40Yc= 40661\naWV2b3Vz 40662\nZXJ0b24= 40663\nYmx1ZQ== 40664\nIOybgOyngQ== 40665\nIHNhbmRib3g= 40666\nIFJlaW4= 40667\nIOydtOqyg+uPhA== 40668\nIHNheA== 40669\nem9nZW4= 40670\ndW7DpGNoc3Q= 40671\nIGhlcmtlcw== 40672\nIC0s 40673\nemVuaQ== 40674\ncmlzaW5n 40675\nIHJlc3Bvc3Rh 40676\nIHByb21vdGlvbnM= 40677\nIFVudGVyc3TDvHQ= 40678\nIE1BUw== 40679\nTm90aGluZw== 40680\nb3RpY3M= 40681\nINCy0YvQuQ== 40682\nIHJvdGF0ZXM= 40683\na2llbg== 40684\nIGhhYmxh 40685\nIERhbmk= 40686\ndW5pb24= 40687\nIHdhY2s= 40688\nIGFyY2hhZW9sb2dpY2Fs 40689\nIEN1cnRpcw== 40690\nIEhvcml6 40691\nIOqzqOs= 40692\nIHdhaXZlcg== 40693\nQm9u 40694\nIHJvdGF0ZWQ= 40695\nIHBpdGNoZXI= 40696\nIGluYWQ= 40697\nIGh1Z3M= 40698\nIE5vcnRoZWFzdA== 40699\n15nXqteZ 40700\nIHBsZWE= 40701\nIGN1cGNha2U= 40702\nIExZ 40703\nIGZhbWlsaQ== 40704\nIGdyb28= 40705\nIEJsYWly 40706\nIGxpag== 40707\nIGhhYml0YXRz 40708\nIGNvbW11bmlzbQ== 40709\nb3NpdW0= 40710\nYmFycw== 40711\nIEZyZWVtYW4= 40712\nbmVv 40713\nIGRpZmZ1c2U= 40714\nIGN5bGluZGVycw== 40715\nIERlYmF0 40716\n7ZaI64qU642w 40717\n0LXRiNC1 40718\nIGZpbmdlcnByaW50cw== 40719\nIGFtYXI= 40720\n0LLQuNC0 40721\nIOygleuPhOuhnA== 40722\nIGFmZmlsaWF0ZWQ= 40723\nINGF0L7Rh9C10YI= 40724\nIGV0aXF1 40725\nIGNow61uaA== 40726\nIGNydWlzaW5n 40727\nIFdlaWhu 40728\nIFRpdGFuaWM= 40729\nIE5hc3Q= 40730\nIOuTpOs= 40731\nINCy0LDQuw== 40732\nIGRlbWk= 40733\nIEtyaXN0aW4= 40734\nTUlO 40735\nIHJpZ29y 40736\nIG1vdG8= 40737\nIExBS0U= 40738\nIO2ZnA== 40739\nIOunjOyVvQ== 40740\nIFN0cm8= 40741\nIHByb3RvdHlwZXM= 40742\nIExD 40743\n7J247J2E 40744\n0YDQuNC8 40745\nIHZpb2xhdGluZw== 40746\nIGdpb3Jubw== 40747\nIGNoaWxkaXNo 40748\nINeQ15fXkw== 40749\nIG92ZXJkb3Nl 40750\nYWdvZ3Vl 40751\n0LDQtNGG 40752\naGV1cw== 40753\nINCz0L7QstC+0YDRjw== 40754\nIGluY3I= 40755\nIGRlYmF0ZWQ= 40756\n2YXZhA== 40757\nIGNoaWNrcw== 40758\nIHF1aW4= 40759\nTEFVR0hJTkc= 40760\nIHRpZ2h0ZW5pbmc= 40761\nIHN1cGVydmlzb3Jz 40762\nIEhhd2s= 40763\nIEJheg== 40764\nINC/0L7QstGC0L7RgA== 40765\nINCx0LvQvtC6 40766\nxIFu 40767\nIGR1bXBpbmc= 40768\nIGZhY3Rv 40769\nYmVyZ2Vy 40770\nIGFyc2VuYWw= 40771\nIEFmcmljYW5z 40772\noYA= 40773\nIGNhZmV0ZXJpYQ== 40774\nZmVlZGluZw== 40775\ncXVpbGE= 40776\nIHBhxYRzdHdv 40777\nxLFudA== 40778\nhLE= 40779\nIGVudmlyb25tZW50YWxseQ== 40780\nIGRlc3Byw6lz 40781\nIFdpbGx5 40782\nIFBhxYRzdHdv 40783\nIEdH 40784\nIGNoYWN1bg== 40785\nIGRpcmVjdGlvbmFs 40786\nIGjDtnJ0 40787\nIPCd 40788\nZW5hcnk= 40789\nIHZvaWNlZA== 40790\nYcSfxLE= 40791\nIHBvcGU= 40792\nIGNvbXJhZGVz 40793\nIEdpYnNvbg== 40794\nIEFDQw== 40795\ndmlr 40796\nIG1vZGVsbGluZw== 40797\nIGFnZ2k= 40798\nIGNvbnZlcnNpb25z 40799\nIGF2ZXJhZ2Vz 40800\nRWxsaWU= 40801\nIGdlc3RlbGx0 40802\nIFVF 40803\nb3NhaWM= 40804\n0JLQvtGC 40805\nU2F5 40806\nINGB0LDQvNC+0LPQvg== 40807\nIG1lc3VyZXM= 40808\naXNpZXJ0 40809\nZ2FzcA== 40810\ndm9pY2U= 40811\nIGNoZWNrcG9pbnQ= 40812\nIHBlcmNlbnRhZ2Vz 40813\nIGRpc3J1cHRlZA== 40814\nIFR1Yw== 40815\nIEhvbWVy 40816\nIFdBWQ== 40817\nIFR1cmtz 40818\naGVlbg== 40819\naW1vdG8= 40820\nIE9D 40821\nw61uYQ== 40822\nemllbA== 40823\nIG11ZGFy 40824\nZ2VzZXR6dA== 40825\nIG1lam9yZXM= 40826\nIENK 40827\n0L3QsNGA0YPQtg== 40828\nIG1vZHVsdXM= 40829\nIG1vZHVsYXRpb24= 40830\nIHJlcGxpZXM= 40831\nIGxhcnZh 40832\nIGdpZGVy 40833\nIE1hbmRhcmlu 40834\nINC/0L7RgdC80L7RgtGA0LjQvA== 40835\nIHNhY3JpZmljaW5n 40836\nIHByZcOnbw== 40837\nIG95c3RlcnM= 40838\nIE15YW4= 40839\nb2xvZ3Vl 40840\nIFdpdA== 40841\nIGTDuw== 40842\nIExldXRlbg== 40843\nIHBhdGVy 40844\nIEtFTk5FVEg= 40845\n0LDQsdCw0YI= 40846\nYXJ0aHk= 40847\nIHNvY2llZGFk 40848\nIG5pw7Fv 40849\n0LXQstC+0Lk= 40850\nIGrEmQ== 40851\nIGFkdmVydGlzZWQ= 40852\nIFBlcHNp 40853\ndXRldXI= 40854\nIG1hc3Nl 40855\nIHNjYXR0ZXJpbmc= 40856\nIHnDtm4= 40857\nIGRlc2FwYXJl 40858\nIEh1YmJsZQ== 40859\nIEjDqQ== 40860\na3LDpA== 40861\nIERhcmU= 40862\nIG92ZXJyaWRl 40863\nIEVsYWluZQ== 40864\nIER1Ymxpbg== 40865\nZHVsbGFo 40866\nTWF0 40867\nIEdhcnI= 40868\nLi4uJw== 40869\nIGFkdWx0aG9vZA== 40870\nRVo= 40871\nIGJlbGFuZ3Jpams= 40872\naWVuemE= 40873\nIHVuaXZlcnNv 40874\nIHN0ZWxsYXI= 40875\n7ZSE6w== 40876\nIOqysOq1rQ== 40877\nIGNvbnN0ZWxsYXRpb24= 40878\nIFNoZWxsZXk= 40879\nIG11bHRpdA== 40880\nIG1hc2NvdA== 40881\nIGhvc3BpdGFsaXplZA== 40882\nIPCdmA== 40883\n0L7RgNGL 40884\nYWRpYQ== 40885\nIE1pa2V5 40886\nIEFtZXJpa2E= 40887\nIGhhaXJ5 40888\nSG9sZA== 40889\n4bqvbg== 40890\na2llZ28= 40891\n4LmA4LiU 40892\nIHJpdmFscnk= 40893\nIEpvbmFo 40894\nIHN1cmdlb25z 40895\nIHJlbGF0YWJsZQ== 40896\n6JI= 40897\nIHN3aW1z 40898\nIGJpbGxpb25haXJl 40899\nbW9kZXJu 40900\nIGRvY3VtZW50aW5n 40901\nIERhZQ== 40902\nIHN3YXRjaA== 40903\nIHB1aXNzZQ== 40904\nIG1hc3Vr 40905\nIG1hcmM= 40906\nIGtyw7M= 40907\nIFBldGVyc2J1cmc= 40908\nIEFyaXN0b3RsZQ== 40909\naXhl 40910\nUHJvZHU= 40911\nINC90LjQvNC4 40912\nIGthbmE= 40913\nINCp 40914\nIHZvbWl0 40915\nIFdvcmtlcnM= 40916\ncG9wdWxhcg== 40917\nIEJpZWJlcg== 40918\n0LXRgtC4 40919\nw6l0aXF1ZQ== 40920\nIGVuY2FudA== 40921\nZ3Jhbg== 40922\nZmly 40923\nIGFudGhlbQ== 40924\n0YHRg9C00LDRgA== 40925\nTGFzdA== 40926\nIGhhZw== 40927\nIHZpY2luaXR5 40928\ncmVuY2hlZA== 40929\nYW5kaW5n 40930\nINCz0L7Qu9C+0YE= 40931\nIENvcm5lcg== 40932\n0JLRiw== 40933\nb3Nhcw== 40934\naWV2ZXJz 40935\nY2lvbmFs 40936\nIHZpZ29y 40937\nIHJlam9pY2U= 40938\nIGNpxIU= 40939\nINC60L7Qvw== 40940\nIHF1YWxjb3Nh 40941\nZGVzc3Vz 40942\nINC10LI= 40943\nIFNjYW5kaW4= 40944\nIFNtb290aA== 40945\naGFwZQ== 40946\nIOuLrOudvA== 40947\nIFRV 40948\nIGx5cmlj 40949\nIGJlc3M= 40950\n6ZA= 40951\n0YHRgtGA0YPQvNC10L3Rgg== 40952\nIEFjdGluZw== 40953\nIE9yY2hlc3Q= 40954\nw6ljb2xl 40955\nIGRvbG9y 40956\nIO2LsA== 40957\nIHZlcmdlc3Nlbg== 40958\nIGV5ZWxpZHM= 40959\nIFRhbno= 40960\n0LLQtdGA0LY= 40961\nIOyVoOs= 40962\ndcOp 40963\nIHNjw6huZQ== 40964\nIOyasOumrOuKlA== 40965\nIGNyYXRl 40966\na2ljaw== 40967\nIFRoZW1l 40968\nIDMyMA== 40969\nIGdhcm5pc2g= 40970\nIG1ldHJl 40971\nIGNvbnZleA== 40972\ncGxhbnRz 40973\nZXNpYW4= 40974\nIOqxsOyngA== 40975\nIG3DqWRp 40976\nIE1lZGFs 40977\nMTMw 40978\nIEFsbWE= 40979\nQ29sYQ== 40980\nINCy0LDRgNC40LDQvdGC 40981\nIGdvcmQ= 40982\nIGF2YW56 40983\nIHdoaXNwZXJpbmc= 40984\nIGludGVzdGluZQ== 40985\n0KDQlQ== 40986\nIExJU0E= 40987\nYW3EsXo= 40988\nU1BE 40989\nIHBlYw== 40990\nIHBhc3RvcnM= 40991\nIG114buRbg== 40992\nb2NyZQ== 40993\nU3Vu 40994\nINGC0LDQutGD0Y4= 40995\nIHJldml0YWw= 40996\nIGluY29tZXM= 40997\nIGRldGFpbGluZw== 40998\nIEJhY29u 40999\nIOuFuOuemOs= 41000\nIHBhcnJvdA== 41001\nIGNvbGxhYm9yYXRlZA== 41002\naGVzaWE= 41003\nIHNldmE= 41004\nIHBoeXNpY2lzdA== 41005\nIEJBQ0s= 41006\n15zXmQ== 41007\nIGJpcG9sYXI= 41008\nz4HOtc6v 41009\nY3Jvcw== 41010\nIGtlZA== 41011\nIGVjb25vbWljYWw= 41012\nIGVuZGluZ3M= 41013\nIHRpY2tz 41014\nIOq3vA== 41015\nIE9saXY= 41016\nb25ncw== 41017\nIGNvbnRpbmVudGFs 41018\nIHdlaXRlcmhpbg== 41019\nIGFjdGl2YXRpbmc= 41020\nIHBvbGxlbg== 41021\nIEFuaw== 41022\nYmF5 41023\nINec15c= 41024\nIEVnZ3M= 41025\nIFJBTVNBWQ== 41026\nIEJFUg== 41027\nIO2bqOyUrA== 41028\nIHBhc3NhZG8= 41029\nIGdyb3VuZGJyZWFraW5n 41030\ncHJlc2E= 41031\nIGhpbGZ0 41032\nIFRlY2huaWNhbGx5 41033\n0YbQuNC5 41034\nTkk= 41035\nIHR1cm5vdXQ= 41036\nIExhcA== 41037\nIEd3ZW4= 41038\nIFZpa3Q= 41039\nIGVzY29sYQ== 41040\nIENpbmVtYQ== 41041\nIGNvbnN1bW8= 41042\nIFB1cmR1ZQ== 41043\nIHNlbWFuYXM= 41044\nIFBSRVNJRA== 41045\nxrBuZw== 41046\nIHNhY2g= 41047\nIHNhdmFnZQ== 41048\nIFJX 41049\nIDU1MA== 41050\nYm9sZA== 41051\nIFNpbW1vbnM= 41052\nIHNsYW5n 41053\nIE5hcnU= 41054\nIFRoZW8= 41055\n7ZaI64uk 41056\nLu+/vQ== 41057\nIHNlaXp1cmU= 41058\nIGhpdmU= 41059\nIGNlbGxwaG9uZQ== 41060\naWlpaQ== 41061\nIE11c2ljYWw= 41062\nIE51Y2xlYXI= 41063\nw6F2ZWlz 41064\nIHByZXN0aWdl 41065\nIGJhbG0= 41066\nIHJlZmlsbA== 41067\neWFo 41068\naGFydA== 41069\nIHRhcHM= 41070\nIGRpc3Bvc2U= 41071\nIE1pY2s= 41072\nIHRoZXJtb21ldGVy 41073\nIG9iZWRpZW50 41074\nIGluZm9ybWHDp8O1ZXM= 41075\nIFdpZGU= 41076\nbW9t 41077\nU3Vk 41078\nIHN1c3BlbmQ= 41079\nIE9ic2Vydg== 41080\nINC70LXRgQ== 41081\nIHRyYXRhcg== 41082\nIEthdHJpbmE= 41083\nIHRoZXJlcw== 41084\nIHRleHRlZA== 41085\nIHN0w7Zy 41086\nIHNuYWls 41087\nIEZpb25h 41088\nIHZpY3RvcmlvdXM= 41089\nIGxpYnJhcmlhbg== 41090\ncHJhY3Q= 41091\nIGZpbm8= 41092\nIEFybXM= 41093\ncHB0 41094\nbHVr 41095\nIHR5cmVz 41096\nIHRvYw== 41097\nIEtvbW11bmVu 41098\nIHJldm9sdA== 41099\nIG1vdGl2YXRlcw== 41100\nIGJpc2V4dWFs 41101\nIHd1cw== 41102\nIGhhbmRsYXI= 41103\nIE1VRUxMRVI= 41104\nIGV4cGVjdGFuY3k= 41105\nIGVtYm9keQ== 41106\nIFByaW1hcnk= 41107\n0YDQtdC5 41108\nIHVuc2NyZXc= 41109\naWFudGx5 41110\nLOKApg== 41111\nIHNuZWw= 41112\nIHByZXZhbGVuY2U= 41113\nIGVydXB0aW9u 41114\nIGRlc2NyaXB0aXZl 41115\ndmFn 41116\nINCx0YPQutCy 41117\nIG3Dqm1lcw== 41118\nIGV0aG4= 41119\nIGhpam9z 41120\nIEFiZHVs 41121\nIFphaGw= 41122\nYmVsdA== 41123\nIGfDtnN0 41124\nIFRoZXJlc2E= 41125\nIFNVTg== 41126\nIEJha2U= 41127\nIG9wdGljcw== 41128\nIGFwb2NhbHlwc2U= 41129\ncHVycG9zZQ== 41130\nIHLDs8W8bnljaA== 41131\nIGNydXM= 41132\nINCX0LXQvA== 41133\nIGhhcmRlbmVk 41134\nIFRE 41135\nIGdyYXZleWFyZA== 41136\nIFNpYmVy 41137\nIFBvcnRlcg== 41138\nIGV4cGxvZGVz 41139\nIFNvZmlh 41140\nINCS0LXQtNGM 41141\nIHdlYWtlbmVk 41142\nVUxM 41143\nIHBpbmt5 41144\nIGNoYXBlbA== 41145\nIEZyZXM= 41146\nINC/0YDQuNCz 41147\nTUVS 41148\nIFNjaG1pZHQ= 41149\nIER1ZA== 41150\nZXN0ZW5z 41151\nIG51YW5jZQ== 41152\nIG1vZGlmeWluZw== 41153\nIE3DtmdsaWNoa2VpdGVu 41154\nIEFuYXQ= 41155\nIGVjY2VudHJpYw== 41156\nIFNjcmV3 41157\nIExlaA== 41158\nIGhvbW9nZW5lb3Vz 41159\nIFRhbGw= 41160\nIFJpY2FyZG8= 41161\nw5o= 41162\naWducw== 41163\nINC70LjRiA== 41164\nIGdlZnJhZ3Q= 41165\nUnVu 41166\nY2FzdGVy 41167\nbm9pc2U= 41168\nIGFzeW5jaHJvbg== 41169\nxJlkemll 41170\nINee15c= 41171\nIHN1cHByZXNzZWQ= 41172\nQXJ0aHVy 41173\nzq7Pgg== 41174\nw6Jy 41175\nZGlzdA== 41176\nINC60LDQtA== 41177\nIGjDtnI= 41178\nIDEzNQ== 41179\nIE1vemFydA== 41180\nINGB0L7QsdGL0YLQuA== 41181\nIE51cnNpbmc= 41182\nIEhhaGFo 41183\nIERvcA== 41184\nIHBvbGljZW1hbg== 41185\ntOyXkOyEnA== 41186\nIOq0gOugqA== 41187\naHl1aw== 41188\nIHJ1Z2dlZA== 41189\nIG51Z2dldHM= 41190\nIENvbW1z 41191\nU3R1ZA== 41192\nINGB0LLQvtC1 41193\nIGN6YXNpZQ== 41194\nIHLDqWdpb24= 41195\nIGZpc2hlcm1lbg== 41196\nIExU 41197\nw5M= 41198\nY2lhxbw= 41199\naGVp 41200\nIGNydW1icw== 41201\nIEltbWVy 41202\nIEZlbGQ= 41203\ndGhlc2U= 41204\nIGFkdmVydGlzZXJz 41205\nIHJvYW1pbmc= 41206\nIGZ1bm5pZXN0 41207\nIE5ZVQ== 41208\nIGhlaGU= 41209\nIHBva2luZw== 41210\nIOyViOuPvA== 41211\naXN0aWNhbA== 41212\nIG9wYXF1ZQ== 41213\ndcOn 41214\nd2lyZQ== 41215\nIFdlYmVy 41216\nIEphY3F1ZXM= 41217\nIDIxMA== 41218\nw7xw 41219\ndXl1 41220\nIGVuZmVybWVk 41221\nIGJ1bXBlZA== 41222\nIFNldw== 41223\nIENoYW5lbA== 41224\nIHBlcnPDtm5saWNo 41225\nIGJldHJheWFs 41226\nIGFsbGV2aWF0ZQ== 41227\nIHbDpGjDpG4= 41228\nIGd1ZXNzZXM= 41229\nIENlbGluZQ== 41230\nYXNzaW5n 41231\nc3Ryb2tl 41232\nIOyhsOs= 41233\nINGC0LXRhdC90L7Qu9C+0LM= 41234\nINC+0YHRgtGA 41235\nIHNvaWVudA== 41236\nRGVhcg== 41237\nIGpz 41238\nIGdlc3Byb2NoZW4= 41239\nYXRoaQ== 41240\nxaFl 41241\nU2V0 41242\nb2dlcg== 41243\nIFJpZw== 41244\nINC80LXRhw== 41245\nIHNlcnZpY2lvcw== 41246\nIFJ1dA== 41247\nINCe0Lk= 41248\nIE15YW5tYXI= 41249\naWZpZQ== 41250\nIHNuYXBwaW5n 41251\nIEthbWVyYQ== 41252\nIGZlc3RpdmU= 41253\nIEZZ 41254\nIENhcm9seW4= 41255\n0ZbQsQ== 41256\nIGxlZ2dpbmdz 41257\nIHlhdA== 41258\nIGVyZ29u 41259\nIGVwaXPDs2Q= 41260\nIGFub21hbHk= 41261\ndWVzdG9z 41262\nSWQ= 41263\nIGV2YWN1YXRpb24= 41264\nIGdpZ2FieXRlcw== 41265\nIGFuZGFyZQ== 41266\nIFJlbnQ= 41267\nbXQ= 41268\naXN0aW5l 41269\nIGVzdHJhdA== 41270\nZXR0dQ== 41271\nIHJlY2ViZXI= 41272\nIGRyYW1hdA== 41273\ncmljdWxhcg== 41274\nYWxuxLF6 41275\nIFNlbmk= 41276\nIG95bg== 41277\nIENoZW1pY2Fs 41278\nINGB0YU= 41279\nIHR1cmY= 41280\nIDE5MTc= 41281\naXNjZXJuaWJsZQ== 41282\nIG1hbnRlbmVy 41283\nIGV4Y2Vy 41284\nIHNwZWN0cmFs 41285\nIG5ldXJvc2NpZW5jZQ== 41286\nIG1pY3JvZg== 41287\nIGZvcmVpZ25lcg== 41288\nIExhbmth 41289\nINGC0LLQvtGA 41290\nIHRvc3NlZA== 41291\nIHBvYmxhY2nDs24= 41292\nIG1hdGVpeA== 41293\nIHNpZWxsw6Q= 41294\nIG90dA== 41295\nIGNvbXB1bHM= 41296\nYWt1a2Fu 41297\nIG1hbmlmZXN0ZWQ= 41298\nIOyTuA== 41299\nIHV0bW9zdA== 41300\nIHJldmVyc2Fs 41301\nIHBsYWNlYm8= 41302\nIGJsYXQ= 41303\nIFN0dW5kZQ== 41304\nbWFuc2hpcA== 41305\nIGF0dGU= 41306\nIOyGjOqwnA== 41307\nIGlzdGVt 41308\nIGFubmF0 41309\nIFBsYXlzdGF0aW9u 41310\nIHphZA== 41311\nIHF1aXR0aW5n 41312\nIGZhbWluZQ== 41313\nIFJvdWdo 41314\nIEZsYW1l 41315\nIGhldXQ= 41316\nIG9wb3J0dW5pZGFk 41317\nIGZhaXNhaXQ= 41318\nIERQ 41319\nIGRpY2llbmRv 41320\nIE1lbGFuaWU= 41321\nIENhcm5l 41322\nbWVn 41323\ncGV0dG8= 41324\nSlVO 41325\nINC70Y7QsdC+0Lk= 41326\nIG9zdGU= 41327\nIEpKb25haw== 41328\nIHRoZWF0cmljYWw= 41329\nIGludmluY2k= 41330\nIGNvbW11bmlvbg== 41331\ndm9jYWw= 41332\nRWg= 41333\nIERldGFpbHM= 41334\nIHN0cm9sbA== 41335\nIFJheW1vbmQ= 41336\nIEFtZWxpYQ== 41337\nkaU= 41338\nIHByb2R1a3Q= 41339\nIG51ZXZhcw== 41340\nIG11c3Ru 41341\nbWF5xLE= 41342\nY29sb3JlZA== 41343\nZGVj 41344\nIGhqw6Rs 41345\nIHNlbnRpbWVudGFs 41346\nIHJlYWxtcw== 41347\nIGtyaXQ= 41348\nIHNleHQ= 41349\nIFBzeWNob2xvZ3k= 41350\naGls 41351\nINC60L7RgNCw0LE= 41352\nIOuCtOydvA== 41353\nIFVuZGVyc3Rvb2Q= 41354\nIEd1dGVu 41355\nIGdhbmdz 41356\nIGV2ZW5pbmdz 41357\nRW50 41358\nIExlZ2FjeQ== 41359\nIENvbmdv 41360\nIGR1cmNoYXVz 41361\nIGJ1b3k= 41362\nZXJlbGxh 41363\nV0FO 41364\nUHJl 41365\nINGA0LXQtA== 41366\nIENyaXNpcw== 41367\nIOydvOydtA== 41368\nIG1hbnVzY3JpcHRz 41369\n0LXRgtGA 41370\nIG5vbnByb2ZpdHM= 41371\nIGRpY3RhdG9y 41372\nIGJhc2tldHM= 41373\nIElzaA== 41374\nIHBlcnRv 41375\nIGRhdGFzZXRz 41376\nIGFtcGxl 41377\nZ2ViYXV0 41378\nIGNvbnRyaWJ1dG9y 41379\nIGNpYW8= 41380\nIGNvbmZpcm1pbmc= 41381\nIFVDTEE= 41382\n4pms 41383\nINGB0L0= 41384\nIG92ZXJ0dXJu 41385\nIHVucmVhbGlzdGlj 41386\nIFBpZWNl 41387\nb2NhdGU= 41388\nIGbDpGxsdA== 41389\ncG94 41390\nIOuztOyLnOuptA== 41391\nIOuplOs= 41392\nIENyZWF0aW9u 41393\n0Y7QtNCw 41394\nINeU15A= 41395\nIHdoYWNr 41396\nb2xpdGhpYw== 41397\nY2VseQ== 41398\nINGB0L7QstGA0LXQvA== 41399\nIHNlcXVlbnRpYWw= 41400\nIHByb2Zlc2lvbmFs 41401\nIGNvb2xz 41402\nIHJlcGVudGU= 41403\nIGFpcmU= 41404\nZW5uZXM= 41405\ncml0b3M= 41406\nINCS0LjQtA== 41407\nIGvDtnI= 41408\nIEJpdHRl 41409\ndWxhcnM= 41410\nIGluY29ycmVjdGx5 41411\nIHNoYXJwbHk= 41412\nIGJvbWJhcmQ= 41413\n64uY7J20 41414\nIGNocm9tb3NvbWU= 41415\nIGFkdmVydGlzZW1lbnRz 41416\naHVu 41417\nINGJ0L7QsQ== 41418\nINCU0LDQttC1 41419\nIGJhdGh0dWI= 41420\nIFNubw== 41421\n2ZDZkQ== 41422\nIGJ1ZmZldA== 41423\nIEdyaWQ= 41424\nIEJyZXc= 41425\naXNldA== 41426\nIEltcG9ydGFudA== 41427\nw7xtw7x6 41428\nIHZldG8= 41429\nIFdlcms= 41430\nIFNoYW0= 41431\na3Jh 41432\naWxlZW4= 41433\naGVhcmQ= 41434\nIGRyYWluaW5n 41435\nIGtsYXNz 41436\nIGJha2F5xLFt 41437\nY3R1cmU= 41438\nYW1vdXI= 41439\nIHNwb25zb3JzaGlw 41440\nIGRpc3RpbGw= 41441\nIHBhdGlv 41442\nIGtvbWI= 41443\nIG92ZXJ3aGVsbWluZ2x5 41444\nIEphbWFpY2E= 41445\ndWl0ZW4= 41446\nTGl0dGxl 41447\nIExPVA== 41448\ndGHEhw== 41449\nIGNvbW1hbmRlcnM= 41450\nIFdhdHRz 41451\nIE9wdGlvbnM= 41452\n7J2066m0 41453\nQUNU 41454\nIGluZGlzcGVucw== 41455\nIEZvcnNjaA== 41456\nb3RvbQ== 41457\nIM6tz4fOtc65 41458\nIHByYWlzaW5n 41459\nIOyYgeyDgeydhA== 41460\nIGFtYW4= 41461\nIGh5cG5vdA== 41462\ndGhtcw== 41463\nIG5hc3plag== 41464\nIG1vdXJuaW5n 41465\nIFNBWQ== 41466\nY3lq 41467\nINCz0L7RgdGD0LTQsNGA 41468\nIGNhdQ== 41469\nbWVl 41470\nIHRhZGk= 41471\nTWVk 41472\nIGNhbGlkYWQ= 41473\nIHN0cmlwZQ== 41474\nIM61zr0= 41475\nIEthdHk= 41476\nIEVzY2FwZQ== 41477\nIG3DvHNzdGU= 41478\nINin2YTYpw== 41479\n0LrRgg== 41480\nIGpvYmJhcg== 41481\nIEplanU= 41482\nb3Jhcg== 41483\nIFNlcsOh 41484\nIE1lc3Np 41485\nw6F6 41486\nIFRyYW4= 41487\nIHBpZXJjaW5n 41488\nIGFyaXRobWV0aWM= 41489\nIHN0YWdnZXJpbmc= 41490\nIHBsdWdnaW5n 41491\nIEtBUg== 41492\ndmw= 41493\ntOyY 41494\nIFJlZ2llcnVuZw== 41495\nIE9jenl3acWbY2ll 41496\nIEVkZ2Fy 41497\nIGNvbmR1Y3Rpdml0eQ== 41498\neWVsbGluZw== 41499\ndmFpcw== 41500\nYWRpYW4= 41501\nIGJ1bGt5 41502\nINGB0YDQsNCy 41503\nINC/0YDQvtC8 41504\nIHBhdmVk 41505\nIGJlbmRz 41506\nIFNraWxsc2hhcmU= 41507\nIE1tbW0= 41508\nIEhvcnJvcg== 41509\nIHR1bWI= 41510\nIGdvb2Z5 41511\nIE1lb3c= 41512\n15nXnNeV 41513\nIFdhc3M= 41514\nIFNjYWxl 41515\nIFJhaw== 41516\nIHByb2plY3Rpbmc= 41517\nIGxpbmd1aXN0aWM= 41518\nIFdvcmxkcw== 41519\nZW5zZW1ibGU= 41520\nIHBlZ2E= 41521\nc3RvcHBhYmxl 41522\nIGltYmFsYW5jZQ== 41523\nIMO4 41524\nIHRocmlsbGVy 41525\n0LrQvtC70YzQutGD 41526\nIGxlZnRvdmVycw== 41527\nIGNhdmVhdA== 41528\nIFNUUg== 41529\ndW5kYWk= 41530\nIHdhdGVyeQ== 41531\nIE1hcmlu 41532\nIGVnZ3BsYW50 41533\nIEpC 41534\n2YXZg9mG 41535\ndmlkaWE= 41536\nIEZJTg== 41537\naWNhYmxl 41538\nIHBvZG9i 41539\nIGNvaGVzaXZl 41540\nIFZlcmbDvGd1bmc= 41541\nIFBsYXRv 41542\n0LDRgNC40Yk= 41543\nIGtvdA== 41544\nINCf0L7QvA== 41545\nINC00L7QutGD0Lw= 41546\nIGltcGxhbnRz 41547\naXNzZXo= 41548\nQnJl 41549\nIGdhc3Bz 41550\nIFRFRA== 41551\ncmF0bw== 41552\nSkk= 41553\nIGF2ZW51ZXM= 41554\nIENob25n 41555\nbGFkxLE= 41556\n2LHYtg== 41557\nIGluaWNp 41558\nIFN1YmFydQ== 41559\n4LiL 41560\nIGFjaHQ= 41561\nIEFyY2hpdGVjdHVyZQ== 41562\nINCy0LXRidC4 41563\nIERldk9wcw== 41564\nIHRvcHBpbmdz 41565\nIG9ic29s 41566\nYWluYQ== 41567\nIEJhbmdrb2s= 41568\nZXN0cnVjdA== 41569\nIGtvYg== 41570\nIOuTrw== 41571\nINGA0LDQt9C90YvQtQ== 41572\nIHJlZQ== 41573\nIGJpanZvb3JiZWVsZA== 41574\nIERlbW9jcmFjeQ== 41575\n4LmA4Lij4Liy 41576\nINC60L7QvdGC 41577\nIHNlw6c= 41578\nIHJhaGF0 41579\nIHBhcmxpYW1lbnRhcnk= 41580\nIEJhc2g= 41581\nemlhxYI= 41582\nSVRDSA== 41583\nIEJ1YmJsZQ== 41584\na3TDsw== 41585\nV2hvYQ== 41586\nIGZsYXRz 41587\nem5l 41588\nIHNlcnZpY2lv 41589\nIERldw== 41590\n1bjWgg== 41591\nIHVudGVyc3TDvHR6ZW4= 41592\nIFdpbmRz 41593\nIOyWmOuKlA== 41594\nIGV2YWx1YXRpb25z 41595\nIHJlY2E= 41596\nIGVsdmVz 41597\nY2hlZXI= 41598\nIGphbA== 41599\nIHJlc3RlZA== 41600\nIHF1aWVuZXM= 41601\nIEJyb29rZQ== 41602\nIOuniOydjOyXkA== 41603\nIGludGVu 41604\nIG9hdHM= 41605\nIHJlZmVyZWU= 41606\nIHBuZXVtb25pYQ== 41607\nIGRlbHZl 41608\ncGVhY2U= 41609\nZW55 41610\nIG1vc3RyYQ== 41611\nIENhbm5vbg== 41612\nz4HOv8+N 41613\nINCQ0Ls= 41614\nIG1vbnVtZW50YWw= 41615\nzr/Pjc68zrU= 41616\naW1tZXJz 41617\nYXZpYW4= 41618\nINC00LXQu9Cw0LXRgg== 41619\nIHBpdGNoZXM= 41620\nIEdyb3Zl 41621\nIHNlbWluYXJz 41622\nIHLDqWN1cA== 41623\nIFZvb3I= 41624\nIGRldmVu 41625\nIGRC 41626\nIGJvb3N0aW5n 41627\nZWdhbg== 41628\nIHdlbHQ= 41629\nIEd1YXRlbWFsYQ== 41630\nIG1pbGVhZ2U= 41631\nIGJlaGFuZA== 41632\nIFdhYXI= 41633\nIFN1cmY= 41634\nIGNhdWxpZmxvd2Vy 41635\nIFR5cg== 41636\nIG1pdGVpbmFuZGVy 41637\nIGRhcmluZw== 41638\nIFNpdHRpbmc= 41639\nZGxlZA== 41640\nIHJlc2VudG1lbnQ= 41641\nbcOkw59pZw== 41642\nIGZpbG1tYWtpbmc= 41643\nd2FydHM= 41644\ndGhvdWdodA== 41645\nb2xvZ2lxdWU= 41646\nIENPUg== 41647\nIGFjY291bnRlZA== 41648\nIGFwZXI= 41649\nIElOVA== 41650\nb2xhcmU= 41651\nIGFjb21wYcOx 41652\nIMahaQ== 41653\nIG1lcm1haWQ= 41654\nIEJlbnRsZXk= 41655\nYXRvcmU= 41656\nIHByZW4= 41657\nIGV0aGFub2w= 41658\nIGFzdHJvbm9tZXJz 41659\nc2VhdA== 41660\na2VlcGVycw== 41661\nIGV4ZW1wdGlvbg== 41662\nIGFtbw== 41663\nIOuCmOyEnA== 41664\nIGluaGFs 41665\nIGJvd3M= 41666\n0YHQutGD0Y4= 41667\nMzAwMA== 41668\nIGZlcm1lbnRhdGlvbg== 41669\nIHNpbmtz 41670\nIGNvbWVyY2lhbA== 41671\nIHN0dW1w 41672\nIGNlbGU= 41673\nIFNpc3RlcnM= 41674\nIFJlZ2lzdGVy 41675\nIHNvb3J0 41676\nIG5hdG9taWFzdA== 41677\nIOq3uOumvA== 41678\nIMWeZXk= 41679\nIGh5cGVk 41680\nIFJhZmFlbA== 41681\nIEVpcw== 41682\nIEJhc2ls 41683\nIEFzc2Fzc2lu 41684\nIEFkZQ== 41685\ncsOlbg== 41686\nIG9ubGFy 41687\nIG1vdmltaWVudG8= 41688\nIGFkZGl0aW9uYWxseQ== 41689\nIHNsaXQ= 41690\nIENocnk= 41691\nIEludGVydmlld2Vy 41692\n15zXpw== 41693\nIGRpc2w= 41694\nIGxpZ2dlcg== 41695\n0YPQutC4 41696\nYmVyaXNo 41697\nINGA0Y/QtNC+0Lw= 41698\nQVJPTg== 41699\nXSws 41700\nIGx1bWnDqHJl 41701\nIG9sdmlk 41702\nIGZyZXVl 41703\nIFRpbmc= 41704\nIEvDtg== 41705\nIGdlbw== 41706\nIGR5ZWQ= 41707\n0YjQtdC5 41708\nIMW8eWNpZQ== 41709\nIGll 41710\nIHRheHBheWVy 41711\nIHBlxYI= 41712\nIGTDqWNpZMOp 41713\nIGPFk3Vy 41714\nIGVudHdpY2tlbHQ= 41715\nIEhR 41716\nS0s= 41717\nb2Rhcg== 41718\nIGhvbmU= 41719\nIGNvbmZpYW5jZQ== 41720\nIGlzc3Vpbmc= 41721\nIGRpYWdub3N0 41722\nIOyehA== 41723\nINC60YDRg9GC 41724\nINC60LDRgQ== 41725\nIMO+ 41726\nIHJlc3RyaWN0aXZl 41727\nIENhc3Rybw== 41728\nIHXEnw== 41729\nIGVtcHJl 41730\nIE1vbw== 41731\nIEZpZ3VyZQ== 41732\ncGhvbmV0aWM= 41733\nUHJvZg== 41734\nINC/0YDQtQ== 41735\nIHRpbHRlZA== 41736\nIE5lZ2F0aXZl 41737\nIExpbWl0ZWQ= 41738\nbWVubw== 41739\nbGFtYXRpb24= 41740\nIHRydXN0ZWVz 41741\nIGludGVuc2VseQ== 41742\nIGHDp8SxbA== 41743\nIFVzZWQ= 41744\nIHp1bA== 41745\nIGFwcHJlY2lhdGl2ZQ== 41746\nIHRpbmM= 41747\nIGNvbnF1ZXN0 41748\nINi52YbYrw== 41749\nIHN1aWNpZGFs 41750\nIG11bGhlcmVz 41751\nIGRldGFjaA== 41752\nIGthbWVyYQ== 41753\nIEFpclBvZHM= 41754\nSU5ESVNUSU5DVA== 41755\n0LPQu9C40Lk= 41756\nIOuDhA== 41757\nIHdyZXN0bGU= 41758\nIGZpcmVhcm0= 41759\nIGxpcmU= 41760\ncHJh 41761\nIGpld2Vscw== 41762\nIENvcm5lbGw= 41763\nIO2VoOqyjOyalA== 41764\nIHN1Y2tlcg== 41765\nIG5vbWJyZXV4 41766\nIEZlcm0= 41767\n7JuQ7J20 41768\nIFBpcw== 41769\nINC40LfRg9GH 41770\nIG1pdGVu 41771\nIGNldg== 41772\nIFVSTHM= 41773\nIENBUw== 41774\nZmluZGVu 41775\nIGJyYXZlcnk= 41776\nINGB0LvQvtCy0L4= 41777\nIG5lbmh1bWE= 41778\nIGVuY3VlbnRyYQ== 41779\nIFNoaXJsZXk= 41780\nIHBlcmNlcHQ= 41781\nZnJhbWVz 41782\nIFJvdmVy 41783\nIEFsYmVydGE= 41784\nb2Nj 41785\nIOudvOqzoA== 41786\nIHPDunBlcg== 41787\nIHByZXN1bWU= 41788\nIGdsYW5k 41789\nIHBhY2luZw== 41790\nIG5ldXJvdA== 41791\nIHNubw== 41792\nIHBsb3R0ZWQ= 41793\nIHBhxYRzdHdh 41794\nIE93bmVy 41795\nIERlZmVuY2U= 41796\ncmlkZ2Vz 41797\nIHdhbGxwYXBlcg== 41798\nb25pYW4= 41799\nQnJv 41800\nIEFyaWFuYQ== 41801\na3J5 41802\nIG5hcnJhdGlvbg== 41803\nIGNyaWFuw6dh 41804\nIEFscmlnaHR5 41805\nIOydvQ== 41806\nIOyTsOqzoA== 41807\nIGxpYmVyYXRlZA== 41808\nIGV4Y2VlZHM= 41809\nIGRvbWluYXRpbmc= 41810\nIGJha8Sxbg== 41811\nbGs= 41812\nIHNsYXBwZWQ= 41813\n0JfQtA== 41814\ndW1lbnRhbA== 41815\nZ2V0dGFibGU= 41816\nIFJveg== 41817\nIEd1bA== 41818\nb3V2ZXJ0 41819\nIHNtYXNoaW5n 41820\nYXp1amU= 41821\nU2ly 41822\nIGdyYXRlZA== 41823\nQVRU 41824\nIGFydGljdWxhdGVk 41825\nIHN0b3Jh 41826\nIGV4dHJhdGVy 41827\n4buJ 41828\nz4PPiQ== 41829\nd2ly 41830\nIE1ldGU= 41831\nSW1w 41832\nIGhvb3I= 41833\ncGhhc2U= 41834\nINGH0YPQtA== 41835\nINCx0YDQsNGC 41836\nIGlkYWc= 41837\nIGNpbnE= 41838\nIGFwYXJlY2Vy 41839\nIElDRQ== 41840\nIHF1aWV0ZXI= 41841\nIGZhbHNjaA== 41842\nYWRpYw== 41843\nINC/0LvRjtGB 41844\nIE1lbnU= 41845\ndXhl 41846\nIFTDtGk= 41847\nIE1JTA== 41848\nIEhhag== 41849\ndmVyYnM= 41850\nIHR1YmluZw== 41851\nIG1hY2hzdA== 41852\nIGRhbGw= 41853\nVGVy 41854\nIGdlbGVu 41855\nIGN1Y3VtYmVycw== 41856\nIHdpZGdldHM= 41857\nIGRldnJhaXQ= 41858\nIG1pa2U= 41859\nIGludHJh 41860\n7ZWt 41861\nIMOF 41862\nIEh1bmQ= 41863\ncXVhcnRlcg== 41864\nIGV3 41865\nIGtlbHVhcg== 41866\nIG1hdHM= 41867\nIFRyaWNr 41868\nIEluZmluaXRl 41869\nnqg= 41870\nIHBlYWM= 41871\nIFByb3Rl 41872\n4KWI 41873\nIDE3MDA= 41874\nIFJhaXM= 41875\n4LmK 41876\nw6RobHQ= 41877\naWZpY2E= 41878\nYWltZXI= 41879\nYcSH 41880\nIGFrbA== 41881\nIFZvbHZv 41882\nIFR5c29u 41883\nIFJvbmc= 41884\naXJzaW4= 41885\nIOKZpQ== 41886\nIHBhcm9keQ== 41887\nbmF0aW9uYWw= 41888\ncG9k 41889\nYXlk 41890\nYW1ibGVk 41891\nIGdvdmVybm1lbnRhbA== 41892\nIGNvbmZvcnQ= 41893\naWNpZGVz 41894\nIG5hc3pl 41895\nIFNoZXBoZXJk 41896\nIEtvbnRha3Q= 41897\nIGRpc3Byb3BvcnRpb25hdGVseQ== 41898\nINC60LvRjtGH 41899\nIHTDrXR1bG8= 41900\nIHNpbmE= 41901\nIGNvbXBvc2l0aW9ucw== 41902\nIFBG 41903\nIHZlcmts 41904\nIHN1aXZyZQ== 41905\nIGFzdGE= 41906\nIHN0YWtlaG9sZGVy 41907\nIHNhbW1h 41908\nIEJMQUNL 41909\nIG5vZGln 41910\nIGxldmE= 41911\nIGp1ZWdvcw== 41912\nIGVybnN0 41913\nIGJvdHRvbXM= 41914\nIFNpZ25hbA== 41915\nIHBvbGx1dA== 41916\nIGR1cmE= 41917\nTXVzaWs= 41918\nINC60L7QvNC90LA= 41919\nINCy0YHQtdC5 41920\nYWx0ZXI= 41921\nIFN0ZWY= 41922\nIEJpZ1F1ZXJ5 41923\nIFZlcmFudHdvcnR1bmc= 41924\nIOuLueyXsA== 41925\nIHF1aXp6 41926\nIExldHRlcg== 41927\nIEludmVzdG1lbnQ= 41928\n0YjRgg== 41929\nkOuNsA== 41930\nIGVuY29kaW5n 41931\nIHTDpG5rZXI= 41932\nIEt3 41933\nYW5uaWU= 41934\nMTEw 41935\nIHp3eQ== 41936\nIOynpw== 41937\nIGRhdw== 41938\nZXN0w6Q= 41939\nIGRlY2VpdmU= 41940\nIEzDpG5kZXI= 41941\naXNrbw== 41942\nIHBvZHN0YXc= 41943\nIFBoYXJhb2g= 41944\n7LOk 41945\nw7psdA== 41946\nIHR5w7Y= 41947\nIG11c2lteQ== 41948\nIHBj 41949\nIE5U 41950\nIENvc3Rjbw== 41951\nIM+Dzr/PhQ== 41952\nIHVuaW4= 41953\ncm91bmRz 41954\nIHJlbWluZGVycw== 41955\nIHB1aXNxdQ== 41956\nIGtyaWpnZW4= 41957\nIHdvcmtmbG93cw== 41958\nbmV0ZW4= 41959\nIOuQmOyngA== 41960\nIHNsZWVr 41961\nIGNvd29ya2Vycw== 41962\nYW1pZW50b3M= 41963\nIHdpdGNoZXM= 41964\nYmFhcg== 41965\nZXRpZXM= 41966\nIHVubmF0dXJhbA== 41967\nIFNpY2s= 41968\nIEVmZW5kaQ== 41969\namNpZQ== 41970\nIGNoYW1hZG8= 41971\n7JiA7Iq164uI64uk 41972\nIHByemVkc2nEmWJpb3I= 41973\nIGJvb2tzdG9yZQ== 41974\nIOyeoOq5kA== 41975\nIFNlcGFy 41976\nYW5naQ== 41977\nRXZldA== 41978\nIGVtZXJnZW5jaWVz 41979\nIFhNTA== 41980\n0L3QtA== 41981\npbTrqbQ= 41982\nIOq/iA== 41983\nIOuTpOqzoA== 41984\nIHN1dA== 41985\nIFdpeg== 41986\nIGR5bmFtaWNhbGx5 41987\nb3BlcmF0aW9u 41988\nZG90 41989\nIGluZWZmaWNpZW50 41990\nY2xlYXJz 41991\nIG11bmRhbmU= 41992\nIFZlcm9uaWNh 41993\n2LHYqg== 41994\ncG9zZQ== 41995\ncGFp 41996\nIG55bG9u 41997\nIGF1bWVudGFy 41998\nIGFsbHRzw6U= 41999\ndmFr 42000\nIGNhcGFjaWRhZA== 42001\nIFdyZXN0bGluZw== 42002\nIGZlcnRpbGU= 42003\nIG3DqWc= 42004\nIE5hbm8= 42005\n0LDRgtC10LvQuA== 42006\nIOyWtOyp 42007\nIHRvY2E= 42008\nIEVn 42009\n4oE= 42010\nIOyz 42011\nbHVlbnQ= 42012\nIHNvbGVt 42013\nIGNpbmVtYXQ= 42014\nIFF1ZWw= 42015\nIG9yYml0cw== 42016\nIEhhcm0= 42017\ncmljYW5lcw== 42018\nIGJsdXJyZWQ= 42019\nINin2YTYsNmK 42020\nIGppbg== 42021\nIGdyZW5hZGVz 42022\nIGF0cm9j 42023\nIHdoZXJlaW4= 42024\nIHJlcGxlbg== 42025\nIENvbWljcw== 42026\nZWRhYW4= 42027\nIGRlbmlt 42028\nIGVtYmFycmFzc21lbnQ= 42029\nIEdvbWV6 42030\nIEJ1c2Fu 42031\naXZpdGllcw== 42032\nIHNhbGl2YQ== 42033\nIG1lcms= 42034\nIGlsZ2lsaQ== 42035\nINC60YDRg9Cz 42036\nIG9jY3VwYXRpb25hbA== 42037\nIFNhaGli 42038\nU3Rh 42039\nIGFkdmlzZXI= 42040\nIFRydWx5 42041\nIFlFQUg= 42042\nIOyeiOuKlOuNsOyalA== 42043\nemV3 42044\nYmFyZW4= 42045\nIHN0b2w= 42046\nIGJlbG9uZ2luZ3M= 42047\nIFJlc2VhcmNoZXJz 42048\nIGVmZW5kaW0= 42049\nz4XPhw== 42050\nxYLEhWN6 42051\nIFVuZw== 42052\nIEp1Yg== 42053\nIGNlcmVicmFs 42054\n4buHdQ== 42055\nINem16g= 42056\nINC/0L7QtNCw0YA= 42057\nIG1hcmNoZWQ= 42058\nIGF3YWtlbg== 42059\nIGFrbw== 42060\nIGFjZXB0 42061\nIGluaXRpYXRpb24= 42062\nbG90 42063\nIHfFgmFz 42064\nIE1vbmdvbA== 42065\ndXRyYWw= 42066\nIHRlbnRhbmc= 42067\nIGludmVyc2lvbg== 42068\nIOydtO2bhA== 42069\nIGxvaw== 42070\nxYJieW0= 42071\nUlM= 42072\nIHN0b3M= 42073\nIGludGVyYWN0cw== 42074\nIENhbGVuZGFy 42075\nIHZhbmlzaA== 42076\nIHBoeXNpb2xvZ3k= 42077\nIGxpbmVhcmx5 42078\nIEpZ 42079\nxJ9hbg== 42080\nZnVuZGVk 42081\naXppZXJ0 42082\nIHptaWFu 42083\nIEdyaWxs 42084\nIHVuYmVsaWV2YWJseQ== 42085\nb3RlY2hub2xvZ3k= 42086\nIENhcnM= 42087\nINmG24E= 42088\nIEZvbGdl 42089\nIEJldmVybHk= 42090\nw6Rpc2NoZW4= 42091\nIGF1bWVudG8= 42092\n7JuM7ISc 42093\nIG1haWxib3g= 42094\nIHN0ZWVkcw== 42095\nIFBlYWs= 42096\nIHd5a29y 42097\nIHByYXdkYQ== 42098\n0LjRgtGL 42099\nIGRpc2NvdXJz 42100\nIGFjY3VzZQ== 42101\nY2Vzc28= 42102\ndWlyZQ== 42103\nINC/0L7Qv9Cw0LQ= 42104\nIHRoYQ== 42105\nIG1lYXN1cmFibGU= 42106\nYmVlcGluZw== 42107\nIElubmVu 42108\nINC/0Y/RgtGM 42109\nIGNvbXBldGVk 42110\nIEl0YWxpYW5z 42111\nIGVuY29udHJh 42112\nIG5pZXc= 42113\nIGZpbHRyYXRpb24= 42114\nINC/0YDQvtGE0LXRgdGB 42115\nIHBhamFtYXM= 42116\nIGNpbGFudHJv 42117\nIFNvYw== 42118\nTHVj 42119\nIOq5gOs= 42120\nIE9kZA== 42121\nIGh5ZHJhdGlvbg== 42122\n0LzQvtCy 42123\nIHBseXdvb2Q= 42124\nIENvbXBldGl0aW9u 42125\n0LjQt9C90LXRgQ== 42126\nZmxpZ2h0 42127\nIEJlaXQ= 42128\nYm91cmc= 42129\nIGNvaWxz 42130\nIGPDom1lcmE= 42131\nIGFtZW5kZWQ= 42132\nxIFt 42133\nQW5nZWw= 42134\nIFN0YWN5 42135\nZmxv 42136\nIG5vcm1hbGU= 42137\nIGNvbnNvbmFudA== 42138\nIGFjY29tcGFueWluZw== 42139\n0LrRlg== 42140\nIGlycml0YXRlZA== 42141\nIGbDpXR0 42142\nIGNyb2NvZGlsZQ== 42143\nkJjripQ= 42144\nIGFsYmVpdA== 42145\nIFBoaWxvc29waHk= 42146\nxYY= 42147\neXRpYw== 42148\nIHLDqGc= 42149\nIGZyYW7Dp2E= 42150\nIGF0dGVudGl2ZQ== 42151\nSGFt 42152\nIGFscmVkZWRvcg== 42153\nc2Vp 42154\nINGB0LLQuNC0 42155\nIGdpbWJhbA== 42156\nIGNoaW5h 42157\nIPCfjrY= 42158\nINCS0LDQvA== 42159\nIHN0aW11bGF0aW5n 42160\nIE9yYQ== 42161\neXRlcw== 42162\nIGhlZnQ= 42163\nIGhhdGVycw== 42164\nIGNvbXBsZXhlcw== 42165\nIDAz 42166\ncsOzZA== 42167\nY2xlYXI= 42168\nIGJlc3RlaHQ= 42169\nd255 42170\nbW9pbA== 42171\nIHNsb3BweQ== 42172\nIGluc2lnbmlmaWNhbnQ= 42173\nIGR1YmJlZA== 42174\nIOuWoA== 42175\nIGNvbnNpZ28= 42176\n0LvRg9GI0LDQuQ== 42177\nU24= 42178\nINeU16Y= 42179\nIM6M 42180\nIG5hZHppZQ== 42181\nIGZyZXNobWVu 42182\ndGFh 42183\nIHV3YWfEmQ== 42184\nIEZhdm9yaXRl 42185\nIENyaW1pbmFs 42186\nIGV2aWRlbg== 42187\nIHN5bWI= 42188\nTGVz 42189\nIEJlYXU= 42190\ndW5lZA== 42191\ncGxlbWVudA== 42192\nQWM= 42193\nIGRlcm1hdA== 42194\nIE5vbGFu 42195\n0YvQvw== 42196\nIHNpdHQ= 42197\nIGV2ZXJsYXN0aW5n 42198\nIGVzdGF2YW0= 42199\nINC80LjQug== 42200\nIGtow6Fj 42201\nIGludml0 42202\nIHRyZWJsZQ== 42203\nIGppZw== 42204\nbWFuaQ== 42205\nIHR1dm8= 42206\nIFJVUw== 42207\nIEVyZGU= 42208\nIER6acSZa3VqxJk= 42209\nIGJsdWViZXJyaWVz 42210\na2VsbA== 42211\nYWNpb25z 42212\n0LLQuA== 42213\nTEVU 42214\nIHNwcm91dA== 42215\nIHNwb3I= 42216\nIGLDqm4= 42217\nIE1vbmE= 42218\nIENvbnRhaW4= 42219\nIEtleXM= 42220\n0L7Qt9GP 42221\nIGZ1bmNpw7Nu 42222\nIHJhcHBlbGxl 42223\nIGV2b2x2ZXM= 42224\nIHNjcmFwaW5n 42225\nIGNvbWVudMOhcmlvcw== 42226\nIHByYXRpcXVl 42227\nIGF1eGlsaWFyeQ== 42228\nIFNwb25nZQ== 42229\n0YHQutC40Lw= 42230\ndXZv 42231\nINGB0LDQvNC+ 42232\nIHNhbms= 42233\nIGhpZ2h3YXlz 42234\nIGludmVudGlvbnM= 42235\nINC40L3QvtCz0LTQsA== 42236\nIGNyZWF0aXZlbHk= 42237\nIGJlbmNobWFya3M= 42238\nb25jw6k= 42239\nYWxhbA== 42240\nIHNvdHRv 42241\nIGNhbHZlcw== 42242\nIE1vdg== 42243\nIGxhdmVuZGVy 42244\nIGV5ZWJhbGxz 42245\nIGF3YWl0aW5n 42246\nIFBhdHk= 42247\n2YTZhw== 42248\nIGVtYnJvaWRlcnk= 42249\nIGR1aA== 42250\nIGNhbWFy 42251\nIEJPQg== 42252\nIHNwYWNlZA== 42253\nIGfFgm9z 42254\n0LDQtdC80YHRjw== 42255\nIGVzY2FwZXM= 42256\nIFJvZ3Vl 42257\nemN6 42258\n6J4= 42259\nrOulvA== 42260\nIE1vxbxl 42261\nINC10YHRgtC1 42262\nIEJ1cmFkYQ== 42263\nd2Q= 42264\ndXV1dQ== 42265\nIHNhc2g= 42266\nIEx1Yg== 42267\nIG5vdGVib29rcw== 42268\nIG1hZQ== 42269\nIGNvbmZsaWN0aW5n 42270\nIHN1bW1lcnRpbWU= 42271\nYWNhcw== 42272\nIGJhdWVu 42273\nYmxvd2luZw== 42274\n4bqhbw== 42275\nIOyWuOygnA== 42276\nIFNlbmhvcg== 42277\nIGlQaG9uZXM= 42278\nIFF1YXJ0ZXI= 42279\nIOygnOuMgOuhnA== 42280\ndcOf 42281\nIOuniOustOs= 42282\nIHNldHRsZXJz 42283\nIGNyZXN0 42284\nIHRyYW5zYw== 42285\nIHJpb3Rz 42286\nIGNsb25lcw== 42287\nIE9wcmFo 42288\nzq/Otg== 42289\nIHBhbHM= 42290\nLi4uLi4uLg== 42291\nINGA0L7RgdGB 42292\nIExhc2Vy 42293\nIHphY3p5 42294\nIHNldmk= 42295\nIHJlZ2VuZXJhdGlvbg== 42296\n7Je8 42297\nd291bGQ= 42298\nIMO8emVyaW5l 42299\nIFN0cmHDn2U= 42300\nIHZlbmdlYW5jZQ== 42301\nIHJlcg== 42302\nIFNhZmFyaQ== 42303\nIEhFWQ== 42304\nIHNhY2Fy 42305\nIGltYWdlbQ== 42306\nIEJ1bmRlc3Q= 42307\nbWVzYW4= 42308\nIFBhc3Rl 42309\nIHNpeno= 42310\nINC/0L7RgdGC0YPQvw== 42311\n15TXlQ== 42312\ndHJhZA== 42313\nIGZyYW7Dp2Fpc2U= 42314\nIEJvdQ== 42315\nIGJhcnJl 42316\nIFpoaQ== 42317\nIEdlZXo= 42318\naWhhZA== 42319\nIHJlY29ub2M= 42320\nIHBlbGln 42321\nIGluZGljZXM= 42322\nIOuwlOuA 42323\nIGNvbmR1Y3Rpb24= 42324\nIOyVhQ== 42325\nIHpla2Vy 42326\nIGZ1bQ== 42327\nIFfDvHI= 42328\nYnJlYWtlcg== 42329\nIHNwcml0ZQ== 42330\nQ3Jvd2Q= 42331\nIG9wZW5lcg== 42332\nIG9sdg== 42333\nIGJ1ZW5hcw== 42334\nIFNpbGs= 42335\nIEhJTQ== 42336\na29w 42337\nY29tcGw= 42338\nIHBvc3Nvbm8= 42339\ns4A= 42340\nIG9zY2lsbGF0b3I= 42341\nIFNpdGg= 42342\n0LDQttC4 42343\nIHJhZnQ= 42344\naGFsbA== 42345\nIHNjaG5lbGxlcg== 42346\nIGltcG9ydGluZw== 42347\nIGFzc2VtYmxpbmc= 42348\nIHViaXF1 42349\nIGFjdGl2YXRlcw== 42350\nYWNjaQ== 42351\nk5zrpbw= 42352\nIGNvbXBvc2Vycw== 42353\nIEFDTA== 42354\nQ29uZg== 42355\nIOy9mA== 42356\nINC90LXQutC+0YLQvtGA0YvQtQ== 42357\nIGNhbmRpZXM= 42358\nIE11c3M= 42359\n4LmD4LiK 42360\nIGR1ZGE= 42361\n0L3QuNC60L7QvA== 42362\nbWVkZW4= 42363\nIOyWtOuVjA== 42364\nIFllc2h1YQ== 42365\nemFn 42366\naG9kb3U= 42367\nIGFsb3Vk 42368\nIFBhbG1lcg== 42369\naW1pemU= 42370\nIG1hcml0aW1l 42371\nIGNvbW11bmFs 42372\nIGJhZGdlcw== 42373\nIHJ1Z2J5 42374\nIG1hcnNobWFsbG93 42375\nIGZpZXJ5 42376\nIGFjY291bnRhbnQ= 42377\nIGFibGE= 42378\nIE1vbnJvZQ== 42379\nIEZvbnQ= 42380\nIEJvb3N0 42381\nIEJhcm5lcw== 42382\nYW5zd2Vy 42383\nIEJ1cm5pbmc= 42384\nIGFuZ2Vm 42385\nIFdlc2xleQ== 42386\nbGxz 42387\n7LU= 42388\n16nXnA== 42389\naWxpxZtteQ== 42390\n15DXnw== 42391\nYW11cmE= 42392\nIEZ1ag== 42393\nIHBhbmk= 42394\nIFRyb3A= 42395\nYXJiZWl0ZW4= 42396\nIHJ1ZQ== 42397\nIFJhcmU= 42398\nw6RuZ2Vu 42399\nINGB0LzQvtGC0YDQtdGC0Yw= 42400\nINCa0LDRgA== 42401\nIE1UVg== 42402\nYm9hcmRpbmc= 42403\nXVs= 42404\nIOugiOs= 42405\nc3RhbmJ1bA== 42406\ncGllbHQ= 42407\nIEhhcmR5 42408\nIEVuZ2FnZW1lbnQ= 42409\nIERpZW5zdA== 42410\nIHfDpHJlbg== 42411\nIGZ1ZWdv 42412\nIGVzdHJ1Y3Q= 42413\nIGNhbGFt 42414\nIFJlc3BvbnNl 42415\nIE1vaGFtbWFk 42416\nIHJlc2lzdGluZw== 42417\nIGR1cmFudA== 42418\nIE9MRUQ= 42419\nIHZlcno= 42420\nbcOkbg== 42421\nINmG25I= 42422\nIHBhcmFub2lk 42423\nIEF3YXJl 42424\nIEVuZ2luZWVycw== 42425\nIHByb2NlZHVyYWw= 42426\nIHBlcnNvbm5hZ2U= 42427\nIGZhcmtsxLE= 42428\nZmxvd2luZw== 42429\nINC80LXRgdGC0LA= 42430\nIEJhcmU= 42431\naXN0ZW0= 42432\nIHBvY3rEhXRrdQ== 42433\nIHBlcnNvbmFqZXM= 42434\nIOyWtOugtQ== 42435\nrYk= 42436\nINCl0L7RgtGP 42437\nIHVuc2V0dA== 42438\nIEFic29s 42439\nIOG6pXk= 42440\nIE1BWU9S 42441\n0L/QvtC70L3QtQ== 42442\nIGluZm9ybWluZw== 42443\nIGFtcHM= 42444\n0J/RgA== 42445\nIOutlA== 42446\nYWVkYQ== 42447\nINeU15HX 42448\n4bqlbg== 42449\na2VsaWpr 42450\nIGF0aGVpc3Q= 42451\nIHRyb3V0 42452\nIG5ldWVz 42453\nIE5va2lh 42454\nbWFjaGVu 42455\nIHdob2xlc2FsZQ== 42456\nxLFyZA== 42457\nSW5z 42458\nINGN0L8= 42459\nIHByaWNr 42460\nIEtpbmRlcm4= 42461\n4LiX4Liz 42462\nIGNsYXNzeQ== 42463\nIMOubnQ= 42464\nIFNob3BpZnk= 42465\nINGB0L7RgA== 42466\nINC30LDQutGA0Ys= 42467\nenVr 42468\nIHVuaXZlcnNhbGx5 42469\nIHRlYXNwb29ucw== 42470\nIHJlY291bnQ= 42471\nIG7DpWdvbnRpbmc= 42472\nIFh1ZQ== 42473\naXNpw6htZQ== 42474\nIHdlYWtlc3Q= 42475\nIHRlxZ9la2vDvHI= 42476\nIG1hdGhlbWF0aWNhbGx5 42477\nIEhvcw== 42478\nIO2VnOuLpA== 42479\nIHBhcnRhZ2Vy 42480\nIERhcnI= 42481\n6ro= 42482\nIM61zro= 42483\nIGdlcm1z 42484\nIGdlbGly 42485\nIGR1bA== 42486\nLC0= 42487\nIOyWuOs= 42488\nINee16Y= 42489\nINGP0YA= 42490\nIHF1b3RpZA== 42491\nIHByenlzeg== 42492\nIGhhcmRuZXNz 42493\nIGFxdWF0aWM= 42494\nIEp1bmdsZQ== 42495\nIFBDUg== 42496\nIEVsaW90 42497\nIG9zdHI= 42498\nIG1hcGE= 42499\nZXNzw6Q= 42500\nIEdJUg== 42501\nIERyaXZpbmc= 42502\nIFNhbWk= 42503\nIE1lZGllbg== 42504\nIENvbXBhbmllcw== 42505\nIFBoYXJt 42506\nc2VpdHM= 42507\nIFJpbQ== 42508\nIM6/z4DOvw== 42509\nIHdlaXRlcmVu 42510\nIHBpenphcw== 42511\nIEx5ZGlh 42512\nIEhlaWdodHM= 42513\nIHNpbmNlcml0eQ== 42514\nIG5vc3Nhcw== 42515\nIGTFgg== 42516\nIGFsYXJtaW5n 42517\nIENhdWM= 42518\nINGB0LzRi9GB 42519\nZmFjaW5n 42520\nYmFncw== 42521\nV1c= 42522\nINi02Yo= 42523\nIGNvdXJ0cm9vbQ== 42524\nIFBoaWxsaXA= 42525\nIOqyg+yymOufvA== 42526\nIFNwaWVsZXI= 42527\nIGthbnQ= 42528\nIGFkbWl0dGluZw== 42529\nIGNvbnRhaW5tZW50 42530\nIHJlbW92YWJsZQ== 42531\nIGp1bXBlcg== 42532\nZm9jdXNlZA== 42533\nINC40YLQvtCz0LU= 42534\nINCi0LXQvA== 42535\nIHZhc2U= 42536\nIFVTQw== 42537\nIE1vbmF0ZQ== 42538\nIEphY29icw== 42539\nIEhPTA== 42540\naWtlZA== 42541\nZXJ3ZWlzZQ== 42542\nIGdvb2RpZXM= 42543\nIGhvbWFnZQ== 42544\n15vXqdeZ15U= 42545\nIHF1YWlz 42546\nIGluaWNpYWw= 42547\nIGd1YXJkaW5n 42548\nIGRheno= 42549\nIGNvbWJvcw== 42550\nINGD0L/RgNCw0LI= 42551\nIFRhbGVudA== 42552\nIMOzcg== 42553\nIGludGVybWl0dGVudA== 42554\nIE1jQ2FydGh5 42555\nIHNwYW5z 42556\nIHR5cmU= 42557\nIHF1eQ== 42558\nanV0 42559\nIFplbnQ= 42560\nIGdhdA== 42561\nIHNjYWZmb2xk 42562\nIG5lY2VzYXJpbw== 42563\nIFphaGxlbg== 42564\nIFNBTkQ= 42565\nIFBV 42566\nRXZlcnl0aGluZw== 42567\nLS0tLS0tLS0tLS0tLS0tLQ== 42568\nINCy0LfRj9GC0Yw= 42569\nIHNwYXJrcw== 42570\nIHBlbmR1bHVt 42571\n157Xnw== 42572\nIOyDieq5 42573\nIG11bHRpcGxpZXI= 42574\nINC70LDQtNC90L4= 42575\ndXJhdA== 42576\nIHVwc2V0dGluZw== 42577\nYmFr 42578\nIOy1nOuMgA== 42579\nIGFuw6Fs 42580\nIEpPRQ== 42581\nIGtvc3Rlbg== 42582\nIFBhdHR5 42583\nIEd1aW4= 42584\nY2tlZA== 42585\nIEVneXB0aWFucw== 42586\nIENpdGl6ZW5z 42587\n16jXmw== 42588\nINCV0YnQtQ== 42589\nINC50L7Qs9C+ 42590\nIHNub3dmbA== 42591\nIGxla2tlcg== 42592\nIGFjb3N0 42593\nIEJhYmU= 42594\nIGdhbWJsZQ== 42595\nIGFkamVjdGl2ZQ== 42596\n0LrQuNC80Lg= 42597\nb3lz 42598\nIG1vbnRyZQ== 42599\nIEh5dW5kYWk= 42600\nIG1vaXN0dXJpemluZw== 42601\nIG1venphcmVsbGE= 42602\nT09P 42603\nIGZhY3VsdA== 42604\nIGRvZXQ= 42605\nIGZlYXJsZXNz 42606\nIGVzcHJlc3Nv 42607\nIGFsbG9yYQ== 42608\nIENpbmM= 42609\nIGNvbnRlw7pkbw== 42610\nIFBlbG9zaQ== 42611\nIG1pbmRlcg== 42612\ncm9vdA== 42613\nIO2VoOs= 42614\nINC/0LDQtA== 42615\nIENhbGxpbmc= 42616\nIENvbmZpZw== 42617\nIENvbnNvbGU= 42618\naW5za3k= 42619\nw6luZXJnaWU= 42620\nIHNvbGl0YXJ5 42621\n0L7QtNC1 42622\nIGd1YXJkZWQ= 42623\nMTYw 42624\nINC/0YHQuNGF 42625\nIFNoYXA= 42626\nIHRpdHJl 42627\nb2xvZ25l 42628\nINC/0LDRgNGD 42629\nIFBSRQ== 42630\nIGxu 42631\nIE1pdGds 42632\nIENhcnJ5 42633\nIHNwaW5k 42634\nIENhbnRvbg== 42635\nIGtpbmdkb21z 42636\ncmVtbw== 42637\nIHJhZ2luZw== 42638\nIGluY2FwYWJsZQ== 42639\nIFdS 42640\nINGB0L7QsdGB0YLQstC10L0= 42641\nINC60LDQutC40YU= 42642\nIFNIRQ== 42643\n64u57Z6I 42644\nIHNjYXJjaXR5 42645\nIHBlcmRl 42646\nIGV4aXRz 42647\nIFNpbmdlcg== 42648\nIHN1cHBlcg== 42649\nIG11bmljaXBhbGl0eQ== 42650\nIERpdmVyc2l0eQ== 42651\nIHRpcm8= 42652\naWVscw== 42653\nIGzDrWRlcg== 42654\nIGJsdWZm 42655\nIGF0cmE= 42656\nbHlz 42657\nIG1haGQ= 42658\nIGPDs2RpZ28= 42659\nIEhhcmxlbQ== 42660\ncnVsZQ== 42661\naWNpdHk= 42662\nIHNpbXBsaXN0aWM= 42663\nIEtvbnN0 42664\nRUxMSQ== 42665\nIGbDtnJzdGE= 42666\nIGNvbnN0aXR1dGVz 42667\nINGB0YLQvtGA0L7QvdGD 42668\nIHVyZ2Vk 42669\nIFBhbmRh 42670\n7LCo6w== 42671\ncmVjZQ== 42672\nIHBhdHJpb3Q= 42673\nIENydXNo 42674\nIHdpbms= 42675\n0L7QudGC0Lg= 42676\ndXJhbsOnYQ== 42677\nIHNlaXp1cmVz 42678\nIGVsZWN0cm9k 42679\nIERvbmtleQ== 42680\nIElV 42681\nIE1PUw== 42682\nIGFsa2Fs 42683\n7LSJ 42684\nYmVzb25kZXJl 42685\nIHBhcmFsbGVscw== 42686\nIGJpdHRlcm5lc3M= 42687\nw6R0dHJl 42688\nZXNzaW9uYWw= 42689\nIHNveWJlYW4= 42690\nIGNvbGxhYg== 42691\nIFJlcG9ydGluZw== 42692\nINC60L7QvNC/0LDQvdC40Lg= 42693\nIHdzenlzY3k= 42694\nIENydW5jaA== 42695\naXNlZW4= 42696\nIGFtYmFzc2Fkb3Jz 42697\nIENoZXY= 42698\n0L7QstGL0LU= 42699\nc2Nh 42700\nINGA0LXRiNC40Ls= 42701\n0L7RgtC+ 42702\nIGdsZWljaHplaXRpZw== 42703\nbWVybg== 42704\nw7xzdA== 42705\nIEhhZQ== 42706\ns7TqsqDsirXri4jri6Q= 42707\nIHNob3Jlcw== 42708\nIGRlcHJlc3M= 42709\nIGFob3I= 42710\nIFN0ZXVlcg== 42711\nYWho 42712\nIHJldmlzZQ== 42713\nINGB0LDQvNGL0LU= 42714\namF0 42715\nIGhlcmJhbA== 42716\nIGN1w6FudA== 42717\nIGJ1bmE= 42718\nbmllanN6ZQ== 42719\nRmluYWxseQ== 42720\n15XXlg== 42721\nY2pl 42722\nIOyeiOqxsOuToOyalA== 42723\nIOuCmOuI 42724\nIHByemVzdA== 42725\nbGljYQ== 42726\nIER1Y2g= 42727\n0ZbQudGB0Yw= 42728\ncGFzc2Vu 42729\nIHNhdGlzZmllcw== 42730\nIEFkZGl0aW9uYWw= 42731\nIGPDoW1hcmE= 42732\n0LXRh9C10L3QuNC1 42733\nIHBvbXA= 42734\nIOunkOydtA== 42735\nIE1pbGxz 42736\n0LXQstC40LQ= 42737\nIHJlc3BlY3RhYmxl 42738\nIGZpbGFtZW50 42739\nIHZlbmRlcg== 42740\nIG1hdHRlcmVk 42741\nb3VyZQ== 42742\n7Li1 42743\nS29yZWFu 42744\nIGVzdHVkaW8= 42745\nIGNhY3R1cw== 42746\nIFZpdmU= 42747\nIFJhZw== 42748\nIGNvbXBsaXF1w6k= 42749\nINmI24E= 42750\nIHRhbw== 42751\npr8= 42752\nU2luY2U= 42753\nIGplb3BhcmQ= 42754\nIFNlbGw= 42755\nIOyYmw== 42756\nIGtldG8= 42757\nIGludGVsaWc= 42758\nIEFuZ2Vi 42759\nIHRpZGVu 42760\nIHNvY2lv 42761\nIHJlbWluaXNjZW50 42762\nIGNhcmVnaXZlcg== 42763\nU3BhY2U= 42764\nIEV4ZXJjaXNl 42765\nIEJlY29tZQ== 42766\nw6p0cw== 42767\nYWtr 42768\nIS4u 42769\nINGB0L/RgNC+0YE= 42770\nIM6xz4DOvw== 42771\nIHNob290aW5ncw== 42772\nIGFwZQ== 42773\nIFNhbW15 42774\nIEt1bmc= 42775\nIGN1w6Fs 42776\nIEx1cA== 42777\nINGB0YLRg9C0 42778\nIHN3ZWV0ZXI= 42779\nIGNvbXVt 42780\nIEFkcw== 42781\naHl1bmc= 42782\nINCx0YPQtNGD0Yk= 42783\nIHdhZmZsZQ== 42784\nIE9yYg== 42785\nIGxhdXQ= 42786\nIGZvcmVjYXN0aW5n 42787\n5ao= 42788\nIHJhcHBpbmc= 42789\nIHByZWZlcnM= 42790\nIGJlbno= 42791\nIG5paw== 42792\nIEJhaG4= 42793\nIHNhbmRpbmc= 42794\nIGltbWluZW50 42795\nINC/0YDQvtCx0LvQtdC80Ys= 42796\nIGRvaXZlbnQ= 42797\n0L7Qu9Cw 42798\nIMW8eWNpYQ== 42799\naWh1 42800\nIGV4aXN0ZW0= 42801\nIEludGVyaW9y 42802\nIFRha2Vz 42803\nIHRvZGRsZXI= 42804\nIGRpY3RhdG9yc2hpcA== 42805\nIFNtaXRoc29u 42806\nIEFsbGFodQ== 42807\nz47Pgc6x 42808\n7JWY7Iq164uI64uk 42809\nIFZvdGU= 42810\nIFNtZWxscw== 42811\n0L7QtNC90L4= 42812\nIGhpbmRzaWdodA== 42813\nVlI= 42814\nIFBhdGNo 42815\nIEphaHJlcw== 42816\nIHNvdXZlbmly 42817\nIG5ldXRyb24= 42818\nIGxvbmd0aW1l 42819\nIHNheWlu 42820\nYXNha2k= 42821\nINC+0YHRgtCw0L3QvtCy 42822\nIGV4cGVsbGVk 42823\nIGNyeXB0b2N1cnJlbmNpZXM= 42824\nIE11cmRlcg== 42825\nIENpdGl6ZW4= 42826\nV0FZ 42827\nIHBsdQ== 42828\nIGxlbW9uYWRl 42829\nIGNvbnZlbmllbnRseQ== 42830\nIEhJ 42831\nIDIwMjM= 42832\n16nXldeq 42833\n0LDRhtC40L7QvQ== 42834\nIOubsA== 42835\nINmE2YPZhg== 42836\nINC90LXQvNC90L7QttC60L4= 42837\nIHVudXNlZA== 42838\nIG1haW9yaWE= 42839\nIGFzdHJvbG9neQ== 42840\nIERvd250 42841\nTmljaw== 42842\nIHByZW9jY3Vw 42843\nIGRlbWFpbg== 42844\n157Xog== 42845\nINCy0L7QtNGL 42846\nIFNhbnNrcml0 42847\nIHByw6p0 42848\nIHN0cmFuZGVk 42849\nIHJlZmlu 42850\nINC/0YDQuNC90LjQvA== 42851\nINC/0L7QstC10YDRhQ== 42852\n4K+NPw== 42853\nIHpyb2I= 42854\nIGludGVydHc= 42855\nIERhdmlkc29u 42856\n0LvQtdC90LA= 42857\nINC/0L7QvdGP0YLRjA== 42858\nIFJlbm8= 42859\nINC/0L7Qu9GD0YfQuNC70L7RgdGM 42860\nIGNvcnJlc3BvbmRlbnQ= 42861\nIFVyYW4= 42862\nZWxzZQ== 42863\nwrfCtw== 42864\nIHR1dG9yaW5n 42865\nIGdyYW5kZGF1Z2h0ZXI= 42866\nbHVkZWQ= 42867\nIHN0ZXNzbw== 42868\nIGjhur90 42869\nIGdlZ2FuZ2Vu 42870\nINCd0JA= 42871\nIGFudGln 42872\nYmFja2dyb3VuZA== 42873\nIGdlZGFhbg== 42874\nIGZhdm9yZWQ= 42875\nIEVtbWFudWVs 42876\nIGlvZA== 42877\nIGNsYW1wcw== 42878\nIGNvbXBsZQ== 42879\nIEFkdmFuY2U= 42880\nIOyeiOqzoOyalA== 42881\nIFJveA== 42882\nIOyXkOs= 42883\nIGludGVzdGluZXM= 42884\nIHBlcmN1c3Npb24= 42885\nIGxlZ2l0aW1hdGVseQ== 42886\nIEV0ZXJuYWw= 42887\nZmFtaWx5 42888\nYWxvZw== 42889\nQnJhZA== 42890\n0LXQvdC40YLRjA== 42891\nINGB0L3QsNGH0LDQu9Cw 42892\nIGNlcnRh 42893\nIGFra29y 42894\nIM61zrTPjg== 42895\nIG9jdGF2ZQ== 42896\nIFZhYw== 42897\n0LzQvtGC0YDQuA== 42898\nIMOJdGF0cw== 42899\nIGxvbmd1ZQ== 42900\nIGRpc3NvY2k= 42901\n0YDRj9C0 42902\naGVpbg== 42903\nIHBhbnRhbGxh 42904\nIGluZGljYXRpb25z 42905\nIEx0 42906\nIEdyYWRl 42907\nb2luZQ== 42908\nYnVn 42909\nIFZlcml6b24= 42910\nIEFsw6lt 42911\nIHZpZW5uZW50 42912\nINGH0LjRgdGC 42913\nIEJlbmk= 42914\nIFRzY2g= 42915\nIFRQ 42916\nIGluc3VsdGluZw== 42917\nIFdlaWdodA== 42918\nIGFkYXB0YXRpb25z 42919\nIGhhYsOtYW4= 42920\nIGNsaXF1ZQ== 42921\nb8WbY2k= 42922\nanVuYQ== 42923\nIHN1Y2hlbg== 42924\nIEdvZXM= 42925\nIEV4b2R1cw== 42926\nQ2hv 42927\nIGFudGlz 42928\nIO2MjOs= 42929\nc2V2ZW4= 42930\nINGH0LDRgdC+0LI= 42931\nIGJhbGxpc3RpYw== 42932\nem9ueQ== 42933\nSUNJQQ== 42934\nINC/0YDQtdGB0YI= 42935\nIHNpbXBsZXNtZW50ZQ== 42936\nIENvbGxhYm9y 42937\nRnJlZA== 42938\nINGC0LXQu9C10YTQvtC9 42939\nIFJhdmk= 42940\n7ZW07KQ= 42941\n0L/QtdGA0LI= 42942\nIOyeiOycvOuLiOq5jA== 42943\nIMOzdA== 42944\nIGFsZWc= 42945\nw7pw 42946\nIGRpc3JlZ2FyZA== 42947\nIGluZGVudA== 42948\nY2xvdWQ= 42949\nY2hsYWdlbg== 42950\nIGl0ZXJhdGU= 42951\nIGdlbmVyYWxpemVk 42952\n4KS5 42953\nZWxlcmk= 42954\nIGRpc2FzdHJvdXM= 42955\nINGB0YLQsNC70LA= 42956\ns5E= 42957\nS05PV04= 42958\nIHJpY2huZXNz 42959\nIGNvbnNjaWVudA== 42960\naWNodHM= 42961\nINGN0LvQtdC8 42962\n2KjYrw== 42963\naXJlbnM= 42964\nIGhhdW50aW5n 42965\ncnVjdHVyZXM= 42966\nYXR0YWNr 42967\nIGN1cGNha2Vz 42968\nc3F1ZQ== 42969\nIG5hc3plZ28= 42970\nIGFudGhyb3BvbG9neQ== 42971\nY2hhZQ== 42972\nIGRpc2NvdmVycw== 42973\nIFBlcnNvbmFsaXR5 42974\nIM6kzr8= 42975\nIGRpxJ9lcg== 42976\nINC90LXRkQ== 42977\nIEFuaXRh 42978\nIFvimao= 42979\nIENhcm0= 42980\nIEJlbm55 42981\n7Iqs 42982\nIHB1cGls 42983\nIG9jYXM= 42984\nw6RsbGV0 42985\nasWbxIc= 42986\nYW1lbnRhbA== 42987\nINC+0YLQvdC+0YE= 42988\nIHBpZA== 42989\nIGFybXA= 42990\nUkVF 42991\nINC+0YLQutGA0YvQsg== 42992\nIHVkYQ== 42993\nIFN5bmRyb21l 42994\nIFN0YW5kYXJkcw== 42995\nIHBvaW50ZXJz 42996\nIGVuYW0= 42997\nIFRpZw== 42998\nw616 42999\nINC90LDQvNC4 43000\nIHVuY2hhbmdlZA== 43001\nIHR1cm1vaWw= 43002\n4bupbmc= 43003\nISEi 43004\nNTAwMA== 43005\nIOusvOyWtOs= 43006\nIG1lcmdpbmc= 43007\nIGVudHNjaGVpZGVu 43008\nZm9ybWU= 43009\nIHRyaW1tZWQ= 43010\nIGRhcmVk 43011\nIGFzcGlyYXRpb24= 43012\nIE15dGhpY2Fs 43013\nIEhlag== 43014\nIEFsZWo= 43015\n0YbQvg== 43016\n0L7RgtGD 43017\nWmU= 43018\nINC40L3RgdGC0YDRg9C80LXQvdGC 43019\nIFJUWA== 43020\nIGxvY2FsaXplZA== 43021\nIHN1cnJvdW5kcw== 43022\nIGVtcGllemE= 43023\nIGNsYXNl 43024\nIOC4gQ== 43025\nIFJhcGlk 43026\nb21pbm91cw== 43027\naWdhaWw= 43028\nINGI0LjRgA== 43029\nIGzDpg== 43030\nIHphc2Fk 43031\nIHVuZm9sZGluZw== 43032\nPyE/IQ== 43033\nIOyInOqwhA== 43034\nIFBvbHNraQ== 43035\nIEthdWY= 43036\nIENlbHQ= 43037\naXRpYw== 43038\nIHRvb2xib3g= 43039\nIFBvY2tldA== 43040\nIOyEnOuhnA== 43041\nIGJlbGtp 43042\nIGFkbWlyYXRpb24= 43043\ncGhy 43044\nIFByb2R1a3Q= 43045\nIFRydWNr 43046\nIGRyYXXDn2Vu 43047\nd2HFgg== 43048\nIEhlYnJld3M= 43049\nIO2VmOqyjA== 43050\nIEFDRQ== 43051\ndXJnZW5jZQ== 43052\nYXVyYWlz 43053\nIGNoYXJpdGFibGU= 43054\nxLF0 43055\nIGFybWFz 43056\nIEdlZGFua2Vu 43057\ncmVhdGluZw== 43058\ncG9ydGU= 43059\nIGltcHJpbnQ= 43060\nZsOkaA== 43061\nINC/0L7QtNGF0L7QtA== 43062\nIG91dHNldA== 43063\n4Lin4LiB 43064\n0LXQvdC90L7Qs9C+ 43065\nQ2xhc3M= 43066\nIHZhbml0eQ== 43067\nIFZPSUNFUw== 43068\nIDI2MA== 43069\ncmVzaWRlbnQ= 43070\nVVNF 43071\nIOqwgOyatOuNsA== 43072\n6b0= 43073\nIHRocm91Z2hwdXQ= 43074\nIGN1bWE= 43075\n7Jqx 43076\nINC/0LvQvtGJ 43077\nIHBhcnRpcw== 43078\nIEFuaW1hdGlvbg== 43079\np4jr 43080\nQ3Jl 43081\nw7Z0emxpY2g= 43082\nIG1hZ2c= 43083\nIGNsdW1zeQ== 43084\nIGJvdHRsZW5l 43085\nIGJpcmxpa3Rl 43086\nIEdhbWI= 43087\nINeb158= 43088\nIG1ldHJvcG9saXRhbg== 43089\nT29o 43090\nIG9iamVjdGlvbnM= 43091\nINmF2Ko= 43092\nINC80LXQuw== 43093\nIHJlbW5hbnRz 43094\nIFhhdmllcg== 43095\nUmljaA== 43096\nIG9sc2E= 43097\nIFBpbGw= 43098\nIGdyb2Fucw== 43099\nIE5hcnVob2RvdQ== 43100\nIENvbnRyYWN0 43101\n0LDQtNCw 43102\nbmFp 43103\nINGE0LjQtw== 43104\nIG9wcw== 43105\n4bqhdA== 43106\nIHBhcmFjaHV0ZQ== 43107\nIG5lbGw= 43108\nIEVudHNjaGVpZHVuZw== 43109\n15zXmded 43110\nIHRydXRoZnVs 43111\nIHNoYXJwZXI= 43112\nIGJ1cmVhdWNyYWN5 43113\nY2FydA== 43114\nINC40L3Rgg== 43115\nd2llaw== 43116\nIHdpbGxpbmdseQ== 43117\nIEhlcm1hbg== 43118\nIG1laHJlcmU= 43119\nIGVsaXRlcw== 43120\nIEFybW9y 43121\nIGVtYm9yYQ== 43122\nIFJlY29nbg== 43123\nINC70Y7QsdC70Y4= 43124\nIEV4Y2VsbGVuY2U= 43125\naWJlbA== 43126\nIGV4cG9ydGluZw== 43127\n7LK07KCB 43128\nS2VsbHk= 43129\nQ2FtZXJhbWFu 43130\nIHNsaXBz 43131\nIGZpZ3VyYQ== 43132\nIGtvbGw= 43133\nIFBhbmRlbWll 43134\nIHRpbWVk 43135\nbGllw59saWNo 43136\nINee15s= 43137\nIHBlcsOtb2Rv 43138\naXZhdA== 43139\nIHF1ZXN0aW9ubmFpcmU= 43140\nIHDDqXJpb2Rl 43141\nIHNpZ2hz 43142\nIGFsbGVnaWFuY2U= 43143\nIFhW 43144\nIEtlbnN1a2U= 43145\nIEdlc3VuZGhlaXRz 43146\nIHBvc2l0aXZv 43147\nIEphbmVpcm8= 43148\nIFNFRQ== 43149\nINin2LPYqg== 43150\nIEtlbHNleQ== 43151\ndG9iZXI= 43152\nIM6xzrvOu86s 43153\nIFBhcmVudA== 43154\nIERheXRvbg== 43155\nIEJpbGRlcg== 43156\nb3VyYWdl 43157\nIHNlcmVz 43158\nIG11Y2jDrXNpbW8= 43159\nIFJlYWxt 43160\nIE9GRklDRVI= 43161\nZXJzb25pYw== 43162\nb255YQ== 43163\nIOq4iQ== 43164\nIGFuY2VzdHJ5 43165\nIEp1cmFzc2lj 43166\nIGNlbnRpZ3JhZGU= 43167\n4bqldQ== 43168\ndWrEhWM= 43169\nbWFucw== 43170\nIHRpbw== 43171\nIE1vxbw= 43172\nIHRyYWdlbg== 43173\nIHN0YXJlZA== 43174\nIHNjaGVtYXRpYw== 43175\nIHBhc3NvdQ== 43176\nIG1lYXRiYWxscw== 43177\nxYJvxZvEhw== 43178\nIHN5bmNocm9ub3Vz 43179\nIHBlcm1pcw== 43180\nYXJpYWw= 43181\nIHplcg== 43182\nIHBhcml0eQ== 43183\nIEF2YXRhcg== 43184\naW5kZWVy 43185\nZXN0b24= 43186\nIG1laWTDpG4= 43187\nIENseQ== 43188\ntIk= 43189\nIGVzdHJvZ2Vu 43190\nIGNlbnRpbWV0 43191\nIGNvbnZpY3Rpb25z 43192\nIHBvc3NpYW1v 43193\nIHBlcmR1 43194\nIHBhdGhvZ2Vucw== 43195\nIFF1aW4= 43196\nIFByb2dyYW1z 43197\nIFBvaW50cw== 43198\ncmFtZW50 43199\ncmFpbA== 43200\nIHZ5 43201\nIGdyYWZ0 43202\nIGJhcnQ= 43203\nIExvdHVz 43204\n4Kg= 43205\nIOuztOyLnA== 43206\ncmFtZXI= 43207\nRmF0aGVy 43208\nIOucuw== 43209\nINeU150= 43210\nIHRyYXplcg== 43211\nIHRhcms= 43212\nw6hjZXM= 43213\nZm9ydGg= 43214\nINGB0LTQtdC70LDQu9C4 43215\nIHp1Y2NoaW5p 43216\nIHdha3R1 43217\nIGVudGVydGFpbmVk 43218\nIE1pbGxpYXJkZW4= 43219\nIHNoYWt5 43220\nIHByemVkZQ== 43221\nuIzr 43222\nIHJldmVyc2libGU= 43223\nIE5BVQ== 43224\ndWlucw== 43225\nw6lyw6p0 43226\nYW5uZW4= 43227\nIEh1bnRpbmc= 43228\nIEZlbGxvdw== 43229\nw6lsaW9y 43230\nIHJvdGF0aW9ucw== 43231\nIGdyYW5ueQ== 43232\neHRvbg== 43233\nINGB0YLQsNC90L7QstC40YLRgdGP 43234\nINC90LDRh9Cw0Ls= 43235\nIGFydGVyaWVz 43236\ncmnDsw== 43237\nINC/0L7Qu9GM0LfQvtCy 43238\nINCR0Ys= 43239\nIG5vdmVsdHk= 43240\ncG91bmQ= 43241\nIHdlaXJkZXN0 43242\nIGJvaXM= 43243\nw6ltaWU= 43244\ndXBs 43245\nQVRB 43246\nIHRlaGQ= 43247\nIE5pcg== 43248\nc8SxbsSxeg== 43249\nISIs 43250\nIGltbW9ydA== 43251\nIGVsaw== 43252\n0LDQvdC40Yc= 43253\nIGZhYnJpY2F0aW9u 43254\nIE5vaXNl 43255\nIEF2YW50 43256\n2LHbjA== 43257\nd2F0 43258\nIHdob29zaGluZw== 43259\nINeb15k= 43260\nINCX0L3QsNGH0LjRgg== 43261\nIGNlbnRyaWY= 43262\nYW5zaW5n 43263\nU291bmQ= 43264\nIOudvOs= 43265\nIGNhcHRpb25z 43266\n4LON 43267\nIG9yZ2Fz 43268\nIGRvbHBoaW5z 43269\nIEJsZW5k 43270\nIFRhag== 43271\nIENDVFY= 43272\nIGlub20= 43273\nIGVkaXRpb25z 43274\nIGJ1cm5vdXQ= 43275\nIGLDpHR0cmU= 43276\nIENhc2E= 43277\nb3ZpY2g= 43278\nIG1vbHRlbg== 43279\nIGJsaW5kZm9sZA== 43280\nIEd1ZQ== 43281\nIHNwaW5uZXI= 43282\nIG3DtmdsaWNoc3Q= 43283\nIFbDoA== 43284\nZW5lY2E= 43285\nIG3DqWRpY28= 43286\nw6FzdGljbw== 43287\nIGFyZA== 43288\nIFN1bmRheXM= 43289\nIFJlbW90ZQ== 43290\nIOyWvOuniA== 43291\nIHRyxrDhu5tj 43292\n7IWo6w== 43293\nIGRvcHA= 43294\nIGJlxJ8= 43295\naWNhbmE= 43296\nIOuCmOykkeyXkA== 43297\nIGhvbGluZXNz 43298\nZGlyZWN0 43299\nIOyYge2ZlA== 43300\nIGN1bHBh 43301\nIFN0aXRjaA== 43302\nbGlnaHRseQ== 43303\n0LDQvNC10L0= 43304\nINC80LXRiA== 43305\nINC/0LXRhw== 43306\nIHlodGU= 43307\nb3NwaGVyZQ== 43308\nIOyTsOuKlA== 43309\nw6lr 43310\nIHNlcmlvdXNuZXNz 43311\nIGdhcm1lbnRz 43312\nIGNvbmNpc2U= 43313\nIFNK 43314\nIHZlcmxvcmVu 43315\nIHBhcmVjZXI= 43316\nIFVOQw== 43317\n7Iqk7YOA 43318\nIGVuZmFudA== 43319\nIGJvbWJlcg== 43320\nIEdpZnQ= 43321\nIOyii+uLpA== 43322\nIHJoeXRobXM= 43323\nIEtsYXI= 43324\nb3duaWs= 43325\nIFJldmVyZW5k 43326\nIGVtaXR0ZWQ= 43327\nbGFzc2Vu 43328\nIHJldmVuaXI= 43329\nIGFyaXNpbmc= 43330\nIHByZWNpc2FtZW50ZQ== 43331\nIGludGVycG9s 43332\nIFRlbmVtb3M= 43333\nb2JlZA== 43334\nIHRlY25vbG9naWE= 43335\nIG5lcmVkZQ== 43336\nIFZpc2E= 43337\nIHNhdmE= 43338\nIGVzY3JldmVy 43339\nIGFzc2F1bHRlZA== 43340\nIEZsZWlzY2g= 43341\nIENvdW5jaWxsb3Jz 43342\nIOqwgOq5jA== 43343\nIGJlZ2c= 43344\nIERldmVsb3Blcg== 43345\nIEJyb256ZQ== 43346\nIEJvbnVz 43347\nINeo16c= 43348\nZmFjdA== 43349\nIGVuZGxlc3NseQ== 43350\nIG1hY2Ft 43351\nIHJ6ZWN6eXdpxZtjaWU= 43352\nIGhvdmVyaW5n 43353\nw6hnZQ== 43354\nIHBvb3Jlc3Q= 43355\nIFNjaGVk 43356\nbWlsZQ== 43357\naXNzZW1lbnRz 43358\nYWPEgw== 43359\nIOumvQ== 43360\nIHZhY2Npbg== 43361\nIGZ1dHVyaXN0aWM= 43362\nIFdpbmRvdw== 43363\n0L/QsNGA 43364\nINGA0L7RgQ== 43365\nIGxvd2Vycw== 43366\nYWNz 43367\nINCQ0LvQtdC60YHQsNC90LQ= 43368\nIEFsZXJ0 43369\naWVtZQ== 43370\nIENhdWNhcw== 43371\nIGphd3M= 43372\nIGh1bnRlZA== 43373\n7Je9 43374\nINio2YY= 43375\nINec16DXlQ== 43376\nIHR1cmJpbmVz 43377\nIGx1bXBz 43378\nIEFsbGllcw== 43379\nYWhsdA== 43380\nIHN1YnNjcmlwdGlvbnM= 43381\nIG5vdXZlYXV4 43382\ndWdlcg== 43383\nYm9uZXM= 43384\nIGJlcnJ5 43385\nIOyEoOusvA== 43386\nIE1hbnVmYWN0 43387\nIEx1bmNo 43388\n6re4656Y 43389\nIGh5ZHJhdGVk 43390\nIGFjaGVp 43391\nIFlheg== 43392\nIFRpYmV0YW4= 43393\nIFF1YW50dW0= 43394\nIEplcm9tZQ== 43395\nINC+0YnRg9GJ 43396\n0L7QstCw0L0= 43397\nbW90aW9u 43398\nIENvbnRyb2xsZXI= 43399\nZW5lcmdldGlj 43400\nINGB0LrQvtGA0L4= 43401\nIHZvd2Vscw== 43402\nINGD0LbQsNGB 43403\nIGhvb2Y= 43404\nIEJ1bGxldA== 43405\naW1hZ2lu 43406\n16DXmded 43407\nIGVuZ2FnZW1lbnRz 43408\nIEJsdWVz 43409\nIGHDsWFk 43410\nIGZwcw== 43411\nIGNhdGVycA== 43412\nIHPhu5E= 43413\nIFRyaWJl 43414\n0L/QvtC9 43415\naWZlcmF0aW9u 43416\nIHJ1bWFo 43417\nIFB1bmo= 43418\nbGFi 43419\nIGNvbXByZWhlbnNpb24= 43420\nYnJpbmdpbmc= 43421\nV28= 43422\nIHRpaw== 43423\nIGFueWhvdw== 43424\nw6F0aWNhcw== 43425\nIHNpdHplbg== 43426\nIGtvbGF5 43427\nIENvbmZlZGVyYXRl 43428\nIENhbGxlZA== 43429\nIG5hc3p5Y2g= 43430\nIGR6acSZa2k= 43431\nIGNsb2Fr 43432\nIEdvb2c= 43433\nIEFzaGU= 43434\nZW5hbg== 43435\nINC80YvRiA== 43436\nINCy0LXRgg== 43437\nIFNwbw== 43438\nIFNrZXQ= 43439\nIEhlbmRlcnNvbg== 43440\naWxhaA== 43441\nINCx0LXQt9C+0L/QsNGB 43442\nIHNla2FsaQ== 43443\n7Ja06rCA 43444\nIHNuYXJl 43445\nIHLhurFuZw== 43446\nIGbDtnJzw7Y= 43447\nc3p5Y2g= 43448\nIMO8YmVycw== 43449\nIHN0cmF0w6ln 43450\nIOy6kOs= 43451\nIHJhcHBlcnM= 43452\nIGNlcA== 43453\nIEhhc3Rh 43454\nIGhvcnJpYmx5 43455\nIGZyw7xo 43456\nINio2Lk= 43457\nIG1hbnRsZQ== 43458\n44CF 43459\nZnVuZGluZw== 43460\nIHp1c3Q= 43461\nIFBlbnM= 43462\nc2Vk 43463\nIO2XpA== 43464\nIGdlcmVraQ== 43465\nIGFsYXJtcw== 43466\nIFdoYQ== 43467\nIE1hcmt1cw== 43468\nYWtzaQ== 43469\nINCQ0LvQtQ== 43470\na2xvcmU= 43471\nIMOpbmVy 43472\nIHRpbGRl 43473\nYm94aW5n 43474\nIOyEng== 43475\nIGVuY29udHJhbW9z 43476\nIFBoYXI= 43477\n0L3QsNC60L7QvA== 43478\nw7NzdA== 43479\nIMSwcw== 43480\nIOuLmA== 43481\nIHNxdWF0cw== 43482\nIHByZXRlbmRlZA== 43483\nIGRleg== 43484\nIOq0nOywruyVhA== 43485\namFjaA== 43486\n65286rOg 43487\nIO2ZleynhA== 43488\nIEFuc2No 43489\naW1lcms= 43490\nIGNvbmp1Z2F0ZQ== 43491\nIHBlbmluc3VsYQ== 43492\nIGdvcmlsbGE= 43493\nIHBob3RvZ3JhcGhlZA== 43494\nIEF1bnF1ZQ== 43495\nIGVudHJlbg== 43496\nIERldXRzY2hlbg== 43497\nIEFsYWRkaW4= 43498\nIOustOyEnA== 43499\nIFN0ZWxsYQ== 43500\nIEVsZWN0aW9u 43501\nb3V0aW5l 43502\nR3JhbmQ= 43503\nIFdhaw== 43504\nIFNlcmdpbw== 43505\naG9yc2U= 43506\nYWhvbg== 43507\nIEZhbWlsaWVz 43508\nIGhhdGluZw== 43509\nIEJldHQ= 43510\n4LiZ4Liw4LiE4Liw 43511\nIGN1cmxpbmc= 43512\nIElzcmFlbGlz 43513\nINec15DX 43514\nIE15ZXJz 43515\nIHNjYW5uZWQ= 43516\nIEJFQw== 43517\naWxlcmk= 43518\nIGNhbGxl 43519\nIE1pbmg= 43520\nIG1pY3Jvbg== 43521\nIGNvbmR1Yw== 43522\nw612 43523\nINCy0L7Qt9GM 43524\nIGFjdGlvbmFibGU= 43525\nIFRydXN0ZWVz 43526\nIHRpZWY= 43527\nIGhlYWRlcnM= 43528\nIGFuaW1hbGVz 43529\n7JuA 43530\n0LvQvtGF 43531\ndW5pdHk= 43532\nbHlh 43533\nIGphbmdhbg== 43534\nIGhhbmk= 43535\nIGNhc2luZw== 43536\nIGrDs3ZlbmVz 43537\nIFNwbGl0 43538\nIENhcmxv 43539\nIEJlaW0= 43540\nIG51YW5jZWQ= 43541\nIHRlZGR5 43542\nIENsYW4= 43543\nw6RjaGVu 43544\ncGllcg== 43545\nINC00L7Qv9C+0LvQvQ== 43546\nIGRpYXBlcg== 43547\nZWZmZWN0aXZl 43548\nIE5pYWdhcmE= 43549\nIHdhcnQ= 43550\nIGNvcnJv 43551\nIEthbXBm 43552\nenRl 43553\nIGTDqXZlbG9wcGVtZW50 43554\nIGF0dGFja2Vycw== 43555\nIFNoZXJtYW4= 43556\nIDE5MTQ= 43557\nIG1lb3c= 43558\nIFDDpQ== 43559\n7Lo= 43560\nY2l0 43561\nIGNvdXBl 43562\nIOq3uOuLpOydjOyXkA== 43563\nIGh1bW91cg== 43564\nIGNvbGU= 43565\nIFdhcm5pbmc= 43566\nIFRpbA== 43567\nY2FsbQ== 43568\nYnVhdA== 43569\nIGNpbmU= 43570\na2llag== 43571\nS2V2aW4= 43572\nIG1pbGxpZ3JhbXM= 43573\n15PXqA== 43574\nYXJpYW1lbnRl 43575\nIG9ybw== 43576\nIEhvZA== 43577\nZXJ0b3M= 43578\nIGxpaGF0 43579\nIGZ1bGxlc3Q= 43580\nIGdyYW5kaQ== 43581\nINCx0L7Qug== 43582\nIHdob2xseQ== 43583\nIG1haGRvbGw= 43584\nIGNvbnRyb2xs 43585\nIEJ1bnVu 43586\nIGRpcHBlZA== 43587\nIHJlZ2nDs24= 43588\nINmE2Yg= 43589\nINCx0LDQsw== 43590\nIHByZW1pZXJz 43591\nIGNo4buL 43592\naWRleg== 43593\nIHF1b3Rh 43594\nIGdoZWU= 43595\nYXJrYW4= 43596\nIGdlbGF0aW4= 43597\nIENsZXJr 43598\nYmJsZXM= 43599\nIFBhaWdl 43600\nIHN0YWdlZA== 43601\nIHNvY2lhaXM= 43602\nIEJpemlt 43603\nIHZlbG9jaWRhZGU= 43604\nIG1hbGFyaWE= 43605\nIHNob3J0ZW5lZA== 43606\nIHNhbHV0 43607\nIEhlaGU= 43608\nIHbhu4s= 43609\nIFRhaXdhbmVzZQ== 43610\nIEFycmk= 43611\nZ3Jlcw== 43612\nKCk= 43613\ncmlhZA== 43614\nkZDr 43615\nIG1hc2N1bGluaXR5 43616\nTFA= 43617\nIOuWoQ== 43618\nIHTDqXJtaW4= 43619\nIFbDpA== 43620\nIFNlaXRlbg== 43621\nIHJlc3BlY3RmdWxseQ== 43622\nw6Fv 43623\nIHRvdGFsZW1lbnQ= 43624\nIHNjcmFwcw== 43625\nIGluZnJpbmc= 43626\nIEJvc2U= 43627\nYW1hcg== 43628\nIEx1aXph 43629\nIEFSTQ== 43630\nINC/0LvQvtGF0L4= 43631\nIG1laWxsw6Q= 43632\nIERpb24= 43633\nIHNvdWhh 43634\nIGdlc2NoYWZmdA== 43635\nIGNvbnZvbHV0aW9u 43636\nIOKAkeKAkQ== 43637\nIDE0NA== 43638\nbGluZ3Q= 43639\nIG3DpG5uaXNr 43640\nIGd1c3RhZG8= 43641\nIGNvaW5lZA== 43642\nIEx1bHU= 43643\nb3BvdA== 43644\nIFByYXllcg== 43645\nIHJvYXN0aW5n 43646\nIGNocm9tb3NvbWVz 43647\n0LXQu9C1 43648\nQmx1ZQ== 43649\nIEVyZm9sZw== 43650\nINC/0YDQuNC00YPQvA== 43651\nIHJpc2tpbmc= 43652\nIEd1YXJkaWFucw== 43653\nIDIwMjQ= 43654\nw6hzZQ== 43655\nINCx0YPQtNGC0L4= 43656\nIGNvbnNlcnZl 43657\nIEJyaW5naW5n 43658\nIEFzdHJh 43659\n4LmA4LiC 43660\nINC60LDQutGD0Y4= 43661\ncmVzcGFjZQ== 43662\nINCe0L8= 43663\nINCy0L7QutGA0YPQsw== 43664\nIG1hc2tlZA== 43665\nIFNoeQ== 43666\nIE5pbQ== 43667\nZW5kYXM= 43668\nIO2PrOyduA== 43669\nIOuqqOyWkQ== 43670\nIHZhbGV1cg== 43671\nIE5lZ3Jv 43672\nIENEcw== 43673\naW5rbGluZw== 43674\nIG1vbnTDs24= 43675\nIEhvbmQ= 43676\nUmVhbA== 43677\nIGZ1bGxuZXNz 43678\nIFdob29wcw== 43679\nIFNoYW5r 43680\nIEJyYW4= 43681\nIHRyYW5zbHVj 43682\nIGVycg== 43683\nIEdhcmRlbnM= 43684\nb3l1 43685\nIGFmZmlybWF0aXZl 43686\nIHBvdHRlcnk= 43687\nbGl2ZQ== 43688\naWF1 43689\nbW91bnQ= 43690\nIGZsdWN0dWF0aW9ucw== 43691\nw61lbQ== 43692\nIHB1bHNlcw== 43693\nIGNyaWFuw6dhcw== 43694\nzq/Osc+C 43695\nIGJhc3Rh 43696\nRU5OSVM= 43697\nINC60L7RgNC/ 43698\nIEZ1bms= 43699\nw6VydA== 43700\nINC30LDRgtC10Lw= 43701\nIHBhcmFzaXRlcw== 43702\nIGFpcmZsb3c= 43703\nIFh1YW4= 43704\nR8O8bG1l 43705\nIGJsb29taW5n 43706\nIG11bW15 43707\nIGJhbw== 43708\nIENsYXA= 43709\nYW50aWNz 43710\nc2tpbg== 43711\nY2VudHJpYw== 43712\nYmVmb3Jl 43713\nIFJJQ0hBUkQ= 43714\nIEhhaG4= 43715\nVEFLRQ== 43716\nINGC0YDQtdGC0Yw= 43717\nIHByZXNzdXJlZA== 43718\nIEt1cno= 43719\naXN0aQ== 43720\nINC90LDRiNC10LPQvg== 43721\nIHNlbWljb25kdWN0b3I= 43722\nIENsaW50 43723\nIHBsdXA= 43724\nIE9yaWdpbg== 43725\nIEV2ZW50cw== 43726\nIOqxseyglQ== 43727\nbXBmZW4= 43728\nTkVZ 43729\nIERX 43730\nIOu2ge2VnA== 43731\nIGluZm9ybXM= 43732\nIGZvcnNr 43733\nIGFtaWdh 43734\nIENpbmNpbm4= 43735\nU3Ry 43736\nIHBhcmlzaA== 43737\nIOy7pO2U 43738\nIHNpemk= 43739\nIHBsYW50YXRpb24= 43740\nIGJsaXZlcg== 43741\nINC/0L7Qu9C40YI= 43742\nIHN1YmRpdg== 43743\nIHJhbnQ= 43744\nIHByaW5jaXBhbHM= 43745\nIGt1bm5l 43746\nw7xnZW4= 43747\nYXJlc3BhY2U= 43748\nIHZhbGxhaGk= 43749\nIGNvbGxhcHNpbmc= 43750\n2KfZhNmF 43751\nIGxpZGVy 43752\nIHRhbWE= 43753\nIGdhZ25lcg== 43754\ncm9sbGU= 43755\nIOunkOyUgOuTnOs= 43756\nIGNhdGhlZHJhbA== 43757\nIFdlYnM= 43758\nIFBvbGl0aWNz 43759\nIERlbmlz 43760\nIHR1bw== 43761\nIHJlZnJhY3Q= 43762\nIGRpc2ludGVncg== 43763\nc3Rlcw== 43764\nINC70Y7QsdC+0LI= 43765\nIHdpbHQ= 43766\nIHRydXN0cw== 43767\nIGtvbXVu 43768\nIEJhc2tldA== 43769\nfiEh 43770\nbmFl 43771\nINCa0L7Quw== 43772\nIHN5bGxhYmxlcw== 43773\nIEhlbnJp 43774\nIE5hYg== 43775\n2YjYuQ== 43776\nIHdu 43777\nIGthbXA= 43778\nIFByYWd1ZQ== 43779\nIEJyZWFrZmFzdA== 43780\nIOq3uOuftA== 43781\nIGNodXQ= 43782\nIDMzMA== 43783\nIEluZHVzdHJpZXM= 43784\nIGnFn2k= 43785\nIEdvbGRtYW4= 43786\nIMSwbnM= 43787\ndXNzYQ== 43788\naXRoZQ== 43789\nhJA= 43790\nIFNPVU5E 43791\n0LDQu9GM0L3Ri9C8 43792\nLig= 43793\nINCz0L7RgNCw0Lc= 43794\nIGRhZ2VnZW4= 43795\nIOuu 43796\nIHdhaXRlcg== 43797\nbGVuZ3Ro 43798\nIM+Dz4TOsQ== 43799\nIGNodW5reQ== 43800\nU2E= 43801\nIHJ1c3R5 43802\nIEp1ZGl0aA== 43803\nNzUw 43804\nIGVwb3h5 43805\n7Lmg 43806\nbWV0cm8= 43807\nIHJlamVjdGluZw== 43808\nIHNxdWlzaHk= 43809\nIHBsdXBhcnQ= 43810\nIG3DqXRo 43811\nIGFzcGlyaW5n 43812\nIERyYW1h 43813\nIHVwbGlmdA== 43814\np4jri6Q= 43815\nLi4uLi4uLi4uLi4uLi4uLg== 43816\noKTsmpQ= 43817\nIHTDqWNuaWNh 43818\nIHBhc2FuZG8= 43819\nVGhvc2U= 43820\nINGA0LDQt9C00LXQuw== 43821\nIG1lZGlvY3Jl 43822\nIE5pY2tlbA== 43823\nIHN1cGVyaGVyb2Vz 43824\nIG1pc3Npb25hcnk= 43825\nIFBhcmVjZQ== 43826\nIHJvdGF0aW9uYWw= 43827\nIHByZXR0 43828\nIGxhbWE= 43829\nIGNhbnlvbg== 43830\nIGJldGVy 43831\nIFByb3Zvc3Q= 43832\nIGh2aXM= 43833\nIGRlYWN0aXY= 43834\nIEhlbHM= 43835\ncGZsaWNodA== 43836\nU29tZXRoaW5n 43837\nIFBpZXJjZQ== 43838\nIOqygOywsA== 43839\nbHVuZ2Vu 43840\nIHNpemluZw== 43841\nIGxhdGl0dWRl 43842\nIE5vbmV0aGVsZXNz 43843\nb21uaWE= 43844\nIFNhYnJpbmE= 43845\nIER5bmFtaWM= 43846\nb250YQ== 43847\n7IaQ 43848\nIGRpcmVjdGl2ZQ== 43849\nIERlcG90 43850\nIGZ1ZWxlZA== 43851\nIGV4cGlyZQ== 43852\nIGNvbcO6bg== 43853\nIFNleHVhbA== 43854\nIEdvcmU= 43855\nIHJlc3RsZXNz 43856\nIEpBS0U= 43857\n0YLQtdGA0LXRgQ== 43858\nINGC0YDQsNC9 43859\nIEhvbHo= 43860\nIEFjdG9y 43861\nY2FsbA== 43862\nIGVtYWlsZWQ= 43863\nIFBlYXI= 43864\n0YPQtNC4 43865\n0YDQsNC7 43866\nIG3DoHk= 43867\nIENIRUVSSU5H 43868\nIHJldGFpbGVy 43869\nIHByb3Ry 43870\nIGRpc2NhcmRlZA== 43871\nIEhJUw== 43872\nIGV2YW5nZWxpY2Fs 43873\nIEVsc2U= 43874\nIGV4cGxvcmVz 43875\nIGNyaXRpY2l6aW5n 43876\naWZpaw== 43877\nIHdoaXBwaW5n 43878\nIG9waXM= 43879\nb3VzZWQ= 43880\nRnJlZQ== 43881\nIO2MrA== 43882\nIG1pY3M= 43883\ncnVubmluZw== 43884\nT2I= 43885\naXRpw6k= 43886\nIG5lY2VzaXRh 43887\nIERvbWluaWNhbg== 43888\nIEJhZ2g= 43889\nIHRlbmRlbmNpZXM= 43890\nIE1ldHJvcG9saXRhbg== 43891\nxZFs 43892\nINC30L3QsNC10Lw= 43893\nIFphbQ== 43894\nIERlYWRwb29s 43895\nYWxlxbw= 43896\nIGludmVzdGlnYXRpdmU= 43897\nIFByb251bmNpYXRpb24= 43898\nIGVtdWxhdGU= 43899\nIGJhbmNv 43900\nIC3imao= 43901\nIG92ZXJhcmNoaW5n 43902\nbGljaGVz 43903\nINCy0L7Qt9Cy0YDQsNGJ 43904\nIFNjYXJ5 43905\nIEtpYQ== 43906\ncm9udGluZw== 43907\naW5uZWQ= 43908\nINuB2Yg= 43909\n7IiY66W8 43910\nd2Vs 43911\nIOuzhOuhnA== 43912\nIHVuaW50ZW50aW9u 43913\nYWFT 43914\nIG5pY2VzdA== 43915\nIFRlc3Rpbmc= 43916\nIElTSUw= 43917\nb2dlbm91cw== 43918\nINif 43919\nIGxpZXV0ZW5hbnQ= 43920\nIGJyYXVjaA== 43921\nIFRpcg== 43922\nZHJpdmU= 43923\nIHRvbGVyYW50 43924\nIHNob290ZXJz 43925\nIOyYiOu7kA== 43926\nb250b24= 43927\nIHRlcmlh 43928\naWV0ZXQ= 43929\nUm9u 43930\nbGVpZ2g= 43931\nZ2Fl 43932\nIG9sbWFr 43933\nIENsb25l 43934\nc29sZA== 43935\nIHNrZWxldG9ucw== 43936\nIGluY3VtYmVudA== 43937\n0L7QvNC1 43938\nQ09O 43939\nIGxldmVu 43940\nIG1pbGxlbm5pYWxz 43941\nIGVxdWF0b3I= 43942\nIEZlZGVy 43943\nIEFsZXhhbmRyYQ== 43944\nIHZyaWo= 43945\nIEhlYWx0aGNhcmU= 43946\nIO2VkQ== 43947\nIGVtcGhhc2l6aW5n 43948\nIGRpYWxvZ3Vlcw== 43949\nIGNoaWxsZWQ= 43950\nIHByb3c= 43951\nIFBhc3Npb24= 43952\nIExhZGVu 43953\nYXJpZXN0 43954\nYXBocmFn 43955\nIGFkZGl0aXZl 43956\nIFN0YWF0 43957\nIE5lcHQ= 43958\nIEhBTQ== 43959\n4LmA4Lit 43960\nZGF5cw== 43961\nIO2WiOuNmA== 43962\nIHZvaWxh 43963\nINGF0Ls= 43964\nIERldXRzY2hl 43965\ncXVpcg== 43966\nT3Blbg== 43967\nIHJhbmdlZA== 43968\nIGxldmVycw== 43969\nIE1hbnNpb24= 43970\ncGFyZWQ= 43971\nIFRpdGFucw== 43972\nYXRvaXJl 43973\nIGVuZ2FnZXM= 43974\neWV6 43975\nbmFkZW4= 43976\nIG9ic3RydWN0 43977\nIEVtbXk= 43978\nsKU= 43979\nIHRyb3Bo 43980\nIHRha2Vhd2F5cw== 43981\nKy4= 43982\ndHljem5pZQ== 43983\naMOpc2l0ZXo= 43984\nIHBvZMOtYQ== 43985\nIOyjvOuKlA== 43986\nIGNpdGF0aW9u 43987\nIEFxdWE= 43988\nIGRlYnVnZ2luZw== 43989\n0LLQsNC9 43990\nIOuLueyLoA== 43991\nINin2YTZig== 43992\nIGluc3RhbnRhbmVvdXM= 43993\nIEF1dHVtbg== 43994\nIGtlcGFkYQ== 43995\nIGdldGFu 43996\naGluaQ== 43997\neW50aGVzaXM= 43998\nINC/0LXRgNC4 43999\nIE1hY2Vk 44000\nUGFj 44001\ndW50dQ== 44002\nQnJh 44003\nINCz0L7RgNCw0LfQtNC+ 44004\nIDE5NTk= 44005\nINGC0LXQvNC/0LXRgA== 44006\nIHNhbmU= 44007\nIE9VUg== 44008\nYXN1 44009\nIOustOyX 44010\nIHZhbGxleXM= 44011\nIGxpc3Rpbmdz 44012\nIHByemVkc3Rhdw== 44013\nIGd1bW15 44014\nIGNvcnRpc29s 44015\nIE9icmln 44016\nIEFsbGllZA== 44017\n0L7QttGD 44018\nIGfDqW7DqXI= 44019\nIGRvY3M= 44020\nIENoaWxp 44021\nIEFiZHVsbGFo 44022\nS2l0 44023\nIGNvbnRyaWJ1dG9ycw== 44024\n0LPQvtGA 44025\n0LvQtdGA 44026\nIGJpbmRlcg== 44027\nIG1vZMOobGU= 44028\n7YWQ 44029\nIGludGVpcm8= 44030\nbWlz 44031\nZmVyYQ== 44032\n2KfYsA== 44033\nTWFuaWE= 44034\nIO2ZnOuPmQ== 44035\nIOu0kOyalA== 44036\nIEpheg== 44037\n0ZbQu9GM0LrQuA== 44038\ncmlzaG5h 44039\nIOq1sA== 44040\nIHRhbWFuaG8= 44041\nIGFwcGxpYW5jZQ== 44042\nIFJlc2lzdGFuY2U= 44043\nIExPT0s= 44044\nIEh5cA== 44045\nIEhlaWw= 44046\nRmlyZQ== 44047\ndWp1 44048\nIGhlYWxz 44049\nIG1hbHQ= 44050\nIFZFUlk= 44051\nINGF0L7Rh9C10YjRjA== 44052\nIGxpbmdlcg== 44053\nIE5hcnI= 44054\nIFJlZ3VsYXI= 44055\nIExvb3A= 44056\nIExlbm8= 44057\nIHNvcnRpZQ== 44058\nIFNlcnZl 44059\nIOydtQ== 44060\nIEx1ZWdv 44061\naXR0w6Q= 44062\nIHVuZGVz 44063\nIHNsaXBwZXJz 44064\nIG9uZGE= 44065\nIMSQw6J5 44066\nIHRhcGVk 44067\nIHRyYXZlcnNl 44068\nIHJlbGF0aXZpdHk= 44069\nIFlvc2hp 44070\nY2pvbg== 44071\naWxhdGVk 44072\nYWN0aXZlbHk= 44073\nINCh0L7Qsg== 44074\nIFBPTA== 44075\n0KDQmA== 44076\naW5mbGFtbQ== 44077\nY2hlZXJmdWw= 44078\nINee15DX 44079\nID4+Ww== 44080\nbWluc3Rlcg== 44081\nINCy0LvQuA== 44082\nIGlkZW50aWZpZXI= 44083\nIExhbWJkYQ== 44084\nIHRyb3M= 44085\nIGZsYXdsZXNz 44086\nIGRldHJpbWVudGFs 44087\nIGJ1bmxhcsSx 44088\nV2Fy 44089\nIHJlZ2nDo28= 44090\nIEJpa2U= 44091\nY2Vzc29ycw== 44092\nIGPDuW5n 44093\nIFJO 44094\nIOq9gw== 44095\nIGvDvMOnw7xr 44096\nIEJlZ2lubmluZw== 44097\n7Zi46w== 44098\nIGdld2U= 44099\nIGRlbm90ZQ== 44100\nIEFsYmVydG8= 44101\nIHByb2Jpb3Q= 44102\nIG9kZQ== 44103\nIG1vbGFy 44104\nIGJ1cnN0aW5n 44105\nYXNzdW1lZA== 44106\nIGZvb3RwcmludHM= 44107\ndmVkYQ== 44108\nIHN0ZXJvaWRz 44109\nIGZsYW1pbmc= 44110\nIEVsbGVy 44111\nIGVya2VubmVu 44112\nw6R0emVu 44113\nIGxpZmVjeWNsZQ== 44114\nIERPVQ== 44115\nIEthcmVuYQ== 44116\nIEd1ZXJyYQ== 44117\nIHNpbmlzdGVy 44118\nIHBvZMOpaXM= 44119\nIHBhcmFi 44120\nIG9rbw== 44121\nIG1hdMOpcmk= 44122\nIGNhcmlj 44123\nc29uYXJv 44124\nIHByYXRpY2FtZW50ZQ== 44125\n0YPRgdCw 44126\nIGNvbXVucXVl 44127\nIHZpZ2lsYW50 44128\nIHJlZ2ltZXM= 44129\nIFNob290aW5n 44130\nIHJhaWRz 44131\nIE5vcmE= 44132\nIFdpZWRlcg== 44133\nbWVucw== 44134\nINGB0L7QtA== 44135\nIOqyveyasOyXkOuKlA== 44136\nINCy0YXQvtC0 44137\nIGF1dG9iaQ== 44138\nIFNjaG4= 44139\nIFJvYmJpZQ== 44140\nIEZpdG5lc3M= 44141\nINC60L7QvdGE 44142\nIHBlbmd1aW4= 44143\n0LzQvtGC0YDRjw== 44144\nINC80LjQvdC40Lw= 44145\ncGxheXM= 44146\nIGRlbGVnYXRlcw== 44147\nTWVy 44148\nIHNpc3RlbQ== 44149\nIE1pY2hhZWxz 44150\nbWFsZQ== 44151\n2KfYuQ== 44152\nIGPDoWNo 44153\nIEjDpA== 44154\nINeZ15XXk9ei 44155\nIHN1cGVycG93ZXI= 44156\nIHN0cm9u 44157\nIHJvdmVy 44158\nIGTDqXBlbmQ= 44159\nIHJldGlyaW5n 44160\nIHZhbXBpcmVz 44161\nIG1lcmRl 44162\nIENoYW5naW5n 44163\nIHRhbWU= 44164\nIHNwb2tlc3BlcnNvbg== 44165\nIGNheQ== 44166\nIGZsaXJ0aW5n 44167\nIEdyw7Y= 44168\nIHfDpHI= 44169\nIHd5Yg== 44170\nIGNvZXVy 44171\n4bqhbmg= 44172\nIOyZgOyEnA== 44173\nIGNvbm5haXM= 44174\nIEh1bmRyZWRz 44175\nIEJlYQ== 44176\nIM6xz4A= 44177\ncHJ1Y2g= 44178\nIHNvY2llZGFkZQ== 44179\nIFdoaWxzdA== 44180\nIEthaXQ= 44181\nZXNwYWNl 44182\nIGNoaWE= 44183\nIEVybQ== 44184\nIOuwlOq/ 44185\nIGZlbmNlcw== 44186\nIE1vcnRhbA== 44187\n6rKB 44188\nINCz0YDQsNGE 44189\nIEhvbWVsYW5k 44190\nIEpVTg== 44191\naXNzdA== 44192\nIHBhcmxhcg== 44193\nIHNwb3J0eQ== 44194\nw6lv 44195\nIGRlZXBlbg== 44196\nIEJlaGF2aW9y 44197\nIGVycmFuZA== 44198\nIHJvdGFyeQ== 44199\nIFdlbGxpbmd0b24= 44200\nV2luZA== 44201\nIG1lc2VsYQ== 44202\n4bqjbmc= 44203\naWVuZGU= 44204\nIGV4Y2VsbA== 44205\nIEdlbml1cw== 44206\nIEVkdWFyZG8= 44207\nIMWfdW51 44208\nIMSwc3RhbmJ1bA== 44209\nIHByb2R1dG8= 44210\nIOOFjuOFjg== 44211\nT0ZG 44212\nIHdvbGx0 44213\nIOuJtOyKpA== 44214\nIGxhc3M= 44215\nIGhlcnR6 44216\nIGFyb21hdGlj 44217\nINC30LLQvtC9 44218\nIGF1dG9j 44219\nIEx1c3Q= 44220\nIDExMg== 44221\nIM6X 44222\nIHJldmlld2Vycw== 44223\nIHJlY2VwdGl2ZQ== 44224\nw6JuZA== 44225\nb2dsbw== 44226\nIOyVhOuLmQ== 44227\nIG5nbw== 44228\n0ZbRgtC4 44229\nw6V0 44230\nY29ubw== 44231\nIHRla3Jhcg== 44232\nIOyjvOqzoA== 44233\nIGdlbG1pxZ8= 44234\nIGJlZHRpbWU= 44235\nIEFyZ2g= 44236\nQURB 44237\nINCz0L7RgNC+0LTQsA== 44238\nIMSH 44239\nIGFsbGlhbmNlcw== 44240\nZ2lnZ2xpbmc= 44241\nIHllcmRl 44242\nIHNwaWVz 44243\nIGd1dGVz 44244\nw6dp 44245\nIGFsbHRpZA== 44246\nIExhaA== 44247\nnpDr 44248\nIGRva8WCYWQ= 44249\n2YjZig== 44250\nIHRveGljaXR5 44251\nIGNhbmNlbGxhdGlvbg== 44252\nIDE5NTg= 44253\nZHJv 44254\nIOyekeydgA== 44255\nIE1vdG9yb2xh 44256\nIG11bHRpbg== 44257\nIGVudGh1c2lhc3Rz 44258\nIE1pZ2h0eQ== 44259\nIENvY29udXQ= 44260\nOuOAjA== 44261\nIFBpY3R1cmVz 44262\nIHNhbmdyZQ== 44263\nIGJsaW5raW5n 44264\nb2xlc29tZQ== 44265\nIOyKpO2DgOydvA== 44266\nRlA= 44267\nIGJvb21pbmc= 44268\nINC00LXRgdGP0YI= 44269\nIHJhdGNoZXQ= 44270\nIHRpbWVsaW5lcw== 44271\nbGVuZXNz 44272\nIGNhZ2Vz 44273\nIEdvb2RuaWdodA== 44274\nb21ldGltZXM= 44275\nIGN1bm5pbmc= 44276\nIFJpc2s= 44277\ndWxlZA== 44278\nZGFkZQ== 44279\nIHByYXRh 44280\nIGd1c3RhcsOtYQ== 44281\nYW11cw== 44282\nIEppbnBpbmc= 44283\nIGVzdHJ1dA== 44284\nIGRlc2NvYnJpcg== 44285\nIE3EgQ== 44286\nIEFsbGFu 44287\nINec16c= 44288\nIHByZXNlcnY= 44289\nIFN0cmF3YmVycnk= 44290\nxI8= 44291\nTHU= 44292\nIGtybw== 44293\nIFJlcG9ydHM= 44294\n7IWU7JW8 44295\nIHZhbHQ= 44296\nIHBvdXZhaXQ= 44297\nIGFwcGFy 44298\nIEJvbmU= 44299\nIHByZWZlcmFibHk= 44300\nIFJlcMO6YmxpY2E= 44301\nIGhlcnpsaWNo 44302\nIGNoaW1uZXk= 44303\nIMOnZXY= 44304\nIHZpc2Fz 44305\nIHZlcnI= 44306\nIGN1bHRpdmF0aW9u 44307\nIEFybWVuaWE= 44308\nINCy0LTRgNGD0LM= 44309\nIGNvY2tybw== 44310\ncmV0Y2hlZA== 44311\nYXJ0eg== 44312\nINC70Y7QtNGP0Lw= 44313\nIHBvbMOtdGljYXM= 44314\nIFBhbno= 44315\nIEFLQQ== 44316\nIOuIjOufrA== 44317\nIGVycm8= 44318\nIGNhbXBlcg== 44319\nIDEwMg== 44320\n4KS4 44321\nZG9uZQ== 44322\nIGhvYXJk 44323\nINCf0L7RgtC+0Lw= 44324\namVvbmc= 44325\nIGRlc3Rh 44326\ncGFr 44327\nIGluaW0= 44328\nIGdyb3dlcnM= 44329\nIE1lc3NhZ2U= 44330\nIGVsZWN0b3I= 44331\nZW5nYWdl 44332\nIEZvcmJlcw== 44333\nIENpbmNpbm5hdGk= 44334\nIGRpZmbDqXJlbmNl 44335\nZGY= 44336\nIHNwYXI= 44337\nIGF3YWl0cw== 44338\nIFVTU1I= 44339\nIFJpc2luZw== 44340\nIEhvxZ8= 44341\nIGZvb3Rpbmc= 44342\nIGNvbmRpY2lvbmVz 44343\n0YLQvtGA0L7Qsg== 44344\nIGNsaW5pY2lhbg== 44345\nIERpc2t1c3M= 44346\n16jXkg== 44347\n16U= 44348\naXRlaXQ= 44349\nZ3Jlbg== 44350\nIGNoYXJpc21h 44351\nIGxldWtl 44352\nIGlycml0YXRpbmc= 44353\nIGNpcmNh 44354\nIFJob2Rlcw== 44355\nIHBpb3I= 44356\nIGhhbmRpY2Fw 44357\ncm95YWJsZQ== 44358\nIHZ1bGw= 44359\nT0c= 44360\nIGluw61jaW8= 44361\naWVyaQ== 44362\nIHNwbGFzaGluZw== 44363\nIGRlbWlzZQ== 44364\nIGFzc2lzdGly 44365\n0YfRgtC+ 44366\nIGNvdmVydA== 44367\nIEd1ZA== 44368\n4LiJ 44369\na2zDpHI= 44370\nIOyekOq+uA== 44371\nIHZlcsOkbmRlcnQ= 44372\nIFJFTQ== 44373\nIENvbnZlbg== 44374\nYXRnZQ== 44375\nIHBpZXJ3c3pl 44376\nIGNsZXJneQ== 44377\nbGluZ3Rvbg== 44378\nbGl2 44379\nVlBO 44380\nINGB0L7QttCw0Ls= 44381\nIEhhdGU= 44382\nz4bOvw== 44383\nIFJlc3BvbnM= 44384\n0L7Qt9C0 44385\nIGV0bWVr 44386\nIGNoZW1pbg== 44387\n2YXYqQ== 44388\nIOqwgOyhsQ== 44389\nVHJl 44390\nIHVtYXM= 44391\nIEJ1cnRvbg== 44392\nIHBhdHJpYXJjaA== 44393\nIFNtaXRoc29uaWFu 44394\npZg= 44395\nTW9vbg== 44396\nQWly 44397\nIG1lZGlvcw== 44398\nIGVyYXNlcg== 44399\nIHdvbGx0ZW4= 44400\nIHBhcmVpbA== 44401\nIEJpbGxpZQ== 44402\n0LXRgNGC0LI= 44403\nIHBhcmxhbWVudA== 44404\nIGFnb255 44405\nIFFVRQ== 44406\nc2VxdWVudGx5 44407\nQW5vdGhlcg== 44408\nIFdoZXc= 44409\nIEFubnVhbA== 44410\nIHNlYmVu 44411\n7IOB7J2E 44412\ndmFsdWVz 44413\nnpzrp4w= 44414\nIHNpbm9u 44415\nZXJlYWw= 44416\nIEVubGlnaHQ= 44417\nIENoZW1pc3RyeQ== 44418\nIENhdGFsdW55YQ== 44419\nIGRvY3Ry 44420\nYW50b24= 44421\nIHN0dWs= 44422\nIFBsYXRl 44423\nIEthcmRhc2hpYW4= 44424\nIGZpbG9z 44425\nIFdldA== 44426\nINC/0L7Qv9GL0YI= 44427\nIHVua25vd25z 44428\nIFNjaG9u 44429\nIEJhbGR3aW4= 44430\nIHRlbGVzY29wZXM= 44431\nIEd1Y2Np 44432\nb3hpZGU= 44433\nIENvbnNlcnZhdGl2ZQ== 44434\n7ISx7J2E 44435\nIGhpbmF1cw== 44436\nUG93ZXI= 44437\nIOqxtOqwlQ== 44438\nIHByZXZhaWw= 44439\nb3JtYW4= 44440\nbWFjaGluZQ== 44441\nIDE5NDY= 44442\nIHVuYmVs 44443\nIHNjaGF1dA== 44444\nIHBpZWw= 44445\nZWVudGg= 44446\nIG9iamVjdGl2ZWx5 44447\nIGNoYWtyYQ== 44448\nYXVkaW8= 44449\nIGNoaWNvcw== 44450\nIFZhdWx0 44451\nIG1lZGljaW5hbA== 44452\nIFRhaWw= 44453\nV2hpbGU= 44454\nIGFzcGhhbHQ= 44455\nIGZyb3pl 44456\nIEVL 44457\ndW5jaGluZw== 44458\nbm9zaXM= 44459\nMjAxNQ== 44460\nIEdyaQ== 44461\nIG9kZGx5 44462\nIE3DpHI= 44463\nIEFlZw== 44464\nY29sbw== 44465\nUGFy 44466\nIOuTpOyWtOs= 44467\nIHZpbmRlbg== 44468\nIE9WRVI= 44469\nIGljZWQ= 44470\nIHNjb3Jw 44471\nIGhhYw== 44472\ncXVhbGlmaWVk 44473\nINGD0LLQuNC00LXRgtGM 44474\nZXJtbw== 44475\nSEVO 44476\nIHNvaQ== 44477\nIG11bHRpcGxlcw== 44478\nIGxheW91dHM= 44479\nIGJsaW5kbmVzcw== 44480\nIEJvd3Nlcg== 44481\nINC/0L7QtNGC 44482\nIMOO 44483\ndmVudGlvbmFs 44484\nIG1hdGE= 44485\nbWFkxLE= 44486\nIGdlZXo= 44487\nIGNhZGVuY2U= 44488\nIHdhxbxuZQ== 44489\nIENocmlzdGll 44490\ndmVuZ2U= 44491\nQ2FsbA== 44492\nIHR1cm5hcm91bmQ= 44493\nIGJsb2I= 44494\nINCv0Lo= 44495\nIFZvaWNlb3Zlcg== 44496\nIHBlcmls 44497\nIEphaW1l 44498\nIEhPWQ== 44499\nbGFuZQ== 44500\nIHNlYmVs 44501\nIER1bw== 44502\nIEhpc3RvcmljYWw= 44503\nIGRuaQ== 44504\nIGdlbWE= 44505\neWs= 44506\nIHNhYmVt 44507\n4bqvbmc= 44508\nIHZhcnM= 44509\nIFJvbm5pZQ== 44510\nIFJvbmFsZG8= 44511\nIFBlcnF1w6g= 44512\nbnNpbm4= 44513\naGFpcg== 44514\nIHJlbGVudGxlc3M= 44515\nIGx5bg== 44516\nIHRyYXZlbGVy 44517\nbmluZQ== 44518\nIGFudGlt 44519\nIOy8gA== 44520\nIHNub3diYWxs 44521\nINGF0LDRgNCw0LrRgtC10YA= 44522\nIGludGVybnM= 44523\nIGNvbnN0aXR1ZW5jeQ== 44524\nINCd0LDQvA== 44525\n15zXnA== 44526\nVkVM 44527\nIHZpa3RpZ3Q= 44528\nIGFwb3lv 44529\n2YTYqA== 44530\nIGphcmQ= 44531\nIGhlaWdodGVuZWQ= 44532\n0YDQvtGB0YI= 44533\nIFNNSVRI 44534\nINC00LXQu9Cw 44535\nIHJlcGFpcmluZw== 44536\nIHJpZ3Q= 44537\nIFNoZWlraA== 44538\nIEJyaXRuZXk= 44539\nIGV2ZXJ5dGltZQ== 44540\nIGFkdmVudHVyb3Vz 44541\nb2NrZXk= 44542\nZXJudA== 44543\nIGF0YXF1ZQ== 44544\nIEFsdGVybmF0aXZlbHk= 44545\nZWZmZWN0 44546\nIHBhbGF2cmFz 44547\nIEVsbGlvdHQ= 44548\nIHLDqXVzc2k= 44549\nIGh5cGVydGVuc2lvbg== 44550\nIE1hbnVhbA== 44551\nIHByb3BoZXRpYw== 44552\nIGhhbmRj 44553\n0YzQtQ== 44554\nIHJlZnJhaW4= 44555\nIFNxdWlk 44556\n7J6h 44557\nINC60L7QvNCw0L0= 44558\nw6RsbGVu 44559\nIGxsZWfDsw== 44560\nIGJhc2g= 44561\naW9ueQ== 44562\nINGB0LrQu9Cw0LQ= 44563\nINC60LDQsQ== 44564\nIGNhcmVsZXNz 44565\nIFBvb2w= 44566\nIHRyw6Fz 44567\nIGZpbHM= 44568\nIFNjaHI= 44569\nIHNwcmF3ZA== 44570\nIE1vbmF0ZW4= 44571\nIHVuZm9yZ2V0dGFibGU= 44572\nIENvdHRvbg== 44573\nIGluY29udmVuaWVudA== 44574\nIFJY 44575\nb3Jpcw== 44576\nIGh1bWJsZWQ= 44577\n16rXlw== 44578\nINii2b4= 44579\nIGluY3Jlw60= 44580\nIEtvbW1lbnRhcmU= 44581\ncmFjacOzbg== 44582\nIHZhbnRhZ2U= 44583\nIFNlYWw= 44584\nIOydtOqxsOulvA== 44585\nIGpvdWU= 44586\nIOyYpOuemA== 44587\nINC40YHQv9GL0YI= 44588\nb2Jlbg== 44589\nIGdyYXRl 44590\nIGNvbnRyb2xl 44591\nIFBlcmN5 44592\nxYJhZGE= 44593\nIHNpbXVsdGFuZW91cw== 44594\nIHByb3RvdHk= 44595\nIGdyb8OfZXI= 44596\nIGJld3Vzc3Q= 44597\naW5pemk= 44598\nIHBhc3NpZXJlbg== 44599\nIEhhcHBpbmVzcw== 44600\nc2hp 44601\nZ2VodA== 44602\nIHN0YXRpb25lZA== 44603\nIEVyZ2Vibmlz 44604\nIGRpcmVjdGFtZW50ZQ== 44605\nIHN1cnZpdmVz 44606\nIHBlcnNvbmVz 44607\nQkVSRw== 44608\nIHZvbWl0aW5n 44609\nIGNvbmhlY2Vy 44610\nIGFkam91cg== 44611\nIENpdmlj 44612\ncGVp 44613\nYnVyc3Q= 44614\nIOuLpOuLiA== 44615\n6Y8= 44616\nIHNsZWQ= 44617\nIHBsYXRhZm9ybWE= 44618\nIFNlY3Q= 44619\nIERlZmlu 44620\nw6lub20= 44621\nY2huZXQ= 44622\nIHByb2ZpdGFiaWxpdHk= 44623\nIGVycmVpY2h0 44624\n4buPaQ== 44625\nY2F0aW9u 44626\nIOyngOq4 44627\nIHBlcmRyZQ== 44628\nIGZlbG9ueQ== 44629\nIDE5NTc= 44630\nIHVuc3VjY2Vzc2Z1bA== 44631\nIG5hZ3lvbg== 44632\nIGVsYXN0aWNpdHk= 44633\nIGZhY2FkZQ== 44634\nIGVhcnRobHk= 44635\nINCw0LzQtdGA0LjQutCw0L0= 44636\nIGNvbm4= 44637\nY2xh 44638\nRHU= 44639\nIHBvbGl0aXF1ZXM= 44640\nIGhhbG8= 44641\naWFudGVz 44642\nINC80L7QtdC5 44643\ndG9uZXM= 44644\nZWxpZXI= 44645\naHRha2luZw== 44646\nIHdpY2h0aWdl 44647\nIGFubm8= 44648\nIExvaw== 44649\naWxsaW9ucw== 44650\nIHZpdmVy 44651\nIHNvbGNoZW4= 44652\nIHN1Zg== 44653\nIFNhbHo= 44654\nIE52aWRpYQ== 44655\nenVnZQ== 44656\nIFNwaWtl 44657\nVmlkZW8= 44658\nIHR3b3I= 44659\nIEFsYQ== 44660\nIGhhbnlh 44661\nIEFkbQ== 44662\n7J21 44663\nIFBhdGllbnRlbg== 44664\nIE9uaW9u 44665\nIEtvYmU= 44666\nIFNjZW5l 44667\nIFJhc2g= 44668\n0YDQsNGB0YI= 44669\naXN0YW5p 44670\nR2VuZXJhbA== 44671\nbGV5ZQ== 44672\naW1iYXA= 44673\nIGNvbmNlYWxlZA== 44674\nIEZyaWRheXM= 44675\nIFdvb2w= 44676\nINC90L7QstGL0YU= 44677\n2LTYsQ== 44678\nIOqysOqzvA== 44679\nIGplZG9jaA== 44680\ntOyLnA== 44681\nk6Trj4Q= 44682\nIOyepeuCnA== 44683\ndWt0 44684\nTG91 44685\nIOuoueyWtA== 44686\nIEV4cGVjdA== 44687\nINC00L7QvNC+0Lk= 44688\nIGlycmVzcG9uc2libGU= 44689\nIGFjZXJjYQ== 44690\nIFp1c3Q= 44691\n16jXmA== 44692\nVUk= 44693\nIHlvdXR1YmVycw== 44694\nIFBvc2l0aXZl 44695\nIHNvY2lvZQ== 44696\nIHNuYXRjaA== 44697\nIHJlZnJlc2hlZA== 44698\nIG5vbWluYXRpb25z 44699\nIFBhdHQ= 44700\nIG9ic29sZXRl 44701\nIGRlbWnFnw== 44702\nb3JtdcWf 44703\nIOyGlOynge2eiA== 44704\nIGZsYQ== 44705\nIGNyYXppZXN0 44706\nIFppZQ== 44707\nIFTDug== 44708\nemVw 44709\naWNlbQ== 44710\nIOupi+yeiA== 44711\nIGN5bmljYWw= 44712\nIHRyZXNw 44713\nIGNyYXo= 44714\n1aXV 44715\nIG5lbGxl 44716\nIG1waA== 44717\nIE5lcmVk 44718\nIEtvYg== 44719\nIEVjaw== 44720\nqLjri4g= 44721\nSmFu 44722\nINCi0L7Qs9C00LA= 44723\nIGRlY2k= 44724\nIFZvZw== 44725\nIGJ1YmJsaW5n 44726\nw7ph 44727\nIHByb2R1Y3Rvcw== 44728\naWJlcmFs 44729\nIHJlcGxpY2F0ZWQ= 44730\nIEltcHJvdmU= 44731\naWxsYXJ5 44732\nQ2hh 44733\nIHLDqWR1 44734\ng5DtlZjrqbQ= 44735\nIGNvbm5vdA== 44736\nIEtyaXQ= 44737\nINC00YPRhdC+0LI= 44738\nIHRyZWFkbWlsbA== 44739\nIFBX 44740\nINC30L7QstGD0YI= 44741\nIGNsYW1z 44742\nIGRyYWZ0aW5n 44743\nIDE5NTY= 44744\ndW50YQ== 44745\nIGV4cGVuZGl0dXJlcw== 44746\nIEhvb3Zlcg== 44747\nV09P 44748\n0YjQtdC1 44749\nIGRlZHVjdGlvbg== 44750\nbW9uYXJ5 44751\nIHJlY2li 44752\nIHBvdm8= 44753\nIOuNlOs= 44754\nIFBBTA== 44755\nIEJsb3c= 44756\nIHd5cA== 44757\nIGRlc3RhYw== 44758\nZGVhbA== 44759\nR3JhZW1l 44760\nIG7DqWNlc3NhaXJl 44761\nIGRhbW5lZA== 44762\nIDE5Mzg= 44763\nIOyLpOygnOuhnA== 44764\nIHRyb29w 44765\nIGluc2lnaHRmdWw= 44766\nIFRK 44767\nINC+0YHQsg== 44768\nIGZpZGVsaXR5 44769\nIFNraXA= 44770\nIE1heW8= 44771\n66ed 44772\nYXBwZQ== 44773\nIGJsYXM= 44774\nIFdZ 44775\nIEdO 44776\nY3Rhcg== 44777\nU3U= 44778\nIGN1ZW50 44779\naGV3cw== 44780\nIGNvcnBzZXM= 44781\nQWJz 44782\nIHdhc3Rld2F0ZXI= 44783\nIGNpZWs= 44784\nIE9udQ== 44785\nIGV4cGxvc2l2ZXM= 44786\nIGFybWE= 44787\nIFNURVBIQU4= 44788\ncG9saXRpaw== 44789\nIE9zYWth 44790\ndGHFgg== 44791\nIHlhcMSxeW9y 44792\nIGl6cXVpZXI= 44793\nIGJlbGV6YQ== 44794\nIFd5YXR0 44795\nIHN1aw== 44796\nIHNwZWNqYWw= 44797\nIGRhbmtl 44798\nd2hpc3RsZQ== 44799\nIGbDrXNpY2E= 44800\nIEhhcnJpZXQ= 44801\nIOyVhO2MjA== 44802\nIHdpbGxrb21tZW4= 44803\naXBpbmc= 44804\nINGB0LzQvtGC0YDQuNGC0LU= 44805\nINC80L7QttC10YjRjA== 44806\nIGluYWNjdXJhdGU= 44807\nIGFycm9nYW5jZQ== 44808\nIFJlbW8= 44809\nzrPOrA== 44810\nYXNzZWQ= 44811\nIGRlbGl2ZXJpZXM= 44812\nIHN0aW5reQ== 44813\nINC/0LXRgNC10LY= 44814\namF5 44815\nIHRyYW5zaXRpb25hbA== 44816\nIHJlcmU= 44817\nIE5HT3M= 44818\nIEFUTQ== 44819\n2K7Yqg== 44820\naW9sb2d5 44821\nINCy0LvQsNC0 44822\nIHNjaG1l 44823\nIFNoaW5l 44824\n7JWh 44825\ncGFudHM= 44826\nIHNlcmdl 44827\nIHNlbmhvcg== 44828\nIGFiZHVjdA== 44829\nIEJyeWFudA== 44830\nVkVT 44831\nIGF3YWtlbmVk 44832\nIExheg== 44833\ncm9wb2xpcw== 44834\nIExhbw== 44835\nIHZpbGxh 44836\nIHN1bW1lcnM= 44837\nIGVudGhhbA== 44838\nIDE5NDk= 44839\nVmlh 44840\nIOyWtOyo 44841\nIHRlbmRvbg== 44842\nIHZpb2xldA== 44843\nIGludGVsbGVjdHVhbGx5 44844\nIGJvdW5jZWQ= 44845\nYXJhdXM= 44846\nIDE5MTk= 44847\nIHZyYWFn 44848\nIHNwZWw= 44849\nIFNjaHdhcg== 44850\nU2NvdHQ= 44851\nIEluZG8= 44852\nIOunnQ== 44853\nIGNhbm9uaWNhbA== 44854\nIElLRQ== 44855\nIHRoYXTDrXM= 44856\nIG1lbGxhbg== 44857\naWdtYXQ= 44858\nQ291bGQ= 44859\nLi4uPyk= 44860\nIGZvYXJ0ZQ== 44861\nIEt1bWFy 44862\ncmVuZG8= 44863\nIMOpbMOp 44864\n4LQ= 44865\ndmFsdWF0aW9u 44866\nY2FzZXM= 44867\nIGludHVpdGl2ZWx5 44868\naG9uZw== 44869\nZXR0ZWQ= 44870\nIHNvdXZlbg== 44871\nIG1vcmI= 44872\nIGNvcnM= 44873\nIE5W 44874\nIEhhc2Fu 44875\naWV2ZWQ= 44876\nIOyngOq4iOydgA== 44877\nIGR1bXBsaW5n 44878\nIGNvbnRyw7RsZQ== 44879\nIGFtYmlndWl0eQ== 44880\nIGNvZw== 44881\nIFNjcmlwdHVyZXM= 44882\nIGNhaQ== 44883\nIGJldmVy 44884\nIGh1aXM= 44885\nIGFpbWU= 44886\nIGVya2zDpHJlbg== 44887\nIExN 44888\nIEZleQ== 44889\n4K6x4K6k 44890\nIHN1cGVydmlzZWQ= 44891\nIGpld2U= 44892\nc3Bs 44893\nINGG0LXQvdGC0YA= 44894\nIGNvbGxpc2lvbnM= 44895\n2YTZgQ== 44896\nIEhvZ3dhcnRz 44897\nIER1cmhhbQ== 44898\n15XXow== 44899\nIHBob3NwaGF0ZQ== 44900\nIG92ZXJzZWU= 44901\nIGluc3BlY3Rpb25z 44902\nIGJyaW5j 44903\nIFphaw== 44904\nIHBheW9mZg== 44905\nIGNoYXVk 44906\nIEh1bmdlcg== 44907\nw6Nvcw== 44908\ndmly 44909\nIGZpYW5jZQ== 44910\nIGJvdWc= 44911\nbGl2ZWQ= 44912\nY3J5 44913\nIGpvaW50bHk= 44914\nIGdpcmxmcmllbmRz 44915\nIE5leHVz 44916\npqzqsqDsirXri4jri6Q= 44917\nIEt3YW5n 44918\nxYLEmQ== 44919\nIE5lZGVu 44920\naWVjZQ== 44921\nIGluc2VydGluZw== 44922\nIE11bW15 44923\nIEdsb2Jl 44924\nIGxlZQ== 44925\nIGdlcm1hbg== 44926\nIGNyZWFtcw== 44927\nYWNobw== 44928\nIGNoxrBh 44929\nIEdhbGlsZQ== 44930\nIGbDvHJz 44931\nIGVzdGl2ZXI= 44932\nY2lkb3M= 44933\nQ2hyaXN0aWFu 44934\nIGxvcnNxdQ== 44935\nIGN1dGVzdA== 44936\ndmFsZQ== 44937\nINC60YDQtdC/ 44938\nIHdhcnk= 44939\nIHNsaWNpbmc= 44940\nIGVzcGVyYW5kbw== 44941\nIFZhbmRlcg== 44942\nIERlaXhh 44943\nIDE5NTQ= 44944\nIG3Ds3dpxIU= 44945\n0ZbRlA== 44946\nIHRvb2xpbmc= 44947\nIHJlc3Rvcg== 44948\nIHBvc2ljacOzbg== 44949\nIGludGVudGFy 44950\nIEFwYWNoZQ== 44951\nT1VM 44952\nINmI2Kg= 44953\nIG1hdGnDqHJl 44954\nIGxpbmVu 44955\nIGVzdHJhdMOpZw== 44956\nIE11dHRh 44957\nIHBhcnRpbmc= 44958\nIG1pbmltaXppbmc= 44959\nIGFwcHJlbmRyZQ== 44960\nINCw0L3Qs9C70LjQuQ== 44961\nIERvbw== 44962\nIEZpcmVmb3g= 44963\nY8OzbW8= 44964\nIGdlb3BvbGl0 44965\nIG1ha2Fu 44966\nIG1vZ2VsaWpr 44967\nIM+AzrXPgc65 44968\nIGPhu6k= 44969\nIGluc3RhbGxlcg== 44970\nIGRpYnVq 44971\nIEhlYXRo 44972\nbG9vcA== 44973\nIEJyb2tlbg== 44974\nSFlVTg== 44975\nc2hlbGY= 44976\nIGZpemVy 44977\nIGVuaGFuY2Vz 44978\nINC00L7RgdGC0Lg= 44979\nIFBVQg== 44980\nIEtvbGxlZ2lu 44981\nIGF0dGFpbmVk 44982\nxL4= 44983\nIG1pc3RyZXNz 44984\nIE9mdGVudGltZXM= 44985\n157Xmded 44986\nIGJld2U= 44987\nIFNvcmE= 44988\ncmF1ZW4= 44989\nYmF1bQ== 44990\nIHJvbGxlcnM= 44991\nIG1lcmluZw== 44992\nIFBBQw== 44993\nINC90ZY= 44994\nIFLDqXB1YmxpcXVl 44995\nINGC0YDQsNCy 44996\nIFZhbmd1YXJk 44997\ndWNpb25lcw== 44998\nIOustOuMgA== 44999\nIGdvdXI= 45000\nr6Q= 45001\nIM+J 45002\nIHNhdW5h 45003\nIHBlaW5l 45004\nIFZhbGVyaWU= 45005\nIFNpa2g= 45006\nZmVuZGltaXo= 45007\nYmVybw== 45008\nINGH0Lg= 45009\nIGRvxZt3aWFk 45010\nIEV1cm9z 45011\nIGNvbW1lbnRhaXJlcw== 45012\nIHR3ZWFrcw== 45013\nIEZhc3Rlcg== 45014\nINGA0LDRgdC6 45015\nIHByb2dyZXNzaXZlbHk= 45016\nIEV1Y2g= 45017\nYm9ybw== 45018\nIEluZ3JlZA== 45019\nQ2Fw 45020\nIHVuY2hlY2s= 45021\nIOyYpOuluA== 45022\nIHdyZQ== 45023\nIEZU 45024\nw7ZydW5n 45025\nIG1lbW9yaXplZA== 45026\nIERpbm5lcg== 45027\nIFBoZXc= 45028\nb3VibA== 45029\nIHB1dGE= 45030\nIGFkbWl0cw== 45031\n0LXQt9C00LU= 45032\nb3BvZA== 45033\nIHBhbmRh 45034\nIGhpbmdlcw== 45035\nY2lwZQ== 45036\nIHRyYW5zYWN0 45037\nIHBvZGlh 45038\nIHBpY3M= 45039\nIGNyaXRlcmlvbg== 45040\nIE9yY2hlc3RyYQ== 45041\nIEJsb2c= 45042\nIHNvbGVtbg== 45043\nIFBpeGFy 45044\nVGhyZWU= 45045\nINCy0L3QuNC3 45046\nIFZvbHVudGU= 45047\nIFNhdmFnZQ== 45048\nIFBWQw== 45049\nIENhZg== 45050\nIHd5a29u 45051\nIGdyYWRlcnM= 45052\nIGNyb3VjaA== 45053\nIGNsaWNoZQ== 45054\nIHNveWJlYW5z 45055\nIE1VUg== 45056\nIEdvbnphbGV6 45057\nIE1pbWk= 45058\nIEJvbHNvbmFybw== 45059\nIGRpYXBocmFn 45060\nIGJpbGFuZw== 45061\n65CY64qU 45062\nIHJlZ3VsYXRpbmc= 45063\nTWM= 45064\nSnVkZ2U= 45065\nINC90L7Qtg== 45066\nIGpha8SF 45067\naXRlc3Nl 45068\nIFdpag== 45069\nIGxhdGE= 45070\nZ3JvYW5pbmc= 45071\nUE9TSU5H 45072\nINeQ15XXqteV 45073\nIGhhZ2E= 45074\nIGdyb3VuZGluZw== 45075\nIHZpb2xlbnRseQ== 45076\nIHRpbGxz 45077\nIGVuZ2Fn 45078\nIEhvbGxvdw== 45079\nINC/0L7Qv9GD0LvRj9GA 45080\nIHdwcm93YWQ= 45081\nIHJlcGxhY2Vz 45082\nIGZsdW9yZXNjZW50 45083\ndXJnaWNhbA== 45084\naWdnbHk= 45085\nIFRyYWRpdGlvbmFs 45086\ndHRl 45087\nINmE2Yc= 45088\nIHBob3NwaG9ydXM= 45089\nIGFwcm9u 45090\nIFdhdGVycw== 45091\nIEt1bHR1cg== 45092\n0LDQstCw0Lk= 45093\nIG9saXZlcw== 45094\nINeU15DXnA== 45095\nIHRlaWx3ZWlzZQ== 45096\nIHNlbmNpbGw= 45097\nIHByZW5kcw== 45098\nIG5hcnJvd2Vy 45099\nIGrDpHR0ZQ== 45100\nIEluZm9ybWF0aW9uZW4= 45101\n7IOB7J20 45102\nIHN0YXJ2ZQ== 45103\nIGZyaWNr 45104\nIEJld2Vn 45105\n4KSy 45106\nIGRvbHBoaW4= 45107\nIExBVUdIVEVS 45108\nIElOVEVSVklF 45109\nIHlhbmzEscWf 45110\nIHRvcnBlZG8= 45111\nIHNob3J0YWdlcw== 45112\n7J2065Oc 45113\nxLFsZMSx 45114\nIHBhd3M= 45115\nIG96b25l 45116\nIGN1bHRpdmF0ZWQ= 45117\nIEZvdA== 45118\nIG5vdG9y 45119\n0L3QvtC3 45120\nINC60L7RiA== 45121\nIHRvdWNoc2NyZWVu 45122\nIEFsbHk= 45123\nIOunm+yeiOyWtOyalA== 45124\nINCh0LXRgA== 45125\nINCy0L/QvtC70L3QtQ== 45126\nIHBhcHJpa2E= 45127\nIER1c3Rpbg== 45128\nIGVmZWN0bw== 45129\nIG9waW5p 45130\nIG11dXQ= 45131\nIGjhu41j 45132\nIGludGVyamVjdA== 45133\nxJl0 45134\nIGJ1dHRz 45135\ndXJleg== 45136\nIFBpa2U= 45137\nIEhvaw== 45138\nIEd1aW5lYQ== 45139\nIENhdGhlZHJhbA== 45140\nIDE0MDA= 45141\nQ3Jh 45142\nKyw= 45143\n66eb 45144\ns7Trj4TroZ0= 45145\nYWJ5cmlu 45146\nIHZpZGVvZw== 45147\nINC+0YDRg9C2 45148\nIHXFvg== 45149\nIGJ1c2NhbmRv 45150\nIEFzc2lzdGFuY2U= 45151\nIG1lbGhvcmVz 45152\n7KG0 45153\nIOuBvA== 45154\nIFJK 45155\nINiq2YU= 45156\nIG9taW4= 45157\nIG1vdG9yY3ljbGVz 45158\nIFNhcHA= 45159\nIHN1cHBseWluZw== 45160\nIEFsZ3Vu 45161\nIGFlcm9zcGFjZQ== 45162\n16LXnA== 45163\nb2NjdXA= 45164\nbGVpc3Q= 45165\nIOqxsOuKlA== 45166\nIGNvbXBsZXRh 45167\nYnJlcw== 45168\nISg= 45169\nINCf0YDQtdC0 45170\nIGRpc2FkdmFudGFnZWQ= 45171\nIEF0dGVuZA== 45172\nIEp1ZGFo 45173\n4buLY2g= 45174\neWxlbmU= 45175\nYWN0bHk= 45176\nIHNldHVwcw== 45177\nIGFtbW9uaWE= 45178\nIFNjaHdlaXo= 45179\nIFNoYW1l 45180\nIGJhbmRl 45181\nIEZ1ZWw= 45182\nIHRyb3VibGVzb21l 45183\nIG51bWVybw== 45184\nIE1PTQ== 45185\nINC/0YDQtdC00LvQsNCz 45186\nbWVudGlvbmVk 45187\nINCx0L7Qu9GM0YjQvtC1 45188\nIFZpa3Rvcg== 45189\nIFN0eWxlcw== 45190\nIGNydWNpZmllZA== 45191\ncnVjdHVyZWQ= 45192\nZW52aXJvbg== 45193\nIG1vcmFscw== 45194\nIG1lZGl0YXRpbmc= 45195\nIGF4aWFs 45196\naXNhbmNl 45197\nIEFic3Q= 45198\nR3JlZW4= 45199\nIOqxtOw= 45200\nIHF1YWRyYW50 45201\nIHBlcmdp 45202\nIGNhbWVyYW1hbg== 45203\nIFNlcXU= 45204\nIHBhdXNlZA== 45205\nIExhdWdoaW5n 45206\n6reA 45207\nPy4u 45208\nIMW7ZQ== 45209\nIHBlcm1pdGly 45210\nIGRldGVjdG9ycw== 45211\nIEhVRA== 45212\nYXZhbA== 45213\nIOyXrOq4sOq5jOyngA== 45214\nIGh1YnM= 45215\nIGJlc3RpbW10 45216\nINCx0YPQtNC10YLQtQ== 45217\nSU5URVJQT1NJTkc= 45218\nIHRlbmdhbg== 45219\nIGNyYXZl 45220\nIEJ1bmRlc3JlZ2llcnVuZw== 45221\nIEJsb29keQ== 45222\nIHVzYWJpbGl0eQ== 45223\nIEVhcw== 45224\nIMSR4buZbmc= 45225\nIDE5NTU= 45226\nIGtyaWVnZW4= 45227\nIGhhYml0dWFs 45228\nIGVzc2VudGlhbHM= 45229\ncmltaW5hbA== 45230\nIHJvb21tYXRlcw== 45231\nINC/0LXRgNC10YXQvtC0 45232\nIG5naGk= 45233\nIG1lbmluZw== 45234\nIFN5bXBob255 45235\nIEh1Zw== 45236\nYWdnaQ== 45237\nIHdpZWQ= 45238\nIG1pdGFk 45239\ndGVlbnRo 45240\naWRhxIc= 45241\nU2F2ZQ== 45242\nIHJvYmnEhw== 45243\nIGJvdW5jZXM= 45244\nsJbsl5A= 45245\nc3RhcnM= 45246\nIHByYWdtYXRpYw== 45247\nIGNvZ25pdGlvbg== 45248\nIHdyYXBwZXI= 45249\nIHdhcnRlbg== 45250\nYWRo 45251\nIHBlbnNh 45252\nIEhlcnR6 45253\nIG7Emw== 45254\nIFJlaWQ= 45255\nIFBDcw== 45256\nIE1vbGU= 45257\nIC4uLi4u 45258\nIHByZWNpbw== 45259\nIENoYW1waW9uc2hpcHM= 45260\n6rCA6529 45261\nIHbDqXI= 45262\nIGNvcnJpZG9ycw== 45263\nIEVsZWN0cm9uaWM= 45264\nU2w= 45265\nINCw0LvQtQ== 45266\nIG92ZXJ0aHJvdw== 45267\nIGthYnVs 45268\nIFJFUw== 45269\nIEN5YmVycHVuaw== 45270\n0L7Qs9C+0LQ= 45271\nINCd0LDQsg== 45272\nIHdhbg== 45273\nIG1hbmlmZXN0YXRpb25z 45274\nIGN1YWxlcw== 45275\nIFdpc2U= 45276\nIEzDtnN1bmc= 45277\nIGV4Zm9s 45278\nIGVhcm5z 45279\n0YPRgdGC0LjRgtGM 45280\nIHNhcHA= 45281\nIEJyYXVu 45282\nIEJSQU5ET04= 45283\n7LmZ 45284\nIHNhbm8= 45285\nIEZFTA== 45286\n0YvQstCw0LnRgtC10YHRjA== 45287\n0L7QttC00LXQvdC40Y8= 45288\nIHNld24= 45289\nRnVu 45290\nIHJlY2lwcm9jYWw= 45291\nIGV4cGFuc2l2ZQ== 45292\nIFRyYWZmaWM= 45293\nIGt0w7NyZWdv 45294\nINmI2LM= 45295\nIOu5qA== 45296\ncHJvdmU= 45297\naWdhcmU= 45298\nIGxvaA== 45299\n2KfYtg== 45300\nSG9wZQ== 45301\nIGRldm90ZWVz 45302\nIEdvbQ== 45303\nIHN0ZWFscw== 45304\nIFVtcw== 45305\nIFR3aWNl 45306\naXlpbQ== 45307\nIHJoeXRobWlj 45308\nIFZvcnRl 45309\nIHByZWZpeA== 45310\nb21pbmF0aW9u 45311\nIGRhdG8= 45312\nIGN1c3RhcmQ= 45313\nIFZPSUNF 45314\nIG1lbnk= 45315\naXN0b3Jz 45316\nIO2YkQ== 45317\nIOyCtOyVhA== 45318\nIO2DhA== 45319\nIGtvcnQ= 45320\nIGFiYQ== 45321\nIFZlcmE= 45322\nZXB5 45323\nIOy5tOuplOudvA== 45324\nIHN1Ym1lcmdlZA== 45325\nIENsb2Nr 45326\nIHRodW1ibmFpbHM= 45327\nIGJvYXN0 45328\nIEZhcmU= 45329\nISFd 45330\nIMWbbQ== 45331\nIGthaWtraQ== 45332\nIFRlY2hub2xvZ2llcw== 45333\n7Jm4 45334\n0LjRgtCw0Lk= 45335\nINCw0YI= 45336\nIGtub2Jz 45337\nIHJlaWNodA== 45338\nxrDhu6NuZw== 45339\nZ2xpbw== 45340\nIOunm+ydtA== 45341\n6rCQ7J2E 45342\nIGpvdGth 45343\nIEhhbmR5 45344\nIEhhYmVu 45345\nbm91cw== 45346\nIGlubGFuZA== 45347\nIGFtYXpvbg== 45348\naG9vdGluZw== 45349\nU0w= 45350\nIGxlaXN0ZW4= 45351\nfiI= 45352\nIHByb3Zva2U= 45353\nIFR3aXN0 45354\nINeR15c= 45355\nIGRlcGFydGVk 45356\n6rCc66W8 45357\nIGtvbnNl 45358\nIENhcnd5bg== 45359\n7ZWY7Iug 45360\naWRlbnRhbA== 45361\nRVNDTw== 45362\nIHR0ZW9rYm9ra2k= 45363\nIGRpemVuZG8= 45364\nxLFuZGFraQ== 45365\naW1hc3U= 45366\nYWZhcg== 45367\nIGxhbmRmaWxs 45368\nIGNvcnJlY3Rpbmc= 45369\nIGNsZWFycw== 45370\nIE51bW1lcg== 45371\nSEFN 45372\nIGNhcnRyaWRnZXM= 45373\nIERpZXNlbA== 45374\ncGFjZWQ= 45375\nIG9ibGl2 45376\nIG1veWVucw== 45377\nIFNpbm5l 45378\nIFByZWlz 45379\naWxpeg== 45380\nINGB0LzQvtC2 45381\nIGJyb2FkZW4= 45382\neGVz 45383\nIGNhcmJvaHlkcmF0ZQ== 45384\n7Zi5 45385\nc2Vvaw== 45386\nIGVjaG9lcw== 45387\nIGNlc3M= 45388\n67CU 45389\nINCx0LjQt9C90LXRgQ== 45390\nIGxsYW1hZG8= 45391\nIGVzc2VudA== 45392\nIOydvOuwmA== 45393\nIEFpcmVz 45394\ncGhlbg== 45395\nIHplYnJh 45396\nIHN5bWJvbGlzbQ== 45397\nT25jZQ== 45398\nIHJhY2tz 45399\nIEthZmth 45400\nINGB0LXRgNGM0LXQtw== 45401\nIHNpbm4= 45402\ncGljaW91cw== 45403\na2Fh 45404\nIG1vdGhlcmZ1Y2tlcg== 45405\nIGFwcHJlbnRpY2VzaGlw 45406\nIHJwbQ== 45407\nIHRheGF0aW9u 45408\nIGZ1cnJ5 45409\nIFNhY3JlZA== 45410\nINGA0LDQt9C8 45411\ncG9yYQ== 45412\nZW5nZXM= 45413\nIO2XiOs= 45414\nINGB0LjQvQ== 45415\nIHNhbml0aXplcg== 45416\nIGNyaW5nZQ== 45417\nIFNjYQ== 45418\n0L7Rh9C90L4= 45419\nIG9mZXJl 45420\nIG1lbG9kaWVz 45421\nIFZlbHZldA== 45422\nIElocmVy 45423\nIEh5YnJpZA== 45424\nIEdpb3Y= 45425\nIGlyZ2VuZHdhcw== 45426\nIGRlcGVuZGU= 45427\nIFVzZXJz 45428\nIGh1bXA= 45429\nZHJpdmluZw== 45430\nIHNm 45431\nIHJ1dGhsZXNz 45432\n4LmA4LiE 45433\nIGxlbW9ucw== 45434\nIGbDtnJldA== 45435\nIE9q 45436\nINC80LDQvNCw 45437\nIGludGVycGVyc29uYWw= 45438\nIGdldg== 45439\nIGFibm9ybQ== 45440\n0LjRgdC7 45441\nINC40L3QtA== 45442\nIGtvbnRyb2xs 45443\nIHJlZ3Jlcw== 45444\nIGxlZGdl 45445\nIGVyesOkaGx0 45446\nIFRhY3Q= 45447\nIGFycml2w6k= 45448\nIHN1YnN0YW50aXZl 45449\nIHNwb29uZnVs 45450\nendpc2NoZW4= 45451\nb29vb28= 45452\nIGNvbnRlbmlkbw== 45453\nIGJlc2w= 45454\n4buDbQ== 45455\na3Rlbg== 45456\nSmFtaWU= 45457\nIHNhbmR5 45458\n4os= 45459\nIHBhc2U= 45460\nIGRldHRl 45461\nIEJlbGdpYW4= 45462\n6rCc6w== 45463\ndWxhcmVz 45464\ncnVk 45465\naWdvcg== 45466\nIO2MrOs= 45467\nIHJlbWVkaWVz 45468\nIGJsYXN0aW5n 45469\nIFNpY2g= 45470\nINC+0LbQuNC0 45471\nIG1vbnN0cg== 45472\nIG1hbmlmb2xk 45473\nIGdsYXViZW4= 45474\nIEVTVA== 45475\nIHN0cmVhbWxpbmU= 45476\nIGxvYmJ5aW5n 45477\nIEdvdGhpYw== 45478\ndG9pcmU= 45479\nLi4n 45480\nIGTDqW1vY3I= 45481\nINC90LDQsdC70Y7QtA== 45482\nIHdzcMOzbA== 45483\nIGN6xJnFm8SH 45484\naXPDqXM= 45485\nZ2FuZ2Vu 45486\nIGJlenBpZQ== 45487\ncmVtbGlu 45488\n6rCd 45489\nU3RpbGw= 45490\nIHJlc2lkZXM= 45491\nIGdlbGVjZWs= 45492\nIHTDqWzDqXBob25l 45493\nIHBld24= 45494\nIGxlb3BhcmQ= 45495\nIGNvbXBsaW1lbnRhcnk= 45496\nIGNyaWI= 45497\nIEFuaW1hbHM= 45498\nIGdlaWw= 45499\nZXNzZWw= 45500\nIGdhcmRlcg== 45501\nIGNhdGNoeQ== 45502\nIEV0cw== 45503\nIENvbW1lcmNpYWw= 45504\nIERFTk5JUw== 45505\nIENvb3JkaW5hdG9y 45506\nIEFiaWdhaWw= 45507\nZmZmZmZm 45508\n4bqlcA== 45509\nIHBlcXVlw7Fh 45510\nIGluamVjdGlvbnM= 45511\nY2VrdA== 45512\nIHBoaWxhbnRocm9weQ== 45513\nIHB1Y2s= 45514\nIGNlbGVicmF0ZXM= 45515\nIER1bms= 45516\nIERsYXRlZ28= 45517\nzrTOrg== 45518\nZ3JhZHVhdGU= 45519\nIE1vYmls 45520\ndGlsbA== 45521\nYWNhbQ== 45522\nIHlvbGtz 45523\nIHRhbmdsZWQ= 45524\nIG1hbmlhYw== 45525\nIG9ibGlnZWQ= 45526\nIExhaW5r 45527\nIHZlcmRlcg== 45528\nIERhbW9u 45529\nIG11dGFudA== 45530\nIGhvcHBpbmc= 45531\nIHJlaW5z 45532\nIGludmVydGVy 45533\nIGNvbnRlbXB0 45534\n16DXoQ== 45535\nbGVhcm5pbmc= 45536\nTWlzcw== 45537\nINCT0L7RgQ== 45538\nIE1leWVy 45539\n6ruY7ISc 45540\n15XXoNeZ150= 45541\nYXNraW5n 45542\nIHRyaW1taW5n 45543\nIHRyZWFzdXJ5 45544\nIHNlbnRl 45545\nQXVzdA== 45546\nIFVudGVyc3TDvHR6dW5n 45547\nIENvbWVkeQ== 45548\nIEFuYWtpbg== 45549\n6bk= 45550\n0YDRg9GC 45551\nIEhhcmk= 45552\nb2dyYXBoZXJz 45553\nIG9hdG1lYWw= 45554\nIEJvdHM= 45555\nINC/0LDQu9GM 45556\nIGFja25vd2xlZGdlbWVudA== 45557\neGlj 45558\nIOq0gOyLrA== 45559\nZ2FzcGluZw== 45560\nIHRlcnJhY2U= 45561\nIG9ybmFtZW50cw== 45562\nIE1FUg== 45563\nY29tbWl0dGVl 45564\nIOyXhuyKteuLiOuLpA== 45565\nIHJpag== 45566\n6bM= 45567\n16bXnQ== 45568\nbGVtZQ== 45569\nIGxpYmVydGllcw== 45570\nIGZlbGxhcw== 45571\nIENvcHBlcg== 45572\nYmVuY2g= 45573\nIElkZWE= 45574\n4buNbg== 45575\n0YjQsA== 45576\nIHZlcnNpw7Nu 45577\nz4TOv8+N 45578\nINCc0Lg= 45579\nINC/0YDQuNC70L7Qtg== 45580\nIGJveGVy 45581\nIFRhbm5lcg== 45582\nIE1veQ== 45583\n7LmY64qU 45584\nVGhy 45585\nIHRpbmhhbQ== 45586\nIHBvbGlzaGluZw== 45587\nIGNvbnNlcXVlbnRseQ== 45588\nIGFtZW5pdGllcw== 45589\nIEtJ 45590\nIEdSRUVO 45591\nIEZyYW5raWU= 45592\n0L3QuNGC 45593\naXR0ZWw= 45594\n0YHQutC+0LU= 45595\ndXJzZWQ= 45596\nIHVwYnJpbmdpbmc= 45597\nIHRo4bup 45598\nIOyLneycvOuhnA== 45599\nIHdoaW0= 45600\nIGNoaW5lc2U= 45601\nY29uZmlkZW5jZQ== 45602\nIEplZGVy 45603\nYWpjaWU= 45604\nIFRvdXM= 45605\nIFBvd2Vycw== 45606\n4burYQ== 45607\nb3RoZXJtYWw= 45608\nINCy0YvRiNC1 45609\ncmFsZQ== 45610\n2KfYrg== 45611\nIOyngOybkA== 45612\nIMOpcGlzb2Rl 45613\nIHN1bHBo 45614\nIGVuY2FyYQ== 45615\na3JhZnQ= 45616\nYWxhcsSx 45617\nIENvbWVz 45618\nIGRpdnVs 45619\nIFJ1ZG9scGg= 45620\nIE11c2U= 45621\nIHV0ZW5z 45622\nIOyekOyjvA== 45623\nIHBhbmE= 45624\nIFZlZ2V0YQ== 45625\nIFBIUA== 45626\nIE5TQQ== 45627\nZW50aW4= 45628\nIENhcm5lZ2ll 45629\n2KfZig== 45630\nacSZY3k= 45631\nSGFycnk= 45632\nIGbEsXI= 45633\n0KHQvw== 45634\nIGdsYWRseQ== 45635\nIGF2ZXJhZ2luZw== 45636\n7ZWY6rKg7Iq164uI64uk 45637\n0LvRj9GO0YLRgdGP 45638\nINCc0LXQvdGP 45639\nIHF1b3RhdGlvbg== 45640\ncmlyZXM= 45641\naXRjaGVucw== 45642\nYXllZA== 45643\nIHVuYXR0 45644\nIFBlcmV6 45645\nINC+0YLQvNC10YI= 45646\nIHRhY3RpbGU= 45647\nIEV1aA== 45648\naXNpbmk= 45649\nYnVo 45650\nIGhhdMSxcg== 45651\nIOyeiOycvA== 45652\nIHBvbGljeW1ha2Vycw== 45653\ns7TshLjsmpQ= 45654\nYWPEsQ== 45655\nIM66zrk= 45656\nIHJlZ2lzdGVyaW5n 45657\ncmV0bw== 45658\nIFNwcmlua2xl 45659\nIEdyYW1teQ== 45660\nYXh0ZXI= 45661\nINCx0Lg= 45662\nIHNpdHRlcg== 45663\nIHByZWRpYw== 45664\nIHRoaW5seQ== 45665\nIHN0cnVt 45666\nIGFnZ3Jhdg== 45667\nIGFoYQ== 45668\n2LHYrA== 45669\nbWVsbG93 45670\nIGNvbnN0YW50ZQ== 45671\nIExhdXQ= 45672\naXN0b24= 45673\nIHRyYW5zaXRpb25lZA== 45674\nIENhbWJvZGlh 45675\nYXJ0ZWQ= 45676\nIG1pc2Y= 45677\nIFB1bmt0ZQ== 45678\njOuToA== 45679\nIHRyZW1ibGluZw== 45680\nIGdlc3Bhbm50 45681\nINi52YTZitmH 45682\nINC90LjQutCw0LrQuNGF 45683\nIOu2gOuTnOs= 45684\nINGA0LDQt9Cy0LjRgg== 45685\nIGl0Y2h5 45686\nIGNpZW50bw== 45687\nIHBsYWlucw== 45688\nIGtpdHRlbnM= 45689\nIGJhY2tsb2c= 45690\nIFByZXNpZGluZw== 45691\ncHRh 45692\nIGhhdm9j 45693\nIERhcnJpbg== 45694\nINCb0Y7QsQ== 45695\nIHNlZ3JlZ2F0ZWQ= 45696\nIGdoZXR0bw== 45697\nIGVybGVidA== 45698\nIGRydWdpZWo= 45699\nIFNpeHQ= 45700\n4Lij4Liw 45701\ndWVuY2lh 45702\nIO2VmOq4sA== 45703\nIOuGjQ== 45704\nIHJvYmk= 45705\nIHBpb25lZXJz 45706\nIG1pbGxpYXJkcw== 45707\nIFdpdGNoZXI= 45708\nIOustOyXhw== 45709\nb3Jybw== 45710\nbWFzcw== 45711\nIGRpdmVyZ2VuY2U= 45712\nIFJpdmVyYQ== 45713\nIE5vb2RsZXM= 45714\nIGVuZHJvaXQ= 45715\nIEtvc3Rlbg== 45716\nINC00YDRg9Cz0LA= 45717\nIG3DrW5pbW8= 45718\nIEthemFraHN0YW4= 45719\n2KrZhw== 45720\nINCy0L7Qt9C00YM= 45721\nIGdlc2NocmllYmVu 45722\nIE5pbA== 45723\n0YHQutC4 45724\nIEZyw7xo 45725\nIGJldmVyYWdlcw== 45726\nIEdvbg== 45727\nQXJpbg== 45728\nIEludHJv 45729\nb2NhbHlwdGlj 45730\nIGV4aGF1c3Rpb24= 45731\nIFN0YXR1cw== 45732\nIEJhdHRlcnk= 45733\nw6lzeg== 45734\no7zr 45735\nYWlyeQ== 45736\nIOuztOyXrOuTnOs= 45737\nIGRpc3Bhcml0eQ== 45738\n2Yw= 45739\nIFR1Y3Nvbg== 45740\nIGJyaWdodGx5 45741\ncHJvYmxlbQ== 45742\nIGJpb21hc3M= 45743\np4k= 45744\nIGh1cmRsZQ== 45745\nIHdhdmVsZW5ndGhz 45746\nIDw8 45747\nIHRlYW1lZA== 45748\nRkZGRg== 45749\nIFNsaW0= 45750\nb21pYWw= 45751\nIHVudmVpbGVk 45752\nIFZlcmVpbg== 45753\n2YLYtw== 45754\nZXN0cnk= 45755\nIGNsw6Fz 45756\nIGNoZWRkYXI= 45757\nIGFjY3VzaW5n 45758\nIFNjaWVudGlmaWM= 45759\nINCx0YPQtNC1 45760\nIEN5cnVz 45761\nzrXPhM61 45762\nhpPqs6A= 45763\nIOuzhA== 45764\nIGN1cmQ= 45765\nIHJlZmVycmFscw== 45766\nc2hpZnQ= 45767\nbmlrw7N3 45768\nIG1pZXI= 45769\nIGNvbmZyb250aW5n 45770\n6rKD64+E 45771\nYXds 45772\nIHRyeWlu 45773\nIOq3uOuemOyalA== 45774\nIGNoaWFy 45775\nIOyYpOuKmOuPhA== 45776\nZXNxdWU= 45777\nIG1pc21vcw== 45778\nIFNoYWs= 45779\nIHNvY2lhdXg= 45780\nIHBpxZ8= 45781\nIGtpxZ9p 45782\nIGN5YW4= 45783\naGF5 45784\nYmV3 45785\nYm9k 45786\nIM65 45787\nIE1haW5seQ== 45788\n0Y7RgtGM 45789\naGFiaXR1ZGU= 45790\nINGB0L/QvtC60L7QuQ== 45791\nIHByZWNvbg== 45792\nIE1hbmR5 45793\n8J+kow== 45794\naWxsb3M= 45795\nIGdydXBw 45796\nIGNydW1ibGU= 45797\nIGNvbnN0cnVjdG9y 45798\nZXJ2aWNlcw== 45799\nIGxpZ2h0aG91c2U= 45800\nIENvbmNlcHQ= 45801\n0LDQvdGC0Lg= 45802\nYWx0cm8= 45803\naG9wZQ== 45804\nIEFsbGVn 45805\n7Ja066W8 45806\ncGllY2Vz 45807\nb3VudGVy 45808\nIO2VmOuLiOq5jA== 45809\nIOyduO2EsOs= 45810\nIHbDqXJpdGFibGU= 45811\nIHRocmVhZGVk 45812\nYmxpbmQ= 45813\ngpjrnbw= 45814\nIHRyYXlz 45815\nIEVkaXNvbg== 45816\nIMOWeg== 45817\nIFN0ZXZpZQ== 45818\nIGxlbmRlcg== 45819\nIGJyaWdhZGU= 45820\nIGRldXRzY2hl 45821\nbXVmZmxlZA== 45822\nYmFydA== 45823\nIGluc2FuaXR5 45824\nIHNhdnZ5 45825\nIHNlbnNhdGlvbmFs 45826\nIGRlcmVjaG9z 45827\nIE1Y 45828\nINC/0YDQtdC/ 45829\nIHRocmVhdGVucw== 45830\nIHJlYWx0w6A= 45831\nIGluZGljYXRpdmU= 45832\nIGNob3Bz 45833\nIGJlbmVmaXRpbmc= 45834\nIFZlcm5vbg== 45835\nIFN0cmFuZA== 45836\nbnVu 45837\ncXVlbnRseQ== 45838\nMTAx 45839\nIGVlbA== 45840\n7IiZ 45841\ncmludHM= 45842\nINmF2LM= 45843\nINio2K8= 45844\nINC/0L7RgdGC0YDQvg== 45845\nIHlhcG3EscWf 45846\nIG9sbWFzxLE= 45847\nIGllZGVyZWVu 45848\nb2zDqQ== 45849\na2Vm 45850\nIOuwnOyDnQ== 45851\nIHJhaW5lZA== 45852\nIGFsbWlnaHR5 45853\nINCy0YvQtA== 45854\nIENQUg== 45855\nRnJl 45856\nIGluaGFiaXRlZA== 45857\nIGFyYmV0cw== 45858\nIGFraW4= 45859\n0LDRgdGC0LI= 45860\ndmFuaWE= 45861\nIGjDpHVmaWc= 45862\nIE1hdHRl 45863\nc29ycnk= 45864\nSmVubnk= 45865\nINCz0YDQsNC0 45866\nIHdoaXQ= 45867\nIGJyb2tlcnM= 45868\nIGhpbmU= 45869\nYXN0ZW4= 45870\nINCz0YDRgw== 45871\nTUI= 45872\nIFBSSQ== 45873\nU2Fi 45874\nIHdyZXN0bGVy 45875\nIGZhY2lsaXRhdGluZw== 45876\nIGVoa8Ok 45877\nIENyZWQ= 45878\nIDEyNw== 45879\nIG5vdGhpbg== 45880\nIG1hbmRhdGVk 45881\n0YPRgtGB0YLQsg== 45882\nRnJhbms= 45883\nIHdvcnM= 45884\nIGR6aWXFhA== 45885\nIFVuZGVyZ3JvdW5k 45886\nIHpuYWpkdQ== 45887\nIELDpA== 45888\nIFByaW56aXA= 45889\n0LDRgtC10LvQtdC5 45890\nIHZldGVyaW5hcg== 45891\nIHNwbGVuZGlk 45892\nIHJvenA= 45893\nIHBzeWNob3BhdGg= 45894\naWdvbg== 45895\nIGhvcHM= 45896\nIGPhuqdu 45897\nIFhpYW4= 45898\nIHRyb2lzacOobWU= 45899\nIHByb2R1Y3Rv 45900\nIGRlxJ9lcg== 45901\nIENvbnRpbnVpbmc= 45902\n0LjQstCw0Ls= 45903\nY8Sxaw== 45904\nIG1vaXN0dXJpemVy 45905\nV2hpdGU= 45906\nIHNpaXM= 45907\nIEV2ZXJlc3Q= 45908\naWVuY2Vk 45909\nIGPhuqNt 45910\nIEphcG9u 45911\ntOyghA== 45912\nIHRlbsOtYW4= 45913\nIGVuY2FudGE= 45914\nTW0= 45915\nIGRyb3Bkb3du 45916\nIEl5YQ== 45917\ns7TrqbQ= 45918\nIHdvcmRpbmc= 45919\nIFNxdWVlemU= 45920\nIE1hcGxl 45921\nIGNsYXJpZmllZA== 45922\nIE11bmljaXA= 45923\nIFJvdWdl 45924\nIE5pY2tp 45925\nIEdvbw== 45926\ndm9sdA== 45927\ndGVr 45928\nZmVjdHVyZQ== 45929\nZnJlZA== 45930\nYXJyaXZl 45931\ndGV6 45932\nRXA= 45933\nIG9icmFz 45934\nIFZJRA== 45935\nIFJpdg== 45936\nIE1vZGk= 45937\naWJl 45938\nIGFjb250ZWNlbmRv 45939\nIGltaXRhdGlvbg== 45940\nIGNhbW91ZmxhZ2U= 45941\nIHNwYW5uaW5n 45942\nIFNFQ1JFVA== 45943\nIE9yZW8= 45944\n7IaM66as 45945\nIGh1bmNo 45946\nIGNhxYJl 45947\nIHNwb250YW5lb3VzbHk= 45948\nIFBlcmQ= 45949\nIGV0YXA= 45950\nIEhvbGU= 45951\nIERpc2FiaWxpdHk= 45952\nIGFmdGVybGlmZQ== 45953\nIHRlc3RpZmllZA== 45954\nIHByZXN1cA== 45955\nIHBldHJvbGV1bQ== 45956\nIGNvbnRyYXJpbw== 45957\nIEFzc2Vzc21lbnQ= 45958\nxJ9sdQ== 45959\nIHBlc3Rz 45960\nIGRpbGln 45961\nINCy0YHRgtGA0LXRgg== 45962\nIGNvbnPDqXF1 45963\nIGNhbm5vbnM= 45964\nIGNhbm9l 45965\nIE1pbGU= 45966\nIGNpdG95 45967\nIGJlZ2dlZA== 45968\nIE1pbm5pZQ== 45969\nxYJ5Y2g= 45970\nIHByaW5jaXBl 45971\nz4DPjM69 45972\nbW5pZWo= 45973\nIHdlcnQ= 45974\nIOuLpOuTpA== 45975\nYW5zZQ== 45976\nIHVuY2xlcw== 45977\nIHByb3ZvY2F0aXZl 45978\nIGludGVyc2VjdGlvbnM= 45979\nIGRlbW9jcmF0cw== 45980\nIEp1bGl1cw== 45981\n0LjQvdC60Lg= 45982\neWd1c2Fs 45983\nINec15U= 45984\nIGdqb3JkZQ== 45985\nIGdhc2tldA== 45986\nIEJvY2s= 45987\nIMSwbg== 45988\nYnJlYXQ= 45989\nIEVxdWl0eQ== 45990\nYXJkxLE= 45991\nINC60LDQvdCw0LvQtQ== 45992\nINC00L3QtdC5 45993\nIHThu5tp 45994\nIGZpeHR1cmU= 45995\nIGFidXNlcw== 45996\nIHZheWE= 45997\nIG91dmVydA== 45998\nIG11bHRpY3VsdHVyYWw= 45999\nIGNvbnRleHRv 46000\nIFNlc2FtZQ== 46001\nIGTDqXBs 46002\nIGNvbnNvbW0= 46003\nIFBhcnRl 46004\nIHBlbQ== 46005\nIENvbmFu 46006\nINCx0ZbQu9GM 46007\nIHBlcnN1YWRlZA== 46008\nIGRyYWlucw== 46009\nTW9v 46010\nRk9SRQ== 46011\nINCx0LDRgg== 46012\nIGZvZA== 46013\nIFByb2R1Y3Rz 46014\n7KeE7Kec 46015\nICJb 46016\nIFdpY2s= 46017\nIE5hcnV0bw== 46018\n0L3QsNC70Lg= 46019\ncnl3 46020\nIGxvZGdl 46021\nIGluaA== 46022\nIHZvbnRhZGU= 46023\nIGRpag== 46024\nIEplc8O6cw== 46025\nTG9va2luZw== 46026\nIGZvcmVhcm0= 46027\nIEludGVncmF0aW9u 46028\nIEhBUlJJUw== 46029\nIHRvb2xiYXI= 46030\nbGVhZGVy 46031\nIHNlbGRvbQ== 46032\nINCx0YDQvtGB 46033\nIEtvb2s= 46034\n0L7QvdC0 46035\nIG1vbm9wb2w= 46036\nIG1pbGxldA== 46037\nIGxpcmE= 46038\nIEFzaWFucw== 46039\nIDE4OTA= 46040\nY2nEn2lt 46041\nIGVkZW4= 46042\nIElLRUE= 46043\nIE5laWdoYm9y 46044\nIEthenV5YQ== 46045\nw7xk 46046\nIHBzeWNoZWRlbA== 46047\nIGVudmlzaW9uZWQ= 46048\nIO+3uw== 46049\nIHd1bmRlcg== 46050\nIEJ1bGdhcmlh 46051\nQnJpZA== 46052\nIG1hcnJvdw== 46053\nIGRlcGljdGlvbg== 46054\nIFRpbg== 46055\nIFBoYXJpc2U= 46056\nIGVpbnppZ2U= 46057\nIGJsaW5kbHk= 46058\nIGRlZmVucw== 46059\nRGlyZQ== 46060\nIHZpYnJhdGluZw== 46061\nIHRyb2xscw== 46062\nIGRpc3Jlc3BlY3RmdWw= 46063\nIHdvZA== 46064\nIHN0aW11bGk= 46065\nIGNyZWVwaW5n 46066\nIGNsYWlyZW1lbnQ= 46067\nIHNjYXJpZXN0 46068\nIGTDqWNvdXZyaXI= 46069\nIDEwNA== 46070\nINCy0LXRgNGF 46071\nIMWCYXQ= 46072\nIHLDs8W8bmU= 46073\nIGJhcmxleQ== 46074\nIFJlcGw= 46075\nIFR3ZQ== 46076\na2tl 46077\nIFJlZG1p 46078\nIE1ldHJvaWQ= 46079\nIM6uz4TOsc69 46080\nQ2hlY2s= 46081\nIFNFTg== 46082\nIGlkbw== 46083\n0YLQvtGA0LjQuA== 46084\nw7Nw 46085\nVU5LTk9XTg== 46086\nIMOkbmRlcm4= 46087\nIEp1aWNl 46088\nIEdlc2ljaHQ= 46089\nINC90LDRgdGC0L7Qu9GM0LrQvg== 46090\n7YOV 46091\nwq0= 46092\nZXhoYWxlcw== 46093\nIOy0iQ== 46094\nIGpzZW0= 46095\nz4DPic+C 46096\nIGl0dA== 46097\n66qF7J20 46098\nIHJlbWl4 46099\nIGJsb3Nzb21z 46100\nIFJlbmVl 46101\naXNhdGlvbnM= 46102\n7Iqk7YSw 46103\nIOuztOydtOuKlA== 46104\ndWVzdGFz 46105\nb3BlZGlh 46106\nIEFpbQ== 46107\n7J207KaI 46108\nc2NlbmU= 46109\nIGxlYWthZ2U= 46110\ndWNrdA== 46111\nU2Fk 46112\nQXNr 46113\nIHN1c3BlbnNl 46114\nIGltcG9zdA== 46115\nIFN0cmF0ZWdpYw== 46116\nIEl0w61z 46117\n4oCM 46118\nIGtleWJvYXJkcw== 46119\nIGFtdXNpbmc= 46120\nb2dy 46121\naWRlcm1hbg== 46122\nnpY= 46123\nINCy0LjQttGD 46124\nIGRpcHM= 46125\nIGFwb2xvZ2l6ZWQ= 46126\nIFNUQVI= 46127\nIGVzY3VlbGE= 46128\nIENoaW5n 46129\n0L3QtdC90LjRjw== 46130\nIOu2gOu2hOydtA== 46131\nIEZsZWV0 46132\nIHNhbWI= 46133\nIGVudHNwcmVjaGVuZA== 46134\nIGVsZWN0cm9kZXM= 46135\nIEZyZWloZWl0 46136\nIFNocmlt 46137\nacOfZQ== 46138\nIHNlbGVjdGlvbnM= 46139\nIGZvcmRp 46140\nIGRvc3M= 46141\n0Y/Rhw== 46142\nIGRpc2NyaW1pbmF0ZQ== 46143\nIEF1w59lcmRlbQ== 46144\nIGRlc2Vudm9sdg== 46145\nIEludGVybmFs 46146\nIEJlbmVkaWN0 46147\nIFNoaXY= 46148\nTWlzc3k= 46149\nINC+0LHQvdCw0YDRg9C2 46150\nINC90LDRgdGC0YDQvg== 46151\nIGNvbnRyb2xhcg== 46152\nIExpYQ== 46153\nIG9waW9pZHM= 46154\nYW50dQ== 46155\nIGN1cGJvYXJk 46156\n0LPQtQ== 46157\nYWNodHM= 46158\nIGN1cmF0ZWQ= 46159\nIHhlbQ== 46160\nIHdlYXJ5 46161\nIGJyZXRocmVu 46162\nIGJ1ZGdldGluZw== 46163\nIHBvdXJ0YW50 46164\nYWlzaWE= 46165\nINC+0YLQstC10Yc= 46166\nIEdJUw== 46167\nzrzOsc65 46168\nINep15TXldeQ 46169\nIHNhdWQ= 46170\nIGzhu5s= 46171\n0JXQog== 46172\ndWJpbmU= 46173\nINC90YPQttC10L0= 46174\nIGtpZG5hcHBpbmc= 46175\nIGJyYXQ= 46176\nIFRlcnJl 46177\nIE1vbmV0 46178\nIOuniOyKpO2B 46179\nIGZsYXNoeQ== 46180\nIElTQk4= 46181\nIGZyZWVsYW5jZQ== 46182\naWFnZQ== 46183\nIGp1bmdl 46184\n7Lap 46185\nY2VyYWw= 46186\nINGC0L7Rh9C60Lg= 46187\nIGZvcm11bGF0ZQ== 46188\nIEZFUg== 46189\nIERhcnRtb3V0aA== 46190\n7Jy866m07ISc 46191\nb3dpxIU= 46192\nIOuUlOyekA== 46193\nIHJlZ2ltZW50 46194\nIG1ldGFib2xpc21v 46195\nIFBhcnI= 46196\nIOy2qeu2hA== 46197\nIHNhbml0eQ== 46198\nIExhbA== 46199\nIEfDtg== 46200\nIEdsYQ== 46201\nIHByb3Rv 46202\nIG1pY3Jvc2NvcGlj 46203\nIGthbmc= 46204\nIFNjYWxpYQ== 46205\nIHB1Zw== 46206\nIFNjb3Jl 46207\nIFNhdmFubmFo 46208\nIGdhcmRl 46209\nIE5PUg== 46210\nIHNjaGVpbnQ= 46211\nIHDDs8WC 46212\nIGNvcnJp 46213\nIGJydXRl 46214\nIMWCYWQ= 46215\nIHN1Y2NlZWRpbmc= 46216\nIGJpY3ljbGVz 46217\nTm9u 46218\nIHNlZWtlcnM= 46219\nIHVuY29uZGl0aW9uYWw= 46220\nIHJoeW1lcw== 46221\nIEdhcmFnZQ== 46222\nIGludm9pY2U= 46223\nIGNhbnZp 46224\nbmVjaw== 46225\nIGN1c3RvbWl6YWJsZQ== 46226\naXJpdHVhbA== 46227\nUXVlZW4= 46228\n7ZWY7Iuc64qU 46229\nIHBvd2VybGVzcw== 46230\nIGNzYWs= 46231\naXNvZnQ= 46232\nIOygle2ZlQ== 46233\nIG5ow6Ju 46234\nIE1BTkQ= 46235\nIEhhZg== 46236\nIHJldm9sdmVz 46237\nb3Zhbg== 46238\nYXJvbw== 46239\nIEdyaW5k 46240\nIGluZGlzcGVuc2FibGU= 46241\nIGNvbnN1bHRlZA== 46242\nIENsaW5pY2Fs 46243\nQWNj 46244\nIG9saG9z 46245\nIG1vbnRlcg== 46246\nIEhhbmE= 46247\nZXRhaA== 46248\nIHZhYW4= 46249\nIHRpZ2Vycw== 46250\nIGNhdWN1cw== 46251\n8J+Ygg== 46252\ns7TsnpA= 46253\ncG93ZXJz 46254\naXVtcw== 46255\nIO2GoOs= 46256\nIHRyYWRpY2lvbmFs 46257\nIHJlc29uYXRlZA== 46258\nIOyLoOq4sA== 46259\ndGhlbQ== 46260\nUm9iZXJ0 46261\nIGVsZW1lbnRv 46262\nIGFudGlk 46263\nINC+0LHRgQ== 46264\nIG5hdGl2ZXM= 46265\nIGxvY2E= 46266\nb3dtZW50 46267\nIFRpZ2h0 46268\nIG1lbGFu 46269\nIE51ZQ== 46270\nYW1pcw== 46271\nIHNvcmdlbg== 46272\nYXPEsW5h 46273\nSG9tZQ== 46274\nIFBVQkc= 46275\nIGF3ZnVsbHk= 46276\nIFNob3Jl 46277\nIFBlcmNow6k= 46278\nIExhdQ== 46279\nIENpbmRlcmVsbGE= 46280\nIENoZXN0 46281\nIHNlbWFudGlj 46282\nIGRlc2VydGVk 46283\nIE1vbW8= 46284\nIEhlcm5hbmRleg== 46285\nZ2VuZXM= 46286\nIEFkdWx0 46287\n0LjRh9C10YHQutC+0LPQvg== 46288\nb3NoaW1h 46289\nIGNhcmFjdGVyw61zdGljYXM= 46290\nIEtM 46291\ntOyepQ== 46292\nb2Nhcg== 46293\nIGZlaGx0 46294\nIGRydWs= 46295\nIFBvcHB5 46296\nRU5HTElTSA== 46297\nIFZlcmdsZWljaA== 46298\nQnJpZW4= 46299\nIHJlY29tcA== 46300\nINGB0LQ= 46301\nIG1lcmdlcg== 46302\nIG1hcmtldGVycw== 46303\nIGhvbmV5bW9vbg== 46304\nIHBlbnNv 46305\nIGJlbGxp 46306\n0LXRgtGD 46307\nIGJhbmtlcg== 46308\nQ2FtZXJh 46309\nIFN0YWxs 46310\nIFN0YW1w 46311\nIEJpdGU= 46312\n0LXQttC00LU= 46313\nIHPDvHI= 46314\nIGfDvMOn 46315\nIFBhc3NvdmVy 46316\nIEJ1Z8O8bg== 46317\nINGB0L7QttCw0LvQtdC90LjRjg== 46318\nINC90LjQtw== 46319\nIG1hbnVyZQ== 46320\nIGdsYWNpZXI= 46321\nUkFZ 46322\ndGVycm9y 46323\nIHNhbGFkcw== 46324\nIGh1cnJpY2FuZXM= 46325\nIERlc2lnbmVy 46326\nYXRvcmlv 46327\nIGZhY3R1YWw= 46328\nIFRhbW15 46329\nINC30LLRg9GH 46330\nIGludHJvZHVjdGlvbnM= 46331\nIGhvdXNla2VlcGluZw== 46332\nIGhhbmdlcg== 46333\n64uY6w== 46334\nYWt0ZQ== 46335\nIENvbGE= 46336\nJ10= 46337\nIEdlbmRlcg== 46338\n0L7RgNC+0L0= 46339\naXBzZQ== 46340\naWNpYXM= 46341\nIHN1Y2Nlc3NpdmU= 46342\nIHBvbGl0aWM= 46343\nIGjDtmhlcg== 46344\nIFFpYW8= 46345\nIEdpbW1l 46346\nINC70L7Qtg== 46347\nIHNlYg== 46348\nIFdlaXRlcg== 46349\nIFNha3VyYQ== 46350\nIEJvdWxkZXI= 46351\nIEFtw6lyaWNh 46352\ncGXFgm5pZQ== 46353\nIHRlY25vbG9nw61h 46354\naXNob3Bz 46355\nZnVy 46356\nIG1vb25saWdodA== 46357\nIGRpc3BlcnNlZA== 46358\nIHJleg== 46359\n0LXQvdC90L7QtQ== 46360\n0LDQu9GM0L3Rg9GO 46361\nIFR3ZWx2ZQ== 46362\nIEhPUg== 46363\n7Iuk7Z6I 46364\naWxhZ2U= 46365\nIHNoYWRlZA== 46366\nIHJlc3VtZXM= 46367\nIFBlYW51dA== 46368\nIE1JTEw= 46369\nYXBvbnM= 46370\nIFVGQw== 46371\nIFNvbGU= 46372\nIGpveXN0aWNr 46373\nIE9saXZpZXI= 46374\nd2FybWluZw== 46375\nIHN5bGxhYnVz 46376\nINC+0LHRidC1 46377\nIGhp4buHbg== 46378\nIGZlc3Rh 46379\nIGNyYWRsZQ== 46380\nIFphYw== 46381\nIHJlbWVtYnJhbmNl 46382\nIOqwmeyVhOyEnA== 46383\nIHBpxJlr 46384\nIGNvZXhpc3Q= 46385\nIFZJSQ== 46386\nIMOhcmVhcw== 46387\nIHV3YcW8 46388\nIG9ic2VydmVycw== 46389\nIG3DpG5uaXNrb3I= 46390\nY29vbg== 46391\nIERBTQ== 46392\nIG5hc3p5bQ== 46393\nIGFsbGlnYXRvcg== 46394\nIEZyZWV6ZQ== 46395\nIEVzdGF0ZQ== 46396\nINGC0YDQsNC00Lg= 46397\nIHVuZGVyY292ZXI= 46398\nIG5pZXM= 46399\nIEZlaGxlcg== 46400\ncGxpbg== 46401\nIEthYnVs 46402\naWxhdGU= 46403\nIOqzoOyWkQ== 46404\nIG1vcA== 46405\n7IS8 46406\nIGFuZGVyZXI= 46407\nIEtFTEw= 46408\n0L7QutC4 46409\nINC20LXRgdGC 46410\nIGdyYXppbmc= 46411\nIGRhw60= 46412\nIGNhcGl0YWxpemU= 46413\nIGFwZXg= 46414\nIG51cnR1cmluZw== 46415\nIGNvcnRhcg== 46416\nIGNvbnRyYWM= 46417\nxLFtxLF6xLE= 46418\nIHRhbmRlbQ== 46419\nZ2VtZW50 46420\nINGB0LjRgdGC0LXQvNCw 46421\nIG1hbnF1ZQ== 46422\naWFqxIU= 46423\nV09S 46424\nINin2Kg= 46425\nIGNhcnRz 46426\nQU5P 46427\nIOuwm+qzoA== 46428\nIENlbmE= 46429\nIEJpb2xvZ3k= 46430\naWRhcg== 46431\nIGHFvA== 46432\nZXJuZQ== 46433\nYW51 46434\nIHRoYW5rZWQ= 46435\nIHN1Ym1hcmluZXM= 46436\nIG1hbmlj 46437\nINC80L7Qtw== 46438\naW5zdGFudA== 46439\nZXNzZW50aWFs 46440\nIHNhbXVyYWk= 46441\nIHBhc3Rp 46442\nIGFsYW4= 46443\nIGJyb2No 46444\nIGJha2Vy 46445\nIEd1aWxs 46446\nqLw= 46447\nIHdpdGhkcmF3bg== 46448\n64ud 46449\nUGVyZmVjdA== 46450\ncXVlbmN5 46451\nIHN0cmVhbWxpbmVk 46452\nIDEzMDA= 46453\ntOuPhA== 46454\nIOuWoOs= 46455\nIGh2YWQ= 46456\nIHZlcmJhbGx5 46457\nIEtvbnM= 46458\nIOyhsOyLrA== 46459\nIGRpZXo= 46460\nIGNodWNrbGluZw== 46461\nIE1paA== 46462\nIHJhbGxpZXM= 46463\nIG1hbnRlcg== 46464\nIGVhcm5lc3Q= 46465\nc3VwZXI= 46466\nIGdlY2U= 46467\nIFJlbmQ= 46468\nIEdlcmFkZQ== 46469\namVuaWdlbg== 46470\nIFZhbGw= 46471\nIOyeiOuCmA== 46472\nINGB0LrQsNC30LDQu9Cw 46473\nIHRyYWJhbGg= 46474\nINC90LDRiNC10Lw= 46475\nINC80LXRhQ== 46476\naWtpdA== 46477\nIG5vdW5z 46478\nIG5ldXJvbG9naWNhbA== 46479\nIG1vdGl2YXRpb25hbA== 46480\nIE1jTWFob24= 46481\nIEZpbmlzaGVk 46482\nIOuztOydtA== 46483\nIEZpZWxkcw== 46484\nIGFkb2xlc2NlbnRz 46485\nIFRpc2No 46486\nIE5lYmVu 46487\nIEZsb3dlcnM= 46488\nIEVuZXJn 46489\nIGRpcmV0 46490\nIFRoaQ== 46491\nIFBpY2Fz 46492\nIGF2ZXRl 46493\nIEZvcnM= 46494\nIENoYXBlbA== 46495\nTsOjbw== 46496\nRXQ= 46497\nINGB0L7QtNC10YDQtg== 46498\ncmVubw== 46499\nIHN2ZW4= 46500\nIGRvc3TEmXA= 46501\nbmVl 46502\nIFNuYXBkcmFnb24= 46503\nIElEcw== 46504\n7JWY64qU642w 46505\n16jXmg== 46506\nIHN1bmZsb3dlcg== 46507\nIHBlcnBldHVhbA== 46508\nIGtuaWdodHM= 46509\nIGdpcmQ= 46510\nIFRvbGQ= 46511\nIHZvbGNhbm9lcw== 46512\nIGFkdmVyc2FyeQ== 46513\nIEVjb25vbXk= 46514\nIGV4dHJhcG9s 46515\nIGJsdWV0b290aA== 46516\nIHpvb21pbmc= 46517\nIHNreXM= 46518\nIGdlbmlhbA== 46519\nw61jdWxvcw== 46520\nYW1icmU= 46521\nINC80LXRgA== 46522\nIHRlZW55 46523\nIHN0cmVzc2luZw== 46524\n7JWM 46525\nT05Z 46526\nIHRyYW5zbHVjZW50 46527\nIHJvdW5kaW5n 46528\nIGdydWVz 46529\n15nXoNeU 46530\nYXByw6hz 46531\nIHBydWViYQ== 46532\nIHBvbHlnb24= 46533\nIGJsdWViZXJyeQ== 46534\nIFByb2dyYW1t 46535\nIHRyZW5jaGVz 46536\nIHNlYmFnYWk= 46537\nIHBhbGF0ZQ== 46538\nIGxhdWRl 46539\nIGJlaGF2ZWQ= 46540\nIGxvbmdpdHVkaW5hbA== 46541\nIE1vZHVsZQ== 46542\nIGFkbWly 46543\nzrvOuQ== 46544\nR3JlZw== 46545\nIHd5c3Q= 46546\nIHByb3BhZ2F0ZQ== 46547\nIG1vbGRz 46548\nIFR1Yg== 46549\nIExvdWQ= 46550\ndXN0bw== 46551\nIHVuc3RvcHBhYmxl 46552\nIHJlaW5mb3JjaW5n 46553\nINC/0YDQvtCx0LvQtdC80LA= 46554\nIHBvdGVuY2lhbA== 46555\nIGhlbXA= 46556\n7J6U 46557\n4KSv 46558\nIG9wdGlj 46559\nIGVyZm9sZ3JlaWNo 46560\n0YHRiw== 46561\n0L7Qu9GM0YjQtQ== 46562\ndXJzdA== 46563\nIFBvaXM= 46564\nIHJlc3BvbmRlbnRz 46565\nIG5laG1l 46566\nIEV4dGVybmFs 46567\nb2xhdGU= 46568\nSHl1bg== 46569\nIHF1YXJ0eg== 46570\nIG1hdGhlbWF0aWNpYW4= 46571\nIGLDoXNpY2FtZW50ZQ== 46572\nIGFpbA== 46573\n7KCc66W8 46574\nYXR0dXR0bw== 46575\nIG5vb2l0 46576\nIGFmZmxpY3Q= 46577\nIE9sZ2E= 46578\nINC90LDRgg== 46579\nIGRpdGVz 46580\nIHJlYWxpZGFkZQ== 46581\nIGvDpG4= 46582\nIHVuaXF1ZW5lc3M= 46583\nIHBhZHJlcw== 46584\nIHN1YnNpZGk= 46585\nIHBpZ2VvbnM= 46586\nzrLOsQ== 46587\nc3RhZA== 46588\nIGRlcmVu 46589\nINCh0LvQtdC0 46590\nZG9v 46591\nINC+0L/QuNGB0LDQvdC40Lg= 46592\nIGFtYmVy 46593\nIGdvb3NlYnVtcHM= 46594\nIGZyw6Vnb3I= 46595\nIFZpdGFs 46596\nIElzcmFlbGl0ZXM= 46597\nd2Fzc2Vy 46598\nSXNu 46599\nIGNvbW1pdHM= 46600\nIFNURVZFTg== 46601\nIEJldsO2bGtlcg== 46602\ndWl0aXZl 46603\nIGxlZ2Vu 46604\nIGJydWs= 46605\n0LjRgNC+0LLQsNC9 46606\neW5lbg== 46607\naGVsbQ== 46608\nIGdlbmVyYXRpb25hbA== 46609\nIEzDpG5kZXJu 46610\nzr/Ouc+Az4zOvQ== 46611\ndXp1 46612\nIGNhbGxlcg== 46613\n0L7QvdGM 46614\nw7xtw7w= 46615\nIGJlc2Fy 46616\nIHBsYXRz 46617\nIG1pZ3JhdGVk 46618\nIGphcA== 46619\nIFdBUg== 46620\nIGRpc3NlY3Q= 46621\nIFp1c2No 46622\nIFplaXRlbg== 46623\nIExpb25z 46624\nIERG 46625\n4pQ= 46626\n0LrQuNCy 46627\nIHBlZGVzdHJpYW5z 46628\nIE1hcmlseW4= 46629\nZG9jaw== 46630\nIHlodA== 46631\nIHJlaW5jYXJu 46632\nIFNvbm8= 46633\nIEdyb3d0aA== 46634\n0YPRgdC+0LI= 46635\nIGR1bmdlb25z 46636\nIGJhZ3Vz 46637\na2ljaA== 46638\nINGD0LrRgNCw0Zc= 46639\nIEtlbGxlcg== 46640\nY2hlbWlzdHJ5 46641\nSmFwYW5lc2U= 46642\nIHdpbGxzdA== 46643\nIGRlY29tcG9zaXRpb24= 46644\nINGB0YLQtdC9 46645\nIHJldml2ZWQ= 46646\n7ZWZ6rWQ 46647\nIMWT 46648\n7Iu4 46649\naXBweQ== 46650\nIGhvdXJseQ== 46651\nasOkbg== 46652\nIFdvcmtzaG9w 46653\nnbzshJw= 46654\nIGN1YXJ0bw== 46655\nIHBhdHJpbQ== 46656\nIEJ1cmNo 46657\nIOyeiOq4sA== 46658\nIGhlcGF0 46659\nIGjDoG5n 46660\nIOuMgO2VtA== 46661\nINCy0LDRiNC4 46662\nIHJld29yaw== 46663\nIHBhcnNl 46664\nIMOnxLFrdMSx 46665\nIFNheA== 46666\nIE1vbmdv 46667\nIEFhYWg= 46668\ncmFtYmxl 46669\nREo= 46670\nIHN0YWJpbGl6ZWQ= 46671\nIFNwZWVjaA== 46672\nQm9va3M= 46673\nIGh1cmRsZXM= 46674\nIFdP 46675\nIExhbWJvcmc= 46676\nIDE5MzM= 46677\nIHZvcmJlcmU= 46678\nIGNsaW5pY2FsbHk= 46679\nIGJyZWF0aHRha2luZw== 46680\nIEdhdGV3YXk= 46681\n0L/QtdGA0LLRi9GF 46682\ndXRlcnM= 46683\nIOu5tQ== 46684\nIHlldGVy 46685\nIHB1bGxleQ== 46686\nIG11ZmZpbg== 46687\nIFByZWZlcg== 46688\nIFBlbmNl 46689\nIGluZm9ybWHDp8Ojbw== 46690\n7Iqk7Yq46w== 46691\nIFR1cnRsZQ== 46692\nIFJlZ2luYQ== 46693\nIExvYWQ= 46694\nZG9lcw== 46695\ncGFuemU= 46696\nuJQ= 46697\nIG1pbmE= 46698\nIExhdGlub3M= 46699\nYW1tZXJz 46700\nIFRvcnQ= 46701\nIEJleW9uY2U= 46702\n0LjQvNC+0YHRgtC4 46703\nINCy0L7Qv9GA0L7RgdGL 46704\nIGJ1bHVu 46705\naW5law== 46706\nYmVyZWljaA== 46707\nIHBhc3R1cmU= 46708\nIE9B 46709\nIE1lbHQ= 46710\nIEV0dA== 46711\nIERZ 46712\nIG9id29obA== 46713\nIGxlYWd1ZXM= 46714\n0YLQtdGB0Yw= 46715\nINC60YPRgQ== 46716\nIHZvcnM= 46717\nIHRvcHA= 46718\nb2dyYXBoaWNhbA== 46719\nYXNzdA== 46720\nIGxpbmRv 46721\nIOuwne2YlA== 46722\nIHLDqWZs 46723\nIGNsaW1icw== 46724\nIHZhcnNh 46725\nIG1ldGh5bA== 46726\nIEthcmVyZQ== 46727\nxrDhu58= 46728\nUmFk 46729\nIHByZXBhcmVkbmVzcw== 46730\n0L7QvdGH 46731\nIE9E 46732\nIENHSQ== 46733\nIOCkrg== 46734\nIHNwZWVjaGxlc3M= 46735\nIGxhc2Np 46736\nIGJvbGFn 46737\nINGF0L7Rh9C10YLRgdGP 46738\nIGdyaWV2aW5n 46739\nIEpvaGFubmVz 46740\nIENhcnJvbGw= 46741\nYWRha2k= 46742\niKzr 46743\nIHPFgnU= 46744\nIGlubmVyaGFsYg== 46745\nIGd5bW5hc3RpY3M= 46746\n0L/RgNC4 46747\naWZpcXVlcw== 46748\nIGthcmF0ZQ== 46749\nIGRvbXU= 46750\nT1RIRVI= 46751\nIGRlbWFuZMOp 46752\nIGJvb2tsZXQ= 46753\nIEt5b3Rv 46754\nIHdvaA== 46755\nIE1hcsOtYQ== 46756\ndmlvbGVudA== 46757\nSkU= 46758\nIGzDs2c= 46759\nIGJydXRhbGx5 46760\nY290 46761\nINmF24w= 46762\nIFdhcnN6 46763\nd29s 46764\nIG1pa8Ok 46765\nIFByb25vdW5jZQ== 46766\nIEJyZW5kYW4= 46767\nIHJvdXA= 46768\nIGl0YWxpYW5v 46769\nINC60L7QvNC/0YzRjtGC 46770\nIHVyZ2luZw== 46771\nZWRlcw== 46772\nIGNhcmJvbm8= 46773\nIFJpY2hhcmRzb24= 46774\nINCd0LDRhw== 46775\nIFRyYWluZXI= 46776\nIENyaW1lYQ== 46777\nIGRpYXBlcnM= 46778\nIGNvdmV0 46779\nIE1haGFy 46780\nIEh1dGNo 46781\nIEF1c3c= 46782\nYmVydHk= 46783\nIGluZGlmZmVyZW50 46784\n0LrRgNC10YI= 46785\ndWxkYWRl 46786\nIGhhcm1z 46787\notmG 46788\nbGVzaWE= 46789\nIGdpbw== 46790\nIE1pc3RyZXNz 46791\nIEtub3g= 46792\nIEZSRUU= 46793\nIOujqOs= 46794\nINC90LDRiNCw 46795\nIGludmluY2libGU= 46796\nIG1haWRlbg== 46797\nIEplZXo= 46798\nIGJyZXZl 46799\ncG9sZQ== 46800\nIGNyaXRpY2lzbXM= 46801\nIFJ1c2lh 46802\n4KSu 46803\ncGhpbg== 46804\nIENvbXBhcmU= 46805\nIEJPTg== 46806\nIHNuZWFraW5n 46807\nIFJhaWxz 46808\nIEdlcmFs 46809\nIDE5NTM= 46810\nSG9sYQ== 46811\nINC+0L/Ri9GC 46812\nIHJhaW5mb3Jlc3Q= 46813\nIGJlbHVt 46814\nIE9iaQ== 46815\nIElTUw== 46816\nINCh0LI= 46817\nIGJsb25k 46818\nIHd6Z2w= 46819\nIHBvd2llZHppYcWC 46820\nIGNob2tpbmc= 46821\nIFNvbmdz 46822\nIEJpcmF6 46823\nIHllbGxz 46824\nIHN0eWxpc3Q= 46825\nz4zPhM61 46826\nIHNjaHJlaWJlbg== 46827\nIEphdw== 46828\nIEVsZXZlbg== 46829\nIFJpZg== 46830\nLy4= 46831\nIOyYpOuenOunjA== 46832\nIHRyZWF0aWVz 46833\ndWZmZWQ= 46834\nIOKIkg== 46835\nIHJvb2Zz 46836\n4LmA4Liq 46837\nIOu7 46838\nIHNwYXJrbGU= 46839\nIEtpZXY= 46840\nIEFyZ3U= 46841\nZXJlY2h0 46842\nINCd0LDQtNC+ 46843\nIEZJTA== 46844\nIG1vbHRh 46845\nIERldmk= 46846\nIGNhbXBl 46847\nIGJlbmV2b2w= 46848\nIFRvdWdo 46849\nIG1vaW0= 46850\nIGV2YWN1YXRl 46851\nIGVycmFkbw== 46852\n0YDRg9Cz0L4= 46853\nIO2OmA== 46854\nIM6TzrnOsQ== 46855\nIHdlYWtlbg== 46856\nIGlsbHVtaW5hdGVk 46857\nIHNpZ2xv 46858\nIFZhY2M= 46859\n0LjQtdC5 46860\nYWxpcw== 46861\nINGD0YHRgtGA0L7QuQ== 46862\nIGRvbmE= 46863\nxYJvcw== 46864\nw7xtYW4= 46865\nIHByb2R1Y2Npw7Nu 46866\nIGNsb3Q= 46867\nIE1hbmdv 46868\nIHVuZWFzeQ== 46869\nIHNodXRz 46870\nIEV4YW1wbGVz 46871\ndmVsbA== 46872\nZWJl 46873\nIHByb21wdGx5 46874\nIFRlbGVz 46875\nINC/0YDQvtGI0Ls= 46876\nIHB1ZXJ0YQ== 46877\nIMO8YmVyemV1Zw== 46878\nIGNvY2g= 46879\nc29jaWFs 46880\nIEJlbnNvbg== 46881\nIE1ldGg= 46882\nIEV4cGVk 46883\nIHN1cHBsZW1lbnRhbA== 46884\nIGNvbmNlaXZl 46885\nINeY15XXkQ== 46886\nIGNhcHRpdml0eQ== 46887\nj5nslYg= 46888\nINGF0YPQtA== 46889\nZm9ybWluZw== 46890\nIHVwbG9hZHM= 46891\nIHR1cmJ1bGVuY2U= 46892\nam9pbnQ= 46893\nIHNhdGlzZmFjdG9yeQ== 46894\nIEFuaW1l 46895\nIHdhc2hlcw== 46896\nIGxpYmVyYWxz 46897\nIFN1bnNoaW5l 46898\nIFJFQUw= 46899\ndWJsaWs= 46900\nYmluYXJ5 46901\nVG9ueQ== 46902\nIHBvbGFyaXplZA== 46903\nIGVucmljaGVk 46904\ndGFraW5n 46905\nIOuBneuCmA== 46906\nIHBsZWFzdXJlcw== 46907\nIGV4dGVybWlu 46908\naW5lc2U= 46909\nYXRs 46910\ndsOkcg== 46911\n0LDRgNGL 46912\nIG15xZs= 46913\nbmFycmF0b3I= 46914\nINC+0LTQvdC+0Lw= 46915\nIG5handpxJk= 46916\nIG1vYmlsaXpl 46917\nIG1pbGxvcg== 46918\nIGF0YQ== 46919\nIHBvbMOtdGljbw== 46920\nIHBsZWFk 46921\nIHBhaW50ZXJz 46922\nIFNvdw== 46923\n0L7RhA== 46924\nIOyYm+uCoA== 46925\nINGH0YLQvtCx 46926\nIHNhYm9y 46927\nIFVuZGVydA== 46928\nIEpFUlJZ 46929\nxaHDrQ== 46930\nIOuwluyXkA== 46931\nIHByw6ljw6lk 46932\nIGFubm90YXRpb24= 46933\nIEluYXVkaWJsZQ== 46934\nIHRleHR1cmVk 46935\nIGZpc2hlcm1hbg== 46936\ndm9yZGFu 46937\naWNoZXJ1bmc= 46938\nIOyggeydtA== 46939\nIGdlemVpZ3Q= 46940\nIG1hbmRhdGVz 46941\nIGJlYWs= 46942\nIFRXTw== 46943\nIEFrYmFy 46944\naWxpYW4= 46945\nIHRp4bq/cA== 46946\nIHN1cGVyaW9yaXR5 46947\naW5rdQ== 46948\nIGx5cw== 46949\nIEZDQw== 46950\nIENQQQ== 46951\ndXN0ZXJpbmc= 46952\nbmljb3M= 46953\nYW5qYQ== 46954\nIGNoaWxscw== 46955\nIENhZ2U= 46956\nIHNlYWxpbmc= 46957\nIHNhw6c= 46958\nIGRlZGFucw== 46959\nIEFsZ2Vy 46960\nIHNwZXppZQ== 46961\nIGNvbG9zcw== 46962\nxLF5xLE= 46963\nY2xvY2t3aXNl 46964\nIGV4YWN0YW1lbnRl 46965\nIGllbWFuZA== 46966\nYW3EsQ== 46967\nIG1hbmRhcg== 46968\ncmFq 46969\nZmFjZWQ= 46970\nYWd1YQ== 46971\nIOq5lOs= 46972\nIGluc2Jlc29uZGVyZQ== 46973\nIGRyaXp6bGU= 46974\nIGRpbWluaXNo 46975\nIFlvZGE= 46976\nQUk= 46977\nIGJpbG1peW9ydW0= 46978\nIE1NQQ== 46979\nYXRlZ29yeQ== 46980\nINC/0LXRgNC10L8= 46981\nIHBhcnRpY2lwYXI= 46982\nIG5vcm1hbGl6ZWQ= 46983\nIGNvbXBsZXhpdGllcw== 46984\n0LDRgNC+0LI= 46985\nbWlzdA== 46986\naWNoYQ== 46987\nR3JvdXA= 46988\nIHJlc2lsaWVuY3k= 46989\nIG5vZ2xl 46990\nIENOQw== 46991\ncHLDvA== 46992\nIHBoeXNpY2lzdHM= 46993\n0L3QvtC6 46994\nTEk= 46995\nIHN0dWZmcw== 46996\nIHNpc3RlbWFz 46997\nIGludGVyZmVyaW5n 46998\nIE1hcnZpbg== 46999\nw6lyY2l0bw== 47000\nIOyXhuqzoA== 47001\nIHNvbmlj 47002\nIGVxdWl2 47003\nIGFib3Jk 47004\nIFJhbWVu 47005\nIDA5 47006\nbWVkaW0= 47007\nYXRpcXVlcw== 47008\nINC00LXQu9Cw0Y7Rgg== 47009\nIHVuYW5pbW91c2x5 47010\nIHNraXJ0cw== 47011\nIO2KueuzhA== 47012\nIFByaXg= 47013\na2FtaQ== 47014\nIGZydWl0aW9u 47015\nIGJpcnRoZGF5cw== 47016\n0LjQutC+0Lw= 47017\nIGluYXVndXJhbA== 47018\nIGNvcnJlbGF0ZQ== 47019\nIFRvcnk= 47020\nIOuCmOyB 47021\nIGRldw== 47022\nIFByZWNpcw== 47023\naWhp 47024\nIOusuOygnOqwgA== 47025\nIGNpdGluZw== 47026\nIExhbmE= 47027\nIEthZw== 47028\nIHBsYXl0aHJvdWdo 47029\nIFByb3RvY29s 47030\nZnJpc3Q= 47031\naG92YWg= 47032\nIG1lcmNpZnVs 47033\nIGJpbGluZ3VhbA== 47034\nIEd1aXRhcg== 47035\ncmg= 47036\nIGdsYW1vcm91cw== 47037\nIFZpa2luZ3M= 47038\nIE9vb29o 47039\n7ZWY64qU642w 47040\nIFVnYW5kYQ== 47041\nIGNvbGxhcHNlcw== 47042\nZW50cnk= 47043\nIGFudGlveGlkYW50cw== 47044\n64KY6w== 47045\n0YjQsNGP 47046\nIHRyaXZpYQ== 47047\nIGfDpGxsZXI= 47048\nIGZ1bmdp 47049\nIG1pbGtz 47050\nIGRpY2h0 47051\nzrzOtw== 47052\ncG9rZQ== 47053\nINCy0YvQv9GD0YHQug== 47054\nIGZlZWRlcg== 47055\nIEFsY29ob2w= 47056\naG93ZXI= 47057\nIGRlc2VydmluZw== 47058\nIFJlYmVs 47059\naW9zaXM= 47060\nIDEwMw== 47061\nIGhhbmRvdXQ= 47062\nIGVubQ== 47063\nIGxhbmRsb3Jkcw== 47064\nIGdlb2xvZ3k= 47065\ncmlscw== 47066\nIGNvYnJh 47067\nIFZvbGQ= 47068\nIFBhbmNo 47069\nIEdSRUc= 47070\nIHByb3Nz 47071\nIGJyYWNlbGV0cw== 47072\nIFZlZ2E= 47073\nIHJvenVt 47074\n0LDQt9C0 47075\nIEx5bmQ= 47076\nIEhvbm9ycw== 47077\nIHN1cnJlbmRlcmVk 47078\nIGxpYnJhcmlhbnM= 47079\nMTI1 47080\nINGB0LjQsw== 47081\nIHVuaWZvcm1seQ== 47082\nIEVhZ2xlcw== 47083\n7JWZ 47084\n0LjRgtCw0L0= 47085\nYW5kaWQ= 47086\nIOygiOuMgA== 47087\nINi2 47088\nIGFycmVzdHM= 47089\nIENTVg== 47090\nIEF6ZXJiYWlqYW4= 47091\nb3J0aWM= 47092\nIERY 47093\nIEFkdmVudHVyZXM= 47094\nIGFidXM= 47095\nIEZhdQ== 47096\nIHNjaGxpbW0= 47097\nIHJhdHRsaW5n 47098\nIGNvbnN1bWVz 47099\nIFRvbGtpZW4= 47100\nIHJlc3VycmVjdGVk 47101\nIFhZ 47102\n7Yq46rCA 47103\nINCy0YvRgdGC0YPQvw== 47104\nIEFuZ2ll 47105\nxbxlbmlh 47106\nTWlj 47107\nIFNoZWlsYQ== 47108\nYWNodGV0 47109\nIG92ZXJzdA== 47110\nIGzDog== 47111\nIGluZWZmZWN0aXZl 47112\nIHdpY2h0aWdlcg== 47113\nIHZpbm8= 47114\nIHB1bQ== 47115\nIGFuZ2xlZA== 47116\nIFBpb25l 47117\nIE3hu7k= 47118\nd2/Fm8SH 47119\nZHJhdw== 47120\n4Lix4LmI 47121\nbWFya2V0cw== 47122\nIGNhZmVz 47123\nIENlbQ== 47124\n4p2k 47125\nIFN1aXQ= 47126\nTUs= 47127\nIGVtcGhhc2l6ZXM= 47128\nIHRvcnRpbGxh 47129\nIG1lam9yYXI= 47130\nIFN1cnZpdg== 47131\nY2FzdGluZw== 47132\nIGVkdWNhY2nDs24= 47133\nIEd1bQ== 47134\ndWVseQ== 47135\nIOyXrOq4sOuKlA== 47136\nIHN0cmV0Y2h5 47137\nZW7Dp2E= 47138\nIHdpdGhob2xk 47139\nIGV4aXRpbmc= 47140\nIGVudGhhbHB5 47141\nIFRyYW5zaXQ= 47142\nxLFsbcSxxZ8= 47143\nYWxpZXM= 47144\nIHNhbHZhcg== 47145\nIGxlYW5lZA== 47146\nIGdyb8OfZXM= 47147\nIGZpdHQ= 47148\n0LDQutC4 47149\nU2FyYWg= 47150\nIGhvc3RlbA== 47151\nIGZpbmdlcm5h 47152\nIG5hZHppZWrEmQ== 47153\nd2l2ZXM= 47154\nUmVj 47155\nIHNwb29s 47156\n0LDRgtC+0LI= 47157\nIEVuZW15 47158\nIGZ1cnk= 47159\nIGRldHRh 47160\nIEZheQ== 47161\n0Y/RjtGC 47162\nIGFwcm94aW1hZGFtZW50ZQ== 47163\nIHNpbG9z 47164\nIG1hZ2lzdA== 47165\nIGNyZWU= 47166\nIEtyYW5r 47167\nIERPV04= 47168\nIHN0YXJ0bGVk 47169\nIHJlYm9ybg== 47170\nIFVtd2VsdA== 47171\nIFN1emFubmU= 47172\n0L3QuNGG0Ys= 47173\nb3V0ZXo= 47174\nIEpBQw== 47175\neWFyZHM= 47176\ncmFkYXM= 47177\ncmF1 47178\naXB0cw== 47179\naGFpbA== 47180\nIHBhcmFncmFwaHM= 47181\nIG1lZ2xpbw== 47182\nIGlzb2xhdGluZw== 47183\nIGFjZWl0ZQ== 47184\nIEhhcnNo 47185\nIGN5c3Q= 47186\nIEJsb2NrY2hhaW4= 47187\nINGF0L7RgNC+0YjQuNC5 47188\nIHZpcnR1b3Vz 47189\nIGludmVzdGlnYWNpw7Nu 47190\nIGRldm9pcg== 47191\nIG1hc3R1cmI= 47192\nIFNhbGU= 47193\n2YrYsdip 47194\nIM6n 47195\nIFN0cmHDn2Vu 47196\nIGRpa2s= 47197\nIGFmb3Jl 47198\nIEp1bmdrb29r 47199\nIGNob2NpYcW8 47200\nIERlYmF0dGU= 47201\nIHdlaXJkbHk= 47202\nIHZpYWpl 47203\ncmVnaXN0 47204\nSGVscA== 47205\nIGtpbmRlcmVu 47206\nIGZvcm11bGF0ZWQ= 47207\nIGVuZmlt 47208\nIFRvd2FyZHM= 47209\n0LrQvtGX 47210\naXZlcmluZw== 47211\nINC00LXRgtC4 47212\nY2hhcmdlcg== 47213\nIHB1cmw= 47214\nIGFjYWRlbWljYWxseQ== 47215\nIE51cnNl 47216\nIGRlbGV0aW5n 47217\nYXlv 47218\nIHJlZnVzYWw= 47219\nIGRlcGljdHM= 47220\nIERyYWN1bGE= 47221\nIHRvYXN0ZWQ= 47222\nIFpvbWJpZQ== 47223\nIFN1cGVyaW9y 47224\nIEJvbGQ= 47225\nIHF1aXp6ZXM= 47226\nIGdsZQ== 47227\nNDUw 47228\nIGNvbWXDp28= 47229\neW5u 47230\nIHZlcnN0 47231\nIE9sYWY= 47232\nIHBvbW9j 47233\nIFNhc2s= 47234\n65g= 47235\nIFRDUA== 47236\nIFByb3BlcnR5 47237\n7ZWY7KOg 47238\n4Lic4Lih 47239\nYm9vbQ== 47240\nYXJvcw== 47241\nINGA0L7RgdGB0LjQuQ== 47242\nINCx0YvQstCw0LXRgg== 47243\nIOydtOyVvOq4sOulvA== 47244\nIGNvbWJpZW4= 47245\ndmFjYw== 47246\nIGViZW5mYWxscw== 47247\ncGFyYQ== 47248\nINC30Lw= 47249\nIGRlc3BlcmF0aW9u 47250\nb3JkcmU= 47251\nINep15zXmQ== 47252\nIGdlbmVyb3VzbHk= 47253\nINCe0Lo= 47254\nIG9yYml0aW5n 47255\nPjwv 47256\nIGVzcMOt 47257\nIENPUA== 47258\ndmlzaWJsZQ== 47259\nINC/0YDQtdGB0YLRg9C/ 47260\nIHN0aXRjaGVk 47261\n4K+ILg== 47262\nIGxhdGVudA== 47263\nIFByYWI= 47264\nIE1jTg== 47265\nIEhlYWxpbmc= 47266\nIEN1cmlvc2l0eQ== 47267\nY2VydA== 47268\nIOuvvOyjvA== 47269\nIHBhdGllbnRseQ== 47270\nIFlU 47271\nZm9yZWlnbg== 47272\nIHbhuqtu 47273\nIGluZHVzdHJp 47274\nIGNvY2t0YWlscw== 47275\nIGJyaWdodGVu 47276\nIGNvbnNvbGlkYXRlZA== 47277\n0LDRgNC0 47278\nbHRyeQ== 47279\nIGdyaWxsZQ== 47280\nIGJvbmE= 47281\nIGRpbGlnZW50bHk= 47282\nIFdyZXN0bGVNYW5pYQ== 47283\nZXJrdA== 47284\nZW5lcmd5 47285\nOTk5 47286\n4K6V4K61 47287\nIHRvdGU= 47288\naW9ubw== 47289\nRElP 47290\nIHNjaGl6b3BocmVuaWE= 47291\nIHBvc3Rwb25lZA== 47292\nIFFpdQ== 47293\nIM+Dz4XOvQ== 47294\nIHpkasSZ 47295\nIHNwYW5uZW5k 47296\nIERJUw== 47297\nUmVs 47298\nIHJoaW4= 47299\naW1tdW5l 47300\nT2xk 47301\nIHBsw7Z0emxpY2g= 47302\nIG1vdW5k 47303\nIGFzdHJvbm9taWNhbA== 47304\nIEd1aWQ= 47305\nIEN1bA== 47306\nSEk= 47307\nIMWg 47308\nIHJlcG8= 47309\nIE1hdXJpY2U= 47310\nIGJhbmRpdHM= 47311\nIERlc2t0b3A= 47312\nw6Rzcw== 47313\nZnRh 47314\nIGxpY2VuY2U= 47315\nIGltYWdpbmFy 47316\nIEVudHJlcHJlbmU= 47317\neG8= 47318\nIOunm+yeiOuKlA== 47319\nINeU15E= 47320\nIHB1bXBraW5z 47321\nIGthbnNzYQ== 47322\nIGrEmXp5 47323\nIGNvbW11bmF1dMOp 47324\nYsO8cg== 47325\nIGVyaMO2 47326\nIFdvbHZlcg== 47327\nIFNoYXJpbmc= 47328\nIHBha2Fp 47329\nIGluc3VsdGVk 47330\n0JzRiw== 47331\n0L7Rlw== 47332\nIGNvbnNpc3Rl 47333\nIHlvdW5nc3RlcnM= 47334\nIGdsZWljaGVu 47335\nd2VkZXI= 47336\nIG1vdGU= 47337\nIGNsYXVzZXM= 47338\nw6l0YXQ= 47339\ncHJ1cw== 47340\nIHdhc3Q= 47341\nIENyaXNw 47342\nIG9mZmVuZGVycw== 47343\nIGNvbnZlY3Rpb24= 47344\nIGNvbmZpYW4= 47345\nb2xsb3c= 47346\nYW1ldA== 47347\nINGX0YU= 47348\nZmZpY2llbmN5 47349\nIHVuZ2xhdWI= 47350\naWdhbnM= 47351\nIG1hcmtldGVk 47352\nIFZBTg== 47353\nIHByb2NsYWltZWQ= 47354\nIGPDqWx1bGFz 47355\nIGNvbGxpZGU= 47356\nIE9jdWx1cw== 47357\nYWRvcmU= 47358\nSmk= 47359\nIHN1c3RhaW5pbmc= 47360\nIEZhc2M= 47361\nIHNldHp0 47362\nIG5vc2FsdHJlcw== 47363\nTW9zdA== 47364\nINCy0Yc= 47365\nIG5hdWM= 47366\nIEJoYXI= 47367\nIHnDqnU= 47368\nIHRpbWVzdA== 47369\nIHBlcnRhbWE= 47370\naXJtaQ== 47371\nIHp3cg== 47372\nIHZlcmJlc3M= 47373\nIHZvcnRleA== 47374\nIFNUQUNL 47375\n2KvYsQ== 47376\nuYTr 47377\nlJTsmKQ= 47378\nIGxpbmthZ2U= 47379\nIEZyYXNlcg== 47380\nZW5hcmlv 47381\nIOudvOuKlA== 47382\nIOyEoOuwsA== 47383\naHRoYWw= 47384\nIOq5jA== 47385\nIEtow7RuZw== 47386\nw4M= 47387\nIHNjcmFtYmxlZA== 47388\nIEVpbms= 47389\nIG1pY3Jvb3JnYW4= 47390\nIG5hcmNpc3Npc3Q= 47391\nIEtvbWJhdA== 47392\nIOunoQ== 47393\nIEFHQQ== 47394\nIHBlcmZla3Q= 47395\nIFNlcmll 47396\nZGV0ZXJt 47397\nLSc= 47398\nIHBvbnl0YWls 47399\nIGtvc2th 47400\n7JM= 47401\nIG9iZWM= 47402\nIGNoZXN0cw== 47403\ndmVlcg== 47404\nIHVwcmlzaW5n 47405\nIHN0b2tlZA== 47406\nYXNzb2Np 47407\nIHByb2R1w6fDo28= 47408\nIFNoYXBl 47409\n7KCc6rCA 47410\nIOuUsA== 47411\nIGpvbg== 47412\nIGluYWR2ZXJ0 47413\nYW50YXM= 47414\nINC90LDQutC+0L3QtdGG 47415\nIEFyc2VuYWw= 47416\nIHByb3RlZw== 47417\nIGxpYmVydMOp 47418\nIGdsYXJl 47419\nIHZlcmVpbg== 47420\nIGluc2VydHM= 47421\nIEphbmE= 47422\nIHd5ZGFqZQ== 47423\nxYJ1bQ== 47424\nICUu 47425\nb3JpZ2luZQ== 47426\nIHN5bmFnb2d1ZQ== 47427\nIGZhbGxhaXQ= 47428\nIGRpc29iZWQ= 47429\nIGFudGlj 47430\nIEN5Y2w= 47431\nIGFzeW5jaHJvbm91cw== 47432\nIOuyjOyNqA== 47433\nIGdlc3VuZA== 47434\nIGdhZ24= 47435\nIHBlYQ== 47436\nIGdyaW4= 47437\nw6lzdA== 47438\nIHNhdWM= 47439\nIE3DpGQ= 47440\n7ZW064+E 47441\ncHBz 47442\nIM61z4DOuQ== 47443\nIHBldXBsZQ== 47444\nIGRlYmVu 47445\nIEJyZWU= 47446\nINGA0L7Qu9GM 47447\nINC60LDQutC40Lw= 47448\nIMO6dGls 47449\nIGRpc3RyaWJ1dG9y 47450\n0LDQu9GL 47451\nIHN3b2rEhQ== 47452\nIGZvbGtsb3Jl 47453\nIHJlY2VpdmVycw== 47454\nIE1PTw== 47455\nYmlucw== 47456\nYXN0cmU= 47457\n7JWI6w== 47458\nIOuEo+qzoA== 47459\nIG11bHRpbWVkaWE= 47460\nIGdlYmF1dA== 47461\n0L7QstGL0YU= 47462\nw6N5 47463\nIGRhbmU= 47464\nb2tvbA== 47465\nZW1pdGlzbQ== 47466\nT05FWQ== 47467\nIHlhxJ8= 47468\nIGNoYXVmZg== 47469\nIGVzZnVlcg== 47470\nxINu 47471\nZXJ0YXM= 47472\nIGZvbmN0aW9ubmU= 47473\nb21pbmE= 47474\nIGl2b3J5 47475\nIFlvdXR1YmVy 47476\nIFNreXdhbGtlcg== 47477\n0LjRh9C10YHQutCw0Y8= 47478\ndG9p 47479\nIHZleWE= 47480\nIGdlbGVybnQ= 47481\nIGNoYW5jZWxsb3I= 47482\nIFN0YXRpc3RpY3M= 47483\nIHdlbGRlZA== 47484\nIG9uZGFu 47485\nIFNlaQ== 47486\nIG1lZGljYWxseQ== 47487\nIGVuZXJnaXplZA== 47488\nIFZpYQ== 47489\nINCy0LjQug== 47490\nIHVuaW50ZXI= 47491\nIGhpZ2huZXNz 47492\nIO2MlOs= 47493\nIGFtcGxpZmllZA== 47494\nIFNlcmdleQ== 47495\nIE1pbnM= 47496\nd2FybQ== 47497\ncGVsbA== 47498\nb3BoaWxl 47499\nIGjDqA== 47500\nIEJlbG8= 47501\nIFNrZXRjaA== 47502\nIGNoYXJhY3Rlcml6YXRpb24= 47503\nYW5zZW4= 47504\nINGC0YPRgA== 47505\nIOOFi+OFi+OFiw== 47506\nTm90ZQ== 47507\nIGtvxZ8= 47508\nIGNpZXJ0 47509\nZmx1 47510\nIGJhaHQ= 47511\nIERvd250b3du 47512\nIENSSVM= 47513\nb2RpZQ== 47514\nMTQw 47515\nIGxpdHJlcw== 47516\nIGdyaWV2 47517\nIOyUqOqwgA== 47518\nIHN1Y2NlZWRz 47519\nIF9f 47520\nZW50aW5n 47521\nIHZpbW9z 47522\nIHPDrA== 47523\nZGVmZW5zZQ== 47524\nIE1jRA== 47525\nIE1hcmlvbg== 47526\nIERvbnQ= 47527\nIEREUg== 47528\nIExhemFy 47529\nIERBUg== 47530\nIGt1dg== 47531\nS24= 47532\nIHNlbWJsYQ== 47533\nIGFpcmJvcm5l 47534\nIFZpb2xlbmNl 47535\n65CQ 47536\nIHJlc3RyYWludA== 47537\nIHdoaXN0bGVz 47538\nIHNjb2xkZWQ= 47539\nIGFjY2Vzbw== 47540\nIGFic29sdXRhbWVudGU= 47541\nIFR5bA== 47542\nIFNhcA== 47543\ntoDrtoQ= 47544\naXTDpHRlbg== 47545\nYWRlbQ== 47546\nIMO9 47547\nIHByZXNjcmliZQ== 47548\nIE1hZ2U= 47549\nIEhlbGVuYQ== 47550\ndnQ= 47551\nIHZpZW5lbg== 47552\nIHNuZWV6 47553\nIG1vbMOp 47554\nxrDhu59uZw== 47555\nIHRyYW5zcG9ydGluZw== 47556\nIExlYW4= 47557\nIGt1bmc= 47558\n0YPRgNCw 47559\nz4TOrQ== 47560\ndXRjaGVz 47561\nb25kZXJz 47562\nbGl5b3I= 47563\nTmF0 47564\nIHppag== 47565\nIG1hbW1hbA== 47566\nIGvDpHl0 47567\nIEpvYW5uYQ== 47568\nc2VudA== 47569\nIOCkuA== 47570\nIHZlc3RlZA== 47571\nIEVyZmFocnVuZw== 47572\nb2tlZQ== 47573\nIGNsaXBwaW5n 47574\nIExpc3RlbmluZw== 47575\nICgj 47576\nZsO2 47577\nIHZpZGFyZQ== 47578\nIGJyaXR0bGU= 47579\nIFNUQVJU 47580\nIERhbWFz 47581\nIFlvZw== 47582\nZ2FydA== 47583\nIHZlcmxpZXI= 47584\nIGhlYXJ0ZmVsdA== 47585\nIGRvxZvEhw== 47586\n7LmY6rCA 47587\nLsK7 47588\nIG1heGltYWw= 47589\nIGRpc3RpbnRvcw== 47590\nIOyZnOuDkO2VmOuptA== 47591\nIHNhaWxlZA== 47592\nIGNvbnZleWVk 47593\nIFRpbmRlcg== 47594\nIFNVUEVS 47595\n0L3QuNGG0YM= 47596\nY29udHJvbGxlZA== 47597\nIGZ1bno= 47598\nIGJhc3RhcmRz 47599\nIEdpbnNidXJn 47600\nIG51b3Zv 47601\nIFBlcmU= 47602\nIEpFUw== 47603\nIERpbmdlbg== 47604\nIEJldHM= 47605\ndW1iYQ== 47606\nYWNjacOzbg== 47607\nIOyeiOyngOunjA== 47608\nIHJldHJh 47609\nIExhdXJlbnQ= 47610\nIHBvenk= 47611\nIGdyb292ZXM= 47612\nIG3DoXF1aW5h 47613\nIG1pbmlvbg== 47614\nIGRlaW5lbg== 47615\nIFNoYXVu 47616\n15nXmQ== 47617\nIGhvbm9yYXJ5 47618\nb3NhdXJ1cw== 47619\nIHplaXQ= 47620\nIGVzcGVjaWU= 47621\nIEJDRQ== 47622\n0LDRgtC1 47623\nSnVzdGlu 47624\nIFdoZWVscw== 47625\nIOydtO2VtA== 47626\nINio2YrZhg== 47627\nIHByb3B1bHNpb24= 47628\nIHBlcmNlYmVy 47629\nIE5ld21hbg== 47630\n5bQ= 47631\nY3Vsb3Npcw== 47632\nTWk= 47633\nINCw0LrQutGD 47634\nIG1hc3RlcmluZw== 47635\nIGzDpGg= 47636\nIGZpc3Rz 47637\nIG1hcmluYWRl 47638\nTGlsbHk= 47639\nIOuFuOugpQ== 47640\nIFlI 47641\nIHVyZ2VudGx5 47642\nIGluZm9ybWF0aW9uYWw= 47643\nIGFjb3Jkbw== 47644\naXp6eQ== 47645\n7J207Ja0 47646\naW1hcg== 47647\nIOuCmOyYpOs= 47648\nIHR3ZW50aWVz 47649\nIHJhc3A= 47650\nIGJ1bXB5 47651\n2KjYqQ== 47652\nd29ya2Vy 47653\nIHF1aWNrZXN0 47654\nIGF0dGFjaGVz 47655\n0LLQuNCz 47656\nIOuCmO2DgOs= 47657\nIHB1cmVl 47658\nIG92ZXJzaXplZA== 47659\nIHN0aXJyZWQ= 47660\nIGpha2lt 47661\nIGhvbWljaWRl 47662\naXNjaWxsYQ== 47663\nIOyxmQ== 47664\nIHNwZWN1bGF0aXZl 47665\nIGFzc2lzdHM= 47666\nbWFpbg== 47667\nasOkaHI= 47668\naW5kZXQ= 47669\nIMWfdXI= 47670\nIGZvcmVjYXN0cw== 47671\nIGRpdmVyc2lvbg== 47672\nIHRhcmU= 47673\nIG9nbA== 47674\nIE9yZ2FuaXNhdGlvbg== 47675\nIENoZXZ5 47676\nIGJhamE= 47677\nYW5kxLFy 47678\nINmI2YTYpw== 47679\nIHJhZGlhbnQ= 47680\nIGxpYWlzb24= 47681\nIGRlbW9rcmF0 47682\nIE1BUkM= 47683\nz4DOv8+F 47684\nIHJ1bnQ= 47685\nIHByw6ljaXM= 47686\nIGdldmVu 47687\nIHbDqWhpYw== 47688\nIEpFU1M= 47689\nU1RS 47690\nIOyWmOs= 47691\nIHZpc2lvbmFyeQ== 47692\nIGJ1cmFkYW4= 47693\nIHJlYmlydGg= 47694\nIGV4aGliaXRlZA== 47695\nIE1ldGFsbA== 47696\nb2xpZQ== 47697\nZWx5bg== 47698\nIGZsYXZvdXJz 47699\nIGVzY3JpdG8= 47700\nIERlbGV0ZQ== 47701\nIOyVjOyVmOyWtA== 47702\nINGD0LrRgNCw0ZfQvQ== 47703\nIGludGVycnVwdGluZw== 47704\nIGlkZW50aWZpYw== 47705\nIFN1enVraQ== 47706\nIExhbmRpbmc= 47707\nYW5kaQ== 47708\nIGVzdHJhbg== 47709\nIGNvdWxldXI= 47710\nIGFncmFk 47711\nIFNueQ== 47712\nIOCuh+Cusg== 47713\nIGFuZGVy 47714\nIHJ1YQ== 47715\nIHByaXNl 47716\nIGxhdXJl 47717\nIO2KgA== 47718\nIG1vZGVyYXRpb24= 47719\nIGVyZmFocmVu 47720\nIGRlY29uc3Q= 47721\nIFJlZXNl 47722\nIFBL 47723\nZXRvcw== 47724\nIEdyYXZpdHk= 47725\nIEVyZW4= 47726\nIG92ZXJib2FyZA== 47727\nIG3DvHNzdA== 47728\nIEVtYWls 47729\n0LXRgNC8 47730\neWRp 47731\nacSZZHp5 47732\nIExPVQ== 47733\nIEZ1w59iYWxs 47734\nIFJE 47735\nYWx0cw== 47736\nIOyKpO2KuOs= 47737\nINCa0YDQsNGB 47738\nIHRlbGV2 47739\nINGA0L4= 47740\nIHJlc2lnbmF0aW9u 47741\nIGppbmdsZQ== 47742\nIFN0dWRpZW4= 47743\nIElY 47744\nIFNlbnRpbmVs 47745\nIFBhbmc= 47746\n6YQ= 47747\nSmFrZQ== 47748\nIHBlcnNvbmFnZW0= 47749\nIG3DqWRpYQ== 47750\nIENoZXJu 47751\nYW50aWNhbGx5 47752\nIHRo4budaQ== 47753\nIHBhcmFseXNpcw== 47754\nIGphcGFuZXNl 47755\nIGNvbmV4 47756\nIGVmaWM= 47757\nIHVuZGVyc2lkZQ== 47758\nIG5lb2w= 47759\nIGZpYW4= 47760\n0LjQvNC+0YHRgtGM 47761\nIHF1aXJreQ== 47762\nIHBpc3Rh 47763\nIENsZW1lbnQ= 47764\nbm90aGluZw== 47765\nINC/0L7QtdGF 47766\nIGhvcnJlbmQ= 47767\nIGNvbnNvbGlkYXRl 47768\ncGxveXM= 47769\nZW1ha2Vy 47770\nSmVubmlmZXI= 47771\nIG51bcOpcm8= 47772\nIGZhbW9zbw== 47773\nIE5lcHR1bmU= 47774\nIO2WiOyWtA== 47775\nINC/0YDQtdC30LjQtA== 47776\nIHNpdGNvbQ== 47777\nIHNlcmlv 47778\nIG11ZQ== 47779\nIGdsYW5kcw== 47780\nIGLDtnJqYXI= 47781\nIFlK 47782\nIFJpb3Q= 47783\ncGFyYWd1cw== 47784\nIHNlZ3VyYW7Dp2E= 47785\nIGltbWF0dXJl 47786\nIE1hZG9ubmE= 47787\n4LiN 47788\nIGxpbmdlcmluZw== 47789\nIGFjZXNzbw== 47790\nIE9yaWVudA== 47791\nIFJlY29tbQ== 47792\nIGNvbXBsYWM= 47793\nZm91bmRlZA== 47794\nYXR0ZW5k 47795\nIGNpZWxv 47796\nIFpoYW4= 47797\nbmFpcmVz 47798\nY2Nv 47799\nINeQ16A= 47800\nIHN0YXRh 47801\nIGNvbnRyYWRpY3Rvcnk= 47802\nIFPDqQ== 47803\nIFNBTg== 47804\nIENvbm5pZQ== 47805\nIOuLueyLnA== 47806\nINGB0LDQvNC+0Lk= 47807\nIG1hamVzdGlj 47808\nIFBlbmd1aW4= 47809\nIENPTUU= 47810\nw61jaW9z 47811\ncGVybw== 47812\nIG1n 47813\nIGZhdWM= 47814\nIGNvcnJlcg== 47815\nIEdvdHRlcw== 47816\nIEFuZ2xv 47817\nSGFy 47818\n4buXaQ== 47819\nIHZpdGVzc2U= 47820\nIGFubm91bmNlcg== 47821\nIE9tYWhh 47822\na3Vt 47823\nIHNwYXJlZA== 47824\nINGA0LDQt9Cw 47825\nINC/0L7Qu9GD0YfQuNGC0YHRjw== 47826\nIHTDpGjDpG4= 47827\nINC/0L7QvdCw0LQ= 47828\nIHBlcnRhaW5pbmc= 47829\nIFJhdGU= 47830\naWVybg== 47831\nR29sZA== 47832\nIHRlc3Rl 47833\nIGRlxJ9pbGQ= 47834\nIGRhbXBpbmc= 47835\nIFBhcnRuZXJzaGlw 47836\nenlzdGE= 47837\nZ2VsZA== 47838\nIHNtb2tlcw== 47839\nIE1hcnJpYWdl 47840\n7Kq97JeQ 47841\naXNjZQ== 47842\nIHRyeW5h 47843\nIERpcmVjdG9yeQ== 47844\nIOuCmOyYrA== 47845\nIHNoYW1lZnVs 47846\nIG1lbnRyZQ== 47847\nIGFzc2lnbmluZw== 47848\nIHJlcGVydG9pcmU= 47849\nIG9iamV0b3M= 47850\nIHVuZGVyd29ybGQ= 47851\nIGVuZGVhdm9ycw== 47852\nIGlnbml0ZQ== 47853\nINmI2Kw= 47854\nIGV4cGVyaWVudA== 47855\nINCX0LDQvw== 47856\nINC30LDQutC70Y7Rhw== 47857\nIHZvbHRhZ2Vz 47858\nIG5pZWdv 47859\nIGRlZmljaXRz 47860\nIGJ1ZW5vcw== 47861\nIFNsZWVwaW5n 47862\nIFNhbGVt 47863\nIHVubG9ja2luZw== 47864\nIGludGVyYWN0ZWQ= 47865\nIGVudGVuZGV1 47866\nIFN1cGVyaW50ZW5kZW50 47867\nIHN6Y3plZ8OzbA== 47868\nIHF1YXM= 47869\nIHBhbGluZw== 47870\nIGtobw== 47871\n2KjYrQ== 47872\nIGNvbGFib3I= 47873\nINC/0YDQuNCz0L7RgtC+0LI= 47874\nIG1hdXY= 47875\nIEp1ZGFz 47876\nIEFzc2lzdA== 47877\nINGC0LXRgNGA0Lg= 47878\nINC90LDRgdC60L7Qu9GM0LrQvg== 47879\nIHN1YnNpZHk= 47880\nIEVtYmFzc3k= 47881\nIGRhZ2Vu 47882\nIFNhbnRv 47883\n16nXldeR 47884\nIGFicnVwdGx5 47885\nIEFkYXB0 47886\nIHZhYWs= 47887\nIHBvc3RhbA== 47888\nIGludmVzdGly 47889\nIGZpcXVlaQ== 47890\nIGRvd250aW1l 47891\nIFdlYmI= 47892\nIE5DQUE= 47893\nIEVzdG95 47894\n0L7Qu9C+0YI= 47895\nIOyCrOqxtA== 47896\nIG5hdGlvbmFsaXN0 47897\nIEthdGhyeW4= 47898\nIEtvcA== 47899\n6ao= 47900\nU2Vhbg== 47901\nT05B 47902\nIEJq 47903\n16LXnQ== 47904\nw61i 47905\naWRhbWVudGU= 47906\nINCz0LvQsNC30LA= 47907\nIHVubmll 47908\nIGdlbWFha3Q= 47909\nIElOVEVSVklFV0VS 47910\nIEhhdXQ= 47911\nzq/Ovw== 47912\nZ2VvaXM= 47913\nd3lkZA== 47914\nINC60L7Qu9C4 47915\nIHRpZ2h0ZW5lZA== 47916\nIHBsYW5uZXJz 47917\nIGhlcnVt 47918\nIGfDtnLDvG4= 47919\nIGVsZWN0cm9uaWNhbGx5 47920\nIGNlcmFt 47921\nIOuLpOyWke2VnA== 47922\nIGVwaWxlcHN5 47923\nIGXEnw== 47924\nbGlucw== 47925\nIFNoaW55 47926\nINGB0L7Qu9C9 47927\nIG1hY2Fyb24= 47928\nIGltcGFjdG8= 47929\nIFZlZ2Fu 47930\nemXFhA== 47931\nIFJhcGhh 47932\nIFBhcnM= 47933\nIExFTw== 47934\nY8O8 47935\nINec15TXmdeV16o= 47936\nIMOkaG5saWNo 47937\nIGZsb3Nz 47938\nIEFa 47939\nIG3DtmNodGVu 47940\nIGdyb29taW5n 47941\nIGdyYXNzZXM= 47942\ncmFuY2g= 47943\nIHJlY2liaXI= 47944\nIGJvdW5jeQ== 47945\nIEhvYmJ5 47946\nIHZpa3RpZw== 47947\nIGJlZ2l0dQ== 47948\nIFBpY2Fzc28= 47949\nIEt1c2g= 47950\n66qo 47951\nIG9ic3RydWN0aW9u 47952\nIOu2hOychA== 47953\nIG1pY3JvYg== 47954\nIFdlc3RtaW5zdGVy 47955\ncm9wcw== 47956\nZHVs 47957\nIGRldm8= 47958\nIExlaHJlcg== 47959\nIEFkdmlzb3I= 47960\ndWNrZW4= 47961\nINCx0YPQvA== 47962\nIGZsYXR0ZXJpbmc= 47963\nIFRydW1hbg== 47964\nIFNlbXByZQ== 47965\nIE1jQ2Fpbg== 47966\nIEhpbmR1cw== 47967\nSnVsaWE= 47968\nIHdhdGVyc2hlZA== 47969\nIGx1c2g= 47970\n7KCE6w== 47971\nQmVmb3Jl 47972\nINCS0YLQvtGA 47973\nIFNhYVM= 47974\nIHNpdHp0 47975\nIGJlZXRsZQ== 47976\nIEVzc2VudGlhbA== 47977\nZW5rbw== 47978\nIOuVjOuPhA== 47979\nIHJldnZpbmc= 47980\nIHBvb3Jlcg== 47981\nIGNvZXJj 47982\nIGlkZWU= 47983\nIGNvw7s= 47984\nYWxldA== 47985\nIHpkcm93 47986\nIGZlbmRlcg== 47987\nZ3Jvd3Ro 47988\nRElORw== 47989\nIHpkZQ== 47990\nRU5UUw== 47991\nIGZhY2V0cw== 47992\ndXNoaW1h 47993\nIMWfZWg= 47994\nIHBhcmFzaXRl 47995\nIGxhcHNl 47996\nIE1lZXI= 47997\nIEt1bmQ= 47998\nIHNsb2c= 47999\nIGJydW5jaA== 48000\nIENoYXJ0 48001\nYXJ6 48002\nIE1VUw== 48003\nIG9mZmVuc2Vz 48004\nIGluZ2zDqXM= 48005\nIGZvbGlhZ2U= 48006\nb3BsYW4= 48007\nQXV0 48008\nIEphY3F1 48009\ndGFr 48010\naWVtYnJl 48011\nIHhlbg== 48012\nIG5vbWluZWVz 48013\nIGJpb21lZGljYWw= 48014\nw6lzdXM= 48015\nIGVzdHV2 48016\nz4TPjA== 48017\nQVRIQU4= 48018\nIO2VnOuNsA== 48019\nIGhlZWQ= 48020\nY3Jvc3N0YWxr 48021\nQmlsbA== 48022\nIHNwb3VzZXM= 48023\nINGB0Y7Qtg== 48024\nIHZlcnNv 48025\nIFN2ZW4= 48026\nIENhdQ== 48027\nY3V6 48028\nIOuztOyEuOyalA== 48029\nINGF0L7Qt9GP 48030\nIG1vY2tpbmc= 48031\nIE9uYQ== 48032\nIETDoQ== 48033\nIGZydWl0ZnVs 48034\nIGJhbnF1ZXQ= 48035\ndWRkaW5n 48036\naW5jdGlvbnM= 48037\nZGVydA== 48038\nc3Vk 48039\nIGRlc2Nvbg== 48040\nIEpD 48041\nIMKn 48042\nIHB1Ymxp 48043\n64iI 48044\nIGVudHNjaGllZGVu 48045\nIFJPSQ== 48046\nIOyDneqyvA== 48047\nIGvDpHl0dA== 48048\neWFuaQ== 48049\nc2hhdw== 48050\nIHVubGVhc2g= 48051\nIG1hbm5l 48052\nIGhpc3RvZ3JhbQ== 48053\n4Lit4Liw4LmE4Lij 48054\nIGdu 48055\nIGZlbGxh 48056\nIGVpbmdlcw== 48057\nIEJ1aWx0 48058\nIHJlcHJlc2VudGE= 48059\nIHB1bmlzaGluZw== 48060\nIG91dHNpZGVycw== 48061\n0L3Rg9GC0YzRgdGP 48062\nY3VycmVudA== 48063\nIGZhbWlsaWFyaXR5 48064\nINC00LjQsg== 48065\nIHByb2pldHM= 48066\nIGFxdWVsZXM= 48067\nIEdsdWU= 48068\ndGhvc2U= 48069\nIGluY2VwdGlvbg== 48070\nIGFxdWVsbG9z 48071\nIGlsbHVzaW9ucw== 48072\nIGF0dGVuZHM= 48073\ncmVzZQ== 48074\nIHN3YXJt 48075\nIHN3YWI= 48076\nIHJlZ2FyZGV6 48077\nIHBvc2nDp8Ojbw== 48078\nIGFraGly 48079\nIGV4dHJhY3Rpbmc= 48080\nIGFuZWNkb3Rl 48081\nIFRhbGU= 48082\nINCy0LjQvQ== 48083\nIGFiZ2Vz 48084\nIG9sdcWf 48085\nIGNvbXBsaWNhZG8= 48086\nIGNvdmFyaQ== 48087\n0ZbRgtGM 48088\nRGVy 48089\nINeZ15Q= 48090\nRm9ybQ== 48091\nIOyWtOyojOuToA== 48092\nIHJlYWRhYmxl 48093\nIGluaGliaXQ= 48094\nIGRlY2lwaGVy 48095\nIEFuZ3J5 48096\ncGc= 48097\n4K614K6k 48098\nINGB0L7QsdGB0YLQstC10L3QvdC+ 48099\nIHNhbWg= 48100\nIGVzY3I= 48101\nIGVuY29tcGFzc2Vz 48102\nIGF1c3Rlcg== 48103\nIGNvbmZpc2M= 48104\nIE1hbmRhbA== 48105\nIH0= 48106\nYXRjaGVy 48107\nPSM= 48108\nINC60LjQvdC+ 48109\nIHN0YWw= 48110\nbHVuZ3M= 48111\nIHZvbGU= 48112\nIHJlcXVpcw== 48113\nIHDDqW4= 48114\nIGxlY3R1cmVy 48115\nIGluc2NyaXB0aW9u 48116\nIGNlcnZpY2Fs 48117\nIFRyZWFzdXJl 48118\nIEpX 48119\nY29taW5ncw== 48120\nIGV5ZXNpZ2h0 48121\nIFRhaWxz 48122\nw61zaW1v 48123\nIHdvcmtzaGVldA== 48124\nIHN3aWZ0bHk= 48125\nIGNvbm9z 48126\nIGVsaW1pbmF0ZXM= 48127\nIEJsYXpl 48128\n0LDQu9C+0LM= 48129\nIHBpY3R1cmVk 48130\nIGdpcmFmZmU= 48131\nIExvZ2lj 48132\nIGVucmljaG1lbnQ= 48133\nRml0 48134\nIHVuaW50ZW5kZWQ= 48135\nIHBlcnNlY3V0ZWQ= 48136\nYWthcA== 48137\n67CY 48138\nIGJhcmJlcg== 48139\nIGFyYmVpdGV0 48140\nIFN1cnByaXNpbmdseQ== 48141\nIEF1dG9i 48142\ndW5rdQ== 48143\ncHJvdg== 48144\nIExvY2g= 48145\nb2J5bA== 48146\nINC/0L7QtNCz0L7RgtC+0LI= 48147\nIMOpY29ub21pcXVl 48148\nIHBhdHQ= 48149\nIGNlYXNlZA== 48150\nINGB0L/QuNGB 48151\nIG51Y2xlaQ== 48152\nIGlzdGU= 48153\nIFdhZw== 48154\nIHp1cGXFgm5pZQ== 48155\nIHByb3ZlcmI= 48156\nIEFow60= 48157\nbGlhbW8= 48158\nIHJlbGlhYmx5 48159\nIHBpaw== 48160\nIFRyYWRpbmc= 48161\nIENvbGVtYW4= 48162\nIM6xzr3OsQ== 48163\nIG1hZ2FyaQ== 48164\nIFBISUw= 48165\nIHNoZWRkaW5n 48166\nb2huZXI= 48167\nIHBvcm5vZ3JhcGh5 48168\nIGJlbmVmaWNpYXJpZXM= 48169\n4oCi 48170\nZW5pbg== 48171\nIHJlc29sdmluZw== 48172\nINGB0L/QvtGA0YI= 48173\nINCx0LXQsw== 48174\nIG5lY3Rhcg== 48175\ndWx0dXJh 48176\naW1zaWNhbA== 48177\njIDrpbw= 48178\nIHZpc8Ojbw== 48179\nw7/Dv8O/w7/Dv8O/w7/Dvw== 48180\nYXR0Zm9ybQ== 48181\nIOunnuuKlA== 48182\nIHBpbGdyaW1hZ2U= 48183\nIG1hdGluZw== 48184\nIFJlYXBlcg== 48185\nIEJyZWY= 48186\nINeR15M= 48187\nIG5vdmFtZW50ZQ== 48188\nIGdyaWxsaW5n 48189\nIFdpcmVsZXNz 48190\nIFJvbWFuaWFu 48191\n0ps= 48192\n7Jyg6w== 48193\naGFpdA== 48194\nIEJvcmE= 48195\nQVJSWQ== 48196\nIGh5cG90aGVzZXM= 48197\naWt1dA== 48198\nIOyVhOuyhA== 48199\nINGW0Lc= 48200\nIG5hdGlvbmFsZQ== 48201\n2KrZiQ== 48202\nw7xsbHQ= 48203\nIMOpbMOpbWVudHM= 48204\nIFdhcmU= 48205\nICgt 48206\n0LDQu9GM0L3QvtC8 48207\nIGluZGljdA== 48208\nIFN0b25lcw== 48209\nZXhwbG9zaW9u 48210\nIOuDhOyDiA== 48211\nIGZlbGlj 48212\nIGp1ZGljaWFyeQ== 48213\nIGluY2FybmF0aW9u 48214\nIGlubmluZw== 48215\nIGZvcm11bA== 48216\nIHNoaXBtZW50 48217\nIHJlaW5kZWVy 48218\nINC+0LfQvdCw0Yc= 48219\nIGVudm9s 48220\ndW5keQ== 48221\nINC30L3QsNGC0Yw= 48222\nINCy0LjQtNC10LvQuA== 48223\nIGV4Y2x1ZGluZw== 48224\nZGVhdGg= 48225\nIGJlcm0= 48226\nIHNvcHJhdHR1dHRv 48227\nIGRlYmlkbw== 48228\nIFppZw== 48229\nIE92 48230\nIEtFVklO 48231\nIFBhbGU= 48232\nIE1pcmU= 48233\nIGFuZGFy 48234\naW5jbHVkaW5n 48235\nIHN3YXBwZWQ= 48236\nIG1pc2NvbmNlcHRpb25z 48237\nIHNwb25n 48238\ncsOpYWw= 48239\nIG9yYml0YWxz 48240\nIGhhc2h0YWdz 48241\nb3JpdA== 48242\nIG1hdXZhaXM= 48243\n0LjRgdCw 48244\nIGxpdnJlcw== 48245\nIElQUw== 48246\nIDA0 48247\nw7Zn 48248\naW5zdHI= 48249\nINCy0L3QtdGI 48250\nIGhpY2U= 48251\naXPDqWU= 48252\nIG93ZXM= 48253\nIGVzaW1lcms= 48254\nIFVI 48255\nIGlycml0YXRpb24= 48256\nIGdpZ2dsZXM= 48257\nIGNvbG9uaWFsaXNt 48258\nIEJsaXNz 48259\nc3RyaW5ncw== 48260\nIHJldW5pdGVk 48261\nIFBzYWtp 48262\nd2FjaA== 48263\nIGNsaWZmcw== 48264\nIEZhbHNl 48265\nw6Rn 48266\ncGlwZQ== 48267\nIHdob3BwaW5n 48268\nIG1lcmluZ3Vl 48269\nIGJ1bmc= 48270\naW5kdXN0cmll 48271\nIGxlY2hl 48272\nIExveQ== 48273\nIGRyaWU= 48274\nIHBhc3NhdA== 48275\nIG9sZWg= 48276\nIGPDqXU= 48277\nIEdhYnJpZQ== 48278\nIHJlZWZz 48279\nIGJvbWJlcnM= 48280\nIGVwaXPDs2Rpbw== 48281\nIFJ1Zw== 48282\nIFByb3Nl 48283\nb25vcw== 48284\nIG9iZXNl 48285\nIGdvb2c= 48286\nIHBpYWNl 48287\nZmxhbnplbg== 48288\nIGZsYXBz 48289\nIEFsdG8= 48290\nRmlu 48291\nIHJlc2l6ZQ== 48292\n6re4656o 48293\nTmF0aGFu 48294\nnojroKQ= 48295\nINGC0LDQuQ== 48296\nIE5GVA== 48297\nIHNuZWV6ZQ== 48298\nIHNocm91ZA== 48299\nacOp 48300\nIHZlcmFtZW50ZQ== 48301\nIGNhc2NhZGU= 48302\nIE9vaw== 48303\n7JeG7J20 48304\nIGluZnVzZWQ= 48305\nZnBz 48306\nY2VudGVy 48307\nIGdyYXBwbGluZw== 48308\nIFdvaG51bmc= 48309\nIFR1bWI= 48310\nIEltbWE= 48311\nIER1eWd1c2Fs 48312\n0LXQvdGC0Lg= 48313\nIHN0ZXdhcmRzaGlw 48314\nIGhhcnA= 48315\nIGVuZG9yc2Vk 48316\nxLFsYW4= 48317\nINC+0LTQvdC40Lw= 48318\nIGNvbXBldGVuY3k= 48319\nIGJlcnQ= 48320\nIFRhbGVz 48321\nIHJoZQ== 48322\nIG9oaA== 48323\nIOqwhOuLqA== 48324\nIG1STkE= 48325\nIGdhbmdzdGVy 48326\nIFJ1bm5lcg== 48327\n0LXQvdC90YvQvA== 48328\ncGhvcmlh 48329\nIHfFgmHFm2Npd2ll 48330\nIHF1YXJ0bw== 48331\nIG9yZ2FuaXNl 48332\nIFZldA== 48333\nUGFk 48334\nINmF2Ks= 48335\nIHN0aW5rcw== 48336\nIER1bA== 48337\ndWVt 48338\naXNpZWo= 48339\nVG9w 48340\nIHR1c3Nlbg== 48341\nIEVmZW5kaW1peg== 48342\nIEJvdWxl 48343\nIFNsb3Zlbg== 48344\nIEzDtg== 48345\n0ZHQtw== 48346\n0YDQuNC/ 48347\nY2F2ZQ== 48348\nIGJvw64= 48349\nIGFwb2xvZ2lzZQ== 48350\nIE1hcmx5 48351\nIEV4cG9ydA== 48352\nIENhaXRsaW4= 48353\nIHRhdmFsbGE= 48354\nIGVudGFpbHM= 48355\nIGJyb20= 48356\nIENvcGVuaA== 48357\nIHdhbG51dA== 48358\nIGluc2lzdHM= 48359\nIGN14buZYw== 48360\nIFF1aXQ= 48361\nIERldmljZQ== 48362\n15LXnQ== 48363\nIERPVA== 48364\nIHZlbG9jaWRhZA== 48365\nTElF 48366\nQ29vbA== 48367\nIHNhbml0YXRpb24= 48368\nIG9saG8= 48369\nIEVC 48370\nIO2ZleyLpO2eiA== 48371\nINCc0LjRhQ== 48372\nIHp1aw== 48373\nIHN1cm5hbWU= 48374\nIFNjaHVsZA== 48375\ncnVmZg== 48376\nY3VsdHVyYWw= 48377\nINGB0YLQvtC70YzQutC+ 48378\njOuNsA== 48379\nIHRvcnRv 48380\nIGJhY2t1cHM= 48381\n0YDQuNC5 48382\ncmVsYXg= 48383\nIHN5bmVyZ3k= 48384\nIGJ1ZmZz 48385\nIGFwbw== 48386\nIFdlbGxuZXNz 48387\ncm91bmRlZA== 48388\nIHVuaXZlcnNlcw== 48389\nIGZlcmE= 48390\nIHN0YW5kYnk= 48391\nIFNpbHZh 48392\nIEpJ 48393\nZW5zb3JlZA== 48394\nIOyXhuuLpA== 48395\nINCQ0LI= 48396\nINC+0YLQtNC10Ls= 48397\nIGbDuA== 48398\nIFJvY2tlZg== 48399\nIENvbXBhc3M= 48400\nIEJlYXJz 48401\nVHVybg== 48402\nIHRo4buxYw== 48403\nIHBvc3NpYmlsZQ== 48404\nIGVzdGVt 48405\nIENyb2F0aWE= 48406\nIHTDpHTDpA== 48407\nIENBTA== 48408\n4LmA4Lie 48409\nINGB0YLRgNCw0YU= 48410\nIHNhbHRz 48411\nIG1pbmltYWxpc3Q= 48412\nIGluY29ycG9yYXRlcw== 48413\nINmG24HbjNq6 48414\nYWNhbw== 48415\nIHNsYW1tZWQ= 48416\nIGNhbWE= 48417\nVGV4dA== 48418\nISEhISEh 48419\nIGFsY2Fueg== 48420\nw6ltYQ== 48421\nIGluY2Vuc2U= 48422\nIGhhcmRlbg== 48423\nIGdyYW50aW5n 48424\nIE5haQ== 48425\nIEZpcm1h 48426\nIGh5cG9j 48427\nam9i 48428\nIFJI 48429\nenVy 48430\n0LjQu9GP 48431\nIMW6 48432\nIGRhcmVz 48433\nYW5o 48434\nIOunjO2BvA== 48435\nIGN1ZXN0acOzbg== 48436\nIExpbWE= 48437\nIGFzc3VudG8= 48438\nIElQTw== 48439\nIEJlbmdhbA== 48440\nIEJpZXI= 48441\nIHBzeWNoZQ== 48442\nIGFjcXVhaW50ZWQ= 48443\nIEfDvG4= 48444\n0L7Qt9C4 48445\nxZtjacSF 48446\nQUc= 48447\nIG1hbGZ1bmN0aW9u 48448\nIGFzdGVyb2lkcw== 48449\naXJleg== 48450\nYW1vcnBo 48451\nINGB0L7RgtGA0YPQtA== 48452\nIGZyZXNod2F0ZXI= 48453\nIGFycmFu 48454\nINC/0YDRiw== 48455\n0L3QvtCz 48456\nIGRpYWJldGlj 48457\nINmC2KfZhA== 48458\nIG9wcHJlc3M= 48459\nIGNhcGFjaXRhbmNl 48460\ncGVyZm9ybWFuY2U= 48461\nY3JhdGVz 48462\nIGFwb3N0bGU= 48463\nIEpFTg== 48464\nT1VMRA== 48465\nSW50cm8= 48466\nIHN0YWxscw== 48467\nIEFCT1VU 48468\nY3RpY2FtZW50ZQ== 48469\nIGRpbGlnZW50 48470\nIG1hbmlmZXN0cw== 48471\nIFBha2lzdGFuaQ== 48472\nICgn 48473\n= 48474\n6ZM= 48475\n6bI= 48476\n55g= 48477\n6Jw= 48478\n6bg= 48479\n6a4= 48480\n6Jo= 48481\n6J0= 48482\n6a8= 48483\n6JU= 48484\n6KQ= 48485\n6bA= 48486\n6J8= 48487\n56M= 48488\n6KA= 48489\n6ZE= 48490\n6bU= 48491\n6bE= 48492\n6bQ= 48493\n5bU= 48494\n54A= 48495\n6Z4= 48496\n6bY= 48497\n6Y4= 48498\n6ac= 48499\n6bc= 48500\n5aw= 48501\n6Ys= 48502\n5bY= 48503\n5qs= 48504\n55M= 48505\n77w= 48506\n46k= 48507\n770= 48508\n45Y= 48509\n45c= 48510\n5IE= 48511\n8KA= 48512\n4oCY 48513\n4oCZ 48514\n4oCc 48515\n4oCd 48516\n4oCn 48517\n4oSD 48518\n4peL 48519\n44CD 48520\n44CG 48521\n44CH 48522\n44CI 48523\n44CJ 48524\n44CS 48525\n44Cd 48526\n44Ce 48527\n44GB 48528\n44GC 48529\n44GD 48530\n44GE 48531\n44GF 48532\n44GG 48533\n44GH 48534\n44GI 48535\n44GJ 48536\n44GK 48537\n44GL 48538\n44GM 48539\n44GN 48540\n44GO 48541\n44GP 48542\n44GQ 48543\n44GR 48544\n44GS 48545\n44GT 48546\n44GU 48547\n44GV 48548\n44GW 48549\n44GX 48550\n44GY 48551\n44GZ 48552\n44Ga 48553\n44Gb 48554\n44Gc 48555\n44Gd 48556\n44Ge 48557\n44Gf 48558\n44Gg 48559\n44Gh 48560\n44Gi 48561\n44Gj 48562\n44Gk 48563\n44Gl 48564\n44Gm 48565\n44Gn 48566\n44Go 48567\n44Gp 48568\n44Gq 48569\n44Gr 48570\n44Gs 48571\n44Gt 48572\n44Gu 48573\n44Gv 48574\n44Gw 48575\n44Gx 48576\n44Gy 48577\n44Gz 48578\n44G0 48579\n44G1 48580\n44G2 48581\n44G3 48582\n44G4 48583\n44G5 48584\n44G6 48585\n44G7 48586\n44G8 48587\n44G9 48588\n44G+ 48589\n44G/ 48590\n44KA 48591\n44KB 48592\n44KC 48593\n44KD 48594\n44KE 48595\n44KF 48596\n44KG 48597\n44KH 48598\n44KI 48599\n44KJ 48600\n44KK 48601\n44KL 48602\n44KM 48603\n44KN 48604\n44KP 48605\n44KQ 48606\n44KR 48607\n44KS 48608\n44KT 48609\n44Kd 48610\n44Ke 48611\n44Kh 48612\n44Ki 48613\n44Kj 48614\n44Kk 48615\n44Kl 48616\n44Km 48617\n44Kn 48618\n44Ko 48619\n44Kp 48620\n44Kq 48621\n44Kr 48622\n44Ks 48623\n44Kt 48624\n44Ku 48625\n44Kv 48626\n44Kw 48627\n44Kx 48628\n44Ky 48629\n44Kz 48630\n44K0 48631\n44K1 48632\n44K2 48633\n44K3 48634\n44K4 48635\n44K5 48636\n44K6 48637\n44K7 48638\n44K8 48639\n44K9 48640\n44K+ 48641\n44K/ 48642\n44OA 48643\n44OB 48644\n44OC 48645\n44OD 48646\n44OE 48647\n44OF 48648\n44OG 48649\n44OH 48650\n44OI 48651\n44OJ 48652\n44OK 48653\n44OL 48654\n44OM 48655\n44ON 48656\n44OO 48657\n44OP 48658\n44OQ 48659\n44OR 48660\n44OS 48661\n44OT 48662\n44OU 48663\n44OV 48664\n44OW 48665\n44OX 48666\n44OY 48667\n44OZ 48668\n44Oa 48669\n44Ob 48670\n44Oc 48671\n44Od 48672\n44Oe 48673\n44Of 48674\n44Og 48675\n44Oh 48676\n44Oi 48677\n44Oj 48678\n44Ok 48679\n44Ol 48680\n44Om 48681\n44On 48682\n44Oo 48683\n44Op 48684\n44Oq 48685\n44Or 48686\n44Os 48687\n44Ot 48688\n44Ou 48689\n44Ov 48690\n44Ow 48691\n44Ox 48692\n44Oy 48693\n44Oz 48694\n44O0 48695\n44O1 48696\n44O2 48697\n44O7 48698\n44O8 48699\n44O+ 48700\n45at 48701\n45eO 48702\n46mS 48703\n46mn 48704\n5IGv 48705\n5LiA 48706\n5LiB 48707\n5LiD 48708\n5LiH 48709\n5LiI 48710\n5LiJ 48711\n5LiK 48712\n5LiL 48713\n5LiN 48714\n5LiO 48715\n5LiQ 48716\n5LiR 48717\n5LiT 48718\n5LiU 48719\n5LiV 48720\n5LiW 48721\n5LiX 48722\n5LiY 48723\n5LiZ 48724\n5Lia 48725\n5Lib 48726\n5Lic 48727\n5Lid 48728\n5Lie 48729\n5Lif 48730\n5Lih 48731\n5Lii 48732\n5Lik 48733\n5Lil 48734\n5Lim 48735\n5Lin 48736\n5Lio 48737\n5Liq 48738\n5Lir 48739\n5Lit 48740\n5Liw 48741\n5Liy 48742\n5Li0 48743\n5Li2 48744\n5Li4 48745\n5Li5 48746\n5Li6 48747\n5Li7 48748\n5Li8 48749\n5Li9 48750\n5Li+ 48751\n5LmC 48752\n5LmD 48753\n5LmF 48754\n5LmH 48755\n5LmI 48756\n5LmJ 48757\n5LmL 48758\n5LmM 48759\n5LmN 48760\n5LmO 48761\n5LmP 48762\n5LmQ 48763\n5LmS 48764\n5LmT 48765\n5LmU 48766\n5LmW 48767\n5LmX 48768\n5LmY 48769\n5LmZ 48770\n5Lmc 48771\n5Lmd 48772\n5Lme 48773\n5Lmf 48774\n5Lmg 48775\n5Lmh 48776\n5Lmi 48777\n5Lmm 48778\n5Lmp 48779\n5Lmq 48780\n5Lmw 48781\n5Lmx 48782\n5Lmz 48783\n5Lm4 48784\n5Lm+ 48785\n5LqA 48786\n5LqB 48787\n5LqC 48788\n5LqG 48789\n5LqI 48790\n5LqJ 48791\n5LqL 48792\n5LqM 48793\n5LqN 48794\n5LqO 48795\n5LqP 48796\n5LqR 48797\n5LqS 48798\n5LqT 48799\n5LqU 48800\n5LqV 48801\n5LqY 48802\n5LqZ 48803\n5Lqa 48804\n5Lqb 48805\n5Lqc 48806\n5Lqe 48807\n5Lqf 48808\n5Lqh 48809\n5Lqi 48810\n5Lqk 48811\n5Lql 48812\n5Lqm 48813\n5Lqn 48814\n5Lqo 48815\n5Lqp 48816\n5Lqr 48817\n5Lqs 48818\n5Lqt 48819\n5Lqu 48820\n5Lqw 48821\n5Lqy 48822\n5Lqz 48823\n5Lq1 48824\n5Lq2 48825\n5Lq5 48826\n5Lq6 48827\n5Lq/ 48828\n5LuA 48829\n5LuB 48830\n5LuC 48831\n5LuD 48832\n5LuE 48833\n5LuF 48834\n5LuG 48835\n5LuH 48836\n5LuJ 48837\n5LuK 48838\n5LuL 48839\n5LuN 48840\n5LuO 48841\n5LuP 48842\n5LuR 48843\n5LuT 48844\n5LuU 48845\n5LuV 48846\n5LuW 48847\n5LuX 48848\n5LuY 48849\n5LuZ 48850\n5Lud 48851\n5Lue 48852\n5Luf 48853\n5Luh 48854\n5Luj 48855\n5Luk 48856\n5Lul 48857\n5Luo 48858\n5Luq 48859\n5Lur 48860\n5Lus 48861\n5Lut 48862\n5Luu 48863\n5Luw 48864\n5Luy 48865\n5Luz 48866\n5Lu1 48867\n5Lu2 48868\n5Lu3 48869\n5Lu7 48870\n5Lu9 48871\n5Lu/ 48872\n5LyB 48873\n5LyD 48874\n5LyE 48875\n5LyJ 48876\n5LyK 48877\n5LyL 48878\n5LyN 48879\n5LyO 48880\n5LyP 48881\n5LyQ 48882\n5LyR 48883\n5LyX 48884\n5LyY 48885\n5LyZ 48886\n5Lya 48887\n5Lyb 48888\n5Lyc 48889\n5Lyd 48890\n5Lye 48891\n5Lyf 48892\n5Lyg 48893\n5Lyi 48894\n5Lyk 48895\n5Lyl 48896\n5Lym 48897\n5Lyn 48898\n5Lyq 48899\n5Lyr 48900\n5Lyv 48901\n5Lyw 48902\n5Lyx 48903\n5Lyy 48904\n5Ly0 48905\n5Ly2 48906\n5Ly3 48907\n5Ly4 48908\n5Ly6 48909\n5Ly8 48910\n5Ly9 48911\n5L2D 48912\n5L2G 48913\n5L2H 48914\n5L2I 48915\n5L2J 48916\n5L2N 48917\n5L2O 48918\n5L2P 48919\n5L2Q 48920\n5L2R 48921\n5L2T 48922\n5L2U 48923\n5L2V 48924\n5L2X 48925\n5L2Y 48926\n5L2Z 48927\n5L2a 48928\n5L2b 48929\n5L2c 48930\n5L2d 48931\n5L2e 48932\n5L2f 48933\n5L2g 48934\n5L2i 48935\n5L2j 48936\n5L2k 48937\n5L2l 48938\n5L2p 48939\n5L2s 48940\n5L2v 48941\n5L2w 48942\n5L2z 48943\n5L21 48944\n5L22 48945\n5L23 48946\n5L26 48947\n5L27 48948\n5L28 48949\n5L2+ 48950\n5L2/ 48951\n5L6C 48952\n5L6D 48953\n5L6E 48954\n5L6G 48955\n5L6I 48956\n5L6J 48957\n5L6L 48958\n5L6N 48959\n5L6P 48960\n5L6R 48961\n5L6T 48962\n5L6U 48963\n5L6X 48964\n5L6Y 48965\n5L6b 48966\n5L6d 48967\n5L6g 48968\n5L6h 48969\n5L6j 48970\n5L6l 48971\n5L6m 48972\n5L6n 48973\n5L6o 48974\n5L6p 48975\n5L6q 48976\n5L6s 48977\n5L6t 48978\n5L6u 48979\n5L6v 48980\n5L61 48981\n5L62 48982\n5L63 48983\n5L6/ 48984\n5L+C 48985\n5L+D 48986\n5L+E 48987\n5L+F 48988\n5L+K 48989\n5L+O 48990\n5L+P 48991\n5L+Q 48992\n5L+R 48993\n5L+U 48994\n5L+X 48995\n5L+Y 48996\n5L+a 48997\n5L+b 48998\n5L+c 48999\n5L+d 49000\n5L+e 49001\n5L+f 49002\n5L+g 49003\n5L+h 49004\n5L+i 49005\n5L+j 49006\n5L+k 49007\n5L+m 49008\n5L+o 49009\n5L+p 49010\n5L+q 49011\n5L+s 49012\n5L+t 49013\n5L+u 49014\n5L+v 49015\n5L+x 49016\n5L+z 49017\n5L+1 49018\n5L+2 49019\n5L+4 49020\n5L+6 49021\n5L++ 49022\n5YCF 49023\n5YCG 49024\n5YCJ 49025\n5YCL 49026\n5YCM 49027\n5YCN 49028\n5YCP 49029\n5YCR 49030\n5YCS 49031\n5YCT 49032\n5YCU 49033\n5YCW 49034\n5YCY 49035\n5YCZ 49036\n5YCa 49037\n5YCc 49038\n5YCf 49039\n5YCh 49040\n5YCi 49041\n5YCj 49042\n5YCk 49043\n5YCl 49044\n5YCm 49045\n5YCn 49046\n5YCo 49047\n5YCp 49048\n5YCq 49049\n5YCr 49050\n5YCs 49051\n5YCt 49052\n5YCu 49053\n5YC2 49054\n5YC5 49055\n5YC6 49056\n5YC8 49057\n5YC+ 49058\n5YGB 49059\n5YGD 49060\n5YGH 49061\n5YGI 49062\n5YGJ 49063\n5YGM 49064\n5YGO 49065\n5YGP 49066\n5YGT 49067\n5YGV 49068\n5YGW 49069\n5YGa 49070\n5YGc 49071\n5YGl 49072\n5YGs 49073\n5YGt 49074\n5YGx 49075\n5YGy 49076\n5YG0 49077\n5YG1 49078\n5YG2 49079\n5YG3 49080\n5YG4 49081\n5YG7 49082\n5YG9 49083\n5YG+ 49084\n5YG/ 49085\n5YKA 49086\n5YKF 49087\n5YKI 49088\n5YKN 49089\n5YKR 49090\n5YKV 49091\n5YKY 49092\n5YKZ 49093\n5YKc 49094\n5YKi 49095\n5YKj 49096\n5YKl 49097\n5YKn 49098\n5YKo 49099\n5YKp 49100\n5YKr 49101\n5YKs 49102\n5YKt 49103\n5YKy 49104\n5YKz 49105\n5YK0 49106\n5YK1 49107\n5YK3 49108\n5YK6 49109\n5YK7 49110\n5YK+ 49111\n5YOC 49112\n5YOF 49113\n5YOG 49114\n5YOJ 49115\n5YOK 49116\n5YON 49117\n5YOP 49118\n5YOR 49119\n5YOU 49120\n5YOV 49121\n5YOW 49122\n5YOa 49123\n5YOe 49124\n5YOj 49125\n5YOl 49126\n5YOm 49127\n5YOn 49128\n5YOs 49129\n5YOt 49130\n5YOu 49131\n5YOx 49132\n5YOz 49133\n5YO1 49134\n5YO5 49135\n5YO7 49136\n5YSA 49137\n5YSB 49138\n5YSC 49139\n5YSE 49140\n5YSG 49141\n5YSI 49142\n5YSJ 49143\n5YSL 49144\n5YSS 49145\n5YSU 49146\n5YSV 49147\n5YSY 49148\n5YSa 49149\n5YSf 49150\n5YSh 49151\n5YSq 49152\n5YSy 49153\n5YS3 49154\n5YS6 49155\n5YS8 49156\n5YS/ 49157\n5YWA 49158\n5YWB 49159\n5YWD 49160\n5YWE 49161\n5YWF 49162\n5YWG 49163\n5YWH 49164\n5YWI 49165\n5YWJ 49166\n5YWK 49167\n5YWL 49168\n5YWM 49169\n5YWN 49170\n5YWO 49171\n5YWQ 49172\n5YWR 49173\n5YWS 49174\n5YWU 49175\n5YWV 49176\n5YWW 49177\n5YWa 49178\n5YWc 49179\n5YWi 49180\n5YWl 49181\n5YWn 49182\n5YWo 49183\n5YWp 49184\n5YWq 49185\n5YWr 49186\n5YWs 49187\n5YWt 49188\n5YWu 49189\n5YWw 49190\n5YWx 49191\n5YWz 49192\n5YW0 49193\n5YW1 49194\n5YW2 49195\n5YW3 49196\n5YW4 49197\n5YW5 49198\n5YW7 49199\n5YW8 49200\n5YW9 49201\n5YaA 49202\n5YaC 49203\n5YaF 49204\n5YaG 49205\n5YaH 49206\n5YaI 49207\n5YaJ 49208\n5YaK 49209\n5YaM 49210\n5YaN 49211\n5YaP 49212\n5YaR 49213\n5YaS 49214\n5YaV 49215\n5YaW 49216\n5YaX 49217\n5YaZ 49218\n5Yaa 49219\n5Yab 49220\n5Yac 49221\n5Yag 49222\n5Yai 49223\n5Yak 49224\n5Yal 49225\n5Yam 49226\n5Yan 49227\n5Yao 49228\n5Yap 49229\n5Yaq 49230\n5Yar 49231\n5Yas 49232\n5Yau 49233\n5Yav 49234\n5Yaw 49235\n5Yax 49236\n5Yay 49237\n5Yaz 49238\n5Ya0 49239\n5Ya1 49240\n5Ya2 49241\n5Ya3 49242\n5Ya7 49243\n5Ya8 49244\n5Ya9 49245\n5Ya/ 49246\n5YeA 49247\n5YeE 49248\n5YeG 49249\n5YeH 49250\n5YeI 49251\n5YeJ 49252\n5YeK 49253\n5YeL 49254\n5YeM 49255\n5YeN 49256\n5YeP 49257\n5YeR 49258\n5YeW 49259\n5Yeb 49260\n5Yec 49261\n5Yed 49262\n5Yeg 49263\n5Yeh 49264\n5Yei 49265\n5Yek 49266\n5Yem 49267\n5Yen 49268\n5Yep 49269\n5Yeq 49270\n5Yer 49271\n5Yet 49272\n5Yev 49273\n5Yew 49274\n5Yex 49275\n5Yez 49276\n5Ye1 49277\n5Ye2 49278\n5Ye4 49279\n5Ye5 49280\n5Ye6 49281\n5Ye7 49282\n5Ye8 49283\n5Ye9 49284\n5Ye/ 49285\n5YiA 49286\n5YiB 49287\n5YiD 49288\n5YiG 49289\n5YiH 49290\n5YiI 49291\n5YiK 49292\n5YiN 49293\n5YiO 49294\n5YiR 49295\n5YiS 49296\n5YiU 49297\n5YiX 49298\n5YiY 49299\n5YiZ 49300\n5Yia 49301\n5Yib 49302\n5Yid 49303\n5Yig 49304\n5Yik 49305\n5Yil 49306\n5Yio 49307\n5Yip 49308\n5Yiq 49309\n5Yir 49310\n5Yis 49311\n5Yit 49312\n5Yiu 49313\n5Yiw 49314\n5Yiz 49315\n5Yi2 49316\n5Yi3 49317\n5Yi4 49318\n5Yi5 49319\n5Yi6 49320\n5Yi7 49321\n5Yi8 49322\n5Yi9 49323\n5Yi/ 49324\n5YmA 49325\n5YmB 49326\n5YmC 49327\n5YmD 49328\n5YmF 49329\n5YmH 49330\n5YmK 49331\n5YmL 49332\n5YmM 49333\n5YmN 49334\n5YmO 49335\n5YmQ 49336\n5YmR 49337\n5YmU 49338\n5YmV 49339\n5YmW 49340\n5Ymb 49341\n5Ymc 49342\n5Ymd 49343\n5Yme 49344\n5Ymf 49345\n5Ymh 49346\n5Ymj 49347\n5Ymk 49348\n5Yml 49349\n5Ymn 49350\n5Ymp 49351\n5Ymq 49352\n5Ymv 49353\n5Ymw 49354\n5Ymx 49355\n5Ymy 49356\n5Ym0 49357\n5Ym1 49358\n5Ym9 49359\n5Ym/ 49360\n5YqC 49361\n5YqD 49362\n5YqH 49363\n5YqI 49364\n5YqJ 49365\n5YqN 49366\n5YqP 49367\n5YqR 49368\n5YqS 49369\n5YqT 49370\n5YqU 49371\n5Yqb 49372\n5Yqd 49373\n5Yqe 49374\n5Yqf 49375\n5Yqg 49376\n5Yqh 49377\n5Yqi 49378\n5Yqj 49379\n5Yqo 49380\n5Yqp 49381\n5Yqq 49382\n5Yqr 49383\n5Yqs 49384\n5Yqt 49385\n5Yqx 49386\n5Yqy 49387\n5Yqz 49388\n5Yq0 49389\n5Yq1 49390\n5Yq5 49391\n5Yq8 49392\n5Yq+ 49393\n5Yq/ 49394\n5YuB 49395\n5YuD 49396\n5YuF 49397\n5YuH 49398\n5YuJ 49399\n5YuL 49400\n5YuN 49401\n5YuQ 49402\n5YuS 49403\n5YuV 49404\n5YuW 49405\n5YuX 49406\n5YuY 49407\n5YuZ 49408\n5Yub 49409\n5Yud 49410\n5Yue 49411\n5Yuf 49412\n5Yug 49413\n5Yui 49414\n5Yuj 49415\n5Yuk 49416\n5Yum 49417\n5Yun 49418\n5Yuu 49419\n5Yuw 49420\n5Yuy 49421\n5Yuz 49422\n5Yu1 49423\n5Yu4 49424\n5Yu5 49425\n5Yu6 49426\n5Yu7 49427\n5Yu+ 49428\n5Yu/ 49429\n5YyA 49430\n5YyB 49431\n5YyC 49432\n5YyF 49433\n5YyG 49434\n5YyI 49435\n5YyN 49436\n5YyP 49437\n5YyQ 49438\n5YyV 49439\n5YyW 49440\n5YyX 49441\n5YyZ 49442\n5Yya 49443\n5Yyc 49444\n5Yyd 49445\n5Yyg 49446\n5Yyh 49447\n5Yyj 49448\n5Yyq 49449\n5Yyu 49450\n5Yyv 49451\n5Yyx 49452\n5Yy4 49453\n5Yy5 49454\n5Yy6 49455\n5Yy7 49456\n5Yy8 49457\n5Yy9 49458\n5Yy+ 49459\n5Yy/ 49460\n5Y2A 49461\n5Y2B 49462\n5Y2D 49463\n5Y2F 49464\n5Y2G 49465\n5Y2H 49466\n5Y2I 49467\n5Y2J 49468\n5Y2K 49469\n5Y2N 49470\n5Y2O 49471\n5Y2P 49472\n5Y2R 49473\n5Y2S 49474\n5Y2T 49475\n5Y2U 49476\n5Y2V 49477\n5Y2W 49478\n5Y2X 49479\n5Y2Y 49480\n5Y2a 49481\n5Y2c 49482\n5Y2e 49483\n5Y2f 49484\n5Y2g 49485\n5Y2h 49486\n5Y2i 49487\n5Y2j 49488\n5Y2k 49489\n5Y2m 49490\n5Y2n 49491\n5Y2r 49492\n5Y2s 49493\n5Y2u 49494\n5Y2v 49495\n5Y2w 49496\n5Y2x 49497\n5Y2y 49498\n5Y2z 49499\n5Y20 49500\n5Y21 49501\n5Y23 49502\n5Y24 49503\n5Y26 49504\n5Y27 49505\n5Y2/ 49506\n5Y6C 49507\n5Y6E 49508\n5Y6F 49509\n5Y6G 49510\n5Y6J 49511\n5Y6L 49512\n5Y6M 49513\n5Y6N 49514\n5Y6Q 49515\n5Y6T 49516\n5Y6U 49517\n5Y6V 49518\n5Y6W 49519\n5Y6Y 49520\n5Y6a 49521\n5Y6d 49522\n5Y6f 49523\n5Y6g 49524\n5Y6i 49525\n5Y6j 49526\n5Y6l 49527\n5Y6m 49528\n5Y6o 49529\n5Y6p 49530\n5Y6t 49531\n5Y6u 49532\n5Y6w 49533\n5Y6y 49534\n5Y6z 49535\n5Y62 49536\n5Y67 49537\n5Y6/ 49538\n5Y+B 49539\n5Y+C 49540\n5Y+D 49541\n5Y+G 49542\n5Y+I 49543\n5Y+J 49544\n5Y+K 49545\n5Y+L 49546\n5Y+M 49547\n5Y+N 49548\n5Y+O 49549\n5Y+R 49550\n5Y+U 49551\n5Y+W 49552\n5Y+X 49553\n5Y+Y 49554\n5Y+Z 49555\n5Y+b 49556\n5Y+f 49557\n5Y+g 49558\n5Y+h 49559\n5Y+i 49560\n5Y+j 49561\n5Y+k 49562\n5Y+l 49563\n5Y+m 49564\n5Y+o 49565\n5Y+p 49566\n5Y+q 49567\n5Y+r 49568\n5Y+s 49569\n5Y+t 49570\n5Y+u 49571\n5Y+v 49572\n5Y+w 49573\n5Y+x 49574\n5Y+y 49575\n5Y+z 49576\n5Y+1 49577\n5Y+2 49578\n5Y+3 49579\n5Y+4 49580\n5Y+5 49581\n5Y+6 49582\n5Y+7 49583\n5Y+8 49584\n5Y+9 49585\n5ZCB 49586\n5ZCD 49587\n5ZCE 49588\n5ZCF 49589\n5ZCG 49590\n5ZCH 49591\n5ZCI 49592\n5ZCJ 49593\n5ZCK 49594\n5ZCL 49595\n5ZCM 49596\n5ZCN 49597\n5ZCO 49598\n5ZCP 49599\n5ZCQ 49600\n5ZCR 49601\n5ZCS 49602\n5ZCT 49603\n5ZCU 49604\n5ZCV 49605\n5ZCW 49606\n5ZCX 49607\n5ZCZ 49608\n5ZCb 49609\n5ZCd 49610\n5ZCe 49611\n5ZCf 49612\n5ZCg 49613\n5ZCh 49614\n5ZCj 49615\n5ZCl 49616\n5ZCm 49617\n5ZCn 49618\n5ZCo 49619\n5ZCp 49620\n5ZCr 49621\n5ZCs 49622\n5ZCt 49623\n5ZCu 49624\n5ZCv 49625\n5ZCx 49626\n5ZCy 49627\n5ZCz 49628\n5ZC0 49629\n5ZC1 49630\n5ZC2 49631\n5ZC4 49632\n5ZC5 49633\n5ZC7 49634\n5ZC8 49635\n5ZC9 49636\n5ZC+ 49637\n5ZC/ 49638\n5ZGA 49639\n5ZGC 49640\n5ZGD 49641\n5ZGG 49642\n5ZGI 49643\n5ZGJ 49644\n5ZGK 49645\n5ZGL 49646\n5ZGO 49647\n5ZGQ 49648\n5ZGR 49649\n5ZGS 49650\n5ZGT 49651\n5ZGU 49652\n5ZGV 49653\n5ZGW 49654\n5ZGX 49655\n5ZGY 49656\n5ZGZ 49657\n5ZGb 49658\n5ZGc 49659\n5ZGf 49660\n5ZGi 49661\n5ZGj 49662\n5ZGk 49663\n5ZGm 49664\n5ZGo 49665\n5ZGq 49666\n5ZGr 49667\n5ZGv 49668\n5ZGw 49669\n5ZGx 49670\n5ZGy 49671\n5ZGz 49672\n5ZG1 49673\n5ZG2 49674\n5ZG3 49675\n5ZG4 49676\n5ZG7 49677\n5ZG8 49678\n5ZG9 49679\n5ZKA 49680\n5ZKB 49681\n5ZKC 49682\n5ZKE 49683\n5ZKG 49684\n5ZKJ 49685\n5ZKL 49686\n5ZKM 49687\n5ZKO 49688\n5ZKP 49689\n5ZKQ 49690\n5ZKS 49691\n5ZKU 49692\n5ZKV 49693\n5ZKW 49694\n5ZKX 49695\n5ZKY 49696\n5ZKZ 49697\n5ZKa 49698\n5ZKb 49699\n5ZKd 49700\n5ZKj 49701\n5ZKk 49702\n5ZKm 49703\n5ZKn 49704\n5ZKo 49705\n5ZKp 49706\n5ZKq 49707\n5ZKr 49708\n5ZKs 49709\n5ZKt 49710\n5ZKv 49711\n5ZKx 49712\n5ZKy 49713\n5ZKz 49714\n5ZK0 49715\n5ZK1 49716\n5ZK2 49717\n5ZK3 49718\n5ZK4 49719\n5ZK5 49720\n5ZK7 49721\n5ZK9 49722\n5ZK+ 49723\n5ZK/ 49724\n5ZOA 49725\n5ZOB 49726\n5ZOC 49727\n5ZOD 49728\n5ZOE 49729\n5ZOG 49730\n5ZOH 49731\n5ZOI 49732\n5ZOJ 49733\n5ZOL 49734\n5ZOM 49735\n5ZON 49736\n5ZOO 49737\n5ZOP 49738\n5ZOQ 49739\n5ZOR 49740\n5ZOS 49741\n5ZOT 49742\n5ZOU 49743\n5ZOV 49744\n5ZOW 49745\n5ZOX 49746\n5ZOY 49747\n5ZOZ 49748\n5ZOa 49749\n5ZOc 49750\n5ZOd 49751\n5ZOe 49752\n5ZOf 49753\n5ZOg 49754\n5ZOh 49755\n5ZOl 49756\n5ZOm 49757\n5ZOn 49758\n5ZOo 49759\n5ZOp 49760\n5ZOq 49761\n5ZOt 49762\n5ZOu 49763\n5ZOy 49764\n5ZO6 49765\n5ZO8 49766\n5ZO9 49767\n5ZSB 49768\n5ZSE 49769\n5ZSG 49770\n5ZSH 49771\n5ZSJ 49772\n5ZSP 49773\n5ZSQ 49774\n5ZSR 49775\n5ZSU 49776\n5ZSW 49777\n5ZSb 49778\n5ZSe 49779\n5ZSg 49780\n5ZSi 49781\n5ZSj 49782\n5ZSk 49783\n5ZSn 49784\n5ZSq 49785\n5ZSs 49786\n5ZSu 49787\n5ZSv 49788\n5ZSw 49789\n5ZSx 49790\n5ZSz 49791\n5ZS1 49792\n5ZS3 49793\n5ZS4 49794\n5ZS7 49795\n5ZS8 49796\n5ZS+ 49797\n5ZS/ 49798\n5ZWA 49799\n5ZWB 49800\n5ZWC 49801\n5ZWD 49802\n5ZWE 49803\n5ZWG 49804\n5ZWJ 49805\n5ZWK 49806\n5ZWL 49807\n5ZWP 49808\n5ZWQ 49809\n5ZWT 49810\n5ZWV 49811\n5ZWW 49812\n5ZWc 49813\n5ZWe 49814\n5ZWf 49815\n5ZWh 49816\n5ZWk 49817\n5ZWl 49818\n5ZWm 49819\n5ZWn 49820\n5ZWp 49821\n5ZWq 49822\n5ZWr 49823\n5ZWs 49824\n5ZWt 49825\n5ZWu 49826\n5ZWv 49827\n5ZWw 49828\n5ZWx 49829\n5ZWy 49830\n5ZW1 49831\n5ZW2 49832\n5ZW3 49833\n5ZW4 49834\n5ZW7 49835\n5ZW8 49836\n5ZW+ 49837\n5ZaA 49838\n5ZaB 49839\n5ZaC 49840\n5ZaD 49841\n5ZaE 49842\n5ZaG 49843\n5ZaH 49844\n5ZaI 49845\n5ZaJ 49846\n5ZaK 49847\n5ZaL 49848\n5ZaO 49849\n5ZaP 49850\n5ZaQ 49851\n5ZaR 49852\n5ZaS 49853\n5ZaT 49854\n5ZaU 49855\n5ZaY 49856\n5ZaZ 49857\n5Zaa 49858\n5Zab 49859\n5Zac 49860\n5Zad 49861\n5Zaf 49862\n5Zak 49863\n5Zan 49864\n5Zao 49865\n5Zap 49866\n5Zaq 49867\n5Zar 49868\n5Zas 49869\n5Zau 49870\n5Zaw 49871\n5Zax 49872\n5Zay 49873\n5Zaz 49874\n5Za1 49875\n5Za2 49876\n5Za3 49877\n5Za5 49878\n5Za6 49879\n5Za7 49880\n5Za9 49881\n5Za+ 49882\n5ZeE 49883\n5ZeF 49884\n5ZeG 49885\n5ZeH 49886\n5ZeJ 49887\n5ZeM 49888\n5ZeN 49889\n5ZeO 49890\n5ZeQ 49891\n5ZeR 49892\n5ZeS 49893\n5ZeT 49894\n5ZeU 49895\n5ZeW 49896\n5ZeZ 49897\n5Zea 49898\n5Zeb 49899\n5Zec 49900\n5Zed 49901\n5Zee 49902\n5Zef 49903\n5Zeh 49904\n5Zej 49905\n5Zek 49906\n5Zel 49907\n5Zem 49908\n5Zeo 49909\n5Zeq 49910\n5Zer 49911\n5Zes 49912\n5Zeu 49913\n5Zev 49914\n5Zew 49915\n5Zex 49916\n5Zey 49917\n5Zez 49918\n5Ze1 49919\n5Ze2 49920\n5Ze3 49921\n5Ze7 49922\n5Ze9 49923\n5Ze+ 49924\n5ZiA 49925\n5ZiB 49926\n5ZiF 49927\n5ZiG 49928\n5ZiI 49929\n5ZiJ 49930\n5ZiM 49931\n5ZiO 49932\n5ZiP 49933\n5ZiU 49934\n5ZiW 49935\n5ZiX 49936\n5ZiY 49937\n5Zia 49938\n5Zib 49939\n5Zie 49940\n5Zif 49941\n5Zih 49942\n5Zii 49943\n5Zij 49944\n5Zik 49945\n5Zil 49946\n5Zin 49947\n5Zip 49948\n5Zis 49949\n5Zit 49950\n5Ziv 49951\n5Ziw 49952\n5Zix 49953\n5Ziy 49954\n5Zi0 49955\n5Zi2 49956\n5Zi4 49957\n5Zi5 49958\n5Zi7 49959\n5Zi/ 49960\n5ZmC 49961\n5ZmD 49962\n5ZmM 49963\n5ZmN 49964\n5ZmO 49965\n5ZmT 49966\n5ZmU 49967\n5ZmX 49968\n5ZmY 49969\n5ZmZ 49970\n5Zmb 49971\n5Zmc 49972\n5Zmg 49973\n5Zmi 49974\n5Zmk 49975\n5Zmo 49976\n5Zmp 49977\n5Zmq 49978\n5Zmr 49979\n5Zms 49980\n5Zmx 49981\n5Zm0 49982\n5Zm2 49983\n5Zm4 49984\n5Zm5 49985\n5Zm6 49986\n5Zm7 49987\n5Zm8 49988\n5ZqA 49989\n5ZqF 49990\n5ZqG 49991\n5ZqH 49992\n5ZqK 49993\n5ZqO 49994\n5ZqP 49995\n5ZqQ 49996\n5ZqS 49997\n5ZqT 49998\n5ZqU 49999\n5ZqV 50000\n5ZqX 50001\n5Zqc 50002\n5Zqf 50003\n5Zqg 50004\n5Zqi 50005\n5Zqj 50006\n5Zql 50007\n5Zqo 50008\n5Zqp 50009\n5Zqt 50010\n5Zqu 50011\n5Zqv 50012\n5Zq0 50013\n5Zq2 50014\n5Zq3 50015\n5Zq8 50016\n5ZuA 50017\n5ZuB 50018\n5ZuC 50019\n5ZuD 50020\n5ZuI 50021\n5ZuJ 50022\n5ZuK 50023\n5ZuN 50024\n5ZuO 50025\n5ZuR 50026\n5ZuU 50027\n5ZuW 50028\n5ZuX 50029\n5Zua 50030\n5Zub 50031\n5Zud 50032\n5Zue 50033\n5Zuf 50034\n5Zug 50035\n5Zuh 50036\n5Zui 50037\n5Zuj 50038\n5Zuk 50039\n5Zun 50040\n5Zuo 50041\n5Zur 50042\n5Zut 50043\n5Zuu 50044\n5Zuv 50045\n5Zuw 50046\n5Zux 50047\n5Zuy 50048\n5Zuz 50049\n5Zu0 50050\n5Zu1 50051\n5Zu3 50052\n5Zu5 50053\n5Zu6 50054\n5Zu9 50055\n5Zu+ 50056\n5Zu/ 50057\n5ZyA 50058\n5ZyD 50059\n5ZyE 50060\n5ZyG 50061\n5ZyI 50062\n5ZyJ 50063\n5ZyK 50064\n5ZyL 50065\n5ZyN 50066\n5ZyP 50067\n5ZyS 50068\n5ZyT 50069\n5ZyW 50070\n5ZyY 50071\n5Zyc 50072\n5Zyf 50073\n5Zyj 50074\n5Zym 50075\n5Zyn 50076\n5Zyo 50077\n5Zyp 50078\n5Zyq 50079\n5Zys 50080\n5Zyt 50081\n5Zyu 50082\n5Zyv 50083\n5Zyw 50084\n5Zyz 50085\n5Zy3 50086\n5Zy5 50087\n5Zy6 50088\n5Zy7 50089\n5Zy+ 50090\n5Z2A 50091\n5Z2C 50092\n5Z2H 50093\n5Z2K 50094\n5Z2N 50095\n5Z2O 50096\n5Z2P 50097\n5Z2Q 50098\n5Z2R 50099\n5Z2S 50100\n5Z2X 50101\n5Z2a 50102\n5Z2b 50103\n5Z2c 50104\n5Z2d 50105\n5Z2e 50106\n5Z2f 50107\n5Z2g 50108\n5Z2h 50109\n5Z2k 50110\n5Z2m 50111\n5Z2o 50112\n5Z2p 50113\n5Z2q 50114\n5Z2t 50115\n5Z2u 50116\n5Z2v 50117\n5Z2z 50118\n5Z23 50119\n5Z27 50120\n5Z28 50121\n5Z6C 50122\n5Z6D 50123\n5Z6E 50124\n5Z6F 50125\n5Z6G 50126\n5Z6H 50127\n5Z6I 50128\n5Z6L 50129\n5Z6M 50130\n5Z6N 50131\n5Z6S 50132\n5Z6T 50133\n5Z6V 50134\n5Z6X 50135\n5Z6a 50136\n5Z6b 50137\n5Z6d 50138\n5Z6g 50139\n5Z6h 50140\n5Z6i 50141\n5Z6j 50142\n5Z6k 50143\n5Z6m 50144\n5Z6n 50145\n5Z6p 50146\n5Z6q 50147\n5Z6r 50148\n5Z6t 50149\n5Z6u 50150\n5Z6v 50151\n5Z6w 50152\n5Z6x 50153\n5Z6z 50154\n5Z60 50155\n5Z61 50156\n5Z64 50157\n5Z+A 50158\n5Z+C 50159\n5Z+D 50160\n5Z+G 50161\n5Z+H 50162\n5Z+L 50163\n5Z+M 50164\n5Z+O 50165\n5Z+P 50166\n5Z+S 50167\n5Z+T 50168\n5Z+U 50169\n5Z+V 50170\n5Z+W 50171\n5Z+X 50172\n5Z+Z 50173\n5Z+a 50174\n5Z+c 50175\n5Z+d 50176\n5Z+f 50177\n5Z+g 50178\n5Z+j 50179\n5Z+k 50180\n5Z+q 50181\n5Z+t 50182\n5Z+y 50183\n5Z+0 50184\n5Z+1 50185\n5Z+3 50186\n5Z+4 50187\n5Z+5 50188\n5Z+6 50189\n5Z+8 50190\n5Z+9 50191\n5aCA 50192\n5aCC 50193\n5aCD 50194\n5aCF 50195\n5aCG 50196\n5aCH 50197\n5aCK 50198\n5aCL 50199\n5aCM 50200\n5aCN 50201\n5aCO 50202\n5aCQ 50203\n5aCR 50204\n5aCV 50205\n5aCZ 50206\n5aCd 50207\n5aCe 50208\n5aCg 50209\n5aCh 50210\n5aCi 50211\n5aCk 50212\n5aCo 50213\n5aCq 50214\n5aCv 50215\n5aCw 50216\n5aCx 50217\n5aC0 50218\n5aC1 50219\n5aC6 50220\n5aC8 50221\n5aGA 50222\n5aGB 50223\n5aGE 50224\n5aGK 50225\n5aGL 50226\n5aGM 50227\n5aGN 50228\n5aGR 50229\n5aGS 50230\n5aGU 50231\n5aGX 50232\n5aGY 50233\n5aGZ 50234\n5aGa 50235\n5aGe 50236\n5aGi 50237\n5aGp 50238\n5aGr 50239\n5aGs 50240\n5aGy 50241\n5aG1 50242\n5aG5 50243\n5aG9 50244\n5aG+ 50245\n5aKA 50246\n5aKB 50247\n5aKD 50248\n5aKF 50249\n5aKJ 50250\n5aKK 50251\n5aKO 50252\n5aKS 50253\n5aKT 50254\n5aKV 50255\n5aKX 50256\n5aKZ 50257\n5aKa 50258\n5aKc 50259\n5aKe 50260\n5aKf 50261\n5aKh 50262\n5aKo 50263\n5aKp 50264\n5aKr 50265\n5aKu 50266\n5aKz 50267\n5aK5 50268\n5aK6 50269\n5aK7 50270\n5aK8 50271\n5aK+ 50272\n5aOB 50273\n5aOF 50274\n5aOH 50275\n5aOK 50276\n5aOM 50277\n5aOR 50278\n5aOT 50279\n5aOV 50280\n5aOX 50281\n5aOY 50282\n5aOc 50283\n5aOe 50284\n5aOf 50285\n5aOk 50286\n5aOp 50287\n5aOr 50288\n5aOs 50289\n5aOu 50290\n5aOv 50291\n5aOw 50292\n5aOx 50293\n5aOy 50294\n5aOz 50295\n5aO2 50296\n5aO3 50297\n5aO4 50298\n5aO5 50299\n5aO6 50300\n5aO7 50301\n5aO9 50302\n5aSE 50303\n5aSH 50304\n5aSJ 50305\n5aSK 50306\n5aSM 50307\n5aSN 50308\n5aSP 50309\n5aSQ 50310\n5aSU 50311\n5aSV 50312\n5aSW 50313\n5aSZ 50314\n5aSa 50315\n5aSb 50316\n5aSc 50317\n5aSf 50318\n5aSg 50319\n5aSi 50320\n5aSk 50321\n5aSl 50322\n5aSn 50323\n5aSp 50324\n5aSq 50325\n5aSr 50326\n5aSs 50327\n5aSt 50328\n5aSu 50329\n5aSv 50330\n5aSx 50331\n5aS0 50332\n5aS3 50333\n5aS4 50334\n5aS5 50335\n5aS6 50336\n5aS8 50337\n5aS+ 50338\n5aWB 50339\n5aWC 50340\n5aWE 50341\n5aWH 50342\n5aWI 50343\n5aWJ 50344\n5aWL 50345\n5aWM 50346\n5aWO 50347\n5aWP 50348\n5aWQ 50349\n5aWR 50350\n5aWU 50351\n5aWV 50352\n5aWW 50353\n5aWX 50354\n5aWY 50355\n5aWa 50356\n5aWg 50357\n5aWi 50358\n5aWl 50359\n5aWn 50360\n5aWo 50361\n5aWq 50362\n5aWs 50363\n5aWt 50364\n5aWu 50365\n5aWz 50366\n5aW0 50367\n5aW2 50368\n5aW4 50369\n5aW5 50370\n5aW9 50371\n5aaB 50372\n5aaC 50373\n5aaD 50374\n5aaE 50375\n5aaG 50376\n5aaH 50377\n5aaI 50378\n5aaK 50379\n5aaN 50380\n5aaS 50381\n5aaT 50382\n5aaW 50383\n5aaX 50384\n5aaZ 50385\n5aad 50386\n5aae 50387\n5aaj 50388\n5aak 50389\n5aal 50390\n5aan 50391\n5aao 50392\n5aap 50393\n5aaq 50394\n5aar 50395\n5aas 50396\n5aau 50397\n5aav 50398\n5aax 50399\n5aay 50400\n5aa5 50401\n5aa6 50402\n5aa7 50403\n5aa9 50404\n5aa+ 50405\n5aeG 50406\n5aeJ 50407\n5aeK 50408\n5aeL 50409\n5aeN 50410\n5aeQ 50411\n5aeR 50412\n5aeS 50413\n5aeT 50414\n5aeU 50415\n5aeX 50416\n5aeY 50417\n5aea 50418\n5aec 50419\n5aed 50420\n5aej 50421\n5aek 50422\n5ael 50423\n5aem 50424\n5aeo 50425\n5aep 50426\n5aeq 50427\n5aer 50428\n5aes 50429\n5aeu 50430\n5ae2 50431\n5ae4 50432\n5ae5 50433\n5ae6 50434\n5ae7 50435\n5ae/ 50436\n5aiB 50437\n5aiD 50438\n5aiE 50439\n5aiF 50440\n5aiG 50441\n5aiH 50442\n5aiI 50443\n5aiJ 50444\n5aiM 50445\n5aiR 50446\n5aiT 50447\n5aiY 50448\n5aia 50449\n5aib 50450\n5aic 50451\n5aif 50452\n5aig 50453\n5aih 50454\n5aij 50455\n5ail 50456\n5aip 50457\n5aiv 50458\n5aix 50459\n5aiy 50460\n5ai0 50461\n5ai2 50462\n5ai8 50463\n5ai/ 50464\n5amA 50465\n5amB 50466\n5amE 50467\n5amG 50468\n5amJ 50469\n5amK 50470\n5amM 50471\n5amV 50472\n5ama 50473\n5ami 50474\n5amm 50475\n5amn 50476\n5amq 50477\n5ams 50478\n5am0 50479\n5am1 50480\n5am2 50481\n5am3 50482\n5am6 50483\n5am/ 50484\n5aqS 50485\n5aqW 50486\n5aqa 50487\n5aqb 50488\n5aqc 50489\n5aqe 50490\n5aqq 50491\n5aqx 50492\n5aqy 50493\n5aqz 50494\n5aq1 50495\n5aq8 50496\n5aq9 50497\n5aq+ 50498\n5auB 50499\n5auC 50500\n5auE 50501\n5auJ 50502\n5auL 50503\n5auM 50504\n5auS 50505\n5auU 50506\n5auW 50507\n5auX 50508\n5auY 50509\n5aua 50510\n5auh 50511\n5auj 50512\n5auk 50513\n5aum 50514\n5aup 50515\n5auq 50516\n5aur 50517\n5auw 50518\n5aux 50519\n5auy 50520\n5au1 50521\n5au7 50522\n5ayF 50523\n5ayJ 50524\n5ayL 50525\n5ayM 50526\n5ayW 50527\n5ayX 50528\n5ayb 50529\n5ayi 50530\n5ayl 50531\n5ayq 50532\n5ays 50533\n5ayw 50534\n5ayy 50535\n5ay0 50536\n5ay2 50537\n5ay3 50538\n5ay4 50539\n5a2A 50540\n5a2D 50541\n5a2Q 50542\n5a2R 50543\n5a2T 50544\n5a2U 50545\n5a2V 50546\n5a2W 50547\n5a2X 50548\n5a2Y 50549\n5a2Z 50550\n5a2a 50551\n5a2b 50552\n5a2c 50553\n5a2d 50554\n5a2f 50555\n5a2i 50556\n5a2j 50557\n5a2k 50558\n5a2l 50559\n5a2m 50560\n5a2p 50561\n5a2q 50562\n5a2r 50563\n5a2s 50564\n5a2t 50565\n5a2w 50566\n5a2x 50567\n5a2z 50568\n5a21 50569\n5a24 50570\n5a26 50571\n5a29 50572\n5a6B 50573\n5a6D 50574\n5a6E 50575\n5a6F 50576\n5a6H 50577\n5a6I 50578\n5a6J 50579\n5a6L 50580\n5a6M 50581\n5a6N 50582\n5a6P 50583\n5a6T 50584\n5a6V 50585\n5a6X 50586\n5a6Y 50587\n5a6Z 50588\n5a6a 50589\n5a6b 50590\n5a6c 50591\n5a6d 50592\n5a6e 50593\n5a6f 50594\n5a6g 50595\n5a6h 50596\n5a6i 50597\n5a6j 50598\n5a6k 50599\n5a6l 50600\n5a6m 50601\n5a6q 50602\n5a6r 50603\n5a6u 50604\n5a6w 50605\n5a6z 50606\n5a60 50607\n5a61 50608\n5a62 50609\n5a64 50610\n5a65 50611\n5a69 50612\n5a6+ 50613\n5a6/ 50614\n5a+C 50615\n5a+E 50616\n5a+F 50617\n5a+G 50618\n5a+H 50619\n5a+M 50620\n5a+Q 50621\n5a+S 50622\n5a+T 50623\n5a+U 50624\n5a+V 50625\n5a+W 50626\n5a+b 50627\n5a+d 50628\n5a+e 50629\n5a+f 50630\n5a+g 50631\n5a+h 50632\n5a+i 50633\n5a+k 50634\n5a+l 50635\n5a+m 50636\n5a+n 50637\n5a+o 50638\n5a+p 50639\n5a+r 50640\n5a+s 50641\n5a+u 50642\n5a+w 50643\n5a+z 50644\n5a+1 50645\n5a+2 50646\n5a+4 50647\n5a+5 50648\n5a+6 50649\n5a+7 50650\n5a+8 50651\n5a++ 50652\n5a+/ 50653\n5bCB 50654\n5bCC 50655\n5bCE 50656\n5bCF 50657\n5bCG 50658\n5bCH 50659\n5bCI 50660\n5bCJ 50661\n5bCK 50662\n5bCL 50663\n5bCN 50664\n5bCO 50665\n5bCP 50666\n5bCR 50667\n5bCT 50668\n5bCU 50669\n5bCV 50670\n5bCW 50671\n5bCY 50672\n5bCZ 50673\n5bCa 50674\n5bCd 50675\n5bCe 50676\n5bCg 50677\n5bCh 50678\n5bCi 50679\n5bCk 50680\n5bCl 50681\n5bCn 50682\n5bCo 50683\n5bCq 50684\n5bCs 50685\n5bCt 50686\n5bCw 50687\n5bCx 50688\n5bC0 50689\n5bC3 50690\n5bC4 50691\n5bC5 50692\n5bC6 50693\n5bC7 50694\n5bC8 50695\n5bC9 50696\n5bC+ 50697\n5bC/ 50698\n5bGA 50699\n5bGB 50700\n5bGC 50701\n5bGE 50702\n5bGF 50703\n5bGG 50704\n5bGI 50705\n5bGJ 50706\n5bGK 50707\n5bGL 50708\n5bGM 50709\n5bGN 50710\n5bGO 50711\n5bGP 50712\n5bGQ 50713\n5bGR 50714\n5bGT 50715\n5bGV 50716\n5bGY 50717\n5bGZ 50718\n5bGc 50719\n5bGe 50720\n5bGg 50721\n5bGh 50722\n5bGi 50723\n5bGj 50724\n5bGk 50725\n5bGl 50726\n5bGm 50727\n5bGs 50728\n5bGv 50729\n5bGx 50730\n5bG5 50731\n5bG6 50732\n5bG/ 50733\n5bKA 50734\n5bKB 50735\n5bKC 50736\n5bKI 50737\n5bKM 50738\n5bKN 50739\n5bKQ 50740\n5bKR 50741\n5bKU 50742\n5bKV 50743\n5bKW 50744\n5bKX 50745\n5bKY 50746\n5bKZ 50747\n5bKa 50748\n5bKb 50749\n5bKc 50750\n5bKe 50751\n5bKh 50752\n5bKi 50753\n5bKo 50754\n5bKp 50755\n5bKr 50756\n5bKs 50757\n5bKt 50758\n5bKx 50759\n5bKz 50760\n5bK1 50761\n5bK3 50762\n5bK4 50763\n5bK7 50764\n5bK8 50765\n5bK9 50766\n5bK/ 50767\n5bOB 50768\n5bOE 50769\n5bOF 50770\n5bOH 50771\n5bOL 50772\n5bOS 50773\n5bOZ 50774\n5bOg 50775\n5bOh 50776\n5bOj 50777\n5bOk 50778\n5bOl 50779\n5bOm 50780\n5bOo 50781\n5bOq 50782\n5bOt 50783\n5bOv 50784\n5bOw 50785\n5bO2 50786\n5bO7 50787\n5bO9 50788\n5bSC 50789\n5bSD 50790\n5bSG 50791\n5bSH 50792\n5bSL 50793\n5bSO 50794\n5bSQ 50795\n5bSR 50796\n5bSS 50797\n5bSU 50798\n5bSV 50799\n5bSW 50800\n5bSX 50801\n5bSZ 50802\n5bSa 50803\n5bSb 50804\n5bSe 50805\n5bSf 50806\n5bSi 50807\n5bSk 50808\n5bSm 50809\n5bSn 50810\n5bSp 50811\n5bSt 50812\n5bSu 50813\n5bS0 50814\n5bS9 50815\n5bS+ 50816\n5bWC 50817\n5bWH 50818\n5bWK 50819\n5bWL 50820\n5bWM 50821\n5bWO 50822\n5bWQ 50823\n5bWS 50824\n5bWW 50825\n5bWY 50826\n5bWb 50827\n5bWc 50828\n5bWo 50829\n5bWp 50830\n5bWq 50831\n5bWr 50832\n5bWs 50833\n5bWv 50834\n5bW0 50835\n5baC 50836\n5baD 50837\n5baE 50838\n5baH 50839\n5baL 50840\n5baM 50841\n5baT 50842\n5baW 50843\n5baZ 50844\n5bad 50845\n5bas 50846\n5bau 50847\n5ba3 50848\n5ba6 50849\n5ba8 50850\n5ba9 50851\n5beC 50852\n5beF 50853\n5beH 50854\n5beJ 50855\n5beM 50856\n5beN 50857\n5beS 50858\n5beT 50859\n5beW 50860\n5bed 50861\n5bee 50862\n5beh 50863\n5bei 50864\n5bej 50865\n5bel 50866\n5bem 50867\n5ben 50868\n5beo 50869\n5bep 50870\n5ber 50871\n5beu 50872\n5bev 50873\n5bex 50874\n5bey 50875\n5bez 50876\n5be0 50877\n5be1 50878\n5be3 50879\n5be6 50880\n5be7 50881\n5be9 50882\n5be+ 50883\n5be/ 50884\n5biA 50885\n5biB 50886\n5biC 50887\n5biD 50888\n5biF 50889\n5biG 50890\n5biI 50891\n5biM 50892\n5biP 50893\n5biQ 50894\n5biR 50895\n5biU 50896\n5biV 50897\n5biW 50898\n5biY 50899\n5biZ 50900\n5bia 50901\n5bib 50902\n5bic 50903\n5bid 50904\n5bil 50905\n5bim 50906\n5bin 50907\n5bir 50908\n5bit 50909\n5biu 50910\n5biv 50911\n5biw 50912\n5biz 50913\n5bi2 50914\n5bi3 50915\n5bi4 50916\n5bi7 50917\n5bi8 50918\n5bi9 50919\n5bmA 50920\n5bmC 50921\n5bmE 50922\n5bmF 50923\n5bmH 50924\n5bmM 50925\n5bmU 50926\n5bmV 50927\n5bmX 50928\n5bmb 50929\n5bmf 50930\n5bmh 50931\n5bmi 50932\n5bmj 50933\n5bmr 50934\n5bmy 50935\n5bmz 50936\n5bm0 50937\n5bm2 50938\n5bm3 50939\n5bm4 50940\n5bm5 50941\n5bm6 50942\n5bm7 50943\n5bm8 50944\n5bm9 50945\n5bm+ 50946\n5bm/ 50947\n5bqB 50948\n5bqD 50949\n5bqE 50950\n5bqF 50951\n5bqG 50952\n5bqH 50953\n5bqK 50954\n5bqP 50955\n5bqQ 50956\n5bqR 50957\n5bqT 50958\n5bqU 50959\n5bqV 50960\n5bqW 50961\n5bqX 50962\n5bqZ 50963\n5bqa 50964\n5bqc 50965\n5bqe 50966\n5bqf 50967\n5bqg 50968\n5bqm 50969\n5bqn 50970\n5bqr 50971\n5bqt 50972\n5bq1 50973\n5bq2 50974\n5bq3 50975\n5bq4 50976\n5bq5 50977\n5bq+ 50978\n5buB 50979\n5buC 50980\n5buD 50981\n5buG 50982\n5buI 50983\n5buJ 50984\n5buK 50985\n5buL 50986\n5buR 50987\n5buT 50988\n5buW 50989\n5bua 50990\n5bub 50991\n5bud 50992\n5buf 50993\n5bug 50994\n5bui 50995\n5buj 50996\n5buo 50997\n5buq 50998\n5bus 50999\n5buz 51000\n5bu0 51001\n5bu2 51002\n5bu3 51003\n5bu6 51004\n5bu7 51005\n5bu8 51006\n5bu/ 51007\n5byA 51008\n5byB 51009\n5byC 51010\n5byD 51011\n5byE 51012\n5byH 51013\n5byI 51014\n5byJ 51015\n5byK 51016\n5byL 51017\n5byP 51018\n5byQ 51019\n5byR 51020\n5byT 51021\n5byU 51022\n5byV 51023\n5byW 51024\n5byX 51025\n5byY 51026\n5byb 51027\n5byf 51028\n5byg 51029\n5byi 51030\n5byl 51031\n5bym 51032\n5byn 51033\n5byo 51034\n5byp 51035\n5byt 51036\n5byv 51037\n5byx 51038\n5by1 51039\n5by3 51040\n5by5 51041\n5by6 51042\n5by8 51043\n5by+ 51044\n5b2A 51045\n5b2F 51046\n5b2G 51047\n5b2I 51048\n5b2K 51049\n5b2M 51050\n5b2O 51051\n5b2R 51052\n5b2S 51053\n5b2T 51054\n5b2V 51055\n5b2W 51056\n5b2X 51057\n5b2Y 51058\n5b2Z 51059\n5b2d 51060\n5b2f 51061\n5b2h 51062\n5b2i 51063\n5b2k 51064\n5b2l 51065\n5b2m 51066\n5b2n 51067\n5b2p 51068\n5b2q 51069\n5b2r 51070\n5b2s 51071\n5b2t 51072\n5b2w 51073\n5b2x 51074\n5b2z 51075\n5b23 51076\n5b25 51077\n5b26 51078\n5b27 51079\n5b28 51080\n5b2/ 51081\n5b6A 51082\n5b6B 51083\n5b6C 51084\n5b6D 51085\n5b6E 51086\n5b6F 51087\n5b6H 51088\n5b6I 51089\n5b6J 51090\n5b6K 51091\n5b6L 51092\n5b6M 51093\n5b6N 51094\n5b6Q 51095\n5b6R 51096\n5b6S 51097\n5b6T 51098\n5b6V 51099\n5b6X 51100\n5b6Y 51101\n5b6Z 51102\n5b6c 51103\n5b6e 51104\n5b6g 51105\n5b6h 51106\n5b6o 51107\n5b6p 51108\n5b6q 51109\n5b6s 51110\n5b6t 51111\n5b6u 51112\n5b6z 51113\n5b60 51114\n5b61 51115\n5b63 51116\n5b65 51117\n5b68 51118\n5b69 51119\n5b+D 51120\n5b+E 51121\n5b+F 51122\n5b+G 51123\n5b+L 51124\n5b+M 51125\n5b+N 51126\n5b+P 51127\n5b+Q 51128\n5b+R 51129\n5b+S 51130\n5b+W 51131\n5b+X 51132\n5b+Y 51133\n5b+Z 51134\n5b+c 51135\n5b+d 51136\n5b+g 51137\n5b+h 51138\n5b+k 51139\n5b+n 51140\n5b+q 51141\n5b+r 51142\n5b+w 51143\n5b+x 51144\n5b+1 51145\n5b+4 51146\n5b+7 51147\n5b+9 51148\n5b++ 51149\n5b+/ 51150\n5oCA 51151\n5oCB 51152\n5oCC 51153\n5oCD 51154\n5oCE 51155\n5oCF 51156\n5oCG 51157\n5oCN 51158\n5oCO 51159\n5oCP 51160\n5oCS 51161\n5oCU 51162\n5oCV 51163\n5oCW 51164\n5oCX 51165\n5oCZ 51166\n5oCb 51167\n5oCc 51168\n5oCd 51169\n5oCg 51170\n5oCh 51171\n5oCl 51172\n5oCm 51173\n5oCn 51174\n5oCo 51175\n5oCp 51176\n5oCq 51177\n5oCr 51178\n5oCv 51179\n5oCx 51180\n5oC1 51181\n5oC5 51182\n5oC7 51183\n5oC8 51184\n5oC/ 51185\n5oGB 51186\n5oGC 51187\n5oGD 51188\n5oGG 51189\n5oGL 51190\n5oGN 51191\n5oGQ 51192\n5oGS 51193\n5oGT 51194\n5oGV 51195\n5oGZ 51196\n5oGa 51197\n5oGf 51198\n5oGi 51199\n5oGj 51200\n5oGk 51201\n5oGl 51202\n5oGo 51203\n5oGp 51204\n5oGq 51205\n5oGr 51206\n5oGs 51207\n5oGt 51208\n5oGv 51209\n5oGw 51210\n5oGz 51211\n5oG1 51212\n5oG2 51213\n5oG4 51214\n5oG5 51215\n5oG6 51216\n5oG7 51217\n5oG8 51218\n5oG9 51219\n5oG/ 51220\n5oKD 51221\n5oKE 51222\n5oKF 51223\n5oKG 51224\n5oKJ 51225\n5oKL 51226\n5oKM 51227\n5oKN 51228\n5oKS 51229\n5oKU 51230\n5oKV 51231\n5oKW 51232\n5oKa 51233\n5oKb 51234\n5oKd 51235\n5oKf 51236\n5oKg 51237\n5oKj 51238\n5oKm 51239\n5oKn 51240\n5oKo 51241\n5oKp 51242\n5oKq 51243\n5oKr 51244\n5oKs 51245\n5oKt 51246\n5oKv 51247\n5oKx 51248\n5oKy 51249\n5oKz 51250\n5oK0 51251\n5oK1 51252\n5oK2 51253\n5oK4 51254\n5oK7 51255\n5oK8 51256\n5oK9 51257\n5oOF 51258\n5oOG 51259\n5oOH 51260\n5oOK 51261\n5oOL 51262\n5oOO 51263\n5oOR 51264\n5oOV 51265\n5oOY 51266\n5oOZ 51267\n5oOa 51268\n5oOc 51269\n5oOf 51270\n5oOg 51271\n5oOh 51272\n5oOj 51273\n5oOm 51274\n5oOn 51275\n5oOo 51276\n5oOp 51277\n5oOr 51278\n5oOs 51279\n5oOt 51280\n5oOu 51281\n5oOv 51282\n5oOw 51283\n5oOx 51284\n5oOz 51285\n5oO0 51286\n5oO2 51287\n5oO5 51288\n5oO6 51289\n5oO7 51290\n5oSA 51291\n5oSB 51292\n5oSG 51293\n5oSH 51294\n5oSI 51295\n5oSJ 51296\n5oSK 51297\n5oSN 51298\n5oSO 51299\n5oSP 51300\n5oSU 51301\n5oSV 51302\n5oSa 51303\n5oSb 51304\n5oSf 51305\n5oSg 51306\n5oSj 51307\n5oSk 51308\n5oSm 51309\n5oSn 51310\n5oSr 51311\n5oSs 51312\n5oS0 51313\n5oS3 51314\n5oS8 51315\n5oS+ 51316\n5oS/ 51317\n5oWC 51318\n5oWE 51319\n5oWG 51320\n5oWH 51321\n5oWI 51322\n5oWK 51323\n5oWL 51324\n5oWM 51325\n5oWO 51326\n5oWR 51327\n5oWT 51328\n5oWV 51329\n5oWY 51330\n5oWZ 51331\n5oWa 51332\n5oWc 51333\n5oWd 51334\n5oWf 51335\n5oWi 51336\n5oWj 51337\n5oWl 51338\n5oWn 51339\n5oWo 51340\n5oWr 51341\n5oWu 51342\n5oWw 51343\n5oWz 51344\n5oW0 51345\n5oW1 51346\n5oW2 51347\n5oW3 51348\n5oW+ 51349\n5oaC 51350\n5oaK 51351\n5oaL 51352\n5oaN 51353\n5oaO 51354\n5oaQ 51355\n5oaR 51356\n5oaU 51357\n5oaW 51358\n5oaZ 51359\n5oaa 51360\n5oak 51361\n5oan 51362\n5oao 51363\n5oap 51364\n5oar 51365\n5oas 51366\n5oau 51367\n5oay 51368\n5oa2 51369\n5oa3 51370\n5oa6 51371\n5oa+ 51372\n5oeC 51373\n5oeD 51374\n5oeG 51375\n5oeH 51376\n5oeI 51377\n5oeJ 51378\n5oeK 51379\n5oeL 51380\n5oeQ 51381\n5oeR 51382\n5oeS 51383\n5oej 51384\n5oem 51385\n5oey 51386\n5oe1 51387\n5oe2 51388\n5oe3 51389\n5oe4 51390\n5oe6 51391\n5oe8 51392\n5oe+ 51393\n5oe/ 51394\n5oiA 51395\n5oiG 51396\n5oiH 51397\n5oiI 51398\n5oiK 51399\n5oiM 51400\n5oiN 51401\n5oiO 51402\n5oiP 51403\n5oiQ 51404\n5oiR 51405\n5oiS 51406\n5oiU 51407\n5oiV 51408\n5oiW 51409\n5oiX 51410\n5oiY 51411\n5oia 51412\n5oib 51413\n5oie 51414\n5oif 51415\n5oih 51416\n5oii 51417\n5oil 51418\n5oim 51419\n5oiq 51420\n5ois 51421\n5oiu 51422\n5oiv 51423\n5oiw 51424\n5oiy 51425\n5oiz 51426\n5oi0 51427\n5oi2 51428\n5oi3 51429\n5oi4 51430\n5oi7 51431\n5oi9 51432\n5oi+ 51433\n5oi/ 51434\n5omA 51435\n5omB 51436\n5omD 51437\n5omG 51438\n5omH 51439\n5omI 51440\n5omJ 51441\n5omL 51442\n5omN 51443\n5omO 51444\n5omQ 51445\n5omR 51446\n5omS 51447\n5omT 51448\n5omU 51449\n5omV 51450\n5omY 51451\n5omb 51452\n5ome 51453\n5omg 51454\n5omj 51455\n5omk 51456\n5oml 51457\n5omm 51458\n5omn 51459\n5omo 51460\n5omp 51461\n5omq 51462\n5omr 51463\n5oms 51464\n5omt 51465\n5omu 51466\n5omv 51467\n5omw 51468\n5omx 51469\n5omz 51470\n5om2 51471\n5om5 51472\n5om8 51473\n5om+ 51474\n5om/ 51475\n5oqA 51476\n5oqD 51477\n5oqE 51478\n5oqF 51479\n5oqJ 51480\n5oqK 51481\n5oqM 51482\n5oqR 51483\n5oqS 51484\n5oqT 51485\n5oqU 51486\n5oqV 51487\n5oqW 51488\n5oqX 51489\n5oqY 51490\n5oqa 51491\n5oqb 51492\n5oqc 51493\n5oqe 51494\n5oqf 51495\n5oqg 51496\n5oqh 51497\n5oqi 51498\n5oqk 51499\n5oql 51500\n5oqo 51501\n5oqr 51502\n5oqs 51503\n5oqx 51504\n5oq1 51505\n5oq5 51506\n5oq7 51507\n5oq8 51508\n5oq9 51509\n5oq+ 51510\n5oq/ 51511\n5ouC 51512\n5ouD 51513\n5ouE 51514\n5ouF 51515\n5ouG 51516\n5ouH 51517\n5ouI 51518\n5ouJ 51519\n5ouK 51520\n5ouL 51521\n5ouM 51522\n5ouN 51523\n5ouO 51524\n5ouQ 51525\n5ouS 51526\n5ouT 51527\n5ouU 51528\n5ouW 51529\n5ouX 51530\n5ouY 51531\n5ouZ 51532\n5oua 51533\n5oub 51534\n5ouc 51535\n5oud 51536\n5ouf 51537\n5oug 51538\n5ouh 51539\n5oui 51540\n5ouj 51541\n5ouk 51542\n5oul 51543\n5oum 51544\n5oun 51545\n5ouo 51546\n5oup 51547\n5ous 51548\n5out 51549\n5ouu 51550\n5ouv 51551\n5oux 51552\n5ouz 51553\n5ou0 51554\n5ou1 51555\n5ou2 51556\n5ou3 51557\n5ou8 51558\n5ou9 51559\n5ou+ 51560\n5ou/ 51561\n5oyB 51562\n5oyC 51563\n5oyH 51564\n5oyI 51565\n5oyJ 51566\n5oyM 51567\n5oyO 51568\n5oyR 51569\n5oyS 51570\n5oyW 51571\n5oyZ 51572\n5oya 51573\n5oyb 51574\n5oyd 51575\n5oye 51576\n5oyf 51577\n5oyg 51578\n5oyh 51579\n5oyi 51580\n5oyj 51581\n5oyk 51582\n5oyl 51583\n5oyo 51584\n5oyq 51585\n5oyr 51586\n5oyv 51587\n5oyy 51588\n5oy5 51589\n5oy6 51590\n5oy8 51591\n5oy9 51592\n5oy+ 51593\n5oy/ 51594\n5o2C 51595\n5o2F 51596\n5o2G 51597\n5o2J 51598\n5o2K 51599\n5o2L 51600\n5o2M 51601\n5o2N 51602\n5o2O 51603\n5o2P 51604\n5o2Q 51605\n5o2V 51606\n5o2X 51607\n5o2c 51608\n5o2e 51609\n5o2f 51610\n5o2h 51611\n5o2i 51612\n5o2j 51613\n5o2n 51614\n5o2o 51615\n5o2p 51616\n5o2r 51617\n5o2t 51618\n5o2u 51619\n5o2v 51620\n5o2x 51621\n5o2y 51622\n5o22 51623\n5o23 51624\n5o26 51625\n5o27 51626\n5o6A 51627\n5o6C 51628\n5o6D 51629\n5o6H 51630\n5o6I 51631\n5o6J 51632\n5o6K 51633\n5o6M 51634\n5o6O 51635\n5o6P 51636\n5o6Q 51637\n5o6S 51638\n5o6V 51639\n5o6W 51640\n5o6Y 51641\n5o6Z 51642\n5o6b 51643\n5o6e 51644\n5o6f 51645\n5o6g 51646\n5o6h 51647\n5o6i 51648\n5o6j 51649\n5o6l 51650\n5o6n 51651\n5o6o 51652\n5o6p 51653\n5o6q 51654\n5o6s 51655\n5o6u 51656\n5o6w 51657\n5o6y 51658\n5o6z 51659\n5o60 51660\n5o63 51661\n5o64 51662\n5o65 51663\n5o66 51664\n5o67 51665\n5o68 51666\n5o6+ 51667\n5o+A 51668\n5o+D 51669\n5o+E 51670\n5o+G 51671\n5o+I 51672\n5o+J 51673\n5o+N 51674\n5o+O 51675\n5o+P 51676\n5o+Q 51677\n5o+S 51678\n5o+W 51679\n5o+a 51680\n5o+b 51681\n5o+e 51682\n5o+g 51683\n5o+h 51684\n5o+j 51685\n5o+p 51686\n5o+q 51687\n5o+t 51688\n5o+u 51689\n5o+y 51690\n5o+0 51691\n5o+1 51692\n5o+2 51693\n5o+4 51694\n5o+6 51695\n5o+8 51696\n5o+9 51697\n5o+/ 51698\n5pCA 51699\n5pCB 51700\n5pCC 51701\n5pCF 51702\n5pCG 51703\n5pCL 51704\n5pCM 51705\n5pCN 51706\n5pCP 51707\n5pCQ 51708\n5pCT 51709\n5pCU 51710\n5pCW 51711\n5pCX 51712\n5pCb 51713\n5pCc 51714\n5pCe 51715\n5pCg 51716\n5pCh 51717\n5pCi 51718\n5pCj 51719\n5pCm 51720\n5pCn 51721\n5pCo 51722\n5pCq 51723\n5pCs 51724\n5pCt 51725\n5pC0 51726\n5pC1 51727\n5pC2 51728\n5pC5 51729\n5pC6 51730\n5pC9 51731\n5pC+ 51732\n5pGB 51733\n5pGC 51734\n5pGE 51735\n5pGF 51736\n5pGG 51737\n5pGH 51738\n5pGI 51739\n5pGK 51740\n5pGQ 51741\n5pGS 51742\n5pGU 51743\n5pGY 51744\n5pGb 51745\n5pGe 51746\n5pGf 51747\n5pGn 51748\n5pGp 51749\n5pGt 51750\n5pGv 51751\n5pG1 51752\n5pG4 51753\n5pG5 51754\n5pG6 51755\n5pG9 51756\n5pKC 51757\n5pKD 51758\n5pKE 51759\n5pKF 51760\n5pKH 51761\n5pKI 51762\n5pKQ 51763\n5pKR 51764\n5pKS 51765\n5pKT 51766\n5pKV 51767\n5pKW 51768\n5pKZ 51769\n5pKa 51770\n5pKe 51771\n5pKk 51772\n5pKl 51773\n5pKp 51774\n5pKr 51775\n5pKs 51776\n5pKt 51777\n5pKu 51778\n5pKw 51779\n5pKy 51780\n5pKz 51781\n5pK0 51782\n5pK1 51783\n5pK3 51784\n5pK4 51785\n5pK5 51786\n5pK6 51787\n5pK7 51788\n5pK8 51789\n5pK/ 51790\n5pOA 51791\n5pOB 51792\n5pOC 51793\n5pOF 51794\n5pOH 51795\n5pOK 51796\n5pOL 51797\n5pON 51798\n5pOO 51799\n5pOQ 51800\n5pOS 51801\n5pOU 51802\n5pOX 51803\n5pOY 51804\n5pOa 51805\n5pOe 51806\n5pOg 51807\n5pOh 51808\n5pOi 51809\n5pOj 51810\n5pOk 51811\n5pOm 51812\n5pOn 51813\n5pOs 51814\n5pOv 51815\n5pOw 51816\n5pOx 51817\n5pOy 51818\n5pOz 51819\n5pO0 51820\n5pO2 51821\n5pO6 51822\n5pO7 51823\n5pO9 51824\n5pO+ 51825\n5pSA 51826\n5pSG 51827\n5pSJ 51828\n5pSP 51829\n5pSS 51830\n5pSU 51831\n5pSY 51832\n5pSZ 51833\n5pSc 51834\n5pSd 51835\n5pSe 51836\n5pSj 51837\n5pSk 51838\n5pSl 51839\n5pSq 51840\n5pSr 51841\n5pSs 51842\n5pSu 51843\n5pSv 51844\n5pSw 51845\n5pS0 51846\n5pS1 51847\n5pS2 51848\n5pS3 51849\n5pS4 51850\n5pS5 51851\n5pS7 51852\n5pS+ 51853\n5pS/ 51854\n5pWF 51855\n5pWI 51856\n5pWJ 51857\n5pWM 51858\n5pWN 51859\n5pWP 51860\n5pWR 51861\n5pWV 51862\n5pWW 51863\n5pWX 51864\n5pWY 51865\n5pWZ 51866\n5pWb 51867\n5pWd 51868\n5pWe 51869\n5pWi 51870\n5pWj 51871\n5pWm 51872\n5pWr 51873\n5pWs 51874\n5pWw 51875\n5pWy 51876\n5pW0 51877\n5pW1 51878\n5pW3 51879\n5pW4 51880\n5paB 51881\n5paC 51882\n5paD 51883\n5paH 51884\n5paJ 51885\n5paL 51886\n5paM 51887\n5paO 51888\n5paQ 51889\n5paR 51890\n5paT 51891\n5paV 51892\n5paX 51893\n5paZ 51894\n5pab 51895\n5pac 51896\n5pad 51897\n5paf 51898\n5pah 51899\n5pak 51900\n5pal 51901\n5pan 51902\n5pap 51903\n5par 51904\n5pas 51905\n5pat 51906\n5pav 51907\n5paw 51908\n5pa3 51909\n5pa5 51910\n5pa8 51911\n5pa9 51912\n5pa/ 51913\n5peB 51914\n5peD 51915\n5peE 51916\n5peF 51917\n5peG 51918\n5peJ 51919\n5peL 51920\n5peM 51921\n5peO 51922\n5peP 51923\n5peS 51924\n5peW 51925\n5peX 51926\n5peb 51927\n5peg 51928\n5pei 51929\n5pel 51930\n5pem 51931\n5pen 51932\n5peo 51933\n5pep 51934\n5pes 51935\n5pet 51936\n5peu 51937\n5pev 51938\n5pew 51939\n5pex 51940\n5pez 51941\n5pe2 51942\n5pe3 51943\n5pe4 51944\n5pe6 51945\n5pe7 51946\n5pe8 51947\n5piA 51948\n5piC 51949\n5piD 51950\n5piG 51951\n5piH 51952\n5piJ 51953\n5piK 51954\n5piM 51955\n5piO 51956\n5piP 51957\n5piT 51958\n5piU 51959\n5piV 51960\n5piZ 51961\n5pia 51962\n5pid 51963\n5pie 51964\n5pif 51965\n5pig 51966\n5pil 51967\n5pin 51968\n5pio 51969\n5pit 51970\n5piv 51971\n5pix 51972\n5pi0 51973\n5pi1 51974\n5pi2 51975\n5pi6 51976\n5pi8 51977\n5pi+ 51978\n5pmB 51979\n5pmC 51980\n5pmD 51981\n5pmE 51982\n5pmJ 51983\n5pmL 51984\n5pmM 51985\n5pmP 51986\n5pmS 51987\n5pmT 51988\n5pmU 51989\n5pmV 51990\n5pmW 51991\n5pmX 51992\n5pma 51993\n5pmd 51994\n5pme 51995\n5pmf 51996\n5pmh 51997\n5pmi 51998\n5pmk 51999\n5pml 52000\n5pmm 52001\n5pmn 52002\n5pmo 52003\n5pmp 52004\n5pms 52005\n5pmu 52006\n5pmv 52007\n5pmw 52008\n5pmz 52009\n5pm0 52010\n5pm2 52011\n5pm3 52012\n5pm6 52013\n5pm7 52014\n5pm+ 52015\n5pqB 52016\n5pqC 52017\n5pqE 52018\n5pqH 52019\n5pqI 52020\n5pqJ 52021\n5pqM 52022\n5pqN 52023\n5pqO 52024\n5pqR 52025\n5pqW 52026\n5pqX 52027\n5pqY 52028\n5pqd 52029\n5pqi 52030\n5pqm 52031\n5pqn 52032\n5pqo 52033\n5pqr 52034\n5pqu 52035\n5pqy 52036\n5pq0 52037\n5pq5 52038\n5pq7 52039\n5pq8 52040\n5pq+ 52041\n5puE 52042\n5puG 52043\n5puH 52044\n5puI 52045\n5puJ 52046\n5puM 52047\n5puW 52048\n5puZ 52049\n5pua 52050\n5pub 52051\n5puc 52052\n5pud 52053\n5pug 52054\n5puh 52055\n5pum 52056\n5pup 52057\n5pus 52058\n5puw 52059\n5pux 52060\n5puy 52061\n5puz 52062\n5pu0 52063\n5pu1 52064\n5pu3 52065\n5pu4 52066\n5pu5 52067\n5pu6 52068\n5pu8 52069\n5pu9 52070\n5pu+ 52071\n5pu/ 52072\n5pyA 52073\n5pyD 52074\n5pyI 52075\n5pyJ 52076\n5pyK 52077\n5pyL 52078\n5pyN 52079\n5pyP 52080\n5pyQ 52081\n5pyT 52082\n5pyU 52083\n5pyV 52084\n5pyX 52085\n5pyb 52086\n5pyd 52087\n5pyf 52088\n5pym 52089\n5pyn 52090\n5pyo 52091\n5pyq 52092\n5pyr 52093\n5pys 52094\n5pyt 52095\n5pyu 52096\n5pyv 52097\n5pyx 52098\n5py0 52099\n5py1 52100\n5py2 52101\n5py4 52102\n5py6 52103\n5py9 52104\n5py+ 52105\n5p2A 52106\n5p2B 52107\n5p2C 52108\n5p2D 52109\n5p2G 52110\n5p2I 52111\n5p2J 52112\n5p2M 52113\n5p2O 52114\n5p2P 52115\n5p2Q 52116\n5p2R 52117\n5p2T 52118\n5p2W 52119\n5p2Z 52120\n5p2c 52121\n5p2e 52122\n5p2f 52123\n5p2g 52124\n5p2h 52125\n5p2i 52126\n5p2j 52127\n5p2k 52128\n5p2l 52129\n5p2o 52130\n5p2p 52131\n5p2q 52132\n5p2s 52133\n5p2t 52134\n5p2u 52135\n5p2v 52136\n5p2w 52137\n5p2x 52138\n5p2y 52139\n5p2z 52140\n5p21 52141\n5p23 52142\n5p27 52143\n5p28 52144\n5p2+ 52145\n5p2/ 52146\n5p6B 52147\n5p6E 52148\n5p6F 52149\n5p6H 52150\n5p6J 52151\n5p6L 52152\n5p6M 52153\n5p6O 52154\n5p6Q 52155\n5p6T 52156\n5p6V 52157\n5p6X 52158\n5p6Y 52159\n5p6a 52160\n5p6c 52161\n5p6d 52162\n5p6e 52163\n5p6g 52164\n5p6h 52165\n5p6i 52166\n5p6j 52167\n5p6l 52168\n5p6m 52169\n5p6n 52170\n5p6o 52171\n5p6q 52172\n5p6r 52173\n5p6t 52174\n5p6v 52175\n5p6w 52176\n5p6x 52177\n5p6y 52178\n5p6z 52179\n5p60 52180\n5p62 52181\n5p63 52182\n5p64 52183\n5p65 52184\n5p+A 52185\n5p+B 52186\n5p+D 52187\n5p+E 52188\n5p+H 52189\n5p+K 52190\n5p+P 52191\n5p+Q 52192\n5p+R 52193\n5p+S 52194\n5p+T 52195\n5p+U 52196\n5p+Y 52197\n5p+a 52198\n5p+c 52199\n5p+d 52200\n5p+e 52201\n5p+g 52202\n5p+i 52203\n5p+k 52204\n5p+l 52205\n5p+n 52206\n5p+p 52207\n5p+s 52208\n5p+v 52209\n5p+w 52210\n5p+x 52211\n5p+z 52212\n5p+0 52213\n5p+1 52214\n5p+3 52215\n5p+4 52216\n5p+5 52217\n5p+7 52218\n5p+9 52219\n5p++ 52220\n5p+/ 52221\n5qCA 52222\n5qCC 52223\n5qCD 52224\n5qCE 52225\n5qCF 52226\n5qCH 52227\n5qCI 52228\n5qCJ 52229\n5qCK 52230\n5qCL 52231\n5qCM 52232\n5qCO 52233\n5qCP 52234\n5qCR 52235\n5qCT 52236\n5qCW 52237\n5qCX 52238\n5qCY 52239\n5qCd 52240\n5qCe 52241\n5qCf 52242\n5qCh 52243\n5qCi 52244\n5qCn 52245\n5qCp 52246\n5qCq 52247\n5qCr 52248\n5qCs 52249\n5qCx 52250\n5qCy 52251\n5qCz 52252\n5qC0 52253\n5qC3 52254\n5qC4 52255\n5qC5 52256\n5qC7 52257\n5qC8 52258\n5qC9 52259\n5qC+ 52260\n5qGA 52261\n5qGB 52262\n5qGC 52263\n5qGD 52264\n5qGE 52265\n5qGF 52266\n5qGG 52267\n5qGI 52268\n5qGJ 52269\n5qGM 52270\n5qGO 52271\n5qGQ 52272\n5qGR 52273\n5qGT 52274\n5qGU 52275\n5qGV 52276\n5qGW 52277\n5qGZ 52278\n5qGc 52279\n5qGd 52280\n5qGf 52281\n5qGg 52282\n5qGh 52283\n5qGi 52284\n5qGj 52285\n5qGk 52286\n5qGl 52287\n5qGm 52288\n5qGn 52289\n5qGo 52290\n5qGp 52291\n5qGr 52292\n5qGv 52293\n5qG0 52294\n5qG2 52295\n5qG3 52296\n5qG8 52297\n5qG+ 52298\n5qG/ 52299\n5qKB 52300\n5qKD 52301\n5qKF 52302\n5qKG 52303\n5qKI 52304\n5qKP 52305\n5qKT 52306\n5qKU 52307\n5qKX 52308\n5qKb 52309\n5qKd 52310\n5qKf 52311\n5qKg 52312\n5qKh 52313\n5qKi 52314\n5qKj 52315\n5qKm 52316\n5qKn 52317\n5qKo 52318\n5qKq 52319\n5qKr 52320\n5qKt 52321\n5qKv 52322\n5qKw 52323\n5qKx 52324\n5qKz 52325\n5qK1 52326\n5qK2 52327\n5qK5 52328\n5qK6 52329\n5qK7 52330\n5qK8 52331\n5qK/ 52332\n5qOA 52333\n5qOC 52334\n5qOE 52335\n5qOF 52336\n5qOI 52337\n5qOJ 52338\n5qOK 52339\n5qOL 52340\n5qON 52341\n5qOS 52342\n5qOU 52343\n5qOV 52344\n5qOX 52345\n5qOY 52346\n5qOa 52347\n5qOf 52348\n5qOg 52349\n5qOh 52350\n5qOj 52351\n5qOn 52352\n5qOo 52353\n5qOs 52354\n5qOu 52355\n5qOv 52356\n5qOw 52357\n5qOx 52358\n5qOy 52359\n5qO1 52360\n5qO2 52361\n5qO3 52362\n5qO5 52363\n5qO6 52364\n5qO7 52365\n5qO8 52366\n5qSA 52367\n5qSB 52368\n5qSF 52369\n5qSI 52370\n5qSK 52371\n5qSL 52372\n5qSM 52373\n5qSN 52374\n5qSO 52375\n5qSP 52376\n5qSQ 52377\n5qSS 52378\n5qSZ 52379\n5qSa 52380\n5qSb 52381\n5qSc 52382\n5qSf 52383\n5qSh 52384\n5qSj 52385\n5qSk 52386\n5qSl 52387\n5qSo 52388\n5qSq 52389\n5qSt 52390\n5qSw 52391\n5qS0 52392\n5qS5 52393\n5qS9 52394\n5qS/ 52395\n5qWA 52396\n5qWC 52397\n5qWJ 52398\n5qWK 52399\n5qWT 52400\n5qWU 52401\n5qWV 52402\n5qWX 52403\n5qWZ 52404\n5qWa 52405\n5qWc 52406\n5qWd 52407\n5qWe 52408\n5qWg 52409\n5qWh 52410\n5qWi 52411\n5qWj 52412\n5qWm 52413\n5qWq 52414\n5qWr 52415\n5qWt 52416\n5qWu 52417\n5qWv 52418\n5qWx 52419\n5qWz 52420\n5qW1 52421\n5qW3 52422\n5qW4 52423\n5qW5 52424\n5qW8 52425\n5qW9 52426\n5qW+ 52427\n5qaB 52428\n5qaC 52429\n5qaE 52430\n5qaG 52431\n5qaH 52432\n5qaI 52433\n5qaJ 52434\n5qaK 52435\n5qaO 52436\n5qaR 52437\n5qaU 52438\n5qaV 52439\n5qaW 52440\n5qaY 52441\n5qab 52442\n5qac 52443\n5qan 52444\n5qao 52445\n5qar 52446\n5qat 52447\n5qau 52448\n5qay 52449\n5qa0 52450\n5qa3 52451\n5qa7 52452\n5qa8 52453\n5qa+ 52454\n5qa/ 52455\n5qeB 52456\n5qeD 52457\n5qeF 52458\n5qeH 52459\n5qeK 52460\n5qeL 52461\n5qeM 52462\n5qeN 52463\n5qeO 52464\n5qeQ 52465\n5qeT 52466\n5qeW 52467\n5qeY 52468\n5qeZ 52469\n5qeb 52470\n5qef 52471\n5qen 52472\n5qeo 52473\n5qep 52474\n5qer 52475\n5qet 52476\n5qey 52477\n5qez 52478\n5qe7 52479\n5qe9 52480\n5qe/ 52481\n5qiA 52482\n5qiB 52483\n5qiC 52484\n5qiF 52485\n5qiJ 52486\n5qiK 52487\n5qiL 52488\n5qiR 52489\n5qiS 52490\n5qiT 52491\n5qiW 52492\n5qiX 52493\n5qiY 52494\n5qiZ 52495\n5qib 52496\n5qie 52497\n5qif 52498\n5qih 52499\n5qij 52500\n5qio 52501\n5qip 52502\n5qiq 52503\n5qir 52504\n5qiu 52505\n5qiv 52506\n5qix 52507\n5qi1 52508\n5qi4 52509\n5qi5 52510\n5qi6 52511\n5qi9 52512\n5qi+ 52513\n5qmE 52514\n5qmF 52515\n5qmH 52516\n5qmI 52517\n5qmL 52518\n5qmQ 52519\n5qmY 52520\n5qmZ 52521\n5qmb 52522\n5qme 52523\n5qmf 52524\n5qmh 52525\n5qmi 52526\n5qml 52527\n5qmm 52528\n5qmr 52529\n5qmx 52530\n5qmy 52531\n5qm5 52532\n5qm8 52533\n5qm/ 52534\n5qqA 52535\n5qqE 52536\n5qqJ 52537\n5qqN 52538\n5qqO 52539\n5qqQ 52540\n5qqU 52541\n5qqX 52542\n5qqc 52543\n5qqe 52544\n5qqg 52545\n5qqi 52546\n5qqj 52547\n5qqp 52548\n5qqq 52549\n5qqr 52550\n5qqs 52551\n5qqu 52552\n5qqv 52553\n5qqz 52554\n5qq4 52555\n5qq7 52556\n5qq/ 52557\n5quB 52558\n5quC 52559\n5quD 52560\n5quI 52561\n5quT 52562\n5qua 52563\n5qub 52564\n5que 52565\n5quf 52566\n5qun 52567\n5quo 52568\n5quq 52569\n5qu6 52570\n5qu7 52571\n5qyE 52572\n5qyF 52573\n5qyK 52574\n5qyS 52575\n5qyW 52576\n5qyd 52577\n5qye 52578\n5qyg 52579\n5qyh 52580\n5qyi 52581\n5qyj 52582\n5qyk 52583\n5qyn 52584\n5qyy 52585\n5qy3 52586\n5qy4 52587\n5qy5 52588\n5qy6 52589\n5qy7 52590\n5qy9 52591\n5qy+ 52592\n5q2A 52593\n5q2D 52594\n5q2G 52595\n5q2H 52596\n5q2J 52597\n5q2M 52598\n5q2O 52599\n5q2Q 52600\n5q2T 52601\n5q2U 52602\n5q2Y 52603\n5q2Z 52604\n5q2h 52605\n5q2i 52606\n5q2j 52607\n5q2k 52608\n5q2l 52609\n5q2m 52610\n5q2n 52611\n5q2p 52612\n5q2q 52613\n5q2t 52614\n5q2v 52615\n5q2y 52616\n5q2z 52617\n5q20 52618\n5q23 52619\n5q24 52620\n5q25 52621\n5q27 52622\n5q28 52623\n5q2/ 52624\n5q6B 52625\n5q6C 52626\n5q6D 52627\n5q6E 52628\n5q6G 52629\n5q6H 52630\n5q6J 52631\n5q6K 52632\n5q6L 52633\n5q6N 52634\n5q6S 52635\n5q6T 52636\n5q6W 52637\n5q6Y 52638\n5q6a 52639\n5q6b 52640\n5q6h 52641\n5q6q 52642\n5q6t 52643\n5q6u 52644\n5q6v 52645\n5q6y 52646\n5q6z 52647\n5q60 52648\n5q61 52649\n5q63 52650\n5q66 52651\n5q67 52652\n5q68 52653\n5q69 52654\n5q6/ 52655\n5q+A 52656\n5q+B 52657\n5q+C 52658\n5q+F 52659\n5q+G 52660\n5q+L 52661\n5q+N 52662\n5q+O 52663\n5q+P 52664\n5q+Q 52665\n5q+S 52666\n5q+T 52667\n5q+U 52668\n5q+V 52669\n5q+W 52670\n5q+X 52671\n5q+Y 52672\n5q+Z 52673\n5q+b 52674\n5q+f 52675\n5q+h 52676\n5q+r 52677\n5q+s 52678\n5q+v 52679\n5q+z 52680\n5q+5 52681\n5q+9 52682\n5rCF 52683\n5rCG 52684\n5rCH 52685\n5rCI 52686\n5rCN 52687\n5rCP 52688\n5rCQ 52689\n5rCR 52690\n5rCT 52691\n5rCU 52692\n5rCV 52693\n5rCW 52694\n5rCX 52695\n5rCY 52696\n5rCZ 52697\n5rCa 52698\n5rCb 52699\n5rCf 52700\n5rCh 52701\n5rCi 52702\n5rCj 52703\n5rCk 52704\n5rCm 52705\n5rCn 52706\n5rCo 52707\n5rCp 52708\n5rCq 52709\n5rCu 52710\n5rCv 52711\n5rCw 52712\n5rCy 52713\n5rC0 52714\n5rC3 52715\n5rC4 52716\n5rC5 52717\n5rC9 52718\n5rC+ 52719\n5rGA 52720\n5rGB 52721\n5rGC 52722\n5rGG 52723\n5rGH 52724\n5rGI 52725\n5rGJ 52726\n5rGK 52727\n5rGO 52728\n5rGQ 52729\n5rGU 52730\n5rGV 52731\n5rGX 52732\n5rGa 52733\n5rGb 52734\n5rGc 52735\n5rGd 52736\n5rGe 52737\n5rGf 52738\n5rGg 52739\n5rGh 52740\n5rGk 52741\n5rGo 52742\n5rGp 52743\n5rGq 52744\n5rGt 52745\n5rGw 52746\n5rGy 52747\n5rG0 52748\n5rG1 52749\n5rG2 52750\n5rG5 52751\n5rG6 52752\n5rG9 52753\n5rG+ 52754\n5rKB 52755\n5rKC 52756\n5rKD 52757\n5rKE 52758\n5rKF 52759\n5rKG 52760\n5rKI 52761\n5rKJ 52762\n5rKM 52763\n5rKP 52764\n5rKQ 52765\n5rKS 52766\n5rKT 52767\n5rKU 52768\n5rKW 52769\n5rKZ 52770\n5rKa 52771\n5rKb 52772\n5rKf 52773\n5rKh 52774\n5rKi 52775\n5rKj 52776\n5rKk 52777\n5rKl 52778\n5rKm 52779\n5rKn 52780\n5rKo 52781\n5rKp 52782\n5rKq 52783\n5rKr 52784\n5rKt 52785\n5rKu 52786\n5rKx 52787\n5rKz 52788\n5rK4 52789\n5rK5 52790\n5rK7 52791\n5rK8 52792\n5rK9 52793\n5rK+ 52794\n5rK/ 52795\n5rOB 52796\n5rOD 52797\n5rOE 52798\n5rOF 52799\n5rOG 52800\n5rOJ 52801\n5rOK 52802\n5rOM 52803\n5rOQ 52804\n5rOS 52805\n5rOT 52806\n5rOU 52807\n5rOV 52808\n5rOW 52809\n5rOX 52810\n5rOZ 52811\n5rOa 52812\n5rOb 52813\n5rOe 52814\n5rOg 52815\n5rOh 52816\n5rOi 52817\n5rOj 52818\n5rOl 52819\n5rOo 52820\n5rOq 52821\n5rOr 52822\n5rOs 52823\n5rOu 52824\n5rOv 52825\n5rOw 52826\n5rOx 52827\n5rOz 52828\n5rO1 52829\n5rO3 52830\n5rO4 52831\n5rO6 52832\n5rO7 52833\n5rO8 52834\n5rO9 52835\n5rO+ 52836\n5rSB 52837\n5rSE 52838\n5rSH 52839\n5rSL 52840\n5rSM 52841\n5rSO 52842\n5rSP 52843\n5rSR 52844\n5rSS 52845\n5rSX 52846\n5rSZ 52847\n5rSb 52848\n5rSe 52849\n5rSf 52850\n5rSj 52851\n5rSl 52852\n5rSn 52853\n5rSp 52854\n5rSq 52855\n5rSu 52856\n5rSx 52857\n5rSy 52858\n5rSz 52859\n5rS1 52860\n5rS2 52861\n5rS4 52862\n5rS5 52863\n5rS6 52864\n5rS7 52865\n5rS8 52866\n5rS9 52867\n5rS+ 52868\n5rS/ 52869\n5rWB 52870\n5rWD 52871\n5rWE 52872\n5rWF 52873\n5rWG 52874\n5rWH 52875\n5rWI 52876\n5rWJ 52877\n5rWK 52878\n5rWL 52879\n5rWN 52880\n5rWO 52881\n5rWP 52882\n5rWQ 52883\n5rWR 52884\n5rWS 52885\n5rWT 52886\n5rWU 52887\n5rWZ 52888\n5rWa 52889\n5rWb 52890\n5rWc 52891\n5rWe 52892\n5rWg 52893\n5rWj 52894\n5rWl 52895\n5rWm 52896\n5rWp 52897\n5rWq 52898\n5rWs 52899\n5rWu 52900\n5rWv 52901\n5rW0 52902\n5rW3 52903\n5rW4 52904\n5rW5 52905\n5raC 52906\n5raF 52907\n5raI 52908\n5raJ 52909\n5raM 52910\n5raO 52911\n5raR 52912\n5raT 52913\n5raU 52914\n5raV 52915\n5raW 52916\n5raY 52917\n5raZ 52918\n5rab 52919\n5rac 52920\n5rad 52921\n5rae 52922\n5raf 52923\n5rag 52924\n5rah 52925\n5raj 52926\n5rak 52927\n5ram 52928\n5ran 52929\n5rao 52930\n5rap 52931\n5raq 52932\n5rau 52933\n5rav 52934\n5ray 52935\n5ra1 52936\n5ra4 52937\n5ra8 52938\n5ra/ 52939\n5reA 52940\n5reE 52941\n5reF 52942\n5reG 52943\n5reH 52944\n5reL 52945\n5reM 52946\n5reP 52947\n5reR 52948\n5reS 52949\n5reW 52950\n5reY 52951\n5reZ 52952\n5rea 52953\n5rec 52954\n5red 52955\n5ree 52956\n5reg 52957\n5reh 52958\n5rek 52959\n5rem 52960\n5reo 52961\n5req 52962\n5rer 52963\n5res 52964\n5reu 52965\n5rev 52966\n5rex 52967\n5rez 52968\n5re1 52969\n5re3 52970\n5re4 52971\n5re5 52972\n5re6 52973\n5re7 52974\n5re8 52975\n5riA 52976\n5riF 52977\n5riH 52978\n5riI 52979\n5riJ 52980\n5riK 52981\n5riL 52982\n5riM 52983\n5riN 52984\n5riO 52985\n5riQ 52986\n5riR 52987\n5riT 52988\n5riU 52989\n5riV 52990\n5riX 52991\n5riZ 52992\n5ria 52993\n5rib 52994\n5rid 52995\n5rif 52996\n5rig 52997\n5rih 52998\n5rij 52999\n5rik 53000\n5ril 53001\n5rim 53002\n5rip 53003\n5rir 53004\n5ris 53005\n5rit 53006\n5riv 53007\n5riy 53008\n5ri0 53009\n5ri4 53010\n5ri6 53011\n5ri+ 53012\n5rmD 53013\n5rmE 53014\n5rmJ 53015\n5rmK 53016\n5rmN 53017\n5rmO 53018\n5rmT 53019\n5rmU 53020\n5rmW 53021\n5rmY 53022\n5rmb 53023\n5rmc 53024\n5rmd 53025\n5rmf 53026\n5rmj 53027\n5rmn 53028\n5rmr 53029\n5rmu 53030\n5rmv 53031\n5rmy 53032\n5rm0 53033\n5rm2 53034\n5rm+ 53035\n5rm/ 53036\n5rqA 53037\n5rqC 53038\n5rqD 53039\n5rqF 53040\n5rqG 53041\n5rqH 53042\n5rqJ 53043\n5rqM 53044\n5rqN 53045\n5rqP 53046\n5rqQ 53047\n5rqW 53048\n5rqY 53049\n5rqc 53050\n5rqd 53051\n5rqf 53052\n5rqi 53053\n5rql 53054\n5rqn 53055\n5rqq 53056\n5rqr 53057\n5rqv 53058\n5rqx 53059\n5rqy 53060\n5rq0 53061\n5rq2 53062\n5rq3 53063\n5rq6 53064\n5rq9 53065\n5ruB 53066\n5ruC 53067\n5ruE 53068\n5ruF 53069\n5ruH 53070\n5ruI 53071\n5ruJ 53072\n5ruL 53073\n5ruM 53074\n5ruP 53075\n5ruR 53076\n5ruT 53077\n5ruU 53078\n5ruV 53079\n5ruX 53080\n5ruY 53081\n5rua 53082\n5rud 53083\n5rue 53084\n5ruf 53085\n5rug 53086\n5ruh 53087\n5rui 53088\n5ruk 53089\n5rul 53090\n5rum 53091\n5ruo 53092\n5rup 53093\n5rus 53094\n5ruv 53095\n5ruy 53096\n5ru0 53097\n5ru4 53098\n5ru5 53099\n5ru+ 53100\n5ru/ 53101\n5ryB 53102\n5ryC 53103\n5ryG 53104\n5ryI 53105\n5ryJ 53106\n5ryP 53107\n5ryR 53108\n5ryT 53109\n5ryU 53110\n5ryV 53111\n5ryg 53112\n5ryi 53113\n5ryj 53114\n5ryp 53115\n5ryq 53116\n5ryr 53117\n5rys 53118\n5ryt 53119\n5ryv 53120\n5ryx 53121\n5ryy 53122\n5ryz 53123\n5ry0 53124\n5ry2 53125\n5ry3 53126\n5ry4 53127\n5ry8 53128\n5ry+ 53129\n5ry/ 53130\n5r2F 53131\n5r2G 53132\n5r2H 53133\n5r2L 53134\n5r2N 53135\n5r2O 53136\n5r2P 53137\n5r2R 53138\n5r2U 53139\n5r2Y 53140\n5r2b 53141\n5r2c 53142\n5r2e 53143\n5r2f 53144\n5r2h 53145\n5r2i 53146\n5r2k 53147\n5r2l 53148\n5r2m 53149\n5r2p 53150\n5r2s 53151\n5r2t 53152\n5r2u 53153\n5r2w 53154\n5r2y 53155\n5r20 53156\n5r21 53157\n5r24 53158\n5r26 53159\n5r28 53160\n5r6A 53161\n5r6B 53162\n5r6E 53163\n5r6G 53164\n5r6I 53165\n5r6M 53166\n5r6N 53167\n5r6O 53168\n5r6X 53169\n5r6c 53170\n5r6h 53171\n5r6j 53172\n5r6k 53173\n5r6n 53174\n5r6q 53175\n5r6x 53176\n5r6z 53177\n5r60 53178\n5r62 53179\n5r65 53180\n5r+A 53181\n5r+B 53182\n5r+C 53183\n5r+D 53184\n5r+G 53185\n5r+J 53186\n5r+R 53187\n5r+S 53188\n5r+V 53189\n5r+Y 53190\n5r+b 53191\n5r+e 53192\n5r+f 53193\n5r+g 53194\n5r+h 53195\n5r+k 53196\n5r+p 53197\n5r+r 53198\n5r+s 53199\n5r+u 53200\n5r+v 53201\n5r+x 53202\n5r+2 53203\n5r+6 53204\n5r++ 53205\n54CJ 53206\n54CL 53207\n54CN 53208\n54CP 53209\n54CR 53210\n54CV 53211\n54Ca 53212\n54Cb 53213\n54Cd 53214\n54Ce 53215\n54Cf 53216\n54Cj 53217\n54Cm 53218\n54Cn 53219\n54Cs 53220\n54Cw 53221\n54Cy 53222\n54C5 53223\n54C+ 53224\n54GM 53225\n54GP 53226\n54GR 53227\n54GY 53228\n54Ge 53229\n54Gj 53230\n54Gr 53231\n54Gt 53232\n54Gv 53233\n54Gw 53234\n54G1 53235\n54G2 53236\n54G4 53237\n54G8 53238\n54G9 53239\n54G+ 53240\n54G/ 53241\n54KA 53242\n54KB 53243\n54KF 53244\n54KG 53245\n54KJ 53246\n54KK 53247\n54KO 53248\n54KS 53249\n54KU 53250\n54KV 53251\n54KW 53252\n54KZ 53253\n54Kc 53254\n54Kd 53255\n54Kf 53256\n54Kk 53257\n54Kq 53258\n54Kr 53259\n54Ks 53260\n54Kt 53261\n54Ku 53262\n54Kv 53263\n54Kz 53264\n54K0 53265\n54K3 53266\n54K4 53267\n54K5 53268\n54K6 53269\n54K8 53270\n54K9 53271\n54OA 53272\n54OB 53273\n54OC 53274\n54OD 53275\n54OI 53276\n54OK 53277\n54OP 53278\n54OW 53279\n54OY 53280\n54OZ 53281\n54Ob 53282\n54Oc 53283\n54Of 53284\n54Ok 53285\n54Om 53286\n54On 53287\n54Oo 53288\n54Op 53289\n54Or 53290\n54Os 53291\n54Ot 53292\n54Ov 53293\n54Ox 53294\n54O3 53295\n54O5 53296\n54O9 53297\n54SJ 53298\n54SK 53299\n54SQ 53300\n54ST 53301\n54SU 53302\n54SV 53303\n54SW 53304\n54SX 53305\n54SY 53306\n54SZ 53307\n54Sa 53308\n54Sc 53309\n54Sh 53310\n54Sm 53311\n54Sv 53312\n54Sw 53313\n54Sx 53314\n54S2 53315\n54S8 53316\n54WF 53317\n54WJ 53318\n54WK 53319\n54WL 53320\n54WM 53321\n54WO 53322\n54WV 53323\n54WW 53324\n54WZ 53325\n54Wc 53326\n54We 53327\n54Wf 53328\n54Wi 53329\n54Wk 53330\n54Wl 53331\n54Wm 53332\n54Wn 53333\n54Wo 53334\n54Wp 53335\n54Ws 53336\n54Wu 53337\n54Wy 53338\n54Wz 53339\n54W4 53340\n54W6 53341\n54W9 53342\n54W/ 53343\n54aE 53344\n54aK 53345\n54aP 53346\n54aU 53347\n54aY 53348\n54aZ 53349\n54ac 53350\n54af 53351\n54ag 53352\n54ao 53353\n54as 53354\n54ax 53355\n54az 53356\n54a1 53357\n54a5 53358\n54a+ 53359\n54eD 53360\n54eE 53361\n54eI 53362\n54eJ 53363\n54eK 53364\n54eL 53365\n54eO 53366\n54eQ 53367\n54eS 53368\n54eU 53369\n54eV 53370\n54eX 53371\n54eZ 53372\n54ea 53373\n54ef 53374\n54eg 53375\n54el 53376\n54em 53377\n54en 53378\n54et 53379\n54eu 53380\n54e1 53381\n54e5 53382\n54e7 53383\n54e8 53384\n54e/ 53385\n54iG 53386\n54iN 53387\n54iQ 53388\n54ib 53389\n54io 53390\n54iq 53391\n54is 53392\n54it 53393\n54iw 53394\n54ix 53395\n54iy 53396\n54i1 53397\n54i2 53398\n54i3 53399\n54i4 53400\n54i5 53401\n54i6 53402\n54i7 53403\n54i8 53404\n54i9 53405\n54i+ 53406\n54i/ 53407\n54mA 53408\n54mB 53409\n54mC 53410\n54mG 53411\n54mH 53412\n54mI 53413\n54mM 53414\n54mN 53415\n54mS 53416\n54mV 53417\n54mW 53418\n54mY 53419\n54mZ 53420\n54mb 53421\n54md 53422\n54mf 53423\n54mg 53424\n54mh 53425\n54mi 53426\n54mk 53427\n54mm 53428\n54mn 53429\n54mp 53430\n54mu 53431\n54mv 53432\n54my 53433\n54m0 53434\n54m1 53435\n54m4 53436\n54m5 53437\n54m6 53438\n54m9 53439\n54m+ 53440\n54qA 53441\n54qB 53442\n54qC 53443\n54qE 53444\n54qH 53445\n54qK 53446\n54qL 53447\n54qN 53448\n54qS 53449\n54qW 53450\n54qf 53451\n54qg 53452\n54qi 53453\n54qn 53454\n54qs 53455\n54qv 53456\n54qw 53457\n54qz 53458\n54q0 53459\n54q2 53460\n54q3 53461\n54q4 53462\n54q5 53463\n54q8 53464\n54uA 53465\n54uC 53466\n54uE 53467\n54uG 53468\n54uI 53469\n54uM 53470\n54uN 53471\n54uO 53472\n54uQ 53473\n54uS 53474\n54uX 53475\n54uZ 53476\n54ub 53477\n54ud 53478\n54ue 53479\n54ug 53480\n54uh 53481\n54ui 53482\n54uo 53483\n54up 53484\n54us 53485\n54ut 53486\n54uu 53487\n54uw 53488\n54ux 53489\n54uy 53490\n54u0 53491\n54u3 53492\n54u4 53493\n54u5 53494\n54u7 53495\n54u8 53496\n54u9 53497\n54yB 53498\n54yH 53499\n54yK 53500\n54yO 53501\n54yV 53502\n54yW 53503\n54yX 53504\n54yZ 53505\n54yb 53506\n54yc 53507\n54yd 53508\n54ye 53509\n54yf 53510\n54yh 53511\n54yi 53512\n54yl 53513\n54yo 53514\n54yp 53515\n54yq 53516\n54yr 53517\n54ys 53518\n54yu 53519\n54yv 53520\n54yx 53521\n54yy 53522\n54y0 53523\n54y2 53524\n54y3 53525\n54y5 53526\n54y+ 53527\n54y/ 53528\n542E 53529\n542F 53530\n542O 53531\n542P 53532\n542Q 53533\n542S 53534\n542X 53535\n542g 53536\n542j 53537\n542o 53538\n542q 53539\n542s 53540\n542t 53541\n542w 53542\n542y 53543\n5421 53544\n5424 53545\n5426 53546\n5427 53547\n542+ 53548\n546E 53549\n546H 53550\n546J 53551\n546L 53552\n546O 53553\n546R 53554\n546V 53555\n546W 53556\n546Y 53557\n546Z 53558\n546a 53559\n546b 53560\n546f 53561\n546g 53562\n546i 53563\n546l 53564\n546m 53565\n546p 53566\n546r 53567\n546u 53568\n546v 53569\n546w 53570\n546y 53571\n546z 53572\n5463 53573\n5465 53574\n5466 53575\n5467 53576\n54+A 53577\n54+C 53578\n54+F 53579\n54+I 53580\n54+J 53581\n54+K 53582\n54+N 53583\n54+O 53584\n54+P 53585\n54+Q 53586\n54+R 53587\n54+Z 53588\n54+c 53589\n54+e 53590\n54+g 53591\n54+j 53592\n54+l 53593\n54+m 53594\n54+n 53595\n54+p 53596\n54+q 53597\n54+r 53598\n54+t 53599\n54+u 53600\n54+w 53601\n54+y 53602\n54+4 53603\n54+6 53604\n54+9 53605\n54++ 53606\n55CD 53607\n55CF 53608\n55CG 53609\n55CH 53610\n55CJ 53611\n55CK 53612\n55CN 53613\n55CO 53614\n55CP 53615\n55CQ 53616\n55Ca 53617\n55Cb 53618\n55Ci 53619\n55Ck 53620\n55Cl 53621\n55Cm 53622\n55Co 53623\n55Cq 53624\n55Cs 53625\n55Cu 53626\n55Cv 53627\n55Cw 53628\n55Cy 53629\n55Cz 53630\n55C0 53631\n55C1 53632\n55C2 53633\n55C6 53634\n55C8 53635\n55GA 53636\n55GB 53637\n55GE 53638\n55GV 53639\n55GX 53640\n55GZ 53641\n55Ga 53642\n55Gb 53643\n55Gc 53644\n55Ge 53645\n55Gf 53646\n55Gg 53647\n55Gj 53648\n55Gk 53649\n55Gp 53650\n55Gq 53651\n55Gt 53652\n55Gu 53653\n55Gv 53654\n55Gw 53655\n55Gx 53656\n55Gz 53657\n55G0 53658\n55G2 53659\n55G3 53660\n55G+ 53661\n55KA 53662\n55KB 53663\n55KD 53664\n55KH 53665\n55KI 53666\n55KL 53667\n55KO 53668\n55KQ 53669\n55KY 53670\n55Kc 53671\n55Kd 53672\n55Ke 53673\n55Kf 53674\n55Kg 53675\n55Kj 53676\n55Kn 53677\n55Ko 53678\n55Kp 53679\n55Kw 53680\n55K6 53681\n55K9 53682\n55OK 53683\n55OP 53684\n55OS 53685\n55OU 53686\n55OY 53687\n55Oc 53688\n55Og 53689\n55Oi 53690\n55Oj 53691\n55Ok 53692\n55Om 53693\n55Or 53694\n55Ou 53695\n55Ov 53696\n55O0 53697\n55O2 53698\n55O3 53699\n55O/ 53700\n55SD 53701\n55SE 53702\n55SM 53703\n55SN 53704\n55SO 53705\n55SP 53706\n55SR 53707\n55ST 53708\n55SV 53709\n55SY 53710\n55SZ 53711\n55Sa 53712\n55Sc 53713\n55Sf 53714\n55Si 53715\n55Sj 53716\n55Sl 53717\n55Sm 53718\n55So 53719\n55Sp 53720\n55Sq 53721\n55Sr 53722\n55Ss 53723\n55St 53724\n55Sv 53725\n55Sw 53726\n55Sx 53727\n55Sy 53728\n55Sz 53729\n55S0 53730\n55S1 53731\n55S3 53732\n55S4 53733\n55S6 53734\n55S7 53735\n55S+ 53736\n55WA 53737\n55WF 53738\n55WI 53739\n55WJ 53740\n55WK 53741\n55WL 53742\n55WM 53743\n55WO 53744\n55WP 53745\n55WR 53746\n55WU 53747\n55WZ 53748\n55Wa 53749\n55Wb 53750\n55Wc 53751\n55Wd 53752\n55Wg 53753\n55Wi 53754\n55Wk 53755\n55Wl 53756\n55Wm 53757\n55Wq 53758\n55Wr 53759\n55Ws 53760\n55Wt 53761\n55Wv 53762\n55Ww 53763\n55Wy 53764\n55Wz 53765\n55W0 53766\n55W1 53767\n55W2 53768\n55W3 53769\n55W4 53770\n55W5 53771\n55W/ 53772\n55aD 53773\n55aG 53774\n55aH 53775\n55aK 53776\n55aL 53777\n55aN 53778\n55aO 53779\n55aP 53780\n55aR 53781\n55aU 53782\n55aW 53783\n55aX 53784\n55aZ 53785\n55aa 53786\n55ad 53787\n55af 53788\n55ag 53789\n55ah 53790\n55aj 53791\n55ak 53792\n55al 53793\n55ar 53794\n55as 53795\n55at 53796\n55au 53797\n55av 53798\n55aw 53799\n55ax 53800\n55ay 53801\n55az 53802\n55a0 53803\n55a1 53804\n55a4 53805\n55a5 53806\n55a8 53807\n55a9 53808\n55a+ 53809\n55eC 53810\n55eD 53811\n55eE 53812\n55eF 53813\n55eH 53814\n55eI 53815\n55eJ 53816\n55eK 53817\n55eN 53818\n55eS 53819\n55eU 53820\n55eV 53821\n55eY 53822\n55eZ 53823\n55eb 53824\n55ee 53825\n55ei 53826\n55ej 53827\n55ek 53828\n55em 53829\n55en 53830\n55eo 53831\n55ep 53832\n55eq 53833\n55er 53834\n55ew 53835\n55ex 53836\n55ey 53837\n55ez 53838\n55e0 53839\n55e5 53840\n55e6 53841\n55e8 53842\n55e+ 53843\n55e/ 53844\n55iA 53845\n55iB 53846\n55iF 53847\n55iG 53848\n55iK 53849\n55iL 53850\n55iM 53851\n55iN 53852\n55iT 53853\n55iV 53854\n55iX 53855\n55iY 53856\n55iZ 53857\n55id 53858\n55if 53859\n55ig 53860\n55ih 53861\n55ii 53862\n55ik 53863\n55im 53864\n55in 53865\n55ip 53866\n55iq 53867\n55ir 53868\n55iw 53869\n55iz 53870\n55i0 53871\n55i1 53872\n55i4 53873\n55i7 53874\n55i8 53875\n55i+ 53876\n55i/ 53877\n55mA 53878\n55mC 53879\n55mD 53880\n55mG 53881\n55mH 53882\n55mI 53883\n55mM 53884\n55mN 53885\n55mO 53886\n55mS 53887\n55mU 53888\n55mW 53889\n55mY 53890\n55mc 53891\n55me 53892\n55mh 53893\n55mi 53894\n55mj 53895\n55ml 53896\n55mn 53897\n55mp 53898\n55mq 53899\n55mr 53900\n55ms 53901\n55mu 53902\n55mv 53903\n55mw 53904\n55mx 53905\n55my 53906\n55m4 53907\n55m6 53908\n55m7 53909\n55m8 53910\n55m9 53911\n55m+ 53912\n55qA 53913\n55qC 53914\n55qE 53915\n55qG 53916\n55qH 53917\n55qI 53918\n55qL 53919\n55qM 53920\n55qO 53921\n55qQ 53922\n55qR 53923\n55qT 53924\n55qV 53925\n55qW 53926\n55qZ 53927\n55qa 53928\n55qd 53929\n55qe 53930\n55qk 53931\n55qm 53932\n55qu 53933\n55qv 53934\n55qw 53935\n55qx 53936\n55qy 53937\n55q0 53938\n55q3 53939\n55q4 53940\n55q5 53941\n55q6 53942\n55q/ 53943\n55uC 53944\n55uD 53945\n55uF 53946\n55uG 53947\n55uI 53948\n55uJ 53949\n55uK 53950\n55uN 53951\n55uO 53952\n55uP 53953\n55uQ 53954\n55uR 53955\n55uS 53956\n55uU 53957\n55uW 53958\n55uX 53959\n55uY 53960\n55ub 53961\n55uc 53962\n55ue 53963\n55uf 53964\n55uh 53965\n55uj 53966\n55uk 53967\n55ul 53968\n55un 53969\n55up 53970\n55uq 53971\n55uu 53972\n55uv 53973\n55ux 53974\n55uy 53975\n55u0 53976\n55u4 53977\n55u5 53978\n55u7 53979\n55u8 53980\n55u+ 53981\n55yA 53982\n55yB 53983\n55yE 53984\n55yH 53985\n55yI 53986\n55yJ 53987\n55yL 53988\n55yM 53989\n55yN 53990\n55yZ 53991\n55ya 53992\n55yb 53993\n55yc 53994\n55ye 53995\n55yf 53996\n55yg 53997\n55yl 53998\n55ym 53999\n55yo 54000\n55yp 54001\n55ys 54002\n55yt 54003\n55yv 54004\n55y1 54005\n55y2 54006\n55y3 54007\n55y4 54008\n55y6 54009\n55y8 54010\n55y+ 54011\n552A 54012\n552B 54013\n552D 54014\n552G 54015\n552H 54016\n552Q 54017\n552R 54018\n552a 54019\n552b 54020\n552c 54021\n552e 54022\n552f 54023\n552h 54024\n552i 54025\n552j 54026\n552l 54027\n552m 54028\n552o 54029\n552r 54030\n552s 54031\n552x 54032\n5525 54033\n5526 54034\n5529 54035\n552+ 54036\n552/ 54037\n556A 54038\n556E 54039\n556F 54040\n556G 54041\n556H 54042\n556L 54043\n556M 54044\n556O 54045\n556R 54046\n556S 54047\n556T 54048\n556e 54049\n556f 54050\n556g 54051\n556i 54052\n556l 54053\n556n 54054\n556p 54055\n556q 54056\n556s 54057\n556t 54058\n556w 54059\n556z 54060\n5561 54061\n5567 54062\n5568 54063\n5569 54064\n556+ 54065\n556/ 54066\n55+H 54067\n55+N 54068\n55+T 54069\n55+X 54070\n55+a 54071\n55+b 54072\n55+c 54073\n55+i 54074\n55+j 54075\n55+l 54076\n55+n 54077\n55+p 54078\n55+r 54079\n55+s 54080\n55+t 54081\n55+u 54082\n55+v 54083\n55+x 54084\n55+z 54085\n55+2 54086\n55+4 54087\n55+8 54088\n55+9 54089\n55++ 54090\n55+/ 54091\n56CA 54092\n56CB 54093\n56CC 54094\n56CK 54095\n56CM 54096\n56CN 54097\n56CS 54098\n56CU 54099\n56CV 54100\n56CW 54101\n56CX 54102\n56CY 54103\n56Ca 54104\n56Cc 54105\n56Cd 54106\n56Cf 54107\n56Cg 54108\n56Cj 54109\n56Cl 54110\n56Cm 54111\n56Cn 54112\n56Cp 54113\n56Cr 54114\n56Cs 54115\n56Ct 54116\n56Cw 54117\n56Cy 54118\n56C0 54119\n56C1 54120\n56C3 54121\n56C4 54122\n56C6 54123\n56C7 54124\n56C8 54125\n56C+ 54126\n56C/ 54127\n56GA 54128\n56GB 54129\n56GF 54130\n56GM 54131\n56GQ 54132\n56GS 54133\n56GV 54134\n56GW 54135\n56GX 54136\n56Ga 54137\n56Gd 54138\n56Ge 54139\n56Gq 54140\n56Gr 54141\n56Gs 54142\n56Gt 54143\n56Gu 54144\n56Gv 54145\n56Gy 54146\n56G0 54147\n56G3 54148\n56G8 54149\n56G/ 54150\n56KB 54151\n56KG 54152\n56KH 54153\n56KJ 54154\n56KM 54155\n56KN 54156\n56KO 54157\n56KR 54158\n56KT 54159\n56KV 54160\n56KX 54161\n56KY 54162\n56Ka 54163\n56Kb 54164\n56Kc 54165\n56Kf 54166\n56Kh 54167\n56Kj 54168\n56Kn 54169\n56Kp 54170\n56Kq 54171\n56Kw 54172\n56Kx 54173\n56Ky 54174\n56Kz 54175\n56K0 54176\n56K6 54177\n56K8 54178\n56K+ 54179\n56OB 54180\n56OF 54181\n56OG 54182\n56OJ 54183\n56OK 54184\n56OL 54185\n56OQ 54186\n56OR 54187\n56OS 54188\n56OU 54189\n56OV 54190\n56OZ 54191\n56Oa 54192\n56Oh 54193\n56On 54194\n56Oo 54195\n56Os 54196\n56Ov 54197\n56Oy 54198\n56O0 54199\n56O3 54200\n56O6 54201\n56O7 54202\n56O+ 54203\n56SB 54204\n56SF 54205\n56SM 54206\n56SO 54207\n56SS 54208\n56ST 54209\n56SZ 54210\n56Se 54211\n56Sm 54212\n56Sq 54213\n56Sr 54214\n56Ss 54215\n56S0 54216\n56S6 54217\n56S7 54218\n56S8 54219\n56S9 54220\n56S+ 54221\n56WA 54222\n56WB 54223\n56WG 54224\n56WH 54225\n56WI 54226\n56WJ 54227\n56WO 54228\n56WP 54229\n56WQ 54230\n56WT 54231\n56WW 54232\n56WX 54233\n56Wa 54234\n56Wb 54235\n56Wc 54236\n56Wd 54237\n56We 54238\n56Wf 54239\n56Wg 54240\n56Wi 54241\n56Wl 54242\n56Wn 54243\n56Wo 54244\n56Wt 54245\n56Wv 54246\n56W3 54247\n56W4 54248\n56W6 54249\n56W8 54250\n56W/ 54251\n56aA 54252\n56aB 54253\n56aE 54254\n56aF 54255\n56aK 54256\n56aN 54257\n56aO 54258\n56aP 54259\n56ab 54260\n56al 54261\n56am 54262\n56an 54263\n56ao 54264\n56ap 54265\n56aq 54266\n56au 54267\n56aw 54268\n56ax 54269\n56az 54270\n56a5 54271\n56a6 54272\n56a7 54273\n56a9 54274\n56a+ 54275\n56a/ 54276\n56eA 54277\n56eB 54278\n56eC 54279\n56eD 54280\n56eG 54281\n56eJ 54282\n56eL 54283\n56eN 54284\n56eP 54285\n56eR 54286\n56eS 54287\n56eV 54288\n56eY 54289\n56ef 54290\n56eh 54291\n56ej 54292\n56ek 54293\n56em 54294\n56en 54295\n56ep 54296\n56er 54297\n56es 54298\n56et 54299\n56ev 54300\n56ew 54301\n56e4 54302\n56e7 54303\n56e9 54304\n56e+ 54305\n56iA 54306\n56iC 54307\n56iF 54308\n56iI 54309\n56iK 54310\n56iL 54311\n56iN 54312\n56iO 54313\n56iU 54314\n56iX 54315\n56iZ 54316\n56ia 54317\n56ic 54318\n56ie 54319\n56if 54320\n56ig 54321\n56ij 54322\n56iu 54323\n56ix 54324\n56iy 54325\n56iz 54326\n56i3 54327\n56i5 54328\n56i7 54329\n56i8 54330\n56i9 54331\n56i/ 54332\n56mA 54333\n56mC 54334\n56mG 54335\n56mH 54336\n56mM 54337\n56mN 54338\n56mO 54339\n56mP 54340\n56mQ 54341\n56mR 54342\n56mX 54343\n56mh 54344\n56mi 54345\n56mj 54346\n56mp 54347\n56mr 54348\n56mw 54349\n56m0 54350\n56m2 54351\n56m3 54352\n56m4 54353\n56m5 54354\n56m6 54355\n56m9 54356\n56m/ 54357\n56qA 54358\n56qB 54359\n56qD 54360\n56qE 54361\n56qI 54362\n56qN 54363\n56qO 54364\n56qR 54365\n56qS 54366\n56qT 54367\n56qV 54368\n56qW 54369\n56qX 54370\n56qY 54371\n56qc 54372\n56qd 54373\n56qf 54374\n56qg 54375\n56qh 54376\n56qj 54377\n56ql 54378\n56qm 54379\n56qo 54380\n56qp 54381\n56qq 54382\n56qt 54383\n56qu 54384\n56qv 54385\n56qz 54386\n56q2 54387\n56q4 54388\n56q6 54389\n56q+ 54390\n56q/ 54391\n56uD 54392\n56uE 54393\n56uF 54394\n56uH 54395\n56uI 54396\n56uK 54397\n56uL 54398\n56uR 54399\n56uW 54400\n56uZ 54401\n56uc 54402\n56ud 54403\n56ue 54404\n56uf 54405\n56ug 54406\n56ui 54407\n56uj 54408\n56ul 54409\n56um 54410\n56uq 54411\n56ut 54412\n56uv 54413\n56uy 54414\n56u2 54415\n56u5 54416\n56u6 54417\n56u9 54418\n56u/ 54419\n56yC 54420\n56yD 54421\n56yE 54422\n56yG 54423\n56yI 54424\n56yK 54425\n56yL 54426\n56yP 54427\n56yR 54428\n56yU 54429\n56yV 54430\n56yW 54431\n56yY 54432\n56yZ 54433\n56yb 54434\n56ye 54435\n56yg 54436\n56yk 54437\n56yl 54438\n56ym 54439\n56yo 54440\n56yp 54441\n56yq 54442\n56yr 54443\n56ys 54444\n56yz 54445\n56y1 54446\n56y4 54447\n56y5 54448\n56y6 54449\n56y8 54450\n56y+ 54451\n562F 54452\n562G 54453\n562H 54454\n562I 54455\n562J 54456\n562K 54457\n562L 54458\n562M 54459\n562N 54460\n562P 54461\n562Q 54462\n562R 54463\n562S 54464\n562U 54465\n562W 54466\n562Y 54467\n562a 54468\n562b 54469\n562c 54470\n562d 54471\n562g 54472\n562i 54473\n562l 54474\n562n 54475\n562s 54476\n562u 54477\n562w 54478\n562x 54479\n562y 54480\n5621 54481\n5623 54482\n5625 54483\n5626 54484\n5627 54485\n5628 54486\n562+ 54487\n566A 54488\n566F 54489\n566G 54490\n566H 54491\n566L 54492\n566N 54493\n566P 54494\n566Q 54495\n566S 54496\n566T 54497\n566U 54498\n566V 54499\n566X 54500\n566Z 54501\n566a 54502\n566c 54503\n566d 54504\n566f 54505\n566h 54506\n566i 54507\n566l 54508\n566m 54509\n566n 54510\n566o 54511\n566p 54512\n566q 54513\n566r 54514\n566s 54515\n566t 54516\n566x 54517\n5660 54518\n5664 54519\n5667 54520\n5668 54521\n566+ 54522\n56+A 54523\n56+B 54524\n56+E 54525\n56+G 54526\n56+H 54527\n56+J 54528\n56+L 54529\n56+M 54530\n56+R 54531\n56+T 54532\n56+Z 54533\n56+a 54534\n56+d 54535\n56+g 54536\n56+h 54537\n56+k 54538\n56+l 54539\n56+m 54540\n56+p 54541\n56+q 54542\n56+t 54543\n56+u 54544\n56+x 54545\n56+z 54546\n56+2 54547\n56+3 54548\n56+8 54549\n56++ 54550\n57CA 54551\n57CD 54552\n57CH 54553\n57CL 54554\n57CM 54555\n57CN 54556\n57CP 54557\n57CR 54558\n57CS 54559\n57CT 54560\n57CU 54561\n57CW 54562\n57CX 54563\n57Cf 54564\n57Ch 54565\n57Cj 54566\n57Cm 54567\n57Cn 54568\n57Cq 54569\n57Cr 54570\n57Cw 54571\n57C3 54572\n57C4 54573\n57C6 54574\n57C9 54575\n57C+ 54576\n57C/ 54577\n57GA 54578\n57GB 54579\n57GD 54580\n57GH 54581\n57GM 54582\n57GN 54583\n57GP 54584\n57GQ 54585\n57GT 54586\n57GU 54587\n57GW 54588\n57Gf 54589\n57Gg 54590\n57Gj 54591\n57Gk 54592\n57Gs 54593\n57Gu 54594\n57Gy 54595\n57Gz 54596\n57G7 54597\n57G8 54598\n57G9 54599\n57G+ 54600\n57KB 54601\n57KC 54602\n57KD 54603\n57KJ 54604\n57KL 54605\n57KN 54606\n57KR 54607\n57KS 54608\n57KV 54609\n57KX 54610\n57KY 54611\n57Kb 54612\n57Kd 54613\n57Kf 54614\n57Ki 54615\n57Kk 54616\n57Kl 54617\n57Km 54618\n57Kn 54619\n57Kq 54620\n57Kt 54621\n57Ku 54622\n57Kx 54623\n57Ky 54624\n57Kz 54625\n57K1 54626\n57K5 54627\n57K8 54628\n57K9 54629\n57K+ 54630\n57OA 54631\n57OB 54632\n57OF 54633\n57OK 54634\n57OM 54635\n57ON 54636\n57OO 54637\n57OS 54638\n57OV 54639\n57OW 54640\n57OX 54641\n57OY 54642\n57OZ 54643\n57Oc 54644\n57Oe 54645\n57Of 54646\n57Og 54647\n57Oi 54648\n57On 54649\n57Oo 54650\n57Ov 54651\n57Oy 54652\n57O2 54653\n57O4 54654\n57O6 54655\n57O7 54656\n57O+ 54657\n57SA 54658\n57SC 54659\n57SE 54660\n57SF 54661\n57SG 54662\n57SJ 54663\n57SK 54664\n57SL 54665\n57SN 54666\n57SQ 54667\n57SU 54668\n57SX 54669\n57SY 54670\n57SZ 54671\n57Sa 54672\n57Sb 54673\n57Sc 54674\n57Sg 54675\n57Sh 54676\n57Si 54677\n57Sn 54678\n57Sr 54679\n57Ss 54680\n57Su 54681\n57Sv 54682\n57Sw 54683\n57Sy 54684\n57Sz 54685\n57S1 54686\n57S5 54687\n57S6 54688\n57WA 54689\n57WC 54690\n57WD 54691\n57WE 54692\n57WF 54693\n57WG 54694\n57WL 54695\n57WM 54696\n57WO 54697\n57WP 54698\n57WQ 54699\n57WV 54700\n57WW 54701\n57Wb 54702\n57Wc 54703\n57We 54704\n57Wh 54705\n57Wi 54706\n57Wj 54707\n57Wm 54708\n57Wo 54709\n57Wu 54710\n57Wv 54711\n57Wx 54712\n57Wy 54713\n57Wz 54714\n57W1 54715\n57W2 54716\n57W5 54717\n57W6 54718\n57W9 54719\n57aB 54720\n57aJ 54721\n57aP 54722\n57aT 54723\n57aZ 54724\n57aa 54725\n57ab 54726\n57ac 54727\n57af 54728\n57ag 54729\n57ai 54730\n57aj 54731\n57am 54732\n57as 54733\n57at 54734\n57au 54735\n57av 54736\n57aw 54737\n57ax 54738\n57ay 54739\n57a0 54740\n57a1 54741\n57a2 54742\n57a4 54743\n57a6 54744\n57a7 54745\n57a9 54746\n57a+ 54747\n57a/ 54748\n57eH 54749\n57eK 54750\n57eL 54751\n57eP 54752\n57eR 54753\n57eS 54754\n57eY 54755\n57ea 54756\n57eb 54757\n57ed 54758\n57ee 54759\n57eg 54760\n57eh 54761\n57ej 54762\n57ek 54763\n57eo 54764\n57ep 54765\n57es 54766\n57ev 54767\n57ey 54768\n57e0 54769\n57e7 54770\n57iB 54771\n57iE 54772\n57iF 54773\n57iI 54774\n57iJ 54775\n57iK 54776\n57iL 54777\n57iS 54778\n57ib 54779\n57ie 54780\n57if 54781\n57ig 54782\n57ii 54783\n57ij 54784\n57im 54785\n57ir 54786\n57iu 54787\n57ix 54788\n57iy 54789\n57i0 54790\n57i1 54791\n57i3 54792\n57i5 54793\n57i6 54794\n57i7 54795\n57i9 54796\n57i+ 54797\n57mB 54798\n57mD 54799\n57mG 54800\n57mH 54801\n57mK 54802\n57mL 54803\n57mN 54804\n57mR 54805\n57mU 54806\n57mV 54807\n57mW 54808\n57mZ 54809\n57ma 54810\n57md 54811\n57me 54812\n57mh 54813\n57mn 54814\n57mp 54815\n57mq 54816\n57mr 54817\n57mt 54818\n57mw 54819\n57mz 54820\n57m5 54821\n57m7 54822\n57m8 54823\n57m9 54824\n57qC 54825\n57qH 54826\n57qI 54827\n57qM 54828\n57qN 54829\n57qP 54830\n57qQ 54831\n57qS 54832\n57qT 54833\n57qU 54834\n57qW 54835\n57qb 54836\n57qc 54837\n57qg 54838\n57qh 54839\n57qi 54840\n57qj 54841\n57qk 54842\n57ql 54843\n57qm 54844\n57qn 54845\n57qo 54846\n57qp 54847\n57qq 54848\n57qr 54849\n57qs 54850\n57qt 54851\n57qu 54852\n57qv 54853\n57qw 54854\n57qx 54855\n57qy 54856\n57qz 54857\n57q1 54858\n57q2 54859\n57q3 54860\n57q4 54861\n57q5 54862\n57q6 54863\n57q7 54864\n57q9 54865\n57q+ 54866\n57q/ 54867\n57uA 54868\n57uB 54869\n57uC 54870\n57uD 54871\n57uE 54872\n57uF 54873\n57uG 54874\n57uH 54875\n57uI 54876\n57uJ 54877\n57uK 54878\n57uL 54879\n57uM 54880\n57uN 54881\n57uO 54882\n57uP 54883\n57uQ 54884\n57uR 54885\n57uS 54886\n57uT 54887\n57uU 54888\n57uV 54889\n57uX 54890\n57uY 54891\n57uZ 54892\n57ua 54893\n57ub 54894\n57uc 54895\n57ud 54896\n57ue 54897\n57uf 54898\n57uh 54899\n57ui 54900\n57uj 54901\n57uk 54902\n57ul 54903\n57um 54904\n57un 54905\n57uo 54906\n57up 54907\n57uq 54908\n57ur 54909\n57ut 54910\n57uu 54911\n57uv 54912\n57uw 54913\n57ux 54914\n57uy 54915\n57uz 54916\n57u0 54917\n57u1 54918\n57u2 54919\n57u3 54920\n57u4 54921\n57u6 54922\n57u7 54923\n57u8 54924\n57u9 54925\n57u+ 54926\n57u/ 54927\n57yA 54928\n57yB 54929\n57yC 54930\n57yD 54931\n57yE 54932\n57yF 54933\n57yG 54934\n57yH 54935\n57yI 54936\n57yJ 54937\n57yK 54938\n57yL 54939\n57yM 54940\n57yO 54941\n57yR 54942\n57yS 54943\n57yT 54944\n57yU 54945\n57yV 54946\n57yW 54947\n57yX 54948\n57yY 54949\n57yZ 54950\n57ya 54951\n57yb 54952\n57yc 54953\n57yd 54954\n57yf 54955\n57yg 54956\n57yi 54957\n57yj 54958\n57yk 54959\n57yl 54960\n57ym 54961\n57yn 54962\n57yo 54963\n57yp 54964\n57yq 54965\n57yr 54966\n57ys 54967\n57yt 54968\n57yu 54969\n57yv 54970\n57yw 54971\n57yx 54972\n57yz 54973\n57y0 54974\n57y1 54975\n57y2 54976\n57y4 54977\n57y6 54978\n572C 54979\n572E 54980\n572F 54981\n572H 54982\n572M 54983\n572N 54984\n572Q 54985\n572R 54986\n572U 54987\n572V 54988\n572X 54989\n572Y 54990\n572a 54991\n572f 54992\n572g 54993\n572h 54994\n572i 54995\n572n 54996\n572o 54997\n572p 54998\n572q 54999\n572r 55000\n572u 55001\n572w 55002\n572y 55003\n5720 55004\n5721 55005\n5723 55006\n5725 55007\n572+ 55008\n576B 55009\n576C 55010\n576D 55011\n576F 55012\n576G 55013\n576H 55014\n576I 55015\n576K 55016\n576M 55017\n576O 55018\n576R 55019\n576U 55020\n576W 55021\n576X 55022\n576a 55023\n576d 55024\n576e 55025\n576f 55026\n576h 55027\n576j 55028\n576k 55029\n576n 55030\n576o 55031\n576p 55032\n576v 55033\n576w 55034\n576y 55035\n5762 55036\n5764 55037\n5765 55038\n5769 55039\n576/ 55040\n57+A 55041\n57+B 55042\n57+D 55043\n57+F 55044\n57+G 55045\n57+K 55046\n57+M 55047\n57+O 55048\n57+S 55049\n57+U 55050\n57+V 55051\n57+Y 55052\n57+a 55053\n57+b 55054\n57+f 55055\n57+g 55056\n57+h 55057\n57+l 55058\n57+m 55059\n57+p 55060\n57+r 55061\n57+u 55062\n57+w 55063\n57+x 55064\n57+z 55065\n57+5 55066\n57+7 55067\n57+8 55068\n6ICA 55069\n6ICB 55070\n6ICD 55071\n6ICE 55072\n6ICF 55073\n6ICG 55074\n6ICL 55075\n6ICM 55076\n6ICN 55077\n6ICQ 55078\n6ICS 55079\n6ICV 55080\n6ICX 55081\n6ICY 55082\n6ICZ 55083\n6ICc 55084\n6ICm 55085\n6ICn 55086\n6ICo 55087\n6ICq 55088\n6ICx 55089\n6ICz 55090\n6IC1 55091\n6IC2 55092\n6IC3 55093\n6IC4 55094\n6IC7 55095\n6IC9 55096\n6IC/ 55097\n6IGC 55098\n6IGD 55099\n6IGG 55100\n6IGK 55101\n6IGL 55102\n6IGM 55103\n6IGN 55104\n6IGS 55105\n6IGU 55106\n6IGW 55107\n6IGY 55108\n6IGa 55109\n6IGe 55110\n6IGf 55111\n6IGh 55112\n6IGi 55113\n6IGo 55114\n6IGp 55115\n6IGq 55116\n6IGv 55117\n6IGw 55118\n6IGy 55119\n6IGz 55120\n6IG0 55121\n6IG1 55122\n6IG2 55123\n6IG3 55124\n6IG9 55125\n6IG+ 55126\n6IG/ 55127\n6IKD 55128\n6IKE 55129\n6IKF 55130\n6IKG 55131\n6IKH 55132\n6IKJ 55133\n6IKL 55134\n6IKM 55135\n6IKP 55136\n6IKT 55137\n6IKW 55138\n6IKY 55139\n6IKa 55140\n6IKb 55141\n6IKd 55142\n6IKf 55143\n6IKg 55144\n6IKh 55145\n6IKi 55146\n6IKk 55147\n6IKl 55148\n6IKp 55149\n6IKq 55150\n6IKr 55151\n6IKs 55152\n6IKt 55153\n6IKu 55154\n6IKv 55155\n6IKx 55156\n6IKy 55157\n6IK0 55158\n6IK3 55159\n6IK4 55160\n6IK6 55161\n6IK8 55162\n6IK9 55163\n6IK+ 55164\n6IK/ 55165\n6IOA 55166\n6IOB 55167\n6IOD 55168\n6IOE 55169\n6IOG 55170\n6IOM 55171\n6ION 55172\n6IOO 55173\n6IOW 55174\n6IOX 55175\n6IOZ 55176\n6IOa 55177\n6IOb 55178\n6IOc 55179\n6IOd 55180\n6IOe 55181\n6IOh 55182\n6IOk 55183\n6IOl 55184\n6IOn 55185\n6IOq 55186\n6IOr 55187\n6IOs 55188\n6IOt 55189\n6IOv 55190\n6IOw 55191\n6IOx 55192\n6IOz 55193\n6IO0 55194\n6IO2 55195\n6IO4 55196\n6IO6 55197\n6IO8 55198\n6IO9 55199\n6ISB 55200\n6ISC 55201\n6ISF 55202\n6ISG 55203\n6ISH 55204\n6ISI 55205\n6ISJ 55206\n6ISK 55207\n6ISN 55208\n6ISP 55209\n6ISQ 55210\n6ISR 55211\n6ISS 55212\n6IST 55213\n6ISU 55214\n6ISW 55215\n6ISY 55216\n6ISa 55217\n6ISb 55218\n6ISj 55219\n6ISp 55220\n6ISr 55221\n6ISs 55222\n6ISv 55223\n6ISw 55224\n6ISx 55225\n6ISy 55226\n6ISz 55227\n6IS3 55228\n6IS4 55229\n6IS5 55230\n6IS+ 55231\n6IWG 55232\n6IWI 55233\n6IWK 55234\n6IWL 55235\n6IWM 55236\n6IWO 55237\n6IWQ 55238\n6IWR 55239\n6IWT 55240\n6IWU 55241\n6IWV 55242\n6IWY 55243\n6IWZ 55244\n6IWa 55245\n6IWf 55246\n6IWg 55247\n6IWl 55248\n6IWm 55249\n6IWn 55250\n6IWp 55251\n6IWr 55252\n6IWt 55253\n6IWu 55254\n6IWw 55255\n6IWx 55256\n6IWz 55257\n6IW0 55258\n6IW4 55259\n6IW5 55260\n6IW6 55261\n6IW7 55262\n6IW8 55263\n6IW+ 55264\n6IW/ 55265\n6IaA 55266\n6IaC 55267\n6IaD 55268\n6IaI 55269\n6IaK 55270\n6IaP 55271\n6IaR 55272\n6IaV 55273\n6IaY 55274\n6Iaa 55275\n6Iab 55276\n6Iac 55277\n6Iad 55278\n6Iag 55279\n6Iaj 55280\n6Iam 55281\n6Iao 55282\n6Iap 55283\n6Iaz 55284\n6Ia0 55285\n6Ia1 55286\n6Ia6 55287\n6Ia7 55288\n6Ia9 55289\n6Ia+ 55290\n6Ia/ 55291\n6IeA 55292\n6IeC 55293\n6IeD 55294\n6IeG 55295\n6IeH 55296\n6IeI 55297\n6IeJ 55298\n6IeK 55299\n6IeM 55300\n6IeN 55301\n6IeR 55302\n6IeT 55303\n6IeY 55304\n6IeZ 55305\n6Iea 55306\n6Iec 55307\n6Ief 55308\n6Iej 55309\n6Iel 55310\n6Ien 55311\n6Ieo 55312\n6Ieq 55313\n6Ies 55314\n6Iet 55315\n6Iez 55316\n6Ie0 55317\n6Ie6 55318\n6Ie7 55319\n6Ie8 55320\n6Ie+ 55321\n6IiA 55322\n6IiB 55323\n6IiC 55324\n6IiF 55325\n6IiG 55326\n6IiH 55327\n6IiI 55328\n6IiJ 55329\n6IiK 55330\n6IiM 55331\n6IiN 55332\n6IiO 55333\n6IiQ 55334\n6IiS 55335\n6IiU 55336\n6IiW 55337\n6IiX 55338\n6IiY 55339\n6Iib 55340\n6Iic 55341\n6Iie 55342\n6Iif 55343\n6Iii 55344\n6Iij 55345\n6Iip 55346\n6Iiq 55347\n6Iir 55348\n6Iis 55349\n6Iiu 55350\n6Iiv 55351\n6Iiw 55352\n6Iix 55353\n6Iiy 55354\n6Iiz 55355\n6Ii1 55356\n6Ii2 55357\n6Ii3 55358\n6Ii4 55359\n6Ii5 55360\n6Ii+ 55361\n6ImA 55362\n6ImE 55363\n6ImH 55364\n6ImJ 55365\n6ImL 55366\n6ImP 55367\n6ImY 55368\n6ImZ 55369\n6Imf 55370\n6Imk 55371\n6Imm 55372\n6Imo 55373\n6Imq 55374\n6Imr 55375\n6Imu 55376\n6Imv 55377\n6Imw 55378\n6Imx 55379\n6Imy 55380\n6Imz 55381\n6Im2 55382\n6Im3 55383\n6Im4 55384\n6Im5 55385\n6Im6 55386\n6Im9 55387\n6Im+ 55388\n6Im/ 55389\n6IqC 55390\n6IqD 55391\n6IqI 55392\n6IqK 55393\n6IqL 55394\n6IqN 55395\n6IqO 55396\n6IqR 55397\n6IqS 55398\n6IqX 55399\n6IqY 55400\n6IqZ 55401\n6Iqc 55402\n6Iqd 55403\n6Iqf 55404\n6Iqh 55405\n6Iqj 55406\n6Iqk 55407\n6Iql 55408\n6Iqm 55409\n6Iqo 55410\n6Iqp 55411\n6Iqq 55412\n6Iqr 55413\n6Iqs 55414\n6Iqt 55415\n6Iqu 55416\n6Iqv 55417\n6Iqw 55418\n6Iqx 55419\n6Iqz 55420\n6Iq3 55421\n6Iq4 55422\n6Iq5 55423\n6Iq7 55424\n6Iq9 55425\n6Iq+ 55426\n6IuB 55427\n6IuE 55428\n6IuF 55429\n6IuH 55430\n6IuI 55431\n6IuK 55432\n6IuL 55433\n6IuM 55434\n6IuN 55435\n6IuO 55436\n6IuP 55437\n6IuR 55438\n6IuS 55439\n6IuT 55440\n6IuU 55441\n6IuV 55442\n6IuX 55443\n6IuY 55444\n6IuZ 55445\n6Iub 55446\n6Iuc 55447\n6Iue 55448\n6Iuf 55449\n6Iuh 55450\n6Iui 55451\n6Iuj 55452\n6Iuk 55453\n6Iul 55454\n6Ium 55455\n6Iun 55456\n6Iur 55457\n6Iuv 55458\n6Iux 55459\n6Iuz 55460\n6Iu0 55461\n6Iu3 55462\n6Iu5 55463\n6Iu6 55464\n6Iu7 55465\n6Iu8 55466\n6Iu+ 55467\n6IyB 55468\n6IyC 55469\n6IyD 55470\n6IyE 55471\n6IyF 55472\n6IyG 55473\n6IyI 55474\n6IyJ 55475\n6IyM 55476\n6IyO 55477\n6IyP 55478\n6IyR 55479\n6IyU 55480\n6IyV 55481\n6IyX 55482\n6IyY 55483\n6Iya 55484\n6Iyb 55485\n6Iyc 55486\n6Iyj 55487\n6Iyn 55488\n6Iyo 55489\n6Iyr 55490\n6Iys 55491\n6Iyt 55492\n6Iyv 55493\n6Iyx 55494\n6Iyy 55495\n6Iyz 55496\n6Iy0 55497\n6Iy1 55498\n6Iy2 55499\n6Iy4 55500\n6Iy5 55501\n6Iy6 55502\n6Iy8 55503\n6I2A 55504\n6I2D 55505\n6I2F 55506\n6I2G 55507\n6I2H 55508\n6I2J 55509\n6I2K 55510\n6I2P 55511\n6I2Q 55512\n6I2R 55513\n6I2S 55514\n6I2U 55515\n6I2Y 55516\n6I2Z 55517\n6I2a 55518\n6I2b 55519\n6I2c 55520\n6I2e 55521\n6I2f 55522\n6I2g 55523\n6I2h 55524\n6I2j 55525\n6I2k 55526\n6I2l 55527\n6I2m 55528\n6I2n 55529\n6I2o 55530\n6I2p 55531\n6I2q 55532\n6I2r 55533\n6I2s 55534\n6I2v 55535\n6I2z 55536\n6I23 55537\n6I24 55538\n6I27 55539\n6I28 55540\n6I29 55541\n6I6F 55542\n6I6G 55543\n6I6H 55544\n6I6J 55545\n6I6K 55546\n6I6O 55547\n6I6S 55548\n6I6T 55549\n6I6V 55550\n6I6W 55551\n6I6Y 55552\n6I6Z 55553\n6I6a 55554\n6I6c 55555\n6I6e 55556\n6I6f 55557\n6I6g 55558\n6I6i 55559\n6I6n 55560\n6I6o 55561\n6I6p 55562\n6I6q 55563\n6I6r 55564\n6I6x 55565\n6I6y 55566\n6I6z 55567\n6I60 55568\n6I61 55569\n6I62 55570\n6I63 55571\n6I64 55572\n6I65 55573\n6I66 55574\n6I68 55575\n6I69 55576\n6I+A 55577\n6I+B 55578\n6I+F 55579\n6I+H 55580\n6I+J 55581\n6I+K 55582\n6I+M 55583\n6I+O 55584\n6I+P 55585\n6I+T 55586\n6I+U 55587\n6I+W 55588\n6I+Y 55589\n6I+c 55590\n6I+f 55591\n6I+g 55592\n6I+h 55593\n6I+l 55594\n6I+o 55595\n6I+p 55596\n6I+q 55597\n6I+r 55598\n6I+v 55599\n6I+w 55600\n6I+x 55601\n6I+y 55602\n6I+0 55603\n6I+4 55604\n6I+5 55605\n6I+9 55606\n6JCB 55607\n6JCD 55608\n6JCE 55609\n6JCG 55610\n6JCK 55611\n6JCL 55612\n6JCM 55613\n6JCN 55614\n6JCO 55615\n6JCP 55616\n6JCT 55617\n6JCY 55618\n6JCc 55619\n6JCd 55620\n6JCg 55621\n6JCi 55622\n6JCk 55623\n6JCl 55624\n6JCm 55625\n6JCn 55626\n6JCo 55627\n6JCp 55628\n6JCs 55629\n6JCx 55630\n6JC1 55631\n6JC4 55632\n6JC5 55633\n6JC8 55634\n6JC9 55635\n6JGG 55636\n6JGI 55637\n6JGJ 55638\n6JGO 55639\n6JGR 55640\n6JGX 55641\n6JGZ 55642\n6JGa 55643\n6JGb 55644\n6JGh 55645\n6JGj 55646\n6JGm 55647\n6JGp 55648\n6JGr 55649\n6JGs 55650\n6JGt 55651\n6JGv 55652\n6JGx 55653\n6JGz 55654\n6JG1 55655\n6JG2 55656\n6JG3 55657\n6JG4 55658\n6JG5 55659\n6JG6 55660\n6JKC 55661\n6JKE 55662\n6JKL 55663\n6JKM 55664\n6JKO 55665\n6JKQ 55666\n6JKU 55667\n6JKX 55668\n6JKZ 55669\n6JKc 55670\n6JKf 55671\n6JKh 55672\n6JKv 55673\n6JKy 55674\n6JK0 55675\n6JK4 55676\n6JK5 55677\n6JK6 55678\n6JK7 55679\n6JK8 55680\n6JK9 55681\n6JK/ 55682\n6JOA 55683\n6JOB 55684\n6JOC 55685\n6JOE 55686\n6JOG 55687\n6JOJ 55688\n6JOK 55689\n6JOL 55690\n6JON 55691\n6JOQ 55692\n6JOR 55693\n6JOT 55694\n6JOW 55695\n6JOZ 55696\n6JOa 55697\n6JOd 55698\n6JOf 55699\n6JOg 55700\n6JOj 55701\n6JOl 55702\n6JOm 55703\n6JOs 55704\n6JOu 55705\n6JO0 55706\n6JO8 55707\n6JO/ 55708\n6JSA 55709\n6JSM 55710\n6JSR 55711\n6JST 55712\n6JSU 55713\n6JSV 55714\n6JSX 55715\n6JSa 55716\n6JSf 55717\n6JSh 55718\n6JSj 55719\n6JSk 55720\n6JSl 55721\n6JSm 55722\n6JSr 55723\n6JSs 55724\n6JSt 55725\n6JS1 55726\n6JS3 55727\n6JS4 55728\n6JS5 55729\n6JS6 55730\n6JS7 55731\n6JS8 55732\n6JS9 55733\n6JWB 55734\n6JWD 55735\n6JWI 55736\n6JWJ 55737\n6JWK 55738\n6JWL 55739\n6JWO 55740\n6JWW 55741\n6JWX 55742\n6JWZ 55743\n6JWa 55744\n6JWe 55745\n6JWj 55746\n6JWk 55747\n6JWo 55748\n6JWp 55749\n6JWq 55750\n6JWr 55751\n6JWt 55752\n6JWy 55753\n6JW0 55754\n6JW3 55755\n6JW6 55756\n6JW7 55757\n6JW+ 55758\n6JaA 55759\n6JaB 55760\n6JaE 55761\n6JaF 55762\n6JaH 55763\n6JaI 55764\n6JaK 55765\n6JaP 55766\n6JaQ 55767\n6JaR 55768\n6JaU 55769\n6JaX 55770\n6JaZ 55771\n6Jab 55772\n6Jac 55773\n6Jai 55774\n6Jak 55775\n6Jam 55776\n6Jao 55777\n6Jap 55778\n6Jaq 55779\n6Jar 55780\n6Jas 55781\n6Jat 55782\n6Jau 55783\n6Jav 55784\n6Jaw 55785\n6Jaz 55786\n6Ja3 55787\n6Ja5 55788\n6Ja6 55789\n6JeB 55790\n6JeJ 55791\n6JeN 55792\n6JeP 55793\n6JeQ 55794\n6JeT 55795\n6JeV 55796\n6Jec 55797\n6Jed 55798\n6Jeg 55799\n6Jek 55800\n6Jel 55801\n6Jem 55802\n6Jep 55803\n6Jeq 55804\n6Je3 55805\n6Je5 55806\n6Je6 55807\n6Je7 55808\n6Je/ 55809\n6JiC 55810\n6JiF 55811\n6JiG 55812\n6JiH 55813\n6JiK 55814\n6JiL 55815\n6JiR 55816\n6JiT 55817\n6JiW 55818\n6JiX 55819\n6JiY 55820\n6Jia 55821\n6Jin 55822\n6Jit 55823\n6Jiw 55824\n6Ji4 55825\n6Ji8 55826\n6Ji/ 55827\n6JmO 55828\n6JmP 55829\n6JmQ 55830\n6JmR 55831\n6JmT 55832\n6JmU 55833\n6JmV 55834\n6Jma 55835\n6Jmb 55836\n6Jmc 55837\n6Jme 55838\n6Jmf 55839\n6Jmi 55840\n6Jmn 55841\n6Jmr 55842\n6Jms 55843\n6Jmu 55844\n6Jmx 55845\n6Jm1 55846\n6Jm5 55847\n6Jm6 55848\n6Jm7 55849\n6Jm9 55850\n6Jm+ 55851\n6Jm/ 55852\n6JqA 55853\n6JqB 55854\n6JqC 55855\n6JqK 55856\n6JqL 55857\n6JqM 55858\n6JqN 55859\n6JqT 55860\n6JqV 55861\n6Jqc 55862\n6Jqd 55863\n6Jqh 55864\n6Jqj 55865\n6Jqk 55866\n6Jqn 55867\n6Jqo 55868\n6Jqp 55869\n6Jqq 55870\n6Jqr 55871\n6Jqs 55872\n6Jqv 55873\n6Jqw 55874\n6Jqx 55875\n6Jqz 55876\n6Jq0 55877\n6Jq1 55878\n6Jq2 55879\n6JuA 55880\n6JuE 55881\n6JuG 55882\n6JuH 55883\n6JuJ 55884\n6JuK 55885\n6JuL 55886\n6JuN 55887\n6JuO 55888\n6JuP 55889\n6JuQ 55890\n6JuR 55891\n6JuU 55892\n6JuY 55893\n6JuZ 55894\n6Jub 55895\n6Jue 55896\n6Juf 55897\n6Juk 55898\n6Jup 55899\n6Jus 55900\n6Jut 55901\n6Juu 55902\n6Juv 55903\n6Juw 55904\n6Jux 55905\n6Juy 55906\n6Juz 55907\n6Ju0 55908\n6Ju4 55909\n6Ju5 55910\n6Ju7 55911\n6Ju8 55912\n6Ju9 55913\n6Ju+ 55914\n6JyA 55915\n6JyC 55916\n6JyD 55917\n6JyG 55918\n6JyH 55919\n6JyI 55920\n6JyJ 55921\n6JyK 55922\n6JyN 55923\n6JyO 55924\n6JyR 55925\n6JyS 55926\n6JyT 55927\n6JyV 55928\n6JyX 55929\n6JyY 55930\n6Jya 55931\n6Jyb 55932\n6Jyc 55933\n6Jye 55934\n6Jyh 55935\n6Jyi 55936\n6Jyj 55937\n6Jyl 55938\n6Jyp 55939\n6Jyu 55940\n6Jyx 55941\n6Jy0 55942\n6Jy3 55943\n6Jy7 55944\n6Jy+ 55945\n6Jy/ 55946\n6J2H 55947\n6J2I 55948\n6J2J 55949\n6J2L 55950\n6J2M 55951\n6J2O 55952\n6J2T 55953\n6J2V 55954\n6J2X 55955\n6J2Y 55956\n6J2Z 55957\n6J2f 55958\n6J2g 55959\n6J2j 55960\n6J2l 55961\n6J2m 55962\n6J2o 55963\n6J2u 55964\n6J2w 55965\n6J2y 55966\n6J20 55967\n6J22 55968\n6J24 55969\n6J27 55970\n6J28 55971\n6J29 55972\n6J2+ 55973\n6J2/ 55974\n6J6C 55975\n6J6D 55976\n6J6F 55977\n6J6I 55978\n6J6L 55979\n6J6N 55980\n6J6e 55981\n6J6f 55982\n6J6g 55983\n6J6i 55984\n6J6o 55985\n6J6r 55986\n6J6s 55987\n6J6t 55988\n6J6v 55989\n6J6z 55990\n6J61 55991\n6J66 55992\n6J67 55993\n6J69 55994\n6J+A 55995\n6J+E 55996\n6J+G 55997\n6J+H 55998\n6J+K 55999\n6J+L 56000\n6J+Q 56001\n6J+R 56002\n6J+S 56003\n6J+b 56004\n6J+c 56005\n6J+f 56006\n6J+g 56007\n6J+l 56008\n6J+q 56009\n6J+s 56010\n6J+t 56011\n6J+u 56012\n6J+v 56013\n6J+y 56014\n6J+2 56015\n6J+3 56016\n6J+5 56017\n6J+7 56018\n6J++ 56019\n6KCD 56020\n6KCF 56021\n6KCK 56022\n6KCL 56023\n6KCN 56024\n6KCO 56025\n6KCP 56026\n6KCR 56027\n6KCT 56028\n6KCV 56029\n6KCW 56030\n6KCb 56031\n6KCc 56032\n6KCf 56033\n6KCh 56034\n6KCi 56035\n6KCj 56036\n6KCn 56037\n6KCx 56038\n6KCy 56039\n6KC2 56040\n6KC5 56041\n6KC7 56042\n6KC8 56043\n6KGA 56044\n6KGE 56045\n6KGF 56046\n6KGG 56047\n6KGM 56048\n6KGN 56049\n6KGO 56050\n6KGS 56051\n6KGT 56052\n6KGU 56053\n6KGX 56054\n6KGZ 56055\n6KGb 56056\n6KGd 56057\n6KGe 56058\n6KGh 56059\n6KGi 56060\n6KGj 56061\n6KGl 56062\n6KGo 56063\n6KGp 56064\n6KGr 56065\n6KGs 56066\n6KGu 56067\n6KGv 56068\n6KGw 56069\n6KGy 56070\n6KG1 56071\n6KG3 56072\n6KG9 56073\n6KG+ 56074\n6KG/ 56075\n6KKB 56076\n6KKC 56077\n6KKE 56078\n6KKF 56079\n6KKG 56080\n6KKI 56081\n6KKL 56082\n6KKN 56083\n6KKS 56084\n6KKT 56085\n6KKW 56086\n6KKX 56087\n6KKZ 56088\n6KKc 56089\n6KKd 56090\n6KKe 56091\n6KKi 56092\n6KKk 56093\n6KKq 56094\n6KKr 56095\n6KKt 56096\n6KKw 56097\n6KKx 56098\n6KK0 56099\n6KK1 56100\n6KK3 56101\n6KK8 56102\n6KK/ 56103\n6KOB 56104\n6KOC 56105\n6KOD 56106\n6KOE 56107\n6KOF 56108\n6KOG 56109\n6KOH 56110\n6KOJ 56111\n6KOK 56112\n6KOO 56113\n6KOP 56114\n6KOS 56115\n6KOU 56116\n6KOV 56117\n6KOY 56118\n6KOZ 56119\n6KOb 56120\n6KOc 56121\n6KOd 56122\n6KOf 56123\n6KOh 56124\n6KOi 56125\n6KOk 56126\n6KOl 56127\n6KOo 56128\n6KOw 56129\n6KOx 56130\n6KOy 56131\n6KOz 56132\n6KO0 56133\n6KO4 56134\n6KO5 56135\n6KO9 56136\n6KO+ 56137\n6KSA 56138\n6KSC 56139\n6KSE 56140\n6KSH 56141\n6KSK 56142\n6KSM 56143\n6KSQ 56144\n6KSS 56145\n6KST 56146\n6KSU 56147\n6KSZ 56148\n6KSa 56149\n6KSb 56150\n6KSe 56151\n6KSh 56152\n6KSl 56153\n6KSq 56154\n6KSr 56155\n6KSt 56156\n6KSw 56157\n6KSy 56158\n6KS0 56159\n6KS2 56160\n6KS4 56161\n6KS7 56162\n6KWA 56163\n6KWB 56164\n6KWE 56165\n6KWW 56166\n6KWc 56167\n6KWe 56168\n6KWf 56169\n6KWg 56170\n6KWk 56171\n6KWm 56172\n6KWq 56173\n6KWv 56174\n6KWy 56175\n6KW0 56176\n6KW3 56177\n6KW7 56178\n6KW/ 56179\n6KaB 56180\n6KaD 56181\n6KaG 56182\n6KaH 56183\n6KaL 56184\n6KaP 56185\n6KaT 56186\n6KaW 56187\n6KaX 56188\n6KaY 56189\n6Kaa 56190\n6Kah 56191\n6Kan 56192\n6Kap 56193\n6Kaq 56194\n6Kav 56195\n6Kay 56196\n6Kaz 56197\n6Ka3 56198\n6Ka6 56199\n6Ka9 56200\n6Ka/ 56201\n6KeA 56202\n6KeB 56203\n6KeC 56204\n6KeE 56205\n6KeF 56206\n6KeG 56207\n6KeH 56208\n6KeI 56209\n6KeJ 56210\n6KeK 56211\n6KeM 56212\n6KeO 56213\n6KeP 56214\n6KeQ 56215\n6KeR 56216\n6KeS 56217\n6Kea 56218\n6Kec 56219\n6Ked 56220\n6Kee 56221\n6Kej 56222\n6Kel 56223\n6Kem 56224\n6Ker 56225\n6Kev 56226\n6Kex 56227\n6Kez 56228\n6Ke0 56229\n6Ke4 56230\n6KiA 56231\n6KiC 56232\n6KiD 56233\n6KiH 56234\n6KiI 56235\n6KiK 56236\n6KiM 56237\n6KiO 56238\n6KiT 56239\n6KiV 56240\n6KiX 56241\n6KiY 56242\n6Kia 56243\n6Kib 56244\n6Kid 56245\n6Kif 56246\n6Kii 56247\n6Kij 56248\n6Kil 56249\n6Kiq 56250\n6Kit 56251\n6Kix 56252\n6Kiz 56253\n6Ki0 56254\n6Ki2 56255\n6Ki6 56256\n6Ki7 56257\n6Ki8 56258\n6Ki+ 56259\n6KmB 56260\n6KmI 56261\n6KmQ 56262\n6KmS 56263\n6KmU 56264\n6KmV 56265\n6Kmb 56266\n6Kmd 56267\n6Kme 56268\n6Kmg 56269\n6Kmi 56270\n6Kmj 56271\n6Kmm 56272\n6Kmp 56273\n6Kmr 56274\n6Kms 56275\n6Kmt 56276\n6Kmu 56277\n6Kmw 56278\n6Kmx 56279\n6Kmy 56280\n6Kmz 56281\n6Km5 56282\n6KqC 56283\n6KqE 56284\n6KqF 56285\n6KqH 56286\n6KqJ 56287\n6KqK 56288\n6KqM 56289\n6KqN 56290\n6KqR 56291\n6KqS 56292\n6KqT 56293\n6KqV 56294\n6KqY 56295\n6Kqe 56296\n6Kqg 56297\n6Kqh 56298\n6Kqj 56299\n6Kqk 56300\n6Kql 56301\n6Kqm 56302\n6Kqo 56303\n6Kqq 56304\n6Kqs 56305\n6Kqt 56306\n6Kqw 56307\n6Kqy 56308\n6Kq5 56309\n6Kq8 56310\n6Kq/ 56311\n6KuC 56312\n6KuE 56313\n6KuH 56314\n6KuL 56315\n6KuM 56316\n6KuN 56317\n6KuP 56318\n6KuS 56319\n6KuW 56320\n6KuX 56321\n6Kua 56322\n6Kub 56323\n6Kuc 56324\n6Kuh 56325\n6Kui 56326\n6Kuk 56327\n6Kum 56328\n6Kun 56329\n6Kur 56330\n6Kut 56331\n6Kuu 56332\n6Kux 56333\n6Kuz 56334\n6Ku3 56335\n6Ku4 56336\n6Ku6 56337\n6Ku8 56338\n6Ku+ 56339\n6KyA 56340\n6KyB 56341\n6KyC 56342\n6KyE 56343\n6KyH 56344\n6KyK 56345\n6KyO 56346\n6KyQ 56347\n6KyU 56348\n6KyW 56349\n6KyX 56350\n6KyZ 56351\n6Kya 56352\n6Kyb 56353\n6Kyd 56354\n6Kyg 56355\n6Kyh 56356\n6Kym 56357\n6Kyo 56358\n6Kyp 56359\n6Kyr 56360\n6Kys 56361\n6Kyz 56362\n6Ky3 56363\n6Ky5 56364\n6K2B 56365\n6K2J 56366\n6K2O 56367\n6K2P 56368\n6K2W 56369\n6K2Y 56370\n6K2a 56371\n6K2c 56372\n6K2e 56373\n6K2f 56374\n6K2m 56375\n6K2r 56376\n6K2s 56377\n6K2v 56378\n6K2w 56379\n6K2y 56380\n6K20 56381\n6K23 56382\n6K29 56383\n6K6A 56384\n6K6D 56385\n6K6K 56386\n6K6M 56387\n6K6O 56388\n6K6Q 56389\n6K6S 56390\n6K6T 56391\n6K6W 56392\n6K6a 56393\n6K6g 56394\n6K6h 56395\n6K6i 56396\n6K6j 56397\n6K6k 56398\n6K6l 56399\n6K6m 56400\n6K6n 56401\n6K6o 56402\n6K6p 56403\n6K6q 56404\n6K6r 56405\n6K6t 56406\n6K6u 56407\n6K6v 56408\n6K6w 56409\n6K6y 56410\n6K6z 56411\n6K60 56412\n6K61 56413\n6K62 56414\n6K63 56415\n6K64 56416\n6K65 56417\n6K66 56418\n6K68 56419\n6K69 56420\n6K6+ 56421\n6K6/ 56422\n6K+A 56423\n6K+B 56424\n6K+C 56425\n6K+D 56426\n6K+E 56427\n6K+F 56428\n6K+G 56429\n6K+I 56430\n6K+J 56431\n6K+K 56432\n6K+L 56433\n6K+M 56434\n6K+N 56435\n6K+O 56436\n6K+P 56437\n6K+Q 56438\n6K+R 56439\n6K+S 56440\n6K+T 56441\n6K+U 56442\n6K+V 56443\n6K+W 56444\n6K+X 56445\n6K+Y 56446\n6K+Z 56447\n6K+a 56448\n6K+b 56449\n6K+c 56450\n6K+d 56451\n6K+e 56452\n6K+f 56453\n6K+g 56454\n6K+h 56455\n6K+i 56456\n6K+j 56457\n6K+k 56458\n6K+l 56459\n6K+m 56460\n6K+n 56461\n6K+o 56462\n6K+p 56463\n6K+r 56464\n6K+s 56465\n6K+t 56466\n6K+u 56467\n6K+v 56468\n6K+w 56469\n6K+x 56470\n6K+y 56471\n6K+z 56472\n6K+0 56473\n6K+1 56474\n6K+2 56475\n6K+3 56476\n6K+4 56477\n6K+5 56478\n6K+6 56479\n6K+7 56480\n6K+8 56481\n6K+9 56482\n6K++ 56483\n6K+/ 56484\n6LCA 56485\n6LCB 56486\n6LCC 56487\n6LCD 56488\n6LCE 56489\n6LCF 56490\n6LCG 56491\n6LCI 56492\n6LCK 56493\n6LCL 56494\n6LCM 56495\n6LCN 56496\n6LCO 56497\n6LCP 56498\n6LCQ 56499\n6LCR 56500\n6LCS 56501\n6LCT 56502\n6LCU 56503\n6LCV 56504\n6LCW 56505\n6LCX 56506\n6LCY 56507\n6LCZ 56508\n6LCa 56509\n6LCb 56510\n6LCc 56511\n6LCd 56512\n6LCe 56513\n6LCf 56514\n6LCg 56515\n6LCh 56516\n6LCi 56517\n6LCj 56518\n6LCk 56519\n6LCl 56520\n6LCm 56521\n6LCn 56522\n6LCo 56523\n6LCp 56524\n6LCq 56525\n6LCs 56526\n6LCt 56527\n6LCu 56528\n6LCv 56529\n6LCw 56530\n6LCx 56531\n6LCy 56532\n6LCz 56533\n6LC0 56534\n6LC1 56535\n6LC2 56536\n6LC3 56537\n6LC6 56538\n6LC/ 56539\n6LGB 56540\n6LGF 56541\n6LGG 56542\n6LGH 56543\n6LGI 56544\n6LGJ 56545\n6LGK 56546\n6LGM 56547\n6LGO 56548\n6LGQ 56549\n6LGU 56550\n6LGV 56551\n6LGa 56552\n6LGb 56553\n6LGd 56554\n6LGh 56555\n6LGi 56556\n6LGo 56557\n6LGq 56558\n6LGr 56559\n6LGs 56560\n6LGz 56561\n6LG4 56562\n6LG5 56563\n6LG6 56564\n6LKC 56565\n6LKF 56566\n6LKJ 56567\n6LKK 56568\n6LKM 56569\n6LKT 56570\n6LKU 56571\n6LKY 56572\n6LKd 56573\n6LKe 56574\n6LKg 56575\n6LKh 56576\n6LKi 56577\n6LKn 56578\n6LKo 56579\n6LKp 56580\n6LKq 56581\n6LKr 56582\n6LKs 56583\n6LKv 56584\n6LKw 56585\n6LKy 56586\n6LKz 56587\n6LK0 56588\n6LK2 56589\n6LK3 56590\n6LK4 56591\n6LK7 56592\n6LK8 56593\n6LK9 56594\n6LK/ 56595\n6LOA 56596\n6LOB 56597\n6LOC 56598\n6LOD 56599\n6LOE 56600\n6LOH 56601\n6LOI 56602\n6LOK 56603\n6LOO 56604\n6LOR 56605\n6LOS 56606\n6LOT 56607\n6LOa 56608\n6LOb 56609\n6LOc 56610\n6LOe 56611\n6LOg 56612\n6LOi 56613\n6LOj 56614\n6LOk 56615\n6LOm 56616\n6LOq 56617\n6LOs 56618\n6LOt 56619\n6LO0 56620\n6LO6 56621\n6LO8 56622\n6LO9 56623\n6LSE 56624\n6LSF 56625\n6LSH 56626\n6LSI 56627\n6LSK 56628\n6LSL 56629\n6LSP 56630\n6LSQ 56631\n6LST 56632\n6LSU 56633\n6LSW 56634\n6LSd 56635\n6LSe 56636\n6LSf 56637\n6LSh 56638\n6LSi 56639\n6LSj 56640\n6LSk 56641\n6LSl 56642\n6LSm 56643\n6LSn 56644\n6LSo 56645\n6LSp 56646\n6LSq 56647\n6LSr 56648\n6LSs 56649\n6LSt 56650\n6LSu 56651\n6LSv 56652\n6LSw 56653\n6LSx 56654\n6LSy 56655\n6LS0 56656\n6LS1 56657\n6LS2 56658\n6LS3 56659\n6LS4 56660\n6LS5 56661\n6LS6 56662\n6LS7 56663\n6LS8 56664\n6LS9 56665\n6LS+ 56666\n6LS/ 56667\n6LWB 56668\n6LWC 56669\n6LWD 56670\n6LWE 56671\n6LWF 56672\n6LWI 56673\n6LWJ 56674\n6LWK 56675\n6LWL 56676\n6LWM 56677\n6LWN 56678\n6LWO 56679\n6LWP 56680\n6LWQ 56681\n6LWT 56682\n6LWU 56683\n6LWV 56684\n6LWW 56685\n6LWY 56686\n6LWZ 56687\n6LWa 56688\n6LWb 56689\n6LWc 56690\n6LWd 56691\n6LWe 56692\n6LWf 56693\n6LWg 56694\n6LWh 56695\n6LWi 56696\n6LWj 56697\n6LWk 56698\n6LWm 56699\n6LWn 56700\n6LWq 56701\n6LWr 56702\n6LWs 56703\n6LWt 56704\n6LWw 56705\n6LWz 56706\n6LW0 56707\n6LW1 56708\n6LW2 56709\n6LW3 56710\n6LaB 56711\n6LaE 56712\n6LaF 56713\n6LaK 56714\n6LaL 56715\n6LaU 56716\n6LaV 56717\n6LaZ 56718\n6Laf 56719\n6Laj 56720\n6Lao 56721\n6Laz 56722\n6La0 56723\n6La1 56724\n6La4 56725\n6La6 56726\n6La+ 56727\n6La/ 56728\n6LeC 56729\n6LeD 56730\n6LeE 56731\n6LeG 56732\n6LeL 56733\n6LeM 56734\n6LeO 56735\n6LeP 56736\n6LeR 56737\n6LeW 56738\n6LeX 56739\n6Lea 56740\n6Leb 56741\n6Led 56742\n6Lee 56743\n6Lef 56744\n6Leh 56745\n6Lej 56746\n6Lek 56747\n6Leo 56748\n6Lep 56749\n6Leq 56750\n6Ler 56751\n6Les 56752\n6Lev 56753\n6Lex 56754\n6Lez 56755\n6Le1 56756\n6Le2 56757\n6Le3 56758\n6Le4 56759\n6Le5 56760\n6Le6 56761\n6Le7 56762\n6Le8 56763\n6Le9 56764\n6Le/ 56765\n6LiF 56766\n6LiJ 56767\n6LiK 56768\n6LiM 56769\n6LiO 56770\n6LiP 56771\n6LiQ 56772\n6LiU 56773\n6LiW 56774\n6Lid 56775\n6Lie 56776\n6Lif 56777\n6Lih 56778\n6Lii 56779\n6Lij 56780\n6Lim 56781\n6Lin 56782\n6Lip 56783\n6Liq 56784\n6Lis 56785\n6Lit 56786\n6Liu 56787\n6Liv 56788\n6Liw 56789\n6Lix 56790\n6Li0 56791\n6Li1 56792\n6Li5 56793\n6Li6 56794\n6Li9 56795\n6LmA 56796\n6LmB 56797\n6LmC 56798\n6LmE 56799\n6LmH 56800\n6LmI 56801\n6LmJ 56802\n6LmK 56803\n6LmL 56804\n6LmM 56805\n6LmQ 56806\n6LmR 56807\n6LmS 56808\n6LmV 56809\n6LmZ 56810\n6Lma 56811\n6Lmf 56812\n6Lmg 56813\n6Lmh 56814\n6Lmj 56815\n6Lmk 56816\n6Lmm 56817\n6Lmp 56818\n6Lms 56819\n6Lmt 56820\n6Lmv 56821\n6Lmw 56822\n6Lmy 56823\n6Lm0 56824\n6Lm2 56825\n6Lm8 56826\n6Lm9 56827\n6Lm/ 56828\n6LqB 56829\n6LqE 56830\n6LqF 56831\n6LqH 56832\n6LqK 56833\n6LqN 56834\n6LqP 56835\n6LqQ 56836\n6LqR 56837\n6LqT 56838\n6LqU 56839\n6LqZ 56840\n6Lqc 56841\n6Lqh 56842\n6Lqq 56843\n6Lqr 56844\n6Lqs 56845\n6Lqv 56846\n6Lqw 56847\n6Lqx 56848\n6Lqy 56849\n6Lq6 56850\n6Lq+ 56851\n6LuA 56852\n6LuI 56853\n6LuK 56854\n6LuL 56855\n6LuM 56856\n6LuN 56857\n6LuO 56858\n6LuS 56859\n6Lub 56860\n6Luf 56861\n6Lui 56862\n6Luj 56863\n6Lur 56864\n6Lu4 56865\n6Lu7 56866\n6Lu8 56867\n6Lu9 56868\n6LyD 56869\n6LyJ 56870\n6LyK 56871\n6LyM 56872\n6LyS 56873\n6LyT 56874\n6LyU 56875\n6LyV 56876\n6Lyb 56877\n6Lyc 56878\n6Lyd 56879\n6Lym 56880\n6Lyp 56881\n6Lyq 56882\n6Lyv 56883\n6Lyz 56884\n6Ly2 56885\n6Ly4 56886\n6Ly7 56887\n6Ly+ 56888\n6Ly/ 56889\n6L2C 56890\n6L2E 56891\n6L2F 56892\n6L2G 56893\n6L2J 56894\n6L2M 56895\n6L2N 56896\n6L2O 56897\n6L2X 56898\n6L2f 56899\n6L2h 56900\n6L2i 56901\n6L2j 56902\n6L2k 56903\n6L2m 56904\n6L2n 56905\n6L2o 56906\n6L2p 56907\n6L2r 56908\n6L2s 56909\n6L2t 56910\n6L2u 56911\n6L2v 56912\n6L2w 56913\n6L2x 56914\n6L2y 56915\n6L2z 56916\n6L20 56917\n6L21 56918\n6L22 56919\n6L24 56920\n6L25 56921\n6L26 56922\n6L27 56923\n6L28 56924\n6L29 56925\n6L2+ 56926\n6L2/ 56927\n6L6C 56928\n6L6D 56929\n6L6E 56930\n6L6F 56931\n6L6G 56932\n6L6H 56933\n6L6I 56934\n6L6J 56935\n6L6K 56936\n6L6L 56937\n6L6N 56938\n6L6O 56939\n6L6P 56940\n6L6Q 56941\n6L6R 56942\n6L6T 56943\n6L6U 56944\n6L6V 56945\n6L6W 56946\n6L6X 56947\n6L6Y 56948\n6L6Z 56949\n6L6a 56950\n6L6b 56951\n6L6c 56952\n6L6e 56953\n6L6f 56954\n6L6j 56955\n6L6m 56956\n6L6o 56957\n6L6p 56958\n6L6r 56959\n6L6t 56960\n6L6u 56961\n6L6v 56962\n6L6w 56963\n6L6x 56964\n6L6y 56965\n6L63 56966\n6L65 56967\n6L66 56968\n6L67 56969\n6L68 56970\n6L69 56971\n6L6+ 56972\n6L6/ 56973\n6L+B 56974\n6L+C 56975\n6L+E 56976\n6L+F 56977\n6L+H 56978\n6L+I 56979\n6L+O 56980\n6L+Q 56981\n6L+R 56982\n6L+T 56983\n6L+U 56984\n6L+V 56985\n6L+Y 56986\n6L+Z 56987\n6L+a 56988\n6L+b 56989\n6L+c 56990\n6L+d 56991\n6L+e 56992\n6L+f 56993\n6L+g 56994\n6L+i 56995\n6L+k 56996\n6L+l 56997\n6L+m 56998\n6L+o 56999\n6L+p 57000\n6L+q 57001\n6L+r 57002\n6L+t 57003\n6L+u 57004\n6L+w 57005\n6L+z 57006\n6L+0 57007\n6L+3 57008\n6L+4 57009\n6L+5 57010\n6L+9 57011\n6YCA 57012\n6YCB 57013\n6YCC 57014\n6YCD 57015\n6YCE 57016\n6YCF 57017\n6YCG 57018\n6YCJ 57019\n6YCK 57020\n6YCL 57021\n6YCN 57022\n6YCP 57023\n6YCQ 57024\n6YCR 57025\n6YCS 57026\n6YCT 57027\n6YCU 57028\n6YCV 57029\n6YCW 57030\n6YCX 57031\n6YCZ 57032\n6YCa 57033\n6YCb 57034\n6YCd 57035\n6YCe 57036\n6YCf 57037\n6YCg 57038\n6YCh 57039\n6YCi 57040\n6YCj 57041\n6YCm 57042\n6YCu 57043\n6YCv 57044\n6YCx 57045\n6YCy 57046\n6YC1 57047\n6YC2 57048\n6YC4 57049\n6YC7 57050\n6YC8 57051\n6YC+ 57052\n6YGB 57053\n6YGC 57054\n6YGE 57055\n6YGF 57056\n6YGH 57057\n6YGJ 57058\n6YGK 57059\n6YGL 57060\n6YGN 57061\n6YGO 57062\n6YGP 57063\n6YGQ 57064\n6YGR 57065\n6YGS 57066\n6YGT 57067\n6YGU 57068\n6YGV 57069\n6YGW 57070\n6YGX 57071\n6YGY 57072\n6YGZ 57073\n6YGb 57074\n6YGc 57075\n6YGe 57076\n6YGg 57077\n6YGh 57078\n6YGi 57079\n6YGj 57080\n6YGl 57081\n6YGo 57082\n6YGp 57083\n6YGt 57084\n6YGu 57085\n6YGv 57086\n6YGy 57087\n6YG0 57088\n6YG1 57089\n6YG3 57090\n6YG4 57091\n6YG5 57092\n6YG6 57093\n6YG8 57094\n6YG9 57095\n6YG/ 57096\n6YKA 57097\n6YKB 57098\n6YKC 57099\n6YKD 57100\n6YKE 57101\n6YKF 57102\n6YKH 57103\n6YKI 57104\n6YKJ 57105\n6YKK 57106\n6YKL 57107\n6YKP 57108\n6YKR 57109\n6YKT 57110\n6YKV 57111\n6YKX 57112\n6YKY 57113\n6YKZ 57114\n6YKb 57115\n6YKd 57116\n6YKg 57117\n6YKh 57118\n6YKi 57119\n6YKj 57120\n6YKm 57121\n6YKo 57122\n6YKq 57123\n6YKs 57124\n6YKu 57125\n6YKv 57126\n6YKw 57127\n6YKx 57128\n6YKz 57129\n6YK0 57130\n6YK1 57131\n6YK2 57132\n6YK4 57133\n6YK5 57134\n6YK6 57135\n6YK7 57136\n6YK9 57137\n6YK+ 57138\n6YOB 57139\n6YOD 57140\n6YOE 57141\n6YOF 57142\n6YOH 57143\n6YOK 57144\n6YOO 57145\n6YOP 57146\n6YOQ 57147\n6YOR 57148\n6YOT 57149\n6YOV 57150\n6YOb 57151\n6YOc 57152\n6YOd 57153\n6YOe 57154\n6YOh 57155\n6YOi 57156\n6YOk 57157\n6YOm 57158\n6YOn 57159\n6YOo 57160\n6YOr 57161\n6YOt 57162\n6YOv 57163\n6YO0 57164\n6YO1 57165\n6YO3 57166\n6YO4 57167\n6YO9 57168\n6YO+ 57169\n6YO/ 57170\n6YSC 57171\n6YSE 57172\n6YSF 57173\n6YSJ 57174\n6YSP 57175\n6YSS 57176\n6YSY 57177\n6YSZ 57178\n6YSa 57179\n6YSc 57180\n6YSe 57181\n6YSg 57182\n6YSi 57183\n6YSj 57184\n6YSn 57185\n6YSp 57186\n6YSr 57187\n6YSt 57188\n6YSu 57189\n6YSv 57190\n6YSw 57191\n6YSx 57192\n6YSy 57193\n6YS6 57194\n6YWG 57195\n6YWJ 57196\n6YWK 57197\n6YWL 57198\n6YWM 57199\n6YWN 57200\n6YWO 57201\n6YWQ 57202\n6YWS 57203\n6YWU 57204\n6YWX 57205\n6YWY 57206\n6YWa 57207\n6YWd 57208\n6YWe 57209\n6YWh 57210\n6YWi 57211\n6YWj 57212\n6YWk 57213\n6YWl 57214\n6YWp 57215\n6YWq 57216\n6YWr 57217\n6YWs 57218\n6YWu 57219\n6YWv 57220\n6YWw 57221\n6YWx 57222\n6YW1 57223\n6YW2 57224\n6YW3 57225\n6YW4 57226\n6YW5 57227\n6YW6 57228\n6YW9 57229\n6YW/ 57230\n6YaC 57231\n6YaF 57232\n6YaH 57233\n6YaJ 57234\n6YaL 57235\n6YaM 57236\n6YaN 57237\n6YaQ 57238\n6YaS 57239\n6YaX 57240\n6Yaa 57241\n6Yab 57242\n6Yac 57243\n6Yae 57244\n6Yai 57245\n6Yaj 57246\n6Yak 57247\n6Yaq 57248\n6Yar 57249\n6Yas 57250\n6Yat 57251\n6Yau 57252\n6Yav 57253\n6Yay 57254\n6Ya0 57255\n6Ya1 57256\n6Ya4 57257\n6Ya6 57258\n6YeA 57259\n6YeB 57260\n6YeG 57261\n6YeH 57262\n6YeI 57263\n6YeJ 57264\n6YeK 57265\n6YeL 57266\n6YeM 57267\n6YeN 57268\n6YeO 57269\n6YeP 57270\n6YeQ 57271\n6YeR 57272\n6YeY 57273\n6Yeb 57274\n6Yec 57275\n6Yed 57276\n6Yeh 57277\n6Yej 57278\n6Yem 57279\n6Yen 57280\n6Yet 57281\n6Ye1 57282\n6Ye2 57283\n6Ye8 57284\n6Ye/ 57285\n6YiH 57286\n6YiN 57287\n6YiO 57288\n6YiR 57289\n6YiU 57290\n6YiV 57291\n6Yie 57292\n6Yip 57293\n6Yiq 57294\n6Yiz 57295\n6Yi0 57296\n6Yi3 57297\n6Yi/ 57298\n6YmE 57299\n6YmI 57300\n6YmJ 57301\n6YmL 57302\n6YmP 57303\n6YmX 57304\n6Ymb 57305\n6Yme 57306\n6Ymi 57307\n6Ymk 57308\n6Ymm 57309\n6Ymx 57310\n6Ym0 57311\n6Ym+ 57312\n6YqA 57313\n6YqD 57314\n6YqF 57315\n6YqR 57316\n6YqT 57317\n6YqV 57318\n6YqW 57319\n6YqY 57320\n6Yqa 57321\n6Yqb 57322\n6Yqc 57323\n6Yqt 57324\n6Yqu 57325\n6Yqz 57326\n6Yq2 57327\n6Yq3 57328\n6Yq5 57329\n6YuG 57330\n6YuI 57331\n6YuP 57332\n6YuQ 57333\n6YuS 57334\n6Yuk 57335\n6Yup 57336\n6Yuq 57337\n6Yut 57338\n6Yuy 57339\n6Yuz 57340\n6Yu4 57341\n6Yu5 57342\n6Yu6 57343\n6Yu8 57344\n6YyE 57345\n6YyG 57346\n6YyP 57347\n6YyQ 57348\n6YyY 57349\n6YyZ 57350\n6Yya 57351\n6Yye 57352\n6Yyg 57353\n6Yyi 57354\n6Yyj 57355\n6Yym 57356\n6Yyo 57357\n6Yyr 57358\n6Yys 57359\n6Yyu 57360\n6Yyv 57361\n6Yyy 57362\n6Yy1 57363\n6Yy2 57364\n6Yy6 57365\n6Yy+ 57366\n6Y2J 57367\n6Y2K 57368\n6Y2L 57369\n6Y2N 57370\n6Y2S 57371\n6Y2U 57372\n6Y2b 57373\n6Y2c 57374\n6Y2l 57375\n6Y2q 57376\n6Y2s 57377\n6Y2u 57378\n6Y21 57379\n6Y28 57380\n6Y2+ 57381\n6Y6J 57382\n6Y6K 57383\n6Y6M 57384\n6Y6P 57385\n6Y6U 57386\n6Y6W 57387\n6Y6X 57388\n6Y6a 57389\n6Y6b 57390\n6Y6n 57391\n6Y6s 57392\n6Y6t 57393\n6Y6u 57394\n6Y6w 57395\n6Y64 57396\n6Y65 57397\n6Y+D 57398\n6Y+I 57399\n6Y+K 57400\n6Y+Q 57401\n6Y+R 57402\n6Y+W 57403\n6Y+X 57404\n6Y+Y 57405\n6Y+d 57406\n6Y+f 57407\n6Y+h 57408\n6Y+k 57409\n6Y+l 57410\n6Y+o 57411\n6ZCD 57412\n6ZCH 57413\n6ZCO 57414\n6ZCQ 57415\n6ZCU 57416\n6ZCY 57417\n6ZCZ 57418\n6ZCa 57419\n6ZCh 57420\n6ZCn 57421\n6ZCu 57422\n6ZCy 57423\n6ZC1 57424\n6ZC2 57425\n6ZC4 57426\n6ZC6 57427\n6ZGB 57428\n6ZGE 57429\n6ZGK 57430\n6ZGR 57431\n6ZGS 57432\n6ZGT 57433\n6ZGb 57434\n6ZGe 57435\n6ZGg 57436\n6ZGi 57437\n6ZGq 57438\n6ZGr 57439\n6ZGw 57440\n6ZGx 57441\n6ZGy 57442\n6ZG1 57443\n6ZG3 57444\n6ZG5 57445\n6ZG8 57446\n6ZG9 57447\n6ZG/ 57448\n6ZKH 57449\n6ZKI 57450\n6ZKJ 57451\n6ZKK 57452\n6ZKL 57453\n6ZKM 57454\n6ZKN 57455\n6ZKO 57456\n6ZKP 57457\n6ZKQ 57458\n6ZKS 57459\n6ZKT 57460\n6ZKU 57461\n6ZKV 57462\n6ZKX 57463\n6ZKY 57464\n6ZKZ 57465\n6ZKa 57466\n6ZKb 57467\n6ZKc 57468\n6ZKd 57469\n6ZKe 57470\n6ZKf 57471\n6ZKg 57472\n6ZKh 57473\n6ZKi 57474\n6ZKj 57475\n6ZKk 57476\n6ZKl 57477\n6ZKm 57478\n6ZKn 57479\n6ZKo 57480\n6ZKp 57481\n6ZKq 57482\n6ZKr 57483\n6ZKs 57484\n6ZKu 57485\n6ZKv 57486\n6ZKw 57487\n6ZKx 57488\n6ZKy 57489\n6ZKz 57490\n6ZK0 57491\n6ZK1 57492\n6ZK5 57493\n6ZK6 57494\n6ZK7 57495\n6ZK8 57496\n6ZK9 57497\n6ZK+ 57498\n6ZK/ 57499\n6ZOA 57500\n6ZOB 57501\n6ZOC 57502\n6ZOD 57503\n6ZOE 57504\n6ZOF 57505\n6ZOG 57506\n6ZOI 57507\n6ZOJ 57508\n6ZOK 57509\n6ZOL 57510\n6ZOM 57511\n6ZON 57512\n6ZOO 57513\n6ZOQ 57514\n6ZOR 57515\n6ZOS 57516\n6ZOT 57517\n6ZOW 57518\n6ZOX 57519\n6ZOZ 57520\n6ZOa 57521\n6ZOb 57522\n6ZOc 57523\n6ZOd 57524\n6ZOe 57525\n6ZOf 57526\n6ZOg 57527\n6ZOh 57528\n6ZOi 57529\n6ZOj 57530\n6ZOk 57531\n6ZOl 57532\n6ZOm 57533\n6ZOn 57534\n6ZOo 57535\n6ZOp 57536\n6ZOq 57537\n6ZOr 57538\n6ZOs 57539\n6ZOt 57540\n6ZOu 57541\n6ZOv 57542\n6ZOw 57543\n6ZOx 57544\n6ZOy 57545\n6ZOz 57546\n6ZO1 57547\n6ZO2 57548\n6ZO3 57549\n6ZO4 57550\n6ZO6 57551\n6ZO8 57552\n6ZO+ 57553\n6ZO/ 57554\n6ZSA 57555\n6ZSB 57556\n6ZSC 57557\n6ZSD 57558\n6ZSE 57559\n6ZSF 57560\n6ZSG 57561\n6ZSH 57562\n6ZSI 57563\n6ZSJ 57564\n6ZSK 57565\n6ZSL 57566\n6ZSM 57567\n6ZSN 57568\n6ZSP 57569\n6ZSQ 57570\n6ZSR 57571\n6ZSS 57572\n6ZSU 57573\n6ZSV 57574\n6ZSW 57575\n6ZSX 57576\n6ZSY 57577\n6ZSZ 57578\n6ZSa 57579\n6ZSb 57580\n6ZSc 57581\n6ZSd 57582\n6ZSe 57583\n6ZSf 57584\n6ZSh 57585\n6ZSi 57586\n6ZSj 57587\n6ZSk 57588\n6ZSl 57589\n6ZSm 57590\n6ZSo 57591\n6ZSp 57592\n6ZSr 57593\n6ZSs 57594\n6ZSt 57595\n6ZSu 57596\n6ZSv 57597\n6ZSw 57598\n6ZSx 57599\n6ZSy 57600\n6ZS0 57601\n6ZS1 57602\n6ZS2 57603\n6ZS3 57604\n6ZS4 57605\n6ZS5 57606\n6ZS6 57607\n6ZS7 57608\n6ZWA 57609\n6ZWB 57610\n6ZWC 57611\n6ZWF 57612\n6ZWG 57613\n6ZWH 57614\n6ZWJ 57615\n6ZWK 57616\n6ZWL 57617\n6ZWM 57618\n6ZWN 57619\n6ZWP 57620\n6ZWQ 57621\n6ZWR 57622\n6ZWS 57623\n6ZWU 57624\n6ZWV 57625\n6ZWW 57626\n6ZWX 57627\n6ZWY 57628\n6ZWb 57629\n6ZWc 57630\n6ZWd 57631\n6ZWe 57632\n6ZWf 57633\n6ZWg 57634\n6ZWh 57635\n6ZWi 57636\n6ZWj 57637\n6ZWl 57638\n6ZWn 57639\n6ZWp 57640\n6ZWq 57641\n6ZWr 57642\n6ZWs 57643\n6ZWt 57644\n6ZWv 57645\n6ZWw 57646\n6ZWx 57647\n6ZWy 57648\n6ZWz 57649\n6ZW1 57650\n6ZW2 57651\n6ZW3 57652\n6ZW/ 57653\n6ZaA 57654\n6ZaC 57655\n6ZaD 57656\n6ZaH 57657\n6ZaJ 57658\n6ZaK 57659\n6ZaL 57660\n6ZaO 57661\n6ZaP 57662\n6ZaR 57663\n6ZaS 57664\n6ZaT 57665\n6ZaU 57666\n6ZaW 57667\n6ZaY 57668\n6Zaf 57669\n6Zai 57670\n6Zaj 57671\n6Zak 57672\n6Zal 57673\n6Zam 57674\n6Zao 57675\n6Zat 57676\n6Zax 57677\n6Zay 57678\n6Za5 57679\n6Za7 57680\n6Za8 57681\n6Za+ 57682\n6ZeD 57683\n6ZeG 57684\n6ZeH 57685\n6ZeK 57686\n6ZeM 57687\n6ZeN 57688\n6ZeV 57689\n6ZeW 57690\n6ZeY 57691\n6Zec 57692\n6Zeh 57693\n6Zei 57694\n6Zel 57695\n6Zeo 57696\n6Zep 57697\n6Zeq 57698\n6Zer 57699\n6Zet 57700\n6Zeu 57701\n6Zev 57702\n6Zew 57703\n6Zex 57704\n6Zey 57705\n6Zez 57706\n6Ze0 57707\n6Ze1 57708\n6Ze3 57709\n6Ze4 57710\n6Ze5 57711\n6Ze6 57712\n6Ze7 57713\n6Ze8 57714\n6Ze9 57715\n6Ze+ 57716\n6Ze/ 57717\n6ZiA 57718\n6ZiB 57719\n6ZiC 57720\n6ZiD 57721\n6ZiE 57722\n6ZiF 57723\n6ZiG 57724\n6ZiH 57725\n6ZiI 57726\n6ZiJ 57727\n6ZiK 57728\n6ZiL 57729\n6ZiM 57730\n6ZiN 57731\n6ZiO 57732\n6ZiP 57733\n6ZiQ 57734\n6ZiR 57735\n6ZiS 57736\n6ZiU 57737\n6ZiV 57738\n6ZiW 57739\n6ZiX 57740\n6ZiZ 57741\n6Zia 57742\n6Zic 57743\n6Zid 57744\n6Zif 57745\n6Zih 57746\n6Zio 57747\n6Ziq 57748\n6Zis 57749\n6Ziu 57750\n6Zix 57751\n6Ziy 57752\n6Ziz 57753\n6Zi0 57754\n6Zi1 57755\n6Zi2 57756\n6Zi7 57757\n6Zi8 57758\n6Zi9 57759\n6Zi/ 57760\n6ZmA 57761\n6ZmC 57762\n6ZmE 57763\n6ZmF 57764\n6ZmG 57765\n6ZmH 57766\n6ZmI 57767\n6ZmJ 57768\n6ZmL 57769\n6ZmM 57770\n6ZmN 57771\n6ZmQ 57772\n6ZmU 57773\n6ZmV 57774\n6Zmb 57775\n6Zmc 57776\n6Zmd 57777\n6Zme 57778\n6Zmf 57779\n6Zmh 57780\n6Zmi 57781\n6Zmj 57782\n6Zmk 57783\n6Zml 57784\n6Zmm 57785\n6Zmn 57786\n6Zmo 57787\n6Zmp 57788\n6Zmq 57789\n6Zms 57790\n6Zmw 57791\n6Zmy 57792\n6Zmz 57793\n6Zm1 57794\n6Zm2 57795\n6Zm3 57796\n6Zm4 57797\n6Zm6 57798\n6Zm9 57799\n6ZqF 57800\n6ZqG 57801\n6ZqI 57802\n6ZqK 57803\n6ZqL 57804\n6ZqN 57805\n6ZqO 57806\n6ZqP 57807\n6ZqQ 57808\n6ZqU 57809\n6ZqV 57810\n6ZqX 57811\n6ZqY 57812\n6ZqZ 57813\n6Zqb 57814\n6Zqc 57815\n6Zqg 57816\n6Zqj 57817\n6Zqn 57818\n6Zqo 57819\n6Zqq 57820\n6Zqw 57821\n6Zqx 57822\n6Zqy 57823\n6Zqz 57824\n6Zq2 57825\n6Zq3 57826\n6Zq4 57827\n6Zq5 57828\n6Zq7 57829\n6Zq8 57830\n6Zq9 57831\n6Zq+ 57832\n6ZuA 57833\n6ZuB 57834\n6ZuE 57835\n6ZuF 57836\n6ZuG 57837\n6ZuH 57838\n6ZuJ 57839\n6ZuL 57840\n6ZuM 57841\n6ZuN 57842\n6ZuO 57843\n6ZuP 57844\n6ZuR 57845\n6ZuS 57846\n6ZuV 57847\n6ZuW 57848\n6ZuZ 57849\n6Zub 57850\n6Zuc 57851\n6Zue 57852\n6Zug 57853\n6Zui 57854\n6Zuj 57855\n6Zuo 57856\n6Zup 57857\n6Zuq 57858\n6Zur 57859\n6Zuv 57860\n6Zuw 57861\n6Zux 57862\n6Zuy 57863\n6Zuz 57864\n6Zu2 57865\n6Zu3 57866\n6Zu5 57867\n6Zu7 57868\n6Zu+ 57869\n6ZyA 57870\n6ZyB 57871\n6ZyE 57872\n6ZyG 57873\n6ZyH 57874\n6ZyI 57875\n6ZyJ 57876\n6ZyK 57877\n6ZyN 57878\n6ZyO 57879\n6ZyP 57880\n6ZyR 57881\n6ZyT 57882\n6ZyW 57883\n6ZyZ 57884\n6Zyc 57885\n6Zye 57886\n6Zyn 57887\n6Zyq 57888\n6Zyr 57889\n6Zyt 57890\n6Zyw 57891\n6Zyy 57892\n6Zy4 57893\n6Zy5 57894\n6Zy9 57895\n6Zy+ 57896\n6Z2C 57897\n6Z2E 57898\n6Z2G 57899\n6Z2I 57900\n6Z2J 57901\n6Z2R 57902\n6Z2S 57903\n6Z2T 57904\n6Z2W 57905\n6Z2Z 57906\n6Z2a 57907\n6Z2b 57908\n6Z2c 57909\n6Z2e 57910\n6Z2g 57911\n6Z2h 57912\n6Z2i 57913\n6Z2l 57914\n6Z2m 57915\n6Z2o 57916\n6Z2p 57917\n6Z2r 57918\n6Z2t 57919\n6Z2x 57920\n6Z2z 57921\n6Z20 57922\n6Z22 57923\n6Z24 57924\n6Z25 57925\n6Z26 57926\n6Z28 57927\n6Z6B 57928\n6Z6E 57929\n6Z6F 57930\n6Z6G 57931\n6Z6L 57932\n6Z6N 57933\n6Z6P 57934\n6Z6Q 57935\n6Z6R 57936\n6Z6Y 57937\n6Z6c 57938\n6Z6g 57939\n6Z6j 57940\n6Z6l 57941\n6Z6m 57942\n6Z6n 57943\n6Z6o 57944\n6Z6r 57945\n6Z6s 57946\n6Z6t 57947\n6Z60 57948\n6Z62 57949\n6Z+C 57950\n6Z+D 57951\n6Z+L 57952\n6Z+M 57953\n6Z+T 57954\n6Z+Y 57955\n6Z+c 57956\n6Z+h 57957\n6Z+m 57958\n6Z+n 57959\n6Z+p 57960\n6Z+q 57961\n6Z+r 57962\n6Z+s 57963\n6Z+t 57964\n6Z+u 57965\n6Z+y 57966\n6Z+z 57967\n6Z+1 57968\n6Z+2 57969\n6Z+7 57970\n6Z+/ 57971\n6aCB 57972\n6aCC 57973\n6aCD 57974\n6aCF 57975\n6aCG 57976\n6aCI 57977\n6aCM 57978\n6aCP 57979\n6aCQ 57980\n6aCR 57981\n6aCS 57982\n6aCT 57983\n6aCX 57984\n6aCY 57985\n6aCa 57986\n6aCg 57987\n6aCh 57988\n6aCk 57989\n6aCr 57990\n6aCs 57991\n6aCt 57992\n6aCw 57993\n6aC0 57994\n6aC3 57995\n6aC4 57996\n6aC5 57997\n6aC7 57998\n6aC8 57999\n6aC9 58000\n6aGG 58001\n6aGL 58002\n6aGM 58003\n6aGN 58004\n6aGO 58005\n6aGP 58006\n6aGS 58007\n6aGU 58008\n6aGV 58009\n6aGX 58010\n6aGY 58011\n6aGb 58012\n6aGe 58013\n6aGn 58014\n6aGr 58015\n6aGs 58016\n6aGv 58017\n6aGw 58018\n6aGx 58019\n6aGz 58020\n6aG0 58021\n6aG1 58022\n6aG2 58023\n6aG3 58024\n6aG4 58025\n6aG5 58026\n6aG6 58027\n6aG7 58028\n6aG8 58029\n6aG9 58030\n6aG+ 58031\n6aG/ 58032\n6aKA 58033\n6aKB 58034\n6aKC 58035\n6aKE 58036\n6aKF 58037\n6aKG 58038\n6aKH 58039\n6aKI 58040\n6aKJ 58041\n6aKK 58042\n6aKL 58043\n6aKM 58044\n6aKN 58045\n6aKO 58046\n6aKP 58047\n6aKQ 58048\n6aKR 58049\n6aKT 58050\n6aKU 58051\n6aKW 58052\n6aKX 58053\n6aKY 58054\n6aKZ 58055\n6aKa 58056\n6aKb 58057\n6aKc 58058\n6aKd 58059\n6aKe 58060\n6aKf 58061\n6aKg 58062\n6aKh 58063\n6aKi 58064\n6aKk 58065\n6aKm 58066\n6aKn 58067\n6aKo 58068\n6aKq 58069\n6aKv 58070\n6aKx 58071\n6aK2 58072\n6aOE 58073\n6aOG 58074\n6aOK 58075\n6aOO 58076\n6aOQ 58077\n6aOS 58078\n6aOT 58079\n6aOV 58080\n6aOW 58081\n6aOX 58082\n6aOY 58083\n6aOZ 58084\n6aOa 58085\n6aOb 58086\n6aOe 58087\n6aOf 58088\n6aOi 58089\n6aOn 58090\n6aOo 58091\n6aOp 58092\n6aOq 58093\n6aOr 58094\n6aOt 58095\n6aOv 58096\n6aOy 58097\n6aO0 58098\n6aO8 58099\n6aO9 58100\n6aO+ 58101\n6aSD 58102\n6aSF 58103\n6aSJ 58104\n6aSK 58105\n6aSM 58106\n6aSN 58107\n6aSQ 58108\n6aSR 58109\n6aSS 58110\n6aST 58111\n6aSY 58112\n6aSa 58113\n6aSd 58114\n6aSe 58115\n6aSg 58116\n6aSh 58117\n6aSo 58118\n6aSs 58119\n6aSu 58120\n6aS1 58121\n6aS4 58122\n6aWC 58123\n6aWF 58124\n6aWJ 58125\n6aWL 58126\n6aWM 58127\n6aWQ 58128\n6aWR 58129\n6aWS 58130\n6aWU 58131\n6aWV 58132\n6aWX 58133\n6aWk 58134\n6aWl 58135\n6aWn 58136\n6aWo 58137\n6aWq 58138\n6aWs 58139\n6aWt 58140\n6aWu 58141\n6aWv 58142\n6aWw 58143\n6aWx 58144\n6aWy 58145\n6aW0 58146\n6aW1 58147\n6aW2 58148\n6aW3 58149\n6aW4 58150\n6aW5 58151\n6aW6 58152\n6aW8 58153\n6aW9 58154\n6aW/ 58155\n6aaA 58156\n6aaB 58157\n6aaD 58158\n6aaE 58159\n6aaF 58160\n6aaG 58161\n6aaH 58162\n6aaI 58163\n6aaK 58164\n6aaL 58165\n6aaN 58166\n6aaP 58167\n6aaQ 58168\n6aaR 58169\n6aaS 58170\n6aaT 58171\n6aaU 58172\n6aaV 58173\n6aaW 58174\n6aaX 58175\n6aaY 58176\n6aaZ 58177\n6aal 58178\n6aao 58179\n6aas 58180\n6aat 58181\n6aau 58182\n6aaz 58183\n6aa0 58184\n6aa/ 58185\n6aeB 58186\n6aeD 58187\n6aeE 58188\n6aeF 58189\n6aeG 58190\n6aeI 58191\n6aeQ 58192\n6aeR 58193\n6aeS 58194\n6aeV 58195\n6aeY 58196\n6aeb 58197\n6aed 58198\n6aef 58199\n6aei 58200\n6aet 58201\n6aeu 58202\n6aex 58203\n6ae4 58204\n6ae7 58205\n6ae/ 58206\n6aiB 58207\n6aiO 58208\n6aiP 58209\n6aiR 58210\n6aiS 58211\n6aiT 58212\n6aiV 58213\n6aiW 58214\n6aiZ 58215\n6aig 58216\n6aio 58217\n6aiu 58218\n6aiw 58219\n6ai3 58220\n6ai+ 58221\n6amA 58222\n6amD 58223\n6amF 58224\n6amN 58225\n6amV 58226\n6amX 58227\n6ama 58228\n6amb 58229\n6amf 58230\n6ami 58231\n6aml 58232\n6amp 58233\n6amq 58234\n6amr 58235\n6ams 58236\n6amt 58237\n6amu 58238\n6amv 58239\n6amw 58240\n6amx 58241\n6amz 58242\n6am0 58243\n6am2 58244\n6am3 58245\n6am4 58246\n6am5 58247\n6am6 58248\n6am7 58249\n6am8 58250\n6am9 58251\n6am+ 58252\n6am/ 58253\n6aqA 58254\n6aqB 58255\n6aqC 58256\n6aqE 58257\n6aqF 58258\n6aqG 58259\n6aqH 58260\n6aqI 58261\n6aqK 58262\n6aqL 58263\n6aqM 58264\n6aqN 58265\n6aqO 58266\n6aqP 58267\n6aqQ 58268\n6aqR 58269\n6aqS 58270\n6aqT 58271\n6aqV 58272\n6aqW 58273\n6aqX 58274\n6aqY 58275\n6aqa 58276\n6aqb 58277\n6aqc 58278\n6aqd 58279\n6aqe 58280\n6aqf 58281\n6aqg 58282\n6aqh 58283\n6aqi 58284\n6aqk 58285\n6aql 58286\n6aqn 58287\n6aqo 58288\n6aqv 58289\n6aqw 58290\n6aq2 58291\n6aq3 58292\n6aq4 58293\n6aq6 58294\n6aq8 58295\n6auA 58296\n6auB 58297\n6auC 58298\n6auD 58299\n6auE 58300\n6auF 58301\n6auI 58302\n6auL 58303\n6auM 58304\n6auO 58305\n6auP 58306\n6auR 58307\n6auS 58308\n6auT 58309\n6auU 58310\n6auY 58311\n6auZ 58312\n6auf 58313\n6auh 58314\n6aui 58315\n6auj 58316\n6aum 58317\n6auq 58318\n6aur 58319\n6aut 58320\n6auu 58321\n6auv 58322\n6aux 58323\n6au0 58324\n6au3 58325\n6au5 58326\n6au7 58327\n6au9 58328\n6ayD 58329\n6ayE 58330\n6ayG 58331\n6ayN 58332\n6ayP 58333\n6ayQ 58334\n6ayT 58335\n6ayY 58336\n6aya 58337\n6ayf 58338\n6ayi 58339\n6ayj 58340\n6ayl 58341\n6ayn 58342\n6ayo 58343\n6ayp 58344\n6ayu 58345\n6ayv 58346\n6ayx 58347\n6ayy 58348\n6ay2 58349\n6ay7 58350\n6ay8 58351\n6a2B 58352\n6a2C 58353\n6a2D 58354\n6a2E 58355\n6a2F 58356\n6a2H 58357\n6a2I 58358\n6a2J 58359\n6a2N 58360\n6a2O 58361\n6a2P 58362\n6a2R 58363\n6a2U 58364\n6a2Y 58365\n6a2a 58366\n6a2f 58367\n6a2j 58368\n6a2m 58369\n6a2s 58370\n6a2v 58371\n6a2z 58372\n6a20 58373\n6a21 58374\n6a6A 58375\n6a6D 58376\n6a6E 58377\n6a6J 58378\n6a6K 58379\n6a6L 58380\n6a6O 58381\n6a6P 58382\n6a6Q 58383\n6a6R 58384\n6a6S 58385\n6a6T 58386\n6a6U 58387\n6a6W 58388\n6a6X 58389\n6a6f 58390\n6a6g 58391\n6a6n 58392\n6a6o 58393\n6a6q 58394\n6a6r 58395\n6a6t 58396\n6a6u 58397\n6a6x 58398\n6a6y 58399\n6a60 58400\n6a64 58401\n6a65 58402\n6a+A 58403\n6a+G 58404\n6a+H 58405\n6a+J 58406\n6a+K 58407\n6a+O 58408\n6a+P 58409\n6a+R 58410\n6a+S 58411\n6a+U 58412\n6a+W 58413\n6a+b 58414\n6a+h 58415\n6a+i 58416\n6a+j 58417\n6a+l 58418\n6a+n 58419\n6a+o 58420\n6a+q 58421\n6a+w 58422\n6a+x 58423\n6a+y 58424\n6a+z 58425\n6a+1 58426\n6a+3 58427\n6a+9 58428\n6bCE 58429\n6bCG 58430\n6bCI 58431\n6bCJ 58432\n6bCK 58433\n6bCM 58434\n6bCN 58435\n6bCQ 58436\n6bCR 58437\n6bCS 58438\n6bCT 58439\n6bCU 58440\n6bCV 58441\n6bCW 58442\n6bCY 58443\n6bCZ 58444\n6bCa 58445\n6bCh 58446\n6bCk 58447\n6bCl 58448\n6bCn 58449\n6bCt 58450\n6bCu 58451\n6bCv 58452\n6bCw 58453\n6bCy 58454\n6bC2 58455\n6bC5 58456\n6bC6 58457\n6bC7 58458\n6bC+ 58459\n6bGA 58460\n6bGF 58461\n6bGG 58462\n6bGH 58463\n6bGI 58464\n6bGP 58465\n6bGS 58466\n6bGT 58467\n6bGX 58468\n6bGY 58469\n6bGa 58470\n6bGd 58471\n6bGg 58472\n6bGn 58473\n6bGu 58474\n6bGw 58475\n6bG1 58476\n6bG2 58477\n6bG4 58478\n6bG8 58479\n6bG/ 58480\n6bKA 58481\n6bKB 58482\n6bKC 58483\n6bKF 58484\n6bKH 58485\n6bKI 58486\n6bKK 58487\n6bKL 58488\n6bKM 58489\n6bKN 58490\n6bKQ 58491\n6bKR 58492\n6bKS 58493\n6bKU 58494\n6bKW 58495\n6bKa 58496\n6bKb 58497\n6bKc 58498\n6bKe 58499\n6bKf 58500\n6bKg 58501\n6bKh 58502\n6bKi 58503\n6bKj 58504\n6bKk 58505\n6bKl 58506\n6bKm 58507\n6bKn 58508\n6bKo 58509\n6bKp 58510\n6bKr 58511\n6bKt 58512\n6bKu 58513\n6bKx 58514\n6bKy 58515\n6bKz 58516\n6bK0 58517\n6bK1 58518\n6bK2 58519\n6bK3 58520\n6bK4 58521\n6bK7 58522\n6bK8 58523\n6bK9 58524\n6bOA 58525\n6bOD 58526\n6bOE 58527\n6bOF 58528\n6bOH 58529\n6bOJ 58530\n6bOK 58531\n6bOM 58532\n6bON 58533\n6bOO 58534\n6bOP 58535\n6bOQ 58536\n6bOU 58537\n6bOV 58538\n6bOW 58539\n6bOX 58540\n6bOZ 58541\n6bOc 58542\n6bOd 58543\n6bOe 58544\n6bOf 58545\n6bOj 58546\n6bOl 58547\n6bOn 58548\n6bOp 58549\n6bOr 58550\n6bOw 58551\n6bOz 58552\n6bO0 58553\n6bO2 58554\n6bSC 58555\n6bSD 58556\n6bSG 58557\n6bSH 58558\n6bSI 58559\n6bSJ 58560\n6bSL 58561\n6bSO 58562\n6bSQ 58563\n6bSS 58564\n6bSb 58565\n6bSe 58566\n6bSf 58567\n6bSj 58568\n6bSm 58569\n6bSo 58570\n6bSr 58571\n6bSs 58572\n6bSy 58573\n6bS7 58574\n6bS+ 58575\n6bS/ 58576\n6bWA 58577\n6bWE 58578\n6bWG 58579\n6bWH 58580\n6bWQ 58581\n6bWR 58582\n6bWZ 58583\n6bWc 58584\n6bWd 58585\n6bWe 58586\n6bWf 58587\n6bWg 58588\n6bWh 58589\n6bWk 58590\n6bWr 58591\n6bWs 58592\n6bWv 58593\n6bWw 58594\n6bWy 58595\n6bW6 58596\n6bW8 58597\n6baH 58598\n6baJ 58599\n6baP 58600\n6baS 58601\n6baW 58602\n6baX 58603\n6baa 58604\n6bah 58605\n6bak 58606\n6bap 58607\n6bar 58608\n6bav 58609\n6bay 58610\n6ba0 58611\n6ba4 58612\n6ba6 58613\n6ba7 58614\n6beB 58615\n6beC 58616\n6beD 58617\n6beG 58618\n6beT 58619\n6beZ 58620\n6bea 58621\n6beg 58622\n6bem 58623\n6bet 58624\n6bev 58625\n6bey 58626\n6be4 58627\n6be5 58628\n6be6 58629\n6be9 58630\n6biC 58631\n6biZ 58632\n6bia 58633\n6bib 58634\n6bie 58635\n6bif 58636\n6big 58637\n6bih 58638\n6bii 58639\n6bij 58640\n6bil 58641\n6bim 58642\n6bio 58643\n6bip 58644\n6biq 58645\n6bir 58646\n6bis 58647\n6bit 58648\n6biu 58649\n6biv 58650\n6biw 58651\n6bix 58652\n6biz 58653\n6bi1 58654\n6bi2 58655\n6bi3 58656\n6bi4 58657\n6bi5 58658\n6bi9 58659\n6bi+ 58660\n6bi/ 58661\n6bmA 58662\n6bmB 58663\n6bmC 58664\n6bmD 58665\n6bmE 58666\n6bmF 58667\n6bmG 58668\n6bmH 58669\n6bmI 58670\n6bmJ 58671\n6bmK 58672\n6bmL 58673\n6bmM 58674\n6bmO 58675\n6bmP 58676\n6bmR 58677\n6bmV 58678\n6bmW 58679\n6bmX 58680\n6bmY 58681\n6bma 58682\n6bmc 58683\n6bme 58684\n6bmj 58685\n6bmk 58686\n6bmm 58687\n6bmn 58688\n6bmo 58689\n6bmp 58690\n6bmq 58691\n6bmr 58692\n6bms 58693\n6bmt 58694\n6bmu 58695\n6bmv 58696\n6bmw 58697\n6bmx 58698\n6bmz 58699\n6bm1 58700\n6bm4 58701\n6bm5 58702\n6bm9 58703\n6bm+ 58704\n6bm/ 58705\n6bqB 58706\n6bqC 58707\n6bqH 58708\n6bqI 58709\n6bqL 58710\n6bqS 58711\n6bqT 58712\n6bqV 58713\n6bqX 58714\n6bqd 58715\n6bqe 58716\n6bqf 58717\n6bql 58718\n6bqm 58719\n6bqp 58720\n6bqq 58721\n6bqt 58722\n6bq0 58723\n6bq1 58724\n6bq4 58725\n6bq5 58726\n6bq6 58727\n6bq7 58728\n6bq8 58729\n6bq9 58730\n6bq+ 58731\n6bq/ 58732\n6buD 58733\n6buE 58734\n6buJ 58735\n6buM 58736\n6buN 58737\n6buO 58738\n6buP 58739\n6buQ 58740\n6buR 58741\n6buS 58742\n6buU 58743\n6buY 58744\n6buZ 58745\n6bub 58746\n6buc 58747\n6bud 58748\n6bue 58749\n6buf 58750\n6bug 58751\n6buh 58752\n6bui 58753\n6bul 58754\n6bun 58755\n6buo 58756\n6bup 58757\n6buv 58758\n6bu0 58759\n6bu5 58760\n6bu7 58761\n6bu8 58762\n6bu9 58763\n6byH 58764\n6byI 58765\n6byL 58766\n6byN 58767\n6byO 58768\n6byQ 58769\n6byT 58770\n6byV 58771\n6byZ 58772\n6byg 58773\n6byh 58774\n6byi 58775\n6byp 58776\n6byq 58777\n6bys 58778\n6byv 58779\n6byx 58780\n6by5 58781\n6by7 58782\n6by+ 58783\n6b2B 58784\n6b2J 58785\n6b2K 58786\n6b2L 58787\n6b2O 58788\n6b2Q 58789\n6b2R 58790\n6b2S 58791\n6b2U 58792\n6b2f 58793\n6b2h 58794\n6b2i 58795\n6b2j 58796\n6b2m 58797\n6b2n 58798\n6b2q 58799\n6b2s 58800\n6b2y 58801\n6b23 58802\n6b2/ 58803\n6b6D 58804\n6b6E 58805\n6b6F 58806\n6b6H 58807\n6b6I 58808\n6b6J 58809\n6b6K 58810\n6b6L 58811\n6b6M 58812\n6b6N 58813\n6b6Q 58814\n6b6V 58815\n6b6Z 58816\n6b6a 58817\n6b6b 58818\n6b6c 58819\n6b6d 58820\n6b6f 58821\n6b6g 58822\n6b6i 58823\n77yB 58824\n77yI 58825\n77yJ 58826\n77yM 58827\n77yN 58828\n77ya 58829\n77yb 58830\n77yf 58831\n772Y 58832\n772Z 58833\n8KCx 58834\n8KCxgQ== 58835\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/tokenizer/tokenizer.py",
    "content": "import base64\nimport os\nfrom functools import lru_cache\nfrom typing import Optional\nimport torch\nfrom transformers import AutoTokenizer\nfrom whisper.tokenizer import Tokenizer\n\nimport tiktoken\n\nLANGUAGES = {\n    \"en\": \"english\",\n    \"zh\": \"chinese\",\n    \"de\": \"german\",\n    \"es\": \"spanish\",\n    \"ru\": \"russian\",\n    \"ko\": \"korean\",\n    \"fr\": \"french\",\n    \"ja\": \"japanese\",\n    \"pt\": \"portuguese\",\n    \"tr\": \"turkish\",\n    \"pl\": \"polish\",\n    \"ca\": \"catalan\",\n    \"nl\": \"dutch\",\n    \"ar\": \"arabic\",\n    \"sv\": \"swedish\",\n    \"it\": \"italian\",\n    \"id\": \"indonesian\",\n    \"hi\": \"hindi\",\n    \"fi\": \"finnish\",\n    \"vi\": \"vietnamese\",\n    \"he\": \"hebrew\",\n    \"uk\": \"ukrainian\",\n    \"el\": \"greek\",\n    \"ms\": \"malay\",\n    \"cs\": \"czech\",\n    \"ro\": \"romanian\",\n    \"da\": \"danish\",\n    \"hu\": \"hungarian\",\n    \"ta\": \"tamil\",\n    \"no\": \"norwegian\",\n    \"th\": \"thai\",\n    \"ur\": \"urdu\",\n    \"hr\": \"croatian\",\n    \"bg\": \"bulgarian\",\n    \"lt\": \"lithuanian\",\n    \"la\": \"latin\",\n    \"mi\": \"maori\",\n    \"ml\": \"malayalam\",\n    \"cy\": \"welsh\",\n    \"sk\": \"slovak\",\n    \"te\": \"telugu\",\n    \"fa\": \"persian\",\n    \"lv\": \"latvian\",\n    \"bn\": \"bengali\",\n    \"sr\": \"serbian\",\n    \"az\": \"azerbaijani\",\n    \"sl\": \"slovenian\",\n    \"kn\": \"kannada\",\n    \"et\": \"estonian\",\n    \"mk\": \"macedonian\",\n    \"br\": \"breton\",\n    \"eu\": \"basque\",\n    \"is\": \"icelandic\",\n    \"hy\": \"armenian\",\n    \"ne\": \"nepali\",\n    \"mn\": \"mongolian\",\n    \"bs\": \"bosnian\",\n    \"kk\": \"kazakh\",\n    \"sq\": \"albanian\",\n    \"sw\": \"swahili\",\n    \"gl\": \"galician\",\n    \"mr\": \"marathi\",\n    \"pa\": \"punjabi\",\n    \"si\": \"sinhala\",\n    \"km\": \"khmer\",\n    \"sn\": \"shona\",\n    \"yo\": \"yoruba\",\n    \"so\": \"somali\",\n    \"af\": \"afrikaans\",\n    \"oc\": \"occitan\",\n    \"ka\": \"georgian\",\n    \"be\": \"belarusian\",\n    \"tg\": \"tajik\",\n    \"sd\": \"sindhi\",\n    \"gu\": \"gujarati\",\n    \"am\": \"amharic\",\n    \"yi\": \"yiddish\",\n    \"lo\": \"lao\",\n    \"uz\": \"uzbek\",\n    \"fo\": \"faroese\",\n    \"ht\": \"haitian creole\",\n    \"ps\": \"pashto\",\n    \"tk\": \"turkmen\",\n    \"nn\": \"nynorsk\",\n    \"mt\": \"maltese\",\n    \"sa\": \"sanskrit\",\n    \"lb\": \"luxembourgish\",\n    \"my\": \"myanmar\",\n    \"bo\": \"tibetan\",\n    \"tl\": \"tagalog\",\n    \"mg\": \"malagasy\",\n    \"as\": \"assamese\",\n    \"tt\": \"tatar\",\n    \"haw\": \"hawaiian\",\n    \"ln\": \"lingala\",\n    \"ha\": \"hausa\",\n    \"ba\": \"bashkir\",\n    \"jw\": \"javanese\",\n    \"su\": \"sundanese\",\n    \"yue\": \"cantonese\",\n    \"minnan\": \"minnan\",\n    \"wuyu\": \"wuyu\",\n    \"dialect\": \"dialect\",\n    \"zh/en\": \"zh/en\",\n    \"en/zh\": \"en/zh\",\n}\n\n# language code lookup by name, with a few language aliases\nTO_LANGUAGE_CODE = {\n    **{language: code for code, language in LANGUAGES.items()},\n    \"burmese\": \"my\",\n    \"valencian\": \"ca\",\n    \"flemish\": \"nl\",\n    \"haitian\": \"ht\",\n    \"letzeburgesch\": \"lb\",\n    \"pushto\": \"ps\",\n    \"panjabi\": \"pa\",\n    \"moldavian\": \"ro\",\n    \"moldovan\": \"ro\",\n    \"sinhalese\": \"si\",\n    \"castilian\": \"es\",\n    \"mandarin\": \"zh\",\n}\n\nAUDIO_EVENT = {\n    \"ASR\": \"ASR\",\n    \"AED\": \"AED\",\n    \"SER\": \"SER\",\n    \"Speech\": \"Speech\",\n    \"/Speech\": \"/Speech\",\n    \"BGM\": \"BGM\",\n    \"/BGM\": \"/BGM\",\n    \"Laughter\": \"Laughter\",\n    \"/Laughter\": \"/Laughter\",\n    \"Applause\": \"Applause\",\n    \"/Applause\": \"/Applause\",\n}\n\nEMOTION = {\n    \"HAPPY\": \"HAPPY\",\n    \"SAD\": \"SAD\",\n    \"ANGRY\": \"ANGRY\",\n    \"NEUTRAL\": \"NEUTRAL\",\n}\n\nTTS_Vocal_Token = {\n    \"TTS/B\": \"TTS/B\",\n    \"TTS/O\": \"TTS/O\",\n    \"TTS/Q\": \"TTS/Q\",\n    \"TTS/A\": \"TTS/A\",\n    \"TTS/CO\": \"TTS/CO\",\n    \"TTS/CL\": \"TTS/CL\",\n    \"TTS/H\": \"TTS/H\",\n    **{f\"TTS/SP{i:02d}\": f\"TTS/SP{i:02d}\" for i in range(1, 14)}\n}\n\n\n@lru_cache(maxsize=None)\ndef get_encoding(name: str = \"gpt2\", num_languages: int = 99):\n    vocab_path = os.path.join(os.path.dirname(__file__), \"assets\", f\"{name}.tiktoken\")\n    ranks = {\n        base64.b64decode(token): int(rank)\n        for token, rank in (line.split() for line in open(vocab_path) if line)\n    }\n    n_vocab = len(ranks)\n    special_tokens = {}\n\n    specials = [\n        \"<|endoftext|>\",\n        \"<|startoftranscript|>\",\n        *[f\"<|{lang}|>\" for lang in list(LANGUAGES.keys())[:num_languages]],\n        *[f\"<|{audio_event}|>\" for audio_event in list(AUDIO_EVENT.keys())],\n        *[f\"<|{emotion}|>\" for emotion in list(EMOTION.keys())],\n        \"<|translate|>\",\n        \"<|transcribe|>\",\n        \"<|startoflm|>\",\n        \"<|startofprev|>\",\n        \"<|nospeech|>\",\n        \"<|notimestamps|>\",\n        *[f\"<|SPECIAL_TOKEN_{i}|>\" for i in range(1, 31)],        # register special tokens for ASR\n        *[f\"<|{tts}|>\" for tts in list(TTS_Vocal_Token.keys())],  # register special tokens for TTS\n        *[f\"<|{i * 0.02:.2f}|>\" for i in range(1501)],\n    ]\n\n    for token in specials:\n        special_tokens[token] = n_vocab\n        n_vocab += 1\n\n    return tiktoken.Encoding(\n        name=os.path.basename(vocab_path),\n        explicit_n_vocab=n_vocab,\n        pat_str=r\"\"\"'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+\"\"\",\n        mergeable_ranks=ranks,\n        special_tokens=special_tokens,\n    )\n\n\n@lru_cache(maxsize=None)\ndef get_tokenizer(\n    multilingual: bool,\n    *,\n    num_languages: int = 99,\n    language: Optional[str] = None,\n    task: Optional[str] = None,  # Literal[\"transcribe\", \"translate\", None]\n) -> Tokenizer:\n    if language is not None:\n        language = language.lower()\n        if language not in LANGUAGES:\n            if language in TO_LANGUAGE_CODE:\n                language = TO_LANGUAGE_CODE[language]\n            else:\n                raise ValueError(f\"Unsupported language: {language}\")\n\n    if multilingual:\n        encoding_name = \"multilingual_zh_ja_yue_char_del\"\n        language = language or \"en\"\n        task = task or \"transcribe\"\n    else:\n        encoding_name = \"gpt2\"\n        language = None\n        task = None\n\n    encoding = get_encoding(name=encoding_name, num_languages=num_languages)\n\n    return Tokenizer(\n        encoding=encoding, num_languages=num_languages, language=language, task=task\n    )\n\n\nclass QwenTokenizer():\n    def __init__(self, token_path, skip_special_tokens=True):\n        super().__init__()\n        # NOTE: non-chat model, all these special tokens keep randomly initialized.\n        special_tokens = {\n            'eos_token': '<|endoftext|>',\n            'pad_token': '<|endoftext|>',\n            'additional_special_tokens': [\n                '<|im_start|>', '<|im_end|>', '<|endofprompt|>',\n                '[breath]', '<strong>', '</strong>', '[noise]',\n                '[laughter]', '[cough]', '[clucking]', '[accent]',\n                '[quick_breath]',\n                \"<laughter>\", \"</laughter>\",\n                \"[hissing]\", \"[sigh]\", \"[vocalized-noise]\",\n                \"[lipsmack]\", \"[mn]\"\n            ]\n        }\n        self.special_tokens = special_tokens\n        self.tokenizer = AutoTokenizer.from_pretrained(token_path)\n        self.tokenizer.add_special_tokens(special_tokens)\n        self.skip_special_tokens = skip_special_tokens\n\n    def encode(self, text, **kwargs):\n        tokens = self.tokenizer([text], return_tensors=\"pt\")\n        tokens = tokens[\"input_ids\"][0].cpu().tolist()\n        return tokens\n\n    def decode(self, tokens):\n        tokens = torch.tensor(tokens, dtype=torch.int64)\n        text = self.tokenizer.batch_decode([tokens], skip_special_tokens=self.skip_special_tokens)[0]\n        return text\n\n\n@lru_cache(maxsize=None)\ndef get_qwen_tokenizer(\n    token_path: str,\n    skip_special_tokens: bool\n) -> QwenTokenizer:\n    return QwenTokenizer(token_path=token_path, skip_special_tokens=skip_special_tokens)\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/activation.py",
    "content": "# Copyright (c) 2020 Johns Hopkins University (Shinji Watanabe)\n#               2020 Northwestern Polytechnical University (Pengcheng Guo)\n#               2020 Mobvoi Inc (Binbin Zhang)\n#               2024 Alibaba Inc (Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Swish() activation function for Conformer.\"\"\"\n\nimport torch\nfrom torch import nn, sin, pow\nfrom torch.nn import Parameter\n\n\nclass Swish(torch.nn.Module):\n    \"\"\"Construct an Swish object.\"\"\"\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Return Swish activation function.\"\"\"\n        return x * torch.sigmoid(x)\n\n\n# Implementation adapted from https://github.com/EdwardDixon/snake under the MIT license.\n#   LICENSE is in incl_licenses directory.\nclass Snake(nn.Module):\n    '''\n    Implementation of a sine-based periodic activation function\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter\n    References:\n        - This activation function is from this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snake(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    '''\n    def __init__(self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False):\n        '''\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha: trainable parameter\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            alpha will be trained along with the rest of your model.\n        '''\n        super(Snake, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale:  # log scale alphas initialized to zeros\n            self.alpha = Parameter(torch.zeros(in_features) * alpha)\n        else:  # linear scale alphas initialized to ones\n            self.alpha = Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        '''\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        Snake ∶= x + 1/a * sin^2 (xa)\n        '''\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1)  # line up with x to [B, C, T]\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n        x = x + (1.0 / (alpha + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/attention.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\n#               2022 Xingchen Song (sxc19@mails.tsinghua.edu.cn)\n#               2024 Alibaba Inc (Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Multi-Head Attention layer definition.\"\"\"\n\nimport math\nfrom typing import Tuple\n\nimport torch\nfrom torch import nn\n\n\nclass MultiHeadedAttention(nn.Module):\n    \"\"\"Multi-Head Attention layer.\n\n    Args:\n        n_head (int): The number of heads.\n        n_feat (int): The number of features.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self,\n                 n_head: int,\n                 n_feat: int,\n                 dropout_rate: float,\n                 key_bias: bool = True):\n        \"\"\"Construct an MultiHeadedAttention object.\"\"\"\n        super().__init__()\n        assert n_feat % n_head == 0\n        # We assume d_v always equals d_k\n        self.d_k = n_feat // n_head\n        self.h = n_head\n        self.linear_q = nn.Linear(n_feat, n_feat)\n        self.linear_k = nn.Linear(n_feat, n_feat, bias=key_bias)\n        self.linear_v = nn.Linear(n_feat, n_feat)\n        self.linear_out = nn.Linear(n_feat, n_feat)\n        self.dropout = nn.Dropout(p=dropout_rate)\n\n    def forward_qkv(\n        self, query: torch.Tensor, key: torch.Tensor, value: torch.Tensor\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Transform query, key and value.\n\n        Args:\n            query (torch.Tensor): Query tensor (#batch, time1, size).\n            key (torch.Tensor): Key tensor (#batch, time2, size).\n            value (torch.Tensor): Value tensor (#batch, time2, size).\n\n        Returns:\n            torch.Tensor: Transformed query tensor, size\n                (#batch, n_head, time1, d_k).\n            torch.Tensor: Transformed key tensor, size\n                (#batch, n_head, time2, d_k).\n            torch.Tensor: Transformed value tensor, size\n                (#batch, n_head, time2, d_k).\n\n        \"\"\"\n        n_batch = query.size(0)\n        q = self.linear_q(query).view(n_batch, -1, self.h, self.d_k)\n        k = self.linear_k(key).view(n_batch, -1, self.h, self.d_k)\n        v = self.linear_v(value).view(n_batch, -1, self.h, self.d_k)\n        q = q.transpose(1, 2)  # (batch, head, time1, d_k)\n        k = k.transpose(1, 2)  # (batch, head, time2, d_k)\n        v = v.transpose(1, 2)  # (batch, head, time2, d_k)\n\n        return q, k, v\n\n    def forward_attention(\n        self,\n        value: torch.Tensor,\n        scores: torch.Tensor,\n        mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool)\n    ) -> torch.Tensor:\n        \"\"\"Compute attention context vector.\n\n        Args:\n            value (torch.Tensor): Transformed value, size\n                (#batch, n_head, time2, d_k).\n            scores (torch.Tensor): Attention score, size\n                (#batch, n_head, time1, time2).\n            mask (torch.Tensor): Mask, size (#batch, 1, time2) or\n                (#batch, time1, time2), (0, 0, 0) means fake mask.\n\n        Returns:\n            torch.Tensor: Transformed value (#batch, time1, d_model)\n                weighted by the attention score (#batch, time1, time2).\n\n        \"\"\"\n        n_batch = value.size(0)\n        # NOTE(xcsong): When will `if mask.size(2) > 0` be True?\n        #   1. onnx(16/4) [WHY? Because we feed real cache & real mask for the\n        #           1st chunk to ease the onnx export.]\n        #   2. pytorch training\n        if mask.size(2) > 0:  # time2 > 0\n            mask = mask.unsqueeze(1).eq(0)  # (batch, 1, *, time2)\n            # For last chunk, time2 might be larger than scores.size(-1)\n            mask = mask[:, :, :, :scores.size(-1)]  # (batch, 1, *, time2)\n            scores = scores.masked_fill(mask, -float('inf'))\n            attn = torch.softmax(scores, dim=-1).masked_fill(\n                mask, 0.0)  # (batch, head, time1, time2)\n        # NOTE(xcsong): When will `if mask.size(2) > 0` be False?\n        #   1. onnx(16/-1, -1/-1, 16/0)\n        #   2. jit (16/-1, -1/-1, 16/0, 16/4)\n        else:\n            attn = torch.softmax(scores, dim=-1)  # (batch, head, time1, time2)\n\n        p_attn = self.dropout(attn)\n        x = torch.matmul(p_attn, value)  # (batch, head, time1, d_k)\n        x = (x.transpose(1, 2).contiguous().view(n_batch, -1,\n                                                 self.h * self.d_k)\n             )  # (batch, time1, d_model)\n\n        return self.linear_out(x)  # (batch, time1, d_model)\n\n    def forward(\n        self,\n        query: torch.Tensor,\n        key: torch.Tensor,\n        value: torch.Tensor,\n        mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        pos_emb: torch.Tensor = torch.empty(0),\n        cache: torch.Tensor = torch.zeros((0, 0, 0, 0))\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute scaled dot product attention.\n\n        Args:\n            query (torch.Tensor): Query tensor (#batch, time1, size).\n            key (torch.Tensor): Key tensor (#batch, time2, size).\n            value (torch.Tensor): Value tensor (#batch, time2, size).\n            mask (torch.Tensor): Mask tensor (#batch, 1, time2) or\n                (#batch, time1, time2).\n                1.When applying cross attention between decoder and encoder,\n                the batch padding mask for input is in (#batch, 1, T) shape.\n                2.When applying self attention of encoder,\n                the mask is in (#batch, T, T)  shape.\n                3.When applying self attention of decoder,\n                the mask is in (#batch, L, L)  shape.\n                4.If the different position in decoder see different block\n                of the encoder, such as Mocha, the passed in mask could be\n                in (#batch, L, T) shape. But there is no such case in current\n                CosyVoice.\n            cache (torch.Tensor): Cache tensor (1, head, cache_t, d_k * 2),\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n\n\n        Returns:\n            torch.Tensor: Output tensor (#batch, time1, d_model).\n            torch.Tensor: Cache tensor (1, head, cache_t + time1, d_k * 2)\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n\n        \"\"\"\n        q, k, v = self.forward_qkv(query, key, value)\n\n        # NOTE(xcsong):\n        #   when export onnx model, for 1st chunk, we feed\n        #       cache(1, head, 0, d_k * 2) (16/-1, -1/-1, 16/0 mode)\n        #       or cache(1, head, real_cache_t, d_k * 2) (16/4 mode).\n        #       In all modes, `if cache.size(0) > 0` will alwayse be `True`\n        #       and we will always do splitting and\n        #       concatnation(this will simplify onnx export). Note that\n        #       it's OK to concat & split zero-shaped tensors(see code below).\n        #   when export jit  model, for 1st chunk, we always feed\n        #       cache(0, 0, 0, 0) since jit supports dynamic if-branch.\n        # >>> a = torch.ones((1, 2, 0, 4))\n        # >>> b = torch.ones((1, 2, 3, 4))\n        # >>> c = torch.cat((a, b), dim=2)\n        # >>> torch.equal(b, c)        # True\n        # >>> d = torch.split(a, 2, dim=-1)\n        # >>> torch.equal(d[0], d[1])  # True\n        if cache.size(0) > 0:\n            key_cache, value_cache = torch.split(cache,\n                                                 cache.size(-1) // 2,\n                                                 dim=-1)\n            k = torch.cat([key_cache, k], dim=2)\n            v = torch.cat([value_cache, v], dim=2)\n        # NOTE(xcsong): We do cache slicing in encoder.forward_chunk, since it's\n        #   non-trivial to calculate `next_cache_start` here.\n        new_cache = torch.cat((k, v), dim=-1)\n\n        scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(self.d_k)\n        return self.forward_attention(v, scores, mask), new_cache\n\n\nclass RelPositionMultiHeadedAttention(MultiHeadedAttention):\n    \"\"\"Multi-Head Attention layer with relative position encoding.\n    Paper: https://arxiv.org/abs/1901.02860\n    Args:\n        n_head (int): The number of heads.\n        n_feat (int): The number of features.\n        dropout_rate (float): Dropout rate.\n    \"\"\"\n\n    def __init__(self,\n                 n_head: int,\n                 n_feat: int,\n                 dropout_rate: float,\n                 key_bias: bool = True):\n        \"\"\"Construct an RelPositionMultiHeadedAttention object.\"\"\"\n        super().__init__(n_head, n_feat, dropout_rate, key_bias)\n        # linear transformation for positional encoding\n        self.linear_pos = nn.Linear(n_feat, n_feat, bias=False)\n        # these two learnable bias are used in matrix c and matrix d\n        # as described in https://arxiv.org/abs/1901.02860 Section 3.3\n        self.pos_bias_u = nn.Parameter(torch.Tensor(self.h, self.d_k))\n        self.pos_bias_v = nn.Parameter(torch.Tensor(self.h, self.d_k))\n        torch.nn.init.xavier_uniform_(self.pos_bias_u)\n        torch.nn.init.xavier_uniform_(self.pos_bias_v)\n\n    def rel_shift(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Compute relative positional encoding.\n\n        Args:\n            x (torch.Tensor): Input tensor (batch, head, time1, 2*time1-1).\n            time1 means the length of query vector.\n\n        Returns:\n            torch.Tensor: Output tensor.\n\n        \"\"\"\n        zero_pad = torch.zeros((x.size()[0], x.size()[1], x.size()[2], 1),\n                               device=x.device,\n                               dtype=x.dtype)\n        x_padded = torch.cat([zero_pad, x], dim=-1)\n\n        x_padded = x_padded.view(x.size()[0],\n                                 x.size()[1],\n                                 x.size(3) + 1, x.size(2))\n        x = x_padded[:, :, 1:].view_as(x)[\n            :, :, :, : x.size(-1) // 2 + 1\n        ]  # only keep the positions from 0 to time2\n        return x\n\n    def forward(\n        self,\n        query: torch.Tensor,\n        key: torch.Tensor,\n        value: torch.Tensor,\n        mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        pos_emb: torch.Tensor = torch.empty(0),\n        cache: torch.Tensor = torch.zeros((0, 0, 0, 0))\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute 'Scaled Dot Product Attention' with rel. positional encoding.\n        Args:\n            query (torch.Tensor): Query tensor (#batch, time1, size).\n            key (torch.Tensor): Key tensor (#batch, time2, size).\n            value (torch.Tensor): Value tensor (#batch, time2, size).\n            mask (torch.Tensor): Mask tensor (#batch, 1, time2) or\n                (#batch, time1, time2), (0, 0, 0) means fake mask.\n            pos_emb (torch.Tensor): Positional embedding tensor\n                (#batch, time2, size).\n            cache (torch.Tensor): Cache tensor (1, head, cache_t, d_k * 2),\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n        Returns:\n            torch.Tensor: Output tensor (#batch, time1, d_model).\n            torch.Tensor: Cache tensor (1, head, cache_t + time1, d_k * 2)\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n        \"\"\"\n        q, k, v = self.forward_qkv(query, key, value)\n        q = q.transpose(1, 2)  # (batch, time1, head, d_k)\n\n        # NOTE(xcsong):\n        #   when export onnx model, for 1st chunk, we feed\n        #       cache(1, head, 0, d_k * 2) (16/-1, -1/-1, 16/0 mode)\n        #       or cache(1, head, real_cache_t, d_k * 2) (16/4 mode).\n        #       In all modes, `if cache.size(0) > 0` will alwayse be `True`\n        #       and we will always do splitting and\n        #       concatnation(this will simplify onnx export). Note that\n        #       it's OK to concat & split zero-shaped tensors(see code below).\n        #   when export jit  model, for 1st chunk, we always feed\n        #       cache(0, 0, 0, 0) since jit supports dynamic if-branch.\n        # >>> a = torch.ones((1, 2, 0, 4))\n        # >>> b = torch.ones((1, 2, 3, 4))\n        # >>> c = torch.cat((a, b), dim=2)\n        # >>> torch.equal(b, c)        # True\n        # >>> d = torch.split(a, 2, dim=-1)\n        # >>> torch.equal(d[0], d[1])  # True\n        if cache.size(0) > 0:\n            key_cache, value_cache = torch.split(cache,\n                                                 cache.size(-1) // 2,\n                                                 dim=-1)\n            k = torch.cat([key_cache, k], dim=2)\n            v = torch.cat([value_cache, v], dim=2)\n        # NOTE(xcsong): We do cache slicing in encoder.forward_chunk, since it's\n        #   non-trivial to calculate `next_cache_start` here.\n        new_cache = torch.cat((k, v), dim=-1)\n\n        n_batch_pos = pos_emb.size(0)\n        p = self.linear_pos(pos_emb).view(n_batch_pos, -1, self.h, self.d_k)\n        p = p.transpose(1, 2)  # (batch, head, time1, d_k)\n\n        # (batch, head, time1, d_k)\n        q_with_bias_u = (q + self.pos_bias_u).transpose(1, 2)\n        # (batch, head, time1, d_k)\n        q_with_bias_v = (q + self.pos_bias_v).transpose(1, 2)\n\n        # compute attention score\n        # first compute matrix a and matrix c\n        # as described in https://arxiv.org/abs/1901.02860 Section 3.3\n        # (batch, head, time1, time2)\n        matrix_ac = torch.matmul(q_with_bias_u, k.transpose(-2, -1))\n\n        # compute matrix b and matrix d\n        # (batch, head, time1, time2)\n        matrix_bd = torch.matmul(q_with_bias_v, p.transpose(-2, -1))\n        # NOTE(Xiang Lyu): Keep rel_shift since espnet rel_pos_emb is used\n        if matrix_ac.shape != matrix_bd.shape:\n            matrix_bd = self.rel_shift(matrix_bd)\n\n        scores = (matrix_ac + matrix_bd) / math.sqrt(\n            self.d_k)  # (batch, head, time1, time2)\n\n        return self.forward_attention(v, scores, mask), new_cache\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/convolution.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc. (authors: Binbin Zhang, Di Wu)\n#               2024 Alibaba Inc (Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"ConvolutionModule definition.\"\"\"\n\nfrom typing import Tuple\n\nimport torch\nfrom torch import nn\n\n\nclass ConvolutionModule(nn.Module):\n    \"\"\"ConvolutionModule in Conformer model.\"\"\"\n\n    def __init__(self,\n                 channels: int,\n                 kernel_size: int = 15,\n                 activation: nn.Module = nn.ReLU(),\n                 norm: str = \"batch_norm\",\n                 causal: bool = False,\n                 bias: bool = True):\n        \"\"\"Construct an ConvolutionModule object.\n        Args:\n            channels (int): The number of channels of conv layers.\n            kernel_size (int): Kernel size of conv layers.\n            causal (int): Whether use causal convolution or not\n        \"\"\"\n        super().__init__()\n\n        self.pointwise_conv1 = nn.Conv1d(\n            channels,\n            2 * channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            bias=bias,\n        )\n        # self.lorder is used to distinguish if it's a causal convolution,\n        # if self.lorder > 0: it's a causal convolution, the input will be\n        #    padded with self.lorder frames on the left in forward.\n        # else: it's a symmetrical convolution\n        if causal:\n            padding = 0\n            self.lorder = kernel_size - 1\n        else:\n            # kernel_size should be an odd number for none causal convolution\n            assert (kernel_size - 1) % 2 == 0\n            padding = (kernel_size - 1) // 2\n            self.lorder = 0\n        self.depthwise_conv = nn.Conv1d(\n            channels,\n            channels,\n            kernel_size,\n            stride=1,\n            padding=padding,\n            groups=channels,\n            bias=bias,\n        )\n\n        assert norm in ['batch_norm', 'layer_norm']\n        if norm == \"batch_norm\":\n            self.use_layer_norm = False\n            self.norm = nn.BatchNorm1d(channels)\n        else:\n            self.use_layer_norm = True\n            self.norm = nn.LayerNorm(channels)\n\n        self.pointwise_conv2 = nn.Conv1d(\n            channels,\n            channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            bias=bias,\n        )\n        self.activation = activation\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        mask_pad: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        cache: torch.Tensor = torch.zeros((0, 0, 0)),\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute convolution module.\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, channels).\n            mask_pad (torch.Tensor): used for batch padding (#batch, 1, time),\n                (0, 0, 0) means fake mask.\n            cache (torch.Tensor): left context cache, it is only\n                used in causal convolution (#batch, channels, cache_t),\n                (0, 0, 0) meas fake cache.\n        Returns:\n            torch.Tensor: Output tensor (#batch, time, channels).\n        \"\"\"\n        # exchange the temporal dimension and the feature dimension\n        x = x.transpose(1, 2)  # (#batch, channels, time)\n\n        # mask batch padding\n        if mask_pad.size(2) > 0:  # time > 0\n            x.masked_fill_(~mask_pad, 0.0)\n\n        if self.lorder > 0:\n            if cache.size(2) == 0:  # cache_t == 0\n                x = nn.functional.pad(x, (self.lorder, 0), 'constant', 0.0)\n            else:\n                assert cache.size(0) == x.size(0)  # equal batch\n                assert cache.size(1) == x.size(1)  # equal channel\n                x = torch.cat((cache, x), dim=2)\n            assert (x.size(2) > self.lorder)\n            new_cache = x[:, :, -self.lorder:]\n        else:\n            # It's better we just return None if no cache is required,\n            # However, for JIT export, here we just fake one tensor instead of\n            # None.\n            new_cache = torch.zeros((0, 0, 0), dtype=x.dtype, device=x.device)\n\n        # GLU mechanism\n        x = self.pointwise_conv1(x)  # (batch, 2*channel, dim)\n        x = nn.functional.glu(x, dim=1)  # (batch, channel, dim)\n\n        # 1D Depthwise Conv\n        x = self.depthwise_conv(x)\n        if self.use_layer_norm:\n            x = x.transpose(1, 2)\n        x = self.activation(self.norm(x))\n        if self.use_layer_norm:\n            x = x.transpose(1, 2)\n        x = self.pointwise_conv2(x)\n        # mask batch padding\n        if mask_pad.size(2) > 0:  # time > 0\n            x.masked_fill_(~mask_pad, 0.0)\n\n        return x.transpose(1, 2), new_cache\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/decoder.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc. (authors: Binbin Zhang, Di Wu)\n#               2024 Alibaba Inc (Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Decoder definition.\"\"\"\nfrom typing import Tuple, List, Optional\n\nimport torch\nimport torch.utils.checkpoint as ckpt\nimport logging\n\nfrom cosyvoice.transformer.decoder_layer import DecoderLayer\nfrom cosyvoice.transformer.positionwise_feed_forward import PositionwiseFeedForward\nfrom cosyvoice.utils.class_utils import (\n    COSYVOICE_EMB_CLASSES,\n    COSYVOICE_ATTENTION_CLASSES,\n    COSYVOICE_ACTIVATION_CLASSES,\n)\nfrom cosyvoice.utils.mask import (subsequent_mask, make_pad_mask)\n\n\nclass TransformerDecoder(torch.nn.Module):\n    \"\"\"Base class of Transfomer decoder module.\n    Args:\n        vocab_size: output dim\n        encoder_output_size: dimension of attention\n        attention_heads: the number of heads of multi head attention\n        linear_units: the hidden units number of position-wise feedforward\n        num_blocks: the number of decoder blocks\n        dropout_rate: dropout rate\n        self_attention_dropout_rate: dropout rate for attention\n        input_layer: input layer type\n        use_output_layer: whether to use output layer\n        pos_enc_class: PositionalEncoding or ScaledPositionalEncoding\n        normalize_before:\n            True: use layer_norm before each sub-block of a layer.\n            False: use layer_norm after each sub-block of a layer.\n        src_attention: if false, encoder-decoder cross attention is not\n                       applied, such as CIF model\n        key_bias: whether use bias in attention.linear_k, False for whisper models.\n        gradient_checkpointing: rerunning a forward-pass segment for each\n            checkpointed segment during backward.\n        tie_word_embedding: Tie or clone module weights depending of whether we are\n            using TorchScript or not\n    \"\"\"\n\n    def __init__(\n        self,\n        vocab_size: int,\n        encoder_output_size: int,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        self_attention_dropout_rate: float = 0.0,\n        src_attention_dropout_rate: float = 0.0,\n        input_layer: str = \"embed\",\n        use_output_layer: bool = True,\n        normalize_before: bool = True,\n        src_attention: bool = True,\n        key_bias: bool = True,\n        activation_type: str = \"relu\",\n        gradient_checkpointing: bool = False,\n        tie_word_embedding: bool = False,\n    ):\n        super().__init__()\n        attention_dim = encoder_output_size\n        activation = COSYVOICE_ACTIVATION_CLASSES[activation_type]()\n\n        self.embed = torch.nn.Sequential(\n            torch.nn.Identity() if input_layer == \"no_pos\" else\n            torch.nn.Embedding(vocab_size, attention_dim),\n            COSYVOICE_EMB_CLASSES[input_layer](attention_dim,\n                                               positional_dropout_rate),\n        )\n\n        self.normalize_before = normalize_before\n        self.after_norm = torch.nn.LayerNorm(attention_dim, eps=1e-5)\n        self.use_output_layer = use_output_layer\n        if use_output_layer:\n            self.output_layer = torch.nn.Linear(attention_dim, vocab_size)\n        else:\n            self.output_layer = torch.nn.Identity()\n        self.num_blocks = num_blocks\n        self.decoders = torch.nn.ModuleList([\n            DecoderLayer(\n                attention_dim,\n                COSYVOICE_ATTENTION_CLASSES[\"selfattn\"](\n                    attention_heads, attention_dim,\n                    self_attention_dropout_rate, key_bias),\n                COSYVOICE_ATTENTION_CLASSES[\"selfattn\"](\n                    attention_heads, attention_dim, src_attention_dropout_rate,\n                    key_bias) if src_attention else None,\n                PositionwiseFeedForward(attention_dim, linear_units,\n                                        dropout_rate, activation),\n                dropout_rate,\n                normalize_before,\n            ) for _ in range(self.num_blocks)\n        ])\n\n        self.gradient_checkpointing = gradient_checkpointing\n        self.tie_word_embedding = tie_word_embedding\n\n    def forward(\n        self,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        ys_in_pad: torch.Tensor,\n        ys_in_lens: torch.Tensor,\n        r_ys_in_pad: torch.Tensor = torch.empty(0),\n        reverse_weight: float = 0.0,\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Forward decoder.\n        Args:\n            memory: encoded memory, float32  (batch, maxlen_in, feat)\n            memory_mask: encoder memory mask, (batch, 1, maxlen_in)\n            ys_in_pad: padded input token ids, int64 (batch, maxlen_out)\n            ys_in_lens: input lengths of this batch (batch)\n            r_ys_in_pad: not used in transformer decoder, in order to unify api\n                with bidirectional decoder\n            reverse_weight: not used in transformer decoder, in order to unify\n                api with bidirectional decode\n        Returns:\n            (tuple): tuple containing:\n                x: decoded token score before softmax (batch, maxlen_out,\n                    vocab_size) if use_output_layer is True,\n                torch.tensor(0.0), in order to unify api with bidirectional decoder\n                olens: (batch, )\n        NOTE(xcsong):\n            We pass the `__call__` method of the modules instead of `forward` to the\n            checkpointing API because `__call__` attaches all the hooks of the module.\n            https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690/2\n        \"\"\"\n        tgt = ys_in_pad\n        maxlen = tgt.size(1)\n        # tgt_mask: (B, 1, L)\n        tgt_mask = ~make_pad_mask(ys_in_lens, maxlen).unsqueeze(1)\n        tgt_mask = tgt_mask.to(tgt.device)\n        # m: (1, L, L)\n        m = subsequent_mask(tgt_mask.size(-1),\n                            device=tgt_mask.device).unsqueeze(0)\n        # tgt_mask: (B, L, L)\n        tgt_mask = tgt_mask & m\n        x, _ = self.embed(tgt)\n        if self.gradient_checkpointing and self.training:\n            x = self.forward_layers_checkpointed(x, tgt_mask, memory,\n                                                 memory_mask)\n        else:\n            x = self.forward_layers(x, tgt_mask, memory, memory_mask)\n        if self.normalize_before:\n            x = self.after_norm(x)\n        if self.use_output_layer:\n            x = self.output_layer(x)\n        olens = tgt_mask.sum(1)\n        return x, torch.tensor(0.0), olens\n\n    def forward_layers(self, x: torch.Tensor, tgt_mask: torch.Tensor,\n                       memory: torch.Tensor,\n                       memory_mask: torch.Tensor) -> torch.Tensor:\n        for layer in self.decoders:\n            x, tgt_mask, memory, memory_mask = layer(x, tgt_mask, memory,\n                                                     memory_mask)\n        return x\n\n    @torch.jit.unused\n    def forward_layers_checkpointed(self, x: torch.Tensor,\n                                    tgt_mask: torch.Tensor,\n                                    memory: torch.Tensor,\n                                    memory_mask: torch.Tensor) -> torch.Tensor:\n        for layer in self.decoders:\n            x, tgt_mask, memory, memory_mask = ckpt.checkpoint(\n                layer.__call__, x, tgt_mask, memory, memory_mask)\n        return x\n\n    def forward_one_step(\n        self,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        tgt: torch.Tensor,\n        tgt_mask: torch.Tensor,\n        cache: Optional[List[torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, List[torch.Tensor]]:\n        \"\"\"Forward one step.\n            This is only used for decoding.\n        Args:\n            memory: encoded memory, float32  (batch, maxlen_in, feat)\n            memory_mask: encoded memory mask, (batch, 1, maxlen_in)\n            tgt: input token ids, int64 (batch, maxlen_out)\n            tgt_mask: input token mask,  (batch, maxlen_out)\n                      dtype=torch.uint8 in PyTorch 1.2-\n                      dtype=torch.bool in PyTorch 1.2+ (include 1.2)\n            cache: cached output list of (batch, max_time_out-1, size)\n        Returns:\n            y, cache: NN output value and cache per `self.decoders`.\n            y.shape` is (batch, maxlen_out, token)\n        \"\"\"\n        x, _ = self.embed(tgt)\n        new_cache = []\n        for i, decoder in enumerate(self.decoders):\n            if cache is None:\n                c = None\n            else:\n                c = cache[i]\n            x, tgt_mask, memory, memory_mask = decoder(x,\n                                                       tgt_mask,\n                                                       memory,\n                                                       memory_mask,\n                                                       cache=c)\n            new_cache.append(x)\n        if self.normalize_before:\n            y = self.after_norm(x[:, -1])\n        else:\n            y = x[:, -1]\n        if self.use_output_layer:\n            y = torch.log_softmax(self.output_layer(y), dim=-1)\n        return y, new_cache\n\n    def tie_or_clone_weights(self, jit_mode: bool = True):\n        \"\"\"Tie or clone module weights (between word_emb and output_layer)\n            depending of whether we are using TorchScript or not\"\"\"\n        if not self.use_output_layer:\n            return\n        if jit_mode:\n            logging.info(\"clone emb.weight to output.weight\")\n            self.output_layer.weight = torch.nn.Parameter(\n                self.embed[0].weight.clone())\n        else:\n            logging.info(\"tie emb.weight with output.weight\")\n            self.output_layer.weight = self.embed[0].weight\n\n        if getattr(self.output_layer, \"bias\", None) is not None:\n            self.output_layer.bias.data = torch.nn.functional.pad(\n                self.output_layer.bias.data,\n                (\n                    0,\n                    self.output_layer.weight.shape[0] -\n                    self.output_layer.bias.shape[0],\n                ),\n                \"constant\",\n                0,\n            )\n\n\nclass BiTransformerDecoder(torch.nn.Module):\n    \"\"\"Base class of Transfomer decoder module.\n    Args:\n        vocab_size: output dim\n        encoder_output_size: dimension of attention\n        attention_heads: the number of heads of multi head attention\n        linear_units: the hidden units number of position-wise feedforward\n        num_blocks: the number of decoder blocks\n        r_num_blocks: the number of right to left decoder blocks\n        dropout_rate: dropout rate\n        self_attention_dropout_rate: dropout rate for attention\n        input_layer: input layer type\n        use_output_layer: whether to use output layer\n        pos_enc_class: PositionalEncoding or ScaledPositionalEncoding\n        normalize_before:\n            True: use layer_norm before each sub-block of a layer.\n            False: use layer_norm after each sub-block of a layer.\n        key_bias: whether use bias in attention.linear_k, False for whisper models.\n    \"\"\"\n\n    def __init__(\n        self,\n        vocab_size: int,\n        encoder_output_size: int,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        r_num_blocks: int = 0,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        self_attention_dropout_rate: float = 0.0,\n        src_attention_dropout_rate: float = 0.0,\n        input_layer: str = \"embed\",\n        use_output_layer: bool = True,\n        normalize_before: bool = True,\n        key_bias: bool = True,\n        gradient_checkpointing: bool = False,\n        tie_word_embedding: bool = False,\n    ):\n\n        super().__init__()\n        self.tie_word_embedding = tie_word_embedding\n        self.left_decoder = TransformerDecoder(\n            vocab_size,\n            encoder_output_size,\n            attention_heads,\n            linear_units,\n            num_blocks,\n            dropout_rate,\n            positional_dropout_rate,\n            self_attention_dropout_rate,\n            src_attention_dropout_rate,\n            input_layer,\n            use_output_layer,\n            normalize_before,\n            key_bias=key_bias,\n            gradient_checkpointing=gradient_checkpointing,\n            tie_word_embedding=tie_word_embedding)\n\n        self.right_decoder = TransformerDecoder(\n            vocab_size,\n            encoder_output_size,\n            attention_heads,\n            linear_units,\n            r_num_blocks,\n            dropout_rate,\n            positional_dropout_rate,\n            self_attention_dropout_rate,\n            src_attention_dropout_rate,\n            input_layer,\n            use_output_layer,\n            normalize_before,\n            key_bias=key_bias,\n            gradient_checkpointing=gradient_checkpointing,\n            tie_word_embedding=tie_word_embedding)\n\n    def forward(\n        self,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        ys_in_pad: torch.Tensor,\n        ys_in_lens: torch.Tensor,\n        r_ys_in_pad: torch.Tensor,\n        reverse_weight: float = 0.0,\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Forward decoder.\n        Args:\n            memory: encoded memory, float32  (batch, maxlen_in, feat)\n            memory_mask: encoder memory mask, (batch, 1, maxlen_in)\n            ys_in_pad: padded input token ids, int64 (batch, maxlen_out)\n            ys_in_lens: input lengths of this batch (batch)\n            r_ys_in_pad: padded input token ids, int64 (batch, maxlen_out),\n                used for right to left decoder\n            reverse_weight: used for right to left decoder\n        Returns:\n            (tuple): tuple containing:\n                x: decoded token score before softmax (batch, maxlen_out,\n                    vocab_size) if use_output_layer is True,\n                r_x: x: decoded token score (right to left decoder)\n                    before softmax (batch, maxlen_out, vocab_size)\n                    if use_output_layer is True,\n                olens: (batch, )\n        \"\"\"\n        l_x, _, olens = self.left_decoder(memory, memory_mask, ys_in_pad,\n                                          ys_in_lens)\n        r_x = torch.tensor(0.0)\n        if reverse_weight > 0.0:\n            r_x, _, olens = self.right_decoder(memory, memory_mask,\n                                               r_ys_in_pad, ys_in_lens)\n        return l_x, r_x, olens\n\n    def forward_one_step(\n        self,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        tgt: torch.Tensor,\n        tgt_mask: torch.Tensor,\n        cache: Optional[List[torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, List[torch.Tensor]]:\n        \"\"\"Forward one step.\n            This is only used for decoding.\n        Args:\n            memory: encoded memory, float32  (batch, maxlen_in, feat)\n            memory_mask: encoded memory mask, (batch, 1, maxlen_in)\n            tgt: input token ids, int64 (batch, maxlen_out)\n            tgt_mask: input token mask,  (batch, maxlen_out)\n                      dtype=torch.uint8 in PyTorch 1.2-\n                      dtype=torch.bool in PyTorch 1.2+ (include 1.2)\n            cache: cached output list of (batch, max_time_out-1, size)\n        Returns:\n            y, cache: NN output value and cache per `self.decoders`.\n            y.shape` is (batch, maxlen_out, token)\n        \"\"\"\n        return self.left_decoder.forward_one_step(memory, memory_mask, tgt,\n                                                  tgt_mask, cache)\n\n    def tie_or_clone_weights(self, jit_mode: bool = True):\n        \"\"\"Tie or clone module weights (between word_emb and output_layer)\n            depending of whether we are using TorchScript or not\"\"\"\n        self.left_decoder.tie_or_clone_weights(jit_mode)\n        self.right_decoder.tie_or_clone_weights(jit_mode)\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/decoder_layer.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Decoder self-attention layer definition.\"\"\"\nfrom typing import Optional, Tuple\n\nimport torch\nfrom torch import nn\n\n\nclass DecoderLayer(nn.Module):\n    \"\"\"Single decoder layer module.\n\n    Args:\n        size (int): Input dimension.\n        self_attn (torch.nn.Module): Self-attention module instance.\n            `MultiHeadedAttention` instance can be used as the argument.\n        src_attn (torch.nn.Module): Inter-attention module instance.\n            `MultiHeadedAttention` instance can be used as the argument.\n            If `None` is passed, Inter-attention is not used, such as\n            CIF, GPT, and other decoder only model.\n        feed_forward (torch.nn.Module): Feed-forward module instance.\n            `PositionwiseFeedForward` instance can be used as the argument.\n        dropout_rate (float): Dropout rate.\n        normalize_before (bool):\n            True: use layer_norm before each sub-block.\n            False: to use layer_norm after each sub-block.\n    \"\"\"\n\n    def __init__(\n        self,\n        size: int,\n        self_attn: nn.Module,\n        src_attn: Optional[nn.Module],\n        feed_forward: nn.Module,\n        dropout_rate: float,\n        normalize_before: bool = True,\n    ):\n        \"\"\"Construct an DecoderLayer object.\"\"\"\n        super().__init__()\n        self.size = size\n        self.self_attn = self_attn\n        self.src_attn = src_attn\n        self.feed_forward = feed_forward\n        self.norm1 = nn.LayerNorm(size, eps=1e-5)\n        self.norm2 = nn.LayerNorm(size, eps=1e-5)\n        self.norm3 = nn.LayerNorm(size, eps=1e-5)\n        self.dropout = nn.Dropout(dropout_rate)\n        self.normalize_before = normalize_before\n\n    def forward(\n        self,\n        tgt: torch.Tensor,\n        tgt_mask: torch.Tensor,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        cache: Optional[torch.Tensor] = None\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Compute decoded features.\n\n        Args:\n            tgt (torch.Tensor): Input tensor (#batch, maxlen_out, size).\n            tgt_mask (torch.Tensor): Mask for input tensor\n                (#batch, maxlen_out).\n            memory (torch.Tensor): Encoded memory\n                (#batch, maxlen_in, size).\n            memory_mask (torch.Tensor): Encoded memory mask\n                (#batch, maxlen_in).\n            cache (torch.Tensor): cached tensors.\n                (#batch, maxlen_out - 1, size).\n\n        Returns:\n            torch.Tensor: Output tensor (#batch, maxlen_out, size).\n            torch.Tensor: Mask for output tensor (#batch, maxlen_out).\n            torch.Tensor: Encoded memory (#batch, maxlen_in, size).\n            torch.Tensor: Encoded memory mask (#batch, maxlen_in).\n\n        \"\"\"\n        residual = tgt\n        if self.normalize_before:\n            tgt = self.norm1(tgt)\n\n        if cache is None:\n            tgt_q = tgt\n            tgt_q_mask = tgt_mask\n        else:\n            # compute only the last frame query keeping dim: max_time_out -> 1\n            assert cache.shape == (\n                tgt.shape[0],\n                tgt.shape[1] - 1,\n                self.size,\n            ), \"{cache.shape} == {(tgt.shape[0], tgt.shape[1] - 1, self.size)}\"\n            tgt_q = tgt[:, -1:, :]\n            residual = residual[:, -1:, :]\n            tgt_q_mask = tgt_mask[:, -1:, :]\n\n        x = residual + self.dropout(\n            self.self_attn(tgt_q, tgt, tgt, tgt_q_mask)[0])\n        if not self.normalize_before:\n            x = self.norm1(x)\n\n        if self.src_attn is not None:\n            residual = x\n            if self.normalize_before:\n                x = self.norm2(x)\n            x = residual + self.dropout(\n                self.src_attn(x, memory, memory, memory_mask)[0])\n            if not self.normalize_before:\n                x = self.norm2(x)\n\n        residual = x\n        if self.normalize_before:\n            x = self.norm3(x)\n        x = residual + self.dropout(self.feed_forward(x))\n        if not self.normalize_before:\n            x = self.norm3(x)\n\n        if cache is not None:\n            x = torch.cat([cache, x], dim=1)\n\n        return x, tgt_mask, memory, memory_mask\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/embedding.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc. (authors: Binbin Zhang, Di Wu)\n#               2024 Alibaba Inc (Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Positonal Encoding Module.\"\"\"\n\nimport math\nfrom typing import Tuple, Union\n\nimport torch\nimport torch.nn.functional as F\nimport numpy as np\n\n\nclass PositionalEncoding(torch.nn.Module):\n    \"\"\"Positional encoding.\n\n    :param int d_model: embedding dim\n    :param float dropout_rate: dropout rate\n    :param int max_len: maximum input length\n\n    PE(pos, 2i)   = sin(pos/(10000^(2i/dmodel)))\n    PE(pos, 2i+1) = cos(pos/(10000^(2i/dmodel)))\n    \"\"\"\n\n    def __init__(self,\n                 d_model: int,\n                 dropout_rate: float,\n                 max_len: int = 5000,\n                 reverse: bool = False):\n        \"\"\"Construct an PositionalEncoding object.\"\"\"\n        super().__init__()\n        self.d_model = d_model\n        self.xscale = math.sqrt(self.d_model)\n        self.dropout = torch.nn.Dropout(p=dropout_rate)\n        self.max_len = max_len\n\n        self.pe = torch.zeros(self.max_len, self.d_model)\n        position = torch.arange(0, self.max_len,\n                                dtype=torch.float32).unsqueeze(1)\n        div_term = torch.exp(\n            torch.arange(0, self.d_model, 2, dtype=torch.float32) *\n            -(math.log(10000.0) / self.d_model))\n        self.pe[:, 0::2] = torch.sin(position * div_term)\n        self.pe[:, 1::2] = torch.cos(position * div_term)\n        self.pe = self.pe.unsqueeze(0)\n\n    def forward(self,\n                x: torch.Tensor,\n                offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Add positional encoding.\n\n        Args:\n            x (torch.Tensor): Input. Its shape is (batch, time, ...)\n            offset (int, torch.tensor): position offset\n\n        Returns:\n            torch.Tensor: Encoded tensor. Its shape is (batch, time, ...)\n            torch.Tensor: for compatibility to RelPositionalEncoding\n        \"\"\"\n\n        self.pe = self.pe.to(x.device)\n        pos_emb = self.position_encoding(offset, x.size(1), False)\n        x = x * self.xscale + pos_emb\n        return self.dropout(x), self.dropout(pos_emb)\n\n    def position_encoding(self,\n                          offset: Union[int, torch.Tensor],\n                          size: int,\n                          apply_dropout: bool = True) -> torch.Tensor:\n        \"\"\" For getting encoding in a streaming fashion\n\n        Attention!!!!!\n        we apply dropout only once at the whole utterance level in a none\n        streaming way, but will call this function several times with\n        increasing input size in a streaming scenario, so the dropout will\n        be applied several times.\n\n        Args:\n            offset (int or torch.tensor): start offset\n            size (int): required size of position encoding\n\n        Returns:\n            torch.Tensor: Corresponding encoding\n        \"\"\"\n        # How to subscript a Union type:\n        #   https://github.com/pytorch/pytorch/issues/69434\n        if isinstance(offset, int):\n            assert offset + size <= self.max_len\n            pos_emb = self.pe[:, offset:offset + size]\n        elif isinstance(offset, torch.Tensor) and offset.dim() == 0:  # scalar\n            assert offset + size <= self.max_len\n            pos_emb = self.pe[:, offset:offset + size]\n        else:  # for batched streaming decoding on GPU\n            assert torch.max(offset) + size <= self.max_len\n            index = offset.unsqueeze(1) + \\\n                torch.arange(0, size).to(offset.device)  # B X T\n            flag = index > 0\n            # remove negative offset\n            index = index * flag\n            pos_emb = F.embedding(index, self.pe[0])  # B X T X d_model\n\n        if apply_dropout:\n            pos_emb = self.dropout(pos_emb)\n        return pos_emb\n\n\nclass RelPositionalEncoding(PositionalEncoding):\n    \"\"\"Relative positional encoding module.\n    See : Appendix B in https://arxiv.org/abs/1901.02860\n    Args:\n        d_model (int): Embedding dimension.\n        dropout_rate (float): Dropout rate.\n        max_len (int): Maximum input length.\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float, max_len: int = 5000):\n        \"\"\"Initialize class.\"\"\"\n        super().__init__(d_model, dropout_rate, max_len, reverse=True)\n\n    def forward(self,\n                x: torch.Tensor,\n                offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute positional encoding.\n        Args:\n            x (torch.Tensor): Input tensor (batch, time, `*`).\n        Returns:\n            torch.Tensor: Encoded tensor (batch, time, `*`).\n            torch.Tensor: Positional embedding tensor (1, time, `*`).\n        \"\"\"\n        self.pe = self.pe.to(x.device)\n        x = x * self.xscale\n        pos_emb = self.position_encoding(offset, x.size(1), False)\n        return self.dropout(x), self.dropout(pos_emb)\n\n\nclass WhisperPositionalEncoding(PositionalEncoding):\n    \"\"\" Sinusoids position encoding used in openai-whisper.encoder\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float, max_len: int = 1500):\n        super().__init__(d_model, dropout_rate, max_len)\n        self.xscale = 1.0\n        log_timescale_increment = np.log(10000) / (d_model // 2 - 1)\n        inv_timescales = torch.exp(-log_timescale_increment *\n                                   torch.arange(d_model // 2))\n        scaled_time = torch.arange(max_len)[:, np.newaxis] * \\\n            inv_timescales[np.newaxis, :]\n        pe = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], dim=1)\n        delattr(self, \"pe\")\n        self.register_buffer(\"pe\", pe.unsqueeze(0))\n\n\nclass LearnablePositionalEncoding(PositionalEncoding):\n    \"\"\" Learnable position encoding used in openai-whisper.decoder\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float, max_len: int = 448):\n        super().__init__(d_model, dropout_rate, max_len)\n        # NOTE(xcsong): overwrite self.pe & self.xscale\n        self.pe = torch.nn.Parameter(torch.empty(1, max_len, d_model))\n        self.xscale = 1.0\n\n\nclass NoPositionalEncoding(torch.nn.Module):\n    \"\"\" No position encoding\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float):\n        super().__init__()\n        self.d_model = d_model\n        self.dropout = torch.nn.Dropout(p=dropout_rate)\n\n    def forward(self,\n                x: torch.Tensor,\n                offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\" Just return zero vector for interface compatibility\n        \"\"\"\n        pos_emb = torch.zeros(1, x.size(1), self.d_model).to(x.device)\n        return self.dropout(x), pos_emb\n\n    def position_encoding(self, offset: Union[int, torch.Tensor],\n                          size: int) -> torch.Tensor:\n        return torch.zeros(1, size, self.d_model)\n\n\nclass EspnetRelPositionalEncoding(torch.nn.Module):\n    \"\"\"Relative positional encoding module (new implementation).\n\n    Details can be found in https://github.com/espnet/espnet/pull/2816.\n\n    See : Appendix B in https://arxiv.org/abs/1901.02860\n\n    Args:\n        d_model (int): Embedding dimension.\n        dropout_rate (float): Dropout rate.\n        max_len (int): Maximum input length.\n\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float, max_len: int = 5000):\n        \"\"\"Construct an PositionalEncoding object.\"\"\"\n        super(EspnetRelPositionalEncoding, self).__init__()\n        self.d_model = d_model\n        self.xscale = math.sqrt(self.d_model)\n        self.dropout = torch.nn.Dropout(p=dropout_rate)\n        self.pe = None\n        self.extend_pe(torch.tensor(0.0).expand(1, max_len))\n\n    def extend_pe(self, x: torch.Tensor):\n        \"\"\"Reset the positional encodings.\"\"\"\n        if self.pe is not None:\n            # self.pe contains both positive and negative parts\n            # the length of self.pe is 2 * input_len - 1\n            if self.pe.size(1) >= x.size(1) * 2 - 1:\n                if self.pe.dtype != x.dtype or self.pe.device != x.device:\n                    self.pe = self.pe.to(dtype=x.dtype, device=x.device)\n                return\n        # Suppose `i` means to the position of query vecotr and `j` means the\n        # position of key vector. We use position relative positions when keys\n        # are to the left (i>j) and negative relative positions otherwise (i<j).\n        pe_positive = torch.zeros(x.size(1), self.d_model)\n        pe_negative = torch.zeros(x.size(1), self.d_model)\n        position = torch.arange(0, x.size(1), dtype=torch.float32).unsqueeze(1)\n        div_term = torch.exp(\n            torch.arange(0, self.d_model, 2, dtype=torch.float32)\n            * -(math.log(10000.0) / self.d_model)\n        )\n        pe_positive[:, 0::2] = torch.sin(position * div_term)\n        pe_positive[:, 1::2] = torch.cos(position * div_term)\n        pe_negative[:, 0::2] = torch.sin(-1 * position * div_term)\n        pe_negative[:, 1::2] = torch.cos(-1 * position * div_term)\n\n        # Reserve the order of positive indices and concat both positive and\n        # negative indices. This is used to support the shifting trick\n        # as in https://arxiv.org/abs/1901.02860\n        pe_positive = torch.flip(pe_positive, [0]).unsqueeze(0)\n        pe_negative = pe_negative[1:].unsqueeze(0)\n        pe = torch.cat([pe_positive, pe_negative], dim=1)\n        self.pe = pe.to(device=x.device, dtype=x.dtype)\n\n    def forward(self, x: torch.Tensor, offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Add positional encoding.\n\n        Args:\n            x (torch.Tensor): Input tensor (batch, time, `*`).\n\n        Returns:\n            torch.Tensor: Encoded tensor (batch, time, `*`).\n\n        \"\"\"\n        self.extend_pe(x)\n        x = x * self.xscale\n        pos_emb = self.position_encoding(size=x.size(1), offset=offset)\n        return self.dropout(x), self.dropout(pos_emb)\n\n    def position_encoding(self,\n                          offset: Union[int, torch.Tensor],\n                          size: int) -> torch.Tensor:\n        \"\"\" For getting encoding in a streaming fashion\n\n        Attention!!!!!\n        we apply dropout only once at the whole utterance level in a none\n        streaming way, but will call this function several times with\n        increasing input size in a streaming scenario, so the dropout will\n        be applied several times.\n\n        Args:\n            offset (int or torch.tensor): start offset\n            size (int): required size of position encoding\n\n        Returns:\n            torch.Tensor: Corresponding encoding\n        \"\"\"\n        # How to subscript a Union type:\n        #   https://github.com/pytorch/pytorch/issues/69434\n        if isinstance(offset, int):\n            pos_emb = self.pe[\n                :,\n                self.pe.size(1) // 2 - size - offset + 1: self.pe.size(1) // 2 + size + offset,\n            ]\n        elif isinstance(offset, torch.Tensor):\n            pos_emb = self.pe[\n                :,\n                self.pe.size(1) // 2 - size - offset + 1: self.pe.size(1) // 2 + size + offset,\n            ]\n        return pos_emb\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/encoder.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc (Binbin Zhang, Di Wu)\n#               2022 Xingchen Song (sxc19@mails.tsinghua.edu.cn)\n#               2024 Alibaba Inc (Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Encoder definition.\"\"\"\nfrom typing import Tuple\n\nimport torch\nimport torch.utils.checkpoint as ckpt\n\nfrom cosyvoice.transformer.convolution import ConvolutionModule\nfrom cosyvoice.transformer.encoder_layer import TransformerEncoderLayer\nfrom cosyvoice.transformer.encoder_layer import ConformerEncoderLayer\nfrom cosyvoice.transformer.positionwise_feed_forward import PositionwiseFeedForward\nfrom cosyvoice.utils.class_utils import (\n    COSYVOICE_EMB_CLASSES,\n    COSYVOICE_SUBSAMPLE_CLASSES,\n    COSYVOICE_ATTENTION_CLASSES,\n    COSYVOICE_ACTIVATION_CLASSES,\n)\nfrom cosyvoice.utils.mask import make_pad_mask\nfrom cosyvoice.utils.mask import add_optional_chunk_mask\n\n\nclass BaseEncoder(torch.nn.Module):\n\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        attention_dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"abs_pos\",\n        normalize_before: bool = True,\n        static_chunk_size: int = 0,\n        use_dynamic_chunk: bool = False,\n        global_cmvn: torch.nn.Module = None,\n        use_dynamic_left_chunk: bool = False,\n        gradient_checkpointing: bool = False,\n    ):\n        \"\"\"\n        Args:\n            input_size (int): input dim\n            output_size (int): dimension of attention\n            attention_heads (int): the number of heads of multi head attention\n            linear_units (int): the hidden units number of position-wise feed\n                forward\n            num_blocks (int): the number of decoder blocks\n            dropout_rate (float): dropout rate\n            attention_dropout_rate (float): dropout rate in attention\n            positional_dropout_rate (float): dropout rate after adding\n                positional encoding\n            input_layer (str): input layer type.\n                optional [linear, conv2d, conv2d6, conv2d8]\n            pos_enc_layer_type (str): Encoder positional encoding layer type.\n                opitonal [abs_pos, scaled_abs_pos, rel_pos, no_pos]\n            normalize_before (bool):\n                True: use layer_norm before each sub-block of a layer.\n                False: use layer_norm after each sub-block of a layer.\n            static_chunk_size (int): chunk size for static chunk training and\n                decoding\n            use_dynamic_chunk (bool): whether use dynamic chunk size for\n                training or not, You can only use fixed chunk(chunk_size > 0)\n                or dyanmic chunk size(use_dynamic_chunk = True)\n            global_cmvn (Optional[torch.nn.Module]): Optional GlobalCMVN module\n            use_dynamic_left_chunk (bool): whether use dynamic left chunk in\n                dynamic chunk training\n            key_bias: whether use bias in attention.linear_k, False for whisper models.\n            gradient_checkpointing: rerunning a forward-pass segment for each\n                checkpointed segment during backward.\n        \"\"\"\n        super().__init__()\n        self._output_size = output_size\n\n        self.global_cmvn = global_cmvn\n        self.embed = COSYVOICE_SUBSAMPLE_CLASSES[input_layer](\n            input_size,\n            output_size,\n            dropout_rate,\n            COSYVOICE_EMB_CLASSES[pos_enc_layer_type](output_size,\n                                                      positional_dropout_rate),\n        )\n\n        self.normalize_before = normalize_before\n        self.after_norm = torch.nn.LayerNorm(output_size, eps=1e-5)\n        self.static_chunk_size = static_chunk_size\n        self.use_dynamic_chunk = use_dynamic_chunk\n        self.use_dynamic_left_chunk = use_dynamic_left_chunk\n        self.gradient_checkpointing = gradient_checkpointing\n\n    def output_size(self) -> int:\n        return self._output_size\n\n    def forward(\n        self,\n        xs: torch.Tensor,\n        xs_lens: torch.Tensor,\n        decoding_chunk_size: int = 0,\n        num_decoding_left_chunks: int = -1,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Embed positions in tensor.\n\n        Args:\n            xs: padded input tensor (B, T, D)\n            xs_lens: input length (B)\n            decoding_chunk_size: decoding chunk size for dynamic chunk\n                0: default for training, use random dynamic chunk.\n                <0: for decoding, use full chunk.\n                >0: for decoding, use fixed chunk size as set.\n            num_decoding_left_chunks: number of left chunks, this is for decoding,\n            the chunk size is decoding_chunk_size.\n                >=0: use num_decoding_left_chunks\n                <0: use all left chunks\n        Returns:\n            encoder output tensor xs, and subsampled masks\n            xs: padded output tensor (B, T' ~= T/subsample_rate, D)\n            masks: torch.Tensor batch padding mask after subsample\n                (B, 1, T' ~= T/subsample_rate)\n        NOTE(xcsong):\n            We pass the `__call__` method of the modules instead of `forward` to the\n            checkpointing API because `__call__` attaches all the hooks of the module.\n            https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690/2\n        \"\"\"\n        T = xs.size(1)\n        masks = ~make_pad_mask(xs_lens, T).unsqueeze(1)  # (B, 1, T)\n        if self.global_cmvn is not None:\n            xs = self.global_cmvn(xs)\n        xs, pos_emb, masks = self.embed(xs, masks)\n        mask_pad = masks  # (B, 1, T/subsample_rate)\n        chunk_masks = add_optional_chunk_mask(xs, masks,\n                                              self.use_dynamic_chunk,\n                                              self.use_dynamic_left_chunk,\n                                              decoding_chunk_size,\n                                              self.static_chunk_size,\n                                              num_decoding_left_chunks)\n        if self.gradient_checkpointing and self.training:\n            xs = self.forward_layers_checkpointed(xs, chunk_masks, pos_emb,\n                                                  mask_pad)\n        else:\n            xs = self.forward_layers(xs, chunk_masks, pos_emb, mask_pad)\n        if self.normalize_before:\n            xs = self.after_norm(xs)\n        # Here we assume the mask is not changed in encoder layers, so just\n        # return the masks before encoder layers, and the masks will be used\n        # for cross attention with decoder later\n        return xs, masks\n\n    def forward_layers(self, xs: torch.Tensor, chunk_masks: torch.Tensor,\n                       pos_emb: torch.Tensor,\n                       mask_pad: torch.Tensor) -> torch.Tensor:\n        for layer in self.encoders:\n            xs, chunk_masks, _, _ = layer(xs, chunk_masks, pos_emb, mask_pad)\n        return xs\n\n    @torch.jit.unused\n    def forward_layers_checkpointed(self, xs: torch.Tensor,\n                                    chunk_masks: torch.Tensor,\n                                    pos_emb: torch.Tensor,\n                                    mask_pad: torch.Tensor) -> torch.Tensor:\n        for layer in self.encoders:\n            xs, chunk_masks, _, _ = ckpt.checkpoint(layer.__call__, xs,\n                                                    chunk_masks, pos_emb,\n                                                    mask_pad)\n        return xs\n\n    @torch.jit.export\n    def forward_chunk(\n        self,\n        xs: torch.Tensor,\n        offset: int,\n        required_cache_size: int,\n        att_cache: torch.Tensor = torch.zeros(0, 0, 0, 0),\n        cnn_cache: torch.Tensor = torch.zeros(0, 0, 0, 0),\n        att_mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\" Forward just one chunk\n\n        Args:\n            xs (torch.Tensor): chunk input, with shape (b=1, time, mel-dim),\n                where `time == (chunk_size - 1) * subsample_rate + \\\n                        subsample.right_context + 1`\n            offset (int): current offset in encoder output time stamp\n            required_cache_size (int): cache size required for next chunk\n                compuation\n                >=0: actual cache size\n                <0: means all history cache is required\n            att_cache (torch.Tensor): cache tensor for KEY & VALUE in\n                transformer/conformer attention, with shape\n                (elayers, head, cache_t1, d_k * 2), where\n                `head * d_k == hidden-dim` and\n                `cache_t1 == chunk_size * num_decoding_left_chunks`.\n            cnn_cache (torch.Tensor): cache tensor for cnn_module in conformer,\n                (elayers, b=1, hidden-dim, cache_t2), where\n                `cache_t2 == cnn.lorder - 1`\n\n        Returns:\n            torch.Tensor: output of current input xs,\n                with shape (b=1, chunk_size, hidden-dim).\n            torch.Tensor: new attention cache required for next chunk, with\n                dynamic shape (elayers, head, ?, d_k * 2)\n                depending on required_cache_size.\n            torch.Tensor: new conformer cnn cache required for next chunk, with\n                same shape as the original cnn_cache.\n\n        \"\"\"\n        assert xs.size(0) == 1\n        # tmp_masks is just for interface compatibility\n        tmp_masks = torch.ones(1,\n                               xs.size(1),\n                               device=xs.device,\n                               dtype=torch.bool)\n        tmp_masks = tmp_masks.unsqueeze(1)\n        if self.global_cmvn is not None:\n            xs = self.global_cmvn(xs)\n        # NOTE(xcsong): Before embed, shape(xs) is (b=1, time, mel-dim)\n        xs, pos_emb, _ = self.embed(xs, tmp_masks, offset)\n        # NOTE(xcsong): After  embed, shape(xs) is (b=1, chunk_size, hidden-dim)\n        elayers, cache_t1 = att_cache.size(0), att_cache.size(2)\n        chunk_size = xs.size(1)\n        attention_key_size = cache_t1 + chunk_size\n        pos_emb = self.embed.position_encoding(offset=offset - cache_t1,\n                                               size=attention_key_size)\n        if required_cache_size < 0:\n            next_cache_start = 0\n        elif required_cache_size == 0:\n            next_cache_start = attention_key_size\n        else:\n            next_cache_start = max(attention_key_size - required_cache_size, 0)\n        r_att_cache = []\n        r_cnn_cache = []\n        for i, layer in enumerate(self.encoders):\n            # NOTE(xcsong): Before layer.forward\n            #   shape(att_cache[i:i + 1]) is (1, head, cache_t1, d_k * 2),\n            #   shape(cnn_cache[i])       is (b=1, hidden-dim, cache_t2)\n            xs, _, new_att_cache, new_cnn_cache = layer(\n                xs,\n                att_mask,\n                pos_emb,\n                att_cache=att_cache[i:i + 1] if elayers > 0 else att_cache,\n                cnn_cache=cnn_cache[i] if cnn_cache.size(0) > 0 else cnn_cache)\n            # NOTE(xcsong): After layer.forward\n            #   shape(new_att_cache) is (1, head, attention_key_size, d_k * 2),\n            #   shape(new_cnn_cache) is (b=1, hidden-dim, cache_t2)\n            r_att_cache.append(new_att_cache[:, :, next_cache_start:, :])\n            r_cnn_cache.append(new_cnn_cache.unsqueeze(0))\n        if self.normalize_before:\n            xs = self.after_norm(xs)\n\n        # NOTE(xcsong): shape(r_att_cache) is (elayers, head, ?, d_k * 2),\n        #   ? may be larger than cache_t1, it depends on required_cache_size\n        r_att_cache = torch.cat(r_att_cache, dim=0)\n        # NOTE(xcsong): shape(r_cnn_cache) is (e, b=1, hidden-dim, cache_t2)\n        r_cnn_cache = torch.cat(r_cnn_cache, dim=0)\n\n        return (xs, r_att_cache, r_cnn_cache)\n\n    @torch.jit.unused\n    def forward_chunk_by_chunk(\n        self,\n        xs: torch.Tensor,\n        decoding_chunk_size: int,\n        num_decoding_left_chunks: int = -1,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\" Forward input chunk by chunk with chunk_size like a streaming\n            fashion\n\n        Here we should pay special attention to computation cache in the\n        streaming style forward chunk by chunk. Three things should be taken\n        into account for computation in the current network:\n            1. transformer/conformer encoder layers output cache\n            2. convolution in conformer\n            3. convolution in subsampling\n\n        However, we don't implement subsampling cache for:\n            1. We can control subsampling module to output the right result by\n               overlapping input instead of cache left context, even though it\n               wastes some computation, but subsampling only takes a very\n               small fraction of computation in the whole model.\n            2. Typically, there are several covolution layers with subsampling\n               in subsampling module, it is tricky and complicated to do cache\n               with different convolution layers with different subsampling\n               rate.\n            3. Currently, nn.Sequential is used to stack all the convolution\n               layers in subsampling, we need to rewrite it to make it work\n               with cache, which is not preferred.\n        Args:\n            xs (torch.Tensor): (1, max_len, dim)\n            chunk_size (int): decoding chunk size\n        \"\"\"\n        assert decoding_chunk_size > 0\n        # The model is trained by static or dynamic chunk\n        assert self.static_chunk_size > 0 or self.use_dynamic_chunk\n        subsampling = self.embed.subsampling_rate\n        context = self.embed.right_context + 1  # Add current frame\n        stride = subsampling * decoding_chunk_size\n        decoding_window = (decoding_chunk_size - 1) * subsampling + context\n        num_frames = xs.size(1)\n        att_cache: torch.Tensor = torch.zeros((0, 0, 0, 0), device=xs.device)\n        cnn_cache: torch.Tensor = torch.zeros((0, 0, 0, 0), device=xs.device)\n        outputs = []\n        offset = 0\n        required_cache_size = decoding_chunk_size * num_decoding_left_chunks\n\n        # Feed forward overlap input step by step\n        for cur in range(0, num_frames - context + 1, stride):\n            end = min(cur + decoding_window, num_frames)\n            chunk_xs = xs[:, cur:end, :]\n            (y, att_cache,\n             cnn_cache) = self.forward_chunk(chunk_xs, offset,\n                                             required_cache_size, att_cache,\n                                             cnn_cache)\n            outputs.append(y)\n            offset += y.size(1)\n        ys = torch.cat(outputs, 1)\n        masks = torch.ones((1, 1, ys.size(1)),\n                           device=ys.device,\n                           dtype=torch.bool)\n        return ys, masks\n\n\nclass TransformerEncoder(BaseEncoder):\n    \"\"\"Transformer encoder module.\"\"\"\n\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        attention_dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"abs_pos\",\n        normalize_before: bool = True,\n        static_chunk_size: int = 0,\n        use_dynamic_chunk: bool = False,\n        global_cmvn: torch.nn.Module = None,\n        use_dynamic_left_chunk: bool = False,\n        key_bias: bool = True,\n        selfattention_layer_type: str = \"selfattn\",\n        activation_type: str = \"relu\",\n        gradient_checkpointing: bool = False,\n    ):\n        \"\"\" Construct TransformerEncoder\n\n        See Encoder for the meaning of each parameter.\n        \"\"\"\n        super().__init__(input_size, output_size, attention_heads,\n                         linear_units, num_blocks, dropout_rate,\n                         positional_dropout_rate, attention_dropout_rate,\n                         input_layer, pos_enc_layer_type, normalize_before,\n                         static_chunk_size, use_dynamic_chunk, global_cmvn,\n                         use_dynamic_left_chunk, gradient_checkpointing)\n        activation = COSYVOICE_ACTIVATION_CLASSES[activation_type]()\n        self.encoders = torch.nn.ModuleList([\n            TransformerEncoderLayer(\n                output_size,\n                COSYVOICE_ATTENTION_CLASSES[selfattention_layer_type](attention_heads,\n                                                                      output_size,\n                                                                      attention_dropout_rate,\n                                                                      key_bias),\n                PositionwiseFeedForward(output_size, linear_units,\n                                        dropout_rate, activation),\n                dropout_rate, normalize_before) for _ in range(num_blocks)\n        ])\n\n\nclass ConformerEncoder(BaseEncoder):\n    \"\"\"Conformer encoder module.\"\"\"\n\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        attention_dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"rel_pos\",\n        normalize_before: bool = True,\n        static_chunk_size: int = 0,\n        use_dynamic_chunk: bool = False,\n        global_cmvn: torch.nn.Module = None,\n        use_dynamic_left_chunk: bool = False,\n        positionwise_conv_kernel_size: int = 1,\n        macaron_style: bool = True,\n        selfattention_layer_type: str = \"rel_selfattn\",\n        activation_type: str = \"swish\",\n        use_cnn_module: bool = True,\n        cnn_module_kernel: int = 15,\n        causal: bool = False,\n        cnn_module_norm: str = \"batch_norm\",\n        key_bias: bool = True,\n        gradient_checkpointing: bool = False,\n    ):\n        \"\"\"Construct ConformerEncoder\n\n        Args:\n            input_size to use_dynamic_chunk, see in BaseEncoder\n            positionwise_conv_kernel_size (int): Kernel size of positionwise\n                conv1d layer.\n            macaron_style (bool): Whether to use macaron style for\n                positionwise layer.\n            selfattention_layer_type (str): Encoder attention layer type,\n                the parameter has no effect now, it's just for configure\n                compatibility.\n            activation_type (str): Encoder activation function type.\n            use_cnn_module (bool): Whether to use convolution module.\n            cnn_module_kernel (int): Kernel size of convolution module.\n            causal (bool): whether to use causal convolution or not.\n            key_bias: whether use bias in attention.linear_k, False for whisper models.\n        \"\"\"\n        super().__init__(input_size, output_size, attention_heads,\n                         linear_units, num_blocks, dropout_rate,\n                         positional_dropout_rate, attention_dropout_rate,\n                         input_layer, pos_enc_layer_type, normalize_before,\n                         static_chunk_size, use_dynamic_chunk, global_cmvn,\n                         use_dynamic_left_chunk, gradient_checkpointing)\n        activation = COSYVOICE_ACTIVATION_CLASSES[activation_type]()\n\n        # self-attention module definition\n        encoder_selfattn_layer_args = (\n            attention_heads,\n            output_size,\n            attention_dropout_rate,\n            key_bias,\n        )\n        # feed-forward module definition\n        positionwise_layer_args = (\n            output_size,\n            linear_units,\n            dropout_rate,\n            activation,\n        )\n        # convolution module definition\n        convolution_layer_args = (output_size, cnn_module_kernel, activation,\n                                  cnn_module_norm, causal)\n\n        self.encoders = torch.nn.ModuleList([\n            ConformerEncoderLayer(\n                output_size,\n                COSYVOICE_ATTENTION_CLASSES[selfattention_layer_type](\n                    *encoder_selfattn_layer_args),\n                PositionwiseFeedForward(*positionwise_layer_args),\n                PositionwiseFeedForward(\n                    *positionwise_layer_args) if macaron_style else None,\n                ConvolutionModule(\n                    *convolution_layer_args) if use_cnn_module else None,\n                dropout_rate,\n                normalize_before,\n            ) for _ in range(num_blocks)\n        ])\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/encoder_layer.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc (Binbin Zhang, Di Wu)\n#               2022 Xingchen Song (sxc19@mails.tsinghua.edu.cn)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Encoder self-attention layer definition.\"\"\"\n\nfrom typing import Optional, Tuple\n\nimport torch\nfrom torch import nn\n\n\nclass TransformerEncoderLayer(nn.Module):\n    \"\"\"Encoder layer module.\n\n    Args:\n        size (int): Input dimension.\n        self_attn (torch.nn.Module): Self-attention module instance.\n            `MultiHeadedAttention` or `RelPositionMultiHeadedAttention`\n            instance can be used as the argument.\n        feed_forward (torch.nn.Module): Feed-forward module instance.\n            `PositionwiseFeedForward`, instance can be used as the argument.\n        dropout_rate (float): Dropout rate.\n        normalize_before (bool):\n            True: use layer_norm before each sub-block.\n            False: to use layer_norm after each sub-block.\n    \"\"\"\n\n    def __init__(\n        self,\n        size: int,\n        self_attn: torch.nn.Module,\n        feed_forward: torch.nn.Module,\n        dropout_rate: float,\n        normalize_before: bool = True,\n    ):\n        \"\"\"Construct an EncoderLayer object.\"\"\"\n        super().__init__()\n        self.self_attn = self_attn\n        self.feed_forward = feed_forward\n        self.norm1 = nn.LayerNorm(size, eps=1e-12)\n        self.norm2 = nn.LayerNorm(size, eps=1e-12)\n        self.dropout = nn.Dropout(dropout_rate)\n        self.size = size\n        self.normalize_before = normalize_before\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        mask: torch.Tensor,\n        pos_emb: torch.Tensor,\n        mask_pad: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        att_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n        cnn_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Compute encoded features.\n\n        Args:\n            x (torch.Tensor): (#batch, time, size)\n            mask (torch.Tensor): Mask tensor for the input (#batch, time，time),\n                (0, 0, 0) means fake mask.\n            pos_emb (torch.Tensor): just for interface compatibility\n                to ConformerEncoderLayer\n            mask_pad (torch.Tensor): does not used in transformer layer,\n                just for unified api with conformer.\n            att_cache (torch.Tensor): Cache tensor of the KEY & VALUE\n                (#batch=1, head, cache_t1, d_k * 2), head * d_k == size.\n            cnn_cache (torch.Tensor): Convolution cache in conformer layer\n                (#batch=1, size, cache_t2), not used here, it's for interface\n                compatibility to ConformerEncoderLayer.\n        Returns:\n            torch.Tensor: Output tensor (#batch, time, size).\n            torch.Tensor: Mask tensor (#batch, time, time).\n            torch.Tensor: att_cache tensor,\n                (#batch=1, head, cache_t1 + time, d_k * 2).\n            torch.Tensor: cnn_cahce tensor (#batch=1, size, cache_t2).\n\n        \"\"\"\n        residual = x\n        if self.normalize_before:\n            x = self.norm1(x)\n        x_att, new_att_cache = self.self_attn(x, x, x, mask, pos_emb=pos_emb, cache=att_cache)\n        x = residual + self.dropout(x_att)\n        if not self.normalize_before:\n            x = self.norm1(x)\n\n        residual = x\n        if self.normalize_before:\n            x = self.norm2(x)\n        x = residual + self.dropout(self.feed_forward(x))\n        if not self.normalize_before:\n            x = self.norm2(x)\n\n        fake_cnn_cache = torch.zeros((0, 0, 0), dtype=x.dtype, device=x.device)\n        return x, mask, new_att_cache, fake_cnn_cache\n\n\nclass ConformerEncoderLayer(nn.Module):\n    \"\"\"Encoder layer module.\n    Args:\n        size (int): Input dimension.\n        self_attn (torch.nn.Module): Self-attention module instance.\n            `MultiHeadedAttention` or `RelPositionMultiHeadedAttention`\n            instance can be used as the argument.\n        feed_forward (torch.nn.Module): Feed-forward module instance.\n            `PositionwiseFeedForward` instance can be used as the argument.\n        feed_forward_macaron (torch.nn.Module): Additional feed-forward module\n             instance.\n            `PositionwiseFeedForward` instance can be used as the argument.\n        conv_module (torch.nn.Module): Convolution module instance.\n            `ConvlutionModule` instance can be used as the argument.\n        dropout_rate (float): Dropout rate.\n        normalize_before (bool):\n            True: use layer_norm before each sub-block.\n            False: use layer_norm after each sub-block.\n    \"\"\"\n\n    def __init__(\n        self,\n        size: int,\n        self_attn: torch.nn.Module,\n        feed_forward: Optional[nn.Module] = None,\n        feed_forward_macaron: Optional[nn.Module] = None,\n        conv_module: Optional[nn.Module] = None,\n        dropout_rate: float = 0.1,\n        normalize_before: bool = True,\n    ):\n        \"\"\"Construct an EncoderLayer object.\"\"\"\n        super().__init__()\n        self.self_attn = self_attn\n        self.feed_forward = feed_forward\n        self.feed_forward_macaron = feed_forward_macaron\n        self.conv_module = conv_module\n        self.norm_ff = nn.LayerNorm(size, eps=1e-12)  # for the FNN module\n        self.norm_mha = nn.LayerNorm(size, eps=1e-12)  # for the MHA module\n        if feed_forward_macaron is not None:\n            self.norm_ff_macaron = nn.LayerNorm(size, eps=1e-12)\n            self.ff_scale = 0.5\n        else:\n            self.ff_scale = 1.0\n        if self.conv_module is not None:\n            self.norm_conv = nn.LayerNorm(size, eps=1e-12)  # for the CNN module\n            self.norm_final = nn.LayerNorm(\n                size, eps=1e-12)  # for the final output of the block\n        self.dropout = nn.Dropout(dropout_rate)\n        self.size = size\n        self.normalize_before = normalize_before\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        mask: torch.Tensor,\n        pos_emb: torch.Tensor,\n        mask_pad: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        att_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n        cnn_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Compute encoded features.\n\n        Args:\n            x (torch.Tensor): (#batch, time, size)\n            mask (torch.Tensor): Mask tensor for the input (#batch, time，time),\n                (0, 0, 0) means fake mask.\n            pos_emb (torch.Tensor): positional encoding, must not be None\n                for ConformerEncoderLayer.\n            mask_pad (torch.Tensor): batch padding mask used for conv module.\n                (#batch, 1，time), (0, 0, 0) means fake mask.\n            att_cache (torch.Tensor): Cache tensor of the KEY & VALUE\n                (#batch=1, head, cache_t1, d_k * 2), head * d_k == size.\n            cnn_cache (torch.Tensor): Convolution cache in conformer layer\n                (#batch=1, size, cache_t2)\n        Returns:\n            torch.Tensor: Output tensor (#batch, time, size).\n            torch.Tensor: Mask tensor (#batch, time, time).\n            torch.Tensor: att_cache tensor,\n                (#batch=1, head, cache_t1 + time, d_k * 2).\n            torch.Tensor: cnn_cahce tensor (#batch, size, cache_t2).\n        \"\"\"\n\n        # whether to use macaron style\n        if self.feed_forward_macaron is not None:\n            residual = x\n            if self.normalize_before:\n                x = self.norm_ff_macaron(x)\n            x = residual + self.ff_scale * self.dropout(\n                self.feed_forward_macaron(x))\n            if not self.normalize_before:\n                x = self.norm_ff_macaron(x)\n\n        # multi-headed self-attention module\n        residual = x\n        if self.normalize_before:\n            x = self.norm_mha(x)\n        x_att, new_att_cache = self.self_attn(x, x, x, mask, pos_emb,\n                                              att_cache)\n        x = residual + self.dropout(x_att)\n        if not self.normalize_before:\n            x = self.norm_mha(x)\n\n        # convolution module\n        # Fake new cnn cache here, and then change it in conv_module\n        new_cnn_cache = torch.zeros((0, 0, 0), dtype=x.dtype, device=x.device)\n        if self.conv_module is not None:\n            residual = x\n            if self.normalize_before:\n                x = self.norm_conv(x)\n            x, new_cnn_cache = self.conv_module(x, mask_pad, cnn_cache)\n            x = residual + self.dropout(x)\n\n            if not self.normalize_before:\n                x = self.norm_conv(x)\n\n        # feed forward module\n        residual = x\n        if self.normalize_before:\n            x = self.norm_ff(x)\n\n        x = residual + self.ff_scale * self.dropout(self.feed_forward(x))\n        if not self.normalize_before:\n            x = self.norm_ff(x)\n\n        if self.conv_module is not None:\n            x = self.norm_final(x)\n\n        return x, mask, new_att_cache, new_cnn_cache\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/label_smoothing_loss.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Label smoothing module.\"\"\"\n\nimport torch\nfrom torch import nn\n\n\nclass LabelSmoothingLoss(nn.Module):\n    \"\"\"Label-smoothing loss.\n\n    In a standard CE loss, the label's data distribution is:\n    [0,1,2] ->\n    [\n        [1.0, 0.0, 0.0],\n        [0.0, 1.0, 0.0],\n        [0.0, 0.0, 1.0],\n    ]\n\n    In the smoothing version CE Loss,some probabilities\n    are taken from the true label prob (1.0) and are divided\n    among other labels.\n\n    e.g.\n    smoothing=0.1\n    [0,1,2] ->\n    [\n        [0.9, 0.05, 0.05],\n        [0.05, 0.9, 0.05],\n        [0.05, 0.05, 0.9],\n    ]\n\n    Args:\n        size (int): the number of class\n        padding_idx (int): padding class id which will be ignored for loss\n        smoothing (float): smoothing rate (0.0 means the conventional CE)\n        normalize_length (bool):\n            normalize loss by sequence length if True\n            normalize loss by batch size if False\n    \"\"\"\n\n    def __init__(self,\n                 size: int,\n                 padding_idx: int,\n                 smoothing: float,\n                 normalize_length: bool = False):\n        \"\"\"Construct an LabelSmoothingLoss object.\"\"\"\n        super(LabelSmoothingLoss, self).__init__()\n        self.criterion = nn.KLDivLoss(reduction=\"none\")\n        self.padding_idx = padding_idx\n        self.confidence = 1.0 - smoothing\n        self.smoothing = smoothing\n        self.size = size\n        self.normalize_length = normalize_length\n\n    def forward(self, x: torch.Tensor, target: torch.Tensor) -> torch.Tensor:\n        \"\"\"Compute loss between x and target.\n\n        The model outputs and data labels tensors are flatten to\n        (batch*seqlen, class) shape and a mask is applied to the\n        padding part which should not be calculated for loss.\n\n        Args:\n            x (torch.Tensor): prediction (batch, seqlen, class)\n            target (torch.Tensor):\n                target signal masked with self.padding_id (batch, seqlen)\n        Returns:\n            loss (torch.Tensor) : The KL loss, scalar float value\n        \"\"\"\n        assert x.size(2) == self.size\n        batch_size = x.size(0)\n        x = x.view(-1, self.size)\n        target = target.view(-1)\n        # use zeros_like instead of torch.no_grad() for true_dist,\n        # since no_grad() can not be exported by JIT\n        true_dist = torch.zeros_like(x)\n        true_dist.fill_(self.smoothing / (self.size - 1))\n        ignore = target == self.padding_idx  # (B,)\n        total = len(target) - ignore.sum().item()\n        target = target.masked_fill(ignore, 0)  # avoid -1 index\n        true_dist.scatter_(1, target.unsqueeze(1), self.confidence)\n        kl = self.criterion(torch.log_softmax(x, dim=1), true_dist)\n        denom = total if self.normalize_length else batch_size\n        return kl.masked_fill(ignore.unsqueeze(1), 0).sum() / denom\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/positionwise_feed_forward.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Positionwise feed forward layer definition.\"\"\"\n\nimport torch\n\n\nclass PositionwiseFeedForward(torch.nn.Module):\n    \"\"\"Positionwise feed forward layer.\n\n    FeedForward are appied on each position of the sequence.\n    The output dim is same with the input dim.\n\n    Args:\n        idim (int): Input dimenstion.\n        hidden_units (int): The number of hidden units.\n        dropout_rate (float): Dropout rate.\n        activation (torch.nn.Module): Activation function\n    \"\"\"\n\n    def __init__(\n            self,\n            idim: int,\n            hidden_units: int,\n            dropout_rate: float,\n            activation: torch.nn.Module = torch.nn.ReLU(),\n    ):\n        \"\"\"Construct a PositionwiseFeedForward object.\"\"\"\n        super(PositionwiseFeedForward, self).__init__()\n        self.w_1 = torch.nn.Linear(idim, hidden_units)\n        self.activation = activation\n        self.dropout = torch.nn.Dropout(dropout_rate)\n        self.w_2 = torch.nn.Linear(hidden_units, idim)\n\n    def forward(self, xs: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            xs: input tensor (B, L, D)\n        Returns:\n            output tensor, (B, L, D)\n        \"\"\"\n        return self.w_2(self.dropout(self.activation(self.w_1(xs))))\n\n\nclass MoEFFNLayer(torch.nn.Module):\n    \"\"\"\n    Mixture of expert with Positionwise feed forward layer\n    See also figure 1 in https://arxiv.org/pdf/2305.15663.pdf\n    The output dim is same with the input dim.\n\n    Modified from https://github.com/Lightning-AI/lit-gpt/pull/823\n                  https://github.com/mistralai/mistral-src/blob/b46d6/moe_one_file_ref.py#L203-L219\n    Args:\n        n_expert: number of expert.\n        n_expert_per_token: The actual number of experts used for each frame\n        idim (int): Input dimenstion.\n        hidden_units (int): The number of hidden units.\n        dropout_rate (float): Dropout rate.\n        activation (torch.nn.Module): Activation function\n    \"\"\"\n\n    def __init__(\n            self,\n            n_expert: int,\n            n_expert_per_token: int,\n            idim: int,\n            hidden_units: int,\n            dropout_rate: float,\n            activation: torch.nn.Module = torch.nn.ReLU(),\n    ):\n        super(MoEFFNLayer, self).__init__()\n        self.gate = torch.nn.Linear(idim, n_expert, bias=False)\n        self.experts = torch.nn.ModuleList(\n            PositionwiseFeedForward(idim, hidden_units, dropout_rate,\n                                    activation) for _ in range(n_expert))\n        self.n_expert_per_token = n_expert_per_token\n\n    def forward(self, xs: torch.Tensor) -> torch.Tensor:\n        \"\"\"Foward function.\n        Args:\n            xs: input tensor (B, L, D)\n        Returns:\n            output tensor, (B, L, D)\n\n        \"\"\"\n        B, L, D = xs.size(\n        )  # batch size, sequence length, embedding dimension (idim)\n        xs = xs.view(-1, D)  # (B*L, D)\n        router = self.gate(xs)  # (B*L, n_expert)\n        logits, indices = torch.topk(\n            router, self.n_expert_per_token\n        )  # probs:(B*L, n_expert), indices: (B*L, n_expert)\n        weights = torch.nn.functional.softmax(\n            logits, dim=1,\n            dtype=torch.float).to(dtype=xs.dtype)  # (B*L, n_expert_per_token)\n        output = torch.zeros_like(xs)  # (B*L, D)\n        for i, expert in enumerate(self.experts):\n            mask = indices == i\n            batch_idx, ith_expert = torch.where(mask)\n            output[batch_idx] += weights[batch_idx, ith_expert, None] * expert(\n                xs[batch_idx])\n        return output.view(B, L, D)\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/subsampling.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc (Binbin Zhang, Di Wu)\n#               2024 Alibaba Inc (Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Subsampling layer definition.\"\"\"\n\nfrom typing import Tuple, Union\n\nimport torch\n\n\nclass BaseSubsampling(torch.nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.right_context = 0\n        self.subsampling_rate = 1\n\n    def position_encoding(self, offset: Union[int, torch.Tensor],\n                          size: int) -> torch.Tensor:\n        return self.pos_enc.position_encoding(offset, size)\n\n\nclass EmbedinigNoSubsampling(BaseSubsampling):\n    \"\"\"Embedding input without subsampling\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        super().__init__()\n        self.embed = torch.nn.Embedding(idim, odim)\n        self.pos_enc = pos_enc_class\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Input x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: linear input tensor (#batch, time', odim),\n                where time' = time .\n            torch.Tensor: linear input mask (#batch, 1, time'),\n                where time' = time .\n\n        \"\"\"\n        x = self.embed(x)\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask\n\n\nclass LinearNoSubsampling(BaseSubsampling):\n    \"\"\"Linear transform the input without subsampling\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an linear object.\"\"\"\n        super().__init__()\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(idim, odim),\n            torch.nn.LayerNorm(odim, eps=1e-5),\n            torch.nn.Dropout(dropout_rate),\n        )\n        self.pos_enc = pos_enc_class\n        self.right_context = 0\n        self.subsampling_rate = 1\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Input x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: linear input tensor (#batch, time', odim),\n                where time' = time .\n            torch.Tensor: linear input mask (#batch, 1, time'),\n                where time' = time .\n\n        \"\"\"\n        x = self.out(x)\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask\n\n\nclass Conv1dSubsampling2(BaseSubsampling):\n    \"\"\"Convolutional 1D subsampling (to 1/2 length).\n       It is designed for Whisper, ref:\n       https://github.com/openai/whisper/blob/main/whisper/model.py\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv1dSubsampling2 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv1d(idim, odim, kernel_size=3, padding=1),\n            torch.nn.GELU(),\n            torch.nn.Conv1d(odim, odim, kernel_size=3, stride=2, padding=1),\n            torch.nn.GELU(),\n        )\n        self.pos_enc = pos_enc_class\n        # The right context for every conv layer is computed by:\n        # (kernel_size - 1) * frame_rate_of_this_layer\n        self.subsampling_rate = 2\n        # 4 = (3 - 1) * 1 + (3 - 1) * 1\n        self.right_context = 4\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 2.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 2.\n            torch.Tensor: positional encoding\n\n        \"\"\"\n        time = x.size(1)\n        x = x.transpose(1, 2)  # (b, f, t)\n        x = self.conv(x)\n        x = x.transpose(1, 2)  # (b, t, f)\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, (time + 1) % 2::2]\n\n\nclass Conv2dSubsampling4(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/4 length).\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling4 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 3, 2),\n            torch.nn.ReLU(),\n        )\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(odim * (((idim - 1) // 2 - 1) // 2), odim))\n        self.pos_enc = pos_enc_class\n        # The right context for every conv layer is computed by:\n        # (kernel_size - 1) * frame_rate_of_this_layer\n        self.subsampling_rate = 4\n        # 6 = (3 - 1) * 1 + (3 - 1) * 2\n        self.right_context = 6\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 4.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 4.\n            torch.Tensor: positional encoding\n\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c=1, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.out(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2][:, :, 2::2]\n\n\nclass Conv2dSubsampling6(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/6 length).\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n        pos_enc (torch.nn.Module): Custom position encoding layer.\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling6 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 5, 3),\n            torch.nn.ReLU(),\n        )\n        self.linear = torch.nn.Linear(odim * (((idim - 1) // 2 - 2) // 3),\n                                      odim)\n        self.pos_enc = pos_enc_class\n        # 10 = (3 - 1) * 1 + (5 - 1) * 2\n        self.subsampling_rate = 6\n        self.right_context = 10\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 6.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 6.\n            torch.Tensor: positional encoding\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.linear(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2][:, :, 4::3]\n\n\nclass Conv2dSubsampling8(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/8 length).\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling8 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 3, 2),\n            torch.nn.ReLU(),\n        )\n        self.linear = torch.nn.Linear(\n            odim * ((((idim - 1) // 2 - 1) // 2 - 1) // 2), odim)\n        self.pos_enc = pos_enc_class\n        self.subsampling_rate = 8\n        # 14 = (3 - 1) * 1 + (3 - 1) * 2 + (3 - 1) * 4\n        self.right_context = 14\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 8.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 8.\n            torch.Tensor: positional encoding\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.linear(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2][:, :, 2::2][:, :, 2::2]\n\n\nclass LegacyLinearNoSubsampling(BaseSubsampling):\n    \"\"\"Linear transform the input without subsampling\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an linear object.\"\"\"\n        super().__init__()\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(idim, odim),\n            torch.nn.LayerNorm(odim, eps=1e-5),\n            torch.nn.Dropout(dropout_rate),\n            torch.nn.ReLU(),\n        )\n        self.pos_enc = pos_enc_class\n        self.right_context = 0\n        self.subsampling_rate = 1\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Input x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: linear input tensor (#batch, time', odim),\n                where time' = time .\n            torch.Tensor: linear input mask (#batch, 1, time'),\n                where time' = time .\n\n        \"\"\"\n        x = self.out(x)\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/transformer/upsample_encoder.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc (Binbin Zhang, Di Wu)\n#               2022 Xingchen Song (sxc19@mails.tsinghua.edu.cn)\n#               2024 Alibaba Inc (Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Encoder definition.\"\"\"\nfrom typing import Tuple\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom cosyvoice.transformer.convolution import ConvolutionModule\nfrom cosyvoice.transformer.encoder_layer import ConformerEncoderLayer\nfrom cosyvoice.transformer.positionwise_feed_forward import PositionwiseFeedForward\nfrom cosyvoice.utils.class_utils import (\n    COSYVOICE_EMB_CLASSES,\n    COSYVOICE_SUBSAMPLE_CLASSES,\n    COSYVOICE_ATTENTION_CLASSES,\n    COSYVOICE_ACTIVATION_CLASSES,\n)\nfrom cosyvoice.utils.mask import make_pad_mask\nfrom cosyvoice.utils.mask import add_optional_chunk_mask\n\n\nclass Upsample1D(nn.Module):\n    \"\"\"A 1D upsampling layer with an optional convolution.\n\n    Parameters:\n        channels (`int`):\n            number of channels in the inputs and outputs.\n        use_conv (`bool`, default `False`):\n            option to use a convolution.\n        use_conv_transpose (`bool`, default `False`):\n            option to use a convolution transpose.\n        out_channels (`int`, optional):\n            number of output channels. Defaults to `channels`.\n    \"\"\"\n\n    def __init__(self, channels: int, out_channels: int, stride: int = 2):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels\n        self.stride = stride\n        # In this mode, first repeat interpolate, than conv with stride=1\n        self.conv = nn.Conv1d(self.channels, self.out_channels, stride * 2 + 1, stride=1, padding=0)\n\n    def forward(self, inputs: torch.Tensor, input_lengths: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:\n        outputs = F.interpolate(inputs, scale_factor=float(self.stride), mode=\"nearest\")\n        outputs = F.pad(outputs, (self.stride * 2, 0), value=0.0)\n        outputs = self.conv(outputs)\n        return outputs, input_lengths * self.stride\n\n\nclass PreLookaheadLayer(nn.Module):\n    def __init__(self, channels: int, pre_lookahead_len: int = 1):\n        super().__init__()\n        self.channels = channels\n        self.pre_lookahead_len = pre_lookahead_len\n        self.conv1 = nn.Conv1d(\n            channels, channels,\n            kernel_size=pre_lookahead_len + 1,\n            stride=1, padding=0,\n        )\n        self.conv2 = nn.Conv1d(\n            channels, channels,\n            kernel_size=3, stride=1, padding=0,\n        )\n\n    def forward(self, inputs: torch.Tensor, context: torch.Tensor = torch.zeros(0, 0, 0)) -> torch.Tensor:\n        \"\"\"\n        inputs: (batch_size, seq_len, channels)\n        \"\"\"\n        outputs = inputs.transpose(1, 2).contiguous()\n        context = context.transpose(1, 2).contiguous()\n        # look ahead\n        if context.size(2) == 0:\n            outputs = F.pad(outputs, (0, self.pre_lookahead_len), mode='constant', value=0.0)\n        else:\n            assert self.training is False, 'you have passed context, make sure that you are running inference mode'\n            assert context.size(2) == self.pre_lookahead_len\n            outputs = F.pad(torch.concat([outputs, context], dim=2), (0, self.pre_lookahead_len - context.size(2)), mode='constant', value=0.0)\n        outputs = F.leaky_relu(self.conv1(outputs))\n        # outputs\n        outputs = F.pad(outputs, (self.conv2.kernel_size[0] - 1, 0), mode='constant', value=0.0)\n        outputs = self.conv2(outputs)\n        outputs = outputs.transpose(1, 2).contiguous()\n\n        # residual connection\n        outputs = outputs + inputs\n        return outputs\n\n\nclass UpsampleConformerEncoder(torch.nn.Module):\n\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        attention_dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"rel_pos\",\n        normalize_before: bool = True,\n        static_chunk_size: int = 0,\n        use_dynamic_chunk: bool = False,\n        global_cmvn: torch.nn.Module = None,\n        use_dynamic_left_chunk: bool = False,\n        positionwise_conv_kernel_size: int = 1,\n        macaron_style: bool = True,\n        selfattention_layer_type: str = \"rel_selfattn\",\n        activation_type: str = \"swish\",\n        use_cnn_module: bool = True,\n        cnn_module_kernel: int = 15,\n        causal: bool = False,\n        cnn_module_norm: str = \"batch_norm\",\n        key_bias: bool = True,\n        gradient_checkpointing: bool = False,\n    ):\n        \"\"\"\n        Args:\n            input_size (int): input dim\n            output_size (int): dimension of attention\n            attention_heads (int): the number of heads of multi head attention\n            linear_units (int): the hidden units number of position-wise feed\n                forward\n            num_blocks (int): the number of decoder blocks\n            dropout_rate (float): dropout rate\n            attention_dropout_rate (float): dropout rate in attention\n            positional_dropout_rate (float): dropout rate after adding\n                positional encoding\n            input_layer (str): input layer type.\n                optional [linear, conv2d, conv2d6, conv2d8]\n            pos_enc_layer_type (str): Encoder positional encoding layer type.\n                opitonal [abs_pos, scaled_abs_pos, rel_pos, no_pos]\n            normalize_before (bool):\n                True: use layer_norm before each sub-block of a layer.\n                False: use layer_norm after each sub-block of a layer.\n            static_chunk_size (int): chunk size for static chunk training and\n                decoding\n            use_dynamic_chunk (bool): whether use dynamic chunk size for\n                training or not, You can only use fixed chunk(chunk_size > 0)\n                or dyanmic chunk size(use_dynamic_chunk = True)\n            global_cmvn (Optional[torch.nn.Module]): Optional GlobalCMVN module\n            use_dynamic_left_chunk (bool): whether use dynamic left chunk in\n                dynamic chunk training\n            key_bias: whether use bias in attention.linear_k, False for whisper models.\n            gradient_checkpointing: rerunning a forward-pass segment for each\n                checkpointed segment during backward.\n        \"\"\"\n        super().__init__()\n        self._output_size = output_size\n\n        self.global_cmvn = global_cmvn\n        self.embed = COSYVOICE_SUBSAMPLE_CLASSES[input_layer](\n            input_size,\n            output_size,\n            dropout_rate,\n            COSYVOICE_EMB_CLASSES[pos_enc_layer_type](output_size,\n                                                      positional_dropout_rate),\n        )\n\n        self.normalize_before = normalize_before\n        self.after_norm = torch.nn.LayerNorm(output_size, eps=1e-5)\n        self.static_chunk_size = static_chunk_size\n        self.use_dynamic_chunk = use_dynamic_chunk\n        self.use_dynamic_left_chunk = use_dynamic_left_chunk\n        self.gradient_checkpointing = gradient_checkpointing\n        activation = COSYVOICE_ACTIVATION_CLASSES[activation_type]()\n        # self-attention module definition\n        encoder_selfattn_layer_args = (\n            attention_heads,\n            output_size,\n            attention_dropout_rate,\n            key_bias,\n        )\n        # feed-forward module definition\n        positionwise_layer_args = (\n            output_size,\n            linear_units,\n            dropout_rate,\n            activation,\n        )\n        # convolution module definition\n        convolution_layer_args = (output_size, cnn_module_kernel, activation,\n                                  cnn_module_norm, causal)\n        self.pre_lookahead_layer = PreLookaheadLayer(channels=512, pre_lookahead_len=3)\n        self.encoders = torch.nn.ModuleList([\n            ConformerEncoderLayer(\n                output_size,\n                COSYVOICE_ATTENTION_CLASSES[selfattention_layer_type](\n                    *encoder_selfattn_layer_args),\n                PositionwiseFeedForward(*positionwise_layer_args),\n                PositionwiseFeedForward(\n                    *positionwise_layer_args) if macaron_style else None,\n                ConvolutionModule(\n                    *convolution_layer_args) if use_cnn_module else None,\n                dropout_rate,\n                normalize_before,\n            ) for _ in range(num_blocks)\n        ])\n        self.up_layer = Upsample1D(channels=512, out_channels=512, stride=2)\n        self.up_embed = COSYVOICE_SUBSAMPLE_CLASSES[input_layer](\n            input_size,\n            output_size,\n            dropout_rate,\n            COSYVOICE_EMB_CLASSES[pos_enc_layer_type](output_size,\n                                                      positional_dropout_rate),\n        )\n        self.up_encoders = torch.nn.ModuleList([\n            ConformerEncoderLayer(\n                output_size,\n                COSYVOICE_ATTENTION_CLASSES[selfattention_layer_type](\n                    *encoder_selfattn_layer_args),\n                PositionwiseFeedForward(*positionwise_layer_args),\n                PositionwiseFeedForward(\n                    *positionwise_layer_args) if macaron_style else None,\n                ConvolutionModule(\n                    *convolution_layer_args) if use_cnn_module else None,\n                dropout_rate,\n                normalize_before,\n            ) for _ in range(4)\n        ])\n\n    def output_size(self) -> int:\n        return self._output_size\n\n    def forward(\n        self,\n        xs: torch.Tensor,\n        xs_lens: torch.Tensor,\n        context: torch.Tensor = torch.zeros(0, 0, 0),\n        decoding_chunk_size: int = 0,\n        num_decoding_left_chunks: int = -1,\n        streaming: bool = False,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Embed positions in tensor.\n\n        Args:\n            xs: padded input tensor (B, T, D)\n            xs_lens: input length (B)\n            decoding_chunk_size: decoding chunk size for dynamic chunk\n                0: default for training, use random dynamic chunk.\n                <0: for decoding, use full chunk.\n                >0: for decoding, use fixed chunk size as set.\n            num_decoding_left_chunks: number of left chunks, this is for decoding,\n            the chunk size is decoding_chunk_size.\n                >=0: use num_decoding_left_chunks\n                <0: use all left chunks\n        Returns:\n            encoder output tensor xs, and subsampled masks\n            xs: padded output tensor (B, T' ~= T/subsample_rate, D)\n            masks: torch.Tensor batch padding mask after subsample\n                (B, 1, T' ~= T/subsample_rate)\n        NOTE(xcsong):\n            We pass the `__call__` method of the modules instead of `forward` to the\n            checkpointing API because `__call__` attaches all the hooks of the module.\n            https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690/2\n        \"\"\"\n        T = xs.size(1)\n        masks = ~make_pad_mask(xs_lens, T).unsqueeze(1)  # (B, 1, T)\n        if self.global_cmvn is not None:\n            xs = self.global_cmvn(xs)\n        xs, pos_emb, masks = self.embed(xs, masks)\n        if context.size(1) != 0:\n            assert self.training is False, 'you have passed context, make sure that you are running inference mode'\n            context_masks = torch.ones(1, 1, context.size(1)).to(masks)\n            context, _, _ = self.embed(context, context_masks, offset=xs.size(1))\n        mask_pad = masks  # (B, 1, T/subsample_rate)\n        chunk_masks = add_optional_chunk_mask(xs, masks, False, False, 0, self.static_chunk_size if streaming is True else 0, -1)\n        # lookahead + conformer encoder\n        xs = self.pre_lookahead_layer(xs, context=context)\n        xs = self.forward_layers(xs, chunk_masks, pos_emb, mask_pad)\n\n        # upsample + conformer encoder\n        xs = xs.transpose(1, 2).contiguous()\n        xs, xs_lens = self.up_layer(xs, xs_lens)\n        xs = xs.transpose(1, 2).contiguous()\n        T = xs.size(1)\n        masks = ~make_pad_mask(xs_lens, T).unsqueeze(1)  # (B, 1, T)\n        xs, pos_emb, masks = self.up_embed(xs, masks)\n        mask_pad = masks  # (B, 1, T/subsample_rate)\n        chunk_masks = add_optional_chunk_mask(xs, masks, False, False, 0, self.static_chunk_size * self.up_layer.stride if streaming is True else 0, -1)\n        xs = self.forward_up_layers(xs, chunk_masks, pos_emb, mask_pad)\n\n        if self.normalize_before:\n            xs = self.after_norm(xs)\n        # Here we assume the mask is not changed in encoder layers, so just\n        # return the masks before encoder layers, and the masks will be used\n        # for cross attention with decoder later\n        return xs, masks\n\n    def forward_layers(self, xs: torch.Tensor, chunk_masks: torch.Tensor,\n                       pos_emb: torch.Tensor,\n                       mask_pad: torch.Tensor) -> torch.Tensor:\n        for layer in self.encoders:\n            xs, chunk_masks, _, _ = layer(xs, chunk_masks, pos_emb, mask_pad)\n        return xs\n\n    def forward_up_layers(self, xs: torch.Tensor, chunk_masks: torch.Tensor,\n                          pos_emb: torch.Tensor,\n                          mask_pad: torch.Tensor) -> torch.Tensor:\n        for layer in self.up_encoders:\n            xs, chunk_masks, _, _ = layer(xs, chunk_masks, pos_emb, mask_pad)\n        return xs\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/class_utils.py",
    "content": "# Copyright [2023-11-28] <sxc19@mails.tsinghua.edu.cn, Xingchen Song>\n#            2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport torch\n\nfrom cosyvoice.transformer.activation import Swish\nfrom cosyvoice.transformer.subsampling import (\n    LinearNoSubsampling,\n    EmbedinigNoSubsampling,\n    Conv1dSubsampling2,\n    Conv2dSubsampling4,\n    Conv2dSubsampling6,\n    Conv2dSubsampling8,\n)\nfrom cosyvoice.transformer.embedding import (PositionalEncoding,\n                                             RelPositionalEncoding,\n                                             WhisperPositionalEncoding,\n                                             LearnablePositionalEncoding,\n                                             NoPositionalEncoding)\nfrom cosyvoice.transformer.attention import (MultiHeadedAttention,\n                                             RelPositionMultiHeadedAttention)\nfrom cosyvoice.transformer.embedding import EspnetRelPositionalEncoding\nfrom cosyvoice.transformer.subsampling import LegacyLinearNoSubsampling\nfrom cosyvoice.llm.llm import TransformerLM, Qwen2LM\nfrom cosyvoice.flow.flow import MaskedDiffWithXvec, CausalMaskedDiffWithXvec\nfrom cosyvoice.hifigan.generator import HiFTGenerator\nfrom cosyvoice.cli.model import CosyVoiceModel, CosyVoice2Model\n\n\nCOSYVOICE_ACTIVATION_CLASSES = {\n    \"hardtanh\": torch.nn.Hardtanh,\n    \"tanh\": torch.nn.Tanh,\n    \"relu\": torch.nn.ReLU,\n    \"selu\": torch.nn.SELU,\n    \"swish\": getattr(torch.nn, \"SiLU\", Swish),\n    \"gelu\": torch.nn.GELU,\n}\n\nCOSYVOICE_SUBSAMPLE_CLASSES = {\n    \"linear\": LinearNoSubsampling,\n    \"linear_legacy\": LegacyLinearNoSubsampling,\n    \"embed\": EmbedinigNoSubsampling,\n    \"conv1d2\": Conv1dSubsampling2,\n    \"conv2d\": Conv2dSubsampling4,\n    \"conv2d6\": Conv2dSubsampling6,\n    \"conv2d8\": Conv2dSubsampling8,\n    'paraformer_dummy': torch.nn.Identity\n}\n\nCOSYVOICE_EMB_CLASSES = {\n    \"embed\": PositionalEncoding,\n    \"abs_pos\": PositionalEncoding,\n    \"rel_pos\": RelPositionalEncoding,\n    \"rel_pos_espnet\": EspnetRelPositionalEncoding,\n    \"no_pos\": NoPositionalEncoding,\n    \"abs_pos_whisper\": WhisperPositionalEncoding,\n    \"embed_learnable_pe\": LearnablePositionalEncoding,\n}\n\nCOSYVOICE_ATTENTION_CLASSES = {\n    \"selfattn\": MultiHeadedAttention,\n    \"rel_selfattn\": RelPositionMultiHeadedAttention,\n}\n\n\ndef get_model_type(configs):\n    # NOTE CosyVoice2Model inherits CosyVoiceModel\n    if isinstance(configs['llm'], TransformerLM) and isinstance(configs['flow'], MaskedDiffWithXvec) and isinstance(configs['hift'], HiFTGenerator):\n        return CosyVoiceModel\n    if isinstance(configs['llm'], Qwen2LM) and isinstance(configs['flow'], CausalMaskedDiffWithXvec) and isinstance(configs['hift'], HiFTGenerator):\n        return CosyVoice2Model\n    raise TypeError('No valid model type found!')\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/common.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc (Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Bofan Zhou)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Unility functions for Transformer.\"\"\"\n\nimport queue\nimport random\nfrom typing import List\n\nimport numpy as np\nimport torch\n\nIGNORE_ID = -1\n\n\ndef pad_list(xs: List[torch.Tensor], pad_value: int):\n    \"\"\"Perform padding for the list of tensors.\n\n    Args:\n        xs (List): List of Tensors [(T_1, `*`), (T_2, `*`), ..., (T_B, `*`)].\n        pad_value (float): Value for padding.\n\n    Returns:\n        Tensor: Padded tensor (B, Tmax, `*`).\n\n    Examples:\n        >>> x = [torch.ones(4), torch.ones(2), torch.ones(1)]\n        >>> x\n        [tensor([1., 1., 1., 1.]), tensor([1., 1.]), tensor([1.])]\n        >>> pad_list(x, 0)\n        tensor([[1., 1., 1., 1.],\n                [1., 1., 0., 0.],\n                [1., 0., 0., 0.]])\n\n    \"\"\"\n    max_len = max([len(item) for item in xs])\n    batchs = len(xs)\n    ndim = xs[0].ndim\n    if ndim == 1:\n        pad_res = torch.zeros(batchs,\n                              max_len,\n                              dtype=xs[0].dtype,\n                              device=xs[0].device)\n    elif ndim == 2:\n        pad_res = torch.zeros(batchs,\n                              max_len,\n                              xs[0].shape[1],\n                              dtype=xs[0].dtype,\n                              device=xs[0].device)\n    elif ndim == 3:\n        pad_res = torch.zeros(batchs,\n                              max_len,\n                              xs[0].shape[1],\n                              xs[0].shape[2],\n                              dtype=xs[0].dtype,\n                              device=xs[0].device)\n    else:\n        raise ValueError(f\"Unsupported ndim: {ndim}\")\n    pad_res.fill_(pad_value)\n    for i in range(batchs):\n        pad_res[i, :len(xs[i])] = xs[i]\n    return pad_res\n\n\ndef th_accuracy(pad_outputs: torch.Tensor, pad_targets: torch.Tensor,\n                ignore_label: int) -> torch.Tensor:\n    \"\"\"Calculate accuracy.\n\n    Args:\n        pad_outputs (Tensor): Prediction tensors (B * Lmax, D).\n        pad_targets (LongTensor): Target label tensors (B, Lmax).\n        ignore_label (int): Ignore label id.\n\n    Returns:\n        torch.Tensor: Accuracy value (0.0 - 1.0).\n\n    \"\"\"\n    pad_pred = pad_outputs.view(pad_targets.size(0), pad_targets.size(1),\n                                pad_outputs.size(1)).argmax(2)\n    mask = pad_targets != ignore_label\n    numerator = torch.sum(\n        pad_pred.masked_select(mask) == pad_targets.masked_select(mask))\n    denominator = torch.sum(mask)\n    return (numerator / denominator).detach()\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\n# Repetition Aware Sampling in VALL-E 2\ndef ras_sampling(weighted_scores, decoded_tokens, sampling, top_p=0.8, top_k=25, win_size=10, tau_r=0.1):\n    top_ids = nucleus_sampling(weighted_scores, top_p=top_p, top_k=top_k)\n    rep_num = (torch.tensor(decoded_tokens[-win_size:]).to(weighted_scores.device) == top_ids).sum().item()\n    if rep_num >= win_size * tau_r:\n        top_ids = random_sampling(weighted_scores, decoded_tokens, sampling)\n    return top_ids\n\n\ndef nucleus_sampling(weighted_scores, top_p=0.8, top_k=25):\n    prob, indices = [], []\n    cum_prob = 0.0\n    sorted_value, sorted_idx = weighted_scores.softmax(dim=0).sort(descending=True, stable=True)\n    for i in range(len(sorted_idx)):\n        # sampling both top-p and numbers.\n        if cum_prob < top_p and len(prob) < top_k:\n            cum_prob += sorted_value[i]\n            prob.append(sorted_value[i])\n            indices.append(sorted_idx[i])\n        else:\n            break\n    prob = torch.tensor(prob).to(weighted_scores)\n    indices = torch.tensor(indices, dtype=torch.long).to(weighted_scores.device)\n    top_ids = indices[prob.multinomial(1, replacement=True)]\n    return top_ids\n\n\ndef random_sampling(weighted_scores, decoded_tokens, sampling):\n    top_ids = weighted_scores.softmax(dim=0).multinomial(1, replacement=True)\n    return top_ids\n\n\ndef fade_in_out(fade_in_mel, fade_out_mel, window):\n    device = fade_in_mel.device\n    fade_in_mel, fade_out_mel = fade_in_mel.cpu(), fade_out_mel.cpu()\n    mel_overlap_len = int(window.shape[0] / 2)\n    if fade_in_mel.device == torch.device('cpu'):\n        fade_in_mel = fade_in_mel.clone()\n    fade_in_mel[..., :mel_overlap_len] = fade_in_mel[..., :mel_overlap_len] * window[:mel_overlap_len] + \\\n        fade_out_mel[..., -mel_overlap_len:] * window[mel_overlap_len:]\n    return fade_in_mel.to(device)\n\n\ndef set_all_random_seed(seed):\n    random.seed(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)\n\n\ndef mask_to_bias(mask: torch.Tensor, dtype: torch.dtype) -> torch.Tensor:\n    assert mask.dtype == torch.bool\n    assert dtype in [torch.float32, torch.bfloat16, torch.float16]\n    mask = mask.to(dtype)\n    # attention mask bias\n    # NOTE(Mddct): torch.finfo jit issues\n    #     chunk_masks = (1.0 - chunk_masks) * torch.finfo(dtype).min\n    mask = (1.0 - mask) * -1.0e+10\n    return mask\n\n\nclass TrtContextWrapper:\n    def __init__(self, trt_engine, trt_concurrent=1, device='cuda:0'):\n        self.trt_context_pool = queue.Queue(maxsize=trt_concurrent)\n        self.trt_engine = trt_engine\n        for _ in range(trt_concurrent):\n            trt_context = trt_engine.create_execution_context()\n            trt_stream = torch.cuda.stream(torch.cuda.Stream(device))\n            assert trt_context is not None, 'failed to create trt context, maybe not enough CUDA memory, try reduce current trt concurrent {}'.format(trt_concurrent)\n            self.trt_context_pool.put([trt_context, trt_stream])\n        assert self.trt_context_pool.empty() is False, 'no avaialbe estimator context'\n\n    def acquire_estimator(self):\n        return self.trt_context_pool.get(), self.trt_engine\n\n    def release_estimator(self, context, stream):\n        self.trt_context_pool.put([context, stream])\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/executor.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc (Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nfrom contextlib import nullcontext\nimport os\n\nimport torch\nimport torch.distributed as dist\n\nfrom cosyvoice.utils.train_utils import update_parameter_and_lr, log_per_step, log_per_save, batch_forward, batch_backward, save_model, cosyvoice_join\n\n\nclass Executor:\n\n    def __init__(self, gan: bool = False, ref_model: torch.nn.Module = None, dpo_loss: torch.nn.Module = None):\n        self.gan = gan\n        self.ref_model = ref_model\n        self.dpo_loss = dpo_loss\n        self.step = 0\n        self.epoch = 0\n        self.rank = int(os.environ.get('RANK', 0))\n        self.device = torch.device('cuda:{}'.format(self.rank))\n\n    def train_one_epoc(self, model, optimizer, scheduler, train_data_loader, cv_data_loader, writer, info_dict, scaler, group_join, ref_model=None):\n        ''' Train one epoch\n        '''\n\n        lr = optimizer.param_groups[0]['lr']\n        logging.info('Epoch {} TRAIN info lr {} rank {}'.format(self.epoch, lr, self.rank))\n        logging.info('using accumulate grad, new batch size is {} times'\n                     ' larger than before'.format(info_dict['accum_grad']))\n        # A context manager to be used in conjunction with an instance of\n        # torch.nn.parallel.DistributedDataParallel to be able to train\n        # with uneven inputs across participating processes.\n        model.train()\n        if self.ref_model is not None:\n            self.ref_model.eval()\n        model_context = model.join if info_dict['train_engine'] == 'torch_ddp' else nullcontext\n        with model_context():\n            for batch_idx, batch_dict in enumerate(train_data_loader):\n                info_dict[\"tag\"] = \"TRAIN\"\n                info_dict[\"step\"] = self.step\n                info_dict[\"epoch\"] = self.epoch\n                info_dict[\"batch_idx\"] = batch_idx\n                if cosyvoice_join(group_join, info_dict):\n                    break\n\n                # Disable gradient synchronizations across DDP processes.\n                # Within this context, gradients will be accumulated on module\n                # variables, which will later be synchronized.\n                if info_dict['train_engine'] == 'torch_ddp' and (batch_idx + 1) % info_dict[\"accum_grad\"] != 0:\n                    context = model.no_sync\n                # Used for single gpu training and DDP gradient synchronization\n                # processes.\n                else:\n                    context = nullcontext\n\n                with context():\n                    info_dict = batch_forward(model, batch_dict, scaler, info_dict, ref_model=self.ref_model, dpo_loss=self.dpo_loss)\n                    info_dict = batch_backward(model, scaler, info_dict)\n\n                info_dict = update_parameter_and_lr(model, optimizer, scheduler, scaler, info_dict)\n                log_per_step(writer, info_dict)\n                # NOTE specify save_per_step in cosyvoice.yaml if you want to enable step save\n                if info_dict['save_per_step'] > 0 and (self.step + 1) % info_dict['save_per_step'] == 0 and \\\n                   (batch_idx + 1) % info_dict[\"accum_grad\"] == 0:\n                    dist.barrier()\n                    self.cv(model, cv_data_loader, writer, info_dict, on_batch_end=False)\n                    model.train()\n                if (batch_idx + 1) % info_dict[\"accum_grad\"] == 0:\n                    self.step += 1\n        dist.barrier()\n        self.cv(model, cv_data_loader, writer, info_dict, on_batch_end=True)\n\n    def train_one_epoc_gan(self, model, optimizer, scheduler, optimizer_d, scheduler_d, train_data_loader, cv_data_loader,\n                           writer, info_dict, scaler, group_join):\n        ''' Train one epoch\n        '''\n\n        lr = optimizer.param_groups[0]['lr']\n        logging.info('Epoch {} TRAIN info lr {} rank {}'.format(self.epoch, lr, self.rank))\n        logging.info('using accumulate grad, new batch size is {} times'\n                     ' larger than before'.format(info_dict['accum_grad']))\n        # A context manager to be used in conjunction with an instance of\n        # torch.nn.parallel.DistributedDataParallel to be able to train\n        # with uneven inputs across participating processes.\n        model.train()\n        model_context = model.join if info_dict['train_engine'] == 'torch_ddp' else nullcontext\n        with model_context():\n            for batch_idx, batch_dict in enumerate(train_data_loader):\n                info_dict[\"tag\"] = \"TRAIN\"\n                info_dict[\"step\"] = self.step\n                info_dict[\"epoch\"] = self.epoch\n                info_dict[\"batch_idx\"] = batch_idx\n                if cosyvoice_join(group_join, info_dict):\n                    break\n\n                # Disable gradient synchronizations across DDP processes.\n                # Within this context, gradients will be accumulated on module\n                # variables, which will later be synchronized.\n                if info_dict['train_engine'] == 'torch_ddp' and (batch_idx + 1) % info_dict[\"accum_grad\"] != 0:\n                    context = model.no_sync\n                # Used for single gpu training and DDP gradient synchronization\n                # processes.\n                else:\n                    context = nullcontext\n\n                with context():\n                    batch_dict['turn'] = 'discriminator'\n                    info_dict = batch_forward(model, batch_dict, scaler, info_dict)\n                    info_dict = batch_backward(model, scaler, info_dict)\n                info_dict = update_parameter_and_lr(model, optimizer_d, scheduler_d, scaler, info_dict)\n                optimizer.zero_grad()\n                log_per_step(writer, info_dict)\n                with context():\n                    batch_dict['turn'] = 'generator'\n                    info_dict = batch_forward(model, batch_dict, scaler, info_dict)\n                    info_dict = batch_backward(model, scaler, info_dict)\n                info_dict = update_parameter_and_lr(model, optimizer, scheduler, scaler, info_dict)\n                optimizer_d.zero_grad()\n                log_per_step(writer, info_dict)\n                # NOTE specify save_per_step in cosyvoice.yaml if you want to enable step save\n                if info_dict['save_per_step'] > 0 and (self.step + 1) % info_dict['save_per_step'] == 0 and \\\n                   (batch_idx + 1) % info_dict[\"accum_grad\"] == 0:\n                    dist.barrier()\n                    self.cv(model, cv_data_loader, writer, info_dict, on_batch_end=False)\n                    model.train()\n                if (batch_idx + 1) % info_dict[\"accum_grad\"] == 0:\n                    self.step += 1\n        dist.barrier()\n        self.cv(model, cv_data_loader, writer, info_dict, on_batch_end=True)\n\n    @torch.inference_mode()\n    def cv(self, model, cv_data_loader, writer, info_dict, on_batch_end=True):\n        ''' Cross validation on\n        '''\n        logging.info('Epoch {} Step {} on_batch_end {} CV rank {}'.format(self.epoch, self.step + 1, on_batch_end, self.rank))\n        model.eval()\n        total_num_utts, total_loss_dict = 0, {}  # avoid division by 0\n        for batch_idx, batch_dict in enumerate(cv_data_loader):\n            info_dict[\"tag\"] = \"CV\"\n            info_dict[\"step\"] = self.step\n            info_dict[\"epoch\"] = self.epoch\n            info_dict[\"batch_idx\"] = batch_idx\n\n            num_utts = len(batch_dict[\"utts\"])\n            total_num_utts += num_utts\n\n            if self.gan is True:\n                batch_dict['turn'] = 'generator'\n            info_dict = batch_forward(model, batch_dict, None, info_dict)\n\n            for k, v in info_dict['loss_dict'].items():\n                if k not in total_loss_dict:\n                    total_loss_dict[k] = []\n                total_loss_dict[k].append(v.mean().item() * num_utts)\n            log_per_step(None, info_dict)\n        for k, v in total_loss_dict.items():\n            total_loss_dict[k] = sum(v) / total_num_utts\n        info_dict['loss_dict'] = total_loss_dict\n        log_per_save(writer, info_dict)\n        model_name = 'epoch_{}_whole'.format(self.epoch) if on_batch_end else 'epoch_{}_step_{}'.format(self.epoch, self.step + 1)\n        save_model(model, model_name, info_dict)\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/file_utils.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc. (authors: Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu, Zetao Hu)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Yabin Li)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport json\nimport torch\nimport torchaudio\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nlogging.basicConfig(level=logging.DEBUG,\n                    format='%(asctime)s %(levelname)s %(message)s')\n\n\ndef read_lists(list_file):\n    lists = []\n    with open(list_file, 'r', encoding='utf8') as fin:\n        for line in fin:\n            lists.append(line.strip())\n    return lists\n\n\ndef read_json_lists(list_file):\n    lists = read_lists(list_file)\n    results = {}\n    for fn in lists:\n        with open(fn, 'r', encoding='utf8') as fin:\n            results.update(json.load(fin))\n    return results\n\n\ndef load_wav(wav, target_sr):\n    speech, sample_rate = torchaudio.load(wav, backend='soundfile')\n    speech = speech.mean(dim=0, keepdim=True)\n    if sample_rate != target_sr:\n        assert sample_rate > target_sr, 'wav sample rate {} must be greater than {}'.format(sample_rate, target_sr)\n        speech = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=target_sr)(speech)\n    return speech\n\n\ndef convert_onnx_to_trt(trt_model, trt_kwargs, onnx_model, fp16):\n    import tensorrt as trt\n    logging.info(\"Converting onnx to trt...\")\n    network_flags = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)\n    logger = trt.Logger(trt.Logger.INFO)\n    builder = trt.Builder(logger)\n    network = builder.create_network(network_flags)\n    parser = trt.OnnxParser(network, logger)\n    config = builder.create_builder_config()\n    config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 32)  # 4GB\n    if fp16:\n        config.set_flag(trt.BuilderFlag.FP16)\n    profile = builder.create_optimization_profile()\n    # load onnx model\n    with open(onnx_model, \"rb\") as f:\n        if not parser.parse(f.read()):\n            for error in range(parser.num_errors):\n                print(parser.get_error(error))\n            raise ValueError('failed to parse {}'.format(onnx_model))\n    # set input shapes\n    for i in range(len(trt_kwargs['input_names'])):\n        profile.set_shape(trt_kwargs['input_names'][i], trt_kwargs['min_shape'][i], trt_kwargs['opt_shape'][i], trt_kwargs['max_shape'][i])\n    tensor_dtype = trt.DataType.HALF if fp16 else trt.DataType.FLOAT\n    # set input and output data type\n    for i in range(network.num_inputs):\n        input_tensor = network.get_input(i)\n        input_tensor.dtype = tensor_dtype\n    for i in range(network.num_outputs):\n        output_tensor = network.get_output(i)\n        output_tensor.dtype = tensor_dtype\n    config.add_optimization_profile(profile)\n    engine_bytes = builder.build_serialized_network(network, config)\n    # save trt engine\n    with open(trt_model, \"wb\") as f:\n        f.write(engine_bytes)\n    logging.info(\"Succesfully convert onnx to trt...\")\n\n\ndef export_cosyvoice2_vllm(model, model_path, device):\n    if os.path.exists(model_path):\n        return\n    pad_to = DEFAULT_VOCAB_PADDING_SIZE = 64\n    vocab_size = model.speech_embedding.num_embeddings\n    feature_size = model.speech_embedding.embedding_dim\n    pad_vocab_size = ((vocab_size + pad_to - 1) // pad_to) * pad_to\n\n    dtype = torch.bfloat16\n    # lm_head\n    new_lm_head = torch.nn.Linear(in_features=feature_size, out_features=pad_vocab_size, bias=True)\n    with torch.no_grad():\n        new_lm_head.weight[:vocab_size] = model.llm_decoder.weight\n        new_lm_head.bias[:vocab_size] = model.llm_decoder.bias\n        new_lm_head.weight[vocab_size:] = 0\n        new_lm_head.bias[vocab_size:] = 0\n    model.llm.model.lm_head = new_lm_head\n    new_codec_embed = torch.nn.Linear(in_features=feature_size, out_features=pad_vocab_size)\n    # embed_tokens\n    embed_tokens = model.llm.model.model.embed_tokens\n    with torch.no_grad():\n        new_codec_embed.weight[:vocab_size] = model.speech_embedding.weight\n        new_codec_embed.weight[vocab_size:] = 0\n    model.llm.model.set_input_embeddings(new_codec_embed)\n    model.llm.model.to(device)\n    model.llm.model.to(dtype)\n    tmp_vocab_size = model.llm.model.config.vocab_size\n    tmp_tie_embedding = model.llm.model.config.tie_word_embeddings\n    del model.llm.model.generation_config.eos_token_id\n    del model.llm.model.config.bos_token_id\n    del model.llm.model.config.eos_token_id\n    model.llm.model.config.vocab_size = pad_vocab_size\n    model.llm.model.config.tie_word_embeddings = False\n    model.llm.model.config.use_bias = True\n    model.llm.model.save_pretrained(model_path)\n    os.system('sed -i s@Qwen2ForCausalLM@CosyVoice2ForCausalLM@g {}/config.json'.format(os.path.abspath(model_path)))\n    model.llm.model.config.vocab_size = tmp_vocab_size\n    model.llm.model.config.tie_word_embeddings = tmp_tie_embedding\n    model.llm.model.set_input_embeddings(embed_tokens)\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/frontend_utils.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport re\nimport regex\nchinese_char_pattern = re.compile(r'[\\u4e00-\\u9fff]+')\n\n\n# whether contain chinese character\ndef contains_chinese(text):\n    return bool(chinese_char_pattern.search(text))\n\n\n# replace special symbol\ndef replace_corner_mark(text):\n    text = text.replace('²', '平方')\n    text = text.replace('³', '立方')\n    return text\n\n\n# remove meaningless symbol\ndef remove_bracket(text):\n    text = text.replace('（', '').replace('）', '')\n    text = text.replace('【', '').replace('】', '')\n    text = text.replace('`', '').replace('`', '')\n    text = text.replace(\"——\", \" \")\n    return text\n\n\n# spell Arabic numerals\ndef spell_out_number(text: str, inflect_parser):\n    new_text = []\n    st = None\n    for i, c in enumerate(text):\n        if not c.isdigit():\n            if st is not None:\n                num_str = inflect_parser.number_to_words(text[st: i])\n                new_text.append(num_str)\n                st = None\n            new_text.append(c)\n        else:\n            if st is None:\n                st = i\n    if st is not None and st < len(text):\n        num_str = inflect_parser.number_to_words(text[st:])\n        new_text.append(num_str)\n    return ''.join(new_text)\n\n\n# split paragrah logic：\n# 1. per sentence max len token_max_n, min len token_min_n, merge if last sentence len less than merge_len\n# 2. cal sentence len according to lang\n# 3. split sentence according to puncatation\ndef split_paragraph(text: str, tokenize, lang=\"zh\", token_max_n=80, token_min_n=60, merge_len=20, comma_split=False):\n    def calc_utt_length(_text: str):\n        if lang == \"zh\":\n            return len(_text)\n        else:\n            return len(tokenize(_text))\n\n    def should_merge(_text: str):\n        if lang == \"zh\":\n            return len(_text) < merge_len\n        else:\n            return len(tokenize(_text)) < merge_len\n\n    if lang == \"zh\":\n        pounc = ['。', '？', '！', '；', '：', '、', '.', '?', '!', ';']\n    else:\n        pounc = ['.', '?', '!', ';', ':']\n    if comma_split:\n        pounc.extend(['，', ','])\n\n    if text[-1] not in pounc:\n        if lang == \"zh\":\n            text += \"。\"\n        else:\n            text += \".\"\n\n    st = 0\n    utts = []\n    for i, c in enumerate(text):\n        if c in pounc:\n            if len(text[st: i]) > 0:\n                utts.append(text[st: i] + c)\n            if i + 1 < len(text) and text[i + 1] in ['\"', '”']:\n                tmp = utts.pop(-1)\n                utts.append(tmp + text[i + 1])\n                st = i + 2\n            else:\n                st = i + 1\n\n    final_utts = []\n    cur_utt = \"\"\n    for utt in utts:\n        if calc_utt_length(cur_utt + utt) > token_max_n and calc_utt_length(cur_utt) > token_min_n:\n            final_utts.append(cur_utt)\n            cur_utt = \"\"\n        cur_utt = cur_utt + utt\n    if len(cur_utt) > 0:\n        if should_merge(cur_utt) and len(final_utts) != 0:\n            final_utts[-1] = final_utts[-1] + cur_utt\n        else:\n            final_utts.append(cur_utt)\n\n    return final_utts\n\n\n# remove blank between chinese character\ndef replace_blank(text: str):\n    out_str = []\n    for i, c in enumerate(text):\n        if c == \" \":\n            if ((text[i + 1].isascii() and text[i + 1] != \" \") and\n                    (text[i - 1].isascii() and text[i - 1] != \" \")):\n                out_str.append(c)\n        else:\n            out_str.append(c)\n    return \"\".join(out_str)\n\n\ndef is_only_punctuation(text):\n    # Regular expression: Match strings that consist only of punctuation marks or are empty.\n    punctuation_pattern = r'^[\\p{P}\\p{S}]*$'\n    return bool(regex.fullmatch(punctuation_pattern, text))\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/losses.py",
    "content": "import torch\nimport torch.nn.functional as F\nfrom typing import Tuple\n\n\ndef tpr_loss(disc_real_outputs, disc_generated_outputs, tau):\n    loss = 0\n    for dr, dg in zip(disc_real_outputs, disc_generated_outputs):\n        m_DG = torch.median((dr - dg))\n        L_rel = torch.mean((((dr - dg) - m_DG) ** 2)[dr < dg + m_DG])\n        loss += tau - F.relu(tau - L_rel)\n    return loss\n\n\ndef mel_loss(real_speech, generated_speech, mel_transforms):\n    loss = 0\n    for transform in mel_transforms:\n        mel_r = transform(real_speech)\n        mel_g = transform(generated_speech)\n        loss += F.l1_loss(mel_g, mel_r)\n    return loss\n\n\nclass DPOLoss(torch.nn.Module):\n    \"\"\"\n    DPO Loss\n    \"\"\"\n\n    def __init__(self, beta: float, label_smoothing: float = 0.0, ipo: bool = False) -> None:\n        super().__init__()\n        self.beta = beta\n        self.label_smoothing = label_smoothing\n        self.ipo = ipo\n\n    def forward(\n        self,\n        policy_chosen_logps: torch.Tensor,\n        policy_rejected_logps: torch.Tensor,\n        reference_chosen_logps: torch.Tensor,\n        reference_rejected_logps: torch.Tensor,\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        pi_logratios = policy_chosen_logps - policy_rejected_logps\n        ref_logratios = reference_chosen_logps - reference_rejected_logps\n        logits = pi_logratios - ref_logratios\n        if self.ipo:\n            losses = (logits - 1 / (2 * self.beta)) ** 2  # Eq. 17 of https://arxiv.org/pdf/2310.12036v2.pdf\n        else:\n            # Eq. 3 https://ericmitchell.ai/cdpo.pdf; label_smoothing=0 gives original DPO (Eq. 7 of https://arxiv.org/pdf/2305.18290.pdf)\n            losses = (\n                -F.logsigmoid(self.beta * logits) * (1 - self.label_smoothing)\n                - F.logsigmoid(-self.beta * logits) * self.label_smoothing\n            )\n        loss = losses.mean()\n        chosen_rewards = self.beta * (policy_chosen_logps - reference_chosen_logps).detach()\n        rejected_rewards = self.beta * (policy_rejected_logps - reference_rejected_logps).detach()\n\n        return loss, chosen_rewards, rejected_rewards\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/mask.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport torch\n'''\ndef subsequent_mask(\n        size: int,\n        device: torch.device = torch.device(\"cpu\"),\n) -> torch.Tensor:\n    \"\"\"Create mask for subsequent steps (size, size).\n\n    This mask is used only in decoder which works in an auto-regressive mode.\n    This means the current step could only do attention with its left steps.\n\n    In encoder, fully attention is used when streaming is not necessary and\n    the sequence is not long. In this  case, no attention mask is needed.\n\n    When streaming is need, chunk-based attention is used in encoder. See\n    subsequent_chunk_mask for the chunk-based attention mask.\n\n    Args:\n        size (int): size of mask\n        str device (str): \"cpu\" or \"cuda\" or torch.Tensor.device\n        dtype (torch.device): result dtype\n\n    Returns:\n        torch.Tensor: mask\n\n    Examples:\n        >>> subsequent_mask(3)\n        [[1, 0, 0],\n         [1, 1, 0],\n         [1, 1, 1]]\n    \"\"\"\n    ret = torch.ones(size, size, device=device, dtype=torch.bool)\n    return torch.tril(ret)\n'''\n\n\ndef subsequent_mask(\n        size: int,\n        device: torch.device = torch.device(\"cpu\"),\n) -> torch.Tensor:\n    \"\"\"Create mask for subsequent steps (size, size).\n\n    This mask is used only in decoder which works in an auto-regressive mode.\n    This means the current step could only do attention with its left steps.\n\n    In encoder, fully attention is used when streaming is not necessary and\n    the sequence is not long. In this  case, no attention mask is needed.\n\n    When streaming is need, chunk-based attention is used in encoder. See\n    subsequent_chunk_mask for the chunk-based attention mask.\n\n    Args:\n        size (int): size of mask\n        str device (str): \"cpu\" or \"cuda\" or torch.Tensor.device\n        dtype (torch.device): result dtype\n\n    Returns:\n        torch.Tensor: mask\n\n    Examples:\n        >>> subsequent_mask(3)\n        [[1, 0, 0],\n         [1, 1, 0],\n         [1, 1, 1]]\n    \"\"\"\n    arange = torch.arange(size, device=device)\n    mask = arange.expand(size, size)\n    arange = arange.unsqueeze(-1)\n    mask = mask <= arange\n    return mask\n\n\ndef subsequent_chunk_mask_deprecated(\n        size: int,\n        chunk_size: int,\n        num_left_chunks: int = -1,\n        device: torch.device = torch.device(\"cpu\"),\n) -> torch.Tensor:\n    \"\"\"Create mask for subsequent steps (size, size) with chunk size,\n       this is for streaming encoder\n\n    Args:\n        size (int): size of mask\n        chunk_size (int): size of chunk\n        num_left_chunks (int): number of left chunks\n            <0: use full chunk\n            >=0: use num_left_chunks\n        device (torch.device): \"cpu\" or \"cuda\" or torch.Tensor.device\n\n    Returns:\n        torch.Tensor: mask\n\n    Examples:\n        >>> subsequent_chunk_mask(4, 2)\n        [[1, 1, 0, 0],\n         [1, 1, 0, 0],\n         [1, 1, 1, 1],\n         [1, 1, 1, 1]]\n    \"\"\"\n    ret = torch.zeros(size, size, device=device, dtype=torch.bool)\n    for i in range(size):\n        if num_left_chunks < 0:\n            start = 0\n        else:\n            start = max((i // chunk_size - num_left_chunks) * chunk_size, 0)\n        ending = min((i // chunk_size + 1) * chunk_size, size)\n        ret[i, start:ending] = True\n    return ret\n\n\ndef subsequent_chunk_mask(\n        size: int,\n        chunk_size: int,\n        num_left_chunks: int = -1,\n        device: torch.device = torch.device(\"cpu\"),\n) -> torch.Tensor:\n    \"\"\"Create mask for subsequent steps (size, size) with chunk size,\n       this is for streaming encoder\n\n    Args:\n        size (int): size of mask\n        chunk_size (int): size of chunk\n        num_left_chunks (int): number of left chunks\n            <0: use full chunk\n            >=0: use num_left_chunks\n        device (torch.device): \"cpu\" or \"cuda\" or torch.Tensor.device\n\n    Returns:\n        torch.Tensor: mask\n\n    Examples:\n        >>> subsequent_chunk_mask(4, 2)\n        [[1, 1, 0, 0],\n         [1, 1, 0, 0],\n         [1, 1, 1, 1],\n         [1, 1, 1, 1]]\n    \"\"\"\n    # NOTE this modified implementation meets onnx export requirements, but it doesn't support num_left_chunks\n    pos_idx = torch.arange(size, device=device)\n    block_value = (torch.div(pos_idx, chunk_size, rounding_mode='trunc') + 1) * chunk_size\n    ret = pos_idx.unsqueeze(0) < block_value.unsqueeze(1)\n    return ret\n\n\ndef add_optional_chunk_mask(xs: torch.Tensor,\n                            masks: torch.Tensor,\n                            use_dynamic_chunk: bool,\n                            use_dynamic_left_chunk: bool,\n                            decoding_chunk_size: int,\n                            static_chunk_size: int,\n                            num_decoding_left_chunks: int,\n                            enable_full_context: bool = True):\n    \"\"\" Apply optional mask for encoder.\n\n    Args:\n        xs (torch.Tensor): padded input, (B, L, D), L for max length\n        mask (torch.Tensor): mask for xs, (B, 1, L)\n        use_dynamic_chunk (bool): whether to use dynamic chunk or not\n        use_dynamic_left_chunk (bool): whether to use dynamic left chunk for\n            training.\n        decoding_chunk_size (int): decoding chunk size for dynamic chunk, it's\n            0: default for training, use random dynamic chunk.\n            <0: for decoding, use full chunk.\n            >0: for decoding, use fixed chunk size as set.\n        static_chunk_size (int): chunk size for static chunk training/decoding\n            if it's greater than 0, if use_dynamic_chunk is true,\n            this parameter will be ignored\n        num_decoding_left_chunks: number of left chunks, this is for decoding,\n            the chunk size is decoding_chunk_size.\n            >=0: use num_decoding_left_chunks\n            <0: use all left chunks\n        enable_full_context (bool):\n            True: chunk size is either [1, 25] or full context(max_len)\n            False: chunk size ~ U[1, 25]\n\n    Returns:\n        torch.Tensor: chunk mask of the input xs.\n    \"\"\"\n    # Whether to use chunk mask or not\n    if use_dynamic_chunk:\n        max_len = xs.size(1)\n        if decoding_chunk_size < 0:\n            chunk_size = max_len\n            num_left_chunks = -1\n        elif decoding_chunk_size > 0:\n            chunk_size = decoding_chunk_size\n            num_left_chunks = num_decoding_left_chunks\n        else:\n            # chunk size is either [1, 25] or full context(max_len).\n            # Since we use 4 times subsampling and allow up to 1s(100 frames)\n            # delay, the maximum frame is 100 / 4 = 25.\n            chunk_size = torch.randint(1, max_len, (1, )).item()\n            num_left_chunks = -1\n            if chunk_size > max_len // 2 and enable_full_context:\n                chunk_size = max_len\n            else:\n                chunk_size = chunk_size % 25 + 1\n                if use_dynamic_left_chunk:\n                    max_left_chunks = (max_len - 1) // chunk_size\n                    num_left_chunks = torch.randint(0, max_left_chunks,\n                                                    (1, )).item()\n        chunk_masks = subsequent_chunk_mask(xs.size(1), chunk_size,\n                                            num_left_chunks,\n                                            xs.device)  # (L, L)\n        chunk_masks = chunk_masks.unsqueeze(0)  # (1, L, L)\n        chunk_masks = masks & chunk_masks  # (B, L, L)\n    elif static_chunk_size > 0:\n        num_left_chunks = num_decoding_left_chunks\n        chunk_masks = subsequent_chunk_mask(xs.size(1), static_chunk_size,\n                                            num_left_chunks,\n                                            xs.device)  # (L, L)\n        chunk_masks = chunk_masks.unsqueeze(0)  # (1, L, L)\n        chunk_masks = masks & chunk_masks  # (B, L, L)\n    else:\n        chunk_masks = masks\n    assert chunk_masks.dtype == torch.bool\n    if (chunk_masks.sum(dim=-1) == 0).sum().item() != 0:\n        print('get chunk_masks all false at some timestep, force set to true, make sure they are masked in futuer computation!')\n        chunk_masks[chunk_masks.sum(dim=-1) == 0] = True\n    return chunk_masks\n\n\ndef make_pad_mask(lengths: torch.Tensor, max_len: int = 0) -> torch.Tensor:\n    \"\"\"Make mask tensor containing indices of padded part.\n\n    See description of make_non_pad_mask.\n\n    Args:\n        lengths (torch.Tensor): Batch of lengths (B,).\n    Returns:\n        torch.Tensor: Mask tensor containing indices of padded part.\n\n    Examples:\n        >>> lengths = [5, 3, 2]\n        >>> make_pad_mask(lengths)\n        masks = [[0, 0, 0, 0 ,0],\n                 [0, 0, 0, 1, 1],\n                 [0, 0, 1, 1, 1]]\n    \"\"\"\n    batch_size = lengths.size(0)\n    max_len = max_len if max_len > 0 else lengths.max().item()\n    seq_range = torch.arange(0,\n                             max_len,\n                             dtype=torch.int64,\n                             device=lengths.device)\n    seq_range_expand = seq_range.unsqueeze(0).expand(batch_size, max_len)\n    seq_length_expand = lengths.unsqueeze(-1)\n    mask = seq_range_expand >= seq_length_expand\n    return mask\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/scheduler.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc (Binbin Zhang)\n#               2022 Ximalaya Inc (Yuguang Yang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n#               NeMo(https://github.com/NVIDIA/NeMo)\n\nfrom typing import Union\n\nimport math\nimport warnings\nimport torch\nfrom torch.optim.lr_scheduler import _LRScheduler\n\n\nclass WarmupLR(_LRScheduler):\n    \"\"\"The WarmupLR scheduler\n\n    This scheduler is almost same as NoamLR Scheduler except for following\n    difference:\n\n    NoamLR:\n        lr = optimizer.lr * model_size ** -0.5\n             * min(step ** -0.5, step * warmup_step ** -1.5)\n    WarmupLR:\n        lr = optimizer.lr * warmup_step ** 0.5\n             * min(step ** -0.5, step * warmup_step ** -1.5)\n\n    Note that the maximum lr equals to optimizer.lr in this scheduler.\n\n    \"\"\"\n\n    def __init__(\n        self,\n        optimizer: torch.optim.Optimizer,\n        warmup_steps: Union[int, float] = 25000,\n        last_epoch: int = -1,\n    ):\n        self.warmup_steps = warmup_steps\n\n        # __init__() must be invoked before setting field\n        # because step() is also invoked in __init__()\n        super().__init__(optimizer, last_epoch)\n\n    def __repr__(self):\n        return f\"{self.__class__.__name__}(warmup_steps={self.warmup_steps})\"\n\n    def get_lr(self):\n        step_num = self.last_epoch + 1\n        if self.warmup_steps == 0:\n            return [lr * step_num**-0.5 for lr in self.base_lrs]\n        else:\n            return [\n                lr * self.warmup_steps**0.5 *\n                min(step_num**-0.5, step_num * self.warmup_steps**-1.5)\n                for lr in self.base_lrs\n            ]\n\n    def set_step(self, step: int):\n        self.last_epoch = step\n\n\nclass WarmupPolicy(_LRScheduler):\n    \"\"\"Adds warmup kwargs and warmup logic to lr policy.\n    All arguments should be passed as kwargs for clarity,\n    Args:\n        warmup_steps: Number of training steps in warmup stage\n        warmup_ratio: Ratio of warmup steps to total steps\n        max_steps: Total number of steps while training or `None` for\n            infinite training\n    \"\"\"\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 warmup_steps=None,\n                 warmup_ratio=None,\n                 max_steps=None,\n                 min_lr=0.0,\n                 last_epoch=-1):\n        assert not (warmup_steps is not None and warmup_ratio is not None),\\\n            \"Either use particular number of step or ratio\"\n        assert warmup_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        # It is necessary to assign all attributes *before* __init__,\n        # as class is wrapped by an inner class.\n        self.max_steps = max_steps\n        if warmup_steps is not None:\n            self.warmup_steps = warmup_steps\n        elif warmup_ratio is not None:\n            self.warmup_steps = int(warmup_ratio * max_steps)\n        else:\n            self.warmup_steps = 0\n\n        self.min_lr = min_lr\n        super().__init__(optimizer, last_epoch)\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed \"\n                \"by the scheduler, please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = self.last_epoch\n\n        if step <= self.warmup_steps and self.warmup_steps > 0:\n            return self._get_warmup_lr(step)\n\n        if step > self.max_steps:\n            return [self.min_lr for _ in self.base_lrs]\n\n        return self._get_lr(step)\n\n    def _get_warmup_lr(self, step):\n        lr_val = (step + 1) / (self.warmup_steps + 1)\n        return [initial_lr * lr_val for initial_lr in self.base_lrs]\n\n    def _get_lr(self, step):\n        \"\"\"Simple const lr policy\"\"\"\n        return self.base_lrs\n\n\nclass SquareRootConstantPolicy(_LRScheduler):\n    \"\"\"Adds warmup kwargs and warmup logic to lr policy.\n    All arguments should be passed as kwargs for clarity,\n    Args:\n        warmup_steps: Number of training steps in warmup stage\n        warmup_ratio: Ratio of warmup steps to total steps\n        max_steps: Total number of steps while training or `None` for\n            infinite training\n    \"\"\"\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 constant_steps=None,\n                 constant_ratio=None,\n                 max_steps=None,\n                 min_lr=0.0,\n                 last_epoch=-1):\n        assert not (constant_steps is not None\n                    and constant_ratio is not None), \\\n            \"Either use particular number of step or ratio\"\n        assert constant_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        # It is necessary to assign all attributes *before* __init__,\n        # as class is wrapped by an inner class.\n        self.max_steps = max_steps\n        if constant_steps is not None:\n            self.constant_steps = constant_steps\n        elif constant_ratio is not None:\n            self.constant_steps = int(constant_ratio * max_steps)\n        else:\n            self.constant_steps = 0\n\n        self.constant_lr = 1 / (constant_steps**0.5)\n        self.min_lr = min_lr\n        super().__init__(optimizer, last_epoch)\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed \"\n                \"by the scheduler, please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = self.last_epoch\n\n        if step <= self.constant_steps:\n            return [self.constant_lr for _ in self.base_lrs]\n\n        if step > self.max_steps:\n            return [self.min_lr for _ in self.base_lrs]\n\n        return self._get_lr(step)\n\n    def _get_lr(self, step):\n        \"\"\"Simple const lr policy\"\"\"\n        return self.base_lrs\n\n\nclass WarmupHoldPolicy(WarmupPolicy):\n    \"\"\"Variant of WarmupPolicy which maintains high\n       learning rate for a defined number of steps.\n    All arguments should be passed as kwargs for clarity,\n    Args:\n        warmup_steps: Number of training steps in warmup stage\n        warmup_ratio: Ratio of warmup steps to total steps\n        hold_steps: Number of training steps to\n                    hold the learning rate after warm up\n        hold_ratio: Ratio of hold steps to total steps\n        max_steps: Total number of steps while training or `None` for\n            infinite training\n    \"\"\"\n\n    def __init__(\n        self,\n        optimizer,\n        *,\n        warmup_steps=None,\n        warmup_ratio=None,\n        hold_steps=None,\n        hold_ratio=None,\n        max_steps=None,\n        min_lr=0.0,\n        last_epoch=-1,\n    ):\n        assert not (hold_steps is not None and hold_ratio is not None), \\\n            \"Either use particular number of step or ratio\"\n        assert hold_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        self.min_lr = min_lr\n        self._last_warmup_lr = 0.0\n\n        # Necessary to duplicate as class attributes are hidden in inner class\n        self.max_steps = max_steps\n        if warmup_steps is not None:\n            self.warmup_steps = warmup_steps\n        elif warmup_ratio is not None:\n            self.warmup_steps = int(warmup_ratio * max_steps)\n        else:\n            self.warmup_steps = 0\n\n        if hold_steps is not None:\n            self.hold_steps = hold_steps + self.warmup_steps\n        elif hold_ratio is not None:\n            self.hold_steps = int(hold_ratio * max_steps) + self.warmup_steps\n        else:\n            self.hold_steps = 0\n\n        super().__init__(\n            optimizer,\n            warmup_steps=warmup_steps,\n            warmup_ratio=warmup_ratio,\n            max_steps=max_steps,\n            last_epoch=last_epoch,\n            min_lr=min_lr,\n        )\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed by the scheduler,\"\n                \" \"\n                \"please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = self.last_epoch\n\n        # Warmup phase\n        if step <= self.warmup_steps and self.warmup_steps > 0:\n            return self._get_warmup_lr(step)\n\n        # Hold phase\n        if (step >= self.warmup_steps) and (step < self.hold_steps):\n            return self.base_lrs\n\n        if step > self.max_steps:\n            return [self.min_lr for _ in self.base_lrs]\n\n        return self._get_lr(step)\n\n\nclass WarmupAnnealHoldPolicy(_LRScheduler):\n    \"\"\"Adds warmup kwargs and warmup logic to lr policy.\n    All arguments should be passed as kwargs for clarity,\n    Args:\n        warmup_steps: Number of training steps in warmup stage\n        warmup_ratio: Ratio of warmup steps to total steps\n        max_steps: Total number of steps while training or `None` for\n            infinite training\n        min_lr: Minimum lr to hold the learning rate after decay at.\n        constant_steps: Number of steps to keep lr constant at.\n        constant_ratio: Ratio of steps to keep lr constant.\n    \"\"\"\n\n    def __init__(\n        self,\n        optimizer,\n        *,\n        warmup_steps=None,\n        warmup_ratio=None,\n        constant_steps=None,\n        constant_ratio=None,\n        max_steps=None,\n        min_lr=0.0,\n        last_epoch=-1,\n    ):\n        assert not (warmup_steps is not None\n                    and warmup_ratio is not None), \\\n            \"Either use particular number of step or ratio\"\n        assert not (constant_steps is not None\n                    and constant_ratio is not None), \\\n            \"Either use constant_steps or constant_ratio\"\n        assert warmup_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        # It is necessary to assign all attributes *before* __init__,\n        # as class is wrapped by an inner class.\n        self.max_steps = max_steps\n\n        if warmup_steps is not None:\n            self.warmup_steps = warmup_steps\n        elif warmup_ratio is not None:\n            self.warmup_steps = int(warmup_ratio * max_steps)\n        else:\n            self.warmup_steps = 0\n\n        if constant_steps is not None:\n            self.constant_steps = constant_steps\n        elif constant_ratio is not None:\n            self.constant_steps = int(constant_ratio * max_steps)\n        else:\n            self.constant_steps = 0\n\n        self.decay_steps = max_steps - (self.constant_steps +\n                                        self.warmup_steps)\n\n        self.min_lr = min_lr\n        super().__init__(optimizer, last_epoch)\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed \"\n                \"by the scheduler, please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = self.last_epoch\n\n        # Warmup steps\n        if self.warmup_steps > 0 and step <= self.warmup_steps:\n            return self._get_warmup_lr(step)\n\n        # Constant steps after warmup and decay\n        if self.constant_steps > 0 and (\n                self.warmup_steps + self.decay_steps) < step <= self.max_steps:\n            return self._get_constant_lr(step)\n\n        # Min lr after max steps of updates\n        if step > self.max_steps:\n            return [self.min_lr for _ in self.base_lrs]\n\n        return self._get_lr(step)\n\n    def _get_warmup_lr(self, step):\n        lr_val = (step + 1) / (self.warmup_steps + 1)\n        return [initial_lr * lr_val for initial_lr in self.base_lrs]\n\n    def _get_constant_lr(self, step):\n        return [self.min_lr for _ in self.base_lrs]\n\n    def _get_lr(self, step):\n        \"\"\"Simple const lr policy\"\"\"\n        return self.base_lrs\n\n\ndef _squareroot_annealing(initial_lr, step, max_steps, min_lr):\n    mult = ((max_steps - step) / max_steps)**0.5\n    out_lr = initial_lr * mult\n    out_lr = max(out_lr, min_lr)\n    return out_lr\n\n\ndef _square_annealing(initial_lr, step, max_steps, min_lr):\n    mult = ((max_steps - step) / max_steps)**2\n    out_lr = initial_lr * mult\n    out_lr = max(out_lr, min_lr)\n    return out_lr\n\n\ndef _cosine_annealing(initial_lr, step, max_steps, min_lr):\n    mult = 0.5 * (1 + math.cos(math.pi * step / max_steps))\n    out_lr = (initial_lr - min_lr) * mult + min_lr\n    return out_lr\n\n\ndef _linear_warmup_with_cosine_annealing(max_lr, warmup_steps, step,\n                                         decay_steps, min_lr):\n    assert max_lr > min_lr\n    # Use linear warmup for the initial part.\n    if warmup_steps > 0 and step <= warmup_steps:\n        return max_lr * float(step) / float(warmup_steps)\n\n    # For any steps larger than `decay_steps`, use `min_lr`.\n    if step > warmup_steps + decay_steps:\n        return min_lr\n\n    # If we are done with the warmup period, use the decay style.\n    num_steps_ = step - warmup_steps\n    decay_steps_ = decay_steps\n    decay_ratio = float(num_steps_) / float(decay_steps_)\n    assert decay_ratio >= 0.0\n    assert decay_ratio <= 1.0\n    delta_lr = max_lr - min_lr\n\n    coeff = 0.5 * (math.cos(math.pi * decay_ratio) + 1.0)\n\n    return min_lr + coeff * delta_lr\n\n\ndef _poly_decay(initial_lr, step, decay_steps, power, min_lr, cycle):\n    if cycle:\n        multiplier = 1.0 if step == 0 else math.ceil(step / decay_steps)\n        decay_steps *= multiplier\n    else:\n        step = min(step, decay_steps)\n    p = step / decay_steps\n    lr = (initial_lr - min_lr) * math.pow(1.0 - p, power)\n    lr += min_lr\n    return lr\n\n\ndef _noam_hold_annealing(initial_lr, step, warmup_steps, hold_steps,\n                         decay_rate, min_lr):\n    # hold_steps = total number of steps\n    # to hold the LR, not the warmup + hold steps.\n    T_warmup_decay = max(1, warmup_steps**decay_rate)\n    T_hold_decay = max(1, (step - hold_steps)**decay_rate)\n    lr = (initial_lr * T_warmup_decay) / T_hold_decay\n    lr = max(lr, min_lr)\n    return lr\n\n\nclass SquareAnnealing(WarmupPolicy):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 max_steps,\n                 min_lr=1e-5,\n                 last_epoch=-1,\n                 **kwargs):\n        super().__init__(optimizer=optimizer,\n                         max_steps=max_steps,\n                         last_epoch=last_epoch,\n                         min_lr=min_lr,\n                         **kwargs)\n\n    def _get_lr(self, step):\n        new_lrs = [\n            _square_annealing(\n                initial_lr=initial_lr,\n                step=step - self.warmup_steps,\n                max_steps=self.max_steps - self.warmup_steps,\n                min_lr=self.min_lr,\n            ) for initial_lr in self.base_lrs\n        ]\n        return new_lrs\n\n\nclass SquareRootAnnealing(WarmupPolicy):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 max_steps,\n                 min_lr=0,\n                 last_epoch=-1,\n                 **kwargs):\n        super().__init__(optimizer=optimizer,\n                         max_steps=max_steps,\n                         last_epoch=last_epoch,\n                         min_lr=min_lr,\n                         **kwargs)\n\n    def _get_lr(self, step):\n        new_lrs = [\n            _squareroot_annealing(initial_lr=initial_lr,\n                                  step=step,\n                                  max_steps=self.max_steps,\n                                  min_lr=self.min_lr)\n            for initial_lr in self.base_lrs\n        ]\n        return new_lrs\n\n\nclass CosineAnnealing(WarmupAnnealHoldPolicy):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 max_steps,\n                 min_lr=0,\n                 last_epoch=-1,\n                 **kwargs):\n        super().__init__(optimizer=optimizer,\n                         max_steps=max_steps,\n                         last_epoch=last_epoch,\n                         min_lr=min_lr,\n                         **kwargs)\n\n    def _get_lr(self, step):\n        for initial_lr in self.base_lrs:\n            if initial_lr < self.min_lr:\n                raise ValueError(\n                    f\"{self} received an initial learning rate \"\n                    f\"that was lower than the minimum learning rate.\")\n\n        if self.constant_steps is None or self.constant_steps == 0:\n            new_lrs = [\n                _cosine_annealing(\n                    initial_lr=initial_lr,\n                    step=step - self.warmup_steps,\n                    max_steps=self.max_steps - self.warmup_steps,\n                    min_lr=self.min_lr,\n                ) for initial_lr in self.base_lrs\n            ]\n        else:\n            new_lrs = self._get_linear_warmup_with_cosine_annealing_lr(step)\n        return new_lrs\n\n    def _get_warmup_lr(self, step):\n        if self.constant_steps is None or self.constant_steps == 0:\n            return super()._get_warmup_lr(step)\n        else:\n            # Use linear warmup for the initial part.\n            return self._get_linear_warmup_with_cosine_annealing_lr(step)\n\n    def _get_constant_lr(self, step):\n        # Only called when `constant_steps` > 0.\n        return self._get_linear_warmup_with_cosine_annealing_lr(step)\n\n    def _get_linear_warmup_with_cosine_annealing_lr(self, step):\n        # Cosine Schedule for Megatron LM,\n        # slightly different warmup schedule + constant LR at the end.\n        new_lrs = [\n            _linear_warmup_with_cosine_annealing(\n                max_lr=self.base_lrs[0],\n                warmup_steps=self.warmup_steps,\n                step=step,\n                decay_steps=self.decay_steps,\n                min_lr=self.min_lr,\n            ) for _ in self.base_lrs\n        ]\n        return new_lrs\n\n\nclass NoamAnnealing(_LRScheduler):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 d_model,\n                 warmup_steps=None,\n                 warmup_ratio=None,\n                 max_steps=None,\n                 min_lr=0.0,\n                 last_epoch=-1):\n        self._normalize = d_model**(-0.5)\n        assert not (warmup_steps is not None and warmup_ratio is not None), \\\n            \"Either use particular number of step or ratio\"\n        assert warmup_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        # It is necessary to assign all attributes *before* __init__,\n        # as class is wrapped by an inner class.\n        self.max_steps = max_steps\n        if warmup_steps is not None:\n            self.warmup_steps = warmup_steps\n        elif warmup_ratio is not None:\n            self.warmup_steps = int(warmup_ratio * max_steps)\n        else:\n            self.warmup_steps = 0\n\n        self.min_lr = min_lr\n        super().__init__(optimizer, last_epoch)\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed \"\n                \"by the scheduler, please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = max(1, self.last_epoch)\n\n        for initial_lr in self.base_lrs:\n            if initial_lr < self.min_lr:\n                raise ValueError(\n                    f\"{self} received an initial learning rate \"\n                    f\"that was lower than the minimum learning rate.\")\n\n        new_lrs = [\n            self._noam_annealing(initial_lr=initial_lr, step=step)\n            for initial_lr in self.base_lrs\n        ]\n        return new_lrs\n\n    def _noam_annealing(self, initial_lr, step):\n        if self.warmup_steps > 0:\n            mult = self._normalize * min(step**(-0.5),\n                                         step * (self.warmup_steps**(-1.5)))\n        else:\n            mult = self._normalize * step**(-0.5)\n\n        out_lr = initial_lr * mult\n        if step > self.warmup_steps:\n            out_lr = max(out_lr, self.min_lr)\n        return out_lr\n\n\nclass NoamHoldAnnealing(WarmupHoldPolicy):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 max_steps,\n                 decay_rate=0.5,\n                 min_lr=0.0,\n                 last_epoch=-1,\n                 **kwargs):\n        \"\"\"\n        From Nemo:\n        Implementation of the Noam Hold Annealing policy\n        from the SqueezeFormer paper.\n\n        Unlike NoamAnnealing, the peak learning rate\n        can be explicitly set for this scheduler.\n        The schedule first performs linear warmup,\n        then holds the peak LR, then decays with some schedule for\n        the remainder of the steps.\n        Therefore the min-lr is still dependent\n        on the hyper parameters selected.\n\n        It's schedule is determined by three factors-\n\n        Warmup Steps: Initial stage, where linear warmup\n            occurs uptil the peak LR is reached. Unlike NoamAnnealing,\n            the peak LR is explicitly stated here instead of a scaling factor.\n\n        Hold Steps: Intermediate stage, where the peak LR\n            is maintained for some number of steps. In this region,\n            the high peak LR allows the model to converge faster\n            if training is stable. However the high LR\n            may also cause instability during training.\n            Should usually be a significant fraction of training\n            steps (around 30-40% of the entire training steps).\n\n        Decay Steps: Final stage, where the LR rapidly decays\n            with some scaling rate (set by decay rate).\n            To attain Noam decay, use 0.5,\n            for Squeezeformer recommended decay, use 1.0.\n            The fast decay after prolonged high LR during\n            hold phase allows for rapid convergence.\n\n        References:\n            - [Squeezeformer:\n            An Efficient Transformer for Automatic Speech Recognition]\n            (https://arxiv.org/abs/2206.00888)\n\n        Args:\n            optimizer: Pytorch compatible Optimizer object.\n            warmup_steps: Number of training steps in warmup stage\n            warmup_ratio: Ratio of warmup steps to total steps\n            hold_steps: Number of training steps to\n                        hold the learning rate after warm up\n            hold_ratio: Ratio of hold steps to total steps\n            max_steps: Total number of steps while training or `None` for\n                infinite training\n            decay_rate: Float value describing the polynomial decay\n                        after the hold period. Default value\n                        of 0.5 corresponds to Noam decay.\n            min_lr: Minimum learning rate.\n        \"\"\"\n        self.decay_rate = decay_rate\n        super().__init__(optimizer=optimizer,\n                         max_steps=max_steps,\n                         last_epoch=last_epoch,\n                         min_lr=min_lr,\n                         **kwargs)\n\n    def _get_lr(self, step):\n        if self.warmup_steps is None or self.warmup_steps == 0:\n            raise ValueError(\n                \"Noam scheduler cannot be used without warmup steps\")\n\n        if self.hold_steps > 0:\n            hold_steps = self.hold_steps - self.warmup_steps\n        else:\n            hold_steps = 0\n\n        new_lrs = [\n            _noam_hold_annealing(\n                initial_lr,\n                step=step,\n                warmup_steps=self.warmup_steps,\n                hold_steps=hold_steps,\n                decay_rate=self.decay_rate,\n                min_lr=self.min_lr,\n            ) for initial_lr in self.base_lrs\n        ]\n        return new_lrs\n\n    def set_step(self, step: int):\n        self.last_epoch = step\n\n\nclass ConstantLR(_LRScheduler):\n    \"\"\"The ConstantLR scheduler\n\n    This scheduler keeps a constant lr\n\n    \"\"\"\n\n    def __init__(\n        self,\n        optimizer: torch.optim.Optimizer,\n    ):\n        # __init__() must be invoked before setting field\n        # because step() is also invoked in __init__()\n        super().__init__(optimizer)\n\n    def get_lr(self):\n        return self.base_lrs\n\n    def set_step(self, step: int):\n        self.last_epoch = step\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/utils/train_utils.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc. (authors: Binbin Zhang)\n#               2023 Horizon Inc. (authors: Xingchen Song)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport logging\nimport os\nimport torch\nimport json\nimport re\nimport datetime\nimport yaml\n\nimport deepspeed\nimport torch.optim as optim\nimport torch.distributed as dist\n\nfrom torch.utils.tensorboard import SummaryWriter\nfrom torch.utils.data import DataLoader\nfrom torch.nn.utils import clip_grad_norm_\n\nfrom deepspeed.runtime.zero.stage_1_and_2 import estimate_zero2_model_states_mem_needs_all_live\n\nfrom cosyvoice.dataset.dataset import Dataset\nfrom cosyvoice.utils.scheduler import WarmupLR, NoamHoldAnnealing, ConstantLR\n\n\ndef init_distributed(args):\n    world_size = int(os.environ.get('WORLD_SIZE', 1))\n    local_rank = int(os.environ.get('LOCAL_RANK', 0))\n    rank = int(os.environ.get('RANK', 0))\n    logging.info('training on multiple gpus, this gpu {}'.format(local_rank) +\n                 ', rank {}, world_size {}'.format(rank, world_size))\n    if args.train_engine == 'torch_ddp':\n        torch.cuda.set_device(local_rank)\n        dist.init_process_group(args.dist_backend)\n    else:\n        deepspeed.init_distributed(dist_backend=args.dist_backend)\n    return world_size, local_rank, rank\n\n\ndef init_dataset_and_dataloader(args, configs, gan, dpo):\n    data_pipeline = configs['data_pipeline_gan'] if gan is True else configs['data_pipeline']\n    train_dataset = Dataset(args.train_data, data_pipeline=data_pipeline, mode='train', gan=gan, dpo=dpo, shuffle=True, partition=True)\n    cv_dataset = Dataset(args.cv_data, data_pipeline=data_pipeline, mode='train', gan=gan, dpo=dpo, shuffle=False, partition=False)\n\n    # do not use persistent_workers=True, as whisper tokenizer opens tiktoken file each time when the for loop starts\n    train_data_loader = DataLoader(train_dataset,\n                                   batch_size=None,\n                                   pin_memory=args.pin_memory,\n                                   num_workers=args.num_workers,\n                                   prefetch_factor=args.prefetch)\n    cv_data_loader = DataLoader(cv_dataset,\n                                batch_size=None,\n                                pin_memory=args.pin_memory,\n                                num_workers=args.num_workers,\n                                prefetch_factor=args.prefetch)\n    return train_dataset, cv_dataset, train_data_loader, cv_data_loader\n\n\ndef check_modify_and_save_config(args, configs):\n    if args.train_engine == \"torch_ddp\":\n        configs['train_conf'][\"dtype\"] = 'bf16' if args.use_amp is True else 'fp32'\n    else:\n        with open(args.deepspeed_config, 'r') as fin:\n            ds_configs = json.load(fin)\n        if \"fp16\" in ds_configs and ds_configs[\"fp16\"][\"enabled\"]:\n            configs['train_conf'][\"dtype\"] = \"fp16\"\n        elif \"bf16\" in ds_configs and ds_configs[\"bf16\"][\"enabled\"]:\n            configs['train_conf'][\"dtype\"] = \"bf16\"\n        else:\n            configs['train_conf'][\"dtype\"] = \"fp32\"\n        assert ds_configs[\"train_micro_batch_size_per_gpu\"] == 1\n        # if use deepspeed, override ddp config\n        configs['train_conf']['save_per_step'] = int(configs['train_conf']['save_per_step'] *\n                                                     configs['train_conf']['accum_grad'] / ds_configs[\"gradient_accumulation_steps\"])\n        configs['train_conf']['accum_grad'] = ds_configs[\"gradient_accumulation_steps\"]\n        configs['train_conf']['grad_clip'] = ds_configs[\"gradient_clipping\"]\n        configs['train_conf']['log_interval'] = ds_configs[\"steps_per_print\"]\n    return configs\n\n\ndef wrap_cuda_model(args, model):\n    local_world_size = int(os.environ.get('LOCAL_WORLD_SIZE', 1))\n    world_size = int(os.environ.get('WORLD_SIZE', 1))\n    if args.train_engine == \"torch_ddp\":  # native pytorch ddp\n        assert (torch.cuda.is_available())\n        model.cuda()\n        model = torch.nn.parallel.DistributedDataParallel(model, find_unused_parameters=True)\n    else:\n        if int(os.environ.get('RANK', 0)) == 0:\n            logging.info(\"Estimating model states memory needs (zero2)...\")\n            estimate_zero2_model_states_mem_needs_all_live(\n                model,\n                num_gpus_per_node=local_world_size,\n                num_nodes=world_size // local_world_size)\n    return model\n\n\ndef init_optimizer_and_scheduler(args, configs, model, gan):\n    if gan is False:\n        if configs['train_conf']['optim'] == 'adam':\n            optimizer = optim.Adam(model.parameters(), **configs['train_conf']['optim_conf'])\n        elif configs['train_conf']['optim'] == 'adamw':\n            optimizer = optim.AdamW(model.parameters(), **configs['train_conf']['optim_conf'])\n        else:\n            raise ValueError(\"unknown optimizer: \" + configs['train_conf'])\n\n        if configs['train_conf']['scheduler'] == 'warmuplr':\n            scheduler_type = WarmupLR\n            scheduler = WarmupLR(optimizer, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler'] == 'NoamHoldAnnealing':\n            scheduler_type = NoamHoldAnnealing\n            scheduler = NoamHoldAnnealing(optimizer, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler'] == 'constantlr':\n            scheduler_type = ConstantLR\n            scheduler = ConstantLR(optimizer)\n        else:\n            raise ValueError(\"unknown scheduler: \" + configs['train_conf'])\n\n        # use deepspeed optimizer for speedup\n        if args.train_engine == \"deepspeed\":\n            def scheduler(opt):\n                return scheduler_type(opt, **configs['train_conf']['scheduler_conf'])\n            model, optimizer, _, scheduler = deepspeed.initialize(\n                args=args,\n                model=model,\n                optimizer=None,\n                lr_scheduler=scheduler,\n                model_parameters=model.parameters())\n\n        optimizer_d, scheduler_d = None, None\n\n    else:\n        # currently we wrap generator and discriminator in one model, so we cannot use deepspeed\n        if configs['train_conf']['optim'] == 'adam':\n            optimizer = optim.Adam(model.module.generator.parameters(), **configs['train_conf']['optim_conf'])\n        elif configs['train_conf']['optim'] == 'adamw':\n            optimizer = optim.AdamW(model.module.generator.parameters(), **configs['train_conf']['optim_conf'])\n        else:\n            raise ValueError(\"unknown optimizer: \" + configs['train_conf'])\n\n        if configs['train_conf']['scheduler'] == 'warmuplr':\n            scheduler_type = WarmupLR\n            scheduler = WarmupLR(optimizer, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler'] == 'NoamHoldAnnealing':\n            scheduler_type = NoamHoldAnnealing\n            scheduler = NoamHoldAnnealing(optimizer, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler'] == 'constantlr':\n            scheduler_type = ConstantLR\n            scheduler = ConstantLR(optimizer)\n        else:\n            raise ValueError(\"unknown scheduler: \" + configs['train_conf'])\n\n        if configs['train_conf']['optim_d'] == 'adam':\n            optimizer_d = optim.Adam(model.module.discriminator.parameters(), **configs['train_conf']['optim_conf'])\n        elif configs['train_conf']['optim_d'] == 'adamw':\n            optimizer_d = optim.AdamW(model.module.discriminator.parameters(), **configs['train_conf']['optim_conf'])\n        else:\n            raise ValueError(\"unknown optimizer: \" + configs['train_conf'])\n\n        if configs['train_conf']['scheduler_d'] == 'warmuplr':\n            scheduler_type = WarmupLR\n            scheduler_d = WarmupLR(optimizer_d, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler_d'] == 'NoamHoldAnnealing':\n            scheduler_type = NoamHoldAnnealing\n            scheduler_d = NoamHoldAnnealing(optimizer_d, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler'] == 'constantlr':\n            scheduler_type = ConstantLR\n            scheduler_d = ConstantLR(optimizer_d)\n        else:\n            raise ValueError(\"unknown scheduler: \" + configs['train_conf'])\n    return model, optimizer, scheduler, optimizer_d, scheduler_d\n\n\ndef init_summarywriter(args):\n    writer = None\n    if int(os.environ.get('RANK', 0)) == 0:\n        os.makedirs(args.model_dir, exist_ok=True)\n        writer = SummaryWriter(args.tensorboard_dir)\n    return writer\n\n\ndef save_model(model, model_name, info_dict):\n    rank = int(os.environ.get('RANK', 0))\n    model_dir = info_dict[\"model_dir\"]\n    save_model_path = os.path.join(model_dir, '{}.pt'.format(model_name))\n\n    if info_dict[\"train_engine\"] == \"torch_ddp\":\n        if rank == 0:\n            torch.save({**model.module.state_dict(), 'epoch': info_dict['epoch'], 'step': info_dict['step']}, save_model_path)\n    else:\n        with torch.no_grad():\n            model.save_checkpoint(save_dir=model_dir,\n                                  tag=model_name,\n                                  client_state=info_dict)\n    if rank == 0:\n        info_path = re.sub('.pt$', '.yaml', save_model_path)\n        info_dict['save_time'] = datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')\n        with open(info_path, 'w') as fout:\n            data = yaml.dump(info_dict)\n            fout.write(data)\n        logging.info('[Rank {}] Checkpoint: save to checkpoint {}'.format(rank, save_model_path))\n\n\ndef cosyvoice_join(group_join, info_dict):\n    world_size = int(os.environ.get('WORLD_SIZE', 1))\n    local_rank = int(os.environ.get('LOCAL_RANK', 0))\n    rank = int(os.environ.get('RANK', 0))\n\n    if info_dict[\"batch_idx\"] != 0:\n        # we try to join all rank in both ddp and deepspeed mode, in case different rank has different lr\n        try:\n            dist.monitored_barrier(group=group_join,\n                                   timeout=group_join.options._timeout)\n            return False\n        except RuntimeError as e:\n            logging.info(\"Detected uneven workload distribution: {}\\n\".format(e) +\n                         \"Break current worker to manually join all workers, \" +\n                         \"world_size {}, current rank {}, current local_rank {}\\n\".\n                         format(world_size, rank, local_rank))\n            return True\n    else:\n        return False\n\n\ndef batch_forward(model, batch, scaler, info_dict, ref_model=None, dpo_loss=None):\n    device = int(os.environ.get('LOCAL_RANK', 0))\n\n    dtype = info_dict[\"dtype\"]\n    if dtype == \"fp16\":\n        dtype = torch.float16\n    elif dtype == \"bf16\":\n        dtype = torch.bfloat16\n    else:  # fp32\n        dtype = torch.float32\n\n    if info_dict['train_engine'] == 'torch_ddp':\n        autocast = torch.cuda.amp.autocast(enabled=scaler is not None, dtype=dtype)\n    else:\n        autocast = torch.cuda.amp.autocast(enabled=True, dtype=dtype, cache_enabled=False)\n\n    with autocast:\n        info_dict['loss_dict'] = model(batch, device)\n        if ref_model is not None and dpo_loss is not None:\n            chosen_logps = info_dict['loss_dict'][\"chosen_logps\"]\n            rejected_logps = info_dict['loss_dict'][\"rejected_logps\"]\n            sft_loss = info_dict['loss_dict']['loss']\n            with torch.no_grad():\n                ref_loss_dict = ref_model(batch, device)\n            reference_chosen_logps = ref_loss_dict[\"chosen_logps\"]\n            reference_rejected_logps = ref_loss_dict[\"rejected_logps\"]\n            preference_loss, chosen_reward, reject_reward = dpo_loss(\n                chosen_logps, rejected_logps, reference_chosen_logps, reference_rejected_logps\n            )\n            dpo_acc = (chosen_reward > reject_reward).float().mean()\n            info_dict['loss_dict'][\"loss\"] = preference_loss + sft_loss\n            info_dict['loss_dict'][\"sft_loss\"] = sft_loss\n            info_dict['loss_dict'][\"dpo_loss\"] = preference_loss\n            info_dict['loss_dict'][\"dpo_acc\"] = dpo_acc\n            info_dict['loss_dict'][\"chosen_reward\"] = chosen_reward.mean()\n            info_dict['loss_dict'][\"reject_reward\"] = reject_reward.mean()\n    return info_dict\n\n\ndef batch_backward(model, scaler, info_dict):\n    if info_dict[\"train_engine\"] == \"deepspeed\":\n        scaled_loss = model.backward(info_dict['loss_dict']['loss'])\n    else:\n        scaled_loss = info_dict['loss_dict']['loss'] / info_dict['accum_grad']\n        if scaler is not None:\n            scaler.scale(scaled_loss).backward()\n        else:\n            scaled_loss.backward()\n\n    info_dict['loss_dict']['loss'] = scaled_loss\n    return info_dict\n\n\ndef update_parameter_and_lr(model, optimizer, scheduler, scaler, info_dict):\n    grad_norm = 0.0\n    if info_dict['train_engine'] == \"deepspeed\":\n        info_dict[\"is_gradient_accumulation_boundary\"] = model.is_gradient_accumulation_boundary()\n        model.step()\n        grad_norm = model.get_global_grad_norm()\n    elif (info_dict['batch_idx'] + 1) % info_dict[\"accum_grad\"] == 0:\n        # Use mixed precision training\n        if scaler is not None:\n            scaler.unscale_(optimizer)\n            grad_norm = clip_grad_norm_(model.parameters(), info_dict['grad_clip'])\n            # We don't check grad here since that if the gradient\n            # has inf/nan values, scaler.step will skip\n            # optimizer.step().\n            if torch.isfinite(grad_norm):\n                scaler.step(optimizer)\n            else:\n                logging.warning('get infinite grad_norm, check your code/data if it appears frequently')\n            scaler.update()\n        else:\n            grad_norm = clip_grad_norm_(model.parameters(), info_dict['grad_clip'])\n            if torch.isfinite(grad_norm):\n                optimizer.step()\n            else:\n                logging.warning('get infinite grad_norm, check your code/data if it appears frequently')\n        optimizer.zero_grad()\n        scheduler.step()\n    info_dict[\"lr\"] = optimizer.param_groups[0]['lr']\n    info_dict[\"grad_norm\"] = grad_norm\n    return info_dict\n\n\ndef log_per_step(writer, info_dict):\n    tag = info_dict[\"tag\"]\n    epoch = info_dict.get('epoch', 0)\n    step = info_dict[\"step\"]\n    batch_idx = info_dict[\"batch_idx\"]\n    loss_dict = info_dict['loss_dict']\n    rank = int(os.environ.get('RANK', 0))\n\n    # only rank 0 write to tensorboard to avoid multi-process write\n    if writer is not None:\n        if (info_dict['train_engine'] == 'deepspeed' and info_dict['is_gradient_accumulation_boundary'] is True) or \\\n           (info_dict['train_engine'] == 'torch_ddp' and (info_dict['batch_idx'] + 1) % info_dict['accum_grad'] == 0):\n            for k in ['epoch', 'lr', 'grad_norm']:\n                writer.add_scalar('{}/{}'.format(tag, k), info_dict[k], step + 1)\n            for k, v in loss_dict.items():\n                writer.add_scalar('{}/{}'.format(tag, k), v, step + 1)\n\n    # TRAIN & CV, Shell log (stdout)\n    if (info_dict['batch_idx'] + 1) % info_dict['log_interval'] == 0:\n        log_str = '{} Batch {}/{} '.format(tag, epoch, batch_idx + 1)\n        for name, value in loss_dict.items():\n            log_str += '{} {:.6f} '.format(name, value)\n        if tag == \"TRAIN\":\n            log_str += 'lr {:.8f} grad_norm {:.6f}'.format(\n                info_dict[\"lr\"], info_dict['grad_norm'])\n        log_str += ' rank {}'.format(rank)\n        logging.debug(log_str)\n\n\ndef log_per_save(writer, info_dict):\n    tag = info_dict[\"tag\"]\n    epoch = info_dict[\"epoch\"]\n    step = info_dict[\"step\"]\n    loss_dict = info_dict[\"loss_dict\"]\n    lr = info_dict['lr']\n    rank = int(os.environ.get('RANK', 0))\n    logging.info(\n        'Epoch {} Step {} CV info lr {} {} rank {}'.format(\n            epoch, step + 1, lr, rank, ' '.join(['{} {}'.format(k, v) for k, v in loss_dict.items()])))\n\n    if writer is not None:\n        for k in ['epoch', 'lr']:\n            writer.add_scalar('{}/{}'.format(tag, k), info_dict[k], step + 1)\n        for k, v in loss_dict.items():\n            writer.add_scalar('{}/{}'.format(tag, k), v, step + 1)\n"
  },
  {
    "path": "xinference/thirdparty/cosyvoice/vllm/cosyvoice2.py",
    "content": "# SPDX-License-Identifier: Apache-2.0\n\n# Adapted from\n# https://github.com/huggingface/transformers/blob/v4.28.0/src/transformers/models/qwen2/modeling_qwen2.py\n# Copyright 2024 The Qwen team.\n# Copyright 2023 The vLLM team.\n# Copyright 2022 EleutherAI and the HuggingFace Inc. team. All rights reserved.\n#\n# This code is based on EleutherAI's GPT-NeoX library and the GPT-NeoX\n# and OPT implementations in this library. It has been modified from its\n# original forms to accommodate minor architectural differences compared\n# to GPT-NeoX and OPT used by the Meta AI team that trained the model.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Inference-only Qwen2 model compatible with HuggingFace weights.\"\"\"\nfrom vllm.model_executor.models.qwen2 import *\n\n\nclass CosyVoice2ForCausalLM(nn.Module, SupportsLoRA, SupportsPP):\n    packed_modules_mapping = {\n        \"qkv_proj\": [\n            \"q_proj\",\n            \"k_proj\",\n            \"v_proj\",\n        ],\n        \"gate_up_proj\": [\n            \"gate_proj\",\n            \"up_proj\",\n        ],\n    }\n\n    def __init__(self, *, vllm_config: VllmConfig, prefix: str = \"\"):\n        super().__init__()\n        config = vllm_config.model_config.hf_config\n        quant_config = vllm_config.quant_config\n        lora_config = vllm_config.lora_config\n\n        self.config = config\n        self.lora_config = lora_config\n\n        self.quant_config = quant_config\n        self.model = Qwen2Model(vllm_config=vllm_config,\n                                prefix=maybe_prefix(prefix, \"model\"))\n\n        if get_pp_group().is_last_rank:\n            if config.tie_word_embeddings:\n                self.lm_head = self.model.embed_tokens\n            else:\n                self.lm_head = ParallelLMHead(config.vocab_size,\n                                              config.hidden_size,\n                                              True,\n                                              quant_config=quant_config,\n                                              prefix=maybe_prefix(\n                                                  prefix, \"lm_head\"))\n        else:\n            self.lm_head = PPMissingLayer()\n\n        self.logits_processor = LogitsProcessor(config.vocab_size)\n\n        self.make_empty_intermediate_tensors = (\n            self.model.make_empty_intermediate_tensors)\n\n    def get_input_embeddings(self, input_ids: torch.Tensor) -> torch.Tensor:\n        return self.model.get_input_embeddings(input_ids)\n\n    def forward(\n        self,\n        input_ids: torch.Tensor,\n        positions: torch.Tensor,\n        intermediate_tensors: Optional[IntermediateTensors] = None,\n        inputs_embeds: Optional[torch.Tensor] = None,\n    ) -> Union[torch.Tensor, IntermediateTensors]:\n        hidden_states = self.model(input_ids, positions, intermediate_tensors,\n                                   inputs_embeds)\n        return hidden_states\n\n    def compute_logits(\n        self,\n        hidden_states: torch.Tensor,\n        sampling_metadata: SamplingMetadata,\n    ) -> Optional[torch.Tensor]:\n        logits = self.logits_processor(self.lm_head, hidden_states,\n                                       sampling_metadata, self.lm_head.bias)\n        return logits\n\n    def load_weights(self, weights: Iterable[tuple[str,\n                                                   torch.Tensor]]) -> set[str]:\n        loader = AutoWeightsLoader(\n            self,\n            skip_prefixes=([\"lm_head.\"]\n                           if self.config.tie_word_embeddings else None),\n        )\n        return loader.load_weights(weights)\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/__init__.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n# check if python version is above 3.10\nimport sys\n\nif sys.version_info >= (3, 10):\n    print(\"Python version is above 3.10, patching the collections module.\")\n    # Monkey patch collections\n    import collections\n    import collections.abc\n\n    for type_name in collections.abc.__all__:\n        setattr(collections, type_name, getattr(collections.abc, type_name))\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/models/__init__.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom .image_processing_vlm import VLMImageProcessor\nfrom .modeling_vlm import MultiModalityCausalLM\nfrom .processing_vlm import VLChatProcessor\n\n__all__ = [\n    \"VLMImageProcessor\",\n    \"VLChatProcessor\",\n    \"MultiModalityCausalLM\",\n]\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/models/clip_encoder.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom typing import Dict, List, Literal, Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torchvision.transforms\nfrom einops import rearrange\n\nfrom .sam import create_sam_vit\nfrom .siglip_vit import create_siglip_vit\n\n\nclass CLIPVisionTower(nn.Module):\n    def __init__(\n        self,\n        model_name: str = \"siglip_large_patch16_384\",\n        image_size: Union[Tuple[int, int], int] = 336,\n        select_feature: str = \"patch\",\n        select_layer: int = -2,\n        select_layers: list = None,\n        ckpt_path: str = \"\",\n        pixel_mean: Optional[List[float]] = None,\n        pixel_std: Optional[List[float]] = None,\n        **kwargs,\n    ):\n        super().__init__()\n\n        self.model_name = model_name\n        self.select_feature = select_feature\n        self.select_layer = select_layer\n        self.select_layers = select_layers\n\n        vision_tower_params = {\n            \"model_name\": model_name,\n            \"image_size\": image_size,\n            \"ckpt_path\": ckpt_path,\n            \"select_layer\": select_layer,\n        }\n        vision_tower_params.update(kwargs)\n        self.vision_tower, self.forward_kwargs = self.build_vision_tower(\n            vision_tower_params\n        )\n\n        if pixel_mean is not None and pixel_std is not None:\n            image_norm = torchvision.transforms.Normalize(\n                mean=pixel_mean, std=pixel_std\n            )\n        else:\n            image_norm = None\n\n        self.image_norm = image_norm\n\n    def build_vision_tower(self, vision_tower_params):\n        if self.model_name.startswith(\"siglip\"):\n            self.select_feature = \"same\"\n            vision_tower = create_siglip_vit(**vision_tower_params)\n            forward_kwargs = dict()\n\n        elif self.model_name.startswith(\"sam\"):\n            vision_tower = create_sam_vit(**vision_tower_params)\n            forward_kwargs = dict()\n\n        else:  # huggingface\n            from transformers import CLIPVisionModel\n\n            vision_tower = CLIPVisionModel.from_pretrained(**vision_tower_params)\n            forward_kwargs = dict(output_hidden_states=True)\n\n        return vision_tower, forward_kwargs\n\n    def feature_select(self, image_forward_outs):\n        if isinstance(image_forward_outs, torch.Tensor):\n            # the output has been the self.select_layer\"s features\n            image_features = image_forward_outs\n        else:\n            image_features = image_forward_outs.hidden_states[self.select_layer]\n\n        if self.select_feature == \"patch\":\n            # if the output has cls_token\n            image_features = image_features[:, 1:]\n        elif self.select_feature == \"cls_patch\":\n            image_features = image_features\n        elif self.select_feature == \"same\":\n            image_features = image_features\n\n        else:\n            raise ValueError(f\"Unexpected select feature: {self.select_feature}\")\n        return image_features\n\n    def forward(self, images):\n        \"\"\"\n\n        Args:\n            images (torch.Tensor): [b, 3, H, W]\n\n        Returns:\n            image_features (torch.Tensor): [b, n_patch, d]\n        \"\"\"\n\n        if self.image_norm is not None:\n            images = self.image_norm(images)\n\n        image_forward_outs = self.vision_tower(images, **self.forward_kwargs)\n        image_features = self.feature_select(image_forward_outs)\n        return image_features\n\n\nclass HybridVisionTower(nn.Module):\n    def __init__(\n        self,\n        high_res_cfg: Dict,\n        low_res_cfg: Dict,\n        freeze_high: bool = False,\n        freeze_low: bool = False,\n        concat_type: Literal[\"feature\", \"sequence\", \"add\", \"tuple\"] = \"tuple\",\n        **ignore_kwargs,\n    ):\n        super().__init__()\n\n        self.vision_tower_high = CLIPVisionTower(**high_res_cfg)\n        self.vision_tower_low = CLIPVisionTower(**low_res_cfg)\n        self.low_res_size = low_res_cfg[\"image_size\"]\n        self.concat_type = concat_type\n\n        self.high_layer_norm = nn.LayerNorm(high_res_cfg.get(\"output_dim\", 1024))\n        self.low_layer_norm = nn.LayerNorm(low_res_cfg.get(\"output_dim\", 1024))\n\n        if freeze_high:\n            for p_name, p in self.vision_tower_high.named_parameters():\n                p.requires_grad = False\n            self.vision_tower_high = self.vision_tower_high.eval()\n        else:\n            # train donwsamples and neck\n            for p_name, p in self.vision_tower_high.named_parameters():\n                if \"downsamples\" in p_name or \"neck\" in p_name:\n                    p.requires_grad = True\n                else:\n                    p.requires_grad = False\n\n        if freeze_low:\n            for p in self.vision_tower_low.parameters():\n                p.requires_grad = False\n            self.vision_tower_low = self.vision_tower_low.eval()\n\n        self.resize = torchvision.transforms.Resize(self.low_res_size, antialias=True)\n\n    def forward(self, images: torch.Tensor):\n        \"\"\"\n\n        Args:\n            images (torch.Tensor): [bs, 3, H, W]\n\n        Returns:\n            res (torch.Tensor): [bs, t, c]\n        \"\"\"\n\n        # [bs, c, h, w]\n        high_images = images\n\n        # [bs, c, h_low, w_low]\n        low_images = self.resize(images)\n\n        # separately run two vision towers\n        # run high_res vision tower\n        high_res = self.vision_tower_high(high_images)\n        # [bs, c, h, w] -> [bs, h*w, c]\n        high_res = rearrange(high_res, \"b c h w -> b (h w) c\")\n        # run low_res vision tower\n        low_res = self.vision_tower_low(low_images)\n\n        if self.concat_type == \"feature\":\n            images_features = torch.cat([high_res, low_res], dim=-1)\n        elif self.concat_type == \"sequence\":\n            images_features = torch.cat([high_res, low_res], dim=1)\n        elif self.concat_type == \"add\":\n            images_features = high_res + low_res\n        elif self.concat_type == \"tuple\":\n            images_features = (high_res, low_res)\n\n        else:\n            raise ValueError(\n                \"Currently only support `feature`, `sequence`, `add` and `tuple` concat type.\"\n            )\n\n        return images_features\n\n\nif __name__ == \"__main__\":\n    image_size = 1024\n    x = torch.zeros(2, 3, image_size, image_size).bfloat16().cuda()\n\n    high_res_cfg = dict(\n        model_name=\"sam_b_downsample\",\n        select_feature=\"same\",\n        image_size=image_size,\n        pixel_mean=(0.48145466, 0.4578275, 0.40821073),\n        pixel_std=(0.26862954, 0.26130258, 0.27577711),\n        select_layer=-1,\n        ckpt_path=\"\",\n    )\n\n    low_res_cfg = dict(\n        model_name=\"siglip_large_patch16_384\",\n        select_feature=\"same\",\n        image_size=384,\n        pixel_mean=(0.5, 0.5, 0.5),\n        pixel_std=(0.5, 0.5, 0.5),\n        select_layer=-1,\n        ckpt_path=\"\",\n    )\n\n    net = (\n        HybridVisionTower(\n            high_res_cfg=high_res_cfg,\n            low_res_cfg=low_res_cfg,\n            freeze_high=True,\n            freeze_low=True,\n            concat_type=\"tuple\",\n        )\n        .bfloat16()\n        .cuda()\n    )\n    high_x, low_x = net(x)\n    print(x.shape, high_x.shape, low_x.shape)\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/models/image_processing_vlm.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom typing import List, Tuple, Union\n\nimport numpy as np\nimport torch\nimport torchvision\nimport torchvision.transforms.functional\nfrom PIL import Image\nfrom transformers import AutoImageProcessor, PretrainedConfig\nfrom transformers.image_processing_utils import BaseImageProcessor, BatchFeature\nfrom transformers.image_utils import to_numpy_array\nfrom transformers.utils import logging\n\nlogger = logging.get_logger(__name__)\n\nImageType = Union[np.ndarray, torch.Tensor, Image.Image]\nIMAGENET_MEAN = (0.48145466, 0.4578275, 0.40821073)\nIMAGENET_STD = (0.26862954, 0.26130258, 0.27577711)\nIMAGENET_INCEPTION_MEAN = (0.5, 0.5, 0.5)\nIMAGENET_INCEPTION_STD = (0.5, 0.5, 0.5)\n\n\ndef expand2square(pil_img, background_color):\n    width, height = pil_img.size\n    if width == height:\n        return pil_img\n    elif width > height:\n        result = Image.new(pil_img.mode, (width, width), background_color)\n        result.paste(pil_img, (0, (width - height) // 2))\n        return result\n    else:\n        result = Image.new(pil_img.mode, (height, height), background_color)\n        result.paste(pil_img, ((height - width) // 2, 0))\n        return result\n\n\nclass VLMImageProcessorConfig(PretrainedConfig):\n    model_type = \"deepseek_vlm\"\n    image_size: int\n    min_size: int\n    image_mean: Union[Tuple[float, float, float], List[float]]\n    image_std: Union[Tuple[float, float, float], List[float]]\n    rescale_factor: float\n    do_normalize: bool\n\n    def __init__(\n        self,\n        image_size: int,\n        min_size: int = 14,\n        image_mean: Union[Tuple[float, float, float], List[float]] = (\n            0.48145466,\n            0.4578275,\n            0.40821073,\n        ),\n        image_std: Union[Tuple[float, float, float], List[float]] = (\n            0.26862954,\n            0.26130258,\n            0.27577711,\n        ),\n        rescale_factor: float = 1.0 / 255.0,\n        do_normalize: bool = True,\n        **kwargs,\n    ):\n        self.image_size = image_size\n        self.min_size = min_size\n        self.image_mean = image_mean\n        self.image_std = image_std\n        self.rescale_factor = rescale_factor\n        self.do_normalize = do_normalize\n\n        super().__init__(**kwargs)\n\n\nclass VLMImageProcessor(BaseImageProcessor):\n    model_input_names = [\"pixel_values\"]\n\n    def __init__(\n        self,\n        image_size: int,\n        min_size: int = 14,\n        image_mean: Union[Tuple[float, float, float], List[float]] = (\n            0.48145466,\n            0.4578275,\n            0.40821073,\n        ),\n        image_std: Union[Tuple[float, float, float], List[float]] = (\n            0.26862954,\n            0.26130258,\n            0.27577711,\n        ),\n        rescale_factor: float = 1.0 / 255.0,\n        do_normalize: bool = True,\n        **kwargs,\n    ):\n        super().__init__(**kwargs)\n\n        self.image_size = image_size\n        self.rescale_factor = rescale_factor\n        self.image_mean = image_mean\n        self.image_std = image_std\n        self.min_size = min_size\n        self.do_normalize = do_normalize\n\n        if image_mean is None:\n            self.background_color = (127, 127, 127)\n        else:\n            self.background_color = tuple([int(x * 255) for x in image_mean])\n\n    def resize(self, pil_img: Image) -> np.ndarray:\n        \"\"\"\n\n        Args:\n            pil_img (PIL.Image): [H, W, 3] in PIL.Image in RGB\n\n        Returns:\n            x (np.ndarray): [3, self.image_size, self.image_size]\n        \"\"\"\n\n        width, height = pil_img.size\n        max_size = max(width, height)\n\n        size = [\n            max(int(height / max_size * self.image_size), self.min_size),\n            max(int(width / max_size * self.image_size), self.min_size),\n        ]\n\n        if width <= 0 or height <= 0 or size[0] <= 0 or size[1] <= 0:\n            print(f\"orig size = {pil_img.size}, new size = {size}\")\n            raise ValueError(\"Invalid size!\")\n\n        pil_img = torchvision.transforms.functional.resize(\n            pil_img,\n            size,\n            interpolation=torchvision.transforms.functional.InterpolationMode.BICUBIC,\n            antialias=True,\n        )\n\n        pil_img = expand2square(pil_img, self.background_color)\n        x = to_numpy_array(pil_img)\n\n        # [H, W, 3] -> [3, H, W]\n        x = np.transpose(x, (2, 0, 1))\n\n        return x\n\n    def preprocess(self, images, return_tensors: str = \"pt\", **kwargs) -> BatchFeature:\n        # resize and pad to [self.image_size, self.image_size]\n        # then convert from [H, W, 3] to [3, H, W]\n        images: List[np.ndarray] = [self.resize(image) for image in images]\n\n        # resacle from [0, 255] -> [0, 1]\n        images = [\n            self.rescale(\n                image=image,\n                scale=self.rescale_factor,\n                input_data_format=\"channels_first\",\n            )\n            for image in images\n        ]\n\n        # normalize\n        if self.do_normalize:\n            images = [\n                self.normalize(\n                    image=image,\n                    mean=self.image_mean,\n                    std=self.image_std,\n                    input_data_format=\"channels_first\",\n                )\n                for image in images\n            ]\n\n        data = {\"pixel_values\": images}\n        return BatchFeature(data=data, tensor_type=return_tensors)\n\n    @property\n    def default_shape(self):\n        return [3, self.image_size, self.image_size]\n\n\nAutoImageProcessor.register(VLMImageProcessorConfig, VLMImageProcessor)\n\n\nif __name__ == \"__main__\":\n    image_processor = VLMImageProcessor(\n        image_size=1024,\n        image_mean=IMAGENET_INCEPTION_MEAN,\n        image_std=IMAGENET_INCEPTION_STD,\n        do_normalize=True,\n    )\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/models/modeling_vlm.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport torch\nfrom attrdict import AttrDict\nfrom einops import rearrange\nfrom transformers import (\n    AutoConfig,\n    AutoModelForCausalLM,\n    LlamaConfig,\n    LlamaForCausalLM,\n    PreTrainedModel,\n)\nfrom transformers.configuration_utils import PretrainedConfig\n\nfrom .clip_encoder import CLIPVisionTower, HybridVisionTower\nfrom .projector import MlpProjector\n\n\ndef model_name_to_cls(cls_name):\n    if \"MlpProjector\" in cls_name:\n        cls = MlpProjector\n\n    elif \"CLIPVisionTower\" in cls_name:\n        cls = CLIPVisionTower\n\n    elif \"HybridVisionTower\" in cls_name:\n        cls = HybridVisionTower\n\n    else:\n        raise ValueError(f\"class_name {cls_name} is invalid.\")\n\n    return cls\n\n\nclass VisionConfig(PretrainedConfig):\n    model_type = \"vision\"\n    cls: str = \"\"\n    params: AttrDict = {}\n\n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n\n        self.cls = kwargs.get(\"cls\", \"\")\n        if not isinstance(self.cls, str):\n            self.cls = self.cls.__name__\n\n        self.params = AttrDict(kwargs.get(\"params\", {}))\n\n\nclass AlignerConfig(PretrainedConfig):\n    model_type = \"aligner\"\n    cls: str = \"\"\n    params: AttrDict = {}\n\n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n\n        self.cls = kwargs.get(\"cls\", \"\")\n        if not isinstance(self.cls, str):\n            self.cls = self.cls.__name__\n\n        self.params = AttrDict(kwargs.get(\"params\", {}))\n\n\nclass MultiModalityConfig(PretrainedConfig):\n    model_type = \"multi_modality\"\n    vision_config: VisionConfig\n    aligner_config: AlignerConfig\n    language_config: LlamaConfig\n\n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        vision_config = kwargs.get(\"vision_config\", {})\n        self.vision_config = VisionConfig(**vision_config)\n\n        aligner_config = kwargs.get(\"aligner_config\", {})\n        self.aligner_config = AlignerConfig(**aligner_config)\n\n        language_config = kwargs.get(\"language_config\", {})\n        if isinstance(language_config, LlamaConfig):\n            self.language_config = language_config\n        else:\n            self.language_config = LlamaConfig(**language_config)\n\n\nclass MultiModalityPreTrainedModel(PreTrainedModel):\n    config_class = MultiModalityConfig\n    base_model_prefix = \"multi_modality\"\n    _no_split_modules = []\n    _skip_keys_device_placement = \"past_key_values\"\n\n\nclass MultiModalityCausalLM(MultiModalityPreTrainedModel):\n    def __init__(self, config: MultiModalityConfig):\n        super().__init__(config)\n\n        vision_config = config.vision_config\n        vision_cls = model_name_to_cls(vision_config.cls)\n        self.vision_model = vision_cls(**vision_config.params)\n\n        aligner_config = config.aligner_config\n        aligner_cls = model_name_to_cls(aligner_config.cls)\n        self.aligner = aligner_cls(aligner_config.params)\n\n        language_config = config.language_config\n        self.language_model = LlamaForCausalLM(language_config)\n\n    def prepare_inputs_embeds(\n        self,\n        input_ids: torch.LongTensor,\n        pixel_values: torch.FloatTensor,\n        images_seq_mask: torch.LongTensor,\n        images_emb_mask: torch.LongTensor,\n        **kwargs,\n    ):\n        \"\"\"\n\n        Args:\n            input_ids (torch.LongTensor): [b, T]\n            pixel_values (torch.FloatTensor):   [b, n_images, 3, h, w]\n            images_seq_mask (torch.BoolTensor): [b, T]\n            images_emb_mask (torch.BoolTensor): [b, n_images, n_image_tokens]\n\n            assert torch.sum(images_seq_mask) == torch.sum(images_emb_mask)\n\n        Returns:\n            input_embeds (torch.Tensor): [b, T, D]\n        \"\"\"\n\n        bs, n = pixel_values.shape[0:2]\n        images = rearrange(pixel_values, \"b n c h w -> (b n) c h w\")\n        # [b x n, T2, D]\n        images_embeds = self.aligner(self.vision_model(images))\n\n        # [b x n, T2, D] -> [b, n x T2, D]\n        images_embeds = rearrange(images_embeds, \"(b n) t d -> b (n t) d\", b=bs, n=n)\n        # [b, n, T2] -> [b, n x T2]\n        images_emb_mask = rearrange(images_emb_mask, \"b n t -> b (n t)\")\n\n        # [b, T, D]\n        input_ids[input_ids < 0] = 0  # ignore the image embeddings\n        inputs_embeds = self.language_model.get_input_embeddings()(input_ids)\n\n        # replace with the image embeddings\n        inputs_embeds[images_seq_mask] = images_embeds[images_emb_mask]\n\n        return inputs_embeds\n\n\nAutoConfig.register(\"vision\", VisionConfig)\nAutoConfig.register(\"aligner\", AlignerConfig)\nAutoConfig.register(\"multi_modality\", MultiModalityConfig)\nAutoModelForCausalLM.register(MultiModalityConfig, MultiModalityCausalLM)\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/models/processing_vlm.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom dataclasses import dataclass\nfrom typing import Dict, List\n\nimport torch\nfrom PIL.Image import Image\nfrom transformers import LlamaTokenizerFast\nfrom transformers.processing_utils import ProcessorMixin\n\nfrom ..utils.conversation import get_conv_template\nfrom .image_processing_vlm import VLMImageProcessor\n\n\nclass DictOutput(object):\n    def keys(self):\n        return self.__dict__.keys()\n\n    def __getitem__(self, item):\n        return self.__dict__[item]\n\n    def __setitem__(self, key, value):\n        self.__dict__[key] = value\n\n\n@dataclass\nclass VLChatProcessorOutput(DictOutput):\n    sft_format: str\n    input_ids: torch.Tensor\n    pixel_values: torch.Tensor\n    num_image_tokens: torch.IntTensor\n\n    def __len__(self):\n        return len(self.input_ids)\n\n\n@dataclass\nclass BatchedVLChatProcessorOutput(DictOutput):\n    sft_format: List[str]\n    input_ids: torch.Tensor\n    pixel_values: torch.Tensor\n    attention_mask: torch.Tensor\n    images_seq_mask: torch.BoolTensor\n    images_emb_mask: torch.BoolTensor\n\n    def to(self, device, dtype=torch.bfloat16):\n        self.input_ids = self.input_ids.to(device)\n        self.attention_mask = self.attention_mask.to(device)\n        self.images_seq_mask = self.images_seq_mask.to(device)\n        self.images_emb_mask = self.images_emb_mask.to(device)\n        self.pixel_values = self.pixel_values.to(device=device, dtype=dtype)\n        return self\n\n\nclass VLChatProcessor(ProcessorMixin):\n    image_processor_class = \"AutoImageProcessor\"\n    tokenizer_class = (\"LlamaTokenizer\", \"LlamaTokenizerFast\")\n\n    attributes = [\"image_processor\", \"tokenizer\"]\n\n    system_prompt = (\n        \"You are a helpful language and vision assistant. \"\n        \"You are able to understand the visual content that the user provides, \"\n        \"and assist the user with a variety of tasks using natural language.\"\n    )\n\n    def __init__(\n        self,\n        image_processor: VLMImageProcessor,\n        tokenizer: LlamaTokenizerFast,\n        image_tag: str = \"<image_placeholder>\",\n        num_image_tokens: int = 576,\n        add_special_token: bool = False,\n        sft_format: str = \"deepseek\",\n        mask_prompt: bool = True,\n        ignore_id: int = -100,\n        **kwargs,\n    ):\n        self.image_processor = image_processor\n        self.tokenizer = tokenizer\n\n        image_id = self.tokenizer.vocab.get(image_tag)\n        if image_id is None:\n            special_tokens = [image_tag]\n            special_tokens_dict = {\"additional_special_tokens\": special_tokens}\n            self.tokenizer.add_special_tokens(special_tokens_dict)\n            print(f\"Add image tag = {image_tag} to the tokenizer\")\n\n        self.image_tag = image_tag\n        self.num_image_tokens = num_image_tokens\n        self.add_special_token = add_special_token\n        self.sft_format = sft_format\n        self.mask_prompt = mask_prompt\n        self.ignore_id = ignore_id\n\n        super().__init__(\n            image_processor,\n            tokenizer,\n            image_tag,\n            num_image_tokens,\n            add_special_token,\n            sft_format,\n            mask_prompt,\n            ignore_id,\n            **kwargs,\n        )\n\n    def new_chat_template(self):\n        conv = get_conv_template(self.sft_format)\n        conv.set_system_message(self.system_prompt)\n        return conv\n\n    def apply_sft_template_for_multi_turn_prompts(\n        self,\n        conversations: List[Dict[str, str]],\n        sft_format: str = \"deepseek\",\n        system_prompt: str = \"\",\n    ):\n        \"\"\"\n        Applies the SFT template to conversation.\n\n        An example of conversation:\n        conversation = [\n            {\n                \"role\": \"User\",\n                \"content\": \"<image_placeholder> is Figure 1.\\n<image_placeholder> is Figure 2.\\nWhich image is brighter?\",\n                \"images\": [\n                    \"./multi-images/attribute_comparison_1.png\",\n                    \"./multi-images/attribute_comparison_2.png\"\n                ]\n            },\n            {\n                \"role\": \"Assistant\",\n                \"content\": \"\"\n            }\n        ]\n\n        Args:\n            conversations (List[Dict]): A conversation with a List of Dict[str, str] text.\n            sft_format (str, optional): The format of the SFT template to use. Defaults to \"deepseek\".\n            system_prompt (str, optional): The system prompt to use in the SFT template. Defaults to \"\".\n\n        Returns:\n            sft_prompt (str): The formatted text.\n        \"\"\"\n\n        conv = get_conv_template(sft_format)\n        conv.set_system_message(system_prompt)\n        for message in conversations:\n            conv.append_message(message[\"role\"], message[\"content\"].strip())\n        sft_prompt = conv.get_prompt().strip()\n\n        return sft_prompt\n\n    @property\n    def image_token(self):\n        return self.image_tag\n\n    @property\n    def image_id(self):\n        image_id = self.tokenizer.vocab.get(self.image_tag)\n        return image_id\n\n    @property\n    def pad_id(self):\n        pad_id = self.tokenizer.pad_token_id\n        if pad_id is None:\n            pad_id = self.tokenizer.eos_token_id\n\n        return pad_id\n\n    def add_image_token(\n        self,\n        image_indices: List[int],\n        input_ids: torch.LongTensor,\n    ):\n        \"\"\"\n\n        Args:\n            image_indices (List[int]): [index_0, index_1, ..., index_j]\n            input_ids (torch.LongTensor): [N]\n\n        Returns:\n            input_ids (torch.LongTensor): [N + image tokens]\n            num_image_tokens (torch.IntTensor): [n_images]\n        \"\"\"\n\n        input_slices = []\n\n        start = 0\n        for index in image_indices:\n            if self.add_special_token:\n                end = index + 1\n            else:\n                end = index\n\n            # original text tokens\n            input_slices.append(input_ids[start:end])\n\n            # add image tokens, and set the mask as False\n            input_slices.append(\n                self.image_id * torch.ones((self.num_image_tokens,), dtype=torch.long)\n            )\n            start = index + 1\n\n        # the left part\n        input_slices.append(input_ids[start:])\n\n        # concat all slices\n        input_ids = torch.cat(input_slices, dim=0)\n        num_image_tokens = torch.IntTensor([self.num_image_tokens] * len(image_indices))\n\n        return input_ids, num_image_tokens\n\n    def process_one(\n        self,\n        prompt: str = None,\n        conversations: List[Dict[str, str]] = None,\n        images: List[Image] = None,\n        **kwargs,\n    ):\n        \"\"\"\n\n        Args:\n            prompt (str): the formatted prompt;\n            conversations (List[Dict]): conversations with a list of messages;\n            images (List[ImageType]): the list of images;\n            **kwargs:\n\n        Returns:\n            outputs (BaseProcessorOutput): the output of the processor,\n                - input_ids (torch.LongTensor): [N + image tokens]\n                - target_ids (torch.LongTensor): [N + image tokens]\n                - images (torch.FloatTensor): [n_images, 3, H, W]\n                - image_id (int): the id of the image token\n                - num_image_tokens (List[int]): the number of image tokens\n        \"\"\"\n\n        assert (\n            prompt is None or conversations is None\n        ), \"prompt and conversations cannot be used at the same time.\"\n\n        if prompt is None:\n            # apply sft format\n            sft_format = self.apply_sft_template_for_multi_turn_prompts(\n                conversations=conversations,\n                sft_format=self.sft_format,\n                system_prompt=self.system_prompt,\n            )\n        else:\n            sft_format = prompt\n\n        # tokenize\n        input_ids = self.tokenizer.encode(sft_format)\n        input_ids = torch.LongTensor(input_ids)\n\n        # add image tokens to the input_ids\n        image_token_mask: torch.BoolTensor = input_ids == self.image_id\n        image_indices = image_token_mask.nonzero()\n        input_ids, num_image_tokens = self.add_image_token(\n            image_indices=image_indices,\n            input_ids=input_ids,\n        )\n\n        # load images\n        images_outputs = self.image_processor(images, return_tensors=\"pt\")\n\n        prepare = VLChatProcessorOutput(\n            sft_format=sft_format,\n            input_ids=input_ids,\n            pixel_values=images_outputs.pixel_values,\n            num_image_tokens=num_image_tokens,\n        )\n\n        return prepare\n\n    def __call__(\n        self,\n        *,\n        prompt: str = None,\n        conversations: List[Dict[str, str]] = None,\n        images: List[Image] = None,\n        force_batchify: bool = True,\n        **kwargs,\n    ):\n        \"\"\"\n\n        Args:\n            prompt (str): the formatted prompt;\n            conversations (List[Dict]): conversations with a list of messages;\n            images (List[ImageType]): the list of images;\n            force_batchify (bool): force batchify the inputs;\n            **kwargs:\n\n        Returns:\n            outputs (BaseProcessorOutput): the output of the processor,\n                - input_ids (torch.LongTensor): [N + image tokens]\n                - images (torch.FloatTensor): [n_images, 3, H, W]\n                - image_id (int): the id of the image token\n                - num_image_tokens (List[int]): the number of image tokens\n        \"\"\"\n\n        prepare = self.process_one(\n            prompt=prompt, conversations=conversations, images=images\n        )\n\n        if force_batchify:\n            prepare = self.batchify([prepare])\n\n        return prepare\n\n    def batchify(\n        self, prepare_list: List[VLChatProcessorOutput]\n    ) -> BatchedVLChatProcessorOutput:\n        \"\"\"\n        Preprocesses the inputs for multimodal inference.\n\n        Args:\n            prepare_list (List[VLChatProcessorOutput]): A list of VLChatProcessorOutput.\n\n        Returns:\n            BatchedVLChatProcessorOutput: A dictionary of the inputs to use for multimodal inference.\n        \"\"\"\n\n        batch_size = len(prepare_list)\n        sft_format = []\n        n_images = []\n        seq_lens = []\n        for prepare in prepare_list:\n            n_images.append(len(prepare.num_image_tokens))\n            seq_lens.append(len(prepare))\n\n        input_token_max_len = max(seq_lens)\n        max_n_images = max(1, max(n_images))\n\n        batched_input_ids = torch.full(\n            (batch_size, input_token_max_len), self.pad_id\n        ).long()  # FIXME\n        batched_attention_mask = torch.zeros((batch_size, input_token_max_len)).long()\n        batched_pixel_values = torch.zeros(\n            (batch_size, max_n_images, *self.image_processor.default_shape)\n        ).float()\n        batched_images_seq_mask = torch.zeros((batch_size, input_token_max_len)).bool()\n        batched_images_emb_mask = torch.zeros(\n            (batch_size, max_n_images, self.num_image_tokens)\n        ).bool()\n\n        for i, prepare in enumerate(prepare_list):\n            input_ids = prepare.input_ids\n            seq_len = len(prepare)\n            n_image = len(prepare.num_image_tokens)\n            # left-padding\n            batched_attention_mask[i, -seq_len:] = 1\n            batched_input_ids[i, -seq_len:] = torch.LongTensor(input_ids)\n            batched_images_seq_mask[i, -seq_len:] = input_ids == self.image_id\n\n            if n_image > 0:\n                batched_pixel_values[i, :n_image] = prepare.pixel_values\n                for j, n_image_tokens in enumerate(prepare.num_image_tokens):\n                    batched_images_emb_mask[i, j, :n_image_tokens] = True\n\n            sft_format.append(prepare.sft_format)\n\n        batched_prepares = BatchedVLChatProcessorOutput(\n            input_ids=batched_input_ids,\n            attention_mask=batched_attention_mask,\n            pixel_values=batched_pixel_values,\n            images_seq_mask=batched_images_seq_mask,\n            images_emb_mask=batched_images_emb_mask,\n            sft_format=sft_format,\n        )\n\n        return batched_prepares\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/models/projector.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom typing import Tuple, Union\n\nimport torch\nimport torch.nn as nn\nfrom attrdict import AttrDict\n\n\nclass MlpProjector(nn.Module):\n    def __init__(self, cfg):\n        super().__init__()\n\n        self.cfg = cfg\n\n        if cfg.projector_type == \"identity\":\n            modules = nn.Identity()\n\n        elif cfg.projector_type == \"linear\":\n            modules = nn.Linear(cfg.input_dim, cfg.n_embed)\n\n        elif cfg.projector_type == \"mlp_gelu\":\n            mlp_depth = cfg.get(\"depth\", 1)\n            modules = [nn.Linear(cfg.input_dim, cfg.n_embed)]\n            for _ in range(1, mlp_depth):\n                modules.append(nn.GELU())\n                modules.append(nn.Linear(cfg.n_embed, cfg.n_embed))\n            modules = nn.Sequential(*modules)\n\n        elif cfg.projector_type == \"low_high_hybrid_split_mlp_gelu\":\n            mlp_depth = cfg.get(\"depth\", 1)\n            self.high_up_proj = nn.Linear(cfg.input_dim, cfg.n_embed // 2)\n            self.low_up_proj = nn.Linear(cfg.input_dim, cfg.n_embed // 2)\n\n            modules = []\n            for _ in range(1, mlp_depth):\n                modules.append(nn.GELU())\n                modules.append(nn.Linear(cfg.n_embed, cfg.n_embed))\n            modules = nn.Sequential(*modules)\n\n        else:\n            raise ValueError(f\"Unknown projector type: {cfg.projector_type}\")\n\n        self.layers = modules\n\n    def forward(\n        self, x_or_tuple: Union[Tuple[torch.Tensor, torch.Tensor], torch.Tensor]\n    ):\n        \"\"\"\n\n        Args:\n            x_or_tuple (Union[Tuple[torch.Tensor, torch.Tensor], torch.Tensor]:  if it is a tuple of torch.Tensor,\n                then it comes from the hybrid vision encoder, and x = high_res_x, low_res_x);\n                otherwise it is the feature from the single vision encoder.\n\n        Returns:\n            x (torch.Tensor): [b, s, c]\n        \"\"\"\n\n        if isinstance(x_or_tuple, tuple):\n            # self.cfg.projector_type == \"low_high_hybrid_split_mlp_gelu\":\n            high_x, low_x = x_or_tuple\n            high_x = self.high_up_proj(high_x)\n            low_x = self.low_up_proj(low_x)\n            x = torch.concat([high_x, low_x], dim=-1)\n        else:\n            x = x_or_tuple\n\n        return self.layers(x)\n\n\nif __name__ == \"__main__\":\n    cfg = AttrDict(\n        input_dim=1024,\n        n_embed=2048,\n        depth=2,\n        projector_type=\"low_high_hybrid_split_mlp_gelu\",\n    )\n    inputs = (torch.rand(4, 576, 1024), torch.rand(4, 576, 1024))\n\n    m = MlpProjector(cfg)\n    out = m(inputs)\n    print(out.shape)\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/models/sam.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport copy\nfrom dataclasses import dataclass\nfrom functools import partial\nfrom typing import List, Optional, Tuple, Type, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\nclass MLPBlock(nn.Module):\n    def __init__(\n        self,\n        embedding_dim: int,\n        mlp_dim: int,\n        act: Type[nn.Module] = nn.GELU,\n    ) -> None:\n        super().__init__()\n        self.lin1 = nn.Linear(embedding_dim, mlp_dim)\n        self.lin2 = nn.Linear(mlp_dim, embedding_dim)\n        self.act = act()\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        return self.lin2(self.act(self.lin1(x)))\n\n\n# From https://github.com/facebookresearch/detectron2/blob/main/detectron2/layers/batch_norm.py # noqa\n# Itself from https://github.com/facebookresearch/ConvNeXt/blob/d1fa8f6fef0a165b27399986cc2bdacc92777e40/models/convnext.py#L119  # noqa\nclass LayerNorm2d(nn.Module):\n    def __init__(self, num_channels: int, eps: float = 1e-6) -> None:\n        super().__init__()\n        self.weight = nn.Parameter(torch.ones(num_channels))\n        self.bias = nn.Parameter(torch.zeros(num_channels))\n        self.eps = eps\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        u = x.mean(1, keepdim=True)\n        s = (x - u).pow(2).mean(1, keepdim=True)\n        x = (x - u) / torch.sqrt(s + self.eps)\n        x = self.weight[:, None, None] * x + self.bias[:, None, None]\n        return x\n\n\n# This class and its supporting functions below lightly adapted from the ViTDet backbone available at: https://github.com/facebookresearch/detectron2/blob/main/detectron2/modeling/backbone/vit.py # noqa\nclass ImageEncoderViT(nn.Module):\n    def __init__(\n        self,\n        img_size: int = 1024,\n        patch_size: int = 16,\n        in_chans: int = 3,\n        embed_dim: int = 768,\n        depth: int = 12,\n        num_heads: int = 12,\n        mlp_ratio: float = 4.0,\n        out_chans: int = 256,\n        qkv_bias: bool = True,\n        norm_layer: Type[nn.Module] = nn.LayerNorm,\n        act_layer: Type[nn.Module] = nn.GELU,\n        use_abs_pos: bool = True,\n        use_rel_pos: bool = False,\n        rel_pos_zero_init: bool = True,\n        window_size: int = 0,\n        global_attn_indexes: Tuple[int, ...] = (),\n        downsample_channels: Tuple[int, ...] = (512, 1024),\n    ) -> None:\n        \"\"\"\n        Args:\n            img_size (int): Input image size.\n            patch_size (int): Patch size.\n            in_chans (int): Number of input image channels.\n            embed_dim (int): Patch embedding dimension.\n            depth (int): Depth of ViT.\n            num_heads (int): Number of attention heads in each ViT block.\n            mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n            qkv_bias (bool): If True, add a learnable bias to query, key, value.\n            norm_layer (nn.Module): Normalization layer.\n            act_layer (nn.Module): Activation layer.\n            use_abs_pos (bool): If True, use absolute positional embeddings.\n            use_rel_pos (bool): If True, add relative positional embeddings to the attention map.\n            rel_pos_zero_init (bool): If True, zero initialize relative positional parameters.\n            window_size (int): Window size for window attention blocks.\n            global_attn_indexes (list): Indexes for blocks using global attention.\n            downsample_channels (list): Channels for downsampling layers.\n        \"\"\"\n        super().__init__()\n        self.img_size = img_size\n\n        self.patch_embed = PatchEmbed(\n            kernel_size=(patch_size, patch_size),\n            stride=(patch_size, patch_size),\n            in_chans=in_chans,\n            embed_dim=embed_dim,\n        )\n\n        self.pos_embed: Optional[nn.Parameter] = None\n        if use_abs_pos:\n            # Initialize absolute positional embedding with pretrain image size.\n            self.pos_embed = nn.Parameter(\n                torch.zeros(\n                    1, img_size // patch_size, img_size // patch_size, embed_dim\n                )\n            )\n\n        self.blocks = nn.ModuleList()\n        for i in range(depth):\n            block = Block(\n                dim=embed_dim,\n                num_heads=num_heads,\n                mlp_ratio=mlp_ratio,\n                qkv_bias=qkv_bias,\n                norm_layer=norm_layer,\n                act_layer=act_layer,\n                use_rel_pos=use_rel_pos,\n                rel_pos_zero_init=rel_pos_zero_init,\n                window_size=window_size if i not in global_attn_indexes else 0,\n                input_size=(img_size // patch_size, img_size // patch_size),\n            )\n            self.blocks.append(block)\n\n        self.neck = nn.Sequential(\n            nn.Conv2d(\n                embed_dim,\n                out_chans,\n                kernel_size=1,\n                bias=False,\n            ),\n            LayerNorm2d(out_chans),\n            nn.Conv2d(\n                out_chans,\n                out_chans,\n                kernel_size=3,\n                padding=1,\n                bias=False,\n            ),\n            LayerNorm2d(out_chans),\n        )\n\n        in_channels = out_chans\n        downsamples = []\n        for i in range(len(downsample_channels)):\n            out_channels = downsample_channels[i]\n            downsamples.append(\n                nn.Conv2d(\n                    in_channels,\n                    out_channels,\n                    kernel_size=3,\n                    stride=2,\n                    padding=1,\n                    bias=False,\n                )\n            )\n            in_channels = out_channels\n        self.downsamples = nn.Sequential(*downsamples)\n\n        self.sam_hd = True\n        if self.sam_hd:\n            self.hd_alpha_downsamples = nn.Parameter(torch.zeros(1))\n            # self.neck_hd = nn.Linear(embed_dim, embed_dim)\n            self.neck_hd = copy.deepcopy(self.neck)\n            # self.downsamples_hd = copy.deepcopy(self.downsamples)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.patch_embed(x)\n        if self.pos_embed is not None:\n            x = x + self.pos_embed\n\n        global_features = []\n        for i, blk in enumerate(self.blocks):\n            x = blk(x)\n            if self.sam_hd and blk.window_size == 0:\n                global_features.append(x)\n\n        x = self.neck(x.permute(0, 3, 1, 2))\n        x_dtype = x.dtype\n        x = F.interpolate(\n            x.float(), size=(96, 96), mode=\"bilinear\", align_corners=False\n        ).to(x_dtype)\n        x = self.downsamples(x)\n\n        if self.sam_hd:\n            first_global_feature = self.neck_hd(global_features[0].permute(0, 3, 1, 2))\n            x_dtype = first_global_feature.dtype\n            first_global_feature = F.interpolate(\n                first_global_feature.float(),\n                size=(96, 96),\n                mode=\"bilinear\",\n                align_corners=False,\n            )\n            first_global_feature = self.downsamples(first_global_feature.to(x_dtype))\n            x = x + first_global_feature * self.hd_alpha_downsamples\n\n        return x\n\n\nclass Block(nn.Module):\n    \"\"\"Transformer blocks with support of window attention and residual propagation blocks\"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        num_heads: int,\n        mlp_ratio: float = 4.0,\n        qkv_bias: bool = True,\n        norm_layer: Type[nn.Module] = nn.LayerNorm,\n        act_layer: Type[nn.Module] = nn.GELU,\n        use_rel_pos: bool = False,\n        rel_pos_zero_init: bool = True,\n        window_size: int = 0,\n        input_size: Optional[Tuple[int, int]] = None,\n    ) -> None:\n        \"\"\"\n        Args:\n            dim (int): Number of input channels.\n            num_heads (int): Number of attention heads in each ViT block.\n            mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n            qkv_bias (bool): If True, add a learnable bias to query, key, value.\n            norm_layer (nn.Module): Normalization layer.\n            act_layer (nn.Module): Activation layer.\n            use_rel_pos (bool): If True, add relative positional embeddings to the attention map.\n            rel_pos_zero_init (bool): If True, zero initialize relative positional parameters.\n            window_size (int): Window size for window attention blocks. If it equals 0, then\n                use global attention.\n            input_size (tuple(int, int) or None): Input resolution for calculating the relative\n                positional parameter size.\n        \"\"\"\n        super().__init__()\n        self.norm1 = norm_layer(dim)\n        self.attn = Attention(\n            dim,\n            num_heads=num_heads,\n            qkv_bias=qkv_bias,\n            use_rel_pos=use_rel_pos,\n            rel_pos_zero_init=rel_pos_zero_init,\n            input_size=input_size if window_size == 0 else (window_size, window_size),\n        )\n\n        self.norm2 = norm_layer(dim)\n        self.mlp = MLPBlock(\n            embedding_dim=dim, mlp_dim=int(dim * mlp_ratio), act=act_layer\n        )\n\n        self.window_size = window_size\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        shortcut = x\n        x = self.norm1(x)\n        # Window partition\n        if self.window_size > 0:\n            H, W = x.shape[1], x.shape[2]\n            x, pad_hw = window_partition(x, self.window_size)\n\n        x = self.attn(x)\n        # Reverse window partition\n        if self.window_size > 0:\n            x = window_unpartition(x, self.window_size, pad_hw, (H, W))\n\n        x = shortcut + x\n        x = x + self.mlp(self.norm2(x))\n\n        return x\n\n\nclass Attention(nn.Module):\n    \"\"\"Multi-head Attention block with relative position embeddings.\"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        num_heads: int = 8,\n        qkv_bias: bool = True,\n        use_rel_pos: bool = False,\n        rel_pos_zero_init: bool = True,\n        input_size: Optional[Tuple[int, int]] = None,\n    ) -> None:\n        \"\"\"\n        Args:\n            dim (int): Number of input channels.\n            num_heads (int): Number of attention heads.\n            qkv_bias (bool):  If True, add a learnable bias to query, key, value.\n            rel_pos (bool): If True, add relative positional embeddings to the attention map.\n            rel_pos_zero_init (bool): If True, zero initialize relative positional parameters.\n            input_size (tuple(int, int) or None): Input resolution for calculating the relative\n                positional parameter size.\n        \"\"\"\n        super().__init__()\n        self.num_heads = num_heads\n        head_dim = dim // num_heads\n        self.scale = head_dim**-0.5\n\n        self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n        self.proj = nn.Linear(dim, dim)\n\n        self.use_rel_pos = use_rel_pos\n        if self.use_rel_pos:\n            assert (\n                input_size is not None\n            ), \"Input size must be provided if using relative positional encoding.\"\n            # initialize relative positional embeddings\n            self.rel_pos_h = nn.Parameter(torch.zeros(2 * input_size[0] - 1, head_dim))\n            self.rel_pos_w = nn.Parameter(torch.zeros(2 * input_size[1] - 1, head_dim))\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        B, H, W, _ = x.shape\n        # qkv with shape (3, B, nHead, H * W, C)\n        qkv = (\n            self.qkv(x).reshape(B, H * W, 3, self.num_heads, -1).permute(2, 0, 3, 1, 4)\n        )\n        # q, k, v with shape (B * nHead, H * W, C)\n        q, k, v = qkv.reshape(3, B * self.num_heads, H * W, -1).unbind(0)\n\n        def do_attention(q, k, v):\n            attn = (q * self.scale) @ k.transpose(-2, -1)\n            if self.use_rel_pos:\n                attn = add_decomposed_rel_pos(\n                    attn, q, self.rel_pos_h, self.rel_pos_w, (H, W), (H, W)\n                )\n\n            attn = attn.softmax(dim=-1)\n            x = (\n                (attn @ v)\n                .view(B, self.num_heads, H, W, -1)\n                .permute(0, 2, 3, 1, 4)\n                .reshape(B, H, W, -1)\n            )\n\n            return x\n\n        # from haiscale.utils import on_demand_checkpoint\n        # x = on_demand_checkpoint(do_attention, q, k, v)\n        x = do_attention(q, k, v)\n        x = self.proj(x)\n\n        return x\n\n\ndef window_partition(\n    x: torch.Tensor, window_size: int\n) -> Tuple[torch.Tensor, Tuple[int, int]]:\n    \"\"\"\n    Partition into non-overlapping windows with padding if needed.\n    Args:\n        x (tensor): input tokens with [B, H, W, C].\n        window_size (int): window size.\n\n    Returns:\n        windows: windows after partition with [B * num_windows, window_size, window_size, C].\n        (Hp, Wp): padded height and width before partition\n    \"\"\"\n    B, H, W, C = x.shape\n\n    pad_h = (window_size - H % window_size) % window_size\n    pad_w = (window_size - W % window_size) % window_size\n    if pad_h > 0 or pad_w > 0:\n        x = F.pad(x, (0, 0, 0, pad_w, 0, pad_h))\n    Hp, Wp = H + pad_h, W + pad_w\n\n    x = x.view(B, Hp // window_size, window_size, Wp // window_size, window_size, C)\n    windows = (\n        x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C)\n    )\n    return windows, (Hp, Wp)\n\n\ndef window_unpartition(\n    windows: torch.Tensor,\n    window_size: int,\n    pad_hw: Tuple[int, int],\n    hw: Tuple[int, int],\n) -> torch.Tensor:\n    \"\"\"\n    Window unpartition into original sequences and removing padding.\n    Args:\n        windows (tensor): input tokens with [B * num_windows, window_size, window_size, C].\n        window_size (int): window size.\n        pad_hw (Tuple): padded height and width (Hp, Wp).\n        hw (Tuple): original height and width (H, W) before padding.\n\n    Returns:\n        x: unpartitioned sequences with [B, H, W, C].\n    \"\"\"\n    Hp, Wp = pad_hw\n    H, W = hw\n    B = windows.shape[0] // (Hp * Wp // window_size // window_size)\n    x = windows.view(\n        B, Hp // window_size, Wp // window_size, window_size, window_size, -1\n    )\n    x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, Hp, Wp, -1)\n\n    if Hp > H or Wp > W:\n        x = x[:, :H, :W, :].contiguous()\n    return x\n\n\ndef get_rel_pos(q_size: int, k_size: int, rel_pos: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Get relative positional embeddings according to the relative positions of\n        query and key sizes.\n    Args:\n        q_size (int): size of query q.\n        k_size (int): size of key k.\n        rel_pos (Tensor): relative position embeddings (L, C).\n\n    Returns:\n        Extracted positional embeddings according to relative positions.\n    \"\"\"\n    max_rel_dist = int(2 * max(q_size, k_size) - 1)\n    # Interpolate rel pos if needed.\n    if rel_pos.shape[0] != max_rel_dist:\n        # Interpolate rel pos.\n        rel_pos_resized = F.interpolate(\n            rel_pos.reshape(1, rel_pos.shape[0], -1).permute(0, 2, 1),\n            size=max_rel_dist,\n            mode=\"linear\",\n        )\n        rel_pos_resized = rel_pos_resized.reshape(-1, max_rel_dist).permute(1, 0)\n    else:\n        rel_pos_resized = rel_pos\n\n    # Scale the coords with short length if shapes for q and k are different.\n    q_coords = torch.arange(q_size)[:, None] * max(k_size / q_size, 1.0)\n    k_coords = torch.arange(k_size)[None, :] * max(q_size / k_size, 1.0)\n    relative_coords = (q_coords - k_coords) + (k_size - 1) * max(q_size / k_size, 1.0)\n\n    return rel_pos_resized[relative_coords.long()]\n\n\ndef add_decomposed_rel_pos(\n    attn: torch.Tensor,\n    q: torch.Tensor,\n    rel_pos_h: torch.Tensor,\n    rel_pos_w: torch.Tensor,\n    q_size: Tuple[int, int],\n    k_size: Tuple[int, int],\n) -> torch.Tensor:\n    \"\"\"\n    Calculate decomposed Relative Positional Embeddings from :paper:`mvitv2`.\n    https://github.com/facebookresearch/mvit/blob/19786631e330df9f3622e5402b4a419a263a2c80/mvit/models/attention.py   # noqa B950\n    Args:\n        attn (Tensor): attention map.\n        q (Tensor): query q in the attention layer with shape (B, q_h * q_w, C).\n        rel_pos_h (Tensor): relative position embeddings (Lh, C) for height axis.\n        rel_pos_w (Tensor): relative position embeddings (Lw, C) for width axis.\n        q_size (Tuple): spatial sequence size of query q with (q_h, q_w).\n        k_size (Tuple): spatial sequence size of key k with (k_h, k_w).\n\n    Returns:\n        attn (Tensor): attention map with added relative positional embeddings.\n    \"\"\"\n    q_h, q_w = q_size\n    k_h, k_w = k_size\n    Rh = get_rel_pos(q_h, k_h, rel_pos_h)\n    Rw = get_rel_pos(q_w, k_w, rel_pos_w)\n\n    B, _, dim = q.shape\n    r_q = q.reshape(B, q_h, q_w, dim)\n    rel_h = torch.einsum(\"bhwc,hkc->bhwk\", r_q, Rh)\n    rel_w = torch.einsum(\"bhwc,wkc->bhwk\", r_q, Rw)\n\n    attn = (\n        attn.view(B, q_h, q_w, k_h, k_w)\n        + rel_h[:, :, :, :, None]\n        + rel_w[:, :, :, None, :]\n    ).view(B, q_h * q_w, k_h * k_w)\n\n    return attn\n\n\nclass PatchEmbed(nn.Module):\n    \"\"\"\n    Image to Patch Embedding.\n    \"\"\"\n\n    def __init__(\n        self,\n        kernel_size: Tuple[int, int] = (16, 16),\n        stride: Tuple[int, int] = (16, 16),\n        padding: Tuple[int, int] = (0, 0),\n        in_chans: int = 3,\n        embed_dim: int = 768,\n    ) -> None:\n        \"\"\"\n        Args:\n            kernel_size (Tuple): kernel size of the projection layer.\n            stride (Tuple): stride of the projection layer.\n            padding (Tuple): padding size of the projection layer.\n            in_chans (int): Number of input image channels.\n            embed_dim (int): Patch embedding dimension.\n        \"\"\"\n        super().__init__()\n\n        self.proj = nn.Conv2d(\n            in_chans, embed_dim, kernel_size=kernel_size, stride=stride, padding=padding\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.proj(x)\n        # B C H W -> B H W C\n        x = x.permute(0, 2, 3, 1)\n        return x\n\n\n@dataclass\nclass SAMViTCfg:\n    image_size: Union[Tuple[int, int], int] = 1024\n    width: int = 1024\n    layers: int = 23\n    heads: int = 16\n    patch_size: int = 16\n    window_size: int = 14\n    prompt_embed_dim: int = 256\n    global_attn_indexes: Union[List[int], Tuple[int]] = (5, 11, 17, 23)\n    downsample_channels: Union[List[int], Tuple[int]] = (512, 1024)\n\n\nSAM_MODEL_CONFIG = {\n    \"sam_vit_b\": {\n        \"width\": 768,\n        \"layers\": 12,\n        \"heads\": 12,\n        \"global_attn_indexes\": [2, 5, 8, 11],\n        \"downsample_channels\": (),\n    },\n    \"sam_b_downsample\": {\n        \"width\": 768,\n        \"layers\": 12,\n        \"heads\": 12,\n        \"global_attn_indexes\": [2, 5, 8, 11],\n        \"downsample_channels\": (512, 1024),\n    },\n    \"sam_vit_l\": {\n        \"width\": 1024,\n        \"layers\": 24,\n        \"heads\": 16,\n        \"global_attn_indexes\": [5, 11, 17, 23],\n        \"downsample_channels\": (),\n    },\n    \"sam_vit_h\": {\n        \"width\": 1280,\n        \"layers\": 32,\n        \"heads\": 16,\n        \"global_attn_indexes\": [7, 15, 23, 31],\n        \"downsample_channels\": (),\n    },\n}\n\n\ndef create_sam_vit(\n    model_name: str = \"sam_b_downsample\",\n    image_size: int = 1024,\n    ckpt_path: str = \"\",\n    **kwargs,\n):\n    assert (\n        model_name in SAM_MODEL_CONFIG.keys()\n    ), f\"model name: {model_name} should be in {SAM_MODEL_CONFIG.keys()}\"\n\n    sam_cfg = SAMViTCfg(**SAM_MODEL_CONFIG[model_name])\n    image_encoder = ImageEncoderViT(\n        depth=sam_cfg.layers,\n        embed_dim=sam_cfg.width,\n        img_size=image_size,\n        mlp_ratio=4,\n        norm_layer=partial(torch.nn.LayerNorm, eps=1e-6),\n        num_heads=sam_cfg.heads,\n        patch_size=sam_cfg.patch_size,\n        qkv_bias=True,\n        use_rel_pos=True,\n        global_attn_indexes=sam_cfg.global_attn_indexes,\n        window_size=14,\n        out_chans=sam_cfg.prompt_embed_dim,\n        downsample_channels=sam_cfg.downsample_channels,\n    )\n\n    if ckpt_path:\n        state_dict = torch.load(ckpt_path)\n        image_encoder.load_state_dict(state_dict, strict=False)\n        print(f\"SAM-ViT restores from {ckpt_path}\")\n\n    return image_encoder\n\n\nif __name__ == \"__main__\":\n    x = torch.zeros(2, 3, 1024, 1024).bfloat16()\n    # x.permute(0, 3, 1, 2)\n    net = create_sam_vit().bfloat16()\n    out = net(x)\n    print(x.shape, out.shape)\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/models/siglip_vit.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n# https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/vision_transformer.py\nimport math\nimport warnings\nfrom dataclasses import dataclass\nfrom functools import partial\nfrom typing import (\n    Callable,\n    Dict,\n    Final,\n    List,\n    Literal,\n    Optional,\n    Sequence,\n    Set,\n    Tuple,\n    Type,\n    Union,\n)\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom timm.layers import (\n    AttentionPoolLatent,\n    DropPath,\n    LayerType,\n    Mlp,\n    PatchDropout,\n    PatchEmbed,\n    resample_abs_pos_embed,\n)\nfrom timm.models._manipulate import checkpoint_seq, named_apply\n\n\ndef _no_grad_trunc_normal_(tensor, mean, std, a, b):\n    # Cut & paste from PyTorch official master until it's in a few official releases - RW\n    # Method based on https://people.sc.fsu.edu/~jburkardt/presentations/truncated_normal.pdf\n    def norm_cdf(x):\n        # Computes standard normal cumulative distribution function\n        return (1.0 + math.erf(x / math.sqrt(2.0))) / 2.0\n\n    if (mean < a - 2 * std) or (mean > b + 2 * std):\n        warnings.warn(\n            \"mean is more than 2 std from [a, b] in nn.init.trunc_normal_. \"\n            \"The distribution of values may be incorrect.\",\n            stacklevel=2,\n        )\n\n    with torch.no_grad():\n        # Values are generated by using a truncated uniform distribution and\n        # then using the inverse CDF for the normal distribution.\n        # Get upper and lower cdf values\n        l = norm_cdf((a - mean) / std)  # noqa: E741\n        u = norm_cdf((b - mean) / std)\n\n        # Uniformly fill tensor with values from [l, u], then translate to\n        # [2l-1, 2u-1].\n        tensor.uniform_(2 * l - 1, 2 * u - 1)\n\n        # Use inverse cdf transform for normal distribution to get truncated\n        # standard normal\n        tensor.erfinv_()\n\n        # Transform to proper mean, std\n        tensor.mul_(std * math.sqrt(2.0))\n        tensor.add_(mean)\n\n        # Clamp to ensure it's in the proper range\n        tensor.clamp_(min=a, max=b)\n        return tensor\n\n\ndef trunc_normal_(tensor, mean=0.0, std=1.0, a=-2.0, b=2.0):\n    # type: (torch.Tensor, float, float, float, float) -> torch.Tensor\n    r\"\"\"The original timm.models.layers.weight_init.trunc_normal_ can not handle bfloat16 yet, here we first\n    convert the tensor to float32, apply the trunc_normal_() in float32, and then convert it back to its original dtype.\n    Fills the input Tensor with values drawn from a truncated normal distribution. The values are effectively drawn\n    from the normal distribution :math:`\\mathcal{N}(\\text{mean}, \\text{std}^2)`\n    with values outside :math:`[a, b]` redrawn until they are within\n    the bounds. The method used for generating the random values works\n    best when :math:`a \\leq \\text{mean} \\leq b`.\n    Args:\n        tensor: an n-dimensional `torch.Tensor`\n        mean: the mean of the normal distribution\n        std: the standard deviation of the normal distribution\n        a: the minimum cutoff value\n        b: the maximum cutoff value\n    Examples:\n        >>> w = torch.empty(3, 5)\n        >>> nn.init.trunc_normal_(w)\n    \"\"\"\n\n    with torch.no_grad():\n        dtype = tensor.dtype\n        tensor_fp32 = tensor.float()\n        tensor_fp32 = _no_grad_trunc_normal_(tensor_fp32, mean, std, a, b)\n        tensor_dtype = tensor_fp32.to(dtype=dtype)\n        tensor.copy_(tensor_dtype)\n\n\ndef init_weights(self):\n    if self.pos_embed is not None:\n        trunc_normal_(self.pos_embed, std=self.pos_embed.shape[1] ** -0.5)\n    trunc_normal_(self.latent, std=self.latent_dim**-0.5)\n\n\ndef init_weights_vit_timm(module: nn.Module, name: str = \"\") -> None:\n    \"\"\"ViT weight initialization, original timm impl (for reproducibility)\"\"\"\n    if isinstance(module, nn.Linear):\n        trunc_normal_(module.weight, std=0.02)\n        if module.bias is not None:\n            nn.init.zeros_(module.bias)\n    elif hasattr(module, \"init_weights\"):\n        module.init_weights()\n\n\nclass Attention(nn.Module):\n    fused_attn: Final[bool]\n\n    def __init__(\n        self,\n        dim: int,\n        num_heads: int = 8,\n        qkv_bias: bool = False,\n        qk_norm: bool = False,\n        attn_drop: float = 0.0,\n        proj_drop: float = 0.0,\n        norm_layer: nn.Module = nn.LayerNorm,\n    ) -> None:\n        super().__init__()\n        assert dim % num_heads == 0, \"dim should be divisible by num_heads\"\n        self.num_heads = num_heads\n        self.head_dim = dim // num_heads\n        self.scale = self.head_dim**-0.5\n        # self.fused_attn = use_fused_attn()\n        self.fused_attn = True\n\n        self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n        self.q_norm = norm_layer(self.head_dim) if qk_norm else nn.Identity()\n        self.k_norm = norm_layer(self.head_dim) if qk_norm else nn.Identity()\n        self.attn_drop = nn.Dropout(attn_drop)\n        self.proj = nn.Linear(dim, dim)\n        self.proj_drop = nn.Dropout(proj_drop) if proj_drop > 0.0 else nn.Identity()\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        B, N, C = x.shape\n        qkv = (\n            self.qkv(x)\n            .reshape(B, N, 3, self.num_heads, self.head_dim)\n            .permute(2, 0, 3, 1, 4)\n        )\n        q, k, v = qkv.unbind(0)\n        q, k = self.q_norm(q), self.k_norm(k)\n\n        if self.fused_attn:\n            x = F.scaled_dot_product_attention(\n                q,\n                k,\n                v,\n                dropout_p=self.attn_drop.p if self.training else 0.0,\n            )\n        else:\n            q = q * self.scale\n            attn = q @ k.transpose(-2, -1)\n            attn = attn.softmax(dim=-1)\n            attn = self.attn_drop(attn)\n            x = attn @ v\n\n        x = x.transpose(1, 2).reshape(B, N, C)\n        x = self.proj(x)\n        x = self.proj_drop(x)\n        return x\n\n\nclass LayerScale(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        init_values: float = 1e-5,\n        inplace: bool = False,\n    ) -> None:\n        super().__init__()\n        self.inplace = inplace\n        self.gamma = nn.Parameter(init_values * torch.ones(dim))\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        return x.mul_(self.gamma) if self.inplace else x * self.gamma\n\n\nclass Block(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        num_heads: int,\n        mlp_ratio: float = 4.0,\n        qkv_bias: bool = False,\n        qk_norm: bool = False,\n        proj_drop: float = 0.0,\n        attn_drop: float = 0.0,\n        init_values: Optional[float] = None,\n        drop_path: float = 0.0,\n        act_layer: nn.Module = nn.GELU,\n        norm_layer: nn.Module = nn.LayerNorm,\n        mlp_layer: nn.Module = Mlp,\n    ) -> None:\n        super().__init__()\n        self.norm1 = norm_layer(dim)\n        self.attn = Attention(\n            dim,\n            num_heads=num_heads,\n            qkv_bias=qkv_bias,\n            qk_norm=qk_norm,\n            attn_drop=attn_drop,\n            proj_drop=proj_drop,\n            norm_layer=norm_layer,\n        )\n        self.ls1 = (\n            LayerScale(dim, init_values=init_values) if init_values else nn.Identity()\n        )\n        self.drop_path1 = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n\n        self.norm2 = norm_layer(dim)\n        self.mlp = mlp_layer(\n            in_features=dim,\n            hidden_features=int(dim * mlp_ratio),\n            act_layer=act_layer,\n            drop=proj_drop,\n        )\n        self.ls2 = (\n            LayerScale(dim, init_values=init_values) if init_values else nn.Identity()\n        )\n        self.drop_path2 = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = x + self.drop_path1(self.ls1(self.attn(self.norm1(x))))\n        x = x + self.drop_path2(self.ls2(self.mlp(self.norm2(x))))\n        return x\n\n\nclass VisionTransformer(nn.Module):\n    \"\"\"Vision Transformer\n\n    A PyTorch impl of : `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale`\n        - https://arxiv.org/abs/2010.11929\n    \"\"\"\n\n    dynamic_img_size: Final[bool]\n\n    def __init__(\n        self,\n        img_size: Union[int, Tuple[int, int]] = 224,\n        patch_size: Union[int, Tuple[int, int]] = 16,\n        in_chans: int = 3,\n        num_classes: int = 1000,\n        global_pool: Literal[\"\", \"avg\", \"token\", \"map\"] = \"token\",\n        embed_dim: int = 768,\n        depth: int = 12,\n        num_heads: int = 12,\n        mlp_ratio: float = 4.0,\n        qkv_bias: bool = True,\n        qk_norm: bool = False,\n        init_values: Optional[float] = None,\n        class_token: bool = True,\n        no_embed_class: bool = False,\n        reg_tokens: int = 0,\n        pre_norm: bool = False,\n        fc_norm: Optional[bool] = None,\n        dynamic_img_size: bool = False,\n        dynamic_img_pad: bool = False,\n        drop_rate: float = 0.0,\n        pos_drop_rate: float = 0.0,\n        patch_drop_rate: float = 0.0,\n        proj_drop_rate: float = 0.0,\n        attn_drop_rate: float = 0.0,\n        drop_path_rate: float = 0.0,\n        weight_init: Literal[\"skip\", \"jax\", \"jax_nlhb\", \"moco\", \"\"] = \"\",\n        embed_layer: Callable = PatchEmbed,\n        norm_layer: Optional[LayerType] = None,\n        act_layer: Optional[LayerType] = None,\n        block_fn: Type[nn.Module] = Block,\n        mlp_layer: Type[nn.Module] = Mlp,\n        ignore_head: bool = False,\n    ) -> None:\n        \"\"\"\n        Args:\n            img_size: Input image size.\n            patch_size: Patch size.\n            in_chans: Number of image input channels.\n            num_classes: Number of classes for classification head.\n            global_pool: Type of global pooling for final sequence (default: 'token').\n            embed_dim: Transformer embedding dimension.\n            depth: Depth of transformer.\n            num_heads: Number of attention heads.\n            mlp_ratio: Ratio of mlp hidden dim to embedding dim.\n            qkv_bias: Enable bias for qkv projections if True.\n            init_values: Layer-scale init values (layer-scale enabled if not None).\n            class_token: Use class token.\n            no_embed_class: Don't include position embeddings for class (or reg) tokens.\n            reg_tokens: Number of register tokens.\n            fc_norm: Pre head norm after pool (instead of before), if None, enabled when global_pool == 'avg'.\n            drop_rate: Head dropout rate.\n            pos_drop_rate: Position embedding dropout rate.\n            attn_drop_rate: Attention dropout rate.\n            drop_path_rate: Stochastic depth rate.\n            weight_init: Weight initialization scheme.\n            embed_layer: Patch embedding layer.\n            norm_layer: Normalization layer.\n            act_layer: MLP activation layer.\n            block_fn: Transformer block layer.\n        \"\"\"\n        super().__init__()\n        assert global_pool in (\"\", \"avg\", \"token\", \"map\")\n        assert class_token or global_pool != \"token\"\n        use_fc_norm = global_pool == \"avg\" if fc_norm is None else fc_norm\n        # norm_layer = get_norm_layer(norm_layer) or partial(nn.LayerNorm, eps=1e-6)\n        # act_layer = get_act_layer(act_layer) or nn.GELU\n        norm_layer = partial(nn.LayerNorm, eps=1e-6)\n        act_layer = nn.GELU\n\n        self.num_classes = num_classes\n        self.global_pool = global_pool\n        self.num_features = (\n            self.embed_dim\n        ) = embed_dim  # num_features for consistency with other models\n        self.num_prefix_tokens = 1 if class_token else 0\n        self.num_prefix_tokens += reg_tokens\n        self.num_reg_tokens = reg_tokens\n        self.has_class_token = class_token\n        self.no_embed_class = (\n            no_embed_class  # don't embed prefix positions (includes reg)\n        )\n        self.dynamic_img_size = dynamic_img_size\n        self.grad_checkpointing = False\n        self.ignore_head = ignore_head\n\n        embed_args = {}\n        if dynamic_img_size:\n            # flatten deferred until after pos embed\n            embed_args.update(dict(strict_img_size=False, output_fmt=\"NHWC\"))\n        self.patch_embed = embed_layer(\n            img_size=img_size,\n            patch_size=patch_size,\n            in_chans=in_chans,\n            embed_dim=embed_dim,\n            bias=not pre_norm,  # disable bias if pre-norm is used (e.g. CLIP)\n            dynamic_img_pad=dynamic_img_pad,\n            **embed_args,\n        )\n        num_patches = self.patch_embed.num_patches\n\n        self.cls_token = (\n            nn.Parameter(torch.zeros(1, 1, embed_dim)) if class_token else None\n        )\n        self.reg_token = (\n            nn.Parameter(torch.zeros(1, reg_tokens, embed_dim)) if reg_tokens else None\n        )\n        embed_len = (\n            num_patches if no_embed_class else num_patches + self.num_prefix_tokens\n        )\n        self.pos_embed = nn.Parameter(torch.randn(1, embed_len, embed_dim) * 0.02)\n        self.pos_drop = nn.Dropout(p=pos_drop_rate)\n        if patch_drop_rate > 0:\n            self.patch_drop = PatchDropout(\n                patch_drop_rate,\n                num_prefix_tokens=self.num_prefix_tokens,\n            )\n        else:\n            self.patch_drop = nn.Identity()\n        self.norm_pre = norm_layer(embed_dim) if pre_norm else nn.Identity()\n\n        dpr = [\n            x.item() for x in torch.linspace(0, drop_path_rate, depth)\n        ]  # stochastic depth decay rule\n        self.blocks = nn.Sequential(\n            *[\n                block_fn(\n                    dim=embed_dim,\n                    num_heads=num_heads,\n                    mlp_ratio=mlp_ratio,\n                    qkv_bias=qkv_bias,\n                    qk_norm=qk_norm,\n                    init_values=init_values,\n                    proj_drop=proj_drop_rate,\n                    attn_drop=attn_drop_rate,\n                    drop_path=dpr[i],\n                    norm_layer=norm_layer,\n                    act_layer=act_layer,\n                    mlp_layer=mlp_layer,\n                )\n                for i in range(depth)\n            ]\n        )\n        self.norm = norm_layer(embed_dim) if not use_fc_norm else nn.Identity()\n\n        # Classifier Head\n        if global_pool == \"map\":\n            AttentionPoolLatent.init_weights = init_weights\n            self.attn_pool = AttentionPoolLatent(\n                self.embed_dim,\n                num_heads=num_heads,\n                mlp_ratio=mlp_ratio,\n                norm_layer=norm_layer,\n            )\n        else:\n            self.attn_pool = None\n        self.fc_norm = norm_layer(embed_dim) if use_fc_norm else nn.Identity()\n        self.head_drop = nn.Dropout(drop_rate)\n        self.head = (\n            nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity()\n        )\n\n        if weight_init != \"skip\":\n            self.init_weights(weight_init)\n\n    def init_weights(self, mode: Literal[\"jax\", \"jax_nlhb\", \"moco\", \"\"] = \"\") -> None:\n        assert mode in (\"jax\", \"jax_nlhb\", \"moco\", \"\")\n        # head_bias = -math.log(self.num_classes) if \"nlhb\" in mode else 0.0\n        trunc_normal_(self.pos_embed, std=0.02)\n        if self.cls_token is not None:\n            nn.init.normal_(self.cls_token, std=1e-6)\n        named_apply(init_weights_vit_timm, self)\n\n    @torch.jit.ignore\n    def no_weight_decay(self) -> Set:\n        return {\"pos_embed\", \"cls_token\", \"dist_token\"}\n\n    @torch.jit.ignore\n    def group_matcher(self, coarse: bool = False) -> Dict:\n        return dict(\n            stem=r\"^cls_token|pos_embed|patch_embed\",  # stem and embed\n            blocks=[(r\"^blocks\\.(\\d+)\", None), (r\"^norm\", (99999,))],\n        )\n\n    @torch.jit.ignore\n    def set_grad_checkpointing(self, enable: bool = True) -> None:\n        self.grad_checkpointing = enable\n\n    @torch.jit.ignore\n    def get_classifier(self) -> nn.Module:\n        return self.head\n\n    def reset_classifier(self, num_classes: int, global_pool=None) -> None:\n        self.num_classes = num_classes\n        if global_pool is not None:\n            assert global_pool in (\"\", \"avg\", \"token\", \"map\")\n            if global_pool == \"map\" and self.attn_pool is None:\n                assert (\n                    False\n                ), \"Cannot currently add attention pooling in reset_classifier().\"\n            elif global_pool != \"map \" and self.attn_pool is not None:\n                self.attn_pool = None  # remove attention pooling\n            self.global_pool = global_pool\n        self.head = (\n            nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity()\n        )\n\n    def _pos_embed(self, x: torch.Tensor) -> torch.Tensor:\n        if self.dynamic_img_size:\n            B, H, W, C = x.shape\n            pos_embed = resample_abs_pos_embed(\n                self.pos_embed,\n                (H, W),\n                num_prefix_tokens=0 if self.no_embed_class else self.num_prefix_tokens,\n            )\n            x = x.view(B, -1, C)\n        else:\n            pos_embed = self.pos_embed\n\n        to_cat = []\n        if self.cls_token is not None:\n            to_cat.append(self.cls_token.expand(x.shape[0], -1, -1))\n        if self.reg_token is not None:\n            to_cat.append(self.reg_token.expand(x.shape[0], -1, -1))\n\n        if self.no_embed_class:\n            # deit-3, updated JAX (big vision)\n            # position embedding does not overlap with class token, add then concat\n            x = x + pos_embed\n            if to_cat:\n                x = torch.cat(to_cat + [x], dim=1)\n        else:\n            # original timm, JAX, and deit vit impl\n            # pos_embed has entry for class token, concat then add\n            if to_cat:\n                x = torch.cat(to_cat + [x], dim=1)\n            x = x + pos_embed\n\n        return self.pos_drop(x)\n\n    def _intermediate_layers(\n        self,\n        x: torch.Tensor,\n        n: Union[int, Sequence] = 1,\n    ) -> List[torch.Tensor]:\n        outputs, num_blocks = [], len(self.blocks)\n        take_indices = set(\n            range(num_blocks - n, num_blocks) if isinstance(n, int) else n\n        )\n\n        # forward pass\n        x = self.patch_embed(x)\n        x = self._pos_embed(x)\n        x = self.patch_drop(x)\n        x = self.norm_pre(x)\n        for i, blk in enumerate(self.blocks):\n            x = blk(x)\n            if i in take_indices:\n                outputs.append(x)\n\n        return outputs\n\n    def get_intermediate_layers(\n        self,\n        x: torch.Tensor,\n        n: Union[int, Sequence] = 1,\n        reshape: bool = False,\n        return_prefix_tokens: bool = False,\n        norm: bool = False,\n    ) -> Tuple[Union[torch.Tensor, Tuple[torch.Tensor]]]:\n        \"\"\"Intermediate layer accessor (NOTE: This is a WIP experiment).\n        Inspired by DINO / DINOv2 interface\n        \"\"\"\n        # take last n blocks if n is an int, if in is a sequence, select by matching indices\n        outputs = self._intermediate_layers(x, n)\n        if norm:\n            outputs = [self.norm(out) for out in outputs]\n        prefix_tokens = [out[:, 0 : self.num_prefix_tokens] for out in outputs]\n        outputs = [out[:, self.num_prefix_tokens :] for out in outputs]\n\n        if reshape:\n            grid_size = self.patch_embed.grid_size\n            outputs = [\n                out.reshape(x.shape[0], grid_size[0], grid_size[1], -1)\n                .permute(0, 3, 1, 2)\n                .contiguous()\n                for out in outputs\n            ]\n\n        if return_prefix_tokens:\n            return tuple(zip(outputs, prefix_tokens))\n        return tuple(outputs)\n\n    def forward_features(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.patch_embed(x)\n        x = self._pos_embed(x)\n        x = self.patch_drop(x)\n        x = self.norm_pre(x)\n        if self.grad_checkpointing and not torch.jit.is_scripting():\n            x = checkpoint_seq(self.blocks, x)\n        else:\n            x = self.blocks(x)\n        x = self.norm(x)\n        return x\n\n    def forward_head(self, x: torch.Tensor, pre_logits: bool = False) -> torch.Tensor:\n        if self.attn_pool is not None:\n            x = self.attn_pool(x)\n        elif self.global_pool == \"avg\":\n            x = x[:, self.num_prefix_tokens :].mean(dim=1)\n        elif self.global_pool:\n            x = x[:, 0]  # class token\n        x = self.fc_norm(x)\n        x = self.head_drop(x)\n        return x if pre_logits else self.head(x)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.forward_features(x)\n        if not self.ignore_head:\n            x = self.forward_head(x)\n        return x\n\n\n@dataclass\nclass SigLIPVisionCfg:\n    width: int = 1152\n    layers: Union[Tuple[int, int, int, int], int] = 27\n    heads: int = 16\n    patch_size: int = 14\n    image_size: Union[Tuple[int, int], int] = 336\n    global_pool: str = \"map\"\n    mlp_ratio: float = 3.7362\n    class_token: bool = False\n    num_classes: int = 0\n    use_checkpoint: bool = False\n\n\nSigLIP_MODEL_CONFIG = {\n    \"siglip_so400m_patch14_384\": {\n        \"image_size\": 336,\n        \"patch_size\": 14,\n        \"width\": 1152,\n        \"layers\": 27,\n        \"heads\": 16,\n        \"mlp_ratio\": 3.7362,\n        \"global_pool\": \"map\",\n        \"use_checkpoint\": False,\n    },\n    \"siglip_so400m_patch14_224\": {\n        \"image_size\": 224,\n        \"patch_size\": 14,\n        \"width\": 1152,\n        \"layers\": 27,\n        \"heads\": 16,\n        \"mlp_ratio\": 3.7362,\n        \"global_pool\": \"map\",\n        \"use_checkpoint\": False,\n    },\n    \"siglip_large_patch16_384\": {\n        \"image_size\": 384,\n        \"patch_size\": 16,\n        \"width\": 1024,\n        \"layers\": 24,\n        \"heads\": 16,\n        \"mlp_ratio\": 4,\n        \"global_pool\": \"map\",\n        \"use_checkpoint\": False,\n    },\n}\n\n\ndef create_siglip_vit(\n    model_name: str = \"siglip_so400m_patch14_384\",\n    image_size: int = 384,\n    select_layer: int = -1,\n    ckpt_path: str = \"\",\n    **kwargs,\n):\n    assert (\n        model_name in SigLIP_MODEL_CONFIG.keys()\n    ), f\"model name should be in {SigLIP_MODEL_CONFIG.keys()}\"\n\n    vision_cfg = SigLIPVisionCfg(**SigLIP_MODEL_CONFIG[model_name])\n\n    if select_layer <= 0:\n        layers = min(vision_cfg.layers, vision_cfg.layers + select_layer + 1)\n    else:\n        layers = min(vision_cfg.layers, select_layer)\n\n    model = VisionTransformer(\n        img_size=image_size,\n        patch_size=vision_cfg.patch_size,\n        embed_dim=vision_cfg.width,\n        depth=layers,\n        num_heads=vision_cfg.heads,\n        mlp_ratio=vision_cfg.mlp_ratio,\n        class_token=vision_cfg.class_token,\n        global_pool=vision_cfg.global_pool,\n        ignore_head=kwargs.get(\"ignore_head\", True),\n        weight_init=kwargs.get(\"weight_init\", \"skip\"),\n        num_classes=0,\n    )\n\n    if ckpt_path:\n        state_dict = torch.load(ckpt_path, map_location=\"cpu\")\n\n        incompatible_keys = model.load_state_dict(state_dict, strict=False)\n        print(\n            f\"SigLIP-ViT restores from {ckpt_path},\\n\"\n            f\"\\tincompatible_keys:', {incompatible_keys}.\"\n        )\n\n    return model\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/__init__.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/app_deepseek.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n# -*- coding:utf-8 -*-\n\nimport base64\nfrom io import BytesIO\n\nimport gradio as gr\nimport torch\nfrom app_modules.gradio_utils import (\n    cancel_outputing,\n    delete_last_conversation,\n    reset_state,\n    reset_textbox,\n    transfer_input,\n    wrap_gen_fn,\n)\nfrom app_modules.overwrites import reload_javascript\nfrom app_modules.presets import CONCURRENT_COUNT, description, description_top, title\nfrom app_modules.utils import configure_logger, is_variable_assigned, strip_stop_words\n\nfrom ..utils.conversation import SeparatorStyle\nfrom .inference import convert_conversation_to_prompts, deepseek_generate, load_model\n\n\ndef load_models():\n    models = {\n        \"DeepSeek-VL 7B\": \"deepseek-ai/deepseek-vl-7b-chat\",\n    }\n\n    for model_name in models:\n        models[model_name] = load_model(models[model_name])\n\n    return models\n\n\nlogger = configure_logger()\nmodels = load_models()\nMODELS = sorted(list(models.keys()))\n\n\ndef generate_prompt_with_history(\n    text, image, history, vl_chat_processor, tokenizer, max_length=2048\n):\n    \"\"\"\n    Generate a prompt with history for the deepseek application.\n\n    Args:\n        text (str): The text prompt.\n        image (str): The image prompt.\n        history (list): List of previous conversation messages.\n        tokenizer: The tokenizer used for encoding the prompt.\n        max_length (int): The maximum length of the prompt.\n\n    Returns:\n        tuple: A tuple containing the generated prompt, image list, conversation, and conversation copy. If the prompt could not be generated within the max_length limit, returns None.\n    \"\"\"\n\n    sft_format = \"deepseek\"\n    user_role_ind = 0\n    bot_role_ind = 1\n\n    # Initialize conversation\n    conversation = vl_chat_processor.new_chat_template()\n\n    if history:\n        conversation.messages = history\n\n    if image is not None:\n        if \"<image_placeholder>\" not in text:\n            text = (\n                \"<image_placeholder>\" + \"\\n\" + text\n            )  # append the <image_placeholder> in a new line after the text prompt\n        text = (text, image)\n\n    conversation.append_message(conversation.roles[user_role_ind], text)\n    conversation.append_message(conversation.roles[bot_role_ind], \"\")\n\n    # Create a copy of the conversation to avoid history truncation in the UI\n    conversation_copy = conversation.copy()\n    logger.info(\"=\" * 80)\n    logger.info(get_prompt(conversation))\n\n    rounds = len(conversation.messages) // 2\n\n    for _ in range(rounds):\n        current_prompt = get_prompt(conversation)\n        current_prompt = (\n            current_prompt.replace(\"</s>\", \"\")\n            if sft_format == \"deepseek\"\n            else current_prompt\n        )\n\n        if torch.tensor(tokenizer.encode(current_prompt)).size(-1) <= max_length:\n            return conversation_copy\n\n        if len(conversation.messages) % 2 != 0:\n            gr.Error(\"The messages between user and assistant are not paired.\")\n            return\n\n        try:\n            for _ in range(2):  # pop out two messages in a row\n                conversation.messages.pop(0)\n        except IndexError:\n            gr.Error(\"Input text processing failed, unable to respond in this round.\")\n            return None\n\n    gr.Error(\"Prompt could not be generated within max_length limit.\")\n    return None\n\n\ndef to_gradio_chatbot(conv):\n    \"\"\"Convert the conversation to gradio chatbot format.\"\"\"\n    ret = []\n    for i, (role, msg) in enumerate(conv.messages[conv.offset :]):\n        if i % 2 == 0:\n            if type(msg) is tuple:\n                msg, image = msg\n                if isinstance(image, str):\n                    with open(image, \"rb\") as f:\n                        data = f.read()\n                    img_b64_str = base64.b64encode(data).decode()\n                    image_str = f'<video src=\"data:video/mp4;base64,{img_b64_str}\" controls width=\"426\" height=\"240\"></video>'\n                    msg = msg.replace(\"\\n\".join([\"<image_placeholder>\"] * 4), image_str)\n                else:\n                    max_hw, min_hw = max(image.size), min(image.size)\n                    aspect_ratio = max_hw / min_hw\n                    max_len, min_len = 800, 400\n                    shortest_edge = int(min(max_len / aspect_ratio, min_len, min_hw))\n                    longest_edge = int(shortest_edge * aspect_ratio)\n                    W, H = image.size\n                    if H > W:\n                        H, W = longest_edge, shortest_edge\n                    else:\n                        H, W = shortest_edge, longest_edge\n                    image = image.resize((W, H))\n                    buffered = BytesIO()\n                    image.save(buffered, format=\"JPEG\")\n                    img_b64_str = base64.b64encode(buffered.getvalue()).decode()\n                    img_str = f'<img src=\"data:image/png;base64,{img_b64_str}\" alt=\"user upload image\" />'\n                    msg = msg.replace(\"<image_placeholder>\", img_str)\n            ret.append([msg, None])\n        else:\n            ret[-1][-1] = msg\n    return ret\n\n\ndef to_gradio_history(conv):\n    \"\"\"Convert the conversation to gradio history state.\"\"\"\n    return conv.messages[conv.offset :]\n\n\ndef get_prompt(conv) -> str:\n    \"\"\"Get the prompt for generation.\"\"\"\n    system_prompt = conv.system_template.format(system_message=conv.system_message)\n    if conv.sep_style == SeparatorStyle.DeepSeek:\n        seps = [conv.sep, conv.sep2]\n        if system_prompt == \"\" or system_prompt is None:\n            ret = \"\"\n        else:\n            ret = system_prompt + seps[0]\n        for i, (role, message) in enumerate(conv.messages):\n            if message:\n                if type(message) is tuple:  # multimodal message\n                    message, _ = message\n                ret += role + \": \" + message + seps[i % 2]\n            else:\n                ret += role + \":\"\n        return ret\n    else:\n        return conv.get_prompt\n\n\n@wrap_gen_fn\ndef predict(\n    text,\n    image,\n    chatbot,\n    history,\n    top_p,\n    temperature,\n    repetition_penalty,\n    max_length_tokens,\n    max_context_length_tokens,\n    model_select_dropdown,\n):\n    \"\"\"\n    Function to predict the response based on the user's input and selected model.\n\n    Parameters:\n    user_text (str): The input text from the user.\n    user_image (str): The input image from the user.\n    chatbot (str): The chatbot's name.\n    history (str): The history of the chat.\n    top_p (float): The top-p parameter for the model.\n    temperature (float): The temperature parameter for the model.\n    max_length_tokens (int): The maximum length of tokens for the model.\n    max_context_length_tokens (int): The maximum length of context tokens for the model.\n    model_select_dropdown (str): The selected model from the dropdown.\n\n    Returns:\n    generator: A generator that yields the chatbot outputs, history, and status.\n    \"\"\"\n    print(\"running the prediction function\")\n    try:\n        tokenizer, vl_gpt, vl_chat_processor = models[model_select_dropdown]\n\n        if text == \"\":\n            yield chatbot, history, \"Empty context.\"\n            return\n    except KeyError:\n        yield [[text, \"No Model Found\"]], [], \"No Model Found\"\n        return\n\n    conversation = generate_prompt_with_history(\n        text,\n        image,\n        history,\n        vl_chat_processor,\n        tokenizer,\n        max_length=max_context_length_tokens,\n    )\n    prompts = convert_conversation_to_prompts(conversation)\n\n    stop_words = conversation.stop_str\n    gradio_chatbot_output = to_gradio_chatbot(conversation)\n\n    full_response = \"\"\n    with torch.no_grad():\n        for x in deepseek_generate(\n            prompts=prompts,\n            vl_gpt=vl_gpt,\n            vl_chat_processor=vl_chat_processor,\n            tokenizer=tokenizer,\n            stop_words=stop_words,\n            max_length=max_length_tokens,\n            temperature=temperature,\n            repetition_penalty=repetition_penalty,\n            top_p=top_p,\n        ):\n            full_response += x\n            response = strip_stop_words(full_response, stop_words)\n            conversation.update_last_message(response)\n            gradio_chatbot_output[-1][1] = response\n            yield gradio_chatbot_output, to_gradio_history(\n                conversation\n            ), \"Generating...\"\n\n    print(\"flushed result to gradio\")\n    torch.cuda.empty_cache()\n\n    if is_variable_assigned(\"x\"):\n        print(f\"{model_select_dropdown}:\\n{text}\\n{'-' * 80}\\n{x}\\n{'=' * 80}\")\n        print(\n            f\"temperature: {temperature}, top_p: {top_p}, repetition_penalty: {repetition_penalty}, max_length_tokens: {max_length_tokens}\"\n        )\n\n    yield gradio_chatbot_output, to_gradio_history(conversation), \"Generate: Success\"\n\n\ndef retry(\n    text,\n    image,\n    chatbot,\n    history,\n    top_p,\n    temperature,\n    repetition_penalty,\n    max_length_tokens,\n    max_context_length_tokens,\n    model_select_dropdown,\n):\n    if len(history) == 0:\n        yield (chatbot, history, \"Empty context\")\n        return\n\n    chatbot.pop()\n    history.pop()\n    text = history.pop()[-1]\n    if type(text) is tuple:\n        text, image = text\n\n    yield from predict(\n        text,\n        image,\n        chatbot,\n        history,\n        top_p,\n        temperature,\n        repetition_penalty,\n        max_length_tokens,\n        max_context_length_tokens,\n        model_select_dropdown,\n    )\n\n\ndef build_demo(MODELS):\n    with open(\"deepseek_vl/serve/assets/custom.css\", \"r\", encoding=\"utf-8\") as f:\n        customCSS = f.read()\n\n    with gr.Blocks(theme=gr.themes.Soft()) as demo:\n        history = gr.State([])\n        input_text = gr.State()\n        input_image = gr.State()\n\n        with gr.Row():\n            gr.HTML(title)\n            status_display = gr.Markdown(\"Success\", elem_id=\"status_display\")\n        gr.Markdown(description_top)\n\n        with gr.Row(equal_height=True):\n            with gr.Column(scale=4):\n                with gr.Row():\n                    chatbot = gr.Chatbot(\n                        elem_id=\"deepseek_chatbot\",\n                        show_share_button=True,\n                        likeable=True,\n                        bubble_full_width=False,\n                        height=600,\n                    )\n                with gr.Row():\n                    with gr.Column(scale=4):\n                        text_box = gr.Textbox(\n                            show_label=False, placeholder=\"Enter text\", container=False\n                        )\n                    with gr.Column(\n                        min_width=70,\n                    ):\n                        submitBtn = gr.Button(\"Send\")\n                    with gr.Column(\n                        min_width=70,\n                    ):\n                        cancelBtn = gr.Button(\"Stop\")\n                with gr.Row():\n                    emptyBtn = gr.Button(\n                        \"🧹 New Conversation\",\n                    )\n                    retryBtn = gr.Button(\"🔄 Regenerate\")\n                    delLastBtn = gr.Button(\"🗑️ Remove Last Turn\")\n\n            with gr.Column():\n                image_box = gr.Image(type=\"pil\")\n\n                with gr.Tab(label=\"Parameter Setting\") as parameter_row:\n                    top_p = gr.Slider(\n                        minimum=-0,\n                        maximum=1.0,\n                        value=0.95,\n                        step=0.05,\n                        interactive=True,\n                        label=\"Top-p\",\n                    )\n                    temperature = gr.Slider(\n                        minimum=0,\n                        maximum=1.0,\n                        value=0.1,\n                        step=0.1,\n                        interactive=True,\n                        label=\"Temperature\",\n                    )\n                    repetition_penalty = gr.Slider(\n                        minimum=0.0,\n                        maximum=2.0,\n                        value=1.1,\n                        step=0.1,\n                        interactive=True,\n                        label=\"Repetition penalty\",\n                    )\n                    max_length_tokens = gr.Slider(\n                        minimum=0,\n                        maximum=4096,\n                        value=2048,\n                        step=8,\n                        interactive=True,\n                        label=\"Max Generation Tokens\",\n                    )\n                    max_context_length_tokens = gr.Slider(\n                        minimum=0,\n                        maximum=4096,\n                        value=4096,\n                        step=128,\n                        interactive=True,\n                        label=\"Max History Tokens\",\n                    )\n                    model_select_dropdown = gr.Dropdown(\n                        label=\"Select Models\",\n                        choices=MODELS,\n                        multiselect=False,\n                        value=MODELS[0],\n                        interactive=True,\n                    )\n\n        examples_list = [\n            [\n                \"deepseek_vl/serve/examples/rap.jpeg\",\n                \"Can you write me a master rap song that rhymes very well based on this image?\",\n            ],\n            [\n                \"deepseek_vl/serve/examples/app.png\",\n                \"What is this app about?\",\n            ],\n            [\n                \"deepseek_vl/serve/examples/pipeline.png\",\n                \"Help me write a python code based on the image.\",\n            ],\n            [\n                \"deepseek_vl/serve/examples/chart.png\",\n                \"Could you help me to re-draw this picture with python codes?\",\n            ],\n            [\n                \"deepseek_vl/serve/examples/mirror.png\",\n                \"How many people are there in the image. Why?\",\n            ],\n            [\n                \"deepseek_vl/serve/examples/puzzle.png\",\n                \"Can this 2 pieces combine together?\",\n            ],\n        ]\n        gr.Examples(examples=examples_list, inputs=[image_box, text_box])\n        gr.Markdown(description)\n\n        input_widgets = [\n            input_text,\n            input_image,\n            chatbot,\n            history,\n            top_p,\n            temperature,\n            repetition_penalty,\n            max_length_tokens,\n            max_context_length_tokens,\n            model_select_dropdown,\n        ]\n        output_widgets = [chatbot, history, status_display]\n\n        transfer_input_args = dict(\n            fn=transfer_input,\n            inputs=[text_box, image_box],\n            outputs=[input_text, input_image, text_box, image_box, submitBtn],\n            show_progress=True,\n        )\n\n        predict_args = dict(\n            fn=predict,\n            inputs=input_widgets,\n            outputs=output_widgets,\n            show_progress=True,\n        )\n\n        retry_args = dict(\n            fn=retry,\n            inputs=input_widgets,\n            outputs=output_widgets,\n            show_progress=True,\n        )\n\n        reset_args = dict(\n            fn=reset_textbox, inputs=[], outputs=[text_box, status_display]\n        )\n\n        predict_events = [\n            text_box.submit(**transfer_input_args).then(**predict_args),\n            submitBtn.click(**transfer_input_args).then(**predict_args),\n        ]\n\n        emptyBtn.click(reset_state, outputs=output_widgets, show_progress=True)\n        emptyBtn.click(**reset_args)\n        retryBtn.click(**retry_args)\n\n        delLastBtn.click(\n            delete_last_conversation,\n            [chatbot, history],\n            output_widgets,\n            show_progress=True,\n        )\n\n        cancelBtn.click(cancel_outputing, [], [status_display], cancels=predict_events)\n\n    return demo\n\n\nif __name__ == \"__main__\":\n    demo = build_demo(MODELS)\n    demo.title = \"DeepSeek-VL Chatbot\"\n\n    reload_javascript()\n    demo.queue(concurrency_count=CONCURRENT_COUNT).launch(\n        share=False,\n        favicon_path=\"deepseek_vl/serve/assets/favicon.ico\",\n        inbrowser=False,\n        server_name=\"0.0.0.0\",\n        server_port=8122,\n    )\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/app_modules/__init__.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/app_modules/gradio_utils.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom functools import wraps\n\nimport gradio as gr\n\n\ndef wrap_gen_fn(gen_fn):\n    @wraps(gen_fn)\n    def wrapped_gen_fn(prompt, *args, **kwargs):\n        try:\n            yield from gen_fn(prompt, *args, **kwargs)\n        except gr.Error as g_err:\n            raise g_err\n        except Exception as e:\n            raise gr.Error(f\"Failed to generate text: {e}\") from e\n\n    return wrapped_gen_fn\n\n\ndef delete_last_conversation(chatbot, history):\n    if len(history) % 2 != 0:\n        gr.Error(\"history length is not even\")\n        return (\n            chatbot,\n            history,\n            \"Delete Done\",\n        )\n\n    if len(chatbot) > 0:\n        chatbot.pop()\n\n    if len(history) > 0 and len(history) % 2 == 0:\n        history.pop()\n        history.pop()\n\n    return (\n        chatbot,\n        history,\n        \"Delete Done\",\n    )\n\n\ndef reset_state():\n    return [], [], None, \"Reset Done\"\n\n\ndef reset_textbox():\n    return gr.update(value=\"\"), \"\"\n\n\ndef cancel_outputing():\n    return \"Stop Done\"\n\n\ndef transfer_input(input_text, input_image):\n    print(\"transferring input text and input image\")\n    return (\n        input_text,\n        input_image,\n        gr.update(value=\"\"),\n        gr.update(value=None),\n        gr.Button(visible=True),\n    )\n\n\nclass State:\n    interrupted = False\n\n    def interrupt(self):\n        self.interrupted = True\n\n    def recover(self):\n        self.interrupted = False\n\n\nshared_state = State()\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/app_modules/overwrites.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom __future__ import annotations\n\nimport logging\nfrom typing import List, Tuple\n\nfrom .presets import gr\nfrom .utils import convert_asis, convert_mdtext, detect_converted_mark\n\n\ndef compact_text_chunks(self, prompt, text_chunks: List[str]) -> List[str]:\n    logging.debug(\"Compacting text chunks...🚀🚀🚀\")\n    combined_str = [c.strip() for c in text_chunks if c.strip()]\n    combined_str = [f\"[{index+1}] {c}\" for index, c in enumerate(combined_str)]\n    combined_str = \"\\n\\n\".join(combined_str)\n    # resplit based on self.max_chunk_overlap\n    text_splitter = self.get_text_splitter_given_prompt(prompt, 1, padding=1)\n    return text_splitter.split_text(combined_str)\n\n\ndef postprocess(\n    self, y: List[Tuple[str | None, str | None]]\n) -> List[Tuple[str | None, str | None]]:\n    \"\"\"\n    Parameters:\n        y: List of tuples representing the message and response pairs. Each message and response should be a string, which may be in Markdown format.\n    Returns:\n        List of tuples representing the message and response. Each message and response will be a string of HTML.\n    \"\"\"\n    if y is None or y == []:\n        return []\n    temp = []\n    for x in y:\n        user, bot = x\n        if not detect_converted_mark(user):\n            user = convert_asis(user)\n        if not detect_converted_mark(bot):\n            bot = convert_mdtext(bot)\n        temp.append((user, bot))\n    return temp\n\n\nwith open(\"deepseek_vl/serve/assets/custom.js\", \"r\", encoding=\"utf-8\") as f, open(\n    \"deepseek_vl/serve/assets/Kelpy-Codos.js\", \"r\", encoding=\"utf-8\"\n) as f2:\n    customJS = f.read()\n    kelpyCodos = f2.read()\n\n\ndef reload_javascript():\n    print(\"Reloading javascript...\")\n    js = f\"<script>{customJS}</script><script>{kelpyCodos}</script>\"\n\n    def template_response(*args, **kwargs):\n        res = GradioTemplateResponseOriginal(*args, **kwargs)\n        res.body = res.body.replace(b\"</html>\", f\"{js}</html>\".encode(\"utf8\"))\n        res.init_headers()\n        return res\n\n    gr.routes.templates.TemplateResponse = template_response\n\n\nGradioTemplateResponseOriginal = gr.routes.templates.TemplateResponse\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/app_modules/presets.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n# -*- coding:utf-8 -*-\nimport gradio as gr\n\ntitle = \"\"\"<h1 align=\"left\" style=\"min-width:200px; margin-top:0;\">Chat with DeepSeek-VL </h1>\"\"\"\ndescription_top = \"\"\"\"\"\"\ndescription = \"\"\"\"\"\"\nCONCURRENT_COUNT = 10\n\n\nALREADY_CONVERTED_MARK = \"<!-- ALREADY CONVERTED BY PARSER. -->\"\n\nsmall_and_beautiful_theme = gr.themes.Soft(\n    primary_hue=gr.themes.Color(\n        c50=\"#EBFAF2\",\n        c100=\"#CFF3E1\",\n        c200=\"#A8EAC8\",\n        c300=\"#77DEA9\",\n        c400=\"#3FD086\",\n        c500=\"#02C160\",\n        c600=\"#06AE56\",\n        c700=\"#05974E\",\n        c800=\"#057F45\",\n        c900=\"#04673D\",\n        c950=\"#2E5541\",\n        name=\"small_and_beautiful\",\n    ),\n    secondary_hue=gr.themes.Color(\n        c50=\"#576b95\",\n        c100=\"#576b95\",\n        c200=\"#576b95\",\n        c300=\"#576b95\",\n        c400=\"#576b95\",\n        c500=\"#576b95\",\n        c600=\"#576b95\",\n        c700=\"#576b95\",\n        c800=\"#576b95\",\n        c900=\"#576b95\",\n        c950=\"#576b95\",\n    ),\n    neutral_hue=gr.themes.Color(\n        name=\"gray\",\n        c50=\"#f6f7f8\",\n        # c100=\"#f3f4f6\",\n        c100=\"#F2F2F2\",\n        c200=\"#e5e7eb\",\n        c300=\"#d1d5db\",\n        c400=\"#B2B2B2\",\n        c500=\"#808080\",\n        c600=\"#636363\",\n        c700=\"#515151\",\n        c800=\"#393939\",\n        # c900=\"#272727\",\n        c900=\"#2B2B2B\",\n        c950=\"#171717\",\n    ),\n    radius_size=gr.themes.sizes.radius_sm,\n).set(\n    # button_primary_background_fill=\"*primary_500\",\n    button_primary_background_fill_dark=\"*primary_600\",\n    # button_primary_background_fill_hover=\"*primary_400\",\n    # button_primary_border_color=\"*primary_500\",\n    button_primary_border_color_dark=\"*primary_600\",\n    button_primary_text_color=\"white\",\n    button_primary_text_color_dark=\"white\",\n    button_secondary_background_fill=\"*neutral_100\",\n    button_secondary_background_fill_hover=\"*neutral_50\",\n    button_secondary_background_fill_dark=\"*neutral_900\",\n    button_secondary_text_color=\"*neutral_800\",\n    button_secondary_text_color_dark=\"white\",\n    # background_fill_primary=\"#F7F7F7\",\n    # background_fill_primary_dark=\"#1F1F1F\",\n    # block_title_text_color=\"*primary_500\",\n    block_title_background_fill_dark=\"*primary_900\",\n    block_label_background_fill_dark=\"*primary_900\",\n    input_background_fill=\"#F6F6F6\",\n    # chatbot_code_background_color_dark=\"*neutral_950\",\n)\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/app_modules/utils.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n# -*- coding:utf-8 -*-\nfrom __future__ import annotations\n\nimport html\nimport logging\nimport os\nimport re\nimport time\n\nimport mdtex2html\nfrom markdown import markdown\nfrom pygments import highlight\nfrom pygments.formatters import HtmlFormatter\nfrom pygments.lexers import ClassNotFound, get_lexer_by_name, guess_lexer\n\nfrom .presets import ALREADY_CONVERTED_MARK\n\nlogger = logging.getLogger(\"gradio_logger\")\n\n\ndef configure_logger():\n    logger = logging.getLogger(\"gradio_logger\")\n    logger.setLevel(logging.DEBUG)\n\n    timestr = time.strftime(\"%Y%m%d-%H%M%S\")\n    os.makedirs(\"deepseek_vl/serve/logs\", exist_ok=True)\n    file_handler = logging.FileHandler(\n        f\"deepseek_vl/serve/logs/{timestr}_gradio_log.log\"\n    )\n    console_handler = logging.StreamHandler()\n\n    formatter = logging.Formatter(\n        \"%(asctime)s - %(name)s - %(levelname)s - %(message)s\"\n    )\n    console_handler.setFormatter(formatter)\n    file_handler.setFormatter(formatter)\n\n    console_handler.setLevel(logging.INFO)\n    file_handler.setLevel(logging.INFO)\n\n    logger.addHandler(console_handler)\n    logger.addHandler(file_handler)\n\n    return logger\n\n\ndef strip_stop_words(x, stop_words):\n    for w in stop_words:\n        if w in x:\n            return x[: x.index(w)].strip()\n    return x.strip()\n\n\ndef format_output(history, text, x):\n    updated_history = history + [[text, x]]\n    a = [[y[0], convert_to_markdown(y[1])] for y in updated_history]\n    return a, updated_history\n\n\ndef markdown_to_html_with_syntax_highlight(md_str):  # deprecated\n    def replacer(match):\n        lang = match.group(1) or \"text\"\n        code = match.group(2)\n\n        try:\n            lexer = get_lexer_by_name(lang, stripall=True)\n        except ValueError:\n            lexer = get_lexer_by_name(\"text\", stripall=True)\n\n        formatter = HtmlFormatter()\n        highlighted_code = highlight(code, lexer, formatter)\n\n        return f'<pre><code class=\"{lang}\">{highlighted_code}</code></pre>'\n\n    code_block_pattern = r\"```(\\w+)?\\n([\\s\\S]+?)\\n```\"\n    md_str = re.sub(code_block_pattern, replacer, md_str, flags=re.MULTILINE)\n\n    html_str = markdown(md_str)\n    return html_str\n\n\ndef normalize_markdown(md_text: str) -> str:  # deprecated\n    lines = md_text.split(\"\\n\")\n    normalized_lines = []\n    inside_list = False\n\n    for i, line in enumerate(lines):\n        if re.match(r\"^(\\d+\\.|-|\\*|\\+)\\s\", line.strip()):\n            if not inside_list and i > 0 and lines[i - 1].strip() != \"\":\n                normalized_lines.append(\"\")\n            inside_list = True\n            normalized_lines.append(line)\n        elif inside_list and line.strip() == \"\":\n            if i < len(lines) - 1 and not re.match(\n                r\"^(\\d+\\.|-|\\*|\\+)\\s\", lines[i + 1].strip()\n            ):\n                normalized_lines.append(line)\n            continue\n        else:\n            inside_list = False\n            normalized_lines.append(line)\n\n    return \"\\n\".join(normalized_lines)\n\n\ndef convert_mdtext(md_text):\n    code_block_pattern = re.compile(r\"```(.*?)(?:```|$)\", re.DOTALL)\n    inline_code_pattern = re.compile(r\"`(.*?)`\", re.DOTALL)\n    code_blocks = code_block_pattern.findall(md_text)\n    non_code_parts = code_block_pattern.split(md_text)[::2]\n\n    result = []\n    for non_code, code in zip(non_code_parts, code_blocks + [\"\"]):\n        if non_code.strip():\n            non_code = normalize_markdown(non_code)\n            if inline_code_pattern.search(non_code):\n                result.append(markdown(non_code, extensions=[\"tables\"]))\n            else:\n                result.append(mdtex2html.convert(non_code, extensions=[\"tables\"]))\n        if code.strip():\n            code = f\"\\n```{code}\\n\\n```\"\n            code = markdown_to_html_with_syntax_highlight(code)\n            result.append(code)\n    result = \"\".join(result)\n    result += ALREADY_CONVERTED_MARK\n    return result\n\n\ndef convert_asis(userinput):\n    return f'<p style=\"white-space:pre-wrap;\">{html.escape(userinput)}</p>{ALREADY_CONVERTED_MARK}'\n\n\ndef is_stop_word_or_prefix(s: str, stop_words: list) -> bool:\n    return any(s.endswith(stop_word) for stop_word in stop_words)\n\n\ndef detect_converted_mark(userinput):\n    return bool(userinput.endswith(ALREADY_CONVERTED_MARK))\n\n\ndef detect_language(code):\n    first_line = \"\" if code.startswith(\"\\n\") else code.strip().split(\"\\n\", 1)[0]\n    language = first_line.lower() if first_line else \"\"\n    code_without_language = code[len(first_line) :].lstrip() if first_line else code\n    return language, code_without_language\n\n\ndef convert_to_markdown(text):\n    text = text.replace(\"$\", \"&#36;\")\n    text = text.replace(\"\\r\\n\", \"\\n\")\n\n    def replace_leading_tabs_and_spaces(line):\n        new_line = []\n\n        for char in line:\n            if char == \"\\t\":\n                new_line.append(\"&#9;\")\n            elif char == \" \":\n                new_line.append(\"&nbsp;\")\n            else:\n                break\n        return \"\".join(new_line) + line[len(new_line) :]\n\n    markdown_text = \"\"\n    lines = text.split(\"\\n\")\n    in_code_block = False\n\n    for line in lines:\n        if in_code_block is False and line.startswith(\"```\"):\n            in_code_block = True\n            markdown_text += f\"{line}\\n\"\n        elif in_code_block is True and line.startswith(\"```\"):\n            in_code_block = False\n            markdown_text += f\"{line}\\n\"\n        elif in_code_block:\n            markdown_text += f\"{line}\\n\"\n        else:\n            line = replace_leading_tabs_and_spaces(line)\n            line = re.sub(r\"^(#)\", r\"\\\\\\1\", line)\n            markdown_text += f\"{line}  \\n\"\n\n    return markdown_text\n\n\ndef add_language_tag(text):\n    def detect_language(code_block):\n        try:\n            lexer = guess_lexer(code_block)\n            return lexer.name.lower()\n        except ClassNotFound:\n            return \"\"\n\n    code_block_pattern = re.compile(r\"(```)(\\w*\\n[^`]+```)\", re.MULTILINE)\n\n    def replacement(match):\n        code_block = match.group(2)\n        if match.group(2).startswith(\"\\n\"):\n            language = detect_language(code_block)\n            return (\n                f\"```{language}{code_block}```\" if language else f\"```\\n{code_block}```\"\n            )\n        else:\n            return match.group(1) + code_block + \"```\"\n\n    text2 = code_block_pattern.sub(replacement, text)\n    return text2\n\n\ndef is_variable_assigned(var_name: str) -> bool:\n    return var_name in locals()\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/assets/Kelpy-Codos.js",
    "content": "/**\n * Copyright (c) 2023-2024 DeepSeek.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// ==UserScript==\n// @name         Kelpy Codos\n// @namespace    https://github.com/Keldos-Li/Kelpy-Codos\n// @version      1.0.5\n// @author       Keldos; https://keldos.me/\n// @description  Add copy button to PRE tags before CODE tag, for Chuanhu ChatGPT especially.\n//               Based on Chuanhu ChatGPT version: ac04408 (2023-3-22)\n// @license      GPL-3.0\n// @grant        none\n// ==/UserScript==\n\n(function () {\n  \"use strict\";\n\n  function addCopyButton(pre) {\n    var code = pre.querySelector(\"code\");\n    if (!code) {\n      return; // 如果没有找到 <code> 元素，则不添加按钮\n    }\n    var firstChild = code.firstChild;\n    if (!firstChild) {\n      return; // 如果 <code> 元素没有子节点，则不添加按钮\n    }\n    var button = document.createElement(\"button\");\n    button.textContent = \"\\uD83D\\uDCCE\"; // 使用 📎 符号作为“复制”按钮的文本\n    button.style.position = \"relative\";\n    button.style.float = \"right\";\n    button.style.fontSize = \"1em\"; // 可选：调整按钮大小\n    button.style.background = \"none\"; // 可选：去掉背景颜色\n    button.style.border = \"none\"; // 可选：去掉边框\n    button.style.cursor = \"pointer\"; // 可选：显示指针样式\n    button.addEventListener(\"click\", function () {\n      var range = document.createRange();\n      range.selectNodeContents(code);\n      range.setStartBefore(firstChild); // 将范围设置为第一个子节点之前\n      var selection = window.getSelection();\n      selection.removeAllRanges();\n      selection.addRange(range);\n\n      try {\n        var success = document.execCommand(\"copy\");\n        if (success) {\n          button.textContent = \"\\u2714\";\n          setTimeout(function () {\n            button.textContent = \"\\uD83D\\uDCCE\"; // 恢复按钮为“复制”\n          }, 2000);\n        } else {\n          button.textContent = \"\\u2716\";\n        }\n      } catch (e) {\n        console.error(e);\n        button.textContent = \"\\u2716\";\n      }\n\n      selection.removeAllRanges();\n    });\n    code.insertBefore(button, firstChild); // 将按钮插入到第一个子元素之前\n  }\n\n  function handleNewElements(mutationsList, observer) {\n    for (var mutation of mutationsList) {\n      if (mutation.type === \"childList\") {\n        for (var node of mutation.addedNodes) {\n          if (node.nodeName === \"PRE\") {\n            addCopyButton(node);\n          }\n        }\n      }\n    }\n  }\n\n  var observer = new MutationObserver(handleNewElements);\n  observer.observe(document.documentElement, {\n    childList: true,\n    subtree: true,\n  });\n\n  document.querySelectorAll(\"pre\").forEach(addCopyButton);\n})();\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/assets/custom.css",
    "content": "/**\n * Copyright (c) 2023-2024 DeepSeek.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n:root {\n  --chatbot-color-light: #f3f3f3;\n  --chatbot-color-dark: #121111;\n}\n\n/* status_display */\n#status_display {\n  display: flex;\n  min-height: 2.5em;\n  align-items: flex-end;\n  justify-content: flex-end;\n}\n#status_display p {\n  font-size: 0.85em;\n  font-family: monospace;\n  color: var(--body-text-color-subdued);\n}\n\n/* usage_display */\n#usage_display {\n  height: 1em;\n}\n#usage_display p {\n  padding: 0 1em;\n  font-size: 0.85em;\n  font-family: monospace;\n  color: var(--body-text-color-subdued);\n}\n/* list */\nol:not(.options),\nul:not(.options) {\n  padding-inline-start: 2em !important;\n}\n\n/* Thank @Keldos-Li for fixing it */\n/* Light mode (default) */\n#deepseek_chatbot {\n  background-color: var(--chatbot-color-light) !important;\n  color: #000000 !important;\n}\n[data-testid=\"bot\"] {\n  background-color: #ffffff !important;\n}\n[data-testid=\"user\"] {\n  background-color: #95ec69 !important;\n}\n\n/* Dark mode */\n.dark #deepseek_chatbot {\n  background-color: var(--chatbot-color-dark) !important;\n  color: #ffffff !important;\n}\n.dark [data-testid=\"bot\"] {\n  background-color: #2c2c2c !important;\n}\n.dark [data-testid=\"user\"] {\n  background-color: #26b561 !important;\n}\n\n#deepseek_chatbot {\n  height: 100%;\n  min-height: 800px;\n  flex-grow: 1;\n  overflow: auto;\n}\n\n[class*=\"message\"] {\n  border-radius: var(--radius-xl) !important;\n  border: none;\n  padding: var(--spacing-xl) !important;\n  font-size: var(--text-md) !important;\n  line-height: var(--line-md) !important;\n  min-height: calc(var(--text-md) * var(--line-md) + 2 * var(--spacing-xl));\n  min-width: calc(var(--text-md) * var(--line-md) + 2 * var(--spacing-xl));\n}\n[data-testid=\"bot\"] {\n  max-width: 85%;\n  border-bottom-left-radius: 0 !important;\n}\n[data-testid=\"user\"] {\n  max-width: 85%;\n  width: auto !important;\n  border-bottom-right-radius: 0 !important;\n}\n/* Table */\ntable {\n  margin: 1em 0;\n  border-collapse: collapse;\n  empty-cells: show;\n}\ntd,\nth {\n  border: 1.2px solid var(--border-color-primary) !important;\n  padding: 0.2em;\n}\nthead {\n  background-color: rgba(175, 184, 193, 0.2);\n}\nthead th {\n  padding: 0.5em 0.2em;\n}\n/* Inline code */\n#deepseek_chatbot code {\n  display: inline;\n  white-space: break-spaces;\n  border-radius: 6px;\n  margin: 0 2px 0 2px;\n  padding: 0.2em 0.4em 0.1em 0.4em;\n  background-color: rgba(175, 184, 193, 0.2);\n}\n/* Code block */\n#deepseek_chatbot pre code {\n  display: block;\n  overflow: auto;\n  white-space: pre;\n  background-color: #1c1d1e !important;\n  border-radius: 10px;\n  padding: 1.4em 1.2em 0em 1.4em;\n  margin: 1.2em 2em 1.2em 0.5em;\n  color: #fdf8f8;\n  box-shadow: 6px 6px 16px hsla(0, 0%, 0%, 0.2);\n}\n/* Highlight */\n#deepseek_chatbot .highlight {\n  background-color: transparent;\n}\n#deepseek_chatbot .highlight .hll {\n  background-color: #49483e;\n}\n#deepseek_chatbot .highlight .c {\n  color: #75715e;\n} /* Comment */\n#deepseek_chatbot .highlight .err {\n  color: #960050;\n  background-color: #1e0010;\n} /* Error */\n#deepseek_chatbot .highlight .k {\n  color: #66d9ef;\n} /* Keyword */\n#deepseek_chatbot .highlight .l {\n  color: #ae81ff;\n} /* Literal */\n#deepseek_chatbot .highlight .n {\n  color: #f8f8f2;\n} /* Name */\n#deepseek_chatbot .highlight .o {\n  color: #f92672;\n} /* Operator */\n#deepseek_chatbot .highlight .p {\n  color: #f8f8f2;\n} /* Punctuation */\n#deepseek_chatbot .highlight .ch {\n  color: #75715e;\n} /* Comment.Hashbang */\n#deepseek_chatbot .highlight .cm {\n  color: #75715e;\n} /* Comment.Multiline */\n#deepseek_chatbot .highlight .cp {\n  color: #75715e;\n} /* Comment.Preproc */\n#deepseek_chatbot .highlight .cpf {\n  color: #75715e;\n} /* Comment.PreprocFile */\n#deepseek_chatbot .highlight .c1 {\n  color: #75715e;\n} /* Comment.Single */\n#deepseek_chatbot .highlight .cs {\n  color: #75715e;\n} /* Comment.Special */\n#deepseek_chatbot .highlight .gd {\n  color: #f92672;\n} /* Generic.Deleted */\n#deepseek_chatbot .highlight .ge {\n  font-style: italic;\n} /* Generic.Emph */\n#deepseek_chatbot .highlight .gi {\n  color: #a6e22e;\n} /* Generic.Inserted */\n#deepseek_chatbot .highlight .gs {\n  font-weight: bold;\n} /* Generic.Strong */\n#deepseek_chatbot .highlight .gu {\n  color: #75715e;\n} /* Generic.Subheading */\n#deepseek_chatbot .highlight .kc {\n  color: #66d9ef;\n} /* Keyword.Constant */\n#deepseek_chatbot .highlight .kd {\n  color: #66d9ef;\n} /* Keyword.Declaration */\n#deepseek_chatbot .highlight .kn {\n  color: #f92672;\n} /* Keyword.Namespace */\n#deepseek_chatbot .highlight .kp {\n  color: #66d9ef;\n} /* Keyword.Pseudo */\n#deepseek_chatbot .highlight .kr {\n  color: #66d9ef;\n} /* Keyword.Reserved */\n#deepseek_chatbot .highlight .kt {\n  color: #66d9ef;\n} /* Keyword.Type */\n#deepseek_chatbot .highlight .ld {\n  color: #e6db74;\n} /* Literal.Date */\n#deepseek_chatbot .highlight .m {\n  color: #ae81ff;\n} /* Literal.Number */\n#deepseek_chatbot .highlight .s {\n  color: #e6db74;\n} /* Literal.String */\n#deepseek_chatbot .highlight .na {\n  color: #a6e22e;\n} /* Name.Attribute */\n#deepseek_chatbot .highlight .nb {\n  color: #f8f8f2;\n} /* Name.Builtin */\n#deepseek_chatbot .highlight .nc {\n  color: #a6e22e;\n} /* Name.Class */\n#deepseek_chatbot .highlight .no {\n  color: #66d9ef;\n} /* Name.Constant */\n#deepseek_chatbot .highlight .nd {\n  color: #a6e22e;\n} /* Name.Decorator */\n#deepseek_chatbot .highlight .ni {\n  color: #f8f8f2;\n} /* Name.Entity */\n#deepseek_chatbot .highlight .ne {\n  color: #a6e22e;\n} /* Name.Exception */\n#deepseek_chatbot .highlight .nf {\n  color: #a6e22e;\n} /* Name.Function */\n#deepseek_chatbot .highlight .nl {\n  color: #f8f8f2;\n} /* Name.Label */\n#deepseek_chatbot .highlight .nn {\n  color: #f8f8f2;\n} /* Name.Namespace */\n#deepseek_chatbot .highlight .nx {\n  color: #a6e22e;\n} /* Name.Other */\n#deepseek_chatbot .highlight .py {\n  color: #f8f8f2;\n} /* Name.Property */\n#deepseek_chatbot .highlight .nt {\n  color: #f92672;\n} /* Name.Tag */\n#deepseek_chatbot .highlight .nv {\n  color: #f8f8f2;\n} /* Name.Variable */\n#deepseek_chatbot .highlight .ow {\n  color: #f92672;\n} /* Operator.Word */\n#deepseek_chatbot .highlight .w {\n  color: #f8f8f2;\n} /* Text.Whitespace */\n#deepseek_chatbot .highlight .mb {\n  color: #ae81ff;\n} /* Literal.Number.Bin */\n#deepseek_chatbot .highlight .mf {\n  color: #ae81ff;\n} /* Literal.Number.Float */\n#deepseek_chatbot .highlight .mh {\n  color: #ae81ff;\n} /* Literal.Number.Hex */\n#deepseek_chatbot .highlight .mi {\n  color: #ae81ff;\n} /* Literal.Number.Integer */\n#deepseek_chatbot .highlight .mo {\n  color: #ae81ff;\n} /* Literal.Number.Oct */\n#deepseek_chatbot .highlight .sa {\n  color: #e6db74;\n} /* Literal.String.Affix */\n#deepseek_chatbot .highlight .sb {\n  color: #e6db74;\n} /* Literal.String.Backtick */\n#deepseek_chatbot .highlight .sc {\n  color: #e6db74;\n} /* Literal.String.Char */\n#deepseek_chatbot .highlight .dl {\n  color: #e6db74;\n} /* Literal.String.Delimiter */\n#deepseek_chatbot .highlight .sd {\n  color: #e6db74;\n} /* Literal.String.Doc */\n#deepseek_chatbot .highlight .s2 {\n  color: #e6db74;\n} /* Literal.String.Double */\n#deepseek_chatbot .highlight .se {\n  color: #ae81ff;\n} /* Literal.String.Escape */\n#deepseek_chatbot .highlight .sh {\n  color: #e6db74;\n} /* Literal.String.Heredoc */\n#deepseek_chatbot .highlight .si {\n  color: #e6db74;\n} /* Literal.String.Interpol */\n#deepseek_chatbot .highlight .sx {\n  color: #e6db74;\n} /* Literal.String.Other */\n#deepseek_chatbot .highlight .sr {\n  color: #e6db74;\n} /* Literal.String.Regex */\n#deepseek_chatbot .highlight .s1 {\n  color: #e6db74;\n} /* Literal.String.Single */\n#deepseek_chatbot .highlight .ss {\n  color: #e6db74;\n} /* Literal.String.Symbol */\n#deepseek_chatbot .highlight .bp {\n  color: #f8f8f2;\n} /* Name.Builtin.Pseudo */\n#deepseek_chatbot .highlight .fm {\n  color: #a6e22e;\n} /* Name.Function.Magic */\n#deepseek_chatbot .highlight .vc {\n  color: #f8f8f2;\n} /* Name.Variable.Class */\n#deepseek_chatbot .highlight .vg {\n  color: #f8f8f2;\n} /* Name.Variable.Global */\n#deepseek_chatbot .highlight .vi {\n  color: #f8f8f2;\n} /* Name.Variable.Instance */\n#deepseek_chatbot .highlight .vm {\n  color: #f8f8f2;\n} /* Name.Variable.Magic */\n#deepseek_chatbot .highlight .il {\n  color: #ae81ff;\n} /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/assets/custom.js",
    "content": "/**\n * Copyright (c) 2023-2024 DeepSeek.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// custom javascript here\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/serve/inference.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom threading import Thread\nfrom typing import List\n\nimport torch\nimport transformers\nfrom transformers import (\n    AutoModelForCausalLM,\n    StoppingCriteria,\n    StoppingCriteriaList,\n    TextIteratorStreamer,\n)\n\nfrom ..models import MultiModalityCausalLM, VLChatProcessor\nfrom ..utils.conversation import Conversation\n\n\ndef load_model(model_path):\n    vl_chat_processor: VLChatProcessor = VLChatProcessor.from_pretrained(model_path)\n    tokenizer = vl_chat_processor.tokenizer\n    vl_gpt: MultiModalityCausalLM = AutoModelForCausalLM.from_pretrained(\n        model_path, trust_remote_code=True\n    )\n    vl_gpt = vl_gpt.to(torch.bfloat16).cuda().eval()\n    return tokenizer, vl_gpt, vl_chat_processor\n\n\ndef convert_conversation_to_prompts(conversation: Conversation):\n    prompts = []\n    messages = conversation.messages\n\n    for i in range(0, len(messages), 2):\n        prompt = {\n            \"role\": messages[i][0],\n            \"content\": (\n                messages[i][1][0]\n                if isinstance(messages[i][1], tuple)\n                else messages[i][1]\n            ),\n            \"images\": [messages[i][1][1]] if isinstance(messages[i][1], tuple) else [],\n        }\n        response = {\"role\": messages[i + 1][0], \"content\": messages[i + 1][1]}\n        prompts.extend([prompt, response])\n\n    return prompts\n\n\nclass StoppingCriteriaSub(StoppingCriteria):\n    def __init__(self, stops=[], encounters=1):\n        super().__init__()\n        self.stops = [stop.to(\"cuda\") for stop in stops]\n\n    def __call__(\n        self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs\n    ):\n        for stop in self.stops:\n            if input_ids.shape[-1] < len(stop):\n                continue\n            if torch.all((stop == input_ids[0][-len(stop) :])).item():\n                return True\n\n        return False\n\n\n@torch.inference_mode()\ndef deepseek_generate(\n    prompts: list,\n    vl_gpt: torch.nn.Module,\n    vl_chat_processor,\n    tokenizer: transformers.PreTrainedTokenizer,\n    stop_words: list,\n    max_length: int = 256,\n    temperature: float = 1.0,\n    top_p: float = 1.0,\n    repetition_penalty=1.1,\n):\n    prompts = prompts\n    pil_images = list()\n    for message in prompts:\n        if \"images\" not in message:\n            continue\n        for pil_img in message[\"images\"]:\n            pil_images.append(pil_img)\n\n    prepare_inputs = vl_chat_processor(\n        conversations=prompts, images=pil_images, force_batchify=True\n    ).to(vl_gpt.device)\n\n    return generate(\n        vl_gpt,\n        tokenizer,\n        prepare_inputs,\n        max_length,\n        temperature,\n        repetition_penalty,\n        top_p,\n        stop_words,\n    )\n\n\n@torch.inference_mode()\ndef generate(\n    vl_gpt,\n    tokenizer,\n    prepare_inputs,\n    max_gen_len: int = 256,\n    temperature: float = 0,\n    repetition_penalty=1.1,\n    top_p: float = 0.95,\n    stop_words: List[str] = [],\n):\n    \"\"\"Stream the text output from the multimodality model with prompt and image inputs.\"\"\"\n    inputs_embeds = vl_gpt.prepare_inputs_embeds(**prepare_inputs)\n\n    streamer = TextIteratorStreamer(tokenizer)\n\n    stop_words_ids = [\n        torch.tensor(tokenizer.encode(stop_word)) for stop_word in stop_words\n    ]\n    stopping_criteria = StoppingCriteriaList(\n        [StoppingCriteriaSub(stops=stop_words_ids)]\n    )\n\n    generation_config = dict(\n        inputs_embeds=inputs_embeds,\n        attention_mask=prepare_inputs.attention_mask,\n        pad_token_id=tokenizer.eos_token_id,\n        bos_token_id=tokenizer.bos_token_id,\n        eos_token_id=tokenizer.eos_token_id,\n        max_new_tokens=max_gen_len,\n        do_sample=True,\n        use_cache=True,\n        streamer=streamer,\n        stopping_criteria=stopping_criteria,\n    )\n\n    if temperature > 0:\n        generation_config.update(\n            {\n                \"do_sample\": True,\n                \"top_p\": top_p,\n                \"temperature\": temperature,\n                \"repetition_penalty\": repetition_penalty,\n            }\n        )\n    else:\n        generation_config[\"do_sample\"] = False\n\n    thread = Thread(target=vl_gpt.language_model.generate, kwargs=generation_config)\n    thread.start()\n\n    yield from streamer\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/utils/__init__.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/utils/conversation.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\"\"\"\nFrom https://github.com/lm-sys/FastChat/blob/main/fastchat/conversation.py\n\"\"\"\n\nimport dataclasses\nfrom enum import IntEnum, auto\nfrom typing import Dict, List\n\n\nclass SeparatorStyle(IntEnum):\n    \"\"\"Separator styles.\"\"\"\n\n    ADD_COLON_SINGLE = auto()\n    ADD_COLON_TWO = auto()\n    ADD_COLON_SPACE_SINGLE = auto()\n    NO_COLON_SINGLE = auto()\n    NO_COLON_TWO = auto()\n    ADD_NEW_LINE_SINGLE = auto()\n    LLAMA2 = auto()\n    CHATGLM = auto()\n    CHATML = auto()\n    CHATINTERN = auto()\n    DOLLY = auto()\n    RWKV = auto()\n    PHOENIX = auto()\n    ROBIN = auto()\n    DeepSeek = auto()\n    PLAIN = auto()\n    ALIGNMENT = auto()\n\n\n@dataclasses.dataclass\nclass Conversation:\n    \"\"\"A class that manages prompt templates and keeps all conversation history.\"\"\"\n\n    # The name of this template\n    name: str\n    # The template of the system prompt\n    system_template: str = \"{system_message}\"\n    # The system message\n    system_message: str = \"\"\n    # The names of two roles\n    roles: List[str] = ((\"USER\", \"ASSISTANT\"),)\n    # All messages. Each item is (role, message).\n    messages: List[List[str]] = ()\n    # The number of few shot examples\n    offset: int = 0\n    # The separator style and configurations\n    sep_style: SeparatorStyle = SeparatorStyle.ADD_COLON_SINGLE\n    sep: str = \"\\n\"\n    sep2: str = None\n    # Stop criteria (the default one is EOS token)\n    stop_str: str = None\n    # Stops generation if meeting any token in this list\n    stop_token_ids: List[int] = None\n\n    def get_prompt(self) -> str:\n        \"\"\"Get the prompt for generation.\"\"\"\n        system_prompt = self.system_template.format(system_message=self.system_message)\n\n        if self.sep_style == SeparatorStyle.DeepSeek:\n            seps = [self.sep, self.sep2]\n            if system_prompt == \"\" or system_prompt is None:\n                ret = \"\"\n            else:\n                ret = system_prompt + seps[0]\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    ret += role + \": \" + message + seps[i % 2]\n                else:\n                    ret += role + \":\"\n            return ret\n        elif self.sep_style == SeparatorStyle.LLAMA2:\n            seps = [self.sep, self.sep2]\n            if self.system_message:\n                ret = system_prompt\n            else:\n                ret = \"[INST] \"\n            for i, (role, message) in enumerate(self.messages):\n                tag = self.roles[i % 2]\n                if message:\n                    if type(message) is tuple:  # multimodal message\n                        message, _ = message\n                    if i == 0:\n                        ret += message + \" \"\n                    else:\n                        ret += tag + \" \" + message + seps[i % 2]\n                else:\n                    ret += tag\n            return ret\n        elif self.sep_style == SeparatorStyle.PLAIN:\n            seps = [self.sep, self.sep2]\n            ret = \"\"\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    if type(message) is tuple:\n                        message, _, _ = message\n                    if i % 2 == 0:\n                        ret += message + seps[i % 2]\n                    else:\n                        ret += message + seps[i % 2]\n                else:\n                    ret += \"\"\n            return ret\n        elif self.sep_style == SeparatorStyle.ALIGNMENT:\n            seps = [self.sep, self.sep2]\n            ret = \"\"\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    if type(message) is tuple:\n                        message, _, _ = message\n                    if i % 2 == 0:\n                        ret += \"<image>\\n\" + seps[i % 2]\n                    else:\n                        ret += message + seps[i % 2]\n                else:\n                    ret += \"\"\n            return ret\n        else:\n            raise ValueError(f\"Invalid style: {self.sep_style}\")\n\n    def get_prompt_for_current_round(self, content=None):\n        \"\"\"Get current round formatted question prompt during sft training\"\"\"\n        if self.sep_style == SeparatorStyle.PLAIN:\n            formatted_question = \"<image>\\n\"\n        elif self.sep_style == SeparatorStyle.DeepSeek:\n            formatted_question = (\n                f\"{self.roles[0]}: \" + content.strip() + self.sep + f\"{self.roles[1]}:\"\n            )\n        else:\n            raise ValueError(f\"Unsupported sep_style: {self.sep_style}\")\n        return formatted_question\n\n    def set_system_message(self, system_message: str):\n        \"\"\"Set the system message.\"\"\"\n        self.system_message = system_message\n\n    def append_message(self, role: str, message: str):\n        \"\"\"Append a new message.\"\"\"\n        self.messages.append([role, message])\n\n    def reset_message(self):\n        \"\"\"Reset a new message.\"\"\"\n        self.messages = []\n\n    def update_last_message(self, message: str):\n        \"\"\"Update the last output.\n\n        The last message is typically set to be None when constructing the prompt,\n        so we need to update it in-place after getting the response from a model.\n        \"\"\"\n        self.messages[-1][1] = message\n\n    def to_gradio_chatbot(self):\n        \"\"\"Convert the conversation to gradio chatbot format.\"\"\"\n        ret = []\n        for i, (role, msg) in enumerate(self.messages[self.offset :]):\n            if i % 2 == 0:\n                ret.append([msg, None])\n            else:\n                ret[-1][-1] = msg\n        return ret\n\n    def to_openai_api_messages(self):\n        \"\"\"Convert the conversation to OpenAI chat completion format.\"\"\"\n        system_prompt = self.system_template.format(system_message=self.system_message)\n        ret = [{\"role\": \"system\", \"content\": system_prompt}]\n\n        for i, (_, msg) in enumerate(self.messages[self.offset :]):\n            if i % 2 == 0:\n                ret.append({\"role\": \"user\", \"content\": msg})\n            else:\n                if msg is not None:\n                    ret.append({\"role\": \"assistant\", \"content\": msg})\n        return ret\n\n    def copy(self):\n        return Conversation(\n            name=self.name,\n            system_template=self.system_template,\n            system_message=self.system_message,\n            roles=self.roles,\n            messages=[[x, y] for x, y in self.messages],\n            offset=self.offset,\n            sep_style=self.sep_style,\n            sep=self.sep,\n            sep2=self.sep2,\n            stop_str=self.stop_str,\n            stop_token_ids=self.stop_token_ids,\n        )\n\n    def dict(self):\n        return {\n            \"template_name\": self.name,\n            \"system_message\": self.system_message,\n            \"roles\": self.roles,\n            \"messages\": self.messages,\n            \"offset\": self.offset,\n        }\n\n\n# A global registry for all conversation templates\nconv_templates: Dict[str, Conversation] = {}\n\n\ndef register_conv_template(template: Conversation, override: bool = False):\n    \"\"\"Register a new conversation template.\"\"\"\n    if not override:\n        assert (\n            template.name not in conv_templates\n        ), f\"{template.name} has been registered.\"\n\n    conv_templates[template.name] = template\n\n\ndef get_conv_template(name: str) -> Conversation:\n    \"\"\"Get a conversation template.\"\"\"\n    return conv_templates[name].copy()\n\n\n# llava_llama2 template\nregister_conv_template(\n    Conversation(\n        name=\"llava_llama2\",\n        system_message=\"You are a helpful language and vision assistant. \"\n        \"You are able to understand the visual content that the user provides, \"\n        \"and assist the user with a variety of tasks using natural language.\",\n        system_template=\"[INST] <<SYS>>\\n{system_message}\\n<</SYS>>\\n\\n\",\n        roles=(\"[INST]\", \"[/INST]\"),\n        messages=(),\n        offset=0,\n        sep_style=SeparatorStyle.LLAMA2,\n        sep=\" \",\n        sep2=\" </s><s>\",\n        stop_token_ids=[2],\n    )\n)\n\n# llama2 template\n# reference: https://github.com/facebookresearch/llama/blob/cfc3fc8c1968d390eb830e65c63865e980873a06/llama/generation.py#L212\nregister_conv_template(\n    Conversation(\n        name=\"llama-2\",\n        system_template=\"[INST] <<SYS>>\\n{system_message}\\n<</SYS>>\\n\\n\",\n        roles=(\"[INST]\", \"[/INST]\"),\n        messages=(),\n        offset=0,\n        sep_style=SeparatorStyle.LLAMA2,\n        sep=\" \",\n        sep2=\" </s><s>\",\n        stop_token_ids=[2],\n    )\n)\n\n\n# deepseek template\nregister_conv_template(\n    Conversation(\n        name=\"deepseek\",\n        system_template=\"{system_message}\",\n        # system_message=\"You are a helpful assistant. Please answer truthfully and write out your \"\n        # \"thinking step by step to be sure you get the right answer.\",\n        system_message=\"\",\n        roles=(\"User\", \"Assistant\"),\n        messages=(),\n        offset=0,\n        sep_style=SeparatorStyle.DeepSeek,\n        sep=\"\\n\\n\",\n        sep2=\"<｜end▁of▁sentence｜>\",\n        stop_token_ids=[100001],\n        stop_str=[\"User:\", \"<｜end▁of▁sentence｜>\"],\n    )\n)\n\nregister_conv_template(\n    Conversation(\n        name=\"plain\",\n        system_template=\"\",\n        system_message=\"\",\n        roles=(\"\", \"\"),\n        messages=(),\n        offset=0,\n        sep_style=SeparatorStyle.PLAIN,\n        sep=\"\",\n        sep2=\"\",\n        stop_token_ids=[2],\n        stop_str=[\"</s>\"],\n    )\n)\n\n\nregister_conv_template(\n    Conversation(\n        name=\"alignment\",\n        system_template=\"\",\n        system_message=\"\",\n        roles=(\"\", \"\"),\n        messages=(),\n        offset=0,\n        sep_style=SeparatorStyle.ALIGNMENT,\n        sep=\"\",\n        sep2=\"\",\n        stop_token_ids=[2],\n        stop_str=[\"</s>\"],\n    )\n)\n\n\nif __name__ == \"__main__\":\n    # print(\"Llama-2 template:\")\n    # conv = get_conv_template(\"llama-2\")\n    # conv.set_system_message(\"You are a helpful, respectful and honest assistant.\")\n    # conv.append_message(conv.roles[0], \"Hello!\")\n    # conv.append_message(conv.roles[1], \"Hi!\")\n    # conv.append_message(conv.roles[0], \"How are you?\")\n    # conv.append_message(conv.roles[1], None)\n    # print(conv.get_prompt())\n\n    # print(\"\\n\")\n\n    print(\"deepseek template:\")\n    conv = get_conv_template(\"deepseek\")\n    conv.append_message(conv.roles[0], \"Hello!\")\n    conv.append_message(conv.roles[1], \"Hi! This is Tony.\")\n    conv.append_message(conv.roles[0], \"Who are you?\")\n    conv.append_message(conv.roles[1], \"I am a helpful assistant.\")\n    conv.append_message(conv.roles[0], \"How are you?\")\n    conv.append_message(conv.roles[1], None)\n    print(conv.get_prompt())\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl/utils/io.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport json\nfrom typing import Dict, List\n\nimport PIL.Image\nimport torch\nfrom transformers import AutoModelForCausalLM\n\nfrom ..models import MultiModalityCausalLM, VLChatProcessor\n\n\ndef load_pretrained_model(model_path: str):\n    vl_chat_processor: VLChatProcessor = VLChatProcessor.from_pretrained(model_path)\n    tokenizer = vl_chat_processor.tokenizer\n\n    vl_gpt: MultiModalityCausalLM = AutoModelForCausalLM.from_pretrained(\n        model_path, trust_remote_code=True\n    )\n    vl_gpt = vl_gpt.to(torch.bfloat16).cuda().eval()\n\n    return tokenizer, vl_chat_processor, vl_gpt\n\n\ndef load_pil_images(conversations: List[Dict[str, str]]) -> List[PIL.Image.Image]:\n    \"\"\"\n\n    Args:\n        conversations (List[Dict[str, str]]): the conversations with a list of messages. An example is :\n            [\n                {\n                    \"role\": \"User\",\n                    \"content\": \"<image_placeholder>\\nExtract all information from this image and convert them into markdown format.\",\n                    \"images\": [\"./examples/table_datasets.png\"]\n                },\n                {\"role\": \"Assistant\", \"content\": \"\"},\n            ]\n\n    Returns:\n        pil_images (List[PIL.Image.Image]): the list of PIL images.\n\n    \"\"\"\n\n    pil_images = []\n\n    for message in conversations:\n        if \"images\" not in message:\n            continue\n\n        for image_path in message[\"images\"]:\n            pil_img = PIL.Image.open(image_path)\n            pil_img = pil_img.convert(\"RGB\")\n            pil_images.append(pil_img)\n\n    return pil_images\n\n\ndef load_json(filepath):\n    with open(filepath, \"r\") as f:\n        data = json.load(f)\n        return data\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/__init__.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n# check if python version is above 3.10\nimport sys\n\nif sys.version_info >= (3, 10):\n    print(\"Python version is above 3.10, patching the collections module.\")\n    # Monkey patch collections\n    import collections\n    import collections.abc\n\n    for type_name in collections.abc.__all__:\n        setattr(collections, type_name, getattr(collections.abc, type_name))\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/models/__init__.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom .processing_deepseek_vl_v2 import DeepseekVLV2Processor\nfrom .modeling_deepseek_vl_v2 import DeepseekVLV2ForCausalLM\n\n__all__ = [\n    \"DeepseekVLV2Processor\",\n    \"DeepseekVLV2ForCausalLM\",\n]\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/models/configuration_deepseek.py",
    "content": "from transformers.configuration_utils import PretrainedConfig\nfrom transformers.utils import logging\n\nlogger = logging.get_logger(__name__)\n\nDEEPSEEK_PRETRAINED_CONFIG_ARCHIVE_MAP = {}\nclass DeepseekV2Config(PretrainedConfig):\n    r\"\"\"\n    This is the configuration class to store the configuration of a [`DeepseekV2Model`]. It is used to instantiate an DeepSeek\n    model according to the specified arguments, defining the model architecture. Instantiating a configuration with the\n    defaults will yield a similar configuration to that of the DeepSeek-V2 with multi-latent attention.\n\n    Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the\n    documentation from [`PretrainedConfig`] for more information.\n\n\n    Args:\n        vocab_size (`int`, *optional*, defaults to 102400):\n            Vocabulary size of the Deep model. Defines the number of different tokens that can be represented by the\n            `inputs_ids` passed when calling [`DeepseekV2Model`]\n        hidden_size (`int`, *optional*, defaults to 4096):\n            Dimension of the hidden representations.\n        intermediate_size (`int`, *optional*, defaults to 11008):\n            Dimension of the MLP representations.\n        moe_intermediate_size (`int`, *optional*, defaults to 1407):\n            Dimension of the MoE representations.\n        num_hidden_layers (`int`, *optional*, defaults to 32):\n            Number of hidden layers in the Transformer decoder.\n        num_attention_heads (`int`, *optional*, defaults to 32):\n            Number of attention heads for each attention layer in the Transformer decoder.\n        n_shared_experts (`int`, *optional*, defaults to None):\n            Number of shared experts, None means dense model.\n        n_routed_experts (`int`, *optional*, defaults to None):\n            Number of routed experts, None means dense model.\n        routed_scaling_factor (`float`, *optional*, defaults to 1.0):\n            Scaling factor or routed experts.\n        topk_method (`str`, *optional*, defaults to `gready`):\n            Topk method used in routed gate.\n        n_group (`int`, *optional*, defaults to None):\n            Number of groups for routed experts.\n        topk_group (`int`, *optional*, defaults to None):\n            Number of selected groups for each token(for each token, ensuring the selected experts is only within `topk_group` groups).\n        num_experts_per_tok (`int`, *optional*, defaults to None):\n            Number of selected experts, None means dense model.\n        moe_layer_freq (`int`, *optional*, defaults to 1):\n            The frequency of the MoE layer: one expert layer for every `moe_layer_freq - 1` dense layers.\n        first_k_dense_replace (`int`, *optional*, defaults to 0):\n            Number of dense layers in shallow layers(embed->dense->dense->...->dense->moe->moe...->lm_head).\n                                                            \\--k dense layers--/\n        norm_topk_prob (`bool`, *optional*, defaults to False):\n            Whether to normalize the weights of the routed experts.\n        scoring_func (`str`, *optional*, defaults to 'softmax'):\n            Method of computing expert weights.\n        aux_loss_alpha (`float`, *optional*, defaults to 0.001):\n            Auxiliary loss weight coefficient.\n        seq_aux = (`bool`, *optional*, defaults to True):\n            Whether to compute the auxiliary loss for each individual sample.\n        num_key_value_heads (`int`, *optional*):\n            This is the number of key_value heads that should be used to implement Grouped Query Attention. If\n            `num_key_value_heads=num_attention_heads`, the model will use Multi Head Attention (MHA), if\n            `num_key_value_heads=1 the model will use Multi Query Attention (MQA) otherwise GQA is used. When\n            converting a multi-head checkpoint to a GQA checkpoint, each group key and value head should be constructed\n            by meanpooling all the original heads within that group. For more details checkout [this\n            paper](https://arxiv.org/pdf/2305.13245.pdf). If it is not specified, will default to\n            `num_attention_heads`.\n        hidden_act (`str` or `function`, *optional*, defaults to `\"silu\"`):\n            The non-linear activation function (function or string) in the decoder.\n        max_position_embeddings (`int`, *optional*, defaults to 2048):\n            The maximum sequence length that this model might ever be used with.\n        initializer_range (`float`, *optional*, defaults to 0.02):\n            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.\n        rms_norm_eps (`float`, *optional*, defaults to 1e-06):\n            The epsilon used by the rms normalization layers.\n        use_cache (`bool`, *optional*, defaults to `True`):\n            Whether or not the model should return the last key/values attentions (not used by all models). Only\n            relevant if `config.is_decoder=True`.\n        pad_token_id (`int`, *optional*):\n            Padding token id.\n        bos_token_id (`int`, *optional*, defaults to 1):\n            Beginning of stream token id.\n        eos_token_id (`int`, *optional*, defaults to 2):\n            End of stream token id.\n        pretraining_tp (`int`, *optional*, defaults to 1):\n            Experimental feature. Tensor parallelism rank used during pretraining. Please refer to [this\n            document](https://huggingface.co/docs/transformers/parallelism) to understand more about it. This value is\n            necessary to ensure exact reproducibility of the pretraining results. Please refer to [this\n            issue](https://github.com/pytorch/pytorch/issues/76232).\n        tie_word_embeddings (`bool`, *optional*, defaults to `False`):\n            Whether to tie weight embeddings\n        rope_theta (`float`, *optional*, defaults to 10000.0):\n            The base period of the RoPE embeddings.\n        rope_scaling (`Dict`, *optional*):\n            Dictionary containing the scaling configuration for the RoPE embeddings. Currently supports two scaling\n            strategies: linear and dynamic. Their scaling factor must be a float greater than 1. The expected format is\n            `{\"type\": strategy name, \"factor\": scaling factor}`. When using this flag, don't update\n            `max_position_embeddings` to the expected new maximum.\n        attention_bias (`bool`, defaults to `False`, *optional*, defaults to `False`):\n            Whether to use a bias in the query, key, value and output projection layers during self-attention.\n        attention_dropout (`float`, *optional*, defaults to 0.0):\n            The dropout ratio for the attention probabilities.\n        use_mla (`bool`, *optional*, defaults to `True`): Use multi-latent attention or multi-head attention. If True,\n            the model will use multi-latent attention, otherwise, it will use multi-head attention.\n\n    ```python\n    >>> from transformers import DeepseekV2Model, DeepseekV2Config\n\n    >>> # Initializing a Deepseek-V2 style configuration\n    >>> configuration = DeepseekV2Config()\n\n    >>> # Accessing the model configuration\n    >>> configuration = model.config\n    ```\"\"\"\n\n    model_type = \"deepseek_v2\"\n    keys_to_ignore_at_inference = [\"past_key_values\"]\n\n    def __init__(\n        self,\n        vocab_size=102400,\n        hidden_size=4096,\n        intermediate_size=11008,\n        moe_intermediate_size = 1407,\n        num_hidden_layers=30,\n        num_attention_heads=32,\n        num_key_value_heads=32,\n        n_shared_experts = None,\n        n_routed_experts = None,\n        ep_size = 1,\n        routed_scaling_factor = 1.0,\n        kv_lora_rank = 512,\n        q_lora_rank = 1536,\n        qk_rope_head_dim = 64,\n        v_head_dim = 128,\n        qk_nope_head_dim = 128,\n        topk_method = 'gready',\n        n_group = None,\n        topk_group = None,\n        num_experts_per_tok = None,\n        moe_layer_freq = 1,\n        first_k_dense_replace = 0,\n        norm_topk_prob = False,\n        scoring_func = 'softmax',\n        aux_loss_alpha = 0.001,\n        seq_aux = True,\n        hidden_act=\"silu\",\n        max_position_embeddings=2048,\n        initializer_range=0.02,\n        rms_norm_eps=1e-6,\n        use_cache=True,\n        pad_token_id=None,\n        bos_token_id=100000,\n        eos_token_id=100001,\n        pretraining_tp=1,\n        tie_word_embeddings=False,\n        rope_theta=10000.0,\n        rope_scaling=None,\n        attention_bias=False,\n        attention_dropout=0.0,\n        use_mla=True,\n        **kwargs,\n    ):\n        self.vocab_size = vocab_size\n        self.max_position_embeddings = max_position_embeddings\n        self.hidden_size = hidden_size\n        self.intermediate_size = intermediate_size\n        self.moe_intermediate_size = moe_intermediate_size\n        self.num_hidden_layers = num_hidden_layers\n        self.num_attention_heads = num_attention_heads\n        self.n_shared_experts = n_shared_experts\n        self.n_routed_experts = n_routed_experts\n        self.ep_size = ep_size\n        self.routed_scaling_factor = routed_scaling_factor\n        self.kv_lora_rank = kv_lora_rank\n        self.q_lora_rank = q_lora_rank\n        self.qk_rope_head_dim = qk_rope_head_dim\n        self.v_head_dim = v_head_dim\n        self.qk_nope_head_dim = qk_nope_head_dim\n        self.topk_method = topk_method\n        self.n_group = n_group\n        self.topk_group = topk_group\n        self.num_experts_per_tok = num_experts_per_tok\n        self.moe_layer_freq = moe_layer_freq\n        self.first_k_dense_replace = first_k_dense_replace\n        self.norm_topk_prob = norm_topk_prob\n        self.scoring_func = scoring_func\n        self.aux_loss_alpha = aux_loss_alpha\n        self.seq_aux = seq_aux\n        # for backward compatibility\n        if num_key_value_heads is None:\n            num_key_value_heads = num_attention_heads\n\n        self.num_key_value_heads = num_key_value_heads\n        self.hidden_act = hidden_act\n        self.initializer_range = initializer_range\n        self.rms_norm_eps = float(rms_norm_eps)\n        self.pretraining_tp = pretraining_tp\n        self.use_cache = use_cache\n        self.rope_theta = rope_theta\n        self.rope_scaling = rope_scaling\n        self.attention_bias = attention_bias\n        self.attention_dropout = attention_dropout\n        self.use_mla = use_mla\n\n        super().__init__(\n            pad_token_id=pad_token_id,\n            bos_token_id=bos_token_id,\n            eos_token_id=eos_token_id,\n            tie_word_embeddings=tie_word_embeddings,\n            **kwargs,\n        )\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/models/conversation.py",
    "content": "\"\"\"\nFrom https://github.com/lm-sys/FastChat/blob/main/fastchat/conversation.py\n\"\"\"\n\nimport dataclasses\nfrom enum import IntEnum, auto\nfrom typing import Any, Dict, List\n\n\nclass SeparatorStyle(IntEnum):\n    \"\"\"Separator styles.\"\"\"\n\n    DeepSeek = auto()\n    DeepSeekV2 = auto()\n    PLAIN = auto()\n    ALIGNMENT = auto()\n\n\n@dataclasses.dataclass\nclass Conversation:\n    \"\"\"A class that manages prompt templates and keeps all conversation history.\"\"\"\n\n    # The name of this template\n    name: str\n    # The template of the system prompt\n    system_template: str = \"{system_message}\"\n    # The system message\n    system_message: str = \"\"\n    # The names of two roles\n    roles: List[str] = ((\"USER\", \"ASSISTANT\"),)\n    # All messages. Each item is (role, message).\n    messages: List[List[str]] = ()\n    # The number of few shot examples\n    offset: int = 0\n    # The separator style and configurations\n    sep_style: SeparatorStyle = SeparatorStyle.DeepSeek\n    sep: str = \"\\n\"\n    sep2: str = None\n    # Stop criteria (the default one is EOS token)\n    stop_str: str = None\n    # Stops generation if meeting any token in this list\n    stop_token_ids: List[int] = None\n\n    def get_prompt(self) -> str:\n        \"\"\"Get the prompt for generation.\"\"\"\n        system_prompt = self.system_template.format(system_message=self.system_message)\n        if self.sep_style == SeparatorStyle.DeepSeek:\n            seps = [self.sep, self.sep2]\n            if system_prompt == \"\" or system_prompt is None:\n                ret = \"\"\n            else:\n                ret = system_prompt + seps[0]\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    ret += role + \": \" + message + seps[i % 2]\n                else:\n                    ret += role + \":\"\n            return ret\n        elif self.sep_style == SeparatorStyle.DeepSeekV2:\n            seps = [self.sep, self.sep2]\n            if system_prompt == \"\" or system_prompt is None:\n                ret = \"\"\n            else:\n                ret = system_prompt + seps[0]\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    if role == \"User\":\n                        ret += \"<｜sft▁begin｜>\\n\" + message + self.sep #<｜sft▁begin｜>User Input<｜sft▁end｜>\\nResponse<｜end▁of▁sentence｜>\n                    else:\n                        ret += message + self.sep2\n                else:\n                    ret = ret\n            return ret\n\n        elif self.sep_style == SeparatorStyle.PLAIN:\n            seps = [self.sep, self.sep2]\n            ret = \"\"\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    if type(message) is tuple:\n                        message, _, _ = message\n                    if i % 2 == 0:\n                        ret += message + seps[i % 2]\n                    else:\n                        ret += message + seps[i % 2]\n                else:\n                    ret += \"\"\n            return ret\n        elif self.sep_style == SeparatorStyle.ALIGNMENT:\n            seps = [self.sep, self.sep2]\n            ret = \"\"\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    if type(message) is tuple:\n                        message, _, _ = message\n                    if i % 2 == 0:\n                        ret += '<image>\\n' + seps[i % 2]\n                    else:\n                        ret += message + seps[i % 2]\n                else:\n                    ret += \"\"\n            return ret\n        else:\n            raise ValueError(f\"Invalid style: {self.sep_style}\")\n\n    def set_system_message(self, system_message: str):\n        \"\"\"Set the system message.\"\"\"\n        self.system_message = system_message\n\n    def append_message(self, role: str, message: str):\n        \"\"\"Append a new message.\"\"\"\n        self.messages.append([role, message])\n\n    def update_last_message(self, message: str):\n        \"\"\"Update the last output.\n\n        The last message is typically set to be None when constructing the prompt,\n        so we need to update it in-place after getting the response from a model.\n        \"\"\"\n        self.messages[-1][1] = message\n\n    def reset_message(self):\n        \"\"\"Reset a new message.\"\"\"\n        self.messages = []\n\n    def to_gradio_chatbot(self):\n        \"\"\"Convert the conversation to gradio chatbot format.\"\"\"\n        ret = []\n        for i, (role, msg) in enumerate(self.messages[self.offset :]):\n            if i % 2 == 0:\n                ret.append([msg, None])\n            else:\n                ret[-1][-1] = msg\n        return ret\n\n    def to_openai_api_messages(self):\n        \"\"\"Convert the conversation to OpenAI chat completion format.\"\"\"\n        system_prompt = self.system_template.format(system_message=self.system_message)\n        ret = [{\"role\": \"system\", \"content\": system_prompt}]\n\n        for i, (_, msg) in enumerate(self.messages[self.offset :]):\n            if i % 2 == 0:\n                ret.append({\"role\": \"user\", \"content\": msg})\n            else:\n                if msg is not None:\n                    ret.append({\"role\": \"assistant\", \"content\": msg})\n        return ret\n\n    def copy(self):\n        return Conversation(\n            name=self.name,\n            system_template=self.system_template,\n            system_message=self.system_message,\n            roles=self.roles,\n            messages=[[x, y] for x, y in self.messages],\n            offset=self.offset,\n            sep_style=self.sep_style,\n            sep=self.sep,\n            sep2=self.sep2,\n            stop_str=self.stop_str,\n            stop_token_ids=self.stop_token_ids,\n        )\n\n    def dict(self):\n        return {\n            \"template_name\": self.name,\n            \"system_message\": self.system_message,\n            \"roles\": self.roles,\n            \"messages\": self.messages,\n            \"offset\": self.offset,\n        }\n\n\n# A global registry for all conversation templates\nconv_templates: Dict[str, Conversation] = {}\n\n\ndef register_conv_template(template: Conversation, override: bool = False):\n    \"\"\"Register a new conversation template.\"\"\"\n    if not override:\n        assert template.name not in conv_templates, f\"{template.name} has been registered.\"\n\n    conv_templates[template.name] = template\n\n\ndef get_conv_template(name: str) -> Conversation:\n    \"\"\"Get a conversation template.\"\"\"\n    return conv_templates[name].copy()\n\n\n# register_conv_template(\n#     Conversation(\n#         name=\"deepseek\",\n#         system_template=\"{system_message}\",\n#         # system_message=\"You are a helpful assistant. Please answer truthfully and write out your \"\n#         # \"thinking step by step to be sure you get the right answer.\",\n#         system_message=\"\",\n#         roles=(\"User\", \"Assistant\"),\n#         messages=(),\n#         offset=0,\n#         sep_style=SeparatorStyle.DeepSeek,\n#         sep=\"\\n\\n\",\n#         sep2=\"<｜end▁of▁sentence｜>\",\n#         stop_token_ids=[100001],\n#         stop_str=[\"User:\", \"<｜end▁of▁sentence｜>\"]\n#     )\n# )\nregister_conv_template(\n    Conversation(\n        name=\"deepseek\",\n        system_template=\"{system_message}\",\n        # system_message=\"You are a helpful assistant. Please answer truthfully and write out your \"\n        # \"thinking step by step to be sure you get the right answer.\",\n        system_message=\"\",\n        roles=(\"<|User|>\", \"<|Assistant|>\"),\n        messages=(),\n        offset=0,\n        sep_style=SeparatorStyle.DeepSeek,\n        sep=\"\\n\\n\",\n        sep2=\"<｜end▁of▁sentence｜>\",\n        stop_token_ids=[100001],\n        stop_str=[\"User:\", \"<｜end▁of▁sentence｜>\"]\n    )\n)\n# register_conv_template(\n#     Conversation(\n#         name=\"deepseekv2\",\n#         system_template=\"{system_message}\",\n#         system_message=\"\",\n#         roles=(\"User\", \"Assistant\"),\n#         messages=(),\n#         offset=0,\n#         sep_style=SeparatorStyle.DeepSeekV2,\n#         sep=\"\\n<｜sft▁end｜>\",\n#         sep2=\"<｜end▁of▁sentence｜>\",\n#         stop_token_ids=[100001],\n#         stop_str=[\"User:\", \"<｜end▁of▁sentence｜>\"]\n#     )\n# )\nregister_conv_template(\n    Conversation(\n        name=\"deepseekv2\",\n        system_template=\"{system_message}\",\n        system_message=\"\",\n        roles=(\"|<User>|\", \"|<Assistant>|\"),\n        messages=(),\n        offset=0,\n        sep_style=SeparatorStyle.DeepSeekV2,\n        sep=\"\\n<｜sft▁end｜>\",\n        sep2=\"<｜end▁of▁sentence｜>\",\n        stop_token_ids=[100001],\n        stop_str=[\"User:\", \"<｜end▁of▁sentence｜>\"]\n    )\n)\n\n\nregister_conv_template(\n    Conversation(\n        name=\"plain\",\n        system_template=\"\",\n        system_message=\"\",\n        roles=(\"\", \"\"),\n        messages=(),\n        offset=0,\n        sep_style=SeparatorStyle.PLAIN,\n        sep=\"\",\n        sep2=\"\",\n        stop_token_ids=[100001],\n        stop_str=['</s>'],\n    )\n)\n\n\nregister_conv_template(\n    Conversation(\n        name=\"alignment\",\n        system_template=\"\",\n        system_message=\"\",\n        roles=(\"\", \"\"),\n        messages=(),\n        offset=0,\n        sep_style=SeparatorStyle.ALIGNMENT,\n        sep=\"\",\n        sep2=\"\",\n        stop_token_ids=[100001],\n        stop_str=['</s>'],\n    )\n)\n\n\nif __name__ == \"__main__\":\n    print(\"deepseek template:\")\n    conv = get_conv_template(\"deepseek\")\n    conv.append_message(conv.roles[0], \"Hello!\")\n    conv.append_message(conv.roles[1], \"Hi! This is Tony.\")\n    conv.append_message(conv.roles[0], \"Who are you?\")\n    conv.append_message(conv.roles[1], \"I am a helpful assistant.\")\n    conv.append_message(conv.roles[0], \"How are you?\")\n    conv.append_message(conv.roles[1], None)\n    print(conv.get_prompt())\n\n    print(\"deepseekv2 template:\")\n    conv = get_conv_template(\"deepseekv2\")\n    conv.append_message(conv.roles[0], \"Hello!\")\n    conv.append_message(conv.roles[1], \"Hi! This is Tony.\")\n    conv.append_message(conv.roles[0], \"Who are you?\")\n    conv.append_message(conv.roles[1], \"I am a helpful assistant.\")\n    conv.append_message(conv.roles[0], \"How are you?\")\n    conv.append_message(conv.roles[1], None)\n    print(conv.get_prompt())\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/models/modeling_deepseek.py",
    "content": "# coding=utf-8\n# Copyright 2023 DeepSeek-AI and The HuggingFace Inc. team. All rights reserved.\n#\n# This code is based on EleutherAI's GPT-NeoX library and the GPT-NeoX\n# and OPT implementations in this library. It has been modified from its\n# original forms to accommodate minor architectural differences compared\n# to GPT-NeoX and OPT used by the Meta AI team that trained the model.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" PyTorch DeepSeek model and compatible with both DeepSeekV2 and DeepSeekV3\"\"\"\nimport math\nimport warnings\nfrom typing import List, Optional, Tuple, Union\nimport numpy as np\n\nimport torch\nimport torch.nn.functional as F\nimport torch.utils.checkpoint\nimport torch.distributed as dist\nfrom einops import repeat\nfrom torch import nn\nfrom torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss\n\nfrom transformers.activations import ACT2FN\nfrom transformers.cache_utils import Cache, DynamicCache\nfrom transformers.modeling_attn_mask_utils import _prepare_4d_causal_attention_mask\nfrom transformers.models.llama.modeling_llama import (\n    LlamaAttention,\n    LlamaFlashAttention2\n)\nfrom transformers.modeling_outputs import (\n    BaseModelOutputWithPast,\n    CausalLMOutputWithPast,\n    SequenceClassifierOutputWithPast,\n)\nfrom transformers.modeling_utils import PreTrainedModel\nfrom transformers.pytorch_utils import (\n    ALL_LAYERNORM_LAYERS,\n    is_torch_greater_or_equal_than_1_13,\n)\nfrom transformers.utils import (\n    add_start_docstrings,\n    add_start_docstrings_to_model_forward,\n    is_flash_attn_2_available,\n    is_flash_attn_greater_or_equal_2_10,\n    logging,\n    replace_return_docstrings,\n)\nfrom transformers.utils.import_utils import is_torch_fx_available\n\nfrom .configuration_deepseek import DeepseekV2Config\n\nif is_flash_attn_2_available():\n    from flash_attn import flash_attn_func, flash_attn_varlen_func\n    from flash_attn.bert_padding import index_first_axis, pad_input, unpad_input  # noqa\n\n# This makes `_prepare_4d_causal_attention_mask` a leaf function in the FX graph.\n# It means that the function will not be traced through and simply appear as a node in the graph.\nif is_torch_fx_available():\n    if not is_torch_greater_or_equal_than_1_13:\n        import torch.fx\n\n    _prepare_4d_causal_attention_mask = torch.fx.wrap(_prepare_4d_causal_attention_mask)\n\nlogger = logging.get_logger(__name__)\n\n_CONFIG_FOR_DOC = \"DeepseekV2Config\"\n\n\ndef _get_unpad_data(attention_mask):\n    seqlens_in_batch = attention_mask.sum(dim=-1, dtype=torch.int32)\n    indices = torch.nonzero(attention_mask.flatten(), as_tuple=False).flatten()\n    max_seqlen_in_batch = seqlens_in_batch.max().item()\n    cu_seqlens = F.pad(\n        torch.cumsum(seqlens_in_batch, dim=0, dtype=torch.torch.int32), (1, 0)\n    )\n    return (\n        indices,\n        cu_seqlens,\n        max_seqlen_in_batch,\n    )\n\n\nclass DeepseekV2RMSNorm(nn.Module):\n    def __init__(self, hidden_size, eps=1e-6):\n        \"\"\"\n        DeepseekV2RMSNorm is equivalent to T5LayerNorm\n        \"\"\"\n        super().__init__()\n        self.weight = nn.Parameter(torch.ones(hidden_size))\n        self.variance_epsilon = eps\n\n    def forward(self, hidden_states):\n        input_dtype = hidden_states.dtype\n        hidden_states = hidden_states.to(torch.float32)\n        variance = hidden_states.pow(2).mean(-1, keepdim=True)\n        hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon)\n        return self.weight * hidden_states.to(input_dtype)\n\n\nALL_LAYERNORM_LAYERS.append(DeepseekV2RMSNorm)\n\n\nclass DeepseekV2RotaryEmbedding(nn.Module):\n    def __init__(self, dim, max_position_embeddings=2048, base=10000, device=None):\n        super().__init__()\n\n        self.dim = dim\n        self.max_position_embeddings = max_position_embeddings\n        self.base = base\n        inv_freq = 1.0 / (\n            self.base ** (torch.arange(0, self.dim, 2).float().to(device) / self.dim)\n        )\n        self.register_buffer(\"inv_freq\", inv_freq, persistent=False)\n\n        # Build here to make `torch.jit.trace` work.\n        self._set_cos_sin_cache(\n            seq_len=max_position_embeddings,\n            device=self.inv_freq.device,\n            dtype=torch.get_default_dtype(),\n        )\n        self.max_seq_len_cached = None\n\n    def _set_cos_sin_cache(self, seq_len, device, dtype):\n        self.max_seq_len_cached = seq_len\n        t = torch.arange(\n            self.max_seq_len_cached, device=device, dtype=self.inv_freq.dtype\n        )\n\n        freqs = torch.outer(t, self.inv_freq.to(t.device))\n        # Different from paper, but it uses a different permutation in order to obtain the same calculation\n        emb = torch.cat((freqs, freqs), dim=-1)\n        self.register_buffer(\"cos_cached\", emb.cos().to(dtype), persistent=False)\n        self.register_buffer(\"sin_cached\", emb.sin().to(dtype), persistent=False)\n\n    def forward(self, x, seq_len=None):\n        # x: [bs, num_attention_heads, seq_len, head_size]\n        if self.max_seq_len_cached is None or seq_len > self.max_seq_len_cached:\n            self._set_cos_sin_cache(seq_len=seq_len, device=x.device, dtype=x.dtype)\n\n        return (\n            self.cos_cached[:seq_len].to(dtype=x.dtype),\n            self.sin_cached[:seq_len].to(dtype=x.dtype),\n        )\n\n\n# Copied from transformers.models.llama.modeling_llama.LlamaLinearScalingRotaryEmbedding with Llama->DeepseekV2\nclass DeepseekV2LinearScalingRotaryEmbedding(DeepseekV2RotaryEmbedding):\n    \"\"\"DeepseekV2RotaryEmbedding extended with linear scaling. Credits to the Reddit user /u/kaiokendev\"\"\"\n\n    def __init__(\n        self,\n        dim,\n        max_position_embeddings=2048,\n        base=10000,\n        device=None,\n        scaling_factor=1.0,\n    ):\n        self.scaling_factor = scaling_factor\n        super().__init__(dim, max_position_embeddings, base, device)\n\n    def _set_cos_sin_cache(self, seq_len, device, dtype):\n        self.max_seq_len_cached = seq_len\n        t = torch.arange(\n            self.max_seq_len_cached, device=device, dtype=self.inv_freq.dtype\n        )\n        t = t / self.scaling_factor\n\n        freqs = torch.outer(t, self.inv_freq)\n        # Different from paper, but it uses a different permutation in order to obtain the same calculation\n        emb = torch.cat((freqs, freqs), dim=-1)\n        self.register_buffer(\"cos_cached\", emb.cos().to(dtype), persistent=False)\n        self.register_buffer(\"sin_cached\", emb.sin().to(dtype), persistent=False)\n\n\n# Copied from transformers.models.llama.modeling_llama.LlamaDynamicNTKScalingRotaryEmbedding with Llama->DeepseekV2\nclass DeepseekV2DynamicNTKScalingRotaryEmbedding(DeepseekV2RotaryEmbedding):\n    \"\"\"DeepseekV2RotaryEmbedding extended with Dynamic NTK scaling. Credits to the Reddit users /u/bloc97 and /u/emozilla\"\"\"\n\n    def __init__(\n        self,\n        dim,\n        max_position_embeddings=2048,\n        base=10000,\n        device=None,\n        scaling_factor=1.0,\n    ):\n        self.scaling_factor = scaling_factor\n        super().__init__(dim, max_position_embeddings, base, device)\n\n    def _set_cos_sin_cache(self, seq_len, device, dtype):\n        self.max_seq_len_cached = seq_len\n\n        if seq_len > self.max_position_embeddings:\n            base = self.base * (\n                (self.scaling_factor * seq_len / self.max_position_embeddings)\n                - (self.scaling_factor - 1)\n            ) ** (self.dim / (self.dim - 2))\n            inv_freq = 1.0 / (\n                base ** (torch.arange(0, self.dim, 2).float().to(device) / self.dim)\n            )\n            self.register_buffer(\"inv_freq\", inv_freq, persistent=False)\n\n        t = torch.arange(\n            self.max_seq_len_cached, device=device, dtype=self.inv_freq.dtype\n        )\n\n        freqs = torch.outer(t, self.inv_freq)\n        # Different from paper, but it uses a different permutation in order to obtain the same calculation\n        emb = torch.cat((freqs, freqs), dim=-1)\n        self.register_buffer(\"cos_cached\", emb.cos().to(dtype), persistent=False)\n        self.register_buffer(\"sin_cached\", emb.sin().to(dtype), persistent=False)\n\n\n# Inverse dim formula to find dim based on number of rotations\ndef yarn_find_correction_dim(\n    num_rotations, dim, base=10000, max_position_embeddings=2048\n):\n    return (dim * math.log(max_position_embeddings / (num_rotations * 2 * math.pi))) / (\n        2 * math.log(base)\n    )\n\n\n# Find dim range bounds based on rotations\ndef yarn_find_correction_range(\n    low_rot, high_rot, dim, base=10000, max_position_embeddings=2048\n):\n    low = math.floor(\n        yarn_find_correction_dim(low_rot, dim, base, max_position_embeddings)\n    )\n    high = math.ceil(\n        yarn_find_correction_dim(high_rot, dim, base, max_position_embeddings)\n    )\n    return max(low, 0), min(high, dim - 1)  # Clamp values just in case\n\n\ndef yarn_get_mscale(scale=1, mscale=1):\n    if scale <= 1:\n        return 1.0\n    return 0.1 * mscale * math.log(scale) + 1.0\n\n\ndef yarn_linear_ramp_mask(min, max, dim):\n    if min == max:\n        max += 0.001  # Prevent singularity\n\n    linear_func = (torch.arange(dim, dtype=torch.float32) - min) / (max - min)\n    ramp_func = torch.clamp(linear_func, 0, 1)\n    return ramp_func\n\n\nclass DeepseekV2YarnRotaryEmbedding(DeepseekV2RotaryEmbedding):\n\n    def __init__(\n        self,\n        dim,\n        max_position_embeddings=2048,\n        base=10000,\n        device=None,\n        scaling_factor=1.0,\n        original_max_position_embeddings=4096,\n        beta_fast=32,\n        beta_slow=1,\n        mscale=1,\n        mscale_all_dim=0,\n    ):\n        self.scaling_factor = scaling_factor\n        self.original_max_position_embeddings = original_max_position_embeddings\n        self.beta_fast = beta_fast\n        self.beta_slow = beta_slow\n        self.mscale = mscale\n        self.mscale_all_dim = mscale_all_dim\n        super().__init__(dim, max_position_embeddings, base, device)\n\n    def _set_cos_sin_cache(self, seq_len, device, dtype):\n        self.max_seq_len_cached = seq_len\n        dim = self.dim\n\n        freq_extra = 1.0 / (\n            self.base\n            ** (torch.arange(0, dim, 2, dtype=torch.float32, device=device) / dim)\n        )\n        freq_inter = 1.0 / (\n            self.scaling_factor\n            * self.base\n            ** (torch.arange(0, dim, 2, dtype=torch.float32, device=device) / dim)\n        )\n\n        low, high = yarn_find_correction_range(\n            self.beta_fast,\n            self.beta_slow,\n            dim,\n            self.base,\n            self.original_max_position_embeddings,\n        )\n        inv_freq_mask = 1.0 - yarn_linear_ramp_mask(low, high, dim // 2).to(\n            device=device, dtype=torch.float32\n        )\n        inv_freq = freq_inter * (1 - inv_freq_mask) + freq_extra * inv_freq_mask\n        self.register_buffer(\"inv_freq\", inv_freq, persistent=False)\n\n        t = torch.arange(seq_len, device=device, dtype=torch.float32)\n\n        freqs = torch.outer(t, inv_freq)\n\n        _mscale = float(\n            yarn_get_mscale(self.scaling_factor, self.mscale)\n            / yarn_get_mscale(self.scaling_factor, self.mscale_all_dim)\n        )\n\n        emb = torch.cat((freqs, freqs), dim=-1)\n        self.register_buffer(\n            \"cos_cached\", (emb.cos() * _mscale).to(dtype), persistent=False\n        )\n        self.register_buffer(\n            \"sin_cached\", (emb.sin() * _mscale).to(dtype), persistent=False\n        )\n\n\n# Copied from transformers.models.llama.modeling_llama.rotate_half\ndef rotate_half(x):\n    \"\"\"Rotates half the hidden dims of the input.\"\"\"\n    x1 = x[..., : x.shape[-1] // 2]\n    x2 = x[..., x.shape[-1] // 2 :]\n    return torch.cat((-x2, x1), dim=-1)\n\n\n# Copied from transformers.models.llama.modeling_llama.apply_rotary_pos_emb\ndef apply_rotary_pos_emb(q, k, cos, sin, position_ids, unsqueeze_dim=1):\n    \"\"\"Applies Rotary Position Embedding to the query and key tensors.\n\n    Args:\n        q (`torch.Tensor`): The query tensor.\n        k (`torch.Tensor`): The key tensor.\n        cos (`torch.Tensor`): The cosine part of the rotary embedding.\n        sin (`torch.Tensor`): The sine part of the rotary embedding.\n        position_ids (`torch.Tensor`):\n            The position indices of the tokens corresponding to the query and key tensors. For example, this can be\n            used to pass offsetted position ids when working with a KV-cache.\n        unsqueeze_dim (`int`, *optional*, defaults to 1):\n            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and\n            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note\n            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and\n            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes\n            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have\n            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.\n    Returns:\n        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.\n    \"\"\"\n    cos = cos[position_ids].unsqueeze(unsqueeze_dim)\n    sin = sin[position_ids].unsqueeze(unsqueeze_dim)\n\n    b, h, s, d = q.shape\n    q = q.view(b, h, s, d // 2, 2).transpose(4, 3).reshape(b, h, s, d)\n\n    b, h, s, d = k.shape\n    k = k.view(b, h, s, d // 2, 2).transpose(4, 3).reshape(b, h, s, d)\n\n    q_embed = (q * cos) + (rotate_half(q) * sin)\n    k_embed = (k * cos) + (rotate_half(k) * sin)\n    return q_embed, k_embed\n\n\nclass DeepseekV2MLP(nn.Module):\n    def __init__(self, config, hidden_size=None, intermediate_size=None):\n        super().__init__()\n        self.config = config\n        self.hidden_size = config.hidden_size if hidden_size is None else hidden_size\n        self.intermediate_size = (\n            config.intermediate_size if intermediate_size is None else intermediate_size\n        )\n\n        self.gate_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)\n        self.up_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)\n        self.down_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=False)\n        self.act_fn = ACT2FN[config.hidden_act]\n\n    def forward(self, x):\n        down_proj = self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x))\n        return down_proj\n\n\nclass MoEGate(nn.Module):\n    def __init__(self, config):\n        super().__init__()\n        self.config = config\n        self.top_k = config.num_experts_per_tok\n        self.n_routed_experts = config.n_routed_experts\n        self.routed_scaling_factor = config.routed_scaling_factor\n        self.scoring_func = config.scoring_func\n        self.alpha = config.aux_loss_alpha\n        self.seq_aux = config.seq_aux\n        self.topk_method = config.topk_method\n        self.n_group = config.n_group\n        self.topk_group = config.topk_group\n\n        # topk selection algorithm\n        self.norm_topk_prob = config.norm_topk_prob\n        self.gating_dim = config.hidden_size\n        self.weight = nn.Parameter(\n            torch.empty((self.n_routed_experts, self.gating_dim))\n        )\n        if self.topk_method == \"noaux_tc\":\n            self.e_score_correction_bias = nn.Parameter(\n                torch.empty((self.n_routed_experts))\n            )\n        self.reset_parameters()\n\n    def reset_parameters(self) -> None:\n        import torch.nn.init as init\n\n        init.kaiming_uniform_(self.weight, a=math.sqrt(5))\n\n    def forward(self, hidden_states):\n        bsz, seq_len, h = hidden_states.shape\n        ### compute gating score\n        hidden_states = hidden_states.view(-1, h)\n        logits = F.linear(\n            hidden_states.type(torch.float32), self.weight.type(torch.float32), None\n        )\n        if self.scoring_func == \"softmax\":\n            scores = logits.softmax(dim=-1, dtype=torch.float32)\n        elif self.scoring_func == \"sigmoid\":\n            scores = logits.sigmoid()\n        else:\n            raise NotImplementedError(\n                f\"insupportable scoring function for MoE gating: {self.scoring_func}\"\n            )\n\n        ### select top-k experts\n        if self.topk_method == \"greedy\":\n            topk_weight, topk_idx = torch.topk(\n                scores, k=self.top_k, dim=-1, sorted=False\n            )\n        elif self.topk_method == \"group_limited_greedy\":\n            group_scores = (\n                scores.view(bsz * seq_len, self.n_group, -1).max(dim=-1).values\n            )  # [n, n_group]\n            group_idx = torch.topk(\n                group_scores, k=self.topk_group, dim=-1, sorted=False\n            )[\n                1\n            ]  # [n, top_k_group]\n            group_mask = torch.zeros_like(group_scores)  # [n, n_group]\n            group_mask.scatter_(1, group_idx, 1)  # [n, n_group]\n            score_mask = (\n                group_mask.unsqueeze(-1)\n                .expand(\n                    bsz * seq_len, self.n_group, self.n_routed_experts // self.n_group\n                )\n                .reshape(bsz * seq_len, -1)\n            )  # [n, e]\n            tmp_scores = scores.masked_fill(~score_mask.bool(), 0.0)  # [n, e]\n            topk_weight, topk_idx = torch.topk(\n                tmp_scores, k=self.top_k, dim=-1, sorted=False\n            )\n        elif self.topk_method == \"noaux_tc\":\n            assert not self.training\n            scores_for_choice = scores.view(bsz * seq_len, -1) + self.e_score_correction_bias.unsqueeze(0)\n            group_scores = (\n                scores_for_choice.view(bsz * seq_len, self.n_group, -1).topk(2, dim=-1)[0].sum(dim = -1)\n            )  # [n, n_group]\n            group_idx = torch.topk(\n                group_scores, k=self.topk_group, dim=-1, sorted=False\n            )[\n                1\n            ]  # [n, top_k_group]\n            group_mask = torch.zeros_like(group_scores)  # [n, n_group]\n            group_mask.scatter_(1, group_idx, 1)  # [n, n_group]\n            score_mask = (\n                group_mask.unsqueeze(-1)\n                .expand(\n                    bsz * seq_len, self.n_group, self.n_routed_experts // self.n_group\n                )\n                .reshape(bsz * seq_len, -1)\n            )  # [n, e]\n            tmp_scores = scores_for_choice.masked_fill(~score_mask.bool(), 0.0)  # [n, e]\n            _, topk_idx = torch.topk(\n                tmp_scores, k=self.top_k, dim=-1, sorted=False\n            )\n            topk_weight = scores.gather(1, topk_idx)\n\n        ### norm gate to sum 1\n        if self.top_k > 1 and self.norm_topk_prob:\n            denominator = topk_weight.sum(dim=-1, keepdim=True) + 1e-20\n            topk_weight = topk_weight / denominator * self.routed_scaling_factor\n        else:\n            topk_weight = topk_weight * self.routed_scaling_factor\n        ### expert-level computation auxiliary loss\n        if self.training and self.alpha > 0.0:\n            scores_for_aux = scores\n            aux_topk = self.top_k\n            # always compute aux loss based on the naive greedy topk method\n            topk_idx_for_aux_loss = topk_idx.view(bsz, -1)\n            if self.seq_aux:\n                scores_for_seq_aux = scores_for_aux.view(bsz, seq_len, -1)\n                ce = torch.zeros(\n                    bsz, self.n_routed_experts, device=hidden_states.device\n                )\n                ce.scatter_add_(\n                    1,\n                    topk_idx_for_aux_loss,\n                    torch.ones(bsz, seq_len * aux_topk, device=hidden_states.device),\n                ).div_(seq_len * aux_topk / self.n_routed_experts)\n                aux_loss = (ce * scores_for_seq_aux.mean(dim=1)).sum(\n                    dim=1\n                ).mean() * self.alpha\n            else:\n                mask_ce = F.one_hot(\n                    topk_idx_for_aux_loss.view(-1), num_classes=self.n_routed_experts\n                )\n                ce = mask_ce.float().mean(0)\n                Pi = scores_for_aux.mean(0)\n                fi = ce * self.n_routed_experts\n                aux_loss = (Pi * fi).sum() * self.alpha\n        else:\n            aux_loss = None\n        return topk_idx, topk_weight, aux_loss\n\n\nclass AddAuxiliaryLoss(torch.autograd.Function):\n    \"\"\"\n    The trick function of adding auxiliary (aux) loss,\n    which includes the gradient of the aux loss during backpropagation.\n    \"\"\"\n\n    @staticmethod\n    def forward(ctx, x, loss):\n        assert loss.numel() == 1\n        ctx.dtype = loss.dtype\n        ctx.required_aux_loss = loss.requires_grad\n        return x\n\n    @staticmethod\n    def backward(ctx, grad_output):\n        grad_loss = None\n        if ctx.required_aux_loss:\n            grad_loss = torch.ones(1, dtype=ctx.dtype, device=grad_output.device)\n        return grad_output, grad_loss\n\n\nclass DeepseekV2MoE(nn.Module):\n    \"\"\"\n    A mixed expert module containing shared experts.\n    \"\"\"\n\n    def __init__(self, config):\n        super().__init__()\n        self.config = config\n        self.num_experts_per_tok = config.num_experts_per_tok\n\n        if hasattr(config, \"ep_size\") and config.ep_size > 1:\n            assert config.ep_size == dist.get_world_size()\n            self.ep_size = config.ep_size\n            self.experts_per_rank = config.n_routed_experts // config.ep_size\n            self.ep_rank = dist.get_rank()\n            self.experts = nn.ModuleList(\n                [\n                    (\n                        DeepseekV2MLP(\n                            config, intermediate_size=config.moe_intermediate_size\n                        )\n                        if i >= self.ep_rank * self.experts_per_rank\n                        and i < (self.ep_rank + 1) * self.experts_per_rank\n                        else None\n                    )\n                    for i in range(config.n_routed_experts)\n                ]\n            )\n        else:\n            self.ep_size = 1\n            self.experts_per_rank = config.n_routed_experts\n            self.ep_rank = 0\n            self.experts = nn.ModuleList(\n                [\n                    DeepseekV2MLP(\n                        config, intermediate_size=config.moe_intermediate_size\n                    )\n                    for i in range(config.n_routed_experts)\n                ]\n            )\n        self.gate = MoEGate(config)\n        if config.n_shared_experts is not None:\n            intermediate_size = config.moe_intermediate_size * config.n_shared_experts\n            self.shared_experts = DeepseekV2MLP(\n                config=config, intermediate_size=intermediate_size\n            )\n\n    def forward(self, hidden_states):\n        identity = hidden_states\n        orig_shape = hidden_states.shape\n        topk_idx, topk_weight, aux_loss = self.gate(hidden_states)\n        hidden_states = hidden_states.view(-1, hidden_states.shape[-1])\n        flat_topk_idx = topk_idx.view(-1)\n        if self.training:\n            hidden_states = hidden_states.repeat_interleave(\n                self.num_experts_per_tok, dim=0\n            )\n            y = torch.empty_like(hidden_states)\n            for i, expert in enumerate(self.experts):\n                y[flat_topk_idx == i] = expert(hidden_states[flat_topk_idx == i])\n            y = (y.view(*topk_weight.shape, -1) * topk_weight.unsqueeze(-1)).sum(dim=1)\n            y = y.to(hidden_states.dtype).view(*orig_shape)\n            y = AddAuxiliaryLoss.apply(y, aux_loss)\n        else:\n            y = self.moe_infer(hidden_states, topk_idx, topk_weight).view(*orig_shape)\n        if self.config.n_shared_experts is not None:\n            y = y + self.shared_experts(identity)\n        return y\n\n    @torch.no_grad()\n    def moe_infer(self, x, topk_ids, topk_weight):\n        cnts = topk_ids.new_zeros((topk_ids.shape[0], len(self.experts)))\n        cnts.scatter_(1, topk_ids, 1)\n        tokens_per_expert = cnts.sum(dim=0)\n        idxs = topk_ids.view(-1).argsort()\n        sorted_tokens = x[idxs // topk_ids.shape[1]]\n        sorted_tokens_shape = sorted_tokens.shape\n        if self.ep_size > 1:\n            tokens_per_ep_rank = tokens_per_expert.view(self.ep_size, -1).sum(dim=1)\n            tokens_per_expert_group = tokens_per_expert.new_empty(\n                tokens_per_expert.shape[0]\n            )\n            dist.all_to_all_single(tokens_per_expert_group, tokens_per_expert)\n            output_splits = (\n                tokens_per_expert_group.view(self.ep_size, -1)\n                .sum(1)\n                .cpu()\n                .numpy()\n                .tolist()\n            )\n            gathered_tokens = sorted_tokens.new_empty(\n                tokens_per_expert_group.sum(dim=0).cpu().item(), sorted_tokens.shape[1]\n            )\n            input_split_sizes = tokens_per_ep_rank.cpu().numpy().tolist()\n            dist.all_to_all(\n                list(gathered_tokens.split(output_splits)),\n                list(sorted_tokens.split(input_split_sizes)),\n            )\n            tokens_per_expert_post_gather = tokens_per_expert_group.view(\n                self.ep_size, self.experts_per_rank\n            ).sum(dim=0)\n            gatherd_idxs = np.zeros(shape=(gathered_tokens.shape[0],), dtype=np.int32)\n            s = 0\n            for i, k in enumerate(tokens_per_expert_group.cpu().numpy()):\n                gatherd_idxs[s : s + k] = i % self.experts_per_rank\n                s += k\n            gatherd_idxs = gatherd_idxs.argsort()\n            sorted_tokens = gathered_tokens[gatherd_idxs]\n            tokens_per_expert = tokens_per_expert_post_gather\n        tokens_per_expert = tokens_per_expert.cpu().numpy()\n\n        outputs = []\n        start_idx = 0\n        for i, num_tokens in enumerate(tokens_per_expert):\n            end_idx = start_idx + num_tokens\n            if num_tokens == 0:\n                continue\n            expert = self.experts[i + self.ep_rank * self.experts_per_rank]\n            tokens_for_this_expert = sorted_tokens[start_idx:end_idx]\n            expert_out = expert(tokens_for_this_expert)\n            outputs.append(expert_out)\n            start_idx = end_idx\n\n        outs = torch.cat(outputs, dim=0) if len(outputs) else sorted_tokens.new_empty(0)\n        if self.ep_size > 1:\n            new_x = torch.empty_like(outs)\n            new_x[gatherd_idxs] = outs\n            gathered_tokens = new_x.new_empty(*sorted_tokens_shape)\n            dist.all_to_all(\n                list(gathered_tokens.split(input_split_sizes)),\n                list(new_x.split(output_splits)),\n            )\n            outs = gathered_tokens\n\n        new_x = torch.empty_like(outs)\n        new_x[idxs] = outs\n        final_out = (\n            new_x.view(*topk_ids.shape, -1)\n            .type(topk_weight.dtype)\n            .mul_(topk_weight.unsqueeze(dim=-1))\n            .sum(dim=1)\n            .type(new_x.dtype)\n        )\n        return final_out\n\n\n# Copied from transformers.models.llama.modeling_llama.repeat_kv\ndef repeat_kv(hidden_states: torch.Tensor, n_rep: int) -> torch.Tensor:\n    \"\"\"\n    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,\n    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)\n    \"\"\"\n    batch, num_key_value_heads, slen, head_dim = hidden_states.shape\n    if n_rep == 1:\n        return hidden_states\n    hidden_states = hidden_states[:, :, None, :, :].expand(\n        batch, num_key_value_heads, n_rep, slen, head_dim\n    )\n    return hidden_states.reshape(batch, num_key_value_heads * n_rep, slen, head_dim)\n\n\n# Copied from transformers.models.llama.modeling_llama.LlamaAttention with Llama->DeepseekV2\nclass DeepseekV2Attention(nn.Module):\n    \"\"\"Multi-headed attention from 'Attention Is All You Need' paper\"\"\"\n\n    def __init__(self, config: DeepseekV2Config, layer_idx: Optional[int] = None):\n        super().__init__()\n        self.config = config\n        self.layer_idx = layer_idx\n        if layer_idx is None:\n            logger.warning_once(\n                f\"Instantiating {self.__class__.__name__} without passing `layer_idx` is not recommended and will \"\n                \"to errors during the forward call, if caching is used. Please make sure to provide a `layer_idx` \"\n                \"when creating this class.\"\n            )\n\n        self.attention_dropout = config.attention_dropout\n        self.hidden_size = config.hidden_size\n        self.num_heads = config.num_attention_heads\n\n        self.max_position_embeddings = config.max_position_embeddings\n        self.rope_theta = config.rope_theta\n        self.q_lora_rank = config.q_lora_rank\n        self.qk_rope_head_dim = config.qk_rope_head_dim\n        self.kv_lora_rank = config.kv_lora_rank\n        self.v_head_dim = config.v_head_dim\n        self.qk_nope_head_dim = config.qk_nope_head_dim\n        self.q_head_dim = config.qk_nope_head_dim + config.qk_rope_head_dim\n\n        self.is_causal = True\n\n        if self.q_lora_rank is None:\n            self.q_proj = nn.Linear(\n                self.hidden_size, self.num_heads * self.q_head_dim, bias=False\n            )\n        else:\n            self.q_a_proj = nn.Linear(\n                self.hidden_size, config.q_lora_rank, bias=config.attention_bias\n            )\n            self.q_a_layernorm = DeepseekV2RMSNorm(config.q_lora_rank)\n            self.q_b_proj = nn.Linear(\n                config.q_lora_rank, self.num_heads * self.q_head_dim, bias=False\n            )\n\n        self.kv_a_proj_with_mqa = nn.Linear(\n            self.hidden_size,\n            config.kv_lora_rank + config.qk_rope_head_dim,\n            bias=config.attention_bias,\n        )\n        self.kv_a_layernorm = DeepseekV2RMSNorm(config.kv_lora_rank)\n        self.kv_b_proj = nn.Linear(\n            config.kv_lora_rank,\n            self.num_heads\n            * (self.q_head_dim - self.qk_rope_head_dim + self.v_head_dim),\n            bias=False,\n        )\n\n        self.o_proj = nn.Linear(\n            self.num_heads * self.v_head_dim,\n            self.hidden_size,\n            bias=config.attention_bias,\n        )\n        self._init_rope()\n\n        self.softmax_scale = self.q_head_dim ** (-0.5)\n        if self.config.rope_scaling is not None:\n            mscale_all_dim = self.config.rope_scaling.get(\"mscale_all_dim\", 0)\n            scaling_factor = self.config.rope_scaling[\"factor\"]\n            if mscale_all_dim:\n                mscale = yarn_get_mscale(scaling_factor, mscale_all_dim)\n                self.softmax_scale = self.softmax_scale * mscale * mscale\n\n    def _init_rope(self):\n        if self.config.rope_scaling is None:\n            self.rotary_emb = DeepseekV2RotaryEmbedding(\n                self.qk_rope_head_dim,\n                max_position_embeddings=self.max_position_embeddings,\n                base=self.rope_theta,\n            )\n        else:\n            scaling_type = self.config.rope_scaling[\"type\"]\n            scaling_factor = self.config.rope_scaling[\"factor\"]\n            if scaling_type == \"linear\":\n                self.rotary_emb = DeepseekV2LinearScalingRotaryEmbedding(\n                    self.qk_rope_head_dim,\n                    max_position_embeddings=self.max_position_embeddings,\n                    scaling_factor=scaling_factor,\n                    base=self.rope_theta,\n                )\n            elif scaling_type == \"dynamic\":\n                self.rotary_emb = DeepseekV2DynamicNTKScalingRotaryEmbedding(\n                    self.qk_rope_head_dim,\n                    max_position_embeddings=self.max_position_embeddings,\n                    scaling_factor=scaling_factor,\n                    base=self.rope_theta,\n                )\n            elif scaling_type == \"yarn\":\n                kwargs = {\n                    key: self.config.rope_scaling[key]\n                    for key in [\n                        \"original_max_position_embeddings\",\n                        \"beta_fast\",\n                        \"beta_slow\",\n                        \"mscale\",\n                        \"mscale_all_dim\",\n                    ]\n                    if key in self.config.rope_scaling\n                }\n                self.rotary_emb = DeepseekV2YarnRotaryEmbedding(\n                    self.qk_rope_head_dim,\n                    max_position_embeddings=self.max_position_embeddings,\n                    scaling_factor=scaling_factor,\n                    base=self.rope_theta,\n                    **kwargs,\n                )\n            else:\n                raise ValueError(f\"Unknown RoPE scaling type {scaling_type}\")\n\n    def _shape(self, tensor: torch.Tensor, seq_len: int, bsz: int):\n        return (\n            tensor.view(bsz, seq_len, self.num_heads, self.v_head_dim)\n            .transpose(1, 2)\n            .contiguous()\n        )\n\n    def forward(\n        self,\n        hidden_states: torch.Tensor,\n        attention_mask: Optional[torch.Tensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        past_key_value: Optional[Cache] = None,\n        output_attentions: bool = False,\n        use_cache: bool = False,\n        **kwargs,\n    ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]:\n        if \"padding_mask\" in kwargs:\n            warnings.warn(\n                \"Passing `padding_mask` is deprecated and will be removed in v4.37. Please make sure use `attention_mask` instead.`\"\n            )\n        bsz, q_len, _ = hidden_states.size()\n\n        if self.q_lora_rank is None:\n            q = self.q_proj(hidden_states)\n        else:\n            q = self.q_b_proj(self.q_a_layernorm(self.q_a_proj(hidden_states)))\n        q = q.view(bsz, q_len, self.num_heads, self.q_head_dim).transpose(1, 2)\n        q_nope, q_pe = torch.split(\n            q, [self.qk_nope_head_dim, self.qk_rope_head_dim], dim=-1\n        )\n\n        compressed_kv = self.kv_a_proj_with_mqa(hidden_states)\n        compressed_kv, k_pe = torch.split(\n            compressed_kv, [self.kv_lora_rank, self.qk_rope_head_dim], dim=-1\n        )\n        compressed_kv = self.kv_a_layernorm(compressed_kv)\n        k_pe = k_pe.view(bsz, q_len, 1, self.qk_rope_head_dim).transpose(1, 2)\n\n        kv_seq_len = k_pe.shape[-2]\n        if past_key_value is not None:\n            if self.layer_idx is None:\n                raise ValueError(\n                    f\"The cache structure has changed since version v4.36. If you are using {self.__class__.__name__} \"\n                    \"for auto-regressive decoding with k/v caching, please make sure to initialize the attention class \"\n                    \"with a layer index.\"\n                )\n            kv_seq_len += past_key_value.get_usable_length(kv_seq_len, self.layer_idx)\n\n        cos, sin = self.rotary_emb(q_pe, seq_len=kv_seq_len)\n        q_pe, k_pe = apply_rotary_pos_emb(q_pe, k_pe, cos, sin, position_ids)\n\n        if past_key_value is not None:\n            cache_kwargs = {\"sin\": sin, \"cos\": cos}  # Specific to RoPE models\n            compressed_kv = compressed_kv.unsqueeze(1)\n            k_pe, compressed_kv = past_key_value.update(k_pe, compressed_kv, self.layer_idx, cache_kwargs)\n            compressed_kv = compressed_kv.squeeze(1)\n\n        kv_b_proj = self.kv_b_proj.weight.view(self.num_heads, -1, self.kv_lora_rank)\n        q_absorb = kv_b_proj[:, :self.qk_nope_head_dim, :]\n        out_absorb = kv_b_proj[:, self.qk_nope_head_dim:, :]\n\n        q_nope = torch.matmul(q_nope, q_absorb)\n        attn_weights = (torch.matmul(q_pe, k_pe.mT) +\n                        torch.matmul(q_nope, compressed_kv.unsqueeze(-3).mT)) * self.softmax_scale\n        if attn_weights.size() != (bsz, self.num_heads, q_len, kv_seq_len):\n            raise ValueError(\n                f\"Attention weights should be of size {(bsz, self.num_heads, q_len, kv_seq_len)}, but is\"\n                f\" {attn_weights.size()}\"\n            )\n        assert attention_mask is not None\n        if attention_mask is not None:\n            if attention_mask.size() != (bsz, 1, q_len, kv_seq_len):\n                raise ValueError(\n                    f\"Attention mask should be of size {(bsz, 1, q_len, kv_seq_len)}, but is {attention_mask.size()}\"\n                )\n            attn_weights = attn_weights + attention_mask\n\n        # upcast attention to fp32\n        attn_weights = nn.functional.softmax(\n            attn_weights, dim=-1, dtype=torch.float32\n        ).to(q_pe.dtype)\n        attn_weights = nn.functional.dropout(\n            attn_weights, p=self.attention_dropout, training=self.training\n        )\n        attn_output = torch.einsum('bhql,blc->bhqc', attn_weights, compressed_kv)\n\n        attn_output = torch.matmul(attn_output, out_absorb.mT)\n\n        if attn_output.size() != (bsz, self.num_heads, q_len, self.v_head_dim):\n            raise ValueError(\n                f\"`attn_output` should be of size {(bsz, self.num_heads, q_len, self.v_head_dim)}, but is\"\n                f\" {attn_output.size()}\"\n            )\n\n        attn_output = attn_output.transpose(1, 2).contiguous()\n\n        attn_output = attn_output.reshape(bsz, q_len, self.num_heads * self.v_head_dim)\n\n        attn_output = self.o_proj(attn_output)\n\n        if not output_attentions:\n            attn_weights = None\n\n        return attn_output, attn_weights, past_key_value\n\n\n# Copied from transformers.models.llama.modeling_llama.LlamaFlashAttention2 with Llama->DeepseekV2\nclass DeepseekV2FlashAttention2(DeepseekV2Attention):\n    \"\"\"\n    DeepseekV2 flash attention module. This module inherits from `DeepseekV2Attention` as the weights of the module stays\n    untouched. The only required change would be on the forward pass where it needs to correctly call the public API of\n    flash attention and deal with padding tokens in case the input contains any of them.\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        # TODO: Should be removed once Flash Attention for RoCm is bumped to 2.1.\n        # flash_attn<2.1 generates top-left aligned causal mask, while what is needed here is bottom-right alignement, that was made default for flash_attn>=2.1. This attribute is used to handle this difference. Reference: https://github.com/Dao-AILab/flash-attention/releases/tag/v2.1.0.\n        # Beware that with flash_attn<2.1, using q_seqlen != k_seqlen (except for the case q_seqlen == 1) produces a wrong mask (top-left).\n        self._flash_attn_uses_top_left_mask = not is_flash_attn_greater_or_equal_2_10()\n\n    def forward(\n        self,\n        hidden_states: torch.Tensor,\n        attention_mask: Optional[torch.LongTensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        past_key_value: Optional[Cache] = None,\n        output_attentions: bool = False,\n        use_cache: bool = False,\n        **kwargs,\n    ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]:\n        # DeepseekV2FlashAttention2 attention does not support output_attentions\n        if \"padding_mask\" in kwargs:\n            warnings.warn(\n                \"Passing `padding_mask` is deprecated and will be removed in v4.37. Please make sure use `attention_mask` instead.`\"\n            )\n\n            # overwrite attention_mask with padding_mask\n            attention_mask = kwargs.pop(\"padding_mask\")\n\n        output_attentions = False\n\n        bsz, q_len, _ = hidden_states.size()\n\n        if self.q_lora_rank is None:\n            q = self.q_proj(hidden_states)\n        else:\n            q = self.q_b_proj(self.q_a_layernorm(self.q_a_proj(hidden_states)))\n        q = q.view(bsz, q_len, self.num_heads, self.q_head_dim).transpose(1, 2)\n        q_nope, q_pe = torch.split(\n            q, [self.qk_nope_head_dim, self.qk_rope_head_dim], dim=-1\n        )\n\n        # Flash attention requires the input to have the shape\n        # batch_size x seq_length x head_dim x hidden_dim\n        # therefore we just need to keep the original shape\n        compressed_kv = self.kv_a_proj_with_mqa(hidden_states)\n        compressed_kv, k_pe = torch.split(\n            compressed_kv, [self.kv_lora_rank, self.qk_rope_head_dim], dim=-1\n        )\n        k_pe = k_pe.view(bsz, q_len, 1, self.qk_rope_head_dim).transpose(1, 2)\n        kv = (\n            self.kv_b_proj(self.kv_a_layernorm(compressed_kv))\n            .view(bsz, q_len, self.num_heads, self.qk_nope_head_dim + self.v_head_dim)\n            .transpose(1, 2)\n        )\n\n        k_nope, value_states = torch.split(\n            kv, [self.qk_nope_head_dim, self.v_head_dim], dim=-1\n        )\n        kv_seq_len = value_states.shape[-2]\n\n        kv_seq_len = value_states.shape[-2]\n        if past_key_value is not None:\n            kv_seq_len += past_key_value.get_usable_length(kv_seq_len, self.layer_idx)\n\n        cos, sin = self.rotary_emb(value_states, seq_len=kv_seq_len)\n        q_pe, k_pe = apply_rotary_pos_emb(q_pe, k_pe, cos, sin, position_ids)\n\n        query_states = k_pe.new_empty(bsz, self.num_heads, q_len, self.q_head_dim)\n        query_states[:, :, :, : self.qk_nope_head_dim] = q_nope\n        query_states[:, :, :, self.qk_nope_head_dim :] = q_pe\n\n        key_states = k_pe.new_empty(bsz, self.num_heads, q_len, self.q_head_dim)\n        key_states[:, :, :, : self.qk_nope_head_dim] = k_nope\n        key_states[:, :, :, self.qk_nope_head_dim :] = k_pe\n\n        if self.q_head_dim != self.v_head_dim:\n            value_states = F.pad(value_states, [0, self.q_head_dim - self.v_head_dim])\n\n        # TODO: support compressed_kv for kv_cache (instead of key_states, value_states) in flash_attention version\n        if past_key_value is not None:\n            cache_kwargs = {\"sin\": sin, \"cos\": cos}  # Specific to RoPE models\n            key_states, value_states = past_key_value.update(\n                key_states, value_states, self.layer_idx, cache_kwargs\n            )\n\n        # TODO: These transpose are quite inefficient but Flash Attention requires the layout [batch_size, sequence_length, num_heads, head_dim]. We would need to refactor the KV cache\n        # to be able to avoid many of these transpose/reshape/view.\n        query_states = query_states.transpose(1, 2)\n        key_states = key_states.transpose(1, 2)\n        value_states = value_states.transpose(1, 2)\n\n        dropout_rate = self.attention_dropout if self.training else 0.0\n\n        # In PEFT, usually we cast the layer norms in float32 for training stability reasons\n        # therefore the input hidden states gets silently casted in float32. Hence, we need\n        # cast them back in the correct dtype just to be sure everything works as expected.\n        # This might slowdown training & inference so it is recommended to not cast the LayerNorms\n        # in fp32. (DeepseekV2RMSNorm handles it correctly)\n\n        input_dtype = query_states.dtype\n        if input_dtype == torch.float32:\n            # Handle the case where the model is quantized\n            if hasattr(self.config, \"_pre_quantization_dtype\"):\n                target_dtype = self.config._pre_quantization_dtype\n            elif torch.is_autocast_enabled():\n                target_dtype = torch.get_autocast_gpu_dtype()\n            else:\n                target_dtype = (\n                    self.q_proj.weight.dtype\n                    if self.q_lora_rank is None\n                    else self.q_a_proj.weight.dtype\n                )\n\n            logger.warning_once(\n                f\"The input hidden states seems to be silently casted in float32, this might be related to\"\n                f\" the fact you have upcasted embedding or layer norm layers in float32. We will cast back the input in\"\n                f\" {target_dtype}.\"\n            )\n\n            query_states = query_states.to(target_dtype)\n            key_states = key_states.to(target_dtype)\n            value_states = value_states.to(target_dtype)\n\n        attn_output = self._flash_attention_forward(\n            query_states,\n            key_states,\n            value_states,\n            attention_mask,\n            q_len,\n            dropout=dropout_rate,\n            softmax_scale=self.softmax_scale,\n        )\n        if self.q_head_dim != self.v_head_dim:\n            attn_output = attn_output[:, :, :, : self.v_head_dim]\n\n        attn_output = attn_output.reshape(\n            bsz, q_len, self.num_heads * self.v_head_dim\n        ).contiguous()\n        attn_output = self.o_proj(attn_output)\n\n        if not output_attentions:\n            attn_weights = None\n\n        return attn_output, attn_weights, past_key_value\n\n    def _flash_attention_forward(\n        self,\n        query_states,\n        key_states,\n        value_states,\n        attention_mask,\n        query_length,\n        dropout=0.0,\n        softmax_scale=None,\n    ):\n        \"\"\"\n        Calls the forward method of Flash Attention - if the input hidden states contain at least one padding token\n        first unpad the input, then computes the attention scores and pad the final attention scores.\n\n        Args:\n            query_states (`torch.Tensor`):\n                Input query states to be passed to Flash Attention API\n            key_states (`torch.Tensor`):\n                Input key states to be passed to Flash Attention API\n            value_states (`torch.Tensor`):\n                Input value states to be passed to Flash Attention API\n            attention_mask (`torch.Tensor`):\n                The padding mask - corresponds to a tensor of size `(batch_size, seq_len)` where 0 stands for the\n                position of padding tokens and 1 for the position of non-padding tokens.\n            dropout (`int`, *optional*):\n                Attention dropout\n            softmax_scale (`float`, *optional*):\n                The scaling of QK^T before applying softmax. Default to 1 / sqrt(head_dim)\n        \"\"\"\n        if not self._flash_attn_uses_top_left_mask:\n            causal = self.is_causal\n        else:\n            # TODO: Remove the `query_length != 1` check once Flash Attention for RoCm is bumped to 2.1. For details, please see the comment in DeepseekV2FlashAttention2 __init__.\n            causal = self.is_causal and query_length != 1\n\n        # Contains at least one padding token in the sequence\n        if attention_mask is not None:\n            batch_size = query_states.shape[0]\n            (\n                query_states,\n                key_states,\n                value_states,\n                indices_q,\n                cu_seq_lens,\n                max_seq_lens,\n            ) = self._upad_input(\n                query_states, key_states, value_states, attention_mask, query_length\n            )\n\n            cu_seqlens_q, cu_seqlens_k = cu_seq_lens\n            max_seqlen_in_batch_q, max_seqlen_in_batch_k = max_seq_lens\n\n            attn_output_unpad = flash_attn_varlen_func(\n                query_states,\n                key_states,\n                value_states,\n                cu_seqlens_q=cu_seqlens_q,\n                cu_seqlens_k=cu_seqlens_k,\n                max_seqlen_q=max_seqlen_in_batch_q,\n                max_seqlen_k=max_seqlen_in_batch_k,\n                dropout_p=dropout,\n                softmax_scale=softmax_scale,\n                causal=causal,\n            )\n\n            attn_output = pad_input(\n                attn_output_unpad, indices_q, batch_size, query_length\n            )\n        else:\n            attn_output = flash_attn_func(\n                query_states,\n                key_states,\n                value_states,\n                dropout,\n                softmax_scale=softmax_scale,\n                causal=causal,\n            )\n\n        return attn_output\n\n    def _upad_input(\n        self, query_layer, key_layer, value_layer, attention_mask, query_length\n    ):\n        indices_k, cu_seqlens_k, max_seqlen_in_batch_k = _get_unpad_data(attention_mask)\n        batch_size, kv_seq_len, num_key_value_heads, head_dim = key_layer.shape\n\n        key_layer = index_first_axis(\n            key_layer.reshape(batch_size * kv_seq_len, num_key_value_heads, head_dim),\n            indices_k,\n        )\n        value_layer = index_first_axis(\n            value_layer.reshape(batch_size * kv_seq_len, num_key_value_heads, head_dim),\n            indices_k,\n        )\n        if query_length == kv_seq_len:\n            query_layer = index_first_axis(\n                query_layer.reshape(batch_size * kv_seq_len, self.num_heads, head_dim),\n                indices_k,\n            )\n            cu_seqlens_q = cu_seqlens_k\n            max_seqlen_in_batch_q = max_seqlen_in_batch_k\n            indices_q = indices_k\n        elif query_length == 1:\n            max_seqlen_in_batch_q = 1\n            cu_seqlens_q = torch.arange(\n                batch_size + 1, dtype=torch.int32, device=query_layer.device\n            )  # There is a memcpy here, that is very bad.\n            indices_q = cu_seqlens_q[:-1]\n            query_layer = query_layer.squeeze(1)\n        else:\n            # The -q_len: slice assumes left padding.\n            attention_mask = attention_mask[:, -query_length:]\n            query_layer, indices_q, cu_seqlens_q, max_seqlen_in_batch_q = unpad_input(\n                query_layer, attention_mask\n            )\n\n        return (\n            query_layer,\n            key_layer,\n            value_layer,\n            indices_q,\n            (cu_seqlens_q, cu_seqlens_k),\n            (max_seqlen_in_batch_q, max_seqlen_in_batch_k),\n        )\n\n\nATTENTION_CLASSES = {\n    \"eager\": DeepseekV2Attention,\n    \"flash_attention_2\": DeepseekV2FlashAttention2,\n\n    \"mla_eager\": DeepseekV2Attention,\n    \"mla_flash_attention_2\": DeepseekV2FlashAttention2,\n\n    \"mha_eager\": LlamaAttention,\n    \"mha_flash_attention_2\": LlamaFlashAttention2\n}\n\n\nclass DeepseekV2DecoderLayer(nn.Module):\n    def __init__(self, config: DeepseekV2Config, layer_idx: int):\n        super().__init__()\n        self.hidden_size = config.hidden_size\n\n        if config.use_mla:\n            attn_implementation = \"mla_\" + config._attn_implementation\n        else:\n            attn_implementation = \"mha_\" + config._attn_implementation\n\n        self.self_attn = ATTENTION_CLASSES[attn_implementation](\n            config=config, layer_idx=layer_idx\n        )\n\n        self.mlp = (\n            DeepseekV2MoE(config)\n            if (\n                config.n_routed_experts is not None\n                and layer_idx >= config.first_k_dense_replace\n                and layer_idx % config.moe_layer_freq == 0\n            )\n            else DeepseekV2MLP(config)\n        )\n        self.input_layernorm = DeepseekV2RMSNorm(\n            config.hidden_size, eps=config.rms_norm_eps\n        )\n        self.post_attention_layernorm = DeepseekV2RMSNorm(\n            config.hidden_size, eps=config.rms_norm_eps\n        )\n\n    def forward(\n        self,\n        hidden_states: torch.Tensor,\n        attention_mask: Optional[torch.Tensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        past_key_value: Optional[Tuple[torch.Tensor]] = None,\n        output_attentions: Optional[bool] = False,\n        use_cache: Optional[bool] = False,\n        **kwargs,\n    ) -> Tuple[\n        torch.FloatTensor, Optional[Tuple[torch.FloatTensor, torch.FloatTensor]]\n    ]:\n        \"\"\"\n        Args:\n            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`\n            attention_mask (`torch.FloatTensor`, *optional*):\n                attention mask of size `(batch_size, sequence_length)` if flash attention is used or `(batch_size, 1,\n                query_sequence_length, key_sequence_length)` if default attention is used.\n            output_attentions (`bool`, *optional*):\n                Whether or not to return the attentions tensors of all attention layers. See `attentions` under\n                returned tensors for more detail.\n            use_cache (`bool`, *optional*):\n                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding\n                (see `past_key_values`).\n            past_key_value (`Tuple(torch.FloatTensor)`, *optional*): cached past key and value projection states\n        \"\"\"\n        if \"padding_mask\" in kwargs:\n            warnings.warn(\n                \"Passing `padding_mask` is deprecated and will be removed in v4.37. Please make sure use `attention_mask` instead.`\"\n            )\n        residual = hidden_states\n\n        hidden_states = self.input_layernorm(hidden_states)\n\n        # Self Attention\n        hidden_states, self_attn_weights, present_key_value = self.self_attn(\n            hidden_states=hidden_states,\n            attention_mask=attention_mask,\n            position_ids=position_ids,\n            past_key_value=past_key_value,\n            output_attentions=output_attentions,\n            use_cache=use_cache,\n            **kwargs,\n        )\n        hidden_states = residual + hidden_states\n\n        # Fully Connected\n        residual = hidden_states\n        hidden_states = self.post_attention_layernorm(hidden_states)\n        hidden_states = self.mlp(hidden_states)\n        hidden_states = residual + hidden_states\n\n        outputs = (hidden_states,)\n\n        if output_attentions:\n            outputs += (self_attn_weights,)\n\n        if use_cache:\n            outputs += (present_key_value,)\n\n        return outputs\n\n\nDeepseekV2_START_DOCSTRING = r\"\"\"\n    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the\n    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads\n    etc.)\n\n    This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.\n    Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage\n    and behavior.\n\n    Parameters:\n        config ([`DeepseekV2Config`]):\n            Model configuration class with all the parameters of the model. Initializing with a config file does not\n            load the weights associated with the model, only the configuration. Check out the\n            [`~PreTrainedModel.from_pretrained`] method to load the model weights.\n\"\"\"\n\n\n@add_start_docstrings(\n    \"The bare DeepseekV2 Model outputting raw hidden-states without any specific head on top.\",\n    DeepseekV2_START_DOCSTRING,\n)\nclass DeepseekV2PreTrainedModel(PreTrainedModel):\n    config_class = DeepseekV2Config\n    base_model_prefix = \"model\"\n    supports_gradient_checkpointing = True\n    _no_split_modules = [\"DeepseekV2DecoderLayer\"]\n    _skip_keys_device_placement = \"past_key_values\"\n    _supports_flash_attn_2 = True\n    _supports_cache_class = True\n\n    def _init_weights(self, module):\n        std = self.config.initializer_range\n        if isinstance(module, nn.Linear):\n            module.weight.data.normal_(mean=0.0, std=std)\n            if module.bias is not None:\n                module.bias.data.zero_()\n        elif isinstance(module, nn.Embedding):\n            module.weight.data.normal_(mean=0.0, std=std)\n            if module.padding_idx is not None:\n                module.weight.data[module.padding_idx].zero_()\n\n\nDeepseekV2_INPUTS_DOCSTRING = r\"\"\"\n    Args:\n        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):\n            Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide\n            it.\n\n            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and\n            [`PreTrainedTokenizer.__call__`] for details.\n\n            [What are input IDs?](../glossary#input-ids)\n        attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):\n            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:\n\n            - 1 for tokens that are **not masked**,\n            - 0 for tokens that are **masked**.\n\n            [What are attention masks?](../glossary#attention-mask)\n\n            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and\n            [`PreTrainedTokenizer.__call__`] for details.\n\n            If `past_key_values` is used, optionally only the last `input_ids` have to be input (see\n            `past_key_values`).\n\n            If you want to change padding behavior, you should read [`modeling_opt._prepare_decoder_attention_mask`]\n            and modify to your needs. See diagram 1 in [the paper](https://arxiv.org/abs/1910.13461) for more\n            information on the default strategy.\n\n            - 1 indicates the head is **not masked**,\n            - 0 indicates the head is **masked**.\n        position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):\n            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,\n            config.n_positions - 1]`.\n\n            [What are position IDs?](../glossary#position-ids)\n        past_key_values (`Cache` or `tuple(tuple(torch.FloatTensor))`, *optional*):\n            Pre-computed hidden-states (key and values in the self-attention blocks and in the cross-attention\n            blocks) that can be used to speed up sequential decoding. This typically consists in the `past_key_values`\n            returned by the model at a previous stage of decoding, when `use_cache=True` or `config.use_cache=True`.\n\n            Two formats are allowed:\n            - a [`~cache_utils.Cache`] instance;\n            - Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of\n            shape `(batch_size, num_heads, sequence_length, embed_size_per_head)`). This is also known as the legacy\n            cache format.\n\n            The model will output the same cache format that is fed as input. If no `past_key_values` are passed, the\n            legacy cache format will be returned.\n\n            If `past_key_values` are used, the user can optionally input only the last `input_ids` (those that don't\n            have their past key value states given to this model) of shape `(batch_size, 1)` instead of all `input_ids`\n            of shape `(batch_size, sequence_length)`.\n        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):\n            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This\n            is useful if you want more control over how to convert `input_ids` indices into associated vectors than the\n            model's internal embedding lookup matrix.\n        use_cache (`bool`, *optional*):\n            If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see\n            `past_key_values`).\n        output_attentions (`bool`, *optional*):\n            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned\n            tensors for more detail.\n        output_hidden_states (`bool`, *optional*):\n            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for\n            more detail.\n        return_dict (`bool`, *optional*):\n            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.\n\"\"\"\n\n\n@add_start_docstrings(\n    \"The bare DeepseekV2 Model outputting raw hidden-states without any specific head on top.\",\n    DeepseekV2_START_DOCSTRING,\n)\nclass DeepseekV2Model(DeepseekV2PreTrainedModel):\n    \"\"\"\n    Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`DeepseekV2DecoderLayer`]\n\n    Args:\n        config: DeepseekV2Config\n    \"\"\"\n\n    def __init__(self, config: DeepseekV2Config):\n        super().__init__(config)\n        self.padding_idx = config.pad_token_id\n        self.vocab_size = config.vocab_size\n\n        self.embed_tokens = nn.Embedding(\n            config.vocab_size, config.hidden_size, self.padding_idx\n        )\n        self.layers = nn.ModuleList(\n            [\n                DeepseekV2DecoderLayer(config, layer_idx)\n                for layer_idx in range(config.num_hidden_layers)\n            ]\n        )\n        self._use_flash_attention_2 = config._attn_implementation == \"flash_attention_2\"\n        self.norm = DeepseekV2RMSNorm(config.hidden_size, eps=config.rms_norm_eps)\n\n        self.gradient_checkpointing = False\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    def get_input_embeddings(self):\n        return self.embed_tokens\n\n    def set_input_embeddings(self, value):\n        self.embed_tokens = value\n\n    @add_start_docstrings_to_model_forward(DeepseekV2_INPUTS_DOCSTRING)\n    def forward(\n        self,\n        input_ids: torch.LongTensor = None,\n        attention_mask: Optional[torch.Tensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        past_key_values: Optional[List[torch.FloatTensor]] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        use_cache: Optional[bool] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n        cache_position: Optional[torch.LongTensor] = None\n    ) -> Union[Tuple, BaseModelOutputWithPast]:\n        output_attentions = (\n            output_attentions\n            if output_attentions is not None\n            else self.config.output_attentions\n        )\n        output_hidden_states = (\n            output_hidden_states\n            if output_hidden_states is not None\n            else self.config.output_hidden_states\n        )\n        use_cache = use_cache if use_cache is not None else self.config.use_cache\n\n        return_dict = (\n            return_dict if return_dict is not None else self.config.use_return_dict\n        )\n\n        # retrieve input_ids and inputs_embeds\n        if input_ids is not None and inputs_embeds is not None:\n            raise ValueError(\n                \"You cannot specify both input_ids and inputs_embeds at the same time\"\n            )\n        elif input_ids is not None:\n            batch_size, seq_length = input_ids.shape[:2]\n        elif inputs_embeds is not None:\n            batch_size, seq_length = inputs_embeds.shape[:2]\n        else:\n            raise ValueError(\"You have to specify either input_ids or inputs_embeds\")\n\n        if self.gradient_checkpointing and self.training:\n            if use_cache:\n                logger.warning_once(\n                    \"`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`transformers.\"\n                )\n                use_cache = False\n\n        past_key_values_length = 0\n        if use_cache:\n            use_legacy_cache = not isinstance(past_key_values, Cache)\n            if use_legacy_cache:\n                past_key_values = DynamicCache.from_legacy_cache(past_key_values)\n            past_key_values_length = past_key_values.get_usable_length(seq_length)\n\n        if position_ids is None:\n            device = input_ids.device if input_ids is not None else inputs_embeds.device\n            position_ids = torch.arange(\n                past_key_values_length,\n                seq_length + past_key_values_length,\n                dtype=torch.long,\n                device=device,\n            )\n            position_ids = position_ids.unsqueeze(0)\n\n        if inputs_embeds is None:\n            inputs_embeds = self.embed_tokens(input_ids)\n\n        if self._use_flash_attention_2:\n            # 2d mask is passed through the layers\n            attention_mask = (\n                attention_mask\n                if (attention_mask is not None and 0 in attention_mask)\n                else None\n            )\n        else:\n            # 4d mask is passed through the layers\n            attention_mask = _prepare_4d_causal_attention_mask(\n                attention_mask,\n                (batch_size, seq_length),\n                inputs_embeds,\n                past_key_values_length,\n            )\n\n        # embed positions\n        hidden_states = inputs_embeds\n\n        # decoder layers\n        all_hidden_states = () if output_hidden_states else None\n        all_self_attns = () if output_attentions else None\n        next_decoder_cache = None\n\n        for decoder_layer in self.layers:\n            if output_hidden_states:\n                all_hidden_states += (hidden_states,)\n\n            if self.gradient_checkpointing and self.training:\n                layer_outputs = self._gradient_checkpointing_func(\n                    decoder_layer.__call__,\n                    hidden_states,\n                    attention_mask,\n                    position_ids,\n                    past_key_values,\n                    output_attentions,\n                    use_cache,\n                )\n            else:\n                layer_outputs = decoder_layer(\n                    hidden_states,\n                    attention_mask=attention_mask,\n                    position_ids=position_ids,\n                    past_key_value=past_key_values,\n                    output_attentions=output_attentions,\n                    use_cache=use_cache,\n                )\n\n            hidden_states = layer_outputs[0]\n\n            if use_cache:\n                next_decoder_cache = layer_outputs[2 if output_attentions else 1]\n\n            if output_attentions:\n                all_self_attns += (layer_outputs[1],)\n\n        hidden_states = self.norm(hidden_states)\n\n        # add hidden states from the last decoder layer\n        if output_hidden_states:\n            all_hidden_states += (hidden_states,)\n\n        next_cache = None\n        if use_cache:\n            next_cache = (\n                next_decoder_cache.to_legacy_cache()\n                if use_legacy_cache\n                else next_decoder_cache\n            )\n        if not return_dict:\n            return tuple(\n                v\n                for v in [hidden_states, next_cache, all_hidden_states, all_self_attns]\n                if v is not None\n            )\n        return BaseModelOutputWithPast(\n            last_hidden_state=hidden_states,\n            past_key_values=next_cache,\n            hidden_states=all_hidden_states,\n            attentions=all_self_attns,\n        )\n\n\nclass DeepseekV2ForCausalLM(DeepseekV2PreTrainedModel):\n    _tied_weights_keys = [\"lm_head.weight\"]\n\n    def __init__(self, config):\n        super().__init__(config)\n        self.model = DeepseekV2Model(config)\n        self.vocab_size = config.vocab_size\n        self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False)\n\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    def get_input_embeddings(self):\n        return self.model.embed_tokens\n\n    def set_input_embeddings(self, value):\n        self.model.embed_tokens = value\n\n    def get_output_embeddings(self):\n        return self.lm_head\n\n    def set_output_embeddings(self, new_embeddings):\n        self.lm_head = new_embeddings\n\n    def set_decoder(self, decoder):\n        self.model = decoder\n\n    def get_decoder(self):\n        return self.model\n\n    @add_start_docstrings_to_model_forward(DeepseekV2_INPUTS_DOCSTRING)\n    @replace_return_docstrings(\n        output_type=CausalLMOutputWithPast, config_class=_CONFIG_FOR_DOC\n    )\n    def forward(\n            self,\n            input_ids: torch.LongTensor = None,\n            attention_mask: Optional[torch.Tensor] = None,\n            position_ids: Optional[torch.LongTensor] = None,\n            past_key_values: Optional[List[torch.FloatTensor]] = None,\n            inputs_embeds: Optional[torch.FloatTensor] = None,\n            labels: Optional[torch.LongTensor] = None,\n            use_cache: Optional[bool] = None,\n            output_attentions: Optional[bool] = None,\n            output_hidden_states: Optional[bool] = None,\n            return_dict: Optional[bool] = None,\n            cache_position: Optional[torch.LongTensor] = None\n    ) -> Union[Tuple, CausalLMOutputWithPast]:\n        r\"\"\"\n        Args:\n            labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):\n                Labels for computing the masked language modeling loss. Indices should either be in `[0, transformers.,\n                config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored\n                (masked), the loss is only computed for the tokens with labels in `[0, transformers., config.vocab_size]`.\n\n        Returns:\n\n        Example:\n\n        ```python\n        >>> from transformers import AutoTokenizer, DeepseekV2ForCausalLM\n\n        >>> model = DeepseekV2ForCausalLM.from_pretrained(PATH_TO_CONVERTED_WEIGHTS)\n        >>> tokenizer = AutoTokenizer.from_pretrained(PATH_TO_CONVERTED_TOKENIZER)\n\n        >>> prompt = \"Hey, are you conscious? Can you talk to me?\"\n        >>> inputs = tokenizer(prompt, return_tensors=\"pt\")\n\n        >>> # Generate\n        >>> generate_ids = model.generate(inputs.input_ids, max_length=30)\n        >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]\n        \"Hey, are you conscious? Can you talk to me?\\nI'm not conscious, but I can talk to you.\"\n        ```\"\"\"\n        output_attentions = (\n            output_attentions\n            if output_attentions is not None\n            else self.config.output_attentions\n        )\n        output_hidden_states = (\n            output_hidden_states\n            if output_hidden_states is not None\n            else self.config.output_hidden_states\n        )\n        return_dict = (\n            return_dict if return_dict is not None else self.config.use_return_dict\n        )\n\n        # decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn)\n        outputs = self.model(\n            input_ids=input_ids,\n            attention_mask=attention_mask,\n            position_ids=position_ids,\n            past_key_values=past_key_values,\n            inputs_embeds=inputs_embeds,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n            cache_position=cache_position\n        )\n\n        hidden_states = outputs[0]\n        logits = self.lm_head(hidden_states)\n        logits = logits.float()\n\n        loss = None\n        if labels is not None:\n            # Shift so that tokens < n predict n\n            shift_logits = logits[..., :-1, :].contiguous()\n            shift_labels = labels[..., 1:].contiguous()\n            # Flatten the tokens\n            loss_fct = CrossEntropyLoss()\n            shift_logits = shift_logits.view(-1, self.config.vocab_size)\n            shift_labels = shift_labels.view(-1)\n            # Enable model parallelism\n            shift_labels = shift_labels.to(shift_logits.device)\n            loss = loss_fct(shift_logits, shift_labels)\n\n        if not return_dict:\n            output = (logits,) + outputs[1:]\n            return (loss,) + output if loss is not None else output\n\n        return CausalLMOutputWithPast(\n            loss=loss,\n            logits=logits,\n            past_key_values=outputs.past_key_values,\n            hidden_states=outputs.hidden_states,\n            attentions=outputs.attentions,\n        )\n\n    def prepare_inputs_for_generation(\n            self,\n            input_ids,\n            past_key_values=None,\n            attention_mask=None,\n            inputs_embeds=None,\n            **kwargs,\n    ):\n        past_length = 0\n        if past_key_values is not None:\n            if isinstance(past_key_values, Cache):\n                cache_length = past_key_values.get_seq_length()\n                past_length = past_key_values.seen_tokens\n                max_cache_length = past_key_values.get_max_length()\n            else:\n                cache_length = past_length = past_key_values[0][0].shape[2]\n                max_cache_length = None\n\n            # Keep only the unprocessed tokens:\n            # 1 - If the length of the attention_mask exceeds the length of input_ids, then we are in a setting where\n            # some of the inputs are exclusively passed as part of the cache (e.g. when passing input_embeds as\n            # input)\n            if attention_mask is not None and attention_mask.shape[1] > input_ids.shape[1]:\n                input_ids = input_ids[:, -(attention_mask.shape[1] - past_length):]\n            # 2 - If the past_length is smaller than input_ids', then input_ids holds all input tokens. We can discard\n            # input_ids based on the past_length.\n            elif past_length < input_ids.shape[1]:\n                input_ids = input_ids[:, past_length:]\n            # 3 - Otherwise (past_length >= input_ids.shape[1]), let's assume input_ids only has unprocessed tokens.\n\n            # If we are about to go beyond the maximum cache length, we need to crop the input attention mask.\n            if (\n                    max_cache_length is not None\n                    and attention_mask is not None\n                    and cache_length + input_ids.shape[1] > max_cache_length\n            ):\n                attention_mask = attention_mask[:, -max_cache_length:]\n\n        position_ids = kwargs.get(\"position_ids\", None)\n        if attention_mask is not None and position_ids is None:\n            # create position_ids on the fly for batch generation\n            position_ids = attention_mask.long().cumsum(-1) - 1\n            position_ids.masked_fill_(attention_mask == 0, 1)\n            if past_key_values:\n                position_ids = position_ids[:, -input_ids.shape[1]:]\n\n        if self.generation_config.cache_implementation == \"static\":\n            # generation with static cache\n            cache_position = kwargs.get(\"cache_position\", None)\n            if cache_position is None:\n                past_length = 0\n            else:\n                past_length = cache_position[-1] + 1\n            input_ids = input_ids[:, past_length:]\n            position_ids = position_ids[:, past_length:]\n\n        # TODO @gante we should only keep a `cache_position` in generate, and do +=1.\n        # same goes for position ids. Could also help with continued generation.\n        cache_position = torch.arange(past_length, past_length + position_ids.shape[-1], device=position_ids.device)\n\n        # if `inputs_embeds` are passed, we only want to use them in the 1st generation step\n        if inputs_embeds is not None and past_key_values is None:\n            model_inputs = {\"inputs_embeds\": inputs_embeds}\n        else:\n            # The `contiguous()` here is necessary to have a static stride during decoding. torchdynamo otherwise\n            # recompiles graphs as the stride of the inputs is a guard. Ref: https://github.com/huggingface/transformers/pull/29114\n            # TODO: use `next_tokens` directly instead.\n            model_inputs = {\"input_ids\": input_ids.contiguous()}\n\n        model_inputs.update(\n            {\n                \"position_ids\": position_ids.contiguous(),\n                \"cache_position\": cache_position,\n                \"past_key_values\": past_key_values,\n                \"use_cache\": kwargs.get(\"use_cache\"),\n                \"attention_mask\": attention_mask,\n            }\n        )\n        return model_inputs\n\n    @staticmethod\n    def _reorder_cache(past_key_values, beam_idx):\n        reordered_past = ()\n        for layer_past in past_key_values:\n            reordered_past += (\n                tuple(\n                    past_state.index_select(0, beam_idx.to(past_state.device))\n                    for past_state in layer_past\n                ),\n            )\n        return reordered_past\n\n\n@add_start_docstrings(\n    \"\"\"\n    The DeepseekV2 Model transformer with a sequence classification head on top (linear layer).\n\n    [`DeepseekV2ForSequenceClassification`] uses the last token in order to do the classification, as other causal models\n    (e.g. GPT-2) do.\n\n    Since it does classification on the last token, it requires to know the position of the last token. If a\n    `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in each row. If\n    no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot guess the\n    padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last value in\n    each row of the batch).\n    \"\"\",\n    DeepseekV2_START_DOCSTRING,\n)\nclass DeepseekV2ForSequenceClassification(DeepseekV2PreTrainedModel):\n    def __init__(self, config):\n        super().__init__(config)\n        self.num_labels = config.num_labels\n        self.model = DeepseekV2Model(config)\n        self.score = nn.Linear(config.hidden_size, self.num_labels, bias=False)\n\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    def get_input_embeddings(self):\n        return self.model.embed_tokens\n\n    def set_input_embeddings(self, value):\n        self.model.embed_tokens = value\n\n    @add_start_docstrings_to_model_forward(DeepseekV2_INPUTS_DOCSTRING)\n    def forward(\n            self,\n            input_ids: torch.LongTensor = None,\n            attention_mask: Optional[torch.Tensor] = None,\n            position_ids: Optional[torch.LongTensor] = None,\n            past_key_values: Optional[List[torch.FloatTensor]] = None,\n            inputs_embeds: Optional[torch.FloatTensor] = None,\n            labels: Optional[torch.LongTensor] = None,\n            use_cache: Optional[bool] = None,\n            output_attentions: Optional[bool] = None,\n            output_hidden_states: Optional[bool] = None,\n            return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, SequenceClassifierOutputWithPast]:\n        r\"\"\"\n        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n            Labels for computing the sequence classification/regression loss. Indices should be in `[0, transformers.,\n            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If\n            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).\n        \"\"\"\n        return_dict = (\n            return_dict if return_dict is not None else self.config.use_return_dict\n        )\n\n        transformer_outputs = self.model(\n            input_ids,\n            attention_mask=attention_mask,\n            position_ids=position_ids,\n            past_key_values=past_key_values,\n            inputs_embeds=inputs_embeds,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n        hidden_states = transformer_outputs[0]\n        logits = self.score(hidden_states)\n\n        if input_ids is not None:\n            batch_size = input_ids.shape[0]\n        else:\n            batch_size = inputs_embeds.shape[0]\n\n        if self.config.pad_token_id is None and batch_size != 1:\n            raise ValueError(\n                \"Cannot handle batch sizes > 1 if no padding token is defined.\"\n            )\n        if self.config.pad_token_id is None:\n            sequence_lengths = -1\n        else:\n            if input_ids is not None:\n                sequence_lengths = (\n                        torch.eq(input_ids, self.config.pad_token_id).int().argmax(-1) - 1\n                ).to(logits.device)\n            else:\n                sequence_lengths = -1\n\n        pooled_logits = logits[\n            torch.arange(batch_size, device=logits.device), sequence_lengths\n        ]\n\n        loss = None\n        if labels is not None:\n            labels = labels.to(logits.device)\n            if self.config.problem_type is None:\n                if self.num_labels == 1:\n                    self.config.problem_type = \"regression\"\n                elif self.num_labels > 1 and (\n                        labels.dtype == torch.long or labels.dtype == torch.int\n                ):\n                    self.config.problem_type = \"single_label_classification\"\n                else:\n                    self.config.problem_type = \"multi_label_classification\"\n\n            if self.config.problem_type == \"regression\":\n                loss_fct = MSELoss()\n                if self.num_labels == 1:\n                    loss = loss_fct(pooled_logits.squeeze(), labels.squeeze())\n                else:\n                    loss = loss_fct(pooled_logits, labels)\n            elif self.config.problem_type == \"single_label_classification\":\n                loss_fct = CrossEntropyLoss()\n                loss = loss_fct(\n                    pooled_logits.view(-1, self.num_labels), labels.view(-1)\n                )\n            elif self.config.problem_type == \"multi_label_classification\":\n                loss_fct = BCEWithLogitsLoss()\n                loss = loss_fct(pooled_logits, labels)\n        if not return_dict:\n            output = (pooled_logits,) + transformer_outputs[1:]\n            return ((loss,) + output) if loss is not None else output\n\n        return SequenceClassifierOutputWithPast(\n            loss=loss,\n            logits=pooled_logits,\n            past_key_values=transformer_outputs.past_key_values,\n            hidden_states=transformer_outputs.hidden_states,\n            attentions=transformer_outputs.attentions,\n        )\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/models/modeling_deepseek_vl_v2.py",
    "content": "from attrdict import AttrDict\nfrom dataclasses import dataclass\nimport logging\nimport gc\n\nfrom einops import rearrange, repeat\nfrom typing import Optional, List, Tuple, Callable, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom transformers.utils import (\n    add_start_docstrings,\n    add_start_docstrings_to_model_forward,\n)\nfrom transformers.modeling_outputs import ModelOutput\nfrom transformers.configuration_utils import PretrainedConfig\nfrom transformers import (\n    AutoConfig,\n    AutoModelForCausalLM,\n    PreTrainedModel\n)\nfrom transformers.utils import logging\n\nfrom .siglip_vit import VisionTransformer\nfrom .configuration_deepseek import DeepseekV2Config\nfrom .modeling_deepseek import DeepseekV2ForCausalLM\n\n\nlogger = logging.get_logger(__name__)\n\n\nclass MlpProjector(nn.Module):\n\n    def __init__(self, cfg):\n\n        super().__init__()\n\n        self.cfg = cfg\n\n        if cfg.projector_type == \"identity\":\n            modules = nn.Identity()\n\n        elif cfg.projector_type == \"linear\":\n            modules = nn.Linear(cfg.input_dim, cfg.n_embed)\n\n        elif cfg.projector_type == \"mlp_gelu\":\n            mlp_depth = cfg.depth\n            modules = [nn.Linear(cfg.input_dim, cfg.n_embed)]\n            for _ in range(1, mlp_depth):\n                modules.append(nn.GELU())\n                modules.append(nn.Linear(cfg.n_embed, cfg.n_embed))\n            modules = nn.Sequential(*modules)\n\n        elif cfg.projector_type == \"downsample_mlp_gelu\":\n            mlp_depth = cfg.depth\n            mlp_ratio = cfg.mlp_ratio\n            modules = [nn.Linear(cfg.input_dim * cfg.downsample_ratio * cfg.downsample_ratio, cfg.n_embed * mlp_ratio)]\n            for _ in range(1, mlp_depth - 1):\n                modules.append(nn.GELU())\n                modules.append(nn.Linear(cfg.n_embed * mlp_ratio, cfg.n_embed * mlp_ratio))\n            modules.append(nn.GELU())\n            modules.append(nn.Linear(cfg.n_embed * mlp_ratio, cfg.n_embed))\n            modules = nn.Sequential(*modules)\n\n        else:\n            raise ValueError(f\"Unknown projector type: {cfg.projector_type}\")\n\n        if cfg.token_pooling:\n            self.token_pooling_layer = nn.Linear(cfg.input_dim * 4, cfg.input_dim)\n\n        self.layers = modules\n\n    def forward(self, x):\n        if self.cfg.token_pooling:\n            batch_size, wxh, channels = x.shape\n            w = h = int(wxh ** 0.5)\n            x = x.view(batch_size, w, h, channels)\n            x = x.permute(0, 3, 1, 2)\n            # import ipdb; ipdb.set_trace()\n            patches = x.unfold(2, 2, 2).unfold(3, 2, 2)\n            batch_size, channels, h_patches, w_patches, _, _ = patches.size()\n            # 在通道维度上拼接\n            patches = patches.contiguous().view(batch_size, channels, h_patches * w_patches, -1)\n\n            # 通过线性层\n            patches = patches.permute(0, 2, 1, 3).contiguous()\n            patches = patches.view(batch_size, h_patches * w_patches, channels * 4)\n\n            x = self.token_pooling_layer(patches)\n\n        elif self.cfg.projector_type == 'downsample_mlp_gelu':\n            bs, hw, input_dim = x.shape\n            h = w = int((hw) ** 0.5)\n\n            \"\"\"compute padding\"\"\"\n            if h % self.cfg.downsample_ratio:\n                pad = self.cfg.downsample_ratio - h % self.cfg.downsample_ratio\n            else:\n                pad = 0\n            x = x.reshape(bs, h, w, input_dim)\n            if pad > 0:\n                x = F.pad(x, (0, 0, 0, pad, 0, pad), \"constant\", 0)\n\n            \"\"\"4 to 1 concat\"\"\"\n            x = x.permute(0, 3, 1, 2)  # B, C, H, W\n            x = F.unfold(x, kernel_size=self.cfg.downsample_ratio, stride=self.cfg.downsample_ratio,\n                         padding=0)  # B, C*4, HW // 4\n            x = x.permute(0, 2, 1)\n\n        return self.layers(x)\n\n\nclass VisionEncoderConfig(PretrainedConfig):\n    model_type: str = \"vision\"\n\n    model_name: str = \"siglip_large_patch16_384\"\n    image_size: int = 384\n    patch_size: int = 16\n    width: int = 1024\n    layers: int = 24\n    heads: int = 16\n    mlp_ratio: int = 4\n    global_pool: str = \"map\"\n    ignore_head: bool = True\n    class_token: bool = False\n    num_classes: int = 0\n    use_checkpoint: bool = False\n    weight_init: str = \"skip\"\n    deterministic: bool = False\n    num_recomputing_layers: int = 0\n\n    def __init__(\n            self,\n            model_name: str = \"siglip_large_patch16_384\",\n            image_size: int = 384,\n            patch_size: int = 16,\n            width: int = 1024,\n            layers: int = 24,\n            heads: int = 16,\n            mlp_ratio: int = 4,\n            global_pool: str = \"map\",\n            ignore_head: bool = True,\n            class_token: bool = False,\n            num_classes: int = 0,\n            use_checkpoint: bool = False,\n            **kwargs\n    ):\n        self.model_name = model_name\n        self.image_size = image_size\n        self.patch_size = patch_size\n        self.width = width\n        self.layers = layers\n        self.heads = heads\n        self.mlp_ratio = mlp_ratio\n        self.global_pool = global_pool\n        self.ignore_head = ignore_head\n        self.class_token = class_token\n        self.num_classes = num_classes\n        self.use_checkpoint = use_checkpoint\n\n        super().__init__(**kwargs)\n\n\nclass MlpProjectorConfig(PretrainedConfig):\n    model_type = \"mlp_projector\"\n    projector_type: str = \"downsample_mlp_gelu\"\n    input_dim: int = 1152\n    n_embed: int = 2048\n    depth: int = 2\n    mlp_ratio: int = 1\n    downsample_ratio: int = 2\n    token_pooling: bool = False\n\n    def __init__(\n            self,\n            projector_type: str = \"downsample_mlp_gelu\",\n            input_dim: int = 1152,\n            n_embed: int = 2048,\n            depth: int = 2,\n            mlp_ratio: int = 1,\n            downsample_ratio: int = 2,\n            **kwargs\n    ):\n        self.projector_type = projector_type\n        self.input_dim = input_dim\n        self.n_embed = n_embed\n        self.depth = depth\n        self.mlp_ratio = mlp_ratio\n        self.downsample_ratio = downsample_ratio\n\n        super().__init__(**kwargs)\n\n\n@dataclass\nclass DeepSeekVLV2CausalLMOutputWithPast(ModelOutput):\n    \"\"\"\n    Base class for DeepSeek-VL2 causal language model (or autoregressive) outputs.\n\n    Args:\n        loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):\n            Language modeling loss (for next-token prediction).\n        logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):\n            Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).\n        past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):\n            Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of shape\n            `(batch_size, num_heads, sequence_length, embed_size_per_head)`)\n\n            Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see\n            `past_key_values` input) to speed up sequential decoding.\n        hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):\n            Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +\n            one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.\n\n            Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.\n        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):\n            Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,\n            sequence_length)`.\n\n            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention\n            heads.\n        rope_deltas (`torch.LongTensor` of shape `(batch_size, )`, *optional*):\n            The rope index difference between sequence length and multimodal rope.\n    \"\"\"\n\n    loss: Optional[torch.FloatTensor] = None\n    logits: torch.FloatTensor = None\n    past_key_values: Optional[List[torch.FloatTensor]] = None\n    hidden_states: Optional[Tuple[torch.FloatTensor]] = None\n    attentions: Optional[Tuple[torch.FloatTensor]] = None\n    rope_deltas: Optional[torch.LongTensor] = None\n\n\nclass DeepseekVLV2Config(PretrainedConfig):\n    model_type = \"deepseek_vl_v2\"\n    vision_config: VisionEncoderConfig\n    projector_config: MlpProjectorConfig\n    language_config: DeepseekV2Config\n\n    tile_tag: str = \"2D\"\n    global_view_pos: str = \"head\"\n    candidate_resolutions: Tuple[Tuple[int, int]] = ((384, 384),)\n\n    def __init__(\n            self,\n            tile_tag: str = \"tile_tag\",\n            global_view_pos: str = \"head\",\n            candidate_resolutions: Tuple[Tuple[int, int]] = ((384, 384),),\n            **kwargs\n    ):\n        super().__init__(**kwargs)\n\n        vision_config = kwargs.get(\"vision_config\", {})\n        self.vision_config = VisionEncoderConfig(**vision_config)\n\n        projector_config = kwargs.get(\"projector_config\", {})\n        self.projector_config = MlpProjectorConfig(**projector_config)\n\n        language_config = kwargs.get(\"language_config\", {})\n        if isinstance(language_config, DeepseekV2Config):\n            self.language_config = language_config\n        else:\n            self.language_config = DeepseekV2Config(**language_config)\n\n        self.tile_tag = tile_tag\n        self.global_view_pos = global_view_pos\n        self.candidate_resolutions = candidate_resolutions\n\n\nclass DeepseekVLV2PreTrainedModel(PreTrainedModel):\n    config_class = DeepseekVLV2Config\n    base_model_prefix = \"deepseek_vl_v2\"\n    _no_split_modules = []\n    _skip_keys_device_placement = \"past_key_values\"\n\n\nclass DeepseekVLV2ForCausalLM(DeepseekVLV2PreTrainedModel):\n\n    def __init__(self, config: DeepseekVLV2Config):\n        super().__init__(config)\n\n        self._use_flash_attention_2 = config._attn_implementation == \"flash_attention_2\"\n\n        # ----------- vision encoder ------------\n        vision_config = config.vision_config\n        self.vision = VisionTransformer(\n            img_size=vision_config.image_size,\n            patch_size=vision_config.patch_size,\n            embed_dim=vision_config.width,\n            depth=vision_config.layers,\n            num_heads=vision_config.heads,\n            mlp_ratio=vision_config.mlp_ratio,\n            class_token=vision_config.class_token,\n            global_pool=vision_config.global_pool,\n            ignore_head=vision_config.ignore_head,\n            weight_init=vision_config.weight_init,\n            num_classes=0,\n            deterministic=vision_config.deterministic,\n            num_recomputing_layers=vision_config.num_recomputing_layers\n        )\n\n        # ----------- vl projector ------------\n        projector_config = config.projector_config\n        self.projector = MlpProjector(projector_config)\n\n        # image token format 形式\n        # FIXME 目前tile tag & global_view_pos的默认取值都是之前的实验策略；后续应当去掉默认取值，改为没有取值就raise error\n        self.tile_tag = config.tile_tag\n        self.global_view_pos = config.global_view_pos\n\n        # 用于format image token sequence的特殊token\n        embed_std = 1 / torch.sqrt(torch.tensor(projector_config.n_embed, dtype=torch.float32))\n        if self.tile_tag == \"2D\":\n            # <|view_separator|>, <|\\n|>\n            self.image_newline = nn.Parameter(torch.randn(projector_config.n_embed) * embed_std)\n            # fix the typo: view_seperater\n            self.view_seperator = nn.Parameter(torch.randn(projector_config.n_embed) * embed_std)\n        elif self.tile_tag == \"1D\":\n            # <|tile_x|>, <|tile_global|>\n            candidate_resolutions = config.candidate_resolutions\n            if len(candidate_resolutions) == 0:\n                raise ValueError(\n                    f\"len(candidate_resolutions) should be larger than 0, but got {len(candidate_resolutions)}\")\n            tile_variants_num = len(candidate_resolutions)\n            self.tile_indicators = nn.Parameter(\n                torch.randn(size=(tile_variants_num + 1, config.aligner.params.n_embed)) * embed_std\n            )\n        else:\n            raise ValueError(f\"tile tag should be either 1D or 2D, but got {self.tile_tag}\")\n\n        # ----------- language model ------------\n        language_config = config.language_config\n        self.language = DeepseekV2ForCausalLM(language_config)\n\n    def prepare_inputs_embeds(\n            self,\n            input_ids: torch.LongTensor,\n            images: Optional[torch.FloatTensor] = None,\n            images_seq_mask: Optional[torch.LongTensor] = None,\n            images_spatial_crop: Optional[torch.LongTensor] = None,\n            **ignore_kwargs\n    ):\n        \"\"\"\n\n        Args:\n            input_ids (torch.LongTensor): [b, T]\n            images (torch.FloatTensor): [b, max_n_images, 3, height, width]\n            images_seq_mask (torch.BoolTensor): [b, T]\n            images_spatial_crop (torch.LongTensor): [b, max_n_images, 2]\n\n        Returns:\n            input_embeds (torch.Tensor): [b, T, D]\n        \"\"\"\n\n        if images is None or images_spatial_crop.sum() == 0:\n            return self.language.get_input_embeddings()(input_ids)\n\n        bs, max_n_images, _ = images_spatial_crop.shape\n        batch_num_tiles = [0 for _ in range(bs)]\n        total_tiles = []\n        for idx in range(bs):\n            for jdx in range(max_n_images):\n                num_width_tiles, num_height_tiles = images_spatial_crop[idx, jdx]\n                if num_width_tiles == 0 or num_height_tiles == 0:\n                    break\n                batch_num_tiles[idx] += (1 + num_width_tiles * num_height_tiles)\n\n            total_tiles.append(images[idx, :batch_num_tiles[idx]])\n\n        # [batch_all_tiles, 3, height, width]\n        total_tiles = torch.cat(total_tiles, dim=0)\n        assert total_tiles.shape[0] == sum(batch_num_tiles)\n        if total_tiles.shape[0] == 0:\n            return self.language.get_input_embeddings()(input_ids)\n\n        # [batch_all_tiles, vit_seq_len, c]\n        images_feature = self.vision(total_tiles)\n\n        # [batch_all_tiles, hw, D]\n        images_embeds = self.projector(images_feature)\n        _, hw, n_dim = images_embeds.shape\n        h = w = int(hw ** 0.5)\n\n        # put image tokens into the input_embeds, [b, T, D]\n        input_embeds = self.language.get_input_embeddings()(input_ids)\n\n        # 根据self.tile_tag & self.global_view_pos填充image token sequence\n        tile_index = 0\n        for idx in range(images_spatial_crop.shape[0]):\n            images_in_this_batch = []\n            for jdx in range(images_spatial_crop.shape[1]):\n\n                # extra global & local features\n                num_width_tiles, num_height_tiles = images_spatial_crop[idx, jdx]\n                if num_width_tiles == 0 or num_height_tiles == 0:\n                    break\n\n                num_tiles_in_image = num_width_tiles * num_height_tiles\n\n                # [hw, D]\n                global_features = images_embeds[tile_index]\n\n                # [num_height_tiles * num_width_tiles, hw, D]\n                local_features = images_embeds[tile_index + 1: tile_index + 1 + num_tiles_in_image]\n\n                tile_index += num_tiles_in_image + 1\n\n                # format global and local features\n                if self.tile_tag == \"2D\":\n\n                    # ----------------- global view add newline -----------------\n                    # [hw, D] -> [h, w, D]\n                    global_features = global_features.view(h, w, n_dim)\n                    # [D]     -> [h, 1, D]\n                    new_lines_in_global = repeat(self.image_newline, \"d -> h 1 d\", h=h)\n                    # cat([h, w, D], [h, 1, D], dim=1) -> [h, w + 1, D]\n                    global_features = torch.cat([global_features, new_lines_in_global], dim=1)\n                    # [h, w + 1, D] -> [h * (w + 1), D]\n                    global_features = global_features.view(-1, n_dim)\n\n                    # ----------------- local view add newline -----------------\n                    # [num_height_tiles * num_width_tiles, h * w, D] -> [num_height_tiles * h, num_width_tiles * w, D]\n                    local_features = rearrange(\n                        local_features,\n                        \"(th tw) (h w) d -> (th h) (tw w) d\",\n                        th=num_height_tiles,\n                        tw=num_width_tiles,\n                        h=h,\n                        w=w\n                    )\n\n                    # [D] -> [num_height_tiles * h, 1, D]\n                    new_lines_in_local = repeat(\n                        self.image_newline,\n                        \"d -> (th h) 1 d\",\n                        th=num_height_tiles,\n                        h=h\n                    )\n\n                    # [num_height_tiles * h, num_width_tiles * w + 1, D]\n                    local_features = torch.cat([local_features, new_lines_in_local], dim=1)\n\n                    # [num_height_tiles * h, num_width_tiles * w + 1, D]\n                    #   --> [(num_height_tiles * h) * (num_width_tiles * w + 1), D]\n                    local_features = local_features.view(-1, n_dim)\n\n                    # ----------------- merge global and local tiles -----------------\n                    if self.global_view_pos == \"head\":\n                        global_local_features = torch.cat(\n                            [global_features, self.view_seperator[None, :], local_features], dim=0)\n                    else:\n                        global_local_features = torch.cat(\n                            [local_features, self.view_seperator[None, :], global_features], dim=0)\n\n                else:\n                    # abandoned，实际上不会走这个逻辑\n                    global_features = torch.cat(\n                        [self.tile_indicators[0:1], global_features], dim=0\n                    )\n                    local_features = torch.cat(\n                        [self.tile_indicators[1:num_tiles_in_image + 1].unsqueeze(1), local_features], dim=1\n                    )\n                    local_features = rearrange(local_features, 'crop_num hw d -> (crop_num hw) d')\n\n                    if self.global_view_pos == \"head\":\n                        global_local_features = torch.cat([global_features, local_features], dim=0)\n                    else:\n                        global_local_features = torch.cat([local_features, global_features], dim=0)\n\n                images_in_this_batch.append(global_local_features)\n\n            if len(images_in_this_batch) > 0:\n                images_in_this_batch = torch.cat(images_in_this_batch, dim=0)\n                input_embeds[idx].masked_scatter_(images_seq_mask[idx].unsqueeze(-1), images_in_this_batch)\n\n        return input_embeds\n\n    @torch.no_grad()\n    def incremental_prefilling(\n            self,\n            input_ids: Optional[torch.LongTensor] = None,\n            attention_mask: Optional[torch.Tensor] = None,\n            inputs_embeds: Optional[torch.FloatTensor] = None,\n\n            images: Optional[torch.FloatTensor] = None,\n            images_seq_mask: Optional[torch.LongTensor] = None,\n            images_spatial_crop: Optional[torch.LongTensor] = None,\n            chunk_size: int = 1024\n    ):\n        if inputs_embeds is None:\n            inputs_embeds = self.prepare_inputs_embeds(\n                input_ids=input_ids,\n                images=images,\n                images_seq_mask=images_seq_mask,\n                images_spatial_crop=images_spatial_crop,\n            )\n\n            del images\n            del images_seq_mask\n            del images_spatial_crop\n\n            if attention_mask is not None:\n                attention_mask = attention_mask.to(inputs_embeds.device)\n\n            self._clear_cuda_cache()\n\n        bzs, seq_len, _ = inputs_embeds.shape\n        past_key_values = None\n\n        # remain the last token for the next forward\n        prefilling_len = seq_len - 1\n        for i in range(0, prefilling_len, chunk_size):\n            chunk_start = i\n            chunk_end = min(i + chunk_size, prefilling_len)\n            chunk_inputs_embeds = inputs_embeds[:, chunk_start: chunk_end]\n            chunk_attention_mask = attention_mask[:, 0: chunk_end]\n            # print(f\"start = {chunk_start}, end = {chunk_end}, prefilling_len = {prefilling_len}, seq_len = {seq_len}\")\n\n            # compute position_ids\n            if past_key_values is not None:\n                position_ids = torch.arange(\n                    chunk_start,\n                    chunk_end,\n                    dtype=torch.long,\n                    device=inputs_embeds.device\n                ).unsqueeze(0)\n                past_key_values = self._move_past_key_values_to_gpu(past_key_values, inputs_embeds.device)\n            else:\n                position_ids = None\n\n            # chunk-forward\n            with torch.no_grad():\n                outputs = self.forward(\n                    inputs_embeds=chunk_inputs_embeds,\n                    attention_mask=chunk_attention_mask,\n                    past_key_values=past_key_values,\n                    position_ids=position_ids,\n                    use_cache=True,\n                )\n                # update past_key_values\n                past_key_values = outputs.past_key_values\n                past_key_values = self._move_past_key_values_to_cpu(past_key_values)\n\n                del outputs, position_ids\n                self._clear_cuda_cache()\n\n        prefilling_key_values = []\n        for layer_past in past_key_values:\n            prefilling_key_values.append(\n                (\n                    layer_past[0][:, :, 0: prefilling_len, ...].to(inputs_embeds.device),\n                    layer_past[1][:, :, 0: prefilling_len, ...].to(inputs_embeds.device),\n                )\n            )\n\n        return inputs_embeds, prefilling_key_values\n\n    def forward(\n            self,\n            input_ids: Optional[torch.LongTensor] = None,\n\n            attention_mask: Optional[torch.Tensor] = None,\n            position_ids: Optional[torch.LongTensor] = None,\n            past_key_values: Optional[List[torch.FloatTensor]] = None,\n            inputs_embeds: Optional[torch.FloatTensor] = None,\n\n            images: Optional[torch.FloatTensor] = None,\n            images_seq_mask: Optional[torch.LongTensor] = None,\n            images_spatial_crop: Optional[torch.LongTensor] = None,\n\n            labels: Optional[torch.LongTensor] = None,\n            use_cache: Optional[bool] = None,\n            output_attentions: Optional[bool] = None,\n            output_hidden_states: Optional[bool] = None,\n            return_dict: Optional[bool] = None,\n            cache_position: Optional[torch.LongTensor] = None,\n    ):\n\n        output_attentions = (\n            output_attentions\n            if output_attentions is not None\n            else self.config.output_attentions\n        )\n        output_hidden_states = (\n            output_hidden_states\n            if output_hidden_states is not None\n            else self.config.output_hidden_states\n        )\n        use_cache = use_cache if use_cache is not None else self.config.use_cache\n\n        return_dict = (\n            return_dict if return_dict is not None else self.config.use_return_dict\n        )\n        if inputs_embeds is None:\n            inputs_embeds = self.prepare_inputs_embeds(\n                input_ids=input_ids,\n                images=images,\n                images_seq_mask=images_seq_mask,\n                images_spatial_crop=images_spatial_crop,\n            )\n\n            if attention_mask is not None:\n                attention_mask = attention_mask.to(inputs_embeds.device)\n\n        # print(inputs_embeds.shape)\n        outputs = self.language.forward(\n            input_ids=None,\n            attention_mask=attention_mask,\n            position_ids=position_ids,\n            past_key_values=past_key_values,\n            inputs_embeds=inputs_embeds,\n            labels=labels,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n            cache_position=cache_position\n        )\n\n        return outputs\n\n    def _clear_cuda_cache(self):\n        \"\"\"clear CUDA memory cache\"\"\"\n        gc.collect()\n        if torch.cuda.is_available():\n            torch.cuda.empty_cache()\n            torch.cuda.synchronize()\n\n    def _move_past_key_values_to_cpu(self, past_key_values):\n        # print(f\"past_key_values -> cpu\")\n        if past_key_values is None:\n            return None\n        return tuple(tuple(t.cpu() for t in layer) for layer in past_key_values)\n\n    def _move_past_key_values_to_gpu(self, past_key_values, device=\"cuda:0\"):\n        # print(f\"past_key_values -> gpu\")\n        if past_key_values is None:\n            return None\n        return tuple(tuple(t.to(device) for t in layer) for layer in past_key_values)\n\n    def prepare_inputs_for_generation(\n            self,\n            input_ids,\n            past_key_values=None,\n            inputs_embeds=None,\n\n            images: Optional[torch.FloatTensor] = None,\n            images_seq_mask: Optional[torch.LongTensor] = None,\n            images_spatial_crop: Optional[torch.LongTensor] = None,\n\n            attention_mask=None,\n            cache_position=None,\n\n            pixel_values=None,\n            image_sizes=None,\n            num_logits_to_keep=None,\n            **kwargs,\n    ):\n        # Overwritten -- in specific circumstances we don't want to forward image inputs to the model\n        model_inputs = self.language.prepare_inputs_for_generation(\n            input_ids,\n            past_key_values=past_key_values,\n            inputs_embeds=inputs_embeds,\n            attention_mask=attention_mask,\n            cache_position=cache_position,\n            num_logits_to_keep=num_logits_to_keep,\n            **kwargs,\n        )\n\n        # If we're in cached decoding stage, pixel values should be None because input ids do not contain special image token anymore\n        # Otherwise we need pixel values to be passed to model\n        cache_position = model_inputs[\"cache_position\"]\n        if cache_position[0] == 0:\n            model_inputs[\"images\"] = images\n            model_inputs[\"images_seq_mask\"] = images_seq_mask\n            model_inputs[\"images_spatial_crop\"] = images_spatial_crop\n\n        return model_inputs\n\n    @staticmethod\n    def _reorder_cache(past_key_values, beam_idx):\n        reordered_past = ()\n        for layer_past in past_key_values:\n            reordered_past += (\n                tuple(\n                    past_state.index_select(0, beam_idx.to(past_state.device))\n                    for past_state in layer_past\n                ),\n            )\n        return reordered_past\n\n\nAutoConfig.register(\"vision\", VisionEncoderConfig)\nAutoConfig.register(\"mlp_projector\", MlpProjectorConfig)\nAutoConfig.register(\"deepseek_vl_v2\", DeepseekVLV2Config)\nAutoModelForCausalLM.register(DeepseekVLV2Config, DeepseekVLV2ForCausalLM)\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/models/processing_deepseek_vl_v2.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom dataclasses import dataclass\nfrom typing import Dict, Tuple, List, Literal, Optional\nimport math\n\nimport torch\nfrom torch.nn.utils.rnn import pad_sequence\nimport torchvision.transforms as T\nfrom transformers import LlamaTokenizerFast\nfrom transformers.processing_utils import ProcessorMixin\nfrom PIL import Image, ImageOps\n\nfrom .conversation import get_conv_template\n\n\ndef select_best_resolution(image_size, candidate_resolutions):\n    # used for cropping\n    original_width, original_height = image_size\n    best_fit = None\n    max_effective_resolution = 0\n    min_wasted_resolution = float(\"inf\")\n\n    for width, height in candidate_resolutions:\n        scale = min(width / original_width, height / original_height)\n        downscaled_width, downscaled_height = int(original_width * scale), int(original_height * scale)\n        effective_resolution = min(downscaled_width * downscaled_height, original_width * original_height)\n        wasted_resolution = (width * height) - effective_resolution\n\n        if effective_resolution > max_effective_resolution or (effective_resolution == max_effective_resolution and wasted_resolution < min_wasted_resolution):\n            max_effective_resolution = effective_resolution\n            min_wasted_resolution = wasted_resolution\n            best_fit = (width, height)\n\n    return best_fit\n\n\nclass DictOutput(object):\n    def keys(self):\n        return self.__dict__.keys()\n\n    def __getitem__(self, item):\n        return self.__dict__[item]\n\n    def __setitem__(self, key, value):\n        self.__dict__[key] = value\n\n\n# 对于inference sample也可以维护input_ids，反正最后不会用到\n@dataclass\nclass VLChatProcessorOutput(DictOutput):\n    sft_format: str\n    input_ids: torch.LongTensor\n    target_ids: torch.LongTensor\n    images: torch.Tensor\n    images_seq_mask: torch.BoolTensor\n    images_spatial_crop: torch.LongTensor\n    num_image_tokens: List[int]\n\n    def __len__(self):\n        return len(self.input_ids)\n\n\n@dataclass\nclass BatchCollateOutput(DictOutput):\n    sft_format: List[str]\n    input_ids: torch.LongTensor\n    labels: torch.LongTensor\n    images: torch.Tensor\n    attention_mask: torch.Tensor\n    images_seq_mask: torch.BoolTensor\n    images_spatial_crop: torch.LongTensor\n    seq_lens: List[int]\n\n    def to(self, device, dtype=torch.bfloat16):\n        self.input_ids = self.input_ids.to(device)\n        self.labels = self.labels.to(device)\n        self.attention_mask = self.attention_mask.to(device)\n        self.images_seq_mask = self.images_seq_mask.to(device)\n        self.images_spatial_crop = self.images_spatial_crop.to(device)\n        self.images = self.images.to(device=device, dtype=dtype)\n        return self\n\n\nclass ImageTransform(object):\n    def __init__(\n            self,\n            mean: Optional[Tuple[float, float, float]] = (0.5, 0.5, 0.5),\n            std: Optional[Tuple[float, float, float]] = (0.5, 0.5, 0.5),\n            normalize: bool = True\n    ):\n        self.mean = mean\n        self.std = std\n        self.normalize = normalize\n\n        transform_pipelines = [\n            T.ToTensor()\n        ]\n\n        if normalize:\n            transform_pipelines.append(T.Normalize(mean, std))\n\n        self.transform = T.Compose(transform_pipelines)\n\n    def __call__(self, pil_img: Image.Image):\n        x = self.transform(pil_img)\n        return x\n\n\n\nclass DeepseekVLV2Processor(ProcessorMixin):\n    tokenizer_class = (\"LlamaTokenizer\", \"LlamaTokenizerFast\")\n    attributes = [\"tokenizer\"]\n\n    def __init__(\n            self,\n            tokenizer: LlamaTokenizerFast,\n            candidate_resolutions: Tuple[Tuple[int, int]],\n            patch_size: int,\n            downsample_ratio: int,\n            image_mean: Tuple[float, float, float] = (0.5, 0.5, 0.5),\n            image_std: Tuple[float, float, float] = (0.5, 0.5, 0.5),\n            normalize: bool = True,\n            image_token: str = \"<image>\",\n            pad_token: str = \"<｜▁pad▁｜>\",\n            add_special_token: bool = False,\n            sft_format: str = \"deepseek\",\n            mask_prompt: bool = True,\n            ignore_id: int = -100,\n            **kwargs,\n    ):\n\n        self.candidate_resolutions = candidate_resolutions\n        self.image_size = candidate_resolutions[0][0]\n        self.patch_size = patch_size\n        self.image_mean = image_mean\n        self.image_std = image_std\n        self.normalize = normalize\n        self.downsample_ratio = downsample_ratio\n\n        self.image_transform = ImageTransform(mean=image_mean, std=image_std, normalize=normalize)\n        self.tokenizer = tokenizer\n        self.tokenizer.padding_side = 'left'  # must set this，padding side with make a difference in batch inference\n\n        # add the pad_token as special token to use 'tokenizer.pad_token' and 'tokenizer.pad_token_id'\n        if tokenizer.pad_token is None:\n            self.tokenizer.add_special_tokens({'pad_token': pad_token})\n        print(f\"Add pad token = ['{pad_token}'] to the tokenizer\\n\"\n              f\"{pad_token}:{tokenizer.encode(pad_token, add_special_tokens=False)[0]}\")\n\n        # add image token\n        image_token_id = self.tokenizer.vocab.get(image_token)\n        if image_token_id is None:\n            special_tokens = [image_token]\n            special_tokens_dict = {\"additional_special_tokens\": special_tokens}\n            self.tokenizer.add_special_tokens(special_tokens_dict)\n        self.image_token_id = self.tokenizer.vocab.get(image_token)\n        print(f\"Add image token = ['{image_token}'] to the tokenizer\\n\"\n              f\"{image_token}:{tokenizer.encode(image_token, add_special_tokens=False)[0]}\")\n\n        # add five special tokens for grounding-related tasks\n        # <|ref|>, <|/ref|>, <|det|>, <|/det|>, <|grounding|>\n        special_tokens = ['<|ref|>', '<|/ref|>', '<|det|>', '<|/det|>', '<|grounding|>']\n        special_tokens_dict = {\"additional_special_tokens\": special_tokens}\n        self.tokenizer.add_special_tokens(special_tokens_dict)\n        print(f\"Add grounding-related tokens = {special_tokens} to the tokenizer with input_ids\\n\"\n              f\"<|ref|>:{tokenizer.encode('<|ref|>', add_special_tokens=False)[0]}\\n\"\n              f\"<|/ref|>:{tokenizer.encode('<|/ref|>', add_special_tokens=False)[0]}\\n\"\n              f\"<|det|>:{tokenizer.encode('<|det|>', add_special_tokens=False)[0]}\\n\"\n              f\"<|/det|>:{tokenizer.encode('<|/det|>', add_special_tokens=False)[0]}\\n\"\n              f\"<|grounding|>:{tokenizer.encode('<|grounding|>', add_special_tokens=False)[0]}\")\n\n        # add special tokens for SFT data\n        special_tokens = [\"<|User|>\", \"<|Assistant|>\"]\n        special_tokens_dict = {\"additional_special_tokens\": special_tokens}\n        self.tokenizer.add_special_tokens(special_tokens_dict)\n        print(f\"Add chat tokens = {special_tokens} to the tokenizer with input_ids\\n\"\n              f\"<|User|>:{tokenizer.encode('<|User|>', add_special_tokens=False)[0]}\\n\"\n              f\"<|Assistant|>:{tokenizer.encode('<|Assistant|>', add_special_tokens=False)[0]}\\n\")\n\n        self.image_token = image_token\n        self.pad_token = pad_token\n        self.add_special_token = add_special_token\n        self.sft_format = sft_format\n        self.mask_prompt = mask_prompt\n        self.ignore_id = ignore_id\n\n        super().__init__(\n            tokenizer,\n            **kwargs,\n        )\n\n    def new_chat_template(self):\n        conv = get_conv_template(self.sft_format)\n        return conv\n\n    def format_messages(\n            self,\n            conversations: List[Dict[str, str]],\n            sft_format: str = \"deepseek\",\n            system_prompt: str = \"\",\n    ):\n        \"\"\"\n        Applies the SFT template to conversation.\n\n        Args:\n            conversations (List[Dict]): A List of messages.\n            sft_format (str, optional): The format of the SFT template to use. Defaults to \"deepseek\".\n            system_prompt (str, optional): The system prompt to use in the SFT template. Defaults to \"\".\n\n        Returns:\n            sft_prompt (str): The formatted text.\n        \"\"\"\n\n        conv = get_conv_template(sft_format)\n        conv.set_system_message(system_prompt)\n        for message in conversations:\n            conv.append_message(message[\"role\"], message[\"content\"].strip())\n        sft_prompt = conv.get_prompt().strip()\n\n        return sft_prompt\n\n    def format_messages_v2(self, messages, pil_images, systems=None):\n        \"\"\"play the role of format_messages_v2 and get_images_info in the last version\"\"\"\n        tokenized_data = []\n        masked_tokenized_data = []  # labels\n        images_list = []\n        images_seq_mask = []\n        images_spatial_crop = []\n        num_image_tokens = []\n\n        image_index = 0\n\n        conv = get_conv_template(self.sft_format)\n        conv_system_message = conv.system_message\n\n        for idx, message in enumerate(messages):\n            if idx == 0:\n                tokenized_data += [self.bos_id]\n                masked_tokenized_data += [self.bos_id]\n                images_seq_mask += [False]\n                conv.system_message = conv_system_message\n            else:\n                conv.system_message = ''\n\n            if message['role'] == conv.roles[0] or message['role'] == \"user\":\n                conv.reset_message()\n                conv.append_message(conv.roles[0], str(message['content']).strip())\n                conv.append_message(conv.roles[1], '')\n                formatted_question = conv.get_prompt()\n                tokenized_str, images, seq_mask, spatial_crop, n_image_tokens = self.tokenize_with_images(\n                    formatted_question,\n                    pil_images[image_index: image_index + formatted_question.count(self.image_token)],\n                    bos=False,\n                    eos=False,\n                    cropping=len(pil_images) <= 2\n                )\n                image_index += formatted_question.count(self.image_token)\n\n                tokenized_data += tokenized_str\n                if self.mask_prompt:\n                    masked_tokenized_data += [self.ignore_id] * len(tokenized_str)\n                else:\n                    masked_tokenized_data += tokenized_str\n                images_list += images\n                images_seq_mask += seq_mask\n                images_spatial_crop += spatial_crop\n                num_image_tokens += n_image_tokens\n\n            elif message['role'] == conv.roles[1] or message['role'] == \"assistant\":\n                formatted_answer = message['content'].strip()\n                assert formatted_answer.count(\n                    self.image_token) == 0, f\"there should be no {self.image_token} in the assistant's reply, but got {messages}\"\n                tokenized_str, images, seq_mask, spatial_crop, n_image_tokens = self.tokenize_with_images(\n                    formatted_answer,\n                    [],\n                    bos=False,\n                    eos=True,\n                    cropping=len(pil_images) <= 2)\n\n                tokenized_data += tokenized_str\n                masked_tokenized_data += tokenized_str\n                images_seq_mask += seq_mask\n\n            elif message['role'] == 'system' or message['role'] == 'deepseekapi-sys':\n                # 如果message里面有system，那就只允许出现在message的第一句，同时conv原本的system就会失效\n                assert idx == 0, 'system information should only exist in the begining of the conversation'\n                formatted_system = message['content'].strip()\n                tokenized_str = self.encode(formatted_system, bos=False, eos=False)\n                tokenized_data += tokenized_str\n                if self.mask_prompt:\n                    masked_tokenized_data += [self.ignore_id] * len(tokenized_str)\n                else:\n                    masked_tokenized_data += tokenized_str\n                seq_mask = [False] * len(tokenized_str)\n                images_seq_mask += seq_mask\n\n            else:\n                assert False, f\"Unknown role: {message['role']}\"\n\n        assert len(tokenized_data) == len(\n            images_seq_mask), f\"format_messages_v2: tokenized_str's length {len(tokenized_str)} is not equal to imags_seq_mask's length {len(images_seq_mask)}\"\n        assert len(images_spatial_crop) == len(num_image_tokens), f\"image number should be compatible\"\n\n        return tokenized_data, masked_tokenized_data, images_list, images_seq_mask, images_spatial_crop, num_image_tokens\n\n    def format_prompts(\n            self,\n            prompts: str,\n            sft_format: str = \"deepseek\",\n            system_prompt: str = \"\",\n    ):\n        \"\"\"\n        Applies the SFT template to prompts.\n\n        Args:\n            prompts (str): the non-sft formatted prompt;\n            sft_format (str, optional): The format of the SFT template to use. Defaults to \"deepseek\".\n            system_prompt (str, optional): The system prompt to use in the SFT template. Defaults to \"\".\n\n        Returns:\n            sft_prompt (str): The formatted text.\n        \"\"\"\n\n        conv = get_conv_template(sft_format)\n        conv.set_system_message(system_prompt)\n        conv.append_message(conv.roles[0], prompts.strip())\n        conv.append_message(conv.roles[1], \"\")\n\n        sft_prompt = conv.get_prompt().strip()\n\n        return sft_prompt\n\n    @property\n    def bos_id(self):\n        return self.tokenizer.bos_token_id\n\n    @property\n    def eos_id(self):\n        return self.tokenizer.eos_token_id\n\n    @property\n    def pad_id(self):\n        return self.tokenizer.pad_token_id\n\n    def encode(self, text: str, bos: bool = True, eos: bool = False):\n        t = self.tokenizer.encode(text, add_special_tokens=False)\n\n        if bos:\n            t = [self.bos_id] + t\n        if eos:\n            t = t + [self.eos_id]\n\n        return t\n\n    def decode(self, t: List[int], **kwargs) -> str:\n        return self.tokenizer.decode(t, **kwargs)\n\n    def process_one(\n            self,\n            prompt: str = None,\n            conversations: List[Dict[str, str]] = None,\n            images: List[Image.Image] = None,\n            apply_sft_format: bool = False,\n            inference_mode: bool = True,\n            system_prompt: str = \"\",\n            **kwargs,\n    ):\n        \"\"\"\n\n        Args:\n            prompt (str): the formatted prompt;\n            conversations (List[Dict]): conversations with a list of messages;\n            images (List[ImageType]): the list of images;\n            apply_sft_format (bool): if prompt is not None, then apply the SFT format to prompt;\n                if conversations is not None, then it will always apply the SFT format to conversations;\n            inference_mode (bool): if True, then remove the last eos token;\n            system_prompt (str): the system prompt;\n            **kwargs:\n\n        Returns:\n            outputs (BaseProcessorOutput): the output of the processor,\n                - input_ids (torch.LongTensor): [N + image tokens]\n                - target_ids (torch.LongTensor): [N + image tokens]\n                - images (torch.FloatTensor): [n_images, 3, H, W]\n                - image_id (int): the id of the image token\n                - num_image_tokens (List[int]): the number of image tokens\n        \"\"\"\n\n        assert (\n                prompt is None or conversations is None\n        ), \"prompt and conversations cannot be used at the same time.\"\n\n        if prompt is None:\n            # apply sft format\n            sft_format = self.format_messages(\n                conversations=conversations,\n                sft_format=self.sft_format,\n                system_prompt=system_prompt,\n            )\n            tokenized_str, masked_tokenized_str, images_list, images_seq_mask, images_spatial_crop, num_image_tokens = self.format_messages_v2(\n                conversations, images)\n        else:\n            if apply_sft_format:\n                sft_format = self.format_prompts(\n                    prompts=prompt,\n                    sft_format=self.sft_format,\n                    system_prompt=system_prompt\n                )\n            else:\n                sft_format = prompt\n            tokenized_str, images_list, images_seq_mask, images_spatial_crop, num_image_tokens = self.tokenize_with_images(\n                sft_format, images, bos=True, eos=True, cropping=len(images) <= 2)\n            masked_tokenized_str = []\n            for token_index in tokenized_str:\n                if token_index != self.image_token_id:\n                    masked_tokenized_str.append(token_index)\n                else:\n                    masked_tokenized_str.append(self.ignore_id)\n\n        assert len(tokenized_str) == len(images_seq_mask) == len(masked_tokenized_str), \\\n            (f\"tokenized_str's length {len(tokenized_str)}, input_ids' length {len(masked_tokenized_str)}, \"\n             f\"imags_seq_mask's length {len(images_seq_mask)}, are not equal\")\n\n        input_ids = torch.LongTensor(tokenized_str)\n        target_ids = torch.LongTensor(masked_tokenized_str)\n        images_seq_mask = torch.tensor(images_seq_mask, dtype=torch.bool)\n\n        # set input_ids < 0 | input_ids == self.image_token_id as ignore_id\n        target_ids[(input_ids < 0) | (input_ids == self.image_token_id)] = self.ignore_id\n        input_ids[input_ids < 0] = self.pad_id\n\n        if inference_mode:\n            # 去掉结尾的eos token\n            assert input_ids[-1] == self.eos_id\n            input_ids = input_ids[:-1]\n            target_ids = target_ids[:-1]\n            images_seq_mask = images_seq_mask[:-1]\n\n        if len(images_list) == 0:\n            images = torch.zeros((1, 3, self.image_size, self.image_size))\n            images_spatial_crop = torch.zeros((1, 2), dtype=torch.long)\n        else:\n            images = torch.stack(images_list, dim=0)\n            images_spatial_crop = torch.tensor(images_spatial_crop, dtype=torch.long)\n\n        prepare = VLChatProcessorOutput(\n            sft_format=sft_format,\n            input_ids=input_ids,\n            target_ids=target_ids,\n            images=images,\n            images_seq_mask=images_seq_mask,\n            images_spatial_crop=images_spatial_crop,\n            num_image_tokens=num_image_tokens\n        )\n\n        return prepare\n\n    def __call__(\n            self,\n            *,\n            prompt: str = None,\n            conversations: List[Dict[str, str]] = None,\n            images: List[Image.Image] = None,\n            apply_sft_format: bool = False,\n            force_batchify: bool = True,\n            inference_mode: bool = True,\n            system_prompt: str = \"\",\n            **kwargs,\n    ):\n        \"\"\"\n\n        Args:\n            prompt (str): the formatted prompt;\n            conversations (List[Dict]): conversations with a list of messages;\n            images (List[ImageType]): the list of images;\n            apply_sft_format (bool): if prompt is not None, then apply the SFT format to prompt;\n                if conversations is not None, then it will always apply the SFT format to conversations;\n            force_batchify (bool): force batchify the inputs;\n            inference_mode (bool): if True, then remove the last eos token;\n            system_prompt (str): the system prompt;\n            **kwargs:\n\n        Returns:\n            outputs (BaseProcessorOutput): the output of the processor,\n                - input_ids (torch.LongTensor): [N + image tokens]\n                - images (torch.FloatTensor): [n_images, 3, H, W]\n                - image_id (int): the id of the image token\n                - num_image_tokens (List[int]): the number of image tokens\n        \"\"\"\n\n        prepare = self.process_one(\n            prompt=prompt,\n            conversations=conversations,\n            images=images,\n            apply_sft_format=apply_sft_format,\n            inference_mode=inference_mode,\n            system_prompt=system_prompt\n        )\n\n        if force_batchify:\n            prepare = self.batchify([prepare])\n\n        return prepare\n\n    def tokenize_with_images(\n            self,\n            conversation: str,\n            images: List[Image.Image],\n            bos: bool = True,\n            eos: bool = True,\n            cropping: bool = True,\n    ):\n        \"\"\"Tokenize text with <image> tags.\"\"\"\n        assert conversation.count(self.image_token) == len(images)\n        text_splits = conversation.split(self.image_token)\n        images_list, images_seq_mask, images_spatial_crop = [], [], []\n        num_image_tokens = []\n        tokenized_str = []\n        for text_sep, image in zip(text_splits, images):\n            \"\"\"encode text_sep\"\"\"\n            tokenized_sep = self.encode(text_sep, bos=False, eos=False)\n            tokenized_str += tokenized_sep\n            images_seq_mask += [False] * len(tokenized_sep)\n\n            \"\"\"select best resolution for anyres\"\"\"\n            if cropping:\n                best_width, best_height = select_best_resolution(image.size, self.candidate_resolutions)\n            else:\n                best_width, best_height = self.image_size, self.image_size\n            # print(image.size, (best_width, best_height)) # check the select_best_resolutions func\n\n            \"\"\"process the global view\"\"\"\n            global_view = ImageOps.pad(image, (self.image_size, self.image_size),\n                                       color=tuple(int(x * 255) for x in self.image_transform.mean))\n            images_list.append(self.image_transform(global_view))\n\n            \"\"\"process the local views\"\"\"\n            local_view = ImageOps.pad(image, (best_width, best_height),\n                                      color=tuple(int(x * 255) for x in self.image_transform.mean))\n            for i in range(0, best_height, self.image_size):\n                for j in range(0, best_width, self.image_size):\n                    images_list.append(\n                        self.image_transform(local_view.crop((j, i, j + self.image_size, i + self.image_size))))\n\n            \"\"\"record height / width crop num\"\"\"\n            num_width_tiles, num_height_tiles = best_width // self.image_size, best_height // self.image_size\n            images_spatial_crop.append([num_width_tiles, num_height_tiles])\n\n            \"\"\"add image tokens\"\"\"\n            h = w = math.ceil((self.image_size // self.patch_size) / self.downsample_ratio)\n            # global views tokens h * (w + 1), 1 is for line seperator\n            tokenized_image = [self.image_token_id] * h * (w + 1)\n            # add a seperator between global and local views\n            tokenized_image += [self.image_token_id]\n            # local views tokens, (num_height_tiles * h) * (num_width_tiles * w + 1)\n            tokenized_image += [self.image_token_id] * (num_height_tiles * h) * (num_width_tiles * w + 1)\n\n            tokenized_str += tokenized_image\n            images_seq_mask += [True] * len(tokenized_image)\n            num_image_tokens.append(len(tokenized_image))\n            # print(width_crop_num, height_crop_num, len(tokenized_image)) # test the correctness of the number of image-related tokens\n\n        \"\"\"process the last text split\"\"\"\n        tokenized_sep = self.encode(text_splits[-1], bos=False, eos=False)\n        tokenized_str += tokenized_sep\n        images_seq_mask += [False] * len(tokenized_sep)\n\n        \"\"\"add the bos and eos tokens\"\"\"\n        if bos:\n            tokenized_str = [self.bos_id] + tokenized_str\n            images_seq_mask = [False] + images_seq_mask\n        if eos:\n            tokenized_str = tokenized_str + [self.eos_id]\n            images_seq_mask = images_seq_mask + [False]\n\n        assert len(tokenized_str) == len(\n            images_seq_mask), f\"tokenize_with_images func: tokenized_str's length {len(tokenized_str)} is not equal to imags_seq_mask's length {len(images_seq_mask)}\"\n\n        return tokenized_str, images_list, images_seq_mask, images_spatial_crop, num_image_tokens\n\n    def batchify(\n            self,\n            sample_list: List[VLChatProcessorOutput],\n            padding: Literal[\"left\", \"right\"] = \"left\"\n    ) -> BatchCollateOutput:\n        \"\"\"\n        Preprocesses the inputs for multimodal inference.\n\n        Args:\n            sample_list (List[VLChatProcessorOutput]): A list of VLChatProcessorOutput.\n            padding (str): The padding method. Defaults to \"left\".\n\n        Returns:\n            BatchCollateOutput: A dictionary of the inputs to use for multimodal inference.\n        \"\"\"\n\n        batched_sft_format = [sample.sft_format for sample in sample_list]\n        batched_input_ids = [sample.input_ids for sample in sample_list]\n        batched_labels = [sample.target_ids for sample in sample_list]\n        batched_images_seq_mask = [sample[\"images_seq_mask\"] for sample in sample_list]\n        seq_lens = [len(sample) for sample in sample_list]\n\n        \"\"\"padding input_ids and images_seq_mask\"\"\"\n        if padding == \"left\":\n            # the tokenizer is default to pad at left\n            ## TODO, You're using a LlamaTokenizerFast tokenizer.\n            #   Please note that with a fast tokenizer, using the `__call__` method is faster than\n            #   using a method to encode the text followed by a call to the `pad` method to get a padded encoding.\n            padded_input_ids = self.tokenizer.pad({\"input_ids\": batched_input_ids})\n            batched_input_ids, batched_attention_mask = padded_input_ids[\"input_ids\"], padded_input_ids[\n                \"attention_mask\"].bool()\n            batched_labels = self.tokenizer.pad({\"input_ids\": batched_labels})[\"input_ids\"]\n            batched_labels[batched_labels == self.pad_id] = self.ignore_id  # labels正常不会出现pad_id，无需额外保护\n            batched_images_seq_mask = self.tokenizer.pad({\"input_ids\": batched_images_seq_mask})[\"input_ids\"]\n            batched_images_seq_mask[batched_images_seq_mask == self.pad_id] = False\n        else:\n            batched_input_ids = pad_sequence(batched_input_ids, batch_first=True, padding_value=self.pad_id)\n            batched_labels = pad_sequence(batched_labels, batch_first=True, padding_value=self.ignore_id)\n            batched_images_seq_mask = pad_sequence(batched_images_seq_mask, batch_first=True, padding_value=0)\n            batched_attention_mask = batched_input_ids != self.pad_id\n\n        \"\"\"padding images to max_patch_num\"\"\"\n        max_n_patches = max(sample[\"images\"].shape[0] for sample in sample_list)\n        batched_images = []\n        for sample in sample_list:\n            images = sample[\"images\"]\n            n_pads = max_n_patches - images.shape[0]\n            if n_pads > 0:\n                pad_images = torch.zeros((n_pads, *images.shape[1:]), dtype=images.dtype)\n                images = torch.cat([images, pad_images], dim=0)\n            batched_images.append(images)\n        batched_images = torch.stack(batched_images, dim=0)\n\n        \"\"\"padding images_spatial_crop to max_n_images\"\"\"\n        max_n_images = max(sample[\"images_spatial_crop\"].shape[0] for sample in sample_list)\n        batched_images_spatial_crop = []\n        for sample in sample_list:\n            images_spatial_crop = sample[\"images_spatial_crop\"]\n            n_pads = max_n_images - sample[\"images_spatial_crop\"].shape[0]\n            if n_pads > 0:\n                pad_images_spatial_crop = torch.full((n_pads, 2), 0, dtype=images_spatial_crop.dtype)\n                images_spatial_crop = torch.cat([images_spatial_crop, pad_images_spatial_crop], dim=0)\n            batched_images_spatial_crop.append(images_spatial_crop)\n        batched_images_spatial_crop = torch.stack(batched_images_spatial_crop, dim=0)\n\n        batched_samples = BatchCollateOutput(\n            input_ids=batched_input_ids,\n            attention_mask=batched_attention_mask,\n            labels=batched_labels,\n            images=batched_images,\n            images_seq_mask=batched_images_seq_mask,\n            images_spatial_crop=batched_images_spatial_crop,\n            sft_format=batched_sft_format,\n            seq_lens=seq_lens\n        )\n\n        return batched_samples\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/models/siglip_vit.py",
    "content": "# https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/vision_transformer.py\nfrom dataclasses import dataclass\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom typing import Final, Optional, Callable, Union, Tuple, List, Set, Dict, Type, Literal, Sequence\nimport math\nimport warnings\nfrom timm.layers import (\n    PatchEmbed, Mlp, DropPath,\n    AttentionPoolLatent, PatchDropout, resample_abs_pos_embed, LayerType\n)\nfrom timm.models._manipulate import named_apply, checkpoint_seq, adapt_input_conv\nfrom transformers.modeling_utils import is_flash_attn_2_available\nfrom functools import partial\n\n\nif is_flash_attn_2_available():\n    from flash_attn import flash_attn_qkvpacked_func\n\n\ndef _no_grad_trunc_normal_(tensor, mean, std, a, b):\n    # Cut & paste from PyTorch official master until it's in a few official releases - RW\n    # Method based on https://people.sc.fsu.edu/~jburkardt/presentations/truncated_normal.pdf\n    def norm_cdf(x):\n        # Computes standard normal cumulative distribution function\n        return (1.0 + math.erf(x / math.sqrt(2.0))) / 2.0\n\n    if (mean < a - 2 * std) or (mean > b + 2 * std):\n        warnings.warn(\n            \"mean is more than 2 std from [a, b] in nn.init.trunc_normal_. \"\n            \"The distribution of values may be incorrect.\",\n            stacklevel=2,\n        )\n\n    with torch.no_grad():\n        # Values are generated by using a truncated uniform distribution and\n        # then using the inverse CDF for the normal distribution.\n        # Get upper and lower cdf values\n        l = norm_cdf((a - mean) / std)  # noqa: E741\n        u = norm_cdf((b - mean) / std)\n\n        # Uniformly fill tensor with values from [l, u], then translate to\n        # [2l-1, 2u-1].\n        tensor.uniform_(2 * l - 1, 2 * u - 1)\n\n        # Use inverse cdf transform for normal distribution to get truncated\n        # standard normal\n        tensor.erfinv_()\n\n        # Transform to proper mean, std\n        tensor.mul_(std * math.sqrt(2.0))\n        tensor.add_(mean)\n\n        # Clamp to ensure it's in the proper range\n        tensor.clamp_(min=a, max=b)\n        return tensor\n\n\ndef trunc_normal_(tensor, mean=0.0, std=1.0, a=-2.0, b=2.0):\n    # type: (torch.Tensor, float, float, float, float) -> torch.Tensor\n    r\"\"\"The original timm.models.layers.weight_init.trunc_normal_ can not handle bfloat16 yet, here we first\n    convert the tensor to float32, apply the trunc_normal_() in float32, and then convert it back to its orignal dtype.\n    Fills the input Tensor with values drawn from a truncated normal distribution. The values are effectively drawn\n    from the normal distribution :math:`\\mathcal{N}(\\text{mean}, \\text{std}^2)`\n    with values outside :math:`[a, b]` redrawn until they are within\n    the bounds. The method used for generating the random values works\n    best when :math:`a \\leq \\text{mean} \\leq b`.\n    Args:\n        tensor: an n-dimensional `torch.Tensor`\n        mean: the mean of the normal distribution\n        std: the standard deviation of the normal distribution\n        a: the minimum cutoff value\n        b: the maximum cutoff value\n    Examples:\n        >>> w = torch.empty(3, 5)\n        >>> nn.init.trunc_normal_(w)\n    \"\"\"\n\n    with torch.no_grad():\n        dtype = tensor.dtype\n        tensor_fp32 = tensor.float()\n        tensor_fp32 = _no_grad_trunc_normal_(tensor_fp32, mean, std, a, b)\n        tensor_dtype = tensor_fp32.to(dtype=dtype)\n        tensor.copy_(tensor_dtype)\n\n\ndef init_weights(self):\n    if self.pos_embed is not None:\n        trunc_normal_(self.pos_embed, std=self.pos_embed.shape[1] ** -0.5)\n    trunc_normal_(self.latent, std=self.latent_dim ** -0.5)\n\n\ndef init_weights_vit_timm(module: nn.Module, name: str = '') -> None:\n    \"\"\" ViT weight initialization, original timm impl (for reproducibility) \"\"\"\n    if isinstance(module, nn.Linear):\n        trunc_normal_(module.weight, std=.02)\n        if module.bias is not None:\n            nn.init.zeros_(module.bias)\n    elif hasattr(module, 'init_weights'):\n        module.init_weights()\n\n\nclass Attention(nn.Module):\n    fused_attn: Final[bool]\n\n    def __init__(\n            self,\n            dim: int,\n            num_heads: int = 8,\n            qkv_bias: bool = False,\n            qk_norm: bool = False,\n            attn_drop: float = 0.,\n            proj_drop: float = 0.,\n            norm_layer: nn.Module = nn.LayerNorm,\n            deterministic: bool = False,\n    ) -> None:\n        super().__init__()\n        assert dim % num_heads == 0, 'dim should be divisible by num_heads'\n        self.num_heads = num_heads\n        self.head_dim = dim // num_heads\n        self.scale = self.head_dim ** -0.5\n        self.qk_norm = qk_norm\n        self.fused_attn = True\n        self.deterministic = deterministic\n\n        self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n        self.q_norm = norm_layer(self.head_dim) if qk_norm else nn.Identity()\n        self.k_norm = norm_layer(self.head_dim) if qk_norm else nn.Identity()\n        self.attn_drop = nn.Dropout(attn_drop)\n        self.proj = nn.Linear(dim, dim)\n        self.proj_drop = nn.Dropout(proj_drop) if proj_drop > 0. else nn.Identity()\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        from xformers.ops import memory_efficient_attention\n\n        B, N, C = x.shape\n        qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, self.head_dim)\n\n        if not self.qk_norm:\n            if self.head_dim % 32 == 0 and is_flash_attn_2_available():\n                # flashattn must have head_dim as a multiple of 32\n                x = flash_attn_qkvpacked_func(qkv, dropout_p=self.attn_drop.p if self.training else 0.,\n                                              deterministic=self.deterministic)\n            else:\n                q, k, v = qkv.unbind(2)\n                x = memory_efficient_attention(q, k, v, p=self.attn_drop.p if self.training else 0.)\n            x = x.reshape(B, N, C)\n            x = self.proj(x)\n            x = self.proj_drop(x)\n            return x\n\n        qkv = qkv.permute(2, 0, 3, 1, 4)\n        q, k, v = qkv.unbind(0)\n        q, k = self.q_norm(q), self.k_norm(k)\n\n        if self.fused_attn:\n            with torch.backends.cuda.sdp_kernel(enable_math=False, enable_mem_efficient=False):\n                # 用上下文的方式强行使用fa\n                x = F.scaled_dot_product_attention(\n                    q, k, v,\n                    dropout_p=self.attn_drop.p if self.training else 0.,\n                )\n        else:\n            q = q * self.scale\n            attn = q @ k.transpose(-2, -1)\n            attn = attn.softmax(dim=-1)\n            attn = self.attn_drop(attn)\n            x = attn @ v\n\n        x = x.transpose(1, 2).reshape(B, N, C)\n        x = self.proj(x)\n        x = self.proj_drop(x)\n        return x\n\n\nclass LayerScale(nn.Module):\n    def __init__(\n            self,\n            dim: int,\n            init_values: float = 1e-5,\n            inplace: bool = False,\n    ) -> None:\n        super().__init__()\n        self.inplace = inplace\n        self.gamma = nn.Parameter(init_values * torch.ones(dim))\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        return x.mul_(self.gamma) if self.inplace else x * self.gamma\n\n\nclass Block(nn.Module):\n    def __init__(\n            self,\n            dim: int,\n            num_heads: int,\n            mlp_ratio: float = 4.,\n            qkv_bias: bool = False,\n            qk_norm: bool = False,\n            proj_drop: float = 0.,\n            attn_drop: float = 0.,\n            init_values: Optional[float] = None,\n            drop_path: float = 0.,\n            act_layer: nn.Module = nn.GELU,\n            norm_layer: nn.Module = nn.LayerNorm,\n            mlp_layer: nn.Module = Mlp,\n            deterministic: bool = False,\n    ) -> None:\n        super().__init__()\n        self.norm1 = norm_layer(dim)\n        self.attn = Attention(\n            dim,\n            num_heads=num_heads,\n            qkv_bias=qkv_bias,\n            qk_norm=qk_norm,\n            attn_drop=attn_drop,\n            proj_drop=proj_drop,\n            norm_layer=norm_layer,\n            deterministic=deterministic,\n        )\n        self.ls1 = LayerScale(dim, init_values=init_values) if init_values else nn.Identity()\n        self.drop_path1 = DropPath(drop_path) if drop_path > 0. else nn.Identity()\n\n        self.norm2 = norm_layer(dim)\n        self.mlp = mlp_layer(\n            in_features=dim,\n            hidden_features=int(dim * mlp_ratio),\n            act_layer=act_layer,\n            drop=proj_drop,\n        )\n        self.ls2 = LayerScale(dim, init_values=init_values) if init_values else nn.Identity()\n        self.drop_path2 = DropPath(drop_path) if drop_path > 0. else nn.Identity()\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = x + self.drop_path1(self.ls1(self.attn(self.norm1(x))))\n        x = x + self.drop_path2(self.ls2(self.mlp(self.norm2(x))))\n        return x\n\n\nclass VisionTransformer(nn.Module):\n    \"\"\" Vision Transformer\n\n    A PyTorch impl of : `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale`\n        - https://arxiv.org/abs/2010.11929\n    \"\"\"\n    dynamic_img_size: Final[bool]\n\n    def __init__(\n            self,\n            img_size: Union[int, Tuple[int, int]] = 224,\n            patch_size: Union[int, Tuple[int, int]] = 16,\n            in_chans: int = 3,\n            num_classes: int = 1000,\n            global_pool: Literal['', 'avg', 'token', 'map'] = 'token',\n            embed_dim: int = 768,\n            depth: int = 12,\n            num_heads: int = 12,\n            mlp_ratio: float = 4.,\n            qkv_bias: bool = True,\n            qk_norm: bool = False,\n            init_values: Optional[float] = None,\n            class_token: bool = True,\n            no_embed_class: bool = False,\n            reg_tokens: int = 0,\n            pre_norm: bool = False,\n            fc_norm: Optional[bool] = None,\n            dynamic_img_size: bool = False,\n            dynamic_img_pad: bool = False,\n            drop_rate: float = 0.,\n            pos_drop_rate: float = 0.,\n            patch_drop_rate: float = 0.,\n            proj_drop_rate: float = 0.,\n            attn_drop_rate: float = 0.,\n            drop_path_rate: float = 0.,\n            weight_init: Literal['skip', 'jax', 'jax_nlhb', 'moco', ''] = '',\n            embed_layer: Callable = PatchEmbed,\n            norm_layer: Optional[LayerType] = None,\n            act_layer: Optional[LayerType] = None,\n            block_fn: Type[nn.Module] = Block,\n            mlp_layer: Type[nn.Module] = Mlp,\n            ignore_head: bool = False,\n            deterministic: bool = False,\n            num_recomputing_layers: int = 0\n    ) -> None:\n        \"\"\"\n        Args:\n            img_size: Input image size.\n            patch_size: Patch size.\n            in_chans: Number of image input channels.\n            num_classes: Mumber of classes for classification head.\n            global_pool: Type of global pooling for final sequence (default: 'token').\n            embed_dim: Transformer embedding dimension.\n            depth: Depth of transformer.\n            num_heads: Number of attention heads.\n            mlp_ratio: Ratio of mlp hidden dim to embedding dim.\n            qkv_bias: Enable bias for qkv projections if True.\n            init_values: Layer-scale init values (layer-scale enabled if not None).\n            class_token: Use class token.\n            no_embed_class: Don't include position embeddings for class (or reg) tokens.\n            reg_tokens: Number of register tokens.\n            fc_norm: Pre head norm after pool (instead of before), if None, enabled when global_pool == 'avg'.\n            drop_rate: Head dropout rate.\n            pos_drop_rate: Position embedding dropout rate.\n            attn_drop_rate: Attention dropout rate.\n            drop_path_rate: Stochastic depth rate.\n            weight_init: Weight initialization scheme.\n            embed_layer: Patch embedding layer.\n            norm_layer: Normalization layer.\n            act_layer: MLP activation layer.\n            block_fn: Transformer block layer.\n        \"\"\"\n        super().__init__()\n        assert global_pool in ('', 'avg', 'token', 'map')\n        assert class_token or global_pool != 'token'\n        use_fc_norm = global_pool == 'avg' if fc_norm is None else fc_norm\n        # norm_layer = get_norm_layer(norm_layer) or partial(nn.LayerNorm, eps=1e-6)\n        # act_layer = get_act_layer(act_layer) or nn.GELU\n        norm_layer = partial(nn.LayerNorm, eps=1e-6)\n        # siglip use PytorchGELUTanh() rather than the vanilla nn.GELU()\n        # https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/siglip/configuration_siglip.py#L191\n        act_layer = partial(nn.GELU, approximate='tanh')\n\n        self.num_classes = num_classes\n        self.global_pool = global_pool\n        self.num_features = self.embed_dim = embed_dim  # num_features for consistency with other models\n        self.num_prefix_tokens = 1 if class_token else 0\n        self.num_prefix_tokens += reg_tokens\n        self.num_reg_tokens = reg_tokens\n        self.has_class_token = class_token\n        self.no_embed_class = no_embed_class  # don't embed prefix positions (includes reg)\n        self.dynamic_img_size = dynamic_img_size\n        self.grad_checkpointing = False\n        self.ignore_head = ignore_head\n        self.num_recomputing_layers = num_recomputing_layers\n\n        embed_args = {}\n        if dynamic_img_size:\n            # flatten deferred until after pos embed\n            embed_args.update(dict(strict_img_size=False, output_fmt='NHWC'))\n        self.patch_embed = embed_layer(\n            img_size=img_size,\n            patch_size=patch_size,\n            in_chans=in_chans,\n            embed_dim=embed_dim,\n            bias=not pre_norm,  # disable bias if pre-norm is used (e.g. CLIP)\n            dynamic_img_pad=dynamic_img_pad,\n            **embed_args,\n        )\n        num_patches = self.patch_embed.num_patches\n\n        self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) if class_token else None\n        self.reg_token = nn.Parameter(torch.zeros(1, reg_tokens, embed_dim)) if reg_tokens else None\n        embed_len = num_patches if no_embed_class else num_patches + self.num_prefix_tokens\n        self.pos_embed = nn.Parameter(torch.randn(1, embed_len, embed_dim) * .02)\n        self.pos_drop = nn.Dropout(p=pos_drop_rate)\n        if patch_drop_rate > 0:\n            self.patch_drop = PatchDropout(\n                patch_drop_rate,\n                num_prefix_tokens=self.num_prefix_tokens,\n            )\n        else:\n            self.patch_drop = nn.Identity()\n        self.norm_pre = norm_layer(embed_dim) if pre_norm else nn.Identity()\n\n        dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)]  # stochastic depth decay rule\n        self.blocks = nn.Sequential(*[\n            block_fn(\n                dim=embed_dim,\n                num_heads=num_heads,\n                mlp_ratio=mlp_ratio,\n                qkv_bias=qkv_bias,\n                qk_norm=qk_norm,\n                init_values=init_values,\n                proj_drop=proj_drop_rate,\n                attn_drop=attn_drop_rate,\n                drop_path=dpr[i],\n                norm_layer=norm_layer,\n                act_layer=act_layer,\n                mlp_layer=mlp_layer,\n                deterministic=deterministic,\n            )\n            for i in range(depth)])\n        self.norm = norm_layer(embed_dim) if not use_fc_norm else nn.Identity()\n\n        # Classifier Head\n        if global_pool == 'map':\n            AttentionPoolLatent.init_weights = init_weights\n            self.attn_pool = AttentionPoolLatent(\n                self.embed_dim,\n                num_heads=num_heads,\n                mlp_ratio=mlp_ratio,\n                norm_layer=norm_layer,\n            )\n        else:\n            self.attn_pool = None\n        self.fc_norm = norm_layer(embed_dim) if use_fc_norm else nn.Identity()\n        self.head_drop = nn.Dropout(drop_rate)\n        self.head = nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity()\n\n        if weight_init != 'skip':\n            self.init_weights(weight_init)\n\n    def init_weights(self, mode: Literal['jax', 'jax_nlhb', 'moco', ''] = '') -> None:\n        assert mode in ('jax', 'jax_nlhb', 'moco', '')\n        head_bias = -math.log(self.num_classes) if 'nlhb' in mode else 0.\n        trunc_normal_(self.pos_embed, std=.02)\n        if self.cls_token is not None:\n            nn.init.normal_(self.cls_token, std=1e-6)\n        named_apply(init_weights_vit_timm, self)\n\n    @torch.jit.ignore\n    def no_weight_decay(self) -> Set:\n        return {'pos_embed', 'cls_token', 'dist_token'}\n\n    @torch.jit.ignore\n    def group_matcher(self, coarse: bool = False) -> Dict:\n        return dict(\n            stem=r'^cls_token|pos_embed|patch_embed',  # stem and embed\n            blocks=[(r'^blocks\\.(\\d+)', None), (r'^norm', (99999,))]\n        )\n\n    @torch.jit.ignore\n    def set_grad_checkpointing(self, enable: bool = True) -> None:\n        self.grad_checkpointing = enable\n\n    @torch.jit.ignore\n    def get_classifier(self) -> nn.Module:\n        return self.head\n\n    def reset_classifier(self, num_classes: int, global_pool=None) -> None:\n        self.num_classes = num_classes\n        if global_pool is not None:\n            assert global_pool in ('', 'avg', 'token', 'map')\n            if global_pool == 'map' and self.attn_pool is None:\n                assert False, \"Cannot currently add attention pooling in reset_classifier().\"\n            elif global_pool != 'map ' and self.attn_pool is not None:\n                self.attn_pool = None  # remove attention pooling\n            self.global_pool = global_pool\n        self.head = nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity()\n\n    def _pos_embed(self, x: torch.Tensor) -> torch.Tensor:\n        if self.dynamic_img_size:\n            B, H, W, C = x.shape\n            pos_embed = resample_abs_pos_embed(\n                self.pos_embed,\n                (H, W),\n                num_prefix_tokens=0 if self.no_embed_class else self.num_prefix_tokens,\n            )\n            x = x.view(B, -1, C)\n        else:\n            pos_embed = self.pos_embed\n\n        to_cat = []\n        if self.cls_token is not None:\n            to_cat.append(self.cls_token.expand(x.shape[0], -1, -1))\n        if self.reg_token is not None:\n            to_cat.append(self.reg_token.expand(x.shape[0], -1, -1))\n\n        if self.no_embed_class:\n            # deit-3, updated JAX (big vision)\n            # position embedding does not overlap with class token, add then concat\n            x = x + pos_embed\n            if to_cat:\n                x = torch.cat(to_cat + [x], dim=1)\n        else:\n            # original timm, JAX, and deit vit impl\n            # pos_embed has entry for class token, concat then add\n            if to_cat:\n                x = torch.cat(to_cat + [x], dim=1)\n            x = x + pos_embed\n\n        return self.pos_drop(x)\n\n    def _intermediate_layers(\n            self,\n            x: torch.Tensor,\n            n: Union[int, Sequence] = 1,\n    ) -> List[torch.Tensor]:\n        outputs, num_blocks = [], len(self.blocks)\n        take_indices = set(range(num_blocks - n, num_blocks) if isinstance(n, int) else n)\n\n        # forward pass\n        x = self.patch_embed(x)\n        x = self._pos_embed(x)\n        x = self.patch_drop(x)\n        x = self.norm_pre(x)\n        for i, blk in enumerate(self.blocks):\n            x = blk(x)\n            if i in take_indices:\n                outputs.append(x)\n\n        return outputs\n\n    def get_intermediate_layers(\n            self,\n            x: torch.Tensor,\n            n: Union[int, Sequence] = 1,\n            reshape: bool = False,\n            return_prefix_tokens: bool = False,\n            norm: bool = False,\n    ) -> Tuple[Union[torch.Tensor, Tuple[torch.Tensor]]]:\n        \"\"\" Intermediate layer accessor (NOTE: This is a WIP experiment).\n        Inspired by DINO / DINOv2 interface\n        \"\"\"\n        # take last n blocks if n is an int, if in is a sequence, select by matching indices\n        outputs = self._intermediate_layers(x, n)\n        if norm:\n            outputs = [self.norm(out) for out in outputs]\n        prefix_tokens = [out[:, 0:self.num_prefix_tokens] for out in outputs]\n        outputs = [out[:, self.num_prefix_tokens:] for out in outputs]\n\n        if reshape:\n            grid_size = self.patch_embed.grid_size\n            outputs = [\n                out.reshape(x.shape[0], grid_size[0], grid_size[1], -1).permute(0, 3, 1, 2).contiguous()\n                for out in outputs\n            ]\n\n        if return_prefix_tokens:\n            return tuple(zip(outputs, prefix_tokens))\n        return tuple(outputs)\n\n    def forward_features(self, x: torch.Tensor) -> torch.Tensor:\n        if getattr(self, \"is_first_stage\", True):\n            x = self.patch_embed(x)\n            x = self._pos_embed(x)\n            x = self.patch_drop(x)\n            x = self.norm_pre(x)\n        if self.grad_checkpointing and not torch.jit.is_scripting():\n            skip_last = max(1, len(self.blocks) - self.num_recomputing_layers)\n            x = checkpoint_seq(self.blocks, x, skip_last=skip_last)\n        else:\n            x = self.blocks(x)\n        if getattr(self, \"is_last_stage\", True):\n            x = self.norm(x)\n        return x\n\n    def forward_head(self, x: torch.Tensor, pre_logits: bool = False) -> torch.Tensor:\n        if not getattr(self, \"is_last_stage\", True):\n            return x\n        if self.attn_pool is not None:\n            x = self.attn_pool(x)\n        elif self.global_pool == 'avg':\n            x = x[:, self.num_prefix_tokens:].mean(dim=1)\n        elif self.global_pool:\n            x = x[:, 0]  # class token\n        x = self.fc_norm(x)\n        x = self.head_drop(x)\n        return x if pre_logits else self.head(x)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.forward_features(x)\n        if not self.ignore_head:\n            x = self.forward_head(x)\n        return x\n\n    def to_pipeline(self, pp_size, pp_rank, pp_splits: Optional[List[int]] = None):\n        self.is_first_stage = pp_rank == 0\n        self.is_last_stage = pp_rank == pp_size - 1\n        if not self.is_first_stage and hasattr(self, \"patch_embed\"):\n            del self.patch_embed, self.cls_token, self.reg_token, self.pos_embed, self.pos_drop, self.patch_drop, self.norm_pre\n        if not self.is_last_stage and hasattr(self, \"norm\"):\n            del self.norm, self.attn_pool, self.fc_norm, self.head_drop, self.head\n        if pp_splits is not None:\n            assert len(self.blocks) == sum(pp_splits)\n            splits = np.cumsum([0] + pp_splits)\n            self.blocks = self.blocks[splits[pp_rank]:splits[pp_rank + 1]]\n        return self\n\n\n@dataclass\nclass SigLIPVisionCfg:\n    width: int = 1152\n    layers: Union[Tuple[int, int, int, int], int] = 27\n    heads: int = 16\n    patch_size: int = 14\n    image_size: Union[Tuple[int, int], int] = 336\n    global_pool: str = \"map\"\n    mlp_ratio: float = 3.7362\n    class_token: bool = False\n    num_classes: int = 0\n    use_checkpoint: bool = False\n\n\nSigLIP_MODEL_CONFIG = {\n    \"siglip_so400m_patch14_384\": {\n        \"image_size\": 384,\n        \"patch_size\": 14,\n        \"width\": 1152,\n        \"layers\": 27,\n        \"heads\": 16,\n        \"mlp_ratio\": 3.7362,\n        \"global_pool\": \"map\",\n        \"use_checkpoint\": False\n    },\n\n    \"siglip_so400m_patch14_224\": {\n        \"image_size\": 224,\n        \"patch_size\": 14,\n        \"width\": 1152,\n        \"layers\": 27,\n        \"heads\": 16,\n        \"mlp_ratio\": 3.7362,\n        \"global_pool\": \"map\",\n        \"use_checkpoint\": False\n    },\n\n    \"siglip_large_patch16_384\": {\n        \"image_size\": 384,\n        \"patch_size\": 16,\n        \"width\": 1024,\n        \"layers\": 24,\n        \"heads\": 16,\n        \"mlp_ratio\": 4,\n        \"global_pool\": \"map\",\n        \"use_checkpoint\": False\n    }\n}\n\n\ndef create_siglip_vit(\n        model_name: str = \"siglip_so400m_patch14_384\",\n        image_size: int = 384,\n        select_layer: int = -1,\n        ckpt_path: str = \"\",\n        **kwargs\n):\n    assert model_name in SigLIP_MODEL_CONFIG.keys(), f\"model name should be in {SigLIP_MODEL_CONFIG.keys()}\"\n\n    vision_cfg = SigLIPVisionCfg(**SigLIP_MODEL_CONFIG[model_name])\n\n    if select_layer <= 0:\n        layers = min(vision_cfg.layers, vision_cfg.layers + select_layer + 1)\n    else:\n        layers = min(vision_cfg.layers, select_layer)\n\n    model = VisionTransformer(\n        img_size=image_size,\n        patch_size=vision_cfg.patch_size,\n        embed_dim=vision_cfg.width,\n        depth=layers,\n        num_heads=vision_cfg.heads,\n        mlp_ratio=vision_cfg.mlp_ratio,\n        class_token=vision_cfg.class_token,\n        global_pool=vision_cfg.global_pool,\n        ignore_head=kwargs.get(\"ignore_head\", True),\n        weight_init=kwargs.get(\"weight_init\", \"skip\"),\n        num_classes=0,\n        deterministic=kwargs.get(\"deterministic\", False),\n        num_recomputing_layers=kwargs.get(\"num_recomputing_layers\", 0)\n    )\n\n    if ckpt_path:\n        state_dict = torch.load(ckpt_path, map_location=\"cpu\")\n\n        incompatible_keys = model.load_state_dict(state_dict, strict=False)\n        print(f\"SigLIP-ViT restores from {ckpt_path},\\n\"\n              f\"\\tincompatible_keys:', {incompatible_keys}.\")\n\n    return model\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/app_modules/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/app_modules/gradio_utils.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom functools import wraps\n\nimport gradio as gr\n\n\ndef wrap_gen_fn(gen_fn):\n    @wraps(gen_fn)\n    def wrapped_gen_fn(prompt, *args, **kwargs):\n        try:\n            yield from gen_fn(prompt, *args, **kwargs)\n        except gr.Error as g_err:\n            raise g_err\n        except Exception as e:\n            raise gr.Error(f\"Failed to generate text: {e}\") from e\n\n    return wrapped_gen_fn\n\n\ndef delete_last_conversation(chatbot, history):\n    if len(history) % 2 != 0:\n        gr.Error(\"history length is not even\")\n        return (\n            chatbot,\n            history,\n            \"Delete Done\",\n        )\n\n    if len(chatbot) > 0:\n        chatbot.pop()\n\n    if len(history) > 0 and len(history) % 2 == 0:\n        history.pop()\n        history.pop()\n\n    return (\n        chatbot,\n        history,\n        \"Delete Done\",\n    )\n\n\ndef reset_state():\n    return [], [], None, \"Reset Done\"\n\n\ndef reset_textbox():\n    return gr.update(value=\"\"), \"\"\n\n\ndef cancel_outputing():\n    return \"Stop Done\"\n\n\nclass State:\n    interrupted = False\n\n    def interrupt(self):\n        self.interrupted = True\n\n    def recover(self):\n        self.interrupted = False\n\n\nshared_state = State()\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/app_modules/overwrites.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom __future__ import annotations\n\nimport logging\nfrom typing import List, Tuple\n\nfrom deepseek_vl2.serve.app_modules.presets import gr\nfrom deepseek_vl2.serve.app_modules.utils import convert_asis, convert_mdtext, detect_converted_mark\n\n\ndef compact_text_chunks(self, prompt, text_chunks: List[str]) -> List[str]:\n    logging.debug(\"Compacting text chunks...🚀🚀🚀\")\n    combined_str = [c.strip() for c in text_chunks if c.strip()]\n    combined_str = [f\"[{index+1}] {c}\" for index, c in enumerate(combined_str)]\n    combined_str = \"\\n\\n\".join(combined_str)\n    # resplit based on self.max_chunk_overlap\n    text_splitter = self.get_text_splitter_given_prompt(prompt, 1, padding=1)\n    return text_splitter.split_text(combined_str)\n\n\ndef postprocess(\n    self, y: List[Tuple[str | None, str | None]]\n) -> List[Tuple[str | None, str | None]]:\n    \"\"\"\n    Parameters:\n        y: List of tuples representing the message and response pairs. Each message and response should be a string, which may be in Markdown format.\n    Returns:\n        List of tuples representing the message and response. Each message and response will be a string of HTML.\n    \"\"\"\n    if y is None or y == []:\n        return []\n    temp = []\n    for x in y:\n        user, bot = x\n        if not detect_converted_mark(user):\n            user = convert_asis(user)\n        if not detect_converted_mark(bot):\n            bot = convert_mdtext(bot)\n        temp.append((user, bot))\n    return temp\n\n\nwith open(\"deepseek_vl2/serve/assets/custom.js\", \"r\", encoding=\"utf-8\") as f, open(\n    \"deepseek_vl2/serve/assets/Kelpy-Codos.js\", \"r\", encoding=\"utf-8\"\n) as f2:\n    customJS = f.read()\n    kelpyCodos = f2.read()\n\n\ndef reload_javascript():\n    print(\"Reloading javascript...\")\n    js = f\"<script>{customJS}</script><script>{kelpyCodos}</script>\"\n\n    def template_response(*args, **kwargs):\n        res = GradioTemplateResponseOriginal(*args, **kwargs)\n        res.body = res.body.replace(b\"</html>\", f\"{js}</html>\".encode(\"utf8\"))\n        res.init_headers()\n        return res\n\n    gr.routes.templates.TemplateResponse = template_response\n\n\nGradioTemplateResponseOriginal = gr.routes.templates.TemplateResponse\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/app_modules/presets.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n# -*- coding:utf-8 -*-\nimport gradio as gr\n\ntitle = \"\"\"<h1 align=\"left\" style=\"min-width:200px; margin-top:0;\">Chat with DeepSeek-VL2 </h1>\"\"\"\ndescription_top = \"\"\"Special Tokens: `<image>`,     Visual Grounding: `<|ref|>{query}<|/ref|>`,    Grounding Conversation: `<|grounding|>{question}`\"\"\"\ndescription = \"\"\"\"\"\"\nCONCURRENT_COUNT = 1\nMAX_EVENTS = 10\nMAX_IMAGE_SIZE = 800\nMIN_IMAGE_SIZE = 400\n\nBOX2COLOR = {\n    0: (255, 0, 0),\n    1: (0, 255, 0),\n    2: (0, 0, 255),\n    3: (0, 255, 255),\n    4: (255, 255, 0),\n    5: (255, 0, 255),\n    6: (127, 127, 127),\n    7: (255, 255, 127),\n    8: (255, 127, 255),\n    9: (127, 255, 255),\n    10: (127, 127, 255),\n    11: (127, 255, 127),\n    12: (255, 127, 127),\n}\n\n\nALREADY_CONVERTED_MARK = \"<!-- ALREADY CONVERTED BY PARSER. -->\"\n\nsmall_and_beautiful_theme = gr.themes.Soft(\n    primary_hue=gr.themes.Color(\n        c50=\"#EBFAF2\",\n        c100=\"#CFF3E1\",\n        c200=\"#A8EAC8\",\n        c300=\"#77DEA9\",\n        c400=\"#3FD086\",\n        c500=\"#02C160\",\n        c600=\"#06AE56\",\n        c700=\"#05974E\",\n        c800=\"#057F45\",\n        c900=\"#04673D\",\n        c950=\"#2E5541\",\n        name=\"small_and_beautiful\",\n    ),\n    secondary_hue=gr.themes.Color(\n        c50=\"#576b95\",\n        c100=\"#576b95\",\n        c200=\"#576b95\",\n        c300=\"#576b95\",\n        c400=\"#576b95\",\n        c500=\"#576b95\",\n        c600=\"#576b95\",\n        c700=\"#576b95\",\n        c800=\"#576b95\",\n        c900=\"#576b95\",\n        c950=\"#576b95\",\n    ),\n    neutral_hue=gr.themes.Color(\n        name=\"gray\",\n        c50=\"#f6f7f8\",\n        # c100=\"#f3f4f6\",\n        c100=\"#F2F2F2\",\n        c200=\"#e5e7eb\",\n        c300=\"#d1d5db\",\n        c400=\"#B2B2B2\",\n        c500=\"#808080\",\n        c600=\"#636363\",\n        c700=\"#515151\",\n        c800=\"#393939\",\n        # c900=\"#272727\",\n        c900=\"#2B2B2B\",\n        c950=\"#171717\",\n    ),\n    radius_size=gr.themes.sizes.radius_sm,\n).set(\n    # button_primary_background_fill=\"*primary_500\",\n    button_primary_background_fill_dark=\"*primary_600\",\n    # button_primary_background_fill_hover=\"*primary_400\",\n    # button_primary_border_color=\"*primary_500\",\n    button_primary_border_color_dark=\"*primary_600\",\n    button_primary_text_color=\"white\",\n    button_primary_text_color_dark=\"white\",\n    button_secondary_background_fill=\"*neutral_100\",\n    button_secondary_background_fill_hover=\"*neutral_50\",\n    button_secondary_background_fill_dark=\"*neutral_900\",\n    button_secondary_text_color=\"*neutral_800\",\n    button_secondary_text_color_dark=\"white\",\n    # background_fill_primary=\"#F7F7F7\",\n    # background_fill_primary_dark=\"#1F1F1F\",\n    # block_title_text_color=\"*primary_500\",\n    block_title_background_fill_dark=\"*primary_900\",\n    block_label_background_fill_dark=\"*primary_900\",\n    input_background_fill=\"#F6F6F6\",\n    # chatbot_code_background_color_dark=\"*neutral_950\",\n)\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/app_modules/utils.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n# -*- coding:utf-8 -*-\nfrom __future__ import annotations\n\nimport html\nimport logging\nimport io\nimport os\nimport re\nimport base64\nimport time\nfrom PIL import Image, ImageDraw, ImageFont\n\nimport mdtex2html\nfrom markdown import markdown\nfrom pygments import highlight\nfrom pygments.formatters import HtmlFormatter\nfrom pygments.lexers import ClassNotFound, get_lexer_by_name, guess_lexer\n\nfrom deepseek_vl2.serve.app_modules.presets import (\n    ALREADY_CONVERTED_MARK,\n    BOX2COLOR,\n    MAX_IMAGE_SIZE,\n    MIN_IMAGE_SIZE\n)\n\nlogger = logging.getLogger(\"gradio_logger\")\n\n\ndef configure_logger():\n    logger = logging.getLogger(\"gradio_logger\")\n    logger.setLevel(logging.DEBUG)\n\n    timestr = time.strftime(\"%Y%m%d-%H%M%S\")\n    os.makedirs(\"deepseek_vl2/serve/logs\", exist_ok=True)\n    file_handler = logging.FileHandler(\n        f\"deepseek_vl2/serve/logs/{timestr}_gradio_log.log\"\n    )\n    console_handler = logging.StreamHandler()\n\n    formatter = logging.Formatter(\n        \"%(asctime)s - %(name)s - %(levelname)s - %(message)s\"\n    )\n    console_handler.setFormatter(formatter)\n    file_handler.setFormatter(formatter)\n\n    console_handler.setLevel(logging.INFO)\n    file_handler.setLevel(logging.INFO)\n\n    logger.addHandler(console_handler)\n    logger.addHandler(file_handler)\n\n    return logger\n\n\ndef strip_stop_words(x, stop_words):\n    for w in stop_words:\n        if w in x:\n            return x[: x.index(w)].strip()\n    return x.strip()\n\n\ndef format_output(history, text, x):\n    updated_history = history + [[text, x]]\n    a = [[y[0], convert_to_markdown(y[1])] for y in updated_history]\n    return a, updated_history\n\n\ndef markdown_to_html_with_syntax_highlight(md_str):  # deprecated\n    def replacer(match):\n        lang = match.group(1) or \"text\"\n        code = match.group(2)\n\n        try:\n            lexer = get_lexer_by_name(lang, stripall=True)\n        except ValueError:\n            lexer = get_lexer_by_name(\"text\", stripall=True)\n\n        formatter = HtmlFormatter()\n        highlighted_code = highlight(code, lexer, formatter)\n\n        return f'<pre><code class=\"{lang}\">{highlighted_code}</code></pre>'\n\n    code_block_pattern = r\"```(\\w+)?\\n([\\s\\S]+?)\\n```\"\n    md_str = re.sub(code_block_pattern, replacer, md_str, flags=re.MULTILINE)\n\n    html_str = markdown(md_str)\n    return html_str\n\n\ndef normalize_markdown(md_text: str) -> str:  # deprecated\n    lines = md_text.split(\"\\n\")\n    normalized_lines = []\n    inside_list = False\n\n    for i, line in enumerate(lines):\n        if re.match(r\"^(\\d+\\.|-|\\*|\\+)\\s\", line.strip()):\n            if not inside_list and i > 0 and lines[i - 1].strip() != \"\":\n                normalized_lines.append(\"\")\n            inside_list = True\n            normalized_lines.append(line)\n        elif inside_list and line.strip() == \"\":\n            if i < len(lines) - 1 and not re.match(\n                r\"^(\\d+\\.|-|\\*|\\+)\\s\", lines[i + 1].strip()\n            ):\n                normalized_lines.append(line)\n            continue\n        else:\n            inside_list = False\n            normalized_lines.append(line)\n\n    return \"\\n\".join(normalized_lines)\n\n\ndef convert_mdtext(md_text):\n    code_block_pattern = re.compile(r\"```(.*?)(?:```|$)\", re.DOTALL)\n    inline_code_pattern = re.compile(r\"`(.*?)`\", re.DOTALL)\n    code_blocks = code_block_pattern.findall(md_text)\n    non_code_parts = code_block_pattern.split(md_text)[::2]\n\n    result = []\n    for non_code, code in zip(non_code_parts, code_blocks + [\"\"]):\n        if non_code.strip():\n            non_code = normalize_markdown(non_code)\n            if inline_code_pattern.search(non_code):\n                result.append(markdown(non_code, extensions=[\"tables\"]))\n            else:\n                result.append(mdtex2html.convert(non_code, extensions=[\"tables\"]))\n        if code.strip():\n            code = f\"\\n```{code}\\n\\n```\"\n            code = markdown_to_html_with_syntax_highlight(code)\n            result.append(code)\n    result = \"\".join(result)\n    result += ALREADY_CONVERTED_MARK\n    return result\n\n\ndef convert_asis(userinput):\n    return f'<p style=\"white-space:pre-wrap;\">{html.escape(userinput)}</p>{ALREADY_CONVERTED_MARK}'\n\n\ndef is_stop_word_or_prefix(s: str, stop_words: list) -> bool:\n    return any(s.endswith(stop_word) for stop_word in stop_words)\n\n\ndef detect_converted_mark(userinput):\n    return bool(userinput.endswith(ALREADY_CONVERTED_MARK))\n\n\ndef detect_language(code):\n    first_line = \"\" if code.startswith(\"\\n\") else code.strip().split(\"\\n\", 1)[0]\n    language = first_line.lower() if first_line else \"\"\n    code_without_language = code[len(first_line) :].lstrip() if first_line else code\n    return language, code_without_language\n\n\ndef convert_to_markdown(text):\n    text = text.replace(\"$\", \"&#36;\")\n    text = text.replace(\"\\r\\n\", \"\\n\")\n\n    def replace_leading_tabs_and_spaces(line):\n        new_line = []\n\n        for char in line:\n            if char == \"\\t\":\n                new_line.append(\"&#9;\")\n            elif char == \" \":\n                new_line.append(\"&nbsp;\")\n            else:\n                break\n        return \"\".join(new_line) + line[len(new_line) :]\n\n    markdown_text = \"\"\n    lines = text.split(\"\\n\")\n    in_code_block = False\n\n    for line in lines:\n        if in_code_block is False and line.startswith(\"```\"):\n            in_code_block = True\n            markdown_text += f\"{line}\\n\"\n        elif in_code_block is True and line.startswith(\"```\"):\n            in_code_block = False\n            markdown_text += f\"{line}\\n\"\n        elif in_code_block:\n            markdown_text += f\"{line}\\n\"\n        else:\n            line = replace_leading_tabs_and_spaces(line)\n            line = re.sub(r\"^(#)\", r\"\\\\\\1\", line)\n            markdown_text += f\"{line}  \\n\"\n\n    return markdown_text\n\n\ndef add_language_tag(text):\n    def detect_language(code_block):\n        try:\n            lexer = guess_lexer(code_block)\n            return lexer.name.lower()\n        except ClassNotFound:\n            return \"\"\n\n    code_block_pattern = re.compile(r\"(```)(\\w*\\n[^`]+```)\", re.MULTILINE)\n\n    def replacement(match):\n        code_block = match.group(2)\n        if match.group(2).startswith(\"\\n\"):\n            language = detect_language(code_block)\n            return (\n                f\"```{language}{code_block}```\" if language else f\"```\\n{code_block}```\"\n            )\n        else:\n            return match.group(1) + code_block + \"```\"\n\n    text2 = code_block_pattern.sub(replacement, text)\n    return text2\n\n\ndef is_variable_assigned(var_name: str) -> bool:\n    return var_name in locals()\n\n\ndef pil_to_base64(\n    image: Image.Image,\n    alt: str = \"user upload image\",\n    resize: bool = True,\n    max_size: int = MAX_IMAGE_SIZE,\n    min_size: int = MIN_IMAGE_SIZE,\n    format: str = \"JPEG\",\n    quality: int = 95\n) -> str:\n\n    if resize:\n        max_hw, min_hw = max(image.size), min(image.size)\n        aspect_ratio = max_hw / min_hw\n        shortest_edge = int(min(max_size / aspect_ratio, min_size, min_hw))\n        longest_edge = int(shortest_edge * aspect_ratio)\n        W, H = image.size\n        if H > W:\n            H, W = longest_edge, shortest_edge\n        else:\n            H, W = shortest_edge, longest_edge\n        image = image.resize((W, H))\n\n    buffered = io.BytesIO()\n    image.save(buffered, format=format, quality=quality)\n    img_b64_str = base64.b64encode(buffered.getvalue()).decode()\n    img_str = f'<img src=\"data:image/png;base64,{img_b64_str}\" alt=\"{alt}\" />'\n\n    return img_str\n\n\ndef parse_ref_bbox(response, image: Image.Image):\n    try:\n        image = image.copy()\n        image_w, image_h = image.size\n        draw = ImageDraw.Draw(image)\n\n        ref = re.findall(r'<\\|ref\\|>.*?<\\|/ref\\|>', response)\n        bbox = re.findall(r'<\\|det\\|>.*?<\\|/det\\|>', response)\n        assert len(ref) == len(bbox)\n\n        if len(ref) == 0:\n            return None\n\n        boxes, labels = [], []\n        for box, label in zip(bbox, ref):\n            box = box.replace('<|det|>', '').replace('<|/det|>', '')\n            label = label.replace('<|ref|>', '').replace('<|/ref|>', '')\n            box = box[1:-1]\n            for onebox in re.findall(r'\\[.*?\\]', box):\n                boxes.append(eval(onebox))\n                labels.append(label)\n\n        for indice, (box, label) in enumerate(zip(boxes, labels)):\n            box = (\n                int(box[0] / 999 * image_w),\n                int(box[1] / 999 * image_h),\n                int(box[2] / 999 * image_w),\n                int(box[3] / 999 * image_h),\n            )\n\n            box_color = BOX2COLOR[indice % len(BOX2COLOR.keys())]\n            box_width = 3\n            draw.rectangle(box, outline=box_color, width=box_width)\n\n            text_x = box[0]\n            text_y = box[1] - 20\n            text_color = box_color\n            font = ImageFont.truetype(\"deepseek_vl2/serve/assets/simsun.ttc\", size=20)\n            draw.text((text_x, text_y), label, font=font, fill=text_color)\n\n        # print(f\"boxes = {boxes}, labels = {labels}, re-render = {image}\")\n        return image\n    except Exception:\n        return None\n\n\ndef display_example(image_list):\n    images_html = \"\"\n    for i, img_path in enumerate(image_list):\n        image = Image.open(img_path)\n        buffered = io.BytesIO()\n        image.save(buffered, format=\"PNG\", quality=100)\n        img_b64_str = base64.b64encode(buffered.getvalue()).decode()\n        img_str = f'<img src=\"data:image/png;base64,{img_b64_str}\" alt=\"{img_path}\" style=\"height:80px; margin-right: 10px;\" />'\n        images_html += img_str\n\n    result_html = f\"\"\"\n    <div style=\"display: flex; align-items: center; margin-bottom: 10px;\">\n        <div style=\"flex: 1; margin-right: 10px;\">{images_html}</div>\n    </div>\n    \"\"\"\n\n    return result_html\n\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/assets/Kelpy-Codos.js",
    "content": "/**\n * Copyright (c) 2023-2024 DeepSeek.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// ==UserScript==\n// @name         Kelpy Codos\n// @namespace    https://github.com/Keldos-Li/Kelpy-Codos\n// @version      1.0.5\n// @author       Keldos; https://keldos.me/\n// @description  Add copy button to PRE tags before CODE tag, for Chuanhu ChatGPT especially.\n//               Based on Chuanhu ChatGPT version: ac04408 (2023-3-22)\n// @license      GPL-3.0\n// @grant        none\n// ==/UserScript==\n\n(function () {\n  \"use strict\";\n\n  function addCopyButton(pre) {\n    var code = pre.querySelector(\"code\");\n    if (!code) {\n      return; // 如果没有找到 <code> 元素，则不添加按钮\n    }\n    var firstChild = code.firstChild;\n    if (!firstChild) {\n      return; // 如果 <code> 元素没有子节点，则不添加按钮\n    }\n    var button = document.createElement(\"button\");\n    button.textContent = \"\\uD83D\\uDCCE\"; // 使用 📎 符号作为“复制”按钮的文本\n    button.style.position = \"relative\";\n    button.style.float = \"right\";\n    button.style.fontSize = \"1em\"; // 可选：调整按钮大小\n    button.style.background = \"none\"; // 可选：去掉背景颜色\n    button.style.border = \"none\"; // 可选：去掉边框\n    button.style.cursor = \"pointer\"; // 可选：显示指针样式\n    button.addEventListener(\"click\", function () {\n      var range = document.createRange();\n      range.selectNodeContents(code);\n      range.setStartBefore(firstChild); // 将范围设置为第一个子节点之前\n      var selection = window.getSelection();\n      selection.removeAllRanges();\n      selection.addRange(range);\n\n      try {\n        var success = document.execCommand(\"copy\");\n        if (success) {\n          button.textContent = \"\\u2714\";\n          setTimeout(function () {\n            button.textContent = \"\\uD83D\\uDCCE\"; // 恢复按钮为“复制”\n          }, 2000);\n        } else {\n          button.textContent = \"\\u2716\";\n        }\n      } catch (e) {\n        console.error(e);\n        button.textContent = \"\\u2716\";\n      }\n\n      selection.removeAllRanges();\n    });\n    code.insertBefore(button, firstChild); // 将按钮插入到第一个子元素之前\n  }\n\n  function handleNewElements(mutationsList, observer) {\n    for (var mutation of mutationsList) {\n      if (mutation.type === \"childList\") {\n        for (var node of mutation.addedNodes) {\n          if (node.nodeName === \"PRE\") {\n            addCopyButton(node);\n          }\n        }\n      }\n    }\n  }\n\n  var observer = new MutationObserver(handleNewElements);\n  observer.observe(document.documentElement, {\n    childList: true,\n    subtree: true,\n  });\n\n  document.querySelectorAll(\"pre\").forEach(addCopyButton);\n})();\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/assets/custom.css",
    "content": "/**\n * Copyright (c) 2023-2024 DeepSeek.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n:root {\n  --chatbot-color-light: #f3f3f3;\n  --chatbot-color-dark: #121111;\n}\n\n/* status_display */\n#status_display {\n  display: flex;\n  min-height: 2.5em;\n  align-items: flex-end;\n  justify-content: flex-end;\n}\n#status_display p {\n  font-size: 0.85em;\n  font-family: monospace;\n  color: var(--body-text-color-subdued);\n}\n\n/* usage_display */\n#usage_display {\n  height: 1em;\n}\n#usage_display p {\n  padding: 0 1em;\n  font-size: 0.85em;\n  font-family: monospace;\n  color: var(--body-text-color-subdued);\n}\n/* list */\nol:not(.options),\nul:not(.options) {\n  padding-inline-start: 2em !important;\n}\n\n/* Thank @Keldos-Li for fixing it */\n/* Light mode (default) */\n#deepseek_chatbot {\n  background-color: var(--chatbot-color-light) !important;\n  color: #000000 !important;\n}\n[data-testid=\"bot\"] {\n  background-color: #ffffff !important;\n}\n[data-testid=\"user\"] {\n  background-color: #95ec69 !important;\n}\n\n/* Dark mode */\n.dark #deepseek_chatbot {\n  background-color: var(--chatbot-color-dark) !important;\n  color: #ffffff !important;\n}\n.dark [data-testid=\"bot\"] {\n  background-color: #2c2c2c !important;\n}\n.dark [data-testid=\"user\"] {\n  background-color: #26b561 !important;\n}\n\n#deepseek_chatbot {\n  height: 100%;\n  min-height: 800px;\n  flex-grow: 1;\n  overflow: auto;\n}\n\n[class*=\"message\"] {\n  border-radius: var(--radius-xl) !important;\n  border: none;\n  padding: var(--spacing-xl) !important;\n  font-size: var(--text-md) !important;\n  line-height: var(--line-md) !important;\n  min-height: calc(var(--text-md) * var(--line-md) + 2 * var(--spacing-xl));\n  min-width: calc(var(--text-md) * var(--line-md) + 2 * var(--spacing-xl));\n}\n[data-testid=\"bot\"] {\n  max-width: 85%;\n  border-bottom-left-radius: 0 !important;\n}\n[data-testid=\"user\"] {\n  max-width: 85%;\n  width: auto !important;\n  border-bottom-right-radius: 0 !important;\n}\n/* Table */\ntable {\n  margin: 1em 0;\n  border-collapse: collapse;\n  empty-cells: show;\n}\ntd,\nth {\n  border: 1.2px solid var(--border-color-primary) !important;\n  padding: 0.2em;\n}\nthead {\n  background-color: rgba(175, 184, 193, 0.2);\n}\nthead th {\n  padding: 0.5em 0.2em;\n}\n/* Inline code */\n#deepseek_chatbot code {\n  display: inline;\n  white-space: break-spaces;\n  border-radius: 6px;\n  margin: 0 2px 0 2px;\n  padding: 0.2em 0.4em 0.1em 0.4em;\n  background-color: rgba(175, 184, 193, 0.2);\n}\n/* Code block */\n#deepseek_chatbot pre code {\n  display: block;\n  overflow: auto;\n  white-space: pre;\n  background-color: #1c1d1e !important;\n  border-radius: 10px;\n  padding: 1.4em 1.2em 0em 1.4em;\n  margin: 1.2em 2em 1.2em 0.5em;\n  color: #fdf8f8;\n  box-shadow: 6px 6px 16px hsla(0, 0%, 0%, 0.2);\n}\n/* Hightlight */\n#deepseek_chatbot .highlight {\n  background-color: transparent;\n}\n#deepseek_chatbot .highlight .hll {\n  background-color: #49483e;\n}\n#deepseek_chatbot .highlight .c {\n  color: #75715e;\n} /* Comment */\n#deepseek_chatbot .highlight .err {\n  color: #960050;\n  background-color: #1e0010;\n} /* Error */\n#deepseek_chatbot .highlight .k {\n  color: #66d9ef;\n} /* Keyword */\n#deepseek_chatbot .highlight .l {\n  color: #ae81ff;\n} /* Literal */\n#deepseek_chatbot .highlight .n {\n  color: #f8f8f2;\n} /* Name */\n#deepseek_chatbot .highlight .o {\n  color: #f92672;\n} /* Operator */\n#deepseek_chatbot .highlight .p {\n  color: #f8f8f2;\n} /* Punctuation */\n#deepseek_chatbot .highlight .ch {\n  color: #75715e;\n} /* Comment.Hashbang */\n#deepseek_chatbot .highlight .cm {\n  color: #75715e;\n} /* Comment.Multiline */\n#deepseek_chatbot .highlight .cp {\n  color: #75715e;\n} /* Comment.Preproc */\n#deepseek_chatbot .highlight .cpf {\n  color: #75715e;\n} /* Comment.PreprocFile */\n#deepseek_chatbot .highlight .c1 {\n  color: #75715e;\n} /* Comment.Single */\n#deepseek_chatbot .highlight .cs {\n  color: #75715e;\n} /* Comment.Special */\n#deepseek_chatbot .highlight .gd {\n  color: #f92672;\n} /* Generic.Deleted */\n#deepseek_chatbot .highlight .ge {\n  font-style: italic;\n} /* Generic.Emph */\n#deepseek_chatbot .highlight .gi {\n  color: #a6e22e;\n} /* Generic.Inserted */\n#deepseek_chatbot .highlight .gs {\n  font-weight: bold;\n} /* Generic.Strong */\n#deepseek_chatbot .highlight .gu {\n  color: #75715e;\n} /* Generic.Subheading */\n#deepseek_chatbot .highlight .kc {\n  color: #66d9ef;\n} /* Keyword.Constant */\n#deepseek_chatbot .highlight .kd {\n  color: #66d9ef;\n} /* Keyword.Declaration */\n#deepseek_chatbot .highlight .kn {\n  color: #f92672;\n} /* Keyword.Namespace */\n#deepseek_chatbot .highlight .kp {\n  color: #66d9ef;\n} /* Keyword.Pseudo */\n#deepseek_chatbot .highlight .kr {\n  color: #66d9ef;\n} /* Keyword.Reserved */\n#deepseek_chatbot .highlight .kt {\n  color: #66d9ef;\n} /* Keyword.Type */\n#deepseek_chatbot .highlight .ld {\n  color: #e6db74;\n} /* Literal.Date */\n#deepseek_chatbot .highlight .m {\n  color: #ae81ff;\n} /* Literal.Number */\n#deepseek_chatbot .highlight .s {\n  color: #e6db74;\n} /* Literal.String */\n#deepseek_chatbot .highlight .na {\n  color: #a6e22e;\n} /* Name.Attribute */\n#deepseek_chatbot .highlight .nb {\n  color: #f8f8f2;\n} /* Name.Builtin */\n#deepseek_chatbot .highlight .nc {\n  color: #a6e22e;\n} /* Name.Class */\n#deepseek_chatbot .highlight .no {\n  color: #66d9ef;\n} /* Name.Constant */\n#deepseek_chatbot .highlight .nd {\n  color: #a6e22e;\n} /* Name.Decorator */\n#deepseek_chatbot .highlight .ni {\n  color: #f8f8f2;\n} /* Name.Entity */\n#deepseek_chatbot .highlight .ne {\n  color: #a6e22e;\n} /* Name.Exception */\n#deepseek_chatbot .highlight .nf {\n  color: #a6e22e;\n} /* Name.Function */\n#deepseek_chatbot .highlight .nl {\n  color: #f8f8f2;\n} /* Name.Label */\n#deepseek_chatbot .highlight .nn {\n  color: #f8f8f2;\n} /* Name.Namespace */\n#deepseek_chatbot .highlight .nx {\n  color: #a6e22e;\n} /* Name.Other */\n#deepseek_chatbot .highlight .py {\n  color: #f8f8f2;\n} /* Name.Property */\n#deepseek_chatbot .highlight .nt {\n  color: #f92672;\n} /* Name.Tag */\n#deepseek_chatbot .highlight .nv {\n  color: #f8f8f2;\n} /* Name.Variable */\n#deepseek_chatbot .highlight .ow {\n  color: #f92672;\n} /* Operator.Word */\n#deepseek_chatbot .highlight .w {\n  color: #f8f8f2;\n} /* Text.Whitespace */\n#deepseek_chatbot .highlight .mb {\n  color: #ae81ff;\n} /* Literal.Number.Bin */\n#deepseek_chatbot .highlight .mf {\n  color: #ae81ff;\n} /* Literal.Number.Float */\n#deepseek_chatbot .highlight .mh {\n  color: #ae81ff;\n} /* Literal.Number.Hex */\n#deepseek_chatbot .highlight .mi {\n  color: #ae81ff;\n} /* Literal.Number.Integer */\n#deepseek_chatbot .highlight .mo {\n  color: #ae81ff;\n} /* Literal.Number.Oct */\n#deepseek_chatbot .highlight .sa {\n  color: #e6db74;\n} /* Literal.String.Affix */\n#deepseek_chatbot .highlight .sb {\n  color: #e6db74;\n} /* Literal.String.Backtick */\n#deepseek_chatbot .highlight .sc {\n  color: #e6db74;\n} /* Literal.String.Char */\n#deepseek_chatbot .highlight .dl {\n  color: #e6db74;\n} /* Literal.String.Delimiter */\n#deepseek_chatbot .highlight .sd {\n  color: #e6db74;\n} /* Literal.String.Doc */\n#deepseek_chatbot .highlight .s2 {\n  color: #e6db74;\n} /* Literal.String.Double */\n#deepseek_chatbot .highlight .se {\n  color: #ae81ff;\n} /* Literal.String.Escape */\n#deepseek_chatbot .highlight .sh {\n  color: #e6db74;\n} /* Literal.String.Heredoc */\n#deepseek_chatbot .highlight .si {\n  color: #e6db74;\n} /* Literal.String.Interpol */\n#deepseek_chatbot .highlight .sx {\n  color: #e6db74;\n} /* Literal.String.Other */\n#deepseek_chatbot .highlight .sr {\n  color: #e6db74;\n} /* Literal.String.Regex */\n#deepseek_chatbot .highlight .s1 {\n  color: #e6db74;\n} /* Literal.String.Single */\n#deepseek_chatbot .highlight .ss {\n  color: #e6db74;\n} /* Literal.String.Symbol */\n#deepseek_chatbot .highlight .bp {\n  color: #f8f8f2;\n} /* Name.Builtin.Pseudo */\n#deepseek_chatbot .highlight .fm {\n  color: #a6e22e;\n} /* Name.Function.Magic */\n#deepseek_chatbot .highlight .vc {\n  color: #f8f8f2;\n} /* Name.Variable.Class */\n#deepseek_chatbot .highlight .vg {\n  color: #f8f8f2;\n} /* Name.Variable.Global */\n#deepseek_chatbot .highlight .vi {\n  color: #f8f8f2;\n} /* Name.Variable.Instance */\n#deepseek_chatbot .highlight .vm {\n  color: #f8f8f2;\n} /* Name.Variable.Magic */\n#deepseek_chatbot .highlight .il {\n  color: #ae81ff;\n} /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/assets/custom.js",
    "content": "/**\n * Copyright (c) 2023-2024 DeepSeek.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// custom javascript here\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/serve/inference.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfrom threading import Thread\nfrom typing import List\n\nimport torch\nimport transformers\nfrom transformers import (\n    AutoModelForCausalLM,\n    StoppingCriteria,\n    StoppingCriteriaList,\n    TextIteratorStreamer,\n)\n\nfrom deepseek_vl2.models import DeepseekVLV2Processor, DeepseekVLV2ForCausalLM\nfrom deepseek_vl2.models.conversation import Conversation\n\n\ndef load_model(model_path, dtype=torch.bfloat16):\n    vl_chat_processor = DeepseekVLV2Processor.from_pretrained(model_path)\n    tokenizer = vl_chat_processor.tokenizer\n\n    vl_gpt: DeepseekVLV2ForCausalLM = AutoModelForCausalLM.from_pretrained(\n        model_path, trust_remote_code=True, torch_dtype=dtype\n    )\n    vl_gpt = vl_gpt.cuda().eval()\n    return tokenizer, vl_gpt, vl_chat_processor\n\n\ndef convert_conversation_to_prompts(conversation: Conversation):\n    conv_prompts = []\n\n    last_image = None\n\n    messages = conversation.messages\n    for i in range(0, len(messages), 2):\n\n        if isinstance(messages[i][1], tuple):\n            text, images = messages[i][1]\n            last_image = images[-1]\n        else:\n            text, images = messages[i][1], []\n\n        prompt = {\n            \"role\": messages[i][0],\n            \"content\": text,\n            \"images\": images\n        }\n        response = {\"role\": messages[i + 1][0], \"content\": messages[i + 1][1]}\n        conv_prompts.extend([prompt, response])\n\n    return conv_prompts, last_image\n\n\nclass StoppingCriteriaSub(StoppingCriteria):\n    def __init__(self, stops=[], encounters=1):\n        super().__init__()\n        self.stops = [stop.to(\"cuda\") for stop in stops]\n\n    def __call__(\n        self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs\n    ):\n        for stop in self.stops:\n            if input_ids.shape[-1] < len(stop):\n                continue\n            if torch.all((stop == input_ids[0][-len(stop) :])).item():\n                return True\n\n        return False\n\n\n@torch.inference_mode()\ndef deepseek_generate(\n    conversations: list,\n    vl_gpt: torch.nn.Module,\n    vl_chat_processor: DeepseekVLV2Processor,\n    tokenizer: transformers.PreTrainedTokenizer,\n    stop_words: list,\n    max_length: int = 256,\n    temperature: float = 1.0,\n    top_p: float = 1.0,\n    repetition_penalty: float = 1.1,\n    chunk_size: int = -1\n):\n    pil_images = []\n    for message in conversations:\n        if \"images\" not in message:\n            continue\n        pil_images.extend(message[\"images\"])\n\n    prepare_inputs = vl_chat_processor.__call__(\n        conversations=conversations,\n        images=pil_images,\n        inference_mode=True,\n        force_batchify=True,\n        system_prompt=\"\"\n    ).to(vl_gpt.device)\n\n    return generate(\n        vl_gpt,\n        tokenizer,\n        prepare_inputs,\n        max_gen_len=max_length,\n        temperature=temperature,\n        repetition_penalty=repetition_penalty,\n        top_p=top_p,\n        stop_words=stop_words,\n        chunk_size=chunk_size\n    )\n\n\n@torch.inference_mode()\ndef generate(\n    vl_gpt,\n    tokenizer,\n    prepare_inputs,\n    max_gen_len: int = 256,\n    temperature: float = 0,\n    repetition_penalty=1.1,\n    top_p: float = 0.95,\n    stop_words: List[str] = [],\n    chunk_size: int = -1\n):\n    \"\"\"Stream the text output from the multimodality model with prompt and image inputs.\"\"\"\n    streamer = TextIteratorStreamer(tokenizer, skip_prompt=True)\n\n    stop_words_ids = [\n        torch.tensor(tokenizer.encode(stop_word)) for stop_word in stop_words\n    ]\n    stopping_criteria = StoppingCriteriaList(\n        [StoppingCriteriaSub(stops=stop_words_ids)]\n    )\n\n    if chunk_size != -1:\n        inputs_embeds, past_key_values = vl_gpt.incremental_prefilling(\n            input_ids=prepare_inputs.input_ids,\n            images=prepare_inputs.images,\n            images_seq_mask=prepare_inputs.images_seq_mask,\n            images_spatial_crop=prepare_inputs.images_spatial_crop,\n            attention_mask=prepare_inputs.attention_mask,\n            chunk_size=chunk_size\n        )\n    else:\n        inputs_embeds = vl_gpt.prepare_inputs_embeds(**prepare_inputs)\n        past_key_values = None\n\n    generation_config = dict(\n        inputs_embeds=inputs_embeds,\n        input_ids=prepare_inputs.input_ids,\n        images=prepare_inputs.images,\n        images_seq_mask=prepare_inputs.images_seq_mask,\n        images_spatial_crop=prepare_inputs.images_spatial_crop,\n        attention_mask=prepare_inputs.attention_mask,\n        past_key_values=past_key_values,\n        pad_token_id=tokenizer.eos_token_id,\n        bos_token_id=tokenizer.bos_token_id,\n        eos_token_id=tokenizer.eos_token_id,\n        max_new_tokens=max_gen_len,\n        do_sample=True,\n        use_cache=True,\n        streamer=streamer,\n        stopping_criteria=stopping_criteria,\n    )\n\n    if temperature > 0:\n        generation_config.update(\n            {\n                \"do_sample\": True,\n                \"top_p\": top_p,\n                \"temperature\": temperature,\n                \"repetition_penalty\": repetition_penalty,\n            }\n        )\n    else:\n        generation_config[\"do_sample\"] = False\n\n    thread = Thread(target=vl_gpt.generate, kwargs=generation_config)\n    thread.start()\n\n    yield from streamer\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/utils/__init__.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "xinference/thirdparty/deepseek_vl2/utils/io.py",
    "content": "# Copyright (c) 2023-2024 DeepSeek.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy of\n# this software and associated documentation files (the \"Software\"), to deal in\n# the Software without restriction, including without limitation the rights to\n# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n# the Software, and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport json\nfrom typing import Dict, List\n\nimport PIL.Image\nimport torch\nfrom transformers import AutoModelForCausalLM\n\n\ndef load_pretrained_model(model_path: str):\n\n    from deepseek_vl2.models.processing_deepseek_vl_v2 import DeepseekVLV2Processor\n    from deepseek_vl2.models.modeling_deepseek_vl_v2 import DeepseekVLV2ForCausalLM\n\n    vl_chat_processor = DeepseekVLV2Processor.from_pretrained(model_path)\n    tokenizer = vl_chat_processor.tokenizer\n\n    vl_gpt: DeepseekVLV2ForCausalLM = AutoModelForCausalLM.from_pretrained(\n        model_path, trust_remote_code=True\n    )\n    vl_gpt = vl_gpt.to(torch.bfloat16).cuda().eval()\n\n    return tokenizer, vl_chat_processor, vl_gpt\n\n\ndef load_pil_images(conversations: List[Dict[str, str]]) -> List[PIL.Image.Image]:\n    \"\"\"\n\n    Args:\n        conversations (List[Dict[str, str]]): the conversations with a list of messages. An example is :\n            [\n                {\n                    \"role\": \"User\",\n                    \"content\": \"<image>\\nExtract all information from this image and convert them into markdown format.\",\n                    \"images\": [\"./examples/table_datasets.png\"]\n                },\n                {\"role\": \"Assistant\", \"content\": \"\"},\n            ]\n\n    Returns:\n        pil_images (List[PIL.Image.Image]): the list of PIL images.\n\n    \"\"\"\n\n    pil_images = []\n\n    for message in conversations:\n        if \"images\" not in message:\n            continue\n\n        for image_path in message[\"images\"]:\n            pil_img = PIL.Image.open(image_path)\n            pil_img = pil_img.convert(\"RGB\")\n            pil_images.append(pil_img)\n\n    return pil_images\n\n\ndef load_json(filepath):\n    with open(filepath, \"r\") as f:\n        data = json.load(f)\n        return data\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/f5_tts/api.py",
    "content": "import random\nimport sys\nfrom importlib.resources import files\n\nimport soundfile as sf\nimport tqdm\nfrom cached_path import cached_path\n\nfrom f5_tts.infer.utils_infer import (\n    hop_length,\n    infer_process,\n    load_model,\n    load_vocoder,\n    preprocess_ref_audio_text,\n    remove_silence_for_generated_wav,\n    save_spectrogram,\n    transcribe,\n    target_sample_rate,\n)\nfrom f5_tts.model import DiT, UNetT\nfrom f5_tts.model.utils import seed_everything\n\n\nclass F5TTS:\n    def __init__(\n        self,\n        model_type=\"F5-TTS\",\n        ckpt_file=\"\",\n        vocab_file=\"\",\n        ode_method=\"euler\",\n        use_ema=True,\n        vocoder_name=\"vocos\",\n        local_path=None,\n        device=None,\n        hf_cache_dir=None,\n    ):\n        # Initialize parameters\n        self.final_wave = None\n        self.target_sample_rate = target_sample_rate\n        self.hop_length = hop_length\n        self.seed = -1\n        self.mel_spec_type = vocoder_name\n\n        # Set device\n        if device is not None:\n            self.device = device\n        else:\n            import torch\n\n            self.device = \"cuda\" if torch.cuda.is_available() else \"mps\" if torch.backends.mps.is_available() else \"cpu\"\n\n        # Load models\n        self.load_vocoder_model(vocoder_name, local_path=local_path, hf_cache_dir=hf_cache_dir)\n        self.load_ema_model(\n            model_type, ckpt_file, vocoder_name, vocab_file, ode_method, use_ema, hf_cache_dir=hf_cache_dir\n        )\n\n    def load_vocoder_model(self, vocoder_name, local_path=None, hf_cache_dir=None):\n        self.vocoder = load_vocoder(vocoder_name, local_path is not None, local_path, self.device, hf_cache_dir)\n\n    def load_ema_model(self, model_type, ckpt_file, mel_spec_type, vocab_file, ode_method, use_ema, hf_cache_dir=None):\n        if model_type == \"F5-TTS\":\n            if not ckpt_file:\n                if mel_spec_type == \"vocos\":\n                    ckpt_file = str(\n                        cached_path(\"hf://SWivid/F5-TTS/F5TTS_Base/model_1200000.safetensors\", cache_dir=hf_cache_dir)\n                    )\n                elif mel_spec_type == \"bigvgan\":\n                    ckpt_file = str(\n                        cached_path(\"hf://SWivid/F5-TTS/F5TTS_Base_bigvgan/model_1250000.pt\", cache_dir=hf_cache_dir)\n                    )\n            model_cfg = dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)\n            model_cls = DiT\n        elif model_type == \"E2-TTS\":\n            if not ckpt_file:\n                ckpt_file = str(\n                    cached_path(\"hf://SWivid/E2-TTS/E2TTS_Base/model_1200000.safetensors\", cache_dir=hf_cache_dir)\n                )\n            model_cfg = dict(dim=1024, depth=24, heads=16, ff_mult=4)\n            model_cls = UNetT\n        else:\n            raise ValueError(f\"Unknown model type: {model_type}\")\n\n        self.ema_model = load_model(\n            model_cls, model_cfg, ckpt_file, mel_spec_type, vocab_file, ode_method, use_ema, self.device\n        )\n\n    def transcribe(self, ref_audio, language=None):\n        return transcribe(ref_audio, language)\n\n    def export_wav(self, wav, file_wave, remove_silence=False):\n        sf.write(file_wave, wav, self.target_sample_rate)\n\n        if remove_silence:\n            remove_silence_for_generated_wav(file_wave)\n\n    def export_spectrogram(self, spect, file_spect):\n        save_spectrogram(spect, file_spect)\n\n    def infer(\n        self,\n        ref_file,\n        ref_text,\n        gen_text,\n        show_info=print,\n        progress=tqdm,\n        target_rms=0.1,\n        cross_fade_duration=0.15,\n        sway_sampling_coef=-1,\n        cfg_strength=2,\n        nfe_step=32,\n        speed=1.0,\n        fix_duration=None,\n        remove_silence=False,\n        file_wave=None,\n        file_spect=None,\n        seed=-1,\n    ):\n        if seed == -1:\n            seed = random.randint(0, sys.maxsize)\n        seed_everything(seed)\n        self.seed = seed\n\n        ref_file, ref_text = preprocess_ref_audio_text(ref_file, ref_text, device=self.device)\n\n        wav, sr, spect = infer_process(\n            ref_file,\n            ref_text,\n            gen_text,\n            self.ema_model,\n            self.vocoder,\n            self.mel_spec_type,\n            show_info=show_info,\n            progress=progress,\n            target_rms=target_rms,\n            cross_fade_duration=cross_fade_duration,\n            nfe_step=nfe_step,\n            cfg_strength=cfg_strength,\n            sway_sampling_coef=sway_sampling_coef,\n            speed=speed,\n            fix_duration=fix_duration,\n            device=self.device,\n        )\n\n        if file_wave is not None:\n            self.export_wav(wav, file_wave, remove_silence)\n\n        if file_spect is not None:\n            self.export_spectrogram(spect, file_spect)\n\n        return wav, sr, spect\n\n\nif __name__ == \"__main__\":\n    f5tts = F5TTS()\n\n    wav, sr, spect = f5tts.infer(\n        ref_file=str(files(\"f5_tts\").joinpath(\"infer/examples/basic/basic_ref_en.wav\")),\n        ref_text=\"some call me nature, others call me mother nature.\",\n        gen_text=\"\"\"I don't really care what you call me. I've been a silent spectator, watching species evolve, empires rise and fall. But always remember, I am mighty and enduring. Respect me and I'll nurture you; ignore me and you shall face the consequences.\"\"\",\n        file_wave=str(files(\"f5_tts\").joinpath(\"../../tests/api_out.wav\")),\n        file_spect=str(files(\"f5_tts\").joinpath(\"../../tests/api_out.png\")),\n        seed=-1,  # random seed = -1\n    )\n\n    print(\"seed :\", f5tts.seed)\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/configs/E2TTS_Base_train.yaml",
    "content": "hydra:\n  run:\n    dir: ckpts/${model.name}_${model.mel_spec.mel_spec_type}_${model.tokenizer}_${datasets.name}/${now:%Y-%m-%d}/${now:%H-%M-%S}\n    \ndatasets:\n  name: Emilia_ZH_EN  # dataset name\n  batch_size_per_gpu: 38400  # 8 GPUs, 8 * 38400 = 307200\n  batch_size_type: frame  # \"frame\" or \"sample\"\n  max_samples: 64  # max sequences per batch if use frame-wise batch_size. we set 32 for small models, 64 for base models\n  num_workers: 16\n\noptim:\n  epochs: 15\n  learning_rate: 7.5e-5\n  num_warmup_updates: 20000  # warmup steps\n  grad_accumulation_steps: 1  # note: updates = steps / grad_accumulation_steps\n  max_grad_norm: 1.0  # gradient clipping\n  bnb_optimizer: False  # use bnb 8bit AdamW optimizer or not\n\nmodel:\n  name: E2TTS_Base\n  tokenizer: pinyin\n  tokenizer_path: None  # if tokenizer = 'custom', define the path to the tokenizer you want to use (should be vocab.txt)\n  arch:\n    dim: 1024\n    depth: 24\n    heads: 16\n    ff_mult: 4\n  mel_spec:\n    target_sample_rate: 24000\n    n_mel_channels: 100\n    hop_length: 256\n    win_length: 1024\n    n_fft: 1024\n    mel_spec_type: vocos  # 'vocos' or 'bigvgan'\n  vocoder:\n    is_local: False  # use local offline ckpt or not\n    local_path: None  # local vocoder path\n\nckpts:\n  logger: wandb  # wandb | tensorboard | None\n  save_per_updates: 50000  # save checkpoint per steps\n  last_per_steps: 5000  # save last checkpoint per steps\n  save_dir: ckpts/${model.name}_${model.mel_spec.mel_spec_type}_${model.tokenizer}_${datasets.name}/${now:%Y-%m-%d}/${now:%H-%M-%S}"
  },
  {
    "path": "xinference/thirdparty/f5_tts/configs/E2TTS_Small_train.yaml",
    "content": "hydra:\n  run:\n    dir: ckpts/${model.name}_${model.mel_spec.mel_spec_type}_${model.tokenizer}_${datasets.name}/${now:%Y-%m-%d}/${now:%H-%M-%S}\n    \ndatasets:\n  name: Emilia_ZH_EN\n  batch_size_per_gpu: 38400  # 8 GPUs, 8 * 38400 = 307200\n  batch_size_type: frame  # \"frame\" or \"sample\"\n  max_samples: 64  # max sequences per batch if use frame-wise batch_size. we set 32 for small models, 64 for base models\n  num_workers: 16\n\noptim:\n  epochs: 15\n  learning_rate: 7.5e-5\n  num_warmup_updates: 20000  # warmup steps\n  grad_accumulation_steps: 1  # note: updates = steps / grad_accumulation_steps\n  max_grad_norm: 1.0\n  bnb_optimizer: False  \n\nmodel:\n  name: E2TTS_Small\n  tokenizer: pinyin\n  tokenizer_path: None  # if tokenizer = 'custom', define the path to the tokenizer you want to use (should be vocab.txt)\n  arch:\n    dim: 768\n    depth: 20\n    heads: 12\n    ff_mult: 4\n  mel_spec:\n    target_sample_rate: 24000\n    n_mel_channels: 100\n    hop_length: 256\n    win_length: 1024\n    n_fft: 1024\n    mel_spec_type: vocos  # 'vocos' or 'bigvgan'\n  vocoder:\n    is_local: False  # use local offline ckpt or not\n    local_path: None  # local vocoder path\n\nckpts:\n  logger: wandb  # wandb | tensorboard | None\n  save_per_updates: 50000  # save checkpoint per steps\n  last_per_steps: 5000  # save last checkpoint per steps\n  save_dir: ckpts/${model.name}_${model.mel_spec.mel_spec_type}_${model.tokenizer}_${datasets.name}/${now:%Y-%m-%d}/${now:%H-%M-%S}"
  },
  {
    "path": "xinference/thirdparty/f5_tts/configs/F5TTS_Base_train.yaml",
    "content": "hydra:\n  run:\n    dir: ckpts/${model.name}_${model.mel_spec.mel_spec_type}_${model.tokenizer}_${datasets.name}/${now:%Y-%m-%d}/${now:%H-%M-%S}\n    \ndatasets:\n  name: Emilia_ZH_EN  # dataset name\n  batch_size_per_gpu: 38400  # 8 GPUs, 8 * 38400 = 307200\n  batch_size_type: frame  # \"frame\" or \"sample\"\n  max_samples: 64  # max sequences per batch if use frame-wise batch_size. we set 32 for small models, 64 for base models\n  num_workers: 16\n\noptim:\n  epochs: 15\n  learning_rate: 7.5e-5\n  num_warmup_updates: 20000  # warmup steps\n  grad_accumulation_steps: 1  # note: updates = steps / grad_accumulation_steps\n  max_grad_norm: 1.0  # gradient clipping\n  bnb_optimizer: False  # use bnb 8bit AdamW optimizer or not\n\nmodel:\n  name: F5TTS_Base  # model name\n  tokenizer: pinyin  # tokenizer type\n  tokenizer_path: None  # if tokenizer = 'custom', define the path to the tokenizer you want to use (should be vocab.txt)\n  arch:\n    dim: 1024\n    depth: 22\n    heads: 16\n    ff_mult: 2\n    text_dim: 512\n    conv_layers: 4\n  mel_spec:\n    target_sample_rate: 24000\n    n_mel_channels: 100\n    hop_length: 256\n    win_length: 1024\n    n_fft: 1024\n    mel_spec_type: vocos  # 'vocos' or 'bigvgan'\n  vocoder:\n    is_local: False  # use local offline ckpt or not\n    local_path: None  # local vocoder path\n\nckpts:\n  logger: wandb  # wandb | tensorboard | None\n  save_per_updates: 50000  # save checkpoint per steps\n  last_per_steps: 5000  # save last checkpoint per steps\n  save_dir: ckpts/${model.name}_${model.mel_spec.mel_spec_type}_${model.tokenizer}_${datasets.name}/${now:%Y-%m-%d}/${now:%H-%M-%S}"
  },
  {
    "path": "xinference/thirdparty/f5_tts/configs/F5TTS_Small_train.yaml",
    "content": "hydra:\n  run:\n    dir: ckpts/${model.name}_${model.mel_spec.mel_spec_type}_${model.tokenizer}_${datasets.name}/${now:%Y-%m-%d}/${now:%H-%M-%S}\n    \ndatasets:\n  name: Emilia_ZH_EN\n  batch_size_per_gpu: 38400  # 8 GPUs, 8 * 38400 = 307200\n  batch_size_type: frame  # \"frame\" or \"sample\"\n  max_samples: 64  # max sequences per batch if use frame-wise batch_size. we set 32 for small models, 64 for base models\n  num_workers: 16\n\noptim:\n  epochs: 15\n  learning_rate: 7.5e-5\n  num_warmup_updates: 20000  # warmup steps\n  grad_accumulation_steps: 1  # note: updates = steps / grad_accumulation_steps\n  max_grad_norm: 1.0  # gradient clipping\n  bnb_optimizer: False  # use bnb 8bit AdamW optimizer or not\n\nmodel:\n  name: F5TTS_Small\n  tokenizer: pinyin\n  tokenizer_path: None  # if tokenizer = 'custom', define the path to the tokenizer you want to use (should be vocab.txt)\n  arch:\n    dim: 768\n    depth: 18\n    heads: 12\n    ff_mult: 2\n    text_dim: 512\n    conv_layers: 4\n  mel_spec:\n    target_sample_rate: 24000\n    n_mel_channels: 100\n    hop_length: 256\n    win_length: 1024\n    n_fft: 1024\n    mel_spec_type: vocos  # 'vocos' or 'bigvgan'\n  vocoder:\n    is_local: False  # use local offline ckpt or not\n    local_path: None  # local vocoder path\n\nckpts:\n  logger: wandb  # wandb | tensorboard | None\n  save_per_updates: 50000  # save checkpoint per steps\n  last_per_steps: 5000  # save last checkpoint per steps\n  save_dir: ckpts/${model.name}_${model.mel_spec.mel_spec_type}_${model.tokenizer}_${datasets.name}/${now:%Y-%m-%d}/${now:%H-%M-%S}"
  },
  {
    "path": "xinference/thirdparty/f5_tts/eval/README.md",
    "content": "\n# Evaluation\n\nInstall packages for evaluation:\n\n```bash\npip install -e .[eval]\n```\n\n## Generating Samples for Evaluation\n\n### Prepare Test Datasets\n\n1. *Seed-TTS testset*: Download from [seed-tts-eval](https://github.com/BytedanceSpeech/seed-tts-eval).\n2. *LibriSpeech test-clean*: Download from [OpenSLR](http://www.openslr.org/12/).\n3. Unzip the downloaded datasets and place them in the `data/` directory.\n4. Update the path for *LibriSpeech test-clean* data in `src/f5_tts/eval/eval_infer_batch.py`\n5. Our filtered LibriSpeech-PC 4-10s subset: `data/librispeech_pc_test_clean_cross_sentence.lst`\n\n### Batch Inference for Test Set\n\nTo run batch inference for evaluations, execute the following commands:\n\n```bash\n# batch inference for evaluations\naccelerate config  # if not set before\nbash src/f5_tts/eval/eval_infer_batch.sh\n```\n\n## Objective Evaluation on Generated Results\n\n### Download Evaluation Model Checkpoints\n\n1. Chinese ASR Model: [Paraformer-zh](https://huggingface.co/funasr/paraformer-zh)\n2. English ASR Model: [Faster-Whisper](https://huggingface.co/Systran/faster-whisper-large-v3)\n3. WavLM Model: Download from [Google Drive](https://drive.google.com/file/d/1-aE1NfzpRCLxA4GUxX9ITI3F9LlbtEGP/view).\n\nThen update in the following scripts with the paths you put evaluation model ckpts to.\n\n### Objective Evaluation\n\nUpdate the path with your batch-inferenced results, and carry out WER / SIM evaluations:\n```bash\n# Evaluation for Seed-TTS test set\npython src/f5_tts/eval/eval_seedtts_testset.py --gen_wav_dir <GEN_WAVE_DIR>\n\n# Evaluation for LibriSpeech-PC test-clean (cross-sentence)\npython src/f5_tts/eval/eval_librispeech_test_clean.py --gen_wav_dir <GEN_WAVE_DIR> --librispeech_test_clean_path <TEST_CLEAN_PATH>\n```"
  },
  {
    "path": "xinference/thirdparty/f5_tts/eval/ecapa_tdnn.py",
    "content": "# just for speaker similarity evaluation, third-party code\n\n# From https://github.com/microsoft/UniSpeech/blob/main/downstreams/speaker_verification/models/\n# part of the code is borrowed from https://github.com/lawlict/ECAPA-TDNN\n\nimport os\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\n\"\"\" Res2Conv1d + BatchNorm1d + ReLU\n\"\"\"\n\n\nclass Res2Conv1dReluBn(nn.Module):\n    \"\"\"\n    in_channels == out_channels == channels\n    \"\"\"\n\n    def __init__(self, channels, kernel_size=1, stride=1, padding=0, dilation=1, bias=True, scale=4):\n        super().__init__()\n        assert channels % scale == 0, \"{} % {} != 0\".format(channels, scale)\n        self.scale = scale\n        self.width = channels // scale\n        self.nums = scale if scale == 1 else scale - 1\n\n        self.convs = []\n        self.bns = []\n        for i in range(self.nums):\n            self.convs.append(nn.Conv1d(self.width, self.width, kernel_size, stride, padding, dilation, bias=bias))\n            self.bns.append(nn.BatchNorm1d(self.width))\n        self.convs = nn.ModuleList(self.convs)\n        self.bns = nn.ModuleList(self.bns)\n\n    def forward(self, x):\n        out = []\n        spx = torch.split(x, self.width, 1)\n        for i in range(self.nums):\n            if i == 0:\n                sp = spx[i]\n            else:\n                sp = sp + spx[i]\n            # Order: conv -> relu -> bn\n            sp = self.convs[i](sp)\n            sp = self.bns[i](F.relu(sp))\n            out.append(sp)\n        if self.scale != 1:\n            out.append(spx[self.nums])\n        out = torch.cat(out, dim=1)\n\n        return out\n\n\n\"\"\" Conv1d + BatchNorm1d + ReLU\n\"\"\"\n\n\nclass Conv1dReluBn(nn.Module):\n    def __init__(self, in_channels, out_channels, kernel_size=1, stride=1, padding=0, dilation=1, bias=True):\n        super().__init__()\n        self.conv = nn.Conv1d(in_channels, out_channels, kernel_size, stride, padding, dilation, bias=bias)\n        self.bn = nn.BatchNorm1d(out_channels)\n\n    def forward(self, x):\n        return self.bn(F.relu(self.conv(x)))\n\n\n\"\"\" The SE connection of 1D case.\n\"\"\"\n\n\nclass SE_Connect(nn.Module):\n    def __init__(self, channels, se_bottleneck_dim=128):\n        super().__init__()\n        self.linear1 = nn.Linear(channels, se_bottleneck_dim)\n        self.linear2 = nn.Linear(se_bottleneck_dim, channels)\n\n    def forward(self, x):\n        out = x.mean(dim=2)\n        out = F.relu(self.linear1(out))\n        out = torch.sigmoid(self.linear2(out))\n        out = x * out.unsqueeze(2)\n\n        return out\n\n\n\"\"\" SE-Res2Block of the ECAPA-TDNN architecture.\n\"\"\"\n\n# def SE_Res2Block(channels, kernel_size, stride, padding, dilation, scale):\n#     return nn.Sequential(\n#         Conv1dReluBn(channels, 512, kernel_size=1, stride=1, padding=0),\n#         Res2Conv1dReluBn(512, kernel_size, stride, padding, dilation, scale=scale),\n#         Conv1dReluBn(512, channels, kernel_size=1, stride=1, padding=0),\n#         SE_Connect(channels)\n#     )\n\n\nclass SE_Res2Block(nn.Module):\n    def __init__(self, in_channels, out_channels, kernel_size, stride, padding, dilation, scale, se_bottleneck_dim):\n        super().__init__()\n        self.Conv1dReluBn1 = Conv1dReluBn(in_channels, out_channels, kernel_size=1, stride=1, padding=0)\n        self.Res2Conv1dReluBn = Res2Conv1dReluBn(out_channels, kernel_size, stride, padding, dilation, scale=scale)\n        self.Conv1dReluBn2 = Conv1dReluBn(out_channels, out_channels, kernel_size=1, stride=1, padding=0)\n        self.SE_Connect = SE_Connect(out_channels, se_bottleneck_dim)\n\n        self.shortcut = None\n        if in_channels != out_channels:\n            self.shortcut = nn.Conv1d(\n                in_channels=in_channels,\n                out_channels=out_channels,\n                kernel_size=1,\n            )\n\n    def forward(self, x):\n        residual = x\n        if self.shortcut:\n            residual = self.shortcut(x)\n\n        x = self.Conv1dReluBn1(x)\n        x = self.Res2Conv1dReluBn(x)\n        x = self.Conv1dReluBn2(x)\n        x = self.SE_Connect(x)\n\n        return x + residual\n\n\n\"\"\" Attentive weighted mean and standard deviation pooling.\n\"\"\"\n\n\nclass AttentiveStatsPool(nn.Module):\n    def __init__(self, in_dim, attention_channels=128, global_context_att=False):\n        super().__init__()\n        self.global_context_att = global_context_att\n\n        # Use Conv1d with stride == 1 rather than Linear, then we don't need to transpose inputs.\n        if global_context_att:\n            self.linear1 = nn.Conv1d(in_dim * 3, attention_channels, kernel_size=1)  # equals W and b in the paper\n        else:\n            self.linear1 = nn.Conv1d(in_dim, attention_channels, kernel_size=1)  # equals W and b in the paper\n        self.linear2 = nn.Conv1d(attention_channels, in_dim, kernel_size=1)  # equals V and k in the paper\n\n    def forward(self, x):\n        if self.global_context_att:\n            context_mean = torch.mean(x, dim=-1, keepdim=True).expand_as(x)\n            context_std = torch.sqrt(torch.var(x, dim=-1, keepdim=True) + 1e-10).expand_as(x)\n            x_in = torch.cat((x, context_mean, context_std), dim=1)\n        else:\n            x_in = x\n\n        # DON'T use ReLU here! In experiments, I find ReLU hard to converge.\n        alpha = torch.tanh(self.linear1(x_in))\n        # alpha = F.relu(self.linear1(x_in))\n        alpha = torch.softmax(self.linear2(alpha), dim=2)\n        mean = torch.sum(alpha * x, dim=2)\n        residuals = torch.sum(alpha * (x**2), dim=2) - mean**2\n        std = torch.sqrt(residuals.clamp(min=1e-9))\n        return torch.cat([mean, std], dim=1)\n\n\nclass ECAPA_TDNN(nn.Module):\n    def __init__(\n        self,\n        feat_dim=80,\n        channels=512,\n        emb_dim=192,\n        global_context_att=False,\n        feat_type=\"wavlm_large\",\n        sr=16000,\n        feature_selection=\"hidden_states\",\n        update_extract=False,\n        config_path=None,\n    ):\n        super().__init__()\n\n        self.feat_type = feat_type\n        self.feature_selection = feature_selection\n        self.update_extract = update_extract\n        self.sr = sr\n\n        torch.hub._validate_not_a_forked_repo = lambda a, b, c: True\n        try:\n            local_s3prl_path = os.path.expanduser(\"~/.cache/torch/hub/s3prl_s3prl_main\")\n            self.feature_extract = torch.hub.load(local_s3prl_path, feat_type, source=\"local\", config_path=config_path)\n        except:  # noqa: E722\n            self.feature_extract = torch.hub.load(\"s3prl/s3prl\", feat_type)\n\n        if len(self.feature_extract.model.encoder.layers) == 24 and hasattr(\n            self.feature_extract.model.encoder.layers[23].self_attn, \"fp32_attention\"\n        ):\n            self.feature_extract.model.encoder.layers[23].self_attn.fp32_attention = False\n        if len(self.feature_extract.model.encoder.layers) == 24 and hasattr(\n            self.feature_extract.model.encoder.layers[11].self_attn, \"fp32_attention\"\n        ):\n            self.feature_extract.model.encoder.layers[11].self_attn.fp32_attention = False\n\n        self.feat_num = self.get_feat_num()\n        self.feature_weight = nn.Parameter(torch.zeros(self.feat_num))\n\n        if feat_type != \"fbank\" and feat_type != \"mfcc\":\n            freeze_list = [\"final_proj\", \"label_embs_concat\", \"mask_emb\", \"project_q\", \"quantizer\"]\n            for name, param in self.feature_extract.named_parameters():\n                for freeze_val in freeze_list:\n                    if freeze_val in name:\n                        param.requires_grad = False\n                        break\n\n        if not self.update_extract:\n            for param in self.feature_extract.parameters():\n                param.requires_grad = False\n\n        self.instance_norm = nn.InstanceNorm1d(feat_dim)\n        # self.channels = [channels] * 4 + [channels * 3]\n        self.channels = [channels] * 4 + [1536]\n\n        self.layer1 = Conv1dReluBn(feat_dim, self.channels[0], kernel_size=5, padding=2)\n        self.layer2 = SE_Res2Block(\n            self.channels[0],\n            self.channels[1],\n            kernel_size=3,\n            stride=1,\n            padding=2,\n            dilation=2,\n            scale=8,\n            se_bottleneck_dim=128,\n        )\n        self.layer3 = SE_Res2Block(\n            self.channels[1],\n            self.channels[2],\n            kernel_size=3,\n            stride=1,\n            padding=3,\n            dilation=3,\n            scale=8,\n            se_bottleneck_dim=128,\n        )\n        self.layer4 = SE_Res2Block(\n            self.channels[2],\n            self.channels[3],\n            kernel_size=3,\n            stride=1,\n            padding=4,\n            dilation=4,\n            scale=8,\n            se_bottleneck_dim=128,\n        )\n\n        # self.conv = nn.Conv1d(self.channels[-1], self.channels[-1], kernel_size=1)\n        cat_channels = channels * 3\n        self.conv = nn.Conv1d(cat_channels, self.channels[-1], kernel_size=1)\n        self.pooling = AttentiveStatsPool(\n            self.channels[-1], attention_channels=128, global_context_att=global_context_att\n        )\n        self.bn = nn.BatchNorm1d(self.channels[-1] * 2)\n        self.linear = nn.Linear(self.channels[-1] * 2, emb_dim)\n\n    def get_feat_num(self):\n        self.feature_extract.eval()\n        wav = [torch.randn(self.sr).to(next(self.feature_extract.parameters()).device)]\n        with torch.no_grad():\n            features = self.feature_extract(wav)\n        select_feature = features[self.feature_selection]\n        if isinstance(select_feature, (list, tuple)):\n            return len(select_feature)\n        else:\n            return 1\n\n    def get_feat(self, x):\n        if self.update_extract:\n            x = self.feature_extract([sample for sample in x])\n        else:\n            with torch.no_grad():\n                if self.feat_type == \"fbank\" or self.feat_type == \"mfcc\":\n                    x = self.feature_extract(x) + 1e-6  # B x feat_dim x time_len\n                else:\n                    x = self.feature_extract([sample for sample in x])\n\n        if self.feat_type == \"fbank\":\n            x = x.log()\n\n        if self.feat_type != \"fbank\" and self.feat_type != \"mfcc\":\n            x = x[self.feature_selection]\n            if isinstance(x, (list, tuple)):\n                x = torch.stack(x, dim=0)\n            else:\n                x = x.unsqueeze(0)\n            norm_weights = F.softmax(self.feature_weight, dim=-1).unsqueeze(-1).unsqueeze(-1).unsqueeze(-1)\n            x = (norm_weights * x).sum(dim=0)\n            x = torch.transpose(x, 1, 2) + 1e-6\n\n        x = self.instance_norm(x)\n        return x\n\n    def forward(self, x):\n        x = self.get_feat(x)\n\n        out1 = self.layer1(x)\n        out2 = self.layer2(out1)\n        out3 = self.layer3(out2)\n        out4 = self.layer4(out3)\n\n        out = torch.cat([out2, out3, out4], dim=1)\n        out = F.relu(self.conv(out))\n        out = self.bn(self.pooling(out))\n        out = self.linear(out)\n\n        return out\n\n\ndef ECAPA_TDNN_SMALL(\n    feat_dim,\n    emb_dim=256,\n    feat_type=\"wavlm_large\",\n    sr=16000,\n    feature_selection=\"hidden_states\",\n    update_extract=False,\n    config_path=None,\n):\n    return ECAPA_TDNN(\n        feat_dim=feat_dim,\n        channels=512,\n        emb_dim=emb_dim,\n        feat_type=feat_type,\n        sr=sr,\n        feature_selection=feature_selection,\n        update_extract=update_extract,\n        config_path=config_path,\n    )\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/eval/eval_infer_batch.py",
    "content": "import os\nimport sys\n\nsys.path.append(os.getcwd())\n\nimport argparse\nimport time\nfrom importlib.resources import files\n\nimport torch\nimport torchaudio\nfrom accelerate import Accelerator\nfrom tqdm import tqdm\n\nfrom f5_tts.eval.utils_eval import (\n    get_inference_prompt,\n    get_librispeech_test_clean_metainfo,\n    get_seedtts_testset_metainfo,\n)\nfrom f5_tts.infer.utils_infer import load_checkpoint, load_vocoder\nfrom f5_tts.model import CFM, DiT, UNetT\nfrom f5_tts.model.utils import get_tokenizer\n\naccelerator = Accelerator()\ndevice = f\"cuda:{accelerator.process_index}\"\n\n\n# --------------------- Dataset Settings -------------------- #\n\ntarget_sample_rate = 24000\nn_mel_channels = 100\nhop_length = 256\nwin_length = 1024\nn_fft = 1024\ntarget_rms = 0.1\n\nrel_path = str(files(\"f5_tts\").joinpath(\"../../\"))\n\n\ndef main():\n    # ---------------------- infer setting ---------------------- #\n\n    parser = argparse.ArgumentParser(description=\"batch inference\")\n\n    parser.add_argument(\"-s\", \"--seed\", default=None, type=int)\n    parser.add_argument(\"-d\", \"--dataset\", default=\"Emilia_ZH_EN\")\n    parser.add_argument(\"-n\", \"--expname\", required=True)\n    parser.add_argument(\"-c\", \"--ckptstep\", default=1200000, type=int)\n    parser.add_argument(\"-m\", \"--mel_spec_type\", default=\"vocos\", type=str, choices=[\"bigvgan\", \"vocos\"])\n    parser.add_argument(\"-to\", \"--tokenizer\", default=\"pinyin\", type=str, choices=[\"pinyin\", \"char\"])\n\n    parser.add_argument(\"-nfe\", \"--nfestep\", default=32, type=int)\n    parser.add_argument(\"-o\", \"--odemethod\", default=\"euler\")\n    parser.add_argument(\"-ss\", \"--swaysampling\", default=-1, type=float)\n\n    parser.add_argument(\"-t\", \"--testset\", required=True)\n\n    args = parser.parse_args()\n\n    seed = args.seed\n    dataset_name = args.dataset\n    exp_name = args.expname\n    ckpt_step = args.ckptstep\n    ckpt_path = rel_path + f\"/ckpts/{exp_name}/model_{ckpt_step}.pt\"\n    mel_spec_type = args.mel_spec_type\n    tokenizer = args.tokenizer\n\n    nfe_step = args.nfestep\n    ode_method = args.odemethod\n    sway_sampling_coef = args.swaysampling\n\n    testset = args.testset\n\n    infer_batch_size = 1  # max frames. 1 for ddp single inference (recommended)\n    cfg_strength = 2.0\n    speed = 1.0\n    use_truth_duration = False\n    no_ref_audio = False\n\n    if exp_name == \"F5TTS_Base\":\n        model_cls = DiT\n        model_cfg = dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)\n\n    elif exp_name == \"E2TTS_Base\":\n        model_cls = UNetT\n        model_cfg = dict(dim=1024, depth=24, heads=16, ff_mult=4)\n\n    if testset == \"ls_pc_test_clean\":\n        metalst = rel_path + \"/data/librispeech_pc_test_clean_cross_sentence.lst\"\n        librispeech_test_clean_path = \"<SOME_PATH>/LibriSpeech/test-clean\"  # test-clean path\n        metainfo = get_librispeech_test_clean_metainfo(metalst, librispeech_test_clean_path)\n\n    elif testset == \"seedtts_test_zh\":\n        metalst = rel_path + \"/data/seedtts_testset/zh/meta.lst\"\n        metainfo = get_seedtts_testset_metainfo(metalst)\n\n    elif testset == \"seedtts_test_en\":\n        metalst = rel_path + \"/data/seedtts_testset/en/meta.lst\"\n        metainfo = get_seedtts_testset_metainfo(metalst)\n\n    # path to save genereted wavs\n    output_dir = (\n        f\"{rel_path}/\"\n        f\"results/{exp_name}_{ckpt_step}/{testset}/\"\n        f\"seed{seed}_{ode_method}_nfe{nfe_step}_{mel_spec_type}\"\n        f\"{f'_ss{sway_sampling_coef}' if sway_sampling_coef else ''}\"\n        f\"_cfg{cfg_strength}_speed{speed}\"\n        f\"{'_gt-dur' if use_truth_duration else ''}\"\n        f\"{'_no-ref-audio' if no_ref_audio else ''}\"\n    )\n\n    # -------------------------------------------------#\n\n    use_ema = True\n\n    prompts_all = get_inference_prompt(\n        metainfo,\n        speed=speed,\n        tokenizer=tokenizer,\n        target_sample_rate=target_sample_rate,\n        n_mel_channels=n_mel_channels,\n        hop_length=hop_length,\n        mel_spec_type=mel_spec_type,\n        target_rms=target_rms,\n        use_truth_duration=use_truth_duration,\n        infer_batch_size=infer_batch_size,\n    )\n\n    # Vocoder model\n    local = False\n    if mel_spec_type == \"vocos\":\n        vocoder_local_path = \"../checkpoints/charactr/vocos-mel-24khz\"\n    elif mel_spec_type == \"bigvgan\":\n        vocoder_local_path = \"../checkpoints/bigvgan_v2_24khz_100band_256x\"\n    vocoder = load_vocoder(vocoder_name=mel_spec_type, is_local=local, local_path=vocoder_local_path)\n\n    # Tokenizer\n    vocab_char_map, vocab_size = get_tokenizer(dataset_name, tokenizer)\n\n    # Model\n    model = CFM(\n        transformer=model_cls(**model_cfg, text_num_embeds=vocab_size, mel_dim=n_mel_channels),\n        mel_spec_kwargs=dict(\n            n_fft=n_fft,\n            hop_length=hop_length,\n            win_length=win_length,\n            n_mel_channels=n_mel_channels,\n            target_sample_rate=target_sample_rate,\n            mel_spec_type=mel_spec_type,\n        ),\n        odeint_kwargs=dict(\n            method=ode_method,\n        ),\n        vocab_char_map=vocab_char_map,\n    ).to(device)\n\n    dtype = torch.float32 if mel_spec_type == \"bigvgan\" else None\n    model = load_checkpoint(model, ckpt_path, device, dtype=dtype, use_ema=use_ema)\n\n    if not os.path.exists(output_dir) and accelerator.is_main_process:\n        os.makedirs(output_dir)\n\n    # start batch inference\n    accelerator.wait_for_everyone()\n    start = time.time()\n\n    with accelerator.split_between_processes(prompts_all) as prompts:\n        for prompt in tqdm(prompts, disable=not accelerator.is_local_main_process):\n            utts, ref_rms_list, ref_mels, ref_mel_lens, total_mel_lens, final_text_list = prompt\n            ref_mels = ref_mels.to(device)\n            ref_mel_lens = torch.tensor(ref_mel_lens, dtype=torch.long).to(device)\n            total_mel_lens = torch.tensor(total_mel_lens, dtype=torch.long).to(device)\n\n            # Inference\n            with torch.inference_mode():\n                generated, _ = model.sample(\n                    cond=ref_mels,\n                    text=final_text_list,\n                    duration=total_mel_lens,\n                    lens=ref_mel_lens,\n                    steps=nfe_step,\n                    cfg_strength=cfg_strength,\n                    sway_sampling_coef=sway_sampling_coef,\n                    no_ref_audio=no_ref_audio,\n                    seed=seed,\n                )\n                # Final result\n                for i, gen in enumerate(generated):\n                    gen = gen[ref_mel_lens[i] : total_mel_lens[i], :].unsqueeze(0)\n                    gen_mel_spec = gen.permute(0, 2, 1).to(torch.float32)\n                    if mel_spec_type == \"vocos\":\n                        generated_wave = vocoder.decode(gen_mel_spec).cpu()\n                    elif mel_spec_type == \"bigvgan\":\n                        generated_wave = vocoder(gen_mel_spec).squeeze(0).cpu()\n\n                    if ref_rms_list[i] < target_rms:\n                        generated_wave = generated_wave * ref_rms_list[i] / target_rms\n                    torchaudio.save(f\"{output_dir}/{utts[i]}.wav\", generated_wave, target_sample_rate)\n\n    accelerator.wait_for_everyone()\n    if accelerator.is_main_process:\n        timediff = time.time() - start\n        print(f\"Done batch inference in {timediff / 60 :.2f} minutes.\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/eval/eval_infer_batch.sh",
    "content": "#!/bin/bash\n\n# e.g. F5-TTS, 16 NFE\naccelerate launch src/f5_tts/eval/eval_infer_batch.py -s 0 -n \"F5TTS_Base\" -t \"seedtts_test_zh\" -nfe 16\naccelerate launch src/f5_tts/eval/eval_infer_batch.py -s 0 -n \"F5TTS_Base\" -t \"seedtts_test_en\" -nfe 16\naccelerate launch src/f5_tts/eval/eval_infer_batch.py -s 0 -n \"F5TTS_Base\" -t \"ls_pc_test_clean\" -nfe 16\n\n# e.g. Vanilla E2 TTS, 32 NFE\naccelerate launch src/f5_tts/eval/eval_infer_batch.py -s 0 -n \"E2TTS_Base\" -t \"seedtts_test_zh\" -o \"midpoint\" -ss 0\naccelerate launch src/f5_tts/eval/eval_infer_batch.py -s 0 -n \"E2TTS_Base\" -t \"seedtts_test_en\" -o \"midpoint\" -ss 0\naccelerate launch src/f5_tts/eval/eval_infer_batch.py -s 0 -n \"E2TTS_Base\" -t \"ls_pc_test_clean\" -o \"midpoint\" -ss 0\n\n# etc.\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/eval/eval_librispeech_test_clean.py",
    "content": "# Evaluate with Librispeech test-clean, ~3s prompt to generate 4-10s audio (the way of valle/voicebox evaluation)\n\nimport sys\nimport os\nimport argparse\n\nsys.path.append(os.getcwd())\n\nimport multiprocessing as mp\nfrom importlib.resources import files\n\nimport numpy as np\n\nfrom f5_tts.eval.utils_eval import (\n    get_librispeech_test,\n    run_asr_wer,\n    run_sim,\n)\n\nrel_path = str(files(\"f5_tts\").joinpath(\"../../\"))\n\n\ndef get_args():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"-e\", \"--eval_task\", type=str, default=\"wer\", choices=[\"sim\", \"wer\"])\n    parser.add_argument(\"-l\", \"--lang\", type=str, default=\"en\")\n    parser.add_argument(\"-g\", \"--gen_wav_dir\", type=str, required=True)\n    parser.add_argument(\"-p\", \"--librispeech_test_clean_path\", type=str, required=True)\n    parser.add_argument(\"-n\", \"--gpu_nums\", type=int, default=8, help=\"Number of GPUs to use\")\n    parser.add_argument(\"--local\", action=\"store_true\", help=\"Use local custom checkpoint directory\")\n    return parser.parse_args()\n\n\ndef main():\n    args = get_args()\n    eval_task = args.eval_task\n    lang = args.lang\n    librispeech_test_clean_path = args.librispeech_test_clean_path  # test-clean path\n    gen_wav_dir = args.gen_wav_dir\n    metalst = rel_path + \"/data/librispeech_pc_test_clean_cross_sentence.lst\"\n\n    gpus = list(range(args.gpu_nums))\n    test_set = get_librispeech_test(metalst, gen_wav_dir, gpus, librispeech_test_clean_path)\n\n    ## In LibriSpeech, some speakers utilized varying voice characteristics for different characters in the book,\n    ## leading to a low similarity for the ground truth in some cases.\n    # test_set = get_librispeech_test(metalst, gen_wav_dir, gpus, librispeech_test_clean_path, eval_ground_truth = True)  # eval ground truth\n\n    local = args.local\n    if local:  # use local custom checkpoint dir\n        asr_ckpt_dir = \"../checkpoints/Systran/faster-whisper-large-v3\"\n    else:\n        asr_ckpt_dir = \"\"  # auto download to cache dir\n    wavlm_ckpt_dir = \"../checkpoints/UniSpeech/wavlm_large_finetune.pth\"\n\n    # --------------------------- WER ---------------------------\n    if eval_task == \"wer\":\n        wers = []\n        with mp.Pool(processes=len(gpus)) as pool:\n            args = [(rank, lang, sub_test_set, asr_ckpt_dir) for (rank, sub_test_set) in test_set]\n            results = pool.map(run_asr_wer, args)\n            for wers_ in results:\n                wers.extend(wers_)\n\n        wer = round(np.mean(wers) * 100, 3)\n        print(f\"\\nTotal {len(wers)} samples\")\n        print(f\"WER      : {wer}%\")\n\n    # --------------------------- SIM ---------------------------\n    if eval_task == \"sim\":\n        sim_list = []\n        with mp.Pool(processes=len(gpus)) as pool:\n            args = [(rank, sub_test_set, wavlm_ckpt_dir) for (rank, sub_test_set) in test_set]\n            results = pool.map(run_sim, args)\n            for sim_ in results:\n                sim_list.extend(sim_)\n\n        sim = round(sum(sim_list) / len(sim_list), 3)\n        print(f\"\\nTotal {len(sim_list)} samples\")\n        print(f\"SIM      : {sim}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/eval/eval_seedtts_testset.py",
    "content": "# Evaluate with Seed-TTS testset\n\nimport sys\nimport os\nimport argparse\n\nsys.path.append(os.getcwd())\n\nimport multiprocessing as mp\nfrom importlib.resources import files\n\nimport numpy as np\n\nfrom f5_tts.eval.utils_eval import (\n    get_seed_tts_test,\n    run_asr_wer,\n    run_sim,\n)\n\nrel_path = str(files(\"f5_tts\").joinpath(\"../../\"))\n\n\ndef get_args():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"-e\", \"--eval_task\", type=str, default=\"wer\", choices=[\"sim\", \"wer\"])\n    parser.add_argument(\"-l\", \"--lang\", type=str, default=\"en\", choices=[\"zh\", \"en\"])\n    parser.add_argument(\"-g\", \"--gen_wav_dir\", type=str, required=True)\n    parser.add_argument(\"-n\", \"--gpu_nums\", type=int, default=8, help=\"Number of GPUs to use\")\n    parser.add_argument(\"--local\", action=\"store_true\", help=\"Use local custom checkpoint directory\")\n    return parser.parse_args()\n\n\ndef main():\n    args = get_args()\n    eval_task = args.eval_task\n    lang = args.lang\n    gen_wav_dir = args.gen_wav_dir\n    metalst = rel_path + f\"/data/seedtts_testset/{lang}/meta.lst\"  # seed-tts testset\n\n    # NOTE. paraformer-zh result will be slightly different according to the number of gpus, cuz batchsize is different\n    #       zh 1.254 seems a result of 4 workers wer_seed_tts\n    gpus = list(range(args.gpu_nums))\n    test_set = get_seed_tts_test(metalst, gen_wav_dir, gpus)\n\n    local = args.local\n    if local:  # use local custom checkpoint dir\n        if lang == \"zh\":\n            asr_ckpt_dir = \"../checkpoints/funasr\"  # paraformer-zh dir under funasr\n        elif lang == \"en\":\n            asr_ckpt_dir = \"../checkpoints/Systran/faster-whisper-large-v3\"\n    else:\n        asr_ckpt_dir = \"\"  # auto download to cache dir\n    wavlm_ckpt_dir = \"../checkpoints/UniSpeech/wavlm_large_finetune.pth\"\n\n    # --------------------------- WER ---------------------------\n\n    if eval_task == \"wer\":\n        wers = []\n        with mp.Pool(processes=len(gpus)) as pool:\n            args = [(rank, lang, sub_test_set, asr_ckpt_dir) for (rank, sub_test_set) in test_set]\n            results = pool.map(run_asr_wer, args)\n            for wers_ in results:\n                wers.extend(wers_)\n\n        wer = round(np.mean(wers) * 100, 3)\n        print(f\"\\nTotal {len(wers)} samples\")\n        print(f\"WER      : {wer}%\")\n\n    # --------------------------- SIM ---------------------------\n    if eval_task == \"sim\":\n        sim_list = []\n        with mp.Pool(processes=len(gpus)) as pool:\n            args = [(rank, sub_test_set, wavlm_ckpt_dir) for (rank, sub_test_set) in test_set]\n            results = pool.map(run_sim, args)\n            for sim_ in results:\n                sim_list.extend(sim_)\n\n        sim = round(sum(sim_list) / len(sim_list), 3)\n        print(f\"\\nTotal {len(sim_list)} samples\")\n        print(f\"SIM      : {sim}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/eval/utils_eval.py",
    "content": "import math\nimport os\nimport random\nimport string\n\nimport torch\nimport torch.nn.functional as F\nimport torchaudio\nfrom tqdm import tqdm\n\nfrom f5_tts.eval.ecapa_tdnn import ECAPA_TDNN_SMALL\nfrom f5_tts.model.modules import MelSpec\nfrom f5_tts.model.utils import convert_char_to_pinyin\n\n\n# seedtts testset metainfo: utt, prompt_text, prompt_wav, gt_text, gt_wav\ndef get_seedtts_testset_metainfo(metalst):\n    f = open(metalst)\n    lines = f.readlines()\n    f.close()\n    metainfo = []\n    for line in lines:\n        if len(line.strip().split(\"|\")) == 5:\n            utt, prompt_text, prompt_wav, gt_text, gt_wav = line.strip().split(\"|\")\n        elif len(line.strip().split(\"|\")) == 4:\n            utt, prompt_text, prompt_wav, gt_text = line.strip().split(\"|\")\n            gt_wav = os.path.join(os.path.dirname(metalst), \"wavs\", utt + \".wav\")\n        if not os.path.isabs(prompt_wav):\n            prompt_wav = os.path.join(os.path.dirname(metalst), prompt_wav)\n        metainfo.append((utt, prompt_text, prompt_wav, gt_text, gt_wav))\n    return metainfo\n\n\n# librispeech test-clean metainfo: gen_utt, ref_txt, ref_wav, gen_txt, gen_wav\ndef get_librispeech_test_clean_metainfo(metalst, librispeech_test_clean_path):\n    f = open(metalst)\n    lines = f.readlines()\n    f.close()\n    metainfo = []\n    for line in lines:\n        ref_utt, ref_dur, ref_txt, gen_utt, gen_dur, gen_txt = line.strip().split(\"\\t\")\n\n        # ref_txt = ref_txt[0] + ref_txt[1:].lower() + '.'  # if use librispeech test-clean (no-pc)\n        ref_spk_id, ref_chaptr_id, _ = ref_utt.split(\"-\")\n        ref_wav = os.path.join(librispeech_test_clean_path, ref_spk_id, ref_chaptr_id, ref_utt + \".flac\")\n\n        # gen_txt = gen_txt[0] + gen_txt[1:].lower() + '.'  # if use librispeech test-clean (no-pc)\n        gen_spk_id, gen_chaptr_id, _ = gen_utt.split(\"-\")\n        gen_wav = os.path.join(librispeech_test_clean_path, gen_spk_id, gen_chaptr_id, gen_utt + \".flac\")\n\n        metainfo.append((gen_utt, ref_txt, ref_wav, \" \" + gen_txt, gen_wav))\n\n    return metainfo\n\n\n# padded to max length mel batch\ndef padded_mel_batch(ref_mels):\n    max_mel_length = torch.LongTensor([mel.shape[-1] for mel in ref_mels]).amax()\n    padded_ref_mels = []\n    for mel in ref_mels:\n        padded_ref_mel = F.pad(mel, (0, max_mel_length - mel.shape[-1]), value=0)\n        padded_ref_mels.append(padded_ref_mel)\n    padded_ref_mels = torch.stack(padded_ref_mels)\n    padded_ref_mels = padded_ref_mels.permute(0, 2, 1)\n    return padded_ref_mels\n\n\n# get prompts from metainfo containing: utt, prompt_text, prompt_wav, gt_text, gt_wav\n\n\ndef get_inference_prompt(\n    metainfo,\n    speed=1.0,\n    tokenizer=\"pinyin\",\n    polyphone=True,\n    target_sample_rate=24000,\n    n_fft=1024,\n    win_length=1024,\n    n_mel_channels=100,\n    hop_length=256,\n    mel_spec_type=\"vocos\",\n    target_rms=0.1,\n    use_truth_duration=False,\n    infer_batch_size=1,\n    num_buckets=200,\n    min_secs=3,\n    max_secs=40,\n):\n    prompts_all = []\n\n    min_tokens = min_secs * target_sample_rate // hop_length\n    max_tokens = max_secs * target_sample_rate // hop_length\n\n    batch_accum = [0] * num_buckets\n    utts, ref_rms_list, ref_mels, ref_mel_lens, total_mel_lens, final_text_list = (\n        [[] for _ in range(num_buckets)] for _ in range(6)\n    )\n\n    mel_spectrogram = MelSpec(\n        n_fft=n_fft,\n        hop_length=hop_length,\n        win_length=win_length,\n        n_mel_channels=n_mel_channels,\n        target_sample_rate=target_sample_rate,\n        mel_spec_type=mel_spec_type,\n    )\n\n    for utt, prompt_text, prompt_wav, gt_text, gt_wav in tqdm(metainfo, desc=\"Processing prompts...\"):\n        # Audio\n        ref_audio, ref_sr = torchaudio.load(prompt_wav)\n        ref_rms = torch.sqrt(torch.mean(torch.square(ref_audio)))\n        if ref_rms < target_rms:\n            ref_audio = ref_audio * target_rms / ref_rms\n        assert ref_audio.shape[-1] > 5000, f\"Empty prompt wav: {prompt_wav}, or torchaudio backend issue.\"\n        if ref_sr != target_sample_rate:\n            resampler = torchaudio.transforms.Resample(ref_sr, target_sample_rate)\n            ref_audio = resampler(ref_audio)\n\n        # Text\n        if len(prompt_text[-1].encode(\"utf-8\")) == 1:\n            prompt_text = prompt_text + \" \"\n        text = [prompt_text + gt_text]\n        if tokenizer == \"pinyin\":\n            text_list = convert_char_to_pinyin(text, polyphone=polyphone)\n        else:\n            text_list = text\n\n        # Duration, mel frame length\n        ref_mel_len = ref_audio.shape[-1] // hop_length\n        if use_truth_duration:\n            gt_audio, gt_sr = torchaudio.load(gt_wav)\n            if gt_sr != target_sample_rate:\n                resampler = torchaudio.transforms.Resample(gt_sr, target_sample_rate)\n                gt_audio = resampler(gt_audio)\n            total_mel_len = ref_mel_len + int(gt_audio.shape[-1] / hop_length / speed)\n\n            # # test vocoder resynthesis\n            # ref_audio = gt_audio\n        else:\n            ref_text_len = len(prompt_text.encode(\"utf-8\"))\n            gen_text_len = len(gt_text.encode(\"utf-8\"))\n            total_mel_len = ref_mel_len + int(ref_mel_len / ref_text_len * gen_text_len / speed)\n\n        # to mel spectrogram\n        ref_mel = mel_spectrogram(ref_audio)\n        ref_mel = ref_mel.squeeze(0)\n\n        # deal with batch\n        assert infer_batch_size > 0, \"infer_batch_size should be greater than 0.\"\n        assert (\n            min_tokens <= total_mel_len <= max_tokens\n        ), f\"Audio {utt} has duration {total_mel_len*hop_length//target_sample_rate}s out of range [{min_secs}, {max_secs}].\"\n        bucket_i = math.floor((total_mel_len - min_tokens) / (max_tokens - min_tokens + 1) * num_buckets)\n\n        utts[bucket_i].append(utt)\n        ref_rms_list[bucket_i].append(ref_rms)\n        ref_mels[bucket_i].append(ref_mel)\n        ref_mel_lens[bucket_i].append(ref_mel_len)\n        total_mel_lens[bucket_i].append(total_mel_len)\n        final_text_list[bucket_i].extend(text_list)\n\n        batch_accum[bucket_i] += total_mel_len\n\n        if batch_accum[bucket_i] >= infer_batch_size:\n            # print(f\"\\n{len(ref_mels[bucket_i][0][0])}\\n{ref_mel_lens[bucket_i]}\\n{total_mel_lens[bucket_i]}\")\n            prompts_all.append(\n                (\n                    utts[bucket_i],\n                    ref_rms_list[bucket_i],\n                    padded_mel_batch(ref_mels[bucket_i]),\n                    ref_mel_lens[bucket_i],\n                    total_mel_lens[bucket_i],\n                    final_text_list[bucket_i],\n                )\n            )\n            batch_accum[bucket_i] = 0\n            (\n                utts[bucket_i],\n                ref_rms_list[bucket_i],\n                ref_mels[bucket_i],\n                ref_mel_lens[bucket_i],\n                total_mel_lens[bucket_i],\n                final_text_list[bucket_i],\n            ) = [], [], [], [], [], []\n\n    # add residual\n    for bucket_i, bucket_frames in enumerate(batch_accum):\n        if bucket_frames > 0:\n            prompts_all.append(\n                (\n                    utts[bucket_i],\n                    ref_rms_list[bucket_i],\n                    padded_mel_batch(ref_mels[bucket_i]),\n                    ref_mel_lens[bucket_i],\n                    total_mel_lens[bucket_i],\n                    final_text_list[bucket_i],\n                )\n            )\n    # not only leave easy work for last workers\n    random.seed(666)\n    random.shuffle(prompts_all)\n\n    return prompts_all\n\n\n# get wav_res_ref_text of seed-tts test metalst\n# https://github.com/BytedanceSpeech/seed-tts-eval\n\n\ndef get_seed_tts_test(metalst, gen_wav_dir, gpus):\n    f = open(metalst)\n    lines = f.readlines()\n    f.close()\n\n    test_set_ = []\n    for line in tqdm(lines):\n        if len(line.strip().split(\"|\")) == 5:\n            utt, prompt_text, prompt_wav, gt_text, gt_wav = line.strip().split(\"|\")\n        elif len(line.strip().split(\"|\")) == 4:\n            utt, prompt_text, prompt_wav, gt_text = line.strip().split(\"|\")\n\n        if not os.path.exists(os.path.join(gen_wav_dir, utt + \".wav\")):\n            continue\n        gen_wav = os.path.join(gen_wav_dir, utt + \".wav\")\n        if not os.path.isabs(prompt_wav):\n            prompt_wav = os.path.join(os.path.dirname(metalst), prompt_wav)\n\n        test_set_.append((gen_wav, prompt_wav, gt_text))\n\n    num_jobs = len(gpus)\n    if num_jobs == 1:\n        return [(gpus[0], test_set_)]\n\n    wav_per_job = len(test_set_) // num_jobs + 1\n    test_set = []\n    for i in range(num_jobs):\n        test_set.append((gpus[i], test_set_[i * wav_per_job : (i + 1) * wav_per_job]))\n\n    return test_set\n\n\n# get librispeech test-clean cross sentence test\n\n\ndef get_librispeech_test(metalst, gen_wav_dir, gpus, librispeech_test_clean_path, eval_ground_truth=False):\n    f = open(metalst)\n    lines = f.readlines()\n    f.close()\n\n    test_set_ = []\n    for line in tqdm(lines):\n        ref_utt, ref_dur, ref_txt, gen_utt, gen_dur, gen_txt = line.strip().split(\"\\t\")\n\n        if eval_ground_truth:\n            gen_spk_id, gen_chaptr_id, _ = gen_utt.split(\"-\")\n            gen_wav = os.path.join(librispeech_test_clean_path, gen_spk_id, gen_chaptr_id, gen_utt + \".flac\")\n        else:\n            if not os.path.exists(os.path.join(gen_wav_dir, gen_utt + \".wav\")):\n                raise FileNotFoundError(f\"Generated wav not found: {gen_utt}\")\n            gen_wav = os.path.join(gen_wav_dir, gen_utt + \".wav\")\n\n        ref_spk_id, ref_chaptr_id, _ = ref_utt.split(\"-\")\n        ref_wav = os.path.join(librispeech_test_clean_path, ref_spk_id, ref_chaptr_id, ref_utt + \".flac\")\n\n        test_set_.append((gen_wav, ref_wav, gen_txt))\n\n    num_jobs = len(gpus)\n    if num_jobs == 1:\n        return [(gpus[0], test_set_)]\n\n    wav_per_job = len(test_set_) // num_jobs + 1\n    test_set = []\n    for i in range(num_jobs):\n        test_set.append((gpus[i], test_set_[i * wav_per_job : (i + 1) * wav_per_job]))\n\n    return test_set\n\n\n# load asr model\n\n\ndef load_asr_model(lang, ckpt_dir=\"\"):\n    if lang == \"zh\":\n        from funasr import AutoModel\n\n        model = AutoModel(\n            model=os.path.join(ckpt_dir, \"paraformer-zh\"),\n            # vad_model = os.path.join(ckpt_dir, \"fsmn-vad\"),\n            # punc_model = os.path.join(ckpt_dir, \"ct-punc\"),\n            # spk_model = os.path.join(ckpt_dir, \"cam++\"),\n            disable_update=True,\n        )  # following seed-tts setting\n    elif lang == \"en\":\n        from faster_whisper import WhisperModel\n\n        model_size = \"large-v3\" if ckpt_dir == \"\" else ckpt_dir\n        model = WhisperModel(model_size, device=\"cuda\", compute_type=\"float16\")\n    return model\n\n\n# WER Evaluation, the way Seed-TTS does\n\n\ndef run_asr_wer(args):\n    rank, lang, test_set, ckpt_dir = args\n\n    if lang == \"zh\":\n        import zhconv\n\n        torch.cuda.set_device(rank)\n    elif lang == \"en\":\n        os.environ[\"CUDA_VISIBLE_DEVICES\"] = str(rank)\n    else:\n        raise NotImplementedError(\n            \"lang support only 'zh' (funasr paraformer-zh), 'en' (faster-whisper-large-v3), for now.\"\n        )\n\n    asr_model = load_asr_model(lang, ckpt_dir=ckpt_dir)\n\n    from zhon.hanzi import punctuation\n\n    punctuation_all = punctuation + string.punctuation\n    wers = []\n\n    from jiwer import compute_measures\n\n    for gen_wav, prompt_wav, truth in tqdm(test_set):\n        if lang == \"zh\":\n            res = asr_model.generate(input=gen_wav, batch_size_s=300, disable_pbar=True)\n            hypo = res[0][\"text\"]\n            hypo = zhconv.convert(hypo, \"zh-cn\")\n        elif lang == \"en\":\n            segments, _ = asr_model.transcribe(gen_wav, beam_size=5, language=\"en\")\n            hypo = \"\"\n            for segment in segments:\n                hypo = hypo + \" \" + segment.text\n\n        # raw_truth = truth\n        # raw_hypo = hypo\n\n        for x in punctuation_all:\n            truth = truth.replace(x, \"\")\n            hypo = hypo.replace(x, \"\")\n\n        truth = truth.replace(\"  \", \" \")\n        hypo = hypo.replace(\"  \", \" \")\n\n        if lang == \"zh\":\n            truth = \" \".join([x for x in truth])\n            hypo = \" \".join([x for x in hypo])\n        elif lang == \"en\":\n            truth = truth.lower()\n            hypo = hypo.lower()\n\n        measures = compute_measures(truth, hypo)\n        wer = measures[\"wer\"]\n\n        # ref_list = truth.split(\" \")\n        # subs = measures[\"substitutions\"] / len(ref_list)\n        # dele = measures[\"deletions\"] / len(ref_list)\n        # inse = measures[\"insertions\"] / len(ref_list)\n\n        wers.append(wer)\n\n    return wers\n\n\n# SIM Evaluation\n\n\ndef run_sim(args):\n    rank, test_set, ckpt_dir = args\n    device = f\"cuda:{rank}\"\n\n    model = ECAPA_TDNN_SMALL(feat_dim=1024, feat_type=\"wavlm_large\", config_path=None)\n    state_dict = torch.load(ckpt_dir, weights_only=True, map_location=lambda storage, loc: storage)\n    model.load_state_dict(state_dict[\"model\"], strict=False)\n\n    use_gpu = True if torch.cuda.is_available() else False\n    if use_gpu:\n        model = model.cuda(device)\n    model.eval()\n\n    sim_list = []\n    for wav1, wav2, truth in tqdm(test_set):\n        wav1, sr1 = torchaudio.load(wav1)\n        wav2, sr2 = torchaudio.load(wav2)\n\n        resample1 = torchaudio.transforms.Resample(orig_freq=sr1, new_freq=16000)\n        resample2 = torchaudio.transforms.Resample(orig_freq=sr2, new_freq=16000)\n        wav1 = resample1(wav1)\n        wav2 = resample2(wav2)\n\n        if use_gpu:\n            wav1 = wav1.cuda(device)\n            wav2 = wav2.cuda(device)\n        with torch.no_grad():\n            emb1 = model(wav1)\n            emb2 = model(wav2)\n\n        sim = F.cosine_similarity(emb1, emb2)[0].item()\n        # print(f\"VSim score between two audios: {sim:.4f} (-1.0, 1.0).\")\n        sim_list.append(sim)\n\n    return sim_list\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/infer/README.md",
    "content": "# Inference\n\nThe pretrained model checkpoints can be reached at [🤗 Hugging Face](https://huggingface.co/SWivid/F5-TTS) and [🤖 Model Scope](https://www.modelscope.cn/models/SWivid/F5-TTS_Emilia-ZH-EN), or will be automatically downloaded when running inference scripts.\n\n**More checkpoints with whole community efforts can be found in [SHARED.md](SHARED.md), supporting more languages.**\n\nCurrently support **30s for a single** generation, which is the **total length** including both prompt and output audio. However, you can provide `infer_cli` and `infer_gradio` with longer text, will automatically do chunk generation. Long reference audio will be **clip short to ~15s**.\n\nTo avoid possible inference failures, make sure you have seen through the following instructions.\n\n- Use reference audio <15s and leave some silence (e.g. 1s) at the end. Otherwise there is a risk of truncating in the middle of word, leading to suboptimal generation.\n- Uppercased letters will be uttered letter by letter, so use lowercased letters for normal words. \n- Add some spaces (blank: \" \") or punctuations (e.g. \",\" \".\") to explicitly introduce some pauses.\n- Preprocess numbers to Chinese letters if you want to have them read in Chinese, otherwise in English.\n\n\n## Gradio App\n\nCurrently supported features:\n\n- Basic TTS with Chunk Inference\n- Multi-Style / Multi-Speaker Generation\n- Voice Chat powered by Qwen2.5-3B-Instruct\n\nThe cli command `f5-tts_infer-gradio` equals to `python src/f5_tts/infer/infer_gradio.py`, which launches a Gradio APP (web interface) for inference.\n\nThe script will load model checkpoints from Huggingface. You can also manually download files and update the path to `load_model()` in `infer_gradio.py`. Currently only load TTS models first, will load ASR model to do transcription if `ref_text` not provided, will load LLM model if use Voice Chat.\n\nCould also be used as a component for larger application.\n```python\nimport gradio as gr\nfrom f5_tts.infer.infer_gradio import app\n\nwith gr.Blocks() as main_app:\n    gr.Markdown(\"# This is an example of using F5-TTS within a bigger Gradio app\")\n\n    # ... other Gradio components\n\n    app.render()\n\nmain_app.launch()\n```\n\n\n## CLI Inference\n\nThe cli command `f5-tts_infer-cli` equals to `python src/f5_tts/infer/infer_cli.py`, which is a command line tool for inference.\n\nThe script will load model checkpoints from Huggingface. You can also manually download files and use `--ckpt_file` to specify the model you want to load, or directly update in `infer_cli.py`.\n\nFor change vocab.txt use `--vocab_file` to provide your `vocab.txt` file.\n\nBasically you can inference with flags:\n```bash\n# Leave --ref_text \"\" will have ASR model transcribe (extra GPU memory usage)\nf5-tts_infer-cli \\\n--model \"F5-TTS\" \\\n--ref_audio \"ref_audio.wav\" \\\n--ref_text \"The content, subtitle or transcription of reference audio.\" \\\n--gen_text \"Some text you want TTS model generate for you.\"\n\n# Choose Vocoder\nf5-tts_infer-cli --vocoder_name bigvgan --load_vocoder_from_local --ckpt_file <YOUR_CKPT_PATH, eg:ckpts/F5TTS_Base_bigvgan/model_1250000.pt>\nf5-tts_infer-cli --vocoder_name vocos --load_vocoder_from_local --ckpt_file <YOUR_CKPT_PATH, eg:ckpts/F5TTS_Base/model_1200000.safetensors>\n```\n\nAnd a `.toml` file would help with more flexible usage.\n\n```bash\nf5-tts_infer-cli -c custom.toml\n```\n\nFor example, you can use `.toml` to pass in variables, refer to `src/f5_tts/infer/examples/basic/basic.toml`:\n\n```toml\n# F5-TTS | E2-TTS\nmodel = \"F5-TTS\"\nref_audio = \"infer/examples/basic/basic_ref_en.wav\"\n# If an empty \"\", transcribes the reference audio automatically.\nref_text = \"Some call me nature, others call me mother nature.\"\ngen_text = \"I don't really care what you call me. I've been a silent spectator, watching species evolve, empires rise and fall. But always remember, I am mighty and enduring.\"\n# File with text to generate. Ignores the text above.\ngen_file = \"\"\nremove_silence = false\noutput_dir = \"tests\"\n```\n\nYou can also leverage `.toml` file to do multi-style generation, refer to `src/f5_tts/infer/examples/multi/story.toml`.\n\n```toml\n# F5-TTS | E2-TTS\nmodel = \"F5-TTS\"\nref_audio = \"infer/examples/multi/main.flac\"\n# If an empty \"\", transcribes the reference audio automatically.\nref_text = \"\"\ngen_text = \"\"\n# File with text to generate. Ignores the text above.\ngen_file = \"infer/examples/multi/story.txt\"\nremove_silence = true\noutput_dir = \"tests\"\n\n[voices.town]\nref_audio = \"infer/examples/multi/town.flac\"\nref_text = \"\"\n\n[voices.country]\nref_audio = \"infer/examples/multi/country.flac\"\nref_text = \"\"\n```\nYou should mark the voice with `[main]` `[town]` `[country]` whenever you want to change voice, refer to `src/f5_tts/infer/examples/multi/story.txt`.\n\n## Speech Editing\n\nTo test speech editing capabilities, use the following command:\n\n```bash\npython src/f5_tts/infer/speech_edit.py\n```\n\n## Socket Realtime Client\n\nTo communicate with socket server you need to run \n```bash\npython src/f5_tts/socket_server.py\n```\n\n<details>\n<summary>Then create client to communicate</summary>\n\n``` python\nimport socket\nimport numpy as np\nimport asyncio\nimport pyaudio\n\nasync def listen_to_voice(text, server_ip='localhost', server_port=9999):\n    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n    client_socket.connect((server_ip, server_port))\n\n    async def play_audio_stream():\n        buffer = b''\n        p = pyaudio.PyAudio()\n        stream = p.open(format=pyaudio.paFloat32,\n                        channels=1,\n                        rate=24000,  # Ensure this matches the server's sampling rate\n                        output=True,\n                        frames_per_buffer=2048)\n\n        try:\n            while True:\n                chunk = await asyncio.get_event_loop().run_in_executor(None, client_socket.recv, 1024)\n                if not chunk:  # End of stream\n                    break\n                if b\"END_OF_AUDIO\" in chunk:\n                    buffer += chunk.replace(b\"END_OF_AUDIO\", b\"\")\n                    if buffer:\n                        audio_array = np.frombuffer(buffer, dtype=np.float32).copy()  # Make a writable copy\n                        stream.write(audio_array.tobytes())\n                    break\n                buffer += chunk\n                if len(buffer) >= 4096:\n                    audio_array = np.frombuffer(buffer[:4096], dtype=np.float32).copy()  # Make a writable copy\n                    stream.write(audio_array.tobytes())\n                    buffer = buffer[4096:]\n        finally:\n            stream.stop_stream()\n            stream.close()\n            p.terminate()\n\n    try:\n        # Send only the text to the server\n        await asyncio.get_event_loop().run_in_executor(None, client_socket.sendall, text.encode('utf-8'))\n        await play_audio_stream()\n        print(\"Audio playback finished.\")\n\n    except Exception as e:\n        print(f\"Error in listen_to_voice: {e}\")\n\n    finally:\n        client_socket.close()\n\n# Example usage: Replace this with your actual server IP and port\nasync def main():\n    await listen_to_voice(\"my name is jenny..\", server_ip='localhost', server_port=9998)\n\n# Run the main async function\nasyncio.run(main())\n```\n\n</details>\n\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/infer/examples/basic/basic.toml",
    "content": "# F5-TTS | E2-TTS\nmodel = \"F5-TTS\"\nref_audio = \"infer/examples/basic/basic_ref_en.wav\"\n# If an empty \"\", transcribes the reference audio automatically.\nref_text = \"Some call me nature, others call me mother nature.\"\ngen_text = \"I don't really care what you call me. I've been a silent spectator, watching species evolve, empires rise and fall. But always remember, I am mighty and enduring.\"\n# File with text to generate. Ignores the text above.\ngen_file = \"\"\nremove_silence = false\noutput_dir = \"tests\"\noutput_file = \"infer_cli_out.wav\"\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/infer/examples/multi/story.toml",
    "content": "# F5-TTS | E2-TTS\nmodel = \"F5-TTS\"\nref_audio = \"infer/examples/multi/main.flac\"\n# If an empty \"\", transcribes the reference audio automatically.\nref_text = \"\"\ngen_text = \"\"\n# File with text to generate. Ignores the text above.\ngen_file = \"infer/examples/multi/story.txt\"\nremove_silence = true\noutput_dir = \"tests\"\n\n[voices.town]\nref_audio = \"infer/examples/multi/town.flac\"\nref_text = \"\"\n\n[voices.country]\nref_audio = \"infer/examples/multi/country.flac\"\nref_text = \"\"\n\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/infer/examples/multi/story.txt",
    "content": "A Town Mouse and a Country Mouse were acquaintances, and the Country Mouse one day invited his friend to come and see him at his home in the fields. The Town Mouse came, and they sat down to a dinner of barleycorns and roots, the latter of which had a distinctly earthy flavour. The fare was not much to the taste of the guest, and presently he broke out with [town] “My poor dear friend, you live here no better than the ants. Now, you should just see how I fare! My larder is a regular horn of plenty. You must come and stay with me, and I promise you you shall live on the fat of the land.” [main] So when he returned to town he took the Country Mouse with him, and showed him into a larder containing flour and oatmeal and figs and honey and dates. The Country Mouse had never seen anything like it, and sat down to enjoy the luxuries his friend provided: but before they had well begun, the door of the larder opened and someone came in. The two Mice scampered off and hid themselves in a narrow and exceedingly uncomfortable hole. Presently, when all was quiet, they ventured out again; but someone else came in, and off they scuttled again. This was too much for the visitor. [country] “Goodbye,” [main] said he, [country] “I’m off. You live in the lap of luxury, I can see, but you are surrounded by dangers; whereas at home I can enjoy my simple dinner of roots and corn in peace.”"
  },
  {
    "path": "xinference/thirdparty/f5_tts/infer/examples/vocab.txt",
    "content": " \n!\n\"\n#\n$\n%\n&\n'\n(\n)\n*\n+\n,\n-\n.\n/\n0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n:\n;\n=\n>\n?\n@\nA\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nU\nV\nW\nX\nY\nZ\n[\n\\\n]\n_\na\na1\nai1\nai2\nai3\nai4\nan1\nan3\nan4\nang1\nang2\nang4\nao1\nao2\nao3\nao4\nb\nba\nba1\nba2\nba3\nba4\nbai1\nbai2\nbai3\nbai4\nban1\nban2\nban3\nban4\nbang1\nbang2\nbang3\nbang4\nbao1\nbao2\nbao3\nbao4\nbei\nbei1\nbei2\nbei3\nbei4\nben1\nben2\nben3\nben4\nbeng\nbeng1\nbeng2\nbeng3\nbeng4\nbi1\nbi2\nbi3\nbi4\nbian1\nbian2\nbian3\nbian4\nbiao1\nbiao2\nbiao3\nbie1\nbie2\nbie3\nbie4\nbin1\nbin4\nbing1\nbing2\nbing3\nbing4\nbo\nbo1\nbo2\nbo3\nbo4\nbu2\nbu3\nbu4\nc\nca1\ncai1\ncai2\ncai3\ncai4\ncan1\ncan2\ncan3\ncan4\ncang1\ncang2\ncao1\ncao2\ncao3\nce4\ncen1\ncen2\nceng1\nceng2\nceng4\ncha1\ncha2\ncha3\ncha4\nchai1\nchai2\nchan1\nchan2\nchan3\nchan4\nchang1\nchang2\nchang3\nchang4\nchao1\nchao2\nchao3\nche1\nche2\nche3\nche4\nchen1\nchen2\nchen3\nchen4\ncheng1\ncheng2\ncheng3\ncheng4\nchi1\nchi2\nchi3\nchi4\nchong1\nchong2\nchong3\nchong4\nchou1\nchou2\nchou3\nchou4\nchu1\nchu2\nchu3\nchu4\nchua1\nchuai1\nchuai2\nchuai3\nchuai4\nchuan1\nchuan2\nchuan3\nchuan4\nchuang1\nchuang2\nchuang3\nchuang4\nchui1\nchui2\nchun1\nchun2\nchun3\nchuo1\nchuo4\nci1\nci2\nci3\nci4\ncong1\ncong2\ncou4\ncu1\ncu4\ncuan1\ncuan2\ncuan4\ncui1\ncui3\ncui4\ncun1\ncun2\ncun4\ncuo1\ncuo2\ncuo4\nd\nda\nda1\nda2\nda3\nda4\ndai1\ndai2\ndai3\ndai4\ndan1\ndan2\ndan3\ndan4\ndang1\ndang2\ndang3\ndang4\ndao1\ndao2\ndao3\ndao4\nde\nde1\nde2\ndei3\nden4\ndeng1\ndeng2\ndeng3\ndeng4\ndi1\ndi2\ndi3\ndi4\ndia3\ndian1\ndian2\ndian3\ndian4\ndiao1\ndiao3\ndiao4\ndie1\ndie2\ndie4\nding1\nding2\nding3\nding4\ndiu1\ndong1\ndong3\ndong4\ndou1\ndou2\ndou3\ndou4\ndu1\ndu2\ndu3\ndu4\nduan1\nduan2\nduan3\nduan4\ndui1\ndui4\ndun1\ndun3\ndun4\nduo1\nduo2\nduo3\nduo4\ne\ne1\ne2\ne3\ne4\nei2\nen1\nen4\ner\ner2\ner3\ner4\nf\nfa1\nfa2\nfa3\nfa4\nfan1\nfan2\nfan3\nfan4\nfang1\nfang2\nfang3\nfang4\nfei1\nfei2\nfei3\nfei4\nfen1\nfen2\nfen3\nfen4\nfeng1\nfeng2\nfeng3\nfeng4\nfo2\nfou2\nfou3\nfu1\nfu2\nfu3\nfu4\ng\nga1\nga2\nga3\nga4\ngai1\ngai2\ngai3\ngai4\ngan1\ngan2\ngan3\ngan4\ngang1\ngang2\ngang3\ngang4\ngao1\ngao2\ngao3\ngao4\nge1\nge2\nge3\nge4\ngei2\ngei3\ngen1\ngen2\ngen3\ngen4\ngeng1\ngeng3\ngeng4\ngong1\ngong3\ngong4\ngou1\ngou2\ngou3\ngou4\ngu\ngu1\ngu2\ngu3\ngu4\ngua1\ngua2\ngua3\ngua4\nguai1\nguai2\nguai3\nguai4\nguan1\nguan2\nguan3\nguan4\nguang1\nguang2\nguang3\nguang4\ngui1\ngui2\ngui3\ngui4\ngun3\ngun4\nguo1\nguo2\nguo3\nguo4\nh\nha1\nha2\nha3\nhai1\nhai2\nhai3\nhai4\nhan1\nhan2\nhan3\nhan4\nhang1\nhang2\nhang4\nhao1\nhao2\nhao3\nhao4\nhe1\nhe2\nhe4\nhei1\nhen2\nhen3\nhen4\nheng1\nheng2\nheng4\nhong1\nhong2\nhong3\nhong4\nhou1\nhou2\nhou3\nhou4\nhu1\nhu2\nhu3\nhu4\nhua1\nhua2\nhua4\nhuai2\nhuai4\nhuan1\nhuan2\nhuan3\nhuan4\nhuang1\nhuang2\nhuang3\nhuang4\nhui1\nhui2\nhui3\nhui4\nhun1\nhun2\nhun4\nhuo\nhuo1\nhuo2\nhuo3\nhuo4\ni\nj\nji1\nji2\nji3\nji4\njia\njia1\njia2\njia3\njia4\njian1\njian2\njian3\njian4\njiang1\njiang2\njiang3\njiang4\njiao1\njiao2\njiao3\njiao4\njie1\njie2\njie3\njie4\njin1\njin2\njin3\njin4\njing1\njing2\njing3\njing4\njiong3\njiu1\njiu2\njiu3\njiu4\nju1\nju2\nju3\nju4\njuan1\njuan2\njuan3\njuan4\njue1\njue2\njue4\njun1\njun4\nk\nka1\nka2\nka3\nkai1\nkai2\nkai3\nkai4\nkan1\nkan2\nkan3\nkan4\nkang1\nkang2\nkang4\nkao1\nkao2\nkao3\nkao4\nke1\nke2\nke3\nke4\nken3\nkeng1\nkong1\nkong3\nkong4\nkou1\nkou2\nkou3\nkou4\nku1\nku2\nku3\nku4\nkua1\nkua3\nkua4\nkuai3\nkuai4\nkuan1\nkuan2\nkuan3\nkuang1\nkuang2\nkuang4\nkui1\nkui2\nkui3\nkui4\nkun1\nkun3\nkun4\nkuo4\nl\nla\nla1\nla2\nla3\nla4\nlai2\nlai4\nlan2\nlan3\nlan4\nlang1\nlang2\nlang3\nlang4\nlao1\nlao2\nlao3\nlao4\nle\nle1\nle4\nlei\nlei1\nlei2\nlei3\nlei4\nleng1\nleng2\nleng3\nleng4\nli\nli1\nli2\nli3\nli4\nlia3\nlian2\nlian3\nlian4\nliang2\nliang3\nliang4\nliao1\nliao2\nliao3\nliao4\nlie1\nlie2\nlie3\nlie4\nlin1\nlin2\nlin3\nlin4\nling2\nling3\nling4\nliu1\nliu2\nliu3\nliu4\nlong1\nlong2\nlong3\nlong4\nlou1\nlou2\nlou3\nlou4\nlu1\nlu2\nlu3\nlu4\nluan2\nluan3\nluan4\nlun1\nlun2\nlun4\nluo1\nluo2\nluo3\nluo4\nlv2\nlv3\nlv4\nlve3\nlve4\nm\nma\nma1\nma2\nma3\nma4\nmai2\nmai3\nmai4\nman1\nman2\nman3\nman4\nmang2\nmang3\nmao1\nmao2\nmao3\nmao4\nme\nmei2\nmei3\nmei4\nmen\nmen1\nmen2\nmen4\nmeng\nmeng1\nmeng2\nmeng3\nmeng4\nmi1\nmi2\nmi3\nmi4\nmian2\nmian3\nmian4\nmiao1\nmiao2\nmiao3\nmiao4\nmie1\nmie4\nmin2\nmin3\nming2\nming3\nming4\nmiu4\nmo1\nmo2\nmo3\nmo4\nmou1\nmou2\nmou3\nmu2\nmu3\nmu4\nn\nn2\nna1\nna2\nna3\nna4\nnai2\nnai3\nnai4\nnan1\nnan2\nnan3\nnan4\nnang1\nnang2\nnang3\nnao1\nnao2\nnao3\nnao4\nne\nne2\nne4\nnei3\nnei4\nnen4\nneng2\nni1\nni2\nni3\nni4\nnian1\nnian2\nnian3\nnian4\nniang2\nniang4\nniao2\nniao3\nniao4\nnie1\nnie4\nnin2\nning2\nning3\nning4\nniu1\nniu2\nniu3\nniu4\nnong2\nnong4\nnou4\nnu2\nnu3\nnu4\nnuan3\nnuo2\nnuo4\nnv2\nnv3\nnve4\no\no1\no2\nou1\nou2\nou3\nou4\np\npa1\npa2\npa4\npai1\npai2\npai3\npai4\npan1\npan2\npan4\npang1\npang2\npang4\npao1\npao2\npao3\npao4\npei1\npei2\npei4\npen1\npen2\npen4\npeng1\npeng2\npeng3\npeng4\npi1\npi2\npi3\npi4\npian1\npian2\npian4\npiao1\npiao2\npiao3\npiao4\npie1\npie2\npie3\npin1\npin2\npin3\npin4\nping1\nping2\npo1\npo2\npo3\npo4\npou1\npu1\npu2\npu3\npu4\nq\nqi1\nqi2\nqi3\nqi4\nqia1\nqia3\nqia4\nqian1\nqian2\nqian3\nqian4\nqiang1\nqiang2\nqiang3\nqiang4\nqiao1\nqiao2\nqiao3\nqiao4\nqie1\nqie2\nqie3\nqie4\nqin1\nqin2\nqin3\nqin4\nqing1\nqing2\nqing3\nqing4\nqiong1\nqiong2\nqiu1\nqiu2\nqiu3\nqu1\nqu2\nqu3\nqu4\nquan1\nquan2\nquan3\nquan4\nque1\nque2\nque4\nqun2\nr\nran2\nran3\nrang1\nrang2\nrang3\nrang4\nrao2\nrao3\nrao4\nre2\nre3\nre4\nren2\nren3\nren4\nreng1\nreng2\nri4\nrong1\nrong2\nrong3\nrou2\nrou4\nru2\nru3\nru4\nruan2\nruan3\nrui3\nrui4\nrun4\nruo4\ns\nsa1\nsa2\nsa3\nsa4\nsai1\nsai4\nsan1\nsan2\nsan3\nsan4\nsang1\nsang3\nsang4\nsao1\nsao2\nsao3\nsao4\nse4\nsen1\nseng1\nsha1\nsha2\nsha3\nsha4\nshai1\nshai2\nshai3\nshai4\nshan1\nshan3\nshan4\nshang\nshang1\nshang3\nshang4\nshao1\nshao2\nshao3\nshao4\nshe1\nshe2\nshe3\nshe4\nshei2\nshen1\nshen2\nshen3\nshen4\nsheng1\nsheng2\nsheng3\nsheng4\nshi\nshi1\nshi2\nshi3\nshi4\nshou1\nshou2\nshou3\nshou4\nshu1\nshu2\nshu3\nshu4\nshua1\nshua2\nshua3\nshua4\nshuai1\nshuai3\nshuai4\nshuan1\nshuan4\nshuang1\nshuang3\nshui2\nshui3\nshui4\nshun3\nshun4\nshuo1\nshuo4\nsi1\nsi2\nsi3\nsi4\nsong1\nsong3\nsong4\nsou1\nsou3\nsou4\nsu1\nsu2\nsu4\nsuan1\nsuan4\nsui1\nsui2\nsui3\nsui4\nsun1\nsun3\nsuo\nsuo1\nsuo2\nsuo3\nt\nta1\nta2\nta3\nta4\ntai1\ntai2\ntai4\ntan1\ntan2\ntan3\ntan4\ntang1\ntang2\ntang3\ntang4\ntao1\ntao2\ntao3\ntao4\nte4\nteng2\nti1\nti2\nti3\nti4\ntian1\ntian2\ntian3\ntiao1\ntiao2\ntiao3\ntiao4\ntie1\ntie2\ntie3\ntie4\nting1\nting2\nting3\ntong1\ntong2\ntong3\ntong4\ntou\ntou1\ntou2\ntou4\ntu1\ntu2\ntu3\ntu4\ntuan1\ntuan2\ntui1\ntui2\ntui3\ntui4\ntun1\ntun2\ntun4\ntuo1\ntuo2\ntuo3\ntuo4\nu\nv\nw\nwa\nwa1\nwa2\nwa3\nwa4\nwai1\nwai3\nwai4\nwan1\nwan2\nwan3\nwan4\nwang1\nwang2\nwang3\nwang4\nwei1\nwei2\nwei3\nwei4\nwen1\nwen2\nwen3\nwen4\nweng1\nweng4\nwo1\nwo2\nwo3\nwo4\nwu1\nwu2\nwu3\nwu4\nx\nxi1\nxi2\nxi3\nxi4\nxia1\nxia2\nxia4\nxian1\nxian2\nxian3\nxian4\nxiang1\nxiang2\nxiang3\nxiang4\nxiao1\nxiao2\nxiao3\nxiao4\nxie1\nxie2\nxie3\nxie4\nxin1\nxin2\nxin4\nxing1\nxing2\nxing3\nxing4\nxiong1\nxiong2\nxiu1\nxiu3\nxiu4\nxu\nxu1\nxu2\nxu3\nxu4\nxuan1\nxuan2\nxuan3\nxuan4\nxue1\nxue2\nxue3\nxue4\nxun1\nxun2\nxun4\ny\nya\nya1\nya2\nya3\nya4\nyan1\nyan2\nyan3\nyan4\nyang1\nyang2\nyang3\nyang4\nyao1\nyao2\nyao3\nyao4\nye1\nye2\nye3\nye4\nyi\nyi1\nyi2\nyi3\nyi4\nyin1\nyin2\nyin3\nyin4\nying1\nying2\nying3\nying4\nyo1\nyong1\nyong2\nyong3\nyong4\nyou1\nyou2\nyou3\nyou4\nyu1\nyu2\nyu3\nyu4\nyuan1\nyuan2\nyuan3\nyuan4\nyue1\nyue4\nyun1\nyun2\nyun3\nyun4\nz\nza1\nza2\nza3\nzai1\nzai3\nzai4\nzan1\nzan2\nzan3\nzan4\nzang1\nzang4\nzao1\nzao2\nzao3\nzao4\nze2\nze4\nzei2\nzen3\nzeng1\nzeng4\nzha1\nzha2\nzha3\nzha4\nzhai1\nzhai2\nzhai3\nzhai4\nzhan1\nzhan2\nzhan3\nzhan4\nzhang1\nzhang2\nzhang3\nzhang4\nzhao1\nzhao2\nzhao3\nzhao4\nzhe\nzhe1\nzhe2\nzhe3\nzhe4\nzhen1\nzhen2\nzhen3\nzhen4\nzheng1\nzheng2\nzheng3\nzheng4\nzhi1\nzhi2\nzhi3\nzhi4\nzhong1\nzhong2\nzhong3\nzhong4\nzhou1\nzhou2\nzhou3\nzhou4\nzhu1\nzhu2\nzhu3\nzhu4\nzhua1\nzhua2\nzhua3\nzhuai1\nzhuai3\nzhuai4\nzhuan1\nzhuan2\nzhuan3\nzhuan4\nzhuang1\nzhuang4\nzhui1\nzhui4\nzhun1\nzhun2\nzhun3\nzhuo1\nzhuo2\nzi\nzi1\nzi2\nzi3\nzi4\nzong1\nzong2\nzong3\nzong4\nzou1\nzou2\nzou3\nzou4\nzu1\nzu2\nzu3\nzuan1\nzuan3\nzuan4\nzui2\nzui3\nzui4\nzun1\nzuo\nzuo1\nzuo2\nzuo3\nzuo4\n{\n~\n¡\n¢\n£\n¥\n§\n¨\n©\n«\n®\n¯\n°\n±\n²\n³\n´\nµ\n·\n¹\nº\n»\n¼\n½\n¾\n¿\nÀ\nÁ\nÂ\nÃ\nÄ\nÅ\nÆ\nÇ\nÈ\nÉ\nÊ\nÍ\nÎ\nÑ\nÓ\nÖ\n×\nØ\nÚ\nÜ\nÝ\nÞ\nß\nà\ná\nâ\nã\nä\nå\næ\nç\nè\né\nê\në\nì\ní\nî\nï\nð\nñ\nò\nó\nô\nõ\nö\nø\nù\nú\nû\nü\ný\nĀ\nā\nă\ną\nć\nČ\nč\nĐ\nđ\nē\nė\nę\ně\nĝ\nğ\nħ\nī\nį\nİ\nı\nŁ\nł\nń\nņ\nň\nŋ\nŌ\nō\nő\nœ\nř\nŚ\nś\nŞ\nş\nŠ\nš\nŤ\nť\nũ\nū\nź\nŻ\nż\nŽ\nž\nơ\nư\nǎ\nǐ\nǒ\nǔ\nǚ\nș\nț\nɑ\nɔ\nɕ\nə\nɛ\nɜ\nɡ\nɣ\nɪ\nɫ\nɴ\nɹ\nɾ\nʃ\nʊ\nʌ\nʒ\nʔ\nʰ\nʷ\nʻ\nʾ\nʿ\nˈ\nː\n˙\n˜\nˢ\ń\n̅\nΑ\nΒ\nΔ\nΕ\nΘ\nΚ\nΛ\nΜ\nΞ\nΠ\nΣ\nΤ\nΦ\nΧ\nΨ\nΩ\nά\nέ\nή\nί\nα\nβ\nγ\nδ\nε\nζ\nη\nθ\nι\nκ\nλ\nμ\nν\nξ\nο\nπ\nρ\nς\nσ\nτ\nυ\nφ\nχ\nψ\nω\nϊ\nό\nύ\nώ\nϕ\nϵ\nЁ\nА\nБ\nВ\nГ\nД\nЕ\nЖ\nЗ\nИ\nЙ\nК\nЛ\nМ\nН\nО\nП\nР\nС\nТ\nУ\nФ\nХ\nЦ\nЧ\nШ\nЩ\nЫ\nЬ\nЭ\nЮ\nЯ\nа\nб\nв\nг\nд\nе\nж\nз\nи\nй\nк\nл\nм\nн\nо\nп\nр\nс\nт\nу\nф\nх\nц\nч\nш\nщ\nъ\nы\nь\nэ\nю\nя\nё\nі\nְ\nִ\nֵ\nֶ\nַ\nָ\nֹ\nּ\n־\nׁ\nא\nב\nג\nד\nה\nו\nז\nח\nט\nי\nכ\nל\nם\nמ\nן\nנ\nס\nע\nפ\nק\nר\nש\nת\nأ\nب\nة\nت\nج\nح\nد\nر\nز\nس\nص\nط\nع\nق\nك\nل\nم\nن\nه\nو\nي\nَ\nُ\nِ\nْ\nก\nข\nง\nจ\nต\nท\nน\nป\nย\nร\nว\nส\nห\nอ\nฮ\nั\nา\nี\nึ\nโ\nใ\nไ\n่\n้\n์\nḍ\nḤ\nḥ\nṁ\nṃ\nṅ\nṇ\nṚ\nṛ\nṢ\nṣ\nṬ\nṭ\nạ\nả\nẤ\nấ\nầ\nậ\nắ\nằ\nẻ\nẽ\nế\nề\nể\nễ\nệ\nị\nọ\nỏ\nố\nồ\nộ\nớ\nờ\nở\nụ\nủ\nứ\nữ\nἀ\nἁ\nἈ\nἐ\nἔ\nἰ\nἱ\nὀ\nὁ\nὐ\nὲ\nὸ\nᾶ\n᾽\nῆ\nῇ\nῶ\n‎\n‑\n‒\n–\n—\n―\n‖\n†\n‡\n•\n…\n‧\n‬\n′\n″\n⁄\n⁡\n⁰\n⁴\n⁵\n⁶\n⁷\n⁸\n⁹\n₁\n₂\n₃\n€\n₱\n₹\n₽\n℃\nℏ\nℓ\n№\nℝ\n™\n⅓\n⅔\n⅛\n→\n∂\n∈\n∑\n−\n∗\n√\n∞\n∫\n≈\n≠\n≡\n≤\n≥\n⋅\n⋯\n█\n♪\n⟨\n⟩\n、\n。\n《\n》\n「\n」\n【\n】\nあ\nう\nえ\nお\nか\nが\nき\nぎ\nく\nぐ\nけ\nげ\nこ\nご\nさ\nし\nじ\nす\nず\nせ\nぜ\nそ\nぞ\nた\nだ\nち\nっ\nつ\nで\nと\nど\nな\nに\nね\nの\nは\nば\nひ\nぶ\nへ\nべ\nま\nみ\nむ\nめ\nも\nゃ\nや\nゆ\nょ\nよ\nら\nり\nる\nれ\nろ\nわ\nを\nん\nァ\nア\nィ\nイ\nウ\nェ\nエ\nオ\nカ\nガ\nキ\nク\nケ\nゲ\nコ\nゴ\nサ\nザ\nシ\nジ\nス\nズ\nセ\nゾ\nタ\nダ\nチ\nッ\nツ\nテ\nデ\nト\nド\nナ\nニ\nネ\nノ\nバ\nパ\nビ\nピ\nフ\nプ\nヘ\nベ\nペ\nホ\nボ\nポ\nマ\nミ\nム\nメ\nモ\nャ\nヤ\nュ\nユ\nョ\nヨ\nラ\nリ\nル\nレ\nロ\nワ\nン\n・\nー\nㄋ\nㄍ\nㄎ\nㄏ\nㄓ\nㄕ\nㄚ\nㄜ\nㄟ\nㄤ\nㄥ\nㄧ\nㄱ\nㄴ\nㄷ\nㄹ\nㅁ\nㅂ\nㅅ\nㅈ\nㅍ\nㅎ\nㅏ\nㅓ\nㅗ\nㅜ\nㅡ\nㅣ\n㗎\n가\n각\n간\n갈\n감\n갑\n갓\n갔\n강\n같\n개\n거\n건\n걸\n겁\n것\n겉\n게\n겠\n겨\n결\n겼\n경\n계\n고\n곤\n골\n곱\n공\n과\n관\n광\n교\n구\n국\n굴\n귀\n귄\n그\n근\n글\n금\n기\n긴\n길\n까\n깍\n깔\n깜\n깨\n께\n꼬\n꼭\n꽃\n꾸\n꿔\n끔\n끗\n끝\n끼\n나\n난\n날\n남\n납\n내\n냐\n냥\n너\n넘\n넣\n네\n녁\n년\n녕\n노\n녹\n놀\n누\n눈\n느\n는\n늘\n니\n님\n닙\n다\n닥\n단\n달\n닭\n당\n대\n더\n덕\n던\n덥\n데\n도\n독\n동\n돼\n됐\n되\n된\n될\n두\n둑\n둥\n드\n들\n등\n디\n따\n딱\n딸\n땅\n때\n떤\n떨\n떻\n또\n똑\n뚱\n뛰\n뜻\n띠\n라\n락\n란\n람\n랍\n랑\n래\n랜\n러\n런\n럼\n렇\n레\n려\n력\n렵\n렸\n로\n록\n롬\n루\n르\n른\n를\n름\n릉\n리\n릴\n림\n마\n막\n만\n많\n말\n맑\n맙\n맛\n매\n머\n먹\n멍\n메\n면\n명\n몇\n모\n목\n몸\n못\n무\n문\n물\n뭐\n뭘\n미\n민\n밌\n밑\n바\n박\n밖\n반\n받\n발\n밤\n밥\n방\n배\n백\n밸\n뱀\n버\n번\n벌\n벚\n베\n벼\n벽\n별\n병\n보\n복\n본\n볼\n봐\n봤\n부\n분\n불\n비\n빔\n빛\n빠\n빨\n뼈\n뽀\n뿅\n쁘\n사\n산\n살\n삼\n샀\n상\n새\n색\n생\n서\n선\n설\n섭\n섰\n성\n세\n셔\n션\n셨\n소\n속\n손\n송\n수\n숙\n순\n술\n숫\n숭\n숲\n쉬\n쉽\n스\n슨\n습\n슷\n시\n식\n신\n실\n싫\n심\n십\n싶\n싸\n써\n쓰\n쓴\n씌\n씨\n씩\n씬\n아\n악\n안\n않\n알\n야\n약\n얀\n양\n얘\n어\n언\n얼\n엄\n업\n없\n었\n엉\n에\n여\n역\n연\n염\n엽\n영\n옆\n예\n옛\n오\n온\n올\n옷\n옹\n와\n왔\n왜\n요\n욕\n용\n우\n운\n울\n웃\n워\n원\n월\n웠\n위\n윙\n유\n육\n윤\n으\n은\n을\n음\n응\n의\n이\n익\n인\n일\n읽\n임\n입\n있\n자\n작\n잔\n잖\n잘\n잡\n잤\n장\n재\n저\n전\n점\n정\n제\n져\n졌\n조\n족\n좀\n종\n좋\n죠\n주\n준\n줄\n중\n줘\n즈\n즐\n즘\n지\n진\n집\n짜\n짝\n쩌\n쪼\n쪽\n쫌\n쭈\n쯔\n찌\n찍\n차\n착\n찾\n책\n처\n천\n철\n체\n쳐\n쳤\n초\n촌\n추\n출\n춤\n춥\n춰\n치\n친\n칠\n침\n칩\n칼\n커\n켓\n코\n콩\n쿠\n퀴\n크\n큰\n큽\n키\n킨\n타\n태\n터\n턴\n털\n테\n토\n통\n투\n트\n특\n튼\n틀\n티\n팀\n파\n팔\n패\n페\n펜\n펭\n평\n포\n폭\n표\n품\n풍\n프\n플\n피\n필\n하\n학\n한\n할\n함\n합\n항\n해\n햇\n했\n행\n허\n험\n형\n혜\n호\n혼\n홀\n화\n회\n획\n후\n휴\n흐\n흔\n희\n히\n힘\nﷺ\nﷻ\n！\n，\n？\n�\n𠮶\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/infer/infer_cli.py",
    "content": "import argparse\nimport codecs\nimport os\nimport re\nfrom importlib.resources import files\nfrom pathlib import Path\n\nimport numpy as np\nimport soundfile as sf\nimport tomli\nfrom cached_path import cached_path\n\nfrom f5_tts.infer.utils_infer import (\n    infer_process,\n    load_model,\n    load_vocoder,\n    preprocess_ref_audio_text,\n    remove_silence_for_generated_wav,\n)\nfrom f5_tts.model import DiT, UNetT\n\nparser = argparse.ArgumentParser(\n    prog=\"python3 infer-cli.py\",\n    description=\"Commandline interface for E2/F5 TTS with Advanced Batch Processing.\",\n    epilog=\"Specify options above to override one or more settings from config.\",\n)\nparser.add_argument(\n    \"-c\",\n    \"--config\",\n    help=\"Configuration file. Default=infer/examples/basic/basic.toml\",\n    default=os.path.join(files(\"f5_tts\").joinpath(\"infer/examples/basic\"), \"basic.toml\"),\n)\nparser.add_argument(\n    \"-m\",\n    \"--model\",\n    help=\"F5-TTS | E2-TTS\",\n)\nparser.add_argument(\n    \"-p\",\n    \"--ckpt_file\",\n    help=\"The Checkpoint .pt\",\n)\nparser.add_argument(\n    \"-v\",\n    \"--vocab_file\",\n    help=\"The vocab .txt\",\n)\nparser.add_argument(\"-r\", \"--ref_audio\", type=str, help=\"Reference audio file < 15 seconds.\")\nparser.add_argument(\"-s\", \"--ref_text\", type=str, default=\"666\", help=\"Subtitle for the reference audio.\")\nparser.add_argument(\n    \"-t\",\n    \"--gen_text\",\n    type=str,\n    help=\"Text to generate.\",\n)\nparser.add_argument(\n    \"-f\",\n    \"--gen_file\",\n    type=str,\n    help=\"File with text to generate. Ignores --gen_text\",\n)\nparser.add_argument(\n    \"-o\",\n    \"--output_dir\",\n    type=str,\n    help=\"Path to output folder..\",\n)\nparser.add_argument(\n    \"-w\",\n    \"--output_file\",\n    type=str,\n    help=\"Filename of output file..\",\n)\nparser.add_argument(\n    \"--remove_silence\",\n    help=\"Remove silence.\",\n)\nparser.add_argument(\"--vocoder_name\", type=str, default=\"vocos\", choices=[\"vocos\", \"bigvgan\"], help=\"vocoder name\")\nparser.add_argument(\n    \"--load_vocoder_from_local\",\n    action=\"store_true\",\n    help=\"load vocoder from local. Default: ../checkpoints/charactr/vocos-mel-24khz\",\n)\nparser.add_argument(\n    \"--speed\",\n    type=float,\n    default=1.0,\n    help=\"Adjust the speed of the audio generation (default: 1.0)\",\n)\nargs = parser.parse_args()\n\nconfig = tomli.load(open(args.config, \"rb\"))\n\nref_audio = args.ref_audio if args.ref_audio else config[\"ref_audio\"]\nref_text = args.ref_text if args.ref_text != \"666\" else config[\"ref_text\"]\ngen_text = args.gen_text if args.gen_text else config[\"gen_text\"]\ngen_file = args.gen_file if args.gen_file else config[\"gen_file\"]\n\n# patches for pip pkg user\nif \"infer/examples/\" in ref_audio:\n    ref_audio = str(files(\"f5_tts\").joinpath(f\"{ref_audio}\"))\nif \"infer/examples/\" in gen_file:\n    gen_file = str(files(\"f5_tts\").joinpath(f\"{gen_file}\"))\nif \"voices\" in config:\n    for voice in config[\"voices\"]:\n        voice_ref_audio = config[\"voices\"][voice][\"ref_audio\"]\n        if \"infer/examples/\" in voice_ref_audio:\n            config[\"voices\"][voice][\"ref_audio\"] = str(files(\"f5_tts\").joinpath(f\"{voice_ref_audio}\"))\n\nif gen_file:\n    gen_text = codecs.open(gen_file, \"r\", \"utf-8\").read()\noutput_dir = args.output_dir if args.output_dir else config[\"output_dir\"]\noutput_file = args.output_file if args.output_file else config[\"output_file\"]\nmodel = args.model if args.model else config[\"model\"]\nckpt_file = args.ckpt_file if args.ckpt_file else \"\"\nvocab_file = args.vocab_file if args.vocab_file else \"\"\nremove_silence = args.remove_silence if args.remove_silence else config[\"remove_silence\"]\nspeed = args.speed\n\nwave_path = Path(output_dir) / output_file\n# spectrogram_path = Path(output_dir) / \"infer_cli_out.png\"\n\nvocoder_name = args.vocoder_name\nmel_spec_type = args.vocoder_name\nif vocoder_name == \"vocos\":\n    vocoder_local_path = \"../checkpoints/vocos-mel-24khz\"\nelif vocoder_name == \"bigvgan\":\n    vocoder_local_path = \"../checkpoints/bigvgan_v2_24khz_100band_256x\"\n\nvocoder = load_vocoder(vocoder_name=mel_spec_type, is_local=args.load_vocoder_from_local, local_path=vocoder_local_path)\n\n\n# load models\nif model == \"F5-TTS\":\n    model_cls = DiT\n    model_cfg = dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)\n    if ckpt_file == \"\":\n        if vocoder_name == \"vocos\":\n            repo_name = \"F5-TTS\"\n            exp_name = \"F5TTS_Base\"\n            ckpt_step = 1200000\n            ckpt_file = str(cached_path(f\"hf://SWivid/{repo_name}/{exp_name}/model_{ckpt_step}.safetensors\"))\n            # ckpt_file = f\"ckpts/{exp_name}/model_{ckpt_step}.pt\"  # .pt | .safetensors; local path\n        elif vocoder_name == \"bigvgan\":\n            repo_name = \"F5-TTS\"\n            exp_name = \"F5TTS_Base_bigvgan\"\n            ckpt_step = 1250000\n            ckpt_file = str(cached_path(f\"hf://SWivid/{repo_name}/{exp_name}/model_{ckpt_step}.pt\"))\n\nelif model == \"E2-TTS\":\n    assert vocoder_name == \"vocos\", \"E2-TTS only supports vocoder vocos\"\n    model_cls = UNetT\n    model_cfg = dict(dim=1024, depth=24, heads=16, ff_mult=4)\n    if ckpt_file == \"\":\n        repo_name = \"E2-TTS\"\n        exp_name = \"E2TTS_Base\"\n        ckpt_step = 1200000\n        ckpt_file = str(cached_path(f\"hf://SWivid/{repo_name}/{exp_name}/model_{ckpt_step}.safetensors\"))\n        # ckpt_file = f\"ckpts/{exp_name}/model_{ckpt_step}.pt\"  # .pt | .safetensors; local path\n\n\nprint(f\"Using {model}...\")\nema_model = load_model(model_cls, model_cfg, ckpt_file, mel_spec_type=mel_spec_type, vocab_file=vocab_file)\n\n\ndef main_process(ref_audio, ref_text, text_gen, model_obj, mel_spec_type, remove_silence, speed):\n    main_voice = {\"ref_audio\": ref_audio, \"ref_text\": ref_text}\n    if \"voices\" not in config:\n        voices = {\"main\": main_voice}\n    else:\n        voices = config[\"voices\"]\n        voices[\"main\"] = main_voice\n    for voice in voices:\n        voices[voice][\"ref_audio\"], voices[voice][\"ref_text\"] = preprocess_ref_audio_text(\n            voices[voice][\"ref_audio\"], voices[voice][\"ref_text\"]\n        )\n        print(\"Voice:\", voice)\n        print(\"Ref_audio:\", voices[voice][\"ref_audio\"])\n        print(\"Ref_text:\", voices[voice][\"ref_text\"])\n\n    generated_audio_segments = []\n    reg1 = r\"(?=\\[\\w+\\])\"\n    chunks = re.split(reg1, text_gen)\n    reg2 = r\"\\[(\\w+)\\]\"\n    for text in chunks:\n        if not text.strip():\n            continue\n        match = re.match(reg2, text)\n        if match:\n            voice = match[1]\n        else:\n            print(\"No voice tag found, using main.\")\n            voice = \"main\"\n        if voice not in voices:\n            print(f\"Voice {voice} not found, using main.\")\n            voice = \"main\"\n        text = re.sub(reg2, \"\", text)\n        gen_text = text.strip()\n        ref_audio = voices[voice][\"ref_audio\"]\n        ref_text = voices[voice][\"ref_text\"]\n        print(f\"Voice: {voice}\")\n        audio, final_sample_rate, spectragram = infer_process(\n            ref_audio, ref_text, gen_text, model_obj, vocoder, mel_spec_type=mel_spec_type, speed=speed\n        )\n        generated_audio_segments.append(audio)\n\n    if generated_audio_segments:\n        final_wave = np.concatenate(generated_audio_segments)\n\n        if not os.path.exists(output_dir):\n            os.makedirs(output_dir)\n\n        with open(wave_path, \"wb\") as f:\n            sf.write(f.name, final_wave, final_sample_rate)\n            # Remove silence\n            if remove_silence:\n                remove_silence_for_generated_wav(f.name)\n            print(f.name)\n\n\ndef main():\n    main_process(ref_audio, ref_text, gen_text, ema_model, mel_spec_type, remove_silence, speed)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/infer/infer_gradio.py",
    "content": "# ruff: noqa: E402\n# Above allows ruff to ignore E402: module level import not at top of file\n\nimport re\nimport tempfile\nfrom collections import OrderedDict\nfrom importlib.resources import files\n\nimport click\nimport gradio as gr\nimport numpy as np\nimport soundfile as sf\nimport torchaudio\nfrom cached_path import cached_path\nfrom transformers import AutoModelForCausalLM, AutoTokenizer\n\ntry:\n    import spaces\n\n    USING_SPACES = True\nexcept ImportError:\n    USING_SPACES = False\n\n\ndef gpu_decorator(func):\n    if USING_SPACES:\n        return spaces.GPU(func)\n    else:\n        return func\n\n\nfrom f5_tts.model import DiT, UNetT\nfrom f5_tts.infer.utils_infer import (\n    load_vocoder,\n    load_model,\n    preprocess_ref_audio_text,\n    infer_process,\n    remove_silence_for_generated_wav,\n    save_spectrogram,\n)\n\n\nDEFAULT_TTS_MODEL = \"F5-TTS\"\ntts_model_choice = DEFAULT_TTS_MODEL\n\n\n# load models\n\nvocoder = load_vocoder()\n\n\ndef load_f5tts(ckpt_path=str(cached_path(\"hf://SWivid/F5-TTS/F5TTS_Base/model_1200000.safetensors\"))):\n    F5TTS_model_cfg = dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)\n    return load_model(DiT, F5TTS_model_cfg, ckpt_path)\n\n\ndef load_e2tts(ckpt_path=str(cached_path(\"hf://SWivid/E2-TTS/E2TTS_Base/model_1200000.safetensors\"))):\n    E2TTS_model_cfg = dict(dim=1024, depth=24, heads=16, ff_mult=4)\n    return load_model(UNetT, E2TTS_model_cfg, ckpt_path)\n\n\ndef load_custom(ckpt_path: str, vocab_path=\"\", model_cfg=None):\n    ckpt_path, vocab_path = ckpt_path.strip(), vocab_path.strip()\n    if ckpt_path.startswith(\"hf://\"):\n        ckpt_path = str(cached_path(ckpt_path))\n    if vocab_path.startswith(\"hf://\"):\n        vocab_path = str(cached_path(vocab_path))\n    if model_cfg is None:\n        model_cfg = dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)\n    return load_model(DiT, model_cfg, ckpt_path, vocab_file=vocab_path)\n\n\nF5TTS_ema_model = load_f5tts()\nE2TTS_ema_model = load_e2tts() if USING_SPACES else None\ncustom_ema_model, pre_custom_path = None, \"\"\n\nchat_model_state = None\nchat_tokenizer_state = None\n\n\n@gpu_decorator\ndef generate_response(messages, model, tokenizer):\n    \"\"\"Generate response using Qwen\"\"\"\n    text = tokenizer.apply_chat_template(\n        messages,\n        tokenize=False,\n        add_generation_prompt=True,\n    )\n\n    model_inputs = tokenizer([text], return_tensors=\"pt\").to(model.device)\n    generated_ids = model.generate(\n        **model_inputs,\n        max_new_tokens=512,\n        temperature=0.7,\n        top_p=0.95,\n    )\n\n    generated_ids = [\n        output_ids[len(input_ids) :] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)\n    ]\n    return tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]\n\n\n@gpu_decorator\ndef infer(\n    ref_audio_orig, ref_text, gen_text, model, remove_silence, cross_fade_duration=0.15, speed=1, show_info=gr.Info\n):\n    ref_audio, ref_text = preprocess_ref_audio_text(ref_audio_orig, ref_text, show_info=show_info)\n\n    if model == \"F5-TTS\":\n        ema_model = F5TTS_ema_model\n    elif model == \"E2-TTS\":\n        global E2TTS_ema_model\n        if E2TTS_ema_model is None:\n            show_info(\"Loading E2-TTS model...\")\n            E2TTS_ema_model = load_e2tts()\n        ema_model = E2TTS_ema_model\n    elif isinstance(model, list) and model[0] == \"Custom\":\n        assert not USING_SPACES, \"Only official checkpoints allowed in Spaces.\"\n        global custom_ema_model, pre_custom_path\n        if pre_custom_path != model[1]:\n            show_info(\"Loading Custom TTS model...\")\n            custom_ema_model = load_custom(model[1], vocab_path=model[2])\n            pre_custom_path = model[1]\n        ema_model = custom_ema_model\n\n    final_wave, final_sample_rate, combined_spectrogram = infer_process(\n        ref_audio,\n        ref_text,\n        gen_text,\n        ema_model,\n        vocoder,\n        cross_fade_duration=cross_fade_duration,\n        speed=speed,\n        show_info=show_info,\n        progress=gr.Progress(),\n    )\n\n    # Remove silence\n    if remove_silence:\n        with tempfile.NamedTemporaryFile(delete=False, suffix=\".wav\") as f:\n            sf.write(f.name, final_wave, final_sample_rate)\n            remove_silence_for_generated_wav(f.name)\n            final_wave, _ = torchaudio.load(f.name)\n        final_wave = final_wave.squeeze().cpu().numpy()\n\n    # Save the spectrogram\n    with tempfile.NamedTemporaryFile(suffix=\".png\", delete=False) as tmp_spectrogram:\n        spectrogram_path = tmp_spectrogram.name\n        save_spectrogram(combined_spectrogram, spectrogram_path)\n\n    return (final_sample_rate, final_wave), spectrogram_path, ref_text\n\n\nwith gr.Blocks() as app_credits:\n    gr.Markdown(\"\"\"\n# Credits\n\n* [mrfakename](https://github.com/fakerybakery) for the original [online demo](https://huggingface.co/spaces/mrfakename/E2-F5-TTS)\n* [RootingInLoad](https://github.com/RootingInLoad) for initial chunk generation and podcast app exploration\n* [jpgallegoar](https://github.com/jpgallegoar) for multiple speech-type generation & voice chat\n\"\"\")\nwith gr.Blocks() as app_tts:\n    gr.Markdown(\"# Batched TTS\")\n    ref_audio_input = gr.Audio(label=\"Reference Audio\", type=\"filepath\")\n    gen_text_input = gr.Textbox(label=\"Text to Generate\", lines=10)\n    generate_btn = gr.Button(\"Synthesize\", variant=\"primary\")\n    with gr.Accordion(\"Advanced Settings\", open=False):\n        ref_text_input = gr.Textbox(\n            label=\"Reference Text\",\n            info=\"Leave blank to automatically transcribe the reference audio. If you enter text it will override automatic transcription.\",\n            lines=2,\n        )\n        remove_silence = gr.Checkbox(\n            label=\"Remove Silences\",\n            info=\"The model tends to produce silences, especially on longer audio. We can manually remove silences if needed. Note that this is an experimental feature and may produce strange results. This will also increase generation time.\",\n            value=False,\n        )\n        speed_slider = gr.Slider(\n            label=\"Speed\",\n            minimum=0.3,\n            maximum=2.0,\n            value=1.0,\n            step=0.1,\n            info=\"Adjust the speed of the audio.\",\n        )\n        cross_fade_duration_slider = gr.Slider(\n            label=\"Cross-Fade Duration (s)\",\n            minimum=0.0,\n            maximum=1.0,\n            value=0.15,\n            step=0.01,\n            info=\"Set the duration of the cross-fade between audio clips.\",\n        )\n\n    audio_output = gr.Audio(label=\"Synthesized Audio\")\n    spectrogram_output = gr.Image(label=\"Spectrogram\")\n\n    @gpu_decorator\n    def basic_tts(\n        ref_audio_input,\n        ref_text_input,\n        gen_text_input,\n        remove_silence,\n        cross_fade_duration_slider,\n        speed_slider,\n    ):\n        audio_out, spectrogram_path, ref_text_out = infer(\n            ref_audio_input,\n            ref_text_input,\n            gen_text_input,\n            tts_model_choice,\n            remove_silence,\n            cross_fade_duration_slider,\n            speed_slider,\n        )\n        return audio_out, spectrogram_path, gr.update(value=ref_text_out)\n\n    generate_btn.click(\n        basic_tts,\n        inputs=[\n            ref_audio_input,\n            ref_text_input,\n            gen_text_input,\n            remove_silence,\n            cross_fade_duration_slider,\n            speed_slider,\n        ],\n        outputs=[audio_output, spectrogram_output, ref_text_input],\n    )\n\n\ndef parse_speechtypes_text(gen_text):\n    # Pattern to find {speechtype}\n    pattern = r\"\\{(.*?)\\}\"\n\n    # Split the text by the pattern\n    tokens = re.split(pattern, gen_text)\n\n    segments = []\n\n    current_style = \"Regular\"\n\n    for i in range(len(tokens)):\n        if i % 2 == 0:\n            # This is text\n            text = tokens[i].strip()\n            if text:\n                segments.append({\"style\": current_style, \"text\": text})\n        else:\n            # This is style\n            style = tokens[i].strip()\n            current_style = style\n\n    return segments\n\n\nwith gr.Blocks() as app_multistyle:\n    # New section for multistyle generation\n    gr.Markdown(\n        \"\"\"\n    # Multiple Speech-Type Generation\n\n    This section allows you to generate multiple speech types or multiple people's voices. Enter your text in the format shown below, and the system will generate speech using the appropriate type. If unspecified, the model will use the regular speech type. The current speech type will be used until the next speech type is specified.\n    \"\"\"\n    )\n\n    with gr.Row():\n        gr.Markdown(\n            \"\"\"\n            **Example Input:**                                                                      \n            {Regular} Hello, I'd like to order a sandwich please.                                                         \n            {Surprised} What do you mean you're out of bread?                                                                      \n            {Sad} I really wanted a sandwich though...                                                              \n            {Angry} You know what, darn you and your little shop!                                                                       \n            {Whisper} I'll just go back home and cry now.                                                                           \n            {Shouting} Why me?!                                                                         \n            \"\"\"\n        )\n\n        gr.Markdown(\n            \"\"\"\n            **Example Input 2:**                                                                                \n            {Speaker1_Happy} Hello, I'd like to order a sandwich please.                                                            \n            {Speaker2_Regular} Sorry, we're out of bread.                                                                                \n            {Speaker1_Sad} I really wanted a sandwich though...                                                                             \n            {Speaker2_Whisper} I'll give you the last one I was hiding.                                                                     \n            \"\"\"\n        )\n\n    gr.Markdown(\n        \"Upload different audio clips for each speech type. The first speech type is mandatory. You can add additional speech types by clicking the 'Add Speech Type' button.\"\n    )\n\n    # Regular speech type (mandatory)\n    with gr.Row():\n        with gr.Column():\n            regular_name = gr.Textbox(value=\"Regular\", label=\"Speech Type Name\")\n            regular_insert = gr.Button(\"Insert Label\", variant=\"secondary\")\n        regular_audio = gr.Audio(label=\"Regular Reference Audio\", type=\"filepath\")\n        regular_ref_text = gr.Textbox(label=\"Reference Text (Regular)\", lines=2)\n\n    # Regular speech type (max 100)\n    max_speech_types = 100\n    speech_type_rows = []  # 99\n    speech_type_names = [regular_name]  # 100\n    speech_type_audios = [regular_audio]  # 100\n    speech_type_ref_texts = [regular_ref_text]  # 100\n    speech_type_delete_btns = []  # 99\n    speech_type_insert_btns = [regular_insert]  # 100\n\n    # Additional speech types (99 more)\n    for i in range(max_speech_types - 1):\n        with gr.Row(visible=False) as row:\n            with gr.Column():\n                name_input = gr.Textbox(label=\"Speech Type Name\")\n                delete_btn = gr.Button(\"Delete Type\", variant=\"secondary\")\n                insert_btn = gr.Button(\"Insert Label\", variant=\"secondary\")\n            audio_input = gr.Audio(label=\"Reference Audio\", type=\"filepath\")\n            ref_text_input = gr.Textbox(label=\"Reference Text\", lines=2)\n        speech_type_rows.append(row)\n        speech_type_names.append(name_input)\n        speech_type_audios.append(audio_input)\n        speech_type_ref_texts.append(ref_text_input)\n        speech_type_delete_btns.append(delete_btn)\n        speech_type_insert_btns.append(insert_btn)\n\n    # Button to add speech type\n    add_speech_type_btn = gr.Button(\"Add Speech Type\")\n\n    # Keep track of current number of speech types\n    speech_type_count = gr.State(value=1)\n\n    # Function to add a speech type\n    def add_speech_type_fn(speech_type_count):\n        if speech_type_count < max_speech_types:\n            speech_type_count += 1\n            # Prepare updates for the rows\n            row_updates = []\n            for i in range(1, max_speech_types):\n                if i < speech_type_count:\n                    row_updates.append(gr.update(visible=True))\n                else:\n                    row_updates.append(gr.update())\n        else:\n            # Optionally, show a warning\n            row_updates = [gr.update() for _ in range(1, max_speech_types)]\n        return [speech_type_count] + row_updates\n\n    add_speech_type_btn.click(\n        add_speech_type_fn, inputs=speech_type_count, outputs=[speech_type_count] + speech_type_rows\n    )\n\n    # Function to delete a speech type\n    def make_delete_speech_type_fn(index):\n        def delete_speech_type_fn(speech_type_count):\n            # Prepare updates\n            row_updates = []\n\n            for i in range(1, max_speech_types):\n                if i == index:\n                    row_updates.append(gr.update(visible=False))\n                else:\n                    row_updates.append(gr.update())\n\n            speech_type_count = max(1, speech_type_count)\n\n            return [speech_type_count] + row_updates\n\n        return delete_speech_type_fn\n\n    # Update delete button clicks\n    for i, delete_btn in enumerate(speech_type_delete_btns):\n        delete_fn = make_delete_speech_type_fn(i)\n        delete_btn.click(delete_fn, inputs=speech_type_count, outputs=[speech_type_count] + speech_type_rows)\n\n    # Text input for the prompt\n    gen_text_input_multistyle = gr.Textbox(\n        label=\"Text to Generate\",\n        lines=10,\n        placeholder=\"Enter the script with speaker names (or emotion types) at the start of each block, e.g.:\\n\\n{Regular} Hello, I'd like to order a sandwich please.\\n{Surprised} What do you mean you're out of bread?\\n{Sad} I really wanted a sandwich though...\\n{Angry} You know what, darn you and your little shop!\\n{Whisper} I'll just go back home and cry now.\\n{Shouting} Why me?!\",\n    )\n\n    def make_insert_speech_type_fn(index):\n        def insert_speech_type_fn(current_text, speech_type_name):\n            current_text = current_text or \"\"\n            speech_type_name = speech_type_name or \"None\"\n            updated_text = current_text + f\"{{{speech_type_name}}} \"\n            return gr.update(value=updated_text)\n\n        return insert_speech_type_fn\n\n    for i, insert_btn in enumerate(speech_type_insert_btns):\n        insert_fn = make_insert_speech_type_fn(i)\n        insert_btn.click(\n            insert_fn,\n            inputs=[gen_text_input_multistyle, speech_type_names[i]],\n            outputs=gen_text_input_multistyle,\n        )\n\n    with gr.Accordion(\"Advanced Settings\", open=False):\n        remove_silence_multistyle = gr.Checkbox(\n            label=\"Remove Silences\",\n            value=True,\n        )\n\n    # Generate button\n    generate_multistyle_btn = gr.Button(\"Generate Multi-Style Speech\", variant=\"primary\")\n\n    # Output audio\n    audio_output_multistyle = gr.Audio(label=\"Synthesized Audio\")\n\n    @gpu_decorator\n    def generate_multistyle_speech(\n        gen_text,\n        *args,\n    ):\n        speech_type_names_list = args[:max_speech_types]\n        speech_type_audios_list = args[max_speech_types : 2 * max_speech_types]\n        speech_type_ref_texts_list = args[2 * max_speech_types : 3 * max_speech_types]\n        remove_silence = args[3 * max_speech_types]\n        # Collect the speech types and their audios into a dict\n        speech_types = OrderedDict()\n\n        ref_text_idx = 0\n        for name_input, audio_input, ref_text_input in zip(\n            speech_type_names_list, speech_type_audios_list, speech_type_ref_texts_list\n        ):\n            if name_input and audio_input:\n                speech_types[name_input] = {\"audio\": audio_input, \"ref_text\": ref_text_input}\n            else:\n                speech_types[f\"@{ref_text_idx}@\"] = {\"audio\": \"\", \"ref_text\": \"\"}\n            ref_text_idx += 1\n\n        # Parse the gen_text into segments\n        segments = parse_speechtypes_text(gen_text)\n\n        # For each segment, generate speech\n        generated_audio_segments = []\n        current_style = \"Regular\"\n\n        for segment in segments:\n            style = segment[\"style\"]\n            text = segment[\"text\"]\n\n            if style in speech_types:\n                current_style = style\n            else:\n                # If style not available, default to Regular\n                current_style = \"Regular\"\n\n            ref_audio = speech_types[current_style][\"audio\"]\n            ref_text = speech_types[current_style].get(\"ref_text\", \"\")\n\n            # Generate speech for this segment\n            audio_out, _, ref_text_out = infer(\n                ref_audio, ref_text, text, tts_model_choice, remove_silence, 0, show_info=print\n            )  # show_info=print no pull to top when generating\n            sr, audio_data = audio_out\n\n            generated_audio_segments.append(audio_data)\n            speech_types[current_style][\"ref_text\"] = ref_text_out\n\n        # Concatenate all audio segments\n        if generated_audio_segments:\n            final_audio_data = np.concatenate(generated_audio_segments)\n            return [(sr, final_audio_data)] + [\n                gr.update(value=speech_types[style][\"ref_text\"]) for style in speech_types\n            ]\n        else:\n            gr.Warning(\"No audio generated.\")\n            return [None] + [gr.update(value=speech_types[style][\"ref_text\"]) for style in speech_types]\n\n    generate_multistyle_btn.click(\n        generate_multistyle_speech,\n        inputs=[\n            gen_text_input_multistyle,\n        ]\n        + speech_type_names\n        + speech_type_audios\n        + speech_type_ref_texts\n        + [\n            remove_silence_multistyle,\n        ],\n        outputs=[audio_output_multistyle] + speech_type_ref_texts,\n    )\n\n    # Validation function to disable Generate button if speech types are missing\n    def validate_speech_types(gen_text, regular_name, *args):\n        speech_type_names_list = args[:max_speech_types]\n\n        # Collect the speech types names\n        speech_types_available = set()\n        if regular_name:\n            speech_types_available.add(regular_name)\n        for name_input in speech_type_names_list:\n            if name_input:\n                speech_types_available.add(name_input)\n\n        # Parse the gen_text to get the speech types used\n        segments = parse_speechtypes_text(gen_text)\n        speech_types_in_text = set(segment[\"style\"] for segment in segments)\n\n        # Check if all speech types in text are available\n        missing_speech_types = speech_types_in_text - speech_types_available\n\n        if missing_speech_types:\n            # Disable the generate button\n            return gr.update(interactive=False)\n        else:\n            # Enable the generate button\n            return gr.update(interactive=True)\n\n    gen_text_input_multistyle.change(\n        validate_speech_types,\n        inputs=[gen_text_input_multistyle, regular_name] + speech_type_names,\n        outputs=generate_multistyle_btn,\n    )\n\n\nwith gr.Blocks() as app_chat:\n    gr.Markdown(\n        \"\"\"\n# Voice Chat\nHave a conversation with an AI using your reference voice! \n1. Upload a reference audio clip and optionally its transcript.\n2. Load the chat model.\n3. Record your message through your microphone.\n4. The AI will respond using the reference voice.\n\"\"\"\n    )\n\n    if not USING_SPACES:\n        load_chat_model_btn = gr.Button(\"Load Chat Model\", variant=\"primary\")\n\n        chat_interface_container = gr.Column(visible=False)\n\n        @gpu_decorator\n        def load_chat_model():\n            global chat_model_state, chat_tokenizer_state\n            if chat_model_state is None:\n                show_info = gr.Info\n                show_info(\"Loading chat model...\")\n                model_name = \"Qwen/Qwen2.5-3B-Instruct\"\n                chat_model_state = AutoModelForCausalLM.from_pretrained(\n                    model_name, torch_dtype=\"auto\", device_map=\"auto\"\n                )\n                chat_tokenizer_state = AutoTokenizer.from_pretrained(model_name)\n                show_info(\"Chat model loaded.\")\n\n            return gr.update(visible=False), gr.update(visible=True)\n\n        load_chat_model_btn.click(load_chat_model, outputs=[load_chat_model_btn, chat_interface_container])\n\n    else:\n        chat_interface_container = gr.Column()\n\n        if chat_model_state is None:\n            model_name = \"Qwen/Qwen2.5-3B-Instruct\"\n            chat_model_state = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=\"auto\", device_map=\"auto\")\n            chat_tokenizer_state = AutoTokenizer.from_pretrained(model_name)\n\n    with chat_interface_container:\n        with gr.Row():\n            with gr.Column():\n                ref_audio_chat = gr.Audio(label=\"Reference Audio\", type=\"filepath\")\n            with gr.Column():\n                with gr.Accordion(\"Advanced Settings\", open=False):\n                    remove_silence_chat = gr.Checkbox(\n                        label=\"Remove Silences\",\n                        value=True,\n                    )\n                    ref_text_chat = gr.Textbox(\n                        label=\"Reference Text\",\n                        info=\"Optional: Leave blank to auto-transcribe\",\n                        lines=2,\n                    )\n                    system_prompt_chat = gr.Textbox(\n                        label=\"System Prompt\",\n                        value=\"You are not an AI assistant, you are whoever the user says you are. You must stay in character. Keep your responses concise since they will be spoken out loud.\",\n                        lines=2,\n                    )\n\n        chatbot_interface = gr.Chatbot(label=\"Conversation\")\n\n        with gr.Row():\n            with gr.Column():\n                audio_input_chat = gr.Microphone(\n                    label=\"Speak your message\",\n                    type=\"filepath\",\n                )\n                audio_output_chat = gr.Audio(autoplay=True)\n            with gr.Column():\n                text_input_chat = gr.Textbox(\n                    label=\"Type your message\",\n                    lines=1,\n                )\n                send_btn_chat = gr.Button(\"Send Message\")\n                clear_btn_chat = gr.Button(\"Clear Conversation\")\n\n        conversation_state = gr.State(\n            value=[\n                {\n                    \"role\": \"system\",\n                    \"content\": \"You are not an AI assistant, you are whoever the user says you are. You must stay in character. Keep your responses concise since they will be spoken out loud.\",\n                }\n            ]\n        )\n\n        # Modify process_audio_input to use model and tokenizer from state\n        @gpu_decorator\n        def process_audio_input(audio_path, text, history, conv_state):\n            \"\"\"Handle audio or text input from user\"\"\"\n\n            if not audio_path and not text.strip():\n                return history, conv_state, \"\"\n\n            if audio_path:\n                text = preprocess_ref_audio_text(audio_path, text)[1]\n\n            if not text.strip():\n                return history, conv_state, \"\"\n\n            conv_state.append({\"role\": \"user\", \"content\": text})\n            history.append((text, None))\n\n            response = generate_response(conv_state, chat_model_state, chat_tokenizer_state)\n\n            conv_state.append({\"role\": \"assistant\", \"content\": response})\n            history[-1] = (text, response)\n\n            return history, conv_state, \"\"\n\n        @gpu_decorator\n        def generate_audio_response(history, ref_audio, ref_text, remove_silence):\n            \"\"\"Generate TTS audio for AI response\"\"\"\n            if not history or not ref_audio:\n                return None\n\n            last_user_message, last_ai_response = history[-1]\n            if not last_ai_response:\n                return None\n\n            audio_result, _, ref_text_out = infer(\n                ref_audio,\n                ref_text,\n                last_ai_response,\n                tts_model_choice,\n                remove_silence,\n                cross_fade_duration=0.15,\n                speed=1.0,\n                show_info=print,  # show_info=print no pull to top when generating\n            )\n            return audio_result, gr.update(value=ref_text_out)\n\n        def clear_conversation():\n            \"\"\"Reset the conversation\"\"\"\n            return [], [\n                {\n                    \"role\": \"system\",\n                    \"content\": \"You are not an AI assistant, you are whoever the user says you are. You must stay in character. Keep your responses concise since they will be spoken out loud.\",\n                }\n            ]\n\n        def update_system_prompt(new_prompt):\n            \"\"\"Update the system prompt and reset the conversation\"\"\"\n            new_conv_state = [{\"role\": \"system\", \"content\": new_prompt}]\n            return [], new_conv_state\n\n        # Handle audio input\n        audio_input_chat.stop_recording(\n            process_audio_input,\n            inputs=[audio_input_chat, text_input_chat, chatbot_interface, conversation_state],\n            outputs=[chatbot_interface, conversation_state],\n        ).then(\n            generate_audio_response,\n            inputs=[chatbot_interface, ref_audio_chat, ref_text_chat, remove_silence_chat],\n            outputs=[audio_output_chat, ref_text_chat],\n        ).then(\n            lambda: None,\n            None,\n            audio_input_chat,\n        )\n\n        # Handle text input\n        text_input_chat.submit(\n            process_audio_input,\n            inputs=[audio_input_chat, text_input_chat, chatbot_interface, conversation_state],\n            outputs=[chatbot_interface, conversation_state],\n        ).then(\n            generate_audio_response,\n            inputs=[chatbot_interface, ref_audio_chat, ref_text_chat, remove_silence_chat],\n            outputs=[audio_output_chat, ref_text_chat],\n        ).then(\n            lambda: None,\n            None,\n            text_input_chat,\n        )\n\n        # Handle send button\n        send_btn_chat.click(\n            process_audio_input,\n            inputs=[audio_input_chat, text_input_chat, chatbot_interface, conversation_state],\n            outputs=[chatbot_interface, conversation_state],\n        ).then(\n            generate_audio_response,\n            inputs=[chatbot_interface, ref_audio_chat, ref_text_chat, remove_silence_chat],\n            outputs=[audio_output_chat, ref_text_chat],\n        ).then(\n            lambda: None,\n            None,\n            text_input_chat,\n        )\n\n        # Handle clear button\n        clear_btn_chat.click(\n            clear_conversation,\n            outputs=[chatbot_interface, conversation_state],\n        )\n\n        # Handle system prompt change and reset conversation\n        system_prompt_chat.change(\n            update_system_prompt,\n            inputs=system_prompt_chat,\n            outputs=[chatbot_interface, conversation_state],\n        )\n\n\nwith gr.Blocks() as app:\n    gr.Markdown(\n        \"\"\"\n# E2/F5 TTS\n\nThis is a local web UI for F5 TTS with advanced batch processing support. This app supports the following TTS models:\n\n* [F5-TTS](https://arxiv.org/abs/2410.06885) (A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching)\n* [E2 TTS](https://arxiv.org/abs/2406.18009) (Embarrassingly Easy Fully Non-Autoregressive Zero-Shot TTS)\n\nThe checkpoints currently support English and Chinese.\n\nIf you're having issues, try converting your reference audio to WAV or MP3, clipping it to 15s with  ✂  in the bottom right corner (otherwise might have non-optimal auto-trimmed result).\n\n**NOTE: Reference text will be automatically transcribed with Whisper if not provided. For best results, keep your reference clips short (<15s). Ensure the audio is fully uploaded before generating.**\n\"\"\"\n    )\n\n    last_used_custom = files(\"f5_tts\").joinpath(\"infer/.cache/last_used_custom.txt\")\n\n    def load_last_used_custom():\n        try:\n            with open(last_used_custom, \"r\") as f:\n                return f.read().split(\",\")\n        except FileNotFoundError:\n            last_used_custom.parent.mkdir(parents=True, exist_ok=True)\n            return [\n                \"hf://SWivid/F5-TTS/F5TTS_Base/model_1200000.safetensors\",\n                \"hf://SWivid/F5-TTS/F5TTS_Base/vocab.txt\",\n            ]\n\n    def switch_tts_model(new_choice):\n        global tts_model_choice\n        if new_choice == \"Custom\":  # override in case webpage is refreshed\n            custom_ckpt_path, custom_vocab_path = load_last_used_custom()\n            tts_model_choice = [\"Custom\", custom_ckpt_path, custom_vocab_path]\n            return gr.update(visible=True, value=custom_ckpt_path), gr.update(visible=True, value=custom_vocab_path)\n        else:\n            tts_model_choice = new_choice\n            return gr.update(visible=False), gr.update(visible=False)\n\n    def set_custom_model(custom_ckpt_path, custom_vocab_path):\n        global tts_model_choice\n        tts_model_choice = [\"Custom\", custom_ckpt_path, custom_vocab_path]\n        with open(last_used_custom, \"w\") as f:\n            f.write(f\"{custom_ckpt_path},{custom_vocab_path}\")\n\n    with gr.Row():\n        if not USING_SPACES:\n            choose_tts_model = gr.Radio(\n                choices=[DEFAULT_TTS_MODEL, \"E2-TTS\", \"Custom\"], label=\"Choose TTS Model\", value=DEFAULT_TTS_MODEL\n            )\n        else:\n            choose_tts_model = gr.Radio(\n                choices=[DEFAULT_TTS_MODEL, \"E2-TTS\"], label=\"Choose TTS Model\", value=DEFAULT_TTS_MODEL\n            )\n        custom_ckpt_path = gr.Dropdown(\n            choices=[\"hf://SWivid/F5-TTS/F5TTS_Base/model_1200000.safetensors\"],\n            value=load_last_used_custom()[0],\n            allow_custom_value=True,\n            label=\"MODEL CKPT: local_path | hf://user_id/repo_id/model_ckpt\",\n            visible=False,\n        )\n        custom_vocab_path = gr.Dropdown(\n            choices=[\"hf://SWivid/F5-TTS/F5TTS_Base/vocab.txt\"],\n            value=load_last_used_custom()[1],\n            allow_custom_value=True,\n            label=\"VOCAB FILE: local_path | hf://user_id/repo_id/vocab_file\",\n            visible=False,\n        )\n\n    choose_tts_model.change(\n        switch_tts_model,\n        inputs=[choose_tts_model],\n        outputs=[custom_ckpt_path, custom_vocab_path],\n        show_progress=\"hidden\",\n    )\n    custom_ckpt_path.change(\n        set_custom_model,\n        inputs=[custom_ckpt_path, custom_vocab_path],\n        show_progress=\"hidden\",\n    )\n    custom_vocab_path.change(\n        set_custom_model,\n        inputs=[custom_ckpt_path, custom_vocab_path],\n        show_progress=\"hidden\",\n    )\n\n    gr.TabbedInterface(\n        [app_tts, app_multistyle, app_chat, app_credits],\n        [\"Basic-TTS\", \"Multi-Speech\", \"Voice-Chat\", \"Credits\"],\n    )\n\n\n@click.command()\n@click.option(\"--port\", \"-p\", default=None, type=int, help=\"Port to run the app on\")\n@click.option(\"--host\", \"-H\", default=None, help=\"Host to run the app on\")\n@click.option(\n    \"--share\",\n    \"-s\",\n    default=False,\n    is_flag=True,\n    help=\"Share the app via Gradio share link\",\n)\n@click.option(\"--api\", \"-a\", default=True, is_flag=True, help=\"Allow API access\")\n@click.option(\n    \"--root_path\",\n    \"-r\",\n    default=None,\n    type=str,\n    help='The root path (or \"mount point\") of the application, if it\\'s not served from the root (\"/\") of the domain. Often used when the application is behind a reverse proxy that forwards requests to the application, e.g. set \"/myapp\" or full URL for application served at \"https://example.com/myapp\".',\n)\ndef main(port, host, share, api, root_path):\n    global app\n    print(\"Starting app...\")\n    app.queue(api_open=api).launch(server_name=host, server_port=port, share=share, show_api=api, root_path=root_path)\n\n\nif __name__ == \"__main__\":\n    if not USING_SPACES:\n        main()\n    else:\n        app.queue().launch()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/infer/speech_edit.py",
    "content": "import os\n\nos.environ[\"PYTOCH_ENABLE_MPS_FALLBACK\"] = \"1\"  # for MPS device compatibility\n\nimport torch\nimport torch.nn.functional as F\nimport torchaudio\n\nfrom f5_tts.infer.utils_infer import load_checkpoint, load_vocoder, save_spectrogram\nfrom f5_tts.model import CFM, DiT, UNetT\nfrom f5_tts.model.utils import convert_char_to_pinyin, get_tokenizer\n\ndevice = \"cuda\" if torch.cuda.is_available() else \"mps\" if torch.backends.mps.is_available() else \"cpu\"\n\n\n# --------------------- Dataset Settings -------------------- #\n\ntarget_sample_rate = 24000\nn_mel_channels = 100\nhop_length = 256\nwin_length = 1024\nn_fft = 1024\nmel_spec_type = \"vocos\"  # 'vocos' or 'bigvgan'\ntarget_rms = 0.1\n\ntokenizer = \"pinyin\"\ndataset_name = \"Emilia_ZH_EN\"\n\n\n# ---------------------- infer setting ---------------------- #\n\nseed = None  # int | None\n\nexp_name = \"F5TTS_Base\"  # F5TTS_Base | E2TTS_Base\nckpt_step = 1200000\n\nnfe_step = 32  # 16, 32\ncfg_strength = 2.0\node_method = \"euler\"  # euler | midpoint\nsway_sampling_coef = -1.0\nspeed = 1.0\n\nif exp_name == \"F5TTS_Base\":\n    model_cls = DiT\n    model_cfg = dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)\n\nelif exp_name == \"E2TTS_Base\":\n    model_cls = UNetT\n    model_cfg = dict(dim=1024, depth=24, heads=16, ff_mult=4)\n\nckpt_path = f\"ckpts/{exp_name}/model_{ckpt_step}.safetensors\"\noutput_dir = \"tests\"\n\n# [leverage https://github.com/MahmoudAshraf97/ctc-forced-aligner to get char level alignment]\n# pip install git+https://github.com/MahmoudAshraf97/ctc-forced-aligner.git\n# [write the origin_text into a file, e.g. tests/test_edit.txt]\n# ctc-forced-aligner --audio_path \"src/f5_tts/infer/examples/basic/basic_ref_en.wav\" --text_path \"tests/test_edit.txt\" --language \"zho\" --romanize --split_size \"char\"\n# [result will be saved at same path of audio file]\n# [--language \"zho\" for Chinese, \"eng\" for English]\n# [if local ckpt, set --alignment_model \"../checkpoints/mms-300m-1130-forced-aligner\"]\n\naudio_to_edit = \"src/f5_tts/infer/examples/basic/basic_ref_en.wav\"\norigin_text = \"Some call me nature, others call me mother nature.\"\ntarget_text = \"Some call me optimist, others call me realist.\"\nparts_to_edit = [\n    [1.42, 2.44],\n    [4.04, 4.9],\n]  # stard_ends of \"nature\" & \"mother nature\", in seconds\nfix_duration = [\n    1.2,\n    1,\n]  # fix duration for \"optimist\" & \"realist\", in seconds\n\n# audio_to_edit = \"src/f5_tts/infer/examples/basic/basic_ref_zh.wav\"\n# origin_text = \"对，这就是我，万人敬仰的太乙真人。\"\n# target_text = \"对，那就是你，万人敬仰的太白金星。\"\n# parts_to_edit = [[0.84, 1.4], [1.92, 2.4], [4.26, 6.26], ]\n# fix_duration = None  # use origin text duration\n\n\n# -------------------------------------------------#\n\nuse_ema = True\n\nif not os.path.exists(output_dir):\n    os.makedirs(output_dir)\n\n# Vocoder model\nlocal = False\nif mel_spec_type == \"vocos\":\n    vocoder_local_path = \"../checkpoints/charactr/vocos-mel-24khz\"\nelif mel_spec_type == \"bigvgan\":\n    vocoder_local_path = \"../checkpoints/bigvgan_v2_24khz_100band_256x\"\nvocoder = load_vocoder(vocoder_name=mel_spec_type, is_local=local, local_path=vocoder_local_path)\n\n# Tokenizer\nvocab_char_map, vocab_size = get_tokenizer(dataset_name, tokenizer)\n\n# Model\nmodel = CFM(\n    transformer=model_cls(**model_cfg, text_num_embeds=vocab_size, mel_dim=n_mel_channels),\n    mel_spec_kwargs=dict(\n        n_fft=n_fft,\n        hop_length=hop_length,\n        win_length=win_length,\n        n_mel_channels=n_mel_channels,\n        target_sample_rate=target_sample_rate,\n        mel_spec_type=mel_spec_type,\n    ),\n    odeint_kwargs=dict(\n        method=ode_method,\n    ),\n    vocab_char_map=vocab_char_map,\n).to(device)\n\ndtype = torch.float32 if mel_spec_type == \"bigvgan\" else None\nmodel = load_checkpoint(model, ckpt_path, device, dtype=dtype, use_ema=use_ema)\n\n# Audio\naudio, sr = torchaudio.load(audio_to_edit)\nif audio.shape[0] > 1:\n    audio = torch.mean(audio, dim=0, keepdim=True)\nrms = torch.sqrt(torch.mean(torch.square(audio)))\nif rms < target_rms:\n    audio = audio * target_rms / rms\nif sr != target_sample_rate:\n    resampler = torchaudio.transforms.Resample(sr, target_sample_rate)\n    audio = resampler(audio)\noffset = 0\naudio_ = torch.zeros(1, 0)\nedit_mask = torch.zeros(1, 0, dtype=torch.bool)\nfor part in parts_to_edit:\n    start, end = part\n    part_dur = end - start if fix_duration is None else fix_duration.pop(0)\n    part_dur = part_dur * target_sample_rate\n    start = start * target_sample_rate\n    audio_ = torch.cat((audio_, audio[:, round(offset) : round(start)], torch.zeros(1, round(part_dur))), dim=-1)\n    edit_mask = torch.cat(\n        (\n            edit_mask,\n            torch.ones(1, round((start - offset) / hop_length), dtype=torch.bool),\n            torch.zeros(1, round(part_dur / hop_length), dtype=torch.bool),\n        ),\n        dim=-1,\n    )\n    offset = end * target_sample_rate\n# audio = torch.cat((audio_, audio[:, round(offset):]), dim = -1)\nedit_mask = F.pad(edit_mask, (0, audio.shape[-1] // hop_length - edit_mask.shape[-1] + 1), value=True)\naudio = audio.to(device)\nedit_mask = edit_mask.to(device)\n\n# Text\ntext_list = [target_text]\nif tokenizer == \"pinyin\":\n    final_text_list = convert_char_to_pinyin(text_list)\nelse:\n    final_text_list = [text_list]\nprint(f\"text  : {text_list}\")\nprint(f\"pinyin: {final_text_list}\")\n\n# Duration\nref_audio_len = 0\nduration = audio.shape[-1] // hop_length\n\n# Inference\nwith torch.inference_mode():\n    generated, trajectory = model.sample(\n        cond=audio,\n        text=final_text_list,\n        duration=duration,\n        steps=nfe_step,\n        cfg_strength=cfg_strength,\n        sway_sampling_coef=sway_sampling_coef,\n        seed=seed,\n        edit_mask=edit_mask,\n    )\n    print(f\"Generated mel: {generated.shape}\")\n\n    # Final result\n    generated = generated.to(torch.float32)\n    generated = generated[:, ref_audio_len:, :]\n    gen_mel_spec = generated.permute(0, 2, 1)\n    if mel_spec_type == \"vocos\":\n        generated_wave = vocoder.decode(gen_mel_spec).cpu()\n    elif mel_spec_type == \"bigvgan\":\n        generated_wave = vocoder(gen_mel_spec).squeeze(0).cpu()\n\n    if rms < target_rms:\n        generated_wave = generated_wave * rms / target_rms\n\n    save_spectrogram(gen_mel_spec[0].cpu().numpy(), f\"{output_dir}/speech_edit_out.png\")\n    torchaudio.save(f\"{output_dir}/speech_edit_out.wav\", generated_wave, target_sample_rate)\n    print(f\"Generated wav: {generated_wave.shape}\")\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/infer/utils_infer.py",
    "content": "# A unified script for inference process\n# Make adjustments inside functions, and consider both gradio and cli scripts if need to change func output format\nimport os\nimport sys\n\nos.environ[\"PYTOCH_ENABLE_MPS_FALLBACK\"] = \"1\"  # for MPS device compatibility\nsys.path.append(f\"../../{os.path.dirname(os.path.abspath(__file__))}/third_party/BigVGAN/\")\n\nimport hashlib\nimport re\nimport tempfile\nfrom importlib.resources import files\n\n# import matplotlib\n\n# matplotlib.use(\"Agg\")\n#\n# import matplotlib.pylab as plt\nimport numpy as np\nimport torch\nimport torchaudio\nimport tqdm\nfrom huggingface_hub import snapshot_download, hf_hub_download\nfrom pydub import AudioSegment, silence\nfrom transformers import pipeline\nfrom vocos import Vocos\n\nfrom f5_tts.model import CFM\nfrom f5_tts.model.utils import (\n    get_tokenizer,\n    convert_char_to_pinyin,\n)\n\n_ref_audio_cache = {}\n\ndevice = \"cuda\" if torch.cuda.is_available() else \"mps\" if torch.backends.mps.is_available() else \"cpu\"\n\n# -----------------------------------------\n\ntarget_sample_rate = 24000\nn_mel_channels = 100\nhop_length = 256\nwin_length = 1024\nn_fft = 1024\nmel_spec_type = \"vocos\"\ntarget_rms = 0.1\ncross_fade_duration = 0.15\node_method = \"euler\"\nnfe_step = 32  # 16, 32\ncfg_strength = 2.0\nsway_sampling_coef = -1.0\nspeed = 1.0\nfix_duration = None\n\n# -----------------------------------------\n\n\n# chunk text into smaller pieces\n\n\ndef chunk_text(text, max_chars=135):\n    \"\"\"\n    Splits the input text into chunks, each with a maximum number of characters.\n\n    Args:\n        text (str): The text to be split.\n        max_chars (int): The maximum number of characters per chunk.\n\n    Returns:\n        List[str]: A list of text chunks.\n    \"\"\"\n    chunks = []\n    current_chunk = \"\"\n    # Split the text into sentences based on punctuation followed by whitespace\n    sentences = re.split(r\"(?<=[;:,.!?])\\s+|(?<=[；：，。！？])\", text)\n\n    for sentence in sentences:\n        if len(current_chunk.encode(\"utf-8\")) + len(sentence.encode(\"utf-8\")) <= max_chars:\n            current_chunk += sentence + \" \" if sentence and len(sentence[-1].encode(\"utf-8\")) == 1 else sentence\n        else:\n            if current_chunk:\n                chunks.append(current_chunk.strip())\n            current_chunk = sentence + \" \" if sentence and len(sentence[-1].encode(\"utf-8\")) == 1 else sentence\n\n    if current_chunk:\n        chunks.append(current_chunk.strip())\n\n    return chunks\n\n\n# load vocoder\ndef load_vocoder(vocoder_name=\"vocos\", is_local=False, local_path=\"\", device=device, hf_cache_dir=None):\n    if vocoder_name == \"vocos\":\n        # vocoder = Vocos.from_pretrained(\"charactr/vocos-mel-24khz\").to(device)\n        if is_local:\n            print(f\"Load vocos from local path {local_path}\")\n            config_path = f\"{local_path}/config.yaml\"\n            model_path = f\"{local_path}/pytorch_model.bin\"\n        else:\n            print(\"Download Vocos from huggingface charactr/vocos-mel-24khz\")\n            repo_id = \"charactr/vocos-mel-24khz\"\n            config_path = hf_hub_download(repo_id=repo_id, cache_dir=hf_cache_dir, filename=\"config.yaml\")\n            model_path = hf_hub_download(repo_id=repo_id, cache_dir=hf_cache_dir, filename=\"pytorch_model.bin\")\n        vocoder = Vocos.from_hparams(config_path)\n        state_dict = torch.load(model_path, map_location=\"cpu\", weights_only=True)\n        from vocos.feature_extractors import EncodecFeatures\n\n        if isinstance(vocoder.feature_extractor, EncodecFeatures):\n            encodec_parameters = {\n                \"feature_extractor.encodec.\" + key: value\n                for key, value in vocoder.feature_extractor.encodec.state_dict().items()\n            }\n            state_dict.update(encodec_parameters)\n        vocoder.load_state_dict(state_dict)\n        vocoder = vocoder.eval().to(device)\n    elif vocoder_name == \"bigvgan\":\n        try:\n            from third_party.BigVGAN import bigvgan\n        except ImportError:\n            print(\"You need to follow the README to init submodule and change the BigVGAN source code.\")\n        if is_local:\n            \"\"\"download from https://huggingface.co/nvidia/bigvgan_v2_24khz_100band_256x/tree/main\"\"\"\n            vocoder = bigvgan.BigVGAN.from_pretrained(local_path, use_cuda_kernel=False)\n        else:\n            local_path = snapshot_download(repo_id=\"nvidia/bigvgan_v2_24khz_100band_256x\", cache_dir=hf_cache_dir)\n            vocoder = bigvgan.BigVGAN.from_pretrained(local_path, use_cuda_kernel=False)\n\n        vocoder.remove_weight_norm()\n        vocoder = vocoder.eval().to(device)\n    return vocoder\n\n\n# load asr pipeline\n\nasr_pipe = None\n\n\ndef initialize_asr_pipeline(device: str = device, dtype=None):\n    if dtype is None:\n        dtype = (\n            torch.float16 if \"cuda\" in device and torch.cuda.get_device_properties(device).major >= 6 else torch.float32\n        )\n    global asr_pipe\n    asr_pipe = pipeline(\n        \"automatic-speech-recognition\",\n        model=\"openai/whisper-large-v3-turbo\",\n        torch_dtype=dtype,\n        device=device,\n    )\n\n\n# transcribe\n\n\ndef transcribe(ref_audio, language=None):\n    global asr_pipe\n    if asr_pipe is None:\n        initialize_asr_pipeline(device=device)\n    return asr_pipe(\n        ref_audio,\n        chunk_length_s=30,\n        batch_size=128,\n        generate_kwargs={\"task\": \"transcribe\", \"language\": language} if language else {\"task\": \"transcribe\"},\n        return_timestamps=False,\n    )[\"text\"].strip()\n\n\n# load model checkpoint for inference\n\n\ndef load_checkpoint(model, ckpt_path, device: str, dtype=None, use_ema=True):\n    if dtype is None:\n        dtype = (\n            torch.float16 if \"cuda\" in device and torch.cuda.get_device_properties(device).major >= 6 else torch.float32\n        )\n    model = model.to(dtype)\n\n    ckpt_type = ckpt_path.split(\".\")[-1]\n    if ckpt_type == \"safetensors\":\n        from safetensors.torch import load_file\n\n        checkpoint = load_file(ckpt_path, device=device)\n    else:\n        checkpoint = torch.load(ckpt_path, map_location=device, weights_only=True)\n\n    if use_ema:\n        if ckpt_type == \"safetensors\":\n            checkpoint = {\"ema_model_state_dict\": checkpoint}\n        checkpoint[\"model_state_dict\"] = {\n            k.replace(\"ema_model.\", \"\"): v\n            for k, v in checkpoint[\"ema_model_state_dict\"].items()\n            if k not in [\"initted\", \"step\"]\n        }\n\n        # patch for backward compatibility, 305e3ea\n        for key in [\"mel_spec.mel_stft.mel_scale.fb\", \"mel_spec.mel_stft.spectrogram.window\"]:\n            if key in checkpoint[\"model_state_dict\"]:\n                del checkpoint[\"model_state_dict\"][key]\n\n        model.load_state_dict(checkpoint[\"model_state_dict\"])\n    else:\n        if ckpt_type == \"safetensors\":\n            checkpoint = {\"model_state_dict\": checkpoint}\n        model.load_state_dict(checkpoint[\"model_state_dict\"])\n\n    del checkpoint\n    torch.cuda.empty_cache()\n\n    return model.to(device)\n\n\n# load model for inference\n\n\ndef load_model(\n    model_cls,\n    model_cfg,\n    ckpt_path,\n    mel_spec_type=mel_spec_type,\n    vocab_file=\"\",\n    ode_method=ode_method,\n    use_ema=True,\n    device=device,\n):\n    if vocab_file == \"\":\n        vocab_file = str(files(\"f5_tts\").joinpath(\"infer/examples/vocab.txt\"))\n    tokenizer = \"custom\"\n\n    print(\"\\nvocab : \", vocab_file)\n    print(\"token : \", tokenizer)\n    print(\"model : \", ckpt_path, \"\\n\")\n\n    vocab_char_map, vocab_size = get_tokenizer(vocab_file, tokenizer)\n    model = CFM(\n        transformer=model_cls(**model_cfg, text_num_embeds=vocab_size, mel_dim=n_mel_channels),\n        mel_spec_kwargs=dict(\n            n_fft=n_fft,\n            hop_length=hop_length,\n            win_length=win_length,\n            n_mel_channels=n_mel_channels,\n            target_sample_rate=target_sample_rate,\n            mel_spec_type=mel_spec_type,\n        ),\n        odeint_kwargs=dict(\n            method=ode_method,\n        ),\n        vocab_char_map=vocab_char_map,\n    ).to(device)\n\n    dtype = torch.float32 if mel_spec_type == \"bigvgan\" else None\n    model = load_checkpoint(model, ckpt_path, device, dtype=dtype, use_ema=use_ema)\n\n    return model\n\n\ndef remove_silence_edges(audio, silence_threshold=-42):\n    # Remove silence from the start\n    non_silent_start_idx = silence.detect_leading_silence(audio, silence_threshold=silence_threshold)\n    audio = audio[non_silent_start_idx:]\n\n    # Remove silence from the end\n    non_silent_end_duration = audio.duration_seconds\n    for ms in reversed(audio):\n        if ms.dBFS > silence_threshold:\n            break\n        non_silent_end_duration -= 0.001\n    trimmed_audio = audio[: int(non_silent_end_duration * 1000)]\n\n    return trimmed_audio\n\n\n# preprocess reference audio and text\n\n\ndef preprocess_ref_audio_text(ref_audio_orig, ref_text, clip_short=True, show_info=print, device=device):\n    show_info(\"Converting audio...\")\n    with tempfile.NamedTemporaryFile(delete=False, suffix=\".wav\") as f:\n        aseg = AudioSegment.from_file(ref_audio_orig)\n\n        if clip_short:\n            # 1. try to find long silence for clipping\n            non_silent_segs = silence.split_on_silence(\n                aseg, min_silence_len=1000, silence_thresh=-50, keep_silence=1000, seek_step=10\n            )\n            non_silent_wave = AudioSegment.silent(duration=0)\n            for non_silent_seg in non_silent_segs:\n                if len(non_silent_wave) > 6000 and len(non_silent_wave + non_silent_seg) > 15000:\n                    show_info(\"Audio is over 15s, clipping short. (1)\")\n                    break\n                non_silent_wave += non_silent_seg\n\n            # 2. try to find short silence for clipping if 1. failed\n            if len(non_silent_wave) > 15000:\n                non_silent_segs = silence.split_on_silence(\n                    aseg, min_silence_len=100, silence_thresh=-40, keep_silence=1000, seek_step=10\n                )\n                non_silent_wave = AudioSegment.silent(duration=0)\n                for non_silent_seg in non_silent_segs:\n                    if len(non_silent_wave) > 6000 and len(non_silent_wave + non_silent_seg) > 15000:\n                        show_info(\"Audio is over 15s, clipping short. (2)\")\n                        break\n                    non_silent_wave += non_silent_seg\n\n            aseg = non_silent_wave\n\n            # 3. if no proper silence found for clipping\n            if len(aseg) > 15000:\n                aseg = aseg[:15000]\n                show_info(\"Audio is over 15s, clipping short. (3)\")\n\n        aseg = remove_silence_edges(aseg) + AudioSegment.silent(duration=50)\n        aseg.export(f.name, format=\"wav\")\n        ref_audio = f.name\n\n    # Compute a hash of the reference audio file\n    with open(ref_audio, \"rb\") as audio_file:\n        audio_data = audio_file.read()\n        audio_hash = hashlib.md5(audio_data).hexdigest()\n\n    if not ref_text.strip():\n        global _ref_audio_cache\n        if audio_hash in _ref_audio_cache:\n            # Use cached asr transcription\n            show_info(\"Using cached reference text...\")\n            ref_text = _ref_audio_cache[audio_hash]\n        else:\n            show_info(\"No reference text provided, transcribing reference audio...\")\n            ref_text = transcribe(ref_audio)\n            # Cache the transcribed text (not caching custom ref_text, enabling users to do manual tweak)\n            _ref_audio_cache[audio_hash] = ref_text\n    else:\n        show_info(\"Using custom reference text...\")\n\n    # Ensure ref_text ends with a proper sentence-ending punctuation\n    if not ref_text.endswith(\". \") and not ref_text.endswith(\"。\"):\n        if ref_text.endswith(\".\"):\n            ref_text += \" \"\n        else:\n            ref_text += \". \"\n\n    print(\"ref_text  \", ref_text)\n\n    return ref_audio, ref_text\n\n\n# infer process: chunk text -> infer batches [i.e. infer_batch_process()]\n\n\ndef infer_process(\n    ref_audio,\n    ref_text,\n    gen_text,\n    model_obj,\n    vocoder,\n    mel_spec_type=mel_spec_type,\n    show_info=print,\n    progress=tqdm,\n    target_rms=target_rms,\n    cross_fade_duration=cross_fade_duration,\n    nfe_step=nfe_step,\n    cfg_strength=cfg_strength,\n    sway_sampling_coef=sway_sampling_coef,\n    speed=speed,\n    fix_duration=fix_duration,\n    device=device,\n):\n    # Split the input text into batches\n    audio, sr = torchaudio.load(ref_audio)\n    max_chars = int(len(ref_text.encode(\"utf-8\")) / (audio.shape[-1] / sr) * (25 - audio.shape[-1] / sr))\n    gen_text_batches = chunk_text(gen_text, max_chars=max_chars)\n    for i, gen_text in enumerate(gen_text_batches):\n        print(f\"gen_text {i}\", gen_text)\n\n    show_info(f\"Generating audio in {len(gen_text_batches)} batches...\")\n    return infer_batch_process(\n        (audio, sr),\n        ref_text,\n        gen_text_batches,\n        model_obj,\n        vocoder,\n        mel_spec_type=mel_spec_type,\n        progress=progress,\n        target_rms=target_rms,\n        cross_fade_duration=cross_fade_duration,\n        nfe_step=nfe_step,\n        cfg_strength=cfg_strength,\n        sway_sampling_coef=sway_sampling_coef,\n        speed=speed,\n        fix_duration=fix_duration,\n        device=device,\n    )\n\n\n# infer batches\n\n\ndef infer_batch_process(\n    ref_audio,\n    ref_text,\n    gen_text_batches,\n    model_obj,\n    vocoder,\n    mel_spec_type=\"vocos\",\n    progress=tqdm,\n    target_rms=0.1,\n    cross_fade_duration=0.15,\n    nfe_step=32,\n    cfg_strength=2.0,\n    sway_sampling_coef=-1,\n    speed=1,\n    fix_duration=None,\n    device=None,\n):\n    audio, sr = ref_audio\n    if audio.shape[0] > 1:\n        audio = torch.mean(audio, dim=0, keepdim=True)\n\n    rms = torch.sqrt(torch.mean(torch.square(audio)))\n    if rms < target_rms:\n        audio = audio * target_rms / rms\n    if sr != target_sample_rate:\n        resampler = torchaudio.transforms.Resample(sr, target_sample_rate)\n        audio = resampler(audio)\n    audio = audio.to(device)\n\n    generated_waves = []\n    spectrograms = []\n\n    if len(ref_text[-1].encode(\"utf-8\")) == 1:\n        ref_text = ref_text + \" \"\n    for i, gen_text in enumerate(progress.tqdm(gen_text_batches)):\n        # Prepare the text\n        text_list = [ref_text + gen_text]\n        final_text_list = convert_char_to_pinyin(text_list)\n\n        ref_audio_len = audio.shape[-1] // hop_length\n        if fix_duration is not None:\n            duration = int(fix_duration * target_sample_rate / hop_length)\n        else:\n            # Calculate duration\n            ref_text_len = len(ref_text.encode(\"utf-8\"))\n            gen_text_len = len(gen_text.encode(\"utf-8\"))\n            duration = ref_audio_len + int(ref_audio_len / ref_text_len * gen_text_len / speed)\n\n        # inference\n        with torch.inference_mode():\n            generated, _ = model_obj.sample(\n                cond=audio,\n                text=final_text_list,\n                duration=duration,\n                steps=nfe_step,\n                cfg_strength=cfg_strength,\n                sway_sampling_coef=sway_sampling_coef,\n            )\n\n            generated = generated.to(torch.float32)\n            generated = generated[:, ref_audio_len:, :]\n            generated_mel_spec = generated.permute(0, 2, 1)\n            if mel_spec_type == \"vocos\":\n                generated_wave = vocoder.decode(generated_mel_spec)\n            elif mel_spec_type == \"bigvgan\":\n                generated_wave = vocoder(generated_mel_spec)\n            if rms < target_rms:\n                generated_wave = generated_wave * rms / target_rms\n\n            # wav -> numpy\n            generated_wave = generated_wave.squeeze().cpu().numpy()\n\n            generated_waves.append(generated_wave)\n            spectrograms.append(generated_mel_spec[0].cpu().numpy())\n\n    # Combine all generated waves with cross-fading\n    if cross_fade_duration <= 0:\n        # Simply concatenate\n        final_wave = np.concatenate(generated_waves)\n    else:\n        final_wave = generated_waves[0]\n        for i in range(1, len(generated_waves)):\n            prev_wave = final_wave\n            next_wave = generated_waves[i]\n\n            # Calculate cross-fade samples, ensuring it does not exceed wave lengths\n            cross_fade_samples = int(cross_fade_duration * target_sample_rate)\n            cross_fade_samples = min(cross_fade_samples, len(prev_wave), len(next_wave))\n\n            if cross_fade_samples <= 0:\n                # No overlap possible, concatenate\n                final_wave = np.concatenate([prev_wave, next_wave])\n                continue\n\n            # Overlapping parts\n            prev_overlap = prev_wave[-cross_fade_samples:]\n            next_overlap = next_wave[:cross_fade_samples]\n\n            # Fade out and fade in\n            fade_out = np.linspace(1, 0, cross_fade_samples)\n            fade_in = np.linspace(0, 1, cross_fade_samples)\n\n            # Cross-faded overlap\n            cross_faded_overlap = prev_overlap * fade_out + next_overlap * fade_in\n\n            # Combine\n            new_wave = np.concatenate(\n                [prev_wave[:-cross_fade_samples], cross_faded_overlap, next_wave[cross_fade_samples:]]\n            )\n\n            final_wave = new_wave\n\n    # Create a combined spectrogram\n    combined_spectrogram = np.concatenate(spectrograms, axis=1)\n\n    return final_wave, target_sample_rate, combined_spectrogram\n\n\n# remove silence from generated wav\n\n\ndef remove_silence_for_generated_wav(filename):\n    aseg = AudioSegment.from_file(filename)\n    non_silent_segs = silence.split_on_silence(\n        aseg, min_silence_len=1000, silence_thresh=-50, keep_silence=500, seek_step=10\n    )\n    non_silent_wave = AudioSegment.silent(duration=0)\n    for non_silent_seg in non_silent_segs:\n        non_silent_wave += non_silent_seg\n    aseg = non_silent_wave\n    aseg.export(filename, format=\"wav\")\n\n\n# save spectrogram\n\n\ndef save_spectrogram(spectrogram, path):\n    plt.figure(figsize=(12, 4))\n    plt.imshow(spectrogram, origin=\"lower\", aspect=\"auto\")\n    plt.colorbar()\n    plt.savefig(path)\n    plt.close()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/__init__.py",
    "content": "from f5_tts.model.cfm import CFM\n\nfrom f5_tts.model.backbones.unett import UNetT\nfrom f5_tts.model.backbones.dit import DiT\nfrom f5_tts.model.backbones.mmdit import MMDiT\n\n# from f5_tts.model.trainer import Trainer\n\n\n__all__ = [\"CFM\", \"UNetT\", \"DiT\", \"MMDiT\"]  # , \"Trainer\"]\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/backbones/README.md",
    "content": "## Backbones quick introduction\n\n\n### unett.py\n- flat unet transformer\n- structure same as in e2-tts & voicebox paper except using rotary pos emb\n- update: allow possible abs pos emb & convnextv2 blocks for embedded text before concat\n\n### dit.py\n- adaln-zero dit\n- embedded timestep as condition\n- concatted noised_input + masked_cond + embedded_text, linear proj in\n- possible abs pos emb & convnextv2 blocks for embedded text before concat\n- possible long skip connection (first layer to last layer)\n\n### mmdit.py\n- sd3 structure\n- timestep as condition\n- left stream: text embedded and applied a abs pos emb\n- right stream: masked_cond & noised_input concatted and with same conv pos emb as unett\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/backbones/dit.py",
    "content": "\"\"\"\nein notation:\nb - batch\nn - sequence\nnt - text sequence\nnw - raw wave length\nd - dimension\n\"\"\"\n\nfrom __future__ import annotations\n\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\n\nfrom x_transformers.x_transformers import RotaryEmbedding\n\nfrom f5_tts.model.modules import (\n    TimestepEmbedding,\n    ConvNeXtV2Block,\n    ConvPositionEmbedding,\n    DiTBlock,\n    AdaLayerNormZero_Final,\n    precompute_freqs_cis,\n    get_pos_embed_indices,\n)\n\n\n# Text embedding\n\n\nclass TextEmbedding(nn.Module):\n    def __init__(self, text_num_embeds, text_dim, conv_layers=0, conv_mult=2):\n        super().__init__()\n        self.text_embed = nn.Embedding(text_num_embeds + 1, text_dim)  # use 0 as filler token\n\n        if conv_layers > 0:\n            self.extra_modeling = True\n            self.precompute_max_pos = 4096  # ~44s of 24khz audio\n            self.register_buffer(\"freqs_cis\", precompute_freqs_cis(text_dim, self.precompute_max_pos), persistent=False)\n            self.text_blocks = nn.Sequential(\n                *[ConvNeXtV2Block(text_dim, text_dim * conv_mult) for _ in range(conv_layers)]\n            )\n        else:\n            self.extra_modeling = False\n\n    def forward(self, text: int[\"b nt\"], seq_len, drop_text=False):  # noqa: F722\n        text = text + 1  # use 0 as filler token. preprocess of batch pad -1, see list_str_to_idx()\n        text = text[:, :seq_len]  # curtail if character tokens are more than the mel spec tokens\n        batch, text_len = text.shape[0], text.shape[1]\n        text = F.pad(text, (0, seq_len - text_len), value=0)\n\n        if drop_text:  # cfg for text\n            text = torch.zeros_like(text)\n\n        text = self.text_embed(text)  # b n -> b n d\n\n        # possible extra modeling\n        if self.extra_modeling:\n            # sinus pos emb\n            batch_start = torch.zeros((batch,), dtype=torch.long)\n            pos_idx = get_pos_embed_indices(batch_start, seq_len, max_pos=self.precompute_max_pos)\n            text_pos_embed = self.freqs_cis[pos_idx]\n            text = text + text_pos_embed\n\n            # convnextv2 blocks\n            text = self.text_blocks(text)\n\n        return text\n\n\n# noised input audio and context mixing embedding\n\n\nclass InputEmbedding(nn.Module):\n    def __init__(self, mel_dim, text_dim, out_dim):\n        super().__init__()\n        self.proj = nn.Linear(mel_dim * 2 + text_dim, out_dim)\n        self.conv_pos_embed = ConvPositionEmbedding(dim=out_dim)\n\n    def forward(self, x: float[\"b n d\"], cond: float[\"b n d\"], text_embed: float[\"b n d\"], drop_audio_cond=False):  # noqa: F722\n        if drop_audio_cond:  # cfg for cond audio\n            cond = torch.zeros_like(cond)\n\n        x = self.proj(torch.cat((x, cond, text_embed), dim=-1))\n        x = self.conv_pos_embed(x) + x\n        return x\n\n\n# Transformer backbone using DiT blocks\n\n\nclass DiT(nn.Module):\n    def __init__(\n        self,\n        *,\n        dim,\n        depth=8,\n        heads=8,\n        dim_head=64,\n        dropout=0.1,\n        ff_mult=4,\n        mel_dim=100,\n        text_num_embeds=256,\n        text_dim=None,\n        conv_layers=0,\n        long_skip_connection=False,\n    ):\n        super().__init__()\n\n        self.time_embed = TimestepEmbedding(dim)\n        if text_dim is None:\n            text_dim = mel_dim\n        self.text_embed = TextEmbedding(text_num_embeds, text_dim, conv_layers=conv_layers)\n        self.input_embed = InputEmbedding(mel_dim, text_dim, dim)\n\n        self.rotary_embed = RotaryEmbedding(dim_head)\n\n        self.dim = dim\n        self.depth = depth\n\n        self.transformer_blocks = nn.ModuleList(\n            [DiTBlock(dim=dim, heads=heads, dim_head=dim_head, ff_mult=ff_mult, dropout=dropout) for _ in range(depth)]\n        )\n        self.long_skip_connection = nn.Linear(dim * 2, dim, bias=False) if long_skip_connection else None\n\n        self.norm_out = AdaLayerNormZero_Final(dim)  # final modulation\n        self.proj_out = nn.Linear(dim, mel_dim)\n\n    def forward(\n        self,\n        x: float[\"b n d\"],  # nosied input audio  # noqa: F722\n        cond: float[\"b n d\"],  # masked cond audio  # noqa: F722\n        text: int[\"b nt\"],  # text  # noqa: F722\n        time: float[\"b\"] | float[\"\"],  # time step  # noqa: F821 F722\n        drop_audio_cond,  # cfg for cond audio\n        drop_text,  # cfg for text\n        mask: bool[\"b n\"] | None = None,  # noqa: F722\n    ):\n        batch, seq_len = x.shape[0], x.shape[1]\n        if time.ndim == 0:\n            time = time.repeat(batch)\n\n        # t: conditioning time, c: context (text + masked cond audio), x: noised input audio\n        t = self.time_embed(time)\n        text_embed = self.text_embed(text, seq_len, drop_text=drop_text)\n        x = self.input_embed(x, cond, text_embed, drop_audio_cond=drop_audio_cond)\n\n        rope = self.rotary_embed.forward_from_seq_len(seq_len)\n\n        if self.long_skip_connection is not None:\n            residual = x\n\n        for block in self.transformer_blocks:\n            x = block(x, t, mask=mask, rope=rope)\n\n        if self.long_skip_connection is not None:\n            x = self.long_skip_connection(torch.cat((x, residual), dim=-1))\n\n        x = self.norm_out(x, t)\n        output = self.proj_out(x)\n\n        return output\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/backbones/mmdit.py",
    "content": "\"\"\"\nein notation:\nb - batch\nn - sequence\nnt - text sequence\nnw - raw wave length\nd - dimension\n\"\"\"\n\nfrom __future__ import annotations\n\nimport torch\nfrom torch import nn\n\nfrom x_transformers.x_transformers import RotaryEmbedding\n\nfrom f5_tts.model.modules import (\n    TimestepEmbedding,\n    ConvPositionEmbedding,\n    MMDiTBlock,\n    AdaLayerNormZero_Final,\n    precompute_freqs_cis,\n    get_pos_embed_indices,\n)\n\n\n# text embedding\n\n\nclass TextEmbedding(nn.Module):\n    def __init__(self, out_dim, text_num_embeds):\n        super().__init__()\n        self.text_embed = nn.Embedding(text_num_embeds + 1, out_dim)  # will use 0 as filler token\n\n        self.precompute_max_pos = 1024\n        self.register_buffer(\"freqs_cis\", precompute_freqs_cis(out_dim, self.precompute_max_pos), persistent=False)\n\n    def forward(self, text: int[\"b nt\"], drop_text=False) -> int[\"b nt d\"]:  # noqa: F722\n        text = text + 1\n        if drop_text:\n            text = torch.zeros_like(text)\n        text = self.text_embed(text)\n\n        # sinus pos emb\n        batch_start = torch.zeros((text.shape[0],), dtype=torch.long)\n        batch_text_len = text.shape[1]\n        pos_idx = get_pos_embed_indices(batch_start, batch_text_len, max_pos=self.precompute_max_pos)\n        text_pos_embed = self.freqs_cis[pos_idx]\n\n        text = text + text_pos_embed\n\n        return text\n\n\n# noised input & masked cond audio embedding\n\n\nclass AudioEmbedding(nn.Module):\n    def __init__(self, in_dim, out_dim):\n        super().__init__()\n        self.linear = nn.Linear(2 * in_dim, out_dim)\n        self.conv_pos_embed = ConvPositionEmbedding(out_dim)\n\n    def forward(self, x: float[\"b n d\"], cond: float[\"b n d\"], drop_audio_cond=False):  # noqa: F722\n        if drop_audio_cond:\n            cond = torch.zeros_like(cond)\n        x = torch.cat((x, cond), dim=-1)\n        x = self.linear(x)\n        x = self.conv_pos_embed(x) + x\n        return x\n\n\n# Transformer backbone using MM-DiT blocks\n\n\nclass MMDiT(nn.Module):\n    def __init__(\n        self,\n        *,\n        dim,\n        depth=8,\n        heads=8,\n        dim_head=64,\n        dropout=0.1,\n        ff_mult=4,\n        text_num_embeds=256,\n        mel_dim=100,\n    ):\n        super().__init__()\n\n        self.time_embed = TimestepEmbedding(dim)\n        self.text_embed = TextEmbedding(dim, text_num_embeds)\n        self.audio_embed = AudioEmbedding(mel_dim, dim)\n\n        self.rotary_embed = RotaryEmbedding(dim_head)\n\n        self.dim = dim\n        self.depth = depth\n\n        self.transformer_blocks = nn.ModuleList(\n            [\n                MMDiTBlock(\n                    dim=dim,\n                    heads=heads,\n                    dim_head=dim_head,\n                    dropout=dropout,\n                    ff_mult=ff_mult,\n                    context_pre_only=i == depth - 1,\n                )\n                for i in range(depth)\n            ]\n        )\n        self.norm_out = AdaLayerNormZero_Final(dim)  # final modulation\n        self.proj_out = nn.Linear(dim, mel_dim)\n\n    def forward(\n        self,\n        x: float[\"b n d\"],  # nosied input audio  # noqa: F722\n        cond: float[\"b n d\"],  # masked cond audio  # noqa: F722\n        text: int[\"b nt\"],  # text  # noqa: F722\n        time: float[\"b\"] | float[\"\"],  # time step  # noqa: F821 F722\n        drop_audio_cond,  # cfg for cond audio\n        drop_text,  # cfg for text\n        mask: bool[\"b n\"] | None = None,  # noqa: F722\n    ):\n        batch = x.shape[0]\n        if time.ndim == 0:\n            time = time.repeat(batch)\n\n        # t: conditioning (time), c: context (text + masked cond audio), x: noised input audio\n        t = self.time_embed(time)\n        c = self.text_embed(text, drop_text=drop_text)\n        x = self.audio_embed(x, cond, drop_audio_cond=drop_audio_cond)\n\n        seq_len = x.shape[1]\n        text_len = text.shape[1]\n        rope_audio = self.rotary_embed.forward_from_seq_len(seq_len)\n        rope_text = self.rotary_embed.forward_from_seq_len(text_len)\n\n        for block in self.transformer_blocks:\n            c, x = block(x, c, t, mask=mask, rope=rope_audio, c_rope=rope_text)\n\n        x = self.norm_out(x, t)\n        output = self.proj_out(x)\n\n        return output\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/backbones/unett.py",
    "content": "\"\"\"\nein notation:\nb - batch\nn - sequence\nnt - text sequence\nnw - raw wave length\nd - dimension\n\"\"\"\n\nfrom __future__ import annotations\nfrom typing import Literal\n\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\n\nfrom x_transformers import RMSNorm\nfrom x_transformers.x_transformers import RotaryEmbedding\n\nfrom f5_tts.model.modules import (\n    TimestepEmbedding,\n    ConvNeXtV2Block,\n    ConvPositionEmbedding,\n    Attention,\n    AttnProcessor,\n    FeedForward,\n    precompute_freqs_cis,\n    get_pos_embed_indices,\n)\n\n\n# Text embedding\n\n\nclass TextEmbedding(nn.Module):\n    def __init__(self, text_num_embeds, text_dim, conv_layers=0, conv_mult=2):\n        super().__init__()\n        self.text_embed = nn.Embedding(text_num_embeds + 1, text_dim)  # use 0 as filler token\n\n        if conv_layers > 0:\n            self.extra_modeling = True\n            self.precompute_max_pos = 4096  # ~44s of 24khz audio\n            self.register_buffer(\"freqs_cis\", precompute_freqs_cis(text_dim, self.precompute_max_pos), persistent=False)\n            self.text_blocks = nn.Sequential(\n                *[ConvNeXtV2Block(text_dim, text_dim * conv_mult) for _ in range(conv_layers)]\n            )\n        else:\n            self.extra_modeling = False\n\n    def forward(self, text: int[\"b nt\"], seq_len, drop_text=False):  # noqa: F722\n        text = text + 1  # use 0 as filler token. preprocess of batch pad -1, see list_str_to_idx()\n        text = text[:, :seq_len]  # curtail if character tokens are more than the mel spec tokens\n        batch, text_len = text.shape[0], text.shape[1]\n        text = F.pad(text, (0, seq_len - text_len), value=0)\n\n        if drop_text:  # cfg for text\n            text = torch.zeros_like(text)\n\n        text = self.text_embed(text)  # b n -> b n d\n\n        # possible extra modeling\n        if self.extra_modeling:\n            # sinus pos emb\n            batch_start = torch.zeros((batch,), dtype=torch.long)\n            pos_idx = get_pos_embed_indices(batch_start, seq_len, max_pos=self.precompute_max_pos)\n            text_pos_embed = self.freqs_cis[pos_idx]\n            text = text + text_pos_embed\n\n            # convnextv2 blocks\n            text = self.text_blocks(text)\n\n        return text\n\n\n# noised input audio and context mixing embedding\n\n\nclass InputEmbedding(nn.Module):\n    def __init__(self, mel_dim, text_dim, out_dim):\n        super().__init__()\n        self.proj = nn.Linear(mel_dim * 2 + text_dim, out_dim)\n        self.conv_pos_embed = ConvPositionEmbedding(dim=out_dim)\n\n    def forward(self, x: float[\"b n d\"], cond: float[\"b n d\"], text_embed: float[\"b n d\"], drop_audio_cond=False):  # noqa: F722\n        if drop_audio_cond:  # cfg for cond audio\n            cond = torch.zeros_like(cond)\n\n        x = self.proj(torch.cat((x, cond, text_embed), dim=-1))\n        x = self.conv_pos_embed(x) + x\n        return x\n\n\n# Flat UNet Transformer backbone\n\n\nclass UNetT(nn.Module):\n    def __init__(\n        self,\n        *,\n        dim,\n        depth=8,\n        heads=8,\n        dim_head=64,\n        dropout=0.1,\n        ff_mult=4,\n        mel_dim=100,\n        text_num_embeds=256,\n        text_dim=None,\n        conv_layers=0,\n        skip_connect_type: Literal[\"add\", \"concat\", \"none\"] = \"concat\",\n    ):\n        super().__init__()\n        assert depth % 2 == 0, \"UNet-Transformer's depth should be even.\"\n\n        self.time_embed = TimestepEmbedding(dim)\n        if text_dim is None:\n            text_dim = mel_dim\n        self.text_embed = TextEmbedding(text_num_embeds, text_dim, conv_layers=conv_layers)\n        self.input_embed = InputEmbedding(mel_dim, text_dim, dim)\n\n        self.rotary_embed = RotaryEmbedding(dim_head)\n\n        # transformer layers & skip connections\n\n        self.dim = dim\n        self.skip_connect_type = skip_connect_type\n        needs_skip_proj = skip_connect_type == \"concat\"\n\n        self.depth = depth\n        self.layers = nn.ModuleList([])\n\n        for idx in range(depth):\n            is_later_half = idx >= (depth // 2)\n\n            attn_norm = RMSNorm(dim)\n            attn = Attention(\n                processor=AttnProcessor(),\n                dim=dim,\n                heads=heads,\n                dim_head=dim_head,\n                dropout=dropout,\n            )\n\n            ff_norm = RMSNorm(dim)\n            ff = FeedForward(dim=dim, mult=ff_mult, dropout=dropout, approximate=\"tanh\")\n\n            skip_proj = nn.Linear(dim * 2, dim, bias=False) if needs_skip_proj and is_later_half else None\n\n            self.layers.append(\n                nn.ModuleList(\n                    [\n                        skip_proj,\n                        attn_norm,\n                        attn,\n                        ff_norm,\n                        ff,\n                    ]\n                )\n            )\n\n        self.norm_out = RMSNorm(dim)\n        self.proj_out = nn.Linear(dim, mel_dim)\n\n    def forward(\n        self,\n        x: float[\"b n d\"],  # nosied input audio  # noqa: F722\n        cond: float[\"b n d\"],  # masked cond audio  # noqa: F722\n        text: int[\"b nt\"],  # text  # noqa: F722\n        time: float[\"b\"] | float[\"\"],  # time step  # noqa: F821 F722\n        drop_audio_cond,  # cfg for cond audio\n        drop_text,  # cfg for text\n        mask: bool[\"b n\"] | None = None,  # noqa: F722\n    ):\n        batch, seq_len = x.shape[0], x.shape[1]\n        if time.ndim == 0:\n            time = time.repeat(batch)\n\n        # t: conditioning time, c: context (text + masked cond audio), x: noised input audio\n        t = self.time_embed(time)\n        text_embed = self.text_embed(text, seq_len, drop_text=drop_text)\n        x = self.input_embed(x, cond, text_embed, drop_audio_cond=drop_audio_cond)\n\n        # postfix time t to input x, [b n d] -> [b n+1 d]\n        x = torch.cat([t.unsqueeze(1), x], dim=1)  # pack t to x\n        if mask is not None:\n            mask = F.pad(mask, (1, 0), value=1)\n\n        rope = self.rotary_embed.forward_from_seq_len(seq_len + 1)\n\n        # flat unet transformer\n        skip_connect_type = self.skip_connect_type\n        skips = []\n        for idx, (maybe_skip_proj, attn_norm, attn, ff_norm, ff) in enumerate(self.layers):\n            layer = idx + 1\n\n            # skip connection logic\n            is_first_half = layer <= (self.depth // 2)\n            is_later_half = not is_first_half\n\n            if is_first_half:\n                skips.append(x)\n\n            if is_later_half:\n                skip = skips.pop()\n                if skip_connect_type == \"concat\":\n                    x = torch.cat((x, skip), dim=-1)\n                    x = maybe_skip_proj(x)\n                elif skip_connect_type == \"add\":\n                    x = x + skip\n\n            # attention and feedforward blocks\n            x = attn(attn_norm(x), rope=rope, mask=mask) + x\n            x = ff(ff_norm(x)) + x\n\n        assert len(skips) == 0\n\n        x = self.norm_out(x)[:, 1:, :]  # unpack t from x\n\n        return self.proj_out(x)\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/cfm.py",
    "content": "\"\"\"\nein notation:\nb - batch\nn - sequence\nnt - text sequence\nnw - raw wave length\nd - dimension\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom random import random\nfrom typing import Callable\n\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn\nfrom torch.nn.utils.rnn import pad_sequence\nfrom torchdiffeq import odeint\n\nfrom f5_tts.model.modules import MelSpec\nfrom f5_tts.model.utils import (\n    default,\n    exists,\n    lens_to_mask,\n    list_str_to_idx,\n    list_str_to_tensor,\n    mask_from_frac_lengths,\n)\n\n\nclass CFM(nn.Module):\n    def __init__(\n        self,\n        transformer: nn.Module,\n        sigma=0.0,\n        odeint_kwargs: dict = dict(\n            # atol = 1e-5,\n            # rtol = 1e-5,\n            method=\"euler\"  # 'midpoint'\n        ),\n        audio_drop_prob=0.3,\n        cond_drop_prob=0.2,\n        num_channels=None,\n        mel_spec_module: nn.Module | None = None,\n        mel_spec_kwargs: dict = dict(),\n        frac_lengths_mask: tuple[float, float] = (0.7, 1.0),\n        vocab_char_map: dict[str:int] | None = None,\n    ):\n        super().__init__()\n\n        self.frac_lengths_mask = frac_lengths_mask\n\n        # mel spec\n        self.mel_spec = default(mel_spec_module, MelSpec(**mel_spec_kwargs))\n        num_channels = default(num_channels, self.mel_spec.n_mel_channels)\n        self.num_channels = num_channels\n\n        # classifier-free guidance\n        self.audio_drop_prob = audio_drop_prob\n        self.cond_drop_prob = cond_drop_prob\n\n        # transformer\n        self.transformer = transformer\n        dim = transformer.dim\n        self.dim = dim\n\n        # conditional flow related\n        self.sigma = sigma\n\n        # sampling related\n        self.odeint_kwargs = odeint_kwargs\n\n        # vocab map for tokenization\n        self.vocab_char_map = vocab_char_map\n\n    @property\n    def device(self):\n        return next(self.parameters()).device\n\n    @torch.no_grad()\n    def sample(\n        self,\n        cond: float[\"b n d\"] | float[\"b nw\"],  # noqa: F722\n        text: int[\"b nt\"] | list[str],  # noqa: F722\n        duration: int | int[\"b\"],  # noqa: F821\n        *,\n        lens: int[\"b\"] | None = None,  # noqa: F821\n        steps=32,\n        cfg_strength=1.0,\n        sway_sampling_coef=None,\n        seed: int | None = None,\n        max_duration=4096,\n        vocoder: Callable[[float[\"b d n\"]], float[\"b nw\"]] | None = None,  # noqa: F722\n        no_ref_audio=False,\n        duplicate_test=False,\n        t_inter=0.1,\n        edit_mask=None,\n    ):\n        self.eval()\n        # raw wave\n\n        if cond.ndim == 2:\n            cond = self.mel_spec(cond)\n            cond = cond.permute(0, 2, 1)\n            assert cond.shape[-1] == self.num_channels\n\n        cond = cond.to(next(self.parameters()).dtype)\n\n        batch, cond_seq_len, device = *cond.shape[:2], cond.device\n        if not exists(lens):\n            lens = torch.full((batch,), cond_seq_len, device=device, dtype=torch.long)\n\n        # text\n\n        if isinstance(text, list):\n            if exists(self.vocab_char_map):\n                text = list_str_to_idx(text, self.vocab_char_map).to(device)\n            else:\n                text = list_str_to_tensor(text).to(device)\n            assert text.shape[0] == batch\n\n        if exists(text):\n            text_lens = (text != -1).sum(dim=-1)\n            lens = torch.maximum(text_lens, lens)  # make sure lengths are at least those of the text characters\n\n        # duration\n\n        cond_mask = lens_to_mask(lens)\n        if edit_mask is not None:\n            cond_mask = cond_mask & edit_mask\n\n        if isinstance(duration, int):\n            duration = torch.full((batch,), duration, device=device, dtype=torch.long)\n\n        duration = torch.maximum(lens + 1, duration)  # just add one token so something is generated\n        duration = duration.clamp(max=max_duration)\n        max_duration = duration.amax()\n\n        # duplicate test corner for inner time step oberservation\n        if duplicate_test:\n            test_cond = F.pad(cond, (0, 0, cond_seq_len, max_duration - 2 * cond_seq_len), value=0.0)\n\n        cond = F.pad(cond, (0, 0, 0, max_duration - cond_seq_len), value=0.0)\n        cond_mask = F.pad(cond_mask, (0, max_duration - cond_mask.shape[-1]), value=False)\n        cond_mask = cond_mask.unsqueeze(-1)\n        step_cond = torch.where(\n            cond_mask, cond, torch.zeros_like(cond)\n        )  # allow direct control (cut cond audio) with lens passed in\n\n        if batch > 1:\n            mask = lens_to_mask(duration)\n        else:  # save memory and speed up, as single inference need no mask currently\n            mask = None\n\n        # test for no ref audio\n        if no_ref_audio:\n            cond = torch.zeros_like(cond)\n\n        # neural ode\n\n        def fn(t, x):\n            # at each step, conditioning is fixed\n            # step_cond = torch.where(cond_mask, cond, torch.zeros_like(cond))\n\n            # predict flow\n            pred = self.transformer(\n                x=x, cond=step_cond, text=text, time=t, mask=mask, drop_audio_cond=False, drop_text=False\n            )\n            if cfg_strength < 1e-5:\n                return pred\n\n            null_pred = self.transformer(\n                x=x, cond=step_cond, text=text, time=t, mask=mask, drop_audio_cond=True, drop_text=True\n            )\n            return pred + (pred - null_pred) * cfg_strength\n\n        # noise input\n        # to make sure batch inference result is same with different batch size, and for sure single inference\n        # still some difference maybe due to convolutional layers\n        y0 = []\n        for dur in duration:\n            if exists(seed):\n                torch.manual_seed(seed)\n            y0.append(torch.randn(dur, self.num_channels, device=self.device, dtype=step_cond.dtype))\n        y0 = pad_sequence(y0, padding_value=0, batch_first=True)\n\n        t_start = 0\n\n        # duplicate test corner for inner time step oberservation\n        if duplicate_test:\n            t_start = t_inter\n            y0 = (1 - t_start) * y0 + t_start * test_cond\n            steps = int(steps * (1 - t_start))\n\n        t = torch.linspace(t_start, 1, steps + 1, device=self.device, dtype=step_cond.dtype)\n        if sway_sampling_coef is not None:\n            t = t + sway_sampling_coef * (torch.cos(torch.pi / 2 * t) - 1 + t)\n\n        trajectory = odeint(fn, y0, t, **self.odeint_kwargs)\n\n        sampled = trajectory[-1]\n        out = sampled\n        out = torch.where(cond_mask, cond, out)\n\n        if exists(vocoder):\n            out = out.permute(0, 2, 1)\n            out = vocoder(out)\n\n        return out, trajectory\n\n    def forward(\n        self,\n        inp: float[\"b n d\"] | float[\"b nw\"],  # mel or raw wave  # noqa: F722\n        text: int[\"b nt\"] | list[str],  # noqa: F722\n        *,\n        lens: int[\"b\"] | None = None,  # noqa: F821\n        noise_scheduler: str | None = None,\n    ):\n        # handle raw wave\n        if inp.ndim == 2:\n            inp = self.mel_spec(inp)\n            inp = inp.permute(0, 2, 1)\n            assert inp.shape[-1] == self.num_channels\n\n        batch, seq_len, dtype, device, _σ1 = *inp.shape[:2], inp.dtype, self.device, self.sigma\n\n        # handle text as string\n        if isinstance(text, list):\n            if exists(self.vocab_char_map):\n                text = list_str_to_idx(text, self.vocab_char_map).to(device)\n            else:\n                text = list_str_to_tensor(text).to(device)\n            assert text.shape[0] == batch\n\n        # lens and mask\n        if not exists(lens):\n            lens = torch.full((batch,), seq_len, device=device)\n\n        mask = lens_to_mask(lens, length=seq_len)  # useless here, as collate_fn will pad to max length in batch\n\n        # get a random span to mask out for training conditionally\n        frac_lengths = torch.zeros((batch,), device=self.device).float().uniform_(*self.frac_lengths_mask)\n        rand_span_mask = mask_from_frac_lengths(lens, frac_lengths)\n\n        if exists(mask):\n            rand_span_mask &= mask\n\n        # mel is x1\n        x1 = inp\n\n        # x0 is gaussian noise\n        x0 = torch.randn_like(x1)\n\n        # time step\n        time = torch.rand((batch,), dtype=dtype, device=self.device)\n        # TODO. noise_scheduler\n\n        # sample xt (φ_t(x) in the paper)\n        t = time.unsqueeze(-1).unsqueeze(-1)\n        φ = (1 - t) * x0 + t * x1\n        flow = x1 - x0\n\n        # only predict what is within the random mask span for infilling\n        cond = torch.where(rand_span_mask[..., None], torch.zeros_like(x1), x1)\n\n        # transformer and cfg training with a drop rate\n        drop_audio_cond = random() < self.audio_drop_prob  # p_drop in voicebox paper\n        if random() < self.cond_drop_prob:  # p_uncond in voicebox paper\n            drop_audio_cond = True\n            drop_text = True\n        else:\n            drop_text = False\n\n        # if want rigourously mask out padding, record in collate_fn in dataset.py, and pass in here\n        # adding mask will use more memory, thus also need to adjust batchsampler with scaled down threshold for long sequences\n        pred = self.transformer(\n            x=φ, cond=cond, text=text, time=time, drop_audio_cond=drop_audio_cond, drop_text=drop_text\n        )\n\n        # flow matching loss\n        loss = F.mse_loss(pred, flow, reduction=\"none\")\n        loss = loss[rand_span_mask]\n\n        return loss.mean(), cond, pred\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/dataset.py",
    "content": "import json\nimport random\nfrom importlib.resources import files\n\nimport torch\nimport torch.nn.functional as F\nimport torchaudio\nfrom datasets import Dataset as Dataset_\nfrom datasets import load_from_disk\nfrom torch import nn\nfrom torch.utils.data import Dataset, Sampler\nfrom tqdm import tqdm\n\nfrom f5_tts.model.modules import MelSpec\nfrom f5_tts.model.utils import default\n\n\nclass HFDataset(Dataset):\n    def __init__(\n        self,\n        hf_dataset: Dataset,\n        target_sample_rate=24_000,\n        n_mel_channels=100,\n        hop_length=256,\n        n_fft=1024,\n        win_length=1024,\n        mel_spec_type=\"vocos\",\n    ):\n        self.data = hf_dataset\n        self.target_sample_rate = target_sample_rate\n        self.hop_length = hop_length\n\n        self.mel_spectrogram = MelSpec(\n            n_fft=n_fft,\n            hop_length=hop_length,\n            win_length=win_length,\n            n_mel_channels=n_mel_channels,\n            target_sample_rate=target_sample_rate,\n            mel_spec_type=mel_spec_type,\n        )\n\n    def get_frame_len(self, index):\n        row = self.data[index]\n        audio = row[\"audio\"][\"array\"]\n        sample_rate = row[\"audio\"][\"sampling_rate\"]\n        return audio.shape[-1] / sample_rate * self.target_sample_rate / self.hop_length\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, index):\n        row = self.data[index]\n        audio = row[\"audio\"][\"array\"]\n\n        # logger.info(f\"Audio shape: {audio.shape}\")\n\n        sample_rate = row[\"audio\"][\"sampling_rate\"]\n        duration = audio.shape[-1] / sample_rate\n\n        if duration > 30 or duration < 0.3:\n            return self.__getitem__((index + 1) % len(self.data))\n\n        audio_tensor = torch.from_numpy(audio).float()\n\n        if sample_rate != self.target_sample_rate:\n            resampler = torchaudio.transforms.Resample(sample_rate, self.target_sample_rate)\n            audio_tensor = resampler(audio_tensor)\n\n        audio_tensor = audio_tensor.unsqueeze(0)  # 't -> 1 t')\n\n        mel_spec = self.mel_spectrogram(audio_tensor)\n\n        mel_spec = mel_spec.squeeze(0)  # '1 d t -> d t'\n\n        text = row[\"text\"]\n\n        return dict(\n            mel_spec=mel_spec,\n            text=text,\n        )\n\n\nclass CustomDataset(Dataset):\n    def __init__(\n        self,\n        custom_dataset: Dataset,\n        durations=None,\n        target_sample_rate=24_000,\n        hop_length=256,\n        n_mel_channels=100,\n        n_fft=1024,\n        win_length=1024,\n        mel_spec_type=\"vocos\",\n        preprocessed_mel=False,\n        mel_spec_module: nn.Module | None = None,\n    ):\n        self.data = custom_dataset\n        self.durations = durations\n        self.target_sample_rate = target_sample_rate\n        self.hop_length = hop_length\n        self.n_fft = n_fft\n        self.win_length = win_length\n        self.mel_spec_type = mel_spec_type\n        self.preprocessed_mel = preprocessed_mel\n\n        if not preprocessed_mel:\n            self.mel_spectrogram = default(\n                mel_spec_module,\n                MelSpec(\n                    n_fft=n_fft,\n                    hop_length=hop_length,\n                    win_length=win_length,\n                    n_mel_channels=n_mel_channels,\n                    target_sample_rate=target_sample_rate,\n                    mel_spec_type=mel_spec_type,\n                ),\n            )\n\n    def get_frame_len(self, index):\n        if (\n            self.durations is not None\n        ):  # Please make sure the separately provided durations are correct, otherwise 99.99% OOM\n            return self.durations[index] * self.target_sample_rate / self.hop_length\n        return self.data[index][\"duration\"] * self.target_sample_rate / self.hop_length\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, index):\n        while True:\n            row = self.data[index]\n            audio_path = row[\"audio_path\"]\n            text = row[\"text\"]\n            duration = row[\"duration\"]\n\n            # filter by given length\n            if 0.3 <= duration <= 30:\n                break  # valid\n\n            index = (index + 1) % len(self.data)\n\n        if self.preprocessed_mel:\n            mel_spec = torch.tensor(row[\"mel_spec\"])\n        else:\n            audio, source_sample_rate = torchaudio.load(audio_path)\n\n            # make sure mono input\n            if audio.shape[0] > 1:\n                audio = torch.mean(audio, dim=0, keepdim=True)\n\n            # resample if necessary\n            if source_sample_rate != self.target_sample_rate:\n                resampler = torchaudio.transforms.Resample(source_sample_rate, self.target_sample_rate)\n                audio = resampler(audio)\n\n            # to mel spectrogram\n            mel_spec = self.mel_spectrogram(audio)\n            mel_spec = mel_spec.squeeze(0)  # '1 d t -> d t'\n\n        return {\n            \"mel_spec\": mel_spec,\n            \"text\": text,\n        }\n\n\n# Dynamic Batch Sampler\nclass DynamicBatchSampler(Sampler[list[int]]):\n    \"\"\"Extension of Sampler that will do the following:\n    1.  Change the batch size (essentially number of sequences)\n        in a batch to ensure that the total number of frames are less\n        than a certain threshold.\n    2.  Make sure the padding efficiency in the batch is high.\n    \"\"\"\n\n    def __init__(\n        self, sampler: Sampler[int], frames_threshold: int, max_samples=0, random_seed=None, drop_last: bool = False\n    ):\n        self.sampler = sampler\n        self.frames_threshold = frames_threshold\n        self.max_samples = max_samples\n\n        indices, batches = [], []\n        data_source = self.sampler.data_source\n\n        for idx in tqdm(\n            self.sampler, desc=\"Sorting with sampler... if slow, check whether dataset is provided with duration\"\n        ):\n            indices.append((idx, data_source.get_frame_len(idx)))\n        indices.sort(key=lambda elem: elem[1])\n\n        batch = []\n        batch_frames = 0\n        for idx, frame_len in tqdm(\n            indices, desc=f\"Creating dynamic batches with {frames_threshold} audio frames per gpu\"\n        ):\n            if batch_frames + frame_len <= self.frames_threshold and (max_samples == 0 or len(batch) < max_samples):\n                batch.append(idx)\n                batch_frames += frame_len\n            else:\n                if len(batch) > 0:\n                    batches.append(batch)\n                if frame_len <= self.frames_threshold:\n                    batch = [idx]\n                    batch_frames = frame_len\n                else:\n                    batch = []\n                    batch_frames = 0\n\n        if not drop_last and len(batch) > 0:\n            batches.append(batch)\n\n        del indices\n\n        # if want to have different batches between epochs, may just set a seed and log it in ckpt\n        # cuz during multi-gpu training, although the batch on per gpu not change between epochs, the formed general minibatch is different\n        # e.g. for epoch n, use (random_seed + n)\n        random.seed(random_seed)\n        random.shuffle(batches)\n\n        self.batches = batches\n\n    def __iter__(self):\n        return iter(self.batches)\n\n    def __len__(self):\n        return len(self.batches)\n\n\n# Load dataset\n\n\ndef load_dataset(\n    dataset_name: str,\n    tokenizer: str = \"pinyin\",\n    dataset_type: str = \"CustomDataset\",\n    audio_type: str = \"raw\",\n    mel_spec_module: nn.Module | None = None,\n    mel_spec_kwargs: dict = dict(),\n) -> CustomDataset | HFDataset:\n    \"\"\"\n    dataset_type    - \"CustomDataset\" if you want to use tokenizer name and default data path to load for train_dataset\n                    - \"CustomDatasetPath\" if you just want to pass the full path to a preprocessed dataset without relying on tokenizer\n    \"\"\"\n\n    print(\"Loading dataset ...\")\n\n    if dataset_type == \"CustomDataset\":\n        rel_data_path = str(files(\"f5_tts\").joinpath(f\"../../data/{dataset_name}_{tokenizer}\"))\n        if audio_type == \"raw\":\n            try:\n                train_dataset = load_from_disk(f\"{rel_data_path}/raw\")\n            except:  # noqa: E722\n                train_dataset = Dataset_.from_file(f\"{rel_data_path}/raw.arrow\")\n            preprocessed_mel = False\n        elif audio_type == \"mel\":\n            train_dataset = Dataset_.from_file(f\"{rel_data_path}/mel.arrow\")\n            preprocessed_mel = True\n        with open(f\"{rel_data_path}/duration.json\", \"r\", encoding=\"utf-8\") as f:\n            data_dict = json.load(f)\n        durations = data_dict[\"duration\"]\n        train_dataset = CustomDataset(\n            train_dataset,\n            durations=durations,\n            preprocessed_mel=preprocessed_mel,\n            mel_spec_module=mel_spec_module,\n            **mel_spec_kwargs,\n        )\n\n    elif dataset_type == \"CustomDatasetPath\":\n        try:\n            train_dataset = load_from_disk(f\"{dataset_name}/raw\")\n        except:  # noqa: E722\n            train_dataset = Dataset_.from_file(f\"{dataset_name}/raw.arrow\")\n\n        with open(f\"{dataset_name}/duration.json\", \"r\", encoding=\"utf-8\") as f:\n            data_dict = json.load(f)\n        durations = data_dict[\"duration\"]\n        train_dataset = CustomDataset(\n            train_dataset, durations=durations, preprocessed_mel=preprocessed_mel, **mel_spec_kwargs\n        )\n\n    elif dataset_type == \"HFDataset\":\n        print(\n            \"Should manually modify the path of huggingface dataset to your need.\\n\"\n            + \"May also the corresponding script cuz different dataset may have different format.\"\n        )\n        pre, post = dataset_name.split(\"_\")\n        train_dataset = HFDataset(\n            load_dataset(f\"{pre}/{pre}\", split=f\"train.{post}\", cache_dir=str(files(\"f5_tts\").joinpath(\"../../data\"))),\n        )\n\n    return train_dataset\n\n\n# collation\n\n\ndef collate_fn(batch):\n    mel_specs = [item[\"mel_spec\"].squeeze(0) for item in batch]\n    mel_lengths = torch.LongTensor([spec.shape[-1] for spec in mel_specs])\n    max_mel_length = mel_lengths.amax()\n\n    padded_mel_specs = []\n    for spec in mel_specs:  # TODO. maybe records mask for attention here\n        padding = (0, max_mel_length - spec.size(-1))\n        padded_spec = F.pad(spec, padding, value=0)\n        padded_mel_specs.append(padded_spec)\n\n    mel_specs = torch.stack(padded_mel_specs)\n\n    text = [item[\"text\"] for item in batch]\n    text_lengths = torch.LongTensor([len(item) for item in text])\n\n    return dict(\n        mel=mel_specs,\n        mel_lengths=mel_lengths,\n        text=text,\n        text_lengths=text_lengths,\n    )\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/modules.py",
    "content": "\"\"\"\nein notation:\nb - batch\nn - sequence\nnt - text sequence\nnw - raw wave length\nd - dimension\n\"\"\"\n\nfrom __future__ import annotations\n\nimport math\nfrom typing import Optional\n\nimport torch\nimport torch.nn.functional as F\nimport torchaudio\nfrom librosa.filters import mel as librosa_mel_fn\nfrom torch import nn\nfrom x_transformers.x_transformers import apply_rotary_pos_emb\n\n\n# raw wav to mel spec\n\n\nmel_basis_cache = {}\nhann_window_cache = {}\n\n\ndef get_bigvgan_mel_spectrogram(\n    waveform,\n    n_fft=1024,\n    n_mel_channels=100,\n    target_sample_rate=24000,\n    hop_length=256,\n    win_length=1024,\n    fmin=0,\n    fmax=None,\n    center=False,\n):  # Copy from https://github.com/NVIDIA/BigVGAN/tree/main\n    device = waveform.device\n    key = f\"{n_fft}_{n_mel_channels}_{target_sample_rate}_{hop_length}_{win_length}_{fmin}_{fmax}_{device}\"\n\n    if key not in mel_basis_cache:\n        mel = librosa_mel_fn(sr=target_sample_rate, n_fft=n_fft, n_mels=n_mel_channels, fmin=fmin, fmax=fmax)\n        mel_basis_cache[key] = torch.from_numpy(mel).float().to(device)  # TODO: why they need .float()?\n        hann_window_cache[key] = torch.hann_window(win_length).to(device)\n\n    mel_basis = mel_basis_cache[key]\n    hann_window = hann_window_cache[key]\n\n    padding = (n_fft - hop_length) // 2\n    waveform = torch.nn.functional.pad(waveform.unsqueeze(1), (padding, padding), mode=\"reflect\").squeeze(1)\n\n    spec = torch.stft(\n        waveform,\n        n_fft,\n        hop_length=hop_length,\n        win_length=win_length,\n        window=hann_window,\n        center=center,\n        pad_mode=\"reflect\",\n        normalized=False,\n        onesided=True,\n        return_complex=True,\n    )\n    spec = torch.sqrt(torch.view_as_real(spec).pow(2).sum(-1) + 1e-9)\n\n    mel_spec = torch.matmul(mel_basis, spec)\n    mel_spec = torch.log(torch.clamp(mel_spec, min=1e-5))\n\n    return mel_spec\n\n\ndef get_vocos_mel_spectrogram(\n    waveform,\n    n_fft=1024,\n    n_mel_channels=100,\n    target_sample_rate=24000,\n    hop_length=256,\n    win_length=1024,\n):\n    mel_stft = torchaudio.transforms.MelSpectrogram(\n        sample_rate=target_sample_rate,\n        n_fft=n_fft,\n        win_length=win_length,\n        hop_length=hop_length,\n        n_mels=n_mel_channels,\n        power=1,\n        center=True,\n        normalized=False,\n        norm=None,\n    ).to(waveform.device)\n    if len(waveform.shape) == 3:\n        waveform = waveform.squeeze(1)  # 'b 1 nw -> b nw'\n\n    assert len(waveform.shape) == 2\n\n    mel = mel_stft(waveform)\n    mel = mel.clamp(min=1e-5).log()\n    return mel\n\n\nclass MelSpec(nn.Module):\n    def __init__(\n        self,\n        n_fft=1024,\n        hop_length=256,\n        win_length=1024,\n        n_mel_channels=100,\n        target_sample_rate=24_000,\n        mel_spec_type=\"vocos\",\n    ):\n        super().__init__()\n        assert mel_spec_type in [\"vocos\", \"bigvgan\"], print(\"We only support two extract mel backend: vocos or bigvgan\")\n\n        self.n_fft = n_fft\n        self.hop_length = hop_length\n        self.win_length = win_length\n        self.n_mel_channels = n_mel_channels\n        self.target_sample_rate = target_sample_rate\n\n        if mel_spec_type == \"vocos\":\n            self.extractor = get_vocos_mel_spectrogram\n        elif mel_spec_type == \"bigvgan\":\n            self.extractor = get_bigvgan_mel_spectrogram\n\n        self.register_buffer(\"dummy\", torch.tensor(0), persistent=False)\n\n    def forward(self, wav):\n        if self.dummy.device != wav.device:\n            self.to(wav.device)\n\n        mel = self.extractor(\n            waveform=wav,\n            n_fft=self.n_fft,\n            n_mel_channels=self.n_mel_channels,\n            target_sample_rate=self.target_sample_rate,\n            hop_length=self.hop_length,\n            win_length=self.win_length,\n        )\n\n        return mel\n\n\n# sinusoidal position embedding\n\n\nclass SinusPositionEmbedding(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.dim = dim\n\n    def forward(self, x, scale=1000):\n        device = x.device\n        half_dim = self.dim // 2\n        emb = math.log(10000) / (half_dim - 1)\n        emb = torch.exp(torch.arange(half_dim, device=device).float() * -emb)\n        emb = scale * x.unsqueeze(1) * emb.unsqueeze(0)\n        emb = torch.cat((emb.sin(), emb.cos()), dim=-1)\n        return emb\n\n\n# convolutional position embedding\n\n\nclass ConvPositionEmbedding(nn.Module):\n    def __init__(self, dim, kernel_size=31, groups=16):\n        super().__init__()\n        assert kernel_size % 2 != 0\n        self.conv1d = nn.Sequential(\n            nn.Conv1d(dim, dim, kernel_size, groups=groups, padding=kernel_size // 2),\n            nn.Mish(),\n            nn.Conv1d(dim, dim, kernel_size, groups=groups, padding=kernel_size // 2),\n            nn.Mish(),\n        )\n\n    def forward(self, x: float[\"b n d\"], mask: bool[\"b n\"] | None = None):  # noqa: F722\n        if mask is not None:\n            mask = mask[..., None]\n            x = x.masked_fill(~mask, 0.0)\n\n        x = x.permute(0, 2, 1)\n        x = self.conv1d(x)\n        out = x.permute(0, 2, 1)\n\n        if mask is not None:\n            out = out.masked_fill(~mask, 0.0)\n\n        return out\n\n\n# rotary positional embedding related\n\n\ndef precompute_freqs_cis(dim: int, end: int, theta: float = 10000.0, theta_rescale_factor=1.0):\n    # proposed by reddit user bloc97, to rescale rotary embeddings to longer sequence length without fine-tuning\n    # has some connection to NTK literature\n    # https://www.reddit.com/r/LocalLLaMA/comments/14lz7j5/ntkaware_scaled_rope_allows_llama_models_to_have/\n    # https://github.com/lucidrains/rotary-embedding-torch/blob/main/rotary_embedding_torch/rotary_embedding_torch.py\n    theta *= theta_rescale_factor ** (dim / (dim - 2))\n    freqs = 1.0 / (theta ** (torch.arange(0, dim, 2)[: (dim // 2)].float() / dim))\n    t = torch.arange(end, device=freqs.device)  # type: ignore\n    freqs = torch.outer(t, freqs).float()  # type: ignore\n    freqs_cos = torch.cos(freqs)  # real part\n    freqs_sin = torch.sin(freqs)  # imaginary part\n    return torch.cat([freqs_cos, freqs_sin], dim=-1)\n\n\ndef get_pos_embed_indices(start, length, max_pos, scale=1.0):\n    # length = length if isinstance(length, int) else length.max()\n    scale = scale * torch.ones_like(start, dtype=torch.float32)  # in case scale is a scalar\n    pos = (\n        start.unsqueeze(1)\n        + (torch.arange(length, device=start.device, dtype=torch.float32).unsqueeze(0) * scale.unsqueeze(1)).long()\n    )\n    # avoid extra long error.\n    pos = torch.where(pos < max_pos, pos, max_pos - 1)\n    return pos\n\n\n# Global Response Normalization layer (Instance Normalization ?)\n\n\nclass GRN(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.gamma = nn.Parameter(torch.zeros(1, 1, dim))\n        self.beta = nn.Parameter(torch.zeros(1, 1, dim))\n\n    def forward(self, x):\n        Gx = torch.norm(x, p=2, dim=1, keepdim=True)\n        Nx = Gx / (Gx.mean(dim=-1, keepdim=True) + 1e-6)\n        return self.gamma * (x * Nx) + self.beta + x\n\n\n# ConvNeXt-V2 Block https://github.com/facebookresearch/ConvNeXt-V2/blob/main/models/convnextv2.py\n# ref: https://github.com/bfs18/e2_tts/blob/main/rfwave/modules.py#L108\n\n\nclass ConvNeXtV2Block(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        intermediate_dim: int,\n        dilation: int = 1,\n    ):\n        super().__init__()\n        padding = (dilation * (7 - 1)) // 2\n        self.dwconv = nn.Conv1d(\n            dim, dim, kernel_size=7, padding=padding, groups=dim, dilation=dilation\n        )  # depthwise conv\n        self.norm = nn.LayerNorm(dim, eps=1e-6)\n        self.pwconv1 = nn.Linear(dim, intermediate_dim)  # pointwise/1x1 convs, implemented with linear layers\n        self.act = nn.GELU()\n        self.grn = GRN(intermediate_dim)\n        self.pwconv2 = nn.Linear(intermediate_dim, dim)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        residual = x\n        x = x.transpose(1, 2)  # b n d -> b d n\n        x = self.dwconv(x)\n        x = x.transpose(1, 2)  # b d n -> b n d\n        x = self.norm(x)\n        x = self.pwconv1(x)\n        x = self.act(x)\n        x = self.grn(x)\n        x = self.pwconv2(x)\n        return residual + x\n\n\n# AdaLayerNormZero\n# return with modulated x for attn input, and params for later mlp modulation\n\n\nclass AdaLayerNormZero(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n\n        self.silu = nn.SiLU()\n        self.linear = nn.Linear(dim, dim * 6)\n\n        self.norm = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n\n    def forward(self, x, emb=None):\n        emb = self.linear(self.silu(emb))\n        shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = torch.chunk(emb, 6, dim=1)\n\n        x = self.norm(x) * (1 + scale_msa[:, None]) + shift_msa[:, None]\n        return x, gate_msa, shift_mlp, scale_mlp, gate_mlp\n\n\n# AdaLayerNormZero for final layer\n# return only with modulated x for attn input, cuz no more mlp modulation\n\n\nclass AdaLayerNormZero_Final(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n\n        self.silu = nn.SiLU()\n        self.linear = nn.Linear(dim, dim * 2)\n\n        self.norm = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n\n    def forward(self, x, emb):\n        emb = self.linear(self.silu(emb))\n        scale, shift = torch.chunk(emb, 2, dim=1)\n\n        x = self.norm(x) * (1 + scale)[:, None, :] + shift[:, None, :]\n        return x\n\n\n# FeedForward\n\n\nclass FeedForward(nn.Module):\n    def __init__(self, dim, dim_out=None, mult=4, dropout=0.0, approximate: str = \"none\"):\n        super().__init__()\n        inner_dim = int(dim * mult)\n        dim_out = dim_out if dim_out is not None else dim\n\n        activation = nn.GELU(approximate=approximate)\n        project_in = nn.Sequential(nn.Linear(dim, inner_dim), activation)\n        self.ff = nn.Sequential(project_in, nn.Dropout(dropout), nn.Linear(inner_dim, dim_out))\n\n    def forward(self, x):\n        return self.ff(x)\n\n\n# Attention with possible joint part\n# modified from diffusers/src/diffusers/models/attention_processor.py\n\n\nclass Attention(nn.Module):\n    def __init__(\n        self,\n        processor: JointAttnProcessor | AttnProcessor,\n        dim: int,\n        heads: int = 8,\n        dim_head: int = 64,\n        dropout: float = 0.0,\n        context_dim: Optional[int] = None,  # if not None -> joint attention\n        context_pre_only=None,\n    ):\n        super().__init__()\n\n        if not hasattr(F, \"scaled_dot_product_attention\"):\n            raise ImportError(\"Attention equires PyTorch 2.0, to use it, please upgrade PyTorch to 2.0.\")\n\n        self.processor = processor\n\n        self.dim = dim\n        self.heads = heads\n        self.inner_dim = dim_head * heads\n        self.dropout = dropout\n\n        self.context_dim = context_dim\n        self.context_pre_only = context_pre_only\n\n        self.to_q = nn.Linear(dim, self.inner_dim)\n        self.to_k = nn.Linear(dim, self.inner_dim)\n        self.to_v = nn.Linear(dim, self.inner_dim)\n\n        if self.context_dim is not None:\n            self.to_k_c = nn.Linear(context_dim, self.inner_dim)\n            self.to_v_c = nn.Linear(context_dim, self.inner_dim)\n            if self.context_pre_only is not None:\n                self.to_q_c = nn.Linear(context_dim, self.inner_dim)\n\n        self.to_out = nn.ModuleList([])\n        self.to_out.append(nn.Linear(self.inner_dim, dim))\n        self.to_out.append(nn.Dropout(dropout))\n\n        if self.context_pre_only is not None and not self.context_pre_only:\n            self.to_out_c = nn.Linear(self.inner_dim, dim)\n\n    def forward(\n        self,\n        x: float[\"b n d\"],  # noised input x  # noqa: F722\n        c: float[\"b n d\"] = None,  # context c  # noqa: F722\n        mask: bool[\"b n\"] | None = None,  # noqa: F722\n        rope=None,  # rotary position embedding for x\n        c_rope=None,  # rotary position embedding for c\n    ) -> torch.Tensor:\n        if c is not None:\n            return self.processor(self, x, c=c, mask=mask, rope=rope, c_rope=c_rope)\n        else:\n            return self.processor(self, x, mask=mask, rope=rope)\n\n\n# Attention processor\n\n\nclass AttnProcessor:\n    def __init__(self):\n        pass\n\n    def __call__(\n        self,\n        attn: Attention,\n        x: float[\"b n d\"],  # noised input x  # noqa: F722\n        mask: bool[\"b n\"] | None = None,  # noqa: F722\n        rope=None,  # rotary position embedding\n    ) -> torch.FloatTensor:\n        batch_size = x.shape[0]\n\n        # `sample` projections.\n        query = attn.to_q(x)\n        key = attn.to_k(x)\n        value = attn.to_v(x)\n\n        # apply rotary position embedding\n        if rope is not None:\n            freqs, xpos_scale = rope\n            q_xpos_scale, k_xpos_scale = (xpos_scale, xpos_scale**-1.0) if xpos_scale is not None else (1.0, 1.0)\n\n            query = apply_rotary_pos_emb(query, freqs, q_xpos_scale)\n            key = apply_rotary_pos_emb(key, freqs, k_xpos_scale)\n\n        # attention\n        inner_dim = key.shape[-1]\n        head_dim = inner_dim // attn.heads\n        query = query.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n        key = key.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n        value = value.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n\n        # mask. e.g. inference got a batch with different target durations, mask out the padding\n        if mask is not None:\n            attn_mask = mask\n            attn_mask = attn_mask.unsqueeze(1).unsqueeze(1)  # 'b n -> b 1 1 n'\n            attn_mask = attn_mask.expand(batch_size, attn.heads, query.shape[-2], key.shape[-2])\n        else:\n            attn_mask = None\n\n        x = F.scaled_dot_product_attention(query, key, value, attn_mask=attn_mask, dropout_p=0.0, is_causal=False)\n        x = x.transpose(1, 2).reshape(batch_size, -1, attn.heads * head_dim)\n        x = x.to(query.dtype)\n\n        # linear proj\n        x = attn.to_out[0](x)\n        # dropout\n        x = attn.to_out[1](x)\n\n        if mask is not None:\n            mask = mask.unsqueeze(-1)\n            x = x.masked_fill(~mask, 0.0)\n\n        return x\n\n\n# Joint Attention processor for MM-DiT\n# modified from diffusers/src/diffusers/models/attention_processor.py\n\n\nclass JointAttnProcessor:\n    def __init__(self):\n        pass\n\n    def __call__(\n        self,\n        attn: Attention,\n        x: float[\"b n d\"],  # noised input x  # noqa: F722\n        c: float[\"b nt d\"] = None,  # context c, here text # noqa: F722\n        mask: bool[\"b n\"] | None = None,  # noqa: F722\n        rope=None,  # rotary position embedding for x\n        c_rope=None,  # rotary position embedding for c\n    ) -> torch.FloatTensor:\n        residual = x\n\n        batch_size = c.shape[0]\n\n        # `sample` projections.\n        query = attn.to_q(x)\n        key = attn.to_k(x)\n        value = attn.to_v(x)\n\n        # `context` projections.\n        c_query = attn.to_q_c(c)\n        c_key = attn.to_k_c(c)\n        c_value = attn.to_v_c(c)\n\n        # apply rope for context and noised input independently\n        if rope is not None:\n            freqs, xpos_scale = rope\n            q_xpos_scale, k_xpos_scale = (xpos_scale, xpos_scale**-1.0) if xpos_scale is not None else (1.0, 1.0)\n            query = apply_rotary_pos_emb(query, freqs, q_xpos_scale)\n            key = apply_rotary_pos_emb(key, freqs, k_xpos_scale)\n        if c_rope is not None:\n            freqs, xpos_scale = c_rope\n            q_xpos_scale, k_xpos_scale = (xpos_scale, xpos_scale**-1.0) if xpos_scale is not None else (1.0, 1.0)\n            c_query = apply_rotary_pos_emb(c_query, freqs, q_xpos_scale)\n            c_key = apply_rotary_pos_emb(c_key, freqs, k_xpos_scale)\n\n        # attention\n        query = torch.cat([query, c_query], dim=1)\n        key = torch.cat([key, c_key], dim=1)\n        value = torch.cat([value, c_value], dim=1)\n\n        inner_dim = key.shape[-1]\n        head_dim = inner_dim // attn.heads\n        query = query.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n        key = key.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n        value = value.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n\n        # mask. e.g. inference got a batch with different target durations, mask out the padding\n        if mask is not None:\n            attn_mask = F.pad(mask, (0, c.shape[1]), value=True)  # no mask for c (text)\n            attn_mask = attn_mask.unsqueeze(1).unsqueeze(1)  # 'b n -> b 1 1 n'\n            attn_mask = attn_mask.expand(batch_size, attn.heads, query.shape[-2], key.shape[-2])\n        else:\n            attn_mask = None\n\n        x = F.scaled_dot_product_attention(query, key, value, attn_mask=attn_mask, dropout_p=0.0, is_causal=False)\n        x = x.transpose(1, 2).reshape(batch_size, -1, attn.heads * head_dim)\n        x = x.to(query.dtype)\n\n        # Split the attention outputs.\n        x, c = (\n            x[:, : residual.shape[1]],\n            x[:, residual.shape[1] :],\n        )\n\n        # linear proj\n        x = attn.to_out[0](x)\n        # dropout\n        x = attn.to_out[1](x)\n        if not attn.context_pre_only:\n            c = attn.to_out_c(c)\n\n        if mask is not None:\n            mask = mask.unsqueeze(-1)\n            x = x.masked_fill(~mask, 0.0)\n            # c = c.masked_fill(~mask, 0.)  # no mask for c (text)\n\n        return x, c\n\n\n# DiT Block\n\n\nclass DiTBlock(nn.Module):\n    def __init__(self, dim, heads, dim_head, ff_mult=4, dropout=0.1):\n        super().__init__()\n\n        self.attn_norm = AdaLayerNormZero(dim)\n        self.attn = Attention(\n            processor=AttnProcessor(),\n            dim=dim,\n            heads=heads,\n            dim_head=dim_head,\n            dropout=dropout,\n        )\n\n        self.ff_norm = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n        self.ff = FeedForward(dim=dim, mult=ff_mult, dropout=dropout, approximate=\"tanh\")\n\n    def forward(self, x, t, mask=None, rope=None):  # x: noised input, t: time embedding\n        # pre-norm & modulation for attention input\n        norm, gate_msa, shift_mlp, scale_mlp, gate_mlp = self.attn_norm(x, emb=t)\n\n        # attention\n        attn_output = self.attn(x=norm, mask=mask, rope=rope)\n\n        # process attention output for input x\n        x = x + gate_msa.unsqueeze(1) * attn_output\n\n        norm = self.ff_norm(x) * (1 + scale_mlp[:, None]) + shift_mlp[:, None]\n        ff_output = self.ff(norm)\n        x = x + gate_mlp.unsqueeze(1) * ff_output\n\n        return x\n\n\n# MMDiT Block https://arxiv.org/abs/2403.03206\n\n\nclass MMDiTBlock(nn.Module):\n    r\"\"\"\n    modified from diffusers/src/diffusers/models/attention.py\n\n    notes.\n    _c: context related. text, cond, etc. (left part in sd3 fig2.b)\n    _x: noised input related. (right part)\n    context_pre_only: last layer only do prenorm + modulation cuz no more ffn\n    \"\"\"\n\n    def __init__(self, dim, heads, dim_head, ff_mult=4, dropout=0.1, context_pre_only=False):\n        super().__init__()\n\n        self.context_pre_only = context_pre_only\n\n        self.attn_norm_c = AdaLayerNormZero_Final(dim) if context_pre_only else AdaLayerNormZero(dim)\n        self.attn_norm_x = AdaLayerNormZero(dim)\n        self.attn = Attention(\n            processor=JointAttnProcessor(),\n            dim=dim,\n            heads=heads,\n            dim_head=dim_head,\n            dropout=dropout,\n            context_dim=dim,\n            context_pre_only=context_pre_only,\n        )\n\n        if not context_pre_only:\n            self.ff_norm_c = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n            self.ff_c = FeedForward(dim=dim, mult=ff_mult, dropout=dropout, approximate=\"tanh\")\n        else:\n            self.ff_norm_c = None\n            self.ff_c = None\n        self.ff_norm_x = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n        self.ff_x = FeedForward(dim=dim, mult=ff_mult, dropout=dropout, approximate=\"tanh\")\n\n    def forward(self, x, c, t, mask=None, rope=None, c_rope=None):  # x: noised input, c: context, t: time embedding\n        # pre-norm & modulation for attention input\n        if self.context_pre_only:\n            norm_c = self.attn_norm_c(c, t)\n        else:\n            norm_c, c_gate_msa, c_shift_mlp, c_scale_mlp, c_gate_mlp = self.attn_norm_c(c, emb=t)\n        norm_x, x_gate_msa, x_shift_mlp, x_scale_mlp, x_gate_mlp = self.attn_norm_x(x, emb=t)\n\n        # attention\n        x_attn_output, c_attn_output = self.attn(x=norm_x, c=norm_c, mask=mask, rope=rope, c_rope=c_rope)\n\n        # process attention output for context c\n        if self.context_pre_only:\n            c = None\n        else:  # if not last layer\n            c = c + c_gate_msa.unsqueeze(1) * c_attn_output\n\n            norm_c = self.ff_norm_c(c) * (1 + c_scale_mlp[:, None]) + c_shift_mlp[:, None]\n            c_ff_output = self.ff_c(norm_c)\n            c = c + c_gate_mlp.unsqueeze(1) * c_ff_output\n\n        # process attention output for input x\n        x = x + x_gate_msa.unsqueeze(1) * x_attn_output\n\n        norm_x = self.ff_norm_x(x) * (1 + x_scale_mlp[:, None]) + x_shift_mlp[:, None]\n        x_ff_output = self.ff_x(norm_x)\n        x = x + x_gate_mlp.unsqueeze(1) * x_ff_output\n\n        return c, x\n\n\n# time step conditioning embedding\n\n\nclass TimestepEmbedding(nn.Module):\n    def __init__(self, dim, freq_embed_dim=256):\n        super().__init__()\n        self.time_embed = SinusPositionEmbedding(freq_embed_dim)\n        self.time_mlp = nn.Sequential(nn.Linear(freq_embed_dim, dim), nn.SiLU(), nn.Linear(dim, dim))\n\n    def forward(self, timestep: float[\"b\"]):  # noqa: F821\n        time_hidden = self.time_embed(timestep)\n        time_hidden = time_hidden.to(timestep.dtype)\n        time = self.time_mlp(time_hidden)  # b d\n        return time\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/trainer.py",
    "content": "from __future__ import annotations\n\nimport gc\nimport os\n\nimport torch\nimport torchaudio\nimport wandb\nfrom accelerate import Accelerator\nfrom accelerate.utils import DistributedDataParallelKwargs\nfrom ema_pytorch import EMA\nfrom torch.optim import AdamW\nfrom torch.optim.lr_scheduler import LinearLR, SequentialLR\nfrom torch.utils.data import DataLoader, Dataset, SequentialSampler\nfrom tqdm import tqdm\n\nfrom f5_tts.model import CFM\nfrom f5_tts.model.dataset import DynamicBatchSampler, collate_fn\nfrom f5_tts.model.utils import default, exists\n\n# trainer\n\n\nclass Trainer:\n    def __init__(\n        self,\n        model: CFM,\n        epochs,\n        learning_rate,\n        num_warmup_updates=20000,\n        save_per_updates=1000,\n        checkpoint_path=None,\n        batch_size=32,\n        batch_size_type: str = \"sample\",\n        max_samples=32,\n        grad_accumulation_steps=1,\n        max_grad_norm=1.0,\n        noise_scheduler: str | None = None,\n        duration_predictor: torch.nn.Module | None = None,\n        logger: str | None = \"wandb\",  # \"wandb\" | \"tensorboard\" | None\n        wandb_project=\"test_e2-tts\",\n        wandb_run_name=\"test_run\",\n        wandb_resume_id: str = None,\n        log_samples: bool = False,\n        last_per_steps=None,\n        accelerate_kwargs: dict = dict(),\n        ema_kwargs: dict = dict(),\n        bnb_optimizer: bool = False,\n        mel_spec_type: str = \"vocos\",  # \"vocos\" | \"bigvgan\"\n        is_local_vocoder: bool = False,  # use local path vocoder\n        local_vocoder_path: str = \"\",  # local vocoder path\n    ):\n        ddp_kwargs = DistributedDataParallelKwargs(find_unused_parameters=True)\n\n        if logger == \"wandb\" and not wandb.api.api_key:\n            logger = None\n        print(f\"Using logger: {logger}\")\n        self.log_samples = log_samples\n\n        self.accelerator = Accelerator(\n            log_with=logger if logger == \"wandb\" else None,\n            kwargs_handlers=[ddp_kwargs],\n            gradient_accumulation_steps=grad_accumulation_steps,\n            **accelerate_kwargs,\n        )\n\n        self.logger = logger\n        if self.logger == \"wandb\":\n            if exists(wandb_resume_id):\n                init_kwargs = {\"wandb\": {\"resume\": \"allow\", \"name\": wandb_run_name, \"id\": wandb_resume_id}}\n            else:\n                init_kwargs = {\"wandb\": {\"resume\": \"allow\", \"name\": wandb_run_name}}\n\n            self.accelerator.init_trackers(\n                project_name=wandb_project,\n                init_kwargs=init_kwargs,\n                config={\n                    \"epochs\": epochs,\n                    \"learning_rate\": learning_rate,\n                    \"num_warmup_updates\": num_warmup_updates,\n                    \"batch_size\": batch_size,\n                    \"batch_size_type\": batch_size_type,\n                    \"max_samples\": max_samples,\n                    \"grad_accumulation_steps\": grad_accumulation_steps,\n                    \"max_grad_norm\": max_grad_norm,\n                    \"gpus\": self.accelerator.num_processes,\n                    \"noise_scheduler\": noise_scheduler,\n                },\n            )\n\n        elif self.logger == \"tensorboard\":\n            from torch.utils.tensorboard import SummaryWriter\n\n            self.writer = SummaryWriter(log_dir=f\"runs/{wandb_run_name}\")\n\n        self.model = model\n\n        if self.is_main:\n            self.ema_model = EMA(model, include_online_model=False, **ema_kwargs)\n            self.ema_model.to(self.accelerator.device)\n\n        self.epochs = epochs\n        self.num_warmup_updates = num_warmup_updates\n        self.save_per_updates = save_per_updates\n        self.last_per_steps = default(last_per_steps, save_per_updates * grad_accumulation_steps)\n        self.checkpoint_path = default(checkpoint_path, \"ckpts/test_e2-tts\")\n\n        self.batch_size = batch_size\n        self.batch_size_type = batch_size_type\n        self.max_samples = max_samples\n        self.grad_accumulation_steps = grad_accumulation_steps\n        self.max_grad_norm = max_grad_norm\n\n        # mel vocoder config\n        self.vocoder_name = mel_spec_type\n        self.is_local_vocoder = is_local_vocoder\n        self.local_vocoder_path = local_vocoder_path\n\n        self.noise_scheduler = noise_scheduler\n\n        self.duration_predictor = duration_predictor\n\n        if bnb_optimizer:\n            import bitsandbytes as bnb\n\n            self.optimizer = bnb.optim.AdamW8bit(model.parameters(), lr=learning_rate)\n        else:\n            self.optimizer = AdamW(model.parameters(), lr=learning_rate)\n        self.model, self.optimizer = self.accelerator.prepare(self.model, self.optimizer)\n\n    @property\n    def is_main(self):\n        return self.accelerator.is_main_process\n\n    def save_checkpoint(self, step, last=False):\n        self.accelerator.wait_for_everyone()\n        if self.is_main:\n            checkpoint = dict(\n                model_state_dict=self.accelerator.unwrap_model(self.model).state_dict(),\n                optimizer_state_dict=self.accelerator.unwrap_model(self.optimizer).state_dict(),\n                ema_model_state_dict=self.ema_model.state_dict(),\n                scheduler_state_dict=self.scheduler.state_dict(),\n                step=step,\n            )\n            if not os.path.exists(self.checkpoint_path):\n                os.makedirs(self.checkpoint_path)\n            if last:\n                self.accelerator.save(checkpoint, f\"{self.checkpoint_path}/model_last.pt\")\n                print(f\"Saved last checkpoint at step {step}\")\n            else:\n                self.accelerator.save(checkpoint, f\"{self.checkpoint_path}/model_{step}.pt\")\n\n    def load_checkpoint(self):\n        if (\n            not exists(self.checkpoint_path)\n            or not os.path.exists(self.checkpoint_path)\n            or not any(filename.endswith(\".pt\") for filename in os.listdir(self.checkpoint_path))\n        ):\n            return 0\n\n        self.accelerator.wait_for_everyone()\n        if \"model_last.pt\" in os.listdir(self.checkpoint_path):\n            latest_checkpoint = \"model_last.pt\"\n        else:\n            latest_checkpoint = sorted(\n                [f for f in os.listdir(self.checkpoint_path) if f.endswith(\".pt\")],\n                key=lambda x: int(\"\".join(filter(str.isdigit, x))),\n            )[-1]\n        # checkpoint = torch.load(f\"{self.checkpoint_path}/{latest_checkpoint}\", map_location=self.accelerator.device)  # rather use accelerator.load_state ಥ_ಥ\n        checkpoint = torch.load(f\"{self.checkpoint_path}/{latest_checkpoint}\", weights_only=True, map_location=\"cpu\")\n\n        # patch for backward compatibility, 305e3ea\n        for key in [\"ema_model.mel_spec.mel_stft.mel_scale.fb\", \"ema_model.mel_spec.mel_stft.spectrogram.window\"]:\n            if key in checkpoint[\"ema_model_state_dict\"]:\n                del checkpoint[\"ema_model_state_dict\"][key]\n\n        if self.is_main:\n            self.ema_model.load_state_dict(checkpoint[\"ema_model_state_dict\"])\n\n        if \"step\" in checkpoint:\n            # patch for backward compatibility, 305e3ea\n            for key in [\"mel_spec.mel_stft.mel_scale.fb\", \"mel_spec.mel_stft.spectrogram.window\"]:\n                if key in checkpoint[\"model_state_dict\"]:\n                    del checkpoint[\"model_state_dict\"][key]\n\n            self.accelerator.unwrap_model(self.model).load_state_dict(checkpoint[\"model_state_dict\"])\n            self.accelerator.unwrap_model(self.optimizer).load_state_dict(checkpoint[\"optimizer_state_dict\"])\n            if self.scheduler:\n                self.scheduler.load_state_dict(checkpoint[\"scheduler_state_dict\"])\n            step = checkpoint[\"step\"]\n        else:\n            checkpoint[\"model_state_dict\"] = {\n                k.replace(\"ema_model.\", \"\"): v\n                for k, v in checkpoint[\"ema_model_state_dict\"].items()\n                if k not in [\"initted\", \"step\"]\n            }\n            self.accelerator.unwrap_model(self.model).load_state_dict(checkpoint[\"model_state_dict\"])\n            step = 0\n\n        del checkpoint\n        gc.collect()\n        return step\n\n    def train(self, train_dataset: Dataset, num_workers=16, resumable_with_seed: int = None):\n        if self.log_samples:\n            from f5_tts.infer.utils_infer import cfg_strength, load_vocoder, nfe_step, sway_sampling_coef\n\n            vocoder = load_vocoder(\n                vocoder_name=self.vocoder_name, is_local=self.is_local_vocoder, local_path=self.local_vocoder_path\n            )\n            target_sample_rate = self.accelerator.unwrap_model(self.model).mel_spec.target_sample_rate\n            log_samples_path = f\"{self.checkpoint_path}/samples\"\n            os.makedirs(log_samples_path, exist_ok=True)\n\n        if exists(resumable_with_seed):\n            generator = torch.Generator()\n            generator.manual_seed(resumable_with_seed)\n        else:\n            generator = None\n\n        if self.batch_size_type == \"sample\":\n            train_dataloader = DataLoader(\n                train_dataset,\n                collate_fn=collate_fn,\n                num_workers=num_workers,\n                pin_memory=True,\n                persistent_workers=True,\n                batch_size=self.batch_size,\n                shuffle=True,\n                generator=generator,\n            )\n        elif self.batch_size_type == \"frame\":\n            self.accelerator.even_batches = False\n            sampler = SequentialSampler(train_dataset)\n            batch_sampler = DynamicBatchSampler(\n                sampler, self.batch_size, max_samples=self.max_samples, random_seed=resumable_with_seed, drop_last=False\n            )\n            train_dataloader = DataLoader(\n                train_dataset,\n                collate_fn=collate_fn,\n                num_workers=num_workers,\n                pin_memory=True,\n                persistent_workers=True,\n                batch_sampler=batch_sampler,\n            )\n        else:\n            raise ValueError(f\"batch_size_type must be either 'sample' or 'frame', but received {self.batch_size_type}\")\n\n        #  accelerator.prepare() dispatches batches to devices;\n        #  which means the length of dataloader calculated before, should consider the number of devices\n        warmup_steps = (\n            self.num_warmup_updates * self.accelerator.num_processes\n        )  # consider a fixed warmup steps while using accelerate multi-gpu ddp\n        # otherwise by default with split_batches=False, warmup steps change with num_processes\n        total_steps = len(train_dataloader) * self.epochs / self.grad_accumulation_steps\n        decay_steps = total_steps - warmup_steps\n        warmup_scheduler = LinearLR(self.optimizer, start_factor=1e-8, end_factor=1.0, total_iters=warmup_steps)\n        decay_scheduler = LinearLR(self.optimizer, start_factor=1.0, end_factor=1e-8, total_iters=decay_steps)\n        self.scheduler = SequentialLR(\n            self.optimizer, schedulers=[warmup_scheduler, decay_scheduler], milestones=[warmup_steps]\n        )\n        train_dataloader, self.scheduler = self.accelerator.prepare(\n            train_dataloader, self.scheduler\n        )  # actual steps = 1 gpu steps / gpus\n        start_step = self.load_checkpoint()\n        global_step = start_step\n\n        if exists(resumable_with_seed):\n            orig_epoch_step = len(train_dataloader)\n            skipped_epoch = int(start_step // orig_epoch_step)\n            skipped_batch = start_step % orig_epoch_step\n            skipped_dataloader = self.accelerator.skip_first_batches(train_dataloader, num_batches=skipped_batch)\n        else:\n            skipped_epoch = 0\n\n        for epoch in range(skipped_epoch, self.epochs):\n            self.model.train()\n            if exists(resumable_with_seed) and epoch == skipped_epoch:\n                progress_bar = tqdm(\n                    skipped_dataloader,\n                    desc=f\"Epoch {epoch+1}/{self.epochs}\",\n                    unit=\"step\",\n                    disable=not self.accelerator.is_local_main_process,\n                    initial=skipped_batch,\n                    total=orig_epoch_step,\n                )\n            else:\n                progress_bar = tqdm(\n                    train_dataloader,\n                    desc=f\"Epoch {epoch+1}/{self.epochs}\",\n                    unit=\"step\",\n                    disable=not self.accelerator.is_local_main_process,\n                )\n\n            for batch in progress_bar:\n                with self.accelerator.accumulate(self.model):\n                    text_inputs = batch[\"text\"]\n                    mel_spec = batch[\"mel\"].permute(0, 2, 1)\n                    mel_lengths = batch[\"mel_lengths\"]\n\n                    # TODO. add duration predictor training\n                    if self.duration_predictor is not None and self.accelerator.is_local_main_process:\n                        dur_loss = self.duration_predictor(mel_spec, lens=batch.get(\"durations\"))\n                        self.accelerator.log({\"duration loss\": dur_loss.item()}, step=global_step)\n\n                    loss, cond, pred = self.model(\n                        mel_spec, text=text_inputs, lens=mel_lengths, noise_scheduler=self.noise_scheduler\n                    )\n                    self.accelerator.backward(loss)\n\n                    if self.max_grad_norm > 0 and self.accelerator.sync_gradients:\n                        self.accelerator.clip_grad_norm_(self.model.parameters(), self.max_grad_norm)\n\n                    self.optimizer.step()\n                    self.scheduler.step()\n                    self.optimizer.zero_grad()\n\n                if self.is_main:\n                    self.ema_model.update()\n\n                global_step += 1\n\n                if self.accelerator.is_local_main_process:\n                    self.accelerator.log({\"loss\": loss.item(), \"lr\": self.scheduler.get_last_lr()[0]}, step=global_step)\n                    if self.logger == \"tensorboard\":\n                        self.writer.add_scalar(\"loss\", loss.item(), global_step)\n                        self.writer.add_scalar(\"lr\", self.scheduler.get_last_lr()[0], global_step)\n\n                progress_bar.set_postfix(step=str(global_step), loss=loss.item())\n\n                if global_step % (self.save_per_updates * self.grad_accumulation_steps) == 0:\n                    self.save_checkpoint(global_step)\n\n                    if self.log_samples and self.accelerator.is_local_main_process:\n                        ref_audio_len = mel_lengths[0]\n                        infer_text = [\n                            text_inputs[0] + ([\" \"] if isinstance(text_inputs[0], list) else \" \") + text_inputs[0]\n                        ]\n                        with torch.inference_mode():\n                            generated, _ = self.accelerator.unwrap_model(self.model).sample(\n                                cond=mel_spec[0][:ref_audio_len].unsqueeze(0),\n                                text=infer_text,\n                                duration=ref_audio_len * 2,\n                                steps=nfe_step,\n                                cfg_strength=cfg_strength,\n                                sway_sampling_coef=sway_sampling_coef,\n                            )\n                            generated = generated.to(torch.float32)\n                            gen_mel_spec = generated[:, ref_audio_len:, :].permute(0, 2, 1).to(self.accelerator.device)\n                            ref_mel_spec = batch[\"mel\"][0].unsqueeze(0)\n                            if self.vocoder_name == \"vocos\":\n                                gen_audio = vocoder.decode(gen_mel_spec).cpu()\n                                ref_audio = vocoder.decode(ref_mel_spec).cpu()\n                            elif self.vocoder_name == \"bigvgan\":\n                                gen_audio = vocoder(gen_mel_spec).squeeze(0).cpu()\n                                ref_audio = vocoder(ref_mel_spec).squeeze(0).cpu()\n\n                        torchaudio.save(f\"{log_samples_path}/step_{global_step}_gen.wav\", gen_audio, target_sample_rate)\n                        torchaudio.save(f\"{log_samples_path}/step_{global_step}_ref.wav\", ref_audio, target_sample_rate)\n\n                if global_step % self.last_per_steps == 0:\n                    self.save_checkpoint(global_step, last=True)\n\n        self.save_checkpoint(global_step, last=True)\n\n        self.accelerator.end_training()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/model/utils.py",
    "content": "from __future__ import annotations\n\nimport os\nimport random\nfrom collections import defaultdict\nfrom importlib.resources import files\n\nimport torch\nfrom torch.nn.utils.rnn import pad_sequence\n\nimport jieba\nfrom pypinyin import lazy_pinyin, Style\n\n\n# seed everything\n\n\ndef seed_everything(seed=0):\n    random.seed(seed)\n    os.environ[\"PYTHONHASHSEED\"] = str(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = False\n\n\n# helpers\n\n\ndef exists(v):\n    return v is not None\n\n\ndef default(v, d):\n    return v if exists(v) else d\n\n\n# tensor helpers\n\n\ndef lens_to_mask(t: int[\"b\"], length: int | None = None) -> bool[\"b n\"]:  # noqa: F722 F821\n    if not exists(length):\n        length = t.amax()\n\n    seq = torch.arange(length, device=t.device)\n    return seq[None, :] < t[:, None]\n\n\ndef mask_from_start_end_indices(seq_len: int[\"b\"], start: int[\"b\"], end: int[\"b\"]):  # noqa: F722 F821\n    max_seq_len = seq_len.max().item()\n    seq = torch.arange(max_seq_len, device=start.device).long()\n    start_mask = seq[None, :] >= start[:, None]\n    end_mask = seq[None, :] < end[:, None]\n    return start_mask & end_mask\n\n\ndef mask_from_frac_lengths(seq_len: int[\"b\"], frac_lengths: float[\"b\"]):  # noqa: F722 F821\n    lengths = (frac_lengths * seq_len).long()\n    max_start = seq_len - lengths\n\n    rand = torch.rand_like(frac_lengths)\n    start = (max_start * rand).long().clamp(min=0)\n    end = start + lengths\n\n    return mask_from_start_end_indices(seq_len, start, end)\n\n\ndef maybe_masked_mean(t: float[\"b n d\"], mask: bool[\"b n\"] = None) -> float[\"b d\"]:  # noqa: F722\n    if not exists(mask):\n        return t.mean(dim=1)\n\n    t = torch.where(mask[:, :, None], t, torch.tensor(0.0, device=t.device))\n    num = t.sum(dim=1)\n    den = mask.float().sum(dim=1)\n\n    return num / den.clamp(min=1.0)\n\n\n# simple utf-8 tokenizer, since paper went character based\ndef list_str_to_tensor(text: list[str], padding_value=-1) -> int[\"b nt\"]:  # noqa: F722\n    list_tensors = [torch.tensor([*bytes(t, \"UTF-8\")]) for t in text]  # ByT5 style\n    text = pad_sequence(list_tensors, padding_value=padding_value, batch_first=True)\n    return text\n\n\n# char tokenizer, based on custom dataset's extracted .txt file\ndef list_str_to_idx(\n    text: list[str] | list[list[str]],\n    vocab_char_map: dict[str, int],  # {char: idx}\n    padding_value=-1,\n) -> int[\"b nt\"]:  # noqa: F722\n    list_idx_tensors = [torch.tensor([vocab_char_map.get(c, 0) for c in t]) for t in text]  # pinyin or char style\n    text = pad_sequence(list_idx_tensors, padding_value=padding_value, batch_first=True)\n    return text\n\n\n# Get tokenizer\n\n\ndef get_tokenizer(dataset_name, tokenizer: str = \"pinyin\"):\n    \"\"\"\n    tokenizer   - \"pinyin\" do g2p for only chinese characters, need .txt vocab_file\n                - \"char\" for char-wise tokenizer, need .txt vocab_file\n                - \"byte\" for utf-8 tokenizer\n                - \"custom\" if you're directly passing in a path to the vocab.txt you want to use\n    vocab_size  - if use \"pinyin\", all available pinyin types, common alphabets (also those with accent) and symbols\n                - if use \"char\", derived from unfiltered character & symbol counts of custom dataset\n                - if use \"byte\", set to 256 (unicode byte range)\n    \"\"\"\n    if tokenizer in [\"pinyin\", \"char\"]:\n        tokenizer_path = os.path.join(files(\"f5_tts\").joinpath(\"../../data\"), f\"{dataset_name}_{tokenizer}/vocab.txt\")\n        with open(tokenizer_path, \"r\", encoding=\"utf-8\") as f:\n            vocab_char_map = {}\n            for i, char in enumerate(f):\n                vocab_char_map[char[:-1]] = i\n        vocab_size = len(vocab_char_map)\n        assert vocab_char_map[\" \"] == 0, \"make sure space is of idx 0 in vocab.txt, cuz 0 is used for unknown char\"\n\n    elif tokenizer == \"byte\":\n        vocab_char_map = None\n        vocab_size = 256\n\n    elif tokenizer == \"custom\":\n        with open(dataset_name, \"r\", encoding=\"utf-8\") as f:\n            vocab_char_map = {}\n            for i, char in enumerate(f):\n                vocab_char_map[char[:-1]] = i\n        vocab_size = len(vocab_char_map)\n\n    return vocab_char_map, vocab_size\n\n\n# convert char to pinyin\n\n\ndef convert_char_to_pinyin(text_list, polyphone=True):\n    final_text_list = []\n    god_knows_why_en_testset_contains_zh_quote = str.maketrans(\n        {\"“\": '\"', \"”\": '\"', \"‘\": \"'\", \"’\": \"'\"}\n    )  # in case librispeech (orig no-pc) test-clean\n    custom_trans = str.maketrans({\";\": \",\"})  # add custom trans here, to address oov\n    for text in text_list:\n        char_list = []\n        text = text.translate(god_knows_why_en_testset_contains_zh_quote)\n        text = text.translate(custom_trans)\n        for seg in jieba.cut(text):\n            seg_byte_len = len(bytes(seg, \"UTF-8\"))\n            if seg_byte_len == len(seg):  # if pure alphabets and symbols\n                if char_list and seg_byte_len > 1 and char_list[-1] not in \" :'\\\"\":\n                    char_list.append(\" \")\n                char_list.extend(seg)\n            elif polyphone and seg_byte_len == 3 * len(seg):  # if pure chinese characters\n                seg = lazy_pinyin(seg, style=Style.TONE3, tone_sandhi=True)\n                for c in seg:\n                    if c not in \"。，、；：？！《》【】—…\":\n                        char_list.append(\" \")\n                    char_list.append(c)\n            else:  # if mixed chinese characters, alphabets and symbols\n                for c in seg:\n                    if ord(c) < 256:\n                        char_list.extend(c)\n                    else:\n                        if c not in \"。，、；：？！《》【】—…\":\n                            char_list.append(\" \")\n                            char_list.extend(lazy_pinyin(c, style=Style.TONE3, tone_sandhi=True))\n                        else:  # if is zh punc\n                            char_list.append(c)\n        final_text_list.append(char_list)\n\n    return final_text_list\n\n\n# filter func for dirty data with many repetitions\n\n\ndef repetition_found(text, length=2, tolerance=10):\n    pattern_count = defaultdict(int)\n    for i in range(len(text) - length + 1):\n        pattern = text[i : i + length]\n        pattern_count[pattern] += 1\n    for pattern, count in pattern_count.items():\n        if count > tolerance:\n            return True\n    return False\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/scripts/count_max_epoch.py",
    "content": "\"\"\"ADAPTIVE BATCH SIZE\"\"\"\n\nprint(\"Adaptive batch size: using grouping batch sampler, frames_per_gpu fixed fed in\")\nprint(\"  -> least padding, gather wavs with accumulated frames in a batch\\n\")\n\n# data\ntotal_hours = 95282\nmel_hop_length = 256\nmel_sampling_rate = 24000\n\n# target\nwanted_max_updates = 1000000\n\n# train params\ngpus = 8\nframes_per_gpu = 38400  # 8 * 38400 = 307200\ngrad_accum = 1\n\n# intermediate\nmini_batch_frames = frames_per_gpu * grad_accum * gpus\nmini_batch_hours = mini_batch_frames * mel_hop_length / mel_sampling_rate / 3600\nupdates_per_epoch = total_hours / mini_batch_hours\nsteps_per_epoch = updates_per_epoch * grad_accum\n\n# result\nepochs = wanted_max_updates / updates_per_epoch\nprint(f\"epochs should be set to: {epochs:.0f} ({epochs/grad_accum:.1f} x gd_acum {grad_accum})\")\nprint(f\"progress_bar should show approx. 0/{updates_per_epoch:.0f} updates\")\nprint(f\"                      or approx. 0/{steps_per_epoch:.0f} steps\")\n\n# others\nprint(f\"total {total_hours:.0f} hours\")\nprint(f\"mini-batch of {mini_batch_frames:.0f} frames, {mini_batch_hours:.2f} hours per mini-batch\")\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/scripts/count_params_gflops.py",
    "content": "import sys\nimport os\n\nsys.path.append(os.getcwd())\n\nfrom f5_tts.model import CFM, DiT\n\nimport torch\nimport thop\n\n\n\"\"\" ~155M \"\"\"\n# transformer =     UNetT(dim = 768, depth = 20, heads = 12, ff_mult = 4)\n# transformer =     UNetT(dim = 768, depth = 20, heads = 12, ff_mult = 4, text_dim = 512, conv_layers = 4)\n# transformer =       DiT(dim = 768, depth = 18, heads = 12, ff_mult = 2)\n# transformer =       DiT(dim = 768, depth = 18, heads = 12, ff_mult = 2, text_dim = 512, conv_layers = 4)\n# transformer =       DiT(dim = 768, depth = 18, heads = 12, ff_mult = 2, text_dim = 512, conv_layers = 4, long_skip_connection = True)\n# transformer =     MMDiT(dim = 512, depth = 16, heads = 16, ff_mult = 2)\n\n\"\"\" ~335M \"\"\"\n# FLOPs: 622.1 G, Params: 333.2 M\n# transformer =     UNetT(dim = 1024, depth = 24, heads = 16, ff_mult = 4)\n# FLOPs: 363.4 G, Params: 335.8 M\ntransformer = DiT(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)\n\n\nmodel = CFM(transformer=transformer)\ntarget_sample_rate = 24000\nn_mel_channels = 100\nhop_length = 256\nduration = 20\nframe_length = int(duration * target_sample_rate / hop_length)\ntext_length = 150\n\nflops, params = thop.profile(\n    model, inputs=(torch.randn(1, frame_length, n_mel_channels), torch.zeros(1, text_length, dtype=torch.long))\n)\nprint(f\"FLOPs: {flops / 1e9} G\")\nprint(f\"Params: {params / 1e6} M\")\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/socket_server.py",
    "content": "import socket\nimport struct\nimport torch\nimport torchaudio\nfrom threading import Thread\n\n\nimport gc\nimport traceback\n\n\nfrom infer.utils_infer import infer_batch_process, preprocess_ref_audio_text, load_vocoder, load_model\nfrom model.backbones.dit import DiT\n\n\nclass TTSStreamingProcessor:\n    def __init__(self, ckpt_file, vocab_file, ref_audio, ref_text, device=None, dtype=torch.float32):\n        self.device = device or (\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\n        # Load the model using the provided checkpoint and vocab files\n        self.model = load_model(\n            model_cls=DiT,\n            model_cfg=dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4),\n            ckpt_path=ckpt_file,\n            mel_spec_type=\"vocos\",  # or \"bigvgan\" depending on vocoder\n            vocab_file=vocab_file,\n            ode_method=\"euler\",\n            use_ema=True,\n            device=self.device,\n        ).to(self.device, dtype=dtype)\n\n        # Load the vocoder\n        self.vocoder = load_vocoder(is_local=False)\n\n        # Set sampling rate for streaming\n        self.sampling_rate = 24000  # Consistency with client\n\n        # Set reference audio and text\n        self.ref_audio = ref_audio\n        self.ref_text = ref_text\n\n        # Warm up the model\n        self._warm_up()\n\n    def _warm_up(self):\n        \"\"\"Warm up the model with a dummy input to ensure it's ready for real-time processing.\"\"\"\n        print(\"Warming up the model...\")\n        ref_audio, ref_text = preprocess_ref_audio_text(self.ref_audio, self.ref_text)\n        audio, sr = torchaudio.load(ref_audio)\n        gen_text = \"Warm-up text for the model.\"\n\n        # Pass the vocoder as an argument here\n        infer_batch_process((audio, sr), ref_text, [gen_text], self.model, self.vocoder, device=self.device)\n        print(\"Warm-up completed.\")\n\n    def generate_stream(self, text, play_steps_in_s=0.5):\n        \"\"\"Generate audio in chunks and yield them in real-time.\"\"\"\n        # Preprocess the reference audio and text\n        ref_audio, ref_text = preprocess_ref_audio_text(self.ref_audio, self.ref_text)\n\n        # Load reference audio\n        audio, sr = torchaudio.load(ref_audio)\n\n        # Run inference for the input text\n        audio_chunk, final_sample_rate, _ = infer_batch_process(\n            (audio, sr),\n            ref_text,\n            [text],\n            self.model,\n            self.vocoder,\n            device=self.device,  # Pass vocoder here\n        )\n\n        # Break the generated audio into chunks and send them\n        chunk_size = int(final_sample_rate * play_steps_in_s)\n\n        if len(audio_chunk) < chunk_size:\n            packed_audio = struct.pack(f\"{len(audio_chunk)}f\", *audio_chunk)\n            yield packed_audio\n            return\n\n        for i in range(0, len(audio_chunk), chunk_size):\n            chunk = audio_chunk[i : i + chunk_size]\n\n            # Check if it's the final chunk\n            if i + chunk_size >= len(audio_chunk):\n                chunk = audio_chunk[i:]\n\n            # Send the chunk if it is not empty\n            if len(chunk) > 0:\n                packed_audio = struct.pack(f\"{len(chunk)}f\", *chunk)\n                yield packed_audio\n\n\ndef handle_client(client_socket, processor):\n    try:\n        while True:\n            # Receive data from the client\n            data = client_socket.recv(1024).decode(\"utf-8\")\n            if not data:\n                break\n\n            try:\n                # The client sends the text input\n                text = data.strip()\n\n                # Generate and stream audio chunks\n                for audio_chunk in processor.generate_stream(text):\n                    client_socket.sendall(audio_chunk)\n\n                # Send end-of-audio signal\n                client_socket.sendall(b\"END_OF_AUDIO\")\n\n            except Exception as inner_e:\n                print(f\"Error during processing: {inner_e}\")\n                traceback.print_exc()  # Print the full traceback to diagnose the issue\n                break\n\n    except Exception as e:\n        print(f\"Error handling client: {e}\")\n        traceback.print_exc()\n    finally:\n        client_socket.close()\n\n\ndef start_server(host, port, processor):\n    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n    server.bind((host, port))\n    server.listen(5)\n    print(f\"Server listening on {host}:{port}\")\n\n    while True:\n        client_socket, addr = server.accept()\n        print(f\"Accepted connection from {addr}\")\n        client_handler = Thread(target=handle_client, args=(client_socket, processor))\n        client_handler.start()\n\n\nif __name__ == \"__main__\":\n    try:\n        # Load the model and vocoder using the provided files\n        ckpt_file = \"\"  # pointing your checkpoint \"ckpts/model/model_1096.pt\"\n        vocab_file = \"\"  # Add vocab file path if needed\n        ref_audio = \"\"  # add ref audio\"./tests/ref_audio/reference.wav\"\n        ref_text = \"\"\n\n        # Initialize the processor with the model and vocoder\n        processor = TTSStreamingProcessor(\n            ckpt_file=ckpt_file,\n            vocab_file=vocab_file,\n            ref_audio=ref_audio,\n            ref_text=ref_text,\n            dtype=torch.float32,\n        )\n\n        # Start the server\n        start_server(\"0.0.0.0\", 9998, processor)\n    except KeyboardInterrupt:\n        gc.collect()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/train/README.md",
    "content": "# Training\n\n## Prepare Dataset\n\nExample data processing scripts, and you may tailor your own one along with a Dataset class in `src/f5_tts/model/dataset.py`.\n\n### 1. Some specific Datasets preparing scripts\nDownload corresponding dataset first, and fill in the path in scripts.\n\n```bash\n# Prepare the Emilia dataset\npython src/f5_tts/train/datasets/prepare_emilia.py\n\n# Prepare the Wenetspeech4TTS dataset\npython src/f5_tts/train/datasets/prepare_wenetspeech4tts.py\n\n# Prepare the LibriTTS dataset\npython src/f5_tts/train/datasets/prepare_libritts.py\n\n# Prepare the LJSpeech dataset\npython src/f5_tts/train/datasets/prepare_ljspeech.py\n```\n\n### 2. Create custom dataset with metadata.csv\nUse guidance see [#57 here](https://github.com/SWivid/F5-TTS/discussions/57#discussioncomment-10959029).\n\n```bash\npython src/f5_tts/train/datasets/prepare_csv_wavs.py\n```\n\n## Training & Finetuning\n\nOnce your datasets are prepared, you can start the training process.\n\n### 1. Training script used for pretrained model\n\n```bash\n# setup accelerate config, e.g. use multi-gpu ddp, fp16\n# will be to: ~/.cache/huggingface/accelerate/default_config.yaml     \naccelerate config\n\n# .yaml files are under src/f5_tts/configs directory\naccelerate launch src/f5_tts/train/train.py --config-name F5TTS_Base_train.yaml\n```\n\n### 2. Finetuning practice\nDiscussion board for Finetuning [#57](https://github.com/SWivid/F5-TTS/discussions/57).\n\nGradio UI training/finetuning with `src/f5_tts/train/finetune_gradio.py` see [#143](https://github.com/SWivid/F5-TTS/discussions/143).\n\n### 3. Wandb Logging\n\nThe `wandb/` dir will be created under path you run training/finetuning scripts.\n\nBy default, the training script does NOT use logging (assuming you didn't manually log in using `wandb login`).\n\nTo turn on wandb logging, you can either:\n\n1. Manually login with `wandb login`: Learn more [here](https://docs.wandb.ai/ref/cli/wandb-login)\n2. Automatically login programmatically by setting an environment variable: Get an API KEY at https://wandb.ai/site/ and set the environment variable as follows:\n\nOn Mac & Linux:\n\n```\nexport WANDB_API_KEY=<YOUR WANDB API KEY>\n```\n\nOn Windows:\n\n```\nset WANDB_API_KEY=<YOUR WANDB API KEY>\n```\nMoreover, if you couldn't access Wandb and want to log metrics offline, you can the environment variable as follows:\n\n```\nexport WANDB_MODE=offline\n```\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/train/datasets/prepare_csv_wavs.py",
    "content": "import os\nimport sys\n\nsys.path.append(os.getcwd())\n\nimport argparse\nimport csv\nimport json\nimport shutil\nfrom importlib.resources import files\nfrom pathlib import Path\n\nimport torchaudio\nfrom tqdm import tqdm\nfrom datasets.arrow_writer import ArrowWriter\n\nfrom f5_tts.model.utils import (\n    convert_char_to_pinyin,\n)\n\n\nPRETRAINED_VOCAB_PATH = files(\"f5_tts\").joinpath(\"../../data/Emilia_ZH_EN_pinyin/vocab.txt\")\n\n\ndef is_csv_wavs_format(input_dataset_dir):\n    fpath = Path(input_dataset_dir)\n    metadata = fpath / \"metadata.csv\"\n    wavs = fpath / \"wavs\"\n    return metadata.exists() and metadata.is_file() and wavs.exists() and wavs.is_dir()\n\n\ndef prepare_csv_wavs_dir(input_dir):\n    assert is_csv_wavs_format(input_dir), f\"not csv_wavs format: {input_dir}\"\n    input_dir = Path(input_dir)\n    metadata_path = input_dir / \"metadata.csv\"\n    audio_path_text_pairs = read_audio_text_pairs(metadata_path.as_posix())\n\n    sub_result, durations = [], []\n    vocab_set = set()\n    polyphone = True\n    for audio_path, text in audio_path_text_pairs:\n        if not Path(audio_path).exists():\n            print(f\"audio {audio_path} not found, skipping\")\n            continue\n        audio_duration = get_audio_duration(audio_path)\n        # assume tokenizer = \"pinyin\"  (\"pinyin\" | \"char\")\n        text = convert_char_to_pinyin([text], polyphone=polyphone)[0]\n        sub_result.append({\"audio_path\": audio_path, \"text\": text, \"duration\": audio_duration})\n        durations.append(audio_duration)\n        vocab_set.update(list(text))\n\n    return sub_result, durations, vocab_set\n\n\ndef get_audio_duration(audio_path):\n    audio, sample_rate = torchaudio.load(audio_path)\n    return audio.shape[1] / sample_rate\n\n\ndef read_audio_text_pairs(csv_file_path):\n    audio_text_pairs = []\n\n    parent = Path(csv_file_path).parent\n    with open(csv_file_path, mode=\"r\", newline=\"\", encoding=\"utf-8-sig\") as csvfile:\n        reader = csv.reader(csvfile, delimiter=\"|\")\n        next(reader)  # Skip the header row\n        for row in reader:\n            if len(row) >= 2:\n                audio_file = row[0].strip()  # First column: audio file path\n                text = row[1].strip()  # Second column: text\n                audio_file_path = parent / audio_file\n                audio_text_pairs.append((audio_file_path.as_posix(), text))\n\n    return audio_text_pairs\n\n\ndef save_prepped_dataset(out_dir, result, duration_list, text_vocab_set, is_finetune):\n    out_dir = Path(out_dir)\n    # save preprocessed dataset to disk\n    out_dir.mkdir(exist_ok=True, parents=True)\n    print(f\"\\nSaving to {out_dir} ...\")\n\n    # dataset = Dataset.from_dict({\"audio_path\": audio_path_list, \"text\": text_list, \"duration\": duration_list})  # oom\n    # dataset.save_to_disk(f\"{out_dir}/raw\", max_shard_size=\"2GB\")\n    raw_arrow_path = out_dir / \"raw.arrow\"\n    with ArrowWriter(path=raw_arrow_path.as_posix(), writer_batch_size=1) as writer:\n        for line in tqdm(result, desc=\"Writing to raw.arrow ...\"):\n            writer.write(line)\n\n    # dup a json separately saving duration in case for DynamicBatchSampler ease\n    dur_json_path = out_dir / \"duration.json\"\n    with open(dur_json_path.as_posix(), \"w\", encoding=\"utf-8\") as f:\n        json.dump({\"duration\": duration_list}, f, ensure_ascii=False)\n\n    # vocab map, i.e. tokenizer\n    # add alphabets and symbols (optional, if plan to ft on de/fr etc.)\n    # if tokenizer == \"pinyin\":\n    #     text_vocab_set.update([chr(i) for i in range(32, 127)] + [chr(i) for i in range(192, 256)])\n    voca_out_path = out_dir / \"vocab.txt\"\n    with open(voca_out_path.as_posix(), \"w\") as f:\n        for vocab in sorted(text_vocab_set):\n            f.write(vocab + \"\\n\")\n\n    if is_finetune:\n        file_vocab_finetune = PRETRAINED_VOCAB_PATH.as_posix()\n        shutil.copy2(file_vocab_finetune, voca_out_path)\n    else:\n        with open(voca_out_path, \"w\") as f:\n            for vocab in sorted(text_vocab_set):\n                f.write(vocab + \"\\n\")\n\n    dataset_name = out_dir.stem\n    print(f\"\\nFor {dataset_name}, sample count: {len(result)}\")\n    print(f\"For {dataset_name}, vocab size is: {len(text_vocab_set)}\")\n    print(f\"For {dataset_name}, total {sum(duration_list)/3600:.2f} hours\")\n\n\ndef prepare_and_save_set(inp_dir, out_dir, is_finetune: bool = True):\n    if is_finetune:\n        assert PRETRAINED_VOCAB_PATH.exists(), f\"pretrained vocab.txt not found: {PRETRAINED_VOCAB_PATH}\"\n    sub_result, durations, vocab_set = prepare_csv_wavs_dir(inp_dir)\n    save_prepped_dataset(out_dir, sub_result, durations, vocab_set, is_finetune)\n\n\ndef cli():\n    # finetune: python scripts/prepare_csv_wavs.py /path/to/input_dir /path/to/output_dir_pinyin\n    # pretrain: python scripts/prepare_csv_wavs.py /path/to/output_dir_pinyin --pretrain\n    parser = argparse.ArgumentParser(description=\"Prepare and save dataset.\")\n    parser.add_argument(\"inp_dir\", type=str, help=\"Input directory containing the data.\")\n    parser.add_argument(\"out_dir\", type=str, help=\"Output directory to save the prepared data.\")\n    parser.add_argument(\"--pretrain\", action=\"store_true\", help=\"Enable for new pretrain, otherwise is a fine-tune\")\n\n    args = parser.parse_args()\n\n    prepare_and_save_set(args.inp_dir, args.out_dir, is_finetune=not args.pretrain)\n\n\nif __name__ == \"__main__\":\n    cli()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/train/datasets/prepare_emilia.py",
    "content": "# Emilia Dataset: https://huggingface.co/datasets/amphion/Emilia-Dataset/tree/fc71e07\n# if use updated new version, i.e. WebDataset, feel free to modify / draft your own script\n\n# generate audio text map for Emilia ZH & EN\n# evaluate for vocab size\n\nimport os\nimport sys\n\nsys.path.append(os.getcwd())\n\nimport json\nfrom concurrent.futures import ProcessPoolExecutor\nfrom importlib.resources import files\nfrom pathlib import Path\nfrom tqdm import tqdm\n\nfrom datasets.arrow_writer import ArrowWriter\n\nfrom f5_tts.model.utils import (\n    repetition_found,\n    convert_char_to_pinyin,\n)\n\n\nout_zh = {\n    \"ZH_B00041_S06226\",\n    \"ZH_B00042_S09204\",\n    \"ZH_B00065_S09430\",\n    \"ZH_B00065_S09431\",\n    \"ZH_B00066_S09327\",\n    \"ZH_B00066_S09328\",\n}\nzh_filters = [\"い\", \"て\"]\n# seems synthesized audios, or heavily code-switched\nout_en = {\n    \"EN_B00013_S00913\",\n    \"EN_B00042_S00120\",\n    \"EN_B00055_S04111\",\n    \"EN_B00061_S00693\",\n    \"EN_B00061_S01494\",\n    \"EN_B00061_S03375\",\n    \"EN_B00059_S00092\",\n    \"EN_B00111_S04300\",\n    \"EN_B00100_S03759\",\n    \"EN_B00087_S03811\",\n    \"EN_B00059_S00950\",\n    \"EN_B00089_S00946\",\n    \"EN_B00078_S05127\",\n    \"EN_B00070_S04089\",\n    \"EN_B00074_S09659\",\n    \"EN_B00061_S06983\",\n    \"EN_B00061_S07060\",\n    \"EN_B00059_S08397\",\n    \"EN_B00082_S06192\",\n    \"EN_B00091_S01238\",\n    \"EN_B00089_S07349\",\n    \"EN_B00070_S04343\",\n    \"EN_B00061_S02400\",\n    \"EN_B00076_S01262\",\n    \"EN_B00068_S06467\",\n    \"EN_B00076_S02943\",\n    \"EN_B00064_S05954\",\n    \"EN_B00061_S05386\",\n    \"EN_B00066_S06544\",\n    \"EN_B00076_S06944\",\n    \"EN_B00072_S08620\",\n    \"EN_B00076_S07135\",\n    \"EN_B00076_S09127\",\n    \"EN_B00065_S00497\",\n    \"EN_B00059_S06227\",\n    \"EN_B00063_S02859\",\n    \"EN_B00075_S01547\",\n    \"EN_B00061_S08286\",\n    \"EN_B00079_S02901\",\n    \"EN_B00092_S03643\",\n    \"EN_B00096_S08653\",\n    \"EN_B00063_S04297\",\n    \"EN_B00063_S04614\",\n    \"EN_B00079_S04698\",\n    \"EN_B00104_S01666\",\n    \"EN_B00061_S09504\",\n    \"EN_B00061_S09694\",\n    \"EN_B00065_S05444\",\n    \"EN_B00063_S06860\",\n    \"EN_B00065_S05725\",\n    \"EN_B00069_S07628\",\n    \"EN_B00083_S03875\",\n    \"EN_B00071_S07665\",\n    \"EN_B00071_S07665\",\n    \"EN_B00062_S04187\",\n    \"EN_B00065_S09873\",\n    \"EN_B00065_S09922\",\n    \"EN_B00084_S02463\",\n    \"EN_B00067_S05066\",\n    \"EN_B00106_S08060\",\n    \"EN_B00073_S06399\",\n    \"EN_B00073_S09236\",\n    \"EN_B00087_S00432\",\n    \"EN_B00085_S05618\",\n    \"EN_B00064_S01262\",\n    \"EN_B00072_S01739\",\n    \"EN_B00059_S03913\",\n    \"EN_B00069_S04036\",\n    \"EN_B00067_S05623\",\n    \"EN_B00060_S05389\",\n    \"EN_B00060_S07290\",\n    \"EN_B00062_S08995\",\n}\nen_filters = [\"ا\", \"い\", \"て\"]\n\n\ndef deal_with_audio_dir(audio_dir):\n    audio_jsonl = audio_dir.with_suffix(\".jsonl\")\n    sub_result, durations = [], []\n    vocab_set = set()\n    bad_case_zh = 0\n    bad_case_en = 0\n    with open(audio_jsonl, \"r\") as f:\n        lines = f.readlines()\n        for line in tqdm(lines, desc=f\"{audio_jsonl.stem}\"):\n            obj = json.loads(line)\n            text = obj[\"text\"]\n            if obj[\"language\"] == \"zh\":\n                if obj[\"wav\"].split(\"/\")[1] in out_zh or any(f in text for f in zh_filters) or repetition_found(text):\n                    bad_case_zh += 1\n                    continue\n                else:\n                    text = text.translate(\n                        str.maketrans({\",\": \"，\", \"!\": \"！\", \"?\": \"？\"})\n                    )  # not \"。\" cuz much code-switched\n            if obj[\"language\"] == \"en\":\n                if (\n                    obj[\"wav\"].split(\"/\")[1] in out_en\n                    or any(f in text for f in en_filters)\n                    or repetition_found(text, length=4)\n                ):\n                    bad_case_en += 1\n                    continue\n            if tokenizer == \"pinyin\":\n                text = convert_char_to_pinyin([text], polyphone=polyphone)[0]\n            duration = obj[\"duration\"]\n            sub_result.append({\"audio_path\": str(audio_dir.parent / obj[\"wav\"]), \"text\": text, \"duration\": duration})\n            durations.append(duration)\n            vocab_set.update(list(text))\n    return sub_result, durations, vocab_set, bad_case_zh, bad_case_en\n\n\ndef main():\n    assert tokenizer in [\"pinyin\", \"char\"]\n    result = []\n    duration_list = []\n    text_vocab_set = set()\n    total_bad_case_zh = 0\n    total_bad_case_en = 0\n\n    # process raw data\n    executor = ProcessPoolExecutor(max_workers=max_workers)\n    futures = []\n    for lang in langs:\n        dataset_path = Path(os.path.join(dataset_dir, lang))\n        [\n            futures.append(executor.submit(deal_with_audio_dir, audio_dir))\n            for audio_dir in dataset_path.iterdir()\n            if audio_dir.is_dir()\n        ]\n    for futures in tqdm(futures, total=len(futures)):\n        sub_result, durations, vocab_set, bad_case_zh, bad_case_en = futures.result()\n        result.extend(sub_result)\n        duration_list.extend(durations)\n        text_vocab_set.update(vocab_set)\n        total_bad_case_zh += bad_case_zh\n        total_bad_case_en += bad_case_en\n    executor.shutdown()\n\n    # save preprocessed dataset to disk\n    if not os.path.exists(f\"{save_dir}\"):\n        os.makedirs(f\"{save_dir}\")\n    print(f\"\\nSaving to {save_dir} ...\")\n\n    # dataset = Dataset.from_dict({\"audio_path\": audio_path_list, \"text\": text_list, \"duration\": duration_list})  # oom\n    # dataset.save_to_disk(f\"{save_dir}/raw\", max_shard_size=\"2GB\")\n    with ArrowWriter(path=f\"{save_dir}/raw.arrow\") as writer:\n        for line in tqdm(result, desc=\"Writing to raw.arrow ...\"):\n            writer.write(line)\n\n    # dup a json separately saving duration in case for DynamicBatchSampler ease\n    with open(f\"{save_dir}/duration.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump({\"duration\": duration_list}, f, ensure_ascii=False)\n\n    # vocab map, i.e. tokenizer\n    # add alphabets and symbols (optional, if plan to ft on de/fr etc.)\n    # if tokenizer == \"pinyin\":\n    #     text_vocab_set.update([chr(i) for i in range(32, 127)] + [chr(i) for i in range(192, 256)])\n    with open(f\"{save_dir}/vocab.txt\", \"w\") as f:\n        for vocab in sorted(text_vocab_set):\n            f.write(vocab + \"\\n\")\n\n    print(f\"\\nFor {dataset_name}, sample count: {len(result)}\")\n    print(f\"For {dataset_name}, vocab size is: {len(text_vocab_set)}\")\n    print(f\"For {dataset_name}, total {sum(duration_list)/3600:.2f} hours\")\n    if \"ZH\" in langs:\n        print(f\"Bad zh transcription case: {total_bad_case_zh}\")\n    if \"EN\" in langs:\n        print(f\"Bad en transcription case: {total_bad_case_en}\\n\")\n\n\nif __name__ == \"__main__\":\n    max_workers = 32\n\n    tokenizer = \"pinyin\"  # \"pinyin\" | \"char\"\n    polyphone = True\n\n    langs = [\"ZH\", \"EN\"]\n    dataset_dir = \"<SOME_PATH>/Emilia_Dataset/raw\"\n    dataset_name = f\"Emilia_{'_'.join(langs)}_{tokenizer}\"\n    save_dir = str(files(\"f5_tts\").joinpath(\"../../\")) + f\"/data/{dataset_name}\"\n    print(f\"\\nPrepare for {dataset_name}, will save to {save_dir}\\n\")\n\n    main()\n\n    # Emilia               ZH & EN\n    # samples count       37837916   (after removal)\n    # pinyin vocab size       2543   (polyphone)\n    # total duration      95281.87   (hours)\n    # bad zh asr cnt        230435   (samples)\n    # bad eh asr cnt         37217   (samples)\n\n    # vocab size may be slightly different due to jieba tokenizer and pypinyin (e.g. way of polyphoneme)\n    # please be careful if using pretrained model, make sure the vocab.txt is same\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/train/datasets/prepare_libritts.py",
    "content": "import os\nimport sys\n\nsys.path.append(os.getcwd())\n\nimport json\nfrom concurrent.futures import ProcessPoolExecutor\nfrom importlib.resources import files\nfrom pathlib import Path\nfrom tqdm import tqdm\nimport soundfile as sf\nfrom datasets.arrow_writer import ArrowWriter\n\n\ndef deal_with_audio_dir(audio_dir):\n    sub_result, durations = [], []\n    vocab_set = set()\n    audio_lists = list(audio_dir.rglob(\"*.wav\"))\n\n    for line in audio_lists:\n        text_path = line.with_suffix(\".normalized.txt\")\n        text = open(text_path, \"r\").read().strip()\n        duration = sf.info(line).duration\n        if duration < 0.4 or duration > 30:\n            continue\n        sub_result.append({\"audio_path\": str(line), \"text\": text, \"duration\": duration})\n        durations.append(duration)\n        vocab_set.update(list(text))\n    return sub_result, durations, vocab_set\n\n\ndef main():\n    result = []\n    duration_list = []\n    text_vocab_set = set()\n\n    # process raw data\n    executor = ProcessPoolExecutor(max_workers=max_workers)\n    futures = []\n\n    for subset in tqdm(SUB_SET):\n        dataset_path = Path(os.path.join(dataset_dir, subset))\n        [\n            futures.append(executor.submit(deal_with_audio_dir, audio_dir))\n            for audio_dir in dataset_path.iterdir()\n            if audio_dir.is_dir()\n        ]\n    for future in tqdm(futures, total=len(futures)):\n        sub_result, durations, vocab_set = future.result()\n        result.extend(sub_result)\n        duration_list.extend(durations)\n        text_vocab_set.update(vocab_set)\n    executor.shutdown()\n\n    # save preprocessed dataset to disk\n    if not os.path.exists(f\"{save_dir}\"):\n        os.makedirs(f\"{save_dir}\")\n    print(f\"\\nSaving to {save_dir} ...\")\n\n    with ArrowWriter(path=f\"{save_dir}/raw.arrow\") as writer:\n        for line in tqdm(result, desc=\"Writing to raw.arrow ...\"):\n            writer.write(line)\n\n    # dup a json separately saving duration in case for DynamicBatchSampler ease\n    with open(f\"{save_dir}/duration.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump({\"duration\": duration_list}, f, ensure_ascii=False)\n\n    # vocab map, i.e. tokenizer\n    with open(f\"{save_dir}/vocab.txt\", \"w\") as f:\n        for vocab in sorted(text_vocab_set):\n            f.write(vocab + \"\\n\")\n\n    print(f\"\\nFor {dataset_name}, sample count: {len(result)}\")\n    print(f\"For {dataset_name}, vocab size is: {len(text_vocab_set)}\")\n    print(f\"For {dataset_name}, total {sum(duration_list)/3600:.2f} hours\")\n\n\nif __name__ == \"__main__\":\n    max_workers = 36\n\n    tokenizer = \"char\"  # \"pinyin\" | \"char\"\n\n    SUB_SET = [\"train-clean-100\", \"train-clean-360\", \"train-other-500\"]\n    dataset_dir = \"<SOME_PATH>/LibriTTS\"\n    dataset_name = f\"LibriTTS_{'_'.join(SUB_SET)}_{tokenizer}\".replace(\"train-clean-\", \"\").replace(\"train-other-\", \"\")\n    save_dir = str(files(\"f5_tts\").joinpath(\"../../\")) + f\"/data/{dataset_name}\"\n    print(f\"\\nPrepare for {dataset_name}, will save to {save_dir}\\n\")\n    main()\n\n    # For LibriTTS_100_360_500_char, sample count: 354218\n    # For LibriTTS_100_360_500_char, vocab size is: 78\n    # For LibriTTS_100_360_500_char, total 554.09 hours\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/train/datasets/prepare_ljspeech.py",
    "content": "import os\nimport sys\n\nsys.path.append(os.getcwd())\n\nimport json\nfrom importlib.resources import files\nfrom pathlib import Path\nfrom tqdm import tqdm\nimport soundfile as sf\nfrom datasets.arrow_writer import ArrowWriter\n\n\ndef main():\n    result = []\n    duration_list = []\n    text_vocab_set = set()\n\n    with open(meta_info, \"r\") as f:\n        lines = f.readlines()\n        for line in tqdm(lines):\n            uttr, text, norm_text = line.split(\"|\")\n            norm_text = norm_text.strip()\n            wav_path = Path(dataset_dir) / \"wavs\" / f\"{uttr}.wav\"\n            duration = sf.info(wav_path).duration\n            if duration < 0.4 or duration > 30:\n                continue\n            result.append({\"audio_path\": str(wav_path), \"text\": norm_text, \"duration\": duration})\n            duration_list.append(duration)\n            text_vocab_set.update(list(norm_text))\n\n    # save preprocessed dataset to disk\n    if not os.path.exists(f\"{save_dir}\"):\n        os.makedirs(f\"{save_dir}\")\n    print(f\"\\nSaving to {save_dir} ...\")\n\n    with ArrowWriter(path=f\"{save_dir}/raw.arrow\") as writer:\n        for line in tqdm(result, desc=\"Writing to raw.arrow ...\"):\n            writer.write(line)\n\n    # dup a json separately saving duration in case for DynamicBatchSampler ease\n    with open(f\"{save_dir}/duration.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump({\"duration\": duration_list}, f, ensure_ascii=False)\n\n    # vocab map, i.e. tokenizer\n    # add alphabets and symbols (optional, if plan to ft on de/fr etc.)\n    with open(f\"{save_dir}/vocab.txt\", \"w\") as f:\n        for vocab in sorted(text_vocab_set):\n            f.write(vocab + \"\\n\")\n\n    print(f\"\\nFor {dataset_name}, sample count: {len(result)}\")\n    print(f\"For {dataset_name}, vocab size is: {len(text_vocab_set)}\")\n    print(f\"For {dataset_name}, total {sum(duration_list)/3600:.2f} hours\")\n\n\nif __name__ == \"__main__\":\n    tokenizer = \"char\"  # \"pinyin\" | \"char\"\n\n    dataset_dir = \"<SOME_PATH>/LJSpeech-1.1\"\n    dataset_name = f\"LJSpeech_{tokenizer}\"\n    meta_info = os.path.join(dataset_dir, \"metadata.csv\")\n    save_dir = str(files(\"f5_tts\").joinpath(\"../../\")) + f\"/data/{dataset_name}\"\n    print(f\"\\nPrepare for {dataset_name}, will save to {save_dir}\\n\")\n\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/train/datasets/prepare_wenetspeech4tts.py",
    "content": "# generate audio text map for WenetSpeech4TTS\n# evaluate for vocab size\n\nimport os\nimport sys\n\nsys.path.append(os.getcwd())\n\nimport json\nfrom concurrent.futures import ProcessPoolExecutor\nfrom importlib.resources import files\nfrom tqdm import tqdm\n\nimport torchaudio\nfrom datasets import Dataset\n\nfrom f5_tts.model.utils import convert_char_to_pinyin\n\n\ndef deal_with_sub_path_files(dataset_path, sub_path):\n    print(f\"Dealing with: {sub_path}\")\n\n    text_dir = os.path.join(dataset_path, sub_path, \"txts\")\n    audio_dir = os.path.join(dataset_path, sub_path, \"wavs\")\n    text_files = os.listdir(text_dir)\n\n    audio_paths, texts, durations = [], [], []\n    for text_file in tqdm(text_files):\n        with open(os.path.join(text_dir, text_file), \"r\", encoding=\"utf-8\") as file:\n            first_line = file.readline().split(\"\\t\")\n        audio_nm = first_line[0]\n        audio_path = os.path.join(audio_dir, audio_nm + \".wav\")\n        text = first_line[1].strip()\n\n        audio_paths.append(audio_path)\n\n        if tokenizer == \"pinyin\":\n            texts.extend(convert_char_to_pinyin([text], polyphone=polyphone))\n        elif tokenizer == \"char\":\n            texts.append(text)\n\n        audio, sample_rate = torchaudio.load(audio_path)\n        durations.append(audio.shape[-1] / sample_rate)\n\n    return audio_paths, texts, durations\n\n\ndef main():\n    assert tokenizer in [\"pinyin\", \"char\"]\n\n    audio_path_list, text_list, duration_list = [], [], []\n\n    executor = ProcessPoolExecutor(max_workers=max_workers)\n    futures = []\n    for dataset_path in dataset_paths:\n        sub_items = os.listdir(dataset_path)\n        sub_paths = [item for item in sub_items if os.path.isdir(os.path.join(dataset_path, item))]\n        for sub_path in sub_paths:\n            futures.append(executor.submit(deal_with_sub_path_files, dataset_path, sub_path))\n    for future in tqdm(futures, total=len(futures)):\n        audio_paths, texts, durations = future.result()\n        audio_path_list.extend(audio_paths)\n        text_list.extend(texts)\n        duration_list.extend(durations)\n    executor.shutdown()\n\n    if not os.path.exists(\"data\"):\n        os.makedirs(\"data\")\n\n    print(f\"\\nSaving to {save_dir} ...\")\n    dataset = Dataset.from_dict({\"audio_path\": audio_path_list, \"text\": text_list, \"duration\": duration_list})\n    dataset.save_to_disk(f\"{save_dir}/raw\", max_shard_size=\"2GB\")  # arrow format\n\n    with open(f\"{save_dir}/duration.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump(\n            {\"duration\": duration_list}, f, ensure_ascii=False\n        )  # dup a json separately saving duration in case for DynamicBatchSampler ease\n\n    print(\"\\nEvaluating vocab size (all characters and symbols / all phonemes) ...\")\n    text_vocab_set = set()\n    for text in tqdm(text_list):\n        text_vocab_set.update(list(text))\n\n    # add alphabets and symbols (optional, if plan to ft on de/fr etc.)\n    if tokenizer == \"pinyin\":\n        text_vocab_set.update([chr(i) for i in range(32, 127)] + [chr(i) for i in range(192, 256)])\n\n    with open(f\"{save_dir}/vocab.txt\", \"w\") as f:\n        for vocab in sorted(text_vocab_set):\n            f.write(vocab + \"\\n\")\n    print(f\"\\nFor {dataset_name}, sample count: {len(text_list)}\")\n    print(f\"For {dataset_name}, vocab size is: {len(text_vocab_set)}\\n\")\n\n\nif __name__ == \"__main__\":\n    max_workers = 32\n\n    tokenizer = \"pinyin\"  # \"pinyin\" | \"char\"\n    polyphone = True\n    dataset_choice = 1  # 1: Premium, 2: Standard, 3: Basic\n\n    dataset_name = (\n        [\"WenetSpeech4TTS_Premium\", \"WenetSpeech4TTS_Standard\", \"WenetSpeech4TTS_Basic\"][dataset_choice - 1]\n        + \"_\"\n        + tokenizer\n    )\n    dataset_paths = [\n        \"<SOME_PATH>/WenetSpeech4TTS/Basic\",\n        \"<SOME_PATH>/WenetSpeech4TTS/Standard\",\n        \"<SOME_PATH>/WenetSpeech4TTS/Premium\",\n    ][-dataset_choice:]\n    save_dir = str(files(\"f5_tts\").joinpath(\"../../\")) + f\"/data/{dataset_name}\"\n    print(f\"\\nChoose Dataset: {dataset_name}, will save to {save_dir}\\n\")\n\n    main()\n\n    # Results (if adding alphabets with accents and symbols):\n    # WenetSpeech4TTS       Basic     Standard     Premium\n    # samples count       3932473      1941220      407494\n    # pinyin vocab size      1349         1348        1344   (no polyphone)\n    #                           -            -        1459   (polyphone)\n    # char   vocab size      5264         5219        5042\n\n    # vocab size may be slightly different due to jieba tokenizer and pypinyin (e.g. way of polyphoneme)\n    # please be careful if using pretrained model, make sure the vocab.txt is same\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/train/finetune_cli.py",
    "content": "import argparse\nimport os\nimport shutil\n\nfrom cached_path import cached_path\nfrom f5_tts.model import CFM, UNetT, DiT, Trainer\nfrom f5_tts.model.utils import get_tokenizer\nfrom f5_tts.model.dataset import load_dataset\nfrom importlib.resources import files\n\n\n# -------------------------- Dataset Settings --------------------------- #\ntarget_sample_rate = 24000\nn_mel_channels = 100\nhop_length = 256\nwin_length = 1024\nn_fft = 1024\nmel_spec_type = \"vocos\"  # 'vocos' or 'bigvgan'\n\n\n# -------------------------- Argument Parsing --------------------------- #\ndef parse_args():\n    # batch_size_per_gpu = 1000 settting for gpu 8GB\n    # batch_size_per_gpu = 1600 settting for gpu 12GB\n    # batch_size_per_gpu = 2000 settting for gpu 16GB\n    # batch_size_per_gpu = 3200 settting for gpu 24GB\n\n    # num_warmup_updates = 300 for 5000 sample about 10 hours\n\n    # change save_per_updates , last_per_steps change this value what you need  ,\n\n    parser = argparse.ArgumentParser(description=\"Train CFM Model\")\n\n    parser.add_argument(\n        \"--exp_name\", type=str, default=\"F5TTS_Base\", choices=[\"F5TTS_Base\", \"E2TTS_Base\"], help=\"Experiment name\"\n    )\n    parser.add_argument(\"--dataset_name\", type=str, default=\"Emilia_ZH_EN\", help=\"Name of the dataset to use\")\n    parser.add_argument(\"--learning_rate\", type=float, default=1e-5, help=\"Learning rate for training\")\n    parser.add_argument(\"--batch_size_per_gpu\", type=int, default=3200, help=\"Batch size per GPU\")\n    parser.add_argument(\n        \"--batch_size_type\", type=str, default=\"frame\", choices=[\"frame\", \"sample\"], help=\"Batch size type\"\n    )\n    parser.add_argument(\"--max_samples\", type=int, default=64, help=\"Max sequences per batch\")\n    parser.add_argument(\"--grad_accumulation_steps\", type=int, default=1, help=\"Gradient accumulation steps\")\n    parser.add_argument(\"--max_grad_norm\", type=float, default=1.0, help=\"Max gradient norm for clipping\")\n    parser.add_argument(\"--epochs\", type=int, default=100, help=\"Number of training epochs\")\n    parser.add_argument(\"--num_warmup_updates\", type=int, default=300, help=\"Warmup steps\")\n    parser.add_argument(\"--save_per_updates\", type=int, default=10000, help=\"Save checkpoint every X steps\")\n    parser.add_argument(\"--last_per_steps\", type=int, default=50000, help=\"Save last checkpoint every X steps\")\n    parser.add_argument(\"--finetune\", type=bool, default=True, help=\"Use Finetune\")\n    parser.add_argument(\"--pretrain\", type=str, default=None, help=\"the path to the checkpoint\")\n    parser.add_argument(\n        \"--tokenizer\", type=str, default=\"pinyin\", choices=[\"pinyin\", \"char\", \"custom\"], help=\"Tokenizer type\"\n    )\n    parser.add_argument(\n        \"--tokenizer_path\",\n        type=str,\n        default=None,\n        help=\"Path to custom tokenizer vocab file (only used if tokenizer = 'custom')\",\n    )\n    parser.add_argument(\n        \"--log_samples\",\n        type=bool,\n        default=False,\n        help=\"Log inferenced samples per ckpt save steps\",\n    )\n    parser.add_argument(\"--logger\", type=str, default=None, choices=[\"wandb\", \"tensorboard\"], help=\"logger\")\n    parser.add_argument(\n        \"--bnb_optimizer\",\n        type=bool,\n        default=False,\n        help=\"Use 8-bit Adam optimizer from bitsandbytes\",\n    )\n\n    return parser.parse_args()\n\n\n# -------------------------- Training Settings -------------------------- #\n\n\ndef main():\n    args = parse_args()\n\n    checkpoint_path = str(files(\"f5_tts\").joinpath(f\"../../ckpts/{args.dataset_name}\"))\n\n    # Model parameters based on experiment name\n    if args.exp_name == \"F5TTS_Base\":\n        wandb_resume_id = None\n        model_cls = DiT\n        model_cfg = dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)\n        if args.finetune:\n            if args.pretrain is None:\n                ckpt_path = str(cached_path(\"hf://SWivid/F5-TTS/F5TTS_Base/model_1200000.pt\"))\n            else:\n                ckpt_path = args.pretrain\n    elif args.exp_name == \"E2TTS_Base\":\n        wandb_resume_id = None\n        model_cls = UNetT\n        model_cfg = dict(dim=1024, depth=24, heads=16, ff_mult=4)\n        if args.finetune:\n            if args.pretrain is None:\n                ckpt_path = str(cached_path(\"hf://SWivid/E2-TTS/E2TTS_Base/model_1200000.pt\"))\n            else:\n                ckpt_path = args.pretrain\n\n    if args.finetune:\n        if not os.path.isdir(checkpoint_path):\n            os.makedirs(checkpoint_path, exist_ok=True)\n\n        file_checkpoint = os.path.join(checkpoint_path, os.path.basename(ckpt_path))\n        if not os.path.isfile(file_checkpoint):\n            shutil.copy2(ckpt_path, file_checkpoint)\n            print(\"copy checkpoint for finetune\")\n\n    # Use the tokenizer and tokenizer_path provided in the command line arguments\n    tokenizer = args.tokenizer\n    if tokenizer == \"custom\":\n        if not args.tokenizer_path:\n            raise ValueError(\"Custom tokenizer selected, but no tokenizer_path provided.\")\n        tokenizer_path = args.tokenizer_path\n    else:\n        tokenizer_path = args.dataset_name\n\n    vocab_char_map, vocab_size = get_tokenizer(tokenizer_path, tokenizer)\n\n    print(\"\\nvocab : \", vocab_size)\n    print(\"\\nvocoder : \", mel_spec_type)\n\n    mel_spec_kwargs = dict(\n        n_fft=n_fft,\n        hop_length=hop_length,\n        win_length=win_length,\n        n_mel_channels=n_mel_channels,\n        target_sample_rate=target_sample_rate,\n        mel_spec_type=mel_spec_type,\n    )\n\n    model = CFM(\n        transformer=model_cls(**model_cfg, text_num_embeds=vocab_size, mel_dim=n_mel_channels),\n        mel_spec_kwargs=mel_spec_kwargs,\n        vocab_char_map=vocab_char_map,\n    )\n\n    trainer = Trainer(\n        model,\n        args.epochs,\n        args.learning_rate,\n        num_warmup_updates=args.num_warmup_updates,\n        save_per_updates=args.save_per_updates,\n        checkpoint_path=checkpoint_path,\n        batch_size=args.batch_size_per_gpu,\n        batch_size_type=args.batch_size_type,\n        max_samples=args.max_samples,\n        grad_accumulation_steps=args.grad_accumulation_steps,\n        max_grad_norm=args.max_grad_norm,\n        logger=args.logger,\n        wandb_project=args.dataset_name,\n        wandb_run_name=args.exp_name,\n        wandb_resume_id=wandb_resume_id,\n        log_samples=args.log_samples,\n        last_per_steps=args.last_per_steps,\n        bnb_optimizer=args.bnb_optimizer,\n    )\n\n    train_dataset = load_dataset(args.dataset_name, tokenizer, mel_spec_kwargs=mel_spec_kwargs)\n\n    trainer.train(\n        train_dataset,\n        resumable_with_seed=666,  # seed for shuffling dataset\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/train/finetune_gradio.py",
    "content": "import threading\nimport queue\nimport re\n\nimport gc\nimport json\nimport os\nimport platform\nimport psutil\nimport random\nimport signal\nimport shutil\nimport subprocess\nimport sys\nimport tempfile\nimport time\nfrom glob import glob\n\nimport click\nimport gradio as gr\nimport librosa\nimport numpy as np\nimport torch\nimport torchaudio\nfrom datasets import Dataset as Dataset_\nfrom datasets.arrow_writer import ArrowWriter\nfrom safetensors.torch import save_file\nfrom scipy.io import wavfile\nfrom cached_path import cached_path\nfrom f5_tts.api import F5TTS\nfrom f5_tts.model.utils import convert_char_to_pinyin\nfrom f5_tts.infer.utils_infer import transcribe\nfrom importlib.resources import files\n\n\ntraining_process = None\nsystem = platform.system()\npython_executable = sys.executable or \"python\"\ntts_api = None\nlast_checkpoint = \"\"\nlast_device = \"\"\nlast_ema = None\n\n\npath_data = str(files(\"f5_tts\").joinpath(\"../../data\"))\npath_project_ckpts = str(files(\"f5_tts\").joinpath(\"../../ckpts\"))\nfile_train = str(files(\"f5_tts\").joinpath(\"train/finetune_cli.py\"))\n\ndevice = \"cuda\" if torch.cuda.is_available() else \"mps\" if torch.backends.mps.is_available() else \"cpu\"\n\n\n# Save settings from a JSON file\ndef save_settings(\n    project_name,\n    exp_name,\n    learning_rate,\n    batch_size_per_gpu,\n    batch_size_type,\n    max_samples,\n    grad_accumulation_steps,\n    max_grad_norm,\n    epochs,\n    num_warmup_updates,\n    save_per_updates,\n    last_per_steps,\n    finetune,\n    file_checkpoint_train,\n    tokenizer_type,\n    tokenizer_file,\n    mixed_precision,\n    logger,\n    ch_8bit_adam,\n):\n    path_project = os.path.join(path_project_ckpts, project_name)\n    os.makedirs(path_project, exist_ok=True)\n    file_setting = os.path.join(path_project, \"setting.json\")\n\n    settings = {\n        \"exp_name\": exp_name,\n        \"learning_rate\": learning_rate,\n        \"batch_size_per_gpu\": batch_size_per_gpu,\n        \"batch_size_type\": batch_size_type,\n        \"max_samples\": max_samples,\n        \"grad_accumulation_steps\": grad_accumulation_steps,\n        \"max_grad_norm\": max_grad_norm,\n        \"epochs\": epochs,\n        \"num_warmup_updates\": num_warmup_updates,\n        \"save_per_updates\": save_per_updates,\n        \"last_per_steps\": last_per_steps,\n        \"finetune\": finetune,\n        \"file_checkpoint_train\": file_checkpoint_train,\n        \"tokenizer_type\": tokenizer_type,\n        \"tokenizer_file\": tokenizer_file,\n        \"mixed_precision\": mixed_precision,\n        \"logger\": logger,\n        \"bnb_optimizer\": ch_8bit_adam,\n    }\n    with open(file_setting, \"w\") as f:\n        json.dump(settings, f, indent=4)\n    return \"Settings saved!\"\n\n\n# Load settings from a JSON file\ndef load_settings(project_name):\n    project_name = project_name.replace(\"_pinyin\", \"\").replace(\"_char\", \"\")\n    path_project = os.path.join(path_project_ckpts, project_name)\n    file_setting = os.path.join(path_project, \"setting.json\")\n\n    if not os.path.isfile(file_setting):\n        settings = {\n            \"exp_name\": \"F5TTS_Base\",\n            \"learning_rate\": 1e-05,\n            \"batch_size_per_gpu\": 1000,\n            \"batch_size_type\": \"frame\",\n            \"max_samples\": 64,\n            \"grad_accumulation_steps\": 1,\n            \"max_grad_norm\": 1,\n            \"epochs\": 100,\n            \"num_warmup_updates\": 2,\n            \"save_per_updates\": 300,\n            \"last_per_steps\": 100,\n            \"finetune\": True,\n            \"file_checkpoint_train\": \"\",\n            \"tokenizer_type\": \"pinyin\",\n            \"tokenizer_file\": \"\",\n            \"mixed_precision\": \"none\",\n            \"logger\": \"wandb\",\n            \"bnb_optimizer\": False,\n        }\n        return (\n            settings[\"exp_name\"],\n            settings[\"learning_rate\"],\n            settings[\"batch_size_per_gpu\"],\n            settings[\"batch_size_type\"],\n            settings[\"max_samples\"],\n            settings[\"grad_accumulation_steps\"],\n            settings[\"max_grad_norm\"],\n            settings[\"epochs\"],\n            settings[\"num_warmup_updates\"],\n            settings[\"save_per_updates\"],\n            settings[\"last_per_steps\"],\n            settings[\"finetune\"],\n            settings[\"file_checkpoint_train\"],\n            settings[\"tokenizer_type\"],\n            settings[\"tokenizer_file\"],\n            settings[\"mixed_precision\"],\n            settings[\"logger\"],\n            settings[\"bnb_optimizer\"],\n        )\n\n    with open(file_setting, \"r\") as f:\n        settings = json.load(f)\n        if \"logger\" not in settings:\n            settings[\"logger\"] = \"wandb\"\n        if \"bnb_optimizer\" not in settings:\n            settings[\"bnb_optimizer\"] = False\n    return (\n        settings[\"exp_name\"],\n        settings[\"learning_rate\"],\n        settings[\"batch_size_per_gpu\"],\n        settings[\"batch_size_type\"],\n        settings[\"max_samples\"],\n        settings[\"grad_accumulation_steps\"],\n        settings[\"max_grad_norm\"],\n        settings[\"epochs\"],\n        settings[\"num_warmup_updates\"],\n        settings[\"save_per_updates\"],\n        settings[\"last_per_steps\"],\n        settings[\"finetune\"],\n        settings[\"file_checkpoint_train\"],\n        settings[\"tokenizer_type\"],\n        settings[\"tokenizer_file\"],\n        settings[\"mixed_precision\"],\n        settings[\"logger\"],\n        settings[\"bnb_optimizer\"],\n    )\n\n\n# Load metadata\ndef get_audio_duration(audio_path):\n    \"\"\"Calculate the duration mono of an audio file.\"\"\"\n    audio, sample_rate = torchaudio.load(audio_path)\n    return audio.shape[1] / sample_rate\n\n\ndef clear_text(text):\n    \"\"\"Clean and prepare text by lowering the case and stripping whitespace.\"\"\"\n    return text.lower().strip()\n\n\ndef get_rms(\n    y,\n    frame_length=2048,\n    hop_length=512,\n    pad_mode=\"constant\",\n):  # https://github.com/RVC-Boss/GPT-SoVITS/blob/main/tools/slicer2.py\n    padding = (int(frame_length // 2), int(frame_length // 2))\n    y = np.pad(y, padding, mode=pad_mode)\n\n    axis = -1\n    # put our new within-frame axis at the end for now\n    out_strides = y.strides + tuple([y.strides[axis]])\n    # Reduce the shape on the framing axis\n    x_shape_trimmed = list(y.shape)\n    x_shape_trimmed[axis] -= frame_length - 1\n    out_shape = tuple(x_shape_trimmed) + tuple([frame_length])\n    xw = np.lib.stride_tricks.as_strided(y, shape=out_shape, strides=out_strides)\n    if axis < 0:\n        target_axis = axis - 1\n    else:\n        target_axis = axis + 1\n    xw = np.moveaxis(xw, -1, target_axis)\n    # Downsample along the target axis\n    slices = [slice(None)] * xw.ndim\n    slices[axis] = slice(0, None, hop_length)\n    x = xw[tuple(slices)]\n\n    # Calculate power\n    power = np.mean(np.abs(x) ** 2, axis=-2, keepdims=True)\n\n    return np.sqrt(power)\n\n\nclass Slicer:  # https://github.com/RVC-Boss/GPT-SoVITS/blob/main/tools/slicer2.py\n    def __init__(\n        self,\n        sr: int,\n        threshold: float = -40.0,\n        min_length: int = 2000,\n        min_interval: int = 300,\n        hop_size: int = 20,\n        max_sil_kept: int = 2000,\n    ):\n        if not min_length >= min_interval >= hop_size:\n            raise ValueError(\"The following condition must be satisfied: min_length >= min_interval >= hop_size\")\n        if not max_sil_kept >= hop_size:\n            raise ValueError(\"The following condition must be satisfied: max_sil_kept >= hop_size\")\n        min_interval = sr * min_interval / 1000\n        self.threshold = 10 ** (threshold / 20.0)\n        self.hop_size = round(sr * hop_size / 1000)\n        self.win_size = min(round(min_interval), 4 * self.hop_size)\n        self.min_length = round(sr * min_length / 1000 / self.hop_size)\n        self.min_interval = round(min_interval / self.hop_size)\n        self.max_sil_kept = round(sr * max_sil_kept / 1000 / self.hop_size)\n\n    def _apply_slice(self, waveform, begin, end):\n        if len(waveform.shape) > 1:\n            return waveform[:, begin * self.hop_size : min(waveform.shape[1], end * self.hop_size)]\n        else:\n            return waveform[begin * self.hop_size : min(waveform.shape[0], end * self.hop_size)]\n\n    # @timeit\n    def slice(self, waveform):\n        if len(waveform.shape) > 1:\n            samples = waveform.mean(axis=0)\n        else:\n            samples = waveform\n        if samples.shape[0] <= self.min_length:\n            return [waveform]\n        rms_list = get_rms(y=samples, frame_length=self.win_size, hop_length=self.hop_size).squeeze(0)\n        sil_tags = []\n        silence_start = None\n        clip_start = 0\n        for i, rms in enumerate(rms_list):\n            # Keep looping while frame is silent.\n            if rms < self.threshold:\n                # Record start of silent frames.\n                if silence_start is None:\n                    silence_start = i\n                continue\n            # Keep looping while frame is not silent and silence start has not been recorded.\n            if silence_start is None:\n                continue\n            # Clear recorded silence start if interval is not enough or clip is too short\n            is_leading_silence = silence_start == 0 and i > self.max_sil_kept\n            need_slice_middle = i - silence_start >= self.min_interval and i - clip_start >= self.min_length\n            if not is_leading_silence and not need_slice_middle:\n                silence_start = None\n                continue\n            # Need slicing. Record the range of silent frames to be removed.\n            if i - silence_start <= self.max_sil_kept:\n                pos = rms_list[silence_start : i + 1].argmin() + silence_start\n                if silence_start == 0:\n                    sil_tags.append((0, pos))\n                else:\n                    sil_tags.append((pos, pos))\n                clip_start = pos\n            elif i - silence_start <= self.max_sil_kept * 2:\n                pos = rms_list[i - self.max_sil_kept : silence_start + self.max_sil_kept + 1].argmin()\n                pos += i - self.max_sil_kept\n                pos_l = rms_list[silence_start : silence_start + self.max_sil_kept + 1].argmin() + silence_start\n                pos_r = rms_list[i - self.max_sil_kept : i + 1].argmin() + i - self.max_sil_kept\n                if silence_start == 0:\n                    sil_tags.append((0, pos_r))\n                    clip_start = pos_r\n                else:\n                    sil_tags.append((min(pos_l, pos), max(pos_r, pos)))\n                    clip_start = max(pos_r, pos)\n            else:\n                pos_l = rms_list[silence_start : silence_start + self.max_sil_kept + 1].argmin() + silence_start\n                pos_r = rms_list[i - self.max_sil_kept : i + 1].argmin() + i - self.max_sil_kept\n                if silence_start == 0:\n                    sil_tags.append((0, pos_r))\n                else:\n                    sil_tags.append((pos_l, pos_r))\n                clip_start = pos_r\n            silence_start = None\n        # Deal with trailing silence.\n        total_frames = rms_list.shape[0]\n        if silence_start is not None and total_frames - silence_start >= self.min_interval:\n            silence_end = min(total_frames, silence_start + self.max_sil_kept)\n            pos = rms_list[silence_start : silence_end + 1].argmin() + silence_start\n            sil_tags.append((pos, total_frames + 1))\n        # Apply and return slices.\n        ####音频+起始时间+终止时间\n        if len(sil_tags) == 0:\n            return [[waveform, 0, int(total_frames * self.hop_size)]]\n        else:\n            chunks = []\n            if sil_tags[0][0] > 0:\n                chunks.append([self._apply_slice(waveform, 0, sil_tags[0][0]), 0, int(sil_tags[0][0] * self.hop_size)])\n            for i in range(len(sil_tags) - 1):\n                chunks.append(\n                    [\n                        self._apply_slice(waveform, sil_tags[i][1], sil_tags[i + 1][0]),\n                        int(sil_tags[i][1] * self.hop_size),\n                        int(sil_tags[i + 1][0] * self.hop_size),\n                    ]\n                )\n            if sil_tags[-1][1] < total_frames:\n                chunks.append(\n                    [\n                        self._apply_slice(waveform, sil_tags[-1][1], total_frames),\n                        int(sil_tags[-1][1] * self.hop_size),\n                        int(total_frames * self.hop_size),\n                    ]\n                )\n            return chunks\n\n\n# terminal\ndef terminate_process_tree(pid, including_parent=True):\n    try:\n        parent = psutil.Process(pid)\n    except psutil.NoSuchProcess:\n        # Process already terminated\n        return\n\n    children = parent.children(recursive=True)\n    for child in children:\n        try:\n            os.kill(child.pid, signal.SIGTERM)  # or signal.SIGKILL\n        except OSError:\n            pass\n    if including_parent:\n        try:\n            os.kill(parent.pid, signal.SIGTERM)  # or signal.SIGKILL\n        except OSError:\n            pass\n\n\ndef terminate_process(pid):\n    if system == \"Windows\":\n        cmd = f\"taskkill /t /f /pid {pid}\"\n        os.system(cmd)\n    else:\n        terminate_process_tree(pid)\n\n\ndef start_training(\n    dataset_name=\"\",\n    exp_name=\"F5TTS_Base\",\n    learning_rate=1e-4,\n    batch_size_per_gpu=400,\n    batch_size_type=\"frame\",\n    max_samples=64,\n    grad_accumulation_steps=1,\n    max_grad_norm=1.0,\n    epochs=11,\n    num_warmup_updates=200,\n    save_per_updates=400,\n    last_per_steps=800,\n    finetune=True,\n    file_checkpoint_train=\"\",\n    tokenizer_type=\"pinyin\",\n    tokenizer_file=\"\",\n    mixed_precision=\"fp16\",\n    stream=False,\n    logger=\"wandb\",\n    ch_8bit_adam=False,\n):\n    global training_process, tts_api, stop_signal\n\n    if tts_api is not None:\n        if tts_api is not None:\n            del tts_api\n\n        gc.collect()\n        torch.cuda.empty_cache()\n        tts_api = None\n\n    path_project = os.path.join(path_data, dataset_name)\n\n    if not os.path.isdir(path_project):\n        yield (\n            f\"There is not project with name {dataset_name}\",\n            gr.update(interactive=True),\n            gr.update(interactive=False),\n        )\n        return\n\n    file_raw = os.path.join(path_project, \"raw.arrow\")\n    if not os.path.isfile(file_raw):\n        yield f\"There is no file {file_raw}\", gr.update(interactive=True), gr.update(interactive=False)\n        return\n\n    # Check if a training process is already running\n    if training_process is not None:\n        return \"Train run already!\", gr.update(interactive=False), gr.update(interactive=True)\n\n    yield \"start train\", gr.update(interactive=False), gr.update(interactive=False)\n\n    # Command to run the training script with the specified arguments\n\n    if tokenizer_file == \"\":\n        if dataset_name.endswith(\"_pinyin\"):\n            tokenizer_type = \"pinyin\"\n        elif dataset_name.endswith(\"_char\"):\n            tokenizer_type = \"char\"\n    else:\n        tokenizer_type = \"custom\"\n\n    dataset_name = dataset_name.replace(\"_pinyin\", \"\").replace(\"_char\", \"\")\n\n    if mixed_precision != \"none\":\n        fp16 = f\"--mixed_precision={mixed_precision}\"\n    else:\n        fp16 = \"\"\n\n    cmd = (\n        f\"accelerate launch {fp16} {file_train} --exp_name {exp_name} \"\n        f\"--learning_rate {learning_rate} \"\n        f\"--batch_size_per_gpu {batch_size_per_gpu} \"\n        f\"--batch_size_type {batch_size_type} \"\n        f\"--max_samples {max_samples} \"\n        f\"--grad_accumulation_steps {grad_accumulation_steps} \"\n        f\"--max_grad_norm {max_grad_norm} \"\n        f\"--epochs {epochs} \"\n        f\"--num_warmup_updates {num_warmup_updates} \"\n        f\"--save_per_updates {save_per_updates} \"\n        f\"--last_per_steps {last_per_steps} \"\n        f\"--dataset_name {dataset_name}\"\n    )\n\n    cmd += f\" --finetune {finetune}\"\n\n    if file_checkpoint_train != \"\":\n        cmd += f\" --pretrain {file_checkpoint_train}\"\n\n    if tokenizer_file != \"\":\n        cmd += f\" --tokenizer_path {tokenizer_file}\"\n\n    cmd += f\" --tokenizer {tokenizer_type} \"\n\n    cmd += f\" --log_samples True --logger {logger} \"\n\n    if ch_8bit_adam:\n        cmd += \" --bnb_optimizer True \"\n\n    print(\"run command : \\n\" + cmd + \"\\n\")\n\n    save_settings(\n        dataset_name,\n        exp_name,\n        learning_rate,\n        batch_size_per_gpu,\n        batch_size_type,\n        max_samples,\n        grad_accumulation_steps,\n        max_grad_norm,\n        epochs,\n        num_warmup_updates,\n        save_per_updates,\n        last_per_steps,\n        finetune,\n        file_checkpoint_train,\n        tokenizer_type,\n        tokenizer_file,\n        mixed_precision,\n        logger,\n        ch_8bit_adam,\n    )\n\n    try:\n        if not stream:\n            # Start the training process\n            training_process = subprocess.Popen(cmd, shell=True)\n\n            time.sleep(5)\n            yield \"train start\", gr.update(interactive=False), gr.update(interactive=True)\n\n            # Wait for the training process to finish\n            training_process.wait()\n        else:\n\n            def stream_output(pipe, output_queue):\n                try:\n                    for line in iter(pipe.readline, \"\"):\n                        output_queue.put(line)\n                except Exception as e:\n                    output_queue.put(f\"Error reading pipe: {str(e)}\")\n                finally:\n                    pipe.close()\n\n            env = os.environ.copy()\n            env[\"PYTHONUNBUFFERED\"] = \"1\"\n\n            training_process = subprocess.Popen(\n                cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, bufsize=1, env=env\n            )\n            yield \"Training started...\", gr.update(interactive=False), gr.update(interactive=True)\n\n            stdout_queue = queue.Queue()\n            stderr_queue = queue.Queue()\n\n            stdout_thread = threading.Thread(target=stream_output, args=(training_process.stdout, stdout_queue))\n            stderr_thread = threading.Thread(target=stream_output, args=(training_process.stderr, stderr_queue))\n            stdout_thread.daemon = True\n            stderr_thread.daemon = True\n            stdout_thread.start()\n            stderr_thread.start()\n            stop_signal = False\n            while True:\n                if stop_signal:\n                    training_process.terminate()\n                    time.sleep(0.5)\n                    if training_process.poll() is None:\n                        training_process.kill()\n                    yield \"Training stopped by user.\", gr.update(interactive=True), gr.update(interactive=False)\n                    break\n\n                process_status = training_process.poll()\n\n                # Handle stdout\n                try:\n                    while True:\n                        output = stdout_queue.get_nowait()\n                        print(output, end=\"\")\n                        match = re.search(\n                            r\"Epoch (\\d+)/(\\d+):\\s+(\\d+)%\\|.*\\[(\\d+:\\d+)<.*?loss=(\\d+\\.\\d+), step=(\\d+)\", output\n                        )\n                        if match:\n                            current_epoch = match.group(1)\n                            total_epochs = match.group(2)\n                            percent_complete = match.group(3)\n                            elapsed_time = match.group(4)\n                            loss = match.group(5)\n                            current_step = match.group(6)\n                            message = (\n                                f\"Epoch: {current_epoch}/{total_epochs}, \"\n                                f\"Progress: {percent_complete}%, \"\n                                f\"Elapsed Time: {elapsed_time}, \"\n                                f\"Loss: {loss}, \"\n                                f\"Step: {current_step}\"\n                            )\n                            yield message, gr.update(interactive=False), gr.update(interactive=True)\n                        elif output.strip():\n                            yield output, gr.update(interactive=False), gr.update(interactive=True)\n                except queue.Empty:\n                    pass\n\n                # Handle stderr\n                try:\n                    while True:\n                        error_output = stderr_queue.get_nowait()\n                        print(error_output, end=\"\")\n                        if error_output.strip():\n                            yield f\"{error_output.strip()}\", gr.update(interactive=False), gr.update(interactive=True)\n                except queue.Empty:\n                    pass\n\n                if process_status is not None and stdout_queue.empty() and stderr_queue.empty():\n                    if process_status != 0:\n                        yield (\n                            f\"Process crashed with exit code {process_status}!\",\n                            gr.update(interactive=False),\n                            gr.update(interactive=True),\n                        )\n                    else:\n                        yield \"Training complete!\", gr.update(interactive=False), gr.update(interactive=True)\n                    break\n\n                # Small sleep to prevent CPU thrashing\n                time.sleep(0.1)\n\n            # Clean up\n            training_process.stdout.close()\n            training_process.stderr.close()\n            training_process.wait()\n\n        time.sleep(1)\n\n        if training_process is None:\n            text_info = \"train stop\"\n        else:\n            text_info = \"train complete !\"\n\n    except Exception as e:  # Catch all exceptions\n        # Ensure that we reset the training process variable in case of an error\n        text_info = f\"An error occurred: {str(e)}\"\n\n    training_process = None\n\n    yield text_info, gr.update(interactive=True), gr.update(interactive=False)\n\n\ndef stop_training():\n    global training_process, stop_signal\n\n    if training_process is None:\n        return \"Train not run !\", gr.update(interactive=True), gr.update(interactive=False)\n    terminate_process_tree(training_process.pid)\n    # training_process = None\n    stop_signal = True\n    return \"train stop\", gr.update(interactive=True), gr.update(interactive=False)\n\n\ndef get_list_projects():\n    project_list = []\n    for folder in os.listdir(path_data):\n        path_folder = os.path.join(path_data, folder)\n        if not os.path.isdir(path_folder):\n            continue\n        folder = folder.lower()\n        if folder == \"emilia_zh_en_pinyin\":\n            continue\n        project_list.append(folder)\n\n    projects_selelect = None if not project_list else project_list[-1]\n\n    return project_list, projects_selelect\n\n\ndef create_data_project(name, tokenizer_type):\n    name += \"_\" + tokenizer_type\n    os.makedirs(os.path.join(path_data, name), exist_ok=True)\n    os.makedirs(os.path.join(path_data, name, \"dataset\"), exist_ok=True)\n    project_list, projects_selelect = get_list_projects()\n    return gr.update(choices=project_list, value=name)\n\n\ndef transcribe_all(name_project, audio_files, language, user=False, progress=gr.Progress()):\n    path_project = os.path.join(path_data, name_project)\n    path_dataset = os.path.join(path_project, \"dataset\")\n    path_project_wavs = os.path.join(path_project, \"wavs\")\n    file_metadata = os.path.join(path_project, \"metadata.csv\")\n\n    if not user:\n        if audio_files is None:\n            return \"You need to load an audio file.\"\n\n    if os.path.isdir(path_project_wavs):\n        shutil.rmtree(path_project_wavs)\n\n    if os.path.isfile(file_metadata):\n        os.remove(file_metadata)\n\n    os.makedirs(path_project_wavs, exist_ok=True)\n\n    if user:\n        file_audios = [\n            file\n            for format in (\"*.wav\", \"*.ogg\", \"*.opus\", \"*.mp3\", \"*.flac\")\n            for file in glob(os.path.join(path_dataset, format))\n        ]\n        if file_audios == []:\n            return \"No audio file was found in the dataset.\"\n    else:\n        file_audios = audio_files\n\n    alpha = 0.5\n    _max = 1.0\n    slicer = Slicer(24000)\n\n    num = 0\n    error_num = 0\n    data = \"\"\n    for file_audio in progress.tqdm(file_audios, desc=\"transcribe files\", total=len((file_audios))):\n        audio, _ = librosa.load(file_audio, sr=24000, mono=True)\n\n        list_slicer = slicer.slice(audio)\n        for chunk, start, end in progress.tqdm(list_slicer, total=len(list_slicer), desc=\"slicer files\"):\n            name_segment = os.path.join(f\"segment_{num}\")\n            file_segment = os.path.join(path_project_wavs, f\"{name_segment}.wav\")\n\n            tmp_max = np.abs(chunk).max()\n            if tmp_max > 1:\n                chunk /= tmp_max\n            chunk = (chunk / tmp_max * (_max * alpha)) + (1 - alpha) * chunk\n            wavfile.write(file_segment, 24000, (chunk * 32767).astype(np.int16))\n\n            try:\n                text = transcribe(file_segment, language)\n                text = text.lower().strip().replace('\"', \"\")\n\n                data += f\"{name_segment}|{text}\\n\"\n\n                num += 1\n            except:  # noqa: E722\n                error_num += 1\n\n    with open(file_metadata, \"w\", encoding=\"utf-8-sig\") as f:\n        f.write(data)\n\n    if error_num != []:\n        error_text = f\"\\nerror files : {error_num}\"\n    else:\n        error_text = \"\"\n\n    return f\"transcribe complete samples : {num}\\npath : {path_project_wavs}{error_text}\"\n\n\ndef format_seconds_to_hms(seconds):\n    hours = int(seconds / 3600)\n    minutes = int((seconds % 3600) / 60)\n    seconds = seconds % 60\n    return \"{:02d}:{:02d}:{:02d}\".format(hours, minutes, int(seconds))\n\n\ndef get_correct_audio_path(\n    audio_input,\n    base_path=\"wavs\",\n    supported_formats=(\"wav\", \"mp3\", \"aac\", \"flac\", \"m4a\", \"alac\", \"ogg\", \"aiff\", \"wma\", \"amr\"),\n):\n    file_audio = None\n\n    # Helper function to check if file has a supported extension\n    def has_supported_extension(file_name):\n        return any(file_name.endswith(f\".{ext}\") for ext in supported_formats)\n\n    # Case 1: If it's a full path with a valid extension, use it directly\n    if os.path.isabs(audio_input) and has_supported_extension(audio_input):\n        file_audio = audio_input\n\n    # Case 2: If it has a supported extension but is not a full path\n    elif has_supported_extension(audio_input) and not os.path.isabs(audio_input):\n        file_audio = os.path.join(base_path, audio_input)\n\n    # Case 3: If only the name is given (no extension and not a full path)\n    elif not has_supported_extension(audio_input) and not os.path.isabs(audio_input):\n        for ext in supported_formats:\n            potential_file = os.path.join(base_path, f\"{audio_input}.{ext}\")\n            if os.path.exists(potential_file):\n                file_audio = potential_file\n                break\n        else:\n            file_audio = os.path.join(base_path, f\"{audio_input}.{supported_formats[0]}\")\n    return file_audio\n\n\ndef create_metadata(name_project, ch_tokenizer, progress=gr.Progress()):\n    path_project = os.path.join(path_data, name_project)\n    path_project_wavs = os.path.join(path_project, \"wavs\")\n    file_metadata = os.path.join(path_project, \"metadata.csv\")\n    file_raw = os.path.join(path_project, \"raw.arrow\")\n    file_duration = os.path.join(path_project, \"duration.json\")\n    file_vocab = os.path.join(path_project, \"vocab.txt\")\n\n    if not os.path.isfile(file_metadata):\n        return \"The file was not found in \" + file_metadata, \"\"\n\n    with open(file_metadata, \"r\", encoding=\"utf-8-sig\") as f:\n        data = f.read()\n\n    audio_path_list = []\n    text_list = []\n    duration_list = []\n\n    count = data.split(\"\\n\")\n    lenght = 0\n    result = []\n    error_files = []\n    text_vocab_set = set()\n    for line in progress.tqdm(data.split(\"\\n\"), total=count):\n        sp_line = line.split(\"|\")\n        if len(sp_line) != 2:\n            continue\n        name_audio, text = sp_line[:2]\n\n        file_audio = get_correct_audio_path(name_audio, path_project_wavs)\n\n        if not os.path.isfile(file_audio):\n            error_files.append([file_audio, \"error path\"])\n            continue\n\n        try:\n            duration = get_audio_duration(file_audio)\n        except Exception as e:\n            error_files.append([file_audio, \"duration\"])\n            print(f\"Error processing {file_audio}: {e}\")\n            continue\n\n        if duration < 1 or duration > 25:\n            if duration > 25:\n                error_files.append([file_audio, \"duration > 25 sec\"])\n            if duration < 1:\n                error_files.append([file_audio, \"duration < 1 sec \"])\n            continue\n        if len(text) < 3:\n            error_files.append([file_audio, \"very small text len 3\"])\n            continue\n\n        text = clear_text(text)\n        text = convert_char_to_pinyin([text], polyphone=True)[0]\n\n        audio_path_list.append(file_audio)\n        duration_list.append(duration)\n        text_list.append(text)\n\n        result.append({\"audio_path\": file_audio, \"text\": text, \"duration\": duration})\n        if ch_tokenizer:\n            text_vocab_set.update(list(text))\n\n        lenght += duration\n\n    if duration_list == []:\n        return f\"Error: No audio files found in the specified path : {path_project_wavs}\", \"\"\n\n    min_second = round(min(duration_list), 2)\n    max_second = round(max(duration_list), 2)\n\n    with ArrowWriter(path=file_raw, writer_batch_size=1) as writer:\n        for line in progress.tqdm(result, total=len(result), desc=\"prepare data\"):\n            writer.write(line)\n\n    with open(file_duration, \"w\") as f:\n        json.dump({\"duration\": duration_list}, f, ensure_ascii=False)\n\n    new_vocal = \"\"\n    if not ch_tokenizer:\n        if not os.path.isfile(file_vocab):\n            file_vocab_finetune = os.path.join(path_data, \"Emilia_ZH_EN_pinyin/vocab.txt\")\n            if not os.path.isfile(file_vocab_finetune):\n                return \"Error: Vocabulary file 'Emilia_ZH_EN_pinyin' not found!\", \"\"\n            shutil.copy2(file_vocab_finetune, file_vocab)\n\n        with open(file_vocab, \"r\", encoding=\"utf-8-sig\") as f:\n            vocab_char_map = {}\n            for i, char in enumerate(f):\n                vocab_char_map[char[:-1]] = i\n        vocab_size = len(vocab_char_map)\n\n    else:\n        with open(file_vocab, \"w\", encoding=\"utf-8-sig\") as f:\n            for vocab in sorted(text_vocab_set):\n                f.write(vocab + \"\\n\")\n                new_vocal += vocab + \"\\n\"\n        vocab_size = len(text_vocab_set)\n\n    if error_files != []:\n        error_text = \"\\n\".join([\" = \".join(item) for item in error_files])\n    else:\n        error_text = \"\"\n\n    return (\n        f\"prepare complete \\nsamples : {len(text_list)}\\ntime data : {format_seconds_to_hms(lenght)}\\nmin sec : {min_second}\\nmax sec : {max_second}\\nfile_arrow : {file_raw}\\nvocab : {vocab_size}\\n{error_text}\",\n        new_vocal,\n    )\n\n\ndef check_user(value):\n    return gr.update(visible=not value), gr.update(visible=value)\n\n\ndef calculate_train(\n    name_project,\n    batch_size_type,\n    max_samples,\n    learning_rate,\n    num_warmup_updates,\n    save_per_updates,\n    last_per_steps,\n    finetune,\n):\n    path_project = os.path.join(path_data, name_project)\n    file_duraction = os.path.join(path_project, \"duration.json\")\n\n    if not os.path.isfile(file_duraction):\n        return (\n            1000,\n            max_samples,\n            num_warmup_updates,\n            save_per_updates,\n            last_per_steps,\n            \"project not found !\",\n            learning_rate,\n        )\n\n    with open(file_duraction, \"r\") as file:\n        data = json.load(file)\n\n    duration_list = data[\"duration\"]\n    samples = len(duration_list)\n    hours = sum(duration_list) / 3600\n\n    # if torch.cuda.is_available():\n    # gpu_properties = torch.cuda.get_device_properties(0)\n    # total_memory = gpu_properties.total_memory / (1024**3)\n    # elif torch.backends.mps.is_available():\n    # total_memory = psutil.virtual_memory().available / (1024**3)\n\n    if torch.cuda.is_available():\n        gpu_count = torch.cuda.device_count()\n        total_memory = 0\n        for i in range(gpu_count):\n            gpu_properties = torch.cuda.get_device_properties(i)\n            total_memory += gpu_properties.total_memory / (1024**3)  # in GB\n\n    elif torch.backends.mps.is_available():\n        gpu_count = 1\n        total_memory = psutil.virtual_memory().available / (1024**3)\n\n    if batch_size_type == \"frame\":\n        batch = int(total_memory * 0.5)\n        batch = (lambda num: num + 1 if num % 2 != 0 else num)(batch)\n        batch_size_per_gpu = int(38400 / batch)\n    else:\n        batch_size_per_gpu = int(total_memory / 8)\n        batch_size_per_gpu = (lambda num: num + 1 if num % 2 != 0 else num)(batch_size_per_gpu)\n        batch = batch_size_per_gpu\n\n    if batch_size_per_gpu <= 0:\n        batch_size_per_gpu = 1\n\n    if samples < 64:\n        max_samples = int(samples * 0.25)\n    else:\n        max_samples = 64\n\n    num_warmup_updates = int(samples * 0.05)\n    save_per_updates = int(samples * 0.10)\n    last_per_steps = int(save_per_updates * 0.25)\n\n    max_samples = (lambda num: num + 1 if num % 2 != 0 else num)(max_samples)\n    num_warmup_updates = (lambda num: num + 1 if num % 2 != 0 else num)(num_warmup_updates)\n    save_per_updates = (lambda num: num + 1 if num % 2 != 0 else num)(save_per_updates)\n    last_per_steps = (lambda num: num + 1 if num % 2 != 0 else num)(last_per_steps)\n    if last_per_steps <= 0:\n        last_per_steps = 2\n\n    total_hours = hours\n    mel_hop_length = 256\n    mel_sampling_rate = 24000\n\n    # target\n    wanted_max_updates = 1000000\n\n    # train params\n    gpus = gpu_count\n    frames_per_gpu = batch_size_per_gpu  # 8 * 38400 = 307200\n    grad_accum = 1\n\n    # intermediate\n    mini_batch_frames = frames_per_gpu * grad_accum * gpus\n    mini_batch_hours = mini_batch_frames * mel_hop_length / mel_sampling_rate / 3600\n    updates_per_epoch = total_hours / mini_batch_hours\n    # steps_per_epoch = updates_per_epoch * grad_accum\n    epochs = wanted_max_updates / updates_per_epoch\n\n    if finetune:\n        learning_rate = 1e-5\n    else:\n        learning_rate = 7.5e-5\n\n    return (\n        batch_size_per_gpu,\n        max_samples,\n        num_warmup_updates,\n        save_per_updates,\n        last_per_steps,\n        samples,\n        learning_rate,\n        int(epochs),\n    )\n\n\ndef extract_and_save_ema_model(checkpoint_path: str, new_checkpoint_path: str, safetensors: bool) -> str:\n    try:\n        checkpoint = torch.load(checkpoint_path)\n        print(\"Original Checkpoint Keys:\", checkpoint.keys())\n\n        ema_model_state_dict = checkpoint.get(\"ema_model_state_dict\", None)\n        if ema_model_state_dict is None:\n            return \"No 'ema_model_state_dict' found in the checkpoint.\"\n\n        if safetensors:\n            new_checkpoint_path = new_checkpoint_path.replace(\".pt\", \".safetensors\")\n            save_file(ema_model_state_dict, new_checkpoint_path)\n        else:\n            new_checkpoint_path = new_checkpoint_path.replace(\".safetensors\", \".pt\")\n            new_checkpoint = {\"ema_model_state_dict\": ema_model_state_dict}\n            torch.save(new_checkpoint, new_checkpoint_path)\n\n        return f\"New checkpoint saved at: {new_checkpoint_path}\"\n\n    except Exception as e:\n        return f\"An error occurred: {e}\"\n\n\ndef expand_model_embeddings(ckpt_path, new_ckpt_path, num_new_tokens=42):\n    seed = 666\n    random.seed(seed)\n    os.environ[\"PYTHONHASHSEED\"] = str(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = False\n\n    ckpt = torch.load(ckpt_path, map_location=\"cpu\")\n\n    ema_sd = ckpt.get(\"ema_model_state_dict\", {})\n    embed_key_ema = \"ema_model.transformer.text_embed.text_embed.weight\"\n    old_embed_ema = ema_sd[embed_key_ema]\n\n    vocab_old = old_embed_ema.size(0)\n    embed_dim = old_embed_ema.size(1)\n    vocab_new = vocab_old + num_new_tokens\n\n    def expand_embeddings(old_embeddings):\n        new_embeddings = torch.zeros((vocab_new, embed_dim))\n        new_embeddings[:vocab_old] = old_embeddings\n        new_embeddings[vocab_old:] = torch.randn((num_new_tokens, embed_dim))\n        return new_embeddings\n\n    ema_sd[embed_key_ema] = expand_embeddings(ema_sd[embed_key_ema])\n\n    torch.save(ckpt, new_ckpt_path)\n\n    return vocab_new\n\n\ndef vocab_count(text):\n    return str(len(text.split(\",\")))\n\n\ndef vocab_extend(project_name, symbols, model_type):\n    if symbols == \"\":\n        return \"Symbols empty!\"\n\n    name_project = project_name\n    path_project = os.path.join(path_data, name_project)\n    file_vocab_project = os.path.join(path_project, \"vocab.txt\")\n\n    file_vocab = os.path.join(path_data, \"Emilia_ZH_EN_pinyin/vocab.txt\")\n    if not os.path.isfile(file_vocab):\n        return f\"the file {file_vocab} not found !\"\n\n    symbols = symbols.split(\",\")\n    if symbols == []:\n        return \"Symbols to extend not found.\"\n\n    with open(file_vocab, \"r\", encoding=\"utf-8-sig\") as f:\n        data = f.read()\n        vocab = data.split(\"\\n\")\n    vocab_check = set(vocab)\n\n    miss_symbols = []\n    for item in symbols:\n        item = item.replace(\" \", \"\")\n        if item in vocab_check:\n            continue\n        miss_symbols.append(item)\n\n    if miss_symbols == []:\n        return \"Symbols are okay no need to extend.\"\n\n    size_vocab = len(vocab)\n    vocab.pop()\n    for item in miss_symbols:\n        vocab.append(item)\n\n    vocab.append(\"\")\n\n    with open(file_vocab_project, \"w\", encoding=\"utf-8\") as f:\n        f.write(\"\\n\".join(vocab))\n\n    if model_type == \"F5-TTS\":\n        ckpt_path = str(cached_path(\"hf://SWivid/F5-TTS/F5TTS_Base/model_1200000.pt\"))\n    else:\n        ckpt_path = str(cached_path(\"hf://SWivid/E2-TTS/E2TTS_Base/model_1200000.pt\"))\n\n    vocab_size_new = len(miss_symbols)\n\n    dataset_name = name_project.replace(\"_pinyin\", \"\").replace(\"_char\", \"\")\n    new_ckpt_path = os.path.join(path_project_ckpts, dataset_name)\n    os.makedirs(new_ckpt_path, exist_ok=True)\n    new_ckpt_file = os.path.join(new_ckpt_path, \"model_1200000.pt\")\n\n    size = expand_model_embeddings(ckpt_path, new_ckpt_file, num_new_tokens=vocab_size_new)\n\n    vocab_new = \"\\n\".join(miss_symbols)\n    return f\"vocab old size : {size_vocab}\\nvocab new size : {size}\\nvocab add : {vocab_size_new}\\nnew symbols :\\n{vocab_new}\"\n\n\ndef vocab_check(project_name):\n    name_project = project_name\n    path_project = os.path.join(path_data, name_project)\n\n    file_metadata = os.path.join(path_project, \"metadata.csv\")\n\n    file_vocab = os.path.join(path_data, \"Emilia_ZH_EN_pinyin/vocab.txt\")\n    if not os.path.isfile(file_vocab):\n        return f\"the file {file_vocab} not found !\", \"\"\n\n    with open(file_vocab, \"r\", encoding=\"utf-8-sig\") as f:\n        data = f.read()\n        vocab = data.split(\"\\n\")\n        vocab = set(vocab)\n\n    if not os.path.isfile(file_metadata):\n        return f\"the file {file_metadata} not found !\", \"\"\n\n    with open(file_metadata, \"r\", encoding=\"utf-8-sig\") as f:\n        data = f.read()\n\n    miss_symbols = []\n    miss_symbols_keep = {}\n    for item in data.split(\"\\n\"):\n        sp = item.split(\"|\")\n        if len(sp) != 2:\n            continue\n\n        text = sp[1].lower().strip()\n\n        for t in text:\n            if t not in vocab and t not in miss_symbols_keep:\n                miss_symbols.append(t)\n                miss_symbols_keep[t] = t\n\n    if miss_symbols == []:\n        vocab_miss = \"\"\n        info = \"You can train using your language !\"\n    else:\n        vocab_miss = \",\".join(miss_symbols)\n        info = f\"The following symbols are missing in your language {len(miss_symbols)}\\n\\n\"\n\n    return info, vocab_miss\n\n\ndef get_random_sample_prepare(project_name):\n    name_project = project_name\n    path_project = os.path.join(path_data, name_project)\n    file_arrow = os.path.join(path_project, \"raw.arrow\")\n    if not os.path.isfile(file_arrow):\n        return \"\", None\n    dataset = Dataset_.from_file(file_arrow)\n    random_sample = dataset.shuffle(seed=random.randint(0, 1000)).select([0])\n    text = \"[\" + \" , \".join([\"' \" + t + \" '\" for t in random_sample[\"text\"][0]]) + \"]\"\n    audio_path = random_sample[\"audio_path\"][0]\n    return text, audio_path\n\n\ndef get_random_sample_transcribe(project_name):\n    name_project = project_name\n    path_project = os.path.join(path_data, name_project)\n    file_metadata = os.path.join(path_project, \"metadata.csv\")\n    if not os.path.isfile(file_metadata):\n        return \"\", None\n\n    data = \"\"\n    with open(file_metadata, \"r\", encoding=\"utf-8-sig\") as f:\n        data = f.read()\n\n    list_data = []\n    for item in data.split(\"\\n\"):\n        sp = item.split(\"|\")\n        if len(sp) != 2:\n            continue\n\n        # fixed audio when it is absolute\n        file_audio = get_correct_audio_path(sp[0], os.path.join(path_project, \"wavs\"))\n        list_data.append([file_audio, sp[1]])\n\n    if list_data == []:\n        return \"\", None\n\n    random_item = random.choice(list_data)\n\n    return random_item[1], random_item[0]\n\n\ndef get_random_sample_infer(project_name):\n    text, audio = get_random_sample_transcribe(project_name)\n    return (\n        text,\n        text,\n        audio,\n    )\n\n\ndef infer(\n    project, file_checkpoint, exp_name, ref_text, ref_audio, gen_text, nfe_step, use_ema, speed, seed, remove_silence\n):\n    global last_checkpoint, last_device, tts_api, last_ema\n\n    if not os.path.isfile(file_checkpoint):\n        return None, \"checkpoint not found!\"\n\n    if training_process is not None:\n        device_test = \"cpu\"\n    else:\n        device_test = None\n\n    if last_checkpoint != file_checkpoint or last_device != device_test or last_ema != use_ema or tts_api is None:\n        if last_checkpoint != file_checkpoint:\n            last_checkpoint = file_checkpoint\n\n        if last_device != device_test:\n            last_device = device_test\n\n        if last_ema != use_ema:\n            last_ema = use_ema\n\n        vocab_file = os.path.join(path_data, project, \"vocab.txt\")\n\n        tts_api = F5TTS(\n            model_type=exp_name, ckpt_file=file_checkpoint, vocab_file=vocab_file, device=device_test, use_ema=use_ema\n        )\n\n        print(\"update >> \", device_test, file_checkpoint, use_ema)\n\n    with tempfile.NamedTemporaryFile(delete=False, suffix=\".wav\") as f:\n        tts_api.infer(\n            gen_text=gen_text.lower().strip(),\n            ref_text=ref_text.lower().strip(),\n            ref_file=ref_audio,\n            nfe_step=nfe_step,\n            file_wave=f.name,\n            speed=speed,\n            seed=seed,\n            remove_silence=remove_silence,\n        )\n        return f.name, tts_api.device, str(tts_api.seed)\n\n\ndef check_finetune(finetune):\n    return gr.update(interactive=finetune), gr.update(interactive=finetune), gr.update(interactive=finetune)\n\n\ndef get_checkpoints_project(project_name, is_gradio=True):\n    if project_name is None:\n        return [], \"\"\n    project_name = project_name.replace(\"_pinyin\", \"\").replace(\"_char\", \"\")\n\n    if os.path.isdir(path_project_ckpts):\n        files_checkpoints = glob(os.path.join(path_project_ckpts, project_name, \"*.pt\"))\n        files_checkpoints = sorted(\n            files_checkpoints,\n            key=lambda x: int(os.path.basename(x).split(\"_\")[1].split(\".\")[0])\n            if os.path.basename(x) != \"model_last.pt\"\n            else float(\"inf\"),\n        )\n    else:\n        files_checkpoints = []\n\n    selelect_checkpoint = None if not files_checkpoints else files_checkpoints[0]\n\n    if is_gradio:\n        return gr.update(choices=files_checkpoints, value=selelect_checkpoint)\n\n    return files_checkpoints, selelect_checkpoint\n\n\ndef get_audio_project(project_name, is_gradio=True):\n    if project_name is None:\n        return [], \"\"\n    project_name = project_name.replace(\"_pinyin\", \"\").replace(\"_char\", \"\")\n\n    if os.path.isdir(path_project_ckpts):\n        files_audios = glob(os.path.join(path_project_ckpts, project_name, \"samples\", \"*.wav\"))\n        files_audios = sorted(files_audios, key=lambda x: int(os.path.basename(x).split(\"_\")[1].split(\".\")[0]))\n\n        files_audios = [item.replace(\"_gen.wav\", \"\") for item in files_audios if item.endswith(\"_gen.wav\")]\n    else:\n        files_audios = []\n\n    selelect_checkpoint = None if not files_audios else files_audios[0]\n\n    if is_gradio:\n        return gr.update(choices=files_audios, value=selelect_checkpoint)\n\n    return files_audios, selelect_checkpoint\n\n\ndef get_gpu_stats():\n    gpu_stats = \"\"\n\n    if torch.cuda.is_available():\n        gpu_count = torch.cuda.device_count()\n        for i in range(gpu_count):\n            gpu_name = torch.cuda.get_device_name(i)\n            gpu_properties = torch.cuda.get_device_properties(i)\n            total_memory = gpu_properties.total_memory / (1024**3)  # in GB\n            allocated_memory = torch.cuda.memory_allocated(i) / (1024**2)  # in MB\n            reserved_memory = torch.cuda.memory_reserved(i) / (1024**2)  # in MB\n\n            gpu_stats += (\n                f\"GPU {i} Name: {gpu_name}\\n\"\n                f\"Total GPU memory (GPU {i}): {total_memory:.2f} GB\\n\"\n                f\"Allocated GPU memory (GPU {i}): {allocated_memory:.2f} MB\\n\"\n                f\"Reserved GPU memory (GPU {i}): {reserved_memory:.2f} MB\\n\\n\"\n            )\n\n    elif torch.backends.mps.is_available():\n        gpu_count = 1\n        gpu_stats += \"MPS GPU\\n\"\n        total_memory = psutil.virtual_memory().total / (\n            1024**3\n        )  # Total system memory (MPS doesn't have its own memory)\n        allocated_memory = 0\n        reserved_memory = 0\n\n        gpu_stats += (\n            f\"Total system memory: {total_memory:.2f} GB\\n\"\n            f\"Allocated GPU memory (MPS): {allocated_memory:.2f} MB\\n\"\n            f\"Reserved GPU memory (MPS): {reserved_memory:.2f} MB\\n\"\n        )\n\n    else:\n        gpu_stats = \"No GPU available\"\n\n    return gpu_stats\n\n\ndef get_cpu_stats():\n    cpu_usage = psutil.cpu_percent(interval=1)\n    memory_info = psutil.virtual_memory()\n    memory_used = memory_info.used / (1024**2)\n    memory_total = memory_info.total / (1024**2)\n    memory_percent = memory_info.percent\n\n    pid = os.getpid()\n    process = psutil.Process(pid)\n    nice_value = process.nice()\n\n    cpu_stats = (\n        f\"CPU Usage: {cpu_usage:.2f}%\\n\"\n        f\"System Memory: {memory_used:.2f} MB used / {memory_total:.2f} MB total ({memory_percent}% used)\\n\"\n        f\"Process Priority (Nice value): {nice_value}\"\n    )\n\n    return cpu_stats\n\n\ndef get_combined_stats():\n    gpu_stats = get_gpu_stats()\n    cpu_stats = get_cpu_stats()\n    combined_stats = f\"### GPU Stats\\n{gpu_stats}\\n\\n### CPU Stats\\n{cpu_stats}\"\n    return combined_stats\n\n\ndef get_audio_select(file_sample):\n    select_audio_ref = file_sample\n    select_audio_gen = file_sample\n\n    if file_sample is not None:\n        select_audio_ref += \"_ref.wav\"\n        select_audio_gen += \"_gen.wav\"\n\n    return select_audio_ref, select_audio_gen\n\n\nwith gr.Blocks() as app:\n    gr.Markdown(\n        \"\"\"\n# E2/F5 TTS Automatic Finetune\n\nThis is a local web UI for F5 TTS with advanced batch processing support. This app supports the following TTS models:\n\n* [F5-TTS](https://arxiv.org/abs/2410.06885) (A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching)\n* [E2 TTS](https://arxiv.org/abs/2406.18009) (Embarrassingly Easy Fully Non-Autoregressive Zero-Shot TTS)\n\nThe checkpoints support English and Chinese.\n\nFor tutorial and updates check here (https://github.com/SWivid/F5-TTS/discussions/143)\n\"\"\"\n    )\n\n    with gr.Row():\n        projects, projects_selelect = get_list_projects()\n        tokenizer_type = gr.Radio(label=\"Tokenizer Type\", choices=[\"pinyin\", \"char\", \"custom\"], value=\"pinyin\")\n        project_name = gr.Textbox(label=\"Project Name\", value=\"my_speak\")\n        bt_create = gr.Button(\"Create a New Project\")\n\n    with gr.Row():\n        cm_project = gr.Dropdown(\n            choices=projects, value=projects_selelect, label=\"Project\", allow_custom_value=True, scale=6\n        )\n        ch_refresh_project = gr.Button(\"Refresh\", scale=1)\n\n    bt_create.click(fn=create_data_project, inputs=[project_name, tokenizer_type], outputs=[cm_project])\n\n    with gr.Tabs():\n        with gr.TabItem(\"Transcribe Data\"):\n            gr.Markdown(\"\"\"```plaintext \nSkip this step if you have your dataset, metadata.csv, and a folder wavs with all the audio files.                 \n```\"\"\")\n\n            ch_manual = gr.Checkbox(label=\"Audio from Path\", value=False)\n\n            mark_info_transcribe = gr.Markdown(\n                \"\"\"```plaintext    \n     Place your 'wavs' folder and 'metadata.csv' file in the '{your_project_name}' directory. \n                 \n     my_speak/\n     │\n     └── dataset/\n         ├── audio1.wav\n         └── audio2.wav\n         ...\n     ```\"\"\",\n                visible=False,\n            )\n\n            audio_speaker = gr.File(label=\"Voice\", type=\"filepath\", file_count=\"multiple\")\n            txt_lang = gr.Text(label=\"Language\", value=\"English\")\n            bt_transcribe = bt_create = gr.Button(\"Transcribe\")\n            txt_info_transcribe = gr.Text(label=\"Info\", value=\"\")\n            bt_transcribe.click(\n                fn=transcribe_all,\n                inputs=[cm_project, audio_speaker, txt_lang, ch_manual],\n                outputs=[txt_info_transcribe],\n            )\n            ch_manual.change(fn=check_user, inputs=[ch_manual], outputs=[audio_speaker, mark_info_transcribe])\n\n            random_sample_transcribe = gr.Button(\"Random Sample\")\n\n            with gr.Row():\n                random_text_transcribe = gr.Text(label=\"Text\")\n                random_audio_transcribe = gr.Audio(label=\"Audio\", type=\"filepath\")\n\n            random_sample_transcribe.click(\n                fn=get_random_sample_transcribe,\n                inputs=[cm_project],\n                outputs=[random_text_transcribe, random_audio_transcribe],\n            )\n\n        with gr.TabItem(\"Vocab Check\"):\n            gr.Markdown(\"\"\"```plaintext \nCheck the vocabulary for fine-tuning Emilia_ZH_EN to ensure all symbols are included. For fine-tuning a new language.\n```\"\"\")\n\n            check_button = gr.Button(\"Check Vocab\")\n            txt_info_check = gr.Text(label=\"Info\", value=\"\")\n\n            gr.Markdown(\"\"\"```plaintext \nUsing the extended model, you can finetune to a new language that is missing symbols in the vocab. This creates a new model with a new vocabulary size and saves it in your ckpts/project folder.\n```\"\"\")\n\n            exp_name_extend = gr.Radio(label=\"Model\", choices=[\"F5-TTS\", \"E2-TTS\"], value=\"F5-TTS\")\n\n            with gr.Row():\n                txt_extend = gr.Textbox(\n                    label=\"Symbols\",\n                    value=\"\",\n                    placeholder=\"To add new symbols, make sure to use ',' for each symbol\",\n                    scale=6,\n                )\n                txt_count_symbol = gr.Textbox(label=\"New Vocab Size\", value=\"\", scale=1)\n\n            extend_button = gr.Button(\"Extend\")\n            txt_info_extend = gr.Text(label=\"Info\", value=\"\")\n\n            txt_extend.change(vocab_count, inputs=[txt_extend], outputs=[txt_count_symbol])\n            check_button.click(fn=vocab_check, inputs=[cm_project], outputs=[txt_info_check, txt_extend])\n            extend_button.click(\n                fn=vocab_extend, inputs=[cm_project, txt_extend, exp_name_extend], outputs=[txt_info_extend]\n            )\n\n        with gr.TabItem(\"Prepare Data\"):\n            gr.Markdown(\"\"\"```plaintext \nSkip this step if you have your dataset, raw.arrow, duration.json, and vocab.txt\n```\"\"\")\n\n            gr.Markdown(\n                \"\"\"```plaintext    \n     Place all your \"wavs\" folder and your \"metadata.csv\" file in your project name directory.\n\n     Supported audio formats: \"wav\", \"mp3\", \"aac\", \"flac\", \"m4a\", \"alac\", \"ogg\", \"aiff\", \"wma\", \"amr\"\n\n     Example wav format:                               \n     my_speak/\n     │\n     ├── wavs/\n     │   ├── audio1.wav\n     │   └── audio2.wav\n     |   ...\n     │\n     └── metadata.csv\n      \n     File format metadata.csv:\n\n     audio1|text1 or audio1.wav|text1 or your_path/audio1.wav|text1 \n     audio2|text1 or audio2.wav|text1 or your_path/audio2.wav|text1 \n     ...\n\n     ```\"\"\"\n            )\n            ch_tokenizern = gr.Checkbox(label=\"Create Vocabulary\", value=False, visible=False)\n\n            bt_prepare = bt_create = gr.Button(\"Prepare\")\n            txt_info_prepare = gr.Text(label=\"Info\", value=\"\")\n            txt_vocab_prepare = gr.Text(label=\"Vocab\", value=\"\")\n\n            bt_prepare.click(\n                fn=create_metadata, inputs=[cm_project, ch_tokenizern], outputs=[txt_info_prepare, txt_vocab_prepare]\n            )\n\n            random_sample_prepare = gr.Button(\"Random Sample\")\n\n            with gr.Row():\n                random_text_prepare = gr.Text(label=\"Tokenizer\")\n                random_audio_prepare = gr.Audio(label=\"Audio\", type=\"filepath\")\n\n            random_sample_prepare.click(\n                fn=get_random_sample_prepare, inputs=[cm_project], outputs=[random_text_prepare, random_audio_prepare]\n            )\n\n        with gr.TabItem(\"Train Data\"):\n            gr.Markdown(\"\"\"```plaintext \nThe auto-setting is still experimental. Please make sure that the epochs, save per updates, and last per steps are set correctly, or change them manually as needed.\nIf you encounter a memory error, try reducing the batch size per GPU to a smaller number.\n```\"\"\")\n            with gr.Row():\n                bt_calculate = bt_create = gr.Button(\"Auto Settings\")\n                lb_samples = gr.Label(label=\"Samples\")\n                batch_size_type = gr.Radio(label=\"Batch Size Type\", choices=[\"frame\", \"sample\"], value=\"frame\")\n\n            with gr.Row():\n                ch_finetune = bt_create = gr.Checkbox(label=\"Finetune\", value=True)\n                tokenizer_file = gr.Textbox(label=\"Tokenizer File\", value=\"\")\n                file_checkpoint_train = gr.Textbox(label=\"Path to the Pretrained Checkpoint\", value=\"\")\n\n            with gr.Row():\n                exp_name = gr.Radio(label=\"Model\", choices=[\"F5TTS_Base\", \"E2TTS_Base\"], value=\"F5TTS_Base\")\n                learning_rate = gr.Number(label=\"Learning Rate\", value=1e-5, step=1e-5)\n\n            with gr.Row():\n                batch_size_per_gpu = gr.Number(label=\"Batch Size per GPU\", value=1000)\n                max_samples = gr.Number(label=\"Max Samples\", value=64)\n\n            with gr.Row():\n                grad_accumulation_steps = gr.Number(label=\"Gradient Accumulation Steps\", value=1)\n                max_grad_norm = gr.Number(label=\"Max Gradient Norm\", value=1.0)\n\n            with gr.Row():\n                epochs = gr.Number(label=\"Epochs\", value=10)\n                num_warmup_updates = gr.Number(label=\"Warmup Updates\", value=2)\n\n            with gr.Row():\n                save_per_updates = gr.Number(label=\"Save per Updates\", value=300)\n                last_per_steps = gr.Number(label=\"Last per Steps\", value=100)\n\n            with gr.Row():\n                ch_8bit_adam = gr.Checkbox(label=\"Use 8-bit Adam optimizer\")\n                mixed_precision = gr.Radio(label=\"mixed_precision\", choices=[\"none\", \"fp16\", \"bf16\"], value=\"none\")\n                cd_logger = gr.Radio(label=\"logger\", choices=[\"wandb\", \"tensorboard\"], value=\"wandb\")\n                start_button = gr.Button(\"Start Training\")\n                stop_button = gr.Button(\"Stop Training\", interactive=False)\n\n            if projects_selelect is not None:\n                (\n                    exp_namev,\n                    learning_ratev,\n                    batch_size_per_gpuv,\n                    batch_size_typev,\n                    max_samplesv,\n                    grad_accumulation_stepsv,\n                    max_grad_normv,\n                    epochsv,\n                    num_warmupv_updatesv,\n                    save_per_updatesv,\n                    last_per_stepsv,\n                    finetunev,\n                    file_checkpoint_trainv,\n                    tokenizer_typev,\n                    tokenizer_filev,\n                    mixed_precisionv,\n                    cd_loggerv,\n                    ch_8bit_adamv,\n                ) = load_settings(projects_selelect)\n                exp_name.value = exp_namev\n                learning_rate.value = learning_ratev\n                batch_size_per_gpu.value = batch_size_per_gpuv\n                batch_size_type.value = batch_size_typev\n                max_samples.value = max_samplesv\n                grad_accumulation_steps.value = grad_accumulation_stepsv\n                max_grad_norm.value = max_grad_normv\n                epochs.value = epochsv\n                num_warmup_updates.value = num_warmupv_updatesv\n                save_per_updates.value = save_per_updatesv\n                last_per_steps.value = last_per_stepsv\n                ch_finetune.value = finetunev\n                file_checkpoint_train.value = file_checkpoint_trainv\n                tokenizer_type.value = tokenizer_typev\n                tokenizer_file.value = tokenizer_filev\n                mixed_precision.value = mixed_precisionv\n                cd_logger.value = cd_loggerv\n                ch_8bit_adam.value = ch_8bit_adamv\n\n            ch_stream = gr.Checkbox(label=\"Stream Output Experiment\", value=True)\n            txt_info_train = gr.Text(label=\"Info\", value=\"\")\n\n            list_audios, select_audio = get_audio_project(projects_selelect, False)\n\n            select_audio_ref = select_audio\n            select_audio_gen = select_audio\n\n            if select_audio is not None:\n                select_audio_ref += \"_ref.wav\"\n                select_audio_gen += \"_gen.wav\"\n\n            with gr.Row():\n                ch_list_audio = gr.Dropdown(\n                    choices=list_audios,\n                    value=select_audio,\n                    label=\"Audios\",\n                    allow_custom_value=True,\n                    scale=6,\n                    interactive=True,\n                )\n                bt_stream_audio = gr.Button(\"Refresh\", scale=1)\n                bt_stream_audio.click(fn=get_audio_project, inputs=[cm_project], outputs=[ch_list_audio])\n                cm_project.change(fn=get_audio_project, inputs=[cm_project], outputs=[ch_list_audio])\n\n            with gr.Row():\n                audio_ref_stream = gr.Audio(label=\"Original\", type=\"filepath\", value=select_audio_ref)\n                audio_gen_stream = gr.Audio(label=\"Generate\", type=\"filepath\", value=select_audio_gen)\n\n            ch_list_audio.change(\n                fn=get_audio_select,\n                inputs=[ch_list_audio],\n                outputs=[audio_ref_stream, audio_gen_stream],\n            )\n\n            start_button.click(\n                fn=start_training,\n                inputs=[\n                    cm_project,\n                    exp_name,\n                    learning_rate,\n                    batch_size_per_gpu,\n                    batch_size_type,\n                    max_samples,\n                    grad_accumulation_steps,\n                    max_grad_norm,\n                    epochs,\n                    num_warmup_updates,\n                    save_per_updates,\n                    last_per_steps,\n                    ch_finetune,\n                    file_checkpoint_train,\n                    tokenizer_type,\n                    tokenizer_file,\n                    mixed_precision,\n                    ch_stream,\n                    cd_logger,\n                    ch_8bit_adam,\n                ],\n                outputs=[txt_info_train, start_button, stop_button],\n            )\n            stop_button.click(fn=stop_training, outputs=[txt_info_train, start_button, stop_button])\n\n            bt_calculate.click(\n                fn=calculate_train,\n                inputs=[\n                    cm_project,\n                    batch_size_type,\n                    max_samples,\n                    learning_rate,\n                    num_warmup_updates,\n                    save_per_updates,\n                    last_per_steps,\n                    ch_finetune,\n                ],\n                outputs=[\n                    batch_size_per_gpu,\n                    max_samples,\n                    num_warmup_updates,\n                    save_per_updates,\n                    last_per_steps,\n                    lb_samples,\n                    learning_rate,\n                    epochs,\n                ],\n            )\n\n            ch_finetune.change(\n                check_finetune, inputs=[ch_finetune], outputs=[file_checkpoint_train, tokenizer_file, tokenizer_type]\n            )\n\n            def setup_load_settings():\n                output_components = [\n                    exp_name,\n                    learning_rate,\n                    batch_size_per_gpu,\n                    batch_size_type,\n                    max_samples,\n                    grad_accumulation_steps,\n                    max_grad_norm,\n                    epochs,\n                    num_warmup_updates,\n                    save_per_updates,\n                    last_per_steps,\n                    ch_finetune,\n                    file_checkpoint_train,\n                    tokenizer_type,\n                    tokenizer_file,\n                    mixed_precision,\n                    cd_logger,\n                ]\n\n                return output_components\n\n            outputs = setup_load_settings()\n\n            cm_project.change(\n                fn=load_settings,\n                inputs=[cm_project],\n                outputs=outputs,\n            )\n\n            ch_refresh_project.click(\n                fn=load_settings,\n                inputs=[cm_project],\n                outputs=outputs,\n            )\n\n        with gr.TabItem(\"Test Model\"):\n            gr.Markdown(\"\"\"```plaintext \nSOS: Check the use_ema setting (True or False) for your model to see what works best for you. use seed -1 from random\n```\"\"\")\n            exp_name = gr.Radio(label=\"Model\", choices=[\"F5-TTS\", \"E2-TTS\"], value=\"F5-TTS\")\n            list_checkpoints, checkpoint_select = get_checkpoints_project(projects_selelect, False)\n\n            with gr.Row():\n                nfe_step = gr.Number(label=\"NFE Step\", value=32)\n                speed = gr.Slider(label=\"Speed\", value=1.0, minimum=0.3, maximum=2.0, step=0.1)\n                seed = gr.Number(label=\"Seed\", value=-1, minimum=-1)\n                remove_silence = gr.Checkbox(label=\"Remove Silence\")\n\n            ch_use_ema = gr.Checkbox(label=\"Use EMA\", value=True)\n            with gr.Row():\n                cm_checkpoint = gr.Dropdown(\n                    choices=list_checkpoints, value=checkpoint_select, label=\"Checkpoints\", allow_custom_value=True\n                )\n                bt_checkpoint_refresh = gr.Button(\"Refresh\")\n\n            random_sample_infer = gr.Button(\"Random Sample\")\n\n            ref_text = gr.Textbox(label=\"Ref Text\")\n            ref_audio = gr.Audio(label=\"Audio Ref\", type=\"filepath\")\n            gen_text = gr.Textbox(label=\"Gen Text\")\n\n            random_sample_infer.click(\n                fn=get_random_sample_infer, inputs=[cm_project], outputs=[ref_text, gen_text, ref_audio]\n            )\n\n            with gr.Row():\n                txt_info_gpu = gr.Textbox(\"\", label=\"Device\")\n                seed_info = gr.Text(label=\"Seed :\")\n                check_button_infer = gr.Button(\"Infer\")\n\n            gen_audio = gr.Audio(label=\"Audio Gen\", type=\"filepath\")\n\n            check_button_infer.click(\n                fn=infer,\n                inputs=[\n                    cm_project,\n                    cm_checkpoint,\n                    exp_name,\n                    ref_text,\n                    ref_audio,\n                    gen_text,\n                    nfe_step,\n                    ch_use_ema,\n                    speed,\n                    seed,\n                    remove_silence,\n                ],\n                outputs=[gen_audio, txt_info_gpu, seed_info],\n            )\n\n            bt_checkpoint_refresh.click(fn=get_checkpoints_project, inputs=[cm_project], outputs=[cm_checkpoint])\n            cm_project.change(fn=get_checkpoints_project, inputs=[cm_project], outputs=[cm_checkpoint])\n\n        with gr.TabItem(\"Reduce Checkpoint\"):\n            gr.Markdown(\"\"\"```plaintext \nReduce the model size from 5GB to 1.3GB. The new checkpoint can be used for inference or fine-tuning afterward, but it cannot be used to continue training.\n```\"\"\")\n            txt_path_checkpoint = gr.Text(label=\"Path to Checkpoint:\")\n            txt_path_checkpoint_small = gr.Text(label=\"Path to Output:\")\n            ch_safetensors = gr.Checkbox(label=\"Safetensors\", value=\"\")\n            txt_info_reduse = gr.Text(label=\"Info\", value=\"\")\n            reduse_button = gr.Button(\"Reduce\")\n            reduse_button.click(\n                fn=extract_and_save_ema_model,\n                inputs=[txt_path_checkpoint, txt_path_checkpoint_small, ch_safetensors],\n                outputs=[txt_info_reduse],\n            )\n\n        with gr.TabItem(\"System Info\"):\n            output_box = gr.Textbox(label=\"GPU and CPU Information\", lines=20)\n\n            def update_stats():\n                return get_combined_stats()\n\n            update_button = gr.Button(\"Update Stats\")\n            update_button.click(fn=update_stats, outputs=output_box)\n\n            def auto_update():\n                yield gr.update(value=update_stats())\n\n            gr.update(fn=auto_update, inputs=[], outputs=output_box)\n\n\n@click.command()\n@click.option(\"--port\", \"-p\", default=None, type=int, help=\"Port to run the app on\")\n@click.option(\"--host\", \"-H\", default=None, help=\"Host to run the app on\")\n@click.option(\n    \"--share\",\n    \"-s\",\n    default=False,\n    is_flag=True,\n    help=\"Share the app via Gradio share link\",\n)\n@click.option(\"--api\", \"-a\", default=True, is_flag=True, help=\"Allow API access\")\ndef main(port, host, share, api):\n    global app\n    print(\"Starting app...\")\n    app.queue(api_open=api).launch(server_name=host, server_port=port, share=share, show_api=api)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/f5_tts/train/train.py",
    "content": "# training script.\n\nimport os\nfrom importlib.resources import files\n\nimport hydra\n\nfrom f5_tts.model import CFM, DiT, Trainer, UNetT\nfrom f5_tts.model.dataset import load_dataset\nfrom f5_tts.model.utils import get_tokenizer\n\nos.chdir(str(files(\"f5_tts\").joinpath(\"../..\")))  # change working directory to root of project (local editable)\n\n\n@hydra.main(version_base=\"1.3\", config_path=str(files(\"f5_tts\").joinpath(\"configs\")), config_name=None)\ndef main(cfg):\n    tokenizer = cfg.model.tokenizer\n    mel_spec_type = cfg.model.mel_spec.mel_spec_type\n    exp_name = f\"{cfg.model.name}_{mel_spec_type}_{cfg.model.tokenizer}_{cfg.datasets.name}\"\n\n    # set text tokenizer\n    if tokenizer != \"custom\":\n        tokenizer_path = cfg.datasets.name\n    else:\n        tokenizer_path = cfg.model.tokenizer_path\n    vocab_char_map, vocab_size = get_tokenizer(tokenizer_path, tokenizer)\n\n    # set model\n    if \"F5TTS\" in cfg.model.name:\n        model_cls = DiT\n    elif \"E2TTS\" in cfg.model.name:\n        model_cls = UNetT\n    wandb_resume_id = None\n\n    model = CFM(\n        transformer=model_cls(**cfg.model.arch, text_num_embeds=vocab_size, mel_dim=cfg.model.mel_spec.n_mel_channels),\n        mel_spec_kwargs=cfg.model.mel_spec,\n        vocab_char_map=vocab_char_map,\n    )\n\n    # init trainer\n    trainer = Trainer(\n        model,\n        epochs=cfg.optim.epochs,\n        learning_rate=cfg.optim.learning_rate,\n        num_warmup_updates=cfg.optim.num_warmup_updates,\n        save_per_updates=cfg.ckpts.save_per_updates,\n        checkpoint_path=str(files(\"f5_tts\").joinpath(f\"../../{cfg.ckpts.save_dir}\")),\n        batch_size=cfg.datasets.batch_size_per_gpu,\n        batch_size_type=cfg.datasets.batch_size_type,\n        max_samples=cfg.datasets.max_samples,\n        grad_accumulation_steps=cfg.optim.grad_accumulation_steps,\n        max_grad_norm=cfg.optim.max_grad_norm,\n        logger=cfg.ckpts.logger,\n        wandb_project=\"CFM-TTS\",\n        wandb_run_name=exp_name,\n        wandb_resume_id=wandb_resume_id,\n        last_per_steps=cfg.ckpts.last_per_steps,\n        log_samples=True,\n        bnb_optimizer=cfg.optim.bnb_optimizer,\n        mel_spec_type=mel_spec_type,\n        is_local_vocoder=cfg.model.vocoder.is_local,\n        local_vocoder_path=cfg.model.vocoder.local_path,\n    )\n\n    train_dataset = load_dataset(cfg.datasets.name, tokenizer, mel_spec_kwargs=cfg.model.mel_spec)\n    trainer.train(\n        train_dataset,\n        num_workers=cfg.datasets.num_workers,\n        resumable_with_seed=666,  # seed for shuffling dataset\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/callbacks/__init__.py",
    "content": "from .grad_norm import GradNormMonitor\n\n__all__ = [\"GradNormMonitor\"]\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/callbacks/grad_norm.py",
    "content": "from typing import Optional, Union\n\nimport lightning.pytorch as pl\nimport torch\nfrom lightning import LightningModule, Trainer\nfrom lightning.pytorch.callbacks import Callback\nfrom torch import Tensor, nn\nfrom torch.utils._foreach_utils import (\n    _group_tensors_by_device_and_dtype,\n    _has_foreach_support,\n)\n\n\n@torch.no_grad()\ndef grad_norm(\n    parameters: Union[Tensor, list[Tensor]],\n    norm_type: float = 2.0,\n) -> float:\n    \"\"\"\n    Returns the norm of the gradients of the given parameters.\n\n    Args:\n        parameters (Iterable[Tensor] or Tensor): an iterable of Tensors or a\n            single Tensor that will have gradients normalized\n        norm_type (float): type of the used p-norm.\n\n    Returns:\n        Total norm of the parameter gradients (viewed as a single vector).\n    \"\"\"  # noqa: E501\n\n    if isinstance(parameters, Tensor):\n        parameters = [parameters]\n\n    grads = [p.grad for p in parameters if p.grad is not None]\n    if len(grads) == 0:\n        return None\n\n    first_device = grads[0].device\n    grouped_grads: dict[\n        tuple[torch.device, torch.dtype], list[list[Tensor]]\n    ] = _group_tensors_by_device_and_dtype(\n        [[g.detach() for g in grads]]\n    )  # type: ignore[assignment]\n\n    norms = []\n    for (device, _), ([grads], _) in grouped_grads.items():\n        if _has_foreach_support(grads, device=device):\n            norms.extend(torch._foreach_norm(grads, norm_type))\n        else:\n            norms.extend([torch.norm(g, norm_type) for g in grads])\n\n    return torch.norm(torch.stack([norm.to(first_device) for norm in norms]), norm_type)\n\n\nclass GradNormMonitor(Callback):\n    \"\"\"\n    Callback that computes the gradient norm of the model parameters.\n    \"\"\"\n\n    def __init__(\n        self,\n        norm_type: float = 2.0,\n        logging_interval: str = \"step\",\n        sub_module: Optional[Union[str, list[str]]] = None,\n    ) -> None:\n        \"\"\"\n        Args:\n            norm_type (float): type of the used p-norm.\n            logging_interval (str): \"step\" or \"epoch\".\n        \"\"\"\n        super().__init__()\n\n        self.norm_type = norm_type\n        self.logging_interval = logging_interval\n        self.sub_module = sub_module\n\n    def on_after_backward(self, trainer: Trainer, model: LightningModule) -> None:\n        \"\"\"\n        Computes the gradient norm of the model parameters and logs it to the logger.\n\n        Args:\n            trainer (Trainer): The trainer object\n            model (LightningModule): The current lightningModule\n        \"\"\"\n\n        lightning_model = model\n\n        if self.sub_module is None:\n            return self.log_sub_module_grad_norm(lightning_model, model, \"\")\n\n        sub_modules = self.sub_module\n        if isinstance(sub_modules, str):\n            sub_modules = [sub_modules]\n\n        for sub_module in sub_modules:\n            self.log_sub_module_grad_norm(\n                lightning_model, getattr(model, sub_module), f\"/{sub_module}\"\n            )\n\n    def log_sub_module_grad_norm(\n        self, lightning_model: LightningModule, model: nn.Module, path: str\n    ) -> None:\n        grad_norm_val = grad_norm(model.parameters(), self.norm_type)\n        if grad_norm_val is None:\n            return\n\n        on_step = self.logging_interval == \"step\"\n        lightning_model.log(\n            f\"train{path}/grad_norm\",\n            grad_norm_val,\n            on_step=on_step,\n            on_epoch=not on_step,\n        )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/configs/base.yaml",
    "content": "# Base configuration for training a model\npaths:\n  run_dir: results/${project}\n  ckpt_dir: ${paths.run_dir}/checkpoints\n\nhydra:\n  run:\n    dir: ${paths.run_dir}\n\n# Lightning Trainer\ntrainer:\n  _target_: lightning.pytorch.trainer.Trainer\n\n  default_root_dir: ${paths.run_dir}\n  accelerator: gpu\n  num_nodes: 1\n  devices: auto\n  strategy:\n    _target_: lightning.pytorch.strategies.DDPStrategy\n    process_group_backend: nccl  # This should be override when training on windows\n\n  precision: bf16-mixed\n\n  # disable validation by epoch end\n  check_val_every_n_epoch: null\n  val_check_interval: 5000\n  max_steps: 100_000\n\n  # Use torch.backends.cudnn.benchmark to speed up training\n  benchmark: true\n\n# Callbacks\ncallbacks:\n  model_checkpoint:\n    _target_: lightning.pytorch.callbacks.ModelCheckpoint\n    dirpath: ${paths.ckpt_dir}\n    filename: \"step_{step:09d}\"\n    save_last: false # additionally always save an exact copy of the last checkpoint to a file last.ckpt\n    save_top_k: 5 # save 5 latest checkpoints\n    monitor: step # use step to monitor checkpoints\n    mode: max # save the latest checkpoint with the highest global_step\n    every_n_epochs: null # don't save checkpoints by epoch end\n    every_n_train_steps: 5000 # save checkpoints every 5000 steps\n    auto_insert_metric_name: false\n\n  model_summary:\n    _target_: lightning.pytorch.callbacks.ModelSummary\n    max_depth: 2 # the maximum depth of layer nesting that the summary will include\n\n  learning_rate_monitor:\n    _target_: lightning.pytorch.callbacks.LearningRateMonitor\n    logging_interval: step\n    log_momentum: false\n\n  grad_norm_monitor:\n    _target_: fish_speech.callbacks.GradNormMonitor\n    norm_type: 2\n    logging_interval: step\n\n# Logger\nlogger:\n  tensorboard:\n    _target_: lightning.pytorch.loggers.tensorboard.TensorBoardLogger\n    save_dir: \"${paths.run_dir}/tensorboard/\"\n    name: null\n    log_graph: false\n    default_hp_metric: true\n    prefix: \"\"\n\n  # wandb:\n  #   _target_: lightning.pytorch.loggers.wandb.WandbLogger\n  #   # name: \"\" # name of the run (normally generated by wandb)\n  #   save_dir: \"${paths.run_dir}\"\n  #   offline: False\n  #   id: null # pass correct id to resume experiment!\n  #   anonymous: null # enable anonymous logging\n  #   project: \"fish-speech\"\n  #   log_model: False # upload lightning ckpts\n  #   prefix: \"\" # a string to put at the beginning of metric keys\n  #   # entity: \"\" # set to name of your wandb team\n  #   group: \"\"\n  #   tags: [\"vq\", \"hq\", \"finetune\"]\n  #   job_type: \"\"\n    \n# Loop\ntrain: true\ntest: false\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/configs/firefly_gan_vq.yaml",
    "content": "_target_: fish_speech.models.vqgan.modules.firefly.FireflyArchitecture\nspec_transform:\n  _target_: fish_speech.utils.spectrogram.LogMelSpectrogram\n  sample_rate: 44100\n  n_mels: 160\n  n_fft: 2048\n  hop_length: 512\n  win_length: 2048\nbackbone:\n  _target_: fish_speech.models.vqgan.modules.firefly.ConvNeXtEncoder\n  input_channels: 160\n  depths: [3, 3, 9, 3]\n  dims: [128, 256, 384, 512]\n  drop_path_rate: 0.2\n  kernel_size: 7\nhead:\n  _target_: fish_speech.models.vqgan.modules.firefly.HiFiGANGenerator\n  hop_length: 512\n  upsample_rates: [8, 8, 2, 2, 2]  # aka. strides\n  upsample_kernel_sizes: [16, 16, 4, 4, 4]\n  resblock_kernel_sizes: [3, 7, 11]\n  resblock_dilation_sizes: [[1, 3, 5], [1, 3, 5], [1, 3, 5]]\n  num_mels: 512\n  upsample_initial_channel: 512\n  pre_conv_kernel_size: 13\n  post_conv_kernel_size: 13\nquantizer:\n  _target_: fish_speech.models.vqgan.modules.fsq.DownsampleFiniteScalarQuantize\n  input_dim: 512\n  n_groups: 8\n  n_codebooks: 1\n  levels: [8, 5, 5, 5]\n  downsample_factor: [2, 2]\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/configs/lora/r_8_alpha_16.yaml",
    "content": "_target_: fish_speech.models.text2semantic.lora.LoraConfig\nr: 8\nlora_alpha: 16\nlora_dropout: 0.01\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/configs/text2semantic_finetune.yaml",
    "content": "defaults:\n  - base\n  - _self_\n\nproject: text2semantic_finetune_dual_ar\nmax_length: 4096\npretrained_ckpt_path: checkpoints/fish-speech-1.4\n\n# Lightning Trainer\ntrainer:\n  accumulate_grad_batches: 1\n  gradient_clip_val: 1.0\n  gradient_clip_algorithm: \"norm\"\n  max_steps: 1000\n  precision: bf16-true\n  limit_val_batches: 10\n  val_check_interval: 100\n\n# Dataset Configuration\ntokenizer:\n  _target_: transformers.AutoTokenizer.from_pretrained\n  pretrained_model_name_or_path: ${pretrained_ckpt_path}\n\n# Dataset Configuration\ntrain_dataset:\n  _target_: fish_speech.datasets.semantic.AutoTextSemanticInstructionDataset\n  proto_files:\n    - data/protos\n  tokenizer: ${tokenizer}\n  causal: true\n  max_length: ${max_length}\n  use_speaker: false\n  interactive_prob: 0.7\n\nval_dataset:\n  _target_: fish_speech.datasets.semantic.AutoTextSemanticInstructionDataset\n  proto_files:\n    - data/protos\n  tokenizer: ${tokenizer}\n  causal: true\n  max_length: ${max_length}\n  use_speaker: false\n  interactive_prob: 0.7\n\ndata:\n  _target_: fish_speech.datasets.semantic.SemanticDataModule\n  train_dataset: ${train_dataset}\n  val_dataset: ${val_dataset}\n  num_workers: 4\n  batch_size: 8\n  tokenizer: ${tokenizer}\n  max_length: ${max_length}\n\n# Model Configuration\nmodel:\n  _target_: fish_speech.models.text2semantic.lit_module.TextToSemantic\n  model: \n    _target_: fish_speech.models.text2semantic.llama.BaseTransformer.from_pretrained\n    path: ${pretrained_ckpt_path}\n    load_weights: true\n    max_length: ${max_length}\n    lora_config: null\n\n  optimizer:\n    _target_: torch.optim.AdamW\n    _partial_: true\n    lr: 1e-4\n    weight_decay: 0\n    betas: [0.9, 0.95]\n    eps: 1e-5\n\n  lr_scheduler:\n    _target_: torch.optim.lr_scheduler.LambdaLR\n    _partial_: true\n    lr_lambda:\n      _target_: fish_speech.scheduler.get_constant_schedule_with_warmup_lr_lambda\n      _partial_: true\n      num_warmup_steps: 10\n\n# Callbacks\ncallbacks:\n  model_checkpoint:\n    every_n_train_steps: ${trainer.val_check_interval}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/conversation.py",
    "content": "from dataclasses import dataclass, field\nfrom typing import Literal\n\nimport torch\n\nfrom .tokenizer import MODALITY_TOKENS, FishTokenizer\n\nCODEBOOK_PAD_TOKEN_ID = 0\n\n\n@dataclass(kw_only=True)\nclass BasePart:\n    pass\n\n\n@dataclass(kw_only=True)\nclass VQPart(BasePart):\n    codes: torch.Tensor\n\n\n@dataclass(kw_only=True)\nclass TextPart(BasePart):\n    text: str\n\n\n@dataclass(kw_only=True)\nclass EncodedMessage:\n    tokens: torch.Tensor\n    labels: torch.Tensor\n    vq_mask_tokens: torch.Tensor | None = None\n    vq_mask_labels: torch.Tensor | None = None\n    vq_parts: list[torch.Tensor]\n    vq_require_losses: torch.Tensor | None = None\n\n\n@dataclass(kw_only=True)\nclass Message:\n    role: Literal[\"system\", \"user\", \"assistant\"]\n    parts: list[VQPart | TextPart] = field(default_factory=list)\n    add_im_start: bool = True\n    add_im_end: bool = True\n    cal_loss: bool = False\n    modality: Literal[\"text\", \"voice\", \"interleave\"] | None = None\n\n    # By default, ignore the loss of the auto-generated im_start token\n    ignore_im_start_loss: bool = True\n\n    def encode(\n        self: \"Message\",\n        tokenizer: FishTokenizer,\n    ) -> EncodedMessage:\n        all_tokens = []\n        all_labels = []\n\n        # Multi-modal tokens\n        vq_parts = []\n        vq_masks = []\n\n        parts = self.parts.copy()\n        if self.add_im_start:\n            modality_token = MODALITY_TOKENS[self.modality] if self.modality else \"\"\n            parts.insert(0, TextPart(text=f\"<|im_start|>{self.role}\\n{modality_token}\"))\n\n        if self.add_im_end:\n            parts.append(TextPart(text=\"<|im_end|>\"))\n\n        for part in parts:\n            if isinstance(part, TextPart):\n                tokens = torch.tensor(\n                    tokenizer.encode(part.text),\n                    dtype=torch.int,\n                )\n            elif isinstance(part, VQPart):\n                curr_codes = part.codes.clone()\n                tokens = torch.tensor(\n                    [\n                        tokenizer.semantic_id_to_token_id[i.item()]\n                        for i in curr_codes[0].int()\n                    ],\n                    dtype=torch.int,\n                )\n                vq_parts.append(curr_codes)\n            else:\n                raise ValueError(f\"Unsupported part type: {type(part)}\")\n\n            all_tokens.append(tokens)\n            if isinstance(part, VQPart):\n                vq_masks.append(torch.ones_like(tokens, dtype=torch.bool))\n            else:\n                vq_masks.append(torch.zeros_like(tokens, dtype=torch.bool))\n\n            if self.cal_loss:\n                all_labels.append(tokens.clone())\n            else:\n                all_labels.append(torch.full_like(tokens, -100))\n\n        tokens = torch.cat(all_tokens, dim=0)\n        labels = torch.cat(all_labels, dim=0)\n        vq_masks = torch.cat(vq_masks, dim=0)\n\n        assert tokens.shape == labels.shape == vq_masks.shape\n\n        if self.ignore_im_start_loss and self.add_im_start:\n            labels[: len(all_tokens[0])] = -100\n\n        return EncodedMessage(\n            tokens=tokens,\n            labels=labels,\n            vq_parts=vq_parts,\n            vq_mask_tokens=vq_masks,\n            vq_mask_labels=vq_masks,\n        )\n\n\n@dataclass\nclass Conversation:\n    messages: list[Message]\n\n    def __init__(self: \"Conversation\", messages: list[Message] | None = None):\n        self.messages = messages or []\n\n    def encode(\n        self: \"Conversation\",\n        tokenizer: FishTokenizer,\n        add_shift: bool = True,\n        ignore_loss_tokens: list[str] = [],\n    ) -> EncodedMessage:\n        # Build the input_ids and labels\n        tokens = []\n        labels = []\n        vq_parts = []\n        vq_mask_tokens = []\n        vq_mask_labels = []\n        vq_require_losses = []\n        ignore_loss_token_ids = [tokenizer.get_token_id(i) for i in ignore_loss_tokens]\n\n        for message in self.messages:\n            encoded = message.encode(\n                tokenizer,\n            )\n            tokens.append(encoded.tokens)\n            labels.append(encoded.labels)\n            vq_parts.extend(encoded.vq_parts)\n            vq_mask_tokens.append(encoded.vq_mask_tokens)\n            vq_mask_labels.append(encoded.vq_mask_labels)\n            vq_require_losses.extend([message.cal_loss] * len(encoded.vq_parts))\n\n        tokens = torch.cat(tokens, dim=0)\n        labels = torch.cat(labels, dim=0)\n        vq_mask_tokens = torch.cat(vq_mask_tokens, dim=0)\n        vq_mask_labels = torch.cat(vq_mask_labels, dim=0)\n        vq_require_losses = torch.tensor(vq_require_losses, dtype=torch.bool)\n\n        if add_shift:\n            tokens = tokens[:-1]\n            labels = labels[1:]\n            vq_mask_tokens = vq_mask_tokens[:-1]\n            vq_mask_labels = vq_mask_labels[1:]\n\n        for i in ignore_loss_token_ids:\n            assert i != -100 and i is not None\n            labels[labels == i] = -100\n\n        assert tokens.dtype in [\n            torch.int,\n            torch.long,\n        ], f\"Invalid dtype: {tokens.dtype}, conv: {conversation}\"\n\n        return EncodedMessage(\n            tokens=tokens,\n            labels=labels,\n            vq_parts=vq_parts,\n            vq_mask_tokens=vq_mask_tokens,\n            vq_mask_labels=vq_mask_labels,\n            vq_require_losses=vq_require_losses,\n        )\n\n    def encode_for_inference(\n        self: \"Conversation\",\n        tokenizer: FishTokenizer,\n        num_codebooks: int,\n    ) -> EncodedMessage:\n        # self.visualize(tokenizer)\n\n        encoded = self.encode(tokenizer, add_shift=False)\n        tokens = encoded.tokens\n        values = torch.zeros((num_codebooks + 1, len(tokens)), dtype=torch.int)\n        values[0] = tokens\n\n        if encoded.vq_parts is None or len(encoded.vq_parts) == 0:\n            return values\n\n        vq_parts = encoded.vq_parts\n        vq_parts = [part.to(values.device) for part in vq_parts]\n        vq_parts = torch.cat(vq_parts, dim=1)\n        values[0, encoded.vq_mask_tokens] = vq_parts[0] + tokenizer.semantic_begin_id\n        values[1:, encoded.vq_mask_tokens] = vq_parts\n\n        return values\n\n    def visualize(\n        self: \"Conversation\",\n        tokenizer: FishTokenizer,\n        ignore_loss_tokens: list[str] = [],\n    ):\n        encoded = self.encode(\n            tokenizer, add_shift=False, ignore_loss_tokens=ignore_loss_tokens\n        )\n\n        # Colors for alternating tokens\n        colors = {\n            \"blue\": \"\\033[94m\",  # Light blue\n            \"cyan\": \"\\033[96m\",  # Cyan\n            \"green\": \"\\033[92m\",  # Light green\n            \"dark_green\": \"\\033[32m\",  # Dark green\n        }\n        blue_idx = 0\n        green_idx = 0\n\n        def print_in_blue(x):\n            nonlocal blue_idx\n            color = colors[\"blue\"] if blue_idx % 2 == 0 else colors[\"cyan\"]\n            print(f\"{color}{x}\\033[0m\", end=\"\")\n            blue_idx += 1\n\n        def print_in_green(x):\n            nonlocal green_idx\n            color = colors[\"green\"] if green_idx % 2 == 0 else colors[\"dark_green\"]\n            print(f\"{color}{x}\\033[0m\", end=\"\")\n            green_idx += 1\n\n        for tok, lab in zip(encoded.tokens, encoded.labels):\n            val = tokenizer.decode([tok])\n\n            if lab == -100:\n                print_in_green(val)\n            else:\n                print_in_blue(val)\n\n        print()\n\n    def append(self: \"Conversation\", message: Message):\n        self.messages.append(message)\n\n\nif __name__ == \"__main__\":\n    message0 = Message(\n        role=\"user\",\n        parts=[\n            TextPart(text=\"Hello, how are you?\"),\n            VQPart(codes=torch.zeros((4, 10))),\n        ],\n        cal_loss=False,\n    )\n\n    message1 = Message(\n        role=\"assistant\",\n        parts=[TextPart(text=\"I'm fine, thank you.\")],\n        cal_loss=True,\n    )\n    conversation = Conversation([message0, message1])\n    tokenizer = FishTokenizer.from_pretrained(\"checkpoints/Qwen2-1.5B-Instruct\")\n    conversation.visualize(tokenizer)\n\n    encoded = conversation.encode(tokenizer)\n    print(encoded)\n    print(tokenizer.batch_decode(encoded.tokens))\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/datasets/concat_repeat.py",
    "content": "import bisect\nimport random\nfrom typing import Iterable\n\nfrom torch.utils.data import Dataset, IterableDataset\n\n\nclass ConcatRepeatDataset(Dataset):\n    datasets: list[Dataset]\n    cumulative_sizes: list[int]\n    repeats: list[int]\n\n    @staticmethod\n    def cumsum(sequence, repeats):\n        r, s = [], 0\n        for dataset, repeat in zip(sequence, repeats):\n            l = len(dataset) * repeat\n            r.append(l + s)\n            s += l\n        return r\n\n    def __init__(self, datasets: Iterable[Dataset], repeats: list[int]):\n        super().__init__()\n\n        self.datasets = list(datasets)\n        self.repeats = repeats\n\n        assert len(self.datasets) > 0, \"datasets should not be an empty iterable\"\n        assert len(self.datasets) == len(\n            repeats\n        ), \"datasets and repeats should have the same length\"\n\n        for d in self.datasets:\n            assert not isinstance(\n                d, IterableDataset\n            ), \"ConcatRepeatDataset does not support IterableDataset\"\n\n        self.cumulative_sizes = self.cumsum(self.datasets, self.repeats)\n\n    def __len__(self):\n        return self.cumulative_sizes[-1]\n\n    def __getitem__(self, idx):\n        dataset_idx = bisect.bisect_right(self.cumulative_sizes, idx)\n\n        if dataset_idx == 0:\n            sample_idx = idx\n        else:\n            sample_idx = idx - self.cumulative_sizes[dataset_idx - 1]\n\n        dataset = self.datasets[dataset_idx]\n\n        return dataset[sample_idx % len(dataset)]\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/datasets/protos/text-data.proto",
    "content": "syntax = \"proto3\";\n\npackage text_data;\n\nmessage Semantics {\n    repeated uint32 values = 1;\n}\n\nmessage Sentence {\n    repeated string texts = 1;\n    repeated Semantics semantics = 3;\n}\n\nmessage TextData {\n    string source = 1;\n    string name = 2;\n    repeated Sentence sentences = 4;\n}\n\nmessage SampledData {\n    string source = 1;\n    string name = 2;\n    repeated Sentence samples = 3;\n}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/datasets/protos/text_data_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: text-data.proto\n# Protobuf Python Version: 4.25.1\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import symbol_database as _symbol_database\nfrom google.protobuf.internal import builder as _builder\n\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(\n    b'\\n\\x0ftext-data.proto\\x12\\ttext_data\"\\x1b\\n\\tSemantics\\x12\\x0e\\n\\x06values\\x18\\x01 \\x03(\\r\"B\\n\\x08Sentence\\x12\\r\\n\\x05texts\\x18\\x01 \\x03(\\t\\x12\\'\\n\\tsemantics\\x18\\x03 \\x03(\\x0b\\x32\\x14.text_data.Semantics\"P\\n\\x08TextData\\x12\\x0e\\n\\x06source\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04name\\x18\\x02 \\x01(\\t\\x12&\\n\\tsentences\\x18\\x04 \\x03(\\x0b\\x32\\x13.text_data.Sentence\"Q\\n\\x0bSampledData\\x12\\x0e\\n\\x06source\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04name\\x18\\x02 \\x01(\\t\\x12$\\n\\x07samples\\x18\\x03 \\x03(\\x0b\\x32\\x13.text_data.Sentenceb\\x06proto3'\n)\n\n_globals = globals()\n_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)\n_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, \"text_data_pb2\", _globals)\nif _descriptor._USE_C_DESCRIPTORS == False:\n    DESCRIPTOR._options = None\n    _globals[\"_SEMANTICS\"]._serialized_start = 30\n    _globals[\"_SEMANTICS\"]._serialized_end = 57\n    _globals[\"_SENTENCE\"]._serialized_start = 59\n    _globals[\"_SENTENCE\"]._serialized_end = 125\n    _globals[\"_TEXTDATA\"]._serialized_start = 127\n    _globals[\"_TEXTDATA\"]._serialized_end = 207\n    _globals[\"_SAMPLEDDATA\"]._serialized_start = 209\n    _globals[\"_SAMPLEDDATA\"]._serialized_end = 290\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/datasets/protos/text_data_stream.py",
    "content": "import struct\n\nfrom .text_data_pb2 import TextData\n\n\ndef read_pb_stream(f):\n    while True:\n        buf = f.read(4)\n        if len(buf) == 0:\n            break\n        size = struct.unpack(\"I\", buf)[0]\n        buf = f.read(size)\n        text_data = TextData()\n        text_data.ParseFromString(buf)\n        yield text_data\n\n\ndef write_pb_stream(f, text_data):\n    buf = text_data.SerializeToString()\n    f.write(struct.pack(\"I\", len(buf)))\n    f.write(buf)\n\n\ndef pack_pb_stream(text_data):\n    buf = text_data.SerializeToString()\n    return struct.pack(\"I\", len(buf)) + buf\n\n\ndef split_pb_stream(f):\n    while True:\n        head = f.read(4)\n        if len(head) == 0:\n            break\n        size = struct.unpack(\"I\", head)[0]\n        buf = f.read(size)\n        yield head + buf\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/datasets/semantic.py",
    "content": "import random\nfrom dataclasses import dataclass\nfrom itertools import chain\nfrom pathlib import Path\nfrom random import Random\nfrom typing import Optional, Union\n\nimport numpy as np\nimport pyarrow.parquet as pq\nimport torch\nimport torch.nn.functional as F\nfrom datasets.download.streaming_download_manager import xopen\nfrom huggingface_hub import HfApi\nfrom lightning import LightningDataModule\nfrom torch.distributed import get_rank, get_world_size, is_initialized\nfrom torch.utils.data import DataLoader, IterableDataset, get_worker_info\nfrom transformers import AutoTokenizer\n\nfrom fish_speech.conversation import CODEBOOK_PAD_TOKEN_ID\nfrom fish_speech.datasets.protos.text_data_pb2 import SampledData\nfrom fish_speech.datasets.protos.text_data_stream import read_pb_stream\nfrom fish_speech.text.clean import clean_text\nfrom fish_speech.utils import RankedLogger\nfrom fish_speech.utils.braceexpand import braceexpand\n\nlog = RankedLogger(__name__, rank_zero_only=True)\n\n\ndef split_by_rank_worker(files):\n    # We need to know the total number of devices\n    # to split the data properly\n\n    total_devices = 1\n    if is_initialized():\n        total_devices = get_world_size()\n\n    worker_info = get_worker_info()\n    if worker_info is not None:\n        total_devices *= worker_info.num_workers\n\n    if len(files) < total_devices:\n        # Repeat the files N times to match the number of devices\n        files = files * (total_devices // len(files) + 1)\n\n    # DDP\n    if is_initialized():\n        files = files[get_rank() :: get_world_size()]\n\n    # Split by worker\n    if worker_info is not None:\n        files = files[worker_info.id :: worker_info.num_workers]\n\n    return files\n\n\nclass AutoTextSemanticInstructionDataset(IterableDataset):\n    \"\"\"\n    Auto Augment Dataset by Speaker\n\n    1. Random concatenate multiple sentences from the same speaker to form a longer sentence\n    2. Automatically normalize the text\n\n    For interactive mode, we use the following format (multiple sequences):\n    <s> [INST] [SPK: speaker] text [/INST] ... [INST] text [/INST] </s>\n\n    For non-interactive mode, we use the following format (one long sequence):\n    <s> [INST] text [/INST] ... </s>\n    \"\"\"\n\n    def __init__(\n        self,\n        proto_files: list[str],\n        seed: int = 42,\n        interactive_prob: float = 0.5,\n        max_length: int = 1024,\n        tokenizer: AutoTokenizer = None,\n        use_speaker: bool | float = True,\n        causal: bool = True,\n        num_codebooks: Optional[int] = None,\n        skip_text_prob: float = 0.0,\n    ):\n        \"\"\"\n        Args:\n            proto_files: proto buf files if using local data\n            seed: random seed\n            interactive_prob: probability to use interactive mode\n            max_length: max length of the text\n            tokenizer: tokenizer\n            use_speaker: include speaker information in the prompt\n            causal: use causal sampling when using local data, disable will lead to random sampling\n            num_codebooks: number of codebooks, if None, it will be automatically detected\n            skip_text_prob: probability to skip the text (audio only), this only applies to interactive mode\n        \"\"\"\n\n        super().__init__()\n\n        assert 0 <= interactive_prob <= 1, \"interactive_prob must be in [0, 1]\"\n\n        self.seed = seed\n        self.max_length = max_length\n        self.tokenizer = tokenizer\n        self.interactive_prob = interactive_prob\n        self.use_speaker = use_speaker\n        self.proto_files = proto_files\n        self.causal = causal\n        self.num_codebooks = num_codebooks\n        self.skip_text_prob = skip_text_prob\n\n        self.semantic_token_id = self.tokenizer.convert_tokens_to_ids(\"<|semantic|>\")\n        self.groups = None\n\n    def init_mock_data_server(self):\n        if self.groups is not None:\n            return\n\n        # Expand the proto files\n        expanded_proto_files = []\n        for filename in self.proto_files:\n            for i in braceexpand(filename):\n                i = Path(i)\n                if i.is_file():\n                    expanded_proto_files.append(i)\n                elif i.is_dir():\n                    expanded_proto_files.extend(i.rglob(\"*.proto\"))\n                    expanded_proto_files.extend(i.rglob(\"*.protos\"))\n                else:\n                    raise ValueError(f\"{i} is not a file or directory\")\n\n        expanded_proto_files = sorted(expanded_proto_files)\n        Random(self.seed).shuffle(expanded_proto_files)\n\n        self.groups = []\n        shard_proto_files = split_by_rank_worker(expanded_proto_files)\n        log.info(\n            f\"Reading {len(shard_proto_files)} / {len(expanded_proto_files)} files\"\n        )\n\n        count = 0\n        for filename in shard_proto_files:\n            with open(filename, \"rb\") as f:\n                for text_data in read_pb_stream(f):\n                    self.groups.append(text_data)\n                    count += 1\n\n        log.info(f\"Read total {count} groups of data\")\n\n        # Shuffle the lines\n        Random(self.seed).shuffle(self.groups)\n        self.group_weights = [len(i.sentences) for i in self.groups]\n\n    def __iter__(self):\n        while True:\n            yield self.augment()\n\n    def tokenize_sentence(self, sentence: str):\n        sentence = clean_text(sentence)\n        tokens = self.tokenizer.encode(\n            f\"{sentence}\",\n            max_length=10**6,\n            add_special_tokens=False,\n            truncation=False,\n        )\n        return sentence, len(tokens)\n\n    def sample_data(self):\n        if self.groups is None:\n            self.init_mock_data_server()\n\n        # Shuffle unique lines, estimate that each sample is at least 20 tokens\n        num_samples = self.max_length // 20\n\n        # choice group based on their number of samples\n        group = random.choices(self.groups, weights=self.group_weights, k=1)[0]\n\n        if self.causal:\n            # Sample in order\n            if num_samples >= len(group.sentences):\n                samples = group.sentences\n            else:\n                begin = random.randint(0, len(group.sentences) - num_samples)\n                samples = group.sentences[begin : begin + num_samples]\n        else:\n            samples = random.choices(\n                group.sentences, k=min(num_samples, len(group.sentences))\n            )\n\n        return SampledData(\n            source=group.source,\n            name=group.name,\n            samples=samples,\n        )\n\n    def augment(self):\n        final_text, final_semantic = [], []\n        response = self.sample_data()\n        if len(response.samples) == 0:\n            # Invalid group\n            return None\n\n        samples = list(response.samples)\n        idx = 0\n        use_interactive = random.random() < self.interactive_prob\n\n        if use_interactive is False:\n            # Random sample based on speaker using a truncated normal distribution\n            a = torch.tensor([0], dtype=torch.float32)\n            torch.nn.init.trunc_normal_(\n                a,\n                mean=self.max_length // 2,\n                std=self.max_length // 4,\n                a=10,\n                b=self.max_length,\n            )\n            remaining_tokens = a.long().item() - 4\n        else:\n            remaining_tokens = self.max_length\n\n        # Use speaker\n        if isinstance(self.use_speaker, float):\n            use_speaker = random.random() < self.use_speaker\n        else:\n            use_speaker = self.use_speaker\n\n        all_tokens, all_labels = [], []\n        while remaining_tokens > 0 and len(samples) > 0:\n            sentence = samples.pop(0)\n\n            text = random.choice(sentence.texts)\n            text, length = self.tokenize_sentence(text)\n            remaining_tokens -= length + len(sentence.semantics[0].values)\n\n            if use_interactive is False:\n                final_text.append(text)\n                final_semantic.append(sentence.semantics)\n            else:\n                # For interactive mode, we only apply speaker for the first sentence\n                # [INST] [SPK: speaker] text [/INST] ... [INST] text [/INST]\n                tokens, labels = self.pack_sentences(\n                    sentences=[text],\n                    semantics=[sentence.semantics],\n                    speaker=response.name if use_speaker else None,\n                    skip_text=random.random() < self.skip_text_prob,\n                )\n\n                all_tokens.append(tokens)\n                all_labels.append(labels)\n\n            idx += 1\n\n        if use_interactive is False:\n            tokens, labels = self.pack_sentences(\n                final_text,\n                semantics=final_semantic,\n                speaker=response.name if use_speaker else None,\n            )\n            all_tokens.append(tokens)\n            all_labels.append(labels)\n\n        tokens = torch.cat(all_tokens, dim=1)\n        labels = torch.cat(all_labels, dim=1)\n\n        # Verify that the length is correct\n        assert tokens.size(1) == labels.size(1), f\"{tokens.size(1)} != {labels.size(1)}\"\n\n        data = {\"tokens\": tokens, \"labels\": labels}\n\n        return data\n\n    def pack_sentences(\n        self,\n        sentences: list[str],\n        semantics: list,\n        speaker: Optional[str] = None,\n        skip_text: bool = False,\n    ):\n        if speaker is None:\n            speaker = \"assistant\"\n\n        cated_sentences = \" \".join(sentences)\n        if skip_text:\n            cated_sentences = \"<|skip_text|>\"\n\n        final_text = \"<|im_start|>user\\n\" + cated_sentences + \"<|im_end|>\"\n        final_text = final_text + f\"<|im_start|>{speaker}\\n\"\n\n        encoded = self.tokenizer.encode(\n            final_text,\n            add_special_tokens=False,\n            truncation=False,\n            max_length=10**6,\n        )\n        semantic_length = sum([len(i[0].values) for i in semantics])\n        prompt_length = len(encoded)\n        num_codebooks = (\n            len(semantics[0]) if self.num_codebooks is None else self.num_codebooks\n        )\n\n        # Pack the tokens and semantics (add <s> and </s> to semantic tokens)\n        tokens = (\n            encoded\n            + [self.semantic_token_id] * semantic_length\n            + self.tokenizer.convert_tokens_to_ids([\"<|im_end|>\"])\n        )\n\n        # Codebook bos/padding: 0, eos: 1\n        codes = [[CODEBOOK_PAD_TOKEN_ID] * prompt_length for _ in range(num_codebooks)]\n        for segment in semantics:\n            for book_idx, book in zip(range(num_codebooks), segment):\n                for j in book.values:\n                    codes[book_idx].append(int(j) + 1)\n\n        for book in codes:\n            book.extend([CODEBOOK_PAD_TOKEN_ID] * 1)\n\n        tokens = [tokens] + codes\n\n        tokens = torch.tensor(tokens, dtype=torch.long)\n        labels = tokens.clone()\n\n        if skip_text:\n            # If text is not provided, the sentence is used for condition only, all labels are -100\n            torch.fill_(labels, -100)\n            return tokens, labels\n\n        # Mask out the <s> tokens for semantic, predict semantic tokens only\n        # Since we don't mask out the input tokens, the language modeling still works\n        labels[1:, :prompt_length] = -100\n\n        tokens = tokens[:, :-1]\n        labels = labels[:, 1:]\n\n        # Verify the padding is correct, and the last token is eos\n        assert (tokens[1:, :prompt_length] == CODEBOOK_PAD_TOKEN_ID).all()\n        assert (labels[1:, -1:] == CODEBOOK_PAD_TOKEN_ID).all()\n\n        return tokens, labels\n\n\n@dataclass\nclass TextDataCollator:\n    tokenizer: AutoTokenizer\n    max_length: int = 1024\n\n    def __call__(self, examples):\n        if \"negative_tokens\" in examples:\n            positive_examples = []\n            negative_examples = []\n\n            for i in examples:\n                positive_examples.append(\n                    {\n                        \"tokens\": i[\"tokens\"],\n                        \"labels\": i[\"labels\"],\n                    }\n                )\n                negative_examples.append(\n                    {\n                        \"tokens\": i[\"negative_tokens\"],\n                        \"labels\": i[\"negative_labels\"],\n                    }\n                )\n\n            examples = positive_examples + negative_examples\n\n        return self.batchify(examples)\n\n    def batchify(self, examples, tokens_key=\"tokens\", labels_key=\"labels\"):\n        tokens, attention_masks, labels = [], [], []\n\n        # Calculate the max length\n        max_tokens_length = 0\n        for example in examples:\n            max_tokens_length = max(max_tokens_length, example[tokens_key].size(1))\n        max_tokens_length = min(max_tokens_length, self.max_length)\n\n        for example in examples:\n            _tokens = example[tokens_key][:, :max_tokens_length]\n            _labels = example[labels_key][:, :max_tokens_length]\n            _attention_mask = torch.ones((max_tokens_length,), dtype=torch.bool)\n            tokens_length = _tokens.size(1)\n            _attention_mask[:tokens_length] = False\n\n            assert tokens_length == _labels.size(\n                1\n            ), f\"{tokens_length} != {_labels.size(1)}\"\n\n            if tokens_length < max_tokens_length:\n                _tokens = F.pad(\n                    _tokens,\n                    (0, max_tokens_length - tokens_length),\n                    value=self.tokenizer.eos_token_id,\n                )\n                _tokens[1:, tokens_length:] = CODEBOOK_PAD_TOKEN_ID\n                _labels = F.pad(\n                    _labels, (0, max_tokens_length - _labels.size(1)), value=-100\n                )\n\n            tokens.append(_tokens)\n            attention_masks.append(_attention_mask)\n            labels.append(_labels)\n\n        tokens = torch.stack(tokens, dim=0)\n        attention_masks = torch.stack(attention_masks, dim=0)\n        labels = torch.stack(labels, dim=0)\n\n        return {\n            \"inputs\": tokens,\n            \"attention_masks\": attention_masks,\n            \"labels\": labels,\n        }\n\n\nclass InterleaveDataset(IterableDataset):\n    def __init__(\n        self,\n        datasets: list[IterableDataset],\n        probabilities: list[float],\n        seed: int = 42,\n    ):\n        super().__init__()\n\n        self.datasets = datasets\n        self.probabilities = probabilities\n        self.seed = seed\n\n    def __iter__(self):\n        rng = np.random.default_rng(self.seed)\n        dataset_iterators = [iter(dataset) for dataset in self.datasets]\n\n        while True:\n            # Random choice one\n            dataset_idx = rng.choice(len(self.datasets), p=self.probabilities)\n            dataset_iterator = dataset_iterators[dataset_idx]\n\n            try:\n                yield next(dataset_iterator)\n            except StopIteration:\n                # Exhausted, create a new iterator\n                dataset_iterators[dataset_idx] = iter(self.datasets[dataset_idx])\n                yield next(dataset_iterators[dataset_idx])\n\n\nclass SemanticDataModule(LightningDataModule):\n    def __init__(\n        self,\n        train_dataset: Union[AutoTextSemanticInstructionDataset, InterleaveDataset],\n        val_dataset: Union[AutoTextSemanticInstructionDataset, InterleaveDataset],\n        batch_size: int = 32,\n        tokenizer: AutoTokenizer = None,\n        max_length: int = 1024,\n        num_workers: int = 4,\n    ):\n        super().__init__()\n\n        self.train_dataset = train_dataset\n        self.val_dataset = val_dataset\n        self.batch_size = batch_size\n        self.tokenizer = tokenizer\n        self.max_length = max_length\n        self.num_workers = num_workers\n\n    def train_dataloader(self):\n        return DataLoader(\n            self.train_dataset,\n            batch_size=self.batch_size,\n            collate_fn=TextDataCollator(self.tokenizer, self.max_length),\n            num_workers=self.num_workers,\n            persistent_workers=True,\n        )\n\n    def val_dataloader(self):\n        return DataLoader(\n            self.val_dataset,\n            batch_size=self.batch_size,\n            collate_fn=TextDataCollator(self.tokenizer, self.max_length),\n            num_workers=self.num_workers,\n            persistent_workers=True,\n        )\n\n\nif __name__ == \"__main__\":\n    from tqdm import tqdm\n\n    ds = AutoTextSemanticInstructionDataset(\n        [\"data/protos\"],\n        tokenizer=AutoTokenizer.from_pretrained(\"fishaudio/fish-speech-1\"),\n        use_speaker=False,\n        interactive_prob=1.0,\n        skip_text_prob=0.5,\n    )\n\n    for i in ds:\n        print(ds.tokenizer.decode(i[\"tokens\"][0], skip_special_tokens=False))\n        # i[\"labels\"][0][i[\"labels\"][0] == -100] = 0\n        # print(ds.tokenizer.decode(i[\"labels\"][0], skip_special_tokens=False))\n        break\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/datasets/vqgan.py",
    "content": "from dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Optional\n\nimport librosa\nimport numpy as np\nimport torch\nfrom lightning import LightningDataModule\nfrom torch.utils.data import DataLoader, Dataset\n\nfrom fish_speech.utils import RankedLogger\n\nlogger = RankedLogger(__name__, rank_zero_only=False)\n\n\nclass VQGANDataset(Dataset):\n    def __init__(\n        self,\n        filelist: str,\n        sample_rate: int = 32000,\n        hop_length: int = 640,\n        slice_frames: Optional[int] = None,\n    ):\n        super().__init__()\n\n        filelist = Path(filelist)\n        root = filelist.parent\n\n        self.files = [\n            root / line.strip()\n            for line in filelist.read_text(encoding=\"utf-8\").splitlines()\n            if line.strip()\n        ]\n        self.sample_rate = sample_rate\n        self.hop_length = hop_length\n        self.slice_frames = slice_frames\n\n    def __len__(self):\n        return len(self.files)\n\n    def get_item(self, idx):\n        file = self.files[idx]\n\n        audio, _ = librosa.load(file, sr=self.sample_rate, mono=True)\n\n        # Slice audio and features\n        if (\n            self.slice_frames is not None\n            and audio.shape[0] > self.slice_frames * self.hop_length\n        ):\n            start = np.random.randint(\n                0, audio.shape[0] - self.slice_frames * self.hop_length\n            )\n            audio = audio[start : start + self.slice_frames * self.hop_length]\n\n        if len(audio) == 0:\n            return None\n\n        max_value = np.abs(audio).max()\n        if max_value > 1.0:\n            audio = audio / max_value\n\n        return {\n            \"audio\": torch.from_numpy(audio),\n        }\n\n    def __getitem__(self, idx):\n        try:\n            return self.get_item(idx)\n        except Exception as e:\n            import traceback\n\n            traceback.print_exc()\n            logger.error(f\"Error loading {self.files[idx]}: {e}\")\n            return None\n\n\n@dataclass\nclass VQGANCollator:\n    def __call__(self, batch):\n        batch = [x for x in batch if x is not None]\n\n        audio_lengths = torch.tensor([len(x[\"audio\"]) for x in batch])\n        audio_maxlen = audio_lengths.max()\n\n        # Rounds up to nearest multiple of 2 (audio_lengths)\n        audios = []\n        for x in batch:\n            audios.append(\n                torch.nn.functional.pad(x[\"audio\"], (0, audio_maxlen - len(x[\"audio\"])))\n            )\n\n        return {\n            \"audios\": torch.stack(audios),\n            \"audio_lengths\": audio_lengths,\n        }\n\n\nclass VQGANDataModule(LightningDataModule):\n    def __init__(\n        self,\n        train_dataset: VQGANDataset,\n        val_dataset: VQGANDataset,\n        batch_size: int = 32,\n        num_workers: int = 4,\n        val_batch_size: Optional[int] = None,\n    ):\n        super().__init__()\n\n        self.train_dataset = train_dataset\n        self.val_dataset = val_dataset\n        self.batch_size = batch_size\n        self.val_batch_size = val_batch_size or batch_size\n        self.num_workers = num_workers\n\n    def train_dataloader(self):\n        return DataLoader(\n            self.train_dataset,\n            batch_size=self.batch_size,\n            collate_fn=VQGANCollator(),\n            num_workers=self.num_workers,\n            shuffle=True,\n            persistent_workers=True,\n        )\n\n    def val_dataloader(self):\n        return DataLoader(\n            self.val_dataset,\n            batch_size=self.val_batch_size,\n            collate_fn=VQGANCollator(),\n            num_workers=self.num_workers,\n            persistent_workers=True,\n        )\n\n\nif __name__ == \"__main__\":\n    dataset = VQGANDataset(\"data/LibriTTS_R/vq_train_filelist.txt\")\n    dataloader = DataLoader(\n        dataset, batch_size=4, shuffle=False, collate_fn=VQGANCollator()\n    )\n\n    for batch in dataloader:\n        print(batch[\"audios\"].shape)\n        print(batch[\"features\"].shape)\n        print(batch[\"audio_lengths\"])\n        print(batch[\"feature_lengths\"])\n        break\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/README.md",
    "content": "## i18n Folder Attribution\n\nThe `i18n` folder within the `fish_speech` directory contains files initially sourced from the RVC project. In compliance with the MIT license under which these files were released, we acknowledge the original authors and sources below:\n\n### fish_speech/i18n/core.py\n\n**Related code from RVC:**\n[https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/83d6a64e675d9bbd6e92ee450c5f807ed2bb54d8/i18n/i18n.py](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/83d6a64e675d9bbd6e92ee450c5f807ed2bb54d8/i18n/i18n.py)\n\n**Initial commit:**\nadd localization(添加本地化) [RVC-Project/Retrieval-based-Voice-Conversion-WebUI#35](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/pull/35)\n\n**Initial author:**\n[@L4Ph](https://github.com/L4Ph)\n\n### fish_speech/i18n/scan.py\n\n**Related code from RVC:**\n[https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/83d6a64e675d9bbd6e92ee450c5f807ed2bb54d8/i18n/scan_i18n.py](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/83d6a64e675d9bbd6e92ee450c5f807ed2bb54d8/i18n/scan_i18n.py)\n\n**Initial commit:**\nFile for detecting i18n missing keys [RVC-Project/Retrieval-based-Voice-Conversion-WebUI#1058](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/pull/1058)\n\n**Initial author:**\n[@towzeur](https://github.com/towzeur)\n\nWe appreciate the contributions of the RVC project and its authors.\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/__init__.py",
    "content": "from .core import i18n\n\n__all__ = [\"i18n\"]\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/core.py",
    "content": "import json\nimport locale\nfrom pathlib import Path\n\nI18N_FILE_PATH = Path(__file__).parent / \"locale\"\nDEFAULT_LANGUAGE = \"en_US\"\n\n\ndef load_language_list(language):\n    with open(I18N_FILE_PATH / f\"{language}.json\", \"r\", encoding=\"utf-8\") as f:\n        language_list = json.load(f)\n\n    return language_list\n\n\nclass I18nAuto:\n    def __init__(self):\n        i18n_file = Path(\".locale\")\n\n        if i18n_file.exists():\n            with open(i18n_file, \"r\", encoding=\"utf-8\") as f:\n                language = f.read().strip()\n        else:\n            # getlocale can't identify the system's language ((None, None))\n            language = locale.getdefaultlocale()[0]\n\n        if (I18N_FILE_PATH / f\"{language}.json\").exists() is False:\n            language = DEFAULT_LANGUAGE\n\n        self.language = language\n        self.language_map = load_language_list(language)\n\n    def __call__(self, key):\n        return self.language_map.get(key, key)\n\n    def __repr__(self):\n        return \"Use Language: \" + self.language\n\n\ni18n = I18nAuto()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/locale/en_US.json",
    "content": "{\n  \"16-mixed is recommended for 10+ series GPU\": \"16-mixed is recommended for 10+ series GPU\",\n  \"5 to 10 seconds of reference audio, useful for specifying speaker.\": \"5 to 10 seconds of reference audio, useful for specifying speaker.\",\n  \"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).\": \"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).\",\n  \"Accumulate Gradient Batches\": \"Accumulate Gradient Batches\",\n  \"Add to Processing Area\": \"Add to Processing Area\",\n  \"Added path successfully!\": \"Added path successfully!\",\n  \"Advanced Config\": \"Advanced Config\",\n  \"Base LLAMA Model\": \"Base LLAMA Model\",\n  \"Batch Inference\": \"Batch Inference\",\n  \"Batch Size\": \"Batch Size\",\n  \"Changing with the Model Path\": \"Changing with the Model Path\",\n  \"Chinese\": \"Chinese\",\n  \"Compile Model\": \"Compile Model\",\n  \"Compile the model can significantly reduce the inference time, but will increase cold start time\": \"Compile the model can significantly reduce the inference time, but will increase cold start time\",\n  \"Copy\": \"Copy\",\n  \"Data Preprocessing\": \"Data Preprocessing\",\n  \"Data Preprocessing Path\": \"Data Preprocessing Path\",\n  \"Data Source\": \"Data Source\",\n  \"Decoder Model Config\": \"Decoder Model Config\",\n  \"Decoder Model Path\": \"Decoder Model Path\",\n  \"Disabled\": \"Disabled\",\n  \"Enable Reference Audio\": \"Enable Reference Audio\",\n  \"English\": \"English\",\n  \"Error Message\": \"Error Message\",\n  \"File Preprocessing\": \"File Preprocessing\",\n  \"Generate\": \"Generate\",\n  \"Generated Audio\": \"Generated Audio\",\n  \"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format\": \"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format\",\n  \"Infer interface is closed\": \"Infer interface is closed\",\n  \"Inference Configuration\": \"Inference Configuration\",\n  \"Inference Server Configuration\": \"Inference Server Configuration\",\n  \"Inference Server Error\": \"Inference Server Error\",\n  \"Inferring interface is launched at {}\": \"Inferring interface is launched at {}\",\n  \"Initial Learning Rate\": \"Initial Learning Rate\",\n  \"Input Audio & Source Path for Transcription\": \"Input Audio & Source Path for Transcription\",\n  \"Input Text\": \"Input Text\",\n  \"Invalid path: {}\": \"Invalid path: {}\",\n  \"It is recommended to use CUDA, if you have low configuration, use CPU\": \"It is recommended to use CUDA, if you have low configuration, use CPU\",\n  \"Iterative Prompt Length, 0 means off\": \"Iterative Prompt Length, 0 means off\",\n  \"Japanese\": \"Japanese\",\n  \"LLAMA Configuration\": \"LLAMA Configuration\",\n  \"LLAMA Model Config\": \"LLAMA Model Config\",\n  \"LLAMA Model Path\": \"LLAMA Model Path\",\n  \"Labeling Device\": \"Labeling Device\",\n  \"LoRA Model to be merged\": \"LoRA Model to be merged\",\n  \"Maximum Audio Duration\": \"Maximum Audio Duration\",\n  \"Maximum Length per Sample\": \"Maximum Length per Sample\",\n  \"Maximum Training Steps\": \"Maximum Training Steps\",\n  \"Maximum tokens per batch, 0 means no limit\": \"Maximum tokens per batch, 0 means no limit\",\n  \"Merge\": \"Merge\",\n  \"Merge LoRA\": \"Merge LoRA\",\n  \"Merge successfully\": \"Merge successfully\",\n  \"Minimum Audio Duration\": \"Minimum Audio Duration\",\n  \"Model Output Path\": \"Model Output Path\",\n  \"Model Size\": \"Model Size\",\n  \"Move\": \"Move\",\n  \"Move files successfully\": \"Move files successfully\",\n  \"No audio generated, please check the input text.\": \"No audio generated, please check the input text.\",\n  \"No selected options\": \"No selected options\",\n  \"Number of Workers\": \"Number of Workers\",\n  \"Open Inference Server\": \"Open Inference Server\",\n  \"Open Labeler WebUI\": \"Open Labeler WebUI\",\n  \"Open Tensorboard\": \"Open Tensorboard\",\n  \"Opened labeler in browser\": \"Opened labeler in browser\",\n  \"Optional Label Language\": \"Optional Label Language\",\n  \"Optional online ver\": \"Optional online ver\",\n  \"Output Path\": \"Output Path\",\n  \"Path error, please check the model file exists in the corresponding path\": \"Path error, please check the model file exists in the corresponding path\",\n  \"Precision\": \"Precision\",\n  \"Probability of applying Speaker Condition\": \"Probability of applying Speaker Condition\",\n  \"Put your text here.\": \"Put your text here.\",\n  \"Reference Audio\": \"Reference Audio\",\n  \"Reference Text\": \"Reference Text\",\n  \"Related code and weights are released under CC BY-NC-SA 4.0 License.\": \"Related code and weights are released under CC BY-NC-SA 4.0 License.\",\n  \"Remove Selected Data\": \"Remove Selected Data\",\n  \"Removed path successfully!\": \"Removed path successfully!\",\n  \"Repetition Penalty\": \"Repetition Penalty\",\n  \"Save model every n steps\": \"Save model every n steps\",\n  \"Select LLAMA ckpt\": \"Select LLAMA ckpt\",\n  \"Select VITS ckpt\": \"Select VITS ckpt\",\n  \"Select VQGAN ckpt\": \"Select VQGAN ckpt\",\n  \"Select source file processing method\": \"Select source file processing method\",\n  \"Select the model to be trained (Depending on the Tab page you are on)\": \"Select the model to be trained (Depending on the Tab page you are on)\",\n  \"Selected: {}\": \"Selected: {}\",\n  \"Speaker\": \"Speaker\",\n  \"Speaker is identified by the folder name\": \"Speaker is identified by the folder name\",\n  \"Start Training\": \"Start Training\",\n  \"Streaming Audio\": \"Streaming Audio\",\n  \"Streaming Generate\": \"Streaming Generate\",\n  \"Tensorboard Host\": \"Tensorboard Host\",\n  \"Tensorboard Log Path\": \"Tensorboard Log Path\",\n  \"Tensorboard Port\": \"Tensorboard Port\",\n  \"Tensorboard interface is closed\": \"Tensorboard interface is closed\",\n  \"Tensorboard interface is launched at {}\": \"Tensorboard interface is launched at {}\",\n  \"Text is too long, please keep it under {} characters.\": \"Text is too long, please keep it under {} characters.\",\n  \"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.\": \"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.\",\n  \"Training Configuration\": \"Training Configuration\",\n  \"Training Error\": \"Training Error\",\n  \"Training stopped\": \"Training stopped\",\n  \"Type name of the speaker\": \"Type name of the speaker\",\n  \"Type the path or select from the dropdown\": \"Type the path or select from the dropdown\",\n  \"Use LoRA\": \"Use LoRA\",\n  \"Use LoRA can save GPU memory, but may reduce the quality of the model\": \"Use LoRA can save GPU memory, but may reduce the quality of the model\",\n  \"Use filelist\": \"Use filelist\",\n  \"Use large for 10G+ GPU, medium for 5G, small for 2G\": \"Use large for 10G+ GPU, medium for 5G, small for 2G\",\n  \"VITS Configuration\": \"VITS Configuration\",\n  \"VQGAN Configuration\": \"VQGAN Configuration\",\n  \"Validation Batch Size\": \"Validation Batch Size\",\n  \"View the status of the preprocessing folder (use the slider to control the depth of the tree)\": \"View the status of the preprocessing folder (use the slider to control the depth of the tree)\",\n  \"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.\": \"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.\",\n  \"WebUI Host\": \"WebUI Host\",\n  \"WebUI Port\": \"WebUI Port\",\n  \"Whisper Model\": \"Whisper Model\",\n  \"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).\": \"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).\",\n  \"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU\": \"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU\",\n  \"latest\": \"latest\",\n  \"new\": \"new\",\n  \"Realtime Transform Text\": \"Realtime Transform Text\",\n  \"Normalization Result Preview (Currently Only Chinese)\": \"Normalization Result Preview (Currently Only Chinese)\",\n  \"Text Normalization\": \"Text Normalization\",\n  \"Select Example Audio\": \"Select Example Audio\"\n}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/locale/es_ES.json",
    "content": "{\n  \"16-mixed is recommended for 10+ series GPU\": \"se recomienda 16-mixed para GPU de la serie 10+\",\n  \"5 to 10 seconds of reference audio, useful for specifying speaker.\": \"5 a 10 segundos de audio de referencia, útil para especificar el hablante.\",\n  \"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).\": \"Un modelo de texto a voz basado en VQ-GAN y Llama desarrollado por [Fish Audio](https://fish.audio).\",\n  \"Accumulate Gradient Batches\": \"Acumular lotes de gradientes\",\n  \"Add to Processing Area\": \"Agregar al Área de Procesamiento\",\n  \"Added path successfully!\": \"¡Ruta agregada exitosamente!\",\n  \"Advanced Config\": \"Configuración Avanzada\",\n  \"Base LLAMA Model\": \"Modelo Base LLAMA\",\n  \"Batch Inference\": \"Inferencia por Lote\",\n  \"Batch Size\": \"Tamaño del Lote\",\n  \"Changing with the Model Path\": \"Cambiando con la Ruta del Modelo\",\n  \"Chinese\": \"Chino\",\n  \"Compile Model\": \"Compilar Modelo\",\n  \"Compile the model can significantly reduce the inference time, but will increase cold start time\": \"Compilar el modelo puede reducir significativamente el tiempo de inferencia, pero aumentará el tiempo de inicio en frío\",\n  \"Copy\": \"Copiar\",\n  \"Data Preprocessing\": \"Preprocesamiento de Datos\",\n  \"Data Preprocessing Path\": \"Ruta de Preprocesamiento de Datos\",\n  \"Data Source\": \"Fuente de Datos\",\n  \"Decoder Model Config\": \"Configuración del modelo decodificador\",\n  \"Decoder Model Path\": \"Ruta del modelo decodificador\",\n  \"Disabled\": \"Desactivado\",\n  \"Enable Reference Audio\": \"Habilitar Audio de Referencia\",\n  \"English\": \"Inglés\",\n  \"Error Message\": \"Mensaje de Error\",\n  \"File Preprocessing\": \"Preprocesamiento de Archivos\",\n  \"Generate\": \"Generar\",\n  \"Generated Audio\": \"Audio Generado\",\n  \"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format\": \"Si no hay texto correspondiente para el audio, aplique ASR para asistencia, soporte para formato .txt o .lab\",\n  \"Infer interface is closed\": \"La interfaz de inferencia está cerrada\",\n  \"Inference Configuration\": \"Configuración de Inferencia\",\n  \"Inference Server Configuration\": \"Configuración del Servidor de Inferencia\",\n  \"Inference Server Error\": \"Error del Servidor de Inferencia\",\n  \"Inferring interface is launched at {}\": \"La interfaz de inferencia se ha lanzado en {}\",\n  \"Initial Learning Rate\": \"Tasa de Aprendizaje Inicial\",\n  \"Input Audio & Source Path for Transcription\": \"Audio de Entrada y Ruta de Origen para Transcripción\",\n  \"Input Text\": \"Texto de Entrada\",\n  \"Invalid path: {}\": \"Ruta inválida: {}\",\n  \"It is recommended to use CUDA, if you have low configuration, use CPU\": \"Se recomienda usar CUDA, si tiene una configuración baja, use CPU\",\n  \"Iterative Prompt Length, 0 means off\": \"Longitud de la Indicación Iterativa, 0 significa apagado\",\n  \"Japanese\": \"Japonés\",\n  \"LLAMA Configuration\": \"Configuración de LLAMA\",\n  \"LLAMA Model Config\": \"Configuración del Modelo LLAMA\",\n  \"LLAMA Model Path\": \"Ruta del Modelo LLAMA\",\n  \"Labeling Device\": \"Dispositivo de Etiquetado\",\n  \"LoRA Model to be merged\": \"Modelo LoRA a fusionar\",\n  \"Maximum Audio Duration\": \"Duración máxima de audio\",\n  \"Maximum Length per Sample\": \"Longitud Máxima por Muestra\",\n  \"Maximum Training Steps\": \"Pasos Máximos de Entrenamiento\",\n  \"Maximum tokens per batch, 0 means no limit\": \"Máximo de tokens por lote, 0 significa sin límite\",\n  \"Merge\": \"Fusionar\",\n  \"Merge LoRA\": \"Fusionar LoRA\",\n  \"Merge successfully\": \"Fusionado exitosamente\",\n  \"Minimum Audio Duration\": \"Duración mínima de audio\",\n  \"Model Output Path\": \"Ruta de Salida del Modelo\",\n  \"Model Size\": \"Tamaño del Modelo\",\n  \"Move\": \"Mover\",\n  \"Move files successfully\": \"Archivos movidos exitosamente\",\n  \"No audio generated, please check the input text.\": \"No se generó audio, por favor verifique el texto de entrada.\",\n  \"No selected options\": \"No hay opciones seleccionadas\",\n  \"Number of Workers\": \"Número de Trabajadores\",\n  \"Open Inference Server\": \"Abrir Servidor de Inferencia\",\n  \"Open Labeler WebUI\": \"Abrir Interfaz Web del Etiquetador\",\n  \"Open Tensorboard\": \"Abrir Tensorboard\",\n  \"Opened labeler in browser\": \"Se abrió el etiquetador en el navegador\",\n  \"Optional Label Language\": \"Idioma de Etiquetado Opcional\",\n  \"Optional online ver\": \"Ver en línea opcional\",\n  \"Output Path\": \"Ruta de Salida\",\n  \"Path error, please check the model file exists in the corresponding path\": \"Error de ruta, por favor verifique que el archivo del modelo exista en la ruta correspondiente\",\n  \"Precision\": \"Precisión\",\n  \"Probability of applying Speaker Condition\": \"Probabilidad de aplicar Condición de Hablante\",\n  \"Put your text here.\": \"Ponga su texto aquí.\",\n  \"Reference Audio\": \"Audio de Referencia\",\n  \"Reference Text\": \"Texto de Referencia\",\n  \"Related code and weights are released under CC BY-NC-SA 4.0 License.\": \"El código relacionado y los pesos se publican bajo la Licencia CC BY-NC-SA 4.0.\",\n  \"Remove Selected Data\": \"Eliminar Datos Seleccionados\",\n  \"Removed path successfully!\": \"¡Ruta eliminada exitosamente!\",\n  \"Repetition Penalty\": \"Penalización por Repetición\",\n  \"Save model every n steps\": \"Guardar modelo cada n pasos\",\n  \"Select LLAMA ckpt\": \"Seleccionar punto de control LLAMA\",\n  \"Select VITS ckpt\": \"Seleccionar punto de control VITS\",\n  \"Select VQGAN ckpt\": \"Seleccionar punto de control VQGAN\",\n  \"Select source file processing method\": \"Seleccione el método de procesamiento de archivos fuente\",\n  \"Select the model to be trained (Depending on the Tab page you are on)\": \"Seleccione el modelo a entrenar (Dependiendo de la pestaña en la que se encuentre)\",\n  \"Selected: {}\": \"Seleccionado: {}\",\n  \"Speaker\": \"Hablante\",\n  \"Speaker is identified by the folder name\": \"El hablante se identifica por el nombre de la carpeta\",\n  \"Start Training\": \"Iniciar Entrenamiento\",\n  \"Streaming Audio\": \"transmisión de audio\",\n  \"Streaming Generate\": \"síntesis en flujo\",\n  \"Tensorboard Host\": \"Host de Tensorboard\",\n  \"Tensorboard Log Path\": \"Ruta de Registro de Tensorboard\",\n  \"Tensorboard Port\": \"Puerto de Tensorboard\",\n  \"Tensorboard interface is closed\": \"La interfaz de Tensorboard está cerrada\",\n  \"Tensorboard interface is launched at {}\": \"La interfaz de Tensorboard se ha lanzado en {}\",\n  \"Text is too long, please keep it under {} characters.\": \"El texto es demasiado largo, por favor manténgalo por debajo de {} caracteres.\",\n  \"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.\": \"La ruta de la carpeta de entrada a la izquierda o la lista de archivos. Ya sea que esté marcado o no, se utilizará para el entrenamiento posterior en esta lista.\",\n  \"Training Configuration\": \"Configuración de Entrenamiento\",\n  \"Training Error\": \"Error de Entrenamiento\",\n  \"Training stopped\": \"Entrenamiento detenido\",\n  \"Type name of the speaker\": \"Escriba el nombre del hablante\",\n  \"Type the path or select from the dropdown\": \"Escriba la ruta o seleccione de la lista desplegable\",\n  \"Use LoRA\": \"Usar LoRA\",\n  \"Use LoRA can save GPU memory, but may reduce the quality of the model\": \"Usar LoRA puede ahorrar memoria GPU, pero puede reducir la calidad del modelo\",\n  \"Use filelist\": \"Usar lista de archivos\",\n  \"Use large for 10G+ GPU, medium for 5G, small for 2G\": \"Use grande para GPU de 10G+, mediano para 5G, pequeño para 2G\",\n  \"VITS Configuration\": \"Configuración de VITS\",\n  \"VQGAN Configuration\": \"Configuración de VQGAN\",\n  \"Validation Batch Size\": \"Tamaño del Lote de Validación\",\n  \"View the status of the preprocessing folder (use the slider to control the depth of the tree)\": \"Vea el estado de la carpeta de preprocesamiento (use el control deslizante para controlar la profundidad del árbol)\",\n  \"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.\": \"No somos responsables de ningún mal uso del modelo, por favor considere sus leyes y regulaciones locales antes de usarlo.\",\n  \"WebUI Host\": \"Host de WebUI\",\n  \"WebUI Port\": \"Puerto de WebUI\",\n  \"Whisper Model\": \"Modelo Whisper\",\n  \"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).\": \"Puede encontrar el código fuente [aquí](https://github.com/fishaudio/fish-speech) y los modelos [aquí](https://huggingface.co/fishaudio/fish-speech-1).\",\n  \"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU\": \"Se recomienda bf16-true para GPU de la serie 30+, se recomienda 16-mixed para GPU de la serie 10+\",\n  \"latest\": \"más reciente\",\n  \"new\": \"nuevo\",\n  \"Realtime Transform Text\": \"Transformación de Texto en Tiempo Real\",\n  \"Normalization Result Preview (Currently Only Chinese)\": \"Vista Previa del Resultado de Normalización (Actualmente Solo Chino)\",\n  \"Text Normalization\": \"Normalización de Texto\",\n  \"Select Example Audio\": \"Selecionar áudio de exemplo\"\n}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/locale/ja_JP.json",
    "content": "{\n  \"16-mixed is recommended for 10+ series GPU\": \"10シリーズ以降のGPUには16-mixedをお勧めします\",\n  \"5 to 10 seconds of reference audio, useful for specifying speaker.\": \"話者を指定するのに役立つ、5～10秒のリファレンスオーディオ。\",\n  \"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).\": \"[Fish Audio](https://fish.audio)が開発したVQ-GANとLlamaに基づくテキスト音声合成モデル。\",\n  \"Accumulate Gradient Batches\": \"勾配バッチの累積\",\n  \"Add to Processing Area\": \"処理エリアに追加\",\n  \"Added path successfully!\": \"パスの追加に成功しました！\",\n  \"Advanced Config\": \"詳細設定\",\n  \"Base LLAMA Model\": \"基本LLAMAモデル\",\n  \"Batch Inference\": \"バッチ推論\",\n  \"Batch Size\": \"バッチサイズ\",\n  \"Changing with the Model Path\": \"モデルのパスに伴って変化する\",\n  \"Chinese\": \"中国語\",\n  \"Compile Model\": \"モデルのコンパイル\",\n  \"Compile the model can significantly reduce the inference time, but will increase cold start time\": \"モデルをコンパイルすると推論時間を大幅に短縮できますが、コールドスタート時間が長くなります\",\n  \"Copy\": \"コピー\",\n  \"Data Preprocessing\": \"データ前処理\",\n  \"Data Preprocessing Path\": \"データ前処理パス\",\n  \"Data Source\": \"データソース\",\n  \"Decoder Model Config\": \"デコーダーモデルの構成\",\n  \"Decoder Model Path\": \"デコーダーモデルのパス\",\n  \"Disabled\": \"無効\",\n  \"Enable Reference Audio\": \"リファレンスオーディオを有効にする\",\n  \"English\": \"英語\",\n  \"Error Message\": \"エラーメッセージ\",\n  \"File Preprocessing\": \"文書前处理\",\n  \"Generate\": \"生成\",\n  \"Generated Audio\": \"生成されたオーディオ\",\n  \"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format\": \"音声に対応するテキストがない場合は、ASRを適用してサポートします。.txtまたは.lab形式をサポートしています\",\n  \"Infer interface is closed\": \"推論インターフェースが閉じられています\",\n  \"Inference Configuration\": \"推論設定\",\n  \"Inference Server Configuration\": \"推論サーバー設定\",\n  \"Inference Server Error\": \"推論サーバーエラー\",\n  \"Inferring interface is launched at {}\": \"推論インターフェースが{}で起動しました\",\n  \"Initial Learning Rate\": \"初期学習率\",\n  \"Input Audio & Source Path for Transcription\": \"入力オーディオと文字起こしのソースパス\",\n  \"Input Text\": \"入力テキスト\",\n  \"Invalid path: {}\": \"無効なパス: {}\",\n  \"It is recommended to use CUDA, if you have low configuration, use CPU\": \"CUDAの使用をお勧めします。低い構成の場合はCPUを使用してください\",\n  \"Iterative Prompt Length, 0 means off\": \"反復プロンプト長。0はオフを意味します\",\n  \"Japanese\": \"日本語\",\n  \"LLAMA Configuration\": \"LLAMA設定\",\n  \"LLAMA Model Config\": \"LLAMAモデル設定\",\n  \"LLAMA Model Path\": \"LLAMAモデルパス\",\n  \"Labeling Device\": \"ラベリングデバイス\",\n  \"LoRA Model to be merged\": \"マージするLoRAモデル\",\n  \"Maximum Audio Duration\": \"最大オーディオの長さ\",\n  \"Maximum Length per Sample\": \"サンプルあたりの最大長\",\n  \"Maximum Training Steps\": \"最大トレーニングステップ数\",\n  \"Maximum tokens per batch, 0 means no limit\": \"バッチあたりの最大トークン数。0は制限なしを意味します\",\n  \"Merge\": \"マージ\",\n  \"Merge LoRA\": \"LoRAのマージ\",\n  \"Merge successfully\": \"マージに成功しました\",\n  \"Minimum Audio Duration\": \"最小オーディオの長さ\",\n  \"Model Output Path\": \"モデル出力パス\",\n  \"Model Size\": \"モデルサイズ\",\n  \"Move\": \"移動\",\n  \"Move files successfully\": \"ファイルの移動に成功しました\",\n  \"No audio generated, please check the input text.\": \"オーディオが生成されていません。入力テキストを確認してください。\",\n  \"No selected options\": \"選択されたオプションはありません\",\n  \"Number of Workers\": \"ワーカー数\",\n  \"Open Inference Server\": \"推論サーバーを開く\",\n  \"Open Labeler WebUI\": \"ラベラーWebUIを開く\",\n  \"Open Tensorboard\": \"Tensorboardを開く\",\n  \"Opened labeler in browser\": \"ブラウザでラベラーを開きました\",\n  \"Optional Label Language\": \"オプションのラベル言語\",\n  \"Optional online ver\": \"オプションのオンラインバージョン\",\n  \"Output Path\": \"出力パス\",\n  \"Path error, please check the model file exists in the corresponding path\": \"パスエラー。対応するパスにモデルファイルが存在するか確認してください\",\n  \"Precision\": \"精度\",\n  \"Probability of applying Speaker Condition\": \"話者条件を適用する確率\",\n  \"Put your text here.\": \"ここにテキストを入力してください。\",\n  \"Reference Audio\": \"リファレンスオーディオ\",\n  \"Reference Text\": \"リファレンステキスト\",\n  \"Related code and weights are released under CC BY-NC-SA 4.0 License.\": \"関連コードと重みはCC BY-NC-SA 4.0ライセンスの下でリリースされます。\",\n  \"Remove Selected Data\": \"選択したデータを削除\",\n  \"Removed path successfully!\": \"パスの削除に成功しました！\",\n  \"Repetition Penalty\": \"反復ペナルティ\",\n  \"Save model every n steps\": \"nステップごとにモデルを保存\",\n  \"Select LLAMA ckpt\": \" LLAMA チェックポイントを選択\",\n  \"Select VITS ckpt\": \"VITS チェックポイントを選択\",\n  \"Select VQGAN ckpt\": \"VQGAN チェックポイントを選択\",\n  \"Select source file processing method\": \"ソースファイルの処理方法を選択\",\n  \"Select the model to be trained (Depending on the Tab page you are on)\": \"タブページに応じてトレーニングするモデルを選択してください\",\n  \"Selected: {}\": \"選択済み: {}\",\n  \"Speaker\": \"話者\",\n  \"Speaker is identified by the folder name\": \"話者はフォルダ名で識別されます\",\n  \"Start Training\": \"トレーニング開始\",\n  \"Streaming Audio\": \"ストリーミングオーディオ\",\n  \"Streaming Generate\": \"ストリーミング合成\",\n  \"Tensorboard Host\": \"Tensorboardホスト\",\n  \"Tensorboard Log Path\": \"Tensorboardログパス\",\n  \"Tensorboard Port\": \"Tensorboardポート\",\n  \"Tensorboard interface is closed\": \"Tensorboardインターフェースが閉じられています\",\n  \"Tensorboard interface is launched at {}\": \"Tensorboardインターフェースが{}で起動されました\",\n  \"Text is too long, please keep it under {} characters.\": \"テキストが長すぎます。{}文字以内に抑えてください。\",\n  \"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.\": \"左側の入力フォルダまたはファイルリストのパス。チェックの有無にかかわらず、このリストの後続のトレーニングに使用されます。\",\n  \"Training Configuration\": \"トレーニング設定\",\n  \"Training Error\": \"トレーニングエラー\",\n  \"Training stopped\": \"トレーニングが停止しました\",\n  \"Type name of the speaker\": \"話者の名前を入力\",\n  \"Type the path or select from the dropdown\": \"パスを入力するか、ドロップダウンから選択してください\",\n  \"Use LoRA\": \"LoRAを使用\",\n  \"Use LoRA can save GPU memory, but may reduce the quality of the model\": \"LoRAを使用するとGPUメモリを節約できますが、モデルの品質が低下する可能性があります\",\n  \"Use filelist\": \"ファイルリストを使用\",\n  \"Use large for 10G+ GPU, medium for 5G, small for 2G\": \"10G以上のGPUには大、5Gには中、2Gには小を使用してください\",\n  \"VITS Configuration\": \"VITS の構成\",\n  \"VQGAN Configuration\": \"VQGAN の構成\",\n  \"Validation Batch Size\": \"検証バッチサイズ\",\n  \"View the status of the preprocessing folder (use the slider to control the depth of the tree)\": \"前処理フォルダの状態を表示（スライダーを使用してツリーの深さを制御）\",\n  \"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.\": \"モデルの誤用については一切責任を負いません。使用する前に、現地の法律と規制を考慮してください。\",\n  \"WebUI Host\": \"WebUIホスト\",\n  \"WebUI Port\": \"WebUIポート\",\n  \"Whisper Model\": \"Whisperモデル\",\n  \"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).\": \"ソースコードは[こちら](https://github.com/fishaudio/fish-speech)、モデルは[こちら](https://huggingface.co/fishaudio/fish-speech-1)にあります。\",\n  \"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU\": \"30シリーズ以降のGPUにはbf16-trueを、10シリーズ以降のGPUには16-mixedをお勧めします\",\n  \"latest\": \"最新\",\n  \"new\": \"新規\",\n  \"Realtime Transform Text\": \"リアルタイム変換テキスト\",\n  \"Normalization Result Preview (Currently Only Chinese)\": \"正規化結果プレビュー（現在は中国語のみ）\",\n  \"Text Normalization\": \"テキスト正規化\",\n  \"Select Example Audio\": \"サンプル音声を選択\"\n}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/locale/ko_KR.json",
    "content": "{\n  \"16-mixed is recommended for 10+ series GPU\": \"10+ 시리즈 GPU에는 16-mixed를 권장합니다.\",\n  \"5 to 10 seconds of reference audio, useful for specifying speaker.\": \"화자를 특정하는 데 유의미한 5~10초의 길이의 참조 오디오 데이터.\",\n  \"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).\": \"[Fish Audio](https://fish.audio)에서 개발한 VQ-GAN 및 Llama 기반의 텍스트 음성 변환 모델.\",\n  \"Accumulate Gradient Batches\": \"그라디언트 배치 누적\",\n  \"Add to Processing Area\": \"처리 영역에 추가\",\n  \"Added path successfully!\": \"경로가 성공적으로 추가되었습니다!\",\n  \"Advanced Config\": \"고급 설정\",\n  \"Base LLAMA Model\": \"기본 LLAMA 모델\",\n  \"Batch Inference\": \"배치 추론\",\n  \"Batch Size\": \"배치 크기\",\n  \"Changing with the Model Path\": \"모델 경로에 따라 변경 중\",\n  \"Chinese\": \"중국어\",\n  \"Compile Model\": \"모델 컴파일\",\n  \"Compile the model can significantly reduce the inference time, but will increase cold start time\": \"모델을 컴파일하면 추론 시간이 크게 줄어들지만, 초기 시작 시간이 길어집니다.\",\n  \"Copy\": \"복사\",\n  \"Data Preprocessing\": \"데이터 전처리\",\n  \"Data Preprocessing Path\": \"데이터 전처리 경로\",\n  \"Data Source\": \"데이터 소스\",\n  \"Decoder Model Config\": \"디코더 모델 설정\",\n  \"Decoder Model Path\": \"디코더 모델 경로\",\n  \"Disabled\": \"비활성화 됨\",\n  \"Enable Reference Audio\": \"참고 음성 활성화\",\n  \"English\": \"영어\",\n  \"Error Message\": \"오류 메시지\",\n  \"File Preprocessing\": \"파일 전처리\",\n  \"Generate\": \"생성\",\n  \"Generated Audio\": \"생성된 오디오\",\n  \"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format\": \"오디오애 대응하는 텍스트가 없을 경우, ASR을 적용해 지원하며, .txt 또는 .lab 형식을 지원합니다.\",\n  \"Infer interface is closed\": \"추론 인터페이스가 닫혔습니다.\",\n  \"Inference Configuration\": \"추론 설정\",\n  \"Inference Server Configuration\": \"추론 서버 설정\",\n  \"Inference Server Error\": \"추론 서버 오류\",\n  \"Inferring interface is launched at {}\": \"추론 인터페이스가 {}에서 시작되었습니다.\",\n  \"Initial Learning Rate\": \"초기 학습률\",\n  \"Input Audio & Source Path for Transcription\": \"전사할 입력 오디오 및 소스 경로\",\n  \"Input Text\": \"입력 텍스트\",\n  \"Invalid path: {}\": \"유효하지 않은 경로: {}\",\n  \"It is recommended to use CUDA, if you have low configuration, use CPU\": \"CUDA 사용을 권장하며, 낮은 사양일 경우 CPU를 사용하는 것을 권장합니다.\",\n  \"Iterative Prompt Length, 0 means off\": \"반복 프롬프트 길이. (0:비활성화)\",\n  \"Japanese\": \"일본어\",\n  \"LLAMA Configuration\": \"LLAMA 설정\",\n  \"LLAMA Model Config\": \"LLAMA 모델 설정\",\n  \"LLAMA Model Path\": \"LLAMA 모델 경로\",\n  \"Labeling Device\": \"라벨링 장치\",\n  \"LoRA Model to be merged\": \"병합할 LoRA 모델\",\n  \"Maximum Audio Duration\": \"최대 오디오 길이\",\n  \"Maximum Length per Sample\": \"샘플당 최대 길이\",\n  \"Maximum Training Steps\": \"최대 학습 단계\",\n  \"Maximum tokens per batch, 0 means no limit\": \"배치당 최대 토큰 수(0:제한 없음)\",\n  \"Merge\": \"병합\",\n  \"Merge LoRA\": \"LoRA 병합\",\n  \"Merge successfully\": \"성공적으로 병합 되었습니다.\",\n  \"Minimum Audio Duration\": \"최소 오디오 길이\",\n  \"Model Output Path\": \"모델 출력 경로\",\n  \"Model Size\": \"모델 크기\",\n  \"Move\": \"이동\",\n  \"Move files successfully\": \"파일이 성공적으로 이동되었습니다.\",\n  \"No audio generated, please check the input text.\": \"생성된 오디오가 없습니다. 입력된 텍스트를 확인하세요.\",\n  \"No selected options\": \"옵션이 선택되지 않았습니다.\",\n  \"Number of Workers\": \"작업자 수\",\n  \"Open Inference Server\": \"추론 서버 열기\",\n  \"Open Labeler WebUI\": \"라벨러 WebUI 열기\",\n  \"Open Tensorboard\": \"Tensorboard 열기\",\n  \"Opened labeler in browser\": \"브라우저에서 라벨러가 열렸습니다.\",\n  \"Optional Label Language\": \"선택적 라벨 언어\",\n  \"Optional online ver\": \"온라인 버전 선택\",\n  \"Output Path\": \"출력 경로\",\n  \"Path error, please check the model file exists in the corresponding path\": \"경로 오류, 해당 경로에 모델 파일이 있는지 확인하십시오.\",\n  \"Precision\": \"정밀도\",\n  \"Probability of applying Speaker Condition\": \"화자 조건 적용 확률\",\n  \"Put your text here.\": \"여기에 텍스트를 입력하세요.\",\n  \"Reference Audio\": \"참고 오디오\",\n  \"Reference Text\": \"참고 텍스트\",\n  \"Related code and weights are released under CC BY-NC-SA 4.0 License.\": \"관련 코드 및 가중치는 CC BY-NC-SA 4.0 라이선스 하에 배포됩니다.\",\n  \"Remove Selected Data\": \"선택한 데이터 제거\",\n  \"Removed path successfully!\": \"경로가 성공적으로 제거되었습니다!\",\n  \"Repetition Penalty\": \"반복 패널티\",\n  \"Save model every n steps\": \"n 단계마다 모델 저장\",\n  \"Select LLAMA ckpt\": \"LLAMA ckpt 선택\",\n  \"Select VITS ckpt\": \"VITS ckpt 선택\",\n  \"Select VQGAN ckpt\": \"VQGAN ckpt 선택\",\n  \"Select source file processing method\": \"소스 파일 처리 방법 선택\",\n  \"Select the model to be trained (Depending on the Tab page you are on)\": \"학습할 모델 선택(탭 페이지에 따라 다름)\",\n  \"Selected: {}\": \"선택됨: {}\",\n  \"Speaker\": \"화자\",\n  \"Speaker is identified by the folder name\": \"화자는 폴더 이름으로 식별됩니다\",\n  \"Start Training\": \"학습 시작\",\n  \"Streaming Audio\": \"스트리밍 오디오\",\n  \"Streaming Generate\": \"스트리밍 생성\",\n  \"Tensorboard Host\": \"Tensorboard 호스트\",\n  \"Tensorboard Log Path\": \"Tensorboard 로그 경로\",\n  \"Tensorboard Port\": \"Tensorboard 포트\",\n  \"Tensorboard interface is closed\": \"Tensorboard 인터페이스가 닫혔습니다\",\n  \"Tensorboard interface is launched at {}\": \"Tensorboard 인터페이스가 {}에서 시작되었습니다.\",\n  \"Text is too long, please keep it under {} characters.\": \"텍스트가 너무 깁니다. {}자 이하로 입력해주세요.\",\n  \"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.\": \"왼쪽의 입력 폴더 경로 또는 파일 목록의 경로. 체크 여부에 관계없이 이 목록에서 후속 학습에 사용됩니다.\",\n  \"Training Configuration\": \"학습 설정\",\n  \"Training Error\": \"학습 오류\",\n  \"Training stopped\": \"학습이 중지되었습니다.\",\n  \"Type name of the speaker\": \"화자의 이름을 입력하세요.\",\n  \"Type the path or select from the dropdown\": \"경로를 입력하거나 드롭다운에서 선택하세요.\",\n  \"Use LoRA\": \"LoRA 사용\",\n  \"Use LoRA can save GPU memory, but may reduce the quality of the model\": \"LoRA를 사용하면 GPU 메모리를 절약할 수 있지만, 모델의 품질이 저하될 수 있습니다.\",\n  \"Use filelist\": \"파일 목록 사용\",\n  \"Use large for 10G+ GPU, medium for 5G, small for 2G\": \"10G+ GPU 환경에선 large, 5G에선 medium, 2G에선 small을 사용할 것을 권장합니다.\",\n  \"VITS Configuration\": \"VITS 설정\",\n  \"VQGAN Configuration\": \"VQGAN 설정\",\n  \"Validation Batch Size\": \"검증 배치 크기\",\n  \"View the status of the preprocessing folder (use the slider to control the depth of the tree)\": \"전처리 폴더의 상태를 확인합니다(슬라이더를 사용하여 트리의 깊이를 조절합니다)\",\n  \"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.\": \"모델의 오용에 대해 책임지지 않습니다. 사용하기 전에 현지 법률과 규정을 고려하시길 바랍니다.\",\n  \"WebUI Host\": \"WebUI 호스트\",\n  \"WebUI Port\": \"WebUI 포트\",\n  \"Whisper Model\": \"Whisper 모델\",\n  \"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).\": \"소스 코드는 [이곳](https://github.com/fishaudio/fish-speech)에서, 모델은 [이곳](https://huggingface.co/fishaudio/fish-speech-1)에서 확인하실 수 있습니다.\",\n  \"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU\": \"30+ 시리즈 GPU에는 bf16-true를, 10+ 시리즈 GPU에는 16-mixed를 권장합니다\",\n  \"latest\": \"최신\",\n  \"new\": \"새로운\",\n  \"Realtime Transform Text\": \"실시간 텍스트 변환\",\n  \"Normalization Result Preview (Currently Only Chinese)\": \"정규화 결과 미리보기(현재 중국어만 지원)\",\n  \"Text Normalization\": \"텍스트 정규화\",\n  \"Select Example Audio\": \"예시 오디오 선택\"\n}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/locale/pt_BR.json",
    "content": "{\n  \"5 to 10 seconds of reference audio, useful for specifying speaker.\": \"5 a 10 segundos de áudio de referência, útil para especificar o orador.\",\n  \"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).\": \"Um modelo de texto para fala baseado em VQ-GAN e Llama desenvolvido por [Fish Audio](https://fish.audio).\",\n  \"Accumulate Gradient Batches\": \"Acumular Lotes de Gradiente\",\n  \"Add to Processing Area\": \"Adicionar à Área de Processamento\",\n  \"Added path successfully!\": \"Caminho adicionado com sucesso!\",\n  \"Advanced Config\": \"Configuração Avançada\",\n  \"Base LLAMA Model\": \"Modelo LLAMA Base\",\n  \"Batch Inference\": \"Inferência em Lote\",\n  \"Batch Size\": \"Tamanho do Lote\",\n  \"Changing with the Model Path\": \"Alterando com o Caminho do Modelo\",\n\n  \"Compile Model\": \"Compilar Modelo\",\n  \"Compile the model can significantly reduce the inference time, but will increase cold start time\": \"Compilar o modelo pode reduzir significativamente o tempo de inferência, mas aumentará a latência inicial\",\n  \"Copy\": \"Copiar\",\n  \"Data Preprocessing\": \"Pré-processamento de Dados\",\n  \"Data Preprocessing Path\": \"Caminho de Pré-processamento de Dados\",\n  \"Data Source\": \"Fonte de Dados\",\n  \"Decoder Model Config\": \"Configuração do Modelo Decodificador\",\n  \"Decoder Model Path\": \"Caminho do Modelo Decodificador\",\n  \"Disabled\": \"Desativado\",\n  \"Enable Initial Prompt\": \"Habilitar Prompt Inicial\",\n  \"Enable Reference Audio\": \"Habilitar Áudio de Referência\",\n  \"English\": \"Inglês\",\n  \"Japanese\": \"Japonês\",\n  \"Chinese\": \"Chinês\",\n  \"Portuguese\": \"Português\",\n  \"Spanish\": \"Espanhol\",\n  \"Error Message\": \"Mensagem de Erro\",\n  \"Faster Whisper, Up to 5g GPU memory usage\": \"Faster Whisper (Usa até 5 GB de vRAM)\",\n  \"File Preprocessing\": \"Pré-processamento de Arquivos\",\n  \"Generate\": \"Gerar\",\n  \"Generated Audio\": \"Áudio Gerado\",\n  \"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format\": \"Se não houver texto correspondente ao áudio, utilize o ASR para assistência (formatos .txt ou .lab)\",\n  \"Infer interface is closed\": \"A interface de inferência foi fechada\",\n  \"Inference Configuration\": \"Configuração de Inferência\",\n  \"Inference Server Configuration\": \"Configuração do Servidor de Inferência\",\n  \"Inference Server Error\": \"Erro do Servidor de Inferência\",\n  \"Inferring interface is launched at {}\": \"A interface de inferência foi iniciada em {}\",\n  \"Initial Learning Rate\": \"Taxa de Aprendizagem Inicial\",\n  \"Initial Prompt\": \"Prompt Inicial\",\n  \"Initial prompt can provide contextual or vocabulary-specific guidance to the model.\": \"O prompt inicial pode fornecer orientação contextual ou específica de vocabulário para o modelo.\",\n  \"Input Audio & Source Path for Transcription\": \"Entrada de Áudio/Caminho de Origem para Transcrição\",\n  \"Input Text\": \"Texto de Entrada\",\n  \"Invalid path: {}\": \"Caminho inválido: {}\",\n  \"It is recommended to use CUDA, if you have low configuration, use CPU\": \"Para GPUs Nvidia é recomendado usar CUDA. Se não tiver uma GPU Nvidia, use CPU\",\n  \"Iterative Prompt Length, 0 means off\": \"Comprimento do Prompt Iterativo (0 = desativado)\",\n  \"LLAMA Configuration\": \"Configuração do LLAMA\",\n  \"LLAMA Model Config\": \"Configuração do Modelo LLAMA\",\n  \"LLAMA Model Path\": \"Caminho do Modelo LLAMA\",\n  \"Labeling Device\": \"Dispositivo de Rotulagem\",\n  \"LoRA Model to be merged\": \"Modelo LoRA para mesclagem\",\n  \"Maximum Length per Sample\": \"Comprimento Máximo por Amostra\",\n  \"Maximum Training Steps\": \"Etapas Máximas de Treinamento\",\n  \"Maximum tokens per batch, 0 means no limit\": \"Número máximo de tokens por lote, 0 significa sem limite\",\n  \"Merge\": \"Mesclar\",\n  \"Merge LoRA\": \"Mesclar LoRA\",\n  \"Merge successfully\": \"Mesclado com sucesso\",\n  \"Model Output Path\": \"Caminho de Saída do Modelo\",\n  \"Model Quantization\": \"Quantização do Modelo\",\n  \"Model Size\": \"Tamanho do Modelo\",\n  \"Move\": \"Mover\",\n  \"Move files successfully\": \"Arquivos movidos com sucesso\",\n  \"No audio generated, please check the input text.\": \"Nenhum áudio gerado, verifique o texto de entrada.\",\n  \"No selected options\": \"Nenhuma opção selecionada\",\n  \"Normalization Result Preview (Currently Only Chinese)\": \"Pré-visualização do Resultado da Normalização (Atualmente Apenas Chinês)\",\n  \"Number of Workers\": \"Número de Processos\",\n  \"Open Inference Server\": \"Abrir Servidor de Inferência\",\n  \"Open Labeler WebUI\": \"Abrir WebUI de Rotulagem\",\n  \"Open Tensorboard\": \"Abrir Tensorboard\",\n  \"Opened labeler in browser\": \"WebUI de rotulagem aberta no navegador\",\n  \"Optional Label Language\": \"Idioma do Rótulo (Opcional)\",\n  \"Optional online ver\": \"Versão online (opcional)\",\n  \"Output Path\": \"Caminho de Saída\",\n  \"Path error, please check the model file exists in the corresponding path\": \"Erro de caminho, verifique se o arquivo do modelo existe no caminho correspondente\",\n  \"Post-quantification Precision\": \"Precisão Pós-quantização\",\n  \"Precision\": \"Precisão\",\n  \"Probability of applying Speaker Condition\": \"Probabilidade de Aplicar Condição de Orador\",\n  \"Put your text here.\": \"Insira seu texto aqui.\",\n  \"Quantify\": \"Quantizar\",\n  \"Quantify successfully\": \"Quantizado com sucesso\",\n  \"Realtime Transform Text\": \"Transformar Texto em Tempo Real\",\n  \"Reference Audio\": \"Áudio de Referência\",\n  \"Reference Text\": \"Texto de Referência\",\n  \"warning\": \"Aviso\",\n  \"Pre-processing begins...\": \"O pré-processamento começou!\",\n  \"Related code and weights are released under CC BY-NC-SA 4.0 License.\": \"O código relacionado e os pesos são licenciados sob a Licença CC BY-NC-SA 4.0.\",\n  \"Remove Selected Data\": \"Remover Dados Selecionados\",\n  \"Removed path successfully!\": \"Caminho removido com sucesso!\",\n  \"Repetition Penalty\": \"Penalidade de Repetição\",\n  \"Save model every n steps\": \"Salvar modelo a cada n etapas\",\n  \"Select LLAMA ckpt\": \"Selecionar .ckpt do LLAMA\",\n  \"Select source file processing method\": \"Escolha como processar o arquivo de origem\",\n  \"Select the model to be trained (Depending on the Tab page you are on)\": \"Selecione o modelo para o treinamento (dependendo da aba em que você está)\",\n  \"Selected: {}\": \"Selecionado: {}\",\n  \"Speaker is identified by the folder name\": \"O orador é identificado pelo nome da pasta\",\n  \"Start Training\": \"Iniciar Treinamento\",\n  \"Streaming Audio\": \"Áudio em Streaming\",\n  \"Streaming Generate\": \"Geração em Streaming\",\n  \"Tensorboard Host\": \"Host do Tensorboard\",\n  \"Tensorboard Log Path\": \"Caminho de Log do Tensorboard\",\n  \"Tensorboard Port\": \"Porta do Tensorboard\",\n  \"Tensorboard interface is closed\": \"A interface do Tensorboard está fechada\",\n  \"Tensorboard interface is launched at {}\": \"A interface do Tensorboard foi iniciada em {}\",\n  \"Text Normalization\": \"Normalização de Texto\",\n  \"Text is too long, please keep it under {} characters.\": \"O texto é muito longo. Mantenha-o com menos de {} caracteres.\",\n  \"The lower the quantitative precision, the more the effectiveness may decrease, but the greater the efficiency will increase\": \"Quanto menor a precisão quantitativa, mais a eficácia pode diminuir, mas maior será o aumento da eficiência\",\n  \"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.\": \"O caminho da pasta de entrada à esquerda ou a lista de arquivos. Independentemente de estar marcada ou não, ela será utilizada para o treinamento subsequente nesta lista.\",\n  \"Training Configuration\": \"Configuração de Treinamento\",\n  \"Training Error\": \"Erro de Treinamento\",\n  \"Training stopped\": \"Treinamento interrompido!\",\n  \"Type the path or select from the dropdown\": \"Digite o caminho ou selecione no menu suspenso\",\n  \"Use LoRA\": \"Usar LoRA\",\n  \"Use LoRA can save GPU memory, but may reduce the quality of the model\": \"O uso de LoRAs pode economizar memória da GPU, mas também pode reduzir a qualidade\",\n  \"Use filelist\": \"Usar lista de arquivos\",\n  \"VQGAN Configuration\": \"Configuração do VQGAN\",\n  \"View the status of the preprocessing folder (use the slider to control the depth of the tree)\": \"Visualizar o status da pasta de pré-processamento (use o controle deslizante para controlar a profundidade da árvore)\",\n  \"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.\": \"Não nos responsabilizamos por qualquer uso indevido do modelo. Por favor, considere as leis e regulamentações locais antes de usá-lo.\",\n  \"WebUI Host\": \"Host da WebUI\",\n  \"WebUI Port\": \"Porta da WebUI\",\n  \"Whisper Model\": \"Modelo Whisper\",\n  \"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).\": \"Você pode encontrar o código fonte [aqui](https://github.com/fishaudio/fish-speech) e os modelos [aqui](https://huggingface.co/fishaudio/fish-speech-1).\",\n  \"auto\": \"automático\",\n  \"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU\": \"bf16-true é recomendado para GPUs da série 30+, 16-mixed é recomendado para GPUs da série 10+\",\n  \"latest\": \"mais recente\",\n  \"new\": \"novo\",\n  \"This audio introduces the basic concepts and applications of artificial intelligence and machine learning.\": \"Este áudio introduz os conceitos básicos e aplicações de inteligência artificial e aprendizado de máquina.\",\n  \"You don't need to train this model!\": \"Não é necessário treinar este modelo!\",\n  \"Yes\": \"Sim\",\n  \"No\": \"Não\",\n  \"version:\": \"versão:\",\n  \"author:\": \"autor:\"\n}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/locale/zh_CN.json",
    "content": "{\n  \"16-mixed is recommended for 10+ series GPU\": \"10+ 系列 GPU 建议使用 16-mixed\",\n  \"5 to 10 seconds of reference audio, useful for specifying speaker.\": \"5 到 10 秒的参考音频，适用于指定音色。\",\n  \"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).\": \"由 [Fish Audio](https://fish.audio) 研发的基于 VQ-GAN 和 Llama 的多语种语音合成.\",\n  \"Accumulate Gradient Batches\": \"梯度累积批次\",\n  \"Add to Processing Area\": \"加入处理区\",\n  \"Added path successfully!\": \"添加路径成功!\",\n  \"Advanced Config\": \"高级参数\",\n  \"Base LLAMA Model\": \"基础 LLAMA 模型\",\n  \"Batch Inference\": \"批量推理\",\n  \"Batch Size\": \"批次大小\",\n  \"Changing with the Model Path\": \"随模型路径变化\",\n  \"Chinese\": \"中文\",\n  \"Compile Model\": \"编译模型\",\n  \"Compile the model can significantly reduce the inference time, but will increase cold start time\": \"编译模型可以显著减少推理时间，但会增加冷启动时间\",\n  \"Copy\": \"复制\",\n  \"Data Preprocessing\": \"数据预处理\",\n  \"Data Preprocessing Path\": \"数据预处理路径\",\n  \"Data Source\": \"数据源\",\n  \"Decoder Model Config\": \"解码器模型配置\",\n  \"Decoder Model Path\": \"解码器模型路径\",\n  \"Disabled\": \"禁用\",\n  \"Enable Reference Audio\": \"启用参考音频\",\n  \"English\": \"英文\",\n  \"Error Message\": \"错误信息\",\n  \"File Preprocessing\": \"文件预处理\",\n  \"Generate\": \"生成\",\n  \"Generated Audio\": \"音频\",\n  \"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format\": \"如果音频没有对应的文本，可以应用 ASR 辅助，支持 .txt 或 .lab 格式\",\n  \"Infer interface is closed\": \"推理界面已关闭\",\n  \"Inference Configuration\": \"推理配置\",\n  \"Inference Server Configuration\": \"推理服务器配置\",\n  \"Inference Server Error\": \"推理服务器错误\",\n  \"Inferring interface is launched at {}\": \"推理界面已在 {} 上启动\",\n  \"Initial Learning Rate\": \"初始学习率\",\n  \"Input Audio & Source Path for Transcription\": \"输入音频和转录源路径\",\n  \"Input Text\": \"输入文本\",\n  \"Invalid path: {}\": \"无效路径: {}\",\n  \"It is recommended to use CUDA, if you have low configuration, use CPU\": \"建议使用 CUDA，如果配置较低，使用 CPU\",\n  \"Iterative Prompt Length, 0 means off\": \"迭代提示长度，0 表示关闭\",\n  \"Japanese\": \"日文\",\n  \"LLAMA Configuration\": \"LLAMA 配置\",\n  \"LLAMA Model Config\": \"LLAMA 模型配置\",\n  \"LLAMA Model Path\": \"LLAMA 模型路径\",\n  \"Labeling Device\": \"标注加速设备\",\n  \"LoRA Model to be merged\": \"要合并的 LoRA 模型\",\n  \"Maximum Audio Duration\": \"最大音频时长\",\n  \"Maximum Length per Sample\": \"每个样本的最大长度\",\n  \"Maximum Training Steps\": \"最大训练步数\",\n  \"Maximum tokens per batch, 0 means no limit\": \"每批最大令牌数，0 表示无限制\",\n  \"Merge\": \"合并\",\n  \"Merge LoRA\": \"合并 LoRA\",\n  \"Merge successfully\": \"合并成功\",\n  \"Minimum Audio Duration\": \"最小音频时长\",\n  \"Model Output Path\": \"模型输出路径\",\n  \"Model Size\": \"模型规模\",\n  \"Move\": \"移动\",\n  \"Move files successfully\": \"移动文件成功\",\n  \"No audio generated, please check the input text.\": \"没有生成音频，请检查输入文本.\",\n  \"No selected options\": \"没有选择的选项\",\n  \"Number of Workers\": \"数据加载进程数\",\n  \"Open Inference Server\": \"打开推理服务器\",\n  \"Open Labeler WebUI\": \"打开标注工具\",\n  \"Open Tensorboard\": \"打开 Tensorboard\",\n  \"Opened labeler in browser\": \"在浏览器中打开标注工具\",\n  \"Optional Label Language\": \"[可选] 标注语言\",\n  \"Optional online ver\": \"[可选] 使用在线版\",\n  \"Output Path\": \"输出路径\",\n  \"Path error, please check the model file exists in the corresponding path\": \"路径错误，请检查模型文件是否存在于相应路径\",\n  \"Precision\": \"精度\",\n  \"Probability of applying Speaker Condition\": \"应用说话人条件的概率\",\n  \"Put your text here.\": \"在此处输入文本.\",\n  \"Reference Audio\": \"参考音频\",\n  \"Reference Text\": \"参考文本\",\n  \"Related code and weights are released under CC BY-NC-SA 4.0 License.\": \"相关代码和权重使用 CC BY-NC-SA 4.0 许可证发布.\",\n  \"Remove Selected Data\": \"移除选中数据\",\n  \"Removed path successfully!\": \"移除路径成功!\",\n  \"Repetition Penalty\": \"重复惩罚\",\n  \"Save model every n steps\": \"每 n 步保存模型\",\n  \"Select LLAMA ckpt\": \"选择 LLAMA 检查点\",\n  \"Select VITS ckpt\": \"选择 VITS 检查点\",\n  \"Select VQGAN ckpt\": \"选择 VQGAN 检查点\",\n  \"Select source file processing method\": \"选择源文件处理方法\",\n  \"Select the model to be trained (Depending on the Tab page you are on)\": \"根据您所在的选项卡页面选择要训练的模型\",\n  \"Selected: {}\": \"已选择: {}\",\n  \"Speaker\": \"说话人\",\n  \"Speaker is identified by the folder name\": \"自动根据父目录名称识别说话人\",\n  \"Start Training\": \"开始训练\",\n  \"Streaming Audio\": \"流式音频\",\n  \"Streaming Generate\": \"流式合成\",\n  \"Tensorboard Host\": \"Tensorboard 监听地址\",\n  \"Tensorboard Log Path\": \"Tensorboard 日志路径\",\n  \"Tensorboard Port\": \"Tensorboard 端口\",\n  \"Tensorboard interface is closed\": \"Tensorboard 界面已关闭\",\n  \"Tensorboard interface is launched at {}\": \"Tensorboard 界面已在 {} 上启动\",\n  \"Text is too long, please keep it under {} characters.\": \"文本太长，请保持在 {} 个字符以内.\",\n  \"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.\": \"左侧输入文件夹的路径或文件列表。无论是否选中，都将在此列表中用于后续训练.\",\n  \"Training Configuration\": \"训练配置\",\n  \"Training Error\": \"训练错误\",\n  \"Training stopped\": \"训练已停止\",\n  \"Type name of the speaker\": \"输入说话人的名称\",\n  \"Type the path or select from the dropdown\": \"输入路径或从下拉菜单中选择\",\n  \"Use LoRA\": \"使用 LoRA\",\n  \"Use LoRA can save GPU memory, but may reduce the quality of the model\": \"使用 LoRA 可以节省 GPU 内存，但可能会降低模型质量\",\n  \"Use filelist\": \"使用文件列表\",\n  \"Use large for 10G+ GPU, medium for 5G, small for 2G\": \"10G+ GPU 使用 large, 5G 使用 medium, 2G 使用 small\",\n  \"VITS Configuration\": \"VITS 配置\",\n  \"VQGAN Configuration\": \"VQGAN 配置\",\n  \"Validation Batch Size\": \"验证批次大小\",\n  \"View the status of the preprocessing folder (use the slider to control the depth of the tree)\": \"查看预处理文件夹的状态 (使用滑块控制树的深度)\",\n  \"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.\": \"我们不对模型的任何滥用负责，请在使用之前考虑您当地的法律法规.\",\n  \"WebUI Host\": \"WebUI 监听地址\",\n  \"WebUI Port\": \"WebUI 端口\",\n  \"Whisper Model\": \"Whisper 模型\",\n  \"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).\": \"你可以在 [这里](https://github.com/fishaudio/fish-speech) 找到源代码和 [这里](https://huggingface.co/fishaudio/fish-speech-1) 找到模型.\",\n  \"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU\": \"30+ 系列 GPU 建议使用 bf16-true, 10+ 系列 GPU 建议使用 16-mixed\",\n  \"latest\": \"最近的检查点\",\n  \"new\": \"创建新的检查点\",\n  \"Realtime Transform Text\": \"实时规范化文本\",\n  \"Normalization Result Preview (Currently Only Chinese)\": \"规范化结果预览\",\n  \"Text Normalization\": \"文本规范化\",\n  \"Select Example Audio\": \"选择参考音频\"\n}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/i18n/scan.py",
    "content": "import ast\nimport glob\nimport json\nfrom collections import OrderedDict\nfrom pathlib import Path\n\nfrom loguru import logger\n\nfrom .core import DEFAULT_LANGUAGE, I18N_FILE_PATH\n\n\ndef extract_i18n_strings(node):\n    i18n_strings = []\n\n    if (\n        isinstance(node, ast.Call)\n        and isinstance(node.func, ast.Name)\n        and node.func.id == \"i18n\"\n    ):\n        for arg in node.args:\n            if isinstance(arg, ast.Str):\n                i18n_strings.append(arg.s)\n\n    for child_node in ast.iter_child_nodes(node):\n        i18n_strings.extend(extract_i18n_strings(child_node))\n\n    return i18n_strings\n\n\n# scan the directory for all .py files (recursively)\n# for each file, parse the code into an AST\n# for each AST, extract the i18n strings\n\nstrings = []\nfolders = [\"fish_speech\", \"tools\"]\n# for filename in glob.iglob(\"**/*.py\", recursive=True):\nfor folder in folders:\n    for f in Path(folder).rglob(\"*.py\"):\n        code = f.read_text(encoding=\"utf-8\")\n        if \"i18n(\" in code:\n            tree = ast.parse(code)\n            i18n_strings = extract_i18n_strings(tree)\n            logger.info(f\"Found {len(i18n_strings)} i18n strings in {f}\")\n            strings.extend(i18n_strings)\n\ncode_keys = set(strings)\nlogger.info(f\"Total unique: {len(code_keys)}\")\n\n\nstandard_file = I18N_FILE_PATH / f\"{DEFAULT_LANGUAGE}.json\"\nwith open(standard_file, \"r\", encoding=\"utf-8\") as f:\n    standard_data = json.load(f, object_pairs_hook=OrderedDict)\nstandard_keys = set(standard_data.keys())\n\n# Define the standard file name\nunused_keys = standard_keys - code_keys\nlogger.info(f\"Found {len(unused_keys)} unused keys in {standard_file}\")\nfor unused_key in unused_keys:\n    logger.info(f\"\\t{unused_key}\")\n\nmissing_keys = code_keys - standard_keys\nlogger.info(f\"Found {len(missing_keys)} missing keys in {standard_file}\")\nfor missing_key in missing_keys:\n    logger.info(f\"\\t{missing_key}\")\n\ncode_keys_dict = OrderedDict()\nfor s in strings:\n    code_keys_dict[s] = s\n\n# write back\nwith open(standard_file, \"w\", encoding=\"utf-8\") as f:\n    json.dump(code_keys_dict, f, ensure_ascii=False, indent=4, sort_keys=True)\n    f.write(\"\\n\")\n\nlogger.info(f\"Updated {standard_file}\")\n\n\n# Define the standard file name\nstandard_file = I18N_FILE_PATH / f\"{DEFAULT_LANGUAGE}.json\"\n\n# Find all JSON files in the directory\ndir_path = I18N_FILE_PATH\nlanguages = [f for f in dir_path.glob(\"*.json\") if f.stem != DEFAULT_LANGUAGE]\n\n# Load the standard file\nwith open(standard_file, \"r\", encoding=\"utf-8\") as f:\n    standard_data = json.load(f, object_pairs_hook=OrderedDict)\n\n# Loop through each language file\nfor lang_file in languages:\n    # Load the language file\n    with open(lang_file, \"r\", encoding=\"utf-8\") as f:\n        lang_data = json.load(f, object_pairs_hook=OrderedDict)\n\n    # Find the difference between the language file and the standard file\n    diff = set(standard_data.keys()) - set(lang_data.keys())\n\n    miss = set(lang_data.keys()) - set(standard_data.keys())\n\n    # Add any missing keys to the language file\n    for key in diff:\n        lang_data[key] = \"#!\" + key\n        logger.info(f\"Added missing key: {key} to {lang_file}\")\n\n    # Del any extra keys to the language file\n    for key in miss:\n        del lang_data[key]\n        logger.info(f\"Del extra key: {key} from {lang_file}\")\n\n    # Sort the keys of the language file to match the order of the standard file\n    lang_data = OrderedDict(\n        sorted(lang_data.items(), key=lambda x: list(standard_data.keys()).index(x[0]))\n    )\n\n    # Save the updated language file\n    with open(lang_file, \"w\", encoding=\"utf-8\") as f:\n        json.dump(lang_data, f, ensure_ascii=False, indent=4, sort_keys=True)\n        f.write(\"\\n\")\n\n    logger.info(f\"Updated {lang_file}\")\n\nlogger.info(\"Done\")\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/models/text2semantic/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/models/text2semantic/lit_module.py",
    "content": "from typing import Any, Optional\n\nimport lightning as L\nimport torch\nimport torch.nn.functional as F\nfrom lightning.pytorch.utilities.types import OptimizerLRScheduler\n\nimport fish_speech.utils as utils\nfrom fish_speech.conversation import CODEBOOK_PAD_TOKEN_ID\nfrom fish_speech.models.text2semantic.llama import NaiveTransformer\n\nlog = utils.RankedLogger(__name__, rank_zero_only=True)\n\n\nclass TextToSemantic(L.LightningModule):\n    def __init__(\n        self,\n        model: NaiveTransformer,\n        optimizer: Any,\n        lr_scheduler: Any,\n    ):\n        super().__init__()\n\n        self.model = model\n        self.optimizer_builder = optimizer\n        self.lr_scheduler_builder = lr_scheduler\n\n    def forward(self, x):\n        return self.model(x)\n\n    def on_save_checkpoint(self, checkpoint):\n        # Save only LoRA parameters\n        state_dict = checkpoint[\"state_dict\"]\n        use_lora = any(\"lora\" in name for name in state_dict.keys())\n        if not use_lora:\n            return\n\n        for name in list(state_dict.keys()):\n            if \"lora\" not in name:\n                state_dict.pop(name)\n\n    def configure_optimizers(self) -> OptimizerLRScheduler:\n        # Get weight decay parameters\n        weight_decay_parameters, other_parameters = [], []\n        for name, param in self.named_parameters():\n            if \".bias\" in name or \"norm.weight\" in name or \".embeddings.\" in name:\n                other_parameters.append(param)\n            else:\n                weight_decay_parameters.append(param)\n\n        optimizer = self.optimizer_builder(\n            [\n                {\"params\": weight_decay_parameters},\n                {\"params\": other_parameters, \"weight_decay\": 0.0},\n            ]\n        )\n\n        # Print the parameters and their weight decay\n        for i in optimizer.param_groups:\n            log.info(\n                f\"Set weight decay: {i['weight_decay']} for {len(i['params'])} parameters\"\n            )\n\n        lr_scheduler = self.lr_scheduler_builder(optimizer)\n\n        return {\n            \"optimizer\": optimizer,\n            \"lr_scheduler\": {\n                \"scheduler\": lr_scheduler,\n                \"interval\": \"step\",\n            },\n        }\n\n    # Copied from https://github.com/eric-mitchell/direct-preference-optimization/blob/main/trainers.py#L90\n    def get_batch_logps(\n        self,\n        logits: torch.FloatTensor,\n        labels: torch.LongTensor,\n        average_log_prob: bool = False,\n    ) -> torch.FloatTensor:\n        \"\"\"Compute the log probabilities of the given labels under the given logits.\n\n        Args:\n            logits: Logits of the model (unnormalized). Shape: (batch_size, sequence_length, codebook_size, vocab_size)\n            labels: Labels for which to compute the log probabilities. Label tokens with a value of -100 are ignored. Shape: (batch_size, sequence_length, codebook_size)\n            average_log_prob: If True, return the average log probability per (non-masked) token. Otherwise, return the sum of the log probabilities of the (non-masked) tokens.\n\n        Returns:\n            A tensor of shape (batch_size,) containing the average/sum log probabilities of the given labels under the given logits.\n        \"\"\"\n        assert logits.shape[:-1] == labels.shape\n\n        labels = labels.clone()\n        loss_mask = labels != -100\n\n        # dummy token; we'll ignore the losses on these tokens later\n        labels[labels == -100] = 0\n\n        per_token_logps = torch.gather(\n            logits.log_softmax(-1), dim=-1, index=labels.unsqueeze(-1)\n        ).squeeze(-1)\n\n        if average_log_prob:\n            return (per_token_logps * loss_mask).sum(-1) / loss_mask.sum(-1)\n        else:\n            return (per_token_logps * loss_mask).sum(-1)\n\n    def _step(self, batch, batch_idx, stage: str):\n        is_train = stage == \"train\"\n\n        if is_train:\n            # Key part to make lora work\n            # Otherwise the parameters are merged, which lead to incorrect gradients\n            self.model.train()\n\n        # Do positive and negative samples in the same batch to speed up training\n        labels = batch[\"labels\"]\n        outputs = self.model(\n            inp=batch[\"inputs\"],\n            key_padding_mask=batch[\"attention_masks\"],\n        )\n        token_logits = outputs.token_logits\n        codebook_logits = outputs.codebook_logits\n\n        # Generate labels\n        base_loss = F.cross_entropy(\n            token_logits.view(-1, token_logits.size(-1)),\n            labels[:, 0].reshape(-1),\n            ignore_index=-100,\n        )\n\n        codebook_labels = labels[:, 1 : 1 + self.model.config.num_codebooks].mT\n        semantic_loss = F.cross_entropy(\n            codebook_logits.view(-1, codebook_logits.size(-1)),\n            codebook_labels.reshape(-1),\n            ignore_index=-100,\n        )\n\n        loss = base_loss + semantic_loss\n\n        self.log(\n            f\"{stage}/loss\",\n            loss,\n            on_step=is_train,\n            on_epoch=not is_train,\n            prog_bar=True,\n            logger=True,\n            sync_dist=not is_train,\n        )\n\n        self.log(\n            f\"{stage}/base_loss\",\n            base_loss,\n            on_step=is_train,\n            on_epoch=not is_train,\n            prog_bar=False,\n            logger=True,\n            sync_dist=not is_train,\n        )\n\n        self.log(\n            f\"{stage}/semantic_loss\",\n            semantic_loss,\n            on_step=is_train,\n            on_epoch=not is_train,\n            prog_bar=False,\n            logger=True,\n            sync_dist=not is_train,\n        )\n\n        # Top-5 accuracy\n        accuracy = self.get_accuracy(codebook_logits, codebook_labels)\n        self.log(\n            f\"{stage}/top_5_accuracy\",\n            accuracy,\n            on_step=is_train,\n            on_epoch=not is_train,\n            prog_bar=True,\n            logger=True,\n            sync_dist=not is_train,\n        )\n\n        return loss\n\n    def get_accuracy(self, logits, labels):\n        mask = (labels != -100) & (labels != CODEBOOK_PAD_TOKEN_ID)\n        if mask.sum() == 0:\n            return torch.tensor(0.0, device=logits.device)\n\n        _, indices = logits.topk(5, dim=-1)\n        correct = indices.eq(labels.unsqueeze(-1))\n        correct[~mask] = 0\n        correct = correct.sum()\n        accuracy = correct / mask.sum()\n\n        return accuracy\n\n    def training_step(self, batch, batch_idx):\n        return self._step(batch, batch_idx, \"train\")\n\n    def validation_step(self, batch, batch_idx):\n        return self._step(batch, batch_idx, \"val\")\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/models/text2semantic/llama.py",
    "content": "import dataclasses\nimport json\nimport math\nfrom collections import OrderedDict\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\nfrom einops import rearrange\nfrom loguru import logger\nfrom torch import Tensor\nfrom torch.nn import functional as F\nfrom torch.nn.attention import SDPBackend, sdpa_kernel\nfrom torch.utils.checkpoint import checkpoint\nfrom transformers import AutoTokenizer\n\nfrom fish_speech.tokenizer import SEMANTIC_TOKENS, FishTokenizer\nfrom fish_speech.utils import RankedLogger\n\nfrom .lora import LoraConfig, setup_lora\n\nlog = RankedLogger(__name__, rank_zero_only=True)\n\n\ndef find_multiple(n: int, k: int) -> int:\n    if n % k == 0:\n        return n\n    return n + k - (n % k)\n\n\n@dataclass\nclass BaseModelArgs:\n    model_type: str = \"base\"\n\n    vocab_size: int = 32000\n    n_layer: int = 32\n    n_head: int = 32\n    dim: int = 4096\n    intermediate_size: int = None\n    n_local_heads: int = -1\n    head_dim: int = 64\n    rope_base: float = 10000\n    norm_eps: float = 1e-5\n    max_seq_len: int = 2048\n    dropout: float = 0.0\n    tie_word_embeddings: bool = True\n    attention_qkv_bias: bool = False\n\n    # Codebook configs\n    codebook_size: int = 160\n    num_codebooks: int = 4\n\n    # Gradient checkpointing\n    use_gradient_checkpointing: bool = True\n\n    # Initialize the model\n    initializer_range: float = 0.02\n\n    # Dummy vars\n    is_reward_model: bool = False\n    share_codebook_embeddings: bool = True\n    scale_codebook_embeddings: bool = False\n\n    def __post_init__(self):\n        if self.n_local_heads == -1:\n            self.n_local_heads = self.n_head\n        if self.intermediate_size is None:\n            hidden_dim = 4 * self.dim\n            n_hidden = int(2 * hidden_dim / 3)\n            self.intermediate_size = find_multiple(n_hidden, 256)\n        self.head_dim = self.dim // self.n_head\n\n    @staticmethod\n    def from_pretrained(path: str):\n        path = Path(path)\n\n        if path.is_dir():\n            path = path / \"config.json\"\n\n        with open(path, \"r\", encoding=\"utf-8\") as f:\n            data = json.load(f)\n\n        match data[\"model_type\"]:\n            case \"naive\":\n                cls = NaiveModelArgs\n            case \"dual_ar\":\n                cls = DualARModelArgs\n            case _:\n                raise ValueError(f\"Unknown model type: {data['model_type']}\")\n\n        return cls(**data)\n\n    def save(self, path: str):\n        with open(path, \"w\") as f:\n            json.dump(self.__dict__, f, indent=4, sort_keys=True, ensure_ascii=False)\n\n\n@dataclass\nclass NaiveModelArgs(BaseModelArgs):\n    model_type: str = \"naive\"\n\n\n@dataclass\nclass DualARModelArgs(BaseModelArgs):\n    model_type: str = \"dual_ar\"\n    n_fast_layer: int = 4\n    fast_dim: int | None = None\n    fast_n_head: int | None = None\n    fast_n_local_heads: int | None = None\n    fast_head_dim: int | None = None\n    fast_intermediate_size: int | None = None\n    fast_attention_qkv_bias: bool | None = None\n\n    def __post_init__(self):\n        super().__post_init__()\n\n        self.fast_dim = self.fast_dim or self.dim\n        self.fast_n_head = self.fast_n_head or self.n_head\n        self.fast_n_local_heads = self.fast_n_local_heads or self.n_local_heads\n        self.fast_head_dim = self.fast_head_dim or self.head_dim\n        self.fast_intermediate_size = (\n            self.fast_intermediate_size or self.intermediate_size\n        )\n        self.fast_attention_qkv_bias = (\n            self.fast_attention_qkv_bias\n            if self.fast_attention_qkv_bias is not None\n            else self.attention_qkv_bias\n        )\n\n\nclass KVCache(nn.Module):\n    def __init__(\n        self, max_batch_size, max_seq_len, n_heads, head_dim, dtype=torch.bfloat16\n    ):\n        super().__init__()\n        cache_shape = (max_batch_size, n_heads, max_seq_len, head_dim)\n        self.register_buffer(\"k_cache\", torch.zeros(cache_shape, dtype=dtype))\n        self.register_buffer(\"v_cache\", torch.zeros(cache_shape, dtype=dtype))\n\n    def update(self, input_pos, k_val, v_val):\n        # input_pos: [S], k_val: [B, H, S, D]\n        assert input_pos.shape[0] == k_val.shape[2]\n\n        k_out = self.k_cache\n        v_out = self.v_cache\n        k_out[:, :, input_pos] = k_val\n        v_out[:, :, input_pos] = v_val\n\n        return k_out, v_out\n\n\n@dataclass\nclass TransformerForwardResult:\n    token_logits: Tensor\n    codebook_logits: Tensor\n\n\n@dataclass\nclass BaseTransformerForwardResult:\n    logits: Tensor\n    hidden_states: Tensor\n\n\nclass BaseTransformer(nn.Module):\n    def __init__(\n        self,\n        config: BaseModelArgs,\n        tokenizer: FishTokenizer | AutoTokenizer,\n        init_weights: bool = True,\n    ) -> None:\n        super().__init__()\n        self.config = config\n        self.tokenizer = tokenizer\n        self.semantic_token_ids = [\n            tokenizer.get_token_id(SEMANTIC_TOKEN) for SEMANTIC_TOKEN in SEMANTIC_TOKENS\n        ]\n\n        # Slow transformer\n        self.embeddings = nn.Embedding(\n            config.vocab_size,\n            config.dim,\n        )\n        self.codebook_embeddings = nn.Embedding(\n            config.codebook_size * config.num_codebooks,\n            config.dim,\n        )\n        self.layers = nn.ModuleList(\n            TransformerBlock(config, use_sdpa=True) for _ in range(config.n_layer)\n        )\n        self.norm = RMSNorm(config.dim, eps=config.norm_eps)\n\n        if self.config.tie_word_embeddings is False:\n            self.output = nn.Linear(\n                config.dim,\n                config.vocab_size,\n                bias=False,\n            )\n\n        self.register_buffer(\n            \"freqs_cis\",\n            precompute_freqs_cis(\n                config.max_seq_len,\n                config.dim // config.n_head,\n                config.rope_base,\n            ),\n            persistent=False,\n        )\n        self.register_buffer(\n            \"causal_mask\",\n            torch.tril(\n                torch.ones(\n                    config.max_seq_len,\n                    config.max_seq_len,\n                    dtype=torch.bool,\n                )\n            ),\n            persistent=False,\n        )\n\n        # For kv cache\n        self.max_batch_size = -1\n        self.max_seq_len = -1\n\n        if init_weights:\n            self.apply(self._init_weights)\n\n    def setup_caches(\n        self, max_batch_size: int, max_seq_len: int, dtype: torch.dtype = torch.bfloat16\n    ):\n        if self.max_seq_len >= max_seq_len and self.max_batch_size >= max_batch_size:\n            return\n\n        head_dim = self.config.dim // self.config.n_head\n        max_seq_len = find_multiple(max_seq_len, 8)\n        self.max_seq_len = max_seq_len\n        self.max_batch_size = max_batch_size\n\n        for b in self.layers:\n            b.attention.kv_cache = KVCache(\n                max_batch_size,\n                max_seq_len,\n                self.config.n_local_heads,\n                head_dim,\n                dtype=dtype,\n            )\n\n    def embed(self, x: Tensor) -> Tensor:\n        vocab_embeds = [self.embeddings(x[:, 0])]\n        for i in range(self.config.num_codebooks):\n            emb = self.codebook_embeddings(x[:, i + 1] + i * self.config.codebook_size)\n            semantic_token_ids_tensor = torch.tensor(\n                self.semantic_token_ids, device=x.device\n            )\n            emb[~torch.isin(x[:, 0], semantic_token_ids_tensor)] = 0\n\n        x = torch.stack(vocab_embeds, dim=3)\n        x = x.sum(dim=3)\n\n        return x\n\n    def forward(\n        self,\n        inp: Tensor,\n        key_padding_mask: Optional[Tensor] = None,\n    ) -> BaseTransformerForwardResult:\n        seq_len = inp.size(2)\n\n        # Here we want to merge the embeddings of the codebooks\n        x = self.embed(inp)\n\n        freqs_cis = self.freqs_cis[:seq_len]\n\n        # Not that the causal mask here follows the definition of scaled_dot_product_attention\n        # That is, FALSE means masked out\n        # To maintain consistency, key_padding_mask use TRUE to mask out\n        mask = None\n        if key_padding_mask is not None:\n            mask = self.causal_mask[None, None, :seq_len, :seq_len]  # (B, N, Q, K)\n            mask = mask & key_padding_mask[:, None, None, :].logical_not()\n\n        for layer in self.layers:\n            if self.config.use_gradient_checkpointing and self.training:\n                x = checkpoint(layer, x, freqs_cis, mask, use_reentrant=True)\n            else:\n                x = layer(x, freqs_cis, mask)\n\n        # We got slow_out here\n        slow_out = self.norm(x)\n\n        if self.config.tie_word_embeddings:\n            token_logits = F.linear(slow_out, self.embeddings.weight)\n        else:\n            token_logits = self.output(slow_out)\n\n        return BaseTransformerForwardResult(\n            logits=token_logits,\n            hidden_states=x,\n        )\n\n    def forward_generate(\n        self,\n        inp: Tensor,\n        input_pos: Optional[Tensor] = None,\n        vq_masks: Optional[Tensor] = None,  # this is not used in fact\n        return_all: bool = False,\n    ) -> BaseTransformerForwardResult:\n        # This is used for generation, optimized for torch compile\n        # assert (\n        #     self.max_seq_len != -1 and self.max_batch_size != -1\n        # ), \"Please call setup_caches before forward_generate\"\n\n        embeds = []\n        for i in range(self.config.num_codebooks):\n            if self.config.share_codebook_embeddings:\n                _tokens = inp[:, i + 1] + i * self.config.codebook_size\n            else:\n                _tokens = inp[:, i + 1]\n\n            emb = self.codebook_embeddings(_tokens)\n            embeds.append(emb)\n\n        vq_embeds_sum = torch.stack(embeds, dim=1).sum(dim=1)\n        # if self.config.use_codebook_mlp:\n        #     vq_embeds_sum = vq_embeds_sum / self.config.num_codebooks\n        #     vq_embeds_sum = self.codebook_mlp(vq_embeds_sum)\n\n        vq_masks = (inp[:, 0] >= self.tokenizer.semantic_begin_id) & (\n            inp[:, 0] <= self.tokenizer.semantic_end_id\n        )\n\n        vq_embeds_sum[~vq_masks] = 0\n        x = self.embeddings(inp[:, 0]) + vq_embeds_sum\n\n        if input_pos is None:\n            input_pos = torch.arange(inp.shape[-1], device=x.device)\n            max_seq_len = inp.shape[-1]\n        else:\n            max_seq_len = self.max_seq_len\n\n        mask = self.causal_mask[None, None, input_pos, :max_seq_len]  # (B, N, Q, K)\n        freqs_cis = self.freqs_cis[input_pos]\n\n        for layer in self.layers:\n            x = layer(x, freqs_cis, mask, input_pos=input_pos)\n\n        # If prefill, we only calculate the logits of last token\n        if x.size(1) > 1 and not return_all:\n            x = x[:, -1:]\n\n        # We got slow_out here\n        slow_out = self.norm(x)\n\n        if self.config.is_reward_model:\n            token_logits = self.score_output(slow_out)\n        elif self.config.tie_word_embeddings:\n            token_logits = F.linear(slow_out, self.embeddings.weight)\n        else:\n            token_logits = self.output(slow_out)\n\n        return BaseTransformerForwardResult(\n            logits=token_logits,\n            hidden_states=x,\n        )\n\n    def _init_weights(self, module):\n        std = self.config.initializer_range\n        if isinstance(module, nn.Linear):\n            module.weight.data.normal_(mean=0.0, std=std)\n            if module.bias is not None:\n                module.bias.data.zero_()\n        elif isinstance(module, nn.Embedding):\n            module.weight.data.normal_(mean=0.0, std=std)\n            if module.padding_idx is not None:\n                module.weight.data[module.padding_idx].zero_()\n\n    @staticmethod\n    def from_pretrained(\n        path: str,\n        load_weights: bool = False,\n        max_length: int | None = None,\n        lora_config: LoraConfig | None = None,\n        rope_base: int | None = None,\n        is_agent: bool = False,\n    ) -> \"BaseTransformer\":\n        config = BaseModelArgs.from_pretrained(str(path))\n        if max_length is not None:\n            config.max_seq_len = max_length\n            log.info(f\"Override max_seq_len to {max_length}\")\n\n        if rope_base is not None:\n            config.rope_base = rope_base\n            log.info(f\"Override rope_base to {rope_base}\")\n\n        match config.model_type:\n            case \"naive\":\n                model_cls = NaiveTransformer\n            case \"dual_ar\":\n                model_cls = DualARTransformer\n            case _:\n                raise ValueError(f\"Unknown model type: {config.model_type}\")\n\n        if is_agent:\n            tokenizer = AutoTokenizer.from_pretrained(str(path))\n        else:\n            tokenizer_path = str(path) + \"/tokenizer.tiktoken\"\n            tokenizer = FishTokenizer(tokenizer_path)\n\n        log.info(f\"Loading model from {path}, config: {config}\")\n        model = model_cls(config, tokenizer=tokenizer)\n\n        if lora_config is not None:\n            setup_lora(model, lora_config)\n            log.info(f\"LoRA setup: {lora_config}\")\n\n        if load_weights is False:\n            log.info(\"Randomly initialized model\")\n        else:\n\n            if \"int8\" in str(Path(path)):\n                logger.info(\"Using int8 weight-only quantization!\")\n                from tools.llama.quantize import WeightOnlyInt8QuantHandler\n\n                simple_quantizer = WeightOnlyInt8QuantHandler(model)\n                model = simple_quantizer.convert_for_runtime()\n\n            if \"int4\" in str(Path(path)):\n                logger.info(\"Using int4 quantization!\")\n                path_comps = path.name.split(\"-\")\n                assert path_comps[-2].startswith(\"g\")\n                groupsize = int(path_comps[-2][1:])\n                from tools.llama.quantize import WeightOnlyInt4QuantHandler\n\n                simple_quantizer = WeightOnlyInt4QuantHandler(model, groupsize)\n                model = simple_quantizer.convert_for_runtime()\n\n            weights = torch.load(\n                Path(path) / \"model.pth\",\n                map_location=\"cpu\",\n                mmap=True,\n                weights_only=True,\n            )\n\n            if \"state_dict\" in weights:\n                logger.warning(\n                    \"Using a TextToSemantic LightningModule checkpoint, \"\n                    \"please make sure it is a full model, not a LoRA model.\"\n                )\n                weights = weights[\"state_dict\"]\n\n            if next(iter(weights.keys())).startswith(\"model.\"):\n                logger.info(\n                    f\"Remove prefix 'model.' created by TextToSemantic LightningModule from keys\"\n                )\n                new_weights = OrderedDict()\n                for k, v in weights.items():\n                    new_weights[k.replace(\"model.\", \"\")] = v\n                weights = new_weights\n\n            # Verify the name and shape of parameters since strict=False in load_state_dict.\n            for k, v in model.named_parameters():\n                if k not in weights:\n                    logger.warning(f\"No weight for {k}\")\n                elif v.shape != weights[k].shape:\n                    logger.warning(\n                        f\"Shape mismatch for {k}: {v.shape} vs {weights[k].shape}\"\n                    )\n\n            err = model.load_state_dict(weights, strict=False, assign=True)\n            log.info(f\"Loaded weights with error: {err}\")\n\n        return model\n\n    def save_pretrained(self, path: str, drop_lora: bool = False):\n        path = Path(path)\n        path.mkdir(parents=True, exist_ok=True)\n\n        self.config.save(path / \"config.json\")\n        state_dict = self.state_dict()\n\n        if drop_lora:\n            for key in list(state_dict.keys()):\n                if \"lora\" not in key:\n                    continue\n\n                state_dict.pop(key)\n                log.info(f\"Drop LoRA parameter: {key}\")\n\n        torch.save(state_dict, path / \"model.pth\")\n        self.tokenizer.save_pretrained(path)\n\n\nclass NaiveTransformer(BaseTransformer):\n    def __init__(self, config: NaiveModelArgs, tokenizer: FishTokenizer) -> None:\n        super().__init__(config, init_weights=False, tokenizer=tokenizer)\n\n        self.codebook_norm = RMSNorm(config.dim, eps=config.norm_eps)\n        self.codebook_output = nn.Linear(\n            config.dim,\n            config.codebook_size * config.num_codebooks,\n            bias=False,\n        )\n\n        self.apply(self._init_weights)\n\n    def decode(self, result: BaseTransformerForwardResult) -> TransformerForwardResult:\n        token_logits = result.logits\n        x = result.hidden_states\n\n        # Codebook\n        codebook_logits = self.codebook_output(self.codebook_norm(x))\n        codebook_logits = rearrange(\n            codebook_logits, \"b n (c d) -> b n c d\", c=self.config.num_codebooks\n        )\n\n        return TransformerForwardResult(\n            token_logits=token_logits,\n            codebook_logits=codebook_logits,\n        )\n\n    def forward(\n        self,\n        inp: Tensor,\n        key_padding_mask: Optional[Tensor] = None,\n    ) -> TransformerForwardResult:\n        result = super().forward(\n            inp=inp,\n            key_padding_mask=key_padding_mask,\n        )\n        return self.decode(result)\n\n    def forward_generate(\n        self, x: Tensor, input_pos: Optional[Tensor] = None\n    ) -> TransformerForwardResult:\n        result = super().forward_generate(x, input_pos)\n        return self.decode(result)\n\n\nclass DualARTransformer(BaseTransformer):\n    def __init__(self, config: NaiveModelArgs, tokenizer: FishTokenizer) -> None:\n        super().__init__(config, init_weights=False, tokenizer=tokenizer)\n\n        # Project to fast dim if needed\n        if config.fast_dim is not None and config.fast_dim != config.dim:\n            self.fast_project_in = nn.Linear(config.dim, config.fast_dim)\n        else:\n            self.fast_project_in = nn.Identity()\n\n        # Fast transformer\n        self.fast_embeddings = nn.Embedding(config.codebook_size, config.fast_dim)\n\n        # The equivalent bs is so large that sdpa doesn't work\n        override_config = dataclasses.replace(\n            config,\n            dim=config.fast_dim,\n            n_head=config.fast_n_head,\n            n_local_heads=config.fast_n_local_heads,\n            head_dim=config.fast_head_dim,\n            intermediate_size=config.fast_intermediate_size,\n            attention_qkv_bias=config.fast_attention_qkv_bias,\n        )\n\n        self.fast_layers = nn.ModuleList(\n            TransformerBlock(override_config, use_sdpa=False)\n            for _ in range(config.n_fast_layer)\n        )\n        self.fast_norm = RMSNorm(config.fast_dim, eps=config.norm_eps)\n        self.fast_output = nn.Linear(\n            config.fast_dim,\n            config.codebook_size,\n            bias=False,\n        )\n\n        self.register_buffer(\n            \"fast_freqs_cis\",\n            precompute_freqs_cis(\n                config.num_codebooks,\n                config.fast_dim // config.fast_n_head,\n                config.rope_base,\n            ),\n            persistent=False,\n        )\n        self.apply(self._init_weights)\n\n    def setup_caches(\n        self, max_batch_size: int, max_seq_len: int, dtype: torch.dtype = torch.bfloat16\n    ):\n        super().setup_caches(max_batch_size, max_seq_len, dtype)\n\n        head_dim = self.config.fast_dim // self.config.fast_n_head\n\n        # Fast transformer\n        # The max seq len here is the number of codebooks\n        for b in self.fast_layers:\n            b.attention.kv_cache = KVCache(\n                max_batch_size,\n                self.config.num_codebooks,\n                self.config.fast_n_local_heads,\n                head_dim,\n                dtype=dtype,\n            )\n\n    def forward(\n        self,\n        inp: Tensor,\n        key_padding_mask: Optional[Tensor] = None,\n    ) -> TransformerForwardResult:\n        parent_result = super().forward(inp, key_padding_mask)\n        token_logits = parent_result.logits\n        x = parent_result.hidden_states\n        x = self.fast_project_in(x)\n\n        # Fast transformer\n        fast_seq_len = self.config.num_codebooks\n        fast_mask = self.causal_mask[\n            None, None, :fast_seq_len, :fast_seq_len\n        ]  # (B, N, Q, K)\n\n        # Drop the last token and rotate left\n        codebooks = inp[:, 1:-1, 1:]\n        codebooks = F.pad(codebooks, (0, 1), value=0)\n        codebook_embeddings = self.fast_embeddings(codebooks)\n        x = torch.cat([x[:, None], codebook_embeddings], dim=1)\n        b, s = x.size(0), x.size(2)\n        x = rearrange(x, \"b n s d -> (b s) n d\")  # flatten the batch and seq_len\n\n        # Remove padded part\n        codebooks = rearrange(codebooks, \"b n s -> (b s) n\")\n        codebook_mask = (codebooks == 0).all(dim=-1)\n\n        if torch.all(codebook_mask):\n            # If all codebooks are padded, we keep first 8 to make sure the model runs\n            codebook_mask[:8] = False\n\n        x_bs, x_len = x.size(0), x.size(1)\n        x = x[~codebook_mask]\n\n        for layer in self.fast_layers:\n            if self.config.use_gradient_checkpointing and self.training:\n                x = checkpoint(\n                    layer, x, self.fast_freqs_cis, fast_mask, use_reentrant=True\n                )\n            else:\n                x = layer(x, self.fast_freqs_cis, fast_mask)\n\n        # unflatten the batch and num_codebooks\n        fast_out = self.fast_norm(x)\n        codebook_logits = self.fast_output(fast_out)\n\n        # Re-pad the codebook_logits\n        buffer = torch.zeros(\n            x_bs,\n            x_len,\n            codebook_logits.size(-1),\n            device=codebook_logits.device,\n            dtype=codebook_logits.dtype,\n        )\n        buffer[~codebook_mask] = codebook_logits\n        codebook_logits = buffer\n\n        assert codebook_logits.shape[1] == self.config.num_codebooks\n        codebook_logits = rearrange(\n            codebook_logits,\n            \"(b s) n d -> b s n d\",\n            b=b,\n            s=s,\n            n=self.config.num_codebooks,\n        )\n\n        return TransformerForwardResult(\n            token_logits=token_logits,\n            codebook_logits=codebook_logits,\n        )\n\n    def forward_generate_fast(\n        self, x: Tensor, input_pos: Optional[Tensor] = None\n    ) -> Tensor:\n        # Fast transformer\n        x = x.view(1, 1, -1)\n\n        fast_mask = self.causal_mask[\n            None, None, input_pos, : self.config.num_codebooks\n        ]  # (B, N, Q, K)\n        fast_freqs_cis = self.fast_freqs_cis[input_pos]\n\n        for layer in self.fast_layers:\n            x = layer(x, fast_freqs_cis, fast_mask, input_pos=input_pos)\n\n        # unflatten the batch and num_codebooks\n        fast_out = self.fast_norm(x)  # only take the last token\n        codebook_logits = self.fast_output(fast_out)\n\n        return codebook_logits\n\n    def forward_generate(\n        self,\n        x: Tensor,\n        input_pos: Optional[Tensor] = None,\n        vq_masks: Optional[Tensor] = None,\n    ) -> TransformerForwardResult:\n        x = super().forward_generate(x, input_pos, vq_masks)\n        x.hidden_states = self.fast_project_in(x.hidden_states)\n        return x\n\n\nclass TransformerBlock(nn.Module):\n    def __init__(self, config: BaseModelArgs, use_sdpa: bool = True) -> None:\n        super().__init__()\n        self.attention = Attention(config, use_sdpa=use_sdpa)\n        self.feed_forward = FeedForward(config)\n        self.ffn_norm = RMSNorm(config.dim, config.norm_eps)\n        self.attention_norm = RMSNorm(config.dim, config.norm_eps)\n\n    def forward(\n        self, x: Tensor, freqs_cis: Tensor, mask: Tensor, input_pos: Tensor = None\n    ) -> Tensor:\n        h = x + self.attention(self.attention_norm(x), freqs_cis, mask, input_pos)\n        out = h + self.feed_forward(self.ffn_norm(h))\n        return out\n\n\nclass Attention(nn.Module):\n    def __init__(self, config: BaseModelArgs, use_sdpa: bool = True):\n        super().__init__()\n        assert config.dim % config.n_head == 0\n\n        total_head_dim = (config.n_head + 2 * config.n_local_heads) * config.head_dim\n        # key, query, value projections for all heads, but in a batch\n        self.wqkv = nn.Linear(\n            config.dim, total_head_dim, bias=config.attention_qkv_bias\n        )\n        self.wo = nn.Linear(config.dim, config.dim, bias=False)\n        self.kv_cache = None\n\n        self.dropout = config.dropout\n        self.n_head = config.n_head\n        self.head_dim = config.head_dim\n        self.n_local_heads = config.n_local_heads\n        self.dim = config.dim\n        self.use_sdpa = use_sdpa\n        self._register_load_state_dict_pre_hook(self.load_hook)\n\n    def load_hook(self, state_dict, prefix, *args):\n        if prefix + \"wq.weight\" in state_dict:\n            wq = state_dict.pop(prefix + \"wq.weight\")\n            wk = state_dict.pop(prefix + \"wk.weight\")\n            wv = state_dict.pop(prefix + \"wv.weight\")\n            state_dict[prefix + \"wqkv.weight\"] = torch.cat([wq, wk, wv])\n\n    def forward(\n        self,\n        x: Tensor,\n        freqs_cis: Tensor,\n        mask: Tensor,\n        input_pos: Optional[Tensor] = None,\n    ) -> Tensor:\n        bsz, seqlen, _ = x.shape\n\n        kv_size = self.n_local_heads * self.head_dim\n        q, k, v = self.wqkv(x).split([self.dim, kv_size, kv_size], dim=-1)\n\n        q = q.view(bsz, seqlen, self.n_head, self.head_dim)\n        k = k.view(bsz, seqlen, self.n_local_heads, self.head_dim)\n        v = v.view(bsz, seqlen, self.n_local_heads, self.head_dim)\n\n        q = apply_rotary_emb(q, freqs_cis)\n        k = apply_rotary_emb(k, freqs_cis)\n\n        q, k, v = map(lambda x: x.transpose(1, 2), (q, k, v))\n\n        if self.kv_cache is not None:\n            k, v = self.kv_cache.update(input_pos, k, v)\n\n        k = k.repeat_interleave(self.n_head // self.n_local_heads, dim=1)\n        v = v.repeat_interleave(self.n_head // self.n_local_heads, dim=1)\n\n        if self.use_sdpa:\n            if mask is None:\n                with sdpa_kernel(SDPBackend.FLASH_ATTENTION):\n                    y = F.scaled_dot_product_attention(\n                        q,\n                        k,\n                        v,\n                        dropout_p=self.dropout if self.training else 0.0,\n                        is_causal=True,\n                        # No third party attn_mask here to use flash_attention\n                    )\n            else:\n                y = F.scaled_dot_product_attention(\n                    q,\n                    k,\n                    v,\n                    attn_mask=mask,\n                    dropout_p=self.dropout if self.training else 0.0,\n                )\n        else:\n            y = self.eq_scaled_dot_product_attention(\n                q,\n                k,\n                v,\n                attn_mask=mask,\n                dropout_p=self.dropout if self.training else 0.0,\n            )\n\n        y = y.transpose(1, 2).contiguous().view(bsz, seqlen, self.dim)\n\n        return self.wo(y)\n\n    def eq_scaled_dot_product_attention(\n        self,\n        query,\n        key,\n        value,\n        attn_mask=None,\n        dropout_p=0.0,\n    ) -> torch.Tensor:\n        # This is a standard scaled dot product attention\n        # It's low efficient, but it doesn't raise cuda error\n\n        L, S = query.size(-2), key.size(-2)\n        scale_factor = 1 / math.sqrt(query.size(-1))\n        attn_bias = torch.zeros(1, 1, L, S, dtype=query.dtype, device=query.device)\n\n        if attn_mask is not None:\n            if attn_mask.dtype == torch.bool:\n                attn_bias.masked_fill_(attn_mask.logical_not(), float(\"-inf\"))\n            else:\n                attn_bias += attn_mask\n\n        attn_weight = query @ key.transpose(-2, -1) * scale_factor\n        attn_weight += attn_bias\n        attn_weight = torch.softmax(attn_weight, dim=-1)\n        attn_weight = torch.dropout(attn_weight, dropout_p, train=True)\n\n        return attn_weight @ value\n\n\nclass FeedForward(nn.Module):\n    def __init__(self, config: BaseModelArgs) -> None:\n        super().__init__()\n        self.w1 = nn.Linear(config.dim, config.intermediate_size, bias=False)\n        self.w3 = nn.Linear(config.dim, config.intermediate_size, bias=False)\n        self.w2 = nn.Linear(config.intermediate_size, config.dim, bias=False)\n\n    def forward(self, x: Tensor) -> Tensor:\n        return self.w2(F.silu(self.w1(x)) * self.w3(x))\n\n\nclass RMSNorm(nn.Module):\n    def __init__(self, dim: int, eps: float = 1e-5):\n        super().__init__()\n        self.eps = eps\n        self.weight = nn.Parameter(torch.ones(dim))\n\n    def _norm(self, x):\n        return x * torch.rsqrt(torch.mean(x * x, dim=-1, keepdim=True) + self.eps)\n\n    def forward(self, x: Tensor) -> Tensor:\n        output = self._norm(x.float()).type_as(x)\n        return output * self.weight\n\n\ndef precompute_freqs_cis(seq_len: int, n_elem: int, base: int = 10000) -> Tensor:\n    freqs = 1.0 / (\n        base ** (torch.arange(0, n_elem, 2)[: (n_elem // 2)].float() / n_elem)\n    )\n    t = torch.arange(seq_len, device=freqs.device)\n    freqs = torch.outer(t, freqs)\n    freqs_cis = torch.polar(torch.ones_like(freqs), freqs)\n    cache = torch.stack([freqs_cis.real, freqs_cis.imag], dim=-1)\n    return cache.to(dtype=torch.bfloat16)\n\n\ndef apply_rotary_emb(x: Tensor, freqs_cis: Tensor) -> Tensor:\n    xshaped = x.float().reshape(*x.shape[:-1], -1, 2)\n    freqs_cis = freqs_cis.view(1, xshaped.size(1), 1, xshaped.size(3), 2)\n    x_out2 = torch.stack(\n        [\n            xshaped[..., 0] * freqs_cis[..., 0] - xshaped[..., 1] * freqs_cis[..., 1],\n            xshaped[..., 1] * freqs_cis[..., 0] + xshaped[..., 0] * freqs_cis[..., 1],\n        ],\n        -1,\n    )\n\n    x_out2 = x_out2.flatten(3)\n    return x_out2.type_as(x)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/models/text2semantic/lora.py",
    "content": "from dataclasses import dataclass\n\nimport loralib as lora\n\n\n@dataclass\nclass LoraConfig:\n    r: int\n    lora_alpha: float\n    lora_dropout: float = 0.0\n\n\ndef setup_lora(model, lora_config):\n    # Replace the embedding layer with a LoRA layer\n    model.embeddings = lora.Embedding(\n        num_embeddings=model.embeddings.num_embeddings,\n        embedding_dim=model.embeddings.embedding_dim,\n        padding_idx=model.embeddings.padding_idx,\n        r=lora_config.r,\n        lora_alpha=lora_config.lora_alpha,\n    )\n\n    model.codebook_embeddings = lora.Embedding(\n        num_embeddings=model.codebook_embeddings.num_embeddings,\n        embedding_dim=model.codebook_embeddings.embedding_dim,\n        padding_idx=model.codebook_embeddings.padding_idx,\n        r=lora_config.r,\n        lora_alpha=lora_config.lora_alpha,\n    )\n\n    # Replace output layer with a LoRA layer\n    linears = [(model, \"output\")]\n\n    # Replace all linear layers with LoRA layers\n    for layer in model.layers:\n        linears.extend([(layer.attention, \"wqkv\"), (layer.attention, \"wo\")])\n        linears.extend(\n            [\n                (layer.feed_forward, \"w1\"),\n                (layer.feed_forward, \"w2\"),\n                (layer.feed_forward, \"w3\"),\n            ]\n        )\n\n    if hasattr(model, \"fast_layers\"):\n        model.fast_embeddings = lora.Embedding(\n            num_embeddings=model.fast_embeddings.num_embeddings,\n            embedding_dim=model.fast_embeddings.embedding_dim,\n            padding_idx=model.fast_embeddings.padding_idx,\n            r=lora_config.r,\n            lora_alpha=lora_config.lora_alpha,\n        )\n\n        # Dual-AR model\n        linears.append((model, \"fast_output\"))\n\n        for layer in model.fast_layers:\n            linears.extend([(layer.attention, \"wqkv\"), (layer.attention, \"wo\")])\n            linears.extend(\n                [\n                    (layer.feed_forward, \"w1\"),\n                    (layer.feed_forward, \"w2\"),\n                    (layer.feed_forward, \"w3\"),\n                ]\n            )\n\n    for module, layer in linears:\n        updated_linear = lora.Linear(\n            in_features=getattr(module, layer).in_features,\n            out_features=getattr(module, layer).out_features,\n            bias=getattr(module, layer).bias,\n            r=lora_config.r,\n            lora_alpha=lora_config.lora_alpha,\n            lora_dropout=lora_config.lora_dropout,\n        )\n        setattr(module, layer, updated_linear)\n\n    # Mark only the LoRA layers as trainable\n    lora.mark_only_lora_as_trainable(model, bias=\"none\")\n\n\ndef get_merged_state_dict(model):\n    # This line will merge the state dict of the model and the LoRA parameters\n    model.eval()\n\n    # Then we need to remove the LoRA parameters from the state dict\n    state_dict = model.state_dict()\n    for name in list(state_dict.keys()):\n        if \"lora\" in name:\n            state_dict.pop(name)\n\n    return state_dict\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/models/vqgan/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/models/vqgan/modules/firefly.py",
    "content": "import math\nfrom functools import partial\nfrom math import prod\nfrom typing import Callable\n\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn\nfrom torch.nn.utils.parametrizations import weight_norm\nfrom torch.nn.utils.parametrize import remove_parametrizations\nfrom torch.utils.checkpoint import checkpoint\n\n\ndef sequence_mask(length, max_length=None):\n    if max_length is None:\n        max_length = length.max()\n    x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n    return x.unsqueeze(0) < length.unsqueeze(1)\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv1D\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return (kernel_size * dilation - dilation) // 2\n\n\ndef unpad1d(x: torch.Tensor, paddings: tuple[int, int]):\n    \"\"\"Remove padding from x, handling properly zero padding. Only for 1d!\"\"\"\n    padding_left, padding_right = paddings\n    assert padding_left >= 0 and padding_right >= 0, (padding_left, padding_right)\n    assert (padding_left + padding_right) <= x.shape[-1]\n    end = x.shape[-1] - padding_right\n    return x[..., padding_left:end]\n\n\ndef get_extra_padding_for_conv1d(\n    x: torch.Tensor, kernel_size: int, stride: int, padding_total: int = 0\n) -> int:\n    \"\"\"See `pad_for_conv1d`.\"\"\"\n    length = x.shape[-1]\n    n_frames = (length - kernel_size + padding_total) / stride + 1\n    ideal_length = (math.ceil(n_frames) - 1) * stride + (kernel_size - padding_total)\n    return ideal_length - length\n\n\ndef pad1d(\n    x: torch.Tensor,\n    paddings: tuple[int, int],\n    mode: str = \"zeros\",\n    value: float = 0.0,\n):\n    \"\"\"Tiny wrapper around F.pad, just to allow for reflect padding on small input.\n    If this is the case, we insert extra 0 padding to the right\n    before the reflection happen.\n    \"\"\"\n    length = x.shape[-1]\n    padding_left, padding_right = paddings\n    assert padding_left >= 0 and padding_right >= 0, (padding_left, padding_right)\n    if mode == \"reflect\":\n        max_pad = max(padding_left, padding_right)\n        extra_pad = 0\n        if length <= max_pad:\n            extra_pad = max_pad - length + 1\n            x = F.pad(x, (0, extra_pad))\n        padded = F.pad(x, paddings, mode, value)\n        end = padded.shape[-1] - extra_pad\n        return padded[..., :end]\n    else:\n        return F.pad(x, paddings, mode, value)\n\n\nclass FishConvNet(nn.Module):\n    def __init__(\n        self, in_channels, out_channels, kernel_size, dilation=1, stride=1, groups=1\n    ):\n        super(FishConvNet, self).__init__()\n        self.conv = nn.Conv1d(\n            in_channels,\n            out_channels,\n            kernel_size,\n            stride=stride,\n            dilation=dilation,\n            groups=groups,\n        )\n        self.stride = stride\n        self.kernel_size = (kernel_size - 1) * dilation + 1\n        self.dilation = dilation\n\n    def forward(self, x):\n        pad = self.kernel_size - self.stride\n        extra_padding = get_extra_padding_for_conv1d(\n            x, self.kernel_size, self.stride, pad\n        )\n        x = pad1d(x, (pad, extra_padding), mode=\"constant\", value=0)\n        return self.conv(x).contiguous()\n\n    def weight_norm(self, name=\"weight\", dim=0):\n        self.conv = weight_norm(self.conv, name=name, dim=dim)\n        return self\n\n    def remove_parametrizations(self, name=\"weight\"):\n        self.conv = remove_parametrizations(self.conv, name)\n        return self\n\n\nclass FishTransConvNet(nn.Module):\n    def __init__(self, in_channels, out_channels, kernel_size, dilation=1, stride=1):\n        super(FishTransConvNet, self).__init__()\n        self.conv = nn.ConvTranspose1d(\n            in_channels, out_channels, kernel_size, stride=stride, dilation=dilation\n        )\n        self.stride = stride\n        self.kernel_size = kernel_size\n\n    def forward(self, x):\n        x = self.conv(x)\n        pad = self.kernel_size - self.stride\n        padding_right = math.ceil(pad)\n        padding_left = pad - padding_right\n        x = unpad1d(x, (padding_left, padding_right))\n        return x.contiguous()\n\n    def weight_norm(self, name=\"weight\", dim=0):\n        self.conv = weight_norm(self.conv, name=name, dim=dim)\n        return self\n\n    def remove_parametrizations(self, name=\"weight\"):\n        self.conv = remove_parametrizations(self.conv, name)\n        return self\n\n\nclass ResBlock1(torch.nn.Module):\n    def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)):\n        super().__init__()\n\n        self.convs1 = nn.ModuleList(\n            [\n                FishConvNet(\n                    channels, channels, kernel_size, stride=1, dilation=dilation[0]\n                ).weight_norm(),\n                FishConvNet(\n                    channels, channels, kernel_size, stride=1, dilation=dilation[1]\n                ).weight_norm(),\n                FishConvNet(\n                    channels, channels, kernel_size, stride=1, dilation=dilation[2]\n                ).weight_norm(),\n            ]\n        )\n        self.convs1.apply(init_weights)\n\n        self.convs2 = nn.ModuleList(\n            [\n                FishConvNet(\n                    channels, channels, kernel_size, stride=1, dilation=dilation[0]\n                ).weight_norm(),\n                FishConvNet(\n                    channels, channels, kernel_size, stride=1, dilation=dilation[1]\n                ).weight_norm(),\n                FishConvNet(\n                    channels, channels, kernel_size, stride=1, dilation=dilation[2]\n                ).weight_norm(),\n            ]\n        )\n        self.convs2.apply(init_weights)\n\n    def forward(self, x):\n        for c1, c2 in zip(self.convs1, self.convs2):\n            xt = F.silu(x)\n            xt = c1(xt)\n            xt = F.silu(xt)\n            xt = c2(xt)\n            x = xt + x\n        return x\n\n    def remove_parametrizations(self):\n        for conv in self.convs1:\n            conv.remove_parametrizations()\n        for conv in self.convs2:\n            conv.remove_parametrizations()\n\n\nclass ParallelBlock(nn.Module):\n    def __init__(\n        self,\n        channels: int,\n        kernel_sizes: tuple[int] = (3, 7, 11),\n        dilation_sizes: tuple[tuple[int]] = ((1, 3, 5), (1, 3, 5), (1, 3, 5)),\n    ):\n        super().__init__()\n\n        assert len(kernel_sizes) == len(dilation_sizes)\n\n        self.blocks = nn.ModuleList()\n        for k, d in zip(kernel_sizes, dilation_sizes):\n            self.blocks.append(ResBlock1(channels, k, d))\n\n    def forward(self, x):\n        return torch.stack([block(x) for block in self.blocks], dim=0).mean(dim=0)\n\n    def remove_parametrizations(self):\n        for block in self.blocks:\n            block.remove_parametrizations()\n\n\nclass HiFiGANGenerator(nn.Module):\n    def __init__(\n        self,\n        *,\n        hop_length: int = 512,\n        upsample_rates: tuple[int] = (8, 8, 2, 2, 2),\n        upsample_kernel_sizes: tuple[int] = (16, 16, 8, 2, 2),\n        resblock_kernel_sizes: tuple[int] = (3, 7, 11),\n        resblock_dilation_sizes: tuple[tuple[int]] = ((1, 3, 5), (1, 3, 5), (1, 3, 5)),\n        num_mels: int = 128,\n        upsample_initial_channel: int = 512,\n        pre_conv_kernel_size: int = 7,\n        post_conv_kernel_size: int = 7,\n        post_activation: Callable = partial(nn.SiLU, inplace=True),\n    ):\n        super().__init__()\n\n        assert (\n            prod(upsample_rates) == hop_length\n        ), f\"hop_length must be {prod(upsample_rates)}\"\n\n        self.conv_pre = FishConvNet(\n            num_mels,\n            upsample_initial_channel,\n            pre_conv_kernel_size,\n            stride=1,\n        ).weight_norm()\n\n        self.num_upsamples = len(upsample_rates)\n        self.num_kernels = len(resblock_kernel_sizes)\n\n        self.noise_convs = nn.ModuleList()\n        self.ups = nn.ModuleList()\n\n        for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):\n            self.ups.append(\n                FishTransConvNet(\n                    upsample_initial_channel // (2**i),\n                    upsample_initial_channel // (2 ** (i + 1)),\n                    k,\n                    stride=u,\n                ).weight_norm()\n            )\n\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = upsample_initial_channel // (2 ** (i + 1))\n            self.resblocks.append(\n                ParallelBlock(ch, resblock_kernel_sizes, resblock_dilation_sizes)\n            )\n\n        self.activation_post = post_activation()\n        self.conv_post = FishConvNet(\n            ch, 1, post_conv_kernel_size, stride=1\n        ).weight_norm()\n        self.ups.apply(init_weights)\n        self.conv_post.apply(init_weights)\n\n    def forward(self, x):\n        x = self.conv_pre(x)\n\n        for i in range(self.num_upsamples):\n            x = F.silu(x, inplace=True)\n            x = self.ups[i](x)\n\n            if self.training and self.checkpointing:\n                x = checkpoint(\n                    self.resblocks[i],\n                    x,\n                    use_reentrant=False,\n                )\n            else:\n                x = self.resblocks[i](x)\n\n        x = self.activation_post(x)\n        x = self.conv_post(x)\n        x = torch.tanh(x)\n\n        return x\n\n    def remove_parametrizations(self):\n        for up in self.ups:\n            up.remove_parametrizations()\n        for block in self.resblocks:\n            block.remove_parametrizations()\n        self.conv_pre.remove_parametrizations()\n        self.conv_post.remove_parametrizations()\n\n\n# DropPath copied from timm library\ndef drop_path(\n    x, drop_prob: float = 0.0, training: bool = False, scale_by_keep: bool = True\n):\n    \"\"\"Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).\n\n    This is the same as the DropConnect impl I created for EfficientNet, etc networks, however,\n    the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...\n    See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for\n    changing the layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use\n    'survival rate' as the argument.\n\n    \"\"\"  # noqa: E501\n\n    if drop_prob == 0.0 or not training:\n        return x\n    keep_prob = 1 - drop_prob\n    shape = (x.shape[0],) + (1,) * (\n        x.ndim - 1\n    )  # work with diff dim tensors, not just 2D ConvNets\n    random_tensor = x.new_empty(shape).bernoulli_(keep_prob)\n    if keep_prob > 0.0 and scale_by_keep:\n        random_tensor.div_(keep_prob)\n    return x * random_tensor\n\n\nclass DropPath(nn.Module):\n    \"\"\"Drop paths (Stochastic Depth) per sample  (when applied in main path of residual blocks).\"\"\"  # noqa: E501\n\n    def __init__(self, drop_prob: float = 0.0, scale_by_keep: bool = True):\n        super(DropPath, self).__init__()\n        self.drop_prob = drop_prob\n        self.scale_by_keep = scale_by_keep\n\n    def forward(self, x):\n        return drop_path(x, self.drop_prob, self.training, self.scale_by_keep)\n\n    def extra_repr(self):\n        return f\"drop_prob={round(self.drop_prob,3):0.3f}\"\n\n\nclass LayerNorm(nn.Module):\n    r\"\"\"LayerNorm that supports two data formats: channels_last (default) or channels_first.\n    The ordering of the dimensions in the inputs. channels_last corresponds to inputs with\n    shape (batch_size, height, width, channels) while channels_first corresponds to inputs\n    with shape (batch_size, channels, height, width).\n    \"\"\"  # noqa: E501\n\n    def __init__(self, normalized_shape, eps=1e-6, data_format=\"channels_last\"):\n        super().__init__()\n        self.weight = nn.Parameter(torch.ones(normalized_shape))\n        self.bias = nn.Parameter(torch.zeros(normalized_shape))\n        self.eps = eps\n        self.data_format = data_format\n        if self.data_format not in [\"channels_last\", \"channels_first\"]:\n            raise NotImplementedError\n        self.normalized_shape = (normalized_shape,)\n\n    def forward(self, x):\n        if self.data_format == \"channels_last\":\n            return F.layer_norm(\n                x, self.normalized_shape, self.weight, self.bias, self.eps\n            )\n        elif self.data_format == \"channels_first\":\n            u = x.mean(1, keepdim=True)\n            s = (x - u).pow(2).mean(1, keepdim=True)\n            x = (x - u) / torch.sqrt(s + self.eps)\n            x = self.weight[:, None] * x + self.bias[:, None]\n            return x\n\n\n# ConvNeXt Block copied from https://github.com/fishaudio/fish-diffusion/blob/main/fish_diffusion/modules/convnext.py\nclass ConvNeXtBlock(nn.Module):\n    r\"\"\"ConvNeXt Block. There are two equivalent implementations:\n    (1) DwConv -> LayerNorm (channels_first) -> 1x1 Conv -> GELU -> 1x1 Conv; all in (N, C, H, W)\n    (2) DwConv -> Permute to (N, H, W, C); LayerNorm (channels_last) -> Linear -> GELU -> Linear; Permute back\n    We use (2) as we find it slightly faster in PyTorch\n\n    Args:\n        dim (int): Number of input channels.\n        drop_path (float): Stochastic depth rate. Default: 0.0\n        layer_scale_init_value (float): Init value for Layer Scale. Default: 1e-6.\n        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4.0.\n        kernel_size (int): Kernel size for depthwise conv. Default: 7.\n        dilation (int): Dilation for depthwise conv. Default: 1.\n    \"\"\"  # noqa: E501\n\n    def __init__(\n        self,\n        dim: int,\n        drop_path: float = 0.0,\n        layer_scale_init_value: float = 1e-6,\n        mlp_ratio: float = 4.0,\n        kernel_size: int = 7,\n        dilation: int = 1,\n    ):\n        super().__init__()\n\n        self.dwconv = FishConvNet(\n            dim,\n            dim,\n            kernel_size=kernel_size,\n            # padding=int(dilation * (kernel_size - 1) / 2),\n            groups=dim,\n        )  # depthwise conv\n        self.norm = LayerNorm(dim, eps=1e-6)\n        self.pwconv1 = nn.Linear(\n            dim, int(mlp_ratio * dim)\n        )  # pointwise/1x1 convs, implemented with linear layers\n        self.act = nn.GELU()\n        self.pwconv2 = nn.Linear(int(mlp_ratio * dim), dim)\n        self.gamma = (\n            nn.Parameter(layer_scale_init_value * torch.ones((dim)), requires_grad=True)\n            if layer_scale_init_value > 0\n            else None\n        )\n        self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n\n    def forward(self, x, apply_residual: bool = True):\n        input = x\n\n        x = self.dwconv(x)\n        x = x.permute(0, 2, 1)  # (N, C, L) -> (N, L, C)\n        x = self.norm(x)\n        x = self.pwconv1(x)\n        x = self.act(x)\n        x = self.pwconv2(x)\n\n        if self.gamma is not None:\n            x = self.gamma * x\n\n        x = x.permute(0, 2, 1)  # (N, L, C) -> (N, C, L)\n        x = self.drop_path(x)\n\n        if apply_residual:\n            x = input + x\n\n        return x\n\n\nclass ConvNeXtEncoder(nn.Module):\n    def __init__(\n        self,\n        input_channels: int = 3,\n        depths: list[int] = [3, 3, 9, 3],\n        dims: list[int] = [96, 192, 384, 768],\n        drop_path_rate: float = 0.0,\n        layer_scale_init_value: float = 1e-6,\n        kernel_size: int = 7,\n    ):\n        super().__init__()\n        assert len(depths) == len(dims)\n\n        self.downsample_layers = nn.ModuleList()\n        stem = nn.Sequential(\n            FishConvNet(\n                input_channels,\n                dims[0],\n                kernel_size=7,\n                # padding=3,\n                # padding_mode=\"replicate\",\n                # padding_mode=\"zeros\",\n            ),\n            LayerNorm(dims[0], eps=1e-6, data_format=\"channels_first\"),\n        )\n        self.downsample_layers.append(stem)\n\n        for i in range(len(depths) - 1):\n            mid_layer = nn.Sequential(\n                LayerNorm(dims[i], eps=1e-6, data_format=\"channels_first\"),\n                nn.Conv1d(dims[i], dims[i + 1], kernel_size=1),\n            )\n            self.downsample_layers.append(mid_layer)\n\n        self.stages = nn.ModuleList()\n        dp_rates = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))]\n\n        cur = 0\n        for i in range(len(depths)):\n            stage = nn.Sequential(\n                *[\n                    ConvNeXtBlock(\n                        dim=dims[i],\n                        drop_path=dp_rates[cur + j],\n                        layer_scale_init_value=layer_scale_init_value,\n                        kernel_size=kernel_size,\n                    )\n                    for j in range(depths[i])\n                ]\n            )\n            self.stages.append(stage)\n            cur += depths[i]\n\n        self.norm = LayerNorm(dims[-1], eps=1e-6, data_format=\"channels_first\")\n        self.apply(self._init_weights)\n\n    def _init_weights(self, m):\n        if isinstance(m, (nn.Conv1d, nn.Linear)):\n            nn.init.trunc_normal_(m.weight, std=0.02)\n            nn.init.constant_(m.bias, 0)\n\n    def forward(\n        self,\n        x: torch.Tensor,\n    ) -> torch.Tensor:\n        for i in range(len(self.downsample_layers)):\n            x = self.downsample_layers[i](x)\n            x = self.stages[i](x)\n\n        return self.norm(x)\n\n\nclass FireflyArchitecture(nn.Module):\n    def __init__(\n        self,\n        backbone: nn.Module,\n        head: nn.Module,\n        quantizer: nn.Module,\n        spec_transform: nn.Module,\n    ):\n        super().__init__()\n\n        self.backbone = backbone\n        self.head = head\n        self.quantizer = quantizer\n        self.spec_transform = spec_transform\n        self.downsample_factor = math.prod(self.quantizer.downsample_factor)\n\n    def forward(self, x: torch.Tensor, template=None, mask=None) -> torch.Tensor:\n        if self.spec_transform is not None:\n            x = self.spec_transform(x)\n\n        x = self.backbone(x)\n        if mask is not None:\n            x = x * mask\n\n        if self.quantizer is not None:\n            vq_result = self.quantizer(x)\n            x = vq_result.z\n\n            if mask is not None:\n                x = x * mask\n\n        x = self.head(x, template=template)\n\n        if x.ndim == 2:\n            x = x[:, None, :]\n\n        if self.vq is not None:\n            return x, vq_result\n\n        return x\n\n    def encode(self, audios, audio_lengths):\n        audios = audios.float()\n\n        mels = self.spec_transform(audios)\n        mel_lengths = audio_lengths // self.spec_transform.hop_length\n        mel_masks = sequence_mask(mel_lengths, mels.shape[2])\n        mel_masks_float_conv = mel_masks[:, None, :].float()\n        mels = mels * mel_masks_float_conv\n\n        # Encode\n        encoded_features = self.backbone(mels) * mel_masks_float_conv\n        feature_lengths = mel_lengths // self.downsample_factor\n\n        return self.quantizer.encode(encoded_features), feature_lengths\n\n    def decode(self, indices, feature_lengths) -> torch.Tensor:\n        mel_masks = sequence_mask(\n            feature_lengths * self.downsample_factor,\n            indices.shape[2] * self.downsample_factor,\n        )\n        mel_masks_float_conv = mel_masks[:, None, :].float()\n        audio_lengths = (\n            feature_lengths * self.downsample_factor * self.spec_transform.hop_length\n        )\n\n        audio_masks = sequence_mask(\n            audio_lengths,\n            indices.shape[2] * self.downsample_factor * self.spec_transform.hop_length,\n        )\n        audio_masks_float_conv = audio_masks[:, None, :].float()\n\n        z = self.quantizer.decode(indices) * mel_masks_float_conv\n        x = self.head(z) * audio_masks_float_conv\n\n        return x, audio_lengths\n\n    def remove_parametrizations(self):\n        if hasattr(self.backbone, \"remove_parametrizations\"):\n            self.backbone.remove_parametrizations()\n\n        if hasattr(self.head, \"remove_parametrizations\"):\n            self.head.remove_parametrizations()\n\n    @property\n    def device(self):\n        return next(self.parameters()).device\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/models/vqgan/modules/fsq.py",
    "content": "from dataclasses import dataclass\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom vector_quantize_pytorch import GroupedResidualFSQ\n\nfrom .firefly import ConvNeXtBlock, FishConvNet, FishTransConvNet\n\n\n@dataclass\nclass FSQResult:\n    z: torch.Tensor\n    codes: torch.Tensor\n    latents: torch.Tensor\n\n\nclass DownsampleFiniteScalarQuantize(nn.Module):\n    def __init__(\n        self,\n        input_dim: int = 512,\n        n_codebooks: int = 9,\n        n_groups: int = 1,\n        levels: tuple[int] = (8, 5, 5, 5),  # Approximate 2**10\n        downsample_factor: tuple[int] = (2, 2),\n        downsample_dims: tuple[int] | None = None,\n    ):\n        super().__init__()\n\n        if downsample_dims is None:\n            downsample_dims = [input_dim for _ in range(len(downsample_factor))]\n\n        all_dims = (input_dim,) + tuple(downsample_dims)\n\n        self.residual_fsq = GroupedResidualFSQ(\n            dim=all_dims[-1],\n            levels=levels,\n            num_quantizers=n_codebooks,\n            groups=n_groups,\n        )\n\n        self.downsample_factor = downsample_factor\n        self.downsample_dims = downsample_dims\n\n        self.downsample = nn.Sequential(\n            *[\n                nn.Sequential(\n                    FishConvNet(\n                        all_dims[idx],\n                        all_dims[idx + 1],\n                        kernel_size=factor,\n                        stride=factor,\n                    ),\n                    ConvNeXtBlock(dim=all_dims[idx + 1]),\n                )\n                for idx, factor in enumerate(downsample_factor)\n            ]\n        )\n\n        self.upsample = nn.Sequential(\n            *[\n                nn.Sequential(\n                    FishTransConvNet(\n                        all_dims[idx + 1],\n                        all_dims[idx],\n                        kernel_size=factor,\n                        stride=factor,\n                    ),\n                    ConvNeXtBlock(dim=all_dims[idx]),\n                )\n                for idx, factor in reversed(list(enumerate(downsample_factor)))\n            ]\n        )\n\n        self.apply(self._init_weights)\n\n    def _init_weights(self, m):\n        if isinstance(m, (nn.Conv1d, nn.Linear)):\n            nn.init.trunc_normal_(m.weight, std=0.02)\n            nn.init.constant_(m.bias, 0)\n\n    def forward(self, z) -> FSQResult:\n        original_shape = z.shape\n        z = self.downsample(z)\n        quantized, indices = self.residual_fsq(z.mT)\n        result = FSQResult(\n            z=quantized.mT,\n            codes=indices.mT,\n            latents=z,\n        )\n        result.z = self.upsample(result.z)\n\n        # Pad or crop z to match original shape\n        diff = original_shape[-1] - result.z.shape[-1]\n        left = diff // 2\n        right = diff - left\n\n        if diff > 0:\n            result.z = F.pad(result.z, (left, right))\n        elif diff < 0:\n            result.z = result.z[..., -left:right]\n\n        return result\n\n    def encode(self, z):\n        z = self.downsample(z)\n        _, indices = self.residual_fsq(z.mT)\n        indices = rearrange(indices, \"g b l r -> b (g r) l\")\n        return indices\n\n    def decode(self, indices: torch.Tensor):\n        indices = rearrange(indices, \"b (g r) l -> g b l r\", g=self.residual_fsq.groups)\n        z_q = self.residual_fsq.get_output_from_indices(indices)\n        z_q = self.upsample(z_q.mT)\n        return z_q\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/models/vqgan/utils.py",
    "content": "import matplotlib\nimport torch\nfrom matplotlib import pyplot as plt\n\nmatplotlib.use(\"Agg\")\n\n\ndef convert_pad_shape(pad_shape):\n    l = pad_shape[::-1]\n    pad_shape = [item for sublist in l for item in sublist]\n    return pad_shape\n\n\ndef sequence_mask(length, max_length=None):\n    if max_length is None:\n        max_length = length.max()\n    x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n    return x.unsqueeze(0) < length.unsqueeze(1)\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef plot_mel(data, titles=None):\n    fig, axes = plt.subplots(len(data), 1, squeeze=False)\n\n    if titles is None:\n        titles = [None for i in range(len(data))]\n\n    plt.tight_layout()\n\n    for i in range(len(data)):\n        mel = data[i]\n\n        if isinstance(mel, torch.Tensor):\n            mel = mel.float().detach().cpu().numpy()\n\n        axes[i][0].imshow(mel, origin=\"lower\")\n        axes[i][0].set_aspect(2.5, adjustable=\"box\")\n        axes[i][0].set_ylim(0, mel.shape[0])\n        axes[i][0].set_title(titles[i], fontsize=\"medium\")\n        axes[i][0].tick_params(labelsize=\"x-small\", left=False, labelleft=False)\n        axes[i][0].set_anchor(\"W\")\n\n    return fig\n\n\ndef slice_segments(x, ids_str, segment_size=4):\n    ret = torch.zeros_like(x[:, :, :segment_size])\n    for i in range(x.size(0)):\n        idx_str = ids_str[i]\n        idx_end = idx_str + segment_size\n        ret[i] = x[i, :, idx_str:idx_end]\n\n    return ret\n\n\ndef rand_slice_segments(x, x_lengths=None, segment_size=4):\n    b, d, t = x.size()\n    if x_lengths is None:\n        x_lengths = t\n    ids_str_max = torch.clamp(x_lengths - segment_size + 1, min=0)\n    ids_str = (torch.rand([b], device=x.device) * ids_str_max).to(dtype=torch.long)\n    ret = slice_segments(x, ids_str, segment_size)\n    return ret, ids_str\n\n\n@torch.jit.script\ndef fused_add_tanh_sigmoid_multiply(in_act, n_channels):\n    n_channels_int = n_channels[0]\n    t_act = torch.tanh(in_act[:, :n_channels_int, :])\n    s_act = torch.sigmoid(in_act[:, n_channels_int:, :])\n    acts = t_act * s_act\n\n    return acts\n\n\ndef avg_with_mask(x, mask):\n    assert mask.dtype == torch.float, \"Mask should be float\"\n\n    if mask.ndim == 2:\n        mask = mask.unsqueeze(1)\n\n    if mask.shape[1] == 1:\n        mask = mask.expand_as(x)\n\n    return (x * mask).sum() / mask.sum()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/scheduler.py",
    "content": "import math\n\n\ndef get_cosine_schedule_with_warmup_lr_lambda(\n    current_step: int,\n    *,\n    num_warmup_steps: int | float,\n    num_training_steps: int,\n    num_cycles: float = 0.5,\n    final_lr_ratio: float = 0.0,\n):\n    if 0 < num_warmup_steps < 1:  # float mode\n        num_warmup_steps = int(num_warmup_steps * num_training_steps)\n\n    if current_step < num_warmup_steps:\n        return float(current_step) / float(max(1, num_warmup_steps))\n\n    progress = float(current_step - num_warmup_steps) / float(\n        max(1, num_training_steps - num_warmup_steps)\n    )\n\n    return max(\n        final_lr_ratio,\n        0.5 * (1.0 + math.cos(math.pi * float(num_cycles) * 2.0 * progress)),\n    )\n\n\ndef get_constant_schedule_with_warmup_lr_lambda(\n    current_step: int,\n    *,\n    num_warmup_steps: int | float,\n    num_training_steps: int | None = None,\n):\n    if 0 < num_warmup_steps < 1:  # float mode\n        num_warmup_steps = int(num_warmup_steps * num_training_steps)\n\n    if current_step < num_warmup_steps:\n        return float(current_step) / float(max(1, num_warmup_steps))\n\n    return 1.0\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/__init__.py",
    "content": "from .clean import clean_text\nfrom .spliter import split_text\n\n__all__ = [\"clean_text\", \"split_text\"]\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/.gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n.hypothesis/\n.pytest_cache/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n\n# JetBrains PyCharm\n.idea\n\n# Customize\nreferences\nurl.txt\n\n# Git\n.git\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/README.md",
    "content": "# This account is no longer in use, see [Atomicoo](https://github.com/atomicoo) for my latest works.\n\n# Chn Text Norm\n\nthis is a repository for chinese text normalization (no longer maintained).\n\n## Quick Start ##\n\n### Git Clone Repo ###\n\ngit clone this repo to the root directory of your project which need to use it.\n\n    cd /path/to/proj\n    git clone https://github.com/Joee1995/chn-text-norm.git\n\nafter that, your doc tree should be:\n```\nproj                     # root of your project\n|--- chn_text_norm       # this chn-text-norm tool\n     |--- text.py\n     |--- ...\n|--- text_normalize.py   # your text normalization code\n|--- ...\n```\n\n### How to Use ? ###\n\n    # text_normalize.py\n    from chn_text_norm.text import *\n    \n    raw_text = 'your raw text'\n    text = Text(raw_text=raw_text).normalize()\n\n### How to add quantums ###\n\n打开test.py，然后你就知道怎么做了。\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/basic_class.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"基本类\n中文字符类\n中文数字/数位类\n中文数字类\n中文数位类\n中文数字系统类\n中文数学符号类\n*中文其他符号类\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-02\"\n\nfrom fish_speech.text.chn_text_norm.basic_constant import NUMBERING_TYPES\n\n\nclass ChineseChar(object):\n    \"\"\"\n    中文字符\n    每个字符对应简体和繁体,\n    e.g. 简体 = '负', 繁体 = '負'\n    转换时可转换为简体或繁体\n    \"\"\"\n\n    def __init__(self, simplified, traditional):\n        self.simplified = simplified\n        self.traditional = traditional\n        self.__repr__ = self.__str__\n\n    def __str__(self):\n        return self.simplified or self.traditional or None\n\n    def __repr__(self):\n        return self.__str__()\n\n\nclass ChineseNumberUnit(ChineseChar):\n    \"\"\"\n    中文数字/数位字符\n    每个字符除繁简体外还有一个额外的大写字符\n    e.g. '陆' 和 '陸'\n    \"\"\"\n\n    def __init__(self, power, simplified, traditional, big_s, big_t):\n        super(ChineseNumberUnit, self).__init__(simplified, traditional)\n        self.power = power\n        self.big_s = big_s\n        self.big_t = big_t\n\n    def __str__(self):\n        return \"10^{}\".format(self.power)\n\n    @classmethod\n    def create(cls, index, value, numbering_type=NUMBERING_TYPES[1], small_unit=False):\n\n        if small_unit:\n            return ChineseNumberUnit(\n                power=index + 1,\n                simplified=value[0],\n                traditional=value[1],\n                big_s=value[1],\n                big_t=value[1],\n            )\n        elif numbering_type == NUMBERING_TYPES[0]:\n            return ChineseNumberUnit(\n                power=index + 8,\n                simplified=value[0],\n                traditional=value[1],\n                big_s=value[0],\n                big_t=value[1],\n            )\n        elif numbering_type == NUMBERING_TYPES[1]:\n            return ChineseNumberUnit(\n                power=(index + 2) * 4,\n                simplified=value[0],\n                traditional=value[1],\n                big_s=value[0],\n                big_t=value[1],\n            )\n        elif numbering_type == NUMBERING_TYPES[2]:\n            return ChineseNumberUnit(\n                power=pow(2, index + 3),\n                simplified=value[0],\n                traditional=value[1],\n                big_s=value[0],\n                big_t=value[1],\n            )\n        else:\n            raise ValueError(\n                \"Counting type should be in {0} ({1} provided).\".format(\n                    NUMBERING_TYPES, numbering_type\n                )\n            )\n\n\nclass ChineseNumberDigit(ChineseChar):\n    \"\"\"\n    中文数字字符\n    \"\"\"\n\n    def __init__(\n        self, value, simplified, traditional, big_s, big_t, alt_s=None, alt_t=None\n    ):\n        super(ChineseNumberDigit, self).__init__(simplified, traditional)\n        self.value = value\n        self.big_s = big_s\n        self.big_t = big_t\n        self.alt_s = alt_s\n        self.alt_t = alt_t\n\n    def __str__(self):\n        return str(self.value)\n\n    @classmethod\n    def create(cls, i, v):\n        return ChineseNumberDigit(i, v[0], v[1], v[2], v[3])\n\n\nclass ChineseMath(ChineseChar):\n    \"\"\"\n    中文数位字符\n    \"\"\"\n\n    def __init__(self, simplified, traditional, symbol, expression=None):\n        super(ChineseMath, self).__init__(simplified, traditional)\n        self.symbol = symbol\n        self.expression = expression\n        self.big_s = simplified\n        self.big_t = traditional\n\n\nCC, CNU, CND, CM = ChineseChar, ChineseNumberUnit, ChineseNumberDigit, ChineseMath\n\n\nclass NumberSystem(object):\n    \"\"\"\n    中文数字系统\n    \"\"\"\n\n    pass\n\n\nclass MathSymbol(object):\n    \"\"\"\n    用于中文数字系统的数学符号 (繁/简体), e.g.\n    positive = ['正', '正']\n    negative = ['负', '負']\n    point = ['点', '點']\n    \"\"\"\n\n    def __init__(self, positive, negative, point):\n        self.positive = positive\n        self.negative = negative\n        self.point = point\n\n    def __iter__(self):\n        for v in self.__dict__.values():\n            yield v\n\n\n# class OtherSymbol(object):\n#     \"\"\"\n#     其他符号\n#     \"\"\"\n#\n#     def __init__(self, sil):\n#         self.sil = sil\n#\n#     def __iter__(self):\n#         for v in self.__dict__.values():\n#             yield v\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/basic_constant.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"基本常量\n中文数字/数位/符号字符常量\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-02\"\n\nCHINESE_DIGIS = \"零一二三四五六七八九\"\nBIG_CHINESE_DIGIS_SIMPLIFIED = \"零壹贰叁肆伍陆柒捌玖\"\nBIG_CHINESE_DIGIS_TRADITIONAL = \"零壹貳參肆伍陸柒捌玖\"\nSMALLER_BIG_CHINESE_UNITS_SIMPLIFIED = \"十百千万\"\nSMALLER_BIG_CHINESE_UNITS_TRADITIONAL = \"拾佰仟萬\"\nLARGER_CHINESE_NUMERING_UNITS_SIMPLIFIED = \"亿兆京垓秭穰沟涧正载\"\nLARGER_CHINESE_NUMERING_UNITS_TRADITIONAL = \"億兆京垓秭穰溝澗正載\"\nSMALLER_CHINESE_NUMERING_UNITS_SIMPLIFIED = \"十百千万\"\nSMALLER_CHINESE_NUMERING_UNITS_TRADITIONAL = \"拾佰仟萬\"\n\nZERO_ALT = \"〇\"\nONE_ALT = \"幺\"\nTWO_ALTS = [\"两\", \"兩\"]\n\nPOSITIVE = [\"正\", \"正\"]\nNEGATIVE = [\"负\", \"負\"]\nPOINT = [\"点\", \"點\"]\n# PLUS = [u'加', u'加']\n# SIL = [u'杠', u'槓']\n\n# 中文数字系统类型\nNUMBERING_TYPES = [\"low\", \"mid\", \"high\"]\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/basic_util.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"基本方法\n创建中文数字系统 方法\n中文字符串 <=> 数字串 方法\n数字串 <=> 中文字符串 方法\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-02\"\n\nfrom fish_speech.text.chn_text_norm.basic_class import *\nfrom fish_speech.text.chn_text_norm.basic_constant import *\n\n\ndef create_system(numbering_type=NUMBERING_TYPES[1]):\n    \"\"\"\n    根据数字系统类型返回创建相应的数字系统，默认为 mid\n    NUMBERING_TYPES = ['low', 'mid', 'high']: 中文数字系统类型\n        low:  '兆' = '亿' * '十' = $10^{9}$,  '京' = '兆' * '十', etc.\n        mid:  '兆' = '亿' * '万' = $10^{12}$, '京' = '兆' * '万', etc.\n        high: '兆' = '亿' * '亿' = $10^{16}$, '京' = '兆' * '兆', etc.\n    返回对应的数字系统\n    \"\"\"\n\n    # chinese number units of '亿' and larger\n    all_larger_units = zip(\n        LARGER_CHINESE_NUMERING_UNITS_SIMPLIFIED,\n        LARGER_CHINESE_NUMERING_UNITS_TRADITIONAL,\n    )\n    larger_units = [\n        CNU.create(i, v, numbering_type, False) for i, v in enumerate(all_larger_units)\n    ]\n    # chinese number units of '十, 百, 千, 万'\n    all_smaller_units = zip(\n        SMALLER_CHINESE_NUMERING_UNITS_SIMPLIFIED,\n        SMALLER_CHINESE_NUMERING_UNITS_TRADITIONAL,\n    )\n    smaller_units = [\n        CNU.create(i, v, small_unit=True) for i, v in enumerate(all_smaller_units)\n    ]\n    # digis\n    chinese_digis = zip(\n        CHINESE_DIGIS,\n        CHINESE_DIGIS,\n        BIG_CHINESE_DIGIS_SIMPLIFIED,\n        BIG_CHINESE_DIGIS_TRADITIONAL,\n    )\n    digits = [CND.create(i, v) for i, v in enumerate(chinese_digis)]\n    digits[0].alt_s, digits[0].alt_t = ZERO_ALT, ZERO_ALT\n    digits[1].alt_s, digits[1].alt_t = ONE_ALT, ONE_ALT\n    digits[2].alt_s, digits[2].alt_t = TWO_ALTS[0], TWO_ALTS[1]\n\n    # symbols\n    positive_cn = CM(POSITIVE[0], POSITIVE[1], \"+\", lambda x: x)\n    negative_cn = CM(NEGATIVE[0], NEGATIVE[1], \"-\", lambda x: -x)\n    point_cn = CM(POINT[0], POINT[1], \".\", lambda x, y: float(str(x) + \".\" + str(y)))\n    # sil_cn = CM(SIL[0], SIL[1], '-', lambda x, y: float(str(x) + '-' + str(y)))\n    system = NumberSystem()\n    system.units = smaller_units + larger_units\n    system.digits = digits\n    system.math = MathSymbol(positive_cn, negative_cn, point_cn)\n    # system.symbols = OtherSymbol(sil_cn)\n    return system\n\n\ndef chn2num(chinese_string, numbering_type=NUMBERING_TYPES[1]):\n\n    def get_symbol(char, system):\n        for u in system.units:\n            if char in [u.traditional, u.simplified, u.big_s, u.big_t]:\n                return u\n        for d in system.digits:\n            if char in [\n                d.traditional,\n                d.simplified,\n                d.big_s,\n                d.big_t,\n                d.alt_s,\n                d.alt_t,\n            ]:\n                return d\n        for m in system.math:\n            if char in [m.traditional, m.simplified]:\n                return m\n\n    def string2symbols(chinese_string, system):\n        int_string, dec_string = chinese_string, \"\"\n        for p in [system.math.point.simplified, system.math.point.traditional]:\n            if p in chinese_string:\n                int_string, dec_string = chinese_string.split(p)\n                break\n        return [get_symbol(c, system) for c in int_string], [\n            get_symbol(c, system) for c in dec_string\n        ]\n\n    def correct_symbols(integer_symbols, system):\n        \"\"\"\n        一百八 to 一百八十\n        一亿一千三百万 to 一亿 一千万 三百万\n        \"\"\"\n\n        if integer_symbols and isinstance(integer_symbols[0], CNU):\n            if integer_symbols[0].power == 1:\n                integer_symbols = [system.digits[1]] + integer_symbols\n\n        if len(integer_symbols) > 1:\n            if isinstance(integer_symbols[-1], CND) and isinstance(\n                integer_symbols[-2], CNU\n            ):\n                integer_symbols.append(\n                    CNU(integer_symbols[-2].power - 1, None, None, None, None)\n                )\n\n        result = []\n        unit_count = 0\n        for s in integer_symbols:\n            if isinstance(s, CND):\n                result.append(s)\n                unit_count = 0\n            elif isinstance(s, CNU):\n                current_unit = CNU(s.power, None, None, None, None)\n                unit_count += 1\n\n            if unit_count == 1:\n                result.append(current_unit)\n            elif unit_count > 1:\n                for i in range(len(result)):\n                    if (\n                        isinstance(result[-i - 1], CNU)\n                        and result[-i - 1].power < current_unit.power\n                    ):\n                        result[-i - 1] = CNU(\n                            result[-i - 1].power + current_unit.power,\n                            None,\n                            None,\n                            None,\n                            None,\n                        )\n        return result\n\n    def compute_value(integer_symbols):\n        \"\"\"\n        Compute the value.\n        When current unit is larger than previous unit, current unit * all previous units will be used as all previous units.\n        e.g. '两千万' = 2000 * 10000 not 2000 + 10000\n        \"\"\"\n        value = [0]\n        last_power = 0\n        for s in integer_symbols:\n            if isinstance(s, CND):\n                value[-1] = s.value\n            elif isinstance(s, CNU):\n                value[-1] *= pow(10, s.power)\n                if s.power > last_power:\n                    value[:-1] = list(map(lambda v: v * pow(10, s.power), value[:-1]))\n                    last_power = s.power\n                value.append(0)\n        return sum(value)\n\n    system = create_system(numbering_type)\n    int_part, dec_part = string2symbols(chinese_string, system)\n    int_part = correct_symbols(int_part, system)\n    int_str = str(compute_value(int_part))\n    dec_str = \"\".join([str(d.value) for d in dec_part])\n    if dec_part:\n        return \"{0}.{1}\".format(int_str, dec_str)\n    else:\n        return int_str\n\n\ndef num2chn(\n    number_string,\n    numbering_type=NUMBERING_TYPES[1],\n    big=False,\n    traditional=False,\n    alt_zero=False,\n    alt_one=False,\n    alt_two=True,\n    use_zeros=True,\n    use_units=True,\n):\n\n    def get_value(value_string, use_zeros=True):\n\n        striped_string = value_string.lstrip(\"0\")\n\n        # record nothing if all zeros\n        if not striped_string:\n            return []\n\n        # record one digits\n        elif len(striped_string) == 1:\n            if use_zeros and len(value_string) != len(striped_string):\n                return [system.digits[0], system.digits[int(striped_string)]]\n            else:\n                return [system.digits[int(striped_string)]]\n\n        # recursively record multiple digits\n        else:\n            result_unit = next(\n                u for u in reversed(system.units) if u.power < len(striped_string)\n            )\n            result_string = value_string[: -result_unit.power]\n            return (\n                get_value(result_string)\n                + [result_unit]\n                + get_value(striped_string[-result_unit.power :])\n            )\n\n    system = create_system(numbering_type)\n\n    int_dec = number_string.split(\".\")\n    if len(int_dec) == 1:\n        int_string = int_dec[0]\n        dec_string = \"\"\n    elif len(int_dec) == 2:\n        int_string = int_dec[0]\n        dec_string = int_dec[1]\n    else:\n        raise ValueError(\n            \"invalid input num string with more than one dot: {}\".format(number_string)\n        )\n\n    if use_units and len(int_string) > 1:\n        result_symbols = get_value(int_string)\n    else:\n        result_symbols = [system.digits[int(c)] for c in int_string]\n    dec_symbols = [system.digits[int(c)] for c in dec_string]\n    if dec_string:\n        result_symbols += [system.math.point] + dec_symbols\n\n    if alt_two:\n        liang = CND(\n            2,\n            system.digits[2].alt_s,\n            system.digits[2].alt_t,\n            system.digits[2].big_s,\n            system.digits[2].big_t,\n        )\n        for i, v in enumerate(result_symbols):\n            if isinstance(v, CND) and v.value == 2:\n                next_symbol = (\n                    result_symbols[i + 1] if i < len(result_symbols) - 1 else None\n                )\n                previous_symbol = result_symbols[i - 1] if i > 0 else None\n                if isinstance(next_symbol, CNU) and isinstance(\n                    previous_symbol, (CNU, type(None))\n                ):\n                    if next_symbol.power != 1 and (\n                        (previous_symbol is None) or (previous_symbol.power != 1)\n                    ):\n                        result_symbols[i] = liang\n\n    # if big is True, '两' will not be used and `alt_two` has no impact on output\n    if big:\n        attr_name = \"big_\"\n        if traditional:\n            attr_name += \"t\"\n        else:\n            attr_name += \"s\"\n    else:\n        if traditional:\n            attr_name = \"traditional\"\n        else:\n            attr_name = \"simplified\"\n\n    result = \"\".join([getattr(s, attr_name) for s in result_symbols])\n\n    # if not use_zeros:\n    #     result = result.strip(getattr(system.digits[0], attr_name))\n\n    if alt_zero:\n        result = result.replace(\n            getattr(system.digits[0], attr_name), system.digits[0].alt_s\n        )\n\n    if alt_one:\n        result = result.replace(\n            getattr(system.digits[1], attr_name), system.digits[1].alt_s\n        )\n\n    for i, p in enumerate(POINT):\n        if result.startswith(p):\n            return CHINESE_DIGIS[0] + result\n\n    # ^10, 11, .., 19\n    if (\n        len(result) >= 2\n        and result[1]\n        in [\n            SMALLER_CHINESE_NUMERING_UNITS_SIMPLIFIED[0],\n            SMALLER_CHINESE_NUMERING_UNITS_TRADITIONAL[0],\n        ]\n        and result[0]\n        in [\n            CHINESE_DIGIS[1],\n            BIG_CHINESE_DIGIS_SIMPLIFIED[1],\n            BIG_CHINESE_DIGIS_TRADITIONAL[1],\n        ]\n    ):\n        result = result[1:]\n\n    return result\n\n\nif __name__ == \"__main__\":\n\n    # 测试程序\n    all_chinese_number_string = (\n        CHINESE_DIGIS\n        + BIG_CHINESE_DIGIS_SIMPLIFIED\n        + BIG_CHINESE_DIGIS_TRADITIONAL\n        + LARGER_CHINESE_NUMERING_UNITS_SIMPLIFIED\n        + LARGER_CHINESE_NUMERING_UNITS_TRADITIONAL\n        + SMALLER_CHINESE_NUMERING_UNITS_SIMPLIFIED\n        + SMALLER_CHINESE_NUMERING_UNITS_TRADITIONAL\n        + ZERO_ALT\n        + ONE_ALT\n        + \"\".join(TWO_ALTS + POSITIVE + NEGATIVE + POINT)\n    )\n\n    print(\"num:\", chn2num(\"一万零四百零三点八零五\"))\n    print(\"num:\", chn2num(\"一亿六点三\"))\n    print(\"num:\", chn2num(\"一亿零六点三\"))\n    print(\"num:\", chn2num(\"两千零一亿六点三\"))\n    # print('num:', chn2num('一零零八六'))\n    print(\"txt:\", num2chn(\"10260.03\", alt_zero=True))\n    print(\"txt:\", num2chn(\"20037.090\", numbering_type=\"low\", traditional=True))\n    print(\"txt:\", num2chn(\"100860001.77\", numbering_type=\"high\", big=True))\n    print(\n        \"txt:\",\n        num2chn(\n            \"059523810880\",\n            alt_one=True,\n            alt_two=False,\n            use_lzeros=True,\n            use_rzeros=True,\n            use_units=False,\n        ),\n    )\n\n    print(all_chinese_number_string)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/cardinal.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"CARDINAL类 (包含小数DECIMAL类)\n纯数 <=> 中文字符串 方法\n中文字符串 <=> 纯数 方法\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-03\"\n\nfrom fish_speech.text.chn_text_norm.basic_util import *\n\n\nclass Cardinal:\n    \"\"\"\n    CARDINAL类\n    \"\"\"\n\n    def __init__(self, cardinal=None, chntext=None):\n        self.cardinal = cardinal\n        self.chntext = chntext\n\n    def chntext2cardinal(self):\n        return chn2num(self.chntext)\n\n    def cardinal2chntext(self):\n        return num2chn(self.cardinal)\n\n\nif __name__ == \"__main__\":\n\n    # 测试程序\n    print(Cardinal(cardinal=\"21357.230\").cardinal2chntext())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/date.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"DATE类\n日期 <=> 中文字符串 方法\n中文字符串 <=> 日期 方法\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-07\"\n\nfrom fish_speech.text.chn_text_norm.cardinal import Cardinal\nfrom fish_speech.text.chn_text_norm.digit import Digit\n\n\nclass Date:\n    \"\"\"\n    DATE类\n    \"\"\"\n\n    def __init__(self, date=None, chntext=None):\n        self.date = date\n        self.chntext = chntext\n\n    # def chntext2date(self):\n    #     chntext = self.chntext\n    #     try:\n    #         year, other = chntext.strip().split('年', maxsplit=1)\n    #         year = Digit(chntext=year).digit2chntext() + '年'\n    #     except ValueError:\n    #         other = chntext\n    #         year = ''\n    #     if other:\n    #         try:\n    #             month, day = other.strip().split('月', maxsplit=1)\n    #             month = Cardinal(chntext=month).chntext2cardinal() + '月'\n    #         except ValueError:\n    #             day = chntext\n    #             month = ''\n    #         if day:\n    #             day = Cardinal(chntext=day[:-1]).chntext2cardinal() + day[-1]\n    #     else:\n    #         month = ''\n    #         day = ''\n    #     date = year + month + day\n    #     self.date = date\n    #     return self.date\n\n    def date2chntext(self):\n        date = self.date\n        try:\n            year, other = date.strip().split(\"年\", maxsplit=1)\n            year = Digit(digit=year).digit2chntext() + \"年\"\n        except ValueError:\n            other = date\n            year = \"\"\n        if other:\n            try:\n                month, day = other.strip().split(\"月\", maxsplit=1)\n                month = Cardinal(cardinal=month).cardinal2chntext() + \"月\"\n            except ValueError:\n                day = date\n                month = \"\"\n            if day:\n                day = Cardinal(cardinal=day[:-1]).cardinal2chntext() + day[-1]\n        else:\n            month = \"\"\n            day = \"\"\n        chntext = year + month + day\n        self.chntext = chntext\n        return self.chntext\n\n\nif __name__ == \"__main__\":\n\n    # 测试\n    print(Date(date=\"09年3月16日\").date2chntext())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/digit.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"DIGIT类\n数字串 <=> 中文字符串 方法\n中文字符串 <=> 数字串 方法\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-03\"\n\nfrom fish_speech.text.chn_text_norm.basic_util import *\n\n\nclass Digit:\n    \"\"\"\n    DIGIT类\n    \"\"\"\n\n    def __init__(self, digit=None, chntext=None):\n        self.digit = digit\n        self.chntext = chntext\n\n    # def chntext2digit(self):\n    #     return chn2num(self.chntext)\n\n    def digit2chntext(self):\n        return num2chn(self.digit, alt_two=False, use_units=False)\n\n\nif __name__ == \"__main__\":\n\n    # 测试程序\n    print(Digit(digit=\"2016\").digit2chntext())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/fraction.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"FRACTION类\n分数 <=> 中文字符串 方法\n中文字符串 <=> 分数 方法\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-03\"\n\nfrom fish_speech.text.chn_text_norm.basic_util import *\n\n\nclass Fraction:\n    \"\"\"\n    FRACTION类\n    \"\"\"\n\n    def __init__(self, fraction=None, chntext=None):\n        self.fraction = fraction\n        self.chntext = chntext\n\n    def chntext2fraction(self):\n        denominator, numerator = self.chntext.split(\"分之\")\n        return chn2num(numerator) + \"/\" + chn2num(denominator)\n\n    def fraction2chntext(self):\n        numerator, denominator = self.fraction.split(\"/\")\n        return num2chn(denominator) + \"分之\" + num2chn(numerator)\n\n\nif __name__ == \"__main__\":\n\n    # 测试程序\n    print(Fraction(fraction=\"2135/7230\").fraction2chntext())\n    print(Fraction(chntext=\"五百八十一分之三百六十九\").chntext2fraction())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/money.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"MONEY类\n金钱 <=> 中文字符串 方法\n中文字符串 <=> 金钱 方法\n\"\"\"\nimport re\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-08\"\n\nfrom fish_speech.text.chn_text_norm.cardinal import Cardinal\n\n\nclass Money:\n    \"\"\"\n    MONEY类\n    \"\"\"\n\n    def __init__(self, money=None, chntext=None):\n        self.money = money\n        self.chntext = chntext\n\n    # def chntext2money(self):\n    #     return self.money\n\n    def money2chntext(self):\n        money = self.money\n        pattern = re.compile(r\"(\\d+(\\.\\d+)?)\")\n        matchers = pattern.findall(money)\n        if matchers:\n            for matcher in matchers:\n                money = money.replace(\n                    matcher[0], Cardinal(cardinal=matcher[0]).cardinal2chntext()\n                )\n        self.chntext = money\n        return self.chntext\n\n\nif __name__ == \"__main__\":\n\n    # 测试\n    print(Money(money=\"21.5万元\").money2chntext())\n    print(Money(money=\"230块5毛\").money2chntext())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/percentage.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"PERCENTAGE类\n百分数 <=> 中文字符串 方法\n中文字符串 <=> 百分数 方法\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-06\"\n\nfrom fish_speech.text.chn_text_norm.basic_util import *\n\n\nclass Percentage:\n    \"\"\"\n    PERCENTAGE类\n    \"\"\"\n\n    def __init__(self, percentage=None, chntext=None):\n        self.percentage = percentage\n        self.chntext = chntext\n\n    def chntext2percentage(self):\n        return chn2num(self.chntext.strip().strip(\"百分之\")) + \"%\"\n\n    def percentage2chntext(self):\n        return \"百分之\" + num2chn(self.percentage.strip().strip(\"%\"))\n\n\nif __name__ == \"__main__\":\n\n    # 测试程序\n    print(Percentage(chntext=\"百分之五十六点零三\").chntext2percentage())\n    print(Percentage(percentage=\"65.3%\").percentage2chntext())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/telephone.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"TELEPHONE类\n电话号码 <=> 中文字符串 方法\n中文字符串 <=> 电话号码 方法\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-03\"\n\nfrom fish_speech.text.chn_text_norm.basic_util import *\n\n\nclass TelePhone:\n    \"\"\"\n    TELEPHONE类\n    \"\"\"\n\n    def __init__(self, telephone=None, raw_chntext=None, chntext=None):\n        self.telephone = telephone\n        self.raw_chntext = raw_chntext\n        self.chntext = chntext\n\n    # def chntext2telephone(self):\n    #     sil_parts = self.raw_chntext.split('<SIL>')\n    #     self.telephone = '-'.join([\n    #         str(chn2num(p)) for p in sil_parts\n    #     ])\n    #     return self.telephone\n\n    def telephone2chntext(self, fixed=False):\n\n        if fixed:\n            sil_parts = self.telephone.split(\"-\")\n            self.raw_chntext = \"<SIL>\".join(\n                [num2chn(part, alt_two=False, use_units=False) for part in sil_parts]\n            )\n            self.chntext = self.raw_chntext.replace(\"<SIL>\", \"\")\n        else:\n            sp_parts = self.telephone.strip(\"+\").split()\n            self.raw_chntext = \"<SP>\".join(\n                [num2chn(part, alt_two=False, use_units=False) for part in sp_parts]\n            )\n            self.chntext = self.raw_chntext.replace(\"<SP>\", \"\")\n        return self.chntext\n\n\nif __name__ == \"__main__\":\n\n    # 测试程序\n    print(TelePhone(telephone=\"0595-23980880\").telephone2chntext())\n    # print(TelePhone(raw_chntext='零五九五杠二三八六五零九八').chntext2telephone())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/text.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"\nTEXT类\n\"\"\"\n\n__author__ = \"Zhiyang Zhou <zyzhou@stu.xmu.edu.cn>\"\n__data__ = \"2019-05-03\"\n\nimport re\n\nfrom fish_speech.text.chn_text_norm.cardinal import Cardinal\nfrom fish_speech.text.chn_text_norm.date import Date\nfrom fish_speech.text.chn_text_norm.digit import Digit\nfrom fish_speech.text.chn_text_norm.fraction import Fraction\nfrom fish_speech.text.chn_text_norm.money import Money\nfrom fish_speech.text.chn_text_norm.percentage import Percentage\nfrom fish_speech.text.chn_text_norm.telephone import TelePhone\n\nCURRENCY_NAMES = (\n    \"(人民币|美元|日元|英镑|欧元|马克|法郎|加拿大元|澳元|港币|先令|芬兰马克|爱尔兰镑|\"\n    \"里拉|荷兰盾|埃斯库多|比塞塔|印尼盾|林吉特|新西兰元|比索|卢布|新加坡元|韩元|泰铢)\"\n)\nCURRENCY_UNITS = \"((亿|千万|百万|万|千|百)|(亿|千万|百万|万|千|百|)元|(亿|千万|百万|万|千|百|)块|角|毛|分)\"\nCOM_QUANTIFIERS = (\n    \"(匹|张|座|回|场|尾|条|个|首|阙|阵|网|炮|顶|丘|棵|只|支|袭|辆|挑|担|颗|壳|窠|曲|墙|群|腔|\"\n    \"砣|座|客|贯|扎|捆|刀|令|打|手|罗|坡|山|岭|江|溪|钟|队|单|双|对|出|口|头|脚|板|跳|枝|件|贴|\"\n    \"针|线|管|名|位|身|堂|课|本|页|家|户|层|丝|毫|厘|分|钱|两|斤|担|铢|石|钧|锱|忽|(千|毫|微)克|\"\n    \"毫|厘|分|寸|尺|丈|里|寻|常|铺|程|(千|分|厘|毫|微)米|撮|勺|合|升|斗|石|盘|碗|碟|叠|桶|笼|盆|\"\n    \"盒|杯|钟|斛|锅|簋|篮|盘|桶|罐|瓶|壶|卮|盏|箩|箱|煲|啖|袋|钵|年|月|日|季|刻|时|周|天|秒|分|旬|\"\n    \"纪|岁|世|更|夜|春|夏|秋|冬|代|伏|辈|丸|泡|粒|颗|幢|堆|条|根|支|道|面|片|张|颗|块|人|抽)\"\n)\n\n\nclass Text:\n    \"\"\"\n    Text类\n    \"\"\"\n\n    def __init__(self, raw_text, norm_text=None):\n        self.raw_text = \"^\" + raw_text + \"$\"\n        self.norm_text = norm_text\n\n    def _particular(self):\n        text = self.norm_text\n        pattern = re.compile(r\"(([a-zA-Z]+)二([a-zA-Z]+))\")\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('particular')\n            for matcher in matchers:\n                text = text.replace(matcher[0], matcher[1] + \"2\" + matcher[2], 1)\n        self.norm_text = text\n        return self.norm_text\n\n    def normalize(self):\n        text = self.raw_text\n\n        # 规范化日期\n        pattern = re.compile(\n            r\"\\D+((([089]\\d|(19|20)\\d{2})年)?(\\d{1,2}月(\\d{1,2}[日号])?)?)\"\n        )\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('date')\n            for matcher in matchers:\n                text = text.replace(matcher[0], Date(date=matcher[0]).date2chntext(), 1)\n\n        # 规范化金钱\n        pattern = re.compile(\n            r\"\\D+((\\d+(\\.\\d+)?)[多余几]?\"\n            + CURRENCY_UNITS\n            + R\"(\\d\"\n            + CURRENCY_UNITS\n            + \"?)?)\"\n        )\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('money')\n            for matcher in matchers:\n                text = text.replace(\n                    matcher[0], Money(money=matcher[0]).money2chntext(), 1\n                )\n\n        # 规范化固话/手机号码\n        # 手机\n        # http://www.jihaoba.com/news/show/13680\n        # 移动：139、138、137、136、135、134、159、158、157、150、151、152、188、187、182、183、184、178、198\n        # 联通：130、131、132、156、155、186、185、176\n        # 电信：133、153、189、180、181、177\n        pattern = re.compile(r\"\\D((\\+?86 ?)?1([38]\\d|5[0-35-9]|7[678]|9[89])\\d{8})\\D\")\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('telephone')\n            for matcher in matchers:\n                text = text.replace(\n                    matcher[0], TelePhone(telephone=matcher[0]).telephone2chntext(), 1\n                )\n        # 固话\n        pattern = re.compile(r\"\\D((0(10|2[1-3]|[3-9]\\d{2})-?)?[1-9]\\d{6,7})\\D\")\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('fixed telephone')\n            for matcher in matchers:\n                text = text.replace(\n                    matcher[0],\n                    TelePhone(telephone=matcher[0]).telephone2chntext(fixed=True),\n                    1,\n                )\n\n        # 规范化分数\n        pattern = re.compile(r\"(\\d+/\\d+)\")\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('fraction')\n            for matcher in matchers:\n                text = text.replace(\n                    matcher, Fraction(fraction=matcher).fraction2chntext(), 1\n                )\n\n        # 规范化百分数\n        text = text.replace(\"％\", \"%\")\n        pattern = re.compile(r\"(\\d+(\\.\\d+)?%)\")\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('percentage')\n            for matcher in matchers:\n                text = text.replace(\n                    matcher[0],\n                    Percentage(percentage=matcher[0]).percentage2chntext(),\n                    1,\n                )\n\n        # 规范化纯数+量词\n        pattern = re.compile(r\"(\\d+(\\.\\d+)?)[多余几]?\" + COM_QUANTIFIERS)\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('cardinal+quantifier')\n            for matcher in matchers:\n                text = text.replace(\n                    matcher[0], Cardinal(cardinal=matcher[0]).cardinal2chntext(), 1\n                )\n\n        # 规范化数字编号\n        pattern = re.compile(r\"(\\d{4,32})\")\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('digit')\n            for matcher in matchers:\n                text = text.replace(matcher, Digit(digit=matcher).digit2chntext(), 1)\n\n        # 规范化纯数\n        pattern = re.compile(r\"(\\d+(\\.\\d+)?)\")\n        matchers = pattern.findall(text)\n        if matchers:\n            # print('cardinal')\n            for matcher in matchers:\n                text = text.replace(\n                    matcher[0], Cardinal(cardinal=matcher[0]).cardinal2chntext(), 1\n                )\n\n        self.norm_text = text\n        self._particular()\n\n        return self.norm_text.lstrip(\"^\").rstrip(\"$\")\n\n\nif __name__ == \"__main__\":\n\n    # 测试程序\n    print(Text(raw_text=\"固话：0595-23865596或23880880。\").normalize())\n    print(Text(raw_text=\"手机：+86 19859213959或15659451527。\").normalize())\n    print(Text(raw_text=\"分数：32477/76391。\").normalize())\n    print(Text(raw_text=\"百分数：80.03%。\").normalize())\n    print(Text(raw_text=\"编号：31520181154418。\").normalize())\n    print(Text(raw_text=\"纯数：2983.07克或12345.60米。\").normalize())\n    print(Text(raw_text=\"日期：1999年2月20日或09年3月15号。\").normalize())\n    print(Text(raw_text=\"金钱：12块5，34.5元，20.1万\").normalize())\n    print(Text(raw_text=\"特殊：O2O或B2C。\").normalize())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/clean.py",
    "content": "import re\n\nSYMBOLS_MAPPING = {\n    \"‘\": \"'\",\n    \"’\": \"'\",\n}\n\nREPLACE_SYMBOL_REGEX = re.compile(\n    \"|\".join(re.escape(p) for p in SYMBOLS_MAPPING.keys())\n)\n\n\nEMOJI_REGEX = re.compile(\n    \"[\"\n    \"\\U0001F600-\\U0001F64F\"  # emoticons\n    \"\\U0001F300-\\U0001F5FF\"  # symbols & pictographs\n    \"\\U0001F680-\\U0001F6FF\"  # transport & map symbols\n    \"\\U0001F1E0-\\U0001F1FF\"  # flags (iOS)\n    \"]+\",\n    flags=re.UNICODE,\n)\n\n\ndef clean_text(text):\n    # Clean the text\n    text = text.strip()\n\n    # Replace all chinese symbols with their english counterparts\n    text = REPLACE_SYMBOL_REGEX.sub(lambda x: SYMBOLS_MAPPING[x.group()], text)\n\n    # Remove emojis\n    text = EMOJI_REGEX.sub(r\"\", text)\n\n    # Remove continuous periods (...) and commas (,,,)\n    text = re.sub(r\"[,]{2,}\", lambda m: m.group()[0], text)\n\n    return text\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/text/spliter.py",
    "content": "import re\nimport string\n\nfrom fish_speech.text.clean import clean_text\n\n\ndef utf_8_len(text: str):\n    return len(text.encode(\"utf-8\"))\n\n\ndef break_text(texts, length, splits: set):\n    for text in texts:\n        if utf_8_len(text) <= length:\n            yield text\n            continue\n\n        curr = \"\"\n        for char in text:\n            curr += char\n\n            if char in splits:\n                yield curr\n                curr = \"\"\n\n        if curr:\n            yield curr\n\n\ndef break_text_by_length(texts, length):\n    for text in texts:\n        if utf_8_len(text) <= length:\n            yield text\n            continue\n\n        curr = \"\"\n        for char in text:\n            curr += char\n\n            if utf_8_len(curr) >= length:\n                yield curr\n                curr = \"\"\n\n        if curr:\n            yield curr\n\n\ndef add_cleaned(curr, segments):\n    curr = curr.strip()\n    if curr and not all(c.isspace() or c in string.punctuation for c in curr):\n        segments.append(curr)\n\n\ndef protect_float(text):\n    # Turns 3.14 into <3_f_14> to prevent splitting\n    return re.sub(r\"(\\d+)\\.(\\d+)\", r\"<\\1_f_\\2>\", text)\n\n\ndef unprotect_float(text):\n    # Turns <3_f_14> into 3.14\n    return re.sub(r\"<(\\d+)_f_(\\d+)>\", r\"\\1.\\2\", text)\n\n\ndef split_text(text, length):\n    text = clean_text(text)\n\n    # Break the text into pieces with following rules:\n    # 1. Split the text at \".\", \"!\", \"?\" if text is NOT a float\n    # 2. If the text is longer than length, split at \",\"\n    # 3. If the text is still longer than length, split at \" \"\n    # 4. If the text is still longer than length, split at any character to length\n\n    texts = [text]\n    texts = map(protect_float, texts)\n    texts = break_text(texts, length, {\".\", \"!\", \"?\", \"。\", \"！\", \"？\"})\n    texts = map(unprotect_float, texts)\n    texts = break_text(texts, length, {\",\", \"，\"})\n    texts = break_text(texts, length, {\" \"})\n    texts = list(break_text_by_length(texts, length))\n\n    # Then, merge the texts into segments with length <= length\n    segments = []\n    curr = \"\"\n\n    for text in texts:\n        if utf_8_len(curr) + utf_8_len(text) <= length:\n            curr += text\n        else:\n            add_cleaned(curr, segments)\n            curr = text\n\n    if curr:\n        add_cleaned(curr, segments)\n\n    return segments\n\n\nif __name__ == \"__main__\":\n    # Test the split_text function\n\n    text = \"This is a test sentence. This is another test sentence. And a third one.\"\n\n    assert split_text(text, 50) == [\n        \"This is a test sentence.\",\n        \"This is another test sentence. And a third one.\",\n    ]\n    assert split_text(\"a,aaaaaa3.14\", 10) == [\"a,\", \"aaaaaa3.14\"]\n    assert split_text(\"   \", 10) == []\n    assert split_text(\"a\", 10) == [\"a\"]\n\n    text = \"This is a test sentence with only commas, and no dots, and no exclamation marks, and no question marks, and no newlines.\"\n    assert split_text(text, 50) == [\n        \"This is a test sentence with only commas,\",\n        \"and no dots, and no exclamation marks,\",\n        \"and no question marks, and no newlines.\",\n    ]\n\n    text = \"This is a test sentence This is a test sentence This is a test sentence. This is a test sentence, This is a test sentence, This is a test sentence.\"\n    # First half split at \" \", second half split at \",\"\n    assert split_text(text, 50) == [\n        \"This is a test sentence This is a test sentence\",\n        \"This is a test sentence. This is a test sentence,\",\n        \"This is a test sentence, This is a test sentence.\",\n    ]\n\n    text = \"这是一段很长的中文文本,而且没有句号,也没有感叹号,也没有问号,也没有换行符。\"\n    assert split_text(text, 50) == [\n        \"这是一段很长的中文文本,\",\n        \"而且没有句号,也没有感叹号,\",\n        \"也没有问号,也没有换行符.\",\n    ]\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/tokenizer.py",
    "content": "import base64\nimport json\nimport logging\nfrom pathlib import Path\n\nimport tiktoken\n\nlogger = logging.getLogger(__name__)\n\n# This is a modified version of the default pattern from GPT-4o, that better handles punctuations.\nFISH_TIKTOKEN_PATTERN = \"|\".join(\n    [\n        r\"(?i:'s|'t|'re|'ve|'m|'ll|'d)\",\n        r\"\\p{P}\",\n        r\"[^\\r\\n\\p{L}\\p{N}]?\\p{L}+\",\n        r\"\\p{N}\",\n        r\" ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*\",\n        r\"\\s*[\\r\\n]+\",\n        r\"\\s+(\\?!\\S)\",\n        r\"\\s+\",\n    ]\n)\nTIKTOKEN_MAX_ENCODE_CHARS = 400_000\n\nBOS_TOKEN = \"<|begin_of_text|>\"\nEOS_TOKEN = \"<|end_of_text|>\"\nPAD_TOKEN = \"<|pad|>\"\nIM_START_TOKEN = \"<|im_start|>\"\nIM_END_TOKEN = \"<|im_end|>\"\n\nMODALITY_TEXT_TOKEN = \"<|text|>\"\nMODALITY_VOICE_TOKEN = \"<|voice|>\"\nMODALITY_INTERLEAVE_TOKEN = \"<|interleave|>\"\nMODALITY_TOKENS = {\n    \"text\": MODALITY_TEXT_TOKEN,\n    \"voice\": MODALITY_VOICE_TOKEN,\n    \"interleave\": MODALITY_INTERLEAVE_TOKEN,\n}\n\nPLACEHOLDER_TOKEN = [\"\"] * 4\nfor i in range(4):\n    PLACEHOLDER_TOKEN[i] = f\"<|placeholder:{i}|>\"\n\nSEMANTIC_TOKEN_TEMPLATE = \"<|semantic:{i}|>\"\nSEMANTIC_TOKENS = [SEMANTIC_TOKEN_TEMPLATE.format(i=i) for i in range(1024)]\n\n# Warning: when you add a new special token, you should only add it to the end of the list.\nALL_SPECIAL_TOKENS = [\n    BOS_TOKEN,\n    EOS_TOKEN,\n    PAD_TOKEN,\n    IM_START_TOKEN,\n    IM_END_TOKEN,\n    PLACEHOLDER_TOKEN[0],\n    PLACEHOLDER_TOKEN[1],\n    PLACEHOLDER_TOKEN[2],\n    PLACEHOLDER_TOKEN[3],\n    MODALITY_TEXT_TOKEN,\n    MODALITY_VOICE_TOKEN,\n    MODALITY_INTERLEAVE_TOKEN,\n    *SEMANTIC_TOKENS,\n]\n\n\nclass FishTokenizer:\n    def __init__(self, model_path: str) -> None:\n        mergeable_ranks = self.load_tiktoken_bpe(model_path)\n        special_token_begin = len(mergeable_ranks)\n        self.all_special_tokens_with_ids = {\n            token: special_token_begin + i for i, token in enumerate(ALL_SPECIAL_TOKENS)\n        }\n        self.semantic_id_to_token_id = {\n            i: self.all_special_tokens_with_ids[token]\n            for i, token in enumerate(SEMANTIC_TOKENS)\n        }\n        self.semantic_begin_id = self.all_special_tokens_with_ids[SEMANTIC_TOKENS[0]]\n        self.semantic_end_id = self.all_special_tokens_with_ids[SEMANTIC_TOKENS[-1]]\n\n        self.tkt_model = tiktoken.core.Encoding(\n            name=Path(model_path).stem,\n            pat_str=FISH_TIKTOKEN_PATTERN,\n            mergeable_ranks=mergeable_ranks,\n            special_tokens=self.all_special_tokens_with_ids,\n        )\n\n    @staticmethod\n    def load_tiktoken_bpe(tiktoken_bpe_file: str) -> dict[bytes, int]:\n        data = {}\n        for line in open(tiktoken_bpe_file).read().splitlines():\n            if not line:\n                continue\n            token, rank = line.split()\n            data[base64.b64decode(token)] = int(rank)\n        return data\n\n    def get_token_id(self, token: str) -> int:\n        return self.all_special_tokens_with_ids[token]\n\n    def encode(self, s: str, allowed_special: bool | set[str] = True) -> list[int]:\n        assert isinstance(s, str)\n\n        subs = []\n        for i in range(0, len(s), TIKTOKEN_MAX_ENCODE_CHARS):\n            subs.append(s[i : i + TIKTOKEN_MAX_ENCODE_CHARS])\n\n        if allowed_special is True:\n            allowed_special = self.tkt_model.special_tokens_set\n        elif allowed_special is False:\n            allowed_special = set()\n\n        return sum(\n            self.tkt_model.encode_batch(\n                subs, allowed_special=allowed_special, disallowed_special=set()\n            ),\n            start=[],\n        )\n\n    def decode(self, tokens: list[int]) -> str:\n        return self.tkt_model.decode(tokens)\n\n    def save_pretrained(self, path: str):\n        path = Path(path)\n        path.mkdir(parents=True, exist_ok=True)\n\n        with open(path / \"tokenizer.tiktoken\", \"w\") as f:\n            for token, rank in self.tkt_model._mergeable_ranks.items():\n                f.write(f\"{base64.b64encode(token).decode()} {rank}\\n\")\n\n        with open(path / \"special_tokens.json\", \"w\") as f:\n            json.dump(\n                self.all_special_tokens_with_ids,\n                f,\n                indent=2,\n                ensure_ascii=False,\n            )\n\n    @staticmethod\n    def from_pretrained(path: str):\n        return FishTokenizer(Path(path) / \"tokenizer.tiktoken\")\n\n\nif __name__ == \"__main__\":\n    tokenizer = FishTokenizer(\"data/mpacks/v1.4-pretrain/tokenizer.all.tiktoken\")\n    tokenizer.save_pretrained(\"checkpoints/fish-speech-0.5B\")\n    tokenizer = FishTokenizer.from_pretrained(\"checkpoints/fish-speech-0.5B\")\n\n    print(\n        [\n            tokenizer.decode([i])\n            for i in tokenizer.encode(f\"{BOS_TOKEN}你好，世界！{EOS_TOKEN}\")\n        ]\n    )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/train.py",
    "content": "import os\n\nos.environ[\"USE_LIBUV\"] = \"0\"\nimport sys\nfrom typing import Optional\n\nimport hydra\nimport lightning as L\nimport pyrootutils\nimport torch\nfrom lightning import Callback, LightningDataModule, LightningModule, Trainer\nfrom lightning.pytorch.loggers import Logger\nfrom lightning.pytorch.strategies import DDPStrategy\nfrom omegaconf import DictConfig, OmegaConf\n\nos.environ.pop(\"SLURM_NTASKS\", None)\nos.environ.pop(\"SLURM_JOB_NAME\", None)\nos.environ.pop(\"SLURM_NTASKS_PER_NODE\", None)\n\n# register eval resolver and root\npyrootutils.setup_root(__file__, indicator=\".project-root\", pythonpath=True)\n\n# Allow TF32 on Ampere GPUs\ntorch.set_float32_matmul_precision(\"high\")\ntorch.backends.cudnn.allow_tf32 = True\n\n# register eval resolver\nOmegaConf.register_new_resolver(\"eval\", eval)\n\nimport fish_speech.utils as utils\n\nlog = utils.RankedLogger(__name__, rank_zero_only=True)\n\n\n@utils.task_wrapper\ndef train(cfg: DictConfig) -> tuple[dict, dict]:\n    \"\"\"Trains the model. Can additionally evaluate on a testset, using best weights obtained during\n    training.\n    This method is wrapped in optional @task_wrapper decorator, that controls the behavior during\n    failure. Useful for multiruns, saving info about the crash, etc.\n    Args:\n        cfg (DictConfig): Configuration composed by Hydra.\n    Returns:\n        Tuple[dict, dict]: Dict with metrics and dict with all instantiated objects.\n    \"\"\"  # noqa: E501\n\n    # set seed for random number generators in pytorch, numpy and python.random\n    if cfg.get(\"seed\"):\n        L.seed_everything(cfg.seed, workers=False)\n\n    if cfg.get(\"deterministic\"):\n        torch.use_deterministic_algorithms(True)\n\n    log.info(f\"Instantiating datamodule <{cfg.data._target_}>\")\n    datamodule: LightningDataModule = hydra.utils.instantiate(cfg.data)\n\n    log.info(f\"Instantiating model <{cfg.model._target_}>\")\n    model: LightningModule = hydra.utils.instantiate(cfg.model)\n\n    log.info(\"Instantiating callbacks...\")\n    callbacks: list[Callback] = utils.instantiate_callbacks(cfg.get(\"callbacks\"))\n\n    log.info(\"Instantiating loggers...\")\n    logger: list[Logger] = utils.instantiate_loggers(cfg.get(\"logger\"))\n\n    log.info(f\"Instantiating trainer <{cfg.trainer._target_}>\")\n    trainer: Trainer = hydra.utils.instantiate(\n        cfg.trainer,\n        callbacks=callbacks,\n        logger=logger,\n    )\n\n    object_dict = {\n        \"cfg\": cfg,\n        \"datamodule\": datamodule,\n        \"model\": model,\n        \"callbacks\": callbacks,\n        \"logger\": logger,\n        \"trainer\": trainer,\n    }\n\n    if logger:\n        log.info(\"Logging hyperparameters!\")\n        utils.log_hyperparameters(object_dict)\n\n    if cfg.get(\"train\"):\n        log.info(\"Starting training!\")\n\n        ckpt_path = cfg.get(\"ckpt_path\")\n        auto_resume = False\n\n        resume_ckpt_path = utils.get_latest_checkpoint(cfg.paths.ckpt_dir)\n        if resume_ckpt_path is not None:\n            ckpt_path = resume_ckpt_path\n            auto_resume = True\n\n        if ckpt_path is not None:\n            log.info(f\"Resuming from checkpoint: {ckpt_path}\")\n\n        # resume weights only is disabled for auto-resume\n        if cfg.get(\"resume_weights_only\") and auto_resume is False:\n            log.info(\"Resuming weights only!\")\n            ckpt = torch.load(ckpt_path, map_location=model.device)\n            if \"state_dict\" in ckpt:\n                ckpt = ckpt[\"state_dict\"]\n            err = model.load_state_dict(ckpt, strict=False)\n            log.info(f\"Error loading state dict: {err}\")\n            ckpt_path = None\n\n        trainer.fit(model=model, datamodule=datamodule, ckpt_path=ckpt_path)\n\n    train_metrics = trainer.callback_metrics\n\n    if cfg.get(\"test\"):\n        log.info(\"Starting testing!\")\n        ckpt_path = trainer.checkpoint_callback.best_model_path\n        if ckpt_path == \"\":\n            log.warning(\"Best ckpt not found! Using current weights for testing...\")\n            ckpt_path = cfg.get(\"ckpt_path\")\n\n        trainer.test(model=model, datamodule=datamodule, ckpt_path=ckpt_path)\n        log.info(f\"Best ckpt path: {ckpt_path}\")\n\n    test_metrics = trainer.callback_metrics\n\n    # merge train and test metrics\n    metric_dict = {**train_metrics, **test_metrics}\n\n    return metric_dict, object_dict\n\n\n@hydra.main(\n    version_base=\"1.3\", config_path=\"./configs\", config_name=\"llama_pretrain.yaml\"\n)\ndef main(cfg: DictConfig) -> Optional[float]:\n    # train the model\n    train(cfg)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/__init__.py",
    "content": "from .braceexpand import braceexpand\nfrom .context import autocast_exclude_mps\nfrom .file import get_latest_checkpoint\nfrom .instantiators import instantiate_callbacks, instantiate_loggers\nfrom .logger import RankedLogger\nfrom .logging_utils import log_hyperparameters\nfrom .rich_utils import enforce_tags, print_config_tree\nfrom .utils import extras, get_metric_value, set_seed, task_wrapper\n\n__all__ = [\n    \"enforce_tags\",\n    \"extras\",\n    \"get_metric_value\",\n    \"RankedLogger\",\n    \"instantiate_callbacks\",\n    \"instantiate_loggers\",\n    \"log_hyperparameters\",\n    \"print_config_tree\",\n    \"task_wrapper\",\n    \"braceexpand\",\n    \"get_latest_checkpoint\",\n    \"autocast_exclude_mps\",\n    \"set_seed\",\n]\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/braceexpand.py",
    "content": "\"\"\"\nBash-style brace expansion\nCopied from: https://github.com/trendels/braceexpand/blob/main/src/braceexpand/__init__.py\nLicense: MIT\n\"\"\"\n\nimport re\nimport string\nfrom itertools import chain, product\nfrom typing import Iterable, Iterator, Optional\n\n__all__ = [\"braceexpand\", \"alphabet\", \"UnbalancedBracesError\"]\n\n\nclass UnbalancedBracesError(ValueError):\n    pass\n\n\nalphabet = string.ascii_uppercase + string.ascii_lowercase\n\nint_range_re = re.compile(r\"^(-?\\d+)\\.\\.(-?\\d+)(?:\\.\\.-?(\\d+))?$\")\nchar_range_re = re.compile(r\"^([A-Za-z])\\.\\.([A-Za-z])(?:\\.\\.-?(\\d+))?$\")\nescape_re = re.compile(r\"\\\\(.)\")\n\n\ndef braceexpand(pattern: str, escape: bool = True) -> Iterator[str]:\n    \"\"\"braceexpand(pattern) -> iterator over generated strings\n\n    Returns an iterator over the strings resulting from brace expansion\n    of pattern. This function implements Brace Expansion as described in\n    bash(1), with the following limitations:\n\n    * A pattern containing unbalanced braces will raise an\n      UnbalancedBracesError exception. In bash, unbalanced braces will either\n      be partly expanded or ignored.\n\n    * A mixed-case character range like '{Z..a}' or '{a..Z}' will not\n      include the characters '[]^_`' between 'Z' and 'a'.\n\n    When escape is True (the default), characters in pattern can be\n    prefixed with a backslash to cause them not to be interpreted as\n    special characters for brace expansion (such as '{', '}', ',').\n    To pass through a a literal backslash, double it ('\\\\\\\\').\n\n    When escape is False, backslashes in pattern have no special\n    meaning and will be preserved in the output.\n\n    Examples:\n\n    >>> from braceexpand import braceexpand\n\n    # Integer range\n    >>> list(braceexpand('item{1..3}'))\n    ['item1', 'item2', 'item3']\n\n    # Character range\n    >>> list(braceexpand('{a..c}'))\n    ['a', 'b', 'c']\n\n    # Sequence\n    >>> list(braceexpand('index.html{,.backup}'))\n    ['index.html', 'index.html.backup']\n\n    # Nested patterns\n    >>> list(braceexpand('python{2.{5..7},3.{2,3}}'))\n    ['python2.5', 'python2.6', 'python2.7', 'python3.2', 'python3.3']\n\n    # Prefixing an integer with zero causes all numbers to be padded to\n    # the same width.\n    >>> list(braceexpand('{07..10}'))\n    ['07', '08', '09', '10']\n\n    # An optional increment can be specified for ranges.\n    >>> list(braceexpand('{a..g..2}'))\n    ['a', 'c', 'e', 'g']\n\n    # Ranges can go in both directions.\n    >>> list(braceexpand('{4..1}'))\n    ['4', '3', '2', '1']\n\n    # Numbers can be negative\n    >>> list(braceexpand('{2..-1}'))\n    ['2', '1', '0', '-1']\n\n    # Unbalanced braces raise an exception.\n    >>> list(braceexpand('{1{2,3}'))\n    Traceback (most recent call last):\n        ...\n    UnbalancedBracesError: Unbalanced braces: '{1{2,3}'\n\n    # By default, the backslash is the escape character.\n    >>> list(braceexpand(r'{1\\\\{2,3}'))\n    ['1{2', '3']\n\n    # Setting 'escape' to False disables backslash escaping.\n    >>> list(braceexpand(r'\\\\{1,2}', escape=False))\n    ['\\\\\\\\1', '\\\\\\\\2']\n\n    \"\"\"\n    return (\n        escape_re.sub(r\"\\1\", s) if escape else s for s in parse_pattern(pattern, escape)\n    )\n\n\ndef parse_pattern(pattern: str, escape: bool) -> Iterator[str]:\n    start = 0\n    pos = 0\n    bracketdepth = 0\n    items: list[Iterable[str]] = []\n\n    # print 'pattern:', pattern\n    while pos < len(pattern):\n        if escape and pattern[pos] == \"\\\\\":\n            pos += 2\n            continue\n        elif pattern[pos] == \"{\":\n            if bracketdepth == 0 and pos > start:\n                # print 'literal:', pattern[start:pos]\n                items.append([pattern[start:pos]])\n                start = pos\n            bracketdepth += 1\n        elif pattern[pos] == \"}\":\n            bracketdepth -= 1\n            if bracketdepth == 0:\n                # print 'expression:', pattern[start+1:pos]\n                expr = pattern[start + 1 : pos]\n                item = parse_expression(expr, escape)\n                if item is None:  # not a range or sequence\n                    items.extend([[\"{\"], parse_pattern(expr, escape), [\"}\"]])\n                else:\n                    items.append(item)\n                start = pos + 1  # skip the closing brace\n        pos += 1\n\n    if bracketdepth != 0:  # unbalanced braces\n        raise UnbalancedBracesError(\"Unbalanced braces: '%s'\" % pattern)\n\n    if start < pos:\n        items.append([pattern[start:]])\n\n    return (\"\".join(item) for item in product(*items))\n\n\ndef parse_expression(expr: str, escape: bool) -> Optional[Iterable[str]]:\n    int_range_match = int_range_re.match(expr)\n    if int_range_match:\n        return make_int_range(*int_range_match.groups())\n\n    char_range_match = char_range_re.match(expr)\n    if char_range_match:\n        return make_char_range(*char_range_match.groups())\n\n    return parse_sequence(expr, escape)\n\n\ndef parse_sequence(seq: str, escape: bool) -> Optional[Iterator[str]]:\n    # sequence -> chain(*sequence_items)\n    start = 0\n    pos = 0\n    bracketdepth = 0\n    items: list[Iterable[str]] = []\n\n    # print 'sequence:', seq\n    while pos < len(seq):\n        if escape and seq[pos] == \"\\\\\":\n            pos += 2\n            continue\n        elif seq[pos] == \"{\":\n            bracketdepth += 1\n        elif seq[pos] == \"}\":\n            bracketdepth -= 1\n        elif seq[pos] == \",\" and bracketdepth == 0:\n            items.append(parse_pattern(seq[start:pos], escape))\n            start = pos + 1  # skip the comma\n        pos += 1\n\n    if bracketdepth != 0:\n        raise UnbalancedBracesError\n    if not items:\n        return None\n\n    # part after the last comma (may be the empty string)\n    items.append(parse_pattern(seq[start:], escape))\n    return chain(*items)\n\n\ndef make_int_range(left: str, right: str, incr: Optional[str] = None) -> Iterator[str]:\n    if any([s.startswith((\"0\", \"-0\")) for s in (left, right) if s not in (\"0\", \"-0\")]):\n        padding = max(len(left), len(right))\n    else:\n        padding = 0\n    step = (int(incr) or 1) if incr else 1\n    start = int(left)\n    end = int(right)\n    r = range(start, end + 1, step) if start < end else range(start, end - 1, -step)\n    fmt = \"%0{}d\".format(padding)\n    return (fmt % i for i in r)\n\n\ndef make_char_range(left: str, right: str, incr: Optional[str] = None) -> str:\n    step = (int(incr) or 1) if incr else 1\n    start = alphabet.index(left)\n    end = alphabet.index(right)\n    if start < end:\n        return alphabet[start : end + 1 : step]\n    else:\n        end = end or -len(alphabet)\n        return alphabet[start : end - 1 : -step]\n\n\nif __name__ == \"__main__\":\n    import doctest\n    import sys\n\n    failed, _ = doctest.testmod(optionflags=doctest.IGNORE_EXCEPTION_DETAIL)\n    if failed:\n        sys.exit(1)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/context.py",
    "content": "from contextlib import nullcontext\n\nimport torch\n\n\ndef autocast_exclude_mps(\n    device_type: str, dtype: torch.dtype\n) -> nullcontext | torch.autocast:\n    return (\n        nullcontext()\n        if torch.backends.mps.is_available()\n        else torch.autocast(device_type, dtype)\n    )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/file.py",
    "content": "import os\nfrom pathlib import Path\n\n\ndef get_latest_checkpoint(path: Path | str) -> Path | None:\n    # Find the latest checkpoint\n    ckpt_dir = Path(path)\n\n    if ckpt_dir.exists() is False:\n        return None\n\n    ckpts = sorted(ckpt_dir.glob(\"*.ckpt\"), key=os.path.getmtime)\n    if len(ckpts) == 0:\n        return None\n\n    return ckpts[-1]\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/instantiators.py",
    "content": "from typing import List\n\nimport hydra\nfrom omegaconf import DictConfig\nfrom pytorch_lightning import Callback\nfrom pytorch_lightning.loggers import Logger\n\nfrom .logger import RankedLogger\n\nlog = RankedLogger(__name__, rank_zero_only=True)\n\n\ndef instantiate_callbacks(callbacks_cfg: DictConfig) -> List[Callback]:\n    \"\"\"Instantiates callbacks from config.\"\"\"\n\n    callbacks: List[Callback] = []\n\n    if not callbacks_cfg:\n        log.warning(\"No callback configs found! Skipping..\")\n        return callbacks\n\n    if not isinstance(callbacks_cfg, DictConfig):\n        raise TypeError(\"Callbacks config must be a DictConfig!\")\n\n    for _, cb_conf in callbacks_cfg.items():\n        if isinstance(cb_conf, DictConfig) and \"_target_\" in cb_conf:\n            log.info(f\"Instantiating callback <{cb_conf._target_}>\")\n            callbacks.append(hydra.utils.instantiate(cb_conf))\n\n    return callbacks\n\n\ndef instantiate_loggers(logger_cfg: DictConfig) -> List[Logger]:\n    \"\"\"Instantiates loggers from config.\"\"\"\n\n    logger: List[Logger] = []\n\n    if not logger_cfg:\n        log.warning(\"No logger configs found! Skipping...\")\n        return logger\n\n    if not isinstance(logger_cfg, DictConfig):\n        raise TypeError(\"Logger config must be a DictConfig!\")\n\n    for _, lg_conf in logger_cfg.items():\n        if isinstance(lg_conf, DictConfig) and \"_target_\" in lg_conf:\n            log.info(f\"Instantiating logger <{lg_conf._target_}>\")\n            logger.append(hydra.utils.instantiate(lg_conf))\n\n    return logger\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/logger.py",
    "content": "import logging\nfrom typing import Mapping, Optional\n\nfrom lightning_utilities.core.rank_zero import rank_prefixed_message, rank_zero_only\n\n\nclass RankedLogger(logging.LoggerAdapter):\n    \"\"\"A multi-GPU-friendly python command line logger.\"\"\"\n\n    def __init__(\n        self,\n        name: str = __name__,\n        rank_zero_only: bool = True,\n        extra: Optional[Mapping[str, object]] = None,\n    ) -> None:\n        \"\"\"Initializes a multi-GPU-friendly python command line logger that logs on all processes\n        with their rank prefixed in the log message.\n\n        :param name: The name of the logger. Default is ``__name__``.\n        :param rank_zero_only: Whether to force all logs to only occur on the rank zero process. Default is `False`.\n        :param extra: (Optional) A dict-like object which provides contextual information. See `logging.LoggerAdapter`.\n        \"\"\"\n        logger = logging.getLogger(name)\n        super().__init__(logger=logger, extra=extra)\n        self.rank_zero_only = rank_zero_only\n\n    def log(\n        self, level: int, msg: str, rank: Optional[int] = None, *args, **kwargs\n    ) -> None:\n        \"\"\"Delegate a log call to the underlying logger, after prefixing its message with the rank\n        of the process it's being logged from. If `'rank'` is provided, then the log will only\n        occur on that rank/process.\n\n        :param level: The level to log at. Look at `logging.__init__.py` for more information.\n        :param msg: The message to log.\n        :param rank: The rank to log at.\n        :param args: Additional args to pass to the underlying logging function.\n        :param kwargs: Any additional keyword args to pass to the underlying logging function.\n        \"\"\"\n        if self.isEnabledFor(level):\n            msg, kwargs = self.process(msg, kwargs)\n            current_rank = getattr(rank_zero_only, \"rank\", None)\n            if current_rank is None:\n                raise RuntimeError(\n                    \"The `rank_zero_only.rank` needs to be set before use\"\n                )\n            msg = rank_prefixed_message(msg, current_rank)\n            if self.rank_zero_only:\n                if current_rank == 0:\n                    self.logger.log(level, msg, *args, **kwargs)\n            else:\n                if rank is None:\n                    self.logger.log(level, msg, *args, **kwargs)\n                elif current_rank == rank:\n                    self.logger.log(level, msg, *args, **kwargs)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/logging_utils.py",
    "content": "from lightning.pytorch.utilities import rank_zero_only\n\nfrom fish_speech.utils import logger as log\n\n\n@rank_zero_only\ndef log_hyperparameters(object_dict: dict) -> None:\n    \"\"\"Controls which config parts are saved by lightning loggers.\n\n    Additionally saves:\n    - Number of model parameters\n    \"\"\"\n\n    hparams = {}\n\n    cfg = object_dict[\"cfg\"]\n    model = object_dict[\"model\"]\n    trainer = object_dict[\"trainer\"]\n\n    if not trainer.logger:\n        log.warning(\"Logger not found! Skipping hyperparameter logging...\")\n        return\n\n    hparams[\"model\"] = cfg[\"model\"]\n\n    # save number of model parameters\n    hparams[\"model/params/total\"] = sum(p.numel() for p in model.parameters())\n    hparams[\"model/params/trainable\"] = sum(\n        p.numel() for p in model.parameters() if p.requires_grad\n    )\n    hparams[\"model/params/non_trainable\"] = sum(\n        p.numel() for p in model.parameters() if not p.requires_grad\n    )\n\n    hparams[\"data\"] = cfg[\"data\"]\n    hparams[\"trainer\"] = cfg[\"trainer\"]\n\n    hparams[\"callbacks\"] = cfg.get(\"callbacks\")\n    hparams[\"extras\"] = cfg.get(\"extras\")\n\n    hparams[\"task_name\"] = cfg.get(\"task_name\")\n    hparams[\"tags\"] = cfg.get(\"tags\")\n    hparams[\"ckpt_path\"] = cfg.get(\"ckpt_path\")\n    hparams[\"seed\"] = cfg.get(\"seed\")\n\n    # send hparams to all loggers\n    for logger in trainer.loggers:\n        logger.log_hyperparams(hparams)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/rich_utils.py",
    "content": "from pathlib import Path\nfrom typing import Sequence\n\nimport rich\nimport rich.syntax\nimport rich.tree\nfrom hydra.core.hydra_config import HydraConfig\nfrom lightning.pytorch.utilities import rank_zero_only\nfrom omegaconf import DictConfig, OmegaConf, open_dict\nfrom rich.prompt import Prompt\n\nfrom fish_speech.utils import logger as log\n\n\n@rank_zero_only\ndef print_config_tree(\n    cfg: DictConfig,\n    print_order: Sequence[str] = (\n        \"data\",\n        \"model\",\n        \"callbacks\",\n        \"logger\",\n        \"trainer\",\n        \"paths\",\n        \"extras\",\n    ),\n    resolve: bool = False,\n    save_to_file: bool = False,\n) -> None:\n    \"\"\"Prints content of DictConfig using Rich library and its tree structure.\n\n    Args:\n        cfg (DictConfig): Configuration composed by Hydra.\n        print_order (Sequence[str], optional): Determines in what order config components are printed.\n        resolve (bool, optional): Whether to resolve reference fields of DictConfig.\n        save_to_file (bool, optional): Whether to export config to the hydra output folder.\n    \"\"\"  # noqa: E501\n\n    style = \"dim\"\n    tree = rich.tree.Tree(\"CONFIG\", style=style, guide_style=style)\n\n    queue = []\n\n    # add fields from `print_order` to queue\n    for field in print_order:\n        (\n            queue.append(field)\n            if field in cfg\n            else log.warning(\n                f\"Field '{field}' not found in config. \"\n                + f\"Skipping '{field}' config printing...\"\n            )\n        )\n\n    # add all the other fields to queue (not specified in `print_order`)\n    for field in cfg:\n        if field not in queue:\n            queue.append(field)\n\n    # generate config tree from queue\n    for field in queue:\n        branch = tree.add(field, style=style, guide_style=style)\n\n        config_group = cfg[field]\n        if isinstance(config_group, DictConfig):\n            branch_content = OmegaConf.to_yaml(config_group, resolve=resolve)\n        else:\n            branch_content = str(config_group)\n\n        branch.add(rich.syntax.Syntax(branch_content, \"yaml\"))\n\n    # print config tree\n    rich.print(tree)\n\n    # save config tree to file\n    if save_to_file:\n        with open(Path(cfg.paths.output_dir, \"config_tree.log\"), \"w\") as file:\n            rich.print(tree, file=file)\n\n\n@rank_zero_only\ndef enforce_tags(cfg: DictConfig, save_to_file: bool = False) -> None:\n    \"\"\"Prompts user to input tags from command line if no tags are provided in config.\"\"\"  # noqa: E501\n\n    if not cfg.get(\"tags\"):\n        if \"id\" in HydraConfig().cfg.hydra.job:\n            raise ValueError(\"Specify tags before launching a multirun!\")\n\n        log.warning(\"No tags provided in config. Prompting user to input tags...\")\n        tags = Prompt.ask(\"Enter a list of comma separated tags\", default=\"dev\")\n        tags = [t.strip() for t in tags.split(\",\") if t != \"\"]\n\n        with open_dict(cfg):\n            cfg.tags = tags\n\n        log.info(f\"Tags: {cfg.tags}\")\n\n    if save_to_file:\n        with open(Path(cfg.paths.output_dir, \"tags.log\"), \"w\") as file:\n            rich.print(cfg.tags, file=file)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/spectrogram.py",
    "content": "import torch\nimport torchaudio.functional as F\nfrom torch import Tensor, nn\nfrom torchaudio.transforms import MelScale\n\n\nclass LinearSpectrogram(nn.Module):\n    def __init__(\n        self,\n        n_fft=2048,\n        win_length=2048,\n        hop_length=512,\n        center=False,\n        mode=\"pow2_sqrt\",\n    ):\n        super().__init__()\n\n        self.n_fft = n_fft\n        self.win_length = win_length\n        self.hop_length = hop_length\n        self.center = center\n        self.mode = mode\n\n        self.register_buffer(\"window\", torch.hann_window(win_length), persistent=False)\n\n    def forward(self, y: Tensor) -> Tensor:\n        if y.ndim == 3:\n            y = y.squeeze(1)\n\n        y = torch.nn.functional.pad(\n            y.unsqueeze(1),\n            (\n                (self.win_length - self.hop_length) // 2,\n                (self.win_length - self.hop_length + 1) // 2,\n            ),\n            mode=\"reflect\",\n        ).squeeze(1)\n\n        spec = torch.stft(\n            y,\n            self.n_fft,\n            hop_length=self.hop_length,\n            win_length=self.win_length,\n            window=self.window,\n            center=self.center,\n            pad_mode=\"reflect\",\n            normalized=False,\n            onesided=True,\n            return_complex=True,\n        )\n\n        spec = torch.view_as_real(spec)\n\n        if self.mode == \"pow2_sqrt\":\n            spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6)\n\n        return spec\n\n\nclass LogMelSpectrogram(nn.Module):\n    def __init__(\n        self,\n        sample_rate=44100,\n        n_fft=2048,\n        win_length=2048,\n        hop_length=512,\n        n_mels=128,\n        center=False,\n        f_min=0.0,\n        f_max=None,\n    ):\n        super().__init__()\n\n        self.sample_rate = sample_rate\n        self.n_fft = n_fft\n        self.win_length = win_length\n        self.hop_length = hop_length\n        self.center = center\n        self.n_mels = n_mels\n        self.f_min = f_min\n        self.f_max = f_max or float(sample_rate // 2)\n\n        self.spectrogram = LinearSpectrogram(n_fft, win_length, hop_length, center)\n\n        fb = F.melscale_fbanks(\n            n_freqs=self.n_fft // 2 + 1,\n            f_min=self.f_min,\n            f_max=self.f_max,\n            n_mels=self.n_mels,\n            sample_rate=self.sample_rate,\n            norm=\"slaney\",\n            mel_scale=\"slaney\",\n        )\n        self.register_buffer(\n            \"fb\",\n            fb,\n            persistent=False,\n        )\n\n    def compress(self, x: Tensor) -> Tensor:\n        return torch.log(torch.clamp(x, min=1e-5))\n\n    def decompress(self, x: Tensor) -> Tensor:\n        return torch.exp(x)\n\n    def apply_mel_scale(self, x: Tensor) -> Tensor:\n        return torch.matmul(x.transpose(-1, -2), self.fb).transpose(-1, -2)\n\n    def forward(\n        self, x: Tensor, return_linear: bool = False, sample_rate: int = None\n    ) -> Tensor:\n        if sample_rate is not None and sample_rate != self.sample_rate:\n            x = F.resample(x, orig_freq=sample_rate, new_freq=self.sample_rate)\n\n        linear = self.spectrogram(x)\n        x = self.apply_mel_scale(linear)\n        x = self.compress(x)\n\n        if return_linear:\n            return x, self.compress(linear)\n\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/utils/utils.py",
    "content": "import random\nimport warnings\nfrom importlib.util import find_spec\nfrom typing import Callable\n\nimport numpy as np\nimport torch\nfrom omegaconf import DictConfig\n\nfrom .logger import RankedLogger\nfrom .rich_utils import enforce_tags, print_config_tree\n\nlog = RankedLogger(__name__, rank_zero_only=True)\n\n\ndef extras(cfg: DictConfig) -> None:\n    \"\"\"Applies optional utilities before the task is started.\n\n    Utilities:\n    - Ignoring python warnings\n    - Setting tags from command line\n    - Rich config printing\n    \"\"\"\n\n    # return if no `extras` config\n    if not cfg.get(\"extras\"):\n        log.warning(\"Extras config not found! <cfg.extras=null>\")\n        return\n\n    # disable python warnings\n    if cfg.extras.get(\"ignore_warnings\"):\n        log.info(\"Disabling python warnings! <cfg.extras.ignore_warnings=True>\")\n        warnings.filterwarnings(\"ignore\")\n\n    # prompt user to input tags from command line if none are provided in the config\n    if cfg.extras.get(\"enforce_tags\"):\n        log.info(\"Enforcing tags! <cfg.extras.enforce_tags=True>\")\n        enforce_tags(cfg, save_to_file=True)\n\n    # pretty print config tree using Rich library\n    if cfg.extras.get(\"print_config\"):\n        log.info(\"Printing config tree with Rich! <cfg.extras.print_config=True>\")\n        print_config_tree(cfg, resolve=True, save_to_file=True)\n\n\ndef task_wrapper(task_func: Callable) -> Callable:\n    \"\"\"Optional decorator that controls the failure behavior when executing the task function.\n\n    This wrapper can be used to:\n    - make sure loggers are closed even if the task function raises an exception (prevents multirun failure)\n    - save the exception to a `.log` file\n    - mark the run as failed with a dedicated file in the `logs/` folder (so we can find and rerun it later)\n    - etc. (adjust depending on your needs)\n\n    Example:\n    ```\n    @utils.task_wrapper\n    def train(cfg: DictConfig) -> Tuple[dict, dict]:\n\n        ...\n\n        return metric_dict, object_dict\n    ```\n    \"\"\"  # noqa: E501\n\n    def wrap(cfg: DictConfig):\n        # execute the task\n        try:\n            metric_dict, object_dict = task_func(cfg=cfg)\n\n        # things to do if exception occurs\n        except Exception as ex:\n            # save exception to `.log` file\n            log.exception(\"\")\n\n            # some hyperparameter combinations might be invalid or\n            # cause out-of-memory errors so when using hparam search\n            # plugins like Optuna, you might want to disable\n            # raising the below exception to avoid multirun failure\n            raise ex\n\n        # things to always do after either success or exception\n        finally:\n            # display output dir path in terminal\n            log.info(f\"Output dir: {cfg.paths.run_dir}\")\n\n            # always close wandb run (even if exception occurs so multirun won't fail)\n            if find_spec(\"wandb\"):  # check if wandb is installed\n                import wandb\n\n                if wandb.run:\n                    log.info(\"Closing wandb!\")\n                    wandb.finish()\n\n        return metric_dict, object_dict\n\n    return wrap\n\n\ndef get_metric_value(metric_dict: dict, metric_name: str) -> float:\n    \"\"\"Safely retrieves value of the metric logged in LightningModule.\"\"\"\n\n    if not metric_name:\n        log.info(\"Metric name is None! Skipping metric value retrieval...\")\n        return None\n\n    if metric_name not in metric_dict:\n        raise Exception(\n            f\"Metric value not found! <metric_name={metric_name}>\\n\"\n            \"Make sure metric name logged in LightningModule is correct!\\n\"\n            \"Make sure `optimized_metric` name in `hparams_search` config is correct!\"\n        )\n\n    metric_value = metric_dict[metric_name].item()\n    log.info(f\"Retrieved metric value! <{metric_name}={metric_value}>\")\n\n    return metric_value\n\n\ndef set_seed(seed: int):\n    if seed < 0:\n        seed = -seed\n    if seed > (1 << 31):\n        seed = 1 << 31\n\n    random.seed(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n\n    if torch.cuda.is_available():\n        torch.cuda.manual_seed(seed)\n        torch.cuda.manual_seed_all(seed)\n\n    if torch.backends.cudnn.is_available():\n        torch.backends.cudnn.deterministic = True\n        torch.backends.cudnn.benchmark = False\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/webui/css/style.css",
    "content": ":root {\n  --my-200: #80eeee;\n  --my-50: #ecfdf5;\n  --water-width: 300px;\n  --water-heigh: 300px;\n}\n\n\n/* general styled components */\n.tools {\n  align-items: center;\n  justify-content: center;\n}\n\n.gradio-button {\n    max-width: 2.2em;\n    min-width: 2.2em !important;\n    height: 2.4em;\n    align-self: end;\n    line-height: 1em;\n    border-radius: 0.5em;\n\n}\n\n.gradio-button.secondary-down, .gradio-button.secondary-down:hover{\n    box-shadow: 1px 1px 1px rgba(0,0,0,0.25) inset, 0px 0px 3px rgba(0,0,0,0.15) inset;\n}\n\n/* replace original footer with ours */\na{\n    font-weight: bold;\n    cursor: pointer;\n    color: #030C14 !important;\n}\n\nfooter {\n    display: none !important;\n}\n\n#footer{\n    text-align: center;\n}\n\n#footer div{\n    display: inline-block;\n}\n\n#footer .versions{\n    font-size: 85%;\n    opacity: 0.85;\n}\n\n/*@keyframes moveBackground {*/\n/*  0% {*/\n/*    background-position: 0 0;*/\n/*  }*/\n/*  100% {*/\n/*    background-position: -100px 100px;*/\n/*  }*/\n/*}*/\n@keyframes moveJellyBackground {\n  0% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n  100% {\n    background-position: 0% 50%;\n  }\n}\n\n.gradio-container {\n  position: absolute;\n  z-index: 10;\n}\n\n\n.quan {\n  position: absolute;\n  bottom: 0;\n  width: var(--water-width);\n  height: var(--water-heigh);\n  border-radius: 0;\n  /*border: 3px solid rgb(246, 247, 248);*/\n  /*box-shadow: 0 0 0 3px rgb(41, 134, 196);*/\n  z-index: 0;\n\n}\n\n.quan:last-child {\n  margin-right: 0;\n}\n\n.shui {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: rgb(23, 106, 201);\n  border-radius: 0;\n  overflow: hidden;\n  z-index: 0;\n}\n\n.shui::after {\n\n  content: '';\n  position: absolute;\n  top: 20%;\n  left: 50%;\n  width: 150%;\n  height: 150%;\n  border-radius: 40%;\n  background-image: radial-gradient(circle at 0% 50%, #dcfcf1, var(--my-50) 50%);\n  animation: shi 5s linear infinite;\n}\n\n@keyframes shi {\n  0% {\n    transform: translate(-50%, -65%) rotate(0deg);\n  }\n  100% {\n    transform: translate(-50%, -65%) rotate(360deg);\n  }\n}\n\n.shui::before {\n  content: '';\n  position: absolute;\n  top: 20%;\n  left: 50%;\n  width: 150%;\n  height: 150%;\n  border-radius: 42%;\n  background-color: rgb(240, 228, 228, 0.2);\n  animation: xu 7s linear infinite;\n}\n\n@keyframes xu {\n  0% {\n    transform: translate(-50%, -60%) rotate(0deg);\n  }\n  100% {\n    transform: translate(-50%, -60%) rotate(360deg);\n  }\n}\n\nfieldset.data_src div.wrap label {\n  background: #f8bffee0 !important;\n}\n\n.scrollable-component {\n  max-height: 100px;\n  overflow-y: auto;\n}\n\n#file_accordion {\n  max-height: 220px !important;\n}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/webui/html/footer.html",
    "content": "<div style=\"color: rgba(25,255,205,0.7) !important;\">\n        <a href=\"{api_docs}\">API</a>\n         • \n        <a href=\"https://github.com/fishaudio/fish-speech\">Github</a>\n         • \n        <a href=\"https://gradio.app\">Gradio</a>\n</div>\n<br />\n<div class=\"versions\" style=\"color: rgba(25,255,205,0.7) !important;\">\n{versions}\n</div>\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/webui/js/animate.js",
    "content": "\nfunction createGradioAnimation() {\n    const params = new URLSearchParams(window.location.search);\n    if (!params.has('__theme')) {\n        params.set('__theme', 'light');\n        window.location.search = params.toString();\n    }\n\n    var gradioApp = document.querySelector('gradio-app');\n    if (gradioApp) {\n\n        document.documentElement.style.setProperty('--my-200', '#80eeee');\n        document.documentElement.style.setProperty('--my-50', '#ecfdf5');\n\n        // gradioApp.style.position = 'relative';\n        // gradioApp.style.backgroundSize = '200% 200%';\n        // gradioApp.style.animation = 'moveJellyBackground 10s ease infinite';\n        // gradioApp.style.backgroundImage = 'radial-gradient(circle at 0% 50%, var(--my-200), var(--my-50) 50%)';\n        // gradioApp.style.display = 'flex';\n        // gradioApp.style.justifyContent = 'flex-start';\n        // gradioApp.style.flexWrap = 'nowrap';\n        // gradioApp.style.overflowX = 'auto';\n\n        // for (let i = 0; i < 6; i++) {\n        //     var quan = document.createElement('div');\n        //     quan.className = 'quan';\n        //     gradioApp.insertBefore(quan, gradioApp.firstChild);\n        //     quan.id = 'quan' + i.toString();\n        //     quan.style.left = 'calc(var(--water-width) * ' + i.toString() + ')';\n        //     var quanContainer = document.querySelector('.quan');\n        //     if (quanContainer) {\n        //         var shui = document.createElement('div');\n        //         shui.className = 'shui';\n        //         quanContainer.insertBefore(shui, quanContainer.firstChild)\n        //     }\n        // }\n    }\n\n    var container = document.createElement('div');\n    container.id = 'gradio-animation';\n    container.style.fontSize = '2em';\n    container.style.fontFamily = 'Maiandra GD, ui-monospace, monospace';\n    container.style.fontWeight = 'bold';\n    container.style.textAlign = 'center';\n    container.style.marginBottom = '20px';\n\n    var text = 'Welcome to Fish-Speech!';\n    for (var i = 0; i < text.length; i++) {\n        (function(i){\n            setTimeout(function(){\n                var letter = document.createElement('span');\n                letter.style.opacity = '0';\n                letter.style.transition = 'opacity 0.5s';\n                letter.innerText = text[i];\n\n                container.appendChild(letter);\n\n                setTimeout(function() {\n                    letter.style.opacity = '1';\n                }, 50);\n            }, i * 200);\n        })(i);\n    }\n\n    var gradioContainer = document.querySelector('.gradio-container');\n    gradioContainer.insertBefore(container, gradioContainer.firstChild);\n\n    return 'Animation created';\n}\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/webui/launch_utils.py",
    "content": "import importlib.util\nimport os\nimport subprocess\nimport sys\nfrom functools import lru_cache\nfrom pathlib import Path\nfrom typing import Iterable\n\nimport gradio as gr\nfrom gradio.themes.base import Base\nfrom gradio.themes.utils import colors, fonts, sizes\n\nGIT = (\n    (Path(os.environ.get(\"GIT_HOME\", \"\")) / \"git\").resolve()\n    if sys.platform == \"win32\"\n    else \"git\"\n)\nGIT = str(GIT)\n\n\ndef is_module_installed(module_name: str) -> bool:\n    spec = importlib.util.find_spec(module_name)\n    return spec is not None\n\n\n@lru_cache()\ndef commit_hash():\n    try:\n        return subprocess.check_output(\n            [GIT, \"log\", \"-1\", \"--format='%h %s'\"], shell=False, encoding=\"utf8\"\n        ).strip()\n    except Exception:\n        return \"<none>\"\n\n\ndef versions_html():\n    import torch\n\n    python_version = \".\".join([str(x) for x in sys.version_info[0:3]])\n    commit = commit_hash()\n    hash = commit.strip(\"'\").split(\" \")[0]\n\n    return f\"\"\"\nversion: <a href=\"https://github.com/fishaudio/fish-speech/commit/{hash}\">{hash}</a>\n&#x2000;•&#x2000;\npython: <span title=\"{sys.version}\">{python_version}</span>\n&#x2000;•&#x2000;\ntorch: {getattr(torch, '__long_version__',torch.__version__)}\n&#x2000;•&#x2000;\ngradio: {gr.__version__}\n&#x2000;•&#x2000;\nauthor: <a href=\"https://github.com/fishaudio\">fishaudio</a>\n\"\"\"\n\n\ndef version_check(commit):\n    try:\n        import requests\n\n        commits = requests.get(\n            \"https://api.github.com/repos/fishaudio/fish-speech/branches/main\"\n        ).json()\n        if commit != \"<none>\" and commits[\"commit\"][\"sha\"] != commit:\n            print(\"--------------------------------------------------------\")\n            print(\"| You are not up to date with the most recent release. |\")\n            print(\"| Consider running `git pull` to update.               |\")\n            print(\"--------------------------------------------------------\")\n        elif commits[\"commit\"][\"sha\"] == commit:\n            print(\"You are up to date with the most recent release.\")\n        else:\n            print(\"Not a git clone, can't perform version check.\")\n    except Exception as e:\n        print(\"version check failed\", e)\n\n\nclass Seafoam(Base):\n    def __init__(\n        self,\n        *,\n        primary_hue: colors.Color | str = colors.emerald,\n        secondary_hue: colors.Color | str = colors.blue,\n        neutral_hue: colors.Color | str = colors.blue,\n        spacing_size: sizes.Size | str = sizes.spacing_md,\n        radius_size: sizes.Size | str = sizes.radius_md,\n        text_size: sizes.Size | str = sizes.text_lg,\n        font: fonts.Font | str | Iterable[fonts.Font | str] = (\n            fonts.GoogleFont(\"Quicksand\"),\n            \"ui-sans-serif\",\n            \"sans-serif\",\n        ),\n        font_mono: fonts.Font | str | Iterable[fonts.Font | str] = (\n            fonts.GoogleFont(\"IBM Plex Mono\"),\n            \"ui-monospace\",\n            \"monospace\",\n        ),\n    ):\n        super().__init__(\n            primary_hue=primary_hue,\n            secondary_hue=secondary_hue,\n            neutral_hue=neutral_hue,\n            spacing_size=spacing_size,\n            radius_size=radius_size,\n            text_size=text_size,\n            font=font,\n            font_mono=font_mono,\n        )\n        super().set(\n            button_primary_background_fill=\"linear-gradient(90deg, *primary_300, *secondary_400)\",\n            button_primary_background_fill_hover=\"linear-gradient(90deg, *primary_200, *secondary_300)\",\n            button_primary_text_color=\"white\",\n            button_primary_background_fill_dark=\"linear-gradient(90deg, *primary_600, *secondary_800)\",\n            slider_color=\"*secondary_300\",\n            slider_color_dark=\"*secondary_600\",\n            block_title_text_weight=\"600\",\n            block_border_width=\"3px\",\n            block_shadow=\"*shadow_drop_lg\",\n            # button_shadow=\"*shadow_drop_lg\",\n            button_small_padding=\"0px\",\n            button_large_padding=\"3px\",\n        )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/fish_speech/webui/manage.py",
    "content": "from __future__ import annotations\n\nimport os\n\nos.environ[\"USE_LIBUV\"] = \"0\"\nimport datetime\nimport html\nimport json\nimport platform\nimport shutil\nimport signal\nimport subprocess\nimport sys\nfrom pathlib import Path\n\nimport gradio as gr\nimport psutil\nimport yaml\nfrom loguru import logger\nfrom tqdm import tqdm\n\nPYTHON = os.path.join(os.environ.get(\"PYTHON_FOLDERPATH\", \"\"), \"python\")\nsys.path.insert(0, \"\")\nprint(sys.path)\ncur_work_dir = Path(os.getcwd()).resolve()\nprint(\"You are in \", str(cur_work_dir))\n\nfrom fish_speech.i18n import i18n\nfrom fish_speech.webui.launch_utils import Seafoam, is_module_installed, versions_html\n\nconfig_path = cur_work_dir / \"fish_speech\" / \"configs\"\nvqgan_yml_path = config_path / \"firefly_gan_vq.yaml\"\nllama_yml_path = config_path / \"text2semantic_finetune.yaml\"\n\nenv = os.environ.copy()\nenv[\"no_proxy\"] = \"127.0.0.1, localhost, 0.0.0.0\"\n\nseafoam = Seafoam()\n\n\ndef build_html_error_message(error):\n    return f\"\"\"\n    <div style=\"color: red; font-weight: bold;\">\n        {html.escape(error)}\n    </div>\n    \"\"\"\n\n\ndef build_html_ok_message(msg):\n    return f\"\"\"\n    <div style=\"color: green; font-weight: bold;\">\n        {html.escape(msg)}\n    </div>\n    \"\"\"\n\n\ndef build_html_href(link, desc, msg):\n    return f\"\"\"\n    <span style=\"color: green; font-weight: bold; display: inline-block\">\n        {html.escape(msg)}\n        <a href=\"{link}\">{desc}</a>\n    </span>\n    \"\"\"\n\n\ndef load_data_in_raw(path):\n    with open(path, \"r\", encoding=\"utf-8\") as file:\n        data = file.read()\n    return str(data)\n\n\ndef kill_proc_tree(pid, including_parent=True):\n    try:\n        parent = psutil.Process(pid)\n    except psutil.NoSuchProcess:\n        # Process already terminated\n        return\n\n    children = parent.children(recursive=True)\n    for child in children:\n        try:\n            os.kill(child.pid, signal.SIGTERM)  # or signal.SIGKILL\n        except OSError:\n            pass\n    if including_parent:\n        try:\n            os.kill(parent.pid, signal.SIGTERM)  # or signal.SIGKILL\n        except OSError:\n            pass\n\n\nsystem = platform.system()\np_label = None\np_infer = None\np_tensorboard = None\n\n\ndef kill_process(pid):\n    if system == \"Windows\":\n        cmd = \"taskkill /t /f /pid %s\" % pid\n        # os.system(cmd)\n        subprocess.run(cmd)\n    else:\n        kill_proc_tree(pid)\n\n\ndef change_label(if_label):\n    global p_label\n    if if_label == True and p_label is None:\n        url = \"http://localhost:3000\"\n        remote_url = \"https://text-labeler.pages.dev/\"\n        try:\n            p_label = subprocess.Popen(\n                [\n                    (\n                        \"asr-label-linux-x64\"\n                        if sys.platform == \"linux\"\n                        else \"asr-label-win-x64.exe\"\n                    )\n                ]\n            )\n        except FileNotFoundError:\n            logger.warning(\"asr-label execution not found!\")\n\n        yield build_html_href(\n            link=remote_url,\n            desc=i18n(\"Optional online ver\"),\n            msg=i18n(\"Opened labeler in browser\"),\n        )\n\n    elif if_label == False and p_label is not None:\n        kill_process(p_label.pid)\n        p_label = None\n        yield build_html_ok_message(\"Nothing\")\n\n\ndef clean_infer_cache():\n    import tempfile\n\n    temp_dir = Path(tempfile.gettempdir())\n    gradio_dir = str(temp_dir / \"gradio\")\n    try:\n        shutil.rmtree(gradio_dir)\n        logger.info(f\"Deleted cached audios: {gradio_dir}\")\n    except PermissionError:\n        logger.info(f\"Permission denied: Unable to delete {gradio_dir}\")\n    except FileNotFoundError:\n        logger.info(f\"{gradio_dir} was not found\")\n    except Exception as e:\n        logger.info(f\"An error occurred: {e}\")\n\n\ndef change_infer(\n    if_infer,\n    host,\n    port,\n    infer_decoder_model,\n    infer_decoder_config,\n    infer_llama_model,\n    infer_compile,\n):\n    global p_infer\n    if if_infer == True and p_infer == None:\n        env = os.environ.copy()\n\n        env[\"GRADIO_SERVER_NAME\"] = host\n        env[\"GRADIO_SERVER_PORT\"] = port\n        # 启动第二个进程\n        url = f\"http://{host}:{port}\"\n        yield build_html_ok_message(\n            i18n(\"Inferring interface is launched at {}\").format(url)\n        )\n\n        clean_infer_cache()\n\n        p_infer = subprocess.Popen(\n            [\n                PYTHON,\n                \"tools/run_webui.py\",\n                \"--decoder-checkpoint-path\",\n                infer_decoder_model,\n                \"--decoder-config-name\",\n                infer_decoder_config,\n                \"--llama-checkpoint-path\",\n                infer_llama_model,\n            ]\n            + ([\"--compile\"] if infer_compile == \"Yes\" else []),\n            env=env,\n        )\n\n    elif if_infer == False and p_infer is not None:\n        kill_process(p_infer.pid)\n        p_infer = None\n        yield build_html_error_message(i18n(\"Infer interface is closed\"))\n\n\njs = load_data_in_raw(\"fish_speech/webui/js/animate.js\")\ncss = load_data_in_raw(\"fish_speech/webui/css/style.css\")\n\ndata_pre_output = (cur_work_dir / \"data\").resolve()\ndefault_model_output = (cur_work_dir / \"results\").resolve()\ndefault_filelist = data_pre_output / \"detect.list\"\ndata_pre_output.mkdir(parents=True, exist_ok=True)\n\nitems = []\ndict_items = {}\n\n\ndef load_yaml_data_in_fact(yml_path):\n    with open(yml_path, \"r\", encoding=\"utf-8\") as file:\n        yml = yaml.safe_load(file)\n    return yml\n\n\ndef write_yaml_data_in_fact(yml, yml_path):\n    with open(yml_path, \"w\", encoding=\"utf-8\") as file:\n        yaml.safe_dump(yml, file, allow_unicode=True)\n    return yml\n\n\ndef generate_tree(directory, depth=0, max_depth=None, prefix=\"\"):\n    if max_depth is not None and depth > max_depth:\n        return \"\"\n\n    tree_str = \"\"\n    files = []\n    directories = []\n    for item in os.listdir(directory):\n        if os.path.isdir(os.path.join(directory, item)):\n            directories.append(item)\n        else:\n            files.append(item)\n\n    entries = directories + files\n    for i, entry in enumerate(entries):\n        connector = \"├── \" if i < len(entries) - 1 else \"└── \"\n        tree_str += f\"{prefix}{connector}{entry}<br />\"\n        if i < len(directories):\n            extension = \"│   \" if i < len(entries) - 1 else \"    \"\n            tree_str += generate_tree(\n                os.path.join(directory, entry),\n                depth + 1,\n                max_depth,\n                prefix=prefix + extension,\n            )\n    return tree_str\n\n\ndef new_explorer(data_path, max_depth):\n    return gr.Markdown(\n        elem_classes=[\"scrollable-component\"],\n        value=generate_tree(data_path, max_depth=max_depth),\n    )\n\n\ndef add_item(\n    folder: str,\n    method: str,\n    label_lang: str,\n    if_initial_prompt: bool,\n    initial_prompt: str | None,\n):\n    folder = folder.strip(\" \").strip('\"')\n\n    folder_path = Path(folder)\n\n    if folder and folder not in items and data_pre_output not in folder_path.parents:\n        if folder_path.is_dir():\n            items.append(folder)\n            dict_items[folder] = dict(\n                type=\"folder\",\n                method=method,\n                label_lang=label_lang,\n                initial_prompt=initial_prompt if if_initial_prompt else None,\n            )\n        elif folder:\n            err = folder\n            return gr.Checkboxgroup(choices=items), build_html_error_message(\n                i18n(\"Invalid path: {}\").format(err)\n            )\n\n    formatted_data = json.dumps(dict_items, ensure_ascii=False, indent=4)\n    logger.info(\"After Adding: \" + formatted_data)\n    gr.Info(formatted_data)\n    return gr.Checkboxgroup(choices=items), build_html_ok_message(\n        i18n(\"Added path successfully!\")\n    )\n\n\ndef remove_items(selected_items):\n    global items, dict_items\n    to_remove = [item for item in items if item in selected_items]\n    for item in to_remove:\n        del dict_items[item]\n    items = [item for item in items if item in dict_items.keys()]\n    formatted_data = json.dumps(dict_items, ensure_ascii=False, indent=4)\n    logger.info(formatted_data)\n    gr.Warning(\"After Removing: \" + formatted_data)\n    return gr.Checkboxgroup(choices=items, value=[]), build_html_ok_message(\n        i18n(\"Removed path successfully!\")\n    )\n\n\ndef show_selected(options):\n    selected_options = \", \".join(options)\n\n    if options:\n        return i18n(\"Selected: {}\").format(selected_options)\n    else:\n        return i18n(\"No selected options\")\n\n\nfrom pydub import AudioSegment\n\n\ndef convert_to_mono_in_place(audio_path: Path):\n    audio = AudioSegment.from_file(audio_path)\n    if audio.channels > 1:\n        mono_audio = audio.set_channels(1)\n        mono_audio.export(audio_path, format=audio_path.suffix[1:])\n        logger.info(f\"Convert {audio_path} successfully\")\n\n\ndef list_copy(list_file_path, method):\n    wav_root = data_pre_output\n    lst = []\n    with list_file_path.open(\"r\", encoding=\"utf-8\") as file:\n        for line in tqdm(file, desc=\"Processing audio/transcript\"):\n            wav_path, speaker_name, language, text = line.strip().split(\"|\")\n            original_wav_path = Path(wav_path)\n            target_wav_path = (\n                wav_root / original_wav_path.parent.name / original_wav_path.name\n            )\n            lst.append(f\"{target_wav_path}|{speaker_name}|{language}|{text}\")\n            if target_wav_path.is_file():\n                continue\n            target_wav_path.parent.mkdir(parents=True, exist_ok=True)\n            if method == i18n(\"Copy\"):\n                shutil.copy(original_wav_path, target_wav_path)\n            else:\n                shutil.move(original_wav_path, target_wav_path.parent)\n            convert_to_mono_in_place(target_wav_path)\n            original_lab_path = original_wav_path.with_suffix(\".lab\")\n            target_lab_path = (\n                wav_root\n                / original_wav_path.parent.name\n                / original_wav_path.with_suffix(\".lab\").name\n            )\n            if target_lab_path.is_file():\n                continue\n            if method == i18n(\"Copy\"):\n                shutil.copy(original_lab_path, target_lab_path)\n            else:\n                shutil.move(original_lab_path, target_lab_path.parent)\n\n    if method == i18n(\"Move\"):\n        with list_file_path.open(\"w\", encoding=\"utf-8\") as file:\n            file.writelines(\"\\n\".join(lst))\n\n    del lst\n    return build_html_ok_message(i18n(\"Use filelist\"))\n\n\ndef check_files(data_path: str, max_depth: int, label_model: str, label_device: str):\n    global dict_items\n    data_path = Path(data_path)\n    gr.Warning(\"Pre-processing begins...\")\n    for item, content in dict_items.items():\n        item_path = Path(item)\n        tar_path = data_path / item_path.name\n\n        if content[\"type\"] == \"folder\" and item_path.is_dir():\n            if content[\"method\"] == i18n(\"Copy\"):\n                os.makedirs(tar_path, exist_ok=True)\n                shutil.copytree(\n                    src=str(item_path), dst=str(tar_path), dirs_exist_ok=True\n                )\n            elif not tar_path.is_dir():\n                shutil.move(src=str(item_path), dst=str(tar_path))\n\n            for suf in [\"wav\", \"flac\", \"mp3\"]:\n                for audio_path in tar_path.glob(f\"**/*.{suf}\"):\n                    convert_to_mono_in_place(audio_path)\n\n            cur_lang = content[\"label_lang\"]\n            initial_prompt = content[\"initial_prompt\"]\n\n            transcribe_cmd = [\n                PYTHON,\n                \"tools/whisper_asr.py\",\n                \"--model-size\",\n                label_model,\n                \"--device\",\n                label_device,\n                \"--audio-dir\",\n                tar_path,\n                \"--save-dir\",\n                tar_path,\n                \"--language\",\n                cur_lang,\n            ]\n\n            if initial_prompt is not None:\n                transcribe_cmd += [\"--initial-prompt\", initial_prompt]\n\n            if cur_lang != \"IGNORE\":\n                try:\n                    gr.Warning(\"Begin To Transcribe\")\n                    subprocess.run(\n                        transcribe_cmd,\n                        env=env,\n                    )\n                except Exception:\n                    print(\"Transcription error occurred\")\n\n        elif content[\"type\"] == \"file\" and item_path.is_file():\n            list_copy(item_path, content[\"method\"])\n\n    return build_html_ok_message(i18n(\"Move files successfully\")), new_explorer(\n        data_path, max_depth=max_depth\n    )\n\n\ndef generate_folder_name():\n    now = datetime.datetime.now()\n    folder_name = now.strftime(\"%Y%m%d_%H%M%S\")\n    return folder_name\n\n\ndef train_process(\n    data_path: str,\n    option: str,\n    # llama config\n    llama_ckpt,\n    llama_base_config,\n    llama_lr,\n    llama_maxsteps,\n    llama_data_num_workers,\n    llama_data_batch_size,\n    llama_data_max_length,\n    llama_precision,\n    llama_check_interval,\n    llama_grad_batches,\n    llama_use_speaker,\n    llama_use_lora,\n):\n\n    backend = \"nccl\" if sys.platform == \"linux\" else \"gloo\"\n\n    new_project = generate_folder_name()\n    print(\"New Project Name: \", new_project)\n\n    if option == \"VQGAN\":\n        msg = \"Skipped VQGAN Training.\"\n        gr.Warning(msg)\n        logger.info(msg)\n\n    if option == \"LLAMA\":\n        msg = \"LLAMA Training begins...\"\n        gr.Warning(msg)\n        logger.info(msg)\n        subprocess.run(\n            [\n                PYTHON,\n                \"tools/vqgan/extract_vq.py\",\n                str(data_pre_output),\n                \"--num-workers\",\n                \"1\",\n                \"--batch-size\",\n                \"16\",\n                \"--config-name\",\n                \"firefly_gan_vq\",\n                \"--checkpoint-path\",\n                \"checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth\",\n            ]\n        )\n\n        subprocess.run(\n            [\n                PYTHON,\n                \"tools/llama/build_dataset.py\",\n                \"--input\",\n                str(data_pre_output),\n                \"--text-extension\",\n                \".lab\",\n                \"--num-workers\",\n                \"16\",\n            ]\n        )\n        ckpt_path = \"checkpoints/fish-speech-1.4/model.pth\"\n        lora_prefix = \"lora_\" if llama_use_lora else \"\"\n        llama_name = lora_prefix + \"text2semantic_\" + new_project\n        latest = next(\n            iter(\n                sorted(\n                    [\n                        str(p.relative_to(\"results\"))\n                        for p in Path(\"results\").glob(lora_prefix + \"text2sem*/\")\n                    ],\n                    reverse=True,\n                )\n            ),\n            llama_name,\n        )\n        project = (\n            llama_name\n            if llama_ckpt == i18n(\"new\")\n            else (\n                latest\n                if llama_ckpt == i18n(\"latest\")\n                else Path(llama_ckpt).relative_to(\"results\")\n            )\n        )\n        logger.info(project)\n\n        if llama_check_interval > llama_maxsteps:\n            llama_check_interval = llama_maxsteps\n\n        train_cmd = [\n            PYTHON,\n            \"fish_speech/train.py\",\n            \"--config-name\",\n            \"text2semantic_finetune\",\n            f\"project={project}\",\n            f\"trainer.strategy.process_group_backend={backend}\",\n            f\"train_dataset.proto_files={str(['data/quantized-dataset-ft'])}\",\n            f\"val_dataset.proto_files={str(['data/quantized-dataset-ft'])}\",\n            f\"model.optimizer.lr={llama_lr}\",\n            f\"trainer.max_steps={llama_maxsteps}\",\n            f\"data.num_workers={llama_data_num_workers}\",\n            f\"data.batch_size={llama_data_batch_size}\",\n            f\"max_length={llama_data_max_length}\",\n            f\"trainer.precision={llama_precision}\",\n            f\"trainer.val_check_interval={llama_check_interval}\",\n            f\"trainer.accumulate_grad_batches={llama_grad_batches}\",\n            f\"train_dataset.interactive_prob={llama_use_speaker}\",\n        ] + ([f\"+lora@model.model.lora_config=r_8_alpha_16\"] if llama_use_lora else [])\n        logger.info(train_cmd)\n        subprocess.run(train_cmd)\n\n    return build_html_ok_message(i18n(\"Training stopped\"))\n\n\ndef tensorboard_process(\n    if_tensorboard: bool,\n    tensorboard_dir: str,\n    host: str,\n    port: str,\n):\n    global p_tensorboard\n    if if_tensorboard == True and p_tensorboard == None:\n        url = f\"http://{host}:{port}\"\n        yield build_html_ok_message(\n            i18n(\"Tensorboard interface is launched at {}\").format(url)\n        )\n        prefix = [\"tensorboard\"]\n        if Path(\"fishenv\").exists():\n            prefix = [\"fishenv/env/python.exe\", \"fishenv/env/Scripts/tensorboard.exe\"]\n\n        p_tensorboard = subprocess.Popen(\n            prefix\n            + [\n                \"--logdir\",\n                tensorboard_dir,\n                \"--host\",\n                host,\n                \"--port\",\n                port,\n                \"--reload_interval\",\n                \"120\",\n            ]\n        )\n    elif if_tensorboard == False and p_tensorboard != None:\n        kill_process(p_tensorboard.pid)\n        p_tensorboard = None\n        yield build_html_error_message(i18n(\"Tensorboard interface is closed\"))\n\n\ndef fresh_tb_dir():\n    return gr.Dropdown(\n        choices=[str(p) for p in Path(\"results\").glob(\"**/tensorboard/\")]\n    )\n\n\ndef list_decoder_models():\n    paths = [str(p) for p in Path(\"checkpoints\").glob(\"fish*/firefly*.pth\")]\n    if not paths:\n        logger.warning(\"No decoder model found\")\n    return paths\n\n\ndef list_llama_models():\n    choices = [str(p.parent) for p in Path(\"checkpoints\").glob(\"merged*/*model*.pth\")]\n    choices += [str(p.parent) for p in Path(\"checkpoints\").glob(\"fish*/*model*.pth\")]\n    choices += [str(p.parent) for p in Path(\"checkpoints\").glob(\"fs*/*model*.pth\")]\n    choices = sorted(choices, reverse=True)\n    if not choices:\n        logger.warning(\"No LLaMA model found\")\n    return choices\n\n\ndef list_lora_llama_models():\n    choices = sorted(\n        [str(p) for p in Path(\"results\").glob(\"lora*/**/*.ckpt\")], reverse=True\n    )\n    if not choices:\n        logger.warning(\"No LoRA LLaMA model found\")\n    return choices\n\n\ndef fresh_decoder_model():\n    return gr.Dropdown(choices=list_decoder_models())\n\n\ndef fresh_llama_ckpt(llama_use_lora):\n    return gr.Dropdown(\n        choices=[i18n(\"latest\"), i18n(\"new\")]\n        + (\n            [str(p) for p in Path(\"results\").glob(\"text2sem*/\")]\n            if not llama_use_lora\n            else [str(p) for p in Path(\"results\").glob(\"lora_*/\")]\n        )\n    )\n\n\ndef fresh_llama_model():\n    return gr.Dropdown(choices=list_llama_models())\n\n\ndef llama_lora_merge(llama_weight, lora_llama_config, lora_weight, llama_lora_output):\n    if (\n        lora_weight is None\n        or not Path(lora_weight).exists()\n        or not Path(llama_weight).exists()\n    ):\n        return build_html_error_message(\n            i18n(\n                \"Path error, please check the model file exists in the corresponding path\"\n            )\n        )\n    gr.Warning(\"Merging begins...\")\n    merge_cmd = [\n        PYTHON,\n        \"tools/llama/merge_lora.py\",\n        \"--lora-config\",\n        \"r_8_alpha_16\",\n        \"--lora-weight\",\n        lora_weight,\n        \"--output\",\n        llama_lora_output + \"_\" + generate_folder_name(),\n    ]\n    logger.info(merge_cmd)\n    subprocess.run(merge_cmd)\n    return build_html_ok_message(i18n(\"Merge successfully\"))\n\n\ndef llama_quantify(llama_weight, quantify_mode):\n    if llama_weight is None or not Path(llama_weight).exists():\n        return build_html_error_message(\n            i18n(\n                \"Path error, please check the model file exists in the corresponding path\"\n            )\n        )\n\n    gr.Warning(\"Quantifying begins...\")\n\n    now = generate_folder_name()\n    quantify_cmd = [\n        PYTHON,\n        \"tools/llama/quantize.py\",\n        \"--checkpoint-path\",\n        llama_weight,\n        \"--mode\",\n        quantify_mode,\n        \"--timestamp\",\n        now,\n    ]\n    logger.info(quantify_cmd)\n    subprocess.run(quantify_cmd)\n    if quantify_mode == \"int8\":\n        quantize_path = str(\n            Path(os.getcwd()) / \"checkpoints\" / f\"fs-1.2-{quantify_mode}-{now}\"\n        )\n    else:\n        quantize_path = str(\n            Path(os.getcwd()) / \"checkpoints\" / f\"fs-1.2-{quantify_mode}-g128-{now}\"\n        )\n    return build_html_ok_message(\n        i18n(\"Quantify successfully\") + f\"Path: {quantize_path}\"\n    )\n\n\ninit_vqgan_yml = load_yaml_data_in_fact(vqgan_yml_path)\ninit_llama_yml = load_yaml_data_in_fact(llama_yml_path)\n\nwith gr.Blocks(\n    head=\"<style>\\n\" + css + \"\\n</style>\",\n    js=js,\n    theme=seafoam,\n    analytics_enabled=False,\n    title=\"Fish Speech\",\n) as demo:\n    with gr.Row():\n        with gr.Column():\n            with gr.Tab(\"\\U0001F4D6 \" + i18n(\"Data Preprocessing\")):\n                with gr.Row():\n                    textbox = gr.Textbox(\n                        label=\"\\U0000270F \"\n                        + i18n(\"Input Audio & Source Path for Transcription\"),\n                        info=i18n(\"Speaker is identified by the folder name\"),\n                        interactive=True,\n                    )\n                with gr.Row(equal_height=False):\n                    with gr.Column():\n                        output_radio = gr.Radio(\n                            label=\"\\U0001F4C1 \"\n                            + i18n(\"Select source file processing method\"),\n                            choices=[i18n(\"Copy\"), i18n(\"Move\")],\n                            value=i18n(\"Copy\"),\n                            interactive=True,\n                        )\n                    with gr.Column():\n                        error = gr.HTML(label=i18n(\"Error Message\"))\n                        if_label = gr.Checkbox(\n                            label=i18n(\"Open Labeler WebUI\"), scale=0, show_label=True\n                        )\n\n                with gr.Row():\n                    label_device = gr.Dropdown(\n                        label=i18n(\"Labeling Device\"),\n                        info=i18n(\n                            \"It is recommended to use CUDA, if you have low configuration, use CPU\"\n                        ),\n                        choices=[\"cpu\", \"cuda\"],\n                        value=\"cuda\",\n                        interactive=True,\n                    )\n                    label_model = gr.Dropdown(\n                        label=i18n(\"Whisper Model\"),\n                        info=i18n(\"Faster Whisper, Up to 5g GPU memory usage\"),\n                        choices=[\"large-v3\", \"medium\"],\n                        value=\"large-v3\",\n                        interactive=True,\n                    )\n                    label_radio = gr.Dropdown(\n                        label=i18n(\"Optional Label Language\"),\n                        info=i18n(\n                            \"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format\"\n                        ),\n                        choices=[\n                            (i18n(\"Chinese\"), \"zh\"),\n                            (i18n(\"English\"), \"en\"),\n                            (i18n(\"Japanese\"), \"ja\"),\n                            (i18n(\"Disabled\"), \"IGNORE\"),\n                            (i18n(\"auto\"), \"auto\"),\n                        ],\n                        value=\"IGNORE\",\n                        interactive=True,\n                    )\n\n                with gr.Row():\n                    if_initial_prompt = gr.Checkbox(\n                        value=False,\n                        label=i18n(\"Enable Initial Prompt\"),\n                        min_width=120,\n                        scale=0,\n                    )\n                    initial_prompt = gr.Textbox(\n                        label=i18n(\"Initial Prompt\"),\n                        info=i18n(\n                            \"Initial prompt can provide contextual or vocabulary-specific guidance to the model.\"\n                        ),\n                        placeholder=\"This audio introduces the basic concepts and applications of artificial intelligence and machine learning.\",\n                        interactive=False,\n                    )\n\n                with gr.Row():\n                    add_button = gr.Button(\n                        \"\\U000027A1 \" + i18n(\"Add to Processing Area\"),\n                        variant=\"primary\",\n                    )\n                    remove_button = gr.Button(\n                        \"\\U000026D4 \" + i18n(\"Remove Selected Data\")\n                    )\n\n            with gr.Tab(\"\\U0001F6E0 \" + i18n(\"Training Configuration\")):\n                with gr.Row():\n                    model_type_radio = gr.Radio(\n                        label=i18n(\n                            \"Select the model to be trained (Depending on the Tab page you are on)\"\n                        ),\n                        interactive=False,\n                        choices=[\"VQGAN\", \"LLAMA\"],\n                        value=\"VQGAN\",\n                    )\n                with gr.Row():\n                    with gr.Column():\n                        with gr.Tab(label=i18n(\"VQGAN Configuration\")) as vqgan_page:\n                            gr.HTML(\"You don't need to train this model!\")\n\n                        with gr.Tab(label=i18n(\"LLAMA Configuration\")) as llama_page:\n                            with gr.Row(equal_height=False):\n                                llama_use_lora = gr.Checkbox(\n                                    label=i18n(\"Use LoRA\"),\n                                    info=i18n(\n                                        \"Use LoRA can save GPU memory, but may reduce the quality of the model\"\n                                    ),\n                                    value=True,\n                                    interactive=True,\n                                )\n                                llama_ckpt = gr.Dropdown(\n                                    label=i18n(\"Select LLAMA ckpt\"),\n                                    choices=[i18n(\"latest\"), i18n(\"new\")]\n                                    + [\n                                        str(p)\n                                        for p in Path(\"results\").glob(\"text2sem*/\")\n                                    ]\n                                    + [str(p) for p in Path(\"results\").glob(\"lora*/\")],\n                                    value=i18n(\"latest\"),\n                                    interactive=True,\n                                )\n                            with gr.Row(equal_height=False):\n                                llama_lr_slider = gr.Slider(\n                                    label=i18n(\"Initial Learning Rate\"),\n                                    info=i18n(\n                                        \"lr smaller -> usually train slower but more stable\"\n                                    ),\n                                    interactive=True,\n                                    minimum=1e-5,\n                                    maximum=1e-4,\n                                    step=1e-5,\n                                    value=5e-5,\n                                )\n                                llama_maxsteps_slider = gr.Slider(\n                                    label=i18n(\"Maximum Training Steps\"),\n                                    info=i18n(\n                                        \"recommend: max_steps = num_audios // batch_size * (2 to 5)\"\n                                    ),\n                                    interactive=True,\n                                    minimum=1,\n                                    maximum=10000,\n                                    step=1,\n                                    value=50,\n                                )\n                            with gr.Row(equal_height=False):\n                                llama_base_config = gr.Dropdown(\n                                    label=i18n(\"Model Size\"),\n                                    choices=[\n                                        \"text2semantic_finetune\",\n                                    ],\n                                    value=\"text2semantic_finetune\",\n                                )\n                                llama_data_num_workers_slider = gr.Slider(\n                                    label=i18n(\"Number of Workers\"),\n                                    minimum=1,\n                                    maximum=32,\n                                    step=1,\n                                    value=4,\n                                )\n                            with gr.Row(equal_height=False):\n                                llama_data_batch_size_slider = gr.Slider(\n                                    label=i18n(\"Batch Size\"),\n                                    interactive=True,\n                                    minimum=1,\n                                    maximum=32,\n                                    step=1,\n                                    value=2,\n                                )\n                                llama_data_max_length_slider = gr.Slider(\n                                    label=i18n(\"Maximum Length per Sample\"),\n                                    interactive=True,\n                                    minimum=1024,\n                                    maximum=4096,\n                                    step=128,\n                                    value=2048,\n                                )\n                            with gr.Row(equal_height=False):\n                                llama_precision_dropdown = gr.Dropdown(\n                                    label=i18n(\"Precision\"),\n                                    info=i18n(\n                                        \"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU\"\n                                    ),\n                                    interactive=True,\n                                    choices=[\"32\", \"bf16-true\", \"16-mixed\"],\n                                    value=\"bf16-true\",\n                                )\n                                llama_check_interval_slider = gr.Slider(\n                                    label=i18n(\"Save model every n steps\"),\n                                    info=i18n(\n                                        \"make sure that it's not greater than max_steps\"\n                                    ),\n                                    interactive=True,\n                                    minimum=1,\n                                    maximum=1000,\n                                    step=1,\n                                    value=50,\n                                )\n                            with gr.Row(equal_height=False):\n                                llama_grad_batches = gr.Slider(\n                                    label=i18n(\"Accumulate Gradient Batches\"),\n                                    interactive=True,\n                                    minimum=1,\n                                    maximum=20,\n                                    step=1,\n                                    value=init_llama_yml[\"trainer\"][\n                                        \"accumulate_grad_batches\"\n                                    ],\n                                )\n                                llama_use_speaker = gr.Slider(\n                                    label=i18n(\n                                        \"Probability of applying Speaker Condition\"\n                                    ),\n                                    interactive=True,\n                                    minimum=0.1,\n                                    maximum=1.0,\n                                    step=0.05,\n                                    value=init_llama_yml[\"train_dataset\"][\n                                        \"interactive_prob\"\n                                    ],\n                                )\n\n                        with gr.Tab(label=i18n(\"Merge LoRA\"), id=4):\n                            with gr.Row(equal_height=False):\n                                llama_weight = gr.Dropdown(\n                                    label=i18n(\"Base LLAMA Model\"),\n                                    info=i18n(\n                                        \"Type the path or select from the dropdown\"\n                                    ),\n                                    choices=[\n                                        \"checkpoints/fish-speech-1.4/model.pth\",\n                                    ],\n                                    value=\"checkpoints/fish-speech-1.4/model.pth\",\n                                    allow_custom_value=True,\n                                    interactive=True,\n                                )\n                            with gr.Row(equal_height=False):\n                                lora_weight = gr.Dropdown(\n                                    label=i18n(\"LoRA Model to be merged\"),\n                                    info=i18n(\n                                        \"Type the path or select from the dropdown\"\n                                    ),\n                                    choices=[\n                                        str(p)\n                                        for p in Path(\"results\").glob(\"lora*/**/*.ckpt\")\n                                    ],\n                                    allow_custom_value=True,\n                                    interactive=True,\n                                )\n                                lora_llama_config = gr.Dropdown(\n                                    label=i18n(\"LLAMA Model Config\"),\n                                    info=i18n(\n                                        \"Type the path or select from the dropdown\"\n                                    ),\n                                    choices=[\n                                        \"text2semantic_finetune\",\n                                    ],\n                                    value=\"text2semantic_finetune\",\n                                    allow_custom_value=True,\n                                )\n                            with gr.Row(equal_height=False):\n                                llama_lora_output = gr.Dropdown(\n                                    label=i18n(\"Output Path\"),\n                                    info=i18n(\n                                        \"Type the path or select from the dropdown\"\n                                    ),\n                                    value=\"checkpoints/merged\",\n                                    choices=[\"checkpoints/merged\"],\n                                    allow_custom_value=True,\n                                    interactive=True,\n                                )\n                            with gr.Row(equal_height=False):\n                                llama_lora_merge_btn = gr.Button(\n                                    value=i18n(\"Merge\"), variant=\"primary\"\n                                )\n\n                        with gr.Tab(label=i18n(\"Model Quantization\"), id=5):\n                            with gr.Row(equal_height=False):\n                                llama_weight_to_quantify = gr.Dropdown(\n                                    label=i18n(\"Base LLAMA Model\"),\n                                    info=i18n(\n                                        \"Type the path or select from the dropdown\"\n                                    ),\n                                    choices=list_llama_models(),\n                                    value=\"checkpoints/fish-speech-1.4\",\n                                    allow_custom_value=True,\n                                    interactive=True,\n                                )\n                                quantify_mode = gr.Dropdown(\n                                    label=i18n(\"Post-quantification Precision\"),\n                                    info=i18n(\n                                        \"The lower the quantitative precision, the more the effectiveness may decrease, but the greater the efficiency will increase\"\n                                    ),\n                                    choices=[\"int8\", \"int4\"],\n                                    value=\"int8\",\n                                    allow_custom_value=False,\n                                    interactive=True,\n                                )\n                            with gr.Row(equal_height=False):\n                                llama_quantify_btn = gr.Button(\n                                    value=i18n(\"Quantify\"), variant=\"primary\"\n                                )\n\n                        with gr.Tab(label=\"Tensorboard\", id=6):\n                            with gr.Row(equal_height=False):\n                                tb_host = gr.Textbox(\n                                    label=i18n(\"Tensorboard Host\"), value=\"127.0.0.1\"\n                                )\n                                tb_port = gr.Textbox(\n                                    label=i18n(\"Tensorboard Port\"), value=\"11451\"\n                                )\n                            with gr.Row(equal_height=False):\n                                tb_dir = gr.Dropdown(\n                                    label=i18n(\"Tensorboard Log Path\"),\n                                    allow_custom_value=True,\n                                    choices=[\n                                        str(p)\n                                        for p in Path(\"results\").glob(\"**/tensorboard/\")\n                                    ],\n                                )\n                            with gr.Row(equal_height=False):\n                                if_tb = gr.Checkbox(\n                                    label=i18n(\"Open Tensorboard\"),\n                                )\n\n            with gr.Tab(\"\\U0001F9E0 \" + i18n(\"Inference Configuration\")):\n                with gr.Column():\n                    with gr.Row():\n                        with gr.Accordion(\n                            label=\"\\U0001F5A5 \"\n                            + i18n(\"Inference Server Configuration\"),\n                            open=False,\n                        ):\n                            with gr.Row():\n                                infer_host_textbox = gr.Textbox(\n                                    label=i18n(\"WebUI Host\"), value=\"127.0.0.1\"\n                                )\n                                infer_port_textbox = gr.Textbox(\n                                    label=i18n(\"WebUI Port\"), value=\"7862\"\n                                )\n                            with gr.Row():\n                                infer_decoder_model = gr.Dropdown(\n                                    label=i18n(\"Decoder Model Path\"),\n                                    info=i18n(\n                                        \"Type the path or select from the dropdown\"\n                                    ),\n                                    choices=list_decoder_models(),\n                                    value=\"checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth\",\n                                    allow_custom_value=True,\n                                )\n                                infer_decoder_config = gr.Dropdown(\n                                    label=i18n(\"Decoder Model Config\"),\n                                    info=i18n(\"Changing with the Model Path\"),\n                                    value=\"firefly_gan_vq\",\n                                    choices=[\n                                        \"firefly_gan_vq\",\n                                    ],\n                                    allow_custom_value=True,\n                                )\n                            with gr.Row():\n                                infer_llama_model = gr.Dropdown(\n                                    label=i18n(\"LLAMA Model Path\"),\n                                    info=i18n(\n                                        \"Type the path or select from the dropdown\"\n                                    ),\n                                    value=\"checkpoints/fish-speech-1.4\",\n                                    choices=list_llama_models(),\n                                    allow_custom_value=True,\n                                )\n\n                            with gr.Row():\n                                infer_compile = gr.Radio(\n                                    label=i18n(\"Compile Model\"),\n                                    info=i18n(\n                                        \"Compile the model can significantly reduce the inference time, but will increase cold start time\"\n                                    ),\n                                    choices=[\"Yes\", \"No\"],\n                                    value=(\n                                        \"Yes\" if (sys.platform == \"linux\") else \"No\"\n                                    ),\n                                    interactive=is_module_installed(\"triton\"),\n                                )\n\n                    with gr.Row():\n                        infer_checkbox = gr.Checkbox(\n                            label=i18n(\"Open Inference Server\")\n                        )\n                        infer_error = gr.HTML(label=i18n(\"Inference Server Error\"))\n\n        with gr.Column():\n            train_error = gr.HTML(label=i18n(\"Training Error\"))\n            checkbox_group = gr.CheckboxGroup(\n                label=\"\\U0001F4CA \" + i18n(\"Data Source\"),\n                info=i18n(\n                    \"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.\"\n                ),\n                elem_classes=[\"data_src\"],\n            )\n            train_box = gr.Textbox(\n                label=i18n(\"Data Preprocessing Path\"),\n                value=str(data_pre_output),\n                interactive=False,\n            )\n            model_box = gr.Textbox(\n                label=\"\\U0001F4BE \" + i18n(\"Model Output Path\"),\n                value=str(default_model_output),\n                interactive=False,\n            )\n\n            with gr.Accordion(\n                i18n(\n                    \"View the status of the preprocessing folder (use the slider to control the depth of the tree)\"\n                ),\n                elem_classes=[\"scrollable-component\"],\n                elem_id=\"file_accordion\",\n            ):\n                tree_slider = gr.Slider(\n                    minimum=0,\n                    maximum=3,\n                    value=0,\n                    step=1,\n                    show_label=False,\n                    container=False,\n                )\n                file_markdown = new_explorer(str(data_pre_output), 0)\n            with gr.Row(equal_height=False):\n                admit_btn = gr.Button(\n                    \"\\U00002705 \" + i18n(\"File Preprocessing\"),\n                    variant=\"primary\",\n                )\n                fresh_btn = gr.Button(\"\\U0001F503\", scale=0, min_width=80)\n                help_button = gr.Button(\"\\U00002753\", scale=0, min_width=80)  # question\n                train_btn = gr.Button(i18n(\"Start Training\"), variant=\"primary\")\n\n    footer = load_data_in_raw(\"fish_speech/webui/html/footer.html\")\n    footer = footer.format(\n        versions=versions_html(),\n        api_docs=\"https://speech.fish.audio/inference/#http-api\",\n    )\n    gr.HTML(footer, elem_id=\"footer\")\n    vqgan_page.select(lambda: \"VQGAN\", None, model_type_radio)\n    llama_page.select(lambda: \"LLAMA\", None, model_type_radio)\n    add_button.click(\n        fn=add_item,\n        inputs=[textbox, output_radio, label_radio, if_initial_prompt, initial_prompt],\n        outputs=[checkbox_group, error],\n    )\n    remove_button.click(\n        fn=remove_items, inputs=[checkbox_group], outputs=[checkbox_group, error]\n    )\n    checkbox_group.change(fn=show_selected, inputs=checkbox_group, outputs=[error])\n    help_button.click(\n        fn=None,\n        js='() => { window.open(\"https://speech.fish.audio/\", \"newwindow\", \"height=100, width=400, '\n        'toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no\")}',\n    )\n    if_label.change(fn=change_label, inputs=[if_label], outputs=[error])\n    if_initial_prompt.change(\n        fn=lambda x: gr.Textbox(value=\"\", interactive=x),\n        inputs=[if_initial_prompt],\n        outputs=[initial_prompt],\n    )\n    train_btn.click(\n        fn=train_process,\n        inputs=[\n            train_box,\n            model_type_radio,\n            # llama config\n            llama_ckpt,\n            llama_base_config,\n            llama_lr_slider,\n            llama_maxsteps_slider,\n            llama_data_num_workers_slider,\n            llama_data_batch_size_slider,\n            llama_data_max_length_slider,\n            llama_precision_dropdown,\n            llama_check_interval_slider,\n            llama_grad_batches,\n            llama_use_speaker,\n            llama_use_lora,\n        ],\n        outputs=[train_error],\n    )\n    if_tb.change(\n        fn=tensorboard_process,\n        inputs=[if_tb, tb_dir, tb_host, tb_port],\n        outputs=[train_error],\n    )\n    tb_dir.change(fn=fresh_tb_dir, inputs=[], outputs=[tb_dir])\n    infer_decoder_model.change(\n        fn=fresh_decoder_model, inputs=[], outputs=[infer_decoder_model]\n    )\n    infer_llama_model.change(\n        fn=fresh_llama_model, inputs=[], outputs=[infer_llama_model]\n    )\n    llama_weight.change(fn=fresh_llama_model, inputs=[], outputs=[llama_weight])\n    admit_btn.click(\n        fn=check_files,\n        inputs=[train_box, tree_slider, label_model, label_device],\n        outputs=[error, file_markdown],\n    )\n    fresh_btn.click(\n        fn=new_explorer, inputs=[train_box, tree_slider], outputs=[file_markdown]\n    )\n    llama_use_lora.change(\n        fn=fresh_llama_ckpt, inputs=[llama_use_lora], outputs=[llama_ckpt]\n    )\n    llama_ckpt.change(\n        fn=fresh_llama_ckpt, inputs=[llama_use_lora], outputs=[llama_ckpt]\n    )\n    lora_weight.change(\n        fn=lambda: gr.Dropdown(choices=list_lora_llama_models()),\n        inputs=[],\n        outputs=[lora_weight],\n    )\n    llama_lora_merge_btn.click(\n        fn=llama_lora_merge,\n        inputs=[llama_weight, lora_llama_config, lora_weight, llama_lora_output],\n        outputs=[train_error],\n    )\n    llama_quantify_btn.click(\n        fn=llama_quantify,\n        inputs=[llama_weight_to_quantify, quantify_mode],\n        outputs=[train_error],\n    )\n    infer_checkbox.change(\n        fn=change_infer,\n        inputs=[\n            infer_checkbox,\n            infer_host_textbox,\n            infer_port_textbox,\n            infer_decoder_model,\n            infer_decoder_config,\n            infer_llama_model,\n            infer_compile,\n        ],\n        outputs=[infer_error],\n    )\n\ndemo.launch(inbrowser=True)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/api_client.py",
    "content": "import argparse\nimport base64\nimport wave\n\nimport ormsgpack\nimport pyaudio\nimport requests\nfrom pydub import AudioSegment\nfrom pydub.playback import play\n\nfrom tools.file import audio_to_bytes, read_ref_text\nfrom tools.schema import ServeReferenceAudio, ServeTTSRequest\n\n\ndef parse_args():\n\n    parser = argparse.ArgumentParser(\n        description=\"Send a WAV file and text to a server and receive synthesized audio.\",\n        formatter_class=argparse.RawTextHelpFormatter,\n    )\n\n    parser.add_argument(\n        \"--url\",\n        \"-u\",\n        type=str,\n        default=\"http://127.0.0.1:8080/v1/tts\",\n        help=\"URL of the server\",\n    )\n    parser.add_argument(\n        \"--text\", \"-t\", type=str, required=True, help=\"Text to be synthesized\"\n    )\n    parser.add_argument(\n        \"--reference_id\",\n        \"-id\",\n        type=str,\n        default=None,\n        help=\"ID of the reference model to be used for the speech\\n(Local: name of folder containing audios and files)\",\n    )\n    parser.add_argument(\n        \"--reference_audio\",\n        \"-ra\",\n        type=str,\n        nargs=\"+\",\n        default=None,\n        help=\"Path to the audio file\",\n    )\n    parser.add_argument(\n        \"--reference_text\",\n        \"-rt\",\n        type=str,\n        nargs=\"+\",\n        default=None,\n        help=\"Reference text for voice synthesis\",\n    )\n    parser.add_argument(\n        \"--output\",\n        \"-o\",\n        type=str,\n        default=\"generated_audio\",\n        help=\"Output audio file name\",\n    )\n    parser.add_argument(\n        \"--play\",\n        type=bool,\n        default=True,\n        help=\"Whether to play audio after receiving data\",\n    )\n    parser.add_argument(\"--normalize\", type=bool, default=True)\n    parser.add_argument(\n        \"--format\", type=str, choices=[\"wav\", \"mp3\", \"flac\"], default=\"wav\"\n    )\n    parser.add_argument(\n        \"--latency\",\n        type=str,\n        default=\"normal\",\n        choices=[\"normal\", \"balanced\"],\n        help=\"Used in api.fish.audio/v1/tts\",\n    )\n    parser.add_argument(\n        \"--max_new_tokens\",\n        type=int,\n        default=1024,\n        help=\"Maximum new tokens to generate. \\n0 means no limit.\",\n    )\n    parser.add_argument(\n        \"--chunk_length\", type=int, default=200, help=\"Chunk length for synthesis\"\n    )\n    parser.add_argument(\n        \"--top_p\", type=float, default=0.7, help=\"Top-p sampling for synthesis\"\n    )\n    parser.add_argument(\n        \"--repetition_penalty\",\n        type=float,\n        default=1.2,\n        help=\"Repetition penalty for synthesis\",\n    )\n    parser.add_argument(\n        \"--temperature\", type=float, default=0.7, help=\"Temperature for sampling\"\n    )\n\n    parser.add_argument(\n        \"--streaming\", type=bool, default=False, help=\"Enable streaming response\"\n    )\n    parser.add_argument(\n        \"--channels\", type=int, default=1, help=\"Number of audio channels\"\n    )\n    parser.add_argument(\"--rate\", type=int, default=44100, help=\"Sample rate for audio\")\n    parser.add_argument(\n        \"--use_memory_cache\",\n        type=str,\n        default=\"off\",\n        choices=[\"on\", \"off\"],\n        help=\"Cache encoded references codes in memory.\\n\",\n    )\n    parser.add_argument(\n        \"--seed\",\n        type=int,\n        default=None,\n        help=\"`None` means randomized inference, otherwise deterministic.\\n\"\n        \"It can't be used for fixing a timbre.\",\n    )\n\n    return parser.parse_args()\n\n\nif __name__ == \"__main__\":\n\n    args = parse_args()\n\n    idstr: str | None = args.reference_id\n    # priority: ref_id > [{text, audio},...]\n    if idstr is None:\n        ref_audios = args.reference_audio\n        ref_texts = args.reference_text\n        if ref_audios is None:\n            byte_audios = []\n        else:\n            byte_audios = [audio_to_bytes(ref_audio) for ref_audio in ref_audios]\n        if ref_texts is None:\n            ref_texts = []\n        else:\n            ref_texts = [read_ref_text(ref_text) for ref_text in ref_texts]\n    else:\n        byte_audios = []\n        ref_texts = []\n        pass  # in api.py\n\n    data = {\n        \"text\": args.text,\n        \"references\": [\n            ServeReferenceAudio(\n                audio=ref_audio if ref_audio is not None else b\"\", text=ref_text\n            )\n            for ref_text, ref_audio in zip(ref_texts, byte_audios)\n        ],\n        \"reference_id\": idstr,\n        \"normalize\": args.normalize,\n        \"format\": args.format,\n        \"max_new_tokens\": args.max_new_tokens,\n        \"chunk_length\": args.chunk_length,\n        \"top_p\": args.top_p,\n        \"repetition_penalty\": args.repetition_penalty,\n        \"temperature\": args.temperature,\n        \"streaming\": args.streaming,\n        \"use_memory_cache\": args.use_memory_cache,\n        \"seed\": args.seed,\n    }\n\n    pydantic_data = ServeTTSRequest(**data)\n\n    response = requests.post(\n        args.url,\n        data=ormsgpack.packb(pydantic_data, option=ormsgpack.OPT_SERIALIZE_PYDANTIC),\n        stream=args.streaming,\n        headers={\n            \"authorization\": \"Bearer YOUR_API_KEY\",\n            \"content-type\": \"application/msgpack\",\n        },\n    )\n\n    if response.status_code == 200:\n        if args.streaming:\n            p = pyaudio.PyAudio()\n            audio_format = pyaudio.paInt16  # Assuming 16-bit PCM format\n            stream = p.open(\n                format=audio_format, channels=args.channels, rate=args.rate, output=True\n            )\n\n            wf = wave.open(f\"{args.output}.wav\", \"wb\")\n            wf.setnchannels(args.channels)\n            wf.setsampwidth(p.get_sample_size(audio_format))\n            wf.setframerate(args.rate)\n\n            stream_stopped_flag = False\n\n            try:\n                for chunk in response.iter_content(chunk_size=1024):\n                    if chunk:\n                        stream.write(chunk)\n                        wf.writeframesraw(chunk)\n                    else:\n                        if not stream_stopped_flag:\n                            stream.stop_stream()\n                            stream_stopped_flag = True\n            finally:\n                stream.close()\n                p.terminate()\n                wf.close()\n        else:\n            audio_content = response.content\n            audio_path = f\"{args.output}.{args.format}\"\n            with open(audio_path, \"wb\") as audio_file:\n                audio_file.write(audio_content)\n\n            audio = AudioSegment.from_file(audio_path, format=args.format)\n            if args.play:\n                play(audio)\n            print(f\"Audio has been saved to '{audio_path}'.\")\n    else:\n        print(f\"Request failed with status code {response.status_code}\")\n        print(response.json())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/api_server.py",
    "content": "from threading import Lock\n\nimport pyrootutils\nimport uvicorn\nfrom kui.asgi import FactoryClass, HTTPException, HttpRoute, Kui, OpenAPI, Routes\nfrom loguru import logger\n\npyrootutils.setup_root(__file__, indicator=\".project-root\", pythonpath=True)\n\nfrom tools.server.api_utils import MsgPackRequest, parse_args\nfrom tools.server.exception_handler import ExceptionHandler\nfrom tools.server.model_manager import ModelManager\nfrom tools.server.views import (\n    ASRView,\n    ChatView,\n    HealthView,\n    TTSView,\n    VQGANDecodeView,\n    VQGANEncodeView,\n)\n\n\nclass API(ExceptionHandler):\n    def __init__(self):\n        self.args = parse_args()\n        self.routes = [\n            (\"/v1/health\", HealthView),\n            (\"/v1/vqgan/encode\", VQGANEncodeView),\n            (\"/v1/vqgan/decode\", VQGANDecodeView),\n            (\"/v1/asr\", ASRView),\n            (\"/v1/tts\", TTSView),\n            (\"/v1/chat\", ChatView),\n        ]\n        self.routes = Routes([HttpRoute(path, view) for path, view in self.routes])\n\n        self.openapi = OpenAPI(\n            {\n                \"title\": \"Fish Speech API\",\n                \"version\": \"1.5.0\",\n            },\n        ).routes\n\n        # Initialize the app\n        self.app = Kui(\n            routes=self.routes + self.openapi[1:],  # Remove the default route\n            exception_handlers={\n                HTTPException: self.http_exception_handler,\n                Exception: self.other_exception_handler,\n            },\n            factory_class=FactoryClass(http=MsgPackRequest),\n            cors_config={},\n        )\n\n        # Add the state variables\n        self.app.state.lock = Lock()\n        self.app.state.device = self.args.device\n        self.app.state.max_text_length = self.args.max_text_length\n\n        # Associate the app with the model manager\n        self.app.on_startup(self.initialize_app)\n\n    async def initialize_app(self, app: Kui):\n        # Make the ModelManager available to the views\n        app.state.model_manager = ModelManager(\n            mode=self.args.mode,\n            device=self.args.device,\n            half=self.args.half,\n            compile=self.args.compile,\n            asr_enabled=self.args.load_asr_model,\n            llama_checkpoint_path=self.args.llama_checkpoint_path,\n            decoder_checkpoint_path=self.args.decoder_checkpoint_path,\n            decoder_config_name=self.args.decoder_config_name,\n        )\n\n        logger.info(f\"Startup done, listening server at http://{self.args.listen}\")\n\n\n# Each worker process created by Uvicorn has its own memory space,\n# meaning that models and variables are not shared between processes.\n# Therefore, any variables (like `llama_queue` or `decoder_model`)\n# will not be shared across workers.\n\n# Multi-threading for deep learning can cause issues, such as inconsistent\n# outputs if multiple threads access the same buffers simultaneously.\n# Instead, it's better to use multiprocessing or independent models per thread.\n\nif __name__ == \"__main__\":\n\n    api = API()\n    host, port = api.args.listen.split(\":\")\n\n    uvicorn.run(\n        api.app,\n        host=host,\n        port=int(port),\n        workers=api.args.workers,\n        log_level=\"info\",\n    )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/download_models.py",
    "content": "import os\n\nfrom huggingface_hub import hf_hub_download\n\n\n# Download\ndef check_and_download_files(repo_id, file_list, local_dir):\n    os.makedirs(local_dir, exist_ok=True)\n    for file in file_list:\n        file_path = os.path.join(local_dir, file)\n        if not os.path.exists(file_path):\n            print(f\"{file} 不存在，从 Hugging Face 仓库下载...\")\n            hf_hub_download(\n                repo_id=repo_id,\n                filename=file,\n                resume_download=True,\n                local_dir=local_dir,\n                local_dir_use_symlinks=False,\n            )\n        else:\n            print(f\"{file} 已存在，跳过下载。\")\n\n\n# 1st\nrepo_id_1 = \"fishaudio/fish-speech-1.5\"\nlocal_dir_1 = \"./checkpoints/fish-speech-1.5\"\nfiles_1 = [\n    \"gitattributes\",\n    \"model.pth\",\n    \"README.md\",\n    \"special_tokens.json\",\n    \"tokenizer.tiktoken\",\n    \"config.json\",\n    \"firefly-gan-vq-fsq-8x1024-21hz-generator.pth\",\n]\n\n# 3rd\nrepo_id_3 = \"fishaudio/fish-speech-1\"\nlocal_dir_3 = \"./\"\nfiles_3 = [\n    \"ffmpeg.exe\",\n    \"ffprobe.exe\",\n]\n\n# 4th\nrepo_id_4 = \"SpicyqSama007/fish-speech-packed\"\nlocal_dir_4 = \"./\"\nfiles_4 = [\n    \"asr-label-win-x64.exe\",\n]\n\ncheck_and_download_files(repo_id_1, files_1, local_dir_1)\n\ncheck_and_download_files(repo_id_3, files_3, local_dir_3)\ncheck_and_download_files(repo_id_4, files_4, local_dir_4)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/e2e_webui.py",
    "content": "import io\nimport re\nimport wave\n\nimport gradio as gr\nimport numpy as np\n\nfrom .fish_e2e import FishE2EAgent, FishE2EEventType\nfrom .schema import ServeMessage, ServeTextPart, ServeVQPart\n\n\ndef wav_chunk_header(sample_rate=44100, bit_depth=16, channels=1):\n    buffer = io.BytesIO()\n\n    with wave.open(buffer, \"wb\") as wav_file:\n        wav_file.setnchannels(channels)\n        wav_file.setsampwidth(bit_depth // 8)\n        wav_file.setframerate(sample_rate)\n\n    wav_header_bytes = buffer.getvalue()\n    buffer.close()\n    return wav_header_bytes\n\n\nclass ChatState:\n    def __init__(self):\n        self.conversation = []\n        self.added_systext = False\n        self.added_sysaudio = False\n\n    def get_history(self):\n        results = []\n        for msg in self.conversation:\n            results.append({\"role\": msg.role, \"content\": self.repr_message(msg)})\n\n        # Process assistant messages to extract questions and update user messages\n        for i, msg in enumerate(results):\n            if msg[\"role\"] == \"assistant\":\n                match = re.search(r\"Question: (.*?)\\n\\nResponse:\", msg[\"content\"])\n                if match and i > 0 and results[i - 1][\"role\"] == \"user\":\n                    # Update previous user message with extracted question\n                    results[i - 1][\"content\"] += \"\\n\" + match.group(1)\n                    # Remove the Question/Answer format from assistant message\n                    msg[\"content\"] = msg[\"content\"].split(\"\\n\\nResponse: \", 1)[1]\n        return results\n\n    def repr_message(self, msg: ServeMessage):\n        response = \"\"\n        for part in msg.parts:\n            if isinstance(part, ServeTextPart):\n                response += part.text\n            elif isinstance(part, ServeVQPart):\n                response += f\"<audio {len(part.codes[0]) / 21:.2f}s>\"\n        return response\n\n\ndef clear_fn():\n    return [], ChatState(), None, None, None\n\n\nasync def process_audio_input(\n    sys_audio_input, sys_text_input, audio_input, state: ChatState, text_input: str\n):\n    if audio_input is None and not text_input:\n        raise gr.Error(\"No input provided\")\n\n    agent = FishE2EAgent()  # Create new agent instance for each request\n\n    # Convert audio input to numpy array\n    if isinstance(audio_input, tuple):\n        sr, audio_data = audio_input\n    elif text_input:\n        sr = 44100\n        audio_data = None\n    else:\n        raise gr.Error(\"Invalid audio format\")\n\n    if isinstance(sys_audio_input, tuple):\n        sr, sys_audio_data = sys_audio_input\n    else:\n        sr = 44100\n        sys_audio_data = None\n\n    def append_to_chat_ctx(\n        part: ServeTextPart | ServeVQPart, role: str = \"assistant\"\n    ) -> None:\n        if not state.conversation or state.conversation[-1].role != role:\n            state.conversation.append(ServeMessage(role=role, parts=[part]))\n        else:\n            state.conversation[-1].parts.append(part)\n\n    if state.added_systext is False and sys_text_input:\n        state.added_systext = True\n        append_to_chat_ctx(ServeTextPart(text=sys_text_input), role=\"system\")\n    if text_input:\n        append_to_chat_ctx(ServeTextPart(text=text_input), role=\"user\")\n        audio_data = None\n\n    result_audio = b\"\"\n    async for event in agent.stream(\n        sys_audio_data,\n        audio_data,\n        sr,\n        1,\n        chat_ctx={\n            \"messages\": state.conversation,\n            \"added_sysaudio\": state.added_sysaudio,\n        },\n    ):\n        if event.type == FishE2EEventType.USER_CODES:\n            append_to_chat_ctx(ServeVQPart(codes=event.vq_codes), role=\"user\")\n        elif event.type == FishE2EEventType.SPEECH_SEGMENT:\n            append_to_chat_ctx(ServeVQPart(codes=event.vq_codes))\n            yield state.get_history(), wav_chunk_header() + event.frame.data, None, None\n        elif event.type == FishE2EEventType.TEXT_SEGMENT:\n            append_to_chat_ctx(ServeTextPart(text=event.text))\n            yield state.get_history(), None, None, None\n\n    yield state.get_history(), None, None, None\n\n\nasync def process_text_input(\n    sys_audio_input, sys_text_input, state: ChatState, text_input: str\n):\n    async for event in process_audio_input(\n        sys_audio_input, sys_text_input, None, state, text_input\n    ):\n        yield event\n\n\ndef create_demo():\n    with gr.Blocks() as demo:\n        state = gr.State(ChatState())\n\n        with gr.Row():\n            # Left column (70%) for chatbot and notes\n            with gr.Column(scale=7):\n                chatbot = gr.Chatbot(\n                    [],\n                    elem_id=\"chatbot\",\n                    bubble_full_width=False,\n                    height=600,\n                    type=\"messages\",\n                )\n\n                # notes = gr.Markdown(\n                #     \"\"\"\n                # # Fish Agent\n                # 1. 此Demo为Fish Audio自研端到端语言模型Fish Agent 3B版本.\n                # 2. 你可以在我们的官方仓库找到代码以及权重，但是相关内容全部基于 CC BY-NC-SA 4.0 许可证发布.\n                # 3. Demo为早期灰度测试版本，推理速度尚待优化.\n                # # 特色\n                # 1. 该模型自动集成ASR与TTS部分，不需要外挂其它模型，即真正的端到端，而非三段式(ASR+LLM+TTS).\n                # 2. 模型可以使用reference audio控制说话音色.\n                # 3. 可以生成具有较强情感与韵律的音频.\n                # \"\"\"\n                # )\n                notes = gr.Markdown(\n                    \"\"\"\n                    # Fish Agent\n                    1. This demo is Fish Audio's self-researh end-to-end language model, Fish Agent version 3B.\n                    2. You can find the code and weights in our official repo in [gitub](https://github.com/fishaudio/fish-speech) and [hugging face](https://huggingface.co/fishaudio/fish-agent-v0.1-3b), but the content is released under a CC BY-NC-SA 4.0 licence.\n                    3. The demo is an early alpha test version, the inference speed needs to be optimised.\n                    # Features\n                    1. The model automatically integrates ASR and TTS parts, no need to plug-in other models, i.e., true end-to-end, not three-stage (ASR+LLM+TTS).\n                    2. The model can use reference audio to control the speech timbre. \n                    3. The model can generate speech with strong emotion.\n                \"\"\"\n                )\n\n            # Right column (30%) for controls\n            with gr.Column(scale=3):\n                sys_audio_input = gr.Audio(\n                    sources=[\"upload\"],\n                    type=\"numpy\",\n                    label=\"Give a timbre for your assistant\",\n                )\n                sys_text_input = gr.Textbox(\n                    label=\"What is your assistant's role?\",\n                    value=\"You are a voice assistant created by Fish Audio, offering end-to-end voice interaction for a seamless user experience. You are required to first transcribe the user's speech, then answer it in the following format: 'Question: [USER_SPEECH]\\n\\nAnswer: [YOUR_RESPONSE]\\n'. You are required to use the following voice in this conversation.\",\n                    type=\"text\",\n                )\n                audio_input = gr.Audio(\n                    sources=[\"microphone\"], type=\"numpy\", label=\"Speak your message\"\n                )\n\n                text_input = gr.Textbox(label=\"Or type your message\", type=\"text\")\n\n                output_audio = gr.Audio(\n                    label=\"Assistant's Voice\",\n                    streaming=True,\n                    autoplay=True,\n                    interactive=False,\n                )\n\n                send_button = gr.Button(\"Send\", variant=\"primary\")\n                clear_button = gr.Button(\"Clear\")\n\n        # Event handlers\n        audio_input.stop_recording(\n            process_audio_input,\n            inputs=[sys_audio_input, sys_text_input, audio_input, state, text_input],\n            outputs=[chatbot, output_audio, audio_input, text_input],\n            show_progress=True,\n        )\n\n        send_button.click(\n            process_text_input,\n            inputs=[sys_audio_input, sys_text_input, state, text_input],\n            outputs=[chatbot, output_audio, audio_input, text_input],\n            show_progress=True,\n        )\n\n        text_input.submit(\n            process_text_input,\n            inputs=[sys_audio_input, sys_text_input, state, text_input],\n            outputs=[chatbot, output_audio, audio_input, text_input],\n            show_progress=True,\n        )\n\n        clear_button.click(\n            clear_fn,\n            inputs=[],\n            outputs=[chatbot, state, audio_input, output_audio, text_input],\n        )\n\n    return demo\n\n\nif __name__ == \"__main__\":\n    demo = create_demo()\n    demo.launch(server_name=\"127.0.0.1\", server_port=7860, share=True)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/extract_model.py",
    "content": "import click\nimport torch\nfrom loguru import logger\n\n\n@click.command()\n@click.argument(\"model_path\")\n@click.argument(\"output_path\")\ndef main(model_path, output_path):\n    if model_path == output_path:\n        logger.error(\"Model path and output path are the same\")\n        return\n\n    logger.info(f\"Loading model from {model_path}\")\n    state_dict = torch.load(model_path, map_location=\"cpu\")[\"state_dict\"]\n    torch.save(state_dict, output_path)\n    logger.info(f\"Model saved to {output_path}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/file.py",
    "content": "import base64\nfrom pathlib import Path\nfrom typing import Union\n\nfrom loguru import logger\nfrom natsort import natsorted\n\nAUDIO_EXTENSIONS = {\n    \".mp3\",\n    \".wav\",\n    \".flac\",\n    \".ogg\",\n    \".m4a\",\n    \".wma\",\n    \".aac\",\n    \".aiff\",\n    \".aif\",\n    \".aifc\",\n}\n\nVIDEO_EXTENSIONS = {\n    \".mp4\",\n    \".avi\",\n}\n\n\ndef audio_to_bytes(file_path):\n    if not file_path or not Path(file_path).exists():\n        return None\n    with open(file_path, \"rb\") as wav_file:\n        wav = wav_file.read()\n    return wav\n\n\ndef read_ref_text(ref_text):\n    path = Path(ref_text)\n    if path.exists() and path.is_file():\n        with path.open(\"r\", encoding=\"utf-8\") as file:\n            return file.read()\n    return ref_text\n\n\ndef list_files(\n    path: Union[Path, str],\n    extensions: set[str] = None,\n    recursive: bool = False,\n    sort: bool = True,\n) -> list[Path]:\n    \"\"\"List files in a directory.\n\n    Args:\n        path (Path): Path to the directory.\n        extensions (set, optional): Extensions to filter. Defaults to None.\n        recursive (bool, optional): Whether to search recursively. Defaults to False.\n        sort (bool, optional): Whether to sort the files. Defaults to True.\n\n    Returns:\n        list: List of files.\n    \"\"\"\n\n    if isinstance(path, str):\n        path = Path(path)\n\n    if not path.exists():\n        raise FileNotFoundError(f\"Directory {path} does not exist.\")\n\n    files = [file for ext in extensions for file in path.rglob(f\"*{ext}\")]\n\n    if sort:\n        files = natsorted(files)\n\n    return files\n\n\ndef load_filelist(path: Path | str) -> list[tuple[Path, str, str, str]]:\n    \"\"\"\n    Load a Bert-VITS2 style filelist.\n    \"\"\"\n\n    files = set()\n    results = []\n    count_duplicated, count_not_found = 0, 0\n\n    LANGUAGE_TO_LANGUAGES = {\n        \"zh\": [\"zh\", \"en\"],\n        \"jp\": [\"jp\", \"en\"],\n        \"en\": [\"en\"],\n    }\n\n    with open(path, \"r\", encoding=\"utf-8\") as f:\n        for line in f.readlines():\n            splits = line.strip().split(\"|\", maxsplit=3)\n            if len(splits) != 4:\n                logger.warning(f\"Invalid line: {line}\")\n                continue\n\n            filename, speaker, language, text = splits\n            file = Path(filename)\n            language = language.strip().lower()\n\n            if language == \"ja\":\n                language = \"jp\"\n\n            assert language in [\"zh\", \"jp\", \"en\"], f\"Invalid language {language}\"\n            languages = LANGUAGE_TO_LANGUAGES[language]\n\n            if file in files:\n                logger.warning(f\"Duplicated file: {file}\")\n                count_duplicated += 1\n                continue\n\n            if not file.exists():\n                logger.warning(f\"File not found: {file}\")\n                count_not_found += 1\n                continue\n\n            results.append((file, speaker, languages, text))\n\n    if count_duplicated > 0:\n        logger.warning(f\"Total duplicated files: {count_duplicated}\")\n\n    if count_not_found > 0:\n        logger.warning(f\"Total files not found: {count_not_found}\")\n\n    return results\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/fish_e2e.py",
    "content": "import base64\nimport ctypes\nimport io\nimport json\nimport os\nimport struct\nfrom dataclasses import dataclass\nfrom enum import Enum\nfrom typing import AsyncGenerator, Union\n\nimport httpx\nimport numpy as np\nimport ormsgpack\nimport soundfile as sf\n\nfrom .schema import (\n    ServeChatRequest,\n    ServeMessage,\n    ServeTextPart,\n    ServeVQGANDecodeRequest,\n    ServeVQGANEncodeRequest,\n    ServeVQPart,\n)\n\n\nclass CustomAudioFrame:\n    def __init__(self, data, sample_rate, num_channels, samples_per_channel):\n        if len(data) < num_channels * samples_per_channel * ctypes.sizeof(\n            ctypes.c_int16\n        ):\n            raise ValueError(\n                \"data length must be >= num_channels * samples_per_channel * sizeof(int16)\"\n            )\n\n        self._data = bytearray(data)\n        self._sample_rate = sample_rate\n        self._num_channels = num_channels\n        self._samples_per_channel = samples_per_channel\n\n    @property\n    def data(self):\n        return memoryview(self._data).cast(\"h\")\n\n    @property\n    def sample_rate(self):\n        return self._sample_rate\n\n    @property\n    def num_channels(self):\n        return self._num_channels\n\n    @property\n    def samples_per_channel(self):\n        return self._samples_per_channel\n\n    @property\n    def duration(self):\n        return self.samples_per_channel / self.sample_rate\n\n    def __repr__(self):\n        return (\n            f\"CustomAudioFrame(sample_rate={self.sample_rate}, \"\n            f\"num_channels={self.num_channels}, \"\n            f\"samples_per_channel={self.samples_per_channel}, \"\n            f\"duration={self.duration:.3f})\"\n        )\n\n\nclass FishE2EEventType(Enum):\n    SPEECH_SEGMENT = 1\n    TEXT_SEGMENT = 2\n    END_OF_TEXT = 3\n    END_OF_SPEECH = 4\n    ASR_RESULT = 5\n    USER_CODES = 6\n\n\n@dataclass\nclass FishE2EEvent:\n    type: FishE2EEventType\n    frame: np.ndarray = None\n    text: str = None\n    vq_codes: list[list[int]] = None\n\n\nclient = httpx.AsyncClient(\n    timeout=None,\n    limits=httpx.Limits(\n        max_connections=None,\n        max_keepalive_connections=None,\n        keepalive_expiry=None,\n    ),\n)\n\n\nclass FishE2EAgent:\n    def __init__(self):\n        self.llm_url = \"http://localhost:8080/v1/chat\"\n        self.vqgan_url = \"http://localhost:8080\"\n        self.client = httpx.AsyncClient(timeout=None)\n\n    async def get_codes(self, audio_data, sample_rate):\n        audio_buffer = io.BytesIO()\n        sf.write(audio_buffer, audio_data, sample_rate, format=\"WAV\")\n        audio_buffer.seek(0)\n        # Step 1: Encode audio using VQGAN\n        encode_request = ServeVQGANEncodeRequest(audios=[audio_buffer.read()])\n        encode_request_bytes = ormsgpack.packb(\n            encode_request, option=ormsgpack.OPT_SERIALIZE_PYDANTIC\n        )\n        encode_response = await self.client.post(\n            f\"{self.vqgan_url}/v1/vqgan/encode\",\n            data=encode_request_bytes,\n            headers={\"Content-Type\": \"application/msgpack\"},\n        )\n        encode_response_data = ormsgpack.unpackb(encode_response.content)\n        codes = encode_response_data[\"tokens\"][0]\n        return codes\n\n    async def stream(\n        self,\n        system_audio_data: np.ndarray | None,\n        user_audio_data: np.ndarray | None,\n        sample_rate: int,\n        num_channels: int,\n        chat_ctx: dict | None = None,\n    ) -> AsyncGenerator[bytes, None]:\n\n        if system_audio_data is not None:\n            sys_codes = await self.get_codes(system_audio_data, sample_rate)\n        else:\n            sys_codes = None\n        if user_audio_data is not None:\n            user_codes = await self.get_codes(user_audio_data, sample_rate)\n        # Step 2: Prepare LLM request\n        if chat_ctx is None:\n            sys_parts = [\n                ServeTextPart(\n                    text='您是由 Fish Audio 设计的语音助手，提供端到端的语音交互，实现无缝用户体验。首先转录用户的语音，然后使用以下格式回答：\"Question: [用户语音]\\n\\nAnswer: [你的回答]\\n\"。'\n                ),\n            ]\n            if system_audio_data is not None:\n                sys_parts.append(ServeVQPart(codes=sys_codes))\n            chat_ctx = {\n                \"messages\": [\n                    ServeMessage(\n                        role=\"system\",\n                        parts=sys_parts,\n                    ),\n                ],\n            }\n        else:\n            if chat_ctx[\"added_sysaudio\"] is False and sys_codes:\n                chat_ctx[\"added_sysaudio\"] = True\n                chat_ctx[\"messages\"][0].parts.append(ServeVQPart(codes=sys_codes))\n\n        prev_messages = chat_ctx[\"messages\"].copy()\n        if user_audio_data is not None:\n            yield FishE2EEvent(\n                type=FishE2EEventType.USER_CODES,\n                vq_codes=user_codes,\n            )\n        else:\n            user_codes = None\n\n        request = ServeChatRequest(\n            messages=prev_messages\n            + (\n                [\n                    ServeMessage(\n                        role=\"user\",\n                        parts=[ServeVQPart(codes=user_codes)],\n                    )\n                ]\n                if user_codes\n                else []\n            ),\n            streaming=True,\n            num_samples=1,\n        )\n\n        # Step 3: Stream LLM response and decode audio\n        buffer = b\"\"\n        vq_codes = []\n        current_vq = False\n\n        async def decode_send():\n            nonlocal current_vq\n            nonlocal vq_codes\n\n            data = np.concatenate(vq_codes, axis=1).tolist()\n            # Decode VQ codes to audio\n            decode_request = ServeVQGANDecodeRequest(tokens=[data])\n            decode_response = await self.client.post(\n                f\"{self.vqgan_url}/v1/vqgan/decode\",\n                data=ormsgpack.packb(\n                    decode_request,\n                    option=ormsgpack.OPT_SERIALIZE_PYDANTIC,\n                ),\n                headers={\"Content-Type\": \"application/msgpack\"},\n            )\n            decode_data = ormsgpack.unpackb(decode_response.content)\n\n            # Convert float16 audio data to int16\n            audio_data = np.frombuffer(decode_data[\"audios\"][0], dtype=np.float16)\n            audio_data = (audio_data * 32768).astype(np.int16).tobytes()\n\n            audio_frame = CustomAudioFrame(\n                data=audio_data,\n                samples_per_channel=len(audio_data) // 2,\n                sample_rate=44100,\n                num_channels=1,\n            )\n            yield FishE2EEvent(\n                type=FishE2EEventType.SPEECH_SEGMENT,\n                frame=audio_frame,\n                vq_codes=data,\n            )\n\n            current_vq = False\n            vq_codes = []\n\n        async with self.client.stream(\n            \"POST\",\n            self.llm_url,\n            data=ormsgpack.packb(request, option=ormsgpack.OPT_SERIALIZE_PYDANTIC),\n            headers={\"Content-Type\": \"application/msgpack\"},\n        ) as response:\n\n            async for chunk in response.aiter_bytes():\n                buffer += chunk\n\n                while len(buffer) >= 4:\n                    read_length = struct.unpack(\"I\", buffer[:4])[0]\n                    if len(buffer) < 4 + read_length:\n                        break\n\n                    body = buffer[4 : 4 + read_length]\n                    buffer = buffer[4 + read_length :]\n                    data = ormsgpack.unpackb(body)\n\n                    if data[\"delta\"] and data[\"delta\"][\"part\"]:\n                        if current_vq and data[\"delta\"][\"part\"][\"type\"] == \"text\":\n                            async for event in decode_send():\n                                yield event\n                        if data[\"delta\"][\"part\"][\"type\"] == \"text\":\n                            yield FishE2EEvent(\n                                type=FishE2EEventType.TEXT_SEGMENT,\n                                text=data[\"delta\"][\"part\"][\"text\"],\n                            )\n                        elif data[\"delta\"][\"part\"][\"type\"] == \"vq\":\n                            vq_codes.append(np.array(data[\"delta\"][\"part\"][\"codes\"]))\n                            current_vq = True\n\n        if current_vq and vq_codes:\n            async for event in decode_send():\n                yield event\n\n        yield FishE2EEvent(type=FishE2EEventType.END_OF_TEXT)\n        yield FishE2EEvent(type=FishE2EEventType.END_OF_SPEECH)\n\n\n# Example usage:\nasync def main():\n    import torchaudio\n\n    agent = FishE2EAgent()\n\n    # Replace this with actual audio data loading\n    with open(\"uz_story_en.m4a\", \"rb\") as f:\n        audio_data = f.read()\n\n    audio_data, sample_rate = torchaudio.load(\"uz_story_en.m4a\")\n    audio_data = (audio_data.numpy() * 32768).astype(np.int16)\n\n    stream = agent.stream(audio_data, sample_rate, 1)\n    if os.path.exists(\"audio_segment.wav\"):\n        os.remove(\"audio_segment.wav\")\n\n    async for event in stream:\n        if event.type == FishE2EEventType.SPEECH_SEGMENT:\n            # Handle speech segment (e.g., play audio or save to file)\n            with open(\"audio_segment.wav\", \"ab+\") as f:\n                f.write(event.frame.data)\n        elif event.type == FishE2EEventType.ASR_RESULT:\n            print(event.text, flush=True)\n        elif event.type == FishE2EEventType.TEXT_SEGMENT:\n            print(event.text, flush=True, end=\"\")\n        elif event.type == FishE2EEventType.END_OF_TEXT:\n            print(\"\\nEnd of text reached.\")\n        elif event.type == FishE2EEventType.END_OF_SPEECH:\n            print(\"End of speech reached.\")\n\n\nif __name__ == \"__main__\":\n    import asyncio\n\n    asyncio.run(main())\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/inference_engine/__init__.py",
    "content": "import gc\nimport queue\nfrom typing import Generator\n\nimport numpy as np\nimport torch\nfrom loguru import logger\n\nfrom fish_speech.models.vqgan.modules.firefly import FireflyArchitecture\nfrom fish_speech.text.chn_text_norm.text import Text as ChnNormedText\nfrom fish_speech.utils import autocast_exclude_mps, set_seed\nfrom tools.inference_engine.reference_loader import ReferenceLoader\nfrom tools.inference_engine.utils import InferenceResult, wav_chunk_header\nfrom tools.inference_engine.vq_manager import VQManager\nfrom tools.llama.generate import (\n    GenerateRequest,\n    GenerateResponse,\n    WrappedGenerateResponse,\n)\nfrom tools.schema import ServeTTSRequest\n\n\nclass TTSInferenceEngine(ReferenceLoader, VQManager):\n\n    def __init__(\n        self,\n        llama_queue: queue.Queue,\n        decoder_model: FireflyArchitecture,\n        precision: torch.dtype,\n        compile: bool,\n    ) -> None:\n\n        super().__init__()\n\n        self.llama_queue = llama_queue\n        self.decoder_model = decoder_model\n        self.precision = precision\n        self.compile = compile\n\n    @torch.inference_mode()\n    def inference(self, req: ServeTTSRequest) -> Generator[InferenceResult, None, None]:\n        \"\"\"\n        Main inference function:\n        - Loads the reference audio and text.\n        - Calls the LLAMA model for inference.\n        - Decodes the VQ tokens to audio.\n        \"\"\"\n\n        ref_id: str | None = req.reference_id\n        prompt_tokens, prompt_texts = [], []\n        # Load the reference audio and text based on id or hash\n        if ref_id is not None:\n            prompt_tokens, prompt_texts = self.load_by_id(ref_id, req.use_memory_cache)\n\n        elif req.references:\n            prompt_tokens, prompt_texts = self.load_by_hash(\n                req.references, req.use_memory_cache\n            )\n\n        # Set the random seed if provided\n        if req.seed is not None:\n            set_seed(req.seed)\n            logger.warning(f\"set seed: {req.seed}\")\n\n        # Get the symbolic tokens from the LLAMA model\n        response_queue = self.send_Llama_request(req, prompt_tokens, prompt_texts)\n\n        # Get the sample rate from the decoder model\n        sample_rate = self.decoder_model.spec_transform.sample_rate\n\n        # If streaming, send the header\n        # if req.streaming:\n        #     yield InferenceResult(\n        #         code=\"header\",\n        #         audio=(sample_rate, wav_chunk_header(sample_rate=sample_rate)),\n        #         error=None,\n        #     )\n\n        segments = []\n\n        while True:\n            # Get the response from the LLAMA model\n            wrapped_result: WrappedGenerateResponse = response_queue.get()\n            if wrapped_result.status == \"error\":\n                yield InferenceResult(\n                    code=\"error\",\n                    audio=None,\n                    error=(\n                        wrapped_result.response\n                        if isinstance(wrapped_result.response, Exception)\n                        else Exception(\"Unknown error\")\n                    ),\n                )\n                break\n\n            # Check the response type\n            if not isinstance(wrapped_result.response, GenerateResponse):\n                raise TypeError(\n                    \"Expected GenerateResponse, got {type(wrapped_result.response).__name__}\"\n                )\n\n            result: GenerateResponse = wrapped_result.response\n            if result.action != \"next\":\n                segment = self.get_audio_segment(result)\n\n                if req.streaming:  # Used only by the API server\n                    yield InferenceResult(\n                        code=\"segment\",\n                        audio=(sample_rate, segment),\n                        error=None,\n                    )\n                segments.append(segment)\n            else:\n                break\n\n        # Clean up the memory\n        if torch.cuda.is_available():\n            torch.cuda.empty_cache()\n            gc.collect()\n\n        # Edge case: no audio generated\n        if len(segments) == 0:\n            yield InferenceResult(\n                code=\"error\",\n                audio=None,\n                error=RuntimeError(\"No audio generated, please check the input text.\"),\n            )\n        else:\n            # Streaming or not, return the final audio\n            audio = np.concatenate(segments, axis=0)\n            yield InferenceResult(\n                code=\"final\",\n                audio=(sample_rate, audio),\n                error=None,\n            )\n\n        return None\n\n    def send_Llama_request(\n        self, req: ServeTTSRequest, prompt_tokens: list, prompt_texts: list\n    ) -> queue.Queue:\n        \"\"\"\n        Send a request to the LLAMA model to generate the symbolic tokens.\n        \"\"\"\n\n        # Prepare the request\n        request = dict(\n            device=self.decoder_model.device,\n            max_new_tokens=req.max_new_tokens,\n            text=(\n                req.text\n                if not req.normalize\n                else ChnNormedText(raw_text=req.text).normalize()\n            ),\n            top_p=req.top_p,\n            repetition_penalty=req.repetition_penalty,\n            temperature=req.temperature,\n            compile=self.compile,\n            iterative_prompt=req.chunk_length > 0,\n            chunk_length=req.chunk_length,\n            max_length=4096,\n            prompt_tokens=prompt_tokens,\n            prompt_text=prompt_texts,\n        )\n\n        # Create a queue to get the response\n        response_queue = queue.Queue()\n\n        # Send the request to the LLAMA model\n        self.llama_queue.put(\n            GenerateRequest(\n                request=request,\n                response_queue=response_queue,\n            )\n        )\n\n        return response_queue\n\n    def get_audio_segment(self, result: GenerateResponse) -> np.ndarray:\n        \"\"\"\n        Decode the VQ tokens to audio.\n        \"\"\"\n\n        # Don't use autocast on MPS devices\n        with autocast_exclude_mps(\n            device_type=self.decoder_model.device.type, dtype=self.precision\n        ):\n            # Decode the symbolic tokens to audio\n            segment = self.decode_vq_tokens(codes=result.codes)\n\n        # Convert the audio to numpy\n        return segment.float().cpu().numpy()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/inference_engine/reference_loader.py",
    "content": "import io\nfrom hashlib import sha256\nfrom pathlib import Path\nfrom typing import Callable, Literal, Tuple\n\nimport torch\nimport torchaudio\nfrom loguru import logger\n\nfrom fish_speech.models.vqgan.modules.firefly import FireflyArchitecture\nfrom tools.file import AUDIO_EXTENSIONS, audio_to_bytes, list_files, read_ref_text\nfrom tools.schema import ServeReferenceAudio\n\n\nclass ReferenceLoader:\n\n    def __init__(self) -> None:\n        \"\"\"\n        Component of the TTSInferenceEngine class.\n        Loads and manages the cache for the reference audio and text.\n        \"\"\"\n        self.ref_by_id: dict = {}\n        self.ref_by_hash: dict = {}\n\n        # Make Pylance happy (attribut/method not defined...)\n        self.decoder_model: FireflyArchitecture\n        self.encode_reference: Callable\n\n        # Define the torchaudio backend\n        backends = torchaudio.list_audio_backends()\n        if \"ffmpeg\" in backends:\n            self.backend = \"ffmpeg\"\n        else:\n            self.backend = \"soundfile\"\n\n    def load_by_id(\n        self,\n        id: str,\n        use_cache: Literal[\"on\", \"off\"],\n    ) -> Tuple:\n\n        # Load the references audio and text by id\n        ref_folder = Path(\"references\") / id\n        ref_folder.mkdir(parents=True, exist_ok=True)\n        ref_audios = list_files(\n            ref_folder, AUDIO_EXTENSIONS, recursive=True, sort=False\n        )\n\n        if use_cache == \"off\" or id not in self.ref_by_id:\n            # If the references are not already loaded, encode them\n            prompt_tokens = [\n                self.encode_reference(\n                    # decoder_model=self.decoder_model,\n                    reference_audio=audio_to_bytes(str(ref_audio)),\n                    enable_reference_audio=True,\n                )\n                for ref_audio in ref_audios\n            ]\n            prompt_texts = [\n                read_ref_text(str(ref_audio.with_suffix(\".lab\")))\n                for ref_audio in ref_audios\n            ]\n            self.ref_by_id[id] = (prompt_tokens, prompt_texts)\n\n        else:\n            # Reuse already encoded references\n            logger.info(\"Use same references\")\n            prompt_tokens, prompt_texts = self.ref_by_id[id]\n\n        return prompt_tokens, prompt_texts\n\n    def load_by_hash(\n        self,\n        references: list[ServeReferenceAudio],\n        use_cache: Literal[\"on\", \"off\"],\n    ) -> Tuple:\n\n        # Load the references audio and text by hash\n        audio_hashes = [sha256(ref.audio).hexdigest() for ref in references]\n\n        cache_used = False\n        prompt_tokens, prompt_texts = [], []\n        for i, ref in enumerate(references):\n            if use_cache == \"off\" or audio_hashes[i] not in self.ref_by_hash:\n                # If the references are not already loaded, encode them\n                prompt_tokens.append(\n                    self.encode_reference(\n                        reference_audio=ref.audio,\n                        enable_reference_audio=True,\n                    )\n                )\n                prompt_texts.append(ref.text)\n                self.ref_by_hash[audio_hashes[i]] = (prompt_tokens, prompt_texts)\n\n            else:\n                # Reuse already encoded references\n                prompt_tokens, prompt_texts = self.ref_by_hash[audio_hashes[i]]\n                cache_used = True\n\n        if cache_used:\n            logger.info(\"Use same references\")\n\n        return prompt_tokens, prompt_texts\n\n    def load_audio(self, reference_audio, sr):\n        \"\"\"\n        Load the audio data from a file or bytes.\n        \"\"\"\n        if len(reference_audio) > 255 or not Path(reference_audio).exists():\n            audio_data = reference_audio\n            reference_audio = io.BytesIO(audio_data)\n\n        waveform, original_sr = torchaudio.load(reference_audio, backend=self.backend)\n\n        if waveform.shape[0] > 1:\n            waveform = torch.mean(waveform, dim=0, keepdim=True)\n\n        if original_sr != sr:\n            resampler = torchaudio.transforms.Resample(\n                orig_freq=original_sr, new_freq=sr\n            )\n            waveform = resampler(waveform)\n\n        audio = waveform.squeeze().numpy()\n        return audio\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/inference_engine/utils.py",
    "content": "import io\nimport wave\nfrom dataclasses import dataclass\nfrom typing import Literal, Optional, Tuple\n\nimport numpy as np\n\nfrom fish_speech.text.chn_text_norm.text import Text as ChnNormedText\n\n\n@dataclass\nclass InferenceResult:\n    code: Literal[\"header\", \"segment\", \"error\", \"final\"]\n    audio: Optional[Tuple[int, np.ndarray | bytes]]\n    error: Optional[Exception]\n\n\ndef normalize_text(user_input: str, use_normalization: bool) -> str:\n    \"\"\"Normalize user input text if needed.\"\"\"\n    if use_normalization:\n        return ChnNormedText(raw_text=user_input).normalize()\n    else:\n        return user_input\n\n\ndef wav_chunk_header(\n    sample_rate: int = 44100, bit_depth: int = 16, channels: int = 1\n) -> bytes:\n    buffer = io.BytesIO()\n\n    with wave.open(buffer, \"wb\") as wav_file:\n        wav_file.setnchannels(channels)\n        wav_file.setsampwidth(bit_depth // 8)\n        wav_file.setframerate(sample_rate)\n\n    wav_header_bytes = buffer.getvalue()\n    buffer.close()\n\n    return wav_header_bytes\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/inference_engine/vq_manager.py",
    "content": "from typing import Callable\n\nimport torch\nfrom loguru import logger\n\nfrom fish_speech.models.vqgan.modules.firefly import FireflyArchitecture\n\n\nclass VQManager:\n\n    def __init__(self):\n        # Make Pylance happy (attribut/method not defined...)\n        self.decoder_model: FireflyArchitecture\n        self.load_audio: Callable\n\n    def decode_vq_tokens(self, codes):\n        feature_lengths = torch.tensor(\n            [codes.shape[1]], device=self.decoder_model.device\n        )\n        logger.info(f\"VQ features: {codes.shape}\")\n\n        if isinstance(self.decoder_model, FireflyArchitecture):\n            return self.decoder_model.decode(\n                indices=codes[None],\n                feature_lengths=feature_lengths,\n            )[0].squeeze()\n\n        raise ValueError(f\"Unknown model type: {type(self.decoder_model)}\")\n\n    def encode_reference(self, reference_audio, enable_reference_audio):\n        if enable_reference_audio and reference_audio is not None:\n            # Load audios, and prepare basic info here\n            reference_audio_content = self.load_audio(\n                reference_audio, self.decoder_model.spec_transform.sample_rate\n            )\n\n            audios = torch.from_numpy(reference_audio_content).to(\n                self.decoder_model.device\n            )[None, None, :]\n            audio_lengths = torch.tensor(\n                [audios.shape[2]], device=self.decoder_model.device, dtype=torch.long\n            )\n            logger.info(\n                f\"Loaded audio with {audios.shape[2] / self.decoder_model.spec_transform.sample_rate:.2f} seconds\"\n            )\n\n            # VQ Encoder\n            if isinstance(self.decoder_model, FireflyArchitecture):\n                prompt_tokens = self.decoder_model.encode(audios, audio_lengths)[0][0]\n                logger.info(f\"Encoded prompt: {prompt_tokens.shape}\")\n            else:\n                raise ValueError(f\"Unknown model type: {type(self.decoder_model)}\")\n        else:\n            prompt_tokens = None\n            logger.info(\"No reference audio provided\")\n\n        return prompt_tokens\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/llama/build_dataset.py",
    "content": "import itertools\nimport os\nimport re\nfrom collections import defaultdict\nfrom functools import partial\nfrom multiprocessing import Pool\nfrom pathlib import Path\n\nimport click\nimport numpy as np\nfrom loguru import logger\nfrom tqdm import tqdm\n\nfrom fish_speech.datasets.protos.text_data_pb2 import Semantics, Sentence, TextData\nfrom fish_speech.datasets.protos.text_data_stream import pack_pb_stream\nfrom tools.file import load_filelist\n\n# To avoid CPU overload\nos.environ[\"MKL_NUM_THREADS\"] = \"1\"\nos.environ[\"OMP_NUM_THREADS\"] = \"1\"\n\n\ndef task_generator_folder(root: Path, text_extension: str):\n    files = list(tqdm(Path(root).rglob(\"*.npy\"), desc=f\"Loading {root}\"))\n    files = sorted(files)\n\n    grouped_files = defaultdict(list)\n    for file in tqdm(files, desc=f\"Grouping {root}\"):\n        p = str(file.parent)\n        speaker = file.parent.name\n\n        try:\n            if isinstance(text_extension, str):\n                texts = [file.with_suffix(text_extension).read_text(encoding=\"utf-8\")]\n            else:\n                texts = [\n                    file.with_suffix(ext).read_text(encoding=\"utf-8\")\n                    for ext in text_extension\n                ]\n        except Exception as e:\n            logger.error(f\"Failed to read text {file}: {e}\")\n            continue\n\n        grouped_files[p].append((speaker, file, texts))\n\n    logger.info(\n        f\"Found {len(grouped_files)} groups in {root}, {list(grouped_files.keys())[:5]}...\"\n    )\n\n    for i in grouped_files.values():\n        subset = [(f, t) for _, f, t in i]\n        yield i[0][0], subset, \"folder\"\n\n\ndef task_generator_filelist(filelist):\n    grouped_files = defaultdict(list)\n    for filename, speaker, _, text in load_filelist(filelist):\n        grouped_files[speaker].append((Path(filename), [text]))\n\n    logger.info(f\"Found {len(grouped_files)} groups in {filelist}\")\n    for speaker, values in grouped_files.items():\n        yield speaker, values, \"filelist\"\n\n\ndef run_task(task):\n    name, subset, source = task\n\n    # Parse the files\n    sentences = []\n    for file, texts in subset:\n        np_file = file.with_suffix(\".npy\")\n        if np_file.exists() is False:\n            logger.warning(f\"Can't find {np_file}\")\n            continue\n\n        new_texts = []\n\n        for text in texts:\n            # Simple cleaning: replace { xxx } and < xxx > with space\n            text = re.sub(r\"\\{.*?\\}\", \" \", text)\n            text = re.sub(r\"<.*?>\", \" \", text)\n            text = re.sub(r\"\\s+\", \" \", text)\n            new_texts.append(text)\n\n        try:\n            semantics = np.load(np_file)\n        except Exception as e:\n            logger.error(f\"Failed to parse {file}: {e}\")\n            continue\n\n        if isinstance(semantics, np.ndarray):\n            semantics = semantics.tolist()\n\n        sentences.append(\n            Sentence(\n                texts=new_texts,\n                semantics=[Semantics(values=s) for s in semantics],\n            )\n        )\n\n    # Pack the sentences\n    return pack_pb_stream(\n        TextData(\n            source=source,\n            name=name,\n            sentences=sentences,\n        )\n    )\n\n\n@click.command()\n@click.option(\n    \"--input\",\n    type=click.Path(path_type=Path),\n    required=True,\n    help=\"A folder containing the dataset or a filelist\",\n    multiple=True,\n)\n@click.option(\n    \"--output\", type=click.Path(path_type=Path), default=\"data/quantized-dataset-ft\"\n)\n@click.option(\"--num-workers\", type=int, default=16)\n@click.option(\"--text-extension\", type=str, default=[\".txt\"], multiple=True)\n@click.option(\n    \"--shard-size\", type=int, default=10, help=\"The maximum size of each shard in mb\"\n)\ndef main(input, output, num_workers, text_extension, shard_size):\n    generator_fns = []\n\n    for f in input:\n        assert f.exists(), f\"{f} not found\"\n\n        if f.is_dir():\n            generator_fn = task_generator_folder(f, text_extension)\n        else:\n            generator_fn = task_generator_filelist(f)\n\n        generator_fns.append(generator_fn)\n\n    generator_fn = itertools.chain(*generator_fns)\n    output.mkdir(parents=True, exist_ok=True)\n\n    dataset_fp = None\n    tar_idx = 0\n    written_size = 0\n\n    with Pool(num_workers) as p:\n        for result in tqdm(p.imap_unordered(run_task, generator_fn)):\n            if dataset_fp is None:\n                dataset_fp = open(Path(output) / f\"{tar_idx:08d}.protos\", \"wb\")\n\n            dataset_fp.write(result)\n            written_size += len(result)\n\n            if written_size > shard_size * 1024 * 1024:\n                logger.info(f\"Finished writing {tar_idx} shards to {output}\")\n                dataset_fp.close()\n                dataset_fp = None\n                written_size = 0\n                tar_idx += 1\n\n    if dataset_fp is not None:\n        dataset_fp.close()\n\n    logger.info(f\"Finished writing {tar_idx + 1} shards to {output}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/llama/eval_in_context.py",
    "content": "import pyrootutils\nimport torch\nimport torch.nn.functional as F\nfrom matplotlib import pyplot as plt\nfrom transformers import AutoTokenizer\n\n# register eval resolver and root\npyrootutils.setup_root(__file__, indicator=\".project-root\", pythonpath=True)\n\nfrom torch.utils.data import DataLoader\n\nfrom fish_speech.datasets.semantic import AutoAugTextDataset, TextDataCollator\nfrom tools.llama.generate import load_model\n\n\ndef smooth(\n    scalars: list[float], weight: float\n) -> list[float]:  # Weight between 0 and 1\n    last = scalars[0]  # First value in the plot (first timestep)\n    smoothed = list()\n    for point in scalars:\n        smoothed_val = last * weight + (1 - weight) * point  # Calculate smoothed value\n        smoothed.append(smoothed_val)  # Save it\n        last = smoothed_val  # Anchor the last smoothed value\n\n    return smoothed\n\n\n@torch.inference_mode()\ndef analyze_one_model(loader, config, weight, max_length):\n    device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model = load_model(\n        config,\n        weight,\n        device,\n        torch.bfloat16,\n        max_length,\n        compile=False,\n    )[0]\n\n    current_step = 0\n    model.eval()\n\n    semantic_loss_sum = torch.zeros(\n        max_length,\n        dtype=torch.float32,\n        device=device,\n    )\n    counter = torch.zeros(\n        max_length,\n        dtype=torch.long,\n        device=device,\n    )\n\n    for batch in loader:\n        batch = {k: v.to(device) for k, v in batch.items()}\n\n        labels = batch[\"labels\"]\n        outputs = model(\n            inp=batch[\"inputs\"],\n            key_padding_mask=batch[\"attention_masks\"],\n        )\n\n        token_logits = outputs.token_logits\n        codebook_logits = outputs.codebook_logits\n\n        # Generate labels\n        base_loss = F.cross_entropy(\n            token_logits.reshape(-1, token_logits.size(-1)),\n            labels[:, 0].reshape(-1),\n            ignore_index=-100,\n            reduction=\"none\",\n        )\n\n        codebook_labels = labels[:, 1 : 1 + model.config.num_codebooks].mT\n        semantic_loss = F.cross_entropy(\n            codebook_logits.reshape(-1, codebook_logits.size(-1)),\n            codebook_labels.reshape(-1),\n            ignore_index=-100,\n            reduction=\"none\",\n        )\n\n        base_loss = base_loss.reshape(labels[:, 0].shape)\n        semantic_loss = semantic_loss.reshape(codebook_labels.shape)\n\n        semantic_loss_frame = semantic_loss.mean(-1)\n        pad_pos = codebook_labels.sum(-1) == -100 * model.config.num_codebooks\n\n        for loss_sample, pad in zip(semantic_loss_frame, pad_pos):\n            semantic_loss_sum[~pad] += loss_sample[~pad]\n            counter[~pad] += 1\n\n        current_step += 1\n        if current_step == 10:\n            break\n\n    semantic_loss = semantic_loss.cpu()\n    counter = counter.cpu()\n    xs, ys = [], []\n\n    for i, (loss, count) in enumerate(zip(semantic_loss_sum, counter)):\n        if count > 0:\n            xs.append(i)\n            ys.append((loss / count).item())  # for better loss visualization\n\n    smoothed_ys = smooth(ys, 0.95)\n\n    # Unload model\n    del model\n    torch.cuda.empty_cache()\n\n    return xs, ys, smoothed_ys\n\n\ndef main():\n    tokenizer = AutoTokenizer.from_pretrained(\"fishaudio/fish-speech-1\")\n    max_length = 4096\n\n    ds = AutoAugTextDataset(\n        [\"data/protos/sft/云天河\"],\n        tokenizer=tokenizer,\n        use_speaker=False,\n        interactive_prob=1.0,\n        max_length=max_length,\n    )\n\n    loader = DataLoader(\n        ds,\n        batch_size=8,\n        collate_fn=TextDataCollator(tokenizer, max_length=max_length),\n        num_workers=0,\n        shuffle=False,\n    )\n\n    plt.figure(figsize=(10, 5), dpi=200)\n\n    plt.xlabel(\"Frame\")\n    plt.ylabel(\"Loss\")\n    plt.yscale(\"log\")\n    plt.title(\"Semantic Loss\")\n    plt.grid(which=\"both\", axis=\"both\")\n    plt.xlim(0, max_length)\n\n    tests = [\n        (\n            \"pertrain-medium\",\n            \"dual_ar_2_codebook_medium\",\n            \"checkpoints/text2semantic-pretrain-medium-2k-v1.pth\",\n        ),\n        (\n            \"sft-medium\",\n            \"dual_ar_2_codebook_medium\",\n            \"checkpoints/text2semantic-sft-medium-v1.1-4k.pth\",\n        ),\n        (\n            \"sft-large\",\n            \"dual_ar_2_codebook_large\",\n            \"checkpoints/text2semantic-sft-large-v1.1-4k.pth\",\n        ),\n    ]\n\n    for name, config, weight in tests:\n        xs, _, smoothed_ys = analyze_one_model(loader, config, weight, max_length)\n        plt.plot(xs, smoothed_ys, label=name)\n\n    plt.legend()\n    plt.savefig(\"semantic_loss.png\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/llama/generate.py",
    "content": "import os\nimport queue\nimport threading\nimport time\nfrom contextlib import nullcontext\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Literal, Optional, Tuple, Union\n\nimport click\nimport hydra\nimport numpy as np\nimport torch\nimport torch._dynamo.config\nimport torch._inductor.config\nfrom loguru import logger\nfrom tqdm import tqdm\nfrom transformers import AutoTokenizer\n\nfrom fish_speech.conversation import (\n    CODEBOOK_PAD_TOKEN_ID,\n    Conversation,\n    Message,\n    TextPart,\n    VQPart,\n)\nfrom fish_speech.models.text2semantic.llama import BaseModelArgs\nfrom fish_speech.text import clean_text, split_text\nfrom fish_speech.tokenizer import IM_END_TOKEN, FishTokenizer\n\nos.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"\ntorch._inductor.config.coordinate_descent_tuning = True\ntorch._inductor.config.triton.unique_kernel_names = True\n\nif hasattr(torch._inductor.config, \"fx_graph_cache\"):\n    # Experimental feature to reduce compilation times, will be on by default in future\n    torch._inductor.config.fx_graph_cache = True\n\n\nfrom torch.nn.attention import SDPBackend, sdpa_kernel\n\nfrom fish_speech.models.text2semantic.llama import (\n    BaseTransformer,\n    DualARTransformer,\n    NaiveTransformer,\n)\n\n\ndef multinomial_sample_one_no_sync(\n    probs_sort,\n):  # Does multinomial sampling without a cuda synchronization\n    q = torch.empty_like(probs_sort).exponential_(1)\n    return torch.argmax(probs_sort / q, dim=-1, keepdim=True).to(dtype=torch.int)\n\n\ndef logits_to_probs(\n    logits,\n    previous_tokens: Optional[torch.Tensor] = None,\n    temperature: torch.Tensor = 1.0,\n    top_p: torch.Tensor = 1.0,\n    repetition_penalty: torch.Tensor = 1.0,\n) -> torch.Tensor:\n    # Apply repetition penalty\n    if previous_tokens is not None:\n        previous_tokens = previous_tokens.long()\n        score = torch.gather(logits, dim=0, index=previous_tokens)\n        score = torch.where(\n            score < 0, score * repetition_penalty, score / repetition_penalty\n        )\n        logits.scatter_(dim=0, index=previous_tokens, src=score)\n\n    # Apply top-p sampling\n    sorted_logits, sorted_indices = torch.sort(logits, descending=True)\n    cum_probs = torch.cumsum(torch.nn.functional.softmax(sorted_logits, dim=-1), dim=-1)\n    sorted_indices_to_remove = cum_probs > top_p\n    sorted_indices_to_remove[0] = False  # keep at least one option\n    indices_to_remove = sorted_indices_to_remove.scatter(\n        dim=0, index=sorted_indices, src=sorted_indices_to_remove\n    )\n    logits = logits.masked_fill(indices_to_remove, -float(\"Inf\"))\n\n    logits = logits / max(temperature, 1e-5)\n\n    probs = torch.nn.functional.softmax(logits, dim=-1)\n    return probs\n\n\ndef multinomial_sample_one_no_sync_agent(\n    probs_sort,\n):  # Does multinomial sampling without a cuda synchronization\n    q = torch.empty_like(probs_sort).exponential_(1)\n    return torch.argmax(probs_sort / q, dim=-1, keepdim=True).to(dtype=torch.int)\n\n\ndef logits_to_probs_agent(\n    logits,\n    previous_tokens: Optional[torch.Tensor] = None,\n    temperature: torch.Tensor = 1.0,\n    top_p: torch.Tensor = 1.0,\n    repetition_penalty: torch.Tensor = 1.0,\n) -> torch.Tensor:\n    # Apply repetition penalty\n    if previous_tokens is not None:\n        previous_tokens = previous_tokens.long()\n        score = torch.gather(logits, dim=-1, index=previous_tokens)\n        score = torch.where(\n            score < 0, score * repetition_penalty, score / repetition_penalty\n        )\n        logits.scatter_(dim=-1, index=previous_tokens, src=score)\n\n    # Apply top-p sampling\n    sorted_logits, sorted_indices = torch.sort(logits, descending=True)\n    cum_probs = torch.cumsum(torch.nn.functional.softmax(sorted_logits, dim=-1), dim=-1)\n    sorted_indices_to_remove = cum_probs > top_p\n    sorted_indices_to_remove[..., 0] = False  # keep at least one option\n    indices_to_remove = sorted_indices_to_remove.scatter(\n        dim=-1, index=sorted_indices, src=sorted_indices_to_remove\n    )\n    logits = logits.masked_fill(indices_to_remove, -float(\"Inf\"))\n\n    logits = logits / max(temperature, 1e-5)\n\n    probs = torch.nn.functional.softmax(logits, dim=-1)\n    return probs\n\n\ndef sample(\n    logits,\n    previous_tokens: Optional[torch.Tensor] = None,\n    **sampling_kwargs,\n) -> Tuple[torch.Tensor, torch.Tensor]:\n    probs = logits_to_probs(\n        logits=logits[0, -1], previous_tokens=previous_tokens, **sampling_kwargs\n    )\n    idx_next = multinomial_sample_one_no_sync(probs)\n    return idx_next, probs\n\n\ndef sample_agent(\n    logits,\n    previous_tokens: Optional[torch.Tensor] = None,\n    **sampling_kwargs,\n) -> Tuple[torch.Tensor, torch.Tensor]:\n    probs = logits_to_probs_agent(\n        logits=logits[:, -1], previous_tokens=previous_tokens, **sampling_kwargs\n    )\n    idx_next = multinomial_sample_one_no_sync_agent(probs)\n    return idx_next, probs\n\n\ndef decode_one_token_ar_agent(\n    model: DualARTransformer,\n    x: torch.Tensor,\n    input_pos: torch.Tensor,\n    semantic_ids: list,\n    previous_tokens: torch.Tensor = None,\n    **sampling_kwargs,\n) -> torch.Tensor:\n    # print(x, input_pos)\n    x = model.forward_generate(x, input_pos)\n    logits = x.logits  # [:, -1:]\n    hidden_states = x.hidden_states  # [:, -1:]\n\n    sampling_kwargs_main = sampling_kwargs.copy()\n    sampling_kwargs_main[\"temperature\"] = 0.1\n    sampling_kwargs_main[\"top_p\"] = 0.1\n    sampling_kwargs_main[\"repetition_penalty\"] = 1.0\n\n    codebooks = [\n        sample_agent(\n            logits,\n            previous_tokens=None,  # Disable repetition penalty for the token codebook\n            **sampling_kwargs_main,\n        )[0]\n    ]\n\n    # Cleanup the cache\n    for layer in model.fast_layers:\n        layer.attention.kv_cache.k_cache.fill_(0)\n        layer.attention.kv_cache.v_cache.fill_(0)\n\n    for codebook_idx in range(model.config.num_codebooks):\n        input_pos = torch.tensor(\n            [codebook_idx], device=hidden_states.device, dtype=torch.long\n        )\n        logits = model.forward_generate_fast(hidden_states, input_pos)\n        a = sample_agent(\n            logits,\n            previous_tokens=(\n                previous_tokens[:, codebook_idx + 1]\n                if previous_tokens is not None\n                else None\n            ),\n            **sampling_kwargs,\n        )[0]\n        hidden_states = model.fast_embeddings(a)\n        codebooks.append(a)\n\n    codebooks = torch.stack(codebooks, dim=1)\n    semantic_ids_tensor = torch.tensor(semantic_ids, device=codebooks.device)\n    codebooks[:, 1:, :] = torch.masked_fill(\n        codebooks[:, 1:, :],\n        ~torch.isin(codebooks[:, :1, :], semantic_ids_tensor),\n        CODEBOOK_PAD_TOKEN_ID,\n    )\n\n    return codebooks\n\n\ndef decode_one_token_naive_agent(\n    model: NaiveTransformer,\n    x: torch.Tensor,\n    input_pos: torch.Tensor,\n    semantic_ids: list,\n    previous_tokens: torch.Tensor = None,\n    **sampling_kwargs,\n) -> torch.Tensor:\n    x = model.forward_generate(x, input_pos)\n\n    codebooks = [\n        sample(\n            x.token_logits,\n            previous_tokens=None,  # Disable repetition penalty for the token codebook\n            **sampling_kwargs,\n        )[0]\n    ]\n\n    for i in range(model.config.num_codebooks):\n        codebooks.append(\n            sample_agent(\n                x.codebook_logits[:, :, i],\n                previous_tokens=(\n                    previous_tokens[:, i + 1] if previous_tokens is not None else None\n                ),\n                **sampling_kwargs,\n            )[0]\n        )\n\n    codebooks = torch.stack(codebooks, dim=1)\n    semantic_ids_tensor = torch.tensor(semantic_ids, device=codebooks.device)\n    codebooks[:, 1:, :] = torch.masked_fill(\n        codebooks[:, 1:, :],\n        ~torch.isin(codebooks[:, :1, :], semantic_ids_tensor),\n        CODEBOOK_PAD_TOKEN_ID,\n    )\n\n    return codebooks\n\n\ndef decode_one_token_ar(\n    model: DualARTransformer,\n    x: torch.Tensor,\n    input_pos: torch.Tensor,\n    semantic_ids: list,\n    previous_tokens: torch.Tensor = None,\n    **sampling_kwargs,\n) -> torch.Tensor:\n    x = model.forward_generate(x, input_pos)\n\n    sampling_kwargs_main = sampling_kwargs.copy()\n    # sampling_kwargs_main[\"temperature\"] = 0.1\n    # sampling_kwargs_main[\"top_p\"] = 0.1\n    # sampling_kwargs_main[\"repetition_penalty\"] = 1.0\n\n    codebooks = [\n        sample(\n            x.logits,\n            previous_tokens=(\n                previous_tokens[0] if previous_tokens is not None else None\n            ),  # Disable repetition penalty for the token codebook\n            **sampling_kwargs_main,\n        )[0]\n    ]\n\n    hidden_states = x.hidden_states\n\n    # Cleanup the cache\n    for layer in model.fast_layers:\n        layer.attention.kv_cache.k_cache.fill_(0)\n        layer.attention.kv_cache.v_cache.fill_(0)\n\n    input_pos = torch.tensor([0], device=hidden_states.device, dtype=torch.long)\n    model.forward_generate_fast(hidden_states, input_pos)\n    a = codebooks[0] - model.tokenizer.semantic_begin_id\n    a[a < 0] = 0\n    hidden_states = model.fast_embeddings(a)\n    codebooks.append(a)\n\n    for codebook_idx in range(1, model.config.num_codebooks):\n        input_pos = torch.tensor(\n            [codebook_idx], device=hidden_states.device, dtype=torch.long\n        )\n        logits = model.forward_generate_fast(hidden_states, input_pos)\n        a = sample(\n            logits,\n            previous_tokens=(\n                previous_tokens[codebook_idx + 1]\n                if previous_tokens is not None\n                else None\n            ),\n            **sampling_kwargs,\n        )[0]\n        hidden_states = model.fast_embeddings(a)\n        codebooks.append(a)\n\n    codebooks = torch.stack(codebooks, dim=0)\n    # semantic_ids_tensor = torch.tensor(semantic_ids, device=codebooks.device)\n    # codebooks[1:, :] = torch.masked_fill(\n    #     codebooks[1:, :], ~torch.isin(codebooks[:1, :], semantic_ids_tensor), CODEBOOK_PAD_TOKEN_ID\n    # )\n\n    # print(codebooks)\n    return codebooks\n\n\ndef decode_one_token_naive(\n    model: NaiveTransformer,\n    x: torch.Tensor,\n    input_pos: torch.Tensor,\n    previous_tokens: torch.Tensor = None,\n    **sampling_kwargs,\n) -> torch.Tensor:\n    x = model.forward_generate(x, input_pos)\n\n    sampling_kwargs_main = sampling_kwargs.copy()\n    sampling_kwargs_main[\"temperature\"] = 0.1\n    sampling_kwargs_main[\"top_p\"] = 0.1\n    sampling_kwargs_main[\"repetition_penalty\"] = 1.0\n\n    codebooks = [\n        sample(\n            x.logits,\n            previous_tokens=None,  # Disable repetition penalty for the token codebook\n            **sampling_kwargs_main,\n        )[0]\n    ]\n\n    for i in range(model.config.num_codebooks):\n        codebooks.append(\n            sample(\n                x.codebook_logits[:, :, i],\n                previous_tokens=(\n                    previous_tokens[i + 1] if previous_tokens is not None else None\n                ),\n                **sampling_kwargs,\n            )[0]\n        )\n\n    return torch.stack(codebooks, dim=0)\n\n\ndef decode_n_tokens(\n    model: NaiveTransformer,\n    cur_token: torch.Tensor,\n    input_pos: torch.Tensor,\n    num_new_tokens: int,\n    semantic_ids: list,\n    decode_one_token=decode_one_token_naive,\n    **sampling_kwargs,\n):\n    previous_tokens = torch.zeros(\n        (model.config.num_codebooks + 1, model.config.max_seq_len),\n        dtype=torch.int,\n        device=cur_token.device,\n    )\n\n    for i in tqdm(range(num_new_tokens)):\n        # We need to get windowed repeat penalty\n        win_size = 16\n        if i < win_size:\n            window = previous_tokens[:, :win_size]\n        else:\n            window = previous_tokens[:, i - win_size : i]\n\n        with (\n            torch.backends.cuda.sdp_kernel(\n                enable_flash=False, enable_mem_efficient=False, enable_math=True\n            )\n            if torch.cuda.is_available()\n            else nullcontext()\n        ):  # Actually better for Inductor to codegen attention here\n            next_token = decode_one_token(\n                model=model,\n                x=cur_token,\n                input_pos=input_pos,\n                previous_tokens=window,\n                semantic_ids=semantic_ids,\n                **sampling_kwargs,\n            )\n\n        input_pos += 1\n        cur_token = next_token.view(1, model.config.num_codebooks + 1, -1)\n        previous_tokens[:, i : i + 1] = next_token.view(\n            model.config.num_codebooks + 1, -1\n        )\n\n        if cur_token[0, 0, -1] == model.tokenizer.get_token_id(IM_END_TOKEN):\n            break\n\n    return previous_tokens[:, : i + 1]\n\n\n@torch.no_grad()\n@torch.inference_mode()\ndef generate(\n    *,\n    model: NaiveTransformer,\n    prompt: torch.Tensor,\n    max_new_tokens: int,\n    decode_one_token=decode_one_token_naive,\n    **sampling_kwargs,\n) -> torch.Tensor:\n    \"\"\"\n    Takes a conditioning sequence (prompt) as input and continues to generate as many tokens as requested.\n    \"\"\"\n\n    # create an empty tensor of the expected final shape and fill in the current tokens\n    T = prompt.size(1)\n    # semantic_id = model.tokenizer.convert_tokens_to_ids(\"<|semantic|>\")\n    semantic_ids = [\n        model.tokenizer.get_token_id(f\"<|semantic:{i}|>\") for i in range(1024)\n    ]\n\n    if max_new_tokens:\n        if T + max_new_tokens > model.config.max_seq_len:\n            max_new_tokens = model.config.max_seq_len - T\n            logger.info(f\"Truncating max_new_tokens to {max_new_tokens}\")\n\n        T_new = T + max_new_tokens\n    else:\n        T_new = model.config.max_seq_len\n        max_new_tokens = T_new - T\n\n    device, dtype = prompt.device, prompt.dtype\n\n    codebook_dim = 1 + model.config.num_codebooks\n    # create an empty tensor of the expected final shape and fill in the current tokens\n    empty = torch.empty(\n        (codebook_dim, model.config.max_seq_len), dtype=dtype, device=device\n    )\n    empty[:, :T] = prompt\n    seq = empty\n    input_pos = torch.arange(0, T, device=device)\n\n    # Use non-accelerated version for now, to avoid compilation overhead\n    prefill_decode = (\n        decode_one_token_naive\n        if isinstance(model, NaiveTransformer)\n        else decode_one_token_ar\n    )\n\n    next_token = prefill_decode(\n        model,\n        prompt.view(1, codebook_dim, -1),\n        input_pos,\n        semantic_ids=semantic_ids,\n        **sampling_kwargs,\n    )\n    seq[:, T : T + 1] = next_token\n\n    input_pos = torch.tensor([T], device=device, dtype=torch.int)\n    x = decode_n_tokens(\n        model,\n        next_token.view(1, codebook_dim, -1),\n        input_pos,\n        max_new_tokens - 1,\n        decode_one_token=decode_one_token,\n        semantic_ids=semantic_ids,\n        **sampling_kwargs,\n    )\n    # x = torch.cat(generated_tokens, dim=1)\n    seq = seq[:, : T + 1 + x.size(1)]\n    seq[:, T + 1 :] = x\n\n    return seq\n\n\ndef decode_n_tokens_agent(\n    model: NaiveTransformer,\n    cur_token: torch.Tensor,\n    input_pos: torch.Tensor,\n    num_new_tokens: int,\n    semantic_ids: list,\n    im_end_id: int = 4,\n    decode_one_token=decode_one_token_naive_agent,\n    early_stop_threshold: float = 0.6,\n    **sampling_kwargs,\n):\n    batch_size = cur_token.size(0)\n    previous_tokens = torch.zeros(\n        (batch_size, model.config.num_codebooks + 1, model.config.max_seq_len),\n        dtype=torch.int,\n        device=cur_token.device,\n    )\n    finished = torch.zeros(batch_size, dtype=torch.bool, device=cur_token.device)\n    finished = finished | (cur_token[:, 0, -1] == im_end_id)\n    start_time = time.time()\n\n    for i in tqdm(range(num_new_tokens), desc=\"Decoding: \", total=num_new_tokens):\n        # We need to get windowed repeat penalty\n        win_size = 16\n        if i < win_size:\n            window = previous_tokens[:, :, :win_size]\n        else:\n            window = previous_tokens[:, :, i - win_size : i]\n\n        with sdpa_kernel(\n            SDPBackend.MATH\n        ):  # Actually better for Inductor to codegen attention here\n            next_token = decode_one_token(\n                model=model,\n                x=cur_token,\n                input_pos=input_pos,\n                previous_tokens=window,\n                semantic_ids=semantic_ids,\n                **sampling_kwargs,\n            )\n\n        input_pos += 1\n        cur_token = next_token.view(batch_size, model.config.num_codebooks + 1, -1)\n        previous_tokens[:, :, i : i + 1] = next_token.view(\n            batch_size, model.config.num_codebooks + 1, -1\n        )\n\n        yield cur_token.cpu()\n\n        finished = finished | (cur_token[:, 0, -1] == im_end_id)\n        if finished.all() or (\n            0 < early_stop_threshold < 1\n            and finished.sum() >= round(batch_size * early_stop_threshold)\n        ):\n            break\n\n    total_time = time.time() - start_time\n    generated_tokens = i + 1\n    tokens_per_second = (generated_tokens / total_time) * batch_size\n    logger.info(\n        f\"Decoded {generated_tokens} x {batch_size} tokens in {total_time:.2f}s ({tokens_per_second:.2f} tokens/s)\"\n    )\n\n\n@torch.no_grad()\n@torch.inference_mode()\ndef generate_agent(\n    *,\n    model: BaseTransformer,\n    prompt: torch.Tensor,\n    max_new_tokens: int,\n    semantic_ids: list,\n    im_end_id: int = 4,\n    decode_one_token=decode_one_token_naive_agent,\n    num_samples: int = 1,\n    early_stop_threshold: float = 0.6,\n    **sampling_kwargs,\n):\n    \"\"\"\n    Takes a conditioning sequence (prompt) as input and continues to generate as many tokens as requested.\n    \"\"\"\n\n    # create an empty tensor of the expected final shape and fill in the current tokens\n    T = prompt.size(1)\n    prompt = prompt[None].repeat(num_samples, 1, 1)\n\n    if T >= model.config.max_seq_len:\n        raise ValueError(\n            f\"Input sequence length {T} exceeds max_seq_len {model.config.max_seq_len}\"\n        )\n\n    if max_new_tokens:\n        if T + max_new_tokens > model.config.max_seq_len:\n            max_new_tokens = model.config.max_seq_len - T\n            logger.info(f\"Truncating max_new_tokens to {max_new_tokens}\")\n\n        T_new = T + max_new_tokens\n    else:\n        T_new = model.config.max_seq_len\n        max_new_tokens = T_new - T\n\n    device, dtype = prompt.device, prompt.dtype\n\n    codebook_dim = 1 + model.config.num_codebooks\n    input_pos = torch.arange(0, T, device=device)\n\n    # Use non-accelerated version for now, to avoid compilation overhead\n    prefill_decode = (\n        decode_one_token_naive_agent\n        if isinstance(model, NaiveTransformer)\n        else decode_one_token_ar_agent\n    )\n    next_token = prefill_decode(\n        model,\n        prompt,\n        input_pos,\n        semantic_ids=semantic_ids,\n        **sampling_kwargs,\n    ).view(num_samples, codebook_dim, -1)\n    yield next_token.cpu()\n\n    input_pos = torch.tensor([T], device=device, dtype=torch.int)\n\n    yield from decode_n_tokens_agent(\n        model,\n        next_token,\n        input_pos,\n        max_new_tokens - 1,\n        im_end_id=im_end_id,\n        semantic_ids=semantic_ids,\n        decode_one_token=decode_one_token,\n        early_stop_threshold=early_stop_threshold,\n        **sampling_kwargs,\n    )\n\n\ndef encode_tokens(\n    tokenizer,\n    string,\n    device=\"cuda\",\n    prompt_tokens=None,\n    num_codebooks=4,\n):\n    string = clean_text(string)\n\n    messages = []\n    messages.append(\n        Message(\n            role=\"user\",\n            parts=[TextPart(text=string)],\n            cal_loss=False,\n        )\n    )\n\n    if prompt_tokens is not None:\n        if prompt_tokens.ndim == 3:\n            assert (\n                prompt_tokens.shape[0] == 1\n            ), \"3D prompt tokens should have shape (1, num_codebooks, seq_len)\"\n            prompt_tokens = prompt_tokens[0]\n\n        assert prompt_tokens.ndim == 2, \"Prompt tokens should be 2D tensor\"\n\n        if prompt_tokens.shape[0] > num_codebooks:\n            logger.warning(\n                f\"Prompt tokens shape {prompt_tokens.shape} is larger than num_codebooks {num_codebooks}, getting first {num_codebooks} codebooks\"\n            )\n            prompt_tokens = prompt_tokens[:num_codebooks]\n\n        vq_part = VQPart(codes=prompt_tokens.to(device))\n\n        messages.append(\n            Message(\n                role=\"assistant\",\n                parts=[TextPart(text=\"<|voice|>\"), vq_part],\n                cal_loss=False,\n            )\n        )\n    else:\n        messages.append(\n            Message(\n                role=\"assistant\",\n                parts=[TextPart(text=\"<|voice|>\")],\n                cal_loss=False,\n                add_im_end=False,\n            )\n        )\n\n    conversation = Conversation(messages=messages)\n    # conversation.visualize(tokenizer)\n    encoded = conversation.encode_for_inference(\n        tokenizer=tokenizer,\n        num_codebooks=num_codebooks,\n    )\n\n    return encoded.to(device)\n\n\ndef load_model(checkpoint_path, device, precision, compile=False, is_agent=False):\n    model: Union[NaiveTransformer, DualARTransformer] = BaseTransformer.from_pretrained(\n        checkpoint_path, load_weights=True, is_agent=is_agent\n    )\n\n    model = model.to(device=device, dtype=precision)\n    logger.info(f\"Restored model from checkpoint\")\n\n    if isinstance(model, DualARTransformer):\n        decode_one_token = (\n            decode_one_token_ar_agent if is_agent else decode_one_token_ar\n        )\n        logger.info(\"Using DualARTransformer\")\n    else:\n        decode_one_token = (\n            decode_one_token_naive_agent if is_agent else decode_one_token_naive\n        )\n        logger.info(\"Using NaiveTransformer\")\n\n    if compile:\n        logger.info(\"Compiling function...\")\n        decode_one_token = torch.compile(\n            decode_one_token,\n            fullgraph=True,\n            backend=\"inductor\" if torch.cuda.is_available() else \"aot_eager\",\n            mode=\"reduce-overhead\" if torch.cuda.is_available() else None,\n        )\n\n    return model.eval(), decode_one_token\n\n\n@dataclass\nclass GenerateResponse:\n    action: Literal[\"sample\", \"next\"]\n    codes: Optional[torch.Tensor] = None\n    text: Optional[str] = None\n\n\ndef generate_long(\n    *,\n    model,\n    device: str | torch.device,\n    decode_one_token: callable,\n    text: str,\n    num_samples: int = 1,\n    max_new_tokens: int = 0,\n    top_p: int = 0.7,\n    repetition_penalty: float = 1.5,\n    temperature: float = 0.7,\n    compile: bool = False,\n    iterative_prompt: bool = True,\n    max_length: int = 2048,\n    chunk_length: int = 150,\n    prompt_text: Optional[str | list[str]] = None,\n    prompt_tokens: Optional[torch.Tensor | list[torch.Tensor]] = None,\n):\n    assert 0 < top_p <= 1, \"top_p must be in (0, 1]\"\n    assert 0 < repetition_penalty < 2, \"repetition_penalty must be in (0, 2)\"\n    assert 0 < temperature < 2, \"temperature must be in (0, 2)\"\n\n    use_prompt = prompt_text is not None and prompt_tokens is not None\n    if use_prompt and isinstance(prompt_text, str):\n        prompt_text = [prompt_text]\n        prompt_tokens = [prompt_tokens]\n\n    assert use_prompt is False or len(prompt_text) == len(\n        prompt_tokens\n    ), \"Prompt text and tokens must have the same length\"\n\n    model_size = sum(p.numel() for p in model.parameters() if p.requires_grad)\n    tokenizer = model.tokenizer\n    im_end_id = tokenizer.get_token_id(\"<|im_end|>\")\n\n    encoded = []\n    texts = split_text(text, chunk_length) if iterative_prompt else [text]\n    encoded_prompts = [\n        Conversation(\n            messages=[\n                Message(\n                    role=\"system\",\n                    parts=[TextPart(text=\"Speak out the provided text.\")],\n                    cal_loss=False,\n                )\n            ]\n        )\n        .encode_for_inference(\n            tokenizer=tokenizer,\n            num_codebooks=model.config.num_codebooks,\n        )\n        .to(device)\n    ]\n\n    if use_prompt:\n        for idx, (t, c) in enumerate(zip(prompt_text, prompt_tokens)):\n            encoded_prompts.append(\n                encode_tokens(\n                    tokenizer,\n                    string=t,\n                    device=device,\n                    prompt_tokens=c,\n                    num_codebooks=model.config.num_codebooks,\n                )\n            )\n\n    for idx, text in enumerate(texts):\n        encoded.append(\n            encode_tokens(\n                tokenizer,\n                string=text,\n                device=device,\n                num_codebooks=model.config.num_codebooks,\n            )\n        )\n        logger.info(f\"Encoded text: {text}\")\n\n    # Move temperature, top_p, repetition_penalty to device\n    # This is important so that changing params doesn't trigger recompile\n    temperature = torch.tensor(temperature, device=device, dtype=torch.float)\n    top_p = torch.tensor(top_p, device=device, dtype=torch.float)\n    repetition_penalty = torch.tensor(\n        repetition_penalty, device=device, dtype=torch.float\n    )\n\n    for sample_idx in range(num_samples):\n        if torch.cuda.is_available():\n            torch.cuda.synchronize()\n\n        global_encoded = []\n        seg_idx = 0\n\n        while seg_idx < len(encoded):\n            logger.info(\n                f\"Generating sentence {seg_idx + 1}/{len(encoded)} of sample {sample_idx + 1}/{num_samples}\"\n            )\n\n            seg = encoded[seg_idx]\n            global_encoded.append(seg)\n\n            lengths = reversed([seg.size(1) for seg in global_encoded])\n\n            # Pick last 2000 tokens\n            count = 0\n            for i, length in enumerate(lengths):\n                count += length\n                if count + length > max_length - 1024 - sum(\n                    t.shape[1] for t in encoded_prompts\n                ):\n                    break\n\n            if i != 0 and i % 2 == 0:\n                i -= 1\n\n            # Rotate the list, always make sure first segment is included to avoid drift\n            if i < len(global_encoded) - 2:\n                partial_encoded = global_encoded[:2] + global_encoded[-i:]\n            else:\n                partial_encoded = global_encoded\n\n            if use_prompt:\n                partial_encoded = encoded_prompts + partial_encoded\n\n            cat_encoded = torch.cat(partial_encoded, dim=1)\n            prompt_length = cat_encoded.size(1)\n\n            t0 = time.perf_counter()\n            y = generate(\n                model=model,\n                prompt=cat_encoded,\n                max_new_tokens=max_new_tokens,\n                decode_one_token=decode_one_token,\n                temperature=temperature,\n                top_p=top_p,\n                repetition_penalty=repetition_penalty,\n            )\n\n            if sample_idx == 0 and seg_idx == 0 and compile:\n                logger.info(f\"Compilation time: {time.perf_counter() - t0:.2f} seconds\")\n\n            if torch.cuda.is_available():\n                torch.cuda.synchronize()\n\n            t = time.perf_counter() - t0\n\n            tokens_generated = y.size(1) - prompt_length\n            tokens_sec = tokens_generated / t\n            logger.info(\n                f\"Generated {tokens_generated} tokens in {t:.02f} seconds, {tokens_sec:.02f} tokens/sec\"\n            )\n            logger.info(\n                f\"Bandwidth achieved: {model_size * tokens_sec / 1e9:.02f} GB/s\"\n            )\n\n            if torch.cuda.is_available():\n                logger.info(\n                    f\"GPU Memory used: {torch.cuda.max_memory_reserved() / 1e9:.02f} GB\"\n                )\n\n            # Put the generated tokens\n            # since there is <im_end>, we remove last token\n            codes = y[1:, prompt_length + 1 :].clone()\n            assert (codes >= 0).all(), f\"Negative code found\"\n\n            decoded = y[:, prompt_length:].clone()\n            # But for global encoding, we should keep the <im_end> token\n\n            global_encoded.append(decoded)\n            assert (codes >= 0).all(), f\"Negative code found: {codes}\"\n            yield GenerateResponse(action=\"sample\", codes=codes, text=texts[seg_idx])\n            seg_idx += 1\n\n        # This indicates the end of the current sample\n        yield GenerateResponse(action=\"next\")\n\n\n@dataclass\nclass WrappedGenerateResponse:\n    status: Literal[\"success\", \"error\"]\n    response: Optional[GenerateResponse | Exception] = None\n\n\n@dataclass\nclass GenerateRequest:\n    request: dict\n    response_queue: queue.Queue\n\n\ndef launch_thread_safe_queue(\n    checkpoint_path,\n    device,\n    precision,\n    compile: bool = False,\n):\n    input_queue = queue.Queue()\n    init_event = threading.Event()\n\n    def worker():\n        model, decode_one_token = load_model(\n            checkpoint_path, device, precision, compile=compile\n        )\n        with torch.device(device):\n            model.setup_caches(\n                max_batch_size=1,\n                max_seq_len=model.config.max_seq_len,\n                dtype=next(model.parameters()).dtype,\n            )\n        init_event.set()\n\n        while True:\n            item: GenerateRequest | None = input_queue.get()\n            if item is None:\n                break\n\n            kwargs = item.request\n            response_queue = item.response_queue\n\n            try:\n                for chunk in generate_long(\n                    model=model, decode_one_token=decode_one_token, **kwargs\n                ):\n                    response_queue.put(\n                        WrappedGenerateResponse(status=\"success\", response=chunk)\n                    )\n            except Exception as e:\n                response_queue.put(WrappedGenerateResponse(status=\"error\", response=e))\n\n    threading.Thread(target=worker, daemon=True).start()\n    init_event.wait()\n\n    return input_queue\n\n\ndef launch_thread_safe_queue_agent(\n    checkpoint_path,\n    device,\n    precision,\n    compile: bool = False,\n):\n    input_queue = queue.Queue()\n    init_event = threading.Event()\n\n    tokenizer = AutoTokenizer.from_pretrained(checkpoint_path)\n    config = BaseModelArgs.from_pretrained(checkpoint_path)\n\n    def worker():\n        model, decode_one_token = load_model(\n            checkpoint_path, device, precision, compile=compile, is_agent=True\n        )\n\n        with torch.device(device):\n            model.setup_caches(\n                max_batch_size=1,\n                max_seq_len=model.config.max_seq_len,\n                dtype=next(model.parameters()).dtype,\n            )\n        init_event.set()\n\n        while True:\n            item: GenerateRequest | None = input_queue.get()\n            if item is None:\n                break\n\n            kwargs = item.request\n            response_queue = item.response_queue\n\n            try:\n                for token in generate_agent(\n                    model=model,\n                    decode_one_token=decode_one_token,\n                    **kwargs,\n                ):\n                    response_queue.put(token)\n\n                response_queue.put(\"stop\")\n            except Exception as e:\n                import traceback\n\n                logger.exception(f\"Error in worker: {traceback.format_exc()}\")\n                response_queue.put(\"error\")\n\n    threading.Thread(target=worker, daemon=True).start()\n    init_event.wait()\n\n    return input_queue, tokenizer, config\n\n\n@click.command()\n@click.option(\n    \"--text\",\n    type=str,\n    default=\"你说的对, 但是原神是一款由米哈游自主研发的开放世界手游.\",\n)\n@click.option(\"--prompt-text\", type=str, default=None, multiple=True)\n@click.option(\n    \"--prompt-tokens\",\n    type=click.Path(path_type=Path, exists=True),\n    default=None,\n    multiple=True,\n)\n@click.option(\"--num-samples\", type=int, default=1)\n@click.option(\"--max-new-tokens\", type=int, default=0)\n@click.option(\"--top-p\", type=float, default=0.7)\n@click.option(\"--repetition-penalty\", type=float, default=1.2)\n@click.option(\"--temperature\", type=float, default=0.7)\n@click.option(\n    \"--checkpoint-path\",\n    type=click.Path(path_type=Path, exists=True),\n    default=\"checkpoints/fish-speech-1.4\",\n)\n@click.option(\"--device\", type=str, default=\"cuda\")\n@click.option(\"--compile/--no-compile\", default=False)\n@click.option(\"--seed\", type=int, default=42)\n@click.option(\"--half/--no-half\", default=False)\n@click.option(\"--iterative-prompt/--no-iterative-prompt\", default=True)\n@click.option(\"--chunk-length\", type=int, default=100)\ndef main(\n    text: str,\n    prompt_text: Optional[list[str]],\n    prompt_tokens: Optional[list[Path]],\n    num_samples: int,\n    max_new_tokens: int,\n    top_p: int,\n    repetition_penalty: float,\n    temperature: float,\n    checkpoint_path: Path,\n    device: str,\n    compile: bool,\n    seed: int,\n    half: bool,\n    iterative_prompt: bool,\n    chunk_length: int,\n) -> None:\n\n    precision = torch.half if half else torch.bfloat16\n\n    if prompt_text is not None and len(prompt_text) != len(prompt_tokens):\n        raise ValueError(\n            f\"Number of prompt text ({len(prompt_text)}) and prompt tokens ({len(prompt_tokens)}) should be the same\"\n        )\n\n    logger.info(\"Loading model ...\")\n    t0 = time.time()\n    model, decode_one_token = load_model(\n        checkpoint_path, device, precision, compile=compile\n    )\n    with torch.device(device):\n        model.setup_caches(\n            max_batch_size=1,\n            max_seq_len=model.config.max_seq_len,\n            dtype=next(model.parameters()).dtype,\n        )\n    if torch.cuda.is_available():\n        torch.cuda.synchronize()\n\n    logger.info(f\"Time to load model: {time.time() - t0:.02f} seconds\")\n\n    if prompt_tokens is not None:\n        prompt_tokens = [torch.from_numpy(np.load(p)).to(device) for p in prompt_tokens]\n\n    torch.manual_seed(seed)\n\n    if torch.cuda.is_available():\n        torch.cuda.manual_seed(seed)\n\n    generator = generate_long(\n        model=model,\n        device=device,\n        decode_one_token=decode_one_token,\n        text=text,\n        num_samples=num_samples,\n        max_new_tokens=max_new_tokens,\n        top_p=top_p,\n        repetition_penalty=repetition_penalty,\n        temperature=temperature,\n        compile=compile,\n        iterative_prompt=iterative_prompt,\n        chunk_length=chunk_length,\n        prompt_text=prompt_text,\n        prompt_tokens=prompt_tokens,\n    )\n\n    idx = 0\n    codes = []\n\n    for response in generator:\n        if response.action == \"sample\":\n            codes.append(response.codes)\n            logger.info(f\"Sampled text: {response.text}\")\n        elif response.action == \"next\":\n            if codes:\n                np.save(f\"codes_{idx}.npy\", torch.cat(codes, dim=1).cpu().numpy())\n                logger.info(f\"Saved codes to codes_{idx}.npy\")\n            logger.info(f\"Next sample\")\n            codes = []\n            idx += 1\n        else:\n            logger.error(f\"Error: {response}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/llama/merge_lora.py",
    "content": "import shutil\nfrom copy import deepcopy\nfrom pathlib import Path\n\nimport click\nimport hydra\nimport torch\nfrom hydra import compose, initialize\nfrom hydra.utils import instantiate\nfrom loguru import logger\n\nfrom fish_speech.models.text2semantic.llama import BaseTransformer\nfrom fish_speech.models.text2semantic.lora import get_merged_state_dict\n\n\n@click.command()\n@click.option(\"--lora-config\", type=str, default=\"r_8_alpha_16\")\n@click.option(\"--base-weight\", type=str, default=\"checkpoints/fish-speech-1.4\")\n@click.option(\"--lora-weight\", type=str, required=True)\n@click.option(\"--output\", type=str, required=True)\ndef merge(lora_config, base_weight, lora_weight, output):\n    output = Path(output)\n    logger.info(\n        f\"Merging {base_weight} and {lora_weight} into {output} with {lora_config}\"\n    )\n\n    with initialize(version_base=\"1.3\", config_path=\"../../fish_speech/configs/lora\"):\n        cfg = compose(config_name=lora_config)\n\n    lora_config = instantiate(cfg)\n    logger.info(f\"Loaded lora model with config {lora_config}\")\n\n    llama_model = BaseTransformer.from_pretrained(\n        path=base_weight,\n        load_weights=True,\n        lora_config=lora_config,\n    )\n    logger.info(f\"Loaded llama model\")\n\n    llama_state_dict = llama_model.state_dict()\n    llama_state_dict = {k: v for k, v in llama_state_dict.items() if \"lora\" not in k}\n    llama_state_dict_copy = deepcopy(llama_state_dict)\n    lora_state_dict = torch.load(lora_weight, map_location=\"cpu\")\n\n    if \"state_dict\" in llama_state_dict:\n        llama_state_dict = llama_state_dict[\"state_dict\"]\n\n    if \"state_dict\" in lora_state_dict:\n        lora_state_dict = lora_state_dict[\"state_dict\"]\n\n    # remove prefix model.\n    if any(k.startswith(\"model.\") for k in llama_state_dict.keys()):\n        llama_state_dict = {\n            k.replace(\"model.\", \"\"): v\n            for k, v in llama_state_dict.items()\n            if k.startswith(\"model.\")\n        }\n    if any(k.startswith(\"model.\") for k in lora_state_dict.keys()):\n        lora_state_dict = {\n            k.replace(\"model.\", \"\"): v\n            for k, v in lora_state_dict.items()\n            if k.startswith(\"model.\")\n        }\n\n    logger.info(f\"Found {len(llama_state_dict)} keys in llama model\")\n    logger.info(f\"Found {len(lora_state_dict)} keys in lora model\")\n\n    merged_state_dict = llama_state_dict | lora_state_dict\n    llama_model.load_state_dict(merged_state_dict, strict=True)\n    logger.info(f\"Merged model loaded\")\n\n    # Trigger eval mode to merge lora\n    llama_model.eval()\n    llama_model.save_pretrained(output, drop_lora=True)\n    logger.info(f\"Saved merged model to {output}, validating\")\n\n    new_state_dict = torch.load(output / \"model.pth\", map_location=\"cpu\")\n    original_keys = set(llama_state_dict_copy.keys())\n    merged_keys = set(new_state_dict.keys())\n\n    assert original_keys == merged_keys, \"Keys should be same\"\n\n    for key in original_keys:\n        diff_l1 = (new_state_dict[key] - llama_state_dict_copy[key]).abs().sum().item()\n        if diff_l1 != 0:\n            break\n    else:\n        logger.error(\"Merged model is same as the original model\")\n        exit(1)\n\n    logger.info(\"Merged model is different from the original model, check passed\")\n\n\nif __name__ == \"__main__\":\n    merge()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/llama/quantize.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\nimport datetime\nimport shutil\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\nimport time\nfrom pathlib import Path\n\nimport click\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom fish_speech.models.text2semantic.llama import find_multiple\nfrom tools.llama.generate import load_model\n\n##### Quantization Primitives ######\n\n\ndef dynamically_quantize_per_channel(x, quant_min, quant_max, target_dtype):\n    # assumes symmetric quantization\n    # assumes axis == 0\n    # assumes dense memory format\n    # TODO(future): relax ^ as needed\n\n    # default setup for affine quantization of activations\n    eps = torch.finfo(torch.float32).eps\n\n    # get min and max\n    min_val, max_val = torch.aminmax(x, dim=1)\n\n    # calculate scales and zero_points based on min and max\n    # reference: https://fburl.com/code/srbiybme\n    min_val_neg = torch.min(min_val, torch.zeros_like(min_val))\n    max_val_pos = torch.max(max_val, torch.zeros_like(max_val))\n    device = min_val_neg.device\n\n    # reference: https://fburl.com/code/4wll53rk\n    max_val_pos = torch.max(-min_val_neg, max_val_pos)\n    scales = max_val_pos / (float(quant_max - quant_min) / 2)\n    # ensure scales is the same dtype as the original tensor\n    scales = torch.clamp(scales, min=eps).to(x.dtype)\n    zero_points = torch.zeros(min_val_neg.size(), dtype=torch.int64, device=device)\n\n    # quantize based on qmin/qmax/scales/zp\n    # reference: https://www.internalfb.com/code/fbsource/[8edc275012b1]/fbcode/caffe2/torch/ao/quantization/fx/_decomposed.py?lines=63\n    x_div = x / scales.unsqueeze(-1)\n    x_round = torch.round(x_div)\n    x_zp = x_round + zero_points.unsqueeze(-1)\n    quant = torch.clamp(x_zp, quant_min, quant_max).to(target_dtype)\n\n    return quant, scales, zero_points\n\n\ndef get_group_qparams(w, n_bit=4, groupsize=128):\n    # needed for GPTQ with padding\n    if groupsize > w.shape[-1]:\n        groupsize = w.shape[-1]\n    assert groupsize > 1\n    assert w.shape[-1] % groupsize == 0\n    assert w.dim() == 2\n\n    to_quant = w.reshape(-1, groupsize)\n    assert torch.isnan(to_quant).sum() == 0\n\n    max_val = to_quant.amax(dim=1, keepdim=True)\n    min_val = to_quant.amin(dim=1, keepdim=True)\n    max_int = 2**n_bit - 1\n    scales = (max_val - min_val).clamp(min=1e-6) / max_int\n    zeros = min_val + scales * (2 ** (n_bit - 1))\n    return scales.to(torch.bfloat16).reshape(w.shape[0], -1), zeros.to(\n        torch.bfloat16\n    ).reshape(w.shape[0], -1)\n\n\ndef pack_scales_and_zeros(scales, zeros):\n    assert scales.shape == zeros.shape\n    assert scales.dtype == torch.bfloat16\n    assert zeros.dtype == torch.bfloat16\n    return (\n        torch.cat(\n            [\n                scales.reshape(scales.size(0), scales.size(1), 1),\n                zeros.reshape(zeros.size(0), zeros.size(1), 1),\n            ],\n            2,\n        )\n        .transpose(0, 1)\n        .contiguous()\n    )\n\n\ndef unpack_scales_and_zeros(scales_and_zeros):\n    assert len(scales_and_zeros.shape) == 3 and scales_and_zeros.shape[2] == 2\n    assert scales_and_zeros.dtype == torch.float\n    return torch.split(scales_and_zeros.transpose(0, 1), 1, 2)\n\n\ndef group_quantize_tensor_from_qparams(w, scales, zeros, n_bit=4, groupsize=128):\n    assert groupsize > 1\n    # needed for GPTQ single column quantize\n    if groupsize > w.shape[-1] and scales.shape[-1] == 1:\n        groupsize = w.shape[-1]\n\n    assert w.shape[-1] % groupsize == 0\n    assert w.dim() == 2\n\n    to_quant = w.reshape(-1, groupsize)\n    assert torch.isnan(to_quant).sum() == 0\n\n    scales = scales.reshape(-1, 1)\n    zeros = zeros.reshape(-1, 1)\n    min_val = zeros - scales * (2 ** (n_bit - 1))\n    max_int = 2**n_bit - 1\n    min_int = 0\n    w_int32 = (\n        to_quant.sub(min_val)\n        .div(scales)\n        .round()\n        .clamp_(min_int, max_int)\n        .to(torch.int32)\n        .reshape_as(w)\n    )\n\n    return w_int32\n\n\ndef group_quantize_tensor(w, n_bit=4, groupsize=128):\n    scales, zeros = get_group_qparams(w, n_bit, groupsize)\n    w_int32 = group_quantize_tensor_from_qparams(w, scales, zeros, n_bit, groupsize)\n    scales_and_zeros = pack_scales_and_zeros(scales, zeros)\n    return w_int32, scales_and_zeros\n\n\ndef group_dequantize_tensor_from_qparams(\n    w_int32, scales, zeros, n_bit=4, groupsize=128\n):\n    assert groupsize > 1\n    # needed for GPTQ single column dequantize\n    if groupsize > w_int32.shape[-1] and scales.shape[-1] == 1:\n        groupsize = w_int32.shape[-1]\n    assert w_int32.shape[-1] % groupsize == 0\n    assert w_int32.dim() == 2\n\n    w_int32_grouped = w_int32.reshape(-1, groupsize)\n    scales = scales.reshape(-1, 1)\n    zeros = zeros.reshape(-1, 1)\n\n    w_dq = (\n        w_int32_grouped.sub(2 ** (n_bit - 1)).mul(scales).add(zeros).reshape_as(w_int32)\n    )\n    return w_dq\n\n\ndef group_dequantize_tensor(w_int32, scales_and_zeros, n_bit=4, groupsize=128):\n    scales, zeros = unpack_scales_and_zeros(scales_and_zeros)\n    return group_dequantize_tensor_from_qparams(\n        w_int32, scales, zeros, n_bit, groupsize\n    )\n\n\nclass QuantHandler:\n    def __init__(self, mod):\n        self.mod = mod\n\n    def create_quantized_state_dict(self) -> \"StateDict\":\n        pass\n\n    def convert_for_runtime(self) -> \"nn.Module\":\n        pass\n\n\n##### Weight-only int8 per-channel quantized code ######\n\n\ndef replace_linear_weight_only_int8_per_channel(module):\n    for name, child in module.named_children():\n        if isinstance(child, nn.Linear):\n            setattr(\n                module,\n                name,\n                WeightOnlyInt8Linear(child.in_features, child.out_features),\n            )\n        else:\n            replace_linear_weight_only_int8_per_channel(child)\n\n\nclass WeightOnlyInt8QuantHandler:\n    def __init__(self, mod):\n        self.mod = mod\n\n    @torch.no_grad()\n    def create_quantized_state_dict(self):\n        cur_state_dict = self.mod.state_dict()\n        for fqn, mod in self.mod.named_modules():\n            if isinstance(mod, torch.nn.Linear):\n                int8_weight, scales, _ = dynamically_quantize_per_channel(\n                    mod.weight.float(), -128, 127, torch.int8\n                )\n                cur_state_dict[f\"{fqn}.weight\"] = int8_weight\n                cur_state_dict[f\"{fqn}.scales\"] = scales.to(mod.weight.dtype)\n\n        return cur_state_dict\n\n    def convert_for_runtime(self):\n        replace_linear_weight_only_int8_per_channel(self.mod)\n        return self.mod\n\n\nclass WeightOnlyInt8Linear(torch.nn.Module):\n    __constants__ = [\"in_features\", \"out_features\"]\n    in_features: int\n    out_features: int\n    weight: torch.Tensor\n\n    def __init__(\n        self,\n        in_features: int,\n        out_features: int,\n        bias: bool = True,\n        device=None,\n        dtype=None,\n    ) -> None:\n        factory_kwargs = {\"device\": device, \"dtype\": dtype}\n        super().__init__()\n        self.in_features = in_features\n        self.out_features = out_features\n        self.register_buffer(\n            \"weight\", torch.empty((out_features, in_features), dtype=torch.int8)\n        )\n        self.register_buffer(\"scales\", torch.ones(out_features, dtype=torch.bfloat16))\n\n    def forward(self, input: torch.Tensor) -> torch.Tensor:\n        return F.linear(input, self.weight.to(dtype=input.dtype)) * self.scales\n\n\n##### weight only int4 per channel groupwise quantized code ######\n\n\ndef prepare_int4_weight_and_scales_and_zeros(weight_bf16, groupsize, inner_k_tiles):\n    weight_int32, scales_and_zeros = group_quantize_tensor(\n        weight_bf16, n_bit=4, groupsize=groupsize\n    )\n    weight_int4pack = torch.ops.aten._convert_weight_to_int4pack(\n        weight_int32, inner_k_tiles\n    )\n    return weight_int4pack, scales_and_zeros\n\n\ndef linear_forward_int4(x, weight_int4pack, scales_and_zeros, out_features, groupsize):\n    origin_x_size = x.size()\n    x = x.reshape(-1, origin_x_size[-1])\n    c = torch.ops.aten._weight_int4pack_mm(\n        x, weight_int4pack, groupsize, scales_and_zeros\n    )\n    new_shape = origin_x_size[:-1] + (out_features,)\n    c = c.reshape(new_shape)\n    return c\n\n\ndef _check_linear_int4_k(k, groupsize=1, inner_k_tiles=1):\n    return k % groupsize == 0 and k % (inner_k_tiles * 16) == 0\n\n\ndef replace_linear_int4(module, groupsize, inner_k_tiles, padding):\n    for name, child in module.named_children():\n        if isinstance(child, nn.Linear):\n            if _check_linear_int4_k(child.in_features, groupsize, inner_k_tiles):\n                setattr(\n                    module,\n                    name,\n                    WeightOnlyInt4Linear(\n                        child.in_features,\n                        child.out_features,\n                        bias=False,\n                        groupsize=groupsize,\n                        inner_k_tiles=inner_k_tiles,\n                        padding=False,\n                    ),\n                )\n            elif padding:\n                setattr(\n                    module,\n                    name,\n                    WeightOnlyInt4Linear(\n                        child.in_features,\n                        child.out_features,\n                        bias=False,\n                        groupsize=groupsize,\n                        inner_k_tiles=inner_k_tiles,\n                        padding=True,\n                    ),\n                )\n        else:\n            replace_linear_int4(child, groupsize, inner_k_tiles, padding)\n\n\nclass WeightOnlyInt4QuantHandler:\n    def __init__(self, mod, groupsize=128, inner_k_tiles=8, padding=True):\n        self.mod = mod\n        self.groupsize = groupsize\n        self.inner_k_tiles = inner_k_tiles\n        self.padding = padding\n        assert groupsize in [32, 64, 128, 256]\n        assert inner_k_tiles in [2, 4, 8]\n\n    @torch.no_grad()\n    def create_quantized_state_dict(self):\n        cur_state_dict = self.mod.state_dict()\n        for fqn, mod in self.mod.named_modules():\n            if isinstance(mod, torch.nn.Linear):\n                assert not mod.bias\n                out_features = mod.out_features\n                in_features = mod.in_features\n                assert out_features % 8 == 0, \"require out_features % 8 == 0\"\n                print(f\"linear: {fqn}, in={in_features}, out={out_features}\")\n\n                weight = mod.weight.data\n                if not _check_linear_int4_k(\n                    in_features, self.groupsize, self.inner_k_tiles\n                ):\n                    if self.padding:\n                        import torch.nn.functional as F\n\n                        print(\n                            f\"warning: {fqn} is padded to satisfy in_features % 1024 == 0\"\n                        )\n                        padded_in_features = find_multiple(in_features, 1024)\n                        weight = F.pad(\n                            weight, pad=(0, padded_in_features - in_features)\n                        )\n                    else:\n                        print(\n                            f\"warning: {fqn} is skipped, int4 requires that in_features is 32, 64, or is divisible by 1024, \"\n                            + \"and that groupsize and inner_k_tiles*16 evenly divide into it\"\n                        )\n                        continue\n                (\n                    weight_int4pack,\n                    scales_and_zeros,\n                ) = prepare_int4_weight_and_scales_and_zeros(\n                    weight.to(torch.bfloat16).to(\"cuda\"),\n                    self.groupsize,\n                    self.inner_k_tiles,\n                )\n                cur_state_dict[f\"{fqn}.weight\"] = weight_int4pack.to(\"cpu\")\n                cur_state_dict[f\"{fqn}.scales_and_zeros\"] = scales_and_zeros.to(\"cpu\")\n\n        return cur_state_dict\n\n    def convert_for_runtime(self):\n        replace_linear_int4(self.mod, self.groupsize, self.inner_k_tiles, self.padding)\n        return self.mod\n\n\nclass WeightOnlyInt4Linear(torch.nn.Module):\n    __constants__ = [\"in_features\", \"out_features\"]\n    in_features: int\n    out_features: int\n    weight: torch.Tensor\n\n    def __init__(\n        self,\n        in_features: int,\n        out_features: int,\n        bias=True,\n        device=None,\n        dtype=None,\n        groupsize: int = 128,\n        inner_k_tiles: int = 8,\n        padding: bool = True,\n    ) -> None:\n        super().__init__()\n        self.padding = padding\n        if padding:\n            self.origin_in_features = in_features\n            in_features = find_multiple(in_features, 1024)\n\n        self.in_features = in_features\n        self.out_features = out_features\n        assert not bias, \"require bias=False\"\n        self.groupsize = groupsize\n        self.inner_k_tiles = inner_k_tiles\n\n        assert out_features % 8 == 0, \"require out_features % 8 == 0\"\n        assert (\n            in_features % (inner_k_tiles * 16) == 0\n        ), \"require in_features % (innerKTiles * 16) == 0\"\n        self.register_buffer(\n            \"weight\",\n            torch.empty(\n                (\n                    out_features // 8,\n                    in_features // (inner_k_tiles * 16),\n                    32,\n                    inner_k_tiles // 2,\n                ),\n                dtype=torch.int32,\n            ),\n        )\n        self.register_buffer(\n            \"scales_and_zeros\",\n            torch.empty(\n                (in_features // groupsize, out_features, 2), dtype=torch.bfloat16\n            ),\n        )\n\n    def forward(self, input: torch.Tensor) -> torch.Tensor:\n        input = input.to(torch.bfloat16)\n        if self.padding:\n            import torch.nn.functional as F\n\n            input = F.pad(input, pad=(0, self.in_features - self.origin_in_features))\n        return linear_forward_int4(\n            input, self.weight, self.scales_and_zeros, self.out_features, self.groupsize\n        )\n\n\ndef generate_folder_name():\n    now = datetime.datetime.now()\n    folder_name = now.strftime(\"%Y%m%d_%H%M%S\")\n    return folder_name\n\n\n@click.command()\n@click.option(\n    \"--checkpoint-path\",\n    type=click.Path(path_type=Path, exists=True),\n    default=\"checkpoints/fish-speech-1.4\",\n)\n@click.option(\n    \"--mode\", type=str, default=\"int8\", help=\"type of quantization to perform\"\n)\n@click.option(\n    \"--groupsize\", type=int, default=128, help=\"Group size for int4 quantization.\"\n)\n@click.option(\"--timestamp\", type=str, default=\"None\", help=\"When to do quantization\")\ndef quantize(checkpoint_path: Path, mode: str, groupsize: int, timestamp: str) -> None:\n\n    device = \"cpu\"\n    precision = torch.bfloat16\n\n    print(\"Loading model ...\")\n    t0 = time.time()\n\n    model, _ = load_model(\n        checkpoint_path=checkpoint_path,\n        device=device,\n        precision=precision,\n        compile=False,\n    )\n    vq_model = \"firefly-gan-vq-fsq-8x1024-21hz-generator.pth\"\n    now = timestamp if timestamp != \"None\" else generate_folder_name()\n\n    if mode == \"int8\":\n        print(\n            \"Quantizing model weights for int8 weight-only symmetric per-channel quantization\"\n        )\n        quant_handler = WeightOnlyInt8QuantHandler(model)\n        quantized_state_dict = quant_handler.create_quantized_state_dict()\n\n        dir_name = checkpoint_path\n        dst_name = Path(f\"checkpoints/fs-1.2-int8-{now}\")\n        shutil.copytree(str(dir_name.resolve()), str(dst_name.resolve()))\n        if (dst_name / vq_model).exists():\n            (dst_name / vq_model).unlink()\n        quantize_path = dst_name / \"model.pth\"\n\n    elif mode == \"int4\":\n        print(\n            \"Quantizing model weights for int4 weight-only affine per-channel groupwise quantization\"\n        )\n        quant_handler = WeightOnlyInt4QuantHandler(model, groupsize)\n        quantized_state_dict = quant_handler.create_quantized_state_dict()\n\n        dir_name = checkpoint_path\n        dst_name = Path(f\"checkpoints/fs-1.2-int4-g{groupsize}-{now}\")\n        shutil.copytree(str(dir_name.resolve()), str(dst_name.resolve()))\n        if (dst_name / vq_model).exists():\n            (dst_name / vq_model).unlink()\n        quantize_path = dst_name / \"model.pth\"\n\n    else:\n        raise ValueError(\n            f\"Invalid quantization mode {mode} needs to be one of [int8, int4, int4-gpptq]\"\n        )\n\n    print(f\"Writing quantized weights to {quantize_path}\")\n    quantize_path.unlink(missing_ok=True)  # remove existing file if one already there\n    torch.save(quantized_state_dict, quantize_path)\n    print(f\"Quantization complete took {time.time() - t0:.02f} seconds\")\n\n\nif __name__ == \"__main__\":\n    quantize()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/llama/rebuild_tokenizer.py",
    "content": "from tokenizers import Tokenizer, decoders, models, pre_tokenizers, processors, trainers\nfrom transformers import PreTrainedTokenizer, PreTrainedTokenizerFast\n\n# Initialize a tokenizer\ntokenizer = Tokenizer(models.BPE())\n\n# Customize pre-tokenization and decoding\ntokenizer.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=False)\ntokenizer.decoder = decoders.ByteLevel()\ntokenizer.post_processor = processors.ByteLevel(trim_offsets=False)\n\n# Don't train the tokenizer\ntrainer = trainers.BpeTrainer(\n    vocab_size=0,\n    min_frequency=2,\n    initial_alphabet=pre_tokenizers.ByteLevel.alphabet(),\n    special_tokens=[\n        \"<|begin_of_sequence|>\",\n        \"<|end_of_sequence|>\",\n        \"<|im_start|>\",\n        \"<|im_sep|>\",  # system, user, assistant, etc.\n        \"<|im_end|>\",\n        \"<|semantic|>\",  # audio features\n        \"<|pad|>\",\n    ],\n)\n\n# <|im_start|>user<|im_sep|>...<|im_end|>\n# <|im_start|>assistant<|im_sep|><|semantic|><|semantic|><|semantic|><|semantic|><|semantic|><|im_end|>\ntokenizer.train_from_iterator([], trainer=trainer)\n\nprint(len(tokenizer.get_vocab()))\nx = tokenizer.encode(\n    \"Hello, how are you? dfgnviadfjoiviouajeiodfjv 你好世界 🈶<|semantic|>\"\n).ids\nprint(x, len(x))\nprint(tokenizer.decode(x, skip_special_tokens=True))\n\n\ntokenizer = PreTrainedTokenizerFast(\n    tokenizer_object=tokenizer,\n    pad_token=\"<|pad|>\",\n    bos_token=\"<|begin_of_sequence|>\",\n    eos_token=\"<|end_of_sequence|>\",\n)\n\n# Try tokenizing a new sequence\nsequence = \"All around, too, lay vast quantities of the costliest merchandise, and treasures were heaped in every cranny of the rocks, but all these things only added to the desolation of the scene. 测试中文, 你好世界 🈶<|semantic|>\"\nencoded = tokenizer(sequence).input_ids\n\nprint(\"Test encoding....\")\nprint(f\"\\tSentence: {sequence}\")\nprint(f\"\\tEncoded: {encoded}\")\nprint(f\"\\tDecoded: {tokenizer.batch_decode(encoded)}\")\nprint(f\"\\tDecoded: {tokenizer.decode(encoded)}\")\n\ntokenizer.push_to_hub(\"fishaudio/fish-speech-1\", private=True)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/run_webui.py",
    "content": "import os\nfrom argparse import ArgumentParser\nfrom pathlib import Path\n\nimport pyrootutils\nimport torch\nfrom loguru import logger\n\npyrootutils.setup_root(__file__, indicator=\".project-root\", pythonpath=True)\n\nfrom tools.inference_engine import TTSInferenceEngine\nfrom tools.llama.generate import launch_thread_safe_queue\nfrom tools.schema import ServeTTSRequest\nfrom tools.vqgan.inference import load_model as load_decoder_model\nfrom tools.webui import build_app\nfrom tools.webui.inference import get_inference_wrapper\n\n# Make einx happy\nos.environ[\"EINX_FILTER_TRACEBACK\"] = \"false\"\n\n\ndef parse_args():\n    parser = ArgumentParser()\n    parser.add_argument(\n        \"--llama-checkpoint-path\",\n        type=Path,\n        default=\"checkpoints/fish-speech-1.5\",\n    )\n    parser.add_argument(\n        \"--decoder-checkpoint-path\",\n        type=Path,\n        default=\"checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth\",\n    )\n    parser.add_argument(\"--decoder-config-name\", type=str, default=\"firefly_gan_vq\")\n    parser.add_argument(\"--device\", type=str, default=\"cuda\")\n    parser.add_argument(\"--half\", action=\"store_true\")\n    parser.add_argument(\"--compile\", action=\"store_true\")\n    parser.add_argument(\"--max-gradio-length\", type=int, default=0)\n    parser.add_argument(\"--theme\", type=str, default=\"light\")\n\n    return parser.parse_args()\n\n\nif __name__ == \"__main__\":\n    args = parse_args()\n    args.precision = torch.half if args.half else torch.bfloat16\n\n    # Check if MPS or CUDA is available\n    if torch.backends.mps.is_available():\n        args.device = \"mps\"\n        logger.info(\"mps is available, running on mps.\")\n    elif not torch.cuda.is_available():\n        logger.info(\"CUDA is not available, running on CPU.\")\n        args.device = \"cpu\"\n\n    logger.info(\"Loading Llama model...\")\n    llama_queue = launch_thread_safe_queue(\n        checkpoint_path=args.llama_checkpoint_path,\n        device=args.device,\n        precision=args.precision,\n        compile=args.compile,\n    )\n\n    logger.info(\"Loading VQ-GAN model...\")\n    decoder_model = load_decoder_model(\n        config_name=args.decoder_config_name,\n        checkpoint_path=args.decoder_checkpoint_path,\n        device=args.device,\n    )\n\n    logger.info(\"Decoder model loaded, warming up...\")\n\n    # Create the inference engine\n    inference_engine = TTSInferenceEngine(\n        llama_queue=llama_queue,\n        decoder_model=decoder_model,\n        compile=args.compile,\n        precision=args.precision,\n    )\n\n    # Dry run to check if the model is loaded correctly and avoid the first-time latency\n    list(\n        inference_engine.inference(\n            ServeTTSRequest(\n                text=\"Hello world.\",\n                references=[],\n                reference_id=None,\n                max_new_tokens=1024,\n                chunk_length=200,\n                top_p=0.7,\n                repetition_penalty=1.5,\n                temperature=0.7,\n                format=\"wav\",\n            )\n        )\n    )\n\n    logger.info(\"Warming up done, launching the web UI...\")\n\n    # Get the inference function with the immutable arguments\n    inference_fct = get_inference_wrapper(inference_engine)\n\n    app = build_app(inference_fct, args.theme)\n    app.launch(show_api=True)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/schema.py",
    "content": "import os\nimport queue\nfrom dataclasses import dataclass\nfrom typing import Annotated, Literal\n\nimport torch\nfrom pydantic import BaseModel, Field, conint, conlist\nfrom pydantic.functional_validators import SkipValidation\n\nfrom fish_speech.conversation import Message, TextPart, VQPart\n\n\nclass ServeVQPart(BaseModel):\n    type: Literal[\"vq\"] = \"vq\"\n    codes: SkipValidation[list[list[int]]]\n\n\nclass ServeTextPart(BaseModel):\n    type: Literal[\"text\"] = \"text\"\n    text: str\n\n\nclass ServeAudioPart(BaseModel):\n    type: Literal[\"audio\"] = \"audio\"\n    audio: bytes\n\n\n@dataclass\nclass ASRPackRequest:\n    audio: torch.Tensor\n    result_queue: queue.Queue\n    language: str\n\n\nclass ServeASRRequest(BaseModel):\n    # The audio should be an uncompressed PCM float16 audio\n    audios: list[bytes]\n    sample_rate: int = 44100\n    language: Literal[\"zh\", \"en\", \"ja\", \"auto\"] = \"auto\"\n\n\nclass ServeASRTranscription(BaseModel):\n    text: str\n    duration: float\n    huge_gap: bool\n\n\nclass ServeASRSegment(BaseModel):\n    text: str\n    start: float\n    end: float\n\n\nclass ServeTimedASRResponse(BaseModel):\n    text: str\n    segments: list[ServeASRSegment]\n    duration: float\n\n\nclass ServeASRResponse(BaseModel):\n    transcriptions: list[ServeASRTranscription]\n\n\nclass ServeMessage(BaseModel):\n    role: Literal[\"system\", \"assistant\", \"user\"]\n    parts: list[ServeVQPart | ServeTextPart]\n\n    def to_conversation_message(self):\n        new_message = Message(role=self.role, parts=[])\n        if self.role == \"assistant\":\n            new_message.modality = \"voice\"\n\n        for part in self.parts:\n            if isinstance(part, ServeTextPart):\n                new_message.parts.append(TextPart(text=part.text))\n            elif isinstance(part, ServeVQPart):\n                new_message.parts.append(\n                    VQPart(codes=torch.tensor(part.codes, dtype=torch.int))\n                )\n            else:\n                raise ValueError(f\"Unsupported part type: {part}\")\n\n        return new_message\n\n\nclass ServeChatRequest(BaseModel):\n    messages: Annotated[list[ServeMessage], conlist(ServeMessage, min_length=1)]\n    max_new_tokens: int = 1024\n    top_p: float = 0.7\n    repetition_penalty: float = 1.2\n    temperature: float = 0.7\n    streaming: bool = False\n    num_samples: int = 1\n    early_stop_threshold: float = 1.0\n\n\nclass ServeVQGANEncodeRequest(BaseModel):\n    # The audio here should be in wav, mp3, etc\n    audios: list[bytes]\n\n\nclass ServeVQGANEncodeResponse(BaseModel):\n    tokens: SkipValidation[list[list[list[int]]]]\n\n\nclass ServeVQGANDecodeRequest(BaseModel):\n    tokens: SkipValidation[list[list[list[int]]]]\n\n\nclass ServeVQGANDecodeResponse(BaseModel):\n    # The audio here should be in PCM float16 format\n    audios: list[bytes]\n\n\nclass ServeForwardMessage(BaseModel):\n    role: str\n    content: str\n\n\nclass ServeResponse(BaseModel):\n    messages: list[ServeMessage]\n    finish_reason: Literal[\"stop\", \"error\"] | None = None\n    stats: dict[str, int | float | str] = {}\n\n\nclass ServeStreamDelta(BaseModel):\n    role: Literal[\"system\", \"assistant\", \"user\"] | None = None\n    part: ServeVQPart | ServeTextPart | None = None\n\n\nclass ServeStreamResponse(BaseModel):\n    sample_id: int = 0\n    delta: ServeStreamDelta | None = None\n    finish_reason: Literal[\"stop\", \"error\"] | None = None\n    stats: dict[str, int | float | str] | None = None\n\n\nclass ServeReferenceAudio(BaseModel):\n    audio: bytes\n    text: str\n\n    def __repr__(self) -> str:\n        return f\"ServeReferenceAudio(text={self.text!r}, audio_size={len(self.audio)})\"\n\n\nclass ServeTTSRequest(BaseModel):\n    text: str\n    chunk_length: Annotated[int, conint(ge=100, le=300, strict=True)] = 200\n    # Audio format\n    format: Literal[\"wav\", \"pcm\", \"mp3\"] = \"wav\"\n    # References audios for in-context learning\n    references: list[ServeReferenceAudio] = []\n    # Reference id\n    # For example, if you want use https://fish.audio/m/7f92f8afb8ec43bf81429cc1c9199cb1/\n    # Just pass 7f92f8afb8ec43bf81429cc1c9199cb1\n    reference_id: str | None = None\n    seed: int | None = None\n    use_memory_cache: Literal[\"on\", \"off\"] = \"off\"\n    # Normalize text for en & zh, this increase stability for numbers\n    normalize: bool = True\n    # not usually used below\n    streaming: bool = False\n    max_new_tokens: int = 1024\n    top_p: Annotated[float, Field(ge=0.1, le=1.0, strict=True)] = 0.7\n    repetition_penalty: Annotated[float, Field(ge=0.9, le=2.0, strict=True)] = 1.2\n    temperature: Annotated[float, Field(ge=0.1, le=1.0, strict=True)] = 0.7\n\n    class Config:\n        # Allow arbitrary types for pytorch related types\n        arbitrary_types_allowed = True\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/sensevoice/README.md",
    "content": "# FunASR Command Line Interface\n\nThis tool provides a command-line interface for separating vocals from instrumental tracks, converting videos to audio, and performing speech-to-text transcription on the resulting audio files.\n\n## Requirements\n\n- Python >= 3.10\n- PyTorch <= 2.3.1\n- ffmpeg, pydub, audio-separator[gpu].\n\n## Installation\n\nInstall the required packages:\n\n```bash\npip install -e .[stable]\n```\n\nMake sure you have `ffmpeg` installed and available in your `PATH`.\n\n## Usage\n\n### Basic Usage\n\nTo run the tool with default settings:\n\n```bash\npython tools/sensevoice/fun_asr.py --audio-dir <audio_directory> --save-dir <output_directory>\n```\n\n## Options\n\n|          Option           |                                  Description                                  |\n| :-----------------------: | :---------------------------------------------------------------------------: |\n|        --audio-dir        |                  Directory containing audio or video files.                   |\n|        --save-dir         |                   Directory to save processed audio files.                    |\n|         --device          |         Device to use for processing. Options: cuda (default) or cpu.         |\n|        --language         |                Language of the transcription. Default is auto.                |\n| --max_single_segment_time | Maximum duration of a single audio segment in milliseconds. Default is 20000. |\n|          --punc           |                        Enable punctuation prediction.                         |\n|         --denoise         |                  Enable noise reduction (vocal separation).                   |\n\n## Example\n\nTo process audio files in the directory `path/to/audio` and save the output to `path/to/output`, with punctuation and noise reduction enabled:\n\n```bash\npython tools/sensevoice/fun_asr.py --audio-dir path/to/audio --save-dir path/to/output --punc --denoise\n```\n\n## Additional Notes\n\n- The tool supports `both audio and video files`. Videos will be converted to audio automatically.\n- If the `--denoise` option is used, the tool will perform vocal separation to isolate the vocals from the instrumental tracks.\n- The script will automatically create necessary directories in the `--save-dir`.\n\n## Troubleshooting\n\nIf you encounter any issues, make sure all dependencies are correctly installed and configured. For more detailed troubleshooting, refer to the documentation of each dependency.\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/sensevoice/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/sensevoice/auto_model.py",
    "content": "#!/usr/bin/env python3\n# -*- encoding: utf-8 -*-\n# Copyright FunASR (https://github.com/alibaba-damo-academy/FunASR). All Rights Reserved.\n#  MIT License  (https://opensource.org/licenses/MIT)\n\nimport copy\nimport json\nimport logging\nimport os.path\nimport random\nimport re\nimport string\nimport time\n\nimport numpy as np\nimport torch\nfrom funasr.download.download_model_from_hub import download_model\nfrom funasr.download.file import download_from_url\nfrom funasr.register import tables\nfrom funasr.train_utils.load_pretrained_model import load_pretrained_model\nfrom funasr.train_utils.set_all_random_seed import set_all_random_seed\nfrom funasr.utils import export_utils, misc\nfrom funasr.utils.load_utils import load_audio_text_image_video, load_bytes\nfrom funasr.utils.misc import deep_update\nfrom funasr.utils.timestamp_tools import timestamp_sentence, timestamp_sentence_en\nfrom tqdm import tqdm\n\nfrom .vad_utils import merge_vad, slice_padding_audio_samples\n\ntry:\n    from funasr.models.campplus.cluster_backend import ClusterBackend\n    from funasr.models.campplus.utils import distribute_spk, postprocess, sv_chunk\nexcept Exception:\n    pass\n\n\ndef prepare_data_iterator(data_in, input_len=None, data_type=None, key=None):\n    \"\"\" \"\"\"\n    data_list = []\n    key_list = []\n    filelist = [\".scp\", \".txt\", \".json\", \".jsonl\", \".text\"]\n\n    chars = string.ascii_letters + string.digits\n    if isinstance(data_in, str):\n        if data_in.startswith(\"http://\") or data_in.startswith(\"https://\"):  # url\n            data_in = download_from_url(data_in)\n\n    if isinstance(data_in, str) and os.path.exists(\n        data_in\n    ):  # wav_path; filelist: wav.scp, file.jsonl;text.txt;\n        _, file_extension = os.path.splitext(data_in)\n        file_extension = file_extension.lower()\n        if file_extension in filelist:  # filelist: wav.scp, file.jsonl;text.txt;\n            with open(data_in, encoding=\"utf-8\") as fin:\n                for line in fin:\n                    key = \"rand_key_\" + \"\".join(random.choice(chars) for _ in range(13))\n                    if data_in.endswith(\n                        \".jsonl\"\n                    ):  # file.jsonl: json.dumps({\"source\": data})\n                        lines = json.loads(line.strip())\n                        data = lines[\"source\"]\n                        key = data[\"key\"] if \"key\" in data else key\n                    else:  # filelist, wav.scp, text.txt: id \\t data or data\n                        lines = line.strip().split(maxsplit=1)\n                        data = lines[1] if len(lines) > 1 else lines[0]\n                        key = lines[0] if len(lines) > 1 else key\n\n                    data_list.append(data)\n                    key_list.append(key)\n        else:\n            if key is None:\n                # key = \"rand_key_\" + \"\".join(random.choice(chars) for _ in range(13))\n                key = misc.extract_filename_without_extension(data_in)\n            data_list = [data_in]\n            key_list = [key]\n    elif isinstance(data_in, (list, tuple)):\n        if data_type is not None and isinstance(\n            data_type, (list, tuple)\n        ):  # mutiple inputs\n            data_list_tmp = []\n            for data_in_i, data_type_i in zip(data_in, data_type):\n                key_list, data_list_i = prepare_data_iterator(\n                    data_in=data_in_i, data_type=data_type_i\n                )\n                data_list_tmp.append(data_list_i)\n            data_list = []\n            for item in zip(*data_list_tmp):\n                data_list.append(item)\n        else:\n            # [audio sample point, fbank, text]\n            data_list = data_in\n            key_list = []\n            for data_i in data_in:\n                if isinstance(data_i, str) and os.path.exists(data_i):\n                    key = misc.extract_filename_without_extension(data_i)\n                else:\n                    if key is None:\n                        key = \"rand_key_\" + \"\".join(\n                            random.choice(chars) for _ in range(13)\n                        )\n                key_list.append(key)\n\n    else:  # raw text; audio sample point, fbank; bytes\n        if isinstance(data_in, bytes):  # audio bytes\n            data_in = load_bytes(data_in)\n        if key is None:\n            key = \"rand_key_\" + \"\".join(random.choice(chars) for _ in range(13))\n        data_list = [data_in]\n        key_list = [key]\n\n    return key_list, data_list\n\n\nclass AutoModel:\n\n    def __init__(self, **kwargs):\n\n        try:\n            from funasr.utils.version_checker import check_for_update\n\n            print(\n                \"Check update of funasr, and it would cost few times. You may disable it by set `disable_update=True` in AutoModel\"\n            )\n            check_for_update(disable=kwargs.get(\"disable_update\", False))\n        except Exception:\n            pass\n\n        log_level = getattr(logging, kwargs.get(\"log_level\", \"INFO\").upper())\n        logging.basicConfig(level=log_level)\n\n        model, kwargs = self.build_model(**kwargs)\n\n        # if vad_model is not None, build vad model else None\n        vad_model = kwargs.get(\"vad_model\", None)\n        vad_kwargs = (\n            {} if kwargs.get(\"vad_kwargs\", {}) is None else kwargs.get(\"vad_kwargs\", {})\n        )\n        if vad_model is not None:\n            logging.info(\"Building VAD model.\")\n            vad_kwargs[\"model\"] = vad_model\n            vad_kwargs[\"model_revision\"] = kwargs.get(\"vad_model_revision\", \"master\")\n            vad_kwargs[\"device\"] = kwargs[\"device\"]\n            vad_model, vad_kwargs = self.build_model(**vad_kwargs)\n\n        # if punc_model is not None, build punc model else None\n        punc_model = kwargs.get(\"punc_model\", None)\n        punc_kwargs = (\n            {}\n            if kwargs.get(\"punc_kwargs\", {}) is None\n            else kwargs.get(\"punc_kwargs\", {})\n        )\n        if punc_model is not None:\n            logging.info(\"Building punc model.\")\n            punc_kwargs[\"model\"] = punc_model\n            punc_kwargs[\"model_revision\"] = kwargs.get(\"punc_model_revision\", \"master\")\n            punc_kwargs[\"device\"] = kwargs[\"device\"]\n            punc_model, punc_kwargs = self.build_model(**punc_kwargs)\n\n        # if spk_model is not None, build spk model else None\n        spk_model = kwargs.get(\"spk_model\", None)\n        spk_kwargs = (\n            {} if kwargs.get(\"spk_kwargs\", {}) is None else kwargs.get(\"spk_kwargs\", {})\n        )\n        if spk_model is not None:\n            logging.info(\"Building SPK model.\")\n            spk_kwargs[\"model\"] = spk_model\n            spk_kwargs[\"model_revision\"] = kwargs.get(\"spk_model_revision\", \"master\")\n            spk_kwargs[\"device\"] = kwargs[\"device\"]\n            spk_model, spk_kwargs = self.build_model(**spk_kwargs)\n            self.cb_model = ClusterBackend().to(kwargs[\"device\"])\n            spk_mode = kwargs.get(\"spk_mode\", \"punc_segment\")\n            if spk_mode not in [\"default\", \"vad_segment\", \"punc_segment\"]:\n                logging.error(\n                    \"spk_mode should be one of default, vad_segment and punc_segment.\"\n                )\n            self.spk_mode = spk_mode\n\n        self.kwargs = kwargs\n        self.model = model\n        self.vad_model = vad_model\n        self.vad_kwargs = vad_kwargs\n        self.punc_model = punc_model\n        self.punc_kwargs = punc_kwargs\n        self.spk_model = spk_model\n        self.spk_kwargs = spk_kwargs\n        self.model_path = kwargs.get(\"model_path\")\n\n    @staticmethod\n    def build_model(**kwargs):\n        assert \"model\" in kwargs\n        if \"model_conf\" not in kwargs:\n            logging.info(\n                \"download models from model hub: {}\".format(kwargs.get(\"hub\", \"ms\"))\n            )\n            kwargs = download_model(**kwargs)\n\n        set_all_random_seed(kwargs.get(\"seed\", 0))\n\n        device = kwargs.get(\"device\", \"cuda\")\n        if not torch.cuda.is_available() or kwargs.get(\"ngpu\", 1) == 0:\n            device = \"cpu\"\n            kwargs[\"batch_size\"] = 1\n        kwargs[\"device\"] = device\n\n        torch.set_num_threads(kwargs.get(\"ncpu\", 4))\n\n        # build tokenizer\n        tokenizer = kwargs.get(\"tokenizer\", None)\n        if tokenizer is not None:\n            tokenizer_class = tables.tokenizer_classes.get(tokenizer)\n            tokenizer = tokenizer_class(**kwargs.get(\"tokenizer_conf\", {}))\n            kwargs[\"token_list\"] = (\n                tokenizer.token_list if hasattr(tokenizer, \"token_list\") else None\n            )\n            kwargs[\"token_list\"] = (\n                tokenizer.get_vocab()\n                if hasattr(tokenizer, \"get_vocab\")\n                else kwargs[\"token_list\"]\n            )\n            vocab_size = (\n                len(kwargs[\"token_list\"]) if kwargs[\"token_list\"] is not None else -1\n            )\n            if vocab_size == -1 and hasattr(tokenizer, \"get_vocab_size\"):\n                vocab_size = tokenizer.get_vocab_size()\n        else:\n            vocab_size = -1\n        kwargs[\"tokenizer\"] = tokenizer\n\n        # build frontend\n        frontend = kwargs.get(\"frontend\", None)\n        kwargs[\"input_size\"] = None\n        if frontend is not None:\n            frontend_class = tables.frontend_classes.get(frontend)\n            frontend = frontend_class(**kwargs.get(\"frontend_conf\", {}))\n            kwargs[\"input_size\"] = (\n                frontend.output_size() if hasattr(frontend, \"output_size\") else None\n            )\n        kwargs[\"frontend\"] = frontend\n        # build model\n        model_class = tables.model_classes.get(kwargs[\"model\"])\n        assert model_class is not None, f'{kwargs[\"model\"]} is not registered'\n        model_conf = {}\n        deep_update(model_conf, kwargs.get(\"model_conf\", {}))\n        deep_update(model_conf, kwargs)\n        model = model_class(**model_conf, vocab_size=vocab_size)\n\n        # init_param\n        init_param = kwargs.get(\"init_param\", None)\n        if init_param is not None:\n            if os.path.exists(init_param):\n                logging.info(f\"Loading pretrained params from {init_param}\")\n                load_pretrained_model(\n                    model=model,\n                    path=init_param,\n                    ignore_init_mismatch=kwargs.get(\"ignore_init_mismatch\", True),\n                    oss_bucket=kwargs.get(\"oss_bucket\", None),\n                    scope_map=kwargs.get(\"scope_map\", []),\n                    excludes=kwargs.get(\"excludes\", None),\n                )\n            else:\n                print(f\"error, init_param does not exist!: {init_param}\")\n\n        # fp16\n        if kwargs.get(\"fp16\", False):\n            model.to(torch.float16)\n        elif kwargs.get(\"bf16\", False):\n            model.to(torch.bfloat16)\n        model.to(device)\n\n        if not kwargs.get(\"disable_log\", True):\n            tables.print()\n\n        return model, kwargs\n\n    def __call__(self, *args, **cfg):\n        kwargs = self.kwargs\n        deep_update(kwargs, cfg)\n        res = self.model(*args, kwargs)\n        return res\n\n    def generate(self, input, input_len=None, **cfg):\n        if self.vad_model is None:\n            return self.inference(input, input_len=input_len, **cfg)\n\n        else:\n            return self.inference_with_vad(input, input_len=input_len, **cfg)\n\n    def inference(\n        self, input, input_len=None, model=None, kwargs=None, key=None, **cfg\n    ):\n        kwargs = self.kwargs if kwargs is None else kwargs\n        if \"cache\" in kwargs:\n            kwargs.pop(\"cache\")\n        deep_update(kwargs, cfg)\n        model = self.model if model is None else model\n        model.eval()\n\n        batch_size = kwargs.get(\"batch_size\", 1)\n        # if kwargs.get(\"device\", \"cpu\") == \"cpu\":\n        #     batch_size = 1\n\n        key_list, data_list = prepare_data_iterator(\n            input, input_len=input_len, data_type=kwargs.get(\"data_type\", None), key=key\n        )\n\n        speed_stats = {}\n        asr_result_list = []\n        num_samples = len(data_list)\n        disable_pbar = self.kwargs.get(\"disable_pbar\", False)\n        pbar = (\n            tqdm(colour=\"blue\", total=num_samples, dynamic_ncols=True)\n            if not disable_pbar\n            else None\n        )\n        time_speech_total = 0.0\n        time_escape_total = 0.0\n        for beg_idx in range(0, num_samples, batch_size):\n            end_idx = min(num_samples, beg_idx + batch_size)\n            data_batch = data_list[beg_idx:end_idx]\n            key_batch = key_list[beg_idx:end_idx]\n            batch = {\"data_in\": data_batch, \"key\": key_batch}\n\n            if (end_idx - beg_idx) == 1 and kwargs.get(\n                \"data_type\", None\n            ) == \"fbank\":  # fbank\n                batch[\"data_in\"] = data_batch[0]\n                batch[\"data_lengths\"] = input_len\n\n            time1 = time.perf_counter()\n            with torch.no_grad():\n                res = model.inference(**batch, **kwargs)\n                if isinstance(res, (list, tuple)):\n                    results = res[0] if len(res) > 0 else [{\"text\": \"\"}]\n                    meta_data = res[1] if len(res) > 1 else {}\n            time2 = time.perf_counter()\n\n            asr_result_list.extend(results)\n\n            # batch_data_time = time_per_frame_s * data_batch_i[\"speech_lengths\"].sum().item()\n            batch_data_time = meta_data.get(\"batch_data_time\", -1)\n            time_escape = time2 - time1\n            speed_stats[\"load_data\"] = meta_data.get(\"load_data\", 0.0)\n            speed_stats[\"extract_feat\"] = meta_data.get(\"extract_feat\", 0.0)\n            speed_stats[\"forward\"] = f\"{time_escape:0.3f}\"\n            speed_stats[\"batch_size\"] = f\"{len(results)}\"\n            speed_stats[\"rtf\"] = f\"{(time_escape) / batch_data_time:0.3f}\"\n            description = f\"{speed_stats}, \"\n            if pbar:\n                pbar.update(end_idx - beg_idx)\n                pbar.set_description(description)\n            time_speech_total += batch_data_time\n            time_escape_total += time_escape\n\n        if pbar:\n            # pbar.update(1)\n            pbar.set_description(f\"rtf_avg: {time_escape_total/time_speech_total:0.3f}\")\n        torch.cuda.empty_cache()\n        return asr_result_list\n\n    def vad(self, input, input_len=None, **cfg):\n        kwargs = self.kwargs\n        # step.1: compute the vad model\n        deep_update(self.vad_kwargs, cfg)\n        beg_vad = time.time()\n        res = self.inference(\n            input,\n            input_len=input_len,\n            model=self.vad_model,\n            kwargs=self.vad_kwargs,\n            **cfg,\n        )\n        end_vad = time.time()\n        #  FIX(gcf): concat the vad clips for sense vocie model for better aed\n        if cfg.get(\"merge_vad\", False):\n            for i in range(len(res)):\n                res[i][\"value\"] = merge_vad(\n                    res[i][\"value\"], kwargs.get(\"merge_length_s\", 15) * 1000\n                )\n        elapsed = end_vad - beg_vad\n        return elapsed, res\n\n    def inference_with_vadres(self, input, vad_res, input_len=None, **cfg):\n\n        kwargs = self.kwargs\n\n        # step.2 compute asr model\n        model = self.model\n        deep_update(kwargs, cfg)\n        batch_size = max(int(kwargs.get(\"batch_size_s\", 300)) * 1000, 1)\n        batch_size_threshold_ms = int(kwargs.get(\"batch_size_threshold_s\", 60)) * 1000\n        kwargs[\"batch_size\"] = batch_size\n\n        key_list, data_list = prepare_data_iterator(\n            input, input_len=input_len, data_type=kwargs.get(\"data_type\", None)\n        )\n        results_ret_list = []\n        time_speech_total_all_samples = 1e-6\n\n        beg_total = time.time()\n        pbar_total = (\n            tqdm(colour=\"red\", total=len(vad_res), dynamic_ncols=True)\n            if not kwargs.get(\"disable_pbar\", False)\n            else None\n        )\n\n        for i in range(len(vad_res)):\n            key = vad_res[i][\"key\"]\n            vadsegments = vad_res[i][\"value\"]\n            input_i = data_list[i]\n            fs = kwargs[\"frontend\"].fs if hasattr(kwargs[\"frontend\"], \"fs\") else 16000\n            speech = load_audio_text_image_video(\n                input_i, fs=fs, audio_fs=kwargs.get(\"fs\", 16000)\n            )\n            speech_lengths = len(speech)\n            n = len(vadsegments)\n            data_with_index = [(vadsegments[i], i) for i in range(n)]\n            sorted_data = sorted(data_with_index, key=lambda x: x[0][1] - x[0][0])\n            results_sorted = []\n\n            if not len(sorted_data):\n                results_ret_list.append({\"key\": key, \"text\": \"\", \"timestamp\": []})\n                logging.info(\"decoding, utt: {}, empty speech\".format(key))\n                continue\n\n            if len(sorted_data) > 0 and len(sorted_data[0]) > 0:\n                batch_size = max(\n                    batch_size, sorted_data[0][0][1] - sorted_data[0][0][0]\n                )\n\n            if kwargs[\"device\"] == \"cpu\":\n                batch_size = 0\n\n            beg_idx = 0\n            beg_asr_total = time.time()\n            time_speech_total_per_sample = speech_lengths / 16000\n            time_speech_total_all_samples += time_speech_total_per_sample\n\n            # pbar_sample = tqdm(colour=\"blue\", total=n, dynamic_ncols=True)\n\n            all_segments = []\n            max_len_in_batch = 0\n            end_idx = 1\n\n            for j, _ in enumerate(range(0, n)):\n                # pbar_sample.update(1)\n                sample_length = sorted_data[j][0][1] - sorted_data[j][0][0]\n                potential_batch_length = max(max_len_in_batch, sample_length) * (\n                    j + 1 - beg_idx\n                )\n                # batch_size_ms_cum += sorted_data[j][0][1] - sorted_data[j][0][0]\n                if (\n                    j < n - 1\n                    and sample_length < batch_size_threshold_ms\n                    and potential_batch_length < batch_size\n                ):\n                    max_len_in_batch = max(max_len_in_batch, sample_length)\n                    end_idx += 1\n                    continue\n\n                speech_j, speech_lengths_j, intervals = slice_padding_audio_samples(\n                    speech, speech_lengths, sorted_data[beg_idx:end_idx]\n                )\n                results = self.inference(\n                    speech_j, input_len=None, model=model, kwargs=kwargs, **cfg\n                )\n\n                for _b in range(len(speech_j)):\n                    results[_b][\"interval\"] = intervals[_b]\n\n                if self.spk_model is not None:\n                    # compose vad segments: [[start_time_sec, end_time_sec, speech], [...]]\n                    for _b in range(len(speech_j)):\n                        vad_segments = [\n                            [\n                                sorted_data[beg_idx:end_idx][_b][0][0] / 1000.0,\n                                sorted_data[beg_idx:end_idx][_b][0][1] / 1000.0,\n                                np.array(speech_j[_b]),\n                            ]\n                        ]\n                        segments = sv_chunk(vad_segments)\n                        all_segments.extend(segments)\n                        speech_b = [i[2] for i in segments]\n                        spk_res = self.inference(\n                            speech_b,\n                            input_len=None,\n                            model=self.spk_model,\n                            kwargs=kwargs,\n                            **cfg,\n                        )\n                        results[_b][\"spk_embedding\"] = spk_res[0][\"spk_embedding\"]\n\n                beg_idx = end_idx\n                end_idx += 1\n                max_len_in_batch = sample_length\n                if len(results) < 1:\n                    continue\n                results_sorted.extend(results)\n\n            # end_asr_total = time.time()\n            # time_escape_total_per_sample = end_asr_total - beg_asr_total\n            # pbar_sample.update(1)\n            # pbar_sample.set_description(f\"rtf_avg_per_sample: {time_escape_total_per_sample / time_speech_total_per_sample:0.3f}, \"\n            #                      f\"time_speech_total_per_sample: {time_speech_total_per_sample: 0.3f}, \"\n            #                      f\"time_escape_total_per_sample: {time_escape_total_per_sample:0.3f}\")\n\n            restored_data = [0] * n\n            for j in range(n):\n                index = sorted_data[j][1]\n                cur = results_sorted[j]\n                pattern = r\"<\\|([^|]+)\\|>\"\n                emotion_string = re.findall(pattern, cur[\"text\"])\n                cur[\"text\"] = re.sub(pattern, \"\", cur[\"text\"])\n                cur[\"emo\"] = \"\".join([f\"<|{t}|>\" for t in emotion_string])\n                if self.punc_model is not None and len(cur[\"text\"].strip()) > 0:\n                    deep_update(self.punc_kwargs, cfg)\n                    punc_res = self.inference(\n                        cur[\"text\"],\n                        model=self.punc_model,\n                        kwargs=self.punc_kwargs,\n                        **cfg,\n                    )\n                    cur[\"text\"] = punc_res[0][\"text\"]\n\n                restored_data[index] = cur\n\n            end_asr_total = time.time()\n            time_escape_total_per_sample = end_asr_total - beg_asr_total\n            if pbar_total:\n                pbar_total.update(1)\n                pbar_total.set_description(\n                    f\"rtf_avg: {time_escape_total_per_sample / time_speech_total_per_sample:0.3f}, \"\n                    f\"time_speech: {time_speech_total_per_sample: 0.3f}, \"\n                    f\"time_escape: {time_escape_total_per_sample:0.3f}\"\n                )\n\n        # end_total = time.time()\n        # time_escape_total_all_samples = end_total - beg_total\n        # print(f\"rtf_avg_all: {time_escape_total_all_samples / time_speech_total_all_samples:0.3f}, \"\n        #                      f\"time_speech_all: {time_speech_total_all_samples: 0.3f}, \"\n        #                      f\"time_escape_all: {time_escape_total_all_samples:0.3f}\")\n        return restored_data\n\n    def export(self, input=None, **cfg):\n        \"\"\"\n\n        :param input:\n        :param type:\n        :param quantize:\n        :param fallback_num:\n        :param calib_num:\n        :param opset_version:\n        :param cfg:\n        :return:\n        \"\"\"\n\n        device = cfg.get(\"device\", \"cpu\")\n        model = self.model.to(device=device)\n        kwargs = self.kwargs\n        deep_update(kwargs, cfg)\n        kwargs[\"device\"] = device\n        del kwargs[\"model\"]\n        model.eval()\n\n        type = kwargs.get(\"type\", \"onnx\")\n\n        key_list, data_list = prepare_data_iterator(\n            input, input_len=None, data_type=kwargs.get(\"data_type\", None), key=None\n        )\n\n        with torch.no_grad():\n            export_dir = export_utils.export(model=model, data_in=data_list, **kwargs)\n\n        return export_dir\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/sensevoice/fun_asr.py",
    "content": "import gc\nimport os\nimport re\n\nfrom audio_separator.separator import Separator\n\nos.environ[\"MODELSCOPE_CACHE\"] = \"./.cache/funasr\"\nos.environ[\"UVR5_CACHE\"] = \"./.cache/uvr5-models\"\nimport json\nimport subprocess\nfrom pathlib import Path\n\nimport click\nimport torch\nfrom loguru import logger\nfrom pydub import AudioSegment\nfrom silero_vad import get_speech_timestamps, load_silero_vad, read_audio\nfrom tqdm import tqdm\n\nfrom tools.file import AUDIO_EXTENSIONS, VIDEO_EXTENSIONS, list_files\nfrom tools.sensevoice.auto_model import AutoModel\n\n\ndef uvr5_cli(\n    audio_dir: Path,\n    output_folder: Path,\n    audio_files: list[Path] | None = None,\n    output_format: str = \"flac\",\n    model: str = \"BS-Roformer-Viperx-1297.ckpt\",\n):\n    # [\"BS-Roformer-Viperx-1297.ckpt\", \"BS-Roformer-Viperx-1296.ckpt\", \"BS-Roformer-Viperx-1053.ckpt\", \"Mel-Roformer-Viperx-1143.ckpt\"]\n    sepr = Separator(\n        model_file_dir=os.environ[\"UVR5_CACHE\"],\n        output_dir=output_folder,\n        output_format=output_format,\n    )\n    dictmodel = {\n        \"BS-Roformer-Viperx-1297.ckpt\": \"model_bs_roformer_ep_317_sdr_12.9755.ckpt\",\n        \"BS-Roformer-Viperx-1296.ckpt\": \"model_bs_roformer_ep_368_sdr_12.9628.ckpt\",\n        \"BS-Roformer-Viperx-1053.ckpt\": \"model_bs_roformer_ep_937_sdr_10.5309.ckpt\",\n        \"Mel-Roformer-Viperx-1143.ckpt\": \"model_mel_band_roformer_ep_3005_sdr_11.4360.ckpt\",\n    }\n    roformer_model = dictmodel[model]\n    sepr.load_model(roformer_model)\n    if audio_files is None:\n        audio_files = list_files(\n            path=audio_dir, extensions=AUDIO_EXTENSIONS, recursive=True\n        )\n    total_files = len(audio_files)\n\n    print(f\"{total_files} audio files found\")\n\n    res = []\n    for audio in tqdm(audio_files, desc=\"Denoising: \"):\n        file_path = str(audio_dir / audio)\n        sep_out = sepr.separate(file_path)\n        if isinstance(sep_out, str):\n            res.append(sep_out)\n        elif isinstance(sep_out, list):\n            res.extend(sep_out)\n    del sepr\n    gc.collect()\n    if torch.cuda.is_available():\n        torch.cuda.empty_cache()\n\n    return res, roformer_model\n\n\ndef get_sample_rate(media_path: Path):\n    result = subprocess.run(\n        [\n            \"ffprobe\",\n            \"-v\",\n            \"quiet\",\n            \"-print_format\",\n            \"json\",\n            \"-show_streams\",\n            str(media_path),\n        ],\n        capture_output=True,\n        text=True,\n        check=True,\n    )\n    media_info = json.loads(result.stdout)\n    for stream in media_info.get(\"streams\", []):\n        if stream.get(\"codec_type\") == \"audio\":\n            return stream.get(\"sample_rate\")\n    return \"44100\"  # Default sample rate if not found\n\n\ndef convert_to_mono(src_path: Path, out_path: Path, out_fmt: str = \"wav\"):\n    sr = get_sample_rate(src_path)\n    out_path.parent.mkdir(parents=True, exist_ok=True)\n    if src_path.resolve() == out_path.resolve():\n        output = str(out_path.with_stem(out_path.stem + f\"_{sr}\"))\n    else:\n        output = str(out_path)\n    subprocess.run(\n        [\n            \"ffmpeg\",\n            \"-loglevel\",\n            \"error\",\n            \"-i\",\n            str(src_path),\n            \"-acodec\",\n            \"pcm_s16le\" if out_fmt == \"wav\" else \"flac\",\n            \"-ar\",\n            sr,\n            \"-ac\",\n            \"1\",\n            \"-y\",\n            output,\n        ],\n        check=True,\n    )\n    return out_path\n\n\ndef convert_video_to_audio(video_path: Path, audio_dir: Path):\n    cur_dir = audio_dir / video_path.relative_to(audio_dir).parent\n    vocals = [\n        p\n        for p in cur_dir.glob(f\"{video_path.stem}_(Vocals)*.*\")\n        if p.suffix in AUDIO_EXTENSIONS\n    ]\n    if len(vocals) > 0:\n        return vocals[0]\n    audio_path = cur_dir / f\"{video_path.stem}.wav\"\n    convert_to_mono(video_path, audio_path)\n    return audio_path\n\n\n@click.command()\n@click.option(\"--audio-dir\", required=True, help=\"Directory containing audio files\")\n@click.option(\n    \"--save-dir\", required=True, help=\"Directory to save processed audio files\"\n)\n@click.option(\"--device\", default=\"cuda\", help=\"Device to use [cuda / cpu]\")\n@click.option(\"--language\", default=\"auto\", help=\"Language of the transcription\")\n@click.option(\n    \"--max_single_segment_time\",\n    default=20000,\n    type=int,\n    help=\"Maximum of Output single audio duration(ms)\",\n)\n@click.option(\"--fsmn-vad/--silero-vad\", default=False)\n@click.option(\"--punc/--no-punc\", default=False)\n@click.option(\"--denoise/--no-denoise\", default=False)\n@click.option(\"--save_emo/--no_save_emo\", default=False)\ndef main(\n    audio_dir: str,\n    save_dir: str,\n    device: str,\n    language: str,\n    max_single_segment_time: int,\n    fsmn_vad: bool,\n    punc: bool,\n    denoise: bool,\n    save_emo: bool,\n):\n\n    audios_path = Path(audio_dir)\n    save_path = Path(save_dir)\n    save_path.mkdir(parents=True, exist_ok=True)\n\n    video_files = list_files(\n        path=audio_dir, extensions=VIDEO_EXTENSIONS, recursive=True\n    )\n    v2a_files = [convert_video_to_audio(p, audio_dir) for p in video_files]\n\n    if denoise:\n        VOCAL = \"_(Vocals)\"\n        original_files = [\n            p\n            for p in audios_path.glob(\"**/*\")\n            if p.suffix in AUDIO_EXTENSIONS and VOCAL not in p.stem\n        ]\n\n        _, cur_model = uvr5_cli(\n            audio_dir=audio_dir, output_folder=audio_dir, audio_files=original_files\n        )\n        need_remove = [p for p in audios_path.glob(\"**/*(Instrumental)*\")]\n        need_remove.extend(original_files)\n        for _ in need_remove:\n            _.unlink()\n        vocal_files = [\n            p\n            for p in audios_path.glob(\"**/*\")\n            if p.suffix in AUDIO_EXTENSIONS and VOCAL in p.stem\n        ]\n        for f in vocal_files:\n            fn, ext = f.stem, f.suffix\n\n            v_pos = fn.find(VOCAL + \"_\" + cur_model.split(\".\")[0])\n            if v_pos != -1:\n                new_fn = fn[: v_pos + len(VOCAL)]\n                new_f = f.with_name(new_fn + ext)\n                f = f.rename(new_f)\n                convert_to_mono(f, f, \"flac\")\n                f.unlink()\n\n    audio_files = list_files(\n        path=audio_dir, extensions=AUDIO_EXTENSIONS, recursive=True\n    )\n\n    logger.info(\"Loading / Downloading Funasr model...\")\n\n    model_dir = \"iic/SenseVoiceSmall\"\n\n    vad_model = \"fsmn-vad\" if fsmn_vad else None\n    vad_kwargs = {\"max_single_segment_time\": max_single_segment_time}\n    punc_model = \"ct-punc\" if punc else None\n\n    manager = AutoModel(\n        model=model_dir,\n        trust_remote_code=False,\n        vad_model=vad_model,\n        vad_kwargs=vad_kwargs,\n        punc_model=punc_model,\n        device=device,\n    )\n\n    if not fsmn_vad and vad_model is None:\n        vad_model = load_silero_vad()\n\n    logger.info(\"Model loaded.\")\n\n    pattern = re.compile(r\"_\\d{3}\\.\")\n\n    for file_path in tqdm(audio_files, desc=\"Processing audio file\"):\n\n        if pattern.search(file_path.name):\n            # logger.info(f\"Skipping {file_path} as it has already been processed.\")\n            continue\n\n        file_stem = file_path.stem\n        file_suffix = file_path.suffix\n\n        rel_path = Path(file_path).relative_to(audio_dir)\n        (save_path / rel_path.parent).mkdir(parents=True, exist_ok=True)\n\n        audio = AudioSegment.from_file(file_path)\n\n        cfg = dict(\n            cache={},\n            language=language,  # \"zh\", \"en\", \"yue\", \"ja\", \"ko\", \"nospeech\"\n            use_itn=False,\n            batch_size_s=60,\n        )\n\n        if fsmn_vad:\n            elapsed, vad_res = manager.vad(input=str(file_path), **cfg)\n        else:\n            wav = read_audio(\n                str(file_path)\n            )  # backend (sox, soundfile, or ffmpeg) required!\n            audio_key = file_path.stem\n            audio_val = []\n            speech_timestamps = get_speech_timestamps(\n                wav,\n                vad_model,\n                max_speech_duration_s=max_single_segment_time // 1000,\n                return_seconds=True,\n            )\n\n            audio_val = [\n                [int(timestamp[\"start\"] * 1000), int(timestamp[\"end\"] * 1000)]\n                for timestamp in speech_timestamps\n            ]\n            vad_res = []\n            vad_res.append(dict(key=audio_key, value=audio_val))\n\n        res = manager.inference_with_vadres(\n            input=str(file_path), vad_res=vad_res, **cfg\n        )\n\n        for i, info in enumerate(res):\n            [start_ms, end_ms] = info[\"interval\"]\n            text = info[\"text\"]\n            emo = info[\"emo\"]\n            sliced_audio = audio[start_ms:end_ms]\n            audio_save_path = (\n                save_path / rel_path.parent / f\"{file_stem}_{i:03d}{file_suffix}\"\n            )\n            sliced_audio.export(audio_save_path, format=file_suffix[1:])\n            print(f\"Exported {audio_save_path}: {text}\")\n\n            transcript_save_path = (\n                save_path / rel_path.parent / f\"{file_stem}_{i:03d}.lab\"\n            )\n            with open(\n                transcript_save_path,\n                \"w\",\n                encoding=\"utf-8\",\n            ) as f:\n                f.write(text)\n\n            if save_emo:\n                emo_save_path = save_path / rel_path.parent / f\"{file_stem}_{i:03d}.emo\"\n                with open(\n                    emo_save_path,\n                    \"w\",\n                    encoding=\"utf-8\",\n                ) as f:\n                    f.write(emo)\n\n        if audios_path.resolve() == save_path.resolve():\n            file_path.unlink()\n\n\nif __name__ == \"__main__\":\n    main()\n    exit(0)\n    from funasr.utils.postprocess_utils import rich_transcription_postprocess\n\n    # Load the audio file\n    audio_path = Path(r\"D:\\PythonProject\\ok\\1_output_(Vocals).wav\")\n    model_dir = \"iic/SenseVoiceSmall\"\n    m, kwargs = SenseVoiceSmall.from_pretrained(model=model_dir, device=\"cuda:0\")\n    m.eval()\n\n    res = m.inference(\n        data_in=f\"{kwargs['model_path']}/example/zh.mp3\",\n        language=\"auto\",  # \"zh\", \"en\", \"yue\", \"ja\", \"ko\", \"nospeech\"\n        use_itn=False,\n        ban_emo_unk=False,\n        **kwargs,\n    )\n\n    print(res)\n    text = rich_transcription_postprocess(res[0][0][\"text\"])\n    print(text)\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/sensevoice/vad_utils.py",
    "content": "import torch\nfrom torch.nn.utils.rnn import pad_sequence\n\n\ndef slice_padding_fbank(speech, speech_lengths, vad_segments):\n    speech_list = []\n    speech_lengths_list = []\n    for i, segment in enumerate(vad_segments):\n\n        bed_idx = int(segment[0][0] * 16)\n        end_idx = min(int(segment[0][1] * 16), speech_lengths[0])\n        speech_i = speech[0, bed_idx:end_idx]\n        speech_lengths_i = end_idx - bed_idx\n        speech_list.append(speech_i)\n        speech_lengths_list.append(speech_lengths_i)\n    feats_pad = pad_sequence(speech_list, batch_first=True, padding_value=0.0)\n    speech_lengths_pad = torch.Tensor(speech_lengths_list).int()\n    return feats_pad, speech_lengths_pad\n\n\ndef slice_padding_audio_samples(speech, speech_lengths, vad_segments):\n    speech_list = []\n    speech_lengths_list = []\n    intervals = []\n    for i, segment in enumerate(vad_segments):\n        bed_idx = int(segment[0][0] * 16)\n        end_idx = min(int(segment[0][1] * 16), speech_lengths)\n        speech_i = speech[bed_idx:end_idx]\n        speech_lengths_i = end_idx - bed_idx\n        speech_list.append(speech_i)\n        speech_lengths_list.append(speech_lengths_i)\n        intervals.append([bed_idx // 16, end_idx // 16])\n\n    return speech_list, speech_lengths_list, intervals\n\n\ndef merge_vad(vad_result, max_length=15000, min_length=0):\n    new_result = []\n    if len(vad_result) <= 1:\n        return vad_result\n    time_step = [t[0] for t in vad_result] + [t[1] for t in vad_result]\n    time_step = sorted(list(set(time_step)))\n    if len(time_step) == 0:\n        return []\n    bg = 0\n    for i in range(len(time_step) - 1):\n        time = time_step[i]\n        if time_step[i + 1] - bg < max_length:\n            continue\n        if time - bg > min_length:\n            new_result.append([bg, time])\n        # if time - bg < max_length * 1.5:\n        #     new_result.append([bg, time])\n        # else:\n        #     split_num = int(time - bg) // max_length + 1\n        #     spl_l = int(time - bg) // split_num\n        #     for j in range(split_num):\n        #         new_result.append([bg + j * spl_l, bg + (j + 1) * spl_l])\n        bg = time\n    new_result.append([bg, time_step[-1]])\n    return new_result\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/agent/__init__.py",
    "content": "import struct\nfrom functools import partial\n\nimport ormsgpack\n\nfrom tools.server.agent.generate import generate_responses\nfrom tools.server.agent.pre_generation_utils import prepare_messages\n\n\ndef execute_request(input_queue, tokenizer, config, request, device):\n    \"\"\"\n    This function prepares the conversation, encodes the request,\n    sends the generation request, and handles decoding/streaming.\n    It returns a response generator (ServeResponse or ServeStreamResponse).\n    \"\"\"\n    prompt, im_end_id = prepare_messages(request, tokenizer, config)\n    yield from generate_responses(\n        input_queue, tokenizer, config, request, prompt, im_end_id, device\n    )\n\n\ndef response_generator(req, llama_queue, tokenizer, config, device):\n    \"\"\"\n    Non-streaming response wrapper for the chat endpoint.\n    Only returns the final result.\n    \"\"\"\n    generator = execute_request(llama_queue, tokenizer, config, req, device)\n    return next(generator)\n\n\nasync def streaming_generator(req, llama_queue, tokenizer, config, device, json_mode):\n    \"\"\"\n    Streaming response wrapper for the chat endpoint.\n    Returns the response in chunks.\n    \"\"\"\n    generator = execute_request(llama_queue, tokenizer, config, req, device)\n    for i in generator:\n        if json_mode:\n            body = i.model_dump_json().encode(\"utf-8\")\n            yield b\"data: \" + body + b\"\\n\\n\"\n        else:\n            body = ormsgpack.packb(i, option=ormsgpack.OPT_SERIALIZE_PYDANTIC)\n            yield struct.pack(\"I\", len(body)) + body\n\n\ndef get_response_generator(\n    llama_queue, tokenizer, config, req, device, json_mode\n) -> partial:\n    \"\"\"\n    Get the correct response generator based on the request.\n    \"\"\"\n    if not req.streaming:\n        return partial(response_generator, req, llama_queue, tokenizer, config, device)\n    else:\n        return partial(\n            streaming_generator, req, llama_queue, tokenizer, config, device, json_mode\n        )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/agent/generate.py",
    "content": "import time\n\nfrom tools.schema import ServeMessage, ServeResponse, ServeStreamResponse\nfrom tools.server.agent.generation_utils import (\n    initialize_decode_buffers,\n    process_response_tokens,\n    send_reset_buffer,\n)\nfrom tools.server.agent.pre_generation_utils import (\n    create_generation_request,\n    send_generation_request,\n)\n\n\ndef generate_responses(\n    input_queue, tokenizer, config, request, prompt, im_end_id, device\n):\n    \"\"\"\n    Main generation function that handles the conversation, encodes the request,\n    sends the generation request, and handles decoding/streaming.\n    It returns a response generator (ServeResponse or ServeStreamResponse).\n    \"\"\"\n    stats = {}\n    start = time.time()\n    stats[\"start_time\"] = start\n    stats[\"tokens_count\"] = 0\n\n    # Prepare and send the generation request\n    req = create_generation_request(prompt, request, im_end_id, device)\n    response_queue = send_generation_request(input_queue, req)\n    decode_buffer, parts, finished = initialize_decode_buffers(request.num_samples)\n\n    while True:\n        response = response_queue.get()\n\n        # Handle abnormal finish or error\n        if response in [\"stop\", \"error\"]:\n            finish_reason = response\n            break\n\n        # Process the response tokens\n        is_first_token = stats[\"tokens_count\"] == 0\n        responses = process_response_tokens(\n            response,\n            tokenizer,\n            config,\n            request,\n            decode_buffer,\n            parts,\n            finished,\n            im_end_id,\n            stats,\n            start,\n            is_first_token,\n        )\n\n        # Yield the responses if streaming\n        if request.streaming and responses:\n            for r in responses:\n                yield r\n\n        stats[\"tokens_count\"] += 1\n\n        # Check if all samples are finished\n        if all(finished):\n            finish_reason = \"stop\"\n            break\n\n    # Finalize the response\n    final_responses = finalize_response(\n        request, finished, decode_buffer, tokenizer, parts, stats, finish_reason\n    )\n    for fr in final_responses:\n        yield fr\n\n\ndef finalize_response(\n    request, finished, decode_buffer, tokenizer, parts, stats, finish_reason\n):\n    \"\"\"\n    Finalize the response by sending the remaining text buffers.\n    \"\"\"\n    responses = []\n\n    # Send the remaining text buffers\n    for sample_id in range(request.num_samples):\n        responses.extend(\n            send_reset_buffer(sample_id, decode_buffer, tokenizer, parts, request)\n        )\n\n    # Calculate the final stats\n    stats[\"total_time\"] = (time.time() - stats[\"start_time\"]) * 1000\n    stats[\"total_tokens\"] = stats[\"tokens_count\"]\n\n    # If streaming, send the final chunks for each sample\n    if request.streaming:\n        for sample_id in range(request.num_samples):\n            if finished[sample_id]:\n                continue\n            responses.append(\n                ServeStreamResponse(\n                    finish_reason=finish_reason, stats=stats, sample_id=sample_id\n                )\n            )\n    else:\n        # If not streaming, send the full messages for each sample\n        full_messages = [\n            ServeMessage(role=\"assistant\", parts=parts[i])\n            for i in range(request.num_samples)\n        ]\n        responses.append(\n            ServeResponse(\n                messages=full_messages,\n                finish_reason=finish_reason,\n                stats=stats,\n            )\n        )\n\n    return responses\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/agent/generation_utils.py",
    "content": "import time\n\nfrom tools.schema import (\n    ServeStreamDelta,\n    ServeStreamResponse,\n    ServeTextPart,\n    ServeVQPart,\n)\n\n\ndef initialize_decode_buffers(num_samples):\n    \"\"\"Initialise the decode buffers for each sample.\"\"\"\n    decode_buffer = [[] for _ in range(num_samples)]\n    parts = [[] for _ in range(num_samples)]\n    finished = [False for _ in range(num_samples)]\n    return decode_buffer, parts, finished\n\n\ndef send_reset_buffer(sample_id, decode_buffer, tokenizer, parts, request):\n    \"\"\"Send the remaining text buffer for a sample.\"\"\"\n    if len(decode_buffer[sample_id]) == 0:\n        return []\n\n    decoded = tokenizer.decode(decode_buffer[sample_id])\n    part = ServeTextPart(text=decoded)\n\n    responses = []\n    if request.streaming:\n        responses.append(ServeStreamResponse(delta=ServeStreamDelta(part=part)))\n    else:\n        parts[sample_id].append(part)\n\n    decode_buffer[sample_id] = []\n    return responses\n\n\ndef handle_semantic_tokens(tokens, config, sample_id, parts, request):\n    \"\"\"Handle the semantic tokens returned by the model.\"\"\"\n    responses = []\n    _tokens = tokens[1:].clone()\n\n    if not config.share_codebook_embeddings:\n        for i in range(len(_tokens)):\n            _tokens[i] -= config.codebook_size * i\n\n    # If streaming, send the VQ parts directly\n    if request.streaming:\n        responses.append(\n            ServeStreamResponse(\n                sample_id=sample_id,\n                delta=ServeStreamDelta(part=ServeVQPart(codes=_tokens.tolist())),\n            )\n        )\n    else:\n        # If not streaming, accumulate the VQ parts\n        if not parts[sample_id] or not isinstance(parts[sample_id][-1], ServeVQPart):\n            parts[sample_id].append(ServeVQPart(codes=_tokens.tolist()))\n        else:\n            # Accumulate the codes\n            for codebook_id, value in enumerate(_tokens):\n                parts[sample_id][-1].codes[codebook_id].append(value.item())\n\n    return responses\n\n\ndef process_response_tokens(\n    response,\n    tokenizer,\n    config,\n    request,\n    decode_buffer,\n    parts,\n    finished,\n    im_end_id,\n    stats,\n    start,\n    is_first_token,\n):\n    \"\"\"Process the response tokens returned by the model.\"\"\"\n    responses = []\n    for sample_id, tokens in enumerate(response):\n        if finished[sample_id]:\n            continue\n\n        # End of the conversation\n        if tokens[0] == im_end_id:\n            finished[sample_id] = True\n            # Send the remaining text buffer\n            responses.extend(\n                send_reset_buffer(sample_id, decode_buffer, tokenizer, parts, request)\n            )\n            if request.streaming:\n                responses.append(\n                    ServeStreamResponse(\n                        sample_id=sample_id,\n                        finish_reason=\"stop\",\n                        stats=stats,\n                    )\n                )\n            continue\n\n        # Check if the token is semantic\n        is_semantic = (\n            tokenizer.semantic_begin_id <= tokens[0] <= tokenizer.semantic_end_id\n        )\n\n        if is_semantic:\n            # Before the semantic tokens, send the remaining text buffer\n            responses.extend(\n                send_reset_buffer(sample_id, decode_buffer, tokenizer, parts, request)\n            )\n            responses.extend(\n                handle_semantic_tokens(tokens, config, sample_id, parts, request)\n            )\n        else:\n            # Accumulate the text tokens (not implemented?)\n            decode_buffer[sample_id].append(tokens[0, 0])\n\n    if is_first_token:\n        stats[\"time_to_first_token\"] = (time.time() - start) * 1000\n\n    return responses\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/agent/pre_generation_utils.py",
    "content": "import queue\n\nfrom fish_speech.conversation import Conversation, Message\nfrom fish_speech.tokenizer import IM_END_TOKEN\nfrom tools.llama.generate import GenerateRequest\n\n\ndef prepare_messages(request, tokenizer, config):\n    \"\"\"\n    Reorganise the provided list of messages into a conversation.\n    Encode the conversation for inference.\n    \"\"\"\n    # Convert the messages to ConversationMessage objects\n    messages = [msg.to_conversation_message() for msg in request.messages]\n\n    if len(messages) < 1:\n        raise ValueError(\"At least one message is required\")\n\n    # Check the last message to determine the next step\n    last_role = messages[-1].role\n    match last_role:\n        case \"user\":\n            # The last message is from the user, ask the assistant to respond with a new message\n            messages.append(\n                Message(role=\"assistant\", parts=[], add_im_end=False, modality=\"voice\")\n            )\n        case \"raw\":\n            # The last message is raw text, ask the assistant to complete it\n            messages[-1].add_im_start = False\n            messages[-1].add_im_end = False\n            messages[-1].modality = \"voice\"\n        case \"assistant\":\n            # The last message is from the assistant, ask the assistant to continue\n            messages[-1].add_im_end = False\n        case _:\n            # We expect it to be assistant if not user or raw\n            raise ValueError(\"The last message must be from the assistant, user or raw\")\n\n    # Create a conversation object and encode it for inference\n    conv = Conversation(messages=messages)\n    prompt = conv.encode_for_inference(\n        tokenizer=tokenizer, num_codebooks=config.num_codebooks\n    )\n    im_end_id = tokenizer.get_token_id(IM_END_TOKEN)\n\n    return prompt, im_end_id\n\n\ndef create_generation_request(prompt, request, im_end_id, device):\n    \"\"\"\n    Convert the request into a dictionary that can be sent to the model for generation.\n    \"\"\"\n    req = {\n        \"prompt\": prompt.to(device),\n        \"max_new_tokens\": request.max_new_tokens,\n        \"im_end_id\": im_end_id,\n        \"temperature\": request.temperature,\n        \"top_p\": request.top_p,\n        \"repetition_penalty\": request.repetition_penalty,\n        \"num_samples\": request.num_samples,\n        \"early_stop_threshold\": request.early_stop_threshold,\n    }\n    return req\n\n\ndef send_generation_request(input_queue, req):\n    \"\"\"\n    Send the generation request to the model and return a queue to get the response.\n    \"\"\"\n    response_queue = queue.Queue()\n    input_queue.put(GenerateRequest(req, response_queue))\n    return response_queue\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/api_utils.py",
    "content": "from argparse import ArgumentParser\nfrom http import HTTPStatus\nfrom typing import Annotated, Any\n\nimport ormsgpack\nfrom baize.datastructures import ContentType\nfrom kui.asgi import HTTPException, HttpRequest\n\nfrom tools.inference_engine import TTSInferenceEngine\nfrom tools.schema import ServeTTSRequest\nfrom tools.server.inference import inference_wrapper as inference\n\n\ndef parse_args():\n    parser = ArgumentParser()\n    parser.add_argument(\"--mode\", type=str, choices=[\"agent\", \"tts\"], default=\"tts\")\n    parser.add_argument(\"--load-asr-model\", action=\"store_true\")\n    parser.add_argument(\n        \"--llama-checkpoint-path\",\n        type=str,\n        default=\"checkpoints/fish-speech-1.5\",\n    )\n    parser.add_argument(\n        \"--decoder-checkpoint-path\",\n        type=str,\n        default=\"checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth\",\n    )\n    parser.add_argument(\"--decoder-config-name\", type=str, default=\"firefly_gan_vq\")\n    parser.add_argument(\"--device\", type=str, default=\"cuda\")\n    parser.add_argument(\"--half\", action=\"store_true\")\n    parser.add_argument(\"--compile\", action=\"store_true\")\n    parser.add_argument(\"--max-text-length\", type=int, default=0)\n    parser.add_argument(\"--listen\", type=str, default=\"127.0.0.1:8080\")\n    parser.add_argument(\"--workers\", type=int, default=1)\n\n    return parser.parse_args()\n\n\nclass MsgPackRequest(HttpRequest):\n    async def data(\n        self,\n    ) -> Annotated[\n        Any, ContentType(\"application/msgpack\"), ContentType(\"application/json\")\n    ]:\n        if self.content_type == \"application/msgpack\":\n            return ormsgpack.unpackb(await self.body)\n\n        elif self.content_type == \"application/json\":\n            return await self.json\n\n        raise HTTPException(\n            HTTPStatus.UNSUPPORTED_MEDIA_TYPE,\n            headers={\"Accept\": \"application/msgpack, application/json\"},\n        )\n\n\nasync def inference_async(req: ServeTTSRequest, engine: TTSInferenceEngine):\n    for chunk in inference(req, engine):\n        if isinstance(chunk, bytes):\n            yield chunk\n\n\nasync def buffer_to_async_generator(buffer):\n    yield buffer\n\n\ndef get_content_type(audio_format):\n    if audio_format == \"wav\":\n        return \"audio/wav\"\n    elif audio_format == \"flac\":\n        return \"audio/flac\"\n    elif audio_format == \"mp3\":\n        return \"audio/mpeg\"\n    else:\n        return \"application/octet-stream\"\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/exception_handler.py",
    "content": "import traceback\nfrom http import HTTPStatus\n\nfrom kui.asgi import HTTPException, JSONResponse\n\n\nclass ExceptionHandler:\n\n    async def http_exception_handler(self, exc: HTTPException):\n        return JSONResponse(\n            dict(\n                statusCode=exc.status_code,\n                message=exc.content,\n                error=HTTPStatus(exc.status_code).phrase,\n            ),\n            exc.status_code,\n            exc.headers,\n        )\n\n    async def other_exception_handler(self, exc: Exception):\n        traceback.print_exc()\n\n        status = HTTPStatus.INTERNAL_SERVER_ERROR\n        return JSONResponse(\n            dict(statusCode=status, message=str(exc), error=status.phrase),\n            status,\n        )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/inference.py",
    "content": "from http import HTTPStatus\n\nimport numpy as np\nfrom kui.asgi import HTTPException\n\nfrom tools.inference_engine import TTSInferenceEngine\nfrom tools.schema import ServeTTSRequest\n\nAMPLITUDE = 32768  # Needs an explaination\n\n\ndef inference_wrapper(req: ServeTTSRequest, engine: TTSInferenceEngine):\n    \"\"\"\n    Wrapper for the inference function.\n    Used in the API server.\n    \"\"\"\n    count = 0\n    for result in engine.inference(req):\n        match result.code:\n            case \"header\":\n                if isinstance(result.audio, tuple):\n                    yield result.audio[1]\n\n            case \"error\":\n                raise HTTPException(\n                    HTTPStatus.INTERNAL_SERVER_ERROR,\n                    content=str(result.error),\n                )\n\n            case \"segment\":\n                count += 1\n                if isinstance(result.audio, tuple):\n                    yield (result.audio[1] * AMPLITUDE).astype(np.int16).tobytes()\n\n            case \"final\":\n                count += 1\n                if isinstance(result.audio, tuple):\n                    yield result.audio[1]\n                return None  # Stop the generator\n\n    if count == 0:\n        raise HTTPException(\n            HTTPStatus.INTERNAL_SERVER_ERROR,\n            content=\"No audio generated, please check the input text.\",\n        )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/model_manager.py",
    "content": "import torch\nfrom funasr import AutoModel\nfrom loguru import logger\n\nfrom tools.inference_engine import TTSInferenceEngine\nfrom tools.llama.generate import (\n    launch_thread_safe_queue,\n    launch_thread_safe_queue_agent,\n)\nfrom tools.schema import ServeTTSRequest\nfrom tools.server.inference import inference_wrapper as inference\nfrom tools.vqgan.inference import load_model as load_decoder_model\n\nASR_MODEL_NAME = \"iic/SenseVoiceSmall\"\n\n\nclass ModelManager:\n    def __init__(\n        self,\n        mode: str,\n        device: str,\n        half: bool,\n        compile: bool,\n        asr_enabled: bool,\n        llama_checkpoint_path: str,\n        decoder_checkpoint_path: str,\n        decoder_config_name: str,\n    ) -> None:\n\n        self.mode = mode\n        self.device = device\n        self.half = half\n        self.compile = compile\n\n        self.precision = torch.half if half else torch.bfloat16\n\n        # Check if MPS or CUDA is available\n        if torch.backends.mps.is_available():\n            self.device = \"mps\"\n            logger.info(\"mps is available, running on mps.\")\n        elif not torch.cuda.is_available():\n            self.device = \"cpu\"\n            logger.info(\"CUDA is not available, running on CPU.\")\n\n        # Load the ASR model if enabled\n        if asr_enabled:\n            self.load_asr_model(self.device)\n\n        # Load the TTS models\n        self.load_llama_model(\n            llama_checkpoint_path, self.device, self.precision, self.compile, self.mode\n        )\n        self.load_decoder_model(\n            decoder_config_name, decoder_checkpoint_path, self.device\n        )\n        self.tts_inference_engine = TTSInferenceEngine(\n            llama_queue=self.llama_queue,\n            decoder_model=self.decoder_model,\n            precision=self.precision,\n            compile=self.compile,\n        )\n\n        # Warm up the models\n        if self.mode == \"tts\":\n            self.warm_up(self.tts_inference_engine)\n\n    def load_asr_model(self, device, hub=\"ms\") -> None:\n        self.asr_model = AutoModel(\n            model=ASR_MODEL_NAME,\n            device=device,\n            disable_pbar=True,\n            hub=hub,\n        )\n        logger.info(\"ASR model loaded.\")\n\n    def load_llama_model(\n        self, checkpoint_path, device, precision, compile, mode\n    ) -> None:\n\n        if mode == \"tts\":\n            self.llama_queue = launch_thread_safe_queue(\n                checkpoint_path=checkpoint_path,\n                device=device,\n                precision=precision,\n                compile=compile,\n            )\n        elif mode == \"agent\":\n            self.llama_queue, self.tokenizer, self.config = (\n                launch_thread_safe_queue_agent(\n                    checkpoint_path=checkpoint_path,\n                    device=device,\n                    precision=precision,\n                    compile=compile,\n                )\n            )\n        else:\n            raise ValueError(f\"Invalid mode: {mode}\")\n\n        logger.info(\"LLAMA model loaded.\")\n\n    def load_decoder_model(self, config_name, checkpoint_path, device) -> None:\n        self.decoder_model = load_decoder_model(\n            config_name=config_name,\n            checkpoint_path=checkpoint_path,\n            device=device,\n        )\n        logger.info(\"Decoder model loaded.\")\n\n    def warm_up(self, tts_inference_engine) -> None:\n        request = ServeTTSRequest(\n            text=\"Hello world.\",\n            references=[],\n            reference_id=None,\n            max_new_tokens=1024,\n            chunk_length=200,\n            top_p=0.7,\n            repetition_penalty=1.2,\n            temperature=0.7,\n            format=\"wav\",\n        )\n        list(inference(request, tts_inference_engine))\n        logger.info(\"Models warmed up.\")\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/model_utils.py",
    "content": "import io\nimport re\n\nimport librosa\nimport torch\nimport torchaudio\nfrom cachetools import LRUCache, cached\n\nCACHE_MAXSIZE = 10000\nMICRO_BATCH_SIZE = 8\nASR_SAMPLE_RATE = 16000\nHUGE_GAP_THRESHOLD = 4000\n\n\n@torch.no_grad()\n@torch.autocast(device_type=\"cuda\", dtype=torch.half)\ndef batch_encode(model, audios_list: list[bytes]):\n    audios: list[torch.Tensor] = [\n        (\n            torch.from_numpy(\n                librosa.load(io.BytesIO(audio), sr=model.spec_transform.sample_rate)[0]\n            )[None]\n            if isinstance(audio, bytes)\n            else audio\n        )\n        for audio in audios_list\n    ]\n\n    lengths = torch.tensor([audio.shape[-1] for audio in audios], device=model.device)\n    max_length = lengths.max().item()\n\n    print(f\"Encode max length: {max_length / model.spec_transform.sample_rate:.2f}s\")\n\n    padded = torch.stack(\n        [\n            torch.nn.functional.pad(audio, (0, int(max_length - audio.shape[-1])))\n            for audio in audios\n        ]\n    ).to(model.device)\n\n    features, feature_lengths = model.encode(padded, audio_lengths=lengths)\n    features, feature_lengths = features.cpu(), feature_lengths.cpu()\n\n    return [feature[..., :length] for feature, length in zip(features, feature_lengths)]\n\n\n@cached(\n    cache=LRUCache(maxsize=CACHE_MAXSIZE),\n    key=lambda model, audios: (model.device, tuple(audios)),\n)\ndef cached_vqgan_batch_encode(model, audios: list[bytes]):\n    return batch_encode(model, audios)\n\n\n@torch.no_grad()\n@torch.autocast(device_type=\"cuda\", dtype=torch.half)\ndef vqgan_decode(model, features):\n    lengths = torch.tensor(\n        [feature.shape[-1] for feature in features], device=model.device\n    )\n    max_length = lengths.max().item()\n    padded = torch.stack(\n        [\n            torch.nn.functional.pad(feature, (0, max_length - feature.shape[-1]))\n            for feature in features\n        ]\n    ).to(model.device)\n\n    # If bs too large, we do micro batch decode\n    audios, audio_lengths = [], []\n    for i in range(0, padded.shape[0], MICRO_BATCH_SIZE):\n        audio, audio_length = model.decode(\n            padded[i : i + MICRO_BATCH_SIZE],\n            feature_lengths=lengths[i : i + MICRO_BATCH_SIZE],\n        )\n        audios.append(audio)\n        audio_lengths.append(audio_length)\n    audios = torch.cat(audios, dim=0)\n    audio_lengths = torch.cat(audio_lengths, dim=0)\n    audios, audio_lengths = audios.cpu(), audio_lengths.cpu()\n\n    return [audio[..., :length].numpy() for audio, length in zip(audios, audio_lengths)]\n\n\n@torch.no_grad()\ndef batch_asr(model, lock, audios, sr, language=\"auto\"):\n    resampled_audios = []\n    for audio in audios:\n        audio = torchaudio.functional.resample(audio, sr, ASR_SAMPLE_RATE)\n        assert audio.ndim == 1\n        resampled_audios.append(audio)\n\n    with lock:\n        res = model.generate(\n            input=resampled_audios,\n            batch_size=len(resampled_audios),\n            language=language,\n            use_itn=True,\n        )\n\n    results = []\n    for r, audio in zip(res, audios):\n        text = r[\"text\"]\n        text = re.sub(r\"<\\|.*?\\|>\", \"\", text)\n        duration = len(audio) / sr * 1000\n        huge_gap = False\n\n        if \"timestamp\" in r and len(r[\"timestamp\"]) > 2:\n            for timestamp_a, timestamp_b in zip(\n                r[\"timestamp\"][:-1], r[\"timestamp\"][1:]\n            ):\n                # If there is a gap of more than 4 seconds, we consider it as a huge gap\n                if timestamp_b[0] - timestamp_a[1] > HUGE_GAP_THRESHOLD:\n                    huge_gap = True\n                    break\n\n            # Doesn't make sense to have a huge gap at the end\n            if duration - r[\"timestamp\"][-1][1] > HUGE_GAP_THRESHOLD:\n                huge_gap = True\n\n        results.append(\n            {\n                \"text\": text,\n                \"duration\": duration,\n                \"huge_gap\": huge_gap,\n            }\n        )\n\n    return results\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/server/views.py",
    "content": "import io\nimport os\nimport time\nfrom http import HTTPStatus\n\nimport numpy as np\nimport ormsgpack\nimport soundfile as sf\nimport torch\nfrom kui.asgi import HTTPException, HttpView, JSONResponse, StreamResponse, request\nfrom loguru import logger\n\nfrom tools.schema import (\n    ServeASRRequest,\n    ServeASRResponse,\n    ServeChatRequest,\n    ServeTTSRequest,\n    ServeVQGANDecodeRequest,\n    ServeVQGANDecodeResponse,\n    ServeVQGANEncodeRequest,\n    ServeVQGANEncodeResponse,\n)\nfrom tools.server.agent import get_response_generator\nfrom tools.server.api_utils import (\n    buffer_to_async_generator,\n    get_content_type,\n    inference_async,\n)\nfrom tools.server.inference import inference_wrapper as inference\nfrom tools.server.model_manager import ModelManager\nfrom tools.server.model_utils import batch_asr, cached_vqgan_batch_encode, vqgan_decode\n\nMAX_NUM_SAMPLES = int(os.getenv(\"NUM_SAMPLES\", 1))\n\n\nclass HealthView(HttpView):\n    \"\"\"\n    Return the health status of the server.\n    \"\"\"\n\n    @classmethod\n    async def post(cls):\n        return JSONResponse({\"status\": \"ok\"})\n\n\nclass VQGANEncodeView(HttpView):\n    \"\"\"\n    Encode the audio into symbolic tokens.\n    \"\"\"\n\n    @classmethod\n    async def post(cls):\n        # Decode the request\n        payload = await request.data()\n        req = ServeVQGANEncodeRequest(**payload)\n\n        # Get the model from the app\n        model_manager: ModelManager = request.app.state.model_manager\n        decoder_model = model_manager.decoder_model\n\n        # Encode the audio\n        start_time = time.time()\n        tokens = cached_vqgan_batch_encode(decoder_model, req.audios)\n        logger.info(\n            f\"[EXEC] VQGAN encode time: {(time.time() - start_time) * 1000:.2f}ms\"\n        )\n\n        # Return the response\n        return ormsgpack.packb(\n            ServeVQGANEncodeResponse(tokens=[i.tolist() for i in tokens]),\n            option=ormsgpack.OPT_SERIALIZE_PYDANTIC,\n        )\n\n\nclass VQGANDecodeView(HttpView):\n    \"\"\"\n    Decode the symbolic tokens into audio.\n    \"\"\"\n\n    @classmethod\n    async def post(cls):\n        # Decode the request\n        payload = await request.data()\n        req = ServeVQGANDecodeRequest(**payload)\n\n        # Get the model from the app\n        model_manager: ModelManager = request.app.state.model_manager\n        decoder_model = model_manager.decoder_model\n\n        # Decode the audio\n        tokens = [torch.tensor(token, dtype=torch.int) for token in req.tokens]\n        start_time = time.time()\n        audios = vqgan_decode(decoder_model, tokens)\n        logger.info(\n            f\"[EXEC] VQGAN decode time: {(time.time() - start_time) * 1000:.2f}ms\"\n        )\n        audios = [audio.astype(np.float16).tobytes() for audio in audios]\n\n        # Return the response\n        return ormsgpack.packb(\n            ServeVQGANDecodeResponse(audios=audios),\n            option=ormsgpack.OPT_SERIALIZE_PYDANTIC,\n        )\n\n\nclass ASRView(HttpView):\n    \"\"\"\n    Perform automatic speech recognition on the audio.\n    \"\"\"\n\n    @classmethod\n    async def post(cls):\n        # Decode the request\n        payload = await request.data()\n        req = ServeASRRequest(**payload)\n\n        # Get the model from the app\n        model_manager: ModelManager = request.app.state.model_manager\n        asr_model = model_manager.asr_model\n        lock = request.app.state.lock\n\n        # Perform ASR\n        start_time = time.time()\n        audios = [np.frombuffer(audio, dtype=np.float16) for audio in req.audios]\n        audios = [torch.from_numpy(audio).float() for audio in audios]\n\n        if any(audios.shape[-1] >= 30 * req.sample_rate for audios in audios):\n            raise HTTPException(status_code=400, content=\"Audio length is too long\")\n\n        transcriptions = batch_asr(\n            asr_model, lock, audios=audios, sr=req.sample_rate, language=req.language\n        )\n        logger.info(f\"[EXEC] ASR time: {(time.time() - start_time) * 1000:.2f}ms\")\n\n        # Return the response\n        return ormsgpack.packb(\n            ServeASRResponse(transcriptions=transcriptions),\n            option=ormsgpack.OPT_SERIALIZE_PYDANTIC,\n        )\n\n\nclass TTSView(HttpView):\n    \"\"\"\n    Perform text-to-speech on the input text.\n    \"\"\"\n\n    @classmethod\n    async def post(cls):\n        # Decode the request\n        payload = await request.data()\n        req = ServeTTSRequest(**payload)\n\n        # Get the model from the app\n        app_state = request.app.state\n        model_manager: ModelManager = app_state.model_manager\n        engine = model_manager.tts_inference_engine\n        sample_rate = engine.decoder_model.spec_transform.sample_rate\n\n        # Check if the text is too long\n        if app_state.max_text_length > 0 and len(req.text) > app_state.max_text_length:\n            raise HTTPException(\n                HTTPStatus.BAD_REQUEST,\n                content=f\"Text is too long, max length is {app_state.max_text_length}\",\n            )\n\n        # Check if streaming is enabled\n        if req.streaming and req.format != \"wav\":\n            raise HTTPException(\n                HTTPStatus.BAD_REQUEST,\n                content=\"Streaming only supports WAV format\",\n            )\n\n        # Perform TTS\n        if req.streaming:\n            return StreamResponse(\n                iterable=inference_async(req, engine),\n                headers={\n                    \"Content-Disposition\": f\"attachment; filename=audio.{req.format}\",\n                },\n                content_type=get_content_type(req.format),\n            )\n        else:\n            fake_audios = next(inference(req, engine))\n            buffer = io.BytesIO()\n            sf.write(\n                buffer,\n                fake_audios,\n                sample_rate,\n                format=req.format,\n            )\n\n            return StreamResponse(\n                iterable=buffer_to_async_generator(buffer.getvalue()),\n                headers={\n                    \"Content-Disposition\": f\"attachment; filename=audio.{req.format}\",\n                },\n                content_type=get_content_type(req.format),\n            )\n\n\nclass ChatView(HttpView):\n    \"\"\"\n    Perform chatbot inference on the input text.\n    \"\"\"\n\n    @classmethod\n    async def post(cls):\n        # Decode the request\n        payload = await request.data()\n        req = ServeChatRequest(**payload)\n\n        # Check that the number of samples requested is correct\n        if req.num_samples < 1 or req.num_samples > MAX_NUM_SAMPLES:\n            raise HTTPException(\n                HTTPStatus.BAD_REQUEST,\n                content=f\"Number of samples must be between 1 and {MAX_NUM_SAMPLES}\",\n            )\n\n        # Get the type of content provided\n        content_type = request.headers.get(\"Content-Type\", \"application/json\")\n        json_mode = \"application/json\" in content_type\n\n        # Get the models from the app\n        model_manager: ModelManager = request.app.state.model_manager\n        llama_queue = model_manager.llama_queue\n        tokenizer = model_manager.tokenizer\n        config = model_manager.config\n\n        device = request.app.state.device\n\n        # Get the response generators\n        response_generator = get_response_generator(\n            llama_queue, tokenizer, config, req, device, json_mode\n        )\n\n        # Return the response in the correct format\n        if req.streaming is False:\n            result = response_generator()\n            if json_mode:\n                return JSONResponse(result.model_dump())\n            else:\n                return ormsgpack.packb(result, option=ormsgpack.OPT_SERIALIZE_PYDANTIC)\n\n        return StreamResponse(\n            iterable=response_generator(), content_type=\"text/event-stream\"\n        )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/smart_pad.py",
    "content": "import random\nfrom multiprocessing import Pool\nfrom pathlib import Path\n\nimport click\nimport librosa\nimport torch.nn.functional as F\nimport torchaudio\nfrom tqdm import tqdm\n\nfrom tools.file import AUDIO_EXTENSIONS, list_files\n\nthreshold = 10 ** (-50 / 20.0)\n\n\ndef process(file):\n    waveform, sample_rate = torchaudio.load(str(file), backend=\"sox\")\n    if waveform.size(0) > 1:\n        waveform = waveform.mean(dim=0, keepdim=True)\n\n    loudness = librosa.feature.rms(\n        y=waveform.numpy().squeeze(), frame_length=2048, hop_length=512, center=True\n    )[0]\n\n    for i in range(len(loudness) - 1, 0, -1):\n        if loudness[i] > threshold:\n            break\n\n    end_silent_time = (len(loudness) - i) * 512 / sample_rate\n\n    if end_silent_time <= 0.3:\n        random_time = random.uniform(0.3, 0.7) - end_silent_time\n        waveform = F.pad(\n            waveform, (0, int(random_time * sample_rate)), mode=\"constant\", value=0\n        )\n\n    for i in range(len(loudness)):\n        if loudness[i] > threshold:\n            break\n\n    start_silent_time = i * 512 / sample_rate\n\n    if start_silent_time > 0.02:\n        waveform = waveform[:, int((start_silent_time - 0.02) * sample_rate) :]\n\n    torchaudio.save(uri=str(file), src=waveform, sample_rate=sample_rate)\n\n\n@click.command()\n@click.argument(\"source\", type=Path)\n@click.option(\"--num-workers\", type=int, default=12)\ndef main(source, num_workers):\n    files = list(list_files(source, AUDIO_EXTENSIONS, recursive=True))\n\n    with Pool(num_workers) as p:\n        list(tqdm(p.imap_unordered(process, files), total=len(files)))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/vqgan/create_train_split.py",
    "content": "import math\nfrom pathlib import Path\nfrom random import Random\n\nimport click\nfrom loguru import logger\nfrom pydub import AudioSegment\nfrom tqdm import tqdm\n\nfrom tools.file import AUDIO_EXTENSIONS, list_files, load_filelist\n\n\n@click.command()\n@click.argument(\"root\", type=click.Path(exists=True, path_type=Path))\n@click.option(\"--val-ratio\", type=float, default=None)\n@click.option(\"--val-count\", type=int, default=None)\n@click.option(\"--filelist\", default=None, type=Path)\n@click.option(\"--min-duration\", default=None, type=float)\n@click.option(\"--max-duration\", default=None, type=float)\ndef main(root, val_ratio, val_count, filelist, min_duration, max_duration):\n    if filelist:\n        files = [i[0] for i in load_filelist(filelist)]\n    else:\n        files = list_files(root, AUDIO_EXTENSIONS, recursive=True, sort=True)\n\n    if min_duration is None and max_duration is None:\n        filtered_files = list(map(str, [file.relative_to(root) for file in files]))\n    else:\n        filtered_files = []\n        for file in tqdm(files):\n            try:\n                audio = AudioSegment.from_file(str(file))\n                duration = len(audio) / 1000.0\n\n                if min_duration is not None and duration < min_duration:\n                    logger.info(\n                        f\"Skipping {file} due to duration {duration:.2f} < {min_duration:.2f}\"\n                    )\n                    continue\n\n                if max_duration is not None and duration > max_duration:\n                    logger.info(\n                        f\"Skipping {file} due to duration {duration:.2f} > {max_duration:.2f}\"\n                    )\n                    continue\n\n                filtered_files.append(str(file.relative_to(root)))\n            except Exception as e:\n                logger.info(f\"Error processing {file}: {e}\")\n\n    logger.info(\n        f\"Found {len(files)} files, remaining {len(filtered_files)} files after filtering\"\n    )\n\n    Random(42).shuffle(filtered_files)\n\n    if val_count is None and val_ratio is None:\n        logger.info(\"Validation ratio and count not specified, using min(20%, 100)\")\n        val_size = min(100, math.ceil(len(filtered_files) * 0.2))\n    elif val_count is not None and val_ratio is not None:\n        logger.error(\"Cannot specify both val_count and val_ratio\")\n        return\n    elif val_count is not None:\n        if val_count < 1 or val_count > len(filtered_files):\n            logger.error(\"val_count must be between 1 and number of files\")\n            return\n        val_size = val_count\n    else:\n        val_size = math.ceil(len(filtered_files) * val_ratio)\n\n    logger.info(f\"Using {val_size} files for validation\")\n\n    with open(root / \"vq_train_filelist.txt\", \"w\", encoding=\"utf-8\") as f:\n        f.write(\"\\n\".join(filtered_files[val_size:]))\n\n    with open(root / \"vq_val_filelist.txt\", \"w\", encoding=\"utf-8\") as f:\n        f.write(\"\\n\".join(filtered_files[:val_size]))\n\n    logger.info(\"Done\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/vqgan/extract_vq.py",
    "content": "import os\nimport subprocess as sp\nimport sys\nimport time\nfrom datetime import timedelta\nfrom functools import lru_cache\nfrom pathlib import Path\nfrom random import Random\n\nimport click\nimport numpy as np\nimport torch\nimport torchaudio\nfrom hydra import compose, initialize\nfrom hydra.utils import instantiate\nfrom lightning import LightningModule\nfrom loguru import logger\nfrom omegaconf import OmegaConf\n\nfrom tools.file import AUDIO_EXTENSIONS, list_files, load_filelist\n\n# register eval resolver\nOmegaConf.register_new_resolver(\"eval\", eval)\n# This file is used to convert the audio files to text files using the Whisper model.\n# It's mainly used to generate the training data for the VQ model.\n\nbackends = torchaudio.list_audio_backends()\n\nif \"ffmpeg\" in backends:\n    backend = \"ffmpeg\"\nelse:\n    backend = \"soundfile\"\n\nRANK = int(os.environ.get(\"SLURM_PROCID\", 0))\nWORLD_SIZE = int(os.environ.get(\"SLURM_NTASKS\", 1))\n\nlogger_format = (\n    \"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | \"\n    \"<level>{level: <8}</level> | \"\n    \"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | \"\n    \"{extra[rank]} - <level>{message}</level>\"\n)\nlogger.configure(extra={\"rank\": f\"RANK: {RANK} / {WORLD_SIZE}\"})\nlogger.remove()\nlogger.add(sys.stderr, format=logger_format)\n\n\n@lru_cache(maxsize=1)\ndef get_model(\n    config_name: str = \"firefly_gan_vq\",\n    checkpoint_path: str = \"checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth\",\n    device: str | torch.device = \"cuda\",\n):\n    with initialize(version_base=\"1.3\", config_path=\"../../fish_speech/configs\"):\n        cfg = compose(config_name=config_name)\n\n    model = instantiate(cfg)\n    state_dict = torch.load(\n        checkpoint_path,\n        map_location=device,\n    )\n    if \"state_dict\" in state_dict:\n        state_dict = state_dict[\"state_dict\"]\n\n    if any(\"generator\" in k for k in state_dict):\n        state_dict = {\n            k.replace(\"generator.\", \"\"): v\n            for k, v in state_dict.items()\n            if \"generator.\" in k\n        }\n\n    model.load_state_dict(state_dict, strict=False)\n    model.eval()\n    model.to(device)\n\n    logger.info(f\"Loaded model\")\n    return model\n\n\n@torch.inference_mode()\ndef process_batch(files: list[Path], model) -> float:\n    wavs = []\n    audio_lengths = []\n    new_files = []\n    max_length = total_time = 0\n\n    for file in files:\n        try:\n            wav, sr = torchaudio.load(\n                str(file), backend=backend\n            )  # Need to install libsox-dev\n        except Exception as e:\n            logger.error(f\"Error reading {file}: {e}\")\n            continue\n\n        if wav.shape[0] > 1:\n            wav = wav.mean(dim=0, keepdim=True)\n\n        wav = torchaudio.functional.resample(\n            wav.cuda(), sr, model.spec_transform.sample_rate\n        )[0]\n        total_time += len(wav) / model.spec_transform.sample_rate\n        max_length = max(max_length, len(wav))\n\n        wavs.append(wav)\n        audio_lengths.append(len(wav))\n        new_files.append(file)\n\n    files = new_files\n\n    # Pad to max length\n    for i, wav in enumerate(wavs):\n        wavs[i] = torch.nn.functional.pad(wav, (0, max_length - len(wav)), \"constant\")\n\n    audios = torch.stack(wavs, dim=0)[:, None]\n    audio_lengths = torch.tensor(audio_lengths, device=model.device, dtype=torch.long)\n\n    # Calculate lengths\n    indices, feature_lengths = model.encode(audios, audio_lengths)\n\n    # Save to disk\n    outputs = indices.cpu().numpy()\n\n    for file, length, feature, audio_length in zip(\n        files, feature_lengths, outputs, audio_lengths\n    ):\n        feature = feature[:, :length]\n\n        # (T,)\n        with open(file.with_suffix(\".npy\"), \"wb\") as f:\n            np.save(f, feature)\n\n    return total_time\n\n\n@click.command()\n@click.argument(\"folder\")\n@click.option(\"--num-workers\", default=1)\n@click.option(\"--config-name\", default=\"firefly_gan_vq\")\n@click.option(\n    \"--checkpoint-path\",\n    default=\"checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth\",\n)\n@click.option(\"--batch-size\", default=64)\n@click.option(\"--filelist\", default=None, type=Path)\ndef main(\n    folder: str,\n    num_workers: int,\n    config_name: str,\n    checkpoint_path: str,\n    batch_size: int,\n    filelist: Path,\n):\n    if num_workers > 1 and WORLD_SIZE != num_workers:\n        assert WORLD_SIZE == 1, \"You should either use SLURM or this launcher, not both\"\n\n        logger.info(f\"Spawning {num_workers} workers\")\n\n        if torch.cuda.is_available():\n            visible_devices = os.environ.get(\"CUDA_VISIBLE_DEVICES\", None)\n            if visible_devices is None:\n                visible_devices = list(range(torch.cuda.device_count()))\n            else:\n                visible_devices = visible_devices.split(\",\")\n        else:\n            # Set to empty string to avoid using GPU\n            visible_devices = [\"\"]\n\n        processes = []\n        for i in range(num_workers):\n            env = os.environ.copy()\n            env[\"CUDA_VISIBLE_DEVICES\"] = str(visible_devices[i % len(visible_devices)])\n            env[\"SLURM_PROCID\"] = str(i)\n            env[\"SLURM_NTASKS\"] = str(num_workers)\n\n            processes.append(\n                sp.Popen(\n                    [sys.executable] + sys.argv.copy(),\n                    env=env,\n                )\n            )\n\n        for p in processes:\n            p.wait()\n\n        logger.info(f\"All workers finished\")\n        return\n\n    # This is a worker\n    logger.info(f\"Starting worker\")\n    if filelist:\n        files = [i[0] for i in load_filelist(filelist)]\n    else:\n        files = list_files(folder, AUDIO_EXTENSIONS, recursive=True, sort=False)\n\n    print(f\"Found {len(files)} files\")\n    files = [Path(f) for f in files if not Path(f).with_suffix(\".npy\").exists()]\n\n    total_files = len(files)\n    files = files[RANK::WORLD_SIZE]\n    logger.info(f\"Processing {len(files)}/{total_files} files\")\n\n    # Batch processing\n    total_time = 0\n    begin_time = time.time()\n    processed_files = 0\n    model = get_model(config_name, checkpoint_path)\n\n    for n_batch, idx in enumerate(range(0, len(files), batch_size)):\n        batch = files[idx : idx + batch_size]\n        batch_time = process_batch(batch, model)\n\n        total_time += batch_time\n        processed_files += len(batch)\n\n        if (n_batch + 1) % 10 == 0:\n            eta = (\n                (time.time() - begin_time)\n                / processed_files\n                * (len(files) - processed_files)\n            )\n            logger.info(\n                f\"Processed {processed_files} files, {total_time / 3600:.2f} hours of audio, \"\n                + f\"ETA: {timedelta(seconds=round(eta))}s\"\n            )\n\n    logger.info(\n        f\"Finished processing {len(files)} files, {total_time / 3600:.2f} hours of audio\"\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/vqgan/inference.py",
    "content": "from pathlib import Path\n\nimport click\nimport hydra\nimport numpy as np\nimport soundfile as sf\nimport torch\nimport torchaudio\nfrom hydra import compose, initialize\nfrom hydra.utils import instantiate\nfrom loguru import logger\nfrom omegaconf import OmegaConf\n\nfrom tools.file import AUDIO_EXTENSIONS\n\n# register eval resolver\nOmegaConf.register_new_resolver(\"eval\", eval)\n\n\ndef load_model(config_name, checkpoint_path, device=\"cuda\"):\n    hydra.core.global_hydra.GlobalHydra.instance().clear()\n    with initialize(version_base=\"1.3\", config_path=\"../../fish_speech/configs\"):\n        cfg = compose(config_name=config_name)\n\n    model = instantiate(cfg)\n    state_dict = torch.load(\n        checkpoint_path, map_location=device, mmap=True, weights_only=True\n    )\n    if \"state_dict\" in state_dict:\n        state_dict = state_dict[\"state_dict\"]\n\n    if any(\"generator\" in k for k in state_dict):\n        state_dict = {\n            k.replace(\"generator.\", \"\"): v\n            for k, v in state_dict.items()\n            if \"generator.\" in k\n        }\n\n    result = model.load_state_dict(state_dict, strict=False, assign=True)\n    model.eval()\n    model.to(device)\n\n    logger.info(f\"Loaded model: {result}\")\n    return model\n\n\n@torch.no_grad()\n@click.command()\n@click.option(\n    \"--input-path\",\n    \"-i\",\n    default=\"test.wav\",\n    type=click.Path(exists=True, path_type=Path),\n)\n@click.option(\n    \"--output-path\", \"-o\", default=\"fake.wav\", type=click.Path(path_type=Path)\n)\n@click.option(\"--config-name\", default=\"firefly_gan_vq\")\n@click.option(\n    \"--checkpoint-path\",\n    default=\"checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth\",\n)\n@click.option(\n    \"--device\",\n    \"-d\",\n    default=\"cuda\",\n)\ndef main(input_path, output_path, config_name, checkpoint_path, device):\n    model = load_model(config_name, checkpoint_path, device=device)\n\n    if input_path.suffix in AUDIO_EXTENSIONS:\n        logger.info(f\"Processing in-place reconstruction of {input_path}\")\n\n        # Load audio\n        audio, sr = torchaudio.load(str(input_path))\n        if audio.shape[0] > 1:\n            audio = audio.mean(0, keepdim=True)\n        audio = torchaudio.functional.resample(\n            audio, sr, model.spec_transform.sample_rate\n        )\n\n        audios = audio[None].to(device)\n        logger.info(\n            f\"Loaded audio with {audios.shape[2] / model.spec_transform.sample_rate:.2f} seconds\"\n        )\n\n        # VQ Encoder\n        audio_lengths = torch.tensor([audios.shape[2]], device=device, dtype=torch.long)\n        indices = model.encode(audios, audio_lengths)[0][0]\n\n        logger.info(f\"Generated indices of shape {indices.shape}\")\n\n        # Save indices\n        np.save(output_path.with_suffix(\".npy\"), indices.cpu().numpy())\n    elif input_path.suffix == \".npy\":\n        logger.info(f\"Processing precomputed indices from {input_path}\")\n        indices = np.load(input_path)\n        indices = torch.from_numpy(indices).to(device).long()\n        assert indices.ndim == 2, f\"Expected 2D indices, got {indices.ndim}\"\n    else:\n        raise ValueError(f\"Unknown input type: {input_path}\")\n\n    # Restore\n    feature_lengths = torch.tensor([indices.shape[1]], device=device)\n    fake_audios, _ = model.decode(\n        indices=indices[None], feature_lengths=feature_lengths\n    )\n    audio_time = fake_audios.shape[-1] / model.spec_transform.sample_rate\n\n    logger.info(\n        f\"Generated audio of shape {fake_audios.shape}, equivalent to {audio_time:.2f} seconds from {indices.shape[1]} features, features/second: {indices.shape[1] / audio_time:.2f}\"\n    )\n\n    # Save audio\n    fake_audio = fake_audios[0, 0].float().cpu().numpy()\n    sf.write(output_path, fake_audio, model.spec_transform.sample_rate)\n    logger.info(f\"Saved audio to {output_path}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/webui/__init__.py",
    "content": "from typing import Callable\n\nimport gradio as gr\n\nfrom fish_speech.i18n import i18n\nfrom tools.inference_engine.utils import normalize_text\nfrom tools.webui.variables import HEADER_MD, TEXTBOX_PLACEHOLDER\n\n\ndef build_app(inference_fct: Callable, theme: str = \"light\") -> gr.Blocks:\n    with gr.Blocks(theme=gr.themes.Base()) as app:\n        gr.Markdown(HEADER_MD)\n\n        # Use light theme by default\n        app.load(\n            None,\n            None,\n            js=\"() => {const params = new URLSearchParams(window.location.search);if (!params.has('__theme')) {params.set('__theme', '%s');window.location.search = params.toString();}}\"\n            % theme,\n        )\n\n        # Inference\n        with gr.Row():\n            with gr.Column(scale=3):\n                text = gr.Textbox(\n                    label=i18n(\"Input Text\"), placeholder=TEXTBOX_PLACEHOLDER, lines=10\n                )\n                refined_text = gr.Textbox(\n                    label=i18n(\"Realtime Transform Text\"),\n                    placeholder=i18n(\n                        \"Normalization Result Preview (Currently Only Chinese)\"\n                    ),\n                    lines=5,\n                    interactive=False,\n                )\n\n                with gr.Row():\n                    normalize = gr.Checkbox(\n                        label=i18n(\"Text Normalization\"),\n                        value=False,\n                    )\n\n                with gr.Row():\n                    with gr.Column():\n                        with gr.Tab(label=i18n(\"Advanced Config\")):\n                            with gr.Row():\n                                chunk_length = gr.Slider(\n                                    label=i18n(\"Iterative Prompt Length, 0 means off\"),\n                                    minimum=0,\n                                    maximum=300,\n                                    value=200,\n                                    step=8,\n                                )\n\n                                max_new_tokens = gr.Slider(\n                                    label=i18n(\n                                        \"Maximum tokens per batch, 0 means no limit\"\n                                    ),\n                                    minimum=0,\n                                    maximum=2048,\n                                    value=0,\n                                    step=8,\n                                )\n\n                            with gr.Row():\n                                top_p = gr.Slider(\n                                    label=\"Top-P\",\n                                    minimum=0.6,\n                                    maximum=0.9,\n                                    value=0.7,\n                                    step=0.01,\n                                )\n\n                                repetition_penalty = gr.Slider(\n                                    label=i18n(\"Repetition Penalty\"),\n                                    minimum=1,\n                                    maximum=1.5,\n                                    value=1.2,\n                                    step=0.01,\n                                )\n\n                            with gr.Row():\n                                temperature = gr.Slider(\n                                    label=\"Temperature\",\n                                    minimum=0.6,\n                                    maximum=0.9,\n                                    value=0.7,\n                                    step=0.01,\n                                )\n                                seed = gr.Number(\n                                    label=\"Seed\",\n                                    info=\"0 means randomized inference, otherwise deterministic\",\n                                    value=0,\n                                )\n\n                        with gr.Tab(label=i18n(\"Reference Audio\")):\n                            with gr.Row():\n                                gr.Markdown(\n                                    i18n(\n                                        \"5 to 10 seconds of reference audio, useful for specifying speaker.\"\n                                    )\n                                )\n                            with gr.Row():\n                                reference_id = gr.Textbox(\n                                    label=i18n(\"Reference ID\"),\n                                    placeholder=\"Leave empty to use uploaded references\",\n                                )\n\n                            with gr.Row():\n                                use_memory_cache = gr.Radio(\n                                    label=i18n(\"Use Memory Cache\"),\n                                    choices=[\"on\", \"off\"],\n                                    value=\"on\",\n                                )\n\n                            with gr.Row():\n                                reference_audio = gr.Audio(\n                                    label=i18n(\"Reference Audio\"),\n                                    type=\"filepath\",\n                                )\n                            with gr.Row():\n                                reference_text = gr.Textbox(\n                                    label=i18n(\"Reference Text\"),\n                                    lines=1,\n                                    placeholder=\"在一无所知中，梦里的一天结束了，一个新的「轮回」便会开始。\",\n                                    value=\"\",\n                                )\n\n            with gr.Column(scale=3):\n                with gr.Row():\n                    error = gr.HTML(\n                        label=i18n(\"Error Message\"),\n                        visible=True,\n                    )\n                with gr.Row():\n                    audio = gr.Audio(\n                        label=i18n(\"Generated Audio\"),\n                        type=\"numpy\",\n                        interactive=False,\n                        visible=True,\n                    )\n\n                with gr.Row():\n                    with gr.Column(scale=3):\n                        generate = gr.Button(\n                            value=\"\\U0001F3A7 \" + i18n(\"Generate\"),\n                            variant=\"primary\",\n                        )\n\n        text.input(fn=normalize_text, inputs=[text, normalize], outputs=[refined_text])\n\n        # Submit\n        generate.click(\n            inference_fct,\n            [\n                refined_text,\n                normalize,\n                reference_id,\n                reference_audio,\n                reference_text,\n                max_new_tokens,\n                chunk_length,\n                top_p,\n                repetition_penalty,\n                temperature,\n                seed,\n                use_memory_cache,\n            ],\n            [audio, error],\n            concurrency_limit=1,\n        )\n\n    return app\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/webui/inference.py",
    "content": "import html\nfrom functools import partial\nfrom typing import Any, Callable\n\nfrom fish_speech.i18n import i18n\nfrom tools.schema import ServeReferenceAudio, ServeTTSRequest\n\n\ndef inference_wrapper(\n    text,\n    normalize,\n    reference_id,\n    reference_audio,\n    reference_text,\n    max_new_tokens,\n    chunk_length,\n    top_p,\n    repetition_penalty,\n    temperature,\n    seed,\n    use_memory_cache,\n    engine,\n):\n    \"\"\"\n    Wrapper for the inference function.\n    Used in the Gradio interface.\n    \"\"\"\n\n    if reference_audio:\n        references = get_reference_audio(reference_audio, reference_text)\n    else:\n        references = []\n\n    req = ServeTTSRequest(\n        text=text,\n        normalize=normalize,\n        reference_id=reference_id if reference_id else None,\n        references=references,\n        max_new_tokens=max_new_tokens,\n        chunk_length=chunk_length,\n        top_p=top_p,\n        repetition_penalty=repetition_penalty,\n        temperature=temperature,\n        seed=int(seed) if seed else None,\n        use_memory_cache=use_memory_cache,\n    )\n\n    for result in engine.inference(req):\n        match result.code:\n            case \"final\":\n                return result.audio, None\n            case \"error\":\n                return None, build_html_error_message(i18n(result.error))\n            case _:\n                pass\n\n    return None, i18n(\"No audio generated\")\n\n\ndef get_reference_audio(reference_audio: str, reference_text: str) -> list:\n    \"\"\"\n    Get the reference audio bytes.\n    \"\"\"\n\n    with open(reference_audio, \"rb\") as audio_file:\n        audio_bytes = audio_file.read()\n\n    return [ServeReferenceAudio(audio=audio_bytes, text=reference_text)]\n\n\ndef build_html_error_message(error: Any) -> str:\n\n    error = error if isinstance(error, Exception) else Exception(\"Unknown error\")\n\n    return f\"\"\"\n    <div style=\"color: red; \n    font-weight: bold;\">\n        {html.escape(str(error))}\n    </div>\n    \"\"\"\n\n\ndef get_inference_wrapper(engine) -> Callable:\n    \"\"\"\n    Get the inference function with the immutable arguments.\n    \"\"\"\n\n    return partial(\n        inference_wrapper,\n        engine=engine,\n    )\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/webui/variables.py",
    "content": "from fish_speech.i18n import i18n\n\nHEADER_MD = f\"\"\"# Fish Speech\n\n{i18n(\"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).\")}  \n\n{i18n(\"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1.5).\")}  \n\n{i18n(\"Related code and weights are released under CC BY-NC-SA 4.0 License.\")}  \n\n{i18n(\"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.\")}  \n\"\"\"\n\nTEXTBOX_PLACEHOLDER = i18n(\"Put your text here.\")\n"
  },
  {
    "path": "xinference/thirdparty/fish_speech/tools/whisper_asr.py",
    "content": "\"\"\"\nUsed to transcribe all audio files in one folder into another folder.\ne.g.\nDirectory structure:\n--pre_data_root\n----SP_1\n------01.wav\n------02.wav\n------......\n----SP_2\n------01.wav\n------02.wav\n------......\nUse \npython tools/whisper_asr.py --audio-dir pre_data_root/SP_1 --save-dir data/SP_1 \nto transcribe the first speaker.\n\nUse \npython tools/whisper_asr.py --audio-dir pre_data_root/SP_2 --save-dir data/SP_2 \nto transcribe the second speaker.\n\nNote: Be aware of your audio sample rate, which defaults to 44.1kHz.\n\"\"\"\n\nimport re\nfrom pathlib import Path\n\nimport click\nimport soundfile as sf\nfrom faster_whisper import WhisperModel\nfrom loguru import logger\nfrom pydub import AudioSegment\nfrom tqdm import tqdm\n\nfrom tools.file import AUDIO_EXTENSIONS, list_files\n\n\n@click.command()\n@click.option(\"--model-size\", default=\"large-v3\", help=\"Size of the Whisper model\")\n@click.option(\n    \"--compute-type\",\n    default=\"float16\",\n    help=\"Computation Precision of the Whisper model [float16 / int8_float16 / int8]\",\n)\n@click.option(\"--audio-dir\", required=True, help=\"Directory containing audio files\")\n@click.option(\n    \"--save-dir\", required=True, help=\"Directory to save processed audio files\"\n)\n@click.option(\n    \"--sample-rate\",\n    default=44100,\n    type=int,\n    help=\"Output sample rate, default to input sample rate\",\n)\n@click.option(\"--device\", default=\"cuda\", help=\"Device to use [cuda / cpu]\")\n@click.option(\"--language\", default=\"auto\", help=\"Language of the transcription\")\n@click.option(\"--initial-prompt\", default=None, help=\"Initial prompt for transcribing\")\ndef main(\n    model_size,\n    compute_type,\n    audio_dir,\n    save_dir,\n    sample_rate,\n    device,\n    language,\n    initial_prompt,\n):\n    logger.info(\"Loading / Downloading Faster Whisper model...\")\n\n    model = WhisperModel(\n        model_size,\n        device=device,\n        compute_type=compute_type,\n        download_root=\"faster_whisper\",\n    )\n\n    logger.info(\"Model loaded.\")\n\n    save_path = Path(save_dir)\n    save_path.mkdir(parents=True, exist_ok=True)\n\n    audio_files = list_files(\n        path=audio_dir, extensions=AUDIO_EXTENSIONS, recursive=True\n    )\n\n    for file_path in tqdm(audio_files, desc=\"Processing audio file\"):\n        file_stem = file_path.stem\n        file_suffix = file_path.suffix\n\n        rel_path = Path(file_path).relative_to(audio_dir)\n        (save_path / rel_path.parent).mkdir(parents=True, exist_ok=True)\n\n        audio = AudioSegment.from_file(file_path)\n\n        segments, info = model.transcribe(\n            file_path,\n            beam_size=5,\n            language=None if language == \"auto\" else language,\n            initial_prompt=initial_prompt,\n        )\n\n        print(\n            \"Detected language '%s' with probability %f\"\n            % (info.language, info.language_probability)\n        )\n        print(\"Total len(ms): \", len(audio))\n\n        whole_text = None\n        for segment in segments:\n            id, start, end, text = (\n                segment.id,\n                segment.start,\n                segment.end,\n                segment.text,\n            )\n            print(\"Segment %03d [%.2fs -> %.2fs] %s\" % (id, start, end, text))\n            if not whole_text:\n                whole_text = text\n            else:\n                whole_text += \", \" + text\n\n        whole_text += \".\"\n\n        audio_save_path = save_path / rel_path.parent / f\"{file_stem}{file_suffix}\"\n        audio.export(audio_save_path, format=file_suffix[1:])\n        print(f\"Exported {audio_save_path}\")\n\n        transcript_save_path = save_path / rel_path.parent / f\"{file_stem}.lab\"\n        with open(\n            transcript_save_path,\n            \"w\",\n            encoding=\"utf-8\",\n        ) as f:\n            f.write(whole_text)\n\n\nif __name__ == \"__main__\":\n    main()\n    exit(0)\n\n    audio = AudioSegment.from_wav(\n        r\"D:\\PythonProject\\原神语音中文\\胡桃\\vo_hutao_draw_appear.wav\"\n    )\n\n    model_size = \"large-v3\"\n\n    model = WhisperModel(\n        model_size,\n        device=\"cuda\",\n        compute_type=\"float16\",\n        download_root=\"faster_whisper\",\n    )\n\n    segments, info = model.transcribe(\n        r\"D:\\PythonProject\\原神语音中文\\胡桃\\vo_hutao_draw_appear.wav\",\n        beam_size=5,\n    )\n\n    print(\n        \"Detected language '%s' with probability %f\"\n        % (info.language, info.language_probability)\n    )\n    print(\"Total len(ms): \", len(audio))\n\n    for i, segment in enumerate(segments):\n        print(\n            \"Segment %03d [%.2fs -> %.2fs] %s\"\n            % (i, segment.start, segment.end, segment.text)\n        )\n        start_ms = int(segment.start * 1000)\n        end_ms = int(segment.end * 1000)\n        segment_audio = audio[start_ms:end_ms]\n        segment_audio.export(f\"segment_{i:03d}.wav\", format=\"wav\")\n        print(f\"Exported segment_{i:03d}.wav\")\n\n    print(\"All segments have been exported.\")\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/ECAPA_TDNN.py",
    "content": "\"\"\"A popular speaker recognition and diarization model.\n\nAuthors\n * Hwidong Na 2020\n\"\"\"\n\nimport torch  # noqa: F401\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom indextts.BigVGAN.nnet.CNN import Conv1d as _Conv1d\nfrom indextts.BigVGAN.nnet.linear import Linear\nfrom indextts.BigVGAN.nnet.normalization import BatchNorm1d as _BatchNorm1d\n\n\ndef length_to_mask(length, max_len=None, dtype=None, device=None):\n    \"\"\"Creates a binary mask for each sequence.\n\n    Reference: https://discuss.pytorch.org/t/how-to-generate-variable-length-mask/23397/3\n\n    Arguments\n    ---------\n    length : torch.LongTensor\n        Containing the length of each sequence in the batch. Must be 1D.\n    max_len : int\n        Max length for the mask, also the size of the second dimension.\n    dtype : torch.dtype, default: None\n        The dtype of the generated mask.\n    device: torch.device, default: None\n        The device to put the mask variable.\n\n    Returns\n    -------\n    mask : tensor\n        The binary mask.\n\n    Example\n    -------\n    >>> length=torch.Tensor([1,2,3])\n    >>> mask=length_to_mask(length)\n    >>> mask\n    tensor([[1., 0., 0.],\n            [1., 1., 0.],\n            [1., 1., 1.]])\n    \"\"\"\n    assert len(length.shape) == 1\n\n    if max_len is None:\n        max_len = length.max().long().item()  # using arange to generate mask\n    mask = torch.arange(\n        max_len, device=length.device, dtype=length.dtype\n    ).expand(len(length), max_len) < length.unsqueeze(1)\n\n    if dtype is None:\n        dtype = length.dtype\n\n    if device is None:\n        device = length.device\n\n    mask = torch.as_tensor(mask, dtype=dtype, device=device)\n    return mask\n\n\n# Skip transpose as much as possible for efficiency\nclass Conv1d(_Conv1d):\n    \"\"\"1D convolution. Skip transpose is used to improve efficiency.\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(skip_transpose=True, *args, **kwargs)\n\n\nclass BatchNorm1d(_BatchNorm1d):\n    \"\"\"1D batch normalization. Skip transpose is used to improve efficiency.\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(skip_transpose=True, *args, **kwargs)\n\n\nclass TDNNBlock(nn.Module):\n    \"\"\"An implementation of TDNN.\n\n    Arguments\n    ---------\n    in_channels : int\n        Number of input channels.\n    out_channels : int\n        The number of output channels.\n    kernel_size : int\n        The kernel size of the TDNN blocks.\n    dilation : int\n        The dilation of the TDNN block.\n    activation : torch class\n        A class for constructing the activation layers.\n    groups : int\n        The groups size of the TDNN blocks.\n\n    Example\n    -------\n    >>> inp_tensor = torch.rand([8, 120, 64]).transpose(1, 2)\n    >>> layer = TDNNBlock(64, 64, kernel_size=3, dilation=1)\n    >>> out_tensor = layer(inp_tensor).transpose(1, 2)\n    >>> out_tensor.shape\n    torch.Size([8, 120, 64])\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        kernel_size,\n        dilation,\n        activation=nn.ReLU,\n        groups=1,\n    ):\n        super().__init__()\n        self.conv = Conv1d(\n            in_channels=in_channels,\n            out_channels=out_channels,\n            kernel_size=kernel_size,\n            dilation=dilation,\n            groups=groups,\n        )\n        self.activation = activation()\n        self.norm = BatchNorm1d(input_size=out_channels)\n\n    def forward(self, x):\n        \"\"\"Processes the input tensor x and returns an output tensor.\"\"\"\n        return self.norm(self.activation(self.conv(x)))\n\n\nclass Res2NetBlock(torch.nn.Module):\n    \"\"\"An implementation of Res2NetBlock w/ dilation.\n\n    Arguments\n    ---------\n    in_channels : int\n        The number of channels expected in the input.\n    out_channels : int\n        The number of output channels.\n    scale : int\n        The scale of the Res2Net block.\n    kernel_size: int\n        The kernel size of the Res2Net block.\n    dilation : int\n        The dilation of the Res2Net block.\n\n    Example\n    -------\n    >>> inp_tensor = torch.rand([8, 120, 64]).transpose(1, 2)\n    >>> layer = Res2NetBlock(64, 64, scale=4, dilation=3)\n    >>> out_tensor = layer(inp_tensor).transpose(1, 2)\n    >>> out_tensor.shape\n    torch.Size([8, 120, 64])\n    \"\"\"\n\n    def __init__(\n        self, in_channels, out_channels, scale=8, kernel_size=3, dilation=1\n    ):\n        super().__init__()\n        assert in_channels % scale == 0\n        assert out_channels % scale == 0\n\n        in_channel = in_channels // scale\n        hidden_channel = out_channels // scale\n\n        self.blocks = nn.ModuleList(\n            [\n                TDNNBlock(\n                    in_channel,\n                    hidden_channel,\n                    kernel_size=kernel_size,\n                    dilation=dilation,\n                )\n                for i in range(scale - 1)\n            ]\n        )\n        self.scale = scale\n\n    def forward(self, x):\n        \"\"\"Processes the input tensor x and returns an output tensor.\"\"\"\n        y = []\n        for i, x_i in enumerate(torch.chunk(x, self.scale, dim=1)):\n            if i == 0:\n                y_i = x_i\n            elif i == 1:\n                y_i = self.blocks[i - 1](x_i)\n            else:\n                y_i = self.blocks[i - 1](x_i + y_i)\n            y.append(y_i)\n        y = torch.cat(y, dim=1)\n        return y\n\n\nclass SEBlock(nn.Module):\n    \"\"\"An implementation of squeeze-and-excitation block.\n\n    Arguments\n    ---------\n    in_channels : int\n        The number of input channels.\n    se_channels : int\n        The number of output channels after squeeze.\n    out_channels : int\n        The number of output channels.\n\n    Example\n    -------\n    >>> inp_tensor = torch.rand([8, 120, 64]).transpose(1, 2)\n    >>> se_layer = SEBlock(64, 16, 64)\n    >>> lengths = torch.rand((8,))\n    >>> out_tensor = se_layer(inp_tensor, lengths).transpose(1, 2)\n    >>> out_tensor.shape\n    torch.Size([8, 120, 64])\n    \"\"\"\n\n    def __init__(self, in_channels, se_channels, out_channels):\n        super().__init__()\n\n        self.conv1 = Conv1d(\n            in_channels=in_channels, out_channels=se_channels, kernel_size=1\n        )\n        self.relu = torch.nn.ReLU(inplace=True)\n        self.conv2 = Conv1d(\n            in_channels=se_channels, out_channels=out_channels, kernel_size=1\n        )\n        self.sigmoid = torch.nn.Sigmoid()\n\n    def forward(self, x, lengths=None):\n        \"\"\"Processes the input tensor x and returns an output tensor.\"\"\"\n        L = x.shape[-1]\n        if lengths is not None:\n            mask = length_to_mask(lengths * L, max_len=L, device=x.device)\n            mask = mask.unsqueeze(1)\n            total = mask.sum(dim=2, keepdim=True)\n            s = (x * mask).sum(dim=2, keepdim=True) / total\n        else:\n            s = x.mean(dim=2, keepdim=True)\n\n        s = self.relu(self.conv1(s))\n        s = self.sigmoid(self.conv2(s))\n\n        return s * x\n\n\nclass AttentiveStatisticsPooling(nn.Module):\n    \"\"\"This class implements an attentive statistic pooling layer for each channel.\n    It returns the concatenated mean and std of the input tensor.\n\n    Arguments\n    ---------\n    channels: int\n        The number of input channels.\n    attention_channels: int\n        The number of attention channels.\n    global_context: bool\n        Whether to use global context.\n\n    Example\n    -------\n    >>> inp_tensor = torch.rand([8, 120, 64]).transpose(1, 2)\n    >>> asp_layer = AttentiveStatisticsPooling(64)\n    >>> lengths = torch.rand((8,))\n    >>> out_tensor = asp_layer(inp_tensor, lengths).transpose(1, 2)\n    >>> out_tensor.shape\n    torch.Size([8, 1, 128])\n    \"\"\"\n\n    def __init__(self, channels, attention_channels=128, global_context=True):\n        super().__init__()\n\n        self.eps = 1e-12\n        self.global_context = global_context\n        if global_context:\n            self.tdnn = TDNNBlock(channels * 3, attention_channels, 1, 1)\n        else:\n            self.tdnn = TDNNBlock(channels, attention_channels, 1, 1)\n        self.tanh = nn.Tanh()\n        self.conv = Conv1d(\n            in_channels=attention_channels, out_channels=channels, kernel_size=1\n        )\n\n    def forward(self, x, lengths=None):\n        \"\"\"Calculates mean and std for a batch (input tensor).\n\n        Arguments\n        ---------\n        x : torch.Tensor\n            Tensor of shape [N, C, L].\n        lengths : torch.Tensor\n            The corresponding relative lengths of the inputs.\n\n        Returns\n        -------\n        pooled_stats : torch.Tensor\n            mean and std of batch\n        \"\"\"\n        L = x.shape[-1]\n\n        def _compute_statistics(x, m, dim=2, eps=self.eps):\n            mean = (m * x).sum(dim)\n            std = torch.sqrt(\n                (m * (x - mean.unsqueeze(dim)).pow(2)).sum(dim).clamp(eps)\n            )\n            return mean, std\n\n        if lengths is None:\n            lengths = torch.ones(x.shape[0], device=x.device)\n\n        # Make binary mask of shape [N, 1, L]\n        mask = length_to_mask(lengths * L, max_len=L, device=x.device)\n        mask = mask.unsqueeze(1)\n\n        # Expand the temporal context of the pooling layer by allowing the\n        # self-attention to look at global properties of the utterance.\n        if self.global_context:\n            # torch.std is unstable for backward computation\n            # https://github.com/pytorch/pytorch/issues/4320\n            total = mask.sum(dim=2, keepdim=True).float()\n            mean, std = _compute_statistics(x, mask / total)\n            mean = mean.unsqueeze(2).repeat(1, 1, L)\n            std = std.unsqueeze(2).repeat(1, 1, L)\n            attn = torch.cat([x, mean, std], dim=1)\n        else:\n            attn = x\n\n        # Apply layers\n        attn = self.conv(self.tanh(self.tdnn(attn)))\n\n        # Filter out zero-paddings\n        attn = attn.masked_fill(mask == 0, float(\"-inf\"))\n\n        attn = F.softmax(attn, dim=2)\n        mean, std = _compute_statistics(x, attn)\n        # Append mean and std of the batch\n        pooled_stats = torch.cat((mean, std), dim=1)\n        pooled_stats = pooled_stats.unsqueeze(2)\n\n        return pooled_stats\n\n\nclass SERes2NetBlock(nn.Module):\n    \"\"\"An implementation of building block in ECAPA-TDNN, i.e.,\n    TDNN-Res2Net-TDNN-SEBlock.\n\n    Arguments\n    ---------\n    in_channels: int\n        Expected size of input channels.\n    out_channels: int\n        The number of output channels.\n    res2net_scale: int\n        The scale of the Res2Net block.\n    se_channels : int\n        The number of output channels after squeeze.\n    kernel_size: int\n        The kernel size of the TDNN blocks.\n    dilation: int\n        The dilation of the Res2Net block.\n    activation : torch class\n        A class for constructing the activation layers.\n    groups: int\n        Number of blocked connections from input channels to output channels.\n\n    Example\n    -------\n    >>> x = torch.rand(8, 120, 64).transpose(1, 2)\n    >>> conv = SERes2NetBlock(64, 64, res2net_scale=4)\n    >>> out = conv(x).transpose(1, 2)\n    >>> out.shape\n    torch.Size([8, 120, 64])\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        res2net_scale=8,\n        se_channels=128,\n        kernel_size=1,\n        dilation=1,\n        activation=torch.nn.ReLU,\n        groups=1,\n    ):\n        super().__init__()\n        self.out_channels = out_channels\n        self.tdnn1 = TDNNBlock(\n            in_channels,\n            out_channels,\n            kernel_size=1,\n            dilation=1,\n            activation=activation,\n            groups=groups,\n        )\n        self.res2net_block = Res2NetBlock(\n            out_channels, out_channels, res2net_scale, kernel_size, dilation\n        )\n        self.tdnn2 = TDNNBlock(\n            out_channels,\n            out_channels,\n            kernel_size=1,\n            dilation=1,\n            activation=activation,\n            groups=groups,\n        )\n        self.se_block = SEBlock(out_channels, se_channels, out_channels)\n\n        self.shortcut = None\n        if in_channels != out_channels:\n            self.shortcut = Conv1d(\n                in_channels=in_channels,\n                out_channels=out_channels,\n                kernel_size=1,\n            )\n\n    def forward(self, x, lengths=None):\n        \"\"\"Processes the input tensor x and returns an output tensor.\"\"\"\n        residual = x\n        if self.shortcut:\n            residual = self.shortcut(x)\n\n        x = self.tdnn1(x)\n        x = self.res2net_block(x)\n        x = self.tdnn2(x)\n        x = self.se_block(x, lengths)\n\n        return x + residual\n\n\nclass ECAPA_TDNN(torch.nn.Module):\n    \"\"\"An implementation of the speaker embedding model in a paper.\n    \"ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation in\n    TDNN Based Speaker Verification\" (https://arxiv.org/abs/2005.07143).\n\n    Arguments\n    ---------\n    input_size : int\n        Expected size of the input dimension.\n    device : str\n        Device used, e.g., \"cpu\" or \"cuda\".\n    lin_neurons : int\n        Number of neurons in linear layers.\n    activation : torch class\n        A class for constructing the activation layers.\n    channels : list of ints\n        Output channels for TDNN/SERes2Net layer.\n    kernel_sizes : list of ints\n        List of kernel sizes for each layer.\n    dilations : list of ints\n        List of dilations for kernels in each layer.\n    attention_channels: int\n        The number of attention channels.\n    res2net_scale : int\n        The scale of the Res2Net block.\n    se_channels : int\n        The number of output channels after squeeze.\n    global_context: bool\n        Whether to use global context.\n    groups : list of ints\n        List of groups for kernels in each layer.\n\n    Example\n    -------\n    >>> input_feats = torch.rand([5, 120, 80])\n    >>> compute_embedding = ECAPA_TDNN(80, lin_neurons=192)\n    >>> outputs = compute_embedding(input_feats)\n    >>> outputs.shape\n    torch.Size([5, 1, 192])\n    \"\"\"\n\n    def __init__(\n        self,\n        input_size,\n        device=\"cpu\",\n        lin_neurons=192,\n        activation=torch.nn.ReLU,\n        channels=[512, 512, 512, 512, 1536],\n        kernel_sizes=[5, 3, 3, 3, 1],\n        dilations=[1, 2, 3, 4, 1],\n        attention_channels=128,\n        res2net_scale=8,\n        se_channels=128,\n        global_context=True,\n        groups=[1, 1, 1, 1, 1],\n    ):\n        super().__init__()\n        assert len(channels) == len(kernel_sizes)\n        assert len(channels) == len(dilations)\n        self.channels = channels\n        self.blocks = nn.ModuleList()\n\n        # The initial TDNN layer\n        self.blocks.append(\n            TDNNBlock(\n                input_size,\n                channels[0],\n                kernel_sizes[0],\n                dilations[0],\n                activation,\n                groups[0],\n            )\n        )\n\n        # SE-Res2Net layers\n        for i in range(1, len(channels) - 1):\n            self.blocks.append(\n                SERes2NetBlock(\n                    channels[i - 1],\n                    channels[i],\n                    res2net_scale=res2net_scale,\n                    se_channels=se_channels,\n                    kernel_size=kernel_sizes[i],\n                    dilation=dilations[i],\n                    activation=activation,\n                    groups=groups[i],\n                )\n            )\n\n        # Multi-layer feature aggregation\n        self.mfa = TDNNBlock(\n            channels[-2] * (len(channels) - 2),\n            channels[-1],\n            kernel_sizes[-1],\n            dilations[-1],\n            activation,\n            groups=groups[-1],\n        )\n\n        # Attentive Statistical Pooling\n        self.asp = AttentiveStatisticsPooling(\n            channels[-1],\n            attention_channels=attention_channels,\n            global_context=global_context,\n        )\n        self.asp_bn = BatchNorm1d(input_size=channels[-1] * 2)\n\n        # Final linear transformation\n        self.fc = Conv1d(\n            in_channels=channels[-1] * 2,\n            out_channels=lin_neurons,\n            kernel_size=1,\n        )\n\n    def forward(self, x, lengths=None):\n        \"\"\"Returns the embedding vector.\n\n        Arguments\n        ---------\n        x : torch.Tensor\n            Tensor of shape (batch, time, channel).\n        lengths : torch.Tensor\n            Corresponding relative lengths of inputs.\n\n        Returns\n        -------\n        x : torch.Tensor\n            Embedding vector.\n        \"\"\"\n        # Minimize transpose for efficiency\n        x = x.transpose(1, 2)\n\n        xl = []\n        for layer in self.blocks:\n            try:\n                x = layer(x, lengths=lengths)\n            except TypeError:\n                x = layer(x)\n            xl.append(x)\n\n        # Multi-layer feature aggregation\n        x = torch.cat(xl[1:], dim=1)\n        x = self.mfa(x)\n\n        # Attentive Statistical Pooling\n        x = self.asp(x, lengths=lengths)\n        x = self.asp_bn(x)\n\n        # Final linear transformation\n        x = self.fc(x)\n\n        x = x.transpose(1, 2)\n        return x\n\n\nclass Classifier(torch.nn.Module):\n    \"\"\"This class implements the cosine similarity on the top of features.\n\n    Arguments\n    ---------\n    input_size : int\n        Expected size of input dimension.\n    device : str\n        Device used, e.g., \"cpu\" or \"cuda\".\n    lin_blocks : int\n        Number of linear layers.\n    lin_neurons : int\n        Number of neurons in linear layers.\n    out_neurons : int\n        Number of classes.\n\n    Example\n    -------\n    >>> classify = Classifier(input_size=2, lin_neurons=2, out_neurons=2)\n    >>> outputs = torch.tensor([ [1., -1.], [-9., 1.], [0.9, 0.1], [0.1, 0.9] ])\n    >>> outputs = outputs.unsqueeze(1)\n    >>> cos = classify(outputs)\n    >>> (cos < -1.0).long().sum()\n    tensor(0)\n    >>> (cos > 1.0).long().sum()\n    tensor(0)\n    \"\"\"\n\n    def __init__(\n        self,\n        input_size,\n        device=\"cpu\",\n        lin_blocks=0,\n        lin_neurons=192,\n        out_neurons=1211,\n    ):\n        super().__init__()\n        self.blocks = nn.ModuleList()\n\n        for block_index in range(lin_blocks):\n            self.blocks.extend(\n                [\n                    _BatchNorm1d(input_size=input_size),\n                    Linear(input_size=input_size, n_neurons=lin_neurons),\n                ]\n            )\n            input_size = lin_neurons\n\n        # Final Layer\n        self.weight = nn.Parameter(\n            torch.FloatTensor(out_neurons, input_size, device=device)\n        )\n        nn.init.xavier_uniform_(self.weight)\n\n    def forward(self, x):\n        \"\"\"Returns the output probabilities over speakers.\n\n        Arguments\n        ---------\n        x : torch.Tensor\n            Torch tensor.\n\n        Returns\n        -------\n        out : torch.Tensor\n            Output probabilities over speakers.\n        \"\"\"\n        for layer in self.blocks:\n            x = layer(x)\n\n        # Need to be normalized\n        x = F.linear(F.normalize(x.squeeze(1)), F.normalize(self.weight))\n        return x.unsqueeze(1)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/activations.py",
    "content": "# Implementation adapted from https://github.com/EdwardDixon/snake under the MIT license.\n#   LICENSE is in incl_licenses directory.\n\nimport torch\nfrom torch import nn, pow, sin\nfrom torch.nn import Parameter\n\n\nclass Snake(nn.Module):\n    '''\n    Implementation of a sine-based periodic activation function\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter\n    References:\n        - This activation function is from this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snake(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    '''\n\n    def __init__(self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False):\n        '''\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha: trainable parameter\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            alpha will be trained along with the rest of your model.\n        '''\n        super(Snake, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale:  # log scale alphas initialized to zeros\n            self.alpha = Parameter(torch.zeros(in_features) * alpha)\n        else:  # linear scale alphas initialized to ones\n            self.alpha = Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        '''\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        Snake ∶= x + 1/a * sin^2 (xa)\n        '''\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1)  # line up with x to [B, C, T]\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n        x = x + (1.0 / (alpha + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x\n\n\nclass SnakeBeta(nn.Module):\n    '''\n    A modified Snake function which uses separate parameters for the magnitude of the periodic components\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter that controls frequency\n        - beta - trainable parameter that controls magnitude\n    References:\n        - This activation function is a modified version based on this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snakebeta(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    '''\n\n    def __init__(self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False):\n        '''\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha - trainable parameter that controls frequency\n            - beta - trainable parameter that controls magnitude\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            beta is initialized to 1 by default, higher values = higher-magnitude.\n            alpha will be trained along with the rest of your model.\n        '''\n        super(SnakeBeta, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale:  # log scale alphas initialized to zeros\n            self.alpha = Parameter(torch.zeros(in_features) * alpha)\n            self.beta = Parameter(torch.zeros(in_features) * alpha)\n        else:  # linear scale alphas initialized to ones\n            self.alpha = Parameter(torch.ones(in_features) * alpha)\n            self.beta = Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n        self.beta.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        '''\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        SnakeBeta ∶= x + 1/b * sin^2 (xa)\n        '''\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1)  # line up with x to [B, C, T]\n        beta = self.beta.unsqueeze(0).unsqueeze(-1)\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n            beta = torch.exp(beta)\n        x = x + (1.0 / (beta + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/.gitignore",
    "content": "/build"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/activation1d.py",
    "content": "# Copyright (c) 2024 NVIDIA CORPORATION.\n#   Licensed under the MIT license.\n\nimport torch\nimport torch.nn as nn\n# load fused CUDA kernel: this enables importing anti_alias_activation_cuda\nfrom indextts.BigVGAN.alias_free_activation.cuda import load\nfrom indextts.BigVGAN.alias_free_activation.torch.resample import DownSample1d, UpSample1d\n\nanti_alias_activation_cuda = load.load()\n\n\nclass FusedAntiAliasActivation(torch.autograd.Function):\n    \"\"\"\n    Assumes filter size 12, replication padding on upsampling/downsampling, and logscale alpha/beta parameters as inputs.\n    The hyperparameters are hard-coded in the kernel to maximize speed.\n    NOTE: The fused kenrel is incorrect for Activation1d with different hyperparameters.\n    \"\"\"\n\n    @staticmethod\n    def forward(ctx, inputs, up_ftr, down_ftr, alpha, beta):\n        activation_results = anti_alias_activation_cuda.forward(\n            inputs, up_ftr, down_ftr, alpha, beta\n        )\n\n        return activation_results\n\n    @staticmethod\n    def backward(ctx, output_grads):\n        raise NotImplementedError\n        return output_grads, None, None\n\n\nclass Activation1d(nn.Module):\n    def __init__(\n        self,\n        activation,\n        up_ratio: int = 2,\n        down_ratio: int = 2,\n        up_kernel_size: int = 12,\n        down_kernel_size: int = 12,\n        fused: bool = True,\n    ):\n        super().__init__()\n        self.up_ratio = up_ratio\n        self.down_ratio = down_ratio\n        self.act = activation\n        self.upsample = UpSample1d(up_ratio, up_kernel_size)\n        self.downsample = DownSample1d(down_ratio, down_kernel_size)\n\n        self.fused = fused  # Whether to use fused CUDA kernel or not\n\n    def forward(self, x):\n        if not self.fused:\n            x = self.upsample(x)\n            x = self.act(x)\n            x = self.downsample(x)\n            return x\n        else:\n            if self.act.__class__.__name__ == \"Snake\":\n                beta = self.act.alpha.data  # Snake uses same params for alpha and beta\n            else:\n                beta = (\n                    self.act.beta.data\n                )  # Snakebeta uses different params for alpha and beta\n            alpha = self.act.alpha.data\n            if (\n                not self.act.alpha_logscale\n            ):  # Exp baked into cuda kernel, cancel it out with a log\n                alpha = torch.log(alpha)\n                beta = torch.log(beta)\n\n            x = FusedAntiAliasActivation.apply(\n                x, self.upsample.filter, self.downsample.lowpass.filter, alpha, beta\n            )\n            return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/anti_alias_activation.cpp",
    "content": "/* coding=utf-8\n * Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n #include <torch/extension.h>\n\nextern \"C\" torch::Tensor fwd_cuda(torch::Tensor const &input, torch::Tensor const &up_filter, torch::Tensor const &down_filter, torch::Tensor const &alpha, torch::Tensor const &beta);\n\nPYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {\n    m.def(\"forward\", &fwd_cuda, \"Anti-Alias Activation forward (CUDA)\");\n}"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/anti_alias_activation_cuda.cu",
    "content": "/* coding=utf-8\n * Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <ATen/ATen.h>\n#include <cuda.h>\n#include <cuda_runtime.h>\n#include <cuda_fp16.h>\n#include <cuda_profiler_api.h>\n#include <ATen/cuda/CUDAContext.h>\n#include <torch/extension.h>\n#include \"type_shim.h\"\n#include <assert.h>\n#include <cfloat>\n#include <limits>\n#include <stdint.h>\n#include <c10/macros/Macros.h>\n\nnamespace\n{\n    // Hard-coded hyperparameters\n    // WARP_SIZE and WARP_BATCH must match the return values batches_per_warp and\n    constexpr int ELEMENTS_PER_LDG_STG = 1; //(WARP_ITERATIONS < 4) ? 1 : 4;\n    constexpr int BUFFER_SIZE = 32;\n    constexpr int FILTER_SIZE = 12;\n    constexpr int HALF_FILTER_SIZE = 6;\n    constexpr int UPSAMPLE_REPLICATION_PAD = 5; // 5 on each side, matching torch impl\n    constexpr int DOWNSAMPLE_REPLICATION_PAD_LEFT = 5; // matching torch impl\n    constexpr int DOWNSAMPLE_REPLICATION_PAD_RIGHT = 6; // matching torch impl\n\n    template <typename input_t, typename output_t, typename acc_t>\n    __global__ void anti_alias_activation_forward(\n        output_t *dst,\n        const input_t *src,\n        const acc_t *up_ftr,\n        const acc_t *down_ftr,\n        const acc_t *alpha,\n        const acc_t *beta,\n        int batch_size,\n        int channels,\n        int seq_len)\n    {\n        // Up and downsample filters\n        input_t up_filter[FILTER_SIZE];\n        input_t down_filter[FILTER_SIZE];\n\n        // Load data from global memory including extra indices reserved for replication paddings\n        input_t elements[2 * FILTER_SIZE + 2 * BUFFER_SIZE + 2 * UPSAMPLE_REPLICATION_PAD] = {0};\n        input_t intermediates[2 * FILTER_SIZE + 2 * BUFFER_SIZE + DOWNSAMPLE_REPLICATION_PAD_LEFT + DOWNSAMPLE_REPLICATION_PAD_RIGHT] = {0};\n\n        // Output stores downsampled output before writing to dst\n        output_t output[BUFFER_SIZE];\n\n        // blockDim/threadIdx = (128, 1, 1)\n        // gridDim/blockIdx = (seq_blocks, channels, batches)\n        int block_offset = (blockIdx.x * 128 * BUFFER_SIZE + seq_len * (blockIdx.y + gridDim.y * blockIdx.z));\n        int local_offset = threadIdx.x * BUFFER_SIZE;\n        int seq_offset = blockIdx.x * 128 * BUFFER_SIZE + local_offset;\n\n        // intermediate have double the seq_len\n        int intermediate_local_offset = threadIdx.x * BUFFER_SIZE * 2;\n        int intermediate_seq_offset = blockIdx.x * 128 * BUFFER_SIZE * 2 + intermediate_local_offset;\n\n        // Get values needed for replication padding before moving pointer\n        const input_t *right_most_pntr = src + (seq_len * (blockIdx.y + gridDim.y * blockIdx.z));\n        input_t seq_left_most_value = right_most_pntr[0];\n        input_t seq_right_most_value = right_most_pntr[seq_len - 1];\n\n        // Move src and dst pointers\n        src += block_offset + local_offset;\n        dst += block_offset + local_offset;\n\n        // Alpha and beta values for snake activatons. Applies exp by default\n        alpha = alpha + blockIdx.y;\n        beta = beta + blockIdx.y;\n\n        acc_t alpha_val = expf(alpha[0]);\n        acc_t beta_val = expf(beta[0]);\n\n        #pragma unroll\n        for (int it = 0; it < FILTER_SIZE; it += 1)\n        {\n            up_filter[it] = up_ftr[it];\n            down_filter[it] = down_ftr[it];\n        }\n\n        // Apply replication padding for upsampling, matching torch impl\n        #pragma unroll\n        for (int it = -HALF_FILTER_SIZE; it < BUFFER_SIZE + HALF_FILTER_SIZE; it += 1)\n        {\n            int element_index = seq_offset + it; // index for element\n            if ((element_index < 0) && (element_index >= -UPSAMPLE_REPLICATION_PAD))\n            {\n                elements[2 * (HALF_FILTER_SIZE + it)] = 2 * seq_left_most_value;\n            }\n            if ((element_index >= seq_len) && (element_index < seq_len + UPSAMPLE_REPLICATION_PAD))\n            {\n                elements[2 * (HALF_FILTER_SIZE + it)] = 2 * seq_right_most_value;\n            }\n            if ((element_index >= 0) && (element_index < seq_len))\n            {\n                elements[2 * (HALF_FILTER_SIZE + it)] = 2 * src[it];\n            }\n        }\n\n        // Apply upsampling strided convolution and write to intermediates. It reserves DOWNSAMPLE_REPLICATION_PAD_LEFT for replication padding of the downsampilng conv later\n        #pragma unroll\n        for (int it = 0; it < (2 * BUFFER_SIZE + 2 * FILTER_SIZE); it += 1)\n        {\n            acc_t acc = 0.0;\n            int element_index = intermediate_seq_offset + it; // index for intermediate\n            #pragma unroll\n            for (int f_idx = 0; f_idx < FILTER_SIZE; f_idx += 1)\n            {\n                if ((element_index + f_idx) >= 0)\n                {\n                    acc += up_filter[f_idx] * elements[it + f_idx];\n                }\n            }\n            intermediates[it + DOWNSAMPLE_REPLICATION_PAD_LEFT] = acc;\n        }\n\n        // Apply activation function. It reserves DOWNSAMPLE_REPLICATION_PAD_LEFT and DOWNSAMPLE_REPLICATION_PAD_RIGHT for replication padding of the downsampilng conv later\n        double no_div_by_zero = 0.000000001;\n        #pragma unroll\n        for (int it = 0; it < 2 * BUFFER_SIZE + 2 * FILTER_SIZE; it += 1)\n        {\n            acc_t a = sinf(intermediates[it + DOWNSAMPLE_REPLICATION_PAD_LEFT] * alpha_val);\n            intermediates[it + DOWNSAMPLE_REPLICATION_PAD_LEFT] += (1.0 / (beta_val + no_div_by_zero)) * a * a;\n        }\n\n        // Apply replication padding before downsampling conv from intermediates\n        #pragma unroll\n        for (int it = 0; it < DOWNSAMPLE_REPLICATION_PAD_LEFT; it += 1)\n        {\n            intermediates[it] = intermediates[DOWNSAMPLE_REPLICATION_PAD_LEFT];\n        }\n        #pragma unroll\n        for (int it = DOWNSAMPLE_REPLICATION_PAD_LEFT + 2 * BUFFER_SIZE + 2 * FILTER_SIZE; it < DOWNSAMPLE_REPLICATION_PAD_LEFT + 2 * BUFFER_SIZE + 2 * FILTER_SIZE + DOWNSAMPLE_REPLICATION_PAD_RIGHT; it += 1)\n        {\n            intermediates[it] = intermediates[DOWNSAMPLE_REPLICATION_PAD_LEFT + 2 * BUFFER_SIZE + 2 * FILTER_SIZE - 1];\n        }\n\n        // Apply downsample strided convolution (assuming stride=2) from intermediates\n        #pragma unroll\n        for (int it = 0; it < BUFFER_SIZE; it += 1)\n        {\n            acc_t acc = 0.0;\n            #pragma unroll\n            for (int f_idx = 0; f_idx < FILTER_SIZE; f_idx += 1)\n            {\n                // Add constant DOWNSAMPLE_REPLICATION_PAD_RIGHT to match torch implementation\n                acc += down_filter[f_idx] * intermediates[it * 2 + f_idx + DOWNSAMPLE_REPLICATION_PAD_RIGHT];\n            }\n            output[it] = acc;\n        }\n\n        // Write output to dst\n        #pragma unroll\n        for (int it = 0;  it < BUFFER_SIZE;  it += ELEMENTS_PER_LDG_STG)\n        {\n            int element_index = seq_offset + it;\n            if (element_index < seq_len)\n            {\n                dst[it] = output[it];\n            }\n        }\n\n    }\n\n    template <typename input_t, typename output_t, typename acc_t>\n    void dispatch_anti_alias_activation_forward(\n        output_t *dst,\n        const input_t *src,\n        const acc_t *up_ftr,\n        const acc_t *down_ftr,\n        const acc_t *alpha,\n        const acc_t *beta,\n        int batch_size,\n        int channels,\n        int seq_len)\n    {\n        if (seq_len == 0)\n        {\n            return;\n        }\n        else\n        {\n            // Use 128 threads per block to maximimize gpu utilization\n            constexpr int threads_per_block = 128;\n            constexpr int seq_len_per_block = 4096;\n            int blocks_per_seq_len = (seq_len + seq_len_per_block - 1) / seq_len_per_block;\n            dim3 blocks(blocks_per_seq_len, channels, batch_size);\n            dim3 threads(threads_per_block, 1, 1);\n\n            anti_alias_activation_forward<input_t, output_t, acc_t>\n                <<<blocks, threads, 0, at::cuda::getCurrentCUDAStream()>>>(dst, src, up_ftr, down_ftr, alpha, beta, batch_size, channels, seq_len);\n        }\n    }\n}\n\nextern \"C\" torch::Tensor fwd_cuda(torch::Tensor const &input, torch::Tensor const &up_filter, torch::Tensor const &down_filter, torch::Tensor const &alpha, torch::Tensor const &beta)\n{\n    // Input is a 3d tensor with dimensions [batches, channels, seq_len]\n    const int batches = input.size(0);\n    const int channels = input.size(1);\n    const int seq_len = input.size(2);\n\n    // Output\n    auto act_options = input.options().requires_grad(false);\n\n    torch::Tensor anti_alias_activation_results =\n        torch::empty({batches, channels, seq_len}, act_options);\n\n    using float32 = float;\n    // The dtype of input is float16, bfloat16, or float32\n    // The dtype of up_filter, down_filter, alpha, and beta is float32\n    // printf(\"input scalar type: %d\\n\", input.scalar_type());\n    // printf(\"up_filter scalar type: %d\\n\", up_filter.scalar_type());\n    // printf(\"down_filter scalar type: %d\\n\", down_filter.scalar_type());\n    // printf(\"alpha scalar type: %d\\n\", alpha.scalar_type());\n    // printf(\"beta scalar type: %d\\n\", beta.scalar_type());\n    void *input_ptr = static_cast<void *>(input.data_ptr());\n    float32 *up_filter_ptr = static_cast<float32 *>(up_filter.data_ptr());\n    float32 *down_filter_ptr = static_cast<float32 *>(down_filter.data_ptr());\n    float32 *alpha_ptr = static_cast<float32 *>(alpha.data_ptr());\n    float32 *beta_ptr = static_cast<float32 *>(beta.data_ptr());\n    void *anti_alias_activation_results_ptr = static_cast<void *>(anti_alias_activation_results.data_ptr());\n\n    DISPATCH_FLOAT_HALF_AND_BFLOAT(\n        input.scalar_type(),\n        \"dispatch anti alias activation_forward\",\n        dispatch_anti_alias_activation_forward<scalar_t, scalar_t, float32>(\n            reinterpret_cast<scalar_t *>(anti_alias_activation_results_ptr),\n            reinterpret_cast<const scalar_t *>(input_ptr),\n            reinterpret_cast<const float32 *>(up_filter_ptr),\n            reinterpret_cast<const float32 *>(down_filter_ptr),\n            reinterpret_cast<const float32 *>(alpha_ptr),\n            reinterpret_cast<const float32 *>(beta_ptr),\n            batches,\n            channels,\n            seq_len););\n    return anti_alias_activation_results;\n}"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/compat.h",
    "content": "/* coding=utf-8\n * Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*This code is copied fron NVIDIA apex:\n *     https://github.com/NVIDIA/apex\n *     with minor changes. */\n\n#ifndef TORCH_CHECK\n#define TORCH_CHECK AT_CHECK\n#endif\n\n#ifdef VERSION_GE_1_3\n#define DATA_PTR data_ptr\n#else\n#define DATA_PTR data\n#endif\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/load.py",
    "content": "# Copyright (c) 2024 NVIDIA CORPORATION.\n#   Licensed under the MIT license.\n\nimport os\nimport pathlib\nimport subprocess\n\nfrom torch.utils import cpp_extension\n\n\"\"\"\nSetting this param to a list has a problem of generating different compilation commands (with diferent order of architectures) and leading to recompilation of fused kernels. \nSet it to empty stringo avoid recompilation and assign arch flags explicity in extra_cuda_cflags below\n\"\"\"\nos.environ[\"TORCH_CUDA_ARCH_LIST\"] = \"\"\n\n\nimport re\nimport shutil\nimport tempfile\n\n# 补丁修复：sources 路径含中文字符时，生成 build.ninja 乱码导致编译失败\n# 使用临时目录来规避 ninja 编译失败（比如中文路径）\ndef chinese_path_compile_support(sources, buildpath):\n    pattern = re.compile(r'[\\u4e00-\\u9fff]')  \n    if not bool(pattern.search(str(sources[0].resolve()))):\n        return buildpath # 检测非中文路径跳过\n    # Create build directory\n    resolves = [ item.name for item in sources]\n    ninja_compile_dir = os.path.join(tempfile.gettempdir(), \"BigVGAN\", \"cuda\")\n    os.makedirs(ninja_compile_dir, exist_ok=True)\n    new_buildpath = os.path.join(ninja_compile_dir, \"build\")\n    os.makedirs(new_buildpath, exist_ok=True)\n    print(f\"ninja_buildpath: {new_buildpath}\")\n    # Copy files to directory\n    sources.clear()\n    current_dir = os.path.dirname(__file__)\n    ALLOWED_EXTENSIONS = {'.py', '.cu', '.cpp', '.h'}\n    for filename in os.listdir(current_dir):\n        item = pathlib.Path(current_dir).joinpath(filename)\n        tar_path = pathlib.Path(ninja_compile_dir).joinpath(item.name)\n        if not item.suffix.lower() in ALLOWED_EXTENSIONS:continue\n        pathlib.Path(shutil.copy2(item, tar_path))\n        if tar_path.name in resolves:sources.append(tar_path)\n    return new_buildpath\n\n\n\ndef load():\n    # Check if cuda 11 is installed for compute capability 8.0\n    cc_flag = []\n    _, bare_metal_major, _ = _get_cuda_bare_metal_version(cpp_extension.CUDA_HOME)\n    if int(bare_metal_major) >= 11:\n        cc_flag.append(\"-gencode\")\n        cc_flag.append(\"arch=compute_80,code=sm_80\")\n\n    # Build path\n    srcpath = pathlib.Path(__file__).parent.absolute()\n    buildpath = srcpath / \"build\"\n    _create_build_dir(buildpath)\n\n    # Helper function to build the kernels.\n    def _cpp_extention_load_helper(name, sources, extra_cuda_flags):\n        return cpp_extension.load(\n            name=name,\n            sources=sources,\n            build_directory=buildpath,\n            extra_cflags=[\n                \"-O3\",\n            ],\n            extra_cuda_cflags=[\n                \"-O3\",\n                \"-gencode\",\n                \"arch=compute_70,code=sm_70\",\n                \"--use_fast_math\",\n            ]\n            + extra_cuda_flags\n            + cc_flag,\n            verbose=True,\n        )\n\n    extra_cuda_flags = [\n        \"-U__CUDA_NO_HALF_OPERATORS__\",\n        \"-U__CUDA_NO_HALF_CONVERSIONS__\",\n        \"--expt-relaxed-constexpr\",\n        \"--expt-extended-lambda\",\n    ]\n\n    sources = [\n        srcpath / \"anti_alias_activation.cpp\",\n        srcpath / \"anti_alias_activation_cuda.cu\",\n    ]\n    \n    # 兼容方案：ninja 特殊字符路径编译支持处理（比如中文路径）\n    buildpath = chinese_path_compile_support(sources, buildpath)\n    \n    anti_alias_activation_cuda = _cpp_extention_load_helper(\n        \"anti_alias_activation_cuda\", sources, extra_cuda_flags\n    )\n\n    return anti_alias_activation_cuda\n\n\ndef _get_cuda_bare_metal_version(cuda_dir):\n    raw_output = subprocess.check_output(\n        [cuda_dir + \"/bin/nvcc\", \"-V\"], universal_newlines=True\n    )\n    output = raw_output.split()\n    release_idx = output.index(\"release\") + 1\n    release = output[release_idx].split(\".\")\n    bare_metal_major = release[0]\n    bare_metal_minor = release[1][0]\n\n    return raw_output, bare_metal_major, bare_metal_minor\n\n\ndef _create_build_dir(buildpath):\n    try:\n        os.mkdir(buildpath)\n    except OSError:\n        if not os.path.isdir(buildpath):\n            print(f\"Creation of the build directory {buildpath} failed\")\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/type_shim.h",
    "content": "/* coding=utf-8\n * Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <ATen/ATen.h>\n#include \"compat.h\"\n\n#define DISPATCH_FLOAT_HALF_AND_BFLOAT(TYPE, NAME, ...)                 \\\n\tswitch (TYPE)                                                       \\\n\t{                                                                   \\\n\tcase at::ScalarType::Float:                                         \\\n\t{                                                                   \\\n\t\tusing scalar_t = float;                                         \\\n\t\t__VA_ARGS__;                                                    \\\n\t\tbreak;                                                          \\\n\t}                                                                   \\\n\tcase at::ScalarType::Half:                                          \\\n\t{                                                                   \\\n\t\tusing scalar_t = at::Half;                                      \\\n\t\t__VA_ARGS__;                                                    \\\n\t\tbreak;                                                          \\\n\t}                                                                   \\\n\tcase at::ScalarType::BFloat16:                                      \\\n\t{                                                                   \\\n\t\tusing scalar_t = at::BFloat16;                                  \\\n\t\t__VA_ARGS__;                                                    \\\n\t\tbreak;                                                          \\\n\t}                                                                   \\\n\tdefault:                                                            \\\n\t\tAT_ERROR(#NAME, \" not implemented for '\", toString(TYPE), \"'\"); \\\n\t}\n\n#define DISPATCH_FLOAT_HALF_AND_BFLOAT_INOUT_TYPES(TYPEIN, TYPEOUT, NAME, ...) \\\n\tswitch (TYPEIN)                                                            \\\n\t{                                                                          \\\n\tcase at::ScalarType::Float:                                                \\\n\t{                                                                          \\\n\t\tusing scalar_t_in = float;                                             \\\n\t\tswitch (TYPEOUT)                                                       \\\n\t\t{                                                                      \\\n\t\tcase at::ScalarType::Float:                                            \\\n\t\t{                                                                      \\\n\t\t\tusing scalar_t_out = float;                                        \\\n\t\t\t__VA_ARGS__;                                                       \\\n\t\t\tbreak;                                                             \\\n\t\t}                                                                      \\\n\t\tcase at::ScalarType::Half:                                             \\\n\t\t{                                                                      \\\n\t\t\tusing scalar_t_out = at::Half;                                     \\\n\t\t\t__VA_ARGS__;                                                       \\\n\t\t\tbreak;                                                             \\\n\t\t}                                                                      \\\n\t\tcase at::ScalarType::BFloat16:                                         \\\n\t\t{                                                                      \\\n\t\t\tusing scalar_t_out = at::BFloat16;                                 \\\n\t\t\t__VA_ARGS__;                                                       \\\n\t\t\tbreak;                                                             \\\n\t\t}                                                                      \\\n\t\tdefault:                                                               \\\n\t\t\tAT_ERROR(#NAME, \" not implemented for '\", toString(TYPEOUT), \"'\"); \\\n\t\t}                                                                      \\\n\t\tbreak;                                                                 \\\n\t}                                                                          \\\n\tcase at::ScalarType::Half:                                                 \\\n\t{                                                                          \\\n\t\tusing scalar_t_in = at::Half;                                          \\\n\t\tusing scalar_t_out = at::Half;                                         \\\n\t\t__VA_ARGS__;                                                           \\\n\t\tbreak;                                                                 \\\n\t}                                                                          \\\n\tcase at::ScalarType::BFloat16:                                             \\\n\t{                                                                          \\\n\t\tusing scalar_t_in = at::BFloat16;                                      \\\n\t\tusing scalar_t_out = at::BFloat16;                                     \\\n\t\t__VA_ARGS__;                                                           \\\n\t\tbreak;                                                                 \\\n\t}                                                                          \\\n\tdefault:                                                                   \\\n\t\tAT_ERROR(#NAME, \" not implemented for '\", toString(TYPEIN), \"'\");      \\\n\t}\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/__init__.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nfrom .act import *\nfrom .filter import *\nfrom .resample import *\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/act.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nimport torch.nn as nn\n\nfrom .resample import DownSample1d, UpSample1d\n\n\nclass Activation1d(nn.Module):\n    def __init__(\n        self,\n        activation,\n        up_ratio: int = 2,\n        down_ratio: int = 2,\n        up_kernel_size: int = 12,\n        down_kernel_size: int = 12,\n    ):\n        super().__init__()\n        self.up_ratio = up_ratio\n        self.down_ratio = down_ratio\n        self.act = activation\n        self.upsample = UpSample1d(up_ratio, up_kernel_size)\n        self.downsample = DownSample1d(down_ratio, down_kernel_size)\n\n    # x: [B,C,T]\n    def forward(self, x):\n        x = self.upsample(x)\n        x = self.act(x)\n        x = self.downsample(x)\n\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/filter.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nimport math\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nif \"sinc\" in dir(torch):\n    sinc = torch.sinc\nelse:\n    # This code is adopted from adefossez's julius.core.sinc under the MIT License\n    # https://adefossez.github.io/julius/julius/core.html\n    #   LICENSE is in incl_licenses directory.\n    def sinc(x: torch.Tensor):\n        \"\"\"\n        Implementation of sinc, i.e. sin(pi * x) / (pi * x)\n        __Warning__: Different to julius.sinc, the input is multiplied by `pi`!\n        \"\"\"\n        return torch.where(\n            x == 0,\n            torch.tensor(1.0, device=x.device, dtype=x.dtype),\n            torch.sin(math.pi * x) / math.pi / x,\n        )\n\n\n# This code is adopted from adefossez's julius.lowpass.LowPassFilters under the MIT License\n# https://adefossez.github.io/julius/julius/lowpass.html\n#   LICENSE is in incl_licenses directory.\ndef kaiser_sinc_filter1d(\n    cutoff, half_width, kernel_size\n):  # return filter [1,1,kernel_size]\n    even = kernel_size % 2 == 0\n    half_size = kernel_size // 2\n\n    # For kaiser window\n    delta_f = 4 * half_width\n    A = 2.285 * (half_size - 1) * math.pi * delta_f + 7.95\n    if A > 50.0:\n        beta = 0.1102 * (A - 8.7)\n    elif A >= 21.0:\n        beta = 0.5842 * (A - 21) ** 0.4 + 0.07886 * (A - 21.0)\n    else:\n        beta = 0.0\n    window = torch.kaiser_window(kernel_size, beta=beta, periodic=False)\n\n    # ratio = 0.5/cutoff -> 2 * cutoff = 1 / ratio\n    if even:\n        time = torch.arange(-half_size, half_size) + 0.5\n    else:\n        time = torch.arange(kernel_size) - half_size\n    if cutoff == 0:\n        filter_ = torch.zeros_like(time)\n    else:\n        filter_ = 2 * cutoff * window * sinc(2 * cutoff * time)\n        \"\"\"\n        Normalize filter to have sum = 1, otherwise we will have a small leakage of the constant component in the input signal.\n        \"\"\"\n        filter_ /= filter_.sum()\n        filter = filter_.view(1, 1, kernel_size)\n\n    return filter\n\n\nclass LowPassFilter1d(nn.Module):\n    def __init__(\n        self,\n        cutoff=0.5,\n        half_width=0.6,\n        stride: int = 1,\n        padding: bool = True,\n        padding_mode: str = \"replicate\",\n        kernel_size: int = 12,\n    ):\n        \"\"\"\n        kernel_size should be even number for stylegan3 setup, in this implementation, odd number is also possible.\n        \"\"\"\n        super().__init__()\n        if cutoff < -0.0:\n            raise ValueError(\"Minimum cutoff must be larger than zero.\")\n        if cutoff > 0.5:\n            raise ValueError(\"A cutoff above 0.5 does not make sense.\")\n        self.kernel_size = kernel_size\n        self.even = kernel_size % 2 == 0\n        self.pad_left = kernel_size // 2 - int(self.even)\n        self.pad_right = kernel_size // 2\n        self.stride = stride\n        self.padding = padding\n        self.padding_mode = padding_mode\n        filter = kaiser_sinc_filter1d(cutoff, half_width, kernel_size)\n        self.register_buffer(\"filter\", filter)\n\n    # Input [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        if self.padding:\n            x = F.pad(x, (self.pad_left, self.pad_right), mode=self.padding_mode)\n        out = F.conv1d(x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C)\n\n        return out\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/resample.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nimport torch.nn as nn\nfrom torch.nn import functional as F\n\nfrom .filter import LowPassFilter1d, kaiser_sinc_filter1d\n\n\nclass UpSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.stride = ratio\n        self.pad = self.kernel_size // ratio - 1\n        self.pad_left = self.pad * self.stride + (self.kernel_size - self.stride) // 2\n        self.pad_right = (\n            self.pad * self.stride + (self.kernel_size - self.stride + 1) // 2\n        )\n        filter = kaiser_sinc_filter1d(\n            cutoff=0.5 / ratio, half_width=0.6 / ratio, kernel_size=self.kernel_size\n        )\n        self.register_buffer(\"filter\", filter)\n\n    # x: [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        x = F.pad(x, (self.pad, self.pad), mode=\"replicate\")\n        x = self.ratio * F.conv_transpose1d(\n            x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C\n        )\n        x = x[..., self.pad_left : -self.pad_right]\n\n        return x\n\n\nclass DownSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.lowpass = LowPassFilter1d(\n            cutoff=0.5 / ratio,\n            half_width=0.6 / ratio,\n            stride=ratio,\n            kernel_size=self.kernel_size,\n        )\n\n    def forward(self, x):\n        xx = self.lowpass(x)\n\n        return xx\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_torch/__init__.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nfrom .act import *\nfrom .filter import *\nfrom .resample import *\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_torch/act.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nimport torch.nn as nn\n\nfrom .resample import DownSample1d, UpSample1d\n\n\nclass Activation1d(nn.Module):\n    def __init__(self,\n                 activation,\n                 up_ratio: int = 2,\n                 down_ratio: int = 2,\n                 up_kernel_size: int = 12,\n                 down_kernel_size: int = 12):\n        super().__init__()\n        self.up_ratio = up_ratio\n        self.down_ratio = down_ratio\n        self.act = activation\n        self.upsample = UpSample1d(up_ratio, up_kernel_size)\n        self.downsample = DownSample1d(down_ratio, down_kernel_size)\n\n    # x: [B,C,T]\n    def forward(self, x):\n        x = self.upsample(x)\n        x = self.act(x)\n        x = self.downsample(x)\n\n        return x"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_torch/filter.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nimport math\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nif 'sinc' in dir(torch):\n    sinc = torch.sinc\nelse:\n    # This code is adopted from adefossez's julius.core.sinc under the MIT License\n    # https://adefossez.github.io/julius/julius/core.html\n    #   LICENSE is in incl_licenses directory.\n    def sinc(x: torch.Tensor):\n        \"\"\"\n        Implementation of sinc, i.e. sin(pi * x) / (pi * x)\n        __Warning__: Different to julius.sinc, the input is multiplied by `pi`!\n        \"\"\"\n        return torch.where(x == 0,\n                           torch.tensor(1., device=x.device, dtype=x.dtype),\n                           torch.sin(math.pi * x) / math.pi / x)\n\n\n# This code is adopted from adefossez's julius.lowpass.LowPassFilters under the MIT License\n# https://adefossez.github.io/julius/julius/lowpass.html\n#   LICENSE is in incl_licenses directory.\ndef kaiser_sinc_filter1d(cutoff, half_width, kernel_size): # return filter [1,1,kernel_size]\n    even = (kernel_size % 2 == 0)\n    half_size = kernel_size // 2\n\n    #For kaiser window\n    delta_f = 4 * half_width\n    A = 2.285 * (half_size - 1) * math.pi * delta_f + 7.95\n    if A > 50.:\n        beta = 0.1102 * (A - 8.7)\n    elif A >= 21.:\n        beta = 0.5842 * (A - 21)**0.4 + 0.07886 * (A - 21.)\n    else:\n        beta = 0.\n    window = torch.kaiser_window(kernel_size, beta=beta, periodic=False)\n\n    # ratio = 0.5/cutoff -> 2 * cutoff = 1 / ratio\n    if even:\n        time = (torch.arange(-half_size, half_size) + 0.5)\n    else:\n        time = torch.arange(kernel_size) - half_size\n    if cutoff == 0:\n        filter_ = torch.zeros_like(time)\n    else:\n        filter_ = 2 * cutoff * window * sinc(2 * cutoff * time)\n        # Normalize filter to have sum = 1, otherwise we will have a small leakage\n        # of the constant component in the input signal.\n        filter_ /= filter_.sum()\n        filter = filter_.view(1, 1, kernel_size)\n\n    return filter\n\n\nclass LowPassFilter1d(nn.Module):\n    def __init__(self,\n                 cutoff=0.5,\n                 half_width=0.6,\n                 stride: int = 1,\n                 padding: bool = True,\n                 padding_mode: str = 'replicate',\n                 kernel_size: int = 12):\n        # kernel_size should be even number for stylegan3 setup,\n        # in this implementation, odd number is also possible.\n        super().__init__()\n        if cutoff < -0.:\n            raise ValueError(\"Minimum cutoff must be larger than zero.\")\n        if cutoff > 0.5:\n            raise ValueError(\"A cutoff above 0.5 does not make sense.\")\n        self.kernel_size = kernel_size\n        self.even = (kernel_size % 2 == 0)\n        self.pad_left = kernel_size // 2 - int(self.even)\n        self.pad_right = kernel_size // 2\n        self.stride = stride\n        self.padding = padding\n        self.padding_mode = padding_mode\n        filter = kaiser_sinc_filter1d(cutoff, half_width, kernel_size)\n        self.register_buffer(\"filter\", filter)\n\n    #input [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        if self.padding:\n            x = F.pad(x, (self.pad_left, self.pad_right),\n                      mode=self.padding_mode)\n        out = F.conv1d(x, self.filter.expand(C, -1, -1),\n                       stride=self.stride, groups=C)\n\n        return out"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/alias_free_torch/resample.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nimport torch.nn as nn\nfrom torch.nn import functional as F\n\nfrom .filter import LowPassFilter1d, kaiser_sinc_filter1d\n\n\nclass UpSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        self.stride = ratio\n        self.pad = self.kernel_size // ratio - 1\n        self.pad_left = self.pad * self.stride + (self.kernel_size - self.stride) // 2\n        self.pad_right = self.pad * self.stride + (self.kernel_size - self.stride + 1) // 2\n        filter = kaiser_sinc_filter1d(cutoff=0.5 / ratio,\n                                      half_width=0.6 / ratio,\n                                      kernel_size=self.kernel_size)\n        self.register_buffer(\"filter\", filter)\n\n    # x: [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        x = F.pad(x, (self.pad, self.pad), mode='replicate')\n        x = self.ratio * F.conv_transpose1d(\n            x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C)\n        x = x[..., self.pad_left:-self.pad_right]\n\n        return x\n\n\nclass DownSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        self.lowpass = LowPassFilter1d(cutoff=0.5 / ratio,\n                                       half_width=0.6 / ratio,\n                                       stride=ratio,\n                                       kernel_size=self.kernel_size)\n\n    def forward(self, x):\n        xx = self.lowpass(x)\n\n        return xx"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/bigvgan.py",
    "content": "# Copyright (c) 2024 NVIDIA CORPORATION.\n#   Licensed under the MIT license.\n\n# Adapted from https://github.com/jik876/hifi-gan under the MIT license.\n#   LICENSE is in incl_licenses directory.\n\nimport json\nimport os\nfrom pathlib import Path\nfrom typing import Dict, Optional, Union\n\nimport torch\nimport torch.nn as nn\nfrom huggingface_hub import PyTorchModelHubMixin, hf_hub_download\nfrom torch.nn import Conv1d, ConvTranspose1d\nfrom torch.nn.utils import remove_weight_norm, weight_norm\n\nimport indextts.BigVGAN.activations as activations\nfrom indextts.BigVGAN.alias_free_activation.torch.act import \\\n    Activation1d as TorchActivation1d\nfrom indextts.BigVGAN.ECAPA_TDNN import ECAPA_TDNN\nfrom indextts.BigVGAN.env import AttrDict\nfrom indextts.BigVGAN.utils import get_padding, init_weights\n\n\ndef load_hparams_from_json(path) -> AttrDict:\n    with open(path) as f:\n        data = f.read()\n    return AttrDict(json.loads(data))\n\n\nclass AMPBlock1(torch.nn.Module):\n    \"\"\"\n    AMPBlock applies Snake / SnakeBeta activation functions with trainable parameters that control periodicity, defined for each layer.\n    AMPBlock1 has additional self.convs2 that contains additional Conv1d layers with a fixed dilation=1 followed by each layer in self.convs1\n\n    Args:\n        h (AttrDict): Hyperparameters.\n        channels (int): Number of convolution channels.\n        kernel_size (int): Size of the convolution kernel. Default is 3.\n        dilation (tuple): Dilation rates for the convolutions. Each dilation layer has two convolutions. Default is (1, 3, 5).\n        activation (str): Activation function type. Should be either 'snake' or 'snakebeta'. Default is None.\n    \"\"\"\n\n    def __init__(\n        self,\n        h: AttrDict,\n        channels: int,\n        kernel_size: int = 3,\n        dilation: tuple = (1, 3, 5),\n        activation: str = None,\n    ):\n        super().__init__()\n\n        self.h = h\n\n        self.convs1 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        stride=1,\n                        dilation=d,\n                        padding=get_padding(kernel_size, d),\n                    )\n                )\n                for d in dilation\n            ]\n        )\n        self.convs1.apply(init_weights)\n\n        self.convs2 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        stride=1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                )\n                for _ in range(len(dilation))\n            ]\n        )\n        self.convs2.apply(init_weights)\n\n        self.num_layers = len(self.convs1) + len(\n            self.convs2\n        )  # Total number of conv layers\n\n        # Select which Activation1d, lazy-load cuda version to ensure backward compatibility\n        if self.h.get(\"use_cuda_kernel\", False):\n            from alias_free_activation.cuda.activation1d import \\\n                Activation1d as CudaActivation1d\n\n            Activation1d = CudaActivation1d\n        else:\n            Activation1d = TorchActivation1d\n\n        # Activation functions\n        if activation == \"snake\":\n            self.activations = nn.ModuleList(\n                [\n                    Activation1d(\n                        activation=activations.Snake(\n                            channels, alpha_logscale=h.snake_logscale\n                        )\n                    )\n                    for _ in range(self.num_layers)\n                ]\n            )\n        elif activation == \"snakebeta\":\n            self.activations = nn.ModuleList(\n                [\n                    Activation1d(\n                        activation=activations.SnakeBeta(\n                            channels, alpha_logscale=h.snake_logscale\n                        )\n                    )\n                    for _ in range(self.num_layers)\n                ]\n            )\n        else:\n            raise NotImplementedError(\n                \"activation incorrectly specified. check the config file and look for 'activation'.\"\n            )\n\n    def forward(self, x):\n        acts1, acts2 = self.activations[::2], self.activations[1::2]\n        for c1, c2, a1, a2 in zip(self.convs1, self.convs2, acts1, acts2):\n            xt = a1(x)\n            xt = c1(xt)\n            xt = a2(xt)\n            xt = c2(xt)\n            x = xt + x\n\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n\nclass AMPBlock2(torch.nn.Module):\n    \"\"\"\n    AMPBlock applies Snake / SnakeBeta activation functions with trainable parameters that control periodicity, defined for each layer.\n    Unlike AMPBlock1, AMPBlock2 does not contain extra Conv1d layers with fixed dilation=1\n\n    Args:\n        h (AttrDict): Hyperparameters.\n        channels (int): Number of convolution channels.\n        kernel_size (int): Size of the convolution kernel. Default is 3.\n        dilation (tuple): Dilation rates for the convolutions. Each dilation layer has two convolutions. Default is (1, 3, 5).\n        activation (str): Activation function type. Should be either 'snake' or 'snakebeta'. Default is None.\n    \"\"\"\n\n    def __init__(\n        self,\n        h: AttrDict,\n        channels: int,\n        kernel_size: int = 3,\n        dilation: tuple = (1, 3, 5),\n        activation: str = None,\n    ):\n        super().__init__()\n\n        self.h = h\n\n        self.convs = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        stride=1,\n                        dilation=d,\n                        padding=get_padding(kernel_size, d),\n                    )\n                )\n                for d in dilation\n            ]\n        )\n        self.convs.apply(init_weights)\n\n        self.num_layers = len(self.convs)  # Total number of conv layers\n\n        # Select which Activation1d, lazy-load cuda version to ensure backward compatibility\n        if self.h.get(\"use_cuda_kernel\", False):\n            from alias_free_activation.cuda.activation1d import \\\n                Activation1d as CudaActivation1d\n\n            Activation1d = CudaActivation1d\n        else:\n            Activation1d = TorchActivation1d\n\n        # Activation functions\n        if activation == \"snake\":\n            self.activations = nn.ModuleList(\n                [\n                    Activation1d(\n                        activation=activations.Snake(\n                            channels, alpha_logscale=h.snake_logscale\n                        )\n                    )\n                    for _ in range(self.num_layers)\n                ]\n            )\n        elif activation == \"snakebeta\":\n            self.activations = nn.ModuleList(\n                [\n                    Activation1d(\n                        activation=activations.SnakeBeta(\n                            channels, alpha_logscale=h.snake_logscale\n                        )\n                    )\n                    for _ in range(self.num_layers)\n                ]\n            )\n        else:\n            raise NotImplementedError(\n                \"activation incorrectly specified. check the config file and look for 'activation'.\"\n            )\n\n    def forward(self, x):\n        for c, a in zip(self.convs, self.activations):\n            xt = a(x)\n            xt = c(xt)\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs:\n            remove_weight_norm(l)\n\n\n'''\n    PyTorchModelHubMixin,\n    library_name=\"bigvgan\",\n    repo_url=\"https://github.com/NVIDIA/BigVGAN\",\n    docs_url=\"https://github.com/NVIDIA/BigVGAN/blob/main/README.md\",\n    pipeline_tag=\"audio-to-audio\",\n    license=\"mit\",\n    tags=[\"neural-vocoder\", \"audio-generation\", \"arxiv:2206.04658\"],\n'''\n\n\nclass BigVGAN(\n    torch.nn.Module,\n):\n    \"\"\"\n    BigVGAN is a neural vocoder model that applies anti-aliased periodic activation for residual blocks (resblocks).\n    New in BigVGAN-v2: it can optionally use optimized CUDA kernels for AMP (anti-aliased multi-periodicity) blocks.\n\n    Args:\n        h (AttrDict): Hyperparameters.\n        use_cuda_kernel (bool): If set to True, loads optimized CUDA kernels for AMP. This should be used for inference only, as training is not supported with CUDA kernels.\n\n    Note:\n        - The `use_cuda_kernel` parameter should be used for inference only, as training with CUDA kernels is not supported.\n        - Ensure that the activation function is correctly specified in the hyperparameters (h.activation).\n    \"\"\"\n\n    def __init__(self, h: AttrDict, use_cuda_kernel: bool = False):\n        super().__init__()\n        self.h = h\n        self.h[\"use_cuda_kernel\"] = use_cuda_kernel\n\n        # Select which Activation1d, lazy-load cuda version to ensure backward compatibility\n        if self.h.get(\"use_cuda_kernel\", False):\n            from alias_free_activation.cuda.activation1d import \\\n                Activation1d as CudaActivation1d\n\n            Activation1d = CudaActivation1d\n        else:\n            Activation1d = TorchActivation1d\n\n        self.num_kernels = len(h.resblock_kernel_sizes)\n        self.num_upsamples = len(h.upsample_rates)\n\n        self.feat_upsample = h.feat_upsample\n        self.cond_in_each_up_layer = h.cond_d_vector_in_each_upsampling_layer\n\n        # Pre-conv\n        self.conv_pre = weight_norm(\n            Conv1d(h.gpt_dim, h.upsample_initial_channel, 7, 1, padding=3)\n        )\n\n        # Define which AMPBlock to use. BigVGAN uses AMPBlock1 as default\n        if h.resblock == \"1\":\n            resblock_class = AMPBlock1\n        elif h.resblock == \"2\":\n            resblock_class = AMPBlock2\n        else:\n            raise ValueError(\n                f\"Incorrect resblock class specified in hyperparameters. Got {h.resblock}\"\n            )\n\n        # Transposed conv-based upsamplers. does not apply anti-aliasing\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)):\n            self.ups.append(\n                nn.ModuleList(\n                    [\n                        weight_norm(\n                            ConvTranspose1d(\n                                h.upsample_initial_channel // (2**i),\n                                h.upsample_initial_channel // (2 ** (i + 1)),\n                                k,\n                                u,\n                                padding=(k - u) // 2,\n                            )\n                        )\n                    ]\n                )\n            )\n\n        # Residual blocks using anti-aliased multi-periodicity composition modules (AMP)\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = h.upsample_initial_channel // (2 ** (i + 1))\n            for j, (k, d) in enumerate(\n                zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes)\n            ):\n                self.resblocks.append(\n                    resblock_class(h, ch, k, d, activation=h.activation)\n                )\n\n        # Post-conv\n        activation_post = (\n            activations.Snake(ch, alpha_logscale=h.snake_logscale)\n            if h.activation == \"snake\"\n            else (\n                activations.SnakeBeta(ch, alpha_logscale=h.snake_logscale)\n                if h.activation == \"snakebeta\"\n                else None\n            )\n        )\n        if activation_post is None:\n            raise NotImplementedError(\n                \"activation incorrectly specified. check the config file and look for 'activation'.\"\n            )\n\n        self.activation_post = Activation1d(activation=activation_post)\n\n        # Whether to use bias for the final conv_post. Default to True for backward compatibility\n        self.use_bias_at_final = h.get(\"use_bias_at_final\", True)\n        self.conv_post = weight_norm(\n            Conv1d(ch, 1, 7, 1, padding=3, bias=self.use_bias_at_final)\n        )\n\n        # Weight initialization\n        for i in range(len(self.ups)):\n            self.ups[i].apply(init_weights)\n        self.conv_post.apply(init_weights)\n\n        # Final tanh activation. Defaults to True for backward compatibility\n        self.use_tanh_at_final = h.get(\"use_tanh_at_final\", True)\n\n        self.speaker_encoder = ECAPA_TDNN(h.num_mels, lin_neurons=h.speaker_embedding_dim)\n        self.cond_layer = nn.Conv1d(h.speaker_embedding_dim, h.upsample_initial_channel, 1)\n        if self.cond_in_each_up_layer:\n            self.conds = nn.ModuleList()\n            for i in range(len(self.ups)):\n                ch = h.upsample_initial_channel // (2 ** (i + 1))\n                self.conds.append(nn.Conv1d(h.speaker_embedding_dim, ch, 1))\n\n    def forward(self, x, mel_refer, lens=None):\n        # Speaker reference\n        speaker_embedding = self.speaker_encoder(mel_refer, lens)\n        n_batch = x.size(0)\n        contrastive_loss = None\n        if n_batch * 2 == speaker_embedding.size(0):\n            spe_emb_chunk1, spe_emb_chunk2 = speaker_embedding[:n_batch, :, :], speaker_embedding[n_batch:, :, :]\n            contrastive_loss = self.cal_clip_loss(spe_emb_chunk1.squeeze(1), spe_emb_chunk2.squeeze(1),\n                                                  self.logit_scale.exp())\n\n            speaker_embedding = speaker_embedding[:n_batch, :, :]\n        speaker_embedding = speaker_embedding.transpose(1, 2)\n\n        # upsample feat\n        if self.feat_upsample:\n            x = torch.nn.functional.interpolate(\n                x.transpose(1, 2),\n                scale_factor=[4],\n                mode=\"linear\",\n            ).squeeze(1)\n        else:\n            x = x.transpose(1, 2)\n\n        # BigVGAN\n        # Pre-conv\n        x = self.conv_pre(x)\n        x = x + self.cond_layer(speaker_embedding)\n\n        for i in range(self.num_upsamples):\n            # Upsampling\n            for i_up in range(len(self.ups[i])):\n                x = self.ups[i][i_up](x)\n\n            if self.cond_in_each_up_layer:\n                x = x + self.conds[i](speaker_embedding)\n\n            # AMP blocks\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n\n        # Post-conv\n        x = self.activation_post(x)\n        x = self.conv_post(x)\n        # Final tanh activation\n        if self.use_tanh_at_final:\n            x = torch.tanh(x)\n        else:\n            x = torch.clamp(x, min=-1.0, max=1.0)  # Bound the output to [-1, 1]\n\n        return x, contrastive_loss\n\n    def remove_weight_norm(self):\n        try:\n            print(\"Removing weight norm...\")\n            for l in self.ups:\n                for l_i in l:\n                    remove_weight_norm(l_i)\n            for l in self.resblocks:\n                l.remove_weight_norm()\n            remove_weight_norm(self.conv_pre)\n            remove_weight_norm(self.conv_post)\n        except ValueError:\n            print(\"[INFO] Model already removed weight norm. Skipping!\")\n            pass\n\n    # Additional methods for huggingface_hub support\n    def _save_pretrained(self, save_directory: Path) -> None:\n        \"\"\"Save weights and config.json from a Pytorch model to a local directory.\"\"\"\n\n        model_path = save_directory / \"bigvgan_generator.pt\"\n        torch.save({\"generator\": self.state_dict()}, model_path)\n\n        config_path = save_directory / \"config.json\"\n        with open(config_path, \"w\") as config_file:\n            json.dump(self.h, config_file, indent=4)\n\n    @classmethod\n    def _from_pretrained(\n        cls,\n        *,\n        model_id: str,\n        revision: str,\n        cache_dir: str,\n        force_download: bool,\n        proxies: Optional[Dict],\n        resume_download: bool,\n        local_files_only: bool,\n        token: Union[str, bool, None],\n        map_location: str = \"cpu\",  # Additional argument\n        strict: bool = False,  # Additional argument\n        use_cuda_kernel: bool = False,\n        **model_kwargs,\n    ):\n        \"\"\"Load Pytorch pretrained weights and return the loaded model.\"\"\"\n\n        # Download and load hyperparameters (h) used by BigVGAN\n        if os.path.isdir(model_id):\n            print(\"Loading config.json from local directory\")\n            config_file = os.path.join(model_id, \"config.json\")\n        else:\n            config_file = hf_hub_download(\n                repo_id=model_id,\n                filename=\"config.json\",\n                revision=revision,\n                cache_dir=cache_dir,\n                force_download=force_download,\n                proxies=proxies,\n                resume_download=resume_download,\n                token=token,\n                local_files_only=local_files_only,\n            )\n        h = load_hparams_from_json(config_file)\n\n        # instantiate BigVGAN using h\n        if use_cuda_kernel:\n            print(\n                f\"[WARNING] You have specified use_cuda_kernel=True during BigVGAN.from_pretrained(). Only inference is supported (training is not implemented)!\"\n            )\n            print(\n                f\"[WARNING] You need nvcc and ninja installed in your system that matches your PyTorch build is using to build the kernel. If not, the model will fail to initialize or generate incorrect waveform!\"\n            )\n            print(\n                f\"[WARNING] For detail, see the official GitHub repository: https://github.com/NVIDIA/BigVGAN?tab=readme-ov-file#using-custom-cuda-kernel-for-synthesis\"\n            )\n        model = cls(h, use_cuda_kernel=use_cuda_kernel)\n\n        # Download and load pretrained generator weight\n        if os.path.isdir(model_id):\n            print(\"Loading weights from local directory\")\n            model_file = os.path.join(model_id, \"bigvgan_generator.pt\")\n        else:\n            print(f\"Loading weights from {model_id}\")\n            model_file = hf_hub_download(\n                repo_id=model_id,\n                filename=\"bigvgan_generator.pt\",\n                revision=revision,\n                cache_dir=cache_dir,\n                force_download=force_download,\n                proxies=proxies,\n                resume_download=resume_download,\n                token=token,\n                local_files_only=local_files_only,\n            )\n\n        checkpoint_dict = torch.load(model_file, map_location=map_location)\n\n        try:\n            model.load_state_dict(checkpoint_dict[\"generator\"])\n        except RuntimeError:\n            print(\n                f\"[INFO] the pretrained checkpoint does not contain weight norm. Loading the checkpoint after removing weight norm!\"\n            )\n            model.remove_weight_norm()\n            model.load_state_dict(checkpoint_dict[\"generator\"])\n\n        return model\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/models.py",
    "content": "# Copyright (c) 2022 NVIDIA CORPORATION.\n#   Licensed under the MIT license.\n\n# Adapted from https://github.com/jik876/hifi-gan under the MIT license.\n#   LICENSE is in incl_licenses directory.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.nn import Conv1d, Conv2d, ConvTranspose1d\nfrom torch.nn.utils import remove_weight_norm, spectral_norm, weight_norm\n\nimport indextts.BigVGAN.activations as activations\n\nfrom indextts.BigVGAN.ECAPA_TDNN import ECAPA_TDNN\nfrom indextts.BigVGAN.utils import get_padding, init_weights\n\nLRELU_SLOPE = 0.1\n\n\nclass AMPBlock1(torch.nn.Module):\n    def __init__(self, h, channels, kernel_size=3, dilation=(1, 3, 5), activation=None):\n        super(AMPBlock1, self).__init__()\n        self.h = h\n\n        self.convs1 = nn.ModuleList([\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0],\n                               padding=get_padding(kernel_size, dilation[0]))),\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1],\n                               padding=get_padding(kernel_size, dilation[1]))),\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[2],\n                               padding=get_padding(kernel_size, dilation[2])))\n        ])\n        self.convs1.apply(init_weights)\n\n        self.convs2 = nn.ModuleList([\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,\n                               padding=get_padding(kernel_size, 1))),\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,\n                               padding=get_padding(kernel_size, 1))),\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,\n                               padding=get_padding(kernel_size, 1)))\n        ])\n        self.convs2.apply(init_weights)\n\n        self.num_layers = len(self.convs1) + len(self.convs2)  # total number of conv layers\n        if self.h.get(\"use_cuda_kernel\", False):\n            from indextts.BigVGAN.alias_free_activation.cuda.activation1d import Activation1d\n        else:\n            from indextts.BigVGAN.alias_free_torch import Activation1d\n        if activation == 'snake':  # periodic nonlinearity with snake function and anti-aliasing\n            self.activations = nn.ModuleList([\n                Activation1d(\n                    activation=activations.Snake(channels, alpha_logscale=h.snake_logscale))\n                for _ in range(self.num_layers)\n            ])\n        elif activation == 'snakebeta':  # periodic nonlinearity with snakebeta function and anti-aliasing\n            self.activations = nn.ModuleList([\n                Activation1d(\n                    activation=activations.SnakeBeta(channels, alpha_logscale=h.snake_logscale))\n                for _ in range(self.num_layers)\n            ])\n        else:\n            raise NotImplementedError(\"activation incorrectly specified. check the config file and look for 'activation'.\")\n\n    def forward(self, x):\n        acts1, acts2 = self.activations[::2], self.activations[1::2]\n        for c1, c2, a1, a2 in zip(self.convs1, self.convs2, acts1, acts2):\n            xt = a1(x)\n            xt = c1(xt)\n            xt = a2(xt)\n            xt = c2(xt)\n            x = xt + x\n\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n\nclass AMPBlock2(torch.nn.Module):\n    def __init__(self, h, channels, kernel_size=3, dilation=(1, 3), activation=None):\n        super(AMPBlock2, self).__init__()\n        self.h = h\n\n        self.convs = nn.ModuleList([\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0],\n                               padding=get_padding(kernel_size, dilation[0]))),\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1],\n                               padding=get_padding(kernel_size, dilation[1])))\n        ])\n        self.convs.apply(init_weights)\n\n        self.num_layers = len(self.convs)  # total number of conv layers\n        if self.h.get(\"use_cuda_kernel\", False):\n            from indextts.BigVGAN.alias_free_activation.cuda.activation1d import Activation1d\n        else:\n            from indextts.BigVGAN.alias_free_torch import Activation1d\n\n        if activation == 'snake':  # periodic nonlinearity with snake function and anti-aliasing\n            self.activations = nn.ModuleList([\n                Activation1d(\n                    activation=activations.Snake(channels, alpha_logscale=h.snake_logscale))\n                for _ in range(self.num_layers)\n            ])\n        elif activation == 'snakebeta':  # periodic nonlinearity with snakebeta function and anti-aliasing\n            self.activations = nn.ModuleList([\n                Activation1d(\n                    activation=activations.SnakeBeta(channels, alpha_logscale=h.snake_logscale))\n                for _ in range(self.num_layers)\n            ])\n        else:\n            raise NotImplementedError(\"activation incorrectly specified. check the config file and look for 'activation'.\")\n\n    def forward(self, x):\n        for c, a in zip(self.convs, self.activations):\n            xt = a(x)\n            xt = c(xt)\n            x = xt + x\n\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs:\n            remove_weight_norm(l)\n\n\nclass BigVGAN(torch.nn.Module):\n    # this is our main BigVGAN model. Applies anti-aliased periodic activation for resblocks.\n    def __init__(self, h, use_cuda_kernel=False):\n        \"\"\"\n        Args:\n            h (dict)\n            use_cuda_kernel (bool): whether to use custom cuda kernel for anti-aliased activation\n        \"\"\"\n        super(BigVGAN, self).__init__()\n        self.h = h\n        self.h[\"use_cuda_kernel\"] = use_cuda_kernel\n\n        self.num_kernels = len(h.resblock_kernel_sizes)\n        self.num_upsamples = len(h.upsample_rates)\n\n        self.feat_upsample = h.feat_upsample\n        self.cond_in_each_up_layer = h.cond_d_vector_in_each_upsampling_layer\n\n        # pre conv\n        self.conv_pre = weight_norm(Conv1d(h.gpt_dim, h.upsample_initial_channel, 7, 1, padding=3))\n\n        # define which AMPBlock to use. BigVGAN uses AMPBlock1 as default\n        resblock = AMPBlock1 if h.resblock == \"1\" else AMPBlock2\n\n        # transposed conv-based upsamplers. does not apply anti-aliasing\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)):\n            self.ups.append(nn.ModuleList([\n                weight_norm(ConvTranspose1d(h.upsample_initial_channel // (2 ** i),\n                                            h.upsample_initial_channel // (2 ** (i + 1)),\n                                            k, u, padding=(k - u) // 2))\n            ]))\n\n        # residual blocks using anti-aliased multi-periodicity composition modules (AMP)\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = h.upsample_initial_channel // (2 ** (i + 1))\n            for j, (k, d) in enumerate(zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes)):\n                self.resblocks.append(resblock(self.h, ch, k, d, activation=h.activation))\n        if use_cuda_kernel:\n            from indextts.BigVGAN.alias_free_activation.cuda.activation1d import Activation1d\n        else:\n            from indextts.BigVGAN.alias_free_torch import Activation1d\n\n        # post conv\n        if h.activation == \"snake\":  # periodic nonlinearity with snake function and anti-aliasing\n            activation_post = activations.Snake(ch, alpha_logscale=h.snake_logscale)\n            self.activation_post = Activation1d(activation=activation_post)\n        elif h.activation == \"snakebeta\":  # periodic nonlinearity with snakebeta function and anti-aliasing\n            activation_post = activations.SnakeBeta(ch, alpha_logscale=h.snake_logscale)\n            self.activation_post = Activation1d(activation=activation_post)\n        else:\n            raise NotImplementedError(\"activation incorrectly specified. check the config file and look for 'activation'.\")\n\n        self.conv_post = weight_norm(Conv1d(ch, 1, 7, 1, padding=3))\n\n        # weight initialization\n        for i in range(len(self.ups)):\n            self.ups[i].apply(init_weights)\n        self.conv_post.apply(init_weights)\n\n        self.speaker_encoder = ECAPA_TDNN(h.num_mels, lin_neurons=h.speaker_embedding_dim)\n        self.cond_layer = nn.Conv1d(h.speaker_embedding_dim, h.upsample_initial_channel, 1)\n        if self.cond_in_each_up_layer:\n            self.conds = nn.ModuleList()\n            for i in range(len(self.ups)):\n                ch = h.upsample_initial_channel // (2 ** (i + 1))\n                self.conds.append(nn.Conv1d(h.speaker_embedding_dim, ch, 1))\n\n        # self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07))\n\n    def forward(self, x, mel_ref, lens=None):\n        speaker_embedding = self.speaker_encoder(mel_ref, lens)\n        n_batch = x.size(0)\n        contrastive_loss = None\n        if n_batch * 2 == speaker_embedding.size(0):\n            spe_emb_chunk1, spe_emb_chunk2 = speaker_embedding[:n_batch, :, :], speaker_embedding[n_batch:, :, :]\n            contrastive_loss = self.cal_clip_loss(spe_emb_chunk1.squeeze(1), spe_emb_chunk2.squeeze(1), self.logit_scale.exp())\n\n            speaker_embedding = speaker_embedding[:n_batch, :, :]\n        speaker_embedding = speaker_embedding.transpose(1, 2)\n\n        # upsample feat\n        if self.feat_upsample:\n            x = torch.nn.functional.interpolate(\n                x.transpose(1, 2),\n                scale_factor=[4],\n                mode=\"linear\",\n            ).squeeze(1)\n        else:\n            x = x.transpose(1, 2)\n\n        ### bigVGAN ###\n        # pre conv\n        x = self.conv_pre(x)\n\n        x = x + self.cond_layer(speaker_embedding)\n\n        for i in range(self.num_upsamples):\n            # upsampling\n            for i_up in range(len(self.ups[i])):\n                x = self.ups[i][i_up](x)\n\n            if self.cond_in_each_up_layer:\n                x = x + self.conds[i](speaker_embedding)\n\n            # AMP blocks\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n\n        # post conv\n        x = self.activation_post(x)\n        x = self.conv_post(x)\n        x = torch.tanh(x)\n\n        return x, contrastive_loss\n\n    def remove_weight_norm(self):\n        print('Removing weight norm...')\n        for l in self.ups:\n            for l_i in l:\n                remove_weight_norm(l_i)\n        for l in self.resblocks:\n            l.remove_weight_norm()\n        remove_weight_norm(self.conv_pre)\n        remove_weight_norm(self.conv_post)\n\n    def cal_clip_loss(self, image_features, text_features, logit_scale):\n        device = image_features.device\n        logits_per_image, logits_per_text = self.get_logits(image_features, text_features, logit_scale)\n        labels = torch.arange(logits_per_image.shape[0], device=device, dtype=torch.long)\n        total_loss = (\n            F.cross_entropy(logits_per_image, labels) +\n            F.cross_entropy(logits_per_text, labels)\n        ) / 2\n        return total_loss\n\n    def get_logits(self, image_features, text_features, logit_scale):\n        logits_per_image = logit_scale * image_features @ text_features.T\n        logits_per_text = logit_scale * text_features @ image_features.T\n        return logits_per_image, logits_per_text\n\n\nclass DiscriminatorP(torch.nn.Module):\n    def __init__(self, h, period, kernel_size=5, stride=3, use_spectral_norm=False):\n        super(DiscriminatorP, self).__init__()\n        self.period = period\n        self.d_mult = h.discriminator_channel_mult\n        norm_f = weight_norm if use_spectral_norm == False else spectral_norm\n        self.convs = nn.ModuleList([\n            norm_f(Conv2d(1, int(32 * self.d_mult), (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),\n            norm_f(Conv2d(int(32 * self.d_mult), int(128 * self.d_mult), (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),\n            norm_f(Conv2d(int(128 * self.d_mult), int(512 * self.d_mult), (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),\n            norm_f(Conv2d(int(512 * self.d_mult), int(1024 * self.d_mult), (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),\n            norm_f(Conv2d(int(1024 * self.d_mult), int(1024 * self.d_mult), (kernel_size, 1), 1, padding=(2, 0))),\n        ])\n        self.conv_post = norm_f(Conv2d(int(1024 * self.d_mult), 1, (3, 1), 1, padding=(1, 0)))\n\n    def forward(self, x):\n        fmap = []\n\n        # 1d to 2d\n        b, c, t = x.shape\n        if t % self.period != 0:  # pad first\n            n_pad = self.period - (t % self.period)\n            x = F.pad(x, (0, n_pad), \"reflect\")\n            t = t + n_pad\n        x = x.view(b, c, t // self.period, self.period)\n\n        for l in self.convs:\n            x = l(x)\n            x = F.leaky_relu(x, LRELU_SLOPE)\n            fmap.append(x)\n        x = self.conv_post(x)\n        fmap.append(x)\n        x = torch.flatten(x, 1, -1)\n\n        return x, fmap\n\n\nclass MultiPeriodDiscriminator(torch.nn.Module):\n    def __init__(self, h):\n        super(MultiPeriodDiscriminator, self).__init__()\n        self.mpd_reshapes = h.mpd_reshapes\n        print(\"mpd_reshapes: {}\".format(self.mpd_reshapes))\n        discriminators = [DiscriminatorP(h, rs, use_spectral_norm=h.use_spectral_norm) for rs in self.mpd_reshapes]\n        self.discriminators = nn.ModuleList(discriminators)\n\n    def forward(self, y, y_hat):\n        y_d_rs = []\n        y_d_gs = []\n        fmap_rs = []\n        fmap_gs = []\n        for i, d in enumerate(self.discriminators):\n            y_d_r, fmap_r = d(y)\n            y_d_g, fmap_g = d(y_hat)\n            y_d_rs.append(y_d_r)\n            fmap_rs.append(fmap_r)\n            y_d_gs.append(y_d_g)\n            fmap_gs.append(fmap_g)\n\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\nclass DiscriminatorR(nn.Module):\n    def __init__(self, cfg, resolution):\n        super().__init__()\n\n        self.resolution = resolution\n        assert len(self.resolution) == 3, \\\n            \"MRD layer requires list with len=3, got {}\".format(self.resolution)\n        self.lrelu_slope = LRELU_SLOPE\n\n        norm_f = weight_norm if cfg.use_spectral_norm == False else spectral_norm\n        if hasattr(cfg, \"mrd_use_spectral_norm\"):\n            print(\"INFO: overriding MRD use_spectral_norm as {}\".format(cfg.mrd_use_spectral_norm))\n            norm_f = weight_norm if cfg.mrd_use_spectral_norm == False else spectral_norm\n        self.d_mult = cfg.discriminator_channel_mult\n        if hasattr(cfg, \"mrd_channel_mult\"):\n            print(\"INFO: overriding mrd channel multiplier as {}\".format(cfg.mrd_channel_mult))\n            self.d_mult = cfg.mrd_channel_mult\n\n        self.convs = nn.ModuleList([\n            norm_f(nn.Conv2d(1, int(32 * self.d_mult), (3, 9), padding=(1, 4))),\n            norm_f(nn.Conv2d(int(32 * self.d_mult), int(32 * self.d_mult), (3, 9), stride=(1, 2), padding=(1, 4))),\n            norm_f(nn.Conv2d(int(32 * self.d_mult), int(32 * self.d_mult), (3, 9), stride=(1, 2), padding=(1, 4))),\n            norm_f(nn.Conv2d(int(32 * self.d_mult), int(32 * self.d_mult), (3, 9), stride=(1, 2), padding=(1, 4))),\n            norm_f(nn.Conv2d(int(32 * self.d_mult), int(32 * self.d_mult), (3, 3), padding=(1, 1))),\n        ])\n        self.conv_post = norm_f(nn.Conv2d(int(32 * self.d_mult), 1, (3, 3), padding=(1, 1)))\n\n    def forward(self, x):\n        fmap = []\n\n        x = self.spectrogram(x)\n        x = x.unsqueeze(1)\n        for l in self.convs:\n            x = l(x)\n            x = F.leaky_relu(x, self.lrelu_slope)\n            fmap.append(x)\n        x = self.conv_post(x)\n        fmap.append(x)\n        x = torch.flatten(x, 1, -1)\n\n        return x, fmap\n\n    def spectrogram(self, x):\n        n_fft, hop_length, win_length = self.resolution\n        x = F.pad(x, (int((n_fft - hop_length) / 2), int((n_fft - hop_length) / 2)), mode='reflect')\n        x = x.squeeze(1)\n        x = torch.stft(x, n_fft=n_fft, hop_length=hop_length, win_length=win_length, center=False, return_complex=True)\n        x = torch.view_as_real(x)  # [B, F, TT, 2]\n        mag = torch.norm(x, p=2, dim=-1)  # [B, F, TT]\n\n        return mag\n\n\nclass MultiResolutionDiscriminator(nn.Module):\n    def __init__(self, cfg, debug=False):\n        super().__init__()\n        self.resolutions = cfg.resolutions\n        assert len(self.resolutions) == 3, \\\n            \"MRD requires list of list with len=3, each element having a list with len=3. got {}\".\\\n            format(self.resolutions)\n        self.discriminators = nn.ModuleList(\n            [DiscriminatorR(cfg, resolution) for resolution in self.resolutions]\n        )\n\n    def forward(self, y, y_hat):\n        y_d_rs = []\n        y_d_gs = []\n        fmap_rs = []\n        fmap_gs = []\n\n        for i, d in enumerate(self.discriminators):\n            y_d_r, fmap_r = d(x=y)\n            y_d_g, fmap_g = d(x=y_hat)\n            y_d_rs.append(y_d_r)\n            fmap_rs.append(fmap_r)\n            y_d_gs.append(y_d_g)\n            fmap_gs.append(fmap_g)\n\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\ndef feature_loss(fmap_r, fmap_g):\n    loss = 0\n    for dr, dg in zip(fmap_r, fmap_g):\n        for rl, gl in zip(dr, dg):\n            loss += torch.mean(torch.abs(rl - gl))\n\n    return loss * 2\n\n\ndef discriminator_loss(disc_real_outputs, disc_generated_outputs):\n    loss = 0\n    r_losses = []\n    g_losses = []\n    for dr, dg in zip(disc_real_outputs, disc_generated_outputs):\n        r_loss = torch.mean((1 - dr)**2)\n        g_loss = torch.mean(dg**2)\n        loss += (r_loss + g_loss)\n        r_losses.append(r_loss.item())\n        g_losses.append(g_loss.item())\n\n    return loss, r_losses, g_losses\n\n\ndef generator_loss(disc_outputs):\n    loss = 0\n    gen_losses = []\n    for dg in disc_outputs:\n        l = torch.mean((1 - dg)**2)\n        gen_losses.append(l)\n        loss += l\n\n    return loss, gen_losses\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/nnet/CNN.py",
    "content": "\"\"\"Library implementing convolutional neural networks.\n\nAuthors\n * Mirco Ravanelli 2020\n * Jianyuan Zhong 2020\n * Cem Subakan 2021\n * Davide Borra 2021\n * Andreas Nautsch 2022\n * Sarthak Yadav 2022\n\"\"\"\n\nimport logging\nimport math\nfrom typing import Tuple\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torchaudio\n\n\nclass SincConv(nn.Module):\n    \"\"\"This function implements SincConv (SincNet).\n\n    M. Ravanelli, Y. Bengio, \"Speaker Recognition from raw waveform with\n    SincNet\", in Proc. of  SLT 2018 (https://arxiv.org/abs/1808.00158)\n\n    Arguments\n    ---------\n    out_channels : int\n        It is the number of output channels.\n    kernel_size: int\n        Kernel size of the convolutional filters.\n    input_shape : tuple\n        The shape of the input. Alternatively use ``in_channels``.\n    in_channels : int\n        The number of input channels. Alternatively use ``input_shape``.\n    stride : int\n        Stride factor of the convolutional filters. When the stride factor > 1,\n        a decimation in time is performed.\n    dilation : int\n        Dilation factor of the convolutional filters.\n    padding : str\n        (same, valid, causal). If \"valid\", no padding is performed.\n        If \"same\" and stride is 1, output shape is the same as the input shape.\n        \"causal\" results in causal (dilated) convolutions.\n    padding_mode : str\n        This flag specifies the type of padding. See torch.nn documentation\n        for more information.\n    sample_rate : int\n        Sampling rate of the input signals. It is only used for sinc_conv.\n    min_low_hz : float\n        Lowest possible frequency (in Hz) for a filter. It is only used for\n        sinc_conv.\n    min_band_hz : float\n        Lowest possible value (in Hz) for a filter bandwidth.\n\n    Example\n    -------\n    >>> inp_tensor = torch.rand([10, 16000])\n    >>> conv = SincConv(input_shape=inp_tensor.shape, out_channels=25, kernel_size=11)\n    >>> out_tensor = conv(inp_tensor)\n    >>> out_tensor.shape\n    torch.Size([10, 16000, 25])\n    \"\"\"\n\n    def __init__(\n        self,\n        out_channels,\n        kernel_size,\n        input_shape=None,\n        in_channels=None,\n        stride=1,\n        dilation=1,\n        padding=\"same\",\n        padding_mode=\"reflect\",\n        sample_rate=16000,\n        min_low_hz=50,\n        min_band_hz=50,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        self.stride = stride\n        self.dilation = dilation\n        self.padding = padding\n        self.padding_mode = padding_mode\n        self.sample_rate = sample_rate\n        self.min_low_hz = min_low_hz\n        self.min_band_hz = min_band_hz\n\n        # input shape inference\n        if input_shape is None and self.in_channels is None:\n            raise ValueError(\"Must provide one of input_shape or in_channels\")\n\n        if self.in_channels is None:\n            self.in_channels = self._check_input_shape(input_shape)\n\n        if self.out_channels % self.in_channels != 0:\n            raise ValueError(\n                \"Number of output channels must be divisible by in_channels\"\n            )\n\n        # Initialize Sinc filters\n        self._init_sinc_conv()\n\n    def forward(self, x):\n        \"\"\"Returns the output of the convolution.\n\n        Arguments\n        ---------\n        x : torch.Tensor (batch, time, channel)\n            input to convolve. 2d or 4d tensors are expected.\n\n        Returns\n        -------\n        wx : torch.Tensor\n            The convolved outputs.\n        \"\"\"\n        x = x.transpose(1, -1)\n        self.device = x.device\n\n        unsqueeze = x.ndim == 2\n        if unsqueeze:\n            x = x.unsqueeze(1)\n\n        if self.padding == \"same\":\n            x = self._manage_padding(\n                x, self.kernel_size, self.dilation, self.stride\n            )\n\n        elif self.padding == \"causal\":\n            num_pad = (self.kernel_size - 1) * self.dilation\n            x = F.pad(x, (num_pad, 0))\n\n        elif self.padding == \"valid\":\n            pass\n\n        else:\n            raise ValueError(\n                \"Padding must be 'same', 'valid' or 'causal'. Got %s.\"\n                % (self.padding)\n            )\n\n        sinc_filters = self._get_sinc_filters()\n\n        wx = F.conv1d(\n            x,\n            sinc_filters,\n            stride=self.stride,\n            padding=0,\n            dilation=self.dilation,\n            groups=self.in_channels,\n        )\n\n        if unsqueeze:\n            wx = wx.squeeze(1)\n\n        wx = wx.transpose(1, -1)\n\n        return wx\n\n    def _check_input_shape(self, shape):\n        \"\"\"Checks the input shape and returns the number of input channels.\"\"\"\n\n        if len(shape) == 2:\n            in_channels = 1\n        elif len(shape) == 3:\n            in_channels = shape[-1]\n        else:\n            raise ValueError(\n                \"sincconv expects 2d or 3d inputs. Got \" + str(len(shape))\n            )\n\n        # Kernel size must be odd\n        if self.kernel_size % 2 == 0:\n            raise ValueError(\n                \"The field kernel size must be an odd number. Got %s.\"\n                % (self.kernel_size)\n            )\n        return in_channels\n\n    def _get_sinc_filters(self):\n        \"\"\"This functions creates the sinc-filters to used for sinc-conv.\"\"\"\n        # Computing the low frequencies of the filters\n        low = self.min_low_hz + torch.abs(self.low_hz_)\n\n        # Setting minimum band and minimum freq\n        high = torch.clamp(\n            low + self.min_band_hz + torch.abs(self.band_hz_),\n            self.min_low_hz,\n            self.sample_rate / 2,\n        )\n        band = (high - low)[:, 0]\n\n        # Passing from n_ to the corresponding f_times_t domain\n        self.n_ = self.n_.to(self.device)\n        self.window_ = self.window_.to(self.device)\n        f_times_t_low = torch.matmul(low, self.n_)\n        f_times_t_high = torch.matmul(high, self.n_)\n\n        # Left part of the filters.\n        band_pass_left = (\n            (torch.sin(f_times_t_high) - torch.sin(f_times_t_low))\n            / (self.n_ / 2)\n        ) * self.window_\n\n        # Central element of the filter\n        band_pass_center = 2 * band.view(-1, 1)\n\n        # Right part of the filter (sinc filters are symmetric)\n        band_pass_right = torch.flip(band_pass_left, dims=[1])\n\n        # Combining left, central, and right part of the filter\n        band_pass = torch.cat(\n            [band_pass_left, band_pass_center, band_pass_right], dim=1\n        )\n\n        # Amplitude normalization\n        band_pass = band_pass / (2 * band[:, None])\n\n        # Setting up the filter coefficients\n        filters = band_pass.view(self.out_channels, 1, self.kernel_size)\n\n        return filters\n\n    def _init_sinc_conv(self):\n        \"\"\"Initializes the parameters of the sinc_conv layer.\"\"\"\n\n        # Initialize filterbanks such that they are equally spaced in Mel scale\n        high_hz = self.sample_rate / 2 - (self.min_low_hz + self.min_band_hz)\n\n        mel = torch.linspace(\n            self._to_mel(self.min_low_hz),\n            self._to_mel(high_hz),\n            self.out_channels + 1,\n        )\n\n        hz = self._to_hz(mel)\n\n        # Filter lower frequency and bands\n        self.low_hz_ = hz[:-1].unsqueeze(1)\n        self.band_hz_ = (hz[1:] - hz[:-1]).unsqueeze(1)\n\n        # Maiking freq and bands learnable\n        self.low_hz_ = nn.Parameter(self.low_hz_)\n        self.band_hz_ = nn.Parameter(self.band_hz_)\n\n        # Hamming window\n        n_lin = torch.linspace(\n            0, (self.kernel_size / 2) - 1, steps=int((self.kernel_size / 2))\n        )\n        self.window_ = 0.54 - 0.46 * torch.cos(\n            2 * math.pi * n_lin / self.kernel_size\n        )\n\n        # Time axis  (only half is needed due to symmetry)\n        n = (self.kernel_size - 1) / 2.0\n        self.n_ = (\n            2 * math.pi * torch.arange(-n, 0).view(1, -1) / self.sample_rate\n        )\n\n    def _to_mel(self, hz):\n        \"\"\"Converts frequency in Hz to the mel scale.\"\"\"\n        return 2595 * np.log10(1 + hz / 700)\n\n    def _to_hz(self, mel):\n        \"\"\"Converts frequency in the mel scale to Hz.\"\"\"\n        return 700 * (10 ** (mel / 2595) - 1)\n\n    def _manage_padding(self, x, kernel_size: int, dilation: int, stride: int):\n        \"\"\"This function performs zero-padding on the time axis\n        such that their lengths is unchanged after the convolution.\n\n        Arguments\n        ---------\n        x : torch.Tensor\n            Input tensor.\n        kernel_size : int\n            Size of kernel.\n        dilation : int\n            Dilation used.\n        stride : int\n            Stride.\n\n        Returns\n        -------\n        x : torch.Tensor\n        \"\"\"\n\n        # Detecting input shape\n        L_in = self.in_channels\n\n        # Time padding\n        padding = get_padding_elem(L_in, stride, kernel_size, dilation)\n\n        # Applying padding\n        x = F.pad(x, padding, mode=self.padding_mode)\n\n        return x\n\n\nclass Conv1d(nn.Module):\n    \"\"\"This function implements 1d convolution.\n\n    Arguments\n    ---------\n    out_channels : int\n        It is the number of output channels.\n    kernel_size : int\n        Kernel size of the convolutional filters.\n    input_shape : tuple\n        The shape of the input. Alternatively use ``in_channels``.\n    in_channels : int\n        The number of input channels. Alternatively use ``input_shape``.\n    stride : int\n        Stride factor of the convolutional filters. When the stride factor > 1,\n        a decimation in time is performed.\n    dilation : int\n        Dilation factor of the convolutional filters.\n    padding : str\n        (same, valid, causal). If \"valid\", no padding is performed.\n        If \"same\" and stride is 1, output shape is the same as the input shape.\n        \"causal\" results in causal (dilated) convolutions.\n    groups : int\n        Number of blocked connections from input channels to output channels.\n    bias : bool\n        Whether to add a bias term to convolution operation.\n    padding_mode : str\n        This flag specifies the type of padding. See torch.nn documentation\n        for more information.\n    skip_transpose : bool\n        If False, uses batch x time x channel convention of speechbrain.\n        If True, uses batch x channel x time convention.\n    weight_norm : bool\n        If True, use weight normalization,\n        to be removed with self.remove_weight_norm() at inference\n    conv_init : str\n        Weight initialization for the convolution network\n    default_padding: str or int\n        This sets the default padding mode that will be used by the pytorch Conv1d backend.\n\n    Example\n    -------\n    >>> inp_tensor = torch.rand([10, 40, 16])\n    >>> cnn_1d = Conv1d(\n    ...     input_shape=inp_tensor.shape, out_channels=8, kernel_size=5\n    ... )\n    >>> out_tensor = cnn_1d(inp_tensor)\n    >>> out_tensor.shape\n    torch.Size([10, 40, 8])\n    \"\"\"\n\n    def __init__(\n        self,\n        out_channels,\n        kernel_size,\n        input_shape=None,\n        in_channels=None,\n        stride=1,\n        dilation=1,\n        padding=\"same\",\n        groups=1,\n        bias=True,\n        padding_mode=\"reflect\",\n        skip_transpose=False,\n        weight_norm=False,\n        conv_init=None,\n        default_padding=0,\n    ):\n        super().__init__()\n        self.kernel_size = kernel_size\n        self.stride = stride\n        self.dilation = dilation\n        self.padding = padding\n        self.padding_mode = padding_mode\n        self.unsqueeze = False\n        self.skip_transpose = skip_transpose\n\n        if input_shape is None and in_channels is None:\n            raise ValueError(\"Must provide one of input_shape or in_channels\")\n\n        if in_channels is None:\n            in_channels = self._check_input_shape(input_shape)\n\n        self.in_channels = in_channels\n\n        self.conv = nn.Conv1d(\n            in_channels,\n            out_channels,\n            self.kernel_size,\n            stride=self.stride,\n            dilation=self.dilation,\n            padding=default_padding,\n            groups=groups,\n            bias=bias,\n        )\n\n        if conv_init == \"kaiming\":\n            nn.init.kaiming_normal_(self.conv.weight)\n        elif conv_init == \"zero\":\n            nn.init.zeros_(self.conv.weight)\n        elif conv_init == \"normal\":\n            nn.init.normal_(self.conv.weight, std=1e-6)\n\n        if weight_norm:\n            self.conv = nn.utils.weight_norm(self.conv)\n\n    def forward(self, x):\n        \"\"\"Returns the output of the convolution.\n\n        Arguments\n        ---------\n        x : torch.Tensor (batch, time, channel)\n            input to convolve. 2d or 4d tensors are expected.\n\n        Returns\n        -------\n        wx : torch.Tensor\n            The convolved outputs.\n        \"\"\"\n        if not self.skip_transpose:\n            x = x.transpose(1, -1)\n\n        if self.unsqueeze:\n            x = x.unsqueeze(1)\n\n        if self.padding == \"same\":\n            x = self._manage_padding(\n                x, self.kernel_size, self.dilation, self.stride\n            )\n\n        elif self.padding == \"causal\":\n            num_pad = (self.kernel_size - 1) * self.dilation\n            x = F.pad(x, (num_pad, 0))\n\n        elif self.padding == \"valid\":\n            pass\n\n        else:\n            raise ValueError(\n                \"Padding must be 'same', 'valid' or 'causal'. Got \"\n                + self.padding\n            )\n\n        wx = self.conv(x)\n\n        if self.unsqueeze:\n            wx = wx.squeeze(1)\n\n        if not self.skip_transpose:\n            wx = wx.transpose(1, -1)\n\n        return wx\n\n    def _manage_padding(self, x, kernel_size: int, dilation: int, stride: int):\n        \"\"\"This function performs zero-padding on the time axis\n        such that their lengths is unchanged after the convolution.\n\n        Arguments\n        ---------\n        x : torch.Tensor\n            Input tensor.\n        kernel_size : int\n            Size of kernel.\n        dilation : int\n            Dilation used.\n        stride : int\n            Stride.\n\n        Returns\n        -------\n        x : torch.Tensor\n            The padded outputs.\n        \"\"\"\n\n        # Detecting input shape\n        L_in = self.in_channels\n\n        # Time padding\n        padding = get_padding_elem(L_in, stride, kernel_size, dilation)\n\n        # Applying padding\n        x = F.pad(x, padding, mode=self.padding_mode)\n\n        return x\n\n    def _check_input_shape(self, shape):\n        \"\"\"Checks the input shape and returns the number of input channels.\"\"\"\n\n        if len(shape) == 2:\n            self.unsqueeze = True\n            in_channels = 1\n        elif self.skip_transpose:\n            in_channels = shape[1]\n        elif len(shape) == 3:\n            in_channels = shape[2]\n        else:\n            raise ValueError(\n                \"conv1d expects 2d, 3d inputs. Got \" + str(len(shape))\n            )\n\n        # Kernel size must be odd\n        if not self.padding == \"valid\" and self.kernel_size % 2 == 0:\n            raise ValueError(\n                \"The field kernel size must be an odd number. Got %s.\"\n                % (self.kernel_size)\n            )\n\n        return in_channels\n\n    def remove_weight_norm(self):\n        \"\"\"Removes weight normalization at inference if used during training.\"\"\"\n        self.conv = nn.utils.remove_weight_norm(self.conv)\n\n\ndef get_padding_elem(L_in: int, stride: int, kernel_size: int, dilation: int):\n    \"\"\"This function computes the number of elements to add for zero-padding.\n\n    Arguments\n    ---------\n    L_in : int\n    stride: int\n    kernel_size : int\n    dilation : int\n\n    Returns\n    -------\n    padding : int\n        The size of the padding to be added\n    \"\"\"\n    if stride > 1:\n        padding = [math.floor(kernel_size / 2), math.floor(kernel_size / 2)]\n\n    else:\n        L_out = (\n            math.floor((L_in - dilation * (kernel_size - 1) - 1) / stride) + 1\n        )\n        padding = [\n            math.floor((L_in - L_out) / 2),\n            math.floor((L_in - L_out) / 2),\n        ]\n    return padding\n\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/nnet/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/nnet/linear.py",
    "content": "\"\"\"Library implementing linear transformation.\n\nAuthors\n * Mirco Ravanelli 2020\n * Davide Borra 2021\n\"\"\"\n\nimport logging\n\nimport torch\nimport torch.nn as nn\n\n\nclass Linear(torch.nn.Module):\n    \"\"\"Computes a linear transformation y = wx + b.\n\n    Arguments\n    ---------\n    n_neurons : int\n        It is the number of output neurons (i.e, the dimensionality of the\n        output).\n    input_shape : tuple\n        It is the shape of the input tensor.\n    input_size : int\n        Size of the input tensor.\n    bias : bool\n        If True, the additive bias b is adopted.\n    max_norm : float\n        weight max-norm.\n    combine_dims : bool\n        If True and the input is 4D, combine 3rd and 4th dimensions of input.\n\n    Example\n    -------\n    >>> inputs = torch.rand(10, 50, 40)\n    >>> lin_t = Linear(input_shape=(10, 50, 40), n_neurons=100)\n    >>> output = lin_t(inputs)\n    >>> output.shape\n    torch.Size([10, 50, 100])\n    \"\"\"\n\n    def __init__(\n        self,\n        n_neurons,\n        input_shape=None,\n        input_size=None,\n        bias=True,\n        max_norm=None,\n        combine_dims=False,\n    ):\n        super().__init__()\n        self.max_norm = max_norm\n        self.combine_dims = combine_dims\n\n        if input_shape is None and input_size is None:\n            raise ValueError(\"Expected one of input_shape or input_size\")\n\n        if input_size is None:\n            input_size = input_shape[-1]\n            if len(input_shape) == 4 and self.combine_dims:\n                input_size = input_shape[2] * input_shape[3]\n\n        # Weights are initialized following pytorch approach\n        self.w = nn.Linear(input_size, n_neurons, bias=bias)\n\n    def forward(self, x):\n        \"\"\"Returns the linear transformation of input tensor.\n\n        Arguments\n        ---------\n        x : torch.Tensor\n            Input to transform linearly.\n\n        Returns\n        -------\n        wx : torch.Tensor\n            The linearly transformed outputs.\n        \"\"\"\n        if x.ndim == 4 and self.combine_dims:\n            x = x.reshape(x.shape[0], x.shape[1], x.shape[2] * x.shape[3])\n\n        if self.max_norm is not None:\n            self.w.weight.data = torch.renorm(\n                self.w.weight.data, p=2, dim=0, maxnorm=self.max_norm\n            )\n\n        wx = self.w(x)\n\n        return wx\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/nnet/normalization.py",
    "content": "\"\"\"Library implementing normalization.\n\nAuthors\n * Mirco Ravanelli 2020\n * Guillermo Cámbara 2021\n * Sarthak Yadav 2022\n\"\"\"\n\nimport torch\nimport torch.nn as nn\n\n\nclass BatchNorm1d(nn.Module):\n    \"\"\"Applies 1d batch normalization to the input tensor.\n\n    Arguments\n    ---------\n    input_shape : tuple\n        The expected shape of the input. Alternatively, use ``input_size``.\n    input_size : int\n        The expected size of the input. Alternatively, use ``input_shape``.\n    eps : float\n        This value is added to std deviation estimation to improve the numerical\n        stability.\n    momentum : float\n        It is a value used for the running_mean and running_var computation.\n    affine : bool\n        When set to True, the affine parameters are learned.\n    track_running_stats : bool\n        When set to True, this module tracks the running mean and variance,\n        and when set to False, this module does not track such statistics.\n    combine_batch_time : bool\n        When true, it combines batch an time axis.\n    skip_transpose : bool\n        Whether to skip the transposition.\n\n\n    Example\n    -------\n    >>> input = torch.randn(100, 10)\n    >>> norm = BatchNorm1d(input_shape=input.shape)\n    >>> output = norm(input)\n    >>> output.shape\n    torch.Size([100, 10])\n    \"\"\"\n\n    def __init__(\n        self,\n        input_shape=None,\n        input_size=None,\n        eps=1e-05,\n        momentum=0.1,\n        affine=True,\n        track_running_stats=True,\n        combine_batch_time=False,\n        skip_transpose=False,\n    ):\n        super().__init__()\n        self.combine_batch_time = combine_batch_time\n        self.skip_transpose = skip_transpose\n\n        if input_size is None and skip_transpose:\n            input_size = input_shape[1]\n        elif input_size is None:\n            input_size = input_shape[-1]\n\n        self.norm = nn.BatchNorm1d(\n            input_size,\n            eps=eps,\n            momentum=momentum,\n            affine=affine,\n            track_running_stats=track_running_stats,\n        )\n\n    def forward(self, x):\n        \"\"\"Returns the normalized input tensor.\n\n        Arguments\n        ---------\n        x : torch.Tensor (batch, time, [channels])\n            input to normalize. 2d or 3d tensors are expected in input\n            4d tensors can be used when combine_dims=True.\n\n        Returns\n        -------\n        x_n : torch.Tensor\n            The normalized outputs.\n        \"\"\"\n        shape_or = x.shape\n        if self.combine_batch_time:\n            if x.ndim == 3:\n                x = x.reshape(shape_or[0] * shape_or[1], shape_or[2])\n            else:\n                x = x.reshape(\n                    shape_or[0] * shape_or[1], shape_or[3], shape_or[2]\n                )\n\n        elif not self.skip_transpose:\n            x = x.transpose(-1, 1)\n\n        x_n = self.norm(x)\n\n        if self.combine_batch_time:\n            x_n = x_n.reshape(shape_or)\n        elif not self.skip_transpose:\n            x_n = x_n.transpose(1, -1)\n\n        return x_n\n\n\nclass BatchNorm2d(nn.Module):\n    \"\"\"Applies 2d batch normalization to the input tensor.\n\n    Arguments\n    ---------\n    input_shape : tuple\n        The expected shape of the input. Alternatively, use ``input_size``.\n    input_size : int\n        The expected size of the input. Alternatively, use ``input_shape``.\n    eps : float\n        This value is added to std deviation estimation to improve the numerical\n        stability.\n    momentum : float\n        It is a value used for the running_mean and running_var computation.\n    affine : bool\n        When set to True, the affine parameters are learned.\n    track_running_stats : bool\n        When set to True, this module tracks the running mean and variance,\n        and when set to False, this module does not track such statistics.\n\n    Example\n    -------\n    >>> input = torch.randn(100, 10, 5, 20)\n    >>> norm = BatchNorm2d(input_shape=input.shape)\n    >>> output = norm(input)\n    >>> output.shape\n    torch.Size([100, 10, 5, 20])\n    \"\"\"\n\n    def __init__(\n        self,\n        input_shape=None,\n        input_size=None,\n        eps=1e-05,\n        momentum=0.1,\n        affine=True,\n        track_running_stats=True,\n    ):\n        super().__init__()\n\n        if input_shape is None and input_size is None:\n            raise ValueError(\"Expected input_shape or input_size as input\")\n\n        if input_size is None:\n            input_size = input_shape[-1]\n\n        self.norm = nn.BatchNorm2d(\n            input_size,\n            eps=eps,\n            momentum=momentum,\n            affine=affine,\n            track_running_stats=track_running_stats,\n        )\n\n    def forward(self, x):\n        \"\"\"Returns the normalized input tensor.\n\n        Arguments\n        ---------\n        x : torch.Tensor (batch, time, channel1, channel2)\n            input to normalize. 4d tensors are expected.\n\n        Returns\n        -------\n        x_n : torch.Tensor\n            The normalized outputs.\n        \"\"\"\n        x = x.transpose(-1, 1)\n        x_n = self.norm(x)\n        x_n = x_n.transpose(1, -1)\n\n        return x_n\n\n\nclass LayerNorm(nn.Module):\n    \"\"\"Applies layer normalization to the input tensor.\n\n    Arguments\n    ---------\n    input_size : int\n        The expected size of the dimension to be normalized.\n    input_shape : tuple\n        The expected shape of the input.\n    eps : float\n        This value is added to std deviation estimation to improve the numerical\n        stability.\n    elementwise_affine : bool\n        If True, this module has learnable per-element affine parameters\n        initialized to ones (for weights) and zeros (for biases).\n\n    Example\n    -------\n    >>> input = torch.randn(100, 101, 128)\n    >>> norm = LayerNorm(input_shape=input.shape)\n    >>> output = norm(input)\n    >>> output.shape\n    torch.Size([100, 101, 128])\n    \"\"\"\n\n    def __init__(\n        self,\n        input_size=None,\n        input_shape=None,\n        eps=1e-05,\n        elementwise_affine=True,\n    ):\n        super().__init__()\n        self.eps = eps\n        self.elementwise_affine = elementwise_affine\n\n        if input_shape is not None:\n            input_size = input_shape[2:]\n\n        self.norm = torch.nn.LayerNorm(\n            input_size,\n            eps=self.eps,\n            elementwise_affine=self.elementwise_affine,\n        )\n\n    def forward(self, x):\n        \"\"\"Returns the normalized input tensor.\n\n        Arguments\n        ---------\n        x : torch.Tensor (batch, time, channels)\n            input to normalize. 3d or 4d tensors are expected.\n\n        Returns\n        -------\n        The normalized outputs.\n        \"\"\"\n        return self.norm(x)\n\n\nclass InstanceNorm1d(nn.Module):\n    \"\"\"Applies 1d instance normalization to the input tensor.\n\n    Arguments\n    ---------\n    input_shape : tuple\n        The expected shape of the input. Alternatively, use ``input_size``.\n    input_size : int\n        The expected size of the input. Alternatively, use ``input_shape``.\n    eps : float\n        This value is added to std deviation estimation to improve the numerical\n        stability.\n    momentum : float\n        It is a value used for the running_mean and running_var computation.\n    track_running_stats : bool\n        When set to True, this module tracks the running mean and variance,\n        and when set to False, this module does not track such statistics.\n    affine : bool\n        A boolean value that when set to True, this module has learnable\n        affine parameters, initialized the same way as done for\n        batch normalization. Default: False.\n\n    Example\n    -------\n    >>> input = torch.randn(100, 10, 20)\n    >>> norm = InstanceNorm1d(input_shape=input.shape)\n    >>> output = norm(input)\n    >>> output.shape\n    torch.Size([100, 10, 20])\n    \"\"\"\n\n    def __init__(\n        self,\n        input_shape=None,\n        input_size=None,\n        eps=1e-05,\n        momentum=0.1,\n        track_running_stats=True,\n        affine=False,\n    ):\n        super().__init__()\n\n        if input_shape is None and input_size is None:\n            raise ValueError(\"Expected input_shape or input_size as input\")\n\n        if input_size is None:\n            input_size = input_shape[-1]\n\n        self.norm = nn.InstanceNorm1d(\n            input_size,\n            eps=eps,\n            momentum=momentum,\n            track_running_stats=track_running_stats,\n            affine=affine,\n        )\n\n    def forward(self, x):\n        \"\"\"Returns the normalized input tensor.\n\n        Arguments\n        ---------\n        x : torch.Tensor (batch, time, channels)\n            input to normalize. 3d tensors are expected.\n\n        Returns\n        -------\n        x_n : torch.Tensor\n            The normalized outputs.\n        \"\"\"\n        x = x.transpose(-1, 1)\n        x_n = self.norm(x)\n        x_n = x_n.transpose(1, -1)\n\n        return x_n\n\n\nclass InstanceNorm2d(nn.Module):\n    \"\"\"Applies 2d instance normalization to the input tensor.\n\n    Arguments\n    ---------\n    input_shape : tuple\n        The expected shape of the input. Alternatively, use ``input_size``.\n    input_size : int\n        The expected size of the input. Alternatively, use ``input_shape``.\n    eps : float\n        This value is added to std deviation estimation to improve the numerical\n        stability.\n    momentum : float\n        It is a value used for the running_mean and running_var computation.\n    track_running_stats : bool\n        When set to True, this module tracks the running mean and variance,\n        and when set to False, this module does not track such statistics.\n    affine : bool\n        A boolean value that when set to True, this module has learnable\n        affine parameters, initialized the same way as done for\n        batch normalization. Default: False.\n\n    Example\n    -------\n    >>> input = torch.randn(100, 10, 20, 2)\n    >>> norm = InstanceNorm2d(input_shape=input.shape)\n    >>> output = norm(input)\n    >>> output.shape\n    torch.Size([100, 10, 20, 2])\n    \"\"\"\n\n    def __init__(\n        self,\n        input_shape=None,\n        input_size=None,\n        eps=1e-05,\n        momentum=0.1,\n        track_running_stats=True,\n        affine=False,\n    ):\n        super().__init__()\n\n        if input_shape is None and input_size is None:\n            raise ValueError(\"Expected input_shape or input_size as input\")\n\n        if input_size is None:\n            input_size = input_shape[-1]\n\n        self.norm = nn.InstanceNorm2d(\n            input_size,\n            eps=eps,\n            momentum=momentum,\n            track_running_stats=track_running_stats,\n            affine=affine,\n        )\n\n    def forward(self, x):\n        \"\"\"Returns the normalized input tensor.\n\n        Arguments\n        ---------\n        x : torch.Tensor (batch, time, channel1, channel2)\n            input to normalize. 4d tensors are expected.\n\n        Returns\n        -------\n        x_n : torch.Tensor\n            The normalized outputs.\n        \"\"\"\n        x = x.transpose(-1, 1)\n        x_n = self.norm(x)\n        x_n = x_n.transpose(1, -1)\n\n        return x_n\n\n\nclass GroupNorm(nn.Module):\n    \"\"\"Applies group normalization to the input tensor.\n\n    Arguments\n    ---------\n    input_shape : tuple\n        The expected shape of the input. Alternatively, use ``input_size``.\n    input_size : int\n        The expected size of the input. Alternatively, use ``input_shape``.\n    num_groups : int\n        Number of groups to separate the channels into.\n    eps : float\n        This value is added to std deviation estimation to improve the numerical\n        stability.\n    affine : bool\n        A boolean value that when set to True, this module has learnable per-channel\n        affine parameters initialized to ones (for weights) and zeros (for biases).\n\n    Example\n    -------\n    >>> input = torch.randn(100, 101, 128)\n    >>> norm = GroupNorm(input_size=128, num_groups=128)\n    >>> output = norm(input)\n    >>> output.shape\n    torch.Size([100, 101, 128])\n    \"\"\"\n\n    def __init__(\n        self,\n        input_shape=None,\n        input_size=None,\n        num_groups=None,\n        eps=1e-05,\n        affine=True,\n    ):\n        super().__init__()\n        self.eps = eps\n        self.affine = affine\n\n        if input_shape is None and input_size is None:\n            raise ValueError(\"Expected input_shape or input_size as input\")\n\n        if num_groups is None:\n            raise ValueError(\"Expected num_groups as input\")\n\n        if input_shape is not None:\n            input_size = input_shape[-1]\n\n        self.norm = torch.nn.GroupNorm(\n            num_groups,\n            input_size,\n            eps=self.eps,\n            affine=self.affine,\n        )\n\n    def forward(self, x):\n        \"\"\"Returns the normalized input tensor.\n\n        Arguments\n        ---------\n        x : torch.Tensor (batch, time, channels)\n            input to normalize. 3d or 4d tensors are expected.\n\n        Returns\n        -------\n        x_n : torch.Tensor\n            The normalized outputs.\n        \"\"\"\n        x = x.transpose(-1, 1)\n        x_n = self.norm(x)\n        x_n = x_n.transpose(1, -1)\n\n        return x_n\n\n\nclass ExponentialMovingAverage(nn.Module):\n    \"\"\"\n    Applies learnable exponential moving average, as required by learnable PCEN layer\n\n    Arguments\n    ---------\n    input_size : int\n        The expected size of the input.\n    coeff_init: float\n        Initial smoothing coefficient value\n    per_channel: bool\n        Controls whether every smoothing coefficients are learned\n        independently for every input channel\n    trainable: bool\n        whether to learn the PCEN parameters or use fixed\n    skip_transpose : bool\n        If False, uses batch x time x channel convention of speechbrain.\n        If True, uses batch x channel x time convention.\n\n    Example\n    -------\n    >>> inp_tensor = torch.rand([10, 50, 40])\n    >>> pcen = ExponentialMovingAverage(40)\n    >>> out_tensor = pcen(inp_tensor)\n    >>> out_tensor.shape\n    torch.Size([10, 50, 40])\n    \"\"\"\n\n    def __init__(\n        self,\n        input_size: int,\n        coeff_init: float = 0.04,\n        per_channel: bool = False,\n        trainable: bool = True,\n        skip_transpose: bool = False,\n    ):\n        super().__init__()\n        self._coeff_init = coeff_init\n        self._per_channel = per_channel\n        self.skip_transpose = skip_transpose\n        self.trainable = trainable\n        weights = (\n            torch.ones(\n                input_size,\n            )\n            if self._per_channel\n            else torch.ones(\n                1,\n            )\n        )\n        self._weights = nn.Parameter(\n            weights * self._coeff_init, requires_grad=trainable\n        )\n\n    def forward(self, x):\n        \"\"\"Returns the normalized input tensor.\n\n        Arguments\n         ---------\n         x : torch.Tensor (batch, time, channels)\n             input to normalize.\n        \"\"\"\n        if not self.skip_transpose:\n            x = x.transpose(1, -1)\n        w = torch.clamp(self._weights, min=0.0, max=1.0)\n        initial_state = x[:, :, 0]\n\n        def scan(init_state, x, w):\n            \"\"\"Loops and accumulates.\"\"\"\n            x = x.permute(2, 0, 1)\n            acc = init_state\n            results = []\n            for ix in range(x.shape[0]):\n                acc = (w * x[ix]) + ((1.0 - w) * acc)\n                results.append(acc.unsqueeze(0))\n            results = torch.cat(results, dim=0)\n            results = results.permute(1, 2, 0)\n            return results\n\n        output = scan(initial_state, x, w)\n        if not self.skip_transpose:\n            output = output.transpose(1, -1)\n        return output\n\n\nclass PCEN(nn.Module):\n    \"\"\"\n    This class implements a learnable Per-channel energy normalization (PCEN) layer, supporting both\n    original PCEN as specified in [1] as well as sPCEN as specified in [2]\n\n    [1] Yuxuan Wang, Pascal Getreuer, Thad Hughes, Richard F. Lyon, Rif A. Saurous, \"Trainable Frontend For\n    Robust and Far-Field Keyword Spotting\", in Proc of ICASSP 2017 (https://arxiv.org/abs/1607.05666)\n\n    [2] Neil Zeghidour, Olivier Teboul, F{\\'e}lix de Chaumont Quitry & Marco Tagliasacchi, \"LEAF: A LEARNABLE FRONTEND\n    FOR AUDIO CLASSIFICATION\", in Proc of ICLR 2021 (https://arxiv.org/abs/2101.08596)\n\n    The default argument values correspond with those used by [2].\n\n    Arguments\n    ---------\n    input_size : int\n        The expected size of the input.\n    alpha: float\n        specifies alpha coefficient for PCEN\n    smooth_coef: float\n        specified smooth coefficient for PCEN\n    delta: float\n        specifies delta coefficient for PCEN\n    root: float\n        specifies root coefficient for PCEN\n    floor: float\n        specifies floor coefficient for PCEN\n    trainable: bool\n        whether to learn the PCEN parameters or use fixed\n    per_channel_smooth_coef: bool\n        whether to learn independent smooth coefficients for every channel.\n        when True, essentially using sPCEN from [2]\n    skip_transpose : bool\n        If False, uses batch x time x channel convention of speechbrain.\n        If True, uses batch x channel x time convention.\n\n    Example\n    -------\n    >>> inp_tensor = torch.rand([10, 50, 40])\n    >>> pcen = PCEN(40, alpha=0.96)         # sPCEN\n    >>> out_tensor = pcen(inp_tensor)\n    >>> out_tensor.shape\n    torch.Size([10, 50, 40])\n    \"\"\"\n\n    def __init__(\n        self,\n        input_size,\n        alpha: float = 0.96,\n        smooth_coef: float = 0.04,\n        delta: float = 2.0,\n        root: float = 2.0,\n        floor: float = 1e-12,\n        trainable: bool = True,\n        per_channel_smooth_coef: bool = True,\n        skip_transpose: bool = False,\n    ):\n        super().__init__()\n        self._smooth_coef = smooth_coef\n        self._floor = floor\n        self._per_channel_smooth_coef = per_channel_smooth_coef\n        self.skip_transpose = skip_transpose\n        self.alpha = nn.Parameter(\n            torch.ones(input_size) * alpha, requires_grad=trainable\n        )\n        self.delta = nn.Parameter(\n            torch.ones(input_size) * delta, requires_grad=trainable\n        )\n        self.root = nn.Parameter(\n            torch.ones(input_size) * root, requires_grad=trainable\n        )\n\n        self.ema = ExponentialMovingAverage(\n            input_size,\n            coeff_init=self._smooth_coef,\n            per_channel=self._per_channel_smooth_coef,\n            skip_transpose=True,\n            trainable=trainable,\n        )\n\n    def forward(self, x):\n        \"\"\"Returns the normalized input tensor.\n\n        Arguments\n        ---------\n        x : torch.Tensor (batch, time, channels)\n            input to normalize.\n\n        Returns\n        -------\n        output : torch.Tensor\n            The normalized outputs.\n        \"\"\"\n        if not self.skip_transpose:\n            x = x.transpose(1, -1)\n        alpha = torch.min(\n            self.alpha, torch.tensor(1.0, dtype=x.dtype, device=x.device)\n        )\n        root = torch.max(\n            self.root, torch.tensor(1.0, dtype=x.dtype, device=x.device)\n        )\n        ema_smoother = self.ema(x)\n        one_over_root = 1.0 / root\n        output = (\n            x / (self._floor + ema_smoother) ** alpha.view(1, -1, 1)\n            + self.delta.view(1, -1, 1)\n        ) ** one_over_root.view(1, -1, 1) - self.delta.view(\n            1, -1, 1\n        ) ** one_over_root.view(\n            1, -1, 1\n        )\n        if not self.skip_transpose:\n            output = output.transpose(1, -1)\n        return output\n"
  },
  {
    "path": "xinference/thirdparty/indextts/BigVGAN/utils.py",
    "content": "# Adapted from https://github.com/jik876/hifi-gan under the MIT license.\n#   LICENSE is in incl_licenses directory.\n\nimport glob\nimport os\n\nimport matplotlib\nimport matplotlib.pylab as plt\nimport torch\nfrom scipy.io.wavfile import write\nfrom torch.nn.utils import weight_norm\n\nmatplotlib.use(\"Agg\")\n\nMAX_WAV_VALUE = 32768.0\n\n\ndef plot_spectrogram(spectrogram):\n    fig, ax = plt.subplots(figsize=(10, 2))\n    im = ax.imshow(spectrogram, aspect=\"auto\", origin=\"lower\", interpolation=\"none\")\n    plt.colorbar(im, ax=ax)\n\n    fig.canvas.draw()\n    plt.close()\n\n    return fig\n\n\ndef plot_spectrogram_clipped(spectrogram, clip_max=2.0):\n    fig, ax = plt.subplots(figsize=(10, 2))\n    im = ax.imshow(\n        spectrogram,\n        aspect=\"auto\",\n        origin=\"lower\",\n        interpolation=\"none\",\n        vmin=1e-6,\n        vmax=clip_max,\n    )\n    plt.colorbar(im, ax=ax)\n\n    fig.canvas.draw()\n    plt.close()\n\n    return fig\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef apply_weight_norm(m):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        weight_norm(m)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef load_checkpoint(filepath, device):\n    assert os.path.isfile(filepath)\n    print(f\"Loading '{filepath}'\")\n    checkpoint_dict = torch.load(filepath, map_location=device)\n    print(\"Complete.\")\n    return checkpoint_dict\n\n\ndef save_checkpoint(filepath, obj):\n    print(f\"Saving checkpoint to {filepath}\")\n    torch.save(obj, filepath)\n    print(\"Complete.\")\n\n\ndef scan_checkpoint(cp_dir, prefix, renamed_file=None):\n    # Fallback to original scanning logic first\n    pattern = os.path.join(cp_dir, prefix + \"????????\")\n    cp_list = glob.glob(pattern)\n\n    if len(cp_list) > 0:\n        last_checkpoint_path = sorted(cp_list)[-1]\n        print(f\"[INFO] Resuming from checkpoint: '{last_checkpoint_path}'\")\n        return last_checkpoint_path\n\n    # If no pattern-based checkpoints are found, check for renamed file\n    if renamed_file:\n        renamed_path = os.path.join(cp_dir, renamed_file)\n        if os.path.isfile(renamed_path):\n            print(f\"[INFO] Resuming from renamed checkpoint: '{renamed_file}'\")\n            return renamed_path\n\n    return None\n\n\ndef save_audio(audio, path, sr):\n    # wav: torch with 1d shape\n    audio = audio * MAX_WAV_VALUE\n    audio = audio.cpu().numpy().astype(\"int16\")\n    write(path, sr, audio)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/cli.py",
    "content": "import os\nimport sys\nimport warnings\n# Suppress warnings from tensorflow and other libraries\nwarnings.filterwarnings(\"ignore\", category=UserWarning)\nwarnings.filterwarnings(\"ignore\", category=FutureWarning)\ndef main():\n    import argparse\n    parser = argparse.ArgumentParser(description=\"IndexTTS Command Line\")\n    parser.add_argument(\"text\", type=str, help=\"Text to be synthesized\")\n    parser.add_argument(\"-v\", \"--voice\", type=str, required=True, help=\"Path to the audio prompt file (wav format)\")\n    parser.add_argument(\"-o\", \"--output_path\", type=str, default=\"gen.wav\", help=\"Path to the output wav file\")\n    parser.add_argument(\"-c\", \"--config\", type=str, default=\"checkpoints/config.yaml\", help=\"Path to the config file. Default is 'checkpoints/config.yaml'\")\n    parser.add_argument(\"--model_dir\", type=str, default=\"checkpoints\", help=\"Path to the model directory. Default is 'checkpoints'\")\n    parser.add_argument(\"--fp16\", action=\"store_true\", default=False, help=\"Use FP16 for inference if available\")\n    parser.add_argument(\"-f\", \"--force\", action=\"store_true\", default=False, help=\"Force to overwrite the output file if it exists\")\n    parser.add_argument(\"-d\", \"--device\", type=str, default=None, help=\"Device to run the model on (cpu, cuda, mps, xpu).\" )\n    args = parser.parse_args()\n    if len(args.text.strip()) == 0:\n        print(\"ERROR: Text is empty.\")\n        parser.print_help()\n        sys.exit(1)\n    if not os.path.exists(args.voice):\n        print(f\"Audio prompt file {args.voice} does not exist.\")\n        parser.print_help()\n        sys.exit(1)\n    if not os.path.exists(args.config):\n        print(f\"Config file {args.config} does not exist.\")\n        parser.print_help()\n        sys.exit(1)\n\n    output_path = args.output_path\n    if os.path.exists(output_path):\n        if not args.force:\n            print(f\"ERROR: Output file {output_path} already exists. Use --force to overwrite.\")\n            parser.print_help()\n            sys.exit(1)\n        else:\n            os.remove(output_path)\n    \n    try:\n        import torch\n    except ImportError:\n        print(\"ERROR: PyTorch is not installed. Please install it first.\")\n        sys.exit(1)\n\n    if args.device is None:\n        if torch.cuda.is_available():\n            args.device = \"cuda:0\"\n        elif hasattr(torch, \"xpu\") and torch.xpu.is_available():\n            args.device = \"xpu\"\n        elif hasattr(torch, \"mps\") and torch.mps.is_available():\n            args.device = \"mps\"\n        else:\n            args.device = \"cpu\"\n            args.fp16 = False # Disable FP16 on CPU\n            print(\"WARNING: Running on CPU may be slow.\")\n\n    # TODO: Add CLI support for IndexTTS2.\n    from indextts.infer import IndexTTS\n    tts = IndexTTS(cfg_path=args.config, model_dir=args.model_dir, use_fp16=args.fp16, device=args.device)\n    tts.infer(audio_prompt=args.voice, text=args.text.strip(), output_path=output_path)\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/conformer/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/conformer/attention.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\n#               2022 Xingchen Song (sxc19@mails.tsinghua.edu.cn)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Multi-Head Attention layer definition.\"\"\"\n\nimport math\nfrom typing import Tuple\n\nimport torch\nfrom torch import nn\n\n\nclass MultiHeadedAttention(nn.Module):\n    \"\"\"Multi-Head Attention layer.\n\n    Args:\n        n_head (int): The number of heads.\n        n_feat (int): The number of features.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n    def __init__(self, n_head: int, n_feat: int, dropout_rate: float):\n        \"\"\"Construct an MultiHeadedAttention object.\"\"\"\n        super().__init__()\n        assert n_feat % n_head == 0\n        # We assume d_v always equals d_k\n        self.d_k = n_feat // n_head\n        self.h = n_head\n        self.linear_q = nn.Linear(n_feat, n_feat)\n        self.linear_k = nn.Linear(n_feat, n_feat)\n        self.linear_v = nn.Linear(n_feat, n_feat)\n        self.linear_out = nn.Linear(n_feat, n_feat)\n        self.dropout = nn.Dropout(p=dropout_rate)\n\n    def forward_qkv(\n        self, query: torch.Tensor, key: torch.Tensor, value: torch.Tensor\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Transform query, key and value.\n\n        Args:\n            query (torch.Tensor): Query tensor (#batch, time1, size).\n            key (torch.Tensor): Key tensor (#batch, time2, size).\n            value (torch.Tensor): Value tensor (#batch, time2, size).\n\n        Returns:\n            torch.Tensor: Transformed query tensor, size\n                (#batch, n_head, time1, d_k).\n            torch.Tensor: Transformed key tensor, size\n                (#batch, n_head, time2, d_k).\n            torch.Tensor: Transformed value tensor, size\n                (#batch, n_head, time2, d_k).\n\n        \"\"\"\n        n_batch = query.size(0)\n        q = self.linear_q(query).view(n_batch, -1, self.h, self.d_k)\n        k = self.linear_k(key).view(n_batch, -1, self.h, self.d_k)\n        v = self.linear_v(value).view(n_batch, -1, self.h, self.d_k)\n        q = q.transpose(1, 2)  # (batch, head, time1, d_k)\n        k = k.transpose(1, 2)  # (batch, head, time2, d_k)\n        v = v.transpose(1, 2)  # (batch, head, time2, d_k)\n\n        return q, k, v\n\n    def forward_attention(\n        self, value: torch.Tensor, scores: torch.Tensor,\n        mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool)\n    ) -> torch.Tensor:\n        \"\"\"Compute attention context vector.\n\n        Args:\n            value (torch.Tensor): Transformed value, size\n                (#batch, n_head, time2, d_k).\n            scores (torch.Tensor): Attention score, size\n                (#batch, n_head, time1, time2).\n            mask (torch.Tensor): Mask, size (#batch, 1, time2) or\n                (#batch, time1, time2), (0, 0, 0) means fake mask.\n\n        Returns:\n            torch.Tensor: Transformed value (#batch, time1, d_model)\n                weighted by the attention score (#batch, time1, time2).\n\n        \"\"\"\n        n_batch = value.size(0)\n        # NOTE(xcsong): When will `if mask.size(2) > 0` be True?\n        #   1. onnx(16/4) [WHY? Because we feed real cache & real mask for the\n        #           1st chunk to ease the onnx export.]\n        #   2. pytorch training\n        if mask.size(2) > 0 :  # time2 > 0\n            mask = mask.unsqueeze(1).eq(0)  # (batch, 1, *, time2)\n            # For last chunk, time2 might be larger than scores.size(-1)\n            mask = mask[:, :, :, :scores.size(-1)]  # (batch, 1, *, time2)\n            scores = scores.masked_fill(mask, -float('inf'))\n            attn = torch.softmax(scores, dim=-1).masked_fill(\n                mask, 0.0)  # (batch, head, time1, time2)\n        # NOTE(xcsong): When will `if mask.size(2) > 0` be False?\n        #   1. onnx(16/-1, -1/-1, 16/0)\n        #   2. jit (16/-1, -1/-1, 16/0, 16/4)\n        else:\n            attn = torch.softmax(scores, dim=-1)  # (batch, head, time1, time2)\n\n        p_attn = self.dropout(attn)\n        x = torch.matmul(p_attn, value)  # (batch, head, time1, d_k)\n        x = (x.transpose(1, 2).contiguous().view(n_batch, -1,\n                                                 self.h * self.d_k)\n             )  # (batch, time1, d_model)\n\n        return self.linear_out(x)  # (batch, time1, d_model)\n\n    def forward(self, query: torch.Tensor, key: torch.Tensor,\n                value: torch.Tensor,\n                mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n                pos_emb: torch.Tensor = torch.empty(0),\n                cache: torch.Tensor = torch.zeros((0, 0, 0, 0))\n                ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute scaled dot product attention.\n\n        Args:\n            query (torch.Tensor): Query tensor (#batch, time1, size).\n            key (torch.Tensor): Key tensor (#batch, time2, size).\n            value (torch.Tensor): Value tensor (#batch, time2, size).\n            mask (torch.Tensor): Mask tensor (#batch, 1, time2) or\n                (#batch, time1, time2).\n                1.When applying cross attention between decoder and encoder,\n                the batch padding mask for input is in (#batch, 1, T) shape.\n                2.When applying self attention of encoder,\n                the mask is in (#batch, T, T)  shape.\n                3.When applying self attention of decoder,\n                the mask is in (#batch, L, L)  shape.\n                4.If the different position in decoder see different block\n                of the encoder, such as Mocha, the passed in mask could be\n                in (#batch, L, T) shape. But there is no such case in current\n                Wenet.\n            cache (torch.Tensor): Cache tensor (1, head, cache_t, d_k * 2),\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n\n\n        Returns:\n            torch.Tensor: Output tensor (#batch, time1, d_model).\n            torch.Tensor: Cache tensor (1, head, cache_t + time1, d_k * 2)\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n\n        \"\"\"\n        q, k, v = self.forward_qkv(query, key, value)\n\n        # NOTE(xcsong):\n        #   when export onnx model, for 1st chunk, we feed\n        #       cache(1, head, 0, d_k * 2) (16/-1, -1/-1, 16/0 mode)\n        #       or cache(1, head, real_cache_t, d_k * 2) (16/4 mode).\n        #       In all modes, `if cache.size(0) > 0` will alwayse be `True`\n        #       and we will always do splitting and\n        #       concatnation(this will simplify onnx export). Note that\n        #       it's OK to concat & split zero-shaped tensors(see code below).\n        #   when export jit  model, for 1st chunk, we always feed\n        #       cache(0, 0, 0, 0) since jit supports dynamic if-branch.\n        # >>> a = torch.ones((1, 2, 0, 4))\n        # >>> b = torch.ones((1, 2, 3, 4))\n        # >>> c = torch.cat((a, b), dim=2)\n        # >>> torch.equal(b, c)        # True\n        # >>> d = torch.split(a, 2, dim=-1)\n        # >>> torch.equal(d[0], d[1])  # True\n        if cache.size(0) > 0:\n            key_cache, value_cache = torch.split(\n                cache, cache.size(-1) // 2, dim=-1)\n            k = torch.cat([key_cache, k], dim=2)\n            v = torch.cat([value_cache, v], dim=2)\n        # NOTE(xcsong): We do cache slicing in encoder.forward_chunk, since it's\n        #   non-trivial to calculate `next_cache_start` here.\n        new_cache = torch.cat((k, v), dim=-1)\n\n        scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(self.d_k)\n        return self.forward_attention(v, scores, mask), new_cache\n\n\nclass RelPositionMultiHeadedAttention(MultiHeadedAttention):\n    \"\"\"Multi-Head Attention layer with relative position encoding.\n    Paper: https://arxiv.org/abs/1901.02860\n    Args:\n        n_head (int): The number of heads.\n        n_feat (int): The number of features.\n        dropout_rate (float): Dropout rate.\n    \"\"\"\n    def __init__(self, n_head, n_feat, dropout_rate):\n        \"\"\"Construct an RelPositionMultiHeadedAttention object.\"\"\"\n        super().__init__(n_head, n_feat, dropout_rate)\n        # linear transformation for positional encoding\n        self.linear_pos = nn.Linear(n_feat, n_feat, bias=False)\n        # these two learnable bias are used in matrix c and matrix d\n        # as described in https://arxiv.org/abs/1901.02860 Section 3.3\n        self.pos_bias_u = nn.Parameter(torch.Tensor(self.h, self.d_k))\n        self.pos_bias_v = nn.Parameter(torch.Tensor(self.h, self.d_k))\n        torch.nn.init.xavier_uniform_(self.pos_bias_u)\n        torch.nn.init.xavier_uniform_(self.pos_bias_v)\n\n    def rel_shift(self, x, zero_triu: bool = False):\n        \"\"\"Compute relative positinal encoding.\n        Args:\n            x (torch.Tensor): Input tensor (batch, time, size).\n            zero_triu (bool): If true, return the lower triangular part of\n                the matrix.\n        Returns:\n            torch.Tensor: Output tensor.\n        \"\"\"\n\n        zero_pad = torch.zeros((x.size()[0], x.size()[1], x.size()[2], 1),\n                               device=x.device,\n                               dtype=x.dtype)\n        x_padded = torch.cat([zero_pad, x], dim=-1)\n\n        x_padded = x_padded.view(x.size()[0],\n                                 x.size()[1],\n                                 x.size(3) + 1, x.size(2))\n        x = x_padded[:, :, 1:].view_as(x)\n\n        if zero_triu:\n            ones = torch.ones((x.size(2), x.size(3)))\n            x = x * torch.tril(ones, x.size(3) - x.size(2))[None, None, :, :]\n\n        return x\n\n    def forward(self, query: torch.Tensor,\n                key: torch.Tensor, value: torch.Tensor,\n                mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n                pos_emb: torch.Tensor = torch.empty(0),\n                cache: torch.Tensor = torch.zeros((0, 0, 0, 0))\n                ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute 'Scaled Dot Product Attention' with rel. positional encoding.\n        Args:\n            query (torch.Tensor): Query tensor (#batch, time1, size).\n            key (torch.Tensor): Key tensor (#batch, time2, size).\n            value (torch.Tensor): Value tensor (#batch, time2, size).\n            mask (torch.Tensor): Mask tensor (#batch, 1, time2) or\n                (#batch, time1, time2), (0, 0, 0) means fake mask.\n            pos_emb (torch.Tensor): Positional embedding tensor\n                (#batch, time2, size).\n            cache (torch.Tensor): Cache tensor (1, head, cache_t, d_k * 2),\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n        Returns:\n            torch.Tensor: Output tensor (#batch, time1, d_model).\n            torch.Tensor: Cache tensor (1, head, cache_t + time1, d_k * 2)\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n        \"\"\"\n        q, k, v = self.forward_qkv(query, key, value)\n        q = q.transpose(1, 2)  # (batch, time1, head, d_k)\n\n        # NOTE(xcsong):\n        #   when export onnx model, for 1st chunk, we feed\n        #       cache(1, head, 0, d_k * 2) (16/-1, -1/-1, 16/0 mode)\n        #       or cache(1, head, real_cache_t, d_k * 2) (16/4 mode).\n        #       In all modes, `if cache.size(0) > 0` will alwayse be `True`\n        #       and we will always do splitting and\n        #       concatnation(this will simplify onnx export). Note that\n        #       it's OK to concat & split zero-shaped tensors(see code below).\n        #   when export jit  model, for 1st chunk, we always feed\n        #       cache(0, 0, 0, 0) since jit supports dynamic if-branch.\n        # >>> a = torch.ones((1, 2, 0, 4))\n        # >>> b = torch.ones((1, 2, 3, 4))\n        # >>> c = torch.cat((a, b), dim=2)\n        # >>> torch.equal(b, c)        # True\n        # >>> d = torch.split(a, 2, dim=-1)\n        # >>> torch.equal(d[0], d[1])  # True\n        if cache.size(0) > 0:\n            key_cache, value_cache = torch.split(\n                cache, cache.size(-1) // 2, dim=-1)\n            k = torch.cat([key_cache, k], dim=2)\n            v = torch.cat([value_cache, v], dim=2)\n        # NOTE(xcsong): We do cache slicing in encoder.forward_chunk, since it's\n        #   non-trivial to calculate `next_cache_start` here.\n        new_cache = torch.cat((k, v), dim=-1)\n\n        n_batch_pos = pos_emb.size(0)\n        p = self.linear_pos(pos_emb).view(n_batch_pos, -1, self.h, self.d_k)\n        p = p.transpose(1, 2)  # (batch, head, time1, d_k)\n\n        # (batch, head, time1, d_k)\n        q_with_bias_u = (q + self.pos_bias_u).transpose(1, 2)\n        # (batch, head, time1, d_k)\n        q_with_bias_v = (q + self.pos_bias_v).transpose(1, 2)\n\n        # compute attention score\n        # first compute matrix a and matrix c\n        # as described in https://arxiv.org/abs/1901.02860 Section 3.3\n        # (batch, head, time1, time2)\n        matrix_ac = torch.matmul(q_with_bias_u, k.transpose(-2, -1))\n\n        # compute matrix b and matrix d\n        # (batch, head, time1, time2)\n        matrix_bd = torch.matmul(q_with_bias_v, p.transpose(-2, -1))\n        # Remove rel_shift since it is useless in speech recognition,\n        # and it requires special attention for streaming.\n        # matrix_bd = self.rel_shift(matrix_bd)\n\n        scores = (matrix_ac + matrix_bd) / math.sqrt(\n            self.d_k)  # (batch, head, time1, time2)\n\n        return self.forward_attention(v, scores, mask), new_cache\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/conformer/embedding.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc. (authors: Binbin Zhang, Di Wu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\n\"\"\"Positonal Encoding Module.\"\"\"\n\nimport math\nfrom typing import Tuple, Union\n\nimport torch\nimport torch.nn.functional as F\n\n\nclass PositionalEncoding(torch.nn.Module):\n    \"\"\"Positional encoding.\n\n    :param int d_model: embedding dim\n    :param float dropout_rate: dropout rate\n    :param int max_len: maximum input length\n\n    PE(pos, 2i)   = sin(pos/(10000^(2i/dmodel)))\n    PE(pos, 2i+1) = cos(pos/(10000^(2i/dmodel)))\n    \"\"\"\n    def __init__(self,\n                 d_model: int,\n                 dropout_rate: float,\n                 max_len: int = 5000,\n                 reverse: bool = False):\n        \"\"\"Construct an PositionalEncoding object.\"\"\"\n        super().__init__()\n        self.d_model = d_model\n        self.xscale = math.sqrt(self.d_model)\n        self.dropout = torch.nn.Dropout(p=dropout_rate)\n        self.max_len = max_len\n\n        pe = torch.zeros(self.max_len, self.d_model)\n        position = torch.arange(0, self.max_len).unsqueeze(1)\n        div_term = torch.exp(\n            torch.arange(0, self.d_model, 2) *\n            -(math.log(10000.0) / self.d_model))\n        pe[:, 0::2] = torch.sin(position * div_term)\n        pe[:, 1::2] = torch.cos(position * div_term)\n        pe = pe.unsqueeze(0)\n        self.register_buffer('pe', pe)\n\n    def forward(self,\n                x: torch.Tensor,\n                offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Add positional encoding.\n\n        Args:\n            x (torch.Tensor): Input. Its shape is (batch, time, ...)\n            offset (int, torch.tensor): position offset\n\n        Returns:\n            torch.Tensor: Encoded tensor. Its shape is (batch, time, ...)\n            torch.Tensor: for compatibility to RelPositionalEncoding\n        \"\"\"\n\n        self.pe = self.pe.to(x.device)\n        pos_emb = self.position_encoding(offset, x.size(1), False)\n        x = x * self.xscale + pos_emb\n        return self.dropout(x), self.dropout(pos_emb)\n\n    def position_encoding(self, offset: Union[int, torch.Tensor], size: int,\n                          apply_dropout: bool = True) -> torch.Tensor:\n        \"\"\" For getting encoding in a streaming fashion\n\n        Attention!!!!!\n        we apply dropout only once at the whole utterance level in a none\n        streaming way, but will call this function several times with\n        increasing input size in a streaming scenario, so the dropout will\n        be applied several times.\n\n        Args:\n            offset (int or torch.tensor): start offset\n            size (int): required size of position encoding\n\n        Returns:\n            torch.Tensor: Corresponding encoding\n        \"\"\"\n        # How to subscript a Union type:\n        #   https://github.com/pytorch/pytorch/issues/69434\n        if isinstance(offset, int):\n            assert offset + size < self.max_len\n            pos_emb = self.pe[:, offset:offset + size]\n        elif isinstance(offset, torch.Tensor) and offset.dim() == 0:  # scalar\n            assert offset + size < self.max_len\n            pos_emb = self.pe[:, offset:offset + size]\n        else:  # for batched streaming decoding on GPU\n            assert torch.max(offset) + size < self.max_len\n            index = offset.unsqueeze(1) + \\\n                torch.arange(0, size).to(offset.device)  # B X T\n            flag = index > 0\n            # remove negative offset\n            index = index * flag\n            pos_emb = F.embedding(index, self.pe[0])  # B X T X d_model\n\n        if apply_dropout:\n            pos_emb = self.dropout(pos_emb)\n        return pos_emb\n\nclass RelPositionalEncoding(PositionalEncoding):\n    \"\"\"Relative positional encoding module.\n    See : Appendix B in https://arxiv.org/abs/1901.02860\n    Args:\n        d_model (int): Embedding dimension.\n        dropout_rate (float): Dropout rate.\n        max_len (int): Maximum input length.\n    \"\"\"\n    def __init__(self, d_model: int, dropout_rate: float, max_len: int = 5000):\n        \"\"\"Initialize class.\"\"\"\n        super().__init__(d_model, dropout_rate, max_len, reverse=True)\n\n    def forward(self,\n                x: torch.Tensor,\n                offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute positional encoding.\n        Args:\n            x (torch.Tensor): Input tensor (batch, time, `*`).\n        Returns:\n            torch.Tensor: Encoded tensor (batch, time, `*`).\n            torch.Tensor: Positional embedding tensor (1, time, `*`).\n        \"\"\"\n        self.pe = self.pe.to(x.device)\n        x = x * self.xscale\n        pos_emb = self.position_encoding(offset, x.size(1), False)\n        return self.dropout(x), self.dropout(pos_emb)\n\n\nclass NoPositionalEncoding(torch.nn.Module):\n    \"\"\" No position encoding\n    \"\"\"\n    def __init__(self, d_model: int, dropout_rate: float):\n        super().__init__()\n        self.d_model = d_model\n        self.dropout = torch.nn.Dropout(p=dropout_rate)\n\n    def forward(self,\n                x: torch.Tensor,\n                offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\" Just return zero vector for interface compatibility\n        \"\"\"\n        pos_emb = torch.zeros(1, x.size(1), self.d_model).to(x.device)\n        return self.dropout(x), pos_emb\n\n    def position_encoding(\n            self, offset: Union[int, torch.Tensor], size: int) -> torch.Tensor:\n        return torch.zeros(1, size, self.d_model)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/conformer/subsampling.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc (Binbin Zhang, Di Wu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Modified from ESPnet(https://github.com/espnet/espnet)\n\n\n\"\"\"Subsampling layer definition.\"\"\"\n\nfrom typing import Tuple, Union\n\nimport torch\n\n\nclass BaseSubsampling(torch.nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.right_context = 0\n        self.subsampling_rate = 1\n\n    def position_encoding(self, offset: Union[int, torch.Tensor],\n                          size: int) -> torch.Tensor:\n        return self.pos_enc.position_encoding(offset, size)\n\n\nclass LinearNoSubsampling(BaseSubsampling):\n    \"\"\"Linear transform the input without subsampling\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an linear object.\"\"\"\n        super().__init__()\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(idim, odim),\n            torch.nn.LayerNorm(odim, eps=1e-5),\n            torch.nn.Dropout(dropout_rate),\n        )\n        self.pos_enc = pos_enc_class\n        self.right_context = 0\n        self.subsampling_rate = 1\n\n    def forward(\n            self,\n            x: torch.Tensor,\n            x_mask: torch.Tensor,\n            offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Input x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: linear input tensor (#batch, time', odim),\n                where time' = time .\n            torch.Tensor: linear input mask (#batch, 1, time'),\n                where time' = time .\n\n        \"\"\"\n        x = self.out(x)\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask\n\n\nclass Conv2dSubsampling3(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/3 length).\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling3 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 5, 3),\n            torch.nn.ReLU()\n        )\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(odim * ((idim - 2) // 3), odim))\n        self.pos_enc = pos_enc_class\n        # The right context for every conv layer is computed by:\n        # (kernel_size - 1) * frame_rate_of_this_layer\n        self.subsampling_rate = 3\n        # 4 = (5 - 1) * 1\n        self.right_context = 4\n\n    def forward(\n            self,\n            x: torch.Tensor,\n            x_mask: torch.Tensor,\n            offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 3.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 3.\n            torch.Tensor: positional encoding\n\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c=1, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.out(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, :-2:3]\n\n\nclass Conv2dSubsampling2(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/2 length).\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling4 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n        )\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(odim * ((idim - 1) // 2), odim))\n        self.pos_enc = pos_enc_class\n        # The right context for every conv layer is computed by:\n        # (kernel_size - 1) * frame_rate_of_this_layer\n        self.subsampling_rate = 2\n        # 2 = (3 - 1) * 1\n        self.right_context = 2\n\n    def forward(\n            self,\n            x: torch.Tensor,\n            x_mask: torch.Tensor,\n            offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 2.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 2.\n            torch.Tensor: positional encoding\n\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c=1, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.out(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2]\n\n\nclass Conv2dSubsampling4(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/4 length).\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling4 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 3, 2),\n            torch.nn.ReLU(),\n        )\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(odim * (((idim - 1) // 2 - 1) // 2), odim))\n        self.pos_enc = pos_enc_class\n        # The right context for every conv layer is computed by:\n        # (kernel_size - 1) * frame_rate_of_this_layer\n        self.subsampling_rate = 4\n        # 6 = (3 - 1) * 1 + (3 - 1) * 2\n        self.right_context = 6\n\n    def forward(\n            self,\n            x: torch.Tensor,\n            x_mask: torch.Tensor,\n            offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 4.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 4.\n            torch.Tensor: positional encoding\n\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c=1, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.out(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2][:, :, 2::2]\n\n\nclass Conv2dSubsampling6(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/6 length).\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n        pos_enc (torch.nn.Module): Custom position encoding layer.\n    \"\"\"\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling6 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 5, 3),\n            torch.nn.ReLU(),\n        )\n        self.linear = torch.nn.Linear(odim * (((idim - 1) // 2 - 2) // 3),\n                                      odim)\n        self.pos_enc = pos_enc_class\n        # 10 = (3 - 1) * 1 + (5 - 1) * 2\n        self.subsampling_rate = 6\n        self.right_context = 10\n\n    def forward(\n            self,\n            x: torch.Tensor,\n            x_mask: torch.Tensor,\n            offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 6.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 6.\n            torch.Tensor: positional encoding\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.linear(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2][:, :, 4::3]\n\n\nclass Conv2dSubsampling8(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/8 length).\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling8 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 3, 2),\n            torch.nn.ReLU(),\n        )\n        self.linear = torch.nn.Linear(\n            odim * ((((idim - 1) // 2 - 1) // 2 - 1) // 2), odim)\n        self.pos_enc = pos_enc_class\n        self.subsampling_rate = 8\n        # 14 = (3 - 1) * 1 + (3 - 1) * 2 + (3 - 1) * 4\n        self.right_context = 14\n\n    def forward(\n            self,\n            x: torch.Tensor,\n            x_mask: torch.Tensor,\n            offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 8.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 8.\n            torch.Tensor: positional encoding\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.linear(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2][:, :, 2::2][:, :, 2::2]\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/conformer_encoder.py",
    "content": "\nfrom typing import Optional, Tuple\n\nimport torch\nimport torch.nn as nn\n\nfrom indextts.gpt.conformer.attention import (MultiHeadedAttention,\n                                              RelPositionMultiHeadedAttention)\nfrom indextts.gpt.conformer.embedding import (NoPositionalEncoding,\n                                              PositionalEncoding,\n                                              RelPositionalEncoding)\nfrom indextts.gpt.conformer.subsampling import (Conv2dSubsampling2,\n                                                Conv2dSubsampling4,\n                                                Conv2dSubsampling6,\n                                                Conv2dSubsampling8,\n                                                LinearNoSubsampling)\nfrom indextts.utils.common import make_pad_mask\n\n\nclass PositionwiseFeedForward(torch.nn.Module):\n    \"\"\"Positionwise feed forward layer.\n\n    FeedForward are appied on each position of the sequence.\n    The output dim is same with the input dim.\n\n    Args:\n        idim (int): Input dimenstion.\n        hidden_units (int): The number of hidden units.\n        dropout_rate (float): Dropout rate.\n        activation (torch.nn.Module): Activation function\n    \"\"\"\n\n    def __init__(self,\n                 idim: int,\n                 hidden_units: int,\n                 dropout_rate: float,\n                 activation: torch.nn.Module = torch.nn.ReLU()):\n        \"\"\"Construct a PositionwiseFeedForward object.\"\"\"\n        super(PositionwiseFeedForward, self).__init__()\n        self.w_1 = torch.nn.Linear(idim, hidden_units)\n        self.activation = activation\n        self.dropout = torch.nn.Dropout(dropout_rate)\n        self.w_2 = torch.nn.Linear(hidden_units, idim)\n\n    def forward(self, xs: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            xs: input tensor (B, L, D)\n        Returns:\n            output tensor, (B, L, D)\n        \"\"\"\n        return self.w_2(self.dropout(self.activation(self.w_1(xs))))\n\n\nclass ConvolutionModule(nn.Module):\n    \"\"\"ConvolutionModule in Conformer model.\"\"\"\n\n    def __init__(self,\n                 channels: int,\n                 kernel_size: int = 15,\n                 activation: nn.Module = nn.ReLU(),\n                 bias: bool = True):\n        \"\"\"Construct an ConvolutionModule object.\n        Args:\n            channels (int): The number of channels of conv layers.\n            kernel_size (int): Kernel size of conv layers.\n            causal (int): Whether use causal convolution or not\n        \"\"\"\n        super().__init__()\n\n        self.pointwise_conv1 = nn.Conv1d(\n            channels,\n            2 * channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            bias=bias,\n        )\n        # self.lorder is used to distinguish if it's a causal convolution,\n        # if self.lorder > 0: it's a causal convolution, the input will be\n        #    padded with self.lorder frames on the left in forward.\n        # else: it's a symmetrical convolution\n        # kernel_size should be an odd number for none causal convolution\n        assert (kernel_size - 1) % 2 == 0\n        padding = (kernel_size - 1) // 2\n        self.lorder = 0\n\n        self.depthwise_conv = nn.Conv1d(\n            channels,\n            channels,\n            kernel_size,\n            stride=1,\n            padding=padding,\n            groups=channels,\n            bias=bias,\n        )\n\n        self.use_layer_norm = True\n        self.norm = nn.LayerNorm(channels)\n\n        self.pointwise_conv2 = nn.Conv1d(\n            channels,\n            channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            bias=bias,\n        )\n        self.activation = activation\n\n    def forward(\n            self,\n            x: torch.Tensor,\n            mask_pad: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n            cache: torch.Tensor = torch.zeros((0, 0, 0)),\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute convolution module.\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, channels).\n            mask_pad (torch.Tensor): used for batch padding (#batch, 1, time),\n                (0, 0, 0) means fake mask.\n            cache (torch.Tensor): left context cache, it is only\n                used in causal convolution (#batch, channels, cache_t),\n                (0, 0, 0) meas fake cache.\n        Returns:\n            torch.Tensor: Output tensor (#batch, time, channels).\n        \"\"\"\n        # exchange the temporal dimension and the feature dimension\n        x = x.transpose(1, 2)  # (#batch, channels, time)\n\n        # mask batch padding\n        if mask_pad.size(2) > 0:  # time > 0\n            x.masked_fill_(~mask_pad, 0.0)\n\n        if self.lorder > 0:\n            if cache.size(2) == 0:  # cache_t == 0\n                x = nn.functional.pad(x, (self.lorder, 0), 'constant', 0.0)\n            else:\n                assert cache.size(0) == x.size(0)  # equal batch\n                assert cache.size(1) == x.size(1)  # equal channel\n                x = torch.cat((cache, x), dim=2)\n            assert (x.size(2) > self.lorder)\n            new_cache = x[:, :, -self.lorder:]\n        else:\n            # It's better we just return None if no cache is required,\n            # However, for JIT export, here we just fake one tensor instead of\n            # None.\n            new_cache = torch.zeros((0, 0, 0), dtype=x.dtype, device=x.device)\n\n        # GLU mechanism\n        x = self.pointwise_conv1(x)  # (batch, 2*channel, dim)\n        x = nn.functional.glu(x, dim=1)  # (batch, channel, dim)\n\n        # 1D Depthwise Conv\n        x = self.depthwise_conv(x)\n        if self.use_layer_norm:\n            x = x.transpose(1, 2)\n        x = self.activation(self.norm(x))\n        if self.use_layer_norm:\n            x = x.transpose(1, 2)\n        x = self.pointwise_conv2(x)\n        # mask batch padding\n        if mask_pad.size(2) > 0:  # time > 0\n            x.masked_fill_(~mask_pad, 0.0)\n\n        return x.transpose(1, 2), new_cache\n\n\nclass ConformerEncoderLayer(nn.Module):\n    \"\"\"Encoder layer module.\n    Args:\n        size (int): Input dimension.\n        self_attn (torch.nn.Module): Self-attention module instance.\n            `MultiHeadedAttention` or `RelPositionMultiHeadedAttention`\n            instance can be used as the argument.\n        feed_forward (torch.nn.Module): Feed-forward module instance.\n            `PositionwiseFeedForward` instance can be used as the argument.\n        feed_forward_macaron (torch.nn.Module): Additional feed-forward module\n             instance.\n            `PositionwiseFeedForward` instance can be used as the argument.\n        conv_module (torch.nn.Module): Convolution module instance.\n            `ConvlutionModule` instance can be used as the argument.\n        dropout_rate (float): Dropout rate.\n        normalize_before (bool):\n            True: use layer_norm before each sub-block.\n            False: use layer_norm after each sub-block.\n        concat_after (bool): Whether to concat attention layer's input and\n            output.\n            True: x -> x + linear(concat(x, att(x)))\n            False: x -> x + att(x)\n    \"\"\"\n\n    def __init__(\n        self,\n        size: int,\n        self_attn: torch.nn.Module,\n        feed_forward: Optional[nn.Module] = None,\n        feed_forward_macaron: Optional[nn.Module] = None,\n        conv_module: Optional[nn.Module] = None,\n        dropout_rate: float = 0.1,\n        normalize_before: bool = True,\n        concat_after: bool = False,\n    ):\n        \"\"\"Construct an EncoderLayer object.\"\"\"\n        super().__init__()\n        self.self_attn = self_attn\n        self.feed_forward = feed_forward\n        self.feed_forward_macaron = feed_forward_macaron\n        self.conv_module = conv_module\n        self.norm_ff = nn.LayerNorm(size, eps=1e-5)  # for the FNN module\n        self.norm_mha = nn.LayerNorm(size, eps=1e-5)  # for the MHA module\n        if feed_forward_macaron is not None:\n            self.norm_ff_macaron = nn.LayerNorm(size, eps=1e-5)\n            self.ff_scale = 0.5\n        else:\n            self.ff_scale = 1.0\n        if self.conv_module is not None:\n            self.norm_conv = nn.LayerNorm(size,\n                                          eps=1e-5)  # for the CNN module\n            self.norm_final = nn.LayerNorm(\n                size, eps=1e-5)  # for the final output of the block\n        self.dropout = nn.Dropout(dropout_rate)\n        self.size = size\n        self.normalize_before = normalize_before\n        self.concat_after = concat_after\n        if self.concat_after:\n            self.concat_linear = nn.Linear(size + size, size)\n        else:\n            self.concat_linear = nn.Identity()\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        mask: torch.Tensor,\n        pos_emb: torch.Tensor,\n        mask_pad: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        att_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n        cnn_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Compute encoded features.\n\n        Args:\n            x (torch.Tensor): (#batch, time, size)\n            mask (torch.Tensor): Mask tensor for the input (#batch, time，time),\n                (0, 0, 0) means fake mask.\n            pos_emb (torch.Tensor): positional encoding, must not be None\n                for ConformerEncoderLayer.\n            mask_pad (torch.Tensor): batch padding mask used for conv module.\n                (#batch, 1，time), (0, 0, 0) means fake mask.\n            att_cache (torch.Tensor): Cache tensor of the KEY & VALUE\n                (#batch=1, head, cache_t1, d_k * 2), head * d_k == size.\n            cnn_cache (torch.Tensor): Convolution cache in conformer layer\n                (#batch=1, size, cache_t2)\n        Returns:\n            torch.Tensor: Output tensor (#batch, time, size).\n            torch.Tensor: Mask tensor (#batch, time, time).\n            torch.Tensor: att_cache tensor,\n                (#batch=1, head, cache_t1 + time, d_k * 2).\n            torch.Tensor: cnn_cahce tensor (#batch, size, cache_t2).\n        \"\"\"\n\n        # whether to use macaron style\n        if self.feed_forward_macaron is not None:\n            residual = x\n            if self.normalize_before:\n                x = self.norm_ff_macaron(x)\n            x = residual + self.ff_scale * self.dropout(\n                self.feed_forward_macaron(x))\n            if not self.normalize_before:\n                x = self.norm_ff_macaron(x)\n\n        # multi-headed self-attention module\n        residual = x\n        if self.normalize_before:\n            x = self.norm_mha(x)\n\n        x_att, new_att_cache = self.self_attn(\n            x, x, x, mask, pos_emb, att_cache)\n        if self.concat_after:\n            x_concat = torch.cat((x, x_att), dim=-1)\n            x = residual + self.concat_linear(x_concat)\n        else:\n            x = residual + self.dropout(x_att)\n        if not self.normalize_before:\n            x = self.norm_mha(x)\n\n        # convolution module\n        # Fake new cnn cache here, and then change it in conv_module\n        new_cnn_cache = torch.zeros((0, 0, 0), dtype=x.dtype, device=x.device)\n        if self.conv_module is not None:\n            residual = x\n            if self.normalize_before:\n                x = self.norm_conv(x)\n            x, new_cnn_cache = self.conv_module(x, mask_pad, cnn_cache)\n            x = residual + self.dropout(x)\n\n            if not self.normalize_before:\n                x = self.norm_conv(x)\n\n        # feed forward module\n        residual = x\n        if self.normalize_before:\n            x = self.norm_ff(x)\n\n        x = residual + self.ff_scale * self.dropout(self.feed_forward(x))\n        if not self.normalize_before:\n            x = self.norm_ff(x)\n\n        if self.conv_module is not None:\n            x = self.norm_final(x)\n\n        return x, mask, new_att_cache, new_cnn_cache\n\n\nclass BaseEncoder(torch.nn.Module):\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"abs_pos\",\n        normalize_before: bool = True,\n        concat_after: bool = False,\n    ):\n        \"\"\"\n        Args:\n            input_size (int): input dim\n            output_size (int): dimension of attention\n            attention_heads (int): the number of heads of multi head attention\n            linear_units (int): the hidden units number of position-wise feed\n                forward\n            num_blocks (int): the number of decoder blocks\n            dropout_rate (float): dropout rate\n            attention_dropout_rate (float): dropout rate in attention\n            positional_dropout_rate (float): dropout rate after adding\n                positional encoding\n            input_layer (str): input layer type.\n                optional [linear, conv2d, conv2d6, conv2d8]\n            pos_enc_layer_type (str): Encoder positional encoding layer type.\n                opitonal [abs_pos, scaled_abs_pos, rel_pos, no_pos]\n            normalize_before (bool):\n                True: use layer_norm before each sub-block of a layer.\n                False: use layer_norm after each sub-block of a layer.\n            concat_after (bool): whether to concat attention layer's input\n                and output.\n                True: x -> x + linear(concat(x, att(x)))\n                False: x -> x + att(x)\n            static_chunk_size (int): chunk size for static chunk training and\n                decoding\n            use_dynamic_chunk (bool): whether use dynamic chunk size for\n                training or not, You can only use fixed chunk(chunk_size > 0)\n                or dyanmic chunk size(use_dynamic_chunk = True)\n            global_cmvn (Optional[torch.nn.Module]): Optional GlobalCMVN module\n            use_dynamic_left_chunk (bool): whether use dynamic left chunk in\n                dynamic chunk training\n        \"\"\"\n        super().__init__()\n        self._output_size = output_size\n\n        if pos_enc_layer_type == \"abs_pos\":\n            pos_enc_class = PositionalEncoding\n        elif pos_enc_layer_type == \"rel_pos\":\n            pos_enc_class = RelPositionalEncoding\n        elif pos_enc_layer_type == \"no_pos\":\n            pos_enc_class = NoPositionalEncoding\n        else:\n            raise ValueError(\"unknown pos_enc_layer: \" + pos_enc_layer_type)\n\n        if input_layer == \"linear\":\n            subsampling_class = LinearNoSubsampling\n        elif input_layer == \"conv2d2\":\n            subsampling_class = Conv2dSubsampling2\n        elif input_layer == \"conv2d\":\n            subsampling_class = Conv2dSubsampling4\n        elif input_layer == \"conv2d6\":\n            subsampling_class = Conv2dSubsampling6\n        elif input_layer == \"conv2d8\":\n            subsampling_class = Conv2dSubsampling8\n        else:\n            raise ValueError(\"unknown input_layer: \" + input_layer)\n\n        self.embed = subsampling_class(\n            input_size,\n            output_size,\n            dropout_rate,\n            pos_enc_class(output_size, dropout_rate),\n        )\n\n        self.normalize_before = normalize_before\n        self.after_norm = torch.nn.LayerNorm(output_size, eps=1e-5)\n\n    def output_size(self) -> int:\n        return self._output_size\n\n    def forward(\n        self,\n        xs: torch.Tensor,\n        xs_lens: torch.Tensor,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Embed positions in tensor.\n\n        Args:\n            xs: padded input tensor (B, T, D)\n            xs_lens: input length (B)\n            decoding_chunk_size: decoding chunk size for dynamic chunk\n                0: default for training, use random dynamic chunk.\n                <0: for decoding, use full chunk.\n                >0: for decoding, use fixed chunk size as set.\n            num_decoding_left_chunks: number of left chunks, this is for decoding,\n            the chunk size is decoding_chunk_size.\n                >=0: use num_decoding_left_chunks\n                <0: use all left chunks\n        Returns:\n            encoder output tensor xs, and subsampled masks\n            xs: padded output tensor (B, T' ~= T/subsample_rate, D)\n            masks: torch.Tensor batch padding mask after subsample\n                (B, 1, T' ~= T/subsample_rate)\n        \"\"\"\n        T = xs.size(1)\n        masks = ~make_pad_mask(xs_lens, T).unsqueeze(1)  # (B, 1, T)\n        xs, pos_emb, masks = self.embed(xs, masks)\n        chunk_masks = masks\n        mask_pad = masks  # (B, 1, T/subsample_rate)\n        for layer in self.encoders:\n            xs, chunk_masks, _, _ = layer(xs, chunk_masks, pos_emb, mask_pad)\n        if self.normalize_before:\n            xs = self.after_norm(xs)\n        # Here we assume the mask is not changed in encoder layers, so just\n        # return the masks before encoder layers, and the masks will be used\n        # for cross attention with decoder later\n        return xs, masks\n\n\nclass ConformerEncoder(BaseEncoder):\n    \"\"\"Conformer encoder module.\"\"\"\n\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"rel_pos\",\n        normalize_before: bool = True,\n        concat_after: bool = False,\n        macaron_style: bool = False,\n        use_cnn_module: bool = True,\n        cnn_module_kernel: int = 15,\n    ):\n        \"\"\"Construct ConformerEncoder\n\n        Args:\n            input_size to use_dynamic_chunk, see in BaseEncoder\n            positionwise_conv_kernel_size (int): Kernel size of positionwise\n                conv1d layer.\n            macaron_style (bool): Whether to use macaron style for\n                positionwise layer.\n            selfattention_layer_type (str): Encoder attention layer type,\n                the parameter has no effect now, it's just for configure\n                compatibility.\n            activation_type (str): Encoder activation function type.\n            use_cnn_module (bool): Whether to use convolution module.\n            cnn_module_kernel (int): Kernel size of convolution module.\n            causal (bool): whether to use causal convolution or not.\n        \"\"\"\n\n        super().__init__(input_size, output_size, attention_heads,\n                         linear_units, num_blocks, dropout_rate,\n                         input_layer, pos_enc_layer_type, normalize_before,\n                         concat_after)\n\n        activation = torch.nn.SiLU()\n\n        # self-attention module definition\n        if pos_enc_layer_type != \"rel_pos\":\n            encoder_selfattn_layer = MultiHeadedAttention\n        else:\n            encoder_selfattn_layer = RelPositionMultiHeadedAttention\n        encoder_selfattn_layer_args = (\n            attention_heads,\n            output_size,\n            dropout_rate,\n        )\n\n        # feed-forward module definition\n        positionwise_layer = PositionwiseFeedForward\n        positionwise_layer_args = (\n            output_size,\n            linear_units,\n            dropout_rate,\n            activation,\n        )\n        # convolution module definition\n        convolution_layer = ConvolutionModule\n        convolution_layer_args = (output_size,\n                                  cnn_module_kernel,\n                                  activation,)\n\n        self.encoders = torch.nn.ModuleList([\n            ConformerEncoderLayer(\n                output_size,\n                encoder_selfattn_layer(*encoder_selfattn_layer_args),\n                positionwise_layer(*positionwise_layer_args),\n                positionwise_layer(\n                    *positionwise_layer_args) if macaron_style else None,\n                convolution_layer(\n                    *convolution_layer_args) if use_cnn_module else None,\n                dropout_rate,\n                normalize_before,\n                concat_after,\n            ) for _ in range(num_blocks)\n        ])\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/model.py",
    "content": "import functools\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nimport transformers\nfrom transformers import GPT2Config, LogitsProcessorList\nfrom indextts.gpt.transformers_gpt2 import GPT2PreTrainedModel, GPT2Model\n\n# from transformers import GPT2Config, GPT2PreTrainedModel, LogitsProcessorList\nfrom transformers.modeling_outputs import CausalLMOutputWithCrossAttentions\nfrom transformers.utils.model_parallel_utils import (assert_device_map,\n                                                     get_device_map)\n\nfrom indextts.gpt.conformer_encoder import ConformerEncoder\nfrom indextts.gpt.perceiver import PerceiverResampler\nfrom indextts.utils.arch_util import AttentionBlock\nfrom indextts.utils.typical_sampling import TypicalLogitsWarper\n\n\ndef null_position_embeddings(range, dim):\n    return torch.zeros((range.shape[0], range.shape[1], dim), device=range.device)\n\n\nclass ResBlock(nn.Module):\n    \"\"\"\n    Basic residual convolutional block that uses GroupNorm.\n    \"\"\"\n\n    def __init__(self, chan):\n        super().__init__()\n        self.net = nn.Sequential(\n            nn.Conv1d(chan, chan, kernel_size=3, padding=1),\n            nn.GroupNorm(chan // 8, chan),\n            nn.ReLU(),\n            nn.Conv1d(chan, chan, kernel_size=3, padding=1),\n            nn.GroupNorm(chan // 8, chan)\n        )\n\n    def forward(self, x):\n        return F.relu(self.net(x) + x)\n\n\nclass GPT2InferenceModel(GPT2PreTrainedModel):\n    def __init__(self, config, gpt, text_pos_emb, embeddings, norm, linear, kv_cache=False):\n        super().__init__(config)\n        # Note: the argument named `text_pos_emb` here actually represents the mel position embedding\n        self.transformer = gpt\n        self.text_pos_embedding = text_pos_emb\n        self.embeddings = embeddings\n        self.final_norm = norm\n        self.lm_head = nn.Sequential(norm, linear)\n        self.kv_cache = kv_cache\n\n        # Model parallel\n        self.model_parallel = False\n        self.device_map = None\n        self.cached_mel_emb = None\n\n    def parallelize(self, device_map=None):\n        self.device_map = (\n            get_device_map(len(self.transformer.h), range(max(1, torch.cuda.device_count())))\n            if device_map is None\n            else device_map\n        )\n        assert_device_map(self.device_map, len(self.transformer.h))\n        self.transformer.parallelize(self.device_map)\n        self.lm_head = self.lm_head.to(self.transformer.first_device)\n        self.model_parallel = True\n\n    def deparallelize(self):\n        self.transformer.deparallelize()\n        self.transformer = self.transformer.to(\"cpu\")\n        self.lm_head = self.lm_head.to(\"cpu\")\n        self.model_parallel = False\n        torch.cuda.empty_cache()\n        if torch.backends.mps.is_available():\n            torch.mps.empty_cache()\n\n    def get_output_embeddings(self):\n        return self.lm_head\n\n    def set_output_embeddings(self, new_embeddings):\n        self.lm_head = new_embeddings\n\n    def store_mel_emb(self, mel_emb):\n        self.cached_mel_emb = mel_emb\n\n    def prepare_inputs_for_generation(self, input_ids, past_key_values=None, **kwargs):\n        token_type_ids = kwargs.get(\"token_type_ids\", None)  # usually None\n        if not self.kv_cache:\n            past_key_values = None\n        # only last token for inputs_ids if past is defined in kwargs\n        if past_key_values:\n            input_ids = input_ids[:, -1].unsqueeze(-1)\n            if token_type_ids is not None:\n                token_type_ids = token_type_ids[:, -1].unsqueeze(-1)\n\n        attention_mask = kwargs.get(\"attention_mask\", None)\n        position_ids = kwargs.get(\"position_ids\", None)\n\n        if attention_mask is not None and position_ids is None:\n            # create position_ids on the fly for batch generation\n            position_ids = attention_mask.long().cumsum(-1) - 1\n            position_ids.masked_fill_(attention_mask == 0, 0)\n            if past_key_values:\n                position_ids = position_ids[:, -1].unsqueeze(-1)\n        else:\n            position_ids = None\n        return {\n            \"input_ids\": input_ids,\n            \"past_key_values\": past_key_values,\n            \"use_cache\": kwargs.get(\"use_cache\"),\n            \"position_ids\": position_ids,\n            \"attention_mask\": attention_mask,\n            \"token_type_ids\": token_type_ids,\n        }\n\n    def forward(\n            self,\n            input_ids=None,\n            past_key_values=None,\n            attention_mask=None,\n            token_type_ids=None,\n            position_ids=None,\n            head_mask=None,\n            inputs_embeds=None,\n            encoder_hidden_states=None,\n            encoder_attention_mask=None,\n            labels=None,\n            use_cache=None,\n            output_attentions=None,\n            output_hidden_states=None,\n            return_dict=None,\n    ):\n        assert self.cached_mel_emb is not None\n        assert inputs_embeds is None  # Not supported by this inference model.\n        assert labels is None  # Training not supported by this inference model.\n        return_dict = (\n            return_dict if return_dict is not None else self.config.use_return_dict\n        )\n        # Create embedding\n        mel_len = self.cached_mel_emb.shape[1]\n        if input_ids.shape[1] != 1:\n            text_inputs = input_ids[:, mel_len:]\n            text_emb = self.embeddings(text_inputs)\n            text_emb = text_emb + self.text_pos_embedding(text_emb)\n            if self.cached_mel_emb.shape[0] != text_emb.shape[0]:\n                mel_emb = self.cached_mel_emb.repeat_interleave(\n                    text_emb.shape[0] // self.cached_mel_emb.shape[0], 0\n                )\n            else:  # this outcome only occurs once per loop in most cases\n                mel_emb = self.cached_mel_emb\n            emb = torch.cat([mel_emb, text_emb], dim=1)\n        else:\n            emb = self.embeddings(input_ids)\n            emb = emb + self.text_pos_embedding.get_fixed_embedding(\n                attention_mask.shape[1] - mel_len, attention_mask.device\n            )\n        transformer_outputs = self.transformer(\n            inputs_embeds=emb,\n            past_key_values=past_key_values,\n            attention_mask=attention_mask,\n            token_type_ids=token_type_ids,\n            position_ids=position_ids,\n            head_mask=head_mask,\n            encoder_hidden_states=encoder_hidden_states,\n            encoder_attention_mask=encoder_attention_mask,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n        hidden_states = transformer_outputs[0]\n\n        # Set device for model parallelism\n        if self.model_parallel:\n            if torch.backends.mps.is_available():\n                self.to(self.transformer.first_device)\n            else:\n                torch.cuda.set_device(self.transformer.first_device)\n            hidden_states = hidden_states.to(self.lm_head.weight.device)\n\n        lm_logits = self.lm_head(hidden_states)\n\n        if not return_dict:\n            return (lm_logits,) + transformer_outputs[1:]\n\n        return CausalLMOutputWithCrossAttentions(\n            loss=None,\n            logits=lm_logits,\n            past_key_values=transformer_outputs.past_key_values,\n            hidden_states=transformer_outputs.hidden_states,\n            attentions=transformer_outputs.attentions,\n            cross_attentions=transformer_outputs.cross_attentions,\n        )\n\n    @staticmethod\n    def _reorder_cache(past, beam_idx):\n        \"\"\"\n        This function is used to re-order the :obj:`past_key_values` cache if\n        :meth:`~transformers.PreTrainedModel.beam_search` or :meth:`~transformers.PreTrainedModel.beam_sample` is\n        called. This is required to match :obj:`past_key_values` with the correct beam_idx at every generation step.\n        \"\"\"\n        return tuple(\n            tuple(\n                past_state.index_select(0, beam_idx.to(past_state.device))\n                for past_state in layer_past\n            )\n            for layer_past in past\n        )\n\n\nclass ConditioningEncoder(nn.Module):\n    def __init__(self,\n                 spec_dim,\n                 embedding_dim,\n                 attn_blocks=6,\n                 num_attn_heads=4,\n                 do_checkpointing=False,\n                 mean=False):\n        super().__init__()\n        attn = []\n        self.init = nn.Conv1d(spec_dim, embedding_dim, kernel_size=1)\n        for a in range(attn_blocks):\n            attn.append(AttentionBlock(embedding_dim, num_attn_heads))\n        self.attn = nn.Sequential(*attn)\n        self.dim = embedding_dim\n        self.do_checkpointing = do_checkpointing\n        self.mean = mean\n\n    def forward(self, x):\n        h = self.init(x)\n        h = self.attn(h)\n        if self.mean:\n            return h.mean(dim=2)\n        else:\n            return h\n            # return h[:, :, 0]\n\n\nclass LearnedPositionEmbeddings(nn.Module):\n    def __init__(self, seq_len, model_dim, init=.02):\n        super().__init__()\n        self.emb = nn.Embedding(seq_len, model_dim)\n        # Initializing this way is standard for GPT-2\n        self.emb.weight.data.normal_(mean=0.0, std=init)\n\n    def forward(self, x):\n        sl = x.shape[1]\n        return self.emb(torch.arange(0, sl, device=x.device))\n\n    def get_fixed_embedding(self, ind, dev):\n        return self.emb(torch.tensor([ind], device=dev)).unsqueeze(0)\n\n\ndef build_hf_gpt_transformer(layers, model_dim, heads, max_mel_seq_len, max_text_seq_len, checkpointing, activation_function):\n    \"\"\"\n    GPT-2 implemented by the HuggingFace library.\n    \"\"\"\n    from transformers import GPT2Config, GPT2Model\n    gpt_config = GPT2Config(vocab_size=256,  # Unused.\n                            n_positions=max_mel_seq_len + max_text_seq_len,\n                            n_ctx=max_mel_seq_len + max_text_seq_len,\n                            n_embd=model_dim,\n                            n_layer=layers,\n                            n_head=heads,\n                            activation_function=activation_function or \"gelu_new\",\n                            gradient_checkpointing=checkpointing,\n                            use_cache=not checkpointing)\n    gpt = GPT2Model(gpt_config)\n    # Override the built in positional embeddings\n    del gpt.wpe\n    gpt.wpe = functools.partial(null_position_embeddings, dim=model_dim)\n    # Built-in token embeddings are unused.\n    del gpt.wte\n    return gpt, LearnedPositionEmbeddings(max_mel_seq_len, model_dim), LearnedPositionEmbeddings(max_text_seq_len, model_dim), \\\n        None, None\n\n\nclass MelEncoder(nn.Module):\n    def __init__(self, channels, mel_channels=80, resblocks_per_reduction=2):\n        super().__init__()\n        self.channels = channels\n        self.encoder = nn.Sequential(nn.Conv1d(mel_channels, channels // 4, kernel_size=3, padding=1),\n                                     nn.Sequential(*[ResBlock(channels // 4) for _ in range(resblocks_per_reduction)]),\n                                     nn.Conv1d(channels // 4, channels // 2, kernel_size=3, stride=2, padding=1),\n                                     nn.GroupNorm(channels // 16, channels // 2),\n                                     nn.ReLU(),\n                                     nn.Sequential(*[ResBlock(channels // 2) for _ in range(resblocks_per_reduction)]),\n                                     nn.Conv1d(channels // 2, channels, kernel_size=3, stride=2, padding=1),\n                                     nn.GroupNorm(channels // 8, channels),\n                                     nn.ReLU(),\n                                     nn.Sequential(*[ResBlock(channels) for _ in range(resblocks_per_reduction)]),\n                                     )\n        self.reduction = 4\n\n    def forward(self, x):\n        for e in self.encoder:\n            x = e(x)\n        return x.permute(0, 2, 1)\n\n\nclass UnifiedVoice(nn.Module):\n    def __init__(self, layers=8, model_dim=512, heads=8, max_text_tokens=120, max_mel_tokens=250, max_conditioning_inputs=1,\n                 mel_length_compression=1024, number_text_tokens=256,\n                 start_text_token=0, stop_text_token=1, number_mel_codes=8194, start_mel_token=8192, stop_mel_token=8193,\n                 train_solo_embeddings=False, use_mel_codes_as_input=True,\n                 checkpointing=True, types=1, activation_function=None,\n                 condition_num_latent=32, condition_type=\"perceiver\", condition_module=None):\n        \"\"\"\n        Args:\n            layers: Number of layers in transformer stack.\n            model_dim: Operating dimensions of the transformer\n            heads: Number of transformer heads. Must be divisible by model_dim. Recommend model_dim//64\n            max_text_tokens: Maximum number of text tokens that will be encountered by model.\n            max_mel_tokens: Maximum number of MEL tokens that will be encountered by model.\n            max_conditioning_inputs: Maximum number of conditioning inputs provided to the model. If (1), conditioning input can be of format (b,80,s), otherwise (b,n,80,s).\n            mel_length_compression: The factor between <number_input_samples> and <mel_tokens>. Used to compute MEL code padding given wav input length.\n            number_text_tokens:\n            start_text_token:\n            stop_text_token:\n            number_mel_codes:\n            start_mel_token:\n            stop_mel_token:\n            train_solo_embeddings:\n            use_mel_codes_as_input:\n            checkpointing:\n            condition_type: perceiver, gst or default encoder\n        \"\"\"\n        super().__init__()\n        self.number_text_tokens = number_text_tokens\n        self.start_text_token = start_text_token\n        self.stop_text_token = stop_text_token\n        self.number_mel_codes = number_mel_codes\n        self.start_mel_token = start_mel_token\n        self.stop_mel_token = stop_mel_token\n        self.layers = layers\n        self.heads = heads\n        self.max_mel_tokens = max_mel_tokens\n        self.max_text_tokens = max_text_tokens\n        self.model_dim = model_dim\n        self.max_conditioning_inputs = max_conditioning_inputs\n        self.mel_length_compression = mel_length_compression\n        self.condition_type = condition_type\n        self.cond_num = condition_num_latent\n        self.cond_mask_pad = nn.ConstantPad1d((self.cond_num, 0), True)\n        if condition_type == \"perceiver\":\n            self.conditioning_encoder = ConditioningEncoder(100, model_dim, num_attn_heads=heads)\n            self.perceiver_encoder = PerceiverResampler(model_dim, dim_context=model_dim, num_latents=self.cond_num)\n        elif condition_type == \"conformer_perceiver\" or condition_type == \"conformer_encoder\":\n            self.conditioning_encoder = ConformerEncoder(input_size=100,\n                                                         output_size=condition_module['output_size'],\n                                                         linear_units=condition_module['linear_units'],\n                                                         attention_heads=condition_module['attention_heads'],\n                                                         num_blocks=condition_module['num_blocks'],\n                                                         input_layer=condition_module['input_layer'])\n            if condition_type == \"conformer_perceiver\":\n                self.perceiver_encoder = PerceiverResampler(model_dim, dim_context=condition_module['output_size'],\n                                                            ff_mult=condition_module['perceiver_mult'],\n                                                            heads=condition_module['attention_heads'],\n                                                            num_latents=self.cond_num)\n        else:\n            self.conditioning_encoder = ConditioningEncoder(100, model_dim, num_attn_heads=heads, mean=True)\n\n        self.text_embedding = nn.Embedding(self.number_text_tokens * types + 1, model_dim)\n        if use_mel_codes_as_input:\n            self.mel_embedding = nn.Embedding(self.number_mel_codes, model_dim)\n        else:\n            self.mel_embedding = MelEncoder(model_dim, resblocks_per_reduction=1)\n        self.gpt, self.mel_pos_embedding, self.text_pos_embedding, self.mel_layer_pos_embedding, self.text_layer_pos_embedding = \\\n            build_hf_gpt_transformer(layers, model_dim, heads, self.max_mel_tokens + 2 + self.max_conditioning_inputs,\n                                     self.max_text_tokens + 2, checkpointing, activation_function)\n        if train_solo_embeddings:\n            self.mel_solo_embedding = nn.Parameter(torch.randn(1, 1, model_dim) * .02, requires_grad=True)\n            self.text_solo_embedding = nn.Parameter(torch.randn(1, 1, model_dim) * .02, requires_grad=True)\n        else:\n            self.mel_solo_embedding = 0\n            self.text_solo_embedding = 0\n\n        self.final_norm = nn.LayerNorm(model_dim)\n        self.text_head = nn.Linear(model_dim, self.number_text_tokens * types + 1)\n        self.mel_head = nn.Linear(model_dim, self.number_mel_codes)\n\n        # Initialize the embeddings per the GPT-2 scheme\n        embeddings = [self.text_embedding]\n        if use_mel_codes_as_input:\n            embeddings.append(self.mel_embedding)\n        for module in embeddings:\n            module.weight.data.normal_(mean=0.0, std=.02)\n\n    def post_init_gpt2_config(self, use_deepspeed=False, kv_cache=False, half=False):\n        seq_length = self.max_mel_tokens + self.max_text_tokens + 2\n        gpt_config = GPT2Config(\n            vocab_size=self.number_mel_codes,\n            n_positions=seq_length,\n            n_ctx=seq_length,\n            n_embd=self.model_dim,\n            n_layer=self.layers,\n            n_head=self.heads,\n            gradient_checkpointing=False,\n            use_cache=True,\n        )\n        self.inference_model = GPT2InferenceModel(\n            gpt_config,\n            self.gpt,\n            self.mel_pos_embedding,\n            self.mel_embedding,\n            self.final_norm,\n            self.mel_head,\n            kv_cache=kv_cache,\n        )\n        if use_deepspeed and half and torch.cuda.is_available():\n            import deepspeed\n            self.ds_engine = deepspeed.init_inference(model=self.inference_model,\n                                                      mp_size=1,\n                                                      replace_with_kernel_inject=False,\n                                                      dtype=torch.float16)\n            self.inference_model = self.ds_engine.module.eval()\n        elif use_deepspeed and torch.cuda.is_available():\n            import deepspeed\n            self.ds_engine = deepspeed.init_inference(model=self.inference_model,\n                                                      mp_size=1,\n                                                      replace_with_kernel_inject=False,\n                                                      dtype=torch.float32)\n            self.inference_model = self.ds_engine.module.eval()\n        else:\n            self.inference_model = self.inference_model.eval()\n\n        # self.inference_model = PrunedGPT2InferenceModel(gpt_config, self.gpt, self.mel_pos_embedding, self.mel_embedding, self.final_norm, self.mel_head)\n        self.gpt.wte = self.mel_embedding\n\n    def build_aligned_inputs_and_targets(self, input, start_token, stop_token):\n        inp = F.pad(input, (1, 0), value=start_token)\n        tar = F.pad(input, (0, 1), value=stop_token)\n        return inp, tar\n\n    def set_mel_padding(self, mel_input_tokens, mel_lengths):\n        \"\"\"\n        Given mel tokens that are derived from a padded audio clip and the actual lengths of each batch element in\n        that audio clip, reformats the tokens with STOP_MEL_TOKEN in place of the zero padding. This is required\n        preformatting to create a working TTS model.\n        \"\"\"\n        for b in range(len(mel_lengths)):\n            # Due to the convolutional nature of how these tokens are generated,\n            # it would be best if the model predicts a token past the actual last token.\n            actual_end = mel_lengths[b]\n            if actual_end < mel_input_tokens.shape[-1]:\n                mel_input_tokens[b, actual_end:] = self.stop_mel_token\n        return mel_input_tokens\n\n    def set_text_padding(self, text_input_tokens, text_lengths):\n        \"\"\"\n        Given mel tokens that are derived from a padded audio clip and the actual lengths of each batch element in\n        that audio clip, reformats the tokens with STOP_MEL_TOKEN in place of the zero padding. This is required\n        preformatting to create a working TTS model.\n        \"\"\"\n        for b in range(len(text_lengths)):\n            # Due to the convolutional nature of how these tokens are generated,\n            # it would be best if the model predicts a token past the actual last token.\n            actual_end = text_lengths[b]\n            if actual_end < text_input_tokens.shape[-1]:\n                text_input_tokens[b, actual_end:] = self.stop_text_token\n        return text_input_tokens\n\n    def get_logits(self, speech_conditioning_inputs, first_inputs, first_head, second_inputs=None, second_head=None, get_attns=False, return_latent=False):\n        if second_inputs is not None:\n            emb = torch.cat([speech_conditioning_inputs, first_inputs, second_inputs], dim=1)\n        else:\n            emb = torch.cat([speech_conditioning_inputs, first_inputs], dim=1)\n\n        gpt_out = self.gpt(inputs_embeds=emb, return_dict=True, output_attentions=get_attns)\n        if get_attns:\n            return gpt_out.attentions\n\n        offset = speech_conditioning_inputs.shape[1]\n        enc = gpt_out.last_hidden_state[:, offset:]\n        enc = self.final_norm(enc)\n\n        if return_latent:\n            return enc[:, :first_inputs.shape[1]], enc[:, -second_inputs.shape[1]:]\n\n        first_logits = enc[:, :first_inputs.shape[1]]\n        first_logits = first_head(first_logits)\n        first_logits = first_logits.permute(0, 2, 1)\n        if second_inputs is not None:\n            second_logits = enc[:, -second_inputs.shape[1]:]\n            second_logits = second_head(second_logits)\n            second_logits = second_logits.permute(0, 2, 1)\n            return first_logits, second_logits\n        else:\n            return first_logits\n\n    def get_conditioning(self, speech_conditioning_input, cond_mel_lengths=None):\n        if self.condition_type == \"perceiver\":\n            if speech_conditioning_input.ndim == 4:\n                speech_conditioning_input = speech_conditioning_input.squeeze(1)\n            speech_conditioning_input = self.conditioning_encoder(speech_conditioning_input)  # (b, d, s)\n            conds = self.perceiver_encoder(speech_conditioning_input.transpose(1, 2))  # (b, 32, d)\n        elif self.condition_type == \"conformer_perceiver\":\n            speech_conditioning_input, mask = self.conditioning_encoder(speech_conditioning_input.transpose(1, 2),\n                                                                        cond_mel_lengths)  # (b, s, d), (b, 1, s)\n            if self.condition_type == \"conformer_perceiver\":\n                # conds_mask = torch.cat([torch.ones((mask.shape[0], self.cond_num), dtype=torch.bool), mask.squeeze(1)], dim=1)\n                conds_mask = self.cond_mask_pad(mask.squeeze(1))\n                conds = self.perceiver_encoder(speech_conditioning_input, conds_mask)  # (b, 32, d)\n        elif self.condition_type == \"gst\":\n            if speech_conditioning_input.ndim == 4:\n                speech_conditioning_input = speech_conditioning_input.squeeze(1)\n            conds = self.gst_encoder(speech_conditioning_input.transpose(1, 2))  # (b, 1, d)\n        else:\n            speech_conditioning_input = (\n                speech_conditioning_input.unsqueeze(1)\n                if len(speech_conditioning_input.shape) == 3\n                else speech_conditioning_input\n            )\n            conds = []\n            for j in range(speech_conditioning_input.shape[1]):\n                conds.append(self.conditioning_encoder(speech_conditioning_input[:, j]))\n            conds = torch.stack(conds, dim=1)\n            conds = conds.mean(dim=1)\n            conds = conds.unsqueeze(1)\n        return conds\n\n    def forward(self, speech_conditioning_latent, text_inputs, text_lengths, mel_codes, wav_lengths,\n                cond_mel_lengths=None, types=None, text_first=True, raw_mels=None, return_attentions=False,\n                return_latent=False, clip_inputs=False):\n        \"\"\"\n        Forward pass that uses both text and voice in either text conditioning mode or voice conditioning mode\n        (actuated by `text_first`).\n\n        speech_conditioning_input: MEL float tensor, (b,1024)\n        text_inputs: long tensor, (b,t)\n        text_lengths: long tensor, (b,)\n        mel_inputs:  long tensor, (b,m)\n        wav_lengths: long tensor, (b,)\n        raw_mels: MEL float tensor (b,80,s)\n\n        If return_attentions is specified, only logits are returned.\n        If return_latent is specified, loss & logits are not computed or returned. Only the predicted latents are returned.\n        If clip_inputs is True, the inputs will be clipped to the smallest input size across each input modality.\n        \"\"\"\n\n        speech_conditioning_latent = self.get_conditioning(speech_conditioning_latent, cond_mel_lengths)\n        # Types are expressed by expanding the text embedding space.\n        if types is not None:\n            text_inputs = text_inputs * (1 + types).unsqueeze(-1)\n\n        if clip_inputs:\n            # This model will receive micro-batches with a ton of padding for both the text and MELs. Ameliorate this by\n            # chopping the inputs by the maximum actual length.\n            max_text_len = text_lengths.max()\n            text_inputs = text_inputs[:, :max_text_len]\n            max_mel_len = wav_lengths.max() // self.mel_length_compression\n            mel_codes = mel_codes[:, :max_mel_len]\n            if raw_mels is not None:\n                raw_mels = raw_mels[:, :, :max_mel_len * 4]\n\n        # Set padding areas within MEL (currently it is coded with the MEL code for <zero>).\n        # mel_codes_lengths = torch.div(wav_lengths, self.mel_length_compression, rounding_mode='trunc')\n        mel_codes_lengths = torch.ceil(wav_lengths / self.mel_length_compression).long() + 1\n        mel_codes = self.set_mel_padding(mel_codes, mel_codes_lengths)\n        text_inputs = self.set_text_padding(text_inputs, text_lengths)\n        text_inputs = F.pad(text_inputs, (0, 1), value=self.stop_text_token)\n        mel_codes = F.pad(mel_codes, (0, 1), value=self.stop_mel_token)\n\n        conds = speech_conditioning_latent\n        text_inputs, text_targets = self.build_aligned_inputs_and_targets(text_inputs, self.start_text_token, self.stop_text_token)\n        text_emb = self.text_embedding(text_inputs) + self.text_pos_embedding(text_inputs)\n        mel_codes, mel_targets = self.build_aligned_inputs_and_targets(mel_codes, self.start_mel_token, self.stop_mel_token)\n        if raw_mels is not None:\n            mel_inp = F.pad(raw_mels, (0, 8))\n        else:\n            mel_inp = mel_codes\n        mel_emb = self.mel_embedding(mel_inp)\n        mel_emb = mel_emb + self.mel_pos_embedding(mel_codes)\n\n        if text_first:\n            # print(f\"conds: {conds.shape}, text_emb: {text_emb.shape}, mel_emb: {mel_emb.shape}\")\n            text_logits, mel_logits = self.get_logits(conds, text_emb, self.text_head, mel_emb, self.mel_head, get_attns=return_attentions, return_latent=return_latent)\n            if return_latent:\n                return mel_logits[:, :-2]  # Despite the name, these are not logits. Strip off the two tokens added by this forward pass.\n        else:\n            mel_logits, text_logits = self.get_logits(conds, mel_emb, self.mel_head, text_emb, self.text_head, get_attns=return_attentions, return_latent=return_latent)\n            if return_latent:\n                return text_logits[:, :-2]  # Despite the name, these are not logits. Strip off the two tokens added by this forward pass.\n\n        if return_attentions:\n            return mel_logits\n\n        loss_text = F.cross_entropy(text_logits, text_targets.long())\n        loss_mel = F.cross_entropy(mel_logits, mel_targets.long())\n        return loss_text.mean(), loss_mel.mean(), mel_logits\n\n    def prepare_gpt_inputs(\n        self,\n        conditional_latents: torch.Tensor,\n        text_inputs: torch.Tensor,\n    ):\n        \n        \"\"\"\n        Prepare the inputs for the GPT2InferenceModel to generate.\n        Args:\n            conds_latent: (b, 32, dim) audio conditioning embedding by `get_conditioning()`\n            text_inputs: (b, L)\n        Returns:\n            input_ids: (b, s+1) the input ids for the GPT2InferenceModel.generate()\n            inputs_embeds: (b, s+1, dim) the input embeddings for the GPT2InferenceModel.forward()\n            attention_mask: (b, s+1) the attention mask for the GPT2InferenceModel.generate()\n        \"\"\"\n        b, L = text_inputs.shape[:2]\n        device = text_inputs.device\n        single_cond = conditional_latents.ndim == 3 and conditional_latents.shape[0] == 1\n        if not single_cond:\n            assert conditional_latents.shape[0] == b, f\"batch size mismatch: {conditional_latents.shape[0]} vs {b}\"\n        batched_mel_emb = []\n        attention_masks = []\n        target_len = conditional_latents.shape[1] + L + 2\n        for i in range(b):\n            valid_mask = (text_inputs[i] != self.stop_text_token) & (text_inputs[i] != self.start_text_token)\n            text_input = text_inputs[i][valid_mask]\n            text_input = F.pad(text_input, (1, 0), value=self.start_text_token)\n            text_input = F.pad(text_input, (0, 1), value=self.stop_text_token)\n            text_input_pos = torch.arange(0, text_input.size(-1), device=device)\n            text_emb = self.text_embedding(text_input) + self.text_pos_embedding.emb(text_input_pos)\n            # concatenate [conditional latents][text embeddings]\n            conds_text_emb = [\n                conditional_latents.squeeze(0) if single_cond else conditional_latents[i],\n                text_emb,\n            ]\n            # +1 for the start_mel_token\n            attention_mask = torch.ones(target_len+1, dtype=torch.long, device=device)\n            # check this text input is padded\n            padding: int = L + 2 - text_input.size(-1)\n            # pad left of [cond][text] -> [pad][cond][text]\n            if padding > 0:\n                pad = torch.zeros((padding, conditional_latents.size(-1)), dtype=text_emb.dtype, device=device) # [p, dim]\n                conds_text_emb.insert(0, pad)\n                attention_mask[:padding] = 0\n            mel_emb = torch.cat(conds_text_emb) #[s, dim]\n            assert mel_emb.shape[0] == target_len, f\"mel_emb.shape: {mel_emb.shape}, target_len: {target_len}\"\n            batched_mel_emb.append(mel_emb)\n            attention_masks.append(attention_mask)\n        # [b, s, dim]\n        batched_mel_emb = torch.stack(batched_mel_emb, dim=0)\n        # [b, s+1]\n        attention_mask = torch.stack(attention_masks, dim=0)\n        # [b, s+1]\n        fake_inputs = torch.ones(\n            (\n                batched_mel_emb.shape[0],\n                batched_mel_emb.shape[1] + 1,  # +1 for the start_mel_token\n            ),\n            dtype=torch.long,\n            device=device,\n        )\n        fake_inputs[:, -1] = self.start_mel_token\n        return fake_inputs, batched_mel_emb, attention_mask\n    def inference_speech(self, speech_conditioning_mel, text_inputs, cond_mel_lengths=None, input_tokens=None, num_return_sequences=1,\n                         max_generate_length=None, typical_sampling=False, typical_mass=.9, **hf_generate_kwargs):\n        \"\"\"\n        Args:\n            speech_conditioning_mel: (b, n_mels, frames) or (n_mels, frames)\n            text_inputs: (b, L)\n            cond_mel_lengths: lengths of the conditioning mel spectrograms in shape (b,) or (1,)\n            input_tokens: additional tokens for generation in shape (b, s) or (s,)\n            max_generate_length: limit the number of generated tokens\n            hf_generate_kwargs: kwargs for `GPT2InferenceModel.generate(**hf_generate_kwargs)`\n        \"\"\"\n        if speech_conditioning_mel.ndim == 2:\n            speech_conditioning_mel = speech_conditioning_mel.unsqueeze(0)\n        if cond_mel_lengths is None:\n            cond_mel_lengths = torch.tensor([speech_conditioning_mel.shape[-1]], device=speech_conditioning_mel.device)\n        conds_latent = self.get_conditioning(speech_conditioning_mel, cond_mel_lengths)\n        input_ids, inputs_embeds, attention_mask = self.prepare_gpt_inputs(conds_latent, text_inputs)\n        self.inference_model.store_mel_emb(inputs_embeds)\n        if input_tokens is None:\n            inputs = input_ids\n        else:\n            if input_tokens.ndim == 1:\n                input_tokens = input_tokens.unsqueeze(0)\n            assert num_return_sequences % input_tokens.shape[0] == 0, \\\n                    \"The num_return_sequences must be divisible by the batch number of input_tokens\"\n            assert num_return_sequences % text_inputs.shape[0] == 0, \\\n                    \"The num_return_sequences must be divisible by the batch number of text_inputs\"\n            b = num_return_sequences // input_ids.shape[0]\n            if b > 1:\n                input_ids = input_ids.repeat(b, 1)\n                attention_mask = attention_mask.repeat(b, 1)\n            input_tokens = input_tokens.repeat(num_return_sequences // input_tokens.shape[0], 1)\n            inputs = torch.cat([input_ids, input_tokens], dim=1)\n            attention_mask = F.pad(attention_mask, (0, input_tokens.shape[1]), value=1)\n        trunc_index = inputs.shape[1]\n        logits_processor = LogitsProcessorList()\n        if typical_sampling:\n            # employ custom typical sampling\n            if not (typical_mass > 0.0 and typical_mass < 1.0):\n                raise ValueError(f\"`typical_mass` has to be a float > 0 and < 1, but is {typical_mass}\")\n            min_tokens_to_keep = 2 if hf_generate_kwargs.get(\"num_beams\", 1) > 1 else 1\n            logits_processor.append(TypicalLogitsWarper(mass=typical_mass, min_tokens_to_keep=min_tokens_to_keep))\n        max_length = (trunc_index + self.max_mel_tokens - 1) if max_generate_length is None else trunc_index + max_generate_length\n        output = self.inference_model.generate(inputs, \n                                            bos_token_id=self.start_mel_token, pad_token_id=self.stop_mel_token,\n                                            eos_token_id=self.stop_mel_token, attention_mask=attention_mask,\n                                            max_length=max_length, logits_processor=logits_processor,\n                                            num_return_sequences=num_return_sequences,\n                                            **hf_generate_kwargs)\n        if isinstance(output, torch.Tensor):\n            return output[:, trunc_index:]\n        # GenerateOutput\n        output.sequences = output.sequences[:, trunc_index:]\n        return output\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/model_v2.py",
    "content": "import functools\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nimport transformers\nfrom transformers import GPT2Config, LogitsProcessorList\nfrom indextts.gpt.transformers_gpt2 import GPT2PreTrainedModel, GPT2Model\n\n# from transformers import GPT2Config, GPT2PreTrainedModel, LogitsProcessorList\nfrom transformers.modeling_outputs import CausalLMOutputWithCrossAttentions\nfrom transformers.utils.model_parallel_utils import (assert_device_map,\n                                                     get_device_map)\n\nfrom indextts.gpt.conformer_encoder import ConformerEncoder\nfrom indextts.gpt.perceiver import PerceiverResampler\nfrom indextts.utils.arch_util import AttentionBlock\nfrom indextts.utils.typical_sampling import TypicalLogitsWarper\n\n\ndef null_position_embeddings(range, dim):\n    return torch.zeros((range.shape[0], range.shape[1], dim), device=range.device)\n\n\nclass ResBlock(nn.Module):\n    \"\"\"\n    Basic residual convolutional block that uses GroupNorm.\n    \"\"\"\n\n    def __init__(self, chan):\n        super().__init__()\n        self.net = nn.Sequential(\n            nn.Conv1d(chan, chan, kernel_size=3, padding=1),\n            nn.GroupNorm(chan // 8, chan),\n            nn.ReLU(),\n            nn.Conv1d(chan, chan, kernel_size=3, padding=1),\n            nn.GroupNorm(chan // 8, chan)\n        )\n\n    def forward(self, x):\n        return F.relu(self.net(x) + x)\n\n\nclass GPT2InferenceModel(GPT2PreTrainedModel):\n    def __init__(self, config, gpt, text_pos_emb, embeddings, norm, linear, kv_cache=False):\n        super().__init__(config)\n        # Note: the argument named `text_pos_emb` here actually represents the mel position embedding\n        self.transformer = gpt\n        self.text_pos_embedding = text_pos_emb\n        self.embeddings = embeddings\n        self.final_norm = norm\n        self.lm_head = nn.Sequential(norm, linear)\n        self.kv_cache = kv_cache\n\n        # Model parallel\n        self.model_parallel = False\n        self.device_map = None\n        self.cached_mel_emb = None\n\n    def parallelize(self, device_map=None):\n        self.device_map = (\n            get_device_map(len(self.transformer.h), range(max(1, torch.cuda.device_count())))\n            if device_map is None\n            else device_map\n        )\n        assert_device_map(self.device_map, len(self.transformer.h))\n        self.transformer.parallelize(self.device_map)\n        self.lm_head = self.lm_head.to(self.transformer.first_device)\n        self.model_parallel = True\n\n    def deparallelize(self):\n        self.transformer.deparallelize()\n        self.transformer = self.transformer.to(\"cpu\")\n        self.lm_head = self.lm_head.to(\"cpu\")\n        self.model_parallel = False\n        torch.cuda.empty_cache()\n        if torch.backends.mps.is_available():\n            torch.mps.empty_cache()\n\n    def get_output_embeddings(self):\n        return self.lm_head\n\n    def set_output_embeddings(self, new_embeddings):\n        self.lm_head = new_embeddings\n\n    def store_mel_emb(self, mel_emb):\n        self.cached_mel_emb = mel_emb\n\n    def prepare_inputs_for_generation(self, input_ids, past_key_values=None, **kwargs):\n        token_type_ids = kwargs.get(\"token_type_ids\", None)  # usually None\n        if not self.kv_cache:\n            past_key_values = None\n        # only last token for inputs_ids if past is defined in kwargs\n        if past_key_values:\n            input_ids = input_ids[:, -1].unsqueeze(-1)\n            if token_type_ids is not None:\n                token_type_ids = token_type_ids[:, -1].unsqueeze(-1)\n\n        attention_mask = kwargs.get(\"attention_mask\", None)\n        position_ids = kwargs.get(\"position_ids\", None)\n\n        if attention_mask is not None and position_ids is None:\n            # create position_ids on the fly for batch generation\n            position_ids = attention_mask.long().cumsum(-1) - 1\n            position_ids.masked_fill_(attention_mask == 0, 0)\n            if past_key_values:\n                position_ids = position_ids[:, -1].unsqueeze(-1)\n        else:\n            position_ids = None\n        return {\n            \"input_ids\": input_ids,\n            \"past_key_values\": past_key_values,\n            \"use_cache\": kwargs.get(\"use_cache\"),\n            \"position_ids\": position_ids,\n            \"attention_mask\": attention_mask,\n            \"token_type_ids\": token_type_ids,\n        }\n\n    def forward(\n            self,\n            input_ids=None,\n            past_key_values=None,\n            attention_mask=None,\n            token_type_ids=None,\n            position_ids=None,\n            head_mask=None,\n            inputs_embeds=None,\n            encoder_hidden_states=None,\n            encoder_attention_mask=None,\n            labels=None,\n            use_cache=None,\n            output_attentions=None,\n            output_hidden_states=None,\n            return_dict=None,\n    ):\n        assert self.cached_mel_emb is not None\n        assert inputs_embeds is None  # Not supported by this inference model.\n        assert labels is None  # Training not supported by this inference model.\n        return_dict = (\n            return_dict if return_dict is not None else self.config.use_return_dict\n        )\n        # Create embedding\n        mel_len = self.cached_mel_emb.shape[1]\n        if input_ids.shape[1] != 1:\n            text_inputs = input_ids[:, mel_len:]\n            text_emb = self.embeddings(text_inputs)\n            text_emb = text_emb + self.text_pos_embedding(text_emb)\n            if self.cached_mel_emb.shape[0] != text_emb.shape[0]:\n                mel_emb = self.cached_mel_emb.repeat_interleave(\n                    text_emb.shape[0] // self.cached_mel_emb.shape[0], 0\n                )\n            else:  # this outcome only occurs once per loop in most cases\n                mel_emb = self.cached_mel_emb\n            emb = torch.cat([mel_emb, text_emb], dim=1)\n        else:\n            emb = self.embeddings(input_ids)\n            emb = emb + self.text_pos_embedding.get_fixed_embedding(\n                attention_mask.shape[1] - mel_len, attention_mask.device\n            )\n        transformer_outputs = self.transformer(\n            inputs_embeds=emb,\n            past_key_values=past_key_values,\n            attention_mask=attention_mask,\n            token_type_ids=token_type_ids,\n            position_ids=position_ids,\n            head_mask=head_mask,\n            encoder_hidden_states=encoder_hidden_states,\n            encoder_attention_mask=encoder_attention_mask,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n        hidden_states = transformer_outputs[0]\n\n        # Set device for model parallelism\n        if self.model_parallel:\n            if torch.backends.mps.is_available():\n                self.to(self.transformer.first_device)\n            else:\n                torch.cuda.set_device(self.transformer.first_device)\n            hidden_states = hidden_states.to(self.lm_head.weight.device)\n\n        lm_logits = self.lm_head(hidden_states)\n\n        if not return_dict:\n            return (lm_logits,) + transformer_outputs[1:]\n\n        return CausalLMOutputWithCrossAttentions(\n            loss=None,\n            logits=lm_logits,\n            past_key_values=transformer_outputs.past_key_values,\n            hidden_states=transformer_outputs.hidden_states,\n            attentions=transformer_outputs.attentions,\n            cross_attentions=transformer_outputs.cross_attentions,\n        )\n\n    @staticmethod\n    def _reorder_cache(past, beam_idx):\n        \"\"\"\n        This function is used to re-order the :obj:`past_key_values` cache if\n        :meth:`~transformers.PreTrainedModel.beam_search` or :meth:`~transformers.PreTrainedModel.beam_sample` is\n        called. This is required to match :obj:`past_key_values` with the correct beam_idx at every generation step.\n        \"\"\"\n        return tuple(\n            tuple(\n                past_state.index_select(0, beam_idx.to(past_state.device))\n                for past_state in layer_past\n            )\n            for layer_past in past\n        )\n\n\nclass ConditioningEncoder(nn.Module):\n    def __init__(self,\n                 spec_dim,\n                 embedding_dim,\n                 attn_blocks=6,\n                 num_attn_heads=4,\n                 do_checkpointing=False,\n                 mean=False):\n        super().__init__()\n        attn = []\n        self.init = nn.Conv1d(spec_dim, embedding_dim, kernel_size=1)\n        for a in range(attn_blocks):\n            attn.append(AttentionBlock(embedding_dim, num_attn_heads))\n        self.attn = nn.Sequential(*attn)\n        self.dim = embedding_dim\n        self.do_checkpointing = do_checkpointing\n        self.mean = mean\n\n    def forward(self, x):\n        h = self.init(x)\n        h = self.attn(h)\n        if self.mean:\n            return h.mean(dim=2)\n        else:\n            return h\n            # return h[:, :, 0]\n\n\nclass LearnedPositionEmbeddings(nn.Module):\n    def __init__(self, seq_len, model_dim, init=.02):\n        super().__init__()\n        self.emb = nn.Embedding(seq_len, model_dim)\n        # Initializing this way is standard for GPT-2\n        self.emb.weight.data.normal_(mean=0.0, std=init)\n\n    def forward(self, x):\n        sl = x.shape[1]\n        return self.emb(torch.arange(0, sl, device=x.device))\n\n    def get_fixed_embedding(self, ind, dev):\n        return self.emb(torch.tensor([ind], device=dev)).unsqueeze(0)\n\n\ndef build_hf_gpt_transformer(layers, model_dim, heads, max_mel_seq_len, max_text_seq_len, checkpointing):\n    \"\"\"\n    GPT-2 implemented by the HuggingFace library.\n    \"\"\"\n    from transformers import GPT2Config, GPT2Model\n    gpt_config = GPT2Config(vocab_size=256,  # Unused.\n                            n_positions=max_mel_seq_len + max_text_seq_len,\n                            n_ctx=max_mel_seq_len + max_text_seq_len,\n                            n_embd=model_dim,\n                            n_layer=layers,\n                            n_head=heads,\n                            gradient_checkpointing=checkpointing,\n                            use_cache=not checkpointing)\n    gpt = GPT2Model(gpt_config)\n    # Override the built in positional embeddings\n    del gpt.wpe\n    gpt.wpe = functools.partial(null_position_embeddings, dim=model_dim)\n    # Built-in token embeddings are unused.\n    del gpt.wte\n    return gpt, LearnedPositionEmbeddings(max_mel_seq_len, model_dim), LearnedPositionEmbeddings(max_text_seq_len, model_dim), \\\n        None, None\n\n\nclass MelEncoder(nn.Module):\n    def __init__(self, channels, mel_channels=80, resblocks_per_reduction=2):\n        super().__init__()\n        self.channels = channels\n        self.encoder = nn.Sequential(nn.Conv1d(mel_channels, channels // 4, kernel_size=3, padding=1),\n                                     nn.Sequential(*[ResBlock(channels // 4) for _ in range(resblocks_per_reduction)]),\n                                     nn.Conv1d(channels // 4, channels // 2, kernel_size=3, stride=2, padding=1),\n                                     nn.GroupNorm(channels // 16, channels // 2),\n                                     nn.ReLU(),\n                                     nn.Sequential(*[ResBlock(channels // 2) for _ in range(resblocks_per_reduction)]),\n                                     nn.Conv1d(channels // 2, channels, kernel_size=3, stride=2, padding=1),\n                                     nn.GroupNorm(channels // 8, channels),\n                                     nn.ReLU(),\n                                     nn.Sequential(*[ResBlock(channels) for _ in range(resblocks_per_reduction)]),\n                                     )\n        self.reduction = 4\n\n    def forward(self, x):\n        for e in self.encoder:\n            x = e(x)\n        return x.permute(0, 2, 1)\n\n\nclass UnifiedVoice(nn.Module):\n    def __init__(self, layers=8, model_dim=512, heads=8, max_text_tokens=120, max_mel_tokens=250, max_conditioning_inputs=1,\n                 mel_length_compression=1024, number_text_tokens=256,\n                 start_text_token=0, stop_text_token=1, number_mel_codes=8194, start_mel_token=8192, stop_mel_token=8193,\n                 train_solo_embeddings=False, use_mel_codes_as_input=True,\n                 checkpointing=True, types=1,\n                 condition_num_latent=32, condition_type=\"perceiver\", condition_module=None, emo_condition_module=None):\n        \"\"\"\n        Args:\n            layers: Number of layers in transformer stack.\n            model_dim: Operating dimensions of the transformer\n            heads: Number of transformer heads. Must be divisible by model_dim. Recommend model_dim//64\n            max_text_tokens: Maximum number of text tokens that will be encountered by model.\n            max_mel_tokens: Maximum number of MEL tokens that will be encountered by model.\n            max_conditioning_inputs: Maximum number of conditioning inputs provided to the model. If (1), conditioning input can be of format (b,80,s), otherwise (b,n,80,s).\n            mel_length_compression: The factor between <number_input_samples> and <mel_tokens>. Used to compute MEL code padding given wav input length.\n            number_text_tokens:\n            start_text_token:\n            stop_text_token:\n            number_mel_codes:\n            start_mel_token:\n            stop_mel_token:\n            train_solo_embeddings:\n            use_mel_codes_as_input:\n            checkpointing:\n            condition_type: perceiver, gst or default encoder\n        \"\"\"\n        super().__init__()\n        self.number_text_tokens = number_text_tokens\n        self.start_text_token = start_text_token\n        self.stop_text_token = stop_text_token\n        self.number_mel_codes = number_mel_codes\n        self.start_mel_token = start_mel_token\n        self.stop_mel_token = stop_mel_token\n        self.layers = layers\n        self.heads = heads\n        self.max_mel_tokens = max_mel_tokens\n        self.max_text_tokens = max_text_tokens\n        self.model_dim = model_dim\n        self.max_conditioning_inputs = max_conditioning_inputs\n        self.mel_length_compression = mel_length_compression\n        self.condition_type = condition_type\n        self.cond_num = condition_num_latent\n        self.cond_mask_pad = nn.ConstantPad1d((self.cond_num, 0), True)\n        self.emo_cond_mask_pad = nn.ConstantPad1d((1, 0), True)\n        if condition_type == \"perceiver\":\n            self.conditioning_encoder = ConditioningEncoder(1024, model_dim, num_attn_heads=heads)\n            self.perceiver_encoder = PerceiverResampler(model_dim, dim_context=model_dim, num_latents=self.cond_num)\n        elif condition_type == \"conformer_perceiver\" or condition_type == \"conformer_encoder\":\n            self.conditioning_encoder = ConformerEncoder(input_size=1024,\n                                                         output_size=condition_module['output_size'],\n                                                         linear_units=condition_module['linear_units'],\n                                                         attention_heads=condition_module['attention_heads'],\n                                                         num_blocks=condition_module['num_blocks'],\n                                                         input_layer=condition_module['input_layer'])\n            if condition_type == \"conformer_perceiver\":\n                self.perceiver_encoder = PerceiverResampler(model_dim, dim_context=condition_module['output_size'],\n                                                            ff_mult=condition_module['perceiver_mult'],\n                                                            heads=condition_module['attention_heads'],\n                                                            num_latents=self.cond_num)\n        else:\n            self.conditioning_encoder = ConditioningEncoder(1024, model_dim, num_attn_heads=heads, mean=True)\n\n        self.emo_conditioning_encoder = ConformerEncoder(input_size=1024,\n                                                         output_size=emo_condition_module['output_size'],\n                                                         linear_units=emo_condition_module['linear_units'],\n                                                         attention_heads=emo_condition_module['attention_heads'],\n                                                         num_blocks=emo_condition_module['num_blocks'],\n                                                         input_layer=emo_condition_module['input_layer'])\n        self.emo_perceiver_encoder = PerceiverResampler(1024, dim_context=emo_condition_module['output_size'],\n                                                            ff_mult=emo_condition_module['perceiver_mult'],\n                                                            heads=emo_condition_module['attention_heads'],\n                                                            num_latents=1)\n\n\n\n        self.text_embedding = nn.Embedding(self.number_text_tokens * types + 1, model_dim)\n        self.emo_layer = nn.Linear(model_dim, model_dim)\n        self.emovec_layer = nn.Linear(1024, model_dim)\n\n        if use_mel_codes_as_input:\n            self.mel_embedding = nn.Embedding(self.number_mel_codes, model_dim)\n        else:\n            self.mel_embedding = MelEncoder(model_dim, resblocks_per_reduction=1)\n        self.gpt, self.mel_pos_embedding, self.text_pos_embedding, self.mel_layer_pos_embedding, self.text_layer_pos_embedding = \\\n            build_hf_gpt_transformer(layers, model_dim, heads, self.max_mel_tokens + 2 + self.max_conditioning_inputs,\n                                     self.max_text_tokens + 2, checkpointing)\n        if train_solo_embeddings:\n            self.mel_solo_embedding = nn.Parameter(torch.randn(1, 1, model_dim) * .02, requires_grad=True)\n            self.text_solo_embedding = nn.Parameter(torch.randn(1, 1, model_dim) * .02, requires_grad=True)\n        else:\n            self.mel_solo_embedding = 0\n            self.text_solo_embedding = 0\n\n        self.final_norm = nn.LayerNorm(model_dim)\n        self.text_head = nn.Linear(model_dim, self.number_text_tokens * types + 1)\n        self.mel_head = nn.Linear(model_dim, self.number_mel_codes)\n\n        self.speed_emb = nn.Embedding(2, model_dim)\n        self.speed_emb.weight.data.normal_(mean=0.0, std=0.0)\n\n        # Initialize the embeddings per the GPT-2 scheme\n        embeddings = [self.text_embedding]\n        if use_mel_codes_as_input:\n            embeddings.append(self.mel_embedding)\n        for module in embeddings:\n            module.weight.data.normal_(mean=0.0, std=.02)\n\n    def post_init_gpt2_config(self, use_deepspeed=False, kv_cache=False, half=False):\n        seq_length = self.max_mel_tokens + self.max_text_tokens + 2\n        gpt_config = GPT2Config(\n            vocab_size=self.number_mel_codes,\n            n_positions=seq_length,\n            n_ctx=seq_length,\n            n_embd=self.model_dim,\n            n_layer=self.layers,\n            n_head=self.heads,\n            gradient_checkpointing=False,\n            use_cache=True,\n        )\n        self.inference_model = GPT2InferenceModel(\n            gpt_config,\n            self.gpt,\n            self.mel_pos_embedding,\n            self.mel_embedding,\n            self.final_norm,\n            self.mel_head,\n            kv_cache=kv_cache,\n        )\n        if use_deepspeed and half and torch.cuda.is_available():\n            import deepspeed\n            self.ds_engine = deepspeed.init_inference(model=self.inference_model,\n                                                      mp_size=1,\n                                                      replace_with_kernel_inject=True,\n                                                      dtype=torch.float16)\n            self.inference_model = self.ds_engine.module.eval()\n        elif use_deepspeed and torch.cuda.is_available():\n            import deepspeed\n            self.ds_engine = deepspeed.init_inference(model=self.inference_model,\n                                                      mp_size=1,\n                                                      replace_with_kernel_inject=True,\n                                                      dtype=torch.float32)\n            self.inference_model = self.ds_engine.module.eval()\n        else:\n            self.inference_model = self.inference_model.eval()\n\n        # self.inference_model = PrunedGPT2InferenceModel(gpt_config, self.gpt, self.mel_pos_embedding, self.mel_embedding, self.final_norm, self.mel_head)\n        self.gpt.wte = self.mel_embedding\n\n    def build_aligned_inputs_and_targets(self, input, start_token, stop_token):\n        inp = F.pad(input, (1, 0), value=start_token)\n        tar = F.pad(input, (0, 1), value=stop_token)\n        return inp, tar\n\n    def set_mel_padding(self, mel_input_tokens, mel_lengths):\n        \"\"\"\n        Given mel tokens that are derived from a padded audio clip and the actual lengths of each batch element in\n        that audio clip, reformats the tokens with STOP_MEL_TOKEN in place of the zero padding. This is required\n        preformatting to create a working TTS model.\n        \"\"\"\n        for b in range(len(mel_lengths)):\n            # Due to the convolutional nature of how these tokens are generated,\n            # it would be best if the model predicts a token past the actual last token.\n            actual_end = mel_lengths[b]\n            if actual_end < mel_input_tokens.shape[-1]:\n                mel_input_tokens[b, actual_end:] = self.stop_mel_token\n        return mel_input_tokens\n\n    def set_text_padding(self, text_input_tokens, text_lengths):\n        \"\"\"\n        Given mel tokens that are derived from a padded audio clip and the actual lengths of each batch element in\n        that audio clip, reformats the tokens with STOP_MEL_TOKEN in place of the zero padding. This is required\n        preformatting to create a working TTS model.\n        \"\"\"\n        for b in range(len(text_lengths)):\n            # Due to the convolutional nature of how these tokens are generated,\n            # it would be best if the model predicts a token past the actual last token.\n            actual_end = text_lengths[b]\n            if actual_end < text_input_tokens.shape[-1]:\n                text_input_tokens[b, actual_end:] = self.stop_text_token\n        return text_input_tokens\n\n    def get_logits(self, speech_conditioning_inputs, first_inputs, first_head, second_inputs=None, second_head=None, get_attns=False, return_latent=False):\n        if second_inputs is not None:\n            emb = torch.cat([speech_conditioning_inputs, first_inputs, second_inputs], dim=1)\n        else:\n            emb = torch.cat([speech_conditioning_inputs, first_inputs], dim=1)\n\n        gpt_out = self.gpt(inputs_embeds=emb, return_dict=True, output_attentions=get_attns)\n        if get_attns:\n            return gpt_out.attentions\n\n        offset = speech_conditioning_inputs.shape[1]\n        enc = gpt_out.last_hidden_state[:, offset:]\n        enc = self.final_norm(enc)\n\n        if return_latent:\n            return enc[:, :first_inputs.shape[1]], enc[:, -second_inputs.shape[1]:]\n\n        first_logits = enc[:, :first_inputs.shape[1]]\n        first_logits = first_head(first_logits)\n        first_logits = first_logits.permute(0, 2, 1)\n        if second_inputs is not None:\n            second_logits = enc[:, -second_inputs.shape[1]:]\n            second_logits = second_head(second_logits)\n            second_logits = second_logits.permute(0, 2, 1)\n            return first_logits, second_logits\n        else:\n            return first_logits\n\n    def get_conditioning(self, speech_conditioning_input, cond_mel_lengths=None):\n        if self.condition_type == \"perceiver\":\n            if speech_conditioning_input.ndim == 4:\n                speech_conditioning_input = speech_conditioning_input.squeeze(1)\n            speech_conditioning_input = self.conditioning_encoder(speech_conditioning_input)  # (b, d, s)\n            conds = self.perceiver_encoder(speech_conditioning_input.transpose(1, 2))  # (b, 32, d)\n        elif self.condition_type == \"conformer_perceiver\":\n            speech_conditioning_input, mask = self.conditioning_encoder(speech_conditioning_input.transpose(1, 2),\n                                                                        cond_mel_lengths)  # (b, s, d), (b, 1, s)\n            if self.condition_type == \"conformer_perceiver\":\n                # conds_mask = torch.cat([torch.ones((mask.shape[0], self.cond_num), dtype=torch.bool), mask.squeeze(1)], dim=1)\n                conds_mask = self.cond_mask_pad(mask.squeeze(1))\n                conds = self.perceiver_encoder(speech_conditioning_input, conds_mask)  # (b, 32, d)\n        elif self.condition_type == \"gst\":\n            if speech_conditioning_input.ndim == 4:\n                speech_conditioning_input = speech_conditioning_input.squeeze(1)\n            conds = self.gst_encoder(speech_conditioning_input.transpose(1, 2))  # (b, 1, d)\n        else:\n            speech_conditioning_input = (\n                speech_conditioning_input.unsqueeze(1)\n                if len(speech_conditioning_input.shape) == 3\n                else speech_conditioning_input\n            )\n            conds = []\n            for j in range(speech_conditioning_input.shape[1]):\n                conds.append(self.conditioning_encoder(speech_conditioning_input[:, j]))\n            conds = torch.stack(conds, dim=1)\n            conds = conds.mean(dim=1)\n            conds = conds.unsqueeze(1)\n        return conds\n\n\n    def get_emo_conditioning(self, speech_conditioning_input, cond_mel_lengths=None):\n        speech_conditioning_input, mask = self.emo_conditioning_encoder(speech_conditioning_input.transpose(1, 2),\n                                                                        cond_mel_lengths)  # (b, s, d), (b, 1, s)\n        conds_mask = self.emo_cond_mask_pad(mask.squeeze(1))\n        conds = self.emo_perceiver_encoder(speech_conditioning_input, conds_mask)  # (b, 1, d)\n        return conds.squeeze(1)\n\n\n    def forward(self, speech_conditioning_latent, text_inputs, text_lengths, mel_codes, mel_codes_lengths, emo_speech_conditioning_latent,\n                cond_mel_lengths=None, emo_cond_mel_lengths=None, emo_vec=None, use_speed=None, do_spk_cond=False):\n        \"\"\"\n        Forward pass that uses both text and voice in either text conditioning mode or voice conditioning mode\n\n        speech_conditioning_input: MEL float tensor, (b,1024)\n        text_inputs: long tensor, (b,t)\n        text_lengths: long tensor, (b,)\n        mel_inputs:  long tensor, (b,m)\n        wav_lengths: long tensor, (b,)\n\n        If return_attentions is specified, only logits are returned.\n        If return_latent is specified, loss & logits are not computed or returned. Only the predicted latents are returned.\n        \"\"\"\n\n        if do_spk_cond:\n            speech_conditioning_latent = self.get_conditioning(speech_conditioning_latent.transpose(1,2), cond_mel_lengths)\n        else:\n            speech_conditioning_latent = speech_conditioning_latent\n\n        if emo_vec is None:\n            emo_vec_syn_ori = self.get_emo_conditioning(emo_speech_conditioning_latent.transpose(1,2), emo_cond_mel_lengths)\n            emo_vec_syn = self.emovec_layer(emo_vec_syn_ori)\n            emo_vec = self.emo_layer(emo_vec_syn)\n\n        text_inputs = self.set_text_padding(text_inputs, text_lengths)\n        text_inputs = F.pad(text_inputs, (0, 1), value=self.stop_text_token)\n\n        mel_codes = self.set_mel_padding(mel_codes, mel_codes_lengths)\n        mel_codes = F.pad(mel_codes, (0, 1), value=self.stop_mel_token)\n\n        duration_emb = self.speed_emb(torch.zeros_like(use_speed))\n        duration_emb_half = self.speed_emb(torch.ones_like(use_speed))\n        conds = torch.cat((speech_conditioning_latent + emo_vec.unsqueeze(1), duration_emb_half.unsqueeze(1), duration_emb.unsqueeze(1)), 1)\n        text_inputs, text_targets = self.build_aligned_inputs_and_targets(text_inputs, self.start_text_token, self.stop_text_token)\n        text_emb = self.text_embedding(text_inputs) + self.text_pos_embedding(text_inputs)\n        mel_codes, mel_targets = self.build_aligned_inputs_and_targets(mel_codes, self.start_mel_token, self.stop_mel_token)\n\n        mel_emb = self.mel_embedding(mel_codes)\n        mel_emb = mel_emb + self.mel_pos_embedding(mel_codes)\n\n        text_logits, mel_logits = self.get_logits(conds, text_emb, self.text_head, mel_emb, self.mel_head, get_attns=False, return_latent=True)\n        return mel_logits[:, :-2]  # Despite the name, these are not logits. Strip off the two tokens added by this forward pass.\n\n    def prepare_gpt_inputs(\n        self,\n        conditional_latents: torch.Tensor,\n        text_inputs: torch.Tensor,\n    ):\n        \n        \"\"\"\n        Prepare the inputs for the GPT2InferenceModel to generate.\n        Args:\n            conds_latent: (b, 32, dim) audio conditioning embedding by `get_conditioning()`\n            text_inputs: (b, L)\n        Returns:\n            input_ids: (b, s+1) the input ids for the GPT2InferenceModel.generate()\n            inputs_embeds: (b, s+1, dim) the input embeddings for the GPT2InferenceModel.forward()\n            attention_mask: (b, s+1) the attention mask for the GPT2InferenceModel.generate()\n        \"\"\"\n        b, L = text_inputs.shape[:2]\n        device = text_inputs.device\n        single_cond = conditional_latents.ndim == 3 and conditional_latents.shape[0] == 1\n        if not single_cond:\n            assert conditional_latents.shape[0] == b, f\"batch size mismatch: {conditional_latents.shape[0]} vs {b}\"\n        batched_mel_emb = []\n        attention_masks = []\n        target_len = conditional_latents.shape[1] + L + 2\n        for i in range(b):\n            valid_mask = (text_inputs[i] != self.stop_text_token) & (text_inputs[i] != self.start_text_token)\n            text_input = text_inputs[i][valid_mask]\n            text_input = F.pad(text_input, (1, 0), value=self.start_text_token)\n            text_input = F.pad(text_input, (0, 1), value=self.stop_text_token)\n            text_input_pos = torch.arange(0, text_input.size(-1), device=device)\n            text_emb = self.text_embedding(text_input) + self.text_pos_embedding.emb(text_input_pos)\n            # concatenate [conditional latents][text embeddings]\n            conds_text_emb = [\n                conditional_latents.squeeze(0) if single_cond else conditional_latents[i],\n                text_emb,\n            ]\n            # +1 for the start_mel_token\n            attention_mask = torch.ones(target_len+1, dtype=torch.long, device=device)\n            # check this text input is padded\n            padding: int = L + 2 - text_input.size(-1)\n            # pad left of [cond][text] -> [pad][cond][text]\n            if padding > 0:\n                pad = torch.zeros((padding, conditional_latents.size(-1)), dtype=text_emb.dtype, device=device) # [p, dim]\n                conds_text_emb.insert(0, pad)\n                attention_mask[:padding] = 0\n            mel_emb = torch.cat(conds_text_emb) #[s, dim]\n            assert mel_emb.shape[0] == target_len, f\"mel_emb.shape: {mel_emb.shape}, target_len: {target_len}\"\n            batched_mel_emb.append(mel_emb)\n            attention_masks.append(attention_mask)\n        # [b, s, dim]\n        batched_mel_emb = torch.stack(batched_mel_emb, dim=0)\n        # [b, s+1]\n        attention_mask = torch.stack(attention_masks, dim=0)\n        # [b, s+1]\n        fake_inputs = torch.ones(\n            (\n                batched_mel_emb.shape[0],\n                batched_mel_emb.shape[1] + 1,  # +1 for the start_mel_token\n            ),\n            dtype=torch.long,\n            device=device,\n        )\n        fake_inputs[:, -1] = self.start_mel_token\n        return fake_inputs, batched_mel_emb, attention_mask\n\n    def inference_speech(self, speech_condition, text_inputs, emo_speech_condition=None, cond_lengths=None, emo_cond_lengths=None, emo_vec=None, use_speed=False, input_tokens=None, num_return_sequences=1,\n                         max_generate_length=None, typical_sampling=False, typical_mass=.9, **hf_generate_kwargs):\n        \"\"\"\n        Args:\n            speech_condition: (b, d, frames) or (d, frames)\n            text_inputs: (b, L)\n            cond_mel_lengths: lengths of the conditioning mel spectrograms in shape (b,) or (1,)\n            input_tokens: additional tokens for generation in shape (b, s) or (s,)\n            max_generate_length: limit the number of generated tokens\n            hf_generate_kwargs: kwargs for `GPT2InferenceModel.generate(**hf_generate_kwargs)`\n        \"\"\"\n\n        if speech_condition.ndim == 2:\n            speech_condition = speech_condition.unsqueeze(0)\n        if emo_speech_condition is None:\n            emo_speech_condition = speech_condition\n        if cond_lengths is None:\n            cond_lengths = torch.tensor([speech_condition.shape[-1]], device=speech_condition.device)\n        if emo_cond_lengths is None:\n            emo_cond_lengths = torch.tensor([emo_speech_condition.shape[-1]], device=speech_condition.device) \n\n        speech_conditioning_latent = self.get_conditioning(speech_condition.transpose(1,2), cond_lengths)\n        if emo_vec is None:\n            print('compute emo vec')\n            emo_vec = self.get_emo_conditioning(emo_speech_condition.transpose(1,2), emo_cond_lengths)\n            emo_vec = self.emovec_layer(emo_vec)\n            emo_vec = self.emo_layer(emo_vec)\n        else:\n            print('Use the specified emotion vector')\n\n        tmp = torch.zeros(text_inputs.size(0)).to(text_inputs.device)\n        duration_emb =  self.speed_emb(torch.zeros_like(tmp).long())\n        duration_emb_half = self.speed_emb(torch.ones_like(tmp).long())\n        conds_latent = torch.cat((speech_conditioning_latent + emo_vec.unsqueeze(1), duration_emb_half.unsqueeze(1), duration_emb.unsqueeze(1)), 1)\n        input_ids, inputs_embeds, attention_mask = self.prepare_gpt_inputs(conds_latent, text_inputs)\n        self.inference_model.store_mel_emb(inputs_embeds)\n        if input_tokens is None:\n            inputs = input_ids\n        else:\n            if input_tokens.ndim == 1:\n                input_tokens = input_tokens.unsqueeze(0)\n            assert num_return_sequences % input_tokens.shape[0] == 0, \\\n                    \"The num_return_sequences must be divisible by the batch number of input_tokens\"\n            assert num_return_sequences % text_inputs.shape[0] == 0, \\\n                    \"The num_return_sequences must be divisible by the batch number of text_inputs\"\n            b = num_return_sequences // input_ids.shape[0]\n            if b > 1:\n                input_ids = input_ids.repeat(b, 1)\n                attention_mask = attention_mask.repeat(b, 1)\n            input_tokens = input_tokens.repeat(num_return_sequences // input_tokens.shape[0], 1)\n            inputs = torch.cat([input_ids, input_tokens], dim=1)\n            attention_mask = F.pad(attention_mask, (0, input_tokens.shape[1]), value=1)\n        trunc_index = inputs.shape[1]\n        logits_processor = LogitsProcessorList()\n        if typical_sampling:\n            # employ custom typical sampling\n            if not (typical_mass > 0.0 and typical_mass < 1.0):\n                raise ValueError(f\"`typical_mass` has to be a float > 0 and < 1, but is {typical_mass}\")\n            min_tokens_to_keep = 2 if hf_generate_kwargs.get(\"num_beams\", 1) > 1 else 1\n            logits_processor.append(TypicalLogitsWarper(mass=typical_mass, min_tokens_to_keep=min_tokens_to_keep))\n        max_length = (trunc_index + self.max_mel_tokens - 1) if max_generate_length is None else trunc_index + max_generate_length\n        output = self.inference_model.generate(inputs, \n                                            bos_token_id=self.start_mel_token, pad_token_id=self.stop_mel_token,\n                                            eos_token_id=self.stop_mel_token, attention_mask=attention_mask,\n                                            max_length=max_length, logits_processor=logits_processor,\n                                            num_return_sequences=num_return_sequences,\n                                            **hf_generate_kwargs)\n        if isinstance(output, torch.Tensor):\n            return output[:, trunc_index:], speech_conditioning_latent\n        # GenerateOutput\n        output.sequences = output.sequences[:, trunc_index:]\n        return output, speech_conditioning_latent\n\n    def get_emovec(self, emo_speech_conditioning_latent, emo_cond_lengths):\n        emo_vec_syn_ori = self.get_emo_conditioning(emo_speech_conditioning_latent.transpose(1,2), emo_cond_lengths)\n        emo_vec_syn = self.emovec_layer(emo_vec_syn_ori)\n        emo_vec = self.emo_layer(emo_vec_syn)\n        return emo_vec\n\n    def merge_emovec(self, speech_conditioning_latent, emo_speech_conditioning_latent, cond_lengths, emo_cond_lengths, alpha = 1.0):\n        emo_vec = self.get_emovec(emo_speech_conditioning_latent, emo_cond_lengths)\n        base_vec = self.get_emovec(speech_conditioning_latent, cond_lengths)\n\n        out = base_vec + alpha * (emo_vec - base_vec)\n        return out\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/perceiver.py",
    "content": "# Adapted from https://github.com/lucidrains/naturalspeech2-pytorch/blob/659bec7f7543e7747e809e950cc2f84242fbeec7/naturalspeech2_pytorch/naturalspeech2_pytorch.py#L532\n\nfrom collections import namedtuple\nfrom functools import wraps\n\nimport torch\nimport torch.nn.functional as F\nfrom einops import rearrange, repeat\nfrom einops.layers.torch import Rearrange\nfrom packaging import version\nfrom torch import einsum, nn\n\n\ndef exists(val):\n    return val is not None\n\n\ndef once(fn):\n    called = False\n\n    @wraps(fn)\n    def inner(x):\n        nonlocal called\n        if called:\n            return\n        called = True\n        return fn(x)\n\n    return inner\n\n\nprint_once = once(print)\n\n\n# main class\nclass Attend(nn.Module):\n    def __init__(self, dropout=0.0, causal=False, use_flash=False):\n        super().__init__()\n        self.dropout = dropout\n        self.attn_dropout = nn.Dropout(dropout)\n\n        self.causal = causal\n        self.register_buffer(\"mask\", None, persistent=False)\n\n        self.use_flash = use_flash\n        assert not (\n            use_flash and version.parse(torch.__version__) < version.parse(\"2.0.0\")\n        ), \"in order to use flash attention, you must be using pytorch 2.0 or above\"\n\n        # determine efficient attention configs for cuda and cpu\n        self.config = namedtuple(\"EfficientAttentionConfig\", [\"enable_flash\", \"enable_math\", \"enable_mem_efficient\"])\n        self.cpu_config = self.config(True, True, True)\n        self.cuda_config = None\n\n        if not torch.cuda.is_available() or not use_flash:\n            return\n\n        device_properties = torch.cuda.get_device_properties(torch.device(\"cuda\"))\n\n        if device_properties.major == 8 and device_properties.minor == 0:\n            print_once(\"A100 GPU detected, using flash attention if input tensor is on cuda\")\n            self.cuda_config = self.config(True, False, False)\n        else:\n            print_once(\"Non-A100 GPU detected, using math or mem efficient attention if input tensor is on cuda\")\n            self.cuda_config = self.config(False, True, True)\n\n    def get_mask(self, n, device):\n        if exists(self.mask) and self.mask.shape[-1] >= n:\n            return self.mask[:n, :n]\n\n        mask = torch.ones((n, n), device=device, dtype=torch.bool).triu(1)\n        self.register_buffer(\"mask\", mask, persistent=False)\n        return mask\n\n    def flash_attn(self, q, k, v, mask=None):\n        _, heads, q_len, _, k_len, is_cuda = *q.shape, k.shape[-2], q.is_cuda\n\n        # Recommended for multi-query single-key-value attention by Tri Dao\n        # kv shape torch.Size([1, 512, 64]) -> torch.Size([1, 8, 512, 64])\n\n        if k.ndim == 3:\n            k = rearrange(k, \"b ... -> b 1 ...\").expand_as(q)\n\n        if v.ndim == 3:\n            v = rearrange(v, \"b ... -> b 1 ...\").expand_as(q)\n\n        # Check if mask exists and expand to compatible shape\n        # The mask is B L, so it would have to be expanded to B H N L\n\n        if exists(mask):\n            mask = rearrange(mask, \"b j -> b 1 1 j\")\n            mask = mask.expand(-1, heads, q_len, -1)\n\n        # Check if there is a compatible device for flash attention\n\n        config = self.cuda_config if is_cuda else self.cpu_config\n\n        # pytorch 2.0 flash attn: q, k, v, mask, dropout, causal, softmax_scale\n\n        with torch.backends.cuda.sdp_kernel(**config._asdict()):\n            out = F.scaled_dot_product_attention(\n                q, k, v, attn_mask=mask, dropout_p=self.dropout if self.training else 0.0, is_causal=self.causal\n            )\n\n        return out\n\n    def forward(self, q, k, v, mask=None):\n        \"\"\"\n        einstein notation\n        b - batch\n        h - heads\n        n, i, j - sequence length (base sequence length, source, target)\n        d - feature dimension\n        \"\"\"\n\n        n, device = q.shape[-2], q.device\n\n        scale = q.shape[-1] ** -0.5\n\n        if self.use_flash:\n            return self.flash_attn(q, k, v, mask=mask)\n\n        kv_einsum_eq = \"b j d\" if k.ndim == 3 else \"b h j d\"\n\n        # similarity\n\n        sim = einsum(f\"b h i d, {kv_einsum_eq} -> b h i j\", q, k) * scale\n\n        # key padding mask\n\n        if exists(mask):\n            mask = rearrange(mask, \"b j -> b 1 1 j\")\n            sim = sim.masked_fill(~mask, -torch.finfo(sim.dtype).max)\n\n        # causal mask\n\n        if self.causal:\n            causal_mask = self.get_mask(n, device)\n            sim = sim.masked_fill(causal_mask, -torch.finfo(sim.dtype).max)\n\n        # attention\n\n        attn = sim.softmax(dim=-1)\n        attn = self.attn_dropout(attn)\n\n        # aggregate values\n\n        out = einsum(f\"b h i j, {kv_einsum_eq} -> b h i d\", attn, v)\n\n        return out\n\n\ndef Sequential(*mods):\n    return nn.Sequential(*filter(exists, mods))\n\n\ndef exists(x):\n    return x is not None\n\n\ndef default(val, d):\n    if exists(val):\n        return val\n    return d() if callable(d) else d\n\n\nclass RMSNorm(nn.Module):\n    def __init__(self, dim, scale=True, dim_cond=None):\n        super().__init__()\n        self.cond = exists(dim_cond)\n        self.to_gamma_beta = nn.Linear(dim_cond, dim * 2) if self.cond else None\n\n        self.scale = dim**0.5\n        self.gamma = nn.Parameter(torch.ones(dim)) if scale else None\n\n    def forward(self, x, cond=None):\n        gamma = default(self.gamma, 1)\n        out = F.normalize(x, dim=-1) * self.scale * gamma\n\n        if not self.cond:\n            return out\n\n        assert exists(cond)\n        gamma, beta = self.to_gamma_beta(cond).chunk(2, dim=-1)\n        gamma, beta = map(lambda t: rearrange(t, \"b d -> b 1 d\"), (gamma, beta))\n        return out * gamma + beta\n\n\nclass CausalConv1d(nn.Conv1d):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        (kernel_size,) = self.kernel_size\n        (dilation,) = self.dilation\n        (stride,) = self.stride\n\n        assert stride == 1\n        self.causal_padding = dilation * (kernel_size - 1)\n\n    def forward(self, x):\n        causal_padded_x = F.pad(x, (self.causal_padding, 0), value=0.0)\n        return super().forward(causal_padded_x)\n\n\nclass GEGLU(nn.Module):\n    def forward(self, x):\n        x, gate = x.chunk(2, dim=-1)\n        return F.gelu(gate) * x\n\n\ndef FeedForward(dim, mult=4, causal_conv=False):\n    dim_inner = int(dim * mult * 2 / 3)\n\n    conv = None\n    if causal_conv:\n        conv = nn.Sequential(\n            Rearrange(\"b n d -> b d n\"),\n            CausalConv1d(dim_inner, dim_inner, 3),\n            Rearrange(\"b d n -> b n d\"),\n        )\n\n    return Sequential(nn.Linear(dim, dim_inner * 2), GEGLU(), conv, nn.Linear(dim_inner, dim))\n\n\nclass PerceiverResampler(nn.Module):\n    def __init__(\n        self,\n        dim,\n        depth=2,\n        dim_context=None,\n        num_latents=32,\n        dim_head=64,\n        heads=8,\n        ff_mult=4,\n        use_flash_attn=False,\n    ):\n        super().__init__()\n        dim_context = default(dim_context, dim)\n\n        self.proj_context = nn.Linear(dim_context, dim) if dim_context != dim else nn.Identity()\n\n        self.latents = nn.Parameter(torch.randn(num_latents, dim))\n        nn.init.normal_(self.latents, std=0.02)\n\n        self.layers = nn.ModuleList([])\n        for _ in range(depth):\n            self.layers.append(\n                nn.ModuleList(\n                    [\n                        Attention(\n                            dim=dim,\n                            dim_head=dim_head,\n                            heads=heads,\n                            use_flash=use_flash_attn,\n                            cross_attn_include_queries=True,\n                        ),\n                        FeedForward(dim=dim, mult=ff_mult),\n                    ]\n                )\n            )\n\n        self.norm = RMSNorm(dim)\n\n    def forward(self, x, mask=None):\n        batch = x.shape[0]\n\n        x = self.proj_context(x)\n\n        latents = repeat(self.latents, \"n d -> b n d\", b=batch)\n\n        for attn, ff in self.layers:\n            latents = attn(latents, x, mask=mask) + latents\n            latents = ff(latents) + latents\n\n        return self.norm(latents)\n\n\nclass Attention(nn.Module):\n    def __init__(\n        self,\n        dim,\n        *,\n        dim_context=None,\n        causal=False,\n        dim_head=64,\n        heads=8,\n        dropout=0.0,\n        use_flash=False,\n        cross_attn_include_queries=False,\n    ):\n        super().__init__()\n        self.scale = dim_head**-0.5\n        self.heads = heads\n        self.cross_attn_include_queries = cross_attn_include_queries\n\n        dim_inner = dim_head * heads\n        dim_context = default(dim_context, dim)\n\n        self.attend = Attend(causal=causal, dropout=dropout, use_flash=use_flash)\n        self.to_q = nn.Linear(dim, dim_inner, bias=False)\n        self.to_kv = nn.Linear(dim_context, dim_inner * 2, bias=False)\n        self.to_out = nn.Linear(dim_inner, dim, bias=False)\n\n    def forward(self, x, context=None, mask=None):\n        h, has_context = self.heads, exists(context)\n\n        context = default(context, x)\n\n        if has_context and self.cross_attn_include_queries:\n            context = torch.cat((x, context), dim=-2)\n\n        q, k, v = (self.to_q(x), *self.to_kv(context).chunk(2, dim=-1))\n        q, k, v = map(lambda t: rearrange(t, \"b n (h d) -> b h n d\", h=h), (q, k, v))\n\n        out = self.attend(q, k, v, mask=mask)\n\n        out = rearrange(out, \"b h n d -> b n (h d)\")\n        return self.to_out(out)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/transformers_beam_search.py",
    "content": "# coding=utf-8\n# Copyright 2020 The HuggingFace Inc. team\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom abc import ABC, abstractmethod\nfrom collections import UserDict\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\n\nfrom transformers.utils import add_start_docstrings\nfrom transformers.generation.beam_constraints import Constraint, ConstraintListState\n\n\nPROCESS_INPUTS_DOCSTRING = r\"\"\"\n    Args:\n        input_ids (`torch.LongTensor` of shape `(batch_size * num_beams, sequence_length)`):\n            Indices of input sequence tokens in the vocabulary.\n\n            Indices can be obtained using any class inheriting from [`PreTrainedTokenizer`]. See\n            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.\n\n            [What are input IDs?](../glossary#input-ids)\n        next_scores (`torch.FloatTensor` of shape `(batch_size, 2 * num_beams)`):\n            Current scores of the top `2 * num_beams` non-finished beam hypotheses.\n        next_tokens (`torch.LongTensor` of shape `(batch_size, 2 * num_beams)`):\n            `input_ids` of the tokens corresponding to the top `2 * num_beams` non-finished beam hypotheses.\n        next_indices (`torch.LongTensor` of shape `(batch_size, 2 * num_beams)`):\n            Beam indices indicating to which beam hypothesis the `next_tokens` correspond.\n        pad_token_id (`int`, *optional*):\n            The id of the *padding* token.\n        eos_token_id (`Union[int, List[int]]`, *optional*):\n            The id of the *end-of-sequence* token. Optionally, use a list to set multiple *end-of-sequence* tokens.\n        beam_indices (`torch.LongTensor`, *optional*):\n            Beam indices indicating to which beam hypothesis each token correspond.\n        group_index (`int`, *optional*):\n            The index of the group of beams. Used with [`~PreTrainedModel.group_beam_search`].\n\n    Return:\n        `UserDict`: A dictionary composed of the fields as defined above:\n\n            - **next_beam_scores** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Updated scores of all\n              non-finished beams.\n            - **next_beam_tokens** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Next tokens to be added\n              to the non-finished beam_hypotheses.\n            - **next_beam_indices** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Beam indices\n              indicating to which beam the next tokens shall be added.\n\n\"\"\"\n\nFINALIZE_INPUTS_DOCSTRING = r\"\"\"\n    Args:\n        input_ids (`torch.LongTensor` of shape `(batch_size * num_beams, sequence_length)`):\n            Indices of input sequence tokens in the vocabulary.\n\n            Indices can be obtained using any class inheriting from [`PreTrainedTokenizer`]. See\n            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.\n\n            [What are input IDs?](../glossary#input-ids)\n        final_beam_scores (`torch.FloatTensor` of shape `(batch_size * num_beams)`):\n            The final scores of all non-finished beams.\n        final_beam_tokens (`torch.FloatTensor` of shape `(batch_size * num_beams)`):\n            The last tokens to be added to the non-finished beam_hypotheses.\n        final_beam_indices (`torch.FloatTensor` of shape `(batch_size * num_beams)`):\n            The beam indices indicating to which beam the `final_beam_tokens` shall be added.\n        pad_token_id (`int`, *optional*):\n            The id of the *padding* token.\n        eos_token_id (`Union[int, List[int]]`, *optional*):\n            The id of the *end-of-sequence* token. Optionally, use a list to set multiple *end-of-sequence* tokens.\n\n    Return:\n        `torch.LongTensor` of shape `(batch_size * num_return_sequences, sequence_length)`: The generated sequences.\n        The second dimension (sequence_length) is either equal to `max_length` or shorter if all batches finished early\n        due to the `eos_token_id`.\n\n\"\"\"\n\n\nclass BeamScorer(ABC):\n    \"\"\"\n    Abstract base class for all beam scorers that are used for [`~PreTrainedModel.beam_search`] and\n    [`~PreTrainedModel.beam_sample`].\n    \"\"\"\n\n    @abstractmethod\n    @add_start_docstrings(PROCESS_INPUTS_DOCSTRING)\n    def process(\n        self,\n        input_ids: torch.LongTensor,\n        next_scores: torch.FloatTensor,\n        next_tokens: torch.LongTensor,\n        next_indices: torch.LongTensor,\n        **kwargs,\n    ) -> Tuple[torch.Tensor]:\n        raise NotImplementedError(\"This is an abstract method.\")\n\n    @abstractmethod\n    @add_start_docstrings(FINALIZE_INPUTS_DOCSTRING)\n    def finalize(\n        self,\n        input_ids: torch.LongTensor,\n        next_scores: torch.FloatTensor,\n        next_tokens: torch.LongTensor,\n        next_indices: torch.LongTensor,\n        max_length: int,\n        **kwargs,\n    ) -> torch.LongTensor:\n        raise NotImplementedError(\"This is an abstract method.\")\n\n\nclass BeamSearchScorer(BeamScorer):\n    r\"\"\"\n    [`BeamScorer`] implementing standard beam search decoding.\n\n    Adapted in part from [Facebook's XLM beam search\n    code](https://github.com/facebookresearch/XLM/blob/9e6f6814d17be4fe5b15f2e6c43eb2b2d76daeb4/src/model/transformer.py#L529).\n\n    Reference for the diverse beam search algorithm and implementation [Ashwin Kalyan's DBS\n    implementation](https://github.com/ashwinkalyan/dbs/blob/master/dbs/beam_utils.lua)\n\n    Args:\n        batch_size (`int`):\n            Batch Size of `input_ids` for which standard beam search decoding is run in parallel.\n        num_beams (`int`):\n            Number of beams for beam search.\n        device (`torch.device`):\n            Defines the device type (*e.g.*, `\"cpu\"` or `\"cuda\"`) on which this instance of `BeamSearchScorer` will be\n            allocated.\n        length_penalty (`float`, *optional*, defaults to 1.0):\n            Exponential penalty to the length that is used with beam-based generation. It is applied as an exponent to\n            the sequence length, which in turn is used to divide the score of the sequence. Since the score is the log\n            likelihood of the sequence (i.e. negative), `length_penalty` > 0.0 promotes longer sequences, while\n            `length_penalty` < 0.0 encourages shorter sequences.\n        do_early_stopping (`bool` or `str`, *optional*, defaults to `False`):\n            Controls the stopping condition for beam-based methods, like beam-search. It accepts the following values:\n            `True`, where the generation stops as soon as there are `num_beams` complete candidates; `False`, where an\n            heuristic is applied and the generation stops when is it very unlikely to find better candidates;\n            `\"never\"`, where the beam search procedure only stops when there cannot be better candidates (canonical\n            beam search algorithm).\n        num_beam_hyps_to_keep (`int`, *optional*, defaults to 1):\n            The number of beam hypotheses that shall be returned upon calling\n            [`~transformers.BeamSearchScorer.finalize`].\n        num_beam_groups (`int`, *optional*, defaults to 1):\n            Number of groups to divide `num_beams` into in order to ensure diversity among different groups of beams.\n            See [this paper](https://arxiv.org/pdf/1610.02424.pdf) for more details.\n        max_length (`int`, *optional*):\n            The maximum length of the sequence to be generated.\n    \"\"\"\n\n    def __init__(\n        self,\n        batch_size: int,\n        num_beams: int,\n        device: torch.device,\n        length_penalty: Optional[float] = 1.0,\n        do_early_stopping: Optional[Union[bool, str]] = False,\n        num_beam_hyps_to_keep: Optional[int] = 1,\n        num_beam_groups: Optional[int] = 1,\n        max_length: Optional[int] = None,\n    ):\n        self.num_beams = num_beams\n        self.device = device\n        self.length_penalty = length_penalty\n        self.do_early_stopping = do_early_stopping\n        self.num_beam_hyps_to_keep = num_beam_hyps_to_keep\n        self.num_beam_groups = num_beam_groups\n        self.group_size = self.num_beams // self.num_beam_groups\n\n        self._is_init = False\n        # self._beam_hyps[i*self.num_beam_groups+j] is the beam_hyps of the j-th group in the i-th mini-batch.\n        # If group_beam_search is not used, the list consists of `batch_size` beam_hyps.\n        self._beam_hyps = [\n            BeamHypotheses(\n                num_beams=self.group_size,\n                length_penalty=self.length_penalty,\n                early_stopping=self.do_early_stopping,\n                max_length=max_length,\n            )\n            for _ in range(batch_size * self.num_beam_groups)\n        ]\n        # self._done[i*self.num_beam_groups+j] indicates whether the generation of the beam_hyps of the j-th group\n        # in the i-th mini-batch is complete.\n        self._done = torch.tensor(\n            [False for _ in range(batch_size * self.num_beam_groups)], dtype=torch.bool, device=self.device\n        )\n\n        if not isinstance(num_beams, int) or num_beams <= 1:\n            raise ValueError(\n                f\"`num_beams` has to be an integer strictly greater than 1, but is {num_beams}. For `num_beams` == 1,\"\n                \" one should make use of `greedy_search` instead.\"\n            )\n\n        if not isinstance(num_beam_groups, int) or (num_beam_groups > num_beams) or (num_beams % num_beam_groups != 0):\n            raise ValueError(\n                \"`num_beam_groups` has to be an integer smaller or equal than `num_beams` and `num_beams` has to be\"\n                f\" divisible by `num_beam_groups`, but is {num_beam_groups} with `num_beams` being {num_beams}.\"\n            )\n\n    @property\n    def is_done(self) -> bool:\n        return self._done.all()\n\n    def process(\n        self,\n        input_ids: torch.LongTensor,\n        next_scores: torch.FloatTensor,\n        next_tokens: torch.LongTensor,\n        next_indices: torch.LongTensor,\n        pad_token_id: Optional[Union[int, torch.Tensor]] = None,\n        eos_token_id: Optional[Union[int, List[int], torch.Tensor]] = None,\n        beam_indices: Optional[torch.LongTensor] = None,\n        group_index: Optional[int] = 0,\n        decoder_prompt_len: Optional[int] = 0,\n    ) -> Dict[str, torch.Tensor]:\n        # add up to the length which the next_scores is calculated on (including decoder prompt)\n        cur_len = input_ids.shape[-1] + 1\n        batch_size = len(self._beam_hyps) // self.num_beam_groups\n\n        if not (batch_size == (input_ids.shape[0] // self.group_size)):\n            if self.num_beam_groups > 1:\n                raise ValueError(\n                    f\"A group beam size of {input_ids.shape[0]} is used as the input, but a group beam \"\n                    f\"size of {self.group_size} is expected by the beam scorer.\"\n                )\n            else:\n                raise ValueError(\n                    f\"A beam size of {input_ids.shape[0]} is used as the input, but a beam size of \"\n                    f\"{self.group_size} is expected by the beam scorer.\"\n                )\n\n        device = input_ids.device\n        next_beam_scores = torch.zeros((batch_size, self.group_size), dtype=next_scores.dtype, device=device)\n        next_beam_tokens = torch.zeros((batch_size, self.group_size), dtype=next_tokens.dtype, device=device)\n        next_beam_indices = torch.zeros((batch_size, self.group_size), dtype=next_indices.dtype, device=device)\n\n        if eos_token_id is not None and not isinstance(eos_token_id, torch.Tensor):\n            if isinstance(eos_token_id, int):\n                eos_token_id = [eos_token_id]\n            eos_token_id = torch.tensor(eos_token_id)\n\n        for batch_idx in range(batch_size):\n            batch_group_idx = batch_idx * self.num_beam_groups + group_index\n            if self._done[batch_group_idx]:\n                if self.num_beams < len(self._beam_hyps[batch_group_idx]):\n                    raise ValueError(f\"Batch can only be done if at least {self.num_beams} beams have been generated\")\n                if eos_token_id is None or pad_token_id is None:\n                    raise ValueError(\"Generated beams >= num_beams -> eos_token_id and pad_token have to be defined\")\n                # pad the batch\n                next_beam_scores[batch_idx, :] = 0\n                next_beam_tokens[batch_idx, :] = pad_token_id\n                next_beam_indices[batch_idx, :] = 0\n                continue\n\n            # next tokens for this sentence\n            beam_idx = 0\n            for beam_token_rank, (next_token, next_score, next_index) in enumerate(\n                zip(next_tokens[batch_idx], next_scores[batch_idx], next_indices[batch_idx])\n            ):\n                batch_beam_idx = batch_idx * self.group_size + next_index\n                # add to generated hypotheses if end of sentence\n                if (eos_token_id is not None) and (next_token.item() in eos_token_id):\n                    # if beam_token does not belong to top num_beams tokens, it should not be added\n                    is_beam_token_worse_than_top_num_beams = beam_token_rank >= self.group_size\n                    if is_beam_token_worse_than_top_num_beams:\n                        continue\n                    if beam_indices is not None:\n                        beam_index = beam_indices[batch_beam_idx]\n                        beam_index = beam_index + (batch_beam_idx,)\n                    else:\n                        beam_index = None\n\n                    self._beam_hyps[batch_group_idx].add(\n                        input_ids[batch_beam_idx].clone(),\n                        next_score.item(),\n                        beam_indices=beam_index,\n                        generated_len=cur_len - decoder_prompt_len,\n                    )\n                else:\n                    # add next predicted token since it is not eos_token\n                    next_beam_scores[batch_idx, beam_idx] = next_score\n                    next_beam_tokens[batch_idx, beam_idx] = next_token\n                    next_beam_indices[batch_idx, beam_idx] = batch_beam_idx\n                    beam_idx += 1\n\n                # once the beam for next step is full, don't add more tokens to it.\n                if beam_idx == self.group_size:\n                    break\n\n            if beam_idx < self.group_size:\n                raise ValueError(\n                    f\"At most {self.group_size} tokens in {next_tokens[batch_idx]} can be equal to `eos_token_id:\"\n                    f\" {eos_token_id}`. Make sure {next_tokens[batch_idx]} are corrected.\"\n                )\n\n            # Check if we are done so that we can save a pad step if all(done)\n            self._done[batch_group_idx] = self._done[batch_group_idx] or self._beam_hyps[batch_group_idx].is_done(\n                next_scores[batch_idx].max().item(), cur_len, decoder_prompt_len\n            )\n\n        return UserDict(\n            {\n                \"next_beam_scores\": next_beam_scores.view(-1),\n                \"next_beam_tokens\": next_beam_tokens.view(-1),\n                \"next_beam_indices\": next_beam_indices.view(-1),\n            }\n        )\n\n    def finalize(\n        self,\n        input_ids: torch.LongTensor,\n        final_beam_scores: torch.FloatTensor,\n        final_beam_tokens: torch.LongTensor,\n        final_beam_indices: torch.LongTensor,\n        max_length: int,\n        pad_token_id: Optional[Union[int, torch.Tensor]] = None,\n        eos_token_id: Optional[Union[int, List[int], torch.Tensor]] = None,\n        beam_indices: Optional[torch.LongTensor] = None,\n        decoder_prompt_len: Optional[int] = 0,\n    ) -> Tuple[torch.LongTensor]:\n        batch_size = len(self._beam_hyps) // self.num_beam_groups\n\n        if eos_token_id is not None and not isinstance(eos_token_id, torch.Tensor):\n            if isinstance(eos_token_id, int):\n                eos_token_id = [eos_token_id]\n            eos_token_id = torch.tensor(eos_token_id)\n\n        # finalize all open beam hypotheses and add to generated hypotheses\n        for batch_group_idx, beam_hyp in enumerate(self._beam_hyps):\n            if self._done[batch_group_idx]:\n                continue\n\n            # all open beam hypotheses are added to the beam hypothesis\n            # beam hypothesis class automatically keeps the best beams\n            for index_per_group in range(self.group_size):\n                batch_beam_idx = batch_group_idx * self.group_size + index_per_group\n                final_score = final_beam_scores[batch_beam_idx].item()\n                final_tokens = input_ids[batch_beam_idx]\n                beam_index = beam_indices[batch_beam_idx] if beam_indices is not None else None\n                generated_len = final_tokens.shape[-1] - decoder_prompt_len\n                beam_hyp.add(final_tokens, final_score, beam_indices=beam_index, generated_len=generated_len)\n\n        # select the best hypotheses\n        sent_lengths = input_ids.new(batch_size * self.num_beam_hyps_to_keep)\n        best = []\n        best_indices = []\n        best_scores = torch.zeros(batch_size * self.num_beam_hyps_to_keep, device=self.device, dtype=torch.float32)\n\n        # retrieve best hypotheses\n        for i in range(batch_size):\n            beam_hyps_in_batch = self._beam_hyps[i * self.num_beam_groups : (i + 1) * self.num_beam_groups]\n            candidate_beams = [beam for beam_hyp in beam_hyps_in_batch for beam in beam_hyp.beams]\n            sorted_hyps = sorted(candidate_beams, key=lambda x: x[0])\n            for j in range(self.num_beam_hyps_to_keep):\n                best_hyp_tuple = sorted_hyps.pop()\n                best_score = best_hyp_tuple[0]\n                best_hyp = best_hyp_tuple[1]\n                best_index = best_hyp_tuple[2]\n                sent_lengths[self.num_beam_hyps_to_keep * i + j] = len(best_hyp)\n\n                # append hyp to lists\n                best.append(best_hyp)\n\n                # append indices to list\n                best_indices.append(best_index)\n\n                best_scores[i * self.num_beam_hyps_to_keep + j] = best_score\n\n        # prepare for adding eos\n        sent_lengths_max = sent_lengths.max().item() + 1\n        sent_max_len = min(sent_lengths_max, max_length) if max_length is not None else sent_lengths_max\n        decoded: torch.LongTensor = input_ids.new(batch_size * self.num_beam_hyps_to_keep, sent_max_len)\n\n        if len(best_indices) > 0 and best_indices[0] is not None:\n            indices: torch.LongTensor = input_ids.new(batch_size * self.num_beam_hyps_to_keep, sent_max_len)\n        else:\n            indices = None\n\n        # shorter batches are padded if needed\n        if sent_lengths.min().item() != sent_lengths.max().item():\n            if pad_token_id is None:\n                raise ValueError(\"`pad_token_id` has to be defined\")\n            decoded.fill_(pad_token_id)\n\n        if indices is not None:\n            indices.fill_(-1)\n\n        # fill with hypotheses and eos_token_id if the latter fits in\n        for i, (hypo, best_idx) in enumerate(zip(best, best_indices)):\n            decoded[i, : sent_lengths[i]] = hypo\n\n            if indices is not None:\n                indices[i, : len(best_idx)] = torch.tensor(best_idx)\n\n            if sent_lengths[i] < sent_max_len:\n                # inserting only the first eos_token_id\n                decoded[i, sent_lengths[i]] = eos_token_id[0]\n\n        return UserDict(\n            {\n                \"sequences\": decoded,\n                \"sequence_scores\": best_scores,\n                \"beam_indices\": indices,\n            }\n        )\n\n\nclass ConstrainedBeamSearchScorer(BeamScorer):\n    r\"\"\"\n    [`BeamScorer`] implementing constrained beam search decoding.\n\n\n    Args:\n        batch_size (`int`):\n            Batch Size of `input_ids` for which standard beam search decoding is run in parallel.\n        num_beams (`int`):\n            Number of beams for beam search.\n        constraints (`List[Constraint]`):\n            A list of positive constraints represented as `Constraint` objects that must be fulfilled in the generation\n            output. For more information, the documentation of [`Constraint`] should be read.\n        device (`torch.device`):\n            Defines the device type (*e.g.*, `\"cpu\"` or `\"cuda\"`) on which this instance of `BeamSearchScorer` will be\n            allocated.\n        length_penalty (`float`, *optional*, defaults to 1.0):\n            Exponential penalty to the length that is used with beam-based generation. It is applied as an exponent to\n            the sequence length, which in turn is used to divide the score of the sequence. Since the score is the log\n            likelihood of the sequence (i.e. negative), `length_penalty` > 0.0 promotes longer sequences, while\n            `length_penalty` < 0.0 encourages shorter sequences.\n        do_early_stopping (`bool` or `str`, *optional*, defaults to `False`):\n            Controls the stopping condition for beam-based methods, like beam-search. It accepts the following values:\n            `True`, where the generation stops as soon as there are `num_beams` complete candidates; `False`, where an\n            heuristic is applied and the generation stops when is it very unlikely to find better candidates;\n            `\"never\"`, where the beam search procedure only stops when there cannot be better candidates (canonical\n            beam search algorithm).\n        num_beam_hyps_to_keep (`int`, *optional*, defaults to 1):\n            The number of beam hypotheses that shall be returned upon calling\n            [`~transformers.BeamSearchScorer.finalize`].\n        num_beam_groups (`int`, *optional*, defaults to 1):\n            Number of groups to divide `num_beams` into in order to ensure diversity among different groups of beams.\n            See [this paper](https://arxiv.org/pdf/1610.02424.pdf) for more details.\n        max_length (`int`, *optional*):\n            The maximum length of the sequence to be generated.\n    \"\"\"\n\n    def __init__(\n        self,\n        batch_size: int,\n        num_beams: int,\n        constraints: List[Constraint],\n        device: torch.device,\n        length_penalty: Optional[float] = 1.0,\n        do_early_stopping: Optional[Union[bool, str]] = False,\n        num_beam_hyps_to_keep: Optional[int] = 1,\n        num_beam_groups: Optional[int] = 1,\n        max_length: Optional[int] = None,\n    ):\n        self.num_beams = num_beams\n        self.device = device\n        self.length_penalty = length_penalty\n        self.do_early_stopping = do_early_stopping\n        self.num_beam_hyps_to_keep = num_beam_hyps_to_keep\n        self.num_beam_groups = num_beam_groups\n        self.group_size = self.num_beams // self.num_beam_groups\n        self.constraints = constraints\n\n        self._is_init = False\n        self._beam_hyps = [\n            BeamHypotheses(\n                num_beams=self.num_beams,\n                length_penalty=self.length_penalty,\n                early_stopping=self.do_early_stopping,\n                max_length=max_length,\n            )\n            for _ in range(batch_size)\n        ]\n        self._done = torch.tensor([False for _ in range(batch_size)], dtype=torch.bool, device=self.device)\n\n        if not isinstance(num_beams, int) or num_beams <= 1:\n            raise ValueError(\n                f\"`num_beams` has to be an integer strictly greater than 1, but is {num_beams}. For `num_beams` == 1,\"\n                \" one should make use of `greedy_search` instead.\"\n            )\n\n        if not isinstance(num_beam_groups, int) or (num_beam_groups > num_beams) or (num_beams % num_beam_groups != 0):\n            raise ValueError(\n                \"`num_beam_groups` has to be an integer smaller or equal than `num_beams` and `num_beams` has to be\"\n                f\" divisible by `num_beam_groups`, but is {num_beam_groups} with `num_beams` being {num_beams}.\"\n            )\n\n    @property\n    def is_done(self) -> bool:\n        return self._done.all()\n\n    def make_constraint_states(self, n):\n        return [ConstraintListState([constraint.copy() for constraint in self.constraints]) for _ in range(n)]\n\n    def check_completes_constraints(self, sequence):\n        new_state = self.make_constraint_states(1)[0]\n        new_state.reset(sequence)\n        return new_state.completed\n\n    def process(\n        self,\n        input_ids: torch.LongTensor,\n        next_scores: torch.FloatTensor,\n        next_tokens: torch.LongTensor,\n        next_indices: torch.LongTensor,\n        scores_for_all_vocab: torch.FloatTensor,\n        pad_token_id: Optional[Union[int, torch.Tensor]] = None,\n        eos_token_id: Optional[Union[int, List[int], torch.Tensor]] = None,\n        beam_indices: Optional[torch.LongTensor] = None,\n        decoder_prompt_len: Optional[int] = 0,\n    ) -> Tuple[torch.Tensor]:\n        r\"\"\"\n        Args:\n            input_ids (`torch.LongTensor` of shape `(batch_size * num_beams, sequence_length)`):\n                Indices of input sequence tokens in the vocabulary.\n\n                Indices can be obtained using any class inheriting from [`PreTrainedTokenizer`]. See\n                [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.\n\n                [What are input IDs?](../glossary#input-ids)\n            next_scores (`torch.FloatTensor` of shape `(batch_size, 2 * num_beams)`):\n                Current scores of the top `2 * num_beams` non-finished beam hypotheses.\n            next_tokens (`torch.LongTensor` of shape `(batch_size, 2 * num_beams)`):\n                `input_ids` of the tokens corresponding to the top `2 * num_beams` non-finished beam hypotheses.\n            next_indices (`torch.LongTensor` of shape `(batch_size, 2 * num_beams)`):\n                Beam indices indicating to which beam hypothesis the `next_tokens` correspond.\n            scores_for_all_vocab (`torch.FloatTensor` of shape `(batch_size * num_beams, sequence_length)`):\n                The scores of all tokens in the vocabulary for each of the beam hypotheses.\n            pad_token_id (`int`, *optional*):\n                The id of the *padding* token.\n            eos_token_id (`Union[int, List[int]]`, *optional*):\n                The id of the *end-of-sequence* token. Optionally, use a list to set multiple *end-of-sequence* tokens.\n            beam_indices (`torch.LongTensor`, *optional*):\n                Beam indices indicating to which beam hypothesis each token correspond.\n            decoder_prompt_len (`int`, *optional*):\n                The length of prompt that is included in the input to decoder.\n        Return:\n            `UserDict`: A dictionary composed of the fields as defined above:\n\n                - **next_beam_scores** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Updated scores of\n                  all\n                non-finished beams.\n\n                - **next_beam_tokens** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Next tokens to be\n                  added\n                to the non-finished beam_hypotheses.\n                - **next_beam_indices** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Beam indices\n                indicating to which beam the next tokens shall be added.\n        \"\"\"\n\n        # add up to the length which the next_scores is calculated on (including decoder prompt)\n        cur_len = input_ids.shape[-1] + 1\n        batch_size = len(self._beam_hyps)\n        if not (batch_size == (input_ids.shape[0] // self.group_size)):\n            if self.num_beam_groups > 1:\n                raise ValueError(\n                    f\"A group beam size of {input_ids.shape[0]} is used as the input, but a group beam \"\n                    f\"size of {self.group_size} is expected by the beam scorer.\"\n                )\n            else:\n                raise ValueError(\n                    f\"A beam size of {input_ids.shape[0]} is used as the input, but a beam size of \"\n                    f\"{self.group_size} is expected by the beam scorer.\"\n                )\n\n        device = input_ids.device\n\n        next_beam_scores = torch.zeros((batch_size, self.group_size), dtype=next_scores.dtype, device=device)\n        next_beam_tokens = torch.zeros((batch_size, self.group_size), dtype=next_tokens.dtype, device=device)\n        next_beam_indices = torch.zeros((batch_size, self.group_size), dtype=next_indices.dtype, device=device)\n\n        if eos_token_id is not None and not isinstance(eos_token_id, torch.Tensor):\n            if isinstance(eos_token_id, int):\n                eos_token_id = [eos_token_id]\n            eos_token_id = torch.tensor(eos_token_id)\n\n        for batch_idx, beam_hyp in enumerate(self._beam_hyps):\n            if self._done[batch_idx]:\n                if self.num_beams < len(beam_hyp):\n                    raise ValueError(f\"Batch can only be done if at least {self.num_beams} beams have been generated\")\n                if eos_token_id is None or pad_token_id is None:\n                    raise ValueError(\"Generated beams >= num_beams -> eos_token_id and pad_token have to be defined\")\n                # pad the batch\n                next_beam_scores[batch_idx, :] = 0\n                next_beam_tokens[batch_idx, :] = pad_token_id\n                next_beam_indices[batch_idx, :] = 0\n                continue\n\n            # next tokens for this sentence.\n            beam_idx = 0\n            for beam_token_rank, (next_token, next_score, next_index) in enumerate(\n                zip(next_tokens[batch_idx], next_scores[batch_idx], next_indices[batch_idx])\n            ):\n                batch_beam_idx = batch_idx * self.group_size + next_index\n                # add to generated hypotheses if end of sentence\n                if (eos_token_id is not None) and (next_token.item() in eos_token_id):\n                    # if beam_token does not belong to top num_beams tokens, it should not be added\n                    is_beam_token_worse_than_top_num_beams = beam_token_rank >= self.group_size\n                    if is_beam_token_worse_than_top_num_beams:\n                        continue\n\n                    completes_constraint = self.check_completes_constraints(input_ids[batch_beam_idx].cpu().tolist())\n                    if completes_constraint:\n                        if beam_indices is not None:\n                            beam_index = beam_indices[batch_beam_idx]\n                            beam_index = beam_index + (batch_beam_idx,)\n                        else:\n                            beam_index = None\n\n                        beam_hyp.add(\n                            input_ids[batch_beam_idx].clone(),\n                            next_score.item(),\n                            beam_indices=beam_index,\n                            generated_len=cur_len - decoder_prompt_len,\n                        )\n                else:\n                    # add next predicted token since it is not eos_token\n                    next_beam_scores[batch_idx, beam_idx] = next_score\n                    next_beam_tokens[batch_idx, beam_idx] = next_token\n                    next_beam_indices[batch_idx, beam_idx] = batch_beam_idx\n                    beam_idx += 1\n\n                # once the beam for next step is full, don't add more tokens to it.\n                if beam_idx == self.group_size:\n                    break\n\n            new_scores, new_tokens, new_indices = self.step_sentence_constraint(\n                batch_idx,\n                input_ids,\n                scores_for_all_vocab,\n                next_beam_scores[batch_idx],\n                next_beam_tokens[batch_idx],\n                next_beam_indices[batch_idx],\n            )\n\n            next_beam_scores[batch_idx] = new_scores\n            next_beam_tokens[batch_idx] = new_tokens\n            next_beam_indices[batch_idx] = new_indices\n\n            if beam_idx < self.group_size:\n                raise ValueError(\n                    f\"At most {self.group_size} tokens in {next_tokens[batch_idx]} can be equal to `eos_token_id:\"\n                    f\" {eos_token_id}`. Make sure {next_tokens[batch_idx]} are corrected.\"\n                )\n\n            # Check if we are done so that we can save a pad step if all(done)\n            self._done[batch_idx] = self._done[batch_idx] or beam_hyp.is_done(\n                next_scores[batch_idx].max().item(), cur_len, decoder_prompt_len\n            )\n\n        return UserDict(\n            {\n                \"next_beam_scores\": next_beam_scores.view(-1),\n                \"next_beam_tokens\": next_beam_tokens.view(-1),\n                \"next_beam_indices\": next_beam_indices.view(-1),\n            }\n        )\n\n    def step_sentence_constraint(\n        self,\n        batch_idx: int,\n        input_ids: torch.LongTensor,\n        vocab_scores: torch.FloatTensor,\n        sent_beam_scores: torch.FloatTensor,\n        sent_beam_tokens: torch.LongTensor,\n        sent_beam_indices: torch.LongTensor,\n        push_progress: bool = False,\n    ):\n        # sent_beam_tokens are the next {num_beams} number of tokens that are under consideration for this beam\n        # (candidate next tokens)\n\n        # 1. Adding \"advance_tokens\"\n        #     using ConstraintStateList.advance(), we propose new tokens to be added into this \"candidate list\" that will\n        #     advance us in fulfilling the constraints.\n\n        # 2. Selecting best candidates such that we end up with highest probable candidates\n        #     that fulfill our constraints.\n\n        orig_len = sent_beam_indices.size(0)\n        device = sent_beam_indices.device\n\n        # initialize states\n        topk_contraint_states = self.make_constraint_states(orig_len)\n        advance_constraint_states = self.make_constraint_states(orig_len)\n\n        sidx, eidx = batch_idx * orig_len, (batch_idx + 1) * orig_len\n        this_batch_input_ids = input_ids[sidx:eidx]\n        this_batch_token_scores = vocab_scores[sidx:eidx]\n        full_hypotheses = torch.cat((input_ids[sent_beam_indices], sent_beam_tokens.unsqueeze(-1)), dim=-1)\n\n        # need to make new hypothesis that advance the constraints\n        track_new = {\n            \"new_seqs\": full_hypotheses.tolist(),\n            \"new_states\": [],\n            \"new_indices\": [],\n            \"new_tokens\": [],\n            \"new_scores\": [],\n        }\n        for seq_idx, pre_seq in enumerate(this_batch_input_ids):\n            # pre_seq = ith sequence generated before this step.\n\n            # input_ids -> (topk) generic beam search best model next tokens\n            #           -> (advance) constraints forcing the next token\n            # either way, we need to sort them into \"banks\" later, so store a \"ConstraintListState\" for all types of\n            # hypotheses.\n\n            topk_state = topk_contraint_states[seq_idx]\n            topk_state.reset(full_hypotheses[seq_idx].cpu().tolist())\n\n            advance_state = advance_constraint_states[seq_idx]\n            advance_state.reset(pre_seq.cpu().tolist())\n\n            if not advance_state.completed:\n                advance_tokens = torch.LongTensor(advance_state.advance()).to(device)\n                for advance_token in advance_tokens:\n                    # since adding each `advance_token` leads to a different hypothesis, create new state instance.\n                    new_state = advance_state.copy(stateful=True)\n                    new_state.add(advance_token.cpu().tolist())\n\n                    advance_seq = torch.cat((pre_seq, advance_token.unsqueeze(0)), -1).cpu().tolist()\n                    if advance_seq not in track_new[\"new_seqs\"]:\n                        # prevent duplicates, which are basically bound to happen in this process.\n                        track_new[\"new_seqs\"].append(advance_seq)\n                        track_new[\"new_indices\"].append(sidx + seq_idx)  # idx -> global idx across all the batches\n                        track_new[\"new_tokens\"].append(advance_token)\n                        track_new[\"new_scores\"].append(this_batch_token_scores[seq_idx].take(advance_token))\n                        track_new[\"new_states\"].append(new_state)\n            elif push_progress:\n                # Basically, `sent_beam_indices` often chooses very little among `input_ids` the generated sequences that\n                # actually fulfill our constraints. For example, let constraints == [\"loves pies\"] and\n\n                #     pre_seq_1 = \"The child loves pies and\" pre_seq_2 = \"The child plays in the playground and\"\n\n                # Without this step, if `sent_beam_indices` is something like [1,1], then\n                #     1. `pre_seq_1` won't be added to the list of (topk) hypothesis since it's not in the indices and\n                #     2.  it won't be added to the list of (advance) hypothesis since it's completed already. (this is\n                #         the else part of `if constraints_completed[seq_idx]`)\n                #     3. it ends up simply getting removed from consideration.\n\n                # #3 might be fine and actually desired, since it's likely that it's a low-probability output anyways,\n                # especially if it's not in the list of `sent_beam_indices`. But this often leads to lengthened beam\n                # search times, since completed sequences keep getting removed after all this effort for constrained\n                # generation.\n\n                # Here, we basically take `pre_seq_1` and to \"push\" it into the considered list of hypotheses, by simply\n                # appending the next likely token in the vocabulary and adding it to the list of hypotheses.\n\n                new_score, new_token = torch.max(this_batch_token_scores[seq_idx], 0)  # some next probable token\n                advance_seq = torch.cat((pre_seq, new_token.unsqueeze(0)), -1)\n\n                advance_state = advance_constraint_states[seq_idx]\n\n                advance_seq = advance_seq.cpu().tolist()\n\n                advance_state.reset(advance_seq)\n                if advance_seq not in track_new[\"new_seqs\"]:\n                    # but still don't want to have duplicates\n                    track_new[\"new_seqs\"].append(advance_seq)\n                    track_new[\"new_indices\"].append(seq_idx)\n                    track_new[\"new_tokens\"].append(new_token)\n                    track_new[\"new_scores\"].append(new_score)\n                    track_new[\"new_states\"].append(advance_state)\n\n        if len(track_new[\"new_indices\"]) > 0:\n            new_indices = torch.tensor(track_new[\"new_indices\"]).to(device)\n            new_tokens = torch.stack(track_new[\"new_tokens\"]).to(device)\n            new_scores = torch.stack(track_new[\"new_scores\"]).to(device)\n\n            all_states = topk_contraint_states + track_new[\"new_states\"]\n            all_tokens = torch.cat((sent_beam_tokens, new_tokens), -1)\n            all_scores = torch.cat((sent_beam_scores, new_scores), -1)\n            all_banks = torch.tensor([one.get_bank() for one in all_states]).to(device)\n\n            zipped = all_banks * 100 + all_scores\n            indices = zipped.sort(descending=True).indices\n            sorted_banks = all_banks[indices]\n\n            # Then we end up with {sorted among bank C}, {sorted among bank C-1}, ..., {sorted among bank 0}\n\n            counter = -1\n            cur_bank = sorted_banks[0]\n            increments = []\n            for bank in sorted_banks:\n                if bank == cur_bank:\n                    counter += 1\n                else:\n                    counter = 0\n                    cur_bank = bank\n                increments.append(counter)\n            rearrangers = torch.tensor(np.argsort(increments, kind=\"mergesort\"))\n\n            indices = indices[rearrangers][:orig_len]\n\n            sent_beam_scores = all_scores[indices]\n            sent_beam_tokens = all_tokens[indices]\n            sent_beam_indices = torch.cat((sent_beam_indices, new_indices))[indices]\n\n        return sent_beam_scores, sent_beam_tokens, sent_beam_indices\n\n    def finalize(\n        self,\n        input_ids: torch.LongTensor,\n        final_beam_scores: torch.FloatTensor,\n        final_beam_tokens: torch.LongTensor,\n        final_beam_indices: torch.LongTensor,\n        max_length: int,\n        pad_token_id: Optional[Union[int, torch.Tensor]] = None,\n        eos_token_id: Optional[Union[int, List[int], torch.Tensor]] = None,\n        beam_indices: Optional[torch.LongTensor] = None,\n        decoder_prompt_len: Optional[int] = 0,\n    ) -> Tuple[torch.LongTensor]:\n        batch_size = len(self._beam_hyps)\n\n        if eos_token_id is not None and not isinstance(eos_token_id, torch.Tensor):\n            if isinstance(eos_token_id, int):\n                eos_token_id = [eos_token_id]\n            eos_token_id = torch.tensor(eos_token_id)\n\n        # finalize all open beam hypotheses and add to generated hypotheses\n        for batch_idx, beam_hyp in enumerate(self._beam_hyps):\n            if self._done[batch_idx]:\n                continue\n\n            # all open beam hypotheses are added to the beam hypothesis\n            # beam hypothesis class automatically keeps the best beams\n\n            ids_collect = []\n            for beam_id in range(self.num_beams):\n                batch_beam_idx = batch_idx * self.num_beams + beam_id\n                final_score = final_beam_scores[batch_beam_idx].item()\n                final_tokens = input_ids[batch_beam_idx]\n\n                completes_constraint = self.check_completes_constraints(final_tokens.cpu().tolist())\n                if completes_constraint:\n                    beam_index = beam_indices[batch_beam_idx] if beam_indices is not None else None\n                    generated_len = final_tokens.shape[-1] - decoder_prompt_len\n                    beam_hyp.add(final_tokens, final_score, beam_indices=beam_index, generated_len=generated_len)\n                    ids_collect.append(beam_id)\n\n            # due to overly complex constraints or other factors, sometimes we can't gaurantee a successful\n            # generation. In these cases we simply return the highest scoring outputs.\n            if len(ids_collect) < self.num_beam_hyps_to_keep:\n                for beam_id in range(self.num_beams):\n                    if beam_id not in ids_collect:\n                        batch_beam_idx = batch_idx * self.num_beams + beam_id\n                        final_score = final_beam_scores[batch_beam_idx].item()\n                        final_tokens = input_ids[batch_beam_idx]\n                        generated_len = final_tokens.shape[-1] - decoder_prompt_len\n                        beam_hyp.add(final_tokens, final_score, generated_len=generated_len)\n                    if len(ids_collect) >= self.num_beam_hyps_to_keep:\n                        break\n\n        # select the best hypotheses\n        sent_lengths = input_ids.new(batch_size * self.num_beam_hyps_to_keep)\n        best = []\n        best_indices = []\n        best_scores = torch.zeros(batch_size * self.num_beam_hyps_to_keep, device=self.device, dtype=torch.float32)\n\n        # retrieve best hypotheses\n        for i, beam_hyp in enumerate(self._beam_hyps):\n            sorted_hyps = sorted(beam_hyp.beams, key=lambda x: x[0])\n            for j in range(self.num_beam_hyps_to_keep):\n                best_hyp_tuple = sorted_hyps.pop()\n                best_score = best_hyp_tuple[0]\n                best_hyp = best_hyp_tuple[1]\n                best_index = best_hyp_tuple[2]\n                sent_lengths[self.num_beam_hyps_to_keep * i + j] = len(best_hyp)\n\n                # append to lists\n                best.append(best_hyp)\n\n                # append indices to list\n                best_indices.append(best_index)\n\n                best_scores[i * self.num_beam_hyps_to_keep + j] = best_score\n\n        # prepare for adding eos\n        sent_lengths_max = sent_lengths.max().item() + 1\n\n        sent_max_len = min(sent_lengths_max, max_length) if max_length is not None else sent_lengths_max\n        decoded: torch.LongTensor = input_ids.new(batch_size * self.num_beam_hyps_to_keep, sent_max_len)\n\n        if len(best_indices) > 0 and best_indices[0] is not None:\n            indices: torch.LongTensor = input_ids.new(batch_size * self.num_beam_hyps_to_keep, sent_max_len)\n        else:\n            indices = None\n\n        # shorter batches are padded if needed\n        if sent_lengths.min().item() != sent_lengths.max().item():\n            if pad_token_id is None:\n                raise ValueError(\"`pad_token_id` has to be defined\")\n            decoded.fill_(pad_token_id)\n\n        if indices is not None:\n            indices.fill_(-1)\n\n        # fill with hypotheses and eos_token_id if the latter fits in\n        for i, (hypo, best_idx) in enumerate(zip(best, best_indices)):\n            decoded[i, : sent_lengths[i]] = hypo\n\n            if indices is not None:\n                indices[i, : len(best_idx)] = torch.tensor(best_idx)\n\n            if sent_lengths[i] < sent_max_len:\n                # inserting only the first eos_token_id\n                decoded[i, sent_lengths[i]] = eos_token_id[0]\n\n        return UserDict(\n            {\n                \"sequences\": decoded,\n                \"sequence_scores\": best_scores,\n                \"beam_indices\": indices,\n            }\n        )\n\n\nclass BeamHypotheses:\n    def __init__(self, num_beams: int, length_penalty: float, early_stopping: bool, max_length: Optional[int] = None):\n        \"\"\"\n        Initialize n-best list of hypotheses.\n        \"\"\"\n        self.length_penalty = length_penalty\n        self.early_stopping = early_stopping\n        self.max_length = max_length\n        self.num_beams = num_beams\n        self.beams = []\n        self.worst_score = 1e9\n\n        if not isinstance(self.early_stopping, bool) and self.max_length is None:\n            raise ValueError(\n                \"When `do_early_stopping` is set to a string, `max_length` must be defined. Ensure it is passed to the\"\n                \" BeamScorer class instance at initialization time.\"\n            )\n\n    def __len__(self):\n        \"\"\"\n        Number of hypotheses in the list.\n        \"\"\"\n        return len(self.beams)\n\n    def add(\n        self,\n        hyp: torch.LongTensor,\n        sum_logprobs: float,\n        beam_indices: Optional[torch.LongTensor] = None,\n        generated_len: Optional[int] = None,\n    ):\n        \"\"\"\n        Add a new hypothesis to the list.\n        \"\"\"\n        if generated_len is not None:\n            score = sum_logprobs / (generated_len**self.length_penalty)\n        # This 'else' case exists for retrocompatibility\n        else:\n            score = sum_logprobs / (hyp.shape[-1] ** self.length_penalty)\n\n        if len(self) < self.num_beams or score > self.worst_score:\n            self.beams.append((score, hyp, beam_indices))\n            if len(self) > self.num_beams:\n                sorted_next_scores = sorted([(s, idx) for idx, (s, _, _) in enumerate(self.beams)])\n                del self.beams[sorted_next_scores[0][1]]\n                self.worst_score = sorted_next_scores[1][0]\n            else:\n                self.worst_score = min(score, self.worst_score)\n\n    def is_done(self, best_sum_logprobs: float, cur_len: int, decoder_prompt_len: Optional[int] = 0) -> bool:\n        \"\"\"\n        If there are enough hypotheses and that none of the hypotheses being generated can become better than the worst\n        one in the heap, then we are done with this sentence.\n        \"\"\"\n\n        if len(self) < self.num_beams:\n            return False\n\n        # `True`: stop as soon as at least `num_beams` hypotheses are finished\n        if self.early_stopping is True:\n            return True\n        # `False`: heuristic -- compute best possible score from `cur_len`, even though it is not entirely accurate\n        #  when `length_penalty` is positive. See the discussion below for more details.\n        # https://github.com/huggingface/transformers/pull/20901#issuecomment-1369845565\n        elif self.early_stopping is False:\n            highest_attainable_score = best_sum_logprobs / (cur_len - decoder_prompt_len) ** self.length_penalty\n            ret = self.worst_score >= highest_attainable_score\n            return ret\n        # `\"never\"`: compute the best possible score, depending on the signal of `length_penalty`\n        else:\n            # `length_penalty` > 0.0 -> max denominator is obtaned from `max_length`, not from `cur_len` -> min\n            # abs(`highest_attainable_score`) is obtained -> `highest_attainable_score` is negative, hence we obtain\n            # its max this way\n            if self.length_penalty > 0.0:\n                if self.max_length <= decoder_prompt_len:\n                    raise ValueError(\"max_length is not larger than decoder prompt length\")\n                highest_attainable_score = (\n                    best_sum_logprobs / (self.max_length - decoder_prompt_len) ** self.length_penalty\n                )\n            # the opposite logic applies here (max `highest_attainable_score` from `cur_len`)\n            else:\n                highest_attainable_score = best_sum_logprobs / (cur_len - decoder_prompt_len) ** self.length_penalty\n            ret = self.worst_score >= highest_attainable_score\n            return ret\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/transformers_generation_utils.py",
    "content": "# coding=utf-8\n# Copyright 2020 The Google AI Language Team Authors, Facebook AI Research authors and The HuggingFace Inc. team.\n# Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport copy\nimport inspect\nimport warnings\nfrom dataclasses import dataclass\nfrom typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nimport torch.distributed as dist\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom transformers.cache_utils import (\n    Cache,\n    DynamicCache,\n    EncoderDecoderCache,\n    OffloadedCache,\n    QuantizedCache,\n    StaticCache,\n    SlidingWindowCache,\n    SinkCache,\n    HybridCache,\n    HybridChunkedCache,\n)\nfrom transformers.configuration_utils import PretrainedConfig\nfrom transformers.integrations.deepspeed import is_deepspeed_zero3_enabled\nfrom transformers.integrations.fsdp import is_fsdp_managed_module\nfrom transformers.modeling_outputs import CausalLMOutputWithPast, Seq2SeqLMOutput\nfrom transformers.pytorch_utils import isin_mps_friendly\nfrom transformers.tokenization_utils import ExtensionsTrie\nfrom transformers.utils import (\n    ModelOutput,\n    is_accelerate_available,\n    is_hqq_available,\n    is_optimum_quanto_available,\n    # is_quanto_available,\n    is_torchdynamo_compiling,\n    logging,\n)\nfrom transformers.generation.beam_constraints import DisjunctiveConstraint, PhrasalConstraint\nfrom transformers.generation.beam_search import BeamScorer, BeamSearchScorer, ConstrainedBeamSearchScorer\nfrom transformers.generation.candidate_generator import (\n    AssistedCandidateGenerator,\n    AssistedCandidateGeneratorDifferentTokenizers,\n    CandidateGenerator,\n    PromptLookupCandidateGenerator,\n    _prepare_attention_mask,\n    _prepare_token_type_ids,\n)\nfrom transformers.generation.configuration_utils import (\n    GenerationConfig,\n    GenerationMode,\n)\nfrom transformers.generation.logits_process import (\n    EncoderNoRepeatNGramLogitsProcessor,\n    EncoderRepetitionPenaltyLogitsProcessor,\n    EpsilonLogitsWarper,\n    EtaLogitsWarper,\n    ExponentialDecayLengthPenalty,\n    ForcedBOSTokenLogitsProcessor,\n    ForcedEOSTokenLogitsProcessor,\n    HammingDiversityLogitsProcessor,\n    InfNanRemoveLogitsProcessor,\n    LogitNormalization,\n    LogitsProcessorList,\n    MinLengthLogitsProcessor,\n    MinNewTokensLengthLogitsProcessor,\n    MinPLogitsWarper,\n    NoBadWordsLogitsProcessor,\n    NoRepeatNGramLogitsProcessor,\n    PrefixConstrainedLogitsProcessor,\n    RepetitionPenaltyLogitsProcessor,\n    SequenceBiasLogitsProcessor,\n    SuppressTokensAtBeginLogitsProcessor,\n    SuppressTokensLogitsProcessor,\n    TemperatureLogitsWarper,\n    TopKLogitsWarper,\n    TopPLogitsWarper,\n    TypicalLogitsWarper,\n    UnbatchedClassifierFreeGuidanceLogitsProcessor,\n)\nfrom transformers.generation.stopping_criteria import (\n    ConfidenceCriteria,\n    EosTokenCriteria,\n    MaxLengthCriteria,\n    MaxTimeCriteria,\n    StoppingCriteria,\n    StoppingCriteriaList,\n    StopStringCriteria,\n)\n\n\nif TYPE_CHECKING:\n    from transformers.modeling_utils import PreTrainedModel\n    from transformers.tokenization_utils_base import PreTrainedTokenizerBase\n    from transformers.generation.streamers import BaseStreamer\n\nlogger = logging.get_logger(__name__)\n\n# Compatibility with transformers 4.57.1+\n# These mappings are needed for the removed constants\nNEED_SETUP_CACHE_CLASSES_MAPPING = {\n    \"auto\": Cache,\n    \"dynamic\": DynamicCache,\n    \"static\": StaticCache,\n    \"offloaded\": OffloadedCache,\n    \"sliding_window\": SlidingWindowCache,\n    \"sink\": SinkCache,\n    \"hybrid\": HybridCache,\n    \"hybrid_chunked\": HybridChunkedCache,\n}\n\n# Mapping for quantized cache backends\nQUANT_BACKEND_CLASSES_MAPPING = {\n    \"quanto\": QuantizedCache,\n    \"hqq\": QuantizedCache,\n}\n\n# Compatibility class for removed QuantizedCacheConfig\nclass QuantizedCacheConfig:\n    def __init__(self, backend: str = \"quanto\", nbits: int = 4,\n                 axis_key: int = 0, axis_value: int = 0,\n                 q_group_size: int = 64, residual_length: int = 128):\n        self.backend = backend\n        self.nbits = nbits\n        self.axis_key = axis_key\n        self.axis_value = axis_value\n        self.q_group_size = q_group_size\n        self.residual_length = residual_length\n\n# Compatibility function for removed _crop_past_key_values\ndef _crop_past_key_values(model, past_key_values, max_length):\n    \"\"\"\n    Crop past key values to a maximum length.\n    This is a compatibility function for the removed _crop_past_key_values.\n    \"\"\"\n    if past_key_values is None:\n        return past_key_values\n\n    # If past_key_values is a Cache object\n    if hasattr(past_key_values, 'crop'):\n        return past_key_values.crop(max_length)\n\n    # If it's a tuple of tensors (legacy format)\n    if isinstance(past_key_values, tuple):\n        cropped_past_key_values = []\n        for layer_past_key_values in past_key_values:\n            if isinstance(layer_past_key_values, tuple) and len(layer_past_key_values) == 2:\n                # Standard format: (key, value)\n                key, value = layer_past_key_values\n                if key.shape[-2] > max_length:\n                    key = key[..., :max_length, :]\n                if value.shape[-2] > max_length:\n                    value = value[..., :max_length, :]\n                cropped_past_key_values.append((key, value))\n            else:\n                # Other formats, just append as is\n                cropped_past_key_values.append(layer_past_key_values)\n        return tuple(cropped_past_key_values)\n\n    # For other cache types, return as is\n    return past_key_values\n\nif is_accelerate_available():\n    from accelerate.hooks import AlignDevicesHook, add_hook_to_module\n\n\n@dataclass\nclass GenerateDecoderOnlyOutput(ModelOutput):\n    \"\"\"\n    Outputs of decoder-only generation models, when using non-beam methods.\n\n    Args:\n        sequences (`torch.LongTensor` of shape `(batch_size, sequence_length)`):\n            The generated sequences. The second dimension (sequence_length) is either equal to `max_length` or shorter\n            if all batches finished early due to the `eos_token_id`.\n        scores (`tuple(torch.FloatTensor)` *optional*, returned when `output_scores=True`):\n            Processed prediction scores of the language modeling head (scores for each vocabulary token before SoftMax)\n            at each generation step. Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for\n            each generated token), with each tensor of shape `(batch_size, config.vocab_size)`.\n        logits (`tuple(torch.FloatTensor)` *optional*, returned when `output_logits=True`):\n            Unprocessed prediction scores of the language modeling head (scores for each vocabulary token before SoftMax)\n            at each generation step. Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for\n            each generated token), with each tensor of shape `(batch_size, config.vocab_size)`.\n        attentions (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_attentions=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size, num_heads, generated_length, sequence_length)`.\n        hidden_states (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_hidden_states=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size, generated_length, hidden_size)`.\n        past_key_values (`tuple(tuple(torch.FloatTensor)))`, *optional*, returned when `use_cache=True`):\n            Returns the model cache, used to speed up decoding. Different models have a different cache format, check\n            the model's documentation. Usually, a [`~cache_utils.Cache`] instance.\n    \"\"\"\n\n    sequences: torch.LongTensor = None\n    scores: Optional[Tuple[torch.FloatTensor]] = None\n    logits: Optional[Tuple[torch.FloatTensor]] = None\n    attentions: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    hidden_states: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    past_key_values: Optional[Tuple[Tuple[Tuple[torch.FloatTensor]]]] = None\n\n\n@dataclass\nclass GenerateEncoderDecoderOutput(ModelOutput):\n    \"\"\"\n    Outputs of encoder-decoder generation models, when using non-beam methods.\n\n    Args:\n        sequences (`torch.LongTensor` of shape `(batch_size*num_return_sequences, sequence_length)`):\n            The generated sequences. The second dimension (sequence_length) is either equal to `max_length` or shorter\n            if all batches finished early due to the `eos_token_id`.\n        scores (`tuple(torch.FloatTensor)` *optional*, returned when `output_scores=True`):\n            Processed prediction scores of the language modeling head (scores for each vocabulary token before SoftMax)\n            at each generation step. Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for\n            each generated token), with each tensor of shape `(batch_size, config.vocab_size)`.\n        logits (`tuple(torch.FloatTensor)` *optional*, returned when `output_logits=True`):\n            Unprocessed prediction scores of the language modeling head (scores for each vocabulary token before SoftMax)\n            at each generation step. Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for\n            each generated token), with each tensor of shape `(batch_size, config.vocab_size)`.\n        encoder_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True`):\n            Tuple of `torch.FloatTensor` (one for each layer of the decoder) of shape `(batch_size, num_heads,\n            sequence_length, sequence_length)`.\n        encoder_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True`):\n            Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each layer) of\n            shape `(batch_size, sequence_length, hidden_size)`.\n        decoder_attentions (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_attentions=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size, num_heads, generated_length, sequence_length)`.\n        cross_attentions (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_attentions=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size, num_heads, generated_length, sequence_length)`.\n        decoder_hidden_states (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_hidden_states=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size, generated_length, hidden_size)`.\n        past_key_values (`tuple(tuple(torch.FloatTensor)))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):\n            Returns the model cache, used to speed up decoding. Different models have a different cache format, check\n            the model's documentation. Usually, a [`~cache_utils.Cache`] instance.\n    \"\"\"\n\n    sequences: torch.LongTensor = None\n    scores: Optional[Tuple[torch.FloatTensor]] = None\n    logits: Optional[Tuple[torch.FloatTensor]] = None\n    encoder_attentions: Optional[Tuple[torch.FloatTensor]] = None\n    encoder_hidden_states: Optional[Tuple[torch.FloatTensor]] = None\n    decoder_attentions: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    cross_attentions: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    decoder_hidden_states: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    past_key_values: Optional[Tuple[Tuple[Tuple[torch.FloatTensor]]]] = None\n\n\n@dataclass\nclass GenerateBeamDecoderOnlyOutput(ModelOutput):\n    \"\"\"\n    Outputs of decoder-only generation models, when using beam methods.\n\n    Args:\n        sequences (`torch.LongTensor` of shape `(batch_size*num_return_sequences, sequence_length)`):\n            The generated sequences. The second dimension (sequence_length) is either equal to `max_length` or shorter\n            if all batches finished early due to the `eos_token_id`.\n        sequences_scores (`torch.FloatTensor` of shape `(batch_size*num_return_sequences)`, *optional*, returned when `output_scores=True`):\n            Final beam scores of the generated `sequences`.\n        scores (`tuple(torch.FloatTensor)` *optional*, returned when `output_scores=True`):\n            Beam transition scores for each vocabulary token at each generation step. Beam transition scores consisting\n            of log probabilities of tokens conditioned on log softmax of previously generated tokens in this beam.\n            Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for each generated token),\n            with each tensor of shape `(batch_size*num_beams, config.vocab_size)`.\n        logits (`tuple(torch.FloatTensor)` *optional*, returned when `output_logits=True`):\n            Unprocessed prediction scores of the language modeling head (scores for each vocabulary token before SoftMax)\n            at each generation step. Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for\n            each generated token), with each tensor of shape `(batch_size, config.vocab_size)`.\n        beam_indices (`torch.LongTensor`, *optional*, returned when `output_scores=True`):\n            Beam indices of generated token id at each generation step. `torch.LongTensor` of shape\n            `(batch_size*num_return_sequences, sequence_length)`.\n        attentions (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_attentions=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size*num_beams, num_heads, generated_length, sequence_length)`.\n        hidden_states (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_hidden_states=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size*num_beams*num_return_sequences, generated_length, hidden_size)`.\n        past_key_values (`tuple(tuple(torch.FloatTensor)))`, *optional*, returned when `use_cache=True`):\n            Returns the model cache, used to speed up decoding. Different models have a different cache format, check\n            the model's documentation. Usually, a [`~cache_utils.Cache`] instance.\n    \"\"\"\n\n    sequences: torch.LongTensor = None\n    sequences_scores: Optional[torch.FloatTensor] = None\n    scores: Optional[Tuple[torch.FloatTensor]] = None\n    logits: Optional[Tuple[torch.FloatTensor]] = None\n    beam_indices: Optional[torch.LongTensor] = None\n    attentions: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    hidden_states: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    past_key_values: Optional[Tuple[Tuple[Tuple[torch.FloatTensor]]]] = None\n\n\n@dataclass\nclass GenerateBeamEncoderDecoderOutput(ModelOutput):\n    \"\"\"\n    Outputs of encoder-decoder generation models, when using beam methods.\n\n    Args:\n        sequences (`torch.LongTensor` of shape `(batch_size*num_return_sequences, sequence_length)`):\n            The generated sequences. The second dimension (sequence_length) is either equal to `max_length` or shorter\n            if all batches finished early due to the `eos_token_id`.\n        sequences_scores (`torch.FloatTensor` of shape `(batch_size*num_return_sequences)`, *optional*, returned when `output_scores=True`):\n            Final beam scores of the generated `sequences`.\n        scores (`tuple(torch.FloatTensor)` *optional*, returned when `output_scores=True`):\n            Beam transition scores for each vocabulary token at each generation step. Beam transition scores consisting\n            of log probabilities of tokens conditioned on log softmax of previously generated tokens in this beam.\n            Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for each generated token),\n            with each tensor of shape `(batch_size*num_beams, config.vocab_size)`.\n        logits (`tuple(torch.FloatTensor)` *optional*, returned when `output_logits=True`):\n            Unprocessed prediction scores of the language modeling head (scores for each vocabulary token before SoftMax)\n            at each generation step. Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for\n            each generated token), with each tensor of shape `(batch_size, config.vocab_size)`.\n        beam_indices (`torch.LongTensor`, *optional*, returned when `output_scores=True`):\n            Beam indices of generated token id at each generation step. `torch.LongTensor` of shape\n            `(batch_size*num_return_sequences, sequence_length)`.\n        encoder_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True`):\n            Tuple of `torch.FloatTensor` (one for each layer of the decoder) of shape `(batch_size, num_heads,\n            sequence_length, sequence_length)`.\n        encoder_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True`):\n            Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each layer) of\n            shape `(batch_size*num_beams*num_return_sequences, sequence_length, hidden_size)`.\n        decoder_attentions (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_attentions=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size*num_beams*num_return_sequences, num_heads, generated_length,\n            sequence_length)`.\n        cross_attentions (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_attentions=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size, num_heads, generated_length, sequence_length)`.\n        decoder_hidden_states (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_hidden_states=True`):\n            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of\n            `torch.FloatTensor` of shape `(batch_size*num_beams*num_return_sequences, generated_length, hidden_size)`.\n        past_key_values (`tuple(tuple(torch.FloatTensor)))`, *optional*, returned when `use_cache=True`):\n            Returns the model cache, used to speed up decoding. Different models have a different cache format, check\n            the model's documentation. Usually, a [`~cache_utils.Cache`] instance.\n    \"\"\"\n\n    sequences: torch.LongTensor = None\n    sequences_scores: Optional[torch.FloatTensor] = None\n    scores: Optional[Tuple[torch.FloatTensor]] = None\n    logits: Optional[Tuple[torch.FloatTensor]] = None\n    beam_indices: Optional[torch.LongTensor] = None\n    encoder_attentions: Optional[Tuple[torch.FloatTensor]] = None\n    encoder_hidden_states: Optional[Tuple[torch.FloatTensor]] = None\n    decoder_attentions: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    cross_attentions: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    decoder_hidden_states: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    past_key_values: Optional[Tuple[Tuple[Tuple[torch.FloatTensor]]]] = None\n\n\n# TODO (joao): remove the equivalent classes and typing shortcuts below in v5\n# Equivalent classes (kept for retrocompatibility purposes)\nGreedySearchDecoderOnlyOutput = GenerateDecoderOnlyOutput\nContrastiveSearchDecoderOnlyOutput = GenerateDecoderOnlyOutput\nSampleDecoderOnlyOutput = GenerateDecoderOnlyOutput\n\nContrastiveSearchEncoderDecoderOutput = GenerateEncoderDecoderOutput\nGreedySearchEncoderDecoderOutput = GenerateEncoderDecoderOutput\nSampleEncoderDecoderOutput = GenerateEncoderDecoderOutput\n\nBeamSearchDecoderOnlyOutput = GenerateBeamDecoderOnlyOutput\nBeamSampleDecoderOnlyOutput = GenerateBeamDecoderOnlyOutput\n\nBeamSearchEncoderDecoderOutput = GenerateBeamEncoderDecoderOutput\nBeamSampleEncoderDecoderOutput = GenerateBeamEncoderDecoderOutput\n\nGreedySearchOutput = Union[GreedySearchEncoderDecoderOutput, GreedySearchDecoderOnlyOutput]\nSampleOutput = Union[SampleEncoderDecoderOutput, SampleDecoderOnlyOutput]\nBeamSearchOutput = Union[BeamSearchEncoderDecoderOutput, BeamSearchDecoderOnlyOutput]\nBeamSampleOutput = Union[BeamSampleEncoderDecoderOutput, BeamSampleDecoderOnlyOutput]\nContrastiveSearchOutput = Union[ContrastiveSearchEncoderDecoderOutput, ContrastiveSearchDecoderOnlyOutput]\n\n# Typing shortcuts\nGenerateNonBeamOutput = Union[GenerateDecoderOnlyOutput, GenerateEncoderDecoderOutput]\nGenerateBeamOutput = Union[GenerateBeamDecoderOnlyOutput, GenerateBeamEncoderDecoderOutput]\nGenerateOutput = Union[GenerateNonBeamOutput, GenerateBeamOutput]\n\n\nclass GenerationMixin:\n    \"\"\"\n    A class containing all functions for auto-regressive text generation, to be used as a mixin in [`PreTrainedModel`].\n\n    The class exposes [`~generation.GenerationMixin.generate`], which can be used for:\n        - *greedy decoding* if `num_beams=1` and `do_sample=False`\n        - *contrastive search* if `penalty_alpha>0` and `top_k>1`\n        - *multinomial sampling* if `num_beams=1` and `do_sample=True`\n        - *beam-search decoding* if `num_beams>1` and `do_sample=False`\n        - *beam-search multinomial sampling* if `num_beams>1` and `do_sample=True`\n        - *diverse beam-search decoding* if `num_beams>1` and `num_beam_groups>1`\n        - *constrained beam-search decoding* if `constraints!=None` or `force_words_ids!=None`\n        - *assisted decoding* if `assistant_model` or `prompt_lookup_num_tokens` is passed to `.generate()`\n\n    To learn more about decoding strategies refer to the [text generation strategies guide](../generation_strategies).\n    \"\"\"\n\n    def prepare_inputs_for_generation(\n        self,\n        input_ids: torch.LongTensor,\n        past_key_values: Optional[Cache] = None,\n        attention_mask: Optional[torch.LongTensor] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        cache_position: Optional[torch.LongTensor] = None,\n        **kwargs,\n    ):\n        \"\"\"\n        Prepare the model inputs for generation. In includes operations like computing the 4D attention mask or\n        slicing inputs given the existing cache.\n\n        See the forward pass in the model documentation for expected arguments (different models might have different\n        requirements for e.g. `past_key_values`). This function should work as is for most LLMs.\n        \"\"\"\n\n        # 1. Handle BC:\n        model_inputs = {}\n        # - some models don't have `Cache` support (which implies they don't expect `cache_position` in `forward`)\n        if self._supports_cache_class:\n            model_inputs[\"cache_position\"] = cache_position\n        # - `cache_position` was not a mandatory input in `prepare_inputs_for_generation` for those models, and this\n        #   function may be called outside of `generate`. Handle most use cases by creating `cache_position` on the fly\n        #   (this alternative is not as robust as calling `generate` and letting it create `cache_position`)\n        elif cache_position is None:\n            past_length = past_key_values[0][0].shape[2] if past_key_values is not None else 0\n            cache_position = torch.arange(past_length, input_ids.shape[1], dtype=torch.long, device=input_ids.device)\n\n        # 2. Generic cache-dependent input preparation\n        # If we have cache: let's slice `input_ids` through `cache_position`, to keep only the unprocessed tokens\n        # Exception 1: when passing input_embeds, input_ids may be missing entries\n        # Exception 2: some generation methods do special slicing of input_ids, so we don't need to do it here\n        # Exception 3: with synced GPUs cache_position may go out of bounds, but we only want dummy token in that case\n        if past_key_values is not None:\n            model_inputs[\"past_key_values\"] = past_key_values\n            if inputs_embeds is not None or cache_position[-1] >= input_ids.shape[1]:  # Exception 1 or Exception 3\n                input_ids = input_ids[:, -cache_position.shape[0] :]\n            elif input_ids.shape[1] != cache_position.shape[0]:  # Default case (the \"else\", a no op, is Exception 2)\n                input_ids = input_ids[:, cache_position]\n\n        # 3. Prepare base model inputs\n        input_ids_key = \"decoder_input_ids\" if self.config.is_encoder_decoder else \"input_ids\"\n        # if `inputs_embeds` are passed, we only want to use them in the 1st generation step\n        if not self.config.is_encoder_decoder:\n            if inputs_embeds is not None and cache_position[0] == 0:\n                model_inputs[input_ids_key] = None\n                model_inputs[\"inputs_embeds\"] = inputs_embeds\n            else:\n                # `clone` calls in this function ensure a consistent stride. See #32227\n                model_inputs[input_ids_key] = input_ids.clone(memory_format=torch.contiguous_format)\n                model_inputs[\"inputs_embeds\"] = None\n        else:\n            model_inputs[input_ids_key] = input_ids.clone(memory_format=torch.contiguous_format)\n\n        # 4. Create missing `position_ids` on the fly\n        if (\n            attention_mask is not None\n            and kwargs.get(\"position_ids\") is None\n            and \"position_ids\" in set(inspect.signature(self.forward).parameters.keys())\n        ):\n            position_ids = attention_mask.long().cumsum(-1) - 1\n            position_ids.masked_fill_(attention_mask == 0, 1)\n            kwargs[\"position_ids\"] = position_ids  # placed in kwargs for further processing (see below)\n\n        # 5. Slice model inputs if it's an input that should have the same length as `input_ids`\n        for model_input_name in [\"position_ids\", \"token_type_ids\"]:\n            model_input = kwargs.get(model_input_name)\n            if model_input is not None:\n                if past_key_values:\n                    model_input = model_input[:, -input_ids.shape[1] :]\n                    model_input = model_input.clone(memory_format=torch.contiguous_format)\n                model_inputs[model_input_name] = model_input\n\n        # 6. Create 4D attention mask is we are using a `StaticCache` (important for performant compiled forward pass)\n        if isinstance(past_key_values, StaticCache) and attention_mask.ndim == 2:\n            if model_inputs[\"inputs_embeds\"] is not None:\n                batch_size, sequence_length, _ = model_inputs[\"inputs_embeds\"].shape\n                device = model_inputs[\"inputs_embeds\"].device\n            else:\n                batch_size, sequence_length = model_inputs[input_ids_key].shape\n                device = model_inputs[input_ids_key].device\n\n            # Create the causal mask with fixed shape in advance, to reduce recompilations. If the function to create\n            # the 4D causal mask exists, it should be present in the base model (XXXModel class).\n            base_model = getattr(self, self.base_model_prefix, None)\n            if base_model is None:\n                causal_mask_creation_function = getattr(\n                    self, \"_prepare_4d_causal_attention_mask_with_cache_position\", None\n                )\n            else:\n                causal_mask_creation_function = getattr(\n                    base_model, \"_prepare_4d_causal_attention_mask_with_cache_position\", None\n                )\n            if causal_mask_creation_function is None:\n                logger.warning_once(\n                    f\"{self.__class__.__name__} has no `_prepare_4d_causal_attention_mask_with_cache_position` method \"\n                    \"defined in its base modeling class. Compiled forward passes will be sub-optimal. If you're \"\n                    \"writing code, see Llama for an example implementation. If you're a user, please report this \"\n                    \"issue on GitHub.\"\n                )\n            else:\n                attention_mask = causal_mask_creation_function(\n                    attention_mask,\n                    sequence_length=sequence_length,\n                    target_length=past_key_values.get_max_cache_shape(),\n                    dtype=self.dtype,\n                    device=device,\n                    cache_position=cache_position,\n                    batch_size=batch_size,\n                    config=self.config,\n                    past_key_values=past_key_values,\n                )\n        if attention_mask is not None:\n            model_inputs[\"attention_mask\"] = attention_mask\n\n        # 7. Forward ALL kwargs that are uninitialized (e.g. `use_cache`).\n        for key, value in kwargs.items():\n            if key not in model_inputs:\n                model_inputs[key] = value\n\n        # 8. Remove unexpected `generate` inputs (TODO @joao: fix trainer and examples)\n        model_inputs.pop(\"labels\", None)\n        return model_inputs\n\n    def _prepare_model_inputs(\n        self,\n        inputs: Optional[torch.Tensor] = None,\n        bos_token_id: Optional[torch.Tensor] = None,\n        model_kwargs: Optional[Dict[str, torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, Optional[str], Dict[str, torch.Tensor]]:\n        \"\"\"\n        This function extracts the model-specific `inputs` for generation.\n        \"\"\"\n        # 1. retrieve all kwargs that are non-None or non-model input related.\n        # some encoder-decoder models have different names for model and encoder\n        if (\n            self.config.is_encoder_decoder\n            and hasattr(self, \"encoder\")\n            and self.encoder.main_input_name != self.main_input_name\n        ):\n            input_name = self.encoder.main_input_name\n        else:\n            input_name = self.main_input_name\n\n        model_kwargs = {k: v for k, v in model_kwargs.items() if v is not None or k != input_name}\n\n        # 2. check whether model_input_name is passed as kwarg\n        # if yes and `inputs` is None use kwarg inputs\n        inputs_kwarg = model_kwargs.pop(input_name, None)\n        if inputs_kwarg is not None and inputs is not None:\n            raise ValueError(\n                f\"`inputs`: {inputs}` were passed alongside {input_name} which is not allowed. \"\n                f\"Make sure to either pass {inputs} or {input_name}=...\"\n            )\n        elif inputs_kwarg is not None:\n            inputs = inputs_kwarg\n\n        # 3. In the presence of `inputs_embeds` for text models:\n        # - decoder-only models should complain if the user attempts to pass `inputs_embeds`, but the model\n        # doesn't have its forwarding implemented. `inputs_embeds` is kept in `model_kwargs` and can coexist with\n        # input_ids (`inputs_embeds` will be used in the 1st generation step, as opposed to `input_ids`)\n        # - encoder-decoder models should complain if the user attempts to pass `inputs_embeds` and `input_ids`, and\n        # pull the former to inputs. It will be used in place of `input_ids` to get the encoder hidden states.\n        if input_name == \"input_ids\" and \"inputs_embeds\" in model_kwargs:\n            if not self.config.is_encoder_decoder:\n                has_inputs_embeds_forwarding = \"inputs_embeds\" in set(\n                    inspect.signature(self.prepare_inputs_for_generation).parameters.keys()\n                )\n                if not has_inputs_embeds_forwarding:\n                    raise ValueError(\n                        f\"You passed `inputs_embeds` to `.generate()`, but the model class {self.__class__.__name__} \"\n                        \"doesn't have its forwarding implemented. See the GPT2 implementation for an example \"\n                        \"(https://github.com/huggingface/transformers/pull/21405), and feel free to open a PR with it!\"\n                    )\n                # In this case, `input_ids` is moved to the `model_kwargs`, so a few automations (like the creation of\n                # the attention mask) can rely on the actual model input.\n                model_kwargs[\"input_ids\"] = self._maybe_initialize_input_ids_for_generation(\n                    inputs, bos_token_id, model_kwargs=model_kwargs\n                )\n            else:\n                if inputs is not None:\n                    raise ValueError(\"You passed `inputs_embeds` and `input_ids` to `.generate()`. Please pick one.\")\n            inputs, input_name = model_kwargs[\"inputs_embeds\"], \"inputs_embeds\"\n\n        # 4. if `inputs` is still None, try to create `input_ids` from BOS token\n        inputs = self._maybe_initialize_input_ids_for_generation(inputs, bos_token_id, model_kwargs)\n        return inputs, input_name, model_kwargs\n\n    def _maybe_initialize_input_ids_for_generation(\n        self,\n        inputs: Optional[torch.Tensor] = None,\n        bos_token_id: Optional[torch.Tensor] = None,\n        model_kwargs: Optional[Dict[str, torch.Tensor]] = None,\n    ) -> torch.LongTensor:\n        \"\"\"Initializes input ids for generation, if necessary.\"\"\"\n        if inputs is not None:\n            return inputs\n\n        encoder_outputs = model_kwargs.get(\"encoder_outputs\")\n        if self.config.is_encoder_decoder and encoder_outputs is not None:\n            # make dummy input_ids with value -100, as a sanity check ensuring that they won't be used for encoding\n            shape = encoder_outputs.last_hidden_state.size()[:-1]\n            return torch.ones(shape, dtype=torch.long, device=self.device) * -100\n\n        # If there is some tensor in `model_kwargs`, we can infer the batch size from it. This is helpful with\n        # soft-prompting or in multimodal implementations built on top of decoder-only language models.\n        batch_size = 1\n        for value in model_kwargs.values():\n            if isinstance(value, torch.Tensor):\n                batch_size = value.shape[0]\n                break\n\n        if \"inputs_embeds\" in model_kwargs:\n            return torch.ones((batch_size, 0), dtype=torch.long, device=self.device)\n\n        if bos_token_id is None:\n            raise ValueError(\"`bos_token_id` has to be defined when no `input_ids` are provided.\")\n\n        return torch.ones((batch_size, 1), dtype=torch.long, device=self.device) * bos_token_id\n\n    def _prepare_attention_mask_for_generation(\n        self,\n        inputs: torch.Tensor,\n        pad_token_id: Optional[torch.Tensor],\n        eos_token_id: Optional[torch.Tensor],\n    ) -> torch.LongTensor:\n        # No information for attention mask inference -> return default attention mask\n        default_attention_mask = torch.ones(inputs.shape[:2], dtype=torch.long, device=inputs.device)\n        if pad_token_id is None:\n            return default_attention_mask\n\n        is_input_ids = len(inputs.shape) == 2 and inputs.dtype in [torch.int, torch.long]\n        if not is_input_ids:\n            return default_attention_mask\n\n        is_pad_token_in_inputs = (pad_token_id is not None) and (\n            isin_mps_friendly(elements=inputs, test_elements=pad_token_id).any()\n        )\n        is_pad_token_not_equal_to_eos_token_id = (eos_token_id is None) or ~(\n            isin_mps_friendly(elements=eos_token_id, test_elements=pad_token_id).any()\n        )\n        can_infer_attention_mask = is_pad_token_in_inputs * is_pad_token_not_equal_to_eos_token_id\n        attention_mask_from_padding = inputs.ne(pad_token_id).long()\n\n        attention_mask = (\n            attention_mask_from_padding * can_infer_attention_mask + default_attention_mask * ~can_infer_attention_mask\n        )\n        return attention_mask\n\n    def _prepare_encoder_decoder_kwargs_for_generation(\n        self,\n        inputs_tensor: torch.Tensor,\n        model_kwargs,\n        model_input_name: Optional[str],\n        generation_config: GenerationConfig,\n    ) -> Dict[str, Any]:\n        # 1. get encoder\n        encoder = self.get_encoder()\n        # Compatibility with Accelerate big model inference: we need the encoder to outputs stuff on the same device\n        # as the inputs.\n        if hasattr(self, \"hf_device_map\"):\n            if hasattr(encoder, \"_hf_hook\"):\n                encoder._hf_hook.io_same_device = True\n            else:\n                add_hook_to_module(encoder, AlignDevicesHook(io_same_device=True))\n\n        # 2. Prepare encoder args and encoder kwargs from model kwargs and generation config.\n        irrelevant_prefix = [\"decoder_\", \"cross_attn\", \"use_cache\"]\n        encoder_kwargs = {\n            argument: value\n            for argument, value in model_kwargs.items()\n            if not any(argument.startswith(p) for p in irrelevant_prefix)\n        }\n        encoder_signature = set(inspect.signature(encoder.forward).parameters)\n        encoder_accepts_wildcard = \"kwargs\" in encoder_signature or \"model_kwargs\" in encoder_signature\n        if not encoder_accepts_wildcard:\n            encoder_kwargs = {\n                argument: value for argument, value in encoder_kwargs.items() if argument in encoder_signature\n            }\n        encoder_kwargs[\"output_attentions\"] = generation_config.output_attentions\n        encoder_kwargs[\"output_hidden_states\"] = generation_config.output_hidden_states\n\n        # 3. make sure that encoder returns `ModelOutput`\n        model_input_name = model_input_name if model_input_name is not None else self.main_input_name\n        encoder_kwargs[\"return_dict\"] = True\n        encoder_kwargs[model_input_name] = inputs_tensor\n        model_kwargs[\"encoder_outputs\"]: ModelOutput = encoder(**encoder_kwargs)  # type: ignore\n\n        return model_kwargs\n\n    def _prepare_decoder_input_ids_for_generation(\n        self,\n        batch_size: int,\n        model_input_name: str,\n        model_kwargs: Dict[str, torch.Tensor],\n        decoder_start_token_id: torch.Tensor,\n        device: torch.device = None,\n    ) -> Tuple[torch.LongTensor, Dict[str, torch.Tensor]]:\n        \"\"\"Prepares `decoder_input_ids` for generation with encoder-decoder models\"\"\"\n        # 1. Check whether the user has defined `decoder_input_ids` manually. To facilitate in terms of input naming,\n        # we also allow the user to pass it under `input_ids`, if the encoder does not use it as the main input.\n        if model_kwargs is not None and \"decoder_input_ids\" in model_kwargs:\n            decoder_input_ids = model_kwargs.pop(\"decoder_input_ids\")\n        elif \"input_ids\" in model_kwargs and model_input_name != \"input_ids\":\n            decoder_input_ids = model_kwargs.pop(\"input_ids\")\n        else:\n            decoder_input_ids = None\n\n        # 2. `decoder_start_token_id` must have shape (batch_size, 1)\n        if device is None:\n            device = self.device\n        if decoder_start_token_id.ndim == 1:\n            if decoder_start_token_id.shape[0] != batch_size:\n                raise ValueError(\n                    f\"`decoder_start_token_id` expected to have length {batch_size} but got {decoder_start_token_id.shape[0]}\"\n                )\n            decoder_start_token_id = decoder_start_token_id.view(-1, 1)\n        else:\n            decoder_start_token_id = (\n                torch.ones((batch_size, 1), dtype=torch.long, device=device) * decoder_start_token_id\n            )\n\n        # 3. Encoder-decoder models expect the `decoder_input_ids` to start with a special token. Let's ensure that.\n        # no user input -> use decoder_start_token_id as decoder_input_ids\n        if decoder_input_ids is None:\n            decoder_input_ids = decoder_start_token_id\n        # exception: Donut checkpoints have task-specific decoder starts and don't expect a BOS token. Note that the\n        # original checkpoints can't be detected through `self.__class__.__name__.lower()`, needing custom logic.\n        # See: https://github.com/huggingface/transformers/pull/31470\n        elif \"donut\" in self.__class__.__name__.lower() or (\n            self.config.model_type == \"vision-encoder-decoder\" and \"donut\" in self.config.encoder.model_type.lower()\n        ):\n            pass\n        elif self.config.model_type in [\"whisper\"]:\n            pass\n        # user input but doesn't start with decoder_start_token_id -> prepend decoder_start_token_id (and adjust\n        # decoder_attention_mask if provided)\n        elif (decoder_input_ids[:, 0] != decoder_start_token_id[:, 0]).all().item():\n            decoder_input_ids = torch.cat([decoder_start_token_id, decoder_input_ids], dim=-1)\n            if \"decoder_attention_mask\" in model_kwargs:\n                decoder_attention_mask = model_kwargs[\"decoder_attention_mask\"]\n                decoder_attention_mask = torch.cat(\n                    (torch.ones_like(decoder_attention_mask)[:, :1], decoder_attention_mask),\n                    dim=-1,\n                )\n                model_kwargs[\"decoder_attention_mask\"] = decoder_attention_mask\n\n        return decoder_input_ids, model_kwargs\n\n    @staticmethod\n    def _expand_inputs_for_generation(\n        expand_size: int = 1,\n        is_encoder_decoder: bool = False,\n        input_ids: Optional[torch.LongTensor] = None,\n        **model_kwargs,\n    ) -> Tuple[torch.LongTensor, Dict[str, Any]]:\n        \"\"\"Expands tensors from [batch_size, ...] to [batch_size * expand_size, ...]\"\"\"\n        # Do not call torch.repeat_interleave if expand_size is 1 because it clones\n        # the input tensor and thus requires more memory although no change is applied\n        if expand_size == 1:\n            return input_ids, model_kwargs\n\n        def _expand_dict_for_generation(dict_to_expand):\n            for key in dict_to_expand:\n                if (\n                    key != \"cache_position\"\n                    and dict_to_expand[key] is not None\n                    and isinstance(dict_to_expand[key], torch.Tensor)\n                ):\n                    dict_to_expand[key] = dict_to_expand[key].repeat_interleave(expand_size, dim=0)\n            return dict_to_expand\n\n        if input_ids is not None:\n            input_ids = input_ids.repeat_interleave(expand_size, dim=0)\n\n        model_kwargs = _expand_dict_for_generation(model_kwargs)\n\n        if is_encoder_decoder:\n            if model_kwargs.get(\"encoder_outputs\") is None:\n                raise ValueError(\"If `is_encoder_decoder` is True, make sure that `encoder_outputs` is defined.\")\n            model_kwargs[\"encoder_outputs\"] = _expand_dict_for_generation(model_kwargs[\"encoder_outputs\"])\n\n        return input_ids, model_kwargs\n\n    def _extract_past_from_model_output(self, outputs: ModelOutput):\n        past_key_values = None\n        cache_name = \"past_key_values\"\n        if \"past_key_values\" in outputs:\n            past_key_values = outputs.past_key_values\n        elif \"mems\" in outputs:\n            past_key_values = outputs.mems\n        elif \"past_buckets_states\" in outputs:\n            past_key_values = outputs.past_buckets_states\n        elif \"cache_params\" in outputs:\n            past_key_values = outputs.cache_params\n            cache_name = \"cache_params\"\n\n        return cache_name, past_key_values\n\n    def _update_model_kwargs_for_generation(\n        self,\n        outputs: ModelOutput,\n        model_kwargs: Dict[str, Any],\n        is_encoder_decoder: bool = False,\n        num_new_tokens: int = 1,\n    ) -> Dict[str, Any]:\n        # update past_key_values keeping its naming used in model code\n        cache_name, cache = self._extract_past_from_model_output(outputs)\n        model_kwargs[cache_name] = cache\n        if getattr(outputs, \"state\", None) is not None:\n            model_kwargs[\"state\"] = outputs.state\n\n        # update token_type_ids with last value\n        if \"token_type_ids\" in model_kwargs:\n            token_type_ids = model_kwargs[\"token_type_ids\"]\n            model_kwargs[\"token_type_ids\"] = torch.cat([token_type_ids, token_type_ids[:, -1].unsqueeze(-1)], dim=-1)\n\n        if not is_encoder_decoder:\n            # update attention mask\n            if \"attention_mask\" in model_kwargs:\n                attention_mask = model_kwargs[\"attention_mask\"]\n                model_kwargs[\"attention_mask\"] = torch.cat(\n                    [attention_mask, attention_mask.new_ones((attention_mask.shape[0], 1))], dim=-1\n                )\n        else:\n            # update decoder attention mask\n            if \"decoder_attention_mask\" in model_kwargs:\n                decoder_attention_mask = model_kwargs[\"decoder_attention_mask\"]\n                model_kwargs[\"decoder_attention_mask\"] = torch.cat(\n                    [decoder_attention_mask, decoder_attention_mask.new_ones((decoder_attention_mask.shape[0], 1))],\n                    dim=-1,\n                )\n\n        if model_kwargs.get(\"use_cache\", True):\n            model_kwargs[\"cache_position\"] = model_kwargs[\"cache_position\"][-1:] + num_new_tokens\n        else:\n            past_positions = model_kwargs.pop(\"cache_position\")\n            new_positions = torch.arange(\n                past_positions[-1] + 1, past_positions[-1] + num_new_tokens + 1, dtype=past_positions.dtype\n            ).to(past_positions.device)\n            model_kwargs[\"cache_position\"] = torch.cat((past_positions, new_positions))\n        return model_kwargs\n\n    def _reorder_cache(self, past_key_values, beam_idx):\n        raise NotImplementedError(\n            f\"Make sure that a `_reorder_cache` function is correctly implemented in {self.__class__.__module__} to\"\n            f\" enable beam search for {self.__class__}\"\n        )\n\n    def _get_candidate_generator(\n        self,\n        generation_config: GenerationConfig,\n        input_ids: torch.LongTensor,\n        inputs_tensor: torch.Tensor,\n        assistant_model: \"PreTrainedModel\",\n        logits_processor: LogitsProcessorList,\n        target_tokenizer: \"PreTrainedTokenizerBase\",\n        assistant_tokenizer: \"PreTrainedTokenizerBase\",\n        model_kwargs: Dict,\n    ) -> CandidateGenerator:\n        \"\"\"\n        Returns the candidate generator to be used in `assisted_generation`\n        \"\"\"\n        different_tokenizers = all(v is not None for v in (assistant_model, target_tokenizer, assistant_tokenizer))\n\n        if generation_config.prompt_lookup_num_tokens is not None:\n            candidate_generator = PromptLookupCandidateGenerator(\n                eos_token_id=generation_config._eos_token_tensor,\n                num_output_tokens=generation_config.prompt_lookup_num_tokens,\n                max_matching_ngram_size=generation_config.max_matching_ngram_size,\n                max_length=generation_config.max_length,\n            )\n        elif different_tokenizers:\n            candidate_generator = AssistedCandidateGeneratorDifferentTokenizers(\n                input_ids=input_ids,\n                assistant_model=assistant_model,\n                generation_config=generation_config,\n                model_kwargs=model_kwargs,\n                inputs_tensor=inputs_tensor,\n                logits_processor=logits_processor,\n                target_tokenizer=target_tokenizer,\n                assistant_tokenizer=assistant_tokenizer,\n            )\n        else:\n            candidate_generator = AssistedCandidateGenerator(\n                input_ids=input_ids,\n                assistant_model=assistant_model,\n                generation_config=generation_config,\n                model_kwargs=model_kwargs,\n                inputs_tensor=inputs_tensor,\n                logits_processor=logits_processor,\n            )\n        return candidate_generator\n\n    def _get_logits_processor(\n        self,\n        generation_config: GenerationConfig,\n        input_ids_seq_length: int,\n        encoder_input_ids: torch.LongTensor,\n        prefix_allowed_tokens_fn: Callable[[int, torch.Tensor], List[int]],\n        logits_processor: Optional[LogitsProcessorList],\n        device: str = None,\n        model_kwargs: Optional[Dict[str, Any]] = None,\n        negative_prompt_ids: Optional[torch.Tensor] = None,\n        negative_prompt_attention_mask: Optional[torch.Tensor] = None,\n    ) -> LogitsProcessorList:\n        \"\"\"\n        This class returns a [`LogitsProcessorList`] list object that contains all relevant [`LogitsProcessor`]\n        instances used to modify the scores of the language model head.\n        \"\"\"\n        # instantiate processors list\n        processors = LogitsProcessorList()\n\n        if generation_config.guidance_scale is not None and generation_config.guidance_scale != 1:\n            processors.append(\n                UnbatchedClassifierFreeGuidanceLogitsProcessor(\n                    generation_config.guidance_scale,\n                    self,\n                    unconditional_ids=negative_prompt_ids,\n                    unconditional_attention_mask=negative_prompt_attention_mask,\n                    use_cache=generation_config.use_cache,\n                )\n            )\n        if generation_config.sequence_bias is not None:\n            processors.append(SequenceBiasLogitsProcessor(sequence_bias=generation_config.sequence_bias))\n\n        if generation_config.diversity_penalty is not None and generation_config.diversity_penalty > 0.0:\n            processors.append(\n                HammingDiversityLogitsProcessor(\n                    diversity_penalty=generation_config.diversity_penalty,\n                    num_beams=generation_config.num_beams,\n                    num_beam_groups=generation_config.num_beam_groups,\n                )\n            )\n        if (\n            generation_config.encoder_repetition_penalty is not None\n            and generation_config.encoder_repetition_penalty != 1.0\n        ):\n            if len(encoder_input_ids.shape) == 2:\n                processors.append(\n                    EncoderRepetitionPenaltyLogitsProcessor(\n                        penalty=generation_config.encoder_repetition_penalty,\n                        encoder_input_ids=encoder_input_ids,\n                    )\n                )\n            else:\n                warnings.warn(\n                    \"Passing `encoder_repetition_penalty` requires some form of `input_ids` to be passed to \"\n                    \"`generate`, ignoring the argument.\",\n                    UserWarning,\n                )\n        if generation_config.repetition_penalty is not None and generation_config.repetition_penalty != 1.0:\n            processors.append(RepetitionPenaltyLogitsProcessor(penalty=generation_config.repetition_penalty))\n        if generation_config.no_repeat_ngram_size is not None and generation_config.no_repeat_ngram_size > 0:\n            processors.append(NoRepeatNGramLogitsProcessor(generation_config.no_repeat_ngram_size))\n        if (\n            generation_config.encoder_no_repeat_ngram_size is not None\n            and generation_config.encoder_no_repeat_ngram_size > 0\n        ):\n            if len(encoder_input_ids.shape) == 2:\n                processors.append(\n                    EncoderNoRepeatNGramLogitsProcessor(\n                        generation_config.encoder_no_repeat_ngram_size,\n                        encoder_input_ids,\n                    )\n                )\n            else:\n                warnings.warn(\n                    \"Passing `encoder_no_repeat_ngram_size` requires some form of `input_ids` to be passed to \"\n                    \"`generate`, ignoring the argument.\",\n                    UserWarning,\n                )\n        if generation_config.bad_words_ids is not None:\n            processors.append(\n                NoBadWordsLogitsProcessor(\n                    generation_config.bad_words_ids,\n                    generation_config._eos_token_tensor,\n                )\n            )\n        if (\n            generation_config.min_length is not None\n            and generation_config._eos_token_tensor is not None\n            and generation_config.min_length > 0\n        ):\n            processors.append(\n                MinLengthLogitsProcessor(\n                    generation_config.min_length,\n                    generation_config._eos_token_tensor,\n                    device=device,\n                )\n            )\n        if (\n            generation_config.min_new_tokens is not None\n            and generation_config._eos_token_tensor is not None\n            and generation_config.min_new_tokens > 0\n        ):\n            processors.append(\n                MinNewTokensLengthLogitsProcessor(\n                    input_ids_seq_length,\n                    generation_config.min_new_tokens,\n                    generation_config._eos_token_tensor,\n                    device=device,\n                )\n            )\n        if prefix_allowed_tokens_fn is not None:\n            processors.append(\n                PrefixConstrainedLogitsProcessor(\n                    prefix_allowed_tokens_fn,\n                    generation_config.num_beams // generation_config.num_beam_groups,\n                )\n            )\n        if generation_config.forced_bos_token_id is not None:\n            processors.append(\n                ForcedBOSTokenLogitsProcessor(\n                    generation_config.forced_bos_token_id,\n                )\n            )\n        if generation_config.forced_eos_token_id is not None:\n            processors.append(\n                ForcedEOSTokenLogitsProcessor(\n                    generation_config.max_length,\n                    generation_config.forced_eos_token_id,\n                    device=device,\n                )\n            )\n        if generation_config.remove_invalid_values is True:\n            processors.append(InfNanRemoveLogitsProcessor())\n        if generation_config.exponential_decay_length_penalty is not None:\n            processors.append(\n                ExponentialDecayLengthPenalty(\n                    generation_config.exponential_decay_length_penalty,\n                    generation_config._eos_token_tensor,\n                    input_ids_seq_length,\n                )\n            )\n        if generation_config.suppress_tokens is not None:\n            processors.append(\n                SuppressTokensLogitsProcessor(\n                    generation_config.suppress_tokens,\n                    device=device,\n                )\n            )\n        if generation_config.begin_suppress_tokens is not None:\n            begin_index = input_ids_seq_length\n            begin_index = (\n                begin_index\n                if (input_ids_seq_length > 1 or generation_config.forced_bos_token_id is None)\n                else begin_index + 1\n            )\n            processors.append(\n                SuppressTokensAtBeginLogitsProcessor(\n                    generation_config.begin_suppress_tokens,\n                    begin_index,\n                    device=device,\n                )\n            )\n        # Compatibility with transformers 4.57.1+: forced_decoder_ids has been removed\n        if hasattr(generation_config, 'forced_decoder_ids') and generation_config.forced_decoder_ids is not None:\n            # TODO (sanchit): move this exception to GenerationConfig.validate() when TF & FLAX are aligned with PT\n            raise ValueError(\n                \"You have explicitly specified `forced_decoder_ids`. Please remove the `forced_decoder_ids` argument \"\n                \"in favour of `input_ids` or `decoder_input_ids` respectively.\",\n            )\n        if generation_config.watermarking_config is not None:\n            processors.append(\n                generation_config.watermarking_config.construct_processor(self.config.vocab_size, device)\n            )\n\n        # TODO (joao): find a strategy to specify the order of the processors\n        processors = self._merge_criteria_processor_list(processors, logits_processor)\n\n        # Processors previously known as `LogitsWarpers`, only applied with sampling strategies\n        if generation_config.do_sample:\n            # In beam methods, we need to keep at least one non-eos token to explore continuations that might have a\n            # better score (i.e. keep len(list(generation_config._eos_token_tensor)) + 1)\n            if generation_config.num_beams > 1:\n                if isinstance(generation_config._eos_token_tensor, list):\n                    min_tokens_to_keep = len(generation_config._eos_token_tensor) + 1\n                elif isinstance(generation_config._eos_token_tensor, torch.Tensor):\n                    min_tokens_to_keep = generation_config._eos_token_tensor.shape[0] + 1\n                else:\n                    min_tokens_to_keep = 2\n            else:\n                min_tokens_to_keep = 1\n\n            # the following idea is largely copied from this PR: https://github.com/huggingface/transformers/pull/5420/files\n            # all samplers can be found in `generation_utils_samplers.py`\n            if generation_config.temperature is not None and generation_config.temperature != 1.0:\n                processors.append(TemperatureLogitsWarper(generation_config.temperature))\n            if generation_config.top_k is not None and generation_config.top_k != 0:\n                processors.append(\n                    TopKLogitsWarper(top_k=generation_config.top_k, min_tokens_to_keep=min_tokens_to_keep)\n                )\n            if generation_config.top_p is not None and generation_config.top_p < 1.0:\n                processors.append(\n                    TopPLogitsWarper(top_p=generation_config.top_p, min_tokens_to_keep=min_tokens_to_keep)\n                )\n            if generation_config.min_p is not None:\n                # Applied after temperature scaling (see https://github.com/ggerganov/llama.cpp/pull/3841#issuecomment-2073826084)\n                processors.append(\n                    MinPLogitsWarper(min_p=generation_config.min_p, min_tokens_to_keep=min_tokens_to_keep)\n                )\n            if generation_config.typical_p is not None and generation_config.typical_p < 1.0:\n                processors.append(\n                    TypicalLogitsWarper(mass=generation_config.typical_p, min_tokens_to_keep=min_tokens_to_keep)\n                )\n            if generation_config.epsilon_cutoff is not None and 0.0 < generation_config.epsilon_cutoff < 1.0:\n                processors.append(\n                    EpsilonLogitsWarper(\n                        epsilon=generation_config.epsilon_cutoff, min_tokens_to_keep=min_tokens_to_keep\n                    )\n                )\n            if generation_config.eta_cutoff is not None and 0.0 < generation_config.eta_cutoff < 1.0:\n                processors.append(\n                    EtaLogitsWarper(\n                        epsilon=generation_config.eta_cutoff, min_tokens_to_keep=min_tokens_to_keep, device=device\n                    )\n                )\n\n        # `LogitNormalization` should always be the last logit processor, when present\n        if generation_config.renormalize_logits is True:\n            processors.append(LogitNormalization())\n        return processors\n\n    def _get_stopping_criteria(\n        self,\n        generation_config: GenerationConfig,\n        stopping_criteria: Optional[StoppingCriteriaList],\n        tokenizer: Optional[\"PreTrainedTokenizerBase\"] = None,\n        **kwargs,\n    ) -> StoppingCriteriaList:\n        criteria = StoppingCriteriaList()\n        if generation_config.max_length is not None:\n            max_position_embeddings = getattr(self.config, \"max_position_embeddings\", None)\n            criteria.append(\n                MaxLengthCriteria(\n                    max_length=generation_config.max_length,\n                    max_position_embeddings=max_position_embeddings,\n                )\n            )\n        if generation_config.max_time is not None:\n            criteria.append(MaxTimeCriteria(max_time=generation_config.max_time))\n        if generation_config.stop_strings is not None:\n            if tokenizer is None:\n                raise ValueError(\n                    \"There are one or more stop strings, either in the arguments to `generate` or in the \"\n                    \"model's generation config, but we could not locate a tokenizer. When generating with \"\n                    \"stop strings, you must pass the model's tokenizer to the `tokenizer` argument of `generate`.\"\n                )\n            criteria.append(StopStringCriteria(stop_strings=generation_config.stop_strings, tokenizer=tokenizer))\n        if generation_config._eos_token_tensor is not None:\n            criteria.append(EosTokenCriteria(eos_token_id=generation_config._eos_token_tensor))\n        if (\n            generation_config.is_assistant\n            and generation_config.assistant_confidence_threshold is not None\n            and generation_config.assistant_confidence_threshold > 0\n        ):\n            criteria.append(\n                ConfidenceCriteria(assistant_confidence_threshold=generation_config.assistant_confidence_threshold)\n            )\n        criteria = self._merge_criteria_processor_list(criteria, stopping_criteria)\n        return criteria\n\n    def _merge_criteria_processor_list(\n        self,\n        default_list: Union[LogitsProcessorList, StoppingCriteriaList],\n        custom_list: Union[LogitsProcessorList, StoppingCriteriaList],\n    ) -> Union[LogitsProcessorList, StoppingCriteriaList]:\n        if len(custom_list) == 0:\n            return default_list\n        for default in default_list:\n            for custom in custom_list:\n                if type(custom) is type(default):\n                    object_type = \"stopping criteria\" if isinstance(custom, StoppingCriteria) else \"logits processor\"\n                    raise ValueError(\n                        f\"A custom {object_type} of type {type(custom)} with values {custom} has been passed to\"\n                        f\" `.generate()`, but it has already been created with the values {default}. {default} has been\"\n                        \" created by passing the corresponding arguments to generate or by the model's config default\"\n                        f\" values. If you just want to change the default values of {object_type} consider passing\"\n                        f\" them as arguments to `.generate()` instead of using a custom {object_type}.\"\n                    )\n        default_list.extend(custom_list)\n        return default_list\n\n    def compute_transition_scores(\n        self,\n        sequences: torch.Tensor,\n        scores: Tuple[torch.Tensor],\n        beam_indices: Optional[torch.Tensor] = None,\n        normalize_logits: bool = False,\n    ) -> torch.Tensor:\n        \"\"\"\n        Computes the transition scores of sequences given the generation scores (and beam indices, if beam search was\n        used). This is a convenient method to quicky obtain the scores of the selected tokens at generation time.\n\n        Parameters:\n            sequences (`torch.LongTensor`):\n                The generated sequences. The second dimension (sequence_length) is either equal to `max_length` or\n                shorter if all batches finished early due to the `eos_token_id`.\n            scores (`tuple(torch.FloatTensor)`):\n                Transition scores for each vocabulary token at each generation step. Beam transition scores consisting\n                of log probabilities of tokens conditioned on log softmax of previously generated tokens in this beam.\n                Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for each generated token),\n                with each tensor of shape `(batch_size*num_beams, config.vocab_size)`.\n            beam_indices (`torch.LongTensor`, *optional*):\n                Beam indices of generated token id at each generation step. `torch.LongTensor` of shape\n                `(batch_size*num_return_sequences, sequence_length)`. Only required if a `num_beams>1` at\n                generate-time.\n            normalize_logits (`bool`, *optional*, defaults to `False`):\n                Whether to normalize the logits (which, for legacy reasons, may be unnormalized).\n\n        Return:\n            `torch.Tensor`: A `torch.Tensor` of shape `(batch_size*num_return_sequences, sequence_length)` containing\n                the transition scores (logits)\n\n        Examples:\n\n        ```python\n        >>> from transformers import GPT2Tokenizer, AutoModelForCausalLM\n        >>> import numpy as np\n\n        >>> tokenizer = GPT2Tokenizer.from_pretrained(\"gpt2\")\n        >>> model = AutoModelForCausalLM.from_pretrained(\"openai-community/gpt2\")\n        >>> tokenizer.pad_token_id = tokenizer.eos_token_id\n        >>> inputs = tokenizer([\"Today is\"], return_tensors=\"pt\")\n\n        >>> # Example 1: Print the scores for each token generated with Greedy Search\n        >>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)\n        >>> transition_scores = model.compute_transition_scores(\n        ...     outputs.sequences, outputs.scores, normalize_logits=True\n        ... )\n        >>> # input_length is the length of the input prompt for decoder-only models, like the GPT family, and 1 for\n        >>> # encoder-decoder models, like BART or T5.\n        >>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1]\n        >>> generated_tokens = outputs.sequences[:, input_length:]\n        >>> for tok, score in zip(generated_tokens[0], transition_scores[0]):\n        ...     # | token | token string | log probability | probability\n        ...     print(f\"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}\")\n        |   262 |  the     | -1.414 | 24.33%\n        |  1110 |  day     | -2.609 | 7.36%\n        |   618 |  when    | -2.010 | 13.40%\n        |   356 |  we      | -1.859 | 15.58%\n        |   460 |  can     | -2.508 | 8.14%\n\n        >>> # Example 2: Reconstruct the sequence scores from Beam Search\n        >>> outputs = model.generate(\n        ...     **inputs,\n        ...     max_new_tokens=5,\n        ...     num_beams=4,\n        ...     num_return_sequences=4,\n        ...     return_dict_in_generate=True,\n        ...     output_scores=True,\n        ... )\n        >>> transition_scores = model.compute_transition_scores(\n        ...     outputs.sequences, outputs.scores, outputs.beam_indices, normalize_logits=False\n        ... )\n        >>> # If you sum the generated tokens' scores and apply the length penalty, you'll get the sequence scores.\n        >>> # Tip 1: recomputing the scores is only guaranteed to match with `normalize_logits=False`. Depending on the\n        >>> # use case, you might want to recompute it with `normalize_logits=True`.\n        >>> # Tip 2: the output length does NOT include the input length\n        >>> output_length = np.sum(transition_scores.numpy() < 0, axis=1)\n        >>> length_penalty = model.generation_config.length_penalty\n        >>> reconstructed_scores = transition_scores.sum(axis=1) / (output_length**length_penalty)\n        >>> print(np.allclose(outputs.sequences_scores, reconstructed_scores))\n        True\n        ```\"\"\"\n        # 1. In absence of `beam_indices`, we can assume that we come from e.g. greedy search, which is equivalent\n        # to a beam search approach were the first (and only) beam is always selected\n        if beam_indices is None:\n            beam_indices = torch.arange(scores[0].shape[0]).view(-1, 1).to(sequences.device)\n            beam_indices = beam_indices.expand(-1, len(scores))\n\n        # 2. reshape scores as [batch_size*vocab_size, # generation steps] with # generation steps being\n        # seq_len - input_length\n        scores = torch.stack(scores).reshape(len(scores), -1).transpose(0, 1)\n\n        # 3. Optionally normalize the logits (across the vocab dimension)\n        if normalize_logits:\n            scores = scores.reshape(-1, self.config.vocab_size, scores.shape[-1])\n            scores = torch.nn.functional.log_softmax(scores, dim=1)\n            scores = scores.reshape(-1, scores.shape[-1])\n\n        # 4. cut beam_indices to longest beam length\n        beam_indices_mask = beam_indices < 0\n        max_beam_length = (1 - beam_indices_mask.long()).sum(-1).max()\n        beam_indices = beam_indices.clone()[:, :max_beam_length]\n        beam_indices_mask = beam_indices_mask[:, :max_beam_length]\n\n        # 5. Set indices of beams that finished early to 0; such indices will be masked correctly afterwards\n        beam_indices[beam_indices_mask] = 0\n\n        # 6. multiply beam_indices with vocab size to gather correctly from scores\n        beam_sequence_indices = beam_indices * self.config.vocab_size\n\n        # 7. Define which indices contributed to scores\n        cut_idx = sequences.shape[-1] - max_beam_length\n        indices = sequences[:, cut_idx:] + beam_sequence_indices\n\n        # 8. Compute scores\n        transition_scores = scores.gather(0, indices)\n\n        # 9. Mask out transition_scores of beams that stopped early\n        transition_scores[beam_indices_mask] = 0\n\n        return transition_scores\n\n    def _validate_model_class(self):\n        \"\"\"\n        Confirms that the model class is compatible with generation. If not, raises an exception that points to the\n        right class to use.\n        \"\"\"\n        # TODO(joao): remove this function in v4.50, i.e. when we remove the inheritance of `GenerationMixin` from\n        # `PreTrainedModel`. With that inheritance removed, all model classes inheriting from `GenerationMixin` can\n        # safely call `GenerationMixin.generate`\n        if not is_torchdynamo_compiling() and not self.can_generate():\n            terminations_with_generation_support = [\n                \"ForCausalLM\",\n                \"ForConditionalGeneration\",\n                \"ForSpeechSeq2Seq\",\n                \"ForVision2Seq\",\n            ]\n            raise TypeError(\n                f\"The current model class ({self.__class__.__name__}) is not compatible with `.generate()`, as \"\n                \"it doesn't have a language model head. Classes that support generation often end in one of these \"\n                f\"names: {terminations_with_generation_support}.\"\n            )\n\n    def _validate_assistant(self, assistant_model, tokenizer, assistant_tokenizer):\n        if assistant_model is None:\n            return\n\n        if self.config.is_encoder_decoder and not assistant_model.config.is_encoder_decoder:\n            attributes_to_check = [\"encoder_attention_heads\", \"encoder_ffn_dim\", \"encoder_layers\"]\n            attributes_to_check = [attr for attr in dir(assistant_model.config) if attr in attributes_to_check]\n            are_equal = all(\n                getattr(self.config, attr) == getattr(assistant_model.config, attr) for attr in attributes_to_check\n            )\n            if not are_equal:\n                raise ValueError(\n                    \"The main model and the assistant don't have compatible encoder-dependent input shapes. \"\n                    \"Ensure you load the assistant with the correct encoder-decoder class, e.g. `AutoModelForSpeechSeq2Seq` for Whisper.\"\n                )\n\n        doc_reference = (\n            \"(see https://huggingface.co/docs/transformers/en/generation_strategies#universal-assisted-decoding)\"\n        )\n        if self.config.get_text_config().vocab_size == assistant_model.config.get_text_config().vocab_size:\n            if assistant_tokenizer is not None:\n                raise ValueError(\n                    f\"`assistant_tokenizer` is not required when the main and assistant models use the same tokenizer. Please omit `assistant_tokenizer` from `generate()` {doc_reference}.\"\n                )\n        else:\n            if tokenizer is None or assistant_tokenizer is None:\n                raise ValueError(\n                    f\"The main and assistant moedels have different tokenizers. Please provide `tokenizer` and `assistant_tokenizer` to `generate()` {doc_reference}.\"\n                )\n\n    def _validate_model_kwargs(self, model_kwargs: Dict[str, Any]):\n        \"\"\"Validates model kwargs for generation. Generate argument typos will also be caught here.\"\"\"\n        # If a `Cache` instance is passed, checks whether the model is compatible with it\n        if isinstance(model_kwargs.get(\"past_key_values\", None), Cache) and not self._supports_cache_class:\n            raise ValueError(\n                f\"{self.__class__.__name__} does not support an instance of `Cache` as `past_key_values`. Please \"\n                \"check the model documentation for supported cache formats.\"\n            )\n\n        # Excludes arguments that are handled before calling any model function\n        if self.config.is_encoder_decoder:\n            for key in [\"decoder_input_ids\"]:\n                model_kwargs.pop(key, None)\n\n        unused_model_args = []\n        model_args = set(inspect.signature(self.prepare_inputs_for_generation).parameters)\n        # `kwargs`/`model_kwargs` is often used to handle optional forward pass inputs like `attention_mask`. If\n        # `prepare_inputs_for_generation` doesn't accept them, then a stricter check can be made ;)\n        if \"kwargs\" in model_args or \"model_kwargs\" in model_args:\n            model_args |= set(inspect.signature(self.forward).parameters)\n\n        # Encoder-Decoder models may also need Encoder arguments from `model_kwargs`\n        if self.config.is_encoder_decoder:\n            base_model = getattr(self, self.base_model_prefix, None)\n\n            # allow encoder kwargs\n            encoder = getattr(self, \"encoder\", None)\n            # `MusicgenForConditionalGeneration` has `text_encoder` and `audio_encoder`.\n            # Also, it has `base_model_prefix = \"encoder_decoder\"` but there is no `self.encoder_decoder`\n            # TODO: A better way to handle this.\n            if encoder is None and base_model is not None:\n                encoder = getattr(base_model, \"encoder\", None)\n\n            if encoder is not None:\n                encoder_model_args = set(inspect.signature(encoder.forward).parameters)\n                model_args |= encoder_model_args\n\n            # allow decoder kwargs\n            decoder = getattr(self, \"decoder\", None)\n            if decoder is None and base_model is not None:\n                decoder = getattr(base_model, \"decoder\", None)\n\n            if decoder is not None:\n                decoder_model_args = set(inspect.signature(decoder.forward).parameters)\n                model_args |= {f\"decoder_{x}\" for x in decoder_model_args}\n\n            # allow assistant_encoder_outputs to be passed if we're doing assisted generating\n            if \"assistant_encoder_outputs\" in model_kwargs:\n                model_args |= {\"assistant_encoder_outputs\"}\n\n        for key, value in model_kwargs.items():\n            if value is not None and key not in model_args:\n                unused_model_args.append(key)\n\n        if unused_model_args:\n            raise ValueError(\n                f\"The following `model_kwargs` are not used by the model: {unused_model_args} (note: typos in the\"\n                \" generate arguments will also show up in this list)\"\n            )\n\n    def _validate_generated_length(self, generation_config, input_ids_length, has_default_max_length):\n        \"\"\"Performs validation related to the resulting generated length\"\"\"\n\n        # Can't throw warnings/exceptions during compilation\n        if is_torchdynamo_compiling():\n            return\n\n        # 1. Max length warnings related to poor parameterization\n        if has_default_max_length and generation_config.max_new_tokens is None and generation_config.max_length == 20:\n            # 20 is the default max_length of the generation config\n            warnings.warn(\n                f\"Using the model-agnostic default `max_length` (={generation_config.max_length}) to control the \"\n                \"generation length. We recommend setting `max_new_tokens` to control the maximum length of the \"\n                \"generation.\",\n                UserWarning,\n            )\n        if input_ids_length >= generation_config.max_length:\n            input_ids_string = \"decoder_input_ids\" if self.config.is_encoder_decoder else \"input_ids\"\n            raise ValueError(\n                f\"Input length of {input_ids_string} is {input_ids_length}, but `max_length` is set to\"\n                f\" {generation_config.max_length}. This can lead to unexpected behavior. You should consider\"\n                \" increasing `max_length` or, better yet, setting `max_new_tokens`.\"\n            )\n\n        # 2. Min length warnings due to unfeasible parameter combinations\n        min_length_error_suffix = (\n            \" Generation will stop at the defined maximum length. You should decrease the minimum length and/or \"\n            \"increase the maximum length.\"\n        )\n        if has_default_max_length:\n            min_length_error_suffix += (\n                f\" Note that `max_length` is set to {generation_config.max_length}, its default value.\"\n            )\n        if generation_config.min_length is not None and generation_config.min_length > generation_config.max_length:\n            warnings.warn(\n                f\"Unfeasible length constraints: `min_length` ({generation_config.min_length}) is larger than\"\n                f\" the maximum possible length ({generation_config.max_length}).\" + min_length_error_suffix,\n                UserWarning,\n            )\n        if generation_config.min_new_tokens is not None:\n            min_length = generation_config.min_new_tokens + input_ids_length\n            if min_length > generation_config.max_length:\n                warnings.warn(\n                    f\"Unfeasible length constraints: `min_new_tokens` ({generation_config.min_new_tokens}), when \"\n                    f\"added to the prompt length ({input_ids_length}), is larger than\"\n                    f\" the maximum possible length ({generation_config.max_length}).\" + min_length_error_suffix,\n                    UserWarning,\n                )\n\n    def _prepare_generated_length(\n        self,\n        generation_config,\n        has_default_max_length,\n        has_default_min_length,\n        model_input_name,\n        input_ids_length,\n        inputs_tensor,\n    ):\n        \"\"\"Prepared max and min length in generation configs to avoid clashes between similar attributes\"\"\"\n\n        if generation_config.max_new_tokens is not None:\n            if not has_default_max_length and generation_config.max_length is not None:\n                logger.warning(\n                    f\"Both `max_new_tokens` (={generation_config.max_new_tokens}) and `max_length`(=\"\n                    f\"{generation_config.max_length}) seem to have been set. `max_new_tokens` will take precedence. \"\n                    \"Please refer to the documentation for more information. \"\n                    \"(https://huggingface.co/docs/transformers/main/en/main_classes/text_generation)\"\n                )\n            generation_config.max_length = generation_config.max_new_tokens + input_ids_length\n\n        # if both `inputs_embeds` and `input_ids` are passed, we do not correct the length\n        # otherwise we need total length [inputs-embeds-len + new-tokens-len] to not go beyond indicated `max_length``\n        elif (\n            model_input_name == \"inputs_embeds\"\n            and input_ids_length != inputs_tensor.shape[1]\n            and not self.config.is_encoder_decoder\n        ):\n            generation_config.max_length -= inputs_tensor.shape[1]\n\n        # same for min length\n        if generation_config.min_new_tokens is not None:\n            if not has_default_min_length:\n                logger.warning(\n                    f\"Both `min_new_tokens` (={generation_config.min_new_tokens}) and `min_length`(=\"\n                    f\"{generation_config.min_length}) seem to have been set. `min_new_tokens` will take precedence. \"\n                    \"Please refer to the documentation for more information. \"\n                    \"(https://huggingface.co/docs/transformers/main/en/main_classes/text_generation)\"\n                )\n            generation_config.min_length = generation_config.min_new_tokens + input_ids_length\n\n        elif (\n            model_input_name == \"inputs_embeds\"\n            and input_ids_length != inputs_tensor.shape[1]\n            and not self.config.is_encoder_decoder\n        ):\n            generation_config.min_length = max(generation_config.min_length - inputs_tensor.shape[1], 0)\n\n        return generation_config\n\n    def _prepare_generation_config(\n        self, generation_config: Optional[GenerationConfig], **kwargs: Dict\n    ) -> Tuple[GenerationConfig, Dict]:\n        \"\"\"\n        Prepares the base generation config, then applies any generation configuration options from kwargs. This\n        function handles retrocompatibility with respect to configuration files.\n        \"\"\"\n        # TODO joao: when we can detect `fullgraph=True` in `torch.compile` (https://github.com/pytorch/pytorch/pull/120400)\n        # replace `is_torchdynamo_compiling` by the corresponding check. As it is, we are being too restrictive with\n        # the parameterization in `fullgraph=False` so as to enable `fullgraph=True`.\n\n        # priority: `generation_config` argument > `model.generation_config` (the default generation config)\n        using_model_generation_config = False\n        if generation_config is None:\n            # legacy: users may modify the model configuration to control generation. To trigger this legacy behavior,\n            # the following conditions must be met\n            # 1) the generation config must have been created from the model config (`_from_model_config` field);\n            # 2) the generation config must have seen no modification since its creation (the hash is the same);\n            # 3) there are non-default generation parameters in the model config.\n            # 4) the user must have set new generation parameters in the model config.\n            # NOTE: `torch.compile` can't compile `hash`, this legacy support is disabled with compilation.\n            if (\n                not is_torchdynamo_compiling()\n                and self.generation_config._from_model_config  # 1)\n                and self.generation_config._original_object_hash == hash(self.generation_config)  # 2)\n                and len(self.config._get_non_default_generation_parameters()) > 0  # 3)\n            ):\n                new_generation_config = GenerationConfig.from_model_config(self.config)\n                if new_generation_config != self.generation_config:  # 4)\n                    warnings.warn(\n                        \"You have modified the pretrained model configuration to control generation. This is a\"\n                        \" deprecated strategy to control generation and will be removed in v5.\"\n                        \" Please use and modify the model generation configuration (see\"\n                        \" https://huggingface.co/docs/transformers/generation_strategies#default-text-generation-configuration )\",\n                        UserWarning,\n                    )\n                    self.generation_config = new_generation_config\n\n            generation_config = self.generation_config\n            using_model_generation_config = True\n\n        # `torch.compile` can't compile `copy.deepcopy`, arguments in `kwargs` that are part of `generation_config`\n        # will mutate the object with `.update`. As such, passing these arguments through `kwargs` is disabled -- an\n        # exception will be raised in `_validate_model_kwargs`\n        if not is_torchdynamo_compiling():\n            generation_config = copy.deepcopy(generation_config)\n            model_kwargs = generation_config.update(**kwargs)\n            # If `generation_config` is provided, let's fallback ALL special tokens to the default values for the model\n            if not using_model_generation_config:\n                if generation_config.bos_token_id is None:\n                    generation_config.bos_token_id = self.generation_config.bos_token_id\n                if generation_config.eos_token_id is None:\n                    generation_config.eos_token_id = self.generation_config.eos_token_id\n                if generation_config.pad_token_id is None:\n                    generation_config.pad_token_id = self.generation_config.pad_token_id\n                if generation_config.decoder_start_token_id is None:\n                    generation_config.decoder_start_token_id = self.generation_config.decoder_start_token_id\n        else:\n            model_kwargs = kwargs\n\n        return generation_config, model_kwargs\n\n    def _get_initial_cache_position(self, input_ids, model_kwargs):\n        \"\"\"Calculates `cache_position` for the pre-fill stage based on `input_ids` and optionally past length\"\"\"\n        # `torch.compile`-friendly `torch.arange` from a shape -- the lines below are equivalent to `torch.arange`\n        if \"inputs_embeds\" in model_kwargs and not self.config.is_encoder_decoder:\n            cache_position = torch.ones_like(model_kwargs[\"inputs_embeds\"][0, :, 0], dtype=torch.int64).cumsum(0) - 1\n        elif \"decoder_inputs_embeds\" in model_kwargs and self.config.is_encoder_decoder:\n            cache_position = (\n                torch.ones_like(model_kwargs[\"decoder_inputs_embeds\"][0, :, 0], dtype=torch.int64).cumsum(0) - 1\n            )\n        else:\n            cache_position = torch.ones_like(input_ids[0, :], dtype=torch.int64).cumsum(0) - 1\n\n        past_length = 0\n        if model_kwargs.get(\"past_key_values\") is not None:\n            cache = model_kwargs[\"past_key_values\"]\n            past_length = 0\n            if not isinstance(cache, Cache):\n                past_length = cache[0][0].shape[2]\n            elif hasattr(cache, \"get_seq_length\") and cache.get_seq_length() is not None:\n                past_length = cache.get_seq_length()\n\n            # TODO(joao): this is not torch.compile-friendly, find a work-around. If the cache is not empty,\n            # end-to-end compilation will yield bad results because `cache_position` will be incorrect.\n            if not is_torchdynamo_compiling():\n                cache_position = cache_position[past_length:]\n\n        model_kwargs[\"cache_position\"] = cache_position\n        return model_kwargs\n\n    def _get_cache(\n        self, cache_implementation: str, batch_size: int, max_cache_len: int, device: torch.device, model_kwargs\n    ) -> Cache:\n        \"\"\"\n        Sets a cache for `generate`, that will persist across calls. A new cache will only be initialized a\n        new `generate` call requires a larger cache or uses a different batch size.\n\n        Returns the resulting cache object.\n        \"\"\"\n        cache_cls: Cache = NEED_SETUP_CACHE_CLASSES_MAPPING[cache_implementation]\n        requires_cross_attention_cache = (\n            self.config.is_encoder_decoder or model_kwargs.get(\"encoder_outputs\") is not None\n        )\n\n        if hasattr(self, \"_cache\"):\n            cache_to_check = self._cache.self_attention_cache if requires_cross_attention_cache else self._cache\n\n        if cache_implementation == \"sliding_window\":\n            max_cache_len = min(self.config.sliding_window, max_cache_len)\n\n        need_new_cache = (\n            not hasattr(self, \"_cache\")\n            or (not isinstance(cache_to_check, cache_cls))\n            or cache_to_check.batch_size != batch_size\n        )\n        if cache_implementation != \"mamba\":\n            need_new_cache = need_new_cache or cache_to_check.max_cache_len < max_cache_len\n\n        if requires_cross_attention_cache and hasattr(self, \"_cache\"):\n            need_new_cache = (\n                need_new_cache\n                or self._cache.cross_attention_cache.max_cache_len != model_kwargs[\"encoder_outputs\"][0].shape[1]\n            )\n\n        if need_new_cache:\n            if hasattr(self.config, \"_pre_quantization_dtype\"):\n                cache_dtype = self.config._pre_quantization_dtype\n            else:\n                if not is_torchdynamo_compiling():\n                    cache_dtype = self.dtype\n                else:\n                    # NOTE: self.dtype is not compatible with torch.compile, as it calls `self.parameters()`.\n                    # Workaround: trust the lm_head, whose attribute name is somewhat consistent across generative\n                    # models. May cause trobles with non-text modalities.\n                    cache_dtype = self.get_output_embeddings().weight.dtype\n\n            def get_layer_device_map(execution_device_map: Optional[dict] = None):\n                if execution_device_map is None:\n                    return None\n                elif len(execution_device_map) == 1 and \"\" in execution_device_map:\n                    return {idx: execution_device_map[\"\"] for idx in range(self.config.num_hidden_layers)}\n                layer_device_map = {}\n                for layer in execution_device_map:\n                    for idx in range(self.config.num_hidden_layers):\n                        if f\".{idx}.\" in f\"{layer}.\":\n                            layer_device_map[idx] = execution_device_map[layer]\n                            break\n                for idx in range(self.config.num_hidden_layers):\n                    if idx not in layer_device_map:\n                        raise RuntimeError(f\"layer {idx} has not been mapped to a device.\")\n                return layer_device_map\n\n            execution_device_map = None\n            # Taken from dispatch_model from accelerate.\n            # This is needed here if we don't want to make changes in accelerate in order to save execution_device\n            # For offloaded case, we need to get the execution device, not just the device where it is offloaded\n            if hasattr(self, \"hf_device_map\"):\n                main_device = [d for d in self.hf_device_map.values() if d not in [\"cpu\", \"disk\"]][0]\n                execution_device_map = {\n                    name: main_device if device in [\"cpu\", \"disk\"] else device\n                    for name, device in self.hf_device_map.items()\n                }\n            layer_device_map = get_layer_device_map(execution_device_map)\n\n            cache_kwargs = {\n                \"config\": self.config.get_text_config(),\n                \"batch_size\": batch_size,\n                \"max_cache_len\": max_cache_len,\n                \"device\": device,\n                \"dtype\": cache_dtype,\n                \"layer_device_map\": layer_device_map,\n            }\n            self._cache = cache_cls(**cache_kwargs)\n            if requires_cross_attention_cache:\n                encoder_kwargs = cache_kwargs.copy()\n                encoder_kwargs[\"max_cache_len\"] = model_kwargs[\"encoder_outputs\"][0].shape[1]\n                self._cache = EncoderDecoderCache(self._cache, cache_cls(**encoder_kwargs))\n        else:\n            self._cache.reset()\n        return self._cache\n\n    def _supports_default_dynamic_cache(self) -> bool:\n        \"\"\"\n        Return `True` if current model can use a `DynamicCache` instance when initializing the `past_key_values`.\n        This is mostly the same as `_supports_cache_class` attribute, but add exception for `Jamba` model which\n        uses its own `HybridMambaAttentionDynamicCache` and do not need to initialize the Cache in advance in\n        order to save memory (because no back and forth `to_legacy_cache` and `from_legacy_cache` will be performed\n        for `HybridMambaAttentionDynamicCache`).\n        \"\"\"\n        return (\n            self._supports_cache_class\n            and \"jamba\" not in self.__class__.__name__.lower()\n            and \"zamba\" not in self.__class__.__name__.lower()\n        )\n\n    def _prepare_cache_for_generation(\n        self,\n        generation_config: GenerationConfig,\n        model_kwargs: Dict,\n        assistant_model: \"PreTrainedModel\",\n        batch_size: int,\n        max_cache_length: int,\n        device: torch.device,\n    ) -> bool:\n        \"\"\"\n        Prepares the cache for generation (if applicable), given `generate`'s parameterization. If a cache is\n        instantiated, writes it to `model_kwargs`, under the name expected by the model.\n        \"\"\"\n\n        cache_name = \"past_key_values\" if \"mamba\" not in self.__class__.__name__.lower() else \"cache_params\"\n        requires_cross_attention_cache = (\n            self.config.is_encoder_decoder or model_kwargs.get(\"encoder_outputs\") is not None\n        )\n\n        # Quick escape route 1: if the user specifies a cache, we only need to:\n        # a) check for conflicting `generate` arguments\n        # b) convert to the new cache format (if the user passes a legacy cache and model supports it)\n        user_defined_cache = model_kwargs.get(cache_name)\n        if user_defined_cache is not None:\n            if generation_config.cache_implementation is not None:\n                raise ValueError(\n                    f\"Passing both `cache_implementation` (used to initialize certain caches) and `{cache_name}` (a \"\n                    \"Cache object) is unsupported. Please use only one of the two.\"\n                )\n            if isinstance(user_defined_cache, tuple) and self._supports_default_dynamic_cache():\n                model_kwargs[cache_name] = (\n                    DynamicCache.from_legacy_cache(user_defined_cache)\n                    if not requires_cross_attention_cache\n                    else EncoderDecoderCache.from_legacy_cache(user_defined_cache)\n                )\n            return\n\n        # Quick escape route 2: if the user specifies no cache is to be used. (conflicting arguments are handled in\n        # `generation_config.validate()`)\n        if generation_config.use_cache is False:\n            return\n\n        # Quick escape route 3: model that only supports legacy caches = nothing to prepare\n        if not self._supports_default_dynamic_cache():\n            if generation_config.cache_implementation is not None:\n                warnings.warn(\n                    \"This model does not support `Cache` instances, it only supports the legacy cache format (tuple \"\n                    f\"of tuples). `cache_implementation` (set to {generation_config.cache_implementation}) will be \"\n                    \"ignored.\",\n                    UserWarning,\n                )\n            return\n\n        # Otherwise we NEED to prepare a cache, based on `generation_config.cache_implementation`\n\n        # TODO(joao): support static caches in assisted generation. assisted generation needs to roll back caches,\n        # which is only supported in dynamic caches atm\n        if assistant_model is not None and generation_config.cache_implementation is not None:\n            logger.warning_once(\n                \"An assistant model is provided, using a dynamic cache instead of a cache of type=\"\n                f\"'{generation_config.cache_implementation}'.\"\n            )\n            generation_config.cache_implementation = None\n\n        if generation_config.cache_implementation is not None:\n            if generation_config.cache_implementation in NEED_SETUP_CACHE_CLASSES_MAPPING:\n                if generation_config.cache_implementation == \"static\" and not self._supports_static_cache:\n                    raise ValueError(\n                        \"This model does not support `cache_implementation='static'`. Please check the following \"\n                        \"issue: https://github.com/huggingface/transformers/issues/28981\"\n                    )\n                model_kwargs[cache_name] = self._get_cache(\n                    cache_implementation=generation_config.cache_implementation,\n                    batch_size=max(generation_config.num_beams, generation_config.num_return_sequences) * batch_size,\n                    max_cache_len=max_cache_length,\n                    device=device,\n                    model_kwargs=model_kwargs,\n                )\n            elif generation_config.cache_implementation == \"quantized\":\n                if not self._supports_quantized_cache:\n                    raise ValueError(\n                        \"This model does not support the quantized cache. If you want your model to support quantized \"\n                        \"cache, please open an issue and tag @zucchini-nlp.\"\n                    )\n\n                cache_config = (\n                    generation_config.cache_config\n                    if generation_config.cache_config is not None\n                    else QuantizedCacheConfig()\n                )\n                cache_class = QUANT_BACKEND_CLASSES_MAPPING[cache_config.backend]\n\n                # if cache_config.backend == \"quanto\" and not (is_optimum_quanto_available() or is_quanto_available()):\n                if cache_config.backend == \"quanto\" and not is_optimum_quanto_available():\n                    raise ImportError(\n                        \"You need to install optimum-quanto in order to use KV cache quantization with optimum-quanto backend. \"\n                        \"Please install it via  with `pip install optimum-quanto`\"\n                    )\n                elif cache_config.backend == \"HQQ\" and not is_hqq_available():\n                    raise ImportError(\n                        \"You need to install `HQQ` in order to use KV cache quantization with HQQ backend. \"\n                        \"Please install it via  with `pip install hqq`\"\n                    )\n\n                model_kwargs[cache_name] = cache_class(cache_config)\n            elif generation_config.cache_implementation == \"offloaded\":\n                model_kwargs[cache_name] = OffloadedCache()\n\n        # Use DynamicCache() instance by default. This will avoid back and forth from legacy format that\n        # keeps copying the cache thus using much more memory\n        else:\n            model_kwargs[cache_name] = (\n                DynamicCache()\n                if not requires_cross_attention_cache\n                else EncoderDecoderCache(DynamicCache(), DynamicCache())\n            )\n\n    def _supports_num_logits_to_keep(self) -> bool:\n        \"\"\"\n        Return True if the current model supports the keyword argument `num_logits_to_keep` in forward()\n        to save memory. Checking it in this way allows to avoid using a new model attribute.\n        \"\"\"\n        return \"num_logits_to_keep\" in set(inspect.signature(self.forward).parameters.keys())\n\n    def _prepare_special_tokens(\n        self,\n        generation_config: GenerationConfig,\n        kwargs_has_attention_mask: Optional[bool] = None,\n        device: Optional[Union[torch.device, str]] = None,\n    ):\n        \"\"\"\n        Prepares the special tokens for generation, overwriting the generation config with their processed versions\n        converted to tensor.\n\n        Note that `generation_config` is changed in place and stops being serializable after this method is called.\n        That is no problem if called within `generate` (`generation_config` is a local copy that doesn't leave the\n        function). However, if called outside `generate`, consider creating a copy of `generation_config` first.\n        \"\"\"\n\n        # Convert special tokens to tensors\n        def _tensor_or_none(token, device=None):\n            if token is None:\n                return token\n\n            device = device if device is not None else self.device\n            if isinstance(token, torch.Tensor):\n                return token.to(device)\n            return torch.tensor(token, device=device, dtype=torch.long)\n\n        bos_token_tensor = _tensor_or_none(generation_config.bos_token_id, device=device)\n        eos_token_tensor = _tensor_or_none(generation_config.eos_token_id, device=device)\n        pad_token_tensor = _tensor_or_none(generation_config.pad_token_id, device=device)\n        decoder_start_token_tensor = _tensor_or_none(generation_config.decoder_start_token_id, device=device)\n\n        # for BC we also try to get `decoder_start_token_id` or `bos_token_id` (#30892)\n        if self.config.is_encoder_decoder:\n            decoder_start_token_tensor = (\n                decoder_start_token_tensor if decoder_start_token_tensor is not None else bos_token_tensor\n            )\n\n        # We can have more than one eos token. Always treat it as a 1D tensor (when it exists).\n        if eos_token_tensor is not None and eos_token_tensor.ndim == 0:\n            eos_token_tensor = eos_token_tensor.unsqueeze(0)\n\n        # Set pad token if unset (and there are conditions to do so)\n        if pad_token_tensor is None and eos_token_tensor is not None:\n            if not is_torchdynamo_compiling():\n                if kwargs_has_attention_mask is not None and not kwargs_has_attention_mask:\n                    logger.warning(\n                        \"The attention mask and the pad token id were not set. As a consequence, you may observe \"\n                        \"unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.\"\n                    )\n                logger.warning(f\"Setting `pad_token_id` to `eos_token_id`:{pad_token_tensor} for open-end generation.\")\n            pad_token_tensor = eos_token_tensor[0]\n\n        # Sanity checks/warnings\n        if self.config.is_encoder_decoder and decoder_start_token_tensor is None:\n            raise ValueError(\n                \"`decoder_start_token_id` or `bos_token_id` has to be defined for encoder-decoder generation.\"\n            )\n        if not is_torchdynamo_compiling():  # Checks that depend on tensor-dependent control flow\n            if (\n                eos_token_tensor is not None\n                and isin_mps_friendly(elements=eos_token_tensor, test_elements=pad_token_tensor).any()\n            ):\n                if kwargs_has_attention_mask is not None and not kwargs_has_attention_mask:\n                    logger.warning_once(\n                        \"The attention mask is not set and cannot be inferred from input because pad token is same as \"\n                        \"eos token. As a consequence, you may observe unexpected behavior. Please pass your input's \"\n                        \"`attention_mask` to obtain reliable results.\"\n                    )\n            if eos_token_tensor is not None and (\n                torch.is_floating_point(eos_token_tensor) or (eos_token_tensor < 0).any()\n            ):\n                logger.warning(\n                    f\"`eos_token_id` should consist of positive integers, but is {eos_token_tensor}. Your generation \"\n                    \"will not stop until the maximum length is reached. Depending on other flags, it may even crash.\"\n                )\n\n        # Update generation config with the updated special tokens tensors\n        # NOTE: this must be written into a different attribute name than the one holding the original special tokens\n        # (in their non-tensor form), in order to enable end-to-end compilation. See\n        # https://pytorch.org/docs/stable/torch.compiler_cudagraph_trees.html#limitations\n        generation_config._bos_token_tensor = bos_token_tensor\n        generation_config._eos_token_tensor = eos_token_tensor\n        generation_config._pad_token_tensor = pad_token_tensor\n        generation_config._decoder_start_token_tensor = decoder_start_token_tensor\n\n    @torch.no_grad()\n    def generate(\n        self,\n        inputs: Optional[torch.Tensor] = None,\n        generation_config: Optional[GenerationConfig] = None,\n        logits_processor: Optional[LogitsProcessorList] = None,\n        stopping_criteria: Optional[StoppingCriteriaList] = None,\n        prefix_allowed_tokens_fn: Optional[Callable[[int, torch.Tensor], List[int]]] = None,\n        synced_gpus: Optional[bool] = None,\n        assistant_model: Optional[\"PreTrainedModel\"] = None,\n        streamer: Optional[\"BaseStreamer\"] = None,\n        negative_prompt_ids: Optional[torch.Tensor] = None,\n        negative_prompt_attention_mask: Optional[torch.Tensor] = None,\n        **kwargs,\n    ) -> Union[GenerateOutput, torch.LongTensor]:\n        r\"\"\"\n\n        Generates sequences of token ids for models with a language modeling head.\n\n        <Tip warning={true}>\n\n        Most generation-controlling parameters are set in `generation_config` which, if not passed, will be set to the\n        model's default generation configuration. You can override any `generation_config` by passing the corresponding\n        parameters to generate(), e.g. `.generate(inputs, num_beams=4, do_sample=True)`.\n\n        For an overview of generation strategies and code examples, check out the [following\n        guide](../generation_strategies).\n\n        </Tip>\n\n        Parameters:\n            inputs (`torch.Tensor` of varying shape depending on the modality, *optional*):\n                The sequence used as a prompt for the generation or as model inputs to the encoder. If `None` the\n                method initializes it with `bos_token_id` and a batch size of 1. For decoder-only models `inputs`\n                should be in the format of `input_ids`. For encoder-decoder models *inputs* can represent any of\n                `input_ids`, `input_values`, `input_features`, or `pixel_values`.\n            generation_config ([`~generation.GenerationConfig`], *optional*):\n                The generation configuration to be used as base parametrization for the generation call. `**kwargs`\n                passed to generate matching the attributes of `generation_config` will override them. If\n                `generation_config` is not provided, the default will be used, which has the following loading\n                priority: 1) from the `generation_config.json` model file, if it exists; 2) from the model\n                configuration. Please note that unspecified parameters will inherit [`~generation.GenerationConfig`]'s\n                default values, whose documentation should be checked to parameterize generation.\n            logits_processor (`LogitsProcessorList`, *optional*):\n                Custom logits processors that complement the default logits processors built from arguments and\n                generation config. If a logit processor is passed that is already created with the arguments or a\n                generation config an error is thrown. This feature is intended for advanced users.\n            stopping_criteria (`StoppingCriteriaList`, *optional*):\n                Custom stopping criteria that complements the default stopping criteria built from arguments and a\n                generation config. If a stopping criteria is passed that is already created with the arguments or a\n                generation config an error is thrown. If your stopping criteria depends on the `scores` input, make\n                sure you pass `return_dict_in_generate=True, output_scores=True` to `generate`. This feature is\n                intended for advanced users.\n            prefix_allowed_tokens_fn (`Callable[[int, torch.Tensor], List[int]]`, *optional*):\n                If provided, this function constraints the beam search to allowed tokens only at each step. If not\n                provided no constraint is applied. This function takes 2 arguments: the batch ID `batch_id` and\n                `input_ids`. It has to return a list with the allowed tokens for the next generation step conditioned\n                on the batch ID `batch_id` and the previously generated tokens `inputs_ids`. This argument is useful\n                for constrained generation conditioned on the prefix, as described in [Autoregressive Entity\n                Retrieval](https://arxiv.org/abs/2010.00904).\n            synced_gpus (`bool`, *optional*):\n                Whether to continue running the while loop until max_length. Unless overridden, this flag will be set\n                to `True` if using `FullyShardedDataParallel` or DeepSpeed ZeRO Stage 3 with multiple GPUs to avoid\n                deadlocking if one GPU finishes generating before other GPUs. Otherwise, defaults to `False`.\n            assistant_model (`PreTrainedModel`, *optional*):\n                An assistant model that can be used to accelerate generation. The assistant model must have the exact\n                same tokenizer. The acceleration is achieved when forecasting candidate tokens with the assistant model\n                is much faster than running generation with the model you're calling generate from. As such, the\n                assistant model should be much smaller.\n            streamer (`BaseStreamer`, *optional*):\n                Streamer object that will be used to stream the generated sequences. Generated tokens are passed\n                through `streamer.put(token_ids)` and the streamer is responsible for any further processing.\n            negative_prompt_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):\n                The negative prompt needed for some processors such as CFG. The batch size must match the input batch\n                size. This is an experimental feature, subject to breaking API changes in future versions.\n            negative_prompt_attention_mask (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):\n                Attention_mask for `negative_prompt_ids`.\n            kwargs (`Dict[str, Any]`, *optional*):\n                Ad hoc parametrization of `generation_config` and/or additional model-specific kwargs that will be\n                forwarded to the `forward` function of the model. If the model is an encoder-decoder model, encoder\n                specific kwargs should not be prefixed and decoder specific kwargs should be prefixed with *decoder_*.\n\n        Return:\n            [`~utils.ModelOutput`] or `torch.LongTensor`: A [`~utils.ModelOutput`] (if `return_dict_in_generate=True`\n            or when `config.return_dict_in_generate=True`) or a `torch.LongTensor`.\n\n                If the model is *not* an encoder-decoder model (`model.config.is_encoder_decoder=False`), the possible\n                [`~utils.ModelOutput`] types are:\n\n                    - [`~generation.GenerateDecoderOnlyOutput`],\n                    - [`~generation.GenerateBeamDecoderOnlyOutput`]\n\n                If the model is an encoder-decoder model (`model.config.is_encoder_decoder=True`), the possible\n                [`~utils.ModelOutput`] types are:\n\n                    - [`~generation.GenerateEncoderDecoderOutput`],\n                    - [`~generation.GenerateBeamEncoderDecoderOutput`]\n        \"\"\"\n\n        # 1. Handle `generation_config` and kwargs that might update it, and validate the `.generate()` call\n        self._validate_model_class()\n        tokenizer = kwargs.pop(\"tokenizer\", None)  # Pull this out first, we only use it for stopping criteria\n        assistant_tokenizer = kwargs.pop(\"assistant_tokenizer\", None)  # only used for assisted generation\n\n        generation_config, model_kwargs = self._prepare_generation_config(generation_config, **kwargs)\n        self._validate_model_kwargs(model_kwargs.copy())\n        self._validate_assistant(assistant_model, tokenizer, assistant_tokenizer)\n\n        # 2. Set generation parameters if not already defined\n        if synced_gpus is None:\n            synced_gpus = (is_deepspeed_zero3_enabled() or is_fsdp_managed_module(self)) and dist.get_world_size() > 1\n\n        logits_processor = logits_processor if logits_processor is not None else LogitsProcessorList()\n        stopping_criteria = stopping_criteria if stopping_criteria is not None else StoppingCriteriaList()\n\n        accepts_attention_mask = \"attention_mask\" in set(inspect.signature(self.forward).parameters.keys())\n        requires_attention_mask = \"encoder_outputs\" not in model_kwargs\n        kwargs_has_attention_mask = model_kwargs.get(\"attention_mask\", None) is not None\n\n        # 3. Define model inputs\n        inputs_tensor, model_input_name, model_kwargs = self._prepare_model_inputs(\n            inputs, generation_config.bos_token_id, model_kwargs\n        )\n        batch_size = inputs_tensor.shape[0]\n\n        device = inputs_tensor.device\n        self._prepare_special_tokens(generation_config, kwargs_has_attention_mask, device=device)\n\n        # decoder-only models must use left-padding for batched generation.\n        if not self.config.is_encoder_decoder and not is_torchdynamo_compiling():\n            # If `input_ids` was given, check if the last id in any sequence is `pad_token_id`\n            # Note: If using, `inputs_embeds` this check does not work, because we want to be more hands-off.\n            if (\n                generation_config._pad_token_tensor is not None\n                and batch_size > 1\n                and len(inputs_tensor.shape) == 2\n                and torch.sum(inputs_tensor[:, -1] == generation_config._pad_token_tensor) > 0\n            ):\n                logger.warning(\n                    \"A decoder-only architecture is being used, but right-padding was detected! For correct \"\n                    \"generation results, please set `padding_side='left'` when initializing the tokenizer.\"\n                )\n\n        # 4. Define other model kwargs\n        # decoder-only models with inputs_embeds forwarding must use caching (otherwise we can't detect whether we are\n        # generating the first new token or not, and we only want to use the embeddings for the first new token)\n        if not self.config.is_encoder_decoder and model_input_name == \"inputs_embeds\":\n            generation_config.use_cache = True\n\n        if not kwargs_has_attention_mask and requires_attention_mask and accepts_attention_mask:\n            model_kwargs[\"attention_mask\"] = self._prepare_attention_mask_for_generation(\n                inputs_tensor, generation_config._pad_token_tensor, generation_config._eos_token_tensor\n            )\n        elif kwargs_has_attention_mask:\n            # TODO (joao): generalize this check with other types of inputs\n            if model_input_name == \"input_ids\" and len(model_kwargs[\"attention_mask\"].shape) > 2:\n                raise ValueError(\"`attention_mask` passed to `generate` must be 2D.\")\n\n        if self.config.is_encoder_decoder and \"encoder_outputs\" not in model_kwargs:\n            # if model is encoder decoder encoder_outputs are created and added to `model_kwargs`\n            model_kwargs = self._prepare_encoder_decoder_kwargs_for_generation(\n                inputs_tensor, model_kwargs, model_input_name, generation_config\n            )\n\n        # 5. Prepare `input_ids` which will be used for auto-regressive generation\n        if self.config.is_encoder_decoder:\n            input_ids, model_kwargs = self._prepare_decoder_input_ids_for_generation(\n                batch_size=batch_size,\n                model_input_name=model_input_name,\n                model_kwargs=model_kwargs,\n                decoder_start_token_id=generation_config._decoder_start_token_tensor,\n                device=inputs_tensor.device,\n            )\n        else:\n            input_ids = inputs_tensor if model_input_name == \"input_ids\" else model_kwargs.pop(\"input_ids\")\n\n        if generation_config.token_healing:\n            input_ids = self.heal_tokens(input_ids, tokenizer)\n\n        if streamer is not None:\n            streamer.put(input_ids.cpu())\n\n        # 6. Prepare `max_length` depending on other stopping criteria.\n        input_ids_length = input_ids.shape[-1]\n        has_default_max_length = kwargs.get(\"max_length\") is None and generation_config.max_length is not None\n        has_default_min_length = kwargs.get(\"min_length\") is None and generation_config.min_length is not None\n        generation_config = self._prepare_generated_length(\n            generation_config=generation_config,\n            has_default_max_length=has_default_max_length,\n            has_default_min_length=has_default_min_length,\n            model_input_name=model_input_name,\n            inputs_tensor=inputs_tensor,\n            input_ids_length=input_ids_length,\n        )\n\n        # If the model supports `num_logits_to_keep` in forward(), set it to 1 to avoid computing the whole\n        # logit matrix. This can save a lot of memory during the first forward pass. Note that assisted decoding\n        # dynamically overrides this value as it can need more than the last token logits\n        if self._supports_num_logits_to_keep() and \"num_logits_to_keep\" not in model_kwargs:\n            model_kwargs[\"num_logits_to_keep\"] = 1\n\n        self._validate_generated_length(generation_config, input_ids_length, has_default_max_length)\n\n        # 7. Prepare the cache.\n        # - `model_kwargs` may be updated in place with a cache as defined by the parameters in `generation_config`.\n        # - different models have a different cache name expected by the model (default = \"past_key_values\")\n        # - `max_length`, prepared above, is used to determine the maximum cache length\n        # TODO (joao): remove `user_defined_cache` after v4.47 (remove default conversion to legacy format)\n        cache_name = \"past_key_values\" if \"mamba\" not in self.__class__.__name__.lower() else \"cache_params\"\n        user_defined_cache = model_kwargs.get(cache_name)\n        max_cache_length = generation_config.max_length\n        if (\n            inputs_tensor.shape[1] != input_ids_length\n            and model_input_name == \"inputs_embeds\"\n            and not self.config.is_encoder_decoder\n        ):\n            max_cache_length += inputs_tensor.shape[1]\n        self._prepare_cache_for_generation(\n            generation_config, model_kwargs, assistant_model, batch_size, max_cache_length, device\n        )\n\n        # 8. determine generation mode\n        generation_mode = generation_config.get_generation_mode(assistant_model)\n\n        if streamer is not None and (generation_config.num_beams > 1):\n            raise ValueError(\n                \"`streamer` cannot be used with beam search (yet!). Make sure that `num_beams` is set to 1.\"\n            )\n\n        if not is_torchdynamo_compiling() and self.device.type != input_ids.device.type:\n            warnings.warn(\n                \"You are calling .generate() with the `input_ids` being on a device type different\"\n                f\" than your model's device. `input_ids` is on {input_ids.device.type}, whereas the model\"\n                f\" is on {self.device.type}. You may experience unexpected behaviors or slower generation.\"\n                \" Please make sure that you have put `input_ids` to the\"\n                f\" correct device by calling for example input_ids = input_ids.to('{self.device.type}') before\"\n                \" running `.generate()`.\",\n                UserWarning,\n            )\n\n        # 9. prepare logits processors and stopping criteria\n        prepared_logits_processor = self._get_logits_processor(\n            generation_config=generation_config,\n            input_ids_seq_length=input_ids_length,\n            encoder_input_ids=inputs_tensor,\n            prefix_allowed_tokens_fn=prefix_allowed_tokens_fn,\n            logits_processor=logits_processor,\n            device=inputs_tensor.device,\n            model_kwargs=model_kwargs,\n            negative_prompt_ids=negative_prompt_ids,\n            negative_prompt_attention_mask=negative_prompt_attention_mask,\n        )\n        prepared_stopping_criteria = self._get_stopping_criteria(\n            generation_config=generation_config, stopping_criteria=stopping_criteria, tokenizer=tokenizer, **kwargs\n        )\n\n        # Set model_kwargs `use_cache` so we can use it later in forward runs\n        model_kwargs[\"use_cache\"] = generation_config.use_cache\n\n        # 10. go into different generation modes\n        if generation_mode == GenerationMode.ASSISTED_GENERATION:\n            if generation_config.num_return_sequences > 1:\n                raise ValueError(\n                    \"num_return_sequences has to be 1 when doing assisted generate, \"\n                    f\"but is {generation_config.num_return_sequences}.\"\n                )\n            if batch_size > 1:\n                raise ValueError(\"assisted generate is only supported for batch_size = 1\")\n            if not model_kwargs[\"use_cache\"]:\n                raise ValueError(\"assisted generate requires `use_cache=True`\")\n            if generation_config.cache_implementation in [\"static\", \"hybrid\", \"sliding_window\"]:\n                raise ValueError(\"assisted generate is not supported with Static cache classes`\")\n            if self._is_stateful:\n                # In assisted generation we need the ability to confirm whether the model would pick certain tokens,\n                # which is not possible with stateful models (they can't reset to a previous subset of generated text)\n                raise ValueError(\n                    f\"assisted generation is not supported with stateful models, such as {self.__class__.__name__}\"\n                )\n\n            # 11. Get the candidate generator, given the parameterization\n            candidate_generator = self._get_candidate_generator(\n                generation_config=generation_config,\n                input_ids=input_ids,\n                inputs_tensor=inputs_tensor,\n                assistant_model=assistant_model,\n                logits_processor=logits_processor,\n                target_tokenizer=tokenizer,\n                assistant_tokenizer=assistant_tokenizer,\n                model_kwargs=model_kwargs,\n            )\n\n            # 12. run assisted generate\n            result = self._assisted_decoding(\n                input_ids,\n                candidate_generator=candidate_generator,\n                logits_processor=prepared_logits_processor,\n                stopping_criteria=prepared_stopping_criteria,\n                generation_config=generation_config,\n                synced_gpus=synced_gpus,\n                streamer=streamer,\n                **model_kwargs,\n            )\n        elif generation_mode == GenerationMode.DOLA_GENERATION:\n            if self._is_stateful:\n                # DoLa decoding was not designed for stateful models, and would require some changes\n                raise ValueError(\n                    f\"dola decoding is not supported with stateful models, such as {self.__class__.__name__}\"\n                )\n            result = self._dola_decoding(\n                input_ids,\n                dola_layers=generation_config.dola_layers,\n                logits_processor=prepared_logits_processor,\n                stopping_criteria=prepared_stopping_criteria,\n                generation_config=generation_config,\n                synced_gpus=synced_gpus,\n                streamer=streamer,\n                **model_kwargs,\n            )\n\n        elif generation_mode == GenerationMode.CONTRASTIVE_SEARCH:\n            if not model_kwargs[\"use_cache\"]:\n                raise ValueError(\"Contrastive search requires `use_cache=True`\")\n            if self._is_stateful:\n                # Just like assisted generation, we need to be able to rollback to a previous state (see comment above)\n                raise ValueError(\n                    f\"contrastive search is not supported with stateful models, such as {self.__class__.__name__}\"\n                )\n\n            result = self._contrastive_search(\n                input_ids,\n                logits_processor=prepared_logits_processor,\n                stopping_criteria=prepared_stopping_criteria,\n                generation_config=generation_config,\n                synced_gpus=synced_gpus,\n                streamer=streamer,\n                **model_kwargs,\n            )\n\n        elif generation_mode in (GenerationMode.SAMPLE, GenerationMode.GREEDY_SEARCH):\n            # 11. expand input_ids with `num_return_sequences` additional sequences per batch\n            input_ids, model_kwargs = self._expand_inputs_for_generation(\n                input_ids=input_ids,\n                expand_size=generation_config.num_return_sequences,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n                **model_kwargs,\n            )\n\n            # 12. run sample (it degenerates to greedy search when `generation_config.do_sample=False`)\n            result = self._sample(\n                input_ids,\n                logits_processor=prepared_logits_processor,\n                stopping_criteria=prepared_stopping_criteria,\n                generation_config=generation_config,\n                synced_gpus=synced_gpus,\n                streamer=streamer,\n                **model_kwargs,\n            )\n\n        elif generation_mode in (GenerationMode.BEAM_SAMPLE, GenerationMode.BEAM_SEARCH):\n            # 11. prepare beam search scorer\n            beam_scorer = BeamSearchScorer(\n                batch_size=batch_size,\n                num_beams=generation_config.num_beams,\n                device=inputs_tensor.device,\n                length_penalty=generation_config.length_penalty,\n                do_early_stopping=generation_config.early_stopping,\n                num_beam_hyps_to_keep=generation_config.num_return_sequences,\n                max_length=generation_config.max_length,\n            )\n\n            # 12. interleave input_ids with `num_beams` additional sequences per batch\n            input_ids, model_kwargs = self._expand_inputs_for_generation(\n                input_ids=input_ids,\n                expand_size=generation_config.num_beams,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n                **model_kwargs,\n            )\n\n            # 13. run beam sample\n            result = self._beam_search(\n                input_ids,\n                beam_scorer,\n                logits_processor=prepared_logits_processor,\n                stopping_criteria=prepared_stopping_criteria,\n                generation_config=generation_config,\n                synced_gpus=synced_gpus,\n                **model_kwargs,\n            )\n\n        elif generation_mode == GenerationMode.GROUP_BEAM_SEARCH:\n            # 11. prepare beam search scorer\n            beam_scorer = BeamSearchScorer(\n                batch_size=batch_size,\n                num_beams=generation_config.num_beams,\n                device=inputs_tensor.device,\n                length_penalty=generation_config.length_penalty,\n                do_early_stopping=generation_config.early_stopping,\n                num_beam_hyps_to_keep=generation_config.num_return_sequences,\n                num_beam_groups=generation_config.num_beam_groups,\n                max_length=generation_config.max_length,\n            )\n            # 12. interleave input_ids with `num_beams` additional sequences per batch\n            input_ids, model_kwargs = self._expand_inputs_for_generation(\n                input_ids=input_ids,\n                expand_size=generation_config.num_beams,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n                **model_kwargs,\n            )\n            # 13. run beam search\n            result = self._group_beam_search(\n                input_ids,\n                beam_scorer,\n                logits_processor=prepared_logits_processor,\n                stopping_criteria=prepared_stopping_criteria,\n                generation_config=generation_config,\n                synced_gpus=synced_gpus,\n                **model_kwargs,\n            )\n\n        elif generation_mode == GenerationMode.CONSTRAINED_BEAM_SEARCH:\n            final_constraints = []\n            if generation_config.constraints is not None:\n                final_constraints = generation_config.constraints\n\n            if generation_config.force_words_ids is not None:\n\n                def typeerror():\n                    raise ValueError(\n                        \"`force_words_ids` has to either be a `List[List[List[int]]]` or `List[List[int]]` \"\n                        f\"of positive integers, but is {generation_config.force_words_ids}.\"\n                    )\n\n                if (\n                    not isinstance(generation_config.force_words_ids, list)\n                    or len(generation_config.force_words_ids) == 0\n                ):\n                    typeerror()\n\n                for word_ids in generation_config.force_words_ids:\n                    if isinstance(word_ids[0], list):\n                        if not isinstance(word_ids, list) or len(word_ids) == 0:\n                            typeerror()\n                        if any(not isinstance(token_ids, list) for token_ids in word_ids):\n                            typeerror()\n                        if any(\n                            any((not isinstance(token_id, int) or token_id < 0) for token_id in token_ids)\n                            for token_ids in word_ids\n                        ):\n                            typeerror()\n\n                        constraint = DisjunctiveConstraint(word_ids)\n                    else:\n                        if not isinstance(word_ids, list) or len(word_ids) == 0:\n                            typeerror()\n                        if any((not isinstance(token_id, int) or token_id < 0) for token_id in word_ids):\n                            typeerror()\n\n                        constraint = PhrasalConstraint(word_ids)\n                    final_constraints.append(constraint)\n\n            # 11. prepare beam search scorer\n            constrained_beam_scorer = ConstrainedBeamSearchScorer(\n                constraints=final_constraints,\n                batch_size=batch_size,\n                num_beams=generation_config.num_beams,\n                device=inputs_tensor.device,\n                length_penalty=generation_config.length_penalty,\n                do_early_stopping=generation_config.early_stopping,\n                num_beam_hyps_to_keep=generation_config.num_return_sequences,\n                max_length=generation_config.max_length,\n            )\n            # 12. interleave input_ids with `num_beams` additional sequences per batch\n            input_ids, model_kwargs = self._expand_inputs_for_generation(\n                input_ids=input_ids,\n                expand_size=generation_config.num_beams,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n                **model_kwargs,\n            )\n            # 13. run beam search\n            result = self._constrained_beam_search(\n                input_ids,\n                constrained_beam_scorer=constrained_beam_scorer,\n                logits_processor=prepared_logits_processor,\n                stopping_criteria=prepared_stopping_criteria,\n                generation_config=generation_config,\n                synced_gpus=synced_gpus,\n                **model_kwargs,\n            )\n\n        # Convert to legacy cache format if requested\n        if (\n            generation_config.return_legacy_cache is not False  # Should check for `True` after v4.47\n            and not is_torchdynamo_compiling()\n            and hasattr(result, \"past_key_values\")\n            and hasattr(result.past_key_values, \"to_legacy_cache\")\n            and result.past_key_values.to_legacy_cache is not None\n        ):\n            # handle BC (convert by default if he user hasn't passed a cache AND the cache is of the default type)\n            should_convert_cache = generation_config.return_legacy_cache\n            is_user_defined_cache = user_defined_cache is not None\n            is_default_cache_type = (\n                type(result.past_key_values) == DynamicCache  # noqa E721\n                or (\n                    isinstance(result.past_key_values, EncoderDecoderCache)\n                    and type(result.past_key_values.self_attention_cache) == DynamicCache  # noqa E721\n                    and type(result.past_key_values.cross_attention_cache) == DynamicCache  # noqa E721\n                )\n            )\n            if not is_user_defined_cache and is_default_cache_type:\n                logger.warning_once(\n                    \"From v4.47 onwards, when a model cache is to be returned, `generate` will return a `Cache` \"\n                    \"instance instead by default (as opposed to the legacy tuple of tuples format). If you want to \"\n                    \"keep returning the legacy format, please set `return_legacy_cache=True`.\"\n                )\n                should_convert_cache = True\n            if should_convert_cache:\n                result.past_key_values = result.past_key_values.to_legacy_cache()\n        return result\n\n    def _has_unfinished_sequences(\n        self,\n        this_peer_finished: bool,\n        synced_gpus: bool,\n        device: torch.device,\n        cur_len: Optional[int] = None,\n        max_length: Optional[int] = None,\n    ) -> bool:\n        \"\"\"\n        Returns whether there are still unfinished sequences in the device. The existence of unfinished sequences is\n        fed through `this_peer_finished`. ZeRO stage 3-friendly.\n        \"\"\"\n        # torch.compile does not support data-dependent control flow. This is a workaround to allow torch.compile,\n        # although we lose the ability to stop when all sequences return an EOS token (and other stopping criteria)\n        # TODO (joao): remove this when torch's support for control flow is not experimental (https://pytorch.org/docs/stable/generated/torch.cond.html)\n        if is_torchdynamo_compiling():\n            return cur_len < max_length\n        else:\n            if synced_gpus:\n                # Under synced_gpus the `forward` call must continue until all gpus complete their sequence.\n                # The following logic allows an early break if all peers finished generating their sequence\n                this_peer_finished_flag = torch.tensor(0.0 if this_peer_finished else 1.0).to(device)\n                # send 0.0 if we finished, 1.0 otherwise\n                dist.all_reduce(this_peer_finished_flag, op=dist.ReduceOp.SUM)\n                # did all peers finish? the reduced sum will be 0.0 then\n                if this_peer_finished_flag.item() == 0.0:\n                    return False\n            elif this_peer_finished:\n                return False\n            return True\n\n    def heal_tokens(\n        self, input_ids: torch.LongTensor, tokenizer: Optional[\"PreTrainedTokenizerBase\"] = None\n    ) -> torch.LongTensor:\n        r\"\"\"\n        Generates sequences of token ids for models with a language modeling head.\n        Parameters:\n            input_ids (`torch.LongTensor`): The sequence used as a prompt for the generation.\n            tokenizer (`PreTrainedTokenizerBase`, *optional*): The tokenizer used to decode the input ids.\n        Return:\n            `torch.LongTensor` where each sequence has its tail token replaced with its appropriate extension.\n        \"\"\"\n        if tokenizer is None:\n            raise ValueError(\n                \" When generating with token healing, you must pass the model's tokenizer to the `tokenizer` \"\n                \"argument of `generate`.\"\n            )\n\n        bos_token_id, pad_token_id = tokenizer.bos_token_id, tokenizer.pad_token_id\n        vocab_trie = ExtensionsTrie(tokenizer.get_vocab())\n        generation_config = GenerationConfig(max_new_tokens=1, pad_token_id=pad_token_id)\n\n        # assumption: leading/trailing whitespace is not meaningful, so the prompts are\n        # stripped before re-tokenizing to desensitize generation to whitespace artefacts\n        prompts = [p.strip() for p in tokenizer.batch_decode(input_ids, skip_special_tokens=True)]\n        input_ids = tokenizer(\n            prompts,\n            return_tensors=\"pt\",\n            padding=True,\n        ).input_ids.to(input_ids.device)\n\n        # replace bos with pad to not condition healing on it\n        input_ids = torch.where(input_ids == bos_token_id, pad_token_id, input_ids)\n\n        \"\"\"\n        the latter code assumes the input_ids is not empty,\n        input_id has to be checked if contains elements\n\t\t\"\"\"\n        if input_ids.numel() == 0:\n            return input_ids\n\n        tail_ids = input_ids[:, -1].tolist()\n\n        space_tok = tokenizer.convert_ids_to_tokens(tokenizer.convert_tokens_to_ids(\" \"))[0]\n        # tail tokens are used for a prefix search, thus, whitespaces are replaced with\n        # their tokenization (e.g. 'Ġ') to enable search for tokens prefixed with a whitespace\n        tail_toks = (tokenizer.decode(t).replace(\" \", space_tok) for t in tail_ids)\n\n        for batch_idx, (tail_id, tail_tok) in enumerate(zip(tail_ids, tail_toks)):\n            batch_ids = input_ids[batch_idx]\n            if torch.all(batch_ids == pad_token_id).item():\n                continue  # skip empty sequences (all pad ids)\n\n            # apply bias for alternatives (extensions) to the tail token\n            \"\"\"\n            seq_bias key has to be tuple with int so have to use\n            tokenizer function to convert str to int\n\t\t\t\"\"\"\n            seq_bias = {\n                (tokenizer.convert_tokens_to_ids(alt_tok),): 10.0 for alt_tok in vocab_trie.extensions(prefix=tail_tok)\n            }\n\n            if len(seq_bias) == 1:\n                continue  # skip if there are no token alternatives to heal with\n\n            # slightly favor original token to limit aggressive healing e.g. 'http' -> 'https'\n            seq_bias[(tail_id,)] += 1.0\n            generation_config.update(sequence_bias=seq_bias)\n\n            trimmed_ids = batch_ids[:-1]\n\n            \"\"\"\n            the latter code assumes trimmed_ids is not empty\n            so have to check the its element count\n\t\t\t\"\"\"\n            if trimmed_ids.numel() == 0:\n                continue\n\n            # if the prompt is a single (non-pad) token, regenerate from bos\n            if len(batch_ids[batch_ids != pad_token_id]) == 1:\n                trimmed_ids[-1] = bos_token_id\n\n            input_ids[batch_idx] = self.generate(trimmed_ids.unsqueeze(0), generation_config=generation_config)\n\n        return input_ids\n\n    def _dola_decoding(\n        self,\n        input_ids: torch.LongTensor,\n        dola_layers: Union[str, List[int]],\n        logits_processor: LogitsProcessorList,\n        stopping_criteria: StoppingCriteriaList,\n        generation_config: GenerationConfig,\n        synced_gpus: bool,\n        streamer: \"BaseStreamer\",\n        **model_kwargs,\n    ) -> Union[GenerateNonBeamOutput, torch.LongTensor]:\n        r\"\"\"\n        Generates sequences of token ids for models with a language modeling head using **dola decoding** and can be\n        used for decoder-only text models.\n        The method is based on the paper \"DoLa: Decoding by Contrasting Layers Improves Factuality in Large Language\n        Models\" (https://arxiv.org/abs/2309.03883) in ICLR 2024.\n\n        Parameters:\n            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):\n                The sequence used as a prompt for the generation.\n            dola_layers (`Union[str, List[int]]`):\n                The candidate layers used in contrasting layers of DoLa. It can be either 1) 'low' or 'high', which\n                means the lower part or higher part of the model layers, respectively, or 2) a list of layer indices\n                to be used for candidate layers. The 0-th layer is the word embedding layer of the model.\n            logits_processor (`LogitsProcessorList`):\n                An instance of [`LogitsProcessorList`]. List of instances of class derived from [`LogitsProcessor`]\n                used to modify the prediction scores of the language modeling head applied at each generation step.\n            stopping_criteria (`StoppingCriteriaList`, *optional*):\n                An instance of [`StoppingCriteriaList`]. List of instances of class derived from [`StoppingCriteria`]\n                used to tell if the generation loop should stop.\n            generation_config ([`~generation.GenerationConfig`]):\n                The generation configuration to be used as parametrization of the decoding method.\n            synced_gpus (`bool`):\n                Whether to continue running the while loop until max_length (needed to avoid deadlocking with\n                `FullyShardedDataParallel` and DeepSpeed ZeRO Stage 3).\n            streamer (`BaseStreamer`, *optional*):\n                Streamer object that will be used to stream the generated sequences. Generated tokens are passed\n                through `streamer.put(token_ids)` and the streamer is responsible for any further processing.\n            model_kwargs:\n                Additional model specific keyword arguments will be forwarded to the `forward` function of the model.\n                If model is an encoder-decoder model the kwargs should include `encoder_outputs`.\n\n        Return:\n            [`~generation.GenerateDecoderOnlyOutput`], [`~generation.GenerateEncoderDecoderOutput`]\n            or `torch.LongTensor`: A `torch.LongTensor` containing the generated tokens (default behaviour) or a\n            [`~generation.GenerateDecoderOnlyOutput`] if `model.config.is_encoder_decoder=False` and\n            `return_dict_in_generate=True` or a [`~generation.GenerateEncoderDecoderOutput`] if\n            `model.config.is_encoder_decoder=True`.\n        \"\"\"\n\n        if self.config.is_encoder_decoder:\n            raise ValueError(\"DoLa decoding is only available for decoder-only models.\")\n        # init values\n\n        pad_token_id = generation_config._pad_token_tensor\n        output_attentions = generation_config.output_attentions\n        output_hidden_states = generation_config.output_hidden_states\n        output_scores = generation_config.output_scores\n        output_logits = generation_config.output_logits\n        return_dict_in_generate = generation_config.return_dict_in_generate\n        has_eos_stopping_criteria = any(hasattr(criteria, \"eos_token_id\") for criteria in stopping_criteria)\n        do_sample = generation_config.do_sample\n\n        # init attention / hidden states / scores tuples\n        scores = () if (return_dict_in_generate and output_scores) else None\n        raw_logits = () if (return_dict_in_generate and output_logits) else None\n        decoder_attentions = () if (return_dict_in_generate and output_attentions) else None\n        cross_attentions = () if (return_dict_in_generate and output_attentions) else None\n        decoder_hidden_states = () if (return_dict_in_generate and output_hidden_states) else None\n\n        # keep track of which sequences are already finished\n        batch_size = input_ids.shape[0]\n        unfinished_sequences = torch.ones(batch_size, dtype=torch.long, device=input_ids.device)\n        model_kwargs = self._get_initial_cache_position(input_ids, model_kwargs)\n\n        this_peer_finished = False\n\n        # prepare layers for DoLa decoding\n        final_layer = self.config.get_text_config().num_hidden_layers\n        # if the model has tied word embeddings, we skip the word embeddings (0-th) layer and start from the 2nd layer,\n        # as the early exit from word embeddings will become identity function\n        # if the model is really shallow (<=2 layers), we use the 1st layer if it's not the final layer and the 0-th\n        # layer otherwise. Notice that DoLa does not help shallow models much.\n        if not self.config.tie_word_embeddings:\n            start_layer = 0\n        elif final_layer > 2:\n            start_layer = 2\n        elif final_layer == 2:\n            start_layer = 1\n        else:\n            start_layer = 0\n\n        # For `N`-layer models with `N <= 40` layers, the layers of `range(0, N // 2, 2)` and `range(N // 2, N, 2)`\n        # are used for `'low'` and `'high'` layers, respectively.\n        # For models with `N > 40` layers, the layers of `range(0, 20, 2)` and `range(N - 20, N, 2)` are used for\n        # `'low'` and `'high'` layers, respectively.\n        if isinstance(dola_layers, str) and dola_layers == \"low\":\n            if start_layer == final_layer // 2:\n                candidate_premature_layers = [start_layer]\n            else:\n                candidate_premature_layers = (\n                    list(range(start_layer, final_layer // 2, 2))\n                    if final_layer <= 40\n                    else list(range(start_layer, 20, 2))\n                )\n        elif isinstance(dola_layers, str) and dola_layers == \"high\":\n            candidate_premature_layers = (\n                list(range(final_layer // 2, final_layer, 2))\n                if final_layer <= 40\n                else list(range(final_layer - 20, final_layer, 2))\n            )\n        # Set the `dola_layers` to a list of integers for layer indices to contrast manually specified layers.\n        elif isinstance(dola_layers, list):\n            candidate_premature_layers = [i for i in dola_layers if i < final_layer]\n        else:\n            raise ValueError(\"dola_layers must be either 'low', 'high' or a list of integers.\")\n\n        lm_head = self.get_output_embeddings()\n        if lm_head is None:\n            raise ValueError(\"DoLa is not supported for models that don't have output embeddings.\")\n\n        while self._has_unfinished_sequences(this_peer_finished, synced_gpus, device=input_ids.device):\n            # prepare model inputs\n            model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)\n\n            # forward pass to get next token\n            outputs = self(\n                **model_inputs,\n                return_dict=True,\n                output_attentions=output_attentions,\n                output_hidden_states=True,\n            )\n\n            # .float() is needed to retain precision for later logits manipulations\n            final_layer_next_token_logits = outputs.logits[:, -1, :].detach().clone().float()\n            final_logits = outputs.logits[:, -1, :].float()\n            candidate_premature_logits = {}\n            for candidate_premature_layer in candidate_premature_layers:\n                candidate_premature_logits[candidate_premature_layer] = lm_head(\n                    outputs.hidden_states[candidate_premature_layer][:, -1, :]\n                ).to(final_logits.device)\n\n            # synced_gpus: don't waste resources running the code we don't need; kwargs must be updated before skipping\n            model_kwargs = self._update_model_kwargs_for_generation(\n                outputs,\n                model_kwargs,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n            )\n            if synced_gpus and this_peer_finished:\n                continue\n\n            next_token_logits = _dola_select_contrast(\n                candidate_premature_layers, candidate_premature_logits, final_logits\n            )\n            next_token_logits = next_token_logits.to(input_ids.device)\n            # pre-process distribution\n            next_token_scores = logits_processor(input_ids, next_token_logits)\n\n            # Store scores, attentions and hidden_states when required\n            if return_dict_in_generate:\n                if output_scores:\n                    scores += (next_token_scores,)\n                if output_logits:\n                    raw_logits += (final_layer_next_token_logits,)\n                if output_attentions:\n                    decoder_attentions += (\n                        (outputs.decoder_attentions,) if self.config.is_encoder_decoder else (outputs.attentions,)\n                    )\n                    if self.config.is_encoder_decoder:\n                        cross_attentions += (outputs.cross_attentions,)\n\n                if output_hidden_states:\n                    decoder_hidden_states += (\n                        (outputs.decoder_hidden_states,)\n                        if self.config.is_encoder_decoder\n                        else (outputs.hidden_states,)\n                    )\n\n            if do_sample:  # sample\n                probs = nn.functional.softmax(next_token_scores, dim=-1)\n                next_tokens = torch.multinomial(probs, num_samples=1).squeeze(1)\n            else:  # argmax\n                next_tokens = torch.argmax(next_token_scores, dim=-1)\n\n            # finished sentences should have their next token be a padding token\n            if has_eos_stopping_criteria:\n                next_tokens = next_tokens * unfinished_sequences + pad_token_id * (1 - unfinished_sequences)\n\n            # update generated ids, model inputs, and length for next step\n            input_ids = torch.cat([input_ids, next_tokens[:, None]], dim=-1)\n            if streamer is not None:\n                streamer.put(next_tokens.cpu())\n\n            # stop when each sentence is finished\n            unfinished_sequences = unfinished_sequences & ~stopping_criteria(input_ids, scores)\n            this_peer_finished = unfinished_sequences.max() == 0\n\n        if streamer is not None:\n            streamer.end()\n\n        if return_dict_in_generate:\n            return GenerateDecoderOnlyOutput(\n                sequences=input_ids,\n                scores=scores,\n                logits=raw_logits,\n                attentions=decoder_attentions,\n                hidden_states=decoder_hidden_states,\n                past_key_values=model_kwargs.get(\"past_key_values\"),\n            )\n        else:\n            return input_ids\n\n    @torch.no_grad()\n    def _contrastive_search(\n        self,\n        input_ids: torch.LongTensor,\n        logits_processor: LogitsProcessorList,\n        stopping_criteria: StoppingCriteriaList,\n        generation_config: GenerationConfig,\n        synced_gpus: bool,\n        streamer: Optional[\"BaseStreamer\"],\n        **model_kwargs,\n    ) -> Union[GenerateNonBeamOutput, torch.LongTensor]:\n        r\"\"\"\n        Generates sequences of token ids for models with a language modeling head using **contrastive search** and can\n        be used for text-decoder, text-to-text, speech-to-text, and vision-to-text models.\n\n        Parameters:\n            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):\n                The sequence used as a prompt for the generation.\n            logits_processor (`LogitsProcessorList`):\n                An instance of [`LogitsProcessorList`]. List of instances of class derived from [`LogitsProcessor`]\n                used to modify the prediction scores of the language modeling head applied at each generation step.\n            stopping_criteria (`StoppingCriteriaList`):\n                An instance of [`StoppingCriteriaList`]. List of instances of class derived from [`StoppingCriteria`]\n                used to tell if the generation loop should stop.\n            generation_config ([`~generation.GenerationConfig`]):\n                The generation configuration to be used as parametrization of the decoding method.\n            synced_gpus (`bool`):\n                Whether to continue running the while loop until max_length (needed to avoid deadlocking with\n                `FullyShardedDataParallel` and DeepSpeed ZeRO Stage 3).\n            streamer (`BaseStreamer`, *optional*):\n                Streamer object that will be used to stream the generated sequences. Generated tokens are passed\n                through `streamer.put(token_ids)` and the streamer is responsible for any further processing.\n            model_kwargs:\n                Additional model specific keyword arguments will be forwarded to the `forward` function of the model.\n                If model is an encoder-decoder model the kwargs should include `encoder_outputs`.\n\n        Return:\n            [`~generation.GenerateDecoderOnlyOutput`], [`~generation.GenerateEncoderDecoderOutput`]\n            or `torch.LongTensor`: A `torch.LongTensor` containing the generated tokens (default behaviour) or a\n            [`~generation.GenerateDecoderOnlyOutput`] if `model.config.is_encoder_decoder=False` and\n            `return_dict_in_generate=True` or a [`~generation.GenerateEncoderDecoderOutput`] if\n            `model.config.is_encoder_decoder=True`.\n        \"\"\"\n        # init values\n        has_eos_stopping_criteria = any(hasattr(criteria, \"eos_token_id\") for criteria in stopping_criteria)\n        top_k = generation_config.top_k\n        penalty_alpha = generation_config.penalty_alpha\n        pad_token_id = generation_config._pad_token_tensor\n        output_attentions = generation_config.output_attentions\n        output_hidden_states = generation_config.output_hidden_states\n        output_scores = generation_config.output_scores\n        output_logits = generation_config.output_logits\n        return_dict_in_generate = generation_config.return_dict_in_generate\n        sequential = generation_config.low_memory\n\n        # init attention / hidden states / scores tuples\n        raw_logits = () if (return_dict_in_generate and output_logits) else None\n        scores = () if (return_dict_in_generate and output_scores) else None\n        decoder_attentions = () if (return_dict_in_generate and output_attentions) else None\n        cross_attentions = () if (return_dict_in_generate and output_attentions) else None\n        decoder_hidden_states = () if (return_dict_in_generate and output_hidden_states) else None\n\n        # if model is an encoder-decoder, retrieve encoder attention weights and hidden states\n        if return_dict_in_generate and self.config.is_encoder_decoder:\n            encoder_attentions = model_kwargs[\"encoder_outputs\"].get(\"attentions\") if output_attentions else None\n            encoder_hidden_states = (\n                model_kwargs[\"encoder_outputs\"].get(\"hidden_states\") if output_hidden_states else None\n            )\n\n        # keep track of which sequences are already finished\n        batch_size = input_ids.shape[0]\n        unfinished_sequences = torch.ones(batch_size, dtype=torch.long, device=input_ids.device)\n        model_kwargs = self._get_initial_cache_position(input_ids, model_kwargs)\n\n        # Create cosine_matrix_mask based on the attention_mask\n        cosine_matrix_mask = torch.ones_like(input_ids, dtype=torch.long)\n        if self.config.is_encoder_decoder:\n            if \"decoder_attention_mask\" in model_kwargs and model_kwargs[\"decoder_attention_mask\"] is not None:\n                cosine_matrix_mask = model_kwargs[\"decoder_attention_mask\"]\n        else:\n            cosine_matrix_mask = model_kwargs[\"attention_mask\"]\n        cosine_matrix_mask = cosine_matrix_mask.repeat_interleave(top_k, dim=0)\n\n        this_peer_finished = False\n\n        while self._has_unfinished_sequences(this_peer_finished, synced_gpus, device=input_ids.device):\n            # if the first step in the loop, encode all the prefix and obtain: (1) past_key_values;\n            # (2) last_hidden_states; (3) logit_for_next_step; (4) update model kwargs for the next step\n            if model_kwargs.get(\"past_key_values\") is None or (\n                isinstance(model_kwargs[\"past_key_values\"], (Cache, EncoderDecoderCache))\n                and model_kwargs[\"past_key_values\"].get_seq_length() == 0\n            ):\n                # prepare inputs\n                model_kwargs[\"use_cache\"] = True\n                model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)\n\n                # encode the given prefix and prepare model inputs; encoder-decoder model process the prefix and save\n                # the `encoder_outputs`\n                outputs = self(\n                    **model_inputs, return_dict=True, output_hidden_states=True, output_attentions=output_attentions\n                )\n\n                # last decoder hidden states will be used to compute the degeneration penalty (cosine similarity with\n                # previous tokens)\n                if self.config.is_encoder_decoder:\n                    last_hidden_states = outputs.decoder_hidden_states[-1]\n                else:\n                    last_hidden_states = outputs.hidden_states[-1]\n\n                # next logit for contrastive search to select top-k candidate tokens\n                # Clone is needed to avoid keeping a hanging ref to outputs.logits which may be very large for this first iteration\n                # (the clone itself is always small)\n                # .float() is needed to retain precision for later logits manipulations\n                logit_for_next_step = outputs.logits[:, -1, :].clone().float()\n                logit_for_next_step = logit_for_next_step.to(input_ids.device)\n\n                model_kwargs = self._update_model_kwargs_for_generation(\n                    outputs,\n                    model_kwargs,\n                    is_encoder_decoder=self.config.is_encoder_decoder,\n                )\n\n                if not sequential:\n                    # Expands model inputs top_k times, for batched forward passes (akin to beam search).\n                    _, model_kwargs = self._expand_inputs_for_generation(\n                        expand_size=top_k, is_encoder_decoder=self.config.is_encoder_decoder, **model_kwargs\n                    )\n\n                past_key_values = model_kwargs.get(\"past_key_values\")\n                if past_key_values is None:\n                    raise ValueError(\n                        f\"{self.__class__.__name__} does not support caching and therefore **can't** be used \"\n                        \"for contrastive search.\"\n                    )\n                elif (\n                    not isinstance(past_key_values[0], (tuple, torch.Tensor))\n                    or past_key_values[0][0].shape[0] != batch_size\n                ):\n                    raise ValueError(\n                        f\"{self.__class__.__name__} does not have a standard cache format and therefore **can't** be \"\n                        \"used for contrastive search without further modifications.\"\n                    )\n\n            # contrastive_search main logic start:\n            # contrastive search decoding consists of two steps: (1) candidate tokens recall; (2) candidate re-rank by\n            # degeneration penalty\n            processed_logit_for_next_step = logits_processor(input_ids, logit_for_next_step)\n            next_probs = nn.functional.softmax(processed_logit_for_next_step, dim=-1)\n\n            top_k_probs, top_k_ids = torch.topk(next_probs, dim=-1, k=top_k)\n\n            # Store scores, attentions and hidden_states when required\n            if return_dict_in_generate:\n                if output_logits:\n                    raw_logits += (logit_for_next_step,)\n                if output_scores:\n                    scores += (processed_logit_for_next_step,)\n                if output_attentions:\n                    decoder_attentions += (\n                        (outputs.decoder_attentions,) if self.config.is_encoder_decoder else (outputs.attentions,)\n                    )\n                    if self.config.is_encoder_decoder:\n                        cross_attentions += (outputs.cross_attentions,)\n\n                if output_hidden_states:\n                    decoder_hidden_states += (\n                        (outputs.decoder_hidden_states,)\n                        if self.config.is_encoder_decoder\n                        else (outputs.hidden_states,)\n                    )\n\n            # This is needed to properly delete outputs.logits which may be very large for this first iteration\n            # Otherwise a reference to outputs.logits is kept all along until after the next call to self.forward()\n            del outputs\n\n            if not sequential:\n                # Replicates the new past_key_values to match the `top_k` candidates\n                past = model_kwargs[\"past_key_values\"]\n                # If it is a static cache, modify it in-place layer after layer to save memory\n                if isinstance(past, DynamicCache) or (\n                    isinstance(past, EncoderDecoderCache) and isinstance(past.self_attention_cache, DynamicCache)\n                ):\n                    past.batch_repeat_interleave(top_k)\n                else:\n                    new_key_values = []\n                    for layer in past:\n                        items = []\n                        # item is either the key or the value matrix\n                        for item in layer:\n                            items.append(item.repeat_interleave(top_k, dim=0))\n                        new_key_values.append(tuple(items))\n\n                    past = tuple(new_key_values)\n\n                model_kwargs[\"past_key_values\"] = past\n\n            if sequential:\n                all_outputs = []\n                for i in range(top_k):\n                    # compute the candidate tokens by the language model and collect their hidden_states\n                    next_model_inputs = self.prepare_inputs_for_generation(top_k_ids[:, i].view(-1, 1), **model_kwargs)\n\n                    outputs = self(\n                        **next_model_inputs,\n                        return_dict=True,\n                        output_hidden_states=True,\n                        output_attentions=output_attentions,\n                    )\n                    if isinstance(outputs[\"past_key_values\"], DynamicCache) or (\n                        isinstance(outputs[\"past_key_values\"], EncoderDecoderCache)\n                        and isinstance(outputs[\"past_key_values\"].self_attention_cache, DynamicCache)\n                    ):\n                        # Remove past K-V from output since we don't need to stack later\n                        outputs[\"past_key_values\"] = None\n                        # Remove last token from past K-V since we don't want to append it at this point\n                        model_kwargs[\"past_key_values\"].crop(-1)\n\n                    all_outputs.append(outputs)\n                outputs = stack_model_outputs(all_outputs, self.config.get_text_config())\n\n            else:\n                # compute the candidate tokens by the language model and collect their hidden_states\n                # assembles top_k_ids into batch of size k\n                next_model_inputs = self.prepare_inputs_for_generation(top_k_ids.view(-1, 1), **model_kwargs)\n\n                outputs = self(\n                    **next_model_inputs,\n                    return_dict=True,\n                    output_hidden_states=True,\n                    output_attentions=output_attentions,\n                )\n\n            # This is essential to avoid having a last reference to the big past K-V and double the necessary memory\n            # in the next loop\n            del next_model_inputs\n\n            # name is different for encoder-decoder and decoder-only models\n            if self.config.is_encoder_decoder:\n                next_hidden = outputs.decoder_hidden_states[-1]\n                full_hidden_states = outputs.decoder_hidden_states\n            else:\n                next_hidden = outputs.hidden_states[-1]\n                full_hidden_states = outputs.hidden_states\n\n            # .float() is needed to retain precision for later logits manipulations\n            logits = outputs.logits[:, -1, :].float()\n            context_hidden = last_hidden_states.repeat_interleave(top_k, dim=0)\n\n            # compute the degeneration penalty and re-rank the candidates based on the degeneration penalty and the\n            # model confidence. Keeping `selected_idx` on CPU enables multi-device contrastive search and doesn't\n            # introduce (noticeable) slowdowns on single-device runs.\n            selected_idx = _ranking_fast(\n                context_hidden, next_hidden, top_k_probs, cosine_matrix_mask, penalty_alpha, top_k\n            )\n            cosine_matrix_mask = torch.cat(\n                [cosine_matrix_mask, cosine_matrix_mask.new_ones((cosine_matrix_mask.shape[0], 1))], dim=-1\n            )\n            selected_idx = selected_idx.to(\"cpu\")\n\n            # This will be used instead of the previous inneficient torch.stack(torch.split())\n            augmented_idx = torch.tensor([x + i * top_k for i, x in enumerate(selected_idx)])\n\n            # prepare for the next step: (1) next token_id; (2) past_key_values; (3) last_hidden_states for computing\n            # the degeneration penalty; (4) logits for selecting next top-k candidates; (5) selected tokens scores\n            # (model confidence minus degeneration penalty); (6) decoder hidden_states\n            next_tokens = top_k_ids[range(len(top_k_ids)), selected_idx]\n            next_hidden = torch.stack(torch.split(next_hidden.squeeze(dim=1), top_k))\n            next_hidden = next_hidden[range(batch_size), selected_idx, :]\n            last_hidden_states = torch.cat([last_hidden_states, next_hidden.unsqueeze(1)], dim=1)\n\n            next_decoder_hidden_states = ()\n            for layer in full_hidden_states:\n                layer = torch.stack(torch.split(layer, top_k))[range(batch_size), selected_idx, :]\n                next_decoder_hidden_states += (layer,)\n\n            # generate past_key_values cache of only the selected token\n            if sequential:\n                next_model_input = self.prepare_inputs_for_generation(\n                    top_k_ids[:, selected_idx].view(-1, 1), **model_kwargs\n                )\n\n                selected_outputs = self(\n                    **next_model_input,\n                    return_dict=True,\n                    output_hidden_states=False,\n                    output_attentions=False,\n                )\n                next_past_key_values = selected_outputs[\"past_key_values\"]\n\n            else:\n                _, next_past_key_values = self._extract_past_from_model_output(outputs)\n                # Do it in-place layer per layer to save memory\n                if isinstance(next_past_key_values, DynamicCache) or (\n                    isinstance(next_past_key_values, EncoderDecoderCache)\n                    and isinstance(next_past_key_values.self_attention_cache, DynamicCache)\n                ):\n                    next_past_key_values.batch_select_indices(augmented_idx)\n                else:\n                    new_key_values = []\n                    for layer in next_past_key_values:\n                        items = []\n                        # item is either the key or the value matrix\n                        for item in layer:\n                            items.append(item[augmented_idx, ...])\n                        new_key_values.append(tuple(items))\n\n                    next_past_key_values = tuple(new_key_values)\n\n            logit_for_next_step = torch.stack(torch.split(logits, top_k))[range(batch_size), selected_idx, :]\n            logit_for_next_step = logit_for_next_step.to(input_ids.device)\n\n            # Rebuilds the relevant parts of the model output for the selected token, for use in the next iteration\n            if self.config.is_encoder_decoder:\n                next_step_cross_attentions = ()\n                next_step_decoder_attentions = ()\n                if output_attentions:\n                    for layer in outputs.cross_attentions:\n                        layer = torch.stack(torch.split(layer, top_k, dim=0))[range(batch_size), selected_idx, ...]\n                        next_step_cross_attentions += (layer,)\n                    for layer in outputs.decoder_attentions:\n                        layer = torch.stack(torch.split(layer, top_k, dim=0))[range(batch_size), selected_idx, ...]\n                        next_step_decoder_attentions += (layer,)\n                outputs = Seq2SeqLMOutput(\n                    past_key_values=next_past_key_values,\n                    decoder_hidden_states=next_decoder_hidden_states,\n                    decoder_attentions=next_step_decoder_attentions or None,\n                    cross_attentions=next_step_cross_attentions or None,\n                )\n            else:\n                next_step_attentions = ()\n                if output_attentions:\n                    for layer in outputs.attentions:\n                        layer = torch.stack(torch.split(layer, top_k, dim=0))[range(batch_size), selected_idx, ...]\n                        next_step_attentions += (layer,)\n                outputs = CausalLMOutputWithPast(\n                    past_key_values=next_past_key_values,\n                    hidden_states=next_decoder_hidden_states,\n                    attentions=next_step_attentions or None,\n                )\n            # contrastive_search main logic end\n\n            # synced_gpus: don't waste resources running the code we don't need; kwargs must be updated before skipping\n            model_kwargs = self._update_model_kwargs_for_generation(\n                outputs,\n                model_kwargs,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n            )\n            if synced_gpus and this_peer_finished:\n                continue\n\n            # finished sentences should have their next token be a padding token\n            if has_eos_stopping_criteria:\n                next_tokens = next_tokens * unfinished_sequences + pad_token_id * (1 - unfinished_sequences)\n\n            # update generated ids, model inputs, and length for next step\n            input_ids = torch.cat([input_ids, next_tokens[:, None]], dim=-1)\n            if streamer is not None:\n                streamer.put(next_tokens.cpu())\n\n            # stop when each sentence is finished\n            unfinished_sequences = unfinished_sequences & ~stopping_criteria(input_ids, scores)\n            this_peer_finished = unfinished_sequences.max() == 0\n\n        if streamer is not None:\n            streamer.end()\n\n        if return_dict_in_generate:\n            # Contrastive search works by forward looking at the next token, so we need to exclude it from\n            # `past_key_values` to be consistent with the other decoding methods\n            if model_kwargs.get(\"past_key_values\") is not None:\n                if isinstance(model_kwargs[\"past_key_values\"], DynamicCache) or (\n                    isinstance(model_kwargs[\"past_key_values\"], EncoderDecoderCache)\n                    and isinstance(model_kwargs[\"past_key_values\"].self_attention_cache, DynamicCache)\n                ):\n                    model_kwargs[\"past_key_values\"].crop(-1)\n                else:\n                    past_key_values = []\n                    for layer in model_kwargs[\"past_key_values\"]:\n                        layer_past_key_values = []\n                        for item in layer:\n                            layer_past_key_values.append(item[..., :-1, :])\n                        past_key_values.append(tuple(layer_past_key_values))\n                    model_kwargs[\"past_key_values\"] = tuple(past_key_values)\n\n            if self.config.is_encoder_decoder:\n                return GenerateEncoderDecoderOutput(\n                    sequences=input_ids,\n                    scores=scores,\n                    logits=raw_logits,\n                    encoder_attentions=encoder_attentions,\n                    encoder_hidden_states=encoder_hidden_states,\n                    decoder_attentions=decoder_attentions,\n                    cross_attentions=cross_attentions,\n                    decoder_hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n            else:\n                return GenerateDecoderOnlyOutput(\n                    sequences=input_ids,\n                    scores=scores,\n                    logits=raw_logits,\n                    attentions=decoder_attentions,\n                    hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n        else:\n            return input_ids\n\n    def _sample(\n        self,\n        input_ids: torch.LongTensor,\n        logits_processor: LogitsProcessorList,\n        stopping_criteria: StoppingCriteriaList,\n        generation_config: GenerationConfig,\n        synced_gpus: bool,\n        streamer: Optional[\"BaseStreamer\"],\n        **model_kwargs,\n    ) -> Union[GenerateNonBeamOutput, torch.LongTensor]:\n        r\"\"\"\n        Generates sequences of token ids for models with a language modeling head using **multinomial sampling** and\n        can be used for text-decoder, text-to-text, speech-to-text, and vision-to-text models.\n\n        Parameters:\n            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):\n                The sequence used as a prompt for the generation.\n            logits_processor (`LogitsProcessorList`):\n                An instance of [`LogitsProcessorList`]. List of instances of class derived from [`LogitsProcessor`]\n                used to modify the prediction scores of the language modeling head applied at each generation step.\n            stopping_criteria (`StoppingCriteriaList`):\n                An instance of [`StoppingCriteriaList`]. List of instances of class derived from [`StoppingCriteria`]\n                used to tell if the generation loop should stop.\n            generation_config ([`~generation.GenerationConfig`]):\n                The generation configuration to be used as parametrization of the decoding method.\n            synced_gpus (`bool`):\n                Whether to continue running the while loop until max_length (needed to avoid deadlocking with\n                `FullyShardedDataParallel` and DeepSpeed ZeRO Stage 3).\n            streamer (`BaseStreamer`, *optional*):\n                Streamer object that will be used to stream the generated sequences. Generated tokens are passed\n                through `streamer.put(token_ids)` and the streamer is responsible for any further processing.\n            model_kwargs:\n                Additional model specific kwargs will be forwarded to the `forward` function of the model. If model is\n                an encoder-decoder model the kwargs should include `encoder_outputs`.\n\n        Return:\n            [`~generation.GenerateDecoderOnlyOutput`], [`~generation.GenerateEncoderDecoderOutput`] or `torch.LongTensor`:\n            A `torch.LongTensor` containing the generated tokens (default behaviour) or a\n            [`~generation.GenerateDecoderOnlyOutput`] if `model.config.is_encoder_decoder=False` and\n            `return_dict_in_generate=True` or a [`~generation.GenerateEncoderDecoderOutput`] if\n            `model.config.is_encoder_decoder=True`.\n        \"\"\"\n        # init values\n        pad_token_id = generation_config._pad_token_tensor\n        output_attentions = generation_config.output_attentions\n        output_hidden_states = generation_config.output_hidden_states\n        output_scores = generation_config.output_scores\n        output_logits = generation_config.output_logits\n        return_dict_in_generate = generation_config.return_dict_in_generate\n        max_length = generation_config.max_length\n        has_eos_stopping_criteria = any(hasattr(criteria, \"eos_token_id\") for criteria in stopping_criteria)\n        do_sample = generation_config.do_sample\n\n        # init attention / hidden states / scores tuples\n        scores = () if (return_dict_in_generate and output_scores) else None\n        raw_logits = () if (return_dict_in_generate and output_logits) else None\n        decoder_attentions = () if (return_dict_in_generate and output_attentions) else None\n        cross_attentions = () if (return_dict_in_generate and output_attentions) else None\n        decoder_hidden_states = () if (return_dict_in_generate and output_hidden_states) else None\n\n        # if model is an encoder-decoder, retrieve encoder attention weights and hidden states\n        if return_dict_in_generate and self.config.is_encoder_decoder:\n            encoder_attentions = model_kwargs[\"encoder_outputs\"].get(\"attentions\") if output_attentions else None\n            encoder_hidden_states = (\n                model_kwargs[\"encoder_outputs\"].get(\"hidden_states\") if output_hidden_states else None\n            )\n\n        # keep track of which sequences are already finished\n        batch_size, cur_len = input_ids.shape\n        this_peer_finished = False\n        unfinished_sequences = torch.ones(batch_size, dtype=torch.long, device=input_ids.device)\n        model_kwargs = self._get_initial_cache_position(input_ids, model_kwargs)\n\n        while self._has_unfinished_sequences(\n            this_peer_finished, synced_gpus, device=input_ids.device, cur_len=cur_len, max_length=max_length\n        ):\n            # prepare model inputs\n            model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)\n\n            # prepare variable output controls (note: some models won't accept all output controls)\n            model_inputs.update({\"output_attentions\": output_attentions} if output_attentions else {})\n            model_inputs.update({\"output_hidden_states\": output_hidden_states} if output_hidden_states else {})\n\n            # forward pass to get next token\n            outputs = self(**model_inputs, return_dict=True)\n\n            # synced_gpus: don't waste resources running the code we don't need; kwargs must be updated before skipping\n            model_kwargs = self._update_model_kwargs_for_generation(\n                outputs,\n                model_kwargs,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n            )\n            if synced_gpus and this_peer_finished:\n                continue\n\n            # Clone is needed to avoid keeping a hanging ref to outputs.logits which may be very large for first iteration\n            # (the clone itself is always small)\n            next_token_logits = outputs.logits.clone()[:, -1, :].float()\n            next_token_logits = next_token_logits.to(input_ids.device)\n\n            # pre-process distribution\n            next_token_scores = logits_processor(input_ids, next_token_logits)\n\n            # Store scores, attentions and hidden_states when required\n            if return_dict_in_generate:\n                if output_scores:\n                    scores += (next_token_scores,)\n                if output_logits:\n                    raw_logits += (next_token_logits,)\n                if output_attentions:\n                    decoder_attentions += (\n                        (outputs.decoder_attentions,) if self.config.is_encoder_decoder else (outputs.attentions,)\n                    )\n                    if self.config.is_encoder_decoder:\n                        cross_attentions += (outputs.cross_attentions,)\n\n                if output_hidden_states:\n                    decoder_hidden_states += (\n                        (outputs.decoder_hidden_states,)\n                        if self.config.is_encoder_decoder\n                        else (outputs.hidden_states,)\n                    )\n\n            # token selection\n            if do_sample:\n                probs = nn.functional.softmax(next_token_scores, dim=-1)\n                # TODO (joao): this OP throws \"skipping cudagraphs due to ['incompatible ops']\", find solution\n                next_tokens = torch.multinomial(probs, num_samples=1).squeeze(1)\n            else:\n                next_tokens = torch.argmax(next_token_scores, dim=-1)\n\n            # finished sentences should have their next token be a padding token\n            if has_eos_stopping_criteria:\n                next_tokens = next_tokens * unfinished_sequences + pad_token_id * (1 - unfinished_sequences)\n\n            # update generated ids, model inputs, and length for next step\n            input_ids = torch.cat([input_ids, next_tokens[:, None]], dim=-1)\n            if streamer is not None:\n                streamer.put(next_tokens.cpu())\n\n            unfinished_sequences = unfinished_sequences & ~stopping_criteria(input_ids, scores)\n            this_peer_finished = unfinished_sequences.max() == 0\n            cur_len += 1\n\n            # This is needed to properly delete outputs.logits which may be very large for first iteration\n            # Otherwise a reference to outputs is kept which keeps the logits alive in the next iteration\n            del outputs\n\n        if streamer is not None:\n            streamer.end()\n\n        if return_dict_in_generate:\n            if self.config.is_encoder_decoder:\n                return GenerateEncoderDecoderOutput(\n                    sequences=input_ids,\n                    scores=scores,\n                    logits=raw_logits,\n                    encoder_attentions=encoder_attentions,\n                    encoder_hidden_states=encoder_hidden_states,\n                    decoder_attentions=decoder_attentions,\n                    cross_attentions=cross_attentions,\n                    decoder_hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n            else:\n                return GenerateDecoderOnlyOutput(\n                    sequences=input_ids,\n                    scores=scores,\n                    logits=raw_logits,\n                    attentions=decoder_attentions,\n                    hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n        else:\n            return input_ids\n\n    def _temporary_reorder_cache(self, past_key_values, beam_idx):\n        \"\"\"\n        Temporary function to handle the different types of cache reordering processes while we roll out `Cache`.\n\n        TODO: standardize cache formats and make all models compatible with `Cache`. It would remove the need\n        for this function, with `Cache.reorder_cache` being the sole remaining code path\n        \"\"\"\n        model_class = self.__class__.__name__.lower()\n        # Exception 1: code path for models using the legacy cache format\n        if isinstance(past_key_values, (tuple, list)):\n            past_key_values = self._reorder_cache(past_key_values, beam_idx)\n        # Exception 2: models with different cache formats. These are limited to `DynamicCache` until their\n        # cache format is standardized, to avoid adding complexity to the codebase.\n        elif \"gptbigcode\" in model_class:\n            if not isinstance(past_key_values, (DynamicCache, EncoderDecoderCache)):\n                raise ValueError(\n                    f\"Using an unsupported cache format with {model_class}. Currently, it only supports the \"\n                    \"legacy tuple format or `DynamicCache`\"\n                )\n            past_key_values = self._reorder_cache(past_key_values, beam_idx)\n            past_key_values = DynamicCache.from_legacy_cache(past_key_values)\n        # Standard code path: use the `Cache.reorder_cache`\n        else:\n            past_key_values.reorder_cache(beam_idx)\n        return past_key_values\n\n    def _beam_search(\n        self,\n        input_ids: torch.LongTensor,\n        beam_scorer: BeamScorer,\n        logits_processor: LogitsProcessorList,\n        stopping_criteria: StoppingCriteriaList,\n        generation_config: GenerationConfig,\n        synced_gpus: bool,\n        **model_kwargs,\n    ) -> Union[GenerateBeamOutput, torch.LongTensor]:\n        r\"\"\"\n        Generates sequences of token ids for models with a language modeling head using **beam search decoding** and\n        can be used for text-decoder, text-to-text, speech-to-text, and vision-to-text models.\n\n        Parameters:\n            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):\n                The sequence used as a prompt for the generation.\n            beam_scorer (`BeamScorer`):\n                An derived instance of [`BeamScorer`] that defines how beam hypotheses are constructed, stored and\n                sorted during generation. For more information, the documentation of [`BeamScorer`] should be read.\n            logits_processor (`LogitsProcessorList`):\n                An instance of [`LogitsProcessorList`]. List of instances of class derived from [`LogitsProcessor`]\n                used to modify the prediction scores of the language modeling head applied at each generation step.\n            stopping_criteria (`StoppingCriteriaList`:\n                An instance of [`StoppingCriteriaList`]. List of instances of class derived from [`StoppingCriteria`]\n                used to tell if the generation loop should stop.\n            generation_config ([`~generation.GenerationConfig`]):\n                The generation configuration to be used as parametrization of the decoding method.\n            synced_gpus (`bool`):\n                Whether to continue running the while loop until max_length (needed to avoid deadlocking with\n                `FullyShardedDataParallel` and DeepSpeed ZeRO Stage 3).\n            model_kwargs:\n                Additional model specific kwargs will be forwarded to the `forward` function of the model. If model is\n                an encoder-decoder model the kwargs should include `encoder_outputs`.\n\n        Return:\n            [`generation.GenerateBeamDecoderOnlyOutput`], [`~generation.GenerateBeamEncoderDecoderOutput`] or\n            `torch.LongTensor`: A `torch.LongTensor` containing the generated tokens (default behaviour) or a\n            [`~generation.GenerateBeamDecoderOnlyOutput`] if `model.config.is_encoder_decoder=False` and\n            `return_dict_in_generate=True` or a [`~generation.GenerateBeamEncoderDecoderOutput`] if\n            `model.config.is_encoder_decoder=True`.\n        \"\"\"\n        # init values\n        pad_token_id = generation_config._pad_token_tensor\n        eos_token_id = generation_config._eos_token_tensor\n        output_attentions = generation_config.output_attentions\n        output_hidden_states = generation_config.output_hidden_states\n        output_scores = generation_config.output_scores\n        output_logits = generation_config.output_logits\n        return_dict_in_generate = generation_config.return_dict_in_generate\n        sequential = generation_config.low_memory\n        do_sample = generation_config.do_sample\n\n        batch_size = len(beam_scorer._beam_hyps)\n        num_beams = beam_scorer.num_beams\n\n        batch_beam_size, cur_len = input_ids.shape\n        model_kwargs = self._get_initial_cache_position(input_ids, model_kwargs)\n\n        if num_beams * batch_size != batch_beam_size:\n            raise ValueError(\n                f\"Batch dimension of `input_ids` should be {num_beams * batch_size}, but is {batch_beam_size}.\"\n            )\n\n        # init attention / hidden states / scores tuples\n        scores = () if (return_dict_in_generate and output_scores) else None\n        raw_logits = () if (return_dict_in_generate and output_logits) else None\n        beam_indices = (\n            tuple(() for _ in range(batch_beam_size)) if (return_dict_in_generate and output_scores) else None\n        )\n        decoder_attentions = () if (return_dict_in_generate and output_attentions) else None\n        cross_attentions = () if (return_dict_in_generate and output_attentions) else None\n        decoder_hidden_states = () if (return_dict_in_generate and output_hidden_states) else None\n\n        # if model is an encoder-decoder, retrieve encoder attention weights and hidden states\n        if return_dict_in_generate and self.config.is_encoder_decoder:\n            encoder_attentions = model_kwargs[\"encoder_outputs\"].get(\"attentions\") if output_attentions else None\n            encoder_hidden_states = (\n                model_kwargs[\"encoder_outputs\"].get(\"hidden_states\") if output_hidden_states else None\n            )\n\n        # initialise score of first beam with 0 and the rest with -1e9. This makes sure that only tokens\n        # of the first beam are considered to avoid sampling the exact same tokens across all beams.\n        beam_scores = torch.zeros((batch_size, num_beams), dtype=torch.float, device=input_ids.device)\n        beam_scores[:, 1:] = -1e9\n        beam_scores = beam_scores.view((batch_size * num_beams,))\n\n        this_peer_finished = False\n\n        decoder_prompt_len = input_ids.shape[-1]  # record the prompt length of decoder\n\n        while self._has_unfinished_sequences(this_peer_finished, synced_gpus, device=input_ids.device):\n\n            # print(\"model_kwargs: \", model_kwargs)\n            model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)\n\n            # prepare variable output controls (note: some models won't accept all output controls)\n            model_inputs.update({\"output_attentions\": output_attentions} if output_attentions else {})\n            model_inputs.update({\"output_hidden_states\": output_hidden_states} if output_hidden_states else {})\n\n            # if sequential is True, split the input to batches of batch_size and run sequentially\n            if sequential:\n                if any(\n                    model_name in self.__class__.__name__.lower()\n                    for model_name in [\n                        \"fsmt\",\n                        \"reformer\",\n                        \"ctrl\",\n                        \"gpt_bigcode\",\n                        \"transo_xl\",\n                        \"xlnet\",\n                        \"cpm\",\n                        \"jamba\",\n                    ]\n                ):\n                    raise RuntimeError(\n                        f\"Currently generation for {self.__class__.__name__} is not supported \"\n                        f\"for `low_memory beam_search`. Please open an issue on GitHub if you need this feature.\"\n                    )\n\n                inputs_per_sub_batches = _split_model_inputs(\n                    model_inputs,\n                    split_size=batch_size,\n                    full_batch_size=batch_beam_size,\n                    config=self.config.get_text_config(),\n                )\n                outputs_per_sub_batch = [\n                    self(**inputs_per_sub_batch, return_dict=True) for inputs_per_sub_batch in inputs_per_sub_batches\n                ]\n\n                outputs = stack_model_outputs(outputs_per_sub_batch, self.config.get_text_config())\n\n            else:  # Unchanged original behavior\n                outputs = self(**model_inputs, return_dict=True)\n\n            # synced_gpus: don't waste resources running the code we don't need; kwargs must be updated before skipping\n            model_kwargs = self._update_model_kwargs_for_generation(\n                outputs,\n                model_kwargs,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n            )\n            if synced_gpus and this_peer_finished:\n                cur_len = cur_len + 1\n                continue\n\n            # Clone is needed to avoid keeping a hanging ref to outputs.logits which may be very large for first iteration\n            # (the clone itself is always small)\n            # .float() is needed to retain precision for later logits manipulations\n            next_token_logits = outputs.logits[:, -1, :].clone().float()\n            next_token_logits = next_token_logits.to(input_ids.device)\n            next_token_scores = nn.functional.log_softmax(\n                next_token_logits, dim=-1\n            )  # (batch_size * num_beams, vocab_size)\n\n            next_token_scores_processed = logits_processor(input_ids, next_token_scores)\n            next_token_scores = next_token_scores_processed + beam_scores[:, None].expand_as(\n                next_token_scores_processed\n            )\n\n            # Store scores, attentions and hidden_states when required\n            if return_dict_in_generate:\n                if output_scores:\n                    scores += (next_token_scores_processed,)\n                if output_logits:\n                    raw_logits += (next_token_logits,)\n                if output_attentions:\n                    decoder_attentions += (\n                        (outputs.decoder_attentions,) if self.config.is_encoder_decoder else (outputs.attentions,)\n                    )\n                    if self.config.is_encoder_decoder:\n                        cross_attentions += (outputs.cross_attentions,)\n                if output_hidden_states:\n                    decoder_hidden_states += (\n                        (outputs.decoder_hidden_states,)\n                        if self.config.is_encoder_decoder\n                        else (outputs.hidden_states,)\n                    )\n\n            # reshape for beam search\n            vocab_size = next_token_scores.shape[-1]\n            next_token_scores = next_token_scores.view(batch_size, num_beams * vocab_size)\n\n            # Beam token selection: pick 1 + eos_token_id.shape[0] next tokens for each beam so we have at least 1\n            # non eos token per beam.\n            n_eos_tokens = eos_token_id.shape[0] if eos_token_id is not None else 0\n            n_tokens_to_keep = max(2, 1 + n_eos_tokens) * num_beams\n            if do_sample:\n                # import time\n                # start = time.time()\n                probs = nn.functional.softmax(next_token_scores, dim=-1)\n                next_tokens = torch.multinomial(probs, num_samples=n_tokens_to_keep)\n                next_token_scores = torch.gather(next_token_scores, -1, next_tokens)\n                next_token_scores, _indices = torch.sort(next_token_scores, descending=True, dim=1)\n                next_tokens = torch.gather(next_tokens, -1, _indices)\n                # print(\"*\"*20, probs.shape, n_tokens_to_keep, next_token_scores.shape, next_tokens.shape)\n                # print(\"*\"*20, time.time() - start)\n            else:\n                next_token_scores, next_tokens = torch.topk(\n                    next_token_scores, n_tokens_to_keep, dim=1, largest=True, sorted=True\n                )\n\n            next_indices = torch.div(next_tokens, vocab_size, rounding_mode=\"floor\")\n            next_tokens = next_tokens % vocab_size\n\n            # stateless\n            beam_outputs = beam_scorer.process(\n                input_ids,\n                next_token_scores,\n                next_tokens,\n                next_indices,\n                pad_token_id=pad_token_id,\n                eos_token_id=eos_token_id,\n                beam_indices=beam_indices,\n                decoder_prompt_len=decoder_prompt_len,\n            )\n\n            beam_scores = beam_outputs[\"next_beam_scores\"]\n            beam_next_tokens = beam_outputs[\"next_beam_tokens\"]\n            beam_idx = beam_outputs[\"next_beam_indices\"]\n\n            input_ids = torch.cat([input_ids[beam_idx, :], beam_next_tokens.unsqueeze(-1)], dim=-1)\n\n            # This is needed to properly delete outputs.logits which may be very large for first iteration\n            # Otherwise a reference to outputs is kept which keeps the logits alive in the next iteration\n            # IMPORTANT: Note that this should appear BEFORE the call to _reorder_cache() to save the maximum memory\n            # (that way the memory peak does not include outputs.logits)\n            del outputs\n\n            if model_kwargs.get(\"past_key_values\", None) is not None:\n                model_kwargs[\"past_key_values\"] = self._temporary_reorder_cache(\n                    model_kwargs[\"past_key_values\"], beam_idx\n                )\n\n            if return_dict_in_generate and output_scores:\n                beam_indices = tuple((beam_indices[beam_idx[i]] + (beam_idx[i],) for i in range(len(beam_indices))))\n\n            # increase cur_len\n            cur_len = cur_len + 1\n\n            if beam_scorer.is_done or all(stopping_criteria(input_ids, scores)):\n                this_peer_finished = True\n\n        sequence_outputs = beam_scorer.finalize(\n            input_ids,\n            beam_scores,\n            next_tokens,\n            next_indices,\n            pad_token_id=pad_token_id,\n            eos_token_id=eos_token_id,\n            max_length=stopping_criteria.max_length,\n            beam_indices=beam_indices,\n            decoder_prompt_len=decoder_prompt_len,\n        )\n\n        if return_dict_in_generate:\n            if not output_scores:\n                sequence_outputs[\"sequence_scores\"] = None\n\n            if self.config.is_encoder_decoder:\n                return GenerateBeamEncoderDecoderOutput(\n                    sequences=sequence_outputs[\"sequences\"],\n                    sequences_scores=sequence_outputs[\"sequence_scores\"],\n                    scores=scores,\n                    logits=raw_logits,\n                    beam_indices=sequence_outputs[\"beam_indices\"],\n                    encoder_attentions=encoder_attentions,\n                    encoder_hidden_states=encoder_hidden_states,\n                    decoder_attentions=decoder_attentions,\n                    cross_attentions=cross_attentions,\n                    decoder_hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n            else:\n                return GenerateBeamDecoderOnlyOutput(\n                    sequences=sequence_outputs[\"sequences\"],\n                    sequences_scores=sequence_outputs[\"sequence_scores\"],\n                    scores=scores,\n                    logits=raw_logits,\n                    beam_indices=sequence_outputs[\"beam_indices\"],\n                    attentions=decoder_attentions,\n                    hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n        else:\n            return sequence_outputs[\"sequences\"]\n\n    def _group_beam_search(\n        self,\n        input_ids: torch.LongTensor,\n        beam_scorer: BeamScorer,\n        logits_processor: LogitsProcessorList,\n        stopping_criteria: StoppingCriteriaList,\n        generation_config: GenerationConfig,\n        synced_gpus: bool,\n        **model_kwargs,\n    ):\n        r\"\"\"\n        Generates sequences of token ids for models with a language modeling head using **diverse beam search\n        decoding** and can be used for text-decoder, text-to-text, speech-to-text, and vision-to-text models.\n\n        Parameters:\n            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):\n                The sequence used as a prompt for the generation.\n            beam_scorer (`BeamScorer`):\n                An derived instance of [`BeamScorer`] that defines how beam hypotheses are constructed, stored and\n                sorted during generation. For more information, the documentation of [`BeamScorer`] should be read.\n            logits_processor (`LogitsProcessorList`):\n                An instance of [`LogitsProcessorList`]. List of instances of class derived from [`LogitsProcessor`]\n                used to modify the prediction scores of the language modeling head applied at each generation step.\n            stopping_criteria (`StoppingCriteriaList`):\n                An instance of [`StoppingCriteriaList`]. List of instances of class derived from [`StoppingCriteria`]\n                used to tell if the generation loop should stop.\n            generation_config ([`~generation.GenerationConfig`]):\n                The generation configuration to be used as parametrization of the decoding method.\n            synced_gpus (`bool`):\n                Whether to continue running the while loop until max_length (needed to avoid deadlocking with\n                `FullyShardedDataParallel` and DeepSpeed ZeRO Stage 3).\n            model_kwargs:\n                Additional model specific kwargs that will be forwarded to the `forward` function of the model. If\n                model is an encoder-decoder model the kwargs should include `encoder_outputs`.\n\n        Return:\n            [`~generation.GenerateBeamDecoderOnlyOutput`], [`~generation.GenerateBeamEncoderDecoderOutput`] or\n            `torch.LongTensor`: A `torch.LongTensor` containing the generated tokens (default behaviour) or a\n            [`~generation.GenerateBeamDecoderOnlyOutput`] if `model.config.is_encoder_decoder=False` and\n            `return_dict_in_generate=True` or a [`~generation.GenerateBeamEncoderDecoderOutput`] if\n            `model.config.is_encoder_decoder=True`.\n        \"\"\"\n        # init values\n        pad_token_id = generation_config._pad_token_tensor\n        eos_token_id = generation_config._eos_token_tensor\n        output_attentions = generation_config.output_attentions\n        output_hidden_states = generation_config.output_hidden_states\n        output_scores = generation_config.output_scores\n        output_logits = generation_config.output_logits\n        return_dict_in_generate = generation_config.return_dict_in_generate\n\n        num_beams = beam_scorer.num_beams\n        num_beam_groups = beam_scorer.num_beam_groups\n        num_sub_beams = num_beams // num_beam_groups\n        batch_size = len(beam_scorer._beam_hyps) // num_beam_groups\n        device = input_ids.device\n\n        batch_beam_size, cur_len = input_ids.shape\n        model_kwargs = self._get_initial_cache_position(input_ids, model_kwargs)\n\n        if return_dict_in_generate and output_scores:\n            beam_indices = [tuple(() for _ in range(num_sub_beams * batch_size)) for _ in range(num_beam_groups)]\n        else:\n            beam_indices = None\n\n        if num_beams * batch_size != batch_beam_size:\n            raise ValueError(\n                f\"Batch dimension of `input_ids` should be {num_beams * batch_size}, but is {batch_beam_size}.\"\n            )\n\n        # init attention / hidden states / scores tuples\n        scores = () if (return_dict_in_generate and output_scores) else None\n        raw_logits = () if (return_dict_in_generate and output_logits) else None\n        decoder_attentions = () if (return_dict_in_generate and output_attentions) else None\n        cross_attentions = () if (return_dict_in_generate and output_attentions) else None\n        decoder_hidden_states = () if (return_dict_in_generate and output_hidden_states) else None\n\n        # if model is an encoder-decoder, retrieve encoder attention weights and hidden states\n        if return_dict_in_generate and self.config.is_encoder_decoder:\n            encoder_attentions = model_kwargs[\"encoder_outputs\"].get(\"attentions\") if output_attentions else None\n            encoder_hidden_states = (\n                model_kwargs[\"encoder_outputs\"].get(\"hidden_states\") if output_hidden_states else None\n            )\n\n        # initialise score of first beam of each group with 0 and the rest with -1e9. This ensures that the beams in\n        # the same group don't produce same tokens every time.\n        beam_scores = torch.full((batch_size, num_beams), -1e9, dtype=torch.float, device=device)\n        beam_scores[:, ::num_sub_beams] = 0\n        beam_scores = beam_scores.view((batch_size * num_beams,))\n\n        this_peer_finished = False\n\n        decoder_prompt_len = input_ids.shape[-1]  # record the prompt length of decoder\n        while self._has_unfinished_sequences(this_peer_finished, synced_gpus, device=input_ids.device):\n            # predicted tokens in cur_len step\n            current_tokens = torch.zeros(batch_size * num_beams, dtype=input_ids.dtype, device=device)\n\n            # indices which will form the beams in the next time step\n            reordering_indices = torch.zeros(batch_size * num_beams, dtype=torch.long, device=device)\n\n            # do one decoder step on all beams of all sentences in batch\n            model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)\n\n            # prepare variable output controls (note: some models won't accept all output controls)\n            model_inputs.update({\"output_attentions\": output_attentions} if output_attentions else {})\n            model_inputs.update({\"output_hidden_states\": output_hidden_states} if output_hidden_states else {})\n\n            outputs = self(**model_inputs, return_dict=True)\n\n            # synced_gpus: don't waste resources running the code we don't need; kwargs must be updated before skipping\n            model_kwargs = self._update_model_kwargs_for_generation(\n                outputs,\n                model_kwargs,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n            )\n            if synced_gpus and this_peer_finished:\n                cur_len = cur_len + 1\n                continue\n\n            if output_scores:\n                processed_score = torch.zeros_like(outputs.logits[:, -1, :])\n            if output_logits:\n                # Clone is needed to avoid keeping a hanging ref to outputs.logits which may be very large for first iteration\n                # (the clone itself is always small)\n                raw_logit_score = outputs.logits[:, -1, :].clone()\n                raw_logit_score = raw_logit_score.to(input_ids.device)\n\n            for beam_group_idx in range(num_beam_groups):\n                group_start_idx = beam_group_idx * num_sub_beams\n                group_end_idx = min(group_start_idx + num_sub_beams, num_beams)\n                group_size = group_end_idx - group_start_idx\n\n                # indices of beams of current group among all sentences in batch\n                batch_group_indices = []\n\n                for batch_idx in range(batch_size):\n                    batch_group_indices.extend(\n                        [batch_idx * num_beams + idx for idx in range(group_start_idx, group_end_idx)]\n                    )\n                group_input_ids = input_ids[batch_group_indices]\n\n                # select outputs of beams of current group only\n                # No need to clone() the logits here as they will not retain outputs.logits at the end of the loop\n                # .float() is needed to retain precision for later logits manipulations\n                next_token_logits = outputs.logits[batch_group_indices, -1, :].float()\n                next_token_logits = next_token_logits.to(input_ids.device)\n\n                next_token_scores = nn.functional.log_softmax(\n                    next_token_logits, dim=-1\n                )  # (batch_size * group_size, vocab_size)\n                vocab_size = next_token_scores.shape[-1]\n\n                next_token_scores_processed = logits_processor(\n                    group_input_ids, next_token_scores, current_tokens=current_tokens, beam_group_idx=beam_group_idx\n                )\n                next_token_scores = next_token_scores_processed + beam_scores[batch_group_indices].unsqueeze(-1)\n                next_token_scores = next_token_scores.expand_as(next_token_scores_processed)\n\n                if output_scores:\n                    processed_score[batch_group_indices] = next_token_scores_processed\n\n                # reshape for beam search\n                next_token_scores = next_token_scores.view(batch_size, group_size * vocab_size)\n\n                # Sample 1 + len(eos_token_id) next tokens for each beam so we have at least 1 non eos token per beam.\n                n_eos_tokens = eos_token_id.shape[0] if eos_token_id is not None else 0\n                next_token_scores, next_tokens = torch.topk(\n                    next_token_scores, max(2, 1 + n_eos_tokens) * group_size, dim=1, largest=True, sorted=True\n                )\n\n                next_indices = torch.div(next_tokens, vocab_size, rounding_mode=\"floor\")\n                next_tokens = next_tokens % vocab_size\n\n                # stateless\n                process_beam_indices = sum(beam_indices, ()) if beam_indices is not None else None\n                beam_outputs = beam_scorer.process(\n                    group_input_ids,\n                    next_token_scores,\n                    next_tokens,\n                    next_indices,\n                    pad_token_id=pad_token_id,\n                    eos_token_id=eos_token_id,\n                    beam_indices=process_beam_indices,\n                    group_index=beam_group_idx,\n                    decoder_prompt_len=decoder_prompt_len,\n                )\n                beam_scores[batch_group_indices] = beam_outputs[\"next_beam_scores\"]\n                beam_next_tokens = beam_outputs[\"next_beam_tokens\"]\n                beam_idx = beam_outputs[\"next_beam_indices\"]\n\n                if return_dict_in_generate and output_scores:\n                    beam_indices[beam_group_idx] = tuple(\n                        beam_indices[beam_group_idx][beam_idx[i]] + (beam_idx[i],) for i in range(len(beam_indices[0]))\n                    )\n\n                input_ids[batch_group_indices] = group_input_ids[beam_idx]\n                group_input_ids = torch.cat([group_input_ids[beam_idx, :], beam_next_tokens.unsqueeze(-1)], dim=-1)\n                current_tokens[batch_group_indices] = group_input_ids[:, -1]\n\n                # (beam_idx // group_size) -> batch_idx\n                # (beam_idx % group_size) -> offset of idx inside the group\n                reordering_indices[batch_group_indices] = (\n                    num_beams * torch.div(beam_idx, group_size, rounding_mode=\"floor\")\n                    + group_start_idx\n                    + (beam_idx % group_size)\n                )\n\n            # Store scores, attentions and hidden_states when required\n            if return_dict_in_generate:\n                if output_scores:\n                    scores += (processed_score,)\n                if output_logits:\n                    raw_logits += (raw_logit_score,)\n                if output_attentions:\n                    decoder_attentions += (\n                        (outputs.decoder_attentions,) if self.config.is_encoder_decoder else (outputs.attentions,)\n                    )\n                    if self.config.is_encoder_decoder:\n                        cross_attentions += (outputs.cross_attentions,)\n\n                if output_hidden_states:\n                    decoder_hidden_states += (\n                        (outputs.decoder_hidden_states,)\n                        if self.config.is_encoder_decoder\n                        else (outputs.hidden_states,)\n                    )\n\n            input_ids = torch.cat([input_ids, current_tokens.unsqueeze(-1)], dim=-1)\n\n            # This is needed to properly delete outputs.logits which may be very large for first iteration\n            # Otherwise a reference to outputs is kept which keeps the logits alive in the next iteration\n            # IMPORTANT: Note that this should appear BEFORE the call to _reorder_cache() to save the maximum memory\n            # (that way the memory peak does not include outputs.logits)\n            del outputs\n\n            if model_kwargs.get(\"past_key_values\", None) is not None:\n                model_kwargs[\"past_key_values\"] = self._temporary_reorder_cache(\n                    model_kwargs[\"past_key_values\"], reordering_indices\n                )\n\n            # increase cur_len\n            cur_len = cur_len + 1\n\n            if beam_scorer.is_done or all(stopping_criteria(input_ids, scores)):\n                this_peer_finished = True\n\n        final_beam_indices = sum(beam_indices, ()) if beam_indices is not None else None\n        sequence_outputs = beam_scorer.finalize(\n            input_ids,\n            beam_scores,\n            next_tokens,\n            next_indices,\n            pad_token_id=pad_token_id,\n            eos_token_id=eos_token_id,\n            max_length=stopping_criteria.max_length,\n            beam_indices=final_beam_indices,\n            decoder_prompt_len=decoder_prompt_len,\n        )\n\n        if return_dict_in_generate:\n            if not output_scores:\n                sequence_outputs[\"sequence_scores\"] = None\n\n            if self.config.is_encoder_decoder:\n                return GenerateBeamEncoderDecoderOutput(\n                    sequences=sequence_outputs[\"sequences\"],\n                    sequences_scores=sequence_outputs[\"sequence_scores\"],\n                    scores=scores,\n                    logits=raw_logits,\n                    beam_indices=sequence_outputs[\"beam_indices\"],\n                    encoder_attentions=encoder_attentions,\n                    encoder_hidden_states=encoder_hidden_states,\n                    decoder_attentions=decoder_attentions,\n                    cross_attentions=cross_attentions,\n                    decoder_hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n            else:\n                return GenerateBeamDecoderOnlyOutput(\n                    sequences=sequence_outputs[\"sequences\"],\n                    sequences_scores=sequence_outputs[\"sequence_scores\"],\n                    scores=scores,\n                    logits=raw_logits,\n                    beam_indices=sequence_outputs[\"beam_indices\"],\n                    attentions=decoder_attentions,\n                    hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n        else:\n            return sequence_outputs[\"sequences\"]\n\n    def _constrained_beam_search(\n        self,\n        input_ids: torch.LongTensor,\n        constrained_beam_scorer: ConstrainedBeamSearchScorer,\n        logits_processor: LogitsProcessorList,\n        stopping_criteria: StoppingCriteriaList,\n        generation_config: GenerationConfig,\n        synced_gpus: bool,\n        **model_kwargs,\n    ) -> Union[GenerateBeamOutput, torch.LongTensor]:\n        r\"\"\"\n        Generates sequences of token ids for models with a language modeling head using **constrained beam search\n        decoding** and can be used for text-decoder, text-to-text, speech-to-text, and vision-to-text models.\n\n        Parameters:\n            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):\n                The sequence used as a prompt for the generation.\n            constrained_beam_scorer (`ConstrainedBeamSearchScorer`):\n                A derived instance of [`BeamScorer`] that defines how beam hypotheses are constructed, stored and\n                sorted during generation, while satisfying a list of positive constraints. For more information, the\n                documentation of [`ConstrainedBeamSearchScorer`] should be read.\n            logits_processor (`LogitsProcessorList`):\n                An instance of [`LogitsProcessorList`]. List of instances of class derived from [`LogitsProcessor`]\n                used to modify the prediction scores of the language modeling head applied at each generation step.\n            stopping_criteria (`StoppingCriteriaList`):\n                An instance of [`StoppingCriteriaList`]. List of instances of class derived from [`StoppingCriteria`]\n                used to tell if the generation loop should stop.\n            generation_config ([`~generation.GenerationConfig`]):\n                The generation configuration to be used as parametrization of the decoding method.\n            synced_gpus (`bool`):\n                Whether to continue running the while loop until max_length (needed to avoid deadlocking with\n                `FullyShardedDataParallel` and DeepSpeed ZeRO Stage 3).\n            model_kwargs:\n                Additional model specific kwargs will be forwarded to the `forward` function of the model. If model is\n                an encoder-decoder model the kwargs should include `encoder_outputs`.\n\n        Return:\n            [`~generation.GenerateBeamDecoderOnlyOutput`], [`~generation.GenerateBeamEncoderDecoderOutput`] or\n            `torch.LongTensor`: A `torch.LongTensor` containing the generated tokens (default behaviour) or a\n            [`~generation.GenerateBeamDecoderOnlyOutput`] if `model.config.is_encoder_decoder=False` and\n            `return_dict_in_generate=True` or a [`~generation.GenerateBeamEncoderDecoderOutput`] if\n            `model.config.is_encoder_decoder=True`.\n        \"\"\"\n        # init values\n        pad_token_id = generation_config._pad_token_tensor\n        eos_token_id = generation_config._eos_token_tensor\n        output_attentions = generation_config.output_attentions\n        output_hidden_states = generation_config.output_hidden_states\n        output_scores = generation_config.output_scores\n        output_logits = generation_config.output_logits\n        return_dict_in_generate = generation_config.return_dict_in_generate\n\n        batch_size = len(constrained_beam_scorer._beam_hyps)\n        num_beams = constrained_beam_scorer.num_beams\n\n        batch_beam_size, cur_len = input_ids.shape\n        model_kwargs = self._get_initial_cache_position(input_ids, model_kwargs)\n\n        if num_beams * batch_size != batch_beam_size:\n            raise ValueError(\n                f\"Batch dimension of `input_ids` should be {num_beams * batch_size}, but is {batch_beam_size}.\"\n            )\n\n        # init attention / hidden states / scores tuples\n        scores = () if (return_dict_in_generate and output_scores) else None\n        raw_logits = () if (return_dict_in_generate and output_logits) else None\n        beam_indices = (\n            tuple(() for _ in range(batch_beam_size)) if (return_dict_in_generate and output_scores) else None\n        )\n        decoder_attentions = () if (return_dict_in_generate and output_attentions) else None\n        cross_attentions = () if (return_dict_in_generate and output_attentions) else None\n        decoder_hidden_states = () if (return_dict_in_generate and output_hidden_states) else None\n\n        # if model is an encoder-decoder, retrieve encoder attention weights and hidden states\n        if return_dict_in_generate and self.config.is_encoder_decoder:\n            encoder_attentions = model_kwargs[\"encoder_outputs\"].get(\"attentions\") if output_attentions else None\n            encoder_hidden_states = (\n                model_kwargs[\"encoder_outputs\"].get(\"hidden_states\") if output_hidden_states else None\n            )\n\n        # initialise score of first beam with 0 and the rest with -1e9. This makes sure that only tokens\n        # of the first beam are considered to avoid sampling the exact same tokens across all beams.\n        beam_scores = torch.zeros((batch_size, num_beams), dtype=torch.float, device=input_ids.device)\n        beam_scores[:, 1:] = -1e9\n        beam_scores = beam_scores.view((batch_size * num_beams,))\n\n        this_peer_finished = False\n\n        decoder_prompt_len = input_ids.shape[-1]  # record the prompt length of decoder\n        while self._has_unfinished_sequences(this_peer_finished, synced_gpus, device=input_ids.device):\n            model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)\n\n            # prepare variable output controls (note: some models won't accept all output controls)\n            model_inputs.update({\"output_attentions\": output_attentions} if output_attentions else {})\n            model_inputs.update({\"output_hidden_states\": output_hidden_states} if output_hidden_states else {})\n\n            outputs = self(**model_inputs, return_dict=True)\n\n            # synced_gpus: don't waste resources running the code we don't need; kwargs must be updated before skipping\n            model_kwargs = self._update_model_kwargs_for_generation(\n                outputs,\n                model_kwargs,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n            )\n            if synced_gpus and this_peer_finished:\n                cur_len = cur_len + 1\n                continue\n\n            # Clone is needed to avoid keeping a hanging ref to outputs.logits which may be very large for first iteration\n            # (the clone itself is always small)\n            # .float() is needed to retain precision for later logits manipulations\n            next_token_logits = outputs.logits[:, -1, :].clone().float()\n            next_token_logits = next_token_logits.to(input_ids.device)\n            next_token_scores = nn.functional.log_softmax(\n                next_token_logits, dim=-1\n            )  # (batch_size * num_beams, vocab_size)\n\n            next_token_scores_processed = logits_processor(input_ids, next_token_scores)\n\n            next_token_scores = next_token_scores_processed + beam_scores[:, None].expand_as(\n                next_token_scores_processed\n            )\n\n            scores_for_all_vocab = next_token_scores.clone()\n\n            # Store scores, attentions and hidden_states when required\n            if return_dict_in_generate:\n                if output_scores:\n                    scores += (next_token_scores,)\n                if output_logits:\n                    raw_logits += (next_token_logits,)\n                if output_attentions:\n                    decoder_attentions += (\n                        (outputs.decoder_attentions,) if self.config.is_encoder_decoder else (outputs.attentions,)\n                    )\n                    if self.config.is_encoder_decoder:\n                        cross_attentions += (outputs.cross_attentions,)\n\n                if output_hidden_states:\n                    decoder_hidden_states += (\n                        (outputs.decoder_hidden_states,)\n                        if self.config.is_encoder_decoder\n                        else (outputs.hidden_states,)\n                    )\n\n            # reshape for beam search\n            vocab_size = next_token_scores.shape[-1]\n            next_token_scores = next_token_scores.view(batch_size, num_beams * vocab_size)\n\n            # Sample 1 + len(eos_token_id) next tokens for each beam so we have at least 1 non eos token per beam.\n            n_eos_tokens = eos_token_id.shape[0] if eos_token_id is not None else 0\n            next_token_scores, next_tokens = torch.topk(\n                next_token_scores, max(2, 1 + n_eos_tokens) * num_beams, dim=1, largest=True, sorted=True\n            )\n\n            next_indices = (next_tokens / vocab_size).long()\n            next_tokens = next_tokens % vocab_size\n\n            # stateless\n            beam_outputs = constrained_beam_scorer.process(\n                input_ids,\n                next_token_scores,\n                next_tokens,\n                next_indices,\n                scores_for_all_vocab,\n                pad_token_id=pad_token_id,\n                eos_token_id=eos_token_id,\n                beam_indices=beam_indices,\n                decoder_prompt_len=decoder_prompt_len,\n            )\n            beam_scores = beam_outputs[\"next_beam_scores\"]\n            beam_next_tokens = beam_outputs[\"next_beam_tokens\"]\n            beam_idx = beam_outputs[\"next_beam_indices\"]\n\n            input_ids = torch.cat([input_ids[beam_idx, :], beam_next_tokens.unsqueeze(-1)], dim=-1)\n\n            # This is needed to properly delete outputs.logits which may be very large for first iteration\n            # Otherwise a reference to outputs is kept which keeps the logits alive in the next iteration\n            # IMPORTANT: Note that this should appear BEFORE the call to _reorder_cache() to save the maximum memory\n            # (that way the memory peak does not include outputs.logits)\n            del outputs\n\n            if model_kwargs.get(\"past_key_values\", None) is not None:\n                model_kwargs[\"past_key_values\"] = self._temporary_reorder_cache(\n                    model_kwargs[\"past_key_values\"], beam_idx\n                )\n\n            if return_dict_in_generate and output_scores:\n                beam_indices = tuple((beam_indices[beam_idx[i]] + (beam_idx[i],) for i in range(len(beam_indices))))\n\n            # increase cur_len\n            cur_len = cur_len + 1\n\n            if constrained_beam_scorer.is_done or all(stopping_criteria(input_ids, scores)):\n                this_peer_finished = True\n\n        sequence_outputs = constrained_beam_scorer.finalize(\n            input_ids,\n            beam_scores,\n            next_tokens,\n            next_indices,\n            pad_token_id=pad_token_id,\n            eos_token_id=eos_token_id,\n            max_length=stopping_criteria.max_length,\n            beam_indices=beam_indices,\n            decoder_prompt_len=decoder_prompt_len,\n        )\n\n        if return_dict_in_generate:\n            if not output_scores:\n                sequence_outputs[\"sequence_scores\"] = None\n            if self.config.is_encoder_decoder:\n                return GenerateBeamEncoderDecoderOutput(\n                    sequences=sequence_outputs[\"sequences\"],\n                    sequences_scores=sequence_outputs[\"sequence_scores\"],\n                    scores=scores,\n                    logits=raw_logits,\n                    beam_indices=sequence_outputs[\"beam_indices\"],\n                    encoder_attentions=encoder_attentions,\n                    encoder_hidden_states=encoder_hidden_states,\n                    decoder_attentions=decoder_attentions,\n                    cross_attentions=cross_attentions,\n                    decoder_hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n            else:\n                return GenerateBeamDecoderOnlyOutput(\n                    sequences=sequence_outputs[\"sequences\"],\n                    sequences_scores=sequence_outputs[\"sequence_scores\"],\n                    scores=scores,\n                    logits=raw_logits,\n                    beam_indices=sequence_outputs[\"beam_indices\"],\n                    attentions=decoder_attentions,\n                    hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n        else:\n            return sequence_outputs[\"sequences\"]\n\n    def _assisted_decoding(\n        self,\n        input_ids: torch.LongTensor,\n        candidate_generator: CandidateGenerator,\n        logits_processor: LogitsProcessorList,\n        stopping_criteria: StoppingCriteriaList,\n        generation_config: GenerationConfig,\n        synced_gpus: bool,\n        streamer: Optional[\"BaseStreamer\"],\n        **model_kwargs,\n    ) -> Union[GenerateNonBeamOutput, torch.LongTensor]:\n        r\"\"\"\n        Generates sequences of token ids for models with a language modeling head using **greedy decoding** or\n        **sample** (depending on `do_sample`), assisted by candidate sequences. Assisted generation is an example of a\n        candidate decoding strategy. Can be used for text-decoder, text-to-text, speech-to-text, and vision-to-text\n        models.\n\n        Parameters:\n            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):\n                The sequence used as a prompt for the generation.\n            candidate_generator (`CandidateGenerator`):\n                A derived instance of [`CandidateGenerator`] that defines how candidate sequences are generated. For\n                more information, the documentation of [`CandidateGenerator`] should be read.\n            logits_processor (`LogitsProcessorList`):\n                An instance of [`LogitsProcessorList`]. List of instances of class derived from [`LogitsProcessor`]\n                used to modify the prediction scores of the language modeling head applied at each generation step.\n            stopping_criteria (`StoppingCriteriaList`):\n                An instance of [`StoppingCriteriaList`]. List of instances of class derived from [`StoppingCriteria`]\n                used to tell if the generation loop should stop.\n            generation_config ([`~generation.GenerationConfig`]):\n                The generation configuration to be used as parametrization of the decoding method.\n            synced_gpus (`bool`):\n                Whether to continue running the while loop until max_length (needed to avoid deadlocking with\n                `FullyShardedDataParallel` and DeepSpeed ZeRO Stage 3).\n            streamer (`BaseStreamer`, *optional*):\n                Streamer object that will be used to stream the generated sequences. Generated tokens are passed\n                through `streamer.put(token_ids)` and the streamer is responsible for any further processing.\n            model_kwargs:\n                Additional model specific keyword arguments will be forwarded to the `forward` function of the model.\n                If model is an encoder-decoder model the kwargs should include `encoder_outputs`.\n\n        Return:\n            [`~generation.GenerateDecoderOnlyOutput`], [`~generation.GenerateEncoderDecoderOutput`] or\n            `torch.LongTensor`: A `torch.LongTensor` containing the generated tokens (default behaviour) or a\n            [`~generation.GenerateDecoderOnlyOutput`] if `model.config.is_encoder_decoder=False` and\n            `return_dict_in_generate=True` or a [`~generation.GenerateEncoderDecoderOutput`] if\n            `model.config.is_encoder_decoder=True`.\n        \"\"\"\n        # init values\n        do_sample = generation_config.do_sample\n        output_attentions = generation_config.output_attentions\n        output_hidden_states = generation_config.output_hidden_states\n        output_scores = generation_config.output_scores\n        output_logits = generation_config.output_logits\n        return_dict_in_generate = generation_config.return_dict_in_generate\n\n        # init attention / hidden states / scores tuples\n        scores = () if (return_dict_in_generate and output_scores) else None\n        raw_logits = () if (return_dict_in_generate and output_logits) else None\n        decoder_attentions = () if (return_dict_in_generate and output_attentions) else None\n        cross_attentions = () if (return_dict_in_generate and output_attentions) else None\n        decoder_hidden_states = () if (return_dict_in_generate and output_hidden_states) else None\n\n        # if model is an encoder-decoder, retrieve encoder attention weights and hidden states\n        if return_dict_in_generate and self.config.is_encoder_decoder:\n            encoder_attentions = model_kwargs[\"encoder_outputs\"].get(\"attentions\") if output_attentions else None\n            encoder_hidden_states = (\n                model_kwargs[\"encoder_outputs\"].get(\"hidden_states\") if output_hidden_states else None\n            )\n\n        # keep track of which sequences are already finished\n        batch_size = input_ids.shape[0]\n        unfinished_sequences = torch.ones(batch_size, dtype=torch.long, device=input_ids.device)\n        model_kwargs = self._get_initial_cache_position(input_ids, model_kwargs)\n\n        this_peer_finished = False\n        is_first_iteration = True  # to preserve the same API in the output as other generation methods\n        while self._has_unfinished_sequences(this_peer_finished, synced_gpus, device=input_ids.device):\n            cur_len = input_ids.shape[-1]\n\n            #  1. Fetch candidate sequences from a `CandidateGenerator`\n            candidate_input_ids, candidate_logits = candidate_generator.get_candidates(input_ids)\n\n            if candidate_logits is not None:\n                candidate_logits = candidate_logits.to(self.device)\n\n            candidate_length = candidate_input_ids.shape[1] - input_ids.shape[1]\n            is_done_candidate = stopping_criteria(candidate_input_ids, None)\n\n            # 2. Use the original model to obtain the next token logits given the candidate sequence. We obtain\n            # `candidate_length + 1` relevant logits from this process: in the event that all candidates are correct,\n            # we use this forward pass to also pick the subsequent logits in the original model.\n\n            # 2.1. Prepare the model inputs\n            candidate_kwargs = copy.copy(model_kwargs)\n            candidate_kwargs = _prepare_attention_mask(\n                candidate_kwargs, candidate_input_ids.shape[1], self.config.is_encoder_decoder\n            )\n            candidate_kwargs = _prepare_token_type_ids(candidate_kwargs, candidate_input_ids.shape[1])\n            if \"cache_position\" in candidate_kwargs:\n                candidate_kwargs[\"cache_position\"] = torch.cat(\n                    (\n                        candidate_kwargs[\"cache_position\"],\n                        torch.arange(cur_len, cur_len + candidate_length, device=input_ids.device, dtype=torch.long),\n                    ),\n                    dim=0,\n                )\n\n            model_inputs = self.prepare_inputs_for_generation(candidate_input_ids, **candidate_kwargs)\n            if \"num_logits_to_keep\" in model_inputs:\n                model_inputs[\"num_logits_to_keep\"] = candidate_length + 1\n\n            # 2.2. Run a forward pass on the candidate sequence\n            # prepare variable output controls (note: some models won't accept all output controls)\n            model_inputs.update({\"output_attentions\": output_attentions} if output_attentions else {})\n            model_inputs.update({\"output_hidden_states\": output_hidden_states} if output_hidden_states else {})\n\n            outputs = self(**model_inputs)\n\n            # 2.3. Process the new logits\n            # .float() is needed to retain precision for later logits manipulations\n            new_logits = outputs.logits[:, -candidate_length - 1 :].float()  # excludes the input prompt if present\n            new_logits = new_logits.to(input_ids.device)\n            next_token_logits = new_logits.clone()\n            if len(logits_processor) > 0:\n                for i in range(candidate_length + 1):\n                    new_logits[:, i, :] = logits_processor(candidate_input_ids[:, : cur_len + i], new_logits[:, i, :])\n\n            # 3. Select the accepted tokens. There are two possible cases:\n            # Case 1: `do_sample=True` and we have logits for the candidates (originally from speculative decoding)\n            # 👉 Apply algorithm 1 from the speculative decoding paper (https://arxiv.org/pdf/2211.17192.pdf).\n            if do_sample and candidate_logits is not None:\n                valid_tokens, n_matches = _speculative_sampling(\n                    candidate_input_ids,\n                    candidate_logits,\n                    candidate_length,\n                    new_logits,\n                    is_done_candidate,\n                )\n\n            # Case 2: all other cases (originally from assisted generation) 👉 Compare the tokens selected from the\n            # original model logits with the candidate tokens. We can keep the candidate tokens until the first\n            # mismatch, or until the max length is reached.\n            else:\n                if do_sample:\n                    probs = new_logits.softmax(dim=-1)\n                    selected_tokens = torch.multinomial(probs[0, :, :], num_samples=1).squeeze(1)[None, :]\n                else:\n                    selected_tokens = new_logits.argmax(dim=-1)\n\n                candidate_new_tokens = candidate_input_ids[:, cur_len:]\n                n_matches = ((~(candidate_new_tokens == selected_tokens[:, :-1])).cumsum(dim=-1) < 1).sum()\n\n                # Ensure we don't generate beyond max_len or an EOS token\n                if is_done_candidate and n_matches == candidate_length:\n                    n_matches -= 1\n                valid_tokens = selected_tokens[:, : n_matches + 1]\n\n            # 4. Update variables according to the number of matching assistant tokens. Remember: the token generated\n            # by the model after the last candidate match is also valid, as it is generated from a correct sequence.\n            # Because of this last token, assisted generation search reduces to a normal greedy search/sample if there\n            # is no match.\n\n            # 4.1. Get the valid continuation, after the matching tokens\n            input_ids = torch.cat((input_ids, valid_tokens), dim=-1)\n            if streamer is not None:\n                streamer.put(valid_tokens.cpu())\n            new_cur_len = input_ids.shape[-1]\n\n            # 4.2. Discard past key values relative to unused assistant tokens\n            new_cache_size = new_cur_len - 1\n            outputs.past_key_values = _crop_past_key_values(self, outputs.past_key_values, new_cache_size)\n\n            # 5. Update the candidate generation strategy if needed\n            candidate_generator.update_candidate_strategy(input_ids, new_logits, n_matches)\n\n            # synced_gpus: don't waste resources running the code we don't need; kwargs must be updated before skipping\n            model_kwargs = self._update_model_kwargs_for_generation(\n                outputs,\n                model_kwargs,\n                is_encoder_decoder=self.config.is_encoder_decoder,\n                num_new_tokens=n_matches + 1,\n            )\n            if synced_gpus and this_peer_finished:\n                continue\n\n            # Store scores, attentions and hidden_states when required\n            # Assistant: modified to append one tuple element per token, as in the other generation methods.\n            if return_dict_in_generate:\n                newly_added_length = n_matches + 1\n                if output_scores:\n                    scores += tuple(new_logits[:, i, :] for i in range(newly_added_length))\n                if output_logits:\n                    raw_logits += tuple(next_token_logits[:, i, :] for i in range(newly_added_length))\n\n                newly_added_length = new_cur_len if is_first_iteration else newly_added_length\n                if output_attentions:\n                    if self.config.is_encoder_decoder:\n                        cross_attentions = _split_model_outputs(\n                            cross_attentions, outputs.cross_attentions, cur_len, newly_added_length\n                        )\n                        decoder_attentions = _split_model_outputs(\n                            decoder_attentions,\n                            outputs.decoder_attentions,\n                            cur_len,\n                            newly_added_length,\n                            is_decoder_attention=True,\n                        )\n                    # some (V)LLMs have hard requirement on SDPA and thus never return attn\n                    elif outputs.attentions[0] is not None:\n                        decoder_attentions = _split_model_outputs(\n                            decoder_attentions,\n                            outputs.attentions,\n                            cur_len,\n                            newly_added_length,\n                            is_decoder_attention=True,\n                        )\n                if output_hidden_states:\n                    if self.config.is_encoder_decoder:\n                        decoder_hidden_states = _split_model_outputs(\n                            decoder_hidden_states, outputs.decoder_hidden_states, cur_len, newly_added_length\n                        )\n                    else:\n                        decoder_hidden_states = _split_model_outputs(\n                            decoder_hidden_states, outputs.hidden_states, cur_len, newly_added_length\n                        )\n\n            unfinished_sequences = unfinished_sequences & ~stopping_criteria(input_ids, scores)\n            this_peer_finished = unfinished_sequences.max() == 0\n            is_first_iteration = False\n\n        if streamer is not None:\n            streamer.end()\n\n        if (\n            hasattr(candidate_generator, \"assistant_model\")\n            and candidate_generator.assistant_model.generation_config.num_assistant_tokens_schedule == \"heuristic\"\n        ):\n            candidate_generator.assistant_model.generation_config.num_assistant_tokens = (\n                candidate_generator.num_assistant_tokens\n            )\n        if return_dict_in_generate:\n            if self.config.is_encoder_decoder:\n                return GenerateEncoderDecoderOutput(\n                    sequences=input_ids,\n                    scores=scores,\n                    logits=raw_logits,\n                    encoder_attentions=encoder_attentions,\n                    encoder_hidden_states=encoder_hidden_states,\n                    decoder_attentions=decoder_attentions,\n                    cross_attentions=cross_attentions,\n                    decoder_hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n            else:\n                return GenerateDecoderOnlyOutput(\n                    sequences=input_ids,\n                    scores=scores,\n                    logits=raw_logits,\n                    attentions=decoder_attentions,\n                    hidden_states=decoder_hidden_states,\n                    past_key_values=model_kwargs.get(\"past_key_values\"),\n                )\n        else:\n            return input_ids\n\n\ndef _speculative_sampling(\n    candidate_input_ids,\n    candidate_logits,\n    candidate_length,\n    new_logits,\n    is_done_candidate,\n):\n    \"\"\"\n    Applies sampling as in the speculative decoding paper (https://arxiv.org/pdf/2211.17192.pdf, algorithm 1). Returns\n    the selected tokens, as well as the number of candidate matches.\n\n    NOTE: Unless otherwise stated, the variable names match those in the paper.\n    \"\"\"\n    new_candidate_input_ids = candidate_input_ids[:, -candidate_length:]\n    # Gets the probabilities from the logits. q_i and p_i denote the assistant and model probabilities of the tokens\n    # selected by the assistant, respectively.\n    q = candidate_logits.softmax(dim=-1)\n    q_i = q[:, torch.arange(candidate_length), new_candidate_input_ids].squeeze(0, 1)\n    p = new_logits.softmax(dim=-1)\n    p_i = p[:, torch.arange(candidate_length), new_candidate_input_ids].squeeze(0, 1)\n    probability_ratio = p_i / q_i\n\n    # When probability_ratio > 1 (i.e. q_i(x) < p_i(x), or \"assistant probability of the candidate token is smaller\n    # than the model probability for the same token\"), keep the token. Otherwise reject with p = 1 - probability_ratio\n    # (= keep with p = probability_ratio). Keep all the tokens until the first rejection\n    r_i = torch.rand_like(probability_ratio)\n    is_accepted = r_i <= probability_ratio\n    n_matches = ((~is_accepted).cumsum(dim=-1) < 1).sum()  # this is `n` in algorithm 1\n\n    # Ensure we don't generate beyond max_len or an EOS token (not in algorithm 1, but needed for correct behavior)\n    if is_done_candidate and n_matches == candidate_length:\n        # Output length is assumed to be `n_matches + 1`. Since we won't generate another token with the target model\n        # due to acceptance on EOS we fix `n_matches`\n        n_matches -= 1\n        valid_tokens = new_candidate_input_ids[:, : n_matches + 1]\n    else:\n        # Next token selection: if there is a rejection, adjust the distribution from the main model before sampling.\n        gamma = candidate_logits.shape[1]\n        p_n_plus_1 = p[:, n_matches, :]\n        if n_matches < gamma:\n            q_n_plus_1 = q[:, n_matches, :]\n            p_prime = torch.clamp((p_n_plus_1 - q_n_plus_1), min=0)\n            p_prime.div_(p_prime.sum())\n        else:\n            p_prime = p_n_plus_1\n        t = torch.multinomial(p_prime, num_samples=1).squeeze(1)[None, :]\n\n        # The selected tokens include the matches (if any) plus the next sampled tokens\n        if n_matches > 0:\n            valid_tokens = torch.cat((new_candidate_input_ids[:, :n_matches], t), dim=-1)\n        else:\n            valid_tokens = t\n\n    return valid_tokens, n_matches\n\n\ndef _split_model_outputs(outputs, new_outputs, cur_len, added_len, is_decoder_attention=False):\n    \"\"\"\n    Given the (decoder/cross attentions)/(decoder hidden states) for multiple generated tokens, splits it into a tuple\n    where each member corresponds to a single generated token.\n    \"\"\"\n    # Retrocompatibility: in our generation functions, the first iteration includes the attention/hidden states for the\n    # prompt.\n    if len(outputs) == 0:\n        new_tuple = ()\n        for layer in new_outputs:\n            last_dim_size = cur_len if is_decoder_attention else layer.shape[-1]\n            new_tuple += (layer[..., :cur_len, :last_dim_size],)\n        outputs += (new_tuple,)\n        # The first iteration contains the prompt + 1 generated token, let's update the length variables accordingly\n        cur_len += 1\n        added_len -= cur_len\n\n    for i in range(added_len):\n        new_tuple = ()\n        for layer in new_outputs:\n            last_dim_size = cur_len + i if is_decoder_attention else layer.shape[-1]\n            new_tuple += (layer[..., i : i + 1, :last_dim_size],)\n        outputs += (new_tuple,)\n    return outputs\n\n\ndef _ranking_fast(\n    context_hidden: torch.FloatTensor,\n    next_hidden: torch.FloatTensor,\n    next_top_k_probs: torch.FloatTensor,\n    cosine_matrix_mask: torch.LongTensor,\n    alpha: float,\n    beam_width: int,\n) -> torch.FloatTensor:\n    \"\"\"\n    Reranks the top_k candidates based on a degeneration penalty (cosine similarity with previous tokens), as described\n    in the paper \"A Contrastive Framework for Neural Text Generation\". Returns the index of the best candidate for each\n    row in the batch.\n    \"\"\"\n    norm_context_hidden = context_hidden / context_hidden.norm(dim=2, keepdim=True)\n    norm_next_hidden = next_hidden / next_hidden.norm(dim=2, keepdim=True)\n    cosine_matrix = torch.matmul(norm_context_hidden, norm_next_hidden.transpose(1, 2)).squeeze(-1)  # [B*K, S]\n\n    # Penalize cosine_matrix based on the cosine_matrix_mask (ignore padding positions)\n    # Using a large negative value for masked positions\n    cosine_matrix_mask = cosine_matrix_mask.to(dtype=cosine_matrix.dtype)\n    cosine_matrix_mask = (1 - cosine_matrix_mask) * torch.finfo(cosine_matrix.dtype).min\n    cosine_matrix = cosine_matrix + cosine_matrix_mask\n\n    degeneration_penalty, _ = torch.max(cosine_matrix, dim=-1)  # [B*K]\n    next_top_k_probs = next_top_k_probs.view(-1)  # [B*K]\n    contrastive_score = (1.0 - alpha) * next_top_k_probs - alpha * degeneration_penalty\n    contrastive_score = torch.stack(torch.split(contrastive_score, beam_width))  # [B, K]\n    _, selected_idx = contrastive_score.max(dim=-1)  # [B]\n    return selected_idx\n\n\ndef _split(data, full_batch_size: int, num_hidden_layers: int, split_size: int = None):\n    \"\"\"\n    Takes care of three cases:\n    1. data is a tensor: e.g. last_hidden_state, pooler_output etc. split them on the batch_size dim\n    2. data is a tuple: e.g. hidden_states, attentions etc. Keep the tuple as it is and split each tensor in it and\n       return a list of tuples\n    3. data is a tuple of tuples, e.g. past_key_values. Keep the tuple as it is and split each tuple in it and\n       return a list of tuples of tuples\n    (see documentation of ModelOutput)\n    \"\"\"\n    if data is None:\n        return [None] * (full_batch_size // split_size)\n    if isinstance(data, torch.Tensor):\n        return [data[i : i + split_size] for i in range(0, full_batch_size, split_size)]\n    # New cache format\n    elif isinstance(data, DynamicCache) or (\n        isinstance(data, EncoderDecoderCache) and isinstance(data.self_attention_cache, DynamicCache)\n    ):\n        return data.batch_split(full_batch_size, split_size, num_hidden_layers)\n    elif isinstance(data, tuple):\n        # If the elements of the tuple are also tuples (e.g., past_key_values in our earlier example)\n        if isinstance(data[0], tuple):\n            return [\n                tuple(tuple(tensor[i : i + split_size] for tensor in inner_tuple) for inner_tuple in data)\n                for i in range(0, full_batch_size, split_size)\n            ]\n\n        else:\n            return [\n                tuple(sub_tensor[i : i + split_size] for sub_tensor in data)\n                for i in range(0, full_batch_size, split_size)\n            ]\n    else:\n        raise TypeError(f\"Unexpected attribute type: {type(data)}\")\n\n\ndef _split_model_inputs(\n    model_input: Union[ModelOutput, Dict], split_size: int, full_batch_size: int, config: PretrainedConfig\n) -> List[Union[ModelOutput, Dict]]:\n    \"\"\"\n    Split a ModelOutput object (or its subclasses) or Dict into a list of same-class objects based on a specified split\n    size. The input object is dict when it was prepared for forward pass and ModelOutput when it was returned from\n    previous forward pass.\n    \"\"\"\n    # Edge case: if model_input is None, return a list of Nones\n    # this happens with Whisper where encoder_outputs is None\n    if model_input is None:\n        return [model_input] * (full_batch_size // split_size)\n    # Infer the class from the object\n    model_output_cls = type(model_input)\n    if (full_batch_size % split_size) != 0:\n        raise ValueError(\"`full_batch_size` must be divisible by `split_size`\")\n\n    if split_size > full_batch_size:\n        raise ValueError(\"`split_size` must be smaller or equal to `full_batch_size`\")\n\n    # Helper function to split tensors or tuples of tensors\n\n    # Find all the dataclass fields (e.g., last_hidden_state, pooler_output etc.) and split them\n    keys = (\n        model_input.__dataclass_fields__.keys() if hasattr(model_input, \"__dataclass_fields__\") else model_input.keys()\n    )\n    # We only keep keys that are in the model_input\n    keys = [k for k in keys if k in model_input]\n    # Here we can have four types of values: tensors, tuples of tensors and booleans, and encoder_outputs which is a\n    # ModelOutput object.\n    # bool should not be split but replicated for each split\n    bool_keys = [k for k in keys if isinstance(model_input[k], bool) or k == \"cache_position\"]\n    keys_to_ignore = [\"cache_position\", \"encoder_outputs\", \"num_logits_to_keep\"]\n    non_bool_keys = [k for k in keys if not isinstance(model_input[k], bool) and k not in keys_to_ignore]\n\n    num_hidden_layers = config.get_text_config().num_hidden_layers\n\n    # we split the tensors and tuples of tensors\n    data_split_list = [\n        {k: _split(model_input[k], full_batch_size, num_hidden_layers, split_size)[i] for k in non_bool_keys}\n        for i in range(full_batch_size // split_size)\n    ]\n    # bool values are the same and replicated for each split\n    bool_data = {k: model_input[k] for k in bool_keys}\n    # encoder_outputs is a ModelOutput object and should be split by its own\n    if \"encoder_outputs\" in model_input:\n        encoder_outputs_split = _split_model_inputs(\n            model_input[\"encoder_outputs\"], split_size, full_batch_size, config.get_text_config()\n        )\n        data_split_list = [\n            {**data_split, \"encoder_outputs\": encoder_outputs_split[i]} for i, data_split in enumerate(data_split_list)\n        ]\n    # num_logits_to_keep should be replicated for each split, similar to bool values\n    if \"num_logits_to_keep\" in model_input:\n        data_split_list = [\n            {**data_split, \"num_logits_to_keep\": model_input[\"num_logits_to_keep\"]} for data_split in data_split_list\n        ]\n\n    # Convert each dictionary in the list to an object of the inferred class\n    split_model_inputs: List[Union[ModelOutput, Dict]] = [\n        model_output_cls(**data_split, **bool_data) for data_split in data_split_list\n    ]\n\n    return split_model_inputs\n\n\ndef stack_model_outputs(model_outputs: List[ModelOutput], config: PretrainedConfig) -> ModelOutput:\n    \"\"\"\n    Stack a list of ModelOutput objects (or its subclasses) along the batch_size dimension. The function infers the\n    specific ModelOutput subclass from the list provided.\n    \"\"\"\n    if not model_outputs:\n        raise ValueError(\"Input list is empty.\")\n\n    # Infer the class from the first object in the list\n    model_output_cls = type(model_outputs[0])\n    num_hidden_layers = config.get_text_config().num_hidden_layers\n\n    # Ensure all objects are of the same type\n    if not all(isinstance(obj, model_output_cls) for obj in model_outputs):\n        raise ValueError(\"All elements in the list should be of the same type.\")\n\n    # Helper function to concat tensors or tuples of tensors\n    def _concat(data):\n        \"\"\"\n        Reverse of `_split` function above.\n        \"\"\"\n        if any(data is None for data in data):\n            return None\n        if isinstance(data[0], torch.Tensor):\n            return torch.cat(data, dim=0)\n        # New cache format\n        elif isinstance(data[0], DynamicCache):\n            return DynamicCache.from_batch_splits(data, num_hidden_layers=num_hidden_layers)\n        elif isinstance(data[0], EncoderDecoderCache):\n            return EncoderDecoderCache.from_batch_splits(data, num_hidden_layers=num_hidden_layers)\n        elif isinstance(data[0], tuple):\n            # If the elements of the tuple are also tuples (e.g., past_key_values in our earlier example)\n            if isinstance(data[0][0], tuple):\n                return tuple(\n                    tuple(torch.cat([attr[i][j] for attr in data], dim=0) for j in range(len(data[0][0])))\n                    for i in range(len(data[0]))\n                )\n            else:\n                return tuple(torch.cat([attr[i] for attr in data], dim=0) for i in range(len(data[0])))\n        elif isinstance(data[0], (int, float)):\n            # If the elements are integers or floats, return a tensor\n            return torch.tensor(data)\n        else:\n            raise TypeError(f\"Unexpected attribute type: {type(data[0])}\")\n\n    # Use a dictionary comprehension to gather attributes from all objects and concatenate them\n    concatenated_data = {\n        k: _concat([getattr(model_output, k) for model_output in model_outputs])\n        for k in model_output_cls.__dataclass_fields__.keys()\n    }\n\n    # Return a new object of the inferred class with the concatenated attributes\n    return model_output_cls(**concatenated_data)\n\n\ndef _relative_top_filter(\n    scores: torch.FloatTensor,\n    baseline_scores: torch.FloatTensor,\n    relative_top: float = 0.1,\n    filter_value: float = -float(\"Inf\"),\n    base_filter_value=-1e-3,\n    min_tokens_to_keep: int = 1,\n) -> torch.FloatTensor:\n    \"\"\"\n    Reference: https://github.com/XiangLi1999/ContrastiveDecoding/blob/170e9142e92159c1237d731e240f5eb14aabf428/transformers/src/transformers/generation_logits_process.py#L235\n    Apply filtering to only keep tokens with a probability above a certain threshold. The threshold is defined as `relative_top` * max probability in the distribution.\n    \"\"\"\n    scores_normalized = scores.log_softmax(dim=-1)\n    baseline_scores_normalized = baseline_scores.log_softmax(dim=-1)\n    sorted_logits, sorted_indices = torch.sort(scores_normalized, descending=True)\n    min_thresh = sorted_logits[..., min_tokens_to_keep - 1]\n    probs_max = torch.max(scores_normalized, dim=-1).values\n    probs_thresh = probs_max + np.log(relative_top)\n    probs_thresh = torch.min(min_thresh, probs_thresh)\n    probs_thresh = probs_thresh.unsqueeze(-1)\n    baseline_scores_normalized[scores_normalized < probs_thresh] = base_filter_value\n    scores_normalized[scores_normalized < probs_thresh] = filter_value\n    return scores_normalized, baseline_scores_normalized\n\n\ndef _dola_select_contrast(\n    candidate_premature_layers: List[int],\n    candidate_premature_logits: Dict[int, torch.FloatTensor],\n    final_logits: torch.FloatTensor,\n) -> torch.FloatTensor:\n    if len(candidate_premature_layers) == 1:\n        base_logits = candidate_premature_logits[candidate_premature_layers[0]]\n        final_logits, base_logits = _relative_top_filter(final_logits, base_logits)\n        logits = final_logits - base_logits\n        return logits\n\n    # 1. Stacking all premature_layers into a new dimension\n    stacked_premature_layers = torch.stack([candidate_premature_logits[i] for i in candidate_premature_layers], dim=0)\n\n    # 2. Calculate the softmax values for mature_layer and all premature_layers\n    # shape: (batch_size, vocab_size)\n    softmax_mature_layer = F.softmax(final_logits, dim=-1)\n    # shape: (num_premature_layers, batch_size, vocab_size)\n    softmax_premature_layers = F.softmax(stacked_premature_layers, dim=-1)\n\n    # 3. Calculate the average distribution\n    # shape: (num_premature_layers, batch_size, vocab_size)\n    avg_dist = 0.5 * (softmax_mature_layer[None, :, :] + softmax_premature_layers)\n\n    # 4. Calculate log-softmax for the KL divergence\n    # shape: (batch_size, vocab_size)\n    log_softmax_mature_layer = F.log_softmax(final_logits, dim=-1)\n    # shape: (num_premature_layers, batch_size, vocab_size)\n    log_softmax_premature_layers = F.log_softmax(stacked_premature_layers, dim=-1)\n\n    # 5. Calculate the KL divergences and then the JS divergences\n    # shape: (num_premature_layers, batch_size)\n    kl1 = F.kl_div(log_softmax_mature_layer[None, :, :], avg_dist, reduction=\"none\").mean(-1)\n    # shape: (num_premature_layers, batch_size)\n    kl2 = F.kl_div(log_softmax_premature_layers, avg_dist, reduction=\"none\").mean(-1)\n    js_divs = 0.5 * (kl1 + kl2)  # shape: (num_premature_layers, batch_size)\n\n    # 6. Reduce the batchmean\n    js_divs = js_divs.mean(-1)  # shape: (num_premature_layers,)\n    premature_layer = candidate_premature_layers[int(js_divs.argmax().cpu().item())]\n\n    base_logits = candidate_premature_logits[premature_layer]\n    final_logits, base_logits = _relative_top_filter(final_logits, base_logits)\n    logits = final_logits - base_logits\n    return logits\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/transformers_gpt2.py",
    "content": "# coding=utf-8\n# Copyright 2018 The OpenAI Team Authors and HuggingFace Inc. team.\n# Copyright (c) 2018, NVIDIA CORPORATION.  All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"PyTorch OpenAI GPT-2 model.\"\"\"\n\nimport math\nimport os\nimport warnings\nfrom dataclasses import dataclass\nfrom typing import Optional, Tuple, Union\n\nimport torch\nimport torch.utils.checkpoint\nfrom packaging import version\nfrom torch import nn\nfrom torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss\n\nfrom transformers.activations import ACT2FN\nimport transformers\n\nfrom indextts.gpt.transformers_generation_utils import GenerationMixin\nfrom indextts.gpt.transformers_modeling_utils import PreTrainedModel\n# SequenceSummary has been removed in transformers 4.57.1+\n# Adding compatibility implementation\nclass SequenceSummary(nn.Module):\n    \"\"\"\n    Compute a single vector summary of a sequence hidden states.\n    \"\"\"\n    def __init__(self, config):\n        super().__init__()\n        self.summary_type = getattr(config, 'summary_type', 'last')\n        self.summary_use_proj = getattr(config, 'summary_use_proj', True)\n        self.summary_activation = getattr(config, 'summary_activation', None)\n        self.summary_proj_to_labels = getattr(config, 'summary_proj_to_labels', True)\n        self.summary_first_dropout = getattr(config, 'summary_first_dropout', 0.1)\n\n        if self.summary_use_proj:\n            if hasattr(config, 'summary_proj_to_labels') and config.summary_proj_to_labels and config.num_labels > 0:\n                num_classes = config.num_labels\n            else:\n                num_classes = config.hidden_size\n            self.summary = nn.Linear(config.hidden_size, num_classes)\n\n        if hasattr(config, 'summary_activation') and config.summary_activation == 'tanh':\n            self.activation = nn.Tanh()\n        else:\n            self.activation = lambda x: x\n\n        if hasattr(config, 'summary_first_dropout') and config.summary_first_dropout > 0:\n            self.dropout = nn.Dropout(config.summary_first_dropout)\n        else:\n            self.dropout = lambda x: x\n\n    def forward(self, hidden_states, cls_token_index=None):\n        if self.summary_type == 'last':\n            output = hidden_states[:, -1]\n        elif self.summary_type == 'first':\n            output = hidden_states[:, 0]\n        elif self.summary_type == 'mean':\n            output = hidden_states.mean(dim=1)\n        elif self.summary_type == 'cls_index':\n            if cls_token_index is None:\n                raise ValueError(\"cls_token_index must be specified when summary_type='cls_index'\")\n            batch_size = hidden_states.size(0)\n            output = hidden_states[batch_size, cls_token_index]\n        else:\n            output = hidden_states[:, -1]  # fallback to last\n\n        output = self.dropout(output)\n        if self.summary_use_proj:\n            output = self.summary(output)\n        output = self.activation(output)\n        return output\n\nfrom transformers.modeling_attn_mask_utils import _prepare_4d_attention_mask_for_sdpa, _prepare_4d_causal_attention_mask_for_sdpa\nfrom transformers.modeling_outputs import (\n    BaseModelOutputWithPastAndCrossAttentions,\n    CausalLMOutputWithCrossAttentions,\n    QuestionAnsweringModelOutput,\n    SequenceClassifierOutputWithPast,\n    TokenClassifierOutput,\n)\n# from transformers.modeling_utils import PreTrainedModel, SequenceSummary\n\nfrom transformers.pytorch_utils import Conv1D, find_pruneable_heads_and_indices, prune_conv1d_layer\nfrom transformers.utils import (\n    ModelOutput,\n    add_code_sample_docstrings,\n    add_start_docstrings,\n    add_start_docstrings_to_model_forward,\n    get_torch_version,\n    is_flash_attn_2_available,\n    is_flash_attn_greater_or_equal_2_10,\n    logging,\n    replace_return_docstrings,\n)\nfrom transformers.utils.model_parallel_utils import assert_device_map, get_device_map\nfrom transformers.models.gpt2.configuration_gpt2 import GPT2Config\n\n\nif is_flash_attn_2_available():\n    from transformers.modeling_flash_attention_utils import _flash_attention_forward\n\n\nlogger = logging.get_logger(__name__)\n\n_CHECKPOINT_FOR_DOC = \"openai-community/gpt2\"\n_CONFIG_FOR_DOC = \"GPT2Config\"\n\n\ndef load_tf_weights_in_gpt2(model, config, gpt2_checkpoint_path):\n    \"\"\"Load tf checkpoints in a pytorch model\"\"\"\n    try:\n        import re\n\n        import tensorflow as tf\n    except ImportError:\n        logger.error(\n            \"Loading a TensorFlow model in PyTorch, requires TensorFlow to be installed. Please see \"\n            \"https://www.tensorflow.org/install/ for installation instructions.\"\n        )\n        raise\n    tf_path = os.path.abspath(gpt2_checkpoint_path)\n    logger.info(f\"Converting TensorFlow checkpoint from {tf_path}\")\n    # Load weights from TF model\n    init_vars = tf.train.list_variables(tf_path)\n    names = []\n    arrays = []\n    for name, shape in init_vars:\n        logger.info(f\"Loading TF weight {name} with shape {shape}\")\n        array = tf.train.load_variable(tf_path, name)\n        names.append(name)\n        arrays.append(array.squeeze())\n\n    for name, array in zip(names, arrays):\n        name = name[6:]  # skip \"model/\"\n        name = name.split(\"/\")\n        pointer = model\n        for m_name in name:\n            if re.fullmatch(r\"[A-Za-z]+\\d+\", m_name):\n                scope_names = re.split(r\"(\\d+)\", m_name)\n            else:\n                scope_names = [m_name]\n            if scope_names[0] == \"w\" or scope_names[0] == \"g\":\n                pointer = getattr(pointer, \"weight\")\n            elif scope_names[0] == \"b\":\n                pointer = getattr(pointer, \"bias\")\n            elif scope_names[0] == \"wpe\" or scope_names[0] == \"wte\":\n                pointer = getattr(pointer, scope_names[0])\n                pointer = getattr(pointer, \"weight\")\n            else:\n                pointer = getattr(pointer, scope_names[0])\n            if len(scope_names) >= 2:\n                num = int(scope_names[1])\n                pointer = pointer[num]\n        try:\n            if pointer.shape != array.shape:\n                raise ValueError(f\"Pointer shape {pointer.shape} and array shape {array.shape} mismatched\")\n        except ValueError as e:\n            e.args += (pointer.shape, array.shape)\n            raise\n        logger.info(f\"Initialize PyTorch weight {name}\")\n        pointer.data = torch.from_numpy(array)\n    return model\n\n\nclass GPT2Attention(nn.Module):\n    def __init__(self, config, is_cross_attention=False, layer_idx=None):\n        super().__init__()\n        self.config = config\n        max_positions = config.max_position_embeddings\n        self.register_buffer(\n            \"bias\",\n            torch.tril(torch.ones((max_positions, max_positions), dtype=torch.bool)).view(\n                1, 1, max_positions, max_positions\n            ),\n            persistent=False,\n        )\n        self.register_buffer(\"masked_bias\", torch.tensor(-1e4), persistent=False)\n\n        self.embed_dim = config.hidden_size\n        self.num_heads = config.num_attention_heads\n        self.head_dim = self.embed_dim // self.num_heads\n        self.split_size = self.embed_dim\n        if self.head_dim * self.num_heads != self.embed_dim:\n            raise ValueError(\n                f\"`embed_dim` must be divisible by num_heads (got `embed_dim`: {self.embed_dim} and `num_heads`:\"\n                f\" {self.num_heads}).\"\n            )\n\n        self.scale_attn_weights = config.scale_attn_weights\n        self.is_cross_attention = is_cross_attention\n\n        # Layer-wise attention scaling, reordering, and upcasting\n        self.scale_attn_by_inverse_layer_idx = config.scale_attn_by_inverse_layer_idx\n        self.layer_idx = layer_idx\n        self.reorder_and_upcast_attn = config.reorder_and_upcast_attn\n\n        if self.is_cross_attention:\n            self.c_attn = Conv1D(2 * self.embed_dim, self.embed_dim)\n            self.q_attn = Conv1D(self.embed_dim, self.embed_dim)\n        else:\n            self.c_attn = Conv1D(3 * self.embed_dim, self.embed_dim)\n        self.c_proj = Conv1D(self.embed_dim, self.embed_dim)\n\n        self.attn_dropout = nn.Dropout(config.attn_pdrop)\n        self.resid_dropout = nn.Dropout(config.resid_pdrop)\n        self.is_causal = True\n\n        self.pruned_heads = set()\n\n    def prune_heads(self, heads):\n        if len(heads) == 0:\n            return\n        heads, index = find_pruneable_heads_and_indices(heads, self.num_heads, self.head_dim, self.pruned_heads)\n        index_attn = torch.cat([index, index + self.split_size, index + (2 * self.split_size)])\n\n        # Prune conv1d layers\n        self.c_attn = prune_conv1d_layer(self.c_attn, index_attn, dim=1)\n        self.c_proj = prune_conv1d_layer(self.c_proj, index, dim=0)\n\n        # Update hyper params\n        self.split_size = (self.split_size // self.num_heads) * (self.num_heads - len(heads))\n        self.num_heads = self.num_heads - len(heads)\n        self.pruned_heads = self.pruned_heads.union(heads)\n\n    def _attn(self, query, key, value, attention_mask=None, head_mask=None):\n        attn_weights = torch.matmul(query, key.transpose(-1, -2))\n\n        if self.scale_attn_weights:\n            attn_weights = attn_weights / torch.full(\n                [], value.size(-1) ** 0.5, dtype=attn_weights.dtype, device=attn_weights.device\n            )\n\n        # Layer-wise attention scaling\n        if self.scale_attn_by_inverse_layer_idx:\n            attn_weights = attn_weights / float(self.layer_idx + 1)\n\n        if not self.is_cross_attention:\n            # if only \"normal\" attention layer implements causal mask\n            query_length, key_length = query.size(-2), key.size(-2)\n            causal_mask = self.bias[:, :, key_length - query_length : key_length, :key_length]\n            mask_value = torch.finfo(attn_weights.dtype).min\n            # Need to be a tensor, otherwise we get error: `RuntimeError: expected scalar type float but found double`.\n            # Need to be on the same device, otherwise `RuntimeError: ..., x and y to be on the same device`\n            mask_value = torch.full([], mask_value, dtype=attn_weights.dtype, device=attn_weights.device)\n            attn_weights = torch.where(causal_mask, attn_weights.to(attn_weights.dtype), mask_value)\n\n        if attention_mask is not None:\n            # Apply the attention mask\n            attn_weights = attn_weights + attention_mask\n\n        attn_weights = nn.functional.softmax(attn_weights, dim=-1)\n\n        # Downcast (if necessary) back to V's dtype (if in mixed-precision) -- No-Op otherwise\n        attn_weights = attn_weights.type(value.dtype)\n        attn_weights = self.attn_dropout(attn_weights)\n\n        # Mask heads if we want to\n        if head_mask is not None:\n            attn_weights = attn_weights * head_mask\n\n        attn_output = torch.matmul(attn_weights, value)\n\n        return attn_output, attn_weights\n\n    def _upcast_and_reordered_attn(self, query, key, value, attention_mask=None, head_mask=None):\n        # Use `torch.baddbmm` (a bit more efficient w/ alpha param for scaling -- from Megatron-LM)\n        bsz, num_heads, q_seq_len, dk = query.size()\n        _, _, k_seq_len, _ = key.size()\n\n        # Preallocate attn_weights for `baddbmm`\n        attn_weights = torch.empty(bsz * num_heads, q_seq_len, k_seq_len, dtype=torch.float32, device=query.device)\n\n        # Compute Scale Factor\n        scale_factor = 1.0\n        if self.scale_attn_weights:\n            scale_factor /= float(value.size(-1)) ** 0.5\n\n        if self.scale_attn_by_inverse_layer_idx:\n            scale_factor /= float(self.layer_idx + 1)\n\n        # Upcast (turn off autocast) and reorder (Scale K by 1 / root(dk))\n        with torch.amp.autocast(query.device.type, enabled=False):\n            q, k = query.reshape(-1, q_seq_len, dk), key.transpose(-1, -2).reshape(-1, dk, k_seq_len)\n            attn_weights = torch.baddbmm(attn_weights, q.float(), k.float(), beta=0, alpha=scale_factor)\n            attn_weights = attn_weights.reshape(bsz, num_heads, q_seq_len, k_seq_len)\n\n        if not self.is_cross_attention:\n            # if only \"normal\" attention layer implements causal mask\n            query_length, key_length = query.size(-2), key.size(-2)\n            causal_mask = self.bias[:, :, key_length - query_length : key_length, :key_length]\n            mask_value = torch.finfo(attn_weights.dtype).min\n            # Need to be a tensor, otherwise we get error: `RuntimeError: expected scalar type float but found double`.\n            # Need to be on the same device, otherwise `RuntimeError: ..., x and y to be on the same device`\n            mask_value = torch.tensor(mask_value, dtype=attn_weights.dtype).to(attn_weights.device)\n            attn_weights = torch.where(causal_mask, attn_weights, mask_value)\n\n        if attention_mask is not None:\n            # Apply the attention mask\n            attn_weights = attn_weights + attention_mask\n\n        attn_weights = nn.functional.softmax(attn_weights, dim=-1)\n\n        # Downcast (if necessary) back to V's dtype (if in mixed-precision) -- No-Op if otherwise\n        if attn_weights.dtype != torch.float32:\n            raise RuntimeError(\"Error with upcasting, attn_weights does not have dtype torch.float32\")\n        attn_weights = attn_weights.type(value.dtype)\n        attn_weights = self.attn_dropout(attn_weights)\n\n        # Mask heads if we want to\n        if head_mask is not None:\n            attn_weights = attn_weights * head_mask\n\n        attn_output = torch.matmul(attn_weights, value)\n\n        return attn_output, attn_weights\n\n    def _split_heads(self, tensor, num_heads, attn_head_size):\n        \"\"\"\n        Splits hidden_size dim into attn_head_size and num_heads\n        \"\"\"\n        new_shape = tensor.size()[:-1] + (num_heads, attn_head_size)\n        tensor = tensor.view(new_shape)\n        return tensor.permute(0, 2, 1, 3)  # (batch, head, seq_length, head_features)\n\n    def _merge_heads(self, tensor, num_heads, attn_head_size):\n        \"\"\"\n        Merges attn_head_size dim and num_attn_heads dim into hidden_size\n        \"\"\"\n        tensor = tensor.permute(0, 2, 1, 3).contiguous()\n        new_shape = tensor.size()[:-2] + (num_heads * attn_head_size,)\n        return tensor.view(new_shape)\n\n    def forward(\n        self,\n        hidden_states: Optional[Tuple[torch.FloatTensor]],\n        layer_past: Optional[Tuple[torch.Tensor]] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.Tensor] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n        use_cache: Optional[bool] = False,\n        output_attentions: Optional[bool] = False,\n    ) -> Tuple[Union[torch.Tensor, Tuple[torch.Tensor]], ...]:\n        if encoder_hidden_states is not None:\n            if not hasattr(self, \"q_attn\"):\n                raise ValueError(\n                    \"If class is used as cross attention, the weights `q_attn` have to be defined. \"\n                    \"Please make sure to instantiate class with `GPT2Attention(..., is_cross_attention=True)`.\"\n                )\n\n            query = self.q_attn(hidden_states)\n            key, value = self.c_attn(encoder_hidden_states).split(self.split_size, dim=2)\n            attention_mask = encoder_attention_mask\n        else:\n            query, key, value = self.c_attn(hidden_states).split(self.split_size, dim=2)\n\n        query = self._split_heads(query, self.num_heads, self.head_dim)\n        key = self._split_heads(key, self.num_heads, self.head_dim)\n        value = self._split_heads(value, self.num_heads, self.head_dim)\n\n        if layer_past is not None:\n            past_key, past_value = layer_past\n            key = torch.cat((past_key, key), dim=-2)\n            value = torch.cat((past_value, value), dim=-2)\n\n        if use_cache is True:\n            present = (key, value)\n        else:\n            present = None\n\n        if self.reorder_and_upcast_attn:\n            attn_output, attn_weights = self._upcast_and_reordered_attn(query, key, value, attention_mask, head_mask)\n        else:\n            attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_mask)\n\n        attn_output = self._merge_heads(attn_output, self.num_heads, self.head_dim)\n        attn_output = self.c_proj(attn_output)\n        attn_output = self.resid_dropout(attn_output)\n\n        outputs = (attn_output, present)\n        if output_attentions:\n            outputs += (attn_weights,)\n\n        return outputs  # a, present, (attentions)\n\n\nclass GPT2FlashAttention2(GPT2Attention):\n    \"\"\"\n    GPT2 flash attention module. This module inherits from `GPT2Attention` as the weights of the module stays\n    untouched. The only required change would be on the forward pass where it needs to correctly call the public API of\n    flash attention and deal with padding tokens in case the input contains any of them.\n    \"\"\"\n\n    # Copied from transformers.models.llama.modeling_llama.LlamaFlashAttention2.__init__\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        # TODO: Should be removed once Flash Attention for RoCm is bumped to 2.1.\n        # flash_attn<2.1 generates top-left aligned causal mask, while what is needed here is bottom-right alignement, that was made default for flash_attn>=2.1. This attribute is used to handle this difference. Reference: https://github.com/Dao-AILab/flash-attention/releases/tag/v2.1.0.\n        # Beware that with flash_attn<2.1, using q_seqlen != k_seqlen (except for the case q_seqlen == 1) produces a wrong mask (top-left).\n        self._flash_attn_uses_top_left_mask = not is_flash_attn_greater_or_equal_2_10()\n\n    def forward(\n        self,\n        hidden_states: Optional[Tuple[torch.FloatTensor]],\n        layer_past: Optional[Tuple[torch.Tensor]] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.Tensor] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n        use_cache: Optional[bool] = False,\n        output_attentions: Optional[bool] = False,\n    ) -> Tuple[Union[torch.Tensor, Tuple[torch.Tensor]], ...]:\n        bsz, _, _ = hidden_states.size()\n        if encoder_hidden_states is not None:\n            if not hasattr(self, \"q_attn\"):\n                raise ValueError(\n                    \"If class is used as cross attention, the weights `q_attn` have to be defined. \"\n                    \"Please make sure to instantiate class with `GPT2Attention(..., is_cross_attention=True)`.\"\n                )\n\n            query = self.q_attn(hidden_states)\n            key, value = self.c_attn(encoder_hidden_states).split(self.split_size, dim=2)\n            attention_mask = encoder_attention_mask\n        else:\n            query, key, value = self.c_attn(hidden_states).split(self.split_size, dim=2)\n\n        query = self._split_heads(query, self.num_heads, self.head_dim)\n        key = self._split_heads(key, self.num_heads, self.head_dim)\n        value = self._split_heads(value, self.num_heads, self.head_dim)\n\n        if layer_past is not None:\n            past_key = layer_past[0]\n            past_value = layer_past[1]\n            key = torch.cat((past_key, key), dim=-2)\n            value = torch.cat((past_value, value), dim=-2)\n\n        present = None\n        if use_cache is True:\n            present = (key, value)\n\n        query_length = query.shape[2]\n        tgt_len = key.shape[2]\n\n        # Flash attention requires the input to have the shape\n        # batch_size x seq_length x head_dim x hidden_dim\n        query = query.transpose(1, 2).view(bsz, query_length, self.num_heads, self.head_dim)\n        key = key.transpose(1, 2).view(bsz, tgt_len, self.num_heads, self.head_dim)\n        value = value.transpose(1, 2).view(bsz, tgt_len, self.num_heads, self.head_dim)\n\n        attn_dropout = self.attn_dropout.p if self.training else 0.0\n\n        # In PEFT, usually we cast the layer norms in float32 for training stability reasons\n        # therefore the input hidden states gets silently casted in float32. Hence, we need\n        # cast them back in the correct dtype just to be sure everything works as expected.\n        # This might slowdown training & inference so it is recommended to not cast the LayerNorms\n        # in fp32. (LlamaRMSNorm handles it correctly)\n\n        if query.dtype == torch.float32:\n            if torch.is_autocast_enabled():\n                target_dtype = torch.get_autocast_gpu_dtype()\n            # Handle the case where the model is quantized\n            elif hasattr(self.config, \"_pre_quantization_dtype\"):\n                target_dtype = self.config._pre_quantization_dtype\n            else:\n                target_dtype = self.c_proj.weight.dtype\n\n            logger.warning_once(\n                f\"The input hidden states seems to be silently casted in float32, this might be related to\"\n                f\" the fact you have upcasted embedding or layer norm layers in float32. We will cast back the input in\"\n                f\" {target_dtype}.\"\n            )\n\n            query = query.to(target_dtype)\n            key = key.to(target_dtype)\n            value = value.to(target_dtype)\n\n        attn_output = _flash_attention_forward(\n            query,\n            key,\n            value,\n            attention_mask,\n            query_length,\n            dropout=attn_dropout,\n            is_causal=self.is_causal,\n            use_top_left_mask=self._flash_attn_uses_top_left_mask,\n        )\n\n        attn_weights_reshaped = attn_output.reshape(bsz, query_length, self.num_heads * self.head_dim)\n        attn_output = self.c_proj(attn_weights_reshaped)\n        attn_output = self.resid_dropout(attn_output)\n\n        outputs = (attn_output, present)\n        if output_attentions:\n            outputs += (attn_weights_reshaped,)\n\n        return outputs\n\n\nclass GPT2SdpaAttention(GPT2Attention):\n    \"\"\"\n    GPT2 attention module using torch.nn.functional.scaled_dot_product_attention. This module inherits from\n    `GPT2Attention` as the weights of the module stays untouched. The only changes are on the forward pass\n    to adapt to the SDPA API.\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        # Idea adapted from transformers.models.bert.modeling_bert.BertSdpaSelfAttention.__init__\n        # SDPA with memory-efficient backend is broken in torch==2.1.2 when using non-contiguous inputs and a custom\n        # attn_mask, so we need to call `.contiguous()`. This was fixed in torch==2.2.0.\n        # Reference: https://github.com/pytorch/pytorch/issues/112577\n        self.require_contiguous_qkv = version.parse(get_torch_version()) < version.parse(\"2.2.0\")\n\n    def forward(\n        self,\n        hidden_states: Optional[Tuple[torch.FloatTensor]],\n        layer_past: Optional[Tuple[torch.Tensor]] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.Tensor] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n        use_cache: Optional[bool] = False,\n        output_attentions: Optional[bool] = False,\n    ) -> Tuple[Union[torch.Tensor, Tuple[torch.Tensor]], ...]:\n        if output_attentions or head_mask is not None:\n            logger.warning_once(\n                \"`GPT2SdpaAttention` is used but `torch.nn.functional.scaled_dot_product_attention` does not support \"\n                \"`output_attentions=True` or `head_mask`. Falling back to the manual attention implementation, but \"\n                \"specifying the manual implementation will be required from Transformers version v5.0.0 onwards. \"\n                'This warning can be removed using the argument `attn_implementation=\"eager\"` when loading the model.'\n            )\n            return super().forward(\n                hidden_states=hidden_states,\n                layer_past=layer_past,\n                attention_mask=attention_mask,\n                head_mask=head_mask,\n                encoder_hidden_states=encoder_hidden_states,\n                encoder_attention_mask=encoder_attention_mask,\n                use_cache=use_cache,\n                output_attentions=output_attentions,\n            )\n\n        bsz, q_len, _ = hidden_states.size()\n\n        # Initial attention projections\n        is_cross_attention = encoder_hidden_states is not None\n        if is_cross_attention:\n            if not hasattr(self, \"q_attn\"):\n                raise ValueError(\n                    \"If class is used as cross attention, the weights `q_attn` have to be defined. \"\n                    \"Please make sure to instantiate class with `GPT2SdpaAttention(..., is_cross_attention=True)`.\"\n                )\n\n            query = self.q_attn(hidden_states)\n            key, value = self.c_attn(encoder_hidden_states).split(self.split_size, dim=2)\n            attention_mask = encoder_attention_mask\n        else:\n            query, key, value = self.c_attn(hidden_states).split(self.split_size, dim=2)\n\n        query = self._split_heads(query, self.num_heads, self.head_dim)\n        key = self._split_heads(key, self.num_heads, self.head_dim)\n        value = self._split_heads(value, self.num_heads, self.head_dim)\n\n        # Optional kv caching\n        if layer_past is not None:\n            past_key = layer_past[0]\n            past_value = layer_past[1]\n            key = torch.cat((past_key, key), dim=-2)\n            value = torch.cat((past_value, value), dim=-2)\n\n        present = None\n        if use_cache is True:\n            present = (key, value)\n\n        # Avoid torch==2.1.2 specific bug for the memory-efficient backend in SDPA\n        if self.require_contiguous_qkv and query.device.type == \"cuda\" and attention_mask is not None:\n            query = query.contiguous()\n            key = key.contiguous()\n            value = value.contiguous()\n\n        # We dispatch to SDPA's Flash Attention or Efficient kernels via this `is_causal` if statement instead of an inline conditional assignment\n        # in SDPA to support both torch.compile's dynamic shapes and full graph options. An inline conditional prevents dynamic shapes from compiling.\n        is_causal = True if attention_mask is None and q_len > 1 and not is_cross_attention else False\n\n        attn_output = torch.nn.functional.scaled_dot_product_attention(\n            query,\n            key,\n            value,\n            attn_mask=attention_mask,\n            dropout_p=self.attn_dropout.p if self.training else 0.0,\n            is_causal=is_causal,\n        )\n\n        # Reshape outputs\n        attn_output = attn_output.transpose(1, 2).contiguous()\n        attn_output = attn_output.view(bsz, q_len, self.embed_dim)\n\n        # Final projection\n        attn_output = self.c_proj(attn_output)\n        attn_output = self.resid_dropout(attn_output)\n\n        return attn_output, present, None\n\n\nclass GPT2MLP(nn.Module):\n    def __init__(self, intermediate_size, config):\n        super().__init__()\n        embed_dim = config.hidden_size\n        self.c_fc = Conv1D(intermediate_size, embed_dim)\n        self.c_proj = Conv1D(embed_dim, intermediate_size)\n        self.act = ACT2FN[config.activation_function]\n        self.dropout = nn.Dropout(config.resid_pdrop)\n\n    def forward(self, hidden_states: Optional[Tuple[torch.FloatTensor]]) -> torch.FloatTensor:\n        hidden_states = self.c_fc(hidden_states)\n        hidden_states = self.act(hidden_states)\n        hidden_states = self.c_proj(hidden_states)\n        hidden_states = self.dropout(hidden_states)\n        return hidden_states\n\n\nGPT2_ATTENTION_CLASSES = {\"eager\": GPT2Attention, \"flash_attention_2\": GPT2FlashAttention2, \"sdpa\": GPT2SdpaAttention}\n\n\nclass GPT2Block(nn.Module):\n    def __init__(self, config, layer_idx=None):\n        super().__init__()\n        hidden_size = config.hidden_size\n        inner_dim = config.n_inner if config.n_inner is not None else 4 * hidden_size\n        attention_class = GPT2_ATTENTION_CLASSES[config._attn_implementation]\n\n        self.ln_1 = nn.LayerNorm(hidden_size, eps=config.layer_norm_epsilon)\n        self.attn = attention_class(config=config, layer_idx=layer_idx)\n        self.ln_2 = nn.LayerNorm(hidden_size, eps=config.layer_norm_epsilon)\n\n        if config.add_cross_attention:\n            self.crossattention = attention_class(config=config, is_cross_attention=True, layer_idx=layer_idx)\n            self.ln_cross_attn = nn.LayerNorm(hidden_size, eps=config.layer_norm_epsilon)\n\n        self.mlp = GPT2MLP(inner_dim, config)\n\n    def forward(\n        self,\n        hidden_states: Optional[Tuple[torch.FloatTensor]],\n        layer_past: Optional[Tuple[torch.Tensor]] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.Tensor] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n        use_cache: Optional[bool] = False,\n        output_attentions: Optional[bool] = False,\n    ) -> Union[Tuple[torch.Tensor], Optional[Tuple[torch.Tensor, Tuple[torch.FloatTensor, ...]]]]:\n        residual = hidden_states\n        hidden_states = self.ln_1(hidden_states)\n        attn_outputs = self.attn(\n            hidden_states,\n            layer_past=layer_past,\n            attention_mask=attention_mask,\n            head_mask=head_mask,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n        )\n        attn_output = attn_outputs[0]  # output_attn: a, present, (attentions)\n        outputs = attn_outputs[1:]\n        # residual connection\n        hidden_states = attn_output + residual\n\n        if encoder_hidden_states is not None:\n            # add one self-attention block for cross-attention\n            if not hasattr(self, \"crossattention\"):\n                raise ValueError(\n                    f\"If `encoder_hidden_states` are passed, {self} has to be instantiated with \"\n                    \"cross-attention layers by setting `config.add_cross_attention=True`\"\n                )\n            residual = hidden_states\n            hidden_states = self.ln_cross_attn(hidden_states)\n            cross_attn_outputs = self.crossattention(\n                hidden_states,\n                attention_mask=attention_mask,\n                head_mask=head_mask,\n                encoder_hidden_states=encoder_hidden_states,\n                encoder_attention_mask=encoder_attention_mask,\n                output_attentions=output_attentions,\n            )\n            attn_output = cross_attn_outputs[0]\n            # residual connection\n            hidden_states = residual + attn_output\n            outputs = outputs + cross_attn_outputs[2:]  # add cross attentions if we output attention weights\n\n        residual = hidden_states\n        hidden_states = self.ln_2(hidden_states)\n        feed_forward_hidden_states = self.mlp(hidden_states)\n        # residual connection\n        hidden_states = residual + feed_forward_hidden_states\n\n        if use_cache:\n            outputs = (hidden_states,) + outputs\n        else:\n            outputs = (hidden_states,) + outputs[1:]\n\n        return outputs  # hidden_states, present, (attentions, cross_attentions)\n\n\nclass GPT2PreTrainedModel(PreTrainedModel):\n    \"\"\"\n    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained\n    models.\n    \"\"\"\n\n    config_class = GPT2Config\n    load_tf_weights = load_tf_weights_in_gpt2\n    base_model_prefix = \"transformer\"\n    is_parallelizable = True\n    supports_gradient_checkpointing = True\n    _no_split_modules = [\"GPT2Block\"]\n    _skip_keys_device_placement = \"past_key_values\"\n    _supports_flash_attn_2 = True\n    _supports_sdpa = True\n\n    def __init__(self, *inputs, **kwargs):\n        super().__init__(*inputs, **kwargs)\n\n    def _init_weights(self, module):\n        \"\"\"Initialize the weights.\"\"\"\n        if isinstance(module, (nn.Linear, Conv1D)):\n            # Slightly different from the TF version which uses truncated_normal for initialization\n            # cf https://github.com/pytorch/pytorch/pull/5617\n            module.weight.data.normal_(mean=0.0, std=self.config.initializer_range)\n            if module.bias is not None:\n                module.bias.data.zero_()\n        elif isinstance(module, nn.Embedding):\n            module.weight.data.normal_(mean=0.0, std=self.config.initializer_range)\n            if module.padding_idx is not None:\n                module.weight.data[module.padding_idx].zero_()\n        elif isinstance(module, nn.LayerNorm):\n            module.bias.data.zero_()\n            module.weight.data.fill_(1.0)\n\n        # Reinitialize selected weights subject to the OpenAI GPT-2 Paper Scheme:\n        #   > A modified initialization which accounts for the accumulation on the residual path with model depth. Scale\n        #   > the weights of residual layers at initialization by a factor of 1/√N where N is the # of residual layers.\n        #   >   -- GPT-2 :: https://openai.com/blog/better-language-models/\n        #\n        # Reference (Megatron-LM): https://github.com/NVIDIA/Megatron-LM/blob/main/megatron/model/gpt_model.py\n        for name, p in module.named_parameters():\n            if name == \"c_proj.weight\":\n                # Special Scaled Initialization --> There are 2 Layer Norms per Transformer Block\n                p.data.normal_(mean=0.0, std=(self.config.initializer_range / math.sqrt(2 * self.config.n_layer)))\n\n\n@dataclass\nclass GPT2DoubleHeadsModelOutput(ModelOutput):\n    \"\"\"\n    Base class for outputs of models predicting if two sentences are consecutive or not.\n\n    Args:\n        loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):\n            Language modeling loss.\n        mc_loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `mc_labels` is provided):\n            Multiple choice classification loss.\n        logits (`torch.FloatTensor` of shape `(batch_size, num_choices, sequence_length, config.vocab_size)`):\n            Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).\n        mc_logits (`torch.FloatTensor` of shape `(batch_size, num_choices)`):\n            Prediction scores of the multiple choice classification head (scores for each choice before SoftMax).\n        past_key_values (`Tuple[Tuple[torch.Tensor]]`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):\n            Tuple of length `config.n_layers`, containing tuples of tensors of shape `(batch_size, num_heads,\n            sequence_length, embed_size_per_head)`).\n\n            Contains pre-computed hidden-states (key and values in the attention blocks) that can be used (see\n            `past_key_values` input) to speed up sequential decoding.\n        hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):\n            Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each layer) of\n            shape `(batch_size, sequence_length, hidden_size)`.\n\n            Hidden-states of the model at the output of each layer plus the initial embedding outputs.\n        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):\n            Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,\n            sequence_length)`.\n\n            GPT2Attentions weights after the attention softmax, used to compute the weighted average in the\n            self-attention heads.\n    \"\"\"\n\n    loss: Optional[torch.FloatTensor] = None\n    mc_loss: Optional[torch.FloatTensor] = None\n    logits: torch.FloatTensor = None\n    mc_logits: torch.FloatTensor = None\n    past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None\n    hidden_states: Optional[Tuple[torch.FloatTensor]] = None\n    attentions: Optional[Tuple[torch.FloatTensor]] = None\n\n\nGPT2_START_DOCSTRING = r\"\"\"\n\n    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the\n    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads\n    etc.)\n\n    This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.\n    Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage\n    and behavior.\n\n    Parameters:\n        config ([`GPT2Config`]): Model configuration class with all the parameters of the model.\n            Initializing with a config file does not load the weights associated with the model, only the\n            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.\n\"\"\"\n\nGPT2_INPUTS_DOCSTRING = r\"\"\"\n    Args:\n        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):\n            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else\n            `past_key_values[0][0].shape[-2]` (`sequence_length` of input past key value states). Indices of input\n            sequence tokens in the vocabulary.\n\n            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as\n            `input_ids`.\n\n            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and\n            [`PreTrainedTokenizer.__call__`] for details.\n\n            [What are input IDs?](../glossary#input-ids)\n        past_key_values (`Tuple[Tuple[torch.Tensor]]` of length `config.n_layers`):\n            Contains precomputed hidden-states (key and values in the attention blocks) as computed by the model (see\n            `past_key_values` output below). Can be used to speed up sequential decoding. The `input_ids` which have\n            their past given to this model should not be passed as `input_ids` as they have already been computed.\n        attention_mask (`torch.FloatTensor` of shape `(batch_size, sequence_length)`, *optional*):\n            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:\n\n            - 1 for tokens that are **not masked**,\n            - 0 for tokens that are **masked**.\n\n            If `past_key_values` is used, `attention_mask` needs to contain the masking strategy that was used for\n            `past_key_values`. In other words, the `attention_mask` always has to have the length:\n            `len(past_key_values) + len(input_ids)`\n\n            [What are attention masks?](../glossary#attention-mask)\n        token_type_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`, *optional*):\n            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,\n            1]`:\n\n            - 0 corresponds to a *sentence A* token,\n            - 1 corresponds to a *sentence B* token.\n\n            [What are token type IDs?](../glossary#token-type-ids)\n        position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):\n            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,\n            config.max_position_embeddings - 1]`.\n\n            [What are position IDs?](../glossary#position-ids)\n        head_mask (`torch.FloatTensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):\n            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:\n\n            - 1 indicates the head is **not masked**,\n            - 0 indicates the head is **masked**.\n\n        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):\n            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This\n            is useful if you want more control over how to convert `input_ids` indices into associated vectors than the\n            model's internal embedding lookup matrix.\n\n            If `past_key_values` is used, optionally only the last `inputs_embeds` have to be input (see\n            `past_key_values`).\n        use_cache (`bool`, *optional*):\n            If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see\n            `past_key_values`).\n        output_attentions (`bool`, *optional*):\n            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned\n            tensors for more detail.\n        output_hidden_states (`bool`, *optional*):\n            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for\n            more detail.\n        return_dict (`bool`, *optional*):\n            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.\n\"\"\"\nPARALLELIZE_DOCSTRING = r\"\"\"\n    This is an experimental feature and is a subject to change at a moment's notice.\n\n    Uses a device map to distribute attention modules of the model across several devices. If no device map is given,\n    it will evenly distribute blocks across all devices.\n\n    Args:\n        device_map (`Dict[int, list]`, *optional*):\n            A dictionary that maps attention modules to devices. Note that the embedding module and LMHead are always\n            automatically mapped to the first device (for esoteric reasons). That means that the first device should\n            have fewer attention modules mapped to it than other devices. For reference, the gpt2 models have the\n            following number of attention modules:\n\n                - openai-community/gpt2: 12\n                - openai-community/gpt2-medium: 24\n                - openai-community/gpt2-large: 36\n                - openai-community/gpt2-xl: 48\n\n    Example:\n\n    ```python\n    # Here is an example of a device map on a machine with 4 GPUs using gpt2-xl, which has a total of 48 attention modules:\n    model = GPT2LMHeadModel.from_pretrained(\"openai-community/gpt2-xl\")\n    device_map = {\n        0: [0, 1, 2, 3, 4, 5, 6, 7, 8],\n        1: [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21],\n        2: [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34],\n        3: [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47],\n    }\n    model.parallelize(device_map)\n    ```\n\"\"\"\nDEPARALLELIZE_DOCSTRING = r\"\"\"\n    Moves the model to cpu from a model parallel state.\n\n    Example:\n\n    ```python\n    # On a 4 GPU machine with openai-community/gpt2-large:\n    model = GPT2LMHeadModel.from_pretrained(\"openai-community/gpt2-large\")\n    device_map = {\n        0: [0, 1, 2, 3, 4, 5, 6, 7],\n        1: [8, 9, 10, 11, 12, 13, 14, 15],\n        2: [16, 17, 18, 19, 20, 21, 22, 23],\n        3: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35],\n    }\n    model.parallelize(device_map)  # Splits the model across several devices\n    model.deparallelize()  # Put the model back on cpu and cleans memory by calling torch.cuda.empty_cache()\n    ```\n\"\"\"\n\n\n@add_start_docstrings(\n    \"The bare GPT2 Model transformer outputting raw hidden-states without any specific head on top.\",\n    GPT2_START_DOCSTRING,\n)\nclass GPT2Model(GPT2PreTrainedModel):\n    _supports_param_buffer_assignment = False\n\n    def __init__(self, config):\n        super().__init__(config)\n\n        self.embed_dim = config.hidden_size\n\n        self.wte = nn.Embedding(config.vocab_size, self.embed_dim)\n        self.wpe = nn.Embedding(config.max_position_embeddings, self.embed_dim)\n\n        self.drop = nn.Dropout(config.embd_pdrop)\n        self.h = nn.ModuleList([GPT2Block(config, layer_idx=i) for i in range(config.num_hidden_layers)])\n        self.ln_f = nn.LayerNorm(self.embed_dim, eps=config.layer_norm_epsilon)\n\n        # Model parallel\n        self.model_parallel = False\n        self.device_map = None\n        self.gradient_checkpointing = False\n        self._attn_implementation = config._attn_implementation\n\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    @add_start_docstrings(PARALLELIZE_DOCSTRING)\n    def parallelize(self, device_map=None):\n        # Check validity of device_map\n        warnings.warn(\n            \"`GPT2Model.parallelize` is deprecated and will be removed in v5 of Transformers, you should load your\"\n            \" model with `device_map='balanced'` in the call to `from_pretrained`. You can also provide your own\"\n            \" `device_map` but it needs to be a dictionary module_name to device, so for instance {'h.0': 0, 'h.1': 1,\"\n            \" ...}\",\n            FutureWarning,\n        )\n        self.device_map = (\n            get_device_map(len(self.h), range(torch.cuda.device_count())) if device_map is None else device_map\n        )\n        assert_device_map(self.device_map, len(self.h))\n        self.model_parallel = True\n        self.first_device = \"cpu\" if \"cpu\" in self.device_map.keys() else \"cuda:\" + str(min(self.device_map.keys()))\n        self.last_device = \"cuda:\" + str(max(self.device_map.keys()))\n        self.wte = self.wte.to(self.first_device)\n        self.wpe = self.wpe.to(self.first_device)\n        # Load onto devices\n        for k, v in self.device_map.items():\n            for block in v:\n                cuda_device = \"cuda:\" + str(k)\n                self.h[block] = self.h[block].to(cuda_device)\n        # ln_f to last\n        self.ln_f = self.ln_f.to(self.last_device)\n\n    @add_start_docstrings(DEPARALLELIZE_DOCSTRING)\n    def deparallelize(self):\n        warnings.warn(\n            \"Like `parallelize`, `deparallelize` is deprecated and will be removed in v5 of Transformers.\",\n            FutureWarning,\n        )\n        self.model_parallel = False\n        self.device_map = None\n        self.first_device = \"cpu\"\n        self.last_device = \"cpu\"\n        self.wte = self.wte.to(\"cpu\")\n        self.wpe = self.wpe.to(\"cpu\")\n        for index in range(len(self.h)):\n            self.h[index] = self.h[index].to(\"cpu\")\n        self.ln_f = self.ln_f.to(\"cpu\")\n        torch.cuda.empty_cache()\n\n    def get_input_embeddings(self):\n        return self.wte\n\n    def set_input_embeddings(self, new_embeddings):\n        self.wte = new_embeddings\n\n    def _prune_heads(self, heads_to_prune):\n        \"\"\"\n        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer}\n        \"\"\"\n        for layer, heads in heads_to_prune.items():\n            self.h[layer].attn.prune_heads(heads)\n\n    @add_start_docstrings_to_model_forward(GPT2_INPUTS_DOCSTRING)\n    @add_code_sample_docstrings(\n        checkpoint=_CHECKPOINT_FOR_DOC,\n        output_type=BaseModelOutputWithPastAndCrossAttentions,\n        config_class=_CONFIG_FOR_DOC,\n    )\n    def forward(\n        self,\n        input_ids: Optional[torch.LongTensor] = None,\n        past_key_values: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        token_type_ids: Optional[torch.LongTensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.Tensor] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n        use_cache: Optional[bool] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, BaseModelOutputWithPastAndCrossAttentions]:\n        output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions\n        output_hidden_states = (\n            output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states\n        )\n        use_cache = use_cache if use_cache is not None else self.config.use_cache\n        return_dict = return_dict if return_dict is not None else self.config.use_return_dict\n\n        if input_ids is not None and inputs_embeds is not None:\n            raise ValueError(\"You cannot specify both input_ids and inputs_embeds at the same time\")\n        elif input_ids is not None:\n            self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask)\n            input_shape = input_ids.size()\n            input_ids = input_ids.view(-1, input_shape[-1])\n            batch_size = input_ids.shape[0]\n        elif inputs_embeds is not None:\n            input_shape = inputs_embeds.size()[:-1]\n            batch_size = inputs_embeds.shape[0]\n        else:\n            raise ValueError(\"You have to specify either input_ids or inputs_embeds\")\n\n        device = input_ids.device if input_ids is not None else inputs_embeds.device\n\n        if token_type_ids is not None:\n            token_type_ids = token_type_ids.view(-1, input_shape[-1])\n\n        if past_key_values is None:\n            past_length = 0\n            past_key_values = tuple([None] * len(self.h))\n        else:\n            past_length = past_key_values[0][0].size(-2)\n        if position_ids is None:\n            position_ids = torch.arange(past_length, input_shape[-1] + past_length, dtype=torch.long, device=device)\n            position_ids = position_ids.unsqueeze(0)\n\n        if inputs_embeds is None:\n            inputs_embeds = self.wte(input_ids)\n        position_embeds = self.wpe(position_ids)\n        hidden_states = inputs_embeds + position_embeds\n\n        # Attention mask.\n        _use_sdpa = self._attn_implementation == \"sdpa\" and output_attentions is False and head_mask is None\n        attention_mask = attention_mask.view(batch_size, -1) if attention_mask is not None else None\n        if self._attn_implementation == \"flash_attention_2\":\n            attention_mask = attention_mask if (attention_mask is not None and 0 in attention_mask) else None\n        elif _use_sdpa:\n            attention_mask = _prepare_4d_causal_attention_mask_for_sdpa(\n                attention_mask=attention_mask,\n                input_shape=(batch_size, input_shape[-1]),\n                inputs_embeds=inputs_embeds,\n                past_key_values_length=past_length,\n            )\n        else:\n            if attention_mask is not None:\n                # We create a 3D attention mask from a 2D tensor mask.\n                # Sizes are [batch_size, 1, 1, to_seq_length]\n                # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length]\n                # this attention mask is more simple than the triangular masking of causal attention\n                # used in OpenAI GPT, we just need to prepare the broadcast dimension here.\n                attention_mask = attention_mask[:, None, None, :]\n\n                # Since attention_mask is 1.0 for positions we want to attend and 0.0 for\n                # masked positions, this operation will create a tensor which is 0.0 for\n                # positions we want to attend and the dtype's smallest value for masked positions.\n                # Since we are adding it to the raw scores before the softmax, this is\n                # effectively the same as removing these entirely.\n                attention_mask = attention_mask.to(dtype=self.dtype)  # fp16 compatibility\n                attention_mask = (1.0 - attention_mask) * torch.finfo(self.dtype).min\n\n        # If a 2D or 3D attention mask is provided for the cross-attention\n        # we need to make broadcastable to [batch_size, num_heads, seq_length, seq_length]\n        if self.config.add_cross_attention and encoder_hidden_states is not None:\n            encoder_batch_size, encoder_sequence_length, _ = encoder_hidden_states.size()\n            encoder_hidden_shape = (encoder_batch_size, encoder_sequence_length)\n            if encoder_attention_mask is None:\n                encoder_attention_mask = torch.ones(encoder_hidden_shape, device=device)\n            if _use_sdpa:\n                encoder_attention_mask = _prepare_4d_attention_mask_for_sdpa(\n                    mask=encoder_attention_mask, dtype=inputs_embeds.dtype, tgt_len=input_shape[-1]\n                )\n            elif not self._attn_implementation == \"flash_attention_2\":\n                encoder_attention_mask = self.invert_attention_mask(encoder_attention_mask)\n        else:\n            encoder_attention_mask = None\n\n        # Prepare head mask if needed\n        # 1.0 in head_mask indicate we keep the head\n        # attention_probs has shape bsz x n_heads x N x N\n        # head_mask has shape n_layer x batch x n_heads x N x N\n        head_mask = self.get_head_mask(head_mask, self.config.n_layer)\n\n        if token_type_ids is not None:\n            token_type_embeds = self.wte(token_type_ids)\n            hidden_states = hidden_states + token_type_embeds\n\n        hidden_states = self.drop(hidden_states)\n\n        output_shape = (-1,) + input_shape[1:] + (hidden_states.size(-1),)\n\n        if self.gradient_checkpointing and self.training:\n            if use_cache:\n                logger.warning_once(\n                    \"`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...\"\n                )\n                use_cache = False\n\n        presents = () if use_cache else None\n        all_self_attentions = () if output_attentions else None\n        all_cross_attentions = () if output_attentions and self.config.add_cross_attention else None\n        all_hidden_states = () if output_hidden_states else None\n        for i, (block, layer_past) in enumerate(zip(self.h, past_key_values)):\n            # Model parallel\n            if self.model_parallel:\n                torch.cuda.set_device(hidden_states.device)\n                # Ensure layer_past is on same device as hidden_states (might not be correct)\n                if layer_past is not None:\n                    layer_past = tuple(past_state.to(hidden_states.device) for past_state in layer_past)\n                # Ensure that attention_mask is always on the same device as hidden_states\n                if attention_mask is not None:\n                    attention_mask = attention_mask.to(hidden_states.device)\n                if isinstance(head_mask, torch.Tensor):\n                    head_mask = head_mask.to(hidden_states.device)\n            if output_hidden_states:\n                all_hidden_states = all_hidden_states + (hidden_states,)\n\n            if self.gradient_checkpointing and self.training:\n                outputs = self._gradient_checkpointing_func(\n                    block.__call__,\n                    hidden_states,\n                    None,\n                    attention_mask,\n                    head_mask[i],\n                    encoder_hidden_states,\n                    encoder_attention_mask,\n                    use_cache,\n                    output_attentions,\n                )\n            else:\n                outputs = block(\n                    hidden_states,\n                    layer_past=layer_past,\n                    attention_mask=attention_mask,\n                    head_mask=head_mask[i],\n                    encoder_hidden_states=encoder_hidden_states,\n                    encoder_attention_mask=encoder_attention_mask,\n                    use_cache=use_cache,\n                    output_attentions=output_attentions,\n                )\n\n            hidden_states = outputs[0]\n            if use_cache is True:\n                presents = presents + (outputs[1],)\n\n            if output_attentions:\n                all_self_attentions = all_self_attentions + (outputs[2 if use_cache else 1],)\n                if self.config.add_cross_attention:\n                    all_cross_attentions = all_cross_attentions + (outputs[3 if use_cache else 2],)\n\n            # Model Parallel: If it's the last layer for that device, put things on the next device\n            if self.model_parallel:\n                for k, v in self.device_map.items():\n                    if i == v[-1] and \"cuda:\" + str(k) != self.last_device:\n                        hidden_states = hidden_states.to(\"cuda:\" + str(k + 1))\n\n        hidden_states = self.ln_f(hidden_states)\n\n        hidden_states = hidden_states.view(output_shape)\n        # Add last hidden state\n        if output_hidden_states:\n            all_hidden_states = all_hidden_states + (hidden_states,)\n\n        if not return_dict:\n            return tuple(\n                v\n                for v in [hidden_states, presents, all_hidden_states, all_self_attentions, all_cross_attentions]\n                if v is not None\n            )\n\n        return BaseModelOutputWithPastAndCrossAttentions(\n            last_hidden_state=hidden_states,\n            past_key_values=presents,\n            hidden_states=all_hidden_states,\n            attentions=all_self_attentions,\n            cross_attentions=all_cross_attentions,\n        )\n\n\n@add_start_docstrings(\n    \"\"\"\n    The GPT2 Model transformer with a language modeling head on top (linear layer with weights tied to the input\n    embeddings).\n    \"\"\",\n    GPT2_START_DOCSTRING,\n)\nclass GPT2LMHeadModel(GPT2PreTrainedModel, GenerationMixin):\n    _tied_weights_keys = [\"lm_head.weight\"]\n\n    def __init__(self, config):\n        super().__init__(config)\n        self.transformer = GPT2Model(config)\n        self.lm_head = nn.Linear(config.n_embd, config.vocab_size, bias=False)\n\n        # Model parallel\n        self.model_parallel = False\n        self.device_map = None\n\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    @add_start_docstrings(PARALLELIZE_DOCSTRING)\n    def parallelize(self, device_map=None):\n        warnings.warn(\n            \"`GPT2LMHeadModel.parallelize` is deprecated and will be removed in v5 of Transformers, you should load\"\n            \" your model with `device_map='balanced'` in the call to `from_pretrained`. You can also provide your own\"\n            \" `device_map` but it needs to be a dictionary module_name to device, so for instance {'transformer.h.0':\"\n            \" 0, 'transformer.h.1': 1, ...}\",\n            FutureWarning,\n        )\n        self.device_map = (\n            get_device_map(len(self.transformer.h), range(torch.cuda.device_count()))\n            if device_map is None\n            else device_map\n        )\n        assert_device_map(self.device_map, len(self.transformer.h))\n        self.transformer.parallelize(self.device_map)\n        self.lm_head = self.lm_head.to(self.transformer.first_device)\n        self.model_parallel = True\n\n    @add_start_docstrings(DEPARALLELIZE_DOCSTRING)\n    def deparallelize(self):\n        warnings.warn(\n            \"Like `parallelize`, `deparallelize` is deprecated and will be removed in v5 of Transformers.\",\n            FutureWarning,\n        )\n        self.transformer.deparallelize()\n        self.transformer = self.transformer.to(\"cpu\")\n        self.lm_head = self.lm_head.to(\"cpu\")\n        self.model_parallel = False\n        torch.cuda.empty_cache()\n\n    def get_output_embeddings(self):\n        return self.lm_head\n\n    def set_output_embeddings(self, new_embeddings):\n        self.lm_head = new_embeddings\n\n    @add_start_docstrings_to_model_forward(GPT2_INPUTS_DOCSTRING)\n    @add_code_sample_docstrings(\n        checkpoint=_CHECKPOINT_FOR_DOC,\n        output_type=CausalLMOutputWithCrossAttentions,\n        config_class=_CONFIG_FOR_DOC,\n    )\n    def forward(\n        self,\n        input_ids: Optional[torch.LongTensor] = None,\n        past_key_values: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        token_type_ids: Optional[torch.LongTensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.Tensor] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n        labels: Optional[torch.LongTensor] = None,\n        use_cache: Optional[bool] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, CausalLMOutputWithCrossAttentions]:\n        r\"\"\"\n        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):\n            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set\n            `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`\n            are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`\n        \"\"\"\n        return_dict = return_dict if return_dict is not None else self.config.use_return_dict\n\n        transformer_outputs = self.transformer(\n            input_ids,\n            past_key_values=past_key_values,\n            attention_mask=attention_mask,\n            token_type_ids=token_type_ids,\n            position_ids=position_ids,\n            head_mask=head_mask,\n            inputs_embeds=inputs_embeds,\n            encoder_hidden_states=encoder_hidden_states,\n            encoder_attention_mask=encoder_attention_mask,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n        hidden_states = transformer_outputs[0]\n\n        # Set device for model parallelism\n        if self.model_parallel:\n            torch.cuda.set_device(self.transformer.first_device)\n            hidden_states = hidden_states.to(self.lm_head.weight.device)\n\n        lm_logits = self.lm_head(hidden_states)\n\n        loss = None\n        if labels is not None:\n            # move labels to correct device to enable model parallelism\n            labels = labels.to(lm_logits.device)\n            # Shift so that tokens < n predict n\n            shift_logits = lm_logits[..., :-1, :].contiguous()\n            shift_labels = labels[..., 1:].contiguous()\n            # Flatten the tokens\n            loss_fct = CrossEntropyLoss()\n            loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))\n\n        if not return_dict:\n            output = (lm_logits,) + transformer_outputs[1:]\n            return ((loss,) + output) if loss is not None else output\n\n        return CausalLMOutputWithCrossAttentions(\n            loss=loss,\n            logits=lm_logits,\n            past_key_values=transformer_outputs.past_key_values,\n            hidden_states=transformer_outputs.hidden_states,\n            attentions=transformer_outputs.attentions,\n            cross_attentions=transformer_outputs.cross_attentions,\n        )\n\n    @staticmethod\n    def _reorder_cache(\n        past_key_values: Tuple[Tuple[torch.Tensor]], beam_idx: torch.Tensor\n    ) -> Tuple[Tuple[torch.Tensor]]:\n        \"\"\"\n        This function is used to re-order the `past_key_values` cache if [`~PreTrainedModel.beam_search`] or\n        [`~PreTrainedModel.beam_sample`] is called. This is required to match `past_key_values` with the correct\n        beam_idx at every generation step.\n        \"\"\"\n        return tuple(\n            tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past)\n            for layer_past in past_key_values\n        )\n\n\n@add_start_docstrings(\n    \"\"\"\nThe GPT2 Model transformer with a language modeling and a multiple-choice classification head on top e.g. for\nRocStories/SWAG tasks. The two heads are two linear layers. The language modeling head has its weights tied to the\ninput embeddings, the classification head takes as input the input of a specified classification token index in the\ninput sequence).\n\"\"\",\n    GPT2_START_DOCSTRING,\n)\nclass GPT2DoubleHeadsModel(GPT2PreTrainedModel, GenerationMixin):\n    _tied_weights_keys = [\"lm_head.weight\"]\n\n    def __init__(self, config):\n        super().__init__(config)\n        config.num_labels = 1\n        self.transformer = GPT2Model(config)\n        self.lm_head = nn.Linear(config.n_embd, config.vocab_size, bias=False)\n        self.multiple_choice_head = SequenceSummary(config)\n\n        # Model parallel\n        self.model_parallel = False\n        self.device_map = None\n\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    @add_start_docstrings(PARALLELIZE_DOCSTRING)\n    def parallelize(self, device_map=None):\n        warnings.warn(\n            \"`GPT2DoubleHeadsModel.parallelize` is deprecated and will be removed in v5 of Transformers, you should\"\n            \" load your model with `device_map='balanced'` in the call to `from_pretrained`. You can also provide your\"\n            \" own `device_map` but it needs to be a dictionary module_name to device, so for instance\"\n            \" {'transformer.h.0': 0, 'transformer.h.1': 1, ...}\",\n            FutureWarning,\n        )\n        self.device_map = (\n            get_device_map(len(self.transformer.h), range(torch.cuda.device_count()))\n            if device_map is None\n            else device_map\n        )\n        assert_device_map(self.device_map, len(self.transformer.h))\n        self.transformer.parallelize(self.device_map)\n        self.lm_head = self.lm_head.to(self.transformer.first_device)\n        self.multiple_choice_head = self.multiple_choice_head.to(self.transformer.first_device)\n        self.model_parallel = True\n\n    @add_start_docstrings(DEPARALLELIZE_DOCSTRING)\n    def deparallelize(self):\n        warnings.warn(\n            \"Like `parallelize`, `deparallelize` is deprecated and will be removed in v5 of Transformers.\",\n            FutureWarning,\n        )\n        self.transformer.deparallelize()\n        self.transformer = self.transformer.to(\"cpu\")\n        self.lm_head = self.lm_head.to(\"cpu\")\n        self.multiple_choice_head = self.multiple_choice_head.to(\"cpu\")\n        self.model_parallel = False\n        torch.cuda.empty_cache()\n\n    def get_output_embeddings(self):\n        return self.lm_head\n\n    def set_output_embeddings(self, new_embeddings):\n        self.lm_head = new_embeddings\n\n    @add_start_docstrings_to_model_forward(GPT2_INPUTS_DOCSTRING)\n    @replace_return_docstrings(output_type=GPT2DoubleHeadsModelOutput, config_class=_CONFIG_FOR_DOC)\n    def forward(\n        self,\n        input_ids: Optional[torch.LongTensor] = None,\n        past_key_values: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        token_type_ids: Optional[torch.LongTensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        mc_token_ids: Optional[torch.LongTensor] = None,\n        labels: Optional[torch.LongTensor] = None,\n        mc_labels: Optional[torch.LongTensor] = None,\n        use_cache: Optional[bool] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n        **kwargs,\n    ) -> Union[Tuple, GPT2DoubleHeadsModelOutput]:\n        r\"\"\"\n        mc_token_ids (`torch.LongTensor` of shape `(batch_size, num_choices)`, *optional*, default to index of the last token of the input):\n            Index of the classification token in each input sequence. Selected in the range `[0, input_ids.size(-1) -\n            1]`.\n        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):\n            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set\n            `labels = input_ids`. Indices are selected in `[-100, 0, ..., config.vocab_size - 1]`. All labels set to\n            `-100` are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size - 1]`\n        mc_labels (`torch.LongTensor` of shape `(batch_size)`, *optional*):\n            Labels for computing the multiple choice classification loss. Indices should be in `[0, ..., num_choices]`\n            where *num_choices* is the size of the second dimension of the input tensors. (see *input_ids* above)\n\n        Return:\n\n        Example:\n\n        ```python\n        >>> import torch\n        >>> from transformers import AutoTokenizer, GPT2DoubleHeadsModel\n\n        >>> tokenizer = AutoTokenizer.from_pretrained(\"openai-community/gpt2\")\n        >>> model = GPT2DoubleHeadsModel.from_pretrained(\"openai-community/gpt2\")\n\n        >>> # Add a [CLS] to the vocabulary (we should train it also!)\n        >>> num_added_tokens = tokenizer.add_special_tokens({\"cls_token\": \"[CLS]\"})\n        >>> # Update the model embeddings with the new vocabulary size\n        >>> embedding_layer = model.resize_token_embeddings(len(tokenizer))\n\n        >>> choices = [\"Hello, my dog is cute [CLS]\", \"Hello, my cat is cute [CLS]\"]\n        >>> encoded_choices = [tokenizer.encode(s) for s in choices]\n        >>> cls_token_location = [tokens.index(tokenizer.cls_token_id) for tokens in encoded_choices]\n\n        >>> input_ids = torch.tensor(encoded_choices).unsqueeze(0)  # Batch size: 1, number of choices: 2\n        >>> mc_token_ids = torch.tensor([cls_token_location])  # Batch size: 1\n\n        >>> outputs = model(input_ids, mc_token_ids=mc_token_ids)\n        >>> lm_logits = outputs.logits\n        >>> mc_logits = outputs.mc_logits\n        ```\"\"\"\n        return_dict = return_dict if return_dict is not None else self.config.use_return_dict\n\n        transformer_outputs = self.transformer(\n            input_ids,\n            past_key_values=past_key_values,\n            attention_mask=attention_mask,\n            token_type_ids=token_type_ids,\n            position_ids=position_ids,\n            head_mask=head_mask,\n            inputs_embeds=inputs_embeds,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n\n        hidden_states = transformer_outputs[0]\n\n        # Set device for model parallelism\n        if self.model_parallel:\n            torch.cuda.set_device(self.transformer.first_device)\n            hidden_states = hidden_states.to(self.lm_head.weight.device)\n\n        lm_logits = self.lm_head(hidden_states)\n        mc_logits = self.multiple_choice_head(hidden_states, mc_token_ids).squeeze(-1)\n\n        mc_loss = None\n        if mc_labels is not None:\n            loss_fct = CrossEntropyLoss()\n            mc_loss = loss_fct(mc_logits.view(-1, mc_logits.size(-1)), mc_labels.view(-1))\n        lm_loss = None\n        if labels is not None:\n            labels = labels.to(lm_logits.device)\n            shift_logits = lm_logits[..., :-1, :].contiguous()\n            shift_labels = labels[..., 1:].contiguous()\n            loss_fct = CrossEntropyLoss()\n            lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))\n\n        if not return_dict:\n            output = (lm_logits, mc_logits) + transformer_outputs[1:]\n            if mc_loss is not None:\n                output = (mc_loss,) + output\n            return ((lm_loss,) + output) if lm_loss is not None else output\n\n        return GPT2DoubleHeadsModelOutput(\n            loss=lm_loss,\n            mc_loss=mc_loss,\n            logits=lm_logits,\n            mc_logits=mc_logits,\n            past_key_values=transformer_outputs.past_key_values,\n            hidden_states=transformer_outputs.hidden_states,\n            attentions=transformer_outputs.attentions,\n        )\n\n    @staticmethod\n    def _reorder_cache(\n        past_key_values: Tuple[Tuple[torch.Tensor]], beam_idx: torch.Tensor\n    ) -> Tuple[Tuple[torch.Tensor]]:\n        \"\"\"\n        This function is used to re-order the `past_key_values` cache if [`~PreTrainedModel.beam_search`] or\n        [`~PreTrainedModel.beam_sample`] is called. This is required to match `past_key_values` with the correct\n        beam_idx at every generation step.\n        \"\"\"\n        return tuple(\n            tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past)\n            for layer_past in past_key_values\n        )\n\n\n@add_start_docstrings(\n    \"\"\"\n    The GPT2 Model transformer with a sequence classification head on top (linear layer).\n\n    [`GPT2ForSequenceClassification`] uses the last token in order to do the classification, as other causal models\n    (e.g. GPT-1) do.\n\n    Since it does classification on the last token, it requires to know the position of the last token. If a\n    `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in each row. If\n    no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot guess the\n    padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last value in\n    each row of the batch).\n    \"\"\",\n    GPT2_START_DOCSTRING,\n)\nclass GPT2ForSequenceClassification(GPT2PreTrainedModel):\n    def __init__(self, config):\n        super().__init__(config)\n        self.num_labels = config.num_labels\n        self.transformer = GPT2Model(config)\n        self.score = nn.Linear(config.n_embd, self.num_labels, bias=False)\n\n        # Model parallel\n        self.model_parallel = False\n        self.device_map = None\n\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    @add_start_docstrings_to_model_forward(GPT2_INPUTS_DOCSTRING)\n    @add_code_sample_docstrings(\n        checkpoint=\"microsoft/DialogRPT-updown\",\n        output_type=SequenceClassifierOutputWithPast,\n        config_class=_CONFIG_FOR_DOC,\n    )\n    def forward(\n        self,\n        input_ids: Optional[torch.LongTensor] = None,\n        past_key_values: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        token_type_ids: Optional[torch.LongTensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        labels: Optional[torch.LongTensor] = None,\n        use_cache: Optional[bool] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, SequenceClassifierOutputWithPast]:\n        r\"\"\"\n        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,\n            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If\n            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).\n        \"\"\"\n        return_dict = return_dict if return_dict is not None else self.config.use_return_dict\n\n        transformer_outputs = self.transformer(\n            input_ids,\n            past_key_values=past_key_values,\n            attention_mask=attention_mask,\n            token_type_ids=token_type_ids,\n            position_ids=position_ids,\n            head_mask=head_mask,\n            inputs_embeds=inputs_embeds,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n        hidden_states = transformer_outputs[0]\n        logits = self.score(hidden_states)\n\n        if input_ids is not None:\n            batch_size, sequence_length = input_ids.shape[:2]\n        else:\n            batch_size, sequence_length = inputs_embeds.shape[:2]\n\n        assert (\n            self.config.pad_token_id is not None or batch_size == 1\n        ), \"Cannot handle batch sizes > 1 if no padding token is defined.\"\n        if self.config.pad_token_id is None:\n            sequence_lengths = -1\n        else:\n            if input_ids is not None:\n                # if no pad token found, use modulo instead of reverse indexing for ONNX compatibility\n                sequence_lengths = torch.eq(input_ids, self.config.pad_token_id).int().argmax(-1) - 1\n                sequence_lengths = sequence_lengths % input_ids.shape[-1]\n                sequence_lengths = sequence_lengths.to(logits.device)\n            else:\n                sequence_lengths = -1\n                logger.warning_once(\n                    f\"{self.__class__.__name__} will not detect padding tokens in `inputs_embeds`. Results may be \"\n                    \"unexpected if using padding tokens in conjunction with `inputs_embeds.`\"\n                )\n\n        pooled_logits = logits[torch.arange(batch_size, device=logits.device), sequence_lengths]\n\n        loss = None\n        if labels is not None:\n            if self.config.problem_type is None:\n                if self.num_labels == 1:\n                    self.config.problem_type = \"regression\"\n                elif self.num_labels > 1 and (labels.dtype == torch.long or labels.dtype == torch.int):\n                    self.config.problem_type = \"single_label_classification\"\n                else:\n                    self.config.problem_type = \"multi_label_classification\"\n\n            if self.config.problem_type == \"regression\":\n                loss_fct = MSELoss()\n                if self.num_labels == 1:\n                    loss = loss_fct(pooled_logits.squeeze(), labels.squeeze())\n                else:\n                    loss = loss_fct(pooled_logits, labels)\n            elif self.config.problem_type == \"single_label_classification\":\n                loss_fct = CrossEntropyLoss()\n                loss = loss_fct(pooled_logits.view(-1, self.num_labels), labels.view(-1))\n            elif self.config.problem_type == \"multi_label_classification\":\n                loss_fct = BCEWithLogitsLoss()\n                loss = loss_fct(pooled_logits, labels)\n        if not return_dict:\n            output = (pooled_logits,) + transformer_outputs[1:]\n            return ((loss,) + output) if loss is not None else output\n\n        return SequenceClassifierOutputWithPast(\n            loss=loss,\n            logits=pooled_logits,\n            past_key_values=transformer_outputs.past_key_values,\n            hidden_states=transformer_outputs.hidden_states,\n            attentions=transformer_outputs.attentions,\n        )\n\n\n@add_start_docstrings(\n    \"\"\"\n    GPT2 Model with a token classification head on top (a linear layer on top of the hidden-states output) e.g. for\n    Named-Entity-Recognition (NER) tasks.\n    \"\"\",\n    GPT2_START_DOCSTRING,\n)\nclass GPT2ForTokenClassification(GPT2PreTrainedModel):\n    def __init__(self, config):\n        super().__init__(config)\n        self.num_labels = config.num_labels\n\n        self.transformer = GPT2Model(config)\n        if hasattr(config, \"classifier_dropout\") and config.classifier_dropout is not None:\n            classifier_dropout = config.classifier_dropout\n        elif hasattr(config, \"hidden_dropout\") and config.hidden_dropout is not None:\n            classifier_dropout = config.hidden_dropout\n        else:\n            classifier_dropout = 0.1\n        self.dropout = nn.Dropout(classifier_dropout)\n        self.classifier = nn.Linear(config.hidden_size, config.num_labels)\n\n        # Model parallel\n        self.model_parallel = False\n        self.device_map = None\n\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    @add_start_docstrings_to_model_forward(GPT2_INPUTS_DOCSTRING)\n    # fmt: off\n    @add_code_sample_docstrings(\n        checkpoint=\"brad1141/gpt2-finetuned-comp2\",\n        output_type=TokenClassifierOutput,\n        config_class=_CONFIG_FOR_DOC,\n        expected_loss=0.25,\n        expected_output=[\n            \"Lead\",\n            \"Lead\",\n            \"Lead\",\n            \"Position\",\n            \"Lead\",\n            \"Lead\",\n            \"Lead\",\n            \"Lead\",\n            \"Lead\",\n            \"Lead\",\n            \"Lead\",\n            \"Lead\",\n        ],\n    )\n    # fmt: on\n    def forward(\n        self,\n        input_ids: Optional[torch.LongTensor] = None,\n        past_key_values: Optional[Tuple[Tuple[torch.Tensor]]] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        token_type_ids: Optional[torch.LongTensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        labels: Optional[torch.LongTensor] = None,\n        use_cache: Optional[bool] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, TokenClassifierOutput]:\n        r\"\"\"\n        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):\n            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,\n            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If\n            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).\n        \"\"\"\n        return_dict = return_dict if return_dict is not None else self.config.use_return_dict\n\n        transformer_outputs = self.transformer(\n            input_ids,\n            past_key_values=past_key_values,\n            attention_mask=attention_mask,\n            token_type_ids=token_type_ids,\n            position_ids=position_ids,\n            head_mask=head_mask,\n            inputs_embeds=inputs_embeds,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n\n        hidden_states = transformer_outputs[0]\n        hidden_states = self.dropout(hidden_states)\n        logits = self.classifier(hidden_states)\n\n        loss = None\n        if labels is not None:\n            labels = labels.to(logits.device)\n            loss_fct = CrossEntropyLoss()\n            loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1))\n\n        if not return_dict:\n            output = (logits,) + transformer_outputs[2:]\n            return ((loss,) + output) if loss is not None else output\n\n        return TokenClassifierOutput(\n            loss=loss,\n            logits=logits,\n            hidden_states=transformer_outputs.hidden_states,\n            attentions=transformer_outputs.attentions,\n        )\n\n\n@add_start_docstrings(\n    \"\"\"\n    The GPT-2 Model transformer with a span classification head on top for extractive question-answering tasks like\n    SQuAD (a linear layer on top of the hidden-states output to compute `span start logits` and `span end logits`).\n    \"\"\",\n    GPT2_START_DOCSTRING,\n)\nclass GPT2ForQuestionAnswering(GPT2PreTrainedModel):\n    def __init__(self, config):\n        super().__init__(config)\n        self.num_labels = config.num_labels\n        self.transformer = GPT2Model(config)\n        self.qa_outputs = nn.Linear(config.hidden_size, 2)\n\n        # Model parallel\n        self.model_parallel = False\n        self.device_map = None\n\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    @add_start_docstrings_to_model_forward(GPT2_INPUTS_DOCSTRING.format(\"batch_size, sequence_length\"))\n    @add_code_sample_docstrings(\n        checkpoint=_CHECKPOINT_FOR_DOC,\n        output_type=QuestionAnsweringModelOutput,\n        config_class=_CONFIG_FOR_DOC,\n        real_checkpoint=_CHECKPOINT_FOR_DOC,\n    )\n    def forward(\n        self,\n        input_ids: Optional[torch.LongTensor] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        token_type_ids: Optional[torch.LongTensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        head_mask: Optional[torch.FloatTensor] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        start_positions: Optional[torch.LongTensor] = None,\n        end_positions: Optional[torch.LongTensor] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, QuestionAnsweringModelOutput]:\n        r\"\"\"\n        start_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n            Labels for position (index) of the start of the labelled span for computing the token classification loss.\n            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence\n            are not taken into account for computing the loss.\n        end_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n            Labels for position (index) of the end of the labelled span for computing the token classification loss.\n            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence\n            are not taken into account for computing the loss.\n        \"\"\"\n        return_dict = return_dict if return_dict is not None else self.config.use_return_dict\n\n        outputs = self.transformer(\n            input_ids,\n            attention_mask=attention_mask,\n            token_type_ids=token_type_ids,\n            position_ids=position_ids,\n            head_mask=head_mask,\n            inputs_embeds=inputs_embeds,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n\n        sequence_output = outputs[0]\n\n        logits = self.qa_outputs(sequence_output)\n        start_logits, end_logits = logits.split(1, dim=-1)\n        start_logits = start_logits.squeeze(-1).contiguous()\n        end_logits = end_logits.squeeze(-1).contiguous()\n\n        total_loss = None\n        if start_positions is not None and end_positions is not None:\n            # If we are on multi-GPU, split add a dimension\n            if len(start_positions.size()) > 1:\n                start_positions = start_positions.squeeze(-1).to(start_logits.device)\n            if len(end_positions.size()) > 1:\n                end_positions = end_positions.squeeze(-1).to(end_logits.device)\n            # sometimes the start/end positions are outside our model inputs, we ignore these terms\n            ignored_index = start_logits.size(1)\n            start_positions = start_positions.clamp(0, ignored_index)\n            end_positions = end_positions.clamp(0, ignored_index)\n\n            loss_fct = CrossEntropyLoss(ignore_index=ignored_index)\n            start_loss = loss_fct(start_logits, start_positions)\n            end_loss = loss_fct(end_logits, end_positions)\n            total_loss = (start_loss + end_loss) / 2\n\n        if not return_dict:\n            output = (start_logits, end_logits) + outputs[2:]\n            return ((total_loss,) + output) if total_loss is not None else output\n\n        return QuestionAnsweringModelOutput(\n            loss=total_loss,\n            start_logits=start_logits,\n            end_logits=end_logits,\n            hidden_states=outputs.hidden_states,\n            attentions=outputs.attentions,\n        )\n"
  },
  {
    "path": "xinference/thirdparty/indextts/gpt/transformers_modeling_utils.py",
    "content": "# coding=utf-8\n# Copyright 2018 The Google AI Language Team Authors, Facebook AI Research authors and The HuggingFace Inc. team.\n# Copyright (c) 2018, NVIDIA CORPORATION.  All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport collections\nimport copy\nimport functools\nimport gc\nimport importlib.metadata\nimport inspect\nimport itertools\nimport json\nimport os\nimport re\nimport shutil\nimport tempfile\nimport warnings\nfrom contextlib import contextmanager\nfrom dataclasses import dataclass\nfrom functools import partial, wraps\nfrom threading import Thread\nfrom typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union\nfrom zipfile import is_zipfile\n\nimport torch\nfrom huggingface_hub import split_torch_state_dict_into_shards\nfrom packaging import version\nfrom torch import Tensor, nn\nfrom torch.nn import CrossEntropyLoss, Identity\nfrom torch.utils.checkpoint import checkpoint\nfrom transformers.activations import get_activation\nfrom transformers.configuration_utils import PretrainedConfig\nfrom transformers.dynamic_module_utils import custom_object_save\nfrom transformers.generation import GenerationConfig\nimport transformers\nfrom indextts.gpt.transformers_generation_utils import GenerationMixin\nfrom transformers.generation import GenerationConfig\n\n\nfrom transformers.integrations import PeftAdapterMixin, deepspeed_config, is_deepspeed_zero3_enabled\nfrom transformers.loss.loss_utils import LOSS_MAPPING\nfrom transformers.pytorch_utils import (  # noqa: F401\n    Conv1D,\n    apply_chunking_to_forward,\n    find_pruneable_heads_and_indices,\n    id_tensor_storage,\n    is_torch_greater_or_equal_than_1_13,\n    prune_conv1d_layer,\n    prune_layer,\n    prune_linear_layer,\n)\nfrom transformers.quantizers import AutoHfQuantizer, HfQuantizer\nfrom transformers.quantizers.quantizers_utils import get_module_from_name\nfrom transformers.safetensors_conversion import auto_conversion\nfrom transformers.utils import (\n    ACCELERATE_MIN_VERSION,\n    ADAPTER_SAFE_WEIGHTS_NAME,\n    ADAPTER_WEIGHTS_NAME,\n    CONFIG_NAME,\n    DUMMY_INPUTS,\n    FLAX_WEIGHTS_NAME,\n    SAFE_WEIGHTS_INDEX_NAME,\n    SAFE_WEIGHTS_NAME,\n    TF2_WEIGHTS_NAME,\n    TF_WEIGHTS_NAME,\n    WEIGHTS_INDEX_NAME,\n    WEIGHTS_NAME,\n    ContextManagers,\n    ModelOutput,\n    PushToHubMixin,\n    cached_file,\n    copy_func,\n    download_url,\n    extract_commit_hash,\n    has_file,\n    is_accelerate_available,\n    is_bitsandbytes_available,\n    is_flash_attn_2_available,\n    is_offline_mode,\n    is_optimum_available,\n    is_peft_available,\n    is_remote_url,\n    is_safetensors_available,\n    is_torch_sdpa_available,\n    is_torch_xla_available,\n    logging,\n    replace_return_docstrings,\n    strtobool,\n)\nfrom transformers.utils.hub import convert_file_size_to_int, create_and_tag_model_card, get_checkpoint_shard_files\nfrom transformers.utils.import_utils import (\n    ENV_VARS_TRUE_VALUES,\n    is_sagemaker_mp_enabled,\n    is_torch_fx_proxy,\n    is_torchdynamo_compiling,\n)\nfrom transformers.utils.quantization_config import BitsAndBytesConfig, QuantizationMethod\n\n\nXLA_USE_BF16 = os.environ.get(\"XLA_USE_BF16\", \"0\").upper()\nXLA_DOWNCAST_BF16 = os.environ.get(\"XLA_DOWNCAST_BF16\", \"0\").upper()\n\n\nif is_accelerate_available():\n    from accelerate import dispatch_model, infer_auto_device_map, init_empty_weights\n    from accelerate.hooks import add_hook_to_module\n    from accelerate.utils import (\n        check_tied_parameters_on_same_device,\n        extract_model_from_parallel,\n        find_tied_parameters,\n        get_balanced_memory,\n        get_max_memory,\n        load_offloaded_weights,\n        offload_weight,\n        save_offload_index,\n        set_module_tensor_to_device,\n    )\n\n    accelerate_version = version.parse(importlib.metadata.version(\"accelerate\"))\n    if accelerate_version >= version.parse(\"0.31\"):\n        from accelerate.utils.modeling import get_state_dict_from_offload\n\nif is_safetensors_available():\n    from safetensors import safe_open\n    from safetensors.torch import load_file as safe_load_file\n    from safetensors.torch import save_file as safe_save_file\n\nlogger = logging.get_logger(__name__)\n\n\n_init_weights = True\n\n\ndef is_fsdp_enabled():\n    return (\n        torch.distributed.is_available()\n        and torch.distributed.is_initialized()\n        and strtobool(os.environ.get(\"ACCELERATE_USE_FSDP\", \"False\")) == 1\n        and strtobool(os.environ.get(\"FSDP_CPU_RAM_EFFICIENT_LOADING\", \"False\")) == 1\n    )\n\n\ndef is_local_dist_rank_0():\n    return (\n        torch.distributed.is_available()\n        and torch.distributed.is_initialized()\n        and int(os.environ.get(\"LOCAL_RANK\", -1)) == 0\n    )\n\n\nif is_sagemaker_mp_enabled():\n    import smdistributed.modelparallel.torch as smp\n    from smdistributed.modelparallel import __version__ as SMP_VERSION\n\n    IS_SAGEMAKER_MP_POST_1_10 = version.parse(SMP_VERSION) >= version.parse(\"1.10\")\nelse:\n    IS_SAGEMAKER_MP_POST_1_10 = False\n\nif is_peft_available():\n    from transformers.utils import find_adapter_config_file\n\nTORCH_INIT_FUNCTIONS = {\n    \"uniform_\": nn.init.uniform_,\n    \"normal_\": nn.init.normal_,\n    \"trunc_normal_\": nn.init.trunc_normal_,\n    \"constant_\": nn.init.constant_,\n    \"xavier_uniform_\": nn.init.xavier_uniform_,\n    \"xavier_normal_\": nn.init.xavier_normal_,\n    \"kaiming_uniform_\": nn.init.kaiming_uniform_,\n    \"kaiming_normal_\": nn.init.kaiming_normal_,\n    \"uniform\": nn.init.uniform,\n    \"normal\": nn.init.normal,\n    \"xavier_uniform\": nn.init.xavier_uniform,\n    \"xavier_normal\": nn.init.xavier_normal,\n    \"kaiming_uniform\": nn.init.kaiming_uniform,\n    \"kaiming_normal\": nn.init.kaiming_normal,\n}\n\n\n@contextmanager\ndef no_init_weights(_enable=True):\n    \"\"\"\n    Context manager to globally disable weight initialization to speed up loading large models.\n\n    TODO(Patrick): Delete safety argument `_enable=True` at next major version. .\n    \"\"\"\n    global _init_weights\n    old_init_weights = _init_weights\n\n    if _enable:\n        _init_weights = False\n\n        def _skip_init(*args, **kwargs):\n            pass\n\n        # # Save the original initialization functions\n        for name, init_func in TORCH_INIT_FUNCTIONS.items():\n            setattr(torch.nn.init, name, _skip_init)\n    try:\n        yield\n    finally:\n        _init_weights = old_init_weights\n        if _enable:\n            # # Restore the original initialization functions\n            for name, init_func in TORCH_INIT_FUNCTIONS.items():\n                setattr(torch.nn.init, name, init_func)\n\n\ndef get_parameter_device(parameter: Union[nn.Module, \"ModuleUtilsMixin\"]):\n    try:\n        return next(parameter.parameters()).device\n    except StopIteration:\n        # For nn.DataParallel compatibility in PyTorch 1.5\n\n        def find_tensor_attributes(module: nn.Module) -> List[Tuple[str, Tensor]]:\n            tuples = [(k, v) for k, v in module.__dict__.items() if torch.is_tensor(v)]\n            return tuples\n\n        gen = parameter._named_members(get_members_fn=find_tensor_attributes)\n        first_tuple = next(gen)\n        return first_tuple[1].device\n\n\ndef get_first_parameter_dtype(parameter: Union[nn.Module, \"ModuleUtilsMixin\"]):\n    \"\"\"\n    Returns the first parameter dtype (can be non-floating) or asserts if none were found.\n    \"\"\"\n    try:\n        return next(parameter.parameters()).dtype\n    except StopIteration:\n        # For nn.DataParallel compatibility in PyTorch > 1.5\n\n        def find_tensor_attributes(module: nn.Module) -> List[Tuple[str, Tensor]]:\n            tuples = [(k, v) for k, v in module.__dict__.items() if torch.is_tensor(v)]\n            return tuples\n\n        gen = parameter._named_members(get_members_fn=find_tensor_attributes)\n        first_tuple = next(gen)\n        return first_tuple[1].dtype\n\n\ndef get_parameter_dtype(parameter: Union[nn.Module, \"ModuleUtilsMixin\"]):\n    \"\"\"\n    Returns the first found floating dtype in parameters if there is one, otherwise returns the last dtype it found.\n    \"\"\"\n    last_dtype = None\n    for t in parameter.parameters():\n        last_dtype = t.dtype\n        if t.is_floating_point():\n            # Adding fix for https://github.com/pytorch/xla/issues/4152\n            # Fixes issue where the model code passes a value that is out of range for XLA_USE_BF16=1\n            # and XLA_DOWNCAST_BF16=1 so the conversion would cast it to -inf\n            # NOTE: `is_torch_xla_available()` is checked last as it induces a graph break in torch dynamo\n            if XLA_USE_BF16 in ENV_VARS_TRUE_VALUES and is_torch_xla_available():\n                return torch.bfloat16\n            if XLA_DOWNCAST_BF16 in ENV_VARS_TRUE_VALUES and is_torch_xla_available():\n                if t.dtype == torch.float:\n                    return torch.bfloat16\n                if t.dtype == torch.double:\n                    return torch.float32\n            return t.dtype\n\n    if last_dtype is not None:\n        # if no floating dtype was found return whatever the first dtype is\n        return last_dtype\n\n    # For nn.DataParallel compatibility in PyTorch > 1.5\n    def find_tensor_attributes(module: nn.Module) -> List[Tuple[str, Tensor]]:\n        tuples = [(k, v) for k, v in module.__dict__.items() if torch.is_tensor(v)]\n        return tuples\n\n    gen = parameter._named_members(get_members_fn=find_tensor_attributes)\n    last_tuple = None\n    for tuple in gen:\n        last_tuple = tuple\n        if tuple[1].is_floating_point():\n            return tuple[1].dtype\n\n    if last_tuple is not None:\n        # fallback to the last dtype\n        return last_tuple[1].dtype\n\n    # fallback to buffer dtype\n    for t in parameter.buffers():\n        last_dtype = t.dtype\n        if t.is_floating_point():\n            return t.dtype\n    return last_dtype\n\n\ndef get_state_dict_float_dtype(state_dict):\n    \"\"\"\n    Returns the first found floating dtype in `state_dict` or asserts if none were found.\n    \"\"\"\n    for t in state_dict.values():\n        if t.is_floating_point():\n            return t.dtype\n\n    raise ValueError(\"couldn't find any floating point dtypes in state_dict\")\n\n\ndef get_state_dict_dtype(state_dict):\n    \"\"\"\n    Returns the first found floating dtype in `state_dict` if there is one, otherwise returns the first dtype.\n    \"\"\"\n    for t in state_dict.values():\n        if t.is_floating_point():\n            return t.dtype\n\n    # if no floating dtype was found return whatever the first dtype is\n    else:\n        return next(state_dict.values()).dtype\n\n\ndef dtype_byte_size(dtype):\n    \"\"\"\n    Returns the size (in bytes) occupied by one parameter of type `dtype`.\n\n    Example:\n\n    ```py\n    >>> dtype_byte_size(torch.float32)\n    4\n    ```\n    \"\"\"\n    if dtype == torch.bool:\n        return 1 / 8\n    bit_search = re.search(r\"[^\\d](\\d+)_?\", str(dtype))\n    if bit_search is None:\n        raise ValueError(f\"`dtype` is not a valid dtype: {dtype}.\")\n    bit_size = int(bit_search.groups()[0])\n    return bit_size // 8\n\n\ndef check_support_param_buffer_assignment(model_to_load, state_dict, start_prefix=\"\"):\n    \"\"\"\n    Checks if `model_to_load` supports param buffer assignment (such\n    as when loading in empty weights) by first checking\n    if the model explicitly disables it, then by ensuring that the state dict keys\n    are a subset of the model's parameters.\n\n    Note: We fully disable this if we are using `deepspeed`\n    \"\"\"\n    if len([key for key in state_dict if key.startswith(start_prefix)]) == 0:\n        return False\n\n    if is_deepspeed_zero3_enabled():\n        return False\n\n    # Some models explicitly do not support param buffer assignment\n    if not getattr(model_to_load, \"_supports_param_buffer_assignment\", True):\n        logger.debug(\n            f\"{model_to_load.__class__.__name__} does not support param buffer assignment, loading will be slower\"\n        )\n        return False\n\n    # If the model does, the incoming `state_dict` and the `model_to_load` must be the same dtype\n    first_key = list(model_to_load.state_dict().keys())[0]\n    if start_prefix + first_key in state_dict:\n        return state_dict[start_prefix + first_key].dtype == model_to_load.state_dict()[first_key].dtype\n\n    # For cases when the `state_dict` doesn't contain real weights to the model (`test_model_weights_reload_no_missing_tied_weights`)\n    return False\n\n\ndef shard_checkpoint(\n    state_dict: Dict[str, torch.Tensor], max_shard_size: Union[int, str] = \"10GB\", weights_name: str = WEIGHTS_NAME\n):\n    \"\"\"\n    Splits a model state dictionary in sub-checkpoints so that the final size of each sub-checkpoint does not exceed a\n    given size.\n\n    The sub-checkpoints are determined by iterating through the `state_dict` in the order of its keys, so there is no\n    optimization made to make each sub-checkpoint as close as possible to the maximum size passed. For example, if the\n    limit is 10GB and we have weights of sizes [6GB, 6GB, 2GB, 6GB, 2GB, 2GB] they will get sharded as [6GB], [6+2GB],\n    [6+2+2GB] and not [6+2+2GB], [6+2GB], [6GB].\n\n    <Tip warning={true}>\n\n    If one of the model's weight is bigger than `max_shard_size`, it will end up in its own sub-checkpoint which will\n    have a size greater than `max_shard_size`.\n\n    </Tip>\n\n    Args:\n        state_dict (`Dict[str, torch.Tensor]`): The state dictionary of a model to save.\n        max_shard_size (`int` or `str`, *optional*, defaults to `\"10GB\"`):\n            The maximum size of each sub-checkpoint. If expressed as a string, needs to be digits followed by a unit\n            (like `\"5MB\"`).\n        weights_name (`str`, *optional*, defaults to `\"pytorch_model.bin\"`):\n            The name of the model save file.\n    \"\"\"\n    logger.warning(\n        \"Note that `shard_checkpoint` is deprecated and will be removed in v4.44. We recommend you using \"\n        \"split_torch_state_dict_into_shards from huggingface_hub library\"\n    )\n    max_shard_size = convert_file_size_to_int(max_shard_size)\n\n    sharded_state_dicts = [{}]\n    last_block_size = 0\n    total_size = 0\n    storage_id_to_block = {}\n\n    for key, weight in state_dict.items():\n        # when bnb serialization is used the weights in the state dict can be strings\n        # check: https://github.com/huggingface/transformers/pull/24416 for more details\n        if isinstance(weight, str):\n            continue\n        else:\n            storage_id = id_tensor_storage(weight)\n\n        # If a `weight` shares the same underlying storage as another tensor, we put `weight` in the same `block`\n        if storage_id in storage_id_to_block and weight.device != torch.device(\"meta\"):\n            block_id = storage_id_to_block[storage_id]\n            sharded_state_dicts[block_id][key] = weight\n            continue\n\n        weight_size = weight.numel() * dtype_byte_size(weight.dtype)\n        # If this weight is going to tip up over the maximal size, we split, but only if we have put at least one\n        # weight in the current shard.\n        if last_block_size + weight_size > max_shard_size and len(sharded_state_dicts[-1]) > 0:\n            sharded_state_dicts.append({})\n            last_block_size = 0\n\n        sharded_state_dicts[-1][key] = weight\n        last_block_size += weight_size\n        total_size += weight_size\n        storage_id_to_block[storage_id] = len(sharded_state_dicts) - 1\n\n    # If we only have one shard, we return it\n    if len(sharded_state_dicts) == 1:\n        return {weights_name: sharded_state_dicts[0]}, None\n\n    # Otherwise, let's build the index\n    weight_map = {}\n    shards = {}\n    for idx, shard in enumerate(sharded_state_dicts):\n        shard_file = weights_name.replace(\".bin\", f\"-{idx+1:05d}-of-{len(sharded_state_dicts):05d}.bin\")\n        shard_file = shard_file.replace(\n            \".safetensors\", f\"-{idx + 1:05d}-of-{len(sharded_state_dicts):05d}.safetensors\"\n        )\n        shards[shard_file] = shard\n        for key in shard.keys():\n            weight_map[key] = shard_file\n\n    # Add the metadata\n    metadata = {\"total_size\": total_size}\n    index = {\"metadata\": metadata, \"weight_map\": weight_map}\n    return shards, index\n\n\ndef load_sharded_checkpoint(model, folder, strict=True, prefer_safe=True):\n    \"\"\"\n    This is the same as\n    [`torch.nn.Module.load_state_dict`](https://pytorch.org/docs/stable/generated/torch.nn.Module.html?highlight=load_state_dict#torch.nn.Module.load_state_dict)\n    but for a sharded checkpoint.\n\n    This load is performed efficiently: each checkpoint shard is loaded one by one in RAM and deleted after being\n    loaded in the model.\n\n    Args:\n        model (`torch.nn.Module`): The model in which to load the checkpoint.\n        folder (`str` or `os.PathLike`): A path to a folder containing the sharded checkpoint.\n        strict (`bool`, *optional`, defaults to `True`):\n            Whether to strictly enforce that the keys in the model state dict match the keys in the sharded checkpoint.\n        prefer_safe (`bool`, *optional*, defaults to `False`)\n            If both safetensors and PyTorch save files are present in checkpoint and `prefer_safe` is True, the\n            safetensors files will be loaded. Otherwise, PyTorch files are always loaded when possible.\n\n    Returns:\n        `NamedTuple`: A named tuple with `missing_keys` and `unexpected_keys` fields\n            - `missing_keys` is a list of str containing the missing keys\n            - `unexpected_keys` is a list of str containing the unexpected keys\n    \"\"\"\n    # Load the index\n    index_file = os.path.join(folder, WEIGHTS_INDEX_NAME)\n    safe_index_file = os.path.join(folder, SAFE_WEIGHTS_INDEX_NAME)\n\n    index_present = os.path.isfile(index_file)\n    safe_index_present = os.path.isfile(safe_index_file)\n\n    if not index_present and not (safe_index_present and is_safetensors_available()):\n        filenames = (\n            (WEIGHTS_INDEX_NAME, SAFE_WEIGHTS_INDEX_NAME) if is_safetensors_available() else (WEIGHTS_INDEX_NAME,)\n        )\n        raise ValueError(f\"Can't find a checkpoint index ({' or '.join(filenames)}) in {folder}.\")\n\n    load_safe = False\n    if safe_index_present:\n        if prefer_safe:\n            if is_safetensors_available():\n                load_safe = True  # load safe due to preference\n            else:\n                logger.warning(\n                    f\"Cannot load sharded checkpoint at {folder} safely since safetensors is not installed!\"\n                )\n        elif not index_present:\n            load_safe = True  # load safe since we have no other choice\n\n    load_index = safe_index_file if load_safe else index_file\n\n    with open(load_index, \"r\", encoding=\"utf-8\") as f:\n        index = json.load(f)\n\n    shard_files = list(set(index[\"weight_map\"].values()))\n\n    # If strict=True, error before loading any of the state dicts.\n    loaded_keys = index[\"weight_map\"].keys()\n    model_keys = model.state_dict().keys()\n    missing_keys = [key for key in model_keys if key not in loaded_keys]\n    unexpected_keys = [key for key in loaded_keys if key not in model_keys]\n    if strict and (len(missing_keys) > 0 or len(unexpected_keys) > 0):\n        error_message = f\"Error(s) in loading state_dict for {model.__class__.__name__}\"\n        if len(missing_keys) > 0:\n            str_missing_keys = \",\".join([f'\"{k}\"' for k in missing_keys])\n            error_message += f\"\\nMissing key(s): {str_missing_keys}.\"\n        if len(unexpected_keys) > 0:\n            str_unexpected_keys = \",\".join([f'\"{k}\"' for k in unexpected_keys])\n            error_message += f\"\\nMissing key(s): {str_unexpected_keys}.\"\n        raise RuntimeError(error_message)\n\n    weights_only_kwarg = {\"weights_only\": True} if is_torch_greater_or_equal_than_1_13 else {}\n    loader = safe_load_file if load_safe else partial(torch.load, map_location=\"cpu\", **weights_only_kwarg)\n\n    for shard_file in shard_files:\n        state_dict = loader(os.path.join(folder, shard_file))\n        model.load_state_dict(state_dict, strict=False)\n\n        # Make sure memory is freed before we load the next state dict.\n        del state_dict\n        gc.collect()\n\n    # Return the same thing as PyTorch load_state_dict function.\n    return torch.nn.modules.module._IncompatibleKeys(missing_keys, unexpected_keys)\n\n\ndef load_state_dict(\n    checkpoint_file: Union[str, os.PathLike],\n    is_quantized: bool = False,\n    map_location: Optional[Union[str, torch.device]] = None,\n    weights_only: bool = True,\n):\n    \"\"\"\n    Reads a PyTorch checkpoint file, returning properly formatted errors if they arise.\n    \"\"\"\n    if checkpoint_file.endswith(\".safetensors\") and is_safetensors_available():\n        # Check format of the archive\n        with safe_open(checkpoint_file, framework=\"pt\") as f:\n            metadata = f.metadata()\n        if metadata.get(\"format\") not in [\"pt\", \"tf\", \"flax\", \"mlx\"]:\n            raise OSError(\n                f\"The safetensors archive passed at {checkpoint_file} does not contain the valid metadata. Make sure \"\n                \"you save your model with the `save_pretrained` method.\"\n            )\n        return safe_load_file(checkpoint_file)\n    try:\n        if map_location is None:\n            if (\n                (\n                    is_deepspeed_zero3_enabled()\n                    and torch.distributed.is_initialized()\n                    and torch.distributed.get_rank() > 0\n                )\n                or (is_fsdp_enabled() and not is_local_dist_rank_0())\n            ) and not is_quantized:\n                map_location = \"meta\"\n            else:\n                map_location = \"cpu\"\n        extra_args = {}\n        # mmap can only be used with files serialized with zipfile-based format.\n        if (\n            isinstance(checkpoint_file, str)\n            and map_location != \"meta\"\n            and version.parse(torch.__version__) >= version.parse(\"2.1.0\")\n            and is_zipfile(checkpoint_file)\n        ):\n            extra_args = {\"mmap\": True}\n        weights_only_kwarg = {\"weights_only\": weights_only} if is_torch_greater_or_equal_than_1_13 else {}\n        return torch.load(\n            checkpoint_file,\n            map_location=map_location,\n            **weights_only_kwarg,\n            **extra_args,\n        )\n    except Exception as e:\n        try:\n            with open(checkpoint_file) as f:\n                if f.read(7) == \"version\":\n                    raise OSError(\n                        \"You seem to have cloned a repository without having git-lfs installed. Please install \"\n                        \"git-lfs and run `git lfs install` followed by `git lfs pull` in the folder \"\n                        \"you cloned.\"\n                    )\n                else:\n                    raise ValueError(\n                        f\"Unable to locate the file {checkpoint_file} which is necessary to load this pretrained \"\n                        \"model. Make sure you have saved the model properly.\"\n                    ) from e\n        except (UnicodeDecodeError, ValueError):\n            raise OSError(\n                f\"Unable to load weights from pytorch checkpoint file for '{checkpoint_file}' \"\n                f\"at '{checkpoint_file}'. \"\n                \"If you tried to load a PyTorch model from a TF 2.0 checkpoint, please set from_tf=True.\"\n            )\n\n\ndef set_initialized_submodules(model, state_dict_keys):\n    \"\"\"\n    Sets the `_is_hf_initialized` flag in all submodules of a given model when all its weights are in the loaded state\n    dict.\n    \"\"\"\n    not_initialized_submodules = {}\n    for module_name, module in model.named_modules():\n        loaded_keys = {k.replace(f\"{module_name}.\", \"\") for k in state_dict_keys if k.startswith(f\"{module_name}.\")}\n        # When checking if the root module is loaded all state_dict_keys must be used.\n        if module_name == \"\":\n            loaded_keys = set(state_dict_keys)\n        if loaded_keys.issuperset(module.state_dict()):\n            module._is_hf_initialized = True\n        else:\n            not_initialized_submodules[module_name] = module\n    return not_initialized_submodules\n\n\ndef _end_ptr(tensor: torch.Tensor) -> int:\n    # extract the end of the pointer if the tensor is a slice of a bigger tensor\n    if tensor.nelement():\n        stop = tensor.view(-1)[-1].data_ptr() + tensor.element_size()\n    else:\n        stop = tensor.data_ptr()\n    return stop\n\n\ndef _get_tied_weight_keys(module: nn.Module, prefix=\"\"):\n    tied_weight_keys = []\n    if getattr(module, \"_tied_weights_keys\", None) is not None:\n        names = [f\"{prefix}.{k}\" if prefix else k for k in module._tied_weights_keys]\n        tied_weight_keys.extend(names)\n    if getattr(module, \"_dynamic_tied_weights_keys\", None) is not None:\n        names = [f\"{prefix}.{k}\" if prefix else k for k in module._dynamic_tied_weights_keys]\n        tied_weight_keys.extend(names)\n    for name, submodule in module.named_children():\n        local_prefix = f\"{prefix}.{name}\" if prefix else name\n        tied_weight_keys.extend(_get_tied_weight_keys(submodule, prefix=local_prefix))\n    return tied_weight_keys\n\n\ndef _find_disjoint(tensors: List[Set[str]], state_dict: Dict[str, torch.Tensor]) -> Tuple[List[Set[str]], List[str]]:\n    filtered_tensors = []\n    for shared in tensors:\n        if len(shared) < 2:\n            filtered_tensors.append(shared)\n            continue\n\n        areas = []\n        for name in shared:\n            tensor = state_dict[name]\n            areas.append((tensor.data_ptr(), _end_ptr(tensor), name))\n        areas.sort()\n\n        _, last_stop, last_name = areas[0]\n        filtered_tensors.append({last_name})\n        for start, stop, name in areas[1:]:\n            if start >= last_stop:\n                filtered_tensors.append({name})\n            else:\n                filtered_tensors[-1].add(name)\n            last_stop = stop\n    disjoint_tensors = []\n    shared_tensors = []\n    for tensors in filtered_tensors:\n        if len(tensors) == 1:\n            disjoint_tensors.append(tensors.pop())\n        else:\n            shared_tensors.append(tensors)\n    return shared_tensors, disjoint_tensors\n\n\ndef _find_identical(tensors: List[Set[str]], state_dict: Dict[str, torch.Tensor]) -> Tuple[List[Set[str]], Set[str]]:\n    shared_tensors = []\n    identical = []\n    for shared in tensors:\n        if len(shared) < 2:\n            continue\n\n        areas = collections.defaultdict(set)\n        for name in shared:\n            tensor = state_dict[name]\n            area = (tensor.device, tensor.data_ptr(), _end_ptr(tensor))\n            areas[area].add(name)\n        if len(areas) == 1:\n            identical.append(shared)\n        else:\n            shared_tensors.append(shared)\n    return shared_tensors, identical\n\n\ndef _load_state_dict_into_model(model_to_load, state_dict, start_prefix, assign_to_params_buffers=False):\n    # Convert old format to new format if needed from a PyTorch state_dict\n    old_keys = []\n    new_keys = []\n    renamed_keys = {}\n    renamed_gamma = {}\n    renamed_beta = {}\n    warning_msg = f\"A pretrained model of type `{model_to_load.__class__.__name__}` \"\n    for key in state_dict.keys():\n        new_key = None\n        if \"gamma\" in key:\n            # We add only the first key as an example\n            new_key = key.replace(\"gamma\", \"weight\")\n            renamed_gamma[key] = new_key if not renamed_gamma else renamed_gamma\n        if \"beta\" in key:\n            # We add only the first key as an example\n            new_key = key.replace(\"beta\", \"bias\")\n            renamed_beta[key] = new_key if not renamed_beta else renamed_beta\n        if new_key:\n            old_keys.append(key)\n            new_keys.append(new_key)\n    renamed_keys = {**renamed_gamma, **renamed_beta}\n    if renamed_keys:\n        warning_msg += \"contains parameters that have been renamed internally (a few are listed below but more are present in the model):\\n\"\n        for old_key, new_key in renamed_keys.items():\n            warning_msg += f\"* `{old_key}` -> `{new_key}`\\n\"\n        warning_msg += \"If you are using a model from the Hub, consider submitting a PR to adjust these weights and help future users.\"\n        logger.info_once(warning_msg)\n    for old_key, new_key in zip(old_keys, new_keys):\n        state_dict[new_key] = state_dict.pop(old_key)\n\n    # copy state_dict so _load_from_state_dict can modify it\n    metadata = getattr(state_dict, \"_metadata\", None)\n    state_dict = state_dict.copy()\n    if metadata is not None:\n        state_dict._metadata = metadata\n\n    error_msgs = []\n\n    # PyTorch's `_load_from_state_dict` does not copy parameters in a module's descendants\n    # so we need to apply the function recursively.\n    def load(module: nn.Module, state_dict, prefix=\"\", assign_to_params_buffers=False):\n        local_metadata = {} if metadata is None else metadata.get(prefix[:-1], {})\n        local_metadata[\"assign_to_params_buffers\"] = assign_to_params_buffers\n\n        args = (state_dict, prefix, local_metadata, True, [], [], error_msgs)\n        # Parameters of module and children will start with prefix. We can exit early if there are none in this\n        # state_dict\n        if len([key for key in state_dict if key.startswith(prefix)]) > 0:\n            if is_deepspeed_zero3_enabled():\n                import deepspeed\n\n                # In sharded models, each shard has only part of the full state_dict, so only gather\n                # parameters that are in the current state_dict.\n                named_parameters = dict(module.named_parameters(prefix=prefix[:-1], recurse=False))\n                params_to_gather = [named_parameters[k] for k in state_dict.keys() if k in named_parameters]\n                if len(params_to_gather) > 0:\n                    # because zero3 puts placeholders in model params, this context\n                    # manager gathers (unpartitions) the params of the current layer, then loads from\n                    # the state dict and then re-partitions them again\n                    with deepspeed.zero.GatheredParameters(params_to_gather, modifier_rank=0):\n                        if torch.distributed.get_rank() == 0:\n                            module._load_from_state_dict(*args)\n            else:\n                module._load_from_state_dict(*args)\n\n        for name, child in module._modules.items():\n            if child is not None:\n                load(child, state_dict, prefix + name + \".\", assign_to_params_buffers)\n\n    load(model_to_load, state_dict, prefix=start_prefix, assign_to_params_buffers=assign_to_params_buffers)\n    # Delete `state_dict` so it could be collected by GC earlier. Note that `state_dict` is a copy of the argument, so\n    # it's safe to delete it.\n    del state_dict\n\n    return error_msgs\n\n\ndef find_submodule_and_param_name(model, long_key, start_prefix):\n    \"\"\"\n    A helper util to find the last sub-module and the param/buffer name. If `start_prefix` is supplied it'll be removed\n    from the start of the key\n    \"\"\"\n\n    if len(start_prefix) > 0 and long_key.startswith(start_prefix):\n        long_key = \".\".join(long_key.split(\".\")[1:])\n\n    split_key = long_key.split(\".\")\n    submodule = model\n    while len(split_key) > 1:\n        if hasattr(submodule, split_key[0]):\n            submodule = getattr(submodule, split_key[0])\n            del split_key[0]\n        else:\n            submodule = None\n            break\n    if submodule == model:\n        submodule = None\n    return submodule, split_key[0]\n\n\ndef _move_model_to_meta(model, loaded_state_dict_keys, start_prefix):\n    \"\"\"\n    Moves `loaded_state_dict_keys` in model to meta device which frees up the memory taken by those params.\n\n    `start_prefix` is used for models which insert their name into model keys, e.g. `bert` in\n    `bert.pooler.dense.weight`\n\n    \"\"\"\n\n    # dematerialize param storage for keys that are going to be replaced by state_dict, by\n    # putting those on the meta device\n    for k in loaded_state_dict_keys:\n        submodule, param_name = find_submodule_and_param_name(model, k, start_prefix)\n        if submodule is not None:\n            # selectively switch to the meta device only those params/buffers that will\n            # be next replaced from state_dict. This a complex way to do p.to_(\"meta\")\n            # since we have no in-place to_ for tensors.\n            new_val = getattr(submodule, param_name)\n            if isinstance(new_val, torch.nn.Parameter):\n                # isinstance returns False for Params on meta device, so switch after the check\n                new_val = torch.nn.Parameter(new_val.to(\"meta\"))\n            else:\n                new_val = new_val.to(\"meta\")\n            setattr(submodule, param_name, new_val)\n\n\ndef _load_state_dict_into_meta_model(\n    model,\n    state_dict,\n    start_prefix,\n    expected_keys,\n    device_map=None,\n    offload_folder=None,\n    offload_index=None,\n    state_dict_folder=None,\n    state_dict_index=None,\n    dtype=None,\n    hf_quantizer=None,\n    is_safetensors=False,\n    keep_in_fp32_modules=None,\n    unexpected_keys=None,  # passing `unexpected` for cleanup from quantization items\n    pretrained_model_name_or_path=None,  # for flagging the user when the model contains renamed keys\n):\n    \"\"\"\n    This is somewhat similar to `_load_state_dict_into_model`, but deals with a model that has some or all of its\n    params on a `meta` device. It replaces the model params with the data from the `state_dict`, while moving the\n    params back to the normal device, but only for `loaded_state_dict_keys`.\n\n    `start_prefix` is used for models which insert their name into model keys, e.g. `bert` in\n    `bert.pooler.dense.weight`\n\n    \"\"\"\n\n    # XXX: remaining features to implement to be fully compatible with _load_state_dict_into_model\n    # - deepspeed zero 3 support\n    # - need to copy metadata if any - see _load_state_dict_into_model\n    # - handling error_msgs - mimicking the error handling in module._load_from_state_dict()\n\n    error_msgs = []\n\n    old_keys = []\n    new_keys = []\n    renamed_gamma = {}\n    renamed_beta = {}\n    is_quantized = hf_quantizer is not None\n    warning_msg = f\"This model {type(model)}\"\n    for key in state_dict.keys():\n        new_key = None\n        if \"gamma\" in key:\n            # We add only the first key as an example\n            new_key = key.replace(\"gamma\", \"weight\")\n            renamed_gamma[key] = new_key if not renamed_gamma else renamed_gamma\n        if \"beta\" in key:\n            # We add only the first key as an example\n            new_key = key.replace(\"beta\", \"bias\")\n            renamed_beta[key] = new_key if not renamed_beta else renamed_beta\n\n        # To reproduce `_load_state_dict_into_model` behaviour, we need to manually rename parametrized weigth norm, if necessary.\n        if hasattr(nn.utils.parametrizations, \"weight_norm\"):\n            if \"weight_g\" in key:\n                new_key = key.replace(\"weight_g\", \"parametrizations.weight.original0\")\n            if \"weight_v\" in key:\n                new_key = key.replace(\"weight_v\", \"parametrizations.weight.original1\")\n        else:\n            if \"parametrizations.weight.original0\" in key:\n                new_key = key.replace(\"parametrizations.weight.original0\", \"weight_g\")\n            if \"parametrizations.weight.original1\" in key:\n                new_key = key.replace(\"parametrizations.weight.original1\", \"weight_v\")\n        if new_key:\n            old_keys.append(key)\n            new_keys.append(new_key)\n    renamed_keys = {**renamed_gamma, **renamed_beta}\n    if renamed_keys:\n        warning_msg += \"contains parameters that have been renamed internally (a few are listed below but more are present in the model):\\n\"\n        for old_key, new_key in renamed_keys.items():\n            warning_msg += f\"* `{old_key}` -> `{new_key}`\\n\"\n        warning_msg += \"If you are using a model from the Hub, consider submitting a PR to adjust these weights and help future users.\"\n        logger.info_once(warning_msg)\n    for old_key, new_key in zip(old_keys, new_keys):\n        state_dict[new_key] = state_dict.pop(old_key)\n\n    is_torch_e4m3fn_available = hasattr(torch, \"float8_e4m3fn\")\n\n    for param_name, param in state_dict.items():\n        if param_name not in expected_keys:\n            continue\n\n        if param_name.startswith(start_prefix):\n            param_name = param_name[len(start_prefix) :]\n\n        module_name = param_name\n        set_module_kwargs = {}\n\n        # We convert floating dtypes to the `dtype` passed except for float8_e4m3fn type. We also want to keep the buffers/params\n        # in int/uint/bool and not cast them.\n        is_param_float8_e4m3fn = is_torch_e4m3fn_available and param.dtype == torch.float8_e4m3fn\n        if dtype is not None and torch.is_floating_point(param) and not is_param_float8_e4m3fn:\n            if (\n                keep_in_fp32_modules is not None\n                and any(\n                    module_to_keep_in_fp32 in param_name.split(\".\") for module_to_keep_in_fp32 in keep_in_fp32_modules\n                )\n                and dtype == torch.float16\n            ):\n                param = param.to(torch.float32)\n\n                # For backward compatibility with older versions of `accelerate`\n                # TODO: @sgugger replace this check with version check at the next `accelerate` release\n                if \"dtype\" in list(inspect.signature(set_module_tensor_to_device).parameters):\n                    set_module_kwargs[\"dtype\"] = torch.float32\n            else:\n                param = param.to(dtype)\n\n        # For compatibility with PyTorch load_state_dict which converts state dict dtype to existing dtype in model, and which\n        # uses `param.copy_(input_param)` that preserves the contiguity of the parameter in the model.\n        # Reference: https://github.com/pytorch/pytorch/blob/db79ceb110f6646523019a59bbd7b838f43d4a86/torch/nn/modules/module.py#L2040C29-L2040C29\n\n        old_param = model\n        splits = param_name.split(\".\")\n        for split in splits:\n            # We shouldn't hit the default value unless for quant methods like hqq that modifies expected_keys.\n            old_param = getattr(old_param, split, None)\n            if old_param is None:\n                break\n\n        if not isinstance(old_param, (torch.nn.Parameter, torch.Tensor)):\n            old_param = None\n\n        if old_param is not None:\n            if dtype is None:\n                param = param.to(old_param.dtype)\n\n            if old_param.is_contiguous():\n                param = param.contiguous()\n\n        set_module_kwargs[\"value\"] = param\n\n        if device_map is None:\n            param_device = \"cpu\"\n        else:\n            # find next higher level module that is defined in device_map:\n            # bert.lm_head.weight -> bert.lm_head -> bert -> ''\n            while len(module_name) > 0 and module_name not in device_map:\n                module_name = \".\".join(module_name.split(\".\")[:-1])\n            if module_name == \"\" and \"\" not in device_map:\n                # TODO: group all errors and raise at the end.\n                raise ValueError(f\"{param_name} doesn't have any device set.\")\n            param_device = device_map[module_name]\n\n        if param_device == \"disk\":\n            if not is_safetensors:\n                offload_index = offload_weight(param, param_name, offload_folder, offload_index)\n        elif param_device == \"cpu\" and state_dict_index is not None:\n            state_dict_index = offload_weight(param, param_name, state_dict_folder, state_dict_index)\n        elif (\n            not is_quantized\n            or (not hf_quantizer.requires_parameters_quantization)\n            or (\n                not hf_quantizer.check_quantized_param(\n                    model, param, param_name, state_dict, param_device=param_device, device_map=device_map\n                )\n            )\n        ):\n            if is_fsdp_enabled():\n                param_device = \"cpu\" if is_local_dist_rank_0() else \"meta\"\n\n            # For backward compatibility with older versions of `accelerate` and for non-quantized params\n            set_module_tensor_to_device(model, param_name, param_device, **set_module_kwargs)\n        else:\n            hf_quantizer.create_quantized_param(model, param, param_name, param_device, state_dict, unexpected_keys)\n            # For quantized modules with FSDP/DeepSpeed Stage 3, we need to quantize the parameter on the GPU\n            # and then cast it to CPU to avoid excessive memory usage on each GPU\n            # in comparison to the sharded model across GPUs.\n            if is_fsdp_enabled() or is_deepspeed_zero3_enabled():\n                module, tensor_name = get_module_from_name(model, param_name)\n                value = getattr(module, tensor_name)\n                param_to = \"cpu\"\n                if is_fsdp_enabled() and not is_local_dist_rank_0():\n                    param_to = \"meta\"\n                value = type(value)(value.data.to(param_to), **value.__dict__)\n                setattr(module, tensor_name, value)\n            # TODO: consider removing used param_parts from state_dict before return\n\n    return error_msgs, offload_index, state_dict_index\n\n\ndef _add_variant(weights_name: str, variant: Optional[str] = None) -> str:\n    if variant is not None:\n        splits = weights_name.split(\".\")\n        splits = splits[:-1] + [variant] + splits[-1:]\n        weights_name = \".\".join(splits)\n\n    return weights_name\n\n\nclass ModuleUtilsMixin:\n    \"\"\"\n    A few utilities for `torch.nn.Modules`, to be used as a mixin.\n    \"\"\"\n\n    @staticmethod\n    def _hook_rss_memory_pre_forward(module, *args, **kwargs):\n        try:\n            import psutil\n        except ImportError:\n            raise ImportError(\"You need to install psutil (pip install psutil) to use memory tracing.\")\n\n        process = psutil.Process(os.getpid())\n        mem = process.memory_info()\n        module.mem_rss_pre_forward = mem.rss\n        return None\n\n    @staticmethod\n    def _hook_rss_memory_post_forward(module, *args, **kwargs):\n        try:\n            import psutil\n        except ImportError:\n            raise ImportError(\"You need to install psutil (pip install psutil) to use memory tracing.\")\n\n        process = psutil.Process(os.getpid())\n        mem = process.memory_info()\n        module.mem_rss_post_forward = mem.rss\n        mem_rss_diff = module.mem_rss_post_forward - module.mem_rss_pre_forward\n        module.mem_rss_diff = mem_rss_diff + (module.mem_rss_diff if hasattr(module, \"mem_rss_diff\") else 0)\n        return None\n\n    def add_memory_hooks(self):\n        \"\"\"\n        Add a memory hook before and after each sub-module forward pass to record increase in memory consumption.\n\n        Increase in memory consumption is stored in a `mem_rss_diff` attribute for each module and can be reset to zero\n        with `model.reset_memory_hooks_state()`.\n        \"\"\"\n        for module in self.modules():\n            module.register_forward_pre_hook(self._hook_rss_memory_pre_forward)\n            module.register_forward_hook(self._hook_rss_memory_post_forward)\n        self.reset_memory_hooks_state()\n\n    def reset_memory_hooks_state(self):\n        \"\"\"\n        Reset the `mem_rss_diff` attribute of each module (see [`~modeling_utils.ModuleUtilsMixin.add_memory_hooks`]).\n        \"\"\"\n        for module in self.modules():\n            module.mem_rss_diff = 0\n            module.mem_rss_post_forward = 0\n            module.mem_rss_pre_forward = 0\n\n    @property\n    def device(self) -> torch.device:\n        \"\"\"\n        `torch.device`: The device on which the module is (assuming that all the module parameters are on the same\n        device).\n        \"\"\"\n        return get_parameter_device(self)\n\n    @property\n    def dtype(self) -> torch.dtype:\n        \"\"\"\n        `torch.dtype`: The dtype of the module (assuming that all the module parameters have the same dtype).\n        \"\"\"\n        return get_parameter_dtype(self)\n\n    def invert_attention_mask(self, encoder_attention_mask: Tensor) -> Tensor:\n        \"\"\"\n        Invert an attention mask (e.g., switches 0. and 1.).\n\n        Args:\n            encoder_attention_mask (`torch.Tensor`): An attention mask.\n\n        Returns:\n            `torch.Tensor`: The inverted attention mask.\n        \"\"\"\n        if encoder_attention_mask.dim() == 3:\n            encoder_extended_attention_mask = encoder_attention_mask[:, None, :, :]\n        if encoder_attention_mask.dim() == 2:\n            encoder_extended_attention_mask = encoder_attention_mask[:, None, None, :]\n        # T5 has a mask that can compare sequence ids, we can simulate this here with this transposition\n        # Cf. https://github.com/tensorflow/mesh/blob/8d2465e9bc93129b913b5ccc6a59aa97abd96ec6/mesh_tensorflow\n        # /transformer/transformer_layers.py#L270\n        # encoder_extended_attention_mask = (encoder_extended_attention_mask ==\n        # encoder_extended_attention_mask.transpose(-1, -2))\n        encoder_extended_attention_mask = encoder_extended_attention_mask.to(dtype=self.dtype)  # fp16 compatibility\n        encoder_extended_attention_mask = (1.0 - encoder_extended_attention_mask) * torch.finfo(self.dtype).min\n\n        return encoder_extended_attention_mask\n\n    @staticmethod\n    def create_extended_attention_mask_for_decoder(input_shape, attention_mask, device=None):\n        if device is not None:\n            warnings.warn(\n                \"The `device` argument is deprecated and will be removed in v5 of Transformers.\", FutureWarning\n            )\n        else:\n            device = attention_mask.device\n        batch_size, seq_length = input_shape\n        seq_ids = torch.arange(seq_length, device=device)\n        causal_mask = seq_ids[None, None, :].repeat(batch_size, seq_length, 1) <= seq_ids[None, :, None]\n        # in case past_key_values are used we need to add a prefix ones mask to the causal mask\n        # causal and attention masks must have same type with pytorch version < 1.3\n        causal_mask = causal_mask.to(attention_mask.dtype)\n\n        if causal_mask.shape[1] < attention_mask.shape[1]:\n            prefix_seq_len = attention_mask.shape[1] - causal_mask.shape[1]\n            causal_mask = torch.cat(\n                [\n                    torch.ones((batch_size, seq_length, prefix_seq_len), device=device, dtype=causal_mask.dtype),\n                    causal_mask,\n                ],\n                axis=-1,\n            )\n\n        extended_attention_mask = causal_mask[:, None, :, :] * attention_mask[:, None, None, :]\n        return extended_attention_mask\n\n    def get_extended_attention_mask(\n        self, attention_mask: Tensor, input_shape: Tuple[int], device: torch.device = None, dtype: torch.float = None\n    ) -> Tensor:\n        \"\"\"\n        Makes broadcastable attention and causal masks so that future and masked tokens are ignored.\n\n        Arguments:\n            attention_mask (`torch.Tensor`):\n                Mask with ones indicating tokens to attend to, zeros for tokens to ignore.\n            input_shape (`Tuple[int]`):\n                The shape of the input to the model.\n\n        Returns:\n            `torch.Tensor` The extended attention mask, with a the same dtype as `attention_mask.dtype`.\n        \"\"\"\n        if dtype is None:\n            dtype = self.dtype\n\n        if not (attention_mask.dim() == 2 and self.config.is_decoder):\n            # show warning only if it won't be shown in `create_extended_attention_mask_for_decoder`\n            if device is not None:\n                warnings.warn(\n                    \"The `device` argument is deprecated and will be removed in v5 of Transformers.\", FutureWarning\n                )\n        # We can provide a self-attention mask of dimensions [batch_size, from_seq_length, to_seq_length]\n        # ourselves in which case we just need to make it broadcastable to all heads.\n        if attention_mask.dim() == 3:\n            extended_attention_mask = attention_mask[:, None, :, :]\n        elif attention_mask.dim() == 2:\n            # Provided a padding mask of dimensions [batch_size, seq_length]\n            # - if the model is a decoder, apply a causal mask in addition to the padding mask\n            # - if the model is an encoder, make the mask broadcastable to [batch_size, num_heads, seq_length, seq_length]\n            if self.config.is_decoder:\n                extended_attention_mask = ModuleUtilsMixin.create_extended_attention_mask_for_decoder(\n                    input_shape, attention_mask, device\n                )\n            else:\n                extended_attention_mask = attention_mask[:, None, None, :]\n        else:\n            raise ValueError(\n                f\"Wrong shape for input_ids (shape {input_shape}) or attention_mask (shape {attention_mask.shape})\"\n            )\n\n        # Since attention_mask is 1.0 for positions we want to attend and 0.0 for\n        # masked positions, this operation will create a tensor which is 0.0 for\n        # positions we want to attend and the dtype's smallest value for masked positions.\n        # Since we are adding it to the raw scores before the softmax, this is\n        # effectively the same as removing these entirely.\n        extended_attention_mask = extended_attention_mask.to(dtype=dtype)  # fp16 compatibility\n        extended_attention_mask = (1.0 - extended_attention_mask) * torch.finfo(dtype).min\n        return extended_attention_mask\n\n    def get_head_mask(\n        self, head_mask: Optional[Tensor], num_hidden_layers: int, is_attention_chunked: bool = False\n    ) -> Tensor:\n        \"\"\"\n        Prepare the head mask if needed.\n\n        Args:\n            head_mask (`torch.Tensor` with shape `[num_heads]` or `[num_hidden_layers x num_heads]`, *optional*):\n                The mask indicating if we should keep the heads or not (1.0 for keep, 0.0 for discard).\n            num_hidden_layers (`int`):\n                The number of hidden layers in the model.\n            is_attention_chunked (`bool`, *optional*, defaults to `False`):\n                Whether or not the attentions scores are computed by chunks or not.\n\n        Returns:\n            `torch.Tensor` with shape `[num_hidden_layers x batch x num_heads x seq_length x seq_length]` or list with\n            `[None]` for each layer.\n        \"\"\"\n        if head_mask is not None:\n            head_mask = self._convert_head_mask_to_5d(head_mask, num_hidden_layers)\n            if is_attention_chunked is True:\n                head_mask = head_mask.unsqueeze(-1)\n        else:\n            head_mask = [None] * num_hidden_layers\n\n        return head_mask\n\n    def _convert_head_mask_to_5d(self, head_mask, num_hidden_layers):\n        \"\"\"-> [num_hidden_layers x batch x num_heads x seq_length x seq_length]\"\"\"\n        if head_mask.dim() == 1:\n            head_mask = head_mask.unsqueeze(0).unsqueeze(0).unsqueeze(-1).unsqueeze(-1)\n            head_mask = head_mask.expand(num_hidden_layers, -1, -1, -1, -1)\n        elif head_mask.dim() == 2:\n            head_mask = head_mask.unsqueeze(1).unsqueeze(-1).unsqueeze(-1)  # We can specify head_mask for each layer\n        assert head_mask.dim() == 5, f\"head_mask.dim != 5, instead {head_mask.dim()}\"\n        head_mask = head_mask.to(dtype=self.dtype)  # switch to float if need + fp16 compatibility\n        return head_mask\n\n    def num_parameters(self, only_trainable: bool = False, exclude_embeddings: bool = False) -> int:\n        \"\"\"\n        Get number of (optionally, trainable or non-embeddings) parameters in the module.\n\n        Args:\n            only_trainable (`bool`, *optional*, defaults to `False`):\n                Whether or not to return only the number of trainable parameters\n\n            exclude_embeddings (`bool`, *optional*, defaults to `False`):\n                Whether or not to return only the number of non-embeddings parameters\n\n        Returns:\n            `int`: The number of parameters.\n        \"\"\"\n\n        if exclude_embeddings:\n            embedding_param_names = [\n                f\"{name}.weight\" for name, module_type in self.named_modules() if isinstance(module_type, nn.Embedding)\n            ]\n            total_parameters = [\n                parameter for name, parameter in self.named_parameters() if name not in embedding_param_names\n            ]\n        else:\n            total_parameters = list(self.parameters())\n\n        total_numel = []\n        is_loaded_in_4bit = getattr(self, \"is_loaded_in_4bit\", False)\n\n        if is_loaded_in_4bit:\n            if is_bitsandbytes_available():\n                import bitsandbytes as bnb\n            else:\n                raise ValueError(\n                    \"bitsandbytes is not installed but it seems that the model has been loaded in 4bit precision, something went wrong\"\n                    \" make sure to install bitsandbytes with `pip install bitsandbytes`. You also need a GPU. \"\n                )\n\n        for param in total_parameters:\n            if param.requires_grad or not only_trainable:\n                # For 4bit models, we need to multiply the number of parameters by 2 as half of the parameters are\n                # used for the 4bit quantization (uint8 tensors are stored)\n                if is_loaded_in_4bit and isinstance(param, bnb.nn.Params4bit):\n                    if hasattr(param, \"element_size\"):\n                        num_bytes = param.element_size()\n                    elif hasattr(param, \"quant_storage\"):\n                        num_bytes = param.quant_storage.itemsize\n                    else:\n                        num_bytes = 1\n                    total_numel.append(param.numel() * 2 * num_bytes)\n                else:\n                    total_numel.append(param.numel())\n\n        return sum(total_numel)\n\n    def estimate_tokens(self, input_dict: Dict[str, Union[torch.Tensor, Any]]) -> int:\n        \"\"\"\n        Helper function to estimate the total number of tokens from the model inputs.\n\n        Args:\n            inputs (`dict`): The model inputs.\n\n        Returns:\n            `int`: The total number of tokens.\n        \"\"\"\n        if not hasattr(self, \"warnings_issued\"):\n            self.warnings_issued = {}\n        if self.main_input_name in input_dict:\n            return input_dict[self.main_input_name].numel()\n        elif \"estimate_tokens\" not in self.warnings_issued:\n            logger.warning(\n                \"Could not estimate the number of tokens of the input, floating-point operations will not be computed\"\n            )\n            self.warnings_issued[\"estimate_tokens\"] = True\n        return 0\n\n    def floating_point_ops(\n        self, input_dict: Dict[str, Union[torch.Tensor, Any]], exclude_embeddings: bool = True\n    ) -> int:\n        \"\"\"\n        Get number of (optionally, non-embeddings) floating-point operations for the forward and backward passes of a\n        batch with this transformer model. Default approximation neglects the quadratic dependency on the number of\n        tokens (valid if `12 * d_model << sequence_length`) as laid out in [this\n        paper](https://arxiv.org/pdf/2001.08361.pdf) section 2.1. Should be overridden for transformers with parameter\n        re-use e.g. Albert or Universal Transformers, or if doing long-range modeling with very high sequence lengths.\n\n        Args:\n            batch_size (`int`):\n                The batch size for the forward pass.\n\n            sequence_length (`int`):\n                The number of tokens in each line of the batch.\n\n            exclude_embeddings (`bool`, *optional*, defaults to `True`):\n                Whether or not to count embedding and softmax operations.\n\n        Returns:\n            `int`: The number of floating-point operations.\n        \"\"\"\n\n        return 6 * self.estimate_tokens(input_dict) * self.num_parameters(exclude_embeddings=exclude_embeddings)\n\n\n# TODO (joao): remove `GenerationMixin` inheritance in v4.50\nclass PreTrainedModel(nn.Module, ModuleUtilsMixin, GenerationMixin, PushToHubMixin, PeftAdapterMixin):\n    r\"\"\"\n    Base class for all models.\n\n    [`PreTrainedModel`] takes care of storing the configuration of the models and handles methods for loading,\n    downloading and saving models as well as a few methods common to all models to:\n\n        - resize the input embeddings,\n        - prune heads in the self-attention heads.\n\n    Class attributes (overridden by derived classes):\n\n        - **config_class** ([`PretrainedConfig`]) -- A subclass of [`PretrainedConfig`] to use as configuration class\n          for this model architecture.\n        - **load_tf_weights** (`Callable`) -- A python *method* for loading a TensorFlow checkpoint in a PyTorch model,\n          taking as arguments:\n\n            - **model** ([`PreTrainedModel`]) -- An instance of the model on which to load the TensorFlow checkpoint.\n            - **config** ([`PreTrainedConfig`]) -- An instance of the configuration associated to the model.\n            - **path** (`str`) -- A path to the TensorFlow checkpoint.\n\n        - **base_model_prefix** (`str`) -- A string indicating the attribute associated to the base model in derived\n          classes of the same architecture adding modules on top of the base model.\n        - **is_parallelizable** (`bool`) -- A flag indicating whether this model supports model parallelization.\n        - **main_input_name** (`str`) -- The name of the principal input to the model (often `input_ids` for NLP\n          models, `pixel_values` for vision models and `input_values` for speech models).\n    \"\"\"\n\n    config_class = None\n    base_model_prefix = \"\"\n    main_input_name = \"input_ids\"\n    model_tags = None\n\n    _auto_class = None\n    _no_split_modules = None\n    _skip_keys_device_placement = None\n    _keep_in_fp32_modules = None\n\n    # a list of `re` patterns of `state_dict` keys that should be removed from the list of missing\n    # keys we find (keys inside the model but not in the checkpoint) and avoid unnecessary warnings.\n    _keys_to_ignore_on_load_missing = None\n    # a list of `re` patterns of `state_dict` keys that should be removed from the list of\n    # unexpected keys we find (keys inside the checkpoint but not the model) and avoid unnecessary\n    # warnings.\n    _keys_to_ignore_on_load_unexpected = None\n    # a list of `state_dict` keys to ignore when saving the model (useful for keys that aren't\n    # trained, but which are either deterministic or tied variables)\n    _keys_to_ignore_on_save = None\n    # a list of `state_dict` keys that are potentially tied to another key in the state_dict.\n    _tied_weights_keys = None\n\n    is_parallelizable = False\n    supports_gradient_checkpointing = False\n    _is_stateful = False\n\n    # Flash Attention 2 support\n    _supports_flash_attn_2 = False\n\n    # SDPA support\n    _supports_sdpa = False\n\n    # Has support for a `Cache` instance as `past_key_values`? Does it support a `StaticCache`?\n    _supports_cache_class = False\n    _supports_static_cache = False\n\n    # Has support for a `QuantoQuantizedCache` instance as `past_key_values`\n    _supports_quantized_cache = False\n\n    @property\n    def dummy_inputs(self) -> Dict[str, torch.Tensor]:\n        \"\"\"\n        `Dict[str, torch.Tensor]`: Dummy inputs to do a forward pass in the network.\n        \"\"\"\n        return {\"input_ids\": torch.tensor(DUMMY_INPUTS)}\n\n    @property\n    def framework(self) -> str:\n        \"\"\"\n        :str: Identifies that this is a PyTorch model.\n        \"\"\"\n        return \"pt\"\n\n    def __init__(self, config: PretrainedConfig, *inputs, **kwargs):\n        super().__init__()\n        if not isinstance(config, PretrainedConfig):\n            raise ValueError(\n                f\"Parameter config in `{self.__class__.__name__}(config)` should be an instance of class \"\n                \"`PretrainedConfig`. To create a model from a pretrained model use \"\n                f\"`model = {self.__class__.__name__}.from_pretrained(PRETRAINED_MODEL_NAME)`\"\n            )\n        # Save config and origin of the pretrained weights if given in model\n        if not getattr(config, \"_attn_implementation_autoset\", False):\n            config = self._autoset_attn_implementation(\n                config, torch_dtype=torch.get_default_dtype(), check_device_map=False\n            )\n        self.config = config\n\n        self.name_or_path = config.name_or_path\n        self.warnings_issued = {}\n        self.generation_config = GenerationConfig.from_model_config(config) if self.can_generate() else None\n        # Overwrite the class attribute to make it an instance attribute, so models like\n        # `InstructBlipForConditionalGeneration` can dynamically update it without modifying the class attribute\n        # when a different component (e.g. language_model) is used.\n        self._keep_in_fp32_modules = copy.copy(self.__class__._keep_in_fp32_modules)\n\n    def post_init(self):\n        \"\"\"\n        A method executed at the end of each Transformer model initialization, to execute code that needs the model's\n        modules properly initialized (such as weight initialization).\n        \"\"\"\n        self.init_weights()\n        self._backward_compatibility_gradient_checkpointing()\n\n    def dequantize(self):\n        \"\"\"\n        Potentially dequantize the model in case it has been quantized by a quantization method that support\n        dequantization.\n        \"\"\"\n        hf_quantizer = getattr(self, \"hf_quantizer\", None)\n\n        if hf_quantizer is None:\n            raise ValueError(\"You need to first quantize your model in order to dequantize it\")\n\n        return hf_quantizer.dequantize(self)\n\n    def _backward_compatibility_gradient_checkpointing(self):\n        if self.supports_gradient_checkpointing and getattr(self.config, \"gradient_checkpointing\", False):\n            self.gradient_checkpointing_enable()\n            # Remove the attribute now that is has been consumed, so it's no saved in the config.\n            delattr(self.config, \"gradient_checkpointing\")\n\n    def add_model_tags(self, tags: Union[List[str], str]) -> None:\n        r\"\"\"\n        Add custom tags into the model that gets pushed to the Hugging Face Hub. Will\n        not overwrite existing tags in the model.\n\n        Args:\n            tags (`Union[List[str], str]`):\n                The desired tags to inject in the model\n\n        Examples:\n\n        ```python\n        from transformers import AutoModel\n\n        model = AutoModel.from_pretrained(\"google-bert/bert-base-cased\")\n\n        model.add_model_tags([\"custom\", \"custom-bert\"])\n\n        # Push the model to your namespace with the name \"my-custom-bert\".\n        model.push_to_hub(\"my-custom-bert\")\n        ```\n        \"\"\"\n        if isinstance(tags, str):\n            tags = [tags]\n\n        if self.model_tags is None:\n            self.model_tags = []\n\n        for tag in tags:\n            if tag not in self.model_tags:\n                self.model_tags.append(tag)\n\n    @classmethod\n    def _from_config(cls, config, **kwargs):\n        \"\"\"\n        All context managers that the model should be initialized under go here.\n\n        Args:\n            torch_dtype (`torch.dtype`, *optional*):\n                Override the default `torch.dtype` and load the model under this dtype.\n        \"\"\"\n        # when we init a model from within another model (e.g. VLMs) and dispatch on FA2\n        # a warning is raised that dtype should be fp16. Since we never pass dtype from within\n        # modeling code, we can try to infer it here same way as done in `from_pretrained`\n        torch_dtype = kwargs.pop(\"torch_dtype\", torch.get_default_dtype())\n        use_flash_attention_2 = kwargs.pop(\"use_flash_attention_2\", False)\n\n        # override default dtype if needed\n        dtype_orig = None\n        if torch_dtype is not None:\n            dtype_orig = cls._set_default_torch_dtype(torch_dtype)\n\n        config = copy.deepcopy(config)  # We do not want to modify the config inplace in _from_config.\n\n        if config._attn_implementation_internal is not None:\n            # In this case, the config has been created with the attn_implementation set by the user, which we\n            # should respect.\n            attn_implementation = config._attn_implementation_internal\n        else:\n            attn_implementation = None\n\n        config._attn_implementation = kwargs.pop(\"attn_implementation\", attn_implementation)\n        if not getattr(config, \"_attn_implementation_autoset\", False):\n            config = cls._autoset_attn_implementation(\n                config,\n                use_flash_attention_2=use_flash_attention_2,\n                check_device_map=False,\n                torch_dtype=torch_dtype,\n            )\n\n        if is_deepspeed_zero3_enabled():\n            import deepspeed\n\n            logger.info(\"Detected DeepSpeed ZeRO-3: activating zero.init() for this model\")\n            # this immediately partitions the model across all gpus, to avoid the overhead in time\n            # and memory copying it on CPU or each GPU first\n            with deepspeed.zero.Init(config_dict_or_path=deepspeed_config()):\n                model = cls(config, **kwargs)\n\n        else:\n            model = cls(config, **kwargs)\n\n        # restore default dtype if it was modified\n        if dtype_orig is not None:\n            torch.set_default_dtype(dtype_orig)\n\n        return model\n\n    @classmethod\n    def _autoset_attn_implementation(\n        cls,\n        config,\n        use_flash_attention_2: bool = False,\n        torch_dtype: Optional[torch.dtype] = None,\n        device_map: Optional[Union[str, Dict[str, int]]] = None,\n        check_device_map: bool = True,\n    ):\n        \"\"\"\n        Automatically checks and dispatches to a default attention implementation. In order of priority:\n            1. An implementation specified in `config._attn_implementation` (due for example to the argument attn_implementation=\"sdpa\" in from_pretrained).\n            2. DEPRECATED: if use_flash_attention_2 is set to `True` and `flash_attn` is available, flash attention. (`LlamaFlashAttention` for example)\n            3. SDPA implementation, if available and supported by the model type. (`LlamaSdpaAttention` for example)\n            4. The default model's implementation otherwise (`LlamaAttention` for example) .\n        \"\"\"\n        # Here we use config._attn_implementation_internal to check whether the attention implementation was explicitely set by the user.\n        # The property `PretrainedConfig._attn_implementation` is never `None`, for backward compatibility (always fall back on \"eager\").\n        # The `hasattr` here is used as some Transformers tests for some reason do not call PretrainedConfig __init__ (e.g. test_no_super_init_config_and_model)\n        requested_attn_implementation = None\n        if hasattr(config, \"_attn_implementation_internal\") and config._attn_implementation_internal is not None:\n            if config._attn_implementation != \"flash_attention_2\" and use_flash_attention_2:\n                raise ValueError(\n                    f'Both attn_implementation=\"{config._attn_implementation}\" and `use_flash_attention_2=True` were used when loading the model, which are not compatible.'\n                    ' We recommend to just use `attn_implementation=\"flash_attention_2\"` when loading the model.'\n                )\n\n            if not isinstance(config._attn_implementation, dict) and config._attn_implementation not in [\n                \"eager\",\n                \"sdpa\",\n                \"flash_attention_2\",\n            ]:\n                message = f'Specified `attn_implementation=\"{config._attn_implementation}\"` is not supported. The only possible arguments are `attn_implementation=\"eager\"` (manual attention implementation)'\n                if cls._supports_flash_attn_2:\n                    message += ', `\"attn_implementation=flash_attention_2\"` (implementation using flash attention 2)'\n                if cls._supports_sdpa:\n                    message += ', `\"attn_implementation=sdpa\"` (implementation using torch.nn.functional.scaled_dot_product_attention)'\n                raise ValueError(message + \".\")\n\n            # If a config is passed with a preset attn_implementation, we skip the automatic dispatch and use the user-provided config, with hard checks that the requested attention implementation is available.\n            requested_attn_implementation = config._attn_implementation_internal\n\n        # Composite models consisting of several PretrainedModels have to specify attention impl as a dict\n        # where keys are sub-config names. But most people will specify one `str` which means that should dispatch it\n        # for all sub-models.\n        # Below we check if a config is composite and manually prepare a dict of attn impl if not already passed as a dict.\n        # Later each sub-module will dispatch with its own attn impl, by calling `XXXModel._from_config(config.text_config)`\n        # If any of sub-modules doesn't support requested attn, an error will be raised. See https://github.com/huggingface/transformers/pull/32238\n        for key in config:\n            if isinstance(getattr(config, key), PretrainedConfig):\n                sub_config = getattr(config, key)\n                curr_attn_implementation = (\n                    requested_attn_implementation\n                    if not isinstance(requested_attn_implementation, dict)\n                    else requested_attn_implementation.get(key, None)\n                )\n                sub_config._attn_implementation_internal = curr_attn_implementation\n\n        if use_flash_attention_2:\n            logger.warning_once(\n                'The model was loaded with use_flash_attention_2=True, which is deprecated and may be removed in a future release. Please use `attn_implementation=\"flash_attention_2\"` instead.'\n            )\n            config._attn_implementation = \"flash_attention_2\"\n\n        if config._attn_implementation == \"flash_attention_2\":\n            cls._check_and_enable_flash_attn_2(\n                config,\n                torch_dtype=torch_dtype,\n                device_map=device_map,\n                hard_check_only=False,\n                check_device_map=check_device_map,\n            )\n        elif requested_attn_implementation in [None, \"sdpa\"] and not is_torch_xla_available():\n            # use_flash_attention_2 takes priority over SDPA, hence SDPA treated in this elif.\n            config = cls._check_and_enable_sdpa(\n                config,\n                hard_check_only=False if requested_attn_implementation is None else True,\n            )\n\n            if (\n                torch.version.hip is not None\n                and config._attn_implementation == \"sdpa\"\n                and torch.cuda.device_count() > 1\n            ):\n                logger.warning_once(\n                    \"Using the `SDPA` attention implementation on multi-gpu setup with ROCM may lead to performance issues due to the FA backend. Disabling it to use alternative backends.\"\n                )\n                torch.backends.cuda.enable_flash_sdp(False)\n        elif isinstance(requested_attn_implementation, dict):\n            config._attn_implementation = None\n        else:\n            config._attn_implementation = \"eager\"\n\n        config._attn_implementation_autoset = True\n        return config\n\n    @classmethod\n    def _set_default_torch_dtype(cls, dtype: torch.dtype) -> torch.dtype:\n        \"\"\"\n        Change the default dtype and return the previous one. This is needed when wanting to instantiate the model\n        under specific dtype.\n\n        Args:\n            dtype (`torch.dtype`):\n                a floating dtype to set to.\n\n        Returns:\n            `torch.dtype`: the original `dtype` that can be used to restore `torch.set_default_dtype(dtype)` if it was\n            modified. If it wasn't, returns `None`.\n\n        Note `set_default_dtype` currently only works with floating-point types and asserts if for example,\n        `torch.int64` is passed. So if a non-float `dtype` is passed this functions will throw an exception.\n        \"\"\"\n        if not dtype.is_floating_point:\n            raise ValueError(\n                f\"Can't instantiate {cls.__name__} model under dtype={dtype} since it is not a floating point dtype\"\n            )\n\n        logger.info(f\"Instantiating {cls.__name__} model under default dtype {dtype}.\")\n        dtype_orig = torch.get_default_dtype()\n        torch.set_default_dtype(dtype)\n        return dtype_orig\n\n    @property\n    def base_model(self) -> nn.Module:\n        \"\"\"\n        `torch.nn.Module`: The main body of the model.\n        \"\"\"\n        return getattr(self, self.base_model_prefix, self)\n\n    @classmethod\n    def can_generate(cls) -> bool:\n        \"\"\"\n        Returns whether this model can generate sequences with `.generate()`.\n\n        Returns:\n            `bool`: Whether this model can generate sequences with `.generate()`.\n        \"\"\"\n        # Directly inherits `GenerationMixin` -> can generate\n        if \"GenerationMixin\" in str(cls.__bases__):\n            return True\n        # Model class overwrites `generate` (e.g. time series models) -> can generate\n        if str(cls.__name__) in str(cls.generate):\n            return True\n        # The class inherits from a class that can generate (recursive check) -> can generate\n        for base in cls.__bases__:\n            if not hasattr(base, \"can_generate\"):\n                continue\n            if \"PreTrainedModel\" not in str(base) and base.can_generate():\n                return True\n        # BC: Detects whether `prepare_inputs_for_generation` has been overwritten in the model. Prior to v4.45, this\n        # was how we detected whether a model could generate.\n        if \"GenerationMixin\" not in str(cls.prepare_inputs_for_generation):\n            logger.warning_once(\n                f\"{cls.__name__} has generative capabilities, as `prepare_inputs_for_generation` is explicitly \"\n                \"overwritten. However, it doesn't directly inherit from `GenerationMixin`. From 👉v4.50👈 onwards, \"\n                \"`PreTrainedModel` will NOT inherit from `GenerationMixin`, and this model will lose the ability \"\n                \"to call `generate` and other related functions.\"\n                \"\\n  - If you're using `trust_remote_code=True`, you can get rid of this warning by loading the \"\n                \"model with an auto class. See https://huggingface.co/docs/transformers/en/model_doc/auto#auto-classes\"\n                \"\\n  - If you are the owner of the model architecture code, please modify your model class such that \"\n                \"it inherits from `GenerationMixin` (after `PreTrainedModel`, otherwise you'll get an exception).\"\n                \"\\n  - If you are not the owner of the model architecture class, please contact the model code owner \"\n                \"to update it.\"\n            )\n            return True\n        # Otherwise, can't generate\n        return False\n\n    @classmethod\n    def _check_and_enable_flash_attn_2(\n        cls,\n        config,\n        torch_dtype: Optional[torch.dtype] = None,\n        device_map: Optional[Union[str, Dict[str, int]]] = None,\n        check_device_map: bool = True,\n        hard_check_only: bool = False,\n    ) -> PretrainedConfig:\n        \"\"\"\n        Checks the availability of Flash Attention 2 and compatibility with the current model.\n\n        If all checks pass and `hard_check_only` is False, the method will set the config attribute `attn_implementation` to \"flash_attention_2\" so that the model can initialize the correct attention module.\n        \"\"\"\n        if not cls._supports_flash_attn_2:\n            raise ValueError(\n                f\"{cls.__name__} does not support Flash Attention 2.0 yet. Please request to add support where\"\n                f\" the model is hosted, on its model hub page: https://huggingface.co/{config._name_or_path}/discussions/new\"\n                \" or in the Transformers GitHub repo: https://github.com/huggingface/transformers/issues/new\"\n            )\n\n        if not is_flash_attn_2_available():\n            preface = \"FlashAttention2 has been toggled on, but it cannot be used due to the following error:\"\n            install_message = \"Please refer to the documentation of https://huggingface.co/docs/transformers/perf_infer_gpu_one#flashattention-2 to install Flash Attention 2.\"\n\n            if importlib.util.find_spec(\"flash_attn\") is None:\n                raise ImportError(f\"{preface} the package flash_attn seems to be not installed. {install_message}\")\n\n            flash_attention_version = version.parse(importlib.metadata.version(\"flash_attn\"))\n            if torch.version.cuda:\n                if flash_attention_version < version.parse(\"2.1.0\"):\n                    raise ImportError(\n                        f\"{preface} you need flash_attn package version to be greater or equal than 2.1.0. Detected version {flash_attention_version}. {install_message}\"\n                    )\n                elif not torch.cuda.is_available():\n                    raise ValueError(\n                        f\"{preface} Flash Attention 2 is not available on CPU. Please make sure torch can access a CUDA device.\"\n                    )\n                else:\n                    raise ImportError(f\"{preface} Flash Attention 2 is not available. {install_message}\")\n            elif torch.version.hip:\n                if flash_attention_version < version.parse(\"2.0.4\"):\n                    raise ImportError(\n                        f\"{preface} you need flash_attn package version to be greater or equal than 2.0.4. Make sure to have that version installed - detected version {flash_attention_version}. {install_message}\"\n                    )\n                else:\n                    raise ImportError(f\"{preface} Flash Attention 2 is not available. {install_message}\")\n\n        _is_bettertransformer = getattr(cls, \"use_bettertransformer\", False)\n\n        if _is_bettertransformer:\n            raise ValueError(\n                \"Flash Attention 2 and BetterTransformer API are not compatible. Please make sure to disable BetterTransformers by doing model.reverse_bettertransformer()\"\n            )\n\n        if torch_dtype is None:\n            logger.warning_once(\n                \"You are attempting to use Flash Attention 2.0 without specifying a torch dtype. This might lead to unexpected behaviour\"\n            )\n        elif torch_dtype is not None and torch_dtype not in [torch.float16, torch.bfloat16]:\n            logger.warning_once(\n                \"Flash Attention 2.0 only supports torch.float16 and torch.bfloat16 dtypes, but\"\n                f\" the current dype in {cls.__name__} is {torch_dtype}. You should run training or inference using Automatic Mixed-Precision via the `with torch.autocast(device_type='torch_device'):` decorator,\"\n                ' or load the model with the `torch_dtype` argument. Example: `model = AutoModel.from_pretrained(\"openai/whisper-tiny\", attn_implementation=\"flash_attention_2\", torch_dtype=torch.float16)`'\n            )\n\n        # The check `torch.empty(0).device.type != \"cuda\"` is needed as the model may be initialized after `torch.set_default_device` has been called,\n        # or the model may be initialized under the context manager `with torch.device(\"cuda\"):`.\n        if check_device_map and device_map is None and torch.empty(0).device.type != \"cuda\":\n            if torch.cuda.is_available():\n                logger.warning_once(\n                    \"You are attempting to use Flash Attention 2.0 with a model not initialized on GPU. Make sure to move the model to GPU\"\n                    \" after initializing it on CPU with `model.to('cuda')`.\"\n                )\n            else:\n                raise ValueError(\n                    \"You are attempting to use Flash Attention 2.0 with a model not initialized on GPU and with no GPU available. \"\n                    \"This is not supported yet. Please make sure to have access to a GPU and either initialise the model on a GPU by passing a device_map \"\n                    \"or initialising the model on CPU and then moving it to GPU.\"\n                )\n        elif (\n            check_device_map\n            and device_map is not None\n            and isinstance(device_map, dict)\n            and (\"cpu\" in device_map.values() or \"disk\" in device_map.values())\n        ):\n            raise ValueError(\n                \"You are attempting to use Flash Attention 2.0 with a model dispatched on CPU or disk. This is not supported. Please make sure to \"\n                \"initialise the model on a GPU by passing a device_map that contains only GPU devices as keys.\"\n            )\n        if not hard_check_only:\n            config._attn_implementation = \"flash_attention_2\"\n        return config\n\n    @classmethod\n    def _check_and_enable_sdpa(cls, config, hard_check_only: bool = False) -> PretrainedConfig:\n        \"\"\"\n        Checks the availability of SDPA for a given model.\n\n        If all checks pass and `hard_check_only` is False, the method will set the config attribute `_attn_implementation` to \"flash_attention_2\" so that the model can initialize the correct attention module.\n        \"\"\"\n        if hard_check_only:\n            if not cls._supports_sdpa:\n                raise ValueError(\n                    f\"{cls.__name__} does not support an attention implementation through torch.nn.functional.scaled_dot_product_attention yet.\"\n                    \" Please request the support for this architecture: https://github.com/huggingface/transformers/issues/28005. If you believe\"\n                    ' this error is a bug, please open an issue in Transformers GitHub repository and load your model with the argument `attn_implementation=\"eager\"` meanwhile. Example: `model = AutoModel.from_pretrained(\"openai/whisper-tiny\", attn_implementation=\"eager\")`'\n                )\n            if not is_torch_sdpa_available():\n                raise ImportError(\n                    \"PyTorch SDPA requirements in Transformers are not met. Please install torch>=2.1.1.\"\n                )\n\n        if not is_torch_sdpa_available() or not cls._supports_sdpa:\n            return config\n\n        _is_bettertransformer = getattr(cls, \"use_bettertransformer\", False)\n        if _is_bettertransformer:\n            return config\n\n        if not hard_check_only:\n            config._attn_implementation = \"sdpa\"\n        return config\n\n    def enable_input_require_grads(self):\n        \"\"\"\n        Enables the gradients for the input embeddings. This is useful for fine-tuning adapter weights while keeping\n        the model weights fixed.\n        \"\"\"\n\n        def make_inputs_require_grads(module, input, output):\n            output.requires_grad_(True)\n\n        self._require_grads_hook = self.get_input_embeddings().register_forward_hook(make_inputs_require_grads)\n\n    def disable_input_require_grads(self):\n        \"\"\"\n        Removes the `_require_grads_hook`.\n        \"\"\"\n        self._require_grads_hook.remove()\n\n    def get_input_embeddings(self) -> nn.Module:\n        \"\"\"\n        Returns the model's input embeddings.\n\n        Returns:\n            `nn.Module`: A torch module mapping vocabulary to hidden states.\n        \"\"\"\n        base_model = getattr(self, self.base_model_prefix, self)\n        if base_model is not self:\n            return base_model.get_input_embeddings()\n        else:\n            raise NotImplementedError\n\n    def set_input_embeddings(self, value: nn.Module):\n        \"\"\"\n        Set model's input embeddings.\n\n        Args:\n            value (`nn.Module`): A module mapping vocabulary to hidden states.\n        \"\"\"\n        base_model = getattr(self, self.base_model_prefix, self)\n        if base_model is not self:\n            base_model.set_input_embeddings(value)\n        else:\n            raise NotImplementedError\n\n    def get_output_embeddings(self) -> nn.Module:\n        \"\"\"\n        Returns the model's output embeddings.\n\n        Returns:\n            `nn.Module`: A torch module mapping hidden states to vocabulary.\n        \"\"\"\n        return None  # Overwrite for models with output embeddings\n\n    def _init_weights(self, module):\n        \"\"\"\n        Initialize the weights. This method should be overridden by derived class and is\n        the only initialization method that will be called when loading a checkpoint\n        using `from_pretrained`. Any attempt to initialize outside of this function\n        will be useless as the torch.nn.init function are all replaced with skip.\n        \"\"\"\n        pass\n\n    def _initialize_weights(self, module):\n        \"\"\"\n        Initialize the weights if they are not already initialized.\n        \"\"\"\n        if getattr(module, \"_is_hf_initialized\", False):\n            return\n        self._init_weights(module)\n        module._is_hf_initialized = True\n\n    def tie_weights(self):\n        \"\"\"\n        Tie the weights between the input embeddings and the output embeddings.\n\n        If the `torchscript` flag is set in the configuration, can't handle parameter sharing so we are cloning the\n        weights instead.\n        \"\"\"\n        if getattr(self.config, \"tie_word_embeddings\", True):\n            output_embeddings = self.get_output_embeddings()\n            if output_embeddings is not None:\n                self._tie_or_clone_weights(output_embeddings, self.get_input_embeddings())\n\n        if getattr(self.config, \"is_encoder_decoder\", False) and getattr(self.config, \"tie_encoder_decoder\", False):\n            if hasattr(self, self.base_model_prefix):\n                self = getattr(self, self.base_model_prefix)\n            tied_weights = self._tie_encoder_decoder_weights(\n                self.encoder, self.decoder, self.base_model_prefix, \"encoder\"\n            )\n            # Setting a dynamic variable instead of `_tied_weights_keys` because it's a class\n            # attributed not an instance member, therefore modifying it will modify the entire class\n            # Leading to issues on subsequent calls by different tests or subsequent calls.\n            self._dynamic_tied_weights_keys = tied_weights\n\n        for module in self.modules():\n            if hasattr(module, \"_tie_weights\"):\n                module._tie_weights()\n\n    @staticmethod\n    def _tie_encoder_decoder_weights(\n        encoder: nn.Module, decoder: nn.Module, base_model_prefix: str, base_encoder_name: str\n    ):\n        uninitialized_encoder_weights: List[str] = []\n        tied_weights: List[str] = []\n        if decoder.__class__ != encoder.__class__:\n            logger.info(\n                f\"{decoder.__class__} and {encoder.__class__} are not equal. In this case make sure that all encoder\"\n                \" weights are correctly initialized.\"\n            )\n\n        def tie_encoder_to_decoder_recursively(\n            decoder_pointer: nn.Module,\n            encoder_pointer: nn.Module,\n            module_name: str,\n            base_encoder_name: str,\n            uninitialized_encoder_weights: List[str],\n            depth=0,\n            total_decoder_name=\"\",\n            total_encoder_name=\"\",\n        ):\n            assert isinstance(decoder_pointer, nn.Module) and isinstance(\n                encoder_pointer, nn.Module\n            ), f\"{decoder_pointer} and {encoder_pointer} have to be of type nn.Module\"\n            if hasattr(decoder_pointer, \"weight\"):\n                assert hasattr(encoder_pointer, \"weight\")\n                encoder_pointer.weight = decoder_pointer.weight\n                tied_weights.append(f\"{base_encoder_name}{total_encoder_name}.weight\")\n                if hasattr(decoder_pointer, \"bias\"):\n                    assert hasattr(encoder_pointer, \"bias\")\n                    tied_weights.append(f\"{base_encoder_name}{total_encoder_name}.bias\")\n                    encoder_pointer.bias = decoder_pointer.bias\n                return\n\n            encoder_modules = encoder_pointer._modules\n            decoder_modules = decoder_pointer._modules\n            if len(decoder_modules) > 0:\n                assert (\n                    len(encoder_modules) > 0\n                ), f\"Encoder module {encoder_pointer} does not match decoder module {decoder_pointer}\"\n\n                all_encoder_weights = {module_name + \"/\" + sub_name for sub_name in encoder_modules.keys()}\n                encoder_layer_pos = 0\n                for name, module in decoder_modules.items():\n                    if name.isdigit():\n                        encoder_name = str(int(name) + encoder_layer_pos)\n                        decoder_name = name\n                        if not isinstance(decoder_modules[decoder_name], type(encoder_modules[encoder_name])) and len(\n                            encoder_modules\n                        ) != len(decoder_modules):\n                            # this can happen if the name corresponds to the position in a list module list of layers\n                            # in this case the decoder has added a cross-attention that the encoder does not have\n                            # thus skip this step and subtract one layer pos from encoder\n                            encoder_layer_pos -= 1\n                            continue\n                    elif name not in encoder_modules:\n                        continue\n                    elif depth > 500:\n                        raise ValueError(\n                            \"Max depth of recursive function `tie_encoder_to_decoder` reached. It seems that there is\"\n                            \" a circular dependency between two or more `nn.Modules` of your model.\"\n                        )\n                    else:\n                        decoder_name = encoder_name = name\n                    tie_encoder_to_decoder_recursively(\n                        decoder_modules[decoder_name],\n                        encoder_modules[encoder_name],\n                        module_name + \"/\" + name,\n                        base_encoder_name,\n                        uninitialized_encoder_weights,\n                        depth=depth + 1,\n                        total_encoder_name=f\"{total_encoder_name}.{encoder_name}\",\n                        total_decoder_name=f\"{total_decoder_name}.{decoder_name}\",\n                    )\n                    all_encoder_weights.remove(module_name + \"/\" + encoder_name)\n\n                uninitialized_encoder_weights += list(all_encoder_weights)\n\n        # tie weights recursively\n        tie_encoder_to_decoder_recursively(\n            decoder, encoder, base_model_prefix, base_encoder_name, uninitialized_encoder_weights\n        )\n\n        if len(uninitialized_encoder_weights) > 0:\n            logger.warning(\n                f\"The following encoder weights were not tied to the decoder {uninitialized_encoder_weights}\"\n            )\n        return tied_weights\n\n    def _tie_or_clone_weights(self, output_embeddings, input_embeddings):\n        \"\"\"Tie or clone module weights depending of whether we are using TorchScript or not\"\"\"\n        if self.config.torchscript:\n            output_embeddings.weight = nn.Parameter(input_embeddings.weight.clone())\n        else:\n            output_embeddings.weight = input_embeddings.weight\n\n        if getattr(output_embeddings, \"bias\", None) is not None:\n            output_embeddings.bias.data = nn.functional.pad(\n                output_embeddings.bias.data,\n                (\n                    0,\n                    output_embeddings.weight.shape[0] - output_embeddings.bias.shape[0],\n                ),\n                \"constant\",\n                0,\n            )\n        if hasattr(output_embeddings, \"out_features\") and hasattr(input_embeddings, \"num_embeddings\"):\n            output_embeddings.out_features = input_embeddings.num_embeddings\n\n    def _get_no_split_modules(self, device_map: str):\n        \"\"\"\n        Get the modules of the model that should not be spit when using device_map. We iterate through the modules to\n        get the underlying `_no_split_modules`.\n\n        Args:\n            device_map (`str`):\n                The device map value. Options are [\"auto\", \"balanced\", \"balanced_low_0\", \"sequential\"]\n\n        Returns:\n            `List[str]`: List of modules that should not be split\n        \"\"\"\n        _no_split_modules = set()\n        modules_to_check = [self]\n        while len(modules_to_check) > 0:\n            module = modules_to_check.pop(-1)\n            # if the module does not appear in _no_split_modules, we also check the children\n            if module.__class__.__name__ not in _no_split_modules:\n                if isinstance(module, PreTrainedModel):\n                    if module._no_split_modules is None:\n                        raise ValueError(\n                            f\"{module.__class__.__name__} does not support `device_map='{device_map}'`. To implement support, the model \"\n                            \"class needs to implement the `_no_split_modules` attribute.\"\n                        )\n                    else:\n                        _no_split_modules = _no_split_modules | set(module._no_split_modules)\n                modules_to_check += list(module.children())\n        return list(_no_split_modules)\n\n    def resize_token_embeddings(\n        self,\n        new_num_tokens: Optional[int] = None,\n        pad_to_multiple_of: Optional[int] = None,\n        mean_resizing: bool = True,\n    ) -> nn.Embedding:\n        \"\"\"\n        Resizes input token embeddings matrix of the model if `new_num_tokens != config.vocab_size`.\n\n        Takes care of tying weights embeddings afterwards if the model class has a `tie_weights()` method.\n\n        Arguments:\n            new_num_tokens (`int`, *optional*):\n                The new number of tokens in the embedding matrix. Increasing the size will add newly initialized\n                vectors at the end. Reducing the size will remove vectors from the end. If not provided or `None`, just\n                returns a pointer to the input tokens `torch.nn.Embedding` module of the model without doing anything.\n            pad_to_multiple_of (`int`, *optional*):\n                If set will pad the embedding matrix to a multiple of the provided value.If `new_num_tokens` is set to\n                `None` will just pad the embedding to a multiple of `pad_to_multiple_of`.\n\n                This is especially useful to enable the use of Tensor Cores on NVIDIA hardware with compute capability\n                `>= 7.5` (Volta), or on TPUs which benefit from having sequence lengths be a multiple of 128. For more\n                details about this, or help on choosing the correct value for resizing, refer to this guide:\n                https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#requirements-tc\n            mean_resizing (`bool`):\n                Whether to initialize the added embeddings from a multivariate normal distribution that has old embeddings' mean and\n                covariance or to initialize them with a normal distribution that has a mean of zero and std equals `config.initializer_range`.\n\n                Setting `mean_resizing` to `True` is useful when increasing the size of the embeddings of causal language models,\n                where the generated tokens' probabilities won't be affected by the added embeddings because initializing the new embeddings with the\n                old embeddings' mean will reduce the kl-divergence between the next token probability before and after adding the new embeddings.\n                Refer to this article for more information: https://nlp.stanford.edu/~johnhew/vocab-expansion.html\n\n        Return:\n            `torch.nn.Embedding`: Pointer to the input tokens Embeddings Module of the model.\n        \"\"\"\n        model_embeds = self._resize_token_embeddings(new_num_tokens, pad_to_multiple_of, mean_resizing)\n        if new_num_tokens is None and pad_to_multiple_of is None:\n            return model_embeds\n\n        # Since we are basically resuing the same old embeddings with new weight values, gathering is required\n        is_quantized = hasattr(self, \"hf_quantizer\") and self.hf_quantizer is not None\n        if is_deepspeed_zero3_enabled() and not is_quantized:\n            import deepspeed\n\n            with deepspeed.zero.GatheredParameters(model_embeds.weight, modifier_rank=None):\n                vocab_size = model_embeds.weight.shape[0]\n        else:\n            vocab_size = model_embeds.weight.shape[0]\n\n        # Update base model and current model config.\n        self.config.get_text_config().vocab_size = vocab_size\n        self.vocab_size = vocab_size\n\n        # Tie weights again if needed\n        self.tie_weights()\n\n        return model_embeds\n\n    def _resize_token_embeddings(self, new_num_tokens, pad_to_multiple_of=None, mean_resizing=True):\n        old_embeddings = self.get_input_embeddings()\n        new_embeddings = self._get_resized_embeddings(\n            old_embeddings, new_num_tokens, pad_to_multiple_of, mean_resizing\n        )\n        if hasattr(old_embeddings, \"_hf_hook\"):\n            hook = old_embeddings._hf_hook\n            add_hook_to_module(new_embeddings, hook)\n        old_embeddings_requires_grad = old_embeddings.weight.requires_grad\n        new_embeddings.requires_grad_(old_embeddings_requires_grad)\n        self.set_input_embeddings(new_embeddings)\n        is_quantized = hasattr(self, \"hf_quantizer\") and self.hf_quantizer is not None\n\n        # Update new_num_tokens with the actual size of new_embeddings\n        if pad_to_multiple_of is not None:\n            if is_deepspeed_zero3_enabled() and not is_quantized:\n                import deepspeed\n\n                with deepspeed.zero.GatheredParameters(new_embeddings.weight, modifier_rank=None):\n                    new_num_tokens = new_embeddings.weight.shape[0]\n            else:\n                new_num_tokens = new_embeddings.weight.shape[0]\n\n        # if word embeddings are not tied, make sure that lm head is resized as well\n        if self.get_output_embeddings() is not None and not self.config.tie_word_embeddings:\n            old_lm_head = self.get_output_embeddings()\n            if isinstance(old_lm_head, torch.nn.Embedding):\n                new_lm_head = self._get_resized_embeddings(old_lm_head, new_num_tokens, mean_resizing=mean_resizing)\n            else:\n                new_lm_head = self._get_resized_lm_head(old_lm_head, new_num_tokens, mean_resizing=mean_resizing)\n            if hasattr(old_lm_head, \"_hf_hook\"):\n                hook = old_lm_head._hf_hook\n                add_hook_to_module(new_lm_head, hook)\n            old_lm_head_requires_grad = old_lm_head.weight.requires_grad\n            new_lm_head.requires_grad_(old_lm_head_requires_grad)\n            self.set_output_embeddings(new_lm_head)\n\n        return self.get_input_embeddings()\n\n    def _get_resized_embeddings(\n        self,\n        old_embeddings: nn.Embedding,\n        new_num_tokens: Optional[int] = None,\n        pad_to_multiple_of: Optional[int] = None,\n        mean_resizing: bool = True,\n    ) -> nn.Embedding:\n        \"\"\"\n        Build a resized Embedding Module from a provided token Embedding Module. Increasing the size will add newly\n        initialized vectors at the end. Reducing the size will remove vectors from the end\n\n        Args:\n            old_embeddings (`torch.nn.Embedding`):\n                Old embeddings to be resized.\n            new_num_tokens (`int`, *optional*):\n                New number of tokens in the embedding matrix.\n\n                Increasing the size will add newly initialized vectors at the end. Reducing the size will remove\n                vectors from the end. If not provided or `None`, just returns a pointer to the input tokens\n                `torch.nn.Embedding` module of the model without doing anything.\n            pad_to_multiple_of (`int`, *optional*):\n                If set will pad the embedding matrix to a multiple of the provided value. If `new_num_tokens` is set to\n                `None` will just pad the embedding to a multiple of `pad_to_multiple_of`.\n\n                This is especially useful to enable the use of Tensor Cores on NVIDIA hardware with compute capability\n                `>= 7.5` (Volta), or on TPUs which benefit from having sequence lengths be a multiple of 128. For more\n                details about this, or help on choosing the correct value for resizing, refer to this guide:\n                https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#requirements-tc\n            mean_resizing (`bool`):\n                Whether to initialize the added embeddings from a multivariate normal distribution that has old embeddings' mean and\n                covariance or to initialize them with a normal distribution that has a mean of zero and std equals `config.initializer_range`.\n\n                Setting `mean_resizing` to `True` is useful when increasing the size of the embeddings of causal language models,\n                where the generated tokens' probabilities will not be affected by the added embeddings because initializing the new embeddings with the\n                old embeddings' mean will reduce the kl-divergence between the next token probability before and after adding the new embeddings.\n                Refer to this article for more information: https://nlp.stanford.edu/~johnhew/vocab-expansion.html\n\n\n        Return:\n            `torch.nn.Embedding`: Pointer to the resized Embedding Module or the old Embedding Module if\n            `new_num_tokens` is `None`\n        \"\"\"\n\n        if pad_to_multiple_of is not None:\n            if not isinstance(pad_to_multiple_of, int):\n                raise ValueError(\n                    f\"Asking to pad the embedding matrix to a multiple of `{pad_to_multiple_of}`, which is not and integer. Please make sure to pass an integer\"\n                )\n            if new_num_tokens is None:\n                new_num_tokens = old_embeddings.weight.shape[0]\n            new_num_tokens = ((new_num_tokens + pad_to_multiple_of - 1) // pad_to_multiple_of) * pad_to_multiple_of\n        else:\n            logger.info(\n                \"You are resizing the embedding layer without providing a `pad_to_multiple_of` parameter. This means that the new embedding\"\n                f\" dimension will be {new_num_tokens}. This might induce some performance reduction as *Tensor Cores* will not be available.\"\n                \" For more details about this, or help on choosing the correct value for resizing, refer to this guide:\"\n                \" https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#requirements-tc\"\n            )\n\n        if new_num_tokens is None:\n            return old_embeddings\n\n        is_quantized = hasattr(self, \"hf_quantizer\") and self.hf_quantizer is not None\n        if is_deepspeed_zero3_enabled() and not is_quantized:\n            import deepspeed\n\n            with deepspeed.zero.GatheredParameters(old_embeddings.weight, modifier_rank=None):\n                old_num_tokens, old_embedding_dim = old_embeddings.weight.size()\n        else:\n            old_num_tokens, old_embedding_dim = old_embeddings.weight.size()\n\n        if old_num_tokens == new_num_tokens and not is_deepspeed_zero3_enabled():\n            return old_embeddings\n\n        if not isinstance(old_embeddings, nn.Embedding):\n            raise TypeError(\n                f\"Old embeddings are of type {type(old_embeddings)}, which is not an instance of {nn.Embedding}. You\"\n                \" should either use a different resize function or make sure that `old_embeddings` are an instance of\"\n                f\" {nn.Embedding}.\"\n            )\n\n        # Build new embeddings\n\n        # When using DeepSpeed ZeRO-3, we shouldn't create new embeddings with DeepSpeed init\n        # because the shape of the new embedding layer is used across various modeling files\n        # as well as to update config vocab size. Shape will be 0 when using DeepSpeed init leading\n        # to errors when training.\n        new_embeddings = nn.Embedding(\n            new_num_tokens,\n            old_embedding_dim,\n            device=old_embeddings.weight.device,\n            dtype=old_embeddings.weight.dtype,\n        )\n\n        if new_num_tokens > old_num_tokens and not mean_resizing:\n            # initialize new embeddings (in particular added tokens) with a mean of 0 and std equals `config.initializer_range`.\n            self._init_weights(new_embeddings)\n\n        elif new_num_tokens > old_num_tokens and mean_resizing:\n            # initialize new embeddings  (in particular added tokens). The new embeddings will be initialized\n            # from a multivariate normal distribution that has old embeddings' mean and covariance.\n            # as described in this article: https://nlp.stanford.edu/~johnhew/vocab-expansion.html\n            logger.warning_once(\n                \"The new embeddings will be initialized from a multivariate normal distribution that has old embeddings' mean and covariance. \"\n                \"As described in this article: https://nlp.stanford.edu/~johnhew/vocab-expansion.html. \"\n                \"To disable this, use `mean_resizing=False`\"\n            )\n\n            added_num_tokens = new_num_tokens - old_num_tokens\n            if is_deepspeed_zero3_enabled() and not is_quantized:\n                import deepspeed\n\n                with deepspeed.zero.GatheredParameters([old_embeddings.weight], modifier_rank=None):\n                    self._init_added_embeddings_weights_with_mean(\n                        old_embeddings, new_embeddings, old_embedding_dim, old_num_tokens, added_num_tokens\n                    )\n            else:\n                self._init_added_embeddings_weights_with_mean(\n                    old_embeddings, new_embeddings, old_embedding_dim, old_num_tokens, added_num_tokens\n                )\n\n        # Copy token embeddings from the previous weights\n\n        # numbers of tokens to copy\n        n = min(old_num_tokens, new_num_tokens)\n\n        if is_deepspeed_zero3_enabled() and not is_quantized:\n            import deepspeed\n\n            params = [old_embeddings.weight, new_embeddings.weight]\n            with deepspeed.zero.GatheredParameters(params, modifier_rank=0):\n                new_embeddings.weight.data[:n, :] = old_embeddings.weight.data[:n, :]\n        else:\n            new_embeddings.weight.data[:n, :] = old_embeddings.weight.data[:n, :]\n\n        # Replace weights in old_embeddings and return to maintain the same embedding type.\n        # This ensures correct functionality when a Custom Embedding class is passed as input.\n        # The input and output embedding types remain consistent. (c.f. https://github.com/huggingface/transformers/pull/31979)\n        if is_deepspeed_zero3_enabled() and not is_quantized:\n            import deepspeed\n\n            params = [old_embeddings.weight, new_embeddings.weight]\n            with deepspeed.zero.GatheredParameters(params, modifier_rank=0):\n                old_embeddings.weight = new_embeddings.weight\n                old_embeddings.num_embeddings = new_embeddings.weight.data.shape[0]\n\n                # If the new number of tokens is smaller than the original `padding_idx`, the `padding_idx`\n                # will be set to `None` in the resized embeddings.\n                if old_embeddings.padding_idx is not None and (new_num_tokens - 1) < old_embeddings.padding_idx:\n                    old_embeddings.padding_idx = None\n        else:\n            old_embeddings.weight.data = new_embeddings.weight.data\n            old_embeddings.num_embeddings = new_embeddings.weight.data.shape[0]\n            if old_embeddings.padding_idx is not None and (new_num_tokens - 1) < old_embeddings.padding_idx:\n                old_embeddings.padding_idx = None\n\n        return old_embeddings\n\n    def _get_resized_lm_head(\n        self,\n        old_lm_head: nn.Linear,\n        new_num_tokens: Optional[int] = None,\n        transposed: Optional[bool] = False,\n        mean_resizing: bool = True,\n    ) -> nn.Linear:\n        \"\"\"\n        Build a resized Linear Module from a provided old Linear Module. Increasing the size will add newly initialized\n        vectors at the end. Reducing the size will remove vectors from the end\n\n        Args:\n            old_lm_head (`torch.nn.Linear`):\n                Old lm head liner layer to be resized.\n            new_num_tokens (`int`, *optional*):\n                New number of tokens in the linear matrix.\n\n                Increasing the size will add newly initialized vectors at the end. Reducing the size will remove\n                vectors from the end. If not provided or `None`, just returns a pointer to the input tokens\n                `torch.nn.Linear` module of the model without doing anything. transposed (`bool`, *optional*, defaults\n                to `False`): Whether `old_lm_head` is transposed or not. If True `old_lm_head.size()` is `lm_head_dim,\n                vocab_size` else `vocab_size, lm_head_dim`.\n            mean_resizing (`bool`):\n                Whether to initialize the added embeddings from a multivariate normal distribution that has old embeddings' mean and\n                covariance or to initialize them with a normal distribution that has a mean of zero and std equals `config.initializer_range`.\n\n                Setting `mean_resizing` to `True` is useful when increasing the size of the embeddings of causal language models,\n                where the generated tokens' probabilities will not be affected by the added embeddings because initializing the new embeddings with the\n                old embeddings' mean will reduce the kl-divergence between the next token probability before and after adding the new embeddings.\n                Refer to this article for more information: https://nlp.stanford.edu/~johnhew/vocab-expansion.html\n\n        Return:\n            `torch.nn.Linear`: Pointer to the resized Linear Module or the old Linear Module if `new_num_tokens` is\n            `None`\n        \"\"\"\n        if new_num_tokens is None:\n            return old_lm_head\n\n        is_quantized = hasattr(self, \"hf_quantizer\") and self.hf_quantizer is not None\n        if is_deepspeed_zero3_enabled() and not is_quantized:\n            import deepspeed\n\n            with deepspeed.zero.GatheredParameters(old_lm_head.weight, modifier_rank=None):\n                old_num_tokens, old_lm_head_dim = (\n                    old_lm_head.weight.size() if not transposed else old_lm_head.weight.t().size()\n                )\n        else:\n            old_num_tokens, old_lm_head_dim = (\n                old_lm_head.weight.size() if not transposed else old_lm_head.weight.t().size()\n            )\n\n        if old_num_tokens == new_num_tokens and not is_deepspeed_zero3_enabled():\n            return old_lm_head\n\n        if not isinstance(old_lm_head, nn.Linear):\n            raise TypeError(\n                f\"Old language model head is of type {type(old_lm_head)}, which is not an instance of {nn.Linear}. You\"\n                \" should either use a different resize function or make sure that `old_lm_head` are an instance of\"\n                f\" {nn.Linear}.\"\n            )\n\n        # Build new lm head\n        new_lm_head_shape = (old_lm_head_dim, new_num_tokens) if not transposed else (new_num_tokens, old_lm_head_dim)\n        has_new_lm_head_bias = old_lm_head.bias is not None\n\n        # When using DeepSpeed ZeRO-3, we shouldn't create new embeddings with DeepSpeed init\n        # because the shape of the new embedding layer is used across various modeling files\n        # as well as to update config vocab size. Shape will be 0 when using DeepSpeed init leading\n        # to errors when training.\n        new_lm_head = nn.Linear(\n            *new_lm_head_shape,\n            bias=has_new_lm_head_bias,\n            device=old_lm_head.weight.device,\n            dtype=old_lm_head.weight.dtype,\n        )\n\n        if new_num_tokens > old_num_tokens and not mean_resizing:\n            # initialize new embeddings (in particular added tokens) with a mean of 0 and std equals `config.initializer_range`.\n            self._init_weights(new_lm_head)\n\n        elif new_num_tokens > old_num_tokens and mean_resizing:\n            # initialize new lm_head weights (in particular added tokens). The new lm_head weights\n            # will be initialized from a multivariate normal distribution that has old embeddings' mean and covariance.\n            # as described in this article: https://nlp.stanford.edu/~johnhew/vocab-expansion.html\n            logger.warning_once(\n                \"The new lm_head weights will be initialized from a multivariate normal distribution that has old embeddings' mean and covariance. \"\n                \"As described in this article: https://nlp.stanford.edu/~johnhew/vocab-expansion.html. \"\n                \"To disable this, use `mean_resizing=False`\"\n            )\n\n            added_num_tokens = new_num_tokens - old_num_tokens\n            if is_deepspeed_zero3_enabled() and not is_quantized:\n                import deepspeed\n\n                params = [old_lm_head.weight]\n                if has_new_lm_head_bias:\n                    params += [old_lm_head.bias]\n                with deepspeed.zero.GatheredParameters(params, modifier_rank=None):\n                    self._init_added_lm_head_weights_with_mean(\n                        old_lm_head, new_lm_head, old_lm_head_dim, old_num_tokens, added_num_tokens, transposed\n                    )\n                    if has_new_lm_head_bias:\n                        self._init_added_lm_head_bias_with_mean(old_lm_head, new_lm_head, added_num_tokens)\n\n            else:\n                self._init_added_lm_head_weights_with_mean(\n                    old_lm_head, new_lm_head, old_lm_head_dim, old_num_tokens, added_num_tokens, transposed\n                )\n                if has_new_lm_head_bias:\n                    self._init_added_lm_head_bias_with_mean(old_lm_head, new_lm_head, added_num_tokens)\n\n        num_tokens_to_copy = min(old_num_tokens, new_num_tokens)\n\n        if is_deepspeed_zero3_enabled() and not is_quantized:\n            import deepspeed\n\n            params = [old_lm_head.weight, old_lm_head.bias, new_lm_head.weight, new_lm_head.bias]\n            with deepspeed.zero.GatheredParameters(params, modifier_rank=0):\n                self._copy_lm_head_original_to_resized(\n                    new_lm_head, old_lm_head, num_tokens_to_copy, transposed, has_new_lm_head_bias\n                )\n        else:\n            self._copy_lm_head_original_to_resized(\n                new_lm_head, old_lm_head, num_tokens_to_copy, transposed, has_new_lm_head_bias\n            )\n\n        return new_lm_head\n\n    def _init_added_embeddings_weights_with_mean(\n        self, old_embeddings, new_embeddings, old_embedding_dim, old_num_tokens, added_num_tokens\n    ):\n        old_embeddings_weight = old_embeddings.weight.data.to(torch.float32)\n        mean_embeddings = torch.mean(old_embeddings_weight, axis=0)\n        old_centered_embeddings = old_embeddings_weight - mean_embeddings\n        covariance = old_centered_embeddings.T @ old_centered_embeddings / old_num_tokens\n\n        # Check if the covariance is positive definite.\n        eigenvalues = torch.linalg.eigvals(covariance)\n        is_covariance_psd = bool(\n            (covariance == covariance.T).all() and not torch.is_complex(eigenvalues) and (eigenvalues > 0).all()\n        )\n        if is_covariance_psd:\n            # If covariances is positive definite, a distribution can be created. and we can sample new weights from it.\n            distribution = torch.distributions.multivariate_normal.MultivariateNormal(\n                mean_embeddings, covariance_matrix=1e-9 * covariance\n            )\n            new_embeddings.weight.data[-1 * added_num_tokens :, :] = distribution.sample(\n                sample_shape=(added_num_tokens,)\n            ).to(old_embeddings.weight.dtype)\n        else:\n            # Otherwise, just initialize with the mean. because distribtion will not be created.\n            new_embeddings.weight.data[-1 * added_num_tokens :, :] = (\n                mean_embeddings[None, :].repeat(added_num_tokens, 1).to(old_embeddings.weight.dtype)\n            )\n\n    def _init_added_lm_head_weights_with_mean(\n        self,\n        old_lm_head,\n        new_lm_head,\n        old_lm_head_dim,\n        old_num_tokens,\n        added_num_tokens,\n        transposed=False,\n    ):\n        if transposed:\n            # Transpose to the desired shape for the function.\n            new_lm_head.weight.data = new_lm_head.weight.data.T\n            old_lm_head.weight.data = old_lm_head.weight.data.T\n\n        # The same initilization logic as Embeddings.\n        self._init_added_embeddings_weights_with_mean(\n            old_lm_head, new_lm_head, old_lm_head_dim, old_num_tokens, added_num_tokens\n        )\n\n        if transposed:\n            # Transpose again to the correct shape.\n            new_lm_head.weight.data = new_lm_head.weight.data.T\n            old_lm_head.weight.data = old_lm_head.weight.data.T\n\n    def _init_added_lm_head_bias_with_mean(self, old_lm_head, new_lm_head, added_num_tokens):\n        bias_mean = torch.mean(old_lm_head.bias.data, axis=0, dtype=torch.float32)\n        bias_std = torch.std(old_lm_head.bias.data, axis=0).to(torch.float32)\n        new_lm_head.bias.data[-1 * added_num_tokens :].normal_(mean=bias_mean, std=1e-9 * bias_std)\n\n    def _copy_lm_head_original_to_resized(\n        self, new_lm_head, old_lm_head, num_tokens_to_copy, transposed, has_new_lm_head_bias\n    ):\n        # Copy old lm head weights to new lm head\n        if not transposed:\n            new_lm_head.weight.data[:num_tokens_to_copy, :] = old_lm_head.weight.data[:num_tokens_to_copy, :]\n        else:\n            new_lm_head.weight.data[:, :num_tokens_to_copy] = old_lm_head.weight.data[:, :num_tokens_to_copy]\n\n        # Copy bias weights to new lm head\n        if has_new_lm_head_bias:\n            new_lm_head.bias.data[:num_tokens_to_copy] = old_lm_head.bias.data[:num_tokens_to_copy]\n\n    def resize_position_embeddings(self, new_num_position_embeddings: int):\n        raise NotImplementedError(\n            f\"`resize_position_embeddings` is not implemented for {self.__class__}`. To implement it, you should \"\n            f\"overwrite this method in the class {self.__class__} in `modeling_{self.__class__.__module__}.py`\"\n        )\n\n    def get_position_embeddings(self) -> Union[nn.Embedding, Tuple[nn.Embedding]]:\n        raise NotImplementedError(\n            f\"`get_position_embeddings` is not implemented for {self.__class__}`. To implement it, you should \"\n            f\"overwrite this method in the class {self.__class__} in `modeling_{self.__class__.__module__}.py`\"\n        )\n\n    def init_weights(self):\n        \"\"\"\n        If needed prunes and maybe initializes weights. If using a custom `PreTrainedModel`, you need to implement any\n        initialization logic in `_init_weights`.\n        \"\"\"\n        # Prune heads if needed\n        if self.config.pruned_heads:\n            self.prune_heads(self.config.pruned_heads)\n\n        if _init_weights:\n            # Initialize weights\n            self.apply(self._initialize_weights)\n\n            # Tie weights should be skipped when not initializing all weights\n            # since from_pretrained(...) calls tie weights anyways\n            self.tie_weights()\n\n    def prune_heads(self, heads_to_prune: Dict[int, List[int]]):\n        \"\"\"\n        Prunes heads of the base model.\n\n        Arguments:\n            heads_to_prune (`Dict[int, List[int]]`):\n                Dictionary with keys being selected layer indices (`int`) and associated values being the list of heads\n                to prune in said layer (list of `int`). For instance {1: [0, 2], 2: [2, 3]} will prune heads 0 and 2 on\n                layer 1 and heads 2 and 3 on layer 2.\n        \"\"\"\n        # save new sets of pruned heads as union of previously stored pruned heads and newly pruned heads\n        for layer, heads in heads_to_prune.items():\n            union_heads = set(self.config.pruned_heads.get(layer, [])) | set(heads)\n            self.config.pruned_heads[layer] = list(union_heads)  # Unfortunately we have to store it as list for JSON\n\n        self.base_model._prune_heads(heads_to_prune)\n\n    def gradient_checkpointing_enable(self, gradient_checkpointing_kwargs=None):\n        \"\"\"\n        Activates gradient checkpointing for the current model.\n\n        Note that in other frameworks this feature can be referred to as \"activation checkpointing\" or \"checkpoint\n        activations\".\n\n        We pass the `__call__` method of the modules instead of `forward` because `__call__` attaches all the hooks of\n        the module. https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690/2\n\n        Args:\n            gradient_checkpointing_kwargs (dict, *optional*):\n                Additional keyword arguments passed along to the `torch.utils.checkpoint.checkpoint` function.\n        \"\"\"\n        if not self.supports_gradient_checkpointing:\n            raise ValueError(f\"{self.__class__.__name__} does not support gradient checkpointing.\")\n\n        if gradient_checkpointing_kwargs is None:\n            gradient_checkpointing_kwargs = {\"use_reentrant\": True}\n\n        gradient_checkpointing_func = functools.partial(checkpoint, **gradient_checkpointing_kwargs)\n\n        # For old GC format (transformers < 4.35.0) for models that live on the Hub\n        # we will fall back to the overwritten `_set_gradient_checkpointing` method\n        _is_using_old_format = \"value\" in inspect.signature(self._set_gradient_checkpointing).parameters\n\n        if not _is_using_old_format:\n            self._set_gradient_checkpointing(enable=True, gradient_checkpointing_func=gradient_checkpointing_func)\n        else:\n            self.apply(partial(self._set_gradient_checkpointing, value=True))\n            logger.warning(\n                \"You are using an old version of the checkpointing format that is deprecated (We will also silently ignore `gradient_checkpointing_kwargs` in case you passed it).\"\n                \"Please update to the new format on your modeling file. To use the new format, you need to completely remove the definition of the method `_set_gradient_checkpointing` in your model.\"\n            )\n\n        if getattr(self, \"_hf_peft_config_loaded\", False):\n            # When using PEFT + gradient checkpointing + Trainer we need to make sure the input has requires_grad=True\n            # we do it also on PEFT: https://github.com/huggingface/peft/blob/85013987aa82aa1af3da1236b6902556ce3e483e/src/peft/peft_model.py#L334\n            # When training with PEFT, only LoRA layers will have requires grad set to True, but the output of frozen layers need to propagate\n            # the gradients to make sure the gradient flows.\n            self.enable_input_require_grads()\n\n    def _set_gradient_checkpointing(self, enable: bool = True, gradient_checkpointing_func: Callable = checkpoint):\n        is_gradient_checkpointing_set = False\n\n        # Apply it on the top-level module in case the top-level modules supports it\n        # for example, LongT5Stack inherits from `PreTrainedModel`.\n        if hasattr(self, \"gradient_checkpointing\"):\n            self._gradient_checkpointing_func = gradient_checkpointing_func\n            self.gradient_checkpointing = enable\n            is_gradient_checkpointing_set = True\n\n        for module in self.modules():\n            if hasattr(module, \"gradient_checkpointing\"):\n                module._gradient_checkpointing_func = gradient_checkpointing_func\n                module.gradient_checkpointing = enable\n                is_gradient_checkpointing_set = True\n\n        if not is_gradient_checkpointing_set:\n            raise ValueError(\n                f\"{self.__class__.__name__} is not compatible with gradient checkpointing. Make sure all the architecture support it by setting a boolean attribute\"\n                \" `gradient_checkpointing` to modules of the model that uses checkpointing.\"\n            )\n\n    def gradient_checkpointing_disable(self):\n        \"\"\"\n        Deactivates gradient checkpointing for the current model.\n\n        Note that in other frameworks this feature can be referred to as \"activation checkpointing\" or \"checkpoint\n        activations\".\n        \"\"\"\n        if self.supports_gradient_checkpointing:\n            # For old GC format (transformers < 4.35.0) for models that live on the Hub\n            # we will fall back to the overwritten `_set_gradient_checkpointing` methid\n            _is_using_old_format = \"value\" in inspect.signature(self._set_gradient_checkpointing).parameters\n            if not _is_using_old_format:\n                self._set_gradient_checkpointing(enable=False)\n            else:\n                logger.warning(\n                    \"You are using an old version of the checkpointing format that is deprecated (We will also silently ignore `gradient_checkpointing_kwargs` in case you passed it).\"\n                    \"Please update to the new format on your modeling file. To use the new format, you need to completely remove the definition of the method `_set_gradient_checkpointing` in your model.\"\n                )\n                self.apply(partial(self._set_gradient_checkpointing, value=False))\n\n        if getattr(self, \"_hf_peft_config_loaded\", False):\n            self.disable_input_require_grads()\n\n    @property\n    def is_gradient_checkpointing(self) -> bool:\n        \"\"\"\n        Whether gradient checkpointing is activated for this model or not.\n\n        Note that in other frameworks this feature can be referred to as \"activation checkpointing\" or \"checkpoint\n        activations\".\n        \"\"\"\n        return any(hasattr(m, \"gradient_checkpointing\") and m.gradient_checkpointing for m in self.modules())\n\n    def save_pretrained(\n        self,\n        save_directory: Union[str, os.PathLike],\n        is_main_process: bool = True,\n        state_dict: Optional[dict] = None,\n        save_function: Callable = torch.save,\n        push_to_hub: bool = False,\n        max_shard_size: Union[int, str] = \"5GB\",\n        safe_serialization: bool = True,\n        variant: Optional[str] = None,\n        token: Optional[Union[str, bool]] = None,\n        save_peft_format: bool = True,\n        **kwargs,\n    ):\n        \"\"\"\n        Save a model and its configuration file to a directory, so that it can be re-loaded using the\n        [`~PreTrainedModel.from_pretrained`] class method.\n\n        Arguments:\n            save_directory (`str` or `os.PathLike`):\n                Directory to which to save. Will be created if it doesn't exist.\n            is_main_process (`bool`, *optional*, defaults to `True`):\n                Whether the process calling this is the main process or not. Useful when in distributed training like\n                TPUs and need to call this function on all processes. In this case, set `is_main_process=True` only on\n                the main process to avoid race conditions.\n            state_dict (nested dictionary of `torch.Tensor`):\n                The state dictionary of the model to save. Will default to `self.state_dict()`, but can be used to only\n                save parts of the model or if special precautions need to be taken when recovering the state dictionary\n                of a model (like when using model parallelism).\n            save_function (`Callable`):\n                The function to use to save the state dictionary. Useful on distributed training like TPUs when one\n                need to replace `torch.save` by another method.\n            push_to_hub (`bool`, *optional*, defaults to `False`):\n                Whether or not to push your model to the Hugging Face model hub after saving it. You can specify the\n                repository you want to push to with `repo_id` (will default to the name of `save_directory` in your\n                namespace).\n            max_shard_size (`int` or `str`, *optional*, defaults to `\"5GB\"`):\n                The maximum size for a checkpoint before being sharded. Checkpoints shard will then be each of size\n                lower than this size. If expressed as a string, needs to be digits followed by a unit (like `\"5MB\"`).\n                We default it to 5GB in order for models to be able to run easily on free-tier google colab instances\n                without CPU OOM issues.\n\n                <Tip warning={true}>\n\n                If a single weight of the model is bigger than `max_shard_size`, it will be in its own checkpoint shard\n                which will be bigger than `max_shard_size`.\n\n                </Tip>\n\n            safe_serialization (`bool`, *optional*, defaults to `True`):\n                Whether to save the model using `safetensors` or the traditional PyTorch way (that uses `pickle`).\n            variant (`str`, *optional*):\n                If specified, weights are saved in the format pytorch_model.<variant>.bin.\n            token (`str` or `bool`, *optional*):\n                The token to use as HTTP bearer authorization for remote files. If `True`, or not specified, will use\n                the token generated when running `huggingface-cli login` (stored in `~/.huggingface`).\n            save_peft_format (`bool`, *optional*, defaults to `True`):\n                For backward compatibility with PEFT library, in case adapter weights are attached to the model, all\n                keys of the state dict of adapters needs to be pre-pended with `base_model.model`. Advanced users can\n                disable this behaviours by setting `save_peft_format` to `False`.\n            kwargs (`Dict[str, Any]`, *optional*):\n                Additional key word arguments passed along to the [`~utils.PushToHubMixin.push_to_hub`] method.\n        \"\"\"\n        use_auth_token = kwargs.pop(\"use_auth_token\", None)\n        ignore_metadata_errors = kwargs.pop(\"ignore_metadata_errors\", False)\n\n        if use_auth_token is not None:\n            warnings.warn(\n                \"The `use_auth_token` argument is deprecated and will be removed in v5 of Transformers. Please use `token` instead.\",\n                FutureWarning,\n            )\n            if token is not None:\n                raise ValueError(\n                    \"`token` and `use_auth_token` are both specified. Please set only the argument `token`.\"\n                )\n            token = use_auth_token\n\n        if token is not None:\n            kwargs[\"token\"] = token\n\n        _hf_peft_config_loaded = getattr(self, \"_hf_peft_config_loaded\", False)\n\n        hf_quantizer = getattr(self, \"hf_quantizer\", None)\n        quantization_serializable = (\n            hf_quantizer is not None\n            and isinstance(hf_quantizer, HfQuantizer)\n            and hf_quantizer.is_serializable(safe_serialization=safe_serialization)\n        )\n\n        if hf_quantizer is not None and not _hf_peft_config_loaded and not quantization_serializable:\n            raise ValueError(\n                f\"The model is quantized with {hf_quantizer.quantization_config.quant_method} and is not serializable - check out the warnings from\"\n                \" the logger on the traceback to understand the reason why the quantized model is not serializable.\"\n            )\n\n        if \"save_config\" in kwargs:\n            warnings.warn(\n                \"`save_config` is deprecated and will be removed in v5 of Transformers. Use `is_main_process` instead.\"\n            )\n            is_main_process = kwargs.pop(\"save_config\")\n        if safe_serialization and not is_safetensors_available():\n            raise ImportError(\"`safe_serialization` requires the `safetensors library: `pip install safetensors`.\")\n\n        if os.path.isfile(save_directory):\n            logger.error(f\"Provided path ({save_directory}) should be a directory, not a file\")\n            return\n\n        os.makedirs(save_directory, exist_ok=True)\n\n        if push_to_hub:\n            commit_message = kwargs.pop(\"commit_message\", None)\n            repo_id = kwargs.pop(\"repo_id\", save_directory.split(os.path.sep)[-1])\n            repo_id = self._create_repo(repo_id, **kwargs)\n            files_timestamps = self._get_files_timestamps(save_directory)\n\n        # Only save the model itself if we are using distributed training\n        model_to_save = unwrap_model(self)\n\n        # save the string version of dtype to the config, e.g. convert torch.float32 => \"float32\"\n        # we currently don't use this setting automatically, but may start to use with v5\n        dtype = get_parameter_dtype(model_to_save)\n        model_to_save.config.torch_dtype = str(dtype).split(\".\")[1]\n\n        # Attach architecture to the config\n        model_to_save.config.architectures = [model_to_save.__class__.__name__]\n\n        # Unset attn implementation so it can be set to another one when loading back\n        model_to_save.config._attn_implementation_autoset = False\n\n        # If we have a custom model, we copy the file defining it in the folder and set the attributes so it can be\n        # loaded from the Hub.\n        if self._auto_class is not None:\n            custom_object_save(self, save_directory, config=self.config)\n\n        # Save the config\n        if is_main_process:\n            if not _hf_peft_config_loaded:\n                # If the model config has set attributes that should be in the generation config, move them there.\n                misplaced_generation_parameters = model_to_save.config._get_non_default_generation_parameters()\n                if self.can_generate() and len(misplaced_generation_parameters) > 0:\n                    warnings.warn(\n                        \"Moving the following attributes in the config to the generation config: \"\n                        f\"{misplaced_generation_parameters}. You are seeing this warning because you've set \"\n                        \"generation parameters in the model config, as opposed to in the generation config.\",\n                        UserWarning,\n                    )\n                    for param_name, param_value in misplaced_generation_parameters.items():\n                        setattr(model_to_save.generation_config, param_name, param_value)\n                        setattr(model_to_save.config, param_name, None)\n\n                model_to_save.config.save_pretrained(save_directory)\n            if self.can_generate():\n                model_to_save.generation_config.save_pretrained(save_directory)\n\n            if _hf_peft_config_loaded:\n                logger.info(\n                    \"Detected adapters on the model, saving the model in the PEFT format, only adapter weights will be saved.\"\n                )\n                state_dict = model_to_save.get_adapter_state_dict()\n\n                if save_peft_format:\n                    logger.info(\n                        \"To match the expected format of the PEFT library, all keys of the state dict of adapters will be pre-pended with `base_model.model`.\"\n                    )\n                    peft_state_dict = {}\n                    for key, value in state_dict.items():\n                        peft_state_dict[f\"base_model.model.{key}\"] = value\n                    state_dict = peft_state_dict\n\n                active_adapter = self.active_adapters()\n\n                if len(active_adapter) > 1:\n                    raise ValueError(\n                        \"Multiple active adapters detected, saving multiple active adapters is not supported yet. You can save adapters separately one by one \"\n                        \"by iteratively calling `model.set_adapter(adapter_name)` then `model.save_pretrained(...)`\"\n                    )\n                active_adapter = active_adapter[0]\n\n                current_peft_config = self.peft_config[active_adapter]\n                current_peft_config.save_pretrained(save_directory)\n\n        # for offloaded modules\n        module_map = {}\n\n        # Save the model\n        if state_dict is None:\n            # if any model parameters are offloaded, make module map\n            if (\n                hasattr(self, \"hf_device_map\")\n                and len(set(self.hf_device_map.values())) > 1\n                and (\"cpu\" in self.hf_device_map.values() or \"disk\" in self.hf_device_map.values())\n            ):\n                warnings.warn(\n                    \"Attempting to save a model with offloaded modules. Ensure that unallocated cpu memory exceeds the `shard_size` (5GB default)\"\n                )\n                for name, module in model_to_save.named_modules():\n                    if name == \"\":\n                        continue\n                    module_state_dict = module.state_dict()\n\n                    for key in module_state_dict:\n                        module_map[name + f\".{key}\"] = module\n            state_dict = model_to_save.state_dict()\n\n        # Translate state_dict from smp to hf if saving with smp >= 1.10\n        if IS_SAGEMAKER_MP_POST_1_10:\n            for smp_to_hf, _ in smp.state.module_manager.translate_functions:\n                state_dict = smp_to_hf(state_dict)\n\n        # Handle the case where some state_dict keys shouldn't be saved\n        if self._keys_to_ignore_on_save is not None:\n            for ignore_key in self._keys_to_ignore_on_save:\n                if ignore_key in state_dict.keys():\n                    del state_dict[ignore_key]\n        if safe_serialization:\n            # Safetensors does not allow tensor aliasing.\n            # We're going to remove aliases before saving\n            ptrs = collections.defaultdict(list)\n            for name, tensor in state_dict.items():\n                # Sometimes in the state_dict we have non-tensor objects.\n                # e.g. in bitsandbytes we have some `str` objects in the state_dict\n                if isinstance(tensor, torch.Tensor):\n                    ptrs[id_tensor_storage(tensor)].append(name)\n                else:\n                    # In the non-tensor case, fall back to the pointer of the object itself\n                    ptrs[id(tensor)].append(name)\n\n            # These are all the pointers of shared tensors\n            if hasattr(self, \"hf_device_map\"):\n                # if the model has offloaded parameters, we must check using find_tied_parameters()\n                tied_params = find_tied_parameters(self)\n                if tied_params:\n                    tied_names = tied_params[0]\n                    shared_ptrs = {\n                        ptr: names for ptr, names in ptrs.items() if any(name in tied_names for name in names)\n                    }\n                else:\n                    shared_ptrs = {}\n            else:\n                shared_ptrs = {ptr: names for ptr, names in ptrs.items() if len(names) > 1}\n\n            # Recursively descend to find tied weight keys\n            _tied_weights_keys = _get_tied_weight_keys(self)\n            error_names = []\n            to_delete_names = set()\n            for names in shared_ptrs.values():\n                # Removing the keys which are declared as known duplicates on\n                # load. This allows to make sure the name which is kept is consistent.\n                if _tied_weights_keys is not None:\n                    found = 0\n                    for name in sorted(names):\n                        matches_pattern = any(re.search(pat, name) for pat in _tied_weights_keys)\n                        if matches_pattern and name in state_dict:\n                            found += 1\n                            if found < len(names):\n                                to_delete_names.add(name)\n            # We are entering a place where the weights and the transformers configuration do NOT match.\n            shared_names, disjoint_names = _find_disjoint(shared_ptrs.values(), state_dict)\n            # Those are actually tensor sharing but disjoint from each other, we can safely clone them\n            # Reloaded won't have the same property, but it shouldn't matter in any meaningful way.\n            for name in disjoint_names:\n                state_dict[name] = state_dict[name].clone()\n\n            # When not all duplicates have been cleaned, still remove those keys, but put a clear warning.\n            # If the link between tensors was done at runtime then `from_pretrained` will not get\n            # the key back leading to random tensor. A proper warning will be shown\n            # during reload (if applicable), but since the file is not necessarily compatible with\n            # the config, better show a proper warning.\n            shared_names, identical_names = _find_identical(shared_names, state_dict)\n            # delete tensors that have identical storage\n            for inames in identical_names:\n                known = inames.intersection(to_delete_names)\n                for name in known:\n                    del state_dict[name]\n                unknown = inames.difference(to_delete_names)\n                if len(unknown) > 1:\n                    error_names.append(unknown)\n\n            if shared_names:\n                error_names.append(set(shared_names))\n\n            if len(error_names) > 0:\n                raise RuntimeError(\n                    f\"The weights trying to be saved contained shared tensors {error_names} that are mismatching the transformers base configuration. Try saving using `safe_serialization=False` or remove this tensor sharing.\",\n                )\n\n        # Shard the model if it is too big.\n        if not _hf_peft_config_loaded:\n            weights_name = SAFE_WEIGHTS_NAME if safe_serialization else WEIGHTS_NAME\n            weights_name = _add_variant(weights_name, variant)\n        else:\n            weights_name = ADAPTER_SAFE_WEIGHTS_NAME if safe_serialization else ADAPTER_WEIGHTS_NAME\n\n        filename_pattern = weights_name.replace(\".bin\", \"{suffix}.bin\").replace(\".safetensors\", \"{suffix}.safetensors\")\n        state_dict_split = split_torch_state_dict_into_shards(\n            state_dict, filename_pattern=filename_pattern, max_shard_size=max_shard_size\n        )\n        # Save index if sharded\n        index = None\n        if state_dict_split.is_sharded:\n            index = {\n                \"metadata\": state_dict_split.metadata,\n                \"weight_map\": state_dict_split.tensor_to_filename,\n            }\n\n        # Clean the folder from a previous save\n        for filename in os.listdir(save_directory):\n            full_filename = os.path.join(save_directory, filename)\n            # If we have a shard file that is not going to be replaced, we delete it, but only from the main process\n            # in distributed settings to avoid race conditions.\n            weights_no_suffix = weights_name.replace(\".bin\", \"\").replace(\".safetensors\", \"\")\n\n            # make sure that file to be deleted matches format of sharded file, e.g. pytorch_model-00001-of-00005\n            filename_no_suffix = filename.replace(\".bin\", \"\").replace(\".safetensors\", \"\")\n            reg = re.compile(r\"(.*?)-\\d{5}-of-\\d{5}\")\n\n            if (\n                filename.startswith(weights_no_suffix)\n                and os.path.isfile(full_filename)\n                and filename not in state_dict_split.filename_to_tensors.keys()\n                and is_main_process\n                and reg.fullmatch(filename_no_suffix) is not None\n            ):\n                os.remove(full_filename)\n        # Save the model\n        filename_to_tensors = state_dict_split.filename_to_tensors.items()\n        if module_map:\n            filename_to_tensors = logging.tqdm(filename_to_tensors, desc=\"Saving checkpoint shards\")\n        for shard_file, tensors in filename_to_tensors:\n            shard = {tensor: state_dict[tensor].contiguous() for tensor in tensors}\n            # remake shard with onloaded parameters if necessary\n            if module_map:\n                if accelerate_version < version.parse(\"0.31\"):\n                    raise ImportError(\n                        f\"You need accelerate version to be greater or equal than 0.31 to save models with offloaded parameters. Detected version {accelerate_version}. \"\n                        f\"Please upgrade accelerate with `pip install -U accelerate`\"\n                    )\n                # init state_dict for this shard\n                shard_state_dict = {name: \"\" for name in shard}\n                for module_name in shard:\n                    module = module_map[module_name]\n                    # update state dict with onloaded parameters\n                    shard_state_dict = get_state_dict_from_offload(module, module_name, shard_state_dict)\n\n                # assign shard to be the completed state dict\n                shard = shard_state_dict\n                del shard_state_dict\n                gc.collect()\n\n            if safe_serialization:\n                # At some point we will need to deal better with save_function (used for TPU and other distributed\n                # joyfulness), but for now this enough.\n                safe_save_file(shard, os.path.join(save_directory, shard_file), metadata={\"format\": \"pt\"})\n            else:\n                save_function(shard, os.path.join(save_directory, shard_file))\n\n        if index is None:\n            path_to_weights = os.path.join(save_directory, weights_name)\n            logger.info(f\"Model weights saved in {path_to_weights}\")\n        else:\n            save_index_file = SAFE_WEIGHTS_INDEX_NAME if safe_serialization else WEIGHTS_INDEX_NAME\n            save_index_file = os.path.join(save_directory, _add_variant(save_index_file, variant))\n            # Save the index as well\n            with open(save_index_file, \"w\", encoding=\"utf-8\") as f:\n                content = json.dumps(index, indent=2, sort_keys=True) + \"\\n\"\n                f.write(content)\n            logger.info(\n                f\"The model is bigger than the maximum size per checkpoint ({max_shard_size}) and is going to be \"\n                f\"split in {len(state_dict_split.filename_to_tensors)} checkpoint shards. You can find where each parameters has been saved in the \"\n                f\"index located at {save_index_file}.\"\n            )\n\n        if push_to_hub:\n            # Eventually create an empty model card\n            model_card = create_and_tag_model_card(\n                repo_id, self.model_tags, token=token, ignore_metadata_errors=ignore_metadata_errors\n            )\n\n            # Update model card if needed:\n            model_card.save(os.path.join(save_directory, \"README.md\"))\n\n            self._upload_modified_files(\n                save_directory,\n                repo_id,\n                files_timestamps,\n                commit_message=commit_message,\n                token=token,\n            )\n\n    @wraps(PushToHubMixin.push_to_hub)\n    def push_to_hub(self, *args, **kwargs):\n        tags = self.model_tags if self.model_tags is not None else []\n\n        tags_kwargs = kwargs.get(\"tags\", [])\n        if isinstance(tags_kwargs, str):\n            tags_kwargs = [tags_kwargs]\n\n        for tag in tags_kwargs:\n            if tag not in tags:\n                tags.append(tag)\n\n        if tags:\n            kwargs[\"tags\"] = tags\n        return super().push_to_hub(*args, **kwargs)\n\n    def get_memory_footprint(self, return_buffers=True):\n        r\"\"\"\n        Get the memory footprint of a model. This will return the memory footprint of the current model in bytes.\n        Useful to benchmark the memory footprint of the current model and design some tests. Solution inspired from the\n        PyTorch discussions: https://discuss.pytorch.org/t/gpu-memory-that-model-uses/56822/2\n\n        Arguments:\n            return_buffers (`bool`, *optional*, defaults to `True`):\n                Whether to return the size of the buffer tensors in the computation of the memory footprint. Buffers\n                are tensors that do not require gradients and not registered as parameters. E.g. mean and std in batch\n                norm layers. Please see: https://discuss.pytorch.org/t/what-pytorch-means-by-buffers/120266/2\n        \"\"\"\n        mem = sum([param.nelement() * param.element_size() for param in self.parameters()])\n        if return_buffers:\n            mem_bufs = sum([buf.nelement() * buf.element_size() for buf in self.buffers()])\n            mem = mem + mem_bufs\n        return mem\n\n    @wraps(torch.nn.Module.cuda)\n    def cuda(self, *args, **kwargs):\n        if getattr(self, \"quantization_method\", None) == QuantizationMethod.HQQ:\n            raise ValueError(\"`.cuda` is not supported for HQQ-quantized models.\")\n        # Checks if the model has been loaded in 4-bit or 8-bit with BNB\n        if getattr(self, \"quantization_method\", None) == QuantizationMethod.BITS_AND_BYTES:\n            if getattr(self, \"is_loaded_in_8bit\", False):\n                raise ValueError(\n                    \"Calling `cuda()` is not supported for `8-bit` quantized models. \"\n                    \" Please use the model as it is, since the model has already been set to the correct devices.\"\n                )\n            elif version.parse(importlib.metadata.version(\"bitsandbytes\")) < version.parse(\"0.43.2\"):\n                raise ValueError(\n                    \"Calling `cuda()` is not supported for `4-bit` quantized models with the installed version of bitsandbytes. \"\n                    f\"The current device is `{self.device}`. If you intended to move the model, please install bitsandbytes >= 0.43.2.\"\n                )\n        else:\n            return super().cuda(*args, **kwargs)\n\n    @wraps(torch.nn.Module.to)\n    def to(self, *args, **kwargs):\n        # For BNB/GPTQ models, we prevent users from casting the model to another dtype to restrict unwanted behaviours.\n        # the correct API should be to load the model with the desired dtype directly through `from_pretrained`.\n        dtype_present_in_args = \"dtype\" in kwargs\n\n        if not dtype_present_in_args:\n            for arg in args:\n                if isinstance(arg, torch.dtype):\n                    dtype_present_in_args = True\n                    break\n\n        if getattr(self, \"quantization_method\", None) == QuantizationMethod.HQQ:\n            raise ValueError(\"`.to` is not supported for HQQ-quantized models.\")\n        # Checks if the model has been loaded in 4-bit or 8-bit with BNB\n        if getattr(self, \"quantization_method\", None) == QuantizationMethod.BITS_AND_BYTES:\n            if dtype_present_in_args:\n                raise ValueError(\n                    \"You cannot cast a bitsandbytes model in a new `dtype`. Make sure to load the model using `from_pretrained` using the\"\n                    \" desired `dtype` by passing the correct `torch_dtype` argument.\"\n                )\n\n            if getattr(self, \"is_loaded_in_8bit\", False):\n                raise ValueError(\n                    \"`.to` is not supported for `8-bit` bitsandbytes models. Please use the model as it is, since the\"\n                    \" model has already been set to the correct devices and casted to the correct `dtype`.\"\n                )\n            elif version.parse(importlib.metadata.version(\"bitsandbytes\")) < version.parse(\"0.43.2\"):\n                raise ValueError(\n                    \"Calling `to()` is not supported for `4-bit` quantized models with the installed version of bitsandbytes. \"\n                    f\"The current device is `{self.device}`. If you intended to move the model, please install bitsandbytes >= 0.43.2.\"\n                )\n        elif getattr(self, \"quantization_method\", None) == QuantizationMethod.GPTQ:\n            if dtype_present_in_args:\n                raise ValueError(\n                    \"You cannot cast a GPTQ model in a new `dtype`. Make sure to load the model using `from_pretrained` using the desired\"\n                    \" `dtype` by passing the correct `torch_dtype` argument.\"\n                )\n        return super().to(*args, **kwargs)\n\n    def half(self, *args):\n        # Checks if the model is quantized\n        if getattr(self, \"is_quantized\", False):\n            raise ValueError(\n                \"`.half()` is not supported for quantized model. Please use the model as it is, since the\"\n                \" model has already been casted to the correct `dtype`.\"\n            )\n        else:\n            return super().half(*args)\n\n    def float(self, *args):\n        # Checks if the model is quantized\n        if getattr(self, \"is_quantized\", False):\n            raise ValueError(\n                \"`.float()` is not supported for quantized model. Please use the model as it is, since the\"\n                \" model has already been casted to the correct `dtype`.\"\n            )\n        else:\n            return super().float(*args)\n\n    @classmethod\n    def from_pretrained(\n        cls,\n        pretrained_model_name_or_path: Optional[Union[str, os.PathLike]],\n        *model_args,\n        config: Optional[Union[PretrainedConfig, str, os.PathLike]] = None,\n        cache_dir: Optional[Union[str, os.PathLike]] = None,\n        ignore_mismatched_sizes: bool = False,\n        force_download: bool = False,\n        local_files_only: bool = False,\n        token: Optional[Union[str, bool]] = None,\n        revision: str = \"main\",\n        use_safetensors: bool = None,\n        weights_only: bool = True,\n        **kwargs,\n    ) -> \"PreTrainedModel\":\n        r\"\"\"\n        Instantiate a pretrained pytorch model from a pre-trained model configuration.\n\n        The model is set in evaluation mode by default using `model.eval()` (Dropout modules are deactivated). To train\n        the model, you should first set it back in training mode with `model.train()`.\n\n        The warning *Weights from XXX not initialized from pretrained model* means that the weights of XXX do not come\n        pretrained with the rest of the model. It is up to you to train those weights with a downstream fine-tuning\n        task.\n\n        The warning *Weights from XXX not used in YYY* means that the layer XXX is not used by YYY, therefore those\n        weights are discarded.\n\n        If model weights are the same precision as the base model (and is a supported model), weights will be lazily loaded\n        in using the `meta` device and brought into memory once an input is passed through that layer regardless of\n        `low_cpu_mem_usage`.\n\n        Parameters:\n            pretrained_model_name_or_path (`str` or `os.PathLike`, *optional*):\n                Can be either:\n\n                    - A string, the *model id* of a pretrained model hosted inside a model repo on huggingface.co.\n                    - A path to a *directory* containing model weights saved using\n                      [`~PreTrainedModel.save_pretrained`], e.g., `./my_model_directory/`.\n                    - A path or url to a *tensorflow index checkpoint file* (e.g, `./tf_model/model.ckpt.index`). In\n                      this case, `from_tf` should be set to `True` and a configuration object should be provided as\n                      `config` argument. This loading path is slower than converting the TensorFlow checkpoint in a\n                      PyTorch model using the provided conversion scripts and loading the PyTorch model afterwards.\n                    - A path or url to a model folder containing a *flax checkpoint file* in *.msgpack* format (e.g,\n                      `./flax_model/` containing `flax_model.msgpack`). In this case, `from_flax` should be set to\n                      `True`.\n                    - `None` if you are both providing the configuration and state dictionary (resp. with keyword\n                      arguments `config` and `state_dict`).\n            model_args (sequence of positional arguments, *optional*):\n                All remaining positional arguments will be passed to the underlying model's `__init__` method.\n            config (`Union[PretrainedConfig, str, os.PathLike]`, *optional*):\n                Can be either:\n\n                    - an instance of a class derived from [`PretrainedConfig`],\n                    - a string or path valid as input to [`~PretrainedConfig.from_pretrained`].\n\n                Configuration for the model to use instead of an automatically loaded configuration. Configuration can\n                be automatically loaded when:\n\n                    - The model is a model provided by the library (loaded with the *model id* string of a pretrained\n                      model).\n                    - The model was saved using [`~PreTrainedModel.save_pretrained`] and is reloaded by supplying the\n                      save directory.\n                    - The model is loaded by supplying a local directory as `pretrained_model_name_or_path` and a\n                      configuration JSON file named *config.json* is found in the directory.\n            state_dict (`Dict[str, torch.Tensor]`, *optional*):\n                A state dictionary to use instead of a state dictionary loaded from saved weights file.\n\n                This option can be used if you want to create a model from a pretrained configuration but load your own\n                weights. In this case though, you should check if using [`~PreTrainedModel.save_pretrained`] and\n                [`~PreTrainedModel.from_pretrained`] is not a simpler option.\n            cache_dir (`Union[str, os.PathLike]`, *optional*):\n                Path to a directory in which a downloaded pretrained model configuration should be cached if the\n                standard cache should not be used.\n            from_tf (`bool`, *optional*, defaults to `False`):\n                Load the model weights from a TensorFlow checkpoint save file (see docstring of\n                `pretrained_model_name_or_path` argument).\n            from_flax (`bool`, *optional*, defaults to `False`):\n                Load the model weights from a Flax checkpoint save file (see docstring of\n                `pretrained_model_name_or_path` argument).\n            ignore_mismatched_sizes (`bool`, *optional*, defaults to `False`):\n                Whether or not to raise an error if some of the weights from the checkpoint do not have the same size\n                as the weights of the model (if for instance, you are instantiating a model with 10 labels from a\n                checkpoint with 3 labels).\n            force_download (`bool`, *optional*, defaults to `False`):\n                Whether or not to force the (re-)download of the model weights and configuration files, overriding the\n                cached versions if they exist.\n            resume_download:\n                Deprecated and ignored. All downloads are now resumed by default when possible.\n                Will be removed in v5 of Transformers.\n            proxies (`Dict[str, str]`, *optional*):\n                A dictionary of proxy servers to use by protocol or endpoint, e.g., `{'http': 'foo.bar:3128',\n                'http://hostname': 'foo.bar:4012'}`. The proxies are used on each request.\n            output_loading_info(`bool`, *optional*, defaults to `False`):\n                Whether ot not to also return a dictionary containing missing keys, unexpected keys and error messages.\n            local_files_only(`bool`, *optional*, defaults to `False`):\n                Whether or not to only look at local files (i.e., do not try to download the model).\n            token (`str` or `bool`, *optional*):\n                The token to use as HTTP bearer authorization for remote files. If `True`, or not specified, will use\n                the token generated when running `huggingface-cli login` (stored in `~/.huggingface`).\n            revision (`str`, *optional*, defaults to `\"main\"`):\n                The specific model version to use. It can be a branch name, a tag name, or a commit id, since we use a\n                git-based system for storing models and other artifacts on huggingface.co, so `revision` can be any\n                identifier allowed by git.\n\n                <Tip>\n\n                To test a pull request you made on the Hub, you can pass `revision=\"refs/pr/<pr_number>\"`.\n\n                </Tip>\n\n            mirror (`str`, *optional*):\n                Mirror source to accelerate downloads in China. If you are from China and have an accessibility\n                problem, you can set this option to resolve it. Note that we do not guarantee the timeliness or safety.\n                Please refer to the mirror site for more information.\n            _fast_init(`bool`, *optional*, defaults to `True`):\n                Whether or not to disable fast initialization.\n\n                <Tip warning={true}>\n\n                One should only disable *_fast_init* to ensure backwards compatibility with `transformers.__version__ <\n                4.6.0` for seeded model initialization. This argument will be removed at the next major version. See\n                [pull request 11471](https://github.com/huggingface/transformers/pull/11471) for more information.\n\n                </Tip>\n            attn_implementation (`str`, *optional*):\n                The attention implementation to use in the model (if relevant). Can be any of `\"eager\"` (manual implementation of the attention), `\"sdpa\"` (using [`F.scaled_dot_product_attention`](https://pytorch.org/docs/master/generated/torch.nn.functional.scaled_dot_product_attention.html)), or `\"flash_attention_2\"` (using [Dao-AILab/flash-attention](https://github.com/Dao-AILab/flash-attention)). By default, if available, SDPA will be used for torch>=2.1.1. The default is otherwise the manual `\"eager\"` implementation.\n\n            > Parameters for big model inference\n\n            low_cpu_mem_usage(`bool`, *optional*):\n                Tries not to use more than 1x model size in CPU memory (including peak memory) while loading the model.\n                Generally should be combined with a `device_map` (such as `\"auto\"`) for best results.\n                This is an experimental feature and a subject to change at any moment.\n                </Tip>\n                    If the model weights are in the same precision as the model loaded in, `low_cpu_mem_usage` (without\n                    `device_map`) is redundant and will not provide any benefit in regards to CPU memory usage. However,\n                    this should still be enabled if you are passing in a `device_map`.\n                </Tip>\n            torch_dtype (`str` or `torch.dtype`, *optional*):\n                Override the default `torch.dtype` and load the model under a specific `dtype`. The different options\n                are:\n\n                1. `torch.float16` or `torch.bfloat16` or `torch.float`: load in a specified\n                  `dtype`, ignoring the model's `config.torch_dtype` if one exists. If not specified\n                  - the model will get loaded in `torch.float` (fp32).\n\n                2. `\"auto\"` - A `torch_dtype` entry in the `config.json` file of the model will be\n                  attempted to be used. If this entry isn't found then next check the `dtype` of the first weight in\n                  the checkpoint that's of a floating point type and use that as `dtype`. This will load the model\n                  using the `dtype` it was saved in at the end of the training. It can't be used as an indicator of how\n                  the model was trained. Since it could be trained in one of half precision dtypes, but saved in fp32.\n\n                3. A string that is a valid `torch.dtype`. E.g. \"float32\" loads the model in `torch.float32`, \"float16\" loads in `torch.float16` etc.\n\n                <Tip>\n\n                For some models the `dtype` they were trained in is unknown - you may try to check the model's paper or\n                reach out to the authors and ask them to add this information to the model's card and to insert the\n                `torch_dtype` entry in `config.json` on the hub.\n\n                </Tip>\n\n            device_map (`str` or `Dict[str, Union[int, str, torch.device]]` or `int` or `torch.device`, *optional*):\n                A map that specifies where each submodule should go. It doesn't need to be refined to each\n                parameter/buffer name, once a given module name is inside, every submodule of it will be sent to the\n                same device. If we only pass the device (*e.g.*, `\"cpu\"`, `\"cuda:1\"`, `\"mps\"`, or a GPU ordinal rank\n                like `1`) on which the model will be allocated, the device map will map the entire model to this\n                device. Passing `device_map = 0` means put the whole model on GPU 0.\n\n                To have Accelerate compute the most optimized `device_map` automatically, set `device_map=\"auto\"`. For\n                more information about each option see [designing a device\n                map](https://hf.co/docs/accelerate/main/en/usage_guides/big_modeling#designing-a-device-map).\n            max_memory (`Dict`, *optional*):\n                A dictionary device identifier to maximum memory. Will default to the maximum memory available for each\n                GPU and the available CPU RAM if unset.\n            offload_folder (`str` or `os.PathLike`, *optional*):\n                If the `device_map` contains any value `\"disk\"`, the folder where we will offload weights.\n            offload_state_dict (`bool`, *optional*):\n                If `True`, will temporarily offload the CPU state dict to the hard drive to avoid getting out of CPU\n                RAM if the weight of the CPU state dict + the biggest shard of the checkpoint does not fit. Defaults to\n                `True` when there is some disk offload.\n            offload_buffers (`bool`, *optional*):\n                Whether or not to offload the buffers with the model parameters.\n            quantization_config (`Union[QuantizationConfigMixin,Dict]`, *optional*):\n                A dictionary of configuration parameters or a QuantizationConfigMixin object for quantization (e.g\n                bitsandbytes, gptq). There may be other quantization-related kwargs, including `load_in_4bit` and\n                `load_in_8bit`, which are parsed by QuantizationConfigParser. Supported only for bitsandbytes\n                quantizations and not preferred. consider inserting all such arguments into quantization_config\n                instead.\n            subfolder (`str`, *optional*, defaults to `\"\"`):\n                In case the relevant files are located inside a subfolder of the model repo on huggingface.co, you can\n                specify the folder name here.\n            variant (`str`, *optional*):\n                If specified load weights from `variant` filename, *e.g.* pytorch_model.<variant>.bin. `variant` is\n                ignored when using `from_tf` or `from_flax`.\n            use_safetensors (`bool`, *optional*, defaults to `None`):\n                Whether or not to use `safetensors` checkpoints. Defaults to `None`. If not specified and `safetensors`\n                is not installed, it will be set to `False`.\n\n            weights_only (`bool`, *optional*, defaults to `True`):\n                Indicates whether unpickler should be restricted to loading only tensors, primitive types,\n                dictionaries and any types added via torch.serialization.add_safe_globals().\n                When set to False, we can load wrapper tensor subclass weights.\n\n            kwargs (remaining dictionary of keyword arguments, *optional*):\n                Can be used to update the configuration object (after it being loaded) and initiate the model (e.g.,\n                `output_attentions=True`). Behaves differently depending on whether a `config` is provided or\n                automatically loaded:\n\n                    - If a configuration is provided with `config`, `**kwargs` will be directly passed to the\n                      underlying model's `__init__` method (we assume all relevant updates to the configuration have\n                      already been done)\n                    - If a configuration is not provided, `kwargs` will be first passed to the configuration class\n                      initialization function ([`~PretrainedConfig.from_pretrained`]). Each key of `kwargs` that\n                      corresponds to a configuration attribute will be used to override said attribute with the\n                      supplied `kwargs` value. Remaining keys that do not correspond to any configuration attribute\n                      will be passed to the underlying model's `__init__` function.\n\n        <Tip>\n\n        Activate the special [\"offline-mode\"](https://huggingface.co/transformers/installation.html#offline-mode) to\n        use this method in a firewalled environment.\n\n        </Tip>\n\n        Examples:\n\n        ```python\n        >>> from transformers import BertConfig, BertModel\n\n        >>> # Download model and configuration from huggingface.co and cache.\n        >>> model = BertModel.from_pretrained(\"google-bert/bert-base-uncased\")\n        >>> # Model was saved using *save_pretrained('./test/saved_model/')* (for example purposes, not runnable).\n        >>> model = BertModel.from_pretrained(\"./test/saved_model/\")\n        >>> # Update configuration during loading.\n        >>> model = BertModel.from_pretrained(\"google-bert/bert-base-uncased\", output_attentions=True)\n        >>> assert model.config.output_attentions == True\n        >>> # Loading from a TF checkpoint file instead of a PyTorch model (slower, for example purposes, not runnable).\n        >>> config = BertConfig.from_json_file(\"./tf_model/my_tf_model_config.json\")\n        >>> model = BertModel.from_pretrained(\"./tf_model/my_tf_checkpoint.ckpt.index\", from_tf=True, config=config)\n        >>> # Loading from a Flax checkpoint file instead of a PyTorch model (slower)\n        >>> model = BertModel.from_pretrained(\"google-bert/bert-base-uncased\", from_flax=True)\n        ```\n\n        * `low_cpu_mem_usage` algorithm:\n\n        This is an experimental function that loads the model using ~1x model size CPU memory\n\n        Here is how it works:\n\n        1. save which state_dict keys we have\n        2. drop state_dict before the model is created, since the latter takes 1x model size CPU memory\n        3. after the model has been instantiated switch to the meta device all params/buffers that\n        are going to be replaced from the loaded state_dict\n        4. load state_dict 2nd time\n        5. replace the params/buffers from the state_dict\n\n        Currently, it can't handle deepspeed ZeRO stage 3 and ignores loading errors\n\n        \"\"\"\n        state_dict = kwargs.pop(\"state_dict\", None)\n        from_tf = kwargs.pop(\"from_tf\", False)\n        from_flax = kwargs.pop(\"from_flax\", False)\n        resume_download = kwargs.pop(\"resume_download\", None)\n        proxies = kwargs.pop(\"proxies\", None)\n        output_loading_info = kwargs.pop(\"output_loading_info\", False)\n        use_auth_token = kwargs.pop(\"use_auth_token\", None)\n        trust_remote_code = kwargs.pop(\"trust_remote_code\", None)\n        _ = kwargs.pop(\"mirror\", None)\n        from_pipeline = kwargs.pop(\"_from_pipeline\", None)\n        from_auto_class = kwargs.pop(\"_from_auto\", False)\n        _fast_init = kwargs.pop(\"_fast_init\", True)\n        torch_dtype = kwargs.pop(\"torch_dtype\", None)\n        low_cpu_mem_usage = kwargs.pop(\"low_cpu_mem_usage\", None)\n        device_map = kwargs.pop(\"device_map\", None)\n        max_memory = kwargs.pop(\"max_memory\", None)\n        offload_folder = kwargs.pop(\"offload_folder\", None)\n        offload_state_dict = kwargs.pop(\"offload_state_dict\", False)\n        offload_buffers = kwargs.pop(\"offload_buffers\", False)\n        load_in_8bit = kwargs.pop(\"load_in_8bit\", False)\n        load_in_4bit = kwargs.pop(\"load_in_4bit\", False)\n        quantization_config = kwargs.pop(\"quantization_config\", None)\n        subfolder = kwargs.pop(\"subfolder\", \"\")\n        commit_hash = kwargs.pop(\"_commit_hash\", None)\n        variant = kwargs.pop(\"variant\", None)\n        adapter_kwargs = kwargs.pop(\"adapter_kwargs\", {})\n        adapter_name = kwargs.pop(\"adapter_name\", \"default\")\n        use_flash_attention_2 = kwargs.pop(\"use_flash_attention_2\", False)\n        generation_config = kwargs.pop(\"generation_config\", None)\n\n        gguf_file = kwargs.pop(\"gguf_file\", None)\n        # Cache path to the GGUF file\n        gguf_path = None\n\n        if is_fsdp_enabled():\n            low_cpu_mem_usage = True\n\n        if use_auth_token is not None:\n            warnings.warn(\n                \"The `use_auth_token` argument is deprecated and will be removed in v5 of Transformers. Please use `token` instead.\",\n                FutureWarning,\n            )\n            if token is not None:\n                raise ValueError(\n                    \"`token` and `use_auth_token` are both specified. Please set only the argument `token`.\"\n                )\n            token = use_auth_token\n\n        if token is not None and adapter_kwargs is not None and \"token\" not in adapter_kwargs:\n            adapter_kwargs[\"token\"] = token\n\n        if use_safetensors is None and not is_safetensors_available():\n            use_safetensors = False\n        if trust_remote_code is True:\n            logger.warning(\n                \"The argument `trust_remote_code` is to be used with Auto classes. It has no effect here and is\"\n                \" ignored.\"\n            )\n\n        if gguf_file is not None and not is_accelerate_available():\n            raise ValueError(\"accelerate is required when loading a GGUF file `pip install accelerate`.\")\n\n        if commit_hash is None:\n            if not isinstance(config, PretrainedConfig):\n                # We make a call to the config file first (which may be absent) to get the commit hash as soon as possible\n                resolved_config_file = cached_file(\n                    pretrained_model_name_or_path,\n                    CONFIG_NAME,\n                    cache_dir=cache_dir,\n                    force_download=force_download,\n                    resume_download=resume_download,\n                    proxies=proxies,\n                    local_files_only=local_files_only,\n                    token=token,\n                    revision=revision,\n                    subfolder=subfolder,\n                    _raise_exceptions_for_gated_repo=False,\n                    _raise_exceptions_for_missing_entries=False,\n                    _raise_exceptions_for_connection_errors=False,\n                )\n                commit_hash = extract_commit_hash(resolved_config_file, commit_hash)\n            else:\n                commit_hash = getattr(config, \"_commit_hash\", None)\n\n        if is_peft_available():\n            _adapter_model_path = adapter_kwargs.pop(\"_adapter_model_path\", None)\n\n            if _adapter_model_path is None:\n                _adapter_model_path = find_adapter_config_file(\n                    pretrained_model_name_or_path,\n                    cache_dir=cache_dir,\n                    force_download=force_download,\n                    resume_download=resume_download,\n                    proxies=proxies,\n                    local_files_only=local_files_only,\n                    _commit_hash=commit_hash,\n                    **adapter_kwargs,\n                )\n            if _adapter_model_path is not None and os.path.isfile(_adapter_model_path):\n                with open(_adapter_model_path, \"r\", encoding=\"utf-8\") as f:\n                    _adapter_model_path = pretrained_model_name_or_path\n                    pretrained_model_name_or_path = json.load(f)[\"base_model_name_or_path\"]\n        else:\n            _adapter_model_path = None\n\n        # change device_map into a map if we passed an int, a str or a torch.device\n        if isinstance(device_map, torch.device):\n            device_map = {\"\": device_map}\n        elif isinstance(device_map, str) and device_map not in [\"auto\", \"balanced\", \"balanced_low_0\", \"sequential\"]:\n            try:\n                device_map = {\"\": torch.device(device_map)}\n            except RuntimeError:\n                raise ValueError(\n                    \"When passing device_map as a string, the value needs to be a device name (e.g. cpu, cuda:0) or \"\n                    f\"'auto', 'balanced', 'balanced_low_0', 'sequential' but found {device_map}.\"\n                )\n        elif isinstance(device_map, int):\n            if device_map < 0:\n                raise ValueError(\n                    \"You can't pass device_map as a negative int. If you want to put the model on the cpu, pass device_map = 'cpu' \"\n                )\n            else:\n                device_map = {\"\": device_map}\n\n        if device_map is not None:\n            if low_cpu_mem_usage is None:\n                low_cpu_mem_usage = True\n            elif not low_cpu_mem_usage:\n                raise ValueError(\"Passing along a `device_map` requires `low_cpu_mem_usage=True`\")\n\n        if low_cpu_mem_usage:\n            if is_deepspeed_zero3_enabled():\n                raise ValueError(\n                    \"DeepSpeed Zero-3 is not compatible with `low_cpu_mem_usage=True` or with passing a `device_map`.\"\n                )\n            elif not is_accelerate_available():\n                raise ImportError(\n                    f\"Using `low_cpu_mem_usage=True` or a `device_map` requires Accelerate: `pip install 'accelerate>={ACCELERATE_MIN_VERSION}'`\"\n                )\n\n        # handling bnb config from kwargs, remove after `load_in_{4/8}bit` deprecation.\n        if load_in_4bit or load_in_8bit:\n            if quantization_config is not None:\n                raise ValueError(\n                    \"You can't pass `load_in_4bit`or `load_in_8bit` as a kwarg when passing \"\n                    \"`quantization_config` argument at the same time.\"\n                )\n\n            # preparing BitsAndBytesConfig from kwargs\n            config_dict = {k: v for k, v in kwargs.items() if k in inspect.signature(BitsAndBytesConfig).parameters}\n            config_dict = {**config_dict, \"load_in_4bit\": load_in_4bit, \"load_in_8bit\": load_in_8bit}\n            quantization_config, kwargs = BitsAndBytesConfig.from_dict(\n                config_dict=config_dict, return_unused_kwargs=True, **kwargs\n            )\n            logger.warning(\n                \"The `load_in_4bit` and `load_in_8bit` arguments are deprecated and will be removed in the future versions. \"\n                \"Please, pass a `BitsAndBytesConfig` object in `quantization_config` argument instead.\"\n            )\n\n        from_pt = not (from_tf | from_flax)\n\n        user_agent = {\"file_type\": \"model\", \"framework\": \"pytorch\", \"from_auto_class\": from_auto_class}\n        if from_pipeline is not None:\n            user_agent[\"using_pipeline\"] = from_pipeline\n\n        if is_offline_mode() and not local_files_only:\n            logger.info(\"Offline mode: forcing local_files_only=True\")\n            local_files_only = True\n\n        # Load config if we don't provide a configuration\n        if not isinstance(config, PretrainedConfig):\n            config_path = config if config is not None else pretrained_model_name_or_path\n            config, model_kwargs = cls.config_class.from_pretrained(\n                config_path,\n                cache_dir=cache_dir,\n                return_unused_kwargs=True,\n                force_download=force_download,\n                resume_download=resume_download,\n                proxies=proxies,\n                local_files_only=local_files_only,\n                token=token,\n                revision=revision,\n                subfolder=subfolder,\n                _from_auto=from_auto_class,\n                _from_pipeline=from_pipeline,\n                **kwargs,\n            )\n        else:\n            # In case one passes a config to `from_pretrained` + \"attn_implementation\"\n            # override the `_attn_implementation` attribute to `attn_implementation` of the kwargs\n            # Please see: https://github.com/huggingface/transformers/issues/28038\n\n            # Overwrite `config._attn_implementation` by the one from the kwargs --> in auto-factory\n            # we pop attn_implementation from the kwargs but this handles the case where users\n            # passes manually the config to `from_pretrained`.\n            config = copy.deepcopy(config)\n\n            kwarg_attn_imp = kwargs.pop(\"attn_implementation\", None)\n            if kwarg_attn_imp is not None:\n                config._attn_implementation = kwarg_attn_imp\n\n            model_kwargs = kwargs\n\n        pre_quantized = getattr(config, \"quantization_config\", None) is not None\n        if pre_quantized or quantization_config is not None:\n            if pre_quantized:\n                config.quantization_config = AutoHfQuantizer.merge_quantization_configs(\n                    config.quantization_config, quantization_config\n                )\n            else:\n                config.quantization_config = quantization_config\n            hf_quantizer = AutoHfQuantizer.from_config(config.quantization_config, pre_quantized=pre_quantized)\n        else:\n            hf_quantizer = None\n\n        if hf_quantizer is not None:\n            hf_quantizer.validate_environment(\n                torch_dtype=torch_dtype, from_tf=from_tf, from_flax=from_flax, device_map=device_map\n            )\n            torch_dtype = hf_quantizer.update_torch_dtype(torch_dtype)\n            device_map = hf_quantizer.update_device_map(device_map)\n\n            # In order to ensure popular quantization methods are supported. Can be disable with `disable_telemetry`\n            user_agent[\"quant\"] = hf_quantizer.quantization_config.quant_method.value\n\n            # Force-set to `True` for more mem efficiency\n            if low_cpu_mem_usage is None:\n                low_cpu_mem_usage = True\n                logger.warning(\"`low_cpu_mem_usage` was None, now default to True since model is quantized.\")\n        is_quantized = hf_quantizer is not None\n\n        # This variable will flag if we're loading a sharded checkpoint. In this case the archive file is just the\n        # index of the files.\n        is_sharded = False\n        sharded_metadata = None\n        # Load model\n        loading_info = None\n\n        # Keep in fp32 modules\n        keep_in_fp32_modules = None\n        use_keep_in_fp32_modules = False\n\n        if gguf_file is not None and hf_quantizer is not None:\n            raise ValueError(\n                \"You cannot combine Quantization and loading a model from a GGUF file, try again by making sure you did not passed a `quantization_config` or that you did not load a quantized model from the Hub.\"\n            )\n\n        if pretrained_model_name_or_path is not None and gguf_file is None:\n            pretrained_model_name_or_path = str(pretrained_model_name_or_path)\n            is_local = os.path.isdir(pretrained_model_name_or_path)\n            if is_local:\n                if from_tf and os.path.isfile(\n                    os.path.join(pretrained_model_name_or_path, subfolder, TF_WEIGHTS_NAME + \".index\")\n                ):\n                    # Load from a TF 1.0 checkpoint in priority if from_tf\n                    archive_file = os.path.join(pretrained_model_name_or_path, subfolder, TF_WEIGHTS_NAME + \".index\")\n                elif from_tf and os.path.isfile(\n                    os.path.join(pretrained_model_name_or_path, subfolder, TF2_WEIGHTS_NAME)\n                ):\n                    # Load from a TF 2.0 checkpoint in priority if from_tf\n                    archive_file = os.path.join(pretrained_model_name_or_path, subfolder, TF2_WEIGHTS_NAME)\n                elif from_flax and os.path.isfile(\n                    os.path.join(pretrained_model_name_or_path, subfolder, FLAX_WEIGHTS_NAME)\n                ):\n                    # Load from a Flax checkpoint in priority if from_flax\n                    archive_file = os.path.join(pretrained_model_name_or_path, subfolder, FLAX_WEIGHTS_NAME)\n                elif use_safetensors is not False and os.path.isfile(\n                    os.path.join(pretrained_model_name_or_path, subfolder, _add_variant(SAFE_WEIGHTS_NAME, variant))\n                ):\n                    # Load from a safetensors checkpoint\n                    archive_file = os.path.join(\n                        pretrained_model_name_or_path, subfolder, _add_variant(SAFE_WEIGHTS_NAME, variant)\n                    )\n                elif use_safetensors is not False and os.path.isfile(\n                    os.path.join(\n                        pretrained_model_name_or_path, subfolder, _add_variant(SAFE_WEIGHTS_INDEX_NAME, variant)\n                    )\n                ):\n                    # Load from a sharded safetensors checkpoint\n                    archive_file = os.path.join(\n                        pretrained_model_name_or_path, subfolder, _add_variant(SAFE_WEIGHTS_INDEX_NAME, variant)\n                    )\n                    is_sharded = True\n                elif not use_safetensors and os.path.isfile(\n                    os.path.join(pretrained_model_name_or_path, subfolder, _add_variant(WEIGHTS_NAME, variant))\n                ):\n                    # Load from a PyTorch checkpoint\n                    archive_file = os.path.join(\n                        pretrained_model_name_or_path, subfolder, _add_variant(WEIGHTS_NAME, variant)\n                    )\n                elif not use_safetensors and os.path.isfile(\n                    os.path.join(pretrained_model_name_or_path, subfolder, _add_variant(WEIGHTS_INDEX_NAME, variant))\n                ):\n                    # Load from a sharded PyTorch checkpoint\n                    archive_file = os.path.join(\n                        pretrained_model_name_or_path, subfolder, _add_variant(WEIGHTS_INDEX_NAME, variant)\n                    )\n                    is_sharded = True\n                # At this stage we don't have a weight file so we will raise an error.\n                elif not use_safetensors and (\n                    os.path.isfile(os.path.join(pretrained_model_name_or_path, subfolder, TF_WEIGHTS_NAME + \".index\"))\n                    or os.path.isfile(os.path.join(pretrained_model_name_or_path, subfolder, TF2_WEIGHTS_NAME))\n                ):\n                    raise EnvironmentError(\n                        f\"Error no file named {_add_variant(WEIGHTS_NAME, variant)} found in directory\"\n                        f\" {pretrained_model_name_or_path} but there is a file for TensorFlow weights. Use\"\n                        \" `from_tf=True` to load this model from those weights.\"\n                    )\n                elif not use_safetensors and os.path.isfile(\n                    os.path.join(pretrained_model_name_or_path, subfolder, FLAX_WEIGHTS_NAME)\n                ):\n                    raise EnvironmentError(\n                        f\"Error no file named {_add_variant(WEIGHTS_NAME, variant)} found in directory\"\n                        f\" {pretrained_model_name_or_path} but there is a file for Flax weights. Use `from_flax=True`\"\n                        \" to load this model from those weights.\"\n                    )\n                elif use_safetensors:\n                    raise EnvironmentError(\n                        f\"Error no file named {_add_variant(SAFE_WEIGHTS_NAME, variant)} found in directory\"\n                        f\" {pretrained_model_name_or_path}.\"\n                    )\n                else:\n                    raise EnvironmentError(\n                        f\"Error no file named {_add_variant(WEIGHTS_NAME, variant)}, {_add_variant(SAFE_WEIGHTS_NAME, variant)},\"\n                        f\" {TF2_WEIGHTS_NAME}, {TF_WEIGHTS_NAME + '.index'} or {FLAX_WEIGHTS_NAME} found in directory\"\n                        f\" {pretrained_model_name_or_path}.\"\n                    )\n            elif os.path.isfile(os.path.join(subfolder, pretrained_model_name_or_path)):\n                archive_file = pretrained_model_name_or_path\n                is_local = True\n            elif os.path.isfile(os.path.join(subfolder, pretrained_model_name_or_path + \".index\")):\n                if not from_tf:\n                    raise ValueError(\n                        f\"We found a TensorFlow checkpoint at {pretrained_model_name_or_path + '.index'}, please set \"\n                        \"from_tf to True to load from this checkpoint.\"\n                    )\n                archive_file = os.path.join(subfolder, pretrained_model_name_or_path + \".index\")\n                is_local = True\n            elif is_remote_url(pretrained_model_name_or_path):\n                filename = pretrained_model_name_or_path\n                resolved_archive_file = download_url(pretrained_model_name_or_path)\n            else:\n                # set correct filename\n                if from_tf:\n                    filename = TF2_WEIGHTS_NAME\n                elif from_flax:\n                    filename = FLAX_WEIGHTS_NAME\n                elif use_safetensors is not False:\n                    filename = _add_variant(SAFE_WEIGHTS_NAME, variant)\n                else:\n                    filename = _add_variant(WEIGHTS_NAME, variant)\n\n                try:\n                    # Load from URL or cache if already cached\n                    cached_file_kwargs = {\n                        \"cache_dir\": cache_dir,\n                        \"force_download\": force_download,\n                        \"proxies\": proxies,\n                        \"resume_download\": resume_download,\n                        \"local_files_only\": local_files_only,\n                        \"token\": token,\n                        \"user_agent\": user_agent,\n                        \"revision\": revision,\n                        \"subfolder\": subfolder,\n                        \"_raise_exceptions_for_gated_repo\": False,\n                        \"_raise_exceptions_for_missing_entries\": False,\n                        \"_commit_hash\": commit_hash,\n                    }\n                    resolved_archive_file = cached_file(pretrained_model_name_or_path, filename, **cached_file_kwargs)\n\n                    # Since we set _raise_exceptions_for_missing_entries=False, we don't get an exception but a None\n                    # result when internet is up, the repo and revision exist, but the file does not.\n                    if resolved_archive_file is None and filename == _add_variant(SAFE_WEIGHTS_NAME, variant):\n                        # Maybe the checkpoint is sharded, we try to grab the index name in this case.\n                        resolved_archive_file = cached_file(\n                            pretrained_model_name_or_path,\n                            _add_variant(SAFE_WEIGHTS_INDEX_NAME, variant),\n                            **cached_file_kwargs,\n                        )\n                        if resolved_archive_file is not None:\n                            is_sharded = True\n                        elif use_safetensors:\n                            if revision == \"main\":\n                                resolved_archive_file, revision, is_sharded = auto_conversion(\n                                    pretrained_model_name_or_path, **cached_file_kwargs\n                                )\n                            cached_file_kwargs[\"revision\"] = revision\n                            if resolved_archive_file is None:\n                                raise EnvironmentError(\n                                    f\"{pretrained_model_name_or_path} does not appear to have a file named\"\n                                    f\" {_add_variant(SAFE_WEIGHTS_NAME, variant)} or {_add_variant(SAFE_WEIGHTS_INDEX_NAME, variant)} \"\n                                    \"and thus cannot be loaded with `safetensors`. Please make sure that the model has \"\n                                    \"been saved with `safe_serialization=True` or do not set `use_safetensors=True`.\"\n                                )\n                        else:\n                            # This repo has no safetensors file of any kind, we switch to PyTorch.\n                            filename = _add_variant(WEIGHTS_NAME, variant)\n                            resolved_archive_file = cached_file(\n                                pretrained_model_name_or_path, filename, **cached_file_kwargs\n                            )\n                    if resolved_archive_file is None and filename == _add_variant(WEIGHTS_NAME, variant):\n                        # Maybe the checkpoint is sharded, we try to grab the index name in this case.\n                        resolved_archive_file = cached_file(\n                            pretrained_model_name_or_path,\n                            _add_variant(WEIGHTS_INDEX_NAME, variant),\n                            **cached_file_kwargs,\n                        )\n                        if resolved_archive_file is not None:\n                            is_sharded = True\n                    if not local_files_only and not is_offline_mode():\n                        if resolved_archive_file is not None:\n                            if filename in [WEIGHTS_NAME, WEIGHTS_INDEX_NAME]:\n                                # If the PyTorch file was found, check if there is a safetensors file on the repository\n                                # If there is no safetensors file on the repositories, start an auto conversion\n                                safe_weights_name = SAFE_WEIGHTS_INDEX_NAME if is_sharded else SAFE_WEIGHTS_NAME\n                                has_file_kwargs = {\n                                    \"revision\": revision,\n                                    \"proxies\": proxies,\n                                    \"token\": token,\n                                    \"cache_dir\": cache_dir,\n                                    \"local_files_only\": local_files_only,\n                                }\n                                cached_file_kwargs = {\n                                    \"cache_dir\": cache_dir,\n                                    \"force_download\": force_download,\n                                    \"resume_download\": resume_download,\n                                    \"local_files_only\": local_files_only,\n                                    \"user_agent\": user_agent,\n                                    \"subfolder\": subfolder,\n                                    \"_raise_exceptions_for_gated_repo\": False,\n                                    \"_raise_exceptions_for_missing_entries\": False,\n                                    \"_commit_hash\": commit_hash,\n                                    **has_file_kwargs,\n                                }\n                                if not has_file(pretrained_model_name_or_path, safe_weights_name, **has_file_kwargs):\n                                    Thread(\n                                        target=auto_conversion,\n                                        args=(pretrained_model_name_or_path,),\n                                        kwargs={\"ignore_errors_during_conversion\": True, **cached_file_kwargs},\n                                        name=\"Thread-autoconversion\",\n                                    ).start()\n                        else:\n                            # Otherwise, no PyTorch file was found, maybe there is a TF or Flax model file.\n                            # We try those to give a helpful error message.\n                            has_file_kwargs = {\n                                \"revision\": revision,\n                                \"proxies\": proxies,\n                                \"token\": token,\n                                \"cache_dir\": cache_dir,\n                                \"local_files_only\": local_files_only,\n                            }\n                            if has_file(pretrained_model_name_or_path, TF2_WEIGHTS_NAME, **has_file_kwargs):\n                                raise EnvironmentError(\n                                    f\"{pretrained_model_name_or_path} does not appear to have a file named\"\n                                    f\" {_add_variant(WEIGHTS_NAME, variant)} but there is a file for TensorFlow weights.\"\n                                    \" Use `from_tf=True` to load this model from those weights.\"\n                                )\n                            elif has_file(pretrained_model_name_or_path, FLAX_WEIGHTS_NAME, **has_file_kwargs):\n                                raise EnvironmentError(\n                                    f\"{pretrained_model_name_or_path} does not appear to have a file named\"\n                                    f\" {_add_variant(WEIGHTS_NAME, variant)} but there is a file for Flax weights. Use\"\n                                    \" `from_flax=True` to load this model from those weights.\"\n                                )\n                            elif variant is not None and has_file(\n                                pretrained_model_name_or_path, WEIGHTS_NAME, **has_file_kwargs\n                            ):\n                                raise EnvironmentError(\n                                    f\"{pretrained_model_name_or_path} does not appear to have a file named\"\n                                    f\" {_add_variant(WEIGHTS_NAME, variant)} but there is a file without the variant\"\n                                    f\" {variant}. Use `variant=None` to load this model from those weights.\"\n                                )\n                            else:\n                                raise EnvironmentError(\n                                    f\"{pretrained_model_name_or_path} does not appear to have a file named\"\n                                    f\" {_add_variant(WEIGHTS_NAME, variant)}, {_add_variant(SAFE_WEIGHTS_NAME, variant)},\"\n                                    f\" {TF2_WEIGHTS_NAME}, {TF_WEIGHTS_NAME} or {FLAX_WEIGHTS_NAME}.\"\n                                )\n\n                except EnvironmentError:\n                    # Raise any environment error raise by `cached_file`. It will have a helpful error message adapted\n                    # to the original exception.\n                    raise\n                except Exception as e:\n                    # For any other exception, we throw a generic error.\n                    raise EnvironmentError(\n                        f\"Can't load the model for '{pretrained_model_name_or_path}'. If you were trying to load it\"\n                        \" from 'https://huggingface.co/models', make sure you don't have a local directory with the\"\n                        f\" same name. Otherwise, make sure '{pretrained_model_name_or_path}' is the correct path to a\"\n                        f\" directory containing a file named {_add_variant(WEIGHTS_NAME, variant)},\"\n                        f\" {TF2_WEIGHTS_NAME}, {TF_WEIGHTS_NAME} or {FLAX_WEIGHTS_NAME}.\"\n                    ) from e\n\n            if is_local:\n                logger.info(f\"loading weights file {archive_file}\")\n                resolved_archive_file = archive_file\n            else:\n                logger.info(f\"loading weights file {filename} from cache at {resolved_archive_file}\")\n        elif gguf_file:\n            from transformers.modeling_gguf_pytorch_utils import load_gguf_checkpoint\n\n            # Case 1: the GGUF file is present locally\n            if os.path.isfile(gguf_file):\n                gguf_path = gguf_file\n            # Case 2: The GGUF path is a location on the Hub\n            # Load from URL or cache if already cached\n            else:\n                cached_file_kwargs = {\n                    \"cache_dir\": cache_dir,\n                    \"force_download\": force_download,\n                    \"proxies\": proxies,\n                    \"resume_download\": resume_download,\n                    \"local_files_only\": local_files_only,\n                    \"token\": token,\n                    \"user_agent\": user_agent,\n                    \"revision\": revision,\n                    \"subfolder\": subfolder,\n                    \"_raise_exceptions_for_gated_repo\": False,\n                    \"_raise_exceptions_for_missing_entries\": False,\n                    \"_commit_hash\": commit_hash,\n                }\n\n                gguf_path = cached_file(pretrained_model_name_or_path, gguf_file, **cached_file_kwargs)\n\n            state_dict = load_gguf_checkpoint(gguf_path, return_tensors=True)[\"tensors\"]\n\n            resolved_archive_file = None\n            is_sharded = False\n        else:\n            resolved_archive_file = None\n\n        # We'll need to download and cache each checkpoint shard if the checkpoint is sharded.\n        if is_sharded:\n            # resolved_archive_file becomes a list of files that point to the different checkpoint shards in this case.\n            resolved_archive_file, sharded_metadata = get_checkpoint_shard_files(\n                pretrained_model_name_or_path,\n                resolved_archive_file,\n                cache_dir=cache_dir,\n                force_download=force_download,\n                proxies=proxies,\n                resume_download=resume_download,\n                local_files_only=local_files_only,\n                token=token,\n                user_agent=user_agent,\n                revision=revision,\n                subfolder=subfolder,\n                _commit_hash=commit_hash,\n            )\n\n        if (\n            is_safetensors_available()\n            and isinstance(resolved_archive_file, str)\n            and resolved_archive_file.endswith(\".safetensors\")\n        ):\n            with safe_open(resolved_archive_file, framework=\"pt\") as f:\n                metadata = f.metadata()\n\n            if metadata.get(\"format\") == \"pt\":\n                pass\n            elif metadata.get(\"format\") == \"tf\":\n                from_tf = True\n                logger.info(\"A TensorFlow safetensors file is being loaded in a PyTorch model.\")\n            elif metadata.get(\"format\") == \"flax\":\n                from_flax = True\n                logger.info(\"A Flax safetensors file is being loaded in a PyTorch model.\")\n            elif metadata.get(\"format\") == \"mlx\":\n                # This is a mlx file, we assume weights are compatible with pt\n                pass\n            else:\n                raise ValueError(\n                    f\"Incompatible safetensors file. File metadata is not ['pt', 'tf', 'flax', 'mlx'] but {metadata.get('format')}\"\n                )\n\n        from_pt = not (from_tf | from_flax)\n\n        # load pt weights early so that we know which dtype to init the model under\n\n        if from_pt:\n            if not is_sharded and state_dict is None:\n                # Time to load the checkpoint\n                state_dict = load_state_dict(resolved_archive_file, weights_only=weights_only)\n\n            # set dtype to instantiate the model under:\n            # 1. If torch_dtype is not None, we use that dtype\n            # 2. If torch_dtype is \"auto\", we auto-detect dtype from the loaded state_dict, by checking its first\n            #    weights entry that is of a floating type - we assume all floating dtype weights are of the same dtype\n            # we also may have config.torch_dtype available, but we won't rely on it till v5\n            dtype_orig = None\n\n            if torch_dtype is not None:\n                if isinstance(torch_dtype, str):\n                    if torch_dtype == \"auto\":\n                        if hasattr(config, \"torch_dtype\") and config.torch_dtype is not None:\n                            torch_dtype = config.torch_dtype\n                            logger.info(f\"Will use torch_dtype={torch_dtype} as defined in model's config object\")\n                        else:\n                            if is_sharded and \"dtype\" in sharded_metadata:\n                                torch_dtype = sharded_metadata[\"dtype\"]\n                            elif not is_sharded:\n                                torch_dtype = get_state_dict_dtype(state_dict)\n                            else:\n                                one_state_dict = load_state_dict(resolved_archive_file[0], weights_only=weights_only)\n                                torch_dtype = get_state_dict_dtype(one_state_dict)\n                                del one_state_dict  # free CPU memory\n                            logger.info(\n                                \"Since the `torch_dtype` attribute can't be found in model's config object, \"\n                                \"will use torch_dtype={torch_dtype} as derived from model's weights\"\n                            )\n                    elif hasattr(torch, torch_dtype):\n                        torch_dtype = getattr(torch, torch_dtype)\n                    else:\n                        raise ValueError(\n                            f'`torch_dtype` can be one of: `torch.dtype`, `\"auto\"` or a string of a valid `torch.dtype`, but received {torch_dtype}'\n                        )\n                dtype_orig = cls._set_default_torch_dtype(torch_dtype)\n\n            # Check if `_keep_in_fp32_modules` is not None\n            use_keep_in_fp32_modules = (cls._keep_in_fp32_modules is not None) and (\n                (torch_dtype == torch.float16) or hasattr(hf_quantizer, \"use_keep_in_fp32_modules\")\n            )\n\n            if is_sharded:\n                loaded_state_dict_keys = sharded_metadata[\"all_checkpoint_keys\"]\n            else:\n                loaded_state_dict_keys = list(state_dict.keys())\n\n            if gguf_path is None and (low_cpu_mem_usage or (use_keep_in_fp32_modules and is_accelerate_available())):\n                # In case some weights need to be kept in float32 and accelerate is not installed,\n                # we later on want to take the path where state_dict is not None, that is the one\n                # that do not require accelerate.\n                state_dict = None\n\n        config.name_or_path = pretrained_model_name_or_path\n\n        # Instantiate model.\n        init_contexts = [no_init_weights(_enable=_fast_init)]\n\n        if is_deepspeed_zero3_enabled() and not is_quantized:\n            import deepspeed\n\n            logger.info(\"Detected DeepSpeed ZeRO-3: activating zero.init() for this model\")\n            init_contexts = [deepspeed.zero.Init(config_dict_or_path=deepspeed_config())] + init_contexts\n        elif low_cpu_mem_usage:\n            if not is_accelerate_available():\n                raise ImportError(\n                    f\"Using `low_cpu_mem_usage=True` or a `device_map` requires Accelerate: `pip install 'accelerate>={ACCELERATE_MIN_VERSION}'`\"\n                )\n            init_contexts.append(init_empty_weights())\n\n        config = copy.deepcopy(config)  # We do not want to modify the config inplace in from_pretrained.\n        if not getattr(config, \"_attn_implementation_autoset\", False):\n            config = cls._autoset_attn_implementation(\n                config, use_flash_attention_2=use_flash_attention_2, torch_dtype=torch_dtype, device_map=device_map\n            )\n\n        with ContextManagers(init_contexts):\n            # Let's make sure we don't run the init function of buffer modules\n            model = cls(config, *model_args, **model_kwargs)\n\n        # make sure we use the model's config since the __init__ call might have copied it\n        config = model.config\n\n        # Check first if we are `from_pt`\n        if use_keep_in_fp32_modules:\n            if is_accelerate_available() and not is_deepspeed_zero3_enabled():\n                low_cpu_mem_usage = True\n            keep_in_fp32_modules = model._keep_in_fp32_modules\n        else:\n            keep_in_fp32_modules = []\n\n        if hf_quantizer is not None:\n            hf_quantizer.preprocess_model(\n                model=model, device_map=device_map, keep_in_fp32_modules=keep_in_fp32_modules\n            )\n\n            # We store the original dtype for quantized models as we cannot easily retrieve it\n            # once the weights have been quantized\n            # Note that once you have loaded a quantized model, you can't change its dtype so this will\n            # remain a single source of truth\n            config._pre_quantization_dtype = torch_dtype\n\n        if isinstance(device_map, str):\n            special_dtypes = {}\n\n            if hf_quantizer is not None:\n                special_dtypes.update(hf_quantizer.get_special_dtypes_update(model, torch_dtype))\n\n            special_dtypes.update(\n                {\n                    name: torch.float32\n                    for name, _ in model.named_parameters()\n                    if any(m in name for m in keep_in_fp32_modules)\n                }\n            )\n\n            target_dtype = torch_dtype\n\n            if hf_quantizer is not None:\n                target_dtype = hf_quantizer.adjust_target_dtype(target_dtype)\n\n            no_split_modules = model._get_no_split_modules(device_map)\n            if device_map not in [\"auto\", \"balanced\", \"balanced_low_0\", \"sequential\"]:\n                raise ValueError(\n                    \"If passing a string for `device_map`, please choose 'auto', 'balanced', 'balanced_low_0' or \"\n                    \"'sequential'.\"\n                )\n\n            device_map_kwargs = {\"no_split_module_classes\": no_split_modules}\n            if \"special_dtypes\" in inspect.signature(infer_auto_device_map).parameters:\n                device_map_kwargs[\"special_dtypes\"] = special_dtypes\n            elif len(special_dtypes) > 0:\n                logger.warning(\n                    \"This model has some weights that should be kept in higher precision, you need to upgrade \"\n                    \"`accelerate` to properly deal with them (`pip install --upgrade accelerate`).\"\n                )\n            if device_map != \"sequential\":\n                max_memory = get_balanced_memory(\n                    model,\n                    dtype=target_dtype,\n                    low_zero=(device_map == \"balanced_low_0\"),\n                    max_memory=max_memory,\n                    **device_map_kwargs,\n                )\n            else:\n                max_memory = get_max_memory(max_memory)\n            if hf_quantizer is not None:\n                max_memory = hf_quantizer.adjust_max_memory(max_memory)\n            device_map_kwargs[\"max_memory\"] = max_memory\n\n            # Make sure tied weights are tied before creating the device map.\n            model.tie_weights()\n            device_map = infer_auto_device_map(model, dtype=target_dtype, **device_map_kwargs)\n\n            if hf_quantizer is not None:\n                hf_quantizer.validate_environment(device_map=device_map)\n\n        elif device_map is not None:\n            model.tie_weights()\n            tied_params = find_tied_parameters(model)\n            # check if we don't have tied param in different devices\n            check_tied_parameters_on_same_device(tied_params, device_map)\n\n        if from_tf:\n            if resolved_archive_file.endswith(\".index\"):\n                # Load from a TensorFlow 1.X checkpoint - provided by original authors\n                model = cls.load_tf_weights(model, config, resolved_archive_file[:-6])  # Remove the '.index'\n            else:\n                # Load from our TensorFlow 2.0 checkpoints\n                try:\n                    from transformers.modeling_tf_pytorch_utils import load_tf2_checkpoint_in_pytorch_model\n\n                    model, loading_info = load_tf2_checkpoint_in_pytorch_model(\n                        model, resolved_archive_file, allow_missing_keys=True, output_loading_info=True\n                    )\n                except ImportError:\n                    logger.error(\n                        \"Loading a TensorFlow model in PyTorch, requires both PyTorch and TensorFlow to be installed.\"\n                        \" Please see https://pytorch.org/ and https://www.tensorflow.org/install/ for installation\"\n                        \" instructions.\"\n                    )\n                    raise\n        elif from_flax:\n            try:\n                from transformers.modeling_flax_pytorch_utils import load_flax_checkpoint_in_pytorch_model\n\n                model = load_flax_checkpoint_in_pytorch_model(model, resolved_archive_file)\n            except ImportError:\n                logger.error(\n                    \"Loading a Flax model in PyTorch, requires both PyTorch and Flax to be installed. Please see\"\n                    \" https://pytorch.org/ and https://flax.readthedocs.io/en/latest/installation.html for\"\n                    \" installation instructions.\"\n                )\n                raise\n        elif from_pt:\n            # restore default dtype\n            if dtype_orig is not None:\n                torch.set_default_dtype(dtype_orig)\n\n            (\n                model,\n                missing_keys,\n                unexpected_keys,\n                mismatched_keys,\n                offload_index,\n                error_msgs,\n            ) = cls._load_pretrained_model(\n                model,\n                state_dict,\n                loaded_state_dict_keys,  # XXX: rename?\n                resolved_archive_file,\n                pretrained_model_name_or_path,\n                ignore_mismatched_sizes=ignore_mismatched_sizes,\n                sharded_metadata=sharded_metadata,\n                _fast_init=_fast_init,\n                low_cpu_mem_usage=low_cpu_mem_usage,\n                device_map=device_map,\n                offload_folder=offload_folder,\n                offload_state_dict=offload_state_dict,\n                dtype=torch_dtype,\n                hf_quantizer=hf_quantizer,\n                keep_in_fp32_modules=keep_in_fp32_modules,\n                gguf_path=gguf_path,\n                weights_only=weights_only,\n            )\n\n        # make sure token embedding weights are still tied if needed\n        model.tie_weights()\n\n        # Set model in evaluation mode to deactivate DropOut modules by default\n        model.eval()\n\n        # If it is a model with generation capabilities, attempt to load the generation config\n        if model.can_generate() and generation_config is not None:\n            logger.info(\"The user-defined `generation_config` will be used to override the default generation config.\")\n            model.generation_config = model.generation_config.from_dict(generation_config.to_dict())\n        elif model.can_generate() and pretrained_model_name_or_path is not None:\n            try:\n                model.generation_config = GenerationConfig.from_pretrained(\n                    pretrained_model_name_or_path,\n                    cache_dir=cache_dir,\n                    force_download=force_download,\n                    resume_download=resume_download,\n                    proxies=proxies,\n                    local_files_only=local_files_only,\n                    token=token,\n                    revision=revision,\n                    subfolder=subfolder,\n                    _from_auto=from_auto_class,\n                    _from_pipeline=from_pipeline,\n                    **kwargs,\n                )\n            except OSError:\n                logger.info(\n                    \"Generation config file not found, using a generation config created from the model config.\"\n                )\n                pass\n\n        # Dispatch model with hooks on all devices if necessary\n        if device_map is not None:\n            device_map_kwargs = {\n                \"device_map\": device_map,\n                \"offload_dir\": offload_folder,\n                \"offload_index\": offload_index,\n                \"offload_buffers\": offload_buffers,\n            }\n            if \"skip_keys\" in inspect.signature(dispatch_model).parameters:\n                device_map_kwargs[\"skip_keys\"] = model._skip_keys_device_placement\n            # For HQQ method we force-set the hooks for single GPU envs\n            if (\n                \"force_hooks\" in inspect.signature(dispatch_model).parameters\n                and hf_quantizer is not None\n                and hf_quantizer.quantization_config.quant_method == QuantizationMethod.HQQ\n            ):\n                device_map_kwargs[\"force_hooks\"] = True\n            if (\n                hf_quantizer is not None\n                and hf_quantizer.quantization_config.quant_method == QuantizationMethod.FBGEMM_FP8\n                and isinstance(device_map, dict)\n                and (\"cpu\" in device_map.values() or \"disk\" in device_map.values())\n            ):\n                device_map_kwargs[\"offload_buffers\"] = True\n\n            if not is_fsdp_enabled() and not is_deepspeed_zero3_enabled():\n                dispatch_model(model, **device_map_kwargs)\n\n        if hf_quantizer is not None:\n            hf_quantizer.postprocess_model(model)\n            model.hf_quantizer = hf_quantizer\n\n        if _adapter_model_path is not None:\n            model.load_adapter(\n                _adapter_model_path,\n                adapter_name=adapter_name,\n                token=token,\n                adapter_kwargs=adapter_kwargs,\n            )\n\n        if output_loading_info:\n            if loading_info is None:\n                loading_info = {\n                    \"missing_keys\": missing_keys,\n                    \"unexpected_keys\": unexpected_keys,\n                    \"mismatched_keys\": mismatched_keys,\n                    \"error_msgs\": error_msgs,\n                }\n            return model, loading_info\n\n        return model\n\n    @classmethod\n    def _load_pretrained_model(\n        cls,\n        model,\n        state_dict,\n        loaded_keys,\n        resolved_archive_file,\n        pretrained_model_name_or_path,\n        ignore_mismatched_sizes=False,\n        sharded_metadata=None,\n        _fast_init=True,\n        low_cpu_mem_usage=False,\n        device_map=None,\n        offload_folder=None,\n        offload_state_dict=None,\n        dtype=None,\n        hf_quantizer=None,\n        keep_in_fp32_modules=None,\n        gguf_path=None,\n        weights_only=True,\n    ):\n        is_safetensors = False\n        is_quantized = hf_quantizer is not None\n        state_dict_folder = None\n        state_dict_index = None\n\n        if device_map is not None and \"disk\" in device_map.values():\n            archive_file = (\n                resolved_archive_file[0] if isinstance(resolved_archive_file, (list, tuple)) else resolved_archive_file\n            )\n            is_safetensors = archive_file.endswith(\".safetensors\")\n            if offload_folder is None and not is_safetensors:\n                raise ValueError(\n                    \"The current `device_map` had weights offloaded to the disk. Please provide an `offload_folder`\"\n                    \" for them. Alternatively, make sure you have `safetensors` installed if the model you are using\"\n                    \" offers the weights in this format.\"\n                )\n            if offload_folder is not None:\n                os.makedirs(offload_folder, exist_ok=True)\n            if offload_state_dict is None:\n                offload_state_dict = True\n\n        is_sharded_safetensors = is_safetensors and sharded_metadata is not None\n\n        # tie the model weights before retrieving the state_dict\n        model.tie_weights()\n\n        # Retrieve missing & unexpected_keys\n        model_state_dict = model.state_dict()\n        expected_keys = list(model_state_dict.keys())\n        prefix = model.base_model_prefix\n\n        if hf_quantizer is not None:\n            expected_keys = hf_quantizer.update_expected_keys(model, expected_keys, loaded_keys)\n\n        def _fix_key(key):\n            if \"beta\" in key:\n                return key.replace(\"beta\", \"bias\")\n            if \"gamma\" in key:\n                return key.replace(\"gamma\", \"weight\")\n\n            # to avoid logging parametrized weight norm renaming\n            if hasattr(nn.utils.parametrizations, \"weight_norm\"):\n                if \"weight_g\" in key:\n                    return key.replace(\"weight_g\", \"parametrizations.weight.original0\")\n                if \"weight_v\" in key:\n                    return key.replace(\"weight_v\", \"parametrizations.weight.original1\")\n            else:\n                if \"parametrizations.weight.original0\" in key:\n                    return key.replace(\"parametrizations.weight.original0\", \"weight_g\")\n                if \"parametrizations.weight.original1\" in key:\n                    return key.replace(\"parametrizations.weight.original1\", \"weight_v\")\n            return key\n\n        original_loaded_keys = loaded_keys\n        loaded_keys = [_fix_key(key) for key in loaded_keys]\n\n        if len(prefix) > 0:\n            has_prefix_module = any(s.startswith(prefix) for s in loaded_keys)\n            expects_prefix_module = any(s.startswith(prefix) for s in expected_keys)\n        else:\n            has_prefix_module = False\n            expects_prefix_module = False\n\n        # key re-naming operations are never done on the keys\n        # that are loaded, but always on the keys of the newly initialized model\n        remove_prefix_from_model = not has_prefix_module and expects_prefix_module\n        add_prefix_to_model = has_prefix_module and not expects_prefix_module\n\n        if remove_prefix_from_model:\n            _prefix = f\"{prefix}.\"\n            expected_keys_not_prefixed = [s for s in expected_keys if not s.startswith(_prefix)]\n            expected_keys = [s[len(_prefix) :] if s.startswith(_prefix) else s for s in expected_keys]\n        elif add_prefix_to_model:\n            expected_keys = [\".\".join([prefix, s]) for s in expected_keys]\n\n        missing_keys = sorted(set(expected_keys) - set(loaded_keys))\n        unexpected_keys = set(loaded_keys) - set(expected_keys)\n\n        # Remove nonpersistent buffers from unexpected keys: they are not in the state dict but will be in the model\n        # buffers\n        model_buffers = {n for n, _ in model.named_buffers()}\n        if remove_prefix_from_model:\n            model_buffers = {key[len(_prefix) :] if key.startswith(_prefix) else key for key in model_buffers}\n        elif add_prefix_to_model:\n            model_buffers = {\".\".join([prefix, key]) for key in model_buffers}\n        unexpected_keys = sorted(unexpected_keys - model_buffers)\n\n        model.tie_weights()\n        if device_map is None and not is_fsdp_enabled() and not is_deepspeed_zero3_enabled():\n            ptrs = collections.defaultdict(list)\n            for name, tensor in model.state_dict().items():\n                id_tensor = id_tensor_storage(tensor)\n                ptrs[id_tensor].append(name)\n\n            # These are all the pointers of shared tensors.\n            tied_params = [names for _, names in ptrs.items() if len(names) > 1]\n        else:\n            # id function doesn't work for meta tensor so we need this function\n            tied_params = find_tied_parameters(model)\n\n        for group in tied_params:\n            if remove_prefix_from_model:\n                group = [key[len(_prefix) :] if key.startswith(_prefix) else key for key in group]\n            elif add_prefix_to_model:\n                group = [\".\".join([prefix, key]) for key in group]\n            missing_in_group = [k for k in missing_keys if k in group]\n            if len(missing_in_group) > 0 and len(missing_in_group) < len(group):\n                missing_keys = [k for k in missing_keys if k not in missing_in_group]\n\n        # Some models may have keys that are not in the state by design, removing them before needlessly warning\n        # the user.\n        if cls._keys_to_ignore_on_load_missing is not None:\n            for pat in cls._keys_to_ignore_on_load_missing:\n                missing_keys = [k for k in missing_keys if re.search(pat, k) is None]\n\n        if cls._keys_to_ignore_on_load_unexpected is not None:\n            for pat in cls._keys_to_ignore_on_load_unexpected:\n                unexpected_keys = [k for k in unexpected_keys if re.search(pat, k) is None]\n        if hf_quantizer is not None:\n            missing_keys = hf_quantizer.update_missing_keys(model, missing_keys, prefix)\n\n        # retrieve weights on meta device and put them back on CPU.\n        # This is not ideal in terms of memory, but if we don't do that not, we can't initialize them in the next step\n        if low_cpu_mem_usage:\n            for key in missing_keys:\n                if key in list(model_state_dict.keys()):\n                    key = key\n                elif f\"{prefix}.{key}\" in list(model_state_dict.keys()):\n                    key = f\"{prefix}.{key}\"\n                elif key.startswith(prefix) and \".\".join(key.split(\".\")[1:]) in list(model_state_dict.keys()):\n                    key = \".\".join(key.split(\".\")[1:])\n                param = model_state_dict[key]\n\n                # upcast in fp32 if any\n                target_dtype = dtype\n                if (\n                    keep_in_fp32_modules is not None\n                    and dtype == torch.float16\n                    and any(\n                        module_to_keep_in_fp32 in key.split(\".\") for module_to_keep_in_fp32 in keep_in_fp32_modules\n                    )\n                ):\n                    target_dtype = torch.float32\n\n                if param.device == torch.device(\"meta\"):\n                    value = torch.empty(*param.size(), dtype=target_dtype)\n                    if (\n                        not is_quantized\n                        or (getattr(hf_quantizer, \"requires_parameters_quantization\", False))\n                        or not hf_quantizer.check_quantized_param(\n                            model, param_value=value, param_name=key, state_dict={}\n                        )\n                    ):\n                        set_module_tensor_to_device(model, key, \"cpu\", value)\n                    else:\n                        hf_quantizer.create_quantized_param(model, value, key, \"cpu\", state_dict, unexpected_keys)\n\n        # retrieve uninitialized modules and initialize before maybe overriding that with the pretrained weights.\n        if _fast_init:\n            if not ignore_mismatched_sizes:\n                if remove_prefix_from_model:\n                    _loaded_keys = [f\"{prefix}.{k}\" for k in loaded_keys]\n                elif add_prefix_to_model:\n                    _loaded_keys = [k[len(prefix) + 1 :] for k in loaded_keys]\n                else:\n                    _loaded_keys = loaded_keys\n                not_initialized_submodules = set_initialized_submodules(model, _loaded_keys)\n                # If we're about to tie the output embeds to the input embeds we don't need to init them\n                if hasattr(model.config, \"tie_word_embeddings\") and model.config.tie_word_embeddings:\n                    output_embeddings = model.get_output_embeddings()\n                    if output_embeddings is not None:\n                        # Still need to initialize if there is a bias term since biases are not tied.\n                        if not hasattr(output_embeddings, \"bias\") or output_embeddings.bias is None:\n                            output_embeddings._is_hf_initialized = True\n            else:\n                not_initialized_submodules = dict(model.named_modules())\n            # This will only initialize submodules that are not marked as initialized by the line above.\n            if is_deepspeed_zero3_enabled() and not is_quantized:\n                import deepspeed\n\n                not_initialized_parameters = list(\n                    set(\n                        itertools.chain.from_iterable(\n                            submodule.parameters(recurse=False) for submodule in not_initialized_submodules.values()\n                        )\n                    )\n                )\n                with deepspeed.zero.GatheredParameters(not_initialized_parameters, modifier_rank=0):\n                    model.apply(model._initialize_weights)\n            else:\n                model.apply(model._initialize_weights)\n\n        # Set some modules to fp32 if any\n        if keep_in_fp32_modules is not None:\n            for name, param in model.named_parameters():\n                if any(module_to_keep_in_fp32 in name.split(\".\") for module_to_keep_in_fp32 in keep_in_fp32_modules):\n                    # param = param.to(torch.float32) does not work here as only in the local scope.\n                    param.data = param.data.to(torch.float32)\n\n        # Make sure we are able to load base models as well as derived models (with heads)\n        start_prefix = \"\"\n        model_to_load = model\n        if len(cls.base_model_prefix) > 0 and not hasattr(model, cls.base_model_prefix) and has_prefix_module:\n            start_prefix = cls.base_model_prefix + \".\"\n        if len(cls.base_model_prefix) > 0 and hasattr(model, cls.base_model_prefix) and not has_prefix_module:\n            model_to_load = getattr(model, cls.base_model_prefix)\n            base_model_expected_keys = list(model_to_load.state_dict().keys())\n            if any(key in expected_keys_not_prefixed and key not in base_model_expected_keys for key in loaded_keys):\n                raise ValueError(\n                    \"The state dictionary of the model you are trying to load is corrupted. Are you sure it was \"\n                    \"properly saved?\"\n                )\n            if device_map is not None:\n                device_map = {k.replace(f\"{cls.base_model_prefix}.\", \"\"): v for k, v in device_map.items()}\n\n        def _find_mismatched_keys(\n            state_dict,\n            model_state_dict,\n            loaded_keys,\n            add_prefix_to_model,\n            remove_prefix_from_model,\n            ignore_mismatched_sizes,\n        ):\n            mismatched_keys = []\n            if ignore_mismatched_sizes:\n                for checkpoint_key in loaded_keys:\n                    # If the checkpoint is sharded, we may not have the key here.\n                    if checkpoint_key not in state_dict:\n                        continue\n                    model_key = checkpoint_key\n                    if remove_prefix_from_model:\n                        # The model key starts with `prefix` but `checkpoint_key` doesn't so we add it.\n                        model_key = f\"{prefix}.{checkpoint_key}\"\n                    elif add_prefix_to_model:\n                        # The model key doesn't start with `prefix` but `checkpoint_key` does so we remove it.\n                        model_key = \".\".join(checkpoint_key.split(\".\")[1:])\n\n                    if (\n                        model_key in model_state_dict\n                        and state_dict[checkpoint_key].shape != model_state_dict[model_key].shape\n                    ):\n                        if (\n                            state_dict[checkpoint_key].shape[-1] == 1\n                            and state_dict[checkpoint_key].numel() * 2 == model_state_dict[model_key].numel()\n                        ):\n                            # This skips size mismatches for 4-bit weights. Two 4-bit values share an 8-bit container, causing size differences.\n                            # Without matching with module type or paramter type it seems like a practical way to detect valid 4bit weights.\n                            pass\n                        else:\n                            mismatched_keys.append(\n                                (checkpoint_key, state_dict[checkpoint_key].shape, model_state_dict[model_key].shape)\n                            )\n                            del state_dict[checkpoint_key]\n            return mismatched_keys\n\n        if resolved_archive_file is not None:\n            folder = os.path.sep.join(resolved_archive_file[0].split(os.path.sep)[:-1])\n        else:\n            folder = None\n        if device_map is not None and is_safetensors:\n            param_device_map = expand_device_map(device_map, original_loaded_keys, start_prefix)\n            str_dtype = str(dtype).replace(\"torch.\", \"\") if dtype is not None else \"float32\"\n            if sharded_metadata is None:\n                archive_file = (\n                    resolved_archive_file[0]\n                    if isinstance(resolved_archive_file, (list, tuple))\n                    else resolved_archive_file\n                )\n                weight_map = {p: archive_file for p in original_loaded_keys}\n            else:\n                weight_map = {p: os.path.join(folder, f) for p, f in sharded_metadata[\"weight_map\"].items()}\n            offload_index = {\n                p[len(start_prefix) :]: {\"safetensors_file\": f, \"weight_name\": p, \"dtype\": str_dtype}\n                for p, f in weight_map.items()\n                if p.startswith(start_prefix) and param_device_map[p[len(start_prefix) :]] == \"disk\"\n            }\n        else:\n            offload_index = None\n\n        if state_dict is not None:\n            # Whole checkpoint\n            mismatched_keys = _find_mismatched_keys(\n                state_dict,\n                model_state_dict,\n                original_loaded_keys,\n                add_prefix_to_model,\n                remove_prefix_from_model,\n                ignore_mismatched_sizes,\n            )\n\n            # For GGUF models `state_dict` is never set to None as the state dict is always small\n            if gguf_path:\n                error_msgs, offload_index, state_dict_index = _load_state_dict_into_meta_model(\n                    model_to_load,\n                    state_dict,\n                    start_prefix,\n                    expected_keys,\n                    device_map=device_map,\n                    offload_folder=offload_folder,\n                    offload_index=offload_index,\n                    state_dict_folder=state_dict_folder,\n                    state_dict_index=state_dict_index,\n                    dtype=dtype,\n                    hf_quantizer=hf_quantizer,\n                    is_safetensors=is_safetensors,\n                    keep_in_fp32_modules=keep_in_fp32_modules,\n                    unexpected_keys=unexpected_keys,\n                )\n            else:\n                # Sharded checkpoint or whole but low_cpu_mem_usage==True\n                assign_to_params_buffers = check_support_param_buffer_assignment(\n                    model_to_load, state_dict, start_prefix\n                )\n                error_msgs = _load_state_dict_into_model(\n                    model_to_load, state_dict, start_prefix, assign_to_params_buffers\n                )\n\n        else:\n            # This should always be a list but, just to be sure.\n            if not isinstance(resolved_archive_file, list):\n                resolved_archive_file = [resolved_archive_file]\n\n            error_msgs = []\n            mismatched_keys = []\n            if not is_safetensors:\n                offload_index = {} if device_map is not None and \"disk\" in device_map.values() else None\n            if offload_state_dict:\n                state_dict_folder = tempfile.mkdtemp()\n                state_dict_index = {}\n            else:\n                state_dict_folder = None\n                state_dict_index = None\n\n            if is_sharded_safetensors:\n                disk_only_shard_files = get_disk_only_shard_files(\n                    device_map, sharded_metadata=sharded_metadata, start_prefix=start_prefix\n                )\n                disk_only_shard_files = [os.path.join(folder, f) for f in disk_only_shard_files]\n            else:\n                disk_only_shard_files = []\n\n            if len(resolved_archive_file) > 1:\n                resolved_archive_file = logging.tqdm(resolved_archive_file, desc=\"Loading checkpoint shards\")\n            assign_to_params_buffers = None\n            for shard_file in resolved_archive_file:\n                # Skip the load for shards that only contain disk-offloaded weights when using safetensors for the offload.\n                if shard_file in disk_only_shard_files:\n                    continue\n                map_location = None\n                if (\n                    device_map is not None\n                    and hf_quantizer is not None\n                    and hf_quantizer.quantization_config.quant_method == QuantizationMethod.TORCHAO\n                    and hf_quantizer.quantization_config.quant_type == \"int4_weight_only\"\n                ):\n                    map_location = torch.device([d for d in device_map.values() if d not in [\"cpu\", \"disk\"]][0])\n                state_dict = load_state_dict(\n                    shard_file, is_quantized=is_quantized, map_location=map_location, weights_only=weights_only\n                )\n\n                # Mistmatched keys contains tuples key/shape1/shape2 of weights in the checkpoint that have a shape not\n                # matching the weights in the model.\n                mismatched_keys += _find_mismatched_keys(\n                    state_dict,\n                    model_state_dict,\n                    original_loaded_keys,\n                    add_prefix_to_model,\n                    remove_prefix_from_model,\n                    ignore_mismatched_sizes,\n                )\n                if low_cpu_mem_usage:\n                    if is_fsdp_enabled() and not is_local_dist_rank_0() and not is_quantized:\n                        for key, param in model_to_load.state_dict().items():\n                            if param.device == torch.device(\"meta\"):\n                                set_module_tensor_to_device(\n                                    model_to_load, key, \"cpu\", torch.empty(*param.size(), dtype=dtype)\n                                )\n                    else:\n                        new_error_msgs, offload_index, state_dict_index = _load_state_dict_into_meta_model(\n                            model_to_load,\n                            state_dict,\n                            start_prefix,\n                            expected_keys,\n                            device_map=device_map,\n                            offload_folder=offload_folder,\n                            offload_index=offload_index,\n                            state_dict_folder=state_dict_folder,\n                            state_dict_index=state_dict_index,\n                            dtype=dtype,\n                            hf_quantizer=hf_quantizer,\n                            is_safetensors=is_safetensors,\n                            keep_in_fp32_modules=keep_in_fp32_modules,\n                            unexpected_keys=unexpected_keys,\n                        )\n                        error_msgs += new_error_msgs\n                else:\n                    # Sharded checkpoint or whole but low_cpu_mem_usage==True\n                    if assign_to_params_buffers is None:\n                        assign_to_params_buffers = check_support_param_buffer_assignment(\n                            model_to_load, state_dict, start_prefix\n                        )\n                    error_msgs += _load_state_dict_into_model(\n                        model_to_load, state_dict, start_prefix, assign_to_params_buffers\n                    )\n\n                # force memory release\n                del state_dict\n                gc.collect()\n\n            if offload_index is not None and len(offload_index) > 0:\n                if model != model_to_load:\n                    # We need to add the prefix of the base model\n                    prefix = cls.base_model_prefix\n                    if not is_safetensors:\n                        for weight_name in offload_index:\n                            shutil.move(\n                                os.path.join(offload_folder, f\"{weight_name}.dat\"),\n                                os.path.join(offload_folder, f\"{prefix}.{weight_name}.dat\"),\n                            )\n                    offload_index = {f\"{prefix}.{key}\": value for key, value in offload_index.items()}\n                if not is_safetensors:\n                    save_offload_index(offload_index, offload_folder)\n                    offload_index = None\n\n            if offload_state_dict:\n                # Load back temporarily offloaded state dict\n                load_offloaded_weights(model_to_load, state_dict_index, state_dict_folder)\n                shutil.rmtree(state_dict_folder)\n\n        if len(error_msgs) > 0:\n            error_msg = \"\\n\\t\".join(error_msgs)\n            if \"size mismatch\" in error_msg:\n                error_msg += (\n                    \"\\n\\tYou may consider adding `ignore_mismatched_sizes=True` in the model `from_pretrained` method.\"\n                )\n            raise RuntimeError(f\"Error(s) in loading state_dict for {model.__class__.__name__}:\\n\\t{error_msg}\")\n\n        if len(unexpected_keys) > 0:\n            archs = [] if model.config.architectures is None else model.config.architectures\n            warner = logger.warning if model.__class__.__name__ in archs else logger.info\n            warner(\n                f\"Some weights of the model checkpoint at {pretrained_model_name_or_path} were not used when\"\n                f\" initializing {model.__class__.__name__}: {unexpected_keys}\\n- This IS expected if you are\"\n                f\" initializing {model.__class__.__name__} from the checkpoint of a model trained on another task or\"\n                \" with another architecture (e.g. initializing a BertForSequenceClassification model from a\"\n                \" BertForPreTraining model).\\n- This IS NOT expected if you are initializing\"\n                f\" {model.__class__.__name__} from the checkpoint of a model that you expect to be exactly identical\"\n                \" (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\"\n            )\n        else:\n            logger.info(f\"All model checkpoint weights were used when initializing {model.__class__.__name__}.\\n\")\n        if len(missing_keys) > 0:\n            logger.warning(\n                f\"Some weights of {model.__class__.__name__} were not initialized from the model checkpoint at\"\n                f\" {pretrained_model_name_or_path} and are newly initialized: {missing_keys}\\nYou should probably\"\n                \" TRAIN this model on a down-stream task to be able to use it for predictions and inference.\"\n            )\n        elif len(mismatched_keys) == 0:\n            logger.info(\n                f\"All the weights of {model.__class__.__name__} were initialized from the model checkpoint at\"\n                f\" {pretrained_model_name_or_path}.\\nIf your task is similar to the task the model of the checkpoint\"\n                f\" was trained on, you can already use {model.__class__.__name__} for predictions without further\"\n                \" training.\"\n            )\n        if len(mismatched_keys) > 0:\n            mismatched_warning = \"\\n\".join(\n                [\n                    f\"- {key}: found shape {shape1} in the checkpoint and {shape2} in the model instantiated\"\n                    for key, shape1, shape2 in mismatched_keys\n                ]\n            )\n            logger.warning(\n                f\"Some weights of {model.__class__.__name__} were not initialized from the model checkpoint at\"\n                f\" {pretrained_model_name_or_path} and are newly initialized because the shapes did not\"\n                f\" match:\\n{mismatched_warning}\\nYou should probably TRAIN this model on a down-stream task to be able\"\n                \" to use it for predictions and inference.\"\n            )\n\n        return model, missing_keys, unexpected_keys, mismatched_keys, offload_index, error_msgs\n\n    def retrieve_modules_from_names(self, names, add_prefix=False, remove_prefix=False):\n        module_keys = {\".\".join(key.split(\".\")[:-1]) for key in names}\n\n        # torch.nn.ParameterList is a special case where two parameter keywords\n        # are appended to the module name, *e.g.* bert.special_embeddings.0\n        module_keys = module_keys.union(\n            {\".\".join(key.split(\".\")[:-2]) for key in names if len(key) > 0 and key[-1].isdigit()}\n        )\n\n        retrieved_modules = []\n        # retrieve all modules that has at least one missing weight name\n        for name, module in self.named_modules():\n            if remove_prefix:\n                _prefix = f\"{self.base_model_prefix}.\"\n                name = name[len(_prefix) :] if name.startswith(_prefix) else name\n            elif add_prefix:\n                name = \".\".join([self.base_model_prefix, name]) if len(name) > 0 else self.base_model_prefix\n\n            if name in module_keys:\n                retrieved_modules.append(module)\n\n        return retrieved_modules\n\n    @staticmethod\n    def _load_pretrained_model_low_mem(\n        model,\n        loaded_state_dict_keys,\n        resolved_archive_file,\n        start_prefix=\"\",\n        hf_quantizer=None,\n        pretrained_model_name_or_path=None,\n        weights_only=True,\n    ):\n        \"\"\"\n        This is an experimental function that loads the model using ~1.x model size CPU memory\n\n        Before you call it do:\n\n        1. save which state_dict keys are available\n        2. drop state_dict before model is created, since the latter takes 1x model size memory\n\n        Here then we continue:\n\n        3. switch to the meta device all params/buffers that are going to be replaced from the loaded state_dict\n        4. load state_dict 2nd time\n        5. replace the params/buffers from the state_dict\n\n        Currently, it doesn't handle missing_keys, unexpected_keys, mismatched_keys. It can't handle deepspeed. To\n        handle bitsandbytes, needs non-empty hf_quantizer argument.\n        \"\"\"\n\n        _move_model_to_meta(model, loaded_state_dict_keys, start_prefix)\n        state_dict = load_state_dict(resolved_archive_file, weights_only=weights_only)\n        expected_keys = loaded_state_dict_keys  # plug for missing expected_keys. TODO: replace with proper keys\n        error_msgs = _load_state_dict_into_meta_model(\n            model,\n            state_dict,\n            start_prefix,\n            expected_keys=expected_keys,\n            hf_quantizer=hf_quantizer,\n        )\n        return error_msgs\n\n    @classmethod\n    def register_for_auto_class(cls, auto_class=\"AutoModel\"):\n        \"\"\"\n        Register this class with a given auto class. This should only be used for custom models as the ones in the\n        library are already mapped with an auto class.\n\n        <Tip warning={true}>\n\n        This API is experimental and may have some slight breaking changes in the next releases.\n\n        </Tip>\n\n        Args:\n            auto_class (`str` or `type`, *optional*, defaults to `\"AutoModel\"`):\n                The auto class to register this new model with.\n        \"\"\"\n        if not isinstance(auto_class, str):\n            auto_class = auto_class.__name__\n\n        import transformers.models.auto as auto_module\n\n        if not hasattr(auto_module, auto_class):\n            raise ValueError(f\"{auto_class} is not a valid auto class.\")\n\n        cls._auto_class = auto_class\n\n    def to_bettertransformer(self) -> \"PreTrainedModel\":\n        \"\"\"\n        Converts the model to use [PyTorch's native attention\n        implementation](https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html), integrated to\n        Transformers through [Optimum library](https://huggingface.co/docs/optimum/bettertransformer/overview). Only a\n        subset of all Transformers models are supported.\n\n        PyTorch's attention fastpath allows to speed up inference through kernel fusions and the use of [nested\n        tensors](https://pytorch.org/docs/stable/nested.html). Detailed benchmarks can be found in [this blog\n        post](https://medium.com/pytorch/bettertransformer-out-of-the-box-performance-for-huggingface-transformers-3fbe27d50ab2).\n\n        Returns:\n            [`PreTrainedModel`]: The model converted to BetterTransformer.\n        \"\"\"\n        if not is_optimum_available():\n            raise ImportError(\"The package `optimum` is required to use Better Transformer.\")\n\n        from optimum.version import __version__ as optimum_version\n\n        if version.parse(optimum_version) < version.parse(\"1.7.0\"):\n            raise ImportError(\n                f\"Please install optimum>=1.7.0 to use Better Transformer. The version {optimum_version} was found.\"\n            )\n\n        from optimum.bettertransformer import BetterTransformer\n\n        return BetterTransformer.transform(self)\n\n    def reverse_bettertransformer(self):\n        \"\"\"\n        Reverts the transformation from [`~PreTrainedModel.to_bettertransformer`] so that the original modeling is\n        used, for example in order to save the model.\n\n        Returns:\n            [`PreTrainedModel`]: The model converted back to the original modeling.\n        \"\"\"\n        if not is_optimum_available():\n            raise ImportError(\"The package `optimum` is required to use Better Transformer.\")\n\n        from optimum.version import __version__ as optimum_version\n\n        if version.parse(optimum_version) < version.parse(\"1.7.0\"):\n            raise ImportError(\n                f\"Please install optimum>=1.7.0 to use Better Transformer. The version {optimum_version} was found.\"\n            )\n\n        from optimum.bettertransformer import BetterTransformer\n\n        return BetterTransformer.reverse(self)\n\n    def warn_if_padding_and_no_attention_mask(self, input_ids, attention_mask):\n        \"\"\"\n        Shows a one-time warning if the input_ids appear to contain padding and no attention mask was given.\n        \"\"\"\n\n        # Skip the check during tracing.\n        if is_torch_fx_proxy(input_ids) or torch.jit.is_tracing() or is_torchdynamo_compiling():\n            return\n\n        if (attention_mask is not None) or (self.config.pad_token_id is None):\n            return\n\n        # Check only the first and last input IDs to reduce overhead.\n        if self.config.pad_token_id in input_ids[:, [-1, 0]]:\n            warn_string = (\n                \"We strongly recommend passing in an `attention_mask` since your input_ids may be padded. See \"\n                \"https://huggingface.co/docs/transformers/troubleshooting\"\n                \"#incorrect-output-when-padding-tokens-arent-masked.\"\n            )\n\n            # If the pad token is equal to either BOS, EOS, or SEP, we do not know whether the user should use an\n            # attention_mask or not. In this case, we should still show a warning because this is a rare case.\n            if (\n                (self.config.bos_token_id is not None and self.config.bos_token_id == self.config.pad_token_id)\n                or (self.config.eos_token_id is not None and self.config.eos_token_id == self.config.pad_token_id)\n                or (self.config.sep_token_id is not None and self.config.sep_token_id == self.config.pad_token_id)\n            ):\n                warn_string += (\n                    f\"\\nYou may ignore this warning if your `pad_token_id` ({self.config.pad_token_id}) is identical \"\n                    f\"to the `bos_token_id` ({self.config.bos_token_id}), `eos_token_id` ({self.config.eos_token_id}), \"\n                    f\"or the `sep_token_id` ({self.config.sep_token_id}), and your input is not padded.\"\n                )\n\n            logger.warning_once(warn_string)\n\n    @property\n    def _is_quantized_training_enabled(self):\n        warnings.warn(\n            \"`_is_quantized_training_enabled` is going to be deprecated in transformers 4.39.0. Please use `model.hf_quantizer.is_trainable` instead\",\n            FutureWarning,\n        )\n\n        if not hasattr(self, \"hf_quantizer\"):\n            return False\n\n        return self.hf_quantizer.is_trainable\n\n    @property\n    def loss_function(self):\n        if getattr(self.config, \"loss_type\", None) is not None:\n            loss_type = self.config.loss_type\n        else:\n            loss_type = self.__class__.__name__\n            if loss_type not in LOSS_MAPPING:\n                loss_groups = f\"({'|'.join(LOSS_MAPPING)})\"\n                loss_type = re.findall(loss_groups, self.__class__.__name__)\n                if len(loss_type) > 0:\n                    loss_type = loss_type[0]\n                else:\n                    loss_type = None\n        if loss_type is None or loss_type not in LOSS_MAPPING and getattr(self.config, \"loss_type\", None) is not None:\n            logger.warning_once(\n                f\"`loss_type={loss_type}` was set in the config but it is unrecognised.\"\n                f\"Using the default loss: `ForCausalLMLoss`.\"\n            )\n            loss_type = \"ForCausalLM\"\n        return LOSS_MAPPING[loss_type]\n\n\nPreTrainedModel.push_to_hub = copy_func(PreTrainedModel.push_to_hub)\nif PreTrainedModel.push_to_hub.__doc__ is not None:\n    PreTrainedModel.push_to_hub.__doc__ = PreTrainedModel.push_to_hub.__doc__.format(\n        object=\"model\", object_class=\"AutoModel\", object_files=\"model file\"\n    )\n\n\nclass PoolerStartLogits(nn.Module):\n    \"\"\"\n    Compute SQuAD start logits from sequence hidden states.\n\n    Args:\n        config ([`PretrainedConfig`]):\n            The config used by the model, will be used to grab the `hidden_size` of the model.\n    \"\"\"\n\n    def __init__(self, config: PretrainedConfig):\n        super().__init__()\n        self.dense = nn.Linear(config.hidden_size, 1)\n\n    def forward(\n        self, hidden_states: torch.FloatTensor, p_mask: Optional[torch.FloatTensor] = None\n    ) -> torch.FloatTensor:\n        \"\"\"\n        Args:\n            hidden_states (`torch.FloatTensor` of shape `(batch_size, seq_len, hidden_size)`):\n                The final hidden states of the model.\n            p_mask (`torch.FloatTensor` of shape `(batch_size, seq_len)`, *optional*):\n                Mask for tokens at invalid position, such as query and special symbols (PAD, SEP, CLS). 1.0 means token\n                should be masked.\n\n        Returns:\n            `torch.FloatTensor`: The start logits for SQuAD.\n        \"\"\"\n        x = self.dense(hidden_states).squeeze(-1)\n\n        if p_mask is not None:\n            if get_parameter_dtype(self) == torch.float16:\n                x = x * (1 - p_mask) - 65500 * p_mask\n            else:\n                x = x * (1 - p_mask) - 1e30 * p_mask\n\n        return x\n\n\nclass PoolerEndLogits(nn.Module):\n    \"\"\"\n    Compute SQuAD end logits from sequence hidden states.\n\n    Args:\n        config ([`PretrainedConfig`]):\n            The config used by the model, will be used to grab the `hidden_size` of the model and the `layer_norm_eps`\n            to use.\n    \"\"\"\n\n    def __init__(self, config: PretrainedConfig):\n        super().__init__()\n        self.dense_0 = nn.Linear(config.hidden_size * 2, config.hidden_size)\n        self.activation = nn.Tanh()\n        self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)\n        self.dense_1 = nn.Linear(config.hidden_size, 1)\n\n    def forward(\n        self,\n        hidden_states: torch.FloatTensor,\n        start_states: Optional[torch.FloatTensor] = None,\n        start_positions: Optional[torch.LongTensor] = None,\n        p_mask: Optional[torch.FloatTensor] = None,\n    ) -> torch.FloatTensor:\n        \"\"\"\n        Args:\n            hidden_states (`torch.FloatTensor` of shape `(batch_size, seq_len, hidden_size)`):\n                The final hidden states of the model.\n            start_states (`torch.FloatTensor` of shape `(batch_size, seq_len, hidden_size)`, *optional*):\n                The hidden states of the first tokens for the labeled span.\n            start_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n                The position of the first token for the labeled span.\n            p_mask (`torch.FloatTensor` of shape `(batch_size, seq_len)`, *optional*):\n                Mask for tokens at invalid position, such as query and special symbols (PAD, SEP, CLS). 1.0 means token\n                should be masked.\n\n        <Tip>\n\n        One of `start_states` or `start_positions` should be not `None`. If both are set, `start_positions` overrides\n        `start_states`.\n\n        </Tip>\n\n        Returns:\n            `torch.FloatTensor`: The end logits for SQuAD.\n        \"\"\"\n        assert (\n            start_states is not None or start_positions is not None\n        ), \"One of start_states, start_positions should be not None\"\n        if start_positions is not None:\n            slen, hsz = hidden_states.shape[-2:]\n            start_positions = start_positions[:, None, None].expand(-1, -1, hsz)  # shape (bsz, 1, hsz)\n            start_states = hidden_states.gather(-2, start_positions)  # shape (bsz, 1, hsz)\n            start_states = start_states.expand(-1, slen, -1)  # shape (bsz, slen, hsz)\n\n        x = self.dense_0(torch.cat([hidden_states, start_states], dim=-1))\n        x = self.activation(x)\n        x = self.LayerNorm(x)\n        x = self.dense_1(x).squeeze(-1)\n\n        if p_mask is not None:\n            if get_parameter_dtype(self) == torch.float16:\n                x = x * (1 - p_mask) - 65500 * p_mask\n            else:\n                x = x * (1 - p_mask) - 1e30 * p_mask\n\n        return x\n\n\nclass PoolerAnswerClass(nn.Module):\n    \"\"\"\n    Compute SQuAD 2.0 answer class from classification and start tokens hidden states.\n\n    Args:\n        config ([`PretrainedConfig`]):\n            The config used by the model, will be used to grab the `hidden_size` of the model.\n    \"\"\"\n\n    def __init__(self, config):\n        super().__init__()\n        self.dense_0 = nn.Linear(config.hidden_size * 2, config.hidden_size)\n        self.activation = nn.Tanh()\n        self.dense_1 = nn.Linear(config.hidden_size, 1, bias=False)\n\n    def forward(\n        self,\n        hidden_states: torch.FloatTensor,\n        start_states: Optional[torch.FloatTensor] = None,\n        start_positions: Optional[torch.LongTensor] = None,\n        cls_index: Optional[torch.LongTensor] = None,\n    ) -> torch.FloatTensor:\n        \"\"\"\n        Args:\n            hidden_states (`torch.FloatTensor` of shape `(batch_size, seq_len, hidden_size)`):\n                The final hidden states of the model.\n            start_states (`torch.FloatTensor` of shape `(batch_size, seq_len, hidden_size)`, *optional*):\n                The hidden states of the first tokens for the labeled span.\n            start_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n                The position of the first token for the labeled span.\n            cls_index (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n                Position of the CLS token for each sentence in the batch. If `None`, takes the last token.\n\n        <Tip>\n\n        One of `start_states` or `start_positions` should be not `None`. If both are set, `start_positions` overrides\n        `start_states`.\n\n        </Tip>\n\n        Returns:\n            `torch.FloatTensor`: The SQuAD 2.0 answer class.\n        \"\"\"\n        # No dependency on end_feature so that we can obtain one single `cls_logits` for each sample.\n        hsz = hidden_states.shape[-1]\n        assert (\n            start_states is not None or start_positions is not None\n        ), \"One of start_states, start_positions should be not None\"\n        if start_positions is not None:\n            start_positions = start_positions[:, None, None].expand(-1, -1, hsz)  # shape (bsz, 1, hsz)\n            start_states = hidden_states.gather(-2, start_positions).squeeze(-2)  # shape (bsz, hsz)\n\n        if cls_index is not None:\n            cls_index = cls_index[:, None, None].expand(-1, -1, hsz)  # shape (bsz, 1, hsz)\n            cls_token_state = hidden_states.gather(-2, cls_index).squeeze(-2)  # shape (bsz, hsz)\n        else:\n            cls_token_state = hidden_states[:, -1, :]  # shape (bsz, hsz)\n\n        x = self.dense_0(torch.cat([start_states, cls_token_state], dim=-1))\n        x = self.activation(x)\n        x = self.dense_1(x).squeeze(-1)\n\n        return x\n\n\n@dataclass\nclass SquadHeadOutput(ModelOutput):\n    \"\"\"\n    Base class for outputs of question answering models using a [`~modeling_utils.SQuADHead`].\n\n    Args:\n        loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned if both `start_positions` and `end_positions` are provided):\n            Classification loss as the sum of start token, end token (and is_impossible if provided) classification\n            losses.\n        start_top_log_probs (`torch.FloatTensor` of shape `(batch_size, config.start_n_top)`, *optional*, returned if `start_positions` or `end_positions` is not provided):\n            Log probabilities for the top config.start_n_top start token possibilities (beam-search).\n        start_top_index (`torch.LongTensor` of shape `(batch_size, config.start_n_top)`, *optional*, returned if `start_positions` or `end_positions` is not provided):\n            Indices for the top config.start_n_top start token possibilities (beam-search).\n        end_top_log_probs (`torch.FloatTensor` of shape `(batch_size, config.start_n_top * config.end_n_top)`, *optional*, returned if `start_positions` or `end_positions` is not provided):\n            Log probabilities for the top `config.start_n_top * config.end_n_top` end token possibilities\n            (beam-search).\n        end_top_index (`torch.LongTensor` of shape `(batch_size, config.start_n_top * config.end_n_top)`, *optional*, returned if `start_positions` or `end_positions` is not provided):\n            Indices for the top `config.start_n_top * config.end_n_top` end token possibilities (beam-search).\n        cls_logits (`torch.FloatTensor` of shape `(batch_size,)`, *optional*, returned if `start_positions` or `end_positions` is not provided):\n            Log probabilities for the `is_impossible` label of the answers.\n\n    \"\"\"\n\n    loss: Optional[torch.FloatTensor] = None\n    start_top_log_probs: Optional[torch.FloatTensor] = None\n    start_top_index: Optional[torch.LongTensor] = None\n    end_top_log_probs: Optional[torch.FloatTensor] = None\n    end_top_index: Optional[torch.LongTensor] = None\n    cls_logits: Optional[torch.FloatTensor] = None\n\n\nclass SQuADHead(nn.Module):\n    r\"\"\"\n    A SQuAD head inspired by XLNet.\n\n    Args:\n        config ([`PretrainedConfig`]):\n            The config used by the model, will be used to grab the `hidden_size` of the model and the `layer_norm_eps`\n            to use.\n    \"\"\"\n\n    def __init__(self, config):\n        super().__init__()\n        self.start_n_top = config.start_n_top\n        self.end_n_top = config.end_n_top\n\n        self.start_logits = PoolerStartLogits(config)\n        self.end_logits = PoolerEndLogits(config)\n        self.answer_class = PoolerAnswerClass(config)\n\n    @replace_return_docstrings(output_type=SquadHeadOutput, config_class=PretrainedConfig)\n    def forward(\n        self,\n        hidden_states: torch.FloatTensor,\n        start_positions: Optional[torch.LongTensor] = None,\n        end_positions: Optional[torch.LongTensor] = None,\n        cls_index: Optional[torch.LongTensor] = None,\n        is_impossible: Optional[torch.LongTensor] = None,\n        p_mask: Optional[torch.FloatTensor] = None,\n        return_dict: bool = False,\n    ) -> Union[SquadHeadOutput, Tuple[torch.FloatTensor]]:\n        \"\"\"\n        Args:\n            hidden_states (`torch.FloatTensor` of shape `(batch_size, seq_len, hidden_size)`):\n                Final hidden states of the model on the sequence tokens.\n            start_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n                Positions of the first token for the labeled span.\n            end_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n                Positions of the last token for the labeled span.\n            cls_index (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n                Position of the CLS token for each sentence in the batch. If `None`, takes the last token.\n            is_impossible (`torch.LongTensor` of shape `(batch_size,)`, *optional*):\n                Whether the question has a possible answer in the paragraph or not.\n            p_mask (`torch.FloatTensor` of shape `(batch_size, seq_len)`, *optional*):\n                Mask for tokens at invalid position, such as query and special symbols (PAD, SEP, CLS). 1.0 means token\n                should be masked.\n            return_dict (`bool`, *optional*, defaults to `False`):\n                Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.\n\n        Returns:\n        \"\"\"\n        start_logits = self.start_logits(hidden_states, p_mask=p_mask)\n\n        if start_positions is not None and end_positions is not None:\n            # If we are on multi-GPU, let's remove the dimension added by batch splitting\n            for x in (start_positions, end_positions, cls_index, is_impossible):\n                if x is not None and x.dim() > 1:\n                    x.squeeze_(-1)\n\n            # during training, compute the end logits based on the ground truth of the start position\n            end_logits = self.end_logits(hidden_states, start_positions=start_positions, p_mask=p_mask)\n\n            loss_fct = CrossEntropyLoss()\n            start_loss = loss_fct(start_logits, start_positions)\n            end_loss = loss_fct(end_logits, end_positions)\n            total_loss = (start_loss + end_loss) / 2\n\n            if cls_index is not None and is_impossible is not None:\n                # Predict answerability from the representation of CLS and START\n                cls_logits = self.answer_class(hidden_states, start_positions=start_positions, cls_index=cls_index)\n                loss_fct_cls = nn.BCEWithLogitsLoss()\n                cls_loss = loss_fct_cls(cls_logits, is_impossible)\n\n                # note(zhiliny): by default multiply the loss by 0.5 so that the scale is comparable to start_loss and end_loss\n                total_loss += cls_loss * 0.5\n\n            return SquadHeadOutput(loss=total_loss) if return_dict else (total_loss,)\n\n        else:\n            # during inference, compute the end logits based on beam search\n            bsz, slen, hsz = hidden_states.size()\n            start_log_probs = nn.functional.softmax(start_logits, dim=-1)  # shape (bsz, slen)\n\n            start_top_log_probs, start_top_index = torch.topk(\n                start_log_probs, self.start_n_top, dim=-1\n            )  # shape (bsz, start_n_top)\n            start_top_index_exp = start_top_index.unsqueeze(-1).expand(-1, -1, hsz)  # shape (bsz, start_n_top, hsz)\n            start_states = torch.gather(hidden_states, -2, start_top_index_exp)  # shape (bsz, start_n_top, hsz)\n            start_states = start_states.unsqueeze(1).expand(-1, slen, -1, -1)  # shape (bsz, slen, start_n_top, hsz)\n\n            hidden_states_expanded = hidden_states.unsqueeze(2).expand_as(\n                start_states\n            )  # shape (bsz, slen, start_n_top, hsz)\n            p_mask = p_mask.unsqueeze(-1) if p_mask is not None else None\n            end_logits = self.end_logits(hidden_states_expanded, start_states=start_states, p_mask=p_mask)\n            end_log_probs = nn.functional.softmax(end_logits, dim=1)  # shape (bsz, slen, start_n_top)\n\n            end_top_log_probs, end_top_index = torch.topk(\n                end_log_probs, self.end_n_top, dim=1\n            )  # shape (bsz, end_n_top, start_n_top)\n            end_top_log_probs = end_top_log_probs.view(-1, self.start_n_top * self.end_n_top)\n            end_top_index = end_top_index.view(-1, self.start_n_top * self.end_n_top)\n\n            start_states = torch.einsum(\"blh,bl->bh\", hidden_states, start_log_probs)\n            cls_logits = self.answer_class(hidden_states, start_states=start_states, cls_index=cls_index)\n\n            if not return_dict:\n                return (start_top_log_probs, start_top_index, end_top_log_probs, end_top_index, cls_logits)\n            else:\n                return SquadHeadOutput(\n                    start_top_log_probs=start_top_log_probs,\n                    start_top_index=start_top_index,\n                    end_top_log_probs=end_top_log_probs,\n                    end_top_index=end_top_index,\n                    cls_logits=cls_logits,\n                )\n\n\nclass SequenceSummary(nn.Module):\n    r\"\"\"\n    Compute a single vector summary of a sequence hidden states.\n\n    Args:\n        config ([`PretrainedConfig`]):\n            The config used by the model. Relevant arguments in the config class of the model are (refer to the actual\n            config class of your model for the default values it uses):\n\n            - **summary_type** (`str`) -- The method to use to make this summary. Accepted values are:\n\n                - `\"last\"` -- Take the last token hidden state (like XLNet)\n                - `\"first\"` -- Take the first token hidden state (like Bert)\n                - `\"mean\"` -- Take the mean of all tokens hidden states\n                - `\"cls_index\"` -- Supply a Tensor of classification token position (GPT/GPT-2)\n                - `\"attn\"` -- Not implemented now, use multi-head attention\n\n            - **summary_use_proj** (`bool`) -- Add a projection after the vector extraction.\n            - **summary_proj_to_labels** (`bool`) -- If `True`, the projection outputs to `config.num_labels` classes\n              (otherwise to `config.hidden_size`).\n            - **summary_activation** (`Optional[str]`) -- Set to `\"tanh\"` to add a tanh activation to the output,\n              another string or `None` will add no activation.\n            - **summary_first_dropout** (`float`) -- Optional dropout probability before the projection and activation.\n            - **summary_last_dropout** (`float`)-- Optional dropout probability after the projection and activation.\n    \"\"\"\n\n    def __init__(self, config: PretrainedConfig):\n        super().__init__()\n\n        self.summary_type = getattr(config, \"summary_type\", \"last\")\n        if self.summary_type == \"attn\":\n            # We should use a standard multi-head attention module with absolute positional embedding for that.\n            # Cf. https://github.com/zihangdai/xlnet/blob/master/modeling.py#L253-L276\n            # We can probably just use the multi-head attention module of PyTorch >=1.1.0\n            raise NotImplementedError\n\n        self.summary = Identity()\n        if hasattr(config, \"summary_use_proj\") and config.summary_use_proj:\n            if hasattr(config, \"summary_proj_to_labels\") and config.summary_proj_to_labels and config.num_labels > 0:\n                num_classes = config.num_labels\n            else:\n                num_classes = config.hidden_size\n            self.summary = nn.Linear(config.hidden_size, num_classes)\n\n        activation_string = getattr(config, \"summary_activation\", None)\n        self.activation: Callable = get_activation(activation_string) if activation_string else Identity()\n\n        self.first_dropout = Identity()\n        if hasattr(config, \"summary_first_dropout\") and config.summary_first_dropout > 0:\n            self.first_dropout = nn.Dropout(config.summary_first_dropout)\n\n        self.last_dropout = Identity()\n        if hasattr(config, \"summary_last_dropout\") and config.summary_last_dropout > 0:\n            self.last_dropout = nn.Dropout(config.summary_last_dropout)\n\n    def forward(\n        self, hidden_states: torch.FloatTensor, cls_index: Optional[torch.LongTensor] = None\n    ) -> torch.FloatTensor:\n        \"\"\"\n        Compute a single vector summary of a sequence hidden states.\n\n        Args:\n            hidden_states (`torch.FloatTensor` of shape `[batch_size, seq_len, hidden_size]`):\n                The hidden states of the last layer.\n            cls_index (`torch.LongTensor` of shape `[batch_size]` or `[batch_size, ...]` where ... are optional leading dimensions of `hidden_states`, *optional*):\n                Used if `summary_type == \"cls_index\"` and takes the last token of the sequence as classification token.\n\n        Returns:\n            `torch.FloatTensor`: The summary of the sequence hidden states.\n        \"\"\"\n        if self.summary_type == \"last\":\n            output = hidden_states[:, -1]\n        elif self.summary_type == \"first\":\n            output = hidden_states[:, 0]\n        elif self.summary_type == \"mean\":\n            output = hidden_states.mean(dim=1)\n        elif self.summary_type == \"cls_index\":\n            if cls_index is None:\n                cls_index = torch.full_like(\n                    hidden_states[..., :1, :],\n                    hidden_states.shape[-2] - 1,\n                    dtype=torch.long,\n                )\n            else:\n                cls_index = cls_index.unsqueeze(-1).unsqueeze(-1)\n                cls_index = cls_index.expand((-1,) * (cls_index.dim() - 1) + (hidden_states.size(-1),))\n            # shape of cls_index: (bsz, XX, 1, hidden_size) where XX are optional leading dim of hidden_states\n            output = hidden_states.gather(-2, cls_index).squeeze(-2)  # shape (bsz, XX, hidden_size)\n        elif self.summary_type == \"attn\":\n            raise NotImplementedError\n\n        output = self.first_dropout(output)\n        output = self.summary(output)\n        output = self.activation(output)\n        output = self.last_dropout(output)\n\n        return output\n\n\ndef unwrap_model(model: nn.Module, recursive: bool = False) -> nn.Module:\n    \"\"\"\n    Recursively unwraps a model from potential containers (as used in distributed training).\n\n    Args:\n        model (`torch.nn.Module`): The model to unwrap.\n        recursive (`bool`, *optional*, defaults to `False`):\n            Whether to recursively extract all cases of `module.module` from `model` as well as unwrap child sublayers\n            recursively, not just the top-level distributed containers.\n    \"\"\"\n    # Use accelerate implementation if available (should always be the case when using torch)\n    # This is for pytorch, as we also have to handle things like dynamo\n    if is_accelerate_available():\n        kwargs = {}\n        if recursive:\n            if not is_accelerate_available(\"0.29.0\"):\n                raise RuntimeError(\n                    \"Setting `recursive=True` to `unwrap_model` requires `accelerate` v0.29.0. Please upgrade your version of accelerate\"\n                )\n            else:\n                kwargs[\"recursive\"] = recursive\n        return extract_model_from_parallel(model, **kwargs)\n    else:\n        # since there could be multiple levels of wrapping, unwrap recursively\n        if hasattr(model, \"module\"):\n            return unwrap_model(model.module)\n        else:\n            return model\n\n\ndef expand_device_map(device_map, param_names, start_prefix):\n    \"\"\"\n    Expand a device map to return the correspondance parameter name to device.\n    \"\"\"\n    new_device_map = {}\n    param_names = [p[len(start_prefix) :] for p in param_names if p.startswith(start_prefix)]\n    for module, device in device_map.items():\n        new_device_map.update(\n            {p: device for p in param_names if p == module or p.startswith(f\"{module}.\") or module == \"\"}\n        )\n    return new_device_map\n\n\ndef get_disk_only_shard_files(device_map, sharded_metadata, start_prefix):\n    \"\"\"\n    Returns the list of shard files containing only weights offloaded to disk.\n    \"\"\"\n\n    weight_map = {\n        p[len(start_prefix) :]: v for p, v in sharded_metadata[\"weight_map\"].items() if p.startswith(start_prefix)\n    }\n    files_content = collections.defaultdict(list)\n    for weight_name, filename in weight_map.items():\n        while len(weight_name) > 0 and weight_name not in device_map:\n            weight_name = \".\".join(weight_name.split(\".\")[:-1])\n        files_content[filename].append(device_map[weight_name])\n\n    return [fname for fname, devices in files_content.items() if set(devices) == {\"disk\"}]\n"
  },
  {
    "path": "xinference/thirdparty/indextts/infer.py",
    "content": "import os\n\nos.environ['HF_HUB_CACHE'] = './checkpoints/hf_cache'\nimport time\nfrom subprocess import CalledProcessError\nfrom typing import Dict, List\n\nimport torch\nimport torchaudio\nfrom torch.nn.utils.rnn import pad_sequence\nfrom omegaconf import OmegaConf\nfrom tqdm import tqdm\n\nimport warnings\n\nwarnings.filterwarnings(\"ignore\", category=FutureWarning)\nwarnings.filterwarnings(\"ignore\", category=UserWarning)\n\nfrom indextts.BigVGAN.models import BigVGAN as Generator\nfrom indextts.gpt.model import UnifiedVoice\nfrom indextts.utils.checkpoint import load_checkpoint\nfrom indextts.utils.feature_extractors import MelSpectrogramFeatures\n\nfrom indextts.utils.front import TextNormalizer, TextTokenizer\n\n\nclass IndexTTS:\n    def __init__(\n            self, cfg_path=\"checkpoints/config.yaml\", model_dir=\"checkpoints\", use_fp16=True, device=None,\n            use_cuda_kernel=None,\n    ):\n        \"\"\"\n        Args:\n            cfg_path (str): path to the config file.\n            model_dir (str): path to the model directory.\n            use_fp16 (bool): whether to use fp16.\n            device (str): device to use (e.g., 'cuda:0', 'cpu'). If None, it will be set automatically based on the availability of CUDA or MPS.\n            use_cuda_kernel (None | bool): whether to use BigVGan custom fused activation CUDA kernel, only for CUDA device.\n        \"\"\"\n        if device is not None:\n            self.device = device\n            self.use_fp16 = False if device == \"cpu\" else use_fp16\n            self.use_cuda_kernel = use_cuda_kernel is not None and use_cuda_kernel and device.startswith(\"cuda\")\n        elif torch.cuda.is_available():\n            self.device = \"cuda:0\"\n            self.use_fp16 = use_fp16\n            self.use_cuda_kernel = use_cuda_kernel is None or use_cuda_kernel\n        elif hasattr(torch, \"xpu\") and torch.xpu.is_available():\n            self.device = \"xpu\"\n            self.use_fp16 = use_fp16\n            self.use_cuda_kernel = False\n        elif hasattr(torch, \"mps\") and torch.backends.mps.is_available():\n            self.device = \"mps\"\n            self.use_fp16 = False  # Use float16 on MPS is overhead than float32\n            self.use_cuda_kernel = False\n        else:\n            self.device = \"cpu\"\n            self.use_fp16 = False\n            self.use_cuda_kernel = False\n            print(\">> Be patient, it may take a while to run in CPU mode.\")\n\n        self.cfg = OmegaConf.load(cfg_path)\n        self.model_dir = model_dir\n        self.dtype = torch.float16 if self.use_fp16 else None\n        self.stop_mel_token = self.cfg.gpt.stop_mel_token\n\n        # Comment-off to load the VQ-VAE model for debugging tokenizer\n        #   https://github.com/index-tts/index-tts/issues/34\n        #\n        # from indextts.vqvae.xtts_dvae import DiscreteVAE\n        # self.dvae = DiscreteVAE(**self.cfg.vqvae)\n        # self.dvae_path = os.path.join(self.model_dir, self.cfg.dvae_checkpoint)\n        # load_checkpoint(self.dvae, self.dvae_path)\n        # self.dvae = self.dvae.to(self.device)\n        # if self.use_fp16:\n        #     self.dvae.eval().half()\n        # else:\n        #     self.dvae.eval()\n        # print(\">> vqvae weights restored from:\", self.dvae_path)\n        self.gpt = UnifiedVoice(**self.cfg.gpt)\n        self.gpt_path = os.path.join(self.model_dir, self.cfg.gpt_checkpoint)\n        load_checkpoint(self.gpt, self.gpt_path)\n        self.gpt = self.gpt.to(self.device)\n        if self.use_fp16:\n            self.gpt.eval().half()\n        else:\n            self.gpt.eval()\n        print(\">> GPT weights restored from:\", self.gpt_path)\n        if self.use_fp16:\n            try:\n                import deepspeed\n\n                use_deepspeed = True\n            except (ImportError, OSError, CalledProcessError) as e:\n                use_deepspeed = False\n                print(f\">> DeepSpeed加载失败，回退到标准推理: {e}\")\n\n            self.gpt.post_init_gpt2_config(use_deepspeed=use_deepspeed, kv_cache=True, half=True)\n        else:\n            self.gpt.post_init_gpt2_config(use_deepspeed=False, kv_cache=False, half=False)\n\n        if self.use_cuda_kernel:\n            # preload the CUDA kernel for BigVGAN\n            try:\n                from indextts.BigVGAN.alias_free_activation.cuda import load\n\n                anti_alias_activation_cuda = load.load()\n                print(\">> Preload custom CUDA kernel for BigVGAN\", anti_alias_activation_cuda)\n            except Exception:\n                print(\">> Failed to load custom CUDA kernel for BigVGAN. Falling back to torch.\")\n                self.use_cuda_kernel = False\n        self.bigvgan = Generator(self.cfg.bigvgan, use_cuda_kernel=self.use_cuda_kernel)\n        self.bigvgan_path = os.path.join(self.model_dir, self.cfg.bigvgan_checkpoint)\n        vocoder_dict = torch.load(self.bigvgan_path, map_location=\"cpu\")\n        self.bigvgan.load_state_dict(vocoder_dict[\"generator\"])\n        self.bigvgan = self.bigvgan.to(self.device)\n        # remove weight norm on eval mode\n        self.bigvgan.remove_weight_norm()\n        self.bigvgan.eval()\n        print(\">> bigvgan weights restored from:\", self.bigvgan_path)\n        self.bpe_path = os.path.join(self.model_dir, self.cfg.dataset[\"bpe_model\"])\n        self.normalizer = TextNormalizer()\n        self.normalizer.load()\n        print(\">> TextNormalizer loaded\")\n        self.tokenizer = TextTokenizer(self.bpe_path, self.normalizer)\n        print(\">> bpe model loaded from:\", self.bpe_path)\n        # 缓存参考音频mel：\n        self.cache_audio_prompt = None\n        self.cache_cond_mel = None\n        # 进度引用显示（可选）\n        self.gr_progress = None\n        self.model_version = self.cfg.version if hasattr(self.cfg, \"version\") else None\n\n    def remove_long_silence(self, codes: torch.Tensor, silent_token=52, max_consecutive=30):\n        \"\"\"\n        Shrink special tokens (silent_token and stop_mel_token) in codes\n        codes: [B, T]\n        \"\"\"\n        code_lens = []\n        codes_list = []\n        device = codes.device\n        dtype = codes.dtype\n        isfix = False\n        for i in range(0, codes.shape[0]):\n            code = codes[i]\n            if not torch.any(code == self.stop_mel_token).item():\n                len_ = code.size(0)\n            else:\n                stop_mel_idx = (code == self.stop_mel_token).nonzero(as_tuple=False)\n                len_ = stop_mel_idx[0].item() if len(stop_mel_idx) > 0 else code.size(0)\n\n            count = torch.sum(code == silent_token).item()\n            if count > max_consecutive:\n                # code = code.cpu().tolist()\n                ncode_idx = []\n                n = 0\n                for k in range(len_):\n                    assert code[\n                               k] != self.stop_mel_token, f\"stop_mel_token {self.stop_mel_token} should be shrinked here\"\n                    if code[k] != silent_token:\n                        ncode_idx.append(k)\n                        n = 0\n                    elif code[k] == silent_token and n < 10:\n                        ncode_idx.append(k)\n                        n += 1\n                    # if (k == 0 and code[k] == 52) or (code[k] == 52 and code[k-1] == 52):\n                    #    n += 1\n                # new code\n                len_ = len(ncode_idx)\n                codes_list.append(code[ncode_idx])\n                isfix = True\n            else:\n                # shrink to len_\n                codes_list.append(code[:len_])\n            code_lens.append(len_)\n        if isfix:\n            if len(codes_list) > 1:\n                codes = pad_sequence(codes_list, batch_first=True, padding_value=self.stop_mel_token)\n            else:\n                codes = codes_list[0].unsqueeze(0)\n        else:\n            # unchanged\n            pass\n        # clip codes to max length\n        max_len = max(code_lens)\n        if max_len < codes.shape[1]:\n            codes = codes[:, :max_len]\n        code_lens = torch.tensor(code_lens, dtype=torch.long, device=device)\n        return codes, code_lens\n\n    def bucket_segments(self, segments, bucket_max_size=4) -> List[List[Dict]]:\n        \"\"\"\n        Segment data bucketing.\n        if ``bucket_max_size=1``, return all segments in one bucket.\n        \"\"\"\n        outputs: List[Dict] = []\n        for idx, sent in enumerate(segments):\n            outputs.append({\"idx\": idx, \"sent\": sent, \"len\": len(sent)})\n\n        if len(outputs) > bucket_max_size:\n            # split segments into buckets by segment length\n            buckets: List[List[Dict]] = []\n            factor = 1.5\n            last_bucket = None\n            last_bucket_sent_len_median = 0\n\n            for sent in sorted(outputs, key=lambda x: x[\"len\"]):\n                current_sent_len = sent[\"len\"]\n                if current_sent_len == 0:\n                    print(\">> skip empty segment\")\n                    continue\n                if last_bucket is None \\\n                        or current_sent_len >= int(last_bucket_sent_len_median * factor) \\\n                        or len(last_bucket) >= bucket_max_size:\n                    # new bucket\n                    buckets.append([sent])\n                    last_bucket = buckets[-1]\n                    last_bucket_sent_len_median = current_sent_len\n                else:\n                    # current bucket can hold more segments\n                    last_bucket.append(sent)  # sorted\n                    mid = len(last_bucket) // 2\n                    last_bucket_sent_len_median = last_bucket[mid][\"len\"]\n            last_bucket = None\n            # merge all buckets with size 1\n            out_buckets: List[List[Dict]] = []\n            only_ones: List[Dict] = []\n            for b in buckets:\n                if len(b) == 1:\n                    only_ones.append(b[0])\n                else:\n                    out_buckets.append(b)\n            if len(only_ones) > 0:\n                # merge into previous buckets if possible\n                # print(\"only_ones:\", [(o[\"idx\"], o[\"len\"]) for o in only_ones])\n                for i in range(len(out_buckets)):\n                    b = out_buckets[i]\n                    if len(b) < bucket_max_size:\n                        b.append(only_ones.pop(0))\n                        if len(only_ones) == 0:\n                            break\n                # combined all remaining sized 1 buckets\n                if len(only_ones) > 0:\n                    out_buckets.extend(\n                        [only_ones[i:i + bucket_max_size] for i in range(0, len(only_ones), bucket_max_size)])\n            return out_buckets\n        return [outputs]\n\n    def pad_tokens_cat(self, tokens: List[torch.Tensor]) -> torch.Tensor:\n        if self.model_version and self.model_version >= 1.5:\n            # 1.5版本以上，直接使用stop_text_token 右侧填充，填充到最大长度\n            # [1, N] -> [N,]\n            tokens = [t.squeeze(0) for t in tokens]\n            return pad_sequence(tokens, batch_first=True, padding_value=self.cfg.gpt.stop_text_token,\n                                padding_side=\"right\")\n        max_len = max(t.size(1) for t in tokens)\n        outputs = []\n        for tensor in tokens:\n            pad_len = max_len - tensor.size(1)\n            if pad_len > 0:\n                n = min(8, pad_len)\n                tensor = torch.nn.functional.pad(tensor, (0, n), value=self.cfg.gpt.stop_text_token)\n                tensor = torch.nn.functional.pad(tensor, (0, pad_len - n), value=self.cfg.gpt.start_text_token)\n            tensor = tensor[:, :max_len]\n            outputs.append(tensor)\n        tokens = torch.cat(outputs, dim=0)\n        return tokens\n\n    def torch_empty_cache(self):\n        try:\n            if \"cuda\" in str(self.device):\n                torch.cuda.empty_cache()\n            elif \"mps\" in str(self.device):\n                torch.mps.empty_cache()\n        except Exception as e:\n            pass\n\n    def _set_gr_progress(self, value, desc):\n        if self.gr_progress is not None:\n            self.gr_progress(value, desc=desc)\n\n    # 快速推理：对于“多句长文本”，可实现至少 2~10 倍以上的速度提升~ （First modified by sunnyboxs 2025-04-16）\n    def infer_fast(self, audio_prompt, text, output_path, verbose=False, max_text_tokens_per_segment=100,\n                   segments_bucket_max_size=4, **generation_kwargs):\n        \"\"\"\n        Args:\n            ``max_text_tokens_per_segment``: 分句的最大token数，默认``100``，可以根据GPU硬件情况调整\n                - 越小，batch 越多，推理速度越*快*，占用内存更多，可能影响质量\n                - 越大，batch 越少，推理速度越*慢*，占用内存和质量更接近于非快速推理\n            ``segments_bucket_max_size``: 分句分桶的最大容量，默认``4``，可以根据GPU内存调整\n                - 越大，bucket数量越少，batch越多，推理速度越*快*，占用内存更多，可能影响质量\n                - 越小，bucket数量越多，batch越少，推理速度越*慢*，占用内存和质量更接近于非快速推理\n        \"\"\"\n        print(\">> starting fast inference...\")\n\n        self._set_gr_progress(0, \"starting fast inference...\")\n        if verbose:\n            print(f\"origin text:{text}\")\n        start_time = time.perf_counter()\n\n        # 如果参考音频改变了，才需要重新生成 cond_mel, 提升速度\n        if self.cache_cond_mel is None or self.cache_audio_prompt != audio_prompt:\n            audio, sr = torchaudio.load(audio_prompt)\n            audio = torch.mean(audio, dim=0, keepdim=True)\n            if audio.shape[0] > 1:\n                audio = audio[0].unsqueeze(0)\n            audio = torchaudio.transforms.Resample(sr, 24000)(audio)\n\n            max_audio_length_seconds = 50  \n            max_audio_samples = int(max_audio_length_seconds * 24000)\n            \n            if audio.shape[1] > max_audio_samples:\n                if verbose:\n                    print(f\"Audio too long ({audio.shape[1]} samples), truncating to {max_audio_samples} samples\")\n                audio = audio[:, :max_audio_samples]\n\n            cond_mel = MelSpectrogramFeatures()(audio).to(self.device)\n            cond_mel_frame = cond_mel.shape[-1]\n            if verbose:\n                print(f\"cond_mel shape: {cond_mel.shape}\", \"dtype:\", cond_mel.dtype)\n\n            self.cache_audio_prompt = audio_prompt\n            self.cache_cond_mel = cond_mel\n        else:\n            cond_mel = self.cache_cond_mel\n            cond_mel_frame = cond_mel.shape[-1]\n            pass\n\n        auto_conditioning = cond_mel\n        cond_mel_lengths = torch.tensor([cond_mel_frame], device=self.device)\n\n        # text_tokens\n        text_tokens_list = self.tokenizer.tokenize(text)\n\n        segments = self.tokenizer.split_segments(text_tokens_list,\n                                                   max_text_tokens_per_segment=max_text_tokens_per_segment)\n        if verbose:\n            print(\">> text token count:\", len(text_tokens_list))\n            print(\"   segments count:\", len(segments))\n            print(\"   max_text_tokens_per_segment:\", max_text_tokens_per_segment)\n            print(*segments, sep=\"\\n\")\n        do_sample = generation_kwargs.pop(\"do_sample\", True)\n        top_p = generation_kwargs.pop(\"top_p\", 0.8)\n        top_k = generation_kwargs.pop(\"top_k\", 30)\n        temperature = generation_kwargs.pop(\"temperature\", 1.0)\n        autoregressive_batch_size = 1\n        length_penalty = generation_kwargs.pop(\"length_penalty\", 0.0)\n        num_beams = generation_kwargs.pop(\"num_beams\", 3)\n        repetition_penalty = generation_kwargs.pop(\"repetition_penalty\", 10.0)\n        max_mel_tokens = generation_kwargs.pop(\"max_mel_tokens\", 600)\n        sampling_rate = 24000\n        # lang = \"EN\"\n        # lang = \"ZH\"\n        wavs = []\n        gpt_gen_time = 0\n        gpt_forward_time = 0\n        bigvgan_time = 0\n\n        # text processing\n        all_text_tokens: List[List[torch.Tensor]] = []\n        self._set_gr_progress(0.1, \"text processing...\")\n        bucket_max_size = segments_bucket_max_size if self.device != \"cpu\" else 1\n        all_segments = self.bucket_segments(segments, bucket_max_size=bucket_max_size)\n        bucket_count = len(all_segments)\n        if verbose:\n            print(\">> segments bucket_count:\", bucket_count,\n                  \"bucket sizes:\", [(len(s), [t[\"idx\"] for t in s]) for s in all_segments],\n                  \"bucket_max_size:\", bucket_max_size)\n        for segments in all_segments:\n            temp_tokens: List[torch.Tensor] = []\n            all_text_tokens.append(temp_tokens)\n            for item in segments:\n                sent = item[\"sent\"]\n                text_tokens = self.tokenizer.convert_tokens_to_ids(sent)\n                text_tokens = torch.tensor(text_tokens, dtype=torch.int32, device=self.device).unsqueeze(0)\n                if verbose:\n                    print(text_tokens)\n                    print(f\"text_tokens shape: {text_tokens.shape}, text_tokens type: {text_tokens.dtype}\")\n                    # debug tokenizer\n                    text_token_syms = self.tokenizer.convert_ids_to_tokens(text_tokens[0].tolist())\n                    print(\"text_token_syms is same as segment tokens\", text_token_syms == sent)\n                temp_tokens.append(text_tokens)\n\n        # Sequential processing of bucketing data\n        all_batch_num = sum(len(s) for s in all_segments)\n        all_batch_codes = []\n        processed_num = 0\n        for item_tokens in all_text_tokens:\n            batch_num = len(item_tokens)\n            if batch_num > 1:\n                batch_text_tokens = self.pad_tokens_cat(item_tokens)\n            else:\n                batch_text_tokens = item_tokens[0]\n            processed_num += batch_num\n            # gpt speech\n            self._set_gr_progress(0.2 + 0.3 * processed_num / all_batch_num,\n                                  f\"gpt speech inference {processed_num}/{all_batch_num}...\")\n            m_start_time = time.perf_counter()\n            with torch.no_grad():\n                with torch.amp.autocast(batch_text_tokens.device.type, enabled=self.dtype is not None,\n                                        dtype=self.dtype):\n                    temp_codes = self.gpt.inference_speech(auto_conditioning, batch_text_tokens,\n                                                           cond_mel_lengths=cond_mel_lengths,\n                                                           # text_lengths=text_len,\n                                                           do_sample=do_sample,\n                                                           top_p=top_p,\n                                                           top_k=top_k,\n                                                           temperature=temperature,\n                                                           num_return_sequences=autoregressive_batch_size,\n                                                           length_penalty=length_penalty,\n                                                           num_beams=num_beams,\n                                                           repetition_penalty=repetition_penalty,\n                                                           max_generate_length=max_mel_tokens,\n                                                           **generation_kwargs)\n                    all_batch_codes.append(temp_codes)\n            gpt_gen_time += time.perf_counter() - m_start_time\n\n        # gpt latent\n        self._set_gr_progress(0.5, \"gpt latents inference...\")\n        all_idxs = []\n        all_latents = []\n        has_warned = False\n        for batch_codes, batch_tokens, batch_segments in zip(all_batch_codes, all_text_tokens, all_segments):\n            for i in range(batch_codes.shape[0]):\n                codes = batch_codes[i]  # [x]\n                if not has_warned and codes[-1] != self.stop_mel_token:\n                    warnings.warn(\n                        f\"WARN: generation stopped due to exceeding `max_mel_tokens` ({max_mel_tokens}). \"\n                        f\"Consider reducing `max_text_tokens_per_segment`({max_text_tokens_per_segment}) or increasing `max_mel_tokens`.\",\n                        category=RuntimeWarning\n                    )\n                    has_warned = True\n                codes = codes.unsqueeze(0)  # [x] -> [1, x]\n                if verbose:\n                    print(\"codes:\", codes.shape)\n                    print(codes)\n                codes, code_lens = self.remove_long_silence(codes, silent_token=52, max_consecutive=30)\n                if verbose:\n                    print(\"fix codes:\", codes.shape)\n                    print(codes)\n                    print(\"code_lens:\", code_lens)\n                text_tokens = batch_tokens[i]\n                all_idxs.append(batch_segments[i][\"idx\"])\n                m_start_time = time.perf_counter()\n                with torch.no_grad():\n                    with torch.amp.autocast(text_tokens.device.type, enabled=self.dtype is not None, dtype=self.dtype):\n                        latent = \\\n                            self.gpt(auto_conditioning, text_tokens,\n                                     torch.tensor([text_tokens.shape[-1]], device=text_tokens.device), codes,\n                                     code_lens * self.gpt.mel_length_compression,\n                                     cond_mel_lengths=torch.tensor([auto_conditioning.shape[-1]],\n                                                                   device=text_tokens.device),\n                                     return_latent=True, clip_inputs=False)\n                        gpt_forward_time += time.perf_counter() - m_start_time\n                        all_latents.append(latent)\n        del all_batch_codes, all_text_tokens, all_segments\n        # bigvgan chunk\n        chunk_size = 2\n        all_latents = [all_latents[all_idxs.index(i)] for i in range(len(all_latents))]\n        if verbose:\n            print(\">> all_latents:\", len(all_latents))\n            print(\"  latents length:\", [l.shape[1] for l in all_latents])\n        chunk_latents = [all_latents[i: i + chunk_size] for i in range(0, len(all_latents), chunk_size)]\n        chunk_length = len(chunk_latents)\n        latent_length = len(all_latents)\n\n        # bigvgan chunk decode\n        self._set_gr_progress(0.7, \"bigvgan decoding...\")\n        tqdm_progress = tqdm(total=latent_length, desc=\"bigvgan\")\n        for items in chunk_latents:\n            tqdm_progress.update(len(items))\n            latent = torch.cat(items, dim=1)\n            with torch.no_grad():\n                with torch.amp.autocast(latent.device.type, enabled=self.dtype is not None, dtype=self.dtype):\n                    m_start_time = time.perf_counter()\n                    wav, _ = self.bigvgan(latent, auto_conditioning.transpose(1, 2))\n                    bigvgan_time += time.perf_counter() - m_start_time\n                    wav = wav.squeeze(1)\n                    pass\n            wav = torch.clamp(32767 * wav, -32767.0, 32767.0)\n            wavs.append(wav.cpu())  # to cpu before saving\n\n        # clear cache\n        tqdm_progress.close()  # 确保进度条被关闭\n        del all_latents, chunk_latents\n        end_time = time.perf_counter()\n        self.torch_empty_cache()\n\n        # wav audio output\n        self._set_gr_progress(0.9, \"saving audio...\")\n        wav = torch.cat(wavs, dim=1)\n        wav_length = wav.shape[-1] / sampling_rate\n        print(f\">> Reference audio length: {cond_mel_frame * 256 / sampling_rate:.2f} seconds\")\n        print(f\">> gpt_gen_time: {gpt_gen_time:.2f} seconds\")\n        print(f\">> gpt_forward_time: {gpt_forward_time:.2f} seconds\")\n        print(f\">> bigvgan_time: {bigvgan_time:.2f} seconds\")\n        print(f\">> Total fast inference time: {end_time - start_time:.2f} seconds\")\n        print(f\">> Generated audio length: {wav_length:.2f} seconds\")\n        print(f\">> [fast] bigvgan chunk_length: {chunk_length}\")\n        print(f\">> [fast] batch_num: {all_batch_num} bucket_max_size: {bucket_max_size}\",\n              f\"bucket_count: {bucket_count}\" if bucket_max_size > 1 else \"\")\n        print(f\">> [fast] RTF: {(end_time - start_time) / wav_length:.4f}\")\n\n        # save audio\n        wav = wav.cpu()  # to cpu\n        if output_path:\n            # 直接保存音频到指定路径中\n            os.makedirs(os.path.dirname(output_path), exist_ok=True)\n            torchaudio.save(output_path, wav.type(torch.int16), sampling_rate)\n            print(\">> wav file saved to:\", output_path)\n            return output_path\n        else:\n            # 返回以符合Gradio的格式要求\n            wav_data = wav.type(torch.int16)\n            wav_data = wav_data.numpy().T\n            return (sampling_rate, wav_data)\n\n    # 原始推理模式\n    def infer(self, audio_prompt, text, output_path, verbose=False, max_text_tokens_per_segment=120,\n              **generation_kwargs):\n        print(\">> starting inference...\")\n        self._set_gr_progress(0, \"starting inference...\")\n        if verbose:\n            print(f\"origin text:{text}\")\n        start_time = time.perf_counter()\n\n        # 如果参考音频改变了，才需要重新生成 cond_mel, 提升速度\n        if self.cache_cond_mel is None or self.cache_audio_prompt != audio_prompt:\n            audio, sr = torchaudio.load(audio_prompt)\n            audio = torch.mean(audio, dim=0, keepdim=True)\n            if audio.shape[0] > 1:\n                audio = audio[0].unsqueeze(0)\n            audio = torchaudio.transforms.Resample(sr, 24000)(audio)\n            cond_mel = MelSpectrogramFeatures()(audio).to(self.device)\n            cond_mel_frame = cond_mel.shape[-1]\n            if verbose:\n                print(f\"cond_mel shape: {cond_mel.shape}\", \"dtype:\", cond_mel.dtype)\n\n            self.cache_audio_prompt = audio_prompt\n            self.cache_cond_mel = cond_mel\n        else:\n            cond_mel = self.cache_cond_mel\n            cond_mel_frame = cond_mel.shape[-1]\n            pass\n\n        self._set_gr_progress(0.1, \"text processing...\")\n        auto_conditioning = cond_mel\n        text_tokens_list = self.tokenizer.tokenize(text)\n        segments = self.tokenizer.split_segments(text_tokens_list, max_text_tokens_per_segment)\n        if verbose:\n            print(\"text token count:\", len(text_tokens_list))\n            print(\"segments count:\", len(segments))\n            print(\"max_text_tokens_per_segment:\", max_text_tokens_per_segment)\n            print(*segments, sep=\"\\n\")\n        do_sample = generation_kwargs.pop(\"do_sample\", True)\n        top_p = generation_kwargs.pop(\"top_p\", 0.8)\n        top_k = generation_kwargs.pop(\"top_k\", 30)\n        temperature = generation_kwargs.pop(\"temperature\", 1.0)\n        autoregressive_batch_size = 1\n        length_penalty = generation_kwargs.pop(\"length_penalty\", 0.0)\n        num_beams = generation_kwargs.pop(\"num_beams\", 3)\n        repetition_penalty = generation_kwargs.pop(\"repetition_penalty\", 10.0)\n        max_mel_tokens = generation_kwargs.pop(\"max_mel_tokens\", 600)\n        sampling_rate = 24000\n        # lang = \"EN\"\n        # lang = \"ZH\"\n        wavs = []\n        gpt_gen_time = 0\n        gpt_forward_time = 0\n        bigvgan_time = 0\n        progress = 0\n        has_warned = False\n        for sent in segments:\n            text_tokens = self.tokenizer.convert_tokens_to_ids(sent)\n            text_tokens = torch.tensor(text_tokens, dtype=torch.int32, device=self.device).unsqueeze(0)\n            # text_tokens = F.pad(text_tokens, (0, 1))  # This may not be necessary.\n            # text_tokens = F.pad(text_tokens, (1, 0), value=0)\n            # text_tokens = F.pad(text_tokens, (0, 1), value=1)\n            if verbose:\n                print(text_tokens)\n                print(f\"text_tokens shape: {text_tokens.shape}, text_tokens type: {text_tokens.dtype}\")\n                # debug tokenizer\n                text_token_syms = self.tokenizer.convert_ids_to_tokens(text_tokens[0].tolist())\n                print(\"text_token_syms is same as segment tokens\", text_token_syms == sent)\n\n            # text_len = torch.IntTensor([text_tokens.size(1)], device=text_tokens.device)\n            # print(text_len)\n            progress += 1\n            self._set_gr_progress(0.2 + 0.4 * (progress - 1) / len(segments),\n                                  f\"gpt latents inference {progress}/{len(segments)}...\")\n            m_start_time = time.perf_counter()\n            with torch.no_grad():\n                with torch.amp.autocast(text_tokens.device.type, enabled=self.dtype is not None, dtype=self.dtype):\n                    codes = self.gpt.inference_speech(auto_conditioning, text_tokens,\n                                                      cond_mel_lengths=torch.tensor([auto_conditioning.shape[-1]],\n                                                                                    device=text_tokens.device),\n                                                      # text_lengths=text_len,\n                                                      do_sample=do_sample,\n                                                      top_p=top_p,\n                                                      top_k=top_k,\n                                                      temperature=temperature,\n                                                      num_return_sequences=autoregressive_batch_size,\n                                                      length_penalty=length_penalty,\n                                                      num_beams=num_beams,\n                                                      repetition_penalty=repetition_penalty,\n                                                      max_generate_length=max_mel_tokens,\n                                                      **generation_kwargs)\n                gpt_gen_time += time.perf_counter() - m_start_time\n                if not has_warned and (codes[:, -1] != self.stop_mel_token).any():\n                    warnings.warn(\n                        f\"WARN: generation stopped due to exceeding `max_mel_tokens` ({max_mel_tokens}). \"\n                        f\"Input text tokens: {text_tokens.shape[1]}. \"\n                        f\"Consider reducing `max_text_tokens_per_segment`({max_text_tokens_per_segment}) or increasing `max_mel_tokens`.\",\n                        category=RuntimeWarning\n                    )\n                    has_warned = True\n\n                code_lens = torch.tensor([codes.shape[-1]], device=codes.device, dtype=codes.dtype)\n                if verbose:\n                    print(codes, type(codes))\n                    print(f\"codes shape: {codes.shape}, codes type: {codes.dtype}\")\n                    print(f\"code len: {code_lens}\")\n\n                # remove ultra-long silence if exits\n                # temporarily fix the long silence bug.\n                codes, code_lens = self.remove_long_silence(codes, silent_token=52, max_consecutive=30)\n                if verbose:\n                    print(codes, type(codes))\n                    print(f\"fix codes shape: {codes.shape}, codes type: {codes.dtype}\")\n                    print(f\"code len: {code_lens}\")\n                self._set_gr_progress(0.2 + 0.4 * progress / len(segments),\n                                      f\"gpt speech inference {progress}/{len(segments)}...\")\n                m_start_time = time.perf_counter()\n                # latent, text_lens_out, code_lens_out = \\\n                with torch.amp.autocast(text_tokens.device.type, enabled=self.dtype is not None, dtype=self.dtype):\n                    latent = \\\n                        self.gpt(auto_conditioning, text_tokens,\n                                 torch.tensor([text_tokens.shape[-1]], device=text_tokens.device), codes,\n                                 code_lens * self.gpt.mel_length_compression,\n                                 cond_mel_lengths=torch.tensor([auto_conditioning.shape[-1]],\n                                                               device=text_tokens.device),\n                                 return_latent=True, clip_inputs=False)\n                    gpt_forward_time += time.perf_counter() - m_start_time\n\n                    m_start_time = time.perf_counter()\n                    wav, _ = self.bigvgan(latent, auto_conditioning.transpose(1, 2))\n                    bigvgan_time += time.perf_counter() - m_start_time\n                    wav = wav.squeeze(1)\n\n                wav = torch.clamp(32767 * wav, -32767.0, 32767.0)\n                if verbose:\n                    print(f\"wav shape: {wav.shape}\", \"min:\", wav.min(), \"max:\", wav.max())\n                # wavs.append(wav[:, :-512])\n                wavs.append(wav.cpu())  # to cpu before saving\n        end_time = time.perf_counter()\n        self._set_gr_progress(0.9, \"saving audio...\")\n        wav = torch.cat(wavs, dim=1)\n        wav_length = wav.shape[-1] / sampling_rate\n        print(f\">> Reference audio length: {cond_mel_frame * 256 / sampling_rate:.2f} seconds\")\n        print(f\">> gpt_gen_time: {gpt_gen_time:.2f} seconds\")\n        print(f\">> gpt_forward_time: {gpt_forward_time:.2f} seconds\")\n        print(f\">> bigvgan_time: {bigvgan_time:.2f} seconds\")\n        print(f\">> Total inference time: {end_time - start_time:.2f} seconds\")\n        print(f\">> Generated audio length: {wav_length:.2f} seconds\")\n        print(f\">> RTF: {(end_time - start_time) / wav_length:.4f}\")\n\n        # save audio\n        wav = wav.cpu()  # to cpu\n        if output_path:\n            # 直接保存音频到指定路径中\n            if os.path.isfile(output_path):\n                os.remove(output_path)\n                print(\">> remove old wav file:\", output_path)\n            if os.path.dirname(output_path) != \"\":\n                os.makedirs(os.path.dirname(output_path), exist_ok=True)\n            torchaudio.save(output_path, wav.type(torch.int16), sampling_rate)\n            print(\">> wav file saved to:\", output_path)\n            return output_path\n        else:\n            # 返回以符合Gradio的格式要求\n            wav_data = wav.type(torch.int16)\n            wav_data = wav_data.numpy().T\n            return (sampling_rate, wav_data)\n\nif __name__ == \"__main__\":\n    prompt_wav = \"examples/voice_01.wav\"\n    text = '欢迎大家来体验indextts2，并给予我们意见与反馈，谢谢大家。'\n\n    tts = IndexTTS(cfg_path=\"checkpoints/config.yaml\", model_dir=\"checkpoints\", use_cuda_kernel=False)\n    tts.infer(audio_prompt=prompt_wav, text=text, output_path=\"gen.wav\", verbose=True)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/infer_v2.py",
    "content": "import os\nfrom subprocess import CalledProcessError\n\n# Set HF_HUB_CACHE only if not already set (allow custom cache directory)\nif \"HF_HUB_CACHE\" not in os.environ:\n    os.environ[\"HF_HUB_CACHE\"] = \"./checkpoints/hf_cache\"\nimport json\nimport re\nimport time\nimport warnings\n\nimport librosa\nimport numpy as np\nimport torch\nimport torchaudio\nfrom torch.nn.utils.rnn import pad_sequence\n\nwarnings.filterwarnings(\"ignore\", category=FutureWarning)\nwarnings.filterwarnings(\"ignore\", category=UserWarning)\n\nimport random\n\nimport safetensors\nimport torch.nn.functional as F\nfrom huggingface_hub import hf_hub_download\nfrom indextts.gpt.model_v2 import UnifiedVoice\nfrom indextts.s2mel.modules.audio import mel_spectrogram\nfrom indextts.s2mel.modules.bigvgan import bigvgan\nfrom indextts.s2mel.modules.campplus.DTDNN import CAMPPlus\nfrom indextts.s2mel.modules.commons import MyModel, load_checkpoint2\nfrom indextts.utils.checkpoint import load_checkpoint\nfrom indextts.utils.front import TextNormalizer, TextTokenizer\nfrom indextts.utils.maskgct_utils import build_semantic_codec, build_semantic_model\nfrom modelscope import AutoModelForCausalLM\nfrom omegaconf import OmegaConf\nfrom transformers import AutoTokenizer, SeamlessM4TFeatureExtractor\n\n\nclass IndexTTS2:\n    def __init__(\n        self,\n        cfg_path=\"checkpoints/config.yaml\",\n        model_dir=\"checkpoints\",\n        use_fp16=False,\n        device=None,\n        use_cuda_kernel=None,\n        use_deepspeed=False,\n        small_models_dir=None,\n    ):\n        \"\"\"\n        Args:\n            cfg_path (str): path to the config file.\n            model_dir (str): path to the model directory.\n            use_fp16 (bool): whether to use fp16.\n            device (str): device to use (e.g., 'cuda:0', 'cpu'). If None, it will be set automatically based on the availability of CUDA or MPS.\n            use_cuda_kernel (None | bool): whether to use BigVGan custom fused activation CUDA kernel, only for CUDA device.\n            use_deepspeed (bool): whether to use DeepSpeed or not.\n            small_models_dir (str): path to directory containing small models for offline deployment.\n        \"\"\"\n\n        print(f\">> IndexTTS2.__init__ called with small_models_dir: {small_models_dir}\")\n\n        def get_small_model_path(model_name):\n            \"\"\"Helper function to get small model path from small_models_dir\"\"\"\n            if small_models_dir is not None and os.path.exists(small_models_dir):\n                import glob\n\n                # Direct structure model names\n                direct_model_names = {\n                    \"w2v-bert-2.0\": \"w2v-bert-2.0\",\n                    \"campplus\": \"campplus\",\n                    \"bigvgan\": \"bigvgan\",\n                    \"semantic_codec\": None,  # Special handling below\n                }\n\n                # Special handling for semantic_codec\n                if model_name == \"semantic_codec\":\n                    # Look for semantic_codec in any MaskGCT directory\n                    for item in os.listdir(small_models_dir):\n                        item_path = os.path.join(small_models_dir, item)\n                        if os.path.isdir(item_path) and \"MaskGCT\" in item:\n                            # New structure: direct semantic_codec path\n                            semantic_path = os.path.join(item_path, \"semantic_codec\")\n                            if os.path.exists(semantic_path):\n                                return semantic_path\n                    # Also try direct structure\n                    direct_path = os.path.join(small_models_dir, \"semantic_codec\")\n                    if os.path.exists(direct_path):\n                        return direct_path\n                else:\n                    # Try new direct structure first\n                    direct_name = direct_model_names.get(model_name)\n                    if direct_name:\n                        direct_path = os.path.join(small_models_dir, direct_name)\n                        if os.path.exists(direct_path):\n                            return direct_path\n\n                    # Fallback to old HuggingFace structure for compatibility\n                    old_model_mappings = {\n                        \"w2v-bert-2.0\": \"models--facebook--w2v-bert-2.0\",\n                        \"campplus\": \"models--funasr--campplus\",\n                        \"bigvgan\": \"models--nvidia--bigvgan_v2_22khz_80band_256x\",\n                    }\n\n                    # Try old structure\n                    mapped_name = old_model_mappings.get(model_name)\n                    if mapped_name:\n                        mapped_base_path = os.path.join(small_models_dir, mapped_name)\n\n                        # Check if it's a HuggingFace cache structure with snapshots\n                        snapshots_path = os.path.join(mapped_base_path, \"snapshots\")\n                        if os.path.exists(snapshots_path):\n                            # Find the first snapshot directory\n                            for snapshot in os.listdir(snapshots_path):\n                                snapshot_dir = os.path.join(snapshots_path, snapshot)\n                                if os.path.isdir(snapshot_dir):\n                                    return snapshot_dir\n\n                        # Fallback to direct path if snapshots don't exist\n                        if os.path.exists(mapped_base_path):\n                            return mapped_base_path\n\n                    # Try other possibilities for compatibility\n                    possible_patterns = [\n                        # Generic HuggingFace structure\n                        os.path.join(small_models_dir, f\"models--*--{model_name}\"),\n                    ]\n\n                    for pattern in possible_patterns:\n                        if \"*\" in pattern:\n                            matches = glob.glob(pattern)\n                            for match in matches:\n                                # Check for snapshots structure\n                                snapshots_path = os.path.join(match, \"snapshots\")\n                                if os.path.exists(snapshots_path):\n                                    for snapshot in os.listdir(snapshots_path):\n                                        snapshot_dir = os.path.join(\n                                            snapshots_path, snapshot\n                                        )\n                                        if os.path.isdir(snapshot_dir):\n                                            return snapshot_dir\n                                # Fallback to direct match\n                                if os.path.exists(match):\n                                    return match\n\n            return None\n\n        if device is not None:\n            self.device = device\n            self.use_fp16 = False if device == \"cpu\" else use_fp16\n            self.use_cuda_kernel = (\n                use_cuda_kernel is not None\n                and use_cuda_kernel\n                and device.startswith(\"cuda\")\n            )\n        elif torch.cuda.is_available():\n            self.device = \"cuda:0\"\n            self.use_fp16 = use_fp16\n            self.use_cuda_kernel = use_cuda_kernel is None or use_cuda_kernel\n        elif hasattr(torch, \"xpu\") and torch.xpu.is_available():\n            self.device = \"xpu\"\n            self.use_fp16 = use_fp16\n            self.use_cuda_kernel = False\n        elif hasattr(torch, \"mps\") and torch.backends.mps.is_available():\n            self.device = \"mps\"\n            self.use_fp16 = False  # Use float16 on MPS is overhead than float32\n            self.use_cuda_kernel = False\n        else:\n            self.device = \"cpu\"\n            self.use_fp16 = False\n            self.use_cuda_kernel = False\n            print(\">> Be patient, it may take a while to run in CPU mode.\")\n\n        self.cfg = OmegaConf.load(cfg_path)\n        self.model_dir = model_dir\n        self.dtype = torch.float16 if self.use_fp16 else None\n        self.stop_mel_token = self.cfg.gpt.stop_mel_token\n\n        self.qwen_emo = QwenEmotion(\n            os.path.join(self.model_dir, self.cfg.qwen_emo_path)\n        )\n\n        self.gpt = UnifiedVoice(**self.cfg.gpt)\n        self.gpt_path = os.path.join(self.model_dir, self.cfg.gpt_checkpoint)\n        load_checkpoint(self.gpt, self.gpt_path)\n        self.gpt = self.gpt.to(self.device)\n        if self.use_fp16:\n            self.gpt.eval().half()\n        else:\n            self.gpt.eval()\n        print(\">> GPT weights restored from:\", self.gpt_path)\n\n        if use_deepspeed:\n            try:\n                import deepspeed\n            except (ImportError, OSError, CalledProcessError) as e:\n                use_deepspeed = False\n                print(\n                    f\">> Failed to load DeepSpeed. Falling back to normal inference. Error: {e}\"\n                )\n\n        self.gpt.post_init_gpt2_config(\n            use_deepspeed=use_deepspeed, kv_cache=True, half=self.use_fp16\n        )\n\n        if self.use_cuda_kernel:\n            # preload the CUDA kernel for BigVGAN\n            try:\n                from indextts.s2mel.modules.bigvgan.alias_free_activation.cuda import (\n                    activation1d,\n                )\n\n                print(\n                    \">> Preload custom CUDA kernel for BigVGAN\",\n                    activation1d.anti_alias_activation_cuda,\n                )\n            except Exception as e:\n                print(\n                    \">> Failed to load custom CUDA kernel for BigVGAN. Falling back to torch.\"\n                )\n                print(f\"{e!r}\")\n                self.use_cuda_kernel = False\n\n        w2v_bert_path = get_small_model_path(\"w2v-bert-2.0\")\n        print(f\">> w2v_bert_path lookup result: {w2v_bert_path}\")\n        if w2v_bert_path is not None:\n            self.extract_features = SeamlessM4TFeatureExtractor.from_pretrained(\n                w2v_bert_path\n            )\n            print(f\">> w2v-bert model loaded from local path: {w2v_bert_path}\")\n        else:\n            self.extract_features = SeamlessM4TFeatureExtractor.from_pretrained(\n                \"facebook/w2v-bert-2.0\"\n            )\n            print(\">> w2v-bert model loaded from huggingface: facebook/w2v-bert-2.0\")\n        self.semantic_model, self.semantic_mean, self.semantic_std = (\n            build_semantic_model(\n                os.path.join(self.model_dir, self.cfg.w2v_stat), w2v_bert_path\n            )\n        )\n        self.semantic_model = self.semantic_model.to(self.device)\n        self.semantic_model.eval()\n        self.semantic_mean = self.semantic_mean.to(self.device)\n        self.semantic_std = self.semantic_std.to(self.device)\n\n        semantic_codec = build_semantic_codec(self.cfg.semantic_codec)\n        semantic_codec_path = get_small_model_path(\"semantic_codec\")\n        print(f\">> semantic_codec_path lookup result: {semantic_codec_path}\")\n        if semantic_codec_path is not None:\n            semantic_code_ckpt = os.path.join(semantic_codec_path, \"model.safetensors\")\n            if not os.path.exists(semantic_code_ckpt):\n                raise FileNotFoundError(\n                    f\"semantic_codec model file not found: {semantic_code_ckpt}\"\n                )\n            print(\n                f\">> semantic_codec model loaded from local path: {semantic_code_ckpt}\"\n            )\n        else:\n            semantic_code_ckpt = hf_hub_download(\n                \"amphion/MaskGCT\",\n                filename=\"semantic_codec/model.safetensors\",\n                cache_dir=os.environ.get(\"HF_HUB_CACHE\"),\n            )\n            print(\">> semantic_codec model loaded from huggingface: amphion/MaskGCT\")\n        safetensors.torch.load_model(semantic_codec, semantic_code_ckpt)\n        self.semantic_codec = semantic_codec.to(self.device)\n        self.semantic_codec.eval()\n        print(\">> semantic_codec weights restored from: {}\".format(semantic_code_ckpt))\n\n        s2mel_path = os.path.join(self.model_dir, self.cfg.s2mel_checkpoint)\n        s2mel = MyModel(self.cfg.s2mel, use_gpt_latent=True)\n        s2mel, _, _, _ = load_checkpoint2(\n            s2mel,\n            None,\n            s2mel_path,\n            load_only_params=True,\n            ignore_modules=[],\n            is_distributed=False,\n        )\n        self.s2mel = s2mel.to(self.device)\n        self.s2mel.models[\"cfm\"].estimator.setup_caches(\n            max_batch_size=1, max_seq_length=8192\n        )\n        self.s2mel.eval()\n        print(\">> s2mel weights restored from:\", s2mel_path)\n\n        # load campplus_model\n        campplus_path = get_small_model_path(\"campplus\")\n        print(f\">> campplus_path lookup result: {campplus_path}\")\n        if campplus_path is not None:\n            campplus_ckpt_path = os.path.join(campplus_path, \"campplus_cn_common.bin\")\n            if not os.path.exists(campplus_ckpt_path):\n                raise FileNotFoundError(\n                    f\"campplus model file not found: {campplus_ckpt_path}\"\n                )\n            print(f\">> campplus model loaded from local path: {campplus_ckpt_path}\")\n        else:\n            campplus_ckpt_path = hf_hub_download(\n                \"funasr/campplus\",\n                filename=\"campplus_cn_common.bin\",\n                cache_dir=os.environ.get(\"HF_HUB_CACHE\"),\n            )\n            print(\">> campplus model loaded from huggingface: funasr/campplus\")\n        campplus_model = CAMPPlus(feat_dim=80, embedding_size=192)\n        campplus_model.load_state_dict(\n            torch.load(campplus_ckpt_path, map_location=\"cpu\")\n        )\n        self.campplus_model = campplus_model.to(self.device)\n        self.campplus_model.eval()\n        print(\">> campplus_model weights restored from:\", campplus_ckpt_path)\n\n        bigvgan_path = get_small_model_path(\"bigvgan\")\n        print(f\">> bigvgan_path lookup result: {bigvgan_path}\")\n        if bigvgan_path is not None:\n            bigvgan_name = bigvgan_path\n            print(f\">> bigvgan model loaded from local path: {bigvgan_path}\")\n        else:\n            bigvgan_name = self.cfg.vocoder.name\n            print(f\">> bigvgan model loaded from default: {bigvgan_name}\")\n        self.bigvgan = bigvgan.BigVGAN.from_pretrained(\n            bigvgan_name, use_cuda_kernel=self.use_cuda_kernel\n        )\n        self.bigvgan = self.bigvgan.to(self.device)\n        self.bigvgan.remove_weight_norm()\n        self.bigvgan.eval()\n        print(\">> bigvgan weights restored from:\", bigvgan_name)\n\n        self.bpe_path = os.path.join(self.model_dir, self.cfg.dataset[\"bpe_model\"])\n        self.normalizer = TextNormalizer()\n        self.normalizer.load()\n        print(\">> TextNormalizer loaded\")\n        self.tokenizer = TextTokenizer(self.bpe_path, self.normalizer)\n        print(\">> bpe model loaded from:\", self.bpe_path)\n\n        emo_matrix = torch.load(os.path.join(self.model_dir, self.cfg.emo_matrix))\n        self.emo_matrix = emo_matrix.to(self.device)\n        self.emo_num = list(self.cfg.emo_num)\n\n        spk_matrix = torch.load(os.path.join(self.model_dir, self.cfg.spk_matrix))\n        self.spk_matrix = spk_matrix.to(self.device)\n\n        self.emo_matrix = torch.split(self.emo_matrix, self.emo_num)\n        self.spk_matrix = torch.split(self.spk_matrix, self.emo_num)\n\n        mel_fn_args = {\n            \"n_fft\": self.cfg.s2mel[\"preprocess_params\"][\"spect_params\"][\"n_fft\"],\n            \"win_size\": self.cfg.s2mel[\"preprocess_params\"][\"spect_params\"][\n                \"win_length\"\n            ],\n            \"hop_size\": self.cfg.s2mel[\"preprocess_params\"][\"spect_params\"][\n                \"hop_length\"\n            ],\n            \"num_mels\": self.cfg.s2mel[\"preprocess_params\"][\"spect_params\"][\"n_mels\"],\n            \"sampling_rate\": self.cfg.s2mel[\"preprocess_params\"][\"sr\"],\n            \"fmin\": self.cfg.s2mel[\"preprocess_params\"][\"spect_params\"].get(\"fmin\", 0),\n            \"fmax\": (\n                None\n                if self.cfg.s2mel[\"preprocess_params\"][\"spect_params\"].get(\n                    \"fmax\", \"None\"\n                )\n                == \"None\"\n                else 8000\n            ),\n            \"center\": False,\n        }\n        self.mel_fn = lambda x: mel_spectrogram(x, **mel_fn_args)\n\n        # 缓存参考音频：\n        self.cache_spk_cond = None\n        self.cache_s2mel_style = None\n        self.cache_s2mel_prompt = None\n        self.cache_spk_audio_prompt = None\n        self.cache_emo_cond = None\n        self.cache_emo_audio_prompt = None\n        self.cache_mel = None\n\n        # 进度引用显示（可选）\n        self.gr_progress = None\n        self.model_version = self.cfg.version if hasattr(self.cfg, \"version\") else None\n\n    @torch.no_grad()\n    def get_emb(self, input_features, attention_mask):\n        vq_emb = self.semantic_model(\n            input_features=input_features,\n            attention_mask=attention_mask,\n            output_hidden_states=True,\n        )\n        feat = vq_emb.hidden_states[17]  # (B, T, C)\n        feat = (feat - self.semantic_mean) / self.semantic_std\n        return feat\n\n    def remove_long_silence(\n        self, codes: torch.Tensor, silent_token=52, max_consecutive=30\n    ):\n        \"\"\"\n        Shrink special tokens (silent_token and stop_mel_token) in codes\n        codes: [B, T]\n        \"\"\"\n        code_lens = []\n        codes_list = []\n        device = codes.device\n        dtype = codes.dtype\n        isfix = False\n        for i in range(0, codes.shape[0]):\n            code = codes[i]\n            if not torch.any(code == self.stop_mel_token).item():\n                len_ = code.size(0)\n            else:\n                stop_mel_idx = (code == self.stop_mel_token).nonzero(as_tuple=False)\n                len_ = stop_mel_idx[0].item() if len(stop_mel_idx) > 0 else code.size(0)\n\n            count = torch.sum(code == silent_token).item()\n            if count > max_consecutive:\n                # code = code.cpu().tolist()\n                ncode_idx = []\n                n = 0\n                for k in range(len_):\n                    assert (\n                        code[k] != self.stop_mel_token\n                    ), f\"stop_mel_token {self.stop_mel_token} should be shrinked here\"\n                    if code[k] != silent_token:\n                        ncode_idx.append(k)\n                        n = 0\n                    elif code[k] == silent_token and n < 10:\n                        ncode_idx.append(k)\n                        n += 1\n                    # if (k == 0 and code[k] == 52) or (code[k] == 52 and code[k-1] == 52):\n                    #    n += 1\n                # new code\n                len_ = len(ncode_idx)\n                codes_list.append(code[ncode_idx])\n                isfix = True\n            else:\n                # shrink to len_\n                codes_list.append(code[:len_])\n            code_lens.append(len_)\n        if isfix:\n            if len(codes_list) > 1:\n                codes = pad_sequence(\n                    codes_list, batch_first=True, padding_value=self.stop_mel_token\n                )\n            else:\n                codes = codes_list[0].unsqueeze(0)\n        else:\n            # unchanged\n            pass\n        # clip codes to max length\n        max_len = max(code_lens)\n        if max_len < codes.shape[1]:\n            codes = codes[:, :max_len]\n        code_lens = torch.tensor(code_lens, dtype=torch.long, device=device)\n        return codes, code_lens\n\n    def insert_interval_silence(self, wavs, sampling_rate=22050, interval_silence=200):\n        \"\"\"\n        Insert silences between generated segments.\n        wavs: List[torch.tensor]\n        \"\"\"\n\n        if not wavs or interval_silence <= 0:\n            return wavs\n\n        # get channel_size\n        channel_size = wavs[0].size(0)\n        # get silence tensor\n        sil_dur = int(sampling_rate * interval_silence / 1000.0)\n        sil_tensor = torch.zeros(channel_size, sil_dur)\n\n        wavs_list = []\n        for i, wav in enumerate(wavs):\n            wavs_list.append(wav)\n            if i < len(wavs) - 1:\n                wavs_list.append(sil_tensor)\n\n        return wavs_list\n\n    def _set_gr_progress(self, value, desc):\n        if self.gr_progress is not None:\n            self.gr_progress(value, desc=desc)\n\n    def _load_and_cut_audio(\n        self, audio_path, max_audio_length_seconds, verbose=False, sr=None\n    ):\n        if not sr:\n            audio, sr = librosa.load(audio_path)\n        else:\n            audio, _ = librosa.load(audio_path, sr=sr)\n        audio = torch.tensor(audio).unsqueeze(0)\n        max_audio_samples = int(max_audio_length_seconds * sr)\n\n        if audio.shape[1] > max_audio_samples:\n            if verbose:\n                print(\n                    f\"Audio too long ({audio.shape[1]} samples), truncating to {max_audio_samples} samples\"\n                )\n            audio = audio[:, :max_audio_samples]\n        return audio, sr\n\n    # 原始推理模式\n    def infer(\n        self,\n        spk_audio_prompt,\n        text,\n        output_path,\n        emo_audio_prompt=None,\n        emo_alpha=1.0,\n        emo_vector=None,\n        use_emo_text=False,\n        emo_text=None,\n        use_random=False,\n        interval_silence=200,\n        verbose=False,\n        max_text_tokens_per_segment=120,\n        **generation_kwargs,\n    ):\n        print(\">> starting inference...\")\n        self._set_gr_progress(0, \"starting inference...\")\n        # if verbose:\n        print(\n            f\"origin text:{text}, spk_audio_prompt:{spk_audio_prompt}, \"\n            f\"emo_audio_prompt:{emo_audio_prompt}, emo_alpha:{emo_alpha}, \"\n            f\"emo_vector:{emo_vector}, use_emo_text:{use_emo_text}, \"\n            f\"emo_text:{emo_text}\"\n        )\n        start_time = time.perf_counter()\n\n        if use_emo_text or emo_vector is not None:\n            # we're using a text or emotion vector guidance; so we must remove\n            # \"emotion reference voice\", to ensure we use correct emotion mixing!\n            emo_audio_prompt = None\n\n        if use_emo_text:\n            # automatically generate emotion vectors from text prompt\n            if emo_text is None:\n                emo_text = text  # use main text prompt\n            emo_dict = self.qwen_emo.inference(emo_text)\n            print(f\"detected emotion vectors from text: {emo_dict}\")\n            # convert ordered dict to list of vectors; the order is VERY important!\n            emo_vector = list(emo_dict.values())\n\n        if emo_vector is not None:\n            # we have emotion vectors; they can't be blended via alpha mixing\n            # in the main inference process later, so we must pre-calculate\n            # their new strengths here based on the alpha instead!\n            emo_vector_scale = max(0.0, min(1.0, emo_alpha))\n            if emo_vector_scale != 1.0:\n                # scale each vector and truncate to 4 decimals (for nicer printing)\n                emo_vector = [\n                    int(x * emo_vector_scale * 10000) / 10000 for x in emo_vector\n                ]\n                print(f\"scaled emotion vectors to {emo_vector_scale}x: {emo_vector}\")\n\n        if emo_audio_prompt is None:\n            # we are not using any external \"emotion reference voice\"; use\n            # speaker's voice as the main emotion reference audio.\n            emo_audio_prompt = spk_audio_prompt\n            # must always use alpha=1.0 when we don't have an external reference voice\n            emo_alpha = 1.0\n\n        # 如果参考音频改变了，才需要重新生成, 提升速度\n        if (\n            self.cache_spk_cond is None\n            or self.cache_spk_audio_prompt != spk_audio_prompt\n        ):\n            audio, sr = self._load_and_cut_audio(spk_audio_prompt, 15, verbose)\n            audio_22k = torchaudio.transforms.Resample(sr, 22050)(audio)\n            audio_16k = torchaudio.transforms.Resample(sr, 16000)(audio)\n\n            inputs = self.extract_features(\n                audio_16k, sampling_rate=16000, return_tensors=\"pt\"\n            )\n            input_features = inputs[\"input_features\"]\n            attention_mask = inputs[\"attention_mask\"]\n            input_features = input_features.to(self.device)\n            attention_mask = attention_mask.to(self.device)\n            spk_cond_emb = self.get_emb(input_features, attention_mask)\n\n            _, S_ref = self.semantic_codec.quantize(spk_cond_emb)\n            ref_mel = self.mel_fn(audio_22k.to(spk_cond_emb.device).float())\n            ref_target_lengths = torch.LongTensor([ref_mel.size(2)]).to(ref_mel.device)\n            feat = torchaudio.compliance.kaldi.fbank(\n                audio_16k.to(ref_mel.device),\n                num_mel_bins=80,\n                dither=0,\n                sample_frequency=16000,\n            )\n            feat = feat - feat.mean(\n                dim=0, keepdim=True\n            )  # feat2另外一个滤波器能量组特征[922, 80]\n            style = self.campplus_model(\n                feat.unsqueeze(0)\n            )  # 参考音频的全局style2[1,192]\n\n            prompt_condition = self.s2mel.models[\"length_regulator\"](\n                S_ref, ylens=ref_target_lengths, n_quantizers=3, f0=None\n            )[0]\n\n            self.cache_spk_cond = spk_cond_emb\n            self.cache_s2mel_style = style\n            self.cache_s2mel_prompt = prompt_condition\n            self.cache_spk_audio_prompt = spk_audio_prompt\n            self.cache_mel = ref_mel\n        else:\n            style = self.cache_s2mel_style\n            prompt_condition = self.cache_s2mel_prompt\n            spk_cond_emb = self.cache_spk_cond\n            ref_mel = self.cache_mel\n\n        if emo_vector is not None:\n            weight_vector = torch.tensor(emo_vector).to(self.device)\n            if use_random:\n                random_index = [random.randint(0, x - 1) for x in self.emo_num]\n            else:\n                random_index = [\n                    find_most_similar_cosine(style, tmp) for tmp in self.spk_matrix\n                ]\n\n            emo_matrix = [\n                tmp[index].unsqueeze(0)\n                for index, tmp in zip(random_index, self.emo_matrix)\n            ]\n            emo_matrix = torch.cat(emo_matrix, 0)\n            emovec_mat = weight_vector.unsqueeze(1) * emo_matrix\n            emovec_mat = torch.sum(emovec_mat, 0)\n            emovec_mat = emovec_mat.unsqueeze(0)\n\n        if (\n            self.cache_emo_cond is None\n            or self.cache_emo_audio_prompt != emo_audio_prompt\n        ):\n            emo_audio, _ = self._load_and_cut_audio(\n                emo_audio_prompt, 15, verbose, sr=16000\n            )\n            emo_inputs = self.extract_features(\n                emo_audio, sampling_rate=16000, return_tensors=\"pt\"\n            )\n            emo_input_features = emo_inputs[\"input_features\"]\n            emo_attention_mask = emo_inputs[\"attention_mask\"]\n            emo_input_features = emo_input_features.to(self.device)\n            emo_attention_mask = emo_attention_mask.to(self.device)\n            emo_cond_emb = self.get_emb(emo_input_features, emo_attention_mask)\n\n            self.cache_emo_cond = emo_cond_emb\n            self.cache_emo_audio_prompt = emo_audio_prompt\n        else:\n            emo_cond_emb = self.cache_emo_cond\n\n        self._set_gr_progress(0.1, \"text processing...\")\n        text_tokens_list = self.tokenizer.tokenize(text)\n        segments = self.tokenizer.split_segments(\n            text_tokens_list, max_text_tokens_per_segment\n        )\n        segments_count = len(segments)\n        if verbose:\n            print(\"text_tokens_list:\", text_tokens_list)\n            print(\"segments count:\", segments_count)\n            print(\"max_text_tokens_per_segment:\", max_text_tokens_per_segment)\n            print(*segments, sep=\"\\n\")\n        do_sample = generation_kwargs.pop(\"do_sample\", True)\n        top_p = generation_kwargs.pop(\"top_p\", 0.8)\n        top_k = generation_kwargs.pop(\"top_k\", 30)\n        temperature = generation_kwargs.pop(\"temperature\", 0.8)\n        autoregressive_batch_size = 1\n        length_penalty = generation_kwargs.pop(\"length_penalty\", 0.0)\n        num_beams = generation_kwargs.pop(\"num_beams\", 3)\n        repetition_penalty = generation_kwargs.pop(\"repetition_penalty\", 10.0)\n        max_mel_tokens = generation_kwargs.pop(\"max_mel_tokens\", 1500)\n        sampling_rate = 22050\n\n        wavs = []\n        gpt_gen_time = 0\n        gpt_forward_time = 0\n        s2mel_time = 0\n        bigvgan_time = 0\n        has_warned = False\n        for seg_idx, sent in enumerate(segments):\n            self._set_gr_progress(\n                0.2 + 0.7 * seg_idx / segments_count,\n                f\"speech synthesis {seg_idx + 1}/{segments_count}...\",\n            )\n\n            text_tokens = self.tokenizer.convert_tokens_to_ids(sent)\n            text_tokens = torch.tensor(\n                text_tokens, dtype=torch.int32, device=self.device\n            ).unsqueeze(0)\n            if verbose:\n                print(text_tokens)\n                print(\n                    f\"text_tokens shape: {text_tokens.shape}, text_tokens type: {text_tokens.dtype}\"\n                )\n                # debug tokenizer\n                text_token_syms = self.tokenizer.convert_ids_to_tokens(\n                    text_tokens[0].tolist()\n                )\n                print(\n                    \"text_token_syms is same as segment tokens\", text_token_syms == sent\n                )\n\n            m_start_time = time.perf_counter()\n            with torch.no_grad():\n                with torch.amp.autocast(\n                    text_tokens.device.type,\n                    enabled=self.dtype is not None,\n                    dtype=self.dtype,\n                ):\n                    emovec = self.gpt.merge_emovec(\n                        spk_cond_emb,\n                        emo_cond_emb,\n                        torch.tensor(\n                            [spk_cond_emb.shape[-1]], device=text_tokens.device\n                        ),\n                        torch.tensor(\n                            [emo_cond_emb.shape[-1]], device=text_tokens.device\n                        ),\n                        alpha=emo_alpha,\n                    )\n\n                    if emo_vector is not None:\n                        emovec = emovec_mat + (1 - torch.sum(weight_vector)) * emovec\n                        # emovec = emovec_mat\n\n                    codes, speech_conditioning_latent = self.gpt.inference_speech(\n                        spk_cond_emb,\n                        text_tokens,\n                        emo_cond_emb,\n                        cond_lengths=torch.tensor(\n                            [spk_cond_emb.shape[-1]], device=text_tokens.device\n                        ),\n                        emo_cond_lengths=torch.tensor(\n                            [emo_cond_emb.shape[-1]], device=text_tokens.device\n                        ),\n                        emo_vec=emovec,\n                        do_sample=True,\n                        top_p=top_p,\n                        top_k=top_k,\n                        temperature=temperature,\n                        num_return_sequences=autoregressive_batch_size,\n                        length_penalty=length_penalty,\n                        num_beams=num_beams,\n                        repetition_penalty=repetition_penalty,\n                        max_generate_length=max_mel_tokens,\n                        **generation_kwargs,\n                    )\n\n                gpt_gen_time += time.perf_counter() - m_start_time\n                if not has_warned and (codes[:, -1] != self.stop_mel_token).any():\n                    warnings.warn(\n                        f\"WARN: generation stopped due to exceeding `max_mel_tokens` ({max_mel_tokens}). \"\n                        f\"Input text tokens: {text_tokens.shape[1]}. \"\n                        f\"Consider reducing `max_text_tokens_per_segment`({max_text_tokens_per_segment}) or increasing `max_mel_tokens`.\",\n                        category=RuntimeWarning,\n                    )\n                    has_warned = True\n\n                code_lens = torch.tensor(\n                    [codes.shape[-1]], device=codes.device, dtype=codes.dtype\n                )\n                #                 if verbose:\n                #                     print(codes, type(codes))\n                #                     print(f\"codes shape: {codes.shape}, codes type: {codes.dtype}\")\n                #                     print(f\"code len: {code_lens}\")\n\n                code_lens = []\n                for code in codes:\n                    if self.stop_mel_token not in code:\n                        code_lens.append(len(code))\n                        code_len = len(code)\n                    else:\n                        len_ = (code == self.stop_mel_token).nonzero(as_tuple=False)[\n                            0\n                        ] + 1\n                        code_len = len_ - 1\n                    code_lens.append(code_len)\n                codes = codes[:, :code_len]\n                code_lens = torch.LongTensor(code_lens)\n                code_lens = code_lens.to(self.device)\n                if verbose:\n                    print(codes, type(codes))\n                    print(f\"fix codes shape: {codes.shape}, codes type: {codes.dtype}\")\n                    print(f\"code len: {code_lens}\")\n\n                m_start_time = time.perf_counter()\n                use_speed = (\n                    torch.zeros(spk_cond_emb.size(0)).to(spk_cond_emb.device).long()\n                )\n                with torch.amp.autocast(\n                    text_tokens.device.type,\n                    enabled=self.dtype is not None,\n                    dtype=self.dtype,\n                ):\n                    latent = self.gpt(\n                        speech_conditioning_latent,\n                        text_tokens,\n                        torch.tensor(\n                            [text_tokens.shape[-1]], device=text_tokens.device\n                        ),\n                        codes,\n                        torch.tensor([codes.shape[-1]], device=text_tokens.device),\n                        emo_cond_emb,\n                        cond_mel_lengths=torch.tensor(\n                            [spk_cond_emb.shape[-1]], device=text_tokens.device\n                        ),\n                        emo_cond_mel_lengths=torch.tensor(\n                            [emo_cond_emb.shape[-1]], device=text_tokens.device\n                        ),\n                        emo_vec=emovec,\n                        use_speed=use_speed,\n                    )\n                    gpt_forward_time += time.perf_counter() - m_start_time\n\n                dtype = None\n                with torch.amp.autocast(\n                    text_tokens.device.type, enabled=dtype is not None, dtype=dtype\n                ):\n                    m_start_time = time.perf_counter()\n                    diffusion_steps = 25\n                    inference_cfg_rate = 0.7\n                    latent = self.s2mel.models[\"gpt_layer\"](latent)\n                    S_infer = self.semantic_codec.quantizer.vq2emb(codes.unsqueeze(1))\n                    S_infer = S_infer.transpose(1, 2)\n                    S_infer = S_infer + latent\n                    target_lengths = (code_lens * 1.72).long()\n\n                    cond = self.s2mel.models[\"length_regulator\"](\n                        S_infer, ylens=target_lengths, n_quantizers=3, f0=None\n                    )[0]\n                    cat_condition = torch.cat([prompt_condition, cond], dim=1)\n                    vc_target = self.s2mel.models[\"cfm\"].inference(\n                        cat_condition,\n                        torch.LongTensor([cat_condition.size(1)]).to(cond.device),\n                        ref_mel,\n                        style,\n                        None,\n                        diffusion_steps,\n                        inference_cfg_rate=inference_cfg_rate,\n                    )\n                    vc_target = vc_target[:, :, ref_mel.size(-1) :]\n                    s2mel_time += time.perf_counter() - m_start_time\n\n                    m_start_time = time.perf_counter()\n                    wav = self.bigvgan(vc_target.float()).squeeze().unsqueeze(0)\n                    print(wav.shape)\n                    bigvgan_time += time.perf_counter() - m_start_time\n                    wav = wav.squeeze(1)\n\n                wav = torch.clamp(32767 * wav, -32767.0, 32767.0)\n                if verbose:\n                    print(\n                        f\"wav shape: {wav.shape}\", \"min:\", wav.min(), \"max:\", wav.max()\n                    )\n                # wavs.append(wav[:, :-512])\n                wavs.append(wav.cpu())  # to cpu before saving\n        end_time = time.perf_counter()\n\n        self._set_gr_progress(0.9, \"saving audio...\")\n        wavs = self.insert_interval_silence(\n            wavs, sampling_rate=sampling_rate, interval_silence=interval_silence\n        )\n        wav = torch.cat(wavs, dim=1)\n        wav_length = wav.shape[-1] / sampling_rate\n        print(f\">> gpt_gen_time: {gpt_gen_time:.2f} seconds\")\n        print(f\">> gpt_forward_time: {gpt_forward_time:.2f} seconds\")\n        print(f\">> s2mel_time: {s2mel_time:.2f} seconds\")\n        print(f\">> bigvgan_time: {bigvgan_time:.2f} seconds\")\n        print(f\">> Total inference time: {end_time - start_time:.2f} seconds\")\n        print(f\">> Generated audio length: {wav_length:.2f} seconds\")\n        print(f\">> RTF: {(end_time - start_time) / wav_length:.4f}\")\n\n        # save audio\n        wav = wav.cpu()  # to cpu\n        if output_path:\n            # 直接保存音频到指定路径中\n            if os.path.isfile(output_path):\n                os.remove(output_path)\n                print(\">> remove old wav file:\", output_path)\n            if os.path.dirname(output_path) != \"\":\n                os.makedirs(os.path.dirname(output_path), exist_ok=True)\n            torchaudio.save(output_path, wav.type(torch.int16), sampling_rate)\n            print(\">> wav file saved to:\", output_path)\n            return output_path\n        else:\n            # 返回以符合Gradio的格式要求\n            wav_data = wav.type(torch.int16)\n            wav_data = wav_data.numpy().T\n            return (sampling_rate, wav_data)\n\n    def infer_stream(\n        self,\n        spk_audio_prompt,\n        text,\n        emo_audio_prompt=None,\n        emo_alpha=1.0,\n        emo_vector=None,\n        use_emo_text=False,\n        emo_text=None,\n        use_random=False,\n        chunk_size_samples=22050,  # 1 second chunks at 22050Hz\n        verbose=False,\n        max_text_tokens_per_segment=120,\n        **generation_kwargs,\n    ):\n        \"\"\"\n        Streaming inference for IndexTTS2.\n        Generates audio chunks incrementally to reduce latency.\n\n        Args:\n            chunk_size_samples: Number of audio samples per chunk (default: 22050 = 1 second at 22050Hz)\n            Other args are the same as the infer() method\n\n        Yields:\n            numpy.ndarray: Audio chunks as float32 arrays\n        \"\"\"\n        print(\">> starting streaming inference...\")\n\n        # For initial implementation, we'll use a memory-optimized approach:\n        # Generate the complete audio first, then yield it in chunks\n        # This provides streaming output while maintaining audio quality\n\n        # Reuse the existing inference logic but get the audio tensor directly\n        temp_output_path = None\n        import os\n        import tempfile\n\n        try:\n            # print(\">> Creating temporary file...\")\n            # Create a temporary file for the complete audio\n            with tempfile.NamedTemporaryFile(suffix=\".wav\", delete=False) as temp_file:\n                temp_output_path = temp_file.name\n\n            # print(f\">> Generating audio to: {temp_output_path}\")\n            # Generate complete audio using existing infer method\n            # Note: For memory efficiency, we could modify this to work with in-memory tensors\n            # in a future version, but this approach ensures maximum compatibility\n            self.infer(\n                spk_audio_prompt=spk_audio_prompt,\n                text=text,\n                output_path=temp_output_path,\n                emo_audio_prompt=emo_audio_prompt,\n                emo_alpha=emo_alpha,\n                emo_vector=emo_vector,\n                use_emo_text=use_emo_text,\n                emo_text=emo_text,\n                use_random=use_random,\n                verbose=verbose,\n                max_text_tokens_per_segment=max_text_tokens_per_segment,\n                **generation_kwargs,\n            )\n\n            # print(\">> Loading generated audio...\")\n            # Load the generated audio\n            import torchaudio\n\n            wav, sample_rate = torchaudio.load(temp_output_path)\n            wav = wav.squeeze(0)  # Remove channel dimension if present\n\n            # Convert to numpy and normalize to float32 [-1, 1]\n            wav_numpy = wav.numpy().astype(np.float32)\n            if wav_numpy.dtype != np.float32:\n                wav_numpy = wav_numpy / 32768.0  # Convert from int16 to float32\n\n            # print(f\">> Audio loaded: {len(wav_numpy)} samples at {sample_rate}Hz\")\n            # Memory optimization: process in chunks without storing entire audio\n            total_samples = len(wav_numpy)\n            yielded_samples = 0\n            chunk_count = 0\n\n            for start_idx in range(0, total_samples, chunk_size_samples):\n                end_idx = min(start_idx + chunk_size_samples, total_samples)\n                chunk = wav_numpy[start_idx:end_idx]\n\n                if len(chunk) > 0:  # Only yield non-empty chunks\n                    chunk_count += 1\n                    # print(f\">> Yielding chunk {chunk_count}: {len(chunk)} samples\")\n                    yield chunk\n                    yielded_samples += len(chunk)\n\n                # Memory cleanup: allow garbage collection of processed chunks\n                if start_idx > 0 and start_idx % (chunk_size_samples * 10) == 0:\n                    # Periodically suggest garbage collection for long audio\n                    import gc\n\n                    gc.collect()\n\n            # print(f\">> Streaming complete: yielded {yielded_samples} samples in {chunk_count} chunks\")\n\n        except Exception as e:\n            # print(f\">> Error in streaming inference: {e}\")\n            # import traceback\n            # traceback.print_exc()\n            raise\n        finally:\n            # Clean up temporary file\n            if temp_output_path and os.path.exists(temp_output_path):\n                try:\n                    os.unlink(temp_output_path)\n                    # print(f\">> Cleaned up temp file: {temp_output_path}\")\n                except Exception:\n                    pass\n\n\ndef find_most_similar_cosine(query_vector, matrix):\n    query_vector = query_vector.float()\n    matrix = matrix.float()\n\n    similarities = F.cosine_similarity(query_vector, matrix, dim=1)\n    most_similar_index = torch.argmax(similarities)\n    return most_similar_index\n\n\nclass QwenEmotion:\n    def __init__(self, model_dir):\n        self.model_dir = model_dir\n        self.tokenizer = AutoTokenizer.from_pretrained(self.model_dir)\n        self.model = AutoModelForCausalLM.from_pretrained(\n            self.model_dir, torch_dtype=\"float16\", device_map=\"auto\"  # \"auto\"\n        )\n        self.prompt = \"文本情感分类\"\n        self.cn_key_to_en = {\n            \"高兴\": \"happy\",\n            \"愤怒\": \"angry\",\n            \"悲伤\": \"sad\",\n            \"恐惧\": \"afraid\",\n            \"反感\": \"disgusted\",\n            # TODO: the \"低落\" (melancholic) emotion will always be mapped to\n            # \"悲伤\" (sad) by QwenEmotion's text analysis. it doesn't know the\n            # difference between those emotions even if user writes exact words.\n            # SEE: `self.melancholic_words` for current workaround.\n            \"低落\": \"melancholic\",\n            \"惊讶\": \"surprised\",\n            \"自然\": \"calm\",\n        }\n        self.desired_vector_order = [\n            \"高兴\",\n            \"愤怒\",\n            \"悲伤\",\n            \"恐惧\",\n            \"反感\",\n            \"低落\",\n            \"惊讶\",\n            \"自然\",\n        ]\n        self.melancholic_words = {\n            # emotion text phrases that will force QwenEmotion's \"悲伤\" (sad) detection\n            # to become \"低落\" (melancholic) instead, to fix limitations mentioned above.\n            \"低落\",\n            \"melancholy\",\n            \"melancholic\",\n            \"depression\",\n            \"depressed\",\n            \"gloomy\",\n        }\n        self.max_score = 1.2\n        self.min_score = 0.0\n\n    def clamp_score(self, value):\n        return max(self.min_score, min(self.max_score, value))\n\n    def convert(self, content):\n        # generate emotion vector dictionary:\n        # - insert values in desired order (Python 3.7+ `dict` remembers insertion order)\n        # - convert Chinese keys to English\n        # - clamp all values to the allowed min/max range\n        # - use 0.0 for any values that were missing in `content`\n        emotion_dict = {\n            self.cn_key_to_en[cn_key]: self.clamp_score(content.get(cn_key, 0.0))\n            for cn_key in self.desired_vector_order\n        }\n\n        # default to a calm/neutral voice if all emotion vectors were empty\n        if all(val <= 0.0 for val in emotion_dict.values()):\n            print(\">> no emotions detected; using default calm/neutral voice\")\n            emotion_dict[\"calm\"] = 1.0\n\n        return emotion_dict\n\n    def inference(self, text_input):\n        start = time.time()\n        messages = [\n            {\"role\": \"system\", \"content\": f\"{self.prompt}\"},\n            {\"role\": \"user\", \"content\": f\"{text_input}\"},\n        ]\n        text = self.tokenizer.apply_chat_template(\n            messages,\n            tokenize=False,\n            add_generation_prompt=True,\n            enable_thinking=False,\n        )\n        model_inputs = self.tokenizer([text], return_tensors=\"pt\").to(self.model.device)\n\n        # conduct text completion\n        generated_ids = self.model.generate(\n            **model_inputs,\n            max_new_tokens=32768,\n            pad_token_id=self.tokenizer.eos_token_id,\n        )\n        output_ids = generated_ids[0][len(model_inputs.input_ids[0]) :].tolist()\n\n        # parsing thinking content\n        try:\n            # rindex finding 151668 (</think>)\n            index = len(output_ids) - output_ids[::-1].index(151668)\n        except ValueError:\n            index = 0\n\n        content = self.tokenizer.decode(output_ids[index:], skip_special_tokens=True)\n\n        # decode the JSON emotion detections as a dictionary\n        try:\n            content = json.loads(content)\n        except json.decoder.JSONDecodeError:\n            # invalid JSON; fallback to manual string parsing\n            # print(\">> parsing QwenEmotion response\", content)\n            content = {\n                m.group(1): float(m.group(2))\n                for m in re.finditer(r'([^\\s\":.,]+?)\"?\\s*:\\s*([\\d.]+)', content)\n            }\n            # print(\">> dict result\", content)\n\n        # workaround for QwenEmotion's inability to distinguish \"悲伤\" (sad) vs \"低落\" (melancholic).\n        # if we detect any of the IndexTTS \"melancholic\" words, we swap those vectors\n        # to encode the \"sad\" emotion as \"melancholic\" (instead of sadness).\n        text_input_lower = text_input.lower()\n        if any(word in text_input_lower for word in self.melancholic_words):\n            # print(\">> before vec swap\", content)\n            content[\"悲伤\"], content[\"低落\"] = content.get(\"低落\", 0.0), content.get(\n                \"悲伤\", 0.0\n            )\n            # print(\">>  after vec swap\", content)\n\n        return self.convert(content)\n\n\nif __name__ == \"__main__\":\n    prompt_wav = \"examples/voice_01.wav\"\n    text = \"欢迎大家来体验indextts2，并给予我们意见与反馈，谢谢大家。\"\n\n    tts = IndexTTS2(\n        cfg_path=\"checkpoints/config.yaml\",\n        model_dir=\"checkpoints\",\n        use_cuda_kernel=False,\n    )\n    tts.infer(\n        spk_audio_prompt=prompt_wav, text=text, output_path=\"gen.wav\", verbose=True\n    )\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/__init__.py",
    "content": "__version__ = \"1.0.0\"\n\n# preserved here for legacy reasons\n__model_version__ = \"latest\"\n\nfrom xinference.thirdparty import audiotools\n\naudiotools.ml.BaseModel.INTERN += [\"dac.**\"]\naudiotools.ml.BaseModel.EXTERN += [\"einops\"]\n\n\nfrom . import nn\nfrom . import model\nfrom . import utils\nfrom .model import DAC\nfrom .model import DACFile\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/__main__.py",
    "content": "import sys\n\nimport argbind\n\nfrom dac.utils import download\nfrom dac.utils.decode import decode\nfrom dac.utils.encode import encode\n\nSTAGES = [\"encode\", \"decode\", \"download\"]\n\n\ndef run(stage: str):\n    \"\"\"Run stages.\n\n    Parameters\n    ----------\n    stage : str\n        Stage to run\n    \"\"\"\n    if stage not in STAGES:\n        raise ValueError(f\"Unknown command: {stage}. Allowed commands are {STAGES}\")\n    stage_fn = globals()[stage]\n\n    if stage == \"download\":\n        stage_fn()\n        return\n\n    stage_fn()\n\n\nif __name__ == \"__main__\":\n    group = sys.argv.pop(1)\n    args = argbind.parse_args(group=group)\n\n    with argbind.scope(args):\n        run(group)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/model/__init__.py",
    "content": "from .base import CodecMixin\nfrom .base import DACFile\nfrom .dac import DAC\nfrom .discriminator import Discriminator\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/model/base.py",
    "content": "import math\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Union\n\nimport numpy as np\nimport torch\nimport tqdm\nfrom audiotools import AudioSignal\nfrom torch import nn\n\nSUPPORTED_VERSIONS = [\"1.0.0\"]\n\n\n@dataclass\nclass DACFile:\n    codes: torch.Tensor\n\n    # Metadata\n    chunk_length: int\n    original_length: int\n    input_db: float\n    channels: int\n    sample_rate: int\n    padding: bool\n    dac_version: str\n\n    def save(self, path):\n        artifacts = {\n            \"codes\": self.codes.numpy().astype(np.uint16),\n            \"metadata\": {\n                \"input_db\": self.input_db.numpy().astype(np.float32),\n                \"original_length\": self.original_length,\n                \"sample_rate\": self.sample_rate,\n                \"chunk_length\": self.chunk_length,\n                \"channels\": self.channels,\n                \"padding\": self.padding,\n                \"dac_version\": SUPPORTED_VERSIONS[-1],\n            },\n        }\n        path = Path(path).with_suffix(\".dac\")\n        with open(path, \"wb\") as f:\n            np.save(f, artifacts)\n        return path\n\n    @classmethod\n    def load(cls, path):\n        artifacts = np.load(path, allow_pickle=True)[()]\n        codes = torch.from_numpy(artifacts[\"codes\"].astype(int))\n        if artifacts[\"metadata\"].get(\"dac_version\", None) not in SUPPORTED_VERSIONS:\n            raise RuntimeError(\n                f\"Given file {path} can't be loaded with this version of descript-audio-codec.\"\n            )\n        return cls(codes=codes, **artifacts[\"metadata\"])\n\n\nclass CodecMixin:\n    @property\n    def padding(self):\n        if not hasattr(self, \"_padding\"):\n            self._padding = True\n        return self._padding\n\n    @padding.setter\n    def padding(self, value):\n        assert isinstance(value, bool)\n\n        layers = [\n            l for l in self.modules() if isinstance(l, (nn.Conv1d, nn.ConvTranspose1d))\n        ]\n\n        for layer in layers:\n            if value:\n                if hasattr(layer, \"original_padding\"):\n                    layer.padding = layer.original_padding\n            else:\n                layer.original_padding = layer.padding\n                layer.padding = tuple(0 for _ in range(len(layer.padding)))\n\n        self._padding = value\n\n    def get_delay(self):\n        # Any number works here, delay is invariant to input length\n        l_out = self.get_output_length(0)\n        L = l_out\n\n        layers = []\n        for layer in self.modules():\n            if isinstance(layer, (nn.Conv1d, nn.ConvTranspose1d)):\n                layers.append(layer)\n\n        for layer in reversed(layers):\n            d = layer.dilation[0]\n            k = layer.kernel_size[0]\n            s = layer.stride[0]\n\n            if isinstance(layer, nn.ConvTranspose1d):\n                L = ((L - d * (k - 1) - 1) / s) + 1\n            elif isinstance(layer, nn.Conv1d):\n                L = (L - 1) * s + d * (k - 1) + 1\n\n            L = math.ceil(L)\n\n        l_in = L\n\n        return (l_in - l_out) // 2\n\n    def get_output_length(self, input_length):\n        L = input_length\n        # Calculate output length\n        for layer in self.modules():\n            if isinstance(layer, (nn.Conv1d, nn.ConvTranspose1d)):\n                d = layer.dilation[0]\n                k = layer.kernel_size[0]\n                s = layer.stride[0]\n\n                if isinstance(layer, nn.Conv1d):\n                    L = ((L - d * (k - 1) - 1) / s) + 1\n                elif isinstance(layer, nn.ConvTranspose1d):\n                    L = (L - 1) * s + d * (k - 1) + 1\n\n                L = math.floor(L)\n        return L\n\n    @torch.no_grad()\n    def compress(\n        self,\n        audio_path_or_signal: Union[str, Path, AudioSignal],\n        win_duration: float = 1.0,\n        verbose: bool = False,\n        normalize_db: float = -16,\n        n_quantizers: int = None,\n    ) -> DACFile:\n        \"\"\"Processes an audio signal from a file or AudioSignal object into\n        discrete codes. This function processes the signal in short windows,\n        using constant GPU memory.\n\n        Parameters\n        ----------\n        audio_path_or_signal : Union[str, Path, AudioSignal]\n            audio signal to reconstruct\n        win_duration : float, optional\n            window duration in seconds, by default 5.0\n        verbose : bool, optional\n            by default False\n        normalize_db : float, optional\n            normalize db, by default -16\n\n        Returns\n        -------\n        DACFile\n            Object containing compressed codes and metadata\n            required for decompression\n        \"\"\"\n        audio_signal = audio_path_or_signal\n        if isinstance(audio_signal, (str, Path)):\n            audio_signal = AudioSignal.load_from_file_with_ffmpeg(str(audio_signal))\n\n        self.eval()\n        original_padding = self.padding\n        original_device = audio_signal.device\n\n        audio_signal = audio_signal.clone()\n        original_sr = audio_signal.sample_rate\n\n        resample_fn = audio_signal.resample\n        loudness_fn = audio_signal.loudness\n\n        # If audio is > 10 minutes long, use the ffmpeg versions\n        if audio_signal.signal_duration >= 10 * 60 * 60:\n            resample_fn = audio_signal.ffmpeg_resample\n            loudness_fn = audio_signal.ffmpeg_loudness\n\n        original_length = audio_signal.signal_length\n        resample_fn(self.sample_rate)\n        input_db = loudness_fn()\n\n        if normalize_db is not None:\n            audio_signal.normalize(normalize_db)\n        audio_signal.ensure_max_of_audio()\n\n        nb, nac, nt = audio_signal.audio_data.shape\n        audio_signal.audio_data = audio_signal.audio_data.reshape(nb * nac, 1, nt)\n        win_duration = (\n            audio_signal.signal_duration if win_duration is None else win_duration\n        )\n\n        if audio_signal.signal_duration <= win_duration:\n            # Unchunked compression (used if signal length < win duration)\n            self.padding = True\n            n_samples = nt\n            hop = nt\n        else:\n            # Chunked inference\n            self.padding = False\n            # Zero-pad signal on either side by the delay\n            audio_signal.zero_pad(self.delay, self.delay)\n            n_samples = int(win_duration * self.sample_rate)\n            # Round n_samples to nearest hop length multiple\n            n_samples = int(math.ceil(n_samples / self.hop_length) * self.hop_length)\n            hop = self.get_output_length(n_samples)\n\n        codes = []\n        range_fn = range if not verbose else tqdm.trange\n\n        for i in range_fn(0, nt, hop):\n            x = audio_signal[..., i : i + n_samples]\n            x = x.zero_pad(0, max(0, n_samples - x.shape[-1]))\n\n            audio_data = x.audio_data.to(self.device)\n            audio_data = self.preprocess(audio_data, self.sample_rate)\n            _, c, _, _, _ = self.encode(audio_data, n_quantizers)\n            codes.append(c.to(original_device))\n            chunk_length = c.shape[-1]\n\n        codes = torch.cat(codes, dim=-1)\n\n        dac_file = DACFile(\n            codes=codes,\n            chunk_length=chunk_length,\n            original_length=original_length,\n            input_db=input_db,\n            channels=nac,\n            sample_rate=original_sr,\n            padding=self.padding,\n            dac_version=SUPPORTED_VERSIONS[-1],\n        )\n\n        if n_quantizers is not None:\n            codes = codes[:, :n_quantizers, :]\n\n        self.padding = original_padding\n        return dac_file\n\n    @torch.no_grad()\n    def decompress(\n        self,\n        obj: Union[str, Path, DACFile],\n        verbose: bool = False,\n    ) -> AudioSignal:\n        \"\"\"Reconstruct audio from a given .dac file\n\n        Parameters\n        ----------\n        obj : Union[str, Path, DACFile]\n            .dac file location or corresponding DACFile object.\n        verbose : bool, optional\n            Prints progress if True, by default False\n\n        Returns\n        -------\n        AudioSignal\n            Object with the reconstructed audio\n        \"\"\"\n        self.eval()\n        if isinstance(obj, (str, Path)):\n            obj = DACFile.load(obj)\n\n        original_padding = self.padding\n        self.padding = obj.padding\n\n        range_fn = range if not verbose else tqdm.trange\n        codes = obj.codes\n        original_device = codes.device\n        chunk_length = obj.chunk_length\n        recons = []\n\n        for i in range_fn(0, codes.shape[-1], chunk_length):\n            c = codes[..., i : i + chunk_length].to(self.device)\n            z = self.quantizer.from_codes(c)[0]\n            r = self.decode(z)\n            recons.append(r.to(original_device))\n\n        recons = torch.cat(recons, dim=-1)\n        recons = AudioSignal(recons, self.sample_rate)\n\n        resample_fn = recons.resample\n        loudness_fn = recons.loudness\n\n        # If audio is > 10 minutes long, use the ffmpeg versions\n        if recons.signal_duration >= 10 * 60 * 60:\n            resample_fn = recons.ffmpeg_resample\n            loudness_fn = recons.ffmpeg_loudness\n\n        recons.normalize(obj.input_db)\n        resample_fn(obj.sample_rate)\n        recons = recons[..., : obj.original_length]\n        loudness_fn()\n        recons.audio_data = recons.audio_data.reshape(\n            -1, obj.channels, obj.original_length\n        )\n\n        self.padding = original_padding\n        return recons\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/model/dac.py",
    "content": "import math\nfrom typing import List\nfrom typing import Union\n\nimport numpy as np\nimport torch\nfrom audiotools import AudioSignal\nfrom audiotools.ml import BaseModel\nfrom torch import nn\n\nfrom .base import CodecMixin\nfrom indextts.s2mel.dac.nn.layers import Snake1d\nfrom indextts.s2mel.dac.nn.layers import WNConv1d\nfrom indextts.s2mel.dac.nn.layers import WNConvTranspose1d\nfrom indextts.s2mel.dac.nn.quantize import ResidualVectorQuantize\nfrom .encodec import SConv1d, SConvTranspose1d, SLSTM\n\n\ndef init_weights(m):\n    if isinstance(m, nn.Conv1d):\n        nn.init.trunc_normal_(m.weight, std=0.02)\n        nn.init.constant_(m.bias, 0)\n\n\nclass ResidualUnit(nn.Module):\n    def __init__(self, dim: int = 16, dilation: int = 1, causal: bool = False):\n        super().__init__()\n        conv1d_type = SConv1d# if causal else WNConv1d\n        pad = ((7 - 1) * dilation) // 2\n        self.block = nn.Sequential(\n            Snake1d(dim),\n            conv1d_type(dim, dim, kernel_size=7, dilation=dilation, padding=pad, causal=causal, norm='weight_norm'),\n            Snake1d(dim),\n            conv1d_type(dim, dim, kernel_size=1, causal=causal, norm='weight_norm'),\n        )\n\n    def forward(self, x):\n        y = self.block(x)\n        pad = (x.shape[-1] - y.shape[-1]) // 2\n        if pad > 0:\n            x = x[..., pad:-pad]\n        return x + y\n\n\nclass EncoderBlock(nn.Module):\n    def __init__(self, dim: int = 16, stride: int = 1, causal: bool = False):\n        super().__init__()\n        conv1d_type = SConv1d# if causal else WNConv1d\n        self.block = nn.Sequential(\n            ResidualUnit(dim // 2, dilation=1, causal=causal),\n            ResidualUnit(dim // 2, dilation=3, causal=causal),\n            ResidualUnit(dim // 2, dilation=9, causal=causal),\n            Snake1d(dim // 2),\n            conv1d_type(\n                dim // 2,\n                dim,\n                kernel_size=2 * stride,\n                stride=stride,\n                padding=math.ceil(stride / 2),\n                causal=causal,\n                norm='weight_norm',\n            ),\n        )\n\n    def forward(self, x):\n        return self.block(x)\n\n\nclass Encoder(nn.Module):\n    def __init__(\n        self,\n        d_model: int = 64,\n        strides: list = [2, 4, 8, 8],\n        d_latent: int = 64,\n        causal: bool = False,\n        lstm: int = 2,\n    ):\n        super().__init__()\n        conv1d_type = SConv1d# if causal else WNConv1d\n        # Create first convolution\n        self.block = [conv1d_type(1, d_model, kernel_size=7, padding=3, causal=causal, norm='weight_norm')]\n\n        # Create EncoderBlocks that double channels as they downsample by `stride`\n        for stride in strides:\n            d_model *= 2\n            self.block += [EncoderBlock(d_model, stride=stride, causal=causal)]\n\n        # Add LSTM if needed\n        self.use_lstm = lstm\n        if lstm:\n            self.block += [SLSTM(d_model, lstm)]\n\n        # Create last convolution\n        self.block += [\n            Snake1d(d_model),\n            conv1d_type(d_model, d_latent, kernel_size=3, padding=1, causal=causal, norm='weight_norm'),\n        ]\n\n        # Wrap black into nn.Sequential\n        self.block = nn.Sequential(*self.block)\n        self.enc_dim = d_model\n\n    def forward(self, x):\n        return self.block(x)\n\n    def reset_cache(self):\n        # recursively find all submodules named SConv1d in self.block and use their reset_cache method\n        def reset_cache(m):\n            if isinstance(m, SConv1d) or isinstance(m, SLSTM):\n                m.reset_cache()\n                return\n            for child in m.children():\n                reset_cache(child)\n\n        reset_cache(self.block)\n\n\nclass DecoderBlock(nn.Module):\n    def __init__(self, input_dim: int = 16, output_dim: int = 8, stride: int = 1, causal: bool = False):\n        super().__init__()\n        conv1d_type = SConvTranspose1d #if causal else WNConvTranspose1d\n        self.block = nn.Sequential(\n            Snake1d(input_dim),\n            conv1d_type(\n                input_dim,\n                output_dim,\n                kernel_size=2 * stride,\n                stride=stride,\n                padding=math.ceil(stride / 2),\n                causal=causal,\n                norm='weight_norm'\n            ),\n            ResidualUnit(output_dim, dilation=1, causal=causal),\n            ResidualUnit(output_dim, dilation=3, causal=causal),\n            ResidualUnit(output_dim, dilation=9, causal=causal),\n        )\n\n    def forward(self, x):\n        return self.block(x)\n\n\nclass Decoder(nn.Module):\n    def __init__(\n        self,\n        input_channel,\n        channels,\n        rates,\n        d_out: int = 1,\n        causal: bool = False,\n        lstm: int = 2,\n    ):\n        super().__init__()\n        conv1d_type = SConv1d# if causal else WNConv1d\n        # Add first conv layer\n        layers = [conv1d_type(input_channel, channels, kernel_size=7, padding=3, causal=causal, norm='weight_norm')]\n\n        if lstm:\n            layers += [SLSTM(channels, num_layers=lstm)]\n\n        # Add upsampling + MRF blocks\n        for i, stride in enumerate(rates):\n            input_dim = channels // 2**i\n            output_dim = channels // 2 ** (i + 1)\n            layers += [DecoderBlock(input_dim, output_dim, stride, causal=causal)]\n\n        # Add final conv layer\n        layers += [\n            Snake1d(output_dim),\n            conv1d_type(output_dim, d_out, kernel_size=7, padding=3, causal=causal, norm='weight_norm'),\n            nn.Tanh(),\n        ]\n\n        self.model = nn.Sequential(*layers)\n\n    def forward(self, x):\n        return self.model(x)\n\n\nclass DAC(BaseModel, CodecMixin):\n    def __init__(\n        self,\n        encoder_dim: int = 64,\n        encoder_rates: List[int] = [2, 4, 8, 8],\n        latent_dim: int = None,\n        decoder_dim: int = 1536,\n        decoder_rates: List[int] = [8, 8, 4, 2],\n        n_codebooks: int = 9,\n        codebook_size: int = 1024,\n        codebook_dim: Union[int, list] = 8,\n        quantizer_dropout: bool = False,\n        sample_rate: int = 44100,\n        lstm: int = 2,\n        causal: bool = False,\n    ):\n        super().__init__()\n\n        self.encoder_dim = encoder_dim\n        self.encoder_rates = encoder_rates\n        self.decoder_dim = decoder_dim\n        self.decoder_rates = decoder_rates\n        self.sample_rate = sample_rate\n\n        if latent_dim is None:\n            latent_dim = encoder_dim * (2 ** len(encoder_rates))\n\n        self.latent_dim = latent_dim\n\n        self.hop_length = np.prod(encoder_rates)\n        self.encoder = Encoder(encoder_dim, encoder_rates, latent_dim, causal=causal, lstm=lstm)\n\n        self.n_codebooks = n_codebooks\n        self.codebook_size = codebook_size\n        self.codebook_dim = codebook_dim\n        self.quantizer = ResidualVectorQuantize(\n            input_dim=latent_dim,\n            n_codebooks=n_codebooks,\n            codebook_size=codebook_size,\n            codebook_dim=codebook_dim,\n            quantizer_dropout=quantizer_dropout,\n        )\n\n        self.decoder = Decoder(\n            latent_dim,\n            decoder_dim,\n            decoder_rates,\n            lstm=lstm,\n            causal=causal,\n        )\n        self.sample_rate = sample_rate\n        self.apply(init_weights)\n\n        self.delay = self.get_delay()\n\n    def preprocess(self, audio_data, sample_rate):\n        if sample_rate is None:\n            sample_rate = self.sample_rate\n        assert sample_rate == self.sample_rate\n\n        length = audio_data.shape[-1]\n        right_pad = math.ceil(length / self.hop_length) * self.hop_length - length\n        audio_data = nn.functional.pad(audio_data, (0, right_pad))\n\n        return audio_data\n\n    def encode(\n        self,\n        audio_data: torch.Tensor,\n        n_quantizers: int = None,\n    ):\n        \"\"\"Encode given audio data and return quantized latent codes\n\n        Parameters\n        ----------\n        audio_data : Tensor[B x 1 x T]\n            Audio data to encode\n        n_quantizers : int, optional\n            Number of quantizers to use, by default None\n            If None, all quantizers are used.\n\n        Returns\n        -------\n        dict\n            A dictionary with the following keys:\n            \"z\" : Tensor[B x D x T]\n                Quantized continuous representation of input\n            \"codes\" : Tensor[B x N x T]\n                Codebook indices for each codebook\n                (quantized discrete representation of input)\n            \"latents\" : Tensor[B x N*D x T]\n                Projected latents (continuous representation of input before quantization)\n            \"vq/commitment_loss\" : Tensor[1]\n                Commitment loss to train encoder to predict vectors closer to codebook\n                entries\n            \"vq/codebook_loss\" : Tensor[1]\n                Codebook loss to update the codebook\n            \"length\" : int\n                Number of samples in input audio\n        \"\"\"\n        z = self.encoder(audio_data)\n        z, codes, latents, commitment_loss, codebook_loss = self.quantizer(\n            z, n_quantizers\n        )\n        return z, codes, latents, commitment_loss, codebook_loss\n\n    def decode(self, z: torch.Tensor):\n        \"\"\"Decode given latent codes and return audio data\n\n        Parameters\n        ----------\n        z : Tensor[B x D x T]\n            Quantized continuous representation of input\n        length : int, optional\n            Number of samples in output audio, by default None\n\n        Returns\n        -------\n        dict\n            A dictionary with the following keys:\n            \"audio\" : Tensor[B x 1 x length]\n                Decoded audio data.\n        \"\"\"\n        return self.decoder(z)\n\n    def forward(\n        self,\n        audio_data: torch.Tensor,\n        sample_rate: int = None,\n        n_quantizers: int = None,\n    ):\n        \"\"\"Model forward pass\n\n        Parameters\n        ----------\n        audio_data : Tensor[B x 1 x T]\n            Audio data to encode\n        sample_rate : int, optional\n            Sample rate of audio data in Hz, by default None\n            If None, defaults to `self.sample_rate`\n        n_quantizers : int, optional\n            Number of quantizers to use, by default None.\n            If None, all quantizers are used.\n\n        Returns\n        -------\n        dict\n            A dictionary with the following keys:\n            \"z\" : Tensor[B x D x T]\n                Quantized continuous representation of input\n            \"codes\" : Tensor[B x N x T]\n                Codebook indices for each codebook\n                (quantized discrete representation of input)\n            \"latents\" : Tensor[B x N*D x T]\n                Projected latents (continuous representation of input before quantization)\n            \"vq/commitment_loss\" : Tensor[1]\n                Commitment loss to train encoder to predict vectors closer to codebook\n                entries\n            \"vq/codebook_loss\" : Tensor[1]\n                Codebook loss to update the codebook\n            \"length\" : int\n                Number of samples in input audio\n            \"audio\" : Tensor[B x 1 x length]\n                Decoded audio data.\n        \"\"\"\n        length = audio_data.shape[-1]\n        audio_data = self.preprocess(audio_data, sample_rate)\n        z, codes, latents, commitment_loss, codebook_loss = self.encode(\n            audio_data, n_quantizers\n        )\n\n        x = self.decode(z)\n        return {\n            \"audio\": x[..., :length],\n            \"z\": z,\n            \"codes\": codes,\n            \"latents\": latents,\n            \"vq/commitment_loss\": commitment_loss,\n            \"vq/codebook_loss\": codebook_loss,\n        }\n\n\nif __name__ == \"__main__\":\n    import numpy as np\n    from functools import partial\n\n    model = DAC().to(\"cpu\")\n\n    for n, m in model.named_modules():\n        o = m.extra_repr()\n        p = sum([np.prod(p.size()) for p in m.parameters()])\n        fn = lambda o, p: o + f\" {p/1e6:<.3f}M params.\"\n        setattr(m, \"extra_repr\", partial(fn, o=o, p=p))\n    print(model)\n    print(\"Total # of params: \", sum([np.prod(p.size()) for p in model.parameters()]))\n\n    length = 88200 * 2\n    x = torch.randn(1, 1, length).to(model.device)\n    x.requires_grad_(True)\n    x.retain_grad()\n\n    # Make a forward pass\n    out = model(x)[\"audio\"]\n    print(\"Input shape:\", x.shape)\n    print(\"Output shape:\", out.shape)\n\n    # Create gradient variable\n    grad = torch.zeros_like(out)\n    grad[:, :, grad.shape[-1] // 2] = 1\n\n    # Make a backward pass\n    out.backward(grad)\n\n    # Check non-zero values\n    gradmap = x.grad.squeeze(0)\n    gradmap = (gradmap != 0).sum(0)  # sum across features\n    rf = (gradmap != 0).sum()\n\n    print(f\"Receptive field: {rf.item()}\")\n\n    x = AudioSignal(torch.randn(1, 1, 44100 * 60), 44100)\n    model.decompress(model.compress(x, verbose=True), verbose=True)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/model/discriminator.py",
    "content": "import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom audiotools import AudioSignal\nfrom audiotools import ml\nfrom audiotools import STFTParams\nfrom einops import rearrange\nfrom torch.nn.utils import weight_norm\n\n\ndef WNConv1d(*args, **kwargs):\n    act = kwargs.pop(\"act\", True)\n    conv = weight_norm(nn.Conv1d(*args, **kwargs))\n    if not act:\n        return conv\n    return nn.Sequential(conv, nn.LeakyReLU(0.1))\n\n\ndef WNConv2d(*args, **kwargs):\n    act = kwargs.pop(\"act\", True)\n    conv = weight_norm(nn.Conv2d(*args, **kwargs))\n    if not act:\n        return conv\n    return nn.Sequential(conv, nn.LeakyReLU(0.1))\n\n\nclass MPD(nn.Module):\n    def __init__(self, period):\n        super().__init__()\n        self.period = period\n        self.convs = nn.ModuleList(\n            [\n                WNConv2d(1, 32, (5, 1), (3, 1), padding=(2, 0)),\n                WNConv2d(32, 128, (5, 1), (3, 1), padding=(2, 0)),\n                WNConv2d(128, 512, (5, 1), (3, 1), padding=(2, 0)),\n                WNConv2d(512, 1024, (5, 1), (3, 1), padding=(2, 0)),\n                WNConv2d(1024, 1024, (5, 1), 1, padding=(2, 0)),\n            ]\n        )\n        self.conv_post = WNConv2d(\n            1024, 1, kernel_size=(3, 1), padding=(1, 0), act=False\n        )\n\n    def pad_to_period(self, x):\n        t = x.shape[-1]\n        x = F.pad(x, (0, self.period - t % self.period), mode=\"reflect\")\n        return x\n\n    def forward(self, x):\n        fmap = []\n\n        x = self.pad_to_period(x)\n        x = rearrange(x, \"b c (l p) -> b c l p\", p=self.period)\n\n        for layer in self.convs:\n            x = layer(x)\n            fmap.append(x)\n\n        x = self.conv_post(x)\n        fmap.append(x)\n\n        return fmap\n\n\nclass MSD(nn.Module):\n    def __init__(self, rate: int = 1, sample_rate: int = 44100):\n        super().__init__()\n        self.convs = nn.ModuleList(\n            [\n                WNConv1d(1, 16, 15, 1, padding=7),\n                WNConv1d(16, 64, 41, 4, groups=4, padding=20),\n                WNConv1d(64, 256, 41, 4, groups=16, padding=20),\n                WNConv1d(256, 1024, 41, 4, groups=64, padding=20),\n                WNConv1d(1024, 1024, 41, 4, groups=256, padding=20),\n                WNConv1d(1024, 1024, 5, 1, padding=2),\n            ]\n        )\n        self.conv_post = WNConv1d(1024, 1, 3, 1, padding=1, act=False)\n        self.sample_rate = sample_rate\n        self.rate = rate\n\n    def forward(self, x):\n        x = AudioSignal(x, self.sample_rate)\n        x.resample(self.sample_rate // self.rate)\n        x = x.audio_data\n\n        fmap = []\n\n        for l in self.convs:\n            x = l(x)\n            fmap.append(x)\n        x = self.conv_post(x)\n        fmap.append(x)\n\n        return fmap\n\n\nBANDS = [(0.0, 0.1), (0.1, 0.25), (0.25, 0.5), (0.5, 0.75), (0.75, 1.0)]\n\n\nclass MRD(nn.Module):\n    def __init__(\n        self,\n        window_length: int,\n        hop_factor: float = 0.25,\n        sample_rate: int = 44100,\n        bands: list = BANDS,\n    ):\n        \"\"\"Complex multi-band spectrogram discriminator.\n        Parameters\n        ----------\n        window_length : int\n            Window length of STFT.\n        hop_factor : float, optional\n            Hop factor of the STFT, defaults to ``0.25 * window_length``.\n        sample_rate : int, optional\n            Sampling rate of audio in Hz, by default 44100\n        bands : list, optional\n            Bands to run discriminator over.\n        \"\"\"\n        super().__init__()\n\n        self.window_length = window_length\n        self.hop_factor = hop_factor\n        self.sample_rate = sample_rate\n        self.stft_params = STFTParams(\n            window_length=window_length,\n            hop_length=int(window_length * hop_factor),\n            match_stride=True,\n        )\n\n        n_fft = window_length // 2 + 1\n        bands = [(int(b[0] * n_fft), int(b[1] * n_fft)) for b in bands]\n        self.bands = bands\n\n        ch = 32\n        convs = lambda: nn.ModuleList(\n            [\n                WNConv2d(2, ch, (3, 9), (1, 1), padding=(1, 4)),\n                WNConv2d(ch, ch, (3, 9), (1, 2), padding=(1, 4)),\n                WNConv2d(ch, ch, (3, 9), (1, 2), padding=(1, 4)),\n                WNConv2d(ch, ch, (3, 9), (1, 2), padding=(1, 4)),\n                WNConv2d(ch, ch, (3, 3), (1, 1), padding=(1, 1)),\n            ]\n        )\n        self.band_convs = nn.ModuleList([convs() for _ in range(len(self.bands))])\n        self.conv_post = WNConv2d(ch, 1, (3, 3), (1, 1), padding=(1, 1), act=False)\n\n    def spectrogram(self, x):\n        x = AudioSignal(x, self.sample_rate, stft_params=self.stft_params)\n        x = torch.view_as_real(x.stft())\n        x = rearrange(x, \"b 1 f t c -> (b 1) c t f\")\n        # Split into bands\n        x_bands = [x[..., b[0] : b[1]] for b in self.bands]\n        return x_bands\n\n    def forward(self, x):\n        x_bands = self.spectrogram(x)\n        fmap = []\n\n        x = []\n        for band, stack in zip(x_bands, self.band_convs):\n            for layer in stack:\n                band = layer(band)\n                fmap.append(band)\n            x.append(band)\n\n        x = torch.cat(x, dim=-1)\n        x = self.conv_post(x)\n        fmap.append(x)\n\n        return fmap\n\n\nclass Discriminator(nn.Module):\n    def __init__(\n        self,\n        rates: list = [],\n        periods: list = [2, 3, 5, 7, 11],\n        fft_sizes: list = [2048, 1024, 512],\n        sample_rate: int = 44100,\n        bands: list = BANDS,\n    ):\n        \"\"\"Discriminator that combines multiple discriminators.\n\n        Parameters\n        ----------\n        rates : list, optional\n            sampling rates (in Hz) to run MSD at, by default []\n            If empty, MSD is not used.\n        periods : list, optional\n            periods (of samples) to run MPD at, by default [2, 3, 5, 7, 11]\n        fft_sizes : list, optional\n            Window sizes of the FFT to run MRD at, by default [2048, 1024, 512]\n        sample_rate : int, optional\n            Sampling rate of audio in Hz, by default 44100\n        bands : list, optional\n            Bands to run MRD at, by default `BANDS`\n        \"\"\"\n        super().__init__()\n        discs = []\n        discs += [MPD(p) for p in periods]\n        discs += [MSD(r, sample_rate=sample_rate) for r in rates]\n        discs += [MRD(f, sample_rate=sample_rate, bands=bands) for f in fft_sizes]\n        self.discriminators = nn.ModuleList(discs)\n\n    def preprocess(self, y):\n        # Remove DC offset\n        y = y - y.mean(dim=-1, keepdims=True)\n        # Peak normalize the volume of input audio\n        y = 0.8 * y / (y.abs().max(dim=-1, keepdim=True)[0] + 1e-9)\n        return y\n\n    def forward(self, x):\n        x = self.preprocess(x)\n        fmaps = [d(x) for d in self.discriminators]\n        return fmaps\n\n\nif __name__ == \"__main__\":\n    disc = Discriminator()\n    x = torch.zeros(1, 1, 44100)\n    results = disc(x)\n    for i, result in enumerate(results):\n        print(f\"disc{i}\")\n        for i, r in enumerate(result):\n            print(r.shape, r.mean(), r.min(), r.max())\n        print()\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/model/encodec.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Convolutional layers wrappers and utilities.\"\"\"\n\nimport math\nimport typing as tp\nimport warnings\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nfrom torch.nn.utils import spectral_norm, weight_norm\n\nimport typing as tp\n\nimport einops\n\n\nclass ConvLayerNorm(nn.LayerNorm):\n    \"\"\"\n    Convolution-friendly LayerNorm that moves channels to last dimensions\n    before running the normalization and moves them back to original position right after.\n    \"\"\"\n    def __init__(self, normalized_shape: tp.Union[int, tp.List[int], torch.Size], **kwargs):\n        super().__init__(normalized_shape, **kwargs)\n\n    def forward(self, x):\n        x = einops.rearrange(x, 'b ... t -> b t ...')\n        x = super().forward(x)\n        x = einops.rearrange(x, 'b t ... -> b ... t')\n        return\n\n\nCONV_NORMALIZATIONS = frozenset(['none', 'weight_norm', 'spectral_norm',\n                                 'time_layer_norm', 'layer_norm', 'time_group_norm'])\n\n\ndef apply_parametrization_norm(module: nn.Module, norm: str = 'none') -> nn.Module:\n    assert norm in CONV_NORMALIZATIONS\n    if norm == 'weight_norm':\n        return weight_norm(module)\n    elif norm == 'spectral_norm':\n        return spectral_norm(module)\n    else:\n        # We already check was in CONV_NORMALIZATION, so any other choice\n        # doesn't need reparametrization.\n        return module\n\n\ndef get_norm_module(module: nn.Module, causal: bool = False, norm: str = 'none', **norm_kwargs) -> nn.Module:\n    \"\"\"Return the proper normalization module. If causal is True, this will ensure the returned\n    module is causal, or return an error if the normalization doesn't support causal evaluation.\n    \"\"\"\n    assert norm in CONV_NORMALIZATIONS\n    if norm == 'layer_norm':\n        assert isinstance(module, nn.modules.conv._ConvNd)\n        return ConvLayerNorm(module.out_channels, **norm_kwargs)\n    elif norm == 'time_group_norm':\n        if causal:\n            raise ValueError(\"GroupNorm doesn't support causal evaluation.\")\n        assert isinstance(module, nn.modules.conv._ConvNd)\n        return nn.GroupNorm(1, module.out_channels, **norm_kwargs)\n    else:\n        return nn.Identity()\n\n\ndef get_extra_padding_for_conv1d(x: torch.Tensor, kernel_size: int, stride: int,\n                                 padding_total: int = 0) -> int:\n    \"\"\"See `pad_for_conv1d`.\n    \"\"\"\n    length = x.shape[-1]\n    n_frames = (length - kernel_size + padding_total) / stride + 1\n    ideal_length = (math.ceil(n_frames) - 1) * stride + (kernel_size - padding_total)\n    return ideal_length - length\n\n\ndef pad_for_conv1d(x: torch.Tensor, kernel_size: int, stride: int, padding_total: int = 0):\n    \"\"\"Pad for a convolution to make sure that the last window is full.\n    Extra padding is added at the end. This is required to ensure that we can rebuild\n    an output of the same length, as otherwise, even with padding, some time steps\n    might get removed.\n    For instance, with total padding = 4, kernel size = 4, stride = 2:\n        0 0 1 2 3 4 5 0 0   # (0s are padding)\n        1   2   3           # (output frames of a convolution, last 0 is never used)\n        0 0 1 2 3 4 5 0     # (output of tr. conv., but pos. 5 is going to get removed as padding)\n            1 2 3 4         # once you removed padding, we are missing one time step !\n    \"\"\"\n    extra_padding = get_extra_padding_for_conv1d(x, kernel_size, stride, padding_total)\n    return F.pad(x, (0, extra_padding))\n\n\ndef pad1d(x: torch.Tensor, paddings: tp.Tuple[int, int], mode: str = 'zero', value: float = 0.):\n    \"\"\"Tiny wrapper around F.pad, just to allow for reflect padding on small input.\n    If this is the case, we insert extra 0 padding to the right before the reflection happen.\n    \"\"\"\n    length = x.shape[-1]\n    padding_left, padding_right = paddings\n    assert padding_left >= 0 and padding_right >= 0, (padding_left, padding_right)\n    if mode == 'reflect':\n        max_pad = max(padding_left, padding_right)\n        extra_pad = 0\n        if length <= max_pad:\n            extra_pad = max_pad - length + 1\n            x = F.pad(x, (0, extra_pad))\n        padded = F.pad(x, paddings, mode, value)\n        end = padded.shape[-1] - extra_pad\n        return padded[..., :end]\n    else:\n        return F.pad(x, paddings, mode, value)\n\n\ndef unpad1d(x: torch.Tensor, paddings: tp.Tuple[int, int]):\n    \"\"\"Remove padding from x, handling properly zero padding. Only for 1d!\"\"\"\n    padding_left, padding_right = paddings\n    assert padding_left >= 0 and padding_right >= 0, (padding_left, padding_right)\n    assert (padding_left + padding_right) <= x.shape[-1]\n    end = x.shape[-1] - padding_right\n    return x[..., padding_left: end]\n\n\nclass NormConv1d(nn.Module):\n    \"\"\"Wrapper around Conv1d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n    def __init__(self, *args, causal: bool = False, norm: str = 'none',\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.conv = apply_parametrization_norm(nn.Conv1d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.conv, causal, norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.norm(x)\n        return x\n\n\nclass NormConv2d(nn.Module):\n    \"\"\"Wrapper around Conv2d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n    def __init__(self, *args, norm: str = 'none',\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.conv = apply_parametrization_norm(nn.Conv2d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.conv, causal=False, norm=norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.norm(x)\n        return x\n\n\nclass NormConvTranspose1d(nn.Module):\n    \"\"\"Wrapper around ConvTranspose1d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n    def __init__(self, *args, causal: bool = False, norm: str = 'none',\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.convtr = apply_parametrization_norm(nn.ConvTranspose1d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.convtr, causal, norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.convtr(x)\n        x = self.norm(x)\n        return x\n\n\nclass NormConvTranspose2d(nn.Module):\n    \"\"\"Wrapper around ConvTranspose2d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n    def __init__(self, *args, norm: str = 'none',\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.convtr = apply_parametrization_norm(nn.ConvTranspose2d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.convtr, causal=False, norm=norm, **norm_kwargs)\n\n    def forward(self, x):\n        x = self.convtr(x)\n        x = self.norm(x)\n        return x\n\n\nclass SConv1d(nn.Module):\n    \"\"\"Conv1d with some builtin handling of asymmetric or causal padding\n    and normalization.\n    \"\"\"\n    def __init__(self, in_channels: int, out_channels: int,\n                 kernel_size: int, stride: int = 1, dilation: int = 1,\n                 groups: int = 1, bias: bool = True, causal: bool = False,\n                 norm: str = 'none', norm_kwargs: tp.Dict[str, tp.Any] = {},\n                 pad_mode: str = 'reflect', **kwargs):\n        super().__init__()\n        # warn user on unusual setup between dilation and stride\n        if stride > 1 and dilation > 1:\n            warnings.warn('SConv1d has been initialized with stride > 1 and dilation > 1'\n                          f' (kernel_size={kernel_size} stride={stride}, dilation={dilation}).')\n        self.conv = NormConv1d(in_channels, out_channels, kernel_size, stride,\n                               dilation=dilation, groups=groups, bias=bias, causal=causal,\n                               norm=norm, norm_kwargs=norm_kwargs)\n        self.causal = causal\n        self.pad_mode = pad_mode\n\n        self.cache_enabled = False\n\n    def reset_cache(self):\n        \"\"\"Reset the cache when starting a new stream.\"\"\"\n        self.cache = None\n        self.cache_enabled = True\n\n    def forward(self, x):\n        B, C, T = x.shape\n        kernel_size = self.conv.conv.kernel_size[0]\n        stride = self.conv.conv.stride[0]\n        dilation = self.conv.conv.dilation[0]\n        kernel_size = (kernel_size - 1) * dilation + 1  # effective kernel size with dilations\n        padding_total = kernel_size - stride\n        extra_padding = get_extra_padding_for_conv1d(x, kernel_size, stride, padding_total)\n\n        if self.causal:\n            # Left padding for causal\n            if self.cache_enabled and self.cache is not None:\n                # Concatenate the cache (previous inputs) with the new input for streaming\n                x = torch.cat([self.cache, x], dim=2)\n            else:\n                x = pad1d(x, (padding_total, extra_padding), mode=self.pad_mode)\n        else:\n            # Asymmetric padding required for odd strides\n            padding_right = padding_total // 2\n            padding_left = padding_total - padding_right\n            x = pad1d(x, (padding_left, padding_right + extra_padding), mode=self.pad_mode)\n\n        # Store the most recent input frames for future cache use\n        if self.cache_enabled:\n            if self.cache is None:\n                # Initialize cache with zeros (at the start of streaming)\n                self.cache = torch.zeros(B, C, kernel_size - 1, device=x.device)\n            # Update the cache by storing the latest input frames\n            if kernel_size > 1:\n                self.cache = x[:, :, -kernel_size + 1:].detach()  # Only store the necessary frames\n\n        return self.conv(x)\n\n\n\nclass SConvTranspose1d(nn.Module):\n    \"\"\"ConvTranspose1d with some builtin handling of asymmetric or causal padding\n    and normalization.\n    \"\"\"\n    def __init__(self, in_channels: int, out_channels: int,\n                 kernel_size: int, stride: int = 1, causal: bool = False,\n                 norm: str = 'none', trim_right_ratio: float = 1.,\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.convtr = NormConvTranspose1d(in_channels, out_channels, kernel_size, stride,\n                                          causal=causal, norm=norm, norm_kwargs=norm_kwargs)\n        self.causal = causal\n        self.trim_right_ratio = trim_right_ratio\n        assert self.causal or self.trim_right_ratio == 1., \\\n            \"`trim_right_ratio` != 1.0 only makes sense for causal convolutions\"\n        assert self.trim_right_ratio >= 0. and self.trim_right_ratio <= 1.\n\n    def forward(self, x):\n        kernel_size = self.convtr.convtr.kernel_size[0]\n        stride = self.convtr.convtr.stride[0]\n        padding_total = kernel_size - stride\n\n        y = self.convtr(x)\n\n        # We will only trim fixed padding. Extra padding from `pad_for_conv1d` would be\n        # removed at the very end, when keeping only the right length for the output,\n        # as removing it here would require also passing the length at the matching layer\n        # in the encoder.\n        if self.causal:\n            # Trim the padding on the right according to the specified ratio\n            # if trim_right_ratio = 1.0, trim everything from right\n            padding_right = math.ceil(padding_total * self.trim_right_ratio)\n            padding_left = padding_total - padding_right\n            y = unpad1d(y, (padding_left, padding_right))\n        else:\n            # Asymmetric padding required for odd strides\n            padding_right = padding_total // 2\n            padding_left = padding_total - padding_right\n            y = unpad1d(y, (padding_left, padding_right))\n        return y\n\nclass SLSTM(nn.Module):\n    \"\"\"\n    LSTM without worrying about the hidden state, nor the layout of the data.\n    Expects input as convolutional layout.\n    \"\"\"\n    def __init__(self, dimension: int, num_layers: int = 2, skip: bool = True):\n        super().__init__()\n        self.skip = skip\n        self.lstm = nn.LSTM(dimension, dimension, num_layers)\n        self.hidden = None\n        self.cache_enabled = False\n\n    def forward(self, x):\n        x = x.permute(2, 0, 1)\n        if self.training or not self.cache_enabled:\n            y, _ = self.lstm(x)\n        else:\n            y, self.hidden = self.lstm(x, self.hidden)\n        if self.skip:\n            y = y + x\n        y = y.permute(1, 2, 0)\n        return y\n\n    def reset_cache(self):\n        self.hidden = None\n        self.cache_enabled = True"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/nn/__init__.py",
    "content": "from . import layers\nfrom . import loss\nfrom . import quantize\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/nn/layers.py",
    "content": "import numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom torch.nn.utils import weight_norm\n\n\ndef WNConv1d(*args, **kwargs):\n    return weight_norm(nn.Conv1d(*args, **kwargs))\n\n\ndef WNConvTranspose1d(*args, **kwargs):\n    return weight_norm(nn.ConvTranspose1d(*args, **kwargs))\n\n\n# Scripting this brings model speed up 1.4x\n@torch.jit.script\ndef snake(x, alpha):\n    shape = x.shape\n    x = x.reshape(shape[0], shape[1], -1)\n    x = x + (alpha + 1e-9).reciprocal() * torch.sin(alpha * x).pow(2)\n    x = x.reshape(shape)\n    return x\n\n\nclass Snake1d(nn.Module):\n    def __init__(self, channels):\n        super().__init__()\n        self.alpha = nn.Parameter(torch.ones(1, channels, 1))\n\n    def forward(self, x):\n        return snake(x, self.alpha)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/nn/loss.py",
    "content": "import typing\nfrom typing import List\n\nimport torch\nimport torch.nn.functional as F\nfrom audiotools import AudioSignal\nfrom audiotools import STFTParams\nfrom torch import nn\n\n\nclass L1Loss(nn.L1Loss):\n    \"\"\"L1 Loss between AudioSignals. Defaults\n    to comparing ``audio_data``, but any\n    attribute of an AudioSignal can be used.\n\n    Parameters\n    ----------\n    attribute : str, optional\n        Attribute of signal to compare, defaults to ``audio_data``.\n    weight : float, optional\n        Weight of this loss, defaults to 1.0.\n\n    Implementation copied from: https://github.com/descriptinc/lyrebird-audiotools/blob/961786aa1a9d628cca0c0486e5885a457fe70c1a/audiotools/metrics/distance.py\n    \"\"\"\n\n    def __init__(self, attribute: str = \"audio_data\", weight: float = 1.0, **kwargs):\n        self.attribute = attribute\n        self.weight = weight\n        super().__init__(**kwargs)\n\n    def forward(self, x: AudioSignal, y: AudioSignal):\n        \"\"\"\n        Parameters\n        ----------\n        x : AudioSignal\n            Estimate AudioSignal\n        y : AudioSignal\n            Reference AudioSignal\n\n        Returns\n        -------\n        torch.Tensor\n            L1 loss between AudioSignal attributes.\n        \"\"\"\n        if isinstance(x, AudioSignal):\n            x = getattr(x, self.attribute)\n            y = getattr(y, self.attribute)\n        return super().forward(x, y)\n\n\nclass SISDRLoss(nn.Module):\n    \"\"\"\n    Computes the Scale-Invariant Source-to-Distortion Ratio between a batch\n    of estimated and reference audio signals or aligned features.\n\n    Parameters\n    ----------\n    scaling : int, optional\n        Whether to use scale-invariant (True) or\n        signal-to-noise ratio (False), by default True\n    reduction : str, optional\n        How to reduce across the batch (either 'mean',\n        'sum', or none).], by default ' mean'\n    zero_mean : int, optional\n        Zero mean the references and estimates before\n        computing the loss, by default True\n    clip_min : int, optional\n        The minimum possible loss value. Helps network\n        to not focus on making already good examples better, by default None\n    weight : float, optional\n        Weight of this loss, defaults to 1.0.\n\n    Implementation copied from: https://github.com/descriptinc/lyrebird-audiotools/blob/961786aa1a9d628cca0c0486e5885a457fe70c1a/audiotools/metrics/distance.py\n    \"\"\"\n\n    def __init__(\n        self,\n        scaling: int = True,\n        reduction: str = \"mean\",\n        zero_mean: int = True,\n        clip_min: int = None,\n        weight: float = 1.0,\n    ):\n        self.scaling = scaling\n        self.reduction = reduction\n        self.zero_mean = zero_mean\n        self.clip_min = clip_min\n        self.weight = weight\n        super().__init__()\n\n    def forward(self, x: AudioSignal, y: AudioSignal):\n        eps = 1e-8\n        # nb, nc, nt\n        if isinstance(x, AudioSignal):\n            references = x.audio_data\n            estimates = y.audio_data\n        else:\n            references = x\n            estimates = y\n\n        nb = references.shape[0]\n        references = references.reshape(nb, 1, -1).permute(0, 2, 1)\n        estimates = estimates.reshape(nb, 1, -1).permute(0, 2, 1)\n\n        # samples now on axis 1\n        if self.zero_mean:\n            mean_reference = references.mean(dim=1, keepdim=True)\n            mean_estimate = estimates.mean(dim=1, keepdim=True)\n        else:\n            mean_reference = 0\n            mean_estimate = 0\n\n        _references = references - mean_reference\n        _estimates = estimates - mean_estimate\n\n        references_projection = (_references**2).sum(dim=-2) + eps\n        references_on_estimates = (_estimates * _references).sum(dim=-2) + eps\n\n        scale = (\n            (references_on_estimates / references_projection).unsqueeze(1)\n            if self.scaling\n            else 1\n        )\n\n        e_true = scale * _references\n        e_res = _estimates - e_true\n\n        signal = (e_true**2).sum(dim=1)\n        noise = (e_res**2).sum(dim=1)\n        sdr = -10 * torch.log10(signal / noise + eps)\n\n        if self.clip_min is not None:\n            sdr = torch.clamp(sdr, min=self.clip_min)\n\n        if self.reduction == \"mean\":\n            sdr = sdr.mean()\n        elif self.reduction == \"sum\":\n            sdr = sdr.sum()\n        return sdr\n\n\nclass MultiScaleSTFTLoss(nn.Module):\n    \"\"\"Computes the multi-scale STFT loss from [1].\n\n    Parameters\n    ----------\n    window_lengths : List[int], optional\n        Length of each window of each STFT, by default [2048, 512]\n    loss_fn : typing.Callable, optional\n        How to compare each loss, by default nn.L1Loss()\n    clamp_eps : float, optional\n        Clamp on the log magnitude, below, by default 1e-5\n    mag_weight : float, optional\n        Weight of raw magnitude portion of loss, by default 1.0\n    log_weight : float, optional\n        Weight of log magnitude portion of loss, by default 1.0\n    pow : float, optional\n        Power to raise magnitude to before taking log, by default 2.0\n    weight : float, optional\n        Weight of this loss, by default 1.0\n    match_stride : bool, optional\n        Whether to match the stride of convolutional layers, by default False\n\n    References\n    ----------\n\n    1.  Engel, Jesse, Chenjie Gu, and Adam Roberts.\n        \"DDSP: Differentiable Digital Signal Processing.\"\n        International Conference on Learning Representations. 2019.\n\n    Implementation copied from: https://github.com/descriptinc/lyrebird-audiotools/blob/961786aa1a9d628cca0c0486e5885a457fe70c1a/audiotools/metrics/spectral.py\n    \"\"\"\n\n    def __init__(\n        self,\n        window_lengths: List[int] = [2048, 512],\n        loss_fn: typing.Callable = nn.L1Loss(),\n        clamp_eps: float = 1e-5,\n        mag_weight: float = 1.0,\n        log_weight: float = 1.0,\n        pow: float = 2.0,\n        weight: float = 1.0,\n        match_stride: bool = False,\n        window_type: str = None,\n    ):\n        super().__init__()\n        self.stft_params = [\n            STFTParams(\n                window_length=w,\n                hop_length=w // 4,\n                match_stride=match_stride,\n                window_type=window_type,\n            )\n            for w in window_lengths\n        ]\n        self.loss_fn = loss_fn\n        self.log_weight = log_weight\n        self.mag_weight = mag_weight\n        self.clamp_eps = clamp_eps\n        self.weight = weight\n        self.pow = pow\n\n    def forward(self, x: AudioSignal, y: AudioSignal):\n        \"\"\"Computes multi-scale STFT between an estimate and a reference\n        signal.\n\n        Parameters\n        ----------\n        x : AudioSignal\n            Estimate signal\n        y : AudioSignal\n            Reference signal\n\n        Returns\n        -------\n        torch.Tensor\n            Multi-scale STFT loss.\n        \"\"\"\n        loss = 0.0\n        for s in self.stft_params:\n            x.stft(s.window_length, s.hop_length, s.window_type)\n            y.stft(s.window_length, s.hop_length, s.window_type)\n            loss += self.log_weight * self.loss_fn(\n                x.magnitude.clamp(self.clamp_eps).pow(self.pow).log10(),\n                y.magnitude.clamp(self.clamp_eps).pow(self.pow).log10(),\n            )\n            loss += self.mag_weight * self.loss_fn(x.magnitude, y.magnitude)\n        return loss\n\n\nclass MelSpectrogramLoss(nn.Module):\n    \"\"\"Compute distance between mel spectrograms. Can be used\n    in a multi-scale way.\n\n    Parameters\n    ----------\n    n_mels : List[int]\n        Number of mels per STFT, by default [150, 80],\n    window_lengths : List[int], optional\n        Length of each window of each STFT, by default [2048, 512]\n    loss_fn : typing.Callable, optional\n        How to compare each loss, by default nn.L1Loss()\n    clamp_eps : float, optional\n        Clamp on the log magnitude, below, by default 1e-5\n    mag_weight : float, optional\n        Weight of raw magnitude portion of loss, by default 1.0\n    log_weight : float, optional\n        Weight of log magnitude portion of loss, by default 1.0\n    pow : float, optional\n        Power to raise magnitude to before taking log, by default 2.0\n    weight : float, optional\n        Weight of this loss, by default 1.0\n    match_stride : bool, optional\n        Whether to match the stride of convolutional layers, by default False\n\n    Implementation copied from: https://github.com/descriptinc/lyrebird-audiotools/blob/961786aa1a9d628cca0c0486e5885a457fe70c1a/audiotools/metrics/spectral.py\n    \"\"\"\n\n    def __init__(\n        self,\n        n_mels: List[int] = [150, 80],\n        window_lengths: List[int] = [2048, 512],\n        loss_fn: typing.Callable = nn.L1Loss(),\n        clamp_eps: float = 1e-5,\n        mag_weight: float = 1.0,\n        log_weight: float = 1.0,\n        pow: float = 2.0,\n        weight: float = 1.0,\n        match_stride: bool = False,\n        mel_fmin: List[float] = [0.0, 0.0],\n        mel_fmax: List[float] = [None, None],\n        window_type: str = None,\n    ):\n        super().__init__()\n        self.stft_params = [\n            STFTParams(\n                window_length=w,\n                hop_length=w // 4,\n                match_stride=match_stride,\n                window_type=window_type,\n            )\n            for w in window_lengths\n        ]\n        self.n_mels = n_mels\n        self.loss_fn = loss_fn\n        self.clamp_eps = clamp_eps\n        self.log_weight = log_weight\n        self.mag_weight = mag_weight\n        self.weight = weight\n        self.mel_fmin = mel_fmin\n        self.mel_fmax = mel_fmax\n        self.pow = pow\n\n    def forward(self, x: AudioSignal, y: AudioSignal):\n        \"\"\"Computes mel loss between an estimate and a reference\n        signal.\n\n        Parameters\n        ----------\n        x : AudioSignal\n            Estimate signal\n        y : AudioSignal\n            Reference signal\n\n        Returns\n        -------\n        torch.Tensor\n            Mel loss.\n        \"\"\"\n        loss = 0.0\n        for n_mels, fmin, fmax, s in zip(\n            self.n_mels, self.mel_fmin, self.mel_fmax, self.stft_params\n        ):\n            kwargs = {\n                \"window_length\": s.window_length,\n                \"hop_length\": s.hop_length,\n                \"window_type\": s.window_type,\n            }\n            x_mels = x.mel_spectrogram(n_mels, mel_fmin=fmin, mel_fmax=fmax, **kwargs)\n            y_mels = y.mel_spectrogram(n_mels, mel_fmin=fmin, mel_fmax=fmax, **kwargs)\n\n            loss += self.log_weight * self.loss_fn(\n                x_mels.clamp(self.clamp_eps).pow(self.pow).log10(),\n                y_mels.clamp(self.clamp_eps).pow(self.pow).log10(),\n            )\n            loss += self.mag_weight * self.loss_fn(x_mels, y_mels)\n        return loss\n\n\nclass GANLoss(nn.Module):\n    \"\"\"\n    Computes a discriminator loss, given a discriminator on\n    generated waveforms/spectrograms compared to ground truth\n    waveforms/spectrograms. Computes the loss for both the\n    discriminator and the generator in separate functions.\n    \"\"\"\n\n    def __init__(self, discriminator):\n        super().__init__()\n        self.discriminator = discriminator\n\n    def forward(self, fake, real):\n        d_fake = self.discriminator(fake.audio_data)\n        d_real = self.discriminator(real.audio_data)\n        return d_fake, d_real\n\n    def discriminator_loss(self, fake, real):\n        d_fake, d_real = self.forward(fake.clone().detach(), real)\n\n        loss_d = 0\n        for x_fake, x_real in zip(d_fake, d_real):\n            loss_d += torch.mean(x_fake[-1] ** 2)\n            loss_d += torch.mean((1 - x_real[-1]) ** 2)\n        return loss_d\n\n    def generator_loss(self, fake, real):\n        d_fake, d_real = self.forward(fake, real)\n\n        loss_g = 0\n        for x_fake in d_fake:\n            loss_g += torch.mean((1 - x_fake[-1]) ** 2)\n\n        loss_feature = 0\n\n        for i in range(len(d_fake)):\n            for j in range(len(d_fake[i]) - 1):\n                loss_feature += F.l1_loss(d_fake[i][j], d_real[i][j].detach())\n        return loss_g, loss_feature\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/nn/quantize.py",
    "content": "from typing import Union\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom torch.nn.utils import weight_norm\n\nfrom indextts.s2mel.dac.nn.layers import WNConv1d\n\nclass VectorQuantizeLegacy(nn.Module):\n    \"\"\"\n    Implementation of VQ similar to Karpathy's repo:\n    https://github.com/karpathy/deep-vector-quantization\n    removed in-out projection\n    \"\"\"\n\n    def __init__(self, input_dim: int, codebook_size: int):\n        super().__init__()\n        self.codebook_size = codebook_size\n        self.codebook = nn.Embedding(codebook_size, input_dim)\n\n    def forward(self, z, z_mask=None):\n        \"\"\"Quantized the input tensor using a fixed codebook and returns\n        the corresponding codebook vectors\n\n        Parameters\n        ----------\n        z : Tensor[B x D x T]\n\n        Returns\n        -------\n        Tensor[B x D x T]\n            Quantized continuous representation of input\n        Tensor[1]\n            Commitment loss to train encoder to predict vectors closer to codebook\n            entries\n        Tensor[1]\n            Codebook loss to update the codebook\n        Tensor[B x T]\n            Codebook indices (quantized discrete representation of input)\n        Tensor[B x D x T]\n            Projected latents (continuous representation of input before quantization)\n        \"\"\"\n\n        z_e = z\n        z_q, indices = self.decode_latents(z)\n\n        if z_mask is not None:\n            commitment_loss = (F.mse_loss(z_e, z_q.detach(), reduction=\"none\").mean(1) * z_mask).sum() / z_mask.sum()\n            codebook_loss = (F.mse_loss(z_q, z_e.detach(), reduction=\"none\").mean(1) * z_mask).sum() / z_mask.sum()\n        else:\n            commitment_loss = F.mse_loss(z_e, z_q.detach())\n            codebook_loss = F.mse_loss(z_q, z_e.detach())\n        z_q = (\n            z_e + (z_q - z_e).detach()\n        )  # noop in forward pass, straight-through gradient estimator in backward pass\n\n        return z_q, indices, z_e, commitment_loss, codebook_loss\n\n    def embed_code(self, embed_id):\n        return F.embedding(embed_id, self.codebook.weight)\n\n    def decode_code(self, embed_id):\n        return self.embed_code(embed_id).transpose(1, 2)\n\n    def decode_latents(self, latents):\n        encodings = rearrange(latents, \"b d t -> (b t) d\")\n        codebook = self.codebook.weight  # codebook: (N x D)\n\n        # L2 normalize encodings and codebook (ViT-VQGAN)\n        encodings = F.normalize(encodings)\n        codebook = F.normalize(codebook)\n\n        # Compute euclidean distance with codebook\n        dist = (\n            encodings.pow(2).sum(1, keepdim=True)\n            - 2 * encodings @ codebook.t()\n            + codebook.pow(2).sum(1, keepdim=True).t()\n        )\n        indices = rearrange((-dist).max(1)[1], \"(b t) -> b t\", b=latents.size(0))\n        z_q = self.decode_code(indices)\n        return z_q, indices\n\nclass VectorQuantize(nn.Module):\n    \"\"\"\n    Implementation of VQ similar to Karpathy's repo:\n    https://github.com/karpathy/deep-vector-quantization\n    Additionally uses following tricks from Improved VQGAN\n    (https://arxiv.org/pdf/2110.04627.pdf):\n        1. Factorized codes: Perform nearest neighbor lookup in low-dimensional space\n            for improved codebook usage\n        2. l2-normalized codes: Converts euclidean distance to cosine similarity which\n            improves training stability\n    \"\"\"\n\n    def __init__(self, input_dim: int, codebook_size: int, codebook_dim: int):\n        super().__init__()\n        self.codebook_size = codebook_size\n        self.codebook_dim = codebook_dim\n\n        self.in_proj = WNConv1d(input_dim, codebook_dim, kernel_size=1)\n        self.out_proj = WNConv1d(codebook_dim, input_dim, kernel_size=1)\n        self.codebook = nn.Embedding(codebook_size, codebook_dim)\n\n    def forward(self, z, z_mask=None):\n        \"\"\"Quantized the input tensor using a fixed codebook and returns\n        the corresponding codebook vectors\n\n        Parameters\n        ----------\n        z : Tensor[B x D x T]\n\n        Returns\n        -------\n        Tensor[B x D x T]\n            Quantized continuous representation of input\n        Tensor[1]\n            Commitment loss to train encoder to predict vectors closer to codebook\n            entries\n        Tensor[1]\n            Codebook loss to update the codebook\n        Tensor[B x T]\n            Codebook indices (quantized discrete representation of input)\n        Tensor[B x D x T]\n            Projected latents (continuous representation of input before quantization)\n        \"\"\"\n\n        # Factorized codes (ViT-VQGAN) Project input into low-dimensional space\n        z_e = self.in_proj(z)  # z_e : (B x D x T)\n        z_q, indices = self.decode_latents(z_e)\n\n        if z_mask is not None:\n            commitment_loss = (F.mse_loss(z_e, z_q.detach(), reduction=\"none\").mean(1) * z_mask).sum() / z_mask.sum()\n            codebook_loss = (F.mse_loss(z_q, z_e.detach(), reduction=\"none\").mean(1) * z_mask).sum() / z_mask.sum()\n        else:\n            commitment_loss = F.mse_loss(z_e, z_q.detach())\n            codebook_loss = F.mse_loss(z_q, z_e.detach())\n\n        z_q = (\n            z_e + (z_q - z_e).detach()\n        )  # noop in forward pass, straight-through gradient estimator in backward pass\n\n        z_q = self.out_proj(z_q)\n\n        return z_q, commitment_loss, codebook_loss, indices, z_e\n\n    def embed_code(self, embed_id):\n        return F.embedding(embed_id, self.codebook.weight)\n\n    def decode_code(self, embed_id):\n        return self.embed_code(embed_id).transpose(1, 2)\n\n    def decode_latents(self, latents):\n        encodings = rearrange(latents, \"b d t -> (b t) d\")\n        codebook = self.codebook.weight  # codebook: (N x D)\n\n        # L2 normalize encodings and codebook (ViT-VQGAN)\n        encodings = F.normalize(encodings)\n        codebook = F.normalize(codebook)\n\n        # Compute euclidean distance with codebook\n        dist = (\n            encodings.pow(2).sum(1, keepdim=True)\n            - 2 * encodings @ codebook.t()\n            + codebook.pow(2).sum(1, keepdim=True).t()\n        )\n        indices = rearrange((-dist).max(1)[1], \"(b t) -> b t\", b=latents.size(0))\n        z_q = self.decode_code(indices)\n        return z_q, indices\n\n\nclass ResidualVectorQuantize(nn.Module):\n    \"\"\"\n    Introduced in SoundStream: An end2end neural audio codec\n    https://arxiv.org/abs/2107.03312\n    \"\"\"\n\n    def __init__(\n        self,\n        input_dim: int = 512,\n        n_codebooks: int = 9,\n        codebook_size: int = 1024,\n        codebook_dim: Union[int, list] = 8,\n        quantizer_dropout: float = 0.0,\n    ):\n        super().__init__()\n        if isinstance(codebook_dim, int):\n            codebook_dim = [codebook_dim for _ in range(n_codebooks)]\n\n        self.n_codebooks = n_codebooks\n        self.codebook_dim = codebook_dim\n        self.codebook_size = codebook_size\n\n        self.quantizers = nn.ModuleList(\n            [\n                VectorQuantize(input_dim, codebook_size, codebook_dim[i])\n                for i in range(n_codebooks)\n            ]\n        )\n        self.quantizer_dropout = quantizer_dropout\n\n    def forward(self, z, n_quantizers: int = None):\n        \"\"\"Quantized the input tensor using a fixed set of `n` codebooks and returns\n        the corresponding codebook vectors\n        Parameters\n        ----------\n        z : Tensor[B x D x T]\n        n_quantizers : int, optional\n            No. of quantizers to use\n            (n_quantizers < self.n_codebooks ex: for quantizer dropout)\n            Note: if `self.quantizer_dropout` is True, this argument is ignored\n                when in training mode, and a random number of quantizers is used.\n        Returns\n        -------\n        dict\n            A dictionary with the following keys:\n\n            \"z\" : Tensor[B x D x T]\n                Quantized continuous representation of input\n            \"codes\" : Tensor[B x N x T]\n                Codebook indices for each codebook\n                (quantized discrete representation of input)\n            \"latents\" : Tensor[B x N*D x T]\n                Projected latents (continuous representation of input before quantization)\n            \"vq/commitment_loss\" : Tensor[1]\n                Commitment loss to train encoder to predict vectors closer to codebook\n                entries\n            \"vq/codebook_loss\" : Tensor[1]\n                Codebook loss to update the codebook\n        \"\"\"\n        z_q = 0\n        residual = z\n        commitment_loss = 0\n        codebook_loss = 0\n\n        codebook_indices = []\n        latents = []\n\n        if n_quantizers is None:\n            n_quantizers = self.n_codebooks\n        if self.training:\n            n_quantizers = torch.ones((z.shape[0],)) * self.n_codebooks + 1\n            dropout = torch.randint(1, self.n_codebooks + 1, (z.shape[0],))\n            n_dropout = int(z.shape[0] * self.quantizer_dropout)\n            n_quantizers[:n_dropout] = dropout[:n_dropout]\n            n_quantizers = n_quantizers.to(z.device)\n\n        for i, quantizer in enumerate(self.quantizers):\n            if self.training is False and i >= n_quantizers:\n                break\n\n            z_q_i, commitment_loss_i, codebook_loss_i, indices_i, z_e_i = quantizer(\n                residual\n            )\n\n            # Create mask to apply quantizer dropout\n            mask = (\n                torch.full((z.shape[0],), fill_value=i, device=z.device) < n_quantizers\n            )\n            z_q = z_q + z_q_i * mask[:, None, None]\n            residual = residual - z_q_i\n\n            # Sum losses\n            commitment_loss += (commitment_loss_i * mask).mean()\n            codebook_loss += (codebook_loss_i * mask).mean()\n\n            codebook_indices.append(indices_i)\n            latents.append(z_e_i)\n\n        codes = torch.stack(codebook_indices, dim=1)\n        latents = torch.cat(latents, dim=1)\n\n        return z_q, codes, latents, commitment_loss, codebook_loss\n\n    def from_codes(self, codes: torch.Tensor):\n        \"\"\"Given the quantized codes, reconstruct the continuous representation\n        Parameters\n        ----------\n        codes : Tensor[B x N x T]\n            Quantized discrete representation of input\n        Returns\n        -------\n        Tensor[B x D x T]\n            Quantized continuous representation of input\n        \"\"\"\n        z_q = 0.0\n        z_p = []\n        n_codebooks = codes.shape[1]\n        for i in range(n_codebooks):\n            z_p_i = self.quantizers[i].decode_code(codes[:, i, :])\n            z_p.append(z_p_i)\n\n            z_q_i = self.quantizers[i].out_proj(z_p_i)\n            z_q = z_q + z_q_i\n        return z_q, torch.cat(z_p, dim=1), codes\n\n    def from_latents(self, latents: torch.Tensor):\n        \"\"\"Given the unquantized latents, reconstruct the\n        continuous representation after quantization.\n\n        Parameters\n        ----------\n        latents : Tensor[B x N x T]\n            Continuous representation of input after projection\n\n        Returns\n        -------\n        Tensor[B x D x T]\n            Quantized representation of full-projected space\n        Tensor[B x D x T]\n            Quantized representation of latent space\n        \"\"\"\n        z_q = 0\n        z_p = []\n        codes = []\n        dims = np.cumsum([0] + [q.codebook_dim for q in self.quantizers])\n\n        n_codebooks = np.where(dims <= latents.shape[1])[0].max(axis=0, keepdims=True)[\n            0\n        ]\n        for i in range(n_codebooks):\n            j, k = dims[i], dims[i + 1]\n            z_p_i, codes_i = self.quantizers[i].decode_latents(latents[:, j:k, :])\n            z_p.append(z_p_i)\n            codes.append(codes_i)\n\n            z_q_i = self.quantizers[i].out_proj(z_p_i)\n            z_q = z_q + z_q_i\n\n        return z_q, torch.cat(z_p, dim=1), torch.stack(codes, dim=1)\n\n\nif __name__ == \"__main__\":\n    rvq = ResidualVectorQuantize(quantizer_dropout=True)\n    x = torch.randn(16, 512, 80)\n    y = rvq(x)\n    print(y[\"latents\"].shape)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/utils/__init__.py",
    "content": "from pathlib import Path\n\nimport argbind\nfrom audiotools import ml\n\nimport indextts.s2mel.dac as dac\n\nDAC = dac.model.DAC\nAccelerator = ml.Accelerator\n\n__MODEL_LATEST_TAGS__ = {\n    (\"44khz\", \"8kbps\"): \"0.0.1\",\n    (\"24khz\", \"8kbps\"): \"0.0.4\",\n    (\"16khz\", \"8kbps\"): \"0.0.5\",\n    (\"44khz\", \"16kbps\"): \"1.0.0\",\n}\n\n__MODEL_URLS__ = {\n    (\n        \"44khz\",\n        \"0.0.1\",\n        \"8kbps\",\n    ): \"https://github.com/descriptinc/descript-audio-codec/releases/download/0.0.1/weights.pth\",\n    (\n        \"24khz\",\n        \"0.0.4\",\n        \"8kbps\",\n    ): \"https://github.com/descriptinc/descript-audio-codec/releases/download/0.0.4/weights_24khz.pth\",\n    (\n        \"16khz\",\n        \"0.0.5\",\n        \"8kbps\",\n    ): \"https://github.com/descriptinc/descript-audio-codec/releases/download/0.0.5/weights_16khz.pth\",\n    (\n        \"44khz\",\n        \"1.0.0\",\n        \"16kbps\",\n    ): \"https://github.com/descriptinc/descript-audio-codec/releases/download/1.0.0/weights_44khz_16kbps.pth\",\n}\n\n\n@argbind.bind(group=\"download\", positional=True, without_prefix=True)\ndef download(\n    model_type: str = \"44khz\", model_bitrate: str = \"8kbps\", tag: str = \"latest\"\n):\n    \"\"\"\n    Function that downloads the weights file from URL if a local cache is not found.\n\n    Parameters\n    ----------\n    model_type : str\n        The type of model to download. Must be one of \"44khz\", \"24khz\", or \"16khz\". Defaults to \"44khz\".\n    model_bitrate: str\n        Bitrate of the model. Must be one of \"8kbps\", or \"16kbps\". Defaults to \"8kbps\".\n        Only 44khz model supports 16kbps.\n    tag : str\n        The tag of the model to download. Defaults to \"latest\".\n\n    Returns\n    -------\n    Path\n        Directory path required to load model via audiotools.\n    \"\"\"\n    model_type = model_type.lower()\n    tag = tag.lower()\n\n    assert model_type in [\n        \"44khz\",\n        \"24khz\",\n        \"16khz\",\n    ], \"model_type must be one of '44khz', '24khz', or '16khz'\"\n\n    assert model_bitrate in [\n        \"8kbps\",\n        \"16kbps\",\n    ], \"model_bitrate must be one of '8kbps', or '16kbps'\"\n\n    if tag == \"latest\":\n        tag = __MODEL_LATEST_TAGS__[(model_type, model_bitrate)]\n\n    download_link = __MODEL_URLS__.get((model_type, tag, model_bitrate), None)\n\n    if download_link is None:\n        raise ValueError(\n            f\"Could not find model with tag {tag} and model type {model_type}\"\n        )\n\n    local_path = (\n        Path.home()\n        / \".cache\"\n        / \"descript\"\n        / \"dac\"\n        / f\"weights_{model_type}_{model_bitrate}_{tag}.pth\"\n    )\n    if not local_path.exists():\n        local_path.parent.mkdir(parents=True, exist_ok=True)\n\n        # Download the model\n        import requests\n\n        response = requests.get(download_link)\n\n        if response.status_code != 200:\n            raise ValueError(\n                f\"Could not download model. Received response code {response.status_code}\"\n            )\n        local_path.write_bytes(response.content)\n\n    return local_path\n\n\ndef load_model(\n    model_type: str = \"44khz\",\n    model_bitrate: str = \"8kbps\",\n    tag: str = \"latest\",\n    load_path: str = None,\n):\n    if not load_path:\n        load_path = download(\n            model_type=model_type, model_bitrate=model_bitrate, tag=tag\n        )\n    generator = DAC.load(load_path)\n    return generator\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/utils/decode.py",
    "content": "import warnings\nfrom pathlib import Path\n\nimport argbind\nimport numpy as np\nimport torch\nfrom audiotools import AudioSignal\nfrom tqdm import tqdm\n\nfrom dac import DACFile\nfrom dac.utils import load_model\n\nwarnings.filterwarnings(\"ignore\", category=UserWarning)\n\n\n@argbind.bind(group=\"decode\", positional=True, without_prefix=True)\n@torch.inference_mode()\n@torch.no_grad()\ndef decode(\n    input: str,\n    output: str = \"\",\n    weights_path: str = \"\",\n    model_tag: str = \"latest\",\n    model_bitrate: str = \"8kbps\",\n    device: str = \"cuda\",\n    model_type: str = \"44khz\",\n    verbose: bool = False,\n):\n    \"\"\"Decode audio from codes.\n\n    Parameters\n    ----------\n    input : str\n        Path to input directory or file\n    output : str, optional\n        Path to output directory, by default \"\".\n        If `input` is a directory, the directory sub-tree relative to `input` is re-created in `output`.\n    weights_path : str, optional\n        Path to weights file, by default \"\". If not specified, the weights file will be downloaded from the internet using the\n        model_tag and model_type.\n    model_tag : str, optional\n        Tag of the model to use, by default \"latest\". Ignored if `weights_path` is specified.\n    model_bitrate: str\n        Bitrate of the model. Must be one of \"8kbps\", or \"16kbps\". Defaults to \"8kbps\".\n    device : str, optional\n        Device to use, by default \"cuda\". If \"cpu\", the model will be loaded on the CPU.\n    model_type : str, optional\n        The type of model to use. Must be one of \"44khz\", \"24khz\", or \"16khz\". Defaults to \"44khz\". Ignored if `weights_path` is specified.\n    \"\"\"\n    generator = load_model(\n        model_type=model_type,\n        model_bitrate=model_bitrate,\n        tag=model_tag,\n        load_path=weights_path,\n    )\n    generator.to(device)\n    generator.eval()\n\n    # Find all .dac files in input directory\n    _input = Path(input)\n    input_files = list(_input.glob(\"**/*.dac\"))\n\n    # If input is a .dac file, add it to the list\n    if _input.suffix == \".dac\":\n        input_files.append(_input)\n\n    # Create output directory\n    output = Path(output)\n    output.mkdir(parents=True, exist_ok=True)\n\n    for i in tqdm(range(len(input_files)), desc=f\"Decoding files\"):\n        # Load file\n        artifact = DACFile.load(input_files[i])\n\n        # Reconstruct audio from codes\n        recons = generator.decompress(artifact, verbose=verbose)\n\n        # Compute output path\n        relative_path = input_files[i].relative_to(input)\n        output_dir = output / relative_path.parent\n        if not relative_path.name:\n            output_dir = output\n            relative_path = input_files[i]\n        output_name = relative_path.with_suffix(\".wav\").name\n        output_path = output_dir / output_name\n        output_path.parent.mkdir(parents=True, exist_ok=True)\n\n        # Write to file\n        recons.write(output_path)\n\n\nif __name__ == \"__main__\":\n    args = argbind.parse_args()\n    with argbind.scope(args):\n        decode()\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/dac/utils/encode.py",
    "content": "import math\nimport warnings\nfrom pathlib import Path\n\nimport argbind\nimport numpy as np\nimport torch\nfrom audiotools import AudioSignal\nfrom audiotools.core import util\nfrom tqdm import tqdm\n\nfrom dac.utils import load_model\n\nwarnings.filterwarnings(\"ignore\", category=UserWarning)\n\n\n@argbind.bind(group=\"encode\", positional=True, without_prefix=True)\n@torch.inference_mode()\n@torch.no_grad()\ndef encode(\n    input: str,\n    output: str = \"\",\n    weights_path: str = \"\",\n    model_tag: str = \"latest\",\n    model_bitrate: str = \"8kbps\",\n    n_quantizers: int = None,\n    device: str = \"cuda\",\n    model_type: str = \"44khz\",\n    win_duration: float = 5.0,\n    verbose: bool = False,\n):\n    \"\"\"Encode audio files in input path to .dac format.\n\n    Parameters\n    ----------\n    input : str\n        Path to input audio file or directory\n    output : str, optional\n        Path to output directory, by default \"\". If `input` is a directory, the directory sub-tree relative to `input` is re-created in `output`.\n    weights_path : str, optional\n        Path to weights file, by default \"\". If not specified, the weights file will be downloaded from the internet using the\n        model_tag and model_type.\n    model_tag : str, optional\n        Tag of the model to use, by default \"latest\". Ignored if `weights_path` is specified.\n    model_bitrate: str\n        Bitrate of the model. Must be one of \"8kbps\", or \"16kbps\". Defaults to \"8kbps\".\n    n_quantizers : int, optional\n        Number of quantizers to use, by default None. If not specified, all the quantizers will be used and the model will compress at maximum bitrate.\n    device : str, optional\n        Device to use, by default \"cuda\"\n    model_type : str, optional\n        The type of model to use. Must be one of \"44khz\", \"24khz\", or \"16khz\". Defaults to \"44khz\". Ignored if `weights_path` is specified.\n    \"\"\"\n    generator = load_model(\n        model_type=model_type,\n        model_bitrate=model_bitrate,\n        tag=model_tag,\n        load_path=weights_path,\n    )\n    generator.to(device)\n    generator.eval()\n    kwargs = {\"n_quantizers\": n_quantizers}\n\n    # Find all audio files in input path\n    input = Path(input)\n    audio_files = util.find_audio(input)\n\n    output = Path(output)\n    output.mkdir(parents=True, exist_ok=True)\n\n    for i in tqdm(range(len(audio_files)), desc=\"Encoding files\"):\n        # Load file\n        signal = AudioSignal(audio_files[i])\n\n        # Encode audio to .dac format\n        artifact = generator.compress(signal, win_duration, verbose=verbose, **kwargs)\n\n        # Compute output path\n        relative_path = audio_files[i].relative_to(input)\n        output_dir = output / relative_path.parent\n        if not relative_path.name:\n            output_dir = output\n            relative_path = audio_files[i]\n        output_name = relative_path.with_suffix(\".dac\").name\n        output_path = output_dir / output_name\n        output_path.parent.mkdir(parents=True, exist_ok=True)\n\n        artifact.save(output_path)\n\n\nif __name__ == \"__main__\":\n    args = argbind.parse_args()\n    with argbind.scope(args):\n        encode()\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/hf_utils.py",
    "content": "import os\nfrom huggingface_hub import hf_hub_download\n\n\ndef load_custom_model_from_hf(repo_id, model_filename=\"pytorch_model.bin\", config_filename=\"config.yml\"):\n    os.makedirs(\"./checkpoints\", exist_ok=True)\n    model_path = hf_hub_download(repo_id=repo_id, filename=model_filename, cache_dir=\"./checkpoints\")\n    if config_filename is None:\n        return model_path\n    config_path = hf_hub_download(repo_id=repo_id, filename=config_filename, cache_dir=\"./checkpoints\")\n\n    return model_path, config_path"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/__init__.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nfrom .filter import *\nfrom .resample import *\nfrom .act import *\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/act.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nimport torch.nn as nn\nfrom .resample import UpSample1d, DownSample1d\n\n\nclass Activation1d(nn.Module):\n    def __init__(\n        self,\n        activation,\n        up_ratio: int = 2,\n        down_ratio: int = 2,\n        up_kernel_size: int = 12,\n        down_kernel_size: int = 12,\n    ):\n        super().__init__()\n        self.up_ratio = up_ratio\n        self.down_ratio = down_ratio\n        self.act = activation\n        self.upsample = UpSample1d(up_ratio, up_kernel_size)\n        self.downsample = DownSample1d(down_ratio, down_kernel_size)\n\n    # x: [B,C,T]\n    def forward(self, x):\n        x = self.upsample(x)\n        x = self.act(x)\n        x = self.downsample(x)\n\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/filter.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport math\n\nif \"sinc\" in dir(torch):\n    sinc = torch.sinc\nelse:\n    # This code is adopted from adefossez's julius.core.sinc under the MIT License\n    # https://adefossez.github.io/julius/julius/core.html\n    def sinc(x: torch.Tensor):\n        \"\"\"\n        Implementation of sinc, i.e. sin(pi * x) / (pi * x)\n        __Warning__: Different to julius.sinc, the input is multiplied by `pi`!\n        \"\"\"\n        return torch.where(\n            x == 0,\n            torch.tensor(1.0, device=x.device, dtype=x.dtype),\n            torch.sin(math.pi * x) / math.pi / x,\n        )\n\n\n# This code is adopted from adefossez's julius.lowpass.LowPassFilters under the MIT License\n# https://adefossez.github.io/julius/julius/lowpass.html\ndef kaiser_sinc_filter1d(\n    cutoff, half_width, kernel_size\n):  # return filter [1,1,kernel_size]\n    even = kernel_size % 2 == 0\n    half_size = kernel_size // 2\n\n    # For kaiser window\n    delta_f = 4 * half_width\n    A = 2.285 * (half_size - 1) * math.pi * delta_f + 7.95\n    if A > 50.0:\n        beta = 0.1102 * (A - 8.7)\n    elif A >= 21.0:\n        beta = 0.5842 * (A - 21) ** 0.4 + 0.07886 * (A - 21.0)\n    else:\n        beta = 0.0\n    window = torch.kaiser_window(kernel_size, beta=beta, periodic=False)\n\n    # ratio = 0.5/cutoff -> 2 * cutoff = 1 / ratio\n    if even:\n        time = torch.arange(-half_size, half_size) + 0.5\n    else:\n        time = torch.arange(kernel_size) - half_size\n    if cutoff == 0:\n        filter_ = torch.zeros_like(time)\n    else:\n        filter_ = 2 * cutoff * window * sinc(2 * cutoff * time)\n        # Normalize filter to have sum = 1, otherwise we will have a small leakage\n        # of the constant component in the input signal.\n        filter_ /= filter_.sum()\n        filter = filter_.view(1, 1, kernel_size)\n\n    return filter\n\n\nclass LowPassFilter1d(nn.Module):\n    def __init__(\n        self,\n        cutoff=0.5,\n        half_width=0.6,\n        stride: int = 1,\n        padding: bool = True,\n        padding_mode: str = \"replicate\",\n        kernel_size: int = 12,\n    ):\n        # kernel_size should be even number for stylegan3 setup,\n        # in this implementation, odd number is also possible.\n        super().__init__()\n        if cutoff < -0.0:\n            raise ValueError(\"Minimum cutoff must be larger than zero.\")\n        if cutoff > 0.5:\n            raise ValueError(\"A cutoff above 0.5 does not make sense.\")\n        self.kernel_size = kernel_size\n        self.even = kernel_size % 2 == 0\n        self.pad_left = kernel_size // 2 - int(self.even)\n        self.pad_right = kernel_size // 2\n        self.stride = stride\n        self.padding = padding\n        self.padding_mode = padding_mode\n        filter = kaiser_sinc_filter1d(cutoff, half_width, kernel_size)\n        self.register_buffer(\"filter\", filter)\n\n    # input [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        if self.padding:\n            x = F.pad(x, (self.pad_left, self.pad_right), mode=self.padding_mode)\n        out = F.conv1d(x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C)\n\n        return out\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/resample.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nimport torch.nn as nn\nfrom torch.nn import functional as F\nfrom .filter import LowPassFilter1d\nfrom .filter import kaiser_sinc_filter1d\n\n\nclass UpSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.stride = ratio\n        self.pad = self.kernel_size // ratio - 1\n        self.pad_left = self.pad * self.stride + (self.kernel_size - self.stride) // 2\n        self.pad_right = (\n            self.pad * self.stride + (self.kernel_size - self.stride + 1) // 2\n        )\n        filter = kaiser_sinc_filter1d(\n            cutoff=0.5 / ratio, half_width=0.6 / ratio, kernel_size=self.kernel_size\n        )\n        self.register_buffer(\"filter\", filter)\n\n    # x: [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        x = F.pad(x, (self.pad, self.pad), mode=\"replicate\")\n        x = self.ratio * F.conv_transpose1d(\n            x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C\n        )\n        x = x[..., self.pad_left : -self.pad_right]\n\n        return x\n\n\nclass DownSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.lowpass = LowPassFilter1d(\n            cutoff=0.5 / ratio,\n            half_width=0.6 / ratio,\n            stride=ratio,\n            kernel_size=self.kernel_size,\n        )\n\n    def forward(self, x):\n        xx = self.lowpass(x)\n\n        return xx\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/audio.py",
    "content": "import numpy as np\nimport torch\nimport torch.utils.data\nfrom librosa.filters import mel as librosa_mel_fn\nfrom scipy.io.wavfile import read\n\nMAX_WAV_VALUE = 32768.0\n\n\ndef load_wav(full_path):\n    sampling_rate, data = read(full_path)\n    return data, sampling_rate\n\n\ndef dynamic_range_compression(x, C=1, clip_val=1e-5):\n    return np.log(np.clip(x, a_min=clip_val, a_max=None) * C)\n\n\ndef dynamic_range_decompression(x, C=1):\n    return np.exp(x) / C\n\n\ndef dynamic_range_compression_torch(x, C=1, clip_val=1e-5):\n    return torch.log(torch.clamp(x, min=clip_val) * C)\n\n\ndef dynamic_range_decompression_torch(x, C=1):\n    return torch.exp(x) / C\n\n\ndef spectral_normalize_torch(magnitudes):\n    output = dynamic_range_compression_torch(magnitudes)\n    return output\n\n\ndef spectral_de_normalize_torch(magnitudes):\n    output = dynamic_range_decompression_torch(magnitudes)\n    return output\n\n\nmel_basis = {}\nhann_window = {}\n\n\ndef mel_spectrogram(y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False):\n#     if torch.min(y) < -1.0:\n#         print(\"min value is \", torch.min(y))\n#     if torch.max(y) > 1.0:\n#         print(\"max value is \", torch.max(y))\n\n    global mel_basis, hann_window  # pylint: disable=global-statement\n    if f\"{str(sampling_rate)}_{str(fmax)}_{str(y.device)}\" not in mel_basis:\n        mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax)\n        mel_basis[str(sampling_rate) + \"_\" + str(fmax) + \"_\" + str(y.device)] = torch.from_numpy(mel).float().to(y.device)\n        hann_window[str(sampling_rate) + \"_\" + str(y.device)] = torch.hann_window(win_size).to(y.device)\n\n    y = torch.nn.functional.pad(\n        y.unsqueeze(1), (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)), mode=\"reflect\"\n    )\n    y = y.squeeze(1)\n\n    spec = torch.view_as_real(\n        torch.stft(\n            y,\n            n_fft,\n            hop_length=hop_size,\n            win_length=win_size,\n            window=hann_window[str(sampling_rate) + \"_\" + str(y.device)],\n            center=center,\n            pad_mode=\"reflect\",\n            normalized=False,\n            onesided=True,\n            return_complex=True,\n        )\n    )\n\n    spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9))\n\n    spec = torch.matmul(mel_basis[str(sampling_rate) + \"_\" + str(fmax) + \"_\" + str(y.device)], spec)\n    spec = spectral_normalize_torch(spec)\n\n    return spec\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/activations.py",
    "content": "# Implementation adapted from https://github.com/EdwardDixon/snake under the MIT license.\n#   LICENSE is in incl_licenses directory.\n\nimport torch\nfrom torch import nn, sin, pow\nfrom torch.nn import Parameter\n\n\nclass Snake(nn.Module):\n    '''\n    Implementation of a sine-based periodic activation function\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter\n    References:\n        - This activation function is from this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snake(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    '''\n    def __init__(self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False):\n        '''\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha: trainable parameter\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            alpha will be trained along with the rest of your model.\n        '''\n        super(Snake, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale: # log scale alphas initialized to zeros\n            self.alpha = Parameter(torch.zeros(in_features) * alpha)\n        else: # linear scale alphas initialized to ones\n            self.alpha = Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        '''\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        Snake ∶= x + 1/a * sin^2 (xa)\n        '''\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1) # line up with x to [B, C, T]\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n        x = x + (1.0 / (alpha + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x\n\n\nclass SnakeBeta(nn.Module):\n    '''\n    A modified Snake function which uses separate parameters for the magnitude of the periodic components\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter that controls frequency\n        - beta - trainable parameter that controls magnitude\n    References:\n        - This activation function is a modified version based on this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snakebeta(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    '''\n    def __init__(self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False):\n        '''\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha - trainable parameter that controls frequency\n            - beta - trainable parameter that controls magnitude\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            beta is initialized to 1 by default, higher values = higher-magnitude.\n            alpha will be trained along with the rest of your model.\n        '''\n        super(SnakeBeta, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale: # log scale alphas initialized to zeros\n            self.alpha = Parameter(torch.zeros(in_features) * alpha)\n            self.beta = Parameter(torch.zeros(in_features) * alpha)\n        else: # linear scale alphas initialized to ones\n            self.alpha = Parameter(torch.ones(in_features) * alpha)\n            self.beta = Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n        self.beta.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        '''\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        SnakeBeta ∶= x + 1/b * sin^2 (xa)\n        '''\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1) # line up with x to [B, C, T]\n        beta = self.beta.unsqueeze(0).unsqueeze(-1)\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n            beta = torch.exp(beta)\n        x = x + (1.0 / (beta + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/activation1d.py",
    "content": "# Copyright (c) 2024 NVIDIA CORPORATION.\n#   Licensed under the MIT license.\n\nimport torch\nimport torch.nn as nn\nfrom ..torch.resample import UpSample1d, DownSample1d\n\n# load fused CUDA kernel: this enables importing anti_alias_activation_cuda\nfrom ..cuda import load\n\nanti_alias_activation_cuda = load.load()\n\n\nclass FusedAntiAliasActivation(torch.autograd.Function):\n    \"\"\"\n    Assumes filter size 12, replication padding on upsampling/downsampling, and logscale alpha/beta parameters as inputs.\n    The hyperparameters are hard-coded in the kernel to maximize speed.\n    NOTE: The fused kenrel is incorrect for Activation1d with different hyperparameters.\n    \"\"\"\n\n    @staticmethod\n    def forward(ctx, inputs, up_ftr, down_ftr, alpha, beta):\n        activation_results = anti_alias_activation_cuda.forward(\n            inputs, up_ftr, down_ftr, alpha, beta\n        )\n\n        return activation_results\n\n    @staticmethod\n    def backward(ctx, output_grads):\n        raise NotImplementedError\n        return output_grads, None, None\n\n\nclass Activation1d(nn.Module):\n    def __init__(\n        self,\n        activation,\n        up_ratio: int = 2,\n        down_ratio: int = 2,\n        up_kernel_size: int = 12,\n        down_kernel_size: int = 12,\n        fused: bool = True,\n    ):\n        super().__init__()\n        self.up_ratio = up_ratio\n        self.down_ratio = down_ratio\n        self.act = activation\n        self.upsample = UpSample1d(up_ratio, up_kernel_size)\n        self.downsample = DownSample1d(down_ratio, down_kernel_size)\n\n        self.fused = fused  # Whether to use fused CUDA kernel or not\n\n    def forward(self, x):\n        if not self.fused:\n            x = self.upsample(x)\n            x = self.act(x)\n            x = self.downsample(x)\n            return x\n        else:\n            if self.act.__class__.__name__ == \"Snake\":\n                beta = self.act.alpha.data  # Snake uses same params for alpha and beta\n            else:\n                beta = (\n                    self.act.beta.data\n                )  # Snakebeta uses different params for alpha and beta\n            alpha = self.act.alpha.data\n            if (\n                not self.act.alpha_logscale\n            ):  # Exp baked into cuda kernel, cancel it out with a log\n                alpha = torch.log(alpha)\n                beta = torch.log(beta)\n\n            x = FusedAntiAliasActivation.apply(\n                x, self.upsample.filter, self.downsample.lowpass.filter, alpha, beta\n            )\n            return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation.cpp",
    "content": "/* coding=utf-8\n * Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n #include <torch/extension.h>\n\nextern \"C\" torch::Tensor fwd_cuda(torch::Tensor const &input, torch::Tensor const &up_filter, torch::Tensor const &down_filter, torch::Tensor const &alpha, torch::Tensor const &beta);\n\nPYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {\n    m.def(\"forward\", &fwd_cuda, \"Anti-Alias Activation forward (CUDA)\");\n}"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation_cuda.cu",
    "content": "/* coding=utf-8\n * Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <ATen/ATen.h>\n#include <cuda.h>\n#include <cuda_runtime.h>\n#include <cuda_fp16.h>\n#include <cuda_profiler_api.h>\n#include <ATen/cuda/CUDAContext.h>\n#include <torch/extension.h>\n#include \"type_shim.h\"\n#include <assert.h>\n#include <cfloat>\n#include <limits>\n#include <stdint.h>\n#include <c10/macros/Macros.h>\n\nnamespace\n{\n    // Hard-coded hyperparameters\n    // WARP_SIZE and WARP_BATCH must match the return values batches_per_warp and\n    constexpr int ELEMENTS_PER_LDG_STG = 1; //(WARP_ITERATIONS < 4) ? 1 : 4;\n    constexpr int BUFFER_SIZE = 32;\n    constexpr int FILTER_SIZE = 12;\n    constexpr int HALF_FILTER_SIZE = 6;\n    constexpr int UPSAMPLE_REPLICATION_PAD = 5; // 5 on each side, matching torch impl\n    constexpr int DOWNSAMPLE_REPLICATION_PAD_LEFT = 5; // matching torch impl\n    constexpr int DOWNSAMPLE_REPLICATION_PAD_RIGHT = 6; // matching torch impl\n\n    template <typename input_t, typename output_t, typename acc_t>\n    __global__ void anti_alias_activation_forward(\n        output_t *dst,\n        const input_t *src,\n        const input_t *up_ftr,\n        const input_t *down_ftr,\n        const input_t *alpha,\n        const input_t *beta,\n        int batch_size,\n        int channels,\n        int seq_len)\n    {\n        // Up and downsample filters\n        input_t up_filter[FILTER_SIZE];\n        input_t down_filter[FILTER_SIZE];\n\n        // Load data from global memory including extra indices reserved for replication paddings\n        input_t elements[2 * FILTER_SIZE + 2 * BUFFER_SIZE + 2 * UPSAMPLE_REPLICATION_PAD] = {0};\n        input_t intermediates[2 * FILTER_SIZE + 2 * BUFFER_SIZE + DOWNSAMPLE_REPLICATION_PAD_LEFT + DOWNSAMPLE_REPLICATION_PAD_RIGHT] = {0};\n\n        // Output stores downsampled output before writing to dst\n        output_t output[BUFFER_SIZE];\n\n        // blockDim/threadIdx = (128, 1, 1)\n        // gridDim/blockIdx = (seq_blocks, channels, batches)\n        int block_offset = (blockIdx.x * 128 * BUFFER_SIZE + seq_len * (blockIdx.y + gridDim.y * blockIdx.z));\n        int local_offset = threadIdx.x * BUFFER_SIZE;\n        int seq_offset = blockIdx.x * 128 * BUFFER_SIZE + local_offset;\n\n        // intermediate have double the seq_len\n        int intermediate_local_offset = threadIdx.x * BUFFER_SIZE * 2;\n        int intermediate_seq_offset = blockIdx.x * 128 * BUFFER_SIZE * 2 + intermediate_local_offset;\n\n        // Get values needed for replication padding before moving pointer\n        const input_t *right_most_pntr = src + (seq_len * (blockIdx.y + gridDim.y * blockIdx.z));\n        input_t seq_left_most_value = right_most_pntr[0];\n        input_t seq_right_most_value = right_most_pntr[seq_len - 1];\n\n        // Move src and dst pointers\n        src += block_offset + local_offset;\n        dst += block_offset + local_offset;\n\n        // Alpha and beta values for snake activatons. Applies exp by default\n        alpha = alpha + blockIdx.y;\n        input_t alpha_val = expf(alpha[0]);\n        beta = beta + blockIdx.y;\n        input_t beta_val = expf(beta[0]);\n\n        #pragma unroll\n        for (int it = 0; it < FILTER_SIZE; it += 1)\n        {\n            up_filter[it] = up_ftr[it];\n            down_filter[it] = down_ftr[it];\n        }\n\n        // Apply replication padding for upsampling, matching torch impl\n        #pragma unroll\n        for (int it = -HALF_FILTER_SIZE; it < BUFFER_SIZE + HALF_FILTER_SIZE; it += 1)\n        {\n            int element_index = seq_offset + it; // index for element\n            if ((element_index < 0) && (element_index >= -UPSAMPLE_REPLICATION_PAD))\n            {\n                elements[2 * (HALF_FILTER_SIZE + it)] = 2 * seq_left_most_value;\n            }\n            if ((element_index >= seq_len) && (element_index < seq_len + UPSAMPLE_REPLICATION_PAD))\n            {\n                elements[2 * (HALF_FILTER_SIZE + it)] = 2 * seq_right_most_value;\n            }\n            if ((element_index >= 0) && (element_index < seq_len))\n            {\n                elements[2 * (HALF_FILTER_SIZE + it)] = 2 * src[it];\n            }\n        }\n\n        // Apply upsampling strided convolution and write to intermediates. It reserves DOWNSAMPLE_REPLICATION_PAD_LEFT for replication padding of the downsampilng conv later\n        #pragma unroll\n        for (int it = 0; it < (2 * BUFFER_SIZE + 2 * FILTER_SIZE); it += 1)\n        {\n            input_t acc = 0.0;\n            int element_index = intermediate_seq_offset + it; // index for intermediate\n            #pragma unroll\n            for (int f_idx = 0; f_idx < FILTER_SIZE; f_idx += 1)\n            {\n                if ((element_index + f_idx) >= 0)\n                {\n                    acc += up_filter[f_idx] * elements[it + f_idx];\n                }\n            }\n            intermediates[it + DOWNSAMPLE_REPLICATION_PAD_LEFT] = acc;\n        }\n\n        // Apply activation function. It reserves DOWNSAMPLE_REPLICATION_PAD_LEFT and DOWNSAMPLE_REPLICATION_PAD_RIGHT for replication padding of the downsampilng conv later\n        double no_div_by_zero = 0.000000001;\n        #pragma unroll\n        for (int it = 0; it < 2 * BUFFER_SIZE + 2 * FILTER_SIZE; it += 1)\n        {\n            intermediates[it + DOWNSAMPLE_REPLICATION_PAD_LEFT] += (1.0 / (beta_val + no_div_by_zero)) * sinf(intermediates[it + DOWNSAMPLE_REPLICATION_PAD_LEFT] * alpha_val) * sinf(intermediates[it + DOWNSAMPLE_REPLICATION_PAD_LEFT] * alpha_val);\n        }\n\n        // Apply replication padding before downsampling conv from intermediates\n        #pragma unroll\n        for (int it = 0; it < DOWNSAMPLE_REPLICATION_PAD_LEFT; it += 1)\n        {\n            intermediates[it] = intermediates[DOWNSAMPLE_REPLICATION_PAD_LEFT];\n        }\n        #pragma unroll\n        for (int it = DOWNSAMPLE_REPLICATION_PAD_LEFT + 2 * BUFFER_SIZE + 2 * FILTER_SIZE; it < DOWNSAMPLE_REPLICATION_PAD_LEFT + 2 * BUFFER_SIZE + 2 * FILTER_SIZE + DOWNSAMPLE_REPLICATION_PAD_RIGHT; it += 1)\n        {\n            intermediates[it] = intermediates[DOWNSAMPLE_REPLICATION_PAD_LEFT + 2 * BUFFER_SIZE + 2 * FILTER_SIZE - 1];\n        }\n\n        // Apply downsample strided convolution (assuming stride=2) from intermediates\n        #pragma unroll\n        for (int it = 0; it < BUFFER_SIZE; it += 1)\n        {\n            input_t acc = 0.0;\n            #pragma unroll\n            for (int f_idx = 0; f_idx < FILTER_SIZE; f_idx += 1)\n            {\n                // Add constant DOWNSAMPLE_REPLICATION_PAD_RIGHT to match torch implementation\n                acc += down_filter[f_idx] * intermediates[it * 2 + f_idx + DOWNSAMPLE_REPLICATION_PAD_RIGHT];\n            }\n            output[it] = acc;\n        }\n\n        // Write output to dst\n        #pragma unroll\n        for (int it = 0;  it < BUFFER_SIZE;  it += ELEMENTS_PER_LDG_STG)\n        {\n            int element_index = seq_offset + it;\n            if (element_index < seq_len)\n            {\n                dst[it] = output[it];\n            }\n        }\n\n    }\n\n    template <typename input_t, typename output_t, typename acc_t>\n    void dispatch_anti_alias_activation_forward(\n        output_t *dst,\n        const input_t *src,\n        const input_t *up_ftr,\n        const input_t *down_ftr,\n        const input_t *alpha,\n        const input_t *beta,\n        int batch_size,\n        int channels,\n        int seq_len)\n    {\n        if (seq_len == 0)\n        {\n            return;\n        }\n        else\n        {\n            // Use 128 threads per block to maximimize gpu utilization\n            constexpr int threads_per_block = 128;\n            constexpr int seq_len_per_block = 4096;\n            int blocks_per_seq_len = (seq_len + seq_len_per_block - 1) / seq_len_per_block;\n            dim3 blocks(blocks_per_seq_len, channels, batch_size);\n            dim3 threads(threads_per_block, 1, 1);\n\n            anti_alias_activation_forward<input_t, output_t, acc_t>\n                <<<blocks, threads, 0, at::cuda::getCurrentCUDAStream()>>>(dst, src, up_ftr, down_ftr, alpha, beta, batch_size, channels, seq_len);\n        }\n    }\n}\n\nextern \"C\" torch::Tensor fwd_cuda(torch::Tensor const &input, torch::Tensor const &up_filter, torch::Tensor const &down_filter, torch::Tensor const &alpha, torch::Tensor const &beta)\n{\n    // Input is a 3d tensor with dimensions [batches, channels, seq_len]\n    const int batches = input.size(0);\n    const int channels = input.size(1);\n    const int seq_len = input.size(2);\n\n    // Output\n    auto act_options = input.options().requires_grad(false);\n\n    torch::Tensor anti_alias_activation_results =\n        torch::empty({batches, channels, seq_len}, act_options);\n\n    void *input_ptr = static_cast<void *>(input.data_ptr());\n    void *up_filter_ptr = static_cast<void *>(up_filter.data_ptr());\n    void *down_filter_ptr = static_cast<void *>(down_filter.data_ptr());\n    void *alpha_ptr = static_cast<void *>(alpha.data_ptr());\n    void *beta_ptr = static_cast<void *>(beta.data_ptr());\n    void *anti_alias_activation_results_ptr = static_cast<void *>(anti_alias_activation_results.data_ptr());\n\n    DISPATCH_FLOAT_HALF_AND_BFLOAT(\n        input.scalar_type(),\n        \"dispatch anti alias activation_forward\",\n        dispatch_anti_alias_activation_forward<scalar_t, scalar_t, float>(\n            reinterpret_cast<scalar_t *>(anti_alias_activation_results_ptr),\n            reinterpret_cast<const scalar_t *>(input_ptr),\n            reinterpret_cast<const scalar_t *>(up_filter_ptr),\n            reinterpret_cast<const scalar_t *>(down_filter_ptr),\n            reinterpret_cast<const scalar_t *>(alpha_ptr),\n            reinterpret_cast<const scalar_t *>(beta_ptr),\n            batches,\n            channels,\n            seq_len););\n    return anti_alias_activation_results;\n}"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/compat.h",
    "content": "/* coding=utf-8\n * Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*This code is copied fron NVIDIA apex:\n *     https://github.com/NVIDIA/apex\n *     with minor changes. */\n\n#ifndef TORCH_CHECK\n#define TORCH_CHECK AT_CHECK\n#endif\n\n#ifdef VERSION_GE_1_3\n#define DATA_PTR data_ptr\n#else\n#define DATA_PTR data\n#endif\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/load.py",
    "content": "# Copyright (c) 2024 NVIDIA CORPORATION.\n#   Licensed under the MIT license.\n\nimport os\nimport pathlib\nimport subprocess\n\nfrom torch.utils import cpp_extension\n\n\"\"\"\nSetting this param to a list has a problem of generating different compilation commands (with diferent order of architectures) and leading to recompilation of fused kernels. \nSet it to empty stringo avoid recompilation and assign arch flags explicity in extra_cuda_cflags below\n\"\"\"\nos.environ[\"TORCH_CUDA_ARCH_LIST\"] = \"\"\n\n\ndef load():\n    # Check if cuda 11 is installed for compute capability 8.0\n    cc_flag = []\n    _, bare_metal_major, _ = _get_cuda_bare_metal_version(cpp_extension.CUDA_HOME)\n    if int(bare_metal_major) >= 11:\n        cc_flag.append(\"-gencode\")\n        cc_flag.append(\"arch=compute_80,code=sm_80\")\n\n    # Build path\n    srcpath = pathlib.Path(__file__).parent.absolute()\n    buildpath = srcpath / \"build\"\n    _create_build_dir(buildpath)\n\n    # Helper function to build the kernels.\n    def _cpp_extention_load_helper(name, sources, extra_cuda_flags):\n        return cpp_extension.load(\n            name=name,\n            sources=sources,\n            build_directory=buildpath,\n            extra_cflags=[\n                \"-O3\",\n            ],\n            extra_cuda_cflags=[\n                \"-O3\",\n                \"-gencode\",\n                \"arch=compute_70,code=sm_70\",\n                \"--use_fast_math\",\n            ]\n            + extra_cuda_flags\n            + cc_flag,\n            verbose=True,\n        )\n\n    extra_cuda_flags = [\n        \"-U__CUDA_NO_HALF_OPERATORS__\",\n        \"-U__CUDA_NO_HALF_CONVERSIONS__\",\n        \"--expt-relaxed-constexpr\",\n        \"--expt-extended-lambda\",\n    ]\n\n    sources = [\n        srcpath / \"anti_alias_activation.cpp\",\n        srcpath / \"anti_alias_activation_cuda.cu\",\n    ]\n    anti_alias_activation_cuda = _cpp_extention_load_helper(\n        \"anti_alias_activation_cuda\", sources, extra_cuda_flags\n    )\n\n    return anti_alias_activation_cuda\n\n\ndef _get_cuda_bare_metal_version(cuda_dir):\n    raw_output = subprocess.check_output(\n        [cuda_dir + \"/bin/nvcc\", \"-V\"], universal_newlines=True\n    )\n    output = raw_output.split()\n    release_idx = output.index(\"release\") + 1\n    release = output[release_idx].split(\".\")\n    bare_metal_major = release[0]\n    bare_metal_minor = release[1][0]\n\n    return raw_output, bare_metal_major, bare_metal_minor\n\n\ndef _create_build_dir(buildpath):\n    try:\n        os.mkdir(buildpath)\n    except OSError:\n        if not os.path.isdir(buildpath):\n            print(f\"Creation of the build directory {buildpath} failed\")\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/type_shim.h",
    "content": "/* coding=utf-8\n * Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <ATen/ATen.h>\n#include \"compat.h\"\n\n#define DISPATCH_FLOAT_HALF_AND_BFLOAT(TYPE, NAME, ...)                 \\\n\tswitch (TYPE)                                                       \\\n\t{                                                                   \\\n\tcase at::ScalarType::Float:                                         \\\n\t{                                                                   \\\n\t\tusing scalar_t = float;                                         \\\n\t\t__VA_ARGS__;                                                    \\\n\t\tbreak;                                                          \\\n\t}                                                                   \\\n\tcase at::ScalarType::Half:                                          \\\n\t{                                                                   \\\n\t\tusing scalar_t = at::Half;                                      \\\n\t\t__VA_ARGS__;                                                    \\\n\t\tbreak;                                                          \\\n\t}                                                                   \\\n\tcase at::ScalarType::BFloat16:                                      \\\n\t{                                                                   \\\n\t\tusing scalar_t = at::BFloat16;                                  \\\n\t\t__VA_ARGS__;                                                    \\\n\t\tbreak;                                                          \\\n\t}                                                                   \\\n\tdefault:                                                            \\\n\t\tAT_ERROR(#NAME, \" not implemented for '\", toString(TYPE), \"'\"); \\\n\t}\n\n#define DISPATCH_FLOAT_HALF_AND_BFLOAT_INOUT_TYPES(TYPEIN, TYPEOUT, NAME, ...) \\\n\tswitch (TYPEIN)                                                            \\\n\t{                                                                          \\\n\tcase at::ScalarType::Float:                                                \\\n\t{                                                                          \\\n\t\tusing scalar_t_in = float;                                             \\\n\t\tswitch (TYPEOUT)                                                       \\\n\t\t{                                                                      \\\n\t\tcase at::ScalarType::Float:                                            \\\n\t\t{                                                                      \\\n\t\t\tusing scalar_t_out = float;                                        \\\n\t\t\t__VA_ARGS__;                                                       \\\n\t\t\tbreak;                                                             \\\n\t\t}                                                                      \\\n\t\tcase at::ScalarType::Half:                                             \\\n\t\t{                                                                      \\\n\t\t\tusing scalar_t_out = at::Half;                                     \\\n\t\t\t__VA_ARGS__;                                                       \\\n\t\t\tbreak;                                                             \\\n\t\t}                                                                      \\\n\t\tcase at::ScalarType::BFloat16:                                         \\\n\t\t{                                                                      \\\n\t\t\tusing scalar_t_out = at::BFloat16;                                 \\\n\t\t\t__VA_ARGS__;                                                       \\\n\t\t\tbreak;                                                             \\\n\t\t}                                                                      \\\n\t\tdefault:                                                               \\\n\t\t\tAT_ERROR(#NAME, \" not implemented for '\", toString(TYPEOUT), \"'\"); \\\n\t\t}                                                                      \\\n\t\tbreak;                                                                 \\\n\t}                                                                          \\\n\tcase at::ScalarType::Half:                                                 \\\n\t{                                                                          \\\n\t\tusing scalar_t_in = at::Half;                                          \\\n\t\tusing scalar_t_out = at::Half;                                         \\\n\t\t__VA_ARGS__;                                                           \\\n\t\tbreak;                                                                 \\\n\t}                                                                          \\\n\tcase at::ScalarType::BFloat16:                                             \\\n\t{                                                                          \\\n\t\tusing scalar_t_in = at::BFloat16;                                      \\\n\t\tusing scalar_t_out = at::BFloat16;                                     \\\n\t\t__VA_ARGS__;                                                           \\\n\t\tbreak;                                                                 \\\n\t}                                                                          \\\n\tdefault:                                                                   \\\n\t\tAT_ERROR(#NAME, \" not implemented for '\", toString(TYPEIN), \"'\");      \\\n\t}\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/__init__.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nfrom .filter import *\nfrom .resample import *\nfrom .act import *\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/act.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nimport torch.nn as nn\nfrom .resample import UpSample1d, DownSample1d\n\n\nclass Activation1d(nn.Module):\n    def __init__(\n        self,\n        activation,\n        up_ratio: int = 2,\n        down_ratio: int = 2,\n        up_kernel_size: int = 12,\n        down_kernel_size: int = 12,\n    ):\n        super().__init__()\n        self.up_ratio = up_ratio\n        self.down_ratio = down_ratio\n        self.act = activation\n        self.upsample = UpSample1d(up_ratio, up_kernel_size)\n        self.downsample = DownSample1d(down_ratio, down_kernel_size)\n\n    # x: [B,C,T]\n    def forward(self, x):\n        x = self.upsample(x)\n        x = self.act(x)\n        x = self.downsample(x)\n\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/filter.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport math\n\nif \"sinc\" in dir(torch):\n    sinc = torch.sinc\nelse:\n    # This code is adopted from adefossez's julius.core.sinc under the MIT License\n    # https://adefossez.github.io/julius/julius/core.html\n    #   LICENSE is in incl_licenses directory.\n    def sinc(x: torch.Tensor):\n        \"\"\"\n        Implementation of sinc, i.e. sin(pi * x) / (pi * x)\n        __Warning__: Different to julius.sinc, the input is multiplied by `pi`!\n        \"\"\"\n        return torch.where(\n            x == 0,\n            torch.tensor(1.0, device=x.device, dtype=x.dtype),\n            torch.sin(math.pi * x) / math.pi / x,\n        )\n\n\n# This code is adopted from adefossez's julius.lowpass.LowPassFilters under the MIT License\n# https://adefossez.github.io/julius/julius/lowpass.html\n#   LICENSE is in incl_licenses directory.\ndef kaiser_sinc_filter1d(\n    cutoff, half_width, kernel_size\n):  # return filter [1,1,kernel_size]\n    even = kernel_size % 2 == 0\n    half_size = kernel_size // 2\n\n    # For kaiser window\n    delta_f = 4 * half_width\n    A = 2.285 * (half_size - 1) * math.pi * delta_f + 7.95\n    if A > 50.0:\n        beta = 0.1102 * (A - 8.7)\n    elif A >= 21.0:\n        beta = 0.5842 * (A - 21) ** 0.4 + 0.07886 * (A - 21.0)\n    else:\n        beta = 0.0\n    window = torch.kaiser_window(kernel_size, beta=beta, periodic=False)\n\n    # ratio = 0.5/cutoff -> 2 * cutoff = 1 / ratio\n    if even:\n        time = torch.arange(-half_size, half_size) + 0.5\n    else:\n        time = torch.arange(kernel_size) - half_size\n    if cutoff == 0:\n        filter_ = torch.zeros_like(time)\n    else:\n        filter_ = 2 * cutoff * window * sinc(2 * cutoff * time)\n        \"\"\"\n        Normalize filter to have sum = 1, otherwise we will have a small leakage of the constant component in the input signal.\n        \"\"\"\n        filter_ /= filter_.sum()\n        filter = filter_.view(1, 1, kernel_size)\n\n    return filter\n\n\nclass LowPassFilter1d(nn.Module):\n    def __init__(\n        self,\n        cutoff=0.5,\n        half_width=0.6,\n        stride: int = 1,\n        padding: bool = True,\n        padding_mode: str = \"replicate\",\n        kernel_size: int = 12,\n    ):\n        \"\"\"\n        kernel_size should be even number for stylegan3 setup, in this implementation, odd number is also possible.\n        \"\"\"\n        super().__init__()\n        if cutoff < -0.0:\n            raise ValueError(\"Minimum cutoff must be larger than zero.\")\n        if cutoff > 0.5:\n            raise ValueError(\"A cutoff above 0.5 does not make sense.\")\n        self.kernel_size = kernel_size\n        self.even = kernel_size % 2 == 0\n        self.pad_left = kernel_size // 2 - int(self.even)\n        self.pad_right = kernel_size // 2\n        self.stride = stride\n        self.padding = padding\n        self.padding_mode = padding_mode\n        filter = kaiser_sinc_filter1d(cutoff, half_width, kernel_size)\n        self.register_buffer(\"filter\", filter)\n\n    # Input [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        if self.padding:\n            x = F.pad(x, (self.pad_left, self.pad_right), mode=self.padding_mode)\n        out = F.conv1d(x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C)\n\n        return out\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/resample.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n#   LICENSE is in incl_licenses directory.\n\nimport torch.nn as nn\nfrom torch.nn import functional as F\nfrom .filter import LowPassFilter1d\nfrom .filter import kaiser_sinc_filter1d\n\n\nclass UpSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.stride = ratio\n        self.pad = self.kernel_size // ratio - 1\n        self.pad_left = self.pad * self.stride + (self.kernel_size - self.stride) // 2\n        self.pad_right = (\n            self.pad * self.stride + (self.kernel_size - self.stride + 1) // 2\n        )\n        filter = kaiser_sinc_filter1d(\n            cutoff=0.5 / ratio, half_width=0.6 / ratio, kernel_size=self.kernel_size\n        )\n        self.register_buffer(\"filter\", filter)\n\n    # x: [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        x = F.pad(x, (self.pad, self.pad), mode=\"replicate\")\n        x = self.ratio * F.conv_transpose1d(\n            x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C\n        )\n        x = x[..., self.pad_left : -self.pad_right]\n\n        return x\n\n\nclass DownSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.lowpass = LowPassFilter1d(\n            cutoff=0.5 / ratio,\n            half_width=0.6 / ratio,\n            stride=ratio,\n            kernel_size=self.kernel_size,\n        )\n\n    def forward(self, x):\n        xx = self.lowpass(x)\n\n        return xx\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/bigvgan.py",
    "content": "# Copyright (c) 2024 NVIDIA CORPORATION.\n#   Licensed under the MIT license.\n\n# Adapted from https://github.com/jik876/hifi-gan under the MIT license.\n#   LICENSE is in incl_licenses directory.\n\nimport os\nimport json\nfrom pathlib import Path\nfrom typing import Optional, Union, Dict\n\nimport torch\nimport torch.nn as nn\nfrom torch.nn import Conv1d, ConvTranspose1d\nfrom torch.nn.utils import weight_norm, remove_weight_norm\n\nfrom . import activations\nfrom .utils import init_weights, get_padding\nfrom .alias_free_activation.torch.act import Activation1d as TorchActivation1d\nfrom .env import AttrDict\n\nfrom huggingface_hub import PyTorchModelHubMixin, hf_hub_download\n\n\ndef load_hparams_from_json(path) -> AttrDict:\n    with open(path) as f:\n        data = f.read()\n    return AttrDict(json.loads(data))\n\n\nclass AMPBlock1(torch.nn.Module):\n    \"\"\"\n    AMPBlock applies Snake / SnakeBeta activation functions with trainable parameters that control periodicity, defined for each layer.\n    AMPBlock1 has additional self.convs2 that contains additional Conv1d layers with a fixed dilation=1 followed by each layer in self.convs1\n\n    Args:\n        h (AttrDict): Hyperparameters.\n        channels (int): Number of convolution channels.\n        kernel_size (int): Size of the convolution kernel. Default is 3.\n        dilation (tuple): Dilation rates for the convolutions. Each dilation layer has two convolutions. Default is (1, 3, 5).\n        activation (str): Activation function type. Should be either 'snake' or 'snakebeta'. Default is None.\n    \"\"\"\n\n    def __init__(\n            self,\n            h: AttrDict,\n            channels: int,\n            kernel_size: int = 3,\n            dilation: tuple = (1, 3, 5),\n            activation: str = None,\n    ):\n        super().__init__()\n\n        self.h = h\n\n        self.convs1 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        stride=1,\n                        dilation=d,\n                        padding=get_padding(kernel_size, d),\n                    )\n                )\n                for d in dilation\n            ]\n        )\n        self.convs1.apply(init_weights)\n\n        self.convs2 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        stride=1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                )\n                for _ in range(len(dilation))\n            ]\n        )\n        self.convs2.apply(init_weights)\n\n        self.num_layers = len(self.convs1) + len(\n            self.convs2\n        )  # Total number of conv layers\n\n        # Select which Activation1d, lazy-load cuda version to ensure backward compatibility\n        if self.h.get(\"use_cuda_kernel\", False):\n            from .alias_free_activation.cuda.activation1d import (\n                Activation1d as CudaActivation1d,\n            )\n\n            Activation1d = CudaActivation1d\n        else:\n            Activation1d = TorchActivation1d\n\n        # Activation functions\n        if activation == \"snake\":\n            self.activations = nn.ModuleList(\n                [\n                    Activation1d(\n                        activation=activations.Snake(\n                            channels, alpha_logscale=h.snake_logscale\n                        )\n                    )\n                    for _ in range(self.num_layers)\n                ]\n            )\n        elif activation == \"snakebeta\":\n            self.activations = nn.ModuleList(\n                [\n                    Activation1d(\n                        activation=activations.SnakeBeta(\n                            channels, alpha_logscale=h.snake_logscale\n                        )\n                    )\n                    for _ in range(self.num_layers)\n                ]\n            )\n        else:\n            raise NotImplementedError(\n                \"activation incorrectly specified. check the config file and look for 'activation'.\"\n            )\n\n    def forward(self, x):\n        acts1, acts2 = self.activations[::2], self.activations[1::2]\n        for c1, c2, a1, a2 in zip(self.convs1, self.convs2, acts1, acts2):\n            xt = a1(x)\n            xt = c1(xt)\n            xt = a2(xt)\n            xt = c2(xt)\n            x = xt + x\n\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n\nclass AMPBlock2(torch.nn.Module):\n    \"\"\"\n    AMPBlock applies Snake / SnakeBeta activation functions with trainable parameters that control periodicity, defined for each layer.\n    Unlike AMPBlock1, AMPBlock2 does not contain extra Conv1d layers with fixed dilation=1\n\n    Args:\n        h (AttrDict): Hyperparameters.\n        channels (int): Number of convolution channels.\n        kernel_size (int): Size of the convolution kernel. Default is 3.\n        dilation (tuple): Dilation rates for the convolutions. Each dilation layer has two convolutions. Default is (1, 3, 5).\n        activation (str): Activation function type. Should be either 'snake' or 'snakebeta'. Default is None.\n    \"\"\"\n\n    def __init__(\n            self,\n            h: AttrDict,\n            channels: int,\n            kernel_size: int = 3,\n            dilation: tuple = (1, 3, 5),\n            activation: str = None,\n    ):\n        super().__init__()\n\n        self.h = h\n\n        self.convs = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        stride=1,\n                        dilation=d,\n                        padding=get_padding(kernel_size, d),\n                    )\n                )\n                for d in dilation\n            ]\n        )\n        self.convs.apply(init_weights)\n\n        self.num_layers = len(self.convs)  # Total number of conv layers\n\n        # Select which Activation1d, lazy-load cuda version to ensure backward compatibility\n        if self.h.get(\"use_cuda_kernel\", False):\n            from .alias_free_activation.cuda.activation1d import (\n                Activation1d as CudaActivation1d,\n            )\n\n            Activation1d = CudaActivation1d\n        else:\n            Activation1d = TorchActivation1d\n\n        # Activation functions\n        if activation == \"snake\":\n            self.activations = nn.ModuleList(\n                [\n                    Activation1d(\n                        activation=activations.Snake(\n                            channels, alpha_logscale=h.snake_logscale\n                        )\n                    )\n                    for _ in range(self.num_layers)\n                ]\n            )\n        elif activation == \"snakebeta\":\n            self.activations = nn.ModuleList(\n                [\n                    Activation1d(\n                        activation=activations.SnakeBeta(\n                            channels, alpha_logscale=h.snake_logscale\n                        )\n                    )\n                    for _ in range(self.num_layers)\n                ]\n            )\n        else:\n            raise NotImplementedError(\n                \"activation incorrectly specified. check the config file and look for 'activation'.\"\n            )\n\n    def forward(self, x):\n        for c, a in zip(self.convs, self.activations):\n            xt = a(x)\n            xt = c(xt)\n            x = xt + x\n\n    def remove_weight_norm(self):\n        for l in self.convs:\n            remove_weight_norm(l)\n\n\nclass BigVGAN(\n    torch.nn.Module,\n    PyTorchModelHubMixin,\n    library_name=\"bigvgan\",\n    repo_url=\"https://github.com/NVIDIA/BigVGAN\",\n    docs_url=\"https://github.com/NVIDIA/BigVGAN/blob/main/README.md\",\n    pipeline_tag=\"audio-to-audio\",\n    license=\"mit\",\n    tags=[\"neural-vocoder\", \"audio-generation\", \"arxiv:2206.04658\"],\n):\n    \"\"\"\n    BigVGAN is a neural vocoder model that applies anti-aliased periodic activation for residual blocks (resblocks).\n    New in BigVGAN-v2: it can optionally use optimized CUDA kernels for AMP (anti-aliased multi-periodicity) blocks.\n\n    Args:\n        h (AttrDict): Hyperparameters.\n        use_cuda_kernel (bool): If set to True, loads optimized CUDA kernels for AMP. This should be used for inference only, as training is not supported with CUDA kernels.\n\n    Note:\n        - The `use_cuda_kernel` parameter should be used for inference only, as training with CUDA kernels is not supported.\n        - Ensure that the activation function is correctly specified in the hyperparameters (h.activation).\n    \"\"\"\n\n    def __init__(self, h: AttrDict, use_cuda_kernel: bool = False):\n        super().__init__()\n        self.h = h\n        self.h[\"use_cuda_kernel\"] = use_cuda_kernel\n\n        # Select which Activation1d, lazy-load cuda version to ensure backward compatibility\n        if self.h.get(\"use_cuda_kernel\", False):\n            from .alias_free_activation.cuda.activation1d import (\n                Activation1d as CudaActivation1d,\n            )\n\n            Activation1d = CudaActivation1d\n        else:\n            Activation1d = TorchActivation1d\n\n        self.num_kernels = len(h.resblock_kernel_sizes)\n        self.num_upsamples = len(h.upsample_rates)\n\n        # Pre-conv\n        self.conv_pre = weight_norm(\n            Conv1d(h.num_mels, h.upsample_initial_channel, 7, 1, padding=3)\n        )\n\n        # Define which AMPBlock to use. BigVGAN uses AMPBlock1 as default\n        if h.resblock == \"1\":\n            resblock_class = AMPBlock1\n        elif h.resblock == \"2\":\n            resblock_class = AMPBlock2\n        else:\n            raise ValueError(\n                f\"Incorrect resblock class specified in hyperparameters. Got {h.resblock}\"\n            )\n\n        # Transposed conv-based upsamplers. does not apply anti-aliasing\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)):\n            self.ups.append(\n                nn.ModuleList(\n                    [\n                        weight_norm(\n                            ConvTranspose1d(\n                                h.upsample_initial_channel // (2 ** i),\n                                h.upsample_initial_channel // (2 ** (i + 1)),\n                                k,\n                                u,\n                                padding=(k - u) // 2,\n                            )\n                        )\n                    ]\n                )\n            )\n\n        # Residual blocks using anti-aliased multi-periodicity composition modules (AMP)\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = h.upsample_initial_channel // (2 ** (i + 1))\n            for j, (k, d) in enumerate(\n                    zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes)\n            ):\n                self.resblocks.append(\n                    resblock_class(h, ch, k, d, activation=h.activation)\n                )\n\n        # Post-conv\n        activation_post = (\n            activations.Snake(ch, alpha_logscale=h.snake_logscale)\n            if h.activation == \"snake\"\n            else (\n                activations.SnakeBeta(ch, alpha_logscale=h.snake_logscale)\n                if h.activation == \"snakebeta\"\n                else None\n            )\n        )\n        if activation_post is None:\n            raise NotImplementedError(\n                \"activation incorrectly specified. check the config file and look for 'activation'.\"\n            )\n\n        self.activation_post = Activation1d(activation=activation_post)\n\n        # Whether to use bias for the final conv_post. Default to True for backward compatibility\n        self.use_bias_at_final = h.get(\"use_bias_at_final\", True)\n        self.conv_post = weight_norm(\n            Conv1d(ch, 1, 7, 1, padding=3, bias=self.use_bias_at_final)\n        )\n\n        # Weight initialization\n        for i in range(len(self.ups)):\n            self.ups[i].apply(init_weights)\n        self.conv_post.apply(init_weights)\n\n        # Final tanh activation. Defaults to True for backward compatibility\n        self.use_tanh_at_final = h.get(\"use_tanh_at_final\", True)\n\n    def forward(self, x):\n        # Pre-conv\n        x = self.conv_pre(x)\n\n        for i in range(self.num_upsamples):\n            # Upsampling\n            for i_up in range(len(self.ups[i])):\n                x = self.ups[i][i_up](x)\n            # AMP blocks\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n\n        # Post-conv\n        x = self.activation_post(x)\n        x = self.conv_post(x)\n        # Final tanh activation\n        if self.use_tanh_at_final:\n            x = torch.tanh(x)\n        else:\n            x = torch.clamp(x, min=-1.0, max=1.0)  # Bound the output to [-1, 1]\n\n        return x\n\n    def remove_weight_norm(self):\n        try:\n            print(\"Removing weight norm...\")\n            for l in self.ups:\n                for l_i in l:\n                    remove_weight_norm(l_i)\n            for l in self.resblocks:\n                l.remove_weight_norm()\n            remove_weight_norm(self.conv_pre)\n            remove_weight_norm(self.conv_post)\n        except ValueError:\n            print(\"[INFO] Model already removed weight norm. Skipping!\")\n            pass\n\n    # Additional methods for huggingface_hub support\n    def _save_pretrained(self, save_directory: Path) -> None:\n        \"\"\"Save weights and config.json from a Pytorch model to a local directory.\"\"\"\n\n        model_path = save_directory / \"bigvgan_generator.pt\"\n        torch.save({\"generator\": self.state_dict()}, model_path)\n\n        config_path = save_directory / \"config.json\"\n        with open(config_path, \"w\") as config_file:\n            json.dump(self.h, config_file, indent=4)\n\n    @classmethod\n    def _from_pretrained(\n            cls,\n            *,\n            model_id: str,\n            revision: str,\n            cache_dir: str,\n            force_download: bool,\n            proxies: Optional[Dict],\n            resume_download: bool,\n            local_files_only: bool,\n            token: Union[str, bool, None],\n            map_location: str = \"cpu\",  # Additional argument\n            strict: bool = False,  # Additional argument\n            use_cuda_kernel: bool = False,\n            **model_kwargs,\n    ):\n        \"\"\"Load Pytorch pretrained weights and return the loaded model.\"\"\"\n\n        # Download and load hyperparameters (h) used by BigVGAN\n        if os.path.isdir(model_id):\n            print(\"Loading config.json from local directory\")\n            config_file = os.path.join(model_id, \"config.json\")\n        else:\n            config_file = hf_hub_download(\n                repo_id=model_id,\n                filename=\"config.json\",\n                revision=revision,\n                cache_dir=cache_dir,\n                force_download=force_download,\n                proxies=proxies,\n                resume_download=resume_download,\n                token=token,\n                local_files_only=local_files_only,\n            )\n        h = load_hparams_from_json(config_file)\n\n        # instantiate BigVGAN using h\n        if use_cuda_kernel:\n            print(\n                f\"[WARNING] You have specified use_cuda_kernel=True during BigVGAN.from_pretrained(). Only inference is supported (training is not implemented)!\"\n            )\n            print(\n                f\"[WARNING] You need nvcc and ninja installed in your system that matches your PyTorch build is using to build the kernel. If not, the model will fail to initialize or generate incorrect waveform!\"\n            )\n            print(\n                f\"[WARNING] For detail, see the official GitHub repository: https://github.com/NVIDIA/BigVGAN?tab=readme-ov-file#using-custom-cuda-kernel-for-synthesis\"\n            )\n        model = cls(h, use_cuda_kernel=use_cuda_kernel)\n\n        # Download and load pretrained generator weight\n        if os.path.isdir(model_id):\n            print(\"Loading weights from local directory\")\n            model_file = os.path.join(model_id, \"bigvgan_generator.pt\")\n        else:\n            print(f\"Loading weights from {model_id}\")\n            model_file = hf_hub_download(\n                repo_id=model_id,\n                filename=\"bigvgan_generator.pt\",\n                revision=revision,\n                cache_dir=cache_dir,\n                force_download=force_download,\n                proxies=proxies,\n                resume_download=resume_download,\n                token=token,\n                local_files_only=local_files_only,\n            )\n\n        checkpoint_dict = torch.load(model_file, map_location=map_location)\n\n        try:\n            model.load_state_dict(checkpoint_dict[\"generator\"])\n        except RuntimeError:\n            print(\n                f\"[INFO] the pretrained checkpoint does not contain weight norm. Loading the checkpoint after removing weight norm!\"\n            )\n            model.remove_weight_norm()\n            model.load_state_dict(checkpoint_dict[\"generator\"])\n\n        return model"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/config.json",
    "content": "{\n    \"resblock\": \"1\",\n    \"num_gpus\": 0,\n    \"batch_size\": 32,\n    \"learning_rate\": 0.0001,\n    \"adam_b1\": 0.8,\n    \"adam_b2\": 0.99,\n    \"lr_decay\": 0.9999996,\n    \"seed\": 1234,\n\n    \"upsample_rates\": [4,4,2,2,2,2],\n    \"upsample_kernel_sizes\": [8,8,4,4,4,4],\n    \"upsample_initial_channel\": 1536,\n    \"resblock_kernel_sizes\": [3,7,11],\n    \"resblock_dilation_sizes\": [[1,3,5], [1,3,5], [1,3,5]],\n\n    \"use_tanh_at_final\": false,\n    \"use_bias_at_final\": false,\n\n    \"activation\": \"snakebeta\",\n    \"snake_logscale\": true,\n\n    \"use_cqtd_instead_of_mrd\": true,\n    \"cqtd_filters\": 128,\n    \"cqtd_max_filters\": 1024,\n    \"cqtd_filters_scale\": 1,\n    \"cqtd_dilations\": [1, 2, 4],\n    \"cqtd_hop_lengths\": [512, 256, 256],\n    \"cqtd_n_octaves\": [9, 9, 9],\n    \"cqtd_bins_per_octaves\": [24, 36, 48],\n\n    \"mpd_reshapes\": [2, 3, 5, 7, 11],\n    \"use_spectral_norm\": false,\n    \"discriminator_channel_mult\": 1,\n    \n    \"use_multiscale_melloss\": true,\n    \"lambda_melloss\": 15,\n\n    \"clip_grad_norm\": 500,\n\n    \"segment_size\": 65536,\n    \"num_mels\": 80,\n    \"num_freq\": 1025,\n    \"n_fft\": 1024,\n    \"hop_size\": 256,\n    \"win_size\": 1024,\n\n    \"sampling_rate\": 22050,\n\n    \"fmin\": 0,\n    \"fmax\": null,\n    \"fmax_for_loss\": null,\n\n    \"normalize_volume\": true,\n\n    \"num_workers\": 4,\n\n    \"dist_config\": {\n        \"dist_backend\": \"nccl\",\n        \"dist_url\": \"tcp://localhost:54321\",\n        \"world_size\": 1\n    }\n}\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/env.py",
    "content": "# Adapted from https://github.com/jik876/hifi-gan under the MIT license.\n#   LICENSE is in incl_licenses directory.\n\nimport os\nimport shutil\n\n\nclass AttrDict(dict):\n    def __init__(self, *args, **kwargs):\n        super(AttrDict, self).__init__(*args, **kwargs)\n        self.__dict__ = self\n\n\ndef build_env(config, config_name, path):\n    t_path = os.path.join(path, config_name)\n    if config != t_path:\n        os.makedirs(path, exist_ok=True)\n        shutil.copyfile(config, os.path.join(path, config_name))"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/meldataset.py",
    "content": "# Copyright (c) 2024 NVIDIA CORPORATION.\n#   Licensed under the MIT license.\n\n# Adapted from https://github.com/jik876/hifi-gan under the MIT license.\n#   LICENSE is in incl_licenses directory.\n\nimport math\nimport os\nimport random\nimport torch\nimport torch.utils.data\nimport numpy as np\nfrom librosa.util import normalize\nfrom scipy.io.wavfile import read\nfrom librosa.filters import mel as librosa_mel_fn\nimport pathlib\nfrom tqdm import tqdm\n\nMAX_WAV_VALUE = 32767.0  # NOTE: 32768.0 -1 to prevent int16 overflow (results in popping sound in corner cases)\n\n\ndef load_wav(full_path, sr_target):\n    sampling_rate, data = read(full_path)\n    if sampling_rate != sr_target:\n        raise RuntimeError(\n            f\"Sampling rate of the file {full_path} is {sampling_rate} Hz, but the model requires {sr_target} Hz\"\n        )\n    return data, sampling_rate\n\n\ndef dynamic_range_compression(x, C=1, clip_val=1e-5):\n    return np.log(np.clip(x, a_min=clip_val, a_max=None) * C)\n\n\ndef dynamic_range_decompression(x, C=1):\n    return np.exp(x) / C\n\n\ndef dynamic_range_compression_torch(x, C=1, clip_val=1e-5):\n    return torch.log(torch.clamp(x, min=clip_val) * C)\n\n\ndef dynamic_range_decompression_torch(x, C=1):\n    return torch.exp(x) / C\n\n\ndef spectral_normalize_torch(magnitudes):\n    return dynamic_range_compression_torch(magnitudes)\n\n\ndef spectral_de_normalize_torch(magnitudes):\n    return dynamic_range_decompression_torch(magnitudes)\n\n\nmel_basis_cache = {}\nhann_window_cache = {}\n\n\ndef mel_spectrogram(\n    y: torch.Tensor,\n    n_fft: int,\n    num_mels: int,\n    sampling_rate: int,\n    hop_size: int,\n    win_size: int,\n    fmin: int,\n    fmax: int = None,\n    center: bool = False,\n) -> torch.Tensor:\n    \"\"\"\n    Calculate the mel spectrogram of an input signal.\n    This function uses slaney norm for the librosa mel filterbank (using librosa.filters.mel) and uses Hann window for STFT (using torch.stft).\n\n    Args:\n        y (torch.Tensor): Input signal.\n        n_fft (int): FFT size.\n        num_mels (int): Number of mel bins.\n        sampling_rate (int): Sampling rate of the input signal.\n        hop_size (int): Hop size for STFT.\n        win_size (int): Window size for STFT.\n        fmin (int): Minimum frequency for mel filterbank.\n        fmax (int): Maximum frequency for mel filterbank. If None, defaults to half the sampling rate (fmax = sr / 2.0) inside librosa_mel_fn\n        center (bool): Whether to pad the input to center the frames. Default is False.\n\n    Returns:\n        torch.Tensor: Mel spectrogram.\n    \"\"\"\n    if torch.min(y) < -1.0:\n        print(f\"[WARNING] Min value of input waveform signal is {torch.min(y)}\")\n    if torch.max(y) > 1.0:\n        print(f\"[WARNING] Max value of input waveform signal is {torch.max(y)}\")\n\n    device = y.device\n    key = f\"{n_fft}_{num_mels}_{sampling_rate}_{hop_size}_{win_size}_{fmin}_{fmax}_{device}\"\n\n    if key not in mel_basis_cache:\n        mel = librosa_mel_fn(\n            sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax\n        )\n        mel_basis_cache[key] = torch.from_numpy(mel).float().to(device)\n        hann_window_cache[key] = torch.hann_window(win_size).to(device)\n\n    mel_basis = mel_basis_cache[key]\n    hann_window = hann_window_cache[key]\n\n    padding = (n_fft - hop_size) // 2\n    y = torch.nn.functional.pad(\n        y.unsqueeze(1), (padding, padding), mode=\"reflect\"\n    ).squeeze(1)\n\n    spec = torch.stft(\n        y,\n        n_fft,\n        hop_length=hop_size,\n        win_length=win_size,\n        window=hann_window,\n        center=center,\n        pad_mode=\"reflect\",\n        normalized=False,\n        onesided=True,\n        return_complex=True,\n    )\n    spec = torch.sqrt(torch.view_as_real(spec).pow(2).sum(-1) + 1e-9)\n\n    mel_spec = torch.matmul(mel_basis, spec)\n    mel_spec = spectral_normalize_torch(mel_spec)\n\n    return mel_spec\n\n\ndef get_mel_spectrogram(wav, h):\n    \"\"\"\n    Generate mel spectrogram from a waveform using given hyperparameters.\n\n    Args:\n        wav (torch.Tensor): Input waveform.\n        h: Hyperparameters object with attributes n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax.\n\n    Returns:\n        torch.Tensor: Mel spectrogram.\n    \"\"\"\n    return mel_spectrogram(\n        wav,\n        h.n_fft,\n        h.num_mels,\n        h.sampling_rate,\n        h.hop_size,\n        h.win_size,\n        h.fmin,\n        h.fmax,\n    )\n\n\ndef get_dataset_filelist(a):\n    training_files = []\n    validation_files = []\n    list_unseen_validation_files = []\n\n    with open(a.input_training_file, \"r\", encoding=\"utf-8\") as fi:\n        training_files = [\n            os.path.join(a.input_wavs_dir, x.split(\"|\")[0] + \".wav\")\n            for x in fi.read().split(\"\\n\")\n            if len(x) > 0\n        ]\n        print(f\"first training file: {training_files[0]}\")\n\n    with open(a.input_validation_file, \"r\", encoding=\"utf-8\") as fi:\n        validation_files = [\n            os.path.join(a.input_wavs_dir, x.split(\"|\")[0] + \".wav\")\n            for x in fi.read().split(\"\\n\")\n            if len(x) > 0\n        ]\n        print(f\"first validation file: {validation_files[0]}\")\n\n    for i in range(len(a.list_input_unseen_validation_file)):\n        with open(a.list_input_unseen_validation_file[i], \"r\", encoding=\"utf-8\") as fi:\n            unseen_validation_files = [\n                os.path.join(a.list_input_unseen_wavs_dir[i], x.split(\"|\")[0] + \".wav\")\n                for x in fi.read().split(\"\\n\")\n                if len(x) > 0\n            ]\n            print(\n                f\"first unseen {i}th validation fileset: {unseen_validation_files[0]}\"\n            )\n            list_unseen_validation_files.append(unseen_validation_files)\n\n    return training_files, validation_files, list_unseen_validation_files\n\n\nclass MelDataset(torch.utils.data.Dataset):\n    def __init__(\n        self,\n        training_files,\n        hparams,\n        segment_size,\n        n_fft,\n        num_mels,\n        hop_size,\n        win_size,\n        sampling_rate,\n        fmin,\n        fmax,\n        split=True,\n        shuffle=True,\n        n_cache_reuse=1,\n        device=None,\n        fmax_loss=None,\n        fine_tuning=False,\n        base_mels_path=None,\n        is_seen=True,\n    ):\n        self.audio_files = training_files\n        random.seed(1234)\n        if shuffle:\n            random.shuffle(self.audio_files)\n        self.hparams = hparams\n        self.is_seen = is_seen\n        if self.is_seen:\n            self.name = pathlib.Path(self.audio_files[0]).parts[0]\n        else:\n            self.name = \"-\".join(pathlib.Path(self.audio_files[0]).parts[:2]).strip(\"/\")\n\n        self.segment_size = segment_size\n        self.sampling_rate = sampling_rate\n        self.split = split\n        self.n_fft = n_fft\n        self.num_mels = num_mels\n        self.hop_size = hop_size\n        self.win_size = win_size\n        self.fmin = fmin\n        self.fmax = fmax\n        self.fmax_loss = fmax_loss\n        self.cached_wav = None\n        self.n_cache_reuse = n_cache_reuse\n        self._cache_ref_count = 0\n        self.device = device\n        self.fine_tuning = fine_tuning\n        self.base_mels_path = base_mels_path\n\n        print(\"[INFO] checking dataset integrity...\")\n        for i in tqdm(range(len(self.audio_files))):\n            assert os.path.exists(\n                self.audio_files[i]\n            ), f\"{self.audio_files[i]} not found\"\n\n    def __getitem__(self, index):\n        filename = self.audio_files[index]\n        if self._cache_ref_count == 0:\n            audio, sampling_rate = load_wav(filename, self.sampling_rate)\n            audio = audio / MAX_WAV_VALUE\n            if not self.fine_tuning:\n                audio = normalize(audio) * 0.95\n            self.cached_wav = audio\n            if sampling_rate != self.sampling_rate:\n                raise ValueError(\n                    f\"{sampling_rate} SR doesn't match target {self.sampling_rate} SR\"\n                )\n            self._cache_ref_count = self.n_cache_reuse\n        else:\n            audio = self.cached_wav\n            self._cache_ref_count -= 1\n\n        audio = torch.FloatTensor(audio)\n        audio = audio.unsqueeze(0)\n\n        if not self.fine_tuning:\n            if self.split:\n                if audio.size(1) >= self.segment_size:\n                    max_audio_start = audio.size(1) - self.segment_size\n                    audio_start = random.randint(0, max_audio_start)\n                    audio = audio[:, audio_start : audio_start + self.segment_size]\n                else:\n                    audio = torch.nn.functional.pad(\n                        audio, (0, self.segment_size - audio.size(1)), \"constant\"\n                    )\n\n                mel = mel_spectrogram(\n                    audio,\n                    self.n_fft,\n                    self.num_mels,\n                    self.sampling_rate,\n                    self.hop_size,\n                    self.win_size,\n                    self.fmin,\n                    self.fmax,\n                    center=False,\n                )\n            else:  # Validation step\n                # Match audio length to self.hop_size * n for evaluation\n                if (audio.size(1) % self.hop_size) != 0:\n                    audio = audio[:, : -(audio.size(1) % self.hop_size)]\n                mel = mel_spectrogram(\n                    audio,\n                    self.n_fft,\n                    self.num_mels,\n                    self.sampling_rate,\n                    self.hop_size,\n                    self.win_size,\n                    self.fmin,\n                    self.fmax,\n                    center=False,\n                )\n                assert (\n                    audio.shape[1] == mel.shape[2] * self.hop_size\n                ), f\"audio shape {audio.shape} mel shape {mel.shape}\"\n\n        else:\n            mel = np.load(\n                os.path.join(\n                    self.base_mels_path,\n                    os.path.splitext(os.path.split(filename)[-1])[0] + \".npy\",\n                )\n            )\n            mel = torch.from_numpy(mel)\n\n            if len(mel.shape) < 3:\n                mel = mel.unsqueeze(0)\n\n            if self.split:\n                frames_per_seg = math.ceil(self.segment_size / self.hop_size)\n\n                if audio.size(1) >= self.segment_size:\n                    mel_start = random.randint(0, mel.size(2) - frames_per_seg - 1)\n                    mel = mel[:, :, mel_start : mel_start + frames_per_seg]\n                    audio = audio[\n                        :,\n                        mel_start\n                        * self.hop_size : (mel_start + frames_per_seg)\n                        * self.hop_size,\n                    ]\n                else:\n                    mel = torch.nn.functional.pad(\n                        mel, (0, frames_per_seg - mel.size(2)), \"constant\"\n                    )\n                    audio = torch.nn.functional.pad(\n                        audio, (0, self.segment_size - audio.size(1)), \"constant\"\n                    )\n\n        mel_loss = mel_spectrogram(\n            audio,\n            self.n_fft,\n            self.num_mels,\n            self.sampling_rate,\n            self.hop_size,\n            self.win_size,\n            self.fmin,\n            self.fmax_loss,\n            center=False,\n        )\n\n        return (mel.squeeze(), audio.squeeze(0), filename, mel_loss.squeeze())\n\n    def __len__(self):\n        return len(self.audio_files)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/bigvgan/utils.py",
    "content": "# Adapted from https://github.com/jik876/hifi-gan under the MIT license.\n#   LICENSE is in incl_licenses directory.\n\nimport glob\nimport os\nimport matplotlib\nimport torch\nfrom torch.nn.utils import weight_norm\n\nmatplotlib.use(\"Agg\")\nimport matplotlib.pylab as plt\nfrom .meldataset import MAX_WAV_VALUE\nfrom scipy.io.wavfile import write\n\n\ndef plot_spectrogram(spectrogram):\n    fig, ax = plt.subplots(figsize=(10, 2))\n    im = ax.imshow(spectrogram, aspect=\"auto\", origin=\"lower\", interpolation=\"none\")\n    plt.colorbar(im, ax=ax)\n\n    fig.canvas.draw()\n    plt.close()\n\n    return fig\n\n\ndef plot_spectrogram_clipped(spectrogram, clip_max=2.0):\n    fig, ax = plt.subplots(figsize=(10, 2))\n    im = ax.imshow(\n        spectrogram,\n        aspect=\"auto\",\n        origin=\"lower\",\n        interpolation=\"none\",\n        vmin=1e-6,\n        vmax=clip_max,\n    )\n    plt.colorbar(im, ax=ax)\n\n    fig.canvas.draw()\n    plt.close()\n\n    return fig\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef apply_weight_norm(m):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        weight_norm(m)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef load_checkpoint(filepath, device):\n    assert os.path.isfile(filepath)\n    print(f\"Loading '{filepath}'\")\n    checkpoint_dict = torch.load(filepath, map_location=device)\n    print(\"Complete.\")\n    return checkpoint_dict\n\n\ndef save_checkpoint(filepath, obj):\n    print(f\"Saving checkpoint to {filepath}\")\n    torch.save(obj, filepath)\n    print(\"Complete.\")\n\n\ndef scan_checkpoint(cp_dir, prefix, renamed_file=None):\n    # Fallback to original scanning logic first\n    pattern = os.path.join(cp_dir, prefix + \"????????\")\n    cp_list = glob.glob(pattern)\n\n    if len(cp_list) > 0:\n        last_checkpoint_path = sorted(cp_list)[-1]\n        print(f\"[INFO] Resuming from checkpoint: '{last_checkpoint_path}'\")\n        return last_checkpoint_path\n\n    # If no pattern-based checkpoints are found, check for renamed file\n    if renamed_file:\n        renamed_path = os.path.join(cp_dir, renamed_file)\n        if os.path.isfile(renamed_path):\n            print(f\"[INFO] Resuming from renamed checkpoint: '{renamed_file}'\")\n            return renamed_path\n\n    return None\n\n\ndef save_audio(audio, path, sr):\n    # wav: torch with 1d shape\n    audio = audio * MAX_WAV_VALUE\n    audio = audio.cpu().numpy().astype(\"int16\")\n    write(path, sr, audio)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/campplus/DTDNN.py",
    "content": "# Copyright 3D-Speaker (https://github.com/alibaba-damo-academy/3D-Speaker). All Rights Reserved.\n# Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n\nfrom collections import OrderedDict\n\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\n\nfrom indextts.s2mel.modules.campplus.layers import DenseLayer, StatsPool, TDNNLayer, CAMDenseTDNNBlock, TransitLayer, BasicResBlock, get_nonlinear\n\n\nclass FCM(nn.Module):\n    def __init__(self,\n                block=BasicResBlock,\n                num_blocks=[2, 2],\n                m_channels=32,\n                feat_dim=80):\n        super(FCM, self).__init__()\n        self.in_planes = m_channels\n        self.conv1 = nn.Conv2d(1, m_channels, kernel_size=3, stride=1, padding=1, bias=False)\n        self.bn1 = nn.BatchNorm2d(m_channels)\n\n        self.layer1 = self._make_layer(block, m_channels, num_blocks[0], stride=2)\n        self.layer2 = self._make_layer(block, m_channels, num_blocks[1], stride=2)\n\n        self.conv2 = nn.Conv2d(m_channels, m_channels, kernel_size=3, stride=(2, 1), padding=1, bias=False)\n        self.bn2 = nn.BatchNorm2d(m_channels)\n        self.out_channels =  m_channels * (feat_dim // 8)\n\n    def _make_layer(self, block, planes, num_blocks, stride):\n        strides = [stride] + [1] * (num_blocks - 1)\n        layers = []\n        for stride in strides:\n            layers.append(block(self.in_planes, planes, stride))\n            self.in_planes = planes * block.expansion\n        return nn.Sequential(*layers)\n\n    def forward(self, x):\n        x = x.unsqueeze(1)\n        out = F.relu(self.bn1(self.conv1(x)))\n        out = self.layer1(out)\n        out = self.layer2(out)\n        out = F.relu(self.bn2(self.conv2(out)))\n\n        shape = out.shape\n        out = out.reshape(shape[0], shape[1]*shape[2], shape[3])\n        return out\n\nclass CAMPPlus(nn.Module):\n    def __init__(self,\n                 feat_dim=80,\n                 embedding_size=512,\n                 growth_rate=32,\n                 bn_size=4,\n                 init_channels=128,\n                 config_str='batchnorm-relu',\n                 memory_efficient=True):\n        super(CAMPPlus, self).__init__()\n\n        self.head = FCM(feat_dim=feat_dim)\n        channels = self.head.out_channels\n\n        self.xvector = nn.Sequential(\n            OrderedDict([\n\n                ('tdnn',\n                 TDNNLayer(channels,\n                           init_channels,\n                           5,\n                           stride=2,\n                           dilation=1,\n                           padding=-1,\n                           config_str=config_str)),\n            ]))\n        channels = init_channels\n        for i, (num_layers, kernel_size,\n                dilation) in enumerate(zip((12, 24, 16), (3, 3, 3), (1, 2, 2))):\n            block = CAMDenseTDNNBlock(num_layers=num_layers,\n                                   in_channels=channels,\n                                   out_channels=growth_rate,\n                                   bn_channels=bn_size * growth_rate,\n                                   kernel_size=kernel_size,\n                                   dilation=dilation,\n                                   config_str=config_str,\n                                   memory_efficient=memory_efficient)\n            self.xvector.add_module('block%d' % (i + 1), block)\n            channels = channels + num_layers * growth_rate\n            self.xvector.add_module(\n                'transit%d' % (i + 1),\n                TransitLayer(channels,\n                             channels // 2,\n                             bias=False,\n                             config_str=config_str))\n            channels //= 2\n\n        self.xvector.add_module(\n            'out_nonlinear', get_nonlinear(config_str, channels))\n\n        self.xvector.add_module('stats', StatsPool())\n        self.xvector.add_module(\n            'dense',\n            DenseLayer(channels * 2, embedding_size, config_str='batchnorm_'))\n\n        for m in self.modules():\n            if isinstance(m, (nn.Conv1d, nn.Linear)):\n                nn.init.kaiming_normal_(m.weight.data)\n                if m.bias is not None:\n                    nn.init.zeros_(m.bias)\n\n    def forward(self, x):\n        x = x.permute(0, 2, 1)  # (B,T,F) => (B,F,T)\n        x = self.head(x)\n        x = self.xvector(x)\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/campplus/classifier.py",
    "content": "# Copyright 3D-Speaker (https://github.com/alibaba-damo-academy/3D-Speaker). All Rights Reserved.\n# Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom modules.campplus.layers import DenseLayer\n\n\nclass CosineClassifier(nn.Module):\n    def __init__(\n        self,\n        input_dim,\n        num_blocks=0,\n        inter_dim=512,\n        out_neurons=1000,\n    ):\n\n        super().__init__()\n        self.blocks = nn.ModuleList()\n\n        for index in range(num_blocks):\n            self.blocks.append(\n                DenseLayer(input_dim, inter_dim, config_str='batchnorm')\n            )\n            input_dim = inter_dim\n\n        self.weight = nn.Parameter(\n            torch.FloatTensor(out_neurons, input_dim)\n        )\n        nn.init.xavier_uniform_(self.weight)\n\n    def forward(self, x):\n        # x: [B, dim]\n        for layer in self.blocks:\n            x = layer(x)\n\n        # normalized\n        x = F.linear(F.normalize(x), F.normalize(self.weight))\n        return x\n\nclass LinearClassifier(nn.Module):\n    def __init__(\n        self,\n        input_dim,\n        num_blocks=0,\n        inter_dim=512,\n        out_neurons=1000,\n    ):\n\n        super().__init__()\n        self.blocks = nn.ModuleList()\n\n        self.nonlinear = nn.ReLU(inplace=True)\n        for index in range(num_blocks):\n            self.blocks.append(\n                DenseLayer(input_dim, inter_dim, bias=True)\n            )\n            input_dim = inter_dim\n\n        self.linear = nn.Linear(input_dim, out_neurons, bias=True)\n\n    def forward(self, x):\n        # x: [B, dim]\n        x = self.nonlinear(x)\n        for layer in self.blocks:\n            x = layer(x)\n        x = self.linear(x)\n        return x"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/campplus/layers.py",
    "content": "# Copyright 3D-Speaker (https://github.com/alibaba-damo-academy/3D-Speaker). All Rights Reserved.\n# Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n\nimport torch\nimport torch.nn.functional as F\nimport torch.utils.checkpoint as cp\nfrom torch import nn\n\n\ndef get_nonlinear(config_str, channels):\n    nonlinear = nn.Sequential()\n    for name in config_str.split('-'):\n        if name == 'relu':\n            nonlinear.add_module('relu', nn.ReLU(inplace=True))\n        elif name == 'prelu':\n            nonlinear.add_module('prelu', nn.PReLU(channels))\n        elif name == 'batchnorm':\n            nonlinear.add_module('batchnorm', nn.BatchNorm1d(channels))\n        elif name == 'batchnorm_':\n            nonlinear.add_module('batchnorm',\n                                 nn.BatchNorm1d(channels, affine=False))\n        else:\n            raise ValueError('Unexpected module ({}).'.format(name))\n    return nonlinear\n\ndef statistics_pooling(x, dim=-1, keepdim=False, unbiased=True, eps=1e-2):\n    mean = x.mean(dim=dim)\n    std = x.std(dim=dim, unbiased=unbiased)\n    stats = torch.cat([mean, std], dim=-1)\n    if keepdim:\n        stats = stats.unsqueeze(dim=dim)\n    return stats\n\n\nclass StatsPool(nn.Module):\n    def forward(self, x):\n        return statistics_pooling(x)\n\n\nclass TDNNLayer(nn.Module):\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 stride=1,\n                 padding=0,\n                 dilation=1,\n                 bias=False,\n                 config_str='batchnorm-relu'):\n        super(TDNNLayer, self).__init__()\n        if padding < 0:\n            assert kernel_size % 2 == 1, 'Expect equal paddings, but got even kernel size ({})'.format(\n                kernel_size)\n            padding = (kernel_size - 1) // 2 * dilation\n        self.linear = nn.Conv1d(in_channels,\n                                out_channels,\n                                kernel_size,\n                                stride=stride,\n                                padding=padding,\n                                dilation=dilation,\n                                bias=bias)\n        self.nonlinear = get_nonlinear(config_str, out_channels)\n\n    def forward(self, x):\n        x = self.linear(x)\n        x = self.nonlinear(x)\n        return x\n\n\nclass CAMLayer(nn.Module):\n    def __init__(self,\n                bn_channels,\n                out_channels,\n                kernel_size,\n                stride,\n                padding,\n                dilation,\n                bias,\n                reduction=2):\n        super(CAMLayer, self).__init__()\n        self.linear_local = nn.Conv1d(bn_channels,\n                                 out_channels,\n                                 kernel_size,\n                                 stride=stride,\n                                 padding=padding,\n                                 dilation=dilation,\n                                 bias=bias)\n        self.linear1 = nn.Conv1d(bn_channels, bn_channels // reduction, 1)\n        self.relu = nn.ReLU(inplace=True)\n        self.linear2 = nn.Conv1d(bn_channels // reduction, out_channels, 1)\n        self.sigmoid = nn.Sigmoid()\n\n    def forward(self, x):\n        y = self.linear_local(x)\n        context = x.mean(-1, keepdim=True)+self.seg_pooling(x)\n        context = self.relu(self.linear1(context))\n        m = self.sigmoid(self.linear2(context))\n        return y*m\n\n    def seg_pooling(self, x, seg_len=100, stype='avg'):\n        if stype == 'avg':\n            seg = F.avg_pool1d(x, kernel_size=seg_len, stride=seg_len, ceil_mode=True)\n        elif stype == 'max':\n            seg = F.max_pool1d(x, kernel_size=seg_len, stride=seg_len, ceil_mode=True)\n        else:\n            raise ValueError('Wrong segment pooling type.')\n        shape = seg.shape\n        seg = seg.unsqueeze(-1).expand(*shape, seg_len).reshape(*shape[:-1], -1)\n        seg = seg[..., :x.shape[-1]]\n        return seg\n\n\nclass CAMDenseTDNNLayer(nn.Module):\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 bn_channels,\n                 kernel_size,\n                 stride=1,\n                 dilation=1,\n                 bias=False,\n                 config_str='batchnorm-relu',\n                 memory_efficient=False):\n        super(CAMDenseTDNNLayer, self).__init__()\n        assert kernel_size % 2 == 1, 'Expect equal paddings, but got even kernel size ({})'.format(\n            kernel_size)\n        padding = (kernel_size - 1) // 2 * dilation\n        self.memory_efficient = memory_efficient\n        self.nonlinear1 = get_nonlinear(config_str, in_channels)\n        self.linear1 = nn.Conv1d(in_channels, bn_channels, 1, bias=False)\n        self.nonlinear2 = get_nonlinear(config_str, bn_channels)\n        self.cam_layer = CAMLayer(bn_channels,\n                                out_channels,\n                                kernel_size,\n                                stride=stride,\n                                padding=padding,\n                                dilation=dilation,\n                                bias=bias)\n\n    def bn_function(self, x):\n        return self.linear1(self.nonlinear1(x))\n\n    def forward(self, x):\n        if self.training and self.memory_efficient:\n            x = cp.checkpoint(self.bn_function, x)\n        else:\n            x = self.bn_function(x)\n        x = self.cam_layer(self.nonlinear2(x))\n        return x\n\n\nclass CAMDenseTDNNBlock(nn.ModuleList):\n    def __init__(self,\n                 num_layers,\n                 in_channels,\n                 out_channels,\n                 bn_channels,\n                 kernel_size,\n                 stride=1,\n                 dilation=1,\n                 bias=False,\n                 config_str='batchnorm-relu',\n                 memory_efficient=False):\n        super(CAMDenseTDNNBlock, self).__init__()\n        for i in range(num_layers):\n            layer = CAMDenseTDNNLayer(in_channels=in_channels + i * out_channels,\n                                   out_channels=out_channels,\n                                   bn_channels=bn_channels,\n                                   kernel_size=kernel_size,\n                                   stride=stride,\n                                   dilation=dilation,\n                                   bias=bias,\n                                   config_str=config_str,\n                                   memory_efficient=memory_efficient)\n            self.add_module('tdnnd%d' % (i + 1), layer)\n\n    def forward(self, x):\n        for layer in self:\n            x = torch.cat([x, layer(x)], dim=1)\n        return x\n\n\nclass TransitLayer(nn.Module):\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 bias=True,\n                 config_str='batchnorm-relu'):\n        super(TransitLayer, self).__init__()\n        self.nonlinear = get_nonlinear(config_str, in_channels)\n        self.linear = nn.Conv1d(in_channels, out_channels, 1, bias=bias)\n\n    def forward(self, x):\n        x = self.nonlinear(x)\n        x = self.linear(x)\n        return x\n\n\nclass DenseLayer(nn.Module):\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 bias=False,\n                 config_str='batchnorm-relu'):\n        super(DenseLayer, self).__init__()\n        self.linear = nn.Conv1d(in_channels, out_channels, 1, bias=bias)\n        self.nonlinear = get_nonlinear(config_str, out_channels)\n\n    def forward(self, x):\n        if len(x.shape) == 2:\n            x = self.linear(x.unsqueeze(dim=-1)).squeeze(dim=-1)\n        else:\n            x = self.linear(x)\n        x = self.nonlinear(x)\n        return x\n\n\nclass BasicResBlock(nn.Module):\n    expansion = 1\n\n    def __init__(self, in_planes, planes, stride=1):\n        super(BasicResBlock, self).__init__()\n        self.conv1 = nn.Conv2d(in_planes,\n                               planes,\n                               kernel_size=3,\n                               stride=(stride, 1),\n                               padding=1,\n                               bias=False)\n        self.bn1 = nn.BatchNorm2d(planes)\n        self.conv2 = nn.Conv2d(planes,\n                               planes,\n                               kernel_size=3,\n                               stride=1,\n                               padding=1,\n                               bias=False)\n        self.bn2 = nn.BatchNorm2d(planes)\n\n        self.shortcut = nn.Sequential()\n        if stride != 1 or in_planes != self.expansion * planes:\n            self.shortcut = nn.Sequential(\n                nn.Conv2d(in_planes,\n                          self.expansion * planes,\n                          kernel_size=1,\n                          stride=(stride, 1),\n                          bias=False),\n                nn.BatchNorm2d(self.expansion * planes))\n\n    def forward(self, x):\n        out = F.relu(self.bn1(self.conv1(x)))\n        out = self.bn2(self.conv2(out))\n        out += self.shortcut(x)\n        out = F.relu(out)\n        return out"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/commons.py",
    "content": "import math\nimport numpy as np\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nfrom munch import Munch\nimport json\nimport argparse\nfrom torch.nn.parallel import DistributedDataParallel as DDP\n\ndef str2bool(v):\n    if isinstance(v, bool):\n        return v\n    if v.lower() in (\"yes\", \"true\", \"t\", \"y\", \"1\"):\n        return True\n    elif v.lower() in (\"no\", \"false\", \"f\", \"n\", \"0\"):\n        return False\n    else:\n        raise argparse.ArgumentTypeError(\"Boolean value expected.\")\n\nclass AttrDict(dict):\n    def __init__(self, *args, **kwargs):\n        super(AttrDict, self).__init__(*args, **kwargs)\n        self.__dict__ = self\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef convert_pad_shape(pad_shape):\n    l = pad_shape[::-1]\n    pad_shape = [item for sublist in l for item in sublist]\n    return pad_shape\n\n\ndef intersperse(lst, item):\n    result = [item] * (len(lst) * 2 + 1)\n    result[1::2] = lst\n    return result\n\n\ndef kl_divergence(m_p, logs_p, m_q, logs_q):\n    \"\"\"KL(P||Q)\"\"\"\n    kl = (logs_q - logs_p) - 0.5\n    kl += (\n        0.5 * (torch.exp(2.0 * logs_p) + ((m_p - m_q) ** 2)) * torch.exp(-2.0 * logs_q)\n    )\n    return kl\n\n\ndef rand_gumbel(shape):\n    \"\"\"Sample from the Gumbel distribution, protect from overflows.\"\"\"\n    uniform_samples = torch.rand(shape) * 0.99998 + 0.00001\n    return -torch.log(-torch.log(uniform_samples))\n\n\ndef rand_gumbel_like(x):\n    g = rand_gumbel(x.size()).to(dtype=x.dtype, device=x.device)\n    return g\n\n\ndef slice_segments(x, ids_str, segment_size=4):\n    ret = torch.zeros_like(x[:, :, :segment_size])\n    for i in range(x.size(0)):\n        idx_str = ids_str[i]\n        idx_end = idx_str + segment_size\n        ret[i] = x[i, :, idx_str:idx_end]\n    return ret\n\n\ndef slice_segments_audio(x, ids_str, segment_size=4):\n    ret = torch.zeros_like(x[:, :segment_size])\n    for i in range(x.size(0)):\n        idx_str = ids_str[i]\n        idx_end = idx_str + segment_size\n        ret[i] = x[i, idx_str:idx_end]\n    return ret\n\n\ndef rand_slice_segments(x, x_lengths=None, segment_size=4):\n    b, d, t = x.size()\n    if x_lengths is None:\n        x_lengths = t\n    ids_str_max = x_lengths - segment_size + 1\n    ids_str = ((torch.rand([b]).to(device=x.device) * ids_str_max).clip(0)).to(\n        dtype=torch.long\n    )\n    ret = slice_segments(x, ids_str, segment_size)\n    return ret, ids_str\n\n\ndef get_timing_signal_1d(length, channels, min_timescale=1.0, max_timescale=1.0e4):\n    position = torch.arange(length, dtype=torch.float)\n    num_timescales = channels // 2\n    log_timescale_increment = math.log(float(max_timescale) / float(min_timescale)) / (\n        num_timescales - 1\n    )\n    inv_timescales = min_timescale * torch.exp(\n        torch.arange(num_timescales, dtype=torch.float) * -log_timescale_increment\n    )\n    scaled_time = position.unsqueeze(0) * inv_timescales.unsqueeze(1)\n    signal = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], 0)\n    signal = F.pad(signal, [0, 0, 0, channels % 2])\n    signal = signal.view(1, channels, length)\n    return signal\n\n\ndef add_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4):\n    b, channels, length = x.size()\n    signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)\n    return x + signal.to(dtype=x.dtype, device=x.device)\n\n\ndef cat_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4, axis=1):\n    b, channels, length = x.size()\n    signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)\n    return torch.cat([x, signal.to(dtype=x.dtype, device=x.device)], axis)\n\n\ndef subsequent_mask(length):\n    mask = torch.tril(torch.ones(length, length)).unsqueeze(0).unsqueeze(0)\n    return mask\n\n\n@torch.jit.script\ndef fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):\n    n_channels_int = n_channels[0]\n    in_act = input_a + input_b\n    t_act = torch.tanh(in_act[:, :n_channels_int, :])\n    s_act = torch.sigmoid(in_act[:, n_channels_int:, :])\n    acts = t_act * s_act\n    return acts\n\n\ndef convert_pad_shape(pad_shape):\n    l = pad_shape[::-1]\n    pad_shape = [item for sublist in l for item in sublist]\n    return pad_shape\n\n\ndef shift_1d(x):\n    x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [1, 0]]))[:, :, :-1]\n    return x\n\n\ndef sequence_mask(length, max_length=None):\n    if max_length is None:\n        max_length = length.max()\n    x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n    return x.unsqueeze(0) < length.unsqueeze(1)\n\n\ndef avg_with_mask(x, mask):\n    assert mask.dtype == torch.float, \"Mask should be float\"\n\n    if mask.ndim == 2:\n        mask = mask.unsqueeze(1)\n\n    if mask.shape[1] == 1:\n        mask = mask.expand_as(x)\n\n    return (x * mask).sum() / mask.sum()\n\n\ndef generate_path(duration, mask):\n    \"\"\"\n    duration: [b, 1, t_x]\n    mask: [b, 1, t_y, t_x]\n    \"\"\"\n    device = duration.device\n\n    b, _, t_y, t_x = mask.shape\n    cum_duration = torch.cumsum(duration, -1)\n\n    cum_duration_flat = cum_duration.view(b * t_x)\n    path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype)\n    path = path.view(b, t_x, t_y)\n    path = path - F.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1]\n    path = path.unsqueeze(1).transpose(2, 3) * mask\n    return path\n\n\ndef clip_grad_value_(parameters, clip_value, norm_type=2):\n    if isinstance(parameters, torch.Tensor):\n        parameters = [parameters]\n    parameters = list(filter(lambda p: p.grad is not None, parameters))\n    norm_type = float(norm_type)\n    if clip_value is not None:\n        clip_value = float(clip_value)\n\n    total_norm = 0\n    for p in parameters:\n        param_norm = p.grad.data.norm(norm_type)\n        total_norm += param_norm.item() ** norm_type\n        if clip_value is not None:\n            p.grad.data.clamp_(min=-clip_value, max=clip_value)\n    total_norm = total_norm ** (1.0 / norm_type)\n    return total_norm\n\n\ndef log_norm(x, mean=-4, std=4, dim=2):\n    \"\"\"\n    normalized log mel -> mel -> norm -> log(norm)\n    \"\"\"\n    x = torch.log(torch.exp(x * std + mean).norm(dim=dim))\n    return x\n\n\ndef load_F0_models(path):\n    # load F0 model\n    from .JDC.model import JDCNet\n\n    F0_model = JDCNet(num_class=1, seq_len=192)\n    params = torch.load(path, map_location=\"cpu\")[\"net\"]\n    F0_model.load_state_dict(params)\n    _ = F0_model.train()\n\n    return F0_model\n\n\ndef modify_w2v_forward(self, output_layer=15):\n    \"\"\"\n    change forward method of w2v encoder to get its intermediate layer output\n    :param self:\n    :param layer:\n    :return:\n    \"\"\"\n    from transformers.modeling_outputs import BaseModelOutput\n\n    def forward(\n        hidden_states,\n        attention_mask=None,\n        output_attentions=False,\n        output_hidden_states=False,\n        return_dict=True,\n    ):\n        all_hidden_states = () if output_hidden_states else None\n        all_self_attentions = () if output_attentions else None\n\n        conv_attention_mask = attention_mask\n        if attention_mask is not None:\n            # make sure padded tokens output 0\n            hidden_states = hidden_states.masked_fill(\n                ~attention_mask.bool().unsqueeze(-1), 0.0\n            )\n\n            # extend attention_mask\n            attention_mask = 1.0 - attention_mask[:, None, None, :].to(\n                dtype=hidden_states.dtype\n            )\n            attention_mask = attention_mask * torch.finfo(hidden_states.dtype).min\n            attention_mask = attention_mask.expand(\n                attention_mask.shape[0],\n                1,\n                attention_mask.shape[-1],\n                attention_mask.shape[-1],\n            )\n\n        hidden_states = self.dropout(hidden_states)\n\n        if self.embed_positions is not None:\n            relative_position_embeddings = self.embed_positions(hidden_states)\n        else:\n            relative_position_embeddings = None\n\n        deepspeed_zero3_is_enabled = False\n\n        for i, layer in enumerate(self.layers):\n            if output_hidden_states:\n                all_hidden_states = all_hidden_states + (hidden_states,)\n\n            # add LayerDrop (see https://arxiv.org/abs/1909.11556 for description)\n            dropout_probability = torch.rand([])\n\n            skip_the_layer = (\n                True\n                if self.training and (dropout_probability < self.config.layerdrop)\n                else False\n            )\n            if not skip_the_layer or deepspeed_zero3_is_enabled:\n                # under deepspeed zero3 all gpus must run in sync\n                if self.gradient_checkpointing and self.training:\n                    layer_outputs = self._gradient_checkpointing_func(\n                        layer.__call__,\n                        hidden_states,\n                        attention_mask,\n                        relative_position_embeddings,\n                        output_attentions,\n                        conv_attention_mask,\n                    )\n                else:\n                    layer_outputs = layer(\n                        hidden_states,\n                        attention_mask=attention_mask,\n                        relative_position_embeddings=relative_position_embeddings,\n                        output_attentions=output_attentions,\n                        conv_attention_mask=conv_attention_mask,\n                    )\n                hidden_states = layer_outputs[0]\n\n            if skip_the_layer:\n                layer_outputs = (None, None)\n\n            if output_attentions:\n                all_self_attentions = all_self_attentions + (layer_outputs[1],)\n\n            if i == output_layer - 1:\n                break\n\n        if output_hidden_states:\n            all_hidden_states = all_hidden_states + (hidden_states,)\n\n        if not return_dict:\n            return tuple(\n                v\n                for v in [hidden_states, all_hidden_states, all_self_attentions]\n                if v is not None\n            )\n        return BaseModelOutput(\n            last_hidden_state=hidden_states,\n            hidden_states=all_hidden_states,\n            attentions=all_self_attentions,\n        )\n\n    return forward\n\n\nMATPLOTLIB_FLAG = False\n\n\ndef plot_spectrogram_to_numpy(spectrogram):\n    global MATPLOTLIB_FLAG\n    if not MATPLOTLIB_FLAG:\n        import matplotlib\n        import logging\n\n        matplotlib.use(\"Agg\")\n        MATPLOTLIB_FLAG = True\n        mpl_logger = logging.getLogger(\"matplotlib\")\n        mpl_logger.setLevel(logging.WARNING)\n    import matplotlib.pylab as plt\n    import numpy as np\n\n    fig, ax = plt.subplots(figsize=(10, 2))\n    im = ax.imshow(spectrogram, aspect=\"auto\", origin=\"lower\", interpolation=\"none\")\n    plt.colorbar(im, ax=ax)\n    plt.xlabel(\"Frames\")\n    plt.ylabel(\"Channels\")\n    plt.tight_layout()\n\n    fig.canvas.draw()\n    data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep=\"\")\n    data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))\n    plt.close()\n    return data\n\n\ndef normalize_f0(f0_sequence):\n    # Remove unvoiced frames (replace with -1)\n    voiced_indices = np.where(f0_sequence > 0)[0]\n    f0_voiced = f0_sequence[voiced_indices]\n\n    # Convert to log scale\n    log_f0 = np.log2(f0_voiced)\n\n    # Calculate mean and standard deviation\n    mean_f0 = np.mean(log_f0)\n    std_f0 = np.std(log_f0)\n\n    # Normalize the F0 sequence\n    normalized_f0 = (log_f0 - mean_f0) / std_f0\n\n    # Create the normalized F0 sequence with unvoiced frames\n    normalized_sequence = np.zeros_like(f0_sequence)\n    normalized_sequence[voiced_indices] = normalized_f0\n    normalized_sequence[f0_sequence <= 0] = -1  # Assign -1 to unvoiced frames\n\n    return normalized_sequence\n\n\nclass MyModel(nn.Module):\n    def __init__(self,args, use_emovec=False, use_gpt_latent=False):\n        super(MyModel, self).__init__()\n        from indextts.s2mel.modules.flow_matching import CFM\n        from indextts.s2mel.modules.length_regulator import InterpolateRegulator\n        \n        length_regulator = InterpolateRegulator(\n            channels=args.length_regulator.channels,\n            sampling_ratios=args.length_regulator.sampling_ratios,\n            is_discrete=args.length_regulator.is_discrete,\n            in_channels=args.length_regulator.in_channels if hasattr(args.length_regulator, \"in_channels\") else None,\n            vector_quantize=args.length_regulator.vector_quantize if hasattr(args.length_regulator, \"vector_quantize\") else False,\n            codebook_size=args.length_regulator.content_codebook_size,\n            n_codebooks=args.length_regulator.n_codebooks if hasattr(args.length_regulator, \"n_codebooks\") else 1,\n            quantizer_dropout=args.length_regulator.quantizer_dropout if hasattr(args.length_regulator, \"quantizer_dropout\") else 0.0,\n            f0_condition=args.length_regulator.f0_condition if hasattr(args.length_regulator, \"f0_condition\") else False,\n            n_f0_bins=args.length_regulator.n_f0_bins if hasattr(args.length_regulator, \"n_f0_bins\") else 512,\n        )\n\n        if use_gpt_latent:\n            self.models = nn.ModuleDict({\n                'cfm': CFM(args),\n                'length_regulator': length_regulator,\n                'gpt_layer': torch.nn.Sequential(torch.nn.Linear(1280, 256), torch.nn.Linear(256, 128), torch.nn.Linear(128, 1024))\n            })\n\n        else:\n            self.models = nn.ModuleDict({\n                'cfm': CFM(args),\n                'length_regulator': length_regulator\n            })\n    \n    def forward(self, x, target_lengths, prompt_len, cond, y):\n        x = self.models['cfm'](x, target_lengths, prompt_len, cond, y)\n        return x\n    \n    def forward2(self, S_ori,target_lengths,F0_ori):\n        x = self.models['length_regulator'](S_ori, ylens=target_lengths, f0=F0_ori)\n        return x\n\n    def forward_emovec(self, x):\n        x = self.models['emo_layer'](x)\n        return x\n\n    def forward_emo_encoder(self, x):\n        x = self.models['emo_encoder'](x)\n        return x\n\n    def forward_gpt(self,x):\n        x = self.models['gpt_layer'](x)\n        return x\n\n\n\ndef build_model(args, stage=\"DiT\"):\n    if stage == \"DiT\":\n        from modules.flow_matching import CFM\n        from modules.length_regulator import InterpolateRegulator\n        \n        length_regulator = InterpolateRegulator(\n            channels=args.length_regulator.channels,\n            sampling_ratios=args.length_regulator.sampling_ratios,\n            is_discrete=args.length_regulator.is_discrete,\n            in_channels=args.length_regulator.in_channels if hasattr(args.length_regulator, \"in_channels\") else None,\n            vector_quantize=args.length_regulator.vector_quantize if hasattr(args.length_regulator, \"vector_quantize\") else False,\n            codebook_size=args.length_regulator.content_codebook_size,\n            n_codebooks=args.length_regulator.n_codebooks if hasattr(args.length_regulator, \"n_codebooks\") else 1,\n            quantizer_dropout=args.length_regulator.quantizer_dropout if hasattr(args.length_regulator, \"quantizer_dropout\") else 0.0,\n            f0_condition=args.length_regulator.f0_condition if hasattr(args.length_regulator, \"f0_condition\") else False,\n            n_f0_bins=args.length_regulator.n_f0_bins if hasattr(args.length_regulator, \"n_f0_bins\") else 512,\n        )\n        cfm = CFM(args)\n        nets = Munch(\n            cfm=cfm,\n            length_regulator=length_regulator,\n        )\n        \n    elif stage == 'codec':\n        from dac.model.dac import Encoder\n        from modules.quantize import (\n            FAquantizer,\n        )\n\n        encoder = Encoder(\n            d_model=args.DAC.encoder_dim,\n            strides=args.DAC.encoder_rates,\n            d_latent=1024,\n            causal=args.causal,\n            lstm=args.lstm,\n        )\n\n        quantizer = FAquantizer(\n            in_dim=1024,\n            n_p_codebooks=1,\n            n_c_codebooks=args.n_c_codebooks,\n            n_t_codebooks=2,\n            n_r_codebooks=3,\n            codebook_size=1024,\n            codebook_dim=8,\n            quantizer_dropout=0.5,\n            causal=args.causal,\n            separate_prosody_encoder=args.separate_prosody_encoder,\n            timbre_norm=args.timbre_norm,\n        )\n\n        nets = Munch(\n            encoder=encoder,\n            quantizer=quantizer,\n        )\n\n    elif stage == \"mel_vocos\":\n        from modules.vocos import Vocos\n        decoder = Vocos(args)\n        nets = Munch(\n            decoder=decoder,\n        )\n\n    else:\n        raise ValueError(f\"Unknown stage: {stage}\")\n\n    return nets\n\n\ndef load_checkpoint(\n    model,\n    optimizer,\n    path,\n    load_only_params=True,\n    ignore_modules=[],\n    is_distributed=False,\n    load_ema=False,\n):\n    state = torch.load(path, map_location=\"cpu\")\n    params = state[\"net\"]\n    if load_ema and \"ema\" in state:\n        print(\"Loading EMA\")\n        for key in model:\n            i = 0\n            for param_name in params[key]:\n                if \"input_pos\" in param_name:\n                    continue\n                assert params[key][param_name].shape == state[\"ema\"][key][0][i].shape\n                params[key][param_name] = state[\"ema\"][key][0][i].clone()\n                i += 1\n    for key in model:\n        if key in params and key not in ignore_modules:\n            if not is_distributed:\n                # strip prefix of DDP (module.), create a new OrderedDict that does not contain the prefix\n                for k in list(params[key].keys()):\n                    if k.startswith(\"module.\"):\n                        params[key][k[len(\"module.\") :]] = params[key][k]\n                        del params[key][k]\n            model_state_dict = model[key].state_dict()\n            # 过滤出形状匹配的键值对\n            filtered_state_dict = {\n                k: v\n                for k, v in params[key].items()\n                if k in model_state_dict and v.shape == model_state_dict[k].shape\n            }\n            skipped_keys = set(params[key].keys()) - set(filtered_state_dict.keys())\n            if skipped_keys:\n                print(\n                    f\"Warning: Skipped loading some keys due to shape mismatch: {skipped_keys}\"\n                )\n            print(\"%s loaded\" % key)\n            model[key].load_state_dict(filtered_state_dict, strict=False)\n    _ = [model[key].eval() for key in model]\n\n    if not load_only_params:\n        epoch = state[\"epoch\"] + 1\n        iters = state[\"iters\"]\n        optimizer.load_state_dict(state[\"optimizer\"])\n        optimizer.load_scheduler_state_dict(state[\"scheduler\"])\n\n    else:\n        epoch = 0\n        iters = 0\n\n    return model, optimizer, epoch, iters\n\ndef load_checkpoint2(\n    model,\n    optimizer,\n    path,\n    load_only_params=True,\n    ignore_modules=[],\n    is_distributed=False,\n    load_ema=False,\n):\n    state = torch.load(path, map_location=\"cpu\")\n    params = state[\"net\"]\n    if load_ema and \"ema\" in state:\n        print(\"Loading EMA\")\n        for key in model.models:\n            i = 0\n            for param_name in params[key]:\n                if \"input_pos\" in param_name:\n                    continue\n                assert params[key][param_name].shape == state[\"ema\"][key][0][i].shape\n                params[key][param_name] = state[\"ema\"][key][0][i].clone()\n                i += 1\n    for key in model.models:\n        if key in params and key not in ignore_modules:\n            if not is_distributed:\n                # strip prefix of DDP (module.), create a new OrderedDict that does not contain the prefix\n                for k in list(params[key].keys()):\n                    if k.startswith(\"module.\"):\n                        params[key][k[len(\"module.\") :]] = params[key][k]\n                        del params[key][k]\n            model_state_dict = model.models[key].state_dict()\n            # 过滤出形状匹配的键值对\n            filtered_state_dict = {\n                k: v\n                for k, v in params[key].items()\n                if k in model_state_dict and v.shape == model_state_dict[k].shape\n            }\n            skipped_keys = set(params[key].keys()) - set(filtered_state_dict.keys())\n            if skipped_keys:\n                print(\n                    f\"Warning: Skipped loading some keys due to shape mismatch: {skipped_keys}\"\n                )\n            print(\"%s loaded\" % key)\n            model.models[key].load_state_dict(filtered_state_dict, strict=False)\n    model.eval()\n#     _ = [model[key].eval() for key in model]\n\n    if not load_only_params:\n        epoch = state[\"epoch\"] + 1\n        iters = state[\"iters\"]\n        optimizer.load_state_dict(state[\"optimizer\"])\n        optimizer.load_scheduler_state_dict(state[\"scheduler\"])\n\n    else:\n        epoch = 0\n        iters = 0\n\n    return model, optimizer, epoch, iters\n\ndef recursive_munch(d):\n    if isinstance(d, dict):\n        return Munch((k, recursive_munch(v)) for k, v in d.items())\n    elif isinstance(d, list):\n        return [recursive_munch(v) for v in d]\n    else:\n        return d\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/diffusion_transformer.py",
    "content": "import torch\nfrom torch import nn\nimport math\n\nfrom indextts.s2mel.modules.gpt_fast.model import ModelArgs, Transformer\nfrom indextts.s2mel.modules.wavenet import WN\nfrom indextts.s2mel.modules.commons import sequence_mask\n\nfrom torch.nn.utils import weight_norm\n\ndef modulate(x, shift, scale):\n    return x * (1 + scale.unsqueeze(1)) + shift.unsqueeze(1)\n\n\n#################################################################################\n#               Embedding Layers for Timesteps and Class Labels                 #\n#################################################################################\n\nclass TimestepEmbedder(nn.Module):\n    \"\"\"\n    Embeds scalar timesteps into vector representations.\n    \"\"\"\n    def __init__(self, hidden_size, frequency_embedding_size=256):\n        super().__init__()\n        self.mlp = nn.Sequential(\n            nn.Linear(frequency_embedding_size, hidden_size, bias=True),\n            nn.SiLU(),\n            nn.Linear(hidden_size, hidden_size, bias=True),\n        )\n        self.frequency_embedding_size = frequency_embedding_size\n        self.max_period = 10000\n        self.scale = 1000\n\n        half = frequency_embedding_size // 2\n        freqs = torch.exp(\n            -math.log(self.max_period) * torch.arange(start=0, end=half, dtype=torch.float32) / half\n        )\n        self.register_buffer(\"freqs\", freqs)\n\n    def timestep_embedding(self, t):\n        \"\"\"\n        Create sinusoidal timestep embeddings.\n        :param t: a 1-D Tensor of N indices, one per batch element.\n                          These may be fractional.\n        :param dim: the dimension of the output.\n        :param max_period: controls the minimum frequency of the embeddings.\n        :return: an (N, D) Tensor of positional embeddings.\n        \"\"\"\n        # https://github.com/openai/glide-text2im/blob/main/glide_text2im/nn.py\n\n        args = self.scale * t[:, None].float() * self.freqs[None]\n        embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1)\n        if self.frequency_embedding_size % 2:\n            embedding = torch.cat([embedding, torch.zeros_like(embedding[:, :1])], dim=-1)\n        return embedding\n\n    def forward(self, t):\n        t_freq = self.timestep_embedding(t)\n        t_emb = self.mlp(t_freq)\n        return t_emb\n\n\nclass StyleEmbedder(nn.Module):\n    \"\"\"\n    Embeds class labels into vector representations. Also handles label dropout for classifier-free guidance.\n    \"\"\"\n    def __init__(self, input_size, hidden_size, dropout_prob):\n        super().__init__()\n        use_cfg_embedding = dropout_prob > 0\n        self.embedding_table = nn.Embedding(int(use_cfg_embedding), hidden_size)\n        self.style_in = weight_norm(nn.Linear(input_size, hidden_size, bias=True))\n        self.input_size = input_size\n        self.dropout_prob = dropout_prob\n\n    def forward(self, labels, train, force_drop_ids=None):\n        use_dropout = self.dropout_prob > 0\n        if (train and use_dropout) or (force_drop_ids is not None):\n            labels = self.token_drop(labels, force_drop_ids)\n        else:\n            labels = self.style_in(labels)\n        embeddings = labels\n        return embeddings\n\nclass FinalLayer(nn.Module):\n    \"\"\"\n    The final layer of DiT.\n    \"\"\"\n    def __init__(self, hidden_size, patch_size, out_channels):\n        super().__init__()\n        self.norm_final = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)\n        self.linear = weight_norm(nn.Linear(hidden_size, patch_size * patch_size * out_channels, bias=True))\n        self.adaLN_modulation = nn.Sequential(\n            nn.SiLU(),\n            nn.Linear(hidden_size, 2 * hidden_size, bias=True)\n        )\n\n    def forward(self, x, c):\n        shift, scale = self.adaLN_modulation(c).chunk(2, dim=1)\n        x = modulate(self.norm_final(x), shift, scale)\n        x = self.linear(x)\n        return x\n\nclass DiT(torch.nn.Module):\n    def __init__(\n        self,\n        args\n    ):\n        super(DiT, self).__init__()\n        self.time_as_token = args.DiT.time_as_token if hasattr(args.DiT, 'time_as_token') else False\n        self.style_as_token = args.DiT.style_as_token if hasattr(args.DiT, 'style_as_token') else False\n        self.uvit_skip_connection = args.DiT.uvit_skip_connection if hasattr(args.DiT, 'uvit_skip_connection') else False\n        model_args = ModelArgs(\n            block_size=16384,#args.DiT.block_size,\n            n_layer=args.DiT.depth,\n            n_head=args.DiT.num_heads,\n            dim=args.DiT.hidden_dim,\n            head_dim=args.DiT.hidden_dim // args.DiT.num_heads,\n            vocab_size=1024,\n            uvit_skip_connection=self.uvit_skip_connection,\n            time_as_token=self.time_as_token,\n        )\n        self.transformer = Transformer(model_args)\n        self.in_channels = args.DiT.in_channels\n        self.out_channels = args.DiT.in_channels\n        self.num_heads = args.DiT.num_heads\n\n        self.x_embedder = weight_norm(nn.Linear(args.DiT.in_channels, args.DiT.hidden_dim, bias=True))\n\n        self.content_type = args.DiT.content_type  # 'discrete' or 'continuous'\n        self.content_codebook_size = args.DiT.content_codebook_size # for discrete content\n        self.content_dim = args.DiT.content_dim # for continuous content\n        self.cond_embedder = nn.Embedding(args.DiT.content_codebook_size, args.DiT.hidden_dim)  # discrete content\n        self.cond_projection = nn.Linear(args.DiT.content_dim, args.DiT.hidden_dim, bias=True) # continuous content\n\n        self.is_causal = args.DiT.is_causal\n\n        self.t_embedder = TimestepEmbedder(args.DiT.hidden_dim)\n\n        # self.style_embedder1 = weight_norm(nn.Linear(1024, args.DiT.hidden_dim, bias=True))\n        # self.style_embedder2 = weight_norm(nn.Linear(1024, args.style_encoder.dim, bias=True))\n\n        input_pos = torch.arange(16384)\n        self.register_buffer(\"input_pos\", input_pos)\n\n        self.final_layer_type = args.DiT.final_layer_type  # mlp or wavenet\n        if self.final_layer_type == 'wavenet':\n            self.t_embedder2 = TimestepEmbedder(args.wavenet.hidden_dim)\n            self.conv1 = nn.Linear(args.DiT.hidden_dim, args.wavenet.hidden_dim)\n            self.conv2 = nn.Conv1d(args.wavenet.hidden_dim, args.DiT.in_channels, 1)\n            self.wavenet = WN(hidden_channels=args.wavenet.hidden_dim,\n                              kernel_size=args.wavenet.kernel_size,\n                              dilation_rate=args.wavenet.dilation_rate,\n                              n_layers=args.wavenet.num_layers,\n                              gin_channels=args.wavenet.hidden_dim,\n                              p_dropout=args.wavenet.p_dropout,\n                              causal=False)\n            self.final_layer = FinalLayer(args.wavenet.hidden_dim, 1, args.wavenet.hidden_dim)\n            self.res_projection = nn.Linear(args.DiT.hidden_dim,\n                                            args.wavenet.hidden_dim)  # residual connection from tranformer output to final output\n            self.wavenet_style_condition = args.wavenet.style_condition\n            assert args.DiT.style_condition == args.wavenet.style_condition\n        else:\n            self.final_mlp = nn.Sequential(\n                    nn.Linear(args.DiT.hidden_dim, args.DiT.hidden_dim),\n                    nn.SiLU(),\n                    nn.Linear(args.DiT.hidden_dim, args.DiT.in_channels),\n            )\n        self.transformer_style_condition = args.DiT.style_condition\n\n\n        self.class_dropout_prob = args.DiT.class_dropout_prob\n        self.content_mask_embedder = nn.Embedding(1, args.DiT.hidden_dim)\n\n        self.long_skip_connection = args.DiT.long_skip_connection\n        self.skip_linear = nn.Linear(args.DiT.hidden_dim + args.DiT.in_channels, args.DiT.hidden_dim)\n\n        self.cond_x_merge_linear = nn.Linear(args.DiT.hidden_dim + args.DiT.in_channels * 2 +\n                                             args.style_encoder.dim * self.transformer_style_condition * (not self.style_as_token),\n                                             args.DiT.hidden_dim)\n        if self.style_as_token:\n            self.style_in = nn.Linear(args.style_encoder.dim, args.DiT.hidden_dim)\n\n    def setup_caches(self, max_batch_size, max_seq_length):\n        self.transformer.setup_caches(max_batch_size, max_seq_length, use_kv_cache=False)\n        \n    def forward(self, x, prompt_x, x_lens, t, style, cond, mask_content=False):\n        \"\"\"\n            x (torch.Tensor): random noise\n            prompt_x (torch.Tensor): reference mel + zero mel\n                shape: (batch_size, 80, 795+1068)\n            x_lens (torch.Tensor): mel frames output\n                shape: (batch_size, mel_timesteps)\n            t (torch.Tensor): radshape: \n                shape: (batch_size)    \n            style (torch.Tensor): reference global style\n                shape: (batch_size, 192)\n            cond (torch.Tensor): semantic info of reference audio and altered audio\n                shape: (batch_size, mel_timesteps(795+1069), 512)\n        \n        \"\"\"\n        class_dropout = False\n        if self.training and torch.rand(1) < self.class_dropout_prob:\n            class_dropout = True\n        if not self.training and mask_content:\n            class_dropout = True\n        # cond_in_module = self.cond_embedder if self.content_type == 'discrete' else self.cond_projection\n        cond_in_module = self.cond_projection\n\n        B, _, T = x.size()\n\n\n        t1 = self.t_embedder(t)  # (N, D) # t1 [2, 512]\n        cond = cond_in_module(cond) # cond [2,1863,512]->[2,1863,512]\n\n        x = x.transpose(1, 2) # [2,1863,80]\n        prompt_x = prompt_x.transpose(1, 2) # [2,1863,80]\n\n        x_in = torch.cat([x, prompt_x, cond], dim=-1) # 80+80+512=672 [2, 1863, 672]\n        \n        if self.transformer_style_condition and not self.style_as_token: # True and True\n            x_in = torch.cat([x_in, style[:, None, :].repeat(1, T, 1)], dim=-1) #[2, 1863, 864]\n            \n        if class_dropout: #False\n            x_in[..., self.in_channels:] = x_in[..., self.in_channels:] * 0 # 80维后全置为0\n            \n        x_in = self.cond_x_merge_linear(x_in)  # (N, T, D) [2, 1863, 512]\n        \n        if self.style_as_token: # False\n            style = self.style_in(style)\n            style = torch.zeros_like(style) if class_dropout else style\n            x_in = torch.cat([style.unsqueeze(1), x_in], dim=1)\n            \n        if self.time_as_token: # False\n            x_in = torch.cat([t1.unsqueeze(1), x_in], dim=1)\n            \n        x_mask = sequence_mask(x_lens + self.style_as_token + self.time_as_token).to(x.device).unsqueeze(1) #torch.Size([1, 1, 1863])True\n        input_pos = self.input_pos[:x_in.size(1)]  # (T,) range（0，1863）\n        x_mask_expanded = x_mask[:, None, :].repeat(1, 1, x_in.size(1), 1) if not self.is_causal else None # torch.Size([1, 1, 1863, 1863]\n        x_res = self.transformer(x_in, t1.unsqueeze(1), input_pos, x_mask_expanded) # [2, 1863, 512]\n        x_res = x_res[:, 1:] if self.time_as_token else x_res\n        x_res = x_res[:, 1:] if self.style_as_token else x_res\n        \n        if self.long_skip_connection: #True\n            x_res = self.skip_linear(torch.cat([x_res, x], dim=-1))\n        if self.final_layer_type == 'wavenet':\n            x = self.conv1(x_res)\n            x = x.transpose(1, 2)\n            t2 = self.t_embedder2(t)\n            x = self.wavenet(x, x_mask, g=t2.unsqueeze(2)).transpose(1, 2) + self.res_projection(\n                x_res)  # long residual connection\n            x = self.final_layer(x, t1).transpose(1, 2)\n            x = self.conv2(x)\n        else:\n            x = self.final_mlp(x_res)\n            x = x.transpose(1, 2)\n        # x [2,80,1863]\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/encodec.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Convolutional layers wrappers and utilities.\"\"\"\n\nimport math\nimport typing as tp\nimport warnings\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nfrom torch.nn.utils import spectral_norm, weight_norm\n\nimport typing as tp\n\nimport einops\n\n\nclass ConvLayerNorm(nn.LayerNorm):\n    \"\"\"\n    Convolution-friendly LayerNorm that moves channels to last dimensions\n    before running the normalization and moves them back to original position right after.\n    \"\"\"\n    def __init__(self, normalized_shape: tp.Union[int, tp.List[int], torch.Size], **kwargs):\n        super().__init__(normalized_shape, **kwargs)\n\n    def forward(self, x):\n        x = einops.rearrange(x, 'b ... t -> b t ...')\n        x = super().forward(x)\n        x = einops.rearrange(x, 'b t ... -> b ... t')\n        return\n\n\nCONV_NORMALIZATIONS = frozenset(['none', 'weight_norm', 'spectral_norm',\n                                 'time_layer_norm', 'layer_norm', 'time_group_norm'])\n\n\ndef apply_parametrization_norm(module: nn.Module, norm: str = 'none') -> nn.Module:\n    assert norm in CONV_NORMALIZATIONS\n    if norm == 'weight_norm':\n        return weight_norm(module)\n    elif norm == 'spectral_norm':\n        return spectral_norm(module)\n    else:\n        # We already check was in CONV_NORMALIZATION, so any other choice\n        # doesn't need reparametrization.\n        return module\n\n\ndef get_norm_module(module: nn.Module, causal: bool = False, norm: str = 'none', **norm_kwargs) -> nn.Module:\n    \"\"\"Return the proper normalization module. If causal is True, this will ensure the returned\n    module is causal, or return an error if the normalization doesn't support causal evaluation.\n    \"\"\"\n    assert norm in CONV_NORMALIZATIONS\n    if norm == 'layer_norm':\n        assert isinstance(module, nn.modules.conv._ConvNd)\n        return ConvLayerNorm(module.out_channels, **norm_kwargs)\n    elif norm == 'time_group_norm':\n        if causal:\n            raise ValueError(\"GroupNorm doesn't support causal evaluation.\")\n        assert isinstance(module, nn.modules.conv._ConvNd)\n        return nn.GroupNorm(1, module.out_channels, **norm_kwargs)\n    else:\n        return nn.Identity()\n\n\ndef get_extra_padding_for_conv1d(x: torch.Tensor, kernel_size: int, stride: int,\n                                 padding_total: int = 0) -> int:\n    \"\"\"See `pad_for_conv1d`.\n    \"\"\"\n    length = x.shape[-1]\n    n_frames = (length - kernel_size + padding_total) / stride + 1\n    ideal_length = (math.ceil(n_frames) - 1) * stride + (kernel_size - padding_total)\n    return ideal_length - length\n\n\ndef pad_for_conv1d(x: torch.Tensor, kernel_size: int, stride: int, padding_total: int = 0):\n    \"\"\"Pad for a convolution to make sure that the last window is full.\n    Extra padding is added at the end. This is required to ensure that we can rebuild\n    an output of the same length, as otherwise, even with padding, some time steps\n    might get removed.\n    For instance, with total padding = 4, kernel size = 4, stride = 2:\n        0 0 1 2 3 4 5 0 0   # (0s are padding)\n        1   2   3           # (output frames of a convolution, last 0 is never used)\n        0 0 1 2 3 4 5 0     # (output of tr. conv., but pos. 5 is going to get removed as padding)\n            1 2 3 4         # once you removed padding, we are missing one time step !\n    \"\"\"\n    extra_padding = get_extra_padding_for_conv1d(x, kernel_size, stride, padding_total)\n    return F.pad(x, (0, extra_padding))\n\n\ndef pad1d(x: torch.Tensor, paddings: tp.Tuple[int, int], mode: str = 'zero', value: float = 0.):\n    \"\"\"Tiny wrapper around F.pad, just to allow for reflect padding on small input.\n    If this is the case, we insert extra 0 padding to the right before the reflection happen.\n    \"\"\"\n    length = x.shape[-1]\n    padding_left, padding_right = paddings\n    assert padding_left >= 0 and padding_right >= 0, (padding_left, padding_right)\n    if mode == 'reflect':\n        max_pad = max(padding_left, padding_right)\n        extra_pad = 0\n        if length <= max_pad:\n            extra_pad = max_pad - length + 1\n            x = F.pad(x, (0, extra_pad))\n        padded = F.pad(x, paddings, mode, value)\n        end = padded.shape[-1] - extra_pad\n        return padded[..., :end]\n    else:\n        return F.pad(x, paddings, mode, value)\n\n\ndef unpad1d(x: torch.Tensor, paddings: tp.Tuple[int, int]):\n    \"\"\"Remove padding from x, handling properly zero padding. Only for 1d!\"\"\"\n    padding_left, padding_right = paddings\n    assert padding_left >= 0 and padding_right >= 0, (padding_left, padding_right)\n    assert (padding_left + padding_right) <= x.shape[-1]\n    end = x.shape[-1] - padding_right\n    return x[..., padding_left: end]\n\n\nclass NormConv1d(nn.Module):\n    \"\"\"Wrapper around Conv1d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n    def __init__(self, *args, causal: bool = False, norm: str = 'none',\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.conv = apply_parametrization_norm(nn.Conv1d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.conv, causal, norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.norm(x)\n        return x\n\n\nclass NormConv2d(nn.Module):\n    \"\"\"Wrapper around Conv2d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n    def __init__(self, *args, norm: str = 'none',\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.conv = apply_parametrization_norm(nn.Conv2d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.conv, causal=False, norm=norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.norm(x)\n        return x\n\n\nclass NormConvTranspose1d(nn.Module):\n    \"\"\"Wrapper around ConvTranspose1d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n    def __init__(self, *args, causal: bool = False, norm: str = 'none',\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.convtr = apply_parametrization_norm(nn.ConvTranspose1d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.convtr, causal, norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.convtr(x)\n        x = self.norm(x)\n        return x\n\n\nclass NormConvTranspose2d(nn.Module):\n    \"\"\"Wrapper around ConvTranspose2d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n    def __init__(self, *args, norm: str = 'none',\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.convtr = apply_parametrization_norm(nn.ConvTranspose2d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.convtr, causal=False, norm=norm, **norm_kwargs)\n\n    def forward(self, x):\n        x = self.convtr(x)\n        x = self.norm(x)\n        return x\n\n\nclass SConv1d(nn.Module):\n    \"\"\"Conv1d with some builtin handling of asymmetric or causal padding\n    and normalization.\n    \"\"\"\n    def __init__(self, in_channels: int, out_channels: int,\n                 kernel_size: int, stride: int = 1, dilation: int = 1,\n                 groups: int = 1, bias: bool = True, causal: bool = False,\n                 norm: str = 'none', norm_kwargs: tp.Dict[str, tp.Any] = {},\n                 pad_mode: str = 'reflect', **kwargs):\n        super().__init__()\n        # warn user on unusual setup between dilation and stride\n        if stride > 1 and dilation > 1:\n            warnings.warn('SConv1d has been initialized with stride > 1 and dilation > 1'\n                          f' (kernel_size={kernel_size} stride={stride}, dilation={dilation}).')\n        self.conv = NormConv1d(in_channels, out_channels, kernel_size, stride,\n                               dilation=dilation, groups=groups, bias=bias, causal=causal,\n                               norm=norm, norm_kwargs=norm_kwargs)\n        self.causal = causal\n        self.pad_mode = pad_mode\n\n    def forward(self, x):\n        B, C, T = x.shape\n        kernel_size = self.conv.conv.kernel_size[0]\n        stride = self.conv.conv.stride[0]\n        dilation = self.conv.conv.dilation[0]\n        kernel_size = (kernel_size - 1) * dilation + 1  # effective kernel size with dilations\n        padding_total = kernel_size - stride\n        extra_padding = get_extra_padding_for_conv1d(x, kernel_size, stride, padding_total)\n        if self.causal:\n            # Left padding for causal\n            x = pad1d(x, (padding_total, extra_padding), mode=self.pad_mode)\n        else:\n            # Asymmetric padding required for odd strides\n            padding_right = padding_total // 2\n            padding_left = padding_total - padding_right\n            x = pad1d(x, (padding_left, padding_right + extra_padding), mode=self.pad_mode)\n        return self.conv(x)\n\n\nclass SConvTranspose1d(nn.Module):\n    \"\"\"ConvTranspose1d with some builtin handling of asymmetric or causal padding\n    and normalization.\n    \"\"\"\n    def __init__(self, in_channels: int, out_channels: int,\n                 kernel_size: int, stride: int = 1, causal: bool = False,\n                 norm: str = 'none', trim_right_ratio: float = 1.,\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.convtr = NormConvTranspose1d(in_channels, out_channels, kernel_size, stride,\n                                          causal=causal, norm=norm, norm_kwargs=norm_kwargs)\n        self.causal = causal\n        self.trim_right_ratio = trim_right_ratio\n        assert self.causal or self.trim_right_ratio == 1., \\\n            \"`trim_right_ratio` != 1.0 only makes sense for causal convolutions\"\n        assert self.trim_right_ratio >= 0. and self.trim_right_ratio <= 1.\n\n    def forward(self, x):\n        kernel_size = self.convtr.convtr.kernel_size[0]\n        stride = self.convtr.convtr.stride[0]\n        padding_total = kernel_size - stride\n\n        y = self.convtr(x)\n\n        # We will only trim fixed padding. Extra padding from `pad_for_conv1d` would be\n        # removed at the very end, when keeping only the right length for the output,\n        # as removing it here would require also passing the length at the matching layer\n        # in the encoder.\n        if self.causal:\n            # Trim the padding on the right according to the specified ratio\n            # if trim_right_ratio = 1.0, trim everything from right\n            padding_right = math.ceil(padding_total * self.trim_right_ratio)\n            padding_left = padding_total - padding_right\n            y = unpad1d(y, (padding_left, padding_right))\n        else:\n            # Asymmetric padding required for odd strides\n            padding_right = padding_total // 2\n            padding_left = padding_total - padding_right\n            y = unpad1d(y, (padding_left, padding_right))\n        return y\n\nclass SLSTM(nn.Module):\n    \"\"\"\n    LSTM without worrying about the hidden state, nor the layout of the data.\n    Expects input as convolutional layout.\n    \"\"\"\n    def __init__(self, dimension: int, num_layers: int = 2, skip: bool = True):\n        super().__init__()\n        self.skip = skip\n        self.lstm = nn.LSTM(dimension, dimension, num_layers)\n        self.hidden = None\n\n    def forward(self, x):\n        x = x.permute(2, 0, 1)\n        if self.training:\n            y, _ = self.lstm(x)\n        else:\n            y, self.hidden = self.lstm(x, self.hidden)\n        if self.skip:\n            y = y + x\n        y = y.permute(1, 2, 0)\n        return y"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/flow_matching.py",
    "content": "from abc import ABC\n\nimport torch\nimport torch.nn.functional as F\n\nfrom indextts.s2mel.modules.diffusion_transformer import DiT\nfrom indextts.s2mel.modules.commons import sequence_mask\n\nfrom tqdm import tqdm\n\nclass BASECFM(torch.nn.Module, ABC):\n    def __init__(\n        self,\n        args,\n    ):\n        super().__init__()\n        self.sigma_min = 1e-6\n\n        self.estimator = None\n\n        self.in_channels = args.DiT.in_channels\n\n        self.criterion = torch.nn.MSELoss() if args.reg_loss_type == \"l2\" else torch.nn.L1Loss()\n\n        if hasattr(args.DiT, 'zero_prompt_speech_token'):\n            self.zero_prompt_speech_token = args.DiT.zero_prompt_speech_token\n        else:\n            self.zero_prompt_speech_token = False\n\n    @torch.inference_mode()\n    def inference(self, mu, x_lens, prompt, style, f0, n_timesteps, temperature=1.0, inference_cfg_rate=0.5):\n        \"\"\"Forward diffusion\n\n        Args:\n            mu (torch.Tensor): semantic info of reference audio and altered audio\n                shape: (batch_size, mel_timesteps(795+1069), 512)\n            x_lens (torch.Tensor): mel frames output\n                shape: (batch_size, mel_timesteps)\n            prompt (torch.Tensor): reference mel\n                shape: (batch_size, 80, 795)\n            style (torch.Tensor): reference global style\n                shape: (batch_size, 192)\n            f0: None\n            n_timesteps (int): number of diffusion steps\n            temperature (float, optional): temperature for scaling noise. Defaults to 1.0.\n\n        Returns:\n            sample: generated mel-spectrogram\n                shape: (batch_size, 80, mel_timesteps)\n        \"\"\"\n        B, T = mu.size(0), mu.size(1)\n        z = torch.randn([B, self.in_channels, T], device=mu.device) * temperature\n        t_span = torch.linspace(0, 1, n_timesteps + 1, device=mu.device)\n        # t_span = t_span + (-1) * (torch.cos(torch.pi / 2 * t_span) - 1 + t_span)\n        return self.solve_euler(z, x_lens, prompt, mu, style, f0, t_span, inference_cfg_rate)\n\n    def solve_euler(self, x, x_lens, prompt, mu, style, f0, t_span, inference_cfg_rate=0.5):\n        \"\"\"\n        Fixed euler solver for ODEs.\n        Args:\n            x (torch.Tensor): random noise\n            t_span (torch.Tensor): n_timesteps interpolated\n                shape: (n_timesteps + 1,)\n            mu (torch.Tensor): semantic info of reference audio and altered audio\n                shape: (batch_size, mel_timesteps(795+1069), 512)\n            x_lens (torch.Tensor): mel frames output\n                shape: (batch_size, mel_timesteps)\n            prompt (torch.Tensor): reference mel\n                shape: (batch_size, 80, 795)\n            style (torch.Tensor): reference global style\n                shape: (batch_size, 192)\n        \"\"\"\n        t, _, _ = t_span[0], t_span[-1], t_span[1] - t_span[0]\n\n        # I am storing this because I can later plot it by putting a debugger here and saving it to a file\n        # Or in future might add like a return_all_steps flag\n        sol = []\n        # apply prompt\n        prompt_len = prompt.size(-1)\n        prompt_x = torch.zeros_like(x)\n        prompt_x[..., :prompt_len] = prompt[..., :prompt_len]\n        x[..., :prompt_len] = 0\n        if self.zero_prompt_speech_token:\n            mu[..., :prompt_len] = 0\n        for step in tqdm(range(1, len(t_span))):\n            dt = t_span[step] - t_span[step - 1]\n            if inference_cfg_rate > 0:\n                # Stack original and CFG (null) inputs for batched processing\n                stacked_prompt_x = torch.cat([prompt_x, torch.zeros_like(prompt_x)], dim=0)\n                stacked_style = torch.cat([style, torch.zeros_like(style)], dim=0)\n                stacked_mu = torch.cat([mu, torch.zeros_like(mu)], dim=0)\n                stacked_x = torch.cat([x, x], dim=0)\n                stacked_t = torch.cat([t.unsqueeze(0), t.unsqueeze(0)], dim=0)\n\n                # Perform a single forward pass for both original and CFG inputs\n                stacked_dphi_dt = self.estimator(\n                    stacked_x, stacked_prompt_x, x_lens, stacked_t, stacked_style, stacked_mu,\n                )\n\n                # Split the output back into the original and CFG components\n                dphi_dt, cfg_dphi_dt = stacked_dphi_dt.chunk(2, dim=0)\n\n                # Apply CFG formula\n                dphi_dt = (1.0 + inference_cfg_rate) * dphi_dt - inference_cfg_rate * cfg_dphi_dt\n            else:\n                dphi_dt = self.estimator(x, prompt_x, x_lens, t.unsqueeze(0), style, mu)\n\n            x = x + dt * dphi_dt\n            t = t + dt\n            sol.append(x)\n            if step < len(t_span) - 1:\n                dt = t_span[step + 1] - t\n            x[:, :, :prompt_len] = 0\n\n        return sol[-1]\n    def forward(self, x1, x_lens, prompt_lens, mu, style):\n        \"\"\"Computes diffusion loss\n\n        Args:\n            mu (torch.Tensor): semantic info of reference audio and altered audio\n                shape: (batch_size, mel_timesteps(795+1069), 512)\n            x1: mel\n            x_lens (torch.Tensor): mel frames output\n                shape: (batch_size, mel_timesteps)\n            prompt (torch.Tensor): reference mel\n                shape: (batch_size, 80, 795)\n            style (torch.Tensor): reference global style\n                shape: (batch_size, 192)\n\n        Returns:\n            loss: conditional flow matching loss\n            y: conditional flow\n                shape: (batch_size, n_feats, mel_timesteps)\n        \"\"\"\n        b, _, t = x1.shape\n\n        # random timestep\n        t = torch.rand([b, 1, 1], device=mu.device, dtype=x1.dtype)\n        # sample noise p(x_0)\n        z = torch.randn_like(x1)\n\n        y = (1 - (1 - self.sigma_min) * t) * z + t * x1\n        u = x1 - (1 - self.sigma_min) * z\n\n        prompt = torch.zeros_like(x1)\n        for bib in range(b):\n            prompt[bib, :, :prompt_lens[bib]] = x1[bib, :, :prompt_lens[bib]]\n            # range covered by prompt are set to 0\n            y[bib, :, :prompt_lens[bib]] = 0\n            if self.zero_prompt_speech_token:\n                mu[bib, :, :prompt_lens[bib]] = 0\n\n        estimator_out = self.estimator(y, prompt, x_lens, t.squeeze(1).squeeze(1), style, mu, prompt_lens)\n        loss = 0\n        for bib in range(b):\n            loss += self.criterion(estimator_out[bib, :, prompt_lens[bib]:x_lens[bib]], u[bib, :, prompt_lens[bib]:x_lens[bib]])\n        loss /= b\n\n        return loss, estimator_out + (1 - self.sigma_min) * z\n\n\n\nclass CFM(BASECFM):\n    def __init__(self, args):\n        super().__init__(\n            args\n        )\n        if args.dit_type == \"DiT\":\n            self.estimator = DiT(args)\n        else:\n            raise NotImplementedError(f\"Unknown diffusion type {args.dit_type}\")\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/gpt_fast/generate.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\nimport itertools\nimport sys\nimport time\nfrom pathlib import Path\nfrom typing import Optional, Tuple\n\nimport torch\nimport torch._dynamo.config\nimport torch._inductor.config\n\ndef device_sync(device):\n    if \"cuda\" in device:\n        torch.cuda.synchronize(device)\n    elif (\"cpu\" in device) or (\"mps\" in device):\n        pass\n    else:\n        print(f\"device={device} is not yet suppported\")\n\n\ntorch._inductor.config.coordinate_descent_tuning = True\ntorch._inductor.config.triton.unique_kernel_names = True\ntorch._inductor.config.fx_graph_cache = True # Experimental feature to reduce compilation times, will be on by default in future\n\ndefault_device = 'cuda' if torch.cuda.is_available() else 'cpu'\n\n# support running without installing as a package\nwd = Path(__file__).parent.parent.resolve()\nsys.path.append(str(wd))\n\nfrom model import Transformer\nfrom tokenizer import get_tokenizer\n\ndef multinomial_sample_one_no_sync(probs_sort): # Does multinomial sampling without a cuda synchronization\n    q = torch.empty_like(probs_sort).exponential_(1)\n    return torch.argmax(probs_sort / q, dim=-1, keepdim=True).to(dtype=torch.int)\n\ndef logits_to_probs(logits, temperature: float = 1.0, top_k: Optional[int] = None):\n    logits = logits / max(temperature, 1e-5)\n\n    if top_k is not None:\n        v, _ = torch.topk(logits, min(top_k, logits.size(-1)))\n        pivot = v.select(-1, -1).unsqueeze(-1)\n        logits = torch.where(logits < pivot, -float(\"Inf\"), logits)\n    probs = torch.nn.functional.softmax(logits, dim=-1)\n    return probs\n\ndef sample(logits, temperature: float = 1.0, top_k: Optional[int] = None):\n    probs = logits_to_probs(logits[0, -1], temperature, top_k)\n    idx_next = multinomial_sample_one_no_sync(probs)\n    return idx_next, probs\n\ndef prefill(model: Transformer, x: torch.Tensor, input_pos: torch.Tensor, **sampling_kwargs) -> torch.Tensor:\n    # input_pos: [B, S]\n    logits = model(x, input_pos)\n    return sample(logits, **sampling_kwargs)[0]\n\ndef decode_one_token(model: Transformer, x: torch.Tensor, input_pos: torch.Tensor, **sampling_kwargs) -> Tuple[torch.Tensor, torch.Tensor]:\n    # input_pos: [B, 1]\n    assert input_pos.shape[-1] == 1\n    logits = model(x, input_pos)\n    return sample(logits, **sampling_kwargs)\n\ndef decode_n_tokens(model: Transformer, cur_token: torch.Tensor, input_pos: torch.Tensor, num_new_tokens: int, callback=lambda _: _, **sampling_kwargs):\n    new_tokens, new_probs = [], []\n    for i in range(num_new_tokens):\n        with torch.backends.cuda.sdp_kernel(enable_flash=False, enable_mem_efficient=False, enable_math=True): # Actually better for Inductor to codegen attention here\n            next_token, next_prob = decode_one_token(\n                model, cur_token, input_pos, **sampling_kwargs\n            )\n            input_pos += 1\n            new_tokens.append(next_token.clone())\n            callback(new_tokens[-1])\n            new_probs.append(next_prob.clone())\n            cur_token = next_token.view(1, -1)\n\n    return new_tokens, new_probs\n\n\ndef model_forward(model, x, input_pos):\n    return model(x, input_pos)\n\ndef speculative_decode(\n    model: Transformer,\n    draft_model: Transformer,\n    cur_token: torch.Tensor,\n    input_pos: int,\n    speculate_k: int,\n    **sampling_kwargs\n) -> torch.Tensor:\n    # draft model inference sequentially\n    device = cur_token.device\n    orig_input_pos = torch.tensor([input_pos], dtype=torch.int64, device=cur_token.device)\n    draft_tokens, draft_probs = decode_n_tokens(draft_model, cur_token.view(1, -1), orig_input_pos.clone(), speculate_k, **sampling_kwargs)\n\n    draft_tokens = torch.cat(draft_tokens)\n    # parallel inference on target model using draft tokens\n    target_logits = model_forward(\n        model,\n        torch.cat([cur_token.view(1), draft_tokens]).view(1, -1),\n        torch.arange(input_pos, input_pos + speculate_k + 1, device=cur_token.device)\n    )\n    target_probs = logits_to_probs(target_logits[0], **sampling_kwargs)\n    draft_probs = torch.stack(draft_probs)\n    # q: target prob, p: draft prob\n    # q >= p: always accept draft token\n    # q < p: q/p prob to accept draft token\n    p = draft_probs[torch.arange(0, speculate_k, device=device), draft_tokens]\n    q = target_probs[torch.arange(0, speculate_k, device=device), draft_tokens]\n    accept_draft_prob = torch.minimum(torch.ones(()), q[:speculate_k]/ p)\n    rejected_locations = (torch.rand_like(accept_draft_prob) > accept_draft_prob).nonzero()\n\n    if rejected_locations.shape[0] == 0: # All draft tokens have been accepted\n        accept_length = speculate_k + 1\n        last_token = multinomial_sample_one_no_sync(target_probs[-1])\n        # fill last token into draft model\n        model_forward(\n            draft_model,\n            draft_tokens[-1].view(1, -1),\n            orig_input_pos + speculate_k,\n        )\n        return torch.cat([draft_tokens, last_token])\n    else:\n        accept_length = rejected_locations[0].item()\n        p = draft_probs[accept_length]\n        q = target_probs[accept_length]\n        new = q - p\n        new = torch.where(new > 0, new, 0.0)\n        new = new / new.sum()\n        next_token = multinomial_sample_one_no_sync(new)\n        return torch.cat([draft_tokens[:accept_length], next_token])\n\n@torch.no_grad()\ndef generate(\n    model: Transformer,\n    prompt: torch.Tensor,\n    max_new_tokens: int,\n    *,\n    interactive: bool,\n    draft_model: Transformer,\n    speculate_k: Optional[int] = 8,\n    callback = lambda x: x,\n    **sampling_kwargs\n) -> torch.Tensor:\n    \"\"\"\n    Takes a conditioning sequence (prompt) as input and continues to generate as many tokens as requested.\n    \"\"\"\n\n    is_speculative = draft_model is not None\n    # create an empty tensor of the expected final shape and fill in the current tokens\n    T = prompt.size(0)\n    T_new = T + max_new_tokens\n    if interactive:\n        max_seq_length = 350\n    else:\n        max_seq_length = min(T_new, model.config.block_size)\n\n    device, dtype = prompt.device, prompt.dtype\n    max_seq_length = max_seq_length + speculate_k + 1 if is_speculative else max_seq_length\n    with torch.device(device):\n        model.setup_caches(max_batch_size=1, max_seq_length=max_seq_length)\n        if is_speculative and draft_model is not model:\n            draft_model.setup_caches(max_batch_size=1, max_seq_length=max_seq_length)\n\n    # create an empty tensor of the expected final shape and fill in the current tokens\n    empty = torch.empty(T_new, dtype=dtype, device=device)\n    empty[:T] = prompt\n    seq = empty\n    input_pos = torch.arange(0, T, device=device)\n\n    next_token = prefill(model, prompt.view(1, -1), input_pos, **sampling_kwargs).clone()\n    if is_speculative:\n        prefill(draft_model, prompt.view(1, -1), input_pos, **sampling_kwargs)\n    seq[T] = next_token\n\n    input_pos = torch.tensor([T], device=device, dtype=torch.int)\n    accept_counts = [0] * (speculate_k + 1)\n\n    if is_speculative:\n        input_pos = input_pos.item()  # for speculative decoding easier to keep on host\n        while input_pos < T_new - 1:\n            cur_token = next_token.view(())\n\n            next_tokens = speculative_decode(\n                model, draft_model, cur_token, input_pos, speculate_k, **sampling_kwargs\n            )\n\n            accept_counts[len(next_tokens) - 1] += 1\n            num_added = min(T_new - input_pos - 1, len(next_tokens))\n            seq[input_pos + 1 : input_pos + num_added + 1] = next_tokens[: num_added]\n            for i in next_tokens[: num_added,]:\n                callback(i)\n            input_pos = input_pos + num_added\n            next_token = next_tokens[-1]\n    else:\n        generated_tokens, _ = decode_n_tokens(model, next_token.view(1, -1), input_pos, max_new_tokens - 1, callback=callback, **sampling_kwargs)\n        seq[T + 1:] = torch.cat(generated_tokens)\n\n    generate_stats = {\n        'accept_counts': accept_counts\n    }\n    return seq, generate_stats\n\ndef encode_tokens(tokenizer, string, bos=True, device=default_device):\n    tokens = tokenizer.encode(string)\n    if bos:\n        tokens = [tokenizer.bos_id()] + tokens\n    return torch.tensor(tokens, dtype=torch.int, device=device)\n\ndef _load_model(checkpoint_path, device, precision, use_tp):\n    use_cuda = 'cuda' in device\n    with torch.device('meta'):\n        model = Transformer.from_name(checkpoint_path.parent.name)\n\n    if \"int8\" in str(checkpoint_path):\n        print(\"Using int8 weight-only quantization!\")\n        from quantize import WeightOnlyInt8QuantHandler\n        simple_quantizer = WeightOnlyInt8QuantHandler(model)\n        model = simple_quantizer.convert_for_runtime()\n\n    if \"int4\" in str(checkpoint_path):\n        print(\"Using int4 weight-only quantization!\")\n        path_comps = checkpoint_path.name.split(\".\")\n        groupsize = int(path_comps[-2][1:])\n        from quantize import WeightOnlyInt4QuantHandler\n        simple_quantizer = WeightOnlyInt4QuantHandler(model, groupsize)\n        model = simple_quantizer.convert_for_runtime()\n\n    checkpoint = torch.load(str(checkpoint_path), mmap=True, weights_only=True)\n    if \"model\" in checkpoint and \"stories\" in str(checkpoint_path):\n        checkpoint = checkpoint[\"model\"]\n    model.load_state_dict(checkpoint, assign=True)\n\n    if use_tp:\n        from tp import apply_tp\n        print(\"Applying tensor parallel to model ...\")\n        apply_tp(model)\n\n    model = model.to(device=device, dtype=precision)\n    return model.eval()\n\ndef _get_model_size(model):\n    model_size = 0\n    for name, child in model.named_children():\n        if not isinstance(child, torch.nn.Embedding):\n            model_size += sum(\n                [\n                    p.numel() * p.dtype.itemsize\n                    for p in itertools.chain(child.parameters(), child.buffers())\n                ]\n            )\n    return model_size\n\nB_INST, E_INST = \"[INST]\", \"[/INST]\"\n\ndef main(\n    prompt: str = \"Hello, my name is\",\n    interactive: bool = False,\n    num_samples: int = 5,\n    max_new_tokens: int = 100,\n    top_k: int = 200,\n    temperature: float = 0.8,\n    checkpoint_path: Path = Path(\"checkpoints/meta-Transformer/Transformer-2-7b-chat-hf/model.pth\"),\n    compile: bool = True,\n    compile_prefill: bool = False,\n    profile: Optional[Path] = None,\n    draft_checkpoint_path: Optional[Path] = None,\n    speculate_k: int = 5,\n    device=default_device,\n) -> None:\n    \"\"\"Generates text samples based on a pre-trained Transformer model and tokenizer.\n    \"\"\"\n    assert checkpoint_path.is_file(), checkpoint_path\n\n    tokenizer_path = checkpoint_path.parent / \"tokenizer.model\"\n    assert tokenizer_path.is_file(), str(tokenizer_path)\n\n    global print\n    from tp import maybe_init_dist\n    rank = maybe_init_dist()\n    use_tp = rank is not None\n    if use_tp:\n        if rank != 0:\n            # only print on rank 0\n            print = lambda *args, **kwargs: None\n\n    print(f\"Using device={device}\")\n    precision = torch.bfloat16\n    is_speculative = draft_checkpoint_path is not None\n    is_chat = \"chat\" in str(checkpoint_path)\n\n    print(\"Loading model ...\")\n    t0 = time.time()\n    model = _load_model(checkpoint_path, device, precision, use_tp)\n\n    if is_speculative:\n        draft_model = _load_model(draft_checkpoint_path, device, precision, use_tp)\n    else:\n        draft_model = None\n\n    device_sync(device=device) # MKG\n    print(f\"Time to load model: {time.time() - t0:.02f} seconds\")\n\n    tokenizer = get_tokenizer(tokenizer_path, checkpoint_path)\n\n    encoded = encode_tokens(tokenizer, prompt, bos=True, device=device)\n    prompt_length = encoded.size(0)\n\n    torch.manual_seed(1234)\n    model_size = _get_model_size(model)\n    if compile:\n        if is_speculative and use_tp: # and (\"cuda\" in device):\n            torch._inductor.config.triton.cudagraph_trees = False # Bug with cudagraph trees in this case\n\n        if is_speculative:\n            global model_forward, logits_to_prob\n            model_forward = torch.compile(model_forward, mode=\"reduce-overhead\", fullgraph=True)\n\n        global decode_one_token, prefill\n        decode_one_token = torch.compile(decode_one_token, mode=\"reduce-overhead\", fullgraph=True)\n\n        # Uncomment to squeeze more perf out of prefill\n        if compile_prefill:\n            prefill = torch.compile(prefill, fullgraph=True, dynamic=True)\n\n\n    aggregate_metrics = {\n        'tokens_per_sec': [],\n        'accept_counts': [],\n    }\n    start = -1 if compile else 0\n\n    for i in range(start, num_samples):\n        device_sync(device=device) # MKG\n        if i >= 0 and interactive:\n            prompt = input(\"What is your prompt? \")\n            if is_chat:\n                prompt = f\"{B_INST} {prompt.strip()} {E_INST}\"\n            encoded = encode_tokens(tokenizer, prompt, bos=True, device=device)\n\n        if interactive and i >= 0:\n            buffer = []\n            period_id = tokenizer.encode('.')[0]\n            done_generating = False\n            def callback(x):\n                nonlocal done_generating\n                if done_generating:\n                    return\n                buffer.append(tokenizer.decode([period_id] + x.tolist())[1:])\n                if x.item() == tokenizer.eos_id():\n                    done_generating = True\n                if len(buffer) == 4 or done_generating:\n                    print(''.join(buffer), end='', flush=True)\n                    buffer.clear()\n                # print(, end='', flush=True)\n        else:\n            callback = lambda x : x\n        t0 = time.perf_counter()\n        import contextlib\n        if (i != num_samples - 1 or not profile) or (use_tp and rank != 0):\n            prof = contextlib.nullcontext()\n        else:\n            torch.profiler._utils._init_for_cuda_graphs()\n            prof = torch.profiler.profile()\n        with prof:\n            y, metrics = generate(\n                model,\n                encoded,\n                max_new_tokens,\n                draft_model=draft_model,\n                speculate_k=speculate_k,\n                interactive=interactive,\n                callback=callback,\n                temperature=temperature,\n                top_k=top_k,\n            )\n            aggregate_metrics['accept_counts'].append(metrics['accept_counts'])\n        if i == -1:\n            print(f\"Compilation time: {time.perf_counter() - t0:.2f} seconds\")\n            continue\n        if hasattr(prof, \"export_chrome_trace\"):\n            if use_tp:\n                prof.export_chrome_trace(f\"{profile}_rank_{rank}.json\")\n            else:\n                prof.export_chrome_trace(f\"{profile}.json\")\n        device_sync(device=device) # MKG\n        t = time.perf_counter() - t0\n\n        if not interactive:\n            print(tokenizer.decode(y.tolist()))\n        else:\n            print()\n        tokens_generated = y.size(0) - prompt_length\n        tokens_sec = tokens_generated / t\n        aggregate_metrics['tokens_per_sec'].append(tokens_sec)\n        print(f\"Time for inference {i + 1}: {t:.02f} sec total, {tokens_sec:.02f} tokens/sec\")\n        print(f\"Bandwidth achieved: {model_size * tokens_sec / 1e9:.02f} GB/s\")\n    print(\"==========\")\n    if is_speculative:\n        counts_aggregated = [sum(i) for i in zip(*aggregate_metrics['accept_counts'])]\n        acceptance_probs = [i/sum(counts_aggregated) for i in counts_aggregated]\n        print(f\"Acceptance probs: {acceptance_probs}\")\n        print(f\"Mean Accepted: {sum([idx * i for idx, i in enumerate(counts_aggregated)])/sum(counts_aggregated)}\")\n\n    print(f\"Average tokens/sec: {torch.mean(torch.tensor(aggregate_metrics['tokens_per_sec'])).item():.2f}\")\n    print(f\"Memory used: {torch.cuda.max_memory_reserved() / 1e9:.02f} GB\")\n\n\nif __name__ == '__main__':\n    import argparse\n    parser = argparse.ArgumentParser(description='Your CLI description.')\n\n    parser.add_argument('--prompt', type=str, default=\"Hello, my name is\", help='Input prompt.')\n    parser.add_argument('--interactive', action='store_true', help='Whether to launch in interactive mode')\n    parser.add_argument('--num_samples', type=int, default=5, help='Number of samples.')\n    parser.add_argument('--max_new_tokens', type=int, default=200, help='Maximum number of new tokens.')\n    parser.add_argument('--top_k', type=int, default=200, help='Top-k for sampling.')\n    parser.add_argument('--temperature', type=float, default=0.8, help='Temperature for sampling.')\n    parser.add_argument('--checkpoint_path', type=Path, default=Path(\"checkpoints/meta-Transformer/Transformer-2-7b-chat-hf/model.pth\"), help='Model checkpoint path.')\n    parser.add_argument('--compile', action='store_true', help='Whether to compile the model.')\n    parser.add_argument('--compile_prefill', action='store_true', help='Whether to compile the prefill (improves prefill perf, but higher compile times)')\n    parser.add_argument('--profile', type=Path, default=None, help='Profile path.')\n    parser.add_argument('--speculate_k', type=int, default=5, help='Speculative execution depth.')\n    parser.add_argument('--draft_checkpoint_path', type=Path, default=None, help='Draft checkpoint path.')\n    parser.add_argument('--device', type=str, default=default_device, help='Device to use')\n\n    args = parser.parse_args()\n    main(\n        args.prompt, args.interactive, args.num_samples, args.max_new_tokens, args.top_k,\n        args.temperature, args.checkpoint_path, args.compile, args.compile_prefill, args.profile, args.draft_checkpoint_path,\n        args.speculate_k, args.device\n    )\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/gpt_fast/model.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\nfrom torch import Tensor\nfrom torch.nn import functional as F\n\n\ndef find_multiple(n: int, k: int) -> int:\n    if n % k == 0:\n        return n\n    return n + k - (n % k)\n\nclass AdaptiveLayerNorm(nn.Module):\n    r\"\"\"Adaptive Layer Normalization\"\"\"\n\n    def __init__(self, d_model, norm) -> None:\n        super(AdaptiveLayerNorm, self).__init__()\n        self.project_layer = nn.Linear(d_model, 2 * d_model)\n        self.norm = norm\n        self.d_model = d_model\n        self.eps = self.norm.eps\n\n    def forward(self, input: Tensor, embedding: Tensor = None) -> Tensor:\n        if embedding is None:\n            return self.norm(input)\n        weight, bias = torch.split(\n            self.project_layer(embedding),\n            split_size_or_sections=self.d_model,\n            dim=-1,\n        )\n        return weight * self.norm(input) + bias\n\n\n@dataclass\nclass ModelArgs:\n    block_size: int = 2048\n    vocab_size: int = 32000\n    n_layer: int = 32\n    n_head: int = 32\n    dim: int = 4096\n    intermediate_size: int = None\n    n_local_heads: int = -1\n    head_dim: int = 64\n    rope_base: float = 10000\n    norm_eps: float = 1e-5\n    has_cross_attention: bool = False\n    context_dim: int = 0\n    uvit_skip_connection: bool = False\n    time_as_token: bool = False\n\n    def __post_init__(self):\n        if self.n_local_heads == -1:\n            self.n_local_heads = self.n_head\n        if self.intermediate_size is None:\n            hidden_dim = 4 * self.dim\n            n_hidden = int(2 * hidden_dim / 3)\n            self.intermediate_size = find_multiple(n_hidden, 256)\n        # self.head_dim = self.dim // self.n_head\n\n    @classmethod\n    def from_name(cls, name: str):\n        if name in transformer_configs:\n            return cls(**transformer_configs[name])\n        # fuzzy search\n        config = [config for config in transformer_configs if config.lower() in str(name).lower()]\n\n        # We may have two or more configs matched (e.g. \"7B\" and \"Mistral-7B\"). Find the best config match,\n        # take longer name (as it have more symbols matched)\n        if len(config) > 1:\n            config.sort(key=len, reverse=True)\n            assert len(config[0]) != len(config[1]), name  # make sure only one 'best' match\n\n        return cls(**transformer_configs[config[0]])\n\n\ntransformer_configs = {\n    \"CodeLlama-7b-Python-hf\": dict(block_size=16384, vocab_size=32000, n_layer=32, dim=4096, rope_base=1000000),\n    \"7B\": dict(n_layer=32, n_head=32, dim=4096),\n    \"13B\": dict(n_layer=40, n_head=40, dim=5120),\n    \"30B\": dict(n_layer=60, n_head=52, dim=6656),\n    \"34B\": dict(n_layer=48, n_head=64, dim=8192, vocab_size=32000, n_local_heads=8, intermediate_size=22016,\n                rope_base=1000000),  # CodeLlama-34B-Python-hf\n    \"70B\": dict(n_layer=80, n_head=64, dim=8192, n_local_heads=8, intermediate_size=28672),\n    \"Mistral-7B\": dict(n_layer=32, n_head=32, n_local_heads=8, dim=4096, intermediate_size=14336, vocab_size=32000),\n    \"stories15M\": dict(n_layer=6, n_head=6, dim=288),\n    \"stories110M\": dict(n_layer=12, n_head=12, dim=768),\n\n    \"llama-3-8b\": dict(block_size=8192, n_layer=32, n_head=32, n_local_heads=8, dim=4096, intermediate_size=14336,\n                       vocab_size=128256, rope_base=500000),\n    \"llama-3-70b\": dict(block_size=8192, n_layer=80, n_head=64, n_local_heads=8, dim=8192, intermediate_size=28672,\n                        vocab_size=128256, rope_base=500000),\n}\n\n\nclass KVCache(nn.Module):\n    def __init__(self, max_batch_size, max_seq_length, n_heads, head_dim, dtype=torch.bfloat16):\n        super().__init__()\n        cache_shape = (max_batch_size, n_heads, max_seq_length, head_dim)\n        self.register_buffer('k_cache', torch.zeros(cache_shape, dtype=dtype))\n        self.register_buffer('v_cache', torch.zeros(cache_shape, dtype=dtype))\n\n    def update(self, input_pos, k_val, v_val):\n        # input_pos: [S], k_val: [B, H, S, D]\n        assert input_pos.shape[0] == k_val.shape[2]\n\n        k_out = self.k_cache\n        v_out = self.v_cache\n        k_out[:, :, input_pos] = k_val\n        v_out[:, :, input_pos] = v_val\n\n        return k_out, v_out\n\n\nclass Transformer(nn.Module):\n    def __init__(self, config: ModelArgs) -> None:\n        super().__init__()\n        self.config = config\n\n        self.layers = nn.ModuleList(TransformerBlock(config) for _ in range(config.n_layer))\n        self.norm = AdaptiveLayerNorm(config.dim, RMSNorm(config.dim, eps=config.norm_eps))\n\n        self.freqs_cis: Optional[Tensor] = None\n        self.mask_cache: Optional[Tensor] = None\n        self.max_batch_size = -1\n        self.max_seq_length = -1\n\n    def setup_caches(self, max_batch_size, max_seq_length, use_kv_cache=True):\n        if self.max_seq_length >= max_seq_length and self.max_batch_size >= max_batch_size:\n            return\n        head_dim = self.config.dim // self.config.n_head\n        max_seq_length = find_multiple(max_seq_length, 8)\n        self.max_seq_length = max_seq_length\n        self.max_batch_size = max_batch_size\n        dtype = self.norm.project_layer.weight.dtype\n        device = self.norm.project_layer.weight.device\n\n        if not self.training and use_kv_cache:\n            for b in self.layers:\n                b.attention.kv_cache = KVCache(max_batch_size, max_seq_length, self.config.n_local_heads, head_dim, dtype).to(device)\n\n        self.freqs_cis = precompute_freqs_cis(self.config.block_size, self.config.head_dim,\n                                              self.config.rope_base, dtype).to(device)\n        self.causal_mask = torch.tril(torch.ones(self.max_seq_length, self.max_seq_length, dtype=torch.bool)).to(device)\n        self.use_kv_cache = use_kv_cache\n        self.uvit_skip_connection = self.config.uvit_skip_connection\n        if self.uvit_skip_connection:\n            self.layers_emit_skip = [i for i in range(self.config.n_layer) if i < self.config.n_layer // 2]\n            self.layers_receive_skip = [i for i in range(self.config.n_layer) if i > self.config.n_layer // 2]\n        else:\n            self.layers_emit_skip = []\n            self.layers_receive_skip = []\n\n    def forward(self,\n                x: Tensor,\n                c: Tensor,\n                input_pos: Optional[Tensor] = None,\n                mask: Optional[Tensor] = None,\n                context: Optional[Tensor] = None,\n                context_input_pos: Optional[Tensor] = None,\n                cross_attention_mask: Optional[Tensor] = None,\n                ) -> Tensor:\n        assert self.freqs_cis is not None, \"Caches must be initialized first\"\n        if mask is None: # in case of non-causal model\n            if not self.training and self.use_kv_cache:\n                mask = self.causal_mask[None, None, input_pos]\n            else:\n                mask = self.causal_mask[None, None, input_pos]\n                mask = mask[..., input_pos]\n        freqs_cis = self.freqs_cis[input_pos]\n        if context is not None:\n            context_freqs_cis = self.freqs_cis[context_input_pos]\n        else:\n            context_freqs_cis = None\n        skip_in_x_list = []\n        for i, layer in enumerate(self.layers):\n            if self.uvit_skip_connection and i in self.layers_receive_skip:\n                skip_in_x = skip_in_x_list.pop(-1)\n            else:\n                skip_in_x = None\n            x = layer(x, c, input_pos, freqs_cis, mask, context, context_freqs_cis, cross_attention_mask, skip_in_x)\n            if self.uvit_skip_connection and i in self.layers_emit_skip:\n                skip_in_x_list.append(x)\n        x = self.norm(x, c)\n        return x\n\n    @classmethod\n    def from_name(cls, name: str):\n        return cls(ModelArgs.from_name(name))\n\n\nclass TransformerBlock(nn.Module):\n    def __init__(self, config: ModelArgs) -> None:\n        super().__init__()\n        self.attention = Attention(config)\n        self.feed_forward = FeedForward(config)\n        self.ffn_norm = AdaptiveLayerNorm(config.dim, RMSNorm(config.dim, eps=config.norm_eps))\n        self.attention_norm = AdaptiveLayerNorm(config.dim, RMSNorm(config.dim, eps=config.norm_eps))\n\n        if config.has_cross_attention:\n            self.has_cross_attention = True\n            self.cross_attention = Attention(config, is_cross_attention=True)\n            self.cross_attention_norm = AdaptiveLayerNorm(config.dim, RMSNorm(config.dim, eps=config.norm_eps))\n        else:\n            self.has_cross_attention = False\n\n        if config.uvit_skip_connection:\n            self.skip_in_linear = nn.Linear(config.dim * 2, config.dim)\n            self.uvit_skip_connection = True\n        else:\n            self.uvit_skip_connection = False\n\n        self.time_as_token = config.time_as_token\n\n    def forward(self,\n                x: Tensor,\n                c: Tensor,\n                input_pos: Tensor,\n                freqs_cis: Tensor,\n                mask: Tensor,\n                context: Optional[Tensor] = None,\n                context_freqs_cis: Optional[Tensor] = None,\n                cross_attention_mask: Optional[Tensor] = None,\n                skip_in_x: Optional[Tensor] = None,\n                ) -> Tensor:\n        c = None if self.time_as_token else c\n        if self.uvit_skip_connection and skip_in_x is not None:\n            x = self.skip_in_linear(torch.cat([x, skip_in_x], dim=-1))\n        h = x + self.attention(self.attention_norm(x, c), freqs_cis, mask, input_pos)\n        if self.has_cross_attention:\n            h = h + self.cross_attention(self.cross_attention_norm(h, c), freqs_cis, cross_attention_mask, input_pos, context, context_freqs_cis)\n        out = h + self.feed_forward(self.ffn_norm(h, c))\n        return out\n\n\nclass Attention(nn.Module):\n    def __init__(self, config: ModelArgs, is_cross_attention: bool = False):\n        super().__init__()\n        assert config.dim % config.n_head == 0\n\n        total_head_dim = (config.n_head + 2 * config.n_local_heads) * config.head_dim\n        # key, query, value projections for all heads, but in a batch\n        if is_cross_attention:\n            self.wq = nn.Linear(config.dim, config.n_head * config.head_dim, bias=False)\n            self.wkv = nn.Linear(config.context_dim, 2 * config.n_local_heads * config.head_dim, bias=False)\n        else:\n            self.wqkv = nn.Linear(config.dim, total_head_dim, bias=False)\n        self.wo = nn.Linear(config.head_dim * config.n_head, config.dim, bias=False)\n        self.kv_cache = None\n\n        self.n_head = config.n_head\n        self.head_dim = config.head_dim\n        self.n_local_heads = config.n_local_heads\n        self.dim = config.dim\n        # self._register_load_state_dict_pre_hook(self.load_hook)\n\n    # def load_hook(self, state_dict, prefix, *args):\n    #     if prefix + \"wq.weight\" in state_dict:\n    #         wq = state_dict.pop(prefix + \"wq.weight\")\n    #         wk = state_dict.pop(prefix + \"wk.weight\")\n    #         wv = state_dict.pop(prefix + \"wv.weight\")\n    #         state_dict[prefix + \"wqkv.weight\"] = torch.cat([wq, wk, wv])\n\n    def forward(self,\n                x: Tensor,\n                freqs_cis: Tensor,\n                mask: Tensor,\n                input_pos: Optional[Tensor] = None,\n                context: Optional[Tensor] = None,\n                context_freqs_cis: Optional[Tensor] = None,\n                ) -> Tensor:\n        bsz, seqlen, _ = x.shape\n\n        kv_size = self.n_local_heads * self.head_dim\n        if context is None:\n            q, k, v = self.wqkv(x).split([kv_size, kv_size, kv_size], dim=-1)\n            context_seqlen = seqlen\n        else:\n            q = self.wq(x)\n            k, v = self.wkv(context).split([kv_size, kv_size], dim=-1)\n            context_seqlen = context.shape[1]\n\n        q = q.view(bsz, seqlen, self.n_head, self.head_dim)\n        k = k.view(bsz, context_seqlen, self.n_local_heads, self.head_dim)\n        v = v.view(bsz, context_seqlen, self.n_local_heads, self.head_dim)\n\n        q = apply_rotary_emb(q, freqs_cis)\n        k = apply_rotary_emb(k, context_freqs_cis if context_freqs_cis is not None else freqs_cis)\n\n        q, k, v = map(lambda x: x.transpose(1, 2), (q, k, v))\n\n        if self.kv_cache is not None:\n            k, v = self.kv_cache.update(input_pos, k, v)\n\n        k = k.repeat_interleave(self.n_head // self.n_local_heads, dim=1)\n        v = v.repeat_interleave(self.n_head // self.n_local_heads, dim=1)\n        y = F.scaled_dot_product_attention(q, k, v, attn_mask=mask, dropout_p=0.0)\n\n        y = y.transpose(1, 2).contiguous().view(bsz, seqlen, self.head_dim * self.n_head)\n\n        y = self.wo(y)\n        return y\n\n\nclass FeedForward(nn.Module):\n    def __init__(self, config: ModelArgs) -> None:\n        super().__init__()\n        self.w1 = nn.Linear(config.dim, config.intermediate_size, bias=False)\n        self.w3 = nn.Linear(config.dim, config.intermediate_size, bias=False)\n        self.w2 = nn.Linear(config.intermediate_size, config.dim, bias=False)\n\n    def forward(self, x: Tensor) -> Tensor:\n        return self.w2(F.silu(self.w1(x)) * self.w3(x))\n\n\nclass RMSNorm(nn.Module):\n    def __init__(self, dim: int, eps: float = 1e-5):\n        super().__init__()\n        self.eps = eps\n        self.weight = nn.Parameter(torch.ones(dim))\n\n    def _norm(self, x):\n        return x * torch.rsqrt(torch.mean(x * x, dim=-1, keepdim=True) + self.eps)\n\n    def forward(self, x: Tensor) -> Tensor:\n        output = self._norm(x.float()).type_as(x)\n        return output * self.weight\n\n\ndef precompute_freqs_cis(\n        seq_len: int, n_elem: int, base: int = 10000,\n        dtype: torch.dtype = torch.bfloat16\n) -> Tensor:\n    freqs = 1.0 / (base ** (torch.arange(0, n_elem, 2)[: (n_elem // 2)].float() / n_elem))\n    t = torch.arange(seq_len, device=freqs.device)\n    freqs = torch.outer(t, freqs)\n    freqs_cis = torch.polar(torch.ones_like(freqs), freqs)\n    cache = torch.stack([freqs_cis.real, freqs_cis.imag], dim=-1)\n    return cache.to(dtype=dtype)\n\n\ndef apply_rotary_emb(x: Tensor, freqs_cis: Tensor) -> Tensor:\n    xshaped = x.float().reshape(*x.shape[:-1], -1, 2)\n    freqs_cis = freqs_cis.view(1, xshaped.size(1), 1, xshaped.size(3), 2)\n    x_out2 = torch.stack(\n        [\n            xshaped[..., 0] * freqs_cis[..., 0] - xshaped[..., 1] * freqs_cis[..., 1],\n            xshaped[..., 1] * freqs_cis[..., 0] + xshaped[..., 0] * freqs_cis[..., 1],\n        ],\n        -1,\n    )\n\n    x_out2 = x_out2.flatten(3)\n    return x_out2.type_as(x)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/gpt_fast/quantize.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\nimport time\nfrom pathlib import Path\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom tokenizer import get_tokenizer\n\ntry:\n    from GPTQ import GenericGPTQRunner, InputRecorder\n    from eval import get_task_dict, evaluate, lm_eval\nexcept Exception:\n    pass\n\nfrom model import Transformer\n\n##### Quantization Primitives ######\n\ndef dynamically_quantize_per_channel(x, quant_min, quant_max, target_dtype):\n    # assumes symmetric quantization\n    # assumes axis == 0\n    # assumes dense memory format\n    # TODO(future): relax ^ as needed\n\n    # default setup for affine quantization of activations\n    eps = torch.finfo(torch.float32).eps\n\n    # get min and max\n    min_val, max_val = torch.aminmax(x, dim=1)\n\n    # calculate scales and zero_points based on min and max\n    # reference: https://fburl.com/code/srbiybme\n    min_val_neg = torch.min(min_val, torch.zeros_like(min_val))\n    max_val_pos = torch.max(max_val, torch.zeros_like(max_val))\n    device = min_val_neg.device\n\n    # reference: https://fburl.com/code/4wll53rk\n    max_val_pos = torch.max(-min_val_neg, max_val_pos)\n    scales = max_val_pos / (float(quant_max - quant_min) / 2)\n    # ensure scales is the same dtype as the original tensor\n    scales = torch.clamp(scales, min=eps).to(x.dtype)\n    zero_points = torch.zeros(min_val_neg.size(), dtype=torch.int64, device=device)\n\n    # quantize based on qmin/qmax/scales/zp\n    # reference: https://www.internalfb.com/code/fbsource/[8edc275012b1]/fbcode/caffe2/torch/ao/quantization/fx/_decomposed.py?lines=63\n    x_div = x / scales.unsqueeze(-1)\n    x_round = torch.round(x_div)\n    x_zp = x_round + zero_points.unsqueeze(-1)\n    quant = torch.clamp(x_zp, quant_min, quant_max).to(target_dtype)\n\n    return quant, scales, zero_points\n\ndef get_group_qparams(w, n_bit=4, groupsize=128):\n    # needed for GPTQ with padding\n    if groupsize > w.shape[-1]:\n        groupsize = w.shape[-1]\n    assert groupsize > 1\n    assert w.shape[-1] % groupsize == 0\n    assert w.dim() == 2\n\n    to_quant = w.reshape(-1, groupsize)\n    assert torch.isnan(to_quant).sum() == 0\n\n    max_val = to_quant.amax(dim=1, keepdim=True)\n    min_val = to_quant.amin(dim=1, keepdim=True)\n    max_int = 2**n_bit - 1\n    scales = (max_val - min_val).clamp(min=1e-6) / max_int\n    zeros = min_val + scales * (2 ** (n_bit - 1))\n    return scales.to(torch.bfloat16).reshape(w.shape[0], -1), zeros.to(\n        torch.bfloat16\n    ).reshape(w.shape[0], -1)\n\n\ndef pack_scales_and_zeros(scales, zeros):\n    assert scales.shape == zeros.shape\n    assert scales.dtype == torch.bfloat16\n    assert zeros.dtype == torch.bfloat16\n    return (\n        torch.cat(\n            [\n                scales.reshape(scales.size(0), scales.size(1), 1),\n                zeros.reshape(zeros.size(0), zeros.size(1), 1),\n            ],\n            2,\n        )\n        .transpose(0, 1)\n        .contiguous()\n    )\n\n\ndef unpack_scales_and_zeros(scales_and_zeros):\n    assert len(scales_and_zeros.shape) == 3 and scales_and_zeros.shape[2] == 2\n    assert scales_and_zeros.dtype == torch.float\n    return torch.split(scales_and_zeros.transpose(0, 1), 1, 2)\n\n\ndef group_quantize_tensor_from_qparams(w, scales, zeros, n_bit=4, groupsize=128):\n    assert groupsize > 1\n    # needed for GPTQ single column quantize\n    if groupsize > w.shape[-1] and scales.shape[-1] == 1:\n        groupsize = w.shape[-1]\n\n    assert w.shape[-1] % groupsize == 0\n    assert w.dim() == 2\n\n    to_quant = w.reshape(-1, groupsize)\n    assert torch.isnan(to_quant).sum() == 0\n\n    scales = scales.reshape(-1, 1)\n    zeros = zeros.reshape(-1, 1)\n    min_val = zeros - scales * (2 ** (n_bit - 1))\n    max_int = 2**n_bit - 1\n    min_int = 0\n    w_int32 = (\n        to_quant.sub(min_val)\n        .div(scales)\n        .round()\n        .clamp_(min_int, max_int)\n        .to(torch.int32)\n        .reshape_as(w)\n    )\n\n    return w_int32\n\n\ndef group_quantize_tensor(w, n_bit=4, groupsize=128):\n    scales, zeros = get_group_qparams(w, n_bit, groupsize)\n    w_int32 = group_quantize_tensor_from_qparams(w, scales, zeros, n_bit, groupsize)\n    scales_and_zeros = pack_scales_and_zeros(scales, zeros)\n    return w_int32, scales_and_zeros\n\n\ndef group_dequantize_tensor_from_qparams(\n    w_int32, scales, zeros, n_bit=4, groupsize=128\n):\n    assert groupsize > 1\n    # needed for GPTQ single column dequantize\n    if groupsize > w_int32.shape[-1] and scales.shape[-1] == 1:\n        groupsize = w_int32.shape[-1]\n    assert w_int32.shape[-1] % groupsize == 0\n    assert w_int32.dim() == 2\n\n    w_int32_grouped = w_int32.reshape(-1, groupsize)\n    scales = scales.reshape(-1, 1)\n    zeros = zeros.reshape(-1, 1)\n\n    w_dq = (\n        w_int32_grouped.sub(2 ** (n_bit - 1)).mul(scales).add(zeros).reshape_as(w_int32)\n    )\n    return w_dq\n\n\ndef group_dequantize_tensor(w_int32, scales_and_zeros, n_bit=4, groupsize=128):\n    scales, zeros = unpack_scales_and_zeros(scales_and_zeros)\n    return group_dequantize_tensor_from_qparams(\n        w_int32, scales, zeros, n_bit, groupsize\n    )\n\nclass QuantHandler:\n    def __init__(self, mod):\n        self.mod = mod\n\n    def create_quantized_state_dict(self) -> \"StateDict\":\n        pass\n\n    def convert_for_runtime(self) -> \"nn.Module\":\n        pass\n\nclass GPTQQuantHandler(QuantHandler):\n    \"\"\"\n    This class implements a GPTQ QuantHandler that can be used to apply GPTQ to a model in concert with the GenericGPTQRunner class.\n    Unlike the base QuantHandler class, the user does not need to implement the create_quantized_state_dict, instead they have to reimplement\n    __init__ such that it defines the functions for the quantization mode. User is expected to reimplement convert_for_runtime.\n\n    The following functions (which must be defined in __init__) are used to define the quantization mode for both GPTQ and\n    create_quantized_state_dict. Here is a description of each function.\n\n    get_qparams_func:\n        A function that calculates the quantization qparams for an input tensor.\n        Args:\n            weight: A 2d weight tensor with non-integer dtype.\n        Returns:\n            qparams: it can have any format but will need to be handled by the other defined functions below.\n\n    quantize_func:\n        A function that applies quantization to an input tensor. It should be noted\n        that this function needs to be able to handle quantizing the entire weight tensor, a single group,\n        or a single column.\n        Args:\n            weight: A 2d weight tensor with non-integer dtype.\n            qparams: the output from get_qparams_func\n        Returns:\n            quantized_weight: A 2d quantized weight tensor (generally with an integer dtype)\n\n\n    dequantize_func:\n        A function that dequantizes an input quantized weight tensor. It should be noted\n        that this function needs to be able to handle dequantizing the entire weight tensor, a single group,\n        or a single column.\n        Args:\n            quantized_weight: A 2d quantized weight tensor (generally with an integer dtype)\n            qparams: the output from get_qparams_func\n        Returns:\n            weight: A 2d weight tensor with non-integer dtype.\n\n    combine_qparams_list_func:\n        A function that combines several qparams into one qparam.\n        Args:\n            qparams_list: a list of qparams objects, each obtained by calling get_qparams_func\n            on a single group from a weight tensor\n        Returns:\n            qparams: an object of the same format as the qparams above.\n\n    skip_layer_func:\n        A function that determines which linear layers should be skipped during GPTQ\n        Args:\n            weight: A 2d weight tensor with non-integer dtype.\n        Returns:\n            skip: boolean indicating whether layer should be skipped\n\n    make_names_and_values_dict_func:\n        A function that prepares the qparams and quantized_weight and creates a dictionary indicating how they\n        should be inserted into the state_dict. Generally any packing of the weight and qparams should be done here.\n        Args:\n            quantized_weight: A 2d quantized weight tensor (generally with an integer dtype)\n            qparams: the output from get_qparams_func\n        Returns:\n            names_and_values_dict: a dictionary mapping the name of the parameters of the quantized module to the\n            corresponding quantized weights and qparams.\n    \"\"\"\n    def __init__(self):\n        assert self.mod is not None\n        assert self.get_qparams_func is not None\n        assert self.quantize_func is not None\n        assert self.dequantize_func is not None\n        assert self.combine_qparams_list_func is not None\n        assert self.make_names_and_values_dict_func is not None\n\n    @staticmethod\n    def get_inputs(model, tokenizer, calibration_tasks, calibration_limit, calibration_seq_length, pad_calibration_inputs) -> \"MultiInput\":\n        input_recorder = InputRecorder(\n            model,\n            tokenizer,\n            calibration_seq_length,\n            pad_calibration_inputs,\n        )\n\n        try:\n            lm_eval.tasks.initialize_tasks()\n        except Exception:\n            pass\n        task_dict = get_task_dict(calibration_tasks)\n        print(\"Obtaining GPTQ calibration inputs on: \", calibration_tasks)\n\n        evaluate(\n            input_recorder,\n            task_dict,\n            limit=calibration_limit,\n        )\n        inputs = input_recorder.get_recorded_inputs()\n        assert inputs is not None, (\n            f\"No inputs were collected, use a task other than {calibration_tasks}, \"+\n            f\"use option pad_calibration_inputs, or decrease calibration_sequence_length (currently \"+\n            f\"{calibration_seq_length})\"\n        )\n        print(f\"Obtained {len(inputs[0].values)} calibration samples\")\n        return inputs\n\n    @torch.no_grad()\n    def create_quantized_state_dict(\n        self,\n        tokenizer,\n        blocksize,\n        percdamp,\n        groupsize,\n        calibration_tasks,\n        calibration_limit,\n        calibration_seq_length,\n        pad_calibration_inputs,\n    ) -> \"StateDict\":\n        inputs = GPTQQuantHandler.get_inputs(self.mod, tokenizer, calibration_tasks, calibration_limit, calibration_seq_length, pad_calibration_inputs)\n        print(\"Tracing model for GPTQ\")\n        GPTQ_runner = GenericGPTQRunner(\n            self.mod,\n            inputs,\n            blocksize,\n            percdamp,\n            groupsize,\n        ).configure_quantization_mode(\n            self.get_qparams_func,\n            self.quantize_func,\n            self.dequantize_func,\n            self.combine_qparams_list_func,\n            self.make_names_and_values_dict_func,\n            self.skip_layer_func\n        )\n\n        print(\"Applying GPTQ to weights\")\n        GPTQ_runner.run()\n        return GPTQ_runner.get_quantized_state_dict()\n\n    def convert_for_runtime(self) -> \"nn.Module\":\n        pass\n\n##### Weight-only int8 per-channel quantized code ######\n\ndef replace_linear_weight_only_int8_per_channel(module):\n    for name, child in module.named_children():\n        if isinstance(child, nn.Linear):\n            setattr(module, name, WeightOnlyInt8Linear(child.in_features, child.out_features))\n        else:\n            replace_linear_weight_only_int8_per_channel(child)\n\nclass WeightOnlyInt8QuantHandler:\n    def __init__(self, mod):\n        self.mod = mod\n\n    @torch.no_grad()\n    def create_quantized_state_dict(self):\n        cur_state_dict = self.mod.state_dict()\n        for fqn, mod in self.mod.named_modules():\n            if isinstance(mod, torch.nn.Linear):\n                int8_weight, scales, _ = dynamically_quantize_per_channel(mod.weight.float(), -128, 127, torch.int8)\n                cur_state_dict[f\"{fqn}.weight\"] = int8_weight\n                cur_state_dict[f\"{fqn}.scales\"] = scales.to(mod.weight.dtype)\n\n        return cur_state_dict\n\n    def convert_for_runtime(self):\n        replace_linear_weight_only_int8_per_channel(self.mod)\n        return self.mod\n\n\nclass WeightOnlyInt8Linear(torch.nn.Module):\n    __constants__ = ['in_features', 'out_features']\n    in_features: int\n    out_features: int\n    weight: torch.Tensor\n\n    def __init__(self, in_features: int, out_features: int, bias: bool = True,\n                 device=None, dtype=None) -> None:\n        factory_kwargs = {'device': device, 'dtype': dtype}\n        super().__init__()\n        self.in_features = in_features\n        self.out_features = out_features\n        self.register_buffer(\"weight\", torch.empty((out_features, in_features), dtype=torch.int8))\n        self.register_buffer(\"scales\", torch.ones(out_features, dtype=torch.bfloat16))\n\n    def forward(self, input: torch.Tensor) -> torch.Tensor:\n        return F.linear(input, self.weight.to(dtype=input.dtype)) * self.scales\n\n##### weight only int4 per channel groupwise quantized code ######\n\ndef prepare_int4_weight_and_scales_and_zeros(weight_bf16, groupsize, inner_k_tiles):\n    weight_int32, scales_and_zeros = group_quantize_tensor(\n        weight_bf16, n_bit=4, groupsize=groupsize\n    )\n    weight_int4pack = torch.ops.aten._convert_weight_to_int4pack(weight_int32, inner_k_tiles)\n    return weight_int4pack, scales_and_zeros\n\n\ndef linear_forward_int4(x, weight_int4pack, scales_and_zeros, out_features, groupsize):\n    origin_x_size = x.size()\n    x = x.reshape(-1, origin_x_size[-1])\n    c = torch.ops.aten._weight_int4pack_mm(x, weight_int4pack, groupsize, scales_and_zeros)\n    new_shape = origin_x_size[:-1] + (out_features,)\n    c = c.reshape(new_shape)\n    return c\n\n\ndef _check_linear_int4_k(k, groupsize = 1, inner_k_tiles = 1):\n    return k % groupsize == 0 and k % (inner_k_tiles * 16) == 0\n\ndef replace_linear_int4(module, groupsize, inner_k_tiles, padding):\n    for name, child in module.named_children():\n        if isinstance(child, nn.Linear):\n            if _check_linear_int4_k(child.in_features, groupsize, inner_k_tiles):\n                setattr(module, name, WeightOnlyInt4Linear(\n                    child.in_features, child.out_features, bias=False,\n                    groupsize=groupsize, inner_k_tiles=inner_k_tiles, padding=False,\n                ))\n            elif padding:\n                setattr(module, name, WeightOnlyInt4Linear(\n                    child.in_features, child.out_features, bias=False,\n                    groupsize=groupsize, inner_k_tiles=inner_k_tiles, padding=True,\n                ))\n        else:\n            replace_linear_int4(child, groupsize, inner_k_tiles, padding)\n\n\nclass WeightOnlyInt4QuantHandler:\n    def __init__(self, mod, groupsize=128, inner_k_tiles=8, padding=True):\n        self.mod = mod\n        self.groupsize = groupsize\n        self.inner_k_tiles = inner_k_tiles\n        self.padding = padding\n        assert groupsize in [32, 64, 128, 256]\n        assert inner_k_tiles in [2, 4, 8]\n\n    @torch.no_grad()\n    def create_quantized_state_dict(self, use_cuda = True):\n        if use_cuda:\n            device=\"cuda\"\n        else:\n            device=\"cpu\"\n\n        cur_state_dict = self.mod.state_dict()\n        for fqn, mod in self.mod.named_modules():\n            if isinstance(mod, torch.nn.Linear):\n                assert not mod.bias\n                out_features = mod.out_features\n                in_features = mod.in_features\n                assert out_features % 8 == 0, \"require out_features % 8 == 0\"\n                print(f\"linear: {fqn}, in={in_features}, out={out_features}\")\n\n                weight = mod.weight.data\n                if not _check_linear_int4_k(in_features, self.groupsize, self.inner_k_tiles):\n                    if self.padding:\n                        from model import find_multiple\n                        import torch.nn.functional as F\n                        print(f\"warning: {fqn} is padded to satisfy in_features % 1024 == 0\")\n                        padded_in_features = find_multiple(in_features, 1024)\n                        weight = F.pad(weight, pad=(0, padded_in_features - in_features))\n                    else:\n                        print(f\"warning: {fqn} is skipped, int4 requires that in_features is 32, 64, or is divisible by 1024, \" +\n                            \"and that groupsize and inner_k_tiles*16 evenly divide into it\")\n                        continue\n                weight_int4pack, scales_and_zeros = prepare_int4_weight_and_scales_and_zeros(\n                    weight.to(torch.bfloat16).to(device=device), self.groupsize, self.inner_k_tiles\n                )\n                cur_state_dict[f\"{fqn}.weight\"] = weight_int4pack.to('cpu')\n                cur_state_dict[f\"{fqn}.scales_and_zeros\"] = scales_and_zeros.to('cpu')\n\n        return cur_state_dict\n\n    def convert_for_runtime(self):\n        replace_linear_int4(self.mod, self.groupsize, self.inner_k_tiles, self.padding)\n        return self.mod\n\nclass WeightOnlyInt4GPTQQuantHandler(GPTQQuantHandler):\n    def __init__(self, mod, groupsize=128, inner_k_tiles=8, padding=True):\n        from model import find_multiple\n        self.mod = mod\n        self.groupsize = groupsize\n        self.inner_k_tiles = inner_k_tiles\n        self.padding = padding\n        self.get_qparams_func = lambda w: get_group_qparams(w, 4, groupsize)\n        self.quantize_func = lambda w, qparams: \\\n            group_quantize_tensor_from_qparams(w, qparams[0], qparams[1], 4, groupsize)\n        self.dequantize_func = lambda q, qparams: \\\n            group_dequantize_tensor_from_qparams(q, qparams[0], qparams[1], 4, groupsize).float()\n        self.combine_qparams_list_func = lambda qparams_list: \\\n            [torch.cat(x, dim=1) for x in zip(*qparams_list)]\n        # skip unless padding=True or its correctly sized\n        self.skip_layer_func = lambda linear_weight: not (\n            _check_linear_int4_k(linear_weight.shape[-1], groupsize, inner_k_tiles) or padding\n        )\n        # we need to do the padding here, both for q and the qparams if necessary\n        def make_names_and_values_dict_func(q, qparams):\n            k = q.shape[1]\n            new_k = find_multiple(k, 1024)\n            # how much we need to pad the weight\n            delta_k = new_k - q.shape[1]\n            final_q = torch.ops.aten._convert_weight_to_int4pack(F.pad(q, pad=(0, delta_k)), inner_k_tiles)\n            scales_and_zeros = pack_scales_and_zeros(*qparams)\n            # how many new groups we need for padded weight\n            delta_groups = new_k // groupsize - scales_and_zeros.shape[0]\n            final_s_and_z = F.pad(scales_and_zeros, pad=(0,0,0,0,0, delta_groups), value=1)\n            return {\"weight\": final_q, \"scales_and_zeros\": final_s_and_z}\n        self.make_names_and_values_dict_func = make_names_and_values_dict_func\n        super().__init__()\n\n\n    def convert_for_runtime(self):\n        replace_linear_int4(self.mod, self.groupsize, self.inner_k_tiles, self.padding)\n        return self.mod\n\nclass WeightOnlyInt4Linear(torch.nn.Module):\n    __constants__ = ['in_features', 'out_features']\n    in_features: int\n    out_features: int\n    weight: torch.Tensor\n\n    def __init__(\n            self, in_features: int, out_features: int,\n            bias=True, device=None, dtype=None, groupsize: int = 128, inner_k_tiles: int = 8, padding: bool = True,\n    ) -> None:\n        super().__init__()\n        self.padding = padding\n        if padding:\n            from model import find_multiple\n            self.origin_in_features = in_features\n            in_features = find_multiple(in_features, 1024)\n\n        self.in_features = in_features\n        self.out_features = out_features\n        assert not bias, \"require bias=False\"\n        self.groupsize = groupsize\n        self.inner_k_tiles = inner_k_tiles\n\n        assert out_features % 8 == 0, \"require out_features % 8 == 0\"\n        assert in_features % (inner_k_tiles * 16) == 0, \"require in_features % (innerKTiles * 16) == 0\"\n        self.register_buffer(\n            \"weight\",\n            torch.empty((out_features // 8, in_features // (inner_k_tiles * 16), 32, inner_k_tiles // 2), dtype=torch.int32)\n        )\n        self.register_buffer(\n            \"scales_and_zeros\",\n            torch.empty((in_features // groupsize, out_features, 2), dtype=torch.bfloat16)\n        )\n\n    def forward(self, input: torch.Tensor) -> torch.Tensor:\n        input = input.to(torch.bfloat16)\n        if self.padding:\n            import torch.nn.functional as F\n            input = F.pad(input, pad=(0, self.in_features - self.origin_in_features))\n        return linear_forward_int4(\n            input,\n            self.weight, self.scales_and_zeros, self.out_features, self.groupsize\n        )\n\n\ndef quantize(\n    checkpoint_path: Path = Path(\"checkpoints/meta-llama/Llama-2-7b-chat-hf/model.pth\"),\n    mode: str = 'int8',\n    # following arguments only available when setting int4 quantization.\n    groupsize: int = 128,\n    # following arguments only used for GPTQ\n    calibration_tasks: list = [\"hellaswag\"],\n    calibration_limit: int = 1000,\n    calibration_seq_length: int = 100,\n    pad_calibration_inputs: bool = False,\n    percdamp: float = .01,\n    blocksize: int = 128,\n    label: str = '',\n) -> None:\n    assert checkpoint_path.is_file(), checkpoint_path\n\n    device = 'cpu'\n    precision = torch.bfloat16\n\n    print(\"Loading model ...\")\n    t0 = time.time()\n\n    with torch.device('meta'):\n        model = Transformer.from_name(checkpoint_path.parent.name)\n\n    checkpoint = torch.load(str(checkpoint_path), mmap=True, weights_only=True)\n    model.load_state_dict(checkpoint, assign=True)\n    model = model.to(dtype=precision, device=device)\n\n    if mode == 'int8':\n        print(\"Quantizing model weights for int8 weight-only symmetric per-channel quantization\")\n        quant_handler = WeightOnlyInt8QuantHandler(model)\n        quantized_state_dict = quant_handler.create_quantized_state_dict()\n\n        dir_name = checkpoint_path.parent\n        base_name = checkpoint_path.name\n        new_base_name = base_name.replace('.pth', f'{label}int8.pth')\n\n    elif mode == 'int4':\n        print(\"Quantizing model weights for int4 weight-only affine per-channel groupwise quantization\")\n        quant_handler = WeightOnlyInt4QuantHandler(model, groupsize)\n        quantized_state_dict = quant_handler.create_quantized_state_dict()\n\n        dir_name = checkpoint_path.parent\n        base_name = checkpoint_path.name\n        new_base_name = base_name.replace('.pth', f\"{label}int4.g{groupsize}.pth\")\n\n    elif mode == 'int4-gptq':\n        print(\"Quantizing model weights for int4 weight-only affine per-channel groupwise quantization using GPTQ...\")\n        quant_handler = WeightOnlyInt4GPTQQuantHandler(model, groupsize)\n\n        tokenizer_path = checkpoint_path.parent / \"tokenizer.model\"\n        assert tokenizer_path.is_file(), str(tokenizer_path)\n        tokenizer = get_tokenizer(tokenizer_path, checkpoint_path)\n\n        quantized_state_dict = quant_handler.create_quantized_state_dict(\n            tokenizer,\n            blocksize,\n            percdamp,\n            groupsize,\n            calibration_tasks,\n            calibration_limit,\n            calibration_seq_length,\n            pad_calibration_inputs\n        )\n\n        dir_name = checkpoint_path.parent\n        base_name = checkpoint_path.name\n        new_base_name = base_name.replace('.pth', f\"{label}int4-gptq.g{groupsize}.pth\")\n    else:\n        raise ValueError(f\"Invalid quantization mode {mode} needs to be one of [int8, int4, int4-gpptq]\")\n\n    quantize_path = dir_name / new_base_name\n    print(f\"Writing quantized weights to {quantize_path}\")\n    quantize_path.unlink(missing_ok=True) # remove existing file if one already there\n    torch.save(quantized_state_dict, quantize_path)\n    print(f\"Quantization complete took {time.time() - t0:.02f} seconds\")\n    return\n\nif __name__ == '__main__':\n    import argparse\n    parser = argparse.ArgumentParser(description='Quantize a model.')\n    parser.add_argument('--checkpoint_path', type=Path, default=Path(\"checkpoints/meta-llama/Llama-2-7b-chat-hf/model.pth\"), help='Path to the model checkpoint to be quantized.')\n    parser.add_argument('--mode', '-q', type=str, default='int8', choices=['int8', 'int4', 'int4-gptq'], help='type of quantization to perform')\n    parser.add_argument('--groupsize', type=int, default=32, help='Group size for int4 quantization.')\n    parser.add_argument('--calibration_tasks', type=str, nargs='+', default=['wikitext'], help='tasks to do gptq calibration on, if doing gptq')\n    parser.add_argument('--calibration_limit', type=int, default=1000, help='number of samples to use for gptq calibration')\n    parser.add_argument('--calibration_seq_length', type=int, default=100, help='length of sequences to use for gptq calibration')\n    parser.add_argument('--pad_calibration_inputs', type=bool, default=False, help='pads sequences shorter than calibration_seq_length to that length, yielding more calibration inputs but running much slower')\n    parser.add_argument('--percdamp', type=float, default=.01, help='gptq percentage dampening')\n    parser.add_argument('--blocksize', type=int, default=128, help='blocksize for gptq')\n    parser.add_argument('--label', type=str, default='_', help='label to add to output filename')\n\n    args = parser.parse_args()\n    quantize(args.checkpoint_path, args.mode, args.groupsize, args.calibration_tasks, args.calibration_limit, args.calibration_seq_length, args.pad_calibration_inputs, args.percdamp, args.blocksize, args.label)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/hifigan/f0_predictor.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Kai Hu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport torch\nimport torch.nn as nn\nfrom torch.nn.utils import weight_norm\n\n\nclass ConvRNNF0Predictor(nn.Module):\n    def __init__(self,\n                 num_class: int = 1,\n                 in_channels: int = 80,\n                 cond_channels: int = 512\n                 ):\n        super().__init__()\n\n        self.num_class = num_class\n        self.condnet = nn.Sequential(\n            weight_norm(\n                nn.Conv1d(in_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n        )\n        self.classifier = nn.Linear(in_features=cond_channels, out_features=self.num_class)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.condnet(x)\n        x = x.transpose(1, 2)\n        return torch.abs(self.classifier(x).squeeze(-1))\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/hifigan/generator.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Kai Hu)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"HIFI-GAN\"\"\"\n\nimport typing as tp\nimport numpy as np\nfrom scipy.signal import get_window\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.nn import Conv1d\nfrom torch.nn import ConvTranspose1d\nfrom torch.nn.utils import remove_weight_norm\nfrom torch.nn.utils import weight_norm\nfrom torch.distributions.uniform import Uniform\n\nfrom torch import sin\nfrom torch.nn.parameter import Parameter\n\n\n\"\"\"hifigan based generator implementation.\n\nThis code is modified from https://github.com/jik876/hifi-gan\n ,https://github.com/kan-bayashi/ParallelWaveGAN and\n https://github.com/NVIDIA/BigVGAN\n\n\"\"\"\nclass Snake(nn.Module):\n    '''\n    Implementation of a sine-based periodic activation function\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter\n    References:\n        - This activation function is from this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snake(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    '''\n    def __init__(self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False):\n        '''\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha: trainable parameter\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            alpha will be trained along with the rest of your model.\n        '''\n        super(Snake, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale:  # log scale alphas initialized to zeros\n            self.alpha = Parameter(torch.zeros(in_features) * alpha)\n        else:  # linear scale alphas initialized to ones\n            self.alpha = Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        '''\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        Snake ∶= x + 1/a * sin^2 (xa)\n        '''\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1)  # line up with x to [B, C, T]\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n        x = x + (1.0 / (alpha + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\n\nclass ResBlock(torch.nn.Module):\n    \"\"\"Residual block module in HiFiGAN/BigVGAN.\"\"\"\n    def __init__(\n        self,\n        channels: int = 512,\n        kernel_size: int = 3,\n        dilations: tp.List[int] = [1, 3, 5],\n    ):\n        super(ResBlock, self).__init__()\n        self.convs1 = nn.ModuleList()\n        self.convs2 = nn.ModuleList()\n\n        for dilation in dilations:\n            self.convs1.append(\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation,\n                        padding=get_padding(kernel_size, dilation)\n                    )\n                )\n            )\n            self.convs2.append(\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1)\n                    )\n                )\n            )\n        self.convs1.apply(init_weights)\n        self.convs2.apply(init_weights)\n        self.activations1 = nn.ModuleList([\n            Snake(channels, alpha_logscale=False)\n            for _ in range(len(self.convs1))\n        ])\n        self.activations2 = nn.ModuleList([\n            Snake(channels, alpha_logscale=False)\n            for _ in range(len(self.convs2))\n        ])\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        for idx in range(len(self.convs1)):\n            xt = self.activations1[idx](x)\n            xt = self.convs1[idx](xt)\n            xt = self.activations2[idx](xt)\n            xt = self.convs2[idx](xt)\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for idx in range(len(self.convs1)):\n            remove_weight_norm(self.convs1[idx])\n            remove_weight_norm(self.convs2[idx])\n\nclass SineGen(torch.nn.Module):\n    \"\"\" Definition of sine generator\n    SineGen(samp_rate, harmonic_num = 0,\n            sine_amp = 0.1, noise_std = 0.003,\n            voiced_threshold = 0,\n            flag_for_pulse=False)\n    samp_rate: sampling rate in Hz\n    harmonic_num: number of harmonic overtones (default 0)\n    sine_amp: amplitude of sine-wavefrom (default 0.1)\n    noise_std: std of Gaussian noise (default 0.003)\n    voiced_thoreshold: F0 threshold for U/V classification (default 0)\n    flag_for_pulse: this SinGen is used inside PulseGen (default False)\n    Note: when flag_for_pulse is True, the first time step of a voiced\n        segment is always sin(np.pi) or cos(0)\n    \"\"\"\n\n    def __init__(self, samp_rate, harmonic_num=0,\n                 sine_amp=0.1, noise_std=0.003,\n                 voiced_threshold=0):\n        super(SineGen, self).__init__()\n        self.sine_amp = sine_amp\n        self.noise_std = noise_std\n        self.harmonic_num = harmonic_num\n        self.sampling_rate = samp_rate\n        self.voiced_threshold = voiced_threshold\n\n    def _f02uv(self, f0):\n        # generate uv signal\n        uv = (f0 > self.voiced_threshold).type(torch.float32)\n        return uv\n\n    @torch.no_grad()\n    def forward(self, f0):\n        \"\"\"\n        :param f0: [B, 1, sample_len], Hz\n        :return: [B, 1, sample_len]\n        \"\"\"\n\n        F_mat = torch.zeros((f0.size(0), self.harmonic_num + 1, f0.size(-1))).to(f0.device)\n        for i in range(self.harmonic_num + 1):\n            F_mat[:, i: i + 1, :] = f0 * (i + 1) / self.sampling_rate\n\n        theta_mat = 2 * np.pi * (torch.cumsum(F_mat, dim=-1) % 1)\n        u_dist = Uniform(low=-np.pi, high=np.pi)\n        phase_vec = u_dist.sample(sample_shape=(f0.size(0), self.harmonic_num + 1, 1)).to(F_mat.device)\n        phase_vec[:, 0, :] = 0\n\n        # generate sine waveforms\n        sine_waves = self.sine_amp * torch.sin(theta_mat + phase_vec)\n\n        # generate uv signal\n        uv = self._f02uv(f0)\n\n        # noise: for unvoiced should be similar to sine_amp\n        #        std = self.sine_amp/3 -> max value ~ self.sine_amp\n        # .       for voiced regions is self.noise_std\n        noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3\n        noise = noise_amp * torch.randn_like(sine_waves)\n\n        # first: set the unvoiced part to 0 by uv\n        # then: additive noise\n        sine_waves = sine_waves * uv + noise\n        return sine_waves, uv, noise\n\n\nclass SourceModuleHnNSF(torch.nn.Module):\n    \"\"\" SourceModule for hn-nsf\n    SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1,\n                 add_noise_std=0.003, voiced_threshod=0)\n    sampling_rate: sampling_rate in Hz\n    harmonic_num: number of harmonic above F0 (default: 0)\n    sine_amp: amplitude of sine source signal (default: 0.1)\n    add_noise_std: std of additive Gaussian noise (default: 0.003)\n        note that amplitude of noise in unvoiced is decided\n        by sine_amp\n    voiced_threshold: threhold to set U/V given F0 (default: 0)\n    Sine_source, noise_source = SourceModuleHnNSF(F0_sampled)\n    F0_sampled (batchsize, length, 1)\n    Sine_source (batchsize, length, 1)\n    noise_source (batchsize, length 1)\n    uv (batchsize, length, 1)\n    \"\"\"\n\n    def __init__(self, sampling_rate, upsample_scale, harmonic_num=0, sine_amp=0.1,\n                 add_noise_std=0.003, voiced_threshod=0):\n        super(SourceModuleHnNSF, self).__init__()\n\n        self.sine_amp = sine_amp\n        self.noise_std = add_noise_std\n\n        # to produce sine waveforms\n        self.l_sin_gen = SineGen(sampling_rate, harmonic_num,\n                                 sine_amp, add_noise_std, voiced_threshod)\n\n        # to merge source harmonics into a single excitation\n        self.l_linear = torch.nn.Linear(harmonic_num + 1, 1)\n        self.l_tanh = torch.nn.Tanh()\n\n    def forward(self, x):\n        \"\"\"\n        Sine_source, noise_source = SourceModuleHnNSF(F0_sampled)\n        F0_sampled (batchsize, length, 1)\n        Sine_source (batchsize, length, 1)\n        noise_source (batchsize, length 1)\n        \"\"\"\n        # source for harmonic branch\n        with torch.no_grad():\n            sine_wavs, uv, _ = self.l_sin_gen(x.transpose(1, 2))\n            sine_wavs = sine_wavs.transpose(1, 2)\n            uv = uv.transpose(1, 2)\n        sine_merge = self.l_tanh(self.l_linear(sine_wavs))\n\n        # source for noise branch, in the same shape as uv\n        noise = torch.randn_like(uv) * self.sine_amp / 3\n        return sine_merge, noise, uv\n\n\nclass HiFTGenerator(nn.Module):\n    \"\"\"\n    HiFTNet Generator: Neural Source Filter + ISTFTNet\n    https://arxiv.org/abs/2309.09493\n    \"\"\"\n    def __init__(\n            self,\n            in_channels: int = 80,\n            base_channels: int = 512,\n            nb_harmonics: int = 8,\n            sampling_rate: int = 22050,\n            nsf_alpha: float = 0.1,\n            nsf_sigma: float = 0.003,\n            nsf_voiced_threshold: float = 10,\n            upsample_rates: tp.List[int] = [8, 8],\n            upsample_kernel_sizes: tp.List[int] = [16, 16],\n            istft_params: tp.Dict[str, int] = {\"n_fft\": 16, \"hop_len\": 4},\n            resblock_kernel_sizes: tp.List[int] = [3, 7, 11],\n            resblock_dilation_sizes: tp.List[tp.List[int]] = [[1, 3, 5], [1, 3, 5], [1, 3, 5]],\n            source_resblock_kernel_sizes: tp.List[int] = [7, 11],\n            source_resblock_dilation_sizes: tp.List[tp.List[int]] = [[1, 3, 5], [1, 3, 5]],\n            lrelu_slope: float = 0.1,\n            audio_limit: float = 0.99,\n            f0_predictor: torch.nn.Module = None,\n    ):\n        super(HiFTGenerator, self).__init__()\n\n        self.out_channels = 1\n        self.nb_harmonics = nb_harmonics\n        self.sampling_rate = sampling_rate\n        self.istft_params = istft_params\n        self.lrelu_slope = lrelu_slope\n        self.audio_limit = audio_limit\n\n        self.num_kernels = len(resblock_kernel_sizes)\n        self.num_upsamples = len(upsample_rates)\n        self.m_source = SourceModuleHnNSF(\n            sampling_rate=sampling_rate,\n            upsample_scale=np.prod(upsample_rates) * istft_params[\"hop_len\"],\n            harmonic_num=nb_harmonics,\n            sine_amp=nsf_alpha,\n            add_noise_std=nsf_sigma,\n            voiced_threshod=nsf_voiced_threshold)\n        self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(upsample_rates) * istft_params[\"hop_len\"])\n\n        self.conv_pre = weight_norm(\n            Conv1d(in_channels, base_channels, 7, 1, padding=3)\n        )\n\n        # Up\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):\n            self.ups.append(\n                weight_norm(\n                    ConvTranspose1d(\n                        base_channels // (2**i),\n                        base_channels // (2**(i + 1)),\n                        k,\n                        u,\n                        padding=(k - u) // 2,\n                    )\n                )\n            )\n\n        # Down\n        self.source_downs = nn.ModuleList()\n        self.source_resblocks = nn.ModuleList()\n        downsample_rates = [1] + upsample_rates[::-1][:-1]\n        downsample_cum_rates = np.cumprod(downsample_rates)\n        for i, (u, k, d) in enumerate(zip(downsample_cum_rates[::-1], source_resblock_kernel_sizes,\n                                          source_resblock_dilation_sizes)):\n            if u == 1:\n                self.source_downs.append(\n                    Conv1d(istft_params[\"n_fft\"] + 2, base_channels // (2 ** (i + 1)), 1, 1)\n                )\n            else:\n                self.source_downs.append(\n                    Conv1d(istft_params[\"n_fft\"] + 2, base_channels // (2 ** (i + 1)), u * 2, u, padding=(u // 2))\n                )\n\n            self.source_resblocks.append(\n                ResBlock(base_channels // (2 ** (i + 1)), k, d)\n            )\n\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = base_channels // (2**(i + 1))\n            for j, (k, d) in enumerate(zip(resblock_kernel_sizes, resblock_dilation_sizes)):\n                self.resblocks.append(ResBlock(ch, k, d))\n\n        self.conv_post = weight_norm(Conv1d(ch, istft_params[\"n_fft\"] + 2, 7, 1, padding=3))\n        self.ups.apply(init_weights)\n        self.conv_post.apply(init_weights)\n        self.reflection_pad = nn.ReflectionPad1d((1, 0))\n        self.stft_window = torch.from_numpy(get_window(\"hann\", istft_params[\"n_fft\"], fftbins=True).astype(np.float32))\n        self.f0_predictor = f0_predictor\n\n    def _f02source(self, f0: torch.Tensor) -> torch.Tensor:\n        f0 = self.f0_upsamp(f0[:, None]).transpose(1, 2)  # bs,n,t\n\n        har_source, _, _ = self.m_source(f0)\n        return har_source.transpose(1, 2)\n\n    def _stft(self, x):\n        spec = torch.stft(\n            x,\n            self.istft_params[\"n_fft\"], self.istft_params[\"hop_len\"], self.istft_params[\"n_fft\"], window=self.stft_window.to(x.device),\n            return_complex=True)\n        spec = torch.view_as_real(spec)  # [B, F, TT, 2]\n        return spec[..., 0], spec[..., 1]\n\n    def _istft(self, magnitude, phase):\n        magnitude = torch.clip(magnitude, max=1e2)\n        real = magnitude * torch.cos(phase)\n        img = magnitude * torch.sin(phase)\n        inverse_transform = torch.istft(torch.complex(real, img), self.istft_params[\"n_fft\"], self.istft_params[\"hop_len\"], self.istft_params[\"n_fft\"], window=self.stft_window.to(magnitude.device))\n        return inverse_transform\n\n    def forward(self, x: torch.Tensor, f0=None) -> torch.Tensor:\n        if f0 is None:\n            f0 = self.f0_predictor(x)\n        s = self._f02source(f0)\n\n        s_stft_real, s_stft_imag = self._stft(s.squeeze(1))\n        s_stft = torch.cat([s_stft_real, s_stft_imag], dim=1)\n\n        x = self.conv_pre(x)\n        for i in range(self.num_upsamples):\n            x = F.leaky_relu(x, self.lrelu_slope)\n            x = self.ups[i](x)\n\n            if i == self.num_upsamples - 1:\n                x = self.reflection_pad(x)\n\n            # fusion\n            si = self.source_downs[i](s_stft)\n            si = self.source_resblocks[i](si)\n            x = x + si\n\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n\n        x = F.leaky_relu(x)\n        x = self.conv_post(x)\n        magnitude = torch.exp(x[:, :self.istft_params[\"n_fft\"] // 2 + 1, :])\n        phase = torch.sin(x[:, self.istft_params[\"n_fft\"] // 2 + 1:, :])  # actually, sin is redundancy\n\n        x = self._istft(magnitude, phase)\n        x = torch.clamp(x, -self.audio_limit, self.audio_limit)\n        return x\n\n    def remove_weight_norm(self):\n        print('Removing weight norm...')\n        for l in self.ups:\n            remove_weight_norm(l)\n        for l in self.resblocks:\n            l.remove_weight_norm()\n        remove_weight_norm(self.conv_pre)\n        remove_weight_norm(self.conv_post)\n        self.source_module.remove_weight_norm()\n        for l in self.source_downs:\n            remove_weight_norm(l)\n        for l in self.source_resblocks:\n            l.remove_weight_norm()\n\n    @torch.inference_mode()\n    def inference(self, mel: torch.Tensor, f0=None) -> torch.Tensor:\n        return self.forward(x=mel, f0=f0)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/layers.py",
    "content": "import math\nimport torch\nfrom torch import nn\nfrom typing import Optional, Any\nfrom torch import Tensor\nimport torch.nn.functional as F\nimport torchaudio\nimport torchaudio.functional as audio_F\n\nimport random\nrandom.seed(0)\n\n\ndef _get_activation_fn(activ):\n    if activ == 'relu':\n        return nn.ReLU()\n    elif activ == 'lrelu':\n        return nn.LeakyReLU(0.2)\n    elif activ == 'swish':\n        return lambda x: x*torch.sigmoid(x)\n    else:\n        raise RuntimeError('Unexpected activ type %s, expected [relu, lrelu, swish]' % activ)\n\nclass LinearNorm(torch.nn.Module):\n    def __init__(self, in_dim, out_dim, bias=True, w_init_gain='linear'):\n        super(LinearNorm, self).__init__()\n        self.linear_layer = torch.nn.Linear(in_dim, out_dim, bias=bias)\n\n        torch.nn.init.xavier_uniform_(\n            self.linear_layer.weight,\n            gain=torch.nn.init.calculate_gain(w_init_gain))\n\n    def forward(self, x):\n        return self.linear_layer(x)\n\n\nclass ConvNorm(torch.nn.Module):\n    def __init__(self, in_channels, out_channels, kernel_size=1, stride=1,\n                 padding=None, dilation=1, bias=True, w_init_gain='linear', param=None):\n        super(ConvNorm, self).__init__()\n        if padding is None:\n            assert(kernel_size % 2 == 1)\n            padding = int(dilation * (kernel_size - 1) / 2)\n\n        self.conv = torch.nn.Conv1d(in_channels, out_channels,\n                                    kernel_size=kernel_size, stride=stride,\n                                    padding=padding, dilation=dilation,\n                                    bias=bias)\n\n        torch.nn.init.xavier_uniform_(\n            self.conv.weight, gain=torch.nn.init.calculate_gain(w_init_gain, param=param))\n\n    def forward(self, signal):\n        conv_signal = self.conv(signal)\n        return conv_signal\n\nclass CausualConv(nn.Module):\n    def __init__(self, in_channels, out_channels, kernel_size=1, stride=1, padding=1, dilation=1, bias=True, w_init_gain='linear', param=None):\n        super(CausualConv, self).__init__()\n        if padding is None:\n            assert(kernel_size % 2 == 1)\n            padding = int(dilation * (kernel_size - 1) / 2) * 2\n        else:\n            self.padding = padding * 2\n        self.conv = nn.Conv1d(in_channels, out_channels,\n                              kernel_size=kernel_size, stride=stride,\n                              padding=self.padding,\n                              dilation=dilation,\n                              bias=bias)\n\n        torch.nn.init.xavier_uniform_(\n            self.conv.weight, gain=torch.nn.init.calculate_gain(w_init_gain, param=param))\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = x[:, :, :-self.padding]\n        return x\n\nclass CausualBlock(nn.Module):\n    def __init__(self, hidden_dim, n_conv=3, dropout_p=0.2, activ='lrelu'):\n        super(CausualBlock, self).__init__()\n        self.blocks = nn.ModuleList([\n            self._get_conv(hidden_dim, dilation=3**i, activ=activ, dropout_p=dropout_p)\n            for i in range(n_conv)])\n\n    def forward(self, x):\n        for block in self.blocks:\n            res = x\n            x = block(x)\n            x += res\n        return x\n\n    def _get_conv(self, hidden_dim, dilation, activ='lrelu', dropout_p=0.2):\n        layers = [\n            CausualConv(hidden_dim, hidden_dim, kernel_size=3, padding=dilation, dilation=dilation),\n            _get_activation_fn(activ),\n            nn.BatchNorm1d(hidden_dim),\n            nn.Dropout(p=dropout_p),\n            CausualConv(hidden_dim, hidden_dim, kernel_size=3, padding=1, dilation=1),\n            _get_activation_fn(activ),\n            nn.Dropout(p=dropout_p)\n        ]\n        return nn.Sequential(*layers)\n\nclass ConvBlock(nn.Module):\n    def __init__(self, hidden_dim, n_conv=3, dropout_p=0.2, activ='relu'):\n        super().__init__()\n        self._n_groups = 8\n        self.blocks = nn.ModuleList([\n            self._get_conv(hidden_dim, dilation=3**i, activ=activ, dropout_p=dropout_p)\n            for i in range(n_conv)])\n\n\n    def forward(self, x):\n        for block in self.blocks:\n            res = x\n            x = block(x)\n            x += res\n        return x\n\n    def _get_conv(self, hidden_dim, dilation, activ='relu', dropout_p=0.2):\n        layers = [\n            ConvNorm(hidden_dim, hidden_dim, kernel_size=3, padding=dilation, dilation=dilation),\n            _get_activation_fn(activ),\n            nn.GroupNorm(num_groups=self._n_groups, num_channels=hidden_dim),\n            nn.Dropout(p=dropout_p),\n            ConvNorm(hidden_dim, hidden_dim, kernel_size=3, padding=1, dilation=1),\n            _get_activation_fn(activ),\n            nn.Dropout(p=dropout_p)\n        ]\n        return nn.Sequential(*layers)\n\nclass LocationLayer(nn.Module):\n    def __init__(self, attention_n_filters, attention_kernel_size,\n                 attention_dim):\n        super(LocationLayer, self).__init__()\n        padding = int((attention_kernel_size - 1) / 2)\n        self.location_conv = ConvNorm(2, attention_n_filters,\n                                      kernel_size=attention_kernel_size,\n                                      padding=padding, bias=False, stride=1,\n                                      dilation=1)\n        self.location_dense = LinearNorm(attention_n_filters, attention_dim,\n                                         bias=False, w_init_gain='tanh')\n\n    def forward(self, attention_weights_cat):\n        processed_attention = self.location_conv(attention_weights_cat)\n        processed_attention = processed_attention.transpose(1, 2)\n        processed_attention = self.location_dense(processed_attention)\n        return processed_attention\n\n\nclass Attention(nn.Module):\n    def __init__(self, attention_rnn_dim, embedding_dim, attention_dim,\n                 attention_location_n_filters, attention_location_kernel_size):\n        super(Attention, self).__init__()\n        self.query_layer = LinearNorm(attention_rnn_dim, attention_dim,\n                                      bias=False, w_init_gain='tanh')\n        self.memory_layer = LinearNorm(embedding_dim, attention_dim, bias=False,\n                                       w_init_gain='tanh')\n        self.v = LinearNorm(attention_dim, 1, bias=False)\n        self.location_layer = LocationLayer(attention_location_n_filters,\n                                            attention_location_kernel_size,\n                                            attention_dim)\n        self.score_mask_value = -float(\"inf\")\n\n    def get_alignment_energies(self, query, processed_memory,\n                               attention_weights_cat):\n        \"\"\"\n        PARAMS\n        ------\n        query: decoder output (batch, n_mel_channels * n_frames_per_step)\n        processed_memory: processed encoder outputs (B, T_in, attention_dim)\n        attention_weights_cat: cumulative and prev. att weights (B, 2, max_time)\n        RETURNS\n        -------\n        alignment (batch, max_time)\n        \"\"\"\n\n        processed_query = self.query_layer(query.unsqueeze(1))\n        processed_attention_weights = self.location_layer(attention_weights_cat)\n        energies = self.v(torch.tanh(\n            processed_query + processed_attention_weights + processed_memory))\n\n        energies = energies.squeeze(-1)\n        return energies\n\n    def forward(self, attention_hidden_state, memory, processed_memory,\n                attention_weights_cat, mask):\n        \"\"\"\n        PARAMS\n        ------\n        attention_hidden_state: attention rnn last output\n        memory: encoder outputs\n        processed_memory: processed encoder outputs\n        attention_weights_cat: previous and cummulative attention weights\n        mask: binary mask for padded data\n        \"\"\"\n        alignment = self.get_alignment_energies(\n            attention_hidden_state, processed_memory, attention_weights_cat)\n\n        if mask is not None:\n            alignment.data.masked_fill_(mask, self.score_mask_value)\n\n        attention_weights = F.softmax(alignment, dim=1)\n        attention_context = torch.bmm(attention_weights.unsqueeze(1), memory)\n        attention_context = attention_context.squeeze(1)\n\n        return attention_context, attention_weights\n\n\nclass ForwardAttentionV2(nn.Module):\n    def __init__(self, attention_rnn_dim, embedding_dim, attention_dim,\n                 attention_location_n_filters, attention_location_kernel_size):\n        super(ForwardAttentionV2, self).__init__()\n        self.query_layer = LinearNorm(attention_rnn_dim, attention_dim,\n                                      bias=False, w_init_gain='tanh')\n        self.memory_layer = LinearNorm(embedding_dim, attention_dim, bias=False,\n                                       w_init_gain='tanh')\n        self.v = LinearNorm(attention_dim, 1, bias=False)\n        self.location_layer = LocationLayer(attention_location_n_filters,\n                                            attention_location_kernel_size,\n                                            attention_dim)\n        self.score_mask_value = -float(1e20)\n\n    def get_alignment_energies(self, query, processed_memory,\n                               attention_weights_cat):\n        \"\"\"\n        PARAMS\n        ------\n        query: decoder output (batch, n_mel_channels * n_frames_per_step)\n        processed_memory: processed encoder outputs (B, T_in, attention_dim)\n        attention_weights_cat:  prev. and cumulative att weights (B, 2, max_time)\n        RETURNS\n        -------\n        alignment (batch, max_time)\n        \"\"\"\n\n        processed_query = self.query_layer(query.unsqueeze(1))\n        processed_attention_weights = self.location_layer(attention_weights_cat)\n        energies = self.v(torch.tanh(\n            processed_query + processed_attention_weights + processed_memory))\n\n        energies = energies.squeeze(-1)\n        return energies\n\n    def forward(self, attention_hidden_state, memory, processed_memory,\n                attention_weights_cat, mask, log_alpha):\n        \"\"\"\n        PARAMS\n        ------\n        attention_hidden_state: attention rnn last output\n        memory: encoder outputs\n        processed_memory: processed encoder outputs\n        attention_weights_cat: previous and cummulative attention weights\n        mask: binary mask for padded data\n        \"\"\"\n        log_energy = self.get_alignment_energies(\n            attention_hidden_state, processed_memory, attention_weights_cat)\n\n        #log_energy =\n\n        if mask is not None:\n            log_energy.data.masked_fill_(mask, self.score_mask_value)\n\n        #attention_weights = F.softmax(alignment, dim=1)\n\n        #content_score = log_energy.unsqueeze(1) #[B, MAX_TIME] -> [B, 1, MAX_TIME]\n        #log_alpha = log_alpha.unsqueeze(2) #[B, MAX_TIME] -> [B, MAX_TIME, 1]\n\n        #log_total_score = log_alpha + content_score\n\n        #previous_attention_weights = attention_weights_cat[:,0,:]\n\n        log_alpha_shift_padded = []\n        max_time = log_energy.size(1)\n        for sft in range(2):\n            shifted = log_alpha[:,:max_time-sft]\n            shift_padded = F.pad(shifted, (sft,0), 'constant', self.score_mask_value)\n            log_alpha_shift_padded.append(shift_padded.unsqueeze(2))\n\n        biased = torch.logsumexp(torch.cat(log_alpha_shift_padded,2), 2)\n\n        log_alpha_new = biased +  log_energy\n\n        attention_weights =  F.softmax(log_alpha_new, dim=1)\n\n        attention_context = torch.bmm(attention_weights.unsqueeze(1), memory)\n        attention_context = attention_context.squeeze(1)\n\n        return attention_context, attention_weights, log_alpha_new\n\n\nclass PhaseShuffle2d(nn.Module):\n    def __init__(self, n=2):\n        super(PhaseShuffle2d, self).__init__()\n        self.n = n\n        self.random = random.Random(1)\n\n    def forward(self, x, move=None):\n        # x.size = (B, C, M, L)\n        if move is None:\n            move = self.random.randint(-self.n, self.n)\n\n        if move == 0:\n            return x\n        else:\n            left = x[:, :, :, :move]\n            right = x[:, :, :, move:]\n            shuffled = torch.cat([right, left], dim=3)\n        return shuffled\n\nclass PhaseShuffle1d(nn.Module):\n    def __init__(self, n=2):\n        super(PhaseShuffle1d, self).__init__()\n        self.n = n\n        self.random = random.Random(1)\n\n    def forward(self, x, move=None):\n        # x.size = (B, C, M, L)\n        if move is None:\n            move = self.random.randint(-self.n, self.n)\n\n        if move == 0:\n            return x\n        else:\n            left = x[:, :,  :move]\n            right = x[:, :, move:]\n            shuffled = torch.cat([right, left], dim=2)\n\n        return shuffled\n\nclass MFCC(nn.Module):\n    def __init__(self, n_mfcc=40, n_mels=80):\n        super(MFCC, self).__init__()\n        self.n_mfcc = n_mfcc\n        self.n_mels = n_mels\n        self.norm = 'ortho'\n        dct_mat = audio_F.create_dct(self.n_mfcc, self.n_mels, self.norm)\n        self.register_buffer('dct_mat', dct_mat)\n\n    def forward(self, mel_specgram):\n        if len(mel_specgram.shape) == 2:\n            mel_specgram = mel_specgram.unsqueeze(0)\n            unsqueezed = True\n        else:\n            unsqueezed = False\n        # (channel, n_mels, time).tranpose(...) dot (n_mels, n_mfcc)\n        # -> (channel, time, n_mfcc).tranpose(...)\n        mfcc = torch.matmul(mel_specgram.transpose(1, 2), self.dct_mat).transpose(1, 2)\n\n        # unpack batch\n        if unsqueezed:\n            mfcc = mfcc.squeeze(0)\n        return mfcc\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/length_regulator.py",
    "content": "from typing import Tuple\nimport torch\nimport torch.nn as nn\nfrom torch.nn import functional as F\nfrom indextts.s2mel.modules.commons import sequence_mask\nimport numpy as np\nfrom indextts.s2mel.dac.nn.quantize import VectorQuantize\n\n# f0_bin = 256\nf0_max = 1100.0\nf0_min = 50.0\nf0_mel_min = 1127 * np.log(1 + f0_min / 700)\nf0_mel_max = 1127 * np.log(1 + f0_max / 700)\n\ndef f0_to_coarse(f0, f0_bin):\n  f0_mel = 1127 * (1 + f0 / 700).log()\n  a = (f0_bin - 2) / (f0_mel_max - f0_mel_min)\n  b = f0_mel_min * a - 1.\n  f0_mel = torch.where(f0_mel > 0, f0_mel * a - b, f0_mel)\n  # torch.clip_(f0_mel, min=1., max=float(f0_bin - 1))\n  f0_coarse = torch.round(f0_mel).long()\n  f0_coarse = f0_coarse * (f0_coarse > 0)\n  f0_coarse = f0_coarse + ((f0_coarse < 1) * 1)\n  f0_coarse = f0_coarse * (f0_coarse < f0_bin)\n  f0_coarse = f0_coarse + ((f0_coarse >= f0_bin) * (f0_bin - 1))\n  return f0_coarse\n\nclass InterpolateRegulator(nn.Module):\n    def __init__(\n            self,\n            channels: int,\n            sampling_ratios: Tuple,\n            is_discrete: bool = False,\n            in_channels: int = None,  # only applies to continuous input\n            vector_quantize: bool = False,  # whether to use vector quantization, only applies to continuous input\n            codebook_size: int = 1024, # for discrete only\n            out_channels: int = None,\n            groups: int = 1,\n            n_codebooks: int = 1,  # number of codebooks\n            quantizer_dropout: float = 0.0,  # dropout for quantizer\n            f0_condition: bool = False,\n            n_f0_bins: int = 512,\n    ):\n        super().__init__()\n        self.sampling_ratios = sampling_ratios\n        out_channels = out_channels or channels\n        model = nn.ModuleList([])\n        if len(sampling_ratios) > 0:\n            self.interpolate = True\n            for _ in sampling_ratios:\n                module = nn.Conv1d(channels, channels, 3, 1, 1)\n                norm = nn.GroupNorm(groups, channels)\n                act = nn.Mish()\n                model.extend([module, norm, act])\n        else:\n            self.interpolate = False\n        model.append(\n            nn.Conv1d(channels, out_channels, 1, 1)\n        )\n        self.model = nn.Sequential(*model)\n        self.embedding = nn.Embedding(codebook_size, channels)\n        self.is_discrete = is_discrete\n\n        self.mask_token = nn.Parameter(torch.zeros(1, channels))\n\n        self.n_codebooks = n_codebooks\n        if n_codebooks > 1:\n            self.extra_codebooks = nn.ModuleList([\n                nn.Embedding(codebook_size, channels) for _ in range(n_codebooks - 1)\n            ])\n            self.extra_codebook_mask_tokens = nn.ParameterList([\n                nn.Parameter(torch.zeros(1, channels)) for _ in range(n_codebooks - 1)\n            ])\n        self.quantizer_dropout = quantizer_dropout\n\n        if f0_condition:\n            self.f0_embedding = nn.Embedding(n_f0_bins, channels)\n            self.f0_condition = f0_condition\n            self.n_f0_bins = n_f0_bins\n            self.f0_bins = torch.arange(2, 1024, 1024 // n_f0_bins)\n            self.f0_mask = nn.Parameter(torch.zeros(1, channels))\n        else:\n            self.f0_condition = False\n\n        if not is_discrete:\n            self.content_in_proj = nn.Linear(in_channels, channels)\n            if vector_quantize:\n                self.vq = VectorQuantize(channels, codebook_size, 8)\n\n    def forward(self, x, ylens=None, n_quantizers=None, f0=None):\n        # apply token drop\n        if self.training:\n            n_quantizers = torch.ones((x.shape[0],)) * self.n_codebooks\n            dropout = torch.randint(1, self.n_codebooks + 1, (x.shape[0],))\n            n_dropout = int(x.shape[0] * self.quantizer_dropout)\n            n_quantizers[:n_dropout] = dropout[:n_dropout]\n            n_quantizers = n_quantizers.to(x.device)\n            # decide whether to drop for each sample in batch\n        else:\n            n_quantizers = torch.ones((x.shape[0],), device=x.device) * (self.n_codebooks if n_quantizers is None else n_quantizers)\n        if self.is_discrete:\n            if self.n_codebooks > 1:\n                assert len(x.size()) == 3\n                x_emb = self.embedding(x[:, 0])\n                for i, emb in enumerate(self.extra_codebooks):\n                    x_emb = x_emb + (n_quantizers > i+1)[..., None, None] * emb(x[:, i+1])\n                    # add mask token if not using this codebook\n                    # x_emb = x_emb + (n_quantizers <= i+1)[..., None, None] * self.extra_codebook_mask_tokens[i]\n                x = x_emb\n            elif self.n_codebooks == 1:\n                if len(x.size()) == 2:\n                    x = self.embedding(x)\n                else:\n                    x = self.embedding(x[:, 0])\n        else:\n            x = self.content_in_proj(x)\n        # x in (B, T, D)\n        mask = sequence_mask(ylens).unsqueeze(-1)\n        if self.interpolate:\n            x = F.interpolate(x.transpose(1, 2).contiguous(), size=ylens.max(), mode='nearest')\n        else:\n            x = x.transpose(1, 2).contiguous()\n            mask = mask[:, :x.size(2), :]\n            ylens = ylens.clamp(max=x.size(2)).long()\n        if self.f0_condition:\n            if f0 is None:\n                x = x + self.f0_mask.unsqueeze(-1)\n            else:\n                #quantized_f0 = torch.bucketize(f0, self.f0_bins.to(f0.device))  # (N, T)\n                quantized_f0 = f0_to_coarse(f0, self.n_f0_bins)\n                quantized_f0 = quantized_f0.clamp(0, self.n_f0_bins - 1).long()\n                f0_emb = self.f0_embedding(quantized_f0)\n                f0_emb = F.interpolate(f0_emb.transpose(1, 2).contiguous(), size=ylens.max(), mode='nearest')\n                x = x + f0_emb\n        out = self.model(x).transpose(1, 2).contiguous()\n        if hasattr(self, 'vq'):\n            out_q, commitment_loss, codebook_loss, codes, out,  = self.vq(out.transpose(1, 2))\n            out_q = out_q.transpose(1, 2)\n            return out_q * mask, ylens, codes, commitment_loss, codebook_loss\n        olens = ylens\n        return out * mask, olens, None, None, None\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/api.py",
    "content": "import torch\nimport numpy as np\nimport re\nimport soundfile\nfrom . import utils\nfrom . import commons\nimport os\nimport librosa\n# from openvoice.text import text_to_sequence\nfrom .mel_processing import spectrogram_torch\nfrom .models import SynthesizerTrn\n\n\nclass OpenVoiceBaseClass(object):\n    def __init__(self, \n                config_path, \n                device='cuda:0'):\n        if 'cuda' in device:\n            assert torch.cuda.is_available()\n\n        hps = utils.get_hparams_from_file(config_path)\n\n        model = SynthesizerTrn(\n            len(getattr(hps, 'symbols', [])),\n            hps.data.filter_length // 2 + 1,\n            n_speakers=hps.data.n_speakers,\n            **hps.model,\n        ).to(device)\n\n        model.eval()\n        self.model = model\n        self.hps = hps\n        self.device = device\n\n    def load_ckpt(self, ckpt_path):\n        checkpoint_dict = torch.load(ckpt_path, map_location=torch.device(self.device))\n        a, b = self.model.load_state_dict(checkpoint_dict['model'], strict=False)\n        print(\"Loaded checkpoint '{}'\".format(ckpt_path))\n        print('missing/unexpected keys:', a, b)\n\n\nclass BaseSpeakerTTS(OpenVoiceBaseClass):\n    language_marks = {\n        \"english\": \"EN\",\n        \"chinese\": \"ZH\",\n    }\n\n    @staticmethod\n    def get_text(text, hps, is_symbol):\n        text_norm = text_to_sequence(text, hps.symbols, [] if is_symbol else hps.data.text_cleaners)\n        if hps.data.add_blank:\n            text_norm = commons.intersperse(text_norm, 0)\n        text_norm = torch.LongTensor(text_norm)\n        return text_norm\n\n    @staticmethod\n    def audio_numpy_concat(segment_data_list, sr, speed=1.):\n        audio_segments = []\n        for segment_data in segment_data_list:\n            audio_segments += segment_data.reshape(-1).tolist()\n            audio_segments += [0] * int((sr * 0.05)/speed)\n        audio_segments = np.array(audio_segments).astype(np.float32)\n        return audio_segments\n\n    @staticmethod\n    def split_segments_into_pieces(text, language_str):\n        texts = utils.split_segment(text, language_str=language_str)\n        print(\" > Text split into segments.\")\n        print('\\n'.join(texts))\n        print(\" > ===========================\")\n        return texts\n\n    def tts(self, text, output_path, speaker, language='English', speed=1.0):\n        mark = self.language_marks.get(language.lower(), None)\n        assert mark is not None, f\"language {language} is not supported\"\n\n        texts = self.split_segments_into_pieces(text, mark)\n\n        audio_list = []\n        for t in texts:\n            t = re.sub(r'([a-z])([A-Z])', r'\\1 \\2', t)\n            t = f'[{mark}]{t}[{mark}]'\n            stn_tst = self.get_text(t, self.hps, False)\n            device = self.device\n            speaker_id = self.hps.speakers[speaker]\n            with torch.no_grad():\n                x_tst = stn_tst.unsqueeze(0).to(device)\n                x_tst_lengths = torch.LongTensor([stn_tst.size(0)]).to(device)\n                sid = torch.LongTensor([speaker_id]).to(device)\n                audio = self.model.infer(x_tst, x_tst_lengths, sid=sid, noise_scale=0.667, noise_scale_w=0.6,\n                                    length_scale=1.0 / speed)[0][0, 0].data.cpu().float().numpy()\n            audio_list.append(audio)\n        audio = self.audio_numpy_concat(audio_list, sr=self.hps.data.sampling_rate, speed=speed)\n\n        if output_path is None:\n            return audio\n        else:\n            soundfile.write(output_path, audio, self.hps.data.sampling_rate)\n\n\nclass ToneColorConverter(OpenVoiceBaseClass):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        # if kwargs.get('enable_watermark', True):\n        #     import wavmark\n        #     self.watermark_model = wavmark.load_model().to(self.device)\n        # else:\n        #     self.watermark_model = None\n        self.version = getattr(self.hps, '_version_', \"v1\")\n\n\n\n    def extract_se(self, waves, wave_lengths):\n        \n        device = self.device\n        hps = self.hps\n        gs = []\n        \n        for wav_tensor, wav_len in zip(waves, wave_lengths):\n            y = wav_tensor[:wav_len]\n            y = y[None, :]\n            y = spectrogram_torch(y, hps.data.filter_length,\n                                        hps.data.sampling_rate, hps.data.hop_length, hps.data.win_length,\n                                        center=False).to(device)\n            with torch.no_grad():\n                g = self.model.ref_enc(y.transpose(1, 2)).unsqueeze(-1)\n                gs.append(g.detach())\n        gs = torch.stack(gs)\n        gs = gs.squeeze(1).squeeze(-1)\n        return gs\n\n    def convert(self, src_waves, src_wave_lengths, src_se, tgt_se, tau=0.3, message=\"default\"):\n        hps = self.hps\n        # load audio\n        with torch.no_grad():\n            y = src_waves\n            spec = spectrogram_torch(y, hps.data.filter_length,\n                                    hps.data.sampling_rate, hps.data.hop_length, hps.data.win_length,\n                                    center=False).to(self.device)\n            spec_lengths = src_wave_lengths // hps.data.hop_length\n            spec_lengths = spec_lengths.clamp(min=1, max=spec.size(2))\n            audio = self.model.voice_conversion(spec, spec_lengths, sid_src=src_se.unsqueeze(-1), sid_tgt=tgt_se.unsqueeze(-1), tau=tau)[0]\n        return audio\n    \n    def add_watermark(self, audio, message):\n        # if self.watermark_model is None:\n        return audio\n        device = self.device\n        bits = utils.string_to_bits(message).reshape(-1)\n        n_repeat = len(bits) // 32\n\n        K = 16000\n        coeff = 2\n        for n in range(n_repeat):\n            trunck = audio[(coeff * n) * K: (coeff * n + 1) * K]\n            if len(trunck) != K:\n                print('Audio too short, fail to add watermark')\n                break\n            message_npy = bits[n * 32: (n + 1) * 32]\n            \n            with torch.no_grad():\n                signal = torch.FloatTensor(trunck).to(device)[None]\n                message_tensor = torch.FloatTensor(message_npy).to(device)[None]\n                signal_wmd_tensor = self.watermark_model.encode(signal, message_tensor)\n                signal_wmd_npy = signal_wmd_tensor.detach().cpu().squeeze()\n            audio[(coeff * n) * K: (coeff * n + 1) * K] = signal_wmd_npy\n        return audio\n\n    def detect_watermark(self, audio, n_repeat):\n        bits = []\n        K = 16000\n        coeff = 2\n        for n in range(n_repeat):\n            trunck = audio[(coeff * n) * K: (coeff * n + 1) * K]\n            if len(trunck) != K:\n                print('Audio too short, fail to detect watermark')\n                return 'Fail'\n            with torch.no_grad():\n                signal = torch.FloatTensor(trunck).to(self.device).unsqueeze(0)\n                message_decoded_npy = (self.watermark_model.decode(signal) >= 0.5).int().detach().cpu().numpy().squeeze()\n            bits.append(message_decoded_npy)\n        bits = np.stack(bits).reshape(-1, 8)\n        message = utils.bits_to_string(bits)\n        return message\n    \n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/attentions.py",
    "content": "import math\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom . import commons\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\nclass LayerNorm(nn.Module):\n    def __init__(self, channels, eps=1e-5):\n        super().__init__()\n        self.channels = channels\n        self.eps = eps\n\n        self.gamma = nn.Parameter(torch.ones(channels))\n        self.beta = nn.Parameter(torch.zeros(channels))\n\n    def forward(self, x):\n        x = x.transpose(1, -1)\n        x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps)\n        return x.transpose(1, -1)\n\n\n@torch.jit.script\ndef fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):\n    n_channels_int = n_channels[0]\n    in_act = input_a + input_b\n    t_act = torch.tanh(in_act[:, :n_channels_int, :])\n    s_act = torch.sigmoid(in_act[:, n_channels_int:, :])\n    acts = t_act * s_act\n    return acts\n\n\nclass Encoder(nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size=1,\n        p_dropout=0.0,\n        window_size=4,\n        isflow=True,\n        **kwargs\n    ):\n        super().__init__()\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.window_size = window_size\n        # if isflow:\n        #  cond_layer = torch.nn.Conv1d(256, 2*hidden_channels*n_layers, 1)\n        #  self.cond_pre = torch.nn.Conv1d(hidden_channels, 2*hidden_channels, 1)\n        #  self.cond_layer = weight_norm(cond_layer, name='weight')\n        #  self.gin_channels = 256\n        self.cond_layer_idx = self.n_layers\n        if \"gin_channels\" in kwargs:\n            self.gin_channels = kwargs[\"gin_channels\"]\n            if self.gin_channels != 0:\n                self.spk_emb_linear = nn.Linear(self.gin_channels, self.hidden_channels)\n                # vits2 says 3rd block, so idx is 2 by default\n                self.cond_layer_idx = (\n                    kwargs[\"cond_layer_idx\"] if \"cond_layer_idx\" in kwargs else 2\n                )\n                # logging.debug(self.gin_channels, self.cond_layer_idx)\n                assert (\n                    self.cond_layer_idx < self.n_layers\n                ), \"cond_layer_idx should be less than n_layers\"\n        self.drop = nn.Dropout(p_dropout)\n        self.attn_layers = nn.ModuleList()\n        self.norm_layers_1 = nn.ModuleList()\n        self.ffn_layers = nn.ModuleList()\n        self.norm_layers_2 = nn.ModuleList()\n\n        for i in range(self.n_layers):\n            self.attn_layers.append(\n                MultiHeadAttention(\n                    hidden_channels,\n                    hidden_channels,\n                    n_heads,\n                    p_dropout=p_dropout,\n                    window_size=window_size,\n                )\n            )\n            self.norm_layers_1.append(LayerNorm(hidden_channels))\n            self.ffn_layers.append(\n                FFN(\n                    hidden_channels,\n                    hidden_channels,\n                    filter_channels,\n                    kernel_size,\n                    p_dropout=p_dropout,\n                )\n            )\n            self.norm_layers_2.append(LayerNorm(hidden_channels))\n\n    def forward(self, x, x_mask, g=None):\n        attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1)\n        x = x * x_mask\n        for i in range(self.n_layers):\n            if i == self.cond_layer_idx and g is not None:\n                g = self.spk_emb_linear(g.transpose(1, 2))\n                g = g.transpose(1, 2)\n                x = x + g\n                x = x * x_mask\n            y = self.attn_layers[i](x, x, attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_1[i](x + y)\n\n            y = self.ffn_layers[i](x, x_mask)\n            y = self.drop(y)\n            x = self.norm_layers_2[i](x + y)\n        x = x * x_mask\n        return x\n\n\nclass Decoder(nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size=1,\n        p_dropout=0.0,\n        proximal_bias=False,\n        proximal_init=True,\n        **kwargs\n    ):\n        super().__init__()\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.proximal_bias = proximal_bias\n        self.proximal_init = proximal_init\n\n        self.drop = nn.Dropout(p_dropout)\n        self.self_attn_layers = nn.ModuleList()\n        self.norm_layers_0 = nn.ModuleList()\n        self.encdec_attn_layers = nn.ModuleList()\n        self.norm_layers_1 = nn.ModuleList()\n        self.ffn_layers = nn.ModuleList()\n        self.norm_layers_2 = nn.ModuleList()\n        for i in range(self.n_layers):\n            self.self_attn_layers.append(\n                MultiHeadAttention(\n                    hidden_channels,\n                    hidden_channels,\n                    n_heads,\n                    p_dropout=p_dropout,\n                    proximal_bias=proximal_bias,\n                    proximal_init=proximal_init,\n                )\n            )\n            self.norm_layers_0.append(LayerNorm(hidden_channels))\n            self.encdec_attn_layers.append(\n                MultiHeadAttention(\n                    hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout\n                )\n            )\n            self.norm_layers_1.append(LayerNorm(hidden_channels))\n            self.ffn_layers.append(\n                FFN(\n                    hidden_channels,\n                    hidden_channels,\n                    filter_channels,\n                    kernel_size,\n                    p_dropout=p_dropout,\n                    causal=True,\n                )\n            )\n            self.norm_layers_2.append(LayerNorm(hidden_channels))\n\n    def forward(self, x, x_mask, h, h_mask):\n        \"\"\"\n        x: decoder input\n        h: encoder output\n        \"\"\"\n        self_attn_mask = commons.subsequent_mask(x_mask.size(2)).to(\n            device=x.device, dtype=x.dtype\n        )\n        encdec_attn_mask = h_mask.unsqueeze(2) * x_mask.unsqueeze(-1)\n        x = x * x_mask\n        for i in range(self.n_layers):\n            y = self.self_attn_layers[i](x, x, self_attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_0[i](x + y)\n\n            y = self.encdec_attn_layers[i](x, h, encdec_attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_1[i](x + y)\n\n            y = self.ffn_layers[i](x, x_mask)\n            y = self.drop(y)\n            x = self.norm_layers_2[i](x + y)\n        x = x * x_mask\n        return x\n\n\nclass MultiHeadAttention(nn.Module):\n    def __init__(\n        self,\n        channels,\n        out_channels,\n        n_heads,\n        p_dropout=0.0,\n        window_size=None,\n        heads_share=True,\n        block_length=None,\n        proximal_bias=False,\n        proximal_init=False,\n    ):\n        super().__init__()\n        assert channels % n_heads == 0\n\n        self.channels = channels\n        self.out_channels = out_channels\n        self.n_heads = n_heads\n        self.p_dropout = p_dropout\n        self.window_size = window_size\n        self.heads_share = heads_share\n        self.block_length = block_length\n        self.proximal_bias = proximal_bias\n        self.proximal_init = proximal_init\n        self.attn = None\n\n        self.k_channels = channels // n_heads\n        self.conv_q = nn.Conv1d(channels, channels, 1)\n        self.conv_k = nn.Conv1d(channels, channels, 1)\n        self.conv_v = nn.Conv1d(channels, channels, 1)\n        self.conv_o = nn.Conv1d(channels, out_channels, 1)\n        self.drop = nn.Dropout(p_dropout)\n\n        if window_size is not None:\n            n_heads_rel = 1 if heads_share else n_heads\n            rel_stddev = self.k_channels**-0.5\n            self.emb_rel_k = nn.Parameter(\n                torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels)\n                * rel_stddev\n            )\n            self.emb_rel_v = nn.Parameter(\n                torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels)\n                * rel_stddev\n            )\n\n        nn.init.xavier_uniform_(self.conv_q.weight)\n        nn.init.xavier_uniform_(self.conv_k.weight)\n        nn.init.xavier_uniform_(self.conv_v.weight)\n        if proximal_init:\n            with torch.no_grad():\n                self.conv_k.weight.copy_(self.conv_q.weight)\n                self.conv_k.bias.copy_(self.conv_q.bias)\n\n    def forward(self, x, c, attn_mask=None):\n        q = self.conv_q(x)\n        k = self.conv_k(c)\n        v = self.conv_v(c)\n\n        x, self.attn = self.attention(q, k, v, mask=attn_mask)\n\n        x = self.conv_o(x)\n        return x\n\n    def attention(self, query, key, value, mask=None):\n        # reshape [b, d, t] -> [b, n_h, t, d_k]\n        b, d, t_s, t_t = (*key.size(), query.size(2))\n        query = query.view(b, self.n_heads, self.k_channels, t_t).transpose(2, 3)\n        key = key.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)\n        value = value.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)\n\n        scores = torch.matmul(query / math.sqrt(self.k_channels), key.transpose(-2, -1))\n        if self.window_size is not None:\n            assert (\n                t_s == t_t\n            ), \"Relative attention is only available for self-attention.\"\n            key_relative_embeddings = self._get_relative_embeddings(self.emb_rel_k, t_s)\n            rel_logits = self._matmul_with_relative_keys(\n                query / math.sqrt(self.k_channels), key_relative_embeddings\n            )\n            scores_local = self._relative_position_to_absolute_position(rel_logits)\n            scores = scores + scores_local\n        if self.proximal_bias:\n            assert t_s == t_t, \"Proximal bias is only available for self-attention.\"\n            scores = scores + self._attention_bias_proximal(t_s).to(\n                device=scores.device, dtype=scores.dtype\n            )\n        if mask is not None:\n            scores = scores.masked_fill(mask == 0, -1e4)\n            if self.block_length is not None:\n                assert (\n                    t_s == t_t\n                ), \"Local attention is only available for self-attention.\"\n                block_mask = (\n                    torch.ones_like(scores)\n                    .triu(-self.block_length)\n                    .tril(self.block_length)\n                )\n                scores = scores.masked_fill(block_mask == 0, -1e4)\n        p_attn = F.softmax(scores, dim=-1)  # [b, n_h, t_t, t_s]\n        p_attn = self.drop(p_attn)\n        output = torch.matmul(p_attn, value)\n        if self.window_size is not None:\n            relative_weights = self._absolute_position_to_relative_position(p_attn)\n            value_relative_embeddings = self._get_relative_embeddings(\n                self.emb_rel_v, t_s\n            )\n            output = output + self._matmul_with_relative_values(\n                relative_weights, value_relative_embeddings\n            )\n        output = (\n            output.transpose(2, 3).contiguous().view(b, d, t_t)\n        )  # [b, n_h, t_t, d_k] -> [b, d, t_t]\n        return output, p_attn\n\n    def _matmul_with_relative_values(self, x, y):\n        \"\"\"\n        x: [b, h, l, m]\n        y: [h or 1, m, d]\n        ret: [b, h, l, d]\n        \"\"\"\n        ret = torch.matmul(x, y.unsqueeze(0))\n        return ret\n\n    def _matmul_with_relative_keys(self, x, y):\n        \"\"\"\n        x: [b, h, l, d]\n        y: [h or 1, m, d]\n        ret: [b, h, l, m]\n        \"\"\"\n        ret = torch.matmul(x, y.unsqueeze(0).transpose(-2, -1))\n        return ret\n\n    def _get_relative_embeddings(self, relative_embeddings, length):\n        2 * self.window_size + 1\n        # Pad first before slice to avoid using cond ops.\n        pad_length = max(length - (self.window_size + 1), 0)\n        slice_start_position = max((self.window_size + 1) - length, 0)\n        slice_end_position = slice_start_position + 2 * length - 1\n        if pad_length > 0:\n            padded_relative_embeddings = F.pad(\n                relative_embeddings,\n                commons.convert_pad_shape([[0, 0], [pad_length, pad_length], [0, 0]]),\n            )\n        else:\n            padded_relative_embeddings = relative_embeddings\n        used_relative_embeddings = padded_relative_embeddings[\n            :, slice_start_position:slice_end_position\n        ]\n        return used_relative_embeddings\n\n    def _relative_position_to_absolute_position(self, x):\n        \"\"\"\n        x: [b, h, l, 2*l-1]\n        ret: [b, h, l, l]\n        \"\"\"\n        batch, heads, length, _ = x.size()\n        # Concat columns of pad to shift from relative to absolute indexing.\n        x = F.pad(x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, 1]]))\n\n        # Concat extra elements so to add up to shape (len+1, 2*len-1).\n        x_flat = x.view([batch, heads, length * 2 * length])\n        x_flat = F.pad(\n            x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [0, length - 1]])\n        )\n\n        # Reshape and slice out the padded elements.\n        x_final = x_flat.view([batch, heads, length + 1, 2 * length - 1])[\n            :, :, :length, length - 1 :\n        ]\n        return x_final\n\n    def _absolute_position_to_relative_position(self, x):\n        \"\"\"\n        x: [b, h, l, l]\n        ret: [b, h, l, 2*l-1]\n        \"\"\"\n        batch, heads, length, _ = x.size()\n        # pad along column\n        x = F.pad(\n            x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, length - 1]])\n        )\n        x_flat = x.view([batch, heads, length**2 + length * (length - 1)])\n        # add 0's in the beginning that will skew the elements after reshape\n        x_flat = F.pad(x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [length, 0]]))\n        x_final = x_flat.view([batch, heads, length, 2 * length])[:, :, :, 1:]\n        return x_final\n\n    def _attention_bias_proximal(self, length):\n        \"\"\"Bias for self-attention to encourage attention to close positions.\n        Args:\n          length: an integer scalar.\n        Returns:\n          a Tensor with shape [1, 1, length, length]\n        \"\"\"\n        r = torch.arange(length, dtype=torch.float32)\n        diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1)\n        return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0)\n\n\nclass FFN(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        filter_channels,\n        kernel_size,\n        p_dropout=0.0,\n        activation=None,\n        causal=False,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.activation = activation\n        self.causal = causal\n\n        if causal:\n            self.padding = self._causal_padding\n        else:\n            self.padding = self._same_padding\n\n        self.conv_1 = nn.Conv1d(in_channels, filter_channels, kernel_size)\n        self.conv_2 = nn.Conv1d(filter_channels, out_channels, kernel_size)\n        self.drop = nn.Dropout(p_dropout)\n\n    def forward(self, x, x_mask):\n        x = self.conv_1(self.padding(x * x_mask))\n        if self.activation == \"gelu\":\n            x = x * torch.sigmoid(1.702 * x)\n        else:\n            x = torch.relu(x)\n        x = self.drop(x)\n        x = self.conv_2(self.padding(x * x_mask))\n        return x * x_mask\n\n    def _causal_padding(self, x):\n        if self.kernel_size == 1:\n            return x\n        pad_l = self.kernel_size - 1\n        pad_r = 0\n        padding = [[0, 0], [0, 0], [pad_l, pad_r]]\n        x = F.pad(x, commons.convert_pad_shape(padding))\n        return x\n\n    def _same_padding(self, x):\n        if self.kernel_size == 1:\n            return x\n        pad_l = (self.kernel_size - 1) // 2\n        pad_r = self.kernel_size // 2\n        padding = [[0, 0], [0, 0], [pad_l, pad_r]]\n        x = F.pad(x, commons.convert_pad_shape(padding))\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/checkpoints_v2/converter/config.json",
    "content": "{\n  \"_version_\": \"v2\",\n  \"data\": {\n    \"sampling_rate\": 22050,\n    \"filter_length\": 1024,\n    \"hop_length\": 256,\n    \"win_length\": 1024,\n    \"n_speakers\": 0\n  },\n  \"model\": {\n    \"zero_g\": true,\n    \"inter_channels\": 192,\n    \"hidden_channels\": 192,\n    \"filter_channels\": 768,\n    \"n_heads\": 2,\n    \"n_layers\": 6,\n    \"kernel_size\": 3,\n    \"p_dropout\": 0.1,\n    \"resblock\": \"1\",\n    \"resblock_kernel_sizes\": [\n      3,\n      7,\n      11\n    ],\n    \"resblock_dilation_sizes\": [\n      [\n        1,\n        3,\n        5\n      ],\n      [\n        1,\n        3,\n        5\n      ],\n      [\n        1,\n        3,\n        5\n      ]\n    ],\n    \"upsample_rates\": [\n      8,\n      8,\n      2,\n      2\n    ],\n    \"upsample_initial_channel\": 512,\n    \"upsample_kernel_sizes\": [\n      16,\n      16,\n      4,\n      4\n    ],\n    \"gin_channels\": 256\n  }\n}"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/commons.py",
    "content": "import math\nimport torch\nfrom torch.nn import functional as F\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef convert_pad_shape(pad_shape):\n    layer = pad_shape[::-1]\n    pad_shape = [item for sublist in layer for item in sublist]\n    return pad_shape\n\n\ndef intersperse(lst, item):\n    result = [item] * (len(lst) * 2 + 1)\n    result[1::2] = lst\n    return result\n\n\ndef kl_divergence(m_p, logs_p, m_q, logs_q):\n    \"\"\"KL(P||Q)\"\"\"\n    kl = (logs_q - logs_p) - 0.5\n    kl += (\n        0.5 * (torch.exp(2.0 * logs_p) + ((m_p - m_q) ** 2)) * torch.exp(-2.0 * logs_q)\n    )\n    return kl\n\n\ndef rand_gumbel(shape):\n    \"\"\"Sample from the Gumbel distribution, protect from overflows.\"\"\"\n    uniform_samples = torch.rand(shape) * 0.99998 + 0.00001\n    return -torch.log(-torch.log(uniform_samples))\n\n\ndef rand_gumbel_like(x):\n    g = rand_gumbel(x.size()).to(dtype=x.dtype, device=x.device)\n    return g\n\n\ndef slice_segments(x, ids_str, segment_size=4):\n    ret = torch.zeros_like(x[:, :, :segment_size])\n    for i in range(x.size(0)):\n        idx_str = ids_str[i]\n        idx_end = idx_str + segment_size\n        ret[i] = x[i, :, idx_str:idx_end]\n    return ret\n\n\ndef rand_slice_segments(x, x_lengths=None, segment_size=4):\n    b, d, t = x.size()\n    if x_lengths is None:\n        x_lengths = t\n    ids_str_max = x_lengths - segment_size + 1\n    ids_str = (torch.rand([b]).to(device=x.device) * ids_str_max).to(dtype=torch.long)\n    ret = slice_segments(x, ids_str, segment_size)\n    return ret, ids_str\n\n\ndef get_timing_signal_1d(length, channels, min_timescale=1.0, max_timescale=1.0e4):\n    position = torch.arange(length, dtype=torch.float)\n    num_timescales = channels // 2\n    log_timescale_increment = math.log(float(max_timescale) / float(min_timescale)) / (\n        num_timescales - 1\n    )\n    inv_timescales = min_timescale * torch.exp(\n        torch.arange(num_timescales, dtype=torch.float) * -log_timescale_increment\n    )\n    scaled_time = position.unsqueeze(0) * inv_timescales.unsqueeze(1)\n    signal = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], 0)\n    signal = F.pad(signal, [0, 0, 0, channels % 2])\n    signal = signal.view(1, channels, length)\n    return signal\n\n\ndef add_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4):\n    b, channels, length = x.size()\n    signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)\n    return x + signal.to(dtype=x.dtype, device=x.device)\n\n\ndef cat_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4, axis=1):\n    b, channels, length = x.size()\n    signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)\n    return torch.cat([x, signal.to(dtype=x.dtype, device=x.device)], axis)\n\n\ndef subsequent_mask(length):\n    mask = torch.tril(torch.ones(length, length)).unsqueeze(0).unsqueeze(0)\n    return mask\n\n\n@torch.jit.script\ndef fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):\n    n_channels_int = n_channels[0]\n    in_act = input_a + input_b\n    t_act = torch.tanh(in_act[:, :n_channels_int, :])\n    s_act = torch.sigmoid(in_act[:, n_channels_int:, :])\n    acts = t_act * s_act\n    return acts\n\n\ndef convert_pad_shape(pad_shape):\n    layer = pad_shape[::-1]\n    pad_shape = [item for sublist in layer for item in sublist]\n    return pad_shape\n\n\ndef shift_1d(x):\n    x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [1, 0]]))[:, :, :-1]\n    return x\n\n\ndef sequence_mask(length, max_length=None):\n    if max_length is None:\n        max_length = length.max()\n    x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n    return x.unsqueeze(0) < length.unsqueeze(1)\n\n\ndef generate_path(duration, mask):\n    \"\"\"\n    duration: [b, 1, t_x]\n    mask: [b, 1, t_y, t_x]\n    \"\"\"\n\n    b, _, t_y, t_x = mask.shape\n    cum_duration = torch.cumsum(duration, -1)\n\n    cum_duration_flat = cum_duration.view(b * t_x)\n    path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype)\n    path = path.view(b, t_x, t_y)\n    path = path - F.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1]\n    path = path.unsqueeze(1).transpose(2, 3) * mask\n    return path\n\n\ndef clip_grad_value_(parameters, clip_value, norm_type=2):\n    if isinstance(parameters, torch.Tensor):\n        parameters = [parameters]\n    parameters = list(filter(lambda p: p.grad is not None, parameters))\n    norm_type = float(norm_type)\n    if clip_value is not None:\n        clip_value = float(clip_value)\n\n    total_norm = 0\n    for p in parameters:\n        param_norm = p.grad.data.norm(norm_type)\n        total_norm += param_norm.item() ** norm_type\n        if clip_value is not None:\n            p.grad.data.clamp_(min=-clip_value, max=clip_value)\n    total_norm = total_norm ** (1.0 / norm_type)\n    return total_norm\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/mel_processing.py",
    "content": "import torch\nimport torch.utils.data\nfrom librosa.filters import mel as librosa_mel_fn\n\nMAX_WAV_VALUE = 32768.0\n\n\ndef dynamic_range_compression_torch(x, C=1, clip_val=1e-5):\n    \"\"\"\n    PARAMS\n    ------\n    C: compression factor\n    \"\"\"\n    return torch.log(torch.clamp(x, min=clip_val) * C)\n\n\ndef dynamic_range_decompression_torch(x, C=1):\n    \"\"\"\n    PARAMS\n    ------\n    C: compression factor used to compress\n    \"\"\"\n    return torch.exp(x) / C\n\n\ndef spectral_normalize_torch(magnitudes):\n    output = dynamic_range_compression_torch(magnitudes)\n    return output\n\n\ndef spectral_de_normalize_torch(magnitudes):\n    output = dynamic_range_decompression_torch(magnitudes)\n    return output\n\n\nmel_basis = {}\nhann_window = {}\n\n\ndef spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center=False):\n    # if torch.min(y) < -1.1:\n    #     print(\"min value is \", torch.min(y))\n    # if torch.max(y) > 1.1:\n    #     print(\"max value is \", torch.max(y))\n\n    global hann_window\n    dtype_device = str(y.dtype) + \"_\" + str(y.device)\n    wnsize_dtype_device = str(win_size) + \"_\" + dtype_device\n    if wnsize_dtype_device not in hann_window:\n        hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(\n            dtype=y.dtype, device=y.device\n        )\n\n    y = torch.nn.functional.pad(\n        y.unsqueeze(1),\n        (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)),\n        mode=\"reflect\",\n    )\n    y = y.squeeze(1)\n\n    spec = torch.stft(\n        y,\n        n_fft,\n        hop_length=hop_size,\n        win_length=win_size,\n        window=hann_window[wnsize_dtype_device],\n        center=center,\n        pad_mode=\"reflect\",\n        normalized=False,\n        onesided=True,\n        return_complex=False,\n    )\n\n    spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6)\n    return spec\n\n\ndef spectrogram_torch_conv(y, n_fft, sampling_rate, hop_size, win_size, center=False):\n    # if torch.min(y) < -1.:\n    #     print('min value is ', torch.min(y))\n    # if torch.max(y) > 1.:\n    #     print('max value is ', torch.max(y))\n\n    global hann_window\n    dtype_device = str(y.dtype) + '_' + str(y.device)\n    wnsize_dtype_device = str(win_size) + '_' + dtype_device\n    if wnsize_dtype_device not in hann_window:\n        hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(dtype=y.dtype, device=y.device)\n\n    y = torch.nn.functional.pad(y.unsqueeze(1), (int((n_fft-hop_size)/2), int((n_fft-hop_size)/2)), mode='reflect')\n    \n    # ******************** original ************************#\n    # y = y.squeeze(1)\n    # spec1 = torch.stft(y, n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],\n    #                   center=center, pad_mode='reflect', normalized=False, onesided=True, return_complex=False)\n\n    # ******************** ConvSTFT ************************#\n    freq_cutoff = n_fft // 2 + 1\n    fourier_basis = torch.view_as_real(torch.fft.fft(torch.eye(n_fft)))\n    forward_basis = fourier_basis[:freq_cutoff].permute(2, 0, 1).reshape(-1, 1, fourier_basis.shape[1])\n    forward_basis = forward_basis * torch.as_tensor(librosa.util.pad_center(torch.hann_window(win_size), size=n_fft)).float()\n\n    import torch.nn.functional as F\n\n    # if center:\n    #     signal = F.pad(y[:, None, None, :], (n_fft // 2, n_fft // 2, 0, 0), mode = 'reflect').squeeze(1)\n    assert center is False\n\n    forward_transform_squared = F.conv1d(y, forward_basis.to(y.device), stride = hop_size)\n    spec2 = torch.stack([forward_transform_squared[:, :freq_cutoff, :], forward_transform_squared[:, freq_cutoff:, :]], dim = -1)\n\n\n    # ******************** Verification ************************#\n    spec1 = torch.stft(y.squeeze(1), n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],\n                      center=center, pad_mode='reflect', normalized=False, onesided=True, return_complex=False)\n    assert torch.allclose(spec1, spec2, atol=1e-4)\n\n    spec = torch.sqrt(spec2.pow(2).sum(-1) + 1e-6)\n    return spec\n\n\ndef spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax):\n    global mel_basis\n    dtype_device = str(spec.dtype) + \"_\" + str(spec.device)\n    fmax_dtype_device = str(fmax) + \"_\" + dtype_device\n    if fmax_dtype_device not in mel_basis:\n        mel = librosa_mel_fn(sampling_rate, n_fft, num_mels, fmin, fmax)\n        mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to(\n            dtype=spec.dtype, device=spec.device\n        )\n    spec = torch.matmul(mel_basis[fmax_dtype_device], spec)\n    spec = spectral_normalize_torch(spec)\n    return spec\n\n\ndef mel_spectrogram_torch(\n    y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False\n):\n    if torch.min(y) < -1.0:\n        print(\"min value is \", torch.min(y))\n    if torch.max(y) > 1.0:\n        print(\"max value is \", torch.max(y))\n\n    global mel_basis, hann_window\n    dtype_device = str(y.dtype) + \"_\" + str(y.device)\n    fmax_dtype_device = str(fmax) + \"_\" + dtype_device\n    wnsize_dtype_device = str(win_size) + \"_\" + dtype_device\n    if fmax_dtype_device not in mel_basis:\n        mel = librosa_mel_fn(sampling_rate, n_fft, num_mels, fmin, fmax)\n        mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to(\n            dtype=y.dtype, device=y.device\n        )\n    if wnsize_dtype_device not in hann_window:\n        hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(\n            dtype=y.dtype, device=y.device\n        )\n\n    y = torch.nn.functional.pad(\n        y.unsqueeze(1),\n        (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)),\n        mode=\"reflect\",\n    )\n    y = y.squeeze(1)\n\n    spec = torch.stft(\n        y,\n        n_fft,\n        hop_length=hop_size,\n        win_length=win_size,\n        window=hann_window[wnsize_dtype_device],\n        center=center,\n        pad_mode=\"reflect\",\n        normalized=False,\n        onesided=True,\n        return_complex=False,\n    )\n\n    spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6)\n\n    spec = torch.matmul(mel_basis[fmax_dtype_device], spec)\n    spec = spectral_normalize_torch(spec)\n\n    return spec"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/models.py",
    "content": "import math\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom . import commons\nfrom . import modules\nfrom . import attentions\n\nfrom torch.nn import Conv1d, ConvTranspose1d, Conv2d\nfrom torch.nn.utils import weight_norm, remove_weight_norm, spectral_norm\n\nfrom .commons import init_weights, get_padding\n\n\nclass TextEncoder(nn.Module):\n\tdef __init__(self,\n\t\t\tn_vocab,\n\t\t\tout_channels,\n\t\t\thidden_channels,\n\t\t\tfilter_channels,\n\t\t\tn_heads,\n\t\t\tn_layers,\n\t\t\tkernel_size,\n\t\t\tp_dropout):\n\t\tsuper().__init__()\n\t\tself.n_vocab = n_vocab\n\t\tself.out_channels = out_channels\n\t\tself.hidden_channels = hidden_channels\n\t\tself.filter_channels = filter_channels\n\t\tself.n_heads = n_heads\n\t\tself.n_layers = n_layers\n\t\tself.kernel_size = kernel_size\n\t\tself.p_dropout = p_dropout\n\n\t\tself.emb = nn.Embedding(n_vocab, hidden_channels)\n\t\tnn.init.normal_(self.emb.weight, 0.0, hidden_channels**-0.5)\n\n\t\tself.encoder = attentions.Encoder(\n\t\t\thidden_channels,\n\t\t\tfilter_channels,\n\t\t\tn_heads,\n\t\t\tn_layers,\n\t\t\tkernel_size,\n\t\t\tp_dropout)\n\t\tself.proj= nn.Conv1d(hidden_channels, out_channels * 2, 1)\n\n\tdef forward(self, x, x_lengths):\n\t\tx = self.emb(x) * math.sqrt(self.hidden_channels) # [b, t, h]\n\t\tx = torch.transpose(x, 1, -1) # [b, h, t]\n\t\tx_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to(x.dtype)\n\n\t\tx = self.encoder(x * x_mask, x_mask)\n\t\tstats = self.proj(x) * x_mask\n\n\t\tm, logs = torch.split(stats, self.out_channels, dim=1)\n\t\treturn x, m, logs, x_mask\n     \n\nclass DurationPredictor(nn.Module):\n    def __init__(\n        self, in_channels, filter_channels, kernel_size, p_dropout, gin_channels=0\n    ):\n        super().__init__()\n\n        self.in_channels = in_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.gin_channels = gin_channels\n\n        self.drop = nn.Dropout(p_dropout)\n        self.conv_1 = nn.Conv1d(\n            in_channels, filter_channels, kernel_size, padding=kernel_size // 2\n        )\n        self.norm_1 = modules.LayerNorm(filter_channels)\n        self.conv_2 = nn.Conv1d(\n            filter_channels, filter_channels, kernel_size, padding=kernel_size // 2\n        )\n        self.norm_2 = modules.LayerNorm(filter_channels)\n        self.proj = nn.Conv1d(filter_channels, 1, 1)\n\n        if gin_channels != 0:\n            self.cond = nn.Conv1d(gin_channels, in_channels, 1)\n\n    def forward(self, x, x_mask, g=None):\n        x = torch.detach(x)\n        if g is not None:\n            g = torch.detach(g)\n            x = x + self.cond(g)\n        x = self.conv_1(x * x_mask)\n        x = torch.relu(x)\n        x = self.norm_1(x)\n        x = self.drop(x)\n        x = self.conv_2(x * x_mask)\n        x = torch.relu(x)\n        x = self.norm_2(x)\n        x = self.drop(x)\n        x = self.proj(x * x_mask)\n        return x * x_mask\n               \nclass StochasticDurationPredictor(nn.Module):\n\tdef __init__(self, in_channels, filter_channels, kernel_size, p_dropout, n_flows=4, gin_channels=0):\n\t\tsuper().__init__()\n\t\tfilter_channels = in_channels # it needs to be removed from future version.\n\t\tself.in_channels = in_channels\n\t\tself.filter_channels = filter_channels\n\t\tself.kernel_size = kernel_size\n\t\tself.p_dropout = p_dropout\n\t\tself.n_flows = n_flows\n\t\tself.gin_channels = gin_channels\n\n\t\tself.log_flow = modules.Log()\n\t\tself.flows = nn.ModuleList()\n\t\tself.flows.append(modules.ElementwiseAffine(2))\n\t\tfor i in range(n_flows):\n\t\t\tself.flows.append(modules.ConvFlow(2, filter_channels, kernel_size, n_layers=3))\n\t\t\tself.flows.append(modules.Flip())\n\n\t\tself.post_pre = nn.Conv1d(1, filter_channels, 1)\n\t\tself.post_proj = nn.Conv1d(filter_channels, filter_channels, 1)\n\t\tself.post_convs = modules.DDSConv(filter_channels, kernel_size, n_layers=3, p_dropout=p_dropout)\n\t\tself.post_flows = nn.ModuleList()\n\t\tself.post_flows.append(modules.ElementwiseAffine(2))\n\t\tfor i in range(4):\n\t\t\tself.post_flows.append(modules.ConvFlow(2, filter_channels, kernel_size, n_layers=3))\n\t\t\tself.post_flows.append(modules.Flip())\n\n\t\tself.pre = nn.Conv1d(in_channels, filter_channels, 1)\n\t\tself.proj = nn.Conv1d(filter_channels, filter_channels, 1)\n\t\tself.convs = modules.DDSConv(filter_channels, kernel_size, n_layers=3, p_dropout=p_dropout)\n\t\tif gin_channels != 0:\n\t\t\tself.cond = nn.Conv1d(gin_channels, filter_channels, 1)\n\n\tdef forward(self, x, x_mask, w=None, g=None, reverse=False, noise_scale=1.0):\n\t\tx = torch.detach(x)\n\t\tx = self.pre(x)\n\t\tif g is not None:\n\t\t\tg = torch.detach(g)\n\t\t\tx = x + self.cond(g)\n\t\tx = self.convs(x, x_mask)\n\t\tx = self.proj(x) * x_mask\n\n\t\tif not reverse:\n\t\t\tflows = self.flows\n\t\t\tassert w is not None\n\n\t\t\tlogdet_tot_q = 0\n\t\t\th_w = self.post_pre(w)\n\t\t\th_w = self.post_convs(h_w, x_mask)\n\t\t\th_w = self.post_proj(h_w) * x_mask\n\t\t\te_q = torch.randn(w.size(0), 2, w.size(2)).to(device=x.device, dtype=x.dtype) * x_mask\n\t\t\tz_q = e_q\n\t\t\tfor flow in self.post_flows:\n\t\t\t\tz_q, logdet_q = flow(z_q, x_mask, g=(x + h_w))\n\t\t\t\tlogdet_tot_q += logdet_q\n\t\t\tz_u, z1 = torch.split(z_q, [1, 1], 1)\n\t\t\tu = torch.sigmoid(z_u) * x_mask\n\t\t\tz0 = (w - u) * x_mask\n\t\t\tlogdet_tot_q += torch.sum((F.logsigmoid(z_u) + F.logsigmoid(-z_u)) * x_mask, [1,2])\n\t\t\tlogq = torch.sum(-0.5 * (math.log(2*math.pi) + (e_q**2)) * x_mask, [1,2]) - logdet_tot_q\n\n\t\t\tlogdet_tot = 0\n\t\t\tz0, logdet = self.log_flow(z0, x_mask)\n\t\t\tlogdet_tot += logdet\n\t\t\tz = torch.cat([z0, z1], 1)\n\t\t\tfor flow in flows:\n\t\t\t\tz, logdet = flow(z, x_mask, g=x, reverse=reverse)\n\t\t\t\tlogdet_tot = logdet_tot + logdet\n\t\t\tnll = torch.sum(0.5 * (math.log(2*math.pi) + (z**2)) * x_mask, [1,2]) - logdet_tot\n\t\t\treturn nll + logq # [b]\n\t\telse:\n\t\t\tflows = list(reversed(self.flows))\n\t\t\tflows = flows[:-2] + [flows[-1]] # remove a useless vflow\n\t\t\tz = torch.randn(x.size(0), 2, x.size(2)).to(device=x.device, dtype=x.dtype) * noise_scale\n\t\t\tfor flow in flows:\n\t\t\t\tz = flow(z, x_mask, g=x, reverse=reverse)\n\t\t\tz0, z1 = torch.split(z, [1, 1], 1)\n\t\t\tlogw = z0\n\t\t\treturn logw\n\nclass PosteriorEncoder(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        hidden_channels,\n        kernel_size,\n        dilation_rate,\n        n_layers,\n        gin_channels=0,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.gin_channels = gin_channels\n\n        self.pre = nn.Conv1d(in_channels, hidden_channels, 1)\n        self.enc = modules.WN(\n            hidden_channels,\n            kernel_size,\n            dilation_rate,\n            n_layers,\n            gin_channels=gin_channels,\n        )\n        self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1)\n\n    def forward(self, x, x_lengths, g=None, tau=1.0):\n        x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to(\n            x.dtype\n        )\n        x = self.pre(x) * x_mask\n        x = self.enc(x, x_mask, g=g)\n        stats = self.proj(x) * x_mask\n        m, logs = torch.split(stats, self.out_channels, dim=1)\n        z = (m + torch.randn_like(m) * tau * torch.exp(logs)) * x_mask\n        return z, m, logs, x_mask\n\n\nclass Generator(torch.nn.Module):\n    def __init__(\n        self,\n        initial_channel,\n        resblock,\n        resblock_kernel_sizes,\n        resblock_dilation_sizes,\n        upsample_rates,\n        upsample_initial_channel,\n        upsample_kernel_sizes,\n        gin_channels=0,\n    ):\n        super(Generator, self).__init__()\n        self.num_kernels = len(resblock_kernel_sizes)\n        self.num_upsamples = len(upsample_rates)\n        self.conv_pre = Conv1d(\n            initial_channel, upsample_initial_channel, 7, 1, padding=3\n        )\n        resblock = modules.ResBlock1 if resblock == \"1\" else modules.ResBlock2\n\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):\n            self.ups.append(\n                weight_norm(\n                    ConvTranspose1d(\n                        upsample_initial_channel // (2**i),\n                        upsample_initial_channel // (2 ** (i + 1)),\n                        k,\n                        u,\n                        padding=(k - u) // 2,\n                    )\n                )\n            )\n\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = upsample_initial_channel // (2 ** (i + 1))\n            for j, (k, d) in enumerate(\n                zip(resblock_kernel_sizes, resblock_dilation_sizes)\n            ):\n                self.resblocks.append(resblock(ch, k, d))\n\n        self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False)\n        self.ups.apply(init_weights)\n\n        if gin_channels != 0:\n            self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1)\n\n    def forward(self, x, g=None):\n        x = self.conv_pre(x)\n        if g is not None:\n            x = x + self.cond(g)\n\n        for i in range(self.num_upsamples):\n            x = F.leaky_relu(x, modules.LRELU_SLOPE)\n            x = self.ups[i](x)\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n        x = F.leaky_relu(x)\n        x = self.conv_post(x)\n        x = torch.tanh(x)\n\n        return x\n\n    def remove_weight_norm(self):\n        print(\"Removing weight norm...\")\n        for layer in self.ups:\n            remove_weight_norm(layer)\n        for layer in self.resblocks:\n            layer.remove_weight_norm()\n\n\nclass ReferenceEncoder(nn.Module):\n    \"\"\"\n    inputs --- [N, Ty/r, n_mels*r]  mels\n    outputs --- [N, ref_enc_gru_size]\n    \"\"\"\n\n    def __init__(self, spec_channels, gin_channels=0, layernorm=True):\n        super().__init__()\n        self.spec_channels = spec_channels\n        ref_enc_filters = [32, 32, 64, 64, 128, 128]\n        K = len(ref_enc_filters)\n        filters = [1] + ref_enc_filters\n        convs = [\n            weight_norm(\n                nn.Conv2d(\n                    in_channels=filters[i],\n                    out_channels=filters[i + 1],\n                    kernel_size=(3, 3),\n                    stride=(2, 2),\n                    padding=(1, 1),\n                )\n            )\n            for i in range(K)\n        ]\n        self.convs = nn.ModuleList(convs)\n\n        out_channels = self.calculate_channels(spec_channels, 3, 2, 1, K)\n        self.gru = nn.GRU(\n            input_size=ref_enc_filters[-1] * out_channels,\n            hidden_size=256 // 2,\n            batch_first=True,\n        )\n        self.proj = nn.Linear(128, gin_channels)\n        if layernorm:\n            self.layernorm = nn.LayerNorm(self.spec_channels)\n        else:\n            self.layernorm = None\n\n    def forward(self, inputs, mask=None):\n        N = inputs.size(0)\n\n        out = inputs.view(N, 1, -1, self.spec_channels)  # [N, 1, Ty, n_freqs]\n        if self.layernorm is not None:\n            out = self.layernorm(out)\n\n        for conv in self.convs:\n            out = conv(out)\n            # out = wn(out)\n            out = F.relu(out)  # [N, 128, Ty//2^K, n_mels//2^K]\n\n        out = out.transpose(1, 2)  # [N, Ty//2^K, 128, n_mels//2^K]\n        T = out.size(1)\n        N = out.size(0)\n        out = out.contiguous().view(N, T, -1)  # [N, Ty//2^K, 128*n_mels//2^K]\n\n        self.gru.flatten_parameters()\n        memory, out = self.gru(out)  # out --- [1, N, 128]\n\n        return self.proj(out.squeeze(0))\n\n    def calculate_channels(self, L, kernel_size, stride, pad, n_convs):\n        for i in range(n_convs):\n            L = (L - kernel_size + 2 * pad) // stride + 1\n        return L\n\n\nclass ResidualCouplingBlock(nn.Module):\n    def __init__(self,\n            channels,\n            hidden_channels,\n            kernel_size,\n            dilation_rate,\n            n_layers,\n            n_flows=4,\n            gin_channels=0):\n        super().__init__()\n        self.channels = channels\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.n_flows = n_flows\n        self.gin_channels = gin_channels\n\n        self.flows = nn.ModuleList()\n        for i in range(n_flows):\n            self.flows.append(modules.ResidualCouplingLayer(channels, hidden_channels, kernel_size, dilation_rate, n_layers, gin_channels=gin_channels, mean_only=True))\n            self.flows.append(modules.Flip())\n\n    def forward(self, x, x_mask, g=None, reverse=False):\n        if not reverse:\n            for flow in self.flows:\n                x, _ = flow(x, x_mask, g=g, reverse=reverse)\n        else:\n            for flow in reversed(self.flows):\n                x = flow(x, x_mask, g=g, reverse=reverse)\n        return x\n\nclass SynthesizerTrn(nn.Module):\n    \"\"\"\n    Synthesizer for Training\n    \"\"\"\n\n    def __init__(\n        self,\n        n_vocab,\n        spec_channels,\n        inter_channels,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size,\n        p_dropout,\n        resblock,\n        resblock_kernel_sizes,\n        resblock_dilation_sizes,\n        upsample_rates,\n        upsample_initial_channel,\n        upsample_kernel_sizes,\n        n_speakers=256,\n        gin_channels=256,\n        zero_g=False,\n        **kwargs\n    ):\n        super().__init__()\n\n        self.dec = Generator(\n            inter_channels,\n            resblock,\n            resblock_kernel_sizes,\n            resblock_dilation_sizes,\n            upsample_rates,\n            upsample_initial_channel,\n            upsample_kernel_sizes,\n            gin_channels=gin_channels,\n        )\n        self.enc_q = PosteriorEncoder(\n            spec_channels,\n            inter_channels,\n            hidden_channels,\n            5,\n            1,\n            16,\n            gin_channels=gin_channels,\n        )\n\n        self.flow = ResidualCouplingBlock(inter_channels, hidden_channels, 5, 1, 4, gin_channels=gin_channels)\n\n        self.n_speakers = n_speakers\n        if n_speakers == 0:\n            self.ref_enc = ReferenceEncoder(spec_channels, gin_channels)\n        else:\n            self.enc_p = TextEncoder(n_vocab,\n                inter_channels,\n                hidden_channels,\n                filter_channels,\n                n_heads,\n                n_layers,\n                kernel_size,\n                p_dropout)\n            self.sdp = StochasticDurationPredictor(hidden_channels, 192, 3, 0.5, 4, gin_channels=gin_channels)\n            self.dp = DurationPredictor(hidden_channels, 256, 3, 0.5, gin_channels=gin_channels)\n            self.emb_g = nn.Embedding(n_speakers, gin_channels)\n        self.zero_g = zero_g\n\n    def infer(self, x, x_lengths, sid=None, noise_scale=1, length_scale=1, noise_scale_w=1., sdp_ratio=0.2, max_len=None):\n        x, m_p, logs_p, x_mask = self.enc_p(x, x_lengths)\n        if self.n_speakers > 0:\n            g = self.emb_g(sid).unsqueeze(-1) # [b, h, 1]\n        else:\n            g = None\n\n        logw = self.sdp(x, x_mask, g=g, reverse=True, noise_scale=noise_scale_w) * sdp_ratio \\\n            + self.dp(x, x_mask, g=g) * (1 - sdp_ratio)\n\n        w = torch.exp(logw) * x_mask * length_scale\n        w_ceil = torch.ceil(w)\n        y_lengths = torch.clamp_min(torch.sum(w_ceil, [1, 2]), 1).long()\n        y_mask = torch.unsqueeze(commons.sequence_mask(y_lengths, None), 1).to(x_mask.dtype)\n        attn_mask = torch.unsqueeze(x_mask, 2) * torch.unsqueeze(y_mask, -1)\n        attn = commons.generate_path(w_ceil, attn_mask)\n\n        m_p = torch.matmul(attn.squeeze(1), m_p.transpose(1, 2)).transpose(1, 2) # [b, t', t], [b, t, d] -> [b, d, t']\n        logs_p = torch.matmul(attn.squeeze(1), logs_p.transpose(1, 2)).transpose(1, 2) # [b, t', t], [b, t, d] -> [b, d, t']\n\n        z_p = m_p + torch.randn_like(m_p) * torch.exp(logs_p) * noise_scale\n        z = self.flow(z_p, y_mask, g=g, reverse=True)\n        o = self.dec((z * y_mask)[:,:,:max_len], g=g)\n        return o, attn, y_mask, (z, z_p, m_p, logs_p)\n\n    def voice_conversion(self, y, y_lengths, sid_src, sid_tgt, tau=1.0):\n        g_src = sid_src\n        g_tgt = sid_tgt\n        z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g_src if not self.zero_g else torch.zeros_like(g_src), tau=tau)\n        z_p = self.flow(z, y_mask, g=g_src)\n        z_hat = self.flow(z_p, y_mask, g=g_tgt, reverse=True)\n        o_hat = self.dec(z_hat * y_mask, g=g_tgt if not self.zero_g else torch.zeros_like(g_tgt))\n        return o_hat, y_mask, (z, z_p, z_hat)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/modules.py",
    "content": "import math\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom torch.nn import Conv1d\nfrom torch.nn.utils import weight_norm, remove_weight_norm\n\nfrom . import commons\nfrom .commons import init_weights, get_padding\nfrom .transforms import piecewise_rational_quadratic_transform\nfrom .attentions import Encoder\n\nLRELU_SLOPE = 0.1\n\n\nclass LayerNorm(nn.Module):\n    def __init__(self, channels, eps=1e-5):\n        super().__init__()\n        self.channels = channels\n        self.eps = eps\n\n        self.gamma = nn.Parameter(torch.ones(channels))\n        self.beta = nn.Parameter(torch.zeros(channels))\n\n    def forward(self, x):\n        x = x.transpose(1, -1)\n        x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps)\n        return x.transpose(1, -1)\n\n\nclass ConvReluNorm(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        hidden_channels,\n        out_channels,\n        kernel_size,\n        n_layers,\n        p_dropout,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.hidden_channels = hidden_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n        assert n_layers > 1, \"Number of layers should be larger than 0.\"\n\n        self.conv_layers = nn.ModuleList()\n        self.norm_layers = nn.ModuleList()\n        self.conv_layers.append(\n            nn.Conv1d(\n                in_channels, hidden_channels, kernel_size, padding=kernel_size // 2\n            )\n        )\n        self.norm_layers.append(LayerNorm(hidden_channels))\n        self.relu_drop = nn.Sequential(nn.ReLU(), nn.Dropout(p_dropout))\n        for _ in range(n_layers - 1):\n            self.conv_layers.append(\n                nn.Conv1d(\n                    hidden_channels,\n                    hidden_channels,\n                    kernel_size,\n                    padding=kernel_size // 2,\n                )\n            )\n            self.norm_layers.append(LayerNorm(hidden_channels))\n        self.proj = nn.Conv1d(hidden_channels, out_channels, 1)\n        self.proj.weight.data.zero_()\n        self.proj.bias.data.zero_()\n\n    def forward(self, x, x_mask):\n        x_org = x\n        for i in range(self.n_layers):\n            x = self.conv_layers[i](x * x_mask)\n            x = self.norm_layers[i](x)\n            x = self.relu_drop(x)\n        x = x_org + self.proj(x)\n        return x * x_mask\n\n\nclass DDSConv(nn.Module):\n    \"\"\"\n    Dilated and Depth-Separable Convolution\n    \"\"\"\n\n    def __init__(self, channels, kernel_size, n_layers, p_dropout=0.0):\n        super().__init__()\n        self.channels = channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n\n        self.drop = nn.Dropout(p_dropout)\n        self.convs_sep = nn.ModuleList()\n        self.convs_1x1 = nn.ModuleList()\n        self.norms_1 = nn.ModuleList()\n        self.norms_2 = nn.ModuleList()\n        for i in range(n_layers):\n            dilation = kernel_size**i\n            padding = (kernel_size * dilation - dilation) // 2\n            self.convs_sep.append(\n                nn.Conv1d(\n                    channels,\n                    channels,\n                    kernel_size,\n                    groups=channels,\n                    dilation=dilation,\n                    padding=padding,\n                )\n            )\n            self.convs_1x1.append(nn.Conv1d(channels, channels, 1))\n            self.norms_1.append(LayerNorm(channels))\n            self.norms_2.append(LayerNorm(channels))\n\n    def forward(self, x, x_mask, g=None):\n        if g is not None:\n            x = x + g\n        for i in range(self.n_layers):\n            y = self.convs_sep[i](x * x_mask)\n            y = self.norms_1[i](y)\n            y = F.gelu(y)\n            y = self.convs_1x1[i](y)\n            y = self.norms_2[i](y)\n            y = F.gelu(y)\n            y = self.drop(y)\n            x = x + y\n        return x * x_mask\n\n\nclass WN(torch.nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        kernel_size,\n        dilation_rate,\n        n_layers,\n        gin_channels=0,\n        p_dropout=0,\n    ):\n        super(WN, self).__init__()\n        assert kernel_size % 2 == 1\n        self.hidden_channels = hidden_channels\n        self.kernel_size = (kernel_size,)\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.gin_channels = gin_channels\n        self.p_dropout = p_dropout\n\n        self.in_layers = torch.nn.ModuleList()\n        self.res_skip_layers = torch.nn.ModuleList()\n        self.drop = nn.Dropout(p_dropout)\n\n        if gin_channels != 0:\n            cond_layer = torch.nn.Conv1d(\n                gin_channels, 2 * hidden_channels * n_layers, 1\n            )\n            self.cond_layer = torch.nn.utils.weight_norm(cond_layer, name=\"weight\")\n\n        for i in range(n_layers):\n            dilation = dilation_rate**i\n            padding = int((kernel_size * dilation - dilation) / 2)\n            in_layer = torch.nn.Conv1d(\n                hidden_channels,\n                2 * hidden_channels,\n                kernel_size,\n                dilation=dilation,\n                padding=padding,\n            )\n            in_layer = torch.nn.utils.weight_norm(in_layer, name=\"weight\")\n            self.in_layers.append(in_layer)\n\n            # last one is not necessary\n            if i < n_layers - 1:\n                res_skip_channels = 2 * hidden_channels\n            else:\n                res_skip_channels = hidden_channels\n\n            res_skip_layer = torch.nn.Conv1d(hidden_channels, res_skip_channels, 1)\n            res_skip_layer = torch.nn.utils.weight_norm(res_skip_layer, name=\"weight\")\n            self.res_skip_layers.append(res_skip_layer)\n\n    def forward(self, x, x_mask, g=None, **kwargs):\n        output = torch.zeros_like(x)\n        n_channels_tensor = torch.IntTensor([self.hidden_channels])\n\n        if g is not None:\n            g = self.cond_layer(g)\n\n        for i in range(self.n_layers):\n            x_in = self.in_layers[i](x)\n            if g is not None:\n                cond_offset = i * 2 * self.hidden_channels\n                g_l = g[:, cond_offset : cond_offset + 2 * self.hidden_channels, :]\n            else:\n                g_l = torch.zeros_like(x_in)\n\n            acts = commons.fused_add_tanh_sigmoid_multiply(x_in, g_l, n_channels_tensor)\n            acts = self.drop(acts)\n\n            res_skip_acts = self.res_skip_layers[i](acts)\n            if i < self.n_layers - 1:\n                res_acts = res_skip_acts[:, : self.hidden_channels, :]\n                x = (x + res_acts) * x_mask\n                output = output + res_skip_acts[:, self.hidden_channels :, :]\n            else:\n                output = output + res_skip_acts\n        return output * x_mask\n\n    def remove_weight_norm(self):\n        if self.gin_channels != 0:\n            torch.nn.utils.remove_weight_norm(self.cond_layer)\n        for l in self.in_layers:\n            torch.nn.utils.remove_weight_norm(l)\n        for l in self.res_skip_layers:\n            torch.nn.utils.remove_weight_norm(l)\n\n\nclass ResBlock1(torch.nn.Module):\n    def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)):\n        super(ResBlock1, self).__init__()\n        self.convs1 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[0],\n                        padding=get_padding(kernel_size, dilation[0]),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[1],\n                        padding=get_padding(kernel_size, dilation[1]),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[2],\n                        padding=get_padding(kernel_size, dilation[2]),\n                    )\n                ),\n            ]\n        )\n        self.convs1.apply(init_weights)\n\n        self.convs2 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                ),\n            ]\n        )\n        self.convs2.apply(init_weights)\n\n    def forward(self, x, x_mask=None):\n        for c1, c2 in zip(self.convs1, self.convs2):\n            xt = F.leaky_relu(x, LRELU_SLOPE)\n            if x_mask is not None:\n                xt = xt * x_mask\n            xt = c1(xt)\n            xt = F.leaky_relu(xt, LRELU_SLOPE)\n            if x_mask is not None:\n                xt = xt * x_mask\n            xt = c2(xt)\n            x = xt + x\n        if x_mask is not None:\n            x = x * x_mask\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n\nclass ResBlock2(torch.nn.Module):\n    def __init__(self, channels, kernel_size=3, dilation=(1, 3)):\n        super(ResBlock2, self).__init__()\n        self.convs = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[0],\n                        padding=get_padding(kernel_size, dilation[0]),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[1],\n                        padding=get_padding(kernel_size, dilation[1]),\n                    )\n                ),\n            ]\n        )\n        self.convs.apply(init_weights)\n\n    def forward(self, x, x_mask=None):\n        for c in self.convs:\n            xt = F.leaky_relu(x, LRELU_SLOPE)\n            if x_mask is not None:\n                xt = xt * x_mask\n            xt = c(xt)\n            x = xt + x\n        if x_mask is not None:\n            x = x * x_mask\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs:\n            remove_weight_norm(l)\n\n\nclass Log(nn.Module):\n    def forward(self, x, x_mask, reverse=False, **kwargs):\n        if not reverse:\n            y = torch.log(torch.clamp_min(x, 1e-5)) * x_mask\n            logdet = torch.sum(-y, [1, 2])\n            return y, logdet\n        else:\n            x = torch.exp(x) * x_mask\n            return x\n\n\nclass Flip(nn.Module):\n    def forward(self, x, *args, reverse=False, **kwargs):\n        x = torch.flip(x, [1])\n        if not reverse:\n            logdet = torch.zeros(x.size(0)).to(dtype=x.dtype, device=x.device)\n            return x, logdet\n        else:\n            return x\n\n\nclass ElementwiseAffine(nn.Module):\n    def __init__(self, channels):\n        super().__init__()\n        self.channels = channels\n        self.m = nn.Parameter(torch.zeros(channels, 1))\n        self.logs = nn.Parameter(torch.zeros(channels, 1))\n\n    def forward(self, x, x_mask, reverse=False, **kwargs):\n        if not reverse:\n            y = self.m + torch.exp(self.logs) * x\n            y = y * x_mask\n            logdet = torch.sum(self.logs * x_mask, [1, 2])\n            return y, logdet\n        else:\n            x = (x - self.m) * torch.exp(-self.logs) * x_mask\n            return x\n\n\nclass ResidualCouplingLayer(nn.Module):\n    def __init__(\n        self,\n        channels,\n        hidden_channels,\n        kernel_size,\n        dilation_rate,\n        n_layers,\n        p_dropout=0,\n        gin_channels=0,\n        mean_only=False,\n    ):\n        assert channels % 2 == 0, \"channels should be divisible by 2\"\n        super().__init__()\n        self.channels = channels\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.half_channels = channels // 2\n        self.mean_only = mean_only\n\n        self.pre = nn.Conv1d(self.half_channels, hidden_channels, 1)\n        self.enc = WN(\n            hidden_channels,\n            kernel_size,\n            dilation_rate,\n            n_layers,\n            p_dropout=p_dropout,\n            gin_channels=gin_channels,\n        )\n        self.post = nn.Conv1d(hidden_channels, self.half_channels * (2 - mean_only), 1)\n        self.post.weight.data.zero_()\n        self.post.bias.data.zero_()\n\n    def forward(self, x, x_mask, g=None, reverse=False):\n        x0, x1 = torch.split(x, [self.half_channels] * 2, 1)\n        h = self.pre(x0) * x_mask\n        h = self.enc(h, x_mask, g=g)\n        stats = self.post(h) * x_mask\n        if not self.mean_only:\n            m, logs = torch.split(stats, [self.half_channels] * 2, 1)\n        else:\n            m = stats\n            logs = torch.zeros_like(m)\n\n        if not reverse:\n            x1 = m + x1 * torch.exp(logs) * x_mask\n            x = torch.cat([x0, x1], 1)\n            logdet = torch.sum(logs, [1, 2])\n            return x, logdet\n        else:\n            x1 = (x1 - m) * torch.exp(-logs) * x_mask\n            x = torch.cat([x0, x1], 1)\n            return x\n\n\nclass ConvFlow(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        filter_channels,\n        kernel_size,\n        n_layers,\n        num_bins=10,\n        tail_bound=5.0,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.num_bins = num_bins\n        self.tail_bound = tail_bound\n        self.half_channels = in_channels // 2\n\n        self.pre = nn.Conv1d(self.half_channels, filter_channels, 1)\n        self.convs = DDSConv(filter_channels, kernel_size, n_layers, p_dropout=0.0)\n        self.proj = nn.Conv1d(\n            filter_channels, self.half_channels * (num_bins * 3 - 1), 1\n        )\n        self.proj.weight.data.zero_()\n        self.proj.bias.data.zero_()\n\n    def forward(self, x, x_mask, g=None, reverse=False):\n        x0, x1 = torch.split(x, [self.half_channels] * 2, 1)\n        h = self.pre(x0)\n        h = self.convs(h, x_mask, g=g)\n        h = self.proj(h) * x_mask\n\n        b, c, t = x0.shape\n        h = h.reshape(b, c, -1, t).permute(0, 1, 3, 2)  # [b, cx?, t] -> [b, c, t, ?]\n\n        unnormalized_widths = h[..., : self.num_bins] / math.sqrt(self.filter_channels)\n        unnormalized_heights = h[..., self.num_bins : 2 * self.num_bins] / math.sqrt(\n            self.filter_channels\n        )\n        unnormalized_derivatives = h[..., 2 * self.num_bins :]\n\n        x1, logabsdet = piecewise_rational_quadratic_transform(\n            x1,\n            unnormalized_widths,\n            unnormalized_heights,\n            unnormalized_derivatives,\n            inverse=reverse,\n            tails=\"linear\",\n            tail_bound=self.tail_bound,\n        )\n\n        x = torch.cat([x0, x1], 1) * x_mask\n        logdet = torch.sum(logabsdet * x_mask, [1, 2])\n        if not reverse:\n            return x, logdet\n        else:\n            return x\n\n\nclass TransformerCouplingLayer(nn.Module):\n    def __init__(\n        self,\n        channels,\n        hidden_channels,\n        kernel_size,\n        n_layers,\n        n_heads,\n        p_dropout=0,\n        filter_channels=0,\n        mean_only=False,\n        wn_sharing_parameter=None,\n        gin_channels=0,\n    ):\n        assert n_layers == 3, n_layers\n        assert channels % 2 == 0, \"channels should be divisible by 2\"\n        super().__init__()\n        self.channels = channels\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.half_channels = channels // 2\n        self.mean_only = mean_only\n\n        self.pre = nn.Conv1d(self.half_channels, hidden_channels, 1)\n        self.enc = (\n            Encoder(\n                hidden_channels,\n                filter_channels,\n                n_heads,\n                n_layers,\n                kernel_size,\n                p_dropout,\n                isflow=True,\n                gin_channels=gin_channels,\n            )\n            if wn_sharing_parameter is None\n            else wn_sharing_parameter\n        )\n        self.post = nn.Conv1d(hidden_channels, self.half_channels * (2 - mean_only), 1)\n        self.post.weight.data.zero_()\n        self.post.bias.data.zero_()\n\n    def forward(self, x, x_mask, g=None, reverse=False):\n        x0, x1 = torch.split(x, [self.half_channels] * 2, 1)\n        h = self.pre(x0) * x_mask\n        h = self.enc(h, x_mask, g=g)\n        stats = self.post(h) * x_mask\n        if not self.mean_only:\n            m, logs = torch.split(stats, [self.half_channels] * 2, 1)\n        else:\n            m = stats\n            logs = torch.zeros_like(m)\n\n        if not reverse:\n            x1 = m + x1 * torch.exp(logs) * x_mask\n            x = torch.cat([x0, x1], 1)\n            logdet = torch.sum(logs, [1, 2])\n            return x, logdet\n        else:\n            x1 = (x1 - m) * torch.exp(-logs) * x_mask\n            x = torch.cat([x0, x1], 1)\n            return x\n\n        x1, logabsdet = piecewise_rational_quadratic_transform(\n            x1,\n            unnormalized_widths,\n            unnormalized_heights,\n            unnormalized_derivatives,\n            inverse=reverse,\n            tails=\"linear\",\n            tail_bound=self.tail_bound,\n        )\n\n        x = torch.cat([x0, x1], 1) * x_mask\n        logdet = torch.sum(logabsdet * x_mask, [1, 2])\n        if not reverse:\n            return x, logdet\n        else:\n            return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/openvoice_app.py",
    "content": "import os\nimport torch\nimport argparse\nimport gradio as gr\nfrom zipfile import ZipFile\nimport langid\nfrom . import se_extractor\nfrom .api import BaseSpeakerTTS, ToneColorConverter\n\nparser = argparse.ArgumentParser()\nparser.add_argument(\"--share\", action='store_true', default=False, help=\"make link public\")\nargs = parser.parse_args()\n\nen_ckpt_base = 'checkpoints/base_speakers/EN'\nzh_ckpt_base = 'checkpoints/base_speakers/ZH'\nckpt_converter = 'checkpoints/converter'\ndevice = 'cuda' if torch.cuda.is_available() else 'cpu'\noutput_dir = 'outputs'\nos.makedirs(output_dir, exist_ok=True)\n\n# load models\nen_base_speaker_tts = BaseSpeakerTTS(f'{en_ckpt_base}/config.json', device=device)\nen_base_speaker_tts.load_ckpt(f'{en_ckpt_base}/checkpoint.pth')\nzh_base_speaker_tts = BaseSpeakerTTS(f'{zh_ckpt_base}/config.json', device=device)\nzh_base_speaker_tts.load_ckpt(f'{zh_ckpt_base}/checkpoint.pth')\ntone_color_converter = ToneColorConverter(f'{ckpt_converter}/config.json', device=device)\ntone_color_converter.load_ckpt(f'{ckpt_converter}/checkpoint.pth')\n\n# load speaker embeddings\nen_source_default_se = torch.load(f'{en_ckpt_base}/en_default_se.pth').to(device)\nen_source_style_se = torch.load(f'{en_ckpt_base}/en_style_se.pth').to(device)\nzh_source_se = torch.load(f'{zh_ckpt_base}/zh_default_se.pth').to(device)\n\n# This online demo mainly supports English and Chinese\nsupported_languages = ['zh', 'en']\n\ndef predict(prompt, style, audio_file_pth, agree):\n    # initialize a empty info\n    text_hint = ''\n    # agree with the terms\n    if agree == False:\n        text_hint += '[ERROR] Please accept the Terms & Condition!\\n'\n        gr.Warning(\"Please accept the Terms & Condition!\")\n        return (\n            text_hint,\n            None,\n            None,\n        )\n\n    # first detect the input language\n    language_predicted = langid.classify(prompt)[0].strip()  \n    print(f\"Detected language:{language_predicted}\")\n\n    if language_predicted not in supported_languages:\n        text_hint += f\"[ERROR] The detected language {language_predicted} for your input text is not in our Supported Languages: {supported_languages}\\n\"\n        gr.Warning(\n            f\"The detected language {language_predicted} for your input text is not in our Supported Languages: {supported_languages}\"\n        )\n\n        return (\n            text_hint,\n            None,\n            None,\n        )\n    \n    if language_predicted == \"zh\":\n        tts_model = zh_base_speaker_tts\n        source_se = zh_source_se\n        language = 'Chinese'\n        if style not in ['default']:\n            text_hint += f\"[ERROR] The style {style} is not supported for Chinese, which should be in ['default']\\n\"\n            gr.Warning(f\"The style {style} is not supported for Chinese, which should be in ['default']\")\n            return (\n                text_hint,\n                None,\n                None,\n            )\n\n    else:\n        tts_model = en_base_speaker_tts\n        if style == 'default':\n            source_se = en_source_default_se\n        else:\n            source_se = en_source_style_se\n        language = 'English'\n        if style not in ['default', 'whispering', 'shouting', 'excited', 'cheerful', 'terrified', 'angry', 'sad', 'friendly']:\n            text_hint += f\"[ERROR] The style {style} is not supported for English, which should be in ['default', 'whispering', 'shouting', 'excited', 'cheerful', 'terrified', 'angry', 'sad', 'friendly']\\n\"\n            gr.Warning(f\"The style {style} is not supported for English, which should be in ['default', 'whispering', 'shouting', 'excited', 'cheerful', 'terrified', 'angry', 'sad', 'friendly']\")\n            return (\n                text_hint,\n                None,\n                None,\n            )\n\n    speaker_wav = audio_file_pth\n\n    if len(prompt) < 2:\n        text_hint += f\"[ERROR] Please give a longer prompt text \\n\"\n        gr.Warning(\"Please give a longer prompt text\")\n        return (\n            text_hint,\n            None,\n            None,\n        )\n    if len(prompt) > 200:\n        text_hint += f\"[ERROR] Text length limited to 200 characters for this demo, please try shorter text. You can clone our open-source repo and try for your usage \\n\"\n        gr.Warning(\n            \"Text length limited to 200 characters for this demo, please try shorter text. You can clone our open-source repo for your usage\"\n        )\n        return (\n            text_hint,\n            None,\n            None,\n        )\n    \n    # note diffusion_conditioning not used on hifigan (default mode), it will be empty but need to pass it to model.inference\n    try:\n        target_se, audio_name = se_extractor.get_se(speaker_wav, tone_color_converter, target_dir='processed', vad=True)\n    except Exception as e:\n        text_hint += f\"[ERROR] Get target tone color error {str(e)} \\n\"\n        gr.Warning(\n            \"[ERROR] Get target tone color error {str(e)} \\n\"\n        )\n        return (\n            text_hint,\n            None,\n            None,\n        )\n\n    src_path = f'{output_dir}/tmp.wav'\n    tts_model.tts(prompt, src_path, speaker=style, language=language)\n\n    save_path = f'{output_dir}/output.wav'\n    # Run the tone color converter\n    encode_message = \"@MyShell\"\n    tone_color_converter.convert(\n        audio_src_path=src_path, \n        src_se=source_se, \n        tgt_se=target_se, \n        output_path=save_path,\n        message=encode_message)\n\n    text_hint += f'''Get response successfully \\n'''\n\n    return (\n        text_hint,\n        save_path,\n        speaker_wav,\n    )\n\n\n\ntitle = \"MyShell OpenVoice\"\n\ndescription = \"\"\"\nWe introduce OpenVoice, a versatile instant voice cloning approach that requires only a short audio clip from the reference speaker to replicate their voice and generate speech in multiple languages. OpenVoice enables granular control over voice styles, including emotion, accent, rhythm, pauses, and intonation, in addition to replicating the tone color of the reference speaker. OpenVoice also achieves zero-shot cross-lingual voice cloning for languages not included in the massive-speaker training set.\n\"\"\"\n\nmarkdown_table = \"\"\"\n<div align=\"center\" style=\"margin-bottom: 10px;\">\n\n|               |               |               |\n| :-----------: | :-----------: | :-----------: | \n| **OpenSource Repo** | **Project Page** | **Join the Community** |        \n| <div style='text-align: center;'><a style=\"display:inline-block,align:center\" href='https://github.com/myshell-ai/OpenVoice'><img src='https://img.shields.io/github/stars/myshell-ai/OpenVoice?style=social' /></a></div> | [OpenVoice](https://research.myshell.ai/open-voice) | [![Discord](https://img.shields.io/discord/1122227993805336617?color=%239B59B6&label=%20Discord%20)](https://discord.gg/myshell) |\n\n</div>\n\"\"\"\n\nmarkdown_table_v2 = \"\"\"\n<div align=\"center\" style=\"margin-bottom: 2px;\">\n\n|               |               |               |              |\n| :-----------: | :-----------: | :-----------: | :-----------: | \n| **OpenSource Repo** | <div style='text-align: center;'><a style=\"display:inline-block,align:center\" href='https://github.com/myshell-ai/OpenVoice'><img src='https://img.shields.io/github/stars/myshell-ai/OpenVoice?style=social' /></a></div> |  **Project Page** |  [OpenVoice](https://research.myshell.ai/open-voice) |     \n\n| | |\n| :-----------: | :-----------: |\n**Join the Community** |   [![Discord](https://img.shields.io/discord/1122227993805336617?color=%239B59B6&label=%20Discord%20)](https://discord.gg/myshell) |\n\n</div>\n\"\"\"\ncontent = \"\"\"\n<div>\n  <strong>If the generated voice does not sound like the reference voice, please refer to <a href='https://github.com/myshell-ai/OpenVoice/blob/main/docs/QA.md'>this QnA</a>.</strong> <strong>For multi-lingual & cross-lingual examples, please refer to <a href='https://github.com/myshell-ai/OpenVoice/blob/main/demo_part2.ipynb'>this jupyter notebook</a>.</strong>\n  This online demo mainly supports <strong>English</strong>. The <em>default</em> style also supports <strong>Chinese</strong>. But OpenVoice can adapt to any other language as long as a base speaker is provided.\n</div>\n\"\"\"\nwrapped_markdown_content = f\"<div style='border: 1px solid #000; padding: 10px;'>{content}</div>\"\n\n\nexamples = [\n    [\n        \"今天天气真好，我们一起出去吃饭吧。\",\n        'default',\n        \"resources/demo_speaker1.mp3\",\n        True,\n    ],[\n        \"This audio is generated by open voice with a half-performance model.\",\n        'whispering',\n        \"resources/demo_speaker2.mp3\",\n        True,\n    ],\n    [\n        \"He hoped there would be stew for dinner, turnips and carrots and bruised potatoes and fat mutton pieces to be ladled out in thick, peppered, flour-fattened sauce.\",\n        'sad',\n        \"resources/demo_speaker0.mp3\",\n        True,\n    ],\n]\n\nwith gr.Blocks(analytics_enabled=False) as demo:\n\n    with gr.Row():\n        with gr.Column():\n            with gr.Row():\n                gr.Markdown(\n                    \"\"\"\n                    ## <img src=\"https://huggingface.co/spaces/myshell-ai/OpenVoice/raw/main/logo.jpg\" height=\"40\"/>\n                    \"\"\"\n                )\n            with gr.Row():    \n                gr.Markdown(markdown_table_v2)\n            with gr.Row():\n                gr.Markdown(description)\n        with gr.Column():\n            gr.Video('https://github.com/myshell-ai/OpenVoice/assets/40556743/3cba936f-82bf-476c-9e52-09f0f417bb2f', autoplay=True)\n            \n    with gr.Row():\n        gr.HTML(wrapped_markdown_content)\n\n    with gr.Row():\n        with gr.Column():\n            input_text_gr = gr.Textbox(\n                label=\"Text Prompt\",\n                info=\"One or two sentences at a time produces the best results. Up to 200 text characters.\",\n                value=\"He hoped there would be stew for dinner, turnips and carrots and bruised potatoes and fat mutton pieces to be ladled out in thick, peppered, flour-fattened sauce.\",\n            )\n            style_gr = gr.Dropdown(\n                label=\"Style\",\n                info=\"Select a style of output audio for the synthesised speech. (Chinese only support 'default' now)\",\n                choices=['default', 'whispering', 'cheerful', 'terrified', 'angry', 'sad', 'friendly'],\n                max_choices=1,\n                value=\"default\",\n            )\n            ref_gr = gr.Audio(\n                label=\"Reference Audio\",\n                info=\"Click on the ✎ button to upload your own target speaker audio\",\n                type=\"filepath\",\n                value=\"resources/demo_speaker2.mp3\",\n            )\n            tos_gr = gr.Checkbox(\n                label=\"Agree\",\n                value=False,\n                info=\"I agree to the terms of the cc-by-nc-4.0 license-: https://github.com/myshell-ai/OpenVoice/blob/main/LICENSE\",\n            )\n\n            tts_button = gr.Button(\"Send\", elem_id=\"send-btn\", visible=True)\n\n\n        with gr.Column():\n            out_text_gr = gr.Text(label=\"Info\")\n            audio_gr = gr.Audio(label=\"Synthesised Audio\", autoplay=True)\n            ref_audio_gr = gr.Audio(label=\"Reference Audio Used\")\n\n            gr.Examples(examples,\n                        label=\"Examples\",\n                        inputs=[input_text_gr, style_gr, ref_gr, tos_gr],\n                        outputs=[out_text_gr, audio_gr, ref_audio_gr],\n                        fn=predict,\n                        cache_examples=False,)\n            tts_button.click(predict, [input_text_gr, style_gr, ref_gr, tos_gr], outputs=[out_text_gr, audio_gr, ref_audio_gr])\n\ndemo.queue()  \ndemo.launch(debug=True, show_api=True, share=args.share)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/se_extractor.py",
    "content": "import os\nimport glob\nimport torch\nimport hashlib\nimport librosa\nimport base64\nfrom glob import glob\nimport numpy as np\nfrom pydub import AudioSegment\nfrom faster_whisper import WhisperModel\nimport hashlib\nimport base64\nimport librosa\n# from whisper_timestamped.transcribe import get_audio_tensor, get_vad_segments\n\nmodel_size = \"medium\"\n# Run on GPU with FP16\nmodel = None\ndef split_audio_whisper(audio_path, audio_name, target_dir='processed'):\n    global model\n    if model is None:\n        model = WhisperModel(model_size, device=\"cuda\", compute_type=\"float16\")\n    audio = AudioSegment.from_file(audio_path)\n    max_len = len(audio)\n\n    target_folder = os.path.join(target_dir, audio_name)\n    \n    segments, info = model.transcribe(audio_path, beam_size=5, word_timestamps=True)\n    segments = list(segments)    \n\n    # create directory\n    os.makedirs(target_folder, exist_ok=True)\n    wavs_folder = os.path.join(target_folder, 'wavs')\n    os.makedirs(wavs_folder, exist_ok=True)\n\n    # segments\n    s_ind = 0\n    start_time = None\n    \n    for k, w in enumerate(segments):\n        # process with the time\n        if k == 0:\n            start_time = max(0, w.start)\n\n        end_time = w.end\n\n        # calculate confidence\n        if len(w.words) > 0:\n            confidence = sum([s.probability for s in w.words]) / len(w.words)\n        else:\n            confidence = 0.\n        # clean text\n        text = w.text.replace('...', '')\n\n        # left 0.08s for each audios\n        audio_seg = audio[int( start_time * 1000) : min(max_len, int(end_time * 1000) + 80)]\n\n        # segment file name\n        fname = f\"{audio_name}_seg{s_ind}.wav\"\n\n        # filter out the segment shorter than 1.5s and longer than 20s\n        save = audio_seg.duration_seconds > 1.5 and \\\n                audio_seg.duration_seconds < 20. and \\\n                len(text) >= 2 and len(text) < 200 \n\n        if save:\n            output_file = os.path.join(wavs_folder, fname)\n            audio_seg.export(output_file, format='wav')\n\n        if k < len(segments) - 1:\n            start_time = max(0, segments[k+1].start - 0.08)\n\n        s_ind = s_ind + 1\n    return wavs_folder\n\n\ndef split_audio_vad(audio_path, audio_name, target_dir, split_seconds=10.0):\n    SAMPLE_RATE = 16000\n    audio_vad = get_audio_tensor(audio_path)\n    segments = get_vad_segments(\n        audio_vad,\n        output_sample=True,\n        min_speech_duration=0.1,\n        min_silence_duration=1,\n        method=\"silero\",\n    )\n    segments = [(seg[\"start\"], seg[\"end\"]) for seg in segments]\n    segments = [(float(s) / SAMPLE_RATE, float(e) / SAMPLE_RATE) for s,e in segments]\n    print(segments)\n    audio_active = AudioSegment.silent(duration=0)\n    audio = AudioSegment.from_file(audio_path)\n\n    for start_time, end_time in segments:\n        audio_active += audio[int( start_time * 1000) : int(end_time * 1000)]\n    \n    audio_dur = audio_active.duration_seconds\n    print(f'after vad: dur = {audio_dur}')\n    target_folder = os.path.join(target_dir, audio_name)\n    wavs_folder = os.path.join(target_folder, 'wavs')\n    os.makedirs(wavs_folder, exist_ok=True)\n    start_time = 0.\n    count = 0\n    num_splits = int(np.round(audio_dur / split_seconds))\n    assert num_splits > 0, 'input audio is too short'\n    interval = audio_dur / num_splits\n\n    for i in range(num_splits):\n        end_time = min(start_time + interval, audio_dur)\n        if i == num_splits - 1:\n            end_time = audio_dur\n        output_file = f\"{wavs_folder}/{audio_name}_seg{count}.wav\"\n        audio_seg = audio_active[int(start_time * 1000): int(end_time * 1000)]\n        audio_seg.export(output_file, format='wav')\n        start_time = end_time\n        count += 1\n    return wavs_folder\n\ndef hash_numpy_array(audio_path):\n    array, _ = librosa.load(audio_path, sr=None, mono=True)\n    # Convert the array to bytes\n    array_bytes = array.tobytes()\n    # Calculate the hash of the array bytes\n    hash_object = hashlib.sha256(array_bytes)\n    hash_value = hash_object.digest()\n    # Convert the hash value to base64\n    base64_value = base64.b64encode(hash_value)\n    return base64_value.decode('utf-8')[:16].replace('/', '_^')\n\ndef get_se(audio_path, vc_model, target_dir='processed', vad=True):\n    device = vc_model.device\n    version = vc_model.version\n    print(\"OpenVoice version:\", version)\n\n    audio_name = f\"{os.path.basename(audio_path).rsplit('.', 1)[0]}_{version}_{hash_numpy_array(audio_path)}\"\n    se_path = os.path.join(target_dir, audio_name, 'se.pth')\n\n    # if os.path.isfile(se_path):\n    #     se = torch.load(se_path).to(device)\n    #     return se, audio_name\n    # if os.path.isdir(audio_path):\n    #     wavs_folder = audio_path\n    \n    # if vad:\n    #     wavs_folder = split_audio_vad(audio_path, target_dir=target_dir, audio_name=audio_name)\n    # else:\n    #     wavs_folder = split_audio_whisper(audio_path, target_dir=target_dir, audio_name=audio_name)\n    \n    # audio_segs = glob(f'{wavs_folder}/*.wav')\n    # if len(audio_segs) == 0:\n    #     raise NotImplementedError('No audio segments found!')\n    \n    return vc_model.extract_se([audio_path], se_save_path=se_path), audio_name\n\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/transforms.py",
    "content": "import torch\nfrom torch.nn import functional as F\n\nimport numpy as np\n\n\nDEFAULT_MIN_BIN_WIDTH = 1e-3\nDEFAULT_MIN_BIN_HEIGHT = 1e-3\nDEFAULT_MIN_DERIVATIVE = 1e-3\n\n\ndef piecewise_rational_quadratic_transform(\n    inputs,\n    unnormalized_widths,\n    unnormalized_heights,\n    unnormalized_derivatives,\n    inverse=False,\n    tails=None,\n    tail_bound=1.0,\n    min_bin_width=DEFAULT_MIN_BIN_WIDTH,\n    min_bin_height=DEFAULT_MIN_BIN_HEIGHT,\n    min_derivative=DEFAULT_MIN_DERIVATIVE,\n):\n    if tails is None:\n        spline_fn = rational_quadratic_spline\n        spline_kwargs = {}\n    else:\n        spline_fn = unconstrained_rational_quadratic_spline\n        spline_kwargs = {\"tails\": tails, \"tail_bound\": tail_bound}\n\n    outputs, logabsdet = spline_fn(\n        inputs=inputs,\n        unnormalized_widths=unnormalized_widths,\n        unnormalized_heights=unnormalized_heights,\n        unnormalized_derivatives=unnormalized_derivatives,\n        inverse=inverse,\n        min_bin_width=min_bin_width,\n        min_bin_height=min_bin_height,\n        min_derivative=min_derivative,\n        **spline_kwargs\n    )\n    return outputs, logabsdet\n\n\ndef searchsorted(bin_locations, inputs, eps=1e-6):\n    bin_locations[..., -1] += eps\n    return torch.sum(inputs[..., None] >= bin_locations, dim=-1) - 1\n\n\ndef unconstrained_rational_quadratic_spline(\n    inputs,\n    unnormalized_widths,\n    unnormalized_heights,\n    unnormalized_derivatives,\n    inverse=False,\n    tails=\"linear\",\n    tail_bound=1.0,\n    min_bin_width=DEFAULT_MIN_BIN_WIDTH,\n    min_bin_height=DEFAULT_MIN_BIN_HEIGHT,\n    min_derivative=DEFAULT_MIN_DERIVATIVE,\n):\n    inside_interval_mask = (inputs >= -tail_bound) & (inputs <= tail_bound)\n    outside_interval_mask = ~inside_interval_mask\n\n    outputs = torch.zeros_like(inputs)\n    logabsdet = torch.zeros_like(inputs)\n\n    if tails == \"linear\":\n        unnormalized_derivatives = F.pad(unnormalized_derivatives, pad=(1, 1))\n        constant = np.log(np.exp(1 - min_derivative) - 1)\n        unnormalized_derivatives[..., 0] = constant\n        unnormalized_derivatives[..., -1] = constant\n\n        outputs[outside_interval_mask] = inputs[outside_interval_mask]\n        logabsdet[outside_interval_mask] = 0\n    else:\n        raise RuntimeError(\"{} tails are not implemented.\".format(tails))\n\n    (\n        outputs[inside_interval_mask],\n        logabsdet[inside_interval_mask],\n    ) = rational_quadratic_spline(\n        inputs=inputs[inside_interval_mask],\n        unnormalized_widths=unnormalized_widths[inside_interval_mask, :],\n        unnormalized_heights=unnormalized_heights[inside_interval_mask, :],\n        unnormalized_derivatives=unnormalized_derivatives[inside_interval_mask, :],\n        inverse=inverse,\n        left=-tail_bound,\n        right=tail_bound,\n        bottom=-tail_bound,\n        top=tail_bound,\n        min_bin_width=min_bin_width,\n        min_bin_height=min_bin_height,\n        min_derivative=min_derivative,\n    )\n\n    return outputs, logabsdet\n\n\ndef rational_quadratic_spline(\n    inputs,\n    unnormalized_widths,\n    unnormalized_heights,\n    unnormalized_derivatives,\n    inverse=False,\n    left=0.0,\n    right=1.0,\n    bottom=0.0,\n    top=1.0,\n    min_bin_width=DEFAULT_MIN_BIN_WIDTH,\n    min_bin_height=DEFAULT_MIN_BIN_HEIGHT,\n    min_derivative=DEFAULT_MIN_DERIVATIVE,\n):\n    if torch.min(inputs) < left or torch.max(inputs) > right:\n        raise ValueError(\"Input to a transform is not within its domain\")\n\n    num_bins = unnormalized_widths.shape[-1]\n\n    if min_bin_width * num_bins > 1.0:\n        raise ValueError(\"Minimal bin width too large for the number of bins\")\n    if min_bin_height * num_bins > 1.0:\n        raise ValueError(\"Minimal bin height too large for the number of bins\")\n\n    widths = F.softmax(unnormalized_widths, dim=-1)\n    widths = min_bin_width + (1 - min_bin_width * num_bins) * widths\n    cumwidths = torch.cumsum(widths, dim=-1)\n    cumwidths = F.pad(cumwidths, pad=(1, 0), mode=\"constant\", value=0.0)\n    cumwidths = (right - left) * cumwidths + left\n    cumwidths[..., 0] = left\n    cumwidths[..., -1] = right\n    widths = cumwidths[..., 1:] - cumwidths[..., :-1]\n\n    derivatives = min_derivative + F.softplus(unnormalized_derivatives)\n\n    heights = F.softmax(unnormalized_heights, dim=-1)\n    heights = min_bin_height + (1 - min_bin_height * num_bins) * heights\n    cumheights = torch.cumsum(heights, dim=-1)\n    cumheights = F.pad(cumheights, pad=(1, 0), mode=\"constant\", value=0.0)\n    cumheights = (top - bottom) * cumheights + bottom\n    cumheights[..., 0] = bottom\n    cumheights[..., -1] = top\n    heights = cumheights[..., 1:] - cumheights[..., :-1]\n\n    if inverse:\n        bin_idx = searchsorted(cumheights, inputs)[..., None]\n    else:\n        bin_idx = searchsorted(cumwidths, inputs)[..., None]\n\n    input_cumwidths = cumwidths.gather(-1, bin_idx)[..., 0]\n    input_bin_widths = widths.gather(-1, bin_idx)[..., 0]\n\n    input_cumheights = cumheights.gather(-1, bin_idx)[..., 0]\n    delta = heights / widths\n    input_delta = delta.gather(-1, bin_idx)[..., 0]\n\n    input_derivatives = derivatives.gather(-1, bin_idx)[..., 0]\n    input_derivatives_plus_one = derivatives[..., 1:].gather(-1, bin_idx)[..., 0]\n\n    input_heights = heights.gather(-1, bin_idx)[..., 0]\n\n    if inverse:\n        a = (inputs - input_cumheights) * (\n            input_derivatives + input_derivatives_plus_one - 2 * input_delta\n        ) + input_heights * (input_delta - input_derivatives)\n        b = input_heights * input_derivatives - (inputs - input_cumheights) * (\n            input_derivatives + input_derivatives_plus_one - 2 * input_delta\n        )\n        c = -input_delta * (inputs - input_cumheights)\n\n        discriminant = b.pow(2) - 4 * a * c\n        assert (discriminant >= 0).all()\n\n        root = (2 * c) / (-b - torch.sqrt(discriminant))\n        outputs = root * input_bin_widths + input_cumwidths\n\n        theta_one_minus_theta = root * (1 - root)\n        denominator = input_delta + (\n            (input_derivatives + input_derivatives_plus_one - 2 * input_delta)\n            * theta_one_minus_theta\n        )\n        derivative_numerator = input_delta.pow(2) * (\n            input_derivatives_plus_one * root.pow(2)\n            + 2 * input_delta * theta_one_minus_theta\n            + input_derivatives * (1 - root).pow(2)\n        )\n        logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator)\n\n        return outputs, -logabsdet\n    else:\n        theta = (inputs - input_cumwidths) / input_bin_widths\n        theta_one_minus_theta = theta * (1 - theta)\n\n        numerator = input_heights * (\n            input_delta * theta.pow(2) + input_derivatives * theta_one_minus_theta\n        )\n        denominator = input_delta + (\n            (input_derivatives + input_derivatives_plus_one - 2 * input_delta)\n            * theta_one_minus_theta\n        )\n        outputs = input_cumheights + numerator / denominator\n\n        derivative_numerator = input_delta.pow(2) * (\n            input_derivatives_plus_one * theta.pow(2)\n            + 2 * input_delta * theta_one_minus_theta\n            + input_derivatives * (1 - theta).pow(2)\n        )\n        logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator)\n\n        return outputs, logabsdet\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/openvoice/utils.py",
    "content": "import re\nimport json\nimport numpy as np\n\n\ndef get_hparams_from_file(config_path):\n    with open(config_path, \"r\", encoding=\"utf-8\") as f:\n        data = f.read()\n    config = json.loads(data)\n\n    hparams = HParams(**config)\n    return hparams\n\nclass HParams:\n    def __init__(self, **kwargs):\n        for k, v in kwargs.items():\n            if type(v) == dict:\n                v = HParams(**v)\n            self[k] = v\n\n    def keys(self):\n        return self.__dict__.keys()\n\n    def items(self):\n        return self.__dict__.items()\n\n    def values(self):\n        return self.__dict__.values()\n\n    def __len__(self):\n        return len(self.__dict__)\n\n    def __getitem__(self, key):\n        return getattr(self, key)\n\n    def __setitem__(self, key, value):\n        return setattr(self, key, value)\n\n    def __contains__(self, key):\n        return key in self.__dict__\n\n    def __repr__(self):\n        return self.__dict__.__repr__()\n\n\ndef string_to_bits(string, pad_len=8):\n    # Convert each character to its ASCII value\n    ascii_values = [ord(char) for char in string]\n    \n    # Convert ASCII values to binary representation\n    binary_values = [bin(value)[2:].zfill(8) for value in ascii_values]\n    \n    # Convert binary strings to integer arrays\n    bit_arrays = [[int(bit) for bit in binary] for binary in binary_values]\n    \n    # Convert list of arrays to NumPy array\n    numpy_array = np.array(bit_arrays)\n    numpy_array_full = np.zeros((pad_len, 8), dtype=numpy_array.dtype)\n    numpy_array_full[:, 2] = 1\n    max_len = min(pad_len, len(numpy_array))\n    numpy_array_full[:max_len] = numpy_array[:max_len]\n    return numpy_array_full\n\n\ndef bits_to_string(bits_array):\n    # Convert each row of the array to a binary string\n    binary_values = [''.join(str(bit) for bit in row) for row in bits_array]\n    \n    # Convert binary strings to ASCII values\n    ascii_values = [int(binary, 2) for binary in binary_values]\n    \n    # Convert ASCII values to characters\n    output_string = ''.join(chr(value) for value in ascii_values)\n    \n    return output_string\n\n\ndef split_segment(text, min_len=10, language_str='[EN]'):\n    if language_str in ['EN']:\n        segments = split_segments_latin(text, min_len=min_len)\n    else:\n        segments = split_segments_zh(text, min_len=min_len)\n    return segments\n\ndef split_segments_latin(text, min_len=10):\n    \"\"\"Split Long sentences into list of short segments.\n\n    Args:\n        str: Input sentences.\n\n    Returns:\n        List[str]: list of output segments.\n    \"\"\"\n    # deal with dirty text characters\n    text = re.sub('[。！？；]', '.', text)\n    text = re.sub('[，]', ',', text)\n    text = re.sub('[“”]', '\"', text)\n    text = re.sub('[‘’]', \"'\", text)\n    text = re.sub(r\"[\\<\\>\\(\\)\\[\\]\\\"\\«\\»]+\", \"\", text)\n    text = re.sub('[\\n\\t ]+', ' ', text)\n    text = re.sub('([,.!?;])', r'\\1 $#!', text)\n    # split\n    segments = [s.strip() for s in text.split('$#!')]\n    if len(segments[-1]) == 0: del segments[-1]\n\n    new_segments = []\n    new_sent = []\n    count_len = 0\n    for ind, sent in enumerate(segments):\n        # print(sent)\n        new_sent.append(sent)\n        count_len += len(sent.split(\" \"))\n        if count_len > min_len or ind == len(segments) - 1:\n            count_len = 0\n            new_segments.append(' '.join(new_sent))\n            new_sent = []\n    return merge_short_segments_latin(new_segments)\n\n\ndef merge_short_segments_latin(sens):\n    \"\"\"Avoid short segments by merging them with the following segment.\n\n    Args:\n        List[str]: list of input segments.\n\n    Returns:\n        List[str]: list of output segments.\n    \"\"\"\n    sens_out = []\n    for s in sens:\n        # If the previous segment is too short, merge them with\n        # the current segment.\n        if len(sens_out) > 0 and len(sens_out[-1].split(\" \")) <= 2:\n            sens_out[-1] = sens_out[-1] + \" \" + s\n        else:\n            sens_out.append(s)\n    try:\n        if len(sens_out[-1].split(\" \")) <= 2:\n            sens_out[-2] = sens_out[-2] + \" \" + sens_out[-1]\n            sens_out.pop(-1)\n    except Exception:\n        pass\n    return sens_out\n\ndef split_segments_zh(text, min_len=10):\n    text = re.sub('[。！？；]', '.', text)\n    text = re.sub('[，]', ',', text)\n    # 将文本中的换行符、空格和制表符替换为空格\n    text = re.sub('[\\n\\t ]+', ' ', text)\n    # 在标点符号后添加一个空格\n    text = re.sub('([,.!?;])', r'\\1 $#!', text)\n    # 分隔句子并去除前后空格\n    # segments = [s.strip() for s in re.split('(。|！|？|；)', text)]\n    segments = [s.strip() for s in text.split('$#!')]\n    if len(segments[-1]) == 0: del segments[-1]\n\n    new_segments = []\n    new_sent = []\n    count_len = 0\n    for ind, sent in enumerate(segments):\n        new_sent.append(sent)\n        count_len += len(sent)\n        if count_len > min_len or ind == len(segments) - 1:\n            count_len = 0\n            new_segments.append(' '.join(new_sent))\n            new_sent = []\n    return merge_short_segments_zh(new_segments)\n\n\ndef merge_short_segments_zh(sens):\n    # return sens\n    \"\"\"Avoid short segments by merging them with the following segment.\n\n    Args:\n        List[str]: list of input segments.\n\n    Returns:\n        List[str]: list of output segments.\n    \"\"\"\n    sens_out = []\n    for s in sens:\n        # If the previous sentense is too short, merge them with\n        # the current segment.\n        if len(sens_out) > 0 and len(sens_out[-1]) <= 2:\n            sens_out[-1] = sens_out[-1] + \" \" + s\n        else:\n            sens_out.append(s)\n    try:\n        if len(sens_out[-1]) <= 2:\n            sens_out[-2] = sens_out[-2] + \" \" + sens_out[-1]\n            sens_out.pop(-1)\n    except Exception:\n        pass\n    return sens_out"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/quantize.py",
    "content": "from dac.nn.quantize import ResidualVectorQuantize\nfrom torch import nn\nfrom modules.wavenet import WN\nimport torch\nimport torchaudio\nimport torchaudio.functional as audio_F\nimport numpy as np\nfrom .alias_free_torch import *\nfrom torch.nn.utils import weight_norm\nfrom torch import nn, sin, pow\nfrom einops.layers.torch import Rearrange\nfrom dac.model.encodec import SConv1d\n\ndef init_weights(m):\n    if isinstance(m, nn.Conv1d):\n        nn.init.trunc_normal_(m.weight, std=0.02)\n        nn.init.constant_(m.bias, 0)\n\n\ndef WNConv1d(*args, **kwargs):\n    return weight_norm(nn.Conv1d(*args, **kwargs))\n\n\ndef WNConvTranspose1d(*args, **kwargs):\n    return weight_norm(nn.ConvTranspose1d(*args, **kwargs))\n\nclass SnakeBeta(nn.Module):\n    \"\"\"\n    A modified Snake function which uses separate parameters for the magnitude of the periodic components\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter that controls frequency\n        - beta - trainable parameter that controls magnitude\n    References:\n        - This activation function is a modified version based on this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snakebeta(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    \"\"\"\n\n    def __init__(\n        self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False\n    ):\n        \"\"\"\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha - trainable parameter that controls frequency\n            - beta - trainable parameter that controls magnitude\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            beta is initialized to 1 by default, higher values = higher-magnitude.\n            alpha will be trained along with the rest of your model.\n        \"\"\"\n        super(SnakeBeta, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale:  # log scale alphas initialized to zeros\n            self.alpha = nn.Parameter(torch.zeros(in_features) * alpha)\n            self.beta = nn.Parameter(torch.zeros(in_features) * alpha)\n        else:  # linear scale alphas initialized to ones\n            self.alpha = nn.Parameter(torch.ones(in_features) * alpha)\n            self.beta = nn.Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n        self.beta.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        \"\"\"\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        SnakeBeta := x + 1/b * sin^2 (xa)\n        \"\"\"\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1)  # line up with x to [B, C, T]\n        beta = self.beta.unsqueeze(0).unsqueeze(-1)\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n            beta = torch.exp(beta)\n        x = x + (1.0 / (beta + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x\n\nclass ResidualUnit(nn.Module):\n    def __init__(self, dim: int = 16, dilation: int = 1):\n        super().__init__()\n        pad = ((7 - 1) * dilation) // 2\n        self.block = nn.Sequential(\n            Activation1d(activation=SnakeBeta(dim, alpha_logscale=True)),\n            WNConv1d(dim, dim, kernel_size=7, dilation=dilation, padding=pad),\n            Activation1d(activation=SnakeBeta(dim, alpha_logscale=True)),\n            WNConv1d(dim, dim, kernel_size=1),\n        )\n\n    def forward(self, x):\n        return x + self.block(x)\n\nclass CNNLSTM(nn.Module):\n    def __init__(self, indim, outdim, head, global_pred=False):\n        super().__init__()\n        self.global_pred = global_pred\n        self.model = nn.Sequential(\n            ResidualUnit(indim, dilation=1),\n            ResidualUnit(indim, dilation=2),\n            ResidualUnit(indim, dilation=3),\n            Activation1d(activation=SnakeBeta(indim, alpha_logscale=True)),\n            Rearrange(\"b c t -> b t c\"),\n        )\n        self.heads = nn.ModuleList([nn.Linear(indim, outdim) for i in range(head)])\n\n    def forward(self, x):\n        # x: [B, C, T]\n        x = self.model(x)\n        if self.global_pred:\n            x = torch.mean(x, dim=1, keepdim=False)\n        outs = [head(x) for head in self.heads]\n        return outs\n\ndef sequence_mask(length, max_length=None):\n  if max_length is None:\n    max_length = length.max()\n  x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n  return x.unsqueeze(0) < length.unsqueeze(1)\nclass FAquantizer(nn.Module):\n    def __init__(self, in_dim=1024,\n                 n_p_codebooks=1,\n                 n_c_codebooks=2,\n                 n_t_codebooks=2,\n                 n_r_codebooks=3,\n                 codebook_size=1024,\n                 codebook_dim=8,\n                 quantizer_dropout=0.5,\n                 causal=False,\n                 separate_prosody_encoder=False,\n                 timbre_norm=False,):\n        super(FAquantizer, self).__init__()\n        conv1d_type = SConv1d# if causal else nn.Conv1d\n        self.prosody_quantizer = ResidualVectorQuantize(\n            input_dim=in_dim,\n            n_codebooks=n_p_codebooks,\n            codebook_size=codebook_size,\n            codebook_dim=codebook_dim,\n            quantizer_dropout=quantizer_dropout,\n        )\n\n        self.content_quantizer = ResidualVectorQuantize(\n            input_dim=in_dim,\n            n_codebooks=n_c_codebooks,\n            codebook_size=codebook_size,\n            codebook_dim=codebook_dim,\n            quantizer_dropout=quantizer_dropout,\n        )\n\n        self.residual_quantizer = ResidualVectorQuantize(\n            input_dim=in_dim,\n            n_codebooks=n_r_codebooks,\n            codebook_size=codebook_size,\n            codebook_dim=codebook_dim,\n            quantizer_dropout=quantizer_dropout,\n        )\n\n        self.melspec_linear = conv1d_type(in_channels=20, out_channels=256, kernel_size=1, causal=causal)\n        self.melspec_encoder = WN(hidden_channels=256, kernel_size=5, dilation_rate=1, n_layers=8, gin_channels=0, p_dropout=0.2, causal=causal)\n        self.melspec_linear2 = conv1d_type(in_channels=256, out_channels=1024, kernel_size=1, causal=causal)\n\n        self.prob_random_mask_residual = 0.75\n\n        SPECT_PARAMS = {\n            \"n_fft\": 2048,\n            \"win_length\": 1200,\n            \"hop_length\": 300,\n        }\n        MEL_PARAMS = {\n            \"n_mels\": 80,\n        }\n\n        self.to_mel = torchaudio.transforms.MelSpectrogram(\n            n_mels=MEL_PARAMS[\"n_mels\"], sample_rate=24000, **SPECT_PARAMS\n        )\n        self.mel_mean, self.mel_std = -4, 4\n        self.frame_rate = 24000 / 300\n        self.hop_length = 300\n\n    def preprocess(self, wave_tensor, n_bins=20):\n        mel_tensor = self.to_mel(wave_tensor.squeeze(1))\n        mel_tensor = (torch.log(1e-5 + mel_tensor) - self.mel_mean) / self.mel_std\n        return mel_tensor[:, :n_bins, :int(wave_tensor.size(-1) / self.hop_length)]\n\n    def forward(self, x, wave_segments):\n        outs = 0\n        prosody_feature = self.preprocess(wave_segments)\n\n        f0_input = prosody_feature  # (B, T, 20)\n        f0_input = self.melspec_linear(f0_input)\n        f0_input = self.melspec_encoder(f0_input, torch.ones(f0_input.shape[0], 1, f0_input.shape[2]).to(\n            f0_input.device).bool())\n        f0_input = self.melspec_linear2(f0_input)\n\n        common_min_size = min(f0_input.size(2), x.size(2))\n        f0_input = f0_input[:, :, :common_min_size]\n\n        x = x[:, :, :common_min_size]\n\n        z_p, codes_p, latents_p, commitment_loss_p, codebook_loss_p = self.prosody_quantizer(\n            f0_input, 1\n        )\n        outs += z_p.detach()\n\n        z_c, codes_c, latents_c, commitment_loss_c, codebook_loss_c = self.content_quantizer(\n            x, 2\n        )\n        outs += z_c.detach()\n\n        residual_feature = x - z_p.detach() - z_c.detach()\n\n        z_r, codes_r, latents_r, commitment_loss_r, codebook_loss_r = self.residual_quantizer(\n            residual_feature, 3\n        )\n\n        quantized = [z_p, z_c, z_r]\n        codes = [codes_p, codes_c, codes_r]\n\n        return quantized, codes"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/rmvpe.py",
    "content": "from io import BytesIO\nimport os\nfrom typing import List, Optional, Tuple\nimport numpy as np\nimport torch\n\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom librosa.util import normalize, pad_center, tiny\nfrom scipy.signal import get_window\n\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\nclass STFT(torch.nn.Module):\n    def __init__(\n        self, filter_length=1024, hop_length=512, win_length=None, window=\"hann\"\n    ):\n        \"\"\"\n        This module implements an STFT using 1D convolution and 1D transpose convolutions.\n        This is a bit tricky so there are some cases that probably won't work as working\n        out the same sizes before and after in all overlap add setups is tough. Right now,\n        this code should work with hop lengths that are half the filter length (50% overlap\n        between frames).\n\n        Keyword Arguments:\n            filter_length {int} -- Length of filters used (default: {1024})\n            hop_length {int} -- Hop length of STFT (restrict to 50% overlap between frames) (default: {512})\n            win_length {[type]} -- Length of the window function applied to each frame (if not specified, it\n                equals the filter length). (default: {None})\n            window {str} -- Type of window to use (options are bartlett, hann, hamming, blackman, blackmanharris)\n                (default: {'hann'})\n        \"\"\"\n        super(STFT, self).__init__()\n        self.filter_length = filter_length\n        self.hop_length = hop_length\n        self.win_length = win_length if win_length else filter_length\n        self.window = window\n        self.forward_transform = None\n        self.pad_amount = int(self.filter_length / 2)\n        fourier_basis = np.fft.fft(np.eye(self.filter_length))\n\n        cutoff = int((self.filter_length / 2 + 1))\n        fourier_basis = np.vstack(\n            [np.real(fourier_basis[:cutoff, :]), np.imag(fourier_basis[:cutoff, :])]\n        )\n        forward_basis = torch.FloatTensor(fourier_basis)\n        inverse_basis = torch.FloatTensor(np.linalg.pinv(fourier_basis))\n\n        assert filter_length >= self.win_length\n        # get window and zero center pad it to filter_length\n        fft_window = get_window(window, self.win_length, fftbins=True)\n        fft_window = pad_center(fft_window, size=filter_length)\n        fft_window = torch.from_numpy(fft_window).float()\n\n        # window the bases\n        forward_basis *= fft_window\n        inverse_basis = (inverse_basis.T * fft_window).T\n\n        self.register_buffer(\"forward_basis\", forward_basis.float())\n        self.register_buffer(\"inverse_basis\", inverse_basis.float())\n        self.register_buffer(\"fft_window\", fft_window.float())\n\n    def transform(self, input_data, return_phase=False):\n        \"\"\"Take input data (audio) to STFT domain.\n\n        Arguments:\n            input_data {tensor} -- Tensor of floats, with shape (num_batch, num_samples)\n\n        Returns:\n            magnitude {tensor} -- Magnitude of STFT with shape (num_batch,\n                num_frequencies, num_frames)\n            phase {tensor} -- Phase of STFT with shape (num_batch,\n                num_frequencies, num_frames)\n        \"\"\"\n        input_data = F.pad(\n            input_data,\n            (self.pad_amount, self.pad_amount),\n            mode=\"reflect\",\n        )\n        forward_transform = input_data.unfold(\n            1, self.filter_length, self.hop_length\n        ).permute(0, 2, 1)\n        forward_transform = torch.matmul(self.forward_basis, forward_transform)\n        cutoff = int((self.filter_length / 2) + 1)\n        real_part = forward_transform[:, :cutoff, :]\n        imag_part = forward_transform[:, cutoff:, :]\n        magnitude = torch.sqrt(real_part**2 + imag_part**2)\n        if return_phase:\n            phase = torch.atan2(imag_part.data, real_part.data)\n            return magnitude, phase\n        else:\n            return magnitude\n\n    def inverse(self, magnitude, phase):\n        \"\"\"Call the inverse STFT (iSTFT), given magnitude and phase tensors produced\n        by the ```transform``` function.\n\n        Arguments:\n            magnitude {tensor} -- Magnitude of STFT with shape (num_batch,\n                num_frequencies, num_frames)\n            phase {tensor} -- Phase of STFT with shape (num_batch,\n                num_frequencies, num_frames)\n\n        Returns:\n            inverse_transform {tensor} -- Reconstructed audio given magnitude and phase. Of\n                shape (num_batch, num_samples)\n        \"\"\"\n        cat = torch.cat(\n            [magnitude * torch.cos(phase), magnitude * torch.sin(phase)], dim=1\n        )\n        fold = torch.nn.Fold(\n            output_size=(1, (cat.size(-1) - 1) * self.hop_length + self.filter_length),\n            kernel_size=(1, self.filter_length),\n            stride=(1, self.hop_length),\n        )\n        inverse_transform = torch.matmul(self.inverse_basis, cat)\n        inverse_transform = fold(inverse_transform)[\n            :, 0, 0, self.pad_amount : -self.pad_amount\n        ]\n        window_square_sum = (\n            self.fft_window.pow(2).repeat(cat.size(-1), 1).T.unsqueeze(0)\n        )\n        window_square_sum = fold(window_square_sum)[\n            :, 0, 0, self.pad_amount : -self.pad_amount\n        ]\n        inverse_transform /= window_square_sum\n        return inverse_transform\n\n    def forward(self, input_data):\n        \"\"\"Take input data (audio) to STFT domain and then back to audio.\n\n        Arguments:\n            input_data {tensor} -- Tensor of floats, with shape (num_batch, num_samples)\n\n        Returns:\n            reconstruction {tensor} -- Reconstructed audio given magnitude and phase. Of\n                shape (num_batch, num_samples)\n        \"\"\"\n        self.magnitude, self.phase = self.transform(input_data, return_phase=True)\n        reconstruction = self.inverse(self.magnitude, self.phase)\n        return reconstruction\n\n\nfrom time import time as ttime\n\n\nclass BiGRU(nn.Module):\n    def __init__(self, input_features, hidden_features, num_layers):\n        super(BiGRU, self).__init__()\n        self.gru = nn.GRU(\n            input_features,\n            hidden_features,\n            num_layers=num_layers,\n            batch_first=True,\n            bidirectional=True,\n        )\n\n    def forward(self, x):\n        return self.gru(x)[0]\n\n\nclass ConvBlockRes(nn.Module):\n    def __init__(self, in_channels, out_channels, momentum=0.01):\n        super(ConvBlockRes, self).__init__()\n        self.conv = nn.Sequential(\n            nn.Conv2d(\n                in_channels=in_channels,\n                out_channels=out_channels,\n                kernel_size=(3, 3),\n                stride=(1, 1),\n                padding=(1, 1),\n                bias=False,\n            ),\n            nn.BatchNorm2d(out_channels, momentum=momentum),\n            nn.ReLU(),\n            nn.Conv2d(\n                in_channels=out_channels,\n                out_channels=out_channels,\n                kernel_size=(3, 3),\n                stride=(1, 1),\n                padding=(1, 1),\n                bias=False,\n            ),\n            nn.BatchNorm2d(out_channels, momentum=momentum),\n            nn.ReLU(),\n        )\n        # self.shortcut:Optional[nn.Module] = None\n        if in_channels != out_channels:\n            self.shortcut = nn.Conv2d(in_channels, out_channels, (1, 1))\n\n    def forward(self, x: torch.Tensor):\n        if not hasattr(self, \"shortcut\"):\n            return self.conv(x) + x\n        else:\n            return self.conv(x) + self.shortcut(x)\n\n\nclass Encoder(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        in_size,\n        n_encoders,\n        kernel_size,\n        n_blocks,\n        out_channels=16,\n        momentum=0.01,\n    ):\n        super(Encoder, self).__init__()\n        self.n_encoders = n_encoders\n        self.bn = nn.BatchNorm2d(in_channels, momentum=momentum)\n        self.layers = nn.ModuleList()\n        self.latent_channels = []\n        for i in range(self.n_encoders):\n            self.layers.append(\n                ResEncoderBlock(\n                    in_channels, out_channels, kernel_size, n_blocks, momentum=momentum\n                )\n            )\n            self.latent_channels.append([out_channels, in_size])\n            in_channels = out_channels\n            out_channels *= 2\n            in_size //= 2\n        self.out_size = in_size\n        self.out_channel = out_channels\n\n    def forward(self, x: torch.Tensor):\n        concat_tensors: List[torch.Tensor] = []\n        x = self.bn(x)\n        for i, layer in enumerate(self.layers):\n            t, x = layer(x)\n            concat_tensors.append(t)\n        return x, concat_tensors\n\n\nclass ResEncoderBlock(nn.Module):\n    def __init__(\n        self, in_channels, out_channels, kernel_size, n_blocks=1, momentum=0.01\n    ):\n        super(ResEncoderBlock, self).__init__()\n        self.n_blocks = n_blocks\n        self.conv = nn.ModuleList()\n        self.conv.append(ConvBlockRes(in_channels, out_channels, momentum))\n        for i in range(n_blocks - 1):\n            self.conv.append(ConvBlockRes(out_channels, out_channels, momentum))\n        self.kernel_size = kernel_size\n        if self.kernel_size is not None:\n            self.pool = nn.AvgPool2d(kernel_size=kernel_size)\n\n    def forward(self, x):\n        for i, conv in enumerate(self.conv):\n            x = conv(x)\n        if self.kernel_size is not None:\n            return x, self.pool(x)\n        else:\n            return x\n\n\nclass Intermediate(nn.Module):  #\n    def __init__(self, in_channels, out_channels, n_inters, n_blocks, momentum=0.01):\n        super(Intermediate, self).__init__()\n        self.n_inters = n_inters\n        self.layers = nn.ModuleList()\n        self.layers.append(\n            ResEncoderBlock(in_channels, out_channels, None, n_blocks, momentum)\n        )\n        for i in range(self.n_inters - 1):\n            self.layers.append(\n                ResEncoderBlock(out_channels, out_channels, None, n_blocks, momentum)\n            )\n\n    def forward(self, x):\n        for i, layer in enumerate(self.layers):\n            x = layer(x)\n        return x\n\n\nclass ResDecoderBlock(nn.Module):\n    def __init__(self, in_channels, out_channels, stride, n_blocks=1, momentum=0.01):\n        super(ResDecoderBlock, self).__init__()\n        out_padding = (0, 1) if stride == (1, 2) else (1, 1)\n        self.n_blocks = n_blocks\n        self.conv1 = nn.Sequential(\n            nn.ConvTranspose2d(\n                in_channels=in_channels,\n                out_channels=out_channels,\n                kernel_size=(3, 3),\n                stride=stride,\n                padding=(1, 1),\n                output_padding=out_padding,\n                bias=False,\n            ),\n            nn.BatchNorm2d(out_channels, momentum=momentum),\n            nn.ReLU(),\n        )\n        self.conv2 = nn.ModuleList()\n        self.conv2.append(ConvBlockRes(out_channels * 2, out_channels, momentum))\n        for i in range(n_blocks - 1):\n            self.conv2.append(ConvBlockRes(out_channels, out_channels, momentum))\n\n    def forward(self, x, concat_tensor):\n        x = self.conv1(x)\n        x = torch.cat((x, concat_tensor), dim=1)\n        for i, conv2 in enumerate(self.conv2):\n            x = conv2(x)\n        return x\n\n\nclass Decoder(nn.Module):\n    def __init__(self, in_channels, n_decoders, stride, n_blocks, momentum=0.01):\n        super(Decoder, self).__init__()\n        self.layers = nn.ModuleList()\n        self.n_decoders = n_decoders\n        for i in range(self.n_decoders):\n            out_channels = in_channels // 2\n            self.layers.append(\n                ResDecoderBlock(in_channels, out_channels, stride, n_blocks, momentum)\n            )\n            in_channels = out_channels\n\n    def forward(self, x: torch.Tensor, concat_tensors: List[torch.Tensor]):\n        for i, layer in enumerate(self.layers):\n            x = layer(x, concat_tensors[-1 - i])\n        return x\n\n\nclass DeepUnet(nn.Module):\n    def __init__(\n        self,\n        kernel_size,\n        n_blocks,\n        en_de_layers=5,\n        inter_layers=4,\n        in_channels=1,\n        en_out_channels=16,\n    ):\n        super(DeepUnet, self).__init__()\n        self.encoder = Encoder(\n            in_channels, 128, en_de_layers, kernel_size, n_blocks, en_out_channels\n        )\n        self.intermediate = Intermediate(\n            self.encoder.out_channel // 2,\n            self.encoder.out_channel,\n            inter_layers,\n            n_blocks,\n        )\n        self.decoder = Decoder(\n            self.encoder.out_channel, en_de_layers, kernel_size, n_blocks\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x, concat_tensors = self.encoder(x)\n        x = self.intermediate(x)\n        x = self.decoder(x, concat_tensors)\n        return x\n\n\nclass E2E(nn.Module):\n    def __init__(\n        self,\n        n_blocks,\n        n_gru,\n        kernel_size,\n        en_de_layers=5,\n        inter_layers=4,\n        in_channels=1,\n        en_out_channels=16,\n    ):\n        super(E2E, self).__init__()\n        self.unet = DeepUnet(\n            kernel_size,\n            n_blocks,\n            en_de_layers,\n            inter_layers,\n            in_channels,\n            en_out_channels,\n        )\n        self.cnn = nn.Conv2d(en_out_channels, 3, (3, 3), padding=(1, 1))\n        if n_gru:\n            self.fc = nn.Sequential(\n                BiGRU(3 * 128, 256, n_gru),\n                nn.Linear(512, 360),\n                nn.Dropout(0.25),\n                nn.Sigmoid(),\n            )\n        else:\n            self.fc = nn.Sequential(\n                nn.Linear(3 * nn.N_MELS, nn.N_CLASS), nn.Dropout(0.25), nn.Sigmoid()\n            )\n\n    def forward(self, mel):\n        # print(mel.shape)\n        mel = mel.transpose(-1, -2).unsqueeze(1)\n        x = self.cnn(self.unet(mel)).transpose(1, 2).flatten(-2)\n        x = self.fc(x)\n        # print(x.shape)\n        return x\n\n\nfrom librosa.filters import mel\n\n\nclass MelSpectrogram(torch.nn.Module):\n    def __init__(\n        self,\n        is_half,\n        n_mel_channels,\n        sampling_rate,\n        win_length,\n        hop_length,\n        n_fft=None,\n        mel_fmin=0,\n        mel_fmax=None,\n        clamp=1e-5,\n    ):\n        super().__init__()\n        n_fft = win_length if n_fft is None else n_fft\n        self.hann_window = {}\n        mel_basis = mel(\n            sr=sampling_rate,\n            n_fft=n_fft,\n            n_mels=n_mel_channels,\n            fmin=mel_fmin,\n            fmax=mel_fmax,\n            htk=True,\n        )\n        mel_basis = torch.from_numpy(mel_basis).float()\n        self.register_buffer(\"mel_basis\", mel_basis)\n        self.n_fft = win_length if n_fft is None else n_fft\n        self.hop_length = hop_length\n        self.win_length = win_length\n        self.sampling_rate = sampling_rate\n        self.n_mel_channels = n_mel_channels\n        self.clamp = clamp\n        self.is_half = is_half\n\n    def forward(self, audio, keyshift=0, speed=1, center=True):\n        factor = 2 ** (keyshift / 12)\n        n_fft_new = int(np.round(self.n_fft * factor))\n        win_length_new = int(np.round(self.win_length * factor))\n        hop_length_new = int(np.round(self.hop_length * speed))\n        keyshift_key = str(keyshift) + \"_\" + str(audio.device)\n        if keyshift_key not in self.hann_window:\n            self.hann_window[keyshift_key] = torch.hann_window(win_length_new).to(\n                audio.device\n            )\n        if \"privateuseone\" in str(audio.device):\n            if not hasattr(self, \"stft\"):\n                self.stft = STFT(\n                    filter_length=n_fft_new,\n                    hop_length=hop_length_new,\n                    win_length=win_length_new,\n                    window=\"hann\",\n                ).to(audio.device)\n            magnitude = self.stft.transform(audio)\n        else:\n            fft = torch.stft(\n                audio,\n                n_fft=n_fft_new,\n                hop_length=hop_length_new,\n                win_length=win_length_new,\n                window=self.hann_window[keyshift_key],\n                center=center,\n                return_complex=True,\n            )\n            magnitude = torch.sqrt(fft.real.pow(2) + fft.imag.pow(2))\n        if keyshift != 0:\n            size = self.n_fft // 2 + 1\n            resize = magnitude.size(1)\n            if resize < size:\n                magnitude = F.pad(magnitude, (0, 0, 0, size - resize))\n            magnitude = magnitude[:, :size, :] * self.win_length / win_length_new\n        mel_output = torch.matmul(self.mel_basis, magnitude)\n        if self.is_half == True:\n            mel_output = mel_output.half()\n        log_mel_spec = torch.log(torch.clamp(mel_output, min=self.clamp))\n        return log_mel_spec\n\n\nclass RMVPE:\n    def __init__(self, model_path: str, is_half, device=None, use_jit=False):\n        self.resample_kernel = {}\n        self.resample_kernel = {}\n        self.is_half = is_half\n        if device is None:\n            device = \"cuda:0\" if torch.cuda.is_available() else \"cpu\"\n        self.device = device\n        self.mel_extractor = MelSpectrogram(\n            is_half, 128, 16000, 1024, 160, None, 30, 8000\n        ).to(device)\n        if \"privateuseone\" in str(device):\n            import onnxruntime as ort\n\n            ort_session = ort.InferenceSession(\n                \"%s/rmvpe.onnx\" % os.environ[\"rmvpe_root\"],\n                providers=[\"DmlExecutionProvider\"],\n            )\n            self.model = ort_session\n        else:\n            if str(self.device) == \"cuda\":\n                self.device = torch.device(\"cuda:0\")\n\n            def get_default_model():\n                model = E2E(4, 1, (2, 2))\n                ckpt = torch.load(model_path, map_location=\"cpu\")\n                model.load_state_dict(ckpt)\n                model.eval()\n                if is_half:\n                    model = model.half()\n                else:\n                    model = model.float()\n                return model\n\n            self.model = get_default_model()\n\n            self.model = self.model.to(device)\n        cents_mapping = 20 * np.arange(360) + 1997.3794084376191\n        self.cents_mapping = np.pad(cents_mapping, (4, 4))  # 368\n\n    def mel2hidden(self, mel):\n        with torch.no_grad():\n            n_frames = mel.shape[-1]\n            n_pad = 32 * ((n_frames - 1) // 32 + 1) - n_frames\n            if n_pad > 0:\n                mel = F.pad(mel, (0, n_pad), mode=\"constant\")\n            if \"privateuseone\" in str(self.device):\n                onnx_input_name = self.model.get_inputs()[0].name\n                onnx_outputs_names = self.model.get_outputs()[0].name\n                hidden = self.model.run(\n                    [onnx_outputs_names],\n                    input_feed={onnx_input_name: mel.cpu().numpy()},\n                )[0]\n            else:\n                mel = mel.half() if self.is_half else mel.float()\n                hidden = self.model(mel)\n            return hidden[:, :n_frames]\n\n    def decode(self, hidden, thred=0.03):\n        cents_pred = self.to_local_average_cents(hidden, thred=thred)\n        f0 = 10 * (2 ** (cents_pred / 1200))\n        f0[f0 == 10] = 0\n        # f0 = np.array([10 * (2 ** (cent_pred / 1200)) if cent_pred else 0 for cent_pred in cents_pred])\n        return f0\n\n    def infer_from_audio(self, audio, thred=0.03):\n        # torch.cuda.synchronize()\n        # t0 = ttime()\n        if not torch.is_tensor(audio):\n            audio = torch.from_numpy(audio)\n        mel = self.mel_extractor(\n            audio.float().to(self.device).unsqueeze(0), center=True\n        )\n        # print(123123123,mel.device.type)\n        # torch.cuda.synchronize()\n        # t1 = ttime()\n        hidden = self.mel2hidden(mel)\n        # torch.cuda.synchronize()\n        # t2 = ttime()\n        # print(234234,hidden.device.type)\n        if \"privateuseone\" not in str(self.device):\n            hidden = hidden.squeeze(0).cpu().numpy()\n        else:\n            hidden = hidden[0]\n        if self.is_half == True:\n            hidden = hidden.astype(\"float32\")\n\n        f0 = self.decode(hidden, thred=thred)\n        # torch.cuda.synchronize()\n        # t3 = ttime()\n        # print(\"hmvpe:%s\\t%s\\t%s\\t%s\"%(t1-t0,t2-t1,t3-t2,t3-t0))\n        return f0\n    def infer_from_audio_batch(self, audio, thred=0.03):\n        # torch.cuda.synchronize()\n        # t0 = ttime()\n        if not torch.is_tensor(audio):\n            audio = torch.from_numpy(audio)\n        mel = self.mel_extractor(\n            audio.float().to(self.device), center=True\n        )\n        # print(123123123,mel.device.type)\n        # torch.cuda.synchronize()\n        # t1 = ttime()\n        hidden = self.mel2hidden(mel)\n        # torch.cuda.synchronize()\n        # t2 = ttime()\n        # print(234234,hidden.device.type)\n        if \"privateuseone\" not in str(self.device):\n            hidden = hidden.cpu().numpy()\n        else:\n            pass\n        if self.is_half == True:\n            hidden = hidden.astype(\"float32\")\n\n        f0s = []\n        for bib in range(hidden.shape[0]):\n            f0s.append(self.decode(hidden[bib], thred=thred))\n        f0s = np.stack(f0s)\n        f0s = torch.from_numpy(f0s).to(self.device)\n        # torch.cuda.synchronize()\n        # t3 = ttime()\n        # print(\"hmvpe:%s\\t%s\\t%s\\t%s\"%(t1-t0,t2-t1,t3-t2,t3-t0))\n        return f0s\n\n    def to_local_average_cents(self, salience, thred=0.05):\n        # t0 = ttime()\n        center = np.argmax(salience, axis=1)  # 帧长#index\n        salience = np.pad(salience, ((0, 0), (4, 4)))  # 帧长,368\n        # t1 = ttime()\n        center += 4\n        todo_salience = []\n        todo_cents_mapping = []\n        starts = center - 4\n        ends = center + 5\n        for idx in range(salience.shape[0]):\n            todo_salience.append(salience[:, starts[idx] : ends[idx]][idx])\n            todo_cents_mapping.append(self.cents_mapping[starts[idx] : ends[idx]])\n        # t2 = ttime()\n        todo_salience = np.array(todo_salience)  # 帧长，9\n        todo_cents_mapping = np.array(todo_cents_mapping)  # 帧长，9\n        product_sum = np.sum(todo_salience * todo_cents_mapping, 1)\n        weight_sum = np.sum(todo_salience, 1)  # 帧长\n        devided = product_sum / weight_sum  # 帧长\n        # t3 = ttime()\n        maxx = np.max(salience, axis=1)  # 帧长\n        devided[maxx <= thred] = 0\n        # t4 = ttime()\n        # print(\"decode:%s\\t%s\\t%s\\t%s\" % (t1 - t0, t2 - t1, t3 - t2, t4 - t3))\n        return devided\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/vocos/__init__.py",
    "content": "from .pretrained import Vocos\n\n\n__version__ = \"0.1.0\"\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/vocos/heads.py",
    "content": "from typing import Optional\n\nimport torch\nfrom torch import nn\nfrom torchaudio.functional.functional import _hz_to_mel, _mel_to_hz\n\nfrom .spectral_ops import IMDCT, ISTFT\nfrom .modules import symexp\n\n\nclass FourierHead(nn.Module):\n    \"\"\"Base class for inverse fourier modules.\"\"\"\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        raise NotImplementedError(\"Subclasses must implement the forward method.\")\n\n\nclass ISTFTHead(FourierHead):\n    \"\"\"\n    ISTFT Head module for predicting STFT complex coefficients.\n\n    Args:\n        dim (int): Hidden dimension of the model.\n        n_fft (int): Size of Fourier transform.\n        hop_length (int): The distance between neighboring sliding window frames, which should align with\n                          the resolution of the input features.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, dim: int, n_fft: int, hop_length: int, padding: str = \"same\"):\n        super().__init__()\n        out_dim = n_fft + 2\n        self.out = torch.nn.Linear(dim, out_dim)\n        self.istft = ISTFT(n_fft=n_fft, hop_length=hop_length, win_length=n_fft, padding=padding)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Forward pass of the ISTFTHead module.\n\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        x = self.out(x).transpose(1, 2)\n        mag, p = x.chunk(2, dim=1)\n        mag = torch.exp(mag)\n        mag = torch.clip(mag, max=1e2)  # safeguard to prevent excessively large magnitudes\n        # wrapping happens here. These two lines produce real and imaginary value\n        x = torch.cos(p)\n        y = torch.sin(p)\n        # recalculating phase here does not produce anything new\n        # only costs time\n        # phase = torch.atan2(y, x)\n        # S = mag * torch.exp(phase * 1j)\n        # better directly produce the complex value \n        S = mag * (x + 1j * y)\n        audio = self.istft(S)\n        return audio\n\n\nclass IMDCTSymExpHead(FourierHead):\n    \"\"\"\n    IMDCT Head module for predicting MDCT coefficients with symmetric exponential function\n\n    Args:\n        dim (int): Hidden dimension of the model.\n        mdct_frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n        sample_rate (int, optional): The sample rate of the audio. If provided, the last layer will be initialized\n                                     based on perceptual scaling. Defaults to None.\n        clip_audio (bool, optional): Whether to clip the audio output within the range of [-1.0, 1.0]. Defaults to False.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        mdct_frame_len: int,\n        padding: str = \"same\",\n        sample_rate: Optional[int] = None,\n        clip_audio: bool = False,\n    ):\n        super().__init__()\n        out_dim = mdct_frame_len // 2\n        self.out = nn.Linear(dim, out_dim)\n        self.imdct = IMDCT(frame_len=mdct_frame_len, padding=padding)\n        self.clip_audio = clip_audio\n\n        if sample_rate is not None:\n            # optionally init the last layer following mel-scale\n            m_max = _hz_to_mel(sample_rate // 2)\n            m_pts = torch.linspace(0, m_max, out_dim)\n            f_pts = _mel_to_hz(m_pts)\n            scale = 1 - (f_pts / f_pts.max())\n\n            with torch.no_grad():\n                self.out.weight.mul_(scale.view(-1, 1))\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Forward pass of the IMDCTSymExpHead module.\n\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        x = self.out(x)\n        x = symexp(x)\n        x = torch.clip(x, min=-1e2, max=1e2)  # safeguard to prevent excessively large magnitudes\n        audio = self.imdct(x)\n        if self.clip_audio:\n            audio = torch.clip(x, min=-1.0, max=1.0)\n\n        return audio\n\n\nclass IMDCTCosHead(FourierHead):\n    \"\"\"\n    IMDCT Head module for predicting MDCT coefficients with parametrizing MDCT = exp(m) · cos(p)\n\n    Args:\n        dim (int): Hidden dimension of the model.\n        mdct_frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n        clip_audio (bool, optional): Whether to clip the audio output within the range of [-1.0, 1.0]. Defaults to False.\n    \"\"\"\n\n    def __init__(self, dim: int, mdct_frame_len: int, padding: str = \"same\", clip_audio: bool = False):\n        super().__init__()\n        self.clip_audio = clip_audio\n        self.out = nn.Linear(dim, mdct_frame_len)\n        self.imdct = IMDCT(frame_len=mdct_frame_len, padding=padding)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Forward pass of the IMDCTCosHead module.\n\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        x = self.out(x)\n        m, p = x.chunk(2, dim=2)\n        m = torch.exp(m).clip(max=1e2)  # safeguard to prevent excessively large magnitudes\n        audio = self.imdct(m * torch.cos(p))\n        if self.clip_audio:\n            audio = torch.clip(x, min=-1.0, max=1.0)\n        return audio\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/vocos/helpers.py",
    "content": "import matplotlib\nimport numpy as np\nimport torch\nfrom matplotlib import pyplot as plt\nfrom pytorch_lightning import Callback\n\nmatplotlib.use(\"Agg\")\n\n\ndef save_figure_to_numpy(fig: plt.Figure) -> np.ndarray:\n    \"\"\"\n    Save a matplotlib figure to a numpy array.\n\n    Args:\n        fig (Figure): Matplotlib figure object.\n\n    Returns:\n        ndarray: Numpy array representing the figure.\n    \"\"\"\n    data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep=\"\")\n    data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))\n    return data\n\n\ndef plot_spectrogram_to_numpy(spectrogram: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Plot a spectrogram and convert it to a numpy array.\n\n    Args:\n        spectrogram (ndarray): Spectrogram data.\n\n    Returns:\n        ndarray: Numpy array representing the plotted spectrogram.\n    \"\"\"\n    spectrogram = spectrogram.astype(np.float32)\n    fig, ax = plt.subplots(figsize=(12, 3))\n    im = ax.imshow(spectrogram, aspect=\"auto\", origin=\"lower\", interpolation=\"none\")\n    plt.colorbar(im, ax=ax)\n    plt.xlabel(\"Frames\")\n    plt.ylabel(\"Channels\")\n    plt.tight_layout()\n\n    fig.canvas.draw()\n    data = save_figure_to_numpy(fig)\n    plt.close()\n    return data\n\n\nclass GradNormCallback(Callback):\n    \"\"\"\n    Callback to log the gradient norm.\n    \"\"\"\n\n    def on_after_backward(self, trainer, model):\n        model.log(\"grad_norm\", gradient_norm(model))\n\n\ndef gradient_norm(model: torch.nn.Module, norm_type: float = 2.0) -> torch.Tensor:\n    \"\"\"\n    Compute the gradient norm.\n\n    Args:\n        model (Module): PyTorch model.\n        norm_type (float, optional): Type of the norm. Defaults to 2.0.\n\n    Returns:\n        Tensor: Gradient norm.\n    \"\"\"\n    grads = [p.grad for p in model.parameters() if p.grad is not None]\n    total_norm = torch.norm(torch.stack([torch.norm(g.detach(), norm_type) for g in grads]), norm_type)\n    return total_norm\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/vocos/loss.py",
    "content": "from typing import List, Tuple\n\nimport torch\nimport torchaudio\nfrom torch import nn\n\nfrom vocos.modules import safe_log\n\n\nclass MelSpecReconstructionLoss(nn.Module):\n    \"\"\"\n    L1 distance between the mel-scaled magnitude spectrograms of the ground truth sample and the generated sample\n    \"\"\"\n\n    def __init__(\n        self, sample_rate: int = 24000, n_fft: int = 1024, hop_length: int = 256, n_mels: int = 100,\n    ):\n        super().__init__()\n        self.mel_spec = torchaudio.transforms.MelSpectrogram(\n            sample_rate=sample_rate, n_fft=n_fft, hop_length=hop_length, n_mels=n_mels, center=True, power=1,\n        )\n\n    def forward(self, y_hat, y) -> torch.Tensor:\n        \"\"\"\n        Args:\n            y_hat (Tensor): Predicted audio waveform.\n            y (Tensor): Ground truth audio waveform.\n\n        Returns:\n            Tensor: L1 loss between the mel-scaled magnitude spectrograms.\n        \"\"\"\n        mel_hat = safe_log(self.mel_spec(y_hat))\n        mel = safe_log(self.mel_spec(y))\n\n        loss = torch.nn.functional.l1_loss(mel, mel_hat)\n\n        return loss\n\n\nclass GeneratorLoss(nn.Module):\n    \"\"\"\n    Generator Loss module. Calculates the loss for the generator based on discriminator outputs.\n    \"\"\"\n\n    def forward(self, disc_outputs: List[torch.Tensor]) -> Tuple[torch.Tensor, List[torch.Tensor]]:\n        \"\"\"\n        Args:\n            disc_outputs (List[Tensor]): List of discriminator outputs.\n\n        Returns:\n            Tuple[Tensor, List[Tensor]]: Tuple containing the total loss and a list of loss values from\n                                         the sub-discriminators\n        \"\"\"\n        loss = torch.zeros(1, device=disc_outputs[0].device, dtype=disc_outputs[0].dtype)\n        gen_losses = []\n        for dg in disc_outputs:\n            l = torch.mean(torch.clamp(1 - dg, min=0))\n            gen_losses.append(l)\n            loss += l\n\n        return loss, gen_losses\n\n\nclass DiscriminatorLoss(nn.Module):\n    \"\"\"\n    Discriminator Loss module. Calculates the loss for the discriminator based on real and generated outputs.\n    \"\"\"\n\n    def forward(\n        self, disc_real_outputs: List[torch.Tensor], disc_generated_outputs: List[torch.Tensor]\n    ) -> Tuple[torch.Tensor, List[torch.Tensor], List[torch.Tensor]]:\n        \"\"\"\n        Args:\n            disc_real_outputs (List[Tensor]): List of discriminator outputs for real samples.\n            disc_generated_outputs (List[Tensor]): List of discriminator outputs for generated samples.\n\n        Returns:\n            Tuple[Tensor, List[Tensor], List[Tensor]]: A tuple containing the total loss, a list of loss values from\n                                                       the sub-discriminators for real outputs, and a list of\n                                                       loss values for generated outputs.\n        \"\"\"\n        loss = torch.zeros(1, device=disc_real_outputs[0].device, dtype=disc_real_outputs[0].dtype)\n        r_losses = []\n        g_losses = []\n        for dr, dg in zip(disc_real_outputs, disc_generated_outputs):\n            r_loss = torch.mean(torch.clamp(1 - dr, min=0))\n            g_loss = torch.mean(torch.clamp(1 + dg, min=0))\n            loss += r_loss + g_loss\n            r_losses.append(r_loss)\n            g_losses.append(g_loss)\n\n        return loss, r_losses, g_losses\n\n\nclass FeatureMatchingLoss(nn.Module):\n    \"\"\"\n    Feature Matching Loss module. Calculates the feature matching loss between feature maps of the sub-discriminators.\n    \"\"\"\n\n    def forward(self, fmap_r: List[List[torch.Tensor]], fmap_g: List[List[torch.Tensor]]) -> torch.Tensor:\n        \"\"\"\n        Args:\n            fmap_r (List[List[Tensor]]): List of feature maps from real samples.\n            fmap_g (List[List[Tensor]]): List of feature maps from generated samples.\n\n        Returns:\n            Tensor: The calculated feature matching loss.\n        \"\"\"\n        loss = torch.zeros(1, device=fmap_r[0][0].device, dtype=fmap_r[0][0].dtype)\n        for dr, dg in zip(fmap_r, fmap_g):\n            for rl, gl in zip(dr, dg):\n                loss += torch.mean(torch.abs(rl - gl))\n\n        return loss\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/vocos/models.py",
    "content": "from typing import Optional\n\nimport torch\nfrom torch import nn\nfrom torch.nn.utils import weight_norm\n\nfrom .modules import ConvNeXtBlock, ResBlock1, AdaLayerNorm\n\n\nclass Backbone(nn.Module):\n    \"\"\"Base class for the generator's backbone. It preserves the same temporal resolution across all layers.\"\"\"\n\n    def forward(self, x: torch.Tensor, **kwargs) -> torch.Tensor:\n        \"\"\"\n        Args:\n            x (Tensor): Input tensor of shape (B, C, L), where B is the batch size,\n                        C denotes output features, and L is the sequence length.\n\n        Returns:\n            Tensor: Output of shape (B, L, H), where B is the batch size, L is the sequence length,\n                    and H denotes the model dimension.\n        \"\"\"\n        raise NotImplementedError(\"Subclasses must implement the forward method.\")\n\n\nclass VocosBackbone(Backbone):\n    \"\"\"\n    Vocos backbone module built with ConvNeXt blocks. Supports additional conditioning with Adaptive Layer Normalization\n\n    Args:\n        input_channels (int): Number of input features channels.\n        dim (int): Hidden dimension of the model.\n        intermediate_dim (int): Intermediate dimension used in ConvNeXtBlock.\n        num_layers (int): Number of ConvNeXtBlock layers.\n        layer_scale_init_value (float, optional): Initial value for layer scaling. Defaults to `1 / num_layers`.\n        adanorm_num_embeddings (int, optional): Number of embeddings for AdaLayerNorm.\n                                                None means non-conditional model. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        input_channels: int,\n        dim: int,\n        intermediate_dim: int,\n        num_layers: int,\n        layer_scale_init_value: Optional[float] = None,\n        adanorm_num_embeddings: Optional[int] = None,\n    ):\n        super().__init__()\n        self.input_channels = input_channels\n        self.embed = nn.Conv1d(input_channels, dim, kernel_size=7, padding=3)\n        self.adanorm = adanorm_num_embeddings is not None\n        if adanorm_num_embeddings:\n            self.norm = AdaLayerNorm(adanorm_num_embeddings, dim, eps=1e-6)\n        else:\n            self.norm = nn.LayerNorm(dim, eps=1e-6)\n        layer_scale_init_value = layer_scale_init_value or 1 / num_layers\n        self.convnext = nn.ModuleList(\n            [\n                ConvNeXtBlock(\n                    dim=dim,\n                    intermediate_dim=intermediate_dim,\n                    layer_scale_init_value=layer_scale_init_value,\n                    adanorm_num_embeddings=adanorm_num_embeddings,\n                )\n                for _ in range(num_layers)\n            ]\n        )\n        self.final_layer_norm = nn.LayerNorm(dim, eps=1e-6)\n        self.apply(self._init_weights)\n\n    def _init_weights(self, m):\n        if isinstance(m, (nn.Conv1d, nn.Linear)):\n            nn.init.trunc_normal_(m.weight, std=0.02)\n            nn.init.constant_(m.bias, 0)\n\n    def forward(self, x: torch.Tensor, **kwargs) -> torch.Tensor:\n        bandwidth_id = kwargs.get('bandwidth_id', None)\n        x = self.embed(x)\n        if self.adanorm:\n            assert bandwidth_id is not None\n            x = self.norm(x.transpose(1, 2), cond_embedding_id=bandwidth_id)\n        else:\n            x = self.norm(x.transpose(1, 2))\n        x = x.transpose(1, 2)\n        for conv_block in self.convnext:\n            x = conv_block(x, cond_embedding_id=bandwidth_id)\n        x = self.final_layer_norm(x.transpose(1, 2))\n        return x\n\n\nclass VocosResNetBackbone(Backbone):\n    \"\"\"\n    Vocos backbone module built with ResBlocks.\n\n    Args:\n        input_channels (int): Number of input features channels.\n        dim (int): Hidden dimension of the model.\n        num_blocks (int): Number of ResBlock1 blocks.\n        layer_scale_init_value (float, optional): Initial value for layer scaling. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self, input_channels, dim, num_blocks, layer_scale_init_value=None,\n    ):\n        super().__init__()\n        self.input_channels = input_channels\n        self.embed = weight_norm(nn.Conv1d(input_channels, dim, kernel_size=3, padding=1))\n        layer_scale_init_value = layer_scale_init_value or 1 / num_blocks / 3\n        self.resnet = nn.Sequential(\n            *[ResBlock1(dim=dim, layer_scale_init_value=layer_scale_init_value) for _ in range(num_blocks)]\n        )\n\n    def forward(self, x: torch.Tensor, **kwargs) -> torch.Tensor:\n        x = self.embed(x)\n        x = self.resnet(x)\n        x = x.transpose(1, 2)\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/vocos/modules.py",
    "content": "from typing import Optional, Tuple\n\nimport torch\nfrom torch import nn\nfrom torch.nn.utils import weight_norm, remove_weight_norm\n\n\nclass ConvNeXtBlock(nn.Module):\n    \"\"\"ConvNeXt Block adapted from https://github.com/facebookresearch/ConvNeXt to 1D audio signal.\n\n    Args:\n        dim (int): Number of input channels.\n        intermediate_dim (int): Dimensionality of the intermediate layer.\n        layer_scale_init_value (float, optional): Initial value for the layer scale. None means no scaling.\n            Defaults to None.\n        adanorm_num_embeddings (int, optional): Number of embeddings for AdaLayerNorm.\n            None means non-conditional LayerNorm. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        intermediate_dim: int,\n        layer_scale_init_value: float,\n        adanorm_num_embeddings: Optional[int] = None,\n    ):\n        super().__init__()\n        self.dwconv = nn.Conv1d(dim, dim, kernel_size=7, padding=3, groups=dim)  # depthwise conv\n        self.adanorm = adanorm_num_embeddings is not None\n        if adanorm_num_embeddings:\n            self.norm = AdaLayerNorm(adanorm_num_embeddings, dim, eps=1e-6)\n        else:\n            self.norm = nn.LayerNorm(dim, eps=1e-6)\n        self.pwconv1 = nn.Linear(dim, intermediate_dim)  # pointwise/1x1 convs, implemented with linear layers\n        self.act = nn.GELU()\n        self.pwconv2 = nn.Linear(intermediate_dim, dim)\n        self.gamma = (\n            nn.Parameter(layer_scale_init_value * torch.ones(dim), requires_grad=True)\n            if layer_scale_init_value > 0\n            else None\n        )\n\n    def forward(self, x: torch.Tensor, cond_embedding_id: Optional[torch.Tensor] = None) -> torch.Tensor:\n        residual = x\n        x = self.dwconv(x)\n        x = x.transpose(1, 2)  # (B, C, T) -> (B, T, C)\n        if self.adanorm:\n            assert cond_embedding_id is not None\n            x = self.norm(x, cond_embedding_id)\n        else:\n            x = self.norm(x)\n        x = self.pwconv1(x)\n        x = self.act(x)\n        x = self.pwconv2(x)\n        if self.gamma is not None:\n            x = self.gamma * x\n        x = x.transpose(1, 2)  # (B, T, C) -> (B, C, T)\n\n        x = residual + x\n        return x\n\n\nclass AdaLayerNorm(nn.Module):\n    \"\"\"\n    Adaptive Layer Normalization module with learnable embeddings per `num_embeddings` classes\n\n    Args:\n        num_embeddings (int): Number of embeddings.\n        embedding_dim (int): Dimension of the embeddings.\n    \"\"\"\n\n    def __init__(self, num_embeddings: int, embedding_dim: int, eps: float = 1e-6):\n        super().__init__()\n        self.eps = eps\n        self.dim = embedding_dim\n        self.scale = nn.Embedding(num_embeddings=num_embeddings, embedding_dim=embedding_dim)\n        self.shift = nn.Embedding(num_embeddings=num_embeddings, embedding_dim=embedding_dim)\n        torch.nn.init.ones_(self.scale.weight)\n        torch.nn.init.zeros_(self.shift.weight)\n\n    def forward(self, x: torch.Tensor, cond_embedding_id: torch.Tensor) -> torch.Tensor:\n        scale = self.scale(cond_embedding_id)\n        shift = self.shift(cond_embedding_id)\n        x = nn.functional.layer_norm(x, (self.dim,), eps=self.eps)\n        x = x * scale + shift\n        return x\n\n\nclass ResBlock1(nn.Module):\n    \"\"\"\n    ResBlock adapted from HiFi-GAN V1 (https://github.com/jik876/hifi-gan) with dilated 1D convolutions,\n    but without upsampling layers.\n\n    Args:\n        dim (int): Number of input channels.\n        kernel_size (int, optional): Size of the convolutional kernel. Defaults to 3.\n        dilation (tuple[int], optional): Dilation factors for the dilated convolutions.\n            Defaults to (1, 3, 5).\n        lrelu_slope (float, optional): Negative slope of the LeakyReLU activation function.\n            Defaults to 0.1.\n        layer_scale_init_value (float, optional): Initial value for the layer scale. None means no scaling.\n            Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        kernel_size: int = 3,\n        dilation: Tuple[int, int, int] = (1, 3, 5),\n        lrelu_slope: float = 0.1,\n        layer_scale_init_value: Optional[float] = None,\n    ):\n        super().__init__()\n        self.lrelu_slope = lrelu_slope\n        self.convs1 = nn.ModuleList(\n            [\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=dilation[0],\n                        padding=self.get_padding(kernel_size, dilation[0]),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=dilation[1],\n                        padding=self.get_padding(kernel_size, dilation[1]),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=dilation[2],\n                        padding=self.get_padding(kernel_size, dilation[2]),\n                    )\n                ),\n            ]\n        )\n\n        self.convs2 = nn.ModuleList(\n            [\n                weight_norm(nn.Conv1d(dim, dim, kernel_size, 1, dilation=1, padding=self.get_padding(kernel_size, 1))),\n                weight_norm(nn.Conv1d(dim, dim, kernel_size, 1, dilation=1, padding=self.get_padding(kernel_size, 1))),\n                weight_norm(nn.Conv1d(dim, dim, kernel_size, 1, dilation=1, padding=self.get_padding(kernel_size, 1))),\n            ]\n        )\n\n        self.gamma = nn.ParameterList(\n            [\n                nn.Parameter(layer_scale_init_value * torch.ones(dim, 1), requires_grad=True)\n                if layer_scale_init_value is not None\n                else None,\n                nn.Parameter(layer_scale_init_value * torch.ones(dim, 1), requires_grad=True)\n                if layer_scale_init_value is not None\n                else None,\n                nn.Parameter(layer_scale_init_value * torch.ones(dim, 1), requires_grad=True)\n                if layer_scale_init_value is not None\n                else None,\n            ]\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        for c1, c2, gamma in zip(self.convs1, self.convs2, self.gamma):\n            xt = torch.nn.functional.leaky_relu(x, negative_slope=self.lrelu_slope)\n            xt = c1(xt)\n            xt = torch.nn.functional.leaky_relu(xt, negative_slope=self.lrelu_slope)\n            xt = c2(xt)\n            if gamma is not None:\n                xt = gamma * xt\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n    @staticmethod\n    def get_padding(kernel_size: int, dilation: int = 1) -> int:\n        return int((kernel_size * dilation - dilation) / 2)\n\n\ndef safe_log(x: torch.Tensor, clip_val: float = 1e-7) -> torch.Tensor:\n    \"\"\"\n    Computes the element-wise logarithm of the input tensor with clipping to avoid near-zero values.\n\n    Args:\n        x (Tensor): Input tensor.\n        clip_val (float, optional): Minimum value to clip the input tensor. Defaults to 1e-7.\n\n    Returns:\n        Tensor: Element-wise logarithm of the input tensor with clipping applied.\n    \"\"\"\n    return torch.log(torch.clip(x, min=clip_val))\n\n\ndef symlog(x: torch.Tensor) -> torch.Tensor:\n    return torch.sign(x) * torch.log1p(x.abs())\n\n\ndef symexp(x: torch.Tensor) -> torch.Tensor:\n    return torch.sign(x) * (torch.exp(x.abs()) - 1)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/vocos/pretrained.py",
    "content": "from __future__ import annotations\n\nfrom typing import Any, Dict, Tuple, Union, Optional\n\nimport torch\nimport yaml\nfrom torch import nn\nfrom .heads import ISTFTHead\nfrom .models import VocosBackbone\n\n\nclass Vocos(nn.Module):\n    \"\"\"\n    The Vocos class represents a Fourier-based neural vocoder for audio synthesis.\n    This class is primarily designed for inference, with support for loading from pretrained\n    model checkpoints. It consists of three main components: a feature extractor,\n    a backbone, and a head.\n    \"\"\"\n\n    def __init__(\n        self, args,\n    ):\n        super().__init__()\n        self.backbone = VocosBackbone(\n            input_channels=args.vocos.backbone.input_channels,\n            dim=args.vocos.backbone.dim,\n            intermediate_dim=args.vocos.backbone.intermediate_dim,\n            num_layers=args.vocos.backbone.num_layers,\n        )\n        self.head = ISTFTHead(\n            dim=args.vocos.head.dim,\n            n_fft=args.vocos.head.n_fft,\n            hop_length=args.vocos.head.hop_length,\n            padding=args.vocos.head.padding,\n        )\n\n    def forward(self, features_input: torch.Tensor, **kwargs: Any) -> torch.Tensor:\n        \"\"\"\n        Method to decode audio waveform from already calculated features. The features input is passed through\n        the backbone and the head to reconstruct the audio output.\n\n        Args:\n            features_input (Tensor): The input tensor of features of shape (B, C, L), where B is the batch size,\n                                     C denotes the feature dimension, and L is the sequence length.\n\n        Returns:\n            Tensor: The output tensor representing the reconstructed audio waveform of shape (B, T).\n        \"\"\"\n        x = self.backbone(features_input, **kwargs)\n        audio_output = self.head(x)\n        return audio_output\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/vocos/spectral_ops.py",
    "content": "import numpy as np\nimport scipy\nimport torch\nfrom torch import nn, view_as_real, view_as_complex\n\n\nclass ISTFT(nn.Module):\n    \"\"\"\n    Custom implementation of ISTFT since torch.istft doesn't allow custom padding (other than `center=True`) with\n    windowing. This is because the NOLA (Nonzero Overlap Add) check fails at the edges.\n    See issue: https://github.com/pytorch/pytorch/issues/62323\n    Specifically, in the context of neural vocoding we are interested in \"same\" padding analogous to CNNs.\n    The NOLA constraint is met as we trim padded samples anyway.\n\n    Args:\n        n_fft (int): Size of Fourier transform.\n        hop_length (int): The distance between neighboring sliding window frames.\n        win_length (int): The size of window frame and STFT filter.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, n_fft: int, hop_length: int, win_length: int, padding: str = \"same\"):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.n_fft = n_fft\n        self.hop_length = hop_length\n        self.win_length = win_length\n        window = torch.hann_window(win_length)\n        self.register_buffer(\"window\", window)\n\n    def forward(self, spec: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Compute the Inverse Short Time Fourier Transform (ISTFT) of a complex spectrogram.\n\n        Args:\n            spec (Tensor): Input complex spectrogram of shape (B, N, T), where B is the batch size,\n                            N is the number of frequency bins, and T is the number of time frames.\n\n        Returns:\n            Tensor: Reconstructed time-domain signal of shape (B, L), where L is the length of the output signal.\n        \"\"\"\n        if self.padding == \"center\":\n            # Fallback to pytorch native implementation\n            return torch.istft(spec, self.n_fft, self.hop_length, self.win_length, self.window, center=True)\n        elif self.padding == \"same\":\n            pad = (self.win_length - self.hop_length) // 2\n        else:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n\n        assert spec.dim() == 3, \"Expected a 3D tensor as input\"\n        B, N, T = spec.shape\n\n        # Inverse FFT\n        ifft = torch.fft.irfft(spec, self.n_fft, dim=1, norm=\"backward\")\n        ifft = ifft * self.window[None, :, None]\n\n        # Overlap and Add\n        output_size = (T - 1) * self.hop_length + self.win_length\n        y = torch.nn.functional.fold(\n            ifft, output_size=(1, output_size), kernel_size=(1, self.win_length), stride=(1, self.hop_length),\n        )[:, 0, 0, pad:-pad]\n\n        # Window envelope\n        window_sq = self.window.square().expand(1, T, -1).transpose(1, 2)\n        window_envelope = torch.nn.functional.fold(\n            window_sq, output_size=(1, output_size), kernel_size=(1, self.win_length), stride=(1, self.hop_length),\n        ).squeeze()[pad:-pad]\n\n        # Normalize\n        assert (window_envelope > 1e-11).all()\n        y = y / window_envelope\n\n        return y\n\n\nclass MDCT(nn.Module):\n    \"\"\"\n    Modified Discrete Cosine Transform (MDCT) module.\n\n    Args:\n        frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, frame_len: int, padding: str = \"same\"):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.frame_len = frame_len\n        N = frame_len // 2\n        n0 = (N + 1) / 2\n        window = torch.from_numpy(scipy.signal.cosine(frame_len)).float()\n        self.register_buffer(\"window\", window)\n\n        pre_twiddle = torch.exp(-1j * torch.pi * torch.arange(frame_len) / frame_len)\n        post_twiddle = torch.exp(-1j * torch.pi * n0 * (torch.arange(N) + 0.5) / N)\n        # view_as_real: NCCL Backend does not support ComplexFloat data type\n        # https://github.com/pytorch/pytorch/issues/71613\n        self.register_buffer(\"pre_twiddle\", view_as_real(pre_twiddle))\n        self.register_buffer(\"post_twiddle\", view_as_real(post_twiddle))\n\n    def forward(self, audio: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Apply the Modified Discrete Cosine Transform (MDCT) to the input audio.\n\n        Args:\n            audio (Tensor): Input audio waveform of shape (B, T), where B is the batch size\n                and T is the length of the audio.\n\n        Returns:\n            Tensor: MDCT coefficients of shape (B, L, N), where L is the number of output frames\n                and N is the number of frequency bins.\n        \"\"\"\n        if self.padding == \"center\":\n            audio = torch.nn.functional.pad(audio, (self.frame_len // 2, self.frame_len // 2))\n        elif self.padding == \"same\":\n            # hop_length is 1/2 frame_len\n            audio = torch.nn.functional.pad(audio, (self.frame_len // 4, self.frame_len // 4))\n        else:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n\n        x = audio.unfold(-1, self.frame_len, self.frame_len // 2)\n        N = self.frame_len // 2\n        x = x * self.window.expand(x.shape)\n        X = torch.fft.fft(x * view_as_complex(self.pre_twiddle).expand(x.shape), dim=-1)[..., :N]\n        res = X * view_as_complex(self.post_twiddle).expand(X.shape) * np.sqrt(1 / N)\n        return torch.real(res) * np.sqrt(2)\n\n\nclass IMDCT(nn.Module):\n    \"\"\"\n    Inverse Modified Discrete Cosine Transform (IMDCT) module.\n\n    Args:\n        frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, frame_len: int, padding: str = \"same\"):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.frame_len = frame_len\n        N = frame_len // 2\n        n0 = (N + 1) / 2\n        window = torch.from_numpy(scipy.signal.cosine(frame_len)).float()\n        self.register_buffer(\"window\", window)\n\n        pre_twiddle = torch.exp(1j * torch.pi * n0 * torch.arange(N * 2) / N)\n        post_twiddle = torch.exp(1j * torch.pi * (torch.arange(N * 2) + n0) / (N * 2))\n        self.register_buffer(\"pre_twiddle\", view_as_real(pre_twiddle))\n        self.register_buffer(\"post_twiddle\", view_as_real(post_twiddle))\n\n    def forward(self, X: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Apply the Inverse Modified Discrete Cosine Transform (IMDCT) to the input MDCT coefficients.\n\n        Args:\n            X (Tensor): Input MDCT coefficients of shape (B, L, N), where B is the batch size,\n                L is the number of frames, and N is the number of frequency bins.\n\n        Returns:\n            Tensor: Reconstructed audio waveform of shape (B, T), where T is the length of the audio.\n        \"\"\"\n        B, L, N = X.shape\n        Y = torch.zeros((B, L, N * 2), dtype=X.dtype, device=X.device)\n        Y[..., :N] = X\n        Y[..., N:] = -1 * torch.conj(torch.flip(X, dims=(-1,)))\n        y = torch.fft.ifft(Y * view_as_complex(self.pre_twiddle).expand(Y.shape), dim=-1)\n        y = torch.real(y * view_as_complex(self.post_twiddle).expand(y.shape)) * np.sqrt(N) * np.sqrt(2)\n        result = y * self.window.expand(y.shape)\n        output_size = (1, (L + 1) * N)\n        audio = torch.nn.functional.fold(\n            result.transpose(1, 2),\n            output_size=output_size,\n            kernel_size=(1, self.frame_len),\n            stride=(1, self.frame_len // 2),\n        )[:, 0, 0, :]\n\n        if self.padding == \"center\":\n            pad = self.frame_len // 2\n        elif self.padding == \"same\":\n            pad = self.frame_len // 4\n        else:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n\n        audio = audio[:, pad:-pad]\n        return audio\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/modules/wavenet.py",
    "content": "import math\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom indextts.s2mel.modules.encodec import SConv1d\n\nfrom . import commons\nLRELU_SLOPE = 0.1\n\nclass LayerNorm(nn.Module):\n    def __init__(self, channels, eps=1e-5):\n        super().__init__()\n        self.channels = channels\n        self.eps = eps\n\n        self.gamma = nn.Parameter(torch.ones(channels))\n        self.beta = nn.Parameter(torch.zeros(channels))\n\n    def forward(self, x):\n        x = x.transpose(1, -1)\n        x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps)\n        return x.transpose(1, -1)\n\n\nclass ConvReluNorm(nn.Module):\n    def __init__(self, in_channels, hidden_channels, out_channels, kernel_size, n_layers, p_dropout):\n        super().__init__()\n        self.in_channels = in_channels\n        self.hidden_channels = hidden_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n        assert n_layers > 1, \"Number of layers should be larger than 0.\"\n\n        self.conv_layers = nn.ModuleList()\n        self.norm_layers = nn.ModuleList()\n        self.conv_layers.append(nn.Conv1d(in_channels, hidden_channels, kernel_size, padding=kernel_size // 2))\n        self.norm_layers.append(LayerNorm(hidden_channels))\n        self.relu_drop = nn.Sequential(\n            nn.ReLU(),\n            nn.Dropout(p_dropout))\n        for _ in range(n_layers - 1):\n            self.conv_layers.append(nn.Conv1d(hidden_channels, hidden_channels, kernel_size, padding=kernel_size // 2))\n            self.norm_layers.append(LayerNorm(hidden_channels))\n        self.proj = nn.Conv1d(hidden_channels, out_channels, 1)\n        self.proj.weight.data.zero_()\n        self.proj.bias.data.zero_()\n\n    def forward(self, x, x_mask):\n        x_org = x\n        for i in range(self.n_layers):\n            x = self.conv_layers[i](x * x_mask)\n            x = self.norm_layers[i](x)\n            x = self.relu_drop(x)\n        x = x_org + self.proj(x)\n        return x * x_mask\n\n\nclass DDSConv(nn.Module):\n    \"\"\"\n    Dialted and Depth-Separable Convolution\n    \"\"\"\n\n    def __init__(self, channels, kernel_size, n_layers, p_dropout=0.):\n        super().__init__()\n        self.channels = channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n\n        self.drop = nn.Dropout(p_dropout)\n        self.convs_sep = nn.ModuleList()\n        self.convs_1x1 = nn.ModuleList()\n        self.norms_1 = nn.ModuleList()\n        self.norms_2 = nn.ModuleList()\n        for i in range(n_layers):\n            dilation = kernel_size ** i\n            padding = (kernel_size * dilation - dilation) // 2\n            self.convs_sep.append(nn.Conv1d(channels, channels, kernel_size,\n                                            groups=channels, dilation=dilation, padding=padding\n                                            ))\n            self.convs_1x1.append(nn.Conv1d(channels, channels, 1))\n            self.norms_1.append(LayerNorm(channels))\n            self.norms_2.append(LayerNorm(channels))\n\n    def forward(self, x, x_mask, g=None):\n        if g is not None:\n            x = x + g\n        for i in range(self.n_layers):\n            y = self.convs_sep[i](x * x_mask)\n            y = self.norms_1[i](y)\n            y = F.gelu(y)\n            y = self.convs_1x1[i](y)\n            y = self.norms_2[i](y)\n            y = F.gelu(y)\n            y = self.drop(y)\n            x = x + y\n        return x * x_mask\n\n\nclass WN(torch.nn.Module):\n    def __init__(self, hidden_channels, kernel_size, dilation_rate, n_layers, gin_channels=0, p_dropout=0, causal=False):\n        super(WN, self).__init__()\n        conv1d_type = SConv1d\n        assert (kernel_size % 2 == 1)\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size,\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.gin_channels = gin_channels\n        self.p_dropout = p_dropout\n\n        self.in_layers = torch.nn.ModuleList()\n        self.res_skip_layers = torch.nn.ModuleList()\n        self.drop = nn.Dropout(p_dropout)\n\n        if gin_channels != 0:\n            self.cond_layer = conv1d_type(gin_channels, 2 * hidden_channels * n_layers, 1, norm='weight_norm')\n\n        for i in range(n_layers):\n            dilation = dilation_rate ** i\n            padding = int((kernel_size * dilation - dilation) / 2)\n            in_layer = conv1d_type(hidden_channels, 2 * hidden_channels, kernel_size, dilation=dilation,\n                                   padding=padding, norm='weight_norm', causal=causal)\n            self.in_layers.append(in_layer)\n\n            # last one is not necessary\n            if i < n_layers - 1:\n                res_skip_channels = 2 * hidden_channels\n            else:\n                res_skip_channels = hidden_channels\n\n            res_skip_layer = conv1d_type(hidden_channels, res_skip_channels, 1, norm='weight_norm', causal=causal)\n            self.res_skip_layers.append(res_skip_layer)\n\n    def forward(self, x, x_mask, g=None, **kwargs):\n        output = torch.zeros_like(x)\n        n_channels_tensor = torch.IntTensor([self.hidden_channels])\n\n        if g is not None:\n            g = self.cond_layer(g)\n\n        for i in range(self.n_layers):\n            x_in = self.in_layers[i](x)\n            if g is not None:\n                cond_offset = i * 2 * self.hidden_channels\n                g_l = g[:, cond_offset:cond_offset + 2 * self.hidden_channels, :]\n            else:\n                g_l = torch.zeros_like(x_in)\n\n            acts = commons.fused_add_tanh_sigmoid_multiply(\n                x_in,\n                g_l,\n                n_channels_tensor)\n            acts = self.drop(acts)\n\n            res_skip_acts = self.res_skip_layers[i](acts)\n            if i < self.n_layers - 1:\n                res_acts = res_skip_acts[:, :self.hidden_channels, :]\n                x = (x + res_acts) * x_mask\n                output = output + res_skip_acts[:, self.hidden_channels:, :]\n            else:\n                output = output + res_skip_acts\n        return output * x_mask\n\n    def remove_weight_norm(self):\n        if self.gin_channels != 0:\n            torch.nn.utils.remove_weight_norm(self.cond_layer)\n        for l in self.in_layers:\n            torch.nn.utils.remove_weight_norm(l)\n        for l in self.res_skip_layers:\n            torch.nn.utils.remove_weight_norm(l)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/optimizers.py",
    "content": "#coding:utf-8\nimport os, sys\nimport os.path as osp\nimport numpy as np\nimport torch\nfrom torch import nn\nfrom torch.optim import Optimizer\nfrom functools import reduce\nfrom torch.optim import AdamW\n\nclass MultiOptimizer:\n    def __init__(self, optimizers={}, schedulers={}):\n        self.optimizers = optimizers\n        self.schedulers = schedulers\n        self.keys = list(optimizers.keys())\n        self.param_groups = reduce(lambda x,y: x+y, [v.param_groups for v in self.optimizers.values()])\n\n    def state_dict(self):\n        state_dicts = [(key, self.optimizers[key].state_dict())\\\n                       for key in self.keys]\n        return state_dicts\n\n    def scheduler_state_dict(self):\n        state_dicts = [(key, self.schedulers[key].state_dict())\\\n                       for key in self.keys]\n        return state_dicts\n\n    def load_state_dict(self, state_dict):\n        for key, val in state_dict:\n            try:\n                self.optimizers[key].load_state_dict(val)\n            except Exception:\n                print(\"Unloaded %s\" % key)\n\n    def load_scheduler_state_dict(self, state_dict):\n        for key, val in state_dict:\n            try:\n                self.schedulers[key].load_state_dict(val)\n            except Exception:\n                print(\"Unloaded %s\" % key)\n\n    def step(self, key=None, scaler=None):\n        keys = [key] if key is not None else self.keys\n        _ = [self._step(key, scaler) for key in keys]\n\n    def _step(self, key, scaler=None):\n        if scaler is not None:\n            scaler.step(self.optimizers[key])\n            scaler.update()\n        else:\n            self.optimizers[key].step()\n\n    def zero_grad(self, key=None):\n        if key is not None:\n            self.optimizers[key].zero_grad()\n        else:\n            _ = [self.optimizers[key].zero_grad() for key in self.keys]\n\n    def scheduler(self, *args, key=None):\n        if key is not None:\n            self.schedulers[key].step(*args)\n        else:\n            _ = [self.schedulers[key].step_batch(*args) for key in self.keys]\n\ndef define_scheduler(optimizer, params):\n    scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=params['gamma'])\n\n    return scheduler\n\ndef build_optimizer(model_dict, lr, type='AdamW'):\n    optim = {}\n    for key, model in model_dict.items():\n        model_parameters = model.parameters()\n        parameters_names = []\n        parameters_names.append(\n            [\n                name_param_pair[0]\n                for name_param_pair in model.named_parameters()\n            ]\n        )\n        if type == 'AdamW':\n            optim[key] = AdamW(\n                model_parameters,\n                lr=lr,\n                betas=(0.9, 0.98),\n                eps=1e-9,\n                weight_decay=0.1,\n            )\n        else:\n            raise ValueError('Unknown optimizer type: %s' % type)\n\n    schedulers = dict([(key, torch.optim.lr_scheduler.ExponentialLR(opt, gamma=0.999996))\n                       for key, opt in optim.items()])\n\n    multi_optim = MultiOptimizer(optim, schedulers)\n    return multi_optim"
  },
  {
    "path": "xinference/thirdparty/indextts/s2mel/wav2vecbert_extract.py",
    "content": "from transformers import SeamlessM4TFeatureExtractor\nfrom transformers import Wav2Vec2BertModel\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport numpy as np\nimport librosa\nimport os\nimport pickle\nimport math\nimport json\nimport safetensors\nimport json5\n# from codec.kmeans.repcodec_model import RepCodec\nfrom startts.examples.ftchar.models.codec.kmeans.repcodec_model import RepCodec\n\nclass JsonHParams:\n    def __init__(self, **kwargs):\n        for k, v in kwargs.items():\n            if type(v) == dict:\n                v = JsonHParams(**v)\n            self[k] = v\n\n    def keys(self):\n        return self.__dict__.keys()\n\n    def items(self):\n        return self.__dict__.items()\n\n    def values(self):\n        return self.__dict__.values()\n\n    def __len__(self):\n        return len(self.__dict__)\n\n    def __getitem__(self, key):\n        return getattr(self, key)\n\n    def __setitem__(self, key, value):\n        return setattr(self, key, value)\n\n    def __contains__(self, key):\n        return key in self.__dict__\n\n    def __repr__(self):\n        return self.__dict__.__repr__()\n\n\ndef _load_config(config_fn, lowercase=False):\n    \"\"\"Load configurations into a dictionary\n\n    Args:\n        config_fn (str): path to configuration file\n        lowercase (bool, optional): whether changing keys to lower case. Defaults to False.\n\n    Returns:\n        dict: dictionary that stores configurations\n    \"\"\"\n    with open(config_fn, \"r\") as f:\n        data = f.read()\n    config_ = json5.loads(data)\n    if \"base_config\" in config_:\n        # load configurations from new path\n        p_config_path = os.path.join(os.getenv(\"WORK_DIR\"), config_[\"base_config\"])\n        p_config_ = _load_config(p_config_path)\n        config_ = override_config(p_config_, config_)\n    if lowercase:\n        # change keys in config_ to lower case\n        config_ = get_lowercase_keys_config(config_)\n    return config_\n\n\ndef load_config(config_fn, lowercase=False):\n    \"\"\"Load configurations into a dictionary\n\n    Args:\n        config_fn (str): path to configuration file\n        lowercase (bool, optional): _description_. Defaults to False.\n\n    Returns:\n        JsonHParams: an object that stores configurations\n    \"\"\"\n    config_ = _load_config(config_fn, lowercase=lowercase)\n    # create an JsonHParams object with configuration dict\n    cfg = JsonHParams(**config_)\n    return cfg\n\nclass Extract_wav2vectbert:\n    def __init__(self,device):\n    #semantic_model = Wav2Vec2BertModel.from_pretrained(\"facebook/w2v-bert-2.0\")\n        self.semantic_model = Wav2Vec2BertModel.from_pretrained(\"./MaskGCT_model/w2v_bert/\")\n        self.semantic_model.eval()\n        self.semantic_model.to(device)\n        self.stat_mean_var = torch.load(\"./MaskGCT_model/wav2vec2bert_stats.pt\")\n        self.semantic_mean = self.stat_mean_var[\"mean\"]\n        self.semantic_std = torch.sqrt(self.stat_mean_var[\"var\"])\n        self.semantic_mean = self.semantic_mean.to(device)\n        self.semantic_std = self.semantic_std.to(device)\n        self.processor = SeamlessM4TFeatureExtractor.from_pretrained(\n                \"./MaskGCT_model/w2v_bert/\")\n        self.device = device\n        \n        cfg_maskgct = load_config('./MaskGCT_model/maskgct.json')\n        cfg = cfg_maskgct.model.semantic_codec\n        self.semantic_code_ckpt = r'./MaskGCT_model/semantic_codec/model.safetensors'\n        self.semantic_codec = RepCodec(cfg=cfg)\n        self.semantic_codec.eval()\n        self.semantic_codec.to(device)\n        safetensors.torch.load_model(self.semantic_codec, self.semantic_code_ckpt)\n\n    @torch.no_grad()\n    def extract_features(self, speech): # speech [b,T]\n        inputs = self.processor(speech, sampling_rate=16000, return_tensors=\"pt\")\n        input_features = inputs[\"input_features\"]\n        attention_mask = inputs[\"attention_mask\"]\n        return input_features, attention_mask #[2, 620, 160] [2, 620]\n\n    @torch.no_grad()\n    def extract_semantic_code(self, input_features, attention_mask):\n        vq_emb = self.semantic_model(           # Wav2Vec2BertModel\n            input_features=input_features,\n            attention_mask=attention_mask,\n            output_hidden_states=True,\n        )\n        feat = vq_emb.hidden_states[17]  # (B, T, C)\n        feat = (feat - self.semantic_mean.to(feat)) / self.semantic_std.to(feat)\n\n        semantic_code, rec_feat = self.semantic_codec.quantize(feat)  # (B, T)\n        return semantic_code, rec_feat\n\n    def feature_extract(self, prompt_speech):\n        \n        input_features, attention_mask = self.extract_features(prompt_speech)\n        input_features = input_features.to(self.device)\n        attention_mask = attention_mask.to(self.device)\n        semantic_code, rec_feat = self.extract_semantic_code(input_features, attention_mask)\n        return semantic_code,rec_feat\n            \nif __name__=='__main__':\n    speech_path = 'test/magi1.wav'\n    speech = librosa.load(speech_path, sr=16000)[0]\n    speech = np.c_[speech,speech,speech].T #[2, 198559] \n    print(speech.shape)\n            \n    Extract_feature = Extract_wav2vectbert('cuda:0')\n    semantic_code,rec_feat = Extract_feature.feature_extract(speech)\n    print(semantic_code.shape,rec_feat.shape)\n    \n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/utils/arch_util.py",
    "content": "import math\n\nimport torch\nimport torch.nn as nn\n\nfrom indextts.utils.xtransformers import RelativePositionBias\n\n\ndef zero_module(module):\n    \"\"\"\n    Zero out the parameters of a module and return it.\n    \"\"\"\n    for p in module.parameters():\n        p.detach().zero_()\n    return module\n\n\nclass GroupNorm32(nn.GroupNorm):\n    def forward(self, x):\n        return super().forward(x.float()).type(x.dtype)\n\n\ndef normalization(channels):\n    \"\"\"\n    Make a standard normalization layer.\n\n    :param channels: number of input channels.\n    :return: an nn.Module for normalization.\n    \"\"\"\n    groups = 32\n    if channels <= 16:\n        groups = 8\n    elif channels <= 64:\n        groups = 16\n    while channels % groups != 0:\n        groups = int(groups / 2)\n    assert groups > 2\n    return GroupNorm32(groups, channels)\n\n\nclass QKVAttentionLegacy(nn.Module):\n    \"\"\"\n    A module which performs QKV attention. Matches legacy QKVAttention + input/output heads shaping\n    \"\"\"\n\n    def __init__(self, n_heads):\n        super().__init__()\n        self.n_heads = n_heads\n\n    def forward(self, qkv, mask=None, rel_pos=None):\n        \"\"\"\n        Apply QKV attention.\n\n        :param qkv: an [N x (H * 3 * C) x T] tensor of Qs, Ks, and Vs.\n        :return: an [N x (H * C) x T] tensor after attention.\n        \"\"\"\n        bs, width, length = qkv.shape\n        assert width % (3 * self.n_heads) == 0\n        ch = width // (3 * self.n_heads)\n        q, k, v = qkv.reshape(bs * self.n_heads, ch * 3, length).split(ch, dim=1)\n        scale = 1 / math.sqrt(math.sqrt(ch))\n        weight = torch.einsum(\n            \"bct,bcs->bts\", q * scale, k * scale\n        )  # More stable with f16 than dividing afterwards\n        if rel_pos is not None:\n            weight = rel_pos(weight.reshape(bs, self.n_heads, weight.shape[-2], weight.shape[-1])).reshape(bs * self.n_heads, weight.shape[-2], weight.shape[-1])\n        weight = torch.softmax(weight.float(), dim=-1).type(weight.dtype)\n        if mask is not None:\n            # The proper way to do this is to mask before the softmax using -inf, but that doesn't work properly on CPUs.\n            mask = mask.repeat(self.n_heads, 1).unsqueeze(1)\n            weight = weight * mask\n        a = torch.einsum(\"bts,bcs->bct\", weight, v)\n\n        return a.reshape(bs, -1, length)\n\n\nclass AttentionBlock(nn.Module):\n    \"\"\"\n    An attention block that allows spatial positions to attend to each other.\n\n    Originally ported from here, but adapted to the N-d case.\n    https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/models/unet.py#L66.\n    \"\"\"\n\n    def __init__(\n        self,\n        channels,\n        num_heads=1,\n        num_head_channels=-1,\n        do_checkpoint=True,\n        relative_pos_embeddings=False,\n    ):\n        super().__init__()\n        self.channels = channels\n        self.do_checkpoint = do_checkpoint\n        if num_head_channels == -1:\n            self.num_heads = num_heads\n        else:\n            assert (\n                channels % num_head_channels == 0\n            ), f\"q,k,v channels {channels} is not divisible by num_head_channels {num_head_channels}\"\n            self.num_heads = channels // num_head_channels\n        self.norm = normalization(channels)\n        self.qkv = nn.Conv1d(channels, channels * 3, 1)\n        # split heads before split qkv\n        self.attention = QKVAttentionLegacy(self.num_heads)\n\n        self.proj_out = zero_module(nn.Conv1d(channels, channels, 1))\n        if relative_pos_embeddings:\n            self.relative_pos_embeddings = RelativePositionBias(scale=(channels // self.num_heads) ** .5, causal=False, heads=num_heads, num_buckets=32, max_distance=64)\n        else:\n            self.relative_pos_embeddings = None\n\n    def forward(self, x, mask=None):\n        b, c, *spatial = x.shape\n        x = x.reshape(b, c, -1)\n        qkv = self.qkv(self.norm(x))\n        h = self.attention(qkv, mask, self.relative_pos_embeddings)\n        h = self.proj_out(h)\n        return (x + h).reshape(b, c, *spatial)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/checkpoint.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc. (authors: Binbin Zhang)\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport datetime\nimport logging\nimport os\nimport re\nfrom collections import OrderedDict\n\nimport torch\nimport yaml\n\n\ndef load_checkpoint(model: torch.nn.Module, model_pth: str) -> dict:\n    checkpoint = torch.load(model_pth, map_location='cpu')\n    checkpoint = checkpoint['model'] if 'model' in checkpoint else checkpoint\n    model.load_state_dict(checkpoint, strict=True)\n    info_path = re.sub('.pth$', '.yaml', model_pth)\n    configs = {}\n    if os.path.exists(info_path):\n        with open(info_path, 'r') as fin:\n            configs = yaml.load(fin, Loader=yaml.FullLoader)\n    return configs\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/common.py",
    "content": "import os\nimport random\nimport re\n\nimport torch\nimport torchaudio\n\nMATPLOTLIB_FLAG = False\n\n\ndef load_audio(audiopath, sampling_rate):\n    audio, sr = torchaudio.load(audiopath)\n    # print(f\"wave shape: {audio.shape}, sample_rate: {sr}\")\n\n    if audio.size(0) > 1:  # mix to mono\n        audio = audio[0].unsqueeze(0)\n\n    if sr != sampling_rate:\n        try:\n            audio = torchaudio.functional.resample(audio, sr, sampling_rate)\n        except Exception as e:\n            print(f\"Warning: {audiopath}, wave shape: {audio.shape}, sample_rate: {sr}\")\n            return None\n    # clip audio invalid values\n    audio.clip_(-1, 1)\n    return audio\n\n\ndef tokenize_by_CJK_char(line: str, do_upper_case=True) -> str:\n    \"\"\"\n    Tokenize a line of text with CJK char.\n\n    Note: All return charaters will be upper case.\n\n    Example:\n      input = \"你好世界是 hello world 的中文\"\n      output = \"你 好 世 界 是 HELLO WORLD 的 中 文\"\n\n    Args:\n      line:\n        The input text.\n\n    Return:\n      A new string tokenize by CJK char.\n    \"\"\"\n    # The CJK ranges is from https://github.com/alvations/nltk/blob/79eed6ddea0d0a2c212c1060b477fc268fec4d4b/nltk/tokenize/util.py\n    CJK_RANGE_PATTERN = (\n        r\"([\\u1100-\\u11ff\\u2e80-\\ua4cf\\ua840-\\uD7AF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF65-\\uFFDC\\U00020000-\\U0002FFFF])\"\n    )\n    chars = re.split(CJK_RANGE_PATTERN, line.strip())\n    return \" \".join([w.strip().upper() if do_upper_case else w.strip() for w in chars if w.strip()])\n\n\ndef de_tokenized_by_CJK_char(line: str, do_lower_case=False) -> str:\n    \"\"\"\n    Example:\n      input = \"你 好 世 界 是 HELLO WORLD 的 中 文\"\n      output = \"你好世界是 hello world 的中文\"\n\n    do_lower_case:\n      input = \"SEE YOU!\"\n      output = \"see you!\"\n    \"\"\"\n    # replace english words in the line with placeholders\n    english_word_pattern = re.compile(r\"([A-Z]+(?:[\\s-][A-Z-]+)*)\", re.IGNORECASE)\n    english_sents = english_word_pattern.findall(line)\n    for i, sent in enumerate(english_sents):\n        line = line.replace(sent, f\"<sent_{i}>\")\n\n    words = line.split()\n    # restore english sentences\n    sent_placeholder_pattern = re.compile(r\"^.*?(<sent_(\\d+)>)\")\n    for i in range(len(words)):\n        m = sent_placeholder_pattern.match(words[i])\n        if m:\n            # restore the english word\n            placeholder_index = int(m.group(2))\n            words[i] = words[i].replace(m.group(1), english_sents[placeholder_index])\n            if do_lower_case:\n                words[i] = words[i].lower()\n    return \"\".join(words)\n\n\ndef make_pad_mask(lengths: torch.Tensor, max_len: int = 0) -> torch.Tensor:\n    \"\"\"Make mask tensor containing indices of padded part.\n\n    See description of make_non_pad_mask.\n\n    Args:\n        lengths (torch.Tensor): Batch of lengths (B,).\n    Returns:\n        torch.Tensor: Mask tensor containing indices of padded part.\n\n    Examples:\n        >>> lengths = [5, 3, 2]\n        >>> make_pad_mask(lengths)\n        masks = [[0, 0, 0, 0 ,0],\n                 [0, 0, 0, 1, 1],\n                 [0, 0, 1, 1, 1]]\n    \"\"\"\n    batch_size = lengths.size(0)\n    max_len = max_len if max_len > 0 else lengths.max().item()\n    seq_range = torch.arange(0, max_len, dtype=torch.int64, device=lengths.device)\n    seq_range_expand = seq_range.unsqueeze(0).expand(batch_size, max_len)\n    seq_length_expand = lengths.unsqueeze(-1)\n    mask = seq_range_expand >= seq_length_expand\n    return mask\n\n\ndef safe_log(x: torch.Tensor, clip_val: float = 1e-7) -> torch.Tensor:\n    \"\"\"\n    Computes the element-wise logarithm of the input tensor with clipping to avoid near-zero values.\n\n    Args:\n        x (Tensor): Input tensor.\n        clip_val (float, optional): Minimum value to clip the input tensor. Defaults to 1e-7.\n\n    Returns:\n        Tensor: Element-wise logarithm of the input tensor with clipping applied.\n    \"\"\"\n    return torch.log(torch.clip(x, min=clip_val))\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/feature_extractors.py",
    "content": "import torch\nimport torchaudio\nfrom torch import nn\nfrom indextts.utils.common import safe_log\n\n\nclass FeatureExtractor(nn.Module):\n    \"\"\"Base class for feature extractors.\"\"\"\n\n    def forward(self, audio: torch.Tensor, **kwargs) -> torch.Tensor:\n        \"\"\"\n        Extract features from the given audio.\n\n        Args:\n            audio (Tensor): Input audio waveform.\n\n        Returns:\n            Tensor: Extracted features of shape (B, C, L), where B is the batch size,\n                    C denotes output features, and L is the sequence length.\n        \"\"\"\n        raise NotImplementedError(\"Subclasses must implement the forward method.\")\n\n\nclass MelSpectrogramFeatures(FeatureExtractor):\n    def __init__(self, sample_rate=24000, n_fft=1024, hop_length=256, win_length=None,\n                 n_mels=100, mel_fmin=0, mel_fmax=None, normalize=False, padding=\"center\"):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.mel_spec = torchaudio.transforms.MelSpectrogram(\n            sample_rate=sample_rate,\n            n_fft=n_fft,\n            hop_length=hop_length,\n            win_length=win_length,\n            power=1,\n            normalized=normalize,\n            f_min=mel_fmin,\n            f_max=mel_fmax,\n            n_mels=n_mels,\n            center=padding == \"center\",\n        )\n\n    def forward(self, audio, **kwargs):\n        if self.padding == \"same\":\n            pad = self.mel_spec.win_length - self.mel_spec.hop_length\n            audio = torch.nn.functional.pad(audio, (pad // 2, pad // 2), mode=\"reflect\")\n        mel = self.mel_spec(audio)\n        mel = safe_log(mel)\n        return mel\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/front.py",
    "content": "# -*- coding: utf-8 -*-\nimport os\nimport traceback\nimport re\nfrom typing import List, Union, overload\nimport warnings\nfrom indextts.utils.common import tokenize_by_CJK_char, de_tokenized_by_CJK_char\nfrom sentencepiece import SentencePieceProcessor\n\n\nclass TextNormalizer:\n    def __init__(self):\n        self.zh_normalizer = None\n        self.en_normalizer = None\n        self.char_rep_map = {\n            \"：\": \",\",\n            \"；\": \",\",\n            \";\": \",\",\n            \"，\": \",\",\n            \"。\": \".\",\n            \"！\": \"!\",\n            \"？\": \"?\",\n            \"\\n\": \" \",\n            \"·\": \"-\",\n            \"、\": \",\",\n            \"...\": \"…\",\n            \",,,\": \"…\",\n            \"，，，\": \"…\",\n            \"……\": \"…\",\n            \"“\": \"'\",\n            \"”\": \"'\",\n            '\"': \"'\",\n            \"‘\": \"'\",\n            \"’\": \"'\",\n            \"（\": \"'\",\n            \"）\": \"'\",\n            \"(\": \"'\",\n            \")\": \"'\",\n            \"《\": \"'\",\n            \"》\": \"'\",\n            \"【\": \"'\",\n            \"】\": \"'\",\n            \"[\": \"'\",\n            \"]\": \"'\",\n            \"—\": \"-\",\n            \"～\": \"-\",\n            \"~\": \"-\",\n            \"「\": \"'\",\n            \"」\": \"'\",\n            \":\": \",\",\n        }\n        self.zh_char_rep_map = {\n            \"$\": \".\",\n            **self.char_rep_map,\n        }\n\n    def match_email(self, email):\n        # 正则表达式匹配邮箱格式：数字英文@数字英文.英文\n        pattern = r\"^[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z]+$\"\n        return re.match(pattern, email) is not None\n\n    PINYIN_TONE_PATTERN = r\"(?<![a-z])((?:[bpmfdtnlgkhjqxzcsryw]|[zcs]h)?(?:[aeiouüv]|[ae]i|u[aio]|ao|ou|i[aue]|[uüv]e|[uvü]ang?|uai|[aeiuv]n|[aeio]ng|ia[no]|i[ao]ng)|ng|er)([1-5])\"\n    \"\"\"\n    匹配拼音声调格式：pinyin+数字，声调1-5，5表示轻声\n    例如：xuan4, jve2, ying1, zhong4, shang5\n    不匹配：beta1, voice2\n    \"\"\"\n    NAME_PATTERN = r\"[\\u4e00-\\u9fff]+(?:[-·—][\\u4e00-\\u9fff]+){1,2}\"\n    \"\"\"\n    匹配人名，格式：中文·中文，中文·中文-中文\n    例如：克里斯托弗·诺兰，约瑟夫·高登-莱维特\n    \"\"\"\n\n    # 匹配常见英语缩写 's，仅用于替换为 is，不匹配所有 's\n    ENGLISH_CONTRACTION_PATTERN = r\"(what|where|who|which|how|t?here|it|s?he|that|this)'s\"\n\n\n    def use_chinese(self, s):\n        has_chinese = bool(re.search(r\"[\\u4e00-\\u9fff]\", s))\n        has_alpha = bool(re.search(r\"[a-zA-Z]\", s))\n        is_email = self.match_email(s)\n        if has_chinese or not has_alpha or is_email:\n            return True\n\n        has_pinyin = bool(re.search(TextNormalizer.PINYIN_TONE_PATTERN, s, re.IGNORECASE))\n        return has_pinyin\n\n    def load(self):\n        # print(os.path.join(os.path.dirname(os.path.abspath(__file__)), \"..\"))\n        # sys.path.append(model_dir)\n        import platform\n        if self.zh_normalizer is not None and self.en_normalizer is not None:\n            return\n        if platform.system() != \"Linux\":  # Mac and Windows\n            from wetext import Normalizer\n\n            self.zh_normalizer = Normalizer(remove_erhua=False, lang=\"zh\", operator=\"tn\")\n            self.en_normalizer = Normalizer(lang=\"en\", operator=\"tn\")\n        else:\n            from tn.chinese.normalizer import Normalizer as NormalizerZh\n            from tn.english.normalizer import Normalizer as NormalizerEn\n            # use new cache dir for build tagger rules with disable remove_interjections and remove_erhua\n            cache_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), \"tagger_cache\")\n            if not os.path.exists(cache_dir):\n                os.makedirs(cache_dir)\n                with open(os.path.join(cache_dir, \".gitignore\"), \"w\") as f:\n                    f.write(\"*\\n\")\n            self.zh_normalizer = NormalizerZh(\n                cache_dir=cache_dir, remove_interjections=False, remove_erhua=False, overwrite_cache=False\n            )\n            self.en_normalizer = NormalizerEn(overwrite_cache=False)\n\n    def normalize(self, text: str) -> str:\n        if not self.zh_normalizer or not self.en_normalizer:\n            print(\"Error, text normalizer is not initialized !!!\")\n            return \"\"\n        if self.use_chinese(text):\n            text = re.sub(TextNormalizer.ENGLISH_CONTRACTION_PATTERN, r\"\\1 is\", text, flags=re.IGNORECASE)\n            replaced_text, pinyin_list = self.save_pinyin_tones(text.rstrip())\n            \n            replaced_text, original_name_list = self.save_names(replaced_text)\n            try:\n                result = self.zh_normalizer.normalize(replaced_text)\n            except Exception:\n                result = \"\"\n                print(traceback.format_exc())\n            # 恢复人名\n            result = self.restore_names(result, original_name_list)\n            # 恢复拼音声调\n            result = self.restore_pinyin_tones(result, pinyin_list)\n            pattern = re.compile(\"|\".join(re.escape(p) for p in self.zh_char_rep_map.keys()))\n            result = pattern.sub(lambda x: self.zh_char_rep_map[x.group()], result)\n        else:\n            try:\n                text = re.sub(TextNormalizer.ENGLISH_CONTRACTION_PATTERN, r\"\\1 is\", text, flags=re.IGNORECASE)\n                result = self.en_normalizer.normalize(text)\n            except Exception:\n                result = text\n                print(traceback.format_exc())\n            pattern = re.compile(\"|\".join(re.escape(p) for p in self.char_rep_map.keys()))\n            result = pattern.sub(lambda x: self.char_rep_map[x.group()], result)\n        return result\n\n    def correct_pinyin(self, pinyin: str):\n        \"\"\"\n        将 jqx 的韵母为 u/ü 的拼音转换为 v\n        如：ju -> jv , que -> qve, xün -> xvn\n        \"\"\"\n        if pinyin[0] not in \"jqxJQX\":\n            return pinyin\n        # 匹配 jqx 的韵母为 u/ü 的拼音\n        pattern = r\"([jqx])[uü](n|e|an)*(\\d)\"\n        repl = r\"\\g<1>v\\g<2>\\g<3>\"\n        pinyin = re.sub(pattern, repl, pinyin, flags=re.IGNORECASE)\n        return pinyin.upper()\n\n    def save_names(self, original_text):\n        \"\"\"\n        替换人名为占位符 <n_a>、 <n_b>, ...\n        例如：克里斯托弗·诺兰 -> <n_a>\n        \"\"\"\n        # 人名\n        name_pattern = re.compile(TextNormalizer.NAME_PATTERN, re.IGNORECASE)\n        original_name_list = re.findall(name_pattern, original_text)\n        if len(original_name_list) == 0:\n            return (original_text, None)\n        original_name_list = list(set(\"\".join(n) for n in original_name_list))\n        transformed_text = original_text\n        # 替换占位符 <n_a>、 <n_b>, ...\n        for i, name in enumerate(original_name_list):\n            number = chr(ord(\"a\") + i)\n            transformed_text = transformed_text.replace(name, f\"<n_{number}>\")\n\n        return transformed_text, original_name_list\n\n    def restore_names(self, normalized_text, original_name_list):\n        \"\"\"\n        恢复人名为原来的文字\n        例如：<n_a> -> original_name_list[0]\n        \"\"\"\n        if not original_name_list or len(original_name_list) == 0:\n            return normalized_text\n\n        transformed_text = normalized_text\n        # 替换为占位符 <n_a>、 <n_b>, ...\n        for i, name in enumerate(original_name_list):\n            number = chr(ord(\"a\") + i)\n            transformed_text = transformed_text.replace(f\"<n_{number}>\", name)\n        return transformed_text\n\n    def save_pinyin_tones(self, original_text):\n        \"\"\"\n        替换拼音声调为占位符 <pinyin_a>, <pinyin_b>, ...\n        例如：xuan4 -> <pinyin_a>\n        \"\"\"\n        # 声母韵母+声调数字\n        origin_pinyin_pattern = re.compile(TextNormalizer.PINYIN_TONE_PATTERN, re.IGNORECASE)\n        original_pinyin_list = re.findall(origin_pinyin_pattern, original_text)\n        if len(original_pinyin_list) == 0:\n            return (original_text, None)\n        original_pinyin_list = list(set(\"\".join(p) for p in original_pinyin_list))\n        transformed_text = original_text\n        # 替换为占位符 <pinyin_a>, <pinyin_b>, ...\n        for i, pinyin in enumerate(original_pinyin_list):\n            number = chr(ord(\"a\") + i)\n            transformed_text = transformed_text.replace(pinyin, f\"<pinyin_{number}>\")\n\n        # print(\"original_text: \", original_text)\n        # print(\"transformed_text: \", transformed_text)\n        return transformed_text, original_pinyin_list\n\n    def restore_pinyin_tones(self, normalized_text, original_pinyin_list):\n        \"\"\"\n        恢复拼音中的音调数字（1-5）为原来的拼音\n        例如：<pinyin_a> -> original_pinyin_list[0]\n        \"\"\"\n        if not original_pinyin_list or len(original_pinyin_list) == 0:\n            return normalized_text\n\n        transformed_text = normalized_text\n        # 替换占位符 <pinyin_a>, <pinyin_b>, ...\n        for i, pinyin in enumerate(original_pinyin_list):\n            number = chr(ord(\"a\") + i)\n            pinyin = self.correct_pinyin(pinyin)\n            transformed_text = transformed_text.replace(f\"<pinyin_{number}>\", pinyin)\n        # print(\"normalized_text: \", normalized_text)\n        # print(\"transformed_text: \", transformed_text)\n        return transformed_text\n\n\nclass TextTokenizer:\n    def __init__(self, vocab_file: str, normalizer: TextNormalizer = None):\n        self.vocab_file = vocab_file\n        self.normalizer = normalizer\n\n        if self.vocab_file is None:\n            raise ValueError(\"vocab_file is None\")\n        if not os.path.exists(self.vocab_file):\n            raise ValueError(f\"vocab_file {self.vocab_file} does not exist\")\n        if self.normalizer:\n            self.normalizer.load()\n        # 加载词表\n        self.sp_model = SentencePieceProcessor(model_file=self.vocab_file)\n\n        self.pre_tokenizers = [\n            # 预处理器\n            tokenize_by_CJK_char,\n        ]\n\n    @property\n    def vocab_size(self):\n        return self.sp_model.GetPieceSize()\n\n    @property\n    def unk_token(self):\n        return \"<unk>\"\n\n    @property\n    def pad_token(self):\n        return None\n\n    @property\n    def bos_token(self):\n        return \"<s>\"\n\n    @property\n    def eos_token(self):\n        return \"</s>\"\n\n    @property\n    def pad_token_id(self):\n        return -1\n\n    @property\n    def bos_token_id(self):\n        return 0\n\n    @property\n    def eos_token_id(self):\n        return 1\n\n    @property\n    def unk_token_id(self):\n        return self.sp_model.unk_id()\n\n    @property\n    def special_tokens_map(self):\n        return {\n            \"unk_token\": self.unk_token,\n            \"pad_token\": self.pad_token,\n            \"bos_token\": self.bos_token,\n            \"eos_token\": self.eos_token,\n        }\n\n    def get_vocab(self):\n        vocab = {self.convert_ids_to_tokens(i): i for i in range(self.vocab_size)}\n        return vocab\n\n    @overload\n    def convert_ids_to_tokens(self, ids: int) -> str: ...\n\n    @overload\n    def convert_ids_to_tokens(self, ids: List[int]) -> List[str]: ...\n\n    def convert_ids_to_tokens(self, ids: Union[List[int], int]):\n        return self.sp_model.IdToPiece(ids)\n\n    def convert_tokens_to_ids(self, tokens: Union[List[str], str]) -> List[int]:\n        if isinstance(tokens, str):\n            tokens = [tokens]\n        return [self.sp_model.PieceToId(token) for token in tokens]\n\n    def tokenize(self, text: str) -> List[str]:\n        return self.encode(text, out_type=str)\n\n    def encode(self, text: str, **kwargs):\n        if len(text) == 0:\n            return []\n        if len(text.strip()) == 1:\n            return self.sp_model.Encode(text, out_type=kwargs.pop(\"out_type\", int), **kwargs)\n        # 预处理\n        if self.normalizer:\n            text = self.normalizer.normalize(text)\n        if len(self.pre_tokenizers) > 0:\n            for pre_tokenizer in self.pre_tokenizers:\n                text = pre_tokenizer(text)\n        return self.sp_model.Encode(text, out_type=kwargs.pop(\"out_type\", int), **kwargs)\n\n    def batch_encode(self, texts: List[str], **kwargs):\n        # 预处理\n        if self.normalizer:\n            texts = [self.normalizer.normalize(text) for text in texts]\n        if len(self.pre_tokenizers) > 0:\n            for pre_tokenizer in self.pre_tokenizers:\n                texts = [pre_tokenizer(text) for text in texts]\n        return self.sp_model.Encode(texts, out_type=kwargs.pop(\"out_type\", int), **kwargs)\n\n    def decode(self, ids: Union[List[int], int], do_lower_case=False, **kwargs):\n        if isinstance(ids, int):\n            ids = [ids]\n        decoded = self.sp_model.Decode(ids, out_type=kwargs.pop(\"out_type\", str), **kwargs)\n        return de_tokenized_by_CJK_char(decoded, do_lower_case=do_lower_case)\n\n    @staticmethod\n    def split_segments_by_token(\n        tokenized_str: List[str], split_tokens: List[str], max_text_tokens_per_segment: int\n    ) -> List[List[str]]:\n        \"\"\"\n        将tokenize后的结果按特定token进一步分割\n        \"\"\"\n        # 处理特殊情况\n        if len(tokenized_str) == 0:\n            return []\n        segments: List[List[str]] = []\n        current_segment = []\n        current_segment_tokens_len = 0\n        for i in range(len(tokenized_str)):\n            token = tokenized_str[i]\n            current_segment.append(token)\n            current_segment_tokens_len += 1\n            if current_segment_tokens_len <= max_text_tokens_per_segment:\n                if token in split_tokens and current_segment_tokens_len > 2:\n                    if i < len(tokenized_str) - 1:\n                        if tokenized_str[i + 1] in [\"'\", \"▁'\"]:\n                            # 后续token是'，则不切分\n                            current_segment.append(tokenized_str[i + 1])\n                            i += 1\n                    segments.append(current_segment)\n                    current_segment = []\n                    current_segment_tokens_len = 0\n                continue\n            # 如果当前tokens的长度超过最大限制\n            if not  (\",\" in split_tokens or \"▁,\" in split_tokens ) and (\",\" in current_segment or \"▁,\" in current_segment): \n                # 如果当前tokens中有,，则按,分割\n                sub_segments = TextTokenizer.split_segments_by_token(\n                    current_segment, [\",\", \"▁,\"], max_text_tokens_per_segment=max_text_tokens_per_segment\n                )\n            elif \"-\" not in split_tokens and \"-\" in current_segment:\n                # 没有,，则按-分割\n                sub_segments = TextTokenizer.split_segments_by_token(\n                    current_segment, [\"-\"], max_text_tokens_per_segment=max_text_tokens_per_segment\n                )\n            else:\n                # 按照长度分割\n                sub_segments = []\n                for j in range(0, len(current_segment), max_text_tokens_per_segment):\n                    if j + max_text_tokens_per_segment < len(current_segment):\n                        sub_segments.append(current_segment[j : j + max_text_tokens_per_segment])\n                    else:\n                        sub_segments.append(current_segment[j:])\n                warnings.warn(\n                    f\"The tokens length of segment exceeds limit: {max_text_tokens_per_segment}, \"\n                    f\"Tokens in segment: {current_segment}.\"\n                    \"Maybe unexpected behavior\",\n                    RuntimeWarning,\n                )\n            segments.extend(sub_segments)\n            current_segment = []\n            current_segment_tokens_len = 0\n        if current_segment_tokens_len > 0:\n            assert current_segment_tokens_len <= max_text_tokens_per_segment\n            segments.append(current_segment)\n        # 如果相邻的句子加起来长度小于最大限制，则合并\n        merged_segments = []\n        for segment in segments:\n            if len(segment) == 0:\n                continue\n            if len(merged_segments) == 0:\n                merged_segments.append(segment)\n            elif len(merged_segments[-1]) + len(segment) <= max_text_tokens_per_segment:\n                merged_segments[-1] = merged_segments[-1] + segment\n            else:\n                merged_segments.append(segment)\n        return merged_segments\n\n    punctuation_marks_tokens = [\n        \".\",\n        \"!\",\n        \"?\",\n        \"▁.\",\n        # \"▁!\", # unk\n        \"▁?\",\n        \"▁...\", # ellipsis\n    ]\n    def split_segments(self, tokenized: List[str], max_text_tokens_per_segment=120) -> List[List[str]]:\n        return TextTokenizer.split_segments_by_token(\n            tokenized, self.punctuation_marks_tokens, max_text_tokens_per_segment=max_text_tokens_per_segment\n        )\n\n\nif __name__ == \"__main__\":\n    # 测试程序\n\n    text_normalizer = TextNormalizer()\n\n    cases = [\n        \"IndexTTS 正式发布1.0版本了，效果666\",\n        \"晕XUAN4是一种GAN3觉\",\n        \"我爱你！\",\n        \"I love you!\",\n        \"“我爱你”的英语是“I love you”\",\n        \"2.5平方电线\",\n        \"共465篇，约315万字\",\n        \"2002年的第一场雪，下在了2003年\",\n        \"速度是10km/h\",\n        \"现在是北京时间2025年01月11日 20:00\",\n        \"他这条裤子是2012年买的，花了200块钱\",\n        \"电话：135-4567-8900\",\n        \"1键3连\",\n        \"他这条视频点赞3000+，评论1000+，收藏500+\",\n        \"这是1024元的手机，你要吗？\",\n        \"受不liao3你了\",\n        \"“衣裳”不读衣chang2，而是读衣shang5\",\n        \"最zhong4要的是：不要chong2蹈覆辙\",\n        \"不zuo1死就不会死\",\n        \"See you at 8:00 AM\",\n        \"8:00 AM 开会\",\n        \"Couting down 3, 2, 1, go!\",\n        \"数到3就开始：1、2、3\",\n        \"This sales for 2.5% off, only $12.5.\",\n        \"5G网络是4G网络的升级版，2G网络是3G网络的前身\",\n        \"苹果于2030/1/2发布新 iPhone 2X 系列手机，最低售价仅 ¥12999\",\n        \"这酒...里...有毒...\",\n        # 异常case\n        \"只有,,,才是最好的\",\n        \"babala2是什么？\",  # babala二是什么?\n        \"用beta1测试\",  # 用beta一测试\n        \"have you ever been to beta2?\",  # have you ever been to beta two?\n        \"such as XTTS, CosyVoice2, Fish-Speech, and F5-TTS\",  # such as xtts,cosyvoice two,fish-speech,and f five-tts\n        \"where's the money?\",  # where is the money?\n        \"who's there?\",  # who is there?\n        \"which's the best?\",  # which is the best?\n        \"how's it going?\",  # how is it going?\n        \"今天是个好日子 it's a good day\",  # 今天是个好日子 it is a good day\n        # 人名\n        \"约瑟夫·高登-莱维特（Joseph Gordon-Levitt is an American actor）\",\n        \"蒂莫西·唐纳德·库克（英文名：Timothy Donald Cook），通称蒂姆·库克（Tim Cook），美国商业经理、工业工程师和工业开发商，现任苹果公司首席执行官。\",\n        # 长句子\n        \"《盗梦空间》是由美国华纳兄弟影片公司出品的电影，由克里斯托弗·诺兰执导并编剧，莱昂纳多·迪卡普里奥、玛丽昂·歌迪亚、约瑟夫·高登-莱维特、艾利奥特·佩吉、汤姆·哈迪等联袂主演，2010年7月16日在美国上映，2010年9月1日在中国内地上映，2020年8月28日在中国内地重映。影片剧情游走于梦境与现实之间，被定义为“发生在意识结构内的当代动作科幻片”，讲述了由莱昂纳多·迪卡普里奥扮演的造梦师，带领特工团队进入他人梦境，从他人的潜意识中盗取机密，并重塑他人梦境的故事。\",\n        \"清晨拉开窗帘，阳光洒在窗台的Bloomixy花艺礼盒上——薰衣草香薰蜡烛唤醒嗅觉，永生花束折射出晨露般光泽。设计师将“自然绽放美学”融入每个细节：手工陶瓷花瓶可作首饰收纳，香薰精油含依兰依兰舒缓配方。限量款附赠《365天插花灵感手册》，让每个平凡日子都有花开仪式感。\\n宴会厅灯光暗下的刹那，Glimmeria星月系列耳坠开始发光——瑞士冷珐琅工艺让蓝宝石如银河流动，钛合金骨架仅3.2g无负重感。设计师秘密：内置微型重力感应器，随步伐产生0.01mm振幅，打造“行走的星光”。七夕限定礼盒含星座定制铭牌，让爱意如星辰永恒闪耀。\",\n        \"电影1：“黑暗骑士”（演员：克里斯蒂安·贝尔、希斯·莱杰；导演：克里斯托弗·诺兰）；电影2：“盗梦空间”（演员：莱昂纳多·迪卡普里奥；导演：克里斯托弗·诺兰）；电影3：“钢琴家”（演员：艾德里安·布洛迪；导演：罗曼·波兰斯基）；电影4：“泰坦尼克号”（演员：莱昂纳多·迪卡普里奥；导演：詹姆斯·卡梅隆）；电影5：“阿凡达”（演员：萨姆·沃辛顿；导演：詹姆斯·卡梅隆）；电影6：“南方公园：大电影”（演员：马特·斯通、托马斯·艾恩格瑞；导演：特雷·帕克）\",\n    ]\n    # 测试分词器\n    tokenizer = TextTokenizer(\n        vocab_file=\"checkpoints/bpe.model\",\n        normalizer=text_normalizer,\n    )\n\n    codes = tokenizer.batch_encode(\n        cases,\n        out_type=int,\n    )\n\n    print(f\"vocab_size: {tokenizer.vocab_size}\")\n    # print(f\"pad_token: {tokenizer.pad_token}, pad_token_id: {tokenizer.pad_token_id}\")\n    print(f\"bos_token: {tokenizer.bos_token}, bos_token_id: {tokenizer.bos_token_id}\")\n    print(f\"eos_token: {tokenizer.eos_token}, eos_token_id: {tokenizer.eos_token_id}\")\n    print(f\"unk_token: {tokenizer.unk_token}, unk_token_id: {tokenizer.unk_token_id}\")\n    # 测试拼音 (8474-10201)\n    for id in range(8474, 10201):\n        pinyin = tokenizer.convert_ids_to_tokens(id)\n        if re.match(TextNormalizer.PINYIN_TONE_PATTERN, pinyin, re.IGNORECASE) is None:\n            print(f\"{pinyin} should be matched\")\n    for badcase in [\n        \"beta1\", \"better1\", \"voice2\", \"bala2\", \"babala2\", \"hunger2\"\n    ]:\n        if re.match(TextNormalizer.PINYIN_TONE_PATTERN, badcase, re.IGNORECASE) is not None:\n            print(f\"{badcase} should not be matched!\")\n    # 不应该有 unk_token_id\n    for t in set([*TextTokenizer.punctuation_marks_tokens, \",\", \"▁,\", \"-\", \"▁...\"]):\n        tokens = tokenizer.convert_tokens_to_ids(t)\n        if tokenizer.unk_token_id in tokens:\n            print(f\"Warning: {t} is unknown token\")\n        print(f\"`{t}`\", \"->\", tokens, \"->\", tokenizer.convert_ids_to_tokens(tokens))\n    for ch in set(tokenizer.normalizer.zh_char_rep_map.values()):\n        # 测试 normalize后的字符能被分词器识别\n        print(f\"`{ch}`\", \"->\", tokenizer.sp_model.Encode(ch, out_type=str))\n        print(f\"` {ch}`\", \"->\", tokenizer.sp_model.Encode(f\" {ch}\", out_type=str))\n    max_text_tokens_per_segment=120\n    for i in range(len(cases)):\n        print(f\"原始文本: {cases[i]}\")\n        print(f\"Normalized: {text_normalizer.normalize(cases[i])}\")\n        tokens = tokenizer.tokenize(cases[i])\n        print(\"Tokenzied: \", \", \".join([f\"`{t}`\" for t in tokens]))\n        segments = tokenizer.split_segments(tokens, max_text_tokens_per_segment=max_text_tokens_per_segment)\n        print(\"Segments count:\", len(segments))\n        if len(segments) > 1:\n            for j in range(len(segments)):\n                print(f\"  {j}, count:\", len(segments[j]), \", tokens:\", \"\".join(segments[j]))\n                if len(segments[j]) > max_text_tokens_per_segment:\n                    print(f\"Warning: segment {j} is too long, length: {len(segments[j])}\")\n        #print(f\"Token IDs (first 10): {codes[i][:10]}\")\n        if tokenizer.unk_token in codes[i]:\n            print(f\"Warning: `{cases[i]}` contains UNKNOWN token\")\n        print(f\"Decoded: {tokenizer.decode(codes[i], do_lower_case=True)}\")\n        print(\"-\" * 50)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/codec.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom torch.nn.utils import weight_norm\n\nfrom indextts.utils.maskgct.models.codec.amphion_codec.quantize import (\n    ResidualVQ,\n    VectorQuantize,\n    FactorizedVectorQuantize,\n    LookupFreeQuantize,\n)\n\nfrom indextts.utils.maskgct.models.codec.amphion_codec.vocos import Vocos\n\n\ndef WNConv1d(*args, **kwargs):\n    return weight_norm(nn.Conv1d(*args, **kwargs))\n\n\ndef WNConvTranspose1d(*args, **kwargs):\n    return weight_norm(nn.ConvTranspose1d(*args, **kwargs))\n\n\n# Scripting this brings model speed up 1.4x\n@torch.jit.script\ndef snake(x, alpha):\n    shape = x.shape\n    x = x.reshape(shape[0], shape[1], -1)\n    x = x + (alpha + 1e-9).reciprocal() * torch.sin(alpha * x).pow(2)\n    x = x.reshape(shape)\n    return x\n\n\nclass Snake1d(nn.Module):\n    def __init__(self, channels):\n        super().__init__()\n        self.alpha = nn.Parameter(torch.ones(1, channels, 1))\n\n    def forward(self, x):\n        return snake(x, self.alpha)\n\n\ndef init_weights(m):\n    if isinstance(m, nn.Conv1d):\n        nn.init.trunc_normal_(m.weight, std=0.02)\n        nn.init.constant_(m.bias, 0)\n    if isinstance(m, nn.Linear):\n        nn.init.trunc_normal_(m.weight, std=0.02)\n        nn.init.constant_(m.bias, 0)\n\n\nclass ResidualUnit(nn.Module):\n    def __init__(self, dim: int = 16, dilation: int = 1):\n        super().__init__()\n        pad = ((7 - 1) * dilation) // 2\n        self.block = nn.Sequential(\n            Snake1d(dim),\n            WNConv1d(dim, dim, kernel_size=7, dilation=dilation, padding=pad),\n            Snake1d(dim),\n            WNConv1d(dim, dim, kernel_size=1),\n        )\n\n    def forward(self, x):\n        y = self.block(x)\n        pad = (x.shape[-1] - y.shape[-1]) // 2\n        if pad > 0:\n            x = x[..., pad:-pad]\n        return x + y\n\n\nclass EncoderBlock(nn.Module):\n    def __init__(self, dim: int = 16, stride: int = 1):\n        super().__init__()\n        self.block = nn.Sequential(\n            ResidualUnit(dim // 2, dilation=1),\n            ResidualUnit(dim // 2, dilation=3),\n            ResidualUnit(dim // 2, dilation=9),\n            Snake1d(dim // 2),\n            WNConv1d(\n                dim // 2,\n                dim,\n                kernel_size=2 * stride,\n                stride=stride,\n                padding=math.ceil(stride / 2),\n            ),\n        )\n\n    def forward(self, x):\n        return self.block(x)\n\n\nclass CodecEncoder(nn.Module):\n    def __init__(\n        self,\n        d_model: int = 64,\n        up_ratios: list = [4, 5, 5, 6],\n        out_channels: int = 256,\n        use_tanh: bool = False,\n        cfg=None,\n    ):\n        super().__init__()\n\n        d_model = cfg.d_model if cfg is not None else d_model\n        up_ratios = cfg.up_ratios if cfg is not None else up_ratios\n        out_channels = cfg.out_channels if cfg is not None else out_channels\n        use_tanh = cfg.use_tanh if cfg is not None else use_tanh\n\n        # Create first convolution\n        self.block = [WNConv1d(1, d_model, kernel_size=7, padding=3)]\n\n        # Create EncoderBlocks that double channels as they downsample by `stride`\n        for stride in up_ratios:\n            d_model *= 2\n            self.block += [EncoderBlock(d_model, stride=stride)]\n\n        # Create last convolution\n        self.block += [\n            Snake1d(d_model),\n            WNConv1d(d_model, out_channels, kernel_size=3, padding=1),\n        ]\n\n        if use_tanh:\n            self.block += [nn.Tanh()]\n\n        # Wrap black into nn.Sequential\n        self.block = nn.Sequential(*self.block)\n        self.enc_dim = d_model\n\n        self.reset_parameters()\n\n    def forward(self, x):\n        return self.block(x)\n\n    def reset_parameters(self):\n        self.apply(init_weights)\n\n\nclass DecoderBlock(nn.Module):\n    def __init__(self, input_dim: int = 16, output_dim: int = 8, stride: int = 1):\n        super().__init__()\n        self.block = nn.Sequential(\n            Snake1d(input_dim),\n            WNConvTranspose1d(\n                input_dim,\n                output_dim,\n                kernel_size=2 * stride,\n                stride=stride,\n                padding=stride // 2 + stride % 2,\n                output_padding=stride % 2,\n            ),\n            ResidualUnit(output_dim, dilation=1),\n            ResidualUnit(output_dim, dilation=3),\n            ResidualUnit(output_dim, dilation=9),\n        )\n\n    def forward(self, x):\n        return self.block(x)\n\n\nclass CodecDecoder(nn.Module):\n    def __init__(\n        self,\n        in_channels: int = 256,\n        upsample_initial_channel: int = 1536,\n        up_ratios: list = [5, 5, 4, 2],\n        num_quantizers: int = 8,\n        codebook_size: int = 1024,\n        codebook_dim: int = 256,\n        quantizer_type: str = \"vq\",\n        quantizer_dropout: float = 0.5,\n        commitment: float = 0.25,\n        codebook_loss_weight: float = 1.0,\n        use_l2_normlize: bool = False,\n        codebook_type: str = \"euclidean\",\n        kmeans_init: bool = False,\n        kmeans_iters: int = 10,\n        decay: float = 0.8,\n        eps: float = 1e-5,\n        threshold_ema_dead_code: int = 2,\n        weight_init: bool = False,\n        use_vocos: bool = False,\n        vocos_dim: int = 384,\n        vocos_intermediate_dim: int = 1152,\n        vocos_num_layers: int = 8,\n        n_fft: int = 800,\n        hop_size: int = 200,\n        padding: str = \"same\",\n        cfg=None,\n    ):\n        super().__init__()\n\n        in_channels = (\n            cfg.in_channels\n            if cfg is not None and hasattr(cfg, \"in_channels\")\n            else in_channels\n        )\n        upsample_initial_channel = (\n            cfg.upsample_initial_channel\n            if cfg is not None and hasattr(cfg, \"upsample_initial_channel\")\n            else upsample_initial_channel\n        )\n        up_ratios = (\n            cfg.up_ratios\n            if cfg is not None and hasattr(cfg, \"up_ratios\")\n            else up_ratios\n        )\n        num_quantizers = (\n            cfg.num_quantizers\n            if cfg is not None and hasattr(cfg, \"num_quantizers\")\n            else num_quantizers\n        )\n        codebook_size = (\n            cfg.codebook_size\n            if cfg is not None and hasattr(cfg, \"codebook_size\")\n            else codebook_size\n        )\n        codebook_dim = (\n            cfg.codebook_dim\n            if cfg is not None and hasattr(cfg, \"codebook_dim\")\n            else codebook_dim\n        )\n        quantizer_type = (\n            cfg.quantizer_type\n            if cfg is not None and hasattr(cfg, \"quantizer_type\")\n            else quantizer_type\n        )\n        quantizer_dropout = (\n            cfg.quantizer_dropout\n            if cfg is not None and hasattr(cfg, \"quantizer_dropout\")\n            else quantizer_dropout\n        )\n        commitment = (\n            cfg.commitment\n            if cfg is not None and hasattr(cfg, \"commitment\")\n            else commitment\n        )\n        codebook_loss_weight = (\n            cfg.codebook_loss_weight\n            if cfg is not None and hasattr(cfg, \"codebook_loss_weight\")\n            else codebook_loss_weight\n        )\n        use_l2_normlize = (\n            cfg.use_l2_normlize\n            if cfg is not None and hasattr(cfg, \"use_l2_normlize\")\n            else use_l2_normlize\n        )\n        codebook_type = (\n            cfg.codebook_type\n            if cfg is not None and hasattr(cfg, \"codebook_type\")\n            else codebook_type\n        )\n        kmeans_init = (\n            cfg.kmeans_init\n            if cfg is not None and hasattr(cfg, \"kmeans_init\")\n            else kmeans_init\n        )\n        kmeans_iters = (\n            cfg.kmeans_iters\n            if cfg is not None and hasattr(cfg, \"kmeans_iters\")\n            else kmeans_iters\n        )\n        decay = cfg.decay if cfg is not None and hasattr(cfg, \"decay\") else decay\n        eps = cfg.eps if cfg is not None and hasattr(cfg, \"eps\") else eps\n        threshold_ema_dead_code = (\n            cfg.threshold_ema_dead_code\n            if cfg is not None and hasattr(cfg, \"threshold_ema_dead_code\")\n            else threshold_ema_dead_code\n        )\n        weight_init = (\n            cfg.weight_init\n            if cfg is not None and hasattr(cfg, \"weight_init\")\n            else weight_init\n        )\n        use_vocos = (\n            cfg.use_vocos\n            if cfg is not None and hasattr(cfg, \"use_vocos\")\n            else use_vocos\n        )\n        vocos_dim = (\n            cfg.vocos_dim\n            if cfg is not None and hasattr(cfg, \"vocos_dim\")\n            else vocos_dim\n        )\n        vocos_intermediate_dim = (\n            cfg.vocos_intermediate_dim\n            if cfg is not None and hasattr(cfg, \"vocos_intermediate_dim\")\n            else vocos_intermediate_dim\n        )\n        vocos_num_layers = (\n            cfg.vocos_num_layers\n            if cfg is not None and hasattr(cfg, \"vocos_num_layers\")\n            else vocos_num_layers\n        )\n        n_fft = cfg.n_fft if cfg is not None and hasattr(cfg, \"n_fft\") else n_fft\n        hop_size = (\n            cfg.hop_size if cfg is not None and hasattr(cfg, \"hop_size\") else hop_size\n        )\n        padding = (\n            cfg.padding if cfg is not None and hasattr(cfg, \"padding\") else padding\n        )\n\n        if quantizer_type == \"vq\":\n            self.quantizer = ResidualVQ(\n                input_dim=in_channels,\n                num_quantizers=num_quantizers,\n                codebook_size=codebook_size,\n                codebook_dim=codebook_dim,\n                quantizer_type=quantizer_type,\n                quantizer_dropout=quantizer_dropout,\n                commitment=commitment,\n                codebook_loss_weight=codebook_loss_weight,\n                use_l2_normlize=use_l2_normlize,\n                codebook_type=codebook_type,\n                kmeans_init=kmeans_init,\n                kmeans_iters=kmeans_iters,\n                decay=decay,\n                eps=eps,\n                threshold_ema_dead_code=threshold_ema_dead_code,\n                weight_init=weight_init,\n            )\n        elif quantizer_type == \"fvq\":\n            self.quantizer = ResidualVQ(\n                input_dim=in_channels,\n                num_quantizers=num_quantizers,\n                codebook_size=codebook_size,\n                codebook_dim=codebook_dim,\n                quantizer_type=quantizer_type,\n                quantizer_dropout=quantizer_dropout,\n                commitment=commitment,\n                codebook_loss_weight=codebook_loss_weight,\n                use_l2_normlize=use_l2_normlize,\n            )\n        elif quantizer_type == \"lfq\":\n            self.quantizer = ResidualVQ(\n                input_dim=in_channels,\n                num_quantizers=num_quantizers,\n                codebook_size=codebook_size,\n                codebook_dim=codebook_dim,\n                quantizer_type=quantizer_type,\n            )\n        else:\n            raise ValueError(f\"Unknown quantizer type {quantizer_type}\")\n\n        if not use_vocos:\n            # Add first conv layer\n            channels = upsample_initial_channel\n            layers = [WNConv1d(in_channels, channels, kernel_size=7, padding=3)]\n\n            # Add upsampling + MRF blocks\n            for i, stride in enumerate(up_ratios):\n                input_dim = channels // 2**i\n                output_dim = channels // 2 ** (i + 1)\n                layers += [DecoderBlock(input_dim, output_dim, stride)]\n\n            # Add final conv layer\n            layers += [\n                Snake1d(output_dim),\n                WNConv1d(output_dim, 1, kernel_size=7, padding=3),\n                nn.Tanh(),\n            ]\n\n            self.model = nn.Sequential(*layers)\n\n        if use_vocos:\n            self.model = Vocos(\n                input_channels=in_channels,\n                dim=vocos_dim,\n                intermediate_dim=vocos_intermediate_dim,\n                num_layers=vocos_num_layers,\n                adanorm_num_embeddings=None,\n                n_fft=n_fft,\n                hop_size=hop_size,\n                padding=padding,\n            )\n\n        self.reset_parameters()\n\n    def forward(self, x=None, vq=False, eval_vq=False, n_quantizers=None):\n        \"\"\"\n        if vq is True, x = encoder output, then return quantized output;\n        else, x = quantized output, then return decoder output\n        \"\"\"\n        if vq is True:\n            if eval_vq:\n                self.quantizer.eval()\n            (\n                quantized_out,\n                all_indices,\n                all_commit_losses,\n                all_codebook_losses,\n                all_quantized,\n            ) = self.quantizer(x, n_quantizers=n_quantizers)\n            return (\n                quantized_out,\n                all_indices,\n                all_commit_losses,\n                all_codebook_losses,\n                all_quantized,\n            )\n\n        return self.model(x)\n\n    def quantize(self, x, n_quantizers=None):\n        self.quantizer.eval()\n        quantized_out, vq, _, _, _ = self.quantizer(x, n_quantizers=n_quantizers)\n        return quantized_out, vq\n\n    # TODO: check consistency of vq2emb and quantize\n    def vq2emb(self, vq, n_quantizers=None):\n        return self.quantizer.vq2emb(vq, n_quantizers=n_quantizers)\n\n    def decode(self, x):\n        return self.model(x)\n\n    def latent2dist(self, x, n_quantizers=None):\n        return self.quantizer.latent2dist(x, n_quantizers=n_quantizers)\n\n    def reset_parameters(self):\n        self.apply(init_weights)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/__init__.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom indextts.utils.maskgct.models.codec.amphion_codec.quantize.factorized_vector_quantize import (\n    FactorizedVectorQuantize,\n)\nfrom indextts.utils.maskgct.models.codec.amphion_codec.quantize.vector_quantize import VectorQuantize\nfrom indextts.utils.maskgct.models.codec.amphion_codec.quantize.lookup_free_quantize import LookupFreeQuantize\nfrom indextts.utils.maskgct.models.codec.amphion_codec.quantize.residual_vq import ResidualVQ\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/factorized_vector_quantize.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom torch.nn.utils import weight_norm\n\n\ndef WNConv1d(*args, **kwargs):\n    return weight_norm(nn.Conv1d(*args, **kwargs))\n\n\ndef WNConvTranspose1d(*args, **kwargs):\n    return weight_norm(nn.ConvTranspose1d(*args, **kwargs))\n\n\nclass FactorizedVectorQuantize(nn.Module):\n    def __init__(\n        self,\n        input_dim,\n        codebook_size,\n        codebook_dim,\n        commitment=0.005,\n        codebook_loss_weight=1.0,\n        use_l2_normlize=True,\n    ):\n        super().__init__()\n        self.input_dim = input_dim\n        self.codebook_size = codebook_size\n        self.codebook_dim = codebook_dim\n        self.commitment = commitment\n        self.codebook_loss_weight = codebook_loss_weight\n        self.use_l2_normlize = use_l2_normlize\n\n        if self.input_dim != self.codebook_dim:\n            self.in_project = WNConv1d(self.input_dim, self.codebook_dim, kernel_size=1)\n            self.out_project = WNConv1d(\n                self.codebook_dim, self.input_dim, kernel_size=1\n            )\n\n        else:\n            self.in_project = nn.Identity()\n            self.out_project = nn.Identity()\n\n        self.codebook = nn.Embedding(self.codebook_size, self.codebook_dim)\n\n    def forward(self, z):\n        \"\"\"\n        Parameters\n        ----------\n        z: torch.Tensor[B x D x T]\n\n        Returns\n        -------\n        z_q: torch.Tensor[B x D x T]\n            Quantized continuous representation of input\n        commit_loss: Tensor[B]\n            Commitment loss to train encoder to predict vectors closer to codebook entries\n        codebook_loss: Tensor[B]\n            Codebook loss to update the codebook\n        indices: torch.Tensor[B x T]\n            Codebook indices (quantized discrete representation of input)\n        z_e: torch.Tensor[B x D x T]\n            Projected latents (continuous representation of input before quantization)\n        \"\"\"\n\n        # Factorized codes project input into low-dimensional space if self.input_dim != self.codebook_dim\n        z_e = self.in_project(z)\n        z_q, indices = self.decode_latents(z_e)\n\n        # Compute commitment loss and codebook loss\n        if self.training:\n            commit_loss = (\n                F.mse_loss(z_e, z_q.detach(), reduction=\"none\").mean([1, 2])\n                * self.commitment\n            )\n            codebook_loss = (\n                F.mse_loss(z_q, z_e.detach(), reduction=\"none\").mean([1, 2])\n                * self.codebook_loss_weight\n            )\n        else:\n            commit_loss = torch.zeros(z.shape[0], device=z.device)\n            codebook_loss = torch.zeros(z.shape[0], device=z.device)\n\n        z_q = z_e + (z_q - z_e).detach()\n\n        z_q = self.out_project(z_q)\n\n        return z_q, commit_loss, codebook_loss, indices, z_e\n\n    def embed_code(self, embed_id):\n        return F.embedding(embed_id, self.codebook.weight)\n\n    def decode_code(self, embed_id):\n        return self.embed_code(embed_id).transpose(1, 2)\n\n    def decode_latents(self, latents):\n        encodings = rearrange(latents, \"b d t -> (b t) d\")\n        codebook = self.codebook.weight\n\n        # L2 normalize encodings and codebook\n        if self.use_l2_normlize:\n            encodings = F.normalize(encodings)\n            codebook = F.normalize(codebook)\n\n        # Compute euclidean distance between encodings and codebook,\n        # if use_l2_normlize is True, the distance is equal to cosine distance\n        dist = (\n            encodings.pow(2).sum(1, keepdim=True)\n            - 2 * encodings @ codebook.t()\n            + codebook.pow(2).sum(1, keepdim=True).t()\n        )\n        indices = rearrange((-dist).max(1)[1], \"(b t) -> b t\", b=latents.size(0))\n        z_q = self.decode_code(indices)\n\n        return z_q, indices\n\n    def vq2emb(self, vq, out_proj=True):\n        emb = self.decode_code(vq)\n        if out_proj:\n            emb = self.out_project(emb)\n        return emb\n\n    def latent2dist(self, latents):\n        encodings = rearrange(latents, \"b d t -> (b t) d\")\n        codebook = self.codebook.weight\n\n        # L2 normalize encodings and codebook\n        if self.use_l2_normlize:\n            encodings = F.normalize(encodings)\n            codebook = F.normalize(codebook)\n\n        # Compute euclidean distance between encodings and codebook,\n        # if use_l2_normlize is True, the distance is equal to cosine distance\n        dist = (\n            encodings.pow(2).sum(1, keepdim=True)\n            - 2 * encodings @ codebook.t()\n            + codebook.pow(2).sum(1, keepdim=True).t()\n        )  # (b*t, k)\n\n        indices = rearrange((-dist).max(1)[1], \"(b t) -> b t\", b=latents.size(0))\n        dist = rearrange(dist, \"(b t) k -> b t k\", b=latents.size(0))\n        z_q = self.decode_code(indices)\n\n        return -dist, indices, z_q\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/lookup_free_quantize.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom torch.nn.utils import weight_norm\n\n\ndef WNConv1d(*args, **kwargs):\n    return weight_norm(nn.Conv1d(*args, **kwargs))\n\n\ndef WNConvTranspose1d(*args, **kwargs):\n    return weight_norm(nn.ConvTranspose1d(*args, **kwargs))\n\n\nclass LookupFreeQuantize(nn.Module):\n    def __init__(\n        self,\n        input_dim,\n        codebook_size,\n        codebook_dim,\n    ):\n        super().__init__()\n        self.input_dim = input_dim\n        self.codebook_size = codebook_size\n        self.codebook_dim = codebook_dim\n\n        assert 2**codebook_dim == codebook_size\n\n        if self.input_dim != self.codebook_dim:\n            self.in_project = WNConv1d(self.input_dim, self.codebook_dim, kernel_size=1)\n            self.out_project = WNConv1d(\n                self.codebook_dim, self.input_dim, kernel_size=1\n            )\n\n        else:\n            self.in_project = nn.Identity()\n            self.out_project = nn.Identity()\n\n    def forward(self, z):\n        z_e = self.in_project(z)\n        z_e = F.sigmoid(z_e)\n\n        z_q = z_e + (torch.round(z_e) - z_e).detach()\n\n        z_q = self.out_project(z_q)\n\n        commit_loss = torch.zeros(z.shape[0], device=z.device)\n        codebook_loss = torch.zeros(z.shape[0], device=z.device)\n\n        bits = (\n            2\n            ** torch.arange(self.codebook_dim, device=z.device)\n            .unsqueeze(0)\n            .unsqueeze(-1)\n            .long()\n        )  # (1, d, 1)\n        indices = (torch.round(z_e.clone().detach()).long() * bits).sum(1).long()\n\n        return z_q, commit_loss, codebook_loss, indices, z_e\n\n    def vq2emb(self, vq, out_proj=True):\n        emb = torch.zeros(\n            vq.shape[0], self.codebook_dim, vq.shape[-1], device=vq.device\n        )  # (B, d, T)\n        for i in range(self.codebook_dim):\n            emb[:, i, :] = (vq % 2).float()\n            vq = vq // 2\n        if out_proj:\n            emb = self.out_project(emb)\n        return emb\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/residual_vq.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Union\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom torch.nn.utils import weight_norm\n\nfrom indextts.utils.maskgct.models.codec.amphion_codec.quantize.factorized_vector_quantize import (\n    FactorizedVectorQuantize,\n)\nfrom indextts.utils.maskgct.models.codec.amphion_codec.quantize.vector_quantize import VectorQuantize\nfrom indextts.utils.maskgct.models.codec.amphion_codec.quantize.lookup_free_quantize import LookupFreeQuantize\n\n\nclass ResidualVQ(nn.Module):\n    \"\"\"\n    Introduced in SoundStream: An end2end neural audio codec\n    https://arxiv.org/abs/2107.03312\n    \"\"\"\n\n    def __init__(\n        self,\n        input_dim: int = 256,\n        num_quantizers: int = 8,\n        codebook_size: int = 1024,\n        codebook_dim: int = 256,\n        quantizer_type: str = \"vq\",  # \"vq\" or \"fvq\" or \"lfq\"\n        quantizer_dropout: float = 0.5,\n        **kwargs,\n    ):\n        super().__init__()\n\n        self.input_dim = input_dim\n        self.num_quantizers = num_quantizers\n        self.codebook_size = codebook_size\n        self.codebook_dim = codebook_dim\n        self.quantizer_type = quantizer_type\n        self.quantizer_dropout = quantizer_dropout\n\n        if quantizer_type == \"vq\":\n            VQ = VectorQuantize\n        elif quantizer_type == \"fvq\":\n            VQ = FactorizedVectorQuantize\n        elif quantizer_type == \"lfq\":\n            VQ = LookupFreeQuantize\n        else:\n            raise ValueError(f\"Unknown quantizer type {quantizer_type}\")\n\n        self.quantizers = nn.ModuleList(\n            [\n                VQ(\n                    input_dim=input_dim,\n                    codebook_size=codebook_size,\n                    codebook_dim=codebook_dim,\n                    **kwargs,\n                )\n                for _ in range(num_quantizers)\n            ]\n        )\n\n    def forward(self, z, n_quantizers: int = None):\n        \"\"\"\n        Parameters\n        ----------\n        z : Tensor[B x D x T]\n        n_quantizers : int, optional\n            No. of quantizers to use\n            (n_quantizers < self.n_codebooks ex: for quantizer dropout)\n            Note: if `self.quantizer_dropout` is True, this argument is ignored\n                when in training mode, and a random number of quantizers is used.\n        Returns\n        -------\n        \"quantized_out\" : Tensor[B x D x T]\n            Quantized continuous representation of input\n        \"all_indices\" : Tensor[N x B x T]\n            Codebook indices for each codebook\n            (quantized discrete representation of input)\n        \"all_commit_losses\" : Tensor[N]\n        \"all_codebook_losses\" : Tensor[N]\n        \"all_quantized\" : Tensor[N x B x D x T]\n        \"\"\"\n\n        quantized_out = 0.0\n        residual = z\n\n        all_commit_losses = []\n        all_codebook_losses = []\n        all_indices = []\n        all_quantized = []\n\n        if n_quantizers is None:\n            n_quantizers = self.num_quantizers\n\n        if self.training:\n            n_quantizers = torch.ones((z.shape[0],)) * self.num_quantizers + 1\n            dropout = torch.randint(1, self.num_quantizers + 1, (z.shape[0],))\n            n_dropout = int(z.shape[0] * self.quantizer_dropout)\n            n_quantizers[:n_dropout] = dropout[:n_dropout]\n            n_quantizers = n_quantizers.to(z.device)\n\n        for i, quantizer in enumerate(self.quantizers):\n            if self.training is False and i >= n_quantizers:\n                break\n\n            z_q_i, commit_loss_i, codebook_loss_i, indices_i, z_e_i = quantizer(\n                residual\n            )\n\n            # Create mask to apply quantizer dropout\n            mask = (\n                torch.full((z.shape[0],), fill_value=i, device=z.device) < n_quantizers\n            )\n            quantized_out = quantized_out + z_q_i * mask[:, None, None]\n            residual = residual - z_q_i\n\n            commit_loss_i = (commit_loss_i * mask).mean()\n            codebook_loss_i = (codebook_loss_i * mask).mean()\n\n            all_commit_losses.append(commit_loss_i)\n            all_codebook_losses.append(codebook_loss_i)\n            all_indices.append(indices_i)\n            all_quantized.append(z_q_i)\n\n        all_commit_losses, all_codebook_losses, all_indices, all_quantized = map(\n            torch.stack,\n            (all_commit_losses, all_codebook_losses, all_indices, all_quantized),\n        )\n\n        return (\n            quantized_out,\n            all_indices,\n            all_commit_losses,\n            all_codebook_losses,\n            all_quantized,\n        )\n\n    def vq2emb(self, vq, n_quantizers=None):\n        quantized_out = 0.0\n        if n_quantizers is None:\n            n_quantizers = self.num_quantizers\n        for idx, quantizer in enumerate(self.quantizers):\n            if idx >= n_quantizers:\n                break\n            quantized_out += quantizer.vq2emb(vq[idx])\n        return quantized_out\n\n    def latent2dist(self, z, n_quantizers=None):\n        quantized_out = 0.0\n        residual = z\n\n        all_dists = []\n        all_indices = []\n\n        if n_quantizers is None:\n            n_quantizers = self.num_quantizers\n\n        for i, quantizer in enumerate(self.quantizers):\n            if self.training is False and i >= n_quantizers:\n                break\n            dist_i, indices_i, z_q_i = quantizer.latent2dist(residual)\n            all_dists.append(dist_i)\n            all_indices.append(indices_i)\n\n            quantized_out = quantized_out + z_q_i\n            residual = residual - z_q_i\n\n        all_dists = torch.stack(all_dists)\n        all_indices = torch.stack(all_indices)\n\n        return all_dists, all_indices\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/vector_quantize.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange, repeat\nfrom torch.nn.utils import weight_norm\n\n\ndef WNConv1d(*args, **kwargs):\n    return weight_norm(nn.Conv1d(*args, **kwargs))\n\n\ndef WNConvTranspose1d(*args, **kwargs):\n    return weight_norm(nn.ConvTranspose1d(*args, **kwargs))\n\n\ndef l2norm(t):\n    return F.normalize(t, p=2, dim=-1)\n\n\ndef ema_inplace(moving_avg, new, decay):\n    moving_avg.data.mul_(decay).add_(new, alpha=(1 - decay))\n\n\ndef laplace_smoothing(x, n_categories, eps=1e-5):\n    return (x + eps) / (x.sum() + n_categories * eps)\n\n\ndef sample_vectors(samples, num):\n    num_samples, device = samples.shape[0], samples.device\n\n    if num_samples >= num:\n        indices = torch.randperm(num_samples, device=device)[:num]\n    else:\n        indices = torch.randint(0, num_samples, (num,), device=device)\n\n    return samples[indices]\n\n\ndef kmeans(samples, num_clusters, num_iters=10, use_cosine_sim=False):\n    dim, dtype, device = samples.shape[-1], samples.dtype, samples.device\n\n    means = sample_vectors(samples, num_clusters)\n\n    for _ in range(num_iters):\n        if use_cosine_sim:\n            dists = samples @ means.t()\n        else:\n            diffs = rearrange(samples, \"n d -> n () d\") - rearrange(\n                means, \"c d -> () c d\"\n            )\n            dists = -(diffs**2).sum(dim=-1)\n\n        buckets = dists.max(dim=-1).indices\n        bins = torch.bincount(buckets, minlength=num_clusters)\n        zero_mask = bins == 0\n        bins_min_clamped = bins.masked_fill(zero_mask, 1)\n\n        new_means = buckets.new_zeros(num_clusters, dim, dtype=dtype)\n        new_means.scatter_add_(0, repeat(buckets, \"n -> n d\", d=dim), samples)\n        new_means = new_means / bins_min_clamped[..., None]\n\n        if use_cosine_sim:\n            new_means = l2norm(new_means)\n\n        means = torch.where(zero_mask[..., None], means, new_means)\n\n    return means, bins\n\n\nclass EuclideanCodebook(nn.Module):\n    def __init__(\n        self,\n        dim,\n        codebook_size,\n        kmeans_init=False,\n        kmeans_iters=10,\n        decay=0.8,\n        eps=1e-5,\n        threshold_ema_dead_code=2,\n        weight_init=False,\n    ):\n        super().__init__()\n\n        self.decay = decay\n        init_fn = torch.randn if not weight_init else torch.zeros\n        embed = init_fn(codebook_size, dim)\n\n        if weight_init:\n            nn.init.uniform_(embed, -1 / codebook_size, 1 / codebook_size)\n\n        self.codebook_size = codebook_size\n        self.kmeans_iters = kmeans_iters\n        self.eps = eps\n        self.threshold_ema_dead_code = threshold_ema_dead_code\n\n        self.register_buffer(\n            \"initted\", torch.Tensor([not kmeans_init])\n        )  # if kmeans_init is True, then initted is False; otherwise, initted is True\n        self.register_buffer(\"cluster_size\", torch.zeros(codebook_size))\n        self.register_buffer(\"embed\", embed)\n        self.register_buffer(\"embed_avg\", embed.clone())\n\n    def init_embed_(self, data):\n        embed, cluster_size = kmeans(data, self.codebook_size, self.kmeans_iters)\n        self.embed.data.copy_(embed)\n        self.embed_avg.data.copy_(embed)\n        self.cluster_size.data.copy_(cluster_size)\n        self.initted.data.copy_(torch.Tensor([True]))\n\n    def replace(self, samples, mask):\n        modified_codebook = torch.where(\n            mask[..., None], sample_vectors(samples, self.codebook_size), self.embed\n        )\n        self.embed.data.copy_(modified_codebook)\n\n    def expire_codes_(self, batch_samples):\n        if self.threshold_ema_dead_code == 0:\n            return\n\n        expired_codes = self.cluster_size < self.threshold_ema_dead_code\n        if not torch.any(expired_codes):\n            return\n        batch_samples = rearrange(batch_samples, \"... d -> (...) d\")\n        self.replace(batch_samples, mask=expired_codes)\n\n    def forward(self, x):\n        shape, dtype = x.shape, x.dtype\n        flatten = rearrange(x, \"... d -> (...) d\")\n        embed = self.embed.t()  # (codebook_size, dim) -> (dim, codebook_size)\n\n        if not self.initted:\n            self.init_embed_(flatten)\n\n        dist = -(\n            flatten.pow(2).sum(1, keepdim=True)\n            - 2 * flatten @ embed\n            + embed.pow(2).sum(0, keepdim=True)\n        )\n\n        embed_ind = dist.max(dim=-1).indices\n        embed_onehot = F.one_hot(embed_ind, self.codebook_size).type(dtype)\n        embed_ind = embed_ind.view(*shape[:-1])\n        quantize = F.embedding(embed_ind, self.embed)\n\n        if self.training:\n            ema_inplace(self.cluster_size, embed_onehot.sum(0), self.decay)\n            embed_sum = (\n                flatten.t() @ embed_onehot\n            )  # (dim, ...) @ (..., codebook_size) -> (dim, codebook_size)\n            ema_inplace(self.embed_avg, embed_sum.t(), self.decay)\n            cluster_size = (\n                laplace_smoothing(self.cluster_size, self.codebook_size, self.eps)\n                * self.cluster_size.sum()\n            )\n            embed_normalized = self.embed_avg / cluster_size.unsqueeze(1)\n            self.embed.data.copy_(embed_normalized)\n            self.expire_codes_(x)\n\n        return quantize, embed_ind\n\n    def vq2emb(self, vq):\n        quantize = F.embedding(vq, self.embed)\n        return quantize\n\n    def latent2dist(self, x):\n        shape, dtype = x.shape, x.dtype\n        flatten = rearrange(x, \"... d -> (...) d\")\n        embed = self.embed.t()  # (codebook_size, dim) -> (dim, codebook_size)\n\n        if not self.initted:\n            self.init_embed_(flatten)\n\n        dist = -(\n            flatten.pow(2).sum(1, keepdim=True)\n            - 2 * flatten @ embed\n            + embed.pow(2).sum(0, keepdim=True)\n        )\n\n        embed_ind = dist.max(dim=-1).indices\n        embed_ind = embed_ind.view(*shape[:-1])\n        quantize = F.embedding(embed_ind, self.embed)\n\n        dist = dist.view(*shape[:-1], -1)\n\n        return dist, embed_ind, quantize\n\n\nclass SimpleCodebook(nn.Module):\n    def __init__(\n        self,\n        dim,\n        codebook_size,\n        use_l2_normlize=False,\n    ):\n        super().__init__()\n\n        self.dim = dim\n        self.codebook_size = codebook_size\n        self.use_l2_normlize = use_l2_normlize\n\n        self.embed = nn.Embedding(self.codebook_size, self.dim)\n\n    def forward(self, x):\n        shape, dtype = x.shape, x.dtype\n        flatten = rearrange(x, \"... d -> (...) d\")\n        embed = self.embed.weight.t()  # (codebook_size, dim) -> (dim, codebook_size)\n\n        if self.use_l2_normlize:\n            flatten = F.normalize(flatten)\n            embed = F.normalize(embed)\n\n        dist = -(\n            flatten.pow(2).sum(1, keepdim=True)\n            - 2 * flatten @ embed\n            + embed.pow(2).sum(0, keepdim=True)\n        )\n\n        embed_ind = dist.max(dim=-1).indices\n        embed_ind = embed_ind.view(*shape[:-1])\n        quantize = F.embedding(embed_ind, self.embed)\n\n        return quantize, embed_ind\n\n    def vq2emb(self, vq):\n        quantize = F.embedding(vq, self.embed.weight)\n        return quantize\n\n    def latent2dist(self, x):\n        shape, dtype = x.shape, x.dtype\n        flatten = rearrange(x, \"... d -> (...) d\")\n        embed = self.embed.weight.t()  # (codebook_size, dim) -> (dim, codebook_size)\n\n        if self.use_l2_normlize:\n            flatten = F.normalize(flatten)\n            embed = F.normalize(embed)\n\n        dist = -(\n            flatten.pow(2).sum(1, keepdim=True)\n            - 2 * flatten @ embed\n            + embed.pow(2).sum(0, keepdim=True)\n        )\n\n        embed_ind = dist.max(dim=-1).indices\n        embed_ind = embed_ind.view(*shape[:-1])\n        quantize = F.embedding(embed_ind, self.embed)\n\n        dist = dist.view(*shape[:-1], -1)\n\n        return dist, embed_ind, quantize\n\n\nclass VectorQuantize(nn.Module):\n    \"\"\"Vector quantization and factorized vecotor quantization implementation\n    Args:\n        input_dim (int): Dimension of input.\n        codebook_size (int): Codebook size.\n        codebook_dim (int): Codebook dimension. We suggest use codebook_dim = input_dim\n            if use codebook_type == \"euclidean\", otherwise, if you want to use\n            factorized vector quantization, use codebook_dim as small number (e.g. 8 or 32).\n        commitment (float): Weight for commitment loss.\n        use_l2_normlize (bool): Whether to use l2 normlized codes for factorized vecotor quantization,\n            we suggest use it as True if you want to use factorized vector quantization\n        kmeans_init (bool): Whether to use kmeans to initialize the codebooks.\n        kmeans_iters (int): Number of iterations used for kmeans initialization.\n        decay (float): Decay for exponential moving average over the codebooks.\n        epsilon (float): Epsilon value for numerical stability.\n        threshold_ema_dead_code (int): Threshold for dead code expiration. Replace any codes\n            that have an exponential moving average cluster size less than the specified threshold with\n            randomly selected vector from the current batch.\n    \"\"\"\n\n    def __init__(\n        self,\n        input_dim,\n        codebook_size,\n        codebook_dim,\n        commitment=0.005,\n        codebook_loss_weight=1.0,\n        use_l2_normlize=False,\n        codebook_type=\"euclidean\",  # \"euclidean\" or \"simple\"\n        kmeans_init=False,\n        kmeans_iters=10,\n        decay=0.8,\n        eps=1e-5,\n        threshold_ema_dead_code=2,\n        weight_init=False,\n    ):\n        super().__init__()\n        self.input_dim = input_dim\n        self.codebook_size = codebook_size\n        self.codebook_dim = codebook_dim\n        self.commitment = commitment\n        self.codebook_loss_weight = codebook_loss_weight\n        self.use_l2_normlize = use_l2_normlize\n        self.codebook_type = codebook_type\n        self.kmeans_init = kmeans_init\n        self.kmeans_iters = kmeans_iters\n        self.decay = decay\n        self.eps = eps\n        self.threshold_ema_dead_code = threshold_ema_dead_code\n        self.weight_init = weight_init\n\n        if self.input_dim != self.codebook_dim:\n            self.in_project = WNConv1d(self.input_dim, self.codebook_dim, kernel_size=1)\n            self.out_project = WNConv1d(\n                self.codebook_dim, self.input_dim, kernel_size=1\n            )\n\n        else:\n            self.in_project = nn.Identity()\n            self.out_project = nn.Identity()\n\n        if self.codebook_type == \"euclidean\":\n            self.codebook = EuclideanCodebook(\n                self.codebook_dim,\n                codebook_size=self.codebook_size,\n                kmeans_init=self.kmeans_init,\n                kmeans_iters=self.kmeans_iters,\n                decay=self.decay,\n                eps=self.eps,\n                threshold_ema_dead_code=self.threshold_ema_dead_code,\n                weight_init=self.weight_init,\n            )\n        elif self.codebook_type == \"simple\":\n            self.codebook = SimpleCodebook(\n                self.codebook_dim,\n                codebook_size=self.codebook_size,\n                use_l2_normlize=self.use_l2_normlize,\n            )\n        else:\n            raise NotImplementedError(\n                f\"codebook_type {self.codebook_type} is not implemented!\"\n            )\n\n    def forward(self, z):\n        \"\"\"\n        Parameters\n        ----------\n        z: torch.Tensor[B x D x T]\n\n        Returns\n        -------\n        z_q: torch.Tensor[B x D x T]\n            Quantized continuous representation of input\n        commit_loss: Tensor[B]\n            Commitment loss to train encoder to predict vectors closer to codebook entries\n        codebook_loss: Tensor[B]\n            Codebook loss to update the codebook\n        indices: torch.Tensor[B x T]\n            Codebook indices (quantized discrete representation of input)\n        z_e: torch.Tensor[B x D x T]\n            Projected latents (continuous representation of input before quantization)\n        \"\"\"\n\n        # Factorized codes project input into low-dimensional space if self.input_dim != self.codebook_dim\n        z_e = self.in_project(z)\n        z_q, indices = self.decode_latents(z_e)\n\n        # Compute commitment loss and codebook loss\n        if self.training:\n            commit_loss = (\n                F.mse_loss(z_e, z_q.detach(), reduction=\"none\").mean([1, 2])\n                * self.commitment\n            )\n            codebook_loss = (\n                F.mse_loss(z_q, z_e.detach(), reduction=\"none\").mean([1, 2])\n                * self.codebook_loss_weight\n            )\n        else:\n            commit_loss = torch.zeros(z.shape[0], device=z.device)\n            codebook_loss = torch.zeros(z.shape[0], device=z.device)\n\n        z_q = z_e + (z_q - z_e).detach()\n\n        z_q = self.out_project(z_q)\n\n        return z_q, commit_loss, codebook_loss, indices, z_e\n\n    def decode_latents(self, latents):\n        encodings = rearrange(latents, \"b d t -> b t d\")\n        z_q, indices = self.codebook(encodings)\n        z_q = z_q.transpose(1, 2)\n        return z_q, indices\n\n    def vq2emb(self, vq, out_proj=True):\n        emb = self.codebook.vq2emb(vq)\n        emb = emb.transpose(1, 2)\n        if out_proj:\n            emb = self.out_project(emb)\n        return emb\n\n    def latent2dist(self, latents):\n        latents = rearrange(latents, \"b d t -> b t d\")\n        dist, embed_ind, quantize = self.codebook.latent2dist(latents)\n        return dist, embed_ind, quantize.transpose(1, 2)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/vocos.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Optional, Tuple\n\nimport numpy as np\nimport scipy\nimport torch\nfrom torch import nn, view_as_real, view_as_complex\nfrom torch import nn\nfrom torch.nn.utils import weight_norm, remove_weight_norm\nfrom torchaudio.functional.functional import _hz_to_mel, _mel_to_hz\nimport librosa\n\n\ndef safe_log(x: torch.Tensor, clip_val: float = 1e-7) -> torch.Tensor:\n    \"\"\"\n    Computes the element-wise logarithm of the input tensor with clipping to avoid near-zero values.\n\n    Args:\n        x (Tensor): Input tensor.\n        clip_val (float, optional): Minimum value to clip the input tensor. Defaults to 1e-7.\n\n    Returns:\n        Tensor: Element-wise logarithm of the input tensor with clipping applied.\n    \"\"\"\n    return torch.log(torch.clip(x, min=clip_val))\n\n\ndef symlog(x: torch.Tensor) -> torch.Tensor:\n    return torch.sign(x) * torch.log1p(x.abs())\n\n\ndef symexp(x: torch.Tensor) -> torch.Tensor:\n    return torch.sign(x) * (torch.exp(x.abs()) - 1)\n\n\nclass STFT(nn.Module):\n    def __init__(\n        self,\n        n_fft: int,\n        hop_length: int,\n        win_length: int,\n        center=True,\n    ):\n        super().__init__()\n        self.center = center\n        self.n_fft = n_fft\n        self.hop_length = hop_length\n        self.win_length = win_length\n        window = torch.hann_window(win_length)\n        self.register_buffer(\"window\", window)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        # x: (B, T * hop_length)\n\n        if not self.center:\n            pad = self.win_length - self.hop_length\n            x = torch.nn.functional.pad(x, (pad // 2, pad // 2), mode=\"reflect\")\n\n        stft_spec = torch.stft(\n            x,\n            self.n_fft,\n            hop_length=self.hop_length,\n            win_length=self.win_length,\n            window=self.window,\n            center=self.center,\n            return_complex=False,\n        )  # (B, n_fft // 2 + 1, T, 2)\n\n        rea = stft_spec[:, :, :, 0]  # (B, n_fft // 2 + 1, T, 2)\n        imag = stft_spec[:, :, :, 1]  # (B, n_fft // 2 + 1, T, 2)\n\n        log_mag = torch.log(\n            torch.abs(torch.sqrt(torch.pow(rea, 2) + torch.pow(imag, 2))) + 1e-5\n        )  # (B, n_fft // 2 + 1, T)\n        phase = torch.atan2(imag, rea)  # (B, n_fft // 2 + 1, T)\n\n        return log_mag, phase\n\n\nclass ISTFT(nn.Module):\n    \"\"\"\n    Custom implementation of ISTFT since torch.istft doesn't allow custom padding (other than `center=True`) with\n    windowing. This is because the NOLA (Nonzero Overlap Add) check fails at the edges.\n    See issue: https://github.com/pytorch/pytorch/issues/62323\n    Specifically, in the context of neural vocoding we are interested in \"same\" padding analogous to CNNs.\n    The NOLA constraint is met as we trim padded samples anyway.\n\n    Args:\n        n_fft (int): Size of Fourier transform.\n        hop_length (int): The distance between neighboring sliding window frames.\n        win_length (int): The size of window frame and STFT filter.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(\n        self, n_fft: int, hop_length: int, win_length: int, padding: str = \"same\"\n    ):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.n_fft = n_fft\n        self.hop_length = hop_length\n        self.win_length = win_length\n        window = torch.hann_window(win_length)\n        self.register_buffer(\"window\", window)\n\n    def forward(self, spec: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Compute the Inverse Short Time Fourier Transform (ISTFT) of a complex spectrogram.\n\n        Args:\n            spec (Tensor): Input complex spectrogram of shape (B, N, T), where B is the batch size,\n                            N is the number of frequency bins, and T is the number of time frames.\n\n        Returns:\n            Tensor: Reconstructed time-domain signal of shape (B, L), where L is the length of the output signal.\n        \"\"\"\n        if self.padding == \"center\":\n            # Fallback to pytorch native implementation\n            return torch.istft(\n                spec,\n                self.n_fft,\n                self.hop_length,\n                self.win_length,\n                self.window,\n                center=True,\n            )\n        elif self.padding == \"same\":\n            pad = (self.win_length - self.hop_length) // 2\n        else:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n\n        assert spec.dim() == 3, \"Expected a 3D tensor as input\"\n        B, N, T = spec.shape\n\n        # Inverse FFT\n        ifft = torch.fft.irfft(spec, self.n_fft, dim=1, norm=\"backward\")\n        ifft = ifft * self.window[None, :, None]\n\n        # Overlap and Add\n        output_size = (T - 1) * self.hop_length + self.win_length\n        y = torch.nn.functional.fold(\n            ifft,\n            output_size=(1, output_size),\n            kernel_size=(1, self.win_length),\n            stride=(1, self.hop_length),\n        )[:, 0, 0, pad:-pad]\n\n        # Window envelope\n        window_sq = self.window.square().expand(1, T, -1).transpose(1, 2)\n        window_envelope = torch.nn.functional.fold(\n            window_sq,\n            output_size=(1, output_size),\n            kernel_size=(1, self.win_length),\n            stride=(1, self.hop_length),\n        ).squeeze()[pad:-pad]\n\n        # Normalize\n        assert (window_envelope > 1e-11).all()\n        y = y / window_envelope\n\n        return y\n\n\nclass MDCT(nn.Module):\n    \"\"\"\n    Modified Discrete Cosine Transform (MDCT) module.\n\n    Args:\n        frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, frame_len: int, padding: str = \"same\"):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.frame_len = frame_len\n        N = frame_len // 2\n        n0 = (N + 1) / 2\n        window = torch.from_numpy(scipy.signal.cosine(frame_len)).float()\n        self.register_buffer(\"window\", window)\n\n        pre_twiddle = torch.exp(-1j * torch.pi * torch.arange(frame_len) / frame_len)\n        post_twiddle = torch.exp(-1j * torch.pi * n0 * (torch.arange(N) + 0.5) / N)\n        # view_as_real: NCCL Backend does not support ComplexFloat data type\n        # https://github.com/pytorch/pytorch/issues/71613\n        self.register_buffer(\"pre_twiddle\", view_as_real(pre_twiddle))\n        self.register_buffer(\"post_twiddle\", view_as_real(post_twiddle))\n\n    def forward(self, audio: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Apply the Modified Discrete Cosine Transform (MDCT) to the input audio.\n\n        Args:\n            audio (Tensor): Input audio waveform of shape (B, T), where B is the batch size\n                and T is the length of the audio.\n\n        Returns:\n            Tensor: MDCT coefficients of shape (B, L, N), where L is the number of output frames\n                and N is the number of frequency bins.\n        \"\"\"\n        if self.padding == \"center\":\n            audio = torch.nn.functional.pad(\n                audio, (self.frame_len // 2, self.frame_len // 2)\n            )\n        elif self.padding == \"same\":\n            # hop_length is 1/2 frame_len\n            audio = torch.nn.functional.pad(\n                audio, (self.frame_len // 4, self.frame_len // 4)\n            )\n        else:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n\n        x = audio.unfold(-1, self.frame_len, self.frame_len // 2)\n        N = self.frame_len // 2\n        x = x * self.window.expand(x.shape)\n        X = torch.fft.fft(\n            x * view_as_complex(self.pre_twiddle).expand(x.shape), dim=-1\n        )[..., :N]\n        res = X * view_as_complex(self.post_twiddle).expand(X.shape) * np.sqrt(1 / N)\n        return torch.real(res) * np.sqrt(2)\n\n\nclass IMDCT(nn.Module):\n    \"\"\"\n    Inverse Modified Discrete Cosine Transform (IMDCT) module.\n\n    Args:\n        frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, frame_len: int, padding: str = \"same\"):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.frame_len = frame_len\n        N = frame_len // 2\n        n0 = (N + 1) / 2\n        window = torch.from_numpy(scipy.signal.cosine(frame_len)).float()\n        self.register_buffer(\"window\", window)\n\n        pre_twiddle = torch.exp(1j * torch.pi * n0 * torch.arange(N * 2) / N)\n        post_twiddle = torch.exp(1j * torch.pi * (torch.arange(N * 2) + n0) / (N * 2))\n        self.register_buffer(\"pre_twiddle\", view_as_real(pre_twiddle))\n        self.register_buffer(\"post_twiddle\", view_as_real(post_twiddle))\n\n    def forward(self, X: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Apply the Inverse Modified Discrete Cosine Transform (IMDCT) to the input MDCT coefficients.\n\n        Args:\n            X (Tensor): Input MDCT coefficients of shape (B, L, N), where B is the batch size,\n                L is the number of frames, and N is the number of frequency bins.\n\n        Returns:\n            Tensor: Reconstructed audio waveform of shape (B, T), where T is the length of the audio.\n        \"\"\"\n        B, L, N = X.shape\n        Y = torch.zeros((B, L, N * 2), dtype=X.dtype, device=X.device)\n        Y[..., :N] = X\n        Y[..., N:] = -1 * torch.conj(torch.flip(X, dims=(-1,)))\n        y = torch.fft.ifft(\n            Y * view_as_complex(self.pre_twiddle).expand(Y.shape), dim=-1\n        )\n        y = (\n            torch.real(y * view_as_complex(self.post_twiddle).expand(y.shape))\n            * np.sqrt(N)\n            * np.sqrt(2)\n        )\n        result = y * self.window.expand(y.shape)\n        output_size = (1, (L + 1) * N)\n        audio = torch.nn.functional.fold(\n            result.transpose(1, 2),\n            output_size=output_size,\n            kernel_size=(1, self.frame_len),\n            stride=(1, self.frame_len // 2),\n        )[:, 0, 0, :]\n\n        if self.padding == \"center\":\n            pad = self.frame_len // 2\n        elif self.padding == \"same\":\n            pad = self.frame_len // 4\n        else:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n\n        audio = audio[:, pad:-pad]\n        return audio\n\n\nclass FourierHead(nn.Module):\n    \"\"\"Base class for inverse fourier modules.\"\"\"\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        raise NotImplementedError(\"Subclasses must implement the forward method.\")\n\n\nclass ISTFTHead(FourierHead):\n    \"\"\"\n    ISTFT Head module for predicting STFT complex coefficients.\n\n    Args:\n        dim (int): Hidden dimension of the model.\n        n_fft (int): Size of Fourier transform.\n        hop_length (int): The distance between neighboring sliding window frames, which should align with\n                          the resolution of the input features.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, dim: int, n_fft: int, hop_length: int, padding: str = \"same\"):\n        super().__init__()\n        out_dim = n_fft + 2\n        self.out = torch.nn.Linear(dim, out_dim)\n        self.istft = ISTFT(\n            n_fft=n_fft, hop_length=hop_length, win_length=n_fft, padding=padding\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Forward pass of the ISTFTHead module.\n\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        x = self.out(x).transpose(1, 2)\n        mag, p = x.chunk(2, dim=1)\n        mag = torch.exp(mag)\n        mag = torch.clip(\n            mag, max=1e2\n        )  # safeguard to prevent excessively large magnitudes\n        # wrapping happens here. These two lines produce real and imaginary value\n        x = torch.cos(p)\n        y = torch.sin(p)\n        # recalculating phase here does not produce anything new\n        # only costs time\n        # phase = torch.atan2(y, x)\n        # S = mag * torch.exp(phase * 1j)\n        # better directly produce the complex value\n        S = mag * (x + 1j * y)\n        audio = self.istft(S)\n        return audio\n\n\nclass IMDCTSymExpHead(FourierHead):\n    \"\"\"\n    IMDCT Head module for predicting MDCT coefficients with symmetric exponential function\n\n    Args:\n        dim (int): Hidden dimension of the model.\n        mdct_frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n        sample_rate (int, optional): The sample rate of the audio. If provided, the last layer will be initialized\n                                     based on perceptual scaling. Defaults to None.\n        clip_audio (bool, optional): Whether to clip the audio output within the range of [-1.0, 1.0]. Defaults to False.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        mdct_frame_len: int,\n        padding: str = \"same\",\n        sample_rate: Optional[int] = None,\n        clip_audio: bool = False,\n    ):\n        super().__init__()\n        out_dim = mdct_frame_len // 2\n        self.out = nn.Linear(dim, out_dim)\n        self.imdct = IMDCT(frame_len=mdct_frame_len, padding=padding)\n        self.clip_audio = clip_audio\n\n        if sample_rate is not None:\n            # optionally init the last layer following mel-scale\n            m_max = _hz_to_mel(sample_rate // 2)\n            m_pts = torch.linspace(0, m_max, out_dim)\n            f_pts = _mel_to_hz(m_pts)\n            scale = 1 - (f_pts / f_pts.max())\n\n            with torch.no_grad():\n                self.out.weight.mul_(scale.view(-1, 1))\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Forward pass of the IMDCTSymExpHead module.\n\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        x = self.out(x)\n        x = symexp(x)\n        x = torch.clip(\n            x, min=-1e2, max=1e2\n        )  # safeguard to prevent excessively large magnitudes\n        audio = self.imdct(x)\n        if self.clip_audio:\n            audio = torch.clip(x, min=-1.0, max=1.0)\n\n        return audio\n\n\nclass IMDCTCosHead(FourierHead):\n    \"\"\"\n    IMDCT Head module for predicting MDCT coefficients with parametrizing MDCT = exp(m) · cos(p)\n\n    Args:\n        dim (int): Hidden dimension of the model.\n        mdct_frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n        clip_audio (bool, optional): Whether to clip the audio output within the range of [-1.0, 1.0]. Defaults to False.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        mdct_frame_len: int,\n        padding: str = \"same\",\n        clip_audio: bool = False,\n    ):\n        super().__init__()\n        self.clip_audio = clip_audio\n        self.out = nn.Linear(dim, mdct_frame_len)\n        self.imdct = IMDCT(frame_len=mdct_frame_len, padding=padding)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Forward pass of the IMDCTCosHead module.\n\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        x = self.out(x)\n        m, p = x.chunk(2, dim=2)\n        m = torch.exp(m).clip(\n            max=1e2\n        )  # safeguard to prevent excessively large magnitudes\n        audio = self.imdct(m * torch.cos(p))\n        if self.clip_audio:\n            audio = torch.clip(x, min=-1.0, max=1.0)\n        return audio\n\n\nclass ConvNeXtBlock(nn.Module):\n    \"\"\"ConvNeXt Block adapted from https://github.com/facebookresearch/ConvNeXt to 1D audio signal.\n\n    Args:\n        dim (int): Number of input channels.\n        intermediate_dim (int): Dimensionality of the intermediate layer.\n        layer_scale_init_value (float, optional): Initial value for the layer scale. None means no scaling.\n            Defaults to None.\n        adanorm_num_embeddings (int, optional): Number of embeddings for AdaLayerNorm.\n            None means non-conditional LayerNorm. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        intermediate_dim: int,\n        layer_scale_init_value: float,\n        adanorm_num_embeddings: Optional[int] = None,\n    ):\n        super().__init__()\n        self.dwconv = nn.Conv1d(\n            dim, dim, kernel_size=7, padding=3, groups=dim\n        )  # depthwise conv\n        self.adanorm = adanorm_num_embeddings is not None\n        if adanorm_num_embeddings:\n            self.norm = AdaLayerNorm(adanorm_num_embeddings, dim, eps=1e-6)\n        else:\n            self.norm = nn.LayerNorm(dim, eps=1e-6)\n        self.pwconv1 = nn.Linear(\n            dim, intermediate_dim\n        )  # pointwise/1x1 convs, implemented with linear layers\n        self.act = nn.GELU()\n        self.pwconv2 = nn.Linear(intermediate_dim, dim)\n        self.gamma = (\n            nn.Parameter(layer_scale_init_value * torch.ones(dim), requires_grad=True)\n            if layer_scale_init_value > 0\n            else None\n        )\n\n    def forward(\n        self, x: torch.Tensor, cond_embedding_id: Optional[torch.Tensor] = None\n    ) -> torch.Tensor:\n        residual = x\n        x = self.dwconv(x)\n        x = x.transpose(1, 2)  # (B, C, T) -> (B, T, C)\n        if self.adanorm:\n            assert cond_embedding_id is not None\n            x = self.norm(x, cond_embedding_id)\n        else:\n            x = self.norm(x)\n        x = self.pwconv1(x)\n        x = self.act(x)\n        x = self.pwconv2(x)\n        if self.gamma is not None:\n            x = self.gamma * x\n        x = x.transpose(1, 2)  # (B, T, C) -> (B, C, T)\n\n        x = residual + x\n        return x\n\n\nclass AdaLayerNorm(nn.Module):\n    \"\"\"\n    Adaptive Layer Normalization module with learnable embeddings per `num_embeddings` classes\n\n    Args:\n        num_embeddings (int): Number of embeddings.\n        embedding_dim (int): Dimension of the embeddings.\n    \"\"\"\n\n    def __init__(self, num_embeddings: int, embedding_dim: int, eps: float = 1e-6):\n        super().__init__()\n        self.eps = eps\n        self.dim = embedding_dim\n        self.scale = nn.Embedding(\n            num_embeddings=num_embeddings, embedding_dim=embedding_dim\n        )\n        self.shift = nn.Embedding(\n            num_embeddings=num_embeddings, embedding_dim=embedding_dim\n        )\n        torch.nn.init.ones_(self.scale.weight)\n        torch.nn.init.zeros_(self.shift.weight)\n\n    def forward(self, x: torch.Tensor, cond_embedding_id: torch.Tensor) -> torch.Tensor:\n        scale = self.scale(cond_embedding_id)\n        shift = self.shift(cond_embedding_id)\n        x = nn.functional.layer_norm(x, (self.dim,), eps=self.eps)\n        x = x * scale + shift\n        return x\n\n\nclass ResBlock1(nn.Module):\n    \"\"\"\n    ResBlock adapted from HiFi-GAN V1 (https://github.com/jik876/hifi-gan) with dilated 1D convolutions,\n    but without upsampling layers.\n\n    Args:\n        dim (int): Number of input channels.\n        kernel_size (int, optional): Size of the convolutional kernel. Defaults to 3.\n        dilation (tuple[int], optional): Dilation factors for the dilated convolutions.\n            Defaults to (1, 3, 5).\n        lrelu_slope (float, optional): Negative slope of the LeakyReLU activation function.\n            Defaults to 0.1.\n        layer_scale_init_value (float, optional): Initial value for the layer scale. None means no scaling.\n            Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        kernel_size: int = 3,\n        dilation: Tuple[int, int, int] = (1, 3, 5),\n        lrelu_slope: float = 0.1,\n        layer_scale_init_value: Optional[float] = None,\n    ):\n        super().__init__()\n        self.lrelu_slope = lrelu_slope\n        self.convs1 = nn.ModuleList(\n            [\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=dilation[0],\n                        padding=self.get_padding(kernel_size, dilation[0]),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=dilation[1],\n                        padding=self.get_padding(kernel_size, dilation[1]),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=dilation[2],\n                        padding=self.get_padding(kernel_size, dilation[2]),\n                    )\n                ),\n            ]\n        )\n\n        self.convs2 = nn.ModuleList(\n            [\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=self.get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=self.get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=self.get_padding(kernel_size, 1),\n                    )\n                ),\n            ]\n        )\n\n        self.gamma = nn.ParameterList(\n            [\n                (\n                    nn.Parameter(\n                        layer_scale_init_value * torch.ones(dim, 1), requires_grad=True\n                    )\n                    if layer_scale_init_value is not None\n                    else None\n                ),\n                (\n                    nn.Parameter(\n                        layer_scale_init_value * torch.ones(dim, 1), requires_grad=True\n                    )\n                    if layer_scale_init_value is not None\n                    else None\n                ),\n                (\n                    nn.Parameter(\n                        layer_scale_init_value * torch.ones(dim, 1), requires_grad=True\n                    )\n                    if layer_scale_init_value is not None\n                    else None\n                ),\n            ]\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        for c1, c2, gamma in zip(self.convs1, self.convs2, self.gamma):\n            xt = torch.nn.functional.leaky_relu(x, negative_slope=self.lrelu_slope)\n            xt = c1(xt)\n            xt = torch.nn.functional.leaky_relu(xt, negative_slope=self.lrelu_slope)\n            xt = c2(xt)\n            if gamma is not None:\n                xt = gamma * xt\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n    @staticmethod\n    def get_padding(kernel_size: int, dilation: int = 1) -> int:\n        return int((kernel_size * dilation - dilation) / 2)\n\n\nclass Backbone(nn.Module):\n    \"\"\"Base class for the generator's backbone. It preserves the same temporal resolution across all layers.\"\"\"\n\n    def forward(self, x: torch.Tensor, **kwargs) -> torch.Tensor:\n        \"\"\"\n        Args:\n            x (Tensor): Input tensor of shape (B, C, L), where B is the batch size,\n                        C denotes output features, and L is the sequence length.\n\n        Returns:\n            Tensor: Output of shape (B, L, H), where B is the batch size, L is the sequence length,\n                    and H denotes the model dimension.\n        \"\"\"\n        raise NotImplementedError(\"Subclasses must implement the forward method.\")\n\n\nclass VocosBackbone(Backbone):\n    \"\"\"\n    Vocos backbone module built with ConvNeXt blocks. Supports additional conditioning with Adaptive Layer Normalization\n\n    Args:\n        input_channels (int): Number of input features channels.\n        dim (int): Hidden dimension of the model.\n        intermediate_dim (int): Intermediate dimension used in ConvNeXtBlock.\n        num_layers (int): Number of ConvNeXtBlock layers.\n        layer_scale_init_value (float, optional): Initial value for layer scaling. Defaults to `1 / num_layers`.\n        adanorm_num_embeddings (int, optional): Number of embeddings for AdaLayerNorm.\n                                                None means non-conditional model. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        input_channels: int,\n        dim: int,\n        intermediate_dim: int,\n        num_layers: int,\n        layer_scale_init_value: Optional[float] = None,\n        adanorm_num_embeddings: Optional[int] = None,\n    ):\n        super().__init__()\n        self.input_channels = input_channels\n        self.embed = nn.Conv1d(input_channels, dim, kernel_size=7, padding=3)\n        self.adanorm = adanorm_num_embeddings is not None\n        if adanorm_num_embeddings:\n            self.norm = AdaLayerNorm(adanorm_num_embeddings, dim, eps=1e-6)\n        else:\n            self.norm = nn.LayerNorm(dim, eps=1e-6)\n        layer_scale_init_value = layer_scale_init_value or 1 / num_layers\n        self.convnext = nn.ModuleList(\n            [\n                ConvNeXtBlock(\n                    dim=dim,\n                    intermediate_dim=intermediate_dim,\n                    layer_scale_init_value=layer_scale_init_value,\n                    adanorm_num_embeddings=adanorm_num_embeddings,\n                )\n                for _ in range(num_layers)\n            ]\n        )\n        self.final_layer_norm = nn.LayerNorm(dim, eps=1e-6)\n        self.apply(self._init_weights)\n\n    def _init_weights(self, m):\n        if isinstance(m, (nn.Conv1d, nn.Linear)):\n            nn.init.trunc_normal_(m.weight, std=0.02)\n            nn.init.constant_(m.bias, 0)\n\n    def forward(self, x: torch.Tensor, **kwargs) -> torch.Tensor:\n        bandwidth_id = kwargs.get(\"bandwidth_id\", None)\n        x = self.embed(x)\n        if self.adanorm:\n            assert bandwidth_id is not None\n            x = self.norm(x.transpose(1, 2), cond_embedding_id=bandwidth_id)\n        else:\n            x = self.norm(x.transpose(1, 2))\n        x = x.transpose(1, 2)\n        for conv_block in self.convnext:\n            x = conv_block(x, cond_embedding_id=bandwidth_id)\n        x = self.final_layer_norm(x.transpose(1, 2))\n        return x\n\n\nclass VocosResNetBackbone(Backbone):\n    \"\"\"\n    Vocos backbone module built with ResBlocks.\n\n    Args:\n        input_channels (int): Number of input features channels.\n        dim (int): Hidden dimension of the model.\n        num_blocks (int): Number of ResBlock1 blocks.\n        layer_scale_init_value (float, optional): Initial value for layer scaling. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        input_channels,\n        dim,\n        num_blocks,\n        layer_scale_init_value=None,\n    ):\n        super().__init__()\n        self.input_channels = input_channels\n        self.embed = weight_norm(\n            nn.Conv1d(input_channels, dim, kernel_size=3, padding=1)\n        )\n        layer_scale_init_value = layer_scale_init_value or 1 / num_blocks / 3\n        self.resnet = nn.Sequential(\n            *[\n                ResBlock1(dim=dim, layer_scale_init_value=layer_scale_init_value)\n                for _ in range(num_blocks)\n            ]\n        )\n\n    def forward(self, x: torch.Tensor, **kwargs) -> torch.Tensor:\n        x = self.embed(x)\n        x = self.resnet(x)\n        x = x.transpose(1, 2)\n        return x\n\n\nclass Vocos(nn.Module):\n    def __init__(\n        self,\n        input_channels: int = 256,\n        dim: int = 384,\n        intermediate_dim: int = 1152,\n        num_layers: int = 8,\n        n_fft: int = 800,\n        hop_size: int = 200,\n        padding: str = \"same\",\n        adanorm_num_embeddings=None,\n        cfg=None,\n    ):\n        super().__init__()\n\n        input_channels = (\n            cfg.input_channels\n            if cfg is not None and hasattr(cfg, \"input_channels\")\n            else input_channels\n        )\n        dim = cfg.dim if cfg is not None and hasattr(cfg, \"dim\") else dim\n        intermediate_dim = (\n            cfg.intermediate_dim\n            if cfg is not None and hasattr(cfg, \"intermediate_dim\")\n            else intermediate_dim\n        )\n        num_layers = (\n            cfg.num_layers\n            if cfg is not None and hasattr(cfg, \"num_layers\")\n            else num_layers\n        )\n        adanorm_num_embeddings = (\n            cfg.adanorm_num_embeddings\n            if cfg is not None and hasattr(cfg, \"adanorm_num_embeddings\")\n            else adanorm_num_embeddings\n        )\n        n_fft = cfg.n_fft if cfg is not None and hasattr(cfg, \"n_fft\") else n_fft\n        hop_size = (\n            cfg.hop_size if cfg is not None and hasattr(cfg, \"hop_size\") else hop_size\n        )\n        padding = (\n            cfg.padding if cfg is not None and hasattr(cfg, \"padding\") else padding\n        )\n\n        self.backbone = VocosBackbone(\n            input_channels=input_channels,\n            dim=dim,\n            intermediate_dim=intermediate_dim,\n            num_layers=num_layers,\n            adanorm_num_embeddings=adanorm_num_embeddings,\n        )\n        self.head = ISTFTHead(dim, n_fft, hop_size, padding)\n\n    def forward(self, x):\n        x = self.backbone(x)\n        x = self.head(x)\n\n        return x[:, None, :]\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_dataset.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Iterable\nimport torch\nimport numpy as np\nimport torch.utils.data\nfrom torch.nn.utils.rnn import pad_sequence\nfrom utils.data_utils import *\nfrom torch.utils.data import ConcatDataset, Dataset\n\n\nclass CodecDataset(torch.utils.data.Dataset):\n    def __init__(self, cfg, dataset, is_valid=False):\n        \"\"\"\n        Args:\n            cfg: config\n            dataset: dataset name\n            is_valid: whether to use train or valid dataset\n        \"\"\"\n        assert isinstance(dataset, str)\n\n        processed_data_dir = os.path.join(cfg.preprocess.processed_dir, dataset)\n\n        meta_file = cfg.preprocess.valid_file if is_valid else cfg.preprocess.train_file\n        self.metafile_path = os.path.join(processed_data_dir, meta_file)\n        self.metadata = self.get_metadata()\n\n        self.data_root = processed_data_dir\n        self.cfg = cfg\n\n        if cfg.preprocess.use_audio:\n            self.utt2audio_path = {}\n            for utt_info in self.metadata:\n                dataset = utt_info[\"Dataset\"]\n                uid = utt_info[\"Uid\"]\n                utt = \"{}_{}\".format(dataset, uid)\n\n                self.utt2audio_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.audio_dir,\n                    uid + \".npy\",\n                )\n        elif cfg.preprocess.use_label:\n            self.utt2label_path = {}\n            for utt_info in self.metadata:\n                dataset = utt_info[\"Dataset\"]\n                uid = utt_info[\"Uid\"]\n                utt = \"{}_{}\".format(dataset, uid)\n\n                self.utt2label_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.label_dir,\n                    uid + \".npy\",\n                )\n        elif cfg.preprocess.use_one_hot:\n            self.utt2one_hot_path = {}\n            for utt_info in self.metadata:\n                dataset = utt_info[\"Dataset\"]\n                uid = utt_info[\"Uid\"]\n                utt = \"{}_{}\".format(dataset, uid)\n\n                self.utt2one_hot_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.one_hot_dir,\n                    uid + \".npy\",\n                )\n\n        if cfg.preprocess.use_mel:\n            self.utt2mel_path = {}\n            for utt_info in self.metadata:\n                dataset = utt_info[\"Dataset\"]\n                uid = utt_info[\"Uid\"]\n                utt = \"{}_{}\".format(dataset, uid)\n\n                self.utt2mel_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.mel_dir,\n                    uid + \".npy\",\n                )\n\n        if cfg.preprocess.use_frame_pitch:\n            self.utt2frame_pitch_path = {}\n            for utt_info in self.metadata:\n                dataset = utt_info[\"Dataset\"]\n                uid = utt_info[\"Uid\"]\n                utt = \"{}_{}\".format(dataset, uid)\n\n                self.utt2frame_pitch_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.pitch_dir,\n                    uid + \".npy\",\n                )\n\n        if cfg.preprocess.use_uv:\n            self.utt2uv_path = {}\n            for utt_info in self.metadata:\n                dataset = utt_info[\"Dataset\"]\n                uid = utt_info[\"Uid\"]\n                utt = \"{}_{}\".format(dataset, uid)\n                self.utt2uv_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.uv_dir,\n                    uid + \".npy\",\n                )\n\n        if cfg.preprocess.use_amplitude_phase:\n            self.utt2logamp_path = {}\n            self.utt2pha_path = {}\n            self.utt2rea_path = {}\n            self.utt2imag_path = {}\n            for utt_info in self.metadata:\n                dataset = utt_info[\"Dataset\"]\n                uid = utt_info[\"Uid\"]\n                utt = \"{}_{}\".format(dataset, uid)\n                self.utt2logamp_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.log_amplitude_dir,\n                    uid + \".npy\",\n                )\n                self.utt2pha_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.phase_dir,\n                    uid + \".npy\",\n                )\n                self.utt2rea_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.real_dir,\n                    uid + \".npy\",\n                )\n                self.utt2imag_path[utt] = os.path.join(\n                    cfg.preprocess.processed_dir,\n                    dataset,\n                    cfg.preprocess.imaginary_dir,\n                    uid + \".npy\",\n                )\n\n    def __getitem__(self, index):\n        utt_info = self.metadata[index]\n\n        dataset = utt_info[\"Dataset\"]\n        uid = utt_info[\"Uid\"]\n        utt = \"{}_{}\".format(dataset, uid)\n\n        single_feature = dict()\n\n        if self.cfg.preprocess.use_mel:\n            mel = np.load(self.utt2mel_path[utt])\n            assert mel.shape[0] == self.cfg.preprocess.n_mel  # [n_mels, T]\n\n            if \"target_len\" not in single_feature.keys():\n                single_feature[\"target_len\"] = mel.shape[1]\n\n            single_feature[\"mel\"] = mel\n\n        if self.cfg.preprocess.use_frame_pitch:\n            frame_pitch = np.load(self.utt2frame_pitch_path[utt])\n\n            if \"target_len\" not in single_feature.keys():\n                single_feature[\"target_len\"] = len(frame_pitch)\n\n            aligned_frame_pitch = align_length(\n                frame_pitch, single_feature[\"target_len\"]\n            )\n\n            single_feature[\"frame_pitch\"] = aligned_frame_pitch\n\n        if self.cfg.preprocess.use_audio:\n            audio = np.load(self.utt2audio_path[utt])\n\n            single_feature[\"audio\"] = audio\n\n        return single_feature\n\n    def get_metadata(self):\n        with open(self.metafile_path, \"r\", encoding=\"utf-8\") as f:\n            metadata = json.load(f)\n\n        return metadata\n\n    def get_dataset_name(self):\n        return self.metadata[0][\"Dataset\"]\n\n    def __len__(self):\n        return len(self.metadata)\n\n\nclass CodecConcatDataset(ConcatDataset):\n    def __init__(self, datasets: Iterable[Dataset], full_audio_inference=False):\n        \"\"\"Concatenate a series of datasets with their random inference audio merged.\"\"\"\n        super().__init__(datasets)\n\n        self.cfg = self.datasets[0].cfg\n\n        self.metadata = []\n\n        # Merge metadata\n        for dataset in self.datasets:\n            self.metadata += dataset.metadata\n\n        # Merge random inference features\n        if full_audio_inference:\n            self.eval_audios = []\n            self.eval_dataset_names = []\n            if self.cfg.preprocess.use_mel:\n                self.eval_mels = []\n            if self.cfg.preprocess.use_frame_pitch:\n                self.eval_pitchs = []\n            for dataset in self.datasets:\n                self.eval_audios.append(dataset.eval_audio)\n                self.eval_dataset_names.append(dataset.get_dataset_name())\n                if self.cfg.preprocess.use_mel:\n                    self.eval_mels.append(dataset.eval_mel)\n                if self.cfg.preprocess.use_frame_pitch:\n                    self.eval_pitchs.append(dataset.eval_pitch)\n\n\nclass CodecCollator(object):\n    \"\"\"Zero-pads model inputs and targets based on number of frames per step\"\"\"\n\n    def __init__(self, cfg):\n        self.cfg = cfg\n\n    def __call__(self, batch):\n        packed_batch_features = dict()\n\n        # mel: [b, n_mels, frame]\n        # frame_pitch: [b, frame]\n        # audios: [b, frame * hop_size]\n\n        for key in batch[0].keys():\n            if key == \"target_len\":\n                packed_batch_features[\"target_len\"] = torch.LongTensor(\n                    [b[\"target_len\"] for b in batch]\n                )\n                masks = [\n                    torch.ones((b[\"target_len\"], 1), dtype=torch.long) for b in batch\n                ]\n                packed_batch_features[\"mask\"] = pad_sequence(\n                    masks, batch_first=True, padding_value=0\n                )\n            elif key == \"mel\":\n                values = [torch.from_numpy(b[key]).T for b in batch]\n                packed_batch_features[key] = pad_sequence(\n                    values, batch_first=True, padding_value=0\n                )\n            else:\n                values = [torch.from_numpy(b[key]) for b in batch]\n                packed_batch_features[key] = pad_sequence(\n                    values, batch_first=True, padding_value=0\n                )\n\n        return packed_batch_features\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_inference.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport os\nimport torch\nimport json\nimport json5\nimport time\nimport accelerate\nimport random\nimport numpy as np\nimport shutil\n\nfrom pathlib import Path\nfrom tqdm import tqdm\nfrom glob import glob\nfrom accelerate.logging import get_logger\nfrom torch.utils.data import DataLoader\n\nfrom models.vocoders.vocoder_dataset import (\n    VocoderDataset,\n    VocoderCollator,\n    VocoderConcatDataset,\n)\n\nfrom models.vocoders.gan.generator import bigvgan, hifigan, melgan, nsfhifigan, apnet\nfrom models.vocoders.flow.waveglow import waveglow\nfrom models.vocoders.diffusion.diffwave import diffwave\nfrom models.vocoders.autoregressive.wavenet import wavenet\nfrom models.vocoders.autoregressive.wavernn import wavernn\n\nfrom models.vocoders.gan import gan_vocoder_inference\nfrom models.vocoders.diffusion import diffusion_vocoder_inference\n\nfrom utils.io import save_audio\n\n_vocoders = {\n    \"diffwave\": diffwave.DiffWave,\n    \"wavernn\": wavernn.WaveRNN,\n    \"wavenet\": wavenet.WaveNet,\n    \"waveglow\": waveglow.WaveGlow,\n    \"nsfhifigan\": nsfhifigan.NSFHiFiGAN,\n    \"bigvgan\": bigvgan.BigVGAN,\n    \"hifigan\": hifigan.HiFiGAN,\n    \"melgan\": melgan.MelGAN,\n    \"apnet\": apnet.APNet,\n}\n\n# Forward call for generalized Inferencor\n_vocoder_forward_funcs = {\n    # \"world\": world_inference.synthesis_audios,\n    # \"wavernn\": wavernn_inference.synthesis_audios,\n    # \"wavenet\": wavenet_inference.synthesis_audios,\n    \"diffwave\": diffusion_vocoder_inference.vocoder_inference,\n    \"nsfhifigan\": gan_vocoder_inference.vocoder_inference,\n    \"bigvgan\": gan_vocoder_inference.vocoder_inference,\n    \"melgan\": gan_vocoder_inference.vocoder_inference,\n    \"hifigan\": gan_vocoder_inference.vocoder_inference,\n    \"apnet\": gan_vocoder_inference.vocoder_inference,\n}\n\n# APIs for other tasks. e.g. SVC, TTS, TTA...\n_vocoder_infer_funcs = {\n    # \"world\": world_inference.synthesis_audios,\n    # \"wavernn\": wavernn_inference.synthesis_audios,\n    # \"wavenet\": wavenet_inference.synthesis_audios,\n    \"diffwave\": diffusion_vocoder_inference.synthesis_audios,\n    \"nsfhifigan\": gan_vocoder_inference.synthesis_audios,\n    \"bigvgan\": gan_vocoder_inference.synthesis_audios,\n    \"melgan\": gan_vocoder_inference.synthesis_audios,\n    \"hifigan\": gan_vocoder_inference.synthesis_audios,\n    \"apnet\": gan_vocoder_inference.synthesis_audios,\n}\n\n\nclass VocoderInference(object):\n    def __init__(self, args=None, cfg=None, infer_type=\"from_dataset\"):\n        super().__init__()\n\n        start = time.monotonic_ns()\n        self.args = args\n        self.cfg = cfg\n        self.infer_type = infer_type\n\n        # Init accelerator\n        self.accelerator = accelerate.Accelerator()\n        self.accelerator.wait_for_everyone()\n\n        # Get logger\n        with self.accelerator.main_process_first():\n            self.logger = get_logger(\"inference\", log_level=args.log_level)\n\n        # Log some info\n        self.logger.info(\"=\" * 56)\n        self.logger.info(\"||\\t\\t\" + \"New inference process started.\" + \"\\t\\t||\")\n        self.logger.info(\"=\" * 56)\n        self.logger.info(\"\\n\")\n\n        self.vocoder_dir = args.vocoder_dir\n        self.logger.debug(f\"Vocoder dir: {args.vocoder_dir}\")\n\n        os.makedirs(args.output_dir, exist_ok=True)\n        if os.path.exists(os.path.join(args.output_dir, \"pred\")):\n            shutil.rmtree(os.path.join(args.output_dir, \"pred\"))\n        if os.path.exists(os.path.join(args.output_dir, \"gt\")):\n            shutil.rmtree(os.path.join(args.output_dir, \"gt\"))\n        os.makedirs(os.path.join(args.output_dir, \"pred\"), exist_ok=True)\n        os.makedirs(os.path.join(args.output_dir, \"gt\"), exist_ok=True)\n\n        # Set random seed\n        with self.accelerator.main_process_first():\n            start = time.monotonic_ns()\n            self._set_random_seed(self.cfg.train.random_seed)\n            end = time.monotonic_ns()\n            self.logger.debug(\n                f\"Setting random seed done in {(end - start) / 1e6:.2f}ms\"\n            )\n            self.logger.debug(f\"Random seed: {self.cfg.train.random_seed}\")\n\n        # Setup inference mode\n        if self.infer_type == \"infer_from_dataset\":\n            self.cfg.dataset = self.args.infer_datasets\n        elif self.infer_type == \"infer_from_feature\":\n            self._build_tmp_dataset_from_feature()\n            self.cfg.dataset = [\"tmp\"]\n        elif self.infer_type == \"infer_from_audio\":\n            self._build_tmp_dataset_from_audio()\n            self.cfg.dataset = [\"tmp\"]\n\n        # Setup data loader\n        with self.accelerator.main_process_first():\n            self.logger.info(\"Building dataset...\")\n            start = time.monotonic_ns()\n            self.test_dataloader = self._build_dataloader()\n            end = time.monotonic_ns()\n            self.logger.info(f\"Building dataset done in {(end - start) / 1e6:.2f}ms\")\n\n        # Build model\n        with self.accelerator.main_process_first():\n            self.logger.info(\"Building model...\")\n            start = time.monotonic_ns()\n            self.model = self._build_model()\n            end = time.monotonic_ns()\n            self.logger.info(f\"Building model done in {(end - start) / 1e6:.3f}ms\")\n\n        # Init with accelerate\n        self.logger.info(\"Initializing accelerate...\")\n        start = time.monotonic_ns()\n        self.accelerator = accelerate.Accelerator()\n        (self.model, self.test_dataloader) = self.accelerator.prepare(\n            self.model, self.test_dataloader\n        )\n        end = time.monotonic_ns()\n        self.accelerator.wait_for_everyone()\n        self.logger.info(f\"Initializing accelerate done in {(end - start) / 1e6:.3f}ms\")\n\n        with self.accelerator.main_process_first():\n            self.logger.info(\"Loading checkpoint...\")\n            start = time.monotonic_ns()\n            if os.path.isdir(args.vocoder_dir):\n                if os.path.isdir(os.path.join(args.vocoder_dir, \"checkpoint\")):\n                    self._load_model(os.path.join(args.vocoder_dir, \"checkpoint\"))\n                else:\n                    self._load_model(os.path.join(args.vocoder_dir))\n            else:\n                self._load_model(os.path.join(args.vocoder_dir))\n            end = time.monotonic_ns()\n            self.logger.info(f\"Loading checkpoint done in {(end - start) / 1e6:.3f}ms\")\n\n        self.model.eval()\n        self.accelerator.wait_for_everyone()\n\n    def _build_tmp_dataset_from_feature(self):\n        if os.path.exists(os.path.join(self.cfg.preprocess.processed_dir, \"tmp\")):\n            shutil.rmtree(os.path.join(self.cfg.preprocess.processed_dir, \"tmp\"))\n\n        utts = []\n        mels = glob(os.path.join(self.args.feature_folder, \"mels\", \"*.npy\"))\n        for i, mel in enumerate(mels):\n            uid = mel.split(\"/\")[-1].split(\".\")[0]\n            utt = {\"Dataset\": \"tmp\", \"Uid\": uid, \"index\": i}\n            utts.append(utt)\n\n        os.makedirs(os.path.join(self.cfg.preprocess.processed_dir, \"tmp\"))\n        with open(\n            os.path.join(self.cfg.preprocess.processed_dir, \"tmp\", \"test.json\"), \"w\"\n        ) as f:\n            json.dump(utts, f)\n\n        meta_info = {\"dataset\": \"tmp\", \"test\": {\"size\": len(utts)}}\n\n        with open(\n            os.path.join(self.cfg.preprocess.processed_dir, \"tmp\", \"meta_info.json\"),\n            \"w\",\n        ) as f:\n            json.dump(meta_info, f)\n\n        features = glob(os.path.join(self.args.feature_folder, \"*\"))\n        for feature in features:\n            feature_name = feature.split(\"/\")[-1]\n            if os.path.isfile(feature):\n                continue\n            shutil.copytree(\n                os.path.join(self.args.feature_folder, feature_name),\n                os.path.join(self.cfg.preprocess.processed_dir, \"tmp\", feature_name),\n            )\n\n    def _build_tmp_dataset_from_audio(self):\n        if os.path.exists(os.path.join(self.cfg.preprocess.processed_dir, \"tmp\")):\n            shutil.rmtree(os.path.join(self.cfg.preprocess.processed_dir, \"tmp\"))\n\n        utts = []\n        audios = glob(os.path.join(self.args.audio_folder, \"*\"))\n        for i, audio in enumerate(audios):\n            uid = audio.split(\"/\")[-1].split(\".\")[0]\n            utt = {\"Dataset\": \"tmp\", \"Uid\": uid, \"index\": i, \"Path\": audio}\n            utts.append(utt)\n\n        os.makedirs(os.path.join(self.cfg.preprocess.processed_dir, \"tmp\"))\n        with open(\n            os.path.join(self.cfg.preprocess.processed_dir, \"tmp\", \"test.json\"), \"w\"\n        ) as f:\n            json.dump(utts, f)\n\n        meta_info = {\"dataset\": \"tmp\", \"test\": {\"size\": len(utts)}}\n\n        with open(\n            os.path.join(self.cfg.preprocess.processed_dir, \"tmp\", \"meta_info.json\"),\n            \"w\",\n        ) as f:\n            json.dump(meta_info, f)\n\n        from processors import acoustic_extractor\n\n        acoustic_extractor.extract_utt_acoustic_features_serial(\n            utts, os.path.join(self.cfg.preprocess.processed_dir, \"tmp\"), self.cfg\n        )\n\n    def _build_test_dataset(self):\n        return VocoderDataset, VocoderCollator\n\n    def _build_model(self):\n        model = _vocoders[self.cfg.model.generator](self.cfg)\n        return model\n\n    def _build_dataloader(self):\n        \"\"\"Build dataloader which merges a series of datasets.\"\"\"\n        Dataset, Collator = self._build_test_dataset()\n\n        datasets_list = []\n        for dataset in self.cfg.dataset:\n            subdataset = Dataset(self.cfg, dataset, is_valid=True)\n            datasets_list.append(subdataset)\n        test_dataset = VocoderConcatDataset(datasets_list, full_audio_inference=False)\n        test_collate = Collator(self.cfg)\n        test_batch_size = min(self.cfg.inference.batch_size, len(test_dataset))\n        test_dataloader = DataLoader(\n            test_dataset,\n            collate_fn=test_collate,\n            num_workers=1,\n            batch_size=test_batch_size,\n            shuffle=False,\n        )\n        self.test_batch_size = test_batch_size\n        self.test_dataset = test_dataset\n        return test_dataloader\n\n    def _load_model(self, checkpoint_dir, from_multi_gpu=False):\n        \"\"\"Load model from checkpoint. If a folder is given, it will\n        load the latest checkpoint in checkpoint_dir. If a path is given\n        it will load the checkpoint specified by checkpoint_path.\n        **Only use this method after** ``accelerator.prepare()``.\n        \"\"\"\n        if os.path.isdir(checkpoint_dir):\n            if \"epoch\" in checkpoint_dir and \"step\" in checkpoint_dir:\n                checkpoint_path = checkpoint_dir\n            else:\n                # Load the latest accelerator state dicts\n                ls = [\n                    str(i)\n                    for i in Path(checkpoint_dir).glob(\"*\")\n                    if not \"audio\" in str(i)\n                ]\n                ls.sort(\n                    key=lambda x: int(x.split(\"/\")[-1].split(\"_\")[0].split(\"-\")[-1]),\n                    reverse=True,\n                )\n                checkpoint_path = ls[0]\n            accelerate.load_checkpoint_and_dispatch(\n                self.accelerator.unwrap_model(self.model),\n                os.path.join(checkpoint_path, \"pytorch_model.bin\"),\n            )\n            return str(checkpoint_path)\n        else:\n            # Load old .pt checkpoints\n            if self.cfg.model.generator in [\n                \"bigvgan\",\n                \"hifigan\",\n                \"melgan\",\n                \"nsfhifigan\",\n            ]:\n                ckpt = torch.load(\n                    checkpoint_dir,\n                    map_location=(\n                        torch.device(\"cuda\")\n                        if torch.cuda.is_available()\n                        else torch.device(\"cpu\")\n                    ),\n                )\n                if from_multi_gpu:\n                    pretrained_generator_dict = ckpt[\"generator_state_dict\"]\n                    generator_dict = self.model.state_dict()\n\n                    new_generator_dict = {\n                        k.split(\"module.\")[-1]: v\n                        for k, v in pretrained_generator_dict.items()\n                        if (\n                            k.split(\"module.\")[-1] in generator_dict\n                            and v.shape == generator_dict[k.split(\"module.\")[-1]].shape\n                        )\n                    }\n\n                    generator_dict.update(new_generator_dict)\n\n                    self.model.load_state_dict(generator_dict)\n                else:\n                    self.model.load_state_dict(ckpt[\"generator_state_dict\"])\n            else:\n                self.model.load_state_dict(torch.load(checkpoint_dir)[\"state_dict\"])\n            return str(checkpoint_dir)\n\n    def inference(self):\n        \"\"\"Inference via batches\"\"\"\n        for i, batch in tqdm(enumerate(self.test_dataloader)):\n            if self.cfg.preprocess.use_frame_pitch:\n                audio_pred = _vocoder_forward_funcs[self.cfg.model.generator](\n                    self.cfg,\n                    self.model,\n                    batch[\"mel\"].transpose(-1, -2),\n                    f0s=batch[\"frame_pitch\"].float(),\n                    device=next(self.model.parameters()).device,\n                )\n            else:\n                audio_pred = _vocoder_forward_funcs[self.cfg.model.generator](\n                    self.cfg,\n                    self.model,\n                    batch[\"mel\"].transpose(-1, -2),\n                    device=next(self.model.parameters()).device,\n                )\n            audio_ls = audio_pred.chunk(self.test_batch_size)\n            audio_gt_ls = batch[\"audio\"].cpu().chunk(self.test_batch_size)\n            length_ls = batch[\"target_len\"].cpu().chunk(self.test_batch_size)\n            j = 0\n            for it, it_gt, l in zip(audio_ls, audio_gt_ls, length_ls):\n                l = l.item()\n                it = it.squeeze(0).squeeze(0)[: l * self.cfg.preprocess.hop_size]\n                it_gt = it_gt.squeeze(0)[: l * self.cfg.preprocess.hop_size]\n                uid = self.test_dataset.metadata[i * self.test_batch_size + j][\"Uid\"]\n                save_audio(\n                    os.path.join(self.args.output_dir, \"pred\", \"{}.wav\").format(uid),\n                    it,\n                    self.cfg.preprocess.sample_rate,\n                )\n                save_audio(\n                    os.path.join(self.args.output_dir, \"gt\", \"{}.wav\").format(uid),\n                    it_gt,\n                    self.cfg.preprocess.sample_rate,\n                )\n                j += 1\n\n        if os.path.exists(os.path.join(self.cfg.preprocess.processed_dir, \"tmp\")):\n            shutil.rmtree(os.path.join(self.cfg.preprocess.processed_dir, \"tmp\"))\n\n    def _set_random_seed(self, seed):\n        \"\"\"Set random seed for all possible random modules.\"\"\"\n        random.seed(seed)\n        np.random.seed(seed)\n        torch.random.manual_seed(seed)\n\n    def _count_parameters(self, model):\n        return sum(p.numel() for p in model.parameters())\n\n    def _dump_cfg(self, path):\n        os.makedirs(os.path.dirname(path), exist_ok=True)\n        json5.dump(\n            self.cfg,\n            open(path, \"w\"),\n            indent=4,\n            sort_keys=True,\n            ensure_ascii=False,\n            quote_keys=True,\n        )\n\n\ndef load_nnvocoder(\n    cfg,\n    vocoder_name,\n    weights_file,\n    from_multi_gpu=False,\n):\n    \"\"\"Load the specified vocoder.\n    cfg: the vocoder config filer.\n    weights_file: a folder or a .pt path.\n    from_multi_gpu: automatically remove the \"module\" string in state dicts if \"True\".\n    \"\"\"\n    print(\"Loading Vocoder from Weights file: {}\".format(weights_file))\n\n    # Build model\n    model = _vocoders[vocoder_name](cfg)\n    if not os.path.isdir(weights_file):\n        # Load from .pt file\n        if vocoder_name in [\"bigvgan\", \"hifigan\", \"melgan\", \"nsfhifigan\"]:\n            ckpt = torch.load(\n                weights_file,\n                map_location=(\n                    torch.device(\"cuda\")\n                    if torch.cuda.is_available()\n                    else torch.device(\"cpu\")\n                ),\n            )\n            if from_multi_gpu:\n                pretrained_generator_dict = ckpt[\"generator_state_dict\"]\n                generator_dict = model.state_dict()\n\n                new_generator_dict = {\n                    k.split(\"module.\")[-1]: v\n                    for k, v in pretrained_generator_dict.items()\n                    if (\n                        k.split(\"module.\")[-1] in generator_dict\n                        and v.shape == generator_dict[k.split(\"module.\")[-1]].shape\n                    )\n                }\n\n                generator_dict.update(new_generator_dict)\n\n                model.load_state_dict(generator_dict)\n            else:\n                model.load_state_dict(ckpt[\"generator_state_dict\"])\n        else:\n            model.load_state_dict(torch.load(weights_file)[\"state_dict\"])\n    else:\n        # Load from accelerator state dict\n        weights_file = os.path.join(weights_file, \"checkpoint\")\n        ls = [str(i) for i in Path(weights_file).glob(\"*\") if not \"audio\" in str(i)]\n        ls.sort(key=lambda x: int(x.split(\"_\")[-3].split(\"-\")[-1]), reverse=True)\n        checkpoint_path = ls[0]\n        accelerator = accelerate.Accelerator()\n        model = accelerator.prepare(model)\n        accelerator.load_state(checkpoint_path)\n\n    if torch.cuda.is_available():\n        model = model.cuda()\n\n    model = model.eval()\n    return model\n\n\ndef tensorize(data, device, n_samples):\n    \"\"\"\n    data: a list of numpy array\n    \"\"\"\n    assert type(data) == list\n    if n_samples:\n        data = data[:n_samples]\n    data = [torch.as_tensor(x, device=device) for x in data]\n    return data\n\n\ndef synthesis(\n    cfg,\n    vocoder_weight_file,\n    n_samples,\n    pred,\n    f0s=None,\n    batch_size=64,\n    fast_inference=False,\n):\n    \"\"\"Synthesis audios from a given vocoder and series of given features.\n    cfg: vocoder config.\n    vocoder_weight_file: a folder of accelerator state dict or a path to the .pt file.\n    pred: a list of numpy arrays. [(seq_len1, acoustic_features_dim), (seq_len2, acoustic_features_dim), ...]\n    \"\"\"\n\n    vocoder_name = cfg.model.generator\n\n    print(\"Synthesis audios using {} vocoder...\".format(vocoder_name))\n\n    ###### TODO: World Vocoder Refactor ######\n    # if vocoder_name == \"world\":\n    #     world_inference.synthesis_audios(\n    #         cfg, dataset_name, split, n_samples, pred, save_dir, tag\n    #     )\n    #     return\n\n    # ====== Loading neural vocoder model ======\n    vocoder = load_nnvocoder(\n        cfg, vocoder_name, weights_file=vocoder_weight_file, from_multi_gpu=True\n    )\n    device = next(vocoder.parameters()).device\n\n    # ====== Inference for predicted acoustic features ======\n    # pred: (frame_len, n_mels) -> (n_mels, frame_len)\n    mels_pred = tensorize([p.T for p in pred], device, n_samples)\n    print(\"For predicted mels, #sample = {}...\".format(len(mels_pred)))\n    audios_pred = _vocoder_infer_funcs[vocoder_name](\n        cfg,\n        vocoder,\n        mels_pred,\n        f0s=f0s,\n        batch_size=batch_size,\n        fast_inference=fast_inference,\n    )\n    return audios_pred\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_sampler.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nimport random\n\nfrom torch.utils.data import ConcatDataset, Dataset\nfrom torch.utils.data.sampler import (\n    BatchSampler,\n    RandomSampler,\n    Sampler,\n    SequentialSampler,\n)\n\n\nclass ScheduledSampler(Sampler):\n    \"\"\"A sampler that samples data from a given concat-dataset.\n\n    Args:\n        concat_dataset (ConcatDataset): a concatenated dataset consisting of all datasets\n        batch_size (int): batch size\n        holistic_shuffle (bool): whether to shuffle the whole dataset or not\n        logger (logging.Logger): logger to print warning message\n\n    Usage:\n        For cfg.train.batch_size = 3, cfg.train.holistic_shuffle = False, cfg.train.drop_last = True:\n        >>> list(ScheduledSampler(ConcatDataset([0, 1, 2], [3, 4, 5], [6, 7, 8]])))\n        [3, 4, 5, 0, 1, 2, 6, 7, 8]\n    \"\"\"\n\n    def __init__(\n        self, concat_dataset, batch_size, holistic_shuffle, logger=None, type=\"train\"\n    ):\n        if not isinstance(concat_dataset, ConcatDataset):\n            raise ValueError(\n                \"concat_dataset must be an instance of ConcatDataset, but got {}\".format(\n                    type(concat_dataset)\n                )\n            )\n        if not isinstance(batch_size, int):\n            raise ValueError(\n                \"batch_size must be an integer, but got {}\".format(type(batch_size))\n            )\n        if not isinstance(holistic_shuffle, bool):\n            raise ValueError(\n                \"holistic_shuffle must be a boolean, but got {}\".format(\n                    type(holistic_shuffle)\n                )\n            )\n\n        self.concat_dataset = concat_dataset\n        self.batch_size = batch_size\n        self.holistic_shuffle = holistic_shuffle\n\n        affected_dataset_name = []\n        affected_dataset_len = []\n        for dataset in concat_dataset.datasets:\n            dataset_len = len(dataset)\n            dataset_name = dataset.get_dataset_name()\n            if dataset_len < batch_size:\n                affected_dataset_name.append(dataset_name)\n                affected_dataset_len.append(dataset_len)\n\n        self.type = type\n        for dataset_name, dataset_len in zip(\n            affected_dataset_name, affected_dataset_len\n        ):\n            if not type == \"valid\":\n                logger.warning(\n                    \"The {} dataset {} has a length of {}, which is smaller than the batch size {}. This may cause unexpected behavior.\".format(\n                        type, dataset_name, dataset_len, batch_size\n                    )\n                )\n\n    def __len__(self):\n        # the number of batches with drop last\n        num_of_batches = sum(\n            [\n                math.floor(len(dataset) / self.batch_size)\n                for dataset in self.concat_dataset.datasets\n            ]\n        )\n        return num_of_batches * self.batch_size\n\n    def __iter__(self):\n        iters = []\n        for dataset in self.concat_dataset.datasets:\n            iters.append(\n                SequentialSampler(dataset).__iter__()\n                if self.holistic_shuffle\n                else RandomSampler(dataset).__iter__()\n            )\n        init_indices = [0] + self.concat_dataset.cumulative_sizes[:-1]\n        output_batches = []\n        for dataset_idx in range(len(self.concat_dataset.datasets)):\n            cur_batch = []\n            for idx in iters[dataset_idx]:\n                cur_batch.append(idx + init_indices[dataset_idx])\n                if len(cur_batch) == self.batch_size:\n                    output_batches.append(cur_batch)\n                    cur_batch = []\n                if self.type == \"valid\" and len(cur_batch) > 0:\n                    output_batches.append(cur_batch)\n                    cur_batch = []\n        # force drop last in training\n        random.shuffle(output_batches)\n        output_indices = [item for sublist in output_batches for item in sublist]\n        return iter(output_indices)\n\n\ndef build_samplers(concat_dataset: Dataset, cfg, logger, type):\n    sampler = ScheduledSampler(\n        concat_dataset,\n        cfg.train.batch_size,\n        cfg.train.sampler.holistic_shuffle,\n        logger,\n        type,\n    )\n    batch_sampler = BatchSampler(\n        sampler,\n        cfg.train.batch_size,\n        cfg.train.sampler.drop_last if not type == \"valid\" else False,\n    )\n    return sampler, batch_sampler\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_trainer.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport os\nimport random\nfrom pathlib import Path\nimport re\n\nimport accelerate\nimport json5\nimport numpy as np\nimport torch\nfrom accelerate.utils import ProjectConfiguration\nfrom torch.utils.data import DataLoader\nfrom tqdm import tqdm\n\nfrom models.codec.codec_sampler import build_samplers\n\n\nclass CodecTrainer:\n    def __init__(self):\n        super().__init__()\n\n    def _init_accelerator(self):\n        \"\"\"Initialize the accelerator components.\"\"\"\n        self.exp_dir = os.path.join(\n            os.path.abspath(self.cfg.log_dir), self.args.exp_name\n        )\n        project_config = ProjectConfiguration(\n            project_dir=self.exp_dir, logging_dir=os.path.join(self.exp_dir, \"log\")\n        )\n        self.accelerator = accelerate.Accelerator(\n            gradient_accumulation_steps=self.cfg.train.gradient_accumulation_step,\n            log_with=self.cfg.train.tracker,\n            project_config=project_config,\n        )\n        if self.accelerator.is_main_process:\n            os.makedirs(project_config.project_dir, exist_ok=True)\n            os.makedirs(project_config.logging_dir, exist_ok=True)\n        with self.accelerator.main_process_first():\n            self.accelerator.init_trackers(self.args.exp_name)\n\n    def _build_dataset(self):\n        pass\n\n    def _build_criterion(self):\n        pass\n\n    def _build_model(self):\n        pass\n\n    def _build_dataloader(self):\n        \"\"\"Build dataloader which merges a series of datasets.\"\"\"\n        # Build dataset instance for each dataset and combine them by ConcatDataset\n        Dataset, Collator = self._build_dataset()\n\n        # Build train set\n        train_dataset = Dataset(self.cfg, self.cfg.dataset, is_valid=False)\n        train_collate = Collator(self.cfg)\n        sampler = torch.utils.data.distributed.DistributedSampler(\n            train_dataset,\n            num_replicas=self.accelerator.num_processes,\n            rank=self.accelerator.local_process_index,\n            shuffle=True,\n            seed=self.cfg.train.random_seed,\n        )\n        train_loader = DataLoader(\n            train_dataset,\n            batch_size=self.cfg.train.batch_size,\n            collate_fn=train_collate,\n            sampler=sampler,\n            num_workers=self.cfg.train.dataloader.num_worker,\n            pin_memory=self.cfg.train.dataloader.pin_memory,\n        )\n        return train_loader, None\n\n    def _build_optimizer(self):\n        pass\n\n    def _build_scheduler(self):\n        pass\n\n    def _load_model(self, checkpoint_dir, checkpoint_path=None, resume_type=\"resume\"):\n        \"\"\"Load model from checkpoint. If a folder is given, it will\n        load the latest checkpoint in checkpoint_dir. If a path is given\n        it will load the checkpoint specified by checkpoint_path.\n        **Only use this method after** ``accelerator.prepare()``.\n        \"\"\"\n        if checkpoint_path is None:\n            ls = [str(i) for i in Path(checkpoint_dir).glob(\"*\")]\n            ls.sort(key=lambda x: int(x.split(\"_\")[-3].split(\"-\")[-1]), reverse=True)\n            checkpoint_path = ls[0]\n        if resume_type == \"resume\":\n            self.accelerator.load_state(checkpoint_path)\n        elif resume_type == \"finetune\":\n            accelerate.load_checkpoint_and_dispatch(\n                self.accelerator.unwrap_model(self.model),\n                os.path.join(checkpoint_path, \"pytorch_model.bin\"),\n            )\n            self.logger.info(\"Load model weights for finetune SUCCESS!\")\n        else:\n            raise ValueError(\"Unsupported resume type: {}\".format(resume_type))\n        self.epoch = int(checkpoint_path.split(\"_\")[-3].split(\"-\")[-1]) + 1\n        self.step = int(checkpoint_path.split(\"_\")[-2].split(\"-\")[-1]) + 1\n        return checkpoint_path\n\n    def train_loop(self):\n        pass\n\n    def _train_epoch(self):\n        pass\n\n    def _valid_epoch(self):\n        pass\n\n    def _train_step(self):\n        pass\n\n    def _valid_step(self):\n        pass\n\n    def _inference(self):\n        pass\n\n    def _set_random_seed(self, seed):\n        \"\"\"Set random seed for all possible random modules.\"\"\"\n        random.seed(seed)\n        np.random.seed(seed)\n        torch.random.manual_seed(seed)\n\n    def _check_nan(self, loss):\n        if torch.any(torch.isnan(loss)):\n            self.logger.fatal(\"Fatal Error: NaN!\")\n            self.logger.error(\"loss = {:.6f}\".format(loss.item()), in_order=True)\n\n    def _check_basic_configs(self):\n        if self.cfg.train.gradient_accumulation_step <= 0:\n            self.logger.fatal(\"Invalid gradient_accumulation_step value!\")\n            self.logger.error(\n                f\"Invalid gradient_accumulation_step value: {self.cfg.train.gradient_accumulation_step}. It should be positive.\"\n            )\n            self.accelerator.end_training()\n            raise ValueError(\n                f\"Invalid gradient_accumulation_step value: {self.cfg.train.gradient_accumulation_step}. It should be positive.\"\n            )\n\n    def _count_parameters(self):\n        pass\n\n    def _dump_cfg(self, path):\n        os.makedirs(os.path.dirname(path), exist_ok=True)\n        json5.dump(\n            self.cfg,\n            open(path, \"w\"),\n            indent=4,\n            sort_keys=True,\n            ensure_ascii=False,\n            quote_keys=True,\n        )\n\n    def _is_valid_pattern(self, directory_name):\n        directory_name = str(directory_name)\n        pattern = r\"^epoch-\\d{4}_step-\\d{7}_loss-\\d{1}\\.\\d{6}\"\n        return re.match(pattern, directory_name) is not None\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/__init__.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nfrom .filter import *\nfrom .resample import *\nfrom .act import *\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/act.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nimport torch.nn as nn\nfrom .resample import UpSample1d, DownSample1d\n\n\nclass Activation1d(nn.Module):\n    def __init__(\n        self,\n        activation,\n        up_ratio: int = 2,\n        down_ratio: int = 2,\n        up_kernel_size: int = 12,\n        down_kernel_size: int = 12,\n    ):\n        super().__init__()\n        self.up_ratio = up_ratio\n        self.down_ratio = down_ratio\n        self.act = activation\n        self.upsample = UpSample1d(up_ratio, up_kernel_size)\n        self.downsample = DownSample1d(down_ratio, down_kernel_size)\n\n    # x: [B,C,T]\n    def forward(self, x):\n        x = self.upsample(x)\n        x = self.act(x)\n        x = self.downsample(x)\n\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/filter.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport math\n\nif \"sinc\" in dir(torch):\n    sinc = torch.sinc\nelse:\n    # This code is adopted from adefossez's julius.core.sinc under the MIT License\n    # https://adefossez.github.io/julius/julius/core.html\n    def sinc(x: torch.Tensor):\n        \"\"\"\n        Implementation of sinc, i.e. sin(pi * x) / (pi * x)\n        __Warning__: Different to julius.sinc, the input is multiplied by `pi`!\n        \"\"\"\n        return torch.where(\n            x == 0,\n            torch.tensor(1.0, device=x.device, dtype=x.dtype),\n            torch.sin(math.pi * x) / math.pi / x,\n        )\n\n\n# This code is adopted from adefossez's julius.lowpass.LowPassFilters under the MIT License\n# https://adefossez.github.io/julius/julius/lowpass.html\ndef kaiser_sinc_filter1d(\n    cutoff, half_width, kernel_size\n):  # return filter [1,1,kernel_size]\n    even = kernel_size % 2 == 0\n    half_size = kernel_size // 2\n\n    # For kaiser window\n    delta_f = 4 * half_width\n    A = 2.285 * (half_size - 1) * math.pi * delta_f + 7.95\n    if A > 50.0:\n        beta = 0.1102 * (A - 8.7)\n    elif A >= 21.0:\n        beta = 0.5842 * (A - 21) ** 0.4 + 0.07886 * (A - 21.0)\n    else:\n        beta = 0.0\n    window = torch.kaiser_window(kernel_size, beta=beta, periodic=False)\n\n    # ratio = 0.5/cutoff -> 2 * cutoff = 1 / ratio\n    if even:\n        time = torch.arange(-half_size, half_size) + 0.5\n    else:\n        time = torch.arange(kernel_size) - half_size\n    if cutoff == 0:\n        filter_ = torch.zeros_like(time)\n    else:\n        filter_ = 2 * cutoff * window * sinc(2 * cutoff * time)\n        # Normalize filter to have sum = 1, otherwise we will have a small leakage\n        # of the constant component in the input signal.\n        filter_ /= filter_.sum()\n        filter = filter_.view(1, 1, kernel_size)\n\n    return filter\n\n\nclass LowPassFilter1d(nn.Module):\n    def __init__(\n        self,\n        cutoff=0.5,\n        half_width=0.6,\n        stride: int = 1,\n        padding: bool = True,\n        padding_mode: str = \"replicate\",\n        kernel_size: int = 12,\n    ):\n        # kernel_size should be even number for stylegan3 setup,\n        # in this implementation, odd number is also possible.\n        super().__init__()\n        if cutoff < -0.0:\n            raise ValueError(\"Minimum cutoff must be larger than zero.\")\n        if cutoff > 0.5:\n            raise ValueError(\"A cutoff above 0.5 does not make sense.\")\n        self.kernel_size = kernel_size\n        self.even = kernel_size % 2 == 0\n        self.pad_left = kernel_size // 2 - int(self.even)\n        self.pad_right = kernel_size // 2\n        self.stride = stride\n        self.padding = padding\n        self.padding_mode = padding_mode\n        filter = kaiser_sinc_filter1d(cutoff, half_width, kernel_size)\n        self.register_buffer(\"filter\", filter)\n\n    # input [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        if self.padding:\n            x = F.pad(x, (self.pad_left, self.pad_right), mode=self.padding_mode)\n        out = F.conv1d(x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C)\n\n        return out\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/resample.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nimport torch.nn as nn\nfrom torch.nn import functional as F\nfrom .filter import LowPassFilter1d\nfrom .filter import kaiser_sinc_filter1d\n\n\nclass UpSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.stride = ratio\n        self.pad = self.kernel_size // ratio - 1\n        self.pad_left = self.pad * self.stride + (self.kernel_size - self.stride) // 2\n        self.pad_right = (\n            self.pad * self.stride + (self.kernel_size - self.stride + 1) // 2\n        )\n        filter = kaiser_sinc_filter1d(\n            cutoff=0.5 / ratio, half_width=0.6 / ratio, kernel_size=self.kernel_size\n        )\n        self.register_buffer(\"filter\", filter)\n\n    # x: [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        x = F.pad(x, (self.pad, self.pad), mode=\"replicate\")\n        x = self.ratio * F.conv_transpose1d(\n            x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C\n        )\n        x = x[..., self.pad_left : -self.pad_right]\n\n        return x\n\n\nclass DownSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.lowpass = LowPassFilter1d(\n            cutoff=0.5 / ratio,\n            half_width=0.6 / ratio,\n            stride=ratio,\n            kernel_size=self.kernel_size,\n        )\n\n    def forward(self, x):\n        xx = self.lowpass(x)\n\n        return xx\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/facodec_dataset.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport random\n\nimport numpy as np\n\nimport torchaudio\nimport librosa\nfrom torch.nn import functional as F\n\nfrom torch.nn.utils.rnn import pad_sequence\nfrom utils.data_utils import *\nfrom models.codec.codec_dataset import CodecDataset\n\n\nclass FAcodecDataset(torch.utils.data.Dataset):\n    def __init__(self, cfg, dataset, is_valid=False):\n        \"\"\"\n        Args:\n            cfg: config\n            dataset: dataset name\n            is_valid: whether to use train or valid dataset\n        \"\"\"\n        self.data_root_dir = cfg.dataset\n        self.data_list = []\n        # walk through the dataset directory recursively, save all files ends with .wav/.mp3/.opus/.flac/.m4a\n        for root, _, files in os.walk(self.data_root_dir):\n            for file in files:\n                if file.endswith((\".wav\", \".mp3\", \".opus\", \".flac\", \".m4a\")):\n                    self.data_list.append(os.path.join(root, file))\n        self.sr = cfg.preprocess_params.sr\n        self.duration_range = cfg.preprocess_params.duration_range\n        self.to_mel = torchaudio.transforms.MelSpectrogram(\n            n_mels=cfg.preprocess_params.spect_params.n_mels,\n            n_fft=cfg.preprocess_params.spect_params.n_fft,\n            win_length=cfg.preprocess_params.spect_params.win_length,\n            hop_length=cfg.preprocess_params.spect_params.hop_length,\n        )\n        self.mean, self.std = -4, 4\n\n    def preprocess(self, wave):\n        wave_tensor = (\n            torch.from_numpy(wave).float() if isinstance(wave, np.ndarray) else wave\n        )\n        mel_tensor = self.to_mel(wave_tensor)\n        mel_tensor = (torch.log(1e-5 + mel_tensor.unsqueeze(0)) - self.mean) / self.std\n        return mel_tensor\n\n    def __len__(self):\n        # return len(self.data_list)\n        return len(self.data_list)  # return a fixed number for testing\n\n    def __getitem__(self, index):\n        wave, _ = librosa.load(self.data_list[index], sr=self.sr)\n        wave = np.random.randn(self.sr * random.randint(*self.duration_range))\n        wave = wave / np.max(np.abs(wave))\n        mel = self.preprocess(wave).squeeze(0)\n        wave = torch.from_numpy(wave).float()\n        return wave, mel\n\n\nclass FAcodecCollator(object):\n    \"\"\"Zero-pads model inputs and targets based on number of frames per step\"\"\"\n\n    def __init__(self, cfg):\n        self.cfg = cfg\n\n    def __call__(self, batch):\n        # batch[0] = wave, mel, text, f0, speakerid\n        batch_size = len(batch)\n\n        # sort by mel length\n        lengths = [b[1].shape[1] for b in batch]\n        batch_indexes = np.argsort(lengths)[::-1]\n        batch = [batch[bid] for bid in batch_indexes]\n\n        nmels = batch[0][1].size(0)\n        max_mel_length = max([b[1].shape[1] for b in batch])\n        max_wave_length = max([b[0].size(0) for b in batch])\n\n        mels = torch.zeros((batch_size, nmels, max_mel_length)).float() - 10\n        waves = torch.zeros((batch_size, max_wave_length)).float()\n\n        mel_lengths = torch.zeros(batch_size).long()\n        wave_lengths = torch.zeros(batch_size).long()\n\n        for bid, (wave, mel) in enumerate(batch):\n            mel_size = mel.size(1)\n            mels[bid, :, :mel_size] = mel\n            waves[bid, : wave.size(0)] = wave\n            mel_lengths[bid] = mel_size\n            wave_lengths[bid] = wave.size(0)\n\n        return waves, mels, wave_lengths, mel_lengths\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/facodec_inference.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport shutil\nimport warnings\nimport argparse\nimport torch\nimport os\nimport yaml\n\nwarnings.simplefilter(\"ignore\")\n\nfrom .modules.commons import *\nimport time\n\nimport torchaudio\nimport librosa\nfrom collections import OrderedDict\n\n\nclass FAcodecInference(object):\n    def __init__(self, args=None, cfg=None):\n        self.args = args\n        self.cfg = cfg\n        self.device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n        self.model = self._build_model()\n        self._load_checkpoint()\n\n    def _build_model(self):\n        model = build_model(self.cfg.model_params)\n        _ = [model[key].to(self.device) for key in model]\n        return model\n\n    def _load_checkpoint(self):\n        sd = torch.load(self.args.checkpoint_path, map_location=\"cpu\")\n        sd = sd[\"net\"] if \"net\" in sd else sd\n        new_params = dict()\n        for key, state_dict in sd.items():\n            new_state_dict = OrderedDict()\n            for k, v in state_dict.items():\n                if k.startswith(\"module.\"):\n                    k = k[7:]\n                new_state_dict[k] = v\n            new_params[key] = new_state_dict\n        for key in new_params:\n            if key in self.model:\n                self.model[key].load_state_dict(new_params[key])\n        _ = [self.model[key].eval() for key in self.model]\n\n    @torch.no_grad()\n    def inference(self, source, output_dir):\n        source_audio = librosa.load(source, sr=self.cfg.preprocess_params.sr)[0]\n        source_audio = torch.tensor(source_audio).unsqueeze(0).float().to(self.device)\n\n        z = self.model.encoder(source_audio[None, ...].to(self.device).float())\n        (\n            z,\n            quantized,\n            commitment_loss,\n            codebook_loss,\n            timbre,\n            codes,\n        ) = self.model.quantizer(\n            z,\n            source_audio[None, ...].to(self.device).float(),\n            n_c=self.cfg.model_params.n_c_codebooks,\n            return_codes=True,\n        )\n\n        full_pred_wave = self.model.decoder(z)\n\n        os.makedirs(output_dir, exist_ok=True)\n        source_name = source.split(\"/\")[-1].split(\".\")[0]\n        torchaudio.save(\n            f\"{output_dir}/reconstructed_{source_name}.wav\",\n            full_pred_wave[0].cpu(),\n            self.cfg.preprocess_params.sr,\n        )\n\n        print(\n            \"Reconstructed audio saved as: \",\n            f\"{output_dir}/reconstructed_{source_name}.wav\",\n        )\n\n        return quantized, codes\n\n    @torch.no_grad()\n    def voice_conversion(self, source, reference, output_dir):\n        source_audio = librosa.load(source, sr=self.cfg.preprocess_params.sr)[0]\n        source_audio = torch.tensor(source_audio).unsqueeze(0).float().to(self.device)\n\n        reference_audio = librosa.load(reference, sr=self.cfg.preprocess_params.sr)[0]\n        reference_audio = (\n            torch.tensor(reference_audio).unsqueeze(0).float().to(self.device)\n        )\n\n        z = self.model.encoder(source_audio[None, ...].to(self.device).float())\n        z, quantized, commitment_loss, codebook_loss, timbre = self.model.quantizer(\n            z,\n            source_audio[None, ...].to(self.device).float(),\n            n_c=self.cfg.model_params.n_c_codebooks,\n        )\n\n        z_ref = self.model.encoder(reference_audio[None, ...].to(self.device).float())\n        (\n            z_ref,\n            quantized_ref,\n            commitment_loss_ref,\n            codebook_loss_ref,\n            timbre_ref,\n        ) = self.model.quantizer(\n            z_ref,\n            reference_audio[None, ...].to(self.device).float(),\n            n_c=self.cfg.model_params.n_c_codebooks,\n        )\n\n        z_conv = self.model.quantizer.voice_conversion(\n            quantized[0] + quantized[1],\n            reference_audio[None, ...].to(self.device).float(),\n        )\n        full_pred_wave = self.model.decoder(z_conv)\n\n        os.makedirs(output_dir, exist_ok=True)\n        source_name = source.split(\"/\")[-1].split(\".\")[0]\n        reference_name = reference.split(\"/\")[-1].split(\".\")[0]\n        torchaudio.save(\n            f\"{output_dir}/converted_{source_name}_to_{reference_name}.wav\",\n            full_pred_wave[0].cpu(),\n            self.cfg.preprocess_params.sr,\n        )\n\n        print(\n            \"Voice conversion results saved as: \",\n            f\"{output_dir}/converted_{source_name}_to_{reference_name}.wav\",\n        )\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/facodec_trainer.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport os\nimport time\nimport random\nfrom pathlib import Path\nimport re\nimport glob\n\nimport accelerate\nimport json\nimport numpy as np\nimport torch\nfrom accelerate.utils import ProjectConfiguration\nfrom torch.utils.data import DataLoader\nfrom tqdm import tqdm\n\nimport torch\nimport torch.nn.functional as F\nimport torchaudio\n\nfrom accelerate.logging import get_logger\n\nfrom models.codec.facodec.facodec_dataset import FAcodecDataset, FAcodecCollator\nfrom models.codec.codec_sampler import build_samplers\nfrom models.codec.codec_trainer import CodecTrainer\n\nfrom modules.dac.nn.loss import (\n    MultiScaleSTFTLoss,\n    MelSpectrogramLoss,\n    GANLoss,\n    L1Loss,\n    FocalLoss,\n)\nfrom audiotools import AudioSignal\n\nfrom transformers import Wav2Vec2Processor, Wav2Vec2ForCTC\n\ntry:\n    import nemo.collections.asr as nemo_asr\nexcept ImportError:\n    print(\n        \"Unable to import nemo_asr, titanet outputs will be set to random values, you may only run debugging mode. DO NOT USE THIS FOR TRAINING\"\n    )\n    nemo_asr = None\n\nfrom models.codec.facodec.modules.commons import (\n    build_model,\n    load_checkpoint,\n    load_F0_models,\n    log_norm,\n)\nfrom models.codec.facodec.optimizer import build_optimizer\n\n\nclass FAcodecTrainer(CodecTrainer):\n    def __init__(self, args, cfg):\n        super().__init__()\n\n        self.args = args\n        self.cfg = cfg\n\n        cfg.exp_name = args.exp_name\n\n        # Init accelerator\n        self._init_accelerator()\n        self.accelerator.wait_for_everyone()\n\n        # Init logger\n        with self.accelerator.main_process_first():\n            self.logger = get_logger(args.exp_name, log_level=args.log_level)\n\n        self.logger.info(\"=\" * 56)\n        self.logger.info(\"||\\t\\t\" + \"New training process started.\" + \"\\t\\t||\")\n        self.logger.info(\"=\" * 56)\n        self.logger.info(\"\\n\")\n        self.logger.debug(f\"Using {args.log_level.upper()} logging level.\")\n        self.logger.info(f\"Experiment name: {args.exp_name}\")\n        self.logger.info(f\"Experiment directory: {self.exp_dir}\")\n        self.checkpoint_dir = os.path.join(self.exp_dir, \"checkpoint\")\n        if self.accelerator.is_main_process:\n            os.makedirs(self.checkpoint_dir, exist_ok=True)\n        self.logger.debug(f\"Checkpoint directory: {self.checkpoint_dir}\")\n\n        # Init training status\n        self.batch_count: int = 0\n        self.step: int = 0\n        self.epoch: int = 0\n\n        self.max_epoch = (\n            self.cfg.train.max_epoch if self.cfg.train.max_epoch > 0 else float(\"inf\")\n        )\n        self.logger.info(\n            \"Max epoch: {}\".format(\n                self.max_epoch if self.max_epoch < float(\"inf\") else \"Unlimited\"\n            )\n        )\n\n        # Check potential erorrs\n        if self.accelerator.is_main_process:\n            self._check_basic_configs()\n            self.save_checkpoint_stride = self.cfg.train.save_checkpoint_stride\n            self.checkpoints_path = [\n                [] for _ in range(len(self.save_checkpoint_stride))\n            ]\n            self.run_eval = self.cfg.train.run_eval\n\n        # Set random seed\n        with self.accelerator.main_process_first():\n            start = time.monotonic_ns()\n            self._set_random_seed(self.cfg.train.random_seed)\n            end = time.monotonic_ns()\n            self.logger.debug(\n                f\"Setting random seed done in {(end - start) / 1e6:.2f}ms\"\n            )\n            self.logger.debug(f\"Random seed: {self.cfg.train.random_seed}\")\n\n        # Build dataloader\n        with self.accelerator.main_process_first():\n            self.logger.info(\"Building dataset...\")\n            start = time.monotonic_ns()\n            self.train_dataloader, self.valid_dataloader = self._build_dataloader()\n            end = time.monotonic_ns()\n            self.logger.info(f\"Building dataset done in {(end - start) / 1e6:.2f}ms\")\n\n        # Build model\n        with self.accelerator.main_process_first():\n            self.logger.info(\"Building model...\")\n            start = time.monotonic_ns()\n            self.model = self._build_model()\n            end = time.monotonic_ns()\n            for _, model in self.model.items():\n                self.logger.debug(model)\n            self.logger.info(f\"Building model done in {(end - start) / 1e6:.2f}ms\")\n            self.logger.info(f\"Model parameters: {self._count_parameters()/1e6:.2f}M\")\n\n        # Build optimizers and schedulers\n        with self.accelerator.main_process_first():\n            self.logger.info(\"Building optimizer and scheduler...\")\n            start = time.monotonic_ns()\n            self.optimizer = self._build_optimizer()\n            end = time.monotonic_ns()\n            self.logger.info(\n                f\"Building optimizer and scheduler done in {(end - start) / 1e6:.2f}ms\"\n            )\n\n        # Build helper models\n        with self.accelerator.main_process_first():\n            self.logger.info(\"Building helper models...\")\n            start = time.monotonic_ns()\n            self._built_helper_model()\n            end = time.monotonic_ns()\n            self.logger.info(\n                f\"Building helper models done in {(end - start) / 1e6:.2f}ms\"\n            )\n\n        # Accelerator preparing\n        self.logger.info(\"Initializing accelerate...\")\n        start = time.monotonic_ns()\n        for k in self.model:\n            self.model[k] = self.accelerator.prepare(self.model[k])\n        for k, v in self.optimizer.optimizers.items():\n            self.optimizer.optimizers[k] = self.accelerator.prepare(\n                self.optimizer.optimizers[k]\n            )\n            self.optimizer.schedulers[k] = self.accelerator.prepare(\n                self.optimizer.schedulers[k]\n            )\n        end = time.monotonic_ns()\n        self.logger.info(f\"Initializing accelerate done in {(end - start) / 1e6:.2f}ms\")\n\n        # Build criterions\n        with self.accelerator.main_process_first():\n            self.logger.info(\"Building criterion...\")\n            start = time.monotonic_ns()\n            self.criterions = self._build_criterion()\n            end = time.monotonic_ns()\n            self.logger.info(f\"Building criterion done in {(end - start) / 1e6:.2f}ms\")\n\n        # Resume checkpoints\n        with self.accelerator.main_process_first():\n            self.checkpoint_dir = os.path.join(self.exp_dir, \"checkpoint\")\n            if args.resume_type:\n                self.logger.info(\"Resuming from checkpoint...\")\n                start = time.monotonic_ns()\n                ckpt_path = Path(args.checkpoint)\n                if self._is_valid_pattern(ckpt_path.parts[-1]):\n                    ckpt_path = self._load_model(args.checkpoint, args.resume_type)\n                else:\n                    ckpt_path = self._load_model(\n                        args.checkpoint, resume_type=args.resume_type\n                    )\n                end = time.monotonic_ns()\n                self.logger.info(\n                    f\"Resuming from checkpoint done in {(end - start) / 1e6:.2f}ms\"\n                )\n                self.checkpoints_path = json.load(\n                    open(os.path.join(ckpt_path, \"ckpts.json\"), \"r\")\n                )\n\n            if self.accelerator.is_main_process:\n                os.makedirs(self.checkpoint_dir, exist_ok=True)\n            self.logger.debug(f\"Checkpoint directory: {self.checkpoint_dir}\")\n\n        # Save config\n        self.config_save_path = os.path.join(self.exp_dir, \"args.json\")\n\n    def _build_dataset(self):\n        return FAcodecDataset, FAcodecCollator\n\n    def _build_criterion(self):\n        criterions = dict()\n        stft_criterion = MultiScaleSTFTLoss()\n        mel_criterion = MelSpectrogramLoss(\n            n_mels=[5, 10, 20, 40, 80, 160, 320],\n            window_lengths=[32, 64, 128, 256, 512, 1024, 2048],\n            mel_fmin=[0, 0, 0, 0, 0, 0, 0],\n            mel_fmax=[None, None, None, None, None, None, None],\n            pow=1.0,\n            mag_weight=0.0,\n            clamp_eps=1e-5,\n        )\n        content_criterion = FocalLoss(gamma=2)\n        l1_criterion = L1Loss()\n        criterions[\"stft\"] = stft_criterion\n        criterions[\"mel\"] = mel_criterion\n        criterions[\"l1\"] = l1_criterion\n        criterions[\"content\"] = content_criterion\n\n        return criterions\n\n    def _build_model(self):\n        model = build_model(self.cfg.model_params)\n        _ = [model[key].to(self.accelerator.device) for key in model]\n        return model\n\n    def _built_helper_model(self):\n        device = self.accelerator.device\n        self.pitch_extractor = load_F0_models(self.cfg.F0_path).to(device)\n\n        # load model and processor\n        self.w2v_processor = Wav2Vec2Processor.from_pretrained(\n            \"facebook/wav2vec2-xlsr-53-espeak-cv-ft\"\n        )\n        self.w2v_model = Wav2Vec2ForCTC.from_pretrained(\n            \"facebook/wav2vec2-xlsr-53-espeak-cv-ft\"\n        ).to(device)\n        self.w2v_model.eval()\n\n        if nemo_asr is None:\n            self.speaker_model = None\n        else:\n            self.speaker_model = (\n                nemo_asr.models.EncDecSpeakerLabelModel.from_pretrained(\n                    \"nvidia/speakerverification_en_titanet_large\"\n                )\n            )\n            self.speaker_model = self.speaker_model.to(device)\n            self.speaker_model.eval()\n\n    def _build_optimizer(self):\n        scheduler_params = {\n            \"warmup_steps\": self.cfg.loss_params.warmup_steps,\n            \"base_lr\": self.cfg.loss_params.base_lr,\n        }\n        optimizer = build_optimizer(\n            {key: self.model[key] for key in self.model},\n            scheduler_params_dict={key: scheduler_params.copy() for key in self.model},\n            lr=float(scheduler_params[\"base_lr\"]),\n        )\n\n        return optimizer\n\n    def train_loop(self):\n        \"\"\"Training process\"\"\"\n        self.accelerator.wait_for_everyone()\n\n        # Dump config\n        if self.accelerator.is_main_process:\n            self._dump_cfg(self.config_save_path)\n        _ = [self.model[key].train() for key in self.model]\n        self.optimizer.zero_grad()\n\n        # Sync and start training\n        self.accelerator.wait_for_everyone()\n        while self.epoch < self.max_epoch:\n            self.logger.info(\"\\n\")\n            self.logger.info(\"-\" * 32)\n            self.logger.info(\"Epoch {}: \".format(self.epoch))\n\n            # Train and Validate\n            train_total_loss, train_losses = self._train_epoch()\n            for key, loss in train_losses.items():\n                self.logger.info(\"  |- Train/{} Loss: {:.6f}\".format(key, loss))\n                self.accelerator.log(\n                    {\"Epoch/Train {} Loss\".format(key): loss},\n                    step=self.epoch,\n                )\n            self.accelerator.log(\n                {\n                    \"Epoch/Train Total Loss\": train_total_loss,\n                },\n                step=self.epoch,\n            )\n\n            # Update scheduler\n            self.accelerator.wait_for_everyone()\n\n            # Check save checkpoint interval\n            run_eval = False\n            if self.accelerator.is_main_process:\n                save_checkpoint = False\n                for i, num in enumerate(self.save_checkpoint_stride):\n                    if self.epoch % num == 0:\n                        save_checkpoint = True\n                        run_eval |= self.run_eval[i]\n\n            # Save checkpoints\n            self.accelerator.wait_for_everyone()\n            if self.accelerator.is_main_process and save_checkpoint:\n                print(\"Saving..\")\n                state = {\n                    \"net\": {key: self.model[key].state_dict() for key in self.model},\n                    \"optimizer\": self.optimizer.state_dict(),\n                    \"scheduler\": self.optimizer.scheduler_state_dict(),\n                    \"iters\": self.step,\n                    \"epoch\": self.epoch,\n                }\n                save_path = os.path.join(\n                    self.checkpoint_dir,\n                    \"FAcodec_epoch_%05d_step_%05d.pth\" % (self.epoch, self.iters),\n                )\n                torch.save(state, save_path)\n                json.dump(\n                    self.checkpoints_path,\n                    open(os.path.join(self.checkpoint_dir, \"ckpts.json\"), \"w\"),\n                    ensure_ascii=False,\n                    indent=4,\n                )\n\n            self.accelerator.wait_for_everyone()\n\n            self.epoch += 1\n\n        # Finish training\n        self.accelerator.wait_for_everyone()\n        if self.accelerator.is_main_process:\n            path = os.path.join(\n                self.checkpoint_dir,\n                \"epoch-{:04d}_step-{:07d}\".format(\n                    self.epoch,\n                    self.step,\n                ),\n            )\n            print(\"Saving..\")\n            state = {\n                \"net\": {key: self.model[key].state_dict() for key in self.model},\n                \"optimizer\": self.optimizer.state_dict(),\n                \"scheduler\": self.optimizer.scheduler_state_dict(),\n                \"iters\": self.step,\n                \"epoch\": self.epoch,\n            }\n            save_path = os.path.join(\n                self.checkpoint_dir,\n                \"FAcodec_epoch_%05d_step_%05d.pth\" % (self.epoch, self.iters),\n            )\n            torch.save(state, save_path)\n\n    def _train_epoch(self):\n        \"\"\"Training epoch. Should return average loss of a batch (sample) over\n        one epoch. See ``train_loop`` for usage.\n        \"\"\"\n        _ = [self.model[key].train() for key in self.model]\n\n        epoch_losses: dict = {}\n        epoch_total_loss: int = 0\n\n        for batch in tqdm(\n            self.train_dataloader,\n            desc=f\"Training Epoch {self.epoch}\",\n            unit=\"batch\",\n            colour=\"GREEN\",\n            leave=False,\n            dynamic_ncols=True,\n            smoothing=0.04,\n            disable=not self.accelerator.is_main_process,\n        ):\n            # Get losses\n            total_loss, losses = self._train_step(batch)\n            self.batch_count += 1\n\n            # Log info\n            if self.batch_count % self.cfg.train.gradient_accumulation_step == 0:\n                self.accelerator.log(\n                    {\n                        \"Step/Learning Rate\": (\n                            self.optimizer.schedulers[\"encoder\"].get_last_lr()[0]\n                            if self.step != 0\n                            else 0\n                        )\n                    },\n                    step=self.step,\n                )\n                for key, _ in losses.items():\n                    self.accelerator.log(\n                        {\n                            \"Step/Train {} Loss\".format(key): losses[key],\n                        },\n                        step=self.step,\n                    )\n\n                if not epoch_losses:\n                    epoch_losses = losses\n                else:\n                    for key, value in losses.items():\n                        epoch_losses[key] += value\n                epoch_total_loss += total_loss\n                self.step += 1\n\n        # Get and log total losses\n        self.accelerator.wait_for_everyone()\n        epoch_total_loss = (\n            epoch_total_loss\n            / len(self.train_dataloader)\n            * self.cfg.train.gradient_accumulation_step\n        )\n        for key in epoch_losses.keys():\n            epoch_losses[key] = (\n                epoch_losses[key]\n                / len(self.train_dataloader)\n                * self.cfg.train.gradient_accumulation_step\n            )\n        return epoch_total_loss, epoch_losses\n\n    def _train_step(self, data):\n        \"\"\"Training forward step. Should return average loss of a sample over\n        one batch. Provoke ``_forward_step`` is recommended except for special case.\n        See ``_train_epoch`` for usage.\n        \"\"\"\n        # Init losses\n        train_losses = {}\n        total_loss = 0\n\n        # Use input feature to get predictions\n        data = [b.to(self.accelerator.device, non_blocking=True) for b in data]\n        waves, mels, wave_lengths, mel_input_length = data\n\n        # extract semantic latent with w2v model\n        waves_16k = torchaudio.functional.resample(waves, 24000, 16000)\n        w2v_input = self.w2v_processor(\n            waves_16k, sampling_rate=16000, return_tensors=\"pt\"\n        ).input_values.to(self.accelerator.device)\n        with torch.no_grad():\n            w2v_outputs = self.w2v_model(w2v_input.squeeze(0)).logits\n            predicted_ids = torch.argmax(w2v_outputs, dim=-1)\n            phone_ids = (\n                F.interpolate(\n                    predicted_ids.unsqueeze(0).float(), mels.size(-1), mode=\"nearest\"\n                )\n                .long()\n                .squeeze(0)\n            )\n\n        # get clips\n        mel_seg_len = min(\n            [int(mel_input_length.min().item()), self.cfg.train.max_frame_len]\n        )\n\n        gt_mel_seg = []\n        wav_seg = []\n        w2v_seg = []\n\n        for bib in range(len(mel_input_length)):\n            mel_length = int(mel_input_length[bib].item())\n\n            random_start = (\n                np.random.randint(0, mel_length - mel_seg_len)\n                if mel_length != mel_seg_len\n                else 0\n            )\n            gt_mel_seg.append(mels[bib, :, random_start : random_start + mel_seg_len])\n\n            # w2v_seg.append(w2v_latent[bib, :, random_start:random_start + mel_seg_len])\n            w2v_seg.append(phone_ids[bib, random_start : random_start + mel_seg_len])\n\n            y = waves[bib][random_start * 300 : (random_start + mel_seg_len) * 300]\n\n            wav_seg.append(y.to(self.accelerator.device))\n\n        gt_mel_seg = torch.stack(gt_mel_seg).detach()\n\n        wav_seg = torch.stack(wav_seg).float().detach().unsqueeze(1)\n        w2v_seg = torch.stack(w2v_seg).float().detach()\n\n        with torch.no_grad():\n            real_norm = log_norm(gt_mel_seg.unsqueeze(1)).squeeze(1).detach()\n            F0_real, _, _ = self.pitch_extractor(gt_mel_seg.unsqueeze(1))\n\n        # normalize f0\n        # Remove unvoiced frames (replace with -1)\n        gt_glob_f0s = []\n        f0_targets = []\n        for bib in range(len(F0_real)):\n            voiced_indices = F0_real[bib] > 5.0\n            f0_voiced = F0_real[bib][voiced_indices]\n\n            if len(f0_voiced) != 0:\n                # Convert to log scale\n                log_f0 = f0_voiced.log2()\n\n                # Calculate mean and standard deviation\n                mean_f0 = log_f0.mean()\n                std_f0 = log_f0.std()\n\n                # Normalize the F0 sequence\n                normalized_f0 = (log_f0 - mean_f0) / std_f0\n\n                # Create the normalized F0 sequence with unvoiced frames\n                normalized_sequence = torch.zeros_like(F0_real[bib])\n                normalized_sequence[voiced_indices] = normalized_f0\n                normalized_sequence[~voiced_indices] = (\n                    -10\n                )  # Assign -10 to unvoiced frames\n\n                gt_glob_f0s.append(mean_f0)\n            else:\n                normalized_sequence = torch.zeros_like(F0_real[bib]) - 10.0\n                gt_glob_f0s.append(torch.tensor(0.0).to(self.accelerator.device))\n\n            # f0_targets.append(normalized_sequence[single_side_context // 200:-single_side_context // 200])\n            f0_targets.append(normalized_sequence)\n        f0_targets = torch.stack(f0_targets).to(self.accelerator.device)\n        # fill nan with -10\n        f0_targets[torch.isnan(f0_targets)] = -10.0\n        # fill inf with -10\n        f0_targets[torch.isinf(f0_targets)] = -10.0\n        # if frame_rate not equal to 80, interpolate f0 from frame rate of 80 to target frame rate\n        if self.cfg.preprocess_params.frame_rate != 80:\n            f0_targets = F.interpolate(\n                f0_targets.unsqueeze(1),\n                mel_seg_len // 80 * self.cfg.preprocess_params.frame_rate,\n                mode=\"nearest\",\n            ).squeeze(1)\n            w2v_seg = F.interpolate(\n                w2v_seg,\n                mel_seg_len // 80 * self.cfg.preprocess_params.frame_rate,\n                mode=\"nearest\",\n            )\n\n        wav_seg_input = wav_seg\n        wav_seg_target = wav_seg\n\n        z = self.model.encoder(wav_seg_input)\n        z, quantized, commitment_loss, codebook_loss, timbre = self.model.quantizer(\n            z, wav_seg_input, n_c=2, full_waves=waves, wave_lens=wave_lengths\n        )\n        preds, rev_preds = self.model.fa_predictors(quantized, timbre)\n\n        pred_wave = self.model.decoder(z)\n\n        len_diff = wav_seg_target.size(-1) - pred_wave.size(-1)\n        if len_diff > 0:\n            wav_seg_target = wav_seg_target[..., len_diff // 2 : -len_diff // 2]\n\n        # discriminator loss\n        d_fake = self.model.discriminator(pred_wave.detach())\n        d_real = self.model.discriminator(wav_seg_target)\n        loss_d = 0\n        for x_fake, x_real in zip(d_fake, d_real):\n            loss_d += torch.mean(x_fake[-1] ** 2)\n            loss_d += torch.mean((1 - x_real[-1]) ** 2)\n\n        self.optimizer.zero_grad()\n        self.accelerator.backward(loss_d)\n        grad_norm_d = torch.nn.utils.clip_grad_norm_(\n            self.model.discriminator.parameters(), 10.0\n        )\n        self.optimizer.step(\"discriminator\")\n        self.optimizer.scheduler(key=\"discriminator\")\n\n        # generator loss\n        signal = AudioSignal(wav_seg_target, sample_rate=24000)\n        recons = AudioSignal(pred_wave, sample_rate=24000)\n        stft_loss = self.criterions[\"stft\"](recons, signal)\n        mel_loss = self.criterions[\"mel\"](recons, signal)\n        waveform_loss = self.criterions[\"l1\"](recons, signal)\n\n        d_fake = self.model.discriminator(pred_wave)\n        d_real = self.model.discriminator(wav_seg_target)\n\n        loss_g = 0\n        for x_fake in d_fake:\n            loss_g += torch.mean((1 - x_fake[-1]) ** 2)\n\n        loss_feature = 0\n\n        for i in range(len(d_fake)):\n            for j in range(len(d_fake[i]) - 1):\n                loss_feature += F.l1_loss(d_fake[i][j], d_real[i][j].detach())\n\n        pred_f0, pred_uv = preds[\"f0\"], preds[\"uv\"]\n        rev_pred_f0, rev_pred_uv = rev_preds[\"rev_f0\"], rev_preds[\"rev_uv\"]\n\n        common_min_size = min(pred_f0.size(-2), f0_targets.size(-1))\n        f0_targets = f0_targets[..., :common_min_size]\n        real_norm = real_norm[..., :common_min_size]\n\n        f0_loss = F.smooth_l1_loss(\n            f0_targets, pred_f0.squeeze(-1)[..., :common_min_size]\n        )\n        uv_loss = F.smooth_l1_loss(\n            real_norm, pred_uv.squeeze(-1)[..., :common_min_size]\n        )\n        rev_f0_loss = (\n            F.smooth_l1_loss(f0_targets, rev_pred_f0.squeeze(-1)[..., :common_min_size])\n            if rev_pred_f0 is not None\n            else torch.FloatTensor([0]).to(self.accelerator.device)\n        )\n        rev_uv_loss = (\n            F.smooth_l1_loss(real_norm, rev_pred_uv.squeeze(-1)[..., :common_min_size])\n            if rev_pred_uv is not None\n            else torch.FloatTensor([0]).to(self.accelerator.device)\n        )\n\n        tot_f0_loss = f0_loss + rev_f0_loss\n        tot_uv_loss = uv_loss + rev_uv_loss\n\n        pred_content = preds[\"content\"]\n        rev_pred_content = rev_preds[\"rev_content\"]\n\n        target_content_latents = w2v_seg[..., :common_min_size]\n\n        content_loss = self.criterions[\"content\"](\n            pred_content.transpose(1, 2)[..., :common_min_size],\n            target_content_latents.long(),\n        )\n        rev_content_loss = (\n            self.criterions[\"content\"](\n                rev_pred_content.transpose(1, 2)[..., :common_min_size],\n                target_content_latents.long(),\n            )\n            if rev_pred_content is not None\n            else torch.FloatTensor([0]).to(self.accelerator.device)\n        )\n\n        tot_content_loss = content_loss + rev_content_loss\n\n        if self.speaker_model is not None:\n            spk_logits = torch.cat(\n                [\n                    self.speaker_model.infer_segment(w16.cpu()[..., :wl])[1]\n                    for w16, wl in zip(waves_16k, wave_lengths)\n                ],\n                dim=0,\n            )\n            spk_labels = spk_logits.argmax(dim=-1)\n        else:\n            spk_labels = torch.zeros([len(waves_16k)], dtype=torch.long).to(\n                self.accelerator.device\n            )\n\n        spk_pred_logits = preds[\"timbre\"]\n        spk_loss = F.cross_entropy(spk_pred_logits, spk_labels)\n        x_spk_pred_logits = rev_preds[\"x_timbre\"]\n\n        x_spk_loss = (\n            F.cross_entropy(x_spk_pred_logits, spk_labels)\n            if x_spk_pred_logits is not None\n            else torch.FloatTensor([0]).to(self.accelerator.device)\n        )\n\n        tot_spk_loss = spk_loss + x_spk_loss\n\n        loss_gen_all = (\n            mel_loss * 15.0\n            + loss_feature * 1.0\n            + loss_g * 1.0\n            + commitment_loss * 0.25\n            + codebook_loss * 1.0\n            + tot_f0_loss * 1.0\n            + tot_uv_loss * 1.0\n            + tot_content_loss * 5.0\n            + tot_spk_loss * 5.0\n        )\n\n        self.optimizer.zero_grad()\n        self.accelerator.backward(loss_gen_all)\n\n        with torch.no_grad():\n            total_loss = loss_gen_all.item()\n            train_losses[\"stft\"] = stft_loss.item()\n            train_losses[\"mel\"] = mel_loss.item()\n            train_losses[\"l1\"] = waveform_loss.item()\n            train_losses[\"f0\"] = f0_loss.item()\n            train_losses[\"uv\"] = uv_loss.item()\n            train_losses[\"content\"] = content_loss.item()\n            train_losses[\"speaker\"] = spk_loss.item()\n            train_losses[\"rev_f0\"] = rev_f0_loss.item()\n            train_losses[\"rev_uv\"] = rev_uv_loss.item()\n            train_losses[\"rev_content\"] = rev_content_loss.item()\n            train_losses[\"rev_speaker\"] = x_spk_loss.item()\n\n            train_losses[\"feature\"] = loss_feature.item()\n            train_losses[\"generator\"] = loss_g.item()\n            train_losses[\"commitment\"] = commitment_loss.item()\n            train_losses[\"codebook\"] = codebook_loss.item()\n\n            # discriminators\n            train_losses[\"discriminator\"] = loss_d.item()\n\n        return total_loss, train_losses\n\n    def _inference(self, eval_wave):\n        \"\"\"Inference during training for test audios.\"\"\"\n        z = self.model.encoder(\n            eval_wave[None, None, ...].to(self.accelerator.device).float()\n        )\n        z, quantized, commitment_loss, codebook_loss, timbre = self.model.quantizer(\n            z, eval_wave[None, None, ...], n_c=self.cfg.model_params.n_c_codebooks\n        )\n        full_pred_wave = self.model.decoder(z)\n        return full_pred_wave[0]\n\n    def _load_model(self, checkpoint_path=None, resume_type=\"resume\"):\n        \"\"\"Load model from checkpoint. If checkpoint_path is None, it will\n        load the latest checkpoint in checkpoint_dir. If checkpoint_path is not\n        None, it will load the checkpoint specified by checkpoint_path. **Only use this\n        method after** ``accelerator.prepare()``.\n        \"\"\"\n        if resume_type == \"resume\":\n            if checkpoint_path is None:\n                available_checkpoints = glob.glob(\n                    os.path.join(self.checkpoint_dir, \"FAcodc_epoch_*_step_*.pth\")\n                )\n                # find the checkpoint that has the highest step number\n                latest_checkpoint = max(\n                    available_checkpoints,\n                    key=lambda x: int(x.split(\"_\")[-1].split(\".\")[0]),\n                )\n                earliest_checkpoint = min(\n                    available_checkpoints,\n                    key=lambda x: int(x.split(\"_\")[-1].split(\".\")[0]),\n                )\n                # delete the earliest checkpoint\n                if (\n                    earliest_checkpoint != latest_checkpoint\n                    and self.accelerator.is_main_process\n                    and len(available_checkpoints) > 4\n                ):\n                    os.remove(earliest_checkpoint)\n                    print(f\"Removed {earliest_checkpoint}\")\n            else:\n                latest_checkpoint = checkpoint_path\n\n            self.model, self.optimizer, self.epoch, self.step = load_checkpoint(\n                self.model,\n                self.optimizer,\n                latest_checkpoint,\n                load_only_params=False,\n                ignore_modules=[],\n                is_distributed=self.accelerator.num_processes > 1,\n            )\n\n        else:\n            raise ValueError(\"Invalid resume type\")\n        return checkpoint_path\n\n    def _count_parameters(self):\n        total_num = sum(\n            sum(p.numel() for p in self.model[key].parameters()) for key in self.model\n        )\n        # trainable_num = sum(p.numel() for p in self.model.parameters() if p.requires_grad)\n        return total_num\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/JDC/__init__.py",
    "content": "\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/JDC/model.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# This code is borrowed from https://github.com/yl4579/PitchExtractor/blob/main/model.py\n\n\"\"\"\nImplementation of model from:\nKum et al. - \"Joint Detection and Classification of Singing Voice Melody Using\nConvolutional Recurrent Neural Networks\" (2019)\nLink: https://www.semanticscholar.org/paper/Joint-Detection-and-Classification-of-Singing-Voice-Kum-Nam/60a2ad4c7db43bace75805054603747fcd062c0d\n\"\"\"\nimport torch\nfrom torch import nn\n\n\nclass JDCNet(nn.Module):\n    \"\"\"\n    Joint Detection and Classification Network model for singing voice melody.\n    \"\"\"\n\n    def __init__(self, num_class=722, seq_len=31, leaky_relu_slope=0.01):\n        super().__init__()\n        self.num_class = num_class\n\n        # input = (b, 1, 31, 513), b = batch size\n        self.conv_block = nn.Sequential(\n            nn.Conv2d(\n                in_channels=1, out_channels=64, kernel_size=3, padding=1, bias=False\n            ),  # out: (b, 64, 31, 513)\n            nn.BatchNorm2d(num_features=64),\n            nn.LeakyReLU(leaky_relu_slope, inplace=True),\n            nn.Conv2d(64, 64, 3, padding=1, bias=False),  # (b, 64, 31, 513)\n        )\n\n        # res blocks\n        self.res_block1 = ResBlock(\n            in_channels=64, out_channels=128\n        )  # (b, 128, 31, 128)\n        self.res_block2 = ResBlock(\n            in_channels=128, out_channels=192\n        )  # (b, 192, 31, 32)\n        self.res_block3 = ResBlock(in_channels=192, out_channels=256)  # (b, 256, 31, 8)\n\n        # pool block\n        self.pool_block = nn.Sequential(\n            nn.BatchNorm2d(num_features=256),\n            nn.LeakyReLU(leaky_relu_slope, inplace=True),\n            nn.MaxPool2d(kernel_size=(1, 4)),  # (b, 256, 31, 2)\n            nn.Dropout(p=0.2),\n        )\n\n        # maxpool layers (for auxiliary network inputs)\n        # in = (b, 128, 31, 513) from conv_block, out = (b, 128, 31, 2)\n        self.maxpool1 = nn.MaxPool2d(kernel_size=(1, 40))\n        # in = (b, 128, 31, 128) from res_block1, out = (b, 128, 31, 2)\n        self.maxpool2 = nn.MaxPool2d(kernel_size=(1, 20))\n        # in = (b, 128, 31, 32) from res_block2, out = (b, 128, 31, 2)\n        self.maxpool3 = nn.MaxPool2d(kernel_size=(1, 10))\n\n        # in = (b, 640, 31, 2), out = (b, 256, 31, 2)\n        self.detector_conv = nn.Sequential(\n            nn.Conv2d(640, 256, 1, bias=False),\n            nn.BatchNorm2d(256),\n            nn.LeakyReLU(leaky_relu_slope, inplace=True),\n            nn.Dropout(p=0.2),\n        )\n\n        # input: (b, 31, 512) - resized from (b, 256, 31, 2)\n        self.bilstm_classifier = nn.LSTM(\n            input_size=512, hidden_size=256, batch_first=True, bidirectional=True\n        )  # (b, 31, 512)\n\n        # input: (b, 31, 512) - resized from (b, 256, 31, 2)\n        self.bilstm_detector = nn.LSTM(\n            input_size=512, hidden_size=256, batch_first=True, bidirectional=True\n        )  # (b, 31, 512)\n\n        # input: (b * 31, 512)\n        self.classifier = nn.Linear(\n            in_features=512, out_features=self.num_class\n        )  # (b * 31, num_class)\n\n        # input: (b * 31, 512)\n        self.detector = nn.Linear(\n            in_features=512, out_features=2\n        )  # (b * 31, 2) - binary classifier\n\n        # initialize weights\n        self.apply(self.init_weights)\n\n    def get_feature_GAN(self, x):\n        seq_len = x.shape[-2]\n        x = x.float().transpose(-1, -2)\n\n        convblock_out = self.conv_block(x)\n\n        resblock1_out = self.res_block1(convblock_out)\n        resblock2_out = self.res_block2(resblock1_out)\n        resblock3_out = self.res_block3(resblock2_out)\n        poolblock_out = self.pool_block[0](resblock3_out)\n        poolblock_out = self.pool_block[1](poolblock_out)\n\n        return poolblock_out.transpose(-1, -2)\n\n    def get_feature(self, x):\n        seq_len = x.shape[-2]\n        x = x.float().transpose(-1, -2)\n\n        convblock_out = self.conv_block(x)\n\n        resblock1_out = self.res_block1(convblock_out)\n        resblock2_out = self.res_block2(resblock1_out)\n        resblock3_out = self.res_block3(resblock2_out)\n        poolblock_out = self.pool_block[0](resblock3_out)\n        poolblock_out = self.pool_block[1](poolblock_out)\n\n        return self.pool_block[2](poolblock_out)\n\n    def forward(self, x):\n        \"\"\"\n        Returns:\n            classification_prediction, detection_prediction\n            sizes: (b, 31, 722), (b, 31, 2)\n        \"\"\"\n        ###############################\n        # forward pass for classifier #\n        ###############################\n        seq_len = x.shape[-1]\n        x = x.float().transpose(-1, -2)\n\n        convblock_out = self.conv_block(x)\n\n        resblock1_out = self.res_block1(convblock_out)\n        resblock2_out = self.res_block2(resblock1_out)\n        resblock3_out = self.res_block3(resblock2_out)\n\n        poolblock_out = self.pool_block[0](resblock3_out)\n        poolblock_out = self.pool_block[1](poolblock_out)\n        GAN_feature = poolblock_out.transpose(-1, -2)\n        poolblock_out = self.pool_block[2](poolblock_out)\n\n        # (b, 256, 31, 2) => (b, 31, 256, 2) => (b, 31, 512)\n        classifier_out = (\n            poolblock_out.permute(0, 2, 1, 3).contiguous().view((-1, seq_len, 512))\n        )\n        classifier_out, _ = self.bilstm_classifier(\n            classifier_out\n        )  # ignore the hidden states\n\n        classifier_out = classifier_out.contiguous().view((-1, 512))  # (b * 31, 512)\n        classifier_out = self.classifier(classifier_out)\n        classifier_out = classifier_out.view(\n            (-1, seq_len, self.num_class)\n        )  # (b, 31, num_class)\n\n        # sizes: (b, 31, 722), (b, 31, 2)\n        # classifier output consists of predicted pitch classes per frame\n        # detector output consists of: (isvoice, notvoice) estimates per frame\n        return torch.abs(classifier_out.squeeze(-1)), GAN_feature, poolblock_out\n\n    @staticmethod\n    def init_weights(m):\n        if isinstance(m, nn.Linear):\n            nn.init.kaiming_uniform_(m.weight)\n            if m.bias is not None:\n                nn.init.constant_(m.bias, 0)\n        elif isinstance(m, nn.Conv2d):\n            nn.init.xavier_normal_(m.weight)\n        elif isinstance(m, nn.LSTM) or isinstance(m, nn.LSTMCell):\n            for p in m.parameters():\n                if p.data is None:\n                    continue\n\n                if len(p.shape) >= 2:\n                    nn.init.orthogonal_(p.data)\n                else:\n                    nn.init.normal_(p.data)\n\n\nclass ResBlock(nn.Module):\n    def __init__(self, in_channels: int, out_channels: int, leaky_relu_slope=0.01):\n        super().__init__()\n        self.downsample = in_channels != out_channels\n\n        # BN / LReLU / MaxPool layer before the conv layer - see Figure 1b in the paper\n        self.pre_conv = nn.Sequential(\n            nn.BatchNorm2d(num_features=in_channels),\n            nn.LeakyReLU(leaky_relu_slope, inplace=True),\n            nn.MaxPool2d(kernel_size=(1, 2)),  # apply downsampling on the y axis only\n        )\n\n        # conv layers\n        self.conv = nn.Sequential(\n            nn.Conv2d(\n                in_channels=in_channels,\n                out_channels=out_channels,\n                kernel_size=3,\n                padding=1,\n                bias=False,\n            ),\n            nn.BatchNorm2d(out_channels),\n            nn.LeakyReLU(leaky_relu_slope, inplace=True),\n            nn.Conv2d(out_channels, out_channels, 3, padding=1, bias=False),\n        )\n\n        # 1 x 1 convolution layer to match the feature dimensions\n        self.conv1by1 = None\n        if self.downsample:\n            self.conv1by1 = nn.Conv2d(in_channels, out_channels, 1, bias=False)\n\n    def forward(self, x):\n        x = self.pre_conv(x)\n        if self.downsample:\n            x = self.conv(x) + self.conv1by1(x)\n        else:\n            x = self.conv(x) + x\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/attentions.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# This code is modified from https://github.com/sh-lee-prml/HierSpeechpp/blob/main/ttv_v1/attentions.py\n\nimport copy\nimport math\nimport numpy as np\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom . import commons\n\n\nclass LayerNorm(nn.Module):\n    def __init__(self, channels, eps=1e-5):\n        super().__init__()\n        self.channels = channels\n        self.eps = eps\n\n        self.gamma = nn.Parameter(torch.ones(channels))\n        self.beta = nn.Parameter(torch.zeros(channels))\n\n    def forward(self, x):\n        x = x.transpose(1, -1)\n        x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps)\n        return x.transpose(1, -1)\n\n\nclass Encoder(nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size=1,\n        p_dropout=0.0,\n        window_size=4,\n        **kwargs\n    ):\n        super().__init__()\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.window_size = window_size\n\n        self.drop = nn.Dropout(p_dropout)\n        self.attn_layers = nn.ModuleList()\n        self.norm_layers_1 = nn.ModuleList()\n        self.ffn_layers = nn.ModuleList()\n        self.norm_layers_2 = nn.ModuleList()\n        for i in range(self.n_layers):\n            self.attn_layers.append(\n                MultiHeadAttention(\n                    hidden_channels,\n                    hidden_channels,\n                    n_heads,\n                    p_dropout=p_dropout,\n                    window_size=window_size,\n                )\n            )\n            self.norm_layers_1.append(LayerNorm(hidden_channels))\n            self.ffn_layers.append(\n                FFN(\n                    hidden_channels,\n                    hidden_channels,\n                    filter_channels,\n                    kernel_size,\n                    p_dropout=p_dropout,\n                )\n            )\n            self.norm_layers_2.append(LayerNorm(hidden_channels))\n\n    def forward(self, x, x_mask):\n        attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1)\n        x = x * x_mask\n        for i in range(self.n_layers):\n            y = self.attn_layers[i](x, x, attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_1[i](x + y)\n\n            y = self.ffn_layers[i](x, x_mask)\n            y = self.drop(y)\n            x = self.norm_layers_2[i](x + y)\n        x = x * x_mask\n        return x\n\n\nclass Decoder(nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size=1,\n        p_dropout=0.0,\n        proximal_bias=False,\n        proximal_init=True,\n        **kwargs\n    ):\n        super().__init__()\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.proximal_bias = proximal_bias\n        self.proximal_init = proximal_init\n\n        self.drop = nn.Dropout(p_dropout)\n        self.self_attn_layers = nn.ModuleList()\n        self.norm_layers_0 = nn.ModuleList()\n        self.encdec_attn_layers = nn.ModuleList()\n        self.norm_layers_1 = nn.ModuleList()\n        self.ffn_layers = nn.ModuleList()\n        self.norm_layers_2 = nn.ModuleList()\n        for i in range(self.n_layers):\n            self.self_attn_layers.append(\n                MultiHeadAttention(\n                    hidden_channels,\n                    hidden_channels,\n                    n_heads,\n                    p_dropout=p_dropout,\n                    proximal_bias=proximal_bias,\n                    proximal_init=proximal_init,\n                )\n            )\n            self.norm_layers_0.append(LayerNorm(hidden_channels))\n            self.encdec_attn_layers.append(\n                MultiHeadAttention(\n                    hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout\n                )\n            )\n            self.norm_layers_1.append(LayerNorm(hidden_channels))\n            self.ffn_layers.append(\n                FFN(\n                    hidden_channels,\n                    hidden_channels,\n                    filter_channels,\n                    kernel_size,\n                    p_dropout=p_dropout,\n                    causal=True,\n                )\n            )\n            self.norm_layers_2.append(LayerNorm(hidden_channels))\n\n    def forward(self, x, x_mask, h, h_mask):\n        \"\"\"\n        x: decoder input\n        h: encoder output\n        \"\"\"\n        self_attn_mask = commons.subsequent_mask(x_mask.size(2)).to(\n            device=x.device, dtype=x.dtype\n        )\n        encdec_attn_mask = h_mask.unsqueeze(2) * x_mask.unsqueeze(-1)\n        x = x * x_mask\n        for i in range(self.n_layers):\n            y = self.self_attn_layers[i](x, x, self_attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_0[i](x + y)\n\n            y = self.encdec_attn_layers[i](x, h, encdec_attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_1[i](x + y)\n\n            y = self.ffn_layers[i](x, x_mask)\n            y = self.drop(y)\n            x = self.norm_layers_2[i](x + y)\n        x = x * x_mask\n        return x\n\n\nclass MultiHeadAttention(nn.Module):\n    def __init__(\n        self,\n        channels,\n        out_channels,\n        n_heads,\n        p_dropout=0.0,\n        window_size=None,\n        heads_share=True,\n        block_length=None,\n        proximal_bias=False,\n        proximal_init=False,\n    ):\n        super().__init__()\n        assert channels % n_heads == 0\n\n        self.channels = channels\n        self.out_channels = out_channels\n        self.n_heads = n_heads\n        self.p_dropout = p_dropout\n        self.window_size = window_size\n        self.heads_share = heads_share\n        self.block_length = block_length\n        self.proximal_bias = proximal_bias\n        self.proximal_init = proximal_init\n        self.attn = None\n\n        self.k_channels = channels // n_heads\n        self.conv_q = nn.Conv1d(channels, channels, 1)\n        self.conv_k = nn.Conv1d(channels, channels, 1)\n        self.conv_v = nn.Conv1d(channels, channels, 1)\n        self.conv_o = nn.Conv1d(channels, out_channels, 1)\n        self.drop = nn.Dropout(p_dropout)\n\n        if window_size is not None:\n            n_heads_rel = 1 if heads_share else n_heads\n            rel_stddev = self.k_channels**-0.5\n            self.emb_rel_k = nn.Parameter(\n                torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels)\n                * rel_stddev\n            )\n            self.emb_rel_v = nn.Parameter(\n                torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels)\n                * rel_stddev\n            )\n\n        nn.init.xavier_uniform_(self.conv_q.weight)\n        nn.init.xavier_uniform_(self.conv_k.weight)\n        nn.init.xavier_uniform_(self.conv_v.weight)\n        if proximal_init:\n            with torch.no_grad():\n                self.conv_k.weight.copy_(self.conv_q.weight)\n                self.conv_k.bias.copy_(self.conv_q.bias)\n\n    def forward(self, x, c, attn_mask=None):\n        q = self.conv_q(x)\n        k = self.conv_k(c)\n        v = self.conv_v(c)\n\n        x, self.attn = self.attention(q, k, v, mask=attn_mask)\n\n        x = self.conv_o(x)\n        return x\n\n    def attention(self, query, key, value, mask=None):\n        # reshape [b, d, t] -> [b, n_h, t, d_k]\n        b, d, t_s, t_t = (*key.size(), query.size(2))\n        query = query.view(b, self.n_heads, self.k_channels, t_t).transpose(2, 3)\n        key = key.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)\n        value = value.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)\n\n        scores = torch.matmul(query / math.sqrt(self.k_channels), key.transpose(-2, -1))\n        if self.window_size is not None:\n            assert (\n                t_s == t_t\n            ), \"Relative attention is only available for self-attention.\"\n            key_relative_embeddings = self._get_relative_embeddings(self.emb_rel_k, t_s)\n            rel_logits = self._matmul_with_relative_keys(\n                query / math.sqrt(self.k_channels), key_relative_embeddings\n            )\n            scores_local = self._relative_position_to_absolute_position(rel_logits)\n            scores = scores + scores_local\n        if self.proximal_bias:\n            assert t_s == t_t, \"Proximal bias is only available for self-attention.\"\n            scores = scores + self._attention_bias_proximal(t_s).to(\n                device=scores.device, dtype=scores.dtype\n            )\n        if mask is not None:\n            scores = scores.masked_fill(mask == 0, -1e4)\n            if self.block_length is not None:\n                assert (\n                    t_s == t_t\n                ), \"Local attention is only available for self-attention.\"\n                block_mask = (\n                    torch.ones_like(scores)\n                    .triu(-self.block_length)\n                    .tril(self.block_length)\n                )\n                scores = scores.masked_fill(block_mask == 0, -1e4)\n        p_attn = F.softmax(scores, dim=-1)  # [b, n_h, t_t, t_s]\n        p_attn = self.drop(p_attn)\n        output = torch.matmul(p_attn, value)\n        if self.window_size is not None:\n            relative_weights = self._absolute_position_to_relative_position(p_attn)\n            value_relative_embeddings = self._get_relative_embeddings(\n                self.emb_rel_v, t_s\n            )\n            output = output + self._matmul_with_relative_values(\n                relative_weights, value_relative_embeddings\n            )\n        output = (\n            output.transpose(2, 3).contiguous().view(b, d, t_t)\n        )  # [b, n_h, t_t, d_k] -> [b, d, t_t]\n        return output, p_attn\n\n    def _matmul_with_relative_values(self, x, y):\n        \"\"\"\n        x: [b, h, l, m]\n        y: [h or 1, m, d]\n        ret: [b, h, l, d]\n        \"\"\"\n        ret = torch.matmul(x, y.unsqueeze(0))\n        return ret\n\n    def _matmul_with_relative_keys(self, x, y):\n        \"\"\"\n        x: [b, h, l, d]\n        y: [h or 1, m, d]\n        ret: [b, h, l, m]\n        \"\"\"\n        ret = torch.matmul(x, y.unsqueeze(0).transpose(-2, -1))\n        return ret\n\n    def _get_relative_embeddings(self, relative_embeddings, length):\n        max_relative_position = 2 * self.window_size + 1\n        # Pad first before slice to avoid using cond ops.\n        pad_length = max(length - (self.window_size + 1), 0)\n        slice_start_position = max((self.window_size + 1) - length, 0)\n        slice_end_position = slice_start_position + 2 * length - 1\n        if pad_length > 0:\n            padded_relative_embeddings = F.pad(\n                relative_embeddings,\n                commons.convert_pad_shape([[0, 0], [pad_length, pad_length], [0, 0]]),\n            )\n        else:\n            padded_relative_embeddings = relative_embeddings\n        used_relative_embeddings = padded_relative_embeddings[\n            :, slice_start_position:slice_end_position\n        ]\n        return used_relative_embeddings\n\n    def _relative_position_to_absolute_position(self, x):\n        \"\"\"\n        x: [b, h, l, 2*l-1]\n        ret: [b, h, l, l]\n        \"\"\"\n        batch, heads, length, _ = x.size()\n        # Concat columns of pad to shift from relative to absolute indexing.\n        x = F.pad(x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, 1]]))\n\n        # Concat extra elements so to add up to shape (len+1, 2*len-1).\n        x_flat = x.view([batch, heads, length * 2 * length])\n        x_flat = F.pad(\n            x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [0, length - 1]])\n        )\n\n        # Reshape and slice out the padded elements.\n        x_final = x_flat.view([batch, heads, length + 1, 2 * length - 1])[\n            :, :, :length, length - 1 :\n        ]\n        return x_final\n\n    def _absolute_position_to_relative_position(self, x):\n        \"\"\"\n        x: [b, h, l, l]\n        ret: [b, h, l, 2*l-1]\n        \"\"\"\n        batch, heads, length, _ = x.size()\n        # padd along column\n        x = F.pad(\n            x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, length - 1]])\n        )\n        x_flat = x.view([batch, heads, length**2 + length * (length - 1)])\n        # add 0's in the beginning that will skew the elements after reshape\n        x_flat = F.pad(x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [length, 0]]))\n        x_final = x_flat.view([batch, heads, length, 2 * length])[:, :, :, 1:]\n        return x_final\n\n    def _attention_bias_proximal(self, length):\n        \"\"\"Bias for self-attention to encourage attention to close positions.\n        Args:\n          length: an integer scalar.\n        Returns:\n          a Tensor with shape [1, 1, length, length]\n        \"\"\"\n        r = torch.arange(length, dtype=torch.float32)\n        diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1)\n        return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0)\n\n\nclass FFN(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        filter_channels,\n        kernel_size,\n        p_dropout=0.0,\n        activation=None,\n        causal=False,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.activation = activation\n        self.causal = causal\n\n        if causal:\n            self.padding = self._causal_padding\n        else:\n            self.padding = self._same_padding\n\n        self.conv_1 = nn.Conv1d(in_channels, filter_channels, kernel_size)\n        self.conv_2 = nn.Conv1d(filter_channels, out_channels, kernel_size)\n        self.drop = nn.Dropout(p_dropout)\n\n    def forward(self, x, x_mask):\n        x = self.conv_1(self.padding(x * x_mask))\n        if self.activation == \"gelu\":\n            x = x * torch.sigmoid(1.702 * x)\n        else:\n            x = torch.relu(x)\n        x = self.drop(x)\n        x = self.conv_2(self.padding(x * x_mask))\n        return x * x_mask\n\n    def _causal_padding(self, x):\n        if self.kernel_size == 1:\n            return x\n        pad_l = self.kernel_size - 1\n        pad_r = 0\n        padding = [[0, 0], [0, 0], [pad_l, pad_r]]\n        x = F.pad(x, commons.convert_pad_shape(padding))\n        return x\n\n    def _same_padding(self, x):\n        if self.kernel_size == 1:\n            return x\n        pad_l = (self.kernel_size - 1) // 2\n        pad_r = self.kernel_size // 2\n        padding = [[0, 0], [0, 0], [pad_l, pad_r]]\n        x = F.pad(x, commons.convert_pad_shape(padding))\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/commons.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport math\nimport os.path\n\nimport numpy as np\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nfrom munch import Munch\nimport json\n\n\nclass AttrDict(dict):\n    def __init__(self, *args, **kwargs):\n        super(AttrDict, self).__init__(*args, **kwargs)\n        self.__dict__ = self\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef convert_pad_shape(pad_shape):\n    l = pad_shape[::-1]\n    pad_shape = [item for sublist in l for item in sublist]\n    return pad_shape\n\n\ndef intersperse(lst, item):\n    result = [item] * (len(lst) * 2 + 1)\n    result[1::2] = lst\n    return result\n\n\ndef kl_divergence(m_p, logs_p, m_q, logs_q):\n    \"\"\"KL(P||Q)\"\"\"\n    kl = (logs_q - logs_p) - 0.5\n    kl += (\n        0.5 * (torch.exp(2.0 * logs_p) + ((m_p - m_q) ** 2)) * torch.exp(-2.0 * logs_q)\n    )\n    return kl\n\n\ndef rand_gumbel(shape):\n    \"\"\"Sample from the Gumbel distribution, protect from overflows.\"\"\"\n    uniform_samples = torch.rand(shape) * 0.99998 + 0.00001\n    return -torch.log(-torch.log(uniform_samples))\n\n\ndef rand_gumbel_like(x):\n    g = rand_gumbel(x.size()).to(dtype=x.dtype, device=x.device)\n    return g\n\n\ndef slice_segments(x, ids_str, segment_size=4):\n    ret = torch.zeros_like(x[:, :, :segment_size])\n    for i in range(x.size(0)):\n        idx_str = ids_str[i]\n        idx_end = idx_str + segment_size\n        ret[i] = x[i, :, idx_str:idx_end]\n    return ret\n\n\ndef slice_segments_audio(x, ids_str, segment_size=4):\n    ret = torch.zeros_like(x[:, :segment_size])\n    for i in range(x.size(0)):\n        idx_str = ids_str[i]\n        idx_end = idx_str + segment_size\n        ret[i] = x[i, idx_str:idx_end]\n    return ret\n\n\ndef rand_slice_segments(x, x_lengths=None, segment_size=4):\n    b, d, t = x.size()\n    if x_lengths is None:\n        x_lengths = t\n    ids_str_max = x_lengths - segment_size + 1\n    ids_str = ((torch.rand([b]).to(device=x.device) * ids_str_max).clip(0)).to(\n        dtype=torch.long\n    )\n    ret = slice_segments(x, ids_str, segment_size)\n    return ret, ids_str\n\n\ndef get_timing_signal_1d(length, channels, min_timescale=1.0, max_timescale=1.0e4):\n    position = torch.arange(length, dtype=torch.float)\n    num_timescales = channels // 2\n    log_timescale_increment = math.log(float(max_timescale) / float(min_timescale)) / (\n        num_timescales - 1\n    )\n    inv_timescales = min_timescale * torch.exp(\n        torch.arange(num_timescales, dtype=torch.float) * -log_timescale_increment\n    )\n    scaled_time = position.unsqueeze(0) * inv_timescales.unsqueeze(1)\n    signal = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], 0)\n    signal = F.pad(signal, [0, 0, 0, channels % 2])\n    signal = signal.view(1, channels, length)\n    return signal\n\n\ndef add_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4):\n    b, channels, length = x.size()\n    signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)\n    return x + signal.to(dtype=x.dtype, device=x.device)\n\n\ndef cat_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4, axis=1):\n    b, channels, length = x.size()\n    signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)\n    return torch.cat([x, signal.to(dtype=x.dtype, device=x.device)], axis)\n\n\ndef subsequent_mask(length):\n    mask = torch.tril(torch.ones(length, length)).unsqueeze(0).unsqueeze(0)\n    return mask\n\n\n@torch.jit.script\ndef fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):\n    n_channels_int = n_channels[0]\n    in_act = input_a + input_b\n    t_act = torch.tanh(in_act[:, :n_channels_int, :])\n    s_act = torch.sigmoid(in_act[:, n_channels_int:, :])\n    acts = t_act * s_act\n    return acts\n\n\ndef convert_pad_shape(pad_shape):\n    l = pad_shape[::-1]\n    pad_shape = [item for sublist in l for item in sublist]\n    return pad_shape\n\n\ndef shift_1d(x):\n    x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [1, 0]]))[:, :, :-1]\n    return x\n\n\ndef sequence_mask(length, max_length=None):\n    if max_length is None:\n        max_length = length.max()\n    x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n    return x.unsqueeze(0) < length.unsqueeze(1)\n\n\ndef generate_path(duration, mask):\n    \"\"\"\n    duration: [b, 1, t_x]\n    mask: [b, 1, t_y, t_x]\n    \"\"\"\n    device = duration.device\n\n    b, _, t_y, t_x = mask.shape\n    cum_duration = torch.cumsum(duration, -1)\n\n    cum_duration_flat = cum_duration.view(b * t_x)\n    path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype)\n    path = path.view(b, t_x, t_y)\n    path = path - F.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1]\n    path = path.unsqueeze(1).transpose(2, 3) * mask\n    return path\n\n\ndef clip_grad_value_(parameters, clip_value, norm_type=2):\n    if isinstance(parameters, torch.Tensor):\n        parameters = [parameters]\n    parameters = list(filter(lambda p: p.grad is not None, parameters))\n    norm_type = float(norm_type)\n    if clip_value is not None:\n        clip_value = float(clip_value)\n\n    total_norm = 0\n    for p in parameters:\n        param_norm = p.grad.data.norm(norm_type)\n        total_norm += param_norm.item() ** norm_type\n        if clip_value is not None:\n            p.grad.data.clamp_(min=-clip_value, max=clip_value)\n    total_norm = total_norm ** (1.0 / norm_type)\n    return total_norm\n\n\ndef log_norm(x, mean=-4, std=4, dim=2):\n    \"\"\"\n    normalized log mel -> mel -> norm -> log(norm)\n    \"\"\"\n    x = torch.log(torch.exp(x * std + mean).norm(dim=dim))\n    return x\n\n\nfrom huggingface_hub import hf_hub_download\n\n\ndef load_F0_models(path):\n    # load F0 model\n    from .JDC.model import JDCNet\n\n    F0_model = JDCNet(num_class=1, seq_len=192)\n    if not os.path.exists(path):\n        path = hf_hub_download(repo_id=\"Plachta/JDCnet\", filename=\"bst.t7\")\n    params = torch.load(path, map_location=\"cpu\")[\"net\"]\n    F0_model.load_state_dict(params)\n    _ = F0_model.train()\n\n    return F0_model\n\n\n# Generators\nfrom modules.dac.model.dac import Encoder, Decoder\nfrom .quantize import FAquantizer, FApredictors\n\n# Discriminators\nfrom modules.dac.model.discriminator import Discriminator\n\n\ndef build_model(args):\n    encoder = Encoder(\n        d_model=args.DAC.encoder_dim,\n        strides=args.DAC.encoder_rates,\n        d_latent=1024,\n        causal=args.causal,\n        lstm=args.lstm,\n    )\n\n    quantizer = FAquantizer(\n        in_dim=1024,\n        n_p_codebooks=1,\n        n_c_codebooks=args.n_c_codebooks,\n        n_t_codebooks=2,\n        n_r_codebooks=3,\n        codebook_size=1024,\n        codebook_dim=8,\n        quantizer_dropout=0.5,\n        causal=args.causal,\n        separate_prosody_encoder=args.separate_prosody_encoder,\n        timbre_norm=args.timbre_norm,\n    )\n\n    fa_predictors = FApredictors(\n        in_dim=1024,\n        use_gr_content_f0=args.use_gr_content_f0,\n        use_gr_prosody_phone=args.use_gr_prosody_phone,\n        use_gr_residual_f0=True,\n        use_gr_residual_phone=True,\n        use_gr_timbre_content=True,\n        use_gr_timbre_prosody=args.use_gr_timbre_prosody,\n        use_gr_x_timbre=True,\n        norm_f0=args.norm_f0,\n        timbre_norm=args.timbre_norm,\n        use_gr_content_global_f0=args.use_gr_content_global_f0,\n    )\n\n    decoder = Decoder(\n        input_channel=1024,\n        channels=args.DAC.decoder_dim,\n        rates=args.DAC.decoder_rates,\n        causal=args.causal,\n        lstm=args.lstm,\n    )\n\n    discriminator = Discriminator(\n        rates=[],\n        periods=[2, 3, 5, 7, 11],\n        fft_sizes=[2048, 1024, 512],\n        sample_rate=args.DAC.sr,\n        bands=[(0.0, 0.1), (0.1, 0.25), (0.25, 0.5), (0.5, 0.75), (0.75, 1.0)],\n    )\n\n    nets = Munch(\n        encoder=encoder,\n        quantizer=quantizer,\n        decoder=decoder,\n        discriminator=discriminator,\n        fa_predictors=fa_predictors,\n    )\n\n    return nets\n\n\ndef load_checkpoint(\n    model,\n    optimizer,\n    path,\n    load_only_params=True,\n    ignore_modules=[],\n    is_distributed=False,\n):\n    state = torch.load(path, map_location=\"cpu\")\n    params = state[\"net\"]\n    for key in model:\n        if key in params and key not in ignore_modules:\n            if not is_distributed:\n                # strip prefix of DDP (module.), create a new OrderedDict that does not contain the prefix\n                for k in list(params[key].keys()):\n                    if k.startswith(\"module.\"):\n                        params[key][k[len(\"module.\") :]] = params[key][k]\n                        del params[key][k]\n            print(\"%s loaded\" % key)\n            model[key].load_state_dict(params[key], strict=True)\n    _ = [model[key].eval() for key in model]\n\n    if not load_only_params:\n        epoch = state[\"epoch\"] + 1\n        iters = state[\"iters\"]\n        optimizer.load_state_dict(state[\"optimizer\"])\n        optimizer.load_scheduler_state_dict(state[\"scheduler\"])\n\n    else:\n        epoch = state[\"epoch\"] + 1\n        iters = state[\"iters\"]\n\n    return model, optimizer, epoch, iters\n\n\ndef recursive_munch(d):\n    if isinstance(d, dict):\n        return Munch((k, recursive_munch(v)) for k, v in d.items())\n    elif isinstance(d, list):\n        return [recursive_munch(v) for v in d]\n    else:\n        return d\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/gradient_reversal.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom torch.autograd import Function\nimport torch\nfrom torch import nn\n\n\nclass GradientReversal(Function):\n    @staticmethod\n    def forward(ctx, x, alpha):\n        ctx.save_for_backward(x, alpha)\n        return x\n\n    @staticmethod\n    def backward(ctx, grad_output):\n        grad_input = None\n        _, alpha = ctx.saved_tensors\n        if ctx.needs_input_grad[0]:\n            grad_input = -alpha * grad_output\n        return grad_input, None\n\n\nrevgrad = GradientReversal.apply\n\n\nclass GradientReversal(nn.Module):\n    def __init__(self, alpha):\n        super().__init__()\n        self.alpha = torch.tensor(alpha, requires_grad=False)\n\n    def forward(self, x):\n        return revgrad(x, self.alpha)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/layers.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nimport torch\nfrom torch import nn\nfrom typing import Optional, Any\nfrom torch import Tensor\nimport torch.nn.functional as F\nimport torchaudio\nimport torchaudio.functional as audio_F\n\nimport random\n\nrandom.seed(0)\n\n\ndef _get_activation_fn(activ):\n    if activ == \"relu\":\n        return nn.ReLU()\n    elif activ == \"lrelu\":\n        return nn.LeakyReLU(0.2)\n    elif activ == \"swish\":\n        return lambda x: x * torch.sigmoid(x)\n    else:\n        raise RuntimeError(\n            \"Unexpected activ type %s, expected [relu, lrelu, swish]\" % activ\n        )\n\n\nclass LinearNorm(torch.nn.Module):\n    def __init__(self, in_dim, out_dim, bias=True, w_init_gain=\"linear\"):\n        super(LinearNorm, self).__init__()\n        self.linear_layer = torch.nn.Linear(in_dim, out_dim, bias=bias)\n\n        torch.nn.init.xavier_uniform_(\n            self.linear_layer.weight, gain=torch.nn.init.calculate_gain(w_init_gain)\n        )\n\n    def forward(self, x):\n        return self.linear_layer(x)\n\n\nclass ConvNorm(torch.nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        kernel_size=1,\n        stride=1,\n        padding=None,\n        dilation=1,\n        bias=True,\n        w_init_gain=\"linear\",\n        param=None,\n    ):\n        super(ConvNorm, self).__init__()\n        if padding is None:\n            assert kernel_size % 2 == 1\n            padding = int(dilation * (kernel_size - 1) / 2)\n\n        self.conv = torch.nn.Conv1d(\n            in_channels,\n            out_channels,\n            kernel_size=kernel_size,\n            stride=stride,\n            padding=padding,\n            dilation=dilation,\n            bias=bias,\n        )\n\n        torch.nn.init.xavier_uniform_(\n            self.conv.weight,\n            gain=torch.nn.init.calculate_gain(w_init_gain, param=param),\n        )\n\n    def forward(self, signal):\n        conv_signal = self.conv(signal)\n        return conv_signal\n\n\nclass CausualConv(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        kernel_size=1,\n        stride=1,\n        padding=1,\n        dilation=1,\n        bias=True,\n        w_init_gain=\"linear\",\n        param=None,\n    ):\n        super(CausualConv, self).__init__()\n        if padding is None:\n            assert kernel_size % 2 == 1\n            padding = int(dilation * (kernel_size - 1) / 2) * 2\n        else:\n            self.padding = padding * 2\n        self.conv = nn.Conv1d(\n            in_channels,\n            out_channels,\n            kernel_size=kernel_size,\n            stride=stride,\n            padding=self.padding,\n            dilation=dilation,\n            bias=bias,\n        )\n\n        torch.nn.init.xavier_uniform_(\n            self.conv.weight,\n            gain=torch.nn.init.calculate_gain(w_init_gain, param=param),\n        )\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = x[:, :, : -self.padding]\n        return x\n\n\nclass CausualBlock(nn.Module):\n    def __init__(self, hidden_dim, n_conv=3, dropout_p=0.2, activ=\"lrelu\"):\n        super(CausualBlock, self).__init__()\n        self.blocks = nn.ModuleList(\n            [\n                self._get_conv(\n                    hidden_dim, dilation=3**i, activ=activ, dropout_p=dropout_p\n                )\n                for i in range(n_conv)\n            ]\n        )\n\n    def forward(self, x):\n        for block in self.blocks:\n            res = x\n            x = block(x)\n            x += res\n        return x\n\n    def _get_conv(self, hidden_dim, dilation, activ=\"lrelu\", dropout_p=0.2):\n        layers = [\n            CausualConv(\n                hidden_dim,\n                hidden_dim,\n                kernel_size=3,\n                padding=dilation,\n                dilation=dilation,\n            ),\n            _get_activation_fn(activ),\n            nn.BatchNorm1d(hidden_dim),\n            nn.Dropout(p=dropout_p),\n            CausualConv(hidden_dim, hidden_dim, kernel_size=3, padding=1, dilation=1),\n            _get_activation_fn(activ),\n            nn.Dropout(p=dropout_p),\n        ]\n        return nn.Sequential(*layers)\n\n\nclass ConvBlock(nn.Module):\n    def __init__(self, hidden_dim, n_conv=3, dropout_p=0.2, activ=\"relu\"):\n        super().__init__()\n        self._n_groups = 8\n        self.blocks = nn.ModuleList(\n            [\n                self._get_conv(\n                    hidden_dim, dilation=3**i, activ=activ, dropout_p=dropout_p\n                )\n                for i in range(n_conv)\n            ]\n        )\n\n    def forward(self, x):\n        for block in self.blocks:\n            res = x\n            x = block(x)\n            x += res\n        return x\n\n    def _get_conv(self, hidden_dim, dilation, activ=\"relu\", dropout_p=0.2):\n        layers = [\n            ConvNorm(\n                hidden_dim,\n                hidden_dim,\n                kernel_size=3,\n                padding=dilation,\n                dilation=dilation,\n            ),\n            _get_activation_fn(activ),\n            nn.GroupNorm(num_groups=self._n_groups, num_channels=hidden_dim),\n            nn.Dropout(p=dropout_p),\n            ConvNorm(hidden_dim, hidden_dim, kernel_size=3, padding=1, dilation=1),\n            _get_activation_fn(activ),\n            nn.Dropout(p=dropout_p),\n        ]\n        return nn.Sequential(*layers)\n\n\nclass LocationLayer(nn.Module):\n    def __init__(self, attention_n_filters, attention_kernel_size, attention_dim):\n        super(LocationLayer, self).__init__()\n        padding = int((attention_kernel_size - 1) / 2)\n        self.location_conv = ConvNorm(\n            2,\n            attention_n_filters,\n            kernel_size=attention_kernel_size,\n            padding=padding,\n            bias=False,\n            stride=1,\n            dilation=1,\n        )\n        self.location_dense = LinearNorm(\n            attention_n_filters, attention_dim, bias=False, w_init_gain=\"tanh\"\n        )\n\n    def forward(self, attention_weights_cat):\n        processed_attention = self.location_conv(attention_weights_cat)\n        processed_attention = processed_attention.transpose(1, 2)\n        processed_attention = self.location_dense(processed_attention)\n        return processed_attention\n\n\nclass Attention(nn.Module):\n    def __init__(\n        self,\n        attention_rnn_dim,\n        embedding_dim,\n        attention_dim,\n        attention_location_n_filters,\n        attention_location_kernel_size,\n    ):\n        super(Attention, self).__init__()\n        self.query_layer = LinearNorm(\n            attention_rnn_dim, attention_dim, bias=False, w_init_gain=\"tanh\"\n        )\n        self.memory_layer = LinearNorm(\n            embedding_dim, attention_dim, bias=False, w_init_gain=\"tanh\"\n        )\n        self.v = LinearNorm(attention_dim, 1, bias=False)\n        self.location_layer = LocationLayer(\n            attention_location_n_filters, attention_location_kernel_size, attention_dim\n        )\n        self.score_mask_value = -float(\"inf\")\n\n    def get_alignment_energies(self, query, processed_memory, attention_weights_cat):\n        \"\"\"\n        PARAMS\n        ------\n        query: decoder output (batch, n_mel_channels * n_frames_per_step)\n        processed_memory: processed encoder outputs (B, T_in, attention_dim)\n        attention_weights_cat: cumulative and prev. att weights (B, 2, max_time)\n        RETURNS\n        -------\n        alignment (batch, max_time)\n        \"\"\"\n\n        processed_query = self.query_layer(query.unsqueeze(1))\n        processed_attention_weights = self.location_layer(attention_weights_cat)\n        energies = self.v(\n            torch.tanh(processed_query + processed_attention_weights + processed_memory)\n        )\n\n        energies = energies.squeeze(-1)\n        return energies\n\n    def forward(\n        self,\n        attention_hidden_state,\n        memory,\n        processed_memory,\n        attention_weights_cat,\n        mask,\n    ):\n        \"\"\"\n        PARAMS\n        ------\n        attention_hidden_state: attention rnn last output\n        memory: encoder outputs\n        processed_memory: processed encoder outputs\n        attention_weights_cat: previous and cummulative attention weights\n        mask: binary mask for padded data\n        \"\"\"\n        alignment = self.get_alignment_energies(\n            attention_hidden_state, processed_memory, attention_weights_cat\n        )\n\n        if mask is not None:\n            alignment.data.masked_fill_(mask, self.score_mask_value)\n\n        attention_weights = F.softmax(alignment, dim=1)\n        attention_context = torch.bmm(attention_weights.unsqueeze(1), memory)\n        attention_context = attention_context.squeeze(1)\n\n        return attention_context, attention_weights\n\n\nclass ForwardAttentionV2(nn.Module):\n    def __init__(\n        self,\n        attention_rnn_dim,\n        embedding_dim,\n        attention_dim,\n        attention_location_n_filters,\n        attention_location_kernel_size,\n    ):\n        super(ForwardAttentionV2, self).__init__()\n        self.query_layer = LinearNorm(\n            attention_rnn_dim, attention_dim, bias=False, w_init_gain=\"tanh\"\n        )\n        self.memory_layer = LinearNorm(\n            embedding_dim, attention_dim, bias=False, w_init_gain=\"tanh\"\n        )\n        self.v = LinearNorm(attention_dim, 1, bias=False)\n        self.location_layer = LocationLayer(\n            attention_location_n_filters, attention_location_kernel_size, attention_dim\n        )\n        self.score_mask_value = -float(1e20)\n\n    def get_alignment_energies(self, query, processed_memory, attention_weights_cat):\n        \"\"\"\n        PARAMS\n        ------\n        query: decoder output (batch, n_mel_channels * n_frames_per_step)\n        processed_memory: processed encoder outputs (B, T_in, attention_dim)\n        attention_weights_cat:  prev. and cumulative att weights (B, 2, max_time)\n        RETURNS\n        -------\n        alignment (batch, max_time)\n        \"\"\"\n\n        processed_query = self.query_layer(query.unsqueeze(1))\n        processed_attention_weights = self.location_layer(attention_weights_cat)\n        energies = self.v(\n            torch.tanh(processed_query + processed_attention_weights + processed_memory)\n        )\n\n        energies = energies.squeeze(-1)\n        return energies\n\n    def forward(\n        self,\n        attention_hidden_state,\n        memory,\n        processed_memory,\n        attention_weights_cat,\n        mask,\n        log_alpha,\n    ):\n        \"\"\"\n        PARAMS\n        ------\n        attention_hidden_state: attention rnn last output\n        memory: encoder outputs\n        processed_memory: processed encoder outputs\n        attention_weights_cat: previous and cummulative attention weights\n        mask: binary mask for padded data\n        \"\"\"\n        log_energy = self.get_alignment_energies(\n            attention_hidden_state, processed_memory, attention_weights_cat\n        )\n\n        # log_energy =\n\n        if mask is not None:\n            log_energy.data.masked_fill_(mask, self.score_mask_value)\n\n        # attention_weights = F.softmax(alignment, dim=1)\n\n        # content_score = log_energy.unsqueeze(1) #[B, MAX_TIME] -> [B, 1, MAX_TIME]\n        # log_alpha = log_alpha.unsqueeze(2) #[B, MAX_TIME] -> [B, MAX_TIME, 1]\n\n        # log_total_score = log_alpha + content_score\n\n        # previous_attention_weights = attention_weights_cat[:,0,:]\n\n        log_alpha_shift_padded = []\n        max_time = log_energy.size(1)\n        for sft in range(2):\n            shifted = log_alpha[:, : max_time - sft]\n            shift_padded = F.pad(shifted, (sft, 0), \"constant\", self.score_mask_value)\n            log_alpha_shift_padded.append(shift_padded.unsqueeze(2))\n\n        biased = torch.logsumexp(torch.cat(log_alpha_shift_padded, 2), 2)\n\n        log_alpha_new = biased + log_energy\n\n        attention_weights = F.softmax(log_alpha_new, dim=1)\n\n        attention_context = torch.bmm(attention_weights.unsqueeze(1), memory)\n        attention_context = attention_context.squeeze(1)\n\n        return attention_context, attention_weights, log_alpha_new\n\n\nclass PhaseShuffle2d(nn.Module):\n    def __init__(self, n=2):\n        super(PhaseShuffle2d, self).__init__()\n        self.n = n\n        self.random = random.Random(1)\n\n    def forward(self, x, move=None):\n        # x.size = (B, C, M, L)\n        if move is None:\n            move = self.random.randint(-self.n, self.n)\n\n        if move == 0:\n            return x\n        else:\n            left = x[:, :, :, :move]\n            right = x[:, :, :, move:]\n            shuffled = torch.cat([right, left], dim=3)\n        return shuffled\n\n\nclass PhaseShuffle1d(nn.Module):\n    def __init__(self, n=2):\n        super(PhaseShuffle1d, self).__init__()\n        self.n = n\n        self.random = random.Random(1)\n\n    def forward(self, x, move=None):\n        # x.size = (B, C, M, L)\n        if move is None:\n            move = self.random.randint(-self.n, self.n)\n\n        if move == 0:\n            return x\n        else:\n            left = x[:, :, :move]\n            right = x[:, :, move:]\n            shuffled = torch.cat([right, left], dim=2)\n\n        return shuffled\n\n\nclass MFCC(nn.Module):\n    def __init__(self, n_mfcc=40, n_mels=80):\n        super(MFCC, self).__init__()\n        self.n_mfcc = n_mfcc\n        self.n_mels = n_mels\n        self.norm = \"ortho\"\n        dct_mat = audio_F.create_dct(self.n_mfcc, self.n_mels, self.norm)\n        self.register_buffer(\"dct_mat\", dct_mat)\n\n    def forward(self, mel_specgram):\n        if len(mel_specgram.shape) == 2:\n            mel_specgram = mel_specgram.unsqueeze(0)\n            unsqueezed = True\n        else:\n            unsqueezed = False\n        # (channel, n_mels, time).tranpose(...) dot (n_mels, n_mfcc)\n        # -> (channel, time, n_mfcc).tranpose(...)\n        mfcc = torch.matmul(mel_specgram.transpose(1, 2), self.dct_mat).transpose(1, 2)\n\n        # unpack batch\n        if unsqueezed:\n            mfcc = mfcc.squeeze(0)\n        return mfcc\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/quantize.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom modules.dac.nn.quantize import ResidualVectorQuantize\nfrom torch import nn\nfrom .wavenet import WN\nfrom .style_encoder import StyleEncoder\nfrom .gradient_reversal import GradientReversal\nimport torch\nimport torchaudio\nimport torchaudio.functional as audio_F\nimport numpy as np\nfrom ..alias_free_torch import *\nfrom torch.nn.utils import weight_norm\nfrom torch import nn, sin, pow\nfrom einops.layers.torch import Rearrange\nfrom modules.dac.model.encodec import SConv1d\n\n\ndef init_weights(m):\n    if isinstance(m, nn.Conv1d):\n        nn.init.trunc_normal_(m.weight, std=0.02)\n        nn.init.constant_(m.bias, 0)\n\n\ndef WNConv1d(*args, **kwargs):\n    return weight_norm(nn.Conv1d(*args, **kwargs))\n\n\ndef WNConvTranspose1d(*args, **kwargs):\n    return weight_norm(nn.ConvTranspose1d(*args, **kwargs))\n\n\nclass SnakeBeta(nn.Module):\n    \"\"\"\n    A modified Snake function which uses separate parameters for the magnitude of the periodic components\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter that controls frequency\n        - beta - trainable parameter that controls magnitude\n    References:\n        - This activation function is a modified version based on this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snakebeta(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    \"\"\"\n\n    def __init__(\n        self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False\n    ):\n        \"\"\"\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha - trainable parameter that controls frequency\n            - beta - trainable parameter that controls magnitude\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            beta is initialized to 1 by default, higher values = higher-magnitude.\n            alpha will be trained along with the rest of your model.\n        \"\"\"\n        super(SnakeBeta, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale:  # log scale alphas initialized to zeros\n            self.alpha = nn.Parameter(torch.zeros(in_features) * alpha)\n            self.beta = nn.Parameter(torch.zeros(in_features) * alpha)\n        else:  # linear scale alphas initialized to ones\n            self.alpha = nn.Parameter(torch.ones(in_features) * alpha)\n            self.beta = nn.Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n        self.beta.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        \"\"\"\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        SnakeBeta := x + 1/b * sin^2 (xa)\n        \"\"\"\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1)  # line up with x to [B, C, T]\n        beta = self.beta.unsqueeze(0).unsqueeze(-1)\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n            beta = torch.exp(beta)\n        x = x + (1.0 / (beta + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x\n\n\nclass ResidualUnit(nn.Module):\n    def __init__(self, dim: int = 16, dilation: int = 1):\n        super().__init__()\n        pad = ((7 - 1) * dilation) // 2\n        self.block = nn.Sequential(\n            Activation1d(activation=SnakeBeta(dim, alpha_logscale=True)),\n            WNConv1d(dim, dim, kernel_size=7, dilation=dilation, padding=pad),\n            Activation1d(activation=SnakeBeta(dim, alpha_logscale=True)),\n            WNConv1d(dim, dim, kernel_size=1),\n        )\n\n    def forward(self, x):\n        return x + self.block(x)\n\n\nclass CNNLSTM(nn.Module):\n    def __init__(self, indim, outdim, head, global_pred=False):\n        super().__init__()\n        self.global_pred = global_pred\n        self.model = nn.Sequential(\n            ResidualUnit(indim, dilation=1),\n            ResidualUnit(indim, dilation=2),\n            ResidualUnit(indim, dilation=3),\n            Activation1d(activation=SnakeBeta(indim, alpha_logscale=True)),\n            Rearrange(\"b c t -> b t c\"),\n        )\n        self.heads = nn.ModuleList([nn.Linear(indim, outdim) for i in range(head)])\n\n    def forward(self, x):\n        # x: [B, C, T]\n        x = self.model(x)\n        if self.global_pred:\n            x = torch.mean(x, dim=1, keepdim=False)\n        outs = [head(x) for head in self.heads]\n        return outs\n\n\ndef sequence_mask(length, max_length=None):\n    if max_length is None:\n        max_length = length.max()\n    x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n    return x.unsqueeze(0) < length.unsqueeze(1)\n\n\nclass MFCC(nn.Module):\n    def __init__(self, n_mfcc=40, n_mels=80):\n        super(MFCC, self).__init__()\n        self.n_mfcc = n_mfcc\n        self.n_mels = n_mels\n        self.norm = \"ortho\"\n        dct_mat = audio_F.create_dct(self.n_mfcc, self.n_mels, self.norm)\n        self.register_buffer(\"dct_mat\", dct_mat)\n\n    def forward(self, mel_specgram):\n        if len(mel_specgram.shape) == 2:\n            mel_specgram = mel_specgram.unsqueeze(0)\n            unsqueezed = True\n        else:\n            unsqueezed = False\n        # (channel, n_mels, time).tranpose(...) dot (n_mels, n_mfcc)\n        # -> (channel, time, n_mfcc).tranpose(...)\n        mfcc = torch.matmul(mel_specgram.transpose(1, 2), self.dct_mat).transpose(1, 2)\n\n        # unpack batch\n        if unsqueezed:\n            mfcc = mfcc.squeeze(0)\n        return mfcc\n\n\nclass FAquantizer(nn.Module):\n    def __init__(\n        self,\n        in_dim=1024,\n        n_p_codebooks=1,\n        n_c_codebooks=2,\n        n_t_codebooks=2,\n        n_r_codebooks=3,\n        codebook_size=1024,\n        codebook_dim=8,\n        quantizer_dropout=0.5,\n        causal=False,\n        separate_prosody_encoder=False,\n        timbre_norm=False,\n    ):\n        super(FAquantizer, self).__init__()\n        conv1d_type = SConv1d  # if causal else nn.Conv1d\n        self.prosody_quantizer = ResidualVectorQuantize(\n            input_dim=in_dim,\n            n_codebooks=n_p_codebooks,\n            codebook_size=codebook_size,\n            codebook_dim=codebook_dim,\n            quantizer_dropout=quantizer_dropout,\n        )\n\n        self.content_quantizer = ResidualVectorQuantize(\n            input_dim=in_dim,\n            n_codebooks=n_c_codebooks,\n            codebook_size=codebook_size,\n            codebook_dim=codebook_dim,\n            quantizer_dropout=quantizer_dropout,\n        )\n\n        if not timbre_norm:\n            self.timbre_quantizer = ResidualVectorQuantize(\n                input_dim=in_dim,\n                n_codebooks=n_t_codebooks,\n                codebook_size=codebook_size,\n                codebook_dim=codebook_dim,\n                quantizer_dropout=quantizer_dropout,\n            )\n        else:\n            self.timbre_encoder = StyleEncoder(\n                in_dim=80, hidden_dim=512, out_dim=in_dim\n            )\n            self.timbre_linear = nn.Linear(1024, 1024 * 2)\n            self.timbre_linear.bias.data[:1024] = 1\n            self.timbre_linear.bias.data[1024:] = 0\n            self.timbre_norm = nn.LayerNorm(1024, elementwise_affine=False)\n\n        self.residual_quantizer = ResidualVectorQuantize(\n            input_dim=in_dim,\n            n_codebooks=n_r_codebooks,\n            codebook_size=codebook_size,\n            codebook_dim=codebook_dim,\n            quantizer_dropout=quantizer_dropout,\n        )\n\n        if separate_prosody_encoder:\n            self.melspec_linear = conv1d_type(\n                in_channels=20, out_channels=256, kernel_size=1, causal=causal\n            )\n            self.melspec_encoder = WN(\n                hidden_channels=256,\n                kernel_size=5,\n                dilation_rate=1,\n                n_layers=8,\n                gin_channels=0,\n                p_dropout=0.2,\n                causal=causal,\n            )\n            self.melspec_linear2 = conv1d_type(\n                in_channels=256, out_channels=1024, kernel_size=1, causal=causal\n            )\n        else:\n            pass\n        self.separate_prosody_encoder = separate_prosody_encoder\n\n        self.prob_random_mask_residual = 0.75\n\n        SPECT_PARAMS = {\n            \"n_fft\": 2048,\n            \"win_length\": 1200,\n            \"hop_length\": 300,\n        }\n        MEL_PARAMS = {\n            \"n_mels\": 80,\n        }\n\n        self.to_mel = torchaudio.transforms.MelSpectrogram(\n            n_mels=MEL_PARAMS[\"n_mels\"], sample_rate=24000, **SPECT_PARAMS\n        )\n        self.mel_mean, self.mel_std = -4, 4\n        self.frame_rate = 24000 / 300\n        self.hop_length = 300\n\n        self.is_timbre_norm = timbre_norm\n        if timbre_norm:\n            self.forward = self.forward_v2\n\n    def preprocess(self, wave_tensor, n_bins=20):\n        mel_tensor = self.to_mel(wave_tensor.squeeze(1))\n        mel_tensor = (torch.log(1e-5 + mel_tensor) - self.mel_mean) / self.mel_std\n        return mel_tensor[:, :n_bins, : int(wave_tensor.size(-1) / self.hop_length)]\n\n    @torch.no_grad()\n    def decode(self, codes):\n        code_c, code_p, code_t = codes.split([1, 1, 2], dim=1)\n\n        z_c = self.content_quantizer.from_codes(code_c)[0]\n        z_p = self.prosody_quantizer.from_codes(code_p)[0]\n        z_t = self.timbre_quantizer.from_codes(code_t)[0]\n\n        z = z_c + z_p + z_t\n\n        return z, [z_c, z_p, z_t]\n\n    @torch.no_grad()\n    def encode(self, x, wave_segments, n_c=1):\n        outs = 0\n        if self.separate_prosody_encoder:\n            prosody_feature = self.preprocess(wave_segments)\n\n            f0_input = prosody_feature  # (B, T, 20)\n            f0_input = self.melspec_linear(f0_input)\n            f0_input = self.melspec_encoder(\n                f0_input,\n                torch.ones(f0_input.shape[0], 1, f0_input.shape[2])\n                .to(f0_input.device)\n                .bool(),\n            )\n            f0_input = self.melspec_linear2(f0_input)\n\n            common_min_size = min(f0_input.size(2), x.size(2))\n            f0_input = f0_input[:, :, :common_min_size]\n\n            x = x[:, :, :common_min_size]\n\n            (\n                z_p,\n                codes_p,\n                latents_p,\n                commitment_loss_p,\n                codebook_loss_p,\n            ) = self.prosody_quantizer(f0_input, 1)\n            outs += z_p.detach()\n        else:\n            (\n                z_p,\n                codes_p,\n                latents_p,\n                commitment_loss_p,\n                codebook_loss_p,\n            ) = self.prosody_quantizer(x, 1)\n            outs += z_p.detach()\n\n        (\n            z_c,\n            codes_c,\n            latents_c,\n            commitment_loss_c,\n            codebook_loss_c,\n        ) = self.content_quantizer(x, n_c)\n        outs += z_c.detach()\n\n        timbre_residual_feature = x - z_p.detach() - z_c.detach()\n\n        (\n            z_t,\n            codes_t,\n            latents_t,\n            commitment_loss_t,\n            codebook_loss_t,\n        ) = self.timbre_quantizer(timbre_residual_feature, 2)\n        outs += z_t  # we should not detach timbre\n\n        residual_feature = timbre_residual_feature - z_t\n\n        (\n            z_r,\n            codes_r,\n            latents_r,\n            commitment_loss_r,\n            codebook_loss_r,\n        ) = self.residual_quantizer(residual_feature, 3)\n\n        return [codes_c, codes_p, codes_t, codes_r], [z_c, z_p, z_t, z_r]\n\n    def forward(\n        self, x, wave_segments, noise_added_flags, recon_noisy_flags, n_c=2, n_t=2\n    ):\n        # timbre = self.timbre_encoder(mels, sequence_mask(mel_lens, mels.size(-1)).unsqueeze(1))\n        # timbre = self.timbre_encoder(mel_segments, torch.ones(mel_segments.size(0), 1, mel_segments.size(2)).bool().to(mel_segments.device))\n        outs = 0\n        if self.separate_prosody_encoder:\n            prosody_feature = self.preprocess(wave_segments)\n\n            f0_input = prosody_feature  # (B, T, 20)\n            f0_input = self.melspec_linear(f0_input)\n            f0_input = self.melspec_encoder(\n                f0_input,\n                torch.ones(f0_input.shape[0], 1, f0_input.shape[2])\n                .to(f0_input.device)\n                .bool(),\n            )\n            f0_input = self.melspec_linear2(f0_input)\n\n            common_min_size = min(f0_input.size(2), x.size(2))\n            f0_input = f0_input[:, :, :common_min_size]\n\n            x = x[:, :, :common_min_size]\n\n            (\n                z_p,\n                codes_p,\n                latents_p,\n                commitment_loss_p,\n                codebook_loss_p,\n            ) = self.prosody_quantizer(f0_input, 1)\n            outs += z_p.detach()\n        else:\n            (\n                z_p,\n                codes_p,\n                latents_p,\n                commitment_loss_p,\n                codebook_loss_p,\n            ) = self.prosody_quantizer(x, 1)\n            outs += z_p.detach()\n\n        (\n            z_c,\n            codes_c,\n            latents_c,\n            commitment_loss_c,\n            codebook_loss_c,\n        ) = self.content_quantizer(x, n_c)\n        outs += z_c.detach()\n\n        timbre_residual_feature = x - z_p.detach() - z_c.detach()\n\n        (\n            z_t,\n            codes_t,\n            latents_t,\n            commitment_loss_t,\n            codebook_loss_t,\n        ) = self.timbre_quantizer(timbre_residual_feature, n_t)\n        outs += z_t  # we should not detach timbre\n\n        residual_feature = timbre_residual_feature - z_t\n\n        (\n            z_r,\n            codes_r,\n            latents_r,\n            commitment_loss_r,\n            codebook_loss_r,\n        ) = self.residual_quantizer(residual_feature, 3)\n\n        bsz = z_r.shape[0]\n        res_mask = np.random.choice(\n            [0, 1],\n            size=bsz,\n            p=[\n                self.prob_random_mask_residual,\n                1 - self.prob_random_mask_residual,\n            ],\n        )\n        res_mask = torch.from_numpy(res_mask).unsqueeze(1).unsqueeze(1)  # (B, 1, 1)\n        res_mask = res_mask.to(device=z_r.device, dtype=z_r.dtype)\n        noise_must_on = noise_added_flags * recon_noisy_flags\n        noise_must_off = noise_added_flags * (~recon_noisy_flags)\n        res_mask[noise_must_on] = 1\n        res_mask[noise_must_off] = 0\n\n        outs += z_r * res_mask\n\n        quantized = [z_p, z_c, z_t, z_r]\n        commitment_losses = (\n            commitment_loss_p\n            + commitment_loss_c\n            + commitment_loss_t\n            + commitment_loss_r\n        )\n        codebook_losses = (\n            codebook_loss_p + codebook_loss_c + codebook_loss_t + codebook_loss_r\n        )\n\n        return outs, quantized, commitment_losses, codebook_losses\n\n    def forward_v2(\n        self,\n        x,\n        wave_segments,\n        n_c=1,\n        n_t=2,\n        full_waves=None,\n        wave_lens=None,\n        return_codes=False,\n    ):\n        # timbre = self.timbre_encoder(x, sequence_mask(mel_lens, mels.size(-1)).unsqueeze(1))\n        if full_waves is None:\n            mel = self.preprocess(wave_segments, n_bins=80)\n            timbre = self.timbre_encoder(\n                mel, torch.ones(mel.size(0), 1, mel.size(2)).bool().to(mel.device)\n            )\n        else:\n            mel = self.preprocess(full_waves, n_bins=80)\n            timbre = self.timbre_encoder(\n                mel,\n                sequence_mask(wave_lens // self.hop_length, mel.size(-1)).unsqueeze(1),\n            )\n        outs = 0\n        if self.separate_prosody_encoder:\n            prosody_feature = self.preprocess(wave_segments)\n\n            f0_input = prosody_feature  # (B, T, 20)\n            f0_input = self.melspec_linear(f0_input)\n            f0_input = self.melspec_encoder(\n                f0_input,\n                torch.ones(f0_input.shape[0], 1, f0_input.shape[2])\n                .to(f0_input.device)\n                .bool(),\n            )\n            f0_input = self.melspec_linear2(f0_input)\n\n            common_min_size = min(f0_input.size(2), x.size(2))\n            f0_input = f0_input[:, :, :common_min_size]\n\n            x = x[:, :, :common_min_size]\n\n            (\n                z_p,\n                codes_p,\n                latents_p,\n                commitment_loss_p,\n                codebook_loss_p,\n            ) = self.prosody_quantizer(f0_input, 1)\n            outs += z_p.detach()\n        else:\n            (\n                z_p,\n                codes_p,\n                latents_p,\n                commitment_loss_p,\n                codebook_loss_p,\n            ) = self.prosody_quantizer(x, 1)\n            outs += z_p.detach()\n\n        (\n            z_c,\n            codes_c,\n            latents_c,\n            commitment_loss_c,\n            codebook_loss_c,\n        ) = self.content_quantizer(x, n_c)\n        outs += z_c.detach()\n\n        residual_feature = x - z_p.detach() - z_c.detach()\n\n        (\n            z_r,\n            codes_r,\n            latents_r,\n            commitment_loss_r,\n            codebook_loss_r,\n        ) = self.residual_quantizer(residual_feature, 3)\n\n        bsz = z_r.shape[0]\n        res_mask = np.random.choice(\n            [0, 1],\n            size=bsz,\n            p=[\n                self.prob_random_mask_residual,\n                1 - self.prob_random_mask_residual,\n            ],\n        )\n        res_mask = torch.from_numpy(res_mask).unsqueeze(1).unsqueeze(1)  # (B, 1, 1)\n        res_mask = res_mask.to(device=z_r.device, dtype=z_r.dtype)\n\n        if not self.training:\n            res_mask = torch.ones_like(res_mask)\n        outs += z_r * res_mask\n\n        quantized = [z_p, z_c, z_r]\n        codes = [codes_p, codes_c, codes_r]\n        commitment_losses = commitment_loss_p + commitment_loss_c + commitment_loss_r\n        codebook_losses = codebook_loss_p + codebook_loss_c + codebook_loss_r\n\n        style = self.timbre_linear(timbre).unsqueeze(2)  # (B, 2d, 1)\n        gamma, beta = style.chunk(2, 1)  # (B, d, 1)\n        outs = outs.transpose(1, 2)\n        outs = self.timbre_norm(outs)\n        outs = outs.transpose(1, 2)\n        outs = outs * gamma + beta\n\n        if return_codes:\n            return outs, quantized, commitment_losses, codebook_losses, timbre, codes\n        else:\n            return outs, quantized, commitment_losses, codebook_losses, timbre\n\n    def voice_conversion(self, z, ref_wave):\n        ref_mel = self.preprocess(ref_wave, n_bins=80)\n        ref_timbre = self.timbre_encoder(\n            ref_mel,\n            sequence_mask(\n                torch.LongTensor([ref_wave.size(-1)]).to(z.device) // self.hop_length,\n                ref_mel.size(-1),\n            ).unsqueeze(1),\n        )\n        style = self.timbre_linear(ref_timbre).unsqueeze(2)  # (B, 2d, 1)\n        gamma, beta = style.chunk(2, 1)  # (B, d, 1)\n        outs = z.transpose(1, 2)\n        outs = self.timbre_norm(outs)\n        outs = outs.transpose(1, 2)\n        outs = outs * gamma + beta\n\n        return outs\n\n\nclass FApredictors(nn.Module):\n    def __init__(\n        self,\n        in_dim=1024,\n        use_gr_content_f0=False,\n        use_gr_prosody_phone=False,\n        use_gr_residual_f0=False,\n        use_gr_residual_phone=False,\n        use_gr_timbre_content=True,\n        use_gr_timbre_prosody=True,\n        use_gr_x_timbre=False,\n        norm_f0=True,\n        timbre_norm=False,\n        use_gr_content_global_f0=False,\n    ):\n        super(FApredictors, self).__init__()\n        self.f0_predictor = CNNLSTM(in_dim, 1, 2)\n        self.phone_predictor = CNNLSTM(in_dim, 1024, 1)\n        if timbre_norm:\n            self.timbre_predictor = nn.Linear(in_dim, 20000)\n        else:\n            self.timbre_predictor = CNNLSTM(in_dim, 20000, 1, global_pred=True)\n\n        self.use_gr_content_f0 = use_gr_content_f0\n        self.use_gr_prosody_phone = use_gr_prosody_phone\n        self.use_gr_residual_f0 = use_gr_residual_f0\n        self.use_gr_residual_phone = use_gr_residual_phone\n        self.use_gr_timbre_content = use_gr_timbre_content\n        self.use_gr_timbre_prosody = use_gr_timbre_prosody\n        self.use_gr_x_timbre = use_gr_x_timbre\n\n        self.rev_f0_predictor = nn.Sequential(\n            GradientReversal(alpha=1.0), CNNLSTM(in_dim, 1, 2)\n        )\n        self.rev_content_predictor = nn.Sequential(\n            GradientReversal(alpha=1.0), CNNLSTM(in_dim, 1024, 1)\n        )\n        self.rev_timbre_predictor = nn.Sequential(\n            GradientReversal(alpha=1.0), CNNLSTM(in_dim, 20000, 1, global_pred=True)\n        )\n\n        self.norm_f0 = norm_f0\n        self.timbre_norm = timbre_norm\n        if timbre_norm:\n            self.forward = self.forward_v2\n            self.global_f0_predictor = nn.Linear(in_dim, 1)\n\n        self.use_gr_content_global_f0 = use_gr_content_global_f0\n        if use_gr_content_global_f0:\n            self.rev_global_f0_predictor = nn.Sequential(\n                GradientReversal(alpha=1.0), CNNLSTM(in_dim, 1, 1, global_pred=True)\n            )\n\n    def forward(self, quantized):\n        prosody_latent = quantized[0]\n        content_latent = quantized[1]\n        timbre_latent = quantized[2]\n        residual_latent = quantized[3]\n        content_pred = self.phone_predictor(content_latent)[0]\n\n        if self.norm_f0:\n            spk_pred = self.timbre_predictor(timbre_latent)[0]\n            f0_pred, uv_pred = self.f0_predictor(prosody_latent)\n        else:\n            spk_pred = self.timbre_predictor(timbre_latent + prosody_latent)[0]\n            f0_pred, uv_pred = self.f0_predictor(prosody_latent + timbre_latent)\n\n        prosody_rev_latent = torch.zeros_like(quantized[0])\n        if self.use_gr_content_f0:\n            prosody_rev_latent += quantized[1]\n        if self.use_gr_timbre_prosody:\n            prosody_rev_latent += quantized[2]\n        if self.use_gr_residual_f0:\n            prosody_rev_latent += quantized[3]\n        rev_f0_pred, rev_uv_pred = self.rev_f0_predictor(prosody_rev_latent)\n\n        content_rev_latent = torch.zeros_like(quantized[1])\n        if self.use_gr_prosody_phone:\n            content_rev_latent += quantized[0]\n        if self.use_gr_timbre_content:\n            content_rev_latent += quantized[2]\n        if self.use_gr_residual_phone:\n            content_rev_latent += quantized[3]\n        rev_content_pred = self.rev_content_predictor(content_rev_latent)[0]\n\n        if self.norm_f0:\n            timbre_rev_latent = quantized[0] + quantized[1] + quantized[3]\n        else:\n            timbre_rev_latent = quantized[1] + quantized[3]\n        if self.use_gr_x_timbre:\n            x_spk_pred = self.rev_timbre_predictor(timbre_rev_latent)[0]\n        else:\n            x_spk_pred = None\n\n        preds = {\n            \"f0\": f0_pred,\n            \"uv\": uv_pred,\n            \"content\": content_pred,\n            \"timbre\": spk_pred,\n        }\n\n        rev_preds = {\n            \"rev_f0\": rev_f0_pred,\n            \"rev_uv\": rev_uv_pred,\n            \"rev_content\": rev_content_pred,\n            \"x_timbre\": x_spk_pred,\n        }\n        return preds, rev_preds\n\n    def forward_v2(self, quantized, timbre):\n        prosody_latent = quantized[0]\n        content_latent = quantized[1]\n        residual_latent = quantized[2]\n        content_pred = self.phone_predictor(content_latent)[0]\n\n        spk_pred = self.timbre_predictor(timbre)\n        f0_pred, uv_pred = self.f0_predictor(prosody_latent)\n\n        prosody_rev_latent = torch.zeros_like(prosody_latent)\n        if self.use_gr_content_f0:\n            prosody_rev_latent += content_latent\n        if self.use_gr_residual_f0:\n            prosody_rev_latent += residual_latent\n        rev_f0_pred, rev_uv_pred = self.rev_f0_predictor(prosody_rev_latent)\n\n        content_rev_latent = torch.zeros_like(content_latent)\n        if self.use_gr_prosody_phone:\n            content_rev_latent += prosody_latent\n        if self.use_gr_residual_phone:\n            content_rev_latent += residual_latent\n        rev_content_pred = self.rev_content_predictor(content_rev_latent)[0]\n\n        timbre_rev_latent = prosody_latent + content_latent + residual_latent\n        if self.use_gr_x_timbre:\n            x_spk_pred = self.rev_timbre_predictor(timbre_rev_latent)[0]\n        else:\n            x_spk_pred = None\n\n        preds = {\n            \"f0\": f0_pred,\n            \"uv\": uv_pred,\n            \"content\": content_pred,\n            \"timbre\": spk_pred,\n        }\n\n        rev_preds = {\n            \"rev_f0\": rev_f0_pred,\n            \"rev_uv\": rev_uv_pred,\n            \"rev_content\": rev_content_pred,\n            \"x_timbre\": x_spk_pred,\n        }\n        return preds, rev_preds\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/style_encoder.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# This code is modified from https://github.com/sh-lee-prml/HierSpeechpp/blob/main/ttv_v1/styleencoder.py\n\nfrom . import attentions\nfrom torch import nn\nimport torch\nfrom torch.nn import functional as F\n\n\nclass Mish(nn.Module):\n    def __init__(self):\n        super(Mish, self).__init__()\n\n    def forward(self, x):\n        return x * torch.tanh(F.softplus(x))\n\n\nclass Conv1dGLU(nn.Module):\n    \"\"\"\n    Conv1d + GLU(Gated Linear Unit) with residual connection.\n    For GLU refer to https://arxiv.org/abs/1612.08083 paper.\n    \"\"\"\n\n    def __init__(self, in_channels, out_channels, kernel_size, dropout):\n        super(Conv1dGLU, self).__init__()\n        self.out_channels = out_channels\n        self.conv1 = nn.Conv1d(\n            in_channels, 2 * out_channels, kernel_size=kernel_size, padding=2\n        )\n        self.dropout = nn.Dropout(dropout)\n\n    def forward(self, x):\n        residual = x\n        x = self.conv1(x)\n        x1, x2 = torch.split(x, split_size_or_sections=self.out_channels, dim=1)\n        x = x1 * torch.sigmoid(x2)\n        x = residual + self.dropout(x)\n        return x\n\n\nclass StyleEncoder(torch.nn.Module):\n    def __init__(self, in_dim=513, hidden_dim=128, out_dim=256):\n\n        super().__init__()\n\n        self.in_dim = in_dim  # Linear 513 wav2vec 2.0 1024\n        self.hidden_dim = hidden_dim\n        self.out_dim = out_dim\n        self.kernel_size = 5\n        self.n_head = 2\n        self.dropout = 0.1\n\n        self.spectral = nn.Sequential(\n            nn.Conv1d(self.in_dim, self.hidden_dim, 1),\n            Mish(),\n            nn.Dropout(self.dropout),\n            nn.Conv1d(self.hidden_dim, self.hidden_dim, 1),\n            Mish(),\n            nn.Dropout(self.dropout),\n        )\n\n        self.temporal = nn.Sequential(\n            Conv1dGLU(self.hidden_dim, self.hidden_dim, self.kernel_size, self.dropout),\n            Conv1dGLU(self.hidden_dim, self.hidden_dim, self.kernel_size, self.dropout),\n        )\n\n        self.slf_attn = attentions.MultiHeadAttention(\n            self.hidden_dim,\n            self.hidden_dim,\n            self.n_head,\n            p_dropout=self.dropout,\n            proximal_bias=False,\n            proximal_init=True,\n        )\n        self.atten_drop = nn.Dropout(self.dropout)\n        self.fc = nn.Conv1d(self.hidden_dim, self.out_dim, 1)\n\n    def forward(self, x, mask=None):\n\n        # spectral\n        x = self.spectral(x) * mask\n        # temporal\n        x = self.temporal(x) * mask\n\n        # self-attention\n        attn_mask = mask.unsqueeze(2) * mask.unsqueeze(-1)\n        y = self.slf_attn(x, x, attn_mask=attn_mask)\n        x = x + self.atten_drop(y)\n\n        # fc\n        x = self.fc(x)\n\n        # temoral average pooling\n        w = self.temporal_avg_pool(x, mask=mask)\n\n        return w\n\n    def temporal_avg_pool(self, x, mask=None):\n        if mask is None:\n            out = torch.mean(x, dim=2)\n        else:\n            len_ = mask.sum(dim=2)\n            x = x.sum(dim=2)\n\n            out = torch.div(x, len_)\n        return out\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/wavenet.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# This code is modified from https://github.com/sh-lee-prml/HierSpeechpp/blob/main/ttv_v1/modules.py\n\nimport math\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom modules.dac.model.encodec import SConv1d\n\nfrom . import commons\n\nLRELU_SLOPE = 0.1\n\n\nclass LayerNorm(nn.Module):\n    def __init__(self, channels, eps=1e-5):\n        super().__init__()\n        self.channels = channels\n        self.eps = eps\n\n        self.gamma = nn.Parameter(torch.ones(channels))\n        self.beta = nn.Parameter(torch.zeros(channels))\n\n    def forward(self, x):\n        x = x.transpose(1, -1)\n        x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps)\n        return x.transpose(1, -1)\n\n\nclass ConvReluNorm(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        hidden_channels,\n        out_channels,\n        kernel_size,\n        n_layers,\n        p_dropout,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.hidden_channels = hidden_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n        assert n_layers > 1, \"Number of layers should be larger than 0.\"\n\n        self.conv_layers = nn.ModuleList()\n        self.norm_layers = nn.ModuleList()\n        self.conv_layers.append(\n            nn.Conv1d(\n                in_channels, hidden_channels, kernel_size, padding=kernel_size // 2\n            )\n        )\n        self.norm_layers.append(LayerNorm(hidden_channels))\n        self.relu_drop = nn.Sequential(nn.ReLU(), nn.Dropout(p_dropout))\n        for _ in range(n_layers - 1):\n            self.conv_layers.append(\n                nn.Conv1d(\n                    hidden_channels,\n                    hidden_channels,\n                    kernel_size,\n                    padding=kernel_size // 2,\n                )\n            )\n            self.norm_layers.append(LayerNorm(hidden_channels))\n        self.proj = nn.Conv1d(hidden_channels, out_channels, 1)\n        self.proj.weight.data.zero_()\n        self.proj.bias.data.zero_()\n\n    def forward(self, x, x_mask):\n        x_org = x\n        for i in range(self.n_layers):\n            x = self.conv_layers[i](x * x_mask)\n            x = self.norm_layers[i](x)\n            x = self.relu_drop(x)\n        x = x_org + self.proj(x)\n        return x * x_mask\n\n\nclass DDSConv(nn.Module):\n    \"\"\"\n    Dialted and Depth-Separable Convolution\n    \"\"\"\n\n    def __init__(self, channels, kernel_size, n_layers, p_dropout=0.0):\n        super().__init__()\n        self.channels = channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n\n        self.drop = nn.Dropout(p_dropout)\n        self.convs_sep = nn.ModuleList()\n        self.convs_1x1 = nn.ModuleList()\n        self.norms_1 = nn.ModuleList()\n        self.norms_2 = nn.ModuleList()\n        for i in range(n_layers):\n            dilation = kernel_size**i\n            padding = (kernel_size * dilation - dilation) // 2\n            self.convs_sep.append(\n                nn.Conv1d(\n                    channels,\n                    channels,\n                    kernel_size,\n                    groups=channels,\n                    dilation=dilation,\n                    padding=padding,\n                )\n            )\n            self.convs_1x1.append(nn.Conv1d(channels, channels, 1))\n            self.norms_1.append(LayerNorm(channels))\n            self.norms_2.append(LayerNorm(channels))\n\n    def forward(self, x, x_mask, g=None):\n        if g is not None:\n            x = x + g\n        for i in range(self.n_layers):\n            y = self.convs_sep[i](x * x_mask)\n            y = self.norms_1[i](y)\n            y = F.gelu(y)\n            y = self.convs_1x1[i](y)\n            y = self.norms_2[i](y)\n            y = F.gelu(y)\n            y = self.drop(y)\n            x = x + y\n        return x * x_mask\n\n\nclass WN(torch.nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        kernel_size,\n        dilation_rate,\n        n_layers,\n        gin_channels=0,\n        p_dropout=0,\n        causal=False,\n    ):\n        super(WN, self).__init__()\n        conv1d_type = SConv1d\n        assert kernel_size % 2 == 1\n        self.hidden_channels = hidden_channels\n        self.kernel_size = (kernel_size,)\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.gin_channels = gin_channels\n        self.p_dropout = p_dropout\n\n        self.in_layers = torch.nn.ModuleList()\n        self.res_skip_layers = torch.nn.ModuleList()\n        self.drop = nn.Dropout(p_dropout)\n\n        if gin_channels != 0:\n            self.cond_layer = conv1d_type(\n                gin_channels, 2 * hidden_channels * n_layers, 1, norm=\"weight_norm\"\n            )\n\n        for i in range(n_layers):\n            dilation = dilation_rate**i\n            padding = int((kernel_size * dilation - dilation) / 2)\n            in_layer = conv1d_type(\n                hidden_channels,\n                2 * hidden_channels,\n                kernel_size,\n                dilation=dilation,\n                padding=padding,\n                norm=\"weight_norm\",\n                causal=causal,\n            )\n            self.in_layers.append(in_layer)\n\n            # last one is not necessary\n            if i < n_layers - 1:\n                res_skip_channels = 2 * hidden_channels\n            else:\n                res_skip_channels = hidden_channels\n\n            res_skip_layer = conv1d_type(\n                hidden_channels, res_skip_channels, 1, norm=\"weight_norm\", causal=causal\n            )\n            self.res_skip_layers.append(res_skip_layer)\n\n    def forward(self, x, x_mask, g=None, **kwargs):\n        output = torch.zeros_like(x)\n        n_channels_tensor = torch.IntTensor([self.hidden_channels])\n\n        if g is not None:\n            g = self.cond_layer(g)\n\n        for i in range(self.n_layers):\n            x_in = self.in_layers[i](x)\n            if g is not None:\n                cond_offset = i * 2 * self.hidden_channels\n                g_l = g[:, cond_offset : cond_offset + 2 * self.hidden_channels, :]\n            else:\n                g_l = torch.zeros_like(x_in)\n\n            acts = commons.fused_add_tanh_sigmoid_multiply(x_in, g_l, n_channels_tensor)\n            acts = self.drop(acts)\n\n            res_skip_acts = self.res_skip_layers[i](acts)\n            if i < self.n_layers - 1:\n                res_acts = res_skip_acts[:, : self.hidden_channels, :]\n                x = (x + res_acts) * x_mask\n                output = output + res_skip_acts[:, self.hidden_channels :, :]\n            else:\n                output = output + res_skip_acts\n        return output * x_mask\n\n    def remove_weight_norm(self):\n        if self.gin_channels != 0:\n            torch.nn.utils.remove_weight_norm(self.cond_layer)\n        for l in self.in_layers:\n            torch.nn.utils.remove_weight_norm(l)\n        for l in self.res_skip_layers:\n            torch.nn.utils.remove_weight_norm(l)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/optimizer.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport os, sys\nimport os.path as osp\nimport numpy as np\nimport torch\nfrom torch import nn\nfrom torch.optim import Optimizer\nfrom functools import reduce\nfrom torch.optim import AdamW\n\n\nclass MultiOptimizer:\n    def __init__(self, optimizers={}, schedulers={}):\n        self.optimizers = optimizers\n        self.schedulers = schedulers\n        self.keys = list(optimizers.keys())\n        self.param_groups = reduce(\n            lambda x, y: x + y, [v.param_groups for v in self.optimizers.values()]\n        )\n\n    def state_dict(self):\n        state_dicts = [(key, self.optimizers[key].state_dict()) for key in self.keys]\n        return state_dicts\n\n    def scheduler_state_dict(self):\n        state_dicts = [(key, self.schedulers[key].state_dict()) for key in self.keys]\n        return state_dicts\n\n    def load_state_dict(self, state_dict):\n        for key, val in state_dict:\n            try:\n                self.optimizers[key].load_state_dict(val)\n            except Exception:\n                print(\"Unloaded %s\" % key)\n\n    def load_scheduler_state_dict(self, state_dict):\n        for key, val in state_dict:\n            try:\n                self.schedulers[key].load_state_dict(val)\n            except Exception:\n                print(\"Unloaded %s\" % key)\n\n    def step(self, key=None, scaler=None):\n        keys = [key] if key is not None else self.keys\n        _ = [self._step(key, scaler) for key in keys]\n\n    def _step(self, key, scaler=None):\n        if scaler is not None:\n            scaler.step(self.optimizers[key])\n            scaler.update()\n        else:\n            self.optimizers[key].step()\n\n    def zero_grad(self, key=None):\n        if key is not None:\n            self.optimizers[key].zero_grad()\n        else:\n            _ = [self.optimizers[key].zero_grad() for key in self.keys]\n\n    def scheduler(self, *args, key=None):\n        if key is not None:\n            self.schedulers[key].step(*args)\n        else:\n            _ = [self.schedulers[key].step_batch(*args) for key in self.keys]\n\n\ndef define_scheduler(optimizer, params):\n    scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=params[\"gamma\"])\n\n    return scheduler\n\n\ndef build_optimizer(model_dict, scheduler_params_dict, lr, type=\"AdamW\"):\n    optim = {}\n    for key, model in model_dict.items():\n        model_parameters = model.parameters()\n        parameters_names = []\n        parameters_names.append(\n            [name_param_pair[0] for name_param_pair in model.named_parameters()]\n        )\n        if type == \"AdamW\":\n            optim[key] = AdamW(\n                model_parameters,\n                lr=lr,\n                betas=(0.9, 0.98),\n                eps=1e-9,\n                weight_decay=0.1,\n            )\n        else:\n            raise ValueError(\"Unknown optimizer type: %s\" % type)\n\n    schedulers = dict(\n        [\n            (key, torch.optim.lr_scheduler.ExponentialLR(opt, gamma=0.999996))\n            for key, opt in optim.items()\n        ]\n    )\n\n    multi_optim = MultiOptimizer(optim, schedulers)\n    return multi_optim\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/kmeans/repcodec_model.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom concurrent.futures import ALL_COMPLETED\nimport numpy as np\nimport torch\nimport torch.nn as nn\n\nfrom torch.nn import functional as F\nfrom einops import rearrange, repeat\n\nfrom indextts.utils.maskgct.models.codec.amphion_codec.quantize import ResidualVQ\nfrom indextts.utils.maskgct.models.codec.kmeans.vocos import VocosBackbone\n\n\ndef init_weights(m):\n    if isinstance(m, nn.Conv1d):\n        nn.init.trunc_normal_(m.weight, std=0.02)\n        nn.init.constant_(m.bias, 0)\n    if isinstance(m, nn.Linear):\n        nn.init.trunc_normal_(m.weight, std=0.02)\n        nn.init.constant_(m.bias, 0)\n\n\ndef compute_codebook_perplexity(indices, codebook_size):\n    indices = indices.flatten()\n    prob = torch.bincount(indices, minlength=codebook_size).float() / indices.size(0)\n    perp = torch.exp(-torch.sum(prob * torch.log(prob + 1e-10)))\n    return perp\n\n\nclass RepCodec(nn.Module):\n    def __init__(\n        self,\n        codebook_size=8192,\n        hidden_size=1024,\n        codebook_dim=8,\n        vocos_dim=384,\n        vocos_intermediate_dim=2048,\n        vocos_num_layers=12,\n        num_quantizers=1,\n        downsample_scale=1,\n        cfg=None,\n    ):\n        super().__init__()\n        codebook_size = (\n            cfg.codebook_size\n            if cfg is not None and hasattr(cfg, \"codebook_size\")\n            else codebook_size\n        )\n        codebook_dim = (\n            cfg.codebook_dim\n            if cfg is not None and hasattr(cfg, \"codebook_dim\")\n            else codebook_dim\n        )\n        hidden_size = (\n            cfg.hidden_size\n            if cfg is not None and hasattr(cfg, \"hidden_size\")\n            else hidden_size\n        )\n        vocos_dim = (\n            cfg.vocos_dim\n            if cfg is not None and hasattr(cfg, \"vocos_dim\")\n            else vocos_dim\n        )\n        vocos_intermediate_dim = (\n            cfg.vocos_intermediate_dim\n            if cfg is not None and hasattr(cfg, \"vocos_dim\")\n            else vocos_intermediate_dim\n        )\n        vocos_num_layers = (\n            cfg.vocos_num_layers\n            if cfg is not None and hasattr(cfg, \"vocos_dim\")\n            else vocos_num_layers\n        )\n        num_quantizers = (\n            cfg.num_quantizers\n            if cfg is not None and hasattr(cfg, \"num_quantizers\")\n            else num_quantizers\n        )\n        downsample_scale = (\n            cfg.downsample_scale\n            if cfg is not None and hasattr(cfg, \"downsample_scale\")\n            else downsample_scale\n        )\n\n        self.codebook_size = codebook_size\n        self.codebook_dim = codebook_dim\n        self.hidden_size = hidden_size\n        self.vocos_dim = vocos_dim\n        self.vocos_intermediate_dim = vocos_intermediate_dim\n        self.vocos_num_layers = vocos_num_layers\n        self.num_quantizers = num_quantizers\n        self.downsample_scale = downsample_scale\n\n        if self.downsample_scale != None and self.downsample_scale > 1:\n            self.down = nn.Conv1d(\n                self.hidden_size, self.hidden_size, kernel_size=3, stride=2, padding=1\n            )\n            self.up = nn.Conv1d(\n                self.hidden_size, self.hidden_size, kernel_size=3, stride=1, padding=1\n            )\n\n        self.encoder = nn.Sequential(\n            VocosBackbone(\n                input_channels=self.hidden_size,\n                dim=self.vocos_dim,\n                intermediate_dim=self.vocos_intermediate_dim,\n                num_layers=self.vocos_num_layers,\n                adanorm_num_embeddings=None,\n            ),\n            nn.Linear(self.vocos_dim, self.hidden_size),\n        )\n        self.decoder = nn.Sequential(\n            VocosBackbone(\n                input_channels=self.hidden_size,\n                dim=self.vocos_dim,\n                intermediate_dim=self.vocos_intermediate_dim,\n                num_layers=self.vocos_num_layers,\n                adanorm_num_embeddings=None,\n            ),\n            nn.Linear(self.vocos_dim, self.hidden_size),\n        )\n\n        self.quantizer = ResidualVQ(\n            input_dim=hidden_size,\n            num_quantizers=num_quantizers,\n            codebook_size=codebook_size,\n            codebook_dim=codebook_dim,\n            quantizer_type=\"fvq\",\n            quantizer_dropout=0.0,\n            commitment=0.15,\n            codebook_loss_weight=1.0,\n            use_l2_normlize=True,\n        )\n\n        self.reset_parameters()\n\n    def forward(self, x):\n\n        # downsample\n        if self.downsample_scale != None and self.downsample_scale > 1:\n            x = x.transpose(1, 2)\n            x = self.down(x)\n            x = F.gelu(x)\n            x = x.transpose(1, 2)\n\n        # encoder\n        x = self.encoder(x.transpose(1, 2)).transpose(1, 2)\n\n        # vq\n        (\n            quantized_out,\n            all_indices,\n            all_commit_losses,\n            all_codebook_losses,\n            _,\n        ) = self.quantizer(x)\n\n        # decoder\n        x = self.decoder(quantized_out)\n\n        # up\n        if self.downsample_scale != None and self.downsample_scale > 1:\n            x = x.transpose(1, 2)\n            x = F.interpolate(x, scale_factor=2, mode=\"nearest\")\n            x_rec = self.up(x).transpose(1, 2)\n\n        codebook_loss = (all_codebook_losses + all_commit_losses).mean()\n        all_indices = all_indices\n\n        return x_rec, codebook_loss, all_indices\n\n    def quantize(self, x):\n\n        if self.downsample_scale != None and self.downsample_scale > 1:\n            x = x.transpose(1, 2)\n            x = self.down(x)\n            x = F.gelu(x)\n            x = x.transpose(1, 2)\n\n        x = self.encoder(x.transpose(1, 2)).transpose(1, 2)\n\n        (\n            quantized_out,\n            all_indices,\n            all_commit_losses,\n            all_codebook_losses,\n            _,\n        ) = self.quantizer(x)\n\n        if all_indices.shape[0] == 1:\n            return all_indices.squeeze(0), quantized_out.transpose(1, 2)\n        return all_indices, quantized_out.transpose(1, 2)\n\n    def reset_parameters(self):\n        self.apply(init_weights)\n\n\nif __name__ == \"__main__\":\n    repcodec = RepCodec(vocos_dim=1024, downsample_scale=2)\n    print(repcodec)\n    print(sum(p.numel() for p in repcodec.parameters()) / 1e6)\n    x = torch.randn(5, 10, 1024)\n    x_rec, codebook_loss, all_indices = repcodec(x)\n    print(x_rec.shape, codebook_loss, all_indices.shape)\n    vq_id, emb = repcodec.quantize(x)\n    print(vq_id.shape, emb.shape)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/kmeans/vocos.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Optional, Tuple\n\nimport numpy as np\nimport scipy\nimport torch\nfrom torch import nn, view_as_real, view_as_complex\nfrom torch import nn\nfrom torch.nn.utils import weight_norm, remove_weight_norm\nfrom torchaudio.functional.functional import _hz_to_mel, _mel_to_hz\n\n\ndef safe_log(x: torch.Tensor, clip_val: float = 1e-7) -> torch.Tensor:\n    \"\"\"\n    Computes the element-wise logarithm of the input tensor with clipping to avoid near-zero values.\n\n    Args:\n        x (Tensor): Input tensor.\n        clip_val (float, optional): Minimum value to clip the input tensor. Defaults to 1e-7.\n\n    Returns:\n        Tensor: Element-wise logarithm of the input tensor with clipping applied.\n    \"\"\"\n    return torch.log(torch.clip(x, min=clip_val))\n\n\ndef symlog(x: torch.Tensor) -> torch.Tensor:\n    return torch.sign(x) * torch.log1p(x.abs())\n\n\ndef symexp(x: torch.Tensor) -> torch.Tensor:\n    return torch.sign(x) * (torch.exp(x.abs()) - 1)\n\n\nclass STFT(nn.Module):\n    def __init__(\n        self,\n        n_fft: int,\n        hop_length: int,\n        win_length: int,\n        center=True,\n    ):\n        super().__init__()\n        self.center = center\n        self.n_fft = n_fft\n        self.hop_length = hop_length\n        self.win_length = win_length\n        window = torch.hann_window(win_length)\n        self.register_buffer(\"window\", window)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        # x: (B, T * hop_length)\n\n        if not self.center:\n            pad = self.win_length - self.hop_length\n            x = torch.nn.functional.pad(x, (pad // 2, pad // 2), mode=\"reflect\")\n\n        stft_spec = torch.stft(\n            x,\n            self.n_fft,\n            hop_length=self.hop_length,\n            win_length=self.win_length,\n            window=self.window,\n            center=self.center,\n            return_complex=False,\n        )  # (B, n_fft // 2 + 1, T, 2)\n\n        rea = stft_spec[:, :, :, 0]  # (B, n_fft // 2 + 1, T, 2)\n        imag = stft_spec[:, :, :, 1]  # (B, n_fft // 2 + 1, T, 2)\n\n        log_mag = torch.log(\n            torch.abs(torch.sqrt(torch.pow(rea, 2) + torch.pow(imag, 2))) + 1e-5\n        )  # (B, n_fft // 2 + 1, T)\n        phase = torch.atan2(imag, rea)  # (B, n_fft // 2 + 1, T)\n\n        return log_mag, phase\n\n\nclass ISTFT(nn.Module):\n    \"\"\"\n    Custom implementation of ISTFT since torch.istft doesn't allow custom padding (other than `center=True`) with\n    windowing. This is because the NOLA (Nonzero Overlap Add) check fails at the edges.\n    See issue: https://github.com/pytorch/pytorch/issues/62323\n    Specifically, in the context of neural vocoding we are interested in \"same\" padding analogous to CNNs.\n    The NOLA constraint is met as we trim padded samples anyway.\n\n    Args:\n        n_fft (int): Size of Fourier transform.\n        hop_length (int): The distance between neighboring sliding window frames.\n        win_length (int): The size of window frame and STFT filter.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(\n        self, n_fft: int, hop_length: int, win_length: int, padding: str = \"same\"\n    ):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.n_fft = n_fft\n        self.hop_length = hop_length\n        self.win_length = win_length\n        window = torch.hann_window(win_length)\n        self.register_buffer(\"window\", window)\n\n    def forward(self, spec: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Compute the Inverse Short Time Fourier Transform (ISTFT) of a complex spectrogram.\n\n        Args:\n            spec (Tensor): Input complex spectrogram of shape (B, N, T), where B is the batch size,\n                            N is the number of frequency bins, and T is the number of time frames.\n\n        Returns:\n            Tensor: Reconstructed time-domain signal of shape (B, L), where L is the length of the output signal.\n        \"\"\"\n        if self.padding == \"center\":\n            # Fallback to pytorch native implementation\n            return torch.istft(\n                spec,\n                self.n_fft,\n                self.hop_length,\n                self.win_length,\n                self.window,\n                center=True,\n            )\n        elif self.padding == \"same\":\n            pad = (self.win_length - self.hop_length) // 2\n        else:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n\n        assert spec.dim() == 3, \"Expected a 3D tensor as input\"\n        B, N, T = spec.shape\n\n        # Inverse FFT\n        ifft = torch.fft.irfft(spec, self.n_fft, dim=1, norm=\"backward\")\n        ifft = ifft * self.window[None, :, None]\n\n        # Overlap and Add\n        output_size = (T - 1) * self.hop_length + self.win_length\n        y = torch.nn.functional.fold(\n            ifft,\n            output_size=(1, output_size),\n            kernel_size=(1, self.win_length),\n            stride=(1, self.hop_length),\n        )[:, 0, 0, pad:-pad]\n\n        # Window envelope\n        window_sq = self.window.square().expand(1, T, -1).transpose(1, 2)\n        window_envelope = torch.nn.functional.fold(\n            window_sq,\n            output_size=(1, output_size),\n            kernel_size=(1, self.win_length),\n            stride=(1, self.hop_length),\n        ).squeeze()[pad:-pad]\n\n        # Normalize\n        assert (window_envelope > 1e-11).all()\n        y = y / window_envelope\n\n        return y\n\n\nclass MDCT(nn.Module):\n    \"\"\"\n    Modified Discrete Cosine Transform (MDCT) module.\n\n    Args:\n        frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, frame_len: int, padding: str = \"same\"):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.frame_len = frame_len\n        N = frame_len // 2\n        n0 = (N + 1) / 2\n        window = torch.from_numpy(scipy.signal.cosine(frame_len)).float()\n        self.register_buffer(\"window\", window)\n\n        pre_twiddle = torch.exp(-1j * torch.pi * torch.arange(frame_len) / frame_len)\n        post_twiddle = torch.exp(-1j * torch.pi * n0 * (torch.arange(N) + 0.5) / N)\n        # view_as_real: NCCL Backend does not support ComplexFloat data type\n        # https://github.com/pytorch/pytorch/issues/71613\n        self.register_buffer(\"pre_twiddle\", view_as_real(pre_twiddle))\n        self.register_buffer(\"post_twiddle\", view_as_real(post_twiddle))\n\n    def forward(self, audio: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Apply the Modified Discrete Cosine Transform (MDCT) to the input audio.\n\n        Args:\n            audio (Tensor): Input audio waveform of shape (B, T), where B is the batch size\n                and T is the length of the audio.\n\n        Returns:\n            Tensor: MDCT coefficients of shape (B, L, N), where L is the number of output frames\n                and N is the number of frequency bins.\n        \"\"\"\n        if self.padding == \"center\":\n            audio = torch.nn.functional.pad(\n                audio, (self.frame_len // 2, self.frame_len // 2)\n            )\n        elif self.padding == \"same\":\n            # hop_length is 1/2 frame_len\n            audio = torch.nn.functional.pad(\n                audio, (self.frame_len // 4, self.frame_len // 4)\n            )\n        else:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n\n        x = audio.unfold(-1, self.frame_len, self.frame_len // 2)\n        N = self.frame_len // 2\n        x = x * self.window.expand(x.shape)\n        X = torch.fft.fft(\n            x * view_as_complex(self.pre_twiddle).expand(x.shape), dim=-1\n        )[..., :N]\n        res = X * view_as_complex(self.post_twiddle).expand(X.shape) * np.sqrt(1 / N)\n        return torch.real(res) * np.sqrt(2)\n\n\nclass IMDCT(nn.Module):\n    \"\"\"\n    Inverse Modified Discrete Cosine Transform (IMDCT) module.\n\n    Args:\n        frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, frame_len: int, padding: str = \"same\"):\n        super().__init__()\n        if padding not in [\"center\", \"same\"]:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n        self.padding = padding\n        self.frame_len = frame_len\n        N = frame_len // 2\n        n0 = (N + 1) / 2\n        window = torch.from_numpy(scipy.signal.cosine(frame_len)).float()\n        self.register_buffer(\"window\", window)\n\n        pre_twiddle = torch.exp(1j * torch.pi * n0 * torch.arange(N * 2) / N)\n        post_twiddle = torch.exp(1j * torch.pi * (torch.arange(N * 2) + n0) / (N * 2))\n        self.register_buffer(\"pre_twiddle\", view_as_real(pre_twiddle))\n        self.register_buffer(\"post_twiddle\", view_as_real(post_twiddle))\n\n    def forward(self, X: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Apply the Inverse Modified Discrete Cosine Transform (IMDCT) to the input MDCT coefficients.\n\n        Args:\n            X (Tensor): Input MDCT coefficients of shape (B, L, N), where B is the batch size,\n                L is the number of frames, and N is the number of frequency bins.\n\n        Returns:\n            Tensor: Reconstructed audio waveform of shape (B, T), where T is the length of the audio.\n        \"\"\"\n        B, L, N = X.shape\n        Y = torch.zeros((B, L, N * 2), dtype=X.dtype, device=X.device)\n        Y[..., :N] = X\n        Y[..., N:] = -1 * torch.conj(torch.flip(X, dims=(-1,)))\n        y = torch.fft.ifft(\n            Y * view_as_complex(self.pre_twiddle).expand(Y.shape), dim=-1\n        )\n        y = (\n            torch.real(y * view_as_complex(self.post_twiddle).expand(y.shape))\n            * np.sqrt(N)\n            * np.sqrt(2)\n        )\n        result = y * self.window.expand(y.shape)\n        output_size = (1, (L + 1) * N)\n        audio = torch.nn.functional.fold(\n            result.transpose(1, 2),\n            output_size=output_size,\n            kernel_size=(1, self.frame_len),\n            stride=(1, self.frame_len // 2),\n        )[:, 0, 0, :]\n\n        if self.padding == \"center\":\n            pad = self.frame_len // 2\n        elif self.padding == \"same\":\n            pad = self.frame_len // 4\n        else:\n            raise ValueError(\"Padding must be 'center' or 'same'.\")\n\n        audio = audio[:, pad:-pad]\n        return audio\n\n\nclass FourierHead(nn.Module):\n    \"\"\"Base class for inverse fourier modules.\"\"\"\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        raise NotImplementedError(\"Subclasses must implement the forward method.\")\n\n\nclass ISTFTHead(FourierHead):\n    \"\"\"\n    ISTFT Head module for predicting STFT complex coefficients.\n\n    Args:\n        dim (int): Hidden dimension of the model.\n        n_fft (int): Size of Fourier transform.\n        hop_length (int): The distance between neighboring sliding window frames, which should align with\n                          the resolution of the input features.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n    \"\"\"\n\n    def __init__(self, dim: int, n_fft: int, hop_length: int, padding: str = \"same\"):\n        super().__init__()\n        out_dim = n_fft + 2\n        self.out = torch.nn.Linear(dim, out_dim)\n        self.istft = ISTFT(\n            n_fft=n_fft, hop_length=hop_length, win_length=n_fft, padding=padding\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Forward pass of the ISTFTHead module.\n\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        x = self.out(x).transpose(1, 2)\n        mag, p = x.chunk(2, dim=1)\n        mag = torch.exp(mag)\n        mag = torch.clip(\n            mag, max=1e2\n        )  # safeguard to prevent excessively large magnitudes\n        # wrapping happens here. These two lines produce real and imaginary value\n        x = torch.cos(p)\n        y = torch.sin(p)\n        # recalculating phase here does not produce anything new\n        # only costs time\n        # phase = torch.atan2(y, x)\n        # S = mag * torch.exp(phase * 1j)\n        # better directly produce the complex value\n        S = mag * (x + 1j * y)\n        audio = self.istft(S)\n        return audio\n\n\nclass IMDCTSymExpHead(FourierHead):\n    \"\"\"\n    IMDCT Head module for predicting MDCT coefficients with symmetric exponential function\n\n    Args:\n        dim (int): Hidden dimension of the model.\n        mdct_frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n        sample_rate (int, optional): The sample rate of the audio. If provided, the last layer will be initialized\n                                     based on perceptual scaling. Defaults to None.\n        clip_audio (bool, optional): Whether to clip the audio output within the range of [-1.0, 1.0]. Defaults to False.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        mdct_frame_len: int,\n        padding: str = \"same\",\n        sample_rate: Optional[int] = None,\n        clip_audio: bool = False,\n    ):\n        super().__init__()\n        out_dim = mdct_frame_len // 2\n        self.out = nn.Linear(dim, out_dim)\n        self.imdct = IMDCT(frame_len=mdct_frame_len, padding=padding)\n        self.clip_audio = clip_audio\n\n        if sample_rate is not None:\n            # optionally init the last layer following mel-scale\n            m_max = _hz_to_mel(sample_rate // 2)\n            m_pts = torch.linspace(0, m_max, out_dim)\n            f_pts = _mel_to_hz(m_pts)\n            scale = 1 - (f_pts / f_pts.max())\n\n            with torch.no_grad():\n                self.out.weight.mul_(scale.view(-1, 1))\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Forward pass of the IMDCTSymExpHead module.\n\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        x = self.out(x)\n        x = symexp(x)\n        x = torch.clip(\n            x, min=-1e2, max=1e2\n        )  # safeguard to prevent excessively large magnitudes\n        audio = self.imdct(x)\n        if self.clip_audio:\n            audio = torch.clip(x, min=-1.0, max=1.0)\n\n        return audio\n\n\nclass IMDCTCosHead(FourierHead):\n    \"\"\"\n    IMDCT Head module for predicting MDCT coefficients with parametrizing MDCT = exp(m) · cos(p)\n\n    Args:\n        dim (int): Hidden dimension of the model.\n        mdct_frame_len (int): Length of the MDCT frame.\n        padding (str, optional): Type of padding. Options are \"center\" or \"same\". Defaults to \"same\".\n        clip_audio (bool, optional): Whether to clip the audio output within the range of [-1.0, 1.0]. Defaults to False.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        mdct_frame_len: int,\n        padding: str = \"same\",\n        clip_audio: bool = False,\n    ):\n        super().__init__()\n        self.clip_audio = clip_audio\n        self.out = nn.Linear(dim, mdct_frame_len)\n        self.imdct = IMDCT(frame_len=mdct_frame_len, padding=padding)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Forward pass of the IMDCTCosHead module.\n\n        Args:\n            x (Tensor): Input tensor of shape (B, L, H), where B is the batch size,\n                        L is the sequence length, and H denotes the model dimension.\n\n        Returns:\n            Tensor: Reconstructed time-domain audio signal of shape (B, T), where T is the length of the output signal.\n        \"\"\"\n        x = self.out(x)\n        m, p = x.chunk(2, dim=2)\n        m = torch.exp(m).clip(\n            max=1e2\n        )  # safeguard to prevent excessively large magnitudes\n        audio = self.imdct(m * torch.cos(p))\n        if self.clip_audio:\n            audio = torch.clip(x, min=-1.0, max=1.0)\n        return audio\n\n\nclass ConvNeXtBlock(nn.Module):\n    \"\"\"ConvNeXt Block adapted from https://github.com/facebookresearch/ConvNeXt to 1D audio signal.\n\n    Args:\n        dim (int): Number of input channels.\n        intermediate_dim (int): Dimensionality of the intermediate layer.\n        layer_scale_init_value (float, optional): Initial value for the layer scale. None means no scaling.\n            Defaults to None.\n        adanorm_num_embeddings (int, optional): Number of embeddings for AdaLayerNorm.\n            None means non-conditional LayerNorm. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        intermediate_dim: int,\n        layer_scale_init_value: float,\n        adanorm_num_embeddings: Optional[int] = None,\n    ):\n        super().__init__()\n        self.dwconv = nn.Conv1d(\n            dim, dim, kernel_size=7, padding=3, groups=dim\n        )  # depthwise conv\n        self.adanorm = adanorm_num_embeddings is not None\n        if adanorm_num_embeddings:\n            self.norm = AdaLayerNorm(adanorm_num_embeddings, dim, eps=1e-6)\n        else:\n            self.norm = nn.LayerNorm(dim, eps=1e-6)\n        self.pwconv1 = nn.Linear(\n            dim, intermediate_dim\n        )  # pointwise/1x1 convs, implemented with linear layers\n        self.act = nn.GELU()\n        self.pwconv2 = nn.Linear(intermediate_dim, dim)\n        self.gamma = (\n            nn.Parameter(layer_scale_init_value * torch.ones(dim), requires_grad=True)\n            if layer_scale_init_value > 0\n            else None\n        )\n\n    def forward(\n        self, x: torch.Tensor, cond_embedding_id: Optional[torch.Tensor] = None\n    ) -> torch.Tensor:\n        residual = x\n        x = self.dwconv(x)\n        x = x.transpose(1, 2)  # (B, C, T) -> (B, T, C)\n        if self.adanorm:\n            assert cond_embedding_id is not None\n            x = self.norm(x, cond_embedding_id)\n        else:\n            x = self.norm(x)\n        x = self.pwconv1(x)\n        x = self.act(x)\n        x = self.pwconv2(x)\n        if self.gamma is not None:\n            x = self.gamma * x\n        x = x.transpose(1, 2)  # (B, T, C) -> (B, C, T)\n\n        x = residual + x\n        return x\n\n\nclass AdaLayerNorm(nn.Module):\n    \"\"\"\n    Adaptive Layer Normalization module with learnable embeddings per `num_embeddings` classes\n\n    Args:\n        num_embeddings (int): Number of embeddings.\n        embedding_dim (int): Dimension of the embeddings.\n    \"\"\"\n\n    def __init__(self, num_embeddings: int, embedding_dim: int, eps: float = 1e-6):\n        super().__init__()\n        self.eps = eps\n        self.dim = embedding_dim\n        self.scale = nn.Embedding(\n            num_embeddings=num_embeddings, embedding_dim=embedding_dim\n        )\n        self.shift = nn.Embedding(\n            num_embeddings=num_embeddings, embedding_dim=embedding_dim\n        )\n        torch.nn.init.ones_(self.scale.weight)\n        torch.nn.init.zeros_(self.shift.weight)\n\n    def forward(self, x: torch.Tensor, cond_embedding_id: torch.Tensor) -> torch.Tensor:\n        scale = self.scale(cond_embedding_id)\n        shift = self.shift(cond_embedding_id)\n        x = nn.functional.layer_norm(x, (self.dim,), eps=self.eps)\n        x = x * scale + shift\n        return x\n\n\nclass ResBlock1(nn.Module):\n    \"\"\"\n    ResBlock adapted from HiFi-GAN V1 (https://github.com/jik876/hifi-gan) with dilated 1D convolutions,\n    but without upsampling layers.\n\n    Args:\n        dim (int): Number of input channels.\n        kernel_size (int, optional): Size of the convolutional kernel. Defaults to 3.\n        dilation (tuple[int], optional): Dilation factors for the dilated convolutions.\n            Defaults to (1, 3, 5).\n        lrelu_slope (float, optional): Negative slope of the LeakyReLU activation function.\n            Defaults to 0.1.\n        layer_scale_init_value (float, optional): Initial value for the layer scale. None means no scaling.\n            Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        kernel_size: int = 3,\n        dilation: Tuple[int, int, int] = (1, 3, 5),\n        lrelu_slope: float = 0.1,\n        layer_scale_init_value: Optional[float] = None,\n    ):\n        super().__init__()\n        self.lrelu_slope = lrelu_slope\n        self.convs1 = nn.ModuleList(\n            [\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=dilation[0],\n                        padding=self.get_padding(kernel_size, dilation[0]),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=dilation[1],\n                        padding=self.get_padding(kernel_size, dilation[1]),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=dilation[2],\n                        padding=self.get_padding(kernel_size, dilation[2]),\n                    )\n                ),\n            ]\n        )\n\n        self.convs2 = nn.ModuleList(\n            [\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=self.get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=self.get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    nn.Conv1d(\n                        dim,\n                        dim,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=self.get_padding(kernel_size, 1),\n                    )\n                ),\n            ]\n        )\n\n        self.gamma = nn.ParameterList(\n            [\n                (\n                    nn.Parameter(\n                        layer_scale_init_value * torch.ones(dim, 1), requires_grad=True\n                    )\n                    if layer_scale_init_value is not None\n                    else None\n                ),\n                (\n                    nn.Parameter(\n                        layer_scale_init_value * torch.ones(dim, 1), requires_grad=True\n                    )\n                    if layer_scale_init_value is not None\n                    else None\n                ),\n                (\n                    nn.Parameter(\n                        layer_scale_init_value * torch.ones(dim, 1), requires_grad=True\n                    )\n                    if layer_scale_init_value is not None\n                    else None\n                ),\n            ]\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        for c1, c2, gamma in zip(self.convs1, self.convs2, self.gamma):\n            xt = torch.nn.functional.leaky_relu(x, negative_slope=self.lrelu_slope)\n            xt = c1(xt)\n            xt = torch.nn.functional.leaky_relu(xt, negative_slope=self.lrelu_slope)\n            xt = c2(xt)\n            if gamma is not None:\n                xt = gamma * xt\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n    @staticmethod\n    def get_padding(kernel_size: int, dilation: int = 1) -> int:\n        return int((kernel_size * dilation - dilation) / 2)\n\n\nclass Backbone(nn.Module):\n    \"\"\"Base class for the generator's backbone. It preserves the same temporal resolution across all layers.\"\"\"\n\n    def forward(self, x: torch.Tensor, **kwargs) -> torch.Tensor:\n        \"\"\"\n        Args:\n            x (Tensor): Input tensor of shape (B, C, L), where B is the batch size,\n                        C denotes output features, and L is the sequence length.\n\n        Returns:\n            Tensor: Output of shape (B, L, H), where B is the batch size, L is the sequence length,\n                    and H denotes the model dimension.\n        \"\"\"\n        raise NotImplementedError(\"Subclasses must implement the forward method.\")\n\n\nclass VocosBackbone(Backbone):\n    \"\"\"\n    Vocos backbone module built with ConvNeXt blocks. Supports additional conditioning with Adaptive Layer Normalization\n\n    Args:\n        input_channels (int): Number of input features channels.\n        dim (int): Hidden dimension of the model.\n        intermediate_dim (int): Intermediate dimension used in ConvNeXtBlock.\n        num_layers (int): Number of ConvNeXtBlock layers.\n        layer_scale_init_value (float, optional): Initial value for layer scaling. Defaults to `1 / num_layers`.\n        adanorm_num_embeddings (int, optional): Number of embeddings for AdaLayerNorm.\n                                                None means non-conditional model. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        input_channels: int,\n        dim: int,\n        intermediate_dim: int,\n        num_layers: int,\n        layer_scale_init_value: Optional[float] = None,\n        adanorm_num_embeddings: Optional[int] = None,\n    ):\n        super().__init__()\n        self.input_channels = input_channels\n        self.embed = nn.Conv1d(input_channels, dim, kernel_size=7, padding=3)\n        self.adanorm = adanorm_num_embeddings is not None\n        if adanorm_num_embeddings:\n            self.norm = AdaLayerNorm(adanorm_num_embeddings, dim, eps=1e-6)\n        else:\n            self.norm = nn.LayerNorm(dim, eps=1e-6)\n        layer_scale_init_value = layer_scale_init_value or 1 / num_layers\n        self.convnext = nn.ModuleList(\n            [\n                ConvNeXtBlock(\n                    dim=dim,\n                    intermediate_dim=intermediate_dim,\n                    layer_scale_init_value=layer_scale_init_value,\n                    adanorm_num_embeddings=adanorm_num_embeddings,\n                )\n                for _ in range(num_layers)\n            ]\n        )\n        self.final_layer_norm = nn.LayerNorm(dim, eps=1e-6)\n        self.apply(self._init_weights)\n\n    def _init_weights(self, m):\n        if isinstance(m, (nn.Conv1d, nn.Linear)):\n            nn.init.trunc_normal_(m.weight, std=0.02)\n            nn.init.constant_(m.bias, 0)\n\n    def forward(self, x: torch.Tensor, **kwargs) -> torch.Tensor:\n        bandwidth_id = kwargs.get(\"bandwidth_id\", None)\n        x = self.embed(x)\n        if self.adanorm:\n            assert bandwidth_id is not None\n            x = self.norm(x.transpose(1, 2), cond_embedding_id=bandwidth_id)\n        else:\n            x = self.norm(x.transpose(1, 2))\n        x = x.transpose(1, 2)\n        for conv_block in self.convnext:\n            x = conv_block(x, cond_embedding_id=bandwidth_id)\n        x = self.final_layer_norm(x.transpose(1, 2))\n        return x\n\n\nclass VocosResNetBackbone(Backbone):\n    \"\"\"\n    Vocos backbone module built with ResBlocks.\n\n    Args:\n        input_channels (int): Number of input features channels.\n        dim (int): Hidden dimension of the model.\n        num_blocks (int): Number of ResBlock1 blocks.\n        layer_scale_init_value (float, optional): Initial value for layer scaling. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        input_channels,\n        dim,\n        num_blocks,\n        layer_scale_init_value=None,\n    ):\n        super().__init__()\n        self.input_channels = input_channels\n        self.embed = weight_norm(\n            nn.Conv1d(input_channels, dim, kernel_size=3, padding=1)\n        )\n        layer_scale_init_value = layer_scale_init_value or 1 / num_blocks / 3\n        self.resnet = nn.Sequential(\n            *[\n                ResBlock1(dim=dim, layer_scale_init_value=layer_scale_init_value)\n                for _ in range(num_blocks)\n            ]\n        )\n\n    def forward(self, x: torch.Tensor, **kwargs) -> torch.Tensor:\n        x = self.embed(x)\n        x = self.resnet(x)\n        x = x.transpose(1, 2)\n        return x\n\n\nclass Vocos(nn.Module):\n    def __init__(\n        self,\n        input_channels: int = 256,\n        dim: int = 384,\n        intermediate_dim: int = 1152,\n        num_layers: int = 8,\n        adanorm_num_embeddings: int = 4,\n        n_fft: int = 800,\n        hop_size: int = 200,\n        padding: str = \"same\",\n    ):\n        super().__init__()\n\n        self.backbone = VocosBackbone(\n            input_channels=input_channels,\n            dim=dim,\n            intermediate_dim=intermediate_dim,\n            num_layers=num_layers,\n            adanorm_num_embeddings=adanorm_num_embeddings,\n        )\n        self.head = ISTFTHead(dim, n_fft, hop_size, padding)\n\n    def forward(self, x):\n        x = self.backbone(x)\n        x = self.head(x)\n\n        return x[:, None, :]\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/melvqgan/melspec.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport pyworld as pw\nimport numpy as np\nimport soundfile as sf\nimport os\nfrom torchaudio.functional import pitch_shift\nimport librosa\nfrom librosa.filters import mel as librosa_mel_fn\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport tqdm\n\n\ndef dynamic_range_compression(x, C=1, clip_val=1e-5):\n    return np.log(np.clip(x, a_min=clip_val, a_max=None) * C)\n\n\ndef dynamic_range_decompression(x, C=1):\n    return np.exp(x) / C\n\n\ndef dynamic_range_compression_torch(x, C=1, clip_val=1e-5):\n    return torch.log(torch.clamp(x, min=clip_val) * C)\n\n\ndef dynamic_range_decompression_torch(x, C=1):\n    return torch.exp(x) / C\n\n\ndef spectral_normalize_torch(magnitudes):\n    output = dynamic_range_compression_torch(magnitudes)\n    return output\n\n\ndef spectral_de_normalize_torch(magnitudes):\n    output = dynamic_range_decompression_torch(magnitudes)\n    return output\n\n\nclass MelSpectrogram(nn.Module):\n    def __init__(\n        self,\n        n_fft,\n        num_mels,\n        sampling_rate,\n        hop_size,\n        win_size,\n        fmin,\n        fmax,\n        center=False,\n    ):\n        super(MelSpectrogram, self).__init__()\n        self.n_fft = n_fft\n        self.hop_size = hop_size\n        self.win_size = win_size\n        self.sampling_rate = sampling_rate\n        self.num_mels = num_mels\n        self.fmin = fmin\n        self.fmax = fmax\n        self.center = center\n\n        mel_basis = {}\n        hann_window = {}\n\n        mel = librosa_mel_fn(\n            sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax\n        )\n        mel_basis = torch.from_numpy(mel).float()\n        hann_window = torch.hann_window(win_size)\n\n        self.register_buffer(\"mel_basis\", mel_basis)\n        self.register_buffer(\"hann_window\", hann_window)\n\n    def forward(self, y):\n        y = torch.nn.functional.pad(\n            y.unsqueeze(1),\n            (\n                int((self.n_fft - self.hop_size) / 2),\n                int((self.n_fft - self.hop_size) / 2),\n            ),\n            mode=\"reflect\",\n        )\n        y = y.squeeze(1)\n        spec = torch.stft(\n            y,\n            self.n_fft,\n            hop_length=self.hop_size,\n            win_length=self.win_size,\n            window=self.hann_window,\n            center=self.center,\n            pad_mode=\"reflect\",\n            normalized=False,\n            onesided=True,\n            return_complex=True,\n        )\n        spec = torch.view_as_real(spec)\n\n        spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9))\n\n        spec = torch.matmul(self.mel_basis, spec)\n        spec = spectral_normalize_torch(spec)\n\n        return spec\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/README.md",
    "content": "## FACodec: Speech Codec with Attribute Factorization used for NaturalSpeech 3\n\n[![arXiv](https://img.shields.io/badge/arXiv-Paper-<COLOR>.svg)](https://arxiv.org/pdf/2403.03100.pdf)\n[![demo](https://img.shields.io/badge/FACodec-Demo-red)](https://speechresearch.github.io/naturalspeech3/)\n[![model](https://img.shields.io/badge/%F0%9F%A4%97%20HuggingFace-Models-pink)](https://huggingface.co/amphion/naturalspeech3_facodec)\n[![hf](https://img.shields.io/badge/%F0%9F%A4%97%20HuggingFace-Spaces-yellow)](https://huggingface.co/spaces/amphion/naturalspeech3_facodec)\n\n## Overview\n\nFACodec is a core component of the advanced text-to-speech (TTS) model NaturalSpeech 3. FACodec converts complex speech waveform into disentangled subspaces representing speech attributes of content, prosody, timbre, and acoustic details and reconstruct high-quality speech waveform from these attributes. FACodec decomposes complex speech into subspaces representing different attributes, thus simplifying the modeling of speech representation.\n\nResearch can use FACodec to develop different modes of TTS models, such as non-autoregressive based discrete diffusion (NaturalSpeech 3) or autoregressive models (like VALL-E).\n\n<br>\n<div align=\"center\">\n<img src=\"../../../imgs/ns3/ns3_overview.png\" width=\"65%\">\n</div>\n<br>\n\n<br>\n<div align=\"center\">\n<img src=\"../../../imgs/ns3/ns3_facodec.png\" width=\"100%\">\n</div>\n<br>\n\n## Useage\n\nDownload the pre-trained FACodec model from HuggingFace: [Pretrained FACodec checkpoint](https://huggingface.co/amphion/naturalspeech3_facodec)\n\nInstall Amphion\n```bash\ngit clone https://github.com/open-mmlab/Amphion.git\n```\n\nFew lines of code to use the pre-trained FACodec model\n```python\nfrom Amphion.models.codec.ns3_codec import FACodecEncoder, FACodecDecoder\nfrom huggingface_hub import hf_hub_download\n\nfa_encoder = FACodecEncoder(\n    ngf=32,\n    up_ratios=[2, 4, 5, 5],\n    out_channels=256,\n)\n\nfa_decoder = FACodecDecoder(\n    in_channels=256,\n    upsample_initial_channel=1024,\n    ngf=32,\n    up_ratios=[5, 5, 4, 2],\n    vq_num_q_c=2,\n    vq_num_q_p=1,\n    vq_num_q_r=3,\n    vq_dim=256,\n    codebook_dim=8,\n    codebook_size_prosody=10,\n    codebook_size_content=10,\n    codebook_size_residual=10,\n    use_gr_x_timbre=True,\n    use_gr_residual_f0=True,\n    use_gr_residual_phone=True,\n)\n\nencoder_ckpt = hf_hub_download(repo_id=\"amphion/naturalspeech3_facodec\", filename=\"ns3_facodec_encoder.bin\")\ndecoder_ckpt = hf_hub_download(repo_id=\"amphion/naturalspeech3_facodec\", filename=\"ns3_facodec_decoder.bin\")\n\nfa_encoder.load_state_dict(torch.load(encoder_ckpt))\nfa_decoder.load_state_dict(torch.load(decoder_ckpt))\n\nfa_encoder.eval()\nfa_decoder.eval()\n\n```\n\nInference\n```python\ntest_wav_path = \"test.wav\"\ntest_wav = librosa.load(test_wav_path, sr=16000)[0]\ntest_wav = torch.from_numpy(test_wav).float()\ntest_wav = test_wav.unsqueeze(0).unsqueeze(0)\n\nwith torch.no_grad():\n\n    # encode\n    enc_out = fa_encoder(test_wav)\n    print(enc_out.shape)\n\n    # quantize\n    vq_post_emb, vq_id, _, quantized, spk_embs = fa_decoder(enc_out, eval_vq=False, vq=True)\n    \n    # latent after quantization\n    print(vq_post_emb.shape)\n    \n    # codes\n    print(\"vq id shape:\", vq_id.shape)\n    \n    # get prosody code\n    prosody_code = vq_id[:1]\n    print(\"prosody code shape:\", prosody_code.shape)\n    \n    # get content code\n    cotent_code = vq_id[1:3]\n    print(\"content code shape:\", cotent_code.shape)\n    \n    # get residual code (acoustic detail codes)\n    residual_code = vq_id[3:]\n    print(\"residual code shape:\", residual_code.shape)\n    \n    # speaker embedding\n    print(\"speaker embedding shape:\", spk_embs.shape)\n\n    # decode (recommand)\n    recon_wav = fa_decoder.inference(vq_post_emb, spk_embs)\n    print(recon_wav.shape)\n    sf.write(\"recon.wav\", recon_wav[0][0].cpu().numpy(), 16000)\n```\n\nFACodec can achieve zero-shot voice conversion with FACodecEncoderV2/FACodecDecoderV2 or FACodecRedecoder\n```python\nfrom Amphion.models.codec.ns3_codec import FACodecEncoderV2, FACodecDecoderV2\n\n# Same parameters as FACodecEncoder/FACodecDecoder\nfa_encoder_v2 = FACodecEncoderV2(...)\nfa_decoder_v2 = FACodecDecoderV2(...)\n\nencoder_v2_ckpt = hf_hub_download(repo_id=\"amphion/naturalspeech3_facodec\", filename=\"ns3_facodec_encoder_v2.bin\")\ndecoder_v2_ckpt = hf_hub_download(repo_id=\"amphion/naturalspeech3_facodec\", filename=\"ns3_facodec_decoder_v2.bin\")\n\nfa_encoder_v2.load_state_dict(torch.load(encoder_v2_ckpt))\nfa_decoder_v2.load_state_dict(torch.load(decoder_v2_ckpt))\n\nwith torch.no_grad():\n  enc_out_a = fa_encoder_v2(wav_a)\n  prosody_a = fa_encoder_v2.get_prosody_feature(wav_a)\n  enc_out_b = fa_encoder_v2(wav_b)\n  prosody_b = fa_encoder_v2.get_prosody_feature(wav_b)\n\n  vq_post_emb_a, vq_id_a, _, quantized, spk_embs_a = fa_decoder_v2(\n      enc_out_a, prosody_a, eval_vq=False, vq=True\n  )\n  vq_post_emb_b, vq_id_b, _, quantized, spk_embs_b = fa_decoder_v2(\n      enc_out_b, prosody_b, eval_vq=False, vq=True\n  )\n\n  vq_post_emb_a_to_b = fa_decoder_v2.vq2emb(vq_id_a, use_residual=False)\n  recon_wav_a_to_b = fa_decoder_v2.inference(vq_post_emb_a_to_b, spk_embs_b)\n```\n\nor\n\n```python\nfrom Amphion.models.codec.ns3_codec import FACodecRedecoder\n\nfa_redecoder = FACodecRedecoder()\n\nredecoder_ckpt = hf_hub_download(repo_id=\"amphion/naturalspeech3_facodec\", filename=\"ns3_facodec_redecoder.bin\")\n\nfa_redecoder.load_state_dict(torch.load(redecoder_ckpt))\n\nwith torch.no_grad():\n    enc_out_a = fa_encoder(wav_a)\n    enc_out_b = fa_encoder(wav_b)\n\n    vq_post_emb_a, vq_id_a, _, quantized_a, spk_embs_a = fa_decoder(enc_out_a, eval_vq=False, vq=True)\n    vq_post_emb_b, vq_id_b, _, quantized_b, spk_embs_b = fa_decoder(enc_out_b, eval_vq=False, vq=True)\n\n    # convert speaker\n    vq_post_emb_a_to_b = fa_redecoder.vq2emb(vq_id_a, spk_embs_b, use_residual=False)\n    recon_wav_a_to_b = fa_redecoder.inference(vq_post_emb_a_to_b, spk_embs_b)\n\n    sf.write(\"recon_a_to_b.wav\", recon_wav_a_to_b[0][0].cpu().numpy(), 16000)\n```\n\n## Q&A\n\nQ1: What audio sample rate does FACodec support? What is the hop size? How many codes will be generated for each frame?\n\nA1: FACodec supports 16KHz speech audio. The hop size is 200 samples, and (16000/200) * 6 (total number of codebooks) codes will be generated for each frame.\n\nQ2: Is it possible to train an autoregressive TTS model like VALL-E using FACodec?\n\nA2: Yes. In fact, the authors of NaturalSpeech 3 have already employ explore the autoregressive generative model for discrete token generation with FACodec. They use an autoregressive language model to generate prosody codes, followed by a non-autoregressive model to generate the remaining content and acoustic details codes.\n\nQ3: Is it possible to train a latent diffusion TTS model like NaturalSpeech2 using FACodec?\n\nA3: Yes. You can use the latent getted after quanzaition as the modelling target for the latent diffusion model.\n\nQ4: Can FACodec compress and reconstruct audio from other domains? Such as sound effects, music, etc.\n\nA4: Since FACodec is designed for speech, it may not be suitable for other audio domains. However, it is possible to use the FACodec model to compress and reconstruct audio from other domains, but the quality may not be as good as the original audio.\n\nQ5: Can FACodec be used for content feature for some other tasks like voice conversion?\n\nA5: I think the answer is yes. Researchers can use the content code of FACodec as the content feature for voice conversion. We hope to see more research in this direction.\n\n## Citations\n\nIf you use our FACodec model, please cite the following paper:\n\n```bibtex\n@article{ju2024naturalspeech,\n  title={NaturalSpeech 3: Zero-Shot Speech Synthesis with Factorized Codec and Diffusion Models},\n  author={Ju, Zeqian and Wang, Yuancheng and Shen, Kai and Tan, Xu and Xin, Detai and Yang, Dongchao and Liu, Yanqing and Leng, Yichong and Song, Kaitao and Tang, Siliang and others},\n  journal={arXiv preprint arXiv:2403.03100},\n  year={2024}\n}\n\n@article{zhang2023amphion,\n      title={Amphion: An Open-Source Audio, Music and Speech Generation Toolkit}, \n      author={Xueyao Zhang and Liumeng Xue and Yicheng Gu and Yuancheng Wang and Haorui He and Chaoren Wang and Xi Chen and Zihao Fang and Haopeng Chen and Junan Zhang and Tze Ying Tang and Lexiao Zou and Mingxuan Wang and Jun Han and Kai Chen and Haizhou Li and Zhizheng Wu},\n      journal={arXiv},\n      year={2024},\n      volume={abs/2312.09911}\n}\n```\n\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/__init__.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom .facodec import *\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/__init__.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nfrom .filter import *\nfrom .resample import *\nfrom .act import *\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/act.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nimport torch.nn as nn\nfrom .resample import UpSample1d, DownSample1d\n\n\nclass Activation1d(nn.Module):\n    def __init__(\n        self,\n        activation,\n        up_ratio: int = 2,\n        down_ratio: int = 2,\n        up_kernel_size: int = 12,\n        down_kernel_size: int = 12,\n    ):\n        super().__init__()\n        self.up_ratio = up_ratio\n        self.down_ratio = down_ratio\n        self.act = activation\n        self.upsample = UpSample1d(up_ratio, up_kernel_size)\n        self.downsample = DownSample1d(down_ratio, down_kernel_size)\n\n    # x: [B,C,T]\n    def forward(self, x):\n        x = self.upsample(x)\n        x = self.act(x)\n        x = self.downsample(x)\n\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/filter.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport math\n\nif \"sinc\" in dir(torch):\n    sinc = torch.sinc\nelse:\n    # This code is adopted from adefossez's julius.core.sinc under the MIT License\n    # https://adefossez.github.io/julius/julius/core.html\n    def sinc(x: torch.Tensor):\n        \"\"\"\n        Implementation of sinc, i.e. sin(pi * x) / (pi * x)\n        __Warning__: Different to julius.sinc, the input is multiplied by `pi`!\n        \"\"\"\n        return torch.where(\n            x == 0,\n            torch.tensor(1.0, device=x.device, dtype=x.dtype),\n            torch.sin(math.pi * x) / math.pi / x,\n        )\n\n\n# This code is adopted from adefossez's julius.lowpass.LowPassFilters under the MIT License\n# https://adefossez.github.io/julius/julius/lowpass.html\ndef kaiser_sinc_filter1d(\n    cutoff, half_width, kernel_size\n):  # return filter [1,1,kernel_size]\n    even = kernel_size % 2 == 0\n    half_size = kernel_size // 2\n\n    # For kaiser window\n    delta_f = 4 * half_width\n    A = 2.285 * (half_size - 1) * math.pi * delta_f + 7.95\n    if A > 50.0:\n        beta = 0.1102 * (A - 8.7)\n    elif A >= 21.0:\n        beta = 0.5842 * (A - 21) ** 0.4 + 0.07886 * (A - 21.0)\n    else:\n        beta = 0.0\n    window = torch.kaiser_window(kernel_size, beta=beta, periodic=False)\n\n    # ratio = 0.5/cutoff -> 2 * cutoff = 1 / ratio\n    if even:\n        time = torch.arange(-half_size, half_size) + 0.5\n    else:\n        time = torch.arange(kernel_size) - half_size\n    if cutoff == 0:\n        filter_ = torch.zeros_like(time)\n    else:\n        filter_ = 2 * cutoff * window * sinc(2 * cutoff * time)\n        # Normalize filter to have sum = 1, otherwise we will have a small leakage\n        # of the constant component in the input signal.\n        filter_ /= filter_.sum()\n        filter = filter_.view(1, 1, kernel_size)\n\n    return filter\n\n\nclass LowPassFilter1d(nn.Module):\n    def __init__(\n        self,\n        cutoff=0.5,\n        half_width=0.6,\n        stride: int = 1,\n        padding: bool = True,\n        padding_mode: str = \"replicate\",\n        kernel_size: int = 12,\n    ):\n        # kernel_size should be even number for stylegan3 setup,\n        # in this implementation, odd number is also possible.\n        super().__init__()\n        if cutoff < -0.0:\n            raise ValueError(\"Minimum cutoff must be larger than zero.\")\n        if cutoff > 0.5:\n            raise ValueError(\"A cutoff above 0.5 does not make sense.\")\n        self.kernel_size = kernel_size\n        self.even = kernel_size % 2 == 0\n        self.pad_left = kernel_size // 2 - int(self.even)\n        self.pad_right = kernel_size // 2\n        self.stride = stride\n        self.padding = padding\n        self.padding_mode = padding_mode\n        filter = kaiser_sinc_filter1d(cutoff, half_width, kernel_size)\n        self.register_buffer(\"filter\", filter)\n\n    # input [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        if self.padding:\n            x = F.pad(x, (self.pad_left, self.pad_right), mode=self.padding_mode)\n        out = F.conv1d(x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C)\n\n        return out\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/resample.py",
    "content": "# Adapted from https://github.com/junjun3518/alias-free-torch under the Apache License 2.0\n\nimport torch.nn as nn\nfrom torch.nn import functional as F\nfrom .filter import LowPassFilter1d\nfrom .filter import kaiser_sinc_filter1d\n\n\nclass UpSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.stride = ratio\n        self.pad = self.kernel_size // ratio - 1\n        self.pad_left = self.pad * self.stride + (self.kernel_size - self.stride) // 2\n        self.pad_right = (\n            self.pad * self.stride + (self.kernel_size - self.stride + 1) // 2\n        )\n        filter = kaiser_sinc_filter1d(\n            cutoff=0.5 / ratio, half_width=0.6 / ratio, kernel_size=self.kernel_size\n        )\n        self.register_buffer(\"filter\", filter)\n\n    # x: [B, C, T]\n    def forward(self, x):\n        _, C, _ = x.shape\n\n        x = F.pad(x, (self.pad, self.pad), mode=\"replicate\")\n        x = self.ratio * F.conv_transpose1d(\n            x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C\n        )\n        x = x[..., self.pad_left : -self.pad_right]\n\n        return x\n\n\nclass DownSample1d(nn.Module):\n    def __init__(self, ratio=2, kernel_size=None):\n        super().__init__()\n        self.ratio = ratio\n        self.kernel_size = (\n            int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size\n        )\n        self.lowpass = LowPassFilter1d(\n            cutoff=0.5 / ratio,\n            half_width=0.6 / ratio,\n            stride=ratio,\n            kernel_size=self.kernel_size,\n        )\n\n    def forward(self, x):\n        xx = self.lowpass(x)\n\n        return xx\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/facodec.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\nfrom torch import nn, sin, pow\nfrom torch.nn import Parameter\nimport torch.nn.functional as F\nfrom torch.nn.utils import weight_norm\nfrom .alias_free_torch import *\nfrom .quantize import *\nfrom einops import rearrange\nfrom einops.layers.torch import Rearrange\nfrom .transformer import TransformerEncoder\nfrom .gradient_reversal import GradientReversal\nfrom .melspec import MelSpectrogram\n\n\ndef init_weights(m):\n    if isinstance(m, nn.Conv1d):\n        nn.init.trunc_normal_(m.weight, std=0.02)\n        nn.init.constant_(m.bias, 0)\n\n\ndef WNConv1d(*args, **kwargs):\n    return weight_norm(nn.Conv1d(*args, **kwargs))\n\n\ndef WNConvTranspose1d(*args, **kwargs):\n    return weight_norm(nn.ConvTranspose1d(*args, **kwargs))\n\n\nclass CNNLSTM(nn.Module):\n    def __init__(self, indim, outdim, head, global_pred=False):\n        super().__init__()\n        self.global_pred = global_pred\n        self.model = nn.Sequential(\n            ResidualUnit(indim, dilation=1),\n            ResidualUnit(indim, dilation=2),\n            ResidualUnit(indim, dilation=3),\n            Activation1d(activation=SnakeBeta(indim, alpha_logscale=True)),\n            Rearrange(\"b c t -> b t c\"),\n        )\n        self.heads = nn.ModuleList([nn.Linear(indim, outdim) for i in range(head)])\n\n    def forward(self, x):\n        # x: [B, C, T]\n        x = self.model(x)\n        if self.global_pred:\n            x = torch.mean(x, dim=1, keepdim=False)\n        outs = [head(x) for head in self.heads]\n        return outs\n\n\nclass SnakeBeta(nn.Module):\n    \"\"\"\n    A modified Snake function which uses separate parameters for the magnitude of the periodic components\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter that controls frequency\n        - beta - trainable parameter that controls magnitude\n    References:\n        - This activation function is a modified version based on this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snakebeta(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    \"\"\"\n\n    def __init__(\n        self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False\n    ):\n        \"\"\"\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha - trainable parameter that controls frequency\n            - beta - trainable parameter that controls magnitude\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            beta is initialized to 1 by default, higher values = higher-magnitude.\n            alpha will be trained along with the rest of your model.\n        \"\"\"\n        super(SnakeBeta, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale:  # log scale alphas initialized to zeros\n            self.alpha = Parameter(torch.zeros(in_features) * alpha)\n            self.beta = Parameter(torch.zeros(in_features) * alpha)\n        else:  # linear scale alphas initialized to ones\n            self.alpha = Parameter(torch.ones(in_features) * alpha)\n            self.beta = Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n        self.beta.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        \"\"\"\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        SnakeBeta := x + 1/b * sin^2 (xa)\n        \"\"\"\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1)  # line up with x to [B, C, T]\n        beta = self.beta.unsqueeze(0).unsqueeze(-1)\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n            beta = torch.exp(beta)\n        x = x + (1.0 / (beta + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x\n\n\nclass ResidualUnit(nn.Module):\n    def __init__(self, dim: int = 16, dilation: int = 1):\n        super().__init__()\n        pad = ((7 - 1) * dilation) // 2\n        self.block = nn.Sequential(\n            Activation1d(activation=SnakeBeta(dim, alpha_logscale=True)),\n            WNConv1d(dim, dim, kernel_size=7, dilation=dilation, padding=pad),\n            Activation1d(activation=SnakeBeta(dim, alpha_logscale=True)),\n            WNConv1d(dim, dim, kernel_size=1),\n        )\n\n    def forward(self, x):\n        return x + self.block(x)\n\n\nclass EncoderBlock(nn.Module):\n    def __init__(self, dim: int = 16, stride: int = 1):\n        super().__init__()\n        self.block = nn.Sequential(\n            ResidualUnit(dim // 2, dilation=1),\n            ResidualUnit(dim // 2, dilation=3),\n            ResidualUnit(dim // 2, dilation=9),\n            Activation1d(activation=SnakeBeta(dim // 2, alpha_logscale=True)),\n            WNConv1d(\n                dim // 2,\n                dim,\n                kernel_size=2 * stride,\n                stride=stride,\n                padding=stride // 2 + stride % 2,\n            ),\n        )\n\n    def forward(self, x):\n        return self.block(x)\n\n\nclass FACodecEncoder(nn.Module):\n    def __init__(\n        self,\n        ngf=32,\n        up_ratios=(2, 4, 5, 5),\n        out_channels=1024,\n    ):\n        super().__init__()\n        self.hop_length = np.prod(up_ratios)\n        self.up_ratios = up_ratios\n\n        # Create first convolution\n        d_model = ngf\n        self.block = [WNConv1d(1, d_model, kernel_size=7, padding=3)]\n\n        # Create EncoderBlocks that double channels as they downsample by `stride`\n        for stride in up_ratios:\n            d_model *= 2\n            self.block += [EncoderBlock(d_model, stride=stride)]\n\n        # Create last convolution\n        self.block += [\n            Activation1d(activation=SnakeBeta(d_model, alpha_logscale=True)),\n            WNConv1d(d_model, out_channels, kernel_size=3, padding=1),\n        ]\n\n        # Wrap black into nn.Sequential\n        self.block = nn.Sequential(*self.block)\n        self.enc_dim = d_model\n\n        self.reset_parameters()\n\n    def forward(self, x):\n        out = self.block(x)\n        return out\n\n    def inference(self, x):\n        return self.block(x)\n\n    def remove_weight_norm(self):\n        \"\"\"Remove weight normalization module from all of the layers.\"\"\"\n\n        def _remove_weight_norm(m):\n            try:\n                torch.nn.utils.remove_weight_norm(m)\n            except ValueError:  # this module didn't have weight norm\n                return\n\n        self.apply(_remove_weight_norm)\n\n    def apply_weight_norm(self):\n        \"\"\"Apply weight normalization module from all of the layers.\"\"\"\n\n        def _apply_weight_norm(m):\n            if isinstance(m, nn.Conv1d):\n                torch.nn.utils.weight_norm(m)\n\n        self.apply(_apply_weight_norm)\n\n    def reset_parameters(self):\n        self.apply(init_weights)\n\n\nclass DecoderBlock(nn.Module):\n    def __init__(self, input_dim: int = 16, output_dim: int = 8, stride: int = 1):\n        super().__init__()\n        self.block = nn.Sequential(\n            Activation1d(activation=SnakeBeta(input_dim, alpha_logscale=True)),\n            WNConvTranspose1d(\n                input_dim,\n                output_dim,\n                kernel_size=2 * stride,\n                stride=stride,\n                padding=stride // 2 + stride % 2,\n                output_padding=stride % 2,\n            ),\n            ResidualUnit(output_dim, dilation=1),\n            ResidualUnit(output_dim, dilation=3),\n            ResidualUnit(output_dim, dilation=9),\n        )\n\n    def forward(self, x):\n        return self.block(x)\n\n\nclass FACodecDecoder(nn.Module):\n    def __init__(\n        self,\n        in_channels=256,\n        upsample_initial_channel=1536,\n        ngf=32,\n        up_ratios=(5, 5, 4, 2),\n        vq_num_q_c=2,\n        vq_num_q_p=1,\n        vq_num_q_r=3,\n        vq_dim=1024,\n        vq_commit_weight=0.005,\n        vq_weight_init=False,\n        vq_full_commit_loss=False,\n        codebook_dim=8,\n        codebook_size_prosody=10,  # true codebook size is equal to 2^codebook_size\n        codebook_size_content=10,\n        codebook_size_residual=10,\n        quantizer_dropout=0.0,\n        dropout_type=\"linear\",\n        use_gr_content_f0=False,\n        use_gr_prosody_phone=False,\n        use_gr_residual_f0=False,\n        use_gr_residual_phone=False,\n        use_gr_x_timbre=False,\n        use_random_mask_residual=True,\n        prob_random_mask_residual=0.75,\n    ):\n        super().__init__()\n        self.hop_length = np.prod(up_ratios)\n        self.ngf = ngf\n        self.up_ratios = up_ratios\n\n        self.use_random_mask_residual = use_random_mask_residual\n        self.prob_random_mask_residual = prob_random_mask_residual\n\n        self.vq_num_q_p = vq_num_q_p\n        self.vq_num_q_c = vq_num_q_c\n        self.vq_num_q_r = vq_num_q_r\n\n        self.codebook_size_prosody = codebook_size_prosody\n        self.codebook_size_content = codebook_size_content\n        self.codebook_size_residual = codebook_size_residual\n\n        quantizer_class = ResidualVQ\n\n        self.quantizer = nn.ModuleList()\n\n        # prosody\n        quantizer = quantizer_class(\n            num_quantizers=vq_num_q_p,\n            dim=vq_dim,\n            codebook_size=codebook_size_prosody,\n            codebook_dim=codebook_dim,\n            threshold_ema_dead_code=2,\n            commitment=vq_commit_weight,\n            weight_init=vq_weight_init,\n            full_commit_loss=vq_full_commit_loss,\n            quantizer_dropout=quantizer_dropout,\n            dropout_type=dropout_type,\n        )\n        self.quantizer.append(quantizer)\n\n        # phone\n        quantizer = quantizer_class(\n            num_quantizers=vq_num_q_c,\n            dim=vq_dim,\n            codebook_size=codebook_size_content,\n            codebook_dim=codebook_dim,\n            threshold_ema_dead_code=2,\n            commitment=vq_commit_weight,\n            weight_init=vq_weight_init,\n            full_commit_loss=vq_full_commit_loss,\n            quantizer_dropout=quantizer_dropout,\n            dropout_type=dropout_type,\n        )\n        self.quantizer.append(quantizer)\n\n        # residual\n        if self.vq_num_q_r > 0:\n            quantizer = quantizer_class(\n                num_quantizers=vq_num_q_r,\n                dim=vq_dim,\n                codebook_size=codebook_size_residual,\n                codebook_dim=codebook_dim,\n                threshold_ema_dead_code=2,\n                commitment=vq_commit_weight,\n                weight_init=vq_weight_init,\n                full_commit_loss=vq_full_commit_loss,\n                quantizer_dropout=quantizer_dropout,\n                dropout_type=dropout_type,\n            )\n            self.quantizer.append(quantizer)\n\n        # Add first conv layer\n        channels = upsample_initial_channel\n        layers = [WNConv1d(in_channels, channels, kernel_size=7, padding=3)]\n\n        # Add upsampling + MRF blocks\n        for i, stride in enumerate(up_ratios):\n            input_dim = channels // 2**i\n            output_dim = channels // 2 ** (i + 1)\n            layers += [DecoderBlock(input_dim, output_dim, stride)]\n\n        # Add final conv layer\n        layers += [\n            Activation1d(activation=SnakeBeta(output_dim, alpha_logscale=True)),\n            WNConv1d(output_dim, 1, kernel_size=7, padding=3),\n            nn.Tanh(),\n        ]\n\n        self.model = nn.Sequential(*layers)\n\n        self.timbre_encoder = TransformerEncoder(\n            enc_emb_tokens=None,\n            encoder_layer=4,\n            encoder_hidden=256,\n            encoder_head=4,\n            conv_filter_size=1024,\n            conv_kernel_size=5,\n            encoder_dropout=0.1,\n            use_cln=False,\n        )\n\n        self.timbre_linear = nn.Linear(in_channels, in_channels * 2)\n        self.timbre_linear.bias.data[:in_channels] = 1\n        self.timbre_linear.bias.data[in_channels:] = 0\n        self.timbre_norm = nn.LayerNorm(in_channels, elementwise_affine=False)\n\n        self.f0_predictor = CNNLSTM(in_channels, 1, 2)\n        self.phone_predictor = CNNLSTM(in_channels, 5003, 1)\n\n        self.use_gr_content_f0 = use_gr_content_f0\n        self.use_gr_prosody_phone = use_gr_prosody_phone\n        self.use_gr_residual_f0 = use_gr_residual_f0\n        self.use_gr_residual_phone = use_gr_residual_phone\n        self.use_gr_x_timbre = use_gr_x_timbre\n\n        if self.vq_num_q_r > 0 and self.use_gr_residual_f0:\n            self.res_f0_predictor = nn.Sequential(\n                GradientReversal(alpha=1.0), CNNLSTM(in_channels, 1, 2)\n            )\n\n        if self.vq_num_q_r > 0 and self.use_gr_residual_phone > 0:\n            self.res_phone_predictor = nn.Sequential(\n                GradientReversal(alpha=1.0), CNNLSTM(in_channels, 5003, 1)\n            )\n\n        if self.use_gr_content_f0:\n            self.content_f0_predictor = nn.Sequential(\n                GradientReversal(alpha=1.0), CNNLSTM(in_channels, 1, 2)\n            )\n\n        if self.use_gr_prosody_phone:\n            self.prosody_phone_predictor = nn.Sequential(\n                GradientReversal(alpha=1.0), CNNLSTM(in_channels, 5003, 1)\n            )\n\n        if self.use_gr_x_timbre:\n            self.x_timbre_predictor = nn.Sequential(\n                GradientReversal(alpha=1),\n                CNNLSTM(in_channels, 245200, 1, global_pred=True),\n            )\n\n        self.reset_parameters()\n\n    def quantize(self, x, n_quantizers=None):\n        outs, qs, commit_loss, quantized_buf = 0, [], [], []\n\n        # prosody\n        f0_input = x  # (B, d, T)\n        f0_quantizer = self.quantizer[0]\n        out, q, commit, quantized = f0_quantizer(f0_input, n_quantizers=n_quantizers)\n        outs += out\n        qs.append(q)\n        quantized_buf.append(quantized.sum(0))\n        commit_loss.append(commit)\n\n        # phone\n        phone_input = x\n        phone_quantizer = self.quantizer[1]\n        out, q, commit, quantized = phone_quantizer(\n            phone_input, n_quantizers=n_quantizers\n        )\n        outs += out\n        qs.append(q)\n        quantized_buf.append(quantized.sum(0))\n        commit_loss.append(commit)\n\n        # residual\n        if self.vq_num_q_r > 0:\n            residual_quantizer = self.quantizer[2]\n            residual_input = x - (quantized_buf[0] + quantized_buf[1]).detach()\n            out, q, commit, quantized = residual_quantizer(\n                residual_input, n_quantizers=n_quantizers\n            )\n            outs += out\n            qs.append(q)\n            quantized_buf.append(quantized.sum(0))  # [L, B, C, T] -> [B, C, T]\n            commit_loss.append(commit)\n\n        qs = torch.cat(qs, dim=0)\n        commit_loss = torch.cat(commit_loss, dim=0)\n        return outs, qs, commit_loss, quantized_buf\n\n    def forward(\n        self,\n        x,\n        vq=True,\n        get_vq=False,\n        eval_vq=True,\n        speaker_embedding=None,\n        n_quantizers=None,\n        quantized=None,\n    ):\n        if get_vq:\n            return self.quantizer.get_emb()\n        if vq is True:\n            if eval_vq:\n                self.quantizer.eval()\n            x_timbre = x\n            outs, qs, commit_loss, quantized_buf = self.quantize(\n                x, n_quantizers=n_quantizers\n            )\n\n            x_timbre = x_timbre.transpose(1, 2)\n            x_timbre = self.timbre_encoder(x_timbre, None, None)\n            x_timbre = x_timbre.transpose(1, 2)\n            spk_embs = torch.mean(x_timbre, dim=2)\n            return outs, qs, commit_loss, quantized_buf, spk_embs\n\n        out = {}\n\n        layer_0 = quantized[0]\n        f0, uv = self.f0_predictor(layer_0)\n        f0 = rearrange(f0, \"... 1 -> ...\")\n        uv = rearrange(uv, \"... 1 -> ...\")\n\n        layer_1 = quantized[1]\n        (phone,) = self.phone_predictor(layer_1)\n\n        out = {\"f0\": f0, \"uv\": uv, \"phone\": phone}\n\n        if self.use_gr_prosody_phone:\n            (prosody_phone,) = self.prosody_phone_predictor(layer_0)\n            out[\"prosody_phone\"] = prosody_phone\n\n        if self.use_gr_content_f0:\n            content_f0, content_uv = self.content_f0_predictor(layer_1)\n            content_f0 = rearrange(content_f0, \"... 1 -> ...\")\n            content_uv = rearrange(content_uv, \"... 1 -> ...\")\n            out[\"content_f0\"] = content_f0\n            out[\"content_uv\"] = content_uv\n\n        if self.vq_num_q_r > 0:\n            layer_2 = quantized[2]\n\n            if self.use_gr_residual_f0:\n                res_f0, res_uv = self.res_f0_predictor(layer_2)\n                res_f0 = rearrange(res_f0, \"... 1 -> ...\")\n                res_uv = rearrange(res_uv, \"... 1 -> ...\")\n                out[\"res_f0\"] = res_f0\n                out[\"res_uv\"] = res_uv\n\n            if self.use_gr_residual_phone:\n                (res_phone,) = self.res_phone_predictor(layer_2)\n                out[\"res_phone\"] = res_phone\n\n        style = self.timbre_linear(speaker_embedding).unsqueeze(2)  # (B, 2d, 1)\n        gamma, beta = style.chunk(2, 1)  # (B, d, 1)\n        if self.vq_num_q_r > 0:\n            if self.use_random_mask_residual:\n                bsz = quantized[2].shape[0]\n                res_mask = np.random.choice(\n                    [0, 1],\n                    size=bsz,\n                    p=[\n                        self.prob_random_mask_residual,\n                        1 - self.prob_random_mask_residual,\n                    ],\n                )\n                res_mask = (\n                    torch.from_numpy(res_mask).unsqueeze(1).unsqueeze(1)\n                )  # (B, 1, 1)\n                res_mask = res_mask.to(\n                    device=quantized[2].device, dtype=quantized[2].dtype\n                )\n                x = (\n                    quantized[0].detach()\n                    + quantized[1].detach()\n                    + quantized[2] * res_mask\n                )\n                # x = quantized_perturbe[0].detach() + quantized[1].detach() + quantized[2] * res_mask\n            else:\n                x = quantized[0].detach() + quantized[1].detach() + quantized[2]\n                # x = quantized_perturbe[0].detach() + quantized[1].detach() + quantized[2]\n        else:\n            x = quantized[0].detach() + quantized[1].detach()\n            # x = quantized_perturbe[0].detach() + quantized[1].detach()\n\n        if self.use_gr_x_timbre:\n            (x_timbre,) = self.x_timbre_predictor(x)\n            out[\"x_timbre\"] = x_timbre\n\n        x = x.transpose(1, 2)\n        x = self.timbre_norm(x)\n        x = x.transpose(1, 2)\n        x = x * gamma + beta\n\n        x = self.model(x)\n        out[\"audio\"] = x\n\n        return out\n\n    def vq2emb(self, vq, use_residual_code=True):\n        # vq: [num_quantizer, B, T]\n        self.quantizer = self.quantizer.eval()\n        out = 0\n        out += self.quantizer[0].vq2emb(vq[0 : self.vq_num_q_p])\n        out += self.quantizer[1].vq2emb(\n            vq[self.vq_num_q_p : self.vq_num_q_p + self.vq_num_q_c]\n        )\n        if self.vq_num_q_r > 0 and use_residual_code:\n            out += self.quantizer[2].vq2emb(vq[self.vq_num_q_p + self.vq_num_q_c :])\n        return out\n\n    def inference(self, x, speaker_embedding):\n        style = self.timbre_linear(speaker_embedding).unsqueeze(2)  # (B, 2d, 1)\n        gamma, beta = style.chunk(2, 1)  # (B, d, 1)\n        x = x.transpose(1, 2)\n        x = self.timbre_norm(x)\n        x = x.transpose(1, 2)\n        x = x * gamma + beta\n        x = self.model(x)\n        return x\n\n    def remove_weight_norm(self):\n        \"\"\"Remove weight normalization module from all of the layers.\"\"\"\n\n        def _remove_weight_norm(m):\n            try:\n                torch.nn.utils.remove_weight_norm(m)\n            except ValueError:  # this module didn't have weight norm\n                return\n\n        self.apply(_remove_weight_norm)\n\n    def apply_weight_norm(self):\n        \"\"\"Apply weight normalization module from all of the layers.\"\"\"\n\n        def _apply_weight_norm(m):\n            if isinstance(m, nn.Conv1d) or isinstance(m, nn.ConvTranspose1d):\n                torch.nn.utils.weight_norm(m)\n\n        self.apply(_apply_weight_norm)\n\n    def reset_parameters(self):\n        self.apply(init_weights)\n\n\nclass FACodecRedecoder(nn.Module):\n    def __init__(\n        self,\n        in_channels=256,\n        upsample_initial_channel=1280,\n        up_ratios=(5, 5, 4, 2),\n        vq_num_q_c=2,\n        vq_num_q_p=1,\n        vq_num_q_r=3,\n        vq_dim=256,\n        codebook_size_prosody=10,\n        codebook_size_content=10,\n        codebook_size_residual=10,\n    ):\n        super().__init__()\n        self.hop_length = np.prod(up_ratios)\n        self.up_ratios = up_ratios\n\n        self.vq_num_q_p = vq_num_q_p\n        self.vq_num_q_c = vq_num_q_c\n        self.vq_num_q_r = vq_num_q_r\n\n        self.vq_dim = vq_dim\n\n        self.codebook_size_prosody = codebook_size_prosody\n        self.codebook_size_content = codebook_size_content\n        self.codebook_size_residual = codebook_size_residual\n\n        self.prosody_embs = nn.ModuleList()\n        for i in range(self.vq_num_q_p):\n            emb_tokens = nn.Embedding(\n                num_embeddings=2**self.codebook_size_prosody,\n                embedding_dim=self.vq_dim,\n            )\n            emb_tokens.weight.data.normal_(mean=0.0, std=1e-5)\n            self.prosody_embs.append(emb_tokens)\n        self.content_embs = nn.ModuleList()\n        for i in range(self.vq_num_q_c):\n            emb_tokens = nn.Embedding(\n                num_embeddings=2**self.codebook_size_content,\n                embedding_dim=self.vq_dim,\n            )\n            emb_tokens.weight.data.normal_(mean=0.0, std=1e-5)\n            self.content_embs.append(emb_tokens)\n        self.residual_embs = nn.ModuleList()\n        for i in range(self.vq_num_q_r):\n            emb_tokens = nn.Embedding(\n                num_embeddings=2**self.codebook_size_residual,\n                embedding_dim=self.vq_dim,\n            )\n            emb_tokens.weight.data.normal_(mean=0.0, std=1e-5)\n            self.residual_embs.append(emb_tokens)\n\n        # Add first conv layer\n        channels = upsample_initial_channel\n        layers = [WNConv1d(in_channels, channels, kernel_size=7, padding=3)]\n\n        # Add upsampling + MRF blocks\n        for i, stride in enumerate(up_ratios):\n            input_dim = channels // 2**i\n            output_dim = channels // 2 ** (i + 1)\n            layers += [DecoderBlock(input_dim, output_dim, stride)]\n\n        # Add final conv layer\n        layers += [\n            Activation1d(activation=SnakeBeta(output_dim, alpha_logscale=True)),\n            WNConv1d(output_dim, 1, kernel_size=7, padding=3),\n            nn.Tanh(),\n        ]\n\n        self.model = nn.Sequential(*layers)\n\n        self.timbre_linear = nn.Linear(in_channels, in_channels * 2)\n        self.timbre_linear.bias.data[:in_channels] = 1\n        self.timbre_linear.bias.data[in_channels:] = 0\n        self.timbre_norm = nn.LayerNorm(in_channels, elementwise_affine=False)\n\n        self.timbre_cond_prosody_enc = TransformerEncoder(\n            enc_emb_tokens=None,\n            encoder_layer=4,\n            encoder_hidden=256,\n            encoder_head=4,\n            conv_filter_size=1024,\n            conv_kernel_size=5,\n            encoder_dropout=0.1,\n            use_cln=True,\n            cfg=None,\n        )\n\n    def forward(\n        self,\n        vq,\n        speaker_embedding,\n        use_residual_code=False,\n    ):\n\n        x = 0\n\n        x_p = 0\n        for i in range(self.vq_num_q_p):\n            x_p = x_p + self.prosody_embs[i](vq[i])  # (B, T, d)\n        spk_cond = speaker_embedding.unsqueeze(1).expand(-1, x_p.shape[1], -1)\n        x_p = self.timbre_cond_prosody_enc(\n            x_p, key_padding_mask=None, condition=spk_cond\n        )\n        x = x + x_p\n\n        x_c = 0\n        for i in range(self.vq_num_q_c):\n            x_c = x_c + self.content_embs[i](vq[self.vq_num_q_p + i])\n\n        x = x + x_c\n\n        if use_residual_code:\n\n            x_r = 0\n            for i in range(self.vq_num_q_r):\n                x_r = x_r + self.residual_embs[i](\n                    vq[self.vq_num_q_p + self.vq_num_q_c + i]\n                )\n            x = x + x_r\n\n        style = self.timbre_linear(speaker_embedding).unsqueeze(2)  # (B, 2d, 1)\n        gamma, beta = style.chunk(2, 1)  # (B, d, 1)\n        x = x.transpose(1, 2)\n        x = self.timbre_norm(x)\n        x = x.transpose(1, 2)\n        x = x * gamma + beta\n        x = self.model(x)\n\n        return x\n\n    def vq2emb(self, vq, speaker_embedding, use_residual=True):\n\n        out = 0\n\n        x_t = 0\n        for i in range(self.vq_num_q_p):\n            x_t += self.prosody_embs[i](vq[i])  # (B, T, d)\n            spk_cond = speaker_embedding.unsqueeze(1).expand(-1, x_t.shape[1], -1)\n            x_t = self.timbre_cond_prosody_enc(\n                x_t, key_padding_mask=None, condition=spk_cond\n            )\n\n        # prosody\n        out += x_t\n\n        # content\n        for i in range(self.vq_num_q_c):\n            out += self.content_embs[i](vq[self.vq_num_q_p + i])\n\n        # residual\n        if use_residual:\n            for i in range(self.vq_num_q_r):\n                out += self.residual_embs[i](vq[self.vq_num_q_p + self.vq_num_q_c + i])\n\n        out = out.transpose(1, 2)  # (B, T, d) -> (B, d, T)\n        return out\n\n    def inference(self, x, speaker_embedding):\n        style = self.timbre_linear(speaker_embedding).unsqueeze(2)  # (B, 2d, 1)\n        gamma, beta = style.chunk(2, 1)  # (B, d, 1)\n        x = x.transpose(1, 2)\n        x = self.timbre_norm(x)\n        x = x.transpose(1, 2)\n        x = x * gamma + beta\n        x = self.model(x)\n        return x\n\n\nclass FACodecEncoderV2(nn.Module):\n    def __init__(\n        self,\n        ngf=32,\n        up_ratios=(2, 4, 5, 5),\n        out_channels=1024,\n    ):\n        super().__init__()\n        self.hop_length = np.prod(up_ratios)\n        self.up_ratios = up_ratios\n\n        # Create first convolution\n        d_model = ngf\n        self.block = [WNConv1d(1, d_model, kernel_size=7, padding=3)]\n\n        # Create EncoderBlocks that double channels as they downsample by `stride`\n        for stride in up_ratios:\n            d_model *= 2\n            self.block += [EncoderBlock(d_model, stride=stride)]\n\n        # Create last convolution\n        self.block += [\n            Activation1d(activation=SnakeBeta(d_model, alpha_logscale=True)),\n            WNConv1d(d_model, out_channels, kernel_size=3, padding=1),\n        ]\n\n        # Wrap black into nn.Sequential\n        self.block = nn.Sequential(*self.block)\n        self.enc_dim = d_model\n\n        self.mel_transform = MelSpectrogram(\n            n_fft=1024,\n            num_mels=80,\n            sampling_rate=16000,\n            hop_size=200,\n            win_size=800,\n            fmin=0,\n            fmax=8000,\n        )\n\n        self.reset_parameters()\n\n    def forward(self, x):\n        out = self.block(x)\n        return out\n\n    def inference(self, x):\n        return self.block(x)\n\n    def get_prosody_feature(self, x):\n        return self.mel_transform(x.squeeze(1))[:, :20, :]\n\n    def remove_weight_norm(self):\n        \"\"\"Remove weight normalization module from all of the layers.\"\"\"\n\n        def _remove_weight_norm(m):\n            try:\n                torch.nn.utils.remove_weight_norm(m)\n            except ValueError:  # this module didn't have weight norm\n                return\n\n        self.apply(_remove_weight_norm)\n\n    def apply_weight_norm(self):\n        \"\"\"Apply weight normalization module from all of the layers.\"\"\"\n\n        def _apply_weight_norm(m):\n            if isinstance(m, nn.Conv1d):\n                torch.nn.utils.weight_norm(m)\n\n        self.apply(_apply_weight_norm)\n\n    def reset_parameters(self):\n        self.apply(init_weights)\n\n\nclass FACodecDecoderV2(nn.Module):\n    def __init__(\n        self,\n        in_channels=256,\n        upsample_initial_channel=1536,\n        ngf=32,\n        up_ratios=(5, 5, 4, 2),\n        vq_num_q_c=2,\n        vq_num_q_p=1,\n        vq_num_q_r=3,\n        vq_dim=1024,\n        vq_commit_weight=0.005,\n        vq_weight_init=False,\n        vq_full_commit_loss=False,\n        codebook_dim=8,\n        codebook_size_prosody=10,  # true codebook size is equal to 2^codebook_size\n        codebook_size_content=10,\n        codebook_size_residual=10,\n        quantizer_dropout=0.0,\n        dropout_type=\"linear\",\n        use_gr_content_f0=False,\n        use_gr_prosody_phone=False,\n        use_gr_residual_f0=False,\n        use_gr_residual_phone=False,\n        use_gr_x_timbre=False,\n        use_random_mask_residual=True,\n        prob_random_mask_residual=0.75,\n    ):\n        super().__init__()\n        self.hop_length = np.prod(up_ratios)\n        self.ngf = ngf\n        self.up_ratios = up_ratios\n\n        self.use_random_mask_residual = use_random_mask_residual\n        self.prob_random_mask_residual = prob_random_mask_residual\n\n        self.vq_num_q_p = vq_num_q_p\n        self.vq_num_q_c = vq_num_q_c\n        self.vq_num_q_r = vq_num_q_r\n\n        self.codebook_size_prosody = codebook_size_prosody\n        self.codebook_size_content = codebook_size_content\n        self.codebook_size_residual = codebook_size_residual\n\n        quantizer_class = ResidualVQ\n\n        self.quantizer = nn.ModuleList()\n\n        # prosody\n        quantizer = quantizer_class(\n            num_quantizers=vq_num_q_p,\n            dim=vq_dim,\n            codebook_size=codebook_size_prosody,\n            codebook_dim=codebook_dim,\n            threshold_ema_dead_code=2,\n            commitment=vq_commit_weight,\n            weight_init=vq_weight_init,\n            full_commit_loss=vq_full_commit_loss,\n            quantizer_dropout=quantizer_dropout,\n            dropout_type=dropout_type,\n        )\n        self.quantizer.append(quantizer)\n\n        # phone\n        quantizer = quantizer_class(\n            num_quantizers=vq_num_q_c,\n            dim=vq_dim,\n            codebook_size=codebook_size_content,\n            codebook_dim=codebook_dim,\n            threshold_ema_dead_code=2,\n            commitment=vq_commit_weight,\n            weight_init=vq_weight_init,\n            full_commit_loss=vq_full_commit_loss,\n            quantizer_dropout=quantizer_dropout,\n            dropout_type=dropout_type,\n        )\n        self.quantizer.append(quantizer)\n\n        # residual\n        if self.vq_num_q_r > 0:\n            quantizer = quantizer_class(\n                num_quantizers=vq_num_q_r,\n                dim=vq_dim,\n                codebook_size=codebook_size_residual,\n                codebook_dim=codebook_dim,\n                threshold_ema_dead_code=2,\n                commitment=vq_commit_weight,\n                weight_init=vq_weight_init,\n                full_commit_loss=vq_full_commit_loss,\n                quantizer_dropout=quantizer_dropout,\n                dropout_type=dropout_type,\n            )\n            self.quantizer.append(quantizer)\n\n        # Add first conv layer\n        channels = upsample_initial_channel\n        layers = [WNConv1d(in_channels, channels, kernel_size=7, padding=3)]\n\n        # Add upsampling + MRF blocks\n        for i, stride in enumerate(up_ratios):\n            input_dim = channels // 2**i\n            output_dim = channels // 2 ** (i + 1)\n            layers += [DecoderBlock(input_dim, output_dim, stride)]\n\n        # Add final conv layer\n        layers += [\n            Activation1d(activation=SnakeBeta(output_dim, alpha_logscale=True)),\n            WNConv1d(output_dim, 1, kernel_size=7, padding=3),\n            nn.Tanh(),\n        ]\n\n        self.model = nn.Sequential(*layers)\n\n        self.timbre_encoder = TransformerEncoder(\n            enc_emb_tokens=None,\n            encoder_layer=4,\n            encoder_hidden=256,\n            encoder_head=4,\n            conv_filter_size=1024,\n            conv_kernel_size=5,\n            encoder_dropout=0.1,\n            use_cln=False,\n        )\n\n        self.timbre_linear = nn.Linear(in_channels, in_channels * 2)\n        self.timbre_linear.bias.data[:in_channels] = 1\n        self.timbre_linear.bias.data[in_channels:] = 0\n        self.timbre_norm = nn.LayerNorm(in_channels, elementwise_affine=False)\n\n        self.f0_predictor = CNNLSTM(in_channels, 1, 2)\n        self.phone_predictor = CNNLSTM(in_channels, 5003, 1)\n\n        self.use_gr_content_f0 = use_gr_content_f0\n        self.use_gr_prosody_phone = use_gr_prosody_phone\n        self.use_gr_residual_f0 = use_gr_residual_f0\n        self.use_gr_residual_phone = use_gr_residual_phone\n        self.use_gr_x_timbre = use_gr_x_timbre\n\n        if self.vq_num_q_r > 0 and self.use_gr_residual_f0:\n            self.res_f0_predictor = nn.Sequential(\n                GradientReversal(alpha=1.0), CNNLSTM(in_channels, 1, 2)\n            )\n\n        if self.vq_num_q_r > 0 and self.use_gr_residual_phone > 0:\n            self.res_phone_predictor = nn.Sequential(\n                GradientReversal(alpha=1.0), CNNLSTM(in_channels, 5003, 1)\n            )\n\n        if self.use_gr_content_f0:\n            self.content_f0_predictor = nn.Sequential(\n                GradientReversal(alpha=1.0), CNNLSTM(in_channels, 1, 2)\n            )\n\n        if self.use_gr_prosody_phone:\n            self.prosody_phone_predictor = nn.Sequential(\n                GradientReversal(alpha=1.0), CNNLSTM(in_channels, 5003, 1)\n            )\n\n        if self.use_gr_x_timbre:\n            self.x_timbre_predictor = nn.Sequential(\n                GradientReversal(alpha=1),\n                CNNLSTM(in_channels, 245200, 1, global_pred=True),\n            )\n\n        self.melspec_linear = nn.Linear(20, 256)\n        self.melspec_encoder = TransformerEncoder(\n            enc_emb_tokens=None,\n            encoder_layer=4,\n            encoder_hidden=256,\n            encoder_head=4,\n            conv_filter_size=1024,\n            conv_kernel_size=5,\n            encoder_dropout=0.1,\n            use_cln=False,\n            cfg=None,\n        )\n\n        self.reset_parameters()\n\n    def quantize(self, x, prosody_feature, n_quantizers=None):\n        outs, qs, commit_loss, quantized_buf = 0, [], [], []\n\n        # prosody\n        f0_input = prosody_feature.transpose(1, 2)  # (B, T, 20)\n        f0_input = self.melspec_linear(f0_input)\n        f0_input = self.melspec_encoder(f0_input, None, None)\n        f0_input = f0_input.transpose(1, 2)\n        f0_quantizer = self.quantizer[0]\n        out, q, commit, quantized = f0_quantizer(f0_input, n_quantizers=n_quantizers)\n        outs += out\n        qs.append(q)\n        quantized_buf.append(quantized.sum(0))\n        commit_loss.append(commit)\n\n        # phone\n        phone_input = x\n        phone_quantizer = self.quantizer[1]\n        out, q, commit, quantized = phone_quantizer(\n            phone_input, n_quantizers=n_quantizers\n        )\n        outs += out\n        qs.append(q)\n        quantized_buf.append(quantized.sum(0))\n        commit_loss.append(commit)\n\n        # residual\n        if self.vq_num_q_r > 0:\n            residual_quantizer = self.quantizer[2]\n            residual_input = x - (quantized_buf[0] + quantized_buf[1]).detach()\n            out, q, commit, quantized = residual_quantizer(\n                residual_input, n_quantizers=n_quantizers\n            )\n            outs += out\n            qs.append(q)\n            quantized_buf.append(quantized.sum(0))  # [L, B, C, T] -> [B, C, T]\n            commit_loss.append(commit)\n\n        qs = torch.cat(qs, dim=0)\n        commit_loss = torch.cat(commit_loss, dim=0)\n        return outs, qs, commit_loss, quantized_buf\n\n    def forward(\n        self,\n        x,\n        prosody_feature,\n        vq=True,\n        get_vq=False,\n        eval_vq=True,\n        speaker_embedding=None,\n        n_quantizers=None,\n        quantized=None,\n    ):\n        if get_vq:\n            return self.quantizer.get_emb()\n        if vq is True:\n            if eval_vq:\n                self.quantizer.eval()\n            x_timbre = x\n            outs, qs, commit_loss, quantized_buf = self.quantize(\n                x, prosody_feature, n_quantizers=n_quantizers\n            )\n\n            x_timbre = x_timbre.transpose(1, 2)\n            x_timbre = self.timbre_encoder(x_timbre, None, None)\n            x_timbre = x_timbre.transpose(1, 2)\n            spk_embs = torch.mean(x_timbre, dim=2)\n            return outs, qs, commit_loss, quantized_buf, spk_embs\n\n        out = {}\n\n        layer_0 = quantized[0]\n        f0, uv = self.f0_predictor(layer_0)\n        f0 = rearrange(f0, \"... 1 -> ...\")\n        uv = rearrange(uv, \"... 1 -> ...\")\n\n        layer_1 = quantized[1]\n        (phone,) = self.phone_predictor(layer_1)\n\n        out = {\"f0\": f0, \"uv\": uv, \"phone\": phone}\n\n        if self.use_gr_prosody_phone:\n            (prosody_phone,) = self.prosody_phone_predictor(layer_0)\n            out[\"prosody_phone\"] = prosody_phone\n\n        if self.use_gr_content_f0:\n            content_f0, content_uv = self.content_f0_predictor(layer_1)\n            content_f0 = rearrange(content_f0, \"... 1 -> ...\")\n            content_uv = rearrange(content_uv, \"... 1 -> ...\")\n            out[\"content_f0\"] = content_f0\n            out[\"content_uv\"] = content_uv\n\n        if self.vq_num_q_r > 0:\n            layer_2 = quantized[2]\n\n            if self.use_gr_residual_f0:\n                res_f0, res_uv = self.res_f0_predictor(layer_2)\n                res_f0 = rearrange(res_f0, \"... 1 -> ...\")\n                res_uv = rearrange(res_uv, \"... 1 -> ...\")\n                out[\"res_f0\"] = res_f0\n                out[\"res_uv\"] = res_uv\n\n            if self.use_gr_residual_phone:\n                (res_phone,) = self.res_phone_predictor(layer_2)\n                out[\"res_phone\"] = res_phone\n\n        style = self.timbre_linear(speaker_embedding).unsqueeze(2)  # (B, 2d, 1)\n        gamma, beta = style.chunk(2, 1)  # (B, d, 1)\n        if self.vq_num_q_r > 0:\n            if self.use_random_mask_residual:\n                bsz = quantized[2].shape[0]\n                res_mask = np.random.choice(\n                    [0, 1],\n                    size=bsz,\n                    p=[\n                        self.prob_random_mask_residual,\n                        1 - self.prob_random_mask_residual,\n                    ],\n                )\n                res_mask = (\n                    torch.from_numpy(res_mask).unsqueeze(1).unsqueeze(1)\n                )  # (B, 1, 1)\n                res_mask = res_mask.to(\n                    device=quantized[2].device, dtype=quantized[2].dtype\n                )\n                x = (\n                    quantized[0].detach()\n                    + quantized[1].detach()\n                    + quantized[2] * res_mask\n                )\n                # x = quantized_perturbe[0].detach() + quantized[1].detach() + quantized[2] * res_mask\n            else:\n                x = quantized[0].detach() + quantized[1].detach() + quantized[2]\n                # x = quantized_perturbe[0].detach() + quantized[1].detach() + quantized[2]\n        else:\n            x = quantized[0].detach() + quantized[1].detach()\n            # x = quantized_perturbe[0].detach() + quantized[1].detach()\n\n        if self.use_gr_x_timbre:\n            (x_timbre,) = self.x_timbre_predictor(x)\n            out[\"x_timbre\"] = x_timbre\n\n        x = x.transpose(1, 2)\n        x = self.timbre_norm(x)\n        x = x.transpose(1, 2)\n        x = x * gamma + beta\n\n        x = self.model(x)\n        out[\"audio\"] = x\n\n        return out\n\n    def vq2emb(self, vq, use_residual=True):\n        # vq: [num_quantizer, B, T]\n        self.quantizer = self.quantizer.eval()\n        out = 0\n        out += self.quantizer[0].vq2emb(vq[0 : self.vq_num_q_p])\n        out += self.quantizer[1].vq2emb(\n            vq[self.vq_num_q_p : self.vq_num_q_p + self.vq_num_q_c]\n        )\n        if self.vq_num_q_r > 0 and use_residual:\n            out += self.quantizer[2].vq2emb(vq[self.vq_num_q_p + self.vq_num_q_c :])\n        return out\n\n    def inference(self, x, speaker_embedding):\n        style = self.timbre_linear(speaker_embedding).unsqueeze(2)  # (B, 2d, 1)\n        gamma, beta = style.chunk(2, 1)  # (B, d, 1)\n        x = x.transpose(1, 2)\n        x = self.timbre_norm(x)\n        x = x.transpose(1, 2)\n        x = x * gamma + beta\n        x = self.model(x)\n        return x\n\n    def remove_weight_norm(self):\n        \"\"\"Remove weight normalization module from all of the layers.\"\"\"\n\n        def _remove_weight_norm(m):\n            try:\n                torch.nn.utils.remove_weight_norm(m)\n            except ValueError:  # this module didn't have weight norm\n                return\n\n        self.apply(_remove_weight_norm)\n\n    def apply_weight_norm(self):\n        \"\"\"Apply weight normalization module from all of the layers.\"\"\"\n\n        def _apply_weight_norm(m):\n            if isinstance(m, nn.Conv1d) or isinstance(m, nn.ConvTranspose1d):\n                torch.nn.utils.weight_norm(m)\n\n        self.apply(_apply_weight_norm)\n\n    def reset_parameters(self):\n        self.apply(init_weights)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/gradient_reversal.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom torch.autograd import Function\nimport torch\nfrom torch import nn\n\n\nclass GradientReversal(Function):\n    @staticmethod\n    def forward(ctx, x, alpha):\n        ctx.save_for_backward(x, alpha)\n        return x\n\n    @staticmethod\n    def backward(ctx, grad_output):\n        grad_input = None\n        _, alpha = ctx.saved_tensors\n        if ctx.needs_input_grad[0]:\n            grad_input = -alpha * grad_output\n        return grad_input, None\n\n\nrevgrad = GradientReversal.apply\n\n\nclass GradientReversal(nn.Module):\n    def __init__(self, alpha):\n        super().__init__()\n        self.alpha = torch.tensor(alpha, requires_grad=False)\n\n    def forward(self, x):\n        return revgrad(x, self.alpha)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/melspec.py",
    "content": "import torch\nimport pyworld as pw\nimport numpy as np\nimport soundfile as sf\nimport os\nfrom torchaudio.functional import pitch_shift\nimport librosa\nfrom librosa.filters import mel as librosa_mel_fn\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\ndef dynamic_range_compression(x, C=1, clip_val=1e-5):\n    return np.log(np.clip(x, a_min=clip_val, a_max=None) * C)\n\n\ndef dynamic_range_decompression(x, C=1):\n    return np.exp(x) / C\n\n\ndef dynamic_range_compression_torch(x, C=1, clip_val=1e-5):\n    return torch.log(torch.clamp(x, min=clip_val) * C)\n\n\ndef dynamic_range_decompression_torch(x, C=1):\n    return torch.exp(x) / C\n\n\ndef spectral_normalize_torch(magnitudes):\n    output = dynamic_range_compression_torch(magnitudes)\n    return output\n\n\ndef spectral_de_normalize_torch(magnitudes):\n    output = dynamic_range_decompression_torch(magnitudes)\n    return output\n\n\nclass MelSpectrogram(nn.Module):\n    def __init__(\n        self,\n        n_fft,\n        num_mels,\n        sampling_rate,\n        hop_size,\n        win_size,\n        fmin,\n        fmax,\n        center=False,\n    ):\n        super(MelSpectrogram, self).__init__()\n        self.n_fft = n_fft\n        self.hop_size = hop_size\n        self.win_size = win_size\n        self.sampling_rate = sampling_rate\n        self.num_mels = num_mels\n        self.fmin = fmin\n        self.fmax = fmax\n        self.center = center\n\n        mel_basis = {}\n        hann_window = {}\n\n        mel = librosa_mel_fn(\n            sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax\n        )\n        mel_basis = torch.from_numpy(mel).float()\n        hann_window = torch.hann_window(win_size)\n\n        self.register_buffer(\"mel_basis\", mel_basis)\n        self.register_buffer(\"hann_window\", hann_window)\n\n    def forward(self, y):\n        y = torch.nn.functional.pad(\n            y.unsqueeze(1),\n            (\n                int((self.n_fft - self.hop_size) / 2),\n                int((self.n_fft - self.hop_size) / 2),\n            ),\n            mode=\"reflect\",\n        )\n        y = y.squeeze(1)\n        spec = torch.stft(\n            y,\n            self.n_fft,\n            hop_length=self.hop_size,\n            win_length=self.win_size,\n            window=self.hann_window,\n            center=self.center,\n            pad_mode=\"reflect\",\n            normalized=False,\n            onesided=True,\n            return_complex=True,\n        )\n        spec = torch.view_as_real(spec)\n\n        spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9))\n\n        spec = torch.matmul(self.mel_basis, spec)\n        spec = spectral_normalize_torch(spec)\n\n        return spec\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/quantize/__init__.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom .fvq import *\nfrom .rvq import *\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/quantize/fvq.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Union\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom torch.nn.utils import weight_norm\n\n\nclass FactorizedVectorQuantize(nn.Module):\n    def __init__(self, dim, codebook_size, codebook_dim, commitment, **kwargs):\n        super().__init__()\n        self.codebook_size = codebook_size\n        self.codebook_dim = codebook_dim\n        self.commitment = commitment\n\n        if dim != self.codebook_dim:\n            self.in_proj = weight_norm(nn.Linear(dim, self.codebook_dim))\n            self.out_proj = weight_norm(nn.Linear(self.codebook_dim, dim))\n        else:\n            self.in_proj = nn.Identity()\n            self.out_proj = nn.Identity()\n        self._codebook = nn.Embedding(codebook_size, self.codebook_dim)\n\n    @property\n    def codebook(self):\n        return self._codebook\n\n    def forward(self, z):\n        \"\"\"Quantized the input tensor using a fixed codebook and returns\n        the corresponding codebook vectors\n\n        Parameters\n        ----------\n        z : Tensor[B x D x T]\n\n        Returns\n        -------\n        Tensor[B x D x T]\n            Quantized continuous representation of input\n        Tensor[1]\n            Commitment loss to train encoder to predict vectors closer to codebook\n            entries\n        Tensor[1]\n            Codebook loss to update the codebook\n        Tensor[B x T]\n            Codebook indices (quantized discrete representation of input)\n        Tensor[B x D x T]\n            Projected latents (continuous representation of input before quantization)\n        \"\"\"\n        # transpose since we use linear\n\n        z = rearrange(z, \"b d t -> b t d\")\n\n        # Factorized codes project input into low-dimensional space\n        z_e = self.in_proj(z)  # z_e : (B x T x D)\n        z_e = rearrange(z_e, \"b t d -> b d t\")\n        z_q, indices = self.decode_latents(z_e)\n\n        if self.training:\n            commitment_loss = (\n                F.mse_loss(z_e, z_q.detach(), reduction=\"none\").mean([1, 2])\n                * self.commitment\n            )\n            codebook_loss = F.mse_loss(z_q, z_e.detach(), reduction=\"none\").mean([1, 2])\n            commit_loss = commitment_loss + codebook_loss\n        else:\n            commit_loss = torch.zeros(z.shape[0], device=z.device)\n\n        z_q = (\n            z_e + (z_q - z_e).detach()\n        )  # noop in forward pass, straight-through gradient estimator in backward pass\n\n        z_q = rearrange(z_q, \"b d t -> b t d\")\n        z_q = self.out_proj(z_q)\n        z_q = rearrange(z_q, \"b t d -> b d t\")\n\n        return z_q, indices, commit_loss\n\n    def vq2emb(self, vq, proj=True):\n        emb = self.embed_code(vq)\n        if proj:\n            emb = self.out_proj(emb)\n        return emb.transpose(1, 2)\n\n    def get_emb(self):\n        return self.codebook.weight\n\n    def embed_code(self, embed_id):\n        return F.embedding(embed_id, self.codebook.weight)\n\n    def decode_code(self, embed_id):\n        return self.embed_code(embed_id).transpose(1, 2)\n\n    def decode_latents(self, latents):\n        encodings = rearrange(latents, \"b d t -> (b t) d\")\n        codebook = self.codebook.weight  # codebook: (N x D)\n        # L2 normalize encodings and codebook\n        encodings = F.normalize(encodings)\n        codebook = F.normalize(codebook)\n\n        # Compute euclidean distance with codebook\n        dist = (\n            encodings.pow(2).sum(1, keepdim=True)\n            - 2 * encodings @ codebook.t()\n            + codebook.pow(2).sum(1, keepdim=True).t()\n        )\n        indices = rearrange((-dist).max(1)[1], \"(b t) -> b t\", b=latents.size(0))\n        z_q = self.decode_code(indices)\n        return z_q, indices\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/quantize/rvq.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nimport torch\nfrom torch import nn\nfrom .fvq import FactorizedVectorQuantize\n\n\nclass ResidualVQ(nn.Module):\n    \"\"\"Follows Algorithm 1. in https://arxiv.org/pdf/2107.03312.pdf\"\"\"\n\n    def __init__(self, *, num_quantizers, codebook_size, **kwargs):\n        super().__init__()\n        VQ = FactorizedVectorQuantize\n        if type(codebook_size) == int:\n            codebook_size = [codebook_size] * num_quantizers\n        self.layers = nn.ModuleList(\n            [VQ(codebook_size=2**size, **kwargs) for size in codebook_size]\n        )\n        self.num_quantizers = num_quantizers\n        self.quantizer_dropout = kwargs.get(\"quantizer_dropout\", 0.0)\n        self.dropout_type = kwargs.get(\"dropout_type\", None)\n\n    def forward(self, x, n_quantizers=None):\n        quantized_out = 0.0\n        residual = x\n\n        all_losses = []\n        all_indices = []\n        all_quantized = []\n\n        if n_quantizers is None:\n            n_quantizers = self.num_quantizers\n        if self.training:\n            n_quantizers = torch.ones((x.shape[0],)) * self.num_quantizers + 1\n            if self.dropout_type == \"linear\":\n                dropout = torch.randint(1, self.num_quantizers + 1, (x.shape[0],))\n            elif self.dropout_type == \"exp\":\n                dropout = torch.randint(\n                    1, int(math.log2(self.num_quantizers)), (x.shape[0],)\n                )\n                dropout = torch.pow(2, dropout)\n            n_dropout = int(x.shape[0] * self.quantizer_dropout)\n            n_quantizers[:n_dropout] = dropout[:n_dropout]\n            n_quantizers = n_quantizers.to(x.device)\n\n        for idx, layer in enumerate(self.layers):\n            if not self.training and idx >= n_quantizers:\n                break\n            quantized, indices, loss = layer(residual)\n\n            mask = (\n                torch.full((x.shape[0],), fill_value=idx, device=x.device)\n                < n_quantizers\n            )\n\n            residual = residual - quantized\n\n            quantized_out = quantized_out + quantized * mask[:, None, None]\n\n            # loss\n            loss = (loss * mask).mean()\n\n            all_indices.append(indices)\n            all_losses.append(loss)\n            all_quantized.append(quantized)\n        all_losses, all_indices, all_quantized = map(\n            torch.stack, (all_losses, all_indices, all_quantized)\n        )\n        return quantized_out, all_indices, all_losses, all_quantized\n\n    def vq2emb(self, vq):\n        # vq: [n_quantizers, B, T]\n        quantized_out = 0.0\n        for idx, layer in enumerate(self.layers):\n            quantized = layer.vq2emb(vq[idx])\n            quantized_out += quantized\n        return quantized_out\n\n    def get_emb(self):\n        embs = []\n        for idx, layer in enumerate(self.layers):\n            embs.append(layer.get_emb())\n        return embs\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/transformer.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport math\nfrom torch.nn import functional as F\n\n\nclass StyleAdaptiveLayerNorm(nn.Module):\n    def __init__(self, normalized_shape, eps=1e-5):\n        super().__init__()\n        self.in_dim = normalized_shape\n        self.norm = nn.LayerNorm(self.in_dim, eps=eps, elementwise_affine=False)\n        self.style = nn.Linear(self.in_dim, self.in_dim * 2)\n        self.style.bias.data[: self.in_dim] = 1\n        self.style.bias.data[self.in_dim :] = 0\n\n    def forward(self, x, condition):\n        # x: (B, T, d); condition: (B, T, d)\n\n        style = self.style(torch.mean(condition, dim=1, keepdim=True))\n\n        gamma, beta = style.chunk(2, -1)\n\n        out = self.norm(x)\n\n        out = gamma * out + beta\n        return out\n\n\nclass PositionalEncoding(nn.Module):\n    def __init__(self, d_model, dropout, max_len=5000):\n        super().__init__()\n\n        self.dropout = dropout\n        position = torch.arange(max_len).unsqueeze(1)\n        div_term = torch.exp(\n            torch.arange(0, d_model, 2) * (-math.log(10000.0) / d_model)\n        )\n        pe = torch.zeros(max_len, 1, d_model)\n        pe[:, 0, 0::2] = torch.sin(position * div_term)\n        pe[:, 0, 1::2] = torch.cos(position * div_term)\n        self.register_buffer(\"pe\", pe)\n\n    def forward(self, x):\n        x = x + self.pe[: x.size(0)]\n        return F.dropout(x, self.dropout, training=self.training)\n\n\nclass TransformerFFNLayer(nn.Module):\n    def __init__(\n        self, encoder_hidden, conv_filter_size, conv_kernel_size, encoder_dropout\n    ):\n        super().__init__()\n\n        self.encoder_hidden = encoder_hidden\n        self.conv_filter_size = conv_filter_size\n        self.conv_kernel_size = conv_kernel_size\n        self.encoder_dropout = encoder_dropout\n\n        self.ffn_1 = nn.Conv1d(\n            self.encoder_hidden,\n            self.conv_filter_size,\n            self.conv_kernel_size,\n            padding=self.conv_kernel_size // 2,\n        )\n        self.ffn_1.weight.data.normal_(0.0, 0.02)\n        self.ffn_2 = nn.Linear(self.conv_filter_size, self.encoder_hidden)\n        self.ffn_2.weight.data.normal_(0.0, 0.02)\n\n    def forward(self, x):\n        # x: (B, T, d)\n        x = self.ffn_1(x.permute(0, 2, 1)).permute(\n            0, 2, 1\n        )  # (B, T, d) -> (B, d, T) -> (B, T, d)\n        x = F.relu(x)\n        x = F.dropout(x, self.encoder_dropout, training=self.training)\n        x = self.ffn_2(x)\n        return x\n\n\nclass TransformerEncoderLayer(nn.Module):\n    def __init__(\n        self,\n        encoder_hidden,\n        encoder_head,\n        conv_filter_size,\n        conv_kernel_size,\n        encoder_dropout,\n        use_cln,\n    ):\n        super().__init__()\n        self.encoder_hidden = encoder_hidden\n        self.encoder_head = encoder_head\n        self.conv_filter_size = conv_filter_size\n        self.conv_kernel_size = conv_kernel_size\n        self.encoder_dropout = encoder_dropout\n        self.use_cln = use_cln\n\n        if not self.use_cln:\n            self.ln_1 = nn.LayerNorm(self.encoder_hidden)\n            self.ln_2 = nn.LayerNorm(self.encoder_hidden)\n        else:\n            self.ln_1 = StyleAdaptiveLayerNorm(self.encoder_hidden)\n            self.ln_2 = StyleAdaptiveLayerNorm(self.encoder_hidden)\n\n        self.self_attn = nn.MultiheadAttention(\n            self.encoder_hidden, self.encoder_head, batch_first=True\n        )\n\n        self.ffn = TransformerFFNLayer(\n            self.encoder_hidden,\n            self.conv_filter_size,\n            self.conv_kernel_size,\n            self.encoder_dropout,\n        )\n\n    def forward(self, x, key_padding_mask, conditon=None):\n        # x: (B, T, d); key_padding_mask: (B, T), mask is 0; condition: (B, T, d)\n\n        # self attention\n        residual = x\n        if self.use_cln:\n            x = self.ln_1(x, conditon)\n        else:\n            x = self.ln_1(x)\n\n        if key_padding_mask != None:\n            key_padding_mask_input = ~(key_padding_mask.bool())\n        else:\n            key_padding_mask_input = None\n        x, _ = self.self_attn(\n            query=x, key=x, value=x, key_padding_mask=key_padding_mask_input\n        )\n        x = F.dropout(x, self.encoder_dropout, training=self.training)\n        x = residual + x\n\n        # ffn\n        residual = x\n        if self.use_cln:\n            x = self.ln_2(x, conditon)\n        else:\n            x = self.ln_2(x)\n        x = self.ffn(x)\n        x = residual + x\n\n        return x\n\n\nclass TransformerEncoder(nn.Module):\n    def __init__(\n        self,\n        enc_emb_tokens=None,\n        encoder_layer=4,\n        encoder_hidden=256,\n        encoder_head=4,\n        conv_filter_size=1024,\n        conv_kernel_size=5,\n        encoder_dropout=0.1,\n        use_cln=False,\n        cfg=None,\n    ):\n        super().__init__()\n\n        self.encoder_layer = (\n            encoder_layer if encoder_layer is not None else cfg.encoder_layer\n        )\n        self.encoder_hidden = (\n            encoder_hidden if encoder_hidden is not None else cfg.encoder_hidden\n        )\n        self.encoder_head = (\n            encoder_head if encoder_head is not None else cfg.encoder_head\n        )\n        self.conv_filter_size = (\n            conv_filter_size if conv_filter_size is not None else cfg.conv_filter_size\n        )\n        self.conv_kernel_size = (\n            conv_kernel_size if conv_kernel_size is not None else cfg.conv_kernel_size\n        )\n        self.encoder_dropout = (\n            encoder_dropout if encoder_dropout is not None else cfg.encoder_dropout\n        )\n        self.use_cln = use_cln if use_cln is not None else cfg.use_cln\n\n        if enc_emb_tokens != None:\n            self.use_enc_emb = True\n            self.enc_emb_tokens = enc_emb_tokens\n        else:\n            self.use_enc_emb = False\n\n        self.position_emb = PositionalEncoding(\n            self.encoder_hidden, self.encoder_dropout\n        )\n\n        self.layers = nn.ModuleList([])\n        self.layers.extend(\n            [\n                TransformerEncoderLayer(\n                    self.encoder_hidden,\n                    self.encoder_head,\n                    self.conv_filter_size,\n                    self.conv_kernel_size,\n                    self.encoder_dropout,\n                    self.use_cln,\n                )\n                for i in range(self.encoder_layer)\n            ]\n        )\n\n        if self.use_cln:\n            self.last_ln = StyleAdaptiveLayerNorm(self.encoder_hidden)\n        else:\n            self.last_ln = nn.LayerNorm(self.encoder_hidden)\n\n    def forward(self, x, key_padding_mask, condition=None):\n        if len(x.shape) == 2 and self.use_enc_emb:\n            x = self.enc_emb_tokens(x)\n            x = self.position_emb(x)\n        else:\n            x = self.position_emb(x)  # (B, T, d)\n\n        for layer in self.layers:\n            x = layer(x, key_padding_mask, condition)\n\n        if self.use_cln:\n            x = self.last_ln(x, condition)\n        else:\n            x = self.last_ln(x)\n\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/model.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This code is modified from https://github.com/ZhangXInFD/SpeechTokenizer/blob/main/speechtokenizer/model.py\n# Licensed under Apache License 2.0\n\nfrom .modules.seanet import SEANetEncoder, SEANetDecoder\nfrom .modules.quantization import ResidualVectorQuantizer\nimport torch.nn as nn\nfrom einops import rearrange\nimport torch\nimport numpy as np\n\n\nclass SpeechTokenizer(nn.Module):\n    def __init__(self, config):\n        \"\"\"\n\n        Parameters\n        ----------\n        config : json\n            Model Config.\n\n        \"\"\"\n        super().__init__()\n        self.encoder = SEANetEncoder(\n            n_filters=config.get(\"n_filters\"),\n            dimension=config.get(\"dimension\"),\n            ratios=config.get(\"strides\"),\n            lstm=config.get(\"lstm_layers\"),\n            bidirectional=config.get(\"bidirectional\"),\n            dilation_base=config.get(\"dilation_base\"),\n            residual_kernel_size=config.get(\"residual_kernel_size\"),\n            n_residual_layers=config.get(\"n_residual_layers\"),\n            activation=config.get(\"activation\"),\n        )\n        self.sample_rate = config.get(\"sample_rate\")\n        self.n_q = config.get(\"n_q\")\n        self.downsample_rate = np.prod(config.get(\"strides\"))\n        if config.get(\"dimension\") != config.get(\"semantic_dimension\"):\n            self.transform = nn.Linear(\n                config.get(\"dimension\"), config.get(\"semantic_dimension\")\n            )\n        else:\n            self.transform = nn.Identity()\n        self.quantizer = ResidualVectorQuantizer(\n            dimension=config.get(\"dimension\"),\n            n_q=config.get(\"n_q\"),\n            bins=config.get(\"codebook_size\"),\n        )\n        self.decoder = SEANetDecoder(\n            n_filters=config.get(\"n_filters\"),\n            dimension=config.get(\"dimension\"),\n            ratios=config.get(\"strides\"),\n            lstm=config.get(\"lstm_layers\"),\n            bidirectional=False,\n            dilation_base=config.get(\"dilation_base\"),\n            residual_kernel_size=config.get(\"residual_kernel_size\"),\n            n_residual_layers=config.get(\"n_residual_layers\"),\n            activation=config.get(\"activation\"),\n        )\n\n    @classmethod\n    def load_from_checkpoint(cls, config_path: str, ckpt_path: str):\n        \"\"\"\n\n        Parameters\n        ----------\n        config_path : str\n            Path of model configuration file.\n        ckpt_path : str\n            Path of model  checkpoint.\n\n        Returns\n        -------\n        model : SpeechTokenizer\n            SpeechTokenizer model.\n\n        \"\"\"\n        import json\n\n        with open(config_path) as f:\n            cfg = json.load(f)\n        model = cls(cfg)\n        params = torch.load(ckpt_path, map_location=\"cpu\")\n        model.load_state_dict(params)\n        return model\n\n    def forward(self, x: torch.tensor, n_q: int = None, layers: list = [0]):\n        \"\"\"\n\n        Parameters\n        ----------\n        x : torch.tensor\n            Input wavs. Shape: (batch, channels, timesteps).\n        n_q : int, optional\n            Number of quantizers in RVQ used to encode. The default is all layers.\n        layers : list[int], optional\n            Layers of RVQ should return quantized result. The default is the first layer.\n\n        Returns\n        -------\n        o : torch.tensor\n            Output wavs. Shape: (batch, channels, timesteps).\n        commit_loss : torch.tensor\n            Commitment loss from residual vector quantizers.\n        feature : torch.tensor\n            Output of RVQ's first layer. Shape: (batch, timesteps, dimension)\n\n        \"\"\"\n        n_q = n_q if n_q else self.n_q\n        e = self.encoder(x)\n        quantized, codes, commit_loss, quantized_list = self.quantizer(\n            e, n_q=n_q, layers=layers\n        )\n        feature = rearrange(quantized_list[0], \"b d t -> b t d\")\n        feature = self.transform(feature)\n        o = self.decoder(quantized)\n        return o, commit_loss, feature\n\n    def forward_feature(self, x: torch.tensor, layers: list = None):\n        \"\"\"\n\n        Parameters\n        ----------\n        x : torch.tensor\n            Input wavs. Shape should be (batch, channels, timesteps).\n        layers : list[int], optional\n            Layers of RVQ should return quantized result. The default is all layers.\n\n        Returns\n        -------\n        quantized_list : list[torch.tensor]\n            Quantized of required layers.\n\n        \"\"\"\n        e = self.encoder(x)\n        layers = layers if layers else list(range(self.n_q))\n        quantized, codes, commit_loss, quantized_list = self.quantizer(e, layers=layers)\n        return quantized_list\n\n    def encode(self, x: torch.tensor, n_q: int = None, st: int = None):\n        \"\"\"\n\n        Parameters\n        ----------\n        x : torch.tensor\n            Input wavs. Shape: (batch, channels, timesteps).\n        n_q : int, optional\n            Number of quantizers in RVQ used to encode. The default is all layers.\n        st : int, optional\n            Start quantizer index in RVQ. The default is 0.\n\n        Returns\n        -------\n        codes : torch.tensor\n            Output indices for each quantizer. Shape: (n_q, batch, timesteps)\n\n        \"\"\"\n        e = self.encoder(x)\n        if st is None:\n            st = 0\n        n_q = n_q if n_q else self.n_q\n        codes = self.quantizer.encode(e, n_q=n_q, st=st)\n        return codes\n\n    def decode(self, codes: torch.tensor, st: int = 0):\n        \"\"\"\n\n        Parameters\n        ----------\n        codes : torch.tensor\n            Indices for each quantizer. Shape: (n_q, batch, timesteps).\n        st : int, optional\n            Start quantizer index in RVQ. The default is 0.\n\n        Returns\n        -------\n        o : torch.tensor\n            Reconstruct wavs from codes. Shape: (batch, channels, timesteps)\n\n        \"\"\"\n        quantized = self.quantizer.decode(codes, st=st)\n        o = self.decoder(quantized)\n        return o\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/__init__.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Torch modules.\"\"\"\n\n# flake8: noqa\nfrom .conv import (\n    pad1d,\n    unpad1d,\n    NormConv1d,\n    NormConvTranspose1d,\n    NormConv2d,\n    NormConvTranspose2d,\n    SConv1d,\n    SConvTranspose1d,\n)\nfrom .lstm import SLSTM\nfrom .seanet import SEANetEncoder, SEANetDecoder\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/conv.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Convolutional layers wrappers and utilities.\"\"\"\n\nimport math\nimport typing as tp\nimport warnings\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nfrom torch.nn.utils import spectral_norm, weight_norm\n\nfrom .norm import ConvLayerNorm\n\n\nCONV_NORMALIZATIONS = frozenset(\n    [\n        \"none\",\n        \"weight_norm\",\n        \"spectral_norm\",\n        \"time_layer_norm\",\n        \"layer_norm\",\n        \"time_group_norm\",\n    ]\n)\n\n\ndef apply_parametrization_norm(module: nn.Module, norm: str = \"none\") -> nn.Module:\n    assert norm in CONV_NORMALIZATIONS\n    if norm == \"weight_norm\":\n        return weight_norm(module)\n    elif norm == \"spectral_norm\":\n        return spectral_norm(module)\n    else:\n        # We already check was in CONV_NORMALIZATION, so any other choice\n        # doesn't need reparametrization.\n        return module\n\n\ndef get_norm_module(\n    module: nn.Module, causal: bool = False, norm: str = \"none\", **norm_kwargs\n) -> nn.Module:\n    \"\"\"Return the proper normalization module. If causal is True, this will ensure the returned\n    module is causal, or return an error if the normalization doesn't support causal evaluation.\n    \"\"\"\n    assert norm in CONV_NORMALIZATIONS\n    if norm == \"layer_norm\":\n        assert isinstance(module, nn.modules.conv._ConvNd)\n        return ConvLayerNorm(module.out_channels, **norm_kwargs)\n    elif norm == \"time_group_norm\":\n        if causal:\n            raise ValueError(\"GroupNorm doesn't support causal evaluation.\")\n        assert isinstance(module, nn.modules.conv._ConvNd)\n        return nn.GroupNorm(1, module.out_channels, **norm_kwargs)\n    else:\n        return nn.Identity()\n\n\ndef get_extra_padding_for_conv1d(\n    x: torch.Tensor, kernel_size: int, stride: int, padding_total: int = 0\n) -> int:\n    \"\"\"See `pad_for_conv1d`.\"\"\"\n    length = x.shape[-1]\n    n_frames = (length - kernel_size + padding_total) / stride + 1\n    ideal_length = (math.ceil(n_frames) - 1) * stride + (kernel_size - padding_total)\n    return ideal_length - length\n\n\ndef pad_for_conv1d(\n    x: torch.Tensor, kernel_size: int, stride: int, padding_total: int = 0\n):\n    \"\"\"Pad for a convolution to make sure that the last window is full.\n    Extra padding is added at the end. This is required to ensure that we can rebuild\n    an output of the same length, as otherwise, even with padding, some time steps\n    might get removed.\n    For instance, with total padding = 4, kernel size = 4, stride = 2:\n        0 0 1 2 3 4 5 0 0   # (0s are padding)\n        1   2   3           # (output frames of a convolution, last 0 is never used)\n        0 0 1 2 3 4 5 0     # (output of tr. conv., but pos. 5 is going to get removed as padding)\n            1 2 3 4         # once you removed padding, we are missing one time step !\n    \"\"\"\n    extra_padding = get_extra_padding_for_conv1d(x, kernel_size, stride, padding_total)\n    return F.pad(x, (0, extra_padding))\n\n\ndef pad1d(\n    x: torch.Tensor,\n    paddings: tp.Tuple[int, int],\n    mode: str = \"zero\",\n    value: float = 0.0,\n):\n    \"\"\"Tiny wrapper around F.pad, just to allow for reflect padding on small input.\n    If this is the case, we insert extra 0 padding to the right before the reflection happen.\n    \"\"\"\n    length = x.shape[-1]\n    padding_left, padding_right = paddings\n    assert padding_left >= 0 and padding_right >= 0, (padding_left, padding_right)\n    if mode == \"reflect\":\n        max_pad = max(padding_left, padding_right)\n        extra_pad = 0\n        if length <= max_pad:\n            extra_pad = max_pad - length + 1\n            x = F.pad(x, (0, extra_pad))\n        padded = F.pad(x, paddings, mode, value)\n        end = padded.shape[-1] - extra_pad\n        return padded[..., :end]\n    else:\n        return F.pad(x, paddings, mode, value)\n\n\ndef unpad1d(x: torch.Tensor, paddings: tp.Tuple[int, int]):\n    \"\"\"Remove padding from x, handling properly zero padding. Only for 1d!\"\"\"\n    padding_left, padding_right = paddings\n    assert padding_left >= 0 and padding_right >= 0, (padding_left, padding_right)\n    assert (padding_left + padding_right) <= x.shape[-1]\n    end = x.shape[-1] - padding_right\n    return x[..., padding_left:end]\n\n\nclass NormConv1d(nn.Module):\n    \"\"\"Wrapper around Conv1d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n\n    def __init__(\n        self,\n        *args,\n        causal: bool = False,\n        norm: str = \"none\",\n        norm_kwargs: tp.Dict[str, tp.Any] = {},\n        **kwargs,\n    ):\n        super().__init__()\n        self.conv = apply_parametrization_norm(nn.Conv1d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.conv, causal, norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.norm(x)\n        return x\n\n\nclass NormConv2d(nn.Module):\n    \"\"\"Wrapper around Conv2d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n\n    def __init__(\n        self,\n        *args,\n        norm: str = \"none\",\n        norm_kwargs: tp.Dict[str, tp.Any] = {},\n        **kwargs,\n    ):\n        super().__init__()\n        self.conv = apply_parametrization_norm(nn.Conv2d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.conv, causal=False, norm=norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.norm(x)\n        return x\n\n\nclass NormConvTranspose1d(nn.Module):\n    \"\"\"Wrapper around ConvTranspose1d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n\n    def __init__(\n        self,\n        *args,\n        causal: bool = False,\n        norm: str = \"none\",\n        norm_kwargs: tp.Dict[str, tp.Any] = {},\n        **kwargs,\n    ):\n        super().__init__()\n        self.convtr = apply_parametrization_norm(\n            nn.ConvTranspose1d(*args, **kwargs), norm\n        )\n        self.norm = get_norm_module(self.convtr, causal, norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.convtr(x)\n        x = self.norm(x)\n        return x\n\n\nclass NormConvTranspose2d(nn.Module):\n    \"\"\"Wrapper around ConvTranspose2d and normalization applied to this conv\n    to provide a uniform interface across normalization approaches.\n    \"\"\"\n\n    def __init__(\n        self,\n        *args,\n        norm: str = \"none\",\n        norm_kwargs: tp.Dict[str, tp.Any] = {},\n        **kwargs,\n    ):\n        super().__init__()\n        self.convtr = apply_parametrization_norm(\n            nn.ConvTranspose2d(*args, **kwargs), norm\n        )\n        self.norm = get_norm_module(self.convtr, causal=False, norm=norm, **norm_kwargs)\n\n    def forward(self, x):\n        x = self.convtr(x)\n        x = self.norm(x)\n        return x\n\n\nclass SConv1d(nn.Module):\n    \"\"\"Conv1d with some builtin handling of asymmetric or causal padding\n    and normalization.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size: int,\n        stride: int = 1,\n        dilation: int = 1,\n        groups: int = 1,\n        bias: bool = True,\n        causal: bool = False,\n        norm: str = \"none\",\n        norm_kwargs: tp.Dict[str, tp.Any] = {},\n        pad_mode: str = \"reflect\",\n    ):\n        super().__init__()\n        # warn user on unusual setup between dilation and stride\n        if stride > 1 and dilation > 1:\n            warnings.warn(\n                \"SConv1d has been initialized with stride > 1 and dilation > 1\"\n                f\" (kernel_size={kernel_size} stride={stride}, dilation={dilation}).\"\n            )\n        self.conv = NormConv1d(\n            in_channels,\n            out_channels,\n            kernel_size,\n            stride,\n            dilation=dilation,\n            groups=groups,\n            bias=bias,\n            causal=causal,\n            norm=norm,\n            norm_kwargs=norm_kwargs,\n        )\n        self.causal = causal\n        self.pad_mode = pad_mode\n\n    def forward(self, x):\n        B, C, T = x.shape\n        kernel_size = self.conv.conv.kernel_size[0]\n        stride = self.conv.conv.stride[0]\n        dilation = self.conv.conv.dilation[0]\n        padding_total = (kernel_size - 1) * dilation - (stride - 1)\n        extra_padding = get_extra_padding_for_conv1d(\n            x, kernel_size, stride, padding_total\n        )\n        if self.causal:\n            # Left padding for causal\n            x = pad1d(x, (padding_total, extra_padding), mode=self.pad_mode)\n        else:\n            # Asymmetric padding required for odd strides\n            padding_right = padding_total // 2\n            padding_left = padding_total - padding_right\n            x = pad1d(\n                x, (padding_left, padding_right + extra_padding), mode=self.pad_mode\n            )\n        return self.conv(x)\n\n\nclass SConvTranspose1d(nn.Module):\n    \"\"\"ConvTranspose1d with some builtin handling of asymmetric or causal padding\n    and normalization.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size: int,\n        stride: int = 1,\n        causal: bool = False,\n        norm: str = \"none\",\n        trim_right_ratio: float = 1.0,\n        norm_kwargs: tp.Dict[str, tp.Any] = {},\n    ):\n        super().__init__()\n        self.convtr = NormConvTranspose1d(\n            in_channels,\n            out_channels,\n            kernel_size,\n            stride,\n            causal=causal,\n            norm=norm,\n            norm_kwargs=norm_kwargs,\n        )\n        self.causal = causal\n        self.trim_right_ratio = trim_right_ratio\n        assert (\n            self.causal or self.trim_right_ratio == 1.0\n        ), \"`trim_right_ratio` != 1.0 only makes sense for causal convolutions\"\n        assert self.trim_right_ratio >= 0.0 and self.trim_right_ratio <= 1.0\n\n    def forward(self, x):\n        kernel_size = self.convtr.convtr.kernel_size[0]\n        stride = self.convtr.convtr.stride[0]\n        padding_total = kernel_size - stride\n\n        y = self.convtr(x)\n\n        # We will only trim fixed padding. Extra padding from `pad_for_conv1d` would be\n        # removed at the very end, when keeping only the right length for the output,\n        # as removing it here would require also passing the length at the matching layer\n        # in the encoder.\n        if self.causal:\n            # Trim the padding on the right according to the specified ratio\n            # if trim_right_ratio = 1.0, trim everything from right\n            padding_right = math.ceil(padding_total * self.trim_right_ratio)\n            padding_left = padding_total - padding_right\n            y = unpad1d(y, (padding_left, padding_right))\n        else:\n            # Asymmetric padding required for odd strides\n            padding_right = padding_total // 2\n            padding_left = padding_total - padding_right\n            y = unpad1d(y, (padding_left, padding_right))\n        return y\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/lstm.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"LSTM layers module.\"\"\"\n\nfrom torch import nn\n\n\nclass SLSTM(nn.Module):\n    \"\"\"\n    LSTM without worrying about the hidden state, nor the layout of the data.\n    Expects input as convolutional layout.\n    \"\"\"\n\n    def __init__(\n        self,\n        dimension: int,\n        num_layers: int = 2,\n        skip: bool = True,\n        bidirectional: bool = False,\n    ):\n        super().__init__()\n        self.bidirectional = bidirectional\n        self.skip = skip\n        self.lstm = nn.LSTM(\n            dimension, dimension, num_layers, bidirectional=bidirectional\n        )\n\n    def forward(self, x):\n        x = x.permute(2, 0, 1)\n        y, _ = self.lstm(x)\n        if self.bidirectional:\n            x = x.repeat(1, 1, 2)\n        if self.skip:\n            y = y + x\n        y = y.permute(1, 2, 0)\n        return y\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/norm.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Normalization modules.\"\"\"\n\nimport typing as tp\n\nimport einops\nimport torch\nfrom torch import nn\n\n\nclass ConvLayerNorm(nn.LayerNorm):\n    \"\"\"\n    Convolution-friendly LayerNorm that moves channels to last dimensions\n    before running the normalization and moves them back to original position right after.\n    \"\"\"\n\n    def __init__(\n        self, normalized_shape: tp.Union[int, tp.List[int], torch.Size], **kwargs\n    ):\n        super().__init__(normalized_shape, **kwargs)\n\n    def forward(self, x):\n        x = einops.rearrange(x, \"b ... t -> b t ...\")\n        x = super().forward(x)\n        x = einops.rearrange(x, \"b t ... -> b ... t\")\n        return\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/__init__.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n# flake8: noqa\nfrom .vq import QuantizedResult, ResidualVectorQuantizer\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/ac.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Arithmetic coder.\"\"\"\n\nimport io\nimport math\nimport random\nimport typing as tp\nimport torch\n\nfrom ..binary import BitPacker, BitUnpacker\n\n\ndef build_stable_quantized_cdf(\n    pdf: torch.Tensor,\n    total_range_bits: int,\n    roundoff: float = 1e-8,\n    min_range: int = 2,\n    check: bool = True,\n) -> torch.Tensor:\n    \"\"\"Turn the given PDF into a quantized CDF that splits\n    [0, 2 ** self.total_range_bits - 1] into chunks of size roughly proportional\n    to the PDF.\n\n    Args:\n        pdf (torch.Tensor): probability distribution, shape should be `[N]`.\n        total_range_bits (int): see `ArithmeticCoder`, the typical range we expect\n            during the coding process is `[0, 2 ** total_range_bits - 1]`.\n        roundoff (float): will round the pdf up to that level to remove difference coming\n        from e.g. evaluating the Language Model on different architectures.\n        min_range (int): minimum range width. Should always be at least 2 for numerical\n            stability. Use this to avoid pathological behavior is a value\n            that is expected to be rare actually happens in real life.\n        check (bool): if True, checks that nothing bad happened, can be deactivated for speed.\n    \"\"\"\n    pdf = pdf.detach()\n    if roundoff:\n        pdf = (pdf / roundoff).floor() * roundoff\n    # interpolate with uniform distribution to achieve desired minimum probability.\n    total_range = 2**total_range_bits\n    cardinality = len(pdf)\n    alpha = min_range * cardinality / total_range\n    assert alpha <= 1, \"you must reduce min_range\"\n    ranges = (((1 - alpha) * total_range) * pdf).floor().long()\n    ranges += min_range\n    quantized_cdf = torch.cumsum(ranges, dim=-1)\n    if min_range < 2:\n        raise ValueError(\"min_range must be at least 2.\")\n    if check:\n        assert quantized_cdf[-1] <= 2**total_range_bits, quantized_cdf[-1]\n        if (\n            (quantized_cdf[1:] - quantized_cdf[:-1]) < min_range\n        ).any() or quantized_cdf[0] < min_range:\n            raise ValueError(\"You must increase your total_range_bits.\")\n    return quantized_cdf\n\n\nclass ArithmeticCoder:\n    \"\"\"ArithmeticCoder,\n    Let us take a distribution `p` over `N` symbols, and assume we have a stream\n    of random variables `s_t` sampled from `p`. Let us assume that we have a budget\n    of `B` bits that we can afford to write on device. There are `2**B` possible numbers,\n    corresponding to the range `[0, 2 ** B - 1]`. We can map each of those number to a single\n    sequence `(s_t)` by doing the following:\n\n    1) Initialize the current range to` [0 ** 2 B - 1]`.\n    2) For each time step t, split the current range into contiguous chunks,\n        one for each possible outcome, with size roughly proportional to `p`.\n        For instance, if `p = [0.75, 0.25]`, and the range is `[0, 3]`, the chunks\n        would be `{[0, 2], [3, 3]}`.\n    3) Select the chunk corresponding to `s_t`, and replace the current range with this.\n    4) When done encoding all the values, just select any value remaining in the range.\n\n    You will notice that this procedure can fail: for instance if at any point in time\n    the range is smaller than `N`, then we can no longer assign a non-empty chunk to each\n    possible outcome. Intuitively, the more likely a value is, the less the range width\n    will reduce, and the longer we can go on encoding values. This makes sense: for any efficient\n    coding scheme, likely outcomes would take less bits, and more of them can be coded\n    with a fixed budget.\n\n    In practice, we do not know `B` ahead of time, but we have a way to inject new bits\n    when the current range decreases below a given limit (given by `total_range_bits`), without\n    having to redo all the computations. If we encode mostly likely values, we will seldom\n    need to inject new bits, but a single rare value can deplete our stock of entropy!\n\n    In this explanation, we assumed that the distribution `p` was constant. In fact, the present\n    code works for any sequence `(p_t)` possibly different for each timestep.\n    We also assume that `s_t ~ p_t`, but that doesn't need to be true, although the smaller\n    the KL between the true distribution and `p_t`, the most efficient the coding will be.\n\n    Args:\n        fo (IO[bytes]): file-like object to which the bytes will be written to.\n        total_range_bits (int): the range `M` described above is `2 ** total_range_bits.\n            Any time the current range width fall under this limit, new bits will\n            be injected to rescale the initial range.\n    \"\"\"\n\n    def __init__(self, fo: tp.IO[bytes], total_range_bits: int = 24):\n        assert total_range_bits <= 30\n        self.total_range_bits = total_range_bits\n        self.packer = BitPacker(bits=1, fo=fo)  # we push single bits at a time.\n        self.low: int = 0\n        self.high: int = 0\n        self.max_bit: int = -1\n        self._dbg: tp.List[tp.Any] = []\n        self._dbg2: tp.List[tp.Any] = []\n\n    @property\n    def delta(self) -> int:\n        \"\"\"Return the current range width.\"\"\"\n        return self.high - self.low + 1\n\n    def _flush_common_prefix(self):\n        # If self.low and self.high start with the sames bits,\n        # those won't change anymore as we always just increase the range\n        # by powers of 2, and we can flush them out to the bit stream.\n        assert self.high >= self.low, (self.low, self.high)\n        assert self.high < 2 ** (self.max_bit + 1)\n        while self.max_bit >= 0:\n            b1 = self.low >> self.max_bit\n            b2 = self.high >> self.max_bit\n            if b1 == b2:\n                self.low -= b1 << self.max_bit\n                self.high -= b1 << self.max_bit\n                assert self.high >= self.low, (self.high, self.low, self.max_bit)\n                assert self.low >= 0\n                self.max_bit -= 1\n                self.packer.push(b1)\n            else:\n                break\n\n    def push(self, symbol: int, quantized_cdf: torch.Tensor):\n        \"\"\"Push the given symbol on the stream, flushing out bits\n        if possible.\n\n        Args:\n            symbol (int): symbol to encode with the AC.\n            quantized_cdf (torch.Tensor): use `build_stable_quantized_cdf`\n                to build this from your pdf estimate.\n        \"\"\"\n        while self.delta < 2**self.total_range_bits:\n            self.low *= 2\n            self.high = self.high * 2 + 1\n            self.max_bit += 1\n\n        range_low = 0 if symbol == 0 else quantized_cdf[symbol - 1].item()\n        range_high = quantized_cdf[symbol].item() - 1\n        effective_low = int(\n            math.ceil(range_low * (self.delta / (2**self.total_range_bits)))\n        )\n        effective_high = int(\n            math.floor(range_high * (self.delta / (2**self.total_range_bits)))\n        )\n        assert self.low <= self.high\n        self.high = self.low + effective_high\n        self.low = self.low + effective_low\n        assert self.low <= self.high, (\n            effective_low,\n            effective_high,\n            range_low,\n            range_high,\n        )\n        self._dbg.append((self.low, self.high))\n        self._dbg2.append((self.low, self.high))\n        outs = self._flush_common_prefix()\n        assert self.low <= self.high\n        assert self.max_bit >= -1\n        assert self.max_bit <= 61, self.max_bit\n        return outs\n\n    def flush(self):\n        \"\"\"Flush the remaining information to the stream.\"\"\"\n        while self.max_bit >= 0:\n            b1 = (self.low >> self.max_bit) & 1\n            self.packer.push(b1)\n            self.max_bit -= 1\n        self.packer.flush()\n\n\nclass ArithmeticDecoder:\n    \"\"\"ArithmeticDecoder, see `ArithmeticCoder` for a detailed explanation.\n\n    Note that this must be called with **exactly** the same parameters and sequence\n    of quantized cdf as the arithmetic encoder or the wrong values will be decoded.\n\n    If the AC encoder current range is [L, H], with `L` and `H` having the some common\n    prefix (i.e. the same most significant bits), then this prefix will be flushed to the stream.\n    For instances, having read 3 bits `b1 b2 b3`, we know that `[L, H]` is contained inside\n    `[b1 b2 b3 0 ... 0 b1 b3 b3 1 ... 1]`. Now this specific sub-range can only be obtained\n    for a specific sequence of symbols and a binary-search allows us to decode those symbols.\n    At some point, the prefix `b1 b2 b3` will no longer be sufficient to decode new symbols,\n    and we will need to read new bits from the stream and repeat the process.\n\n    \"\"\"\n\n    def __init__(self, fo: tp.IO[bytes], total_range_bits: int = 24):\n        self.total_range_bits = total_range_bits\n        self.low: int = 0\n        self.high: int = 0\n        self.current: int = 0\n        self.max_bit: int = -1\n        self.unpacker = BitUnpacker(bits=1, fo=fo)  # we pull single bits at a time.\n        # Following is for debugging\n        self._dbg: tp.List[tp.Any] = []\n        self._dbg2: tp.List[tp.Any] = []\n        self._last: tp.Any = None\n\n    @property\n    def delta(self) -> int:\n        return self.high - self.low + 1\n\n    def _flush_common_prefix(self):\n        # Given the current range [L, H], if both have a common prefix,\n        # we know we can remove it from our representation to avoid handling large numbers.\n        while self.max_bit >= 0:\n            b1 = self.low >> self.max_bit\n            b2 = self.high >> self.max_bit\n            if b1 == b2:\n                self.low -= b1 << self.max_bit\n                self.high -= b1 << self.max_bit\n                self.current -= b1 << self.max_bit\n                assert self.high >= self.low\n                assert self.low >= 0\n                self.max_bit -= 1\n            else:\n                break\n\n    def pull(self, quantized_cdf: torch.Tensor) -> tp.Optional[int]:\n        \"\"\"Pull a symbol, reading as many bits from the stream as required.\n        This returns `None` when the stream has been exhausted.\n\n        Args:\n            quantized_cdf (torch.Tensor): use `build_stable_quantized_cdf`\n                to build this from your pdf estimate. This must be **exatly**\n                the same cdf as the one used at encoding time.\n        \"\"\"\n        while self.delta < 2**self.total_range_bits:\n            bit = self.unpacker.pull()\n            if bit is None:\n                return None\n            self.low *= 2\n            self.high = self.high * 2 + 1\n            self.current = self.current * 2 + bit\n            self.max_bit += 1\n\n        def bin_search(low_idx: int, high_idx: int):\n            # Binary search is not just for coding interviews :)\n            if high_idx < low_idx:\n                raise RuntimeError(\"Binary search failed\")\n            mid = (low_idx + high_idx) // 2\n            range_low = quantized_cdf[mid - 1].item() if mid > 0 else 0\n            range_high = quantized_cdf[mid].item() - 1\n            effective_low = int(\n                math.ceil(range_low * (self.delta / (2**self.total_range_bits)))\n            )\n            effective_high = int(\n                math.floor(range_high * (self.delta / (2**self.total_range_bits)))\n            )\n            low = effective_low + self.low\n            high = effective_high + self.low\n            if self.current >= low:\n                if self.current <= high:\n                    return (mid, low, high, self.current)\n                else:\n                    return bin_search(mid + 1, high_idx)\n            else:\n                return bin_search(low_idx, mid - 1)\n\n        self._last = (self.low, self.high, self.current, self.max_bit)\n        sym, self.low, self.high, self.current = bin_search(0, len(quantized_cdf) - 1)\n        self._dbg.append((self.low, self.high, self.current))\n        self._flush_common_prefix()\n        self._dbg2.append((self.low, self.high, self.current))\n\n        return sym\n\n\ndef test():\n    torch.manual_seed(1234)\n    random.seed(1234)\n    for _ in range(4):\n        pdfs = []\n        cardinality = random.randrange(4000)\n        steps = random.randrange(100, 500)\n        fo = io.BytesIO()\n        encoder = ArithmeticCoder(fo)\n        symbols = []\n        for step in range(steps):\n            pdf = torch.softmax(torch.randn(cardinality), dim=0)\n            pdfs.append(pdf)\n            q_cdf = build_stable_quantized_cdf(pdf, encoder.total_range_bits)\n            symbol = torch.multinomial(pdf, 1).item()\n            symbols.append(symbol)\n            encoder.push(symbol, q_cdf)\n        encoder.flush()\n\n        fo.seek(0)\n        decoder = ArithmeticDecoder(fo)\n        for idx, (pdf, symbol) in enumerate(zip(pdfs, symbols)):\n            q_cdf = build_stable_quantized_cdf(pdf, encoder.total_range_bits)\n            decoded_symbol = decoder.pull(q_cdf)\n            assert decoded_symbol == symbol, idx\n        assert decoder.pull(torch.zeros(1)) is None\n\n\nif __name__ == \"__main__\":\n    test()\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/core_vq.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n#\n# This implementation is inspired from\n# https://github.com/lucidrains/vector-quantize-pytorch\n# which is released under MIT License. Hereafter, the original license:\n# MIT License\n#\n# Copyright (c) 2020 Phil Wang\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\n\n\"\"\"Core vector quantization implementation.\"\"\"\nimport typing as tp\n\nfrom einops import rearrange, repeat\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\n\nfrom .distrib import broadcast_tensors, rank\n\n\ndef default(val: tp.Any, d: tp.Any) -> tp.Any:\n    return val if val is not None else d\n\n\ndef ema_inplace(moving_avg, new, decay: float):\n    moving_avg.data.mul_(decay).add_(new, alpha=(1 - decay))\n\n\ndef laplace_smoothing(x, n_categories: int, epsilon: float = 1e-5):\n    return (x + epsilon) / (x.sum() + n_categories * epsilon)\n\n\ndef uniform_init(*shape: int):\n    t = torch.empty(shape)\n    nn.init.kaiming_uniform_(t)\n    return t\n\n\ndef sample_vectors(samples, num: int):\n    num_samples, device = samples.shape[0], samples.device\n\n    if num_samples >= num:\n        indices = torch.randperm(num_samples, device=device)[:num]\n    else:\n        indices = torch.randint(0, num_samples, (num,), device=device)\n\n    return samples[indices]\n\n\ndef kmeans(samples, num_clusters: int, num_iters: int = 10):\n    dim, dtype = samples.shape[-1], samples.dtype\n\n    means = sample_vectors(samples, num_clusters)\n\n    for _ in range(num_iters):\n        diffs = rearrange(samples, \"n d -> n () d\") - rearrange(means, \"c d -> () c d\")\n        dists = -(diffs**2).sum(dim=-1)\n\n        buckets = dists.max(dim=-1).indices\n        bins = torch.bincount(buckets, minlength=num_clusters)\n        zero_mask = bins == 0\n        bins_min_clamped = bins.masked_fill(zero_mask, 1)\n\n        new_means = buckets.new_zeros(num_clusters, dim, dtype=dtype)\n        new_means.scatter_add_(0, repeat(buckets, \"n -> n d\", d=dim), samples)\n        new_means = new_means / bins_min_clamped[..., None]\n\n        means = torch.where(zero_mask[..., None], means, new_means)\n\n    return means, bins\n\n\nclass EuclideanCodebook(nn.Module):\n    \"\"\"Codebook with Euclidean distance.\n    Args:\n        dim (int): Dimension.\n        codebook_size (int): Codebook size.\n        kmeans_init (bool): Whether to use k-means to initialize the codebooks.\n            If set to true, run the k-means algorithm on the first training batch and use\n            the learned centroids as initialization.\n        kmeans_iters (int): Number of iterations used for k-means algorithm at initialization.\n        decay (float): Decay for exponential moving average over the codebooks.\n        epsilon (float): Epsilon value for numerical stability.\n        threshold_ema_dead_code (int): Threshold for dead code expiration. Replace any codes\n            that have an exponential moving average cluster size less than the specified threshold with\n            randomly selected vector from the current batch.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        codebook_size: int,\n        kmeans_init: int = False,\n        kmeans_iters: int = 10,\n        decay: float = 0.99,\n        epsilon: float = 1e-5,\n        threshold_ema_dead_code: int = 2,\n    ):\n        super().__init__()\n        self.decay = decay\n        init_fn: tp.Union[tp.Callable[..., torch.Tensor], tp.Any] = (\n            uniform_init if not kmeans_init else torch.zeros\n        )\n        embed = init_fn(codebook_size, dim)\n\n        self.codebook_size = codebook_size\n\n        self.kmeans_iters = kmeans_iters\n        self.epsilon = epsilon\n        self.threshold_ema_dead_code = threshold_ema_dead_code\n\n        self.register_buffer(\"inited\", torch.Tensor([not kmeans_init]))\n        self.register_buffer(\"cluster_size\", torch.zeros(codebook_size))\n        self.register_buffer(\"embed\", embed)\n        self.register_buffer(\"embed_avg\", embed.clone())\n\n    @torch.jit.ignore\n    def init_embed_(self, data):\n        if self.inited:\n            return\n\n        embed, cluster_size = kmeans(data, self.codebook_size, self.kmeans_iters)\n        self.embed.data.copy_(embed)\n        self.embed_avg.data.copy_(embed.clone())\n        self.cluster_size.data.copy_(cluster_size)\n        self.inited.data.copy_(torch.Tensor([True]))\n        # Make sure all buffers across workers are in sync after initialization\n        # broadcast_tensors(self.buffers())\n\n    def replace_(self, samples, mask):\n        modified_codebook = torch.where(\n            mask[..., None], sample_vectors(samples, self.codebook_size), self.embed\n        )\n        self.embed.data.copy_(modified_codebook)\n\n    def expire_codes_(self, batch_samples):\n        if self.threshold_ema_dead_code == 0:\n            return\n\n        expired_codes = self.cluster_size < self.threshold_ema_dead_code\n        if not torch.any(expired_codes):\n            return\n\n        batch_samples = rearrange(batch_samples, \"... d -> (...) d\")\n        self.replace_(batch_samples, mask=expired_codes)\n        # broadcast_tensors(self.buffers())\n\n    def preprocess(self, x):\n        x = rearrange(x, \"... d -> (...) d\")\n        return x\n\n    def quantize(self, x):\n        embed = self.embed.t()\n        dist = -(\n            x.pow(2).sum(1, keepdim=True)\n            - 2 * x @ embed\n            + embed.pow(2).sum(0, keepdim=True)\n        )\n        embed_ind = dist.max(dim=-1).indices\n        return embed_ind\n\n    def postprocess_emb(self, embed_ind, shape):\n        return embed_ind.view(*shape[:-1])\n\n    def dequantize(self, embed_ind):\n        quantize = F.embedding(embed_ind, self.embed)\n        return quantize\n\n    def encode(self, x):\n        shape = x.shape\n        # pre-process\n        x = self.preprocess(x)\n        # quantize\n        embed_ind = self.quantize(x)\n        # post-process\n        embed_ind = self.postprocess_emb(embed_ind, shape)\n        return embed_ind\n\n    def decode(self, embed_ind):\n        quantize = self.dequantize(embed_ind)\n        return quantize\n\n    def forward(self, x):\n        shape, dtype = x.shape, x.dtype\n        x = self.preprocess(x)\n\n        self.init_embed_(x)\n\n        embed_ind = self.quantize(x)\n        embed_onehot = F.one_hot(embed_ind, self.codebook_size).type(dtype)\n        embed_ind = self.postprocess_emb(embed_ind, shape)\n        quantize = self.dequantize(embed_ind)\n\n        if self.training:\n            # We do the expiry of code at that point as buffers are in sync\n            # and all the workers will take the same decision.\n            self.expire_codes_(x)\n            ema_inplace(self.cluster_size, embed_onehot.sum(0), self.decay)\n            embed_sum = x.t() @ embed_onehot\n            ema_inplace(self.embed_avg, embed_sum.t(), self.decay)\n            cluster_size = (\n                laplace_smoothing(self.cluster_size, self.codebook_size, self.epsilon)\n                * self.cluster_size.sum()\n            )\n            embed_normalized = self.embed_avg / cluster_size.unsqueeze(1)\n            self.embed.data.copy_(embed_normalized)\n\n        return quantize, embed_ind\n\n\nclass VectorQuantization(nn.Module):\n    \"\"\"Vector quantization implementation.\n    Currently supports only euclidean distance.\n    Args:\n        dim (int): Dimension\n        codebook_size (int): Codebook size\n        codebook_dim (int): Codebook dimension. If not defined, uses the specified dimension in dim.\n        decay (float): Decay for exponential moving average over the codebooks.\n        epsilon (float): Epsilon value for numerical stability.\n        kmeans_init (bool): Whether to use kmeans to initialize the codebooks.\n        kmeans_iters (int): Number of iterations used for kmeans initialization.\n        threshold_ema_dead_code (int): Threshold for dead code expiration. Replace any codes\n            that have an exponential moving average cluster size less than the specified threshold with\n            randomly selected vector from the current batch.\n        commitment_weight (float): Weight for commitment loss.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        codebook_size: int,\n        codebook_dim: tp.Optional[int] = None,\n        decay: float = 0.99,\n        epsilon: float = 1e-5,\n        kmeans_init: bool = True,\n        kmeans_iters: int = 50,\n        threshold_ema_dead_code: int = 2,\n        commitment_weight: float = 1.0,\n    ):\n        super().__init__()\n        _codebook_dim: int = default(codebook_dim, dim)\n\n        requires_projection = _codebook_dim != dim\n        self.project_in = (\n            nn.Linear(dim, _codebook_dim) if requires_projection else nn.Identity()\n        )\n        self.project_out = (\n            nn.Linear(_codebook_dim, dim) if requires_projection else nn.Identity()\n        )\n\n        self.epsilon = epsilon\n        self.commitment_weight = commitment_weight\n\n        self._codebook = EuclideanCodebook(\n            dim=_codebook_dim,\n            codebook_size=codebook_size,\n            kmeans_init=kmeans_init,\n            kmeans_iters=kmeans_iters,\n            decay=decay,\n            epsilon=epsilon,\n            threshold_ema_dead_code=threshold_ema_dead_code,\n        )\n        self.codebook_size = codebook_size\n\n    @property\n    def codebook(self):\n        return self._codebook.embed\n\n    def encode(self, x):\n        x = rearrange(x, \"b d n -> b n d\")\n        x = self.project_in(x)\n        embed_in = self._codebook.encode(x)\n        return embed_in\n\n    def decode(self, embed_ind):\n        quantize = self._codebook.decode(embed_ind)\n        quantize = self.project_out(quantize)\n        quantize = rearrange(quantize, \"b n d -> b d n\")\n        return quantize\n\n    def forward(self, x):\n        device = x.device\n        x = rearrange(x, \"b d n -> b n d\")\n        x = self.project_in(x)\n\n        quantize, embed_ind = self._codebook(x)\n\n        if self.training:\n            quantize = x + (quantize - x).detach()\n\n        loss = torch.tensor([0.0], device=device, requires_grad=self.training)\n\n        if self.training:\n            if self.commitment_weight > 0:\n                commit_loss = F.mse_loss(quantize.detach(), x)\n                loss = loss + commit_loss * self.commitment_weight\n\n        quantize = self.project_out(quantize)\n        quantize = rearrange(quantize, \"b n d -> b d n\")\n        return quantize, embed_ind, loss\n\n\nclass ResidualVectorQuantization(nn.Module):\n    \"\"\"Residual vector quantization implementation.\n    Follows Algorithm 1. in https://arxiv.org/pdf/2107.03312.pdf\n    \"\"\"\n\n    def __init__(self, *, num_quantizers, **kwargs):\n        super().__init__()\n        self.layers = nn.ModuleList(\n            [VectorQuantization(**kwargs) for _ in range(num_quantizers)]\n        )\n\n    def forward(\n        self, x, n_q: tp.Optional[int] = None, layers: tp.Optional[list] = None\n    ):\n        quantized_out = 0.0\n        residual = x\n\n        all_losses = []\n        all_indices = []\n        out_quantized = []\n\n        n_q = n_q or len(self.layers)\n\n        for i, layer in enumerate(self.layers[:n_q]):\n            quantized, indices, loss = layer(residual)\n            residual = residual - quantized\n            quantized_out = quantized_out + quantized\n\n            all_indices.append(indices)\n            all_losses.append(loss)\n            if layers and i in layers:\n                out_quantized.append(quantized)\n\n        out_losses, out_indices = map(torch.stack, (all_losses, all_indices))\n        return quantized_out, out_indices, out_losses, out_quantized\n\n    def encode(\n        self, x: torch.Tensor, n_q: tp.Optional[int] = None, st: tp.Optional[int] = None\n    ) -> torch.Tensor:\n        residual = x\n        all_indices = []\n        n_q = n_q or len(self.layers)\n        st = st or 0\n        for layer in self.layers[st:n_q]:\n            indices = layer.encode(residual)\n            quantized = layer.decode(indices)\n            residual = residual - quantized\n            all_indices.append(indices)\n        out_indices = torch.stack(all_indices)\n        return out_indices\n\n    def decode(self, q_indices: torch.Tensor, st: int = 0) -> torch.Tensor:\n        quantized_out = torch.tensor(0.0, device=q_indices.device)\n        for i, indices in enumerate(q_indices):\n            layer = self.layers[st + i]\n            quantized = layer.decode(indices)\n            quantized_out = quantized_out + quantized\n        return quantized_out\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/distrib.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Torch distributed utilities.\"\"\"\n\nimport typing as tp\n\nimport torch\n\n\ndef rank():\n    if torch.distributed.is_initialized():\n        return torch.distributed.get_rank()\n    else:\n        return 0\n\n\ndef world_size():\n    if torch.distributed.is_initialized():\n        return torch.distributed.get_world_size()\n    else:\n        return 1\n\n\ndef is_distributed():\n    return world_size() > 1\n\n\ndef all_reduce(tensor: torch.Tensor, op=torch.distributed.ReduceOp.SUM):\n    if is_distributed():\n        return torch.distributed.all_reduce(tensor, op)\n\n\ndef _is_complex_or_float(tensor):\n    return torch.is_floating_point(tensor) or torch.is_complex(tensor)\n\n\ndef _check_number_of_params(params: tp.List[torch.Tensor]):\n    # utility function to check that the number of params in all workers is the same,\n    # and thus avoid a deadlock with distributed all reduce.\n    if not is_distributed() or not params:\n        return\n    # print('params[0].device ', params[0].device)\n    tensor = torch.tensor([len(params)], device=params[0].device, dtype=torch.long)\n    all_reduce(tensor)\n    if tensor.item() != len(params) * world_size():\n        # If not all the workers have the same number, for at least one of them,\n        # this inequality will be verified.\n        raise RuntimeError(\n            f\"Mismatch in number of params: ours is {len(params)}, \"\n            \"at least one worker has a different one.\"\n        )\n\n\ndef broadcast_tensors(tensors: tp.Iterable[torch.Tensor], src: int = 0):\n    \"\"\"Broadcast the tensors from the given parameters to all workers.\n    This can be used to ensure that all workers have the same model to start with.\n    \"\"\"\n    if not is_distributed():\n        return\n    tensors = [tensor for tensor in tensors if _is_complex_or_float(tensor)]\n    _check_number_of_params(tensors)\n    handles = []\n    for tensor in tensors:\n        # src = int(rank()) # added code\n        handle = torch.distributed.broadcast(tensor.data, src=src, async_op=True)\n        handles.append(handle)\n    for handle in handles:\n        handle.wait()\n\n\ndef sync_buffer(buffers, average=True):\n    \"\"\"\n    Sync grad for buffers. If average is False, broadcast instead of averaging.\n    \"\"\"\n    if not is_distributed():\n        return\n    handles = []\n    for buffer in buffers:\n        if torch.is_floating_point(buffer.data):\n            if average:\n                handle = torch.distributed.all_reduce(\n                    buffer.data, op=torch.distributed.ReduceOp.SUM, async_op=True\n                )\n            else:\n                handle = torch.distributed.broadcast(buffer.data, src=0, async_op=True)\n            handles.append((buffer, handle))\n    for buffer, handle in handles:\n        handle.wait()\n        if average:\n            buffer.data /= world_size\n\n\ndef sync_grad(params):\n    \"\"\"\n    Simpler alternative to DistributedDataParallel, that doesn't rely\n    on any black magic. For simple models it can also be as fast.\n    Just call this on your model parameters after the call to backward!\n    \"\"\"\n    if not is_distributed():\n        return\n    handles = []\n    for p in params:\n        if p.grad is not None:\n            handle = torch.distributed.all_reduce(\n                p.grad.data, op=torch.distributed.ReduceOp.SUM, async_op=True\n            )\n            handles.append((p, handle))\n    for p, handle in handles:\n        handle.wait()\n        p.grad.data /= world_size()\n\n\ndef average_metrics(metrics: tp.Dict[str, float], count=1.0):\n    \"\"\"Average a dictionary of metrics across all workers, using the optional\n    `count` as unormalized weight.\n    \"\"\"\n    if not is_distributed():\n        return metrics\n    keys, values = zip(*metrics.items())\n    device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n    tensor = torch.tensor(list(values) + [1], device=device, dtype=torch.float32)\n    tensor *= count\n    all_reduce(tensor)\n    averaged = (tensor[:-1] / tensor[-1]).cpu().tolist()\n    return dict(zip(keys, averaged))\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/vq.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Residual vector quantizer implementation.\"\"\"\n\nfrom dataclasses import dataclass, field\nimport math\nimport typing as tp\n\nimport torch\nfrom torch import nn\n\nfrom .core_vq import ResidualVectorQuantization\n\n\n@dataclass\nclass QuantizedResult:\n    quantized: torch.Tensor\n    codes: torch.Tensor\n    bandwidth: torch.Tensor  # bandwidth in kb/s used, per batch item.\n    penalty: tp.Optional[torch.Tensor] = None\n    metrics: dict = field(default_factory=dict)\n\n\nclass ResidualVectorQuantizer(nn.Module):\n    \"\"\"Residual Vector Quantizer.\n    Args:\n        dimension (int): Dimension of the codebooks.\n        n_q (int): Number of residual vector quantizers used.\n        bins (int): Codebook size.\n        decay (float): Decay for exponential moving average over the codebooks.\n        kmeans_init (bool): Whether to use kmeans to initialize the codebooks.\n        kmeans_iters (int): Number of iterations used for kmeans initialization.\n        threshold_ema_dead_code (int): Threshold for dead code expiration. Replace any codes\n            that have an exponential moving average cluster size less than the specified threshold with\n            randomly selected vector from the current batch.\n    \"\"\"\n\n    def __init__(\n        self,\n        dimension: int = 256,\n        n_q: int = 8,\n        bins: int = 1024,\n        decay: float = 0.99,\n        kmeans_init: bool = True,\n        kmeans_iters: int = 50,\n        threshold_ema_dead_code: int = 2,\n    ):\n        super().__init__()\n        self.n_q = n_q\n        self.dimension = dimension\n        self.bins = bins\n        self.decay = decay\n        self.kmeans_init = kmeans_init\n        self.kmeans_iters = kmeans_iters\n        self.threshold_ema_dead_code = threshold_ema_dead_code\n        self.vq = ResidualVectorQuantization(\n            dim=self.dimension,\n            codebook_size=self.bins,\n            num_quantizers=self.n_q,\n            decay=self.decay,\n            kmeans_init=self.kmeans_init,\n            kmeans_iters=self.kmeans_iters,\n            threshold_ema_dead_code=self.threshold_ema_dead_code,\n        )\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        n_q: tp.Optional[int] = None,\n        layers: tp.Optional[list] = None,\n    ) -> QuantizedResult:\n        \"\"\"Residual vector quantization on the given input tensor.\n        Args:\n            x (torch.Tensor): Input tensor.\n            n_q (int): Number of quantizer used to quantize. Default: All quantizers.\n            layers (list): Layer that need to return quantized. Defalt: None.\n        Returns:\n            QuantizedResult:\n                The quantized (or approximately quantized) representation with\n                the associated numbert quantizers and layer quantized required to return.\n        \"\"\"\n        n_q = n_q if n_q else self.n_q\n        if layers and max(layers) >= n_q:\n            raise ValueError(\n                f\"Last layer index in layers: A {max(layers)}. Number of quantizers in RVQ: B {self.n_q}. A must less than B.\"\n            )\n        quantized, codes, commit_loss, quantized_list = self.vq(\n            x, n_q=n_q, layers=layers\n        )\n        return quantized, codes, torch.mean(commit_loss), quantized_list\n\n    def encode(\n        self, x: torch.Tensor, n_q: tp.Optional[int] = None, st: tp.Optional[int] = None\n    ) -> torch.Tensor:\n        \"\"\"Encode a given input tensor with the specified sample rate at the given bandwidth.\n        The RVQ encode method sets the appropriate number of quantizer to use\n        and returns indices for each quantizer.\n        Args:\n            x (torch.Tensor): Input tensor.\n            n_q (int): Number of quantizer used to quantize. Default: All quantizers.\n            st (int): Start to encode input from which layers. Default: 0.\n        \"\"\"\n        n_q = n_q if n_q else self.n_q\n        st = st or 0\n        codes = self.vq.encode(x, n_q=n_q, st=st)\n        return codes\n\n    def decode(self, codes: torch.Tensor, st: int = 0) -> torch.Tensor:\n        \"\"\"Decode the given codes to the quantized representation.\n        Args:\n            codes (torch.Tensor): Input indices for each quantizer.\n            st (int): Start to decode input codes from which layers. Default: 0.\n        \"\"\"\n        quantized = self.vq.decode(codes, st=st)\n        return quantized\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/seanet.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n# This source file is copied from https://github.com/facebookresearch/encodec\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Encodec SEANet-based encoder and decoder implementation.\"\"\"\n\nimport typing as tp\n\nimport numpy as np\nimport torch.nn as nn\nimport torch\n\nfrom . import SConv1d, SConvTranspose1d, SLSTM\n\n\n@torch.jit.script\ndef snake(x, alpha):\n    shape = x.shape\n    x = x.reshape(shape[0], shape[1], -1)\n    x = x + (alpha + 1e-9).reciprocal() * torch.sin(alpha * x).pow(2)\n    x = x.reshape(shape)\n    return x\n\n\nclass Snake1d(nn.Module):\n    def __init__(self, channels):\n        super().__init__()\n        self.alpha = nn.Parameter(torch.ones(1, channels, 1))\n\n    def forward(self, x):\n        return snake(x, self.alpha)\n\n\nclass SEANetResnetBlock(nn.Module):\n    \"\"\"Residual block from SEANet model.\n    Args:\n        dim (int): Dimension of the input/output\n        kernel_sizes (list): List of kernel sizes for the convolutions.\n        dilations (list): List of dilations for the convolutions.\n        activation (str): Activation function.\n        activation_params (dict): Parameters to provide to the activation function\n        norm (str): Normalization method.\n        norm_params (dict): Parameters to provide to the underlying normalization used along with the convolution.\n        causal (bool): Whether to use fully causal convolution.\n        pad_mode (str): Padding mode for the convolutions.\n        compress (int): Reduced dimensionality in residual branches (from Demucs v3)\n        true_skip (bool): Whether to use true skip connection or a simple convolution as the skip connection.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        kernel_sizes: tp.List[int] = [3, 1],\n        dilations: tp.List[int] = [1, 1],\n        activation: str = \"ELU\",\n        activation_params: dict = {\"alpha\": 1.0},\n        norm: str = \"weight_norm\",\n        norm_params: tp.Dict[str, tp.Any] = {},\n        causal: bool = False,\n        pad_mode: str = \"reflect\",\n        compress: int = 2,\n        true_skip: bool = True,\n    ):\n        super().__init__()\n        assert len(kernel_sizes) == len(\n            dilations\n        ), \"Number of kernel sizes should match number of dilations\"\n        act = getattr(nn, activation) if activation != \"Snake\" else Snake1d\n        hidden = dim // compress\n        block = []\n        for i, (kernel_size, dilation) in enumerate(zip(kernel_sizes, dilations)):\n            in_chs = dim if i == 0 else hidden\n            out_chs = dim if i == len(kernel_sizes) - 1 else hidden\n            block += [\n                act(**activation_params) if activation != \"Snake\" else act(in_chs),\n                SConv1d(\n                    in_chs,\n                    out_chs,\n                    kernel_size=kernel_size,\n                    dilation=dilation,\n                    norm=norm,\n                    norm_kwargs=norm_params,\n                    causal=causal,\n                    pad_mode=pad_mode,\n                ),\n            ]\n        self.block = nn.Sequential(*block)\n        self.shortcut: nn.Module\n        if true_skip:\n            self.shortcut = nn.Identity()\n        else:\n            self.shortcut = SConv1d(\n                dim,\n                dim,\n                kernel_size=1,\n                norm=norm,\n                norm_kwargs=norm_params,\n                causal=causal,\n                pad_mode=pad_mode,\n            )\n\n    def forward(self, x):\n        return self.shortcut(x) + self.block(x)\n\n\nclass SEANetEncoder(nn.Module):\n    \"\"\"SEANet encoder.\n    Args:\n        channels (int): Audio channels.\n        dimension (int): Intermediate representation dimension.\n        n_filters (int): Base width for the model.\n        n_residual_layers (int): nb of residual layers.\n        ratios (Sequence[int]): kernel size and stride ratios. The encoder uses downsampling ratios instead of\n            upsampling ratios, hence it will use the ratios in the reverse order to the ones specified here\n            that must match the decoder order\n        activation (str): Activation function.\n        activation_params (dict): Parameters to provide to the activation function\n        norm (str): Normalization method.\n        norm_params (dict): Parameters to provide to the underlying normalization used along with the convolution.\n        kernel_size (int): Kernel size for the initial convolution.\n        last_kernel_size (int): Kernel size for the initial convolution.\n        residual_kernel_size (int): Kernel size for the residual layers.\n        dilation_base (int): How much to increase the dilation with each layer.\n        causal (bool): Whether to use fully causal convolution.\n        pad_mode (str): Padding mode for the convolutions.\n        true_skip (bool): Whether to use true skip connection or a simple\n            (streamable) convolution as the skip connection in the residual network blocks.\n        compress (int): Reduced dimensionality in residual branches (from Demucs v3).\n        lstm (int): Number of LSTM layers at the end of the encoder.\n    \"\"\"\n\n    def __init__(\n        self,\n        channels: int = 1,\n        dimension: int = 128,\n        n_filters: int = 32,\n        n_residual_layers: int = 1,\n        ratios: tp.List[int] = [8, 5, 4, 2],\n        activation: str = \"ELU\",\n        activation_params: dict = {\"alpha\": 1.0},\n        norm: str = \"weight_norm\",\n        norm_params: tp.Dict[str, tp.Any] = {},\n        kernel_size: int = 7,\n        last_kernel_size: int = 7,\n        residual_kernel_size: int = 3,\n        dilation_base: int = 2,\n        causal: bool = False,\n        pad_mode: str = \"reflect\",\n        true_skip: bool = False,\n        compress: int = 2,\n        lstm: int = 2,\n        bidirectional: bool = False,\n    ):\n        super().__init__()\n        self.channels = channels\n        self.dimension = dimension\n        self.n_filters = n_filters\n        self.ratios = list(reversed(ratios))\n        del ratios\n        self.n_residual_layers = n_residual_layers\n        self.hop_length = np.prod(self.ratios)  # 计算乘积\n\n        act = getattr(nn, activation) if activation != \"Snake\" else Snake1d\n        mult = 1\n        model: tp.List[nn.Module] = [\n            SConv1d(\n                channels,\n                mult * n_filters,\n                kernel_size,\n                norm=norm,\n                norm_kwargs=norm_params,\n                causal=causal,\n                pad_mode=pad_mode,\n            )\n        ]\n        # Downsample to raw audio scale\n        for i, ratio in enumerate(self.ratios):\n            # Add residual layers\n            for j in range(n_residual_layers):\n                model += [\n                    SEANetResnetBlock(\n                        mult * n_filters,\n                        kernel_sizes=[residual_kernel_size, 1],\n                        dilations=[dilation_base**j, 1],\n                        norm=norm,\n                        norm_params=norm_params,\n                        activation=activation,\n                        activation_params=activation_params,\n                        causal=causal,\n                        pad_mode=pad_mode,\n                        compress=compress,\n                        true_skip=true_skip,\n                    )\n                ]\n\n            # Add downsampling layers\n            model += [\n                (\n                    act(**activation_params)\n                    if activation != \"Snake\"\n                    else act(mult * n_filters)\n                ),\n                SConv1d(\n                    mult * n_filters,\n                    mult * n_filters * 2,\n                    kernel_size=ratio * 2,\n                    stride=ratio,\n                    norm=norm,\n                    norm_kwargs=norm_params,\n                    causal=causal,\n                    pad_mode=pad_mode,\n                ),\n            ]\n            mult *= 2\n\n        if lstm:\n            model += [\n                SLSTM(mult * n_filters, num_layers=lstm, bidirectional=bidirectional)\n            ]\n\n        mult = mult * 2 if bidirectional else mult\n        model += [\n            (\n                act(**activation_params)\n                if activation != \"Snake\"\n                else act(mult * n_filters)\n            ),\n            SConv1d(\n                mult * n_filters,\n                dimension,\n                last_kernel_size,\n                norm=norm,\n                norm_kwargs=norm_params,\n                causal=causal,\n                pad_mode=pad_mode,\n            ),\n        ]\n\n        self.model = nn.Sequential(*model)\n\n    def forward(self, x):\n        return self.model(x)\n\n\nclass SEANetDecoder(nn.Module):\n    \"\"\"SEANet decoder.\n    Args:\n        channels (int): Audio channels.\n        dimension (int): Intermediate representation dimension.\n        n_filters (int): Base width for the model.\n        n_residual_layers (int): nb of residual layers.\n        ratios (Sequence[int]): kernel size and stride ratios\n        activation (str): Activation function.\n        activation_params (dict): Parameters to provide to the activation function\n        final_activation (str): Final activation function after all convolutions.\n        final_activation_params (dict): Parameters to provide to the activation function\n        norm (str): Normalization method.\n        norm_params (dict): Parameters to provide to the underlying normalization used along with the convolution.\n        kernel_size (int): Kernel size for the initial convolution.\n        last_kernel_size (int): Kernel size for the initial convolution.\n        residual_kernel_size (int): Kernel size for the residual layers.\n        dilation_base (int): How much to increase the dilation with each layer.\n        causal (bool): Whether to use fully causal convolution.\n        pad_mode (str): Padding mode for the convolutions.\n        true_skip (bool): Whether to use true skip connection or a simple\n            (streamable) convolution as the skip connection in the residual network blocks.\n        compress (int): Reduced dimensionality in residual branches (from Demucs v3).\n        lstm (int): Number of LSTM layers at the end of the encoder.\n        trim_right_ratio (float): Ratio for trimming at the right of the transposed convolution under the causal setup.\n            If equal to 1.0, it means that all the trimming is done at the right.\n    \"\"\"\n\n    def __init__(\n        self,\n        channels: int = 1,\n        dimension: int = 128,\n        n_filters: int = 32,\n        n_residual_layers: int = 1,\n        ratios: tp.List[int] = [8, 5, 4, 2],\n        activation: str = \"ELU\",\n        activation_params: dict = {\"alpha\": 1.0},\n        final_activation: tp.Optional[str] = None,\n        final_activation_params: tp.Optional[dict] = None,\n        norm: str = \"weight_norm\",\n        norm_params: tp.Dict[str, tp.Any] = {},\n        kernel_size: int = 7,\n        last_kernel_size: int = 7,\n        residual_kernel_size: int = 3,\n        dilation_base: int = 2,\n        causal: bool = False,\n        pad_mode: str = \"reflect\",\n        true_skip: bool = False,\n        compress: int = 2,\n        lstm: int = 2,\n        trim_right_ratio: float = 1.0,\n        bidirectional: bool = False,\n    ):\n        super().__init__()\n        self.dimension = dimension\n        self.channels = channels\n        self.n_filters = n_filters\n        self.ratios = ratios\n        del ratios\n        self.n_residual_layers = n_residual_layers\n        self.hop_length = np.prod(self.ratios)\n\n        act = getattr(nn, activation) if activation != \"Snake\" else Snake1d\n        mult = int(2 ** len(self.ratios))\n        model: tp.List[nn.Module] = [\n            SConv1d(\n                dimension,\n                mult * n_filters,\n                kernel_size,\n                norm=norm,\n                norm_kwargs=norm_params,\n                causal=causal,\n                pad_mode=pad_mode,\n            )\n        ]\n\n        if lstm:\n            model += [\n                SLSTM(mult * n_filters, num_layers=lstm, bidirectional=bidirectional)\n            ]\n\n        # Upsample to raw audio scale\n        for i, ratio in enumerate(self.ratios):\n            # Add upsampling layers\n            model += [\n                (\n                    act(**activation_params)\n                    if activation != \"Snake\"\n                    else act(mult * n_filters)\n                ),\n                SConvTranspose1d(\n                    mult * n_filters,\n                    mult * n_filters // 2,\n                    kernel_size=ratio * 2,\n                    stride=ratio,\n                    norm=norm,\n                    norm_kwargs=norm_params,\n                    causal=causal,\n                    trim_right_ratio=trim_right_ratio,\n                ),\n            ]\n            # Add residual layers\n            for j in range(n_residual_layers):\n                model += [\n                    SEANetResnetBlock(\n                        mult * n_filters // 2,\n                        kernel_sizes=[residual_kernel_size, 1],\n                        dilations=[dilation_base**j, 1],\n                        activation=activation,\n                        activation_params=activation_params,\n                        norm=norm,\n                        norm_params=norm_params,\n                        causal=causal,\n                        pad_mode=pad_mode,\n                        compress=compress,\n                        true_skip=true_skip,\n                    )\n                ]\n\n            mult //= 2\n\n        # Add final layers\n        model += [\n            act(**activation_params) if activation != \"Snake\" else act(n_filters),\n            SConv1d(\n                n_filters,\n                channels,\n                last_kernel_size,\n                norm=norm,\n                norm_kwargs=norm_params,\n                causal=causal,\n                pad_mode=pad_mode,\n            ),\n        ]\n        # Add optional final activation to decoder (eg. tanh)\n        if final_activation is not None:\n            final_act = getattr(nn, final_activation)\n            final_activation_params = final_activation_params or {}\n            model += [final_act(**final_activation_params)]\n        self.model = nn.Sequential(*model)\n\n    def forward(self, z):\n        y = self.model(z)\n        return y\n\n\ndef test():\n    import torch\n\n    encoder = SEANetEncoder()\n    decoder = SEANetDecoder()\n    x = torch.randn(1, 1, 24000)\n    z = encoder(x)\n    print(\"z \", z.shape)\n    assert 1 == 2\n    assert list(z.shape) == [1, 128, 75], z.shape\n    y = decoder(z)\n    assert y.shape == x.shape, (x.shape, y.shape)\n\n\nif __name__ == \"__main__\":\n    test()\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/codec/vevo/vevo_repcodec.py",
    "content": "# Copyright (c) 2023 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n#\n# Copyright (c) ByteDance, Inc. and its affiliates.\n# Copyright (c) Chutong Meng\n#\n# This source code is licensed under the CC BY-NC license found in the\n# LICENSE file in the root directory of this source tree.\n# Based on AudioDec (https://github.com/facebookresearch/AudioDec)\n\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\nclass VectorQuantize(nn.Module):\n    \"\"\"Vector quantization w/ exponential moving averages (EMA)\"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        codebook_size: int,\n        decay=0.8,\n        commitment=1.0,\n        eps=1e-5,\n        n_embed=None,\n    ):\n        super().__init__()\n        n_embed = self.default(n_embed, codebook_size)\n\n        self.dim = dim\n        self.n_embed = n_embed\n        self.decay = decay\n        self.eps = eps\n        self.commitment = commitment\n\n        embed = torch.randn(dim, n_embed)\n        self.register_buffer(\"embed\", embed)\n        self.register_buffer(\"cluster_size\", torch.zeros(n_embed))\n        self.register_buffer(\"embed_avg\", embed.clone())\n\n    @property\n    def codebook(self):\n        return self.embed.transpose(0, 1)\n\n    def exists(self, val):\n        return val is not None\n\n    def default(self, val, d):\n        return val if self.exists(val) else d\n\n    def ema_inplace(self, moving_avg, new, decay):\n        moving_avg.data.mul_(decay).add_(new, alpha=(1 - decay))\n\n    def laplace_smoothing(self, x, n_categories, eps=1e-5):\n        return (x + eps) / (x.sum() + n_categories * eps)\n\n    def forward(self, input):\n        dtype = input.dtype\n        flatten = input.reshape(-1, self.dim)\n        dist = (\n            flatten.pow(2).sum(1, keepdim=True)\n            - 2 * flatten @ self.embed\n            + self.embed.pow(2).sum(0, keepdim=True)\n        )\n        _, embed_ind = (-dist).max(1)\n        embed_onehot = F.one_hot(embed_ind, self.n_embed).type(dtype)\n        embed_ind = embed_ind.view(*input.shape[:-1])\n        quantize = F.embedding(embed_ind, self.embed.transpose(0, 1))\n\n        if self.training:\n            self.ema_inplace(self.cluster_size, embed_onehot.sum(0), self.decay)\n            embed_sum = flatten.transpose(0, 1) @ embed_onehot\n            self.ema_inplace(self.embed_avg, embed_sum, self.decay)\n            cluster_size = (\n                self.laplace_smoothing(self.cluster_size, self.n_embed, self.eps)\n                * self.cluster_size.sum()\n            )\n            embed_normalized = self.embed_avg / cluster_size.unsqueeze(0)\n            self.embed.data.copy_(embed_normalized)\n\n        loss = F.mse_loss(quantize.detach(), input) * self.commitment\n        quantize = input + (quantize - input).detach()\n\n        avg_probs = torch.mean(embed_onehot, dim=0)\n        perplexity = torch.exp(-torch.sum(avg_probs * torch.log(avg_probs + 1e-10)))\n\n        return quantize, loss, perplexity\n\n    def forward_index(self, input):\n        dtype = input.dtype\n        flatten = input.reshape(-1, self.dim)\n        dist = (\n            flatten.pow(2).sum(1, keepdim=True)\n            - 2 * flatten @ self.embed\n            + self.embed.pow(2).sum(0, keepdim=True)\n        )\n        _, embed_ind = (-dist).max(1)\n        embed_onehot = F.one_hot(embed_ind, self.n_embed).type(dtype)\n        embed_ind = embed_ind.view(*input.shape[:-1])\n        quantize = F.embedding(embed_ind, self.embed.transpose(0, 1))\n        quantize = input + (quantize - input).detach()\n\n        return quantize, embed_ind\n\n\nclass ResidualVQ(nn.Module):\n    \"\"\"Residual VQ following algorithm 1. in https://arxiv.org/pdf/2107.03312.pdf\"\"\"\n\n    def __init__(self, *, num_quantizers, **kwargs):\n        super().__init__()\n        self.layers = nn.ModuleList(\n            [VectorQuantize(**kwargs) for _ in range(num_quantizers)]\n        )\n\n    def forward(self, x):\n        quantized_out = 0.0\n        residual = x\n        all_losses = []\n        all_perplexities = []\n        for layer in self.layers:\n            quantized, loss, perplexity = layer(residual)\n            # Issue: https://github.com/lucidrains/vector-quantize-pytorch/issues/33\n            # We found considering only the 1st layer VQ's graident results in better performance\n            # residual = residual - quantized.detach() # considering all layers' graidents\n            residual = (\n                residual - quantized\n            )  # considering only the first layer's graident\n            quantized_out = quantized_out + quantized\n            all_losses.append(loss)\n            all_perplexities.append(perplexity)\n        all_losses, all_perplexities = map(torch.stack, (all_losses, all_perplexities))\n        return quantized_out, all_losses, all_perplexities\n\n    def forward_index(self, x, flatten_idx=False):\n        \"\"\"\n        all_indices: [num_of_quantizers, B, T]\n        \"\"\"\n        quantized_out = 0.0\n        residual = x\n        all_indices = []\n        for i, layer in enumerate(self.layers):\n            quantized, indices = layer.forward_index(residual)\n            # residual = residual - quantized.detach()\n            residual = residual - quantized\n            quantized_out = quantized_out + quantized\n            if flatten_idx:\n                indices += self.codebook_size * i\n            all_indices.append(indices)\n        all_indices = torch.stack(all_indices)\n        return quantized_out, all_indices\n\n    def initial(self):\n        self.codebook = []\n        for layer in self.layers:\n            self.codebook.append(layer.codebook)\n        self.codebook_size = self.codebook[0].size(0)\n        self.codebook = torch.stack(self.codebook)\n        self.codebook = self.codebook.reshape(-1, self.codebook.size(-1))\n\n    def lookup(self, indices):\n        quantized_out = F.embedding(indices, self.codebook)  # Num x T x C\n        return torch.sum(quantized_out, dim=0, keepdim=True)\n\n\nclass Quantizer(nn.Module):\n    def __init__(\n        self,\n        code_dim: int,\n        codebook_num: int,\n        codebook_size: int,\n    ):\n        super().__init__()\n        self.codebook = ResidualVQ(\n            dim=code_dim, num_quantizers=codebook_num, codebook_size=codebook_size\n        )\n\n    def initial(self):\n        self.codebook.initial()\n\n    def forward(self, z):\n        zq, vqloss, perplexity = self.codebook(z.transpose(2, 1))\n        zq = zq.transpose(2, 1)\n        return zq, vqloss, perplexity\n\n    def inference(self, z):\n        zq, indices = self.codebook.forward_index(z.transpose(2, 1))\n        zq = zq.transpose(2, 1)\n        return zq, indices\n\n    def encode(self, z):\n        zq, indices = self.codebook.forward_index(z.transpose(2, 1), flatten_idx=True)\n        return zq, indices\n\n    def decode(self, indices):\n        z = self.codebook.lookup(indices)\n        return z\n\n\nclass Conv1d1x1(nn.Conv1d):\n    \"\"\"1x1 Conv1d.\"\"\"\n\n    def __init__(self, in_channels, out_channels, bias=True):\n        super(Conv1d1x1, self).__init__(\n            in_channels, out_channels, kernel_size=1, bias=bias\n        )\n\n\nclass Conv1d(nn.Module):\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size: int,\n        stride: int = 1,\n        padding: int = -1,\n        dilation: int = 1,\n        groups: int = 1,\n        bias: bool = True,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        if padding < 0:\n            padding = (kernel_size - 1) // 2 * dilation\n        self.dilation = dilation\n        self.conv = nn.Conv1d(\n            in_channels=in_channels,\n            out_channels=out_channels,\n            kernel_size=kernel_size,\n            stride=stride,\n            padding=padding,\n            dilation=dilation,\n            groups=groups,\n            bias=bias,\n        )\n\n    def forward(self, x):\n        \"\"\"\n        Args:\n            x (Tensor): Float tensor variable with the shape  (B, C, T).\n        Returns:\n            Tensor: Float tensor variable with the shape (B, C, T).\n        \"\"\"\n        x = self.conv(x)\n        return x\n\n\nclass ConvTranspose1d(nn.Module):\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size: int,\n        stride: int,\n        padding=-1,\n        output_padding=-1,\n        groups=1,\n        bias=True,\n    ):\n        super().__init__()\n        if padding < 0:\n            padding = (stride + 1) // 2\n        if output_padding < 0:\n            output_padding = 1 if stride % 2 else 0\n        self.deconv = nn.ConvTranspose1d(\n            in_channels=in_channels,\n            out_channels=out_channels,\n            kernel_size=kernel_size,\n            stride=stride,\n            padding=padding,\n            output_padding=output_padding,\n            groups=groups,\n            bias=bias,\n        )\n\n    def forward(self, x):\n        \"\"\"\n        Args:\n            x (Tensor): Float tensor variable with the shape  (B, C, T).\n        Returns:\n            Tensor: Float tensor variable with the shape (B, C', T').\n        \"\"\"\n        x = self.deconv(x)\n        return x\n\n\nclass ResidualUnit(nn.Module):\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size=3,\n        dilation=1,\n        bias=False,\n        nonlinear_activation=\"ELU\",\n        nonlinear_activation_params={},\n    ):\n        super().__init__()\n        self.activation = getattr(nn, nonlinear_activation)(\n            **nonlinear_activation_params\n        )\n        self.conv1 = Conv1d(\n            in_channels=in_channels,\n            out_channels=out_channels,\n            kernel_size=kernel_size,\n            stride=1,\n            dilation=dilation,\n            bias=bias,\n        )\n        self.conv2 = Conv1d1x1(out_channels, out_channels, bias)\n\n    def forward(self, x):\n        y = self.conv1(self.activation(x))\n        y = self.conv2(self.activation(y))\n        return x + y\n\n\nclass Projector(nn.Module):\n    def __init__(\n        self, input_channels: int, code_dim: int, kernel_size=3, stride=1, bias=False\n    ):\n        super().__init__()\n        self.project = Conv1d(\n            input_channels, code_dim, kernel_size=kernel_size, stride=stride, bias=bias\n        )\n\n    def forward(self, x):\n        return self.project(x)\n\n\nclass EncoderBlock(nn.Module):\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        stride: int,\n        dilations=(1, 1),\n        unit_kernel_size=3,\n        bias=True,\n    ):\n        super().__init__()\n        self.res_units = torch.nn.ModuleList()\n        for dilation in dilations:\n            self.res_units += [\n                ResidualUnit(\n                    in_channels,\n                    in_channels,\n                    kernel_size=unit_kernel_size,\n                    dilation=dilation,\n                )\n            ]\n        self.num_res = len(self.res_units)\n\n        self.conv = Conv1d(\n            in_channels=in_channels,\n            out_channels=out_channels,\n            kernel_size=(\n                3 if stride == 1 else (2 * stride)\n            ),  # special case: stride=1, do not use kernel=2\n            stride=stride,\n            bias=bias,\n        )\n\n    def forward(self, x):\n        for idx in range(self.num_res):\n            x = self.res_units[idx](x)\n        x = self.conv(x)\n        return x\n\n\nclass Encoder(nn.Module):\n    def __init__(\n        self,\n        input_channels: int,\n        encode_channels: int,\n        channel_ratios=(1, 1),\n        strides=(1, 1),\n        kernel_size=3,\n        bias=True,\n        block_dilations=(1, 1),\n        unit_kernel_size=3,\n    ):\n        super().__init__()\n        assert len(channel_ratios) == len(strides)\n\n        self.conv = Conv1d(\n            in_channels=input_channels,\n            out_channels=encode_channels,\n            kernel_size=kernel_size,\n            stride=1,\n            bias=False,\n        )\n        self.conv_blocks = torch.nn.ModuleList()\n        in_channels = encode_channels\n        for idx, stride in enumerate(strides):\n            out_channels = int(encode_channels * channel_ratios[idx])  # could be float\n            self.conv_blocks += [\n                EncoderBlock(\n                    in_channels,\n                    out_channels,\n                    stride,\n                    dilations=block_dilations,\n                    unit_kernel_size=unit_kernel_size,\n                    bias=bias,\n                )\n            ]\n            in_channels = out_channels\n        self.num_blocks = len(self.conv_blocks)\n        self.out_channels = out_channels\n\n    def forward(self, x):\n        x = self.conv(x)\n        for i in range(self.num_blocks):\n            x = self.conv_blocks[i](x)\n        return x\n\n\nclass DecoderBlock(nn.Module):\n    \"\"\"Decoder block (no up-sampling)\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        stride: int,\n        dilations=(1, 1),\n        unit_kernel_size=3,\n        bias=True,\n    ):\n        super().__init__()\n\n        if stride == 1:\n            self.conv = Conv1d(\n                in_channels=in_channels,\n                out_channels=out_channels,\n                kernel_size=3,  # fix kernel=3 when stride=1 for unchanged shape\n                stride=stride,\n                bias=bias,\n            )\n        else:\n            self.conv = ConvTranspose1d(\n                in_channels=in_channels,\n                out_channels=out_channels,\n                kernel_size=(2 * stride),\n                stride=stride,\n                bias=bias,\n            )\n\n        self.res_units = torch.nn.ModuleList()\n        for idx, dilation in enumerate(dilations):\n            self.res_units += [\n                ResidualUnit(\n                    out_channels,\n                    out_channels,\n                    kernel_size=unit_kernel_size,\n                    dilation=dilation,\n                )\n            ]\n        self.num_res = len(self.res_units)\n\n    def forward(self, x):\n        x = self.conv(x)\n        for idx in range(self.num_res):\n            x = self.res_units[idx](x)\n        return x\n\n\nclass Decoder(nn.Module):\n    def __init__(\n        self,\n        code_dim: int,\n        output_channels: int,\n        decode_channels: int,\n        channel_ratios=(1, 1),\n        strides=(1, 1),\n        kernel_size=3,\n        bias=True,\n        block_dilations=(1, 1),\n        unit_kernel_size=3,\n    ):\n        super().__init__()\n        assert len(channel_ratios) == len(strides)\n\n        self.conv1 = Conv1d(\n            in_channels=code_dim,\n            out_channels=int(decode_channels * channel_ratios[0]),\n            kernel_size=kernel_size,\n            stride=1,\n            bias=False,\n        )\n\n        self.conv_blocks = torch.nn.ModuleList()\n        for idx, stride in enumerate(strides):\n            in_channels = int(decode_channels * channel_ratios[idx])\n            if idx < (len(channel_ratios) - 1):\n                out_channels = int(decode_channels * channel_ratios[idx + 1])\n            else:\n                out_channels = decode_channels\n            self.conv_blocks += [\n                DecoderBlock(\n                    in_channels,\n                    out_channels,\n                    stride,\n                    dilations=block_dilations,\n                    unit_kernel_size=unit_kernel_size,\n                    bias=bias,\n                )\n            ]\n        self.num_blocks = len(self.conv_blocks)\n\n        self.conv2 = Conv1d(out_channels, output_channels, kernel_size, 1, bias=False)\n\n    def forward(self, z):\n        x = self.conv1(z)\n        for i in range(self.num_blocks):\n            x = self.conv_blocks[i](x)\n        x = self.conv2(x)\n        return x\n\n\nclass VevoRepCodec(nn.Module):\n    def __init__(\n        self,\n        input_channels=768,\n        output_channels=768,\n        encode_channels=768,\n        decode_channels=768,\n        code_dim=768,\n        codebook_num=1,\n        codebook_size=1024,\n        bias=True,\n        enc_ratios=(1, 1),\n        dec_ratios=(1, 1),\n        enc_strides=(1, 1),\n        dec_strides=(1, 1),\n        enc_kernel_size=3,\n        dec_kernel_size=3,\n        enc_block_dilations=(1, 1),\n        enc_block_kernel_size=3,\n        dec_block_dilations=(1, 1),\n        dec_block_kernel_size=3,\n    ):\n        super().__init__()\n\n        self.input_channels = input_channels\n\n        self.encoder = Encoder(\n            input_channels=input_channels,\n            encode_channels=encode_channels,\n            channel_ratios=enc_ratios,\n            strides=enc_strides,\n            kernel_size=enc_kernel_size,\n            bias=bias,\n            block_dilations=enc_block_dilations,\n            unit_kernel_size=enc_block_kernel_size,\n        )\n\n        self.decoder = Decoder(\n            code_dim=code_dim,\n            output_channels=output_channels,\n            decode_channels=decode_channels,\n            channel_ratios=dec_ratios,\n            strides=dec_strides,\n            kernel_size=dec_kernel_size,\n            bias=bias,\n            block_dilations=dec_block_dilations,\n            unit_kernel_size=dec_block_kernel_size,\n        )\n\n        self.projector = Projector(\n            input_channels=self.encoder.out_channels,\n            code_dim=code_dim,\n            kernel_size=3,\n            stride=1,\n            bias=False,\n        )\n\n        self.quantizer = Quantizer(\n            code_dim=code_dim, codebook_num=codebook_num, codebook_size=codebook_size\n        )\n\n    def forward(self, x):\n        x = self.encoder(x)\n        z = self.projector(x)\n        zq, vqloss, perplexity = self.quantizer(z)\n        y = self.decoder(zq)\n        return y, zq, z, vqloss, perplexity\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/tts/maskgct/llama_nar.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom transformers import LlamaConfig, LlamaForCausalLM, LlamaModel\nimport torch\nimport torch.nn.functional as F\nimport numpy as np\nimport os\nimport torch.nn as nn\nfrom typing import List, Optional, Tuple, Union\nimport math\n\nfrom transformers.models.llama.modeling_llama import LlamaDecoderLayer\nfrom transformers.models.llama.modeling_llama import BaseModelOutputWithPast\n\n\n# sinusoidal positional encoding\nclass SinusoidalPosEmb(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.dim = dim\n\n    def forward(self, x):\n        device = x.device\n        half_dim = self.dim // 2\n        emb = math.log(10000) / (half_dim - 1)\n        emb = torch.exp(torch.arange(half_dim, device=device) * -emb)\n        emb = x[:, None] * emb[None, :] * 1.0\n        emb = torch.cat((emb.sin(), emb.cos()), dim=-1)\n        return emb\n\n\nclass LlamaAdaptiveRMSNorm(nn.Module):\n    def __init__(self, hidden_size=1024, eps=1e-6, dim_cond=1024):\n        super().__init__()\n        self.to_weight = nn.Linear(dim_cond, hidden_size)\n        nn.init.zeros_(self.to_weight.weight)\n        nn.init.ones_(self.to_weight.bias)\n        self.variance_epsilon = eps\n        self._is_hf_initialized = True  # disable automatic init\n\n    def forward(self, hidden_states, cond_embedding):\n        input_dtype = hidden_states.dtype\n        variance = hidden_states.to(torch.float32).pow(2).mean(-1, keepdim=True)\n        hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon)\n\n        weight = self.to_weight(cond_embedding)\n        if len(weight.shape) == 2:\n            weight = weight.unsqueeze(1)\n\n        return (weight * hidden_states).to(input_dtype)\n\n\nclass LlamaNARDecoderLayer(LlamaDecoderLayer):\n    def __init__(self, config: LlamaConfig, layer_idx: int):\n        \"\"\"Override to adaptive layer norm\"\"\"\n        super().__init__(config, layer_idx)  # init attention, mlp, etc.\n        self.input_layernorm = LlamaAdaptiveRMSNorm(\n            config.hidden_size, eps=config.rms_norm_eps, dim_cond=config.hidden_size\n        )\n        self.post_attention_layernorm = LlamaAdaptiveRMSNorm(\n            config.hidden_size, eps=config.rms_norm_eps, dim_cond=config.hidden_size\n        )\n\n    # add `cond` in forward function\n    def forward(\n        self,\n        hidden_states: torch.Tensor,\n        cond_embedding: torch.Tensor,\n        attention_mask: Optional[torch.Tensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        past_key_value: Optional[Tuple[torch.Tensor]] = None,\n        output_attentions: Optional[bool] = False,\n        use_cache: Optional[bool] = False,\n    ) -> Tuple[\n        torch.FloatTensor, Optional[Tuple[torch.FloatTensor, torch.FloatTensor]]\n    ]:\n        \"\"\"\n        Args:\n            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`\n            attention_mask (`torch.FloatTensor`, *optional*): attention mask of size\n                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.\n            output_attentions (`bool`, *optional*):\n                Whether or not to return the attentions tensors of all attention layers. See `attentions` under\n                returned tensors for more detail.\n            use_cache (`bool`, *optional*):\n                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding\n                (see `past_key_values`).\n            past_key_value (`Tuple(torch.FloatTensor)`, *optional*): cached past key and value projection states\n        \"\"\"\n\n        residual = hidden_states\n\n        hidden_states = self.input_layernorm(\n            hidden_states, cond_embedding=cond_embedding\n        )\n\n        # Self Attention\n        hidden_states, self_attn_weights, present_key_value = self.self_attn(\n            hidden_states=hidden_states,\n            attention_mask=attention_mask,\n            position_ids=position_ids,\n            past_key_value=past_key_value,\n            output_attentions=output_attentions,\n            use_cache=use_cache,\n        )\n        hidden_states = residual + hidden_states\n\n        # Fully Connected\n        residual = hidden_states\n        hidden_states = self.post_attention_layernorm(\n            hidden_states, cond_embedding=cond_embedding\n        )\n        hidden_states = self.mlp(hidden_states)\n        hidden_states = residual + hidden_states\n\n        outputs = (hidden_states,)\n\n        if output_attentions:\n            outputs += (self_attn_weights,)\n\n        if use_cache:\n            outputs += (present_key_value,)\n\n        return outputs\n\n    def __init__(self, config: LlamaConfig, layer_idx: int):\n        \"\"\"Override to adaptive layer norm\"\"\"\n        super().__init__(config, layer_idx)  # init attention, mlp, etc.\n        self.layer_idx = layer_idx\n        self.input_layernorm = LlamaAdaptiveRMSNorm(\n            config.hidden_size, eps=config.rms_norm_eps, dim_cond=config.hidden_size\n        )\n        self.post_attention_layernorm = LlamaAdaptiveRMSNorm(\n            config.hidden_size, eps=config.rms_norm_eps, dim_cond=config.hidden_size\n        )\n\n    def forward(\n        self,\n        hidden_states: torch.Tensor,\n        cond_embedding: torch.Tensor,\n        attention_mask: Optional[torch.Tensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        past_key_value: Optional[Tuple[torch.Tensor]] = None,\n        output_attentions: Optional[bool] = False,\n        use_cache: Optional[bool] = False,\n    ) -> Tuple[\n        torch.FloatTensor, Optional[Tuple[torch.FloatTensor, torch.FloatTensor]]\n    ]:\n        \"\"\"\n        Args:\n            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`\n            attention_mask (`torch.FloatTensor`, *optional*): attention mask of size\n                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.\n            output_attentions (`bool`, *optional*):\n                Whether or not to return the attentions tensors of all attention layers. See `attentions` under\n                returned tensors for more detail.\n            use_cache (`bool`, *optional*):\n                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding\n                (see `past_key_values`).\n            past_key_value (`Tuple(torch.FloatTensor)`, *optional*): cached past key and value projection states\n        \"\"\"\n\n        residual = hidden_states\n\n        hidden_states = self.input_layernorm(\n            hidden_states, cond_embedding=cond_embedding\n        )\n\n        # Self Attention\n        hidden_states, self_attn_weights, present_key_value = self.self_attn(\n            hidden_states=hidden_states,\n            attention_mask=attention_mask,\n            position_ids=position_ids,\n            past_key_value=past_key_value,\n            output_attentions=output_attentions,\n            use_cache=use_cache,\n        )\n        hidden_states = residual + hidden_states\n\n        # Fully Connected\n        residual = hidden_states\n        hidden_states = self.post_attention_layernorm(\n            hidden_states, cond_embedding=cond_embedding\n        )\n        hidden_states = self.mlp(hidden_states)\n        hidden_states = residual + hidden_states\n\n        outputs = (hidden_states,)\n\n        if output_attentions:\n            outputs += (self_attn_weights,)\n\n        if use_cache:\n            outputs += (present_key_value,)\n\n        return outputs\n\n\nclass DiffLlama(LlamaModel):\n    def __init__(\n        self,\n        hidden_size=1024,\n        num_heads=16,\n        num_layers=16,\n        config=LlamaConfig(0, 256, 1024, 1, 1),\n    ):\n        super().__init__(config)\n\n        self.layers = nn.ModuleList(\n            [\n                LlamaNARDecoderLayer(\n                    LlamaConfig(\n                        hidden_size=hidden_size,\n                        num_attention_heads=num_heads,\n                        max_position_embeddings=4096,\n                        intermediate_size=hidden_size * 4,\n                    ),\n                    layer_idx=i,\n                )\n                for i in range(num_layers)\n            ]\n        )\n\n        self.norm = LlamaAdaptiveRMSNorm(hidden_size, dim_cond=hidden_size)\n\n        self.diff_step_embedding = SinusoidalPosEmb(hidden_size)\n        self.diff_step_mlp = nn.Sequential(\n            nn.Linear(hidden_size, hidden_size * 4),\n            nn.SiLU(),\n            nn.Linear(hidden_size * 4, hidden_size),\n        )\n\n        # self.position_embedding = PositionalEncoding(hidden_size, dropout=0.0)\n\n        self.cond_mlp = nn.Sequential(\n            nn.Linear(hidden_size, hidden_size * 4),\n            nn.SiLU(),\n            nn.Linear(hidden_size * 4, hidden_size),\n        )\n\n        for layer in self.layers:\n            layer.input_layernorm = LlamaAdaptiveRMSNorm(\n                hidden_size, dim_cond=hidden_size\n            )\n            layer.post_attention_layernorm = LlamaAdaptiveRMSNorm(\n                hidden_size, dim_cond=hidden_size\n            )\n\n        self.post_init()\n\n        # self.reset_parameters()\n\n    def _prepare_decoder_attention_mask(\n        self, attention_mask, input_shape, inputs_embeds, past_key_values_length\n    ):\n        # create noncausal mask\n        # [bsz, seq_len] -> [bsz, 1, tgt_seq_len, src_seq_len]\n        combined_attention_mask = None\n\n        def _expand_mask(\n            mask: torch.Tensor, dtype: torch.dtype, tgt_len: Optional[int] = None\n        ):\n            \"\"\"\n            Expands attention_mask from `[bsz, seq_len]` to `[bsz, 1, tgt_seq_len, src_seq_len]`.\n            \"\"\"\n            bsz, src_len = mask.size()\n            tgt_len = tgt_len if tgt_len is not None else src_len\n\n            expanded_mask = (\n                mask[:, None, None, :].expand(bsz, 1, tgt_len, src_len).to(dtype)\n            )\n\n            inverted_mask = 1.0 - expanded_mask\n\n            return inverted_mask.masked_fill(\n                inverted_mask.to(torch.bool), torch.finfo(dtype).min\n            )\n\n        if attention_mask is not None:\n            # [bsz, seq_len] -> [bsz, 1, tgt_seq_len, src_seq_len]\n            expanded_attn_mask = _expand_mask(\n                attention_mask, inputs_embeds.dtype, tgt_len=input_shape[-1]\n            ).to(inputs_embeds.device)\n            combined_attention_mask = (\n                expanded_attn_mask\n                if combined_attention_mask is None\n                else expanded_attn_mask + combined_attention_mask\n            )\n\n        return combined_attention_mask\n\n    def forward(\n        self,\n        x,\n        diffusion_step,\n        cond,\n        x_mask,\n        input_ids: torch.LongTensor = None,  # [num_quant, B, T]\n        attention_mask: Optional[torch.Tensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        past_key_values: Optional[List[torch.FloatTensor]] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        use_cache: Optional[bool] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, BaseModelOutputWithPast]:\n\n        # retrieve some shape info\n        batch_size, seq_length, _ = x.shape\n\n        # condtion mlp\n        cond_embedding = self.cond_mlp(cond)  # (B, T, C)\n\n        # diffusion step embedding\n        diffusion_step = self.diff_step_embedding(diffusion_step).to(x.device)\n        diffusion_step = self.diff_step_mlp(diffusion_step)  # (B, C)\n        x = x + cond_embedding\n\n        inputs_embeds = x\n        attention_mask = x_mask\n\n        output_attentions = (\n            output_attentions\n            if output_attentions is not None\n            else self.config.output_attentions\n        )\n        output_hidden_states = (\n            output_hidden_states\n            if output_hidden_states is not None\n            else self.config.output_hidden_states\n        )\n        use_cache = use_cache if use_cache is not None else self.config.use_cache\n\n        return_dict = (\n            return_dict if return_dict is not None else self.config.use_return_dict\n        )\n\n        seq_length_with_past = seq_length\n        past_key_values_length = 0\n\n        if past_key_values is not None:\n            past_key_values_length = past_key_values[0][0].shape[2]\n            seq_length_with_past = seq_length_with_past + past_key_values_length\n\n        if position_ids is None:\n            device = input_ids.device if input_ids is not None else inputs_embeds.device\n            position_ids = torch.arange(\n                past_key_values_length,\n                seq_length + past_key_values_length,\n                dtype=torch.long,\n                device=device,\n            )\n            position_ids = position_ids.unsqueeze(0).view(-1, seq_length)\n        else:\n            position_ids = position_ids.view(-1, seq_length).long()\n\n        # embed positions\n        if attention_mask is None:\n            attention_mask = torch.ones(\n                (batch_size, seq_length_with_past),\n                dtype=torch.bool,\n                device=inputs_embeds.device,\n            )\n        attention_mask = self._prepare_decoder_attention_mask(\n            attention_mask,\n            (batch_size, seq_length),\n            inputs_embeds,\n            past_key_values_length,\n        )\n\n        hidden_states = inputs_embeds\n\n        if self.gradient_checkpointing and self.training:\n            if use_cache:\n                use_cache = False\n\n        # decoder layers\n        all_hidden_states = () if output_hidden_states else None\n        all_self_attns = () if output_attentions else None\n        next_decoder_cache = () if use_cache else None\n\n        for idx, decoder_layer in enumerate(self.layers):\n            if output_hidden_states:\n                all_hidden_states += (hidden_states,)\n\n            past_key_value = (\n                past_key_values[idx] if past_key_values is not None else None\n            )\n\n            if self.gradient_checkpointing and self.training:\n                raise NotImplementedError\n\n            else:\n                layer_outputs = decoder_layer(\n                    hidden_states,\n                    attention_mask=attention_mask,\n                    position_ids=position_ids,\n                    past_key_value=past_key_value,\n                    output_attentions=output_attentions,\n                    use_cache=use_cache,\n                    cond_embedding=diffusion_step,\n                )\n\n            hidden_states = layer_outputs[0]\n\n            if use_cache:\n                next_decoder_cache += (layer_outputs[2 if output_attentions else 1],)\n\n            if output_attentions:\n                all_self_attns += (layer_outputs[1],)\n\n        hidden_states = self.norm(hidden_states, cond_embedding=diffusion_step)\n\n        # add hidden states from the last decoder layer\n        if output_hidden_states:\n            all_hidden_states += (hidden_states,)\n\n        next_cache = next_decoder_cache if use_cache else None\n\n        return hidden_states\n\n\nclass DiffLlamaPrefix(LlamaModel):\n    def __init__(\n        self,\n        hidden_size=1024,\n        num_heads=16,\n        num_layers=16,\n        config=LlamaConfig(0, 256, 1024, 1, 1),\n    ):\n        super().__init__(config)\n\n        self.layers = nn.ModuleList(\n            [\n                LlamaNARDecoderLayer(\n                    LlamaConfig(\n                        hidden_size=hidden_size,\n                        num_attention_heads=num_heads,\n                        max_position_embeddings=4096,\n                        intermediate_size=hidden_size * 4,\n                    ),\n                    layer_idx=i,\n                )\n                for i in range(num_layers)\n            ]\n        )\n\n        self.norm = LlamaAdaptiveRMSNorm(hidden_size, dim_cond=hidden_size)\n\n        self.diff_step_embedding = SinusoidalPosEmb(hidden_size)\n        self.diff_step_mlp = nn.Sequential(\n            nn.Linear(hidden_size, hidden_size * 4),\n            nn.SiLU(),\n            nn.Linear(hidden_size * 4, hidden_size),\n        )\n\n        self.cond_mlp = nn.Sequential(\n            nn.Linear(hidden_size, hidden_size * 4),\n            nn.SiLU(),\n            nn.Linear(hidden_size * 4, hidden_size),\n        )\n\n        for layer in self.layers:\n            layer.input_layernorm = LlamaAdaptiveRMSNorm(\n                hidden_size, dim_cond=hidden_size\n            )\n            layer.post_attention_layernorm = LlamaAdaptiveRMSNorm(\n                hidden_size, dim_cond=hidden_size\n            )\n\n        self.embed_tokens = None\n\n        self.post_init()\n\n    def _prepare_decoder_attention_mask(\n        self, attention_mask, input_shape, inputs_embeds, past_key_values_length\n    ):\n        # create noncausal mask\n        # [bsz, seq_len] -> [bsz, 1, tgt_seq_len, src_seq_len]\n        combined_attention_mask = None\n\n        def _expand_mask(\n            mask: torch.Tensor, dtype: torch.dtype, tgt_len: Optional[int] = None\n        ):\n            \"\"\"\n            Expands attention_mask from `[bsz, seq_len]` to `[bsz, 1, tgt_seq_len, src_seq_len]`.\n            \"\"\"\n            bsz, src_len = mask.size()\n            tgt_len = tgt_len if tgt_len is not None else src_len\n\n            expanded_mask = (\n                mask[:, None, None, :].expand(bsz, 1, tgt_len, src_len).to(dtype)\n            )\n\n            inverted_mask = 1.0 - expanded_mask\n\n            return inverted_mask.masked_fill(\n                inverted_mask.to(torch.bool), torch.finfo(dtype).min\n            )\n\n        if attention_mask is not None:\n            # [bsz, seq_len] -> [bsz, 1, tgt_seq_len, src_seq_len]\n            expanded_attn_mask = _expand_mask(\n                attention_mask, inputs_embeds.dtype, tgt_len=input_shape[-1]\n            ).to(inputs_embeds.device)\n            combined_attention_mask = (\n                expanded_attn_mask\n                if combined_attention_mask is None\n                else expanded_attn_mask + combined_attention_mask\n            )\n\n        return combined_attention_mask\n\n    def forward(\n        self,\n        x,\n        diffusion_step,\n        x_mask,\n        phone_embedding: Optional[torch.LongTensor] = None,\n        phone_mask: Optional[torch.FloatTensor] = None,\n        input_ids: torch.LongTensor = None,  # [num_quant, B, T]\n        attention_mask: Optional[torch.LongTensor] = None,\n        position_ids: Optional[torch.LongTensor] = None,\n        past_key_values: Optional[List[torch.FloatTensor]] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        use_cache: Optional[bool] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, BaseModelOutputWithPast]:\n\n        # retrieve some shape info\n\n        phone_embedding = self.cond_mlp(phone_embedding)  # (B, T, C)\n        phone_length = phone_embedding.shape[1]\n        inputs_embeds = torch.cat([phone_embedding, x], dim=1)\n        attention_mask = torch.cat([phone_mask, x_mask], dim=1)\n\n        # diffusion step embedding\n        diffusion_step = self.diff_step_embedding(diffusion_step).to(x.device)\n        diffusion_step = self.diff_step_mlp(diffusion_step)  # (B, C)\n\n        batch_size, seq_length, _ = inputs_embeds.shape\n\n        output_attentions = (\n            output_attentions\n            if output_attentions is not None\n            else self.config.output_attentions\n        )\n        output_hidden_states = (\n            output_hidden_states\n            if output_hidden_states is not None\n            else self.config.output_hidden_states\n        )\n        use_cache = use_cache if use_cache is not None else self.config.use_cache\n\n        return_dict = (\n            return_dict if return_dict is not None else self.config.use_return_dict\n        )\n\n        seq_length_with_past = seq_length\n        past_key_values_length = 0\n\n        if past_key_values is not None:\n            past_key_values_length = past_key_values[0][0].shape[2]\n            seq_length_with_past = seq_length_with_past + past_key_values_length\n\n        if position_ids is None:\n            device = input_ids.device if input_ids is not None else inputs_embeds.device\n            position_ids = torch.arange(\n                past_key_values_length,\n                seq_length + past_key_values_length,\n                dtype=torch.long,\n                device=device,\n            )\n            position_ids = position_ids.unsqueeze(0).view(-1, seq_length)\n        else:\n            position_ids = position_ids.view(-1, seq_length).long()\n\n        # embed positions\n        if attention_mask is None:\n            attention_mask = torch.ones(\n                (batch_size, seq_length_with_past),\n                dtype=torch.bool,\n                device=inputs_embeds.device,\n            )\n        attention_mask = self._prepare_decoder_attention_mask(\n            attention_mask,\n            (batch_size, seq_length),\n            inputs_embeds,\n            past_key_values_length,\n        )\n\n        hidden_states = inputs_embeds\n\n        if self.gradient_checkpointing and self.training:\n            if use_cache:\n                use_cache = False\n\n        # decoder layers\n        all_hidden_states = () if output_hidden_states else None\n        all_self_attns = () if output_attentions else None\n        next_decoder_cache = () if use_cache else None\n\n        for idx, decoder_layer in enumerate(self.layers):\n            if output_hidden_states:\n                all_hidden_states += (hidden_states,)\n\n            past_key_value = (\n                past_key_values[idx] if past_key_values is not None else None\n            )\n\n            if self.gradient_checkpointing and self.training:\n                raise NotImplementedError\n\n            else:\n                layer_outputs = decoder_layer(\n                    hidden_states,\n                    attention_mask=attention_mask,\n                    position_ids=position_ids,\n                    past_key_value=past_key_value,\n                    output_attentions=output_attentions,\n                    use_cache=use_cache,\n                    cond_embedding=diffusion_step,\n                )\n\n            hidden_states = layer_outputs[0]\n\n            if use_cache:\n                next_decoder_cache += (layer_outputs[2 if output_attentions else 1],)\n\n            if output_attentions:\n                all_self_attns += (layer_outputs[1],)\n\n        hidden_states = self.norm(hidden_states, cond_embedding=diffusion_step)\n\n        # add hidden states from the last decoder layer\n        if output_hidden_states:\n            all_hidden_states += (hidden_states,)\n\n        next_cache = next_decoder_cache if use_cache else None\n\n        return hidden_states[\n            :,\n            phone_length:,\n        ]\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct/models/tts/maskgct/maskgct_s2a.py",
    "content": "# Copyright (c) 2024 Amphion.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport numpy as np\nimport torch.nn as nn\nimport math\nfrom einops import rearrange\nfrom indextts.utils.maskgct.models.tts.maskgct.llama_nar import DiffLlama\n\n\ndef top_k(logits, thres=0.9):\n    k = math.ceil((1 - thres) * logits.shape[-1])\n    val, ind = logits.topk(k, dim=-1)\n    probs = torch.full_like(logits, float(\"-inf\"))\n    probs.scatter_(2, ind, val)\n    return probs\n\n\ndef log(t, eps=1e-10):\n    return torch.log(t + eps)\n\n\ndef gumbel_noise(t):\n    noise = torch.zeros_like(t).uniform_(0, 1)\n    return -log(-log(noise))\n\n\ndef gumbel_sample(t, temperature=1.0, dim=-1):\n    return ((t / max(temperature, 1e-10)) + gumbel_noise(t)).argmax(dim=dim)\n\n\ndef top_k(logits, thres=0.9):\n    k = math.ceil((1 - thres) * logits.shape[-1])\n    val, ind = logits.topk(k, dim=-1)\n    probs = torch.full_like(logits, float(\"-inf\"))\n    probs.scatter_(2, ind, val)\n    return probs\n\n\ndef log(t, eps=1e-10):\n    return torch.log(t + eps)\n\n\ndef gumbel_noise(t):\n    noise = torch.zeros_like(t).uniform_(0, 1)\n    return -log(-log(noise))\n\n\ndef gumbel_sample(t, temperature=1.0, dim=-1):\n    return ((t / max(temperature, 1e-10)) + gumbel_noise(t)).argmax(dim=dim)\n\n\nclass MaskGCT_S2A(nn.Module):\n    def __init__(\n        self,\n        num_quantizer=12,\n        hidden_size=1024,\n        num_layers=16,\n        num_heads=16,\n        codebook_size=1024,\n        cfg_scale=0.15,\n        mask_layer_schedule=\"linear\",\n        cond_codebook_size=1024,\n        cond_dim=1024,\n        predict_layer_1=True,\n        cfg=None,\n    ):\n        super().__init__()\n\n        num_quantizer = (\n            cfg.num_quantizer\n            if cfg is not None and hasattr(cfg, \"num_quantizer\")\n            else num_quantizer\n        )\n        hidden_size = (\n            cfg.hidden_size\n            if cfg is not None and hasattr(cfg, \"hidden_size\")\n            else hidden_size\n        )\n        num_layers = (\n            cfg.num_layers\n            if cfg is not None and hasattr(cfg, \"num_layers\")\n            else num_layers\n        )\n        num_heads = (\n            cfg.num_heads\n            if cfg is not None and hasattr(cfg, \"num_heads\")\n            else num_heads\n        )\n        codebook_size = (\n            cfg.codebook_size\n            if cfg is not None and hasattr(cfg, \"codebook_size\")\n            else codebook_size\n        )\n        cfg_scale = (\n            cfg.cfg_scale\n            if cfg is not None and hasattr(cfg, \"cfg_scale\")\n            else cfg_scale\n        )\n        mask_layer_schedule = (\n            cfg.mask_layer_schedule\n            if cfg is not None and hasattr(cfg, \"mask_layer_schedule\")\n            else mask_layer_schedule\n        )\n        cond_codebook_size = (\n            cfg.cond_codebook_size\n            if cfg is not None and hasattr(cfg, \"cond_codebook_size\")\n            else cond_codebook_size\n        )\n        cond_dim = (\n            cfg.cond_dim if cfg is not None and hasattr(cfg, \"cond_dim\") else cond_dim\n        )\n        predict_layer_1 = (\n            cfg.predict_layer_1\n            if cfg is not None and hasattr(cfg, \"predict_layer_1\")\n            else predict_layer_1\n        )\n\n        self.num_quantizer = num_quantizer\n        self.hidden_size = hidden_size\n        self.codebook_size = codebook_size\n        self.num_layers = num_layers\n        self.num_heads = num_heads\n        self.cfg_scale = cfg_scale\n        self.mask_layer_schedule = mask_layer_schedule\n        self.cond_codebook_size = cond_codebook_size\n        self.cond_dim = cond_dim\n        self.predict_layer_1 = predict_layer_1\n\n        self.layer_emb = nn.Embedding(self.num_quantizer, self.hidden_size)\n        self.mask_emb = nn.Embedding(1, self.hidden_size)\n\n        self.token_emb = torch.nn.ModuleList(\n            [\n                nn.Embedding(self.codebook_size, self.hidden_size)\n                for _ in range(self.num_quantizer)\n            ]\n        )\n\n        self.to_logits = torch.nn.ModuleList(\n            [\n                nn.Linear(self.hidden_size, self.codebook_size)\n                for _ in range(self.num_quantizer)\n            ]\n        )\n\n        self.cond_emb = nn.Embedding(cond_codebook_size, self.hidden_size)\n\n        self.reset_parameters()\n\n        self.diff_estimator = DiffLlama(\n            hidden_size=hidden_size,\n            num_heads=self.num_heads,\n            num_layers=num_layers,\n        )\n\n    def mask_prob(self, t):\n        return torch.sin(t * np.pi / 2).to(t.device)\n\n    def mask_layer(self, t):\n        # print(self.predict_layer_1)\n        if self.mask_layer_schedule == \"uniform\":\n            if self.predict_layer_1:\n                mask_layer = torch.randint(0, self.num_quantizer, (1,)).to(t.device)\n            else:\n                mask_layer = torch.randint(1, self.num_quantizer, (1,)).to(t.device)\n        elif self.mask_layer_schedule == \"cosine\":\n            if self.predict_layer_1:\n                weights = torch.tensor(\n                    [\n                        np.cos(i / self.num_quantizer * np.pi / 2)\n                        for i in range(self.num_quantizer)\n                    ]\n                )\n            else:\n                weights = torch.tensor(\n                    [0]\n                    + [\n                        np.cos((i - 1) / self.num_quantizer * np.pi / 2)\n                        for i in range(1, self.num_quantizer)\n                    ]\n                )\n            mask_layer = torch.multinomial(weights, 1).to(t.device)\n        elif self.mask_layer_schedule == \"linear\":\n            if self.predict_layer_1:\n                weights = torch.tensor(\n                    [self.num_quantizer - i for i in range(self.num_quantizer)]\n                )\n            else:\n                weights = torch.tensor(\n                    [0]\n                    + [\n                        self.num_quantizer - (i - 1)\n                        for i in range(1, self.num_quantizer)\n                    ]\n                )\n            weights = weights / weights.sum()\n            mask_layer = torch.multinomial(weights, 1).to(t.device)\n        # print(mask_layer)\n        new_t = t\n\n        return mask_layer, new_t\n\n    def forward_diffusion(self, x0, t):\n        # x0: (B, T, num_quantizer)\n        mask_layer, new_t = self.mask_layer(t)  # (1,)\n        mask_prob = self.mask_prob(new_t)  # (B,)\n        mask_token = self.mask_emb(torch.zeros_like(mask_layer))  # (1, hidden_size)\n\n        xt = torch.zeros(x0.shape[0], x0.shape[1], self.hidden_size).to(x0.device)\n\n        cfg_scale = self.cfg_scale\n\n        # get prompt len\n        if torch.rand(1) > cfg_scale:\n            prompt_len = torch.randint(\n                min(x0.shape[1] // 4, 5), x0.shape[1] // 2, (x0.shape[0],)\n            ).to(\n                x0.device\n            )  # (B,)\n        else:\n            prompt_len = torch.zeros(x0.shape[0]).to(x0)  # (B,)\n\n        # get is prompt\n        is_prompt = torch.zeros_like(x0[:, :, 0])  # (B, T)\n        col_indices = (\n            torch.arange(is_prompt.shape[1])\n            .repeat(is_prompt.shape[0], 1)\n            .to(prompt_len)\n        )  # (B, T)\n        is_prompt[col_indices < prompt_len.unsqueeze(1)] = 1  # (B, T) 1 if prompt\n\n        for idx, token_emb_idx in enumerate(self.token_emb):\n            if idx < mask_layer:\n                xt = xt + token_emb_idx(x0[:, :, idx])  # (B, T, hidden_size)\n\n            elif idx == mask_layer:\n                mask = torch.bernoulli(\n                    torch.ones_like(x0[:, :, idx]) * mask_prob[..., None]\n                )  # mask if 1, not mask if 0\n                # prompt part don't need to be masked\n                mask[is_prompt.bool()] = 0\n                # Ensure at least one token is masked\n                mask_num = mask[:,].sum(dim=1, keepdim=False)\n                all_zero_mask = (mask_num == 0).bool()\n                row_indices_to_modify = torch.nonzero(all_zero_mask)\n                # mask the first token if all tokens are not masked (may mask pad if random indices)\n                mask[row_indices_to_modify, prompt_len[row_indices_to_modify]] = 1\n\n                mask = mask[..., None]  # (B, T, 1)\n                xt = (\n                    xt\n                    + mask * mask_token[:, None, :]\n                    + (1 - mask) * token_emb_idx(x0[:, :, idx])\n                )  # (B, T, hidden_size)\n\n            else:\n                # prompt part don't need to be masked\n                xt = (\n                    xt\n                    + token_emb_idx(x0[:, :, idx]) * is_prompt[..., None]\n                    + mask_token * (1 - is_prompt[..., None])\n                )\n\n        return xt, new_t, mask_layer, mask, prompt_len, mask_prob\n\n    def loss_t(self, x0, x_mask, t, cond=None):\n        xt, new_t, mask_layer, mask, prompt_len, mask_prob = self.forward_diffusion(\n            x0, t\n        )\n        # xt: (B, T, hidden_size)\n        # new_t: (B,)\n        # mask_layer: (1,)\n        # mask: (B, T, 1)   mask if 1, not mask if 0\n        # prompt_len: (B,)\n        # mask_prob: (B,)\n\n        mask_layer_cond = self.layer_emb(mask_layer).unsqueeze(1)  # (1, 1, hidden_size)\n        cond = cond + mask_layer_cond  # (B, T, hidden_size)\n\n        embeds = self.diff_estimator(xt, new_t, cond, x_mask)  # (B, T, hidden_size)\n\n        logits = self.to_logits[mask_layer.item()](embeds)  # (B, T, codebook_size)\n\n        # final mask used for loss calculation\n        final_mask = mask * x_mask[..., None]  # (B, T, 1)\n\n        return logits, mask_layer, final_mask, x0, prompt_len, mask_prob\n\n    def compute_loss(self, x0, x_mask, cond=None):\n        # x0: (B, T, num_quantizer)\n        # x_mask: (B, T) mask is 0 for padding\n        t = torch.rand(x0.shape[0], device=x0.device, requires_grad=False)\n        t = torch.clamp(t, 1e-5, 1.0)\n        return self.loss_t(x0, x_mask, t, cond)\n\n    def reset_parameters(self):\n        def _reset_parameters(m):\n            if isinstance(m, nn.MultiheadAttention):\n                if m._qkv_same_embed_dim:\n                    nn.init.normal_(m.in_proj_weight, std=0.02)\n                else:\n                    nn.init.normal_(m.q_proj_weight, std=0.02)\n                    nn.init.normal_(m.k_proj_weight, std=0.02)\n                    nn.init.normal_(m.v_proj_weight, std=0.02)\n\n                if m.in_proj_bias is not None:\n                    nn.init.constant_(m.in_proj_bias, 0.0)\n                    nn.init.constant_(m.out_proj.bias, 0.0)\n                if m.bias_k is not None:\n                    nn.init.xavier_normal_(m.bias_k)\n                if m.bias_v is not None:\n                    nn.init.xavier_normal_(m.bias_v)\n\n            elif (\n                isinstance(m, nn.Conv1d)\n                or isinstance(m, nn.ConvTranspose1d)\n                or isinstance(m, nn.Conv2d)\n                or isinstance(m, nn.ConvTranspose2d)\n            ):\n                m.weight.data.normal_(0.0, 0.02)\n\n            elif isinstance(m, nn.Linear):\n                m.weight.data.normal_(mean=0.0, std=0.02)\n                if m.bias is not None:\n                    m.bias.data.zero_()\n\n            elif isinstance(m, nn.Embedding):\n                m.weight.data.normal_(mean=0.0, std=0.02)\n                if m.padding_idx is not None:\n                    m.weight.data[m.padding_idx].zero_()\n\n        self.apply(_reset_parameters)\n\n    @torch.no_grad()\n    def reverse_diffusion(\n        self,\n        cond,\n        prompt,\n        x_mask=None,\n        prompt_mask=None,\n        temp=1.5,\n        filter_thres=0.98,\n        max_layer=None,\n        gt_code=None,\n        n_timesteps=[10, 4, 4, 4, 4, 4, 4, 4],\n        cfg=1.0,\n        rescale_cfg=1.0,\n    ):\n\n        assert (\n            len(n_timesteps) == self.num_quantizer\n        )  # each layer has a number of steps\n\n        prompt_code = prompt  # (B, prompt_len, num_quantizer)\n        prompt_len = prompt_code.shape[1]\n        target_len = cond.shape[1] - prompt_len\n\n        if x_mask == None:\n            x_mask = torch.ones(cond.shape[0], target_len).to(cond.device)  # (B, T)\n        if prompt_mask == None:\n            prompt_mask = torch.ones(cond.shape[0], prompt_len).to(\n                cond.device\n            )  # (B, prompt_len)\n\n        cum = torch.zeros(x_mask.shape[0], x_mask.shape[1], self.hidden_size).to(\n            x_mask.device\n        )  # (B, T, hidden_size)\n\n        bsz, seq_len, _ = cum.shape\n\n        choice_temp = 1.0\n        start_temp = temp  # temperature for sampling\n        start_choice_temp = choice_temp  # temperature for choicing mask tokens\n\n        if max_layer is None:\n            max_layer = self.num_quantizer\n\n        xt = torch.LongTensor(bsz, seq_len, max_layer).to(x_mask.device)\n\n        if gt_code is not None:\n            gt_layer = gt_code.shape[-1]\n            xt[:, :, :gt_layer] = gt_code\n            for i in range(gt_layer):\n                cum += self.token_emb[i](xt[:, :, i])\n        else:\n            gt_layer = 0\n\n        for mask_layer in range(gt_layer, max_layer):\n            steps = n_timesteps[mask_layer]\n            to_logits = self.to_logits[mask_layer]\n            token_emb = self.token_emb[mask_layer]\n            mask_layer = torch.tensor(mask_layer).to(x_mask.device).long().unsqueeze(0)\n            mask_layer_cond = self.layer_emb(mask_layer).unsqueeze(\n                1\n            )  # (1,) -> (1, 1, hidden_size)\n            temp_cond = cond + mask_layer_cond  # (B, T, hidden_size)\n\n            mask_token = self.mask_emb(torch.zeros_like(mask_layer))  # (1, hidden_size)\n            mask = torch.full((bsz, seq_len, 1), True).to(x_mask.device)  # (B, T, 1)\n            seq = torch.full((bsz, seq_len), 0).to(x_mask.device)\n\n            h = 1.0 / steps\n\n            # prompt_code: (B, prompt_len, num_quantizer)\n            cur_prompt = 0\n            for idx, emb in enumerate(self.token_emb):\n                cur_prompt = cur_prompt + emb(\n                    prompt_code[:, :, idx]\n                )  # (B, prompt_len, hidden_size)\n\n            t_list = [1.0 - i * h for i in range(steps)]\n            t_list.append(0.0)\n            for i in range(steps):\n                t = t_list[i] * torch.ones(bsz).to(x_mask.device)\n                token = token_emb(seq)  # (B, T, hidden_size)\n                cur = cum + mask * mask_token[:, None, :] + (~mask) * token\n                cur = cur + mask_token[:, None, :] * (max_layer - 1 - mask_layer)\n\n                xt_input = torch.cat([cur_prompt, cur], dim=1)  # (B, T, hidden_size)\n                xt_mask = torch.cat(\n                    [prompt_mask, x_mask], dim=1\n                )  # (B, T), mask is 0 for padding\n\n                embeds = self.diff_estimator(xt_input, t, temp_cond, xt_mask)\n                embeds = embeds[:, prompt_len:, :]\n\n                # cfg\n                if cfg > 0:\n                    mask_embeds = self.diff_estimator(\n                        cur, t, temp_cond[:, prompt_len:, :], x_mask\n                    )\n                    pos_emb_std = embeds.std()  # std(g_cond)\n                    embeds = embeds + cfg * (embeds - mask_embeds)  # g_cfg\n                    rescale_embeds = embeds * pos_emb_std / embeds.std()  # g_final\n                    embeds = rescale_cfg * rescale_embeds + (1 - rescale_cfg) * embeds\n\n                logits = to_logits(embeds)  # (B, T, codebook_size)\n                annealing_scale = t_list[i]\n\n                choice_temp = start_choice_temp * annealing_scale\n                temp = start_temp * annealing_scale\n                logits = top_k(logits, filter_thres)\n\n                if i == steps - 1:\n                    # greedy\n                    if steps == 1:\n                        temp = 0.2\n                        sampled_ids = gumbel_sample(logits, temperature=max(temp, 1e-3))\n                    else:\n                        sampled_ids = logits.argmax(dim=-1)\n\n                else:\n                    # sampling\n                    sampled_ids = gumbel_sample(logits, temperature=max(temp, 1e-3))\n\n                seq = torch.where(mask.squeeze(-1), sampled_ids, seq)\n\n                scores = logits.softmax(dim=-1)\n                scores = scores.gather(2, rearrange(sampled_ids, \"b n -> b n 1\"))\n                scores = rearrange(scores, \"b n 1 -> b n\")\n\n                scores = choice_temp * gumbel_noise(scores) + scores\n                scores = 1 - scores\n\n                next_t = t_list[i + 1] * torch.ones(bsz).to(x_mask.device)\n\n                next_mask_num = (self.mask_prob(next_t) * seq_len).long()[0].item()\n\n                if next_mask_num == 0:\n                    break\n                scores = scores.masked_fill(\n                    ~mask.squeeze(-1), -torch.finfo(scores.dtype).max\n                )\n\n                mask_indices = scores.topk(next_mask_num, dim=-1).indices\n                mask = torch.zeros_like(scores, dtype=torch.bool).scatter(\n                    1, mask_indices, True\n                )\n                seq = seq.masked_fill(mask, 0)\n\n                mask = mask.unsqueeze(-1)\n\n            cum = cum + token_emb(seq)\n            xt[..., mask_layer.squeeze(0).item()] = seq\n\n        return xt\n\n    def forward(self, x0, x_mask, cond_code=None):\n        # x0: (B, T, num_quantizer)\n        # x_mask: (B, T) mask is 0 for padding\n        # cond_code: semantic token (B, T)\n        cond = self.cond_emb(cond_code)\n\n        logits, mask_layer, final_mask, x0, prompt_len, mask_prob = self.compute_loss(\n            x0,\n            x_mask,\n            cond,\n        )\n        return logits, mask_layer, final_mask, x0, prompt_len, mask_prob\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/maskgct_utils.py",
    "content": "import time\n\nimport json5\nimport librosa\nimport numpy as np\nimport safetensors\nimport torch\nfrom huggingface_hub import hf_hub_download\nfrom indextts.utils.maskgct.models.codec.amphion_codec.codec import (\n    CodecDecoder,\n    CodecEncoder,\n)\nfrom indextts.utils.maskgct.models.codec.kmeans.repcodec_model import RepCodec\nfrom indextts.utils.maskgct.models.tts.maskgct.maskgct_s2a import MaskGCT_S2A\nfrom transformers import SeamlessM4TFeatureExtractor, Wav2Vec2BertModel\n\n\ndef _load_config(config_fn, lowercase=False):\n    \"\"\"Load configurations into a dictionary\n\n    Args:\n        config_fn (str): path to configuration file\n        lowercase (bool, optional): whether changing keys to lower case. Defaults to False.\n\n    Returns:\n        dict: dictionary that stores configurations\n    \"\"\"\n    with open(config_fn, \"r\") as f:\n        data = f.read()\n    config_ = json5.loads(data)\n    if \"base_config\" in config_:\n        # load configurations from new path\n        p_config_path = os.path.join(os.getenv(\"WORK_DIR\"), config_[\"base_config\"])\n        p_config_ = _load_config(p_config_path)\n        config_ = override_config(p_config_, config_)\n    if lowercase:\n        # change keys in config_ to lower case\n        config_ = get_lowercase_keys_config(config_)\n    return config_\n\n\ndef load_config(config_fn, lowercase=False):\n    \"\"\"Load configurations into a dictionary\n\n    Args:\n        config_fn (str): path to configuration file\n        lowercase (bool, optional): _description_. Defaults to False.\n\n    Returns:\n        JsonHParams: an object that stores configurations\n    \"\"\"\n    config_ = _load_config(config_fn, lowercase=lowercase)\n    # create an JsonHParams object with configuration dict\n    cfg = JsonHParams(**config_)\n    return cfg\n\n\nclass JsonHParams:\n    def __init__(self, **kwargs):\n        for k, v in kwargs.items():\n            if type(v) == dict:\n                v = JsonHParams(**v)\n            self[k] = v\n\n    def keys(self):\n        return self.__dict__.keys()\n\n    def items(self):\n        return self.__dict__.items()\n\n    def values(self):\n        return self.__dict__.values()\n\n    def __len__(self):\n        return len(self.__dict__)\n\n    def __getitem__(self, key):\n        return getattr(self, key)\n\n    def __setitem__(self, key, value):\n        return setattr(self, key, value)\n\n    def __contains__(self, key):\n        return key in self.__dict__\n\n    def __repr__(self):\n        return self.__dict__.__repr__()\n\n\ndef build_semantic_model(\n    path_=\"./models/tts/maskgct/ckpt/wav2vec2bert_stats.pt\", model_path=None\n):\n    if model_path is not None:\n        semantic_model = Wav2Vec2BertModel.from_pretrained(model_path)\n    else:\n        semantic_model = Wav2Vec2BertModel.from_pretrained(\"facebook/w2v-bert-2.0\")\n    semantic_model.eval()\n    stat_mean_var = torch.load(path_)\n    semantic_mean = stat_mean_var[\"mean\"]\n    semantic_std = torch.sqrt(stat_mean_var[\"var\"])\n    return semantic_model, semantic_mean, semantic_std\n\n\ndef build_semantic_codec(cfg):\n    semantic_codec = RepCodec(cfg=cfg)\n    semantic_codec.eval()\n    return semantic_codec\n\n\ndef build_s2a_model(cfg, device):\n    soundstorm_model = MaskGCT_S2A(cfg=cfg)\n    soundstorm_model.eval()\n    soundstorm_model.to(device)\n    return soundstorm_model\n\n\ndef build_acoustic_codec(cfg, device):\n    codec_encoder = CodecEncoder(cfg=cfg.encoder)\n    codec_decoder = CodecDecoder(cfg=cfg.decoder)\n    codec_encoder.eval()\n    codec_decoder.eval()\n    codec_encoder.to(device)\n    codec_decoder.to(device)\n    return codec_encoder, codec_decoder\n\n\nclass Inference_Pipeline:\n    def __init__(\n        self,\n        semantic_model,\n        semantic_codec,\n        semantic_mean,\n        semantic_std,\n        codec_encoder,\n        codec_decoder,\n        s2a_model_1layer,\n        s2a_model_full,\n    ):\n        self.semantic_model = semantic_model\n        self.semantic_codec = semantic_codec\n        self.semantic_mean = semantic_mean\n        self.semantic_std = semantic_std\n\n        self.codec_encoder = codec_encoder\n        self.codec_decoder = codec_decoder\n        self.s2a_model_1layer = s2a_model_1layer\n        self.s2a_model_full = s2a_model_full\n\n    @torch.no_grad()\n    def get_emb(self, input_features, attention_mask):\n        vq_emb = self.semantic_model(\n            input_features=input_features,\n            attention_mask=attention_mask,\n            output_hidden_states=True,\n        )\n        feat = vq_emb.hidden_states[17]  # (B, T, C)\n        feat = (feat - self.semantic_mean.to(feat)) / self.semantic_std.to(feat)\n        return feat\n\n    @torch.no_grad()\n    def extract_acoustic_code(self, speech):\n        vq_emb = self.codec_encoder(speech.unsqueeze(1))\n        _, vq, _, _, _ = self.codec_decoder.quantizer(vq_emb)\n        acoustic_code = vq.permute(1, 2, 0)\n        return acoustic_code\n\n    @torch.no_grad()\n    def get_scode(self, inputs):\n        semantic_code, feat = self.semantic_codec.quantize(inputs)\n        # vq = self.semantic_codec.quantizer.vq2emb(semantic_code.unsqueeze(1))\n        # vq = vq.transpose(1,2)\n        return semantic_code\n\n    @torch.no_grad()\n    def semantic2acoustic(\n        self,\n        combine_semantic_code,\n        acoustic_code,\n        n_timesteps=[25, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n        cfg=2.5,\n        rescale_cfg=0.75,\n    ):\n        semantic_code = combine_semantic_code\n\n        cond = self.s2a_model_1layer.cond_emb(semantic_code)\n        prompt = acoustic_code[:, :, :]\n        predict_1layer = self.s2a_model_1layer.reverse_diffusion(\n            cond=cond,\n            prompt=prompt,\n            temp=1.5,\n            filter_thres=0.98,\n            n_timesteps=n_timesteps[:1],\n            cfg=cfg,\n            rescale_cfg=rescale_cfg,\n        )\n\n        cond = self.s2a_model_full.cond_emb(semantic_code)\n        prompt = acoustic_code[:, :, :]\n        predict_full = self.s2a_model_full.reverse_diffusion(\n            cond=cond,\n            prompt=prompt,\n            temp=1.5,\n            filter_thres=0.98,\n            n_timesteps=n_timesteps,\n            cfg=cfg,\n            rescale_cfg=rescale_cfg,\n            gt_code=predict_1layer,\n        )\n\n        vq_emb = self.codec_decoder.vq2emb(\n            predict_full.permute(2, 0, 1), n_quantizers=12\n        )\n        recovered_audio = self.codec_decoder(vq_emb)\n        prompt_vq_emb = self.codec_decoder.vq2emb(\n            prompt.permute(2, 0, 1), n_quantizers=12\n        )\n        recovered_prompt_audio = self.codec_decoder(prompt_vq_emb)\n        recovered_prompt_audio = recovered_prompt_audio[0][0].cpu().numpy()\n        recovered_audio = recovered_audio[0][0].cpu().numpy()\n        combine_audio = np.concatenate([recovered_prompt_audio, recovered_audio])\n\n        return combine_audio, recovered_audio\n\n    def s2a_inference(\n        self,\n        prompt_speech_path,\n        combine_semantic_code,\n        cfg=2.5,\n        n_timesteps_s2a=[25, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n        cfg_s2a=2.5,\n        rescale_cfg_s2a=0.75,\n    ):\n        speech = librosa.load(prompt_speech_path, sr=24000)[0]\n        acoustic_code = self.extract_acoustic_code(\n            torch.tensor(speech).unsqueeze(0).to(combine_semantic_code.device)\n        )\n        _, recovered_audio = self.semantic2acoustic(\n            combine_semantic_code,\n            acoustic_code,\n            n_timesteps=n_timesteps_s2a,\n            cfg=cfg_s2a,\n            rescale_cfg=rescale_cfg_s2a,\n        )\n\n        return recovered_audio\n\n    @torch.no_grad()\n    def gt_inference(\n        self,\n        prompt_speech_path,\n        combine_semantic_code,\n    ):\n        speech = librosa.load(prompt_speech_path, sr=24000)[0]\n        \"\"\"\n        acoustic_code = self.extract_acoustic_code(\n            torch.tensor(speech).unsqueeze(0).to(combine_semantic_code.device)\n        )\n        prompt = acoustic_code[:, :, :]\n        prompt_vq_emb = self.codec_decoder.vq2emb(\n            prompt.permute(2, 0, 1), n_quantizers=12\n        )\n        \"\"\"\n\n        prompt_vq_emb = self.codec_encoder(\n            torch.tensor(speech)\n            .unsqueeze(0)\n            .unsqueeze(1)\n            .to(combine_semantic_code.device)\n        )\n        recovered_prompt_audio = self.codec_decoder(prompt_vq_emb)\n        recovered_prompt_audio = recovered_prompt_audio[0][0].cpu().numpy()\n        return recovered_prompt_audio\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/text_utils.py",
    "content": "import re\n\nfrom textstat import textstat\n\n\ndef contains_chinese(text):\n    # 正则表达式，用于匹配中文字符 + 数字 -> 都认为是 zh\n    if re.search(r'[\\u4e00-\\u9fff0-9]', text):\n        return True\n    return False\n\n\ndef get_text_syllable_num(text):\n    chinese_char_pattern = re.compile(r'[\\u4e00-\\u9fff]')\n    number_char_pattern = re.compile(r'[0-9]')\n    syllable_num = 0\n    tokens = re.findall(r'[\\u4e00-\\u9fff]+|[a-zA-Z]+|[0-9]+', text)\n    # print(tokens)\n    if contains_chinese(text):\n        for token in tokens:\n            if chinese_char_pattern.search(token) or number_char_pattern.search(token):\n                syllable_num += len(token)\n            else:\n                syllable_num += textstat.syllable_count(token)\n    else:\n        syllable_num = textstat.syllable_count(text)\n\n    return syllable_num\n\n\ndef get_text_tts_dur(text):\n    min_speed = 3  # 2.18 #\n    max_speed = 5.50\n\n    ratio = 0.8517 if contains_chinese(text) else 1.0\n\n    syllable_num = get_text_syllable_num(text)\n    max_dur = syllable_num * ratio / max_speed\n    min_dur = syllable_num * ratio / min_speed\n\n    return max_dur, min_dur"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/typical_sampling.py",
    "content": "import torch\nfrom transformers import TypicalLogitsWarper as BaseTypicalLogitsWarper\n\nclass TypicalLogitsWarper(BaseTypicalLogitsWarper):\n    def __init__(self, mass: float = 0.9, filter_value: float = -float(\"Inf\"), min_tokens_to_keep: int = 1):\n        super().__init__(mass=mass, filter_value=filter_value, min_tokens_to_keep=min_tokens_to_keep)\n\n    def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor:\n        # calculate entropy\n        normalized = torch.nn.functional.log_softmax(scores, dim=-1)\n        p = torch.exp(normalized)\n        ent = -(normalized * p).nansum(-1, keepdim=True)\n\n        # shift and sort\n        shifted_scores = torch.abs((-normalized) - ent)\n        sorted_scores, sorted_indices = torch.sort(shifted_scores, descending=False)\n        sorted_logits = scores.gather(-1, sorted_indices)\n        cumulative_probs = sorted_logits.softmax(dim=-1).cumsum(dim=-1)\n\n        # Remove tokens with cumulative mass above the threshold\n        last_ind = (cumulative_probs < self.mass).sum(dim=1)\n        last_ind[last_ind < 0] = 0\n        sorted_indices_to_remove = sorted_scores > sorted_scores.gather(1, last_ind.view(-1, 1))\n        if self.min_tokens_to_keep > 1:\n            # Keep at least min_tokens_to_keep (set to min_tokens_to_keep-1 because we add the first one below)\n            sorted_indices_to_remove[..., : self.min_tokens_to_keep] = 0\n        indices_to_remove = sorted_indices_to_remove.scatter(1, sorted_indices, sorted_indices_to_remove)\n\n        scores = scores.masked_fill(indices_to_remove, self.filter_value)\n        return scores\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/utils.py",
    "content": "import os\nimport re\nimport random\nimport torch\nimport torchaudio\n\nMATPLOTLIB_FLAG = False\n\n\ndef load_audio(audiopath, sampling_rate):\n    audio, sr = torchaudio.load(audiopath)\n    #print(f\"wave shape: {audio.shape}, sample_rate: {sr}\")\n\n    if audio.size(0) > 1:  # mix to mono\n        audio = audio[0].unsqueeze(0)\n\n    if sr != sampling_rate:\n        try:\n            audio = torchaudio.functional.resample(audio, sr, sampling_rate)\n        except Exception as e:\n            print(f\"Warning: {audiopath}, wave shape: {audio.shape}, sample_rate: {sr}\")\n            return None\n    # clip audio invalid values\n    audio.clip_(-1, 1)\n    return audio\n\n\ndef tokenize_by_CJK_char(line: str) -> str: \n    \"\"\"  \n    Tokenize a line of text with CJK char.\n\n    Note: All return charaters will be upper case.\n\n    Example:                                                                                                                                                                                                                                                                    \n      input = \"你好世界是 hello world 的中文\"\n      output = \"你 好 世 界 是 HELLO WORLD 的 中 文\"\n\n    Args:\n      line:\n        The input text.\n\n    Return:\n      A new string tokenize by CJK char.\n    \"\"\"\n    # The CJK ranges is from https://github.com/alvations/nltk/blob/79eed6ddea0d0a2c212c1060b477fc268fec4d4b/nltk/tokenize/util.py\n    pattern = re.compile(\n        r\"([\\u1100-\\u11ff\\u2e80-\\ua4cf\\ua840-\\uD7AF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF65-\\uFFDC\\U00020000-\\U0002FFFF])\"\n    )    \n    chars = pattern.split(line.strip().upper())\n    return \" \".join([w.strip() for w in chars if w.strip()])\n\n\ndef make_pad_mask(lengths: torch.Tensor, max_len: int = 0) -> torch.Tensor:\n    \"\"\"Make mask tensor containing indices of padded part.\n\n    See description of make_non_pad_mask.\n\n    Args:\n        lengths (torch.Tensor): Batch of lengths (B,).\n    Returns:\n        torch.Tensor: Mask tensor containing indices of padded part.\n\n    Examples:\n        >>> lengths = [5, 3, 2]\n        >>> make_pad_mask(lengths)\n        masks = [[0, 0, 0, 0 ,0],\n                 [0, 0, 0, 1, 1],\n                 [0, 0, 1, 1, 1]]\n    \"\"\"\n    batch_size = lengths.size(0)\n    max_len = max_len if max_len > 0 else lengths.max().item()\n    seq_range = torch.arange(0,\n                             max_len,\n                             dtype=torch.int64,\n                             device=lengths.device)\n    seq_range_expand = seq_range.unsqueeze(0).expand(batch_size, max_len)\n    seq_length_expand = lengths.unsqueeze(-1)\n    mask = seq_range_expand >= seq_length_expand\n    return mask\n\n\ndef safe_log(x: torch.Tensor, clip_val: float = 1e-7) -> torch.Tensor:\n    \"\"\"\n    Computes the element-wise logarithm of the input tensor with clipping to avoid near-zero values.\n\n    Args:\n        x (Tensor): Input tensor.\n        clip_val (float, optional): Minimum value to clip the input tensor. Defaults to 1e-7.\n\n    Returns:\n        Tensor: Element-wise logarithm of the input tensor with clipping applied.\n    \"\"\"\n    return torch.log(torch.clip(x, min=clip_val))\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/webui_utils.py",
    "content": "import gradio as gr\n\n\ndef html_center(text, label='p'):\n    return f\"\"\"<div style=\"text-align: center; margin: 100; padding: 50;\">\n                <{label} style=\"margin: 0; padding: 0;\">{text}</{label}>\n                </div>\"\"\"\n\n\ndef html_left(text, label='p'):\n    return f\"\"\"<div style=\"text-align: left; margin: 0; padding: 0;\">\n                <{label} style=\"margin: 0; padding: 0;\">{text}</{label}>\n                </div>\"\"\"\n\n\ndef next_page(page_number,sentences):\n    new_page_number = int(page_number) + 1\n    update_page_number = gr.update(value=str(new_page_number))\n    update_prev_page = gr.update(visible=True, interactive=True)\n    if len(sentences.values) <= new_page_number * 20:\n        update_next_page = gr.update(visible=False, interactive=False)\n    else:\n        update_next_page = gr.update(visible=True, interactive=True)\n    return update_page_number, update_next_page, update_prev_page\n\n\ndef prev_page(page_number):\n    new_page_number = int(page_number) - 1\n    update_page_number = gr.update(value=str(new_page_number))\n    if new_page_number == 1:\n        update_prev_page = gr.update(visible=False, interactive=False)\n    else:\n        update_prev_page = gr.update(visible=True, interactive=True)\n    update_next_page = gr.update(visible=True, interactive=True)\n    return update_page_number, update_next_page, update_prev_page\n\n\ndef update_current_texts(page_number,sentences):\n    start_index = (int(page_number) - 1) * 20\n    end_index = int(page_number) * 20\n    current_texts = sentences.values[start_index:end_index if end_index < len(sentences.values) else len(sentences.values)]\n    return gr.update(values=current_texts)\n"
  },
  {
    "path": "xinference/thirdparty/indextts/utils/xtransformers.py",
    "content": "import math\nfrom collections import namedtuple\nfrom functools import partial\nfrom inspect import isfunction\n\nimport torch\nimport torch.nn.functional as F\nfrom einops import rearrange, repeat\nfrom torch import einsum, nn\n\nDEFAULT_DIM_HEAD = 64\n\nIntermediates = namedtuple('Intermediates', [\n    'pre_softmax_attn',\n    'post_softmax_attn'\n])\n\nLayerIntermediates = namedtuple('Intermediates', [\n    'hiddens',\n    'attn_intermediates',\n    'past_key_values',\n])\n\n\n# helpers\n\ndef exists(val):\n    return val is not None\n\n\ndef default(val, d):\n    if exists(val):\n        return val\n    return d() if isfunction(d) else d\n\n\ndef cast_tuple(val, depth):\n    return val if isinstance(val, tuple) else (val,) * depth\n\n\nclass always():\n    def __init__(self, val):\n        self.val = val\n\n    def __call__(self, *args, **kwargs):\n        return self.val\n\n\nclass not_equals():\n    def __init__(self, val):\n        self.val = val\n\n    def __call__(self, x, *args, **kwargs):\n        return x != self.val\n\n\nclass equals():\n    def __init__(self, val):\n        self.val = val\n\n    def __call__(self, x, *args, **kwargs):\n        return x == self.val\n\n\ndef max_neg_value(tensor):\n    return -torch.finfo(tensor.dtype).max\n\n\ndef l2norm(t):\n    return F.normalize(t, p=2, dim=-1)\n\n\n# init helpers\n\ndef init_zero_(layer):\n    nn.init.constant_(layer.weight, 0.)\n    if exists(layer.bias):\n        nn.init.constant_(layer.bias, 0.)\n\n\n# keyword argument helpers\n\ndef pick_and_pop(keys, d):\n    values = list(map(lambda key: d.pop(key), keys))\n    return dict(zip(keys, values))\n\n\ndef group_dict_by_key(cond, d):\n    return_val = [dict(), dict()]\n    for key in d.keys():\n        match = bool(cond(key))\n        ind = int(not match)\n        return_val[ind][key] = d[key]\n    return (*return_val,)\n\n\ndef string_begins_with(prefix, str):\n    return str.startswith(prefix)\n\n\ndef group_by_key_prefix(prefix, d):\n    return group_dict_by_key(partial(string_begins_with, prefix), d)\n\n\ndef groupby_prefix_and_trim(prefix, d):\n    kwargs_with_prefix, kwargs = group_dict_by_key(partial(string_begins_with, prefix), d)\n    kwargs_without_prefix = dict(map(lambda x: (x[0][len(prefix):], x[1]), tuple(kwargs_with_prefix.items())))\n    return kwargs_without_prefix, kwargs\n\n\n# activations\n\nclass ReluSquared(nn.Module):\n    def forward(self, x):\n        return F.relu(x) ** 2\n\n\n# positional embeddings\n\nclass AbsolutePositionalEmbedding(nn.Module):\n    def __init__(self, dim, max_seq_len):\n        super().__init__()\n        self.scale = dim ** -0.5\n        self.emb = nn.Embedding(max_seq_len, dim)\n\n    def forward(self, x):\n        n = torch.arange(x.shape[1], device=x.device)\n        pos_emb = self.emb(n)\n        pos_emb = rearrange(pos_emb, 'n d -> () n d')\n        return pos_emb * self.scale\n\n\nclass FixedPositionalEmbedding(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        inv_freq = 1. / (10000 ** (torch.arange(0, dim, 2).float() / dim))\n        self.register_buffer('inv_freq', inv_freq)\n\n    def forward(self, x, seq_dim=1, offset=0):\n        t = torch.arange(x.shape[seq_dim], device=x.device).type_as(self.inv_freq) + offset\n        sinusoid_inp = torch.einsum('i , j -> i j', t, self.inv_freq)\n        emb = torch.cat((sinusoid_inp.sin(), sinusoid_inp.cos()), dim=-1)\n        return rearrange(emb, 'n d -> () n d')\n\n\nclass RelativePositionBias(nn.Module):\n    def __init__(self, scale, causal=False, num_buckets=32, max_distance=128, heads=8):\n        super().__init__()\n        self.scale = scale\n        self.causal = causal\n        self.num_buckets = num_buckets\n        self.max_distance = max_distance\n        self.relative_attention_bias = nn.Embedding(num_buckets, heads)\n\n    @staticmethod\n    def _relative_position_bucket(relative_position, causal=True, num_buckets=32, max_distance=128):\n        ret = 0\n        n = -relative_position\n        if not causal:\n            num_buckets //= 2\n            ret += (n < 0).long() * num_buckets\n            n = torch.abs(n)\n        else:\n            n = torch.max(n, torch.zeros_like(n))\n\n        max_exact = num_buckets // 2\n        is_small = n < max_exact\n\n        val_if_large = max_exact + (\n                torch.log(n.float() / max_exact) / math.log(max_distance / max_exact) * (num_buckets - max_exact)\n        ).long()\n        val_if_large = torch.min(val_if_large, torch.full_like(val_if_large, num_buckets - 1))\n\n        ret += torch.where(is_small, n, val_if_large)\n        return ret\n\n    def forward(self, qk_dots):\n        i, j, device = *qk_dots.shape[-2:], qk_dots.device\n        q_pos = torch.arange(i, dtype=torch.long, device=device)\n        k_pos = torch.arange(j, dtype=torch.long, device=device)\n        rel_pos = k_pos[None, :] - q_pos[:, None]\n        rp_bucket = self._relative_position_bucket(rel_pos, causal=self.causal, num_buckets=self.num_buckets,\n                                                   max_distance=self.max_distance)\n        values = self.relative_attention_bias(rp_bucket)\n        bias = rearrange(values, 'i j h -> () h i j')\n        return qk_dots + (bias * self.scale)\n\n\nclass AlibiPositionalBias(nn.Module):\n    def __init__(self, heads, **kwargs):\n        super().__init__()\n        self.heads = heads\n        slopes = torch.Tensor(self._get_slopes(heads))\n        slopes = rearrange(slopes, 'h -> () h () ()')\n        self.register_buffer('slopes', slopes, persistent=False)\n        self.register_buffer('bias', None, persistent=False)\n\n    @staticmethod\n    def _get_slopes(heads):\n        def get_slopes_power_of_2(n):\n            start = (2 ** (-2 ** -(math.log2(n) - 3)))\n            ratio = start\n            return [start * ratio ** i for i in range(n)]\n\n        if math.log2(heads).is_integer():\n            return get_slopes_power_of_2(heads)\n\n        closest_power_of_2 = 2 ** math.floor(math.log2(heads))\n        return get_slopes_power_of_2(closest_power_of_2) + get_slopes_power_of_2(2 * closest_power_of_2)[0::2][\n                                                           :heads - closest_power_of_2]\n\n    def forward(self, qk_dots):\n        h, i, j, device = *qk_dots.shape[-3:], qk_dots.device\n\n        if exists(self.bias) and self.bias.shape[-1] >= j:\n            return qk_dots + self.bias[..., :j]\n\n        bias = torch.arange(j, device=device)\n        bias = rearrange(bias, 'j -> () () () j')\n        bias = bias * self.slopes\n\n        num_heads_unalibied = h - bias.shape[1]\n        bias = F.pad(bias, (0, 0, 0, 0, 0, num_heads_unalibied))\n\n        self.register_buffer('bias', bias, persistent=False)\n        return qk_dots + self.bias\n\n\nclass LearnedAlibiPositionalBias(AlibiPositionalBias):\n    def __init__(self, heads, bidirectional=False):\n        super().__init__(heads)\n        los_slopes = torch.log(self.slopes)\n        self.learned_logslopes = nn.Parameter(los_slopes)\n\n        self.bidirectional = bidirectional\n        if self.bidirectional:\n            self.learned_logslopes_future = nn.Parameter(los_slopes)\n\n    def forward(self, qk_dots):\n        h, i, j, device = *qk_dots.shape[-3:], qk_dots.device\n\n        def get_slopes(param):\n            return F.pad(param.exp(), (0, 0, 0, 0, 0, h - param.shape[1]))\n\n        if exists(self.bias) and self.bias.shape[-1] >= j:\n            bias = self.bias[..., :i, :j]\n        else:\n            i_arange = torch.arange(i, device=device)\n            j_arange = torch.arange(j, device=device)\n            bias = rearrange(j_arange, 'j -> 1 1 1 j') - rearrange(i_arange, 'i -> 1 1 i 1')\n            self.register_buffer('bias', bias, persistent=False)\n\n        if self.bidirectional:\n            past_slopes = get_slopes(self.learned_logslopes)\n            future_slopes = get_slopes(self.learned_logslopes_future)\n            bias = torch.tril(bias * past_slopes) + torch.triu(bias * future_slopes)\n        else:\n            slopes = get_slopes(self.learned_logslopes)\n            bias = bias * slopes\n\n        return qk_dots + bias\n\n\nclass RotaryEmbedding(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        inv_freq = 1. / (10000 ** (torch.arange(0, dim, 2).float() / dim))\n        self.register_buffer('inv_freq', inv_freq)\n\n    def forward(self, max_seq_len, device):\n        t = torch.arange(max_seq_len, device=device).type_as(self.inv_freq)\n        freqs = torch.einsum('i , j -> i j', t, self.inv_freq)\n        emb = torch.cat((freqs, freqs), dim=-1)\n        return rearrange(emb, 'n d -> () () n d')\n\n\ndef rotate_half(x):\n    x = rearrange(x, '... (j d) -> ... j d', j=2)\n    x1, x2 = x.unbind(dim=-2)\n    return torch.cat((-x2, x1), dim=-1)\n\n\ndef apply_rotary_pos_emb(t, freqs):\n    seq_len = t.shape[-2]\n    freqs = freqs[:, :, -seq_len:]\n    return (t * freqs.cos()) + (rotate_half(t) * freqs.sin())\n\n\n# norms\n\nclass Scale(nn.Module):\n    def __init__(self, value, fn):\n        super().__init__()\n        self.value = value\n        self.fn = fn\n\n    def forward(self, x, **kwargs):\n        out = self.fn(x, **kwargs)\n        scale_fn = lambda t: t * self.value\n\n        if not isinstance(out, tuple):\n            return scale_fn(out)\n\n        return (scale_fn(out[0]), *out[1:])\n\n\nclass Rezero(nn.Module):\n    def __init__(self, fn):\n        super().__init__()\n        self.fn = fn\n        self.g = nn.Parameter(torch.zeros(1))\n\n    def forward(self, x, **kwargs):\n        out = self.fn(x, **kwargs)\n        rezero_fn = lambda t: t * self.g\n\n        if not isinstance(out, tuple):\n            return rezero_fn(out)\n\n        return (rezero_fn(out[0]), *out[1:])\n\n\nclass ScaleNorm(nn.Module):\n    def __init__(self, dim, eps=1e-5):\n        super().__init__()\n        self.scale = dim ** -0.5\n        self.eps = eps\n        self.g = nn.Parameter(torch.ones(1))\n\n    def forward(self, x):\n        norm = torch.norm(x, dim=-1, keepdim=True) * self.scale\n        return x / norm.clamp(min=self.eps) * self.g\n\n\nclass RMSNorm(nn.Module):\n    def __init__(self, dim, eps=1e-8):\n        super().__init__()\n        self.scale = dim ** -0.5\n        self.eps = eps\n        self.g = nn.Parameter(torch.ones(dim))\n\n    def forward(self, x):\n        norm = torch.norm(x, dim=-1, keepdim=True) * self.scale\n        return x / norm.clamp(min=self.eps) * self.g\n\n\nclass RMSScaleShiftNorm(nn.Module):\n    def __init__(self, dim, eps=1e-8):\n        super().__init__()\n        self.scale = dim ** -0.5\n        self.eps = eps\n        self.g = nn.Parameter(torch.ones(dim))\n        self.scale_shift_process = nn.Linear(dim * 2, dim * 2)\n\n    def forward(self, x, norm_scale_shift_inp):\n        norm = torch.norm(x, dim=-1, keepdim=True) * self.scale\n        norm = x / norm.clamp(min=self.eps) * self.g\n\n        ss_emb = self.scale_shift_process(norm_scale_shift_inp)\n        scale, shift = torch.chunk(ss_emb, 2, dim=1)\n        h = norm * (1 + scale.unsqueeze(1)) + shift.unsqueeze(1)\n        return h\n\n\n# residual and residual gates\n\nclass Residual(nn.Module):\n    def __init__(self, dim, scale_residual=False):\n        super().__init__()\n        self.residual_scale = nn.Parameter(torch.ones(dim)) if scale_residual else None\n\n    def forward(self, x, residual):\n        if exists(self.residual_scale):\n            residual = residual * self.residual_scale\n\n        return x + residual\n\n\nclass GRUGating(nn.Module):\n    def __init__(self, dim, scale_residual=False):\n        super().__init__()\n        self.gru = nn.GRUCell(dim, dim)\n        self.residual_scale = nn.Parameter(torch.ones(dim)) if scale_residual else None\n\n    def forward(self, x, residual):\n        if exists(self.residual_scale):\n            residual = residual * self.residual_scale\n\n        gated_output = self.gru(\n            rearrange(x, 'b n d -> (b n) d'),\n            rearrange(residual, 'b n d -> (b n) d')\n        )\n\n        return gated_output.reshape_as(x)\n\n\n# token shifting\n\ndef shift(t, amount, mask=None):\n    if amount == 0:\n        return t\n\n    if exists(mask):\n        t = t.masked_fill(~mask[..., None], 0.)\n\n    return F.pad(t, (0, 0, amount, -amount), value=0.)\n\n\nclass ShiftTokens(nn.Module):\n    def __init__(self, shifts, fn):\n        super().__init__()\n        self.fn = fn\n        self.shifts = tuple(shifts)\n\n    def forward(self, x, **kwargs):\n        mask = kwargs.get('mask', None)\n        shifts = self.shifts\n        segments = len(shifts)\n        feats_per_shift = x.shape[-1] // segments\n        splitted = x.split(feats_per_shift, dim=-1)\n        segments_to_shift, rest = splitted[:segments], splitted[segments:]\n        segments_to_shift = list(map(lambda args: shift(*args, mask=mask), zip(segments_to_shift, shifts)))\n        x = torch.cat((*segments_to_shift, *rest), dim=-1)\n        return self.fn(x, **kwargs)\n\n\n# feedforward\n\nclass GLU(nn.Module):\n    def __init__(self, dim_in, dim_out, activation):\n        super().__init__()\n        self.act = activation\n        self.proj = nn.Linear(dim_in, dim_out * 2)\n\n    def forward(self, x):\n        x, gate = self.proj(x).chunk(2, dim=-1)\n        return x * self.act(gate)\n\n\nclass FeedForward(nn.Module):\n    def __init__(\n            self,\n            dim,\n            dim_out=None,\n            mult=4,\n            glu=False,\n            relu_squared=False,\n            post_act_ln=False,\n            dropout=0.,\n            zero_init_output=False\n    ):\n        super().__init__()\n        inner_dim = int(dim * mult)\n        dim_out = default(dim_out, dim)\n        activation = ReluSquared() if relu_squared else nn.GELU()\n\n        project_in = nn.Sequential(\n            nn.Linear(dim, inner_dim),\n            activation\n        ) if not glu else GLU(dim, inner_dim, activation)\n\n        self.net = nn.Sequential(\n            project_in,\n            nn.LayerNorm(inner_dim) if post_act_ln else nn.Identity(),\n            nn.Dropout(dropout),\n            nn.Linear(inner_dim, dim_out)\n        )\n\n        # init last linear layer to 0\n        if zero_init_output:\n            init_zero_(self.net[-1])\n\n    def forward(self, x):\n        return self.net(x)\n\n\n# attention.\n\nclass Attention(nn.Module):\n    def __init__(\n            self,\n            dim,\n            dim_head=DEFAULT_DIM_HEAD,\n            heads=8,\n            causal=False,\n            talking_heads=False,\n            head_scale=False,\n            collab_heads=False,\n            collab_compression=.3,\n            sparse_topk=None,\n            use_entmax15=False,\n            num_mem_kv=0,\n            dropout=0.,\n            on_attn=False,\n            gate_values=False,\n            zero_init_output=False,\n            max_attend_past=None,\n            qk_norm=False,\n            scale_init_value=None,\n            rel_pos_bias=False,\n            rel_pos_num_buckets=32,\n            rel_pos_max_distance=128,\n    ):\n        super().__init__()\n        self.scale = dim_head ** -0.5\n\n        self.heads = heads\n        self.causal = causal\n        self.max_attend_past = max_attend_past\n\n        qk_dim = v_dim = dim_head * heads\n\n        # collaborative heads\n        self.collab_heads = collab_heads\n        if self.collab_heads:\n            qk_dim = int(collab_compression * qk_dim)\n            self.collab_mixing = nn.Parameter(torch.randn(heads, qk_dim))\n\n        self.to_q = nn.Linear(dim, qk_dim, bias=False)\n        self.to_k = nn.Linear(dim, qk_dim, bias=False)\n        self.to_v = nn.Linear(dim, v_dim, bias=False)\n\n        self.dropout = nn.Dropout(dropout)\n\n        # add GLU gating for aggregated values, from alphafold2\n        self.to_v_gate = None\n        if gate_values:\n            self.to_v_gate = nn.Linear(dim, v_dim)\n            nn.init.constant_(self.to_v_gate.weight, 0)\n            nn.init.constant_(self.to_v_gate.bias, 1)\n\n        # cosine sim attention\n        self.qk_norm = qk_norm\n        if qk_norm:\n            scale_init_value = default(scale_init_value,\n                                       -3)  # if not provided, initialize as though it were sequence length of 1024\n            self.scale = nn.Parameter(torch.ones(1, heads, 1, 1) * scale_init_value)\n\n        # talking heads\n        self.talking_heads = talking_heads\n        if talking_heads:\n            self.pre_softmax_proj = nn.Parameter(torch.randn(heads, heads))\n            self.post_softmax_proj = nn.Parameter(torch.randn(heads, heads))\n\n        # head scaling\n        self.head_scale = head_scale\n        if head_scale:\n            self.head_scale_params = nn.Parameter(torch.ones(1, heads, 1, 1))\n\n        # explicit topk sparse attention\n        self.sparse_topk = sparse_topk\n\n        # entmax\n        self.attn_fn = F.softmax\n\n        # add memory key / values\n        self.num_mem_kv = num_mem_kv\n        if num_mem_kv > 0:\n            self.mem_k = nn.Parameter(torch.randn(heads, num_mem_kv, dim_head))\n            self.mem_v = nn.Parameter(torch.randn(heads, num_mem_kv, dim_head))\n\n        # attention on attention\n        self.attn_on_attn = on_attn\n        self.to_out = nn.Sequential(nn.Linear(v_dim, dim * 2), nn.GLU()) if on_attn else nn.Linear(v_dim, dim)\n\n        self.rel_pos_bias = rel_pos_bias\n        if rel_pos_bias:\n            assert rel_pos_num_buckets <= rel_pos_max_distance, 'number of relative position buckets must be less than the relative position max distance'\n            self.rel_pos = RelativePositionBias(scale=dim_head ** 0.5, causal=causal, heads=heads,\n                                                num_buckets=rel_pos_num_buckets, max_distance=rel_pos_max_distance)\n\n        # init output projection 0\n        if zero_init_output:\n            init_zero_(self.to_out)\n\n    def forward(\n            self,\n            x,\n            context=None,\n            mask=None,\n            context_mask=None,\n            attn_mask=None,\n            sinusoidal_emb=None,\n            rotary_pos_emb=None,\n            prev_attn=None,\n            mem=None,\n            layer_past=None,\n    ):\n        b, n, _, h, talking_heads, collab_heads, head_scale, scale, device, has_context = *x.shape, self.heads, self.talking_heads, self.collab_heads, self.head_scale, self.scale, x.device, exists(\n            context)\n        kv_input = default(context, x)\n\n        q_input = x\n        k_input = kv_input\n        v_input = kv_input\n\n        if exists(mem):\n            k_input = torch.cat((mem, k_input), dim=-2)\n            v_input = torch.cat((mem, v_input), dim=-2)\n\n        if exists(sinusoidal_emb):\n            # in shortformer, the query would start at a position offset depending on the past cached memory\n            offset = k_input.shape[-2] - q_input.shape[-2]\n            q_input = q_input + sinusoidal_emb(q_input, offset=offset)\n            k_input = k_input + sinusoidal_emb(k_input)\n\n        q = self.to_q(q_input)\n        k = self.to_k(k_input)\n        v = self.to_v(v_input)\n\n        if not collab_heads:\n            q, k, v = map(lambda t: rearrange(t, 'b n (h d) -> b h n d', h=h), (q, k, v))\n        else:\n            q = einsum('b i d, h d -> b h i d', q, self.collab_mixing)\n            k = rearrange(k, 'b n d -> b () n d')\n            v = rearrange(v, 'b n (h d) -> b h n d', h=h)\n\n        if layer_past is not None:\n            past_key, past_value = layer_past\n            k = torch.cat([past_key, k], dim=-2)\n            v = torch.cat([past_value, v], dim=-2)\n        k_cache = k\n        v_cache = v\n\n        if exists(rotary_pos_emb) and not has_context:\n            l = rotary_pos_emb.shape[-1]\n            (ql, qr), (kl, kr), (vl, vr) = map(lambda t: (t[..., :l], t[..., l:]), (q, k, v))\n            ql, kl, vl = map(lambda t: apply_rotary_pos_emb(t, rotary_pos_emb), (ql, kl, vl))\n            q, k, v = map(lambda t: torch.cat(t, dim=-1), ((ql, qr), (kl, kr), (vl, vr)))\n\n        input_mask = None\n        if any(map(exists, (mask, context_mask))):\n            q_mask = default(mask, lambda: torch.ones((b, n), device=device).bool())\n            k_mask = q_mask if not exists(context) else context_mask\n            k_mask = default(k_mask, lambda: torch.ones((b, k.shape[-2]), device=device).bool())\n            q_mask = rearrange(q_mask, 'b i -> b () i ()')\n            k_mask = rearrange(k_mask, 'b j -> b () () j')\n            input_mask = q_mask * k_mask\n\n        if self.num_mem_kv > 0:\n            mem_k, mem_v = map(lambda t: repeat(t, 'h n d -> b h n d', b=b), (self.mem_k, self.mem_v))\n            k = torch.cat((mem_k, k), dim=-2)\n            v = torch.cat((mem_v, v), dim=-2)\n            if exists(input_mask):\n                input_mask = F.pad(input_mask, (self.num_mem_kv, 0), value=True)\n\n        if collab_heads:\n            k = k.expand(-1, h, -1, -1)\n\n        if self.qk_norm:\n            q, k = map(l2norm, (q, k))\n            scale = 1 / (self.scale.exp().clamp(min=1e-2))\n\n        dots = einsum('b h i d, b h j d -> b h i j', q, k) * scale\n        mask_value = max_neg_value(dots)\n\n        if exists(prev_attn):\n            dots = dots + prev_attn\n\n        pre_softmax_attn = dots.clone()\n\n        if talking_heads:\n            dots = einsum('b h i j, h k -> b k i j', dots, self.pre_softmax_proj).contiguous()\n\n        if self.rel_pos_bias:\n            dots = self.rel_pos(dots)\n\n        if exists(input_mask):\n            dots.masked_fill_(~input_mask, mask_value)\n            del input_mask\n\n        if exists(attn_mask):\n            assert 2 <= attn_mask.ndim <= 4, 'attention mask must have greater than 2 dimensions but less than or equal to 4'\n            if attn_mask.ndim == 2:\n                attn_mask = rearrange(attn_mask, 'i j -> () () i j')\n            elif attn_mask.ndim == 3:\n                attn_mask = rearrange(attn_mask, 'h i j -> () h i j')\n            dots.masked_fill_(~attn_mask, mask_value)\n\n        if exists(self.max_attend_past):\n            i, j = dots.shape[-2:]\n            range_q = torch.arange(j - i, j, device=device)\n            range_k = torch.arange(j, device=device)\n            dist = rearrange(range_q, 'i -> () () i ()') - rearrange(range_k, 'j -> () () () j')\n            mask = dist > self.max_attend_past\n            dots.masked_fill_(mask, mask_value)\n            del mask\n\n        if self.causal:\n            i, j = dots.shape[-2:]\n            r = torch.arange(i, device=device)\n            mask = rearrange(r, 'i -> () () i ()') < rearrange(r, 'j -> () () () j')\n            mask = F.pad(mask, (j - i, 0), value=False)\n            dots.masked_fill_(mask, mask_value)\n            del mask\n\n        if exists(self.sparse_topk) and self.sparse_topk < dots.shape[-1]:\n            top, _ = dots.topk(self.sparse_topk, dim=-1)\n            vk = top[..., -1].unsqueeze(-1).expand_as(dots)\n            mask = dots < vk\n            dots.masked_fill_(mask, mask_value)\n            del mask\n\n        attn = self.attn_fn(dots, dim=-1)\n        post_softmax_attn = attn.clone()\n\n        attn = self.dropout(attn)\n\n        if talking_heads:\n            attn = einsum('b h i j, h k -> b k i j', attn, self.post_softmax_proj).contiguous()\n\n        out = einsum('b h i j, b h j d -> b h i d', attn, v)\n\n        if head_scale:\n            out = out * self.head_scale_params\n\n        out = rearrange(out, 'b h n d -> b n (h d)')\n\n        if exists(self.to_v_gate):\n            gates = self.to_v_gate(x)\n            out = out * gates.sigmoid()\n\n        intermediates = Intermediates(\n            pre_softmax_attn=pre_softmax_attn,\n            post_softmax_attn=post_softmax_attn\n        )\n\n        return self.to_out(out), intermediates, k_cache, v_cache\n\n\nclass AttentionLayers(nn.Module):\n    def __init__(\n            self,\n            dim,\n            depth,\n            heads=8,\n            causal=False,\n            cross_attend=False,\n            only_cross=False,\n            use_scalenorm=False,\n            use_rms_scaleshift_norm=False,\n            use_rmsnorm=False,\n            use_rezero=False,\n            alibi_pos_bias=False,\n            alibi_num_heads=None,\n            alibi_learned=False,\n            position_infused_attn=False,\n            rotary_pos_emb=False,\n            rotary_emb_dim=None,\n            custom_layers=None,\n            sandwich_coef=None,\n            par_ratio=None,\n            residual_attn=False,\n            cross_residual_attn=False,\n            macaron=False,\n            pre_norm=True,\n            gate_residual=False,\n            scale_residual=False,\n            shift_tokens=0,\n            sandwich_norm=False,\n            use_qk_norm_attn=False,\n            qk_norm_attn_seq_len=None,\n            zero_init_branch_output=False,\n            **kwargs\n    ):\n        super().__init__()\n        ff_kwargs, kwargs = groupby_prefix_and_trim('ff_', kwargs)\n        attn_kwargs, _ = groupby_prefix_and_trim('attn_', kwargs)\n\n        dim_head = attn_kwargs.get('dim_head', DEFAULT_DIM_HEAD)\n\n        self.dim = dim\n        self.depth = depth\n        self.layers = nn.ModuleList([])\n        self.causal = causal\n\n        rel_pos_bias = 'rel_pos_bias' in attn_kwargs\n        self.has_pos_emb = position_infused_attn or rel_pos_bias or rotary_pos_emb\n        self.pia_pos_emb = FixedPositionalEmbedding(dim) if position_infused_attn else None\n\n        rotary_emb_dim = max(default(rotary_emb_dim, dim_head // 2), 32)\n        self.rotary_pos_emb = RotaryEmbedding(rotary_emb_dim) if rotary_pos_emb else None\n\n        assert not (\n                    alibi_pos_bias and rel_pos_bias), 'you can only choose Alibi positional bias or T5 relative positional bias, not both'\n\n        if alibi_pos_bias:\n            alibi_num_heads = default(alibi_num_heads, heads)\n            assert alibi_num_heads <= heads, 'number of ALiBi heads must be less than the total number of heads'\n            alibi_pos_klass = LearnedAlibiPositionalBias if alibi_learned or not causal else AlibiPositionalBias\n            self.rel_pos = alibi_pos_klass(heads=alibi_num_heads, bidirectional=not causal)\n        else:\n            self.rel_pos = None\n\n        assert not (not pre_norm and sandwich_norm), 'sandwich norm cannot be used when not using prenorm'\n        self.pre_norm = pre_norm\n        self.sandwich_norm = sandwich_norm\n\n        self.residual_attn = residual_attn\n        self.cross_residual_attn = cross_residual_attn\n        self.cross_attend = cross_attend\n\n        norm_class = ScaleNorm if use_scalenorm else nn.LayerNorm\n        norm_class = RMSNorm if use_rmsnorm else norm_class\n        norm_class = RMSScaleShiftNorm if use_rms_scaleshift_norm else norm_class\n        norm_fn = partial(norm_class, dim)\n\n        norm_fn = nn.Identity if use_rezero else norm_fn\n        branch_fn = Rezero if use_rezero else None\n\n        if cross_attend and not only_cross:\n            default_block = ('a', 'c', 'f')\n        elif cross_attend and only_cross:\n            default_block = ('c', 'f')\n        else:\n            default_block = ('a', 'f')\n\n        if macaron:\n            default_block = ('f',) + default_block\n\n        # qk normalization\n\n        if use_qk_norm_attn:\n            attn_scale_init_value = -math.log(math.log2(qk_norm_attn_seq_len ** 2 - qk_norm_attn_seq_len)) if exists(\n                qk_norm_attn_seq_len) else None\n            attn_kwargs = {**attn_kwargs, 'qk_norm': True, 'scale_init_value': attn_scale_init_value}\n\n        # zero init\n\n        if zero_init_branch_output:\n            attn_kwargs = {**attn_kwargs, 'zero_init_output': True}\n            ff_kwargs = {**ff_kwargs, 'zero_init_output': True}\n\n        # calculate layer block order\n\n        if exists(custom_layers):\n            layer_types = custom_layers\n        elif exists(par_ratio):\n            par_depth = depth * len(default_block)\n            assert 1 < par_ratio <= par_depth, 'par ratio out of range'\n            default_block = tuple(filter(not_equals('f'), default_block))\n            par_attn = par_depth // par_ratio\n            depth_cut = par_depth * 2 // 3  # 2 / 3 attention layer cutoff suggested by PAR paper\n            par_width = (depth_cut + depth_cut // par_attn) // par_attn\n            assert len(default_block) <= par_width, 'default block is too large for par_ratio'\n            par_block = default_block + ('f',) * (par_width - len(default_block))\n            par_head = par_block * par_attn\n            layer_types = par_head + ('f',) * (par_depth - len(par_head))\n        elif exists(sandwich_coef):\n            assert sandwich_coef > 0 and sandwich_coef <= depth, 'sandwich coefficient should be less than the depth'\n            layer_types = ('a',) * sandwich_coef + default_block * (depth - sandwich_coef) + ('f',) * sandwich_coef\n        else:\n            layer_types = default_block * depth\n\n        self.layer_types = layer_types\n        self.num_attn_layers = len(list(filter(equals('a'), layer_types)))\n\n        # calculate token shifting\n\n        shift_tokens = cast_tuple(shift_tokens, len(layer_types))\n\n        # iterate and construct layers\n\n        for ind, (layer_type, layer_shift_tokens) in enumerate(zip(self.layer_types, shift_tokens)):\n            is_last_layer = ind == (len(self.layer_types) - 1)\n\n            if layer_type == 'a':\n                layer = Attention(dim, heads=heads, causal=causal, **attn_kwargs)\n            elif layer_type == 'c':\n                layer = Attention(dim, heads=heads, **attn_kwargs)\n            elif layer_type == 'f':\n                layer = FeedForward(dim, **ff_kwargs)\n                layer = layer if not macaron else Scale(0.5, layer)\n            else:\n                raise Exception(f'invalid layer type {layer_type}')\n\n            if layer_shift_tokens > 0:\n                shift_range_upper = layer_shift_tokens + 1\n                shift_range_lower = -layer_shift_tokens if not causal else 0\n                layer = ShiftTokens(range(shift_range_lower, shift_range_upper), layer)\n\n            if exists(branch_fn):\n                layer = branch_fn(layer)\n\n            residual_fn = GRUGating if gate_residual else Residual\n            residual = residual_fn(dim, scale_residual=scale_residual)\n\n            layer_uses_qk_norm = use_qk_norm_attn and layer_type in ('a', 'c')\n\n            pre_branch_norm = norm_fn() if pre_norm and not layer_uses_qk_norm else None\n            post_branch_norm = norm_fn() if sandwich_norm or layer_uses_qk_norm else None\n            post_main_norm = norm_fn() if not pre_norm and not is_last_layer else None\n\n            norms = nn.ModuleList([\n                pre_branch_norm,\n                post_branch_norm,\n                post_main_norm\n            ])\n\n            self.layers.append(nn.ModuleList([\n                norms,\n                layer,\n                residual\n            ]))\n\n    def forward(\n            self,\n            x,\n            context=None,\n            full_context=None,  # for passing a list of hidden states from an encoder\n            mask=None,\n            context_mask=None,\n            attn_mask=None,\n            mems=None,\n            return_hiddens=False,\n            norm_scale_shift_inp=None,\n            past_key_values=None,\n            expected_seq_len=None,\n    ):\n\n        assert not (self.cross_attend ^ (exists(context) or exists(\n            full_context))), 'context must be passed in if cross_attend is set to True'\n        assert context is None or full_context is None, 'only one of full_context or context can be provided'\n\n        hiddens = []\n        intermediates = []\n        prev_attn = None\n        prev_cross_attn = None\n\n        mems = mems.copy() if exists(mems) else [None] * self.num_attn_layers\n        norm_args = {}\n        if exists(norm_scale_shift_inp):\n            norm_args['norm_scale_shift_inp'] = norm_scale_shift_inp\n\n        rotary_pos_emb = None\n        if exists(self.rotary_pos_emb):\n            if not self.training and self.causal:\n                assert expected_seq_len is not None, \"To decode a transformer with rotary embeddings, you must specify an `expected_seq_len`\"\n            elif expected_seq_len is None:\n                expected_seq_len = 0\n            seq_len = x.shape[1]\n            if past_key_values is not None:\n                seq_len += past_key_values[0][0].shape[-2]\n            max_rotary_emb_length = max(list(map(lambda m: (m.shape[1] if exists(m) else 0) + seq_len, mems)) + [expected_seq_len])\n            rotary_pos_emb = self.rotary_pos_emb(max_rotary_emb_length, x.device)\n\n        present_key_values = []\n        cross_attn_count = 0\n        for ind, (layer_type, (norm, block, residual_fn)) in enumerate(zip(self.layer_types, self.layers)):\n            if layer_type == 'a':\n                layer_mem = mems.pop(0) if mems else None\n\n            residual = x\n\n            pre_branch_norm, post_branch_norm, post_main_norm = norm\n\n            if exists(pre_branch_norm):\n                x = pre_branch_norm(x, **norm_args)\n\n            if layer_type == 'a' or layer_type == 'c':\n                if past_key_values is not None:\n                    layer_kv = past_key_values.pop(0)\n                    layer_past = tuple(s.to(x.device) for s in layer_kv)\n                else:\n                    layer_past = None\n\n            if layer_type == 'a':\n                out, inter, k, v = block(x, None, mask, None, attn_mask, self.pia_pos_emb, rotary_pos_emb,\n                                        prev_attn, layer_mem, layer_past)\n            elif layer_type == 'c':\n                if exists(full_context):\n                    out, inter, k, v = block(x, full_context[cross_attn_count], mask, context_mask, None, None,\n                                            None, prev_attn, None, layer_past)\n                else:\n                    out, inter, k, v = block(x, context, mask, context_mask, None, None, None, prev_attn, None, layer_past)\n            elif layer_type == 'f':\n                out = block(x)\n\n            if layer_type == 'a' or layer_type == 'c' and present_key_values is not None:\n                present_key_values.append((k.detach(), v.detach()))\n\n            if exists(post_branch_norm):\n                out = post_branch_norm(out, **norm_args)\n\n            x = residual_fn(out, residual)\n\n            if layer_type in ('a', 'c'):\n                intermediates.append(inter)\n\n            if layer_type == 'a' and self.residual_attn:\n                prev_attn = inter.pre_softmax_attn\n            elif layer_type == 'c' and self.cross_residual_attn:\n                prev_cross_attn = inter.pre_softmax_attn\n\n            if exists(post_main_norm):\n                x = post_main_norm(x, **norm_args)\n\n            if layer_type == 'c':\n                cross_attn_count += 1\n\n            if layer_type == 'f':\n                hiddens.append(x)\n\n        if return_hiddens:\n            intermediates = LayerIntermediates(\n                hiddens=hiddens,\n                attn_intermediates=intermediates,\n                past_key_values=present_key_values\n            )\n\n            return x, intermediates\n\n        return x\n\n\nclass Encoder(AttentionLayers):\n    def __init__(self, **kwargs):\n        assert 'causal' not in kwargs, 'cannot set causality on encoder'\n        super().__init__(causal=False, **kwargs)\n\n\nclass Decoder(AttentionLayers):\n    def __init__(self, **kwargs):\n        assert 'causal' not in kwargs, 'cannot set causality on decoder'\n        super().__init__(causal=True, **kwargs)\n\n\nclass CrossAttender(AttentionLayers):\n    def __init__(self, **kwargs):\n        super().__init__(cross_attend=True, only_cross=True, **kwargs)\n\n\nclass ViTransformerWrapper(nn.Module):\n    def __init__(\n            self,\n            *,\n            image_size,\n            patch_size,\n            attn_layers,\n            num_classes=None,\n            dropout=0.,\n            emb_dropout=0.\n    ):\n        super().__init__()\n        assert isinstance(attn_layers, Encoder), 'attention layers must be an Encoder'\n        assert image_size % patch_size == 0, 'image dimensions must be divisible by the patch size'\n        dim = attn_layers.dim\n        num_patches = (image_size // patch_size) ** 2\n        patch_dim = 3 * patch_size ** 2\n\n        self.patch_size = patch_size\n\n        self.pos_embedding = nn.Parameter(torch.randn(1, num_patches + 1, dim))\n        self.patch_to_embedding = nn.Linear(patch_dim, dim)\n        self.cls_token = nn.Parameter(torch.randn(1, 1, dim))\n        self.dropout = nn.Dropout(emb_dropout)\n\n        self.attn_layers = attn_layers\n        self.norm = nn.LayerNorm(dim)\n        self.mlp_head = FeedForward(dim, dim_out=num_classes, dropout=dropout) if exists(num_classes) else None\n\n    def forward(\n            self,\n            img,\n            return_embeddings=False\n    ):\n        p = self.patch_size\n\n        x = rearrange(img, 'b c (h p1) (w p2) -> b (h w) (p1 p2 c)', p1=p, p2=p)\n        x = self.patch_to_embedding(x)\n        b, n, _ = x.shape\n\n        cls_tokens = repeat(self.cls_token, '() n d -> b n d', b=b)\n        x = torch.cat((cls_tokens, x), dim=1)\n        x = x + self.pos_embedding[:, :(n + 1)]\n        x = self.dropout(x)\n\n        x = self.attn_layers(x)\n        x = self.norm(x)\n\n        if not exists(self.mlp_head) or return_embeddings:\n            return x\n\n        return self.mlp_head(x[:, 0])\n\n\nclass TransformerWrapper(nn.Module):\n    def __init__(\n            self,\n            *,\n            num_tokens,\n            max_seq_len,\n            attn_layers,\n            emb_dim=None,\n            max_mem_len=0.,\n            shift_mem_down=0,\n            emb_dropout=0.,\n            num_memory_tokens=None,\n            tie_embedding=False,\n            use_pos_emb=True\n    ):\n        super().__init__()\n        assert isinstance(attn_layers, AttentionLayers), 'attention layers must be one of Encoder or Decoder'\n\n        dim = attn_layers.dim\n        emb_dim = default(emb_dim, dim)\n\n        self.max_seq_len = max_seq_len\n        self.max_mem_len = max_mem_len\n        self.shift_mem_down = shift_mem_down\n\n        self.token_emb = nn.Embedding(num_tokens, emb_dim)\n        self.pos_emb = AbsolutePositionalEmbedding(emb_dim, max_seq_len) if (\n                    use_pos_emb and not attn_layers.has_pos_emb) else always(0)\n        self.emb_dropout = nn.Dropout(emb_dropout)\n\n        self.project_emb = nn.Linear(emb_dim, dim) if emb_dim != dim else nn.Identity()\n        self.attn_layers = attn_layers\n        self.norm = nn.LayerNorm(dim)\n\n        self.init_()\n\n        self.to_logits = nn.Linear(dim, num_tokens) if not tie_embedding else lambda t: t @ self.token_emb.weight.t()\n\n        # memory tokens (like [cls]) from Memory Transformers paper\n        num_memory_tokens = default(num_memory_tokens, 0)\n        self.num_memory_tokens = num_memory_tokens\n        if num_memory_tokens > 0:\n            self.memory_tokens = nn.Parameter(torch.randn(num_memory_tokens, dim))\n\n    def init_(self):\n        nn.init.kaiming_normal_(self.token_emb.weight)\n\n    def forward(\n            self,\n            x,\n            return_embeddings=False,\n            mask=None,\n            return_hiddens=False,\n            return_attn=False,\n            mems=None,\n            use_cache=False,\n            **kwargs\n    ):\n        b, n, device, num_mem = *x.shape, x.device, self.num_memory_tokens\n        x = self.token_emb(x)\n        x = x + self.pos_emb(x)\n        x = self.emb_dropout(x)\n\n        x = self.project_emb(x)\n\n        if num_mem > 0:\n            mem = repeat(self.memory_tokens, 'n d -> b n d', b=b)\n            x = torch.cat((mem, x), dim=1)\n\n            # auto-handle masking after appending memory tokens\n            if exists(mask):\n                mask = F.pad(mask, (num_mem, 0), value=True)\n\n        if self.shift_mem_down and exists(mems):\n            mems_l, mems_r = mems[:self.shift_mem_down], mems[self.shift_mem_down:]\n            mems = [*mems_r, *mems_l]\n\n        x, intermediates = self.attn_layers(x, mask=mask, mems=mems, return_hiddens=True, **kwargs)\n        x = self.norm(x)\n\n        mem, x = x[:, :num_mem], x[:, num_mem:]\n\n        out = self.to_logits(x) if not return_embeddings else x\n\n        if return_hiddens:\n            hiddens = intermediates.hiddens\n            return out, hiddens\n\n        res = [out]\n        if return_attn:\n            attn_maps = list(map(lambda t: t.post_softmax_attn, intermediates.attn_intermediates))\n            res.append(attn_maps)\n        if use_cache:\n            res.append(intermediates.past_key_values)\n\n        if len(res) > 1:\n            return tuple(res)\n        return res[0]\n\n\nclass ContinuousTransformerWrapper(nn.Module):\n    def __init__(\n            self,\n            *,\n            max_seq_len,\n            attn_layers,\n            dim_in=None,\n            dim_out=None,\n            emb_dim=None,\n            emb_dropout=0.,\n            use_pos_emb=True\n    ):\n        super().__init__()\n        assert isinstance(attn_layers, AttentionLayers), 'attention layers must be one of Encoder or Decoder'\n\n        dim = attn_layers.dim\n\n        self.max_seq_len = max_seq_len\n\n        self.pos_emb = AbsolutePositionalEmbedding(dim, max_seq_len) if (\n                    use_pos_emb and not attn_layers.has_pos_emb) else always(0)\n        self.emb_dropout = nn.Dropout(emb_dropout)\n\n        self.project_in = nn.Linear(dim_in, dim) if exists(dim_in) else nn.Identity()\n\n        self.attn_layers = attn_layers\n        self.norm = nn.LayerNorm(dim)\n\n        self.project_out = nn.Linear(dim, dim_out) if exists(dim_out) else nn.Identity()\n\n    def forward(\n            self,\n            x,\n            return_embeddings=False,\n            mask=None,\n            return_attn=False,\n            mems=None,\n            use_cache=False,\n            **kwargs\n    ):\n        b, n, _, device = *x.shape, x.device\n\n        x = self.project_in(x)\n        x = x + self.pos_emb(x)\n        x = self.emb_dropout(x)\n\n        x, intermediates = self.attn_layers(x, mask=mask, mems=mems, return_hiddens=True, **kwargs)\n        x = self.norm(x)\n\n        out = self.project_out(x) if not return_embeddings else x\n\n        res = [out]\n        if return_attn:\n            attn_maps = list(map(lambda t: t.post_softmax_attn, intermediates.attn_intermediates))\n            res.append(attn_maps)\n        if use_cache:\n            res.append(intermediates.past_key_values)\n\n        if len(res) > 1:\n            return tuple(res)\n        return res[0]\n"
  },
  {
    "path": "xinference/thirdparty/indextts/vqvae/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/indextts/vqvae/xtts_dvae.py",
    "content": "import functools\nfrom math import sqrt\n\nimport torch\nimport torch.distributed as distributed\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torchaudio\nfrom einops import rearrange\n\n\ndef default(val, d):\n    return val if val is not None else d\n\n\ndef eval_decorator(fn):\n    def inner(model, *args, **kwargs):\n        was_training = model.training\n        model.eval()\n        out = fn(model, *args, **kwargs)\n        model.train(was_training)\n        return out\n\n    return inner\n\n\ndef dvae_wav_to_mel(\n    wav, mel_norms_file=\"../experiments/clips_mel_norms.pth\", mel_norms=None, device=torch.device(\"cpu\")\n):\n    mel_stft = torchaudio.transforms.MelSpectrogram(\n        n_fft=1024,\n        hop_length=256,\n        win_length=1024,\n        power=2,\n        normalized=False,\n        sample_rate=22050,\n        f_min=0,\n        f_max=8000,\n        n_mels=80,\n        norm=\"slaney\",\n    ).to(device)\n    wav = wav.to(device)\n    mel = mel_stft(wav)\n    mel = torch.log(torch.clamp(mel, min=1e-5))\n    if mel_norms is None:\n        mel_norms = torch.load(mel_norms_file, map_location=device)\n    mel = mel / mel_norms.unsqueeze(0).unsqueeze(-1)\n    return mel\n\n\nclass Quantize(nn.Module):\n    def __init__(self, dim, n_embed, decay=0.99, eps=1e-5, balancing_heuristic=False, new_return_order=False):\n        super().__init__()\n\n        self.dim = dim\n        self.n_embed = n_embed\n        self.decay = decay\n        self.eps = eps\n\n        self.balancing_heuristic = balancing_heuristic\n        self.codes = None\n        self.max_codes = 64000\n        self.codes_full = False\n        self.new_return_order = new_return_order\n\n        embed = torch.randn(dim, n_embed)\n        self.register_buffer(\"embed\", embed)\n        self.register_buffer(\"cluster_size\", torch.zeros(n_embed))\n        self.register_buffer(\"embed_avg\", embed.clone())\n\n    def forward(self, input, return_soft_codes=False):\n        if self.balancing_heuristic and self.codes_full:\n            h = torch.histc(self.codes, bins=self.n_embed, min=0, max=self.n_embed) / len(self.codes)\n            mask = torch.logical_or(h > 0.9, h < 0.01).unsqueeze(1)\n            ep = self.embed.permute(1, 0)\n            ea = self.embed_avg.permute(1, 0)\n            rand_embed = torch.randn_like(ep) * mask\n            self.embed = (ep * ~mask + rand_embed).permute(1, 0)\n            self.embed_avg = (ea * ~mask + rand_embed).permute(1, 0)\n            self.cluster_size = self.cluster_size * ~mask.squeeze()\n            if torch.any(mask):\n                print(f\"Reset {torch.sum(mask)} embedding codes.\")\n                self.codes = None\n                self.codes_full = False\n\n        flatten = input.reshape(-1, self.dim)\n        dist = flatten.pow(2).sum(1, keepdim=True) - 2 * flatten @ self.embed + self.embed.pow(2).sum(0, keepdim=True)\n        soft_codes = -dist\n        _, embed_ind = soft_codes.max(1)\n        embed_onehot = F.one_hot(embed_ind, self.n_embed).type(flatten.dtype)\n        embed_ind = embed_ind.view(*input.shape[:-1])\n        quantize = self.embed_code(embed_ind)\n\n        if self.balancing_heuristic:\n            if self.codes is None:\n                self.codes = embed_ind.flatten()\n            else:\n                self.codes = torch.cat([self.codes, embed_ind.flatten()])\n                if len(self.codes) > self.max_codes:\n                    self.codes = self.codes[-self.max_codes :]\n                    self.codes_full = True\n\n        if self.training:\n            embed_onehot_sum = embed_onehot.sum(0)\n            embed_sum = flatten.transpose(0, 1) @ embed_onehot\n\n            if distributed.is_initialized() and distributed.get_world_size() > 1:\n                distributed.all_reduce(embed_onehot_sum)\n                distributed.all_reduce(embed_sum)\n\n            self.cluster_size.data.mul_(self.decay).add_(embed_onehot_sum, alpha=1 - self.decay)\n            self.embed_avg.data.mul_(self.decay).add_(embed_sum, alpha=1 - self.decay)\n            n = self.cluster_size.sum()\n            cluster_size = (self.cluster_size + self.eps) / (n + self.n_embed * self.eps) * n\n            embed_normalized = self.embed_avg / cluster_size.unsqueeze(0)\n            self.embed.data.copy_(embed_normalized)\n\n        diff = (quantize.detach() - input).pow(2).mean()\n        quantize = input + (quantize - input).detach()\n\n        if return_soft_codes:\n            return quantize, diff, embed_ind, soft_codes.view(input.shape[:-1] + (-1,))\n        elif self.new_return_order:\n            return quantize, embed_ind, diff\n        else:\n            return quantize, diff, embed_ind\n\n    def embed_code(self, embed_id):\n        return F.embedding(embed_id, self.embed.transpose(0, 1))\n\n\n# Fits a soft-discretized input to a normal-PDF across the specified dimension.\n# In other words, attempts to force the discretization function to have a mean equal utilization across all discrete\n# values with the specified expected variance.\nclass DiscretizationLoss(nn.Module):\n    def __init__(self, discrete_bins, dim, expected_variance, store_past=0):\n        super().__init__()\n        self.discrete_bins = discrete_bins\n        self.dim = dim\n        self.dist = torch.distributions.Normal(0, scale=expected_variance)\n        if store_past > 0:\n            self.record_past = True\n            self.register_buffer(\"accumulator_index\", torch.zeros(1, dtype=torch.long, device=\"cpu\"))\n            self.register_buffer(\"accumulator_filled\", torch.zeros(1, dtype=torch.long, device=\"cpu\"))\n            self.register_buffer(\"accumulator\", torch.zeros(store_past, discrete_bins))\n        else:\n            self.record_past = False\n\n    def forward(self, x):\n        other_dims = set(range(len(x.shape))) - set([self.dim])\n        averaged = x.sum(dim=tuple(other_dims)) / x.sum()\n        averaged = averaged - averaged.mean()\n\n        if self.record_past:\n            acc_count = self.accumulator.shape[0]\n            avg = averaged.detach().clone()\n            if self.accumulator_filled > 0:\n                averaged = torch.mean(self.accumulator, dim=0) * (acc_count - 1) / acc_count + averaged / acc_count\n\n            # Also push averaged into the accumulator.\n            self.accumulator[self.accumulator_index] = avg\n            self.accumulator_index += 1\n            if self.accumulator_index >= acc_count:\n                self.accumulator_index *= 0\n                if self.accumulator_filled <= 0:\n                    self.accumulator_filled += 1\n\n        return torch.sum(-self.dist.log_prob(averaged))\n\n\nclass ResBlock(nn.Module):\n    def __init__(self, chan, conv, activation):\n        super().__init__()\n        self.net = nn.Sequential(\n            conv(chan, chan, 3, padding=1),\n            activation(),\n            conv(chan, chan, 3, padding=1),\n            activation(),\n            conv(chan, chan, 1),\n        )\n\n    def forward(self, x):\n        return self.net(x) + x\n\n\nclass UpsampledConv(nn.Module):\n    def __init__(self, conv, *args, **kwargs):\n        super().__init__()\n        assert \"stride\" in kwargs.keys()\n        self.stride = kwargs[\"stride\"]\n        del kwargs[\"stride\"]\n        self.conv = conv(*args, **kwargs)\n\n    def forward(self, x):\n        up = nn.functional.interpolate(x, scale_factor=self.stride, mode=\"nearest\")\n        return self.conv(up)\n\n\n# DiscreteVAE partially derived from lucidrains DALLE implementation\n# Credit: https://github.com/lucidrains/DALLE-pytorch\nclass DiscreteVAE(nn.Module):\n    def __init__(\n        self,\n        positional_dims=2,\n        num_tokens=512,\n        codebook_dim=512,\n        num_layers=3,\n        num_resnet_blocks=0,\n        hidden_dim=64,\n        channels=3,\n        stride=2,\n        kernel_size=4,\n        use_transposed_convs=True,\n        encoder_norm=False,\n        activation=\"relu\",\n        smooth_l1_loss=False,\n        straight_through=False,\n        normalization=None,  # ((0.5,) * 3, (0.5,) * 3),\n        record_codes=False,\n        discretization_loss_averaging_steps=100,\n        lr_quantizer_args={},\n    ):\n        super().__init__()\n        has_resblocks = num_resnet_blocks > 0\n\n        self.num_tokens = num_tokens\n        self.num_layers = num_layers\n        self.straight_through = straight_through\n        self.positional_dims = positional_dims\n        self.discrete_loss = DiscretizationLoss(\n            num_tokens, 2, 1 / (num_tokens * 2), discretization_loss_averaging_steps\n        )\n\n        assert positional_dims > 0 and positional_dims < 3  # This VAE only supports 1d and 2d inputs for now.\n        if positional_dims == 2:\n            conv = nn.Conv2d\n            conv_transpose = nn.ConvTranspose2d\n        else:\n            conv = nn.Conv1d\n            conv_transpose = nn.ConvTranspose1d\n        if not use_transposed_convs:\n            conv_transpose = functools.partial(UpsampledConv, conv)\n\n        if activation == \"relu\":\n            act = nn.ReLU\n        elif activation == \"silu\":\n            act = nn.SiLU\n        else:\n            assert NotImplementedError()\n\n        enc_layers = []\n        dec_layers = []\n\n        if num_layers > 0:\n            enc_chans = [hidden_dim * 2**i for i in range(num_layers)]\n            dec_chans = list(reversed(enc_chans))\n\n            enc_chans = [channels, *enc_chans]\n\n            dec_init_chan = codebook_dim if not has_resblocks else dec_chans[0]\n            dec_chans = [dec_init_chan, *dec_chans]\n\n            enc_chans_io, dec_chans_io = map(lambda t: list(zip(t[:-1], t[1:])), (enc_chans, dec_chans))\n\n            pad = (kernel_size - 1) // 2\n            for (enc_in, enc_out), (dec_in, dec_out) in zip(enc_chans_io, dec_chans_io):\n                enc_layers.append(nn.Sequential(conv(enc_in, enc_out, kernel_size, stride=stride, padding=pad), act()))\n                if encoder_norm:\n                    enc_layers.append(nn.GroupNorm(8, enc_out))\n                dec_layers.append(\n                    nn.Sequential(conv_transpose(dec_in, dec_out, kernel_size, stride=stride, padding=pad), act())\n                )\n            dec_out_chans = dec_chans[-1]\n            innermost_dim = dec_chans[0]\n        else:\n            enc_layers.append(nn.Sequential(conv(channels, hidden_dim, 1), act()))\n            dec_out_chans = hidden_dim\n            innermost_dim = hidden_dim\n\n        for _ in range(num_resnet_blocks):\n            dec_layers.insert(0, ResBlock(innermost_dim, conv, act))\n            enc_layers.append(ResBlock(innermost_dim, conv, act))\n\n        if num_resnet_blocks > 0:\n            dec_layers.insert(0, conv(codebook_dim, innermost_dim, 1))\n\n        enc_layers.append(conv(innermost_dim, codebook_dim, 1))\n        dec_layers.append(conv(dec_out_chans, channels, 1))\n\n        self.encoder = nn.Sequential(*enc_layers)\n        self.decoder = nn.Sequential(*dec_layers)\n\n        self.loss_fn = F.smooth_l1_loss if smooth_l1_loss else F.mse_loss\n        self.codebook = Quantize(codebook_dim, num_tokens, new_return_order=True)\n\n        # take care of normalization within class\n        self.normalization = normalization\n        self.record_codes = record_codes\n        if record_codes:\n            self.codes = torch.zeros((1228800,), dtype=torch.long)\n            self.code_ind = 0\n            self.total_codes = 0\n        self.internal_step = 0\n\n    def norm(self, images):\n        if not self.normalization is not None:\n            return images\n\n        means, stds = map(lambda t: torch.as_tensor(t).to(images), self.normalization)\n        arrange = \"c -> () c () ()\" if self.positional_dims == 2 else \"c -> () c ()\"\n        means, stds = map(lambda t: rearrange(t, arrange), (means, stds))\n        images = images.clone()\n        images.sub_(means).div_(stds)\n        return images\n\n    def get_debug_values(self, step, __):\n        if self.record_codes and self.total_codes > 0:\n            # Report annealing schedule\n            return {\"histogram_codes\": self.codes[: self.total_codes]}\n        else:\n            return {}\n\n    @torch.no_grad()\n    @eval_decorator\n    def get_codebook_indices(self, images):\n        img = self.norm(images)\n        logits = self.encoder(img).permute((0, 2, 3, 1) if len(img.shape) == 4 else (0, 2, 1))\n        sampled, codes, _ = self.codebook(logits)\n        self.log_codes(codes)\n        return codes\n\n    def decode(self, img_seq):\n        self.log_codes(img_seq)\n        if hasattr(self.codebook, \"embed_code\"):\n            image_embeds = self.codebook.embed_code(img_seq)\n        else:\n            image_embeds = F.embedding(img_seq, self.codebook.codebook)\n        b, n, d = image_embeds.shape\n\n        kwargs = {}\n        if self.positional_dims == 1:\n            arrange = \"b n d -> b d n\"\n        else:\n            h = w = int(sqrt(n))\n            arrange = \"b (h w) d -> b d h w\"\n            kwargs = {\"h\": h, \"w\": w}\n        image_embeds = rearrange(image_embeds, arrange, **kwargs)\n        images = [image_embeds]\n        for layer in self.decoder:\n            images.append(layer(images[-1]))\n        return images[-1], images[-2]\n\n    def infer(self, img):\n        img = self.norm(img)\n        logits = self.encoder(img).permute((0, 2, 3, 1) if len(img.shape) == 4 else (0, 2, 1))\n        sampled, codes, commitment_loss = self.codebook(logits)\n        return self.decode(codes)\n\n    # Note: This module is not meant to be run in forward() except while training. It has special logic which performs\n    # evaluation using quantized values when it detects that it is being run in eval() mode, which will be substantially\n    # more lossy (but useful for determining network performance).\n    def forward(self, img):\n        img = self.norm(img)\n        logits = self.encoder(img).permute((0, 2, 3, 1) if len(img.shape) == 4 else (0, 2, 1))\n        sampled, codes, commitment_loss = self.codebook(logits)\n        sampled = sampled.permute((0, 3, 1, 2) if len(img.shape) == 4 else (0, 2, 1))\n\n        if self.training:\n            out = sampled\n            for d in self.decoder:\n                out = d(out)\n            self.log_codes(codes)\n        else:\n            # This is non-differentiable, but gives a better idea of how the network is actually performing.\n            out, _ = self.decode(codes)\n\n        # reconstruction loss\n        out = out[..., :img.shape[-1]]\n        recon_loss = self.loss_fn(img, out, reduction=\"mean\")\n        ssim_loss = torch.zeros(size=(1,)).cuda()\n\n        return recon_loss, ssim_loss, commitment_loss, out\n\n    def log_codes(self, codes):\n        # This is so we can debug the distribution of codes being learned.\n        if self.record_codes and self.internal_step % 10 == 0:\n            codes = codes.flatten()\n            l = codes.shape[0]\n            i = self.code_ind if (self.codes.shape[0] - self.code_ind) > l else self.codes.shape[0] - l\n            self.codes[i : i + l] = codes.cpu()\n            self.code_ind = self.code_ind + l\n            if self.code_ind >= self.codes.shape[0]:\n                self.code_ind = 0\n            self.total_codes += 1\n        self.internal_step += 1\n"
  },
  {
    "path": "xinference/thirdparty/internvl/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/internvl/conversation.py",
    "content": "\"\"\"\nConversation prompt templates.\n\nWe kindly request that you import fastchat instead of copying this file if you wish to use it.\nIf you have changes in mind, please contribute back so the community can benefit collectively and continue to maintain these valuable templates.\n\"\"\"\n\nimport dataclasses\nfrom enum import IntEnum, auto\nfrom typing import Any, Dict, List, Tuple, Union\n\n\nclass SeparatorStyle(IntEnum):\n    \"\"\"Separator styles.\"\"\"\n\n    ADD_COLON_SINGLE = auto()\n    ADD_COLON_TWO = auto()\n    ADD_COLON_SPACE_SINGLE = auto()\n    NO_COLON_SINGLE = auto()\n    NO_COLON_TWO = auto()\n    ADD_NEW_LINE_SINGLE = auto()\n    LLAMA2 = auto()\n    CHATGLM = auto()\n    CHATML = auto()\n    CHATINTERN = auto()\n    DOLLY = auto()\n    RWKV = auto()\n    PHOENIX = auto()\n    ROBIN = auto()\n    FALCON_CHAT = auto()\n    CHATGLM3 = auto()\n    INTERNVL_ZH = auto()\n    MPT = auto()\n\n\n@dataclasses.dataclass\nclass Conversation:\n    \"\"\"A class that manages prompt templates and keeps all conversation history.\"\"\"\n\n    # The name of this template\n    name: str\n    # The template of the system prompt\n    system_template: str = '{system_message}'\n    # The system message\n    system_message: str = ''\n    # The names of two roles\n    roles: Tuple[str] = ('USER', 'ASSISTANT')\n    # All messages. Each item is (role, message).\n    messages: List[List[str]] = ()\n    # The number of few shot examples\n    offset: int = 0\n    # The separator style and configurations\n    sep_style: SeparatorStyle = SeparatorStyle.ADD_COLON_SINGLE\n    sep: str = '\\n'\n    sep2: str = None\n    # Stop criteria (the default one is EOS token)\n    stop_str: Union[str, List[str]] = None\n    # Stops generation if meeting any token in this list\n    stop_token_ids: List[int] = None\n\n    def get_prompt(self) -> str:\n        \"\"\"Get the prompt for generation.\"\"\"\n        system_prompt = self.system_template.format(system_message=self.system_message)\n        if self.sep_style == SeparatorStyle.ADD_COLON_SINGLE:\n            ret = system_prompt + self.sep\n            for role, message in self.messages:\n                if message:\n                    ret += role + ': ' + message + self.sep\n                else:\n                    ret += role + ':'\n            return ret\n        elif self.sep_style == SeparatorStyle.ADD_COLON_TWO:\n            seps = [self.sep, self.sep2]\n            ret = system_prompt + seps[0]\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    ret += role + ': ' + message + seps[i % 2]\n                else:\n                    ret += role + ':'\n            return ret\n        elif self.sep_style == SeparatorStyle.ADD_COLON_SPACE_SINGLE:\n            ret = system_prompt + self.sep\n            for role, message in self.messages:\n                if message:\n                    ret += role + ': ' + message + self.sep\n                else:\n                    ret += role + ': '  # must be end with a space\n            return ret\n        elif self.sep_style == SeparatorStyle.ADD_NEW_LINE_SINGLE:\n            ret = '' if system_prompt == '' else system_prompt + self.sep\n            for role, message in self.messages:\n                if message:\n                    ret += role + '\\n' + message + self.sep\n                else:\n                    ret += role + '\\n'\n            return ret\n        elif self.sep_style == SeparatorStyle.NO_COLON_SINGLE:\n            ret = system_prompt\n            for role, message in self.messages:\n                if message:\n                    ret += role + message + self.sep\n                else:\n                    ret += role\n            return ret\n        elif self.sep_style == SeparatorStyle.NO_COLON_TWO:\n            seps = [self.sep, self.sep2]\n            ret = system_prompt\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    ret += role + message + seps[i % 2]\n                else:\n                    ret += role\n            return ret\n        elif self.sep_style == SeparatorStyle.RWKV:\n            ret = system_prompt\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    ret += (\n                        role\n                        + ': '\n                        + message.replace('\\r\\n', '\\n').replace('\\n\\n', '\\n')\n                    )\n                    ret += '\\n\\n'\n                else:\n                    ret += role + ':'\n            return ret\n        elif self.sep_style == SeparatorStyle.LLAMA2:\n            seps = [self.sep, self.sep2]\n            if self.system_message:\n                ret = system_prompt\n            else:\n                ret = '[INST] '\n            for i, (role, message) in enumerate(self.messages):\n                tag = self.roles[i % 2]\n                if message:\n                    if i == 0:\n                        ret += message + ' '\n                    else:\n                        ret += tag + ' ' + message + seps[i % 2]\n                else:\n                    ret += tag\n            return ret\n        elif self.sep_style == SeparatorStyle.CHATGLM:\n            # source: https://huggingface.co/THUDM/chatglm-6b/blob/1d240ba371910e9282298d4592532d7f0f3e9f3e/modeling_chatglm.py#L1302-L1308\n            # source2: https://huggingface.co/THUDM/chatglm2-6b/blob/e186c891cf64310ac66ef10a87e6635fa6c2a579/modeling_chatglm.py#L926\n            round_add_n = 1 if self.name == 'chatglm2' else 0\n            if system_prompt:\n                ret = system_prompt + self.sep\n            else:\n                ret = ''\n\n            for i, (role, message) in enumerate(self.messages):\n                if i % 2 == 0:\n                    ret += f'[Round {i//2 + round_add_n}]{self.sep}'\n\n                if message:\n                    ret += f'{role}：{message}{self.sep}'\n                else:\n                    ret += f'{role}：'\n            return ret\n        elif self.sep_style == SeparatorStyle.CHATML:\n            ret = '' if system_prompt == '' else system_prompt + self.sep + '\\n'\n            for role, message in self.messages:\n                if message:\n                    ret += role + '\\n' + message + self.sep + '\\n'\n                else:\n                    ret += role + '\\n'\n            return ret\n        elif self.sep_style == SeparatorStyle.CHATGLM3:\n            ret = ''\n            if self.system_message:\n                ret += system_prompt\n            for role, message in self.messages:\n                if message:\n                    ret += role + '\\n' + ' ' + message\n                else:\n                    ret += role\n            return ret\n        elif self.sep_style == SeparatorStyle.CHATINTERN:\n            # source: https://huggingface.co/internlm/internlm-chat-7b-8k/blob/bd546fa984b4b0b86958f56bf37f94aa75ab8831/modeling_internlm.py#L771\n            seps = [self.sep, self.sep2]\n            ret = system_prompt\n            for i, (role, message) in enumerate(self.messages):\n                # if i % 2 == 0:\n                #     ret += \"<s>\"\n                if message:\n                    ret += role + ':' + message + seps[i % 2] + '\\n'\n                else:\n                    ret += role + ':'\n            return ret\n        elif self.sep_style == SeparatorStyle.DOLLY:\n            seps = [self.sep, self.sep2]\n            ret = system_prompt\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    ret += role + ':\\n' + message + seps[i % 2]\n                    if i % 2 == 1:\n                        ret += '\\n\\n'\n                else:\n                    ret += role + ':\\n'\n            return ret\n        elif self.sep_style == SeparatorStyle.PHOENIX:\n            ret = system_prompt\n            for role, message in self.messages:\n                if message:\n                    ret += role + ': ' + '<s>' + message + '</s>'\n                else:\n                    ret += role + ': ' + '<s>'\n            return ret\n        elif self.sep_style == SeparatorStyle.ROBIN:\n            ret = system_prompt + self.sep\n            for role, message in self.messages:\n                if message:\n                    ret += role + ':\\n' + message + self.sep\n                else:\n                    ret += role + ':\\n'\n            return ret\n        elif self.sep_style == SeparatorStyle.FALCON_CHAT:\n            ret = ''\n            if self.system_message:\n                ret += system_prompt + self.sep\n            for role, message in self.messages:\n                if message:\n                    ret += role + ': ' + message + self.sep\n                else:\n                    ret += role + ':'\n\n            return ret\n        elif self.sep_style == SeparatorStyle.INTERNVL_ZH:\n            seps = [self.sep2, self.sep]\n            ret = self.system_message + seps[0]\n            for i, (role, message) in enumerate(self.messages):\n                if message:\n                    ret += role + ': ' + message + seps[i % 2]\n                else:\n                    ret += role + ':'\n            return ret\n        elif self.sep_style == SeparatorStyle.MPT:\n            ret = system_prompt + self.sep\n            for role, message in self.messages:\n                if message:\n                    if type(message) is tuple:\n                        message, _, _ = message\n                    ret += role + message + self.sep\n                else:\n                    ret += role\n            return ret\n        else:\n            raise ValueError(f'Invalid style: {self.sep_style}')\n\n    def set_system_message(self, system_message: str):\n        \"\"\"Set the system message.\"\"\"\n        self.system_message = system_message\n\n    def append_message(self, role: str, message: str):\n        \"\"\"Append a new message.\"\"\"\n        self.messages.append([role, message])\n\n    def update_last_message(self, message: str):\n        \"\"\"Update the last output.\n\n        The last message is typically set to be None when constructing the prompt,\n        so we need to update it in-place after getting the response from a model.\n        \"\"\"\n        self.messages[-1][1] = message\n\n    def to_gradio_chatbot(self):\n        \"\"\"Convert the conversation to gradio chatbot format.\"\"\"\n        ret = []\n        for i, (role, msg) in enumerate(self.messages[self.offset :]):\n            if i % 2 == 0:\n                ret.append([msg, None])\n            else:\n                ret[-1][-1] = msg\n        return ret\n\n    def to_openai_api_messages(self):\n        \"\"\"Convert the conversation to OpenAI chat completion format.\"\"\"\n        ret = [{'role': 'system', 'content': self.system_message}]\n\n        for i, (_, msg) in enumerate(self.messages[self.offset :]):\n            if i % 2 == 0:\n                ret.append({'role': 'user', 'content': msg})\n            else:\n                if msg is not None:\n                    ret.append({'role': 'assistant', 'content': msg})\n        return ret\n\n    def copy(self):\n        return Conversation(\n            name=self.name,\n            system_template=self.system_template,\n            system_message=self.system_message,\n            roles=self.roles,\n            messages=[[x, y] for x, y in self.messages],\n            offset=self.offset,\n            sep_style=self.sep_style,\n            sep=self.sep,\n            sep2=self.sep2,\n            stop_str=self.stop_str,\n            stop_token_ids=self.stop_token_ids,\n        )\n\n    def dict(self):\n        return {\n            'template_name': self.name,\n            'system_message': self.system_message,\n            'roles': self.roles,\n            'messages': self.messages,\n            'offset': self.offset,\n        }\n\n\n# A global registry for all conversation templates\nconv_templates: Dict[str, Conversation] = {}\n\n\ndef register_conv_template(template: Conversation, override: bool = False):\n    \"\"\"Register a new conversation template.\"\"\"\n    if not override:\n        assert (\n            template.name not in conv_templates\n        ), f'{template.name} has been registered.'\n\n    conv_templates[template.name] = template\n\n\ndef get_conv_template(name: str) -> Conversation:\n    \"\"\"Get a conversation template.\"\"\"\n    return conv_templates[name].copy()\n\n\n# InternVL-Chat-V1-1 template\nregister_conv_template(\n    Conversation(\n        name='internvl_zh',\n        system_template='',\n        roles=('<human>', '<bot>'),\n        sep_style=SeparatorStyle.INTERNVL_ZH,\n        sep='</s>',\n        sep2=' ',\n    )\n)\n\n\n# Both Hermes-2 and internlm2-chat are chatml-format conversation templates. The difference\n# is that during training, the preprocessing function for the Hermes-2 template doesn't add\n# <s> at the beginning of the tokenized sequence, while the internlm2-chat template does.\n# Therefore, they are completely equivalent during inference.\nregister_conv_template(\n    Conversation(\n        name='Hermes-2',\n        system_template='<|im_start|>system\\n{system_message}',\n        # note: The new system prompt was not used here to avoid changes in benchmark performance.\n        # system_message='我是书生·万象，英文名是InternVL，是由上海人工智能实验室、清华大学及多家合作单位联合开发的多模态大语言模型。',\n        system_message='你是由上海人工智能实验室联合商汤科技开发的书生多模态大模型，英文名叫InternVL, 是一个有用无害的人工智能助手。',\n        roles=('<|im_start|>user\\n', '<|im_start|>assistant\\n'),\n        sep_style=SeparatorStyle.MPT,\n        sep='<|im_end|>',\n        stop_str='<|endoftext|>',\n    )\n)\n\n\nregister_conv_template(\n    Conversation(\n        name='internlm2-chat',\n        system_template='<|im_start|>system\\n{system_message}',\n        # note: The new system prompt was not used here to avoid changes in benchmark performance.\n        # system_message='我是书生·万象，英文名是InternVL，是由上海人工智能实验室、清华大学及多家合作单位联合开发的多模态大语言模型。',\n        system_message='你是由上海人工智能实验室联合商汤科技开发的书生多模态大模型，英文名叫InternVL, 是一个有用无害的人工智能助手。',\n        roles=('<|im_start|>user\\n', '<|im_start|>assistant\\n'),\n        sep_style=SeparatorStyle.MPT,\n        sep='<|im_end|>',\n    )\n)\n\n\nregister_conv_template(\n    Conversation(\n        name='phi3-chat',\n        system_template='<|system|>\\n{system_message}',\n        # note: The new system prompt was not used here to avoid changes in benchmark performance.\n        # system_message='我是书生·万象，英文名是InternVL，是由上海人工智能实验室、清华大学及多家合作单位联合开发的多模态大语言模型。',\n        system_message='你是由上海人工智能实验室联合商汤科技开发的书生多模态大模型，英文名叫InternVL, 是一个有用无害的人工智能助手。',\n        roles=('<|user|>\\n', '<|assistant|>\\n'),\n        sep_style=SeparatorStyle.MPT,\n        sep='<|end|>',\n    )\n)\n\n\nregister_conv_template(\n    Conversation(\n        name='internvl2_5',\n        system_template='<|im_start|>system\\n{system_message}',\n        system_message='你是书生·万象，英文名是InternVL，是由上海人工智能实验室、清华大学及多家合作单位联合开发的多模态大语言模型。',\n        roles=('<|im_start|>user\\n', '<|im_start|>assistant\\n'),\n        sep_style=SeparatorStyle.MPT,\n        sep='<|im_end|>\\n',\n    )\n)"
  },
  {
    "path": "xinference/thirdparty/llava/__init__.py",
    "content": "from .model import LlavaLlamaForCausalLM\n"
  },
  {
    "path": "xinference/thirdparty/llava/conversation.py",
    "content": "import dataclasses\nfrom enum import Enum, auto\nfrom typing import List\n\n\nclass SeparatorStyle(Enum):\n    \"\"\"Different separator style.\"\"\"\n\n    SINGLE = auto()\n\n\n@dataclasses.dataclass\nclass Conversation:\n    \"\"\"A class that keeps all conversation history.\"\"\"\n\n    system: str\n    roles: List[str]\n    messages: List[List[str]]\n    offset: int\n    sep_style: SeparatorStyle = SeparatorStyle.SINGLE\n    sep: str = \"###\"\n    sep2: str = None\n    version: str = \"Unknown\"\n\n    skip_next: bool = False\n\n    def get_prompt(self):\n        messages = self.messages\n        if len(messages) > 0 and type(messages[0][1]) is tuple:\n            messages = self.messages.copy()\n            init_role, init_msg = messages[0].copy()\n            init_msg = init_msg[0].replace(\"<image_placeholder>\", \"\").strip()\n            if \"mmtag\" in self.version:\n                messages[0] = (init_role, init_msg)\n                messages.insert(\n                    0, (self.roles[0], \"<Image><image_placeholder></Image>\")\n                )\n                messages.insert(1, (self.roles[1], \"Received.\"))\n            else:\n                messages[0] = (init_role, \"<image_placeholder>\\n\" + init_msg)\n\n        if self.sep_style == SeparatorStyle.SINGLE:\n            ret = self.system + \"\\n\\n\" + self.sep + \" \"\n            for role, message in messages:\n                if message:\n                    if type(message) is tuple:\n                        message, _, _ = message\n                    ret += role + \": \" + message + \"\\n\" + self.sep + \" \"\n                else:\n                    ret += role + \":\"\n        else:\n            raise ValueError(f\"Invalid style: {self.sep_style}\")\n\n        return ret\n\n    def append_message(self, role, message):\n        self.messages.append([role, message])\n\n    def get_images(self, return_pil=False):\n        images = []\n        for i, (role, msg) in enumerate(self.messages[self.offset :]):\n            if i % 2 == 0:\n                if type(msg) is tuple:\n                    import base64\n                    from io import BytesIO\n\n                    from PIL import Image\n\n                    msg, image, image_process_mode = msg\n                    if image_process_mode == \"Pad\":\n\n                        def expand2square(pil_img, background_color=(122, 116, 104)):\n                            width, height = pil_img.size\n                            if width == height:\n                                return pil_img\n                            elif width > height:\n                                result = Image.new(\n                                    pil_img.mode, (width, width), background_color\n                                )\n                                result.paste(pil_img, (0, (width - height) // 2))\n                                return result\n                            else:\n                                result = Image.new(\n                                    pil_img.mode, (height, height), background_color\n                                )\n                                result.paste(pil_img, ((height - width) // 2, 0))\n                                return result\n\n                        image = expand2square(image)\n                    elif image_process_mode == \"Crop\":\n                        pass\n                    elif image_process_mode == \"Resize\":\n                        image = image.resize((336, 336))\n                    else:\n                        raise ValueError(\n                            f\"Invalid image_process_mode: {image_process_mode}\"\n                        )\n                    max_hw, min_hw = max(image.size), min(image.size)\n                    aspect_ratio = max_hw / min_hw\n                    max_len, min_len = 800, 400\n                    shortest_edge = int(min(max_len / aspect_ratio, min_len, min_hw))\n                    longest_edge = int(shortest_edge * aspect_ratio)\n                    W, H = image.size\n                    if H > W:\n                        H, W = longest_edge, shortest_edge\n                    else:\n                        H, W = shortest_edge, longest_edge\n                    image = image.resize((W, H))\n                    if return_pil:\n                        images.append(image)\n                    else:\n                        buffered = BytesIO()\n                        image.save(buffered, format=\"PNG\")\n                        img_b64_str = base64.b64encode(buffered.getvalue()).decode()\n                        images.append(img_b64_str)\n        return images\n\n    def to_gradio_chatbot(self):\n        ret = []\n        for i, (role, msg) in enumerate(self.messages[self.offset :]):\n            if i % 2 == 0:\n                if type(msg) is tuple:\n                    import base64\n                    from io import BytesIO\n\n                    msg, image, image_process_mode = msg\n                    max_hw, min_hw = max(image.size), min(image.size)\n                    aspect_ratio = max_hw / min_hw\n                    max_len, min_len = 800, 400\n                    shortest_edge = int(min(max_len / aspect_ratio, min_len, min_hw))\n                    longest_edge = int(shortest_edge * aspect_ratio)\n                    W, H = image.size\n                    if H > W:\n                        H, W = longest_edge, shortest_edge\n                    else:\n                        H, W = shortest_edge, longest_edge\n                    image = image.resize((W, H))\n                    buffered = BytesIO()\n                    image.save(buffered, format=\"JPEG\")\n                    img_b64_str = base64.b64encode(buffered.getvalue()).decode()\n                    img_str = f'<img src=\"data:image/png;base64,{img_b64_str}\" alt=\"user upload image\" />'\n                    msg = img_str + msg.replace(\"<image_placeholder>\", \"\").strip()\n                    ret.append([msg, None])\n                else:\n                    ret.append([msg, None])\n            else:\n                ret[-1][-1] = msg\n        return ret\n\n    def copy(self):\n        return Conversation(\n            system=self.system,\n            roles=self.roles,\n            messages=[[x, y] for x, y in self.messages],\n            offset=self.offset,\n            sep_style=self.sep_style,\n            sep=self.sep,\n            sep2=self.sep2,\n            version=self.version,\n        )\n\n    def dict(self):\n        if len(self.get_images()) > 0:\n            return {\n                \"system\": self.system,\n                \"roles\": self.roles,\n                \"messages\": [\n                    [x, y[0] if type(y) is tuple else y] for x, y in self.messages\n                ],\n                \"offset\": self.offset,\n                \"sep\": self.sep,\n                \"sep2\": self.sep2,\n            }\n        return {\n            \"system\": self.system,\n            \"roles\": self.roles,\n            \"messages\": self.messages,\n            \"offset\": self.offset,\n            \"sep\": self.sep,\n            \"sep2\": self.sep2,\n        }\n\n\nmm_default_conv = Conversation(\n    system=\"This is a chat between an inquisitive human and an AI assistant. \"\n    \"Assume the role of the AI assistant. \"\n    \"Read all the images carefully, and respond to the human's questions with informative, helpful, detailed and polite answers. \"\n    \"这是一个好奇的人类和一个人工智能助手之间的对话。\"\n    \"假设你扮演这个AI助手的角色。仔细阅读所有的图像，并对人类的问题做出信息丰富、有帮助、详细的和礼貌的回答。\",\n    roles=(\"Human\", \"Assistant\"),\n    messages=(),\n    offset=0,\n    sep_style=SeparatorStyle.SINGLE,\n    sep=\"###\",\n)\n\n\ndefault_conversation = mm_default_conv\nconv_templates = {\n    \"mm_default\": mm_default_conv,\n}\n\n\nif __name__ == \"__main__\":\n    print(default_conversation.get_prompt())\n"
  },
  {
    "path": "xinference/thirdparty/llava/mm_utils.py",
    "content": "import base64\nfrom io import BytesIO\n\nimport torch\nfrom PIL import Image\nfrom transformers import AutoTokenizer, StoppingCriteria\n\nfrom .model import LlavaLlamaForCausalLM\nfrom .model.constants import IMAGE_TOKEN_INDEX\n\n\ndef load_image_from_base64(image):\n    return Image.open(BytesIO(base64.b64decode(image)))\n\n\ndef process_images(images, image_processor, model_cfg):\n    return image_processor(images, return_tensors=\"pt\")[\"pixel_values\"]\n\n\ndef expand2square(pil_img, background_color):\n    width, height = pil_img.size\n    if width == height:\n        return pil_img\n    elif width > height:\n        result = Image.new(pil_img.mode, (width, width), background_color)\n        result.paste(pil_img, (0, (width - height) // 2))\n        return result\n    else:\n        result = Image.new(pil_img.mode, (height, height), background_color)\n        result.paste(pil_img, ((height - width) // 2, 0))\n        return result\n\n\ndef tokenizer_image_token(\n    prompt, tokenizer, image_token_index=IMAGE_TOKEN_INDEX, return_tensors=None\n):\n    prompt_chunks = [\n        tokenizer(chunk).input_ids for chunk in prompt.split(\"<image_placeholder>\")\n    ]\n\n    def insert_separator(X, sep):\n        return [ele for sublist in zip(X, [sep] * len(X)) for ele in sublist][:-1]\n\n    input_ids = []\n    offset = 0\n    if (\n        len(prompt_chunks) > 0\n        and len(prompt_chunks[0]) > 0\n        and prompt_chunks[0][0] == tokenizer.bos_token_id\n    ):\n        offset = 1\n        input_ids.append(prompt_chunks[0][0])\n\n    for x in insert_separator(prompt_chunks, [image_token_index] * (offset + 1)):\n        input_ids.extend(x[offset:])\n\n    if return_tensors is not None:\n        if return_tensors == \"pt\":\n            return torch.tensor(input_ids, dtype=torch.long)\n        raise ValueError(f\"Unsupported tensor type: {return_tensors}\")\n    return input_ids\n\n\ndef get_model_name_from_path(model_path):\n    model_path = model_path.strip(\"/\")\n    model_paths = model_path.split(\"/\")\n    if model_paths[-1].startswith(\"checkpoint-\"):\n        return model_paths[-2] + \"_\" + model_paths[-1]\n    else:\n        return model_paths[-1]\n\n\ndef load_pretrained_model(\n    model_path, load_8bit=False, load_4bit=False, device_map=\"auto\", multimodal=\"IMAGE\"\n):\n    kwargs = {\"device_map\": device_map}\n    kwargs[\"torch_dtype\"] = torch.bfloat16\n\n    tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False)\n    model = LlavaLlamaForCausalLM.from_pretrained(\n        model_path, low_cpu_mem_usage=True, **kwargs\n    )\n    image_processor = None\n    model.resize_token_embeddings(len(tokenizer))\n    vision_tower = model.get_vision_tower()\n\n    if not vision_tower.is_loaded:\n        vision_tower.load_model()\n    vision_tower.to(device=model.device, dtype=torch.bfloat16)\n    image_processor = vision_tower.image_processor\n\n    if hasattr(model.config, \"max_sequence_length\"):\n        context_len = model.config.max_sequence_length\n    else:\n        context_len = 2048\n\n    return tokenizer, model, image_processor, context_len\n\n\nclass KeywordsStoppingCriteria(StoppingCriteria):\n    def __init__(self, keywords, tokenizer, input_ids):\n        self.keywords = keywords\n        self.tokenizer = tokenizer\n        self.start_len = None\n        self.input_ids = input_ids\n\n    def __call__(\n        self, output_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs\n    ) -> bool:\n        if self.start_len is None:\n            self.start_len = self.input_ids.shape[1]\n            return False\n        else:\n            outputs = self.tokenizer.batch_decode(\n                output_ids[:, self.start_len :], skip_special_tokens=True\n            )\n            flag = True\n            for output in outputs:\n                for keyword in self.keywords:\n                    if keyword not in output:\n                        flag = False\n                        return False\n            return flag\n"
  },
  {
    "path": "xinference/thirdparty/llava/model/__init__.py",
    "content": "from .llava_llama import LlavaConfig, LlavaLlamaForCausalLM\n"
  },
  {
    "path": "xinference/thirdparty/llava/model/clip_encoder/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/llava/model/clip_encoder/builder.py",
    "content": "from .clip_encoder import CLIPVisionTower\n\n\ndef build_vision_tower(vision_tower_cfg, **kwargs):\n    vision_tower = getattr(\n        vision_tower_cfg,\n        \"mm_vision_tower\",\n        getattr(vision_tower_cfg, \"vision_tower\", None),\n    )\n\n    return CLIPVisionTower(vision_tower, args=vision_tower_cfg, **kwargs)\n"
  },
  {
    "path": "xinference/thirdparty/llava/model/clip_encoder/clip_encoder.py",
    "content": "import torch\nimport torch.nn as nn\nfrom transformers import CLIPImageProcessor, CLIPVisionConfig, CLIPVisionModel\n\n\nclass CLIPVisionTower(nn.Module):\n    def __init__(self, vision_tower, args, delay_load=False):\n        super().__init__()\n\n        self.is_loaded = False\n\n        self.vision_tower_name = vision_tower\n        self.select_layer = args.mm_vision_select_layer\n        self.select_feature = getattr(args, \"mm_vision_select_feature\", \"patch\")\n\n        if not delay_load:\n            self.load_model()\n        else:\n            self.cfg_only = CLIPVisionConfig.from_pretrained(self.vision_tower_name)\n\n    def load_model(self):\n        self.image_processor = CLIPImageProcessor.from_pretrained(\n            self.vision_tower_name\n        )\n        self.vision_tower = CLIPVisionModel.from_pretrained(\n            self.vision_tower_name, ignore_mismatched_sizes=True\n        )\n\n        self.is_loaded = True\n\n    def feature_select(self, image_forward_outs):\n        image_features = image_forward_outs.hidden_states[self.select_layer]\n        if self.select_feature == \"patch\":\n            image_features = image_features[:, 1:]\n        elif self.select_feature == \"cls_patch\":\n            image_features = image_features\n        else:\n            raise ValueError(f\"Unexpected select feature: {self.select_feature}\")\n        return image_features\n\n    # @torch.no_grad()\n    def forward(self, images):\n        if type(images) is list:\n            image_features = []\n            for image in images:\n                image_forward_out = self.vision_tower(\n                    image.to(device=self.device, dtype=self.dtype).unsqueeze(0),\n                    output_hidden_states=True,\n                )\n                image_feature = self.feature_select(image_forward_out).to(image.dtype)\n                image_features.append(image_feature)\n        else:\n            image_forward_outs = self.vision_tower(\n                images.to(device=self.device, dtype=self.dtype),\n                output_hidden_states=True,\n            )\n            image_features = self.feature_select(image_forward_outs).to(images.dtype)\n\n        return image_features\n\n    @property\n    def dummy_feature(self):\n        return torch.zeros(1, self.hidden_size, device=self.device, dtype=self.dtype)\n\n    @property\n    def dtype(self):\n        return self.vision_tower.dtype\n\n    @property\n    def device(self):\n        return self.vision_tower.device\n\n    @property\n    def config(self):\n        if self.is_loaded:\n            return self.vision_tower.config\n        else:\n            return self.cfg_only\n\n    @property\n    def hidden_size(self):\n        return self.config.hidden_size\n\n    @property\n    def num_patches(self):\n        return (self.config.image_size // self.config.patch_size) ** 2\n"
  },
  {
    "path": "xinference/thirdparty/llava/model/constants.py",
    "content": "# Model Constants\nIGNORE_INDEX = -100\nIMAGE_TOKEN_INDEX = -200\nDEFAULT_IMAGE_TOKEN = \"<image_placeholder>\"\n\nkey_info = {\"model_path\": None}\n"
  },
  {
    "path": "xinference/thirdparty/llava/model/llava_arch.py",
    "content": "#    Copyright 2023 Haotian Liu\n#\n#    Licensed under the Apache License, Version 2.0 (the \"License\");\n#    you may not use this file except in compliance with the License.\n#    You may obtain a copy of the License at\n#\n#        http://www.apache.org/licenses/LICENSE-2.0\n#\n#    Unless required by applicable law or agreed to in writing, software\n#    distributed under the License is distributed on an \"AS IS\" BASIS,\n#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#    See the License for the specific language governing permissions and\n#    limitations under the License.\n\n\nimport os\nfrom abc import ABC, abstractmethod\n\nimport torch\n\nfrom .clip_encoder.builder import build_vision_tower\nfrom .constants import IGNORE_INDEX, IMAGE_TOKEN_INDEX, key_info\nfrom .multimodal_projector.builder import build_vision_projector\n\n\nclass LlavaMetaModel:\n    def __init__(self, config):\n        super(LlavaMetaModel, self).__init__(config)\n\n        if hasattr(config, \"mm_vision_tower\"):\n            config.mm_vision_tower = os.path.join(\n                key_info[\"model_path\"], config.mm_vision_tower.replace(\"./\", \"\")\n            )\n            self.vision_tower = build_vision_tower(config, delay_load=True)\n            self.mm_projector = build_vision_projector(config)\n\n    def get_vision_tower(self):\n        vision_tower = getattr(self, \"vision_tower\", None)\n        if type(vision_tower) is list:\n            vision_tower = vision_tower[0]\n        return vision_tower\n\n    def initialize_vision_modules(self, model_args):\n        vision_tower = model_args.vision_tower\n        mm_vision_select_layer = model_args.mm_vision_select_layer\n        mm_vision_select_feature = model_args.mm_vision_select_feature\n        pretrain_mm_mlp_adapter = model_args.pretrain_mm_mlp_adapter\n\n        self.config.mm_vision_tower = vision_tower\n\n        if self.get_vision_tower() is None:\n            vision_tower = build_vision_tower(model_args)\n            self.vision_tower = vision_tower\n        else:\n            vision_tower = self.vision_tower\n            if not vision_tower.is_loaded:\n                vision_tower.load_model()\n\n        self.config.use_mm_proj = True\n        self.config.mm_projector_type = getattr(\n            model_args, \"mm_projector_type\", \"linear\"\n        )\n        self.config.mm_hidden_size = vision_tower.hidden_size\n        self.config.mm_vision_select_layer = mm_vision_select_layer\n        self.config.mm_vision_select_feature = mm_vision_select_feature\n\n        if getattr(self, \"mm_projector\", None) is None:\n            self.mm_projector = build_vision_projector(self.config)\n\n        if pretrain_mm_mlp_adapter is not None:\n            mm_projector_weights = torch.load(\n                pretrain_mm_mlp_adapter, map_location=\"cpu\"\n            )\n\n            def get_w(weights, keyword):\n                return {\n                    k.split(keyword + \".\")[1]: v\n                    for k, v in weights.items()\n                    if keyword in k\n                }\n\n            self.mm_projector.load_state_dict(\n                get_w(mm_projector_weights, \"mm_projector\")\n            )\n\n\nclass LlavaMetaForCausalLM(ABC):\n    @abstractmethod\n    def get_model(self):\n        pass\n\n    def get_vision_tower(self):\n        return self.get_model().get_vision_tower()\n\n    def encode_images(self, images):\n        image_features = self.get_model().get_vision_tower()(images)\n        image_features = self.get_model().mm_projector(image_features)\n        return image_features\n\n    def prepare_inputs_labels_for_multimodal(\n        self, input_ids, attention_mask, past_key_values, labels, images\n    ):\n        vision_tower = self.get_vision_tower()\n        if vision_tower is None or images is None or input_ids.shape[1] == 1:\n            if (\n                past_key_values is not None\n                and vision_tower is not None\n                and images is not None\n                and input_ids.shape[1] == 1\n            ):\n                new_mask = torch.ones(\n                    (\n                        attention_mask.shape[0],\n                        past_key_values[-1][-1].shape[-2] + 1 - attention_mask.shape[1],\n                    ),\n                    dtype=attention_mask.dtype,\n                    device=attention_mask.device,\n                )\n                attention_mask = torch.cat([attention_mask, new_mask], dim=1)\n            return input_ids, attention_mask, past_key_values, None, labels\n\n        if type(images) is list or images.ndim == 5:\n            concat_images = torch.cat([image for image in images], dim=0)\n            image_features = self.encode_images(concat_images)\n            split_sizes = [image.shape[0] for image in images]\n            image_features = torch.split(image_features, split_sizes, dim=0)\n            image_features = [x.flatten(0, 1) for x in image_features]\n        else:\n            image_features = self.encode_images(images)\n\n        new_input_embeds = []\n        new_labels = [] if labels is not None else None\n        cur_image_idx = 0\n        for batch_idx, cur_input_ids in enumerate(input_ids):\n            if (cur_input_ids == IMAGE_TOKEN_INDEX).sum() == 0:\n                # multimodal LLM, but the current sample is not multimodal\n                # cur_input_embeds = self.get_model().embed_tokens(cur_input_ids)\n                # cur_input_embeds = cur_input_embeds + (0. * self.get_model().mm_projector(vision_tower.dummy_feature)).sum()\n                # FIXME: this is a hacky fix, for deepspeed zero3 to work\n                half_len = cur_input_ids.shape[0] // 2\n                cur_image_features = image_features[cur_image_idx]\n                cur_input_embeds_1 = self.get_model().embed_tokens(\n                    cur_input_ids[:half_len]\n                )\n                cur_input_embeds_2 = self.get_model().embed_tokens(\n                    cur_input_ids[half_len:]\n                )\n                cur_input_embeds = torch.cat(\n                    [cur_input_embeds_1, cur_image_features[0:0], cur_input_embeds_2],\n                    dim=0,\n                )\n                new_input_embeds.append(cur_input_embeds)\n                if labels is not None:\n                    new_labels.append(labels[batch_idx])\n                cur_image_idx += 1\n                continue\n            image_token_indices = torch.where(cur_input_ids == IMAGE_TOKEN_INDEX)[0]\n            cur_new_input_embeds = []\n            if labels is not None:\n                cur_labels = labels[batch_idx]\n                cur_new_labels = []\n                assert cur_labels.shape == cur_input_ids.shape\n            while image_token_indices.numel() > 0:\n                cur_image_features = image_features[cur_image_idx]\n                image_token_start = image_token_indices[0]\n                if getattr(self.config, \"tune_mm_mlp_adapter\", False) and getattr(\n                    self.config, \"mm_use_im_start_end\", False\n                ):\n                    cur_new_input_embeds.append(\n                        self.get_model()\n                        .embed_tokens(cur_input_ids[: image_token_start - 1])\n                        .detach()\n                    )\n                    cur_new_input_embeds.append(\n                        self.get_model().embed_tokens(\n                            cur_input_ids[image_token_start - 1 : image_token_start]\n                        )\n                    )\n                    cur_new_input_embeds.append(cur_image_features)\n                    cur_new_input_embeds.append(\n                        self.get_model().embed_tokens(\n                            cur_input_ids[image_token_start + 1 : image_token_start + 2]\n                        )\n                    )\n                    if labels is not None:\n                        cur_new_labels.append(cur_labels[:image_token_start])\n                        cur_new_labels.append(\n                            torch.full(\n                                (cur_image_features.shape[0],),\n                                IGNORE_INDEX,\n                                device=labels.device,\n                                dtype=labels.dtype,\n                            )\n                        )\n                        cur_new_labels.append(\n                            cur_labels[image_token_start : image_token_start + 1]\n                        )\n                        cur_labels = cur_labels[image_token_start + 2 :]\n                else:\n                    cur_new_input_embeds.append(\n                        self.get_model().embed_tokens(cur_input_ids[:image_token_start])\n                    )\n                    cur_new_input_embeds.append(cur_image_features)\n                    if labels is not None:\n                        cur_new_labels.append(cur_labels[:image_token_start])\n                        cur_new_labels.append(\n                            torch.full(\n                                (cur_image_features.shape[0],),\n                                IGNORE_INDEX,\n                                device=labels.device,\n                                dtype=labels.dtype,\n                            )\n                        )\n                        cur_labels = cur_labels[image_token_start + 1 :]\n                cur_image_idx += 1\n                if getattr(self.config, \"tune_mm_mlp_adapter\", False) and getattr(\n                    self.config, \"mm_use_im_start_end\", False\n                ):\n                    cur_input_ids = cur_input_ids[image_token_start + 2 :]\n                else:\n                    cur_input_ids = cur_input_ids[image_token_start + 1 :]\n                image_token_indices = torch.where(cur_input_ids == IMAGE_TOKEN_INDEX)[0]\n            if cur_input_ids.numel() > 0:\n                if getattr(self.config, \"tune_mm_mlp_adapter\", False) and getattr(\n                    self.config, \"mm_use_im_start_end\", False\n                ):\n                    cur_new_input_embeds.append(\n                        self.get_model().embed_tokens(cur_input_ids).detach()\n                    )\n                else:\n                    cur_new_input_embeds.append(\n                        self.get_model().embed_tokens(cur_input_ids)\n                    )\n                if labels is not None:\n                    cur_new_labels.append(cur_labels)\n            cur_new_input_embeds = [\n                x.to(device=self.device) for x in cur_new_input_embeds\n            ]\n            cur_new_input_embeds = torch.cat(cur_new_input_embeds, dim=0)\n            new_input_embeds.append(cur_new_input_embeds)\n            if labels is not None:\n                cur_new_labels = torch.cat(cur_new_labels, dim=0)\n                new_labels.append(cur_new_labels)\n\n        if any(x.shape != new_input_embeds[0].shape for x in new_input_embeds):\n            max_len = max(x.shape[0] for x in new_input_embeds)\n\n            new_input_embeds_align = []\n            for cur_new_embed in new_input_embeds:\n                cur_new_embed = torch.cat(\n                    (\n                        cur_new_embed,\n                        torch.zeros(\n                            (max_len - cur_new_embed.shape[0], cur_new_embed.shape[1]),\n                            dtype=cur_new_embed.dtype,\n                            device=cur_new_embed.device,\n                        ),\n                    ),\n                    dim=0,\n                )\n                new_input_embeds_align.append(cur_new_embed)\n            new_input_embeds = torch.stack(new_input_embeds_align, dim=0)\n\n            if labels is not None:\n                new_labels_align = []\n                _new_labels = new_labels\n                for cur_new_label in new_labels:\n                    cur_new_label = torch.cat(\n                        (\n                            cur_new_label,\n                            torch.full(\n                                (max_len - cur_new_label.shape[0],),\n                                IGNORE_INDEX,\n                                dtype=cur_new_label.dtype,\n                                device=cur_new_label.device,\n                            ),\n                        ),\n                        dim=0,\n                    )\n                    new_labels_align.append(cur_new_label)\n                new_labels = torch.stack(new_labels_align, dim=0)\n\n            if attention_mask is not None:\n                new_attention_mask = []\n                for cur_attention_mask, cur_new_labels, cur_new_labels_align in zip(\n                    attention_mask, _new_labels, new_labels\n                ):\n                    new_attn_mask_pad_left = torch.full(\n                        (cur_new_labels.shape[0] - labels.shape[1],),\n                        True,\n                        dtype=attention_mask.dtype,\n                        device=attention_mask.device,\n                    )\n                    new_attn_mask_pad_right = torch.full(\n                        (cur_new_labels_align.shape[0] - cur_new_labels.shape[0],),\n                        False,\n                        dtype=attention_mask.dtype,\n                        device=attention_mask.device,\n                    )\n                    cur_new_attention_mask = torch.cat(\n                        (\n                            new_attn_mask_pad_left,\n                            cur_attention_mask,\n                            new_attn_mask_pad_right,\n                        ),\n                        dim=0,\n                    )\n                    new_attention_mask.append(cur_new_attention_mask)\n                attention_mask = torch.stack(new_attention_mask, dim=0)\n                assert attention_mask.shape == new_labels.shape\n        else:\n            new_input_embeds = torch.stack(new_input_embeds, dim=0)\n            if labels is not None:\n                new_labels = torch.stack(new_labels, dim=0)\n\n            if attention_mask is not None:\n                new_attn_mask_pad_right = torch.full(\n                    (\n                        attention_mask.shape[0],\n                        new_input_embeds.shape[1] - input_ids.shape[1],\n                    ),\n                    True,\n                    dtype=attention_mask.dtype,\n                    device=attention_mask.device,\n                )\n                attention_mask = torch.cat(\n                    (attention_mask, new_attn_mask_pad_right), dim=1\n                )\n                assert attention_mask.shape == new_input_embeds.shape[:2]\n\n        return None, attention_mask, past_key_values, new_input_embeds, new_labels\n\n    def initialize_vision_tokenizer(self, model_args, tokenizer):\n        if model_args.mm_use_im_patch_token:\n            tokenizer.add_tokens([DEFAULT_IMAGE_PATCH_TOKEN], special_tokens=True)\n            self.resize_token_embeddings(len(tokenizer))\n\n        if model_args.mm_use_im_start_end:\n            num_new_tokens = tokenizer.add_tokens(\n                [DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN], special_tokens=True\n            )\n            self.resize_token_embeddings(len(tokenizer))\n\n            if num_new_tokens > 0:\n                input_embeddings = self.get_input_embeddings().weight.data\n                output_embeddings = self.get_output_embeddings().weight.data\n\n                input_embeddings_avg = input_embeddings[:-num_new_tokens].mean(\n                    dim=0, keepdim=True\n                )\n                output_embeddings_avg = output_embeddings[:-num_new_tokens].mean(\n                    dim=0, keepdim=True\n                )\n\n                input_embeddings[-num_new_tokens:] = input_embeddings_avg\n                output_embeddings[-num_new_tokens:] = output_embeddings_avg\n\n            if model_args.tune_mm_mlp_adapter:\n                for p in self.get_input_embeddings().parameters():\n                    p.requires_grad = True\n                for p in self.get_output_embeddings().parameters():\n                    p.requires_grad = False\n\n            if model_args.pretrain_mm_mlp_adapter:\n                mm_projector_weights = torch.load(\n                    model_args.pretrain_mm_mlp_adapter, map_location=\"cpu\"\n                )\n                embed_tokens_weight = mm_projector_weights[\"model.embed_tokens.weight\"]\n                assert num_new_tokens == 2\n                if input_embeddings.shape == embed_tokens_weight.shape:\n                    input_embeddings[-num_new_tokens:] = embed_tokens_weight[\n                        -num_new_tokens:\n                    ]\n                elif embed_tokens_weight.shape[0] == num_new_tokens:\n                    input_embeddings[-num_new_tokens:] = embed_tokens_weight\n                else:\n                    raise ValueError(\n                        f\"Unexpected embed_tokens_weight shape. Pretrained: {embed_tokens_weight.shape}. Current: {input_embeddings.shape}. Number of new tokens: {num_new_tokens}.\"\n                    )\n        elif model_args.mm_use_im_patch_token:\n            if model_args.tune_mm_mlp_adapter:\n                for p in self.get_input_embeddings().parameters():\n                    p.requires_grad = False\n                for p in self.get_output_embeddings().parameters():\n                    p.requires_grad = False\n"
  },
  {
    "path": "xinference/thirdparty/llava/model/llava_llama.py",
    "content": "#    Copyright 2023 Haotian Liu\n#\n#    Licensed under the Apache License, Version 2.0 (the \"License\");\n#    you may not use this file except in compliance with the License.\n#    You may obtain a copy of the License at\n#\n#        http://www.apache.org/licenses/LICENSE-2.0\n#\n#    Unless required by applicable law or agreed to in writing, software\n#    distributed under the License is distributed on an \"AS IS\" BASIS,\n#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#    See the License for the specific language governing permissions and\n#    limitations under the License.\n\n\nfrom typing import List, Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nfrom torch.nn import CrossEntropyLoss\nfrom transformers import LlamaConfig, LlamaForCausalLM, LlamaModel\nfrom transformers.modeling_outputs import CausalLMOutputWithPast\n\nfrom .llava_arch import LlavaMetaForCausalLM, LlavaMetaModel\n\n\nclass LlavaConfig(LlamaConfig):\n    model_type = \"llava\"\n\n\nclass LlavaLlamaModel(LlavaMetaModel, LlamaModel):\n    config_class = LlavaConfig\n\n    def __init__(self, config: LlamaConfig):\n        config._flash_attn_2_enabled = True  ######set flash attention2!!!!!!\n        super(LlavaLlamaModel, self).__init__(config)\n\n\nclass LlavaLlamaForCausalLM(LlamaForCausalLM, LlavaMetaForCausalLM):\n    config_class = LlavaConfig\n\n    def __init__(self, config):\n        super(LlamaForCausalLM, self).__init__(config)\n        self.model = LlavaLlamaModel(config)\n\n        self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False)\n\n        # Initialize weights and apply final processing\n        self.post_init()\n\n    def get_model(self):\n        return self.model\n\n    def forward(\n        self,\n        input_ids: torch.LongTensor = None,\n        attention_mask: Optional[torch.Tensor] = None,\n        past_key_values: Optional[List[torch.FloatTensor]] = None,\n        inputs_embeds: Optional[torch.FloatTensor] = None,\n        labels: Optional[torch.LongTensor] = None,\n        use_cache: Optional[bool] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        images: Optional[torch.FloatTensor] = None,\n        return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, CausalLMOutputWithPast]:\n        output_attentions = (\n            output_attentions\n            if output_attentions is not None\n            else self.config.output_attentions\n        )\n        output_hidden_states = (\n            output_hidden_states\n            if output_hidden_states is not None\n            else self.config.output_hidden_states\n        )\n        return_dict = (\n            return_dict if return_dict is not None else self.config.use_return_dict\n        )\n\n        (\n            input_ids,\n            attention_mask,\n            past_key_values,\n            inputs_embeds,\n            labels,\n        ) = self.prepare_inputs_labels_for_multimodal(\n            input_ids, attention_mask, past_key_values, labels, images\n        )\n\n        position_ids = attention_mask.long().cumsum(-1) - 1\n        position_ids.masked_fill_(attention_mask == 0, 1)\n        if past_key_values:\n            position_ids = position_ids[:, -1].unsqueeze(-1)\n\n        # decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn)\n        outputs = self.model(\n            input_ids=input_ids,\n            attention_mask=attention_mask,\n            position_ids=position_ids,\n            past_key_values=past_key_values,\n            inputs_embeds=inputs_embeds,\n            use_cache=use_cache,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n\n        hidden_states = outputs[0]\n        logits = self.lm_head(hidden_states)\n\n        loss = None\n        if labels is not None:\n            # Shift so that tokens < n predict n\n            shift_logits = logits[..., :-1, :].contiguous()\n            shift_labels = labels[..., 1:].contiguous()\n            # Flatten the tokens\n            loss_fct = CrossEntropyLoss()\n            shift_logits = shift_logits.view(-1, self.config.vocab_size)\n            shift_labels = shift_labels.view(-1)\n            # Enable model/pipeline parallelism\n            shift_labels = shift_labels.to(shift_logits.device)\n            loss = loss_fct(shift_logits, shift_labels)\n\n        if not return_dict:\n            output = (logits,) + outputs[1:]\n            return (loss,) + output if loss is not None else output\n\n        return CausalLMOutputWithPast(\n            loss=loss,\n            logits=logits,\n            past_key_values=outputs.past_key_values,\n            hidden_states=outputs.hidden_states,\n            attentions=outputs.attentions,\n        )\n\n    def prepare_inputs_for_generation(\n        self,\n        input_ids,\n        past_key_values=None,\n        attention_mask=None,\n        inputs_embeds=None,\n        **kwargs\n    ):\n        if past_key_values:\n            input_ids = input_ids[:, -1:]\n\n        # if `inputs_embeds` are passed, we only want to use them in the 1st generation step\n        if inputs_embeds is not None and past_key_values is None:\n            model_inputs = {\"inputs_embeds\": inputs_embeds}\n        else:\n            model_inputs = {\"input_ids\": input_ids}\n\n        model_inputs.update(\n            {\n                # \"position_ids\": position_ids,\n                \"past_key_values\": past_key_values,\n                \"use_cache\": kwargs.get(\"use_cache\"),\n                \"attention_mask\": attention_mask,\n                \"images\": kwargs.get(\"images\", None),\n            }\n        )\n        return model_inputs\n"
  },
  {
    "path": "xinference/thirdparty/llava/model/multimodal_projector/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/llava/model/multimodal_projector/builder.py",
    "content": "import re\n\nimport torch.nn as nn\n\n\nclass IdentityMap(nn.Module):\n    def __init__(self):\n        super().__init__()\n\n    def forward(self, x, *args, **kwargs):\n        return x\n\n    @property\n    def config(self):\n        return {\"mm_projector_type\": \"identity\"}\n\n\nclass SimpleResBlock(nn.Module):\n    def __init__(self, channels):\n        super().__init__()\n        self.pre_norm = nn.LayerNorm(channels)\n\n        self.proj = nn.Sequential(\n            nn.Linear(channels, channels), nn.GELU(), nn.Linear(channels, channels)\n        )\n\n    def forward(self, x):\n        x = self.pre_norm(x)\n        return x + self.proj(x)\n\n\ndef build_vision_projector(config, delay_load=False, **kwargs):\n    projector_type = getattr(config, \"mm_projector_type\", \"linear\")\n\n    if projector_type == \"linear\":\n        return nn.Linear(config.mm_hidden_size, config.hidden_size)\n\n    use_norm = False\n    if \"_Norm\" in projector_type:\n        use_norm = True\n        projector_type = projector_type.replace(\"_Norm\", \"\")\n    mlp_gelu_match = re.match(r\"^mlp(\\d+)x_gelu$\", projector_type)\n    if mlp_gelu_match:\n        mlp_depth = int(mlp_gelu_match.group(1))\n        if use_norm:\n            modules = [\n                nn.Linear(config.mm_hidden_size, config.hidden_size),\n                nn.LayerNorm(config.hidden_size),\n            ]\n        else:\n            modules = [nn.Linear(config.mm_hidden_size, config.hidden_size)]\n        for _ in range(1, mlp_depth):\n            modules.append(nn.GELU())\n            if use_norm:\n                modules.append(nn.Linear(config.hidden_size, config.hidden_size))\n                modules.append(nn.LayerNorm(config.hidden_size))\n            else:\n                modules.append(nn.Linear(config.hidden_size, config.hidden_size))\n        return nn.Sequential(*modules)\n\n    if projector_type == \"identity\":\n        return IdentityMap()\n\n    raise ValueError(f\"Unknown projector type: {projector_type}\")\n"
  },
  {
    "path": "xinference/thirdparty/matcha/VERSION",
    "content": "0.0.7.0\n"
  },
  {
    "path": "xinference/thirdparty/matcha/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/matcha/app.py",
    "content": "import tempfile\nfrom argparse import Namespace\nfrom pathlib import Path\n\nimport gradio as gr\nimport soundfile as sf\nimport torch\n\nfrom matcha.cli import (\n    MATCHA_URLS,\n    VOCODER_URLS,\n    assert_model_downloaded,\n    get_device,\n    load_matcha,\n    load_vocoder,\n    process_text,\n    to_waveform,\n)\nfrom matcha.utils.utils import get_user_data_dir, plot_tensor\n\nLOCATION = Path(get_user_data_dir())\n\nargs = Namespace(\n    cpu=False,\n    model=\"matcha_vctk\",\n    vocoder=\"hifigan_univ_v1\",\n    spk=0,\n)\n\nCURRENTLY_LOADED_MODEL = args.model\n\n\ndef MATCHA_TTS_LOC(x):\n    return LOCATION / f\"{x}.ckpt\"\n\n\ndef VOCODER_LOC(x):\n    return LOCATION / f\"{x}\"\n\n\nLOGO_URL = \"https://shivammehta25.github.io/Matcha-TTS/images/logo.png\"\nRADIO_OPTIONS = {\n    \"Multi Speaker (VCTK)\": {\n        \"model\": \"matcha_vctk\",\n        \"vocoder\": \"hifigan_univ_v1\",\n    },\n    \"Single Speaker (LJ Speech)\": {\n        \"model\": \"matcha_ljspeech\",\n        \"vocoder\": \"hifigan_T2_v1\",\n    },\n}\n\n# Ensure all the required models are downloaded\nassert_model_downloaded(MATCHA_TTS_LOC(\"matcha_ljspeech\"), MATCHA_URLS[\"matcha_ljspeech\"])\nassert_model_downloaded(VOCODER_LOC(\"hifigan_T2_v1\"), VOCODER_URLS[\"hifigan_T2_v1\"])\nassert_model_downloaded(MATCHA_TTS_LOC(\"matcha_vctk\"), MATCHA_URLS[\"matcha_vctk\"])\nassert_model_downloaded(VOCODER_LOC(\"hifigan_univ_v1\"), VOCODER_URLS[\"hifigan_univ_v1\"])\n\ndevice = get_device(args)\n\n# Load default model\nmodel = load_matcha(args.model, MATCHA_TTS_LOC(args.model), device)\nvocoder, denoiser = load_vocoder(args.vocoder, VOCODER_LOC(args.vocoder), device)\n\n\ndef load_model(model_name, vocoder_name):\n    model = load_matcha(model_name, MATCHA_TTS_LOC(model_name), device)\n    vocoder, denoiser = load_vocoder(vocoder_name, VOCODER_LOC(vocoder_name), device)\n    return model, vocoder, denoiser\n\n\ndef load_model_ui(model_type, textbox):\n    model_name, vocoder_name = RADIO_OPTIONS[model_type][\"model\"], RADIO_OPTIONS[model_type][\"vocoder\"]\n\n    global model, vocoder, denoiser, CURRENTLY_LOADED_MODEL  # pylint: disable=global-statement\n    if CURRENTLY_LOADED_MODEL != model_name:\n        model, vocoder, denoiser = load_model(model_name, vocoder_name)\n        CURRENTLY_LOADED_MODEL = model_name\n\n    if model_name == \"matcha_ljspeech\":\n        spk_slider = gr.update(visible=False, value=-1)\n        single_speaker_examples = gr.update(visible=True)\n        multi_speaker_examples = gr.update(visible=False)\n        length_scale = gr.update(value=0.95)\n    else:\n        spk_slider = gr.update(visible=True, value=0)\n        single_speaker_examples = gr.update(visible=False)\n        multi_speaker_examples = gr.update(visible=True)\n        length_scale = gr.update(value=0.85)\n\n    return (\n        textbox,\n        gr.update(interactive=True),\n        spk_slider,\n        single_speaker_examples,\n        multi_speaker_examples,\n        length_scale,\n    )\n\n\n@torch.inference_mode()\ndef process_text_gradio(text):\n    output = process_text(1, text, device)\n    return output[\"x_phones\"][1::2], output[\"x\"], output[\"x_lengths\"]\n\n\n@torch.inference_mode()\ndef synthesise_mel(text, text_length, n_timesteps, temperature, length_scale, spk):\n    spk = torch.tensor([spk], device=device, dtype=torch.long) if spk >= 0 else None\n    output = model.synthesise(\n        text,\n        text_length,\n        n_timesteps=n_timesteps,\n        temperature=temperature,\n        spks=spk,\n        length_scale=length_scale,\n    )\n    output[\"waveform\"] = to_waveform(output[\"mel\"], vocoder, denoiser)\n    with tempfile.NamedTemporaryFile(suffix=\".wav\", delete=False) as fp:\n        sf.write(fp.name, output[\"waveform\"], 22050, \"PCM_24\")\n\n    return fp.name, plot_tensor(output[\"mel\"].squeeze().cpu().numpy())\n\n\ndef multispeaker_example_cacher(text, n_timesteps, mel_temp, length_scale, spk):\n    global CURRENTLY_LOADED_MODEL  # pylint: disable=global-statement\n    if CURRENTLY_LOADED_MODEL != \"matcha_vctk\":\n        global model, vocoder, denoiser  # pylint: disable=global-statement\n        model, vocoder, denoiser = load_model(\"matcha_vctk\", \"hifigan_univ_v1\")\n        CURRENTLY_LOADED_MODEL = \"matcha_vctk\"\n\n    phones, text, text_lengths = process_text_gradio(text)\n    audio, mel_spectrogram = synthesise_mel(text, text_lengths, n_timesteps, mel_temp, length_scale, spk)\n    return phones, audio, mel_spectrogram\n\n\ndef ljspeech_example_cacher(text, n_timesteps, mel_temp, length_scale, spk=-1):\n    global CURRENTLY_LOADED_MODEL  # pylint: disable=global-statement\n    if CURRENTLY_LOADED_MODEL != \"matcha_ljspeech\":\n        global model, vocoder, denoiser  # pylint: disable=global-statement\n        model, vocoder, denoiser = load_model(\"matcha_ljspeech\", \"hifigan_T2_v1\")\n        CURRENTLY_LOADED_MODEL = \"matcha_ljspeech\"\n\n    phones, text, text_lengths = process_text_gradio(text)\n    audio, mel_spectrogram = synthesise_mel(text, text_lengths, n_timesteps, mel_temp, length_scale, spk)\n    return phones, audio, mel_spectrogram\n\n\ndef main():\n    description = \"\"\"# 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching\n    ### [Shivam Mehta](https://www.kth.se/profile/smehta), [Ruibo Tu](https://www.kth.se/profile/ruibo), [Jonas Beskow](https://www.kth.se/profile/beskow), [Éva Székely](https://www.kth.se/profile/szekely), and [Gustav Eje Henter](https://people.kth.se/~ghe/)\n    We propose 🍵 Matcha-TTS, a new approach to non-autoregressive neural TTS, that uses conditional flow matching (similar to rectified flows) to speed up ODE-based speech synthesis. Our method:\n\n\n    * Is probabilistic\n    * Has compact memory footprint\n    * Sounds highly natural\n    * Is very fast to synthesise from\n\n\n    Check out our [demo page](https://shivammehta25.github.io/Matcha-TTS). Read our [arXiv preprint for more details](https://arxiv.org/abs/2309.03199).\n    Code is available in our [GitHub repository](https://github.com/shivammehta25/Matcha-TTS), along with pre-trained models.\n\n    Cached examples are available at the bottom of the page.\n    \"\"\"\n\n    with gr.Blocks(title=\"🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching\") as demo:\n        processed_text = gr.State(value=None)\n        processed_text_len = gr.State(value=None)\n\n        with gr.Box():\n            with gr.Row():\n                gr.Markdown(description, scale=3)\n                with gr.Column():\n                    gr.Image(LOGO_URL, label=\"Matcha-TTS logo\", height=50, width=50, scale=1, show_label=False)\n                    html = '<br><iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/xmvJkz3bqw0?si=jN7ILyDsbPwJCGoa\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>'\n                    gr.HTML(html)\n\n        with gr.Box():\n            radio_options = list(RADIO_OPTIONS.keys())\n            model_type = gr.Radio(\n                radio_options, value=radio_options[0], label=\"Choose a Model\", interactive=True, container=False\n            )\n\n            with gr.Row():\n                gr.Markdown(\"# Text Input\")\n            with gr.Row():\n                text = gr.Textbox(value=\"\", lines=2, label=\"Text to synthesise\", scale=3)\n                spk_slider = gr.Slider(\n                    minimum=0, maximum=107, step=1, value=args.spk, label=\"Speaker ID\", interactive=True, scale=1\n                )\n\n            with gr.Row():\n                gr.Markdown(\"### Hyper parameters\")\n            with gr.Row():\n                n_timesteps = gr.Slider(\n                    label=\"Number of ODE steps\",\n                    minimum=1,\n                    maximum=100,\n                    step=1,\n                    value=10,\n                    interactive=True,\n                )\n                length_scale = gr.Slider(\n                    label=\"Length scale (Speaking rate)\",\n                    minimum=0.5,\n                    maximum=1.5,\n                    step=0.05,\n                    value=1.0,\n                    interactive=True,\n                )\n                mel_temp = gr.Slider(\n                    label=\"Sampling temperature\",\n                    minimum=0.00,\n                    maximum=2.001,\n                    step=0.16675,\n                    value=0.667,\n                    interactive=True,\n                )\n\n                synth_btn = gr.Button(\"Synthesise\")\n\n        with gr.Box():\n            with gr.Row():\n                gr.Markdown(\"### Phonetised text\")\n                phonetised_text = gr.Textbox(interactive=False, scale=10, label=\"Phonetised text\")\n\n        with gr.Box():\n            with gr.Row():\n                mel_spectrogram = gr.Image(interactive=False, label=\"mel spectrogram\")\n\n                # with gr.Row():\n                audio = gr.Audio(interactive=False, label=\"Audio\")\n\n        with gr.Row(visible=False) as example_row_lj_speech:\n            examples = gr.Examples(  # pylint: disable=unused-variable\n                examples=[\n                    [\n                        \"We propose Matcha-TTS, a new approach to non-autoregressive neural TTS, that uses conditional flow matching (similar to rectified flows) to speed up O D E-based speech synthesis.\",\n                        50,\n                        0.677,\n                        0.95,\n                    ],\n                    [\n                        \"The Secret Service believed that it was very doubtful that any President would ride regularly in a vehicle with a fixed top, even though transparent.\",\n                        2,\n                        0.677,\n                        0.95,\n                    ],\n                    [\n                        \"The Secret Service believed that it was very doubtful that any President would ride regularly in a vehicle with a fixed top, even though transparent.\",\n                        4,\n                        0.677,\n                        0.95,\n                    ],\n                    [\n                        \"The Secret Service believed that it was very doubtful that any President would ride regularly in a vehicle with a fixed top, even though transparent.\",\n                        10,\n                        0.677,\n                        0.95,\n                    ],\n                    [\n                        \"The Secret Service believed that it was very doubtful that any President would ride regularly in a vehicle with a fixed top, even though transparent.\",\n                        50,\n                        0.677,\n                        0.95,\n                    ],\n                    [\n                        \"The narrative of these events is based largely on the recollections of the participants.\",\n                        10,\n                        0.677,\n                        0.95,\n                    ],\n                    [\n                        \"The jury did not believe him, and the verdict was for the defendants.\",\n                        10,\n                        0.677,\n                        0.95,\n                    ],\n                ],\n                fn=ljspeech_example_cacher,\n                inputs=[text, n_timesteps, mel_temp, length_scale],\n                outputs=[phonetised_text, audio, mel_spectrogram],\n                cache_examples=True,\n            )\n\n        with gr.Row() as example_row_multispeaker:\n            multi_speaker_examples = gr.Examples(  # pylint: disable=unused-variable\n                examples=[\n                    [\n                        \"Hello everyone! I am speaker 0 and I am here to tell you that Matcha-TTS is amazing!\",\n                        10,\n                        0.677,\n                        0.85,\n                        0,\n                    ],\n                    [\n                        \"Hello everyone! I am speaker 16 and I am here to tell you that Matcha-TTS is amazing!\",\n                        10,\n                        0.677,\n                        0.85,\n                        16,\n                    ],\n                    [\n                        \"Hello everyone! I am speaker 44 and I am here to tell you that Matcha-TTS is amazing!\",\n                        50,\n                        0.677,\n                        0.85,\n                        44,\n                    ],\n                    [\n                        \"Hello everyone! I am speaker 45 and I am here to tell you that Matcha-TTS is amazing!\",\n                        50,\n                        0.677,\n                        0.85,\n                        45,\n                    ],\n                    [\n                        \"Hello everyone! I am speaker 58 and I am here to tell you that Matcha-TTS is amazing!\",\n                        4,\n                        0.677,\n                        0.85,\n                        58,\n                    ],\n                ],\n                fn=multispeaker_example_cacher,\n                inputs=[text, n_timesteps, mel_temp, length_scale, spk_slider],\n                outputs=[phonetised_text, audio, mel_spectrogram],\n                cache_examples=True,\n                label=\"Multi Speaker Examples\",\n            )\n\n        model_type.change(lambda x: gr.update(interactive=False), inputs=[synth_btn], outputs=[synth_btn]).then(\n            load_model_ui,\n            inputs=[model_type, text],\n            outputs=[text, synth_btn, spk_slider, example_row_lj_speech, example_row_multispeaker, length_scale],\n        )\n\n        synth_btn.click(\n            fn=process_text_gradio,\n            inputs=[\n                text,\n            ],\n            outputs=[phonetised_text, processed_text, processed_text_len],\n            api_name=\"matcha_tts\",\n            queue=True,\n        ).then(\n            fn=synthesise_mel,\n            inputs=[processed_text, processed_text_len, n_timesteps, mel_temp, length_scale, spk_slider],\n            outputs=[audio, mel_spectrogram],\n        )\n\n        demo.queue().launch(share=True)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/matcha/cli.py",
    "content": "import argparse\nimport datetime as dt\nimport os\nimport warnings\nfrom pathlib import Path\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport soundfile as sf\nimport torch\n\nfrom matcha.hifigan.config import v1\nfrom matcha.hifigan.denoiser import Denoiser\nfrom matcha.hifigan.env import AttrDict\nfrom matcha.hifigan.models import Generator as HiFiGAN\nfrom matcha.models.matcha_tts import MatchaTTS\nfrom matcha.text import sequence_to_text, text_to_sequence\nfrom matcha.utils.utils import assert_model_downloaded, get_user_data_dir, intersperse\n\nMATCHA_URLS = {\n    \"matcha_ljspeech\": \"https://github.com/shivammehta25/Matcha-TTS-checkpoints/releases/download/v1.0/matcha_ljspeech.ckpt\",\n    \"matcha_vctk\": \"https://github.com/shivammehta25/Matcha-TTS-checkpoints/releases/download/v1.0/matcha_vctk.ckpt\",\n}\n\nVOCODER_URLS = {\n    \"hifigan_T2_v1\": \"https://github.com/shivammehta25/Matcha-TTS-checkpoints/releases/download/v1.0/generator_v1\",  # Old url: https://drive.google.com/file/d/14NENd4equCBLyyCSke114Mv6YR_j_uFs/view?usp=drive_link\n    \"hifigan_univ_v1\": \"https://github.com/shivammehta25/Matcha-TTS-checkpoints/releases/download/v1.0/g_02500000\",  # Old url: https://drive.google.com/file/d/1qpgI41wNXFcH-iKq1Y42JlBC9j0je8PW/view?usp=drive_link\n}\n\nMULTISPEAKER_MODEL = {\n    \"matcha_vctk\": {\"vocoder\": \"hifigan_univ_v1\", \"speaking_rate\": 0.85, \"spk\": 0, \"spk_range\": (0, 107)}\n}\n\nSINGLESPEAKER_MODEL = {\"matcha_ljspeech\": {\"vocoder\": \"hifigan_T2_v1\", \"speaking_rate\": 0.95, \"spk\": None}}\n\n\ndef plot_spectrogram_to_numpy(spectrogram, filename):\n    fig, ax = plt.subplots(figsize=(12, 3))\n    im = ax.imshow(spectrogram, aspect=\"auto\", origin=\"lower\", interpolation=\"none\")\n    plt.colorbar(im, ax=ax)\n    plt.xlabel(\"Frames\")\n    plt.ylabel(\"Channels\")\n    plt.title(\"Synthesised Mel-Spectrogram\")\n    fig.canvas.draw()\n    plt.savefig(filename)\n\n\ndef process_text(i: int, text: str, device: torch.device):\n    print(f\"[{i}] - Input text: {text}\")\n    x = torch.tensor(\n        intersperse(text_to_sequence(text, [\"english_cleaners2\"])[0], 0),\n        dtype=torch.long,\n        device=device,\n    )[None]\n    x_lengths = torch.tensor([x.shape[-1]], dtype=torch.long, device=device)\n    x_phones = sequence_to_text(x.squeeze(0).tolist())\n    print(f\"[{i}] - Phonetised text: {x_phones[1::2]}\")\n\n    return {\"x_orig\": text, \"x\": x, \"x_lengths\": x_lengths, \"x_phones\": x_phones}\n\n\ndef get_texts(args):\n    if args.text:\n        texts = [args.text]\n    else:\n        with open(args.file, encoding=\"utf-8\") as f:\n            texts = f.readlines()\n    return texts\n\n\ndef assert_required_models_available(args):\n    save_dir = get_user_data_dir()\n    if not hasattr(args, \"checkpoint_path\") and args.checkpoint_path is None:\n        model_path = args.checkpoint_path\n    else:\n        model_path = save_dir / f\"{args.model}.ckpt\"\n        assert_model_downloaded(model_path, MATCHA_URLS[args.model])\n\n    vocoder_path = save_dir / f\"{args.vocoder}\"\n    assert_model_downloaded(vocoder_path, VOCODER_URLS[args.vocoder])\n    return {\"matcha\": model_path, \"vocoder\": vocoder_path}\n\n\ndef load_hifigan(checkpoint_path, device):\n    h = AttrDict(v1)\n    hifigan = HiFiGAN(h).to(device)\n    hifigan.load_state_dict(torch.load(checkpoint_path, map_location=device)[\"generator\"])\n    _ = hifigan.eval()\n    hifigan.remove_weight_norm()\n    return hifigan\n\n\ndef load_vocoder(vocoder_name, checkpoint_path, device):\n    print(f\"[!] Loading {vocoder_name}!\")\n    vocoder = None\n    if vocoder_name in (\"hifigan_T2_v1\", \"hifigan_univ_v1\"):\n        vocoder = load_hifigan(checkpoint_path, device)\n    else:\n        raise NotImplementedError(\n            f\"Vocoder {vocoder_name} not implemented! define a load_<<vocoder_name>> method for it\"\n        )\n\n    denoiser = Denoiser(vocoder, mode=\"zeros\")\n    print(f\"[+] {vocoder_name} loaded!\")\n    return vocoder, denoiser\n\n\ndef load_matcha(model_name, checkpoint_path, device):\n    print(f\"[!] Loading {model_name}!\")\n    model = MatchaTTS.load_from_checkpoint(checkpoint_path, map_location=device)\n    _ = model.eval()\n\n    print(f\"[+] {model_name} loaded!\")\n    return model\n\n\ndef to_waveform(mel, vocoder, denoiser=None):\n    audio = vocoder(mel).clamp(-1, 1)\n    if denoiser is not None:\n        audio = denoiser(audio.squeeze(), strength=0.00025).cpu().squeeze()\n\n    return audio.cpu().squeeze()\n\n\ndef save_to_folder(filename: str, output: dict, folder: str):\n    folder = Path(folder)\n    folder.mkdir(exist_ok=True, parents=True)\n    plot_spectrogram_to_numpy(np.array(output[\"mel\"].squeeze().float().cpu()), f\"{filename}.png\")\n    np.save(folder / f\"{filename}\", output[\"mel\"].cpu().numpy())\n    sf.write(folder / f\"{filename}.wav\", output[\"waveform\"], 22050, \"PCM_24\")\n    return folder.resolve() / f\"{filename}.wav\"\n\n\ndef validate_args(args):\n    assert (\n        args.text or args.file\n    ), \"Either text or file must be provided Matcha-T(ea)TTS need sometext to whisk the waveforms.\"\n    assert args.temperature >= 0, \"Sampling temperature cannot be negative\"\n    assert args.steps > 0, \"Number of ODE steps must be greater than 0\"\n\n    if args.checkpoint_path is None:\n        # When using pretrained models\n        if args.model in SINGLESPEAKER_MODEL:\n            args = validate_args_for_single_speaker_model(args)\n\n        if args.model in MULTISPEAKER_MODEL:\n            args = validate_args_for_multispeaker_model(args)\n    else:\n        # When using a custom model\n        if args.vocoder != \"hifigan_univ_v1\":\n            warn_ = \"[-] Using custom model checkpoint! I would suggest passing --vocoder hifigan_univ_v1, unless the custom model is trained on LJ Speech.\"\n            warnings.warn(warn_, UserWarning)\n        if args.speaking_rate is None:\n            args.speaking_rate = 1.0\n\n    if args.batched:\n        assert args.batch_size > 0, \"Batch size must be greater than 0\"\n    assert args.speaking_rate > 0, \"Speaking rate must be greater than 0\"\n\n    return args\n\n\ndef validate_args_for_multispeaker_model(args):\n    if args.vocoder is not None:\n        if args.vocoder != MULTISPEAKER_MODEL[args.model][\"vocoder\"]:\n            warn_ = f\"[-] Using {args.model} model! I would suggest passing --vocoder {MULTISPEAKER_MODEL[args.model]['vocoder']}\"\n            warnings.warn(warn_, UserWarning)\n    else:\n        args.vocoder = MULTISPEAKER_MODEL[args.model][\"vocoder\"]\n\n    if args.speaking_rate is None:\n        args.speaking_rate = MULTISPEAKER_MODEL[args.model][\"speaking_rate\"]\n\n    spk_range = MULTISPEAKER_MODEL[args.model][\"spk_range\"]\n    if args.spk is not None:\n        assert (\n            args.spk >= spk_range[0] and args.spk <= spk_range[-1]\n        ), f\"Speaker ID must be between {spk_range} for this model.\"\n    else:\n        available_spk_id = MULTISPEAKER_MODEL[args.model][\"spk\"]\n        warn_ = f\"[!] Speaker ID not provided! Using speaker ID {available_spk_id}\"\n        warnings.warn(warn_, UserWarning)\n        args.spk = available_spk_id\n\n    return args\n\n\ndef validate_args_for_single_speaker_model(args):\n    if args.vocoder is not None:\n        if args.vocoder != SINGLESPEAKER_MODEL[args.model][\"vocoder\"]:\n            warn_ = f\"[-] Using {args.model} model! I would suggest passing --vocoder {SINGLESPEAKER_MODEL[args.model]['vocoder']}\"\n            warnings.warn(warn_, UserWarning)\n    else:\n        args.vocoder = SINGLESPEAKER_MODEL[args.model][\"vocoder\"]\n\n    if args.speaking_rate is None:\n        args.speaking_rate = SINGLESPEAKER_MODEL[args.model][\"speaking_rate\"]\n\n    if args.spk != SINGLESPEAKER_MODEL[args.model][\"spk\"]:\n        warn_ = f\"[-] Ignoring speaker id {args.spk} for {args.model}\"\n        warnings.warn(warn_, UserWarning)\n        args.spk = SINGLESPEAKER_MODEL[args.model][\"spk\"]\n\n    return args\n\n\n@torch.inference_mode()\ndef cli():\n    parser = argparse.ArgumentParser(\n        description=\" 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching\"\n    )\n    parser.add_argument(\n        \"--model\",\n        type=str,\n        default=\"matcha_ljspeech\",\n        help=\"Model to use\",\n        choices=MATCHA_URLS.keys(),\n    )\n\n    parser.add_argument(\n        \"--checkpoint_path\",\n        type=str,\n        default=None,\n        help=\"Path to the custom model checkpoint\",\n    )\n\n    parser.add_argument(\n        \"--vocoder\",\n        type=str,\n        default=None,\n        help=\"Vocoder to use (default: will use the one suggested with the pretrained model))\",\n        choices=VOCODER_URLS.keys(),\n    )\n    parser.add_argument(\"--text\", type=str, default=None, help=\"Text to synthesize\")\n    parser.add_argument(\"--file\", type=str, default=None, help=\"Text file to synthesize\")\n    parser.add_argument(\"--spk\", type=int, default=None, help=\"Speaker ID\")\n    parser.add_argument(\n        \"--temperature\",\n        type=float,\n        default=0.667,\n        help=\"Variance of the x0 noise (default: 0.667)\",\n    )\n    parser.add_argument(\n        \"--speaking_rate\",\n        type=float,\n        default=None,\n        help=\"change the speaking rate, a higher value means slower speaking rate (default: 1.0)\",\n    )\n    parser.add_argument(\"--steps\", type=int, default=10, help=\"Number of ODE steps  (default: 10)\")\n    parser.add_argument(\"--cpu\", action=\"store_true\", help=\"Use CPU for inference (default: use GPU if available)\")\n    parser.add_argument(\n        \"--denoiser_strength\",\n        type=float,\n        default=0.00025,\n        help=\"Strength of the vocoder bias denoiser (default: 0.00025)\",\n    )\n    parser.add_argument(\n        \"--output_folder\",\n        type=str,\n        default=os.getcwd(),\n        help=\"Output folder to save results (default: current dir)\",\n    )\n    parser.add_argument(\"--batched\", action=\"store_true\", help=\"Batched inference (default: False)\")\n    parser.add_argument(\n        \"--batch_size\", type=int, default=32, help=\"Batch size only useful when --batched (default: 32)\"\n    )\n\n    args = parser.parse_args()\n\n    args = validate_args(args)\n    device = get_device(args)\n    print_config(args)\n    paths = assert_required_models_available(args)\n\n    if args.checkpoint_path is not None:\n        print(f\"[🍵] Loading custom model from {args.checkpoint_path}\")\n        paths[\"matcha\"] = args.checkpoint_path\n        args.model = \"custom_model\"\n\n    model = load_matcha(args.model, paths[\"matcha\"], device)\n    vocoder, denoiser = load_vocoder(args.vocoder, paths[\"vocoder\"], device)\n\n    texts = get_texts(args)\n\n    spk = torch.tensor([args.spk], device=device, dtype=torch.long) if args.spk is not None else None\n    if len(texts) == 1 or not args.batched:\n        unbatched_synthesis(args, device, model, vocoder, denoiser, texts, spk)\n    else:\n        batched_synthesis(args, device, model, vocoder, denoiser, texts, spk)\n\n\nclass BatchedSynthesisDataset(torch.utils.data.Dataset):\n    def __init__(self, processed_texts):\n        self.processed_texts = processed_texts\n\n    def __len__(self):\n        return len(self.processed_texts)\n\n    def __getitem__(self, idx):\n        return self.processed_texts[idx]\n\n\ndef batched_collate_fn(batch):\n    x = []\n    x_lengths = []\n\n    for b in batch:\n        x.append(b[\"x\"].squeeze(0))\n        x_lengths.append(b[\"x_lengths\"])\n\n    x = torch.nn.utils.rnn.pad_sequence(x, batch_first=True)\n    x_lengths = torch.concat(x_lengths, dim=0)\n    return {\"x\": x, \"x_lengths\": x_lengths}\n\n\ndef batched_synthesis(args, device, model, vocoder, denoiser, texts, spk):\n    total_rtf = []\n    total_rtf_w = []\n    processed_text = [process_text(i, text, \"cpu\") for i, text in enumerate(texts)]\n    dataloader = torch.utils.data.DataLoader(\n        BatchedSynthesisDataset(processed_text),\n        batch_size=args.batch_size,\n        collate_fn=batched_collate_fn,\n        num_workers=8,\n    )\n    for i, batch in enumerate(dataloader):\n        i = i + 1\n        start_t = dt.datetime.now()\n        b = batch[\"x\"].shape[0]\n        output = model.synthesise(\n            batch[\"x\"].to(device),\n            batch[\"x_lengths\"].to(device),\n            n_timesteps=args.steps,\n            temperature=args.temperature,\n            spks=spk.expand(b) if spk is not None else spk,\n            length_scale=args.speaking_rate,\n        )\n\n        output[\"waveform\"] = to_waveform(output[\"mel\"], vocoder, denoiser)\n        t = (dt.datetime.now() - start_t).total_seconds()\n        rtf_w = t * 22050 / (output[\"waveform\"].shape[-1])\n        print(f\"[🍵-Batch: {i}] Matcha-TTS RTF: {output['rtf']:.4f}\")\n        print(f\"[🍵-Batch: {i}] Matcha-TTS + VOCODER RTF: {rtf_w:.4f}\")\n        total_rtf.append(output[\"rtf\"])\n        total_rtf_w.append(rtf_w)\n        for j in range(output[\"mel\"].shape[0]):\n            base_name = f\"utterance_{j:03d}_speaker_{args.spk:03d}\" if args.spk is not None else f\"utterance_{j:03d}\"\n            length = output[\"mel_lengths\"][j]\n            new_dict = {\"mel\": output[\"mel\"][j][:, :length], \"waveform\": output[\"waveform\"][j][: length * 256]}\n            location = save_to_folder(base_name, new_dict, args.output_folder)\n            print(f\"[🍵-{j}] Waveform saved: {location}\")\n\n    print(\"\".join([\"=\"] * 100))\n    print(f\"[🍵] Average Matcha-TTS RTF: {np.mean(total_rtf):.4f} ± {np.std(total_rtf)}\")\n    print(f\"[🍵] Average Matcha-TTS + VOCODER RTF: {np.mean(total_rtf_w):.4f} ± {np.std(total_rtf_w)}\")\n    print(\"[🍵] Enjoy the freshly whisked 🍵 Matcha-TTS!\")\n\n\ndef unbatched_synthesis(args, device, model, vocoder, denoiser, texts, spk):\n    total_rtf = []\n    total_rtf_w = []\n    for i, text in enumerate(texts):\n        i = i + 1\n        base_name = f\"utterance_{i:03d}_speaker_{args.spk:03d}\" if args.spk is not None else f\"utterance_{i:03d}\"\n\n        print(\"\".join([\"=\"] * 100))\n        text = text.strip()\n        text_processed = process_text(i, text, device)\n\n        print(f\"[🍵] Whisking Matcha-T(ea)TS for: {i}\")\n        start_t = dt.datetime.now()\n        output = model.synthesise(\n            text_processed[\"x\"],\n            text_processed[\"x_lengths\"],\n            n_timesteps=args.steps,\n            temperature=args.temperature,\n            spks=spk,\n            length_scale=args.speaking_rate,\n        )\n        output[\"waveform\"] = to_waveform(output[\"mel\"], vocoder, denoiser)\n        # RTF with HiFiGAN\n        t = (dt.datetime.now() - start_t).total_seconds()\n        rtf_w = t * 22050 / (output[\"waveform\"].shape[-1])\n        print(f\"[🍵-{i}] Matcha-TTS RTF: {output['rtf']:.4f}\")\n        print(f\"[🍵-{i}] Matcha-TTS + VOCODER RTF: {rtf_w:.4f}\")\n        total_rtf.append(output[\"rtf\"])\n        total_rtf_w.append(rtf_w)\n\n        location = save_to_folder(base_name, output, args.output_folder)\n        print(f\"[+] Waveform saved: {location}\")\n\n    print(\"\".join([\"=\"] * 100))\n    print(f\"[🍵] Average Matcha-TTS RTF: {np.mean(total_rtf):.4f} ± {np.std(total_rtf)}\")\n    print(f\"[🍵] Average Matcha-TTS + VOCODER RTF: {np.mean(total_rtf_w):.4f} ± {np.std(total_rtf_w)}\")\n    print(\"[🍵] Enjoy the freshly whisked 🍵 Matcha-TTS!\")\n\n\ndef print_config(args):\n    print(\"[!] Configurations: \")\n    print(f\"\\t- Model: {args.model}\")\n    print(f\"\\t- Vocoder: {args.vocoder}\")\n    print(f\"\\t- Temperature: {args.temperature}\")\n    print(f\"\\t- Speaking rate: {args.speaking_rate}\")\n    print(f\"\\t- Number of ODE steps: {args.steps}\")\n    print(f\"\\t- Speaker: {args.spk}\")\n\n\ndef get_device(args):\n    if torch.cuda.is_available() and not args.cpu:\n        print(\"[+] GPU Available! Using GPU\")\n        device = torch.device(\"cuda\")\n    else:\n        print(\"[-] GPU not available or forced CPU run! Using CPU\")\n        device = torch.device(\"cpu\")\n    return device\n\n\nif __name__ == \"__main__\":\n    cli()\n"
  },
  {
    "path": "xinference/thirdparty/matcha/data/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/matcha/data/components/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/matcha/data/text_mel_datamodule.py",
    "content": "import random\nfrom pathlib import Path\nfrom typing import Any, Dict, Optional\n\nimport numpy as np\nimport torch\nimport torchaudio as ta\nfrom lightning import LightningDataModule\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom matcha.text import text_to_sequence\nfrom matcha.utils.audio import mel_spectrogram\nfrom matcha.utils.model import fix_len_compatibility, normalize\nfrom matcha.utils.utils import intersperse\n\n\ndef parse_filelist(filelist_path, split_char=\"|\"):\n    with open(filelist_path, encoding=\"utf-8\") as f:\n        filepaths_and_text = [line.strip().split(split_char) for line in f]\n    return filepaths_and_text\n\n\nclass TextMelDataModule(LightningDataModule):\n    def __init__(  # pylint: disable=unused-argument\n        self,\n        name,\n        train_filelist_path,\n        valid_filelist_path,\n        batch_size,\n        num_workers,\n        pin_memory,\n        cleaners,\n        add_blank,\n        n_spks,\n        n_fft,\n        n_feats,\n        sample_rate,\n        hop_length,\n        win_length,\n        f_min,\n        f_max,\n        data_statistics,\n        seed,\n        load_durations,\n    ):\n        super().__init__()\n\n        # this line allows to access init params with 'self.hparams' attribute\n        # also ensures init params will be stored in ckpt\n        self.save_hyperparameters(logger=False)\n\n    def setup(self, stage: Optional[str] = None):  # pylint: disable=unused-argument\n        \"\"\"Load data. Set variables: `self.data_train`, `self.data_val`, `self.data_test`.\n\n        This method is called by lightning with both `trainer.fit()` and `trainer.test()`, so be\n        careful not to execute things like random split twice!\n        \"\"\"\n        # load and split datasets only if not loaded already\n\n        self.trainset = TextMelDataset(  # pylint: disable=attribute-defined-outside-init\n            self.hparams.train_filelist_path,\n            self.hparams.n_spks,\n            self.hparams.cleaners,\n            self.hparams.add_blank,\n            self.hparams.n_fft,\n            self.hparams.n_feats,\n            self.hparams.sample_rate,\n            self.hparams.hop_length,\n            self.hparams.win_length,\n            self.hparams.f_min,\n            self.hparams.f_max,\n            self.hparams.data_statistics,\n            self.hparams.seed,\n            self.hparams.load_durations,\n        )\n        self.validset = TextMelDataset(  # pylint: disable=attribute-defined-outside-init\n            self.hparams.valid_filelist_path,\n            self.hparams.n_spks,\n            self.hparams.cleaners,\n            self.hparams.add_blank,\n            self.hparams.n_fft,\n            self.hparams.n_feats,\n            self.hparams.sample_rate,\n            self.hparams.hop_length,\n            self.hparams.win_length,\n            self.hparams.f_min,\n            self.hparams.f_max,\n            self.hparams.data_statistics,\n            self.hparams.seed,\n            self.hparams.load_durations,\n        )\n\n    def train_dataloader(self):\n        return DataLoader(\n            dataset=self.trainset,\n            batch_size=self.hparams.batch_size,\n            num_workers=self.hparams.num_workers,\n            pin_memory=self.hparams.pin_memory,\n            shuffle=True,\n            collate_fn=TextMelBatchCollate(self.hparams.n_spks),\n        )\n\n    def val_dataloader(self):\n        return DataLoader(\n            dataset=self.validset,\n            batch_size=self.hparams.batch_size,\n            num_workers=self.hparams.num_workers,\n            pin_memory=self.hparams.pin_memory,\n            shuffle=False,\n            collate_fn=TextMelBatchCollate(self.hparams.n_spks),\n        )\n\n    def teardown(self, stage: Optional[str] = None):\n        \"\"\"Clean up after fit or test.\"\"\"\n        pass  # pylint: disable=unnecessary-pass\n\n    def state_dict(self):\n        \"\"\"Extra things to save to checkpoint.\"\"\"\n        return {}\n\n    def load_state_dict(self, state_dict: Dict[str, Any]):\n        \"\"\"Things to do when loading checkpoint.\"\"\"\n        pass  # pylint: disable=unnecessary-pass\n\n\nclass TextMelDataset(torch.utils.data.Dataset):\n    def __init__(\n        self,\n        filelist_path,\n        n_spks,\n        cleaners,\n        add_blank=True,\n        n_fft=1024,\n        n_mels=80,\n        sample_rate=22050,\n        hop_length=256,\n        win_length=1024,\n        f_min=0.0,\n        f_max=8000,\n        data_parameters=None,\n        seed=None,\n        load_durations=False,\n    ):\n        self.filepaths_and_text = parse_filelist(filelist_path)\n        self.n_spks = n_spks\n        self.cleaners = cleaners\n        self.add_blank = add_blank\n        self.n_fft = n_fft\n        self.n_mels = n_mels\n        self.sample_rate = sample_rate\n        self.hop_length = hop_length\n        self.win_length = win_length\n        self.f_min = f_min\n        self.f_max = f_max\n        self.load_durations = load_durations\n\n        if data_parameters is not None:\n            self.data_parameters = data_parameters\n        else:\n            self.data_parameters = {\"mel_mean\": 0, \"mel_std\": 1}\n        random.seed(seed)\n        random.shuffle(self.filepaths_and_text)\n\n    def get_datapoint(self, filepath_and_text):\n        if self.n_spks > 1:\n            filepath, spk, text = (\n                filepath_and_text[0],\n                int(filepath_and_text[1]),\n                filepath_and_text[2],\n            )\n        else:\n            filepath, text = filepath_and_text[0], filepath_and_text[1]\n            spk = None\n\n        text, cleaned_text = self.get_text(text, add_blank=self.add_blank)\n        mel = self.get_mel(filepath)\n\n        durations = self.get_durations(filepath, text) if self.load_durations else None\n\n        return {\"x\": text, \"y\": mel, \"spk\": spk, \"filepath\": filepath, \"x_text\": cleaned_text, \"durations\": durations}\n\n    def get_durations(self, filepath, text):\n        filepath = Path(filepath)\n        data_dir, name = filepath.parent.parent, filepath.stem\n\n        try:\n            dur_loc = data_dir / \"durations\" / f\"{name}.npy\"\n            durs = torch.from_numpy(np.load(dur_loc).astype(int))\n\n        except FileNotFoundError as e:\n            raise FileNotFoundError(\n                f\"Tried loading the durations but durations didn't exist at {dur_loc}, make sure you've generate the durations first using: python matcha/utils/get_durations_from_trained_model.py \\n\"\n            ) from e\n\n        assert len(durs) == len(text), f\"Length of durations {len(durs)} and text {len(text)} do not match\"\n\n        return durs\n\n    def get_mel(self, filepath):\n        audio, sr = ta.load(filepath)\n        assert sr == self.sample_rate\n        mel = mel_spectrogram(\n            audio,\n            self.n_fft,\n            self.n_mels,\n            self.sample_rate,\n            self.hop_length,\n            self.win_length,\n            self.f_min,\n            self.f_max,\n            center=False,\n        ).squeeze()\n        mel = normalize(mel, self.data_parameters[\"mel_mean\"], self.data_parameters[\"mel_std\"])\n        return mel\n\n    def get_text(self, text, add_blank=True):\n        text_norm, cleaned_text = text_to_sequence(text, self.cleaners)\n        if self.add_blank:\n            text_norm = intersperse(text_norm, 0)\n        text_norm = torch.IntTensor(text_norm)\n        return text_norm, cleaned_text\n\n    def __getitem__(self, index):\n        datapoint = self.get_datapoint(self.filepaths_and_text[index])\n        return datapoint\n\n    def __len__(self):\n        return len(self.filepaths_and_text)\n\n\nclass TextMelBatchCollate:\n    def __init__(self, n_spks):\n        self.n_spks = n_spks\n\n    def __call__(self, batch):\n        B = len(batch)\n        y_max_length = max([item[\"y\"].shape[-1] for item in batch])\n        y_max_length = fix_len_compatibility(y_max_length)\n        x_max_length = max([item[\"x\"].shape[-1] for item in batch])\n        n_feats = batch[0][\"y\"].shape[-2]\n\n        y = torch.zeros((B, n_feats, y_max_length), dtype=torch.float32)\n        x = torch.zeros((B, x_max_length), dtype=torch.long)\n        durations = torch.zeros((B, x_max_length), dtype=torch.long)\n\n        y_lengths, x_lengths = [], []\n        spks = []\n        filepaths, x_texts = [], []\n        for i, item in enumerate(batch):\n            y_, x_ = item[\"y\"], item[\"x\"]\n            y_lengths.append(y_.shape[-1])\n            x_lengths.append(x_.shape[-1])\n            y[i, :, : y_.shape[-1]] = y_\n            x[i, : x_.shape[-1]] = x_\n            spks.append(item[\"spk\"])\n            filepaths.append(item[\"filepath\"])\n            x_texts.append(item[\"x_text\"])\n            if item[\"durations\"] is not None:\n                durations[i, : item[\"durations\"].shape[-1]] = item[\"durations\"]\n\n        y_lengths = torch.tensor(y_lengths, dtype=torch.long)\n        x_lengths = torch.tensor(x_lengths, dtype=torch.long)\n        spks = torch.tensor(spks, dtype=torch.long) if self.n_spks > 1 else None\n\n        return {\n            \"x\": x,\n            \"x_lengths\": x_lengths,\n            \"y\": y,\n            \"y_lengths\": y_lengths,\n            \"spks\": spks,\n            \"filepaths\": filepaths,\n            \"x_texts\": x_texts,\n            \"durations\": durations if not torch.eq(durations, 0).all() else None,\n        }\n"
  },
  {
    "path": "xinference/thirdparty/matcha/hifigan/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 Jungil Kong\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "xinference/thirdparty/matcha/hifigan/README.md",
    "content": "# HiFi-GAN: Generative Adversarial Networks for Efficient and High Fidelity Speech Synthesis\n\n### Jungil Kong, Jaehyeon Kim, Jaekyoung Bae\n\nIn our [paper](https://arxiv.org/abs/2010.05646),\nwe proposed HiFi-GAN: a GAN-based model capable of generating high fidelity speech efficiently.<br/>\nWe provide our implementation and pretrained models as open source in this repository.\n\n**Abstract :**\nSeveral recent work on speech synthesis have employed generative adversarial networks (GANs) to produce raw waveforms.\nAlthough such methods improve the sampling efficiency and memory usage,\ntheir sample quality has not yet reached that of autoregressive and flow-based generative models.\nIn this work, we propose HiFi-GAN, which achieves both efficient and high-fidelity speech synthesis.\nAs speech audio consists of sinusoidal signals with various periods,\nwe demonstrate that modeling periodic patterns of an audio is crucial for enhancing sample quality.\nA subjective human evaluation (mean opinion score, MOS) of a single speaker dataset indicates that our proposed method\ndemonstrates similarity to human quality while generating 22.05 kHz high-fidelity audio 167.9 times faster than\nreal-time on a single V100 GPU. We further show the generality of HiFi-GAN to the mel-spectrogram inversion of unseen\nspeakers and end-to-end speech synthesis. Finally, a small footprint version of HiFi-GAN generates samples 13.4 times\nfaster than real-time on CPU with comparable quality to an autoregressive counterpart.\n\nVisit our [demo website](https://jik876.github.io/hifi-gan-demo/) for audio samples.\n\n## Pre-requisites\n\n1. Python >= 3.6\n2. Clone this repository.\n3. Install python requirements. Please refer [requirements.txt](requirements.txt)\n4. Download and extract the [LJ Speech dataset](https://keithito.com/LJ-Speech-Dataset/).\n   And move all wav files to `LJSpeech-1.1/wavs`\n\n## Training\n\n```\npython train.py --config config_v1.json\n```\n\nTo train V2 or V3 Generator, replace `config_v1.json` with `config_v2.json` or `config_v3.json`.<br>\nCheckpoints and copy of the configuration file are saved in `cp_hifigan` directory by default.<br>\nYou can change the path by adding `--checkpoint_path` option.\n\nValidation loss during training with V1 generator.<br>\n![validation loss](./validation_loss.png)\n\n## Pretrained Model\n\nYou can also use pretrained models we provide.<br/>\n[Download pretrained models](https://drive.google.com/drive/folders/1-eEYTB5Av9jNql0WGBlRoi-WH2J7bp5Y?usp=sharing)<br/>\nDetails of each folder are as in follows:\n\n| Folder Name  | Generator | Dataset   | Fine-Tuned                                             |\n| ------------ | --------- | --------- | ------------------------------------------------------ |\n| LJ_V1        | V1        | LJSpeech  | No                                                     |\n| LJ_V2        | V2        | LJSpeech  | No                                                     |\n| LJ_V3        | V3        | LJSpeech  | No                                                     |\n| LJ_FT_T2_V1  | V1        | LJSpeech  | Yes ([Tacotron2](https://github.com/NVIDIA/tacotron2)) |\n| LJ_FT_T2_V2  | V2        | LJSpeech  | Yes ([Tacotron2](https://github.com/NVIDIA/tacotron2)) |\n| LJ_FT_T2_V3  | V3        | LJSpeech  | Yes ([Tacotron2](https://github.com/NVIDIA/tacotron2)) |\n| VCTK_V1      | V1        | VCTK      | No                                                     |\n| VCTK_V2      | V2        | VCTK      | No                                                     |\n| VCTK_V3      | V3        | VCTK      | No                                                     |\n| UNIVERSAL_V1 | V1        | Universal | No                                                     |\n\nWe provide the universal model with discriminator weights that can be used as a base for transfer learning to other datasets.\n\n## Fine-Tuning\n\n1. Generate mel-spectrograms in numpy format using [Tacotron2](https://github.com/NVIDIA/tacotron2) with teacher-forcing.<br/>\n   The file name of the generated mel-spectrogram should match the audio file and the extension should be `.npy`.<br/>\n   Example:\n   `   Audio File : LJ001-0001.wav\nMel-Spectrogram File : LJ001-0001.npy`\n2. Create `ft_dataset` folder and copy the generated mel-spectrogram files into it.<br/>\n3. Run the following command.\n   ```\n   python train.py --fine_tuning True --config config_v1.json\n   ```\n   For other command line options, please refer to the training section.\n\n## Inference from wav file\n\n1. Make `test_files` directory and copy wav files into the directory.\n2. Run the following command.\n   `   python inference.py --checkpoint_file [generator checkpoint file path]`\n   Generated wav files are saved in `generated_files` by default.<br>\n   You can change the path by adding `--output_dir` option.\n\n## Inference for end-to-end speech synthesis\n\n1. Make `test_mel_files` directory and copy generated mel-spectrogram files into the directory.<br>\n   You can generate mel-spectrograms using [Tacotron2](https://github.com/NVIDIA/tacotron2),\n   [Glow-TTS](https://github.com/jaywalnut310/glow-tts) and so forth.\n2. Run the following command.\n   `   python inference_e2e.py --checkpoint_file [generator checkpoint file path]`\n   Generated wav files are saved in `generated_files_from_mel` by default.<br>\n   You can change the path by adding `--output_dir` option.\n\n## Acknowledgements\n\nWe referred to [WaveGlow](https://github.com/NVIDIA/waveglow), [MelGAN](https://github.com/descriptinc/melgan-neurips)\nand [Tacotron2](https://github.com/NVIDIA/tacotron2) to implement this.\n"
  },
  {
    "path": "xinference/thirdparty/matcha/hifigan/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/matcha/hifigan/config.py",
    "content": "v1 = {\n    \"resblock\": \"1\",\n    \"num_gpus\": 0,\n    \"batch_size\": 16,\n    \"learning_rate\": 0.0004,\n    \"adam_b1\": 0.8,\n    \"adam_b2\": 0.99,\n    \"lr_decay\": 0.999,\n    \"seed\": 1234,\n    \"upsample_rates\": [8, 8, 2, 2],\n    \"upsample_kernel_sizes\": [16, 16, 4, 4],\n    \"upsample_initial_channel\": 512,\n    \"resblock_kernel_sizes\": [3, 7, 11],\n    \"resblock_dilation_sizes\": [[1, 3, 5], [1, 3, 5], [1, 3, 5]],\n    \"resblock_initial_channel\": 256,\n    \"segment_size\": 8192,\n    \"num_mels\": 80,\n    \"num_freq\": 1025,\n    \"n_fft\": 1024,\n    \"hop_size\": 256,\n    \"win_size\": 1024,\n    \"sampling_rate\": 22050,\n    \"fmin\": 0,\n    \"fmax\": 8000,\n    \"fmax_loss\": None,\n    \"num_workers\": 4,\n    \"dist_config\": {\"dist_backend\": \"nccl\", \"dist_url\": \"tcp://localhost:54321\", \"world_size\": 1},\n}\n"
  },
  {
    "path": "xinference/thirdparty/matcha/hifigan/denoiser.py",
    "content": "# Code modified from Rafael Valle's implementation https://github.com/NVIDIA/waveglow/blob/5bc2a53e20b3b533362f974cfa1ea0267ae1c2b1/denoiser.py\n\n\"\"\"Waveglow style denoiser can be used to remove the artifacts from the HiFiGAN generated audio.\"\"\"\nimport torch\n\n\nclass Denoiser(torch.nn.Module):\n    \"\"\"Removes model bias from audio produced with waveglow\"\"\"\n\n    def __init__(self, vocoder, filter_length=1024, n_overlap=4, win_length=1024, mode=\"zeros\"):\n        super().__init__()\n        self.filter_length = filter_length\n        self.hop_length = int(filter_length / n_overlap)\n        self.win_length = win_length\n\n        dtype, device = next(vocoder.parameters()).dtype, next(vocoder.parameters()).device\n        self.device = device\n        if mode == \"zeros\":\n            mel_input = torch.zeros((1, 80, 88), dtype=dtype, device=device)\n        elif mode == \"normal\":\n            mel_input = torch.randn((1, 80, 88), dtype=dtype, device=device)\n        else:\n            raise Exception(f\"Mode {mode} if not supported\")\n\n        def stft_fn(audio, n_fft, hop_length, win_length, window):\n            spec = torch.stft(\n                audio,\n                n_fft=n_fft,\n                hop_length=hop_length,\n                win_length=win_length,\n                window=window,\n                return_complex=True,\n            )\n            spec = torch.view_as_real(spec)\n            return torch.sqrt(spec.pow(2).sum(-1)), torch.atan2(spec[..., -1], spec[..., 0])\n\n        self.stft = lambda x: stft_fn(\n            audio=x,\n            n_fft=self.filter_length,\n            hop_length=self.hop_length,\n            win_length=self.win_length,\n            window=torch.hann_window(self.win_length, device=device),\n        )\n        self.istft = lambda x, y: torch.istft(\n            torch.complex(x * torch.cos(y), x * torch.sin(y)),\n            n_fft=self.filter_length,\n            hop_length=self.hop_length,\n            win_length=self.win_length,\n            window=torch.hann_window(self.win_length, device=device),\n        )\n\n        with torch.no_grad():\n            bias_audio = vocoder(mel_input).float().squeeze(0)\n            bias_spec, _ = self.stft(bias_audio)\n\n        self.register_buffer(\"bias_spec\", bias_spec[:, :, 0][:, :, None])\n\n    @torch.inference_mode()\n    def forward(self, audio, strength=0.0005):\n        audio_spec, audio_angles = self.stft(audio)\n        audio_spec_denoised = audio_spec - self.bias_spec.to(audio.device) * strength\n        audio_spec_denoised = torch.clamp(audio_spec_denoised, 0.0)\n        audio_denoised = self.istft(audio_spec_denoised, audio_angles)\n        return audio_denoised\n"
  },
  {
    "path": "xinference/thirdparty/matcha/hifigan/env.py",
    "content": "\"\"\" from https://github.com/jik876/hifi-gan \"\"\"\n\nimport os\nimport shutil\n\n\nclass AttrDict(dict):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.__dict__ = self\n\n\ndef build_env(config, config_name, path):\n    t_path = os.path.join(path, config_name)\n    if config != t_path:\n        os.makedirs(path, exist_ok=True)\n        shutil.copyfile(config, os.path.join(path, config_name))\n"
  },
  {
    "path": "xinference/thirdparty/matcha/hifigan/meldataset.py",
    "content": "\"\"\" from https://github.com/jik876/hifi-gan \"\"\"\n\nimport math\nimport os\nimport random\n\nimport numpy as np\nimport torch\nimport torch.utils.data\nfrom librosa.filters import mel as librosa_mel_fn\nfrom librosa.util import normalize\nfrom scipy.io.wavfile import read\n\nMAX_WAV_VALUE = 32768.0\n\n\ndef load_wav(full_path):\n    sampling_rate, data = read(full_path)\n    return data, sampling_rate\n\n\ndef dynamic_range_compression(x, C=1, clip_val=1e-5):\n    return np.log(np.clip(x, a_min=clip_val, a_max=None) * C)\n\n\ndef dynamic_range_decompression(x, C=1):\n    return np.exp(x) / C\n\n\ndef dynamic_range_compression_torch(x, C=1, clip_val=1e-5):\n    return torch.log(torch.clamp(x, min=clip_val) * C)\n\n\ndef dynamic_range_decompression_torch(x, C=1):\n    return torch.exp(x) / C\n\n\ndef spectral_normalize_torch(magnitudes):\n    output = dynamic_range_compression_torch(magnitudes)\n    return output\n\n\ndef spectral_de_normalize_torch(magnitudes):\n    output = dynamic_range_decompression_torch(magnitudes)\n    return output\n\n\nmel_basis = {}\nhann_window = {}\n\n\ndef mel_spectrogram(y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False):\n    if torch.min(y) < -1.0:\n        print(\"min value is \", torch.min(y))\n    if torch.max(y) > 1.0:\n        print(\"max value is \", torch.max(y))\n\n    global mel_basis, hann_window  # pylint: disable=global-statement\n    if fmax not in mel_basis:\n        mel = librosa_mel_fn(sampling_rate, n_fft, num_mels, fmin, fmax)\n        mel_basis[str(fmax) + \"_\" + str(y.device)] = torch.from_numpy(mel).float().to(y.device)\n        hann_window[str(y.device)] = torch.hann_window(win_size).to(y.device)\n\n    y = torch.nn.functional.pad(\n        y.unsqueeze(1), (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)), mode=\"reflect\"\n    )\n    y = y.squeeze(1)\n\n    spec = torch.view_as_real(\n        torch.stft(\n            y,\n            n_fft,\n            hop_length=hop_size,\n            win_length=win_size,\n            window=hann_window[str(y.device)],\n            center=center,\n            pad_mode=\"reflect\",\n            normalized=False,\n            onesided=True,\n            return_complex=True,\n        )\n    )\n\n    spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9))\n\n    spec = torch.matmul(mel_basis[str(fmax) + \"_\" + str(y.device)], spec)\n    spec = spectral_normalize_torch(spec)\n\n    return spec\n\n\ndef get_dataset_filelist(a):\n    with open(a.input_training_file, encoding=\"utf-8\") as fi:\n        training_files = [\n            os.path.join(a.input_wavs_dir, x.split(\"|\")[0] + \".wav\") for x in fi.read().split(\"\\n\") if len(x) > 0\n        ]\n\n    with open(a.input_validation_file, encoding=\"utf-8\") as fi:\n        validation_files = [\n            os.path.join(a.input_wavs_dir, x.split(\"|\")[0] + \".wav\") for x in fi.read().split(\"\\n\") if len(x) > 0\n        ]\n    return training_files, validation_files\n\n\nclass MelDataset(torch.utils.data.Dataset):\n    def __init__(\n        self,\n        training_files,\n        segment_size,\n        n_fft,\n        num_mels,\n        hop_size,\n        win_size,\n        sampling_rate,\n        fmin,\n        fmax,\n        split=True,\n        shuffle=True,\n        n_cache_reuse=1,\n        device=None,\n        fmax_loss=None,\n        fine_tuning=False,\n        base_mels_path=None,\n    ):\n        self.audio_files = training_files\n        random.seed(1234)\n        if shuffle:\n            random.shuffle(self.audio_files)\n        self.segment_size = segment_size\n        self.sampling_rate = sampling_rate\n        self.split = split\n        self.n_fft = n_fft\n        self.num_mels = num_mels\n        self.hop_size = hop_size\n        self.win_size = win_size\n        self.fmin = fmin\n        self.fmax = fmax\n        self.fmax_loss = fmax_loss\n        self.cached_wav = None\n        self.n_cache_reuse = n_cache_reuse\n        self._cache_ref_count = 0\n        self.device = device\n        self.fine_tuning = fine_tuning\n        self.base_mels_path = base_mels_path\n\n    def __getitem__(self, index):\n        filename = self.audio_files[index]\n        if self._cache_ref_count == 0:\n            audio, sampling_rate = load_wav(filename)\n            audio = audio / MAX_WAV_VALUE\n            if not self.fine_tuning:\n                audio = normalize(audio) * 0.95\n            self.cached_wav = audio\n            if sampling_rate != self.sampling_rate:\n                raise ValueError(f\"{sampling_rate} SR doesn't match target {self.sampling_rate} SR\")\n            self._cache_ref_count = self.n_cache_reuse\n        else:\n            audio = self.cached_wav\n            self._cache_ref_count -= 1\n\n        audio = torch.FloatTensor(audio)\n        audio = audio.unsqueeze(0)\n\n        if not self.fine_tuning:\n            if self.split:\n                if audio.size(1) >= self.segment_size:\n                    max_audio_start = audio.size(1) - self.segment_size\n                    audio_start = random.randint(0, max_audio_start)\n                    audio = audio[:, audio_start : audio_start + self.segment_size]\n                else:\n                    audio = torch.nn.functional.pad(audio, (0, self.segment_size - audio.size(1)), \"constant\")\n\n            mel = mel_spectrogram(\n                audio,\n                self.n_fft,\n                self.num_mels,\n                self.sampling_rate,\n                self.hop_size,\n                self.win_size,\n                self.fmin,\n                self.fmax,\n                center=False,\n            )\n        else:\n            mel = np.load(os.path.join(self.base_mels_path, os.path.splitext(os.path.split(filename)[-1])[0] + \".npy\"))\n            mel = torch.from_numpy(mel)\n\n            if len(mel.shape) < 3:\n                mel = mel.unsqueeze(0)\n\n            if self.split:\n                frames_per_seg = math.ceil(self.segment_size / self.hop_size)\n\n                if audio.size(1) >= self.segment_size:\n                    mel_start = random.randint(0, mel.size(2) - frames_per_seg - 1)\n                    mel = mel[:, :, mel_start : mel_start + frames_per_seg]\n                    audio = audio[:, mel_start * self.hop_size : (mel_start + frames_per_seg) * self.hop_size]\n                else:\n                    mel = torch.nn.functional.pad(mel, (0, frames_per_seg - mel.size(2)), \"constant\")\n                    audio = torch.nn.functional.pad(audio, (0, self.segment_size - audio.size(1)), \"constant\")\n\n        mel_loss = mel_spectrogram(\n            audio,\n            self.n_fft,\n            self.num_mels,\n            self.sampling_rate,\n            self.hop_size,\n            self.win_size,\n            self.fmin,\n            self.fmax_loss,\n            center=False,\n        )\n\n        return (mel.squeeze(), audio.squeeze(0), filename, mel_loss.squeeze())\n\n    def __len__(self):\n        return len(self.audio_files)\n"
  },
  {
    "path": "xinference/thirdparty/matcha/hifigan/models.py",
    "content": "\"\"\" from https://github.com/jik876/hifi-gan \"\"\"\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.nn import AvgPool1d, Conv1d, Conv2d, ConvTranspose1d\nfrom torch.nn.utils import remove_weight_norm, spectral_norm, weight_norm\n\nfrom .xutils import get_padding, init_weights\n\nLRELU_SLOPE = 0.1\n\n\nclass ResBlock1(torch.nn.Module):\n    def __init__(self, h, channels, kernel_size=3, dilation=(1, 3, 5)):\n        super().__init__()\n        self.h = h\n        self.convs1 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[0],\n                        padding=get_padding(kernel_size, dilation[0]),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[1],\n                        padding=get_padding(kernel_size, dilation[1]),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[2],\n                        padding=get_padding(kernel_size, dilation[2]),\n                    )\n                ),\n            ]\n        )\n        self.convs1.apply(init_weights)\n\n        self.convs2 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                ),\n            ]\n        )\n        self.convs2.apply(init_weights)\n\n    def forward(self, x):\n        for c1, c2 in zip(self.convs1, self.convs2):\n            xt = F.leaky_relu(x, LRELU_SLOPE)\n            xt = c1(xt)\n            xt = F.leaky_relu(xt, LRELU_SLOPE)\n            xt = c2(xt)\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n\nclass ResBlock2(torch.nn.Module):\n    def __init__(self, h, channels, kernel_size=3, dilation=(1, 3)):\n        super().__init__()\n        self.h = h\n        self.convs = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[0],\n                        padding=get_padding(kernel_size, dilation[0]),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[1],\n                        padding=get_padding(kernel_size, dilation[1]),\n                    )\n                ),\n            ]\n        )\n        self.convs.apply(init_weights)\n\n    def forward(self, x):\n        for c in self.convs:\n            xt = F.leaky_relu(x, LRELU_SLOPE)\n            xt = c(xt)\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs:\n            remove_weight_norm(l)\n\n\nclass Generator(torch.nn.Module):\n    def __init__(self, h):\n        super().__init__()\n        self.h = h\n        self.num_kernels = len(h.resblock_kernel_sizes)\n        self.num_upsamples = len(h.upsample_rates)\n        self.conv_pre = weight_norm(Conv1d(80, h.upsample_initial_channel, 7, 1, padding=3))\n        resblock = ResBlock1 if h.resblock == \"1\" else ResBlock2\n\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)):\n            self.ups.append(\n                weight_norm(\n                    ConvTranspose1d(\n                        h.upsample_initial_channel // (2**i),\n                        h.upsample_initial_channel // (2 ** (i + 1)),\n                        k,\n                        u,\n                        padding=(k - u) // 2,\n                    )\n                )\n            )\n\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = h.upsample_initial_channel // (2 ** (i + 1))\n            for _, (k, d) in enumerate(zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes)):\n                self.resblocks.append(resblock(h, ch, k, d))\n\n        self.conv_post = weight_norm(Conv1d(ch, 1, 7, 1, padding=3))\n        self.ups.apply(init_weights)\n        self.conv_post.apply(init_weights)\n\n    def forward(self, x):\n        x = self.conv_pre(x)\n        for i in range(self.num_upsamples):\n            x = F.leaky_relu(x, LRELU_SLOPE)\n            x = self.ups[i](x)\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n        x = F.leaky_relu(x)\n        x = self.conv_post(x)\n        x = torch.tanh(x)\n\n        return x\n\n    def remove_weight_norm(self):\n        print(\"Removing weight norm...\")\n        for l in self.ups:\n            remove_weight_norm(l)\n        for l in self.resblocks:\n            l.remove_weight_norm()\n        remove_weight_norm(self.conv_pre)\n        remove_weight_norm(self.conv_post)\n\n\nclass DiscriminatorP(torch.nn.Module):\n    def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False):\n        super().__init__()\n        self.period = period\n        norm_f = weight_norm if use_spectral_norm is False else spectral_norm\n        self.convs = nn.ModuleList(\n            [\n                norm_f(Conv2d(1, 32, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),\n                norm_f(Conv2d(32, 128, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),\n                norm_f(Conv2d(128, 512, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),\n                norm_f(Conv2d(512, 1024, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),\n                norm_f(Conv2d(1024, 1024, (kernel_size, 1), 1, padding=(2, 0))),\n            ]\n        )\n        self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0)))\n\n    def forward(self, x):\n        fmap = []\n\n        # 1d to 2d\n        b, c, t = x.shape\n        if t % self.period != 0:  # pad first\n            n_pad = self.period - (t % self.period)\n            x = F.pad(x, (0, n_pad), \"reflect\")\n            t = t + n_pad\n        x = x.view(b, c, t // self.period, self.period)\n\n        for l in self.convs:\n            x = l(x)\n            x = F.leaky_relu(x, LRELU_SLOPE)\n            fmap.append(x)\n        x = self.conv_post(x)\n        fmap.append(x)\n        x = torch.flatten(x, 1, -1)\n\n        return x, fmap\n\n\nclass MultiPeriodDiscriminator(torch.nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.discriminators = nn.ModuleList(\n            [\n                DiscriminatorP(2),\n                DiscriminatorP(3),\n                DiscriminatorP(5),\n                DiscriminatorP(7),\n                DiscriminatorP(11),\n            ]\n        )\n\n    def forward(self, y, y_hat):\n        y_d_rs = []\n        y_d_gs = []\n        fmap_rs = []\n        fmap_gs = []\n        for _, d in enumerate(self.discriminators):\n            y_d_r, fmap_r = d(y)\n            y_d_g, fmap_g = d(y_hat)\n            y_d_rs.append(y_d_r)\n            fmap_rs.append(fmap_r)\n            y_d_gs.append(y_d_g)\n            fmap_gs.append(fmap_g)\n\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\nclass DiscriminatorS(torch.nn.Module):\n    def __init__(self, use_spectral_norm=False):\n        super().__init__()\n        norm_f = weight_norm if use_spectral_norm is False else spectral_norm\n        self.convs = nn.ModuleList(\n            [\n                norm_f(Conv1d(1, 128, 15, 1, padding=7)),\n                norm_f(Conv1d(128, 128, 41, 2, groups=4, padding=20)),\n                norm_f(Conv1d(128, 256, 41, 2, groups=16, padding=20)),\n                norm_f(Conv1d(256, 512, 41, 4, groups=16, padding=20)),\n                norm_f(Conv1d(512, 1024, 41, 4, groups=16, padding=20)),\n                norm_f(Conv1d(1024, 1024, 41, 1, groups=16, padding=20)),\n                norm_f(Conv1d(1024, 1024, 5, 1, padding=2)),\n            ]\n        )\n        self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1))\n\n    def forward(self, x):\n        fmap = []\n        for l in self.convs:\n            x = l(x)\n            x = F.leaky_relu(x, LRELU_SLOPE)\n            fmap.append(x)\n        x = self.conv_post(x)\n        fmap.append(x)\n        x = torch.flatten(x, 1, -1)\n\n        return x, fmap\n\n\nclass MultiScaleDiscriminator(torch.nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.discriminators = nn.ModuleList(\n            [\n                DiscriminatorS(use_spectral_norm=True),\n                DiscriminatorS(),\n                DiscriminatorS(),\n            ]\n        )\n        self.meanpools = nn.ModuleList([AvgPool1d(4, 2, padding=2), AvgPool1d(4, 2, padding=2)])\n\n    def forward(self, y, y_hat):\n        y_d_rs = []\n        y_d_gs = []\n        fmap_rs = []\n        fmap_gs = []\n        for i, d in enumerate(self.discriminators):\n            if i != 0:\n                y = self.meanpools[i - 1](y)\n                y_hat = self.meanpools[i - 1](y_hat)\n            y_d_r, fmap_r = d(y)\n            y_d_g, fmap_g = d(y_hat)\n            y_d_rs.append(y_d_r)\n            fmap_rs.append(fmap_r)\n            y_d_gs.append(y_d_g)\n            fmap_gs.append(fmap_g)\n\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\ndef feature_loss(fmap_r, fmap_g):\n    loss = 0\n    for dr, dg in zip(fmap_r, fmap_g):\n        for rl, gl in zip(dr, dg):\n            loss += torch.mean(torch.abs(rl - gl))\n\n    return loss * 2\n\n\ndef discriminator_loss(disc_real_outputs, disc_generated_outputs):\n    loss = 0\n    r_losses = []\n    g_losses = []\n    for dr, dg in zip(disc_real_outputs, disc_generated_outputs):\n        r_loss = torch.mean((1 - dr) ** 2)\n        g_loss = torch.mean(dg**2)\n        loss += r_loss + g_loss\n        r_losses.append(r_loss.item())\n        g_losses.append(g_loss.item())\n\n    return loss, r_losses, g_losses\n\n\ndef generator_loss(disc_outputs):\n    loss = 0\n    gen_losses = []\n    for dg in disc_outputs:\n        l = torch.mean((1 - dg) ** 2)\n        gen_losses.append(l)\n        loss += l\n\n    return loss, gen_losses\n"
  },
  {
    "path": "xinference/thirdparty/matcha/hifigan/xutils.py",
    "content": "\"\"\" from https://github.com/jik876/hifi-gan \"\"\"\n\nimport glob\nimport os\n\n# import matplotlib\nimport torch\nfrom torch.nn.utils import weight_norm\n\n# matplotlib.use(\"Agg\")\n# import matplotlib.pylab as plt\n\n\ndef plot_spectrogram(spectrogram):\n    fig, ax = plt.subplots(figsize=(10, 2))\n    im = ax.imshow(spectrogram, aspect=\"auto\", origin=\"lower\", interpolation=\"none\")\n    plt.colorbar(im, ax=ax)\n\n    fig.canvas.draw()\n    plt.close()\n\n    return fig\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef apply_weight_norm(m):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        weight_norm(m)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef load_checkpoint(filepath, device):\n    assert os.path.isfile(filepath)\n    print(f\"Loading '{filepath}'\")\n    checkpoint_dict = torch.load(filepath, map_location=device)\n    print(\"Complete.\")\n    return checkpoint_dict\n\n\ndef save_checkpoint(filepath, obj):\n    print(f\"Saving checkpoint to {filepath}\")\n    torch.save(obj, filepath)\n    print(\"Complete.\")\n\n\ndef scan_checkpoint(cp_dir, prefix):\n    pattern = os.path.join(cp_dir, prefix + \"????????\")\n    cp_list = glob.glob(pattern)\n    if len(cp_list) == 0:\n        return None\n    return sorted(cp_list)[-1]\n"
  },
  {
    "path": "xinference/thirdparty/matcha/models/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/matcha/models/baselightningmodule.py",
    "content": "\"\"\"\nThis is a base lightning module that can be used to train a model.\nThe benefit of this abstraction is that all the logic outside of model definition can be reused for different models.\n\"\"\"\nimport inspect\nfrom abc import ABC\nfrom typing import Any, Dict\n\nimport torch\nfrom lightning import LightningModule\nfrom lightning.pytorch.utilities import grad_norm\n\nfrom matcha import utils\nfrom matcha.utils.utils import plot_tensor\n\nlog = utils.get_pylogger(__name__)\n\n\nclass BaseLightningClass(LightningModule, ABC):\n    def update_data_statistics(self, data_statistics):\n        if data_statistics is None:\n            data_statistics = {\n                \"mel_mean\": 0.0,\n                \"mel_std\": 1.0,\n            }\n\n        self.register_buffer(\"mel_mean\", torch.tensor(data_statistics[\"mel_mean\"]))\n        self.register_buffer(\"mel_std\", torch.tensor(data_statistics[\"mel_std\"]))\n\n    def configure_optimizers(self) -> Any:\n        optimizer = self.hparams.optimizer(params=self.parameters())\n        if self.hparams.scheduler not in (None, {}):\n            scheduler_args = {}\n            # Manage last epoch for exponential schedulers\n            if \"last_epoch\" in inspect.signature(self.hparams.scheduler.scheduler).parameters:\n                if hasattr(self, \"ckpt_loaded_epoch\"):\n                    current_epoch = self.ckpt_loaded_epoch - 1\n                else:\n                    current_epoch = -1\n\n            scheduler_args.update({\"optimizer\": optimizer})\n            scheduler = self.hparams.scheduler.scheduler(**scheduler_args)\n            scheduler.last_epoch = current_epoch\n            return {\n                \"optimizer\": optimizer,\n                \"lr_scheduler\": {\n                    \"scheduler\": scheduler,\n                    \"interval\": self.hparams.scheduler.lightning_args.interval,\n                    \"frequency\": self.hparams.scheduler.lightning_args.frequency,\n                    \"name\": \"learning_rate\",\n                },\n            }\n\n        return {\"optimizer\": optimizer}\n\n    def get_losses(self, batch):\n        x, x_lengths = batch[\"x\"], batch[\"x_lengths\"]\n        y, y_lengths = batch[\"y\"], batch[\"y_lengths\"]\n        spks = batch[\"spks\"]\n\n        dur_loss, prior_loss, diff_loss, *_ = self(\n            x=x,\n            x_lengths=x_lengths,\n            y=y,\n            y_lengths=y_lengths,\n            spks=spks,\n            out_size=self.out_size,\n            durations=batch[\"durations\"],\n        )\n        return {\n            \"dur_loss\": dur_loss,\n            \"prior_loss\": prior_loss,\n            \"diff_loss\": diff_loss,\n        }\n\n    def on_load_checkpoint(self, checkpoint: Dict[str, Any]) -> None:\n        self.ckpt_loaded_epoch = checkpoint[\"epoch\"]  # pylint: disable=attribute-defined-outside-init\n\n    def training_step(self, batch: Any, batch_idx: int):\n        loss_dict = self.get_losses(batch)\n        self.log(\n            \"step\",\n            float(self.global_step),\n            on_step=True,\n            prog_bar=True,\n            logger=True,\n            sync_dist=True,\n        )\n\n        self.log(\n            \"sub_loss/train_dur_loss\",\n            loss_dict[\"dur_loss\"],\n            on_step=True,\n            on_epoch=True,\n            logger=True,\n            sync_dist=True,\n        )\n        self.log(\n            \"sub_loss/train_prior_loss\",\n            loss_dict[\"prior_loss\"],\n            on_step=True,\n            on_epoch=True,\n            logger=True,\n            sync_dist=True,\n        )\n        self.log(\n            \"sub_loss/train_diff_loss\",\n            loss_dict[\"diff_loss\"],\n            on_step=True,\n            on_epoch=True,\n            logger=True,\n            sync_dist=True,\n        )\n\n        total_loss = sum(loss_dict.values())\n        self.log(\n            \"loss/train\",\n            total_loss,\n            on_step=True,\n            on_epoch=True,\n            logger=True,\n            prog_bar=True,\n            sync_dist=True,\n        )\n\n        return {\"loss\": total_loss, \"log\": loss_dict}\n\n    def validation_step(self, batch: Any, batch_idx: int):\n        loss_dict = self.get_losses(batch)\n        self.log(\n            \"sub_loss/val_dur_loss\",\n            loss_dict[\"dur_loss\"],\n            on_step=True,\n            on_epoch=True,\n            logger=True,\n            sync_dist=True,\n        )\n        self.log(\n            \"sub_loss/val_prior_loss\",\n            loss_dict[\"prior_loss\"],\n            on_step=True,\n            on_epoch=True,\n            logger=True,\n            sync_dist=True,\n        )\n        self.log(\n            \"sub_loss/val_diff_loss\",\n            loss_dict[\"diff_loss\"],\n            on_step=True,\n            on_epoch=True,\n            logger=True,\n            sync_dist=True,\n        )\n\n        total_loss = sum(loss_dict.values())\n        self.log(\n            \"loss/val\",\n            total_loss,\n            on_step=True,\n            on_epoch=True,\n            logger=True,\n            prog_bar=True,\n            sync_dist=True,\n        )\n\n        return total_loss\n\n    def on_validation_end(self) -> None:\n        if self.trainer.is_global_zero:\n            one_batch = next(iter(self.trainer.val_dataloaders))\n            if self.current_epoch == 0:\n                log.debug(\"Plotting original samples\")\n                for i in range(2):\n                    y = one_batch[\"y\"][i].unsqueeze(0).to(self.device)\n                    self.logger.experiment.add_image(\n                        f\"original/{i}\",\n                        plot_tensor(y.squeeze().cpu()),\n                        self.current_epoch,\n                        dataformats=\"HWC\",\n                    )\n\n            log.debug(\"Synthesising...\")\n            for i in range(2):\n                x = one_batch[\"x\"][i].unsqueeze(0).to(self.device)\n                x_lengths = one_batch[\"x_lengths\"][i].unsqueeze(0).to(self.device)\n                spks = one_batch[\"spks\"][i].unsqueeze(0).to(self.device) if one_batch[\"spks\"] is not None else None\n                output = self.synthesise(x[:, :x_lengths], x_lengths, n_timesteps=10, spks=spks)\n                y_enc, y_dec = output[\"encoder_outputs\"], output[\"decoder_outputs\"]\n                attn = output[\"attn\"]\n                self.logger.experiment.add_image(\n                    f\"generated_enc/{i}\",\n                    plot_tensor(y_enc.squeeze().cpu()),\n                    self.current_epoch,\n                    dataformats=\"HWC\",\n                )\n                self.logger.experiment.add_image(\n                    f\"generated_dec/{i}\",\n                    plot_tensor(y_dec.squeeze().cpu()),\n                    self.current_epoch,\n                    dataformats=\"HWC\",\n                )\n                self.logger.experiment.add_image(\n                    f\"alignment/{i}\",\n                    plot_tensor(attn.squeeze().cpu()),\n                    self.current_epoch,\n                    dataformats=\"HWC\",\n                )\n\n    def on_before_optimizer_step(self, optimizer):\n        self.log_dict({f\"grad_norm/{k}\": v for k, v in grad_norm(self, norm_type=2).items()})\n"
  },
  {
    "path": "xinference/thirdparty/matcha/models/components/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/matcha/models/components/decoder.py",
    "content": "import math\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom conformer import ConformerBlock\nfrom diffusers.models.activations import get_activation\nfrom einops import pack, rearrange, repeat\n\nfrom matcha.models.components.transformer import BasicTransformerBlock\n\n\nclass SinusoidalPosEmb(torch.nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.dim = dim\n        assert self.dim % 2 == 0, \"SinusoidalPosEmb requires dim to be even\"\n\n    def forward(self, x, scale=1000):\n        if x.ndim < 1:\n            x = x.unsqueeze(0)\n        device = x.device\n        half_dim = self.dim // 2\n        emb = math.log(10000) / (half_dim - 1)\n        emb = torch.exp(torch.arange(half_dim, device=device).float() * -emb)\n        emb = scale * x.unsqueeze(1) * emb.unsqueeze(0)\n        emb = torch.cat((emb.sin(), emb.cos()), dim=-1)\n        return emb\n\n\nclass Block1D(torch.nn.Module):\n    def __init__(self, dim, dim_out, groups=8):\n        super().__init__()\n        self.block = torch.nn.Sequential(\n            torch.nn.Conv1d(dim, dim_out, 3, padding=1),\n            torch.nn.GroupNorm(groups, dim_out),\n            nn.Mish(),\n        )\n\n    def forward(self, x, mask):\n        output = self.block(x * mask)\n        return output * mask\n\n\nclass ResnetBlock1D(torch.nn.Module):\n    def __init__(self, dim, dim_out, time_emb_dim, groups=8):\n        super().__init__()\n        self.mlp = torch.nn.Sequential(nn.Mish(), torch.nn.Linear(time_emb_dim, dim_out))\n\n        self.block1 = Block1D(dim, dim_out, groups=groups)\n        self.block2 = Block1D(dim_out, dim_out, groups=groups)\n\n        self.res_conv = torch.nn.Conv1d(dim, dim_out, 1)\n\n    def forward(self, x, mask, time_emb):\n        h = self.block1(x, mask)\n        h += self.mlp(time_emb).unsqueeze(-1)\n        h = self.block2(h, mask)\n        output = h + self.res_conv(x * mask)\n        return output\n\n\nclass Downsample1D(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.conv = torch.nn.Conv1d(dim, dim, 3, 2, 1)\n\n    def forward(self, x):\n        return self.conv(x)\n\n\nclass TimestepEmbedding(nn.Module):\n    def __init__(\n        self,\n        in_channels: int,\n        time_embed_dim: int,\n        act_fn: str = \"silu\",\n        out_dim: int = None,\n        post_act_fn: Optional[str] = None,\n        cond_proj_dim=None,\n    ):\n        super().__init__()\n\n        self.linear_1 = nn.Linear(in_channels, time_embed_dim)\n\n        if cond_proj_dim is not None:\n            self.cond_proj = nn.Linear(cond_proj_dim, in_channels, bias=False)\n        else:\n            self.cond_proj = None\n\n        self.act = get_activation(act_fn)\n\n        if out_dim is not None:\n            time_embed_dim_out = out_dim\n        else:\n            time_embed_dim_out = time_embed_dim\n        self.linear_2 = nn.Linear(time_embed_dim, time_embed_dim_out)\n\n        if post_act_fn is None:\n            self.post_act = None\n        else:\n            self.post_act = get_activation(post_act_fn)\n\n    def forward(self, sample, condition=None):\n        if condition is not None:\n            sample = sample + self.cond_proj(condition)\n        sample = self.linear_1(sample)\n\n        if self.act is not None:\n            sample = self.act(sample)\n\n        sample = self.linear_2(sample)\n\n        if self.post_act is not None:\n            sample = self.post_act(sample)\n        return sample\n\n\nclass Upsample1D(nn.Module):\n    \"\"\"A 1D upsampling layer with an optional convolution.\n\n    Parameters:\n        channels (`int`):\n            number of channels in the inputs and outputs.\n        use_conv (`bool`, default `False`):\n            option to use a convolution.\n        use_conv_transpose (`bool`, default `False`):\n            option to use a convolution transpose.\n        out_channels (`int`, optional):\n            number of output channels. Defaults to `channels`.\n    \"\"\"\n\n    def __init__(self, channels, use_conv=False, use_conv_transpose=True, out_channels=None, name=\"conv\"):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.use_conv_transpose = use_conv_transpose\n        self.name = name\n\n        self.conv = None\n        if use_conv_transpose:\n            self.conv = nn.ConvTranspose1d(channels, self.out_channels, 4, 2, 1)\n        elif use_conv:\n            self.conv = nn.Conv1d(self.channels, self.out_channels, 3, padding=1)\n\n    def forward(self, inputs):\n        assert inputs.shape[1] == self.channels\n        if self.use_conv_transpose:\n            return self.conv(inputs)\n\n        outputs = F.interpolate(inputs, scale_factor=2.0, mode=\"nearest\")\n\n        if self.use_conv:\n            outputs = self.conv(outputs)\n\n        return outputs\n\n\nclass ConformerWrapper(ConformerBlock):\n    def __init__(  # pylint: disable=useless-super-delegation\n        self,\n        *,\n        dim,\n        dim_head=64,\n        heads=8,\n        ff_mult=4,\n        conv_expansion_factor=2,\n        conv_kernel_size=31,\n        attn_dropout=0,\n        ff_dropout=0,\n        conv_dropout=0,\n        conv_causal=False,\n    ):\n        super().__init__(\n            dim=dim,\n            dim_head=dim_head,\n            heads=heads,\n            ff_mult=ff_mult,\n            conv_expansion_factor=conv_expansion_factor,\n            conv_kernel_size=conv_kernel_size,\n            attn_dropout=attn_dropout,\n            ff_dropout=ff_dropout,\n            conv_dropout=conv_dropout,\n            conv_causal=conv_causal,\n        )\n\n    def forward(\n        self,\n        hidden_states,\n        attention_mask,\n        encoder_hidden_states=None,\n        encoder_attention_mask=None,\n        timestep=None,\n    ):\n        return super().forward(x=hidden_states, mask=attention_mask.bool())\n\n\nclass Decoder(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        channels=(256, 256),\n        dropout=0.05,\n        attention_head_dim=64,\n        n_blocks=1,\n        num_mid_blocks=2,\n        num_heads=4,\n        act_fn=\"snake\",\n        down_block_type=\"transformer\",\n        mid_block_type=\"transformer\",\n        up_block_type=\"transformer\",\n    ):\n        super().__init__()\n        channels = tuple(channels)\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n\n        self.time_embeddings = SinusoidalPosEmb(in_channels)\n        time_embed_dim = channels[0] * 4\n        self.time_mlp = TimestepEmbedding(\n            in_channels=in_channels,\n            time_embed_dim=time_embed_dim,\n            act_fn=\"silu\",\n        )\n\n        self.down_blocks = nn.ModuleList([])\n        self.mid_blocks = nn.ModuleList([])\n        self.up_blocks = nn.ModuleList([])\n\n        output_channel = in_channels\n        for i in range(len(channels)):  # pylint: disable=consider-using-enumerate\n            input_channel = output_channel\n            output_channel = channels[i]\n            is_last = i == len(channels) - 1\n            resnet = ResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n            transformer_blocks = nn.ModuleList(\n                [\n                    self.get_block(\n                        down_block_type,\n                        output_channel,\n                        attention_head_dim,\n                        num_heads,\n                        dropout,\n                        act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            downsample = (\n                Downsample1D(output_channel) if not is_last else nn.Conv1d(output_channel, output_channel, 3, padding=1)\n            )\n\n            self.down_blocks.append(nn.ModuleList([resnet, transformer_blocks, downsample]))\n\n        for i in range(num_mid_blocks):\n            input_channel = channels[-1]\n            out_channels = channels[-1]\n\n            resnet = ResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n\n            transformer_blocks = nn.ModuleList(\n                [\n                    self.get_block(\n                        mid_block_type,\n                        output_channel,\n                        attention_head_dim,\n                        num_heads,\n                        dropout,\n                        act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n\n            self.mid_blocks.append(nn.ModuleList([resnet, transformer_blocks]))\n\n        channels = channels[::-1] + (channels[0],)\n        for i in range(len(channels) - 1):\n            input_channel = channels[i]\n            output_channel = channels[i + 1]\n            is_last = i == len(channels) - 2\n\n            resnet = ResnetBlock1D(\n                dim=2 * input_channel,\n                dim_out=output_channel,\n                time_emb_dim=time_embed_dim,\n            )\n            transformer_blocks = nn.ModuleList(\n                [\n                    self.get_block(\n                        up_block_type,\n                        output_channel,\n                        attention_head_dim,\n                        num_heads,\n                        dropout,\n                        act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            upsample = (\n                Upsample1D(output_channel, use_conv_transpose=True)\n                if not is_last\n                else nn.Conv1d(output_channel, output_channel, 3, padding=1)\n            )\n\n            self.up_blocks.append(nn.ModuleList([resnet, transformer_blocks, upsample]))\n\n        self.final_block = Block1D(channels[-1], channels[-1])\n        self.final_proj = nn.Conv1d(channels[-1], self.out_channels, 1)\n\n        self.initialize_weights()\n        # nn.init.normal_(self.final_proj.weight)\n\n    @staticmethod\n    def get_block(block_type, dim, attention_head_dim, num_heads, dropout, act_fn):\n        if block_type == \"conformer\":\n            block = ConformerWrapper(\n                dim=dim,\n                dim_head=attention_head_dim,\n                heads=num_heads,\n                ff_mult=1,\n                conv_expansion_factor=2,\n                ff_dropout=dropout,\n                attn_dropout=dropout,\n                conv_dropout=dropout,\n                conv_kernel_size=31,\n            )\n        elif block_type == \"transformer\":\n            block = BasicTransformerBlock(\n                dim=dim,\n                num_attention_heads=num_heads,\n                attention_head_dim=attention_head_dim,\n                dropout=dropout,\n                activation_fn=act_fn,\n            )\n        else:\n            raise ValueError(f\"Unknown block type {block_type}\")\n\n        return block\n\n    def initialize_weights(self):\n        for m in self.modules():\n            if isinstance(m, nn.Conv1d):\n                nn.init.kaiming_normal_(m.weight, nonlinearity=\"relu\")\n\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n            elif isinstance(m, nn.GroupNorm):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n\n            elif isinstance(m, nn.Linear):\n                nn.init.kaiming_normal_(m.weight, nonlinearity=\"relu\")\n\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n    def forward(self, x, mask, mu, t, spks=None, cond=None):\n        \"\"\"Forward pass of the UNet1DConditional model.\n\n        Args:\n            x (torch.Tensor): shape (batch_size, in_channels, time)\n            mask (_type_): shape (batch_size, 1, time)\n            t (_type_): shape (batch_size)\n            spks (_type_, optional): shape: (batch_size, condition_channels). Defaults to None.\n            cond (_type_, optional): placeholder for future use. Defaults to None.\n\n        Raises:\n            ValueError: _description_\n            ValueError: _description_\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n\n        t = self.time_embeddings(t)\n        t = self.time_mlp(t)\n\n        x = pack([x, mu], \"b * t\")[0]\n\n        if spks is not None:\n            spks = repeat(spks, \"b c -> b c t\", t=x.shape[-1])\n            x = pack([x, spks], \"b * t\")[0]\n\n        hiddens = []\n        masks = [mask]\n        for resnet, transformer_blocks, downsample in self.down_blocks:\n            mask_down = masks[-1]\n            x = resnet(x, mask_down, t)\n            x = rearrange(x, \"b c t -> b t c\")\n            mask_down = rearrange(mask_down, \"b 1 t -> b t\")\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=mask_down,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\")\n            mask_down = rearrange(mask_down, \"b t -> b 1 t\")\n            hiddens.append(x)  # Save hidden states for skip connections\n            x = downsample(x * mask_down)\n            masks.append(mask_down[:, :, ::2])\n\n        masks = masks[:-1]\n        mask_mid = masks[-1]\n\n        for resnet, transformer_blocks in self.mid_blocks:\n            x = resnet(x, mask_mid, t)\n            x = rearrange(x, \"b c t -> b t c\")\n            mask_mid = rearrange(mask_mid, \"b 1 t -> b t\")\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=mask_mid,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\")\n            mask_mid = rearrange(mask_mid, \"b t -> b 1 t\")\n\n        for resnet, transformer_blocks, upsample in self.up_blocks:\n            mask_up = masks.pop()\n            x = resnet(pack([x, hiddens.pop()], \"b * t\")[0], mask_up, t)\n            x = rearrange(x, \"b c t -> b t c\")\n            mask_up = rearrange(mask_up, \"b 1 t -> b t\")\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=mask_up,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\")\n            mask_up = rearrange(mask_up, \"b t -> b 1 t\")\n            x = upsample(x * mask_up)\n\n        x = self.final_block(x, mask_up)\n        output = self.final_proj(x * mask_up)\n\n        return output * mask\n"
  },
  {
    "path": "xinference/thirdparty/matcha/models/components/flow_matching.py",
    "content": "from abc import ABC\n\nimport torch\nimport torch.nn.functional as F\n\nfrom matcha.models.components.decoder import Decoder\nfrom matcha.utils.pylogger import get_pylogger\n\nlog = get_pylogger(__name__)\n\n\nclass BASECFM(torch.nn.Module, ABC):\n    def __init__(\n        self,\n        n_feats,\n        cfm_params,\n        n_spks=1,\n        spk_emb_dim=128,\n    ):\n        super().__init__()\n        self.n_feats = n_feats\n        self.n_spks = n_spks\n        self.spk_emb_dim = spk_emb_dim\n        self.solver = cfm_params.solver\n        if hasattr(cfm_params, \"sigma_min\"):\n            self.sigma_min = cfm_params.sigma_min\n        else:\n            self.sigma_min = 1e-4\n\n        self.estimator = None\n\n    @torch.inference_mode()\n    def forward(self, mu, mask, n_timesteps, temperature=1.0, spks=None, cond=None):\n        \"\"\"Forward diffusion\n\n        Args:\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): output_mask\n                shape: (batch_size, 1, mel_timesteps)\n            n_timesteps (int): number of diffusion steps\n            temperature (float, optional): temperature for scaling noise. Defaults to 1.0.\n            spks (torch.Tensor, optional): speaker ids. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n            cond: Not used but kept for future purposes\n\n        Returns:\n            sample: generated mel-spectrogram\n                shape: (batch_size, n_feats, mel_timesteps)\n        \"\"\"\n        z = torch.randn_like(mu) * temperature\n        t_span = torch.linspace(0, 1, n_timesteps + 1, device=mu.device)\n        return self.solve_euler(z, t_span=t_span, mu=mu, mask=mask, spks=spks, cond=cond)\n\n    def solve_euler(self, x, t_span, mu, mask, spks, cond):\n        \"\"\"\n        Fixed euler solver for ODEs.\n        Args:\n            x (torch.Tensor): random noise\n            t_span (torch.Tensor): n_timesteps interpolated\n                shape: (n_timesteps + 1,)\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): output_mask\n                shape: (batch_size, 1, mel_timesteps)\n            spks (torch.Tensor, optional): speaker ids. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n            cond: Not used but kept for future purposes\n        \"\"\"\n        t, _, dt = t_span[0], t_span[-1], t_span[1] - t_span[0]\n\n        # I am storing this because I can later plot it by putting a debugger here and saving it to a file\n        # Or in future might add like a return_all_steps flag\n        sol = []\n\n        for step in range(1, len(t_span)):\n            dphi_dt = self.estimator(x, mask, mu, t, spks, cond)\n\n            x = x + dt * dphi_dt\n            t = t + dt\n            sol.append(x)\n            if step < len(t_span) - 1:\n                dt = t_span[step + 1] - t\n\n        return sol[-1]\n\n    def compute_loss(self, x1, mask, mu, spks=None, cond=None):\n        \"\"\"Computes diffusion loss\n\n        Args:\n            x1 (torch.Tensor): Target\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): target mask\n                shape: (batch_size, 1, mel_timesteps)\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            spks (torch.Tensor, optional): speaker embedding. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n\n        Returns:\n            loss: conditional flow matching loss\n            y: conditional flow\n                shape: (batch_size, n_feats, mel_timesteps)\n        \"\"\"\n        b, _, t = mu.shape\n\n        # random timestep\n        t = torch.rand([b, 1, 1], device=mu.device, dtype=mu.dtype)\n        # sample noise p(x_0)\n        z = torch.randn_like(x1)\n\n        y = (1 - (1 - self.sigma_min) * t) * z + t * x1\n        u = x1 - (1 - self.sigma_min) * z\n\n        loss = F.mse_loss(self.estimator(y, mask, mu, t.squeeze(), spks), u, reduction=\"sum\") / (\n            torch.sum(mask) * u.shape[1]\n        )\n        return loss, y\n\n\nclass CFM(BASECFM):\n    def __init__(self, in_channels, out_channel, cfm_params, decoder_params, n_spks=1, spk_emb_dim=64):\n        super().__init__(\n            n_feats=in_channels,\n            cfm_params=cfm_params,\n            n_spks=n_spks,\n            spk_emb_dim=spk_emb_dim,\n        )\n\n        in_channels = in_channels + (spk_emb_dim if n_spks > 1 else 0)\n        # Just change the architecture of the estimator here\n        self.estimator = Decoder(in_channels=in_channels, out_channels=out_channel, **decoder_params)\n"
  },
  {
    "path": "xinference/thirdparty/matcha/models/components/text_encoder.py",
    "content": "\"\"\" from https://github.com/jaywalnut310/glow-tts \"\"\"\n\nimport math\n\nimport torch\nimport torch.nn as nn\nfrom einops import rearrange\n\nimport matcha.utils as utils\nfrom matcha.utils.model import sequence_mask\n\nlog = utils.get_pylogger(__name__)\n\n\nclass LayerNorm(nn.Module):\n    def __init__(self, channels, eps=1e-4):\n        super().__init__()\n        self.channels = channels\n        self.eps = eps\n\n        self.gamma = torch.nn.Parameter(torch.ones(channels))\n        self.beta = torch.nn.Parameter(torch.zeros(channels))\n\n    def forward(self, x):\n        n_dims = len(x.shape)\n        mean = torch.mean(x, 1, keepdim=True)\n        variance = torch.mean((x - mean) ** 2, 1, keepdim=True)\n\n        x = (x - mean) * torch.rsqrt(variance + self.eps)\n\n        shape = [1, -1] + [1] * (n_dims - 2)\n        x = x * self.gamma.view(*shape) + self.beta.view(*shape)\n        return x\n\n\nclass ConvReluNorm(nn.Module):\n    def __init__(self, in_channels, hidden_channels, out_channels, kernel_size, n_layers, p_dropout):\n        super().__init__()\n        self.in_channels = in_channels\n        self.hidden_channels = hidden_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n\n        self.conv_layers = torch.nn.ModuleList()\n        self.norm_layers = torch.nn.ModuleList()\n        self.conv_layers.append(torch.nn.Conv1d(in_channels, hidden_channels, kernel_size, padding=kernel_size // 2))\n        self.norm_layers.append(LayerNorm(hidden_channels))\n        self.relu_drop = torch.nn.Sequential(torch.nn.ReLU(), torch.nn.Dropout(p_dropout))\n        for _ in range(n_layers - 1):\n            self.conv_layers.append(\n                torch.nn.Conv1d(hidden_channels, hidden_channels, kernel_size, padding=kernel_size // 2)\n            )\n            self.norm_layers.append(LayerNorm(hidden_channels))\n        self.proj = torch.nn.Conv1d(hidden_channels, out_channels, 1)\n        self.proj.weight.data.zero_()\n        self.proj.bias.data.zero_()\n\n    def forward(self, x, x_mask):\n        x_org = x\n        for i in range(self.n_layers):\n            x = self.conv_layers[i](x * x_mask)\n            x = self.norm_layers[i](x)\n            x = self.relu_drop(x)\n        x = x_org + self.proj(x)\n        return x * x_mask\n\n\nclass DurationPredictor(nn.Module):\n    def __init__(self, in_channels, filter_channels, kernel_size, p_dropout):\n        super().__init__()\n        self.in_channels = in_channels\n        self.filter_channels = filter_channels\n        self.p_dropout = p_dropout\n\n        self.drop = torch.nn.Dropout(p_dropout)\n        self.conv_1 = torch.nn.Conv1d(in_channels, filter_channels, kernel_size, padding=kernel_size // 2)\n        self.norm_1 = LayerNorm(filter_channels)\n        self.conv_2 = torch.nn.Conv1d(filter_channels, filter_channels, kernel_size, padding=kernel_size // 2)\n        self.norm_2 = LayerNorm(filter_channels)\n        self.proj = torch.nn.Conv1d(filter_channels, 1, 1)\n\n    def forward(self, x, x_mask):\n        x = self.conv_1(x * x_mask)\n        x = torch.relu(x)\n        x = self.norm_1(x)\n        x = self.drop(x)\n        x = self.conv_2(x * x_mask)\n        x = torch.relu(x)\n        x = self.norm_2(x)\n        x = self.drop(x)\n        x = self.proj(x * x_mask)\n        return x * x_mask\n\n\nclass RotaryPositionalEmbeddings(nn.Module):\n    \"\"\"\n    ## RoPE module\n\n    Rotary encoding transforms pairs of features by rotating in the 2D plane.\n    That is, it organizes the $d$ features as $\\frac{d}{2}$ pairs.\n    Each pair can be considered a coordinate in a 2D plane, and the encoding will rotate it\n    by an angle depending on the position of the token.\n    \"\"\"\n\n    def __init__(self, d: int, base: int = 10_000):\n        r\"\"\"\n        * `d` is the number of features $d$\n        * `base` is the constant used for calculating $\\Theta$\n        \"\"\"\n        super().__init__()\n\n        self.base = base\n        self.d = int(d)\n        self.cos_cached = None\n        self.sin_cached = None\n\n    def _build_cache(self, x: torch.Tensor):\n        r\"\"\"\n        Cache $\\cos$ and $\\sin$ values\n        \"\"\"\n        # Return if cache is already built\n        if self.cos_cached is not None and x.shape[0] <= self.cos_cached.shape[0]:\n            return\n\n        # Get sequence length\n        seq_len = x.shape[0]\n\n        # $\\Theta = {\\theta_i = 10000^{-\\frac{2(i-1)}{d}}, i \\in [1, 2, ..., \\frac{d}{2}]}$\n        theta = 1.0 / (self.base ** (torch.arange(0, self.d, 2).float() / self.d)).to(x.device)\n\n        # Create position indexes `[0, 1, ..., seq_len - 1]`\n        seq_idx = torch.arange(seq_len, device=x.device).float().to(x.device)\n\n        # Calculate the product of position index and $\\theta_i$\n        idx_theta = torch.einsum(\"n,d->nd\", seq_idx, theta)\n\n        # Concatenate so that for row $m$ we have\n        # $[m \\theta_0, m \\theta_1, ..., m \\theta_{\\frac{d}{2}}, m \\theta_0, m \\theta_1, ..., m \\theta_{\\frac{d}{2}}]$\n        idx_theta2 = torch.cat([idx_theta, idx_theta], dim=1)\n\n        # Cache them\n        self.cos_cached = idx_theta2.cos()[:, None, None, :]\n        self.sin_cached = idx_theta2.sin()[:, None, None, :]\n\n    def _neg_half(self, x: torch.Tensor):\n        # $\\frac{d}{2}$\n        d_2 = self.d // 2\n\n        # Calculate $[-x^{(\\frac{d}{2} + 1)}, -x^{(\\frac{d}{2} + 2)}, ..., -x^{(d)}, x^{(1)}, x^{(2)}, ..., x^{(\\frac{d}{2})}]$\n        return torch.cat([-x[:, :, :, d_2:], x[:, :, :, :d_2]], dim=-1)\n\n    def forward(self, x: torch.Tensor):\n        \"\"\"\n        * `x` is the Tensor at the head of a key or a query with shape `[seq_len, batch_size, n_heads, d]`\n        \"\"\"\n        # Cache $\\cos$ and $\\sin$ values\n        x = rearrange(x, \"b h t d -> t b h d\")\n\n        self._build_cache(x)\n\n        # Split the features, we can choose to apply rotary embeddings only to a partial set of features.\n        x_rope, x_pass = x[..., : self.d], x[..., self.d :]\n\n        # Calculate\n        # $[-x^{(\\frac{d}{2} + 1)}, -x^{(\\frac{d}{2} + 2)}, ..., -x^{(d)}, x^{(1)}, x^{(2)}, ..., x^{(\\frac{d}{2})}]$\n        neg_half_x = self._neg_half(x_rope)\n\n        x_rope = (x_rope * self.cos_cached[: x.shape[0]]) + (neg_half_x * self.sin_cached[: x.shape[0]])\n\n        return rearrange(torch.cat((x_rope, x_pass), dim=-1), \"t b h d -> b h t d\")\n\n\nclass MultiHeadAttention(nn.Module):\n    def __init__(\n        self,\n        channels,\n        out_channels,\n        n_heads,\n        heads_share=True,\n        p_dropout=0.0,\n        proximal_bias=False,\n        proximal_init=False,\n    ):\n        super().__init__()\n        assert channels % n_heads == 0\n\n        self.channels = channels\n        self.out_channels = out_channels\n        self.n_heads = n_heads\n        self.heads_share = heads_share\n        self.proximal_bias = proximal_bias\n        self.p_dropout = p_dropout\n        self.attn = None\n\n        self.k_channels = channels // n_heads\n        self.conv_q = torch.nn.Conv1d(channels, channels, 1)\n        self.conv_k = torch.nn.Conv1d(channels, channels, 1)\n        self.conv_v = torch.nn.Conv1d(channels, channels, 1)\n\n        # from https://nn.labml.ai/transformers/rope/index.html\n        self.query_rotary_pe = RotaryPositionalEmbeddings(self.k_channels * 0.5)\n        self.key_rotary_pe = RotaryPositionalEmbeddings(self.k_channels * 0.5)\n\n        self.conv_o = torch.nn.Conv1d(channels, out_channels, 1)\n        self.drop = torch.nn.Dropout(p_dropout)\n\n        torch.nn.init.xavier_uniform_(self.conv_q.weight)\n        torch.nn.init.xavier_uniform_(self.conv_k.weight)\n        if proximal_init:\n            self.conv_k.weight.data.copy_(self.conv_q.weight.data)\n            self.conv_k.bias.data.copy_(self.conv_q.bias.data)\n        torch.nn.init.xavier_uniform_(self.conv_v.weight)\n\n    def forward(self, x, c, attn_mask=None):\n        q = self.conv_q(x)\n        k = self.conv_k(c)\n        v = self.conv_v(c)\n\n        x, self.attn = self.attention(q, k, v, mask=attn_mask)\n\n        x = self.conv_o(x)\n        return x\n\n    def attention(self, query, key, value, mask=None):\n        b, d, t_s, t_t = (*key.size(), query.size(2))\n        query = rearrange(query, \"b (h c) t-> b h t c\", h=self.n_heads)\n        key = rearrange(key, \"b (h c) t-> b h t c\", h=self.n_heads)\n        value = rearrange(value, \"b (h c) t-> b h t c\", h=self.n_heads)\n\n        query = self.query_rotary_pe(query)\n        key = self.key_rotary_pe(key)\n\n        scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(self.k_channels)\n\n        if self.proximal_bias:\n            assert t_s == t_t, \"Proximal bias is only available for self-attention.\"\n            scores = scores + self._attention_bias_proximal(t_s).to(device=scores.device, dtype=scores.dtype)\n        if mask is not None:\n            scores = scores.masked_fill(mask == 0, -1e4)\n        p_attn = torch.nn.functional.softmax(scores, dim=-1)\n        p_attn = self.drop(p_attn)\n        output = torch.matmul(p_attn, value)\n        output = output.transpose(2, 3).contiguous().view(b, d, t_t)\n        return output, p_attn\n\n    @staticmethod\n    def _attention_bias_proximal(length):\n        r = torch.arange(length, dtype=torch.float32)\n        diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1)\n        return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0)\n\n\nclass FFN(nn.Module):\n    def __init__(self, in_channels, out_channels, filter_channels, kernel_size, p_dropout=0.0):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n\n        self.conv_1 = torch.nn.Conv1d(in_channels, filter_channels, kernel_size, padding=kernel_size // 2)\n        self.conv_2 = torch.nn.Conv1d(filter_channels, out_channels, kernel_size, padding=kernel_size // 2)\n        self.drop = torch.nn.Dropout(p_dropout)\n\n    def forward(self, x, x_mask):\n        x = self.conv_1(x * x_mask)\n        x = torch.relu(x)\n        x = self.drop(x)\n        x = self.conv_2(x * x_mask)\n        return x * x_mask\n\n\nclass Encoder(nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size=1,\n        p_dropout=0.0,\n        **kwargs,\n    ):\n        super().__init__()\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n\n        self.drop = torch.nn.Dropout(p_dropout)\n        self.attn_layers = torch.nn.ModuleList()\n        self.norm_layers_1 = torch.nn.ModuleList()\n        self.ffn_layers = torch.nn.ModuleList()\n        self.norm_layers_2 = torch.nn.ModuleList()\n        for _ in range(self.n_layers):\n            self.attn_layers.append(MultiHeadAttention(hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout))\n            self.norm_layers_1.append(LayerNorm(hidden_channels))\n            self.ffn_layers.append(\n                FFN(\n                    hidden_channels,\n                    hidden_channels,\n                    filter_channels,\n                    kernel_size,\n                    p_dropout=p_dropout,\n                )\n            )\n            self.norm_layers_2.append(LayerNorm(hidden_channels))\n\n    def forward(self, x, x_mask):\n        attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1)\n        for i in range(self.n_layers):\n            x = x * x_mask\n            y = self.attn_layers[i](x, x, attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_1[i](x + y)\n            y = self.ffn_layers[i](x, x_mask)\n            y = self.drop(y)\n            x = self.norm_layers_2[i](x + y)\n        x = x * x_mask\n        return x\n\n\nclass TextEncoder(nn.Module):\n    def __init__(\n        self,\n        encoder_type,\n        encoder_params,\n        duration_predictor_params,\n        n_vocab,\n        n_spks=1,\n        spk_emb_dim=128,\n    ):\n        super().__init__()\n        self.encoder_type = encoder_type\n        self.n_vocab = n_vocab\n        self.n_feats = encoder_params.n_feats\n        self.n_channels = encoder_params.n_channels\n        self.spk_emb_dim = spk_emb_dim\n        self.n_spks = n_spks\n\n        self.emb = torch.nn.Embedding(n_vocab, self.n_channels)\n        torch.nn.init.normal_(self.emb.weight, 0.0, self.n_channels**-0.5)\n\n        if encoder_params.prenet:\n            self.prenet = ConvReluNorm(\n                self.n_channels,\n                self.n_channels,\n                self.n_channels,\n                kernel_size=5,\n                n_layers=3,\n                p_dropout=0.5,\n            )\n        else:\n            self.prenet = lambda x, x_mask: x\n\n        self.encoder = Encoder(\n            encoder_params.n_channels + (spk_emb_dim if n_spks > 1 else 0),\n            encoder_params.filter_channels,\n            encoder_params.n_heads,\n            encoder_params.n_layers,\n            encoder_params.kernel_size,\n            encoder_params.p_dropout,\n        )\n\n        self.proj_m = torch.nn.Conv1d(self.n_channels + (spk_emb_dim if n_spks > 1 else 0), self.n_feats, 1)\n        self.proj_w = DurationPredictor(\n            self.n_channels + (spk_emb_dim if n_spks > 1 else 0),\n            duration_predictor_params.filter_channels_dp,\n            duration_predictor_params.kernel_size,\n            duration_predictor_params.p_dropout,\n        )\n\n    def forward(self, x, x_lengths, spks=None):\n        \"\"\"Run forward pass to the transformer based encoder and duration predictor\n\n        Args:\n            x (torch.Tensor): text input\n                shape: (batch_size, max_text_length)\n            x_lengths (torch.Tensor): text input lengths\n                shape: (batch_size,)\n            spks (torch.Tensor, optional): speaker ids. Defaults to None.\n                shape: (batch_size,)\n\n        Returns:\n            mu (torch.Tensor): average output of the encoder\n                shape: (batch_size, n_feats, max_text_length)\n            logw (torch.Tensor): log duration predicted by the duration predictor\n                shape: (batch_size, 1, max_text_length)\n            x_mask (torch.Tensor): mask for the text input\n                shape: (batch_size, 1, max_text_length)\n        \"\"\"\n        x = self.emb(x) * math.sqrt(self.n_channels)\n        x = torch.transpose(x, 1, -1)\n        x_mask = torch.unsqueeze(sequence_mask(x_lengths, x.size(2)), 1).to(x.dtype)\n\n        x = self.prenet(x, x_mask)\n        if self.n_spks > 1:\n            x = torch.cat([x, spks.unsqueeze(-1).repeat(1, 1, x.shape[-1])], dim=1)\n        x = self.encoder(x, x_mask)\n        mu = self.proj_m(x) * x_mask\n\n        x_dp = torch.detach(x)\n        logw = self.proj_w(x_dp, x_mask)\n\n        return mu, logw, x_mask\n"
  },
  {
    "path": "xinference/thirdparty/matcha/models/components/transformer.py",
    "content": "from typing import Any, Dict, Optional\n\nimport torch\nimport torch.nn as nn\nfrom diffusers.models.attention import (\n    GEGLU,\n    GELU,\n    AdaLayerNorm,\n    AdaLayerNormZero,\n    ApproximateGELU,\n)\nfrom diffusers.models.attention_processor import Attention\nfrom diffusers.models.lora import LoRACompatibleLinear\nfrom diffusers.utils.torch_utils import maybe_allow_in_graph\n\n\nclass SnakeBeta(nn.Module):\n    \"\"\"\n    A modified Snake function which uses separate parameters for the magnitude of the periodic components\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter that controls frequency\n        - beta - trainable parameter that controls magnitude\n    References:\n        - This activation function is a modified version based on this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snakebeta(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    \"\"\"\n\n    def __init__(self, in_features, out_features, alpha=1.0, alpha_trainable=True, alpha_logscale=True):\n        \"\"\"\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha - trainable parameter that controls frequency\n            - beta - trainable parameter that controls magnitude\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            beta is initialized to 1 by default, higher values = higher-magnitude.\n            alpha will be trained along with the rest of your model.\n        \"\"\"\n        super().__init__()\n        self.in_features = out_features if isinstance(out_features, list) else [out_features]\n        self.proj = LoRACompatibleLinear(in_features, out_features)\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale:  # log scale alphas initialized to zeros\n            self.alpha = nn.Parameter(torch.zeros(self.in_features) * alpha)\n            self.beta = nn.Parameter(torch.zeros(self.in_features) * alpha)\n        else:  # linear scale alphas initialized to ones\n            self.alpha = nn.Parameter(torch.ones(self.in_features) * alpha)\n            self.beta = nn.Parameter(torch.ones(self.in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n        self.beta.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        \"\"\"\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        SnakeBeta ∶= x + 1/b * sin^2 (xa)\n        \"\"\"\n        x = self.proj(x)\n        if self.alpha_logscale:\n            alpha = torch.exp(self.alpha)\n            beta = torch.exp(self.beta)\n        else:\n            alpha = self.alpha\n            beta = self.beta\n\n        x = x + (1.0 / (beta + self.no_div_by_zero)) * torch.pow(torch.sin(x * alpha), 2)\n\n        return x\n\n\nclass FeedForward(nn.Module):\n    r\"\"\"\n    A feed-forward layer.\n\n    Parameters:\n        dim (`int`): The number of channels in the input.\n        dim_out (`int`, *optional*): The number of channels in the output. If not given, defaults to `dim`.\n        mult (`int`, *optional*, defaults to 4): The multiplier to use for the hidden dimension.\n        dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use.\n        activation_fn (`str`, *optional*, defaults to `\"geglu\"`): Activation function to be used in feed-forward.\n        final_dropout (`bool` *optional*, defaults to False): Apply a final dropout.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        dim_out: Optional[int] = None,\n        mult: int = 4,\n        dropout: float = 0.0,\n        activation_fn: str = \"geglu\",\n        final_dropout: bool = False,\n    ):\n        super().__init__()\n        inner_dim = int(dim * mult)\n        dim_out = dim_out if dim_out is not None else dim\n\n        if activation_fn == \"gelu\":\n            act_fn = GELU(dim, inner_dim)\n        if activation_fn == \"gelu-approximate\":\n            act_fn = GELU(dim, inner_dim, approximate=\"tanh\")\n        elif activation_fn == \"geglu\":\n            act_fn = GEGLU(dim, inner_dim)\n        elif activation_fn == \"geglu-approximate\":\n            act_fn = ApproximateGELU(dim, inner_dim)\n        elif activation_fn == \"snakebeta\":\n            act_fn = SnakeBeta(dim, inner_dim)\n\n        self.net = nn.ModuleList([])\n        # project in\n        self.net.append(act_fn)\n        # project dropout\n        self.net.append(nn.Dropout(dropout))\n        # project out\n        self.net.append(LoRACompatibleLinear(inner_dim, dim_out))\n        # FF as used in Vision Transformer, MLP-Mixer, etc. have a final dropout\n        if final_dropout:\n            self.net.append(nn.Dropout(dropout))\n\n    def forward(self, hidden_states):\n        for module in self.net:\n            hidden_states = module(hidden_states)\n        return hidden_states\n\n\n@maybe_allow_in_graph\nclass BasicTransformerBlock(nn.Module):\n    r\"\"\"\n    A basic Transformer block.\n\n    Parameters:\n        dim (`int`): The number of channels in the input and output.\n        num_attention_heads (`int`): The number of heads to use for multi-head attention.\n        attention_head_dim (`int`): The number of channels in each head.\n        dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use.\n        cross_attention_dim (`int`, *optional*): The size of the encoder_hidden_states vector for cross attention.\n        only_cross_attention (`bool`, *optional*):\n            Whether to use only cross-attention layers. In this case two cross attention layers are used.\n        double_self_attention (`bool`, *optional*):\n            Whether to use two self-attention layers. In this case no cross attention layers are used.\n        activation_fn (`str`, *optional*, defaults to `\"geglu\"`): Activation function to be used in feed-forward.\n        num_embeds_ada_norm (:\n            obj: `int`, *optional*): The number of diffusion steps used during training. See `Transformer2DModel`.\n        attention_bias (:\n            obj: `bool`, *optional*, defaults to `False`): Configure if the attentions should contain a bias parameter.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        num_attention_heads: int,\n        attention_head_dim: int,\n        dropout=0.0,\n        cross_attention_dim: Optional[int] = None,\n        activation_fn: str = \"geglu\",\n        num_embeds_ada_norm: Optional[int] = None,\n        attention_bias: bool = False,\n        only_cross_attention: bool = False,\n        double_self_attention: bool = False,\n        upcast_attention: bool = False,\n        norm_elementwise_affine: bool = True,\n        norm_type: str = \"layer_norm\",\n        final_dropout: bool = False,\n    ):\n        super().__init__()\n        self.only_cross_attention = only_cross_attention\n\n        self.use_ada_layer_norm_zero = (num_embeds_ada_norm is not None) and norm_type == \"ada_norm_zero\"\n        self.use_ada_layer_norm = (num_embeds_ada_norm is not None) and norm_type == \"ada_norm\"\n\n        if norm_type in (\"ada_norm\", \"ada_norm_zero\") and num_embeds_ada_norm is None:\n            raise ValueError(\n                f\"`norm_type` is set to {norm_type}, but `num_embeds_ada_norm` is not defined. Please make sure to\"\n                f\" define `num_embeds_ada_norm` if setting `norm_type` to {norm_type}.\"\n            )\n\n        # Define 3 blocks. Each block has its own normalization layer.\n        # 1. Self-Attn\n        if self.use_ada_layer_norm:\n            self.norm1 = AdaLayerNorm(dim, num_embeds_ada_norm)\n        elif self.use_ada_layer_norm_zero:\n            self.norm1 = AdaLayerNormZero(dim, num_embeds_ada_norm)\n        else:\n            self.norm1 = nn.LayerNorm(dim, elementwise_affine=norm_elementwise_affine)\n        self.attn1 = Attention(\n            query_dim=dim,\n            heads=num_attention_heads,\n            dim_head=attention_head_dim,\n            dropout=dropout,\n            bias=attention_bias,\n            cross_attention_dim=cross_attention_dim if only_cross_attention else None,\n            upcast_attention=upcast_attention,\n        )\n\n        # 2. Cross-Attn\n        if cross_attention_dim is not None or double_self_attention:\n            # We currently only use AdaLayerNormZero for self attention where there will only be one attention block.\n            # I.e. the number of returned modulation chunks from AdaLayerZero would not make sense if returned during\n            # the second cross attention block.\n            self.norm2 = (\n                AdaLayerNorm(dim, num_embeds_ada_norm)\n                if self.use_ada_layer_norm\n                else nn.LayerNorm(dim, elementwise_affine=norm_elementwise_affine)\n            )\n            self.attn2 = Attention(\n                query_dim=dim,\n                cross_attention_dim=cross_attention_dim if not double_self_attention else None,\n                heads=num_attention_heads,\n                dim_head=attention_head_dim,\n                dropout=dropout,\n                bias=attention_bias,\n                upcast_attention=upcast_attention,\n                # scale_qk=False, # uncomment this to not to use flash attention\n            )  # is self-attn if encoder_hidden_states is none\n        else:\n            self.norm2 = None\n            self.attn2 = None\n\n        # 3. Feed-forward\n        self.norm3 = nn.LayerNorm(dim, elementwise_affine=norm_elementwise_affine)\n        self.ff = FeedForward(dim, dropout=dropout, activation_fn=activation_fn, final_dropout=final_dropout)\n\n        # let chunk size default to None\n        self._chunk_size = None\n        self._chunk_dim = 0\n\n    def set_chunk_feed_forward(self, chunk_size: Optional[int], dim: int):\n        # Sets chunk feed-forward\n        self._chunk_size = chunk_size\n        self._chunk_dim = dim\n\n    def forward(\n        self,\n        hidden_states: torch.FloatTensor,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.FloatTensor] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n        timestep: Optional[torch.LongTensor] = None,\n        cross_attention_kwargs: Dict[str, Any] = None,\n        class_labels: Optional[torch.LongTensor] = None,\n    ):\n        # Notice that normalization is always applied before the real computation in the following blocks.\n        # 1. Self-Attention\n        if self.use_ada_layer_norm:\n            norm_hidden_states = self.norm1(hidden_states, timestep)\n        elif self.use_ada_layer_norm_zero:\n            norm_hidden_states, gate_msa, shift_mlp, scale_mlp, gate_mlp = self.norm1(\n                hidden_states, timestep, class_labels, hidden_dtype=hidden_states.dtype\n            )\n        else:\n            norm_hidden_states = self.norm1(hidden_states)\n\n        cross_attention_kwargs = cross_attention_kwargs if cross_attention_kwargs is not None else {}\n\n        attn_output = self.attn1(\n            norm_hidden_states,\n            encoder_hidden_states=encoder_hidden_states if self.only_cross_attention else None,\n            attention_mask=encoder_attention_mask if self.only_cross_attention else attention_mask,\n            **cross_attention_kwargs,\n        )\n        if self.use_ada_layer_norm_zero:\n            attn_output = gate_msa.unsqueeze(1) * attn_output\n        hidden_states = attn_output + hidden_states\n\n        # 2. Cross-Attention\n        if self.attn2 is not None:\n            norm_hidden_states = (\n                self.norm2(hidden_states, timestep) if self.use_ada_layer_norm else self.norm2(hidden_states)\n            )\n\n            attn_output = self.attn2(\n                norm_hidden_states,\n                encoder_hidden_states=encoder_hidden_states,\n                attention_mask=encoder_attention_mask,\n                **cross_attention_kwargs,\n            )\n            hidden_states = attn_output + hidden_states\n\n        # 3. Feed-forward\n        norm_hidden_states = self.norm3(hidden_states)\n\n        if self.use_ada_layer_norm_zero:\n            norm_hidden_states = norm_hidden_states * (1 + scale_mlp[:, None]) + shift_mlp[:, None]\n\n        if self._chunk_size is not None:\n            # \"feed_forward_chunk_size\" can be used to save memory\n            if norm_hidden_states.shape[self._chunk_dim] % self._chunk_size != 0:\n                raise ValueError(\n                    f\"`hidden_states` dimension to be chunked: {norm_hidden_states.shape[self._chunk_dim]} has to be divisible by chunk size: {self._chunk_size}. Make sure to set an appropriate `chunk_size` when calling `unet.enable_forward_chunking`.\"\n                )\n\n            num_chunks = norm_hidden_states.shape[self._chunk_dim] // self._chunk_size\n            ff_output = torch.cat(\n                [self.ff(hid_slice) for hid_slice in norm_hidden_states.chunk(num_chunks, dim=self._chunk_dim)],\n                dim=self._chunk_dim,\n            )\n        else:\n            ff_output = self.ff(norm_hidden_states)\n\n        if self.use_ada_layer_norm_zero:\n            ff_output = gate_mlp.unsqueeze(1) * ff_output\n\n        hidden_states = ff_output + hidden_states\n\n        return hidden_states\n"
  },
  {
    "path": "xinference/thirdparty/matcha/models/matcha_tts.py",
    "content": "import datetime as dt\nimport math\nimport random\n\nimport torch\n\nimport matcha.utils.monotonic_align as monotonic_align\nfrom matcha import utils\nfrom matcha.models.baselightningmodule import BaseLightningClass\nfrom matcha.models.components.flow_matching import CFM\nfrom matcha.models.components.text_encoder import TextEncoder\nfrom matcha.utils.model import (\n    denormalize,\n    duration_loss,\n    fix_len_compatibility,\n    generate_path,\n    sequence_mask,\n)\n\nlog = utils.get_pylogger(__name__)\n\n\nclass MatchaTTS(BaseLightningClass):  # 🍵\n    def __init__(\n        self,\n        n_vocab,\n        n_spks,\n        spk_emb_dim,\n        n_feats,\n        encoder,\n        decoder,\n        cfm,\n        data_statistics,\n        out_size,\n        optimizer=None,\n        scheduler=None,\n        prior_loss=True,\n        use_precomputed_durations=False,\n    ):\n        super().__init__()\n\n        self.save_hyperparameters(logger=False)\n\n        self.n_vocab = n_vocab\n        self.n_spks = n_spks\n        self.spk_emb_dim = spk_emb_dim\n        self.n_feats = n_feats\n        self.out_size = out_size\n        self.prior_loss = prior_loss\n        self.use_precomputed_durations = use_precomputed_durations\n\n        if n_spks > 1:\n            self.spk_emb = torch.nn.Embedding(n_spks, spk_emb_dim)\n\n        self.encoder = TextEncoder(\n            encoder.encoder_type,\n            encoder.encoder_params,\n            encoder.duration_predictor_params,\n            n_vocab,\n            n_spks,\n            spk_emb_dim,\n        )\n\n        self.decoder = CFM(\n            in_channels=2 * encoder.encoder_params.n_feats,\n            out_channel=encoder.encoder_params.n_feats,\n            cfm_params=cfm,\n            decoder_params=decoder,\n            n_spks=n_spks,\n            spk_emb_dim=spk_emb_dim,\n        )\n\n        self.update_data_statistics(data_statistics)\n\n    @torch.inference_mode()\n    def synthesise(self, x, x_lengths, n_timesteps, temperature=1.0, spks=None, length_scale=1.0):\n        \"\"\"\n        Generates mel-spectrogram from text. Returns:\n            1. encoder outputs\n            2. decoder outputs\n            3. generated alignment\n\n        Args:\n            x (torch.Tensor): batch of texts, converted to a tensor with phoneme embedding ids.\n                shape: (batch_size, max_text_length)\n            x_lengths (torch.Tensor): lengths of texts in batch.\n                shape: (batch_size,)\n            n_timesteps (int): number of steps to use for reverse diffusion in decoder.\n            temperature (float, optional): controls variance of terminal distribution.\n            spks (bool, optional): speaker ids.\n                shape: (batch_size,)\n            length_scale (float, optional): controls speech pace.\n                Increase value to slow down generated speech and vice versa.\n\n        Returns:\n            dict: {\n                \"encoder_outputs\": torch.Tensor, shape: (batch_size, n_feats, max_mel_length),\n                # Average mel spectrogram generated by the encoder\n                \"decoder_outputs\": torch.Tensor, shape: (batch_size, n_feats, max_mel_length),\n                # Refined mel spectrogram improved by the CFM\n                \"attn\": torch.Tensor, shape: (batch_size, max_text_length, max_mel_length),\n                # Alignment map between text and mel spectrogram\n                \"mel\": torch.Tensor, shape: (batch_size, n_feats, max_mel_length),\n                # Denormalized mel spectrogram\n                \"mel_lengths\": torch.Tensor, shape: (batch_size,),\n                # Lengths of mel spectrograms\n                \"rtf\": float,\n                # Real-time factor\n        \"\"\"\n        # For RTF computation\n        t = dt.datetime.now()\n\n        if self.n_spks > 1:\n            # Get speaker embedding\n            spks = self.spk_emb(spks.long())\n\n        # Get encoder_outputs `mu_x` and log-scaled token durations `logw`\n        mu_x, logw, x_mask = self.encoder(x, x_lengths, spks)\n\n        w = torch.exp(logw) * x_mask\n        w_ceil = torch.ceil(w) * length_scale\n        y_lengths = torch.clamp_min(torch.sum(w_ceil, [1, 2]), 1).long()\n        y_max_length = y_lengths.max()\n        y_max_length_ = fix_len_compatibility(y_max_length)\n\n        # Using obtained durations `w` construct alignment map `attn`\n        y_mask = sequence_mask(y_lengths, y_max_length_).unsqueeze(1).to(x_mask.dtype)\n        attn_mask = x_mask.unsqueeze(-1) * y_mask.unsqueeze(2)\n        attn = generate_path(w_ceil.squeeze(1), attn_mask.squeeze(1)).unsqueeze(1)\n\n        # Align encoded text and get mu_y\n        mu_y = torch.matmul(attn.squeeze(1).transpose(1, 2), mu_x.transpose(1, 2))\n        mu_y = mu_y.transpose(1, 2)\n        encoder_outputs = mu_y[:, :, :y_max_length]\n\n        # Generate sample tracing the probability flow\n        decoder_outputs = self.decoder(mu_y, y_mask, n_timesteps, temperature, spks)\n        decoder_outputs = decoder_outputs[:, :, :y_max_length]\n\n        t = (dt.datetime.now() - t).total_seconds()\n        rtf = t * 22050 / (decoder_outputs.shape[-1] * 256)\n\n        return {\n            \"encoder_outputs\": encoder_outputs,\n            \"decoder_outputs\": decoder_outputs,\n            \"attn\": attn[:, :, :y_max_length],\n            \"mel\": denormalize(decoder_outputs, self.mel_mean, self.mel_std),\n            \"mel_lengths\": y_lengths,\n            \"rtf\": rtf,\n        }\n\n    def forward(self, x, x_lengths, y, y_lengths, spks=None, out_size=None, cond=None, durations=None):\n        \"\"\"\n        Computes 3 losses:\n            1. duration loss: loss between predicted token durations and those extracted by Monotinic Alignment Search (MAS).\n            2. prior loss: loss between mel-spectrogram and encoder outputs.\n            3. flow matching loss: loss between mel-spectrogram and decoder outputs.\n\n        Args:\n            x (torch.Tensor): batch of texts, converted to a tensor with phoneme embedding ids.\n                shape: (batch_size, max_text_length)\n            x_lengths (torch.Tensor): lengths of texts in batch.\n                shape: (batch_size,)\n            y (torch.Tensor): batch of corresponding mel-spectrograms.\n                shape: (batch_size, n_feats, max_mel_length)\n            y_lengths (torch.Tensor): lengths of mel-spectrograms in batch.\n                shape: (batch_size,)\n            out_size (int, optional): length (in mel's sampling rate) of segment to cut, on which decoder will be trained.\n                Should be divisible by 2^{num of UNet downsamplings}. Needed to increase batch size.\n            spks (torch.Tensor, optional): speaker ids.\n                shape: (batch_size,)\n        \"\"\"\n        if self.n_spks > 1:\n            # Get speaker embedding\n            spks = self.spk_emb(spks)\n\n        # Get encoder_outputs `mu_x` and log-scaled token durations `logw`\n        mu_x, logw, x_mask = self.encoder(x, x_lengths, spks)\n        y_max_length = y.shape[-1]\n\n        y_mask = sequence_mask(y_lengths, y_max_length).unsqueeze(1).to(x_mask)\n        attn_mask = x_mask.unsqueeze(-1) * y_mask.unsqueeze(2)\n\n        if self.use_precomputed_durations:\n            attn = generate_path(durations.squeeze(1), attn_mask.squeeze(1))\n        else:\n            # Use MAS to find most likely alignment `attn` between text and mel-spectrogram\n            with torch.no_grad():\n                const = -0.5 * math.log(2 * math.pi) * self.n_feats\n                factor = -0.5 * torch.ones(mu_x.shape, dtype=mu_x.dtype, device=mu_x.device)\n                y_square = torch.matmul(factor.transpose(1, 2), y**2)\n                y_mu_double = torch.matmul(2.0 * (factor * mu_x).transpose(1, 2), y)\n                mu_square = torch.sum(factor * (mu_x**2), 1).unsqueeze(-1)\n                log_prior = y_square - y_mu_double + mu_square + const\n\n                attn = monotonic_align.maximum_path(log_prior, attn_mask.squeeze(1))\n                attn = attn.detach()  # b, t_text, T_mel\n\n        # Compute loss between predicted log-scaled durations and those obtained from MAS\n        # refered to as prior loss in the paper\n        logw_ = torch.log(1e-8 + torch.sum(attn.unsqueeze(1), -1)) * x_mask\n        dur_loss = duration_loss(logw, logw_, x_lengths)\n\n        # Cut a small segment of mel-spectrogram in order to increase batch size\n        #   - \"Hack\" taken from Grad-TTS, in case of Grad-TTS, we cannot train batch size 32 on a 24GB GPU without it\n        #   - Do not need this hack for Matcha-TTS, but it works with it as well\n        if not isinstance(out_size, type(None)):\n            max_offset = (y_lengths - out_size).clamp(0)\n            offset_ranges = list(zip([0] * max_offset.shape[0], max_offset.cpu().numpy()))\n            out_offset = torch.LongTensor(\n                [torch.tensor(random.choice(range(start, end)) if end > start else 0) for start, end in offset_ranges]\n            ).to(y_lengths)\n            attn_cut = torch.zeros(attn.shape[0], attn.shape[1], out_size, dtype=attn.dtype, device=attn.device)\n            y_cut = torch.zeros(y.shape[0], self.n_feats, out_size, dtype=y.dtype, device=y.device)\n\n            y_cut_lengths = []\n            for i, (y_, out_offset_) in enumerate(zip(y, out_offset)):\n                y_cut_length = out_size + (y_lengths[i] - out_size).clamp(None, 0)\n                y_cut_lengths.append(y_cut_length)\n                cut_lower, cut_upper = out_offset_, out_offset_ + y_cut_length\n                y_cut[i, :, :y_cut_length] = y_[:, cut_lower:cut_upper]\n                attn_cut[i, :, :y_cut_length] = attn[i, :, cut_lower:cut_upper]\n\n            y_cut_lengths = torch.LongTensor(y_cut_lengths)\n            y_cut_mask = sequence_mask(y_cut_lengths).unsqueeze(1).to(y_mask)\n\n            attn = attn_cut\n            y = y_cut\n            y_mask = y_cut_mask\n\n        # Align encoded text with mel-spectrogram and get mu_y segment\n        mu_y = torch.matmul(attn.squeeze(1).transpose(1, 2), mu_x.transpose(1, 2))\n        mu_y = mu_y.transpose(1, 2)\n\n        # Compute loss of the decoder\n        diff_loss, _ = self.decoder.compute_loss(x1=y, mask=y_mask, mu=mu_y, spks=spks, cond=cond)\n\n        if self.prior_loss:\n            prior_loss = torch.sum(0.5 * ((y - mu_y) ** 2 + math.log(2 * math.pi)) * y_mask)\n            prior_loss = prior_loss / (torch.sum(y_mask) * self.n_feats)\n        else:\n            prior_loss = 0\n\n        return dur_loss, prior_loss, diff_loss, attn\n"
  },
  {
    "path": "xinference/thirdparty/matcha/onnx/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/matcha/onnx/export.py",
    "content": "import argparse\nimport random\nfrom pathlib import Path\n\nimport numpy as np\nimport torch\nfrom lightning import LightningModule\n\nfrom matcha.cli import VOCODER_URLS, load_matcha, load_vocoder\n\nDEFAULT_OPSET = 15\n\nSEED = 1234\nrandom.seed(SEED)\nnp.random.seed(SEED)\ntorch.manual_seed(SEED)\ntorch.cuda.manual_seed(SEED)\ntorch.backends.cudnn.deterministic = True\ntorch.backends.cudnn.benchmark = False\n\n\nclass MatchaWithVocoder(LightningModule):\n    def __init__(self, matcha, vocoder):\n        super().__init__()\n        self.matcha = matcha\n        self.vocoder = vocoder\n\n    def forward(self, x, x_lengths, scales, spks=None):\n        mel, mel_lengths = self.matcha(x, x_lengths, scales, spks)\n        wavs = self.vocoder(mel).clamp(-1, 1)\n        lengths = mel_lengths * 256\n        return wavs.squeeze(1), lengths\n\n\ndef get_exportable_module(matcha, vocoder, n_timesteps):\n    \"\"\"\n    Return an appropriate `LighteningModule` and output-node names\n    based on whether the vocoder is embedded in  the final graph\n    \"\"\"\n\n    def onnx_forward_func(x, x_lengths, scales, spks=None):\n        \"\"\"\n        Custom forward function for accepting\n        scaler parameters as tensors\n        \"\"\"\n        # Extract scaler parameters from tensors\n        temperature = scales[0]\n        length_scale = scales[1]\n        output = matcha.synthesise(x, x_lengths, n_timesteps, temperature, spks, length_scale)\n        return output[\"mel\"], output[\"mel_lengths\"]\n\n    # Monkey-patch Matcha's forward function\n    matcha.forward = onnx_forward_func\n\n    if vocoder is None:\n        model, output_names = matcha, [\"mel\", \"mel_lengths\"]\n    else:\n        model = MatchaWithVocoder(matcha, vocoder)\n        output_names = [\"wav\", \"wav_lengths\"]\n    return model, output_names\n\n\ndef get_inputs(is_multi_speaker):\n    \"\"\"\n    Create dummy inputs for tracing\n    \"\"\"\n    dummy_input_length = 50\n    x = torch.randint(low=0, high=20, size=(1, dummy_input_length), dtype=torch.long)\n    x_lengths = torch.LongTensor([dummy_input_length])\n\n    # Scales\n    temperature = 0.667\n    length_scale = 1.0\n    scales = torch.Tensor([temperature, length_scale])\n\n    model_inputs = [x, x_lengths, scales]\n    input_names = [\n        \"x\",\n        \"x_lengths\",\n        \"scales\",\n    ]\n\n    if is_multi_speaker:\n        spks = torch.LongTensor([1])\n        model_inputs.append(spks)\n        input_names.append(\"spks\")\n\n    return tuple(model_inputs), input_names\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"Export 🍵 Matcha-TTS to ONNX\")\n\n    parser.add_argument(\n        \"checkpoint_path\",\n        type=str,\n        help=\"Path to the model checkpoint\",\n    )\n    parser.add_argument(\"output\", type=str, help=\"Path to output `.onnx` file\")\n    parser.add_argument(\n        \"--n-timesteps\", type=int, default=5, help=\"Number of steps to use for reverse diffusion in decoder (default 5)\"\n    )\n    parser.add_argument(\n        \"--vocoder-name\",\n        type=str,\n        choices=list(VOCODER_URLS.keys()),\n        default=None,\n        help=\"Name of the vocoder to embed in the ONNX graph\",\n    )\n    parser.add_argument(\n        \"--vocoder-checkpoint-path\",\n        type=str,\n        default=None,\n        help=\"Vocoder checkpoint to embed  in the ONNX graph for an `e2e` like experience\",\n    )\n    parser.add_argument(\"--opset\", type=int, default=DEFAULT_OPSET, help=\"ONNX opset version to use (default 15\")\n\n    args = parser.parse_args()\n\n    print(f\"[🍵] Loading Matcha checkpoint from {args.checkpoint_path}\")\n    print(f\"Setting n_timesteps to {args.n_timesteps}\")\n\n    checkpoint_path = Path(args.checkpoint_path)\n    matcha = load_matcha(checkpoint_path.stem, checkpoint_path, \"cpu\")\n\n    if args.vocoder_name or args.vocoder_checkpoint_path:\n        assert (\n            args.vocoder_name and args.vocoder_checkpoint_path\n        ), \"Both vocoder_name and vocoder-checkpoint are required when embedding the vocoder in the ONNX graph.\"\n        vocoder, _ = load_vocoder(args.vocoder_name, args.vocoder_checkpoint_path, \"cpu\")\n    else:\n        vocoder = None\n\n    is_multi_speaker = matcha.n_spks > 1\n\n    dummy_input, input_names = get_inputs(is_multi_speaker)\n    model, output_names = get_exportable_module(matcha, vocoder, args.n_timesteps)\n\n    # Set dynamic shape for inputs/outputs\n    dynamic_axes = {\n        \"x\": {0: \"batch_size\", 1: \"time\"},\n        \"x_lengths\": {0: \"batch_size\"},\n    }\n\n    if vocoder is None:\n        dynamic_axes.update(\n            {\n                \"mel\": {0: \"batch_size\", 2: \"time\"},\n                \"mel_lengths\": {0: \"batch_size\"},\n            }\n        )\n    else:\n        print(\"Embedding the vocoder in the ONNX graph\")\n        dynamic_axes.update(\n            {\n                \"wav\": {0: \"batch_size\", 1: \"time\"},\n                \"wav_lengths\": {0: \"batch_size\"},\n            }\n        )\n\n    if is_multi_speaker:\n        dynamic_axes[\"spks\"] = {0: \"batch_size\"}\n\n    # Create the output directory (if not exists)\n    Path(args.output).parent.mkdir(parents=True, exist_ok=True)\n\n    model.to_onnx(\n        args.output,\n        dummy_input,\n        input_names=input_names,\n        output_names=output_names,\n        dynamic_axes=dynamic_axes,\n        opset_version=args.opset,\n        export_params=True,\n        do_constant_folding=True,\n    )\n    print(f\"[🍵] ONNX model exported to  {args.output}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/matcha/onnx/infer.py",
    "content": "import argparse\nimport os\nimport warnings\nfrom pathlib import Path\nfrom time import perf_counter\n\nimport numpy as np\nimport onnxruntime as ort\nimport soundfile as sf\nimport torch\n\nfrom matcha.cli import plot_spectrogram_to_numpy, process_text\n\n\ndef validate_args(args):\n    assert (\n        args.text or args.file\n    ), \"Either text or file must be provided Matcha-T(ea)TTS need sometext to whisk the waveforms.\"\n    assert args.temperature >= 0, \"Sampling temperature cannot be negative\"\n    assert args.speaking_rate >= 0, \"Speaking rate must be greater than 0\"\n    return args\n\n\ndef write_wavs(model, inputs, output_dir, external_vocoder=None):\n    if external_vocoder is None:\n        print(\"The provided model has the vocoder embedded in the graph.\\nGenerating waveform directly\")\n        t0 = perf_counter()\n        wavs, wav_lengths = model.run(None, inputs)\n        infer_secs = perf_counter() - t0\n        mel_infer_secs = vocoder_infer_secs = None\n    else:\n        print(\"[🍵] Generating mel using Matcha\")\n        mel_t0 = perf_counter()\n        mels, mel_lengths = model.run(None, inputs)\n        mel_infer_secs = perf_counter() - mel_t0\n        print(\"Generating waveform from mel using external vocoder\")\n        vocoder_inputs = {external_vocoder.get_inputs()[0].name: mels}\n        vocoder_t0 = perf_counter()\n        wavs = external_vocoder.run(None, vocoder_inputs)[0]\n        vocoder_infer_secs = perf_counter() - vocoder_t0\n        wavs = wavs.squeeze(1)\n        wav_lengths = mel_lengths * 256\n        infer_secs = mel_infer_secs + vocoder_infer_secs\n\n    output_dir = Path(output_dir)\n    output_dir.mkdir(parents=True, exist_ok=True)\n    for i, (wav, wav_length) in enumerate(zip(wavs, wav_lengths)):\n        output_filename = output_dir.joinpath(f\"output_{i + 1}.wav\")\n        audio = wav[:wav_length]\n        print(f\"Writing audio to {output_filename}\")\n        sf.write(output_filename, audio, 22050, \"PCM_24\")\n\n    wav_secs = wav_lengths.sum() / 22050\n    print(f\"Inference seconds: {infer_secs}\")\n    print(f\"Generated wav seconds: {wav_secs}\")\n    rtf = infer_secs / wav_secs\n    if mel_infer_secs is not None:\n        mel_rtf = mel_infer_secs / wav_secs\n        print(f\"Matcha RTF: {mel_rtf}\")\n    if vocoder_infer_secs is not None:\n        vocoder_rtf = vocoder_infer_secs / wav_secs\n        print(f\"Vocoder RTF: {vocoder_rtf}\")\n    print(f\"Overall RTF: {rtf}\")\n\n\ndef write_mels(model, inputs, output_dir):\n    t0 = perf_counter()\n    mels, mel_lengths = model.run(None, inputs)\n    infer_secs = perf_counter() - t0\n\n    output_dir = Path(output_dir)\n    output_dir.mkdir(parents=True, exist_ok=True)\n    for i, mel in enumerate(mels):\n        output_stem = output_dir.joinpath(f\"output_{i + 1}\")\n        plot_spectrogram_to_numpy(mel.squeeze(), output_stem.with_suffix(\".png\"))\n        np.save(output_stem.with_suffix(\".numpy\"), mel)\n\n    wav_secs = (mel_lengths * 256).sum() / 22050\n    print(f\"Inference seconds: {infer_secs}\")\n    print(f\"Generated wav seconds: {wav_secs}\")\n    rtf = infer_secs / wav_secs\n    print(f\"RTF: {rtf}\")\n\n\ndef main():\n    parser = argparse.ArgumentParser(\n        description=\" 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching\"\n    )\n    parser.add_argument(\n        \"model\",\n        type=str,\n        help=\"ONNX model to use\",\n    )\n    parser.add_argument(\"--vocoder\", type=str, default=None, help=\"Vocoder to use (defaults to None)\")\n    parser.add_argument(\"--text\", type=str, default=None, help=\"Text to synthesize\")\n    parser.add_argument(\"--file\", type=str, default=None, help=\"Text file to synthesize\")\n    parser.add_argument(\"--spk\", type=int, default=None, help=\"Speaker ID\")\n    parser.add_argument(\n        \"--temperature\",\n        type=float,\n        default=0.667,\n        help=\"Variance of the x0 noise (default: 0.667)\",\n    )\n    parser.add_argument(\n        \"--speaking-rate\",\n        type=float,\n        default=1.0,\n        help=\"change the speaking rate, a higher value means slower speaking rate (default: 1.0)\",\n    )\n    parser.add_argument(\"--gpu\", action=\"store_true\", help=\"Use CPU for inference (default: use GPU if available)\")\n    parser.add_argument(\n        \"--output-dir\",\n        type=str,\n        default=os.getcwd(),\n        help=\"Output folder to save results (default: current dir)\",\n    )\n\n    args = parser.parse_args()\n    args = validate_args(args)\n\n    if args.gpu:\n        providers = [\"GPUExecutionProvider\"]\n    else:\n        providers = [\"CPUExecutionProvider\"]\n    model = ort.InferenceSession(args.model, providers=providers)\n\n    model_inputs = model.get_inputs()\n    model_outputs = list(model.get_outputs())\n\n    if args.text:\n        text_lines = args.text.splitlines()\n    else:\n        with open(args.file, encoding=\"utf-8\") as file:\n            text_lines = file.read().splitlines()\n\n    processed_lines = [process_text(0, line, \"cpu\") for line in text_lines]\n    x = [line[\"x\"].squeeze() for line in processed_lines]\n    # Pad\n    x = torch.nn.utils.rnn.pad_sequence(x, batch_first=True)\n    x = x.detach().cpu().numpy()\n    x_lengths = np.array([line[\"x_lengths\"].item() for line in processed_lines], dtype=np.int64)\n    inputs = {\n        \"x\": x,\n        \"x_lengths\": x_lengths,\n        \"scales\": np.array([args.temperature, args.speaking_rate], dtype=np.float32),\n    }\n    is_multi_speaker = len(model_inputs) == 4\n    if is_multi_speaker:\n        if args.spk is None:\n            args.spk = 0\n            warn = \"[!] Speaker ID not provided! Using speaker ID 0\"\n            warnings.warn(warn, UserWarning)\n        inputs[\"spks\"] = np.repeat(args.spk, x.shape[0]).astype(np.int64)\n\n    has_vocoder_embedded = model_outputs[0].name == \"wav\"\n    if has_vocoder_embedded:\n        write_wavs(model, inputs, args.output_dir)\n    elif args.vocoder:\n        external_vocoder = ort.InferenceSession(args.vocoder, providers=providers)\n        write_wavs(model, inputs, args.output_dir, external_vocoder=external_vocoder)\n    else:\n        warn = \"[!] A vocoder is not embedded in the graph nor an external vocoder is provided. The mel output will be written as numpy arrays to `*.npy` files in the output directory\"\n        warnings.warn(warn, UserWarning)\n        write_mels(model, inputs, args.output_dir)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/matcha/text/__init__.py",
    "content": "\"\"\" from https://github.com/keithito/tacotron \"\"\"\nfrom matcha.text import cleaners\nfrom matcha.text.symbols import symbols\n\n# Mappings from symbol to numeric ID and vice versa:\n_symbol_to_id = {s: i for i, s in enumerate(symbols)}\n_id_to_symbol = {i: s for i, s in enumerate(symbols)}  # pylint: disable=unnecessary-comprehension\n\n\ndef text_to_sequence(text, cleaner_names):\n    \"\"\"Converts a string of text to a sequence of IDs corresponding to the symbols in the text.\n    Args:\n      text: string to convert to a sequence\n      cleaner_names: names of the cleaner functions to run the text through\n    Returns:\n      List of integers corresponding to the symbols in the text\n    \"\"\"\n    sequence = []\n\n    clean_text = _clean_text(text, cleaner_names)\n    for symbol in clean_text:\n        symbol_id = _symbol_to_id[symbol]\n        sequence += [symbol_id]\n    return sequence, clean_text\n\n\ndef cleaned_text_to_sequence(cleaned_text):\n    \"\"\"Converts a string of text to a sequence of IDs corresponding to the symbols in the text.\n    Args:\n      text: string to convert to a sequence\n    Returns:\n      List of integers corresponding to the symbols in the text\n    \"\"\"\n    sequence = [_symbol_to_id[symbol] for symbol in cleaned_text]\n    return sequence\n\n\ndef sequence_to_text(sequence):\n    \"\"\"Converts a sequence of IDs back to a string\"\"\"\n    result = \"\"\n    for symbol_id in sequence:\n        s = _id_to_symbol[symbol_id]\n        result += s\n    return result\n\n\ndef _clean_text(text, cleaner_names):\n    for name in cleaner_names:\n        cleaner = getattr(cleaners, name)\n        if not cleaner:\n            raise Exception(\"Unknown cleaner: %s\" % name)\n        text = cleaner(text)\n    return text\n"
  },
  {
    "path": "xinference/thirdparty/matcha/text/cleaners.py",
    "content": "\"\"\" from https://github.com/keithito/tacotron\n\nCleaners are transformations that run over the input text at both training and eval time.\n\nCleaners can be selected by passing a comma-delimited list of cleaner names as the \"cleaners\"\nhyperparameter. Some cleaners are English-specific. You'll typically want to use:\n  1. \"english_cleaners\" for English text\n  2. \"transliteration_cleaners\" for non-English text that can be transliterated to ASCII using\n     the Unidecode library (https://pypi.python.org/pypi/Unidecode)\n  3. \"basic_cleaners\" if you do not want to transliterate (in this case, you should also update\n     the symbols in symbols.py to match your data).\n\"\"\"\n\nimport logging\nimport re\n\nimport phonemizer\nfrom unidecode import unidecode\n\n# To avoid excessive logging we set the log level of the phonemizer package to Critical\ncritical_logger = logging.getLogger(\"phonemizer\")\ncritical_logger.setLevel(logging.CRITICAL)\n\n# Intializing the phonemizer globally significantly reduces the speed\n# now the phonemizer is not initialising at every call\n# Might be less flexible, but it is much-much faster\nglobal_phonemizer = phonemizer.backend.EspeakBackend(\n    language=\"en-us\",\n    preserve_punctuation=True,\n    with_stress=True,\n    language_switch=\"remove-flags\",\n    logger=critical_logger,\n)\n\n\n# Regular expression matching whitespace:\n_whitespace_re = re.compile(r\"\\s+\")\n\n# List of (regular expression, replacement) pairs for abbreviations:\n_abbreviations = [\n    (re.compile(\"\\\\b%s\\\\.\" % x[0], re.IGNORECASE), x[1])\n    for x in [\n        (\"mrs\", \"misess\"),\n        (\"mr\", \"mister\"),\n        (\"dr\", \"doctor\"),\n        (\"st\", \"saint\"),\n        (\"co\", \"company\"),\n        (\"jr\", \"junior\"),\n        (\"maj\", \"major\"),\n        (\"gen\", \"general\"),\n        (\"drs\", \"doctors\"),\n        (\"rev\", \"reverend\"),\n        (\"lt\", \"lieutenant\"),\n        (\"hon\", \"honorable\"),\n        (\"sgt\", \"sergeant\"),\n        (\"capt\", \"captain\"),\n        (\"esq\", \"esquire\"),\n        (\"ltd\", \"limited\"),\n        (\"col\", \"colonel\"),\n        (\"ft\", \"fort\"),\n    ]\n]\n\n\ndef expand_abbreviations(text):\n    for regex, replacement in _abbreviations:\n        text = re.sub(regex, replacement, text)\n    return text\n\n\ndef lowercase(text):\n    return text.lower()\n\n\ndef collapse_whitespace(text):\n    return re.sub(_whitespace_re, \" \", text)\n\n\ndef convert_to_ascii(text):\n    return unidecode(text)\n\n\ndef basic_cleaners(text):\n    \"\"\"Basic pipeline that lowercases and collapses whitespace without transliteration.\"\"\"\n    text = lowercase(text)\n    text = collapse_whitespace(text)\n    return text\n\n\ndef transliteration_cleaners(text):\n    \"\"\"Pipeline for non-English text that transliterates to ASCII.\"\"\"\n    text = convert_to_ascii(text)\n    text = lowercase(text)\n    text = collapse_whitespace(text)\n    return text\n\n\ndef english_cleaners2(text):\n    \"\"\"Pipeline for English text, including abbreviation expansion. + punctuation + stress\"\"\"\n    text = convert_to_ascii(text)\n    text = lowercase(text)\n    text = expand_abbreviations(text)\n    phonemes = global_phonemizer.phonemize([text], strip=True, njobs=1)[0]\n    phonemes = collapse_whitespace(phonemes)\n    return phonemes\n\n\n# I am removing this due to incompatibility with several version of python\n# However, if you want to use it, you can uncomment it\n# and install piper-phonemize with the following command:\n# pip install piper-phonemize\n\n# import piper_phonemize\n# def english_cleaners_piper(text):\n#     \"\"\"Pipeline for English text, including abbreviation expansion. + punctuation + stress\"\"\"\n#     text = convert_to_ascii(text)\n#     text = lowercase(text)\n#     text = expand_abbreviations(text)\n#     phonemes = \"\".join(piper_phonemize.phonemize_espeak(text=text, voice=\"en-US\")[0])\n#     phonemes = collapse_whitespace(phonemes)\n#     return phonemes\n"
  },
  {
    "path": "xinference/thirdparty/matcha/text/numbers.py",
    "content": "\"\"\" from https://github.com/keithito/tacotron \"\"\"\n\nimport re\n\nimport inflect\n\n_inflect = inflect.engine()\n_comma_number_re = re.compile(r\"([0-9][0-9\\,]+[0-9])\")\n_decimal_number_re = re.compile(r\"([0-9]+\\.[0-9]+)\")\n_pounds_re = re.compile(r\"£([0-9\\,]*[0-9]+)\")\n_dollars_re = re.compile(r\"\\$([0-9\\.\\,]*[0-9]+)\")\n_ordinal_re = re.compile(r\"[0-9]+(st|nd|rd|th)\")\n_number_re = re.compile(r\"[0-9]+\")\n\n\ndef _remove_commas(m):\n    return m.group(1).replace(\",\", \"\")\n\n\ndef _expand_decimal_point(m):\n    return m.group(1).replace(\".\", \" point \")\n\n\ndef _expand_dollars(m):\n    match = m.group(1)\n    parts = match.split(\".\")\n    if len(parts) > 2:\n        return match + \" dollars\"\n    dollars = int(parts[0]) if parts[0] else 0\n    cents = int(parts[1]) if len(parts) > 1 and parts[1] else 0\n    if dollars and cents:\n        dollar_unit = \"dollar\" if dollars == 1 else \"dollars\"\n        cent_unit = \"cent\" if cents == 1 else \"cents\"\n        return f\"{dollars} {dollar_unit}, {cents} {cent_unit}\"\n    elif dollars:\n        dollar_unit = \"dollar\" if dollars == 1 else \"dollars\"\n        return f\"{dollars} {dollar_unit}\"\n    elif cents:\n        cent_unit = \"cent\" if cents == 1 else \"cents\"\n        return f\"{cents} {cent_unit}\"\n    else:\n        return \"zero dollars\"\n\n\ndef _expand_ordinal(m):\n    return _inflect.number_to_words(m.group(0))\n\n\ndef _expand_number(m):\n    num = int(m.group(0))\n    if num > 1000 and num < 3000:\n        if num == 2000:\n            return \"two thousand\"\n        elif num > 2000 and num < 2010:\n            return \"two thousand \" + _inflect.number_to_words(num % 100)\n        elif num % 100 == 0:\n            return _inflect.number_to_words(num // 100) + \" hundred\"\n        else:\n            return _inflect.number_to_words(num, andword=\"\", zero=\"oh\", group=2).replace(\", \", \" \")\n    else:\n        return _inflect.number_to_words(num, andword=\"\")\n\n\ndef normalize_numbers(text):\n    text = re.sub(_comma_number_re, _remove_commas, text)\n    text = re.sub(_pounds_re, r\"\\1 pounds\", text)\n    text = re.sub(_dollars_re, _expand_dollars, text)\n    text = re.sub(_decimal_number_re, _expand_decimal_point, text)\n    text = re.sub(_ordinal_re, _expand_ordinal, text)\n    text = re.sub(_number_re, _expand_number, text)\n    return text\n"
  },
  {
    "path": "xinference/thirdparty/matcha/text/symbols.py",
    "content": "\"\"\" from https://github.com/keithito/tacotron\n\nDefines the set of symbols used in text input to the model.\n\"\"\"\n_pad = \"_\"\n_punctuation = ';:,.!?¡¿—…\"«»“” '\n_letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\"\n_letters_ipa = (\n    \"ɑɐɒæɓʙβɔɕçɗɖðʤəɘɚɛɜɝɞɟʄɡɠɢʛɦɧħɥʜɨɪʝɭɬɫɮʟɱɯɰŋɳɲɴøɵɸθœɶʘɹɺɾɻʀʁɽʂʃʈʧʉʊʋⱱʌɣɤʍχʎʏʑʐʒʔʡʕʢǀǁǂǃˈˌːˑʼʴʰʱʲʷˠˤ˞↓↑→↗↘'̩'ᵻ\"\n)\n\n\n# Export all symbols:\nsymbols = [_pad] + list(_punctuation) + list(_letters) + list(_letters_ipa)\n\n# Special symbol ids\nSPACE_ID = symbols.index(\" \")\n"
  },
  {
    "path": "xinference/thirdparty/matcha/train.py",
    "content": "from typing import Any, Dict, List, Optional, Tuple\n\nimport hydra\nimport lightning as L\nimport rootutils\nfrom lightning import Callback, LightningDataModule, LightningModule, Trainer\nfrom lightning.pytorch.loggers import Logger\nfrom omegaconf import DictConfig\n\nfrom matcha import utils\n\nrootutils.setup_root(__file__, indicator=\".project-root\", pythonpath=True)\n# ------------------------------------------------------------------------------------ #\n# the setup_root above is equivalent to:\n# - adding project root dir to PYTHONPATH\n#       (so you don't need to force user to install project as a package)\n#       (necessary before importing any local modules e.g. `from src import utils`)\n# - setting up PROJECT_ROOT environment variable\n#       (which is used as a base for paths in \"configs/paths/default.yaml\")\n#       (this way all filepaths are the same no matter where you run the code)\n# - loading environment variables from \".env\" in root dir\n#\n# you can remove it if you:\n# 1. either install project as a package or move entry files to project root dir\n# 2. set `root_dir` to \".\" in \"configs/paths/default.yaml\"\n#\n# more info: https://github.com/ashleve/rootutils\n# ------------------------------------------------------------------------------------ #\n\n\nlog = utils.get_pylogger(__name__)\n\n\n@utils.task_wrapper\ndef train(cfg: DictConfig) -> Tuple[Dict[str, Any], Dict[str, Any]]:\n    \"\"\"Trains the model. Can additionally evaluate on a testset, using best weights obtained during\n    training.\n\n    This method is wrapped in optional @task_wrapper decorator, that controls the behavior during\n    failure. Useful for multiruns, saving info about the crash, etc.\n\n    :param cfg: A DictConfig configuration composed by Hydra.\n    :return: A tuple with metrics and dict with all instantiated objects.\n    \"\"\"\n    # set seed for random number generators in pytorch, numpy and python.random\n    if cfg.get(\"seed\"):\n        L.seed_everything(cfg.seed, workers=True)\n\n    log.info(f\"Instantiating datamodule <{cfg.data._target_}>\")  # pylint: disable=protected-access\n    datamodule: LightningDataModule = hydra.utils.instantiate(cfg.data)\n\n    log.info(f\"Instantiating model <{cfg.model._target_}>\")  # pylint: disable=protected-access\n    model: LightningModule = hydra.utils.instantiate(cfg.model)\n\n    log.info(\"Instantiating callbacks...\")\n    callbacks: List[Callback] = utils.instantiate_callbacks(cfg.get(\"callbacks\"))\n\n    log.info(\"Instantiating loggers...\")\n    logger: List[Logger] = utils.instantiate_loggers(cfg.get(\"logger\"))\n\n    log.info(f\"Instantiating trainer <{cfg.trainer._target_}>\")  # pylint: disable=protected-access\n    trainer: Trainer = hydra.utils.instantiate(cfg.trainer, callbacks=callbacks, logger=logger)\n\n    object_dict = {\n        \"cfg\": cfg,\n        \"datamodule\": datamodule,\n        \"model\": model,\n        \"callbacks\": callbacks,\n        \"logger\": logger,\n        \"trainer\": trainer,\n    }\n\n    if logger:\n        log.info(\"Logging hyperparameters!\")\n        utils.log_hyperparameters(object_dict)\n\n    if cfg.get(\"train\"):\n        log.info(\"Starting training!\")\n        trainer.fit(model=model, datamodule=datamodule, ckpt_path=cfg.get(\"ckpt_path\"))\n\n    train_metrics = trainer.callback_metrics\n\n    if cfg.get(\"test\"):\n        log.info(\"Starting testing!\")\n        ckpt_path = trainer.checkpoint_callback.best_model_path\n        if ckpt_path == \"\":\n            log.warning(\"Best ckpt not found! Using current weights for testing...\")\n            ckpt_path = None\n        trainer.test(model=model, datamodule=datamodule, ckpt_path=ckpt_path)\n        log.info(f\"Best ckpt path: {ckpt_path}\")\n\n    test_metrics = trainer.callback_metrics\n\n    # merge train and test metrics\n    metric_dict = {**train_metrics, **test_metrics}\n\n    return metric_dict, object_dict\n\n\n@hydra.main(version_base=\"1.3\", config_path=\"../configs\", config_name=\"train.yaml\")\ndef main(cfg: DictConfig) -> Optional[float]:\n    \"\"\"Main entry point for training.\n\n    :param cfg: DictConfig configuration composed by Hydra.\n    :return: Optional[float] with optimized metric value.\n    \"\"\"\n    # apply extra utilities\n    # (e.g. ask for tags if none are provided in cfg, print cfg tree, etc.)\n    utils.extras(cfg)\n\n    # train the model\n    metric_dict, _ = train(cfg)\n\n    # safely retrieve metric value for hydra-based hyperparameter optimization\n    metric_value = utils.get_metric_value(metric_dict=metric_dict, metric_name=cfg.get(\"optimized_metric\"))\n\n    # return optimized metric\n    return metric_value\n\n\nif __name__ == \"__main__\":\n    main()  # pylint: disable=no-value-for-parameter\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/__init__.py",
    "content": "from matcha.utils.instantiators import instantiate_callbacks, instantiate_loggers\nfrom matcha.utils.logging_utils import log_hyperparameters\nfrom matcha.utils.pylogger import get_pylogger\nfrom matcha.utils.rich_utils import enforce_tags, print_config_tree\nfrom matcha.utils.utils import extras, get_metric_value, task_wrapper\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/audio.py",
    "content": "import numpy as np\nimport torch\nimport torch.utils.data\nfrom librosa.filters import mel as librosa_mel_fn\nfrom scipy.io.wavfile import read\n\nMAX_WAV_VALUE = 32768.0\n\n\ndef load_wav(full_path):\n    sampling_rate, data = read(full_path)\n    return data, sampling_rate\n\n\ndef dynamic_range_compression(x, C=1, clip_val=1e-5):\n    return np.log(np.clip(x, a_min=clip_val, a_max=None) * C)\n\n\ndef dynamic_range_decompression(x, C=1):\n    return np.exp(x) / C\n\n\ndef dynamic_range_compression_torch(x, C=1, clip_val=1e-5):\n    return torch.log(torch.clamp(x, min=clip_val) * C)\n\n\ndef dynamic_range_decompression_torch(x, C=1):\n    return torch.exp(x) / C\n\n\ndef spectral_normalize_torch(magnitudes):\n    output = dynamic_range_compression_torch(magnitudes)\n    return output\n\n\ndef spectral_de_normalize_torch(magnitudes):\n    output = dynamic_range_decompression_torch(magnitudes)\n    return output\n\n\nmel_basis = {}\nhann_window = {}\n\n\ndef mel_spectrogram(y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False):\n    if torch.min(y) < -1.0:\n        print(\"min value is \", torch.min(y))\n    if torch.max(y) > 1.0:\n        print(\"max value is \", torch.max(y))\n\n    global mel_basis, hann_window  # pylint: disable=global-statement\n    if f\"{str(fmax)}_{str(y.device)}\" not in mel_basis:\n        mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax)\n        mel_basis[str(fmax) + \"_\" + str(y.device)] = torch.from_numpy(mel).float().to(y.device)\n        hann_window[str(y.device)] = torch.hann_window(win_size).to(y.device)\n\n    y = torch.nn.functional.pad(\n        y.unsqueeze(1), (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)), mode=\"reflect\"\n    )\n    y = y.squeeze(1)\n\n    spec = torch.view_as_real(\n        torch.stft(\n            y,\n            n_fft,\n            hop_length=hop_size,\n            win_length=win_size,\n            window=hann_window[str(y.device)],\n            center=center,\n            pad_mode=\"reflect\",\n            normalized=False,\n            onesided=True,\n            return_complex=True,\n        )\n    )\n\n    spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9))\n\n    spec = torch.matmul(mel_basis[str(fmax) + \"_\" + str(y.device)], spec)\n    spec = spectral_normalize_torch(spec)\n\n    return spec\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/generate_data_statistics.py",
    "content": "r\"\"\"\nThe file creates a pickle file where the values needed for loading of dataset is stored and the model can load it\nwhen needed.\n\nParameters from hparam.py will be used\n\"\"\"\nimport argparse\nimport json\nimport os\nimport sys\nfrom pathlib import Path\n\nimport rootutils\nimport torch\nfrom hydra import compose, initialize\nfrom omegaconf import open_dict\nfrom tqdm.auto import tqdm\n\nfrom matcha.data.text_mel_datamodule import TextMelDataModule\nfrom matcha.utils.logging_utils import pylogger\n\nlog = pylogger.get_pylogger(__name__)\n\n\ndef compute_data_statistics(data_loader: torch.utils.data.DataLoader, out_channels: int):\n    \"\"\"Generate data mean and standard deviation helpful in data normalisation\n\n    Args:\n        data_loader (torch.utils.data.Dataloader): _description_\n        out_channels (int): mel spectrogram channels\n    \"\"\"\n    total_mel_sum = 0\n    total_mel_sq_sum = 0\n    total_mel_len = 0\n\n    for batch in tqdm(data_loader, leave=False):\n        mels = batch[\"y\"]\n        mel_lengths = batch[\"y_lengths\"]\n\n        total_mel_len += torch.sum(mel_lengths)\n        total_mel_sum += torch.sum(mels)\n        total_mel_sq_sum += torch.sum(torch.pow(mels, 2))\n\n    data_mean = total_mel_sum / (total_mel_len * out_channels)\n    data_std = torch.sqrt((total_mel_sq_sum / (total_mel_len * out_channels)) - torch.pow(data_mean, 2))\n\n    return {\"mel_mean\": data_mean.item(), \"mel_std\": data_std.item()}\n\n\ndef main():\n    parser = argparse.ArgumentParser()\n\n    parser.add_argument(\n        \"-i\",\n        \"--input-config\",\n        type=str,\n        default=\"vctk.yaml\",\n        help=\"The name of the yaml config file under configs/data\",\n    )\n\n    parser.add_argument(\n        \"-b\",\n        \"--batch-size\",\n        type=int,\n        default=\"256\",\n        help=\"Can have increased batch size for faster computation\",\n    )\n\n    parser.add_argument(\n        \"-f\",\n        \"--force\",\n        action=\"store_true\",\n        default=False,\n        required=False,\n        help=\"force overwrite the file\",\n    )\n    args = parser.parse_args()\n    output_file = Path(args.input_config).with_suffix(\".json\")\n\n    if os.path.exists(output_file) and not args.force:\n        print(\"File already exists. Use -f to force overwrite\")\n        sys.exit(1)\n\n    with initialize(version_base=\"1.3\", config_path=\"../../configs/data\"):\n        cfg = compose(config_name=args.input_config, return_hydra_config=True, overrides=[])\n\n    root_path = rootutils.find_root(search_from=__file__, indicator=\".project-root\")\n\n    with open_dict(cfg):\n        del cfg[\"hydra\"]\n        del cfg[\"_target_\"]\n        cfg[\"data_statistics\"] = None\n        cfg[\"seed\"] = 1234\n        cfg[\"batch_size\"] = args.batch_size\n        cfg[\"train_filelist_path\"] = str(os.path.join(root_path, cfg[\"train_filelist_path\"]))\n        cfg[\"valid_filelist_path\"] = str(os.path.join(root_path, cfg[\"valid_filelist_path\"]))\n        cfg[\"load_durations\"] = False\n\n    text_mel_datamodule = TextMelDataModule(**cfg)\n    text_mel_datamodule.setup()\n    data_loader = text_mel_datamodule.train_dataloader()\n    log.info(\"Dataloader loaded! Now computing stats...\")\n    params = compute_data_statistics(data_loader, cfg[\"n_feats\"])\n    print(params)\n    json.dump(\n        params,\n        open(output_file, \"w\"),\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/get_durations_from_trained_model.py",
    "content": "r\"\"\"\nThe file creates a pickle file where the values needed for loading of dataset is stored and the model can load it\nwhen needed.\n\nParameters from hparam.py will be used\n\"\"\"\nimport argparse\nimport json\nimport os\nimport sys\nfrom pathlib import Path\n\nimport lightning\nimport numpy as np\nimport rootutils\nimport torch\nfrom hydra import compose, initialize\nfrom omegaconf import open_dict\nfrom torch import nn\nfrom tqdm.auto import tqdm\n\nfrom matcha.cli import get_device\nfrom matcha.data.text_mel_datamodule import TextMelDataModule\nfrom matcha.models.matcha_tts import MatchaTTS\nfrom matcha.utils.logging_utils import pylogger\nfrom matcha.utils.utils import get_phoneme_durations\n\nlog = pylogger.get_pylogger(__name__)\n\n\ndef save_durations_to_folder(\n    attn: torch.Tensor, x_length: int, y_length: int, filepath: str, output_folder: Path, text: str\n):\n    durations = attn.squeeze().sum(1)[:x_length].numpy()\n    durations_json = get_phoneme_durations(durations, text)\n    output = output_folder / Path(filepath).name.replace(\".wav\", \".npy\")\n    with open(output.with_suffix(\".json\"), \"w\", encoding=\"utf-8\") as f:\n        json.dump(durations_json, f, indent=4, ensure_ascii=False)\n\n    np.save(output, durations)\n\n\n@torch.inference_mode()\ndef compute_durations(data_loader: torch.utils.data.DataLoader, model: nn.Module, device: torch.device, output_folder):\n    \"\"\"Generate durations from the model for each datapoint and save it in a folder\n\n    Args:\n        data_loader (torch.utils.data.DataLoader): Dataloader\n        model (nn.Module): MatchaTTS model\n        device (torch.device): GPU or CPU\n    \"\"\"\n\n    for batch in tqdm(data_loader, desc=\"🍵 Computing durations 🍵:\"):\n        x, x_lengths = batch[\"x\"], batch[\"x_lengths\"]\n        y, y_lengths = batch[\"y\"], batch[\"y_lengths\"]\n        spks = batch[\"spks\"]\n        x = x.to(device)\n        y = y.to(device)\n        x_lengths = x_lengths.to(device)\n        y_lengths = y_lengths.to(device)\n        spks = spks.to(device) if spks is not None else None\n\n        _, _, _, attn = model(\n            x=x,\n            x_lengths=x_lengths,\n            y=y,\n            y_lengths=y_lengths,\n            spks=spks,\n        )\n        attn = attn.cpu()\n        for i in range(attn.shape[0]):\n            save_durations_to_folder(\n                attn[i],\n                x_lengths[i].item(),\n                y_lengths[i].item(),\n                batch[\"filepaths\"][i],\n                output_folder,\n                batch[\"x_texts\"][i],\n            )\n\n\ndef main():\n    parser = argparse.ArgumentParser()\n\n    parser.add_argument(\n        \"-i\",\n        \"--input-config\",\n        type=str,\n        default=\"ljspeech.yaml\",\n        help=\"The name of the yaml config file under configs/data\",\n    )\n\n    parser.add_argument(\n        \"-b\",\n        \"--batch-size\",\n        type=int,\n        default=\"32\",\n        help=\"Can have increased batch size for faster computation\",\n    )\n\n    parser.add_argument(\n        \"-f\",\n        \"--force\",\n        action=\"store_true\",\n        default=False,\n        required=False,\n        help=\"force overwrite the file\",\n    )\n    parser.add_argument(\n        \"-c\",\n        \"--checkpoint_path\",\n        type=str,\n        required=True,\n        help=\"Path to the checkpoint file to load the model from\",\n    )\n\n    parser.add_argument(\n        \"-o\",\n        \"--output-folder\",\n        type=str,\n        default=None,\n        help=\"Output folder to save the data statistics\",\n    )\n\n    parser.add_argument(\n        \"--cpu\", action=\"store_true\", help=\"Use CPU for inference, not recommended (default: use GPU if available)\"\n    )\n\n    args = parser.parse_args()\n\n    with initialize(version_base=\"1.3\", config_path=\"../../configs/data\"):\n        cfg = compose(config_name=args.input_config, return_hydra_config=True, overrides=[])\n\n    root_path = rootutils.find_root(search_from=__file__, indicator=\".project-root\")\n\n    with open_dict(cfg):\n        del cfg[\"hydra\"]\n        del cfg[\"_target_\"]\n        cfg[\"seed\"] = 1234\n        cfg[\"batch_size\"] = args.batch_size\n        cfg[\"train_filelist_path\"] = str(os.path.join(root_path, cfg[\"train_filelist_path\"]))\n        cfg[\"valid_filelist_path\"] = str(os.path.join(root_path, cfg[\"valid_filelist_path\"]))\n        cfg[\"load_durations\"] = False\n\n    if args.output_folder is not None:\n        output_folder = Path(args.output_folder)\n    else:\n        output_folder = Path(cfg[\"train_filelist_path\"]).parent / \"durations\"\n\n    print(f\"Output folder set to: {output_folder}\")\n\n    if os.path.exists(output_folder) and not args.force:\n        print(\"Folder already exists. Use -f to force overwrite\")\n        sys.exit(1)\n\n    output_folder.mkdir(parents=True, exist_ok=True)\n\n    print(f\"Preprocessing: {cfg['name']} from training filelist: {cfg['train_filelist_path']}\")\n    print(\"Loading model...\")\n    device = get_device(args)\n    model = MatchaTTS.load_from_checkpoint(args.checkpoint_path, map_location=device)\n\n    text_mel_datamodule = TextMelDataModule(**cfg)\n    text_mel_datamodule.setup()\n    try:\n        print(\"Computing stats for training set if exists...\")\n        train_dataloader = text_mel_datamodule.train_dataloader()\n        compute_durations(train_dataloader, model, device, output_folder)\n    except lightning.fabric.utilities.exceptions.MisconfigurationException:\n        print(\"No training set found\")\n\n    try:\n        print(\"Computing stats for validation set if exists...\")\n        val_dataloader = text_mel_datamodule.val_dataloader()\n        compute_durations(val_dataloader, model, device, output_folder)\n    except lightning.fabric.utilities.exceptions.MisconfigurationException:\n        print(\"No validation set found\")\n\n    try:\n        print(\"Computing stats for test set if exists...\")\n        test_dataloader = text_mel_datamodule.test_dataloader()\n        compute_durations(test_dataloader, model, device, output_folder)\n    except lightning.fabric.utilities.exceptions.MisconfigurationException:\n        print(\"No test set found\")\n\n    print(f\"[+] Done! Data statistics saved to: {output_folder}\")\n\n\nif __name__ == \"__main__\":\n    # Helps with generating durations for the dataset to train other architectures\n    # that cannot learn to align due to limited size of dataset\n    # Example usage:\n    # python python matcha/utils/get_durations_from_trained_model.py -i ljspeech.yaml -c pretrained_model\n    # This will create a folder in data/processed_data/durations/ljspeech with the durations\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/instantiators.py",
    "content": "from typing import List\n\nimport hydra\nfrom lightning import Callback\nfrom lightning.pytorch.loggers import Logger\nfrom omegaconf import DictConfig\n\nfrom matcha.utils import pylogger\n\nlog = pylogger.get_pylogger(__name__)\n\n\ndef instantiate_callbacks(callbacks_cfg: DictConfig) -> List[Callback]:\n    \"\"\"Instantiates callbacks from config.\n\n    :param callbacks_cfg: A DictConfig object containing callback configurations.\n    :return: A list of instantiated callbacks.\n    \"\"\"\n    callbacks: List[Callback] = []\n\n    if not callbacks_cfg:\n        log.warning(\"No callback configs found! Skipping..\")\n        return callbacks\n\n    if not isinstance(callbacks_cfg, DictConfig):\n        raise TypeError(\"Callbacks config must be a DictConfig!\")\n\n    for _, cb_conf in callbacks_cfg.items():\n        if isinstance(cb_conf, DictConfig) and \"_target_\" in cb_conf:\n            log.info(f\"Instantiating callback <{cb_conf._target_}>\")  # pylint: disable=protected-access\n            callbacks.append(hydra.utils.instantiate(cb_conf))\n\n    return callbacks\n\n\ndef instantiate_loggers(logger_cfg: DictConfig) -> List[Logger]:\n    \"\"\"Instantiates loggers from config.\n\n    :param logger_cfg: A DictConfig object containing logger configurations.\n    :return: A list of instantiated loggers.\n    \"\"\"\n    logger: List[Logger] = []\n\n    if not logger_cfg:\n        log.warning(\"No logger configs found! Skipping...\")\n        return logger\n\n    if not isinstance(logger_cfg, DictConfig):\n        raise TypeError(\"Logger config must be a DictConfig!\")\n\n    for _, lg_conf in logger_cfg.items():\n        if isinstance(lg_conf, DictConfig) and \"_target_\" in lg_conf:\n            log.info(f\"Instantiating logger <{lg_conf._target_}>\")  # pylint: disable=protected-access\n            logger.append(hydra.utils.instantiate(lg_conf))\n\n    return logger\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/logging_utils.py",
    "content": "from typing import Any, Dict\n\nfrom lightning.pytorch.utilities import rank_zero_only\nfrom omegaconf import OmegaConf\n\nfrom matcha.utils import pylogger\n\nlog = pylogger.get_pylogger(__name__)\n\n\n@rank_zero_only\ndef log_hyperparameters(object_dict: Dict[str, Any]) -> None:\n    \"\"\"Controls which config parts are saved by Lightning loggers.\n\n    Additionally saves:\n        - Number of model parameters\n\n    :param object_dict: A dictionary containing the following objects:\n        - `\"cfg\"`: A DictConfig object containing the main config.\n        - `\"model\"`: The Lightning model.\n        - `\"trainer\"`: The Lightning trainer.\n    \"\"\"\n    hparams = {}\n\n    cfg = OmegaConf.to_container(object_dict[\"cfg\"])\n    model = object_dict[\"model\"]\n    trainer = object_dict[\"trainer\"]\n\n    if not trainer.logger:\n        log.warning(\"Logger not found! Skipping hyperparameter logging...\")\n        return\n\n    hparams[\"model\"] = cfg[\"model\"]\n\n    # save number of model parameters\n    hparams[\"model/params/total\"] = sum(p.numel() for p in model.parameters())\n    hparams[\"model/params/trainable\"] = sum(p.numel() for p in model.parameters() if p.requires_grad)\n    hparams[\"model/params/non_trainable\"] = sum(p.numel() for p in model.parameters() if not p.requires_grad)\n\n    hparams[\"data\"] = cfg[\"data\"]\n    hparams[\"trainer\"] = cfg[\"trainer\"]\n\n    hparams[\"callbacks\"] = cfg.get(\"callbacks\")\n    hparams[\"extras\"] = cfg.get(\"extras\")\n\n    hparams[\"task_name\"] = cfg.get(\"task_name\")\n    hparams[\"tags\"] = cfg.get(\"tags\")\n    hparams[\"ckpt_path\"] = cfg.get(\"ckpt_path\")\n    hparams[\"seed\"] = cfg.get(\"seed\")\n\n    # send hparams to all loggers\n    for logger in trainer.loggers:\n        logger.log_hyperparams(hparams)\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/model.py",
    "content": "\"\"\" from https://github.com/jaywalnut310/glow-tts \"\"\"\n\nimport numpy as np\nimport torch\n\n\ndef sequence_mask(length, max_length=None):\n    if max_length is None:\n        max_length = length.max()\n    x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n    return x.unsqueeze(0) < length.unsqueeze(1)\n\n\ndef fix_len_compatibility(length, num_downsamplings_in_unet=2):\n    factor = torch.scalar_tensor(2).pow(num_downsamplings_in_unet)\n    length = (length / factor).ceil() * factor\n    if not torch.onnx.is_in_onnx_export():\n        return length.int().item()\n    else:\n        return length\n\n\ndef convert_pad_shape(pad_shape):\n    inverted_shape = pad_shape[::-1]\n    pad_shape = [item for sublist in inverted_shape for item in sublist]\n    return pad_shape\n\n\ndef generate_path(duration, mask):\n    device = duration.device\n\n    b, t_x, t_y = mask.shape\n    cum_duration = torch.cumsum(duration, 1)\n    path = torch.zeros(b, t_x, t_y, dtype=mask.dtype).to(device=device)\n\n    cum_duration_flat = cum_duration.view(b * t_x)\n    path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype)\n    path = path.view(b, t_x, t_y)\n    path = path - torch.nn.functional.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1]\n    path = path * mask\n    return path\n\n\ndef duration_loss(logw, logw_, lengths):\n    loss = torch.sum((logw - logw_) ** 2) / torch.sum(lengths)\n    return loss\n\n\ndef normalize(data, mu, std):\n    if not isinstance(mu, (float, int)):\n        if isinstance(mu, list):\n            mu = torch.tensor(mu, dtype=data.dtype, device=data.device)\n        elif isinstance(mu, torch.Tensor):\n            mu = mu.to(data.device)\n        elif isinstance(mu, np.ndarray):\n            mu = torch.from_numpy(mu).to(data.device)\n        mu = mu.unsqueeze(-1)\n\n    if not isinstance(std, (float, int)):\n        if isinstance(std, list):\n            std = torch.tensor(std, dtype=data.dtype, device=data.device)\n        elif isinstance(std, torch.Tensor):\n            std = std.to(data.device)\n        elif isinstance(std, np.ndarray):\n            std = torch.from_numpy(std).to(data.device)\n        std = std.unsqueeze(-1)\n\n    return (data - mu) / std\n\n\ndef denormalize(data, mu, std):\n    if not isinstance(mu, float):\n        if isinstance(mu, list):\n            mu = torch.tensor(mu, dtype=data.dtype, device=data.device)\n        elif isinstance(mu, torch.Tensor):\n            mu = mu.to(data.device)\n        elif isinstance(mu, np.ndarray):\n            mu = torch.from_numpy(mu).to(data.device)\n        mu = mu.unsqueeze(-1)\n\n    if not isinstance(std, float):\n        if isinstance(std, list):\n            std = torch.tensor(std, dtype=data.dtype, device=data.device)\n        elif isinstance(std, torch.Tensor):\n            std = std.to(data.device)\n        elif isinstance(std, np.ndarray):\n            std = torch.from_numpy(std).to(data.device)\n        std = std.unsqueeze(-1)\n\n    return data * std + mu\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/monotonic_align/__init__.py",
    "content": "import numpy as np\nimport torch\n\nfrom matcha.utils.monotonic_align.core import maximum_path_c\n\n\ndef maximum_path(value, mask):\n    \"\"\"Cython optimised version.\n    value: [b, t_x, t_y]\n    mask: [b, t_x, t_y]\n    \"\"\"\n    value = value * mask\n    device = value.device\n    dtype = value.dtype\n    value = value.data.cpu().numpy().astype(np.float32)\n    path = np.zeros_like(value).astype(np.int32)\n    mask = mask.data.cpu().numpy()\n\n    t_x_max = mask.sum(1)[:, 0].astype(np.int32)\n    t_y_max = mask.sum(2)[:, 0].astype(np.int32)\n    maximum_path_c(path, value, t_x_max, t_y_max)\n    return torch.from_numpy(path).to(device=device, dtype=dtype)\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/monotonic_align/core.pyx",
    "content": "import numpy as np\n\ncimport cython\ncimport numpy as np\n\nfrom cython.parallel import prange\n\n\n@cython.boundscheck(False)\n@cython.wraparound(False)\ncdef void maximum_path_each(int[:,::1] path, float[:,::1] value, int t_x, int t_y, float max_neg_val) nogil:\n  cdef int x\n  cdef int y\n  cdef float v_prev\n  cdef float v_cur\n  cdef float tmp\n  cdef int index = t_x - 1\n\n  for y in range(t_y):\n    for x in range(max(0, t_x + y - t_y), min(t_x, y + 1)):\n      if x == y:\n        v_cur = max_neg_val\n      else:\n        v_cur = value[x, y-1]\n      if x == 0:\n        if y == 0:\n          v_prev = 0.\n        else:\n          v_prev = max_neg_val\n      else:\n        v_prev = value[x-1, y-1]\n      value[x, y] = max(v_cur, v_prev) + value[x, y]\n\n  for y in range(t_y - 1, -1, -1):\n    path[index, y] = 1\n    if index != 0 and (index == y or value[index, y-1] < value[index-1, y-1]):\n      index = index - 1\n\n\n@cython.boundscheck(False)\n@cython.wraparound(False)\ncpdef void maximum_path_c(int[:,:,::1] paths, float[:,:,::1] values, int[::1] t_xs, int[::1] t_ys, float max_neg_val=-1e9) nogil:\n  cdef int b = values.shape[0]\n\n  cdef int i\n  for i in prange(b, nogil=True):\n    maximum_path_each(paths[i], values[i], t_xs[i], t_ys[i], max_neg_val)\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/monotonic_align/setup.py",
    "content": "# from distutils.core import setup\n# from Cython.Build import cythonize\n# import numpy\n\n# setup(name='monotonic_align',\n#       ext_modules=cythonize(\"core.pyx\"),\n#       include_dirs=[numpy.get_include()])\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/pylogger.py",
    "content": "import logging\n\nfrom lightning.pytorch.utilities import rank_zero_only\n\n\ndef get_pylogger(name: str = __name__) -> logging.Logger:\n    \"\"\"Initializes a multi-GPU-friendly python command line logger.\n\n    :param name: The name of the logger, defaults to ``__name__``.\n\n    :return: A logger object.\n    \"\"\"\n    logger = logging.getLogger(name)\n\n    # this ensures all logging levels get marked with the rank zero decorator\n    # otherwise logs would get multiplied for each GPU process in multi-GPU setup\n    logging_levels = (\"debug\", \"info\", \"warning\", \"error\", \"exception\", \"fatal\", \"critical\")\n    for level in logging_levels:\n        setattr(logger, level, rank_zero_only(getattr(logger, level)))\n\n    return logger\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/rich_utils.py",
    "content": "from pathlib import Path\nfrom typing import Sequence\n\nimport rich\nimport rich.syntax\nimport rich.tree\nfrom hydra.core.hydra_config import HydraConfig\nfrom lightning.pytorch.utilities import rank_zero_only\nfrom omegaconf import DictConfig, OmegaConf, open_dict\nfrom rich.prompt import Prompt\n\nfrom matcha.utils import pylogger\n\nlog = pylogger.get_pylogger(__name__)\n\n\n@rank_zero_only\ndef print_config_tree(\n    cfg: DictConfig,\n    print_order: Sequence[str] = (\n        \"data\",\n        \"model\",\n        \"callbacks\",\n        \"logger\",\n        \"trainer\",\n        \"paths\",\n        \"extras\",\n    ),\n    resolve: bool = False,\n    save_to_file: bool = False,\n) -> None:\n    \"\"\"Prints the contents of a DictConfig as a tree structure using the Rich library.\n\n    :param cfg: A DictConfig composed by Hydra.\n    :param print_order: Determines in what order config components are printed. Default is ``(\"data\", \"model\",\n    \"callbacks\", \"logger\", \"trainer\", \"paths\", \"extras\")``.\n    :param resolve: Whether to resolve reference fields of DictConfig. Default is ``False``.\n    :param save_to_file: Whether to export config to the hydra output folder. Default is ``False``.\n    \"\"\"\n    style = \"dim\"\n    tree = rich.tree.Tree(\"CONFIG\", style=style, guide_style=style)\n\n    queue = []\n\n    # add fields from `print_order` to queue\n    for field in print_order:\n        _ = (\n            queue.append(field)\n            if field in cfg\n            else log.warning(f\"Field '{field}' not found in config. Skipping '{field}' config printing...\")\n        )\n\n    # add all the other fields to queue (not specified in `print_order`)\n    for field in cfg:\n        if field not in queue:\n            queue.append(field)\n\n    # generate config tree from queue\n    for field in queue:\n        branch = tree.add(field, style=style, guide_style=style)\n\n        config_group = cfg[field]\n        if isinstance(config_group, DictConfig):\n            branch_content = OmegaConf.to_yaml(config_group, resolve=resolve)\n        else:\n            branch_content = str(config_group)\n\n        branch.add(rich.syntax.Syntax(branch_content, \"yaml\"))\n\n    # print config tree\n    rich.print(tree)\n\n    # save config tree to file\n    if save_to_file:\n        with open(Path(cfg.paths.output_dir, \"config_tree.log\"), \"w\") as file:\n            rich.print(tree, file=file)\n\n\n@rank_zero_only\ndef enforce_tags(cfg: DictConfig, save_to_file: bool = False) -> None:\n    \"\"\"Prompts user to input tags from command line if no tags are provided in config.\n\n    :param cfg: A DictConfig composed by Hydra.\n    :param save_to_file: Whether to export tags to the hydra output folder. Default is ``False``.\n    \"\"\"\n    if not cfg.get(\"tags\"):\n        if \"id\" in HydraConfig().cfg.hydra.job:\n            raise ValueError(\"Specify tags before launching a multirun!\")\n\n        log.warning(\"No tags provided in config. Prompting user to input tags...\")\n        tags = Prompt.ask(\"Enter a list of comma separated tags\", default=\"dev\")\n        tags = [t.strip() for t in tags.split(\",\") if t != \"\"]\n\n        with open_dict(cfg):\n            cfg.tags = tags\n\n        log.info(f\"Tags: {cfg.tags}\")\n\n    if save_to_file:\n        with open(Path(cfg.paths.output_dir, \"tags.log\"), \"w\") as file:\n            rich.print(cfg.tags, file=file)\n"
  },
  {
    "path": "xinference/thirdparty/matcha/utils/utils.py",
    "content": "import os\nimport sys\nimport warnings\nfrom importlib.util import find_spec\nfrom math import ceil\nfrom pathlib import Path\nfrom typing import Any, Callable, Dict, Tuple\n\nimport gdown\n# import matplotlib.pyplot as plt\nimport numpy as np\nimport torch\n# import wget\nfrom omegaconf import DictConfig\n\nfrom matcha.utils import pylogger, rich_utils\n\nlog = pylogger.get_pylogger(__name__)\n\n\ndef extras(cfg: DictConfig) -> None:\n    \"\"\"Applies optional utilities before the task is started.\n\n    Utilities:\n        - Ignoring python warnings\n        - Setting tags from command line\n        - Rich config printing\n\n    :param cfg: A DictConfig object containing the config tree.\n    \"\"\"\n    # return if no `extras` config\n    if not cfg.get(\"extras\"):\n        log.warning(\"Extras config not found! <cfg.extras=null>\")\n        return\n\n    # disable python warnings\n    if cfg.extras.get(\"ignore_warnings\"):\n        log.info(\"Disabling python warnings! <cfg.extras.ignore_warnings=True>\")\n        warnings.filterwarnings(\"ignore\")\n\n    # prompt user to input tags from command line if none are provided in the config\n    if cfg.extras.get(\"enforce_tags\"):\n        log.info(\"Enforcing tags! <cfg.extras.enforce_tags=True>\")\n        rich_utils.enforce_tags(cfg, save_to_file=True)\n\n    # pretty print config tree using Rich library\n    if cfg.extras.get(\"print_config\"):\n        log.info(\"Printing config tree with Rich! <cfg.extras.print_config=True>\")\n        rich_utils.print_config_tree(cfg, resolve=True, save_to_file=True)\n\n\ndef task_wrapper(task_func: Callable) -> Callable:\n    \"\"\"Optional decorator that controls the failure behavior when executing the task function.\n\n    This wrapper can be used to:\n        - make sure loggers are closed even if the task function raises an exception (prevents multirun failure)\n        - save the exception to a `.log` file\n        - mark the run as failed with a dedicated file in the `logs/` folder (so we can find and rerun it later)\n        - etc. (adjust depending on your needs)\n\n    Example:\n    ```\n    @utils.task_wrapper\n    def train(cfg: DictConfig) -> Tuple[Dict[str, Any], Dict[str, Any]]:\n        ...\n        return metric_dict, object_dict\n    ```\n\n    :param task_func: The task function to be wrapped.\n\n    :return: The wrapped task function.\n    \"\"\"\n\n    def wrap(cfg: DictConfig) -> Tuple[Dict[str, Any], Dict[str, Any]]:\n        # execute the task\n        try:\n            metric_dict, object_dict = task_func(cfg=cfg)\n\n        # things to do if exception occurs\n        except Exception as ex:\n            # save exception to `.log` file\n            log.exception(\"\")\n\n            # some hyperparameter combinations might be invalid or cause out-of-memory errors\n            # so when using hparam search plugins like Optuna, you might want to disable\n            # raising the below exception to avoid multirun failure\n            raise ex\n\n        # things to always do after either success or exception\n        finally:\n            # display output dir path in terminal\n            log.info(f\"Output dir: {cfg.paths.output_dir}\")\n\n            # always close wandb run (even if exception occurs so multirun won't fail)\n            if find_spec(\"wandb\"):  # check if wandb is installed\n                import wandb\n\n                if wandb.run:\n                    log.info(\"Closing wandb!\")\n                    wandb.finish()\n\n        return metric_dict, object_dict\n\n    return wrap\n\n\ndef get_metric_value(metric_dict: Dict[str, Any], metric_name: str) -> float:\n    \"\"\"Safely retrieves value of the metric logged in LightningModule.\n\n    :param metric_dict: A dict containing metric values.\n    :param metric_name: The name of the metric to retrieve.\n    :return: The value of the metric.\n    \"\"\"\n    if not metric_name:\n        log.info(\"Metric name is None! Skipping metric value retrieval...\")\n        return None\n\n    if metric_name not in metric_dict:\n        raise ValueError(\n            f\"Metric value not found! <metric_name={metric_name}>\\n\"\n            \"Make sure metric name logged in LightningModule is correct!\\n\"\n            \"Make sure `optimized_metric` name in `hparams_search` config is correct!\"\n        )\n\n    metric_value = metric_dict[metric_name].item()\n    log.info(f\"Retrieved metric value! <{metric_name}={metric_value}>\")\n\n    return metric_value\n\n\ndef intersperse(lst, item):\n    # Adds blank symbol\n    result = [item] * (len(lst) * 2 + 1)\n    result[1::2] = lst\n    return result\n\n\ndef save_figure_to_numpy(fig):\n    data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep=\"\")\n    data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))\n    return data\n\n\ndef plot_tensor(tensor):\n    plt.style.use(\"default\")\n    fig, ax = plt.subplots(figsize=(12, 3))\n    im = ax.imshow(tensor, aspect=\"auto\", origin=\"lower\", interpolation=\"none\")\n    plt.colorbar(im, ax=ax)\n    plt.tight_layout()\n    fig.canvas.draw()\n    data = save_figure_to_numpy(fig)\n    plt.close()\n    return data\n\n\ndef save_plot(tensor, savepath):\n    plt.style.use(\"default\")\n    fig, ax = plt.subplots(figsize=(12, 3))\n    im = ax.imshow(tensor, aspect=\"auto\", origin=\"lower\", interpolation=\"none\")\n    plt.colorbar(im, ax=ax)\n    plt.tight_layout()\n    fig.canvas.draw()\n    plt.savefig(savepath)\n    plt.close()\n\n\ndef to_numpy(tensor):\n    if isinstance(tensor, np.ndarray):\n        return tensor\n    elif isinstance(tensor, torch.Tensor):\n        return tensor.detach().cpu().numpy()\n    elif isinstance(tensor, list):\n        return np.array(tensor)\n    else:\n        raise TypeError(\"Unsupported type for conversion to numpy array\")\n\n\ndef get_user_data_dir(appname=\"matcha_tts\"):\n    \"\"\"\n    Args:\n        appname (str): Name of application\n\n    Returns:\n        Path: path to user data directory\n    \"\"\"\n\n    MATCHA_HOME = os.environ.get(\"MATCHA_HOME\")\n    if MATCHA_HOME is not None:\n        ans = Path(MATCHA_HOME).expanduser().resolve(strict=False)\n    elif sys.platform == \"win32\":\n        import winreg  # pylint: disable=import-outside-toplevel\n\n        key = winreg.OpenKey(\n            winreg.HKEY_CURRENT_USER,\n            r\"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\",\n        )\n        dir_, _ = winreg.QueryValueEx(key, \"Local AppData\")\n        ans = Path(dir_).resolve(strict=False)\n    elif sys.platform == \"darwin\":\n        ans = Path(\"~/Library/Application Support/\").expanduser()\n    else:\n        ans = Path.home().joinpath(\".local/share\")\n\n    final_path = ans.joinpath(appname)\n    final_path.mkdir(parents=True, exist_ok=True)\n    return final_path\n\n\ndef assert_model_downloaded(checkpoint_path, url, use_wget=True):\n    if Path(checkpoint_path).exists():\n        log.debug(f\"[+] Model already present at {checkpoint_path}!\")\n        print(f\"[+] Model already present at {checkpoint_path}!\")\n        return\n    log.info(f\"[-] Model not found at {checkpoint_path}! Will download it\")\n    print(f\"[-] Model not found at {checkpoint_path}! Will download it\")\n    checkpoint_path = str(checkpoint_path)\n    if not use_wget:\n        gdown.download(url=url, output=checkpoint_path, quiet=False, fuzzy=True)\n    else:\n        wget.download(url=url, out=checkpoint_path)\n\n\ndef get_phoneme_durations(durations, phones):\n    prev = durations[0]\n    merged_durations = []\n    # Convolve with stride 2\n    for i in range(1, len(durations), 2):\n        if i == len(durations) - 2:\n            # if it is last take full value\n            next_half = durations[i + 1]\n        else:\n            next_half = ceil(durations[i + 1] / 2)\n\n        curr = prev + durations[i] + next_half\n        prev = durations[i + 1] - next_half\n        merged_durations.append(curr)\n\n    assert len(phones) == len(merged_durations)\n    assert len(merged_durations) == (len(durations) - 1) // 2\n\n    merged_durations = torch.cumsum(torch.tensor(merged_durations), 0, dtype=torch.long)\n    start = torch.tensor(0)\n    duration_json = []\n    for i, duration in enumerate(merged_durations):\n        duration_json.append(\n            {\n                phones[i]: {\n                    \"starttime\": start.item(),\n                    \"endtime\": duration.item(),\n                    \"duration\": duration.item() - start.item(),\n                }\n            }\n        )\n        start = duration\n\n    assert list(duration_json[-1].values())[0][\"endtime\"] == sum(\n        durations\n    ), f\"{list(duration_json[-1].values())[0]['endtime'],  sum(durations)}\"\n    return duration_json\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/frontend_function.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport torch\nimport torch.nn.functional as F\nimport whisper\nimport librosa\nfrom copy import deepcopy\nfrom tts.utils.text_utils.ph_tone_convert import split_ph_timestamp, split_ph\nfrom tts.utils.audio_utils.align import mel2token_to_dur\n\n''' Graphme to phoneme function '''\ndef g2p(self, text_inp):\n    # prepare inputs\n    txt_token = self.g2p_tokenizer('<BOT>' + text_inp + '<BOS>')['input_ids']\n    input_ids = torch.LongTensor([txt_token+[145+self.speech_start_idx]]).to(self.device)\n\n    # model forward\n    with torch.cuda.amp.autocast(dtype=self.precision, enabled=True):\n        outputs = self.g2p_model.generate(input_ids, max_new_tokens=256, do_sample=True, top_k=1, eos_token_id=800+1+self.speech_start_idx)\n    \n    # process outputs\n    ph_tokens = outputs[:, len(txt_token):-1]-self.speech_start_idx\n    ph_pred, tone_pred = split_ph(ph_tokens[0])\n    ph_pred, tone_pred = ph_pred[None, :].to(self.device), tone_pred[None, :].to(self.device)\n    return ph_pred, tone_pred\n\n''' Get phoneme2mel align of prompt speech '''\ndef align(self, wav):\n    with torch.inference_mode():\n        whisper_wav = librosa.resample(wav, orig_sr=self.sr, target_sr=16000)\n        mel = torch.FloatTensor(whisper.log_mel_spectrogram(whisper_wav).T).to(self.device)[None].transpose(1,2)\n        prompt_max_frame = mel.size(2) // self.fm * self.fm\n        mel = mel[:, :, :prompt_max_frame]\n        token = torch.LongTensor([[798]]).to(self.device)\n        audio_features = self.aligner_lm.embed_audio(mel)\n        for i in range(768):\n            with torch.cuda.amp.autocast(dtype=self.precision, enabled=True):\n                logits = self.aligner_lm.logits(token, audio_features, None)\n                token_pred = torch.argmax(F.softmax(logits[:, -1], dim=-1), 1)[None]\n                token = torch.cat([token, token_pred], dim=1)\n                if token_pred[0] == 799:\n                    break\n        alignment_tokens = token\n    \n    ph_ref, tone_ref, dur_ref, _ = split_ph_timestamp(deepcopy(alignment_tokens)[0, 1:-1])\n    ph_ref = torch.Tensor(ph_ref)[None].to(self.device)\n    tone_ref = torch.Tensor(tone_ref)[None].to(self.device)\n    if dur_ref.sum() < prompt_max_frame:\n        dur_ref[-1] += prompt_max_frame - dur_ref.sum()\n    elif dur_ref.sum() > prompt_max_frame:\n        len_diff = dur_ref.sum() - prompt_max_frame\n        while True:\n            for i in range(len(dur_ref)):\n                dur_ref[i] -= 1\n                len_diff -= 1\n                if len_diff == 0:\n                    break\n            if len_diff == 0:\n                break\n    mel2ph_ref = self.length_regulator(dur_ref[None]).to(self.device)\n    mel2ph_ref = mel2ph_ref[:, :mel2ph_ref.size(1)//self.fm*self.fm]\n    return ph_ref, tone_ref, mel2ph_ref\n\n''' Duration Prompting '''\ndef make_dur_prompt(self, mel2ph_ref, ph_ref, tone_ref):\n    dur_tokens_2d_ = mel2token_to_dur(mel2ph_ref, ph_ref.shape[1]).clamp(\n                    max=self.hp_dur_model['dur_code_size'] - 1) + 1\n\n    ctx_dur_tokens = dur_tokens_2d_.clone().flatten(0, 1).to(self.device)\n    txt_tokens_flat_ = ph_ref.flatten(0, 1)\n    ctx_dur_tokens = ctx_dur_tokens[txt_tokens_flat_ > 0][None]\n\n    last_dur_pos_prompt = ctx_dur_tokens.shape[1]\n    dur_spk_pos_ids_flat = range(0, last_dur_pos_prompt)\n    dur_spk_pos_ids_flat = torch.LongTensor([dur_spk_pos_ids_flat]).to(self.device)\n    with torch.cuda.amp.autocast(dtype=self.precision, enabled=True):\n        _, incremental_state_dur_prompt = self.dur_model.infer(\n            ph_ref, {'tone': tone_ref}, None, None, None,\n            ctx_vqcodes=ctx_dur_tokens, spk_pos_ids_flat=dur_spk_pos_ids_flat, return_state=True)\n    return incremental_state_dur_prompt, ctx_dur_tokens\n\n''' Duration Prediction '''\ndef dur_pred(self, ctx_dur_tokens, incremental_state_dur_prompt, ph_pred, tone_pred, seg_i, dur_disturb, dur_alpha, is_first, is_final):\n    last_dur_token = ctx_dur_tokens[:, -1:]\n    last_dur_pos_prompt = ctx_dur_tokens.shape[1]\n    incremental_state_dur = deepcopy(incremental_state_dur_prompt)\n    txt_len = ph_pred.shape[1]\n    dur_spk_pos_ids_flat = range(last_dur_pos_prompt, last_dur_pos_prompt + txt_len)\n    dur_spk_pos_ids_flat = torch.LongTensor([dur_spk_pos_ids_flat]).to(self.device)\n    last_dur_pos_prompt = last_dur_pos_prompt + txt_len\n\n    with torch.cuda.amp.autocast(dtype=self.precision, enabled=True):\n        dur_pred = self.dur_model.infer(\n            ph_pred, {'tone': tone_pred}, None, None, None,\n            incremental_state=incremental_state_dur,\n            first_decoder_inp=last_dur_token,\n            spk_pos_ids_flat=dur_spk_pos_ids_flat,\n        )\n\n    dur_pred = dur_pred - 1\n    dur_pred = dur_pred.clamp(0, self.hp_dur_model['dur_code_size'] - 1)\n    # if is_final:\n    #     dur_pred[:, -1] = dur_pred[:, -1].clamp(64, 128)\n    # else:\n    #     dur_pred[:, -1] = dur_pred[:, -1].clamp(48, 128)\n    # if seg_i > 0:\n        # dur_pred[:, 0] = 0\n    # ['。', '！', '？', 'sil']\n    for sil_token in [148, 153, 166, 145]:\n        dur_pred[ph_pred==sil_token].clamp_min(32)\n    # ['，', '；'] \n    for sil_token in [163, 165]:\n        dur_pred[ph_pred==sil_token].clamp_min(16)\n    if not is_final:\n        # add 0.32ms for crossfade\n        dur_pred[:, -1] =  dur_pred[:, -1] + 32\n    else:\n        dur_pred[:, -1] = dur_pred[:, -1].clamp(64, 128)\n\n    ''' DiT target speech generation '''\n    dur_disturb_choice = (torch.rand_like(dur_pred.float()) > 0.5).float()\n    dur_disturb_r = 1 + torch.rand_like(dur_pred.float()) * dur_disturb\n    dur_pred = dur_pred * dur_disturb_r * dur_disturb_choice + \\\n            dur_pred / dur_disturb_r * (1 - dur_disturb_choice)\n    dur_pred = torch.round(dur_pred * dur_alpha).clamp(0, 127)\n    if is_first:\n        dur_pred[:, 0] = 8\n    \n    dur_sum = dur_pred.sum()\n    npad = self.fm - dur_sum % self.fm\n    if npad < self.fm:\n        dur_pred[:, -1] += npad\n    mel2ph_pred = self.length_regulator(dur_pred).to(self.device)\n    return mel2ph_pred\n\ndef prepare_inputs_for_dit(self, mel2ph_ref, mel2ph_pred, ph_ref, tone_ref, ph_pred, tone_pred, vae_latent):\n    # Prepare duration token \n    mel2ph_pred = torch.cat((mel2ph_ref, mel2ph_pred+ph_ref.size(1)), dim=1)\n    mel2ph_pred = mel2ph_pred[:, :mel2ph_pred.size(1)//self.fm*self.fm].repeat(3, 1)\n    # Prepare phone and tone token\n    ph_pred = torch.cat((ph_ref, ph_pred), dim=1)\n    tone_pred = torch.cat((tone_ref, tone_pred), dim=1)\n    # Disable the English tone (set them to 3)\"\"\"\n    en_tone_idx = ~((tone_pred == 4) | ( (11 <= tone_pred) & (tone_pred <= 15)) | (tone_pred == 0))\n    tone_pred[en_tone_idx] = 3\n    \n    # Prepare cfg inputs\n    ph_seq = torch.cat([ph_pred, ph_pred, torch.full(ph_pred.size(), self.cfg_mask_token_phone, device=self.device)], 0)\n    tone_seq = torch.cat([tone_pred, tone_pred, torch.full(tone_pred.size(), self.cfg_mask_token_tone, device=self.device)], 0)\n    target_size = mel2ph_pred.size(1)//self.vae_stride\n    vae_latent_ = vae_latent.repeat(3, 1, 1)\n    ctx_mask = torch.ones_like(vae_latent_[:, :, 0:1])\n    vae_latent_ = F.pad(vae_latent_, (0, 0, 0, target_size - vae_latent.size(1)), mode='constant', value=0)\n    vae_latent_[1:] = 0.0\n    ctx_mask = F.pad(ctx_mask, (0, 0, 0, target_size - vae_latent.size(1)), mode='constant', value=0)\n\n    return {\n        'phone': ph_seq,\n        'tone': tone_seq,\n        \"lat_ctx\": vae_latent_ * ctx_mask,\n        \"ctx_mask\": ctx_mask,\n        \"dur\": mel2ph_pred,\n    }\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/gradio_api.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport multiprocessing as mp\nimport torch\nimport os\nfrom functools import partial\nimport gradio as gr\nimport traceback\nfrom tts.infer_cli import MegaTTS3DiTInfer, convert_to_wav, cut_wav\n\n\ndef model_worker(input_queue, output_queue, device_id):\n    device = None\n    if device_id is not None:\n        device = torch.device(f'cuda:{device_id}')\n    infer_pipe = MegaTTS3DiTInfer(device=device)\n\n    while True:\n        task = input_queue.get()\n        inp_audio_path, inp_npy_path, inp_text, infer_timestep, p_w, t_w = task\n        try:\n            convert_to_wav(inp_audio_path)\n            wav_path = os.path.splitext(inp_audio_path)[0] + '.wav'\n            cut_wav(wav_path, max_len=28)\n            with open(wav_path, 'rb') as file:\n                file_content = file.read()\n            resource_context = infer_pipe.preprocess(file_content, latent_file=inp_npy_path)\n            wav_bytes = infer_pipe.forward(resource_context, inp_text, time_step=infer_timestep, p_w=p_w, t_w=t_w)\n            output_queue.put(wav_bytes)\n        except Exception as e:\n            traceback.print_exc()\n            print(task, str(e))\n            output_queue.put(None)\n\n\ndef main(inp_audio, inp_npy, inp_text, infer_timestep, p_w, t_w, processes, input_queue, output_queue):\n    print(\"Push task to the inp queue |\", inp_audio, inp_npy, inp_text, infer_timestep, p_w, t_w)\n    input_queue.put((inp_audio, inp_npy, inp_text, infer_timestep, p_w, t_w))\n    res = output_queue.get()\n    if res is not None:\n        return res\n    else:\n        print(\"\")\n        return None\n\n\nif __name__ == '__main__':\n    mp.set_start_method('spawn', force=True)\n    mp_manager = mp.Manager()\n\n    devices = os.environ.get('CUDA_VISIBLE_DEVICES', '')\n    if devices != '':\n        devices = os.environ.get('CUDA_VISIBLE_DEVICES', '').split(\",\")\n    else:\n        devices = None\n    \n    num_workers = 1\n    input_queue = mp_manager.Queue()\n    output_queue = mp_manager.Queue()\n    processes = []\n\n    print(\"Start open workers\")\n    for i in range(num_workers):\n        p = mp.Process(target=model_worker, args=(input_queue, output_queue, i % len(devices) if devices is not None else None))\n        p.start()\n        processes.append(p)\n\n    api_interface = gr.Interface(fn=\n                                partial(main, processes=processes, input_queue=input_queue, \n                                        output_queue=output_queue), \n                                inputs=[gr.Audio(type=\"filepath\", label=\"Upload .wav\"), gr.File(type=\"filepath\", label=\"Upload .npy\"), \"text\", \n                                        gr.Number(label=\"infer timestep\", value=32),\n                                        gr.Number(label=\"Intelligibility Weight\", value=1.4),\n                                        gr.Number(label=\"Similarity Weight\", value=3.0)], outputs=[gr.Audio(label=\"Synthesized Audio\")],\n                                title=\"MegaTTS3\",  \n                                description=\"Upload a speech clip as a reference for timbre, \" +\n                                \"upload the pre-extracted latent file, \"+\n                                \"input the target text, and receive the cloned voice.\", concurrency_limit=1)\n    api_interface.launch(server_name='0.0.0.0', server_port=7929, debug=True)\n    for p in processes:\n        p.join()\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/infer_cli.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport os\nimport argparse\nimport librosa\nimport numpy as np\nimport torch\n\nfrom tn.chinese.normalizer import Normalizer as ZhNormalizer\nfrom tn.english.normalizer import Normalizer as EnNormalizer\nfrom langdetect import detect as classify_language\nfrom pydub import AudioSegment\nimport pyloudnorm as pyln\n\nfrom tts.modules.ar_dur.commons.nar_tts_modules import LengthRegulator\nfrom tts.frontend_function import g2p, align, make_dur_prompt, dur_pred, prepare_inputs_for_dit\nfrom tts.utils.audio_utils.io import save_wav, to_wav_bytes, convert_to_wav_bytes, combine_audio_segments\nfrom tts.utils.commons.ckpt_utils import load_ckpt\nfrom tts.utils.commons.hparams import set_hparams, hparams\nfrom tts.utils.text_utils.text_encoder import TokenTextEncoder\nfrom tts.utils.text_utils.split_text import chunk_text_chinese, chunk_text_english\nfrom tts.utils.commons.hparams import hparams, set_hparams\n\n\nif \"TOKENIZERS_PARALLELISM\" not in os.environ:\n    os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"\n\ndef convert_to_wav(wav_path):\n    # Check if the file exists\n    if not os.path.exists(wav_path):\n        print(f\"The file '{wav_path}' does not exist.\")\n        return\n\n    # Check if the file already has a .wav extension\n    if not wav_path.endswith(\".wav\"):\n        # Define the output path with a .wav extension\n        out_path = os.path.splitext(wav_path)[0] + \".wav\"\n\n        # Load the audio file using pydub and convert it to WAV\n        audio = AudioSegment.from_file(wav_path)\n        audio.export(out_path, format=\"wav\")\n\n        print(f\"Converted '{wav_path}' to '{out_path}'\")\n\n\ndef cut_wav(wav_path, max_len=28):\n    audio = AudioSegment.from_file(wav_path)\n    audio = audio[:int(max_len * 1000)]\n    audio.export(wav_path, format=\"wav\")\n\nclass MegaTTS3DiTInfer():\n    def __init__(\n            self, \n            device=None,\n            ckpt_root='./checkpoints',\n            dit_exp_name='diffusion_transformer',\n            frontend_exp_name='aligner_lm',\n            wavvae_exp_name='wavvae',\n            dur_ckpt_path='duration_lm',\n            g2p_exp_name='g2p',\n            precision=torch.float16,\n            **kwargs\n        ):\n        self.sr = 24000\n        self.fm = 8\n        if device is None:\n            device = 'cuda' if torch.cuda.is_available() else 'cpu'\n        self.device = device\n        self.precision = precision\n\n        # build models\n        self.dit_exp_name = os.path.join(ckpt_root, dit_exp_name)\n        self.frontend_exp_name = os.path.join(ckpt_root, frontend_exp_name)\n        self.wavvae_exp_name = os.path.join(ckpt_root, wavvae_exp_name)\n        self.dur_exp_name = os.path.join(ckpt_root, dur_ckpt_path)\n        self.g2p_exp_name = os.path.join(ckpt_root, g2p_exp_name)\n        self.build_model(self.device)\n\n        # init text normalizer\n        self.zh_normalizer = ZhNormalizer(overwrite_cache=False, remove_erhua=False, remove_interjections=False)\n        self.en_normalizer = EnNormalizer(overwrite_cache=False)\n        # loudness meter\n        self.loudness_meter = pyln.Meter(self.sr)\n\n    def build_model(self, device):\n        set_hparams(exp_name=self.dit_exp_name, print_hparams=False)\n\n        ''' Load Dict '''\n        current_dir = os.path.dirname(os.path.abspath(__file__))\n        ling_dict = json.load(open(f\"{current_dir}/utils/text_utils/dict.json\", encoding='utf-8-sig'))\n        self.ling_dict = {k: TokenTextEncoder(None, vocab_list=ling_dict[k], replace_oov='<UNK>') for k in ['phone', 'tone']}\n        self.token_encoder = token_encoder = self.ling_dict['phone']\n        ph_dict_size = len(token_encoder)\n\n        ''' Load Duration LM '''\n        from tts.modules.ar_dur.ar_dur_predictor import ARDurPredictor\n        hp_dur_model = self.hp_dur_model = set_hparams(f'{self.dur_exp_name}/config.yaml', global_hparams=False)\n        hp_dur_model['frames_multiple'] = hparams['frames_multiple']\n        self.dur_model = ARDurPredictor(\n            hp_dur_model, hp_dur_model['dur_txt_hs'], hp_dur_model['dur_model_hidden_size'],\n            hp_dur_model['dur_model_layers'], ph_dict_size,\n            hp_dur_model['dur_code_size'],\n            use_rot_embed=hp_dur_model.get('use_rot_embed', False))\n        self.length_regulator = LengthRegulator()\n        load_ckpt(self.dur_model, f'{self.dur_exp_name}', 'dur_model')\n        self.dur_model.eval()\n        self.dur_model.to(device)\n\n        ''' Load Diffusion Transformer '''\n        from tts.modules.llm_dit.dit import Diffusion\n        self.dit = Diffusion()\n        load_ckpt(self.dit, f'{self.dit_exp_name}', 'dit', strict=False)\n        self.dit.eval()\n        self.dit.to(device)\n        self.cfg_mask_token_phone = 302 - 1\n        self.cfg_mask_token_tone = 32 - 1\n\n        ''' Load Frontend LM '''\n        from tts.modules.aligner.whisper_small import Whisper\n        self.aligner_lm = Whisper()\n        load_ckpt(self.aligner_lm, f'{self.frontend_exp_name}', 'model')\n        self.aligner_lm.eval()\n        self.aligner_lm.to(device)\n        self.kv_cache = None\n        self.hooks = None\n\n        ''' Load G2P LM'''\n        from transformers import AutoTokenizer, AutoModelForCausalLM\n        g2p_tokenizer = AutoTokenizer.from_pretrained(self.g2p_exp_name, padding_side=\"right\")\n        g2p_tokenizer.padding_side = \"right\"\n        self.g2p_model = AutoModelForCausalLM.from_pretrained(self.g2p_exp_name).eval().to(device)\n        self.g2p_tokenizer = g2p_tokenizer\n        self.speech_start_idx = g2p_tokenizer.encode('<Reserved_TTS_0>')[0]\n\n        ''' Wav VAE '''\n        self.hp_wavvae = hp_wavvae = set_hparams(f'{self.wavvae_exp_name}/config.yaml', global_hparams=False)\n        from tts.modules.wavvae.decoder.wavvae_v3 import WavVAE_V3\n        self.wavvae = WavVAE_V3(hparams=hp_wavvae)\n        if os.path.exists(f'{self.wavvae_exp_name}/model_only_last.ckpt'):\n            load_ckpt(self.wavvae, f'{self.wavvae_exp_name}/model_only_last.ckpt', 'model_gen', strict=True)\n            self.has_vae_encoder = True\n        else:\n            load_ckpt(self.wavvae, f'{self.wavvae_exp_name}/decoder.ckpt', 'model_gen', strict=False)\n            self.has_vae_encoder = False\n        self.wavvae.eval()\n        self.wavvae.to(device)\n        self.vae_stride = hp_wavvae.get('vae_stride', 4)\n        self.hop_size = hp_wavvae.get('hop_size', 4)\n    \n    def preprocess(self, audio_bytes, latent_file=None, topk_dur=1, **kwargs):\n        wav_bytes = convert_to_wav_bytes(audio_bytes)\n\n        ''' Load wav '''\n        wav, _ = librosa.core.load(wav_bytes, sr=self.sr)\n        # Pad wav if necessary\n        ws = hparams['win_size']\n        if len(wav) % ws < ws - 1:\n            wav = np.pad(wav, (0, ws - 1 - (len(wav) % ws)), mode='constant', constant_values=0.0).astype(np.float32)\n        wav = np.pad(wav, (0, 12000), mode='constant', constant_values=0.0).astype(np.float32)\n        self.loudness_prompt = self.loudness_meter.integrated_loudness(wav.astype(float))\n\n        ''' obtain alignments with aligner_lm '''\n        ph_ref, tone_ref, mel2ph_ref = align(self, wav)\n\n        with torch.inference_mode():\n            ''' Forward WaveVAE to obtain: prompt latent '''\n            if self.has_vae_encoder:\n                wav = torch.FloatTensor(wav)[None].to(self.device)\n                vae_latent = self.wavvae.encode_latent(wav)\n                vae_latent = vae_latent[:, :mel2ph_ref.size(1)//4]\n            else:\n                assert latent_file is not None, \"Please provide latent_file in WaveVAE decoder-only mode\"\n                vae_latent = torch.from_numpy(np.load(latent_file)).to(self.device)\n                vae_latent = vae_latent[:, :mel2ph_ref.size(1)//4]\n        \n            ''' Duration Prompting '''\n            self.dur_model.hparams[\"infer_top_k\"] = topk_dur if topk_dur > 1 else None\n            incremental_state_dur_prompt, ctx_dur_tokens = make_dur_prompt(self, mel2ph_ref, ph_ref, tone_ref)\n            \n        return {\n            'ph_ref': ph_ref,\n            'tone_ref': tone_ref,\n            'mel2ph_ref': mel2ph_ref,\n            'vae_latent': vae_latent,\n            'incremental_state_dur_prompt': incremental_state_dur_prompt,\n            'ctx_dur_tokens': ctx_dur_tokens,\n        }\n\n    def forward(self, resource_context, input_text, time_step, p_w, t_w, dur_disturb=0.1, dur_alpha=1.0, **kwargs):\n        device = self.device\n\n        ph_ref = resource_context['ph_ref'].to(device)\n        tone_ref = resource_context['tone_ref'].to(device)\n        mel2ph_ref = resource_context['mel2ph_ref'].to(device)\n        vae_latent = resource_context['vae_latent'].to(device)\n        ctx_dur_tokens = resource_context['ctx_dur_tokens'].to(device)\n        incremental_state_dur_prompt = resource_context['incremental_state_dur_prompt']\n\n        with torch.inference_mode():\n            ''' Generating '''\n            wav_pred_ = []\n            language_type = classify_language(input_text)\n            if language_type == 'en':\n                input_text = self.en_normalizer.normalize(input_text)\n                text_segs = chunk_text_english(input_text, max_chars=130)\n            else:\n                input_text = self.zh_normalizer.normalize(input_text)\n                text_segs = chunk_text_chinese(input_text, limit=60)\n\n            for seg_i, text in enumerate(text_segs):\n                ''' G2P '''\n                ph_pred, tone_pred = g2p(self, text)\n\n                ''' Duration Prediction '''\n                mel2ph_pred = dur_pred(self, ctx_dur_tokens, incremental_state_dur_prompt, ph_pred, tone_pred, seg_i, dur_disturb, dur_alpha, is_first=seg_i==0, is_final=seg_i==len(text_segs)-1)\n                \n                inputs = prepare_inputs_for_dit(self, mel2ph_ref, mel2ph_pred, ph_ref, tone_ref, ph_pred, tone_pred, vae_latent)\n                # Speech dit inference\n                with torch.cuda.amp.autocast(dtype=self.precision, enabled=True):\n                    x = self.dit.inference(inputs, timesteps=time_step, seq_cfg_w=[p_w, t_w]).float()\n                \n                # WavVAE decode\n                x[:, :vae_latent.size(1)] = vae_latent\n                wav_pred = self.wavvae.decode(x)[0,0].to(torch.float32)\n                \n                ''' Post-processing '''\n                # Trim prompt wav\n                wav_pred = wav_pred[vae_latent.size(1)*self.vae_stride*self.hop_size:].cpu().numpy()\n                # Norm generated wav to prompt wav's level\n                meter = pyln.Meter(self.sr)  # create BS.1770 meter\n                loudness_pred = self.loudness_meter.integrated_loudness(wav_pred.astype(float))\n                wav_pred = pyln.normalize.loudness(wav_pred, loudness_pred, self.loudness_prompt)\n                if np.abs(wav_pred).max() >= 1:\n                    wav_pred = wav_pred / np.abs(wav_pred).max() * 0.95\n\n                # Apply hamming window\n                wav_pred_.append(wav_pred)\n\n            return combine_audio_segments(wav_pred_, sr=self.sr).astype(float)\n\n\nif __name__ == '__main__':\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--input_wav', type=str)\n    parser.add_argument('--input_text', type=str)\n    parser.add_argument('--output_dir', type=str)\n    parser.add_argument('--time_step', type=int, default=32, help='Inference steps of Diffusion Transformer')\n    parser.add_argument('--p_w', type=float, default=1.6, help='Intelligibility Weight')\n    parser.add_argument('--t_w', type=float, default=2.5, help='Similarity Weight')\n    args = parser.parse_args()\n    wav_path, input_text, out_path, time_step, p_w, t_w = args.input_wav, args.input_text, args.output_dir, args.time_step, args.p_w, args.t_w\n\n    infer_ins = MegaTTS3DiTInfer()\n\n    with open(wav_path, 'rb') as file:\n        file_content = file.read()\n\n    print(f\"| Start processing {wav_path}+{input_text}\")\n    resource_context = infer_ins.preprocess(file_content, latent_file=wav_path.replace('.wav', '.npy'))\n    wav_bytes = infer_ins.forward(resource_context, input_text, time_step=time_step, p_w=p_w, t_w=t_w)\n\n    print(f\"| Saving results to {out_path}/[P]{input_text[:20]}.wav\")\n    os.makedirs(out_path, exist_ok=True)\n    save_wav(wav_bytes, f'{out_path}/[P]{input_text[:20]}.wav')"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/aligner/whisper_small.py",
    "content": "# MIT License\n\n# Copyright (c) 2022 OpenAI\n\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\n\n# Copyright (c) [2022] [OpenAI] \n# Copyright (c) [2025] [Ziyue Jiang] \n# SPDX-License-Identifier: MIT\n# This file has been modified by Ziyue Jiang on 2025/03/19\n# Original file was released under MIT, with the full license text # available at https://github.com/openai/whisper/blob/v20240930/LICENSE.\n# This modified file is released under the same license.\n\nfrom contextlib import contextmanager\nfrom typing import Dict, Iterable, Optional, Tuple\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom torch import Tensor, nn\n\nfrom torch.nn.functional import scaled_dot_product_attention\nSDPA_AVAILABLE = True\n\n\nclass LayerNorm(nn.LayerNorm):\n    def forward(self, x: Tensor) -> Tensor:\n        return super().forward(x.float()).type(x.dtype)\n\n\nclass Linear(nn.Linear):\n    def forward(self, x: Tensor) -> Tensor:\n        return F.linear(\n            x,\n            self.weight.to(x.dtype),\n            None if self.bias is None else self.bias.to(x.dtype),\n        )\n\n\nclass Conv1d(nn.Conv1d):\n    def _conv_forward(\n        self, x: Tensor, weight: Tensor, bias: Optional[Tensor]\n    ) -> Tensor:\n        return super()._conv_forward(\n            x, weight.to(x.dtype), None if bias is None else bias.to(x.dtype)\n        )\n\n\ndef sinusoids(length, channels, max_timescale=10000):\n    \"\"\"Returns sinusoids for positional embedding\"\"\"\n    assert channels % 2 == 0\n    log_timescale_increment = np.log(max_timescale) / (channels // 2 - 1)\n    inv_timescales = torch.exp(-log_timescale_increment * torch.arange(channels // 2))\n    scaled_time = torch.arange(length)[:, np.newaxis] * inv_timescales[np.newaxis, :]\n    return torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], dim=1)\n\n\n@contextmanager\ndef disable_sdpa():\n    prev_state = MultiHeadAttention.use_sdpa\n    try:\n        MultiHeadAttention.use_sdpa = False\n        yield\n    finally:\n        MultiHeadAttention.use_sdpa = prev_state\n\n\nclass MultiHeadAttention(nn.Module):\n    use_sdpa = True\n\n    def __init__(self, n_state: int, n_head: int):\n        super().__init__()\n        self.n_head = n_head\n        self.query = Linear(n_state, n_state)\n        self.key = Linear(n_state, n_state, bias=False)\n        self.value = Linear(n_state, n_state)\n        self.out = Linear(n_state, n_state)\n\n    def forward(\n        self,\n        x: Tensor,\n        xa: Optional[Tensor] = None,\n        mask: Optional[Tensor] = None,\n        kv_cache: Optional[dict] = None,\n        casual: Optional[bool] = None\n    ):\n        q = self.query(x)\n\n        if kv_cache is None or xa is None or self.key not in kv_cache:\n            # hooks, if installed (i.e. kv_cache is not None), will prepend the cached kv tensors;\n            # otherwise, perform key/value projections for self- or cross-attention as usual.\n            k = self.key(x if xa is None else xa)\n            v = self.value(x if xa is None else xa)\n        else:\n            # for cross-attention, calculate keys and values once and reuse in subsequent calls.\n            k = kv_cache[self.key]\n            v = kv_cache[self.value]\n\n        wv = self.qkv_attention(q, k, v, mask, casual)\n        return self.out(wv)\n\n    def qkv_attention(\n        self, q: Tensor, k: Tensor, v: Tensor, mask: Optional[Tensor] = None, casual: Optional[bool] = None\n    ) -> Tuple[torch.Tensor, Optional[torch.Tensor]]:\n        n_batch, n_ctx, n_state = q.shape\n        scale = (n_state // self.n_head) ** -0.25\n        q = q.view(*q.shape[:2], self.n_head, -1).permute(0, 2, 1, 3)\n        k = k.view(*k.shape[:2], self.n_head, -1).permute(0, 2, 1, 3)\n        v = v.view(*v.shape[:2], self.n_head, -1).permute(0, 2, 1, 3)\n\n        a = scaled_dot_product_attention(\n            q, k, v, is_causal=casual and n_ctx > 1, attn_mask=mask[:, None, None, :] if mask is not None else None\n        )\n        out = a.permute(0, 2, 1, 3).flatten(start_dim=2)\n        return out\n\n\nclass ResidualAttentionBlock(nn.Module):\n    def __init__(self, n_state: int, n_head: int, cross_attention: bool = False):\n        super().__init__()\n\n        self.attn = MultiHeadAttention(n_state, n_head)\n        self.attn_ln = LayerNorm(n_state)\n\n        self.cross_attn = (\n            MultiHeadAttention(n_state, n_head) if cross_attention else None\n        )\n        self.cross_attn_ln = LayerNorm(n_state) if cross_attention else None\n\n        n_mlp = n_state * 4\n        self.mlp = nn.Sequential(\n            Linear(n_state, n_mlp), nn.GELU(), Linear(n_mlp, n_state)\n        )\n        self.mlp_ln = LayerNorm(n_state)\n\n    def forward(\n        self,\n        x: Tensor,\n        xa: Optional[Tensor] = None,\n        mask: Optional[Tensor] = None,\n        kv_cache: Optional[dict] = None,\n        casual: Optional[bool] = None,\n    ):\n        x = x + self.attn(self.attn_ln(x), mask=mask, kv_cache=kv_cache, casual=casual)\n        if self.cross_attn:\n            # TODO: Cross attention mask\n            x = x + self.cross_attn(self.cross_attn_ln(x), xa, kv_cache=kv_cache, casual=False)\n        x = x + self.mlp(self.mlp_ln(x))\n        return x\n\n\nclass AudioEncoder(nn.Module):\n    def __init__(\n        self, n_mels: int, n_ctx: int, n_state: int, n_head: int, n_layer: int\n    ):\n        super().__init__()\n        self.conv1 = Conv1d(n_mels, n_state, kernel_size=3, padding=1)\n        self.conv2 = Conv1d(n_state, n_state, kernel_size=3, stride=2, padding=1)\n        self.register_buffer(\"positional_embedding\", sinusoids(n_ctx, n_state))\n\n        self.blocks: Iterable[ResidualAttentionBlock] = nn.ModuleList(\n            [ResidualAttentionBlock(n_state, n_head) for _ in range(n_layer)]\n        )\n        self.ln_post = LayerNorm(n_state)\n\n    def forward(self, x: Tensor, attn_mask: Tensor):\n        \"\"\"\n        x : torch.Tensor, shape = (batch_size, n_mels, n_ctx)\n            the mel spectrogram of the audio\n        \"\"\"\n        x = F.gelu(self.conv1(x))\n        x = F.gelu(self.conv2(x))\n        x = x.permute(0, 2, 1)\n\n        # assert x.shape[1:] == self.positional_embedding.shape, \"incorrect audio shape\"\n        x = (x + self.positional_embedding[:x.size(1)]).to(x.dtype)\n\n        for block in self.blocks:\n            x = block(x, mask=attn_mask, casual=False)\n\n        x = self.ln_post(x)\n        return x\n\n\nclass TextDecoder(nn.Module):\n    def __init__(\n        self, n_vocab: int, n_ctx: int, n_state: int, n_head: int, n_layer: int\n    ):\n        super().__init__()\n\n        self.token_embedding = nn.Embedding(n_vocab, n_state)\n        self.positional_embedding = nn.Parameter(torch.empty(n_ctx, n_state))\n\n        self.blocks: Iterable[ResidualAttentionBlock] = nn.ModuleList(\n            [\n                ResidualAttentionBlock(n_state, n_head, cross_attention=True)\n                for _ in range(n_layer)\n            ]\n        )\n        self.ln = LayerNorm(n_state)\n\n        self.out_proj = nn.Linear(n_state, n_vocab)\n\n    def forward(self, x: Tensor, attn_mask: Tensor, xa: Tensor, kv_cache: Optional[dict] = None):\n        \"\"\"\n        x : torch.LongTensor, shape = (batch_size, <= n_ctx)\n            the text tokens\n        xa : torch.Tensor, shape = (batch_size, n_audio_ctx, n_audio_state)\n            the encoded audio features to be attended on\n        \"\"\"\n        offset = next(iter(kv_cache.values())).shape[1] if kv_cache else 0\n        x = (\n            self.token_embedding(x)\n            + self.positional_embedding[offset : offset + x.shape[-1]]\n        )\n        x = x.to(xa.dtype)\n\n        for block in self.blocks:\n            x = block(x, xa, mask=attn_mask, kv_cache=kv_cache, casual=True)\n\n        x = self.ln(x)\n        # logits = (\n        #     x @ torch.transpose(self.token_embedding.weight.to(x.dtype), 0, 1)\n        # ).float()\n        logits = self.out_proj(x)\n\n        return logits\n\n\nclass Whisper(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.n_vocab = 6800\n        self.n_text_layer = 6\n        self.n_text_head = 8\n        self.n_text_ctx = 2048\n\n        self.encoder = AudioEncoder(\n            n_mels=80, n_ctx=3000, n_state=512, n_head=8, n_layer=6,\n        )\n        self.decoder = TextDecoder(\n            n_vocab=6800, n_ctx=2048, n_state=512, n_head=8, n_layer=6,\n        )\n\n    def embed_audio(self, mel: torch.Tensor):\n        return self.encoder(mel, None)\n\n    def logits(self, tokens, audio_features, kv_cache=None):\n        return self.decoder(tokens, None, audio_features, kv_cache=kv_cache)\n\n    def forward(\n        self, mel, mel_len, token, token_len\n    ) -> Dict[str, torch.Tensor]:\n        attn_mask_enc = self.sequence_mask(mel_len//2, device=mel.device) > 0\n        attn_mask_dec = self.sequence_mask(token_len, device=mel.device) > 0\n        return self.decoder(token, attn_mask_dec, self.encoder(mel, attn_mask_enc))\n\n    @property\n    def device(self):\n        return next(self.parameters()).device\n\n    def install_kv_cache_hooks(self, cache: Optional[dict] = None):\n        \"\"\"\n        The `MultiHeadAttention` module optionally accepts `kv_cache` which stores the key and value\n        tensors calculated for the previous positions. This method returns a dictionary that stores\n        all caches, and the necessary hooks for the key and value projection modules that save the\n        intermediate tensors to be reused during later calculations.\n\n        Returns\n        -------\n        cache : Dict[nn.Module, torch.Tensor]\n            A dictionary object mapping the key/value projection modules to its cache\n        hooks : List[RemovableHandle]\n            List of PyTorch RemovableHandle objects to stop the hooks to be called\n        \"\"\"\n        cache = {**cache} if cache is not None else {}\n        hooks = []\n\n        def save_to_cache(module, _, output):\n            if module not in cache or output.shape[1] > self.n_text_ctx:\n                # save as-is, for the first token or cross attention\n                cache[module] = output\n            else:\n                cache[module] = torch.cat([cache[module], output], dim=1).detach()\n            return cache[module]\n\n        def install_hooks(layer: nn.Module):\n            if isinstance(layer, MultiHeadAttention):\n                hooks.append(layer.key.register_forward_hook(save_to_cache))\n                hooks.append(layer.value.register_forward_hook(save_to_cache))\n\n        self.decoder.apply(install_hooks)\n        return cache, hooks\n    \n    def sequence_mask(self, seq_lens, max_len=None, device='cpu'):\n        b = seq_lens.shape[0]\n        if max_len is None:\n            max_len = seq_lens.max()\n        mask = torch.arange(max_len).unsqueeze(0).to(device)  # [1, t]\n        mask = mask < (seq_lens.unsqueeze(1))  # [1, t] + [b, 1] = [b, t]\n        mask = mask.float()\n        return mask\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/ar_dur/ar_dur_predictor.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport random\nfrom copy import deepcopy\n\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn\nfrom torch.nn import Linear\nfrom tqdm import tqdm\n\nfrom tts.modules.ar_dur.commons.layers import Embedding, LayerNorm\nfrom tts.modules.ar_dur.commons.nar_tts_modules import PosEmb\nfrom tts.modules.ar_dur.commons.rot_transformer import RotTransformerDecoderLayer\nfrom tts.modules.ar_dur.commons.transformer import SinusoidalPositionalEmbedding\nfrom tts.modules.ar_dur.commons.rel_transformer import RelTransformerEncoder\n\nFS_ENCODERS = {\n    'rel_fft': lambda hp, dict_size: RelTransformerEncoder(\n        dict_size, hp['hidden_size'], hp['hidden_size'],\n        hp['ffn_hidden_size'], hp['num_heads'], hp['enc_layers'],\n        hp['enc_ffn_kernel_size'], hp['dropout'], prenet=hp['enc_prenet'], pre_ln=hp['enc_pre_ln']),\n}\n\ndef fill_with_neg_inf2(t):\n    \"\"\"FP16-compatible function that fills a tensor with -inf.\"\"\"\n    return t.float().fill_(-1e8).type_as(t)\n\ndef expand_states(h, mel2token):\n    h = F.pad(h, [0, 0, 1, 0])\n    mel2token_ = mel2token[..., None].repeat([1, 1, h.shape[-1]])\n    h = torch.gather(h, 1, mel2token_)  # [B, T, H]\n    return h\n\n\nclass CodePredictor(nn.Module):\n    def __init__(self, hparams, hidden_size, dec_hidden_size, lm_num_layers, dict_size, code_size):\n        super().__init__()\n        self.hparams = deepcopy(hparams)\n        self.hparams['hidden_size'] = hidden_size\n        self.hidden_size = hidden_size\n        char_dict_size = hparams.get('char_dict_size', 4000)\n        if not hparams.get('lm_use_enc'):\n            self.encoder = nn.Embedding(dict_size, self.hidden_size, padding_idx=0)\n            if hparams.get('mega_use_char', True):\n                self.char_encoder = nn.Embedding(char_dict_size,\n                                                 self.hidden_size, padding_idx=0)\n        else:\n            self.encoder = FS_ENCODERS[self.hparams['encoder_type']](self.hparams, dict_size)\n            if hparams.get('mega_use_char', True):\n                self.char_encoder = FS_ENCODERS[self.hparams['encoder_type']](self.hparams, char_dict_size)\n            if hparams['use_ph_pos_embed']:\n                self.ph_pos_embed = PosEmb(self.hidden_size)\n\n        self.char_empty_embed = nn.Embedding(1, self.hidden_size)\n        if hparams.get('use_bert_input'):\n            self.bert_input_proj = nn.Linear(768, self.hidden_size)\n        self.ling_label_embed_layers = nn.ModuleDict()\n        for k, s in zip(hparams['ling_labels'], hparams['ling_label_dict_size']):\n            self.ling_label_embed_layers[k] = Embedding(s + 3, self.hidden_size, padding_idx=0)\n\n        self.dec_hidden_size = dec_hidden_size\n        self.enc_proj = nn.Linear(self.hidden_size, dec_hidden_size)\n        self.code_emb = Embedding(code_size + 2, dec_hidden_size, 0)\n        self.use_pos_embed = hparams.get('use_pos_embed', False)\n        if self.use_pos_embed:\n            self.embed_positions = SinusoidalPositionalEmbedding(dec_hidden_size, 0, init_size=1024)\n        self.use_post_ln = hparams.get('use_post_ln', False)\n        self.layers = None\n        if not self.use_post_ln:\n            self.layer_norm = LayerNorm(dec_hidden_size)\n        self.code_size = code_size\n        self.project_out_dim = Linear(dec_hidden_size, code_size + 1, bias=True)\n\n    def forward_ling_encoder(\n            self, txt_tokens, ling_feas, char_tokens, ph2char, bert_embed, spk_id, spk_embed, mels_timbre):\n        ph_tokens = txt_tokens\n        hparams = self.hparams\n        ph_nonpadding = (ph_tokens > 0).float()[:, :, None]  # [B, T_phone, 1]\n        x_spk = self.forward_style_embed(spk_embed, spk_id, mels_timbre)\n\n        # enc_ph\n        if not hparams.get('lm_use_enc'):\n            x_ph = self.encoder(ph_tokens)\n            x_ph = x_ph + sum(\n                [self.ling_label_embed_layers[k](ling_feas[k]) for k in hparams['ling_labels']]) \\\n                if len(hparams['ling_labels']) > 0 else 0\n            x_ph = x_ph + x_spk\n        else:\n            # enc_ph\n            ph_enc_oembed = sum(\n                [self.ling_label_embed_layers[k](ling_feas[k]) for k in hparams['ling_labels']]) \\\n                if len(hparams['ling_labels']) > 0 else 0\n            ph_enc_oembed = ph_enc_oembed + self.ph_pos_embed(\n                torch.arange(0, ph_tokens.shape[1])[None,].to(ph_tokens.device))\n            ph_enc_oembed = ph_enc_oembed + x_spk\n            ph_enc_oembed = ph_enc_oembed * ph_nonpadding\n            x_ph = self.encoder(ph_tokens, other_embeds=ph_enc_oembed)\n\n        # enc_char\n        if char_tokens is not None and ph2char is not None:\n            char_nonpadding = (char_tokens > 0).float()[:, :, None]\n            x_char = self.char_encoder(char_tokens)\n            empty_char = (ph2char > 100000).long()\n            ph2char = ph2char * (1 - empty_char)\n            x_char_phlevel = \\\n                expand_states(x_char * char_nonpadding, ph2char) \\\n                * (1 - empty_char)[..., None] + \\\n                self.char_empty_embed(torch.zeros_like(ph_tokens)) * empty_char[..., None]\n        else:\n            x_char_phlevel = 0\n        # x_ling\n        x_ling = x_ph + x_char_phlevel\n        x_ling = x_ling * ph_nonpadding\n        x_ling = self.enc_proj(x_ling)\n        return x_ling\n\n    def sample_one_step(self, vq_pred):\n        hparams = self.hparams\n        if hparams.get('infer_top_k'):\n            top_k = hparams.get('infer_top_k')\n            temperature = hparams.get('infer_temperature', 1)\n            vq_pred = vq_pred[:, -1] / temperature\n            # optionally crop the logits to only the top k options\n            if top_k is not None:\n                v, _ = torch.topk(vq_pred, min(top_k, vq_pred.size(-1)))\n                vq_pred[vq_pred < v[:, [-1]]] = -float('Inf')\n            # apply softmax to convert logits to (normalized) probabilities\n            probs = F.softmax(vq_pred, dim=-1)\n            # sample from the distribution\n            vq_pred = torch.multinomial(probs, num_samples=1)\n        else:\n            vq_pred = torch.argmax(F.softmax(vq_pred[:, -1], dim=-1), 1)\n        return vq_pred\n\n    def forward_style_embed(self, spk_embed=None, spk_id=None, mel_ref=None):\n        # add spk embed\n        style_embed = 0\n        if self.hparams['use_spk_embed']:\n            style_embed = style_embed + self.spk_embed_proj(spk_embed)[:, None, :]\n        if self.hparams['use_spk_id']:\n            style_embed = style_embed + self.spk_id_proj(spk_id)[:, None, :]\n        if self.hparams['use_spk_enc']:\n            style_embed = style_embed + self.spk_enc(mel_ref)[:, None, :]\n        return style_embed\n\n    def buffered_future_mask(self, tensor):\n        dim = tensor.size(0)\n        if (\n                not hasattr(self, '_future_mask')\n                or self._future_mask is None\n                or self._future_mask.device != tensor.device\n                or self._future_mask.size(0) < dim\n        ):\n            self._future_mask = torch.triu(fill_with_neg_inf2(tensor.new(dim, dim)), 1)\n        return self._future_mask[:dim, :dim]\n\n\nclass ARDurPredictor(CodePredictor):\n    def __init__(self, hparams, hidden_size, dec_hidden_size, lm_num_layers, dict_size, code_size, use_rot_embed=True,\n                 op_version=1):\n        super().__init__(hparams, hidden_size, dec_hidden_size, lm_num_layers, dict_size, code_size)\n        self.use_rot_embed = use_rot_embed\n        bias = hparams.get('lm_bias', True)\n        if self.use_rot_embed:\n            self.layers = nn.ModuleList([])\n            self.layers.extend([\n                RotTransformerDecoderLayer(\n                    dec_hidden_size, 0.0, kernel_size=1, ffn_hidden_size=dec_hidden_size * 4,\n                    post_ln=self.use_post_ln, op_version=op_version, bias=bias)\n                for _ in range(lm_num_layers)\n            ])\n        if hparams['dur_model_type'] == 'ar_mse':\n            self.project_out_dim = nn.Sequential(torch.nn.Linear(dec_hidden_size, 1), nn.Softplus())\n        else:\n            self.project_out_dim = torch.nn.Linear(dec_hidden_size, code_size + 1)\n\n    def forward(self, txt_tokens, ling_feas, char_tokens, ph2char, bert_embed,\n                prev_code, spk_id=None, spk_embed=None, mels_timbre=None, mel2ph=None,\n                incremental_state=None, x_ling=None, attn_mask=None, spk_pos_ids_flat=None,\n                prompt_length=None, cache_size=20, streaming=False):\n        x = self.code_emb(prev_code)\n        if x_ling is None:\n            x_ling = self.forward_ling_encoder(\n                txt_tokens, ling_feas, char_tokens, ph2char, bert_embed, spk_id, spk_embed, mels_timbre)\n            x_ling = x_ling.flatten(0, 1)\n            txt_tokens = txt_tokens.flatten(0, 1)\n            x_ling = x_ling[txt_tokens > 0][None]\n\n        # run decoder\n        self_attn_padding_mask = None\n        if self.use_pos_embed:\n            positions = self.embed_positions(\n                prev_code,\n                incremental_state=incremental_state\n            )\n        if incremental_state is not None:\n            x_ling = x_ling[:, x.shape[1] - 1:x.shape[1]]\n            if spk_pos_ids_flat is not None:\n                spk_pos_ids_flat = spk_pos_ids_flat[:, x.shape[1] - 1:x.shape[1]]\n            x = x[:, -1:]\n            if self.use_pos_embed:\n                positions = positions[:, -1:]\n            if streaming:\n                # Shift Pos: query pos is min(cache_size, idx)\n                spk_pos_ids_flat = torch.min(torch.LongTensor([prompt_length + cache_size]).to(x.device),\n                                             spk_pos_ids_flat)\n\n        # # B x T x C -> T x B x C\n        if self.use_pos_embed:\n            x = x + positions\n        x_ling = x_ling[:, :self.hparams['max_tokens']].contiguous()\n        T = min(self.hparams.get('max_tokens_per_item', 1e9), x_ling.shape[1])\n        x_ling = x_ling.reshape(-1, T, x_ling.shape[-1])\n        x = x + x_ling\n        x = x.transpose(0, 1)\n\n        for idx, layer in enumerate(self.layers):\n            if incremental_state is None:\n                self_attn_mask = self.buffered_future_mask(x)\n                if attn_mask is not None:\n                    self_attn_mask = self_attn_mask + (1 - attn_mask.float()) * -1e8\n                self_attn_mask = self_attn_mask.clamp_min(-1e8)\n            else:\n                self_attn_mask = None\n\n            x, attn_weights = layer(\n                x,\n                incremental_state=incremental_state,\n                self_attn_mask=self_attn_mask,\n                self_attn_padding_mask=self_attn_padding_mask,\n                spk_pos_ids_flat=spk_pos_ids_flat\n            )\n\n        if streaming and incremental_state != {}:\n            for k, v in incremental_state.items():\n                if 'attn_state' in k:\n                    prev_key, prev_value = incremental_state[k]['prev_key'], incremental_state[k]['prev_value']\n                    cur_length = prev_key.shape[2]\n                    if cur_length - prompt_length > cache_size:\n                        prev_key = torch.cat((prev_key[:, :, :prompt_length], prev_key[:, :, -cache_size:]), dim=2)\n                        prev_value = torch.cat((prev_value[:, :, :prompt_length], prev_value[:, :, -cache_size:]),\n                                               dim=2)\n                    incremental_state[k]['prev_key'], incremental_state[k]['prev_value'] = prev_key, prev_value\n\n        if not self.use_post_ln:\n            x = self.layer_norm(x)\n        # T x B x C -> B x T x C\n        x = x.transpose(0, 1)\n        x = self.project_out_dim(x)\n        return x\n\n    def infer(self, txt_tokens, ling_feas, char_tokens, ph2char, bert_embed,\n              spk_id=None, spk_embed=None, mels_timbre=None,\n              incremental_state=None, ctx_vqcodes=None, spk_pos_ids_flat=None, return_state=False,\n              first_step_min=0, return_probs=False, first_decoder_inp=None, dur_disturb=0.0, **kwargs):\n        if incremental_state is None:\n            incremental_state = {}\n        x_ling = self.forward_ling_encoder(\n            txt_tokens, ling_feas, char_tokens, ph2char, bert_embed,\n            spk_id, spk_embed, mels_timbre)\n        x_ling = x_ling.flatten(0, 1)\n        txt_tokens_ori = txt_tokens\n        txt_tokens_withpad = txt_tokens = txt_tokens.flatten(0, 1)\n        x_ling = x_ling[txt_tokens > 0][None]\n        txt_tokens = txt_tokens[txt_tokens > 0][None]\n\n        decoded = torch.zeros_like(txt_tokens)\n        decoded = F.pad(decoded, [1, 0], value=self.code_size + 1)\n        if incremental_state != {}:\n            if first_decoder_inp is None:\n                assert ctx_vqcodes is not None\n                decoded[:, :ctx_vqcodes.shape[1]] = ctx_vqcodes\n                ctx_vqcodes = None\n            else:\n                decoded[:, :1] = first_decoder_inp\n        probs = []\n        for step in range(decoded.shape[1] - 1):\n            vq_pred = self(txt_tokens, None, None, None, None,\n                           decoded[:, :step + 1], None, None, None,\n                           incremental_state=incremental_state, x_ling=x_ling,\n                           spk_pos_ids_flat=spk_pos_ids_flat, **kwargs)\n            probs.append(vq_pred.cpu())\n            if ctx_vqcodes is None or step >= ctx_vqcodes.shape[1]:\n                if self.hparams['dur_model_type'] == 'ar_mse':\n                    d = vq_pred[:, -1, 0]\n                    if dur_disturb > 0 and step >= 1:\n                        if random.random() > 0.5:\n                            d = d * (1 + random.random() * dur_disturb)\n                        else:\n                            d = d / (1 + random.random() * dur_disturb)\n                        d = torch.clamp_max(d, self.code_size - 1)\n                    vq_pred = torch.round(d).long()\n                else:\n                    vq_pred = self.sample_one_step(vq_pred)\n                decoded[:, step + 1] = torch.clamp_min(vq_pred, 1)\n                if step == 0:\n                    decoded[:, step + 1] = torch.clamp_min(vq_pred, first_step_min)\n            else:\n                decoded[:, step + 1] = ctx_vqcodes[:, step]\n        decoded = decoded[:, 1:]\n        decoded_2d = torch.zeros_like(txt_tokens_ori)\n        decoded_2d.flatten(0, 1)[txt_tokens_withpad > 0] = decoded\n        if return_state:\n            return decoded_2d, incremental_state\n        if return_probs:\n            return decoded_2d, torch.cat(probs, 1)\n        return decoded_2d\n\n    def streaming_infer(self, txt_tokens, ling_feas, char_tokens, ph2char, bert_embed,\n                        spk_id=None, spk_embed=None, mels_timbre=None,\n                        incremental_state=None, ctx_vqcodes=None, spk_pos_ids_flat=None, return_state=False,\n                        **kwargs):\n        if incremental_state is None:\n            incremental_state = {}\n        x_ling = self.forward_ling_encoder(\n            txt_tokens, ling_feas, char_tokens, ph2char, bert_embed,\n            spk_id, spk_embed, mels_timbre)\n        x_ling = x_ling.flatten(0, 1)\n        txt_tokens_ori = txt_tokens\n        txt_tokens_withpad = txt_tokens = txt_tokens.flatten(0, 1)\n        x_ling = x_ling[txt_tokens > 0][None]\n        txt_tokens = txt_tokens[txt_tokens > 0][None]\n\n        vq_decoded = torch.zeros_like(txt_tokens)\n        vq_decoded = F.pad(vq_decoded, [1, 0], value=self.code_size + 1)\n        if incremental_state != {}:\n            assert ctx_vqcodes is not None\n            vq_decoded[:, :ctx_vqcodes.shape[1]] = ctx_vqcodes\n            ctx_vqcodes = None\n        prompt_length = list(incremental_state.items())[0][1]['prev_key'].shape[2]\n        for step in tqdm(range(vq_decoded.shape[1] - 1), desc='AR Duration Predictor inference...'):\n            vq_pred = self(txt_tokens, None, None, None, None,\n                           vq_decoded[:, :step + 1], None, None, None,\n                           incremental_state=incremental_state, x_ling=x_ling,\n                           spk_pos_ids_flat=spk_pos_ids_flat, prompt_length=prompt_length, streaming=True, **kwargs)\n            if ctx_vqcodes is None or step >= ctx_vqcodes.shape[1]:\n                if self.hparams['dur_model_type'] == 'ar_mse':\n                    vq_pred = torch.round(vq_pred[:, -1, 0]).long()\n                else:\n                    vq_pred = self.sample_one_step(vq_pred)\n                vq_decoded[:, step + 1] = vq_pred\n            else:\n                vq_decoded[:, step + 1] = ctx_vqcodes[:, step]\n        vq_decoded = vq_decoded[:, 1:]\n        vq_decoded_2d = torch.zeros_like(txt_tokens_ori)\n        vq_decoded_2d.flatten(0, 1)[txt_tokens_withpad > 0] = vq_decoded\n        if return_state:\n            return vq_decoded_2d, incremental_state\n        return vq_decoded_2d"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/ar_dur/commons/layers.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport torch\nfrom torch import nn\n\n\nclass LayerNorm(torch.nn.LayerNorm):\n    \"\"\"Layer normalization module.\n    :param int nout: output dim size\n    :param int dim: dimension to be normalized\n    \"\"\"\n\n    def __init__(self, nout, dim=-1, eps=1e-5):\n        \"\"\"Construct an LayerNorm object.\"\"\"\n        super(LayerNorm, self).__init__(nout, eps=eps)\n        self.dim = dim\n\n    def forward(self, x):\n        \"\"\"Apply layer normalization.\n        :param torch.Tensor x: input tensor\n        :return: layer normalized tensor\n        :rtype torch.Tensor\n        \"\"\"\n        if self.dim == -1:\n            return super(LayerNorm, self).forward(x)\n        return super(LayerNorm, self).forward(x.transpose(1, -1)).transpose(1, -1)\n\n\nclass Reshape(nn.Module):\n    def __init__(self, *args):\n        super(Reshape, self).__init__()\n        self.shape = args\n\n    def forward(self, x):\n        return x.view(self.shape)\n\n\nclass Permute(nn.Module):\n    def __init__(self, *args):\n        super(Permute, self).__init__()\n        self.args = args\n\n    def forward(self, x):\n        return x.permute(self.args)\n\n\ndef Embedding(num_embeddings, embedding_dim, padding_idx=None):\n    m = nn.Embedding(num_embeddings, embedding_dim, padding_idx=padding_idx)\n    nn.init.normal_(m.weight, mean=0, std=embedding_dim ** -0.5)\n    if padding_idx is not None:\n        nn.init.constant_(m.weight[padding_idx], 0)\n    return m\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/ar_dur/commons/nar_tts_modules.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport math\n\nimport torch\nfrom torch import nn\n\nimport torch.nn.functional as F\n\n\nclass LengthRegulator(torch.nn.Module):\n    def __init__(self, pad_value=0.0):\n        super(LengthRegulator, self).__init__()\n        self.pad_value = pad_value\n\n    def forward(self, dur, dur_padding=None, alpha=1.0):\n        \"\"\"\n        Example (no batch dim version):\n            1. dur = [2,2,3]\n            2. token_idx = [[1],[2],[3]], dur_cumsum = [2,4,7], dur_cumsum_prev = [0,2,4]\n            3. token_mask = [[1,1,0,0,0,0,0],\n                             [0,0,1,1,0,0,0],\n                             [0,0,0,0,1,1,1]]\n            4. token_idx * token_mask = [[1,1,0,0,0,0,0],\n                                         [0,0,2,2,0,0,0],\n                                         [0,0,0,0,3,3,3]]\n            5. (token_idx * token_mask).sum(0) = [1,1,2,2,3,3,3]\n\n        :param dur: Batch of durations of each frame (B, T_txt)\n        :param dur_padding: Batch of padding of each frame (B, T_txt)\n        :param alpha: duration rescale coefficient\n        :return:\n            mel2ph (B, T_speech)\n        assert alpha > 0\n        \"\"\"\n        dur = torch.round(dur.float() * alpha).long()\n        if dur_padding is not None:\n            dur = dur * (1 - dur_padding.long())\n        token_idx = torch.arange(1, dur.shape[1] + 1)[None, :, None].to(dur.device)\n        dur_cumsum = torch.cumsum(dur, 1)\n        dur_cumsum_prev = F.pad(dur_cumsum, [1, -1], mode='constant', value=0)\n\n        pos_idx = torch.arange(dur.sum(-1).max())[None, None].to(dur.device)\n        token_mask = (pos_idx >= dur_cumsum_prev[:, :, None]) & (pos_idx < dur_cumsum[:, :, None])\n        mel2token = (token_idx * token_mask.long()).sum(1)\n        return mel2token\n\n\nclass PosEmb(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.dim = dim\n        half_dim = self.dim // 2\n        emb = math.log(10000) / (half_dim - 1)\n        emb = torch.exp(torch.arange(half_dim) * -emb)\n        self.emb = emb  # TODO\n\n    def forward(self, x):\n        emb = x[:, :, None] * self.emb[None, None, :].to(x.device)\n        emb = torch.cat((emb.sin(), emb.cos()), dim=-1)\n        return emb\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/ar_dur/commons/rel_transformer.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport math\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom tts.modules.ar_dur.commons.layers import Embedding\n\n\ndef convert_pad_shape(pad_shape):\n    l = pad_shape[::-1]\n    pad_shape = [item for sublist in l for item in sublist]\n    return pad_shape\n\n\ndef shift_1d(x):\n    x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [1, 0]]))[:, :, :-1]\n    return x\n\n\ndef sequence_mask(length, max_length=None):\n    if max_length is None:\n        max_length = length.max()\n    x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n    return x.unsqueeze(0) < length.unsqueeze(1)\n\n\nclass Encoder(nn.Module):\n    def __init__(self, hidden_channels, filter_channels, n_heads, n_layers, kernel_size=1, p_dropout=0.,\n                 window_size=None, block_length=None, pre_ln=False, **kwargs):\n        super().__init__()\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.window_size = window_size\n        self.block_length = block_length\n        self.pre_ln = pre_ln\n\n        self.drop = nn.Dropout(p_dropout)\n        self.attn_layers = nn.ModuleList()\n        self.norm_layers_1 = nn.ModuleList()\n        self.ffn_layers = nn.ModuleList()\n        self.norm_layers_2 = nn.ModuleList()\n        for i in range(self.n_layers):\n            self.attn_layers.append(\n                MultiHeadAttention(hidden_channels, hidden_channels, n_heads, window_size=window_size,\n                                   p_dropout=p_dropout, block_length=block_length))\n            self.norm_layers_1.append(LayerNorm(hidden_channels))\n            self.ffn_layers.append(\n                FFN(hidden_channels, hidden_channels, filter_channels, kernel_size, p_dropout=p_dropout))\n            self.norm_layers_2.append(LayerNorm(hidden_channels))\n        if pre_ln:\n            self.last_ln = LayerNorm(hidden_channels)\n\n    def forward(self, x, x_mask, attn_mask=1):\n        if isinstance(attn_mask, torch.Tensor):\n            attn_mask = attn_mask[:, None]\n        attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1) * attn_mask\n        for i in range(self.n_layers):\n            x = x * x_mask\n            x_ = x\n            if self.pre_ln:\n                x = self.norm_layers_1[i](x)\n            y = self.attn_layers[i](x, x, attn_mask)\n            y = self.drop(y)\n            x = x_ + y\n            if not self.pre_ln:\n                x = self.norm_layers_1[i](x)\n\n            x_ = x\n            if self.pre_ln:\n                x = self.norm_layers_2[i](x)\n            y = self.ffn_layers[i](x, x_mask)\n            y = self.drop(y)\n            x = x_ + y\n            if not self.pre_ln:\n                x = self.norm_layers_2[i](x)\n        if self.pre_ln:\n            x = self.last_ln(x)\n        x = x * x_mask\n        return x\n\n\nclass MultiHeadAttention(nn.Module):\n    def __init__(self, channels, out_channels, n_heads, window_size=None, heads_share=True, p_dropout=0.,\n                 block_length=None, proximal_bias=False, proximal_init=False):\n        super().__init__()\n        assert channels % n_heads == 0\n\n        self.channels = channels\n        self.out_channels = out_channels\n        self.n_heads = n_heads\n        self.window_size = window_size\n        self.heads_share = heads_share\n        self.block_length = block_length\n        self.proximal_bias = proximal_bias\n        self.p_dropout = p_dropout\n        self.attn = None\n\n        self.k_channels = channels // n_heads\n        self.conv_q = nn.Conv1d(channels, channels, 1)\n        self.conv_k = nn.Conv1d(channels, channels, 1)\n        self.conv_v = nn.Conv1d(channels, channels, 1)\n        if window_size is not None:\n            n_heads_rel = 1 if heads_share else n_heads\n            rel_stddev = self.k_channels ** -0.5\n            self.emb_rel_k = nn.Parameter(torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels) * rel_stddev)\n            self.emb_rel_v = nn.Parameter(torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels) * rel_stddev)\n        self.conv_o = nn.Conv1d(channels, out_channels, 1)\n        self.drop = nn.Dropout(p_dropout)\n\n        nn.init.xavier_uniform_(self.conv_q.weight)\n        nn.init.xavier_uniform_(self.conv_k.weight)\n        if proximal_init:\n            self.conv_k.weight.data.copy_(self.conv_q.weight.data)\n            self.conv_k.bias.data.copy_(self.conv_q.bias.data)\n        nn.init.xavier_uniform_(self.conv_v.weight)\n\n    def forward(self, x, c, attn_mask=None):\n        q = self.conv_q(x)\n        k = self.conv_k(c)\n        v = self.conv_v(c)\n\n        x, self.attn = self.attention(q, k, v, mask=attn_mask)\n\n        x = self.conv_o(x)\n        return x\n\n    def attention(self, query, key, value, mask=None):\n        # reshape [b, d, t] -> [b, n_h, t, d_k]\n        b, d, t_s, t_t = (*key.size(), query.size(2))\n        query = query.view(b, self.n_heads, self.k_channels, t_t).transpose(2, 3)\n        key = key.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)\n        value = value.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)\n\n        scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(self.k_channels)\n        if self.window_size is not None:\n            assert t_s == t_t, \"Relative attention is only available for self-attention.\"\n            key_relative_embeddings = self._get_relative_embeddings(self.emb_rel_k, t_s)\n            rel_logits = self._matmul_with_relative_keys(query, key_relative_embeddings)\n            rel_logits = self._relative_position_to_absolute_position(rel_logits)\n            scores_local = rel_logits / math.sqrt(self.k_channels)\n            scores = scores + scores_local\n        if self.proximal_bias:\n            assert t_s == t_t, \"Proximal bias is only available for self-attention.\"\n            scores = scores + self._attention_bias_proximal(t_s).to(device=scores.device, dtype=scores.dtype)\n        if mask is not None:\n            scores = scores.masked_fill(mask == 0, -1e4)\n            if self.block_length is not None:\n                block_mask = torch.ones_like(scores).triu(-self.block_length).tril(self.block_length)\n                scores = scores * block_mask + -1e4 * (1 - block_mask)\n        p_attn = F.softmax(scores, dim=-1)  # [b, n_h, t_t, t_s]\n        p_attn = self.drop(p_attn)\n        output = torch.matmul(p_attn, value)\n        if self.window_size is not None:\n            relative_weights = self._absolute_position_to_relative_position(p_attn)\n            value_relative_embeddings = self._get_relative_embeddings(self.emb_rel_v, t_s)\n            output = output + self._matmul_with_relative_values(relative_weights, value_relative_embeddings)\n        output = output.transpose(2, 3).contiguous().view(b, d, t_t)  # [b, n_h, t_t, d_k] -> [b, d, t_t]\n        return output, p_attn\n\n    def _matmul_with_relative_values(self, x, y):\n        \"\"\"\n        x: [b, h, l, m]\n        y: [h or 1, m, d]\n        ret: [b, h, l, d]\n        \"\"\"\n        ret = torch.matmul(x, y.unsqueeze(0))\n        return ret\n\n    def _matmul_with_relative_keys(self, x, y):\n        \"\"\"\n        x: [b, h, l, d]\n        y: [h or 1, m, d]\n        ret: [b, h, l, m]\n        \"\"\"\n        ret = torch.matmul(x, y.unsqueeze(0).transpose(-2, -1))\n        return ret\n\n    def _get_relative_embeddings(self, relative_embeddings, length):\n        max_relative_position = 2 * self.window_size + 1\n        # Pad first before slice to avoid using cond ops.\n        pad_length = max(length - (self.window_size + 1), 0)\n        slice_start_position = max((self.window_size + 1) - length, 0)\n        slice_end_position = slice_start_position + 2 * length - 1\n        if pad_length > 0:\n            padded_relative_embeddings = F.pad(\n                relative_embeddings,\n                convert_pad_shape([[0, 0], [pad_length, pad_length], [0, 0]]))\n        else:\n            padded_relative_embeddings = relative_embeddings\n        used_relative_embeddings = padded_relative_embeddings[:, slice_start_position:slice_end_position]\n        return used_relative_embeddings\n\n    def _relative_position_to_absolute_position(self, x):\n        \"\"\"\n        x: [b, h, l, 2*l-1]\n        ret: [b, h, l, l]\n        \"\"\"\n        batch, heads, length, _ = x.size()\n        # Concat columns of pad to shift from relative to absolute indexing.\n        x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, 1]]))\n\n        # Concat extra elements so to add up to shape (len+1, 2*len-1).\n        x_flat = x.view([batch, heads, length * 2 * length])\n        x_flat = F.pad(x_flat, convert_pad_shape([[0, 0], [0, 0], [0, length - 1]]))\n\n        # Reshape and slice out the padded elements.\n        x_final = x_flat.view([batch, heads, length + 1, 2 * length - 1])[:, :, :length, length - 1:]\n        return x_final\n\n    def _absolute_position_to_relative_position(self, x):\n        \"\"\"\n        x: [b, h, l, l]\n        ret: [b, h, l, 2*l-1]\n        \"\"\"\n        batch, heads, length, _ = x.size()\n        # padd along column\n        x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, length - 1]]))\n        x_flat = x.view([batch, heads, -1])\n        # add 0's in the beginning that will skew the elements after reshape\n        x_flat = F.pad(x_flat, convert_pad_shape([[0, 0], [0, 0], [length, 0]]))\n        x_final = x_flat.view([batch, heads, length, 2 * length])[:, :, :, 1:]\n        return x_final\n\n    def _attention_bias_proximal(self, length):\n        \"\"\"Bias for self-attention to encourage attention to close positions.\n        Args:\n          length: an integer scalar.\n        Returns:\n          a Tensor with shape [1, 1, length, length]\n        \"\"\"\n        r = torch.arange(length, dtype=torch.float32)\n        diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1)\n        return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0)\n\n\nclass FFN(nn.Module):\n    def __init__(self, in_channels, out_channels, filter_channels, kernel_size, p_dropout=0., activation=None):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.activation = activation\n\n        self.conv_1 = nn.Conv1d(in_channels, filter_channels, kernel_size, padding=kernel_size // 2)\n        self.conv_2 = nn.Conv1d(filter_channels, out_channels, 1)\n        self.drop = nn.Dropout(p_dropout)\n\n    def forward(self, x, x_mask):\n        x = self.conv_1(x * x_mask)\n        if self.activation == \"gelu\":\n            x = x * torch.sigmoid(1.702 * x)\n        else:\n            x = torch.relu(x)\n        x = self.drop(x)\n        x = self.conv_2(x * x_mask)\n        return x * x_mask\n\n\nclass LayerNorm(nn.Module):\n    def __init__(self, channels, eps=1e-4):\n        super().__init__()\n        self.channels = channels\n        self.eps = eps\n\n        self.gamma = nn.Parameter(torch.ones(channels))\n        self.beta = nn.Parameter(torch.zeros(channels))\n\n    def forward(self, x):\n        n_dims = len(x.shape)\n        mean = torch.mean(x, 1, keepdim=True)\n        variance = torch.mean((x - mean) ** 2, 1, keepdim=True)\n\n        x = (x - mean) * torch.rsqrt(variance + self.eps)\n\n        shape = [1, -1] + [1] * (n_dims - 2)\n        x = x * self.gamma.view(*shape) + self.beta.view(*shape)\n        return x\n\n\nclass ConvReluNorm(nn.Module):\n    def __init__(self, in_channels, hidden_channels, out_channels, kernel_size, n_layers, p_dropout):\n        super().__init__()\n        self.in_channels = in_channels\n        self.hidden_channels = hidden_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n        assert n_layers > 1, \"Number of layers should be larger than 0.\"\n\n        self.conv_layers = nn.ModuleList()\n        self.norm_layers = nn.ModuleList()\n        self.conv_layers.append(nn.Conv1d(in_channels, hidden_channels, kernel_size, padding=kernel_size // 2))\n        self.norm_layers.append(LayerNorm(hidden_channels))\n        self.relu_drop = nn.Sequential(\n            nn.ReLU(),\n            nn.Dropout(p_dropout))\n        for _ in range(n_layers - 1):\n            self.conv_layers.append(nn.Conv1d(hidden_channels, hidden_channels, kernel_size, padding=kernel_size // 2))\n            self.norm_layers.append(LayerNorm(hidden_channels))\n        self.proj = nn.Conv1d(hidden_channels, out_channels, 1)\n        self.proj.weight.data.zero_()\n        self.proj.bias.data.zero_()\n\n    def forward(self, x, x_mask):\n        x_org = x\n        for i in range(self.n_layers):\n            x = self.conv_layers[i](x * x_mask)\n            x = self.norm_layers[i](x)\n            x = self.relu_drop(x)\n        x = x_org + self.proj(x)\n        return x * x_mask\n\n\nclass RelTransformerEncoder(nn.Module):\n    def __init__(self,\n                 n_vocab,\n                 out_channels,\n                 hidden_channels,\n                 filter_channels,\n                 n_heads,\n                 n_layers,\n                 kernel_size,\n                 p_dropout=0.0,\n                 window_size=4,\n                 block_length=None,\n                 in_channels=None,\n                 prenet=True,\n                 pre_ln=True,\n                 ):\n\n        super().__init__()\n\n        self.n_vocab = n_vocab\n        self.out_channels = out_channels\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.window_size = window_size\n        self.block_length = block_length\n        self.prenet = prenet\n        if n_vocab > 0:\n            self.emb = Embedding(n_vocab, hidden_channels, padding_idx=0)\n\n        if prenet:\n            if in_channels is None:\n                in_channels = hidden_channels\n            self.pre = ConvReluNorm(in_channels, in_channels, in_channels,\n                                    kernel_size=5, n_layers=3, p_dropout=0)\n        if in_channels is not None and in_channels != hidden_channels:\n            self.encoder_inp_proj = nn.Conv1d(in_channels, hidden_channels, 1)\n        self.encoder = Encoder(\n            hidden_channels,\n            filter_channels,\n            n_heads,\n            n_layers,\n            kernel_size,\n            p_dropout,\n            window_size=window_size,\n            block_length=block_length,\n            pre_ln=pre_ln,\n        )\n\n    def forward(self, x, x_mask=None, other_embeds=0, attn_mask=1):\n        if self.n_vocab > 0:\n            x_lengths = (x > 0).long().sum(-1)\n            x = self.emb(x) * math.sqrt(self.hidden_channels)  # [b, t, h]\n        else:\n            x_lengths = (x.abs().sum(-1) > 0).long().sum(-1)\n        x = x + other_embeds\n        x = torch.transpose(x, 1, -1)  # [b, h, t]\n        x_mask = torch.unsqueeze(sequence_mask(x_lengths, x.size(2)), 1).to(x.dtype)\n\n        if self.prenet:\n            x = self.pre(x, x_mask)\n            self.prenet_out = x.transpose(1, 2)\n        if hasattr(self, 'encoder_inp_proj'):\n            x = self.encoder_inp_proj(x) * x_mask\n        x = self.encoder(x, x_mask, attn_mask)\n        return x.transpose(1, 2)\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/ar_dur/commons/rot_transformer.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport math\nimport torch\nfrom typing import Optional, Tuple\nfrom torch import nn\nfrom torch.nn import Parameter, Linear\nfrom tts.modules.ar_dur.commons.layers import LayerNorm, Embedding\nfrom tts.modules.ar_dur.commons.transformer import TransformerFFNLayer, MultiheadAttention\nfrom tts.modules.ar_dur.commons.seq_utils import get_incremental_state, set_incremental_state, softmax, make_positions\nimport torch.nn.functional as F\n\nDEFAULT_MAX_SOURCE_POSITIONS = 3000\nDEFAULT_MAX_TARGET_POSITIONS = 3000\n\n\nclass SinusoidalPositionalEmbedding(nn.Module):\n    \"\"\"This module produces sinusoidal positional embeddings of any length.\n\n    Padding symbols are ignored.\n    \"\"\"\n\n    def __init__(self, embedding_dim, padding_idx, init_size=1024):\n        super().__init__()\n        self.embedding_dim = embedding_dim\n        self.padding_idx = padding_idx\n        self.weights = SinusoidalPositionalEmbedding.get_embedding(\n            init_size,\n            embedding_dim,\n            padding_idx,\n        )\n        self.register_buffer('_float_tensor', torch.FloatTensor(1))\n\n    @staticmethod\n    def get_embedding(num_embeddings, embedding_dim, padding_idx=None):\n        \"\"\"Build sinusoidal embeddings.\n\n        This matches the implementation in tensor2tensor, but differs slightly\n        from the description in Section 3.5 of \"Attention Is All You Need\".\n        \"\"\"\n        half_dim = embedding_dim // 2\n        emb = math.log(10000) / (half_dim - 1)\n        emb = torch.exp(torch.arange(half_dim, dtype=torch.float) * -emb)\n        emb = torch.arange(num_embeddings, dtype=torch.float).unsqueeze(1) * emb.unsqueeze(0)\n        emb = torch.cat([torch.sin(emb), torch.cos(emb)], dim=1).view(num_embeddings, -1)\n        if embedding_dim % 2 == 1:\n            # zero pad\n            emb = torch.cat([emb, torch.zeros(num_embeddings, 1)], dim=1)\n        if padding_idx is not None:\n            emb[padding_idx, :] = 0\n        return emb\n\n    def forward(self, input, incremental_state=None, timestep=None, positions=None, **kwargs):\n        \"\"\"Input is expected to be of size [bsz x seqlen].\"\"\"\n        bsz, seq_len = input.shape[:2]\n        max_pos = self.padding_idx + 1 + seq_len\n        if self.weights is None or max_pos > self.weights.size(0):\n            # recompute/expand embeddings if needed\n            self.weights = SinusoidalPositionalEmbedding.get_embedding(\n                max_pos,\n                self.embedding_dim,\n                self.padding_idx,\n            )\n        self.weights = self.weights.to(self._float_tensor)\n\n        if incremental_state is not None:\n            # positions is the same for every token when decoding a single step\n            pos = timestep.view(-1)[0] + 1 if timestep is not None else seq_len\n            return self.weights[self.padding_idx + pos, :].expand(bsz, 1, -1)\n\n        positions = make_positions(input, self.padding_idx) if positions is None else positions\n        return self.weights.index_select(0, positions.view(-1)).view(bsz, seq_len, -1).detach()\n\n    def max_positions(self):\n        \"\"\"Maximum number of supported positions.\"\"\"\n        return int(1e5)  # an arbitrary large number\n\n\nclass RotaryEmbeddings(nn.Module):\n    cos: torch.Tensor\n    sin: torch.Tensor\n    theta: torch.Tensor\n\n    def __init__(\n            self,\n            width: int,\n            *,\n            seq_len: int = 40000,\n            base: int = 10000,\n            device: Optional[torch.device] = None,\n    ):\n        \"\"\"Rotary embeddings (Su et al., 2021) layer. The rotary embedding\n        will be precomputed for up to 'seq _len' positions. The embedding\n        will be recomputed when a longer sequence is found in the input.\n\n        :param width:\n            Rotary embedding dimensionality, must be even.\n        :param seq_len:\n            Number of positons to initially precompute.\n        :param base:\n            The base used for Θ_i, determines the cycle length of the\n            embeddings.\n        :param device: Device on which the module is to be initialized.\n        \"\"\"\n        super().__init__()\n\n        if width % 2:\n            raise ValueError(f\"Width of rotary embeddings must be even, was: {width}\")\n\n        # Ignore allocations on the meta device as we don't persist our buffer,\n        # i.e., we don't expect the backing tensor to be replaced with pretrained weights.\n        if device is not None and device.type == \"meta\":\n            device = None\n        # Θ_i = 10000^(-2(i-1)/d)\n        theta = torch.pow(\n            base, -torch.arange(0, width, 2, dtype=torch.float, device=device) / width\n        )\n        self.register_buffer(\"theta\", theta, persistent=False)\n\n        self._create_rotary_embed(width=width, length=seq_len)\n\n    def _create_rotary_embed(self, *, width: int, length: int):\n        # mΘ\n        position = torch.arange(length, device=self.theta.device).unsqueeze(1)\n        m_theta = position * self.theta.unsqueeze(0)\n\n        # We apply both sin and cos twice (see Eq 15, 34), but the ordering\n        # is changed for compatibility with most common implementations.\n        m_theta = torch.cat([m_theta, m_theta], dim=-1)\n\n        re_cos = m_theta.cos().view([length, width])\n        re_sin = m_theta.sin().view([length, width])\n\n        self.register_buffer(\"cos\", re_cos, persistent=False)\n        self.register_buffer(\"sin\", re_sin, persistent=False)\n\n    def _rotate(self, input: torch.Tensor):\n        \"\"\"Rotate the input tensor by half of its innermost width.\n\n        input (Tensor): array to rotate.\n        RETURNS (Tensor): rotated array.\n\n        Shapes:\n            input - (..., width)\n            output - (..., width)\n        \"\"\"\n        half_idx = input.shape[-1] // 2\n        input_1 = -input[..., half_idx:]\n        input_2 = input[..., :half_idx]\n        return torch.cat([input_1, input_2], dim=-1)\n\n    def forward(self, input: torch.Tensor, *, positions: Optional[torch.Tensor] = None):\n        \"\"\"\n        Apply rotary embeddings to an array.\n\n        :param input: Array to apply the rotary embeddings to.\n        :param positions: positions of the inputs. If no positions are\n            provided, they are assumed to be [0, seq_len).\n        :return: Array with the rotary embeddings applied.\n\n        Shapes:\n            input - (batch_size, num_heads, seq_len, width_per_head)\n            positions - (batch_size, seq_len)\n            output - (batch_size, num_heads, seq_len, width_per_head)\n        \"\"\"\n        batch_size, _, seq_len, width = input.shape\n\n        if positions is None:\n            # Fastpath: positions from [0..seq_len), avoid indexing.\n            if self.cos.size(-2) < seq_len:\n                self._create_rotary_embed(width=width, length=seq_len)\n            rot_cos = self.cos[:seq_len, :].view(1, 1, seq_len, width)\n            rot_sin = self.sin[:seq_len, :].view(1, 1, seq_len, width)\n        else:\n            max_len = int(positions.max()) + 1\n            if self.cos.size(-2) < max_len:\n                self._create_rotary_embed(width=width, length=max_len)\n\n            # Flatten positions to index cos/sin arrays, then unflatten.\n            #\n            # Example shapes:\n            #\n            #   positions_flat - (batch_size * seq_len)\n            #   self.cos - (max_len, width)\n            #   rot_cos - (batch_size, seq_len, width)\n            positions_flat = positions.view(-1)\n            rot_cos = self.cos[positions_flat].view(batch_size, 1, seq_len, width)\n            rot_sin = self.sin[positions_flat].view(batch_size, 1, seq_len, width)\n\n        # Eq 34 with ordering changed for compatibility.\n        return rot_cos * input + rot_sin * self._rotate(input)\n\n\nclass RotMultiheadAttention(MultiheadAttention):\n    def __init__(self, embed_dim, num_heads, kdim=None, vdim=None, dropout=0., bias=True,\n                 add_bias_kv=False, add_zero_attn=False, self_attention=False,\n                 encoder_decoder_attention=False):\n        super().__init__(embed_dim, num_heads, kdim=kdim, vdim=vdim, dropout=dropout, bias=bias,\n                         add_bias_kv=add_bias_kv, add_zero_attn=add_zero_attn, self_attention=self_attention,\n                         encoder_decoder_attention=encoder_decoder_attention)\n        self.rotary_embeds = RotaryEmbeddings(width=embed_dim // num_heads)\n\n    def forward(\n            self,\n            query, key, value,\n            spk_pos_ids_flat=None,\n            key_padding_mask=None,\n            incremental_state=None,\n            need_weights=True,\n            static_kv=False,\n            attn_mask=None,\n            before_softmax=False,\n            need_head_weights=False,\n            enc_dec_attn_constraint_mask=None,\n            reset_attn_weight=None\n    ):\n        \"\"\"Input shape: Time x Batch x Channel\n\n        Args:\n            key_padding_mask (ByteTensor, optional): mask to exclude\n                keys that are pads, of shape `(batch, src_len)`, where\n                padding elements are indicated by 1s.\n            need_weights (bool, optional): return the attention weights,\n                averaged over heads (default: False).\n            attn_mask (ByteTensor, optional): typically used to\n                implement causal attention, where the mask prevents the\n                attention from looking forward in time (default: None).\n            before_softmax (bool, optional): return the raw attention\n                weights and values before the attention softmax.\n            need_head_weights (bool, optional): return the attention\n                weights for each head. Implies *need_weights*. Default:\n                return the average attention weights over all heads.\n        \"\"\"\n        if need_head_weights:\n            need_weights = True\n\n        tgt_len, bsz, embed_dim = query.size()\n        assert embed_dim == self.embed_dim\n        assert list(query.size()) == [tgt_len, bsz, embed_dim]\n\n        if incremental_state is not None:\n            saved_state = self._get_input_buffer(incremental_state)\n            if 'prev_key' in saved_state:\n                # previous time steps are cached - no need to recompute\n                # key and value if they are static\n                if static_kv:\n                    assert self.encoder_decoder_attention and not self.self_attention\n                    key = value = None\n        else:\n            saved_state = None\n\n        if self.self_attention:\n            # self-attention\n            q, k, v = self.in_proj_qkv(query)\n        elif self.encoder_decoder_attention:\n            # encoder-decoder attention\n            q = self.in_proj_q(query)\n            if key is None:\n                assert value is None\n                k = v = None\n            else:\n                k = self.in_proj_k(key)\n                v = self.in_proj_v(key)\n        else:\n            q = self.in_proj_q(query)\n            k = self.in_proj_k(key)\n            v = self.in_proj_v(value)\n        q = q * self.scaling\n\n        if self.bias_k is not None:\n            assert self.bias_v is not None\n            k = torch.cat([k, self.bias_k.repeat(1, bsz, 1)])\n            v = torch.cat([v, self.bias_v.repeat(1, bsz, 1)])\n            if attn_mask is not None:\n                attn_mask = torch.cat([attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1)\n            if key_padding_mask is not None:\n                key_padding_mask = torch.cat(\n                    [key_padding_mask, key_padding_mask.new_zeros(key_padding_mask.size(0), 1)], dim=1)\n\n        q = q.contiguous().view(tgt_len, bsz * self.num_heads, self.head_dim).transpose(0, 1)\n        if k is not None:\n            k = k.contiguous().view(-1, bsz * self.num_heads, self.head_dim).transpose(0, 1)\n        if v is not None:\n            v = v.contiguous().view(-1, bsz * self.num_heads, self.head_dim).transpose(0, 1)\n\n        # Apply rot embedding and store incremental_state\n        q = self.rotary_embeds(q[None, :], positions=spk_pos_ids_flat)[0]\n        if saved_state is not None:\n            # saved states are stored with shape (bsz, num_heads, seq_len, head_dim)\n            if 'prev_key' in saved_state:\n                prev_key = saved_state['prev_key'].view(bsz * self.num_heads, -1, self.head_dim)\n                if static_kv:\n                    k = prev_key\n                else:\n                    k = torch.cat((prev_key, k), dim=1)\n            if 'prev_value' in saved_state:\n                prev_value = saved_state['prev_value'].view(bsz * self.num_heads, -1, self.head_dim)\n                if static_kv:\n                    v = prev_value\n                else:\n                    v = torch.cat((prev_value, v), dim=1)\n            saved_state['prev_key'], saved_state['prev_value'] = k.view(bsz, self.num_heads, -1, self.head_dim), v.view(\n                bsz, self.num_heads, -1, self.head_dim)\n            self._set_input_buffer(incremental_state, saved_state)\n        if incremental_state is not None:\n            key_pos = torch.arange(k.shape[-2], device=q.device).unsqueeze(0)\n        else:\n            key_pos = spk_pos_ids_flat\n        k = self.rotary_embeds(k[None, :], positions=key_pos)[0]\n\n        src_len = k.size(1)\n\n        # This is part of a workaround to get around fork/join parallelism\n        # not supporting Optional types.\n        if key_padding_mask is not None and key_padding_mask.shape == torch.Size([]):\n            key_padding_mask = None\n\n        if key_padding_mask is not None:\n            assert key_padding_mask.size(0) == bsz\n            assert key_padding_mask.size(1) == src_len\n\n        if self.add_zero_attn:\n            src_len += 1\n            k = torch.cat([k, k.new_zeros((k.size(0), 1) + k.size()[2:])], dim=1)\n            v = torch.cat([v, v.new_zeros((v.size(0), 1) + v.size()[2:])], dim=1)\n            if attn_mask is not None:\n                attn_mask = torch.cat([attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1)\n            if key_padding_mask is not None:\n                key_padding_mask = torch.cat(\n                    [key_padding_mask, torch.zeros(key_padding_mask.size(0), 1).type_as(key_padding_mask)], dim=1)\n\n        attn_weights = torch.bmm(q, k.transpose(1, 2))\n        attn_weights = self.apply_sparse_mask(attn_weights, tgt_len, src_len, bsz)\n        assert list(attn_weights.size()) == [bsz * self.num_heads, tgt_len, src_len]\n\n        if attn_mask is not None:\n            if len(attn_mask.shape) == 2:\n                attn_mask = attn_mask.unsqueeze(0)\n            elif len(attn_mask.shape) == 3:\n                attn_mask = attn_mask[:, None].repeat([1, self.num_heads, 1, 1]).reshape(\n                    bsz * self.num_heads, tgt_len, src_len)\n            attn_weights = attn_weights + attn_mask\n\n        if enc_dec_attn_constraint_mask is not None:  # bs x head x L_kv\n            attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len)\n            attn_weights = attn_weights.masked_fill(\n                enc_dec_attn_constraint_mask.unsqueeze(2).bool(),\n                -1e8,\n            )\n            attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len)\n\n        if key_padding_mask is not None:\n            # don't attend to padding symbols\n            attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len)\n            attn_weights = attn_weights.masked_fill(\n                key_padding_mask.unsqueeze(1).unsqueeze(2),\n                -1e8,\n            )\n            attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len)\n\n        attn_logits = attn_weights.view(bsz, self.num_heads, tgt_len, src_len)\n\n        if before_softmax:\n            return attn_weights, v\n\n        attn_weights_float = softmax(attn_weights, dim=-1)\n        attn_weights = attn_weights_float.type_as(attn_weights)\n        attn_probs = F.dropout(attn_weights_float.type_as(attn_weights), p=self.dropout, training=self.training)\n\n        if reset_attn_weight is not None:\n            if reset_attn_weight:\n                self.last_attn_probs = attn_probs.detach()\n            else:\n                assert self.last_attn_probs is not None\n                attn_probs = self.last_attn_probs\n        attn = torch.bmm(attn_probs, v)\n        assert list(attn.size()) == [bsz * self.num_heads, tgt_len, self.head_dim]\n        attn = attn.transpose(0, 1).contiguous().view(tgt_len, bsz, embed_dim)\n        attn = self.out_proj(attn)\n\n        if need_weights:\n            attn_weights = attn_weights_float.view(bsz, self.num_heads, tgt_len, src_len).transpose(1, 0)\n            if not need_head_weights:\n                # average attention weights over heads\n                attn_weights = attn_weights.mean(dim=0)\n        else:\n            attn_weights = None\n\n        return attn, (attn_weights, attn_logits)\n\n\nclass RotMultiheadAttention2(MultiheadAttention):\n    def __init__(self, embed_dim, num_heads, kdim=None, vdim=None, dropout=0., bias=True,\n                 add_bias_kv=False, add_zero_attn=False, self_attention=False,\n                 encoder_decoder_attention=False):\n        super().__init__(embed_dim, num_heads, kdim=kdim, vdim=vdim, dropout=dropout, bias=bias,\n                         add_bias_kv=add_bias_kv, add_zero_attn=add_zero_attn, self_attention=self_attention,\n                         encoder_decoder_attention=encoder_decoder_attention)\n        self.rotary_embeds = RotaryEmbeddings(width=embed_dim // num_heads)\n\n    def forward(\n            self,\n            query, key, value,\n            spk_pos_ids_flat=None,\n            key_padding_mask=None,\n            incremental_state=None,\n            need_weights=True,\n            static_kv=False,\n            attn_mask=None,\n            before_softmax=False,\n            need_head_weights=False,\n            enc_dec_attn_constraint_mask=None,\n            reset_attn_weight=None\n    ):\n        \"\"\"Input shape: Time x Batch x Channel\n\n        Args:\n            key_padding_mask (ByteTensor, optional): mask to exclude\n                keys that are pads, of shape `(batch, src_len)`, where\n                padding elements are indicated by 1s.\n            need_weights (bool, optional): return the attention weights,\n                averaged over heads (default: False).\n            attn_mask (ByteTensor, optional): typically used to\n                implement causal attention, where the mask prevents the\n                attention from looking forward in time (default: None).\n            before_softmax (bool, optional): return the raw attention\n                weights and values before the attention softmax.\n            need_head_weights (bool, optional): return the attention\n                weights for each head. Implies *need_weights*. Default:\n                return the average attention weights over all heads.\n        \"\"\"\n        if need_head_weights:\n            need_weights = True\n\n        tgt_len, bsz, embed_dim = query.size()\n        assert embed_dim == self.embed_dim\n        assert list(query.size()) == [tgt_len, bsz, embed_dim]\n\n        if incremental_state is not None:\n            saved_state = self._get_input_buffer(incremental_state)\n            if 'prev_key' in saved_state:\n                # previous time steps are cached - no need to recompute\n                # key and value if they are static\n                if static_kv:\n                    assert self.encoder_decoder_attention and not self.self_attention\n                    key = value = None\n        else:\n            saved_state = None\n\n        if self.self_attention:\n            # self-attention\n            q, k, v = self.in_proj_qkv(query)\n        elif self.encoder_decoder_attention:\n            # encoder-decoder attention\n            q = self.in_proj_q(query)\n            if key is None:\n                assert value is None\n                k = v = None\n            else:\n                k = self.in_proj_k(key)\n                v = self.in_proj_v(key)\n        else:\n            q = self.in_proj_q(query)\n            k = self.in_proj_k(key)\n            v = self.in_proj_v(value)\n\n        if self.bias_k is not None:\n            assert self.bias_v is not None\n            k = torch.cat([k, self.bias_k.repeat(1, bsz, 1)])\n            v = torch.cat([v, self.bias_v.repeat(1, bsz, 1)])\n            if attn_mask is not None:\n                attn_mask = torch.cat([attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1)\n            if key_padding_mask is not None:\n                key_padding_mask = torch.cat(\n                    [key_padding_mask, key_padding_mask.new_zeros(key_padding_mask.size(0), 1)], dim=1)\n\n        q = q.contiguous().view(tgt_len, bsz * self.num_heads, self.head_dim).transpose(0, 1)\n        if k is not None:\n            k = k.contiguous().view(-1, bsz * self.num_heads, self.head_dim).transpose(0, 1)\n        if v is not None:\n            v = v.contiguous().view(-1, bsz * self.num_heads, self.head_dim).transpose(0, 1)\n\n        # Apply rot embedding and store incremental_state\n        q = self.rotary_embeds(q[None, :], positions=spk_pos_ids_flat)[0]\n        if saved_state is not None:\n            # saved states are stored with shape (bsz, num_heads, seq_len, head_dim)\n            if 'prev_key' in saved_state:\n                prev_key = saved_state['prev_key'].view(bsz * self.num_heads, -1, self.head_dim)\n                if static_kv:\n                    k = prev_key\n                else:\n                    k = torch.cat((prev_key, k), dim=1)\n            if 'prev_value' in saved_state:\n                prev_value = saved_state['prev_value'].view(bsz * self.num_heads, -1, self.head_dim)\n                if static_kv:\n                    v = prev_value\n                else:\n                    v = torch.cat((prev_value, v), dim=1)\n            saved_state['prev_key'], saved_state['prev_value'] = k.view(bsz, self.num_heads, -1, self.head_dim), v.view(\n                bsz, self.num_heads, -1, self.head_dim)\n            self._set_input_buffer(incremental_state, saved_state)\n        key_pos = torch.arange(k.shape[-2], device=q.device).unsqueeze(0)\n        k = self.rotary_embeds(k[None, :], positions=key_pos)[0]\n\n        src_len = k.size(1)\n\n        # This is part of a workaround to get around fork/join parallelism\n        # not supporting Optional types.\n        if key_padding_mask is not None and key_padding_mask.shape == torch.Size([]):\n            key_padding_mask = None\n\n        if key_padding_mask is not None:\n            assert key_padding_mask.size(0) == bsz\n            assert key_padding_mask.size(1) == src_len\n\n        if attn_mask is not None:\n            if len(attn_mask.shape) == 2:\n                attn_mask = attn_mask.unsqueeze(0)\n            elif len(attn_mask.shape) == 3:\n                attn_mask = attn_mask[:, None].repeat([1, self.num_heads, 1, 1]).reshape(\n                    bsz * self.num_heads, tgt_len, src_len)\n        attn = torch.nn.functional.scaled_dot_product_attention(\n            q, k, v, attn_mask=attn_mask, dropout_p=0, is_causal=False)\n        assert list(attn.size()) == [bsz * self.num_heads, tgt_len, self.head_dim]\n        attn = attn.transpose(0, 1).contiguous().view(tgt_len, bsz, embed_dim)\n        attn_logits = None\n        attn_weights = None\n        return attn, (attn_weights, attn_logits)\n\n\nclass RotDecSALayer(nn.Module):\n    def __init__(self, c, num_heads, dropout, attention_dropout=0.1, relu_dropout=0.1,\n                 kernel_size=9, ffn_hidden_size=1024, act='gelu', post_ln=False, bias=True):\n        super().__init__()\n        self.c = c\n        self.dropout = dropout\n        self.layer_norm1 = LayerNorm(c)\n        self.self_attn = RotMultiheadAttention(\n            c, num_heads, self_attention=True, dropout=attention_dropout, bias=False\n        )\n        self.layer_norm2 = LayerNorm(c)\n        self.ffn = TransformerFFNLayer(\n            c, ffn_hidden_size, padding='LEFT', kernel_size=kernel_size,\n            dropout=relu_dropout, act=act, bias=bias)\n        self.post_ln = post_ln\n\n    def forward(\n            self,\n            x,\n            encoder_out=None,\n            encoder_padding_mask=None,\n            incremental_state=None,\n            self_attn_mask=None,\n            self_attn_padding_mask=None,\n            attn_out=None,\n            reset_attn_weight=None,\n            spk_pos_ids_flat=None,\n            **kwargs,\n    ):\n        layer_norm_training = kwargs.get('layer_norm_training', None)\n        if layer_norm_training is not None:\n            self.layer_norm1.training = layer_norm_training\n            self.layer_norm2.training = layer_norm_training\n        residual = x\n        if not self.post_ln:\n            x = self.layer_norm1(x)\n\n        x, (attn_weights, _) = self.self_attn(\n            query=x,\n            key=x,\n            value=x,\n            key_padding_mask=self_attn_padding_mask,\n            incremental_state=incremental_state,\n            attn_mask=self_attn_mask,\n            spk_pos_ids_flat=spk_pos_ids_flat\n        )\n        x = F.dropout(x, self.dropout, training=self.training)\n        x = residual + x\n        if self.post_ln:\n            x = self.layer_norm1(x)\n\n        residual = x\n        if not self.post_ln:\n            x = self.layer_norm2(x)\n        x = self.ffn(x, incremental_state=incremental_state)\n        x = F.dropout(x, self.dropout, training=self.training)\n        x = residual + x\n        if self.post_ln:\n            x = self.layer_norm2(x)\n        return x, attn_weights\n\n    def clear_buffer(self, input, encoder_out=None, encoder_padding_mask=None, incremental_state=None):\n        self.encoder_attn.clear_buffer(incremental_state)\n        self.ffn.clear_buffer(incremental_state)\n\n    def set_buffer(self, name, tensor, incremental_state):\n        return set_incremental_state(self, incremental_state, name, tensor)\n\n\nclass RotDecSALayer2(RotDecSALayer):\n    def __init__(self, c, num_heads, dropout, attention_dropout=0.1, relu_dropout=0.1, kernel_size=9,\n                 ffn_hidden_size=1024, act='gelu', post_ln=False):\n        super().__init__(c, num_heads, dropout, attention_dropout, relu_dropout, kernel_size, ffn_hidden_size, act,\n                         post_ln)\n        self.self_attn = RotMultiheadAttention2(\n            c, num_heads, self_attention=True, dropout=attention_dropout, bias=False\n        )\n\n\nclass RotTransformerDecoderLayer(nn.Module):\n    def __init__(self, hidden_size, dropout, kernel_size=9, num_heads=8, ffn_hidden_size=1024, post_ln=False,\n                 op_version=1, bias=True):\n        super().__init__()\n        self.hidden_size = hidden_size\n        self.dropout = dropout\n        self.num_heads = num_heads\n        if op_version == 1:\n            self.op = RotDecSALayer(\n                hidden_size, num_heads, dropout=dropout,\n                attention_dropout=0.0, relu_dropout=dropout,\n                kernel_size=kernel_size, ffn_hidden_size=ffn_hidden_size,\n                post_ln=post_ln, bias=bias)\n        else:\n            self.op = RotDecSALayer2(\n                hidden_size, num_heads, dropout=dropout,\n                attention_dropout=0.0, relu_dropout=dropout,\n                kernel_size=kernel_size, ffn_hidden_size=ffn_hidden_size,\n                post_ln=post_ln)\n\n    def forward(self, x, **kwargs):\n        return self.op(x, **kwargs)\n\n    def clear_buffer(self, *args):\n        return self.op.clear_buffer(*args)\n\n    def set_buffer(self, *args):\n        return self.op.set_buffer(*args)\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/ar_dur/commons/seq_utils.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom collections import defaultdict\nimport torch\nimport torch.nn.functional as F\n\n\ndef make_positions(tensor, padding_idx):\n    \"\"\"Replace non-padding symbols with their position numbers.\n\n    Position numbers begin at padding_idx+1. Padding symbols are ignored.\n    \"\"\"\n    # The series of casts and type-conversions here are carefully\n    # balanced to both work with ONNX export and XLA. In particular XLA\n    # prefers ints, cumsum defaults to output longs, and ONNX doesn't know\n    # how to handle the dtype kwarg in cumsum.\n    mask = tensor.ne(padding_idx).int()\n    return (\n                   torch.cumsum(mask, dim=1).type_as(mask) * mask\n           ).long() + padding_idx\n\n\ndef softmax(x, dim):\n    return F.softmax(x, dim=dim, dtype=torch.float32)\n\n\ndef sequence_mask(lengths, maxlen=None, dtype=torch.bool):\n    if maxlen is None:\n        maxlen = lengths.max()\n    mask = ~(torch.ones((len(lengths), maxlen)).to(lengths.device).cumsum(dim=1).t() > lengths).t()\n    mask.type(dtype)\n    return mask\n\n\ndef weights_nonzero_speech(target):\n    # target : B x T x mel\n    # Assign weight 1.0 to all labels except for padding (id=0).\n    dim = target.size(-1)\n    return target.abs().sum(-1, keepdim=True).ne(0).float().repeat(1, 1, dim)\n\n\nINCREMENTAL_STATE_INSTANCE_ID = defaultdict(lambda: 0)\n\n\ndef _get_full_incremental_state_key(module_instance, key):\n    module_name = module_instance.__class__.__name__\n\n    # assign a unique ID to each module instance, so that incremental state is\n    # not shared across module instances\n    if not hasattr(module_instance, '_instance_id'):\n        INCREMENTAL_STATE_INSTANCE_ID[module_name] += 1\n        module_instance._instance_id = INCREMENTAL_STATE_INSTANCE_ID[module_name]\n\n    return '{}.{}.{}'.format(module_name, module_instance._instance_id, key)\n\n\ndef get_incremental_state(module, incremental_state, key):\n    \"\"\"Helper for getting incremental state for an nn.Module.\"\"\"\n    full_key = _get_full_incremental_state_key(module, key)\n    if incremental_state is None or full_key not in incremental_state:\n        return None\n    return incremental_state[full_key]\n\n\ndef set_incremental_state(module, incremental_state, key, value):\n    \"\"\"Helper for setting incremental state for an nn.Module.\"\"\"\n    if incremental_state is not None:\n        full_key = _get_full_incremental_state_key(module, key)\n        incremental_state[full_key] = value\n\n\ndef fill_with_neg_inf(t):\n    \"\"\"FP16-compatible function that fills a tensor with -inf.\"\"\"\n    return t.float().fill_(float('-inf')).type_as(t)\n\n\ndef fill_with_neg_inf2(t):\n    \"\"\"FP16-compatible function that fills a tensor with -inf.\"\"\"\n    return t.float().fill_(-1e8).type_as(t)\n\n\ndef select_attn(attn_logits, type='best'):\n    \"\"\"\n\n    :param attn_logits: [n_layers, B, n_head, T_sp, T_txt]\n    :return:\n    \"\"\"\n    encdec_attn = torch.stack(attn_logits, 0).transpose(1, 2)\n    # [n_layers * n_head, B, T_sp, T_txt]\n    encdec_attn = (encdec_attn.reshape([-1, *encdec_attn.shape[2:]])).softmax(-1)\n    if type == 'best':\n        indices = encdec_attn.max(-1).values.sum(-1).argmax(0)\n        encdec_attn = encdec_attn.gather(\n            0, indices[None, :, None, None].repeat(1, 1, encdec_attn.size(-2), encdec_attn.size(-1)))[0]\n        return encdec_attn\n    elif type == 'mean':\n        return encdec_attn.mean(0)\n\n\ndef make_pad_mask(lengths, xs=None, length_dim=-1):\n    \"\"\"Make mask tensor containing indices of padded part.\n    Args:\n        lengths (LongTensor or List): Batch of lengths (B,).\n        xs (Tensor, optional): The reference tensor.\n            If set, masks will be the same shape as this tensor.\n        length_dim (int, optional): Dimension indicator of the above tensor.\n            See the example.\n    Returns:\n        Tensor: Mask tensor containing indices of padded part.\n                dtype=torch.uint8 in PyTorch 1.2-\n                dtype=torch.bool in PyTorch 1.2+ (including 1.2)\n    Examples:\n        With only lengths.\n        >>> lengths = [5, 3, 2]\n        >>> make_non_pad_mask(lengths)\n        masks = [[0, 0, 0, 0 ,0],\n                 [0, 0, 0, 1, 1],\n                 [0, 0, 1, 1, 1]]\n        With the reference tensor.\n        >>> xs = torch.zeros((3, 2, 4))\n        >>> make_pad_mask(lengths, xs)\n        tensor([[[0, 0, 0, 0],\n                 [0, 0, 0, 0]],\n                [[0, 0, 0, 1],\n                 [0, 0, 0, 1]],\n                [[0, 0, 1, 1],\n                 [0, 0, 1, 1]]], dtype=torch.uint8)\n        >>> xs = torch.zeros((3, 2, 6))\n        >>> make_pad_mask(lengths, xs)\n        tensor([[[0, 0, 0, 0, 0, 1],\n                 [0, 0, 0, 0, 0, 1]],\n                [[0, 0, 0, 1, 1, 1],\n                 [0, 0, 0, 1, 1, 1]],\n                [[0, 0, 1, 1, 1, 1],\n                 [0, 0, 1, 1, 1, 1]]], dtype=torch.uint8)\n        With the reference tensor and dimension indicator.\n        >>> xs = torch.zeros((3, 6, 6))\n        >>> make_pad_mask(lengths, xs, 1)\n        tensor([[[0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [1, 1, 1, 1, 1, 1]],\n                [[0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1]],\n                [[0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1]]], dtype=torch.uint8)\n        >>> make_pad_mask(lengths, xs, 2)\n        tensor([[[0, 0, 0, 0, 0, 1],\n                 [0, 0, 0, 0, 0, 1],\n                 [0, 0, 0, 0, 0, 1],\n                 [0, 0, 0, 0, 0, 1],\n                 [0, 0, 0, 0, 0, 1],\n                 [0, 0, 0, 0, 0, 1]],\n                [[0, 0, 0, 1, 1, 1],\n                 [0, 0, 0, 1, 1, 1],\n                 [0, 0, 0, 1, 1, 1],\n                 [0, 0, 0, 1, 1, 1],\n                 [0, 0, 0, 1, 1, 1],\n                 [0, 0, 0, 1, 1, 1]],\n                [[0, 0, 1, 1, 1, 1],\n                 [0, 0, 1, 1, 1, 1],\n                 [0, 0, 1, 1, 1, 1],\n                 [0, 0, 1, 1, 1, 1],\n                 [0, 0, 1, 1, 1, 1],\n                 [0, 0, 1, 1, 1, 1]]], dtype=torch.uint8)\n    \"\"\"\n    if length_dim == 0:\n        raise ValueError(\"length_dim cannot be 0: {}\".format(length_dim))\n\n    if not isinstance(lengths, list):\n        lengths = lengths.tolist()\n    bs = int(len(lengths))\n    if xs is None:\n        maxlen = int(max(lengths))\n    else:\n        maxlen = xs.size(length_dim)\n\n    seq_range = torch.arange(0, maxlen, dtype=torch.int64)\n    seq_range_expand = seq_range.unsqueeze(0).expand(bs, maxlen)\n    seq_length_expand = seq_range_expand.new(lengths).unsqueeze(-1)\n    mask = seq_range_expand >= seq_length_expand\n\n    if xs is not None:\n        assert xs.size(0) == bs, (xs.size(0), bs)\n\n        if length_dim < 0:\n            length_dim = xs.dim() + length_dim\n        # ind = (:, None, ..., None, :, , None, ..., None)\n        ind = tuple(\n            slice(None) if i in (0, length_dim) else None for i in range(xs.dim())\n        )\n        mask = mask[ind].expand_as(xs).to(xs.device)\n    return mask\n\n\ndef make_non_pad_mask(lengths, xs=None, length_dim=-1):\n    \"\"\"Make mask tensor containing indices of non-padded part.\n    Args:\n        lengths (LongTensor or List): Batch of lengths (B,).\n        xs (Tensor, optional): The reference tensor.\n            If set, masks will be the same shape as this tensor.\n        length_dim (int, optional): Dimension indicator of the above tensor.\n            See the example.\n    Returns:\n        ByteTensor: mask tensor containing indices of padded part.\n                    dtype=torch.uint8 in PyTorch 1.2-\n                    dtype=torch.bool in PyTorch 1.2+ (including 1.2)\n    Examples:\n        With only lengths.\n        >>> lengths = [5, 3, 2]\n        >>> make_non_pad_mask(lengths)\n        masks = [[1, 1, 1, 1 ,1],\n                 [1, 1, 1, 0, 0],\n                 [1, 1, 0, 0, 0]]\n        With the reference tensor.\n        >>> xs = torch.zeros((3, 2, 4))\n        >>> make_non_pad_mask(lengths, xs)\n        tensor([[[1, 1, 1, 1],\n                 [1, 1, 1, 1]],\n                [[1, 1, 1, 0],\n                 [1, 1, 1, 0]],\n                [[1, 1, 0, 0],\n                 [1, 1, 0, 0]]], dtype=torch.uint8)\n        >>> xs = torch.zeros((3, 2, 6))\n        >>> make_non_pad_mask(lengths, xs)\n        tensor([[[1, 1, 1, 1, 1, 0],\n                 [1, 1, 1, 1, 1, 0]],\n                [[1, 1, 1, 0, 0, 0],\n                 [1, 1, 1, 0, 0, 0]],\n                [[1, 1, 0, 0, 0, 0],\n                 [1, 1, 0, 0, 0, 0]]], dtype=torch.uint8)\n        With the reference tensor and dimension indicator.\n        >>> xs = torch.zeros((3, 6, 6))\n        >>> make_non_pad_mask(lengths, xs, 1)\n        tensor([[[1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [0, 0, 0, 0, 0, 0]],\n                [[1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0]],\n                [[1, 1, 1, 1, 1, 1],\n                 [1, 1, 1, 1, 1, 1],\n                 [0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0],\n                 [0, 0, 0, 0, 0, 0]]], dtype=torch.uint8)\n        >>> make_non_pad_mask(lengths, xs, 2)\n        tensor([[[1, 1, 1, 1, 1, 0],\n                 [1, 1, 1, 1, 1, 0],\n                 [1, 1, 1, 1, 1, 0],\n                 [1, 1, 1, 1, 1, 0],\n                 [1, 1, 1, 1, 1, 0],\n                 [1, 1, 1, 1, 1, 0]],\n                [[1, 1, 1, 0, 0, 0],\n                 [1, 1, 1, 0, 0, 0],\n                 [1, 1, 1, 0, 0, 0],\n                 [1, 1, 1, 0, 0, 0],\n                 [1, 1, 1, 0, 0, 0],\n                 [1, 1, 1, 0, 0, 0]],\n                [[1, 1, 0, 0, 0, 0],\n                 [1, 1, 0, 0, 0, 0],\n                 [1, 1, 0, 0, 0, 0],\n                 [1, 1, 0, 0, 0, 0],\n                 [1, 1, 0, 0, 0, 0],\n                 [1, 1, 0, 0, 0, 0]]], dtype=torch.uint8)\n    \"\"\"\n    return ~make_pad_mask(lengths, xs, length_dim)\n\n\ndef get_mask_from_lengths(lengths):\n    max_len = torch.max(lengths).item()\n    ids = torch.arange(0, max_len).to(lengths.device)\n    mask = (ids < lengths.unsqueeze(1)).bool()\n    return mask\n\n\ndef group_hidden_by_segs(h, seg_ids, max_len):\n    \"\"\"\n\n    :param h: [B, T, H]\n    :param seg_ids: [B, T]\n    :return: h_ph: [B, T_ph, H]\n    \"\"\"\n    B, T, H = h.shape\n    h_gby_segs = h.new_zeros([B, max_len + 1, H]).scatter_add_(1, seg_ids[:, :, None].repeat([1, 1, H]), h)\n    all_ones = h.new_ones(h.shape[:2])\n    cnt_gby_segs = h.new_zeros([B, max_len + 1]).scatter_add_(1, seg_ids, all_ones).contiguous()\n    h_gby_segs = h_gby_segs[:, 1:]\n    cnt_gby_segs = cnt_gby_segs[:, 1:]\n    h_gby_segs = h_gby_segs / torch.clamp(cnt_gby_segs[:, :, None], min=1)\n    return h_gby_segs, cnt_gby_segs\n\ndef expand_by_repeat_times(source_encoding, lengths):\n    \"\"\"\n    source_encoding: [T, C]\n    lengths, list of int, [T,], how many times each token should repeat\n    return:\n        expanded_encoding: [T_expand, C]\n    \"\"\"\n    hid_dim = source_encoding.shape[1]\n    out2source = []\n    for i, length in enumerate(lengths):\n        out2source += [i for _ in range(length)]\n    out2source = torch.LongTensor(out2source).to(source_encoding.device)\n    out2source_ = out2source[:, None].repeat([1, hid_dim])\n    expanded_encoding = torch.gather(source_encoding, 0, out2source_)  # [B, T, H]\n    return expanded_encoding\n\n\ndef expand_word2ph(word_encoding, ph2word):\n    word_encoding = F.pad(word_encoding,[0,0,1,0])\n    ph2word_ = ph2word[:, :, None].repeat([1, 1, word_encoding.shape[-1]])\n    out = torch.gather(word_encoding, 1, ph2word_)  # [B, T, H]\n    return out\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/ar_dur/commons/transformer.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport math\nimport torch\nfrom torch import nn\nfrom torch.nn import Parameter, Linear\nfrom tts.modules.ar_dur.commons.layers import LayerNorm, Embedding\nfrom tts.modules.ar_dur.commons.seq_utils import get_incremental_state, set_incremental_state, softmax, make_positions\nimport torch.nn.functional as F\n\nDEFAULT_MAX_SOURCE_POSITIONS = 3000\nDEFAULT_MAX_TARGET_POSITIONS = 3000\n\n\nclass SinusoidalPositionalEmbedding(nn.Module):\n    \"\"\"This module produces sinusoidal positional embeddings of any length.\n\n    Padding symbols are ignored.\n    \"\"\"\n\n    def __init__(self, embedding_dim, padding_idx, init_size=1024):\n        super().__init__()\n        self.embedding_dim = embedding_dim\n        self.padding_idx = padding_idx\n        self.weights = SinusoidalPositionalEmbedding.get_embedding(\n            init_size,\n            embedding_dim,\n            padding_idx,\n        )\n        self.register_buffer('_float_tensor', torch.FloatTensor(1))\n\n    @staticmethod\n    def get_embedding(num_embeddings, embedding_dim, padding_idx=None):\n        \"\"\"Build sinusoidal embeddings.\n\n        This matches the implementation in tensor2tensor, but differs slightly\n        from the description in Section 3.5 of \"Attention Is All You Need\".\n        \"\"\"\n        half_dim = embedding_dim // 2\n        emb = math.log(10000) / (half_dim - 1)\n        emb = torch.exp(torch.arange(half_dim, dtype=torch.float) * -emb)\n        emb = torch.arange(num_embeddings, dtype=torch.float).unsqueeze(1) * emb.unsqueeze(0)\n        emb = torch.cat([torch.sin(emb), torch.cos(emb)], dim=1).view(num_embeddings, -1)\n        if embedding_dim % 2 == 1:\n            # zero pad\n            emb = torch.cat([emb, torch.zeros(num_embeddings, 1)], dim=1)\n        if padding_idx is not None:\n            emb[padding_idx, :] = 0\n        return emb\n\n    def forward(self, input, incremental_state=None, timestep=None, positions=None, **kwargs):\n        \"\"\"Input is expected to be of size [bsz x seqlen].\"\"\"\n        bsz, seq_len = input.shape[:2]\n        max_pos = self.padding_idx + 1 + seq_len\n        if self.weights is None or max_pos > self.weights.size(0):\n            # recompute/expand embeddings if needed\n            self.weights = SinusoidalPositionalEmbedding.get_embedding(\n                max_pos,\n                self.embedding_dim,\n                self.padding_idx,\n            )\n        self.weights = self.weights.to(self._float_tensor)\n\n        if incremental_state is not None:\n            # positions is the same for every token when decoding a single step\n            pos = timestep.view(-1)[0] + 1 if timestep is not None else seq_len\n            return self.weights[self.padding_idx + pos, :].expand(bsz, 1, -1)\n\n        positions = make_positions(input, self.padding_idx) if positions is None else positions\n        return self.weights.index_select(0, positions.view(-1)).view(bsz, seq_len, -1).detach()\n\n    def max_positions(self):\n        \"\"\"Maximum number of supported positions.\"\"\"\n        return int(1e5)  # an arbitrary large number\n\n\nclass TransformerFFNLayer(nn.Module):\n    def __init__(self, hidden_size, filter_size, padding=\"SAME\", kernel_size=1, dropout=0., act='gelu', bias=True):\n        super().__init__()\n        self.kernel_size = kernel_size\n        self.dropout = dropout\n        self.act = act\n        if padding == 'SAME':\n            self.ffn_1 = nn.Conv1d(hidden_size, filter_size, kernel_size,\n                                   padding=kernel_size // 2, bias=bias)\n        elif padding == 'LEFT':\n            self.ffn_1 = nn.Sequential(\n                nn.ConstantPad1d((kernel_size - 1, 0), 0.0),\n                nn.Conv1d(hidden_size, filter_size, kernel_size, bias=bias)\n            )\n        self.ffn_2 = Linear(filter_size, hidden_size, bias=bias)\n\n    def forward(self, x, incremental_state=None):\n        # x: T x B x C\n        if incremental_state is not None:\n            saved_state = self._get_input_buffer(incremental_state)\n            if 'prev_input' in saved_state:\n                prev_input = saved_state['prev_input']\n                x = torch.cat((prev_input, x), dim=0)\n            x = x[-self.kernel_size:]\n            saved_state['prev_input'] = x\n            self._set_input_buffer(incremental_state, saved_state)\n\n        x = self.ffn_1(x.permute(1, 2, 0)).permute(2, 0, 1)\n        x = x * self.kernel_size ** -0.5\n\n        if incremental_state is not None:\n            x = x[-1:]\n        if self.act == 'gelu':\n            x = F.gelu(x)\n        if self.act == 'relu':\n            x = F.relu(x)\n        x = F.dropout(x, self.dropout, training=self.training)\n        x = self.ffn_2(x)\n        return x\n\n    def _get_input_buffer(self, incremental_state):\n        return get_incremental_state(\n            self,\n            incremental_state,\n            'f',\n        ) or {}\n\n    def _set_input_buffer(self, incremental_state, buffer):\n        set_incremental_state(\n            self,\n            incremental_state,\n            'f',\n            buffer,\n        )\n\n    def clear_buffer(self, incremental_state):\n        if incremental_state is not None:\n            saved_state = self._get_input_buffer(incremental_state)\n            if 'prev_input' in saved_state:\n                del saved_state['prev_input']\n            self._set_input_buffer(incremental_state, saved_state)\n\n\nclass MultiheadAttention(nn.Module):\n    def __init__(self, embed_dim, num_heads, kdim=None, vdim=None, dropout=0., bias=True,\n                 add_bias_kv=False, add_zero_attn=False, self_attention=False,\n                 encoder_decoder_attention=False):\n        super().__init__()\n        self.embed_dim = embed_dim\n        self.kdim = kdim if kdim is not None else embed_dim\n        self.vdim = vdim if vdim is not None else embed_dim\n        self.qkv_same_dim = self.kdim == embed_dim and self.vdim == embed_dim\n\n        self.num_heads = num_heads\n        self.dropout = dropout\n        self.head_dim = embed_dim // num_heads\n        assert self.head_dim * num_heads == self.embed_dim, \"embed_dim must be divisible by num_heads\"\n        self.scaling = self.head_dim ** -0.5\n\n        self.self_attention = self_attention\n        self.encoder_decoder_attention = encoder_decoder_attention\n\n        assert not self.self_attention or self.qkv_same_dim, 'Self-attention requires query, key and ' \\\n                                                             'value to be of the same size'\n\n        if self.qkv_same_dim:\n            self.in_proj_weight = Parameter(torch.Tensor(3 * embed_dim, embed_dim))\n        else:\n            self.k_proj_weight = Parameter(torch.Tensor(embed_dim, self.kdim))\n            self.v_proj_weight = Parameter(torch.Tensor(embed_dim, self.vdim))\n            self.q_proj_weight = Parameter(torch.Tensor(embed_dim, embed_dim))\n\n        if bias:\n            self.in_proj_bias = Parameter(torch.Tensor(3 * embed_dim))\n        else:\n            self.register_parameter('in_proj_bias', None)\n\n        self.out_proj = nn.Linear(embed_dim, embed_dim, bias=bias)\n\n        if add_bias_kv:\n            self.bias_k = Parameter(torch.Tensor(1, 1, embed_dim))\n            self.bias_v = Parameter(torch.Tensor(1, 1, embed_dim))\n        else:\n            self.bias_k = self.bias_v = None\n\n        self.add_zero_attn = add_zero_attn\n\n        self.reset_parameters()\n\n        self.enable_torch_version = False\n        self.last_attn_probs = None\n\n    def reset_parameters(self):\n        if self.qkv_same_dim:\n            nn.init.xavier_uniform_(self.in_proj_weight)\n        else:\n            nn.init.xavier_uniform_(self.k_proj_weight)\n            nn.init.xavier_uniform_(self.v_proj_weight)\n            nn.init.xavier_uniform_(self.q_proj_weight)\n\n        nn.init.xavier_uniform_(self.out_proj.weight)\n        if self.in_proj_bias is not None:\n            nn.init.constant_(self.in_proj_bias, 0.)\n            nn.init.constant_(self.out_proj.bias, 0.)\n        if self.bias_k is not None:\n            nn.init.xavier_normal_(self.bias_k)\n        if self.bias_v is not None:\n            nn.init.xavier_normal_(self.bias_v)\n\n    def forward(\n            self,\n            query, key, value,\n            key_padding_mask=None,\n            incremental_state=None,\n            need_weights=True,\n            static_kv=False,\n            attn_mask=None,\n            before_softmax=False,\n            need_head_weights=False,\n            enc_dec_attn_constraint_mask=None,\n            reset_attn_weight=None\n    ):\n        \"\"\"Input shape: Time x Batch x Channel\n\n        Args:\n            key_padding_mask (ByteTensor, optional): mask to exclude\n                keys that are pads, of shape `(batch, src_len)`, where\n                padding elements are indicated by 1s.\n            need_weights (bool, optional): return the attention weights,\n                averaged over heads (default: False).\n            attn_mask (ByteTensor, optional): typically used to\n                implement causal attention, where the mask prevents the\n                attention from looking forward in time (default: None).\n            before_softmax (bool, optional): return the raw attention\n                weights and values before the attention softmax.\n            need_head_weights (bool, optional): return the attention\n                weights for each head. Implies *need_weights*. Default:\n                return the average attention weights over all heads.\n        \"\"\"\n        if need_head_weights:\n            need_weights = True\n\n        tgt_len, bsz, embed_dim = query.size()\n        assert embed_dim == self.embed_dim\n        assert list(query.size()) == [tgt_len, bsz, embed_dim]\n\n        if self.enable_torch_version and incremental_state is None and not static_kv and reset_attn_weight is None:\n            if self.qkv_same_dim:\n                return F.multi_head_attention_forward(query, key, value,\n                                                      self.embed_dim, self.num_heads,\n                                                      self.in_proj_weight,\n                                                      self.in_proj_bias, self.bias_k, self.bias_v,\n                                                      self.add_zero_attn, self.dropout,\n                                                      self.out_proj.weight, self.out_proj.bias,\n                                                      self.training, key_padding_mask, need_weights,\n                                                      attn_mask)\n            else:\n                return F.multi_head_attention_forward(query, key, value,\n                                                      self.embed_dim, self.num_heads,\n                                                      torch.empty([0]),\n                                                      self.in_proj_bias, self.bias_k, self.bias_v,\n                                                      self.add_zero_attn, self.dropout,\n                                                      self.out_proj.weight, self.out_proj.bias,\n                                                      self.training, key_padding_mask, need_weights,\n                                                      attn_mask, use_separate_proj_weight=True,\n                                                      q_proj_weight=self.q_proj_weight,\n                                                      k_proj_weight=self.k_proj_weight,\n                                                      v_proj_weight=self.v_proj_weight)\n\n        if incremental_state is not None:\n            saved_state = self._get_input_buffer(incremental_state)\n            if 'prev_key' in saved_state:\n                # previous time steps are cached - no need to recompute\n                # key and value if they are static\n                if static_kv:\n                    assert self.encoder_decoder_attention and not self.self_attention\n                    key = value = None\n        else:\n            saved_state = None\n\n        if self.self_attention:\n            # self-attention\n            q, k, v = self.in_proj_qkv(query)\n        elif self.encoder_decoder_attention:\n            # encoder-decoder attention\n            q = self.in_proj_q(query)\n            if key is None:\n                assert value is None\n                k = v = None\n            else:\n                k = self.in_proj_k(key)\n                v = self.in_proj_v(key)\n\n        else:\n            q = self.in_proj_q(query)\n            k = self.in_proj_k(key)\n            v = self.in_proj_v(value)\n        q = q * self.scaling\n\n        if self.bias_k is not None:\n            assert self.bias_v is not None\n            k = torch.cat([k, self.bias_k.repeat(1, bsz, 1)])\n            v = torch.cat([v, self.bias_v.repeat(1, bsz, 1)])\n            if attn_mask is not None:\n                attn_mask = torch.cat([attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1)\n            if key_padding_mask is not None:\n                key_padding_mask = torch.cat(\n                    [key_padding_mask, key_padding_mask.new_zeros(key_padding_mask.size(0), 1)], dim=1)\n\n        q = q.contiguous().view(tgt_len, bsz * self.num_heads, self.head_dim).transpose(0, 1)\n        if k is not None:\n            k = k.contiguous().view(-1, bsz * self.num_heads, self.head_dim).transpose(0, 1)\n        if v is not None:\n            v = v.contiguous().view(-1, bsz * self.num_heads, self.head_dim).transpose(0, 1)\n\n        if saved_state is not None:\n            # saved states are stored with shape (bsz, num_heads, seq_len, head_dim)\n            if 'prev_key' in saved_state:\n                prev_key = saved_state['prev_key'].view(bsz * self.num_heads, -1, self.head_dim)\n                if static_kv:\n                    k = prev_key\n                else:\n                    k = torch.cat((prev_key, k), dim=1)\n            if 'prev_value' in saved_state:\n                prev_value = saved_state['prev_value'].view(bsz * self.num_heads, -1, self.head_dim)\n                if static_kv:\n                    v = prev_value\n                else:\n                    v = torch.cat((prev_value, v), dim=1)\n            if 'prev_key_padding_mask' in saved_state and saved_state['prev_key_padding_mask'] is not None:\n                prev_key_padding_mask = saved_state['prev_key_padding_mask']\n                if static_kv:\n                    key_padding_mask = prev_key_padding_mask\n                else:\n                    key_padding_mask = torch.cat((prev_key_padding_mask, key_padding_mask), dim=1)\n\n            saved_state['prev_key'] = k.view(bsz, self.num_heads, -1, self.head_dim)\n            saved_state['prev_value'] = v.view(bsz, self.num_heads, -1, self.head_dim)\n            saved_state['prev_key_padding_mask'] = key_padding_mask\n\n            self._set_input_buffer(incremental_state, saved_state)\n\n        src_len = k.size(1)\n\n        # This is part of a workaround to get around fork/join parallelism\n        # not supporting Optional types.\n        if key_padding_mask is not None and key_padding_mask.shape == torch.Size([]):\n            key_padding_mask = None\n\n        if key_padding_mask is not None:\n            assert key_padding_mask.size(0) == bsz\n            assert key_padding_mask.size(1) == src_len\n\n        if self.add_zero_attn:\n            src_len += 1\n            k = torch.cat([k, k.new_zeros((k.size(0), 1) + k.size()[2:])], dim=1)\n            v = torch.cat([v, v.new_zeros((v.size(0), 1) + v.size()[2:])], dim=1)\n            if attn_mask is not None:\n                attn_mask = torch.cat([attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1)\n            if key_padding_mask is not None:\n                key_padding_mask = torch.cat(\n                    [key_padding_mask, torch.zeros(key_padding_mask.size(0), 1).type_as(key_padding_mask)], dim=1)\n\n        attn_weights = torch.bmm(q, k.transpose(1, 2))\n        attn_weights = self.apply_sparse_mask(attn_weights, tgt_len, src_len, bsz)\n\n        assert list(attn_weights.size()) == [bsz * self.num_heads, tgt_len, src_len]\n\n        if attn_mask is not None:\n            if len(attn_mask.shape) == 2:\n                attn_mask = attn_mask.unsqueeze(0)\n            elif len(attn_mask.shape) == 3:\n                attn_mask = attn_mask[:, None].repeat([1, self.num_heads, 1, 1]).reshape(\n                    bsz * self.num_heads, tgt_len, src_len)\n            attn_weights = attn_weights + attn_mask\n\n        if enc_dec_attn_constraint_mask is not None:  # bs x head x L_kv\n            attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len)\n            attn_weights = attn_weights.masked_fill(\n                enc_dec_attn_constraint_mask.unsqueeze(2).bool(),\n                -1e8,\n            )\n            attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len)\n\n        if key_padding_mask is not None:\n            # don't attend to padding symbols\n            attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len)\n            attn_weights = attn_weights.masked_fill(\n                key_padding_mask.unsqueeze(1).unsqueeze(2),\n                -1e8,\n            )\n            attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len)\n\n        attn_logits = attn_weights.view(bsz, self.num_heads, tgt_len, src_len)\n\n        if before_softmax:\n            return attn_weights, v\n\n        attn_weights_float = softmax(attn_weights, dim=-1)\n        attn_weights = attn_weights_float.type_as(attn_weights)\n        attn_probs = F.dropout(attn_weights_float.type_as(attn_weights), p=self.dropout, training=self.training)\n\n        if reset_attn_weight is not None:\n            if reset_attn_weight:\n                self.last_attn_probs = attn_probs.detach()\n            else:\n                assert self.last_attn_probs is not None\n                attn_probs = self.last_attn_probs\n        attn = torch.bmm(attn_probs, v)\n        assert list(attn.size()) == [bsz * self.num_heads, tgt_len, self.head_dim]\n        attn = attn.transpose(0, 1).contiguous().view(tgt_len, bsz, embed_dim)\n        attn = self.out_proj(attn)\n\n        if need_weights:\n            attn_weights = attn_weights_float.view(bsz, self.num_heads, tgt_len, src_len).transpose(1, 0)\n            if not need_head_weights:\n                # average attention weights over heads\n                attn_weights = attn_weights.mean(dim=0)\n        else:\n            attn_weights = None\n\n        return attn, (attn_weights, attn_logits)\n\n    def in_proj_qkv(self, query):\n        return self._in_proj(query).chunk(3, dim=-1)\n\n    def in_proj_q(self, query):\n        if self.qkv_same_dim:\n            return self._in_proj(query, end=self.embed_dim)\n        else:\n            bias = self.in_proj_bias\n            if bias is not None:\n                bias = bias[:self.embed_dim]\n            return F.linear(query, self.q_proj_weight, bias)\n\n    def in_proj_k(self, key):\n        if self.qkv_same_dim:\n            return self._in_proj(key, start=self.embed_dim, end=2 * self.embed_dim)\n        else:\n            weight = self.k_proj_weight\n            bias = self.in_proj_bias\n            if bias is not None:\n                bias = bias[self.embed_dim:2 * self.embed_dim]\n            return F.linear(key, weight, bias)\n\n    def in_proj_v(self, value):\n        if self.qkv_same_dim:\n            return self._in_proj(value, start=2 * self.embed_dim)\n        else:\n            weight = self.v_proj_weight\n            bias = self.in_proj_bias\n            if bias is not None:\n                bias = bias[2 * self.embed_dim:]\n            return F.linear(value, weight, bias)\n\n    def _in_proj(self, input, start=0, end=None):\n        weight = self.in_proj_weight\n        bias = self.in_proj_bias\n        weight = weight[start:end, :]\n        if bias is not None:\n            bias = bias[start:end]\n        return F.linear(input, weight, bias)\n\n    def _get_input_buffer(self, incremental_state):\n        return get_incremental_state(\n            self,\n            incremental_state,\n            'attn_state',\n        ) or {}\n\n    def _set_input_buffer(self, incremental_state, buffer):\n        set_incremental_state(\n            self,\n            incremental_state,\n            'attn_state',\n            buffer,\n        )\n\n    def apply_sparse_mask(self, attn_weights, tgt_len, src_len, bsz):\n        return attn_weights\n\n    def clear_buffer(self, incremental_state=None):\n        if incremental_state is not None:\n            saved_state = self._get_input_buffer(incremental_state)\n            if 'prev_key' in saved_state:\n                del saved_state['prev_key']\n            if 'prev_value' in saved_state:\n                del saved_state['prev_value']\n            self._set_input_buffer(incremental_state, saved_state)\n\n\nclass EncSALayer(nn.Module):\n    def __init__(self, c, num_heads, dropout, attention_dropout=0.1,\n                 relu_dropout=0.1, kernel_size=9, padding='SAME', act='gelu',\n                 ffn_hidden_size=1024):\n        super().__init__()\n        self.c = c\n        self.dropout = dropout\n        self.num_heads = num_heads\n        if num_heads > 0:\n            self.layer_norm1 = LayerNorm(c)\n            self.self_attn = MultiheadAttention(\n                self.c, num_heads, self_attention=True, dropout=attention_dropout, bias=False)\n        self.layer_norm2 = LayerNorm(c)\n        self.ffn = TransformerFFNLayer(\n            c, ffn_hidden_size, kernel_size=kernel_size, dropout=relu_dropout, padding=padding, act=act)\n\n    def forward(self, x, encoder_padding_mask=None, **kwargs):\n        layer_norm_training = kwargs.get('layer_norm_training', None)\n        if layer_norm_training is not None:\n            self.layer_norm1.training = layer_norm_training\n            self.layer_norm2.training = layer_norm_training\n        if self.num_heads > 0:\n            residual = x\n            x = self.layer_norm1(x)\n            x, _, = self.self_attn(\n                query=x,\n                key=x,\n                value=x,\n                key_padding_mask=encoder_padding_mask\n            )\n            x = F.dropout(x, self.dropout, training=self.training)\n            x = residual + x\n            x = x * (1 - encoder_padding_mask.float()).transpose(0, 1)[..., None]\n\n        residual = x\n        x = self.layer_norm2(x)\n        x = self.ffn(x)\n        x = F.dropout(x, self.dropout, training=self.training)\n        x = residual + x\n        x = x * (1 - encoder_padding_mask.float()).transpose(0, 1)[..., None]\n        return x\n\n\nclass DecSALayer(nn.Module):\n    def __init__(self, c, num_heads, dropout, attention_dropout=0.1, relu_dropout=0.1,\n                 kernel_size=9, ffn_hidden_size=1024, act='gelu', post_ln=False):\n        super().__init__()\n        self.c = c\n        self.dropout = dropout\n        self.layer_norm1 = LayerNorm(c)\n        self.self_attn = MultiheadAttention(\n            c, num_heads, self_attention=True, dropout=attention_dropout, bias=False\n        )\n        self.layer_norm2 = LayerNorm(c)\n        self.encoder_attn = MultiheadAttention(\n            c, num_heads, encoder_decoder_attention=True, dropout=attention_dropout, bias=False,\n        )\n        self.layer_norm3 = LayerNorm(c)\n        self.ffn = TransformerFFNLayer(\n            c, ffn_hidden_size, padding='LEFT', kernel_size=kernel_size, dropout=relu_dropout, act=act)\n        self.post_ln = post_ln\n\n    def forward(\n            self,\n            x,\n            encoder_out=None,\n            encoder_padding_mask=None,\n            incremental_state=None,\n            self_attn_mask=None,\n            self_attn_padding_mask=None,\n            attn_out=None,\n            reset_attn_weight=None,\n            **kwargs,\n    ):\n        layer_norm_training = kwargs.get('layer_norm_training', None)\n        if layer_norm_training is not None:\n            self.layer_norm1.training = layer_norm_training\n            self.layer_norm2.training = layer_norm_training\n            self.layer_norm3.training = layer_norm_training\n        residual = x\n        if not self.post_ln:\n            x = self.layer_norm1(x)\n        x, _ = self.self_attn(\n            query=x,\n            key=x,\n            value=x,\n            key_padding_mask=self_attn_padding_mask,\n            incremental_state=incremental_state,\n            attn_mask=self_attn_mask\n        )\n        x = F.dropout(x, self.dropout, training=self.training)\n        x = residual + x\n        if self.post_ln:\n            x = self.layer_norm1(x)\n\n        attn_logits = None\n        if encoder_out is not None or attn_out is not None:\n            residual = x\n            if not self.post_ln:\n                x = self.layer_norm2(x)\n        if encoder_out is not None:\n            x, attn = self.encoder_attn(\n                query=x,\n                key=encoder_out,\n                value=encoder_out,\n                key_padding_mask=encoder_padding_mask,\n                incremental_state=incremental_state,\n                static_kv=True,\n                enc_dec_attn_constraint_mask=get_incremental_state(self, incremental_state,\n                                                                   'enc_dec_attn_constraint_mask'),\n                reset_attn_weight=reset_attn_weight\n            )\n            attn_logits = attn[1]\n        elif attn_out is not None:\n            x = self.encoder_attn.in_proj_v(attn_out)\n        if encoder_out is not None or attn_out is not None:\n            x = F.dropout(x, self.dropout, training=self.training)\n            x = residual + x\n        if self.post_ln:\n            x = self.layer_norm2(x)\n\n        residual = x\n        if not self.post_ln:\n            x = self.layer_norm3(x)\n        x = self.ffn(x, incremental_state=incremental_state)\n        x = F.dropout(x, self.dropout, training=self.training)\n        x = residual + x\n        if self.post_ln:\n            x = self.layer_norm3(x)\n        return x, attn_logits\n\n    def clear_buffer(self, input, encoder_out=None, encoder_padding_mask=None, incremental_state=None):\n        self.encoder_attn.clear_buffer(incremental_state)\n        self.ffn.clear_buffer(incremental_state)\n\n    def set_buffer(self, name, tensor, incremental_state):\n        return set_incremental_state(self, incremental_state, name, tensor)\n\n\nclass TransformerEncoderLayer(nn.Module):\n    def __init__(self, hidden_size, dropout, kernel_size=9, num_heads=2, ffn_hidden_size=1024):\n        super().__init__()\n        self.hidden_size = hidden_size\n        self.dropout = dropout\n        self.num_heads = num_heads\n        self.op = EncSALayer(\n            hidden_size, num_heads, dropout=dropout,\n            attention_dropout=0.0, relu_dropout=dropout,\n            kernel_size=kernel_size, ffn_hidden_size=ffn_hidden_size)\n\n    def forward(self, x, **kwargs):\n        return self.op(x, **kwargs)\n\n\nclass TransformerDecoderLayer(nn.Module):\n    def __init__(self, hidden_size, dropout, kernel_size=9, num_heads=2, ffn_hidden_size=1024, post_ln=False):\n        super().__init__()\n        self.hidden_size = hidden_size\n        self.dropout = dropout\n        self.num_heads = num_heads\n        self.op = DecSALayer(\n            hidden_size, num_heads, dropout=dropout,\n            attention_dropout=0.0, relu_dropout=dropout,\n            kernel_size=kernel_size, ffn_hidden_size=ffn_hidden_size,\n            post_ln=post_ln)\n\n    def forward(self, x, **kwargs):\n        return self.op(x, **kwargs)\n\n    def clear_buffer(self, *args):\n        return self.op.clear_buffer(*args)\n\n    def set_buffer(self, *args):\n        return self.op.set_buffer(*args)\n\n\nclass FFTBlocks(nn.Module):\n    def __init__(self, hidden_size, num_layers, ffn_kernel_size=9, dropout=0.0,\n                 num_heads=2, use_pos_embed=True, use_last_norm=True,\n                 use_pos_embed_alpha=True, ffn_hidden_size=1024):\n        super().__init__()\n        self.num_layers = num_layers\n        embed_dim = self.hidden_size = hidden_size\n        self.dropout = dropout\n        self.use_pos_embed = use_pos_embed\n        self.use_last_norm = use_last_norm\n        if use_pos_embed:\n            self.max_source_positions = DEFAULT_MAX_TARGET_POSITIONS\n            self.padding_idx = 0\n            self.pos_embed_alpha = nn.Parameter(torch.Tensor([1])) if use_pos_embed_alpha else 1\n            self.embed_positions = SinusoidalPositionalEmbedding(\n                embed_dim, self.padding_idx, init_size=DEFAULT_MAX_TARGET_POSITIONS,\n            )\n\n        self.layers = nn.ModuleList([])\n        self.layers.extend([\n            TransformerEncoderLayer(self.hidden_size, self.dropout,\n                                    kernel_size=ffn_kernel_size, num_heads=num_heads,\n                                    ffn_hidden_size=ffn_hidden_size)\n            for _ in range(self.num_layers)\n        ])\n        if self.use_last_norm:\n            self.layer_norm = nn.LayerNorm(embed_dim)\n        else:\n            self.layer_norm = None\n\n    def forward(self, x, padding_mask=None, attn_mask=None, return_hiddens=False):\n        \"\"\"\n        :param x: [B, T, C]\n        :param padding_mask: [B, T]\n        :return: [B, T, C] or [L, B, T, C]\n        \"\"\"\n        padding_mask = x.abs().sum(-1).eq(0).data if padding_mask is None else padding_mask\n        nonpadding_mask_TB = 1 - padding_mask.transpose(0, 1).float()[:, :, None]  # [T, B, 1]\n        if self.use_pos_embed:\n            positions = self.pos_embed_alpha * self.embed_positions(x[..., 0])\n            x = x + positions\n            x = F.dropout(x, p=self.dropout, training=self.training)\n        # B x T x C -> T x B x C\n        x = x.transpose(0, 1) * nonpadding_mask_TB\n        hiddens = []\n        for layer in self.layers:\n            x = layer(x, encoder_padding_mask=padding_mask, attn_mask=attn_mask) * nonpadding_mask_TB\n            hiddens.append(x)\n        if self.use_last_norm:\n            x = self.layer_norm(x) * nonpadding_mask_TB\n        if return_hiddens:\n            x = torch.stack(hiddens, 0)  # [L, T, B, C]\n            x = x.transpose(1, 2)  # [L, B, T, C]\n        else:\n            x = x.transpose(0, 1)  # [B, T, C]\n        return x\n\n\nclass FastSpeechEncoder(FFTBlocks):\n    def __init__(self, dict_size, hidden_size=256, num_layers=4, kernel_size=9,\n                 dropout=0.0, num_heads=2, ffn_hidden_size=1024):\n        super().__init__(hidden_size, num_layers, kernel_size, num_heads=num_heads,\n                         use_pos_embed=False, dropout=dropout, ffn_hidden_size=ffn_hidden_size)\n        self.embed_tokens = Embedding(dict_size, hidden_size, 0)\n        self.embed_scale = math.sqrt(hidden_size)\n        self.padding_idx = 0\n        self.embed_positions = SinusoidalPositionalEmbedding(\n            hidden_size, self.padding_idx, init_size=DEFAULT_MAX_TARGET_POSITIONS,\n        )\n\n    def forward(self, txt_tokens, attn_mask=None, other_embeds=0):\n        \"\"\"\n\n        :param txt_tokens: [B, T]\n        :return: {\n            'encoder_out': [B x T x C]\n        }\n        \"\"\"\n        encoder_padding_mask = txt_tokens.eq(self.padding_idx).data\n        x = self.forward_embedding(txt_tokens) + other_embeds  # [B, T, H]\n        if self.num_layers > 0:\n            x = super(FastSpeechEncoder, self).forward(x, encoder_padding_mask, attn_mask=attn_mask)\n        return x\n\n    def forward_embedding(self, txt_tokens):\n        # embed tokens and positions\n        x = self.embed_scale * self.embed_tokens(txt_tokens)\n        if self.use_pos_embed:\n            positions = self.embed_positions(txt_tokens)\n            x = x + positions\n        x = F.dropout(x, p=self.dropout, training=self.training)\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/llm_dit/cfm.py",
    "content": "# MIT License\n\n# Copyright (c) 2023 Alexander Tong\n\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\n\n# Copyright (c) [2023] [Alexander Tong] \n# Copyright (c) [2025] [Ziyue Jiang] \n# SPDX-License-Identifier: MIT\n# This file has been modified by Ziyue Jiang on 2025/03/19\n# Original file was released under MIT, with the full license text # available at https://github.com/atong01/conditional-flow-matching/blob/1.0.7/LICENSE.\n# This modified file is released under the same license.\n\nimport math\nimport torch\nfrom typing import Union\nfrom torch.distributions import LogisticNormal\n\n\nclass LogitNormalTrainingTimesteps:\n    def __init__(self, T=1000.0, loc=0.0, scale=1.0):\n        assert T > 0\n        self.T = T\n        self.dist = LogisticNormal(loc, scale)\n\n    def sample(self, size, device):\n        t = self.dist.sample(size)[..., 0].to(device)\n        return t\n    \n\ndef pad_t_like_x(t, x):\n    \"\"\"Function to reshape the time vector t by the number of dimensions of x.\n\n    Parameters\n    ----------\n    x : Tensor, shape (bs, *dim)\n        represents the source minibatch\n    t : FloatTensor, shape (bs)\n\n    Returns\n    -------\n    t : Tensor, shape (bs, number of x dimensions)\n\n    Example\n    -------\n    x: Tensor (bs, C, W, H)\n    t: Vector (bs)\n    pad_t_like_x(t, x): Tensor (bs, 1, 1, 1)\n    \"\"\"\n    if isinstance(t, (float, int)):\n        return t\n    return t.reshape(-1, *([1] * (x.dim() - 1)))\n\n\nclass ConditionalFlowMatcher:\n    \"\"\"Base class for conditional flow matching methods. This class implements the independent\n    conditional flow matching methods from [1] and serves as a parent class for all other flow\n    matching methods.\n\n    It implements:\n    - Drawing data from gaussian probability path N(t * x1 + (1 - t) * x0, sigma) function\n    - conditional flow matching ut(x1|x0) = x1 - x0\n    - score function $\\nabla log p_t(x|x0, x1)$\n    \"\"\"\n\n    def __init__(self, sigma: Union[float, int] = 0.0):\n        r\"\"\"Initialize the ConditionalFlowMatcher class. It requires the hyper-parameter $\\sigma$.\n\n        Parameters\n        ----------\n        sigma : Union[float, int]\n        \"\"\"\n        self.sigma = sigma\n        self.time_sampler = LogitNormalTrainingTimesteps()\n\n    def compute_mu_t(self, x0, x1, t):\n        \"\"\"\n        Compute the mean of the probability path N(t * x1 + (1 - t) * x0, sigma), see (Eq.14) [1].\n\n        Parameters\n        ----------\n        x0 : Tensor, shape (bs, *dim)\n            represents the source minibatch\n        x1 : Tensor, shape (bs, *dim)\n            represents the target minibatch\n        t : FloatTensor, shape (bs)\n\n        Returns\n        -------\n        mean mu_t: t * x1 + (1 - t) * x0\n\n        References\n        ----------\n        [1] Improving and Generalizing Flow-Based Generative Models with minibatch optimal transport, Preprint, Tong et al.\n        \"\"\"\n        t = pad_t_like_x(t, x0)\n        return t * x1 + (1 - t) * x0\n\n    def compute_sigma_t(self, t):\n        \"\"\"\n        Compute the standard deviation of the probability path N(t * x1 + (1 - t) * x0, sigma), see (Eq.14) [1].\n\n        Parameters\n        ----------\n        t : FloatTensor, shape (bs)\n\n        Returns\n        -------\n        standard deviation sigma\n\n        References\n        ----------\n        [1] Improving and Generalizing Flow-Based Generative Models with minibatch optimal transport, Preprint, Tong et al.\n        \"\"\"\n        del t\n        return self.sigma\n\n    def sample_xt(self, x0, x1, t, epsilon):\n        \"\"\"\n        Draw a sample from the probability path N(t * x1 + (1 - t) * x0, sigma), see (Eq.14) [1].\n\n        Parameters\n        ----------\n        x0 : Tensor, shape (bs, *dim)\n            represents the source minibatch\n        x1 : Tensor, shape (bs, *dim)\n            represents the target minibatch\n        t : FloatTensor, shape (bs)\n        epsilon : Tensor, shape (bs, *dim)\n            noise sample from N(0, 1)\n\n        Returns\n        -------\n        xt : Tensor, shape (bs, *dim)\n\n        References\n        ----------\n        [1] Improving and Generalizing Flow-Based Generative Models with minibatch optimal transport, Preprint, Tong et al.\n        \"\"\"\n        mu_t = self.compute_mu_t(x0, x1, t)\n        sigma_t = self.compute_sigma_t(t)\n        sigma_t = pad_t_like_x(sigma_t, x0)\n        return mu_t + sigma_t * epsilon\n\n    def compute_conditional_flow(self, x0, x1, t, xt):\n        \"\"\"\n        Compute the conditional vector field ut(x1|x0) = x1 - x0, see Eq.(15) [1].\n\n        Parameters\n        ----------\n        x0 : Tensor, shape (bs, *dim)\n            represents the source minibatch\n        x1 : Tensor, shape (bs, *dim)\n            represents the target minibatch\n        t : FloatTensor, shape (bs)\n        xt : Tensor, shape (bs, *dim)\n            represents the samples drawn from probability path pt\n\n        Returns\n        -------\n        ut : conditional vector field ut(x1|x0) = x1 - x0\n\n        References\n        ----------\n        [1] Improving and Generalizing Flow-Based Generative Models with minibatch optimal transport, Preprint, Tong et al.\n        \"\"\"\n        del t, xt\n        return x1 - x0\n\n    def sample_noise_like(self, x):\n        return torch.randn_like(x)\n\n    def sample_location_and_conditional_flow(self, x0, x1, t=None, return_noise=False):\n        \"\"\"\n        Compute the sample xt (drawn from N(t * x1 + (1 - t) * x0, sigma))\n        and the conditional vector field ut(x1|x0) = x1 - x0, see Eq.(15) [1].\n\n        Parameters\n        ----------\n        x0 : Tensor, shape (bs, *dim)\n            represents the source minibatch\n        x1 : Tensor, shape (bs, *dim)\n            represents the target minibatch\n        (optionally) t : Tensor, shape (bs)\n            represents the time levels\n            if None, drawn from uniform [0,1]\n        return_noise : bool\n            return the noise sample epsilon\n\n\n        Returns\n        -------\n        t : FloatTensor, shape (bs)\n        xt : Tensor, shape (bs, *dim)\n            represents the samples drawn from probability path pt\n        ut : conditional vector field ut(x1|x0) = x1 - x0\n        (optionally) eps: Tensor, shape (bs, *dim) such that xt = mu_t + sigma_t * epsilon\n\n        References\n        ----------\n        [1] Improving and Generalizing Flow-Based Generative Models with minibatch optimal transport, Preprint, Tong et al.\n        \"\"\"\n        if t is None:\n            # t = torch.rand(x0.shape[0]).type_as(x0)\n            t = self.time_sampler.sample([x0.shape[0]], x0.device).type_as(x0)\n\n        assert len(t) == x0.shape[0], \"t has to have batch size dimension\"\n\n        eps = self.sample_noise_like(x0)\n        xt = self.sample_xt(x0, x1, t, eps)\n        ut = self.compute_conditional_flow(x0, x1, t, xt)\n        if return_noise:\n            return t, xt, ut, eps\n        else:\n            return t, xt, ut\n\n    def compute_lambda(self, t):\n        \"\"\"Compute the lambda function, see Eq.(23) [3].\n\n        Parameters\n        ----------\n        t : FloatTensor, shape (bs)\n\n        Returns\n        -------\n        lambda : score weighting function\n\n        References\n        ----------\n        [4] Simulation-free Schrodinger bridges via score and flow matching, Preprint, Tong et al.\n        \"\"\"\n        sigma_t = self.compute_sigma_t(t)\n        return 2 * sigma_t / (self.sigma**2 + 1e-8)\n\n\nclass VariancePreservingConditionalFlowMatcher(ConditionalFlowMatcher):\n    \"\"\"Albergo et al. 2023 trigonometric interpolants class. This class inherits the\n    ConditionalFlowMatcher and override the compute_mu_t and compute_conditional_flow functions in\n    order to compute [3]'s trigonometric interpolants.\n\n    [3] Stochastic Interpolants: A Unifying Framework for Flows and Diffusions, Albergo et al.\n    \"\"\"\n\n    def compute_mu_t(self, x0, x1, t):\n        r\"\"\"Compute the mean of the probability path (Eq.5) from [3].\n\n        Parameters\n        ----------\n        x0 : Tensor, shape (bs, *dim)\n            represents the source minibatch\n        x1 : Tensor, shape (bs, *dim)\n            represents the target minibatch\n        t : FloatTensor, shape (bs)\n\n        Returns\n        -------\n        mean mu_t: cos(pi t/2)x0 + sin(pi t/2)x1\n\n        References\n        ----------\n        [3] Stochastic Interpolants: A Unifying Framework for Flows and Diffusions, Albergo et al.\n        \"\"\"\n        t = pad_t_like_x(t, x0)\n        return torch.cos(math.pi / 2 * t) * x0 + torch.sin(math.pi / 2 * t) * x1\n\n    def compute_conditional_flow(self, x0, x1, t, xt):\n        r\"\"\"Compute the conditional vector field similar to [3].\n\n        ut(x1|x0) = pi/2 (cos(pi*t/2) x1 - sin(pi*t/2) x0),\n        see Eq.(21) [3].\n\n        Parameters\n        ----------\n        x0 : Tensor, shape (bs, *dim)\n            represents the source minibatch\n        x1 : Tensor, shape (bs, *dim)\n            represents the target minibatch\n        t : FloatTensor, shape (bs)\n        xt : Tensor, shape (bs, *dim)\n            represents the samples drawn from probability path pt\n\n        Returns\n        -------\n        ut : conditional vector field\n        ut(x1|x0) = pi/2 (cos(pi*t/2) x1 - sin(\\pi*t/2) x0)\n\n        References\n        ----------\n        [3] Stochastic Interpolants: A Unifying Framework for Flows and Diffusions, Albergo et al.\n        \"\"\"\n        del xt\n        t = pad_t_like_x(t, x0)\n        return math.pi / 2 * (torch.cos(math.pi / 2 * t) * x1 - torch.sin(math.pi / 2 * t) * x0)\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/llm_dit/dit.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport torch\nfrom torch import nn\n\nfrom tts.modules.llm_dit.cfm import ConditionalFlowMatcher\nfrom tts.modules.ar_dur.commons.layers import Embedding\nfrom tts.modules.ar_dur.commons.nar_tts_modules import PosEmb\nfrom tts.modules.ar_dur.commons.rel_transformer import RelTransformerEncoder\nfrom tts.modules.ar_dur.ar_dur_predictor import expand_states\nfrom tts.modules.llm_dit.transformer import Transformer\nfrom tts.modules.llm_dit.time_embedding import TimestepEmbedding\n\n\nclass Diffusion(nn.Module):\n    def __init__(self):\n        super().__init__()\n        # Hparams\n        # cond dim\n        self.local_cond_dim = 512\n        self.ctx_mask_dim = 16\n        self.in_channels = 32\n        self.out_channels = 32\n        # LLM\n        self.encoder_dim = 1024\n        self.encoder_n_layers = 24\n        self.encoder_n_heads = 16\n        self.max_seq_len = 16384\n        self.multiple_of = 256\n\n        self.ctx_mask_proj = nn.Linear(1, self.ctx_mask_dim)\n        self.local_cond_project = nn.Linear(\n            self.out_channels + self.ctx_mask_dim, self.local_cond_dim)\n\n        self.encoder = Transformer(self.encoder_n_layers, self.encoder_dim, self.encoder_n_heads, self.max_seq_len)\n\n        self.x_prenet = nn.Linear(self.in_channels, self.encoder_dim)\n        self.prenet = nn.Linear(self.local_cond_dim, self.encoder_dim)\n        self.postnet = nn.Linear(self.encoder_dim, self.out_channels)\n  \n        self.flow_matcher = ConditionalFlowMatcher(sigma=0.0)\n        # The implementation of TimestepEmbedding is a modified version from F5-TTS (https://github.com/SWivid/F5-TTS), \n        # which is licensed under the MIT License.\n        self.f5_time_embed = TimestepEmbedding(self.encoder_dim)\n\n        # text encoder\n        self.ph_encoder = RelTransformerEncoder(\n            302, self.encoder_dim, self.encoder_dim,\n            self.encoder_dim * 2, 4, 6,\n            3, 0.0, prenet=True, pre_ln=True)\n        self.tone_embed = Embedding(32, self.encoder_dim, padding_idx=0)\n        self.ph_pos_embed = PosEmb(self.encoder_dim)\n        self.ling_pre_net = torch.nn.Sequential(*[\n            torch.nn.Conv1d(self.encoder_dim, self.encoder_dim, kernel_size=s * 2, stride=s, padding=s // 2)\n            for i, s in enumerate([2, 2])\n        ])\n    \n    def forward(self, inputs, sigmas=None, x_noisy=None):\n        ctx_mask = inputs['ctx_mask']\n        ctx_feature = inputs['lat_ctx'] * ctx_mask\n\n        \"\"\" local conditioning (prompt_latent + spk_embed) \"\"\"\n        ctx_mask_emb = self.ctx_mask_proj(ctx_mask)\n        # ctx_feature = ctx_feature * (1 - inputs[\"spk_cfg_mask\"][:, :, None])\n        local_cond = torch.cat([ctx_feature, ctx_mask_emb], dim=-1)\n        local_cond = self.local_cond_project(local_cond)\n\n        \"\"\" diffusion target latent \"\"\"\n        x = inputs['lat']\n    \n        # Here, x is x1 in CFM\n        x0 = torch.randn_like(x)\n        t, xt, ut = self.flow_matcher.sample_location_and_conditional_flow(x0, x)\n        \n        # define noisy_input and target\n        t = t.bfloat16()\n        x_noisy = (xt * (1 - ctx_mask)).bfloat16()\n        target = ut\n\n        # concat condition.\n        x_ling = self.forward_ling_encoder(inputs[\"phone\"], inputs[\"tone\"])\n        x_ling = self.ling_pre_net(expand_states(x_ling, inputs['mel2ph']).transpose(1, 2)).transpose(1, 2)\n        x_noisy = self.x_prenet(x_noisy) + self.prenet(local_cond) + x_ling\n        encoder_out = self.encoder(x_noisy, self.f5_time_embed(t), attn_mask=inputs[\"text_mel_mask\"], do_checkpoint=False)\n        pred = self.postnet(encoder_out)\n\n        return pred, target\n    \n    def forward_ling_encoder(self, txt_tokens, tone_tokens):\n        ph_tokens = txt_tokens\n        ph_nonpadding = (ph_tokens > 0).float()[:, :, None]  # [B, T_phone, 1]\n\n        # enc_ph\n        ph_enc_oembed = self.tone_embed(tone_tokens)\n        ph_enc_oembed = ph_enc_oembed + self.ph_pos_embed(\n            torch.arange(0, ph_tokens.shape[1])[None,].to(ph_tokens.device))\n        ph_enc_oembed = ph_enc_oembed\n        ph_enc_oembed = ph_enc_oembed * ph_nonpadding\n        x_ling = self.ph_encoder(ph_tokens, other_embeds=ph_enc_oembed) * ph_nonpadding\n        return x_ling\n\n    def _forward(self, x, local_cond, x_ling, timesteps, ctx_mask, dur=None, seq_cfg_w=[1.0,1.0]):\n        \"\"\" When we use torchdiffeq, we need to include the CFG process inside _forward() \"\"\"\n        x = x * (1 - ctx_mask)\n        x = self.x_prenet(x) + self.prenet(local_cond) + x_ling\n        pred_v = self.encoder(x, self.f5_time_embed(timesteps), attn_mask=torch.ones((x.size(0), x.size(1)), device=x.device))\n        pred = self.postnet(pred_v)\n\n        \"\"\" Perform multi-cond CFG \"\"\"\n        cond_spk_txt, cond_txt, uncond = pred.chunk(3)\n        pred = uncond + seq_cfg_w[0] * (cond_txt - uncond) + seq_cfg_w[1] * (cond_spk_txt - cond_txt)\n        return pred\n\n    @torch.no_grad()\n    def inference(self, inputs, timesteps=20, seq_cfg_w=[1.0, 1.0], **kwargs):\n        # txt embedding\n        x_ling = self.forward_ling_encoder(inputs[\"phone\"], inputs[\"tone\"])\n        x_ling = self.ling_pre_net(expand_states(x_ling, inputs['dur']).transpose(1, 2)).transpose(1, 2)\n\n        # speaker embedding\n        ctx_feature = inputs['lat_ctx']\n        ctx_feature[1:, :, :] = 0 # prefix spk cfg\n        ctx_mask_emb = self.ctx_mask_proj(inputs['ctx_mask'])\n\n        # local conditioning.\n        local_cond = torch.cat([ctx_feature, ctx_mask_emb], dim=-1)\n        local_cond = self.local_cond_project(local_cond)\n        \n        ''' Euler ODE solver '''\n        bsz, device, frm_len = (local_cond.size(0), local_cond.device, local_cond.size(1))\n        # Sway sampling from F5-TTS (https://github.com/SWivid/F5-TTS), \n        # which is licensed under the MIT License.\n        sway_sampling_coef = -1.0\n        t_schedule = torch.linspace(0, 1, timesteps + 1, device=device, dtype=x_ling.dtype)\n        if sway_sampling_coef is not None:\n            t_schedule = t_schedule + sway_sampling_coef * (torch.cos(torch.pi / 2 * t_schedule) - 1 + t_schedule)\n        \n        # AMO sampling implementation for \"AMO Sampler: Enhancing Text Rendering with Overshooting\" (https://arxiv.org/pdf/2411.19415)\n        def amo_sampling(z_t, t, t_next, v):\n            # Upcast to avoid precision issues when computing prev_sample\n            z_t = z_t.to(torch.float32)\n\n            # Constant definition in Algorithm 1\n            s = t_next\n            c = 3\n\n            # Line 7 in Algorithm 1\n            o = min(t_next + c * (t_next - t), 1)\n            pred_z_o = z_t + (o - t) * v\n\n            # Line 11 in Algorithm 1\n            a = s / o\n            b = ((1 - s) ** 2 - (a * (1 - o)) ** 2) ** 0.5\n            noise_i = torch.randn(size=z_t.shape, device=z_t.device)\n            z_t_next = a * pred_z_o + b * noise_i\n            return z_t_next.to(v.dtype)\n\n        x = torch.randn([1, frm_len, self.out_channels], device=device)\n        for step_index in range(timesteps):\n            x = x.to(torch.float32)\n            sigma = t_schedule[step_index].to(x_ling.dtype)\n            sigma_next = t_schedule[step_index + 1]\n            model_out = self._forward(torch.cat([x] * bsz), local_cond, x_ling, timesteps=sigma.unsqueeze(0), ctx_mask=inputs['ctx_mask'], dur=inputs['dur'], seq_cfg_w=seq_cfg_w)\n            x = amo_sampling(x, sigma, sigma_next, model_out)\n            # Cast sample back to model compatible dtype\n            x = x.to(model_out.dtype)\n        \n        return x\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/llm_dit/time_embedding.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport math\nimport torch\nfrom torch import nn\n\n\nclass SinusPositionEmbedding(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.dim = dim\n\n    def forward(self, x, scale=1000):\n        device = x.device\n        half_dim = self.dim // 2\n        emb = math.log(10000) / (half_dim - 1)\n        emb = torch.exp(torch.arange(half_dim, device=device).float() * -emb)\n        emb = scale * x.unsqueeze(1) * emb.unsqueeze(0)\n        emb = torch.cat((emb.sin(), emb.cos()), dim=-1)\n        return emb\n\nclass TimestepEmbedding(nn.Module):\n    def __init__(self, dim, freq_embed_dim=256):\n        super().__init__()\n        self.time_embed = SinusPositionEmbedding(freq_embed_dim)\n        self.time_mlp = nn.Sequential(nn.Linear(freq_embed_dim, dim), nn.SiLU(), nn.Linear(dim, dim))\n\n    def forward(self, timestep):  # noqa: F821\n        time_hidden = self.time_embed(timestep)\n        time_hidden = time_hidden.to(timestep.dtype)\n        time = self.time_mlp(time_hidden)  # b d\n        return time"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/llm_dit/transformer.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\nfrom typing import Any, Optional, Tuple\n\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn\n\n\ndef precompute_freqs_cis(dim: int, end: int, theta: float = 10000.0):\n    freqs = 1.0 / (theta ** (torch.arange(0, dim, 2)[: (dim // 2)].float() / dim))\n    t = torch.arange(end, device=freqs.device)  # type: ignore\n    freqs = torch.outer(t, freqs).float()  # type: ignore\n    freqs_cis = torch.polar(torch.ones_like(freqs), freqs)  # complex64\n    return freqs_cis\n\n\ndef reshape_for_broadcast(freqs_cis: torch.Tensor, x: torch.Tensor):\n    ndim = x.ndim\n    assert 0 <= 1 < ndim\n    assert freqs_cis.shape == (x.shape[1], x.shape[-1])\n    shape = [d if i == 1 or i == ndim - 1 else 1 for i, d in enumerate(x.shape)]\n    return freqs_cis.view(*shape)\n\n\ndef apply_rotary_emb(\n        xq: torch.Tensor,\n        xk: torch.Tensor,\n        freqs_cis: torch.Tensor,\n) -> Tuple[torch.Tensor, torch.Tensor]:\n    xq_ = torch.view_as_complex(xq.float().reshape(*xq.shape[:-1], -1, 2))\n    xk_ = torch.view_as_complex(xk.float().reshape(*xk.shape[:-1], -1, 2))\n    freqs_cis = reshape_for_broadcast(freqs_cis, xq_)\n    xq_out = torch.view_as_real(xq_ * freqs_cis).flatten(3)\n    xk_out = torch.view_as_real(xk_ * freqs_cis).flatten(3)\n    return xq_out.type_as(xq), xk_out.type_as(xk)\n\n\nclass AdaLNZero(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.silu = nn.SiLU()\n        self.linear = nn.Linear(dim, dim * 6)\n        self.norm = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n\n    def forward(self, x, emb=None):\n        emb = self.linear(self.silu(emb))\n        shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = torch.chunk(emb, 6, dim=1)\n        x = self.norm(x) * (1 + scale_msa[:, None]) + shift_msa[:, None]\n        return x, gate_msa, shift_mlp, scale_mlp, gate_mlp\n\n\nclass AdaLNZero_Out(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.silu = nn.SiLU()\n        self.linear = nn.Linear(dim, dim * 2)\n        self.norm = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n\n    def forward(self, x, emb):\n        emb = self.linear(self.silu(emb))\n        scale, shift = torch.chunk(emb, 2, dim=1)\n        x = self.norm(x) * (1 + scale)[:, None, :] + shift[:, None, :]\n        return x\n\n\nclass Attention(nn.Module):\n    def __init__(self, encoder_dim, encoder_n_heads, max_seq_len):\n        super().__init__()\n        self.encoder_n_kv_heads = encoder_n_heads\n        model_parallel_size = 1\n        self.n_local_heads = encoder_n_heads // model_parallel_size\n        self.n_local_kv_heads = self.encoder_n_kv_heads // model_parallel_size\n        self.n_rep = self.n_local_heads // self.n_local_kv_heads\n        self.head_dim = encoder_dim // encoder_n_heads\n\n        self.wq = nn.Linear(\n            encoder_dim,\n            encoder_n_heads * self.head_dim,\n        )\n        self.wk = nn.Linear(\n            encoder_dim,\n            self.encoder_n_kv_heads * self.head_dim,\n        )\n        self.wv = nn.Linear(\n            encoder_dim,\n            self.encoder_n_kv_heads * self.head_dim,\n        )\n        self.wo = nn.Linear(\n            encoder_n_heads * self.head_dim,\n            encoder_dim,\n        )\n\n    def forward(\n            self,\n            x: torch.Tensor,\n            start_pos: int,\n            freqs_cis: torch.Tensor,\n            mask: Optional[torch.Tensor],\n    ):\n        bsz, seqlen, _ = x.shape\n        xq, xk, xv = self.wq(x), self.wk(x), self.wv(x)\n        xq = xq.view(bsz, seqlen, self.n_local_heads, self.head_dim)\n        xk = xk.view(bsz, seqlen, self.n_local_kv_heads, self.head_dim)\n        xv = xv.view(bsz, seqlen, self.n_local_kv_heads, self.head_dim)\n\n        xq, xk = apply_rotary_emb(xq, xk, freqs_cis=freqs_cis)\n        xq = xq.transpose(1, 2)  # (bs, n_local_heads, seqlen, head_dim)\n        keys = xk.transpose(1, 2)  # (bs, n_local_heads, cache_len + seqlen, head_dim)\n        values = xv.transpose(1, 2)  # (bs, n_local_heads, cache_len + seqlen, head_dim)\n\n        output = F.scaled_dot_product_attention(xq, keys, values, mask[:, None, None, :], is_causal=False)\n        output = output.transpose(1, 2).contiguous().view(bsz, seqlen, -1)\n        return self.wo(output)\n\n\nclass FeedForward(nn.Module):\n    def __init__(\n            self,\n            dim: int,\n            hidden_dim: int,\n            multiple_of: int,\n            ffn_dim_multiplier: Optional[float],\n    ):\n        super().__init__()\n        if ffn_dim_multiplier is not None:\n            hidden_dim = int(ffn_dim_multiplier * hidden_dim)\n        hidden_dim = multiple_of * ((hidden_dim + multiple_of - 1) // multiple_of)\n\n        self.w1 = nn.Linear(\n            dim, hidden_dim\n        )\n        self.w2 = nn.Linear(\n            hidden_dim, dim\n        )\n\n    def forward(self, x):\n        return self.w2(F.silu(self.w1(x)))\n\n\nclass TransformerBlock(nn.Module):\n    def __init__(self, encoder_dim, encoder_n_heads, max_seq_len):\n        super().__init__()\n        self.encoder_n_heads = encoder_n_heads\n        self.encoder_dim = encoder_dim\n        self.head_dim = encoder_dim // encoder_n_heads\n        self.attention = Attention(encoder_dim, encoder_n_heads, max_seq_len)\n        self.feed_forward = FeedForward(\n            dim=encoder_dim,\n            hidden_dim=2 * encoder_dim,\n            multiple_of=256,\n            ffn_dim_multiplier=None,\n        )\n        self.attention_norm = AdaLNZero(encoder_dim)\n        self.ffn_norm = nn.LayerNorm(encoder_dim, elementwise_affine=False, eps=1e-6)\n\n    def forward(\n            self,\n            x: torch.Tensor,\n            t: torch.Tensor,\n            start_pos: int,\n            freqs_cis: torch.Tensor,\n            mask: Optional[torch.Tensor],\n    ):\n        \"\"\"\n        Perform a forward pass through the TransformerBlock.\n\n        Args:\n            x (torch.Tensor): Input tensor.\n            start_pos (int): Starting position for attention caching.\n            freqs_cis (torch.Tensor): Precomputed cosine and sine frequencies.\n            mask (torch.Tensor, optional): Masking tensor for attention. Defaults to None.\n\n        Returns:\n            torch.Tensor: Output tensor after applying attention and feedforward layers.\n\n        \"\"\"\n        # pre-norm & modulation for attention input\n        norm, gate_msa, shift_mlp, scale_mlp, gate_mlp = self.attention_norm(x, emb=t)\n\n        # attention\n        attn_output = self.attention(norm, start_pos, freqs_cis, mask=mask)\n\n        # process attention output for input x\n        h = x + gate_msa.unsqueeze(1) * attn_output\n\n        norm = self.ffn_norm(h) * (1 + scale_mlp[:, None]) + shift_mlp[:, None]\n        ff_output = self.feed_forward(norm)\n        out = h + gate_mlp.unsqueeze(1) * ff_output\n\n        return out\n\n\nclass Transformer(nn.Module):\n    def __init__(self, encoder_n_layers, encoder_dim, encoder_n_heads, max_seq_len):\n        super().__init__()\n        # Decoder\n        self.layers = torch.nn.ModuleList()\n        for _ in range(encoder_n_layers):\n            self.layers.append(TransformerBlock(encoder_dim, encoder_n_heads, max_seq_len))\n\n        self.norm = AdaLNZero_Out(encoder_dim)\n        self.out_proj = nn.Linear(encoder_dim, encoder_dim)\n\n        # Rope embedding\n        freqs_cis = precompute_freqs_cis(\n            encoder_dim // encoder_n_heads, max_seq_len\n        )\n        self.register_buffer(\"freqs_cis\", torch.view_as_real(freqs_cis), persistent=False)\n    \n    def forward(self, x, t, attn_mask, start_pos=0):\n        freqs_cis = torch.view_as_complex(self.freqs_cis.float())[start_pos: start_pos + x.size(1)]\n        for i, layer in enumerate(self.layers):\n            x = layer(x, t, start_pos, freqs_cis, attn_mask)\n        x = self.norm(x, t)\n        x = self.out_proj(x)\n        return x"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/wavvae/decoder/diag_gaussian.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport torch\nimport numpy as np\n\nclass DiagonalGaussianDistribution(object):\n    def __init__(self, parameters: torch.Tensor, deterministic: bool = False):\n        self.parameters = parameters\n        self.mean, self.logvar = torch.chunk(parameters, 2, dim=1)\n        self.logvar = torch.clamp(self.logvar, -30.0, 20.0)\n        self.deterministic = deterministic\n        self.std = torch.exp(0.5 * self.logvar)\n        self.var = torch.exp(self.logvar)\n        if self.deterministic:\n            self.var = self.std = torch.zeros_like(\n                self.mean, device=self.parameters.device, dtype=self.parameters.dtype\n            )\n\n    def sample(self, generator=None) -> torch.Tensor:\n        # make sure sample is on the same device as the parameters and has same dtype\n        sample = torch.randn(\n            self.mean.shape,\n            generator=generator,\n            device=self.parameters.device,\n            dtype=self.parameters.dtype,\n        )\n        x = self.mean + self.std * sample\n        return x\n\n    def kl(self, other: \"DiagonalGaussianDistribution\" = None) -> torch.Tensor:\n        if self.deterministic:\n            return torch.Tensor([0.0])\n        else:\n            if other is None:\n                return 0.5 * torch.pow(self.mean, 2) + self.var - 1.0 - self.logvar\n            else:\n                return 0.5 * (\n                    torch.pow(self.mean - other.mean, 2) / other.var\n                    + self.var / other.var\n                    - 1.0\n                    - self.logvar\n                    + other.logvar\n                )\n\n    def nll(self, sample, dims) -> torch.Tensor:\n        if self.deterministic:\n            return torch.Tensor([0.0])\n        logtwopi = np.log(2.0 * np.pi)\n        return 0.5 * torch.sum(\n            logtwopi + self.logvar + torch.pow(sample - self.mean, 2) / self.var,\n            dim=dims,\n        )\n\n    def mode(self) -> torch.Tensor:\n        return self.mean"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/wavvae/decoder/hifigan_modules.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch\nimport torch.utils.data\nfrom librosa.filters import mel as librosa_mel_fn\nfrom torch.nn.utils import weight_norm, remove_weight_norm\nfrom torch.nn import Conv1d\nimport numpy as np\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size*dilation - dilation)/2)\n\n\nclass Upsample(nn.Module):\n    def __init__(self, mult, r):\n        super(Upsample, self).__init__()\n        self.r = r\n        self.upsample = nn.Sequential(nn.Upsample(mode=\"nearest\", scale_factor=r),\n                                      nn.LeakyReLU(0.2),\n                                      nn.ReflectionPad1d(3),\n                                      nn.utils.weight_norm(nn.Conv1d(mult, mult // 2, kernel_size=7, stride=1))\n                                      )\n        r_kernel = r if r >= 5 else 5\n        self.trans_upsample = nn.Sequential(nn.LeakyReLU(0.2),\n                                            nn.utils.weight_norm(nn.ConvTranspose1d(mult, mult // 2,\n                                                                                    kernel_size=r_kernel * 2, stride=r,\n                                                                                    padding=r_kernel - r // 2,\n                                                                                    output_padding=r % 2)\n                                                                 ))\n\n    def forward(self, x):\n        x = torch.sin(x) + x\n        out1 = self.upsample(x)\n        out2 = self.trans_upsample(x)\n        return out1 + out2\n\n\nclass Downsample(nn.Module):\n    def __init__(self, mult, r):\n        super(Downsample, self).__init__()\n        self.r = r\n        r_kernel = r if r >= 5 else 5\n        self.trans_downsample = nn.Sequential(nn.LeakyReLU(0.2),\n                                              nn.utils.weight_norm(nn.Conv1d(mult, mult * 2,\n                                                                             kernel_size=r_kernel * 2, stride=r,\n                                                                             padding=r_kernel - r // 2)\n                                                                   ))\n\n    def forward(self, x):\n        out = self.trans_downsample(x)\n        return out\n\n\ndef weights_init(m):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(0.0, 0.02)\n    elif classname.find(\"BatchNorm2d\") != -1:\n        m.weight.data.normal_(1.0, 0.02)\n        m.bias.data.fill_(0)\n\n\ndef weights_zero_init(m):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.fill_(0.0)\n        m.bias.data.fill_(0.0)\n\n\ndef WNConv1d(*args, **kwargs):\n    return weight_norm(nn.Conv1d(*args, **kwargs))\n\n\ndef WNConvTranspose1d(*args, **kwargs):\n    return weight_norm(nn.ConvTranspose1d(*args, **kwargs))\n\n\nclass Audio2Mel(nn.Module):\n    def __init__(\n            self,\n            hop_length=300,\n            sampling_rate=24000,\n            n_mel_channels=80,\n            mel_fmin=0.,\n            mel_fmax=None,\n            frame_size=0.05,\n            device='cpu'\n    ):\n        super().__init__()\n        ##############################################\n        # FFT Parameters                              #\n        ##############################################\n\n        self.n_fft = int(np.power(2., np.ceil(np.log(sampling_rate * frame_size) / np.log(2))))\n        window = torch.hann_window(int(sampling_rate * frame_size)).float()\n        mel_basis = librosa_mel_fn(\n            sampling_rate, self.n_fft, n_mel_channels, mel_fmin, mel_fmax\n        )  # Mel filter (by librosa)\n        mel_basis = torch.from_numpy(mel_basis).float()\n        self.register_buffer(\"mel_basis\", mel_basis)\n        self.register_buffer(\"window\", window)\n\n        self.hop_length = hop_length\n        self.win_length = int(sampling_rate * frame_size)\n        self.sampling_rate = sampling_rate\n        self.n_mel_channels = n_mel_channels\n\n    def forward(self, audio):\n        fft = torch.stft(\n            audio.squeeze(1),\n            n_fft=self.n_fft,\n            hop_length=self.hop_length,\n            win_length=self.win_length,\n            window=self.window,\n            center=True,\n        )\n        real_part, imag_part = fft.unbind(-1)\n        magnitude = torch.sqrt(torch.clamp(real_part ** 2 + imag_part ** 2, min=1e-5))\n        mel_output = torch.matmul(self.mel_basis, magnitude)\n\n        log_mel_spec = 20 * torch.log10(torch.clamp(mel_output, min=1e-5)) - 20\n        norm_mel = (log_mel_spec + 115.) / 115.\n        mel_comp = torch.clamp(norm_mel * 8. - 4., -4., 4.)\n\n        return mel_comp\n\n\nclass ResnetBlock(nn.Module):\n    def __init__(self, dim, dilation=1, dim_in=None):\n        super().__init__()\n        if dim_in is None:\n            dim_in = dim\n\n        self.block = nn.Sequential(\n            nn.LeakyReLU(0.2),\n            nn.ReflectionPad1d(dilation),\n            WNConv1d(dim_in, dim, kernel_size=3, dilation=dilation),\n            nn.LeakyReLU(0.2),\n            WNConv1d(dim, dim, kernel_size=1),\n        )\n        self.shortcut = WNConv1d(dim_in, dim, kernel_size=1)\n\n    def forward(self, x):\n        return self.shortcut(x) + self.block(x)\n\n\n'''\n参照hifigan（https://arxiv.org/pdf/2010.05646.pdf）v2结构\n多尺度主要是kernel_size不同，3组并行卷积模块，每个卷积模块内部采用不同的串行dilation size，且中间交叉正常无dilation卷积层\n'''\n\n\nclass ResBlockMRFV2(torch.nn.Module):\n    def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)):\n        super(ResBlockMRFV2, self).__init__()\n        self.convs1 = nn.ModuleList([\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0],\n                               padding=get_padding(kernel_size, dilation[0]))),\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1],\n                               padding=get_padding(kernel_size, dilation[1]))),\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[2],\n                               padding=get_padding(kernel_size, dilation[2])))\n        ])\n        self.convs1.apply(init_weights)\n\n        self.convs2 = nn.ModuleList([\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,\n                               padding=get_padding(kernel_size, 1))),\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,\n                               padding=get_padding(kernel_size, 1))),\n            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,\n                               padding=get_padding(kernel_size, 1)))\n        ])\n        self.convs2.apply(init_weights)\n\n    def forward(self, x):\n        for c1, c2 in zip(self.convs1, self.convs2):\n            xt = F.leaky_relu(x, 0.2)\n            xt = c1(xt)\n            xt = F.leaky_relu(xt, 0.2)\n            xt = c2(xt)\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n\nclass ResBlockMRFV2Inter(torch.nn.Module):\n    def __init__(self, channels, kernel_size=3):\n        super(ResBlockMRFV2Inter, self).__init__()\n        self.block1 = ResBlockMRFV2(channels)\n        self.block2 = ResBlockMRFV2(channels, 7)\n        self.block3 = ResBlockMRFV2(channels, 11)\n\n    def forward(self, x):\n        xs = self.block1(x)\n        xs += self.block2(x)\n        xs += self.block3(x)\n        x = xs / 3\n        return x\n\n\nclass Generator(nn.Module):\n    def __init__(self, input_size_, ngf, n_residual_layers, num_band, args, ratios=[5, 5, 4, 3], onnx_export=False,\n                 device='cpu'):\n        super().__init__()\n        self.hop_length = args.frame_shift\n        self.args = args\n        self.onnx_export = onnx_export\n\n        # ------------- Define upsample layers ----------------\n        mult = int(2 ** len(ratios))\n        model_up = []\n        input_size = input_size_\n        model_up += [\n            nn.ReflectionPad1d(3),\n            WNConv1d(input_size, mult * ngf, kernel_size=7, padding=0),\n        ]\n\n        # Upsample to raw audio scale\n        for i, r in enumerate(ratios):\n            model_up += [Upsample(mult * ngf, r)]\n            model_up += [ResBlockMRFV2Inter(mult * ngf // 2)]\n            mult //= 2\n\n        model_up += [\n            nn.LeakyReLU(0.2),\n            nn.ReflectionPad1d(3),\n            WNConv1d(ngf, num_band, kernel_size=7, padding=0),\n            nn.Tanh(),\n        ]\n        if not args.use_tanh:\n            model_up[-1] = nn.Conv1d(num_band, num_band, 1)\n        model_up[-2].apply(weights_zero_init)\n\n        self.model_up = nn.Sequential(*model_up)\n\n        self.apply(weights_init)\n\n    def forward(self, mel, step=None):\n        # mel input: (batch_size, seq_num, 80)\n        if self.onnx_export:\n            mel = mel.transpose(1, 2)\n            # on onnx, for engineering, mel input: (batch_size, 80, seq_num)\n\n        # Between Down and up\n        x = mel\n\n        # Upsample pipline\n        cnt_after_upsample = 0\n\n        for i, m in enumerate(self.model_up):\n            x = m(x)\n\n            if type(m) == Upsample:\n                cnt_after_upsample += 1\n\n        return x"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/wavvae/decoder/seanet_encoder.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom typing import List\n\nimport torch\nfrom torch import nn\nfrom tts.modules.wavvae.encoder.common_modules.seanet import SEANetEncoder\n\nclass Encoder(nn.Module):\n    def __init__(\n        self,\n        dowmsamples: List[int] = [6, 5, 5, 4, 2],\n    ):\n        super().__init__()\n\n        # breakpoint()\n        self.frame_rate = 25  # not use\n        self.encoder = SEANetEncoder(causal=False, n_residual_layers=1, norm='weight_norm', pad_mode='reflect', lstm=2,\n                                dimension=512, channels=1, n_filters=32, ratios=dowmsamples, activation='ELU',\n                                kernel_size=7, residual_kernel_size=3, last_kernel_size=7, dilation_base=2,\n                                true_skip=False, compress=2)\n\n    def forward(self, audio: torch.Tensor):\n        audio = audio.unsqueeze(1)                  # audio(16,24000)\n        emb = self.encoder(audio)\n        return emb\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/wavvae/decoder/wavvae_v3.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport argparse\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\n\nfrom tts.modules.wavvae.decoder.seanet_encoder import Encoder\nfrom tts.modules.wavvae.decoder.diag_gaussian import DiagonalGaussianDistribution\nfrom tts.modules.wavvae.decoder.hifigan_modules import Generator, Upsample\n\n\nclass WavVAE_V3(nn.Module):\n    def __init__(self, hparams=None):\n        super().__init__()\n        self.encoder = Encoder(dowmsamples=[6, 5, 4, 4, 2])\n        self.proj_to_z = nn.Linear(512, 64)\n        self.proj_to_decoder = nn.Linear(32, 320)\n\n        config_path = hparams['melgan_config']\n        args = argparse.Namespace()\n        args.__dict__.update(config_path)\n        self.latent_upsampler = Upsample(320, 4)\n        self.decoder = Generator(\n            input_size_=160, ngf=128, n_residual_layers=4,\n            num_band=1, args=args, ratios=[5,4,4,3])\n\n    ''' encode waveform into 25 hz latent representation '''\n    def encode_latent(self, audio):\n        posterior = self.encode(audio)\n        latent = posterior.sample().permute(0, 2, 1)  # (b,t,latent_channel)\n        return latent\n\n    def encode(self, audio):\n        x = self.encoder(audio).permute(0, 2, 1)\n        x = self.proj_to_z(x).permute(0, 2, 1)\n        poseterior = DiagonalGaussianDistribution(x)\n        return poseterior\n\n    def decode(self, latent):\n        latent = self.proj_to_decoder(latent).permute(0, 2, 1)\n        return self.decoder(self.latent_upsampler(latent))\n\n    def forward(self, audio):\n        posterior = self.encode(audio)\n        latent = posterior.sample().permute(0, 2, 1)  # (b, t, latent_channel)\n        recon_wav = self.decode(latent)\n        return recon_wav, posterior"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/wavvae/encoder/common_modules/conv.py",
    "content": "# MIT License\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\n\n# Copyright (c) [2023] [Meta Platforms, Inc. and affiliates.] \n# Copyright (c) [2025] [Ziyue Jiang] \n# SPDX-License-Identifier: MIT\n# This file has been modified by Ziyue Jiang on 2025/03/19\n# Original file was released under MIT, with the full license text # available at https://github.com/facebookresearch/encodec/blob/gh-pages/LICENSE.\n# This modified file is released under the same license.\n\n\"\"\"Convolutional layers wrappers and utilities.\"\"\"\n\nimport math\nimport typing as tp\nimport warnings\nimport einops\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nfrom torch.nn.utils import spectral_norm, weight_norm\n\n\nCONV_NORMALIZATIONS = frozenset(['none', 'weight_norm', 'spectral_norm',\n                                 'time_layer_norm', 'layer_norm', 'time_group_norm'])\n\n\ndef apply_parametrization_norm(module: nn.Module, norm: str = 'none') -> nn.Module:\n    assert norm in CONV_NORMALIZATIONS\n    if norm == 'weight_norm':\n        return weight_norm(module)\n    elif norm == 'spectral_norm':\n        return spectral_norm(module)\n    else:\n        return module\n\n\ndef get_norm_module(module: nn.Module, causal: bool = False, norm: str = 'none', **norm_kwargs) -> nn.Module:\n    assert norm in CONV_NORMALIZATIONS\n    if norm == 'layer_norm':\n        assert isinstance(module, nn.modules.conv._ConvNd)\n        return ConvLayerNorm(module.out_channels, **norm_kwargs)\n    elif norm == 'time_group_norm':\n        if causal:\n            raise ValueError(\"GroupNorm doesn't support causal evaluation.\")\n        assert isinstance(module, nn.modules.conv._ConvNd)\n        return nn.GroupNorm(1, module.out_channels, **norm_kwargs)\n    else:\n        return nn.Identity()\n\n\ndef get_extra_padding_for_conv1d(x: torch.Tensor, kernel_size: int, stride: int,\n                                 padding_total: int = 0) -> int:\n    length = x.shape[-1]\n    n_frames = (length - kernel_size + padding_total) / stride + 1\n    ideal_length = (math.ceil(n_frames) - 1) * stride + (kernel_size - padding_total)\n    return ideal_length - length\n\n\ndef pad1d(x: torch.Tensor, paddings: tp.Tuple[int, int], mode: str = 'zero', value: float = 0.):\n    length = x.shape[-1]\n    padding_left, padding_right = paddings\n    assert padding_left >= 0 and padding_right >= 0, (padding_left, padding_right)\n    if mode == 'reflect':\n        max_pad = max(padding_left, padding_right)\n        extra_pad = 0\n        if length <= max_pad:\n            extra_pad = max_pad - length + 1\n            x = F.pad(x, (0, extra_pad))\n        padded = F.pad(x, paddings, mode, value)\n        end = padded.shape[-1] - extra_pad\n        return padded[..., :end]\n    else:\n        return F.pad(x, paddings, mode, value)\n\n\nclass ConvLayerNorm(nn.LayerNorm):\n    def __init__(self, normalized_shape: tp.Union[int, tp.List[int], torch.Size], **kwargs):\n        super().__init__(normalized_shape, **kwargs)\n\n    def forward(self, x):\n        x = einops.rearrange(x, 'b ... t -> b t ...')\n        x = super().forward(x)\n        x = einops.rearrange(x, 'b t ... -> b ... t')\n        return\n\n\nclass NormConv1d(nn.Module):\n    def __init__(self, *args, causal: bool = False, norm: str = 'none',\n                 norm_kwargs: tp.Dict[str, tp.Any] = {}, **kwargs):\n        super().__init__()\n        self.conv = apply_parametrization_norm(nn.Conv1d(*args, **kwargs), norm)\n        self.norm = get_norm_module(self.conv, causal, norm, **norm_kwargs)\n        self.norm_type = norm\n\n    def forward(self, x):\n        x = self.conv(x)\n        x = self.norm(x)\n        return x\n\n\nclass SConv1d(nn.Module):\n    def __init__(self, in_channels: int, out_channels: int,\n                 kernel_size: int, stride: int = 1, dilation: int = 1,\n                 groups: int = 1, bias: bool = True, causal: bool = False,\n                 norm: str = 'none', norm_kwargs: tp.Dict[str, tp.Any] = {},\n                 pad_mode: str = 'reflect'):\n        super().__init__()\n        # warn user on unusual setup between dilation and stride\n        if stride > 1 and dilation > 1:\n            warnings.warn('SConv1d has been initialized with stride > 1 and dilation > 1'\n                          f' (kernel_size={kernel_size} stride={stride}, dilation={dilation}).')\n        self.conv = NormConv1d(in_channels, out_channels, kernel_size, stride,\n                               dilation=dilation, groups=groups, bias=bias, causal=causal,\n                               norm=norm, norm_kwargs=norm_kwargs)\n        self.causal = causal\n        self.pad_mode = pad_mode\n\n    def forward(self, x):\n        B, C, T = x.shape\n        kernel_size = self.conv.conv.kernel_size[0]\n        stride = self.conv.conv.stride[0]\n        dilation = self.conv.conv.dilation[0]\n        kernel_size = (kernel_size - 1) * dilation + 1  # effective kernel size with dilations\n        padding_total = kernel_size - stride\n        extra_padding = get_extra_padding_for_conv1d(x, kernel_size, stride, padding_total)\n        if self.causal:\n            # Left padding for causal\n            x = pad1d(x, (padding_total, extra_padding), mode=self.pad_mode)\n        else:\n            # Asymmetric padding required for odd strides\n            padding_right = padding_total // 2\n            padding_left = padding_total - padding_right\n            x = pad1d(x, (padding_left, padding_right + extra_padding), mode=self.pad_mode)\n        return self.conv(x)"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/wavvae/encoder/common_modules/lstm.py",
    "content": "# MIT License\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\n\n# Copyright (c) [2023] [Meta Platforms, Inc. and affiliates.] \n# Copyright (c) [2025] [Ziyue Jiang] \n# SPDX-License-Identifier: MIT\n# This file has been modified by Ziyue Jiang on 2025/03/19\n# Original file was released under MIT, with the full license text # available at https://github.com/facebookresearch/encodec/blob/gh-pages/LICENSE.\n# This modified file is released under the same license.\n\n\"\"\"LSTM layers module.\"\"\"\nfrom torch import nn\n\n\nclass SLSTM(nn.Module):\n    \"\"\"\n    LSTM without worrying about the hidden state, nor the layout of the data.\n    Expects input as convolutional layout.\n    \"\"\"\n    def __init__(self, dimension: int, num_layers: int = 2, skip: bool = True):\n        super().__init__()\n        self.skip = skip\n        self.lstm = nn.LSTM(dimension, dimension, num_layers)\n\n    # 修改transpose顺序\n    def forward(self, x):\n        x1 = x.permute(2, 0, 1)\n        y, _ = self.lstm(x1)\n        y = y.permute(1, 2, 0)\n        if self.skip:\n            y = y + x\n        return y\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/modules/wavvae/encoder/common_modules/seanet.py",
    "content": "# MIT License\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\n\n# Copyright (c) [2023] [Meta Platforms, Inc. and affiliates.] \n# Copyright (c) [2025] [Ziyue Jiang] \n# SPDX-License-Identifier: MIT\n# This file has been modified by Ziyue Jiang on 2025/03/19\n# Original file was released under MIT, with the full license text # available at https://github.com/facebookresearch/encodec/blob/gh-pages/LICENSE.\n# This modified file is released under the same license.\n\n\"\"\"Encodec SEANet-based encoder and decoder implementation.\"\"\"\n\nimport typing as tp\n\nimport numpy as np\nimport torch.nn as nn\n\nfrom .conv import SConv1d\nfrom .lstm import SLSTM\n\n\nclass SEANetResnetBlock(nn.Module):\n    def __init__(self, dim: int, kernel_sizes: tp.List[int] = [3, 1], dilations: tp.List[int] = [1, 1],\n                 activation: str = 'ELU', activation_params: dict = {'alpha': 1.0},\n                 norm: str = 'weight_norm', norm_params: tp.Dict[str, tp.Any] = {}, causal: bool = False,\n                 pad_mode: str = 'reflect', compress: int = 2, true_skip: bool = True):\n        super().__init__()\n        assert len(kernel_sizes) == len(dilations), 'Number of kernel sizes should match number of dilations'\n        act = getattr(nn, activation)\n        hidden = dim // compress\n        block = []\n        for i, (kernel_size, dilation) in enumerate(zip(kernel_sizes, dilations)):\n            in_chs = dim if i == 0 else hidden\n            out_chs = dim if i == len(kernel_sizes) - 1 else hidden\n            block += [\n                act(**activation_params),\n                SConv1d(in_chs, out_chs, kernel_size=kernel_size, dilation=dilation,\n                        norm=norm, norm_kwargs=norm_params,\n                        causal=causal, pad_mode=pad_mode),\n            ]\n        self.block = nn.Sequential(*block)\n        self.shortcut: nn.Module\n        if true_skip:\n            self.shortcut = nn.Identity()\n        else:\n            self.shortcut = SConv1d(dim, dim, kernel_size=1, norm=norm, norm_kwargs=norm_params,\n                                    causal=causal, pad_mode=pad_mode)\n\n    def forward(self, x):\n        return self.shortcut(x) + self.block(x)\n\n\nclass SEANetEncoder(nn.Module):\n    def __init__(self, channels: int = 1, dimension: int = 128, n_filters: int = 32, n_residual_layers: int = 1,\n                 ratios: tp.List[int] = [8, 5, 4, 2], activation: str = 'ELU', activation_params: dict = {'alpha': 1.0},\n                 norm: str = 'weight_norm', norm_params: tp.Dict[str, tp.Any] = {}, kernel_size: int = 7,\n                 last_kernel_size: int = 7, residual_kernel_size: int = 3, dilation_base: int = 2, causal: bool = False,\n                 pad_mode: str = 'reflect', true_skip: bool = False, compress: int = 2, lstm: int = 2):\n        super().__init__()\n        self.channels = channels\n        self.dimension = dimension\n        self.n_filters = n_filters\n        self.ratios = list(reversed(ratios))\n        del ratios\n        self.n_residual_layers = n_residual_layers\n        self.hop_length = np.prod(self.ratios)\n\n        act = getattr(nn, activation)\n        mult = 1\n        model: tp.List[nn.Module] = [\n            SConv1d(channels, mult * n_filters, kernel_size, norm=norm, norm_kwargs=norm_params,\n                    causal=causal, pad_mode=pad_mode)\n        ]\n        # Downsample to raw audio scale\n        for i, ratio in enumerate(self.ratios):\n            # Add residual layers\n            for j in range(n_residual_layers):\n                model += [\n                    SEANetResnetBlock(mult * n_filters, kernel_sizes=[residual_kernel_size, 1],\n                                      dilations=[dilation_base ** j, 1],\n                                      norm=norm, norm_params=norm_params,\n                                      activation=activation, activation_params=activation_params,\n                                      causal=causal, pad_mode=pad_mode, compress=compress, true_skip=true_skip)]\n\n            # Add downsampling layers\n            model += [\n                act(**activation_params),\n                SConv1d(mult * n_filters, mult * n_filters * 2,\n                        kernel_size=ratio * 2, stride=ratio,\n                        norm=norm, norm_kwargs=norm_params,\n                        causal=causal, pad_mode=pad_mode),\n            ]\n            mult *= 2\n\n        if lstm:\n            model += [SLSTM(mult * n_filters, num_layers=lstm)]\n\n        model += [\n            act(**activation_params),\n            SConv1d(mult * n_filters, dimension, last_kernel_size, norm=norm, norm_kwargs=norm_params,\n                    causal=causal, pad_mode=pad_mode)\n        ]\n\n        self.model = nn.Sequential(*model)\n\n    def forward(self, x):\n        return self.model(x)"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/utils/audio_utils/align.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport torch\n\ndef mel2token_to_dur(mel2token, T_txt=None, max_dur=None):\n    is_torch = isinstance(mel2token, torch.Tensor)\n    has_batch_dim = True\n    if not is_torch:\n        mel2token = torch.LongTensor(mel2token)\n    if T_txt is None:\n        T_txt = mel2token.max()\n    if len(mel2token.shape) == 1:\n        mel2token = mel2token[None, ...]\n        has_batch_dim = False\n    B, _ = mel2token.shape\n    dur = mel2token.new_zeros(B, T_txt + 1).scatter_add(1, mel2token, torch.ones_like(mel2token))\n    dur = dur[:, 1:]\n    if max_dur is not None:\n        dur = dur.clamp(max=max_dur)\n    if not is_torch:\n        dur = dur.numpy()\n    if not has_batch_dim:\n        dur = dur[0]\n    return dur\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/utils/audio_utils/io.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport io\nimport os\nimport subprocess\n\nimport numpy as np\nfrom scipy.io import wavfile\nimport pyloudnorm as pyln\nfrom pydub import AudioSegment\n\n\ndef to_wav_bytes(wav, sr, norm=False):\n    wav = wav.astype(float)\n    if norm:\n        meter = pyln.Meter(sr)  # create BS.1770 meter\n        loudness = meter.integrated_loudness(wav)\n        wav = pyln.normalize.loudness(wav, loudness, -18.0)\n        if np.abs(wav).max() >= 1:\n            wav = wav / np.abs(wav).max() * 0.95\n    wav = wav * 32767\n    bytes_io = io.BytesIO()\n    wavfile.write(bytes_io, sr, wav.astype(np.int16))\n    return bytes_io.getvalue()\n\n\ndef save_wav(wav_bytes, path):\n    with open(path[:-4] + '.wav', 'wb') as file:\n        file.write(wav_bytes)\n    if path[-4:] == '.mp3':\n        to_mp3(path[:-4])\n\n\ndef to_mp3(out_path):\n    if out_path[-4:] == '.wav':\n        out_path = out_path[:-4]\n    subprocess.check_call(\n        f'ffmpeg -threads 1 -loglevel error -i \"{out_path}.wav\" -vn -b:a 192k -y -hide_banner -async 1 \"{out_path}.mp3\"',\n        shell=True, stdin=subprocess.PIPE)\n    subprocess.check_call(f'rm -f \"{out_path}.wav\"', shell=True)\n\n\ndef convert_to_wav(wav_path):\n    # Check if the file exists\n    if not os.path.exists(wav_path):\n        print(f\"The file '{wav_path}' does not exist.\")\n        return\n\n    # Check if the file already has a .wav extension\n    if not wav_path.endswith(\".wav\"):\n        # Define the output path with a .wav extension\n        out_path = os.path.splitext(wav_path)[0] + \".wav\"\n\n        # Load the audio file using pydub and convert it to WAV\n        audio = AudioSegment.from_file(wav_path)\n        audio.export(out_path, format=\"wav\")\n\n        print(f\"Converted '{wav_path}' to '{out_path}'\")\n\n\ndef convert_to_wav_bytes(audio_binary):\n    # Load the audio binary using pydub and convert it to WAV\n    audio = AudioSegment.from_file(io.BytesIO(audio_binary))\n    wav_bytes = io.BytesIO()\n    audio.export(wav_bytes, format=\"wav\")\n    wav_bytes.seek(0)\n    return wav_bytes\n\n\n''' Smoothly combine audio segments using crossfade transitions.\" '''\ndef combine_audio_segments(segments, crossfade_duration=0.16, sr=24000):\n    window_length = int(sr * crossfade_duration)\n    hanning_window = np.hanning(2 * window_length)\n    # Combine\n    for i, segment in enumerate(segments):\n        if i == 0:\n            combined_audio = segment\n        else:\n            overlap = combined_audio[-window_length:] * hanning_window[window_length:] + segment[:window_length] * hanning_window[:window_length]\n            combined_audio = np.concatenate(\n                [combined_audio[:-window_length], overlap, segment[window_length:]]\n            )\n    return combined_audio"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/utils/audio_utils/plot.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport matplotlib\n\nmatplotlib.use('Agg')\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport torch\n\nLINE_COLORS = ['w', 'r', 'orange', 'k', 'cyan', 'm', 'b', 'lime', 'g', 'brown', 'navy']\n\n\ndef spec_to_figure(spec, vmin=None, vmax=None, title='', f0s=None, dur_info=None, figsize=(12, 6)):\n    if isinstance(spec, torch.Tensor):\n        spec = spec.cpu().numpy()\n    H = spec.shape[1] // 2\n    fig = plt.figure(figsize=figsize)\n    plt.title(title)\n    plt.pcolor(spec.T, vmin=vmin, vmax=vmax)\n\n    if dur_info is not None:\n        assert isinstance(dur_info, dict)\n        txt = dur_info['txt']\n        dur_gt = dur_info['dur_gt']\n        if isinstance(dur_gt, torch.Tensor):\n            dur_gt = dur_gt.cpu().numpy()\n        dur_gt = np.cumsum(dur_gt).astype(int)\n        for i in range(len(dur_gt)):\n            shift = (i % 8) + 1\n            plt.text(dur_gt[i], shift * 4, txt[i])\n            plt.vlines(dur_gt[i], 0, H // 2, colors='b')  # blue is gt\n        plt.xlim(0, dur_gt[-1])\n        if 'dur_pred' in dur_info:\n            dur_pred = dur_info['dur_pred']\n            if isinstance(dur_pred, torch.Tensor):\n                dur_pred = dur_pred.cpu().numpy()\n            dur_pred = np.cumsum(dur_pred).astype(int)\n            for i in range(len(dur_pred)):\n                shift = (i % 8) + 1\n                plt.text(dur_pred[i], H + shift * 4, txt[i])\n                plt.vlines(dur_pred[i], H, H * 1.5, colors='r')  # red is pred\n            plt.xlim(0, max(dur_gt[-1], dur_pred[-1]))\n    if f0s is not None:\n        ax = plt.gca()\n        ax2 = ax.twinx()\n        # ax.set_xticks()\n\n        if not isinstance(f0s, dict):\n            f0s = {'f0': f0s}\n        for i, (k, f0) in enumerate(f0s.items()):\n            if f0 is not None:\n                if isinstance(f0, torch.Tensor):\n                    f0 = f0.cpu().numpy()\n                ax2.plot(\n                    np.arange(len(f0)) + 0.5, f0, label=k, c=LINE_COLORS[i], linewidth=1, alpha=0.5)\n        ax2.set_ylim(0, 1000)\n        ax2.legend()\n    return fig\n\n\ndef align_to_figure(align, dur_info):\n    if isinstance(align, torch.Tensor):\n        align = align.cpu().numpy()\n    H = align.shape[1]\n    fig = plt.figure(figsize=(12, 6))\n    plt.pcolor(align.T, vmin=0, vmax=1)\n    if dur_info is not None:\n        assert isinstance(dur_info, dict)\n        txt = dur_info['txt']\n        dur_gt = dur_info['dur_gt']\n        if isinstance(dur_gt, torch.Tensor):\n            dur_gt = dur_gt.cpu().numpy()\n        dur_gt = np.cumsum(dur_gt).astype(int) // 2\n        for i in range(len(dur_gt)):\n            plt.text(dur_gt[i], i, txt[i], color='red')\n            plt.vlines(dur_gt[i], 0, H, colors='b')  # blue is gt\n        # plt.xlim(0, dur_gt[-1])\n    return fig\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/utils/commons/ckpt_utils.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport contextlib\nimport glob\nimport os\nimport re\nimport subprocess\nimport traceback\n\nimport torch\nfrom torch.nn.parallel import DistributedDataParallel\nimport torch.distributed as dist\n\n\n@contextlib.contextmanager\ndef dist_load(path):\n    if not dist.is_initialized() or dist.get_world_size() == 1 or os.path.realpath(path).startswith('/dev/shm'):\n        yield path\n    else:\n        from tts.utils.commons.hparams import hparams\n        from tts.utils.commons.trainer import LOCAL_RANK\n        tmpdir = '/dev/shm'\n        assert len(os.path.basename(path)) > 0\n        shm_ckpt_path = f'{tmpdir}/{hparams[\"exp_name\"]}/{os.path.basename(path)}'\n        if LOCAL_RANK == 0:\n            subprocess.check_call(\n                f'mkdir -p {os.path.dirname(shm_ckpt_path)}; '\n                f'cp -Lr {path} {shm_ckpt_path}', shell=True)\n        dist.barrier()\n        yield shm_ckpt_path\n        dist.barrier()\n        if LOCAL_RANK == 0:\n            subprocess.check_call(f'rm -rf {shm_ckpt_path}', shell=True)\n\n\ndef torch_load_dist(path, map_location='cpu'):\n    with dist_load(path) as tmp_path:\n        checkpoint = torch.load(tmp_path, map_location=map_location)\n    return checkpoint\n\n\ndef get_last_checkpoint(work_dir, steps=None):\n    checkpoint = None\n    last_ckpt_path = None\n    ckpt_paths = get_all_ckpts(work_dir, steps)\n    if len(ckpt_paths) > 0:\n        last_ckpt_path = ckpt_paths[0]\n        checkpoint = torch_load_dist(last_ckpt_path, map_location='cpu')\n    return checkpoint, last_ckpt_path\n\n\ndef get_all_ckpts(work_dir, steps=None):\n    if steps is None or steps == 0:\n        ckpt_path_pattern = f'{work_dir}/model_ckpt_steps_*.ckpt'\n    else:\n        ckpt_path_pattern = f'{work_dir}/model_ckpt_steps_{steps}.ckpt'\n    return sorted(glob.glob(ckpt_path_pattern),\n                  key=lambda x: -int(re.findall('.*steps\\_(\\d+)\\.ckpt', x)[0]))\n\n\ndef load_ckpt(cur_model, ckpt_base_dir, model_name='model', force=True, strict=True,\n              silent=False, load_opt=False, opts=None, steps=None, checkpoint=None, ckpt_path='', delete_unmatch=True):\n    if checkpoint is None:\n        if os.path.isfile(ckpt_base_dir):\n            base_dir = os.path.dirname(ckpt_base_dir)\n            ckpt_path = ckpt_base_dir\n            checkpoint = torch_load_dist(ckpt_base_dir, map_location='cpu')\n        else:\n            base_dir = ckpt_base_dir\n            if load_opt:\n                checkpoint, ckpt_path = get_last_checkpoint(ckpt_base_dir, steps)\n            else:\n                ckpt_path = f'{ckpt_base_dir}/model_only_last.ckpt'\n                if os.path.exists(ckpt_path):\n                    checkpoint = torch_load_dist(ckpt_path, map_location='cpu')\n                else:\n                    checkpoint, ckpt_path = get_last_checkpoint(ckpt_base_dir, steps)\n    if checkpoint is not None:\n        state_dict_all = {\n            k.replace('module.', '').replace('_orig_mod.', ''): v for k, v in checkpoint[\"state_dict\"].items()}\n        if not isinstance(cur_model, list):\n            cur_models = [cur_model]\n            model_names = [model_name]\n        else:\n            cur_models = cur_model\n            model_names = model_name\n        for model_name, cur_model in zip(model_names, cur_models):\n            if isinstance(cur_model, DistributedDataParallel):\n                cur_model = cur_model.module\n            device = next(cur_model.parameters()).device\n            if '.' not in model_name:\n                state_dict = state_dict_all[model_name]\n            else:\n                base_model_name = model_name.split('.')[0]\n                rest_model_name = model_name[len(base_model_name) + 1:]\n                state_dict = {\n                    k[len(rest_model_name) + 1:]: v for k, v in state_dict_all[base_model_name].items()\n                    if k.startswith(f'{rest_model_name}.')}\n            state_dict = {k.replace('module.', '').replace('_orig_mod.', ''): v for k, v in state_dict.items()}\n            if not strict and delete_unmatch:\n                try:\n                    cur_model.load_state_dict(state_dict, strict=True)\n                    if not silent:\n                        print(f\"| loaded '{model_name}' from '{ckpt_path}' with strict=True.\")\n                except Exception:\n                    cur_model_state_dict = cur_model.state_dict()\n                    cur_model_state_dict = {k.replace('module.', '').replace('_orig_mod.', ''): v for k, v in\n                                            cur_model_state_dict.items()}\n                    unmatched_keys = []\n                    for key, param in state_dict.items():\n                        if key in cur_model_state_dict:\n                            new_param = cur_model_state_dict[key]\n                            if new_param.shape != param.shape:\n                                unmatched_keys.append(key)\n                                print(\"| Unmatched keys: \", key, \"cur model: \", new_param.shape,\n                                        \"ckpt model: \", param.shape)\n                    for key in unmatched_keys:\n                        del state_dict[key]\n            load_results = cur_model.load_state_dict(state_dict, strict=strict)\n            cur_model.to(device)\n            if not silent:\n                print(f\"| loaded '{model_name}' from '{ckpt_path}'.\")\n                missing_keys, unexpected_keys = load_results.missing_keys, load_results.unexpected_keys\n                print(f\"| Missing keys: {len(missing_keys)}, Unexpected keys: {len(unexpected_keys)}\")\n        if load_opt:\n            optimizer_states = checkpoint['optimizer_states']\n            assert len(opts) == len(optimizer_states)\n            for optimizer, opt_state in zip(opts, optimizer_states):\n                opt_state = {k.replace('_orig_mod.', ''): v for k, v in opt_state.items()}\n                if optimizer is None:\n                    return\n                try:\n                    optimizer.load_state_dict(opt_state)\n                    for i, state in enumerate(optimizer.state.values()):\n                        for k, v in state.items():\n                            if isinstance(v, torch.Tensor):\n                                state[k] = v.to(device)\n                except ValueError:\n                    print(f\"| WARMING: optimizer {optimizer} parameters not match !!!\")\n        return checkpoint.get('global_step', 0)\n    else:\n        e_msg = f\"| ckpt not found in {base_dir}.\"\n        if force:\n            assert False, e_msg\n        else:\n            print(e_msg)\n\n\ndef load_with_size_mismatch(model, state_dict, prefix=\"\"):\n    current_model_dict = model.state_dict()\n    cm_keys = current_model_dict.keys()\n    mismatch_keys = {k.replace(prefix, \"\") for k, v in state_dict.items() if k.replace(prefix, \"\") in cm_keys and v.size() != current_model_dict[k.replace(prefix, \"\")].size()}\n    new_state_dict = {k.replace(prefix, \"\"): v for k, v in state_dict.items() if k.replace(prefix, \"\") in cm_keys and v.size() == current_model_dict[k.replace(prefix, \"\")].size()}\n    missing_keys, unexpected_keys = model.load_state_dict(new_state_dict, strict=False)\n    print(f\"| mismatch keys: \", mismatch_keys)\n    if len(missing_keys) > 0:\n        print(f\"| missing_keys in dit: {missing_keys}\")\n    if len(unexpected_keys) > 0:\n        print(f\"| unexpected_keys in dit: {unexpected_keys}\")\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/utils/commons/hparams.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport argparse\nimport json\nimport os\nimport re\n\nimport yaml\n\nglobal_print_hparams = True\nhparams = {}\n\n\nclass Args:\n    def __init__(self, **kwargs):\n        for k, v in kwargs.items():\n            self.__setattr__(k, v)\n\n\ndef override_config(old_config: dict, new_config: dict):\n    if new_config.get('__replace', False):\n        old_config.clear()\n    for k, v in new_config.items():\n        if isinstance(v, dict) and k in old_config:\n            override_config(old_config[k], new_config[k])\n        else:\n            old_config[k] = v\n\n\ndef traverse_dict(d, func, ctx):\n    for k in list(d.keys()):\n        v = d[k]\n        if isinstance(v, dict):\n            traverse_dict(v, func, ctx)\n        else:\n            d[k] = func(v, ctx)\n\n\ndef parse_config(v, context=None):\n    if context is None:\n        context = {}\n\n    if isinstance(v, str):\n        if v.startswith('^'):\n            return load_config(v[1:], [], set())\n\n        match = re.match(r\"\\${(.*)}\", v)\n        if match:\n            expression = match.group(1)\n            return eval(expression, {}, context)\n    return v\n\n\ndef remove_meta_key(d):\n    for k in list(d.keys()):\n        v = d[k]\n        if isinstance(v, dict):\n            remove_meta_key(v)\n        else:\n            if k[:2] == '__':\n                del d[k]\n\n\ndef load_config(config_fn, config_chains, loaded_configs):\n    # deep first inheritance and avoid the second visit of one node\n    if not os.path.exists(config_fn):\n        print(f\"| WARN: {config_fn} not exist.\", )\n        return {}\n    with open(config_fn) as f:\n        hparams_ = yaml.safe_load(f)\n    loaded_configs.add(config_fn)\n\n    if 'base_config' in hparams_:\n        ret_hparams = {}\n        if not isinstance(hparams_['base_config'], list):\n            hparams_['base_config'] = [hparams_['base_config']]\n        for c in hparams_['base_config']:\n            if c.startswith('.'):\n                c = f'{os.path.dirname(config_fn)}/{c}'\n                c = os.path.normpath(c)\n            if c not in loaded_configs:\n                override_config(ret_hparams, load_config(c, config_chains, loaded_configs))\n        override_config(ret_hparams, hparams_)\n    else:\n        ret_hparams = hparams_\n\n    config_chains.append(config_fn)\n    return ret_hparams\n\n\ndef set_hparams(config='', exp_name='', hparams_str='', print_hparams=True, global_hparams=True):\n    if config == '' and exp_name == '':\n        parser = argparse.ArgumentParser(description='')\n        parser.add_argument('--config', type=str, default='',\n                            help='location of the data corpus')\n        parser.add_argument('--exp_name', type=str, default='', help='exp_name')\n        parser.add_argument('-hp', '--hparams', type=str, default='',\n                            help='location of the data corpus')\n        parser.add_argument('--infer', action='store_true', help='infer')\n        parser.add_argument('--validate', action='store_true', help='validate')\n        parser.add_argument('--reset', action='store_true', help='reset hparams')\n        parser.add_argument('--remove', action='store_true', help='remove old ckpt')\n        parser.add_argument('--debug', action='store_true', help='debug')\n        parser.add_argument('--start_rank', type=int, default=-1,\n                            help='the start rank id for DDP, keep 0 when single-machine multi-GPU')\n        parser.add_argument('--world_size', type=int, default=-1,\n                            help='the total number of GPU used across all machines, keep -1 for single-machine multi-GPU')\n        parser.add_argument('--init_method', type=str, default='tcp', help='method to init ddp, use tcp or file')\n        parser.add_argument('--master_addr', type=str, default='', help='')\n        parser.add_argument('--ddp_dir', type=str, default='', help='')\n\n        args, unknown = parser.parse_known_args()\n        if print_hparams:\n            print(\"| set_hparams Unknow hparams: \", unknown)\n    else:\n        args = Args(config=config, exp_name=exp_name, hparams=hparams_str,\n                    infer=False, validate=False, reset=False, debug=False, remove=False,\n                    start_rank=-1, world_size=-1, init_method='tcp', ddp_dir='', master_addr='')\n    global hparams\n    assert args.config != '' or args.exp_name != ''\n    if args.config != '':\n        assert os.path.exists(args.config), f\"{args.config} not exists\"\n\n    saved_hparams = {}\n    args_work_dir = ''\n    if args.exp_name != '':\n        args_work_dir = f'{args.exp_name}'\n        ckpt_config_path = f'{args_work_dir}/config.yaml'\n        if os.path.exists(ckpt_config_path):\n            with open(ckpt_config_path) as f:\n                saved_hparams_ = yaml.safe_load(f)\n                if saved_hparams_ is not None:\n                    saved_hparams.update(saved_hparams_)\n    hparams_ = {}\n    config_chains = []\n    if args.config != '':\n        hparams_.update(load_config(args.config, config_chains, set()))\n        if len(config_chains) > 1 and print_hparams:\n            print('| Hparams chains: ', config_chains)\n    if not args.reset:\n        hparams_.update(saved_hparams)\n    traverse_dict(hparams_, parse_config, hparams_)\n    hparams_['work_dir'] = args_work_dir\n\n    # Support config overriding in command line. Support list type config overriding.\n    # Examples: --hparams=\"a=1,b.c=2,d=[1 1 1]\"\n    if args.hparams != \"\":\n        for new_hparam in args.hparams.split(\",\"):\n            k, v = new_hparam.split(\"=\")\n            v = v.strip(\"\\'\\\" \")\n            config_node = hparams_\n            for k_ in k.split(\".\")[:-1]:\n                config_node = config_node[k_]\n            k = k.split(\".\")[-1]\n            if k in config_node:\n                if v in ['True', 'False'] or type(config_node[k]) in [bool, list, dict]:\n                    if type(config_node[k]) == list:\n                        v = v.replace(\" \", \",\").replace('^', \"\\\"\")\n                        if '|' in v:\n                            tp = type(config_node[k][0]) if len(config_node[k]) else str\n                            config_node[k] = [tp(x) for x in v.split(\"|\") if x != '']\n                            continue\n                    config_node[k] = eval(v)\n                else:\n                    config_node[k] = type(config_node[k])(v)\n            else:\n                config_node[k] = v\n                try:\n                    config_node[k] = float(v)\n                except Exception:\n                    pass\n                try:\n                    config_node[k] = int(v)\n                except Exception:\n                    pass\n                if v.lower() in ['false', 'true']:\n                    config_node[k] = v.lower() == 'true'\n\n    if args_work_dir != '' and not args.infer:\n        os.makedirs(hparams_['work_dir'], exist_ok=True)\n\n    hparams_['infer'] = args.infer\n    hparams_['debug'] = args.debug\n    hparams_['validate'] = args.validate\n    hparams_['exp_name'] = args.exp_name\n\n    hparams_['start_rank'] = args.start_rank  # useful for multi-machine training\n    hparams_['world_size'] = args.world_size\n    hparams_['init_method'] = args.init_method\n    hparams_['ddp_dir'] = args.ddp_dir\n    hparams_['master_addr'] = args.master_addr\n\n    remove_meta_key(hparams_)\n    global global_print_hparams\n    if global_hparams:\n        hparams.clear()\n        hparams.update(hparams_)\n    if print_hparams and global_print_hparams and global_hparams:\n        print('| Hparams: ', json.dumps(hparams_, indent=2, sort_keys=True))\n        # for i, (k, v) in enumerate(sorted(hparams_.items())):\n        #     print(f\"\\033[;33;m{k}\\033[0m: {v}, \", end=\"\\n\" if i % 5 == 4 else \"\")\n        global_print_hparams = False\n    return hparams_"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/utils/text_utils/dict.json",
    "content": "{\"phone\": [\"C0a\", \"C0ai\", \"C0air\", \"C0an\", \"C0ang\", \"C0angr\", \"C0anr\", \"C0ao\", \"C0aor\", \"C0ar\", \"C0b\", \"C0c\", \"C0ch\", \"C0d\", \"C0e\", \"C0ei\", \"C0eir\", \"C0en\", \"C0eng\", \"C0engr\", \"C0enr\", \"C0er\", \"C0f\", \"C0g\", \"C0h\", \"C0i\", \"C0ia\", \"C0ian\", \"C0iang\", \"C0iangr\", \"C0ianr\", \"C0iao\", \"C0iaor\", \"C0iar\", \"C0ie\", \"C0ier\", \"C0ii\", \"C0iii\", \"C0iiir\", \"C0iir\", \"C0in\", \"C0ing\", \"C0ingr\", \"C0inr\", \"C0io\", \"C0iong\", \"C0iongr\", \"C0iou\", \"C0iour\", \"C0ir\", \"C0j\", \"C0k\", \"C0l\", \"C0m\", \"C0n\", \"C0ng\", \"C0o\", \"C0ong\", \"C0ongr\", \"C0or\", \"C0ou\", \"C0our\", \"C0p\", \"C0q\", \"C0r\", \"C0s\", \"C0sh\", \"C0t\", \"C0u\", \"C0ua\", \"C0uai\", \"C0uair\", \"C0uan\", \"C0uang\", \"C0uangr\", \"C0uanr\", \"C0uar\", \"C0uei\", \"C0ueir\", \"C0uen\", \"C0ueng\", \"C0uengr\", \"C0uenr\", \"C0uo\", \"C0uor\", \"C0ur\", \"C0v\", \"C0van\", \"C0vanr\", \"C0ve\", \"C0ver\", \"C0vn\", \"C0vnr\", \"C0vr\", \"C0x\", \"C0z\", \"C0zh\", \"C0＿\", \"E0aa\", \"E0ae\", \"E0ah\", \"E0ao\", \"E0aw\", \"E0ax\", \"E0ay\", \"E0b\", \"E0ch\", \"E0d\", \"E0dh\", \"E0eh\", \"E0ehr\", \"E0er\", \"E0ey\", \"E0f\", \"E0g\", \"E0hh\", \"E0ih\", \"E0iy\", \"E0iyr\", \"E0jh\", \"E0k\", \"E0l\", \"E0m\", \"E0n\", \"E0ng\", \"E0oh\", \"E0ow\", \"E0oy\", \"E0p\", \"E0r\", \"E0s\", \"E0sh\", \"E0t\", \"E0th\", \"E0uh\", \"E0uw\", \"E0uwr\", \"E0v\", \"E0w\", \"E0y\", \"E0z\", \"E0zh\", \"sil\", \"…\", \"、\", \"。\", \"《\", \"》\", \"【\", \"】\", \"！\", \"＂\", \"＃\", \"＄\", \"％\", \"＇\", \"＇＇\", \"（\", \"）\", \"＊\", \"，\", \"：\", \"；\", \"？\", \"＼\", \"＾\", \"＿\", \"｀\", \"｛\", \"｝\", \"～\"], \"tone\": [\"0\", \"1\", \"10\", \"11\", \"12\", \"13\", \"15\", \"17\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"], \"wordCategory\": [\"0\", \"B\", \"E\", \"M\", \"S\"], \"prosody\": [\"0\", \"1\", \"2\", \"3\", \"4\"], \"focus\": [\"0\", \"1\"], \"intonation\": [\"0\", \"1\", \"2\"], \"phraseAccent\": [\"0\", \"H-\", \"L-\"], \"boundaryTone\": [\"0\", \"H%\", \"L%\"], \"accentType\": [\"!H*\", \"0\", \"H*\", \"L*\", \"L*+H\", \"L+H*\"]}\n"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/utils/text_utils/ph_tone_convert.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport torch\nimport torch.nn.functional as F\n\ndef map_phone_to_tokendict(item, pad_bos_eos=True):\n    # Merge Chinese phone and tone (Original dict ends at 173, i.e., ph_dict_size=173). 146~173 is punctuations.\n    phone = item['txt_token'].clone()\n    merged_phone = item['txt_token'].clone()\n    tone_tmp = item['tone'].clone()\n    # In tone_dict, tone_1 is 4, tone_2 is 11, tone_3 is 12, tone_4 is 13, tone_5 is 14, tone_6 is 15\n    tone_tmp[tone_tmp==4] = 1\n    tone_tmp[tone_tmp==11] = 2\n    tone_tmp[tone_tmp==12] = 3\n    tone_tmp[tone_tmp==13] = 4\n    tone_tmp[tone_tmp==14] = 5\n    tone_tmp[tone_tmp==15] = 6\n    # Chinese phones lie in 3~100 in the phone_dict, we map them to 200~788\n    ch_phone_idx = (phone >= 3) & (phone <= 100)\n    merged_phone[ch_phone_idx] = (merged_phone[ch_phone_idx] - 3) * 6 + 200 + tone_tmp[ch_phone_idx]\n\n    if pad_bos_eos:\n        merged_phone = F.pad(merged_phone, (1, 0), mode='constant', value=798)\n        merged_phone = F.pad(merged_phone, (0, 1), mode='constant', value=799)\n    return merged_phone\n    \ndef split_ph_timestamp(ph_timestamp):\n    ''' Input: ph_timestamp, shape [T] '''\n\n    # Map the timestamp of each phone back to its original frame-level lengths\n    ph_timestamp[ph_timestamp >= 800] -= 800\n\n    ph_list = []\n    tone_list = []\n    dur_list = []\n    cur_timestamp = 0\n    for idx, item in enumerate(ph_timestamp):\n        if idx % 2 == 0:\n            # Map Chinese phones back to its original phone_dict\n            if (200 <= item <= 788):\n                ph = (item - 200 - 1) // 6 + 3\n                tone = (item - 200 - 1) % 6 + 1\n                if tone == 1:\n                    tone = 4\n                else:\n                    tone = tone + 9\n            # Set English tone to '3'\n            else:\n                ph = item\n                tone = 3\n            ph_list.append(ph)\n            tone_list.append(tone)\n        else:\n            dur_list.append((item - cur_timestamp))\n            cur_timestamp = item\n    assert len(ph_list) == len(dur_list), f\"{len(ph_list)}, {len(dur_list)}\"\n    ph_seq, tone_seq, dur_seq = torch.LongTensor(ph_list), torch.LongTensor(tone_list), torch.LongTensor(dur_list)\n    return ph_seq, tone_seq, dur_seq, ph_timestamp[-1]\n    \ndef split_ph(ph_seq):\n    ''' Input: ph_timestamp, shape [T] '''\n    ph_list = []\n    tone_list = []\n    for idx, item in enumerate(ph_seq):\n        # Map Chinese phones back to its original phone_dict\n        if (200 <= item <= 788):\n            ph = (item - 200 - 1) // 6 + 3\n            tone = (item - 200 - 1) % 6 + 1\n            if tone == 1:\n                tone = 4\n            else:\n                tone = tone + 9\n        # Set English tone to '3'\n        else:\n            ph = item\n            tone = 3\n        ph_list.append(ph)\n        tone_list.append(tone)\n        \n    assert len(ph_list) == len(tone_list)\n    ph_seq, tone_seq = torch.LongTensor(ph_list), torch.LongTensor(tone_list)\n    return ph_seq, tone_seq"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/utils/text_utils/split_text.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport re\n\ndef chunk_text_chinese(text, limit=60):\n    # 中文字符匹配\n    chinese_pattern = re.compile(r'[\\u4e00-\\u9fff]')\n    # 标点符号匹配\n    punctuation = \"，。！？；：,\\.!?;\"\n    \n    result = []  # 存储断句结果\n    current_chunk = []  # 当前片段\n    chinese_count = 0  # 中文字符计数\n\n    i = 0\n    while i < len(text):\n        char = text[i]\n        current_chunk.append(char)\n        if chinese_pattern.match(char):\n            chinese_count += 1\n        \n        if chinese_count >= limit:  # 达到限制字符数\n            # 从当前位置往前找最近的标点符号\n            for j in range(len(current_chunk) - 1, -1, -1):\n                if current_chunk[j] in punctuation:\n                    result.append(''.join(current_chunk[:j + 1]))\n                    current_chunk = current_chunk[j + 1:]\n                    chinese_count = sum(1 for c in current_chunk if chinese_pattern.match(c))\n                    break\n            else:\n                # 如果前面没有标点符号，则继续找后面的标点符号\n                for k in range(i + 1, len(text)):\n                    if text[k] in punctuation:\n                        result.append(''.join(current_chunk)+text[i+1:k+1])\n                        current_chunk = []\n                        chinese_count = 0\n                        i = k\n                        break\n        i+=1\n\n    # 添加最后剩余的部分\n    if current_chunk:\n        result.append(''.join(current_chunk))\n\n    return result\n\ndef chunk_text_english(text, max_chars=130):\n    \"\"\"\n    Splits the input text into chunks, each with a maximum number of characters.\n\n    Args:\n        text (str): The text to be split.\n        max_chars (int): The maximum number of characters per chunk.\n\n    Returns:\n        List[str]: A list of text chunks.\n    \"\"\"\n    chunks = []\n    current_chunk = \"\"\n    # Split the text into sentences based on punctuation followed by whitespace\n    sentences = re.split(r\"(?<=[;:,.!?])\\s+|(?<=[；：，。！？])\", text)\n\n    for sentence in sentences:\n        if len(current_chunk.encode(\"utf-8\")) + len(sentence.encode(\"utf-8\")) <= max_chars:\n            current_chunk += sentence + \" \" if sentence and len(sentence[-1].encode(\"utf-8\")) == 1 else sentence\n        else:\n            if current_chunk:\n                chunks.append(current_chunk.strip())\n            current_chunk = sentence + \" \" if sentence and len(sentence[-1].encode(\"utf-8\")) == 1 else sentence\n\n    if current_chunk:\n        chunks.append(current_chunk.strip())\n\n    return chunks\n\nif __name__ == '__main__':\n    print(chunk_text_chinese(\"哇塞！家人们，你们太好运了。我居然发现了一个宝藏零食大礼包，简直适合所有人的口味！有香辣的，让你舌尖跳舞；有盐焗的，咸香可口；还有五香的，香气四溢。就连怀孕的姐妹都吃得津津有味！整整三十包啊！什么手撕蟹柳、辣子鸡、嫩豆干、手撕素肉、鹌鹑蛋、小肉枣肠、猪肉腐、魔芋、魔芋丝等等，应有尽有。香辣土豆爽辣过瘾，各种素肉嚼劲十足，鹌鹑蛋营养美味，真的太多太多啦，...家人们，现在价格太划算了，赶紧下单。\"))\n    print(chunk_text_english(\"Washington CNN When President Donald Trump declared in the House Chamber this week that executives at the nation’s top automakers were “so excited” about their prospects amid his new tariff regime, it did not entirely reflect the conversation he’d held with them earlier that day.\"))"
  },
  {
    "path": "xinference/thirdparty/megatts3/tts/utils/text_utils/text_encoder.py",
    "content": "# Copyright 2025 ByteDance and/or its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport re\nimport six\nfrom six.moves import range  # pylint: disable=redefined-builtin\n\nPAD = \"<pad>\"\nEOS = \"<EOS>\"\nUNK = \"<UNK>\"\nSEG = \"|\"\nPUNCS = '!,.?;:'\nRESERVED_TOKENS = [PAD, EOS, UNK]\nNUM_RESERVED_TOKENS = len(RESERVED_TOKENS)\nPAD_ID = RESERVED_TOKENS.index(PAD)  # Normally 0\nEOS_ID = RESERVED_TOKENS.index(EOS)  # Normally 1\nUNK_ID = RESERVED_TOKENS.index(UNK)  # Normally 2\n\nif six.PY2:\n    RESERVED_TOKENS_BYTES = RESERVED_TOKENS\nelse:\n    RESERVED_TOKENS_BYTES = [bytes(PAD, \"ascii\"), bytes(EOS, \"ascii\")]\n\n# Regular expression for unescaping token strings.\n# '\\u' is converted to '_'\n# '\\\\' is converted to '\\'\n# '\\213;' is converted to unichr(213)\n_UNESCAPE_REGEX = re.compile(r\"\\\\u|\\\\\\\\|\\\\([0-9]+);\")\n_ESCAPE_CHARS = set(u\"\\\\_u;0123456789\")\n\n\ndef strip_ids(ids, ids_to_strip):\n    \"\"\"Strip ids_to_strip from the end ids.\"\"\"\n    ids = list(ids)\n    while ids and ids[-1] in ids_to_strip:\n        ids.pop()\n    return ids\n\n\nclass TextEncoder(object):\n    \"\"\"Base class for converting from ints to/from human readable strings.\"\"\"\n\n    def __init__(self, num_reserved_ids=NUM_RESERVED_TOKENS):\n        self._num_reserved_ids = num_reserved_ids\n\n    @property\n    def num_reserved_ids(self):\n        return self._num_reserved_ids\n\n    def encode(self, s):\n        \"\"\"Transform a human-readable string into a sequence of int ids.\n\n        The ids should be in the range [num_reserved_ids, vocab_size). Ids [0,\n        num_reserved_ids) are reserved.\n\n        EOS is not appended.\n\n        Args:\n        s: human-readable string to be converted.\n\n        Returns:\n        ids: list of integers\n        \"\"\"\n        return [int(w) + self._num_reserved_ids for w in s.split()]\n\n    def decode(self, ids, strip_extraneous=False):\n        \"\"\"Transform a sequence of int ids into a human-readable string.\n\n        EOS is not expected in ids.\n\n        Args:\n        ids: list of integers to be converted.\n        strip_extraneous: bool, whether to strip off extraneous tokens\n            (EOS and PAD).\n\n        Returns:\n        s: human-readable string.\n        \"\"\"\n        if strip_extraneous:\n            ids = strip_ids(ids, list(range(self._num_reserved_ids or 0)))\n        return \" \".join(self.decode_list(ids))\n\n    def decode_list(self, ids):\n        \"\"\"Transform a sequence of int ids into a their string versions.\n\n        This method supports transforming individual input/output ids to their\n        string versions so that sequence to/from text conversions can be visualized\n        in a human readable format.\n\n        Args:\n        ids: list of integers to be converted.\n\n        Returns:\n        strs: list of human-readable string.\n        \"\"\"\n        decoded_ids = []\n        for id_ in ids:\n            if 0 <= id_ < self._num_reserved_ids:\n                decoded_ids.append(RESERVED_TOKENS[int(id_)])\n            else:\n                decoded_ids.append(id_ - self._num_reserved_ids)\n        return [str(d) for d in decoded_ids]\n\n    @property\n    def vocab_size(self):\n        raise NotImplementedError()\n\n\nclass TokenTextEncoder(TextEncoder):\n    \"\"\"Encoder based on a user-supplied vocabulary (file or list).\"\"\"\n\n    def __init__(self,\n                 vocab_filename,\n                 reverse=False,\n                 vocab_list=None,\n                 replace_oov=None,\n                 num_reserved_ids=NUM_RESERVED_TOKENS):\n        \"\"\"Initialize from a file or list, one token per line.\n\n        Handling of reserved tokens works as follows:\n        - When initializing from a list, we add reserved tokens to the vocab.\n        - When initializing from a file, we do not add reserved tokens to the vocab.\n        - When saving vocab files, we save reserved tokens to the file.\n\n        Args:\n            vocab_filename: If not None, the full filename to read vocab from. If this\n                is not None, then vocab_list should be None.\n            reverse: Boolean indicating if tokens should be reversed during encoding\n                and decoding.\n            vocab_list: If not None, a list of elements of the vocabulary. If this is\n                not None, then vocab_filename should be None.\n            replace_oov: If not None, every out-of-vocabulary token seen when\n                encoding will be replaced by this string (which must be in vocab).\n            num_reserved_ids: Number of IDs to save for reserved tokens like <EOS>.\n        \"\"\"\n        super(TokenTextEncoder, self).__init__(num_reserved_ids=num_reserved_ids)\n        self._reverse = reverse\n        self._replace_oov = replace_oov\n        if vocab_filename:\n            self._init_vocab_from_file(vocab_filename)\n        else:\n            assert vocab_list is not None\n            self._init_vocab_from_list(vocab_list)\n        self.pad_index = self.token_to_id[PAD]\n        self.eos_index = self.token_to_id[EOS]\n        self.unk_index = self.token_to_id[UNK]\n        self.seg_index = self.token_to_id[SEG] if SEG in self.token_to_id else self.eos_index\n\n    def encode(self, s):\n        \"\"\"Converts a space-separated string of tokens to a list of ids.\"\"\"\n        if isinstance(s, str):\n            sentence = s\n            tokens = sentence.strip().split()\n        else:\n            tokens = s\n        if self._replace_oov is not None:\n            tokens = [t if t in self.token_to_id else self._replace_oov\n                      for t in tokens]\n        ret = [self.token_to_id[tok] for tok in tokens]\n        return ret[::-1] if self._reverse else ret\n\n    def decode(self, ids, strip_eos=False, strip_padding=False):\n        if strip_padding and self.pad() in list(ids):\n            pad_pos = list(ids).index(self.pad())\n            ids = ids[:pad_pos]\n        if strip_eos and self.eos() in list(ids):\n            eos_pos = list(ids).index(self.eos())\n            ids = ids[:eos_pos]\n        return \" \".join(self.decode_list(ids))\n\n    def decode_list(self, ids):\n        seq = reversed(ids) if self._reverse else ids\n        return [self._safe_id_to_token(i) for i in seq]\n\n    @property\n    def vocab_size(self):\n        return len(self.id_to_token)\n\n    def __len__(self):\n        return self.vocab_size\n\n    def _safe_id_to_token(self, idx):\n        return self.id_to_token.get(idx, \"ID_%d\" % idx)\n\n    def _init_vocab_from_file(self, filename):\n        \"\"\"Load vocab from a file.\n\n        Args:\n        filename: The file to load vocabulary from.\n        \"\"\"\n        with open(filename) as f:\n            tokens = [token.strip() for token in f.readlines()]\n\n        def token_gen():\n            for token in tokens:\n                yield token\n\n        self._init_vocab(token_gen(), add_reserved_tokens=False)\n\n    def _init_vocab_from_list(self, vocab_list):\n        \"\"\"Initialize tokens from a list of tokens.\n\n        It is ok if reserved tokens appear in the vocab list. They will be\n        removed. The set of tokens in vocab_list should be unique.\n\n        Args:\n        vocab_list: A list of tokens.\n        \"\"\"\n\n        def token_gen():\n            for token in vocab_list:\n                if token not in RESERVED_TOKENS:\n                    yield token\n\n        self._init_vocab(token_gen())\n\n    def _init_vocab(self, token_generator, add_reserved_tokens=True):\n        \"\"\"Initialize vocabulary with tokens from token_generator.\"\"\"\n\n        self.id_to_token = {}\n        non_reserved_start_index = 0\n\n        if add_reserved_tokens:\n            self.id_to_token.update(enumerate(RESERVED_TOKENS))\n            non_reserved_start_index = len(RESERVED_TOKENS)\n\n        self.id_to_token.update(\n            enumerate(token_generator, start=non_reserved_start_index))\n\n        # _token_to_id is the reverse of _id_to_token\n        self.token_to_id = dict((v, k) for k, v in six.iteritems(self.id_to_token))\n\n    def pad(self):\n        return self.pad_index\n\n    def eos(self):\n        return self.eos_index\n\n    def unk(self):\n        return self.unk_index\n\n    def seg(self):\n        return self.seg_index\n\n    def store_to_file(self, filename):\n        \"\"\"Write vocab file to disk.\n\n        Vocab files have one token per line. The file ends in a newline. Reserved\n        tokens are written to the vocab file as well.\n\n        Args:\n        filename: Full path of the file to store the vocab to.\n        \"\"\"\n        with open(filename, \"w\") as f:\n            for i in range(len(self.id_to_token)):\n                f.write(self.id_to_token[i] + \"\\n\")\n\n    def sil_phonemes(self):\n        return [p for p in self.id_to_token.values() if is_sil_phoneme(p)]\n\n\ndef build_token_encoder(token_list_file):\n    token_list = json.load(open(token_list_file))\n    return TokenTextEncoder(None, vocab_list=token_list, replace_oov='<UNK>')\n\n\ndef is_sil_phoneme(p):\n    return p == '' or not p[0].isalpha() or p == 'sil' or p == 'sp' or p == 'XX'\n"
  },
  {
    "path": "xinference/thirdparty/melo/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/melo/api.py",
    "content": "import os\nimport re\nimport json\nimport torch\nimport librosa\nimport soundfile\nimport torchaudio\nimport numpy as np\nimport torch.nn as nn\nfrom tqdm import tqdm\nimport torch\n\nfrom . import utils\nfrom . import commons\nfrom .models import SynthesizerTrn\nfrom .split_utils import split_sentence\nfrom .mel_processing import spectrogram_torch, spectrogram_torch_conv\nfrom .download_utils import load_or_download_config, load_or_download_model\n\nclass TTS(nn.Module):\n    def __init__(self, \n                language,\n                device='auto',\n                use_hf=True,\n                config_path=None,\n                ckpt_path=None):\n        super().__init__()\n        if device == 'auto':\n            device = 'cpu'\n            if torch.cuda.is_available(): device = 'cuda'\n            if torch.backends.mps.is_available(): device = 'mps'\n        if 'cuda' in device:\n            assert torch.cuda.is_available()\n\n        # config_path = \n        hps = load_or_download_config(language, use_hf=use_hf, config_path=config_path)\n\n        num_languages = hps.num_languages\n        num_tones = hps.num_tones\n        symbols = hps.symbols\n\n        model = SynthesizerTrn(\n            len(symbols),\n            hps.data.filter_length // 2 + 1,\n            hps.train.segment_size // hps.data.hop_length,\n            n_speakers=hps.data.n_speakers,\n            num_tones=num_tones,\n            num_languages=num_languages,\n            **hps.model,\n        ).to(device)\n\n        model.eval()\n        self.model = model\n        self.symbol_to_id = {s: i for i, s in enumerate(symbols)}\n        self.hps = hps\n        self.device = device\n    \n        # load state_dict\n        checkpoint_dict = load_or_download_model(language, device, use_hf=use_hf, ckpt_path=ckpt_path)\n        self.model.load_state_dict(checkpoint_dict['model'], strict=True)\n        \n        language = language.split('_')[0]\n        self.language = 'ZH_MIX_EN' if language == 'ZH' else language # we support a ZH_MIX_EN model\n\n    @staticmethod\n    def audio_numpy_concat(segment_data_list, sr, speed=1.):\n        audio_segments = []\n        for segment_data in segment_data_list:\n            audio_segments += segment_data.reshape(-1).tolist()\n            audio_segments += [0] * int((sr * 0.05) / speed)\n        audio_segments = np.array(audio_segments).astype(np.float32)\n        return audio_segments\n\n    @staticmethod\n    def split_sentences_into_pieces(text, language, quiet=False):\n        texts = split_sentence(text, language_str=language)\n        if not quiet:\n            print(\" > Text split to sentences.\")\n            print('\\n'.join(texts))\n            print(\" > ===========================\")\n        return texts\n\n    def tts_to_file(self, text, speaker_id, output_path=None, sdp_ratio=0.2, noise_scale=0.6, noise_scale_w=0.8, speed=1.0, pbar=None, format=None, position=None, quiet=False,):\n        language = self.language\n        texts = self.split_sentences_into_pieces(text, language, quiet)\n        audio_list = []\n        if pbar:\n            tx = pbar(texts)\n        else:\n            if position:\n                tx = tqdm(texts, position=position)\n            elif quiet:\n                tx = texts\n            else:\n                tx = tqdm(texts)\n        for t in tx:\n            if language in ['EN', 'ZH_MIX_EN']:\n                t = re.sub(r'([a-z])([A-Z])', r'\\1 \\2', t)\n            device = self.device\n            bert, ja_bert, phones, tones, lang_ids = utils.get_text_for_tts_infer(t, language, self.hps, device, self.symbol_to_id)\n            with torch.no_grad():\n                x_tst = phones.to(device).unsqueeze(0)\n                tones = tones.to(device).unsqueeze(0)\n                lang_ids = lang_ids.to(device).unsqueeze(0)\n                bert = bert.to(device).unsqueeze(0)\n                ja_bert = ja_bert.to(device).unsqueeze(0)\n                x_tst_lengths = torch.LongTensor([phones.size(0)]).to(device)\n                del phones\n                speakers = torch.LongTensor([speaker_id]).to(device)\n                audio = self.model.infer(\n                        x_tst,\n                        x_tst_lengths,\n                        speakers,\n                        tones,\n                        lang_ids,\n                        bert,\n                        ja_bert,\n                        sdp_ratio=sdp_ratio,\n                        noise_scale=noise_scale,\n                        noise_scale_w=noise_scale_w,\n                        length_scale=1. / speed,\n                    )[0][0, 0].data.cpu().float().numpy()\n                del x_tst, tones, lang_ids, bert, ja_bert, x_tst_lengths, speakers\n                # \n            audio_list.append(audio)\n        torch.cuda.empty_cache()\n        audio = self.audio_numpy_concat(audio_list, sr=self.hps.data.sampling_rate, speed=speed)\n\n        if output_path is None:\n            return audio\n        else:\n            if format:\n                soundfile.write(output_path, audio, self.hps.data.sampling_rate, format=format)\n            else:\n                soundfile.write(output_path, audio, self.hps.data.sampling_rate)\n"
  },
  {
    "path": "xinference/thirdparty/melo/app.py",
    "content": "# WebUI by mrfakename <X @realmrfakename / HF @mrfakename>\n# Demo also available on HF Spaces: https://huggingface.co/spaces/mrfakename/MeloTTS\nimport gradio as gr\nimport os, torch, io\n# os.system('python -m unidic download')\nprint(\"Make sure you've downloaded unidic (python -m unidic download) for this WebUI to work.\")\nfrom melo.api import TTS\nspeed = 1.0\nimport tempfile\nimport click\ndevice = 'auto'\nmodels = {\n    'EN': TTS(language='EN', device=device),\n    'ES': TTS(language='ES', device=device),\n    'FR': TTS(language='FR', device=device),\n    'ZH': TTS(language='ZH', device=device),\n    'JP': TTS(language='JP', device=device),\n    'KR': TTS(language='KR', device=device),\n}\nspeaker_ids = models['EN'].hps.data.spk2id\n\ndefault_text_dict = {\n    'EN': 'The field of text-to-speech has seen rapid development recently.',\n    'ES': 'El campo de la conversión de texto a voz ha experimentado un rápido desarrollo recientemente.',\n    'FR': 'Le domaine de la synthèse vocale a connu un développement rapide récemment',\n    'ZH': 'text-to-speech 领域近年来发展迅速',\n    'JP': 'テキスト読み上げの分野は最近急速な発展を遂げています',\n    'KR': '최근 텍스트 음성 변환 분야가 급속도로 발전하고 있습니다.',    \n}\n    \ndef synthesize(speaker, text, speed, language, progress=gr.Progress()):\n    bio = io.BytesIO()\n    models[language].tts_to_file(text, models[language].hps.data.spk2id[speaker], bio, speed=speed, pbar=progress.tqdm, format='wav')\n    return bio.getvalue()\ndef load_speakers(language, text):\n    if text in list(default_text_dict.values()):\n        newtext = default_text_dict[language]\n    else:\n        newtext = text\n    return gr.update(value=list(models[language].hps.data.spk2id.keys())[0], choices=list(models[language].hps.data.spk2id.keys())), newtext\nwith gr.Blocks() as demo:\n    gr.Markdown('# MeloTTS WebUI\\n\\nA WebUI for MeloTTS.')\n    with gr.Group():\n        speaker = gr.Dropdown(speaker_ids.keys(), interactive=True, value='EN-US', label='Speaker')\n        language = gr.Radio(['EN', 'ES', 'FR', 'ZH', 'JP', 'KR'], label='Language', value='EN')\n        speed = gr.Slider(label='Speed', minimum=0.1, maximum=10.0, value=1.0, interactive=True, step=0.1)\n        text = gr.Textbox(label=\"Text to speak\", value=default_text_dict['EN'])\n        language.input(load_speakers, inputs=[language, text], outputs=[speaker, text])\n    btn = gr.Button('Synthesize', variant='primary')\n    aud = gr.Audio(interactive=False)\n    btn.click(synthesize, inputs=[speaker, text, speed, language], outputs=[aud])\n    gr.Markdown('WebUI by [mrfakename](https://twitter.com/realmrfakename).')\n@click.command()\n@click.option('--share', '-s', is_flag=True, show_default=True, default=False, help=\"Expose a publicly-accessible shared Gradio link usable by anyone with the link. Only share the link with people you trust.\")\n@click.option('--host', '-h', default=None)\n@click.option('--port', '-p', type=int, default=None)\ndef main(share, host, port):\n    demo.queue(api_open=False).launch(show_api=False, share=share, server_name=host, server_port=port)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/melo/attentions.py",
    "content": "import math\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom . import commons\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\nclass LayerNorm(nn.Module):\n    def __init__(self, channels, eps=1e-5):\n        super().__init__()\n        self.channels = channels\n        self.eps = eps\n\n        self.gamma = nn.Parameter(torch.ones(channels))\n        self.beta = nn.Parameter(torch.zeros(channels))\n\n    def forward(self, x):\n        x = x.transpose(1, -1)\n        x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps)\n        return x.transpose(1, -1)\n\n\n@torch.jit.script\ndef fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):\n    n_channels_int = n_channels[0]\n    in_act = input_a + input_b\n    t_act = torch.tanh(in_act[:, :n_channels_int, :])\n    s_act = torch.sigmoid(in_act[:, n_channels_int:, :])\n    acts = t_act * s_act\n    return acts\n\n\nclass Encoder(nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size=1,\n        p_dropout=0.0,\n        window_size=4,\n        isflow=True,\n        **kwargs\n    ):\n        super().__init__()\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.window_size = window_size\n\n        self.cond_layer_idx = self.n_layers\n        if \"gin_channels\" in kwargs:\n            self.gin_channels = kwargs[\"gin_channels\"]\n            if self.gin_channels != 0:\n                self.spk_emb_linear = nn.Linear(self.gin_channels, self.hidden_channels)\n                self.cond_layer_idx = (\n                    kwargs[\"cond_layer_idx\"] if \"cond_layer_idx\" in kwargs else 2\n                )\n                assert (\n                    self.cond_layer_idx < self.n_layers\n                ), \"cond_layer_idx should be less than n_layers\"\n        self.drop = nn.Dropout(p_dropout)\n        self.attn_layers = nn.ModuleList()\n        self.norm_layers_1 = nn.ModuleList()\n        self.ffn_layers = nn.ModuleList()\n        self.norm_layers_2 = nn.ModuleList()\n\n        for i in range(self.n_layers):\n            self.attn_layers.append(\n                MultiHeadAttention(\n                    hidden_channels,\n                    hidden_channels,\n                    n_heads,\n                    p_dropout=p_dropout,\n                    window_size=window_size,\n                )\n            )\n            self.norm_layers_1.append(LayerNorm(hidden_channels))\n            self.ffn_layers.append(\n                FFN(\n                    hidden_channels,\n                    hidden_channels,\n                    filter_channels,\n                    kernel_size,\n                    p_dropout=p_dropout,\n                )\n            )\n            self.norm_layers_2.append(LayerNorm(hidden_channels))\n\n    def forward(self, x, x_mask, g=None):\n        attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1)\n        x = x * x_mask\n        for i in range(self.n_layers):\n            if i == self.cond_layer_idx and g is not None:\n                g = self.spk_emb_linear(g.transpose(1, 2))\n                g = g.transpose(1, 2)\n                x = x + g\n                x = x * x_mask\n            y = self.attn_layers[i](x, x, attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_1[i](x + y)\n\n            y = self.ffn_layers[i](x, x_mask)\n            y = self.drop(y)\n            x = self.norm_layers_2[i](x + y)\n        x = x * x_mask\n        return x\n\n\nclass Decoder(nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size=1,\n        p_dropout=0.0,\n        proximal_bias=False,\n        proximal_init=True,\n        **kwargs\n    ):\n        super().__init__()\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.proximal_bias = proximal_bias\n        self.proximal_init = proximal_init\n\n        self.drop = nn.Dropout(p_dropout)\n        self.self_attn_layers = nn.ModuleList()\n        self.norm_layers_0 = nn.ModuleList()\n        self.encdec_attn_layers = nn.ModuleList()\n        self.norm_layers_1 = nn.ModuleList()\n        self.ffn_layers = nn.ModuleList()\n        self.norm_layers_2 = nn.ModuleList()\n        for i in range(self.n_layers):\n            self.self_attn_layers.append(\n                MultiHeadAttention(\n                    hidden_channels,\n                    hidden_channels,\n                    n_heads,\n                    p_dropout=p_dropout,\n                    proximal_bias=proximal_bias,\n                    proximal_init=proximal_init,\n                )\n            )\n            self.norm_layers_0.append(LayerNorm(hidden_channels))\n            self.encdec_attn_layers.append(\n                MultiHeadAttention(\n                    hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout\n                )\n            )\n            self.norm_layers_1.append(LayerNorm(hidden_channels))\n            self.ffn_layers.append(\n                FFN(\n                    hidden_channels,\n                    hidden_channels,\n                    filter_channels,\n                    kernel_size,\n                    p_dropout=p_dropout,\n                    causal=True,\n                )\n            )\n            self.norm_layers_2.append(LayerNorm(hidden_channels))\n\n    def forward(self, x, x_mask, h, h_mask):\n        \"\"\"\n        x: decoder input\n        h: encoder output\n        \"\"\"\n        self_attn_mask = commons.subsequent_mask(x_mask.size(2)).to(\n            device=x.device, dtype=x.dtype\n        )\n        encdec_attn_mask = h_mask.unsqueeze(2) * x_mask.unsqueeze(-1)\n        x = x * x_mask\n        for i in range(self.n_layers):\n            y = self.self_attn_layers[i](x, x, self_attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_0[i](x + y)\n\n            y = self.encdec_attn_layers[i](x, h, encdec_attn_mask)\n            y = self.drop(y)\n            x = self.norm_layers_1[i](x + y)\n\n            y = self.ffn_layers[i](x, x_mask)\n            y = self.drop(y)\n            x = self.norm_layers_2[i](x + y)\n        x = x * x_mask\n        return x\n\n\nclass MultiHeadAttention(nn.Module):\n    def __init__(\n        self,\n        channels,\n        out_channels,\n        n_heads,\n        p_dropout=0.0,\n        window_size=None,\n        heads_share=True,\n        block_length=None,\n        proximal_bias=False,\n        proximal_init=False,\n    ):\n        super().__init__()\n        assert channels % n_heads == 0\n\n        self.channels = channels\n        self.out_channels = out_channels\n        self.n_heads = n_heads\n        self.p_dropout = p_dropout\n        self.window_size = window_size\n        self.heads_share = heads_share\n        self.block_length = block_length\n        self.proximal_bias = proximal_bias\n        self.proximal_init = proximal_init\n        self.attn = None\n\n        self.k_channels = channels // n_heads\n        self.conv_q = nn.Conv1d(channels, channels, 1)\n        self.conv_k = nn.Conv1d(channels, channels, 1)\n        self.conv_v = nn.Conv1d(channels, channels, 1)\n        self.conv_o = nn.Conv1d(channels, out_channels, 1)\n        self.drop = nn.Dropout(p_dropout)\n\n        if window_size is not None:\n            n_heads_rel = 1 if heads_share else n_heads\n            rel_stddev = self.k_channels**-0.5\n            self.emb_rel_k = nn.Parameter(\n                torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels)\n                * rel_stddev\n            )\n            self.emb_rel_v = nn.Parameter(\n                torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels)\n                * rel_stddev\n            )\n\n        nn.init.xavier_uniform_(self.conv_q.weight)\n        nn.init.xavier_uniform_(self.conv_k.weight)\n        nn.init.xavier_uniform_(self.conv_v.weight)\n        if proximal_init:\n            with torch.no_grad():\n                self.conv_k.weight.copy_(self.conv_q.weight)\n                self.conv_k.bias.copy_(self.conv_q.bias)\n\n    def forward(self, x, c, attn_mask=None):\n        q = self.conv_q(x)\n        k = self.conv_k(c)\n        v = self.conv_v(c)\n\n        x, self.attn = self.attention(q, k, v, mask=attn_mask)\n\n        x = self.conv_o(x)\n        return x\n\n    def attention(self, query, key, value, mask=None):\n        # reshape [b, d, t] -> [b, n_h, t, d_k]\n        b, d, t_s, t_t = (*key.size(), query.size(2))\n        query = query.view(b, self.n_heads, self.k_channels, t_t).transpose(2, 3)\n        key = key.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)\n        value = value.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)\n\n        scores = torch.matmul(query / math.sqrt(self.k_channels), key.transpose(-2, -1))\n        if self.window_size is not None:\n            assert (\n                t_s == t_t\n            ), \"Relative attention is only available for self-attention.\"\n            key_relative_embeddings = self._get_relative_embeddings(self.emb_rel_k, t_s)\n            rel_logits = self._matmul_with_relative_keys(\n                query / math.sqrt(self.k_channels), key_relative_embeddings\n            )\n            scores_local = self._relative_position_to_absolute_position(rel_logits)\n            scores = scores + scores_local\n        if self.proximal_bias:\n            assert t_s == t_t, \"Proximal bias is only available for self-attention.\"\n            scores = scores + self._attention_bias_proximal(t_s).to(\n                device=scores.device, dtype=scores.dtype\n            )\n        if mask is not None:\n            scores = scores.masked_fill(mask == 0, -1e4)\n            if self.block_length is not None:\n                assert (\n                    t_s == t_t\n                ), \"Local attention is only available for self-attention.\"\n                block_mask = (\n                    torch.ones_like(scores)\n                    .triu(-self.block_length)\n                    .tril(self.block_length)\n                )\n                scores = scores.masked_fill(block_mask == 0, -1e4)\n        p_attn = F.softmax(scores, dim=-1)  # [b, n_h, t_t, t_s]\n        p_attn = self.drop(p_attn)\n        output = torch.matmul(p_attn, value)\n        if self.window_size is not None:\n            relative_weights = self._absolute_position_to_relative_position(p_attn)\n            value_relative_embeddings = self._get_relative_embeddings(\n                self.emb_rel_v, t_s\n            )\n            output = output + self._matmul_with_relative_values(\n                relative_weights, value_relative_embeddings\n            )\n        output = (\n            output.transpose(2, 3).contiguous().view(b, d, t_t)\n        )  # [b, n_h, t_t, d_k] -> [b, d, t_t]\n        return output, p_attn\n\n    def _matmul_with_relative_values(self, x, y):\n        \"\"\"\n        x: [b, h, l, m]\n        y: [h or 1, m, d]\n        ret: [b, h, l, d]\n        \"\"\"\n        ret = torch.matmul(x, y.unsqueeze(0))\n        return ret\n\n    def _matmul_with_relative_keys(self, x, y):\n        \"\"\"\n        x: [b, h, l, d]\n        y: [h or 1, m, d]\n        ret: [b, h, l, m]\n        \"\"\"\n        ret = torch.matmul(x, y.unsqueeze(0).transpose(-2, -1))\n        return ret\n\n    def _get_relative_embeddings(self, relative_embeddings, length):\n        2 * self.window_size + 1\n        # Pad first before slice to avoid using cond ops.\n        pad_length = max(length - (self.window_size + 1), 0)\n        slice_start_position = max((self.window_size + 1) - length, 0)\n        slice_end_position = slice_start_position + 2 * length - 1\n        if pad_length > 0:\n            padded_relative_embeddings = F.pad(\n                relative_embeddings,\n                commons.convert_pad_shape([[0, 0], [pad_length, pad_length], [0, 0]]),\n            )\n        else:\n            padded_relative_embeddings = relative_embeddings\n        used_relative_embeddings = padded_relative_embeddings[\n            :, slice_start_position:slice_end_position\n        ]\n        return used_relative_embeddings\n\n    def _relative_position_to_absolute_position(self, x):\n        \"\"\"\n        x: [b, h, l, 2*l-1]\n        ret: [b, h, l, l]\n        \"\"\"\n        batch, heads, length, _ = x.size()\n        # Concat columns of pad to shift from relative to absolute indexing.\n        x = F.pad(x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, 1]]))\n\n        # Concat extra elements so to add up to shape (len+1, 2*len-1).\n        x_flat = x.view([batch, heads, length * 2 * length])\n        x_flat = F.pad(\n            x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [0, length - 1]])\n        )\n\n        # Reshape and slice out the padded elements.\n        x_final = x_flat.view([batch, heads, length + 1, 2 * length - 1])[\n            :, :, :length, length - 1 :\n        ]\n        return x_final\n\n    def _absolute_position_to_relative_position(self, x):\n        \"\"\"\n        x: [b, h, l, l]\n        ret: [b, h, l, 2*l-1]\n        \"\"\"\n        batch, heads, length, _ = x.size()\n        # pad along column\n        x = F.pad(\n            x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, length - 1]])\n        )\n        x_flat = x.view([batch, heads, length**2 + length * (length - 1)])\n        # add 0's in the beginning that will skew the elements after reshape\n        x_flat = F.pad(x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [length, 0]]))\n        x_final = x_flat.view([batch, heads, length, 2 * length])[:, :, :, 1:]\n        return x_final\n\n    def _attention_bias_proximal(self, length):\n        \"\"\"Bias for self-attention to encourage attention to close positions.\n        Args:\n          length: an integer scalar.\n        Returns:\n          a Tensor with shape [1, 1, length, length]\n        \"\"\"\n        r = torch.arange(length, dtype=torch.float32)\n        diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1)\n        return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0)\n\n\nclass FFN(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        filter_channels,\n        kernel_size,\n        p_dropout=0.0,\n        activation=None,\n        causal=False,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.activation = activation\n        self.causal = causal\n\n        if causal:\n            self.padding = self._causal_padding\n        else:\n            self.padding = self._same_padding\n\n        self.conv_1 = nn.Conv1d(in_channels, filter_channels, kernel_size)\n        self.conv_2 = nn.Conv1d(filter_channels, out_channels, kernel_size)\n        self.drop = nn.Dropout(p_dropout)\n\n    def forward(self, x, x_mask):\n        x = self.conv_1(self.padding(x * x_mask))\n        if self.activation == \"gelu\":\n            x = x * torch.sigmoid(1.702 * x)\n        else:\n            x = torch.relu(x)\n        x = self.drop(x)\n        x = self.conv_2(self.padding(x * x_mask))\n        return x * x_mask\n\n    def _causal_padding(self, x):\n        if self.kernel_size == 1:\n            return x\n        pad_l = self.kernel_size - 1\n        pad_r = 0\n        padding = [[0, 0], [0, 0], [pad_l, pad_r]]\n        x = F.pad(x, commons.convert_pad_shape(padding))\n        return x\n\n    def _same_padding(self, x):\n        if self.kernel_size == 1:\n            return x\n        pad_l = (self.kernel_size - 1) // 2\n        pad_r = self.kernel_size // 2\n        padding = [[0, 0], [0, 0], [pad_l, pad_r]]\n        x = F.pad(x, commons.convert_pad_shape(padding))\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/melo/commons.py",
    "content": "import math\nimport torch\nfrom torch.nn import functional as F\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef convert_pad_shape(pad_shape):\n    layer = pad_shape[::-1]\n    pad_shape = [item for sublist in layer for item in sublist]\n    return pad_shape\n\n\ndef intersperse(lst, item):\n    result = [item] * (len(lst) * 2 + 1)\n    result[1::2] = lst\n    return result\n\n\ndef kl_divergence(m_p, logs_p, m_q, logs_q):\n    \"\"\"KL(P||Q)\"\"\"\n    kl = (logs_q - logs_p) - 0.5\n    kl += (\n        0.5 * (torch.exp(2.0 * logs_p) + ((m_p - m_q) ** 2)) * torch.exp(-2.0 * logs_q)\n    )\n    return kl\n\n\ndef rand_gumbel(shape):\n    \"\"\"Sample from the Gumbel distribution, protect from overflows.\"\"\"\n    uniform_samples = torch.rand(shape) * 0.99998 + 0.00001\n    return -torch.log(-torch.log(uniform_samples))\n\n\ndef rand_gumbel_like(x):\n    g = rand_gumbel(x.size()).to(dtype=x.dtype, device=x.device)\n    return g\n\n\ndef slice_segments(x, ids_str, segment_size=4):\n    ret = torch.zeros_like(x[:, :, :segment_size])\n    for i in range(x.size(0)):\n        idx_str = ids_str[i]\n        idx_end = idx_str + segment_size\n        ret[i] = x[i, :, idx_str:idx_end]\n    return ret\n\n\ndef rand_slice_segments(x, x_lengths=None, segment_size=4):\n    b, d, t = x.size()\n    if x_lengths is None:\n        x_lengths = t\n    ids_str_max = x_lengths - segment_size + 1\n    ids_str = (torch.rand([b]).to(device=x.device) * ids_str_max).to(dtype=torch.long)\n    ret = slice_segments(x, ids_str, segment_size)\n    return ret, ids_str\n\n\ndef get_timing_signal_1d(length, channels, min_timescale=1.0, max_timescale=1.0e4):\n    position = torch.arange(length, dtype=torch.float)\n    num_timescales = channels // 2\n    log_timescale_increment = math.log(float(max_timescale) / float(min_timescale)) / (\n        num_timescales - 1\n    )\n    inv_timescales = min_timescale * torch.exp(\n        torch.arange(num_timescales, dtype=torch.float) * -log_timescale_increment\n    )\n    scaled_time = position.unsqueeze(0) * inv_timescales.unsqueeze(1)\n    signal = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], 0)\n    signal = F.pad(signal, [0, 0, 0, channels % 2])\n    signal = signal.view(1, channels, length)\n    return signal\n\n\ndef add_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4):\n    b, channels, length = x.size()\n    signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)\n    return x + signal.to(dtype=x.dtype, device=x.device)\n\n\ndef cat_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4, axis=1):\n    b, channels, length = x.size()\n    signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)\n    return torch.cat([x, signal.to(dtype=x.dtype, device=x.device)], axis)\n\n\ndef subsequent_mask(length):\n    mask = torch.tril(torch.ones(length, length)).unsqueeze(0).unsqueeze(0)\n    return mask\n\n\n@torch.jit.script\ndef fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):\n    n_channels_int = n_channels[0]\n    in_act = input_a + input_b\n    t_act = torch.tanh(in_act[:, :n_channels_int, :])\n    s_act = torch.sigmoid(in_act[:, n_channels_int:, :])\n    acts = t_act * s_act\n    return acts\n\n\ndef convert_pad_shape(pad_shape):\n    layer = pad_shape[::-1]\n    pad_shape = [item for sublist in layer for item in sublist]\n    return pad_shape\n\n\ndef shift_1d(x):\n    x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [1, 0]]))[:, :, :-1]\n    return x\n\n\ndef sequence_mask(length, max_length=None):\n    if max_length is None:\n        max_length = length.max()\n    x = torch.arange(max_length, dtype=length.dtype, device=length.device)\n    return x.unsqueeze(0) < length.unsqueeze(1)\n\n\ndef generate_path(duration, mask):\n    \"\"\"\n    duration: [b, 1, t_x]\n    mask: [b, 1, t_y, t_x]\n    \"\"\"\n\n    b, _, t_y, t_x = mask.shape\n    cum_duration = torch.cumsum(duration, -1)\n\n    cum_duration_flat = cum_duration.view(b * t_x)\n    path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype)\n    path = path.view(b, t_x, t_y)\n    path = path - F.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1]\n    path = path.unsqueeze(1).transpose(2, 3) * mask\n    return path\n\n\ndef clip_grad_value_(parameters, clip_value, norm_type=2):\n    if isinstance(parameters, torch.Tensor):\n        parameters = [parameters]\n    parameters = list(filter(lambda p: p.grad is not None, parameters))\n    norm_type = float(norm_type)\n    if clip_value is not None:\n        clip_value = float(clip_value)\n\n    total_norm = 0\n    for p in parameters:\n        param_norm = p.grad.data.norm(norm_type)\n        total_norm += param_norm.item() ** norm_type\n        if clip_value is not None:\n            p.grad.data.clamp_(min=-clip_value, max=clip_value)\n    total_norm = total_norm ** (1.0 / norm_type)\n    return total_norm\n"
  },
  {
    "path": "xinference/thirdparty/melo/configs/config.json",
    "content": "{\n  \"train\": {\n    \"log_interval\": 200,\n    \"eval_interval\": 1000,\n    \"seed\": 52,\n    \"epochs\": 10000,\n    \"learning_rate\": 0.0003,\n    \"betas\": [\n      0.8,\n      0.99\n    ],\n    \"eps\": 1e-09,\n    \"batch_size\": 6,\n    \"fp16_run\": false,\n    \"lr_decay\": 0.999875,\n    \"segment_size\": 16384,\n    \"init_lr_ratio\": 1,\n    \"warmup_epochs\": 0,\n    \"c_mel\": 45,\n    \"c_kl\": 1.0,\n    \"skip_optimizer\": true\n  },\n  \"data\": {\n    \"training_files\": \"\",\n    \"validation_files\": \"\",\n    \"max_wav_value\": 32768.0,\n    \"sampling_rate\": 44100,\n    \"filter_length\": 2048,\n    \"hop_length\": 512,\n    \"win_length\": 2048,\n    \"n_mel_channels\": 128,\n    \"mel_fmin\": 0.0,\n    \"mel_fmax\": null,\n    \"add_blank\": true,\n    \"n_speakers\": 256,\n    \"cleaned_text\": true,\n    \"spk2id\": {}\n  },\n  \"model\": {\n    \"use_spk_conditioned_encoder\": true,\n    \"use_noise_scaled_mas\": true,\n    \"use_mel_posterior_encoder\": false,\n    \"use_duration_discriminator\": true,\n    \"inter_channels\": 192,\n    \"hidden_channels\": 192,\n    \"filter_channels\": 768,\n    \"n_heads\": 2,\n    \"n_layers\": 6,\n    \"n_layers_trans_flow\": 3,\n    \"kernel_size\": 3,\n    \"p_dropout\": 0.1,\n    \"resblock\": \"1\",\n    \"resblock_kernel_sizes\": [\n      3,\n      7,\n      11\n    ],\n    \"resblock_dilation_sizes\": [\n      [\n        1,\n        3,\n        5\n      ],\n      [\n        1,\n        3,\n        5\n      ],\n      [\n        1,\n        3,\n        5\n      ]\n    ],\n    \"upsample_rates\": [\n      8,\n      8,\n      2,\n      2,\n      2\n    ],\n    \"upsample_initial_channel\": 512,\n    \"upsample_kernel_sizes\": [\n      16,\n      16,\n      8,\n      2,\n      2\n    ],\n    \"n_layers_q\": 3,\n    \"use_spectral_norm\": false,\n    \"gin_channels\": 256\n  }\n}\n"
  },
  {
    "path": "xinference/thirdparty/melo/data/example/metadata.list",
    "content": "data/example/wavs/000.wav|EN-default|EN|Well, there are always new trends and styles emerging in the fashion world, but I think some of the biggest trends at the moment include sustainability and ethical fashion, streetwear and athleisure, and oversized and deconstructed silhouettes.\ndata/example/wavs/001.wav|EN-default|EN|Many designers and brands are focusing on creating more environmentally-friendly and socially responsible clothing, while others are incorporating elements of sportswear and casual wear into their collections.\ndata/example/wavs/002.wav|EN-default|EN|And there's a growing interest in looser, more relaxed shapes and unconventional materials and finishes.\ndata/example/wavs/003.wav|EN-default|EN|That's really insightful.\ndata/example/wavs/004.wav|EN-default|EN|What do you think are some of the benefits of following fashion trends?\ndata/example/wavs/005.wav|EN-default|EN|Well, I think one of the main benefits of following fashion trends is that it can be a way to express your creativity, personality, and individuality.\ndata/example/wavs/006.wav|EN-default|EN|Fashion can be a powerful tool for self-expression and can help you feel more confident and comfortable in your own skin.\ndata/example/wavs/007.wav|EN-default|EN|Additionally, staying up-to-date with fashion trends can help you develop your own sense of style and learn how to put together outfits that make you look and feel great.\ndata/example/wavs/008.wav|EN-default|EN|That's a great point.\ndata/example/wavs/009.wav|EN-default|EN|Do you think it's important to stay on top of the latest fashion trends, or is it more important to focus on timeless style?\ndata/example/wavs/010.wav|EN-default|EN|I think it's really up to each individual to decide what approach to fashion works best for them.\ndata/example/wavs/011.wav|EN-default|EN|Some people prefer to stick with classic, timeless styles that never go out of fashion, while others enjoy experimenting with new and innovative trends.\ndata/example/wavs/012.wav|EN-default|EN|Ultimately, fashion is about personal expression and there's no right or wrong way to approach it.\ndata/example/wavs/013.wav|EN-default|EN|The most important thing is to wear what makes you feel good and confident.\ndata/example/wavs/014.wav|EN-default|EN|I completely agree.\ndata/example/wavs/015.wav|EN-default|EN|Some popular ones that come to mind are oversized blazers, statement sleeves, printed maxi dresses, and chunky sneakers.\ndata/example/wavs/016.wav|EN-default|EN|It's been really interesting chatting with you about fashion.\ndata/example/wavs/017.wav|EN-default|EN|That's a good point.\ndata/example/wavs/018.wav|EN-default|EN|What do you think are some current fashion trends that are popular right now?\ndata/example/wavs/019.wav|EN-default|EN|There are so many trends happening right now, it's hard to keep track of them all!\n"
  },
  {
    "path": "xinference/thirdparty/melo/data_utils.py",
    "content": "import os\nimport random\nimport torch\nimport torch.utils.data\nfrom tqdm import tqdm\nfrom loguru import logger\nimport commons\nfrom mel_processing import spectrogram_torch, mel_spectrogram_torch\nfrom utils import load_filepaths_and_text\nfrom utils import load_wav_to_torch_librosa as load_wav_to_torch\nfrom text import cleaned_text_to_sequence, get_bert\nimport numpy as np\n\n\"\"\"Multi speaker version\"\"\"\n\n\nclass TextAudioSpeakerLoader(torch.utils.data.Dataset):\n    \"\"\"\n    1) loads audio, speaker_id, text pairs\n    2) normalizes text and converts them to sequences of integers\n    3) computes spectrograms from audio files.\n    \"\"\"\n\n    def __init__(self, audiopaths_sid_text, hparams):\n        self.audiopaths_sid_text = load_filepaths_and_text(audiopaths_sid_text)\n        self.max_wav_value = hparams.max_wav_value\n        self.sampling_rate = hparams.sampling_rate\n        self.filter_length = hparams.filter_length\n        self.hop_length = hparams.hop_length\n        self.win_length = hparams.win_length\n        self.sampling_rate = hparams.sampling_rate\n        self.spk_map = hparams.spk2id\n        self.hparams = hparams\n        self.disable_bert = getattr(hparams, \"disable_bert\", False)\n\n        self.use_mel_spec_posterior = getattr(\n            hparams, \"use_mel_posterior_encoder\", False\n        )\n        if self.use_mel_spec_posterior:\n            self.n_mel_channels = getattr(hparams, \"n_mel_channels\", 80)\n\n        self.cleaned_text = getattr(hparams, \"cleaned_text\", False)\n\n        self.add_blank = hparams.add_blank\n        self.min_text_len = getattr(hparams, \"min_text_len\", 1)\n        self.max_text_len = getattr(hparams, \"max_text_len\", 300)\n\n        random.seed(1234)\n        random.shuffle(self.audiopaths_sid_text)\n        self._filter()\n\n\n    def _filter(self):\n        \"\"\"\n        Filter text & store spec lengths\n        \"\"\"\n        # Store spectrogram lengths for Bucketing\n        # wav_length ~= file_size / (wav_channels * Bytes per dim) = file_size / (1 * 2)\n        # spec_length = wav_length // hop_length\n\n        audiopaths_sid_text_new = []\n        lengths = []\n        skipped = 0\n        logger.info(\"Init dataset...\")\n        for item in tqdm(\n            self.audiopaths_sid_text\n        ):\n            try:\n                _id, spk, language, text, phones, tone, word2ph = item\n            except Exception:\n                print(item)\n                raise\n            audiopath = f\"{_id}\"\n            if self.min_text_len <= len(phones) and len(phones) <= self.max_text_len:\n                phones = phones.split(\" \")\n                tone = [int(i) for i in tone.split(\" \")]\n                word2ph = [int(i) for i in word2ph.split(\" \")]\n                audiopaths_sid_text_new.append(\n                    [audiopath, spk, language, text, phones, tone, word2ph]\n                )\n                lengths.append(os.path.getsize(audiopath) // (2 * self.hop_length))\n            else:\n                skipped += 1\n        logger.info(f'min: {min(lengths)}; max: {max(lengths)}' )\n        logger.info(\n            \"skipped: \"\n            + str(skipped)\n            + \", total: \"\n            + str(len(self.audiopaths_sid_text))\n        )\n        self.audiopaths_sid_text = audiopaths_sid_text_new\n        self.lengths = lengths\n\n    def get_audio_text_speaker_pair(self, audiopath_sid_text):\n        # separate filename, speaker_id and text\n        audiopath, sid, language, text, phones, tone, word2ph = audiopath_sid_text\n\n        bert, ja_bert, phones, tone, language = self.get_text(\n            text, word2ph, phones, tone, language, audiopath\n        )\n\n        spec, wav = self.get_audio(audiopath)\n        sid = int(getattr(self.spk_map, sid, '0'))\n        sid = torch.LongTensor([sid])\n        return (phones, spec, wav, sid, tone, language, bert, ja_bert)\n\n    def get_audio(self, filename):\n        audio_norm, sampling_rate = load_wav_to_torch(filename, self.sampling_rate)\n        if sampling_rate != self.sampling_rate:\n            raise ValueError(\n                \"{} {} SR doesn't match target {} SR\".format(\n                    filename, sampling_rate, self.sampling_rate\n                )\n            )\n        # NOTE: normalize has been achieved by torchaudio\n        # audio_norm = audio / self.max_wav_value\n        audio_norm = audio_norm.unsqueeze(0)\n        spec_filename = filename.replace(\".wav\", \".spec.pt\")\n        if self.use_mel_spec_posterior:\n            spec_filename = spec_filename.replace(\".spec.pt\", \".mel.pt\")\n        try:\n            spec = torch.load(spec_filename)\n            assert False\n        except Exception:\n            if self.use_mel_spec_posterior:\n                spec = mel_spectrogram_torch(\n                    audio_norm,\n                    self.filter_length,\n                    self.n_mel_channels,\n                    self.sampling_rate,\n                    self.hop_length,\n                    self.win_length,\n                    self.hparams.mel_fmin,\n                    self.hparams.mel_fmax,\n                    center=False,\n                )\n            else:\n                spec = spectrogram_torch(\n                    audio_norm,\n                    self.filter_length,\n                    self.sampling_rate,\n                    self.hop_length,\n                    self.win_length,\n                    center=False,\n                )\n            spec = torch.squeeze(spec, 0)\n            torch.save(spec, spec_filename)\n        return spec, audio_norm\n\n    def get_text(self, text, word2ph, phone, tone, language_str, wav_path):\n        phone, tone, language = cleaned_text_to_sequence(phone, tone, language_str)\n        if self.add_blank:\n            phone = commons.intersperse(phone, 0)\n            tone = commons.intersperse(tone, 0)\n            language = commons.intersperse(language, 0)\n            for i in range(len(word2ph)):\n                word2ph[i] = word2ph[i] * 2\n            word2ph[0] += 1\n        bert_path = wav_path.replace(\".wav\", \".bert.pt\")\n        try:\n            bert = torch.load(bert_path)\n            assert bert.shape[-1] == len(phone)\n        except Exception as e:\n            print(e, wav_path, bert_path, bert.shape, len(phone))\n            bert = get_bert(text, word2ph, language_str)\n            torch.save(bert, bert_path)\n            assert bert.shape[-1] == len(phone), phone\n\n        if self.disable_bert:\n            bert = torch.zeros(1024, len(phone))\n            ja_bert = torch.zeros(768, len(phone))\n        else:\n            if language_str in [\"ZH\"]:\n                bert = bert\n                ja_bert = torch.zeros(768, len(phone))\n            elif language_str in [\"JP\", \"EN\", \"ZH_MIX_EN\", \"KR\", 'SP', 'ES', 'FR', 'DE', 'RU']:\n                ja_bert = bert\n                bert = torch.zeros(1024, len(phone))\n            else:\n                raise\n                bert = torch.zeros(1024, len(phone))\n                ja_bert = torch.zeros(768, len(phone))\n        assert bert.shape[-1] == len(phone)\n        phone = torch.LongTensor(phone)\n        tone = torch.LongTensor(tone)\n        language = torch.LongTensor(language)\n        return bert, ja_bert, phone, tone, language\n\n    def get_sid(self, sid):\n        sid = torch.LongTensor([int(sid)])\n        return sid\n\n    def __getitem__(self, index):\n        return self.get_audio_text_speaker_pair(self.audiopaths_sid_text[index])\n\n    def __len__(self):\n        return len(self.audiopaths_sid_text)\n\n\nclass TextAudioSpeakerCollate:\n    \"\"\"Zero-pads model inputs and targets\"\"\"\n\n    def __init__(self, return_ids=False):\n        self.return_ids = return_ids\n\n    def __call__(self, batch):\n        \"\"\"Collate's training batch from normalized text, audio and speaker identities\n        PARAMS\n        ------\n        batch: [text_normalized, spec_normalized, wav_normalized, sid]\n        \"\"\"\n        # Right zero-pad all one-hot text sequences to max input length\n        _, ids_sorted_decreasing = torch.sort(\n            torch.LongTensor([x[1].size(1) for x in batch]), dim=0, descending=True\n        )\n\n        max_text_len = max([len(x[0]) for x in batch])\n        max_spec_len = max([x[1].size(1) for x in batch])\n        max_wav_len = max([x[2].size(1) for x in batch])\n\n        text_lengths = torch.LongTensor(len(batch))\n        spec_lengths = torch.LongTensor(len(batch))\n        wav_lengths = torch.LongTensor(len(batch))\n        sid = torch.LongTensor(len(batch))\n\n        text_padded = torch.LongTensor(len(batch), max_text_len)\n        tone_padded = torch.LongTensor(len(batch), max_text_len)\n        language_padded = torch.LongTensor(len(batch), max_text_len)\n        bert_padded = torch.FloatTensor(len(batch), 1024, max_text_len)\n        ja_bert_padded = torch.FloatTensor(len(batch), 768, max_text_len)\n\n        spec_padded = torch.FloatTensor(len(batch), batch[0][1].size(0), max_spec_len)\n        wav_padded = torch.FloatTensor(len(batch), 1, max_wav_len)\n        text_padded.zero_()\n        tone_padded.zero_()\n        language_padded.zero_()\n        spec_padded.zero_()\n        wav_padded.zero_()\n        bert_padded.zero_()\n        ja_bert_padded.zero_()\n        for i in range(len(ids_sorted_decreasing)):\n            row = batch[ids_sorted_decreasing[i]]\n\n            text = row[0]\n            text_padded[i, : text.size(0)] = text\n            text_lengths[i] = text.size(0)\n\n            spec = row[1]\n            spec_padded[i, :, : spec.size(1)] = spec\n            spec_lengths[i] = spec.size(1)\n\n            wav = row[2]\n            wav_padded[i, :, : wav.size(1)] = wav\n            wav_lengths[i] = wav.size(1)\n\n            sid[i] = row[3]\n\n            tone = row[4]\n            tone_padded[i, : tone.size(0)] = tone\n\n            language = row[5]\n            language_padded[i, : language.size(0)] = language\n\n            bert = row[6]\n            bert_padded[i, :, : bert.size(1)] = bert\n\n            ja_bert = row[7]\n            ja_bert_padded[i, :, : ja_bert.size(1)] = ja_bert\n\n        return (\n            text_padded,\n            text_lengths,\n            spec_padded,\n            spec_lengths,\n            wav_padded,\n            wav_lengths,\n            sid,\n            tone_padded,\n            language_padded,\n            bert_padded,\n            ja_bert_padded,\n        )\n\n\nclass DistributedBucketSampler(torch.utils.data.distributed.DistributedSampler):\n    \"\"\"\n    Maintain similar input lengths in a batch.\n    Length groups are specified by boundaries.\n    Ex) boundaries = [b1, b2, b3] -> any batch is included either {x | b1 < length(x) <=b2} or {x | b2 < length(x) <= b3}.\n\n    It removes samples which are not included in the boundaries.\n    Ex) boundaries = [b1, b2, b3] -> any x s.t. length(x) <= b1 or length(x) > b3 are discarded.\n    \"\"\"\n\n    def __init__(\n        self,\n        dataset,\n        batch_size,\n        boundaries,\n        num_replicas=None,\n        rank=None,\n        shuffle=True,\n    ):\n        super().__init__(dataset, num_replicas=num_replicas, rank=rank, shuffle=shuffle)\n        self.lengths = dataset.lengths\n        self.batch_size = batch_size\n        self.boundaries = boundaries\n\n        self.buckets, self.num_samples_per_bucket = self._create_buckets()\n        self.total_size = sum(self.num_samples_per_bucket)\n        self.num_samples = self.total_size // self.num_replicas\n        print('buckets:', self.num_samples_per_bucket)\n\n    def _create_buckets(self):\n        buckets = [[] for _ in range(len(self.boundaries) - 1)]\n        for i in range(len(self.lengths)):\n            length = self.lengths[i]\n            idx_bucket = self._bisect(length)\n            if idx_bucket != -1:\n                buckets[idx_bucket].append(i)\n\n        try:\n            for i in range(len(buckets) - 1, 0, -1):\n                if len(buckets[i]) == 0:\n                    buckets.pop(i)\n                    self.boundaries.pop(i + 1)\n            assert all(len(bucket) > 0 for bucket in buckets)\n        # When one bucket is not traversed\n        except Exception as e:\n            print(\"Bucket warning \", e)\n            for i in range(len(buckets) - 1, -1, -1):\n                if len(buckets[i]) == 0:\n                    buckets.pop(i)\n                    self.boundaries.pop(i + 1)\n\n        num_samples_per_bucket = []\n        for i in range(len(buckets)):\n            len_bucket = len(buckets[i])\n            total_batch_size = self.num_replicas * self.batch_size\n            rem = (\n                total_batch_size - (len_bucket % total_batch_size)\n            ) % total_batch_size\n            num_samples_per_bucket.append(len_bucket + rem)\n        return buckets, num_samples_per_bucket\n\n    def __iter__(self):\n        # deterministically shuffle based on epoch\n        g = torch.Generator()\n        g.manual_seed(self.epoch)\n\n        indices = []\n        if self.shuffle:\n            for bucket in self.buckets:\n                indices.append(torch.randperm(len(bucket), generator=g).tolist())\n        else:\n            for bucket in self.buckets:\n                indices.append(list(range(len(bucket))))\n\n        batches = []\n        for i in range(len(self.buckets)):\n            bucket = self.buckets[i]\n            len_bucket = len(bucket)\n            if len_bucket == 0:\n                continue\n            ids_bucket = indices[i]\n            num_samples_bucket = self.num_samples_per_bucket[i]\n\n            # add extra samples to make it evenly divisible\n            rem = num_samples_bucket - len_bucket\n            ids_bucket = (\n                ids_bucket\n                + ids_bucket * (rem // len_bucket)\n                + ids_bucket[: (rem % len_bucket)]\n            )\n\n            # subsample\n            ids_bucket = ids_bucket[self.rank :: self.num_replicas]\n\n            # batching\n            for j in range(len(ids_bucket) // self.batch_size):\n                batch = [\n                    bucket[idx]\n                    for idx in ids_bucket[\n                        j * self.batch_size : (j + 1) * self.batch_size\n                    ]\n                ]\n                batches.append(batch)\n\n        if self.shuffle:\n            batch_ids = torch.randperm(len(batches), generator=g).tolist()\n            batches = [batches[i] for i in batch_ids]\n        self.batches = batches\n\n        assert len(self.batches) * self.batch_size == self.num_samples\n        return iter(self.batches)\n\n    def _bisect(self, x, lo=0, hi=None):\n        if hi is None:\n            hi = len(self.boundaries) - 1\n\n        if hi > lo:\n            mid = (hi + lo) // 2\n            if self.boundaries[mid] < x and x <= self.boundaries[mid + 1]:\n                return mid\n            elif x <= self.boundaries[mid]:\n                return self._bisect(x, lo, mid)\n            else:\n                return self._bisect(x, mid + 1, hi)\n        else:\n            return -1\n\n    def __len__(self):\n        return self.num_samples // self.batch_size\n"
  },
  {
    "path": "xinference/thirdparty/melo/download_utils.py",
    "content": "import torch\nimport os\nfrom . import utils\nfrom cached_path import cached_path\nfrom huggingface_hub import hf_hub_download\n\nDOWNLOAD_CKPT_URLS = {\n    'EN': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/EN/checkpoint.pth',\n    'EN_V2': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/EN_V2/checkpoint.pth',\n    'FR': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/FR/checkpoint.pth',\n    'JP': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/JP/checkpoint.pth',\n    'ES': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/ES/checkpoint.pth',\n    'ZH': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/ZH/checkpoint.pth',\n    'KR': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/KR/checkpoint.pth',\n}\n\nDOWNLOAD_CONFIG_URLS = {\n    'EN': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/EN/config.json',\n    'EN_V2': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/EN_V2/config.json',\n    'FR': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/FR/config.json',\n    'JP': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/JP/config.json',\n    'ES': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/ES/config.json',\n    'ZH': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/ZH/config.json',\n    'KR': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/KR/config.json',\n}\n\nPRETRAINED_MODELS = {\n    'G.pth': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/pretrained/G.pth',\n    'D.pth': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/pretrained/D.pth',\n    'DUR.pth': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/pretrained/DUR.pth',\n}\n\nLANG_TO_HF_REPO_ID = {\n    'EN': 'myshell-ai/MeloTTS-English',\n    'EN_V2': 'myshell-ai/MeloTTS-English-v2',\n    'EN_NEWEST': 'myshell-ai/MeloTTS-English-v3',\n    'FR': 'myshell-ai/MeloTTS-French',\n    'JP': 'myshell-ai/MeloTTS-Japanese',\n    'ES': 'myshell-ai/MeloTTS-Spanish',\n    'ZH': 'myshell-ai/MeloTTS-Chinese',\n    'KR': 'myshell-ai/MeloTTS-Korean',\n}\n\ndef load_or_download_config(locale, use_hf=True, config_path=None):\n    if config_path is None:\n        language = locale.split('-')[0].upper()\n        if use_hf:\n            assert language in LANG_TO_HF_REPO_ID\n            config_path = hf_hub_download(repo_id=LANG_TO_HF_REPO_ID[language], filename=\"config.json\")\n        else:\n            assert language in DOWNLOAD_CONFIG_URLS\n            config_path = cached_path(DOWNLOAD_CONFIG_URLS[language])\n    return utils.get_hparams_from_file(config_path)\n\ndef load_or_download_model(locale, device, use_hf=True, ckpt_path=None):\n    if ckpt_path is None:\n        language = locale.split('-')[0].upper()\n        if use_hf:\n            assert language in LANG_TO_HF_REPO_ID\n            ckpt_path = hf_hub_download(repo_id=LANG_TO_HF_REPO_ID[language], filename=\"checkpoint.pth\")\n        else:\n            assert language in DOWNLOAD_CKPT_URLS\n            ckpt_path = cached_path(DOWNLOAD_CKPT_URLS[language])\n    return torch.load(ckpt_path, map_location=device)\n\ndef load_pretrain_model():\n    return [cached_path(url) for url in PRETRAINED_MODELS.values()]\n"
  },
  {
    "path": "xinference/thirdparty/melo/infer.py",
    "content": "import os\nimport click\nfrom melo.api import TTS\n\n    \n    \n@click.command()\n@click.option('--ckpt_path', '-m', type=str, default=None, help=\"Path to the checkpoint file\")\n@click.option('--text', '-t', type=str, default=None, help=\"Text to speak\")\n@click.option('--language', '-l', type=str, default=\"EN\", help=\"Language of the model\")\n@click.option('--output_dir', '-o', type=str, default=\"outputs\", help=\"Path to the output\")\ndef main(ckpt_path, text, language, output_dir):\n    if ckpt_path is None:\n        raise ValueError(\"The model_path must be specified\")\n    \n    config_path = os.path.join(os.path.dirname(ckpt_path), 'config.json')\n    model = TTS(language=language, config_path=config_path, ckpt_path=ckpt_path)\n    \n    for spk_name, spk_id in model.hps.data.spk2id.items():\n        save_path = f'{output_dir}/{spk_name}/output.wav'\n        os.makedirs(os.path.dirname(save_path), exist_ok=True)\n        model.tts_to_file(text, spk_id, save_path)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/melo/init_downloads.py",
    "content": "\n\nif __name__ == '__main__':\n\n    from melo.api import TTS\n    device = 'auto'\n    models = {\n        'EN': TTS(language='EN', device=device),\n        'ES': TTS(language='ES', device=device),\n        'FR': TTS(language='FR', device=device),\n        'ZH': TTS(language='ZH', device=device),\n        'JP': TTS(language='JP', device=device),\n        'KR': TTS(language='KR', device=device),\n    }"
  },
  {
    "path": "xinference/thirdparty/melo/losses.py",
    "content": "import torch\n\n\ndef feature_loss(fmap_r, fmap_g):\n    loss = 0\n    for dr, dg in zip(fmap_r, fmap_g):\n        for rl, gl in zip(dr, dg):\n            rl = rl.float().detach()\n            gl = gl.float()\n            loss += torch.mean(torch.abs(rl - gl))\n\n    return loss * 2\n\n\ndef discriminator_loss(disc_real_outputs, disc_generated_outputs):\n    loss = 0\n    r_losses = []\n    g_losses = []\n    for dr, dg in zip(disc_real_outputs, disc_generated_outputs):\n        dr = dr.float()\n        dg = dg.float()\n        r_loss = torch.mean((1 - dr) ** 2)\n        g_loss = torch.mean(dg**2)\n        loss += r_loss + g_loss\n        r_losses.append(r_loss.item())\n        g_losses.append(g_loss.item())\n\n    return loss, r_losses, g_losses\n\n\ndef generator_loss(disc_outputs):\n    loss = 0\n    gen_losses = []\n    for dg in disc_outputs:\n        dg = dg.float()\n        l = torch.mean((1 - dg) ** 2)\n        gen_losses.append(l)\n        loss += l\n\n    return loss, gen_losses\n\n\ndef kl_loss(z_p, logs_q, m_p, logs_p, z_mask):\n    \"\"\"\n    z_p, logs_q: [b, h, t_t]\n    m_p, logs_p: [b, h, t_t]\n    \"\"\"\n    z_p = z_p.float()\n    logs_q = logs_q.float()\n    m_p = m_p.float()\n    logs_p = logs_p.float()\n    z_mask = z_mask.float()\n\n    kl = logs_p - logs_q - 0.5\n    kl += 0.5 * ((z_p - m_p) ** 2) * torch.exp(-2.0 * logs_p)\n    kl = torch.sum(kl * z_mask)\n    l = kl / torch.sum(z_mask)\n    return l\n"
  },
  {
    "path": "xinference/thirdparty/melo/main.py",
    "content": "import click\nimport warnings\nimport os\n\n\n@click.command\n@click.argument('text')\n@click.argument('output_path')\n@click.option(\"--file\", '-f', is_flag=True, show_default=True, default=False, help=\"Text is a file\")\n@click.option('--language', '-l', default='EN', help='Language, defaults to English', type=click.Choice(['EN', 'ES', 'FR', 'ZH', 'JP', 'KR'], case_sensitive=False))\n@click.option('--speaker', '-spk', default='EN-Default', help='Speaker ID, only for English, leave empty for default, ignored if not English. If English, defaults to \"EN-Default\"', type=click.Choice(['EN-Default', 'EN-US', 'EN-BR', 'EN_INDIA', 'EN-AU']))\n@click.option('--speed', '-s', default=1.0, help='Speed, defaults to 1.0', type=float)\n@click.option('--device', '-d', default='auto', help='Device, defaults to auto')\ndef main(text, file, output_path, language, speaker, speed, device):\n    if file:\n        if not os.path.exists(text):\n            raise FileNotFoundError(f'Trying to load text from file due to --file/-f flag, but file not found. Remove the --file/-f flag to pass a string.')\n        else:\n            with open(text) as f:\n                text = f.read().strip()\n    if text == '':\n        raise ValueError('You entered empty text or the file you passed was empty.')\n    language = language.upper()\n    if language == '': language = 'EN'\n    if speaker == '': speaker = None\n    if (not language == 'EN') and speaker:\n        warnings.warn('You specified a speaker but the language is English.')\n    from melo.api import TTS\n    model = TTS(language=language, device=device)\n    speaker_ids = model.hps.data.spk2id\n    if language == 'EN':\n        if not speaker: speaker = 'EN-Default'\n        spkr = speaker_ids[speaker]\n    else:\n        spkr = speaker_ids[list(speaker_ids.keys())[0]]\n    model.tts_to_file(text, spkr, output_path, speed=speed)\n"
  },
  {
    "path": "xinference/thirdparty/melo/mel_processing.py",
    "content": "import torch\nimport torch.utils.data\nimport librosa\nfrom librosa.filters import mel as librosa_mel_fn\n\nMAX_WAV_VALUE = 32768.0\n\n\ndef dynamic_range_compression_torch(x, C=1, clip_val=1e-5):\n    \"\"\"\n    PARAMS\n    ------\n    C: compression factor\n    \"\"\"\n    return torch.log(torch.clamp(x, min=clip_val) * C)\n\n\ndef dynamic_range_decompression_torch(x, C=1):\n    \"\"\"\n    PARAMS\n    ------\n    C: compression factor used to compress\n    \"\"\"\n    return torch.exp(x) / C\n\n\ndef spectral_normalize_torch(magnitudes):\n    output = dynamic_range_compression_torch(magnitudes)\n    return output\n\n\ndef spectral_de_normalize_torch(magnitudes):\n    output = dynamic_range_decompression_torch(magnitudes)\n    return output\n\n\nmel_basis = {}\nhann_window = {}\n\n\ndef spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center=False):\n    if torch.min(y) < -1.1:\n        print(\"min value is \", torch.min(y))\n    if torch.max(y) > 1.1:\n        print(\"max value is \", torch.max(y))\n\n    global hann_window\n    dtype_device = str(y.dtype) + \"_\" + str(y.device)\n    wnsize_dtype_device = str(win_size) + \"_\" + dtype_device\n    if wnsize_dtype_device not in hann_window:\n        hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(\n            dtype=y.dtype, device=y.device\n        )\n\n    y = torch.nn.functional.pad(\n        y.unsqueeze(1),\n        (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)),\n        mode=\"reflect\",\n    )\n    y = y.squeeze(1)\n\n    spec = torch.stft(\n        y,\n        n_fft,\n        hop_length=hop_size,\n        win_length=win_size,\n        window=hann_window[wnsize_dtype_device],\n        center=center,\n        pad_mode=\"reflect\",\n        normalized=False,\n        onesided=True,\n        return_complex=False,\n    )\n\n    spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6)\n    return spec\n\n\ndef spectrogram_torch_conv(y, n_fft, sampling_rate, hop_size, win_size, center=False):\n    global hann_window\n    dtype_device = str(y.dtype) + '_' + str(y.device)\n    wnsize_dtype_device = str(win_size) + '_' + dtype_device\n    if wnsize_dtype_device not in hann_window:\n        hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(dtype=y.dtype, device=y.device)\n\n    y = torch.nn.functional.pad(y.unsqueeze(1), (int((n_fft-hop_size)/2), int((n_fft-hop_size)/2)), mode='reflect')\n    \n    # ******************** original ************************#\n    # y = y.squeeze(1)\n    # spec1 = torch.stft(y, n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],\n    #                   center=center, pad_mode='reflect', normalized=False, onesided=True, return_complex=False)\n\n    # ******************** ConvSTFT ************************#\n    freq_cutoff = n_fft // 2 + 1\n    fourier_basis = torch.view_as_real(torch.fft.fft(torch.eye(n_fft)))\n    forward_basis = fourier_basis[:freq_cutoff].permute(2, 0, 1).reshape(-1, 1, fourier_basis.shape[1])\n    forward_basis = forward_basis * torch.as_tensor(librosa.util.pad_center(torch.hann_window(win_size), size=n_fft)).float()\n\n    import torch.nn.functional as F\n\n    # if center:\n    #     signal = F.pad(y[:, None, None, :], (n_fft // 2, n_fft // 2, 0, 0), mode = 'reflect').squeeze(1)\n    assert center is False\n\n    forward_transform_squared = F.conv1d(y, forward_basis.to(y.device), stride = hop_size)\n    spec2 = torch.stack([forward_transform_squared[:, :freq_cutoff, :], forward_transform_squared[:, freq_cutoff:, :]], dim = -1)\n\n\n    # ******************** Verification ************************#\n    spec1 = torch.stft(y.squeeze(1), n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],\n                      center=center, pad_mode='reflect', normalized=False, onesided=True, return_complex=False)\n    assert torch.allclose(spec1, spec2, atol=1e-4)\n\n    spec = torch.sqrt(spec2.pow(2).sum(-1) + 1e-6)\n    return spec\n\n\ndef spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax):\n    global mel_basis\n    dtype_device = str(spec.dtype) + \"_\" + str(spec.device)\n    fmax_dtype_device = str(fmax) + \"_\" + dtype_device\n    if fmax_dtype_device not in mel_basis:\n        mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax)\n        mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to(\n            dtype=spec.dtype, device=spec.device\n        )\n    spec = torch.matmul(mel_basis[fmax_dtype_device], spec)\n    spec = spectral_normalize_torch(spec)\n    return spec\n\n\ndef mel_spectrogram_torch(\n    y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False\n):\n    global mel_basis, hann_window\n    dtype_device = str(y.dtype) + \"_\" + str(y.device)\n    fmax_dtype_device = str(fmax) + \"_\" + dtype_device\n    wnsize_dtype_device = str(win_size) + \"_\" + dtype_device\n    if fmax_dtype_device not in mel_basis:\n        mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax)\n        mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to(\n            dtype=y.dtype, device=y.device\n        )\n    if wnsize_dtype_device not in hann_window:\n        hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(\n            dtype=y.dtype, device=y.device\n        )\n\n    y = torch.nn.functional.pad(\n        y.unsqueeze(1),\n        (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)),\n        mode=\"reflect\",\n    )\n    y = y.squeeze(1)\n\n    spec = torch.stft(\n        y,\n        n_fft,\n        hop_length=hop_size,\n        win_length=win_size,\n        window=hann_window[wnsize_dtype_device],\n        center=center,\n        pad_mode=\"reflect\",\n        normalized=False,\n        onesided=True,\n        return_complex=False,\n    )\n\n    spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6)\n\n    spec = torch.matmul(mel_basis[fmax_dtype_device], spec)\n    spec = spectral_normalize_torch(spec)\n\n    return spec\n"
  },
  {
    "path": "xinference/thirdparty/melo/models.py",
    "content": "import math\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom melo import commons\nfrom melo import modules\nfrom melo import attentions\n\nfrom torch.nn import Conv1d, ConvTranspose1d, Conv2d\nfrom torch.nn.utils import weight_norm, remove_weight_norm, spectral_norm\n\nfrom melo.commons import init_weights, get_padding\nimport melo.monotonic_align as monotonic_align\n\n\nclass DurationDiscriminator(nn.Module):  # vits2\n    def __init__(\n        self, in_channels, filter_channels, kernel_size, p_dropout, gin_channels=0\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.gin_channels = gin_channels\n\n        self.drop = nn.Dropout(p_dropout)\n        self.conv_1 = nn.Conv1d(\n            in_channels, filter_channels, kernel_size, padding=kernel_size // 2\n        )\n        self.norm_1 = modules.LayerNorm(filter_channels)\n        self.conv_2 = nn.Conv1d(\n            filter_channels, filter_channels, kernel_size, padding=kernel_size // 2\n        )\n        self.norm_2 = modules.LayerNorm(filter_channels)\n        self.dur_proj = nn.Conv1d(1, filter_channels, 1)\n\n        self.pre_out_conv_1 = nn.Conv1d(\n            2 * filter_channels, filter_channels, kernel_size, padding=kernel_size // 2\n        )\n        self.pre_out_norm_1 = modules.LayerNorm(filter_channels)\n        self.pre_out_conv_2 = nn.Conv1d(\n            filter_channels, filter_channels, kernel_size, padding=kernel_size // 2\n        )\n        self.pre_out_norm_2 = modules.LayerNorm(filter_channels)\n\n        if gin_channels != 0:\n            self.cond = nn.Conv1d(gin_channels, in_channels, 1)\n\n        self.output_layer = nn.Sequential(nn.Linear(filter_channels, 1), nn.Sigmoid())\n\n    def forward_probability(self, x, x_mask, dur, g=None):\n        dur = self.dur_proj(dur)\n        x = torch.cat([x, dur], dim=1)\n        x = self.pre_out_conv_1(x * x_mask)\n        x = torch.relu(x)\n        x = self.pre_out_norm_1(x)\n        x = self.drop(x)\n        x = self.pre_out_conv_2(x * x_mask)\n        x = torch.relu(x)\n        x = self.pre_out_norm_2(x)\n        x = self.drop(x)\n        x = x * x_mask\n        x = x.transpose(1, 2)\n        output_prob = self.output_layer(x)\n        return output_prob\n\n    def forward(self, x, x_mask, dur_r, dur_hat, g=None):\n        x = torch.detach(x)\n        if g is not None:\n            g = torch.detach(g)\n            x = x + self.cond(g)\n        x = self.conv_1(x * x_mask)\n        x = torch.relu(x)\n        x = self.norm_1(x)\n        x = self.drop(x)\n        x = self.conv_2(x * x_mask)\n        x = torch.relu(x)\n        x = self.norm_2(x)\n        x = self.drop(x)\n\n        output_probs = []\n        for dur in [dur_r, dur_hat]:\n            output_prob = self.forward_probability(x, x_mask, dur, g)\n            output_probs.append(output_prob)\n\n        return output_probs\n\n\nclass TransformerCouplingBlock(nn.Module):\n    def __init__(\n        self,\n        channels,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size,\n        p_dropout,\n        n_flows=4,\n        gin_channels=0,\n        share_parameter=False,\n    ):\n        super().__init__()\n        self.channels = channels\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.n_flows = n_flows\n        self.gin_channels = gin_channels\n\n        self.flows = nn.ModuleList()\n\n        self.wn = (\n            attentions.FFT(\n                hidden_channels,\n                filter_channels,\n                n_heads,\n                n_layers,\n                kernel_size,\n                p_dropout,\n                isflow=True,\n                gin_channels=self.gin_channels,\n            )\n            if share_parameter\n            else None\n        )\n\n        for i in range(n_flows):\n            self.flows.append(\n                modules.TransformerCouplingLayer(\n                    channels,\n                    hidden_channels,\n                    kernel_size,\n                    n_layers,\n                    n_heads,\n                    p_dropout,\n                    filter_channels,\n                    mean_only=True,\n                    wn_sharing_parameter=self.wn,\n                    gin_channels=self.gin_channels,\n                )\n            )\n            self.flows.append(modules.Flip())\n\n    def forward(self, x, x_mask, g=None, reverse=False):\n        if not reverse:\n            for flow in self.flows:\n                x, _ = flow(x, x_mask, g=g, reverse=reverse)\n        else:\n            for flow in reversed(self.flows):\n                x = flow(x, x_mask, g=g, reverse=reverse)\n        return x\n\n\nclass StochasticDurationPredictor(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        filter_channels,\n        kernel_size,\n        p_dropout,\n        n_flows=4,\n        gin_channels=0,\n    ):\n        super().__init__()\n        filter_channels = in_channels  # it needs to be removed from future version.\n        self.in_channels = in_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.n_flows = n_flows\n        self.gin_channels = gin_channels\n\n        self.log_flow = modules.Log()\n        self.flows = nn.ModuleList()\n        self.flows.append(modules.ElementwiseAffine(2))\n        for i in range(n_flows):\n            self.flows.append(\n                modules.ConvFlow(2, filter_channels, kernel_size, n_layers=3)\n            )\n            self.flows.append(modules.Flip())\n\n        self.post_pre = nn.Conv1d(1, filter_channels, 1)\n        self.post_proj = nn.Conv1d(filter_channels, filter_channels, 1)\n        self.post_convs = modules.DDSConv(\n            filter_channels, kernel_size, n_layers=3, p_dropout=p_dropout\n        )\n        self.post_flows = nn.ModuleList()\n        self.post_flows.append(modules.ElementwiseAffine(2))\n        for i in range(4):\n            self.post_flows.append(\n                modules.ConvFlow(2, filter_channels, kernel_size, n_layers=3)\n            )\n            self.post_flows.append(modules.Flip())\n\n        self.pre = nn.Conv1d(in_channels, filter_channels, 1)\n        self.proj = nn.Conv1d(filter_channels, filter_channels, 1)\n        self.convs = modules.DDSConv(\n            filter_channels, kernel_size, n_layers=3, p_dropout=p_dropout\n        )\n        if gin_channels != 0:\n            self.cond = nn.Conv1d(gin_channels, filter_channels, 1)\n\n    def forward(self, x, x_mask, w=None, g=None, reverse=False, noise_scale=1.0):\n        x = torch.detach(x)\n        x = self.pre(x)\n        if g is not None:\n            g = torch.detach(g)\n            x = x + self.cond(g)\n        x = self.convs(x, x_mask)\n        x = self.proj(x) * x_mask\n\n        if not reverse:\n            flows = self.flows\n            assert w is not None\n\n            logdet_tot_q = 0\n            h_w = self.post_pre(w)\n            h_w = self.post_convs(h_w, x_mask)\n            h_w = self.post_proj(h_w) * x_mask\n            e_q = (\n                torch.randn(w.size(0), 2, w.size(2)).to(device=x.device, dtype=x.dtype)\n                * x_mask\n            )\n            z_q = e_q\n            for flow in self.post_flows:\n                z_q, logdet_q = flow(z_q, x_mask, g=(x + h_w))\n                logdet_tot_q += logdet_q\n            z_u, z1 = torch.split(z_q, [1, 1], 1)\n            u = torch.sigmoid(z_u) * x_mask\n            z0 = (w - u) * x_mask\n            logdet_tot_q += torch.sum(\n                (F.logsigmoid(z_u) + F.logsigmoid(-z_u)) * x_mask, [1, 2]\n            )\n            logq = (\n                torch.sum(-0.5 * (math.log(2 * math.pi) + (e_q**2)) * x_mask, [1, 2])\n                - logdet_tot_q\n            )\n\n            logdet_tot = 0\n            z0, logdet = self.log_flow(z0, x_mask)\n            logdet_tot += logdet\n            z = torch.cat([z0, z1], 1)\n            for flow in flows:\n                z, logdet = flow(z, x_mask, g=x, reverse=reverse)\n                logdet_tot = logdet_tot + logdet\n            nll = (\n                torch.sum(0.5 * (math.log(2 * math.pi) + (z**2)) * x_mask, [1, 2])\n                - logdet_tot\n            )\n            return nll + logq  # [b]\n        else:\n            flows = list(reversed(self.flows))\n            flows = flows[:-2] + [flows[-1]]  # remove a useless vflow\n            z = (\n                torch.randn(x.size(0), 2, x.size(2)).to(device=x.device, dtype=x.dtype)\n                * noise_scale\n            )\n            for flow in flows:\n                z = flow(z, x_mask, g=x, reverse=reverse)\n            z0, z1 = torch.split(z, [1, 1], 1)\n            logw = z0\n            return logw\n\n\nclass DurationPredictor(nn.Module):\n    def __init__(\n        self, in_channels, filter_channels, kernel_size, p_dropout, gin_channels=0\n    ):\n        super().__init__()\n\n        self.in_channels = in_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.gin_channels = gin_channels\n\n        self.drop = nn.Dropout(p_dropout)\n        self.conv_1 = nn.Conv1d(\n            in_channels, filter_channels, kernel_size, padding=kernel_size // 2\n        )\n        self.norm_1 = modules.LayerNorm(filter_channels)\n        self.conv_2 = nn.Conv1d(\n            filter_channels, filter_channels, kernel_size, padding=kernel_size // 2\n        )\n        self.norm_2 = modules.LayerNorm(filter_channels)\n        self.proj = nn.Conv1d(filter_channels, 1, 1)\n\n        if gin_channels != 0:\n            self.cond = nn.Conv1d(gin_channels, in_channels, 1)\n\n    def forward(self, x, x_mask, g=None):\n        x = torch.detach(x)\n        if g is not None:\n            g = torch.detach(g)\n            x = x + self.cond(g)\n        x = self.conv_1(x * x_mask)\n        x = torch.relu(x)\n        x = self.norm_1(x)\n        x = self.drop(x)\n        x = self.conv_2(x * x_mask)\n        x = torch.relu(x)\n        x = self.norm_2(x)\n        x = self.drop(x)\n        x = self.proj(x * x_mask)\n        return x * x_mask\n\n\nclass TextEncoder(nn.Module):\n    def __init__(\n        self,\n        n_vocab,\n        out_channels,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size,\n        p_dropout,\n        gin_channels=0,\n        num_languages=None,\n        num_tones=None,\n    ):\n        super().__init__()\n        if num_languages is None:\n            from text import num_languages\n        if num_tones is None:\n            from text import num_tones\n        self.n_vocab = n_vocab\n        self.out_channels = out_channels\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.gin_channels = gin_channels\n        self.emb = nn.Embedding(n_vocab, hidden_channels)\n        nn.init.normal_(self.emb.weight, 0.0, hidden_channels**-0.5)\n        self.tone_emb = nn.Embedding(num_tones, hidden_channels)\n        nn.init.normal_(self.tone_emb.weight, 0.0, hidden_channels**-0.5)\n        self.language_emb = nn.Embedding(num_languages, hidden_channels)\n        nn.init.normal_(self.language_emb.weight, 0.0, hidden_channels**-0.5)\n        self.bert_proj = nn.Conv1d(1024, hidden_channels, 1)\n        self.ja_bert_proj = nn.Conv1d(768, hidden_channels, 1)\n\n        self.encoder = attentions.Encoder(\n            hidden_channels,\n            filter_channels,\n            n_heads,\n            n_layers,\n            kernel_size,\n            p_dropout,\n            gin_channels=self.gin_channels,\n        )\n        self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1)\n\n    def forward(self, x, x_lengths, tone, language, bert, ja_bert, g=None):\n        bert_emb = self.bert_proj(bert).transpose(1, 2)\n        ja_bert_emb = self.ja_bert_proj(ja_bert).transpose(1, 2)\n        x = (\n            self.emb(x)\n            + self.tone_emb(tone)\n            + self.language_emb(language)\n            + bert_emb\n            + ja_bert_emb\n        ) * math.sqrt(\n            self.hidden_channels\n        )  # [b, t, h]\n        x = torch.transpose(x, 1, -1)  # [b, h, t]\n        x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to(\n            x.dtype\n        )\n\n        x = self.encoder(x * x_mask, x_mask, g=g)\n        stats = self.proj(x) * x_mask\n\n        m, logs = torch.split(stats, self.out_channels, dim=1)\n        return x, m, logs, x_mask\n\n\nclass ResidualCouplingBlock(nn.Module):\n    def __init__(\n        self,\n        channels,\n        hidden_channels,\n        kernel_size,\n        dilation_rate,\n        n_layers,\n        n_flows=4,\n        gin_channels=0,\n    ):\n        super().__init__()\n        self.channels = channels\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.n_flows = n_flows\n        self.gin_channels = gin_channels\n\n        self.flows = nn.ModuleList()\n        for i in range(n_flows):\n            self.flows.append(\n                modules.ResidualCouplingLayer(\n                    channels,\n                    hidden_channels,\n                    kernel_size,\n                    dilation_rate,\n                    n_layers,\n                    gin_channels=gin_channels,\n                    mean_only=True,\n                )\n            )\n            self.flows.append(modules.Flip())\n\n    def forward(self, x, x_mask, g=None, reverse=False):\n        if not reverse:\n            for flow in self.flows:\n                x, _ = flow(x, x_mask, g=g, reverse=reverse)\n        else:\n            for flow in reversed(self.flows):\n                x = flow(x, x_mask, g=g, reverse=reverse)\n        return x\n\n\nclass PosteriorEncoder(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        hidden_channels,\n        kernel_size,\n        dilation_rate,\n        n_layers,\n        gin_channels=0,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.gin_channels = gin_channels\n\n        self.pre = nn.Conv1d(in_channels, hidden_channels, 1)\n        self.enc = modules.WN(\n            hidden_channels,\n            kernel_size,\n            dilation_rate,\n            n_layers,\n            gin_channels=gin_channels,\n        )\n        self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1)\n\n    def forward(self, x, x_lengths, g=None, tau=1.0):\n        x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to(\n            x.dtype\n        )\n        x = self.pre(x) * x_mask\n        x = self.enc(x, x_mask, g=g)\n        stats = self.proj(x) * x_mask\n        m, logs = torch.split(stats, self.out_channels, dim=1)\n        z = (m + torch.randn_like(m) * tau * torch.exp(logs)) * x_mask\n        return z, m, logs, x_mask\n\n\nclass Generator(torch.nn.Module):\n    def __init__(\n        self,\n        initial_channel,\n        resblock,\n        resblock_kernel_sizes,\n        resblock_dilation_sizes,\n        upsample_rates,\n        upsample_initial_channel,\n        upsample_kernel_sizes,\n        gin_channels=0,\n    ):\n        super(Generator, self).__init__()\n        self.num_kernels = len(resblock_kernel_sizes)\n        self.num_upsamples = len(upsample_rates)\n        self.conv_pre = Conv1d(\n            initial_channel, upsample_initial_channel, 7, 1, padding=3\n        )\n        resblock = modules.ResBlock1 if resblock == \"1\" else modules.ResBlock2\n\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):\n            self.ups.append(\n                weight_norm(\n                    ConvTranspose1d(\n                        upsample_initial_channel // (2**i),\n                        upsample_initial_channel // (2 ** (i + 1)),\n                        k,\n                        u,\n                        padding=(k - u) // 2,\n                    )\n                )\n            )\n\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = upsample_initial_channel // (2 ** (i + 1))\n            for j, (k, d) in enumerate(\n                zip(resblock_kernel_sizes, resblock_dilation_sizes)\n            ):\n                self.resblocks.append(resblock(ch, k, d))\n\n        self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False)\n        self.ups.apply(init_weights)\n\n        if gin_channels != 0:\n            self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1)\n\n    def forward(self, x, g=None):\n        x = self.conv_pre(x)\n        if g is not None:\n            x = x + self.cond(g)\n\n        for i in range(self.num_upsamples):\n            x = F.leaky_relu(x, modules.LRELU_SLOPE)\n            x = self.ups[i](x)\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n        x = F.leaky_relu(x)\n        x = self.conv_post(x)\n        x = torch.tanh(x)\n\n        return x\n\n    def remove_weight_norm(self):\n        print(\"Removing weight norm...\")\n        for layer in self.ups:\n            remove_weight_norm(layer)\n        for layer in self.resblocks:\n            layer.remove_weight_norm()\n\n\nclass DiscriminatorP(torch.nn.Module):\n    def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False):\n        super(DiscriminatorP, self).__init__()\n        self.period = period\n        self.use_spectral_norm = use_spectral_norm\n        norm_f = weight_norm if use_spectral_norm is False else spectral_norm\n        self.convs = nn.ModuleList(\n            [\n                norm_f(\n                    Conv2d(\n                        1,\n                        32,\n                        (kernel_size, 1),\n                        (stride, 1),\n                        padding=(get_padding(kernel_size, 1), 0),\n                    )\n                ),\n                norm_f(\n                    Conv2d(\n                        32,\n                        128,\n                        (kernel_size, 1),\n                        (stride, 1),\n                        padding=(get_padding(kernel_size, 1), 0),\n                    )\n                ),\n                norm_f(\n                    Conv2d(\n                        128,\n                        512,\n                        (kernel_size, 1),\n                        (stride, 1),\n                        padding=(get_padding(kernel_size, 1), 0),\n                    )\n                ),\n                norm_f(\n                    Conv2d(\n                        512,\n                        1024,\n                        (kernel_size, 1),\n                        (stride, 1),\n                        padding=(get_padding(kernel_size, 1), 0),\n                    )\n                ),\n                norm_f(\n                    Conv2d(\n                        1024,\n                        1024,\n                        (kernel_size, 1),\n                        1,\n                        padding=(get_padding(kernel_size, 1), 0),\n                    )\n                ),\n            ]\n        )\n        self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0)))\n\n    def forward(self, x):\n        fmap = []\n\n        # 1d to 2d\n        b, c, t = x.shape\n        if t % self.period != 0:  # pad first\n            n_pad = self.period - (t % self.period)\n            x = F.pad(x, (0, n_pad), \"reflect\")\n            t = t + n_pad\n        x = x.view(b, c, t // self.period, self.period)\n\n        for layer in self.convs:\n            x = layer(x)\n            x = F.leaky_relu(x, modules.LRELU_SLOPE)\n            fmap.append(x)\n        x = self.conv_post(x)\n        fmap.append(x)\n        x = torch.flatten(x, 1, -1)\n\n        return x, fmap\n\n\nclass DiscriminatorS(torch.nn.Module):\n    def __init__(self, use_spectral_norm=False):\n        super(DiscriminatorS, self).__init__()\n        norm_f = weight_norm if use_spectral_norm is False else spectral_norm\n        self.convs = nn.ModuleList(\n            [\n                norm_f(Conv1d(1, 16, 15, 1, padding=7)),\n                norm_f(Conv1d(16, 64, 41, 4, groups=4, padding=20)),\n                norm_f(Conv1d(64, 256, 41, 4, groups=16, padding=20)),\n                norm_f(Conv1d(256, 1024, 41, 4, groups=64, padding=20)),\n                norm_f(Conv1d(1024, 1024, 41, 4, groups=256, padding=20)),\n                norm_f(Conv1d(1024, 1024, 5, 1, padding=2)),\n            ]\n        )\n        self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1))\n\n    def forward(self, x):\n        fmap = []\n\n        for layer in self.convs:\n            x = layer(x)\n            x = F.leaky_relu(x, modules.LRELU_SLOPE)\n            fmap.append(x)\n        x = self.conv_post(x)\n        fmap.append(x)\n        x = torch.flatten(x, 1, -1)\n\n        return x, fmap\n\n\nclass MultiPeriodDiscriminator(torch.nn.Module):\n    def __init__(self, use_spectral_norm=False):\n        super(MultiPeriodDiscriminator, self).__init__()\n        periods = [2, 3, 5, 7, 11]\n\n        discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)]\n        discs = discs + [\n            DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods\n        ]\n        self.discriminators = nn.ModuleList(discs)\n\n    def forward(self, y, y_hat):\n        y_d_rs = []\n        y_d_gs = []\n        fmap_rs = []\n        fmap_gs = []\n        for i, d in enumerate(self.discriminators):\n            y_d_r, fmap_r = d(y)\n            y_d_g, fmap_g = d(y_hat)\n            y_d_rs.append(y_d_r)\n            y_d_gs.append(y_d_g)\n            fmap_rs.append(fmap_r)\n            fmap_gs.append(fmap_g)\n\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\nclass ReferenceEncoder(nn.Module):\n    \"\"\"\n    inputs --- [N, Ty/r, n_mels*r]  mels\n    outputs --- [N, ref_enc_gru_size]\n    \"\"\"\n\n    def __init__(self, spec_channels, gin_channels=0, layernorm=False):\n        super().__init__()\n        self.spec_channels = spec_channels\n        ref_enc_filters = [32, 32, 64, 64, 128, 128]\n        K = len(ref_enc_filters)\n        filters = [1] + ref_enc_filters\n        convs = [\n            weight_norm(\n                nn.Conv2d(\n                    in_channels=filters[i],\n                    out_channels=filters[i + 1],\n                    kernel_size=(3, 3),\n                    stride=(2, 2),\n                    padding=(1, 1),\n                )\n            )\n            for i in range(K)\n        ]\n        self.convs = nn.ModuleList(convs)\n        # self.wns = nn.ModuleList([weight_norm(num_features=ref_enc_filters[i]) for i in range(K)]) # noqa: E501\n\n        out_channels = self.calculate_channels(spec_channels, 3, 2, 1, K)\n        self.gru = nn.GRU(\n            input_size=ref_enc_filters[-1] * out_channels,\n            hidden_size=256 // 2,\n            batch_first=True,\n        )\n        self.proj = nn.Linear(128, gin_channels)\n        if layernorm:\n            self.layernorm = nn.LayerNorm(self.spec_channels)\n            print('[Ref Enc]: using layer norm')\n        else:\n            self.layernorm = None\n\n    def forward(self, inputs, mask=None):\n        N = inputs.size(0)\n\n        out = inputs.view(N, 1, -1, self.spec_channels)  # [N, 1, Ty, n_freqs]\n        if self.layernorm is not None:\n            out = self.layernorm(out)\n\n        for conv in self.convs:\n            out = conv(out)\n            # out = wn(out)\n            out = F.relu(out)  # [N, 128, Ty//2^K, n_mels//2^K]\n\n        out = out.transpose(1, 2)  # [N, Ty//2^K, 128, n_mels//2^K]\n        T = out.size(1)\n        N = out.size(0)\n        out = out.contiguous().view(N, T, -1)  # [N, Ty//2^K, 128*n_mels//2^K]\n\n        self.gru.flatten_parameters()\n        memory, out = self.gru(out)  # out --- [1, N, 128]\n\n        return self.proj(out.squeeze(0))\n\n    def calculate_channels(self, L, kernel_size, stride, pad, n_convs):\n        for i in range(n_convs):\n            L = (L - kernel_size + 2 * pad) // stride + 1\n        return L\n\n\nclass SynthesizerTrn(nn.Module):\n    \"\"\"\n    Synthesizer for Training\n    \"\"\"\n\n    def __init__(\n        self,\n        n_vocab,\n        spec_channels,\n        segment_size,\n        inter_channels,\n        hidden_channels,\n        filter_channels,\n        n_heads,\n        n_layers,\n        kernel_size,\n        p_dropout,\n        resblock,\n        resblock_kernel_sizes,\n        resblock_dilation_sizes,\n        upsample_rates,\n        upsample_initial_channel,\n        upsample_kernel_sizes,\n        n_speakers=256,\n        gin_channels=256,\n        use_sdp=True,\n        n_flow_layer=4,\n        n_layers_trans_flow=6,\n        flow_share_parameter=False,\n        use_transformer_flow=True,\n        use_vc=False,\n        num_languages=None,\n        num_tones=None,\n        norm_refenc=False,\n        **kwargs\n    ):\n        super().__init__()\n        self.n_vocab = n_vocab\n        self.spec_channels = spec_channels\n        self.inter_channels = inter_channels\n        self.hidden_channels = hidden_channels\n        self.filter_channels = filter_channels\n        self.n_heads = n_heads\n        self.n_layers = n_layers\n        self.kernel_size = kernel_size\n        self.p_dropout = p_dropout\n        self.resblock = resblock\n        self.resblock_kernel_sizes = resblock_kernel_sizes\n        self.resblock_dilation_sizes = resblock_dilation_sizes\n        self.upsample_rates = upsample_rates\n        self.upsample_initial_channel = upsample_initial_channel\n        self.upsample_kernel_sizes = upsample_kernel_sizes\n        self.segment_size = segment_size\n        self.n_speakers = n_speakers\n        self.gin_channels = gin_channels\n        self.n_layers_trans_flow = n_layers_trans_flow\n        self.use_spk_conditioned_encoder = kwargs.get(\n            \"use_spk_conditioned_encoder\", True\n        )\n        self.use_sdp = use_sdp\n        self.use_noise_scaled_mas = kwargs.get(\"use_noise_scaled_mas\", False)\n        self.mas_noise_scale_initial = kwargs.get(\"mas_noise_scale_initial\", 0.01)\n        self.noise_scale_delta = kwargs.get(\"noise_scale_delta\", 2e-6)\n        self.current_mas_noise_scale = self.mas_noise_scale_initial\n        if self.use_spk_conditioned_encoder and gin_channels > 0:\n            self.enc_gin_channels = gin_channels\n        else:\n            self.enc_gin_channels = 0\n        self.enc_p = TextEncoder(\n            n_vocab,\n            inter_channels,\n            hidden_channels,\n            filter_channels,\n            n_heads,\n            n_layers,\n            kernel_size,\n            p_dropout,\n            gin_channels=self.enc_gin_channels,\n            num_languages=num_languages,\n            num_tones=num_tones,\n        )\n        self.dec = Generator(\n            inter_channels,\n            resblock,\n            resblock_kernel_sizes,\n            resblock_dilation_sizes,\n            upsample_rates,\n            upsample_initial_channel,\n            upsample_kernel_sizes,\n            gin_channels=gin_channels,\n        )\n        self.enc_q = PosteriorEncoder(\n            spec_channels,\n            inter_channels,\n            hidden_channels,\n            5,\n            1,\n            16,\n            gin_channels=gin_channels,\n        )\n        if use_transformer_flow:\n            self.flow = TransformerCouplingBlock(\n                inter_channels,\n                hidden_channels,\n                filter_channels,\n                n_heads,\n                n_layers_trans_flow,\n                5,\n                p_dropout,\n                n_flow_layer,\n                gin_channels=gin_channels,\n                share_parameter=flow_share_parameter,\n            )\n        else:\n            self.flow = ResidualCouplingBlock(\n                inter_channels,\n                hidden_channels,\n                5,\n                1,\n                n_flow_layer,\n                gin_channels=gin_channels,\n            )\n        self.sdp = StochasticDurationPredictor(\n            hidden_channels, 192, 3, 0.5, 4, gin_channels=gin_channels\n        )\n        self.dp = DurationPredictor(\n            hidden_channels, 256, 3, 0.5, gin_channels=gin_channels\n        )\n\n        if n_speakers > 0:\n            self.emb_g = nn.Embedding(n_speakers, gin_channels)\n        else:\n            self.ref_enc = ReferenceEncoder(spec_channels, gin_channels, layernorm=norm_refenc)\n        self.use_vc = use_vc\n\n\n    def forward(self, x, x_lengths, y, y_lengths, sid, tone, language, bert, ja_bert):\n        if self.n_speakers > 0:\n            g = self.emb_g(sid).unsqueeze(-1)  # [b, h, 1]\n        else:\n            g = self.ref_enc(y.transpose(1, 2)).unsqueeze(-1)\n        if self.use_vc:\n            g_p = None\n        else:\n            g_p = g\n        x, m_p, logs_p, x_mask = self.enc_p(\n            x, x_lengths, tone, language, bert, ja_bert, g=g_p\n        )\n        z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g)\n        z_p = self.flow(z, y_mask, g=g)\n\n        with torch.no_grad():\n            # negative cross-entropy\n            s_p_sq_r = torch.exp(-2 * logs_p)  # [b, d, t]\n            neg_cent1 = torch.sum(\n                -0.5 * math.log(2 * math.pi) - logs_p, [1], keepdim=True\n            )  # [b, 1, t_s]\n            neg_cent2 = torch.matmul(\n                -0.5 * (z_p**2).transpose(1, 2), s_p_sq_r\n            )  # [b, t_t, d] x [b, d, t_s] = [b, t_t, t_s]\n            neg_cent3 = torch.matmul(\n                z_p.transpose(1, 2), (m_p * s_p_sq_r)\n            )  # [b, t_t, d] x [b, d, t_s] = [b, t_t, t_s]\n            neg_cent4 = torch.sum(\n                -0.5 * (m_p**2) * s_p_sq_r, [1], keepdim=True\n            )  # [b, 1, t_s]\n            neg_cent = neg_cent1 + neg_cent2 + neg_cent3 + neg_cent4\n            if self.use_noise_scaled_mas:\n                epsilon = (\n                    torch.std(neg_cent)\n                    * torch.randn_like(neg_cent)\n                    * self.current_mas_noise_scale\n                )\n                neg_cent = neg_cent + epsilon\n\n            attn_mask = torch.unsqueeze(x_mask, 2) * torch.unsqueeze(y_mask, -1)\n            attn = (\n                monotonic_align.maximum_path(neg_cent, attn_mask.squeeze(1))\n                .unsqueeze(1)\n                .detach()\n            )\n\n        w = attn.sum(2)\n\n        l_length_sdp = self.sdp(x, x_mask, w, g=g)\n        l_length_sdp = l_length_sdp / torch.sum(x_mask)\n\n        logw_ = torch.log(w + 1e-6) * x_mask\n        logw = self.dp(x, x_mask, g=g)\n        l_length_dp = torch.sum((logw - logw_) ** 2, [1, 2]) / torch.sum(\n            x_mask\n        )  # for averaging\n\n        l_length = l_length_dp + l_length_sdp\n\n        # expand prior\n        m_p = torch.matmul(attn.squeeze(1), m_p.transpose(1, 2)).transpose(1, 2)\n        logs_p = torch.matmul(attn.squeeze(1), logs_p.transpose(1, 2)).transpose(1, 2)\n\n        z_slice, ids_slice = commons.rand_slice_segments(\n            z, y_lengths, self.segment_size\n        )\n        o = self.dec(z_slice, g=g)\n        return (\n            o,\n            l_length,\n            attn,\n            ids_slice,\n            x_mask,\n            y_mask,\n            (z, z_p, m_p, logs_p, m_q, logs_q),\n            (x, logw, logw_),\n        )\n\n    def infer(\n        self,\n        x,\n        x_lengths,\n        sid,\n        tone,\n        language,\n        bert,\n        ja_bert,\n        noise_scale=0.667,\n        length_scale=1,\n        noise_scale_w=0.8,\n        max_len=None,\n        sdp_ratio=0,\n        y=None,\n        g=None,\n    ):\n        # x, m_p, logs_p, x_mask = self.enc_p(x, x_lengths, tone, language, bert)\n        # g = self.gst(y)\n        if g is None:\n            if self.n_speakers > 0:\n                g = self.emb_g(sid).unsqueeze(-1)  # [b, h, 1]\n            else:\n                g = self.ref_enc(y.transpose(1, 2)).unsqueeze(-1)\n        if self.use_vc:\n            g_p = None\n        else:\n            g_p = g\n        x, m_p, logs_p, x_mask = self.enc_p(\n            x, x_lengths, tone, language, bert, ja_bert, g=g_p\n        )\n        logw = self.sdp(x, x_mask, g=g, reverse=True, noise_scale=noise_scale_w) * (\n            sdp_ratio\n        ) + self.dp(x, x_mask, g=g) * (1 - sdp_ratio)\n        w = torch.exp(logw) * x_mask * length_scale\n        \n        w_ceil = torch.ceil(w)\n        y_lengths = torch.clamp_min(torch.sum(w_ceil, [1, 2]), 1).long()\n        y_mask = torch.unsqueeze(commons.sequence_mask(y_lengths, None), 1).to(\n            x_mask.dtype\n        )\n        attn_mask = torch.unsqueeze(x_mask, 2) * torch.unsqueeze(y_mask, -1)\n        attn = commons.generate_path(w_ceil, attn_mask)\n\n        m_p = torch.matmul(attn.squeeze(1), m_p.transpose(1, 2)).transpose(\n            1, 2\n        )  # [b, t', t], [b, t, d] -> [b, d, t']\n        logs_p = torch.matmul(attn.squeeze(1), logs_p.transpose(1, 2)).transpose(\n            1, 2\n        )  # [b, t', t], [b, t, d] -> [b, d, t']\n\n        z_p = m_p + torch.randn_like(m_p) * torch.exp(logs_p) * noise_scale\n        z = self.flow(z_p, y_mask, g=g, reverse=True)\n        o = self.dec((z * y_mask)[:, :, :max_len], g=g)\n        # print('max/min of o:', o.max(), o.min())\n        return o, attn, y_mask, (z, z_p, m_p, logs_p)\n\n    def voice_conversion(self, y, y_lengths, sid_src, sid_tgt, tau=1.0):        \n        g_src = sid_src\n        g_tgt = sid_tgt\n        z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g_src, tau=tau)\n        z_p = self.flow(z, y_mask, g=g_src)\n        z_hat = self.flow(z_p, y_mask, g=g_tgt, reverse=True)\n        o_hat = self.dec(z_hat * y_mask, g=g_tgt)\n        return o_hat, y_mask, (z, z_p, z_hat)\n"
  },
  {
    "path": "xinference/thirdparty/melo/modules.py",
    "content": "import math\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom torch.nn import Conv1d\nfrom torch.nn.utils import weight_norm, remove_weight_norm\n\nfrom . import commons\nfrom .commons import init_weights, get_padding\nfrom .transforms import piecewise_rational_quadratic_transform\nfrom .attentions import Encoder\n\nLRELU_SLOPE = 0.1\n\n\nclass LayerNorm(nn.Module):\n    def __init__(self, channels, eps=1e-5):\n        super().__init__()\n        self.channels = channels\n        self.eps = eps\n\n        self.gamma = nn.Parameter(torch.ones(channels))\n        self.beta = nn.Parameter(torch.zeros(channels))\n\n    def forward(self, x):\n        x = x.transpose(1, -1)\n        x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps)\n        return x.transpose(1, -1)\n\n\nclass ConvReluNorm(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        hidden_channels,\n        out_channels,\n        kernel_size,\n        n_layers,\n        p_dropout,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.hidden_channels = hidden_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n        assert n_layers > 1, \"Number of layers should be larger than 0.\"\n\n        self.conv_layers = nn.ModuleList()\n        self.norm_layers = nn.ModuleList()\n        self.conv_layers.append(\n            nn.Conv1d(\n                in_channels, hidden_channels, kernel_size, padding=kernel_size // 2\n            )\n        )\n        self.norm_layers.append(LayerNorm(hidden_channels))\n        self.relu_drop = nn.Sequential(nn.ReLU(), nn.Dropout(p_dropout))\n        for _ in range(n_layers - 1):\n            self.conv_layers.append(\n                nn.Conv1d(\n                    hidden_channels,\n                    hidden_channels,\n                    kernel_size,\n                    padding=kernel_size // 2,\n                )\n            )\n            self.norm_layers.append(LayerNorm(hidden_channels))\n        self.proj = nn.Conv1d(hidden_channels, out_channels, 1)\n        self.proj.weight.data.zero_()\n        self.proj.bias.data.zero_()\n\n    def forward(self, x, x_mask):\n        x_org = x\n        for i in range(self.n_layers):\n            x = self.conv_layers[i](x * x_mask)\n            x = self.norm_layers[i](x)\n            x = self.relu_drop(x)\n        x = x_org + self.proj(x)\n        return x * x_mask\n\n\nclass DDSConv(nn.Module):\n    \"\"\"\n    Dialted and Depth-Separable Convolution\n    \"\"\"\n\n    def __init__(self, channels, kernel_size, n_layers, p_dropout=0.0):\n        super().__init__()\n        self.channels = channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.p_dropout = p_dropout\n\n        self.drop = nn.Dropout(p_dropout)\n        self.convs_sep = nn.ModuleList()\n        self.convs_1x1 = nn.ModuleList()\n        self.norms_1 = nn.ModuleList()\n        self.norms_2 = nn.ModuleList()\n        for i in range(n_layers):\n            dilation = kernel_size**i\n            padding = (kernel_size * dilation - dilation) // 2\n            self.convs_sep.append(\n                nn.Conv1d(\n                    channels,\n                    channels,\n                    kernel_size,\n                    groups=channels,\n                    dilation=dilation,\n                    padding=padding,\n                )\n            )\n            self.convs_1x1.append(nn.Conv1d(channels, channels, 1))\n            self.norms_1.append(LayerNorm(channels))\n            self.norms_2.append(LayerNorm(channels))\n\n    def forward(self, x, x_mask, g=None):\n        if g is not None:\n            x = x + g\n        for i in range(self.n_layers):\n            y = self.convs_sep[i](x * x_mask)\n            y = self.norms_1[i](y)\n            y = F.gelu(y)\n            y = self.convs_1x1[i](y)\n            y = self.norms_2[i](y)\n            y = F.gelu(y)\n            y = self.drop(y)\n            x = x + y\n        return x * x_mask\n\n\nclass WN(torch.nn.Module):\n    def __init__(\n        self,\n        hidden_channels,\n        kernel_size,\n        dilation_rate,\n        n_layers,\n        gin_channels=0,\n        p_dropout=0,\n    ):\n        super(WN, self).__init__()\n        assert kernel_size % 2 == 1\n        self.hidden_channels = hidden_channels\n        self.kernel_size = (kernel_size,)\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.gin_channels = gin_channels\n        self.p_dropout = p_dropout\n\n        self.in_layers = torch.nn.ModuleList()\n        self.res_skip_layers = torch.nn.ModuleList()\n        self.drop = nn.Dropout(p_dropout)\n\n        if gin_channels != 0:\n            cond_layer = torch.nn.Conv1d(\n                gin_channels, 2 * hidden_channels * n_layers, 1\n            )\n            self.cond_layer = torch.nn.utils.weight_norm(cond_layer, name=\"weight\")\n\n        for i in range(n_layers):\n            dilation = dilation_rate**i\n            padding = int((kernel_size * dilation - dilation) / 2)\n            in_layer = torch.nn.Conv1d(\n                hidden_channels,\n                2 * hidden_channels,\n                kernel_size,\n                dilation=dilation,\n                padding=padding,\n            )\n            in_layer = torch.nn.utils.weight_norm(in_layer, name=\"weight\")\n            self.in_layers.append(in_layer)\n\n            # last one is not necessary\n            if i < n_layers - 1:\n                res_skip_channels = 2 * hidden_channels\n            else:\n                res_skip_channels = hidden_channels\n\n            res_skip_layer = torch.nn.Conv1d(hidden_channels, res_skip_channels, 1)\n            res_skip_layer = torch.nn.utils.weight_norm(res_skip_layer, name=\"weight\")\n            self.res_skip_layers.append(res_skip_layer)\n\n    def forward(self, x, x_mask, g=None, **kwargs):\n        output = torch.zeros_like(x)\n        n_channels_tensor = torch.IntTensor([self.hidden_channels])\n\n        if g is not None:\n            g = self.cond_layer(g)\n\n        for i in range(self.n_layers):\n            x_in = self.in_layers[i](x)\n            if g is not None:\n                cond_offset = i * 2 * self.hidden_channels\n                g_l = g[:, cond_offset : cond_offset + 2 * self.hidden_channels, :]\n            else:\n                g_l = torch.zeros_like(x_in)\n\n            acts = commons.fused_add_tanh_sigmoid_multiply(x_in, g_l, n_channels_tensor)\n            acts = self.drop(acts)\n\n            res_skip_acts = self.res_skip_layers[i](acts)\n            if i < self.n_layers - 1:\n                res_acts = res_skip_acts[:, : self.hidden_channels, :]\n                x = (x + res_acts) * x_mask\n                output = output + res_skip_acts[:, self.hidden_channels :, :]\n            else:\n                output = output + res_skip_acts\n        return output * x_mask\n\n    def remove_weight_norm(self):\n        if self.gin_channels != 0:\n            torch.nn.utils.remove_weight_norm(self.cond_layer)\n        for l in self.in_layers:\n            torch.nn.utils.remove_weight_norm(l)\n        for l in self.res_skip_layers:\n            torch.nn.utils.remove_weight_norm(l)\n\n\nclass ResBlock1(torch.nn.Module):\n    def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)):\n        super(ResBlock1, self).__init__()\n        self.convs1 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[0],\n                        padding=get_padding(kernel_size, dilation[0]),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[1],\n                        padding=get_padding(kernel_size, dilation[1]),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[2],\n                        padding=get_padding(kernel_size, dilation[2]),\n                    )\n                ),\n            ]\n        )\n        self.convs1.apply(init_weights)\n\n        self.convs2 = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1),\n                    )\n                ),\n            ]\n        )\n        self.convs2.apply(init_weights)\n\n    def forward(self, x, x_mask=None):\n        for c1, c2 in zip(self.convs1, self.convs2):\n            xt = F.leaky_relu(x, LRELU_SLOPE)\n            if x_mask is not None:\n                xt = xt * x_mask\n            xt = c1(xt)\n            xt = F.leaky_relu(xt, LRELU_SLOPE)\n            if x_mask is not None:\n                xt = xt * x_mask\n            xt = c2(xt)\n            x = xt + x\n        if x_mask is not None:\n            x = x * x_mask\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs1:\n            remove_weight_norm(l)\n        for l in self.convs2:\n            remove_weight_norm(l)\n\n\nclass ResBlock2(torch.nn.Module):\n    def __init__(self, channels, kernel_size=3, dilation=(1, 3)):\n        super(ResBlock2, self).__init__()\n        self.convs = nn.ModuleList(\n            [\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[0],\n                        padding=get_padding(kernel_size, dilation[0]),\n                    )\n                ),\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation[1],\n                        padding=get_padding(kernel_size, dilation[1]),\n                    )\n                ),\n            ]\n        )\n        self.convs.apply(init_weights)\n\n    def forward(self, x, x_mask=None):\n        for c in self.convs:\n            xt = F.leaky_relu(x, LRELU_SLOPE)\n            if x_mask is not None:\n                xt = xt * x_mask\n            xt = c(xt)\n            x = xt + x\n        if x_mask is not None:\n            x = x * x_mask\n        return x\n\n    def remove_weight_norm(self):\n        for l in self.convs:\n            remove_weight_norm(l)\n\n\nclass Log(nn.Module):\n    def forward(self, x, x_mask, reverse=False, **kwargs):\n        if not reverse:\n            y = torch.log(torch.clamp_min(x, 1e-5)) * x_mask\n            logdet = torch.sum(-y, [1, 2])\n            return y, logdet\n        else:\n            x = torch.exp(x) * x_mask\n            return x\n\n\nclass Flip(nn.Module):\n    def forward(self, x, *args, reverse=False, **kwargs):\n        x = torch.flip(x, [1])\n        if not reverse:\n            logdet = torch.zeros(x.size(0)).to(dtype=x.dtype, device=x.device)\n            return x, logdet\n        else:\n            return x\n\n\nclass ElementwiseAffine(nn.Module):\n    def __init__(self, channels):\n        super().__init__()\n        self.channels = channels\n        self.m = nn.Parameter(torch.zeros(channels, 1))\n        self.logs = nn.Parameter(torch.zeros(channels, 1))\n\n    def forward(self, x, x_mask, reverse=False, **kwargs):\n        if not reverse:\n            y = self.m + torch.exp(self.logs) * x\n            y = y * x_mask\n            logdet = torch.sum(self.logs * x_mask, [1, 2])\n            return y, logdet\n        else:\n            x = (x - self.m) * torch.exp(-self.logs) * x_mask\n            return x\n\n\nclass ResidualCouplingLayer(nn.Module):\n    def __init__(\n        self,\n        channels,\n        hidden_channels,\n        kernel_size,\n        dilation_rate,\n        n_layers,\n        p_dropout=0,\n        gin_channels=0,\n        mean_only=False,\n    ):\n        assert channels % 2 == 0, \"channels should be divisible by 2\"\n        super().__init__()\n        self.channels = channels\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size\n        self.dilation_rate = dilation_rate\n        self.n_layers = n_layers\n        self.half_channels = channels // 2\n        self.mean_only = mean_only\n\n        self.pre = nn.Conv1d(self.half_channels, hidden_channels, 1)\n        self.enc = WN(\n            hidden_channels,\n            kernel_size,\n            dilation_rate,\n            n_layers,\n            p_dropout=p_dropout,\n            gin_channels=gin_channels,\n        )\n        self.post = nn.Conv1d(hidden_channels, self.half_channels * (2 - mean_only), 1)\n        self.post.weight.data.zero_()\n        self.post.bias.data.zero_()\n\n    def forward(self, x, x_mask, g=None, reverse=False):\n        x0, x1 = torch.split(x, [self.half_channels] * 2, 1)\n        h = self.pre(x0) * x_mask\n        h = self.enc(h, x_mask, g=g)\n        stats = self.post(h) * x_mask\n        if not self.mean_only:\n            m, logs = torch.split(stats, [self.half_channels] * 2, 1)\n        else:\n            m = stats\n            logs = torch.zeros_like(m)\n\n        if not reverse:\n            x1 = m + x1 * torch.exp(logs) * x_mask\n            x = torch.cat([x0, x1], 1)\n            logdet = torch.sum(logs, [1, 2])\n            return x, logdet\n        else:\n            x1 = (x1 - m) * torch.exp(-logs) * x_mask\n            x = torch.cat([x0, x1], 1)\n            return x\n\n\nclass ConvFlow(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        filter_channels,\n        kernel_size,\n        n_layers,\n        num_bins=10,\n        tail_bound=5.0,\n    ):\n        super().__init__()\n        self.in_channels = in_channels\n        self.filter_channels = filter_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.num_bins = num_bins\n        self.tail_bound = tail_bound\n        self.half_channels = in_channels // 2\n\n        self.pre = nn.Conv1d(self.half_channels, filter_channels, 1)\n        self.convs = DDSConv(filter_channels, kernel_size, n_layers, p_dropout=0.0)\n        self.proj = nn.Conv1d(\n            filter_channels, self.half_channels * (num_bins * 3 - 1), 1\n        )\n        self.proj.weight.data.zero_()\n        self.proj.bias.data.zero_()\n\n    def forward(self, x, x_mask, g=None, reverse=False):\n        x0, x1 = torch.split(x, [self.half_channels] * 2, 1)\n        h = self.pre(x0)\n        h = self.convs(h, x_mask, g=g)\n        h = self.proj(h) * x_mask\n\n        b, c, t = x0.shape\n        h = h.reshape(b, c, -1, t).permute(0, 1, 3, 2)  # [b, cx?, t] -> [b, c, t, ?]\n\n        unnormalized_widths = h[..., : self.num_bins] / math.sqrt(self.filter_channels)\n        unnormalized_heights = h[..., self.num_bins : 2 * self.num_bins] / math.sqrt(\n            self.filter_channels\n        )\n        unnormalized_derivatives = h[..., 2 * self.num_bins :]\n\n        x1, logabsdet = piecewise_rational_quadratic_transform(\n            x1,\n            unnormalized_widths,\n            unnormalized_heights,\n            unnormalized_derivatives,\n            inverse=reverse,\n            tails=\"linear\",\n            tail_bound=self.tail_bound,\n        )\n\n        x = torch.cat([x0, x1], 1) * x_mask\n        logdet = torch.sum(logabsdet * x_mask, [1, 2])\n        if not reverse:\n            return x, logdet\n        else:\n            return x\n\n\nclass TransformerCouplingLayer(nn.Module):\n    def __init__(\n        self,\n        channels,\n        hidden_channels,\n        kernel_size,\n        n_layers,\n        n_heads,\n        p_dropout=0,\n        filter_channels=0,\n        mean_only=False,\n        wn_sharing_parameter=None,\n        gin_channels=0,\n    ):\n        assert n_layers == 3, n_layers\n        assert channels % 2 == 0, \"channels should be divisible by 2\"\n        super().__init__()\n        self.channels = channels\n        self.hidden_channels = hidden_channels\n        self.kernel_size = kernel_size\n        self.n_layers = n_layers\n        self.half_channels = channels // 2\n        self.mean_only = mean_only\n\n        self.pre = nn.Conv1d(self.half_channels, hidden_channels, 1)\n        self.enc = (\n            Encoder(\n                hidden_channels,\n                filter_channels,\n                n_heads,\n                n_layers,\n                kernel_size,\n                p_dropout,\n                isflow=True,\n                gin_channels=gin_channels,\n            )\n            if wn_sharing_parameter is None\n            else wn_sharing_parameter\n        )\n        self.post = nn.Conv1d(hidden_channels, self.half_channels * (2 - mean_only), 1)\n        self.post.weight.data.zero_()\n        self.post.bias.data.zero_()\n\n    def forward(self, x, x_mask, g=None, reverse=False):\n        x0, x1 = torch.split(x, [self.half_channels] * 2, 1)\n        h = self.pre(x0) * x_mask\n        h = self.enc(h, x_mask, g=g)\n        stats = self.post(h) * x_mask\n        if not self.mean_only:\n            m, logs = torch.split(stats, [self.half_channels] * 2, 1)\n        else:\n            m = stats\n            logs = torch.zeros_like(m)\n\n        if not reverse:\n            x1 = m + x1 * torch.exp(logs) * x_mask\n            x = torch.cat([x0, x1], 1)\n            logdet = torch.sum(logs, [1, 2])\n            return x, logdet\n        else:\n            x1 = (x1 - m) * torch.exp(-logs) * x_mask\n            x = torch.cat([x0, x1], 1)\n            return x\n\n        x1, logabsdet = piecewise_rational_quadratic_transform(\n            x1,\n            unnormalized_widths,\n            unnormalized_heights,\n            unnormalized_derivatives,\n            inverse=reverse,\n            tails=\"linear\",\n            tail_bound=self.tail_bound,\n        )\n\n        x = torch.cat([x0, x1], 1) * x_mask\n        logdet = torch.sum(logabsdet * x_mask, [1, 2])\n        if not reverse:\n            return x, logdet\n        else:\n            return x\n"
  },
  {
    "path": "xinference/thirdparty/melo/monotonic_align/__init__.py",
    "content": "from numpy import zeros, int32, float32\r\nfrom torch import from_numpy\r\n\r\nfrom .core import maximum_path_jit\r\n\r\n\r\ndef maximum_path(neg_cent, mask):\r\n    device = neg_cent.device\r\n    dtype = neg_cent.dtype\r\n    neg_cent = neg_cent.data.cpu().numpy().astype(float32)\r\n    path = zeros(neg_cent.shape, dtype=int32)\r\n\r\n    t_t_max = mask.sum(1)[:, 0].data.cpu().numpy().astype(int32)\r\n    t_s_max = mask.sum(2)[:, 0].data.cpu().numpy().astype(int32)\r\n    maximum_path_jit(path, neg_cent, t_t_max, t_s_max)\r\n    return from_numpy(path).to(device=device, dtype=dtype)\r\n"
  },
  {
    "path": "xinference/thirdparty/melo/monotonic_align/core.py",
    "content": "import numba\r\n\r\n\r\n@numba.jit(\r\n    numba.void(\r\n        numba.int32[:, :, ::1],\r\n        numba.float32[:, :, ::1],\r\n        numba.int32[::1],\r\n        numba.int32[::1],\r\n    ),\r\n    nopython=True,\r\n    nogil=True,\r\n)\r\ndef maximum_path_jit(paths, values, t_ys, t_xs):\r\n    b = paths.shape[0]\r\n    max_neg_val = -1e9\r\n    for i in range(int(b)):\r\n        path = paths[i]\r\n        value = values[i]\r\n        t_y = t_ys[i]\r\n        t_x = t_xs[i]\r\n\r\n        v_prev = v_cur = 0.0\r\n        index = t_x - 1\r\n\r\n        for y in range(t_y):\r\n            for x in range(max(0, t_x + y - t_y), min(t_x, y + 1)):\r\n                if x == y:\r\n                    v_cur = max_neg_val\r\n                else:\r\n                    v_cur = value[y - 1, x]\r\n                if x == 0:\r\n                    if y == 0:\r\n                        v_prev = 0.0\r\n                    else:\r\n                        v_prev = max_neg_val\r\n                else:\r\n                    v_prev = value[y - 1, x - 1]\r\n                value[y, x] += max(v_prev, v_cur)\r\n\r\n        for y in range(t_y - 1, -1, -1):\r\n            path[y, index] = 1\r\n            if index != 0 and (\r\n                index == y or value[y - 1, index] < value[y - 1, index - 1]\r\n            ):\r\n                index = index - 1\r\n"
  },
  {
    "path": "xinference/thirdparty/melo/preprocess_text.py",
    "content": "import json\nfrom collections import defaultdict\nfrom random import shuffle\nfrom typing import Optional\n\nfrom tqdm import tqdm\nimport click\nfrom text.cleaner import clean_text_bert\nimport os\nimport torch\nfrom text.symbols import symbols, num_languages, num_tones\n\n@click.command()\n@click.option(\n    \"--metadata\",\n    default=\"data/example/metadata.list\",\n    type=click.Path(exists=True, file_okay=True, dir_okay=False),\n)\n@click.option(\"--cleaned-path\", default=None)\n@click.option(\"--train-path\", default=None)\n@click.option(\"--val-path\", default=None)\n@click.option(\n    \"--config_path\",\n    default=\"configs/config.json\",\n    type=click.Path(exists=True, file_okay=True, dir_okay=False),\n)\n@click.option(\"--val-per-spk\", default=4)\n@click.option(\"--max-val-total\", default=8)\n@click.option(\"--clean/--no-clean\", default=True)\ndef main(\n    metadata: str,\n    cleaned_path: Optional[str],\n    train_path: str,\n    val_path: str,\n    config_path: str,\n    val_per_spk: int,\n    max_val_total: int,\n    clean: bool,\n):\n    if train_path is None:\n        train_path = os.path.join(os.path.dirname(metadata), 'train.list')\n    if val_path is None:\n        val_path = os.path.join(os.path.dirname(metadata), 'val.list')\n    out_config_path = os.path.join(os.path.dirname(metadata), 'config.json')\n\n    if cleaned_path is None:\n        cleaned_path = metadata + \".cleaned\"\n\n    if clean:\n        out_file = open(cleaned_path, \"w\", encoding=\"utf-8\")\n        new_symbols = []\n        for line in tqdm(open(metadata, encoding=\"utf-8\").readlines()):\n            try:\n                utt, spk, language, text = line.strip().split(\"|\")\n                norm_text, phones, tones, word2ph, bert = clean_text_bert(text, language, device='cuda:0')\n                for ph in phones:\n                    if ph not in symbols and ph not in new_symbols:\n                        new_symbols.append(ph)\n                        print('update!, now symbols:')\n                        print(new_symbols)\n                        with open(f'{language}_symbol.txt', 'w') as f:\n                            f.write(f'{new_symbols}')\n\n                assert len(phones) == len(tones)\n                assert len(phones) == sum(word2ph)\n                out_file.write(\n                    \"{}|{}|{}|{}|{}|{}|{}\\n\".format(\n                        utt,\n                        spk,\n                        language,\n                        norm_text,\n                        \" \".join(phones),\n                        \" \".join([str(i) for i in tones]),\n                        \" \".join([str(i) for i in word2ph]),\n                    )\n                )\n                bert_path = utt.replace(\".wav\", \".bert.pt\")\n                os.makedirs(os.path.dirname(bert_path), exist_ok=True)\n                torch.save(bert.cpu(), bert_path)\n            except Exception as error:\n                print(\"err!\", line, error)\n\n        out_file.close()\n\n        metadata = cleaned_path\n\n    spk_utt_map = defaultdict(list)\n    spk_id_map = {}\n    current_sid = 0\n\n    with open(metadata, encoding=\"utf-8\") as f:\n        for line in f.readlines():\n            utt, spk, language, text, phones, tones, word2ph = line.strip().split(\"|\")\n            spk_utt_map[spk].append(line)\n\n            if spk not in spk_id_map.keys():\n                spk_id_map[spk] = current_sid\n                current_sid += 1\n\n    train_list = []\n    val_list = []\n\n    for spk, utts in spk_utt_map.items():\n        shuffle(utts)\n        val_list += utts[:val_per_spk]\n        train_list += utts[val_per_spk:]\n\n    if len(val_list) > max_val_total:\n        train_list += val_list[max_val_total:]\n        val_list = val_list[:max_val_total]\n\n    with open(train_path, \"w\", encoding=\"utf-8\") as f:\n        for line in train_list:\n            f.write(line)\n\n    with open(val_path, \"w\", encoding=\"utf-8\") as f:\n        for line in val_list:\n            f.write(line)\n\n    config = json.load(open(config_path, encoding=\"utf-8\"))\n    config[\"data\"][\"spk2id\"] = spk_id_map\n\n    config[\"data\"][\"training_files\"] = train_path\n    config[\"data\"][\"validation_files\"] = val_path\n    config[\"data\"][\"n_speakers\"] = len(spk_id_map)\n    config[\"num_languages\"] = num_languages\n    config[\"num_tones\"] = num_tones\n    config[\"symbols\"] = symbols\n\n    with open(out_config_path, \"w\", encoding=\"utf-8\") as f:\n        json.dump(config, f, indent=2, ensure_ascii=False)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "xinference/thirdparty/melo/split_utils.py",
    "content": "import re\nimport os\nimport glob\nimport numpy as np\nimport soundfile as sf\nimport torchaudio\nimport re\n\ndef split_sentence(text, min_len=10, language_str='EN'):\n    if language_str in ['EN', 'FR', 'ES', 'SP']:\n        sentences = split_sentences_latin(text, min_len=min_len)\n    else:\n        sentences = split_sentences_zh(text, min_len=min_len)\n    return sentences\n\n\ndef split_sentences_latin(text, min_len=10):\n    text = re.sub('[。！？；]', '.', text)\n    text = re.sub('[，]', ',', text)\n    text = re.sub('[“”]', '\"', text)\n    text = re.sub('[‘’]', \"'\", text)\n    text = re.sub(r\"[\\<\\>\\(\\)\\[\\]\\\"\\«\\»]+\", \"\", text)\n    return [item.strip() for item in txtsplit(text, 256, 512) if item.strip()]\n\n\ndef split_sentences_zh(text, min_len=10):\n    text = re.sub('[。！？；]', '.', text)\n    text = re.sub('[，]', ',', text)\n    # 将文本中的换行符、空格和制表符替换为空格\n    text = re.sub('[\\n\\t ]+', ' ', text)\n    # 在标点符号后添加一个空格\n    text = re.sub('([,.!?;])', r'\\1 $#!', text)\n    # 分隔句子并去除前后空格\n    # sentences = [s.strip() for s in re.split('(。|！|？|；)', text)]\n    sentences = [s.strip() for s in text.split('$#!')]\n    if len(sentences[-1]) == 0: del sentences[-1]\n\n    new_sentences = []\n    new_sent = []\n    count_len = 0\n    for ind, sent in enumerate(sentences):\n        new_sent.append(sent)\n        count_len += len(sent)\n        if count_len > min_len or ind == len(sentences) - 1:\n            count_len = 0\n            new_sentences.append(' '.join(new_sent))\n            new_sent = []\n    return merge_short_sentences_zh(new_sentences)\n\n\ndef merge_short_sentences_en(sens):\n    \"\"\"Avoid short sentences by merging them with the following sentence.\n\n    Args:\n        List[str]: list of input sentences.\n\n    Returns:\n        List[str]: list of output sentences.\n    \"\"\"\n    sens_out = []\n    for s in sens:\n        # If the previous sentense is too short, merge them with\n        # the current sentence.\n        if len(sens_out) > 0 and len(sens_out[-1].split(\" \")) <= 2:\n            sens_out[-1] = sens_out[-1] + \" \" + s\n        else:\n            sens_out.append(s)\n    try:\n        if len(sens_out[-1].split(\" \")) <= 2:\n            sens_out[-2] = sens_out[-2] + \" \" + sens_out[-1]\n            sens_out.pop(-1)\n    except Exception:\n        pass\n    return sens_out\n\n\ndef merge_short_sentences_zh(sens):\n    # return sens\n    \"\"\"Avoid short sentences by merging them with the following sentence.\n\n    Args:\n        List[str]: list of input sentences.\n\n    Returns:\n        List[str]: list of output sentences.\n    \"\"\"\n    sens_out = []\n    for s in sens:\n        # If the previous sentense is too short, merge them with\n        # the current sentence.\n        if len(sens_out) > 0 and len(sens_out[-1]) <= 2:\n            sens_out[-1] = sens_out[-1] + \" \" + s\n        else:\n            sens_out.append(s)\n    try:\n        if len(sens_out[-1]) <= 2:\n            sens_out[-2] = sens_out[-2] + \" \" + sens_out[-1]\n            sens_out.pop(-1)\n    except Exception:\n        pass\n    return sens_out\n\n\n\ndef txtsplit(text, desired_length=100, max_length=200):\n    \"\"\"Split text it into chunks of a desired length trying to keep sentences intact.\"\"\"\n    text = re.sub(r'\\n\\n+', '\\n', text)\n    text = re.sub(r'\\s+', ' ', text)\n    text = re.sub(r'[\"\"]', '\"', text)\n    text = re.sub(r'([,.?!])', r'\\1 ', text)\n    text = re.sub(r'\\s+', ' ', text)\n    \n    rv = []\n    in_quote = False\n    current = \"\"\n    split_pos = []\n    pos = -1\n    end_pos = len(text) - 1\n    def seek(delta):\n        nonlocal pos, in_quote, current\n        is_neg = delta < 0\n        for _ in range(abs(delta)):\n            if is_neg:\n                pos -= 1\n                current = current[:-1]\n            else:\n                pos += 1\n                current += text[pos]\n            if text[pos] == '\"':\n                in_quote = not in_quote\n        return text[pos]\n    def peek(delta):\n        p = pos + delta\n        return text[p] if p < end_pos and p >= 0 else \"\"\n    def commit():\n        nonlocal rv, current, split_pos\n        rv.append(current)\n        current = \"\"\n        split_pos = []\n    while pos < end_pos:\n        c = seek(1)\n        if len(current) >= max_length:\n            if len(split_pos) > 0 and len(current) > (desired_length / 2):\n                d = pos - split_pos[-1]\n                seek(-d)\n            else:\n                while c not in '!?.\\n ' and pos > 0 and len(current) > desired_length:\n                    c = seek(-1)\n            commit()\n        elif not in_quote and (c in '!?\\n' or (c in '.,' and peek(1) in '\\n ')):\n            while pos < len(text) - 1 and len(current) < max_length and peek(1) in '!?.':\n                c = seek(1)\n            split_pos.append(pos)\n            if len(current) >= desired_length:\n                commit()\n        elif in_quote and peek(1) == '\"' and peek(2) in '\\n ':\n            seek(2)\n            split_pos.append(pos)\n    rv.append(current)\n    rv = [s.strip() for s in rv]\n    rv = [s for s in rv if len(s) > 0 and not re.match(r'^[\\s\\.,;:!?]*$', s)]\n    return rv\n\n\nif __name__ == '__main__':\n    zh_text = \"好的，我来给你讲一个故事吧。从前有一个小姑娘，她叫做小红。小红非常喜欢在森林里玩耍，她经常会和她的小伙伴们一起去探险。有一天，小红和她的小伙伴们走到了森林深处，突然遇到了一只凶猛的野兽。小红的小伙伴们都吓得不敢动弹，但是小红并没有被吓倒，她勇敢地走向野兽，用她的智慧和勇气成功地制服了野兽，保护了她的小伙伴们。从那以后，小红变得更加勇敢和自信，成为了她小伙伴们心中的英雄。\"\n    en_text = \"I didn’t know what to do. I said please kill her because it would be better than being kidnapped,” Ben, whose surname CNN is not using for security concerns, said on Wednesday. “It’s a nightmare. I said ‘please kill her, don’t take her there.’\"\n    sp_text = \"¡Claro! ¿En qué tema te gustaría que te hable en español? Puedo proporcionarte información o conversar contigo sobre una amplia variedad de temas, desde cultura y comida hasta viajes y tecnología. ¿Tienes alguna preferencia en particular?\"\n    fr_text = \"Bien sûr ! En quelle matière voudriez-vous que je vous parle en français ? Je peux vous fournir des informations ou discuter avec vous sur une grande variété de sujets, que ce soit la culture, la nourriture, les voyages ou la technologie. Avez-vous une préférence particulière ?\"\n\n    print(split_sentence(zh_text, language_str='ZH'))\n    print(split_sentence(en_text, language_str='EN'))\n    print(split_sentence(sp_text, language_str='SP'))\n    print(split_sentence(fr_text, language_str='FR'))\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/__init__.py",
    "content": "from .symbols import *\n\n\n_symbol_to_id = {s: i for i, s in enumerate(symbols)}\n\n\ndef cleaned_text_to_sequence(cleaned_text, tones, language, symbol_to_id=None):\n    \"\"\"Converts a string of text to a sequence of IDs corresponding to the symbols in the text.\n    Args:\n      text: string to convert to a sequence\n    Returns:\n      List of integers corresponding to the symbols in the text\n    \"\"\"\n    symbol_to_id_map = symbol_to_id if symbol_to_id else _symbol_to_id\n    phones = [symbol_to_id_map[symbol] for symbol in cleaned_text]\n    tone_start = language_tone_start_map[language]\n    tones = [i + tone_start for i in tones]\n    lang_id = language_id_map[language]\n    lang_ids = [lang_id for i in phones]\n    return phones, tones, lang_ids\n\n\ndef get_bert(norm_text, word2ph, language, device):\n    from .chinese_bert import get_bert_feature as zh_bert\n    from .english_bert import get_bert_feature as en_bert\n    from .japanese_bert import get_bert_feature as jp_bert\n    from .chinese_mix import get_bert_feature as zh_mix_en_bert\n    from .spanish_bert import get_bert_feature as sp_bert\n    from .french_bert import get_bert_feature as fr_bert\n    from .korean import get_bert_feature as kr_bert\n\n    lang_bert_func_map = {\"ZH\": zh_bert, \"EN\": en_bert, \"JP\": jp_bert, 'ZH_MIX_EN': zh_mix_en_bert, \n                          'FR': fr_bert, 'SP': sp_bert, 'ES': sp_bert, \"KR\": kr_bert}\n    bert = lang_bert_func_map[language](norm_text, word2ph, device)\n    return bert\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/chinese.py",
    "content": "import os\nimport re\n\nimport cn2an\nfrom pypinyin import lazy_pinyin, Style\n\nfrom .symbols import punctuation\nfrom .tone_sandhi import ToneSandhi\n\ncurrent_file_path = os.path.dirname(__file__)\npinyin_to_symbol_map = {\n    line.split(\"\\t\")[0]: line.strip().split(\"\\t\")[1]\n    for line in open(os.path.join(current_file_path, \"opencpop-strict.txt\")).readlines()\n}\n\nimport jieba.posseg as psg\n\n\nrep_map = {\n    \"：\": \",\",\n    \"；\": \",\",\n    \"，\": \",\",\n    \"。\": \".\",\n    \"！\": \"!\",\n    \"？\": \"?\",\n    \"\\n\": \".\",\n    \"·\": \",\",\n    \"、\": \",\",\n    \"...\": \"…\",\n    \"$\": \".\",\n    \"“\": \"'\",\n    \"”\": \"'\",\n    \"‘\": \"'\",\n    \"’\": \"'\",\n    \"（\": \"'\",\n    \"）\": \"'\",\n    \"(\": \"'\",\n    \")\": \"'\",\n    \"《\": \"'\",\n    \"》\": \"'\",\n    \"【\": \"'\",\n    \"】\": \"'\",\n    \"[\": \"'\",\n    \"]\": \"'\",\n    \"—\": \"-\",\n    \"～\": \"-\",\n    \"~\": \"-\",\n    \"「\": \"'\",\n    \"」\": \"'\",\n}\n\ntone_modifier = ToneSandhi()\n\n\ndef replace_punctuation(text):\n    text = text.replace(\"嗯\", \"恩\").replace(\"呣\", \"母\")\n    pattern = re.compile(\"|\".join(re.escape(p) for p in rep_map.keys()))\n\n    replaced_text = pattern.sub(lambda x: rep_map[x.group()], text)\n\n    replaced_text = re.sub(\n        r\"[^\\u4e00-\\u9fa5\" + \"\".join(punctuation) + r\"]+\", \"\", replaced_text\n    )\n\n    return replaced_text\n\n\ndef g2p(text):\n    pattern = r\"(?<=[{0}])\\s*\".format(\"\".join(punctuation))\n    sentences = [i for i in re.split(pattern, text) if i.strip() != \"\"]\n    phones, tones, word2ph = _g2p(sentences)\n    assert sum(word2ph) == len(phones)\n    assert len(word2ph) == len(text)  # Sometimes it will crash,you can add a try-catch.\n    phones = [\"_\"] + phones + [\"_\"]\n    tones = [0] + tones + [0]\n    word2ph = [1] + word2ph + [1]\n    return phones, tones, word2ph\n\n\ndef _get_initials_finals(word):\n    initials = []\n    finals = []\n    orig_initials = lazy_pinyin(word, neutral_tone_with_five=True, style=Style.INITIALS)\n    orig_finals = lazy_pinyin(\n        word, neutral_tone_with_five=True, style=Style.FINALS_TONE3\n    )\n    for c, v in zip(orig_initials, orig_finals):\n        initials.append(c)\n        finals.append(v)\n    return initials, finals\n\n\ndef _g2p(segments):\n    phones_list = []\n    tones_list = []\n    word2ph = []\n    for seg in segments:\n        # Replace all English words in the sentence\n        seg = re.sub(\"[a-zA-Z]+\", \"\", seg)\n        seg_cut = psg.lcut(seg)\n        initials = []\n        finals = []\n        seg_cut = tone_modifier.pre_merge_for_modify(seg_cut)\n        for word, pos in seg_cut:\n            if pos == \"eng\":\n                import pdb; pdb.set_trace()\n                continue\n            sub_initials, sub_finals = _get_initials_finals(word)\n            sub_finals = tone_modifier.modified_tone(word, pos, sub_finals)\n            initials.append(sub_initials)\n            finals.append(sub_finals)\n\n            # assert len(sub_initials) == len(sub_finals) == len(word)\n        initials = sum(initials, [])\n        finals = sum(finals, [])\n        #\n        for c, v in zip(initials, finals):\n            raw_pinyin = c + v\n            # NOTE: post process for pypinyin outputs\n            # we discriminate i, ii and iii\n            if c == v:\n                assert c in punctuation\n                phone = [c]\n                tone = \"0\"\n                word2ph.append(1)\n            else:\n                v_without_tone = v[:-1]\n                tone = v[-1]\n\n                pinyin = c + v_without_tone\n                assert tone in \"12345\"\n\n                if c:\n                    # 多音节\n                    v_rep_map = {\n                        \"uei\": \"ui\",\n                        \"iou\": \"iu\",\n                        \"uen\": \"un\",\n                    }\n                    if v_without_tone in v_rep_map.keys():\n                        pinyin = c + v_rep_map[v_without_tone]\n                else:\n                    # 单音节\n                    pinyin_rep_map = {\n                        \"ing\": \"ying\",\n                        \"i\": \"yi\",\n                        \"in\": \"yin\",\n                        \"u\": \"wu\",\n                    }\n                    if pinyin in pinyin_rep_map.keys():\n                        pinyin = pinyin_rep_map[pinyin]\n                    else:\n                        single_rep_map = {\n                            \"v\": \"yu\",\n                            \"e\": \"e\",\n                            \"i\": \"y\",\n                            \"u\": \"w\",\n                        }\n                        if pinyin[0] in single_rep_map.keys():\n                            pinyin = single_rep_map[pinyin[0]] + pinyin[1:]\n\n                assert pinyin in pinyin_to_symbol_map.keys(), (pinyin, seg, raw_pinyin)\n                phone = pinyin_to_symbol_map[pinyin].split(\" \")\n                word2ph.append(len(phone))\n\n            phones_list += phone\n            tones_list += [int(tone)] * len(phone)\n    return phones_list, tones_list, word2ph\n\n\ndef text_normalize(text):\n    numbers = re.findall(r\"\\d+(?:\\.?\\d+)?\", text)\n    for number in numbers:\n        text = text.replace(number, cn2an.an2cn(number), 1)\n    text = replace_punctuation(text)\n    return text\n\n\ndef get_bert_feature(text, word2ph, device=None):\n    from text import chinese_bert\n\n    return chinese_bert.get_bert_feature(text, word2ph, device=device)\n\n\nif __name__ == \"__main__\":\n    from text.chinese_bert import get_bert_feature\n\n    text = \"啊！chemistry 但是《原神》是由,米哈\\游自主，  [研发]的一款全.新开放世界.冒险游戏\"\n    text = text_normalize(text)\n    print(text)\n    phones, tones, word2ph = g2p(text)\n    bert = get_bert_feature(text, word2ph)\n\n    print(phones, tones, word2ph, bert.shape)\n\n\n# # 示例用法\n# text = \"这是一个示例文本：,你好！这是一个测试....\"\n# print(g2p_paddle(text))  # 输出: 这是一个示例文本你好这是一个测试\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/chinese_bert.py",
    "content": "import torch\nimport sys\nfrom transformers import AutoTokenizer, AutoModelForMaskedLM\n\n\n# model_id = 'hfl/chinese-roberta-wwm-ext-large'\nlocal_path = \"./bert/chinese-roberta-wwm-ext-large\"\n\n\ntokenizers = {}\nmodels = {}\n\ndef get_bert_feature(text, word2ph, device=None, model_id='hfl/chinese-roberta-wwm-ext-large'):\n    if model_id not in models:\n        models[model_id] = AutoModelForMaskedLM.from_pretrained(\n            model_id\n        ).to(device)\n        tokenizers[model_id] = AutoTokenizer.from_pretrained(model_id)\n    model = models[model_id]\n    tokenizer = tokenizers[model_id]\n\n    if (\n        sys.platform == \"darwin\"\n        and torch.backends.mps.is_available()\n        and device == \"cpu\"\n    ):\n        device = \"mps\"\n    if not device:\n        device = \"cuda\"\n\n    with torch.no_grad():\n        inputs = tokenizer(text, return_tensors=\"pt\")\n        for i in inputs:\n            inputs[i] = inputs[i].to(device)\n        res = model(**inputs, output_hidden_states=True)\n        res = torch.cat(res[\"hidden_states\"][-3:-2], -1)[0].cpu()\n    # import pdb; pdb.set_trace()\n    # assert len(word2ph) == len(text) + 2\n    word2phone = word2ph\n    phone_level_feature = []\n    for i in range(len(word2phone)):\n        repeat_feature = res[i].repeat(word2phone[i], 1)\n        phone_level_feature.append(repeat_feature)\n\n    phone_level_feature = torch.cat(phone_level_feature, dim=0)\n    return phone_level_feature.T\n\n\nif __name__ == \"__main__\":\n    import torch\n\n    word_level_feature = torch.rand(38, 1024)  # 12个词,每个词1024维特征\n    word2phone = [\n        1,\n        2,\n        1,\n        2,\n        2,\n        1,\n        2,\n        2,\n        1,\n        2,\n        2,\n        1,\n        2,\n        2,\n        2,\n        2,\n        2,\n        1,\n        1,\n        2,\n        2,\n        1,\n        2,\n        2,\n        2,\n        2,\n        1,\n        2,\n        2,\n        2,\n        2,\n        2,\n        1,\n        2,\n        2,\n        2,\n        2,\n        1,\n    ]\n\n    # 计算总帧数\n    total_frames = sum(word2phone)\n    print(word_level_feature.shape)\n    print(word2phone)\n    phone_level_feature = []\n    for i in range(len(word2phone)):\n        print(word_level_feature[i].shape)\n\n        # 对每个词重复word2phone[i]次\n        repeat_feature = word_level_feature[i].repeat(word2phone[i], 1)\n        phone_level_feature.append(repeat_feature)\n\n    phone_level_feature = torch.cat(phone_level_feature, dim=0)\n    print(phone_level_feature.shape)  # torch.Size([36, 1024])\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/chinese_mix.py",
    "content": "import os\nimport re\n\nimport cn2an\nfrom pypinyin import lazy_pinyin, Style\n\n# from text.symbols import punctuation\nfrom .symbols import language_tone_start_map\nfrom .tone_sandhi import ToneSandhi\nfrom .english import g2p as g2p_en\nfrom transformers import AutoTokenizer\n\npunctuation = [\"!\", \"?\", \"…\", \",\", \".\", \"'\", \"-\"]\ncurrent_file_path = os.path.dirname(__file__)\npinyin_to_symbol_map = {\n    line.split(\"\\t\")[0]: line.strip().split(\"\\t\")[1]\n    for line in open(os.path.join(current_file_path, \"opencpop-strict.txt\")).readlines()\n}\n\nimport jieba.posseg as psg\n\n\nrep_map = {\n    \"：\": \",\",\n    \"；\": \",\",\n    \"，\": \",\",\n    \"。\": \".\",\n    \"！\": \"!\",\n    \"？\": \"?\",\n    \"\\n\": \".\",\n    \"·\": \",\",\n    \"、\": \",\",\n    \"...\": \"…\",\n    \"$\": \".\",\n    \"“\": \"'\",\n    \"”\": \"'\",\n    \"‘\": \"'\",\n    \"’\": \"'\",\n    \"（\": \"'\",\n    \"）\": \"'\",\n    \"(\": \"'\",\n    \")\": \"'\",\n    \"《\": \"'\",\n    \"》\": \"'\",\n    \"【\": \"'\",\n    \"】\": \"'\",\n    \"[\": \"'\",\n    \"]\": \"'\",\n    \"—\": \"-\",\n    \"～\": \"-\",\n    \"~\": \"-\",\n    \"「\": \"'\",\n    \"」\": \"'\",\n}\n\ntone_modifier = ToneSandhi()\n\n\ndef replace_punctuation(text):\n    text = text.replace(\"嗯\", \"恩\").replace(\"呣\", \"母\")\n    pattern = re.compile(\"|\".join(re.escape(p) for p in rep_map.keys()))\n    replaced_text = pattern.sub(lambda x: rep_map[x.group()], text)\n    replaced_text = re.sub(r\"[^\\u4e00-\\u9fa5_a-zA-Z\\s\" + \"\".join(punctuation) + r\"]+\", \"\", replaced_text)\n    replaced_text = re.sub(r\"[\\s]+\", \" \", replaced_text)\n\n    return replaced_text\n\n\ndef g2p(text, impl='v2'):\n    pattern = r\"(?<=[{0}])\\s*\".format(\"\".join(punctuation))\n    sentences = [i for i in re.split(pattern, text) if i.strip() != \"\"]\n    if impl == 'v1':\n        _func = _g2p\n    elif impl == 'v2':\n        _func = _g2p_v2\n    else:\n        raise NotImplementedError()\n    phones, tones, word2ph = _func(sentences)\n    assert sum(word2ph) == len(phones)\n    # assert len(word2ph) == len(text)  # Sometimes it will crash,you can add a try-catch.\n    phones = [\"_\"] + phones + [\"_\"]\n    tones = [0] + tones + [0]\n    word2ph = [1] + word2ph + [1]\n    return phones, tones, word2ph\n\n\ndef _get_initials_finals(word):\n    initials = []\n    finals = []\n    orig_initials = lazy_pinyin(word, neutral_tone_with_five=True, style=Style.INITIALS)\n    orig_finals = lazy_pinyin(\n        word, neutral_tone_with_five=True, style=Style.FINALS_TONE3\n    )\n    for c, v in zip(orig_initials, orig_finals):\n        initials.append(c)\n        finals.append(v)\n    return initials, finals\n\nmodel_id = 'bert-base-multilingual-uncased'\ntokenizer = AutoTokenizer.from_pretrained(model_id)\ndef _g2p(segments):\n    phones_list = []\n    tones_list = []\n    word2ph = []\n    for seg in segments:\n        # Replace all English words in the sentence\n        # seg = re.sub(\"[a-zA-Z]+\", \"\", seg)\n        seg_cut = psg.lcut(seg)\n        initials = []\n        finals = []\n        seg_cut = tone_modifier.pre_merge_for_modify(seg_cut)\n        for word, pos in seg_cut:\n            if pos == \"eng\":\n                initials.append(['EN_WORD'])\n                finals.append([word])\n            else:\n                sub_initials, sub_finals = _get_initials_finals(word)\n                sub_finals = tone_modifier.modified_tone(word, pos, sub_finals)\n                initials.append(sub_initials)\n                finals.append(sub_finals)\n\n            # assert len(sub_initials) == len(sub_finals) == len(word)\n        initials = sum(initials, [])\n        finals = sum(finals, [])\n        #\n        for c, v in zip(initials, finals):\n            if c == 'EN_WORD':\n                tokenized_en = tokenizer.tokenize(v)\n                phones_en, tones_en, word2ph_en = g2p_en(text=None, pad_start_end=False, tokenized=tokenized_en)\n                # apply offset to tones_en\n                tones_en = [t + language_tone_start_map['EN'] for t in tones_en]\n                phones_list += phones_en\n                tones_list += tones_en\n                word2ph += word2ph_en\n            else:\n                raw_pinyin = c + v\n                # NOTE: post process for pypinyin outputs\n                # we discriminate i, ii and iii\n                if c == v:\n                    assert c in punctuation\n                    phone = [c]\n                    tone = \"0\"\n                    word2ph.append(1)\n                else:\n                    v_without_tone = v[:-1]\n                    tone = v[-1]\n\n                    pinyin = c + v_without_tone\n                    assert tone in \"12345\"\n\n                    if c:\n                        # 多音节\n                        v_rep_map = {\n                            \"uei\": \"ui\",\n                            \"iou\": \"iu\",\n                            \"uen\": \"un\",\n                        }\n                        if v_without_tone in v_rep_map.keys():\n                            pinyin = c + v_rep_map[v_without_tone]\n                    else:\n                        # 单音节\n                        pinyin_rep_map = {\n                            \"ing\": \"ying\",\n                            \"i\": \"yi\",\n                            \"in\": \"yin\",\n                            \"u\": \"wu\",\n                        }\n                        if pinyin in pinyin_rep_map.keys():\n                            pinyin = pinyin_rep_map[pinyin]\n                        else:\n                            single_rep_map = {\n                                \"v\": \"yu\",\n                                \"e\": \"e\",\n                                \"i\": \"y\",\n                                \"u\": \"w\",\n                            }\n                            if pinyin[0] in single_rep_map.keys():\n                                pinyin = single_rep_map[pinyin[0]] + pinyin[1:]\n\n                    assert pinyin in pinyin_to_symbol_map.keys(), (pinyin, seg, raw_pinyin)\n                    phone = pinyin_to_symbol_map[pinyin].split(\" \")\n                    word2ph.append(len(phone))\n\n                phones_list += phone\n                tones_list += [int(tone)] * len(phone)\n    return phones_list, tones_list, word2ph\n\n\ndef text_normalize(text):\n    numbers = re.findall(r\"\\d+(?:\\.?\\d+)?\", text)\n    for number in numbers:\n        text = text.replace(number, cn2an.an2cn(number), 1)\n    text = replace_punctuation(text)\n    return text\n\n\ndef get_bert_feature(text, word2ph, device):\n    from . import chinese_bert\n    return chinese_bert.get_bert_feature(text, word2ph, model_id='bert-base-multilingual-uncased', device=device)\n\nfrom .chinese import _g2p as _chinese_g2p\ndef _g2p_v2(segments):\n    spliter = '#$&^!@'\n\n    phones_list = []\n    tones_list = []\n    word2ph = []\n\n    for text in segments:\n        assert spliter not in text\n        # replace all english words\n        text = re.sub(r'([a-zA-Z\\s]+)', lambda x: f'{spliter}{x.group(1)}{spliter}', text)\n        texts = text.split(spliter)\n        texts = [t for t in texts if len(t) > 0]\n\n        \n        for text in texts:\n            if re.match(r'[a-zA-Z\\s]+', text):\n                # english\n                tokenized_en = tokenizer.tokenize(text)\n                phones_en, tones_en, word2ph_en = g2p_en(text=None, pad_start_end=False, tokenized=tokenized_en)\n                # apply offset to tones_en\n                tones_en = [t + language_tone_start_map['EN'] for t in tones_en]\n                phones_list += phones_en\n                tones_list += tones_en\n                word2ph += word2ph_en\n            else:\n                phones_zh, tones_zh, word2ph_zh = _chinese_g2p([text])\n                phones_list += phones_zh\n                tones_list += tones_zh\n                word2ph += word2ph_zh\n    return phones_list, tones_list, word2ph\n\n    \n\nif __name__ == \"__main__\":\n    # from text.chinese_bert import get_bert_feature\n\n    text = \"NFT啊！chemistry 但是《原神》是由,米哈\\游自主，  [研发]的一款全.新开放世界.冒险游戏\"\n    text = '我最近在学习machine learning，希望能够在未来的artificial intelligence领域有所建树。'\n    text = '今天下午，我们准备去shopping mall购物，然后晚上去看一场movie。'\n    text = '我们现在 also 能够 help 很多公司 use some machine learning 的 algorithms 啊!'\n    text = text_normalize(text)\n    print(text)\n    phones, tones, word2ph = g2p(text, impl='v2')\n    bert = get_bert_feature(text, word2ph, device='cuda:0')\n    print(phones)\n    import pdb; pdb.set_trace()\n\n\n# # 示例用法\n# text = \"这是一个示例文本：,你好！这是一个测试....\"\n# print(g2p_paddle(text))  # 输出: 这是一个示例文本你好这是一个测试\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/cleaner.py",
    "content": "from . import chinese, japanese, english, chinese_mix, korean, french, spanish\nfrom . import cleaned_text_to_sequence\nimport copy\n\nlanguage_module_map = {\"ZH\": chinese, \"JP\": japanese, \"EN\": english, 'ZH_MIX_EN': chinese_mix, 'KR': korean,\n                    'FR': french, 'SP': spanish, 'ES': spanish}\n\n\ndef clean_text(text, language):\n    language_module = language_module_map[language]\n    norm_text = language_module.text_normalize(text)\n    phones, tones, word2ph = language_module.g2p(norm_text)\n    return norm_text, phones, tones, word2ph\n\n\ndef clean_text_bert(text, language, device=None):\n    language_module = language_module_map[language]\n    norm_text = language_module.text_normalize(text)\n    phones, tones, word2ph = language_module.g2p(norm_text)\n    \n    word2ph_bak = copy.deepcopy(word2ph)\n    for i in range(len(word2ph)):\n        word2ph[i] = word2ph[i] * 2\n    word2ph[0] += 1\n    bert = language_module.get_bert_feature(norm_text, word2ph, device=device)\n    \n    return norm_text, phones, tones, word2ph_bak, bert\n\n\ndef text_to_sequence(text, language):\n    norm_text, phones, tones, word2ph = clean_text(text, language)\n    return cleaned_text_to_sequence(phones, tones, language)\n\n\nif __name__ == \"__main__\":\n    pass"
  },
  {
    "path": "xinference/thirdparty/melo/text/cleaner_multiling.py",
    "content": "\"\"\"Set of default text cleaners\"\"\"\n# TODO: pick the cleaner for languages dynamically\n\nimport re\n\n# Regular expression matching whitespace:\n_whitespace_re = re.compile(r\"\\s+\")\n\nrep_map = {\n    \"：\": \",\",\n    \"；\": \",\",\n    \"，\": \",\",\n    \"。\": \".\",\n    \"！\": \"!\",\n    \"？\": \"?\",\n    \"\\n\": \".\",\n    \"·\": \",\",\n    \"、\": \",\",\n    \"...\": \".\",\n    \"…\": \".\",\n    \"$\": \".\",\n    \"“\": \"'\",\n    \"”\": \"'\",\n    \"‘\": \"'\",\n    \"’\": \"'\",\n    \"（\": \"'\",\n    \"）\": \"'\",\n    \"(\": \"'\",\n    \")\": \"'\",\n    \"《\": \"'\",\n    \"》\": \"'\",\n    \"【\": \"'\",\n    \"】\": \"'\",\n    \"[\": \"'\",\n    \"]\": \"'\",\n    \"—\": \"\",\n    \"～\": \"-\",\n    \"~\": \"-\",\n    \"「\": \"'\",\n    \"」\": \"'\",\n}\n\ndef replace_punctuation(text):\n    pattern = re.compile(\"|\".join(re.escape(p) for p in rep_map.keys()))\n    replaced_text = pattern.sub(lambda x: rep_map[x.group()], text)\n    return replaced_text\n\ndef lowercase(text):\n    return text.lower()\n\n\ndef collapse_whitespace(text):\n    return re.sub(_whitespace_re, \" \", text).strip()\n\ndef remove_punctuation_at_begin(text):\n    return re.sub(r'^[,.!?]+', '', text)\n\ndef remove_aux_symbols(text):\n    text = re.sub(r\"[\\<\\>\\(\\)\\[\\]\\\"\\«\\»\\']+\", \"\", text)\n    return text\n\n\ndef replace_symbols(text, lang=\"en\"):\n    \"\"\"Replace symbols based on the lenguage tag.\n\n    Args:\n      text:\n       Input text.\n      lang:\n        Lenguage identifier. ex: \"en\", \"fr\", \"pt\", \"ca\".\n\n    Returns:\n      The modified text\n      example:\n        input args:\n            text: \"si l'avi cau, diguem-ho\"\n            lang: \"ca\"\n        Output:\n            text: \"si lavi cau, diguemho\"\n    \"\"\"\n    text = text.replace(\";\", \",\")\n    text = text.replace(\"-\", \" \") if lang != \"ca\" else text.replace(\"-\", \"\")\n    text = text.replace(\":\", \",\")\n    if lang == \"en\":\n        text = text.replace(\"&\", \" and \")\n    elif lang == \"fr\":\n        text = text.replace(\"&\", \" et \")\n    elif lang == \"pt\":\n        text = text.replace(\"&\", \" e \")\n    elif lang == \"ca\":\n        text = text.replace(\"&\", \" i \")\n        text = text.replace(\"'\", \"\")\n    elif lang== \"es\":\n        text=text.replace(\"&\",\"y\")\n        text = text.replace(\"'\", \"\")\n    return text\n\ndef unicleaners(text, cased=False, lang='en'):\n    \"\"\"Basic pipeline for Portuguese text. There is no need to expand abbreviation and\n    numbers, phonemizer already does that\"\"\"\n    if not cased:\n        text = lowercase(text)\n    text = replace_punctuation(text)\n    text = replace_symbols(text, lang=lang)\n    text = remove_aux_symbols(text)\n    text = remove_punctuation_at_begin(text)\n    text = collapse_whitespace(text)\n    text = re.sub(r'([^\\.,!\\?\\-…])$', r'\\1.', text)\n    return text\n\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/cmudict.rep",
    "content": "## Date:  August 8, 1998\n##\n## The Carnegie Mellon Pronouncing Dictionary [cmudict.0.6] is Copyright 1998\n## by Carnegie Mellon University. Use of this dictionary, for any research or\n## commercial purpose, is completely unrestricted.  If you make use of or\n## redistribute this material, we would appreciate acknowlegement of its\n## origin.\n##\n## cmudict.0.6 is the fifth release of cmudict, first released as cmudict.0.1\n## in September of 1993.  There was no generally available public release\n## of version 0.5.\n##\n## See the README in this directory before you use this dictionary.\n##\n## Thanks to Bill Huggins at BBN; Bill Fisher at NIST; Alex Hauptman,\n## Alex Rudnicky, Jack Mostow, Roni Rosenfeld, Richard Stern,\n## Matthew Siegler, Kevin Lenzo, Maxine Eskenazi, Mosur Ravishankar,\n## Eric Thayer, Kristie Seymore, and Raj Reddy at CMU; Lin Chase at\n## LIMSI; Doug Paul at MIT Lincoln Labs; Ben Serridge at MIT SLS; Murray\n## Spiegel at Bellcore; Tony Robinson at Cambridge UK; David Bowness of\n## CAE Electronics Ltd. and CRIM; Stephen Hocking; Jerry Quinn at BNR\n## Canada, and Marshal Midden for bringing to our attention problems and\n## inadequacies with the first releases. Most special thanks to Bob Weide\n## for all his work on prior versions of the dictionary.\n##\n## We welcome input from users and will continue to acknowledge such input\n## in subsequent releases. If I failed to acknowledge your input in this\n## release, please remind me and I will update these comments. If I failed to\n## fix things that you brought to my attention, please remind me and have\n## patience. If I actually fixed things that you brought to my attention and\n## you appreciate it, I wouldn't mind a pat on the back.\n##\n## This version differs from previous releases of cmudict most significantly\n## in the addition of new words from the common ARPA tasks for 1996 and 1997.\n##\n## There are undoubtedly still errors and inconsistencies in this dictionary\n## so keep your eyes open for problems and mail them to me.\n##\n## We hope this dictionary is an improvement over cmudict.0.4.\n##\n## email: cmudict@cs.cmu.edu\n## web:   http://www.speech.cs.cmu.edu/cgi-bin/cmudict\n## ftp:   ftp://ftp.cs.cmu.edu/project/speech/dict/\n##\n## Thank you for your continued interest in the CMU Pronouncing\n## Dictionary.  Further addictions and improvements are planned\n## for forthcoming releases.\n##\n!EXCLAMATION-POINT  EH2 K - S K L AH0 - M EY1 - SH AH0 N - P OY2 N T\n\"CLOSE-QUOTE  K L OW1 Z - K W OW1 T\n\"DOUBLE-QUOTE  D AH1 - B AH0 L - K W OW1 T\n\"END-OF-QUOTE  EH1 N - D AH0 V - K W OW1 T\n\"END-QUOTE  EH1 N D - K W OW1 T\n\"IN-QUOTES  IH1 N - K W OW1 T S\n\"QUOTE  K W OW1 T\n\"UNQUOTE  AH1 N - K W OW1 T\n#SHARP-SIGN  SH AA1 R P - S AY1 N\n%PERCENT  P ER0 - S EH1 N T\n&AMPERSAND  AE1 M - P ER0 - S AE2 N D\n'CAUSE  K AH0 Z\n'COURSE  K AO1 R S\n'EM  AH0 M\n'END-INNER-QUOTE  EH1 N - D IH1 - N ER0 - K W OW1 T\n'END-QUOTE  EH1 N D - K W OW1 T\n'INNER-QUOTE  IH1 - N ER0 - K W OW1 T\n'M  AH0 M\n'N  AH0 N\n'QUOTE  K W OW1 T\n'S  EH1 S\n'SINGLE-QUOTE  S IH1 NG - G AH0 L - K W OW1 T\n'TIL  T IH1 L\n'TIS  T IH1 Z\n'TWAS  T W AH1 Z\n(BEGIN-PARENS  B IH0 - G IH1 N - P ER0 - EH1 N Z\n(IN-PARENTHESES  IH1 N - P ER0 - EH1 N - TH AH0 - S IY2 Z\n(LEFT-PAREN  L EH1 F T - P ER0 - EH1 N\n(OPEN-PARENTHESES  OW1 - P AH0 N - P ER0 - EH1 N - TH AH0 - S IY2 Z\n(PAREN  P ER0 - EH1 N\n(PARENS  P ER0 - EH1 N Z\n(PARENTHESES  P ER0 - EH1 N - TH AH0 - S IY2 Z\n)CLOSE-PAREN  K L OW1 Z - P ER0 - EH1 N\n)CLOSE-PARENTHESES  K L OW1 Z - P ER0 - EH1 N - TH AH0 - S IY2 Z\n)END-PAREN  EH1 N D - P ER0 - EH1 N\n)END-PARENS  EH1 N D - P ER0 - EH1 N Z\n)END-PARENTHESES  EH1 N D - P ER0 - EH1 N - TH AH0 - S IY2 Z\n)END-THE-PAREN  EH1 N D - DH AH0 - P ER0 - EH1 N\n)PAREN  P ER0 - EH1 N\n)PARENS  P ER0 - EH1 N Z\n)RIGHT-PAREN  R AY1 T - P ER0 - EH1 N\n)RIGHT-PAREN(2)  R AY1 T - P EH1 - R AH0 N\n)UN-PARENTHESES  AH1 N - P ER0 - EH1 N - TH AH0 - S IY1 Z\n,COMMA  K AA1 - M AH0\n-DASH  D AE1 SH\n-HYPHEN  HH AY1 - F AH0 N\n...ELLIPSIS  IH0 - L IH1 P - S IH0 S\n.DECIMAL  D EH1 - S AH0 - M AH0 L\n.DOT  D AA1 T\n.FULL-STOP  F UH1 L - S T AA1 P\n.PERIOD  P IH1 - R IY0 - AH0 D\n.POINT  P OY1 N T\n/SLASH  S L AE1 SH\n0MALEFACTORS  M AE1 - L AH0 - F AE2 K - T ER0 Z\n:COLON  K OW1 - L AH0 N\n;SEMI-COLON  S EH1 - M IY0 - K OW1 - L AH0 N\n;SEMI-COLON(2)  S EH1 - M IH0 - K OW2 - L AH0 N\n?QUESTION-MARK  K W EH1 S - CH AH0 N - M AA1 R K\nA  AH0\nA'S  EY1 Z\nA(2)  EY1\nA.  EY1\nA.'S  EY1 Z\nA.S  EY1 Z\nA42128  EY1 - F AO1 R - T UW1 - W AH1 N - T UW1 - EY1 T\nAAA  T R IH2 - P AH0 - L EY1\nAABERG  AA1 - B ER0 G\nAACHEN  AA1 - K AH0 N\nAAKER  AA1 - K ER0\nAALSETH  AA1 L - S EH0 TH\nAAMODT  AA1 - M AH0 T\nAANCOR  AA1 N - K AO2 R\nAARDEMA  AA0 R - D EH1 - M AH0\nAARDVARK  AA1 R D - V AA2 R K\nAARON  EH1 - R AH0 N\nAARON'S  EH1 - R AH0 N Z\nAARONS  EH1 - R AH0 N Z\nAARONSON  EH1 - R AH0 N - S AH0 N\nAARONSON'S  EH1 - R AH0 N - S AH0 N Z\nAARONSON'S(2)  AA1 - R AH0 N - S AH0 N Z\nAARONSON(2)  AA1 - R AH0 N - S AH0 N\nAARTI  AA1 R - T IY2\nAASE  AA1 S\nAASEN  AA1 - S AH0 N\nAB  AE1 B\nAB(2)  EY1 - B IY1\nABABA  AH0 - B AA1 - B AH0\nABABA(2)  AA1 - B AH0 - B AH0\nABACHA  AE1 - B AH0 - K AH0\nABACK  AH0 - B AE1 K\nABACO  AE1 - B AH0 - K OW2\nABACUS  AE1 - B AH0 - K AH0 S\nABAD  AH0 - B AA1 D\nABADAKA  AH0 - B AE1 - D AH0 - K AH0\nABADI  AH0 - B AE1 - D IY0\nABADIE  AH0 - B AE1 - D IY0\nABAIR  AH0 - B EH1 R\nABALKIN  AH0 - B AA1 L - K IH0 N\nABALONE  AE2 - B AH0 - L OW1 - N IY0\nABALOS  AA0 - B AA1 - L OW0 Z\nABANDON  AH0 - B AE1 N - D AH0 N\nABANDONED  AH0 - B AE1 N - D AH0 N D\nABANDONING  AH0 - B AE1 N - D AH0 - N IH0 NG\nABANDONMENT  AH0 - B AE1 N - D AH0 N - M AH0 N T\nABANDONMENTS  AH0 - B AE1 N - D AH0 N - M AH0 N T S\nABANDONS  AH0 - B AE1 N - D AH0 N Z\nABANTO  AH0 - B AE1 N - T OW0\nABARCA  AH0 - B AA1 R - K AH0\nABARE  AA0 - B AA1 - R IY0\nABASCAL  AE1 - B AH0 S - K AH0 L\nABASH  AH0 - B AE1 SH\nABASHED  AH0 - B AE1 SH T\nABATE  AH0 - B EY1 T\nABATED  AH0 - B EY1 - T IH0 D\nABATEMENT  AH0 - B EY1 T - M AH0 N T\nABATEMENTS  AH0 - B EY1 T - M AH0 N T S\nABATES  AH0 - B EY1 T S\nABATING  AH0 - B EY1 - T IH0 NG\nABBA  AE1 - B AH0\nABBADO  AH0 - B AA1 - D OW0\nABBAS  AH0 - B AA1 S\nABBASI  AA0 - B AA1 - S IY0\nABBATE  AA1 - B EY0 T\nABBATIELLO  AA0 - B AA0 - T IY0 - EH1 - L OW0\nABBE  AE1 - B IY0\nABBE(2)  AE0 - B EY1\nABBENHAUS  AE1 - B AH0 N - HH AW2 S\nABBETT  AH0 - B EH1 T\nABBEVILLE  AE1 B - V IH0 L\nABBEY  AE1 - B IY0\nABBEY'S  AE1 - B IY0 Z\nABBIE  AE1 - B IY0\nABBITT  AE1 - B IH0 T\nABBOT  AE1 - B AH0 T\nABBOTT  AE1 - B AH0 T\nABBOTT'S  AE1 - B AH0 T S\nABBOUD  AH0 - B UW1 D\nABBOUD(2)  AH0 - B AW1 D\nABBREVIATE  AH0 - B R IY1 - V IY0 - EY2 T\nABBREVIATED  AH0 - B R IY1 - V IY0 - EY2 - T AH0 D\nABBREVIATED(2)  AH0 - B R IY1 - V IY0 - EY2 - T IH0 D\nABBREVIATES  AH0 - B R IY1 - V IY0 - EY2 T S\nABBREVIATING  AH0 - B R IY1 - V IY0 - EY2 - T IH0 NG\nABBREVIATION  AH0 - B R IY2 - V IY0 - EY1 - SH AH0 N\nABBREVIATIONS  AH0 - B R IY2 - V IY0 - EY1 - SH AH0 N Z\nABBRUZZESE  AA0 - B R UW0 T - S EY1 - Z IY0\nABBS  AE1 B Z\nABBY  AE1 - B IY0\nABCO  AE1 B - K OW0\nABCOTEK  AE1 B - K OW0 - T EH2 K\nABDALLA  AE2 B - D AE1 - L AH0\nABDALLAH  AE2 B - D AE1 - L AH0\nABDEL  AE1 B - D EH2 L\nABDELLA  AE2 B - D EH1 - L AH0\nABDICATE  AE1 B - D AH0 - K EY2 T\nABDICATED  AE1 B - D AH0 - K EY2 - T AH0 D\nABDICATES  AE1 B - D AH0 - K EY2 T S\nABDICATING  AE1 B - D IH0 - K EY2 - T IH0 NG\nABDICATION  AE2 B - D IH0 - K EY1 - SH AH0 N\nABDNOR  AE1 B D - N ER0\nABDO  AE1 B - D OW0\nABDOLLAH  AE2 B - D AA1 - L AH0\nABDOMEN  AE0 B - D OW1 - M AH0 N\nABDOMEN(2)  AE1 B - D AH0 - M AH0 N\nABDOMINAL  AE0 B - D AA1 - M AH0 - N AH0 L\nABDOMINAL(2)  AH0 B - D AA1 - M AH0 - N AH0 L\nABDUCT  AE0 B - D AH1 K T\nABDUCTED  AE0 B - D AH1 K - T IH0 D\nABDUCTED(2)  AH0 B - D AH1 K - T IH0 D\nABDUCTEE  AE0 B - D AH2 K - T IY1\nABDUCTEES  AE0 B - D AH2 K - T IY1 Z\nABDUCTING  AE0 B - D AH1 K - T IH0 NG\nABDUCTING(2)  AH0 B - D AH1 K - T IH0 NG\nABDUCTION  AE0 B - D AH1 K - SH AH0 N\nABDUCTION(2)  AH0 B - D AH1 K - SH AH0 N\nABDUCTIONS  AE0 B - D AH1 K - SH AH0 N Z\nABDUCTIONS(2)  AH0 B - D AH1 K - SH AH0 N Z\nABDUCTOR  AE0 B - D AH1 K - T ER0\nABDUCTOR(2)  AH0 B - D AH1 K - T ER0\nABDUCTORS  AE0 B - D AH1 K - T ER0 Z\nABDUCTORS(2)  AH0 B - D AH1 K - T ER0 Z\nABDUCTS  AE0 B - D AH1 K T S\nABDUL  AE0 B - D UW1 L\nABDULAZIZ  AE0 B - D UW2 - L AH0 - Z IY1 Z\nABDULLA  AA0 B - D UW1 - L AH0\nABDULLAH  AE2 B - D AH1 - L AH0\nABE  EY1 B\nABED  AH0 - B EH1 D\nABEDI  AH0 - B EH1 - D IY0\nABEE  AH0 - B IY1\nABEL  EY1 - B AH0 L\nABELA  AA0 - B EH1 - L AH0\nABELARD  AE1 - B IH0 - L ER0 D\nABELE  AH0 - B IY1 L\nABELES  AH0 - B IY1 L Z\nABELES(2)  EY1 - B AH0 - L IY2 Z\nABELL  EY1 - B AH0 L\nABELLA  AH0 - B EH1 - L AH0\nABELN  AE1 - B IH0 L N\nABELOW  AE1 - B AH0 - L OW0\nABELS  EY1 - B AH0 L Z\nABELSON  AE1 - B IH0 L - S AH0 N\nABEND  AE1 - B EH0 N D\nABEND(2)  AH0 - B EH1 N D\nABENDROTH  AE1 - B IH0 N - D R AO0 TH\nABER  EY1 - B ER0\nABERCROMBIE  AE2 - B ER0 - K R AA1 M - B IY0\nABERDEEN  AE1 - B ER0 - D IY2 N\nABERFORD  EY1 - B ER0 - F ER0 D\nABERG  AE1 - B ER0 G\nABERLE  AE1 - B ER0 - AH0 L\nABERLE(2)  AE1 - B ER0 L\nABERMIN  AE1 - B ER0 - M IH0 N\nABERNATHY  AE1 - B ER0 - N AE2 - TH IY0\nABERNETHY  AE1 - B ER0 - N EH2 - TH IY0\nABERRANT  AE0 - B EH1 - R AH0 N T\nABERRATION  AE2 - B ER0 - EY1 - SH AH0 N\nABERRATIONAL  AE2 - B ER0 - EY1 - SH AH0 - N AH0 L\nABERRATIONS  AE2 - B ER0 - EY1 - SH AH0 N Z\nABERT  AE1 - B ER0 T\nABET  AH0 - B EH1 T\nABETTED  AH0 - B EH1 - T IH0 D\nABETTING  AH0 - B EH1 - T IH0 NG\nABEX  EY1 - B EH0 K S\nABEYANCE  AH0 - B EY1 - AH0 N S\nABEYTA  AA0 - B EY1 - T AH0\nABHOR  AE0 B - HH AO1 R\nABHORRED  AH0 B - HH AO1 R D\nABHORRENCE  AH0 B - HH AO1 - R AH0 N S\nABHORRENT  AE0 B - HH AO1 - R AH0 N T\nABHORS  AH0 B - HH AO1 R Z\nABID  EY1 - B IH0 D\nABIDE  AH0 - B AY1 D\nABIDED  AH0 - B AY1 - D IH0 D\nABIDES  AH0 - B AY1 D Z\nABIDING  AH0 - B AY1 - D IH0 NG\nABIE  AE1 - B IY0\nABIGAIL  AE1 - B AH0 - G EY2 L\nABILA  AA0 - B IY1 - L AH0\nABILENE  AE1 - B IH0 - L IY2 N\nABILITIES  AH0 - B IH1 - L AH0 - T IY0 Z\nABILITY  AH0 - B IH1 - L AH0 - T IY0\nABINGTON  AE1 - B IH0 NG - T AH0 N\nABIO  AA1 - B IY0 - OW0\nABIOLA  AA2 - B IY0 - OW1 - L AH0\nABIOLA'S  AA2 - B IY0 - OW1 - L AH0 Z\nABIOMED  EY0 - B IY1 - AH0 - M EH0 D\nABITIBI  AE2 - B IH0 - T IY1 - B IY0\nABITZ  AE1 - B IH0 T S\nABJECT  AE1 B - JH EH0 K T\nABKHAZIA  AE0 B K - HH AA1 - Z Y AH0\nABKHAZIA(2)  AE0 B K - HH AE1 - Z Y AH0\nABKHAZIAN  AE0 B K - HH AA1 - Z IY0 - AH0 N\nABKHAZIAN(2)  AE0 B K - HH AE1 - Z IY0 - AH0 N\nABKHAZIAN(3)  AE0 B K - HH AA1 - Z Y AH0 N\nABKHAZIAN(4)  AE0 B K - HH AE1 - Z Y AH0 N\nABKHAZIANS  AE0 B K - HH AA1 - Z IY0 - AH0 N Z\nABKHAZIANS(2)  AE0 B K - HH AE1 - Z IY0 - AH0 N Z\nABLAZE  AH0 - B L EY1 Z\nABLE  EY1 - B AH0 L\nABLED  EY1 - B AH0 L D\nABLER  EY1 - B AH0 L - ER0\nABLER(2)  EY1 - B L ER0\nABLES  EY1 - B AH0 L Z\nABLEST  EY1 - B AH0 L S T\nABLEST(2)  EY1 - B L AH0 S T\nABLOOM  AH0 - B L UW1 M\nABLY  EY1 - B L IY0\nABNER  AE1 B - N ER0\nABNEY  AE1 B - N IY0\nABNORMAL  AE0 B - N AO1 R - M AH0 L\nABNORMALITIES  AE2 B - N AO0 R - M AE1 - L AH0 - T IY0 Z\nABNORMALITY  AE2 B - N AO0 R - M AE1 - L AH0 - T IY0\nABNORMALLY  AE0 B - N AO1 R - M AH0 - L IY0\nABO  AA1 - B OW0\nABO'S  AA1 - B OW0 Z\nABOARD  AH0 - B AO1 R D\nABODE  AH0 - B OW1 D\nABOLISH  AH0 - B AA1 - L IH0 SH\nABOLISHED  AH0 - B AA1 - L IH0 SH T\nABOLISHES  AH0 - B AA1 - L IH0 - SH IH0 Z\nABOLISHING  AH0 - B AA1 - L IH0 - SH IH0 NG\nABOLITION  AE2 - B AH0 - L IH1 - SH AH0 N\nABOLITIONISM  AE2 - B AH0 - L IH1 - SH AH0 - N IH2 - Z AH0 M\nABOLITIONIST  AE2 - B AH0 - L IH1 - SH AH0 - N AH0 S T\nABOLITIONISTS  AE2 - B AH0 - L IH1 - SH AH0 - N AH0 S T S\nABOLITIONISTS(2)  AE2 - B AH0 - L IH1 - SH AH0 - N AH0 S S\nABOLITIONISTS(3)  AE2 - B AH0 - L IH1 - SH AH0 - N AH0 S\nABOMINABLE  AH0 - B AA1 - M AH0 - N AH0 - B AH0 L\nABOMINATION  AH0 - B AA2 - M AH0 - N EY1 - SH AH0 N\nABOOD  AH0 - B UW1 D\nABOODI  AH0 - B UW1 - D IY0\nABORIGINAL  AE2 - B ER0 - IH1 - JH AH0 - N AH0 L\nABORIGINE  AE2 - B ER0 - IH1 - JH AH0 - N IY0\nABORIGINES  AE2 - B ER0 - IH1 - JH AH0 - N IY0 Z\nABORN  AH0 - B AO1 R N\nABORT  AH0 - B AO1 R T\nABORTED  AH0 - B AO1 R - T IH0 D\nABORTIFACIENT  AH0 - B AO2 R - T AH0 - F EY1 - SH AH0 N T\nABORTIFACIENTS  AH0 - B AO2 R - T AH0 - F EY1 - SH AH0 N T S\nABORTING  AH0 - B AO1 R - T IH0 NG\nABORTION  AH0 - B AO1 R - SH AH0 N\nABORTIONIST  AH0 - B AO1 R - SH AH0 N - IH0 S T\nABORTIONISTS  AH0 - B AO1 R - SH AH0 N - IH0 S T S\nABORTIONISTS(2)  AH0 - B AO1 R - SH AH0 N - IH0 S S\nABORTIONISTS(3)  AH0 - B AO1 R - SH AH0 N - IH0 S\nABORTIONS  AH0 - B AO1 R - SH AH0 N Z\nABORTIVE  AH0 - B AO1 R - T IH0 V\nABOTT  AH0 - B AA1 T\nABOU  AH0 - B UW1\nABOUD  AA0 - B UW1 D\nABOUHALIMA  AA2 - B UW0 - HH AA0 - L IY1 - M AH0\nABOUHALIMA'S  AA2 - B UW0 - HH AA0 - L IY1 - M AH0 Z\nABOUND  AH0 - B AW1 N D\nABOUNDED  AH0 - B AW1 N - D IH0 D\nABOUNDING  AH0 - B AW1 N - D IH0 NG\nABOUNDS  AH0 - B AW1 N D Z\nABOUT  AH0 - B AW1 T\nABOUT'S  AH0 - B AW1 T S\nABOVE  AH0 - B AH1 V\nABOVE'S  AH0 - B AH1 V Z\nABOVEBOARD  AH0 - B AH1 V - B AO2 R D\nABPLANALP  AE1 B - P L AH0 - N AE0 L P\nABRA  AA1 - B R AH0\nABRACADABRA  AE2 - B R AH0 - K AH0 - D AE1 - B R AH0\nABRAHAM  EY1 - B R AH0 - HH AE2 M\nABRAHAMIAN  AE2 - B R AH0 - HH EY1 - M IY0 - AH0 N\nABRAHAMS  EY1 - B R AH0 - HH AE2 M Z\nABRAHAMSEN  AE0 - B R AH0 - HH AE1 M - S AH0 N\nABRAHAMSON  AH0 - B R AE1 - HH AH0 M - S AH0 N\nABRAM  AH0 - B R AE1 M\nABRAMCZYK  AA1 - B R AH0 M - CH IH0 K\nABRAMO  AA0 - B R AA1 - M OW0\nABRAMOVITZ  AH0 - B R AA1 - M AH0 - V IH0 T S\nABRAMOWICZ  AH0 - B R AA1 - M AH0 - V IH0 CH\nABRAMOWITZ  AH0 - B R AA1 - M AH0 - W IH0 T S\nABRAMS  EY1 - B R AH0 M Z\nABRAMSON  EY1 - B R AH0 M - S AH0 N\nABRASION  AH0 - B R EY1 - ZH AH0 N\nABRASIONS  AH0 - B R EY1 - ZH AH0 N Z\nABRASIVE  AH0 - B R EY1 - S IH0 V\nABRASIVES  AH0 - B R EY1 - S IH0 V Z\nABREAST  AH0 - B R EH1 S T\nABREGO  AA0 - B R EH1 - G OW0\nABREU  AH0 - B R UW1\nABRIDGE  AH0 - B R IH1 JH\nABRIDGED  AH0 - B R IH1 JH D\nABRIL  AH0 - B R IH1 L\nABROAD  AH0 - B R AO1 D\nABROGATE  AE1 - B R AH0 - G EY2 T\nABROGATED  AE1 - B R AH0 - G EY2 - T IH0 D\nABROGATING  AE1 - B R AH0 - G EY2 - T IH0 NG\nABROGATION  AE2 - B R AH0 - G EY1 - SH AH0 N\nABRON  AH0 - B R AA1 N\nABRUPT  AH0 - B R AH1 P T\nABRUPTLY  AH0 - B R AH1 P T - L IY0\nABRUPTNESS  AH0 - B R AH1 P T - N AH0 S\nABRUTYN  EY1 - B R UW0 - T IH0 N\nABRUZZESE  AA0 - B R UW0 T - S EY1 - Z IY0\nABRUZZO  AA0 - B R UW1 - Z OW0\nABS  EY1 - B IY1 - EH1 S\nABS(2)  AE1 B Z\nABSALOM  AE1 B - S AH0 - L AH0 M\nABSCAM  AE1 B - S K AE0 M\nABSCESS  AE1 B - S EH2 S\nABSENCE  AE1 B - S AH0 N S\nABSENCES  AE1 B - S AH0 N - S IH0 Z\nABSENT  AE1 B - S AH0 N T\nABSENTEE  AE2 B - S AH0 N - T IY1\nABSENTEEISM  AE2 B - S AH0 N - T IY1 - IH0 - Z AH0 M\nABSENTEES  AE2 B - S AH0 N - T IY1 Z\nABSENTIA  AE0 B - S EH1 N - SH AH0\nABSHER  AE1 B - SH ER0\nABSHIER  AE1 B - SH IY0 - ER0\nABSHIRE  AE1 B - SH AY2 R\nABSO  AE1 B - S OW0\nABSOLOM  AE1 B - S AH0 - L AH0 M\nABSOLUT  AE2 B - S AH0 - L UW1 T\nABSOLUTE  AE1 B - S AH0 - L UW2 T\nABSOLUTELY  AE2 B - S AH0 - L UW1 T - L IY0\nABSOLUTENESS  AE1 B - S AH0 - L UW2 T - N AH0 S\nABSOLUTES  AE1 B - S AH0 - L UW2 T S\nABSOLUTION  AE2 B - S AH0 - L UW1 - SH AH0 N\nABSOLUTISM  AE1 B - S AH0 - L UW2 - T IH2 - Z AH0 M\nABSOLUTIST  AE0 B - S IH0 - L UW1 - T IH0 S T\nABSOLVE  AH0 B - Z AA1 L V\nABSOLVE(2)  AE0 B - Z AA1 L V\nABSOLVED  AH0 B - Z AA1 L V D\nABSOLVED(2)  AE0 B - Z AA1 L V D\nABSOLVES  AH0 B - Z AA1 L V Z\nABSOLVES(2)  AE0 B - Z AA1 L V Z\nABSOLVING  AH0 B - Z AA1 L - V IH0 NG\nABSOLVING(2)  AE0 B - Z AA1 L - V IH0 NG\nABSORB  AH0 B - Z AO1 R B\nABSORBED  AH0 B - Z AO1 R B D\nABSORBENCY  AH0 B - Z AO1 R - B AH0 N - S IY0\nABSORBENT  AH0 B - Z AO1 R - B AH0 N T\nABSORBER  AH0 B - Z AO1 R - B ER0\nABSORBERS  AH0 B - Z AO1 R - B ER0 Z\nABSORBING  AH0 B - Z AO1 R - B IH0 NG\nABSORBS  AH0 B - Z AO1 R B Z\nABSORPTION  AH0 B - Z AO1 R P - SH AH0 N\nABSORPTION(2)  AH0 B - S AO1 R P - SH AH0 N\nABSTAIN  AH0 B - S T EY1 N\nABSTAIN(2)  AE0 B - S T EY1 N\nABSTAINED  AH0 B - S T EY1 N D\nABSTAINED(2)  AE0 B - S T EY1 N D\nABSTAINING  AH0 B - S T EY1 - N IH0 NG\nABSTAINING(2)  AE0 B - S T EY1 - N IH0 NG\nABSTENTION  AH0 B - S T EH1 N - CH AH0 N\nABSTENTION(2)  AE0 B - S T EH1 N - CH AH0 N\nABSTENTIONS  AH0 B - S T EH1 N - CH AH0 N Z\nABSTENTIONS(2)  AE0 B - S T EH1 N - CH AH0 N Z\nABSTINENCE  AE1 B - S T AH0 - N AH0 N S\nABSTINENT  AE1 B - S T AH0 - N AH0 N T\nABSTON  AE1 B - S T AH0 N\nABSTRACT  AE0 B - S T R AE1 K T\nABSTRACT(2)  AE1 B - S T R AE2 K T\nABSTRACTED  AE1 B - S T R AE2 K - T IH0 D\nABSTRACTION  AE0 B - S T R AE1 K - SH AH0 N\nABSTRACTIONS  AE0 B - S T R AE1 K - SH AH0 N Z\nABSTRACTS  AE1 B - S T R AE0 K T S\nABSTRUSE  AH0 B - S T R UW1 S\nABSURD  AH0 B - S ER1 D\nABSURDIST  AH0 B - S ER1 - D IH0 S T\nABSURDITIES  AH0 B - S ER1 - D AH0 - T IY0 Z\nABSURDITY  AH0 B - S ER1 - D AH0 - T IY0\nABSURDLY  AH0 B - S ER1 D - L IY0\nABT  AE1 B T\nABT(2)  EY1 - B IY1 - T IY1\nABTS  AE1 B T S\nABTS(2)  EY1 - B IY1 - T IY1 Z\nABTS(3)  EY1 - B IY1 - T IY1 - EH1 S\nABU  AE1 - B UW0\nABUDRAHM  AH0 - B AH1 - D R AH0 M\nABULADZE  AE2 - B Y UW0 - L AE1 D - Z IY0\nABUNDANCE  AH0 - B AH1 N - D AH0 N S\nABUNDANT  AH0 - B AH1 N - D AH0 N T\nABUNDANTLY  AH0 - B AH1 N - D AH0 N T - L IY0\nABURTO  AH0 - B UH1 R - T OW2\nABURTO'S  AH0 - B UH1 R - T OW2 Z\nABUSE  AH0 - B Y UW1 S\nABUSE(2)  AH0 - B Y UW1 Z\nABUSED  AH0 - B Y UW1 Z D\nABUSER  AH0 - B Y UW1 - Z ER0\nABUSERS  AH0 - B Y UW1 - Z ER0 Z\nABUSES  AH0 - B Y UW1 - S IH0 Z\nABUSES(2)  AH0 - B Y UW1 - Z IH0 Z\nABUSING  AH0 - B Y UW1 - Z IH0 NG\nABUSIVE  AH0 - B Y UW1 - S IH0 V\nABUT  AH0 - B AH1 T\nABUTS  AH0 - B AH1 T S\nABUTTED  AH0 - B AH1 - T AH0 D\nABUTTING  AH0 - B AH1 - T IH0 NG\nABUZZ  AH0 - B AH1 Z\nABYSMAL  AH0 - B IH1 Z - M AH0 L\nABYSMALLY  AH0 - B IH1 Z - M AH0 - L IY0\nABYSS  AH0 - B IH1 S\nABZUG  AE1 B - Z AH2 G\nABZUG(2)  AE1 B - Z UH2 G\nAC  EY1 - S IY1\nACA  AE1 - K AH0\nACACIA  AH0 - K EY1 - SH AH0\nACADEME  AE1 - K AH0 - D IY2 M\nACADEMIA  AE2 - K AH0 - D IY1 - M IY0 - AH0\nACADEMIC  AE2 - K AH0 - D EH1 - M IH0 K\nACADEMICALLY  AE2 - K AH0 - D EH1 - M IH0 K - L IY0\nACADEMICIAN  AE2 - K AH0 - D AH0 - M IH1 - SH AH0 N\nACADEMICIANS  AE2 - K AH0 - D AH0 - M IH1 - SH AH0 N Z\nACADEMICIANS(2)  AH0 - K AE2 - D AH0 - M IH1 - SH AH0 N Z\nACADEMICS  AE2 - K AH0 - D EH1 - M IH0 K S\nACADEMIES  AH0 - K AE1 - D AH0 - M IY0 Z\nACADEMY  AH0 - K AE1 - D AH0 - M IY0\nACADEMY'S  AH0 - K AE1 - D AH0 - M IY0 Z\nACADIA  AH0 - K EY1 - D IY0 - AH0\nACAMPORA  AH0 - K AE1 M - P ER0 - AH0\nACANTHA  AA0 - K AA1 N - DH AH0\nACAPULCO  AE2 - K AH0 - P UH1 L - K OW0\nACCARDI  AA0 - K AA1 R - D IY0\nACCARDO  AA0 - K AA1 R - D OW0\nACCEDE  AE0 K - S IY1 D\nACCEDED  AE0 K - S IY1 - D IH0 D\nACCEDES  AE0 K - S IY1 D Z\nACCEDING  AE0 K - S IY1 - D IH0 NG\nACCEL  AH0 K - S EH1 L\nACCELERANT  AE0 K - S EH1 - L ER0 - AH0 N T\nACCELERANTS  AE0 K - S EH1 - L ER0 - AH0 N T S\nACCELERATE  AE0 K - S EH1 - L ER0 - EY2 T\nACCELERATED  AE0 K - S EH1 - L ER0 - EY2 - T IH0 D\nACCELERATES  AE0 K - S EH1 - L ER0 - EY2 T S\nACCELERATING  AE0 K - S EH1 - L ER0 - EY2 - T IH0 NG\nACCELERATION  AE2 K - S EH2 - L ER0 - EY1 - SH AH0 N\nACCELERATOR  AE0 K - S EH1 - L ER0 - EY2 - T ER0\nACCELEROMETER  AE0 K - S EH2 - L ER0 - AA1 - M AH0 - T ER0\nACCELEROMETERS  AE0 K - S EH2 - L ER0 - AA1 - M AH0 - T ER0 Z\nACCENT  AH0 K - S EH1 N T\nACCENT(2)  AE1 K - S EH2 N T\nACCENTED  AE1 K - S EH0 N - T IH0 D\nACCENTING  AE1 K - S EH0 N - T IH0 NG\nACCENTS  AE1 K - S EH0 N T S\nACCENTUATE  AE0 K - S EH1 N - CH UW0 - EY0 T\nACCENTUATED  AE0 K - S EH1 N - CH AH0 W - EY2 - T IH0 D\nACCENTUATES  AE0 K - S EH1 N - CH UW0 - EY0 T S\nACCENTUATING  AE0 K - S EH1 N - CH AH0 W - EY2 - T IH0 NG\nACCEPT  AE0 K - S EH1 P T\nACCEPT(2)  AH0 K - S EH1 P T\nACCEPTABILITY  AH0 K - S EH2 P - T AH0 - B IH1 - L AH0 - T IY0\nACCEPTABLE  AE0 K - S EH1 P - T AH0 - B AH0 L\nACCEPTABLE(2)  AH0 K - S EH1 P - T AH0 - B AH0 L\nACCEPTANCE  AE0 K - S EH1 P - T AH0 N S\nACCEPTANCE(2)  AH0 K - S EH1 P - T AH0 N S\nACCEPTANCES  AE0 K - S EH1 P - T AH0 N - S IH0 Z\nACCEPTED  AE0 K - S EH1 P - T IH0 D\nACCEPTED(2)  AH0 K - S EH1 P - T AH0 D\nACCEPTING  AE0 K - S EH1 P - T IH0 NG\nACCEPTING(2)  AH0 K - S EH1 P - T IH0 NG\nACCEPTS  AE0 K - S EH1 P T S\nACCESS  AE1 K - S EH2 S\nACCESSED  AE1 K - S EH2 S T\nACCESSIBILITY  AE2 K - S EH0 - S AH0 - B IH1 - L IH0 - T IY0\nACCESSIBLE  AE0 K - S EH1 - S AH0 - B AH0 L\nACCESSING  AE1 K - S EH2 - S IH0 NG\nACCESSION  AH0 K - S EH1 - SH AH0 N\nACCESSORIES  AE0 K - S EH1 - S ER0 - IY0 Z\nACCESSORIZE  AE0 K - S EH1 - S ER0 - AY2 Z\nACCESSORIZED  AE0 K - S EH1 - S ER0 - AY2 Z D\nACCESSORY  AE0 K - S EH1 - S ER0 - IY0\nACCETTA  AA0 - CH EH1 - T AH0\nACCIDENT  AE1 K - S AH0 - D AH0 N T\nACCIDENT'S  AE1 K - S AH0 - D AH0 N T S\nACCIDENTAL  AE2 K - S AH0 - D EH1 N - T AH0 L\nACCIDENTAL(2)  AE2 K - S AH0 - D EH1 - N AH0 L\nACCIDENTALLY  AE2 K - S AH0 - D EH1 N - T AH0 - L IY0\nACCIDENTALLY(2)  AE2 K - S AH0 - D EH1 - N AH0 - L IY0\nACCIDENTLY  AE1 K - S AH0 - D AH0 N T - L IY0\nACCIDENTS  AE1 K - S AH0 - D AH0 N T S\nACCION  AE1 - CH IY0 - AH0 N\nACCIVAL  AE1 - S IH0 - V AA2 L\nACCLAIM  AH0 - K L EY1 M\nACCLAIMED  AH0 - K L EY1 M D\nACCLAIMING  AH0 - K L EY1 - M IH0 NG\nACCLIMATE  AE1 - K L AH0 - M EY2 T\nACCLIMATED  AE1 - K L AH0 - M EY2 - T IH0 D\nACCLIMATION  AE2 - K L AH0 - M EY1 - SH AH0 N\nACCO  AE1 - K OW0\nACCOLA  AA0 - K OW1 - L AH0\nACCOLADE  AE1 - K AH0 - L EY2 D\nACCOLADES  AE1 - K AH0 - L EY2 D Z\nACCOMANDO  AA0 - K OW0 - M AA1 N - D OW0\nACCOMMODATE  AH0 - K AA1 - M AH0 - D EY2 T\nACCOMMODATED  AH0 - K AA1 - M AH0 - D EY2 - T AH0 D\nACCOMMODATES  AH0 - K AA1 - M AH0 - D EY2 T S\nACCOMMODATING  AH0 - K AA1 - M AH0 - D EY2 - T IH0 NG\nACCOMMODATION  AH0 - K AA2 - M AH0 - D EY1 - SH AH0 N\nACCOMMODATIONS  AH0 - K AA2 - M AH0 - D EY1 - SH AH0 N Z\nACCOMMODATIVE  AH0 - K AA1 - M AH0 - D EY2 - T IH0 V\nACCOMPANIED  AH0 - K AH1 M - P AH0 - N IY0 D\nACCOMPANIES  AH0 - K AH1 M - P AH0 - N IY0 Z\nACCOMPANIMENT  AH0 - K AH1 M P - N IH0 - M AH0 N T\nACCOMPANIMENT(2)  AH0 - K AH1 M P - N IY0 - M AH0 N T\nACCOMPANIMENTS  AH0 - K AH1 M P - N IH0 - M AH0 N T S\nACCOMPANIMENTS(2)  AH0 - K AH1 M P - N IY0 - M AH0 N T S\nACCOMPANIST  AH0 - K AH1 M - P AH0 - N AH0 S T\nACCOMPANY  AH0 - K AH1 M - P AH0 - N IY0\nACCOMPANYING  AH0 - K AH1 M - P AH0 - N IY0 - IH0 NG\nACCOMPLI  AA2 - K AA1 M - P L IY0\nACCOMPLI(2)  AH0 - K AA1 M - P L IY0\nACCOMPLICE  AH0 - K AA1 M - P L AH0 S\nACCOMPLICES  AH0 - K AA1 M - P L AH0 - S AH0 Z\nACCOMPLISH  AH0 - K AA1 M - P L IH0 SH\nACCOMPLISHED  AH0 - K AA1 M - P L IH0 SH T\nACCOMPLISHES  AH0 - K AA1 M - P L IH0 - SH IH0 Z\nACCOMPLISHING  AH0 - K AA1 M - P L IH0 - SH IH0 NG\nACCOMPLISHMENT  AH0 - K AA1 M - P L IH0 SH - M AH0 N T\nACCOMPLISHMENTS  AH0 - K AA1 M - P L IH0 SH - M AH0 N T S\nACCOR  AE1 - K AO2 R\nACCOR'S  AE1 - K ER0 Z\nACCORD  AH0 - K AO1 R D\nACCORD'S  AH0 - K AO1 R D Z\nACCORDANCE  AH0 - K AO1 R - D AH0 N S\nACCORDED  AH0 - K AO1 R - D IH0 D\nACCORDING  AH0 - K AO1 R - D IH0 NG\nACCORDINGLY  AH0 - K AO1 R - D IH0 NG - L IY0\nACCORDION  AH0 - K AO1 R - D IY0 - AH0 N\nACCORDIONS  AH0 - K AO1 R - D IY0 - AH0 N Z\nACCORDS  AH0 - K AO1 R D Z\nACCOST  AH0 - K AO1 S T\nACCOSTED  AH0 - K AA1 - S T AH0 D\nACCOSTING  AH0 - K AA1 - S T IH0 NG\nACCOUNT  AH0 - K AW1 N T\nACCOUNT'S  AH0 - K AW1 N T S\nACCOUNTABILITY  AH0 - K AW1 N - T AH0 - B IH0 - L IH0 - T IY0\nACCOUNTABILITY(2)  AH0 - K AW1 - N AH0 - B IH0 - L IH0 - T IY0\nACCOUNTABLE  AH0 - K AW1 N - T AH0 - B AH0 L\nACCOUNTABLE(2)  AH0 - K AW1 - N AH0 - B AH0 L\nACCOUNTANCY  AH0 - K AW1 N - T AH0 N - S IY0\nACCOUNTANT  AH0 - K AW1 N - T AH0 N T\nACCOUNTANT'S  AH0 - K AW1 N - T AH0 N T S\nACCOUNTANTS  AH0 - K AW1 N - T AH0 N T S\nACCOUNTANTS'  AH0 - K AW1 N - T AH0 N T S\nACCOUNTED  AH0 - K AW1 N - T AH0 D\nACCOUNTED(2)  AH0 - K AW1 - N AH0 D\nACCOUNTEMP  AH0 - K AW1 N - T EH2 M P\nACCOUNTEMPS  AH0 - K AW1 N - T EH2 M P S\nACCOUNTING  AH0 - K AW1 N - T IH0 NG\nACCOUNTING(2)  AH0 - K AW1 - N IH0 NG\nACCOUNTS  AH0 - K AW1 N T S\nACCOUTERMENT  AH0 - K UW1 - T ER0 - M AH0 N T\nACCOUTERMENTS  AH0 - K UW1 - T ER0 - M AH0 N T S\nACCREDIT  AH0 - K R EH2 - D AH0 T\nACCREDITATION  AH0 - K R EH2 - D AH0 - T EY1 - SH AH0 N\nACCREDITATIONS  AH0 - K R EH2 - D AH0 - D EY1 - SH AH0 N Z\nACCREDITED  AH0 - K R EH1 - D IH0 - T IH0 D\nACCREDITING  AH0 - K R EH1 - D AH0 - T IH0 NG\nACCRETION  AH0 - K R IY1 - SH AH0 N\nACCRUAL  AH0 - K R UW1 - AH0 L\nACCRUALS  AH0 - K R UW1 - AH0 L Z\nACCRUE  AH0 - K R UW1\nACCRUED  AH0 - K R UW1 D\nACCRUES  AH0 - K R UW1 Z\nACCRUING  AH0 - K R UW1 - IH0 NG\nACCUMULATE  AH0 - K Y UW1 - M Y AH0 - L EY2 T\nACCUMULATED  AH0 - K Y UW1 - M Y AH0 - L EY2 - T IH0 D\nACCUMULATES  AH0 - K Y UW1 - M Y AH0 - L EY2 T S\nACCUMULATING  AH0 - K Y UW1 - M Y AH0 - L EY2 - T IH0 NG\nACCUMULATION  AH0 - K Y UW2 - M Y AH0 - L EY1 - SH AH0 N\nACCUMULATIONS  AH0 - K Y UW2 - M Y AH0 - L EY1 - SH AH0 N Z\nACCUMULATIVE  AH0 - K Y UW1 - M Y AH0 - L EY2 - T IH0 V\nACCUMULATIVELY  AH0 - K Y UW1 - M Y AH0 - L EY2 - T IH0 V - L IY0\nACCUMULATIVELY(2)  AH0 - K Y UW1 - M Y AH0 - L AH0 - T IH0 V - L IY0\nACCUMULATOR  AH0 - K Y UW1 - M Y AH0 - L EY2 - T ER0\nACCUMULATORS  AH0 - K Y UW1 - M Y AH0 - L EY2 - T ER0 Z\nACCURACIES  AE1 - K Y ER0 - AH0 - S IY0 Z\nACCURACY  AE1 - K Y ER0 - AH0 - S IY0\nACCURATE  AE1 - K Y ER0 - AH0 T\nACCURATELY  AE1 - K Y ER0 - AH0 T - L IY0\nACCURAY  AE1 - K Y ER0 - EY2\nACCURAY'S  AE1 - K Y ER0 - EY2 Z\nACCURIDE  AE1 - K Y ER0 - AY2 D\nACCURSO  AA0 - K UH1 R - S OW0\nACCUSATION  AE2 - K Y AH0 - Z EY1 - SH AH0 N\nACCUSATION(2)  AE2 - K Y UW0 - Z EY1 - SH AH0 N\nACCUSATIONS  AE2 - K Y AH0 - Z EY1 - SH AH0 N Z\nACCUSATIONS(2)  AE2 - K Y UW0 - Z EY1 - SH AH0 N Z\nACCUSATIVE  AH0 - K Y UW1 - Z AH0 - T IH0 V\nACCUSATORY  AH0 - K Y UW1 - Z AH0 - T AO2 - R IY0\nACCUSE  AH0 - K Y UW1 Z\nACCUSED  AH0 - K Y UW1 Z D\nACCUSER  AH0 - K Y UW1 - Z ER0\nACCUSERS  AH0 - K Y UW1 - Z ER0 Z\nACCUSES  AH0 - K Y UW1 - Z IH0 Z\nACCUSING  AH0 - K Y UW1 - Z IH0 NG\nACCUSINGLY  AH0 - K Y UW1 - Z IH0 NG - L IY0\nACCUSTOM  AH0 - K AH1 - S T AH0 M\nACCUSTOMED  AH0 - K AH1 - S T AH0 M D\nACCUTANE  AE1 - K Y UW0 - T EY2 N\nACE  EY1 S\nACED  EY1 S T\nACER  EY1 - S ER0\nACERBIC  AH0 - S EH1 R - B IH0 K\nACERO  AH0 - S EH1 - R OW0\nACERRA  AH0 - S EH1 - R AH0\nACES  EY1 - S IH0 Z\nACETAMINOPHEN  AH0 - S IY2 - T AH0 - M IH1 - N AH0 - F AH0 N\nACETATE  AE1 - S AH0 - T EY2 T\nACETIC  AH0 - S EH1 - T IH0 K\nACETIC(2)  AH0 - S IY1 - T IH0 K\nACETO  AA0 - S EH1 - T OW0\nACETONE  AE1 - S AH0 - T OW2 N\nACETYLCHOLINE  AH0 - S EH2 - T AH0 L - K OW1 - L IY0 N\nACETYLCHOLINE(2)  AH0 - S IY2 - T AH0 L - K OW1 - L IY0 N\nACETYLENE  AH0 - S EH1 - T AH0 - L IY2 N\nACEVEDO  AE0 - S AH0 - V EY1 - D OW0\nACEVES  AA0 - S EY1 - V EH0 S\nACEY  EY1 - S IY0\nACHATZ  AE1 - K AH0 T S\nACHE  EY1 K\nACHEBE  AA0 - CH EY1 - B IY0\nACHEE  AH0 - CH IY1\nACHENBACH  AE1 - K IH0 N - B AA0 K\nACHENBAUM  AE1 - K AH0 N - B AW2 M\nACHES  EY1 K S\nACHESON  AE1 - CH AH0 - S AH0 N\nACHEY  AE1 - CH IY0\nACHIEVABLE  AH0 - CH IY1 - V AH0 - B AH0 L\nACHIEVE  AH0 - CH IY1 V\nACHIEVED  AH0 - CH IY1 V D\nACHIEVEMENT  AH0 - CH IY1 V - M AH0 N T\nACHIEVEMENTS  AH0 - CH IY1 V - M AH0 N T S\nACHIEVER  AH0 - CH IY1 - V ER0\nACHIEVERS  AH0 - CH IY1 - V ER0 Z\nACHIEVES  AH0 - CH IY1 V Z\nACHIEVING  AH0 - CH IY1 - V IH0 NG\nACHILLE  AH0 - K IH1 - L IY0\nACHILLES  AH0 - K IH1 - L IY0 Z\nACHILLES'  AH0 - K IH1 - L IY0 Z\nACHING  EY1 - K IH0 NG\nACHMED  AA1 HH - M EH0 D\nACHOA  AH0 - CH OW1 - AH0\nACHOA'S  AH0 - CH OW1 - AH0 Z\nACHOR  EY1 - K ER0\nACHORD  AE1 - K AO0 R D\nACHORN  AE1 - K ER0 N\nACHTENBERG  AE1 K - T EH0 N - B ER0 G\nACHTERBERG  AE1 K - T ER0 - B ER0 G\nACHY  EY1 - K IY0\nACID  AE1 - S AH0 D\nACIDIC  AH0 - S IH1 - D IH0 K\nACIDIFICATION  AH0 - S IH2 - D AH0 - F AH0 - K EY1 - SH AH0 N\nACIDIFIED  AH0 - S IH1 - D AH0 - F AY2 D\nACIDIFIES  AH0 - S IH1 - D AH0 - F AY2 Z\nACIDIFY  AH0 - S IH1 - D AH0 - F AY2\nACIDITY  AH0 - S IH1 - D AH0 - T IY0\nACIDLY  AE1 - S AH0 D - L IY0\nACIDOSIS  AE2 - S AH0 - D OW1 - S AH0 S\nACIDS  AE1 - S AH0 D Z\nACIDURIA  AE2 - S AH0 - D UH1 - R IY0 - AH0\nACIERNO  AA0 - S IH1 R - N OW0\nACK  AE1 K\nACKER  AE1 - K ER0\nACKER'S  AE1 - K ER0 Z\nACKERLEY  AE1 - K ER0 - L IY0\nACKERLY  AE1 - K ER0 - L IY0\nACKERMAN  AE1 - K ER0 - M AH0 N\nACKERMANN  AE1 - K ER0 - M AH0 N\nACKERSON  AE1 - K ER0 - S AH0 N\nACKERT  AE1 - K ER0 T\nACKHOUSE  AE1 K - HH AW2 S\nACKLAND  AE1 K - L AH0 N D\nACKLES  AE1 - K AH0 L Z\nACKLEY  AE1 K - L IY0\nACKLIN  AE1 - K L IH0 N\nACKMAN  AE1 K - M AH0 N\nACKNOWLEDGE  AE0 K - N AA1 - L IH0 JH\nACKNOWLEDGE(2)  IH0 K - N AA1 - L IH0 JH\nACKNOWLEDGEABLE  AE0 K - N AA1 - L IH0 - JH AH0 - B AH0 L\nACKNOWLEDGEABLE(2)  IH0 K - N AA1 - L IH0 - JH AH0 - B AH0 L\nACKNOWLEDGED  AE0 K - N AA1 - L IH0 JH D\nACKNOWLEDGED(2)  IH0 K - N AA1 - L IH0 JH D\nACKNOWLEDGEMENT  AE0 K - N AA1 - L IH0 JH - M AH0 N T\nACKNOWLEDGEMENT(2)  IH0 K - N AA1 - L IH0 JH - M AH0 N T\nACKNOWLEDGES  AE0 K - N AA1 - L IH0 - JH IH0 Z\nACKNOWLEDGES(2)  IH0 K - N AA1 - L IH0 - JH IH0 Z\nACKNOWLEDGING  AE0 K - N AA1 - L IH0 - JH IH0 NG\nACKNOWLEDGING(2)  IH0 K - N AA1 - L IH0 - JH IH0 NG\nACKNOWLEDGMENT  AE0 K - N AA1 - L IH0 JH - M AH0 N T\nACKNOWLEDGMENT(2)  IH0 K - N AA1 - L IH0 JH - M AH0 N T\nACKROYD  AE1 - K R OY2 D\nACKROYD'S  AE1 - K R OY2 D Z\nACMAT  AE1 K - M AE0 T\nACMAT'S  AE1 K - M AE0 T S\nACME  AE1 K - M IY0\nACME'S  AE1 K - M IY0 Z\nACNE  AE1 K - N IY0\nACOCELLA  AA0 - K OW0 - CH EH1 - L AH0\nACOFF  AE1 - K AO0 F\nACOG  AH0 - K AO1 G\nACOLYTE  AE1 - K AH0 - L AY2 T\nACOLYTES  AE1 - K AH0 - L AY2 T S\nACORD  AH0 - K AO1 R D\nACORN  EY1 - K AO0 R N\nACORNS  EY1 - K AO0 R N Z\nACOSTA  AH0 - K AO1 - S T AH0\nACOUSTIC  AH0 - K UW1 - S T IH0 K\nACOUSTICAL  AH0 - K UW1 - S T IH0 - K AH0 L\nACOUSTICALLY  AH0 - K UW1 - S T IH0 K - L IY0\nACOUSTICS  AH0 - K UW1 - S T IH0 K S\nACQUAINT  AH0 - K W EY1 N T\nACQUAINTANCE  AH0 - K W EY1 N - T AH0 N S\nACQUAINTANCES  AH0 - K W EY1 N - T AH0 N - S IH0 Z\nACQUAINTANCESHIP  AH0 - K W EY1 N - T AH0 N S - SH IH0 P\nACQUAINTED  AH0 - K W EY1 N - T IH0 D\nACQUAINTED(2)  AH0 - K W EY1 - N IH0 D\nACQUAVIVA  AA0 - K W AA0 - V IY1 - V AH0\nACQUIESCE  AE2 - K W IY0 - EH1 S\nACQUIESCED  AE2 - K W IY0 - EH1 S T\nACQUIESCENCE  AE2 - K W IY0 - EH1 - S AH0 N S\nACQUIESCING  AE2 - K W IY0 - EH1 - S IH0 NG\nACQUIRE  AH0 - K W AY1 - ER0\nACQUIRED  AH0 - K W AY1 - ER0 D\nACQUIRER  AH0 - K W AY1 - ER0 - ER0\nACQUIRERS  AH0 - K W AY1 - ER0 - ER0 Z\nACQUIRES  AH0 - K W AY1 - ER0 Z\nACQUIRING  AH0 - K W AY1 - R IH0 NG\nACQUIRING(2)  AH0 - K W AY1 - ER0 - IH0 NG\nACQUISITION  AE2 - K W AH0 - Z IH1 - SH AH0 N\nACQUISITION'S  AE2 - K W AH0 - Z IH1 - SH AH0 N Z\nACQUISITIONS  AE2 - K W AH0 - Z IH1 - SH AH0 N Z\nACQUISITIVE  AH0 - K W IH1 - Z AH0 - T IH0 V\nACQUIT  AH0 - K W IH1 T\nACQUITAINE  AE1 - K W IH0 - T EY2 N\nACQUITS  AH0 - K W IH1 T S\nACQUITTAL  AH0 - K W IH1 - T AH0 L\nACQUITTALS  AH0 - K W IH1 - T AH0 L Z\nACQUITTED  AH0 - K W IH1 - T AH0 D\nACQUITTED(2)  AH0 - K W IH1 - T IH0 D\nACQUITTING  AH0 - K W IH1 - T IH0 NG\nACRE  EY1 - K ER0\nACREAGE  EY1 - K ER0 - IH0 JH\nACREAGE(2)  EY1 - K R AH0 JH\nACREE  AH0 - K R IY1\nACRES  EY1 - K ER0 Z\nACREY  AE1 - K R IY0\nACRI  AA1 - K R IY0\nACRID  AE1 - K R IH0 D\nACRIMONIOUS  AE2 - K R AH0 - M OW1 - N IY0 - AH0 S\nACRIMONY  AE1 - K R IH0 - M OW2 - N IY0\nACROBAT  AE1 - K R AH0 - B AE2 T\nACROBATIC  AE2 - K R AH0 - B AE1 - T IH0 K\nACROBATICS  AE2 - K R AH0 - B AE1 - T IH0 K S\nACROBATS  AE1 - K R AH0 - B AE2 T S\nACRONYM  AE1 - K R AH0 - N IH0 M\nACRONYMS  AE1 - K R AH0 - N IH0 M Z\nACROPOLIS  AH0 - K R AA1 - P AH0 - L AH0 S\nACROSS  AH0 - K R AO1 S\nACRYLIC  AH0 - K R IH1 - L IH0 K\nACRYLICS  AH0 - K R IH1 - L IH0 K S\nACT  AE1 K T\nACT'S  AE1 K T S\nACTAVA  AE2 K - T AA1 - V AH0\nACTED  AE1 K - T AH0 D\nACTED(2)  AE1 K - T IH0 D\nACTIGALL  AE1 K - T IH0 - G AO0 L\nACTIN  AE1 K - T AH0 N\nACTING  AE1 K - T IH0 NG\nACTINIDE  AE1 K - T IH0 - N AY2 D\nACTINIDIA  AE2 K - T IH0 - N IH1 - D IY0 - AH0\nACTION  AE1 K - SH AH0 N\nACTION'S  AE1 K - SH AH0 N Z\nACTIONABLE  AE1 K - SH AH0 N - AH0 - B AH0 L\nACTIONS  AE1 K - SH AH0 N Z\nACTIVASE  AE1 K - T IH0 - V EY2 Z\nACTIVATE  AE1 K - T AH0 - V EY2 T\nACTIVATED  AE1 K - T AH0 - V EY2 - T AH0 D\nACTIVATED(2)  AE1 K - T IH0 - V EY2 - T IH0 D\nACTIVATES  AE1 K - T AH0 - V EY2 T S\nACTIVATING  AE1 K - T AH0 - V EY2 - T IH0 NG\nACTIVATION  AE2 K - T AH0 - V EY1 - SH AH0 N\nACTIVATOR  AE1 K - T AH0 - V EY2 - T ER0\nACTIVE  AE1 K - T IH0 V\nACTIVELY  AE1 K - T IH0 V - L IY0\nACTIVES  AE1 K - T IH0 V Z\nACTIVISION  AE1 K - T IH0 - V IH2 - ZH AH0 N\nACTIVISM  AE1 K - T IH0 - V IH2 - Z AH0 M\nACTIVIST  AE1 K - T AH0 - V AH0 S T\nACTIVIST(2)  AE1 K - T IH0 - V IH0 S T\nACTIVISTS  AE1 K - T AH0 - V AH0 S T S\nACTIVISTS'  AE1 K - T IH0 - V IH0 S T S\nACTIVISTS'(2)  AE1 K - T IH0 - V IH0 S\nACTIVISTS(2)  AE1 K - T IH0 - V IH0 S T S\nACTIVISTS(3)  AE1 K - T AH0 - V AH0 S S\nACTIVISTS(4)  AE1 K - T IH0 - V IH0 S S\nACTIVISTS(5)  AE1 K - T AH0 - V AH0 S\nACTIVISTS(6)  AE1 K - T IH0 - V IH0 S\nACTIVITIES  AE0 K - T IH1 - V AH0 - T IY0 Z\nACTIVITIES(2)  AE0 K - T IH1 - V IH0 - T IY0 Z\nACTIVITY  AE0 K - T IH1 - V AH0 - T IY0\nACTIVITY(2)  AE0 K - T IH1 - V IH0 - T IY0\nACTMEDIA  AE0 K T - M IY1 - D IY0 - AH0\nACTODINE  AE1 K - T OW0 - D AY2 N\nACTON  AE1 K - T AH0 N\nACTOR  AE1 K - T ER0\nACTOR'S  AE1 K - T ER0 Z\nACTORS  AE1 K - T ER0 Z\nACTORS'  AE1 K - T ER0 Z\nACTRESS  AE1 K - T R AH0 S\nACTRESS'S  AE1 K - T R AH0 - S IH0 Z\nACTRESSES  AE1 K - T R AH0 - S IH0 Z\nACTS  AE1 K T S\nACTS(2)  AE1 K S\nACTUAL  AE1 K - CH AH0 - W AH0 L\nACTUAL(2)  AE1 K - SH AH0 L\nACTUALITY  AE2 K - CH AH0 W - AE1 - L AH0 - T IY0\nACTUALIZE  AE1 K - CH AH0 W - AH0 - L AY2 Z\nACTUALLY  AE1 K - CH AH0 W - AH0 - L IY0\nACTUALLY(2)  AE1 K SH - L IY0\nACTUALLY(3)  AE1 K CH - L IY0\nACTUALLY(4)  AE1 K - SH AH0 - L IY0\nACTUARIAL  AE2 K - CH AH0 W - EH1 - R IY0 - AH0 L\nACTUARIES  AE1 K - CH AH0 W - EH2 - R IY0 Z\nACTUARY  AE1 K - CH AH0 W - EH2 - R IY0\nACTUATE  AE1 K - CH UW0 W - EY2 T\nACTUATOR  AE1 K - T Y UW0 - EY2 - T ER0\nACTUATOR(2)  AE1 K - CH UW0 - EY2 - T ER0\nACTUATORS  AE1 K - T Y UW0 - EY2 - T ER0 Z\nACTUATORS(2)  AE1 K - CH UW0 - EY2 - T ER0 Z\nACTUS  AE1 K - T AH0 S\nACUFF  AH0 - K AH1 F\nACUITY  AH0 - K Y UW1 - AH0 - T IY0\nACUMEN  AH0 - K Y UW1 - M AH0 N\nACUNA  AA0 - K UW1 - N AH0\nACUPUNCTURE  AE1 - K Y UW0 - P AH2 NG K - CH ER0\nACURA  AE1 - K Y ER0 - AH0\nACURA'S  AE1 - K Y ER0 - AH0 Z\nACURAS  AE1 - K Y ER0 - AH0 Z\nACUSON  AE2 - K Y UW1 - S AH0 N\nACUSTAR  AE1 - K Y UW0 - S T AA2 R\nACUSYST  AE1 - K Y UW0 - S IH0 S T\nACUTE  AH0 - K Y UW1 T\nACUTELY  AH0 - K Y UW1 T - L IY0\nACUTENESS  AH0 - K Y UW1 T - N AH0 S\nACYCLOVIR  AH0 - S IH1 - K L OW0 - V IH2 R\nAD  AE1 D\nAD'S  AE1 D Z\nAD-HOC  AE1 D - HH AA1 K\nAD-LIB  AE1 D - L IH1 B\nADA  EY1 - D AH0\nADABEL  AE1 - D AH0 - B EH0 L\nADABELLE  AE1 - D AH0 - B AH0 L\nADACHI  AA0 - D AA1 - K IY0\nADAGE  AE1 - D AH0 JH\nADAGE(2)  AE1 - D IH0 JH\nADAGIO  AH0 - D AA1 - ZH IY0 - OW2\nADAH  AE1 - D AA0\nADAIR  AH0 - D EH1 R\nADAIRE  AA0 - D EH1 R\nADAK  AH0 - D AE1 K\nADALAH  AA0 - D AA1 - L AH0\nADALIA  AA0 - D AA1 - L IY0 - AH0\nADAM  AE1 - D AH0 M\nADAM'S  AE1 - D AH0 M Z\nADAMANT  AE1 - D AH0 - M AH0 N T\nADAMANTLY  AE1 - D AH0 - M AH0 N T - L IY0\nADAMCIK  AA1 - D AH0 M - CH IH0 K\nADAMCZAK  AA1 - D AH0 M - CH AE0 K\nADAMCZYK  AA1 - D AH0 M - CH IH0 K\nADAME  AA0 - D AA1 - M IY0\nADAMEC  AH0 - D AA1 - M IH0 K\nADAMEK  AH0 - D AA1 - M EH0 K\nADAMES  AH0 - D EY1 M Z\nADAMI  AA0 - D AA1 - M IY0\nADAMIK  AH0 - D AA1 - M IH0 K\nADAMINA  AA0 - D AA0 - M IY1 - N AH0\nADAMKUS  AE1 - D AH0 M - K AH0 S\nADAMO  AA0 - D AA1 - M OW0\nADAMOWICZ  AH0 - D AA1 - M AH0 - V IH0 CH\nADAMS  AE1 - D AH0 M Z\nADAMS'  AE1 - D AH0 M Z\nADAMS'S  AE1 - D AH0 M - Z IH0 Z\nADAMSKI  AH0 - D AE1 M S - K IY2\nADAMSON  AE1 - D AH0 M - S AH0 N\nADAMSTOWN  AE1 - D AH0 M - S T AW2 N\nADAN  EY1 - D AH0 N\nADAPSO  AH0 - D AE1 P - S OW0\nADAPT  AH0 - D AE1 P T\nADAPTABILITY  AH0 - D AE2 P - T AH0 - B IH1 - L AH0 - T IY0\nADAPTABLE  AH0 - D AE1 P - T AH0 - B AH0 L\nADAPTAPLEX  AH0 - D AE1 P - T AH0 - P L EH2 K S\nADAPTATION  AE2 - D AH0 P - T EY1 - SH AH0 N\nADAPTATIONS  AE2 - D AE0 P - T EY1 - SH AH0 N Z\nADAPTATIONS(2)  AE2 - D AH0 P - T EY1 - SH AH0 N Z\nADAPTEC  AH0 - D AE1 P - T EH2 K\nADAPTED  AH0 - D AE1 P - T AH0 D\nADAPTED(2)  AH0 - D AE1 P - T IH0 D\nADAPTER  AH0 - D AE1 P - T ER0\nADAPTERS  AH0 - D AE1 P - T ER0 Z\nADAPTING  AH0 - D AE1 P - T IH0 NG\nADAPTIVE  AH0 - D AE1 P - T IH0 V\nADAPTOR  AH0 - D AE1 P - T ER0\nADAPTS  AH0 - D AE1 P T S\nADAR  AH0 - D AA1 R\nADARAND  AE1 - D AH0 - R AE2 N D\nADAY  AH0 - D EY1\nADAZA  AH0 - D AA1 - Z AH0\nADCOCK  AH0 D - K AA1 K\nADCOX  AH0 D - K AA1 K S\nADD  AE1 D\nADDAIR  AH0 - D EH1 R\nADDAMS  AE1 - D AH0 M Z\nADDED  AE1 - D AH0 D\nADDED(2)  AE1 - D IH0 D\nADDENDUM  AH0 - D EH1 - D AH0 M\nADDENDUMS  AH0 - D EH1 - D AH0 M Z\nADDEO  AA1 - D IY0 - OW0\nADDER  AE1 - D ER0\nADDERLEY  AH0 - D ER1 - L IY0\nADDICKS  AE1 - D IH0 K S\nADDICT  AH0 - D IH1 K T\nADDICT(2)  AE1 - D IH2 K T\nADDICTED  AH0 - D IH1 K - T AH0 D\nADDICTED(2)  AH0 - D IH1 K - T IH0 D\nADDICTING  AH0 - D IH1 K - T IH0 NG\nADDICTION  AH0 - D IH1 K - SH AH0 N\nADDICTIONS  AH0 - D IH1 K - SH AH0 N Z\nADDICTIVE  AH0 - D IH1 K - T IH0 V\nADDICTS  AH0 - D IH1 K T S\nADDICTS(2)  AE1 - D IH2 K T S\nADDIDAS  AH0 - D IY1 - D AH0 S\nADDIDAS'  AH0 - D IY1 - D AH0 S\nADDIDAS'S  AH0 - D IY1 - D AH0 - S IH0 Z\nADDIDASES  AH0 - D IY1 - D AH0 - S IH0 Z\nADDIE  AE1 - D IY0\nADDING  AE1 - D IH0 NG\nADDINGTON  AE1 - D IH0 NG - T AH0 N\nADDIS  AA1 - D IH0 S\nADDIS-ABABA  AA1 - D IH0 S - AH0 - B AA1 - B AH0\nADDIS-ABABA(2)  AA1 - D IY0 - S AH0 - B AA1 - B AH0\nADDISON  AE1 - D AH0 - S AH0 N\nADDISON'S  AE1 - D IH0 - S AH0 N Z\nADDISON(2)  AE1 - D IH0 - S AH0 N\nADDITION  AH0 - D IH1 - SH AH0 N\nADDITIONAL  AH0 - D IH1 - SH AH0 - N AH0 L\nADDITIONAL(2)  AH0 - D IH1 SH - N AH0 L\nADDITIONALLY  AH0 - D IH1 - SH AH0 N - AH0 - L IY0\nADDITIONALLY(2)  AH0 - D IH1 SH - N AH0 - L IY0\nADDITIONS  AH0 - D IH1 - SH AH0 N Z\nADDITIVE  AE1 - D AH0 - T IH0 V\nADDITIVE(2)  AE1 - D IH0 - T IH0 V\nADDITIVES  AE1 - D AH0 - T IH0 V Z\nADDITIVES(2)  AE1 - D IH0 - T IH0 V Z\nADDLE  AE1 - D AH0 L\nADDLED  AE1 - D AH0 L D\nADDLEMAN  AE1 - D AH0 L - M AH0 N\nADDRESS  AE1 - D R EH2 S\nADDRESS(2)  AH0 - D R EH1 S\nADDRESSABLE  AH0 - D R EH1 - S AH0 - B AH0 L\nADDRESSED  AH0 - D R EH1 S T\nADDRESSEE  AE2 - D R EH0 - S IY1\nADDRESSES  AE1 - D R EH1 - S IH0 Z\nADDRESSES(2)  AH0 - D R EH1 - S IH0 Z\nADDRESSING  AH0 - D R EH1 - S IH0 NG\nADDS  AE1 D Z\nADDUCI  AA0 - D UW1 - CH IY0\nADDWEST  AE2 D - W EH1 S T\nADDY  AE1 - D IY0\nADE  EY1 D\nADEE  AH0 - D IY1\nADEL  AH0 - D EH1 L\nADELA  AH0 - D EH1 - L AH0\nADELAAR  AE1 - D AH0 - L AA2 R\nADELAIDE  AE1 - D AH0 - L EY2 D\nADELBERT  AH0 - D EH1 L - B ER0 T\nADELE  AH0 - D EH1 L\nADELE'S  AH0 - D EH1 L Z\nADELINE  AE1 - D AH0 - L AY2 N\nADELIZZI  AE2 - D AH0 - L IY1 - Z IY0\nADELL  AH0 - D EH1 L\nADELL'S  AH0 - D EH1 L Z\nADELLE  AH0 - D EH1 L\nADELMAN  AE1 - D AH0 L - M AH0 N\nADELMAN(2)  EH1 - D AH0 L - M AH0 N\nADELMANN  AE1 - D AH0 L - M AH0 N\nADELPHA  AH0 - D EH1 L - F AH0\nADELPHIA  AH0 - D EH1 L - F IY0 - AH0\nADELPHIA'S  AH0 - D EH1 L - F IY0 - AH0 Z\nADELSBERGER  AE1 - D IH0 L Z - B ER0 - G ER0\nADELSON  AE1 - D AH0 L - S AH0 N\nADELSTEIN  AE1 - D AH0 L - S T AY0 N\nADELSTEIN(2)  AE1 - D AH0 L - S T IY0 N\nADEN  EY1 - D AH0 N\nADENA  AE1 - D IH0 - N AH0\nADENAUER  EY1 - D AH0 - N AW2 R\nADENAUER(2)  AE1 - D AH0 - N AW2 R\nADENINE  AE1 - D AH0 - N IY2 N\nADENOID  AE1 - D AH0 - N OY2 D\nADENOIDS  AE1 - D AH0 - N OY2 D Z\nADEPT  AH0 - D EH1 P T\nADEQUACY  AE1 - D AH0 - K W AH0 - S IY0\nADEQUATE  AE1 - D AH0 - K W AH0 T\nADEQUATE(2)  AE1 - D AH0 - K W EY2 T\nADEQUATELY  AE1 - D AH0 - K W AH0 T - L IY0\nADEQUATELY(2)  AE1 - D AH0 - K W IH0 T - L IY0\nADER  EY1 - D ER0\nADERHOLD  AE1 - D ER0 - HH OW0 L D\nADERHOLT  AE1 - D ER0 - HH OW0 L T\nADERMAN  AE1 - D ER0 - M AH0 N\nADES  EY1 D Z\nADEY  EY1 - D IY0\nADGER  AE1 - JH ER0\nADHAM  AE1 D - HH AE0 M\nADHERE  AH0 D - HH IH1 R\nADHERED  AE0 D - HH IH1 R D\nADHERENCE  AH0 D - HH IH1 - R AH0 N S\nADHERENT  AH0 D - HH IH1 - R AH0 N T\nADHERENTS  AE0 D - HH IH1 - R AH0 N T S\nADHERES  AH0 D - HH IH1 R Z\nADHERING  AH0 D - HH IH1 - R IH0 NG\nADHESIVE  AE0 D - HH IY1 - S IH0 V\nADHESIVE(2)  AH0 D - HH IY1 - S IH0 V\nADHESIVES  AE0 D - HH IY1 - S IH0 V Z\nADHESIVES(2)  AH0 D - HH IY1 - S IH0 V Z\nADIA  AA1 - D IY0 - AH0\nADID  AH0 - D IH1 D\nADIDAS  AH0 - D IY1 - D AH0 S\nADIEU  AH0 - D UW1\nADIN  AH0 - D IH1 N\nADINA  AA0 - D IY1 - N AH0\nADINE  AA0 - D IY1 - N IY0\nADINOLFI  AA0 - D IY0 - N OW1 L - F IY0\nADIOS  AA2 - D IY0 - OW1 S\nADIPOSE  AE1 - D AH0 - P OW2 S\nADIRONDACK  AE2 - D ER0 - AA1 N - D AE0 K\nADJACENT  AH0 - JH EY1 - S AH0 N T\nADJANI  AE0 D - JH AA1 - N IY0\nADJECTIVE  AE1 - JH IH0 K - T IH0 V\nADJECTIVES  AE1 - JH IH0 K - T IH0 V Z\nADJOIN  AH0 - JH OY1 N\nADJOINING  AH0 - JH OY1 - N IH0 NG\nADJOINS  AH0 - JH OY1 N Z\nADJOURN  AH0 - JH ER1 N\nADJOURNED  AH0 - JH ER1 N D\nADJOURNING  AH0 - JH ER1 - N IH0 NG\nADJOURNMENT  AH0 - JH ER1 N - M AH0 N T\nADJOURNS  AH0 - JH ER1 N Z\nADJUDGE  AH0 - JH AH1 JH\nADJUDGED  AH0 - JH AH1 JH D\nADJUDICATE  AH0 - JH UW1 - D IH0 - K EY2 T\nADJUDICATED  AH0 - JH UW1 - D AH0 - K EY2 - T IH0 D\nADJUDICATING  AH0 - JH UW1 - D IH0 - K EY2 - T IH0 NG\nADJUDICATION  AH0 - JH UW2 - D AH0 - K EY1 - SH AH0 N\nADJUNCT  AE1 - JH AH2 NG K T\nADJUNCTS  AE1 - JH AH2 NG K T S\nADJUST  AH0 - JH AH1 S T\nADJUSTABLE  AH0 - JH AH1 - S T AH0 - B AH0 L\nADJUSTABLES  AH0 - JH AH1 - S T AH0 - B AH0 L Z\nADJUSTED  AH0 - JH AH1 - S T AH0 D\nADJUSTED(2)  AH0 - JH AH1 - S T IH0 D\nADJUSTER  AH0 - JH AH1 - S T ER0\nADJUSTERS  AH0 - JH AH1 - S T ER0 Z\nADJUSTING  AH0 - JH AH1 - S T IH0 NG\nADJUSTMENT  AH0 - JH AH1 S T - M AH0 N T\nADJUSTMENTS  AH0 - JH AH1 S T - M AH0 N T S\nADJUSTS  AH0 - JH AH1 S T S\nADJUSTS(2)  AH0 - JH AH1 S S\nADJUSTS(3)  AH0 - JH AH1 S\nADJUTANT  AE1 - JH AH0 - T AH0 N T\nADKINS  AE1 D - K IH0 N Z\nADKINSON  AE1 D - K IH0 N - S AH0 N\nADKISON  AE1 D - K IH0 - S AH0 N\nADKISSON  AE1 D - K IH0 - S AH0 N\nADL-TABATABA  AA2 - D AH0 L - T AA2 - B AH0 - T AA1 - B AH0\nADL-TABATABAI  AA2 - D AH0 L - T AA2 - B AH0 - T AH2 - B AY1\nADLAI  AA0 D - L AA1 - IY0\nADLER  AE1 D - L ER0\nADLEY  AE1 D - L IY0\nADLON  AE1 D - L AA0 N\nADMAN  AE1 D - M AH0 N\nADMEN  AE1 D - M AH0 N\nADMINISTER  AH0 D - M IH1 - N AH0 - S T ER0\nADMINISTERED  AH0 D - M IH1 - N AH0 - S T ER0 D\nADMINISTERING  AE0 D - M IH1 - N IH0 - S T ER0 - IH0 NG\nADMINISTERS  AE0 D - M IH1 - N IH0 - S T ER0 Z\nADMINISTRATE  AE0 D - M IH1 - N IH0 - S T R EY2 T\nADMINISTRATING  AH0 D - M IH1 - N AH0 - S T R EY2 - T IH0 NG\nADMINISTRATION  AE0 D - M IH2 - N IH0 - S T R EY1 - SH AH0 N\nADMINISTRATION'S  AE0 D - M IH2 - N IH0 - S T R EY1 - SH AH0 N Z\nADMINISTRATIONS  AE0 D - M IH2 - N IH0 - S T R EY1 - SH AH0 N Z\nADMINISTRATIVE  AH0 D - M IH1 - N AH0 - S T R EY2 - T IH0 V\nADMINISTRATIVELY  AE0 D - M IH2 - N AH0 - S T R EY1 - T IH0 V - L IY0\nADMINISTRATOR  AH0 D - M IH1 - N AH0 - S T R EY2 - T ER0\nADMINISTRATORS  AE0 D - M IH1 - N IH0 - S T R EY2 - T ER0 Z\nADMINISTRATORS'  AE0 D - M IH1 - N AH0 - S T R EY2 - T ER0 Z\nADMIRA  AE0 D - M AY1 - R AH0\nADMIRA'S  AE0 D - M AY1 - R AH0 Z\nADMIRABLE  AE1 D - M ER0 - AH0 - B AH0 L\nADMIRABLE(2)  AE1 D - M R AH0 - B AH0 L\nADMIRABLY  AE1 D - M ER0 - AH0 - B L IY0\nADMIRAL  AE1 D - M ER0 - AH0 L\nADMIRAL'S  AE1 D - M ER0 - AH0 L Z\nADMIRALS  AE1 D - M ER0 - AH0 L Z\nADMIRALTY  AE1 D - M ER0 - AH0 L - T IY0\nADMIRATION  AE2 D - M ER0 - EY1 - SH AH0 N\nADMIRATIONS  AE2 D - M ER0 - EY1 - SH AH0 N Z\nADMIRE  AE0 D - M AY1 R\nADMIRED  AH0 D - M AY1 - ER0 D\nADMIRER  AE0 D - M AY1 - R ER0\nADMIRERS  AH0 D - M AY1 - R ER0 Z\nADMIRES  AE0 D - M AY1 R Z\nADMIRING  AE0 D - M AY1 - R IH0 NG\nADMIRINGLY  AE0 D - M AY1 - R IH0 NG - L IY0\nADMISSIBILITY  AH0 D - M IH2 - S AH0 - B IH1 - L AH0 - T IY0\nADMISSIBLE  AH0 D - M IH1 - S AH0 - B AH0 L\nADMISSION  AE0 D - M IH1 - SH AH0 N\nADMISSION(2)  AH0 D - M IH1 - SH AH0 N\nADMISSIONS  AE0 D - M IH1 - SH AH0 N Z\nADMISSIONS(2)  AH0 D - M IH1 - SH AH0 N Z\nADMIT  AH0 D - M IH1 T\nADMITS  AH0 D - M IH1 T S\nADMITTANCE  AH0 D - M IH1 - T AH0 N S\nADMITTED  AH0 D - M IH1 - T AH0 D\nADMITTEDLY  AE0 D - M IH1 - T IH0 D - L IY0\nADMITTING  AE0 D - M IH1 - T IH0 NG\nADMITTING(2)  AH0 D - M IH1 - T IH0 NG\nADMONISH  AE0 D - M AA1 - N IH0 SH\nADMONISHED  AH0 D - M AA1 - N IH0 SH T\nADMONISHES  AE0 D - M AA1 - N IH0 - SH IH0 Z\nADMONISHING  AE0 D - M AA1 - N IH0 - SH IH0 NG\nADMONISHMENT  AE0 D - M AA1 - N IH0 SH - M EH0 N T\nADMONITION  AE2 D - M AH0 - N IH1 - SH AH0 N\nADMONITIONS  AE2 D - M AH0 - N IH1 - SH AH0 N Z\nADNAN  AE1 D - N AH0 N\nADNEY  AE1 D - N IY0\nADO  AH0 - D UW1\nADOBE  AH0 - D OW1 - B IY0\nADOBE'S  AH0 - D OW1 - B IY0 Z\nADOLESCENCE  AE2 - D AH0 - L EH1 - S AH0 N S\nADOLESCENCE(2)  AE2 - D OW0 - L EH1 - S AH0 N S\nADOLESCENT  AE2 - D AH0 - L EH1 - S AH0 N T\nADOLESCENT(2)  AE2 - D OW0 - L EH1 - S AH0 N T\nADOLESCENTS  AE2 - D AH0 - L EH1 - S AH0 N T S\nADOLESCENTS(2)  AE2 - D OW0 - L EH1 - S AH0 N T S\nADOLF  EY1 - D AA0 L F\nADOLF'S  EY1 - D AA0 L F S\nADOLFO  AH0 - D AA1 L - F OW2\nADOLPH  EY1 - D AO0 L F\nADOLPHA  AA0 - D OW1 L - F AH0\nADOLPHSON  AE1 - D OW0 L F - S AH0 N\nADON  AA0 - D AO1 N\nADONIA  AA0 - D OW1 - N IY0 - AH0\nADOPT  AH0 - D AA1 P T\nADOPTABLE  AH0 - D AA1 P - T AH0 - B AH0 L\nADOPTED  AH0 - D AA1 P - T AH0 D\nADOPTEE  AH0 - D AA1 P - T IY1\nADOPTEES  AH0 - D AA1 P - T IY1 Z\nADOPTING  AH0 - D AA1 P - T IH0 NG\nADOPTION  AH0 - D AA1 P - SH AH0 N\nADOPTIONS  AH0 - D AA1 P - SH AH0 N Z\nADOPTIVE  AH0 - D AA1 P - T IH0 V\nADOPTS  AH0 - D AA1 P T S\nADOR  AA0 - D AO1 R\nADORA  AA0 - D AO1 - R AH0\nADORABELLE  AE1 - D ER0 - AH0 - B AH0 L\nADORABLE  AH0 - D AO1 - R AH0 - B AH0 L\nADORATION  AE2 - D ER0 - EY1 - SH AH0 N\nADORE  AH0 - D AO1 R\nADORED  AH0 - D AO1 R D\nADOREE  AE0 - D ER0 - IY1\nADORES  AH0 - D AO1 R Z\nADORING  AH0 - D AO1 - R IH0 NG\nADORN  AH0 - D AO1 R N\nADORNA  AA0 - D AO1 R - N AH0\nADORNED  AH0 - D AO1 R N D\nADORNMENT  AH0 - D AO1 R N - M AH0 N T\nADORNO  AA0 - D AO1 R - N OW0\nADORNS  AH0 - D AO1 R N Z\nADRA  EY1 - D R AH0\nADRAGNA  AA0 - D R AA1 G - N AH0\nADRDA  EY1 - D ER0 - D AH0\nADREA  AA1 - D R IY0 - AH0\nADRENAL  AH0 - D R IY1 - N AH0 L\nADRENALIN  AH0 - D R EH1 - N AH0 - L IH0 N\nADRENALINE  AH0 - D R EH1 - N AH0 - L AH0 N\nADRIA  AA1 - D R IY0 - AH0\nADRIAN  EY1 - D R IY0 - AH0 N\nADRIANA  EY2 - D R IY0 - AE1 - N AH0\nADRIANCE  AA0 - D R IY1 - AH0 N S\nADRIANO  AA0 - D R IY0 - AA1 - N OW0\nADRIATIC  EY2 - D R IY0 - AE1 - T IH0 K\nADRIEL  AH0 - D R IY1 L\nADRIENNE  AA0 - D R IY0 - EH1 N\nADRIFT  AH0 - D R IH1 F T\nADROIT  AH0 - D R OY1 T\nADROITLY  AH0 - D R OY1 T - L IY0\nADS  AE1 D Z\nADS'  AE1 D Z\nADSIT  AE1 D - S IH0 T\nADSS  AE1 D S\nADSS(2)  EY1 - D IY1 - EH1 - S EH1 S\nADTEC  AE1 D - T EH2 K\nADULATE  AE1 - JH AH0 - L EY2 T\nADULATION  AE2 - JH AH0 - L EY1 - SH AH0 N\nADULIADAE  AH0 - D UW2 - L IY0 - AA1 - D EY0\nADULT  AH0 - D AH1 L T\nADULT(2)  AE1 - D AH0 L T\nADULTERATE  AH0 - D AH1 L - T ER0 - EY2 T\nADULTERATED  AH0 - D AH1 L - T ER0 - EY2 - T IH0 D\nADULTERER  AH0 - D AH1 L - T ER0 - ER0\nADULTERERS  AH0 - D AH1 L - T ER0 - ER0 Z\nADULTEROUS  AH0 - D AH1 L - T ER0 - AH0 S\nADULTERY  AH0 - D AH1 L - T ER0 - IY0\nADULTHOOD  AH0 - D AH1 L T - HH UH2 D\nADULTS  AH0 - D AH1 L T S\nADULTS'  AH0 - D AH1 L T S\nADULTS'(2)  AE1 - D AH0 L T S\nADULTS(2)  AE1 - D AH0 L T S\nADUSDUR  AE1 - D AH0 S - D ER0\nADVANCE  AH0 D - V AE1 N S\nADVANCED  AH0 D - V AE1 N S T\nADVANCEMENT  AH0 D - V AE1 N S - M AH0 N T\nADVANCEMENTS  AH0 D - V AE1 N - S M AH0 N T S\nADVANCER  AH0 D - V AE1 N - S ER0\nADVANCERS  AH0 D - V AE1 N - S ER0 Z\nADVANCES  AH0 D - V AE1 N - S AH0 Z\nADVANCES(2)  AH0 D - V AE1 N - S IH0 Z\nADVANCING  AH0 D - V AE1 N - S IH0 NG\nADVANTA  AE0 D - V AE1 N - T AH0\nADVANTA(2)  AH0 D - V AE1 N - T AH0\nADVANTAGE  AE0 D - V AE1 N - T IH0 JH\nADVANTAGE(2)  AH0 D - V AE1 N - T IH0 JH\nADVANTAGE(3)  AE0 D - V AE1 - N IH0 JH\nADVANTAGE(4)  AH0 D - V AE1 - N AH0 JH\nADVANTAGED  AE0 D - V AE1 N - T IH0 JH D\nADVANTAGED(2)  AH0 D - V AE1 N - T IH0 JH D\nADVANTAGED(3)  AE0 D - V AE1 - N IH0 JH D\nADVANTAGED(4)  AH0 D - V AE1 - N IH0 JH D\nADVANTAGEOUS  AE2 D - V AH0 N - T EY1 - JH AH0 S\nADVANTAGES  AE0 D - V AE1 N - T IH0 - JH IH0 Z\nADVANTAGES(2)  AH0 D - V AE1 N - T IH0 - JH IH0 Z\nADVANTAGES(3)  AE0 D - V AE1 - N IH0 - JH IH0 Z\nADVANTAGES(4)  AH0 D - V AE1 - N IH0 - JH IH0 Z\nADVANTEST  AE0 D - V AE1 N - T AH0 S T\nADVANTEST(2)  AH0 D - V AE1 N - T AH0 S T\nADVECTION  AE0 D - V EH1 K - SH AH0 N\nADVENT  AE1 D - V EH2 N T\nADVENTIST  AE1 D - V EH2 N - T IH0 S T\nADVENTISTS  AE1 D - V EH2 N - T IH0 S T S\nADVENTISTS(2)  AE1 D - V EH2 N - T IH0 S S\nADVENTURE  AE0 D - V EH1 N - CH ER0\nADVENTURE(2)  AH0 D - V EH1 N - CH ER0\nADVENTURER  AE0 D - V EH1 N - CH ER0 - ER0\nADVENTURER(2)  AH0 D - V EH1 N - CH ER0 - ER0\nADVENTURERS  AE0 D - V EH1 N - CH ER0 - ER0 Z\nADVENTURERS(2)  AH0 D - V EH1 N - CH ER0 - ER0 Z\nADVENTURES  AE0 D - V EH1 N - CH ER0 Z\nADVENTURES(2)  AH0 D - V EH1 N - CH ER0 Z\nADVENTURESOME  AE0 D - V EH1 N - CH ER0 - S AH0 M\nADVENTURESOME(2)  AH0 D - V EH1 N - CH ER0 - S AH0 M\nADVENTURISM  AE0 D - V EH1 N - CH ER0 - IH2 - Z AH0 M\nADVENTURISM(2)  AH0 D - V EH1 N - CH ER0 - IH2 - Z AH0 M\nADVENTUROUS  AE0 D - V EH1 N - CH ER0 - AH0 S\nADVENTUROUS(2)  AH0 D - V EH1 N - CH ER0 - AH0 S\nADVERB  AE1 D - V ER0 B\nADVERBIAL  AE0 D - V ER1 - B IY0 - AH0 L\nADVERBS  AE1 D - V ER0 B Z\nADVERSARIAL  AE2 D - V ER0 - S EH1 - R IY0 - AH0 L\nADVERSARIES  AE1 D - V ER0 - S EH2 - R IY0 Z\nADVERSARY  AE1 D - V ER0 - S EH2 - R IY0\nADVERSE  AE0 D - V ER1 S\nADVERSE(2)  AE1 D - V ER2 S\nADVERSE(3)  AH0 D - V ER1 S\nADVERSELY  AE0 D - V ER1 S - L IY0\nADVERSITY  AE0 D - V ER1 - S IH0 - T IY0\nADVERSITY(2)  AH0 D - V ER1 - S IH0 - T IY0\nADVERTISE  AE1 D - V ER0 - T AY2 Z\nADVERTISED  AE1 D - V ER0 - T AY2 Z D\nADVERTISED(2)  AE2 D - V ER0 - T AY1 Z D\nADVERTISEMENT  AH0 D - V ER1 - T AH0 Z - M AH0 N T\nADVERTISEMENT(2)  AE2 D - V ER0 - T AY1 Z - M AH0 N T\nADVERTISEMENTS  AE1 D - V ER0 - T AY2 Z - M AH0 N T S\nADVERTISER  AE1 D - V ER0 - T AY2 - Z ER0\nADVERTISER'S  AE1 D - V ER0 - T AY2 - Z ER0 Z\nADVERTISERS  AE1 D - V ER0 - T AY2 - Z ER0 Z\nADVERTISERS'  AE1 D - V ER2 - T AY2 - Z ER0 Z\nADVERTISES  AE1 D - V ER0 - T AY2 - Z IH0 Z\nADVERTISING  AE1 D - V ER0 - T AY2 - Z IH0 NG\nADVERTISING'S  AE1 D - V ER0 - T AY2 - Z IH0 NG Z\nADVERTORIAL  AE2 D - V ER0 - T AO1 - R IY0 - AH0 L\nADVERTORIALS  AE2 D - V ER0 - T AO1 - R IY0 - AH0 L Z\nADVEST  AE1 D - V EH0 S T\nADVICE  AE0 D - V AY1 S\nADVICE(2)  AH0 D - V AY1 S\nADVIL  AE1 D - V IH2 L\nADVIL'S  AE1 D - V IH2 L Z\nADVISABILITY  AE2 D - V AY2 - Z AH0 - B IH1 - L IH0 - T IY0\nADVISABLE  AH0 D - V AY1 - Z AH0 - B AH0 L\nADVISE  AE0 D - V AY1 Z\nADVISE(2)  AH0 D - V AY1 Z\nADVISED  AE0 D - V AY1 Z D\nADVISED(2)  AH0 D - V AY1 Z D\nADVISEDLY  AE0 D - V AY1 - Z AH0 D - L IY0\nADVISEDLY(2)  AH0 D - V AY1 - Z AH0 D - L IY0\nADVISEMENT  AH0 D - V AY1 Z - M AH0 N T\nADVISER  AE0 D - V AY1 - Z ER0\nADVISER'S  AH0 D - V AY1 - Z ER0 Z\nADVISERS  AE0 D - V AY1 - Z ER0 Z\nADVISERS'  AE2 D - V AY1 - Z ER0 Z\nADVISES  AE0 D - V AY1 - Z IH0 Z\nADVISING  AE0 D - V AY1 - Z IH0 NG\nADVISOR  AE0 D - V AY1 - Z ER0\nADVISOR(2)  AH0 D - V AY1 - Z ER0\nADVISORIES  AH0 D - V AY1 - Z ER0 - IY0 Z\nADVISORS  AE0 D - V AY1 - Z ER0 Z\nADVISORS(2)  AH0 D - V AY1 - Z ER0 Z\nADVISORY  AE0 D - V AY1 - Z ER0 - IY0\nADVISORY(2)  AH0 D - V AY1 - Z ER0 - IY0\nADVO  AE1 D - V OW0\nADVOCACY  AE1 D - V AH0 - K AH0 - S IY0\nADVOCATE  AE1 D - V AH0 - K AH0 T\nADVOCATE'S  AE1 D - V AH0 - K AH0 T S\nADVOCATE(2)  AE1 D - V AH0 - K EY2 T\nADVOCATED  AE1 D - V AH0 - K EY2 - T AH0 D\nADVOCATED(2)  AE1 D - V AH0 - K EY2 - T IH0 D\nADVOCATES  AE1 D - V AH0 - K AH0 T S\nADVOCATES(2)  AE1 D - V AH0 - K EY2 T S\nADVOCATING  AE1 D - V AH0 - K EY2 - T IH0 NG\nADVOCATION  AE2 D - V AH0 - K EY1 - SH AH0 N\nADWEEK  AE1 D - W IY0 K\nADWELL  AH0 D - W EH1 L\nADY  EY1 - D IY0\nADZ  AE1 D Z\nAE  EY1\nAEGEAN  IH0 - JH IY1 - AH0 N\nAEGERTER  EH1 - G ER0 - T ER0\nAEGIS  IY1 - JH AH0 S\nAEGON  EY1 - G AA0 N\nAELTUS  AE1 L - T AH0 S\nAENEAS  AE1 - N IY0 - AH0 S\nAEQUITRON  EY1 - K W IH0 - T R AA0 N\nAER  EH1 R\nAER(2)  EY1 - IY1 - AA1 R\nAERIAL  EH1 - R IY0 - AH0 L\nAERIEN  EH1 - R IY0 - AH0 N\nAERIENS  EH1 - R IY0 - AH0 N Z\nAERITALIA  EH2 - R IH0 - T AE1 - L Y AH0\nAERO  EH1 - R OW0\nAEROBATIC  EH2 - R AH0 - B AE1 - T IH0 K\nAEROBATICS  EH2 - R AH0 - B AE1 - T IH0 K S\nAEROBIC  EH0 - R OW1 - B IH0 K\nAEROBICALLY  EH0 - R OW1 - B IH0 K - L IY0\nAEROBICS  ER0 - OW1 - B IH0 K S\nAERODROME  EH1 - R AH0 - D R OW2 M\nAERODYNAMIC  EH2 - R OW0 - D AY0 - N AE1 - M IH0 K\nAERODYNAMICALLY  EH2 - R OW0 - D AY0 - N AE1 - M IH0 K - L IY0\nAERODYNAMICS  EH2 - R OW0 - D AY0 - N AE1 - M IH0 K S\nAERODYNE  EH1 - R AH0 - D AY2 N\nAEROFLOT  EH1 - R OW0 - F L AA2 T\nAEROJET  EH1 - R OW0 - JH EH2 T\nAEROLIFT  EH1 - R OW0 - L IH2 F T\nAEROLINEAS  EH2 - R OW0 - L IH1 - N IY0 - AH0 S\nAEROMEXICO  EH2 - R OW0 - M EH1 K - S IH0 - K OW2\nAERONAUTIC  EH2 - R OW0 - N AA1 - T AH0 K\nAERONAUTICAL  EH2 - R OW0 - N AA1 - T AH0 - K AH0 L\nAERONAUTICAL(2)  EH2 - R AH0 - N AA1 - T AH0 - K AH0 L\nAERONAUTICAS  EH2 - R OW0 - N AO1 - T IH0 - K AH0 S\nAERONAUTICS  EH2 - R AH0 - N AO1 - T IH0 K S\nAEROQUIP  EH1 - R AH0 - K W IH2 P\nAEROSMITH  EH1 - R OW0 - S M IH2 TH\nAEROSMITH'S  EH1 - R OW0 - S M IH2 TH S\nAEROSOL  EH1 - R AH0 - S AA2 L\nAEROSOLS  EH1 - R AH0 - S AA2 L Z\nAEROSPACE  EH1 - R OW0 - S P EY2 S\nAEROSPACE'S  EH1 - R OW0 - S P EY2 - S IH0 Z\nAEROSPATIALE  EH2 - R OW0 - S P AA2 - S IY0 - AA1 L\nAEROSTAR  EH1 - R OW0 - S T AA2 R\nAEROSTARS  EH1 - R OW0 - S T AA2 R Z\nAEROSTAT  EH1 - R OW0 - S T AE2 T\nAEROSTATS  EH1 - R OW0 - S T AE2 T S\nAEROTECH  EH1 - R OW0 - T EH2 K\nAERTS  EH1 R T S\nAESCHLIMAN  EH1 SH - L IY0 - M AH0 N\nAESOP  IY1 - S AA2 P\nAESOP'S  IY1 - S AA2 P S\nAESTHETE  EH1 S - TH IY0 T\nAESTHETIC  EH0 S - TH EH1 - T IH0 K\nAESTHETICALLY  EH0 S - TH EH1 - T IH0 K - L IY0\nAESTHETICS  EH0 S - TH EH1 - T IH0 K S\nAETNA  EH1 T - N AH0\nAETNA'S  EH1 T - N AH0 Z\nAFANASYEV  AE2 - F AH0 - N EY1 - S IY0 - EH0 V\nAFAR  AH0 - F AA1 R\nAFFABLE  AE1 - F AH0 - B AH0 L\nAFFAIR  AH0 - F EH1 R\nAFFAIRS  AH0 - F EH1 R Z\nAFFECT  AH0 - F EH1 K T\nAFFECTATION  AE2 - F EH0 K - T EY1 - SH AH0 N\nAFFECTED  AH0 - F EH1 K - T AH0 D\nAFFECTED(2)  AH0 - F EH1 K - T IH0 D\nAFFECTING  AH0 - F EH1 K - T IH0 NG\nAFFECTION  AH0 - F EH1 K - SH AH0 N\nAFFECTIONATE  AH0 - F EH1 K - SH AH0 N - AH0 T\nAFFECTIONATE(2)  AH0 - F EH1 K - SH AH0 - N IH0 T\nAFFECTIONATELY  AH0 - F EH1 K - SH AH0 N - AH0 T - L IY0\nAFFECTIONS  AH0 - F EH1 K - SH AH0 N Z\nAFFECTIVE  AH0 - F EH1 K - T IH0 V\nAFFECTIVELY  AH0 - F EH1 K - T IH0 V - L IY0\nAFFECTS  AH0 - F EH1 K T S\nAFFELDT  AE1 - F IH0 L T\nAFFERENT  AE1 - F ER0 - AH0 N T\nAFFIANT  AE1 - F IY0 - AH0 N T\nAFFIDAVIT  AE2 - F AH0 - D EY1 - V AH0 T\nAFFIDAVITS  AE2 - F IH0 - D EY1 - V IH0 T S\nAFFILIATE  AH0 - F IH1 - L IY0 - EY2 T\nAFFILIATE'S  AH0 - F IH1 - L IY0 - EY2 T S\nAFFILIATE(2)  AH0 - F IH1 - L IY0 - AH0 T\nAFFILIATED  AH0 - F IH1 - L IY0 - EY2 - T AH0 D\nAFFILIATED'S  AH0 - F IH1 - L IY0 - EY2 - T IH0 D Z\nAFFILIATED(2)  AH0 - F IH1 - L IY0 - EY2 - T IH0 D\nAFFILIATES  AH0 - F IH1 - L IY0 - AH0 T S\nAFFILIATES'  AH0 - F IH1 - L IY0 - IH0 T S\nAFFILIATES(2)  AH0 - F IH1 - L IY0 - EY2 T S\nAFFILIATING  AH0 - F IH1 - L IY0 - EY2 - T IH0 NG\nAFFILIATION  AH0 - F IH2 - L IY0 - EY1 - SH AH0 N\nAFFILIATIONS  AH0 - F IH2 - L IY0 - EY1 - SH AH0 N Z\nAFFINITIES  AH0 - F IH1 - N AH0 - T IY0 Z\nAFFINITY  AH0 - F IH1 - N AH0 - T IY0\nAFFINITY(2)  AH0 - F IH1 - N IH0 - T IY0\nAFFIRM  AH0 - F ER1 M\nAFFIRMATION  AE2 - F ER0 - M EY1 - SH AH0 N\nAFFIRMATIONS  AE2 - F ER0 - M EY1 - SH AH0 N Z\nAFFIRMATIVE  AH0 - F ER1 - M AH0 - T IH0 V\nAFFIRMATIVELY  AH0 - F ER1 - M AH0 - T IH0 V - L IY0\nAFFIRMED  AH0 - F ER1 M D\nAFFIRMING  AH0 - F ER1 - M IH0 NG\nAFFIRMS  AH0 - F ER1 M Z\nAFFIX  AE1 - F IH0 K S\nAFFIX(2)  AH0 - F IH1 K S\nAFFIXED  AH0 - F IH1 K S T\nAFFIXES  AE1 - F IH0 K - S IH0 Z\nAFFIXES(2)  AH0 - F IH1 K - S IH0 Z\nAFFIXING  AH0 - F IH1 K - S IH0 NG\nAFFLECK  AE1 - F L IH0 K\nAFFLERBACH  AE1 F - L ER0 - B AA2 K\nAFFLICT  AH0 - F L IH1 K T\nAFFLICTED  AH0 - F L IH1 K - T AH0 D\nAFFLICTED(2)  AH0 - F L IH1 K - T IH0 D\nAFFLICTING  AH0 - F L IH1 K - T IH0 NG\nAFFLICTION  AH0 - F L IH1 K - SH AH0 N\nAFFLICTIONS  AH0 - F L IH1 K - SH AH0 N Z\nAFFLICTS  AH0 - F L IH1 K T S\nAFFLIK  AE2 - F L IH1 K\nAFFLUENCE  AE1 - F L UW0 - AH0 N S\nAFFLUENT  AE1 - F L UW0 - AH0 N T\nAFFOLTER  AE1 - F OW0 L - T ER0\nAFFORD  AH0 - F AO1 R D\nAFFORDABILITY  AH0 - F AO2 R - D AH0 - B IH1 - L AH0 - T IY0\nAFFORDABLE  AH0 - F AO1 R - D AH0 - B AH0 L\nAFFORDED  AH0 - F AO1 R - D AH0 D\nAFFORDING  AH0 - F AO1 R - D IH0 NG\nAFFORDS  AH0 - F AO1 R D Z\nAFFRICATE  AE1 - F R AH0 - K AH0 T\nAFFRICATES  AE1 - F R AH0 - K AH0 T S\nAFFRICATION  AE2 - F R AH0 - K EY1 - SH AH0 N\nAFFRONT  AH0 - F R AH1 N T\nAFFRONTED  AH0 - F R AH1 N - T IH0 D\nAFFRONTS  AH0 - F R AH1 N T S\nAFFYMAX  AE1 - F IY0 - M AE2 K S\nAFGHAN  AE1 F - G AE2 N\nAFGHANI  AE0 F - G AA1 - N IY0\nAFGHANI'S  AE0 F - G AE1 - N IY0 Z\nAFGHANIS  AE0 F - G AE1 - N IY0 Z\nAFGHANISTAN  AE0 F - G AE1 - N AH0 - S T AE2 N\nAFGHANISTAN'S  AE0 F - G AE1 - N AH0 - S T AE2 N Z\nAFGHANS  AE1 F - G AE2 N Z\nAFHELDT  AE1 - F EH2 L T\nAFICIONADO  AH0 - F IY2 - SH Y AH0 - N AA1 - D OW2\nAFICIONADOS  AH0 - F IH2 - SH AH0 - N AA1 - D OW0 Z\nAFIELD  AH0 - F IY1 L D\nAFIRE  AH0 - F AY1 R\nAFLAME  AH0 - F L EY1 M\nAFLATOXIN  AE2 - F L AH0 - T AA1 K - S IH0 N\nAFLOAT  AH0 - F L OW1 T\nAFLUTTER  AH0 - F L AH1 - T ER0\nAFMED  AE1 F - M EH0 D\nAFONSO  AH0 - F AA1 N - S OW0\nAFOOT  AH0 - F UH1 T\nAFOREMENTIONED  AH0 - F AO1 R - M EH2 N - SH AH0 N D\nAFORESAID  AH0 - F AO1 R - S EH2 D\nAFORETHOUGHT  AH0 - F AO1 R - TH AA2 T\nAFOUL  AH0 - F AW1 L\nAFRAID  AH0 - F R EY1 D\nAFRESH  AH0 - F R EH1 SH\nAFRICA  AE1 - F R AH0 - K AH0\nAFRICA'S  AE1 - F R AH0 - K AH0 Z\nAFRICA'S(2)  AE1 - F R IH0 - K AH0 Z\nAFRICA(2)  AE1 - F R IH0 - K AH0\nAFRICA(3)  AE1 - F ER0 - K AH0\nAFRICAN  AE1 - F R AH0 - K AH0 N\nAFRICAN(2)  AE1 - F R IH0 - K AH0 N\nAFRICANIST  AE1 - F R IH0 - K AH0 - N IH0 S T\nAFRICANIZE  AE1 - F R AH0 - K AH0 - N AY2 Z\nAFRICANIZED  AE1 - F R AH0 - K AH0 - N AY2 Z D\nAFRICANS  AE1 - F R AH0 - K AH0 N Z\nAFRICANS(2)  AE1 - F R IH0 - K AH0 N Z\nAFRIKAANS  AE2 - F R AH0 - K AA1 N Z\nAFRIKANER  AE2 - F R AH0 - K AA1 - N ER0\nAFRIKANERDOM  AE2 - F R AH0 - K AA1 - N ER0 - D AH0 M\nAFRIKANERS  AE2 - F R IH0 - K AA1 - N ER0 Z\nAFRO  AE1 - F R OW0\nAFSANE  AA0 F - S AA1 - N EY2\nAFSANE'S  AA0 F - S AA1 - N EY2 Z\nAFSHAR  AE1 F - SH ER0\nAFT  AE1 F T\nAFTER  AE1 F - T ER0\nAFTERALL  AE1 F - T ER0 - AA2 L\nAFTERBURNER  AE1 F - T ER0 - B ER2 - N ER0\nAFTERBURNERS  AE1 F - T ER0 - B ER2 - N ER0 Z\nAFTEREFFECT  AE1 F - T ER0 - AH0 - F EH2 K T\nAFTEREFFECTS  AE1 F - T ER0 - AH0 - F EH2 K T S\nAFTERGLOW  AE1 F - T ER0 - G L OW2\nAFTERIMAGE  AE1 F - T ER0 - IH2 - M IH0 JH\nAFTERLIFE  AE1 F - T ER0 - L AY2 F\nAFTERMARKET  AE1 F - T ER0 - M AA2 R - K IH0 T\nAFTERMATH  AE1 F - T ER0 - M AE2 TH\nAFTERNOON  AE2 F - T ER0 - N UW1 N\nAFTERNOON'S  AE2 F - T ER0 - N UW1 N Z\nAFTERNOONS  AE2 F - T ER0 - N UW1 N Z\nAFTERSHOCK  AE1 F - T ER0 - SH AA2 K\nAFTERSHOCKS  AE1 F - T ER0 - SH AA2 K S\nAFTERTASTE  AE1 F - T ER0 - T EY2 S T\nAFTERTAX  AE1 F - T ER0 - T AE2 K S\nAFTERTHOUGHT  AE1 F - T ER0 - TH AA2 T\nAFTERTHOUGHT(2)  AE1 F - T ER0 - TH AO2 T\nAFTERWARD  AE1 F - T ER0 - W ER0 D\nAFTERWARDS  AE1 F - T ER0 - W ER0 D Z\nAFULA  AH0 - F UW1 - L AH0\nAFULA'S  AH0 - F UW1 - L AH0 Z\nAG  AE1 G\nAGA  AA1 - G AH0\nAGACHE  AE1 - G AE0 CH\nAGAIN  AH0 - G EH1 N\nAGAIN(2)  AH0 - G EY1 N\nAGAINST  AH0 - G EH1 N S T\nAGAMEMNON  AE2 - G AH0 - M EH1 M - N AA2 N\nAGAMEMNON'S  AE2 - G AH0 - M EH1 M - N AA2 N Z\nAGAN  EY1 - G AH0 N\nAGANBEGYAN  AE2 - G AH0 N - B EH1 - G Y AH0 N\nAGANS  AA1 - G AA0 N Z\nAGAPE  AH0 - G EY1 P\nAGAR  EY1 - G ER0\nAGARD  AE1 - G ER0 D\nAGARWAL  AA1 - G AA0 R - W AA0 L\nAGASSI  AE1 - G AH0 - S IY0\nAGASSIZ  AH0 - G AE1 - S IH0 Z\nAGATE  AE1 - G AH0 T\nAGATES  AE1 - G AH0 T S\nAGATHA  AE1 - G AH0 - TH AH0\nAGCO  AE1 G - K OW2\nAGE  EY1 JH\nAGE'S  EY1 - JH IH0 Z\nAGED  EY1 JH D\nAGED(2)  EY1 - JH IH0 D\nAGEE  EY1 - JH IY1\nAGEE'S  EY1 - JH IY0 Z\nAGELESS  EY1 JH - L AH0 S\nAGENCE  AE1 - JH AH0 N S\nAGENCIES  EY1 - JH AH0 N - S IY0 Z\nAGENCIES'  EY1 - JH AH0 N - S IY0 Z\nAGENCY  EY1 - JH AH0 N - S IY0\nAGENCY'S  EY1 - JH AH0 N - S IY0 Z\nAGENDA  AH0 - JH EH1 N - D AH0\nAGENDAS  AH0 - JH EH1 N - D AH0 Z\nAGENT  EY1 - JH AH0 N T\nAGENT'S  EY1 - JH AH0 N T S\nAGENTS  EY1 - JH AH0 N T S\nAGENTS'  EY1 - JH AH0 N T S\nAGER  EY1 - JH ER0\nAGERATUM  AH0 - JH EH1 - R AH0 - T AH0 M\nAGERATUMS  AH0 - JH EH1 - R AH0 - T AH0 M Z\nAGERS  EY1 - JH ER0 Z\nAGERS'  EY1 - JH ER0 Z\nAGERTON  EY1 - G ER0 - T AH0 N\nAGES  EY1 - JH AH0 Z\nAGES(2)  EY1 - JH IH0 Z\nAGFA  AE1 G - F AH0\nAGGARWAL  AH0 - G AA1 R - W AH0 L\nAGGIE  AE1 - G IY0\nAGGIES  AE1 - G IY0 Z\nAGGLOMERATE  AH0 - G L AA1 - M ER0 - EY2 T\nAGGLOMERATION  AH0 - G L AA2 - M ER0 - EY1 - SH AH0 N\nAGGLUTINATE  AH0 - G L UW1 - T IH0 - N EY2 T\nAGGRANDIZE  AH0 - G R AE1 N - D AY2 Z\nAGGRANDIZEMENT  AE1 - G R AH0 N - D AY2 Z - M AH0 N T\nAGGRANDIZEMENT(2)  AH0 - G R AE1 N - D AY2 Z - M AH0 N T\nAGGRANDIZING  AE1 - G R AH0 N - D AY2 - Z IH0 NG\nAGGRANDIZING(2)  AH0 - G R AE1 N - D AY2 - Z IH0 NG\nAGGRAVATE  AE1 - G R AH0 - V EY2 T\nAGGRAVATED  AE1 - G R AH0 - V EY2 - T AH0 D\nAGGRAVATED(2)  AE1 - G R AH0 - V EY2 - T IH0 D\nAGGRAVATES  AE1 - G R AH0 - V EY2 T S\nAGGRAVATING  AE1 - G R AH0 - V EY2 - T IH0 NG\nAGGRAVATION  AE2 - G R AH0 - V EY1 - SH AH0 N\nAGGREGATE  AE1 - G R AH0 - G AH0 T\nAGGREGATE(2)  AE1 - G R AH0 - G IH0 T\nAGGREGATE(3)  AE1 - G R AH0 - G EY0 T\nAGGREGATED  AE1 - G R AH0 - G EY2 - T AH0 D\nAGGREGATES  AE1 - G R AH0 - G IH0 T S\nAGGREGATES(2)  AE1 - G R AH0 - G EY0 T S\nAGGRESS  AH0 - G R EH1 S\nAGGRESSION  AH0 - G R EH1 - SH AH0 N\nAGGRESSIONS  AH0 - G R EH1 - SH AH0 N Z\nAGGRESSIVE  AH0 - G R EH1 - S IH0 V\nAGGRESSIVELY  AH0 - G R EH1 - S IH0 V - L IY0\nAGGRESSIVENESS  AH0 - G R EH1 - S IH0 V - N AH0 S\nAGGRESSIVITY  AH0 - G R EH0 - S IH1 - V IH0 - T IY0\nAGGRESSOR  AH0 - G R EH1 - S ER0\nAGGRESSORS  AH0 - G R EH1 - S ER0 Z\nAGGREY  AE0 - G R EY1\nAGGRIEVE  AH0 - G R IY1 V\nAGGRIEVED  AH0 - G R IY1 V D\nAGGY  AE1 - G IY0\nAGHAST  AH0 - G AE1 S T\nAGHAZADEH  AE2 - G AH0 - Z AA1 - D EH2\nAGIE  AE1 - G IY0\nAGILDO  AH0 - G IH1 L - D OW0\nAGILE  AE1 - JH AH0 L\nAGILIS  AH0 - JH IH1 - L AH0 S\nAGILITY  AH0 - JH IH1 - L AH0 - T IY0\nAGIN  AA0 - JH IY1 N\nAGINCOURT  AE1 - JH AH0 N - K AO2 R T\nAGING  EY1 - JH IH0 NG\nAGINS  EY1 - G IH0 N Z\nAGIP  EY1 - G IH0 P\nAGITATE  AE1 - JH AH0 - T EY2 T\nAGITATED  AE1 - JH AH0 - T EY2 - T AH0 D\nAGITATING  AE1 - JH AH0 - T EY2 - T IH0 NG\nAGITATION  AE2 - JH AH0 - T EY1 - SH AH0 N\nAGITATOR  AE1 - JH AH0 - T EY2 - T ER0\nAGITATORS  AE1 - JH IH0 - T EY2 - T ER0 Z\nAGIUS  EY1 - JH IY0 - IH0 S\nAGLEAM  AH0 G - L IY1 M\nAGLER  AE1 - G L ER0\nAGLITTER  AH0 - G L IH1 - T ER0\nAGLO  AH0 - G L OW1\nAGLOW  AH0 - G L OW1\nAGNA  AE1 G - N AH0\nAGNE  EY1 N Y\nAGNELLA  AE2 G - N EH1 - L AH0\nAGNELLI  AE1 G - N EH2 - L IY0\nAGNELLO  AE2 G - N EH1 - L OW0\nAGNER  AE1 G - N ER0\nAGNES  AE1 G - N IH0 S\nAGNETA  AA0 G - N EH1 - T AH0\nAGNEW  AE1 G - N UW0\nAGNEW(2)  AE1 G - N Y UW0\nAGNICO  AE1 G - N IH0 - K OW2\nAGNOR  AE1 G - N ER0\nAGNOS  AE1 G - N OW0 S\nAGNOSIO  AE0 G - N OW1 - S IY0 - OW0\nAGNOSTIC  AE0 G - N AA1 - S T IH0 K\nAGO  AH0 - G OW1\nAGOG  AH0 - G AA1 G\nAGOGLIA  AH0 - G AA1 - G L IY0 - AH0\nAGONIES  AE1 - G AH0 - N IY0 Z\nAGONIST  AE1 - G AH0 - N IH0 S T\nAGONISTS  AE1 - G AH0 - N IH0 S T S\nAGONISTS(2)  AE1 - G AH0 - N IH0 S S\nAGONISTS(3)  AE1 - G AH0 - N IH0 S\nAGONIZE  AE1 - G AH0 - N AY2 Z\nAGONIZED  AE1 - G AH0 - N AY2 Z D\nAGONIZES  AE1 - G AH0 - N AY2 - Z IH0 Z\nAGONIZING  AE1 - G AH0 - N AY0 - Z IH0 NG\nAGONIZINGLY  AE1 - G AH0 - N AY0 - Z IH0 NG - L IY0\nAGONY  AE1 - G AH0 - N IY0\nAGORA  AE1 - G ER0 - AH0\nAGOSTA  AA0 - G OW1 - S T AH0\nAGOSTINELLI  AA0 - G OW0 - S T IY0 N - EH1 - L IY0\nAGOSTINI  AA0 - G OW0 - S T IY1 - N IY0\nAGOSTINO  AA0 - G AO0 - S T IY1 - N OW0\nAGOSTO  AA0 - G OW1 - S T OW0\nAGOURA  AH0 - G UW1 - R AH0\nAGOURON  AH0 - G UW1 - R AA0 N\nAGRA  AE1 - G R AH0\nAGRARIAN  AH0 - G R EH1 - R IY0 - AH0 N\nAGRARIANISM  AH0 - G R EH1 - R IY0 - AH0 - N IH2 - Z AH0 M\nAGRAWAL  AH0 - G R AE1 - W AH0 L\nAGREE  AH0 - G R IY1\nAGREEABLE  AH0 - G R IY1 - AH0 - B AH0 L\nAGREED  AH0 - G R IY1 D\nAGREEING  AH0 - G R IY1 - IH0 NG\nAGREEMENT  AH0 - G R IY1 - M AH0 N T\nAGREEMENT'S  AH0 - G R IY1 - M AH0 N T S\nAGREEMENTS  AH0 - G R IY1 - M AH0 N T S\nAGREES  AH0 - G R IY1 Z\nAGRESOURCE  AA1 - G R EH0 - S AO2 R S\nAGRESOURCE(2)  AE1 - G R AH0 - S AO2 R S\nAGRESTA  AA0 - G R EH1 - S T AH0\nAGRESTI  AA0 - G R EH1 - S T IY0\nAGREXCO  AA0 - G R EH1 K - S K OW0\nAGRI  AE1 - G R IY0\nAGRIBUSINESS  AE1 - G R AH0 - B IH2 Z - N AH0 S\nAGRICO  AH0 - G R IY1 - K OW0\nAGRICOLA  AE2 - G R IH0 - K OW1 - L AH0\nAGRICOLE  AE1 - G R IH0 - K OW2 L\nAGRICULTURAL  AE2 - G R AH0 - K AH1 L - CH ER0 - AH0 L\nAGRICULTURAL(2)  AE2 - G R IH0 - K AH1 L - CH ER0 - AH0 L\nAGRICULTURALIST  AE2 - G R AH0 - K AH1 L - CH ER0 - AH0 - L AH0 S T\nAGRICULTURALLY  AE2 - G R IH0 - K AH1 L - CH ER0 - AH0 - L IY0\nAGRICULTURALLY(2)  AE2 - G R IH0 - K AH1 L - CH R AH0 - L IY0\nAGRICULTURE  AE1 - G R IH0 - K AH2 L - CH ER0\nAGRICULTURE'S  AE1 - G R IH0 - K AH2 L - CH ER0 Z\nAGRIFUEL  AE1 - G R AH0 - F Y UW2 L\nAGRIFUELS  AE1 - G R AH0 - F Y UW2 L Z\nAGRIPPA  AH0 - G R IH1 - P AH0\nAGRIVISOR  AE1 - G R AH0 - V AY2 - Z ER0\nAGRO  AE1 - G R OW0\nAGROCHEMICAL  AE2 - G R OW0 - K EH1 - M AH0 - K AH0 L\nAGROCHEMICALS  AE2 - G R OW0 - K EH1 - M IH0 - K AH0 L Z\nAGROKOMERC  AE1 - G R AH0 - K OW0 - M ER2 K\nAGRONOMIST  AH0 - G R AA1 - N AH0 - M IH0 S T\nAGRONOMISTS  AH0 - G R AA1 - N AH0 - M IH0 S T S\nAGRONOMISTS(2)  AH0 - G R AA1 - N AH0 - M IH0 S S\nAGRONOMISTS(3)  AH0 - G R AA1 - N AH0 - M IH0 S\nAGROSIAND  AH0 - G R OW1 - S IY0 - AH0 N D\nAGROUND  AH0 - G R AW1 N D\nAGRUSA  AA0 - G R UW1 - S AH0\nAGUA  AA1 - G W AH0\nAGUACATE  AE1 - G W AH0 - K EY2 T\nAGUADO  AA0 - G W AA1 - D OW0\nAGUAYO  AA0 - G W EY1 - OW0\nAGUDELO  AA0 - G UW0 - D EY1 - L OW0\nAGUERO  AA0 - G EH1 - R OW0\nAGUIAR  AA1 - G W IY0 - ER0\nAGUILA  AA0 - G W IY1 - L AH0\nAGUILAR  AE1 - G AH0 - L AA0 R\nAGUILERA  AA0 - G W IY0 - L EH1 - R AH0\nAGUILLAR  AE1 - G AH0 - L AA0 R\nAGUILLARD  AE1 - G IH0 - L ER0 D\nAGUILLON  AA0 G - W IY0 - L AO1 N\nAGUINAGA  AA0 - G UW0 - IY0 - N AA1 - G AH0\nAGUIRRA  AH0 - G W IH1 - R AH0\nAGUIRRA'S  AH0 - G W IH1 - R AH0 Z\nAGUIRRE  AA0 - G W IH1 - R EY0\nAGUIRRE'S  AA0 - G W IH1 - R EY0 Z\nAGUIRRE'S(2)  AH0 - G W IH1 - R EY0 Z\nAGUIRRE(2)  AH0 - G W IH1 - R EY0\nAGUSTIN  AH0 - G AO1 - S T IH0 N\nAH  AA1\nAHA  AA2 - HH AA1\nAHAB  EY1 - HH AE2 B\nAHAH  AA1 - HH AA0\nAHARON  AE1 - HH ER0 - AA0 N\nAHART  AH0 - HH AA1 R T\nAHAULSIE  AH0 - HH AA1 L - S IY0\nAHEAD  AH0 - HH EH1 D\nAHEARN  AH0 - HH ER1 N\nAHERIN  AA1 - ER0 - IH0 N\nAHERN  AH0 - HH ER1 N\nAHERNE  AH0 - HH ER1 N\nAHH  AA1\nAHL  AA1 L\nAHLBERG  AA1 L - B ER0 G\nAHLBORN  AA1 L - B ER0 N\nAHLEN  AH0 - L EY1 N\nAHLEN(2)  AA1 - L AH0 N\nAHLERS  AA1 - L ER0 Z\nAHLES  EY1 - AH0 L Z\nAHLF  AA1 L F\nAHLGREN  AA1 L - G R EH0 N\nAHLGRIM  AA1 L - G R IH0 M\nAHLIN  AA1 - L IH0 N\nAHLMAN  AA1 L - M AH0 N\nAHLQUIST  AA1 L - K W IH2 S T\nAHLSTRAND  AA1 L - S T R AH0 N D\nAHLSTROM  AA1 L - S T R AH0 M\nAHMAD  AA1 - M AA0 D\nAHMADI  AA0 - M AA1 - D IY0\nAHMANN  AA1 - M AH0 N\nAHMANSON  AA1 - M AH0 N - S AH0 N\nAHMED  AA1 - M AH0 D\nAHMED(2)  AA1 - M EH0 D\nAHMOUDI  AA0 - M UW1 - D IY0\nAHN  AE1 N\nAHNER  AA1 - N ER0\nAHO  AA1 - HH OW0\nAHOLA  AE1 - HH AH0 - L AH0\nAHOLD  AH0 - HH OW1 L D\nAHONEN  AH0 - HH OW1 - N AH0 N\nAHR  AA1 R\nAHRANAT  AH0 - R AA1 - N AH0 T\nAHREN  AA1 - R AH0 N\nAHRENDT  AA1 - R IH0 N T\nAHRENS  AA1 - R IH0 N Z\nAHS  AA1 Z\nAHUJA  AA0 - HH UW1 - Y AH0\nAHUMADA  AA0 - Y UW0 - M AA1 - D AH0\nAI  AY1\nAI(2)  EY1 - AY1\nAICHELE  AY1 - K AH0 L\nAICHER  AY1 - K ER0\nAICHI  AA0 - IY1 - CH IY0\nAICKIN  EY1 - K IH0 N\nAID  EY1 D\nAID'S  EY1 D Z\nAIDA  AY0 - IY1 - D AH0\nAIDAN  AA0 - IY1 - D AA0 N\nAIDE  EY1 D\nAIDE'S  EY1 D Z\nAIDED  EY1 - D AH0 D\nAIDED(2)  EY1 - D IH0 D\nAIDES  EY1 D Z\nAIDES'  EY1 D Z\nAIDID  AY2 - D IY1 D\nAIDID'S  AY2 - D IY1 D Z\nAIDING  EY1 - D IH0 NG\nAIDS  EY1 D Z\nAIELLO  AY2 - EH1 - L OW0\nAIGNER  EY1 - N ER0\nAIGNER(2)  EH0 - N Y EY1\nAIGNER(3)  EY1 K - N ER0\nAIGUEBELLE  AY1 - G AH0 - B EH2 L\nAIKEN  EY1 - K IH0 N\nAIKENS  EY1 - K IH0 N Z\nAIKEY  EY1 - K IY0\nAIKIN  EY0 - K IH0 N\nAIKINS  AY1 - K IH0 N Z\nAIKMAN  EY1 K - M AH0 N\nAIL  EY1 L\nAILEE  EY1 - L IY1\nAILEEN  AY0 - L IY1 N\nAILERON  EY1 - L ER0 - AA2 N\nAILERONS  EY1 - L ER0 - AA2 N Z\nAILES  AY1 L Z\nAILES(2)  EY1 L Z\nAILEY  EY1 - L IY0\nAILING  EY1 - L IH0 NG\nAILMENT  EY1 L - M AH0 N T\nAILMENTS  EY1 L - M AH0 N T S\nAILOR  EY1 - L ER0\nAILS  EY1 L Z\nAILSA  EY1 L - S AH0\nAIM  EY1 M\nAIME  EY1 M\nAIMED  EY1 M D\nAIMEE  EY1 - M IY1\nAIMING  EY1 - M IH0 NG\nAIMLESS  EY1 M - L AH0 S\nAIMLESSLY  EY1 M - L AH0 S - L IY0\nAIMONE  EY1 - M OW2 N\nAIMS  EY1 M Z\nAIN'T  EY1 N T\nAINE  EY1 N\nAINGE  EY1 NG\nAINGE(2)  EY1 N JH\nAINLEY  EY1 N - L IY0\nAINSBERG  EY1 N Z - B ER0 G\nAINSLEY  EY1 N S - L IY0\nAINSLIE  EY1 N Z - L IY0\nAINSWORTH  EY1 N - S W ER0 TH\nAINSWORTH'S  EY1 N Z - W ER0 TH S\nAIPAC  AY1 - P AE2 K\nAIPAC'S  AY1 - P AE2 K S\nAIR  EH1 R\nAIR'S  EH1 R Z\nAIRBAG  EH1 R - B AE2 G\nAIRBAGS  EH1 R - B AE2 G Z\nAIRBASE  EH1 R - B EY2 S\nAIRBASES  EH1 R - B EY2 - S IH0 S\nAIRBOAT  EH1 R - B OW0 T\nAIRBOATS  EH1 R - B OW0 T S\nAIRBORNE  EH1 R - B AO2 R N\nAIRBORNE'S  EH1 R - B AO2 R N Z\nAIRBUS  EH1 R - B AH0 S\nAIRBUS'S  EH1 R - B AH0 - S IH0 Z\nAIRCAL  EH1 R - K AA0 L\nAIRCAL'S  EH1 R - K AE2 L Z\nAIRCO  EH1 R - K OW0\nAIRCOA  EH2 R - K OW1 - AH0\nAIRCRAFT  EH1 R - K R AE2 F T\nAIRCRAFT'S  EH1 R - K R AE2 F T S\nAIRCRAFT'S(2)  EH1 R - K R AE2 F S\nAIRCRAFTS  EH1 R - K R AE2 F T S\nAIRCRAFTS(2)  EH1 R - K R AE2 F S\nAIRCREW  EH1 R - K R UW2\nAIRD  EH1 R D\nAIRDROP  EH1 R - D R AA0 P\nAIRDROPS  EH1 R - D R AA0 P S\nAIRED  EH1 R D\nAIREDALE  EH1 R - D EY2 L\nAIRES  EH1 - R IY0 Z\nAIREY  EH1 - R IY0\nAIRFARE  EH1 R - F EH2 R\nAIRFARES  EH1 R - F EH2 R Z\nAIRFIELD  EH1 R - F IY2 L D\nAIRFIELDS  EH1 R - F IY2 L D Z\nAIRFLOW  EH1 R - F L OW0\nAIRFOIL  EH1 R - F OY2 L\nAIRFOILS  EH1 R - F OY2 L Z\nAIRFONE  EH1 R - F OW2 N\nAIRFORCE  EH1 R - F AO0 R S\nAIRFRAME  EH1 R - F R EY2 M\nAIRFREIGHT  EH1 R - F R EY2 T\nAIRGAS  EH1 R - G AE2 S\nAIRGLOW  EH1 R - G L OW2\nAIRHART  EH1 R - HH AA0 R T\nAIRHEAD  EH1 R - HH EH2 D\nAIRING  EH1 - R IH0 NG\nAIRINGTON  EH1 - R IH0 NG - T AH0 N\nAIRLESS  EH1 R - L AH0 S\nAIRLIA  EH1 R - L IY0 - AH0\nAIRLIE  EH1 R - L IY0\nAIRLIFT  EH1 R - L IH2 F T\nAIRLIFTED  EH1 R - L IH2 F - T IH0 D\nAIRLIFTING  EH1 R - L IH2 F - T IH0 NG\nAIRLIFTS  EH1 R - L IH2 F T S\nAIRLINE  EH1 R - L AY2 N\nAIRLINE'S  EH1 R - L AY2 N Z\nAIRLINER  EH1 R - L AY2 - N ER0\nAIRLINER'S  EH1 R - L AY2 - N ER0 Z\nAIRLINERS  EH1 R - L AY2 - N ER0 Z\nAIRLINES  EH1 R - L AY2 N Z\nAIRLINES'  EH1 R - L AY2 N Z\nAIRLINK  EH1 R - L IH2 NG K\nAIRLOCK  EH1 R - L AO2 K\nAIRMAIL  EH1 R - M EY2 L\nAIRMAN  EH1 R - M AH0 N\nAIRMAN'S  EH1 R - M AH0 N Z\nAIRMEN  EH1 R - M EH2 N\nAIRMOTIVE  EH2 R - M OW1 - T IH0 V\nAIRPLANE  EH1 R - P L EY2 N\nAIRPLANE'S  EH1 R - P L EY0 N Z\nAIRPLANES  EH1 R - P L EY0 N Z\nAIRPORT  EH1 R - P AO2 R T\nAIRPORT'S  EH1 R - P AO2 R T S\nAIRPORTS  EH1 R - P AO2 R T S\nAIRPOWER  EH1 R - P AW2 - ER0\nAIRS  EH1 R Z\nAIRSHIP  EH1 R - SH IH2 P\nAIRSHIPS  EH1 R - SH IH2 P S\nAIRSPACE  EH1 R - S P EY2 S\nAIRSPEED  EH1 R - S P IY2 D\nAIRSTRIKE  EH1 R - S T R AY2 K\nAIRSTRIKES  EH1 R - S T R AY2 K S\nAIRSTRIP  EH1 R - S T R IH2 P\nAIRSTRIPS  EH1 R - S T R IH2 P S\nAIRTIGHT  EH1 R - T AY2 T\nAIRTIME  EH1 R - T AY2 M\nAIRTOUCH  EH1 R - T AH2 CH\nAIRTRAN  EH1 R - T R AE2 N\nAIRWAVE  EH1 R - W EY2 V\nAIRWAVES  EH1 R - W EY2 V Z\nAIRWAY  EH1 R - W EY2\nAIRWAY'S  EH1 R - W EY2 Z\nAIRWAYS  EH1 R - W EY2 Z\nAIRWAYS'  EH1 R - W EY2 Z\nAIRWING  EH1 R - W IH0 NG\nAIRWORTHINESS  EH1 R - W ER2 - DH IY0 - N AH0 S\nAIRWORTHY  EH1 R - W ER2 - DH IY0\nAIRY  EH1 - R IY0\nAIR_FORCE  EH1 R - F AO0 R S\nAIS  AY1 Z\nAISA  AY0 - IY1 - S AH0\nAISLE  AY1 L\nAISLE(2)  AY1 - AH0 L\nAISLES  AY1 L Z\nAISLES(2)  AY1 - AH0 L Z\nAISLINN  EY1 S - L IH0 N\nAITCHISON  EY1 - CH IH0 - S AH0 N\nAITHNE  EY1 TH N\nAITKEN  AY1 T - K AH0 N\nAITON  AA0 - IY1 - T OW0 N\nAIWA  AY1 - W AH0\nAIX-LA-CHAPELLE  AY1 K - S L AA2 - SH AH0 - P EH1 L\nAJA  AY1 - AH0\nAJAJ  AH0 - JH AA1 JH\nAJAJ'S  AH0 - JH AA1 - JH IH0 Z\nAJAMI  EY2 - JH AA1 - M IY0\nAJAR  AH0 - JH AA1 R\nAJAX  EY1 - JH AE2 K S\nAJAX'S  EY1 - JH AE2 K - S AH0 Z\nAJAX'S(2)  EY1 - JH AE2 K - S IH0 Z\nAJINOMOTO  AH0 - JH IH2 - N AH0 - M OW1 - T OW0\nAJITO  AH0 - JH IY1 - T OW0\nAJITO(2)  AH0 - HH IY1 - T OW0\nAKA  AA1 - K AH0\nAKA(2)  EY1 - K EY1 - EY1\nAKAI  AH0 - K AY1\nAKAKA  AH0 - K AA1 - K AH0\nAKALI  AH0 - K AA1 - L IY0\nAKAMINE  AE1 - K AH0 - M AY2 N\nAKANA  AA0 - K AA1 - N AH0\nAKARD  AE1 - K ER0 D\nAKASHI  AH0 - K AA1 - SH IY0\nAKASHI'S  AH0 - K AA1 - SH IY0 Z\nAKBAR  AE1 K - B ER0\nAKBAR(2)  AA1 K - B AA2 R\nAKC  AE1 K\nAKE  EY1 K\nAKEBONO  AE2 - K IY0 - B OW1 - N OW0\nAKEL  AH0 - K EH1 L\nAKELLA  AH0 - K EH1 - L AH0\nAKEN  EY1 - K AH0 N\nAKENS  EY1 - K AH0 N Z\nAKER  AE1 - K ER0\nAKER(2)  EY1 - K ER0\nAKERLEY  AH0 - K ER1 - L IY0\nAKERMAN  AE1 - K ER0 - M AH0 N\nAKERS  EY1 - K ER0 Z\nAKERS'S  EY1 - K ER0 - Z IH0 Z\nAKERSON  AE1 - K ER0 - S AH0 N\nAKEY  AH0 - K IY1\nAKHTAR  AE1 K - T ER0\nAKI  AA1 - K IY0\nAKIBA  AH0 - K IY1 - B AH0\nAKIHITO  AA2 - K IY0 - HH IY1 - T OW2\nAKIMBO  AH0 - K IH1 M - B OW2\nAKIN  AH0 - K IH1 N\nAKINS  AH0 - K IH1 N Z\nAKIO  AA1 - K IY0 - OW0\nAKIRA  AH0 - K IY1 - R AH0\nAKITA  AH0 - K IY1 - T AH0\nAKITA'S  AH0 - K IY1 - T AH0 Z\nAKIVA  AH0 - K IY1 - V AH0\nAKIYAMA  AA0 - K IY0 - Y AA1 - M AH0\nAKKADIAN  AH0 - K EY1 - D IY0 - AH0 N\nAKKERMAN  AE1 - K ER0 - M AH0 N\nAKRE  AE1 - K ER0\nAKRIDGE  AH0 - K R IH1 JH\nAKRON  AE1 - K R AH0 N\nAKSAMIT  AE1 K - S AH0 - M IH0 T\nAKSLER  AE1 K - S L ER0\nAKST  AE1 K S T\nAKYANAMA  AE2 - K AH0 - Y AA1 - N AH0 - M AH0\nAKZO  AE1 K - Z OW0\nAL  AE1 L\nAL'S  AE1 L Z\nAL.  AE1 L\nAL.(2)  AE2 - L AH0 - B AE1 - M AH0\nALA  EY1 - L AH0\nALABAMA  AE2 - L AH0 - B AE1 - M AH0\nALABAMA'S  AE2 - L AH0 - B AE1 - M AH0 Z\nALABAMAN  AE2 - L AH0 - B AE1 - M AH0 N\nALABAMANS  AE2 - L AH0 - B AE1 - M AH0 N Z\nALABASTER  AE1 - L AH0 - B AE2 - S T ER0\nALACHLOR  AH0 - L AE1 K - L ER0\nALACHUA  AH0 - L AE1 - CH UW0 - AH0\nALACRITY  AH0 - L AE1 - K R AH0 - T IY0\nALADDIN  AH0 - L AE1 - D IH0 N\nALAFI  AH0 - L AA1 - F IY0\nALAGEM  AE1 - L AH0 - JH EH0 M\nALAGNA  AA0 - L AA1 G - N AH0\nALAGOAS  AE1 - L AH0 - G OW2 Z\nALAI  AH0 - L AY1\nALAIMO  AH0 - L EY1 - M OW0\nALAIN  AH0 - L EY1 N\nALAINE  AH0 - L EY1 N\nALAIR  AH0 - L EH1 R\nALAM  AH0 - L AE1 M\nALAMCO  AH0 - L AE1 M - K OW0\nALAMEDA  AE2 - L AH0 - M IY1 - D AH0\nALAMEIN  AE1 - L AH0 - M AY2 N\nALAMILLO  AE2 - L AH0 - M IH1 - L OW0\nALAMITO  AE2 - L AH0 - M IY1 - T OW0\nALAMITOS  AE2 - L AH0 - M IY1 - T OW0 S\nALAMO  AE1 - L AH0 - M OW0\nALAMOS  AE1 - L AH0 - M OW0 Z\nALAMOUDI  AA2 - L AA0 - M UW1 - D IY0\nALAMOUDI(2)  AE2 - L AA0 - M UW1 - D IY0\nALAN  AE1 - L AH0 N\nALAN'S  AE1 - L AH0 N Z\nALANA  AA0 - L AE1 - N AH0\nALAND  AE1 - L AH0 N D\nALANE  AH0 - L EY1 N\nALANIS  AA0 - L AA1 - N IH0 S\nALANIZ  AE1 - L AH0 - N IH0 Z\nALANN  AE1 - L AE0 N\nALANNA  AA0 - L AA1 - N AH0\nALAR  EY1 - L AA2 R\nALARCON  AH0 - L AA1 R - K AA2 N\nALARD  AH0 - L AA1 R D\nALARIC  AE1 - L ER0 - IH0 K\nALARICA  AA0 - L AA0 - R IY1 - K AH0\nALARICE  AA0 - L AA1 - R IH0 S\nALARID  AH0 - L EH1 - R IH0 D\nALARIE  AH0 - L EH1 - R IY0\nALARM  AH0 - L AA1 R M\nALARM'S  AH0 - L AA1 R M Z\nALARMED  AH0 - L AA1 R M D\nALARMING  AH0 - L AA1 R - M IH0 NG\nALARMINGLY  AH0 - L AA1 R - M IH0 NG - L IY0\nALARMIST  AH0 - L AA1 R - M AH0 S T\nALARMIST(2)  AH0 - L AA1 R - M IH0 S T\nALARMS  AH0 - L AA1 R M Z\nALAS  AH0 - L AE1 S\nALASKA  AH0 - L AE1 S - K AH0\nALASKA'S  AH0 - L AE1 S - K AH0 Z\nALASKAMEN  AH0 - L AE1 S - K AH0 - M AH0 N\nALASKAN  AH0 - L AE1 S - K AH0 N\nALASKANS  AH0 - L AE1 S - K AH0 N Z\nALASTAIR  AE1 - L AH0 - S T EH2 R\nALASTER  AE1 - L AH0 - S T ER0\nALATORRE  AA0 - L AA0 - T AO1 - R IY0\nALAYNE  AH0 - L EY1 N\nALBA  AE1 L - B AH0\nALBACH  AE1 L - B AA0 K\nALBACORE  AE1 L - B AH0 - K AO2 R\nALBAN  AA1 L - B AH0 N\nALBANESE  AA0 L - B AA0 - N EY1 - Z IY0\nALBANI  AE0 L - B AA1 - N IY0\nALBANI'S  AE0 L - B AA1 - N IY0 Z\nALBANIA  AE0 L - B EY1 - N IY0 - AH0\nALBANIA'S  AE0 L - B EY1 - N IY0 - AH0 Z\nALBANIAN  AE0 L - B EY1 - N IY0 - AH0 N\nALBANIANS  AE0 L - B EY1 - N IY0 - AH0 N Z\nALBANO  AA0 L - B AA1 - N OW0\nALBANS  AE1 L - B AE0 N Z\nALBANY  AO1 L - B AH0 - N IY0\nALBANY'S  AO1 L - B AH0 - N IY0 Z\nALBARADO  AA0 L - B AA0 - R AA1 - D OW0\nALBARRAN  AE2 L - B AE1 - R AH0 N\nALBATROSS  AE1 L - B AH0 - T R AA2 S\nALBATROSSES  AE1 L - B AH0 - T R AA2 - S IH0 Z\nALBAUGH  AH0 L - B AO1\nALBEA  AE1 L - B IY0 - AH0\nALBEE  AH0 L - B IY1\nALBEIT  AO0 L - B IY1 - IH0 T\nALBEMARLE  AE1 L - B AH0 - M AA2 R L\nALBEN  AO1 L - B AH0 N\nALBER  AE1 L - B ER0\nALBERDING  AE1 L - B ER0 - D IH0 NG\nALBERG  AE1 L - B ER0 G\nALBERGO  AA0 L - B EH1 R - G OW0\nALBERICO  AA0 L - B ER0 - IY1 - K OW0\nALBERN  AE1 L - B ER0 N\nALBERS  AO1 L - B ER0 Z\nALBERSON  AE1 L - B ER0 - S AH0 N\nALBERT  AE1 L - B ER0 T\nALBERTA  AE0 L - B ER1 - T AH0\nALBERTHAL  AE1 L - B ER0 - TH AO2 L\nALBERTI  AA0 L - B EH1 R - T IY0\nALBERTINA  AA0 L - B ER0 - T IY1 - N AH0\nALBERTINE  AE1 L - B ER0 - T IY2 N\nALBERTINI  AA0 L - B ER0 - T IY1 - N IY0\nALBERTO  AE0 L - B ER1 - T OW0\nALBERTS  AE1 L - B ER0 T S\nALBERTSEN  AE1 L - B ER0 T - S AH0 N\nALBERTSON  AE1 L - B ER0 T - S AH0 N\nALBERTSON'S  AE1 L - B ER0 T - S AH0 N Z\nALBERTUS  AE0 L - B ER1 - T AH0 S\nALBERTVILLE  AE1 L - B ER0 T - V IH2 L\nALBERTY  AH0 L - B ER1 - T IY0\nALBIE  AO1 L - B IY0\nALBIN  AE1 L - B IH0 N\nALBINA  AA0 L - B IY1 - N AH0\nALBINI  AA0 L - B IY1 - N IY0\nALBINIA  AA0 L - B IY1 - N IY0 - AH0\nALBINO  AE0 L - B AY1 - N OW2\nALBION  AE1 L - B IY0 - AH0 N\nALBIRIC  AA0 L - B AY1 - R IH0 K\nALBO  AE1 L - B OW0\nALBRECHT  AO1 L - B R EH2 K T\nALBRIGHT  AO1 L - B R AY2 T\nALBRITTON  AE1 L - B R IH0 - T AA0 N\nALBRO  AE1 L - B R OW0\nALBUM  AE1 L - B AH0 M\nALBUM'S  AE1 L - B AH0 M Z\nALBUMIN  AE0 L - B Y UW1 - M AH0 N\nALBUMS  AE1 L - B AH0 M Z\nALBUNEX  AE2 L - B Y UW1 - N EH0 K S\nALBUQUERQUE  AE1 L - B AH0 - K ER0 - K IY0\nALBURY  AE1 L - B EH0 - R IY0\nALBUS  AE1 L - B AH0 S\nALBUTEROL  AE2 L - B Y UW1 - T ER0 - AO0 L\nALCALA  AA0 L - K AA1 - L AH0\nALCAN  AE1 L - K AE2 N\nALCAN'S  AE1 L - K AE2 N Z\nALCANTAR  AE2 L - K AE1 N - T ER0\nALCANTARA  AA0 L - K AA0 N - T AA1 - R AH0\nALCARAZ  AA0 L - K AA1 - R AA0 Z\nALCASA  AE0 L - K AA1 - S AH0\nALCATEL  AE1 L - K AH0 - T EH2 L\nALCATEL'S  AE1 L - K AH0 - T EH2 L Z\nALCATRAZ  AE2 L - K AH0 - T R AE1 Z\nALCATRAZ(2)  AE1 L - K AH0 - T R AE2 Z\nALCEE  AE1 L - S IY0\nALCHEMICALLY  AE0 L - K EH1 - M AH0 - K L IY0\nALCHEMIST  AE1 L - CH AH0 - M IH0 S T\nALCHEMIST(2)  AA1 L - K AH0 - M IH0 S T\nALCHEMY  AE1 L - K AH0 - M IY0\nALCIDE  AE1 L - S AY2 D\nALCIDS  AE1 L - S IH0 D Z\nALCINA  AA0 L - CH IY1 - N AH0\nALCO  AE1 L - K OW0\nALCO'S  AE1 L - K OW0 Z\nALCOA  AE1 L - K OW0 - AH0\nALCOA'S  AE0 L - K OW1 - AH0 Z\nALCOCER  AH0 L - K OW1 - S ER0\nALCOCK  AH0 L - K AA1 K\nALCOHOL  AE1 L - K AH0 - HH AA2 L\nALCOHOLIC  AE2 L - K AH0 - HH AA1 - L IH0 K\nALCOHOLICS  AE2 L - K AH0 - HH AA1 - L IH0 K S\nALCOHOLISM  AE1 L - K AH0 - HH AO2 - L IH2 - Z AH0 M\nALCON  AH0 L - K AA1 N\nALCORTA  AA0 L - K AO1 R - T AH0\nALCOTT  AE1 L - K AA2 T\nALCOVE  AE1 L - K OW2 V\nALCOVES  AE1 L - K OW2 V Z\nALDA  AA1 L - D AH0\nALDACO  AA0 L - D AA1 - K OW0\nALDAMA  AA0 L - D AA1 - M AH0\nALDANA  AA0 L - D AE1 - N AH0\nALDAPE  AA0 L - D AA1 - P EY0\nALDAY  AE1 L - D EY0\nALDEBARAN  AE0 L - D EH1 - B ER0 - AH0 N\nALDEN  AA1 L - D AH0 N\nALDER  AO1 L - D ER0\nALDERCY  AH0 L - D ER1 - K IY0\nALDERETE  AE1 L - D ER0 - IY0 T\nALDERFER  AE1 L - D ER0 - F ER0\nALDERIDGE  AA1 L - D ER0 - IH0 JH\nALDERIDGE(2)  AA1 L - D R IH0 JH\nALDERMAN  AO1 L - D ER0 - M AH0 N\nALDERMAN(2)  AE1 L - D ER0 - M AH0 N\nALDERMEN  AO1 L - D ER0 - M IH0 N\nALDERSON  AO1 L - D ER0 - S AH0 N\nALDERSON(2)  AE1 L - D ER0 - S AH0 N\nALDERTON  AO1 L - D ER0 - T AH0 N\nALDI  AA1 L - D IY0\nALDICARB  AO1 L - D IH0 - K AA2 R B\nALDILA  AE2 L - D IH1 - L AH0\nALDIN  AA0 L - D IY1 N\nALDINGER  AO1 L - D IH0 - NG ER0\nALDIS  AA1 L - D IH0 S\nALDO  AA1 L - D OW0\nALDORA  AA0 L - D AO1 - R AH0\nALDOUS  AA1 L - D AH0 S\nALDRED  AE1 L - D ER0 D\nALDRED(2)  AO1 L - D R EH0 D\nALDREDGE  AO1 L - D R EH0 JH\nALDRETE  AO1 L - D R IY0 T\nALDRIC  AE1 L - D R IH0 K\nALDRIC(2)  AO1 L - D R IH0 K\nALDRICH  AO1 L - D R IH0 CH\nALDRIDGE  AO1 L - D R IH0 JH\nALDRIN  AO1 L - D R IH0 N\nALDRIN'S  AO1 L - D R IH0 N Z\nALDUS  AA1 L - D IH0 S\nALDWIN  AO1 L D - W IH0 N\nALDWYN  AO1 L D - W IH0 N\nALDYS  AA1 L - D IY0 Z\nALE  EY1 L\nALEATORY  EY1 - L IY0 - AH0 - T AO2 - R IY0\nALEC  AE1 - L IH0 K\nALEDA  AA0 - L EY1 - D AH0\nALEEN  AH0 - L IY1 N\nALEGRE  AA0 - L EH1 - G R IY0\nALEGRETT  AE1 - L AH0 - G R AH0 T\nALEGRIA  AH0 - L EH1 - G R IY0 - AH0\nALEHOUSE  EY1 L - HH AW2 S\nALEICHEM  AH0 - L EH1 - HH EH0 M\nALEICHEM(2)  AH0 - L EY1 - HH EH0 M\nALEJANDRE  AA0 - L EY0 - Y AA1 N - D R EY0\nALEJANDRO  AA0 - L EY0 - Y AA1 N - D R OW0\nALEJANDRO(2)  AA0 - L EY0 - HH AA1 N - D R OW0\nALEJO  AA0 - L EY1 - Y OW0\nALEJOS  AA0 - L EY1 - Y OW0 Z\nALEKSANDER  AE2 - L AH0 G - Z AE1 N - D ER0\nALEKSANDER(2)  AE2 - L AH0 K - S AE1 N - D ER0\nALEKSANDR  AE2 - L AH0 G - Z AE1 N - D ER0\nALEKSANDR(2)  AE2 - L AH0 K - S AE1 N - D ER0\nALEMAN  EY1 L - M AH0 N\nALENA  AA0 - L EY1 - N AH0\nALENDRIN  AH0 - L EH1 N - D R IH0 N\nALENE  AH0 - L IY1 N\nALENIA  AH0 - L IY1 - N IY0 - AH0\nALEO  AA1 - L IY0 - OW0\nALEPH  AA1 - L AH0 F\nALERIA  AH0 - L IY1 - R IY0 - AH0\nALERON  AA0 - L EH0 - R AO1 N\nALERT  AH0 - L ER1 T\nALERTED  AH0 - L ER1 - T IH0 D\nALERTING  AH0 - L ER1 - T IH0 NG\nALERTNESS  AH0 - L ER1 T - N AH0 S\nALERTS  AH0 - L ER1 T S\nALES  EY1 L Z\nALESHIRE  AA0 - L EY0 - SH IH1 - R EY0\nALESI  AA0 - L EH1 - S IY0\nALESSANDRA  AE2 - L EH0 - S AE1 N - D R AH0\nALESSANDRINI  AA0 - L EH0 - S AA0 N - D R IY1 - N IY0\nALESSANDRO  AA0 - L EY0 - Z AA1 N - D R OW0\nALESSANDRO(2)  AA0 - L AH0 - S AE1 N - D R OW0\nALESSI  AH0 - L EH1 - S IY0\nALESSIO  AH0 - L EH1 - S IY0 - OW0\nALETA  AA0 - L EH1 - T AH0\nALETHEA  AE2 - L AH0 - TH IY1 - AH0\nALETTI  AH0 - L EH1 - T IY0\nALEUTIAN  AH0 - L UW1 - SH AH0 N\nALEUTIANS  AH0 - L UW1 - SH AH0 N Z\nALEVE  AH0 - L IY1 V\nALEWIFE  EY1 L - W AY2 F\nALEWINE  EY1 L - W AY2 N\nALEWIVES  EY1 L - W AY2 V Z\nALEX  AE1 - L AH0 K S\nALEX'S  AE1 - L AH0 K - S IH0 Z\nALEXA  AH0 - L EH1 K - S AH0\nALEXANDER  AE2 - L AH0 G - Z AE1 N - D ER0\nALEXANDER'S  AE2 - L AH0 G - Z AE1 N - D ER0 Z\nALEXANDER'S(2)  AE2 - L IH0 G - Z AE1 N - D ER0 Z\nALEXANDER(2)  AE2 - L IH0 G - Z AE1 N - D ER0\nALEXANDERS  AE2 - L IH0 G - Z AE1 N - D ER0 Z\nALEXANDRA  AE2 - L EH0 G - Z AE1 N - D R AH0\nALEXANDRA(2)  AE2 - L IH0 G - Z AE1 N - D R AH0\nALEXANDRE  AE0 - L IH0 K - S AA1 N - D ER0\nALEXANDRIA  AE2 - L AH0 G - Z AE1 N - D R IY0 - AH0\nALEXANDRINE  AE2 - L AH0 G - Z AE1 N - D R IY0 N\nALEXANDRINES  AE2 - L AH0 G - Z AE1 N - D R IY0 N Z\nALEXEI  AH0 - L EH1 K - S EY2\nALEXI  AH0 - L EH1 K - S IY0\nALEXI'S  AH0 - L EH1 K - S IY0 Z\nALEXIA  AH0 - L EH1 K - S IY0 - AH0\nALEXINE  AH0 - L EH1 K - S AY0 N\nALEXIS  AH0 - L EH1 K - S IH0 S\nALEXOPOULOS  AE0 - L IH0 G - Z AA1 - P AH0 - L IH0 S\nALEXY  AH0 - L IY1 K - S IY0\nALEY  EY1 - L IY0\nALF  AE1 L F\nALFA  AE1 L - F AH0\nALFA'S  AE1 L - F AH0 Z\nALFALFA  AE2 L - F AE1 L - F AH0\nALFANO  AA0 L - F AA1 - N OW0\nALFAREDA  AE2 L - F AH0 - R EH1 - D AH0\nALFARO  AA0 L - F AA1 - R OW0\nALFAVILLI  AE2 L - F AH0 - V IH1 - L IY0\nALFIE  AE1 L - F IY0\nALFIERI  AA0 L - F IH1 - R IY0\nALFIERO  AE2 L - F IY0 - EH1 - R OW0\nALFIN  AE1 L - F IH0 N\nALFIN'S  AE1 L - F IH0 N Z\nALFONO  AE0 L - F OW1 - N OW0\nALFONS  AA1 L - F OW0 N Z\nALFONSE  AE1 L - F AA0 N S\nALFONSE(2)  AE1 L - F AO0 N S\nALFONSIN  AE2 L - F AA1 N - S IH0 N\nALFONSIN'S  AE2 L - F AA1 N - S IH0 N Z\nALFONSINE  AA0 L - F OW0 N - S IY1 - N IY0\nALFONSO  AE2 L - F AA1 N - S OW0\nALFORD  AE1 L - F ER0 D\nALFRED  AE1 L - F R AH0 D\nALFRED(2)  AE1 L - F R IH0 D\nALFREDO  AE2 L - F R EY1 - D OW0\nALFREDSON  AE1 L - F R IH0 D - S AH0 N\nALFREY  AE1 L - F R IY0\nALGAE  AE1 L - JH IY0\nALGAL  AE1 L - G AH0 L\nALGAR  AA0 L - G AA1 R\nALGARIN  AE1 L - G ER0 - IH0 N\nALGEBRA  AE1 L - JH AH0 - B R AH0\nALGEBRAIC  AE2 L - JH AH0 - B R EY1 - IH0 K\nALGEBRAICALLY  AE2 L - JH AH0 - B R EY1 - IH0 K - L IY0\nALGEMENE  AE1 L - G AH0 - M IY2 N\nALGEO  AE1 L - JH IY0 - OW0\nALGER  AE1 L - JH ER0\nALGERIA  AE0 L - JH IH1 - R IY0 - AH0\nALGERIA'S  AE0 L - JH IY1 - R IY0 - AH0 Z\nALGERIAN  AE0 L - JH IH1 - R IY0 - AH0 N\nALGERIANS  AE0 L - JH IY1 - R IY0 - AH0 N Z\nALGERNON  AE1 L - JH ER0 - N AA0 N\nALGIE  AO1 L - G IY0\nALGIERS  AE0 L - JH IH1 R Z\nALGOL  AE1 L - G AA0 L\nALGOM  AE1 L - G AH0 M\nALGOMA  AE0 L - G OW1 - M AH0\nALGONQUIAN  AE0 L - G AA1 NG - K IY0 - AH0 N\nALGONQUIN  AE0 L - G AA1 NG - K W IH0 N\nALGORITHM  AE1 L - G ER0 - IH2 - DH AH0 M\nALGORITHMS  AE1 L - G ER0 - IH2 - DH AH0 M Z\nALGUIRE  AA0 L - G W IH1 - R EY0\nALGY  AE1 L - JH IY0\nALHADEFF  AE1 - L AH0 - D EH0 F\nALHAMBRA  AE0 L - HH AE1 M - B R AH0\nALHAUSIE  AE0 L - HH AW1 - S IY0\nALI  AA1 - L IY0\nALI'S  AA1 - L IY0 Z\nALI-REZA  AA1 - L IY0 - R EH1 - Z AH0\nALIANO  AA0 - L IY0 - AA1 - N OW0\nALIANZA  AE2 - L IY0 - AE1 N - Z AH0\nALIAS  EY1 - L IY0 - AH0 S\nALIASES  EY1 - L IY0 - AH0 - S IH0 Z\nALIBERTI  AA0 - L IY0 - B EH1 R - T IY0\nALIBI  AE1 - L AH0 - B AY2\nALIBIS  AE1 - L AH0 - B AY2 Z\nALIBRANDI  AE2 - L IH0 - B R AE1 N - D IY0\nALICE  AE1 - L AH0 S\nALICE'S  AE1 - L AH0 - S AH0 Z\nALICE(2)  AE1 - L IH0 S\nALICEA  AH0 - L IH1 - S IY0 - AH0\nALICIA  AH0 - L IH1 - SH AH0\nALICIA'S  AH0 - L IH1 - SH AH0 Z\nALIDA  AA0 - L IY1 - D AH0\nALIE  AE1 - L IY0\nALIEN  EY1 - L IY0 - AH0 N\nALIENATE  EY1 - L Y AH0 - N EY2 T\nALIENATED  EY1 - L IY0 - AH0 - N EY2 - T AH0 D\nALIENATED(2)  EY1 - L IY0 - AH0 - N EY2 - T IH0 D\nALIENATES  EY1 - L IY0 - AH0 - N EY2 T S\nALIENATING  EY1 - L IY0 - AH0 - N EY2 - T IH0 NG\nALIENATION  EY2 - L IY0 - AH0 - N EY1 - SH AH0 N\nALIENS  EY1 - L IY0 - AH0 N Z\nALIFF  AE1 - L IH0 F\nALIG  AE1 - L IH0 G\nALIGHT  AH0 - L AY1 T\nALIGN  AH0 - L AY1 N\nALIGNED  AH0 - L AY1 N D\nALIGNING  AH0 - L AY1 - N IH0 NG\nALIGNMENT  AH0 - L AY1 N - M AH0 N T\nALIGNMENTS  AH0 - L AY1 N - M AH0 N T S\nALIGNS  AH0 - L AY1 N Z\nALIJA  AH0 - L AY1 - JH AH0\nALIJA'S  AH0 - L AY1 - JH AH0 Z\nALIKE  AH0 - L AY1 K\nALIKES  AH0 - L AY1 K S\nALIMA  AA0 - L IY1 - M AH0\nALIMENIES  AE1 - L IH0 - M EH2 - N IY0 Z\nALIMENTARY  AE2 - L AH0 - M EH1 N - T ER0 - IY0\nALIMONY  AE1 - L AH0 - M OW2 - N IY0\nALINA  AH0 - L IY1 - N AH0\nALINE  AH0 - L AY1 N\nALINES  AH0 - L AY1 N Z\nALIOTO  AA0 - L IY0 - OW1 - T OW0\nALIQUIPPA  AE2 - L AH0 - K W IH1 - P AH0\nALIQUIPPA'S  AE2 - L AH0 - K W IH1 - P AH0 Z\nALIQUIPPAS  AE2 - L AH0 - K W IH1 - P AH0 Z\nALIRE  AA0 - L IH1 - R EY0\nALISKY  AH0 - L IH1 S - K IY0\nALISON  AE1 - L IH0 - S AH0 N\nALISSA  AH0 - L IH1 - S AH0\nALISTAIR  AE1 - L IH0 - S T EH2 R\nALISTER  AE1 - L IH0 - S T ER0\nALITA  AA0 - L IY1 - T AH0\nALITALIA  AE2 - L IH0 - T EY1 - L IY0 - AH0\nALITALIA'S  AE2 - L IH0 - T EY1 - L IY0 - AH0 Z\nALITALIA'S(2)  AE2 - L IH0 - T AE1 - L IY0 - AH0 Z\nALITALIA(2)  AE2 - L IH0 - T AE1 - L IY0 - AH0\nALITHIA  AH0 - L IH1 - TH IY0 - AH0\nALITO  AH0 - L IY1 - T OW0\nALIVE  AH0 - L AY1 V\nALIX  AE1 - L IH0 K S\nALIZAC  AE1 - L IH0 - Z AE0 K\nALKA  AE1 L - K AH0\nALKAHEST  AE1 L - K AH0 - HH EH2 S T\nALKALI  AE1 L - K AH0 - L AY2\nALKALIES  AE1 L - K AH0 - L AY2 Z\nALKALINE  AE1 L - K AH0 - L AY2 N\nALKALINITY  AE2 L - K AH0 - L IH1 - N AH0 - T IY0\nALKALOID  AE1 L - K AH0 - L OY2 D\nALKALOIDAL  AE0 L - K AH0 - L OY1 - D AH0 L\nALKALOIDS  AE1 L - K AH0 - L OY2 D Z\nALKANES  AE1 L - K EY2 N Z\nALKEMA  AE1 L - K IH0 - M AH0\nALKENE  AE1 L - K IY2 N\nALKENES  AE1 L - K IY2 N Z\nALKIRE  AH0 L - K AY1 R\nALL  AO1 L\nALL'S  AO1 L Z\nALL-OUT  AO1 L - AW1 T\nALL-PURPOSE  AO1 L - P ER1 - P AH0 S\nALLA  AA1 - L AH0\nALLAH  AA1 - L AH0\nALLAIN  AH0 - L EY1 N\nALLAIRE  AA0 - L EH1 R\nALLAIS  AH0 - L EY1\nALLAIS(2)  EY1 - L IY0 - AH0 S\nALLAN  AE1 - L AH0 N\nALLANTE  AE2 - L AA1 N - T EY0\nALLAR  AH0 - L AA1 R\nALLARD  AE1 - L ER0 D\nALLAY  AH0 - L EY1\nALLAYED  AH0 - L EY1 D\nALLAYING  AH0 - L EY1 - IH0 NG\nALLAYS  AH0 - L EY1 Z\nALLBAUGH  AH0 L - B AO1\nALLBEE  AO1 L - B IY2\nALLBRIGHT  AO1 L - B R AY2 T\nALLBRITTEN  AE1 L - B R IH0 - T AH0 N\nALLBRITTON  AE1 L - B R IH0 - T AA0 N\nALLCOCK  AO1 L - K AA2 K\nALLCORN  AH0 L - K AO1 R N\nALLDAY  AO1 L - D EY2\nALLDERDICE  AA1 L - D ER0 - D AY2 S\nALLDERDICE(2)  AE1 L - D ER0 - D AY2 S\nALLDREDGE  AH0 L - D R EH1 JH\nALLEBACH  AE1 - L IH0 - B AA0 K\nALLEBACH(2)  AE1 L - B AA0 K\nALLECO  AE2 - L EH1 - K OW0\nALLEE  AH0 - L IY1\nALLEGATION  AE2 - L AH0 - G EY1 - SH AH0 N\nALLEGATIONS  AE2 - L AH0 - G EY1 - SH AH0 N Z\nALLEGE  AH0 - L EH1 JH\nALLEGED  AH0 - L EH1 JH D\nALLEGEDLY  AH0 - L EH1 - JH AH0 D - L IY0\nALLEGES  AH0 - L EH1 - JH AH0 Z\nALLEGES(2)  AH0 - L EH1 - JH IH0 Z\nALLEGHANY  AE1 - L AH0 - G EY2 - N IY0\nALLEGHENY  AE1 - L AH0 - G EY2 - N IY0\nALLEGHENY'S  AE1 - L AH0 - G EY2 - N IY0 Z\nALLEGIANCE  AH0 - L IY1 - JH AH0 N S\nALLEGIANCES  AE2 - L IY1 - JH IY0 - AE2 N - S IH0 Z\nALLEGIANCES(2)  AH0 - L IY1 - JH AH0 N - S IH0 Z\nALLEGING  AH0 - L EH1 - JH IH0 NG\nALLEGIS  AE2 - L EY1 - JH IH0 S\nALLEGIS'  AE2 - L EY1 - JH IH0 S\nALLEGIS'S  AE2 - L EY1 - JH IH0 - S IH0 Z\nALLEGORICAL  AE2 - L AH0 - G AO1 - R AH0 - K AH0 L\nALLEGORIES  AE1 - L AH0 - G AO2 - R IY0 Z\nALLEGORY  AE1 - L AH0 - G AO2 - R IY0\nALLEGRA  AA0 - L EH1 - G R AH0\nALLEGRETTI  AA0 - L EH0 - G R EH1 - T IY0\nALLEGRO  AH0 - L EH1 - G R OW2\nALLELE  AH0 - L EH1 - L IY0\nALLELES  AH0 - L EH1 - L IY0 Z\nALLELIC  AH0 - L EH1 - L IH0 K\nALLEMAN  EY1 L - M AH0 N\nALLEMAND  AE1 - L IH0 - M AH0 N D\nALLEN  AE1 - L AH0 N\nALLEN'S  AE1 - L AH0 N Z\nALLENBAUGH  AH0 - L EH1 N - B AO0\nALLENDALE  AE1 - L AH0 N - D EY2 L\nALLENDE  AA2 - Y EH1 N - D EY0\nALLENDER  AA0 - L Y EH1 N - D EY0 - ER0\nALLENDER(2)  AA0 - L EH1 N - D ER0\nALLENDORF  AE1 - L IH0 N - D AO0 R F\nALLENE  AE1 - L IY2 N\nALLENHURST  AE1 - L AH0 N - HH ER2 S T\nALLENS  AE1 - L AH0 N Z\nALLENSBACH  AE1 - L AH0 N Z - B AA2 K\nALLENSWORTH  AE1 - L AH0 N Z - W ER0 TH\nALLENTOWN  AE1 - L AH0 N - T AW2 N\nALLENWOOD  AE1 - L AH0 N - W UH2 D\nALLER  AO1 - L ER0\nALLERGAN  AE1 - L ER0 - JH AH0 N\nALLERGEN  AE1 - L ER0 - JH AH0 N\nALLERGENS  AE1 - L ER0 - JH AH0 N Z\nALLERGIC  AH0 - L ER1 - JH IH0 K\nALLERGIES  AE1 - L ER0 - JH IY0 Z\nALLERGIST  AE1 - L ER0 - JH AH0 S T\nALLERGY  AE1 - L ER0 - JH IY0\nALLERS  AO1 - L ER0 Z\nALLERT  AE1 - L ER0 T\nALLERTON  AE1 - L ER0 - T AH0 N\nALLES  EY1 L Z\nALLEVA  AA0 - L EY1 - V AH0\nALLEVIATE  AH0 - L IY1 - V IY0 - EY2 T\nALLEVIATED  AH0 - L IY1 - V IY0 - EY2 - T AH0 D\nALLEVIATED(2)  AH0 - L IY1 - V IY0 - EY2 - T IH0 D\nALLEVIATES  AH0 - L IY1 - V IY0 - EY0 T S\nALLEVIATING  AH0 - L IY1 - V IY0 - EY2 - T IH0 NG\nALLEVIATION  AH0 - L IY2 - V IY0 - EY1 - SH AH0 N\nALLEY  AE1 - L IY0\nALLEY'S  AE1 - L IY0 Z\nALLEYNE  AE1 - L EY2 N\nALLEYS  AE1 - L IY0 Z\nALLEYWAY  AE1 - L IY0 - W EY2\nALLEYWAYS  AE1 - L IY0 - W EY2 Z\nALLGAIER  AE1 L - G AY0 - ER0\nALLGEIER  AE1 L - G AY0 - ER0\nALLGEMEINE  AO1 L - G AH0 - M AY2 N\nALLGEYER  AE1 L - G IY0 - ER0\nALLGOOD  AO1 L - G UH2 D\nALLI  AE1 - L IY0\nALLIANCE  AH0 - L AY1 - AH0 N S\nALLIANCE'S  AH0 - L AY1 - AH0 N - S IH0 Z\nALLIANCES  AH0 - L AY1 - AH0 N - S AH0 Z\nALLIANCES(2)  AH0 - L AY1 - AH0 N - S IH0 Z\nALLIANT  AH0 - L AY1 - AH0 N T\nALLIANZ  AE1 - L IY0 - AH0 N Z\nALLICK  AE1 - L IH0 K\nALLIE  AE1 - L IY0\nALLIED  AH0 - L AY1 D\nALLIED'S  AE1 - L AY2 D Z\nALLIED(2)  AE1 - L AY2 D\nALLIEDSIGNAL  AE1 - L AY2 D - S IH1 G - N AH0 L\nALLIEDSIGNAL'S  AE1 - L AY2 D - S IH1 G - N AH0 L Z\nALLIES  AE1 - L AY0 Z\nALLIES'  AE1 - L AY0 Z\nALLIES(2)  AH0 - L AY1 Z\nALLIGATOR  AE1 - L AH0 - G EY2 - T ER0\nALLIGATORS  AE1 - L AH0 - G EY2 - T ER0 Z\nALLIGOOD  AE1 - L IH0 - G UH2 D\nALLIN  AH0 - L IH1 N\nALLINDER  AE1 - L IH0 N - D ER0\nALLING  AO1 - L IH0 NG\nALLINGER  AO1 - L IH0 - NG ER0\nALLINGHAM  AO1 - L IH0 NG - HH AE2 M\nALLINGTON  AO1 - L IH0 NG - T AH0 N\nALLINSON  AE1 - L IH0 N - S AH0 N\nALLIS  AE1 - L IH0 S\nALLISON  AE1 - L AH0 - S AH0 N\nALLISON'S  AE1 - L IH0 - S AH0 N Z\nALLISON(2)  AE1 - L IH0 - S AH0 N\nALLISTER  AO1 - L IH0 - S T ER0\nALLISTER(2)  AE1 - L IH0 - S T ER0\nALLISTON  AE1 - L IH0 - S T AA0 N\nALLITERATION  AH0 - L IH1 - T ER0 - EY2 - SH AH0 N\nALLITERATIVE  AH0 - L IH1 - T ER0 - AH0 - T IH0 V\nALLITERATIVE(2)  AH0 - L IH1 - T ER0 - EY2 - T IH0 V\nALLMAN  AO1 L - M AH0 N\nALLMENDINGER  AE1 L - M EH0 N - D IH0 - NG ER0\nALLMON  AO1 L - M AH0 N\nALLMOND  AH0 L - M AA1 N D\nALLNET  AO1 L - N EH2 T\nALLNUTT  AH0 L - N AH1 T\nALLOCATE  AE1 - L AH0 - K EY2 T\nALLOCATED  AE1 - L AH0 - K EY2 - T IH0 D\nALLOCATES  AE1 - L AH0 - K EY2 T S\nALLOCATING  AE1 - L AH0 - K EY2 - T IH0 NG\nALLOCATION  AE2 - L AH0 - K EY1 - SH AH0 N\nALLOCATIONS  AE2 - L AH0 - K EY1 - SH AH0 N Z\nALLOCATOR  AE1 - L AH0 - K EY2 - T ER0\nALLOCATORS  AE1 - L AH0 - K EY2 - T ER0 Z\nALLOCCA  AE2 - L AA1 - K AH0\nALLOCCO  AE2 - L AA1 - K OW0\nALLOMORPH  AE1 - L AH0 - M AO0 R F\nALLOMORPHS  AE1 - L AH0 - M AO0 R F S\nALLOPHONE  AE1 - L AH0 - F OW2 N\nALLOPHONES  AE1 - L AH0 - F OW2 N Z\nALLOPHONIC  AE2 - L AH0 - F AA1 - N IH0 K\nALLOR  AO1 - L ER0\nALLOT  AH0 - L AA1 T\nALLOTED  AH0 - L AA1 - T IH0 D\nALLOTMENT  AH0 - L AA1 T - M AH0 N T\nALLOTMENTS  AH0 - L AA1 T - M AH0 N T S\nALLOTROPE  AE1 - L AH0 - T R OW2 P\nALLOTROPES  AE1 - L AH0 - T R OW2 P S\nALLOTS  AH0 - L AA1 T S\nALLOTTED  AH0 - L AA1 - T IH0 D\nALLOTTING  AH0 - L AA1 - T IH0 NG\nALLOW  AH0 - L AW1\nALLOWABLE  AH0 - L AW1 - AH0 - B AH0 L\nALLOWANCE  AH0 - L AW1 - AH0 N S\nALLOWANCES  AH0 - L AW1 - AH0 N - S IH0 Z\nALLOWAY  AE1 - L OW0 - W EY2\nALLOWED  AH0 - L AW1 D\nALLOWING  AH0 - L AW1 - IH0 NG\nALLOWS  AH0 - L AW1 Z\nALLOY  AE1 - L OY2\nALLOYS  AE1 - L OY2 Z\nALLPHIN  AH0 L - F IH1 N\nALLPORT  AO1 L - P AO2 R T\nALLRED  AE1 L - R IH0 D\nALLRIGHT  AA0 L - R AY1 T\nALLS  AO1 L Z\nALLSBROOK  AO1 L Z - B R UH2 K\nALLSBROOK(2)  AO1 L T S - B R UH2 K\nALLSHOUSE  AO1 L Z - HH AW2 S\nALLSHOUSE(2)  AO1 L T S - HH AW2 S\nALLSOP  AO1 L - S AA2 P\nALLSOPP  AO1 L - S AA2 P\nALLSPICE  AO1 L - S P AY2 S\nALLSTATE  AO1 L - S T EY2 T\nALLSTATE'S  AO1 L - S T EY2 T S\nALLSTON  AO1 L - S T AH0 N\nALLSUP  AE1 L - S AH0 P\nALLTEL  AO1 L - T EH2 L\nALLTIME  AO1 L - T AY2 M\nALLTON  AO1 L - T AH0 N\nALLTOP  AO1 L - T AA2 P\nALLUDE  AH0 - L UW1 D\nALLUDED  AH0 - L UW1 - D AH0 D\nALLUDES  AH0 - L UW1 D Z\nALLUDING  AH0 - L UW1 - D IH0 NG\nALLUM  AE1 - L AH0 M\nALLUMS  AE1 - L AH0 M Z\nALLURE  AH0 - L UH1 R\nALLURED  AH0 - L UH1 R D\nALLURING  AH0 - L UH1 - R IH0 NG\nALLUSION  AH0 - L UW1 - ZH AH0 N\nALLUSIONS  AH0 - L UW1 - ZH AH0 N Z\nALLUSIVE  AH0 - L UW1 - S IH0 V\nALLUVIAL  AE2 - L UW1 - V IY0 - AH0 L\nALLUVIUM  AH0 - L UW1 - V IY0 - AH0 M\nALLWASTE  AO1 L - W EY2 S T\nALLWEISS  AA1 L - W IY2 S\nALLY  AE1 - L AY0\nALLY'S  AH0 - L AY1 Z\nALLY(2)  AH0 - L AY1\nALLYING  AE1 - L AY0 - IH0 NG\nALLYING(2)  AH0 - L AY1 - IH0 NG\nALLYN  AE1 - L IH0 N\nALLYS  AE1 - L AY0 Z\nALLYSON  AE1 - L IH0 - S AH0 N\nALM  AA1 M\nALMA  AE1 L - M AH0\nALMA(2)  AO1 L - M AH0\nALMADA  AA0 L - M AA1 - D AH0\nALMADANI  AO2 L - M AH0 - D AA1 - N IY0\nALMADEN  AE1 L - M AH0 - D AH0 N\nALMADEN(2)  AA1 L - M AH0 - D EH2 N\nALMAGUER  AA0 L - M AA0 - G W EH1 R\nALMAN  AE1 L - M AH0 N\nALMANAC  AO1 L - M AH0 - N AE2 K\nALMAND  AE1 L - M AH0 N D\nALMANZA  AA0 L - M AA1 N - Z AH0\nALMANZAR  AA0 L - M AA0 N - Z AA1 R\nALMARAZ  AA0 L - M AA1 - R AA0 Z\nALMAS  AE1 L - M AH0 Z\nALMASY  AE1 L - M AH0 - S IY0\nALMAZAN  AA0 L - M AA0 - Z AA1 N\nALMEDA  AA0 L - M EY1 - D AH0\nALMEIDA  AA0 L - M IY1 - D AH0\nALMENDAREZ  AA0 L - M EY0 N - D AA1 - R EH0 Z\nALMER  AO1 L - M ER0\nALMGREN  AE1 L M - G R EH0 N\nALMIGHTY  AO0 L - M AY1 - T IY0\nALMIRA  AA0 L - M IH1 - R AH0\nALMO  AA1 L - M OW0\nALMODOVAR  AA0 L - M OW0 - D OW0 - V AA1 R\nALMON  AA1 L - M AH0 N\nALMOND  AA1 - M AH0 N D\nALMONDS  AA1 L - M AH0 N D Z\nALMONTE  AA0 L - M OW1 N - T EY0\nALMOS  AA1 L - M OW0 S\nALMOST  AO1 L - M OW2 S T\nALMQUIST  AE1 L M - K W IH0 S T\nALMS  AA1 L M Z\nALMS(2)  AA1 M Z\nALMY  AO1 - M IY0\nALMYS  AE1 L - M IY0 Z\nALODIE  AH0 - L AA1 - D IY0\nALOE  AE1 - L OW2\nALOFT  AH0 - L AO1 F T\nALOHA  AH0 - L OW1 - HH AA0\nALOI  AA1 - L OY0\nALOIA  AA0 - L OW1 - Y AH0\nALOIS  AA0 - L OY1 S\nALOISA  AA0 - L OY1 - S AH0\nALOISI  AA0 - L OY1 - S IY0\nALOISIA  AA0 - L OY1 - S IY0 - AH0\nALOISIO  AA0 - L OY1 - S IY0 - OW0\nALOKA  AH0 - L OW1 - K AH0\nALON  AH0 - L AA1 N\nALONE  AH0 - L OW1 N\nALONG  AH0 - L AO1 NG\nALONGE  AE1 - L AH0 N JH\nALONGI  AA0 - L OW1 NG - G IY0\nALONGS  AH0 - L AO1 NG Z\nALONGSIDE  AH0 - L AO1 NG - S AY1 D\nALONSO  AH0 - L AA1 N - S OW0\nALONZA  AH0 - L AA1 N - Z AH0\nALONZO  AH0 - L AA1 N - Z OW0\nALOOF  AH0 - L UW1 F\nALOOFNESS  AH0 - L UW1 F - N AH0 S\nALOT  AH0 - L AA1 T\nALOUD  AH0 - L AW1 D\nALOYS  AH0 - L OY1 Z\nALOYSE  AH0 - L OY1 S\nALOYSIA  AA0 - L OY1 - S IY0 - AH0\nALOYSIUS  AE2 - L OW0 - IH1 - SH IH0 S\nALPA  AE1 L - P AH0\nALPACA  AE0 L - P AE1 - K AH0\nALPAUGH  AH0 L - P AO1\nALPER  AE1 L - P ER0\nALPERIN  AE1 L - P ER0 - IH2 N\nALPERN  AH0 L - P ER1 N\nALPERS  AE1 L - P ER0 Z\nALPERT  AE1 L - P ER0 T\nALPEX  AE1 L - P EH0 K S\nALPHA  AE1 L - F AH0\nALPHA'S  AE1 L - F AH0 Z\nALPHABET  AE1 L - F AH0 - B EH2 T\nALPHABETIC  AE2 L - F AH0 - B EH1 - T IH0 K\nALPHABETICAL  AE2 L - F AH0 - B EH1 - T IH0 - K AH0 L\nALPHABETICALLY  AE2 L - F AH0 - B EH1 - T IH0 K - L IY0\nALPHABETIZATION  AE2 L - F AH0 - B EH2 - T AH0 - Z EY1 - SH AH0 N\nALPHABETIZE  AE1 L - F AH0 - B AH0 - T AY2 Z\nALPHAMETRIC  AE1 L - F AH0 - M EH2 - T R IH0 K\nALPHAMETRICS  AE1 L - F AH0 - M EH2 - T R IH0 K S\nALPHANDERY  AE2 L - F AE1 - D ER0 - IY0\nALPHANUMERIC  AE2 L - F AH0 - N UW0 - M EH1 - R IH0 K\nALPHAREL  AE1 L - F ER0 - EH2 L\nALPHARETTA  AE2 L - F ER0 - EH1 - T AH0\nALPHIN  AE1 L - F IH0 N\nALPHONSE  AE0 L - F AA1 N Z\nALPHONSINE  AH0 L - F AA1 N - S IY0 N\nALPHONSO  AE0 L - F AA1 N - S OW0\nALPIN  AH0 L - P IH1 N\nALPINE  AE1 L - P AY2 N\nALPIREZ  AE1 L - P IH0 - R EH0 Z\nALPO  AE1 L - P OW0\nALPS  AE1 L P S\nALQUIST  AE1 L - K W IH0 S T\nALREADY  AO0 L - R EH1 - D IY0\nALREADY(2)  AO0 - R EH1 - D IY0\nALRED  AO1 L - R IH0 D\nALRIGHT  AO2 L - R AY1 T\nALROY  AH0 L - R OY1\nALS  AE1 L Z\nALSACE  AE0 L - S AA1 S\nALSACE(2)  AE0 L - S AE1 S\nALSATIAN  AE0 L - S EY1 - SH AH0 N\nALSBROOK  AE1 L Z - B R UH0 K\nALSBROOK'S  AE1 L Z - B R UH0 K S\nALSBROOKS  AE1 L Z - B R UH0 K S\nALSBROOKS'  AE1 L Z - B R UH0 K S\nALSBURY  AO1 L Z - B EH0 - R IY0\nALSBURY(2)  AE1 L Z - B EH0 - R IY0\nALSDORF  AO1 L Z - D AO0 R F\nALSDORF(2)  AE1 L Z - D AO0 R F\nALSIP  AE1 L - S IH0 P\nALSO  AO1 L - S OW0\nALSOBROOK  AE1 L - S AH0 - B R UH0 K\nALSOBROOKS  AE1 L - S AH0 - B R UH0 K S\nALSOP  AE1 L - S AA0 P\nALSPACH  AE1 L - S P AH0 K\nALSPAUGH  AH0 L - S P AO1\nALSTHOM  AE1 L - S TH AH0 M\nALSTON  AO1 L - S T AH0 N\nALSUP  AE1 L - S AH0 P\nALT  AA1 L T\nALTA  AA1 L - T AH0\nALTADENA  AA2 L - T AH0 - D IY1 - N AH0\nALTAI  AE0 L - T AY1\nALTAIC  AE0 L - T EY1 - IH0 K\nALTAMIRANO  AA0 L - T AA0 - M IH0 - R AA1 - N OW0\nALTAMURO  AO2 L - T AH0 - M UH1 - R OW0\nALTAR  AO1 L - T ER0\nALTARPIECE  AO1 L - T ER0 - P IY2 S\nALTARS  AO1 L - T ER0 Z\nALTAVISTA  AO2 L - T AH0 - V IH1 - S T AH0\nALTAY  AO1 L - T AY0\nALTEMOSE  AE1 L - T IH0 - M OW0 S\nALTEMUS  AE1 L - T IH0 - M IH0 S\nALTENBURG  AO1 L - T AH0 N - B ER0 G\nALTENHOFEN  AE1 L - T IH0 N - HH AH0 - F AH0 N\nALTER  AO1 L - T ER0\nALTERA  AO2 L - T EH1 - R AH0\nALTERATION  AO2 L - T ER0 - EY1 - SH AH0 N\nALTERATIONS  AO2 L - T ER0 - EY1 - SH AH0 N Z\nALTERCATION  AA2 L - T ER0 - K EY1 - SH AH0 N\nALTERCATIONS  AA2 L - T ER0 - K EY1 - SH AH0 N Z\nALTERED  AO1 L - T ER0 D\nALTERGOTT  AE1 L - T ER0 - G AH0 T\nALTERING  AO1 L - T ER0 - IH0 NG\nALTERMAN  AO1 L - T ER0 - M AH0 N\nALTERNACARE  AO0 L - T ER1 - N AH0 - K EH2 R\nALTERNATE  AO1 L - T ER0 - N AH0 T\nALTERNATE(2)  AO1 L - T ER0 - N EY2 T\nALTERNATED  AO1 L - T ER0 - N EY2 - T AH0 D\nALTERNATELY  AO1 L - T ER0 - N AH0 T - L IY0\nALTERNATES  AO1 L - T ER0 - N EY2 T S\nALTERNATING  AO1 L - T ER0 - N EY2 - T IH0 NG\nALTERNATION  AO1 L - T ER0 - N EY2 - SH AH0 N\nALTERNATIVE  AO0 L - T ER1 - N AH0 - T IH0 V\nALTERNATIVELY  AO0 L - T ER1 - N AH0 - T IH0 V - L IY0\nALTERNATIVES  AO0 L - T ER1 - N AH0 - T IH0 V Z\nALTERNATOR  AO1 L - T ER0 - N EY2 - T ER0\nALTERS  AO1 L - T ER0 Z\nALTFEST  AA1 L T - F EH2 S T\nALTHAUS  AE1 L T - HH AW0 S\nALTHAVER  AE2 L - TH EY1 - V ER0\nALTHEA  AE0 L - TH IY1 - AH0\nALTHOFF  AE1 L T - HH AO0 F\nALTHOUGH  AO2 L - DH OW1\nALTHOUSE  AO1 L T - HH AW2 S\nALTICE  AA1 L - T IH0 S\nALTIER  AO1 L - T IY0 - ER0\nALTIERI  AA0 L - T IH1 - R IY0\nALTIMA  AA1 L - T IH2 - M AH0\nALTIMA'S  AA1 L - T IH2 - M AH0 Z\nALTIMETER  AE0 L - T IH1 - M AH0 - T ER0\nALTIMORANO  AA2 L - T IY2 - M AO2 - R AA1 - N OW0\nALTIPLANO  AE2 L - T AH0 - P L AA1 - N OW2\nALTITUDE  AE1 L - T AH0 - T UW2 D\nALTITUDES  AE1 L - T IH0 - T UW2 D Z\nALTIZER  AE1 L - T AY0 - Z ER0\nALTLAND  AE1 L T - L AH0 N D\nALTMAN  AO1 L T - M AH0 N\nALTMAN'S  AO1 L T - M AH0 N Z\nALTMANN  AO1 L T - M AH0 N\nALTMEYER  AE1 L T - M AY0 - ER0\nALTMEYER(2)  AA1 L T - M AY0 - ER0\nALTO  AE1 L - T OW0\nALTOBELLI  AA0 L - T OW0 - B EH1 - L IY0\nALTOGETHER  AO2 L - T AH0 - G EH1 - DH ER0\nALTOM  AH0 L - T AA1 M\nALTOMARE  AA0 L - T OW0 - M AA1 - R IY0\nALTON  AO1 L - T AH0 N\nALTOONA  AE2 L - T UW1 - N AH0\nALTOS  AE1 L - T OW0 Z\nALTOS(2)  AO1 L - T OW2 S\nALTRA  AA1 L - T R AH0\nALTRON  AO1 L - T R AA0 N\nALTRUISM  AE1 L - T R UW0 - IH2 - Z AH0 M\nALTRUISTIC  AO2 L - T R UW0 - IH1 - S T IH0 K\nALTSCHILLER  AO1 L - CH IH0 - L ER0\nALTSCHUL  AE1 L - CH AH0 L\nALTSCHULER  AE1 L - CH Y UW0 - L ER0\nALTSCHULER(2)  AE1 L - CH UW0 - L ER0\nALTSHULER  AE1 L - CH Y UW0 - L ER0\nALTSHULER(2)  AE1 L - CH UW0 - L ER0\nALTUCHER  AE0 L - T AH1 - K ER0\nALTURAS  AA0 L - T UH1 - R AH0 S\nALTUS  AE1 L - T AH0 S\nALTVATER  AE1 L T - V AH0 - T ER0\nALTZHEIMER  AA1 L T S - HH AY2 - M ER0\nALTZHEIMER'S  AA1 L T S - HH AY2 - M ER0 Z\nALU  AA1 - L UW0\nALUM  AE1 - L AH0 M\nALUM(2)  AH0 - L AH1 M\nALUMAX  AE1 - L UW0 - M AE0 K S\nALUMBAUGH  AH0 - L AH1 M - B AO0\nALUMINA  AH0 - L UW1 - M AH0 - N AH0\nALUMINIO  AE2 - L UW0 - M IY1 - N IY0 - OW0\nALUMINIUM  AH0 - L UW1 - M IH0 - N AH0 M\nALUMINIUM(2)  AE2 L - Y UW1 - M IH0 - N AH0 M\nALUMINIZE  AH0 - L UW1 - M AH0 - N AY2 Z\nALUMINIZED  AH0 - L UW1 - M AH0 - N AY2 Z D\nALUMINOSILICATE  AH0 - L UW2 - M AH0 - N OW0 - S IH1 - L AH0 - K EY2 T\nALUMINUM  AH0 - L UW1 - M AH0 - N AH0 M\nALUMINUM'S  AH0 - L UW1 - M AH0 - N AH0 M Z\nALUMNI  AH0 - L AH1 M - N AY2\nALUMNUS  AH0 - L AH1 M - N AH0 S\nALUMS  AE1 - L AH0 M Z\nALUN  EY1 - L AH0 N\nALURA  AA0 - L UH1 - R AH0\nALUSUISSE  AE2 L - Y UW0 S - W IH1 S\nALVA  AE1 L - V AH0\nALVAH  AE0 L - V AA1\nALVAN  AE1 L - V AH0 N\nALVARADO  AE2 L - V ER0 - AA1 - D OW0\nALVARDO  AA0 L - V AA1 R - D OW0\nALVARE  AE2 L - V EY1 R\nALVARE(2)  AE2 L - V AA1 R\nALVARENGA  AA0 L - V AA0 - R EH1 NG - G AH0\nALVARES  AA0 L - V AA1 - R EH0 S\nALVAREZ  AE1 L - V ER0 - EH2 Z\nALVARO  AH0 L - V AA1 - R OW0\nALVEAR  AA0 L - V IH1 R\nALVEOLAR  AE0 L - V IY1 - AH0 - L ER0\nALVEOLI  AE0 L - V IY1 - AH0 - L AY2\nALVEREZ  AA0 L - V EH1 - R EH0 Z\nALVERO  AE0 L - V EH1 - R OW0\nALVERSON  AA0 L - V EH1 R - S AH0 N\nALVES  AA1 L - V EH0 S\nALVEY  AE1 L - V IY0\nALVIDREZ  AA0 L - V IY1 - D R EH0 Z\nALVIN  AE1 L - V IH0 N\nALVINA  AE0 L - V AY1 - N AH0\nALVINO  AA0 L - V IY1 - N OW0\nALVIS  AA1 L - V IH0 S\nALVITA  AA0 L - V IY1 - T AH0\nALVITE  AE1 L - V AY2 T\nALVORD  AE0 L - V AO1 R D\nALWALEED  AE2 - L W AH0 - L IY1 D\nALWALEED(2)  AA2 L - W AA0 - L IY1 D\nALWARD  AE0 L - W ER1 D\nALWAYS  AO1 L - W EY2 Z\nALWAYS(2)  AO1 L - W IY0 Z\nALWIN  AE1 L - W IH0 N\nALWINE  AE1 L - W AY2 N\nALWOOD  AE1 L - W UH0 D\nALWYN  AE1 L - W IH0 N\nALY  EY1 - L IY0\nALYCE  AE1 - L IH0 S\nALYEA  AE0 - L IY1 - AH0\nALYESKA  AE0 - L IY0 - EH1 - S K AH0\nALYESKA'S  AE2 L - Y EH1 - S K AH0 Z\nALYS  AE1 - L IY0 Z\nALYSHEBA  AE2 - L IH0 - SH IY1 - B AH0\nALYSIA  AH0 - L IH1 - S IY0 - AH0\nALYSSA  AH0 - L IH1 - S AH0\nALZA  AE1 L - Z AH0\nALZADO  AA0 L - Z AE1 - D OW0\nALZADO(2)  AA0 L - Z AA1 - D OW0\nALZENA  AA0 L - Z EH1 - N AH0\nALZHEIMER  AE1 L Z - HH AY2 - M ER0\nALZHEIMER'S  AE1 L Z - HH AY2 - M ER0 Z\nALZHEIMER'S(2)  AA1 T S Z - HH AY2 - M ER0 Z\nALZHEIMER(2)  AA1 L T S - HH AY2 - M ER0\nALZONA  AE2 L - Z OW1 - N AH0\nAM  AE1 M\nAM'S  AE1 M Z\nAM'S(2)  EY1 - EH1 M Z\nAM(2)  EY1 - EH1 M\nAMABEL  AE1 - M AH0 - B EH2 L\nAMABELLE  AE1 - M AH0 - B AH0 L\nAMABILE  AA0 - M AA1 - B AH0 L\nAMACHER  AE1 - M AH0 - K ER0\nAMACKER  AE1 - M AH0 - K ER0\nAMADEA  AA0 - M AA1 - D IY0 - AH0\nAMADEO  AA0 - M AA1 - D IY0 - OW0\nAMADEUS  AE2 - M AH0 - D EY1 - AH0 S\nAMADO  AA0 - M AA1 - D OW0\nAMADON  AA0 - M AA0 - D AO1 N\nAMADOR  AE1 - M AH0 - D AO2 R\nAMADOU  AE1 - M AH0 - D UW2\nAMAKER  AE1 - M EY0 - K ER0\nAMAKUDARI  AE2 - M AH0 - K Y UW0 - D AA1 - R IY0\nAMAL  AH0 - M AA1 L\nAMALEA  AE2 - M AH0 - L IY1 - AH0\nAMALFITANO  AA0 - M AA0 L - F IY0 - T AA1 - N OW0\nAMALGAM  AH0 - M AE1 L - G AH0 M\nAMALGAMATE  AH0 - M AE1 L - G AH0 - M EY2 T\nAMALGAMATED  AH0 - M AE1 L - G AH0 - M EY2 - T IH0 D\nAMALGAMATED'S  AH0 - M AE1 L - G AH0 - M EY2 - T IH0 D Z\nAMALGAMATION  AH0 - M AE2 L - G AH0 - M EY1 - SH AH0 N\nAMALGAMS  AH0 - M AE1 L - G AH0 M Z\nAMALIA  AH0 - M AA1 - L Y AH0\nAMALIE  AE1 - M AH0 - L IY0\nAMAN  AA1 - M AH0 N\nAMANA  AH0 - M AE1 - N AH0\nAMANDA  AH0 - M AE1 N - D AH0\nAMANDA'S  AH0 - M AE1 N - D AH0 Z\nAMANDIME  AE1 - M AH0 N - D AY2 M\nAMANN  AE1 - M AH0 N\nAMANO  AH0 - M AA1 - N OW0\nAMANPOUR  AA2 - M AA2 N - P UH1 R\nAMANPOUR'S  AA2 - M AA2 N - P UH1 R Z\nAMANTE  AA0 - M AA1 N - T IY0\nAMAR  AH0 - M AA1 R\nAMARA  AA0 - M AA1 - R AH0\nAMARAL  AA0 - M AA0 - R AE1 L\nAMARANTE  AA0 - M AA0 - R AA1 N - T IY0\nAMARANTH  AE1 - M ER0 - AE2 N TH\nAMARI  AA0 - M AA1 - R IY0\nAMARILLO  AE2 - M ER0 - IH1 - L OW0\nAMARIN  AE1 - M ER0 - IH0 N\nAMARIS  AE1 - M ER0 - IH0 S\nAMARO  AA0 - M AA1 - R OW0\nAMARYLLIS  AE2 - M ER0 - IH1 - L AH0 S\nAMARYLLIS(2)  AE2 - M ER0 - IH1 - L IH0 S\nAMARYLLISES  AE2 - M ER0 - IH1 - L AH0 - S AH0 Z\nAMASA  AE1 - M AH0 - S AH0\nAMASON  AE1 - M AH0 - S AH0 N\nAMASS  AH0 - M AE1 S\nAMASSED  AH0 - M AE1 S T\nAMASSING  AH0 - M AE1 - S IH0 NG\nAMATEUR  AE1 - M AH0 - T ER2\nAMATEUR(2)  AE1 - M AH0 - CH ER2\nAMATEURISH  AE1 - M AH0 - CH ER0 - IH0 SH\nAMATEURISM  AE1 - M AH0 - CH ER0 - IH0 - Z AH0 M\nAMATEURS  AE1 - M AH0 - T ER2 Z\nAMATEURS(2)  AE1 - M AH0 - CH ER2 Z\nAMATIL  AE1 - M AH0 - T IH0 L\nAMATO  AA0 - M AA1 - T OW0\nAMAULIGAK  AH0 - M AW1 - L IH0 - G AE0 K\nAMAX  EY1 - M AE0 K S\nAMAYA  AA0 - M AA1 - Y AH0\nAMAZE  AH0 - M EY1 Z\nAMAZED  AH0 - M EY1 Z D\nAMAZEMENT  AH0 - M EY1 Z - M AH0 N T\nAMAZES  AH0 - M EY1 - Z IH0 Z\nAMAZING  AH0 - M EY1 - Z IH0 NG\nAMAZINGLY  AH0 - M EY1 - Z IH0 NG - L IY0\nAMAZON  AE1 - M AH0 - Z AA2 N\nAMAZON'S  AE1 - M AH0 - Z AA2 N Z\nAMAZONIA  AE2 - M AH0 - Z OW1 - N IY0 - AH0\nAMAZONIAN  AE2 - M AH0 - Z OW1 - N IY0 - AH0 N\nAMAZONIANS  AE2 - M AH0 - Z OW1 - N IY0 - AH0 N Z\nAMAZONS  AE1 - M AH0 - Z AA2 N Z\nAMBAC  AE1 M - B AE0 K\nAMBASE  AE1 M - B EY2 S\nAMBASSADOR  AE0 M - B AE1 - S AH0 - D ER0\nAMBASSADOR'S  AE0 M - B AE1 - S AH0 - D ER0 Z\nAMBASSADORIAL  AE0 M - B AE2 - S AH0 - D AO1 - R IY0 - AH0 L\nAMBASSADORS  AE0 M - B AE1 - S AH0 - D ER0 Z\nAMBASSADORSHIP  AE0 M - B AE1 - S AH0 - D ER0 - SH IH2 P\nAMBASSADORSHIPS  AE0 M - B AE1 - S AH0 - D ER0 - SH IH2 P S\nAMBASSADRESS  AE0 M - B AE1 - S AH0 - D R AH0 S\nAMBER  AE1 M - B ER0\nAMBER'S  AE1 M - B ER0\nAMBERG  AE1 M - B ER0 G\nAMBERGER  AE1 M - B ER0 - G ER0\nAMBERGRIS  AE1 M - B ER0 - G R IH0 S\nAMBERS  AE1 M - B ER0 Z\nAMBERSON  AE1 M - B ER0 - S AH0 N\nAMBIANCE  AE1 M - B IY0 - AH0 N S\nAMBIDEXTROUS  AE2 M - B AH0 - D EH1 K S - T R AH0 S\nAMBIDEXTROUS(2)  AE2 M - B IH0 - D EH1 K S - T R AH0 S\nAMBIENCE  AE1 M - B IY0 - AH0 N S\nAMBIENT  AE1 M - B IY0 - AH0 N T\nAMBIGUITIES  AE0 M - B AH0 - G Y UW1 - AH0 - T IY0 Z\nAMBIGUITY  AE2 M - B IH0 - G Y UW1 - AH0 - T IY0\nAMBIGUOUS  AE0 M - B IH1 - G Y UW0 - AH0 S\nAMBITION  AE0 M - B IH1 - SH AH0 N\nAMBITIONS  AE0 M - B IH1 - SH AH0 N Z\nAMBITIOUS  AE0 M - B IH1 - SH AH0 S\nAMBITIOUSLY  AE0 M - B IH1 - SH AH0 S - L IY0\nAMBIVALENCE  AE0 M - B IH1 - V AH0 - L AH0 N S\nAMBIVALENT  AE0 M - B IH1 - V AH0 - L AH0 N T\nAMBLE  AE1 M - B AH0 L\nAMBLED  AE1 M - B AH0 L D\nAMBLER  AE1 M - B L ER0\nAMBLES  AE1 M - B AH0 L Z\nAMBLIN  AE1 M - B L IH0 N\nAMBLING  AE1 M - B AH0 L - IH0 NG\nAMBLING(2)  AE1 M - B L IH0 NG\nAMBORN  AH0 M - B AO1 R N\nAMBRA  AE1 M - B R AH0\nAMBRIANO  AE2 M - B R IY0 - AA1 - N OW0\nAMBRIT  AE1 M - B R IH0 T\nAMBRIZ  AE1 M - B R IH0 Z\nAMBROGIO  AE2 M - B R OW1 - JH IY0 - OW0\nAMBROSE  AE1 M - B R OW2 Z\nAMBROSIA  AE0 M - B R OW1 - ZH AH0\nAMBROSIAL  AE0 M - B R OW1 - ZH AH0 L\nAMBROSIAN  AE0 M - B R OW1 - Z AH0 N\nAMBROSIANO  AE0 M - B R OW2 - S IY0 - AA1 - N OW0\nAMBROSINE  AA0 M - B R OW0 - S IY1 - N IY0\nAMBROSINI  AA0 M - B R OW0 - S IY1 - N IY0\nAMBROSINO  AA0 M - B R OW0 - S IY1 - N OW0\nAMBROSIO  AE2 M - B R OW1 - S IY0 - OW0\nAMBROSIUS  AE1 M - B R AH0 - S IY0 - IH0 S\nAMBS  AE1 M Z\nAMBUEHL  AE1 M - B UH0 L\nAMBULANCE  AE1 M - B Y AH0 - L AH0 N S\nAMBULANCES  AE1 M - B Y AH0 - L AH0 N - S AH0 Z\nAMBULANCES(2)  AE1 M - B Y AH0 - L AH0 N - S IH0 Z\nAMBULATORY  AE1 M - B Y AH0 - L AH0 - T AO2 - R IY0\nAMBURGEY  AE1 M - B ER0 - G IY0\nAMBURN  AH0 M - B ER1 N\nAMBUSH  AE1 M - B UH2 SH\nAMBUSHED  AE1 M - B UH2 SH T\nAMBUSHES  AE1 M - B UH0 - SH IH0 Z\nAMBUSHING  AE1 M - B UH2 - SH IH0 NG\nAMC  AE1 M K\nAMC(2)  EY1 - EH1 M - S IY1\nAMCA  AE1 M - K AH0\nAMCAST  AE1 M - K AE2 S T\nAMCOLE  AE1 M - K OW2 L\nAMCOR  AE1 M - K AO2 R\nAMCORE  AE1 M - K AO2 R\nAMDAHL  AE1 M - D AA2 L\nAMDEC  AE1 M - D EH2 K\nAMDEK  AE1 M - D EH0 K\nAMDUR  AE1 M - D ER0\nAMDURA  AE0 M - D UH1 - R AH0\nAME  EY1 M\nAMECHE  AH0 - M IY1 - CH IY0\nAMEDCO  AH0 - M EH1 D - K OW0\nAMEDEE  AE1 - M IH0 - D IY0\nAMEEN  AH0 - M IY1 N\nAMELIA  AH0 - M IY1 - L Y AH0\nAMELINDA  AA0 - M EH0 - L IY1 N - D AH0\nAMELINE  AA0 - M EH0 - L IY1 - N IY0\nAMELIO  AH0 - M IY1 - L IY0 - OW0\nAMELIORATE  AH0 - M IY1 - L Y ER0 - EY2 T\nAMELIORATED  AH0 - M IY1 - L IY0 - ER0 - EY2 - T IH0 D\nAMELIORATED(2)  AH0 - M IY1 - L Y ER0 - EY2 - T IH0 D\nAMELIORATION  AH0 - M IY2 - L Y ER0 - EY1 - SH AH0 N\nAMELITA  AA0 - M EH0 - L IY1 - T AH0\nAMELL  AA0 - M EY1 L\nAMEN  EY0 - M EH1 N\nAMEN(2)  AA0 - M EH1 N\nAMENABLE  AH0 - M EH1 - N AH0 - B AH0 L\nAMENABLE(2)  AH0 - M IY1 - N AH0 - B AH0 L\nAMEND  AH0 - M EH1 N D\nAMENDABLE  AH0 - M EH1 N - D AH0 - B AH0 L\nAMENDED  AH0 - M EH1 N - D AH0 D\nAMENDED(2)  AH0 - M EH1 N - D IH0 D\nAMENDING  AH0 - M EH1 N - D IH0 NG\nAMENDMENT  AH0 - M EH1 N D - M AH0 N T\nAMENDMENT'S  AH0 - M EH1 N D - M AH0 N T S\nAMENDMENTS  AH0 - M EH1 N D - M AH0 N T S\nAMENDOLA  AA0 - M EH0 N - D OW1 - L AH0\nAMENDS  AH0 - M EH1 N D Z\nAMENITIES  AH0 - M EH1 - N AH0 - T IY0 Z\nAMENITIES(2)  AH0 - M EH1 - N IH0 - T IY0 Z\nAMENITY  AH0 - M EH1 - N AH0 - T IY0\nAMENT  AE1 - M IH0 N T\nAMENTA  AH0 - M EH1 N - T AH0\nAMER  EY1 - M ER0\nAMERADA  AE2 - M EH0 - R AA1 - D AH0\nAMERADA(2)  AE2 - M ER0 - AA1 - D AH0\nAMERCO  AH0 - M EH1 R - K OW0\nAMERFORD  EY1 - M ER0 - F ER0 D\nAMERI  AH0 - M EH1 - R IY0\nAMERIBANC  AH0 - M EH1 - R IH0 - B AE2 NG K\nAMERICA  AH0 - M EH1 - R AH0 - K AH0\nAMERICA'S  AH0 - M EH1 - R AH0 - K AH0 Z\nAMERICA'S(2)  AH0 - M EH1 - R IH0 - K AH0 Z\nAMERICA(2)  AH0 - M EH1 - R IH0 - K AH0\nAMERICAN  AH0 - M EH1 - R AH0 - K AH0 N\nAMERICAN'S  AH0 - M EH1 - R IH0 - K AH0 N Z\nAMERICAN(2)  AH0 - M EH1 - R IH0 - K AH0 N\nAMERICANA  AH0 - M EH2 - R AH0 - K AE1 - N AH0\nAMERICANISM  AH0 - M EH1 - R IH0 - K AH0 - N IH2 - Z AH0 M\nAMERICANIZATION  AH0 - M EH2 - R AH0 - K AH0 - N AH0 - Z EY1 - SH AH0 N\nAMERICANIZE  AH0 - M EH1 - R AH0 - K AH0 - N AY2 Z\nAMERICANIZED  AH0 - M EH1 - R IH0 - K AH0 - N AY2 Z D\nAMERICANO  AH0 - M EH2 - R IH0 - K AA1 - N OW0\nAMERICANS  AH0 - M EH1 - R AH0 - K AH0 N Z\nAMERICANS'  AH0 - M EH1 - R IH0 - K AH0 N Z\nAMERICANS(2)  AH0 - M EH1 - R IH0 - K AH0 N Z\nAMERICAR  AH0 - M EH1 - R IH0 - K AA2 R\nAMERICARE  AH0 - M EH1 - R IH0 - K EH2 R\nAMERICARES  AH0 - M EH1 - R IH0 - K EH2 R Z\nAMERICAS  AH0 - M EH1 - R AH0 - K AH0 Z\nAMERICAS'  AH0 - M EH1 - R IH0 - K AH2 Z\nAMERICAS(2)  AH0 - M EH1 - R IH0 - K AH0 Z\nAMERICO  AH0 - M ER1 - AH0 - K OW0\nAMERICOLD  AH0 - M EH1 - R IH0 - K OW2 L D\nAMERICORP  AH0 - M EH1 - R IH0 - K AO2 R\nAMERICORP(2)  AH0 - M EH1 - R IH0 - K AO2 R P\nAMERICORPS  AH0 - M EH1 - R IH0 - K AO2 R\nAMERICUS  AH0 - M EH1 - R IH0 - K AH0 S\nAMERIFIRST  AH0 - M EH1 - R IH0 - F ER0 S T\nAMERIGAS  AH0 - M EH1 - R IH0 - G AE2 S\nAMERIGO  AA0 - M ER0 - IY1 - G OW0\nAMERIKA  AH0 - M EH1 - R IH0 - K AH0\nAMERINDIAN  AE2 - M ER0 - IH1 N - D IY0 - AH0 N\nAMERINE  AA0 - M ER0 - IY1 - N IY0\nAMERITECH  AH0 - M EH1 - R IH0 - T EH2 K\nAMERITECH'S  AH0 - M EH1 - R IH0 - T EH2 K S\nAMERITRUST  AH0 - M EH1 - R IH0 - T R AH2 S T\nAMERMAN  AE1 - M ER0 - M AH0 N\nAMERO  AA0 - M EH1 - R OW0\nAMERON  AE1 - M ER0 - AA0 N\nAMERON'S  AE1 - M ER0 - AA0 N Z\nAMERONGEN  AE2 - M ER0 - AO1 N - JH AH0 N\nAMERSHAM  AE1 - M ER0 - SH AE2 M\nAMERSON  AE1 - M ER0 - S AH0 N\nAMERY  AE1 - M ER0 - IY0\nAMES  EY1 M Z\nAMES'  EY1 M Z\nAMES'S  EY1 M - Z IH0 Z\nAMETEK  AE1 - M AH0 - T EH2 K\nAMETEK'S  AE1 - M AH0 - T EH2 K S\nAMETHYST  AE1 - M IH0 - TH IH0 S T\nAMEV  AE1 - M EH0 V\nAMEX  AE1 - M EH2 K S\nAMEX'S  AE1 - M EH0 K - S IH0 Z\nAMEXCO  AH0 - M EH1 K - S K OW0\nAMEXCO'S  AH0 - M EH1 K - S K OW0 Z\nAMEY  EY1 - M IY0\nAMEZCUA  AH0 - M EH1 Z - K Y UW0 - AH0\nAMEZQUITA  AA0 - M EH0 Z - K W IY1 - T AH0\nAMFAC  AE1 M - F AE0 K\nAMFESCO  AE0 M - F EH1 - S K OW0\nAMGEN  AE1 M - JH EH0 N\nAMGEN'S  AE1 M - JH EH0 N Z\nAMHERST  AE1 - M ER0 S T\nAMHOIST  AE0 M - HH OY1 S T\nAMI  AA1 - M IY0\nAMIABILITY  EY2 - M IY0 - AH0 - B IH1 - L AH0 - T IY0\nAMIABLE  EY1 - M IY0 - AH0 - B AH0 L\nAMIABLY  EY1 - M IY0 - AH0 - B L IY0\nAMICABLE  AE1 - M IH0 - K AH0 - B AH0 L\nAMICABLY  AE1 - M IH0 - K AH0 - B L IY0\nAMICK  AE1 - M IH0 K\nAMICO  AA0 - M IY1 - K OW0\nAMICONE  AE1 - M IH0 - K OW2 N\nAMICUS  AH0 - M IY1 - K AH0 S\nAMID  AH0 - M IH1 D\nAMIDI  AA0 - M IY1 - D IY0\nAMIDON  AE1 - M IH0 - D AA0 N\nAMIDSHIPS  AH0 - M IH1 D - SH IH0 P S\nAMIDST  AH0 - M IH1 D S T\nAMIE  AE1 - M IY0\nAMIGA  AH0 - M IY1 - G AH0\nAMIGO  AH0 - M IY1 - G OW2\nAMIGOS  AH0 - M IY1 - G OW2 Z\nAMILIA  AA0 - M IY1 - L IY0 - AH0\nAMIN  AA0 - M IY1 N\nAMINO  AH0 - M IY1 - N OW0\nAMINTA  AH0 - M IH1 N - T AH0\nAMIOT  EY1 - M IY0 - AH0 T\nAMIPRILOSE  AH0 - M IH1 - P R AH0 - L OW2 S\nAMIR  AH0 - M IH1 R\nAMIR'S  AH0 - M IH1 R Z\nAMIR'S(2)  AA0 - M IH1 R Z\nAMIR(2)  AA0 - M IH1 R\nAMIRAM  AE1 - M ER0 - AE0 M\nAMIRAN  AE1 - M IH0 - R AH0 N\nAMIRAULT  AE1 - M AY0 - R AW0 L T\nAMIRAV  AE1 - M IH0 - R AE2 V\nAMIRI  AA0 - M IH1 - R IY0\nAMIS  AE1 - M IH0 S\nAMISH  AA1 - M IH0 SH\nAMISH(2)  EY1 - M IH0 SH\nAMISON  AE1 - M IH0 - S AH0 N\nAMISS  AH0 - M IH1 S\nAMIT  AA2 - M IY1 T\nAMITAI  AE1 - M IH0 - T AY2\nAMITY  AE1 - M IH0 - T IY0\nAMITYVILLE  AE1 - M IH0 - T IY0 - V IH2 L\nAMMAN  AE1 - M AH0 N\nAMMAN(2)  AH0 - M AA1 N\nAMMANN  AE1 - M AH0 N\nAMMEEN  AH0 - M IY1 N\nAMMERMAN  AE1 - M ER0 - M AH0 N\nAMMETER  AE1 - M IY2 - T ER0\nAMMETERS  AE1 - M IY2 - T ER0 Z\nAMMIRATI  AA0 - M IH0 - R AA1 - T IY0\nAMMO  AE1 - M OW2\nAMMON  AE1 - M AH0 N\nAMMONIA  AH0 - M OW1 - N Y AH0\nAMMONITE  AE1 - M AH0 - N AY2 T\nAMMONITES  AE1 - M AH0 - N AY2 T S\nAMMONIUM  AH0 - M OW1 - N IY0 - AH0 M\nAMMONS  AE1 - M AH0 N Z\nAMMUNITION  AE2 - M Y AH0 - N IH1 - SH AH0 N\nAMMUNITIONS  AE2 - M Y AH0 - N IH1 - SH AH0 N Z\nAMNESIA  AE0 M - N IY1 - ZH AH0\nAMNESIAC  AE0 M - N IY1 - Z IY0 - AE2 K\nAMNESTIES  AE1 M - N AH0 - S T IY0 Z\nAMNESTY  AE1 M - N AH0 - S T IY0\nAMNIO  AE1 M - N IY0 - OW0\nAMNIOCENTESIS  AE2 M - N IY0 - OW0 - S EH2 N - T IY1 - S IH0 S\nAMNIOTIC  AE1 M - N IY0 - AO0 - T IH0 K\nAMO  AA1 - M OW0\nAMOCO  AE1 - M AH0 - K OW0\nAMOCO'S  AE1 - M AH0 - K OW0 Z\nAMOEBA  AH0 - M IY1 - B AH0\nAMOEBAS  AH0 - M IY1 - B AH0 Z\nAMOEBIC  AH0 - M IY1 - B IH0 K\nAMOK  AH0 - M AH1 K\nAMON  AA0 - M AO1 N\nAMONG  AH0 - M AH1 NG\nAMONGST  AH0 - M AH1 NG S T\nAMOOLYA  AH0 - M UW1 - L Y AH0\nAMOR  AE1 - M ER0\nAMORAL  EY0 - M AO1 - R AH0 L\nAMORE  AA1 - M AO0 R\nAMORETTE  AE1 - M ER0 - EH2 T\nAMORIST  AE1 - M ER0 - AH0 S T\nAMORITA  AA0 - M AO0 - R IY1 - T AH0\nAMOROSI  AA0 - M AO0 - R OW1 - S IY0\nAMOROSO  AA0 - M AO0 - R OW1 - S OW0\nAMOROUS  AE1 - M ER0 - AH0 S\nAMORPHOUS  AH0 - M AO1 R - F AH0 S\nAMORTIZATION  AE2 - M ER0 - T IH0 - Z EY1 - SH AH0 N\nAMORTIZE  AE1 - M ER0 - T AY2 Z\nAMORTIZED  AE1 - M ER0 - T AY2 Z D\nAMORTIZING  AE1 - M ER0 - T AY2 - Z IH0 NG\nAMORUSO  AE2 - M ER0 - UW1 - S OW0\nAMORY  EY1 - M ER0 - IY0\nAMOS  EY1 - M AH0 S\nAMOS'S  EY1 - M AH0 - S IH0 Z\nAMOSKEAG  AE1 - M AH0 - S K EY2 G\nAMOSKEAG'S  AE1 - M AH0 - S K EY2 G Z\nAMOSS  AH0 - M AO1 S\nAMOUNT  AH0 - M AW1 N T\nAMOUNTED  AH0 - M AW1 N - T IH0 D\nAMOUNTED(2)  AH0 - M AW1 - N IH0 D\nAMOUNTING  AH0 - M AW1 N - T IH0 NG\nAMOUNTING(2)  AH0 - M AW1 - N IH0 NG\nAMOUNTS  AH0 - M AW1 N T S\nAMP  AE1 M P\nAMPAD  AE1 M - P AE0 D\nAMPAL  AE1 M - P AH0 L\nAMPARAN  AE1 M - P ER0 - AH0 N\nAMPATO  AA2 M - P AA1 - T OW0\nAMPCO  AE1 M - P K OW0\nAMPERAGE  AE1 M - P ER0 - IH0 JH\nAMPERSAND  AE1 M - P ER0 - S AE2 N D\nAMPEX  AE1 M - P EH2 K S\nAMPHENOL  AE1 M - F AH0 - N AO0 L\nAMPHETAMINE  AE0 M - F EH1 - T AH0 - M IY2 N\nAMPHETAMINES  AE0 M - F EH1 - T AH0 - M IY2 N Z\nAMPHIBIAN  AE0 M - F IH1 - B IY0 - AH0 N\nAMPHIBIANS  AE0 M - F IH1 - B IY0 - AH0 N Z\nAMPHIBIOUS  AE0 M - F IH1 - B IY0 - AH0 S\nAMPHIBOLE  AE1 M - F AH0 - B OW2 L\nAMPHIBOLE(2)  AE1 M - F IH0 - B OW2 L\nAMPHITHEATER  AE1 M - F AH0 - TH IY2 - AH0 - T ER0\nAMPHITHEATERS  AE1 M - F AH0 - TH IY2 - AH0 - T ER0 Z\nAMPHITHEATRE  AE1 M - P AH0 - TH IY2 - AH0 - T ER0\nAMPHORA  AE1 M - F ER0 - AH0\nAMPHORAE  AE1 M - F ER0 - IY2\nAMPLE  AE1 M - P AH0 L\nAMPLICONS  AE1 M - P L IH0 - K AO0 N Z\nAMPLIFICATION  AE2 M - P L AH0 - F AH0 - K EY1 - SH AH0 N\nAMPLIFICATIONS  AE2 M - P L AH0 - F AH0 - K EY1 - SH AH0 N Z\nAMPLIFIED  AE1 M - P L AH0 - F AY2 D\nAMPLIFIER  AE1 M - P L AH0 - F AY2 - ER0\nAMPLIFIERS  AE1 M - P L AH0 - F AY2 - ER0 Z\nAMPLIFIES  AE1 M - P L AH0 - F AY2 Z\nAMPLIFY  AE1 M - P L AH0 - F AY2\nAMPLIFYING  AE1 M - P L AH0 - F AY2 - IH0 NG\nAMPLIGEN  AE1 M - P L IH0 - JH EH0 N\nAMPLITUDE  AE1 M - P L AH0 - T UW2 D\nAMPLOCORE  AE1 M - P L AH0 - K AO2 R\nAMPLY  AE1 M - P L IY0\nAMPOL  AE1 M - P AO0 L\nAMPUTATE  AE1 M - P Y AH0 - T EY2 T\nAMPUTATED  AE1 M - P Y AH0 - T EY2 - T IH0 D\nAMPUTATION  AE2 M - P Y AH0 - T EY1 - SH AH0 N\nAMPUTATIONS  AE2 M - P Y UW0 - T EY1 - SH AH0 N Z\nAMPUTEE  AE1 M - P Y AH0 - T IY1\nAMPUTEES  AE1 M - P Y AH0 - T IY1 Z\nAMR  AA1 - M ER0\nAMRAAM  AE0 M - R AA1 M\nAMRE  AE1 - M R AH0\nAMREIN  AE1 M - R AY0 N\nAMREP  AE1 M - R EH0 P\nAMRHEIN  AE1 - M ER0 - HH AY2 N\nAMRINE  AE1 - M R IY0 N\nAMRITSAR  AE0 M - R IH1 T - S ER0\nAMRITSAR(2)  AE1 M - R IH0 T - S AA2 R\nAMRO  AE1 - M R OW0\nAMS  AE1 M Z\nAMSBAUGH  AE1 M - Z B AO2\nAMSCO  AE1 M - S K OW0\nAMSDEN  AE1 M Z - D AH0 N\nAMSLER  AE1 M - Z L ER0\nAMSOUTH  AE1 M - S AW2 TH\nAMSPACHER  AE1 M - S P AH0 - K ER0\nAMSTAR  AE1 M - S T AA2 R\nAMSTER  AE1 M - S T ER0\nAMSTERDAM  AE1 M - S T ER0 - D AE2 M\nAMSTERDAM'S  AE1 M - S T ER0 - D AE2 M Z\nAMSTRAD  AE1 M - S T R AE2 D\nAMSTUTZ  AE1 M - S T AH0 T S\nAMTECH  AE1 M - T EH2 K\nAMTRACK  AE1 M - T R AE2 K\nAMTRAK  AE1 M - T R AE0 K\nAMTRAK'S  AE1 M - T R AE2 K S\nAMUCK  AH0 - M AH1 K\nAMULET  AE1 - M Y AH0 - L AH0 T\nAMULETS  AE1 - M Y AH0 - L AH0 T S\nAMUNDSEN  EY1 - M AH0 N D - S AH0 N\nAMUNDSEN(2)  AA1 - M AH0 N D - S AH0 N\nAMUNDSON  AE1 - M AH0 N D - S AH0 N\nAMUSE  AH0 - M Y UW1 Z\nAMUSED  AH0 - M Y UW1 Z D\nAMUSEMENT  AH0 - M Y UW1 Z - M AH0 N T\nAMUSEMENTS  AH0 - M Y UW1 Z - M AH0 N T S\nAMUSEMENTS'  AH0 - M Y UW1 Z - M AH0 N T S\nAMUSES  AH0 - M Y UW1 - Z IH0 Z\nAMUSING  AH0 - M Y UW1 - Z IH0 NG\nAMUSINGLY  AH0 - M Y UW1 - Z IH0 NG - L IY0\nAMVEST  AE1 M - V EH0 S T\nAMVESTOR  AE2 M - V EH1 - S T ER0\nAMVESTORS  AE2 M - V EH1 - S T ER0 Z\nAMWAY  AE1 M - W EY2\nAMY  EY1 - M IY0\nAMY'S  EY1 - M IY0 Z\nAMYLIN  AE1 - M IH0 - L IH2 N\nAMYLOID  AE1 - M IH0 - L OY2 D\nAMYOTROPHIC  AE2 - M AY0 - AH0 - T R OW1 - F IH0 K\nAMYOTROPHIC(2)  AE2 - M IY0 - AH0 - T R OW1 - F IH0 K\nAMYX  AE1 - M IH0 K S\nAN  AE1 N\nAN(2)  AH0 N\nANA  AA1 - N AH0\nANA(2)  AE1 - N AH0\nANABAPTIST  AE2 - N AH0 - B AE1 P - T AH0 S T\nANABLE  EY1 - N AH0 - B AH0 L\nANABOLIC  AE2 - N AH0 - B AA1 - L IH0 K\nANAC  AE1 - N AE0 K\nANACHRONISM  AH0 - N AE1 - K R AH0 - N IH2 - Z AH0 M\nANACHRONISMS  AH0 - N AE1 - K R AH0 - N IH2 - Z AH0 M Z\nANACHRONISTIC  AH0 - N AE2 - K R AH0 - N IH1 - S T IH0 K\nANACIN  AE1 - N AH0 - S IH0 N\nANACKER  AE1 - N AH0 - K ER0\nANACOMP  AE1 - N AH0 - K AA2 M P\nANACONDA  AE2 - N AH0 - K AA1 N - D AH0\nANACOSTIA  AE2 - N AH0 - K AA1 - S T IY0 - AH0\nANACOSTIA'S  AE2 - N AH0 - K AA1 - S T IY0 - AH0 Z\nANADARKO  AE2 - N AH0 - D AA1 R - K OW0\nANADARKO'S  AE2 - N AH0 - D AA1 R - K OW0 Z\nANAEROBE  AE1 - N ER0 - OW2 B\nANAEROBES  AE1 - N ER0 - OW2 B Z\nANAEROBIC  AE2 - N ER0 - OW1 - B IH0 K\nANAESTHESIA  AE2 - N AH0 S - TH IY1 - ZH AH0\nANAFRANIL  AH0 - N AE1 - F R AH0 - N IH2 L\nANAGNOS  AA0 - N AA1 G - N OW0 Z\nANAGRAM  AE1 - N AH0 - G R AE2 M\nANAHEIM  AE1 - N AH0 - HH AY2 M\nANAL  EY1 - N AH0 L\nANALGESIC  AE2 - N AH0 L - JH IY1 - S IH0 K\nANALGESICS  AE2 - N AH0 L - JH IY1 - Z IH0 K S\nANALOG  AE1 - N AH0 - L AO2 G\nANALOGIC  AE2 - N AH0 - L AA1 - JH IH0 K\nANALOGIES  AH0 - N AE1 - L AH0 - JH IY0 Z\nANALOGOUS  AH0 - N AE1 - L AH0 - G AH0 S\nANALOGUE  AE1 - N AH0 - L AO2 G\nANALOGY  AH0 - N AE1 - L AH0 - JH IY0\nANALYSES  AH0 - N AE1 - L AH0 - S IY2 Z\nANALYSIS  AH0 - N AE1 - L AH0 - S AH0 S\nANALYSIS(2)  AH0 - N AE1 - L IH0 - S IH0 S\nANALYST  AE1 - N AH0 - L AH0 S T\nANALYST'S  AE1 - N AH0 - L IH0 S T S\nANALYST'S(2)  AE1 - N AH0 - L IH0 S S\nANALYST'S(3)  AE1 - N AH0 - L IH0 S\nANALYST(2)  AE1 - N AH0 - L IH0 S T\nANALYSTS  AE1 - N AH0 - L AH0 S T S\nANALYSTS'  AE1 - N AH0 - L IH0 S T S\nANALYSTS'(2)  AE1 - N AH0 - L IH0 S S\nANALYSTS'(3)  AE1 - N AH0 - L IH0 S\nANALYSTS(2)  AE1 - N AH0 - L IH0 S T S\nANALYSTS(3)  AE1 - N AH0 - L AH0 S S\nANALYSTS(4)  AE1 - N AH0 - L IH0 S S\nANALYSTS(5)  AE1 - N AH0 - L AH0 S\nANALYSTS(6)  AE1 - N AH0 - L IH0 S\nANALYTIC  AE2 - N AH0 - L IH1 - T IH0 K\nANALYTICAL  AE2 - N AH0 - L IH1 - T IH0 - K AH0 L\nANALYTICALLY  AE2 - N AH0 - L IH1 - T IH0 K - L IY0\nANALYTICITY  AE2 - N AH0 - L AH0 - T IH1 - S AH0 - T IY0\nANALYTICS  AE2 - N AH0 - L IH1 - T IH0 K S\nANALYZABLE  AE1 - N AH0 - L AY2 - Z AH0 - B AH0 L\nANALYZE  AE1 - N AH0 - L AY2 Z\nANALYZED  AE1 - N AH0 - L AY2 Z D\nANALYZER  AE1 - N AH0 - L AY2 - Z ER0\nANALYZERS  AE1 - N AH0 - L AY2 - Z ER0 Z\nANALYZES  AE1 - N AH0 - L AY2 - Z IH0 Z\nANALYZING  AE1 - N AH0 - L AY2 - Z IH0 NG\nANAMARIA  AE2 - N AH0 - M AH0 - R IY1 - AH0\nANAND  AE1 - N AH0 N D\nANANDALE  AE1 - N AH0 N - D EY2 L\nANANDEEP  AA2 - N AA0 N - D IY1 P\nANANIA  AA0 - N AA1 - N IY0 - AH0\nANANTHA  AH0 - N AE1 N - TH AH0\nANAPHORA  AH0 - N AE1 - F ER0 - AH0\nANARCHIC  AE0 - N AA1 R - K IH0 K\nANARCHICAL  AE0 - N AA1 R - K AH0 - K AH0 L\nANARCHIST  AE1 - N ER0 - K AH0 S T\nANARCHISTS  AE1 - N ER0 - K AH0 S T S\nANARCHY  AE1 - N ER0 - K IY0\nANAREN  AE1 - N ER0 - AH0 N\nANAS  AE1 - N AH0 S\nANASAZI  AE2 - N AH0 - S AE1 - Z IY0\nANASAZI(2)  AE2 - N AH0 - S AA1 - Z IY0\nANASQUAN  AE1 - N AH0 S - K W AA0 N\nANAST  AA1 - N AA0 S T\nANASTAS  AE1 - N AH0 - S T AH0 Z\nANASTASI  AA0 - N AA0 - S T AA1 - S IY0\nANASTASIA  AE0 - N AH0 - S T EY1 - ZH AH0\nANASTASIO  AA0 - N AA0 - S T AA1 - S IY0 - OW0\nANASTASIO(2)  AE2 - N AH0 - S T AA1 - S IY0 - OW0\nANASTOS  AE1 - N AH0 - S T OW0 Z\nANATHEMA  AH0 - N AE1 - TH AH0 - M AH0\nANATOLA  AA0 - N AA0 - T OW1 - L AH0\nANATOLE  AE1 - N AH0 - T OW2 L\nANATOLI  AE2 - N AH0 - T OW1 - L IY0\nANATOLIA  AE2 - N AH0 - T OW1 - L IY0 - AH0\nANATOLIAN  AE2 - N AH0 - T OW1 - L IY0 - AH0 N\nANATOLY  AE2 - N AH0 - T OW1 - L IY0\nANATOMICAL  AE2 - N AH0 - T AA1 - M AH0 - K AH0 L\nANATOMICAL(2)  AE2 - N AH0 - T AA1 - M IH0 - K AH0 L\nANATOMICALLY  AE2 - N AH0 - T AA1 - M AH0 K - L IY0\nANATOMIST  AH0 - N AE1 - T AH0 - M AH0 S T\nANATOMIST(2)  AH0 - N AE1 - T AH0 - M IH0 S T\nANATOMY  AH0 - N AE1 - T AH0 - M IY0\nANAYA  AA0 - N AA1 - Y AH0\nANBARI  AE0 N - B AA1 - R IY0\nANCEL  AH0 N - S EH1 L\nANCELL  AA0 N - S EY1 L\nANCESTOR  AE1 N - S EH2 - S T ER0\nANCESTORS  AE1 N - S EH2 - S T ER0 Z\nANCESTRAL  AE0 N - S EH1 S - T R AH0 L\nANCESTRY  AE1 N - S EH0 S - T R IY0\nANCHETA  AA0 N - K EH1 - T AH0\nANCHO  AE1 N - CH OW0\nANCHONDO  AA0 N - K OW1 N - D OW0\nANCHOR  AE1 NG - K ER0\nANCHOR'S  AE1 NG - K ER0 Z\nANCHORAGE  AE1 NG - K ER0 - AH0 JH\nANCHORAGE(2)  AE1 NG - K R IH0 JH\nANCHORED  AE1 NG - K ER0 D\nANCHORING  AE1 NG - K ER0 - IH0 NG\nANCHORMAN  AE1 NG - K ER0 - M AE2 N\nANCHORMAN(2)  AE1 NG - K ER0 - M AH0 N\nANCHORMEN  AE1 NG - K ER0 - M EH1 N\nANCHORS  AE1 NG - K ER0 Z\nANCHOVIES  AE0 N - CH OW1 - V IY0 Z\nANCHOVIES(2)  AE1 N - CH OW2 - V IY0 Z\nANCHOVY  AE0 N - CH OW1 - V IY0\nANCHOVY(2)  AE1 N - CH OW2 - V IY0\nANCIENT  EY1 N - CH AH0 N T\nANCIENT(2)  EY1 N - SH AH0 N T\nANCIENTS  EY1 N - CH AH0 N T S\nANCIENTS(2)  EY1 N - SH AH0 N T S\nANCILLARY  AE1 N - S AH0 - L EH2 - R IY0\nANCIRA  AA0 N - CH IH1 - R AH0\nANCONA  AA0 N - K OW1 - N AH0\nANCRUM  AH0 N - K R AH1 M\nANCTIL  AE1 NG K - T IH0 L\nAND  AE1 N D\nAND(2)  AH0 N D\nANDAL  AE1 N - D AH0 L\nANDALUSIA  AE2 N - D AH0 - L UW1 - ZH AH0\nANDALUSIAN  AE2 N - D AH0 - L UW1 - SH AH0 N\nANDANTE  AA0 N - D AA1 N - T EY0\nANDANTINO  AA2 N - D AA2 N - T IY1 - N OW0\nANDEAN  AE1 N - D IY0 - AH0 N\nANDEL  AE1 N - D AH0 L\nANDER  AE1 N - D ER0\nANDERA  AE1 N - D ER0 - AH0\nANDERBERG  AE1 N - D ER0 - B ER0 G\nANDEREGG  AE1 N - D ER0 - IH0 G\nANDERLE  AE1 N - D ER0 - AH0 L\nANDERLINI  AE2 N - D ER0 - L IY1 - N IY0\nANDERMAN  AE1 N - D ER0 - M AH0 N\nANDERS  AE1 N - D ER0 Z\nANDERSEN  AE1 N - D ER0 - S AH0 N\nANDERSEN'S  AE1 N - D ER0 - S AH0 N Z\nANDERSON  AE1 N - D ER0 - S AH0 N\nANDERSON'S  AE1 N - D ER0 - S AH0 N Z\nANDERSONS  AE1 N - D ER0 - S AH0 N Z\nANDERSONVILLE  AE1 N - D ER0 - S AH0 N - V IH0 L\nANDERSSON  AE1 N - D ER0 - S AH0 N\nANDERT  AE1 N - D ER0 T\nANDERTON  AE1 N - D ER0 - T AH0 N\nANDES  AE1 N - D IY0 Z\nANDESITE  AE1 N - D IH0 - S AY2 T\nANDIE  AE1 N - D IY0\nANDING  AE1 N - D IH0 NG\nANDINO  AA0 N - D IY1 - N OW0\nANDIRON  AE1 N - D AY2 - ER0 N\nANDIS  AE1 N - D IH0 S\nANDLER  AE1 N D - L ER0\nANDO  AE1 N - D OW0\nANDOLINA  AA0 N - D OW0 - L IY1 - N AH0\nANDONIAN  AE2 N - D OW1 - N IY0 - AH0 N\nANDORAS  AE0 N - D AO1 - R AH0 Z\nANDORRA  AE0 N - D AO1 - R AH0\nANDOVER  AE1 N D - OW0 - V ER0\nANDRADA  AA0 N - D R AA1 - D AH0\nANDRADE  AE1 N - D R EY2 D\nANDRAE  AA1 N - D R AY0\nANDRAS  AA1 N - D R AH0 S\nANDRE  AA1 N - D R EY2\nANDREA  AE1 N - D R IY0 - AH0\nANDREA'S  AE1 N - D R IY0 - AH0 Z\nANDREA'S(2)  AA2 N - D R EY1 - AH0 Z\nANDREA(2)  AA2 N - D R EY1 - AH0\nANDREAE  AA0 N - D R EY1 - AA0\nANDREANA  AE2 N - D R IY1 - N AH0\nANDREANA(2)  AE2 N - D R IY1 - AA0 - N AH0\nANDREANI  AE2 N - D R IY1 - N IY0\nANDREANI(2)  AE2 N - D R IY1 - AA0 - N IY0\nANDREANO  AE2 N - D R IY1 - N OW0\nANDREANO(2)  AE2 N - D R IY1 - AA0 - N OW0\nANDREAS  AA0 N - D R EY1 - AH0 S\nANDREASEN  AE1 N - D R IY0 - S AH0 N\nANDREASON  AE2 N - D R IY1 - S AH0 N\nANDREASSEN  AE1 N - D R AH0 - S AH0 N\nANDREE  AH0 N - D R IY1\nANDREEN  AH0 N - D R IY1 N\nANDREI  AE1 N - D R EY2\nANDREINI  AA0 N - D R EY0 - IY1 - N IY0\nANDREJ  AA1 N - D R EY0\nANDREN  AE1 N - D ER0 - AH0 N\nANDREOLI  AA0 N - D R EY0 - OW1 - L IY0\nANDREONI  AA0 N - D R EY0 - OW1 - N IY0\nANDREOTTI  AA0 N - D R IY0 - AA1 - T IY0\nANDREOTTI(2)  AE2 N - D R IY0 - AA1 - D IY0\nANDREOZZI  AA0 N - D R IY0 - AA1 T - S IY0\nANDREPONT  AA0 N - D R EY1 - P OW0 N T\nANDRES  AA1 N - D R EY0 Z\nANDRES(2)  AE1 N - D R EY0 Z\nANDRESEN  AE0 N - D R IY1 - S AH0 N\nANDRESKI  AE0 N - D R EH1 S - K IY0\nANDRESS  AA1 N - D R EH0 S\nANDRETTI  AE2 N - D R EH1 - T IY0\nANDRETTI'S  AE2 N - D R EH1 - T IY0 Z\nANDREU  AE1 N - D R UW0\nANDREW  AE1 N - D R UW0\nANDREW'S  AE1 N - D R UW2 Z\nANDREWS  AE1 N - D R UW2 Z\nANDREWS'  AE1 N - D R UW2 Z\nANDREY  AE1 N - D R IY0\nANDREZAK  AE1 N - D R AH0 - Z AE0 K\nANDRIA  AE1 N - D R IY0 - AH0\nANDRIANA  AA0 N - D R IY0 - AE1 - N AH0\nANDRIANO  AA0 N - D R IY0 - AA1 - N OW0\nANDRIC  AE1 N - D R IH0 K\nANDRICH  AE1 N - D R IH0 K\nANDRICK  AE1 N - D R IH0 K\nANDRIES  AH0 N - D R IY1 Z\nANDRIESSEN  AE2 N - D R IY1 - S AH0 N\nANDRINGA  AA0 N - D R IY1 NG - G AH0\nANDRIOLA  AA0 N - D R IY0 - OW1 - L AH0\nANDRIST  AE1 N - D R IH0 S T\nANDROGYNOUS  AE0 N - D R AO1 - JH AH0 - N AH0 S\nANDROID  AE1 N - D R OY2 D\nANDROMEDA  AE0 N - D R AA1 - M AH0 - D AH0\nANDROPOV  AE0 N - D R AA1 - P AA2 V\nANDROS  AE1 N - D R AA0 S\nANDRUS  AE1 N - D R AH0 S\nANDRUSKEVICH  AE2 N - D R AH0 - S EH1 - V IH0 CH\nANDRY  AE1 N - D R IY0\nANDRZEJ  AA1 N - D R EY2\nANDRZEJEWSKI  AH0 N - JH EY0 - EH1 F S - K IY0\nANDS  AE1 N D Z\nANDUJAR  AA0 N - D UW0 - Y AA1 R\nANDY  AE1 N - D IY0\nANDY'S  AE1 N - D IY0 Z\nANECDOTAL  AE2 - N AH0 K - D OW1 - T AH0 L\nANECDOTAL(2)  AE2 - N IH0 K - D OW1 - T AH0 L\nANECDOTALLY  AE2 - N AH0 K - D OW1 - T AH0 L - IY0\nANECDOTALLY(2)  AE2 - N IH0 K - D OW1 - T AH0 L - IY0\nANECDOTE  AE1 - N AH0 K - D OW2 T\nANECDOTES  AE1 - N AH0 K - D OW2 T S\nANECDOTES(2)  AE1 - N IH0 K - D OW2 T S\nANELLO  AH0 N - EH1 - L OW0\nANEMIA  AH0 - N IY1 - M IY0 - AH0\nANEMIAS  AH0 - N IY1 - M IY0 - AH0 Z\nANEMIC  AH0 - N IY1 - M IH0 K\nANEMOMETER  AE2 - N AH0 - M AA1 - M AH0 - T ER0\nANEMONE  AE1 - N IH0 - M OW2 N\nANEMONE(2)  AH0 N - EH1 - M AH0 - N IY0\nANENCEPHALIC  AE0 - N EH2 N - S AH0 - F AE1 - L IH0 K\nANENCEPHALIC(2)  AE0 - N IH0 N - S EH1 - F AH0 - L IH0 K\nANENCEPHALY  AE0 - N IH0 N - S EH1 - F AH0 - L IY0\nANESTACHIO  AE2 - N IH0 - S T AE1 - CH IY0 - OW0\nANESTHESIA  AE2 - N IH0 S - TH IY1 - ZH AH0\nANESTHESIOLOGIST  AE2 - N AH0 S - TH IY2 - Z IY0 - AA1 - L AH0 - JH AH0 S T\nANESTHESIOLOGISTS  AE2 - N AH0 S - TH IY2 - Z IY0 - AA1 - L AH0 - JH AH0 S T S\nANESTHESIOLOGISTS(2)  AE2 - N AH0 S - TH IY2 - Z IY0 - AA1 - L AH0 - JH AH0 S S\nANESTHESIOLOGISTS(3)  AE2 - N AH0 S - TH IY2 - Z IY0 - AA1 - L AH0 - JH AH0 S\nANESTHESIOLOGY  AE2 - N AH0 S - TH IY0 - Z IY0 - AA1 - L AH0 - JH IY0\nANESTHETIC  AE2 - N AH0 S - TH EH1 - T IH0 K\nANESTHETICS  AE2 - N AH0 S - TH EH1 - T IH0 K S\nANESTHETIST  AH0 N - EH1 S - TH AH0 - T AH0 S T\nANETTE  AH0 N - EH1 T\nANEURISM  AE1 - N Y UH0 - R IH2 - Z AH0 M\nANEURISM(2)  AE1 - N Y UH0 - R IH2 Z M\nANEW  AH0 - N UW1\nANEW(2)  AH0 - N Y UW1\nANFAL  EY1 - EH1 - N EH1 - F EY1 - EH1 L\nANFAL(2)  AE1 N - F AA0 L\nANFINSON  AE1 N - F IH0 N - S AH0 N\nANG  AE1 NG\nANGE  EY1 N JH\nANGEL  EY1 N - JH AH0 L\nANGELA  AE1 N - JH AH0 - L AH0\nANGELA'S  AE1 N - JH AH0 - L AH0 Z\nANGELENO  AE2 N - JH AH0 - L EH1 - N OW0\nANGELENO(2)  AE2 N - JH AH0 - L IY1 - N OW0\nANGELENOS  AE2 N - JH AH0 - L EH1 - N OW0 Z\nANGELENOS(2)  AE2 N - JH AH0 - L IY1 - N OW0 Z\nANGELES  AE1 N - JH AH0 - L IH0 S\nANGELES'  AE1 N - JH AH0 - L IY2 Z\nANGELES'S  AE1 N - JH AH0 - L IH0 - S IH0 Z\nANGELETTI  AA0 NG - G EH0 - L EH1 - T IY0\nANGELFISH  EY1 N - JH AH0 L - F IH2 SH\nANGELI  AA0 NG - G EH1 - L IY0\nANGELIC  AE2 N - JH EH1 - L IH0 K\nANGELICA  AE0 N - JH EH1 - L IH0 - K AH0\nANGELICA(2)  AE1 N - JH AH0 - L IY2 - K AH0\nANGELICALLY  AE0 N - JH EH1 - L IH0 K - L IY0\nANGELICAS  AE0 N - JH EH1 - L IH0 - K AH0 Z\nANGELICO  AA0 NG - G EH0 - L IY1 - K OW0\nANGELIKA  AE0 N - JH EH1 - L IH2 - K AH0\nANGELILLO  AA0 NG - G EH0 - L IH1 - L OW0\nANGELINA  AE0 N - JH EH0 - L IY1 - N AH0\nANGELINE  EY1 NG - G IH0 - L AY0 N\nANGELINE(2)  AE1 N - JH AH0 - L IY0 N\nANGELINI  AA0 NG - G EH0 - L IY1 - N IY0\nANGELINO  AE2 N - JH AH0 - L IY1 - N OW0\nANGELINO'S  AE2 N - JH AH0 - L IY1 - N OW0 Z\nANGELINO'S(2)  AA2 NG - G EH0 - L IY1 - N OW0 Z\nANGELINO(2)  AA2 NG - G EH0 - L IY1 - N OW0\nANGELINOS  AE2 N - JH AH0 - L IY1 - N OW0 Z\nANGELINOS(2)  AE2 NG - G AH0 - L IY1 - N OW0 Z\nANGELITA  AA0 NG - G EH0 - L IY1 - T AH0\nANGELL  EY1 N - JH AH0 L\nANGELLE  EY0 NG - G EH1 L\nANGELLO  AE2 N - JH EH1 - L OW0\nANGELO  AE1 N - JH AH0 - L OW2\nANGELO'S  AE1 N - JH AH0 - L OW2 Z\nANGELOFF  EY1 NG - G IH0 - L AO0 F\nANGELOFF(2)  AE1 N - JH IH0 - L AO0 F\nANGELONE  AA0 NG - G EH0 - L OW1 - N IY0\nANGELONI  AA0 NG - G EH0 - L OW1 - N IY0\nANGELOS  AE1 N - JH AH0 - L OW2 Z\nANGELOU  AE1 N - JH AH0 - L UW2\nANGELOZ  AE1 N - JH AH0 - L OW2 Z\nANGELS  EY1 N - JH AH0 L Z\nANGELS'  EY1 N - JH AH0 L Z\nANGELUCCI  AA0 NG - G EH0 - L UW1 - CH IY0\nANGER  AE1 NG - G ER0\nANGERED  AE1 NG - G ER0 D\nANGERER  AE1 NG - G ER0 - ER0\nANGERING  AE1 NG - G ER0 - IH0 NG\nANGERMAN  AE1 - NG ER0 - M AH0 N\nANGERMEIER  EY1 NG - G ER0 - M AY0 - ER0\nANGERS  AE1 NG - G ER0 Z\nANGERT  EY1 NG - G ER0 T\nANGEVINE  EY1 NG - G IH0 - V AY0 N\nANGI  AE1 N - JH IY0\nANGIE  AE1 N - JH IY0\nANGIER  AE1 N - JH IY0 - ER0\nANGINA  AE0 N - JH AY1 - N AH0\nANGIO  AE1 N - JH IY0 - OW0\nANGIOGRAM  AE1 N - JH IY0 - OW0 - G R AE0 M\nANGIOMEDIC  AE2 N - JH IY0 - OW0 - M EH1 - D IH0 K\nANGIOMEDICS  AE2 N - JH IY0 - OW0 - M EH1 - D IH0 K S\nANGIOPLASTY  AE1 N - JH IY0 - AH0 - P L AE2 - S T IY0\nANGIOTENSIN  AE2 N - JH IY0 - OW0 - T EH1 N - S IH0 N\nANGLE  AE1 NG - G AH0 L\nANGLED  AE1 NG - G AH0 L D\nANGLEMYER  AE1 NG - G AH0 L - M AY0 - ER0\nANGLEN  AE1 NG - G AH0 - L AH0 N\nANGLER  AE1 NG - G L ER0\nANGLERS  AE1 NG - G L ER0 Z\nANGLES  AE1 NG - G AH0 L Z\nANGLETON  AE1 NG - G AH0 L - T AH0 N\nANGLEY  AE1 NG - G L IY0\nANGLIA  AE1 NG - G L IY0 - AH0\nANGLICAN  AE1 NG - G L AH0 - K AH0 N\nANGLICIZE  AE1 NG - L IH0 - S AY2 Z\nANGLICIZED  AE1 NG - L IH0 - S AY2 Z D\nANGLIM  AE1 NG - G L IH0 M\nANGLIN  AE1 NG - G L IH0 N\nANGLING  AE1 NG - G L IH0 NG\nANGLO  AE1 NG - G L OW0\nANGLO-CATHOLICISM  AE1 NG - G L OW0 - K AH0 - TH AO1 - L AH0 - S IH2 - Z AH0 M\nANGLOS  AE1 NG - G L OW0 Z\nANGLOS(2)  AE1 NG - G L OW0 S\nANGOLA  AE0 NG - G OW1 - L AH0\nANGOLA'S  AE0 NG - G OW1 - L AH0 Z\nANGOLAN  AE1 NG - G OW0 - L AH0 N\nANGOLANS  AE1 NG - G OW0 - L AH0 N Z\nANGORA  AE0 NG - G AO1 - R AH0\nANGORAS  AE0 NG - G AO1 - R AH0 Z\nANGOTTI  AA0 NG - G OW1 - T IY0\nANGOVE  AA0 NG - G OW1 - V IY0\nANGRIER  AE1 NG - G R IY0 - ER0\nANGRIEST  AE1 NG - G R IY0 - AH0 S T\nANGRILY  AE1 NG - G R AH0 - L IY0\nANGRY  AE1 NG - G R IY0\nANGST  AA1 NG K S T\nANGSTADT  AE1 NG SH - T AE0 T\nANGSTADT(2)  AE1 NG - S T AE0 T\nANGSTROM  AE1 NG - S T R AH0 M\nANGSTROMS  AE1 NG - S T R AH0 M Z\nANGUIANO  AA0 NG - G IY0 - AA1 - N OW0\nANGUILLA  AE2 NG - W IH1 - L AH0\nANGUISH  AE1 NG - G W IH0 SH\nANGUISHED  AE1 NG - G W IH0 SH T\nANGUISHING  AE1 NG - G W IH0 - SH IH0 NG\nANGULAR  AE1 NG - G Y AH0 - L ER0\nANGULATE  AE1 NG - G Y UW0 - L EY2 T\nANGULATED  AE1 NG - G Y UW0 - L EY2 - T IH0 D\nANGULO  AA0 NG - G UW1 - L OW0\nANGUS  AE1 NG - G AH0 S\nANGY  AE1 N - JH IY0\nANHALT  AE1 N - HH AH0 L T\nANHEUSER  AE1 N - HH AY2 - Z ER0\nANHEUSER'S  AE2 N - HH Y UW1 - Z ER0 Z\nANHYDRIDE  AE0 N - HH AY1 - D R IH0 D\nANIBAL  AE1 - N IH0 - B AH0 L\nANIKST  AE1 - N IH0 K S T\nANILINE  AE1 - N AH0 - L IY2 N\nANIMAL  AE1 - N AH0 - M AH0 L\nANIMAL'S  AE1 - N AH0 - M AH0 L Z\nANIMALS  AE1 - N AH0 - M AH0 L Z\nANIMALS'  AE1 - N AH0 - M AH0 L Z\nANIMATE  AE1 - N AH0 - M AH0 T\nANIMATE(2)  AE1 - N AH0 - M EY2 T\nANIMATED  AE1 - N AH0 - M EY2 - T AH0 D\nANIMATED(2)  AE1 - N AH0 - M EY2 - T IH0 D\nANIMATES  AE1 - N AH0 - M AH0 T S\nANIMATES(2)  AE1 - N AH0 - M EY2 T S\nANIMATION  AE2 - N AH0 - M EY1 - SH AH0 N\nANIMATIONS  AE2 - N AH0 - M EY1 - SH AH0 N Z\nANIMATOR  AE1 - N AH0 - M EY2 - T ER0\nANIMATORS  AE1 - N AH0 - M EY2 - T ER0 Z\nANIMISM  AE1 - N AH0 - M IH2 - Z AH0 M\nANIMIST  AE1 - N AH0 - M AH0 S T\nANIMISTS  AE1 - N AH0 - M AH0 S T S\nANIMISTS(2)  AE1 - N AH0 - M AH0 S S\nANIMISTS(3)  AE1 - N AH0 - M AH0 S\nANIMOSITIES  AE2 - N AH0 - M AA1 - S AH0 - T IY0 Z\nANIMOSITY  AE2 - N AH0 - M AA1 - S AH0 - T IY0\nANIMOUS  AE1 - N IH0 - M AH0 S\nANIMUS  AE1 - N IH0 - M AH0 S\nANINAT  AE1 - N IH0 - N AE0 T\nANISE  AE1 - N AH0 S\nANISEED  AE1 - N AH0 - S IY2 D\nANISETTE  AE2 - N AH0 - S EH1 T\nANITA  AH0 N - IY1 - T AH0\nANITEC  AE1 - N IH0 - T EH2 K\nANITOLE  AE1 - N IH0 - T OW0 L\nANIXTER  AE1 - N IH0 K - S T ER0\nANJA  AA1 N - JH AH0\nANJELICA  AE0 N - JH EH1 - L AH0 - K AH0\nANKARA  AE1 NG - K ER0 - AH0\nANKARA'S  AE1 NG - K ER0 - AH0 Z\nANKENEY  AH0 NG - K EH1 - N IY0\nANKENY  AH0 NG - K IY1 - N IY0\nANKER  AE1 NG - K ER0\nANKERIUM  AE0 NG - K ER1 - IY0 - AH0 M\nANKLAM  AE1 NG - K L AH0 M\nANKLE  AE1 NG - K AH0 L\nANKLEBONE  AE1 NG - K AH0 L - B OW2 N\nANKLES  AE1 NG - K AH0 L Z\nANKLET  AE1 NG - K L IH0 T\nANKLETS  AE1 NG - K L AH0 T S\nANKNEY  AE1 NG K - N IY0\nANKROM  AE1 NG - K R AH0 M\nANKRUM  AE1 NG - K R AH0 M\nANN  AE1 N\nANN'S  AE1 N Z\nANNA  AE1 - N AH0\nANNA'S  AE1 - N AH0 Z\nANNABEL  AE1 - N AH0 - B EH2 L\nANNABELLA  AE2 - N AH0 - B EH1 - L AH0\nANNABELLE  AE1 - N AH0 - B AH0 L\nANNABLE  AE1 - N AH0 - B AH0 L\nANNAL  AE1 - N AH0 L\nANNALS  AE1 - N AH0 L Z\nANNAMESE  AE2 - N AH0 - M IY1 Z\nANNAN  AE1 - N AH0 N\nANNANDALE  AE1 - N AH0 N - D EY2 L\nANNAPOLIS  AH0 N - AE1 - P AH0 - L IH0 S\nANNAPOLIS'S  AH0 N - AE1 - P AH0 - L IH0 - S IH0 Z\nANNAS  AE1 - N AH0 Z\nANNE  AE1 N\nANNE'S  AE1 N Z\nANNEAL  AH0 - N IY1 L\nANNEALING  AH0 - N IY1 - L IH0 NG\nANNELID  AE1 - N AH0 - L IH0 D\nANNELIDS  AE1 - N AH0 - L IH0 D Z\nANNEN  AE1 - N AH0 N\nANNENBERG  AE1 - N AH0 N - B ER0 G\nANNESE  AA0 - N EY1 - Z IY0\nANNETT  AH0 N - EH1 T\nANNETTE  AH0 N - EH1 T\nANNEX  AE1 - N EH2 K S\nANNEX(2)  AH0 - N EH1 K S\nANNEXATION  AE2 - N EH0 K - S EY1 - SH AH0 N\nANNEXED  AE1 - N EH0 K S T\nANNEXED(2)  AH0 - N EH1 K S T\nANNEXES  AE1 - N EH2 K - S IH0 Z\nANNEXING  AH0 - N EH1 K - S IH0 NG\nANNICK  AE1 - N IH0 K\nANNIE  AE1 - N IY0\nANNIE'S  AE1 - N IY2 Z\nANNIHILATE  AH0 - N AY1 - AH0 - L EY2 T\nANNIHILATED  AH0 - N AY1 - AH0 - L EY2 - T IH0 D\nANNIHILATION  AH0 - N AY2 - AH0 - L EY1 - SH AH0 N\nANNIS  AE1 - N IY0 Z\nANNISTON  AE1 - N IH0 - S T IH0 N\nANNISTON(2)  AE1 - N IH0 - S IH0 N\nANNIVERSARIES  AE2 - N AH0 - V ER1 - S ER0 - IY0 Z\nANNIVERSARY  AE2 - N AH0 - V ER1 - S ER0 - IY0\nANNO  AE1 - N OW0\nANNOTATE  AE1 - N AH0 - T EY2 T\nANNOTATED  AE2 - N AH0 - T EY1 - T IH0 D\nANNOTATED(2)  AE1 - N AH0 - T EY2 - T AH0 D\nANNOTATES  AE2 - N AH0 - T EY1 T S\nANNOTATES(2)  AE1 - N AH0 - T EY2 T S\nANNOTATING  AE2 - N AH0 - T EY1 - T IH0 NG\nANNOTATING(2)  AE1 - N AH0 - T EY2 - T IH0 NG\nANNOTATION  AE2 - N AH0 - T EY1 - SH AH0 N\nANNOTATIONS  AE2 - N AH0 - T EY1 - SH AH0 N Z\nANNOUNCE  AH0 - N AW1 N S\nANNOUNCED  AH0 - N AW1 N S T\nANNOUNCEMENT  AH0 - N AW1 N - S M AH0 N T\nANNOUNCEMENT(2)  AH0 - N AW1 N - S M EH0 N T\nANNOUNCEMENTS  AH0 - N AW1 N - S M AH0 N T S\nANNOUNCER  AH0 - N AW1 N - S ER0\nANNOUNCERS  AH0 - N AW1 N - S ER0 Z\nANNOUNCES  AH0 - N AW1 N - S IH0 Z\nANNOUNCING  AH0 - N AW1 N - S IH0 NG\nANNOUNCMENT  AH0 - N AW1 N - S M AH0 N T\nANNOY  AH0 - N OY1\nANNOYANCE  AH0 - N OY1 - AH0 N S\nANNOYANCES  AH0 - N OY1 - AH0 N - S IH0 Z\nANNOYED  AH0 - N OY1 D\nANNOYING  AH0 - N OY1 - IH0 NG\nANNOYS  AH0 - N OY1 Z\nANNUAL  AE1 - N Y UW0 - AH0 L\nANNUALIZE  AE1 - N Y UW0 - W AH0 - L AY2 Z\nANNUALIZED  AE1 - N Y UW0 - W AH0 - L AY2 Z D\nANNUALLY  AE1 - N Y UW0 - AH0 - L IY0\nANNUALS  AE1 - N UW0 - AH0 L Z\nANNUITIES  AH0 - N UW1 - IH0 - T IY0 Z\nANNUITY  AH0 - N UW1 - AH0 - T IY0\nANNUITY(2)  AH0 - N UW1 - IH0 - T IY0\nANNUITY(3)  AH0 N - Y UW1 - IH0 - T IY0\nANNUL  AE1 - N AH0 L\nANNULAR  AE1 - N Y AH0 - L ER0\nANNULLED  AE1 - N AH0 L D\nANNULMENT  AE1 - N AH0 L - M AH0 N T\nANNUM  AE1 - N AH0 M\nANNUNCIATA  AA0 - N UW0 N - CH AA1 - T AH0\nANNUNZIATA  AA0 - N UW0 N - Z IY0 - AA1 - T AH0\nANNUNZIATO  AA0 - N UW0 N - Z IY0 - AA1 - T OW0\nANNUNZIO  AH0 N - AH1 N - Z IY0 - OW0\nANNUNZIO(2)  AH0 - N UW1 N - Z IY0 - OW0\nANNY  AE1 - N IY0\nANODE  AE1 - N OW2 D\nANODES  AE1 - N OW2 D Z\nANOINT  AH0 - N OY1 N T\nANOINTED  AH0 - N OY1 N - T AH0 D\nANOINTED(2)  AH0 - N OY1 N - T IH0 D\nANOINTED(3)  AH0 - N OY1 - N AH0 D\nANOINTED(4)  AH0 - N OY1 - N IH0 D\nANOMALIES  AH0 - N AA1 - M AH0 - L IY0 Z\nANOMALOUS  AH0 - N AA1 - M AH0 - L AH0 S\nANOMALY  AH0 - N AA1 - M AH0 - L IY0\nANOMIE  AE1 - N AH0 - M IY0\nANONA  AA0 - N OW1 - N AH0\nANONYMITY  AE2 - N AH0 - N IH1 - M IH0 - T IY0\nANONYMOUS  AH0 - N AA1 - N AH0 - M AH0 S\nANONYMOUSLY  AH0 - N AA1 - N AH0 - M AH0 S - L IY0\nANORA  AA0 - N AO1 - R AH0\nANORAK  AE1 - N ER0 - AE2 K\nANOREXIA  AE2 - N ER0 - EH1 K - S IY0 - AH0\nANOREXIC  AE2 - N ER0 - EH1 K - S IH0 K\nANOREXICS  AE2 - N ER0 - EH1 K - S IH0 K S\nANORTHITE  AE0 - N AO1 R - TH AY2 T\nANOTHER  AH0 - N AH1 - DH ER0\nANOTHER'S  AH0 - N AH1 - DH ER0 Z\nANREDER  AE1 N - R EH2 - D ER0\nANRIG  AE1 N - R IH0 G\nANSA  AE1 N - S AH0\nANSA'S  AE1 N - S AH0 Z\nANSAID  AE1 N - S EY2 D\nANSALDO  AE0 N - S AA1 L - D OW0\nANSANG  AE1 N - S AE0 NG\nANSARI  AA0 N - S AA1 - R IY0\nANSBACHER  AE1 N Z - B AA2 - K ER0\nANSCHEL  AE1 N - SH AH0 L\nANSCHLUSS  AE1 N SH - L AH0 S\nANSCHLUSS(2)  AA1 N SH - L UW0 S\nANSCHUTZ  AE1 N - SH AH0 T S\nANSCOM  AH0 N - S K AA1 M\nANSCOMB  AH0 N - S K AA1 M\nANSE  AE1 N S\nANSEL  AH0 N - S EH1 L\nANSELL  AE1 N - S EH2 L\nANSELM  AE1 N - S EH0 L M\nANSELMA  AA0 N - S EH1 L - M AH0\nANSELMI  AA0 N - S EH1 L - M IY0\nANSELMO  AA0 N - S EH1 L - M OW0\nANSETT  AE1 N - S EH2 T\nANSGAR  AE1 N S - G AA0 R\nANSGAR'S  AE1 N S - G AA0 R Z\nANSHAN  AE1 N - SH AH0 N\nANSIN  AE1 N - S IH0 N\nANSLEY  AE1 N S - L IY0\nANSON  AE1 N - S AH0 N\nANSONIA  AE0 N - S OW1 - N IY0 - AH0\nANSPACH  AE1 N - S P AA2 K\nANSPAUGH  AH0 N - S P AO1\nANSTEAD  AE1 N - S T EH2 D\nANSTETT  AH0 N - S T EH1 T\nANSTEY  AE1 N - S T IY0\nANSTICE  AA1 N - S T IH0 S\nANSTINE  AA0 N - S T IY1 - N IY0\nANSTISS  AE1 N - S T IH0 S\nANSWER  AE1 N - S ER0\nANSWER'S  AE1 N - S ER0 Z\nANSWERABLE  AE1 N - S ER0 - AH0 - B AH0 L\nANSWERED  AE1 N - S ER0 D\nANSWERING  AE1 N - S ER0 - IH0 NG\nANSWERS  AE1 N - S ER0 Z\nANT  AE1 N T\nANTACID  AE0 N - T AE1 - S AH0 D\nANTACIDS  AE0 N - T AE1 - S AH0 D Z\nANTAGONISM  AE0 N - T AE1 - G AH0 - N IH2 - Z AH0 M\nANTAGONISMS  AE0 N - T AE1 - G AH0 - N IH2 - Z AH0 M Z\nANTAGONIST  AE0 N - T AE1 - G AH0 - N AH0 S T\nANTAGONISTIC  AE0 N - T AE2 - G AH0 - N IH1 - S T IH0 K\nANTAGONISTS  AE0 N - T AE1 - G AH0 - N AH0 S T S\nANTAGONISTS(2)  AE0 N - T AE1 - G AH0 - N AH0 S S\nANTAGONISTS(3)  AE0 N - T AE1 - G AH0 - N AH0 S\nANTAGONIZE  AE0 N - T AE1 - G AH0 - N AY2 Z\nANTAGONIZED  AE0 N - T AE1 - G AH0 - N AY2 Z D\nANTAGONIZING  AE0 N - T AE1 - G AH0 - N AY2 - Z IH0 NG\nANTAL  AE1 N - T AH0 L\nANTAR  AE1 N - T ER0\nANTAR'S  AE1 N - T ER0 Z\nANTARCTIC  AE0 N - T AA1 R K - T IH0 K\nANTARCTIC(2)  AE0 - N AA1 R - T IH0 K\nANTARCTICA  AE2 N - T AA1 R K - T IH0 - K AH0\nANTARCTICA'S  AE2 N - T AA1 R K - T IH0 - K AH0 Z\nANTARCTICA(2)  AE2 - N AA1 R - T IH0 - K AH0\nANTARES  AE0 N - T EH1 - R IY0 Z\nANTAYA  AA0 N - T EY1 - AH0\nANTCZAK  AE1 N T - CH AE0 K\nANTE  AE1 N - T IY0\nANTEATER  AE1 N T - IY2 - T ER0\nANTEATERS  AE1 N T - IY2 - T ER0 Z\nANTEBELLUM  AE2 N - T IH0 - B EH1 - L AH0 M\nANTEC  AE1 N - T EH2 K\nANTECEDENT  AE2 N - T EH1 - S AH0 - D AH0 N T\nANTECEDENT(2)  AE2 N - T IH0 - S IY1 - D AH0 N T\nANTECEDENTS  AE2 N - T IH0 - S IY1 - D AH0 N T S\nANTECEDENTS(2)  AE2 N - T EH1 - S AH0 - D AH0 N T S\nANTED  AE1 N - T IH0 D\nANTED(2)  AE1 N - T IY0 D\nANTELL  AE0 N - T EH1 L\nANTELOPE  AE1 N - T AH0 - L OW2 P\nANTEMERIDIAN  AE2 N - T AH0 - M EH0 - R IH1 - D IY0 - AH0 N\nANTEMORTEM  AE0 N - T AH0 - M AO1 R - T AH0 M\nANTENNA  AE0 N - T EH1 - N AH0\nANTENNA'S  AE0 N - T EH1 - N AH0 Z\nANTENNAE  AE0 N - T EH1 - N IY0\nANTENNAS  AE0 N - T EH1 - N AH0 Z\nANTENNE  AE0 N - T EH1 N\nANTENUCCI  AE0 N - T IH0 - N UW1 - CH IY0\nANTERIOR  AE0 N - T IH1 - R IY0 - ER0\nANTERIORMOST  AE0 N - T IH1 - R IY0 - ER0 - M OW2 S T\nANTES  AE1 N - T IY0 Z\nANTHEA  AE1 N - TH IY0 - AH0\nANTHEM  AE1 N - TH AH0 M\nANTHEMS  AE1 N - TH AH0 M Z\nANTHES  AE1 N - DH AH0 Z\nANTHIEL  AE1 N - TH IY0 - AH0 L\nANTHILL  AE1 N T - HH IH2 L\nANTHILLS  AE1 N T - HH IH2 L Z\nANTHIS  AE1 N - TH IH0 S\nANTHOLOGIES  AE0 N - TH AA1 - L AH0 - JH IY0 Z\nANTHOLOGY  AE0 N - TH AA1 - L AH0 - JH IY0\nANTHON  AE1 N - TH AH0 N\nANTHONY  AE1 N - TH AH0 - N IY0\nANTHONY'S  AE1 N - TH AH0 - N IY0 Z\nANTHRACITE  AE1 N - TH R AH0 - S AY2 T\nANTHRAX  AE1 N - TH R AE0 K S\nANTHROBOT  AE1 N - TH R OW0 - B AH2 T\nANTHROPOCENTRIC  AE2 N - TH R AH0 - P AH0 - S EH1 N - T R IH0 K\nANTHROPOLOGICAL  AE2 N - TH R AH0 - P AH0 - L AA1 - JH AH0 - K AH0 L\nANTHROPOLOGIST  AE2 N - TH R AH0 - P AA1 - L AH0 - JH AH0 S T\nANTHROPOLOGIST(2)  AE2 N - TH R AH0 - P AA1 - L AH0 - JH IH0 S T\nANTHROPOLOGISTS  AE2 N - TH R AH0 - P AA1 - L AH0 - JH AH0 S T S\nANTHROPOLOGISTS(2)  AE2 N - TH R AH0 - P AA1 - L AH0 - JH IH0 S T S\nANTHROPOLOGISTS(3)  AE2 N - TH R AH0 - P AA1 - L AH0 - JH IH0 S S\nANTHROPOLOGISTS(4)  AE2 N - TH R AH0 - P AA1 - L AH0 - JH IH0 S\nANTHROPOLOGY  AE2 N - TH R AH0 - P AA1 - L AH0 - JH IY0\nANTHROPOMORPHIC  AE2 N - TH R AH0 - P AH0 - M AO1 R - F IH0 K\nANTI  AE1 N - T IY0\nANTI(2)  AE1 N - T AY0\nANTI-CATHOLICISM  AE1 N - T IY0 - K AH0 - TH AO1 - L AH0 - S IH2 - Z AH0 M\nANTI-CATHOLICISM(2)  AE1 N - T AY0 - K AH0 - TH AO1 - L AH0 - S IH2 - Z AH0 M\nANTI-FEDERALIST  AE2 N - T IY0 - F EH1 - D R AH0 - L IH0 S T\nANTI-FEDERALISTS  AE2 N - T IY0 - F EH1 - D R AH0 - L AH0 S T S\nANTI-FEDERALISTS(2)  AE2 N - T IY0 - F EH1 - D R AH0 - L AH0 S S\nANTI-FEDERALISTS(3)  AE2 N - T IY0 - F EH1 - D R AH0 - L AH0 S\nANTI-INFECTIVE  AE1 N - T IY0 - IH0 N - F EH1 K - T IH0 V\nANTIABORTION  AE1 N - T IY0 - AH0 - B AO1 R - SH AH0 N\nANTIABORTION(2)  AE1 N - T AY0 - AH0 - B AO1 R - SH AH0 N\nANTIAIRCRAFT  AE2 N - T AY0 - EH1 R - K R AE2 F T\nANTIBACTERIAL  AE2 N - T IY0 - B AE0 K - T IH1 - R IY0 - AH0 L\nANTIBALLISTIC  AE2 N - T IY0 - B AH0 - L IH1 - S T IH0 K\nANTIBIOTIC  AE2 N - T IY0 - B IY0 - AA1 - T IH0 K\nANTIBIOTIC(2)  AE2 N - T AY0 - B AY0 - AA1 - T IH0 K\nANTIBIOTICOS  AE2 N - T IY0 - B IY0 - AA1 - T IH0 - K OW0 S\nANTIBIOTICS  AE2 N - T IY0 - B IY0 - AA1 - T IH0 K S\nANTIBIOTICS(2)  AE2 N - T AY0 - B AY0 - AA1 - T IH0 K S\nANTIBODIES  AE1 N - T IH0 - B AA2 - D IY0 Z\nANTIBODIES(2)  AE1 N - T IY0 - B AA2 - D IY0 Z\nANTIBODIES(3)  AE1 - N IH0 - B AA2 - D IY0 Z\nANTIBODY  AE1 N - T IH0 - B AA2 - D IY0\nANTIBODY(2)  AE1 N - T IY0 - B AA2 - D IY0\nANTIC  AE1 N - T IH0 K\nANTICANCER  AE2 N - T AY2 - K AE1 N - S ER0\nANTICANCER(2)  AE2 N - T IY2 - K AE1 N - S ER0\nANTICIPATE  AE0 N - T IH1 - S AH0 - P EY2 T\nANTICIPATED  AE0 N - T IH1 - S AH0 - P EY2 - T AH0 D\nANTICIPATED(2)  AE0 N - T IH1 - S AH0 - P EY2 - T IH0 D\nANTICIPATES  AE0 N - T IH1 - S AH0 - P EY2 T S\nANTICIPATING  AE0 N - T IH1 - S AH0 - P EY2 - T IH0 NG\nANTICIPATION  AE0 N - T IH2 - S AH0 - P EY1 - SH AH0 N\nANTICIPATION(2)  AE0 N - T IH0 - S AH0 - P EY1 - SH AH0 N\nANTICIPATIONS  AE0 N - T IH2 - S AH0 - P EY1 - SH AH0 N Z\nANTICIPATIONS(2)  AE0 N - T IH0 - S AH0 - P EY1 - SH AH0 N Z\nANTICIPATORY  AE0 N - T IH1 - S AH0 - P AH0 - T AO2 - R IY0\nANTICLIMACTIC  AE2 N - T IY0 - K L AY0 - M AE1 K - T IH0 K\nANTICLINE  AE1 N - T IH0 - K L AY2 N\nANTICO  AA0 N - T IY1 - K OW0\nANTICOMMUNIST  AE2 N - T IY0 - K AA1 - M Y AH0 - N IH0 S T\nANTICOMPETITIVE  AE2 N - T IH0 - K AH0 M - P EH1 - T IH0 - T IH0 V\nANTICORRUPTION  AE2 N - T AY2 - K ER0 - AH1 P - SH AH0 N\nANTICORRUPTION(2)  AE2 N - T IY2 - K ER0 - AH1 P - SH AH0 N\nANTICRIME  AE1 N - T IY0 - K R AY1 M\nANTICRIME(2)  AE1 N - T AY0 - K R AY1 M\nANTICS  AE1 N - T IH0 K S\nANTIDEPRESSANT  AE2 N - T IY0 - D IH0 - P R EH1 - S AH0 N T\nANTIDEPRESSANTS  AE2 N - T AY2 - D IH0 - P R EH1 - S AH0 N T S\nANTIDEPRESSANTS(2)  AE2 N - T IY2 - D IH0 - P R EH1 - S AH0 N T S\nANTIDISCRIMINATION  AE2 N - T IY0 - D IH0 - S K R IH2 - M AH0 - N EY1 - SH AH0 N\nANTIDISCRIMINATION(2)  AE2 N - T AY0 - D IH0 - S K R IH2 - M AH0 - N EY1 - SH AH0 N\nANTIDOTE  AE1 N - T IH0 - D OW2 T\nANTIDOTE(2)  AE1 - N IH0 - D OW2 T\nANTIDRUG  AE2 N - T IH0 - D R AH1 G\nANTIDUMPING  AE2 N - T IY0 - D AH1 M - P IH0 NG\nANTIDUMPING(2)  AE2 N - T AY0 - D AH1 M - P IH0 NG\nANTIFRAUD  AE1 N - T IY0 - F R AA2 D\nANTIFRAUD(2)  AE1 N - T AY0 - F R AA2 D\nANTIFREEZE  AE1 N - T IY0 - F R IY2 Z\nANTIFUNGAL  AE2 N - T AY2 - F AH1 NG - G AH0 L\nANTIFUNGAL(2)  AE2 N - T IY2 - F AH1 NG - G AH0 L\nANTIGAY  AE2 N - T AY2 - G EY1\nANTIGAY(2)  AE2 N - T IY2 - G EY1\nANTIGEN  AE1 N - T AH0 - JH AH0 N\nANTIGENS  AE1 N - T IH0 - JH AH0 N Z\nANTIGONE  AE0 - T IH1 - G AH0 - N IY0\nANTIGONE'S  AE0 N - T IH1 - G AH0 - N IY2 Z\nANTIGONES  AE0 N - T IH1 - G AH0 - N IY2 Z\nANTIGOVERNMENT  AE2 N - T IY0 - G AH1 - V ER0 - M AH0 N T\nANTIGOVERNMENT(2)  AE2 N - T AY0 - G AH1 - V ER0 - M AH0 N T\nANTIGUA  AE0 N - T IY1 - G W AH0\nANTIHISTAMINE  AE2 N - T IY0 - HH IH1 - S T AH0 - M AH0 N\nANTIHISTAMINES  AE2 N - T IY0 - HH IH1 - S T AH0 - M AH0 N Z\nANTIKNOCK  AE2 N - T IY0 - N AA1 K\nANTILL  AE0 N - T IH1 L\nANTILLA  AA0 N - T IH1 - L AH0\nANTILLES  AE0 N - T IH1 - L IY0 Z\nANTILOCK  AE1 N - T IY0 - L AA1 K\nANTILOCK(2)  AE1 N - T AY0 - L AA1 K\nANTIMISSILE  AE2 N - T AY2 - M IH1 - S AH0 L\nANTIOCH  AE1 N - T IY0 - AA2 K\nANTIOXIDANT  AE2 N - T IY0 - AA1 K - S AH0 - D AH0 N T\nANTIOXIDANTS  AE2 N - T IY0 - AA1 K - S AH0 - D AH0 N T S\nANTIPATHIES  AE0 N - T IH1 - P AH0 - TH IY0 Z\nANTIPATHY  AE0 N - T IH1 - P AH0 - TH IY0\nANTIPERSONELL  AE0 N - T AY2 - P ER0 - S AH0 - N EH1 L\nANTIPHON  AE1 N - T AH0 - F AA2 N\nANTIPHON(2)  AE1 N - T IH0 - F AA2 N\nANTIPHONS  AE1 N - T AH0 - F AA2 N Z\nANTIPHONS(2)  AE1 N - T IH0 - F AA2 N Z\nANTIPODAL  AE0 N - T IH1 - P AH0 - D AH0 L\nANTIPOVERTY  AE2 N - T AY0 - P AA1 - V ER0 - T IY0\nANTIPOVERTY(2)  AE2 N - T IY0 - P AA1 - V ER0 - T IY0\nANTIQUATE  AE1 N - T AH0 - K W EY2 T\nANTIQUATED  AE1 N - T AH0 - K W EY2 - T AH0 D\nANTIQUATED(2)  AE1 N - T AH0 - K W EY2 - T IH0 D\nANTIQUE  AE0 N - T IY1 K\nANTIQUES  AE0 N - T IY1 K S\nANTIQUITIES  AE0 N - T IH1 - K W AH0 - T IY0 Z\nANTIQUITY  AE0 N - T IH1 - K W AH0 - T IY0\nANTIREFORMER  AE2 N - T IY0 - R IH0 - F AO1 R - M ER0\nANTIREFORMER(2)  AE2 N - T AY0 - R IH0 - F AO1 R - M ER0\nANTIREFORMERS  AE2 N - T IY0 - R IH0 - F AO1 R - M ER0 Z\nANTIREFORMERS(2)  AE2 N - T AY0 - R IH0 - F AO1 R - M ER0 Z\nANTIS  AE1 N - T AY0 Z\nANTISENSE  AE1 N - T IY0 - S EH2 N S\nANTISENSE(2)  AE1 N - T AY0 - S EH2 N S\nANTISEPTIC  AE2 N - T AH0 - S EH1 P - T IH0 K\nANTISMOKING  AE1 N - T IY0 S - M OW1 - K IH0 NG\nANTISMOKING(2)  AE1 N - T AY0 S - M OW1 - K IH0 NG\nANTISOCIAL  AE2 N - T IH0 - S OW1 - SH AH0 L\nANTISOCIAL(2)  AE2 N - T AY0 - S OW1 - SH AH0 L\nANTISUBMARINE  AE2 N - T IH0 - S AH1 B - M ER0 - IY2 N\nANTISUBMARINE(2)  AE2 N - T AY0 - S AH1 B - M ER0 - IY2 N\nANTITAKEOVER  AE2 N - T IY0 - T EY1 K - OW2 - V ER0\nANTITANK  AE2 N - T IY0 - T AE1 NG K\nANTITAX  AE2 N - T AY2 - T AE1 K S\nANTITAX(2)  AE2 N - T IY2 - T AE1 K S\nANTITHEFT  AE2 N - T AY2 - TH EH1 F T\nANTITHEFT(2)  AE2 N - T IY2 - TH EH1 F T\nANTITHESIS  AE0 N - T IH1 - TH AH0 - S AH0 S\nANTITHETICAL  AE2 N - T AH0 - TH EH1 - T IH0 - K AH0 L\nANTITOXIN  AE2 N - T IY0 - T AA1 K - S AH0 N\nANTITOXINS  AE2 N - T IY0 - T AA1 K - S AH0 N Z\nANTITRUST  AE2 N - T AY0 - T R AH1 S T\nANTIVIRAL  AE2 N - T IY0 - V AY1 - R AH0 L\nANTIWAR  AE2 N - T AY0 - W AO1 R\nANTIWAR(2)  AE2 N - T IY0 - W AO1 R\nANTKOWIAK  AH0 N T - K AW1 - IY0 - AE0 K\nANTLE  AE1 N - T AH0 L\nANTLER  AE1 N T - L ER0\nANTLERED  AE1 N T - L ER0 D\nANTLERS  AE1 N T - L ER0 Z\nANTLEY  AE1 N T - L IY0\nANTOINE  AA0 N T - W AA1 N\nANTOINETTE  AE2 N - T W AH0 - N EH1 T\nANTOL  AA0 N - T AO1 L\nANTOLIK  AE1 N - T AH0 - L IH0 K\nANTOLINI  AE2 N - T OW0 - L IY1 - N IY0\nANTON  AE1 N - T AO2 N\nANTONACCI  AA0 N - T OW0 - N AA1 - CH IY0\nANTONE  AA0 N - T OW1 - N IY0\nANTONELLI  AA0 N - T OW0 - N EH1 - L IY0\nANTONELLIS  AE0 N - T AH0 - N EH1 - L IH0 S\nANTONETTI  AA0 N - T OW0 - N EH1 - T IY0\nANTONI  AA0 N - T OW1 - N IY0\nANTONIA  AE0 N - T OW1 - N IY0 - AH0\nANTONIN  AE1 N - T AH0 - N IH0 N\nANTONINI  AA0 N - T OW0 - N IY1 - N IY0\nANTONINI'S  AA0 N - T OW0 - N IY1 - N IY0 Z\nANTONIO  AE0 N - T OW1 - N IY0 - OW0\nANTONIO'S  AE0 N - T OW1 - N IY0 - OW2 Z\nANTONIOU  AA0 N - T OW0 - N IY1 - UW0\nANTONIU  AE2 N - T OW1 - N IY0 - UW0\nANTONIU'S  AE0 N - T OW1 - N IY0 - UW0 Z\nANTONIUS  AE0 N - T OW1 - N IY0 - AH0 S\nANTONOPOULOS  AE0 N - T AH0 - N AA1 - P AH0 - L IH0 S\nANTONOVICH  AE2 N - T AA1 - N AH0 - V IH0 CH\nANTONSEN  AH0 N - T AA1 N - S AH0 N\nANTONSON  AE1 N - T AH0 N - S AH0 N\nANTONUCCI  AA0 N - T OW0 - N UW1 - CH IY0\nANTONY  AE1 N - T AH0 - N IY0\nANTOON  AE2 N - T UW1 N\nANTOS  AA1 N - T OW0 Z\nANTOSH  AH0 N - T AA1 SH\nANTRIL  AE1 N - T R IH0 L\nANTRIM  AE1 N - T R IH0 M\nANTROBUS  AE1 N - T R AH0 - B IH0 S\nANTS  AE1 N T S\nANTSY  AE1 N T - S IY0\nANTTILA  AA0 N - T IY1 - L AH0\nANTUNA  AA0 N - T UW1 - N AH0\nANTUNES  AA0 N - T UW1 - N EH0 S\nANTUNEZ  AA0 N - T UW1 - N EH0 Z\nANTWERP  AE1 N T - W ER0 P\nANTWINE  AE1 N - T W AY2 N\nANVIL  AE1 N - V AH0 L\nANWAR  AE1 N - W AA0 R\nANWAR(2)  AA1 N - W AA0 R\nANWAY  AH0 N - W EY1\nANWELL  AH0 N - W EH1 L\nANWYL  AE1 N - W IH0 L\nANWYLL  AE1 N - W IH0 L\nANXIETIES  AE0 NG - Z AY1 - AH0 - T IY0 Z\nANXIETY  AE0 NG - Z AY1 - AH0 - T IY0\nANXIOUS  AE1 NG K - SH AH0 S\nANXIOUS(2)  AE1 NG - SH AH0 S\nANXIOUSLY  AE1 NG K - SH AH0 S - L IY0\nANY  EH1 - N IY0\nANYBODY  EH1 - N IY0 - B AH0 - D IY0\nANYBODY'S  EH1 - N IY0 - B AH0 - D IY0 Z\nANYHOW  EH1 - N IY0 - HH AW2\nANYMORE  EH2 - N IY0 - M AO1 R\nANYON  EH1 - N IY0 - AA0 N\nANYONE  EH1 - N IY0 - W AH2 N\nANYONE'S  EH1 - N IY0 - W AH2 N Z\nANYONE(2)  EH1 - N IY0 - W AH0 N\nANYPLACE  EH1 - N IY0 - P L EY2 S\nANYTHING  EH1 - N IY0 - TH IH2 NG\nANYTHING'S  EH1 - N IY0 - TH IH2 NG Z\nANYTIME  EH1 - N IY0 - T AY2 M\nANYWAY  EH1 - N IY0 - W EY2\nANYWAYS  EH1 - N IY0 - W EY2 Z\nANYWHERE  EH1 - N IY0 - W EH2 R\nANYWHERE(2)  EH1 - N IY0 HH - W EH2 R\nANZA  AE1 N - Z AH0\nANZALDUA  AA0 N - Z AA0 L - D UW1 - AH0\nANZALONE  AE1 N - Z AH0 - L OW2 N\nANZELMO  AA0 N - Z EH1 L - M OW0\nANZIO  AE1 N - Z IY2 - OW0\nANZUS  AE1 N - Z AH0 S\nAOI  AW1 - IY0\nAOKI  EY0 - OW1 - K IY0\nAOL  EY1 - OW1 - EH1 L\nAOL(2)  AH0 - M ER1 - IH0 - K AH0 - AA1 N - L AY2 N\nAON  EY1 - OW0 N\nAORTA  EY0 - AO1 R - T AH0\nAORTIC  EY0 - AO1 R - T IH0 K\nAOSHIMA  AW2 - SH IY1 - M AH0\nAOSHIMA(2)  EY2 - OW0 - SH IY1 - M AH0\nAOUN  AW1 - AH0 N\nAOUN'S  AW1 - AH0 N Z\nAOUN'S(2)  AW2 - UW1 N Z\nAOUN(2)  AW2 - UW1 N\nAOUZOU  AW2 - Y UW1 - Z UW0\nAOYAMA  AW2 - Y AA1 - M AH0\nAOYAMA(2)  EY2 - OW0 - Y AA1 - M AH0\nAPACE  AH0 - P EY1 S\nAPACHE  AH0 - P AE1 - CH IY0\nAPACHE'S  AH0 - P AE1 - CH IY0 Z\nAPACHES  AH0 - P AE1 - CH IY0 Z\nAPALACHICOLA  AE2 - P AH0 - L AE2 - CH AH0 - K OW1 - L AH0\nAPALACHICOLA'S  AE2 - P AH0 - L AE2 - CH AH0 - K OW1 - L AH0 Z\nAPARICIO  AE2 - P ER0 - IH1 - S IY0 - OW0\nAPART  AH0 - P AA1 R T\nAPARTHEID  AH0 - P AA1 R T - AY2 T\nAPARTHEID'S  AH0 - P AA1 R T - AY2 T S\nAPARTHEID'S(2)  AH0 - P AA1 R - T AY2 D Z\nAPARTHEID(2)  AH0 - P AA1 R T - AY2 D\nAPARTMENT  AH0 - P AA1 R T - M AH0 N T\nAPARTMENTS  AH0 - P AA1 R T - M AH0 N T S\nAPATHETIC  AE2 - P AH0 - TH EH1 - T IH0 K\nAPATHY  AE1 - P AH0 - TH IY0\nAPATITE  AE1 - P AH0 - T AY2 T\nAPATITES  AE1 - P AH0 - T AY2 T S\nAPC  EY1 - P IY1 - S IY1\nAPC'S  EY1 - P IY1 - S IY1 Z\nAPCAR  AE1 P - K AA0 R\nAPCAR(2)  AE1 P - G AA0 R\nAPE  EY1 P\nAPEC  EY1 - P EH2 K\nAPEC'S  EY1 - P EH2 K S\nAPEL  AA0 - P EH1 L\nAPELIKE  EY1 - P L AY2 K\nAPENNINE  AE1 - P AH0 - N IY2 N\nAPERTURE  AE1 - P ER0 - CH ER0\nAPES  EY1 P S\nAPEX  EY1 - P EH2 K S\nAPEX'S  EY1 - P EH2 K - S IH0 Z\nAPFEL  AE1 P - F AH0 L\nAPFELBAUM  AE1 P - F AH0 L - B AW2 M\nAPGAR  AE1 P - G ER0\nAPHASIA  AH0 - F EY1 - ZH AH0\nAPHID  AE1 - F AH0 D\nAPHID(2)  EY1 - F AH0 D\nAPHIDS  AE1 - F IH0 D Z\nAPHIDS(2)  EY1 - F AH0 D Z\nAPHORISM  AE1 - F ER0 - IH2 - Z AH0 M\nAPHORISMS  AE1 - F ER0 - IH2 - Z AH0 M Z\nAPHRODISIAC  AE2 - F R OW0 - D IY1 - Z IY0 - AE0 K\nAPHRODITE  AE2 - F R AH0 - D AY1 - T IY0\nAPHRODITE'S  AE2 - F R AH0 - D AY1 - T IY0 Z\nAPHRODITES  AE2 - F R AH0 - D AY1 - T IY0 Z\nAPICELLA  AE2 - P IH0 - S EH1 - L AH0\nAPIECE  AH0 - P IY1 S\nAPING  EY1 - P IH0 NG\nAPLENTY  AH0 - P L EH1 N - T IY0\nAPLIN  AE1 - P L IH0 N\nAPLOMB  AH0 - P L AA1 M\nAPNEA  AE1 P - N IY0 - AH0\nAPOCALYPSE  AH0 - P AA1 - K AH0 - L IH2 P S\nAPOCALYPTIC  AH0 - P AA2 - K AH0 - L IH1 P - T IH0 K\nAPOCRYPHAL  AH0 - P AA1 - K R AH0 - F AH0 L\nAPODACA  AA0 - P OW0 - D AA1 - K AH0\nAPOGEE  AE1 - P AH0 - JH IY2\nAPOLITICAL  EY2 - P AH0 - L IH1 - T IH0 - K AH0 L\nAPOLLINE  AE1 - P AH0 - L AY2 N\nAPOLLINIAN  AE2 - P AH0 - L IH1 - N IY0 - AH0 N\nAPOLLO  AH0 - P AA1 - L OW0\nAPOLLO'S  AH0 - P AA1 - L OW0 Z\nAPOLLONIAN  AE2 - P AH0 - L OW1 - N IY0 - AH0 N\nAPOLOGETIC  AH0 - P AA2 - L AH0 - JH EH1 - T IH0 K\nAPOLOGETICALLY  AH0 - P AA2 - L AH0 - JH EH1 - T IH0 K - L IY0\nAPOLOGIES  AH0 - P AA1 - L AH0 - JH IY0 Z\nAPOLOGIST  AH0 - P AA1 - L AH0 - JH AH0 S T\nAPOLOGISTS  AH0 - P AA1 - L AH0 - JH AH0 S T S\nAPOLOGISTS(2)  AH0 - P AA1 - L AH0 - JH AH0 S S\nAPOLOGISTS(3)  AH0 - P AA1 - L AH0 - JH AH0 S\nAPOLOGIZE  AH0 - P AA1 - L AH0 - JH AY2 Z\nAPOLOGIZED  AH0 - P AA1 - L AH0 - JH AY2 Z D\nAPOLOGIZES  AH0 - P AA1 - L AH0 - JH AY2 - Z IH0 Z\nAPOLOGIZING  AH0 - P AA1 - L AH0 - JH AY2 - Z IH0 NG\nAPOLOGY  AH0 - P AA1 - L AH0 - JH IY0\nAPONTE  AH0 - P AA1 N - T IY0\nAPOPA  AH0 - P OW1 - P AH0\nAPOPKA  AH0 - P AO1 P - K AH0\nAPOPLECTIC  AE2 - P AH0 - P L EH1 K - T IH0 K\nAPOPLEXY  AE1 - P AH0 - P L EH2 K - S IY0\nAPOSTLE  AH0 - P AA1 - S AH0 L\nAPOSTLES  AH0 - P AA1 - S AH0 L Z\nAPOSTOL  AE1 - P AH0 - S T AH0 L\nAPOSTOLOPOUL  AH0 - P AA2 - S T OW0 - L OW0 - P UW1 L\nAPOSTROPHE  AH0 - P AA1 S - T R AH0 - F IY0\nAPOTHECARY  AH0 - P AA1 - TH AH0 - K EH2 - R IY0\nAPOTHEOSIS  AH0 - P AA2 - TH IY0 - OW1 - S AH0 S\nAPP  AE1 P\nAPPALACHIA  AE2 - P AH0 - L AE1 - CH IY0 - AH0\nAPPALACHIAN  AE2 - P AH0 - L EY1 - CH AH0 N\nAPPALACHIAN(2)  AE2 - P AH0 - L EY1 - SH AH0 N\nAPPALACHIAN(3)  AE2 - P AH0 - L AE1 - CH AH0 N\nAPPALACHIANS  AE2 - P AH0 - L EY1 - CH AH0 N Z\nAPPALACHIANS(2)  AE2 - P AH0 - L EY1 - SH AH0 N Z\nAPPALACHIANS(3)  AE1 - P AH0 - L AE1 - CH AH0 N Z\nAPPALL  AH0 - P AO1 L\nAPPALLED  AH0 - P AO1 L D\nAPPALLING  AH0 - P AO1 - L IH0 NG\nAPPALLINGLY  AH0 - P AO1 - L IH0 NG - L IY0\nAPPALLS  AH0 - P AO1 L Z\nAPPARATCHIK  AE2 - P ER0 - AE1 - CH IH0 K\nAPPARATCHIKS  AE2 - P ER0 - AE1 - CH IH0 K S\nAPPARATUS  AE2 - P ER0 - AE1 - T AH0 S\nAPPARATUSES  AE2 - P ER0 - AE1 - T AH0 - S AH0 Z\nAPPAREL  AH0 - P AE1 - R AH0 L\nAPPAREL(2)  AH0 - P EH1 - R AH0 L\nAPPARENT  AH0 - P EH1 - R AH0 N T\nAPPARENTLY  AH0 - P EH1 - R AH0 N T - L IY0\nAPPARITION  AE2 - P ER0 - IH1 - SH AH0 N\nAPPARITIONS  AE2 - P ER0 - IH1 - SH AH0 N Z\nAPPEAL  AH0 - P IY1 L\nAPPEALABLE  AH0 - P IY1 - L AH0 - B AH0 L\nAPPEALED  AH0 - P IY1 L D\nAPPEALING  AH0 - P IY1 - L IH0 NG\nAPPEALINGLY  AH0 - P IY1 - L IH0 NG - L IY0\nAPPEALS  AH0 - P IY1 L Z\nAPPEAR  AH0 - P IH1 R\nAPPEARANCE  AH0 - P IH1 - R AH0 N S\nAPPEARANCES  AH0 - P IH1 - R AH0 N - S AH0 Z\nAPPEARED  AH0 - P IH1 R D\nAPPEARING  AH0 - P IH1 - R IH0 NG\nAPPEARS  AH0 - P IH1 R Z\nAPPEASE  AH0 - P IY1 Z\nAPPEASED  AH0 - P IY1 Z D\nAPPEASEMENT  AH0 - P IY1 Z - M AH0 N T\nAPPEASING  AH0 - P IY1 - Z IH0 NG\nAPPEL  AE1 - P AH0 L\nAPPELBAUM  AE1 - P AH0 L - B AW2 M\nAPPELHANS  AE1 - P IH0 L - HH AH0 N Z\nAPPELL  AE1 - P AH0 L\nAPPELLATE  AH0 - P EH1 - L IH0 T\nAPPELLATE(2)  AH0 - P EH1 - L EY2 T\nAPPELLATION  AE2 - P AH0 - L EY1 - SH AH0 N\nAPPELLATIONS  AE2 - P AH0 - L EY1 - SH AH0 N Z\nAPPELMAN  AE1 - P AH0 L - M AH0 N\nAPPELT  AE1 - P IH0 L T\nAPPEND  AH0 - P EH1 N D\nAPPENDAGE  AH0 - P EH1 N - D IH0 JH\nAPPENDAGES  AH0 - P EH1 N - D IH0 - JH IH0 Z\nAPPENDECTOMIES  AE2 - P AH0 N - D EH1 K - T AH0 - M IY0 Z\nAPPENDECTOMY  AE2 - P IH0 N - D EH1 K - T AH0 - M IY0\nAPPENDED  AH0 - P EH1 N - D IH0 D\nAPPENDIX  AH0 - P EH1 N - D IH0 K S\nAPPENDIXES  AH0 - P EH1 N - D IH0 K - S IH0 Z\nAPPENZELLER  AE1 - P IH0 N - Z AH0 L - ER0\nAPPERSON  AE1 - P ER0 - S AH0 N\nAPPERT  AE1 - P ER0 T\nAPPETITE  AE1 - P AH0 - T AY2 T\nAPPETITES  AE1 - P AH0 - T AY2 T S\nAPPETITO  AE2 - P AH0 - T IY1 - T OW2\nAPPETIZER  AE1 - P AH0 - T AY2 - Z ER0\nAPPETIZERS  AE1 - P AH0 - T AY2 - Z ER0 Z\nAPPETIZING  AE1 - P IH0 - T AY2 - Z IH0 NG\nAPPIA  AE1 - P IY0 - AH0\nAPPIAN  AE1 - P IY0 - AH0 N\nAPPLAUD  AH0 - P L AO1 D\nAPPLAUDED  AH0 - P L AO1 - D AH0 D\nAPPLAUDED(2)  AH0 - P L AO1 - D IH0 D\nAPPLAUDING  AH0 - P L AO1 - D IH0 NG\nAPPLAUDS  AH0 - P L AO1 D Z\nAPPLAUSE  AH0 - P L AO1 Z\nAPPLE  AE1 - P AH0 L\nAPPLE'S  AE1 - P AH0 L Z\nAPPLEBAUM  AE1 - P AH0 L - B AW2 M\nAPPLEBEE  AE1 - P AH0 L - B IY2\nAPPLEBEE'S  AE1 - P AH0 L - B IY2 Z\nAPPLEBERRY  AE1 - P AH0 L - B EH2 - R IY0\nAPPLEBY  AE1 - P IH0 L - B IY0\nAPPLEGARTH  AE1 - P L IH0 - G AA0 R TH\nAPPLEGATE  AE1 - P AH0 L - G EY2 T\nAPPLEMAN  AE1 - P AH0 L - M AH0 N\nAPPLEQUIST  AE1 - P AH0 L - K W IH0 S T\nAPPLES  AE1 - P AH0 L Z\nAPPLESAUCE  AE1 - P AH0 L - S AO2 S\nAPPLESEED  AE1 - P AH0 L - S IY2 D\nAPPLESHARE  AE1 - P AH0 L - SH EH2 R\nAPPLETON  AE1 - P AH0 L - T AH0 N\nAPPLEWHITE  AE1 - P AH0 L - W AY2 T\nAPPLEYARD  AE1 - P AH0 L - Y AA2 R D\nAPPLIANCE  AH0 - P L AY1 - AH0 N S\nAPPLIANCES  AH0 - P L AY1 - AH0 N - S AH0 Z\nAPPLIANCES(2)  AH0 - P L AY1 - AH0 N - S IH0 Z\nAPPLICABILITY  AE2 - P L AH0 - K AH0 - B IH1 - L AH0 - T IY0\nAPPLICABLE  AE1 - P L AH0 - K AH0 - B AH0 L\nAPPLICANT  AE1 - P L IH0 - K AH0 N T\nAPPLICANT'S  AE1 - P L IH0 - K AH0 N T S\nAPPLICANTS  AE1 - P L IH0 - K AH0 N T S\nAPPLICANTS'  AE1 - P L AH0 - K AH0 N T S\nAPPLICATION  AE2 - P L AH0 - K EY1 - SH AH0 N\nAPPLICATIONS  AE2 - P L AH0 - K EY1 - SH AH0 N Z\nAPPLICATOR  AE1 - P L AH0 - K EY2 - T ER0\nAPPLICATORS  AE1 - P L AH0 - K EY2 - T ER0 Z\nAPPLIED  AH0 - P L AY1 D\nAPPLIES  AH0 - P L AY1 Z\nAPPLIN  AE1 - P L IH0 N\nAPPLING  AE1 - P AH0 L - IH0 NG\nAPPLING(2)  AE1 - P L IH0 NG\nAPPLY  AH0 - P L AY1\nAPPLYING  AH0 - P L AY1 - IH0 NG\nAPPOINT  AH0 - P OY1 N T\nAPPOINTED  AH0 - P OY1 N - T AH0 D\nAPPOINTED(2)  AH0 - P OY1 N - T IH0 D\nAPPOINTEE  AH0 - P OY0 N - T IY1\nAPPOINTEE(2)  AH0 - P OY1 N - T IY0\nAPPOINTEES  AH0 - P OY0 N - T IY1 Z\nAPPOINTEES(2)  AH0 - P OY1 N - T IY0 Z\nAPPOINTING  AH0 - P OY1 N - T IH0 NG\nAPPOINTIVE  AH0 - P OY1 N - T IH0 V\nAPPOINTMENT  AH0 - P OY1 N T - M AH0 N T\nAPPOINTMENTS  AH0 - P OY1 N T - M AH0 N T S\nAPPOINTS  AH0 - P OY1 N T S\nAPPORTION  AH0 - P AO1 R - SH AH0 N\nAPPORTIONED  AH0 - P AO1 R - SH AH0 N D\nAPPORTIONING  AH0 - P AO1 R - SH AH0 N - IH0 NG\nAPPORTIONMENT  AH0 - P AO1 R - SH AH0 N - M AH0 N T\nAPPRAISAL  AH0 - P R EY1 - Z AH0 L\nAPPRAISALS  AH0 - P R EY1 - Z AH0 L Z\nAPPRAISE  AH0 - P R EY1 Z\nAPPRAISED  AH0 - P R EY1 Z D\nAPPRAISER  AH0 - P R EY1 - Z ER0\nAPPRAISERS  AH0 - P R EY1 - Z ER0 Z\nAPPRAISES  AH0 - P R EY1 - Z IH0 Z\nAPPRAISING  AH0 - P R EY1 - Z IH0 NG\nAPPRECIABLE  AH0 - P R IY1 - SH AH0 - B AH0 L\nAPPRECIABLY  AH0 - P R IY1 - SH AH0 - B L IY0\nAPPRECIATE  AH0 - P R IY1 - SH IY0 - EY2 T\nAPPRECIATED  AH0 - P R IY1 - SH IY0 - EY2 - T IH0 D\nAPPRECIATES  AH0 - P R IY1 - SH IY0 - EY2 T S\nAPPRECIATING  AH0 - P R IY1 - SH IY0 - EY2 - T IH0 NG\nAPPRECIATION  AH0 - P R IY2 - SH IY0 - EY1 - SH AH0 N\nAPPRECIATIVE  AH0 - P R IY1 - SH IY0 - EY2 - T IH0 V\nAPPRECIATIVE(2)  AH0 - P R IY1 - SH Y AH0 - T IH0 V\nAPPRECIATIVELY  AH0 - P R IY1 - SH IY0 - EY2 - T IH0 V - L IY0\nAPPRECIATIVELY(2)  AH0 - P R IY1 - SH Y AH0 - T IH0 V - L IY0\nAPPREHEND  AE2 - P R IH0 - HH EH1 N D\nAPPREHENDED  AE2 - P R IH0 - HH EH1 N - D AH0 D\nAPPREHENDING  AE2 - P R IH0 - HH EH1 N - D IH0 NG\nAPPREHENSION  AE2 - P R IH0 - HH EH1 N - SH AH0 N\nAPPREHENSIONS  AE2 - P R IH0 - HH EH1 N - SH AH0 N Z\nAPPREHENSIVE  AE2 - P R IH0 - HH EH1 N - S IH0 V\nAPPREHENSIVE(2)  AE2 - P R IY0 - HH EH1 N - S IH0 V\nAPPRENTICE  AH0 - P R EH1 N - T AH0 S\nAPPRENTICE(2)  AH0 - P R EH1 N - T IH0 S\nAPPRENTICED  AH0 - P R EH1 N - T AH0 S T\nAPPRENTICES  AH0 - P R EH1 N - T AH0 - S IH0 Z\nAPPRENTICESHIP  AH0 - P R EH1 N - T AH0 S - SH IH2 P\nAPPRENTICESHIPS  AH0 - P R EH1 N - T AH0 S - SH IH2 P S\nAPPRISE  AH0 - P R AY1 Z\nAPPRISED  AH0 - P R AY1 Z D\nAPPROACH  AH0 - P R OW1 CH\nAPPROACHABLE  AH0 - P R OW1 - CH AH0 - B AH0 L\nAPPROACHED  AH0 - P R OW1 CH T\nAPPROACHES  AH0 - P R OW1 - CH AH0 Z\nAPPROACHES(2)  AH0 - P R OW1 - CH IH0 Z\nAPPROACHING  AH0 - P R OW1 - CH IH0 NG\nAPPROBATION  AE2 - P R AH0 - B EY1 - SH AH0 N\nAPPROPRIATE  AH0 - P R OW1 - P R IY0 - AH0 T\nAPPROPRIATE(2)  AH0 - P R OW1 - P R IY0 - EY2 T\nAPPROPRIATED  AH0 - P R OW1 - P R IY0 - EY2 - T IH0 D\nAPPROPRIATELY  AH0 - P R OW1 - P R IY0 - IH0 T - L IY0\nAPPROPRIATENESS  AH0 - P R OW1 - P R IY0 - AH0 T - N AH0 S\nAPPROPRIATES  AH0 - P R OW1 - P R IY0 - EY2 T S\nAPPROPRIATING  AH0 - P R OW1 - P R IY0 - EY2 - T IH0 NG\nAPPROPRIATION  AH0 - P R OW2 - P R IY0 - EY1 - SH AH0 N\nAPPROPRIATIONS  AH0 - P R OW2 - P R IY0 - EY1 - SH AH0 N Z\nAPPROPRIATOR  AH0 - P R OW1 - P R IY0 - EY2 - T ER0\nAPPROPRIATORS  AH0 - P R OW1 - P R IY0 - EY2 - T ER0 Z\nAPPROVABLE  AH0 - P R UW1 - V AH0 - B AH0 L\nAPPROVAL  AH0 - P R UW1 - V AH0 L\nAPPROVALS  AH0 - P R UW1 - V AH0 L Z\nAPPROVE  AH0 - P R UW1 V\nAPPROVED  AH0 - P R UW1 V D\nAPPROVES  AH0 - P R UW1 V Z\nAPPROVING  AH0 - P R UW1 - V IH0 NG\nAPPROVINGLY  AH0 - P R UW1 - V IH0 NG - L IY0\nAPPROXIMATE  AH0 - P R AA1 K - S AH0 - M AH0 T\nAPPROXIMATE(2)  AH0 - P R AA1 K - S AH0 - M EY2 T\nAPPROXIMATED  AH0 - P R AA1 K - S AH0 - M EY2 - T AH0 D\nAPPROXIMATELY  AH0 - P R AA1 K - S AH0 - M AH0 T - L IY0\nAPPROXIMATES  AH0 - P R AA1 K - S AH0 - M AH0 T S\nAPPROXIMATES(2)  AH0 - P R AA1 K - S AH0 - M EY2 T S\nAPPROXIMATING  AH0 - P R AA1 K - S IH0 - M EY2 - T IH0 NG\nAPPROXIMATION  AH0 - P R AA2 K - S AH0 - M EY1 - SH AH0 N\nAPPROXIMATIONS  AH0 - P R AA2 K - S AH0 - M EY1 - SH AH0 N Z\nAPPS  AE1 P S\nAPRA  EY1 - P R AH0\nAPREA  AA1 - P R IY0 - AH0\nAPRICOT  EY1 - P R AH0 - K AA2 T\nAPRICOTS  AE1 - P R AH0 - K AA2 T S\nAPRIL  EY1 - P R AH0 L\nAPRIL'S  EY1 - P R AH0 L Z\nAPRILE  AA1 - P R AH0 L\nAPRODIVA  AE2 - P R AO0 - D IY1 - V AH0\nAPRON  EY1 - P R AH0 N\nAPRONS  EY1 - P R AH0 N Z\nAPROPOS  AE2 - P R AH0 - P OW1\nAPSELL  AE1 P - S AH0 L\nAPSEY  AE1 P - S IY0\nAPSO  AE1 P - S OW0\nAPSTAR  AE1 P - S T AA2 R\nAPT  AE1 P T\nAPTER  AE1 P - T ER0\nAPTITUDE  AE1 P - T AH0 - T UW2 D\nAPTITUDES  AE1 P - T AH0 - T UW2 D Z\nAPTIVA  AE2 P - T IY1 - V AH0\nAPTLY  AE1 P T - L IY0\nAPUZZO  AA0 - P UW1 - Z OW0\nAQABA  AH0 - K AA1 - B AH0\nAQAZADEH  AE2 - K AH0 - Z AA1 - D EH2\nAQUA  AE1 - K W AH0\nAQUA(2)  AA1 - K W AH0\nAQUACULTURE  AE1 - K W AH0 - K AH2 L - CH ER0\nAQUALUNG  AE1 - K W AH0 - L AH0 NG\nAQUAMARINE  AA2 - K W AH0 - M ER0 - IY1 N\nAQUANAUT  AA1 - K W AH0 - N AA2 T\nAQUANAUTS  AA1 - K W AH0 - N AA2 T S\nAQUARIST  AH0 - K W EH1 - R AH0 S T\nAQUARISTS  AH0 - K W EH1 - R AH0 S T S\nAQUARISTS(2)  AH0 - K W EH1 - R AH0 S S\nAQUARISTS(3)  AH0 - K W EH1 - R AH0 S\nAQUARIUM  AH0 - K W EH1 - R IY0 - AH0 M\nAQUARIUMS  AH0 - K W EH1 - R IY0 - AH0 M Z\nAQUARIUS  AH0 - K W EH1 - R IY0 - AH0 S\nAQUATIC  AH0 - K W AA1 - T IH0 K\nAQUATIC(2)  AH0 - K W AE1 - T IH0 K\nAQUEDUCT  AE1 - K W AH0 - D AH2 K T\nAQUEDUCTS  AE1 - K W AH0 - D AH2 K T S\nAQUEOUS  EY1 - K W IY0 - AH0 S\nAQUIFER  AE1 - K W AH0 - F ER0\nAQUIFERS  AE1 - K W AH0 - F ER0 Z\nAQUILA  AE1 - K W AH0 - L AH0\nAQUILAR  AA0 - K W IY0 - L AA1 R\nAQUILINA  AA0 - K W IY0 - L IY1 - N AH0\nAQUILINO  AA0 - K W IY0 - L IY1 - N OW0\nAQUINAS  AH0 - K W AY1 - N AH0 S\nAQUINO  AH0 - K IY1 - N OW0\nAQUINO'S  AH0 - K IY1 - N OW0 Z\nAQUIRRE  AE1 - K W ER0\nAQUITAINE  AE2 - K W IH0 - T EY1 N\nAR  AA1 R\nARA  AE1 - R AH0\nARAB  AE1 - R AH0 B\nARAB(2)  EH1 - R AH0 B\nARABE  AA0 R - AA1 - B EY0\nARABELLA  AE2 - R AH0 - B EH1 - L AH0\nARABIA  ER0 - EY1 - B IY0 - AH0\nARABIA'S  ER0 - EY1 - B IY0 - AH0 Z\nARABIAN  ER0 - EY1 - B IY0 - AH0 N\nARABIANS  ER0 - EY1 - B IY0 - AH0 N Z\nARABIC  AE1 - R AH0 - B IH0 K\nARABIC(2)  EH1 - R AH0 - B IH0 K\nARABICA  ER0 - AE1 - B IH0 - K AH0\nARABICHON  AH0 - R AE1 - B IH0 - SH AO2 N\nARABICHON'S  AH0 - R AE1 - B IH0 - SH AO2 N Z\nARABICON  AH0 - R AE1 - B AH0 - K AO2 N\nARABIE  ER0 - AE1 - B IY0\nARABLE  EH1 - R AH0 - B AH0 L\nARABS  AE1 - R AH0 B Z\nARABS'  EH1 - R AH0 B Z\nARABS(2)  EH1 - R AH0 B Z\nARACHNID  ER0 - AE1 K - N AH0 D\nARACHNID(2)  ER0 - AE1 K - N IH0 D\nARACHNIDS  ER0 - AE1 K - N AH0 D Z\nARACHNIDS(2)  ER0 - AE1 K - N IH0 D Z\nARAFAT  EH1 - R AH0 - F AE0 T\nARAFAT'S  AA0 - R AH0 - F AA0 T S\nARAFAT'S(2)  EH1 - R AH0 - F AE0 T S\nARAGON  EH1 - R AH0 - G AA2 N\nARAGONA  AA0 - R AA0 - G OW1 - N AH0\nARAI  AA0 - R AA1 - IY0\nARAIZA  ER0 - EY1 - Z AH0\nARAKAKI  AA0 - R AA0 - K AA1 - K IY0\nARAKAWA  AA2 - R AA0 - K AA1 - W AH0\nARAKELIAN  AE0 - R AH0 - K EH1 - L Y AH0 N\nARAKI  AA0 - R AA1 - K IY0\nARAL  AA1 - R AH0 L\nARAMBULA  AA0 - R AA0 M - B UW1 - L AH0\nARAMCO  ER0 - AE1 M - K OW0\nARAMID  EH1 - R AH0 - M IH0 D\nARAMINTA  AE2 - R AH0 - M IH1 N - T AH0\nARAMIS  EH1 - R AH0 - M IH0 S\nARAMONY  AA1 - R AH0 - M OW2 - N IY0\nARAMONY(2)  EH1 - R AH0 - M OW2 - N IY0\nARAN  EH1 - R AH0 N\nARANA  AA0 - R AE1 - N AH0\nARANDA  ER0 - AE1 N - D AH0\nARANGO  AA0 - R AA1 NG - G OW0\nARANSAS  ER0 - AE1 N - S AH0 S\nARANT  AA1 - R AH0 N T\nARANTZA  AH0 - R AA1 N T - Z AH0\nARANYOS  ER0 - AA1 - N Y OW2 S\nARAPAHO  ER0 - AE1 - P AH0 - HH OW2\nARASKOG  ER0 - AE1 - S AA0 G\nARASKOG(2)  ER0 - AE1 - S K AA0 G\nARATA  AA0 - R AA1 - T AH0\nARAU  AH0 - R AW1\nARAUJO  AA0 - R AW1 - Y OW0\nARAVIND  AA1 R - V AH0 N D\nARAYA  ER0 - AY1 - AH0\nARB  AA1 R B\nARBA  AA1 R - B AH0\nARBAT  AA1 R - B AE0 T\nARBAUGH  AA1 R - B AO2\nARBED  AA1 R - B IH0 D\nARBEITER  AA1 R - B AY0 - T ER0\nARBEL  AA1 R - B AH0 L\nARBELLA  AA2 R - B EH1 - L AH0\nARBITER  AA1 R - B IH0 - T ER0\nARBITERS  AA1 R - B AH0 - T ER0 Z\nARBITRAGE  AA1 R - B IH0 - T R AA2 ZH\nARBITRAGER  AA1 R - B IH0 - T R AA2 - ZH ER0\nARBITRAGERS  AA1 R - B IH0 - T R AA2 - ZH ER0 Z\nARBITRAGERS'  AA1 R - B IH0 - T R AA2 - ZH ER0 Z\nARBITRAGEUR  AA1 R - B IH0 - T R AA2 - ZH ER0\nARBITRAGEURS  AA2 R - B AH0 - T R AA2 - ZH ER1 Z\nARBITRAGING  AA1 R - B AH0 - T R AA2 - JH IH0 NG\nARBITRARILY  AA1 R - B IH0 - T R EH2 - R AH0 - L IY0\nARBITRARINESS  AA1 R - B AH0 - T R EH2 - R IY0 - N AH0 S\nARBITRARY  AA1 R - B AH0 - T R EH2 - R IY0\nARBITRARY(2)  AA1 R - B IH0 - T R EH2 - R IY0\nARBITRATE  AA1 R - B AH0 - T R EY2 T\nARBITRATED  AA1 R - B AH0 - T R EY2 - T IH0 D\nARBITRATES  AA1 R - B IH0 - T R EY2 T S\nARBITRATING  AA1 R - B AH0 - T R EY2 - T IH0 NG\nARBITRATION  AA2 R - B IH0 - T R EY1 - SH AH0 N\nARBITRATIONS  AA2 R - B IH0 - T R EY1 - SH AH0 N Z\nARBITRATOR  AA1 R - B IH0 - T R EY2 - T ER0\nARBITRATOR'S  AA1 R - B AH0 - T R EY2 - T ER0 Z\nARBITRATORS  AA1 R - B IH0 - T R EY2 - T ER0 Z\nARBITRATORS'  AA1 R - B AH0 - T R EY2 - T ER0 Z\nARBITRON  AA1 R - B AH0 - T R AA2 N\nARBITRON(2)  AA1 R - B AH0 - T R AH0 N\nARBO  AA1 R - B OW0\nARBOGAST  AA0 R - B OW1 - G AA0 S T\nARBOLEDA  AA0 R - B OW0 - L EH1 - D AH0\nARBOR  AA1 R - B ER0\nARBOREAL  AA0 R - B AO1 - R IY0 - AH0 L\nARBORETUM  AA2 R - B ER0 - IY1 - T AH0 M\nARBORVILLE  AA1 R - B ER0 - V IH0 L\nARBOUR  AA1 R - B ER0\nARBS  AA1 R B Z\nARBUCKLE  AA1 R - B AH0 - K AH0 L\nARBUCKLES  AA1 R - B AH0 - K AH0 L Z\nARBUTHNOT  AA0 R - B AH1 TH - N AH0 T\nARBY  AA1 R - B IY0\nARBY'S  AA1 R - B IY0 Z\nARC  AA1 R K\nARCADE  AA0 R - K EY1 D\nARCADES  AA0 R - K EY1 D Z\nARCADIA  AA0 R - K EY1 - D IY0 - AH0\nARCADIAN  AA2 R - K EY1 - D IY0 - AH0 N\nARCADIANS  AA2 R - K EY1 - D IY0 - AH0 N Z\nARCANA  AA0 R - K AE1 - N AH0\nARCAND  AA1 R - K AH0 N D\nARCANE  AA2 R - K EY1 N\nARCANUM  AA1 R - K AH0 - N AH0 M\nARCANUM'S  AA1 R - K AH0 - N AH0 M Z\nARCARO  AA0 R - K AA1 - R OW0\nARCATA  AA0 R - K AA1 - T AH0\nARCE  AA1 R S\nARCEMENT  AA0 R - S EY1 - M AH0 N T\nARCENEAUX  AA1 R - S IH0 - N OW0\nARCEO  AA1 R - S IY0 - OW0\nARCH  AA1 R CH\nARCHAEOLOGICAL  AA2 R - K IY0 - AH0 - L AA1 - JH IH0 - K AH0 L\nARCHAEOLOGIST  AA2 R - K IY0 - AA1 - L AH0 - JH IH0 S T\nARCHAEOLOGISTS  AA2 R - K IY0 - AA1 - L AH0 - JH IH0 S T S\nARCHAEOLOGISTS(2)  AA2 R - K IY0 - AA1 - L AH0 - JH IH0 S S\nARCHAEOLOGISTS(3)  AA2 R - K IY0 - AA1 - L AH0 - JH IH0 S\nARCHAEOLOGY  AA2 R - K IY0 - AA1 - L AH0 - JH IY0\nARCHAIC  AA0 R - K EY1 - IH0 K\nARCHAMBAULT  AA1 R - SH AH0 M - B OW0\nARCHAMBEAU  AA1 R - SH AH0 M - B OW2\nARCHAMBEAULT  AA1 R - SH AH0 M - B OW0\nARCHANGEL  AA2 R K - EY1 N - JH AH0 L\nARCHANGELS  AA2 R K - EY1 N - JH AH0 L Z\nARCHARD  AA0 R - SH AA1 R D\nARCHBISHOP  AA1 R CH - B IH1 - SH AH0 P\nARCHBOLD  AA1 R CH - B OW2 L D\nARCHDIOCESE  AA1 R CH - D AY1 - AH0 - S AH0 S\nARCHDIOCESE(2)  AA1 R CH - D AY1 - AH0 - S IY0 Z\nARCHDUKE  AA1 R CH - D UW2 K\nARCHED  AA1 R CH T\nARCHENEMY  AA1 R - CH EH1 - N AH0 - M IY0\nARCHEOLOGICAL  AA2 R - K IY0 - AH0 - L AA1 - JH IH0 - K AH0 L\nARCHEOLOGY  AA2 R - K IY0 - AA1 - L AH0 - JH IY0\nARCHER  AA1 R - CH ER0\nARCHER'S  AA1 R - CH ER0 Z\nARCHERD  AA1 R - K ER0 D\nARCHERY  AA1 R - CH ER0 - IY0\nARCHES  AA1 R - CH AH0 Z\nARCHES(2)  AA1 R - CH IH0 Z\nARCHETYPAL  AA1 R K - T AY1 - P AH0 L\nARCHETYPE  AA1 R - K IH0 - T AY2 P\nARCHETYPES  AA1 R - K IH0 - T AY2 P S\nARCHEY  AA1 R - K IY0\nARCHIBALD  AA1 R - CH AH0 - B AO2 L D\nARCHIBEQUE  AA1 R - SH IH0 - B IY0 K\nARCHIE  AA1 R - CH IY0\nARCHIMEDES  AA2 R - K AH0 - M IY1 - D IY0 Z\nARCHING  AA1 R - CH IH0 NG\nARCHIPELAGO  AA2 R - K AH0 - P EH1 - L AH0 - G OW2\nARCHIPELAGO(2)  AA2 R - CH AH0 - P AH0 - L EY1 - G OW2\nARCHITECT  AA1 R - K AH0 - T EH2 K T\nARCHITECT'S  AA1 R - K AH0 - T EH2 K T S\nARCHITECTS  AA1 R - K AH0 - T EH2 K T S\nARCHITECTURAL  AA2 R - K AH0 - T EH1 K - CH ER0 - AH0 L\nARCHITECTURALLY  AA2 R - K IH0 - T EH1 K - CH ER0 - AH0 - L IY0\nARCHITECTURALLY(2)  AA2 R - K IH0 - T EH1 K - CH R AH0 - L IY0\nARCHITECTURE  AA1 R - K AH0 - T EH2 K - CH ER0\nARCHITECTURES  AA1 R - K AH0 - T EH2 K - CH ER0 Z\nARCHITRAVE  AA1 R - K AH0 - T R EY2 V\nARCHITRAVES  AA1 R - K AH0 - T R EY2 V Z\nARCHIVAL  AA0 R - K AY1 - V AH0 L\nARCHIVE  AA1 R - K AY2 V\nARCHIVES  AA1 R - K AY2 V Z\nARCHIVIST  AA1 R - K AH0 - V IH0 S T\nARCHIVIST(2)  AA1 R - K AY0 - V IH0 S T\nARCHIVISTS  AA1 R - K AH0 - V IH0 S T S\nARCHIVISTS(2)  AA1 R - K AY0 - V IH0 S T S\nARCHIVISTS(3)  AA1 R - K AH0 - V IH0 S S\nARCHIVISTS(4)  AA1 R - K AH0 - V IH0 S\nARCHLY  AA1 R CH - L IY0\nARCHRIVAL  AA1 R CH - R AY2 - V AH0 L\nARCHRIVALS  AA1 R CH - R AY2 - V AH0 L Z\nARCHULETA  AA0 R - K UW0 - L EH1 - T AH0\nARCHULETTA  AA0 R - K UW0 - L EH1 - T AH0\nARCHWAY  AA1 R CH - W EY2\nARCIDIACONO  AA0 R - CH IY0 - D IY0 - AA0 - K OW1 - N OW0\nARCIERI  AA0 R - CH IH1 - R IY0\nARCINIEGA  AA0 R - CH IY0 - N IY1 - G AH0\nARCO  AA1 R - K OW0\nARCO'S  AA1 R - K OW0 Z\nARCOLA  AA0 R - K OW1 - L AH0\nARCOS  AA1 R - K OW0 Z\nARCOSANTI  AA2 R - K AH0 - S AE1 N - T IY0\nARCS  AA1 R K S\nARCTIC  AA1 R K - T IH0 K\nARCTIC(2)  AA1 R - T IH0 K\nARCTURUS  AA2 R K - T UH1 - R AH0 S\nARCTURUS(2)  AA2 R K - T ER1 - AH0 S\nARCURI  AA0 R - K UH1 - R IY0\nARD  AA1 R D\nARDA  AA1 R - D AH0\nARDATH  AA1 R - D AH0 TH\nARDEEN  AA0 R - D IY1 N\nARDELIA  AA0 R - D EH1 - L IY0 - AH0\nARDELLA  AA2 R - D EH1 - L AH0\nARDELLE  AA0 R - D EH1 L\nARDEN  AA1 R - D AH0 N\nARDEN'S  AA1 R - D AH0 N Z\nARDENE  AA1 R - D IY2 N\nARDENT  AA1 R - D AH0 N T\nARDENTLY  AA1 R - D AH0 N T - L IY0\nARDIN  AA1 R - D IH0 N\nARDINE  AA0 R - D IY1 - N IY0\nARDIS  AA1 R - D IH0 S\nARDITH  AA1 R - D IH0 TH\nARDITO  AA0 R - D IY1 - T OW0\nARDLEY  AA1 R D - L IY0\nARDMORE  AA1 R D - M AO2 R\nARDOIN  AA0 R - D OY1 N\nARDOLINO  AA0 R - D OW0 - L IY1 - N OW0\nARDOLPH  AA1 R - D OW2 L F\nARDOR  AA1 R - D ER0\nARDRA  AA1 R - D R AH0\nARDREY  AA1 R - D R IY0\nARDSHIEL  AA1 R D - SH IY2 L\nARDSLEY  AA1 R D Z - L IY0\nARDUINI  AA0 R - D UW0 - IY1 - N IY0\nARDUOUS  AA1 R - JH UW0 - AH0 S\nARE  AA1 R\nARE(2)  ER0\nAREA  EH1 - R IY0 - AH0\nAREA'S  EH1 - R IY0 - AH0 Z\nAREAS  EH1 - R IY0 - AH0 Z\nAREBALO  AA0 R - EH0 - B AA1 - L OW0\nARECHIGA  AA0 - R EH0 - K IY1 - G AH0\nAREHART  AE1 - R IH0 - HH AA0 R T\nAREL  AA0 - R EH1 L\nARELLANES  AE1 - R IH0 - L EY2 N Z\nARELLANO  AA0 - R EH0 - L AA1 - N OW0\nAREN  AA1 - R AH0 N\nAREN'T  AA1 - R AH0 N T\nAREN'T(2)  AA1 R N T\nARENA  ER0 - IY1 - N AH0\nARENA'S  ER0 - IY1 - N AH0 Z\nARENABALL  ER0 - IY1 - N AH0 - B AO2 L\nARENAS  ER0 - IY1 - N AH0 Z\nARENCIBIA  AA0 - R EH0 N - CH IY1 - B IY0 - AH0\nAREND  ER0 - EH1 N D\nARENDS  ER0 - EH1 N D Z\nARENDSEE  ER0 - EH1 N D - S IY2\nARENDT  EH1 - R IH0 N T\nARENELLA  AA2 - R AH0 - N EH1 - L AH0\nARENELLA'S  AA2 - R AH0 - N EH1 - L AH0 Z\nARENS  EH1 - R AH0 N Z\nARENS(2)  AA1 - R AH0 N Z\nARENSON  AE1 - R IH0 N - S AH0 N\nARENT  AA1 - R AH0 N T\nARENTZ  AE1 - R IH0 N T S\nARENZ  AA1 - R EY0 N Z\nARES  AA1 R Z\nARETA  AA0 - R EH1 - T AH0\nARETHA  ER0 - IY1 - TH AH0\nARETINA  AA0 - R EH0 - T IY1 - N AH0\nARETSKY  EH0 - R EH1 T S - K IY1\nARETTA  AA0 - R EH1 - T AH0\nAREVALO  AA0 - R EY0 - V AA1 - L OW0\nAREY  AE1 - R IY0\nARGABRIGHT  AA1 R - G AH0 - B R AY2 T\nARGALL  AA1 R - G AH0 L\nARGANBRIGHT  AA0 R - G AE1 N - B R AY0 T\nARGENBRIGHT  AA1 R - G IH0 N - B R AY0 T\nARGENT  AA1 R - JH IH0 N T\nARGENTA  AA2 R - JH EH1 N - T AH0\nARGENTIERI  AA0 R - JH EH0 N - T IH1 - R IY0\nARGENTINA  AA2 R - JH AH0 N - T IY1 - N AH0\nARGENTINA'S  AA2 R - JH AH0 N - T IY1 - N AH0 Z\nARGENTINAS  AA2 R - JH AH0 N - T IY1 - N AH0 Z\nARGENTINE  AA1 R - JH AH0 N - T IY2 N\nARGENTINES  AA1 R - JH AH0 N - T IY2 N Z\nARGENTINIAN  AA2 R - JH AH0 N - T IH1 - N IY0 - AH0 N\nARGENTINIANS  AA2 R - JH AH0 N - T IH1 - N IY0 - AH0 N Z\nARGENTO  AA2 R - JH EH1 N - T OW0\nARGIRO  AA0 R - JH IH1 - R OW0\nARGO  AA1 R - G OW0\nARGO'S  AA1 R - G OW0 Z\nARGON  AA1 R - G AA2 N\nARGONAUT  AA1 R - G AH0 - N AO2 T\nARGONAUT'S  AA1 R - G AH0 - N AO2 T S\nARGONAUTS  AA1 R - G AH0 - N AO2 T S\nARGONNE  AA1 R - G AA2 N\nARGONNE(2)  AA1 R - G OW2 N\nARGOSY  AA1 R - G AH0 - S IY0\nARGOSYSTEM  AA1 R - G OW0 - S IH2 - S T AH0 M\nARGOSYSTEMS  AA1 R - G OW0 - S IH2 - S T AH0 M Z\nARGOT  AA1 R - G AH0 T\nARGUABLE  AA1 R - G Y UW0 - AH0 - B AH0 L\nARGUABLY  AA1 R - G Y UW0 - AH0 - B L IY0\nARGUE  AA1 R - G Y UW0\nARGUED  AA1 R - G Y UW0 D\nARGUELLES  AA0 R - G EY1 - L EH0 S\nARGUELLO  AA0 R - G EH1 - L OW0\nARGUES  AA1 R - G Y UW0 Z\nARGUETA  AA0 R - G EY1 - T AH0\nARGUIJO  AA0 R - G W IY1 - Y OW0\nARGUING  AA1 R - G Y UW0 - IH0 NG\nARGUMENT  AA1 R - G Y AH0 - M AH0 N T\nARGUMENT'S  AA1 R - G Y AH0 - M AH0 N T S\nARGUMENTATION  AA2 R - G Y AH0 - M EH0 N - T EY1 - SH AH0 N\nARGUMENTATIVE  AA2 R - G Y AH0 - M EH1 N - T AH0 - T IH0 V\nARGUMENTS  AA1 R - G Y AH0 - M AH0 N T S\nARGUS  AA1 R - G AH0 S\nARGYLE  AA1 R - G AY2 L\nARGYLL  AA0 R - G AY1 L\nARGYROPOULOS  AA2 R - JH IH0 - R AA1 - P OW0 - L AH0 S\nARI  AA1 - R IY0\nARIA  AA1 - R IY0 - AH0\nARIADNE  EH2 - R IY0 - AE1 D - N IY0\nARIAN  AE1 - R IY0 - AH0 N\nARIANA  AA0 - R IY0 - AE1 - N AH0\nARIANE  EH2 - R IY0 - AE1 N\nARIANESPACE  EH2 - R IY0 - AE1 N - S P EY1 S\nARIANISM  AE1 - R IY0 - AH0 - N IH2 - Z AH0 M\nARIANNA  AA0 - R IY0 - AE1 - N AH0\nARIANNA'S  AA0 - R IY0 - AE1 - N AH0 Z\nARIAS  AA1 - R IY0 - AH0 Z\nARIAS'S  AA1 - R IY0 - AH0 - S IH0 Z\nARIC  AE1 - R IH0 K\nARICO  AA0 - R IY1 - K OW0\nARID  AE1 - R AH0 D\nARID(2)  EH1 - R AH0 D\nARIDA  AH0 - R IY1 - D AH0\nARIE  EH1 - R IY0\nARIEL  EH1 - R IY0 - AH0 L\nARIELLA  AA0 - R IY0 - EH1 - L AH0\nARIES  EH1 - R IY0 Z\nARINGTON  AA1 - R IH0 NG - T AH0 N\nARIOLA  AA0 - R IY0 - OW1 - L AH0\nARIS  ER0 - IY1 S\nARISE  ER0 - AY1 Z\nARISEN  ER0 - IH1 - Z AH0 N\nARISES  ER0 - AY1 - Z AH0 Z\nARISES(2)  ER0 - AY1 - Z IH0 Z\nARISING  ER0 - AY1 - Z IH0 NG\nARISON  EH1 - R IH0 - S AH0 N\nARISPE  AA0 - R IY1 - S P IY0\nARISTA  ER0 - IH1 - S T AH0\nARISTECH  EH1 - R IH0 - S T EH2 K\nARISTEDE  AA2 - R IH0 - S T IY1 D\nARISTEDE'S  AA2 - R IH0 - S T IY1 D Z\nARISTIDE  AA2 - R IH0 - S T IY1 D\nARISTIDE'S  AA2 - R IH0 - S T IY1 D Z\nARISTOCRACY  EH2 - R AH0 - S T AA1 - K R AH0 - S IY0\nARISTOCRAT  ER0 - IH1 - S T AH0 - K R AE2 T\nARISTOCRATIC  ER0 - IH2 - S T AH0 - K R AE1 - T IH0 K\nARISTOCRATS  ER0 - IH1 - S T AH0 - K R AE2 T S\nARISTOTELIAN  ER0 - IH2 - S T AH0 - T IY1 - L IY0 - AH0 N\nARISTOTLE  EH1 - R AH0 - S T AA2 - T AH0 L\nARISTOTLE'S  EH1 - R AH0 - S T AA2 - T AH0 L Z\nARITHMETIC  EH2 - R IH0 TH - M EH1 - T IH0 K\nARITHMETIC(2)  ER0 - IH1 TH - M AH0 - T IH2 K\nARIZA  AA0 - R IY1 - Z AH0\nARIZMENDI  AA0 - R IY0 Z - M EH1 N - D IY0\nARIZONA  EH2 - R IH0 - Z OW1 - N AH0\nARIZONA'S  EH2 - R IH0 - Z OW1 - N AH0 Z\nARIZONAN  ER0 - IH1 - Z OW0 - N AH0 N\nARIZONAN(2)  ER0 - IH0 - Z OW1 - N AH0 N\nARIZONANS  ER0 - IH1 - Z OW0 - N AH0 N Z\nARIZONANS(2)  ER0 - IH0 - Z OW1 - N AH0 N Z\nARJO  AA1 R - JH OW0\nARJO(2)  AA1 - R Y OW0\nARK  AA1 R K\nARKADELPHIA  AA2 R - K AH0 - D EH1 L - F IY0 - AH0\nARKADI  AA1 R - K AH0 - D IY0\nARKADY  AA2 R - K EY1 - D IY0\nARKANSAN  AA2 R - K AE1 N - Z AH0 N\nARKANSANS  AA2 R - K AE1 N - Z AH0 N Z\nARKANSAS  AA1 R - K AH0 N - S AA2\nARKANSAS'  AA1 R - K AH0 N - S AA2 Z\nARKANSAS'S  AA1 R - K AH0 N - S AA2 Z\nARKIN  AA1 R - K IH0 N\nARKIN'S  AA1 R - K IH0 N Z\nARKLA  AA1 R K - L AH0\nARKLA'S  AA1 R K - L AH0 Z\nARKO  AA1 R - K OW0\nARKOSE  AA0 R - K OW1 S\nARKWRIGHT  AA1 R K - R AY2 T\nARLANA  AA0 R - L AE1 - N AH0\nARLAUSKAS  AA0 R - L AO1 - S K AH0 S\nARLEDGE  AA1 R - L IH0 JH\nARLEEN  AA0 R - L IY1 N\nARLEN  AA1 R - L AH0 N\nARLENA  AA1 R - L IH0 - N AH0\nARLENE  AA1 R - L IY2 N\nARLENE'S  AA1 R - L IY2 N Z\nARLETA  AA1 R - L IH0 - T AH0\nARLETTE  AA2 R - L EH1 T\nARLEY  AA1 R - L IY0\nARLIE  AA1 R - L IY0\nARLIN  AA1 R - L IH0 N\nARLINDA  AA2 R - L IH1 N - D AH0\nARLINE  AA1 R - L AY2 N\nARLINGTON  AA1 R - L IH0 NG - T AH0 N\nARLINGTON'S  AA1 R - L IH0 NG - T AH0 N Z\nARLT  AA1 R L T\nARLYNE  AA1 R - L AY2 N\nARM  AA1 R M\nARM'S  AA1 R M Z\nARMACOST  AA1 R - M AH0 - K AO2 S T\nARMACOST'S  AA1 R - M AH0 - K AO2 S T S\nARMADA  AA0 R - M AA1 - D AH0\nARMADILLO  AA2 R - M AH0 - D IH1 - L OW0\nARMADILLOS  AA2 R - M AH0 - D IH1 - L OW0 Z\nARMAGEDDON  AA2 R - M AH0 - G EH1 - D AH0 N\nARMAGOST  AA0 R - M AA1 - G OW0 S T\nARMAMENT  AA1 R - M AH0 - M AH0 N T\nARMAMENTS  AA1 R - M AH0 - M AH0 N T S\nARMAN  AA1 R - M AH0 N\nARMAND  AA1 R - M AH0 N D\nARMAND(2)  AA2 R - M AA1 N D\nARMANDO  AA0 R - M AA1 N - D OW0\nARMANDT  AA1 R - M AE0 N T\nARMANI  AA2 R - M AA1 - N IY0\nARMANTROUT  AA1 R - M AH0 N - T R AW2 T\nARMARO  AA2 R - M AA1 - R OW0\nARMAS  AA1 R - M AH0 Z\nARMATO  AA0 R - M AA1 - T OW0\nARMBAND  AA1 R M - B AE2 N D\nARMBANDS  AA1 R M - B AE2 N D Z\nARMBRISTER  AA1 R M - B ER0 - IH0 - S T ER0\nARMBRISTER(2)  AA1 R M - B R IH0 - S T ER0\nARMBRUST  AA1 R M - B R AH0 S T\nARMBRUSTER  AA1 R M - B R AH0 - S T ER0\nARMBRUSTER(2)  AA1 R M - B R UW0 - S T ER0\nARMCHAIR  AA1 R M - CH EH2 R\nARMCHAIRS  AA1 R M - CH EH2 R Z\nARMCO  AA1 R M - K OW2\nARMCO'S  AA1 R M - K OW0 Z\nARMED  AA1 R M D\nARMEL  AA0 R - M EH1 L\nARMELLINO  AA2 R - M EH0 - L IY1 - N OW0\nARMEN  AA1 R - M AH0 N\nARMENDAREZ  AA0 R - M EY0 N - D AA1 - R EH0 Z\nARMENDARIZ  AA0 R - M EY0 N - D AA1 - R IY0 Z\nARMENIA  AA0 R - M IY1 - N IY0 - AH0\nARMENIA'S  AA0 R - M IY1 - N IY0 - AH0 Z\nARMENIAN  AA0 R - M IY1 - N IY0 - AH0 N\nARMENIANS  AA0 R - M IY1 - N IY0 - AH0 N Z\nARMENT  AA1 R - M AH0 N T\nARMENTA  AA0 R - M EH1 N - T AH0\nARMENTOR  AA0 R - M AH0 N - T AO1 R\nARMENTROUT  AA1 R - M AH0 N - T R AW2 T\nARMER  AA1 R - M ER0\nARMES  AA1 R M Z\nARMESTED  AA1 R - M IH0 - S T EH2 D\nARMETTA  AA0 R - M EH1 - T AH0\nARMEY  AA1 R - M IY0\nARMEY'S  AA1 R - M IY0 Z\nARMFIELD  AA1 R M - F IY2 L D\nARMIDA  AA0 R - M IY1 - D AH0\nARMIES  AA1 R - M IY0 Z\nARMIGER  AA1 R - M IH0 - G ER0\nARMIJO  AA0 R - M IY1 - Y OW0\nARMILLA  AA0 R - M IH1 - L AH0\nARMIN  AA1 R - M AH0 N\nARMINA  AA0 R - M IY1 - N AH0\nARMINE  AA0 R - M IY1 - N IY0\nARMING  AA1 R - M IH0 NG\nARMINGTON  AA1 R - M IH0 NG - T AH0 N\nARMINIE  AA1 R - M IH0 - N IY0\nARMISTEAD  AA1 R - M IH0 - S T EH2 D\nARMISTICE  AA1 R - M AH0 - S T AH0 S\nARMITAGE  AA1 R - M IH0 - T IH0 JH\nARMOLD  AA1 R - M OW2 L D\nARMON  AA1 R - M AH0 N\nARMOND  AA1 R - M AH0 N D\nARMONK  AA1 R - M AH0 NG K\nARMOR  AA1 R - M ER0\nARMORED  AA1 R - M ER0 D\nARMORIES  AA1 R - M ER0 - IY0 Z\nARMORY  AA1 R - M ER0 - IY0\nARMOUR  AA1 R - M ER0\nARMPIT  AA1 R M - P IH2 T\nARMPITS  AA1 R M - P IH2 T S\nARMREST  AA1 R - M R EH2 S T\nARMRESTS  AA1 R - M R EH2 S T S\nARMRESTS(2)  AA1 R M - R EH2 S S\nARMRESTS(3)  AA1 R M - R EH2 S\nARMS  AA1 R M Z\nARMSTEAD  AA1 R M - S T EH2 D\nARMSTRAD  AA1 R M - S T R AE2 D\nARMSTRONG  AA1 R M - S T R AA2 NG\nARMSTRONG'S  AA1 R M - S T R AO2 NG Z\nARMSTRONG(2)  AA1 R M - S T R AO2 NG\nARMTEC  AA1 R M - T EH2 K\nARMTEK  AA1 R M - T EH2 K\nARMTEK'S  AA1 R M - T EH2 K S\nARMWOOD  AA1 R M - W UH2 D\nARMY  AA1 R - M IY0\nARMY'S  AA1 R - M IY0 Z\nARN  AA1 R N\nARNALDA  AA0 R - N AA1 L - D AH0\nARNALDO  AA0 R - N AA1 L - D OW0\nARNALL  AA1 R - N AH0 L\nARNATT  AA0 R - N AE1 T\nARNAUD  AA0 R - N OW1\nARNAULT  AA2 R - N OW1\nARNAZ  AA2 R - N EH1 Z\nARNDT  AA1 R N T\nARNE  AA1 R N\nARNELL  AA1 R - N AH0 L\nARNELLE  AA2 R - N EH1 L\nARNELLE'S  AA2 R - N EH1 L Z\nARNER  AA1 R - N ER0\nARNESEN  AA0 R - N IY1 - Z AH0 N\nARNESON  AA1 R - N IH0 - S AH0 N\nARNETT  AA0 R - N EH1 T\nARNETTE  AA0 R - N EH1 T\nARNEY  AA1 R - N IY0\nARNHOLD  AA1 R N - HH OW2 L D\nARNHOLT  AA1 R N - HH OW2 L T\nARNIE  AA1 R - N IY0\nARNN  AA1 R N\nARNO  AA1 R - N OW0\nARNOLD  AA1 R - N AH0 L D\nARNOLD'S  AA1 R - N AH0 L D Z\nARNOLDI  AA0 R - N OW1 L - D IY0\nARNOLDS  AA1 R - N AH0 L D Z\nARNOLDY  AA1 R - N OW0 L - D IY0\nARNOLPHE  AA0 R - N AA1 L - F IY0\nARNONE  AA0 R - N OW1 - N IY0\nARNOT  AA1 R - N AH0 T\nARNOTT  AA1 R - N AA0 T\nARNOTTS  AA1 R - N AA0 T S\nARNOW  AA1 R - N OW0\nARNOX  AA1 R - N AA0 K S\nARNS  AA1 R N Z\nARNST  AA1 R N S T\nARNSTEIN  AA1 R N - S T AY0 N\nARNSTEIN(2)  AA1 R N - S T IY0 N\nARNTSON  AA1 R N T - S AH0 N\nARNTZ  AA1 R N T S\nARNTZEN  AA1 R N T - Z AH0 N\nARNULFO  AA0 R - N AH1 L - F OW0\nARNWINE  AA1 R N - W AY2 N\nARNZEN  AA1 R N - Z AH0 N\nARO  AA1 - R OW0\nAROCHA  AA0 - R OW1 - K AH0\nAROCHO  AA0 - R OW1 - K OW0\nAROMA  ER0 - OW1 - M AH0\nAROMAS  ER0 - OW1 - M AH0 Z\nAROMATIC  EH2 - R AH0 - M AE1 - T IH0 K\nARON  EH1 - R AH0 N\nARONE  ER0 - OW1 N\nARONHALT  AE1 - R AH0 N - HH AH0 L T\nARONOFF  EH1 - R AH0 - N AO0 F\nARONOW  ER0 - OW1 - N OW0\nARONOWITZ  ER0 - AA1 - N AH0 - W IH0 T S\nARONS  AA1 - R OW0 N Z\nARONSON  EH1 - R AH0 N - S AH0 N\nARONSTEIN  EH1 - R AH0 N - S T IY2 N\nARONSTEIN(2)  EH1 - R AH0 N - S T AY2 N\nARORA  AA0 - R AO1 - R AH0\nAROS  AA1 - R OW0 Z\nAROSE  ER0 - OW1 Z\nAROUND  ER0 - AW1 N D\nAROUND(2)  ER0 - AW1 N\nAROUSAL  ER0 - AW1 - Z AH0 L\nAROUSE  ER0 - AW1 Z\nAROUSED  ER0 - AW1 Z D\nAROUSES  ER0 - AW1 - Z IH0 Z\nAROUSING  ER0 - AW1 - Z IH0 NG\nARP  AA1 R P\nARPA  AA1 R - P AH0\nARPANET  AA1 R - P AH0 - N EH2 T\nARPIN  AA1 R - P IH0 N\nARPINO  AA0 R - P IY1 - N OW0\nARPS  AA1 R P S\nARQUETTE  AA0 R - K EH1 T\nARQUILLA  AA2 R - K W IH1 - L AH0\nARRAIGN  ER0 - EY1 N\nARRAIGNED  ER0 - EY1 N D\nARRAIGNMENT  ER0 - EY1 N - M AH0 N T\nARRAIGNMENTS  ER0 - EY1 N - M AH0 N T S\nARRANGE  ER0 - EY1 N JH\nARRANGED  ER0 - EY1 N JH D\nARRANGEMENT  ER0 - EY1 N JH - M AH0 N T\nARRANGEMENTS  ER0 - EY1 N JH - M AH0 N T S\nARRANGER  ER0 - EY1 N - JH ER0\nARRANGES  ER0 - EY1 N - JH IH0 Z\nARRANGING  ER0 - EY1 N - JH IH0 NG\nARRANT  AE1 - R AH0 N T\nARRANTS  AE1 - R AH0 N T S\nARRASMITH  EH1 - R AH0 - S M IH2 TH\nARRAY  ER0 - EY1\nARRAYED  ER0 - EY1 D\nARRAYS  ER0 - EY1 Z\nARREARAGE  ER0 - IY1 - R IH0 JH\nARREARAGES  ER0 - IH1 - R IH0 - JH IH0 Z\nARREARS  ER0 - IH1 R Z\nARREDONDO  AA0 - R EH0 - D OW1 N - D OW0\nARREGUIN  AA0 - R EY0 - G W IY1 N\nARRENDONDO  AA0 - R EH0 N - D OW1 N - D OW0\nARREOLA  AA0 - R IY0 - AA1 - L AH0\nARREST  ER0 - EH1 S T\nARRESTED  ER0 - EH1 - S T AH0 D\nARRESTED(2)  ER0 - EH1 - S T IH0 D\nARRESTING  ER0 - EH1 - S T IH0 NG\nARRESTS  ER0 - EH1 S T S\nARRHYTHMIA  ER0 - IH1 DH - M IY0 - AH0\nARRHYTHMIAS  ER0 - IH1 DH - M IY0 - AH0 Z\nARRIAGA  AA2 - R IY0 - AA1 - G AH0\nARRICK  AE1 - R IH0 K\nARRIETA  AA0 - R IY1 - T AH0\nARRIGO  AA2 - R IY1 - G OW0\nARRIGONI  AA0 - R IY0 - G OW1 - N IY0\nARRINGTON  EH1 - R IH0 NG - T AH0 N\nARRIOLA  AA2 - R IY0 - OW1 - L AH0\nARRIORTUA  AA2 - R IY0 - AO0 R - T UW1 - AH0\nARRIS  AE1 - R AH0 S\nARRIVAL  ER0 - AY1 - V AH0 L\nARRIVALS  ER0 - AY1 - V AH0 L Z\nARRIVE  ER0 - AY1 V\nARRIVED  ER0 - AY1 V D\nARRIVES  ER0 - AY1 V Z\nARRIVING  ER0 - AY1 - V IH0 NG\nARROGANCE  EH1 - R AH0 - G AH0 N S\nARROGANT  EH1 - R AH0 - G AH0 N T\nARROGANTLY  EH1 - R AH0 - G AH0 N T - L IY0\nARROGATE  AE1 - R OW0 - G EY2 T\nARROW  AE1 - R OW0\nARROW'S  AE1 - R OW0 Z\nARROW'S(2)  EH1 - R OW0 Z\nARROW(2)  EH1 - R OW0\nARROWHEAD  AE1 - R OW0 - HH EH2 D\nARROWHEAD(2)  EH1 - R OW0 - HH EH2 D\nARROWHEADS  AE1 - R OW0 - HH EH2 D Z\nARROWHEADS(2)  EH1 - R OW0 - HH EH2 D Z\nARROWOOD  AE1 - R OW0 - W UH2 D\nARROWROOT  EH1 - R OW0 - R UW2 T\nARROWS  AE1 - R OW0 Z\nARROWS(2)  EH1 - R OW0 Z\nARROWSMITH  AE1 - R OW0 - S M IH2 TH\nARROWSMITH'S  AE1 - R OW0 S - M IH2 TH S\nARROWSMITH'S(2)  EH1 - R OW0 - S M IH2 TH S\nARROWSMITH(2)  EH1 - R OW0 - S M IH2 TH\nARROYO  ER0 - OY1 - OW0\nARROYO'S  ER0 - OY1 - OW0 Z\nARRUDA  AA0 - R UW1 - D AH0\nARRUPE  AE1 - R UW2 P\nARSDALE  AA1 R Z - D EY2 L\nARSENAL  AA1 R - S AH0 - N AH0 L\nARSENALS  AA1 R - S AH0 - N AH0 L Z\nARSENAULT  AA1 R - S IH0 - N OW0\nARSENEAU  AA1 R - S IH0 - N OW0\nARSENEAULT  AA1 R - S IH0 - N OW0\nARSENIC  AA1 R - S AH0 - N IH0 K\nARSENIDE  AA1 R - S AH0 - N AY2 D\nARSENIO  AA2 R - S IY1 - N IY0 - OW0\nARSLANIAN  AA2 R S - L EY1 - N IY0 - AH0 N\nARSON  AA1 R - S AH0 N\nARSONIST  AA1 R - S AH0 - N AH0 S T\nARSONIST(2)  AA1 R - S AH0 - N IH0 S T\nARSONISTS  AA1 R - S AH0 - N AH0 S T S\nARSONISTS(2)  AA1 R - S AH0 - N IH0 S T S\nARSONISTS(3)  AA1 R - S AH0 N - IH0 S S\nARSONISTS(4)  AA1 R - S AH0 N - IH0 S\nARSONS  AA1 R - S AH0 N Z\nART  AA1 R T\nART'S  AA1 R T S\nARTALE  AA0 R - T AA1 - L IY0\nARTCARVE  AA1 R T - K AA2 R V\nARTCARVED  AA1 R T - K AA2 R V D\nARTEAGA  AA2 R - T IY1 - G AH0\nARTEMAS  AA1 R - T IH0 - M AH0 Z\nARTEMUS  AA1 R - T AH0 - M AH0 S\nARTER  AA1 R - T ER0\nARTERBERRY  AA1 R - T ER0 - B EH2 - R IY0\nARTERBURN  AA1 R - T ER0 - B ER2 N\nARTERIAL  AA0 R - T IH1 - R IY0 - AH0 L\nARTERIES  AA1 R - T ER0 - IY0 Z\nARTERIOSCLEROSIS  AA0 R - T IH2 - R IY0 - OW0 - S K L ER0 - OW1 - S AH0 S\nARTERY  AA1 R - T ER0 - IY0\nARTESIAN  AA2 R - T IY1 - ZH AH0 N\nARTFUL  AA1 R T - F AH0 L\nARTFULLY  AA1 R T - F AH0 - L IY0\nARTH  AA1 R TH\nARTHRITIC  AA0 R - TH R IH1 - T IH0 K\nARTHRITIS  AA0 R TH - R AY1 - T AH0 S\nARTHRITIS(2)  AA0 R TH - R AY1 - T IH0 S\nARTHROPOD  AA1 R - TH R AH0 - P AA2 D\nARTHROPODS  AA1 R - TH R AH0 - P AA2 D Z\nARTHUR  AA1 R - TH ER0\nARTHUR'S  AA1 R - TH ER0 Z\nARTHURIAN  AA0 R - TH UH1 - R IY0 - AH0 N\nARTHURS  AA1 R - TH ER0 Z\nARTICHOKE  AA1 R - T AH0 - CH OW2 K\nARTICHOKE(2)  AA1 R - T IH0 - CH OW2 K\nARTICHOKES  AA1 R - T IH0 - CH OW2 K S\nARTICLE  AA1 R - T AH0 - K AH0 L\nARTICLE'S  AA1 R - T IH0 - K AH0 L Z\nARTICLE(2)  AA1 R - T IH0 - K AH0 L\nARTICLES  AA1 R - T AH0 - K AH0 L Z\nARTICLES(2)  AA1 R - T IH0 - K AH0 L Z\nARTICULATE  AA0 R - T IH1 - K Y AH0 - L EY2 T\nARTICULATE(2)  AA0 R - T IH1 - K Y AH0 - L AH0 T\nARTICULATED  AA0 R - T IH1 - K Y AH0 - L EY2 - T AH0 D\nARTICULATES  AA0 R - T IH1 - K Y AH0 - L AH0 T S\nARTICULATING  AA0 R - T IH1 - K Y AH0 - L EY2 - T IH0 NG\nARTICULATION  AA2 R - T IH0 - K Y AH0 - L EY1 - SH AH0 N\nARTICULATORY  AA0 R - T IH1 - K Y AH0 - L AH0 - T AO2 - R IY0\nARTIE  AA1 R - T IY0\nARTIFACT  AA1 R - T AH0 - F AE2 K T\nARTIFACTS  AA1 R - T AH0 - F AE2 K T S\nARTIFICE  AA1 R - T AH0 - F IH0 S\nARTIFICIAL  AA2 R - T AH0 - F IH1 - SH AH0 L\nARTIFICIALLY  AA2 R - T AH0 - F IH1 - SH AH0 - L IY0\nARTILLERY  AA0 R - T IH1 - L ER0 - IY0\nARTINO  AA0 R - T IY1 - N OW0\nARTIODACTYL  AA2 R - T IY0 - OW0 - D AE1 K - T AH0 L\nARTIODACTYLS  AA2 R - T IY0 - OW0 - D AE1 K - T AH0 L Z\nARTIS  AA1 R - T IH0 S\nARTISAN  AA1 R - T AH0 - Z AH0 N\nARTISANS  AA1 R - T AH0 - Z AH0 N Z\nARTIST  AA1 R - T AH0 S T\nARTIST'S  AA1 R - T AH0 S T S\nARTIST'S(2)  AA1 R - T IH0 S T S\nARTIST(2)  AA1 R - T IH0 S T\nARTISTIC  AA0 R - T IH1 - S T IH0 K\nARTISTICALLY  AA0 R - T IH1 - S T IH0 K - L IY0\nARTISTRY  AA1 R - T IH0 S - T R IY0\nARTISTS  AA1 R - T AH0 S T S\nARTISTS'  AA1 R - T AH0 S T S\nARTISTS'(2)  AA1 R - T IH0 S T S\nARTISTS'(3)  AA1 R - T IH0 S S\nARTISTS'(4)  AA1 R - T IH0 S\nARTISTS(2)  AA1 R - T IH0 S T S\nARTISTS(3)  AA1 R - T IH0 S S\nARTISTS(4)  AA1 R - T IH0 S\nARTLEY  AA1 R T - L IY0\nARTMAN  AA1 R T - M AH0 N\nARTOIS  AA0 R T - W AA1\nARTON  AA1 R - T AA2 N\nARTRA  AA1 R - T R AH0\nARTRA'S  AA1 R - T R AH0 Z\nARTRIP  AA1 R - T R IH0 P\nARTS  AA1 R T S\nARTSY  AA1 R T - S IY1\nARTUR  AA1 R - T UH0 R\nARTURO  AA0 R - T UH1 - R OW0\nARTUS  AA1 R - T AH0 S\nARTWORK  AA1 R T - W ER2 K\nARTWORKS  AA1 R T - W ER2 K S\nARTY  AA1 R - T IY0\nARTY'S  AA1 R - T IY0 Z\nARTZ  AA1 R T S\nARTZT  AA1 R T S T\nARUBA  ER0 - UW1 - B AH0\nARUM  EH1 - R AH0 M\nARUNACHALAM  AA0 - R UW2 - N AH0 - CH AA1 - L AH0 M\nARUNDEL  EH1 - R AH0 N - D AH0 L\nARUP  ER0 - UW1 P\nARVA  AA1 R - V AH0\nARVAD  AA0 R - V AE1 D\nARVAL  AA1 R - V AH0 L\nARVANITIS  AA0 R - V AH0 - N AY1 - T IH0 S\nARVAY  AA1 R - V EY0\nARVE  AA1 R V\nARVEL  AA0 R - V EH1 L\nARVEY  AA1 R - V IY0\nARVID  AA1 R - V IH0 D\nARVIDA  AA0 R - V IY1 - D AH0\nARVIDA'S  AA0 R - V IY1 - D AH0 Z\nARVIDSON  AA1 R - V IH0 D - S AH0 N\nARVIN  AA1 R - V IH0 N\nARVIN'S  AA1 R - V IH0 N Z\nARVIND  AA1 R - V IH0 N D\nARVIZU  AA0 R - V IY1 - Z UW0\nARWOOD  AA1 R - W UH2 D\nARX  AA1 R K S\nARY  EH1 - R IY0\nARYAN  AA1 - R IY0 - AH0 N\nARZAMA  AA0 R - Z AA1 - M AH0\nARZAMAS  AA0 R - Z AA1 - M AH0 Z\nARZATE  AA1 R - Z EY2 T\nARZOLA  AA0 R - Z OW1 - L AH0\nARZT  AA1 R Z T\nAS  AE1 Z\nAS(2)  EH1 Z\nASA  AA1 - S AH0\nASAF  AA0 - S AA1 F\nASAHAN  AE1 - S AH0 - HH AE0 N\nASAHARA  AE0 - S AH0 - HH AE1 - R AH0\nASAHI  AH0 - S AA1 - HH IY0\nASAMERA  AE2 - S AH0 - M EH1 - R AH0\nASARCO  AH0 - S AA1 R - K OW0\nASARCO'S  AH0 - S AA1 R - K OW0 Z\nASARO  AA0 - S AA1 - R OW0\nASAT  AE1 - Z AE0 T\nASATO  AA0 - S AA1 - T OW0\nASAY  AH0 - S EY1\nASBELL  AE1 S - B EH0 L\nASBERRY  AE1 S - B EH0 - R IY0\nASBESTEC  AE2 S - B EH1 - S T EH0 K\nASBESTOS  AE0 S - B EH1 - S T AH0 S\nASBESTOSIS  AE2 S - B EH2 - S T OW1 - S AH0 S\nASBESTOSIS(2)  AE2 S - B EH2 - S T OW1 - S IH0 S\nASBILL  AH0 - S B IH1 L\nASBRIDGE  AH0 S - B R IH1 JH\nASBURY  AE1 Z - B EH2 - R IY0\nASBY  AE1 S - B IY0\nASCAP  AE1 - S K AE2 P\nASCENCIO  AA0 - S CH EH1 N - CH IY0 - OW0\nASCEND  AH0 - S EH1 N D\nASCENDANCE  AH0 - S EH1 N - D AH0 N S\nASCENDANCY  AH0 - S EH1 N - D AH0 N - S IY0\nASCENDANT  AH0 - S EH1 N - D AH0 N T\nASCENDED  AH0 - S EH1 N - D AH0 D\nASCENDENCY  AH0 - S EH1 N - D AH0 N - S IY0\nASCENDING  AH0 - S EH1 N - D IH0 NG\nASCENDS  AH0 - S EH1 N D Z\nASCENSION  AH0 - S EH1 N - SH AH0 N\nASCENT  AH0 - S EH1 N T\nASCERTAIN  AE2 - S ER0 - T EY1 N\nASCERTAINED  AE2 - S ER0 - T EY1 N D\nASCERTAINING  AE2 - S ER0 - T EY1 - N IH0 NG\nASCETIC  AH0 - S EH1 - T IH0 K\nASCH  AE1 SH\nASCHE  AE1 SH\nASCHENBACH  AE1 - SH IH0 N - B AA0 K\nASCHENBRENNER  AE1 - SH IH0 N - B R IH0 - N ER0\nASCHER  AE1 - SH ER0\nASCHOFF  AE1 S K - HH AO0 F\nASCII  AE1 S - K IY0\nASCLAD  AE1 - S K L AE0 D\nASCORBIC  AH0 - S K AO1 R - B IH0 K\nASCOT  AE1 - S K AA2 T\nASCOTT  AH0 - S K AA1 T\nASCRIBE  AH0 - S K R AY1 B\nASCRIBED  AH0 - S K R AY1 B D\nASCRIBES  AH0 - S K R AY1 B Z\nASDA  AE1 S - D AH0\nASEA  AH0 - Z IY1 - AH0\nASEA(2)  EY1 - EH1 - S IY1 - EY1\nASEAN  AH0 - Z IY1 - AH0 N\nASEAN(2)  EY1 - EH1 - S IY1 - EY1 - EH1 N\nASEAN(3)  AE2 - Z EY1 - AH0 N\nASELMA  AH0 - S EH1 L - M AH0\nASELTINE  AA0 - S EH0 L - T IY1 - N IY0\nASENCIO  AH0 - S EH1 N - S IY0 - OW0\nASERITIS  AH0 - S EH1 - R IH0 - T IH0 S\nASH  AE1 SH\nASHAME  AH0 - SH EY1 M\nASHAMED  AH0 - SH EY1 M D\nASHARE  AE1 - SH EH2 R\nASHBAUGH  AH0 SH - B AO1\nASHBAUGH(2)  AE1 SH - B AO2\nASHBROOK  AE1 SH - B R UH2 K\nASHBURN  AE1 SH - B ER0 N\nASHBURY  AE1 SH - B EH0 - R IY0\nASHBY  AE1 SH - B IY0\nASHCRAFT  AE1 SH - K R AE2 F T\nASHCREEK  AE2 SH - K R IY1 K\nASHCROFT  AE1 SH - K R AO2 F T\nASHDOWN  AE1 SH - D AW2 N\nASHE  AE1 SH\nASHEN  AE1 - SH AH0 N\nASHENBERG  AE1 - SH AH0 N - B ER0 G\nASHENFELTER  AE1 - SH AH0 N - F EH2 L - T ER0\nASHER  AE1 - SH ER0\nASHES  AE1 - SH AH0 Z\nASHES(2)  AE1 - SH IH0 Z\nASHEVILLE  AE1 SH - V IH2 L\nASHEY  AE1 - SH IY0\nASHFORD  AE1 SH - F ER0 D\nASHIS  AH0 - SH IY1 Z\nASHISH  AH0 - SH IY1 SH\nASHLAND  AE1 SH - L AH0 N D\nASHLAND'S  AE1 SH - L AH0 N D Z\nASHLEY  AE1 SH - L IY0\nASHLEY'S  AE1 SH - L IY0 Z\nASHLIN  AE1 SH - L IH0 N\nASHLINE  AE1 SH - L AY2 N\nASHLOCK  AE1 SH - L AA2 K\nASHMAN  AE1 SH - M AH0 N\nASHMEAD  AE1 SH - M IY2 D\nASHMORE  AE1 SH - M AO0 R\nASHOK  AE1 - SH AA0 K\nASHORE  AH0 - SH AO1 R\nASHRAWI  AE0 SH - R AA1 - W IY0\nASHTEC  AE1 SH - T EH0 K\nASHTEC'S  AE1 SH - T EH0 K S\nASHTON  AE1 SH - T AH0 N\nASHTON'S  AE1 SH - T AH0 N Z\nASHTRAY  AE1 SH - T R EY2\nASHTRAYS  AE1 SH - T R EY2 Z\nASHUR  AE1 - SH ER0\nASHURST  AE1 - SH ER0 S T\nASHVILLE  AE1 SH - V IH2 L\nASHWELL  AE1 SH - W EH2 L\nASHWOOD  AE1 SH - W UH2 D\nASHWORTH  AE1 SH - W ER2 TH\nASHY  AE1 - SH IY0\nASIA  EY1 - ZH AH0\nASIA'S  EY1 - ZH AH0 Z\nASIAIN  EY1 - Z IY0 - EY2 N\nASIAMERICA  EY2 - S IY0 - AH0 - M EH1 - R IH0 - K AH0\nASIAN  EY1 - ZH AH0 N\nASIANS  EY1 - ZH AH0 N Z\nASIATIC  EY2 - ZH IY0 - AE1 - T IH0 K\nASIAWEEK  EY1 - ZH AH0 W - IY2 K\nASIC  AE1 - Z IH0 K\nASICS  AE1 - Z IH0 K S\nASIDE  AH0 - S AY1 D\nASIDES  AH0 - S AY1 D Z\nASIEL  AE1 - Z IY0 - AH0 L\nASIMOV  AE1 - S IH0 - M AA0 V\nASIMOV'S  AE1 - S IH0 - M AA0 V Z\nASIMOV'S(2)  AE1 - Z IH0 - M AA0 V Z\nASIMOV(2)  AE1 - Z IH0 - M AA0 V\nASIMOW  AE1 - S IH0 - M OW0\nASININE  AE1 - S AH0 - N AY2 N\nASK  AE1 S K\nASKA  AE1 - S K AH0\nASKANCE  AH0 - S K AE1 N S\nASKED  AE1 S K T\nASKED(2)  AO1 S K T\nASKER  AE1 - S K ER0\nASKER'S  AE1 - S K ER0 Z\nASKERS  AE1 - S K ER0 Z\nASKERS'  AE1 - S K ER0 Z\nASKERS'S  AE1 - S K ER0 - Z IH0 Z\nASKEW  AH0 - S K Y UW1\nASKEY  AH0 - S K IY1\nASKIN  AH0 - S K IH1 N\nASKIN'S  AE1 - S K IH2 N Z\nASKING  AE1 - S K IH0 NG\nASKINGTON  AE1 - S K IH0 NG - T AH0 N\nASKINS  AH0 - S K IH1 N Z\nASKO  AE1 - S K OW0\nASKOLDOV  AH0 - S K OW1 L - D AA0 V\nASKOLDOV'S  AH0 - S K OW1 L - D AA0 V Z\nASKREN  AE1 - S K ER0 - AH0 N\nASKS  AE1 S K S\nASLANIAN  AH0 - S L EY1 - N IY0 - AH0 N\nASLEEP  AH0 - S L IY1 P\nASLESON  AE1 S - L IH0 - S AH0 N\nASLESON(2)  AE1 - S IH0 L - S AH0 N\nASLIN  AH0 - S L IH1 N\nASMAN  AE1 S - M AH0 N\nASMARA  AE2 Z - M AA1 - R AH0\nASMARAS  AE2 Z - M AA1 - R AH0 Z\nASMUS  AH0 Z - M UW1 S\nASMUSSEN  AH0 Z - M AH1 - S AH0 N\nASNER  AE1 S - N ER0\nASP  AE1 S P\nASPARAGUS  AH0 - S P EH1 - R AH0 - G AH0 S\nASPARTAME  AE1 - S P ER0 - T EY2 M\nASPECT  AE1 - S P EH2 K T\nASPECTS  AE1 - S P EH2 K T S\nASPEN  AE1 - S P AH0 N\nASPEN'S  AE1 - S P AH0 N Z\nASPENS  AE1 - S P AH0 N Z\nASPER  AE1 - S P ER0\nASPERSION  AH0 - S P ER1 - ZH AH0 N\nASPERSIONS  AH0 - S P ER1 - ZH AH0 N Z\nASPHALT  AE1 S - F AO2 L T\nASPIN  AE1 - S P IH0 N\nASPIN'S  AE1 - S P IH0 N Z\nASPINALL  AE1 - S P IH0 - N AO0 L\nASPINWALL  AE1 - S P IH0 N - W AO0 L\nASPIRANT  AE1 - S P ER0 - AH0 N T\nASPIRANT(2)  AH0 - S P AY1 - R AH0 N T\nASPIRANTS  AE1 - S P ER0 - AH0 N T S\nASPIRANTS(2)  AH0 - S P AY1 - R AH0 N T S\nASPIRANTS(3)  AE1 - S P ER0 - AH0 N S\nASPIRANTS(4)  AH0 - S P AY1 - R AH0 N S\nASPIRATE  AE1 - S P ER0 - EY2 T\nASPIRATED  AE1 - S P ER0 - EY2 - T IH0 D\nASPIRATES  AE1 - S P ER0 - EY2 T S\nASPIRATION  AE2 - S P ER0 - EY1 - SH AH0 N\nASPIRATIONS  AE2 - S P ER0 - EY1 - SH AH0 N Z\nASPIRE  AH0 - S P AY1 R\nASPIRED  AH0 - S P AY1 R D\nASPIRES  AH0 - S P AY1 - ER0 Z\nASPIRIN  AE1 - S P R IH0 N\nASPIRIN'S  AE1 S - P R AH0 N Z\nASPIRING  AH0 - S P AY1 - R IH0 NG\nASPLUND  AE1 S - P L AH0 N D\nASPNES  AE1 - S P N EH0 Z\nASQUITH  AE1 - S K W IH0 TH\nASS  AE1 S\nASSAD  AH0 - S AA1 D\nASSAD'S  AH0 - S AA1 D Z\nASSAF  AH0 - S AE1 F\nASSAIL  AH0 - S EY1 L\nASSAILANT  AH0 - S EY1 - L AH0 N T\nASSAILANT'S  AH0 - S EY1 - L AH0 N T S\nASSAILANTS  AH0 - S EY1 - L AH0 N T S\nASSAILED  AH0 - S EY1 L D\nASSAILING  AH0 - S EY1 - L IH0 NG\nASSAILS  AH0 - S EY1 L Z\nASSANTE  AA0 - S AA1 N - T IY0\nASSASSIN  AH0 - S AE1 - S AH0 N\nASSASSIN'S  AH0 - S AE1 - S AH0 N Z\nASSASSINATE  AH0 - S AE1 - S AH0 - N EY2 T\nASSASSINATED  AH0 - S AE1 - S AH0 - N EY2 - T AH0 D\nASSASSINATING  AH0 - S AE1 - S AH0 - N EY2 - T IH0 NG\nASSASSINATION  AH0 - S AE2 - S AH0 - N EY1 - SH AH0 N\nASSASSINATIONS  AH0 - S AE2 - S AH0 - N EY1 - SH AH0 N Z\nASSASSINS  AH0 - S AE1 - S AH0 N Z\nASSAULT  AH0 - S AO1 L T\nASSAULTED  AH0 - S AO1 L - T IH0 D\nASSAULTING  AH0 - S AO1 L - T IH0 NG\nASSAULTIVE  AH0 - S AO1 L - T IH0 V\nASSAULTS  AH0 - S AO1 L T S\nASSAY  AE1 - S IY0\nASSAYER  AE0 - S EY1 - ER0\nASSED  AE1 S T\nASSELIN  AE1 - S IH0 - L IH0 N\nASSELSTINE  AE1 - S AH0 L - S T AY2 N\nASSEMBLAGE  AH0 - S EH1 M - B L AH0 JH\nASSEMBLAGE(2)  AH0 - S EH1 M - B L IH0 JH\nASSEMBLE  AH0 - S EH1 M - B AH0 L\nASSEMBLED  AH0 - S EH1 M - B AH0 L D\nASSEMBLER  AH0 - S EH1 M - B L ER0\nASSEMBLERS  AH0 - S EH1 M - B L ER0 Z\nASSEMBLES  AH0 - S EH1 M - B AH0 L Z\nASSEMBLIES  AH0 - S EH1 M - B L IY0 Z\nASSEMBLING  AH0 - S EH1 M - B AH0 L - IH0 NG\nASSEMBLING(2)  AH0 - S EH1 M - B L IH0 NG\nASSEMBLY  AH0 - S EH1 M - B L IY0\nASSEMBLY'S  AH0 - S EH1 M - B L IY0 Z\nASSEMBLYMAN  AH0 - S EH1 M - B L IY0 - M AE2 N\nASSEMBLYMAN(2)  AH0 - S EH1 M - B L IY0 - M AH0 N\nASSEMBLYMEN  AH0 - S EH1 M - B L IY0 - M IH0 N\nASSEMBLYWOMAN  AH0 - S EH1 M - B L IY0 - W UH2 - M AH0 N\nASSENT  AH0 - S EH1 N T\nASSERT  AH0 - S ER1 T\nASSERTED  AH0 - S ER1 - T AH0 D\nASSERTEDLY  AH0 - S ER1 - T IH0 D - L IY0\nASSERTING  AH0 - S ER1 - T IH0 NG\nASSERTION  AH0 - S ER1 - SH AH0 N\nASSERTIONS  AH0 - S ER1 - SH AH0 N Z\nASSERTIVE  AH0 - S ER1 - T IH0 V\nASSERTIVELY  AH0 - S ER1 - T IH0 V - L IY0\nASSERTIVENESS  AH0 - S ER1 - T IH0 V - N AH0 S\nASSERTS  AH0 - S ER1 T S\nASSES  AE1 - S AH0 Z\nASSESS  AH0 - S EH1 S\nASSESSED  AH0 - S EH1 S T\nASSESSES  AH0 - S EH1 - S IH0 Z\nASSESSING  AH0 - S EH1 - S IH0 NG\nASSESSMENT  AH0 - S EH1 S - M AH0 N T\nASSESSMENTS  AH0 - S EH1 S - M AH0 N T S\nASSESSOR  AH0 - S EH1 - S ER0\nASSESSORS  AH0 - S EH1 - S ER0 Z\nASSET  AE1 - S EH2 T\nASSETS  AE1 - S EH2 T S\nASSETS'  AE1 - S EH0 T S\nASSICURAZIONI  AH0 - S IY2 - K ER0 - AE2 - Z IY0 - OW1 - N IY0\nASSIDUOUS  AH0 - S IH1 - D W AH0 S\nASSIDUOUSLY  AH0 - S IH1 - D W AH0 S - L IY0\nASSIGN  AH0 - S AY1 N\nASSIGNED  AH0 - S AY1 N D\nASSIGNING  AH0 - S AY1 - N IH0 NG\nASSIGNMENT  AH0 - S AY1 N - M AH0 N T\nASSIGNMENT'S  AH0 - S AY1 N - M AH0 N T S\nASSIGNMENTS  AH0 - S AY1 N - M AH0 N T S\nASSIGNS  AH0 - S AY1 N Z\nASSIMILATE  AH0 - S IH1 - M AH0 - L EY2 T\nASSIMILATED  AH0 - S IH1 - M AH0 - L EY2 - T IH0 D\nASSIMILATING  AH0 - S IH1 - M AH0 - L EY2 - T IH0 NG\nASSIMILATION  AH0 - S IH2 - M AH0 - L EY1 - SH AH0 N\nASSISI  AH0 - S IY1 - S IY0\nASSIST  AH0 - S IH1 S T\nASSISTANCE  AH0 - S IH1 - S T AH0 N S\nASSISTANT  AH0 - S IH1 - S T AH0 N T\nASSISTANTS  AH0 - S IH1 - S T AH0 N T S\nASSISTED  AH0 - S IH1 - S T AH0 D\nASSISTED(2)  AH0 - S IH1 - S T IH0 D\nASSISTING  AH0 - S IH1 - S T IH0 NG\nASSISTS  AH0 - S IH1 S T S\nASSISTS(2)  AH0 - S IH1 S S\nASSISTS(3)  AH0 - S IH1 S\nASSOCATION  AE2 - S AH0 - K EY1 - SH AH0 N\nASSOCIATE  AH0 - S OW1 - S IY0 - AH0 T\nASSOCIATE'S  AH0 - S OW1 - S IY0 - AH0 T S\nASSOCIATE'S(2)  AH0 - S OW1 - SH IY0 - AH0 T S\nASSOCIATE(2)  AH0 - S OW1 - S IY0 - EY2 T\nASSOCIATE(3)  AH0 - S OW1 - SH IY0 - AH0 T\nASSOCIATE(4)  AH0 - S OW1 - SH IY0 - EY2 T\nASSOCIATED  AH0 - S OW1 - S IY0 - EY2 - T AH0 D\nASSOCIATED(2)  AH0 - S OW1 - SH IY0 - EY2 - T AH0 D\nASSOCIATES  AH0 - S OW1 - S IY0 - AH0 T S\nASSOCIATES'  AH0 - S OW1 - SH IY0 - AH0 T S\nASSOCIATES'(2)  AH0 - S OW1 - S IY0 - AH0 T S\nASSOCIATES(2)  AH0 - S OW1 - S IY0 - EY2 T S\nASSOCIATES(3)  AH0 - S OW1 - SH IY0 - AH0 T S\nASSOCIATES(4)  AH0 - S OW1 - SH IY0 - EY2 T S\nASSOCIATING  AH0 - S OW1 - S IY0 - EY2 - T IH0 NG\nASSOCIATION  AH0 - S OW2 - S IY0 - EY1 - SH AH0 N\nASSOCIATION'S  AH0 - S OW2 - SH IY0 - EY1 - SH AH0 N Z\nASSOCIATION(2)  AH0 - S OW2 - SH IY0 - EY1 - SH AH0 N\nASSOCIATIONS  AH0 - S OW2 - S IY0 - EY1 - SH AH0 N Z\nASSOCIATIONS(2)  AH0 - S OW2 - SH IY0 - EY1 - SH AH0 N Z\nASSOCIES  AE1 - S AH0 - S IY0 Z\nASSORT  AH0 - S AO1 R T\nASSORTED  AH0 - S AO1 R - T IH0 D\nASSORTMENT  AH0 - S AO1 R T - M AH0 N T\nASSUAGE  AH0 - S W EY1 JH\nASSUAGED  AH0 - S W EY1 JH D\nASSUBEL  AE1 - S AH0 - B EH2 L\nASSUME  AH0 - S UW1 M\nASSUMED  AH0 - S UW1 M D\nASSUMES  AH0 - S UW1 M Z\nASSUMING  AH0 - S UW1 - M IH0 NG\nASSUMPTION  AH0 - S AH1 M P - SH AH0 N\nASSUMPTIONS  AH0 - S AH1 M P - SH AH0 N Z\nASSURANCE  AH0 - SH UH1 - R AH0 N S\nASSURANCES  AH0 - SH UH1 - R AH0 N - S IH0 Z\nASSURANCES(2)  AH0 - SH UH1 - R AH0 N T - S IH0 Z\nASSURAS  AH0 - SH UH1 - R AH0 S\nASSURE  AH0 - SH UH1 R\nASSURED  AH0 - SH UH1 R D\nASSUREDLY  AH0 - SH UH1 - R AH0 D - L IY0\nASSURES  AH0 - SH UH1 R Z\nASSURING  AH0 - SH UH1 - R IH0 NG\nASSYRIA  AH0 - S IH1 - R IY0 - AH0\nASSYRIAN  AH0 - S IH1 - R IY0 - AH0 N\nASSYRIANS  AH0 - S IH1 - R IY0 - AH0 N Z\nAST  AE1 S T\nASTA  AA1 - S T AH0\nASTAIRE  AH0 - S T EH1 R\nASTER  AE1 - S T ER0\nASTERISK  AE1 - S T ER0 - IH0 S K\nASTEROID  AE1 - S T ER0 - OY2 D\nASTEROID'S  AE1 - S T ER0 - OY2 D Z\nASTEROIDS  AE1 - S T ER0 - OY2 D Z\nASTERS  AE1 - S T ER0 Z\nASTHMA  AE1 Z - M AH0\nASTHMATIC  AE0 Z - M AE1 - T IH0 K\nASTHMATICS  EH0 S TH - M EH1 - T IH0 K S\nASTIGMATISM  AH0 - S T IH1 G - M AH0 - T IH2 - Z AH0 M\nASTIN  AH0 - S T IH1 N\nASTLE  AE1 - S AH0 L\nASTLEY  AE1 S T - L IY0\nASTON  AE1 - S T AH0 N\nASTONISH  AH0 - S T AA1 - N IH0 SH\nASTONISHED  AH0 - S T AA1 - N IH0 SH T\nASTONISHING  AH0 - S T AA1 - N IH0 - SH IH0 NG\nASTONISHINGLY  AH0 - S T AA1 - N IH0 - SH IH0 NG - L IY0\nASTONISHMENT  AH0 - S T AA1 - N IH0 SH - M AH0 N T\nASTOR  AE1 - S T ER0\nASTOR'S  AE1 - S T ER0 Z\nASTORGA  AA0 - S T AO1 R - G AH0\nASTORIA  AE2 - S T AO1 - R IY0 - AH0\nASTORINO  AA0 - S T AO0 - R IY1 - N OW0\nASTOUND  AH0 - S T AW1 N D\nASTOUNDED  AH0 - S T AW1 N - D IH0 D\nASTOUNDING  AH0 - S T AW1 N - D IH0 NG\nASTOUNDINGLY  AH0 - S T AW1 N - D IH0 NG - L IY0\nASTOUNDS  AH0 - S T AW1 N D Z\nASTRA  AE1 S - T R AH0\nASTRA'S  AE1 - S T R AH0 Z\nASTRADDLE  AH0 - S T R AE1 - D AH0 L\nASTRAKHAN  AE1 - S T R AH0 - K AA0 N\nASTRAL  AE1 S - T R AH0 L\nASTRAY  AH0 - S T R EY1\nASTRED  AE1 - S T ER0 D\nASTRID  AE1 - S T R IH0 D\nASTRIDE  AH0 - S T R AY1 D\nASTRINGENT  AH0 - S T R IH1 N - JH AH0 N T\nASTRINGENTS  AH0 - S T R IH1 N - JH AH0 N T S\nASTRO  AE1 - S T R OW0\nASTRODOME  AE1 - S T R AH0 - D OW2 M\nASTROGEOLOGY  AE2 - S T R AH0 - JH IY2 - AA1 - L AH0 - JH IY0\nASTROLOGER  AH0 - S T R AA1 - L AH0 - JH ER0\nASTROLOGERS  AH0 - S T R AA1 - L AH0 - JH ER0 Z\nASTROLOGICAL  AE2 S - T R AH0 - L AA1 - JH IH0 - K AH0 L\nASTROLOGY  AH0 - S T R AA1 - L AH0 - JH IY0\nASTRONAUT  AE1 - S T R AH0 - N AA2 T\nASTRONAUT'S  AE1 - S T R AH0 - N AA2 T S\nASTRONAUTIC  AE2 - S T R AH0 - N AA1 - T IH0 K\nASTRONAUTICAL  AE2 - S T R AH0 - N AA1 - T IH0 - K AH0 L\nASTRONAUTICS  AE2 - S T R AH0 - N AA1 - T IH0 K S\nASTRONAUTS  AE1 - S T R AH0 - N AO2 T S\nASTRONAUTS'  AE1 - S T R AH0 - N AO2 T S\nASTRONOMER  AH0 - S T R AA1 - N AH0 - M ER0\nASTRONOMERS  AH0 - S T R AA1 - N AH0 - M ER0 Z\nASTRONOMICAL  AE2 - S T R AH0 - N AA1 - M IH0 - K AH0 L\nASTRONOMICALLY  AE2 - S T R AH0 - N AA1 - M IH0 K - L IY0\nASTRONOMY  AH0 - S T R AA1 - N AH0 - M IY0\nASTROPHOTOGRAPHY  AE2 - S T R OW0 - F AH0 - T AA1 - G R AH0 - F IY0\nASTROPHYSICIST  AE2 - S T R OW0 - F IH1 - S IH0 - S IH0 S T\nASTROPHYSICS  AE2 S - T R OW0 - F IH1 - Z IH0 K S\nASTROS  AE1 S - T R OW0 S\nASTROTECH  AE1 - S T R OW0 - T EH2 K\nASTROTURF  AE1 - S T R OW0 - T ER2 F\nASTUTE  AH0 - S T UW1 T\nASTUTELY  AH0 - S T UW1 T - L IY0\nASTUTENESS  AH0 - S T UW1 T - N AH0 S\nASUNCION  AH0 - S AH1 N - SH AH0 N\nASUNDER  AH0 - S AH1 N - D ER0\nASWIN  AH0 - S W IH1 N\nASYLUM  AH0 - S AY1 - L AH0 M\nASYMMETRICAL  EY2 - S AH0 - M EH1 - T R IH0 - K AH0 L\nASYMMETRIES  EY2 - S IH1 - M AH0 - T R IY0 Z\nASYMMETRY  EY2 - S IH1 - M AH0 - T R IY0\nASYMPTOMATIC  EY2 - S IH2 M P - T AH0 - M AE1 - T IH0 K\nASYMPTOTE  AE1 - S AH0 M - T OW2 T\nASYMPTOTE(2)  AE1 - S IH0 M P - T OW2 T\nASYMPTOTES  AE1 - S AH0 M - T OW2 T S\nASYMPTOTES(2)  AE1 - S IH0 M P - T OW2 T S\nASYNCHRONOUS  EY1 - S IH1 NG - K R AH0 - N AH0 S\nAT  AE1 T\nAT-BAT  AE1 T - B AE1 T\nAT-BATS  AE1 T - B AE1 T S\nATA  AA1 - T AH0\nATALANTA  AE2 - T AH0 - L AE1 N - T AH0\nATALAYA  AA0 - T AA0 - L EY1 - AH0\nATALIA  AA0 - T AA1 - L IY0 - AH0\nATALIE  AE1 - T AH0 - L IY0\nATAMIAN  AH0 - T EY1 - M IY0 - AH0 N\nATARI  AH0 - T AA1 - R IY0\nATARI'S  AH0 - T AA1 - R IY0 Z\nATATURK  AE1 - T AH0 - T ER2 K\nATATURK'S  AE1 - T AH0 - T ER2 K S\nATAVISM  AE1 - T AH0 - V IH0 - Z AH0 M\nATAVISTIC  AE1 - T AH0 - V IH0 - S T IH0 K\nATAXIA  EY1 - T AE1 K - S IY0 - AH0\nATAXIA'S  EY1 - T AE1 K - S IY0 - AH0 Z\nATCHESON  AE1 - CH IH0 - S AH0 N\nATCHINSON  AE1 - CH IH0 N - S AH0 N\nATCHISON  AE1 - CH IH0 - S AH0 N\nATCHLEY  AE1 CH - L IY0\nATCO  AE1 T - K OW0\nATCOR  AE1 T - K AO0 R\nATE  EY1 T\nATEK  EY1 - T EH2 K\nATEN  EY1 - T AH0 N\nATENCIO  AH0 - T EH1 N - S IY0 - OW0\nATER  EY1 - T ER0\nATES  EY1 T S\nATHA  AE1 - TH AH0\nATHALIA  EY0 - TH AE1 - L IY0 - AH0\nATHANAS  EY0 - TH AE1 - N AH0 Z\nATHANASSIOU  AA2 - TH AH0 - N AH0 - S IY1 - UW0\nATHANS  AE1 - TH AH0 N Z\nATHAS  EY1 - DH AH0 Z\nATHEARN  EY1 - TH ER0 N\nATHEISM  AH0 - TH AY1 - S AH0 M\nATHEISM(2)  EY1 - TH IY0 - IH2 - Z AH0 M\nATHEIST  EY1 - TH IY0 - AH0 S T\nATHEISTIC  EY2 - TH IY0 - IH1 - S T IH0 K\nATHEISTS  EY1 - TH IY0 - AH0 S T S\nATHEISTS(2)  EY1 - TH IY0 - AH0 S S\nATHEISTS(3)  EY1 - TH IY0 - AH0 S\nATHENA  AH0 - TH IY1 - N AH0\nATHENAEUM  AE2 - TH AH0 - N IY1 - AH0 M\nATHENAIOS  AE2 - TH AH0 - N AY1 - OW0 S\nATHENEUM  AE1 - TH AH0 - N UW0 M\nATHENIAN  AH0 - TH IY1 - N IY0 - AH0 N\nATHENIANS  AH0 - TH IY1 - N IY0 - AH0 N Z\nATHENS  AE1 - TH AH0 N Z\nATHEROSCLEROSIS  AE2 - TH ER0 - OW0 - S K L ER0 - OW1 - S IH0 S\nATHERTON  AE1 - TH ER0 - T AH0 N\nATHEY  AE1 - TH IY0\nATHIE  EY1 - TH IY0\nATHLETE  AE1 TH - L IY2 T\nATHLETE'S  AE1 TH - L IY2 T S\nATHLETES  AE1 TH - L IY2 T S\nATHLETES'  AE1 TH - L IY2 T S\nATHLETIC  AE0 TH - L EH1 - T IH0 K\nATHLETICALLY  AE0 TH - L EH1 - T IH0 K - L IY0\nATHLETICISM  AE0 TH - L EH1 - T IH0 - S IH2 Z M\nATHLETICS  AE0 TH - L EH1 - T IH0 K S\nATHLONE  AE0 TH - L OW1 N\nATHWART  AH0 - TH W AO1 R T\nATICO  AE1 - T IH0 - K OW2\nATIENZA  AA0 - T IY1 N - Z AH0\nATILANO  AA0 - T IY0 - L AA1 - N OW0\nATKERSON  AE1 T - K ER0 - S AH0 N\nATKIN  AH0 T - K IH1 N\nATKINS  AE1 T - K IH0 N Z\nATKINS'S  AE1 T - K IH0 N - Z IH0 Z\nATKINSON  AE1 T - K AH0 N - S AH0 N\nATKINSON'S  AE1 T - K AH0 N - S AH0 N Z\nATKINSON'S(2)  AE1 T - K IH0 N - S AH0 N Z\nATKINSON(2)  AE1 T - K IH0 N - S AH0 N\nATKISON  AE1 T - K IH0 - S AH0 N\nATKISSON  AE1 T - K IH0 - S AH0 N\nATLA  AE1 T - L AH0\nATLANTA  AE0 T - L AE1 N - T AH0\nATLANTA'S  AE0 T - L AE1 N - T AH0 Z\nATLANTA'S(2)  AE0 T - L AE1 - N AH0 Z\nATLANTA(2)  AH0 T - L AE1 N - T AH0\nATLANTA(3)  AE0 T - L AE1 - N AH0\nATLANTA(4)  AH0 T - L AE1 - N AH0\nATLANTAN  AE2 T - L AE1 N - T AH0 N\nATLANTAN(2)  AE2 T - L AE1 - N AH0 N\nATLANTANS  AE2 T - L AE1 N - T AH0 N Z\nATLANTANS(2)  AE2 T - L AE1 - N AH0 N Z\nATLANTIC  AH0 T - L AE1 N - T IH0 K\nATLANTIC'S  AH0 T - L AE1 N - T IH0 K S\nATLANTIC'S(2)  AH0 T - L AE1 - N IH0 K S\nATLANTIC(2)  AH0 T - L AE1 - N IH0 K\nATLANTICA  AE2 T - L AE1 N - T IH0 - K AH0\nATLANTICO  AE2 T - L AE1 N - T IH0 - K OW0\nATLANTIS  AE0 T - L AE1 N - T IH0 S\nATLANTIS'  AE0 T - L AE1 N - T IH0 S\nATLANTIS'(2)  AE0 T - L AE1 N - T IH0 - S IH0 Z\nATLANTIS'S  AE0 T - L AE1 N - T IH0 - S IH0 Z\nATLANTIS(2)  AE0 T - L AE1 - N IH0 S\nATLAS  AE1 T - L AH0 S\nATLAS'S  AE1 T - L AH0 - S IH0 Z\nATLASES  AE0 T - L EY1 - S IH0 Z\nATLASES(2)  AE1 T - L AH0 - S IH0 Z\nATLER  AE1 T - L ER0\nATLEY  AE1 T - L IY0\nATMEL  AE1 T - M AH0 L\nATMOSPHERE  AE1 T - M AH0 - S F IH2 R\nATMOSPHERIC  AE2 T - M AH0 S - F EH1 - R IH0 K\nATMOSPHERICS  AE2 T - M AH0 S - F EH1 - R IH0 K S\nATNIP  AE1 T - N IH0 P\nATOCHA  AH0 - T AA1 - CH AH0\nATOLL  AE1 - T AA0 L\nATOM  AE1 - T AH0 M\nATOMIC  AH0 - T AA1 - M IH0 K\nATOMIZER  AE1 - T AH0 - M AY2 - Z ER0\nATOMS  AE1 - T AH0 M Z\nATON  AH0 - T AA1 N\nATONAL  EY0 - T OW1 - N AH0 L\nATONE  AH0 - T OW1 N\nATONEMENT  AH0 - T OW1 N - M AH0 N T\nATOP  AH0 - T AA1 P\nATOR  EH1 - T ER0\nATORINO  AE2 - T ER0 - IY1 - N OW0\nATP  EY1 - T IY1 - P IY1\nATRA  EY1 - T R AH0\nATRIA  EY1 - T R IY0 - AH0\nATRIUM  EY1 - T R IY0 - AH0 M\nATROCIOUS  AH0 - T R OW1 - SH AH0 S\nATROCITIES  AH0 - T R AA1 - S AH0 - T IY0 Z\nATROCITY  AH0 - T R AA1 - S AH0 - T IY0\nATROPHIED  AE1 - T R AH0 - F IY0 D\nATROPHY  AE1 - T R AH0 - F IY0\nATSUSHI  AA0 - S S UW0 - SH IY0\nATSUSHI(2)  AA0 - S UW0 - SH IY0\nATTA  AE1 - T AH0\nATTABOY  AE1 - T AH0 - B OY2\nATTABOYS  AE1 - T AH0 - B OY2 Z\nATTACH  AH0 - T AE1 CH\nATTACHE  AE2 - T AH0 - SH EY1\nATTACHED  AH0 - T AE1 CH T\nATTACHES  AH0 - T AE1 - CH IH0 Z\nATTACHING  AH0 - T AE1 - CH IH0 NG\nATTACHMENT  AH0 - T AE1 CH - M AH0 N T\nATTACHMENTS  AH0 - T AE1 CH - M AH0 N T S\nATTACK  AH0 - T AE1 K\nATTACKED  AH0 - T AE1 K T\nATTACKER  AH0 - T AE1 - K ER0\nATTACKERS  AH0 - T AE1 - K ER0 Z\nATTACKING  AH0 - T AE1 - K IH0 NG\nATTACKS  AH0 - T AE1 K S\nATTAIN  AH0 - T EY1 N\nATTAINABLE  AH0 - T EY1 - N AH0 - B AH0 L\nATTAINDER  AH0 - T EY1 N - D ER0\nATTAINED  AH0 - T EY1 N D\nATTAINING  AH0 - T EY1 - N IH0 NG\nATTAINMENT  AH0 - T EY1 N - M AH0 N T\nATTAINS  AH0 - T EY1 N Z\nATTALI  AH0 - T AA1 - L IY0\nATTALLA  AH0 - T AE1 - L AH0\nATTANASIO  AA0 - T AA0 - N AA1 - S IY0 - OW0\nATTAR  AE1 - T ER0\nATTARD  AE1 - T ER0 D\nATTARDO  AA0 - T AA1 R - D OW0\nATTAWAY  AE1 T - AH0 - W EY0\nATTEBERRY  AE1 T - B EH0 - R IY0\nATTEBERY  AH0 - T EH1 - B ER0 - IY0\nATTEBURY  AE1 T - B EH0 - R IY0\nATTEMPT  AH0 - T EH1 M P T\nATTEMPTED  AH0 - T EH1 M P - T AH0 D\nATTEMPTING  AH0 - T EH1 M P - T IH0 NG\nATTEMPTS  AH0 - T EH1 M P T S\nATTEMPTS(2)  AH0 - T EH1 M P S\nATTENBOROUGH  AE1 - T AH2 N - B ER0 - OW0\nATTEND  AH0 - T EH1 N D\nATTENDANCE  AH0 - T EH1 N - D AH0 N S\nATTENDANT  AH0 - T EH1 N - D AH0 N T\nATTENDANTS  AH0 - T EH1 N - D AH0 N T S\nATTENDANTS'  AH0 - T EH1 N - D AH0 N T S\nATTENDED  AH0 - T EH1 N - D AH0 D\nATTENDEE  AH0 - T EH1 N - D IY1\nATTENDEES  AH0 - T EH1 N - D IY1 Z\nATTENDING  AH0 - T EH1 N - D IH0 NG\nATTENDS  AH0 - T EH1 N D Z\nATTENTION  AH0 - T EH1 N - SH AH0 N\nATTENTIONS  AH0 - T EH1 N - SH AH0 N Z\nATTENTIVE  AH0 - T EH1 N - T IH0 V\nATTENTIVELY  AH0 - T EH1 N - T IH0 V - L IY0\nATTENTIVENESS  AH0 - T EH1 N - T IH0 V - N AH0 S\nATTENUATE  AH0 - T EH1 - N Y UW0 - EY2 T\nATTENUATED  AH0 - T EH1 - N Y UW0 - EY2 - T IH0 D\nATTENUATES  AH0 - T EH1 - N Y UW0 - EY2 T S\nATTERBERRY  AE1 - T ER0 - B EH0 - R IY0\nATTERBURY  AE1 - T ER0 - B EH2 - R IY0\nATTERMANN  AE1 - T ER0 - M AH0 N\nATTEST  AH0 - T EH1 S T\nATTESTED  AH0 - T EH1 - S T IH0 D\nATTESTING  AH0 - T EH1 - S T IH0 NG\nATTESTS  AH0 - T EH1 S T S\nATTESTS(2)  AH0 - T EH1 S S\nATTESTS(3)  AH0 - T EH1 S\nATTIC  AE1 - T IH0 K\nATTICA  AE1 - T IH0 - K AH0\nATTICS  AE1 - T IH0 K S\nATTICUS  AE1 - T IH0 - K AH0 S\nATTIE  AE1 - T IY0\nATTILA  AH0 - T IH1 - L AH0\nATTILA'S  AH0 - T IH1 - L AH0 Z\nATTIRE  AH0 - T AY1 - ER0\nATTIRED  AH0 - T AY1 R D\nATTITUDE  AE1 - T AH0 - T UW2 D\nATTITUDES  AE1 - T AH0 - T UW2 D Z\nATTITUDINAL  AE2 - T AH0 - T UW1 - D AH0 - N AH0 L\nATTKISSON  AE1 T - K IH0 - S AH0 N\nATTLEBORO  AE1 - T AH0 L - B ER0 - OW0\nATTLEE  AE1 T - L IY0\nATTORNEY  AH0 - T ER1 - N IY0\nATTORNEY'S  AH0 - T ER1 - N IY0 Z\nATTORNEYS  AH0 - T ER1 - N IY0 Z\nATTORNEYS'  AH0 - T ER1 - N IY0 Z\nATTRACT  AH0 - T R AE1 K T\nATTRACTED  AH0 - T R AE1 K - T AH0 D\nATTRACTING  AH0 - T R AE1 K - T IH0 NG\nATTRACTION  AH0 - T R AE1 K - SH AH0 N\nATTRACTIONS  AH0 - T R AE1 K - SH AH0 N Z\nATTRACTIVE  AH0 - T R AE1 K - T IH0 V\nATTRACTIVELY  AH0 - T R AE1 K - T IH0 V - L IY0\nATTRACTIVENESS  AH0 - T R AE1 K - T IH0 V - N AH0 S\nATTRACTS  AH0 - T R AE1 K T S\nATTRIBUTABLE  AH0 - T R IH1 - B Y AH0 - T AH0 - B AH0 L\nATTRIBUTE  AE1 - T R AH0 - B Y UW2 T\nATTRIBUTE(2)  AH0 - T R IH1 - B Y UW2 T\nATTRIBUTED  AH0 - T R IH1 - B Y AH0 - T AH0 D\nATTRIBUTES  AE1 - T R AH0 - B Y UW2 T S\nATTRIBUTES(2)  AH0 - T R IH1 - B Y UW2 T S\nATTRIBUTING  AH0 - T R IH1 - B Y AH0 - T IH0 NG\nATTRIBUTION  AE2 - T R IH0 - B Y UW1 - SH AH0 N\nATTRIDGE  AH0 - T R IH1 JH\nATTRITION  AH0 - T R IH1 - SH AH0 N\nATTUNE  AH0 - T UW1 N\nATTUNED  AH0 - T UW1 N D\nATTWOOD  AE1 T - W UH2 D\nATTWOODS  AE1 T - W UH2 D Z\nATWATER  AE1 T - W AO0 - T ER0\nATWELL  AH0 T - W EH1 L\nATWOOD  AE1 T - W UH2 D\nATWORTH  AE1 T - W ER0 TH\nATX  EY1 - T IY1 - EH1 K S\nATYPICAL  EY0 - T IH1 - P IH0 - K AH0 L\nATZ  AE1 T S\nAU  OW1\nAUBE  AO1 B\nAUBEL  AW1 - B AH0 L\nAUBER  AO1 - B ER0\nAUBERRY  AO1 - B EH2 - R IY0\nAUBERT  AO1 - B ER0 T\nAUBIN  AO1 - B IH0 N\nAUBLE  AO1 - B AH0 L\nAUBREY  AO1 - B R IY0\nAUBRY  AO1 - B R IY0\nAUBUCHON  OW1 - B AH0 - SH AA0 N\nAUBURN  AA1 - B ER0 N\nAUCH  AO1 CH\nAUCHTER  AW1 K - T ER0\nAUCKLAND  AA1 - K L AH0 N D\nAUCLAIR  OW0 - K L EH1 R\nAUCOIN  OW0 - K OY1 N\nAUCOTT  AO1 - K AA2 T\nAUCTION  AA1 K - SH AH0 N\nAUCTION'S  AO1 K - SH AH0 N Z\nAUCTION(2)  AO1 K - SH AH0 N\nAUCTIONED  AO1 K - SH AH0 N D\nAUCTIONEER  AA2 K - SH AH0 - N IH1 R\nAUCTIONEERING  AO2 K - SH AH0 - N IH1 - R IH0 NG\nAUCTIONEERS  AO1 K - SH AH0 - N IH1 R Z\nAUCTIONING  AO1 K - SH AH0 N - IH0 NG\nAUCTIONS  AA1 K - SH AH0 N Z\nAUCTIONS(2)  AO1 K - SH AH0 N Z\nAUD  AO1 D\nAUDACIOUS  AA0 - D EY1 - SH AH0 S\nAUDACITY  AA0 - D AE1 - S AH0 - T IY0\nAUDAS  OW0 - D AA1 Z\nAUDEN  AO1 - D AH0 N\nAUDERBURN  AO1 - D ER0 - B ER0 N\nAUDET  OW0 - D EH1 T\nAUDETTE  OW0 - D EH1 T\nAUDI  AO1 - D IY0\nAUDI'S  AO1 - D IY0 Z\nAUDI'S(2)  AW1 - D IY0 Z\nAUDI(2)  AW1 - D IY0\nAUDIA  AO1 - D IY0 - AH0\nAUDIBLE  AA1 - D AH0 - B AH0 L\nAUDIBLY  AA1 - D AH0 - B L IY0\nAUDIENCE  AA1 - D IY0 - AH0 N S\nAUDIENCE'S  AA1 - D IY0 - AH0 N - S AH0 Z\nAUDIENCE'S(2)  AO1 - D IY0 - AH0 N - S AH0 Z\nAUDIENCE(2)  AO1 - D IY0 - AH0 N S\nAUDIENCES  AA1 - D IY0 - AH0 N - S AH0 Z\nAUDIENCES(2)  AO1 - D IY0 - AH0 N - S AH0 Z\nAUDINO  AO2 - D IY1 - N OW0\nAUDIO  AA1 - D IY0 - OW2\nAUDIOPHILE  AO2 - D IY1 - OW0 - F IY2 L\nAUDIOPHILES  AO2 - D IY1 - OW0 - F IY2 L Z\nAUDIOTAPE  AO1 - D IY0 - OW0 - T EY2 P\nAUDIOTAPES  AO1 - D IY0 - OW0 - T EY2 P S\nAUDIOTEX  AO1 - D IY0 - OW0 - T EH2 K S\nAUDIOTRONIC  AO2 - D IY0 - OW0 - T R AA1 - N IH0 K\nAUDIOTRONICS  AO2 - D IY0 - OW0 - T R AA1 - N IH0 K S\nAUDIOVISUAL  AO2 - D IY0 - OW0 - V IH1 - ZH UW0 - AH0 L\nAUDIOVOX  AO1 - D IY0 - OW0 - V AA2 K S\nAUDIS  AO1 - D IH0 S\nAUDIS(2)  AW1 - D IY0 Z\nAUDIT  AO1 - D IH0 T\nAUDITED  AO1 - D IH0 - T IH0 D\nAUDITING  AA1 - D AH0 - T IH0 NG\nAUDITION  AA0 - D IH1 - SH AH0 N\nAUDITIONED  AO2 - D IH1 - SH AH0 N D\nAUDITIONING  AA0 - D IH1 - SH AH0 N - IH0 NG\nAUDITIONS  AO2 - D IH1 - SH AH0 N Z\nAUDITOR  AO1 - D IH0 - T ER0\nAUDITOR'S  AO1 - D IH0 - T ER0 Z\nAUDITORIUM  AO2 - D AH0 - T AO1 - R IY0 - AH0 M\nAUDITORIUMS  AO2 - D IH0 - T AO1 - R IY0 - AH0 M Z\nAUDITORS  AA1 - D AH0 - T ER0 Z\nAUDITORS'  AO1 - D IH0 - T ER0 Z\nAUDITORY  AO1 - D IH0 - T AO2 - R IY0\nAUDITS  AA1 - D AH0 T S\nAUDRAN  AO1 - D R AH0 N\nAUDREY  AO1 - D R IY0\nAUDRIC  AO1 - D R IH0 K\nAUDRIE  AO1 - D ER0 - IY0\nAUDRIS  OW0 - D R IY1 S\nAUDRY  AO1 - D R IY0\nAUDUBON  AO1 - D AH0 - B AA0 N\nAUDWIN  AO1 D - W IH0 N\nAUE  AW1\nAUEL  AW1 - AH0 L\nAUEN  AW1 - AH0 N\nAUER  AW1 - ER0\nAUERBACH  AW1 - ER0 - B AA0 K\nAUERBACK  AW1 R - B AE2 K\nAUFDERHEIDE  AW1 F - D ER0 - HH AY0 D\nAUFHAUSER  AO1 F - HH AW2 - Z ER0\nAUFIERO  OW0 - F IH1 - R OW0\nAUG  AO1 - G AH0 S T\nAUGAT  AO1 - G AE0 T\nAUGE  AO1 JH\nAUGELLO  AO0 - JH EH1 - L OW0\nAUGENSTEIN  AW1 - G AH0 N - S T AY0 N\nAUGENSTEIN(2)  AW1 - G AH0 N - S T IY0 N\nAUGER  AO1 - G ER0\nAUGERS  AO1 - G ER0 Z\nAUGHENBAUGH  AO0 - EH1 N - B AO0\nAUGMENT  AO0 G - M EH1 N T\nAUGMENTABLE  AA0 G - M EH1 N - T AH0 - B AH0 L\nAUGMENTATION  AA2 G - M EH0 N - T EY1 - SH AH0 N\nAUGMENTED  AA0 G - M EH1 N - T AH0 D\nAUGMENTING  AO1 G - M EH2 N - T IH0 NG\nAUGSBURG  AO1 G Z - B ER0 G\nAUGSBURGER  AW1 G Z - B ER0 - G ER0\nAUGSBURGER(2)  AO1 G Z - B ER0 - G ER0\nAUGSPURGER  AW1 G - S P ER0 - G ER0\nAUGSPURGER(2)  AO1 G - S P ER0 - G ER0\nAUGUR  AO1 - G ER0\nAUGURING  AO1 - G ER0 - IH0 NG\nAUGURS  AO1 - G ER0 Z\nAUGUST  AA1 - G AH0 S T\nAUGUST'S  AO1 - G AH0 S T S\nAUGUST(2)  AO1 - G AH0 S T\nAUGUSTA  AH0 - G AH1 - S T AH0\nAUGUSTA'S  AH0 - G AH1 - S T AH0 Z\nAUGUSTE  AO1 - G AH0 S T\nAUGUSTIN  AW0 - G UW0 - S T IY1 N\nAUGUSTINE  AA1 - G AH0 - S T IY2 N\nAUGUSTINE(2)  AO1 - G AH0 - S T IY2 N\nAUGUSTINIAN  AA2 - G AH0 - S T IH1 - N IY0 - AH0 N\nAUGUSTINIANS  AA2 - G AH0 - S T IH1 - N IY0 - AH0 N Z\nAUGUSTO  AO2 - G AH1 - S T OW0\nAUGUSTSON  AO1 - G AH0 S T - S AH0 N\nAUGUSTSON(2)  AO1 - G AH0 S - S AH0 N\nAUGUSTSON(3)  AO1 - G AH0 - S AH0 N\nAUGUSTUS  AA0 - G AH1 - S T AH0 S\nAUGUSTUS(2)  AH0 - G AH1 - S T AH0 S\nAUGUSTYN  AW0 - G AH1 - S T IH0 N\nAUGUSTYNIAK  AW0 - G AH0 - S T IH1 - N IY0 - AE0 K\nAUJOURD'HUI  OW1 - ZH AO0 R D - W IY1\nAUJOURD'HUI'S  OW1 - ZH AO0 R D - W IY1 Z\nAUKER  AO1 - K ER0\nAUKERMAN  AW1 - K ER0 - M AH0 N\nAUL  AO1 L\nAULANA  AW2 - L AA1 - N AH0\nAULD  AO1 L D\nAULDS  AO1 L D Z\nAULETTA  AO0 - L EH1 - T AH0\nAULL  AO1 L\nAULT  AO1 L T\nAULTMAN  AO1 L T - M AH0 N\nAUMAN  AO1 - M AH0 N\nAUMANN  AO1 - M AH0 N\nAUMENT  AW1 - M AH0 N T\nAUMILLER  AW1 - M AH0 - L ER0\nAUNE  AO1 N\nAUNG  AO1 NG\nAUNGST  AW1 NG G S T\nAUNT  AE1 N T\nAUNT'S  AE1 N T S\nAUNT'S(2)  AO1 N T S\nAUNT(2)  AO1 N T\nAUNTIE  AE1 N - T IY0\nAUNTIE(2)  AO1 N - T IY0\nAUNTS  AE1 N T S\nAUNTS'  AE1 N T S\nAUNTS'(2)  AO1 N T S\nAUNTS(2)  AO1 N T S\nAUPPERLE  AW1 - P ER0 - L IY0\nAURA  AO1 - R AH0\nAURAL  AO1 - R AH0 L\nAURAND  AO1 - R AH0 N D\nAUREA  AW0 - R EY1 - AA0\nAURELIO  AW0 - R EY1 - L IY0 - OW0\nAURIA  AO1 - R IY0 - AH0\nAURICH  AW1 - R IH0 K\nAURIEMMA  AO0 - R IY1 - M AH0\nAURORA  ER0 - AO1 - R AH0\nAURORAL  ER0 - AO1 - R AH0 L\nAURUM  AO1 - R AH0 M\nAUS  AW1 Z\nAUSBROOKS  AW1 S - B R UH0 K S\nAUSBURN  AW1 S - B ER0 N\nAUSCHWITZ  AO1 SH - W IH0 T S\nAUSCHWITZ(2)  AW1 SH - W IH0 T S\nAUSHERMAN  AW1 - SH ER0 - M AH0 N\nAUSIMONT  AW1 - S IH0 - M AA2 N T\nAUSLANDER  AW1 S - L AH0 N - D ER0\nAUSLEY  AO1 S - L IY0\nAUSMAN  AW1 S - M AH0 N\nAUSMUS  AW1 S - M IH0 S\nAUSPEY  AW1 - S P IY0\nAUSPICE  AO1 S - P IH0 S\nAUSPICES  AO1 - S P IH0 - S IH0 Z\nAUSPICIOUS  AA0 - S P IH1 - SH AH0 S\nAUSSIE  AO1 - S IY0\nAUST  AO1 S T\nAUSTAD  AW1 - S T AH0 D\nAUSTELL  AW1 - S T AH0 L\nAUSTEN  AO1 - S T IH0 N\nAUSTEN'S  AO1 - S T IH0 N Z\nAUSTER  AO1 - S T ER0\nAUSTERE  AO0 - S T IH1 R\nAUSTERELY  AO2 - S T IH1 R - L IY0\nAUSTERITY  AO2 - S T EH1 - R IH0 - T IY0\nAUSTILL  AW1 - S T AH0 L\nAUSTIN  AO1 - S T AH0 N\nAUSTIN'S  AO1 - S T AH0 N Z\nAUSTINE  AO1 - S T IY0 N\nAUSTON  AO1 - S T AH0 N\nAUSTRAL  AO1 S - T R AH0 L\nAUSTRALASIA  AO2 - S T R AH0 - L EY1 - ZH AH0\nAUSTRALIA  AO0 - S T R EY1 - L Y AH0\nAUSTRALIA'S  AO0 - S T R EY1 - L Y AH0 Z\nAUSTRALIAN  AO0 - S T R EY1 - L Y AH0 N\nAUSTRALIANS  AO0 - S T R EY1 - L Y AH0 N Z\nAUSTRALOPITHECINE  AO0 - S T R EY2 - L OW0 - P IH1 - TH AH0 - S AY2 N\nAUSTRALOPITHECUS  AO0 - S T R EY2 - L OW0 - P IH1 - TH AH0 - K AH0 S\nAUSTRALS  AO1 - S T R AH0 L Z\nAUSTRASIA  AO0 - S T R EY1 - ZH AH0\nAUSTRIA  AO1 - S T R IY0 - AH0\nAUSTRIA'S  AO1 - S T R IY0 - AH0 Z\nAUSTRIAN  AO1 - S T R IY0 - AH0 N\nAUSTRIANS  AO1 - S T R IY0 - AH0 N Z\nAUSTRO  AO1 - S T R OW0\nAUSTROASIATIC  AO2 - S T R OW2 - EY2 - ZH IY0 - AE1 - T IH0 K\nAUSTRON  AO1 - S T R AH0 N\nAUTEN  AW1 - T AH0 N\nAUTENRIETH  AW1 - T IH0 N - R IY0 - IH0 TH\nAUTENRIETH(2)  AW1 - T IH0 N - R IY0 TH\nAUTERY  OW1 - T ER0 - IY0\nAUTH  AO1 TH\nAUTHEMENT  AW1 TH - M AH0 N T\nAUTHENTIC  AH0 - TH EH1 N - T IH0 K\nAUTHENTIC(2)  AO0 - TH EH1 N - T IH0 K\nAUTHENTIC(3)  AO0 - TH EH1 - N IH0 K\nAUTHENTIC(4)  AH0 - TH EH1 - N IH0 K\nAUTHENTICALLY  AO2 - TH EH1 N - T IH0 K - L IY0\nAUTHENTICALLY(2)  AO2 - TH EH1 - N IH0 K - L IY0\nAUTHENTICATE  AO0 - TH EH1 N - T AH0 - K EY2 T\nAUTHENTICATED  AO0 - TH EH1 N - T AH0 - K EY2 - T AH0 D\nAUTHENTICATING  AO0 - TH EH1 N - T AH0 - K EY2 - T IH0 NG\nAUTHENTICATION  AO0 - TH EH2 N - T AH0 - K EY1 - SH AH0 N\nAUTHENTICATIONS  AO0 - TH EH2 N - T AH0 - K EY1 - SH AH0 N Z\nAUTHENTICITY  AO2 - TH AH0 N - T IH1 - S IH0 - T IY0\nAUTHER  AO1 - TH ER0\nAUTHIER  AW1 - TH IY0 - ER0\nAUTHOR  AO1 - TH ER0\nAUTHOR'S  AO1 - TH ER0 Z\nAUTHORED  AO1 - TH ER0 D\nAUTHORITARIAN  AH0 - TH AO2 - R AH0 - T EH1 - R IY0 - AH0 N\nAUTHORITARIANISM  AH0 - TH AO2 - R AH0 - T EH1 - R IY0 - AH0 - N IH2 - Z AH0 M\nAUTHORITATIVE  AH0 - TH AO1 - R AH0 - T EY2 - T IH0 V\nAUTHORITATIVELY  AH0 - TH AO2 - R AH0 - T EY1 - T IH0 V - L IY0\nAUTHORITIES  AH0 - TH AO1 - R AH0 - T IY0 Z\nAUTHORITIES'  AH0 - TH AO1 - R IH0 - T IY0 Z\nAUTHORITY  AH0 - TH AO1 - R AH0 - T IY0\nAUTHORITY'S  AH0 - TH AO1 - R IH0 - T IY0 Z\nAUTHORIZATION  AO2 - TH ER0 - AH0 - Z EY1 - SH AH0 N\nAUTHORIZATIONS  AO2 - TH ER0 - AH0 - Z EY1 - SH AH0 N Z\nAUTHORIZE  AO1 - TH ER0 - AY2 Z\nAUTHORIZED  AO1 - TH ER0 - AY2 Z D\nAUTHORIZES  AO1 - TH ER0 - AY2 - Z IH0 Z\nAUTHORIZING  AO1 - TH ER0 - AY2 - Z IH0 NG\nAUTHORS  AO1 - TH ER0 Z\nAUTHORS'  AO1 - TH ER0 Z\nAUTHORSHIP  AO1 - TH ER0 - SH IH2 P\nAUTISM  AO1 - T IH2 - Z AH0 M\nAUTISTIC  AO0 - T IH1 - S T IH0 K\nAUTO  AO1 - T OW0\nAUTO'S  AO1 - T OW0 Z\nAUTOBAHN  AO1 - T OW0 - B AA2 N\nAUTOBIOGRAPHER  AO2 - T AH0 - B AY0 - AA1 - G R AH0 - F ER0\nAUTOBIOGRAPHICAL  AO2 - T AH0 - B AY2 - AH0 - G R AE1 - F IH0 - K AH0 L\nAUTOBIOGRAPHIES  AO2 - T AH0 - B AY0 - AA1 - G R AH0 - F IY0 Z\nAUTOBIOGRAPHY  AO2 - T AH0 - B AY0 - AA1 - G R AH0 - F IY0\nAUTOBON  AA1 - T AH0 - B AA2 N\nAUTOCLAVE  AO1 - T OW0 - K L EY2 V\nAUTOCRACY  AO0 - T AA1 - K R AH0 - S IY0\nAUTOCRAT  AO1 - T AH0 - K R AE2 T\nAUTOCRATIC  AO2 - T AH0 - K R AE1 - T IH0 K\nAUTODESK  AO1 - T OW0 - D EH2 S K\nAUTODIE  AO1 - T OW0 - D AY2\nAUTOFACT  AO1 - T OW0 - F AE2 K T\nAUTOFACTS  AO1 - T OW0 - F AE2 K T S\nAUTOGRAPH  AO1 - T AH0 - G R AE2 F\nAUTOGRAPHED  AO1 - T AH0 - G R AE2 F T\nAUTOGRAPHS  AO1 - T AH0 - G R AE2 F S\nAUTOIMMUNE  AO2 - T OY1 - M Y UW0 N\nAUTOLATINA  AO2 - T OW2 - L AH0 - T IY1 - N AH0\nAUTOMAKER  AO1 - T OW0 - M EY2 - K ER0\nAUTOMAKER'S  AO1 - T OW0 - M EY2 - K ER0 Z\nAUTOMAKERS  AO1 - T OW0 - M EY2 - K ER0 Z\nAUTOMAKERS'  AO1 - T OW0 - M EY2 - K ER0 Z\nAUTOMAP  AO1 - T OW0 - M AE2 P\nAUTOMATA  AO0 - T AA1 - M AH0 - T AH0\nAUTOMATE  AO1 - T AH0 - M EY2 T\nAUTOMATED  AO1 - T AH0 - M EY2 - T IH0 D\nAUTOMATES  AO1 - T AH0 - M EY2 T S\nAUTOMATIC  AO2 - T AH0 - M AE1 - T IH0 K\nAUTOMATIC(2)  AO2 - T OW0 - M AE1 - T IH0 K\nAUTOMATICALLY  AO2 - T AH0 - M AE1 - T IH0 K - L IY0\nAUTOMATICALLY(2)  AO2 - T OW0 - M AE1 - T IH0 K - L IY0\nAUTOMATICS  AO2 - T AH0 - M AE1 - T IH0 K S\nAUTOMATING  AO1 - T AH0 - M EY2 - T IH0 NG\nAUTOMATION  AO0 - T AH0 - M EY1 - SH AH0 N\nAUTOMATIX  AO2 - T OW0 - M EY1 - T IH0 K S\nAUTOMATON  AO0 - T AA1 - M AH0 - T AA2 N\nAUTOMOBILE  AO1 - T AH0 - M OW0 - B IY2 L\nAUTOMOBILE(2)  AO2 - T AH0 - M OW0 - B IY1 L\nAUTOMOBILES  AO1 - T AH0 - M OW0 - B IY2 L Z\nAUTOMOBILES(2)  AO2 - T AH0 - M OW0 - B IY1 L Z\nAUTOMOBILI  AO2 - T OW0 - M OW0 - B IY1 - L IY0\nAUTOMOTIVE  AO2 - T AH0 - M OW1 - T IH0 V\nAUTOMOTIVE'S  AO2 - T AH0 - M OW1 - T IH0 V Z\nAUTOMOVILES  AO2 - T OW0 - M OW0 - V IY1 - L EH0 Z\nAUTON  AO1 - T AH0 N\nAUTONOMIC  AO2 - T AH0 - N AA1 - M IH0 K\nAUTONOMOUS  AO0 - T AA1 - N AH0 - M AH0 S\nAUTONOMOUSLY  AO2 - T AA1 - N OW0 - M AH0 S - L IY0\nAUTONOMY  AO0 - T AA1 - N AH0 - M IY0\nAUTONOMY(2)  AH0 - T AA1 - N AH0 - M IY0\nAUTOPACIFIC  AO2 - T OW0 - P AH0 - S IH1 - F IH0 K\nAUTOPART  AO1 - T OW0 - P AA2 R T\nAUTOPARTS  AO1 - T OW0 - P AA2 R T S\nAUTOPILOT  AO1 - T OW0 - P AY2 - L AH0 T\nAUTOPSIED  AO1 - T AA2 P - S IY0 D\nAUTOPSIES  AO1 - T AA2 P - S IY0 Z\nAUTOPSY  AO1 - T AA2 P - S IY0\nAUTORAD  AO1 - T OW0 - R AE2 D\nAUTORADIOGRAPH  AA0 - T OW0 - R EY1 - D IY0 - OW0 - G R AE0 F\nAUTORADS  AO1 - T OW0 - R AE2 D Z\nAUTOS  AO1 - T OW0 Z\nAUTOSPA  AO1 - T OW1 - S P AH0\nAUTOTOTE  AO1 - T OW0 - T OW2 T\nAUTOTROPHIC  AO2 - T AH0 - T R OW1 - F IH0 K\nAUTOWORKER  AO1 - T OW0 - W ER0 - K ER0\nAUTOWORKERS  AO1 - T OW0 - W ER0 - K ER0 Z\nAUTREY  AO1 - T R IY0\nAUTRY  AO1 - T R IY0\nAUTUMN  AO1 - T AH0 M\nAUTUMN'S  AO1 - T AH0 M Z\nAUTUMNAL  AO0 - T AH1 M - N AH0 L\nAUVIL  OW0 - V IH1 L\nAUX  OW1\nAUXIER  AO1 K - S IY0 - ER0\nAUXILIARY  AA0 G - Z IH1 - L Y ER0 - IY0\nAUXILIARY(2)  AA0 G - Z IH1 - L IY0 - EH0 - R IY0\nAUXTON  AO1 K - S T AH0 N\nAUYEUNG  AW1 - Y UW2 NG\nAUZENNE  AO1 - Z IH0 N\nAVA  EY1 - V AH0\nAVAIL  AH0 - V EY1 L\nAVAILABILITIES  AH0 - V EY2 - L AH0 - B IH1 - L IH0 - T IY0 Z\nAVAILABILITY  AH0 - V EY2 - L AH0 - B IH1 - L AH0 - T IY0\nAVAILABILITY(2)  AH0 - V EY2 - L AH0 - B IH1 - L IH0 - T IY0\nAVAILABLE  AH0 - V EY1 - L AH0 - B AH0 L\nAVAILED  AH0 - V EY1 L D\nAVAKIAN  AH0 - V EY1 - K IY0 - AH0 N\nAVALANCHE  AE1 - V AH0 - L AE2 N CH\nAVALANCHES  AE1 - V AH0 - L AE2 N - CH IH0 Z\nAVALLONE  AE1 - V AH0 - L OW2 N\nAVALON  AE1 - V AH0 - L AA2 N\nAVALON'S  AE1 - V AH0 - L AA2 N Z\nAVALOS  AA0 - V AA1 - L OW0 Z\nAVANA  AH0 - V AE1 - N AH0\nAVANA'S  AH0 - V AE1 - N AH0 Z\nAVANEX  AA1 - V AH0 - N EH0 K S\nAVANT  AH0 - V AA1 N T\nAVANT-GARDE  AH0 - V AA1 N T - G AA1 R D\nAVANT-GARDE(2)  AH0 - V AA1 N - G AA1 R D\nAVANTEK  AH0 - V AA1 N - T EH0 K\nAVANTI  AH0 - V AA1 N - T IY0\nAVANTS  AA0 - V AO1 N T S\nAVARICE  AE1 - V ER0 - AH0 S\nAVASSO  AH0 - V AA1 - S OW2\nAVCO  AE1 V - K OW0\nAVDEL  AE1 V - D EH2 L\nAVE  AE1 - V AH0 - N UW0\nAVE(2)  AA1 - V EY2\nAVEDISIAN  AE0 - V IH0 - D IH1 - ZH IH0 N\nAVEDON  AE1 - V EH0 - D AA0 N\nAVELAR  AA0 - V EY0 - L AA1 R\nAVELINE  AA0 - V EH0 - L IY1 - N IY0\nAVELLA  AH0 - V EH1 - L AH0\nAVELLINO  AE2 - V AH0 - L IY1 - N OW0\nAVELLINO'S  AE2 - V AH0 - L IY1 - N OW0 Z\nAVEMCO  AH0 - V EH1 M - K OW0\nAVEMCO'S  AH0 - V EH1 M - K OW0 Z\nAVEN  AA0 - V EY1 - AH0 N\nAVENA  AA0 - V EY1 - N AH0\nAVENALL  AA0 - V EY0 - N AA1 L\nAVENDANO  AA0 - V EH0 N - D AA1 - N OW0\nAVENEL  AA0 - V EY0 - N EH1 L\nAVENELL  AA0 - V EY0 - N EY1 L\nAVENGE  AH0 - V EH1 N JH\nAVENGED  AH0 - V EH1 N JH D\nAVENGER  AH0 - V EH1 N - JH ER0\nAVENGING  AH0 - V EH1 N - JH IH0 NG\nAVENI  AA0 - V EH1 - N IY0\nAVENT  AA1 - V AH0 N T\nAVENUE  AE1 - V AH0 - N UW2\nAVENUE'S  AE1 - V AH0 - N UW2 Z\nAVENUES  AE1 - V AH0 - N UW2 Z\nAVER  EY1 - V ER0\nAVERA  AA0 - V EH1 - R AH0\nAVERAGE  AE1 - V ER0 - IH0 JH\nAVERAGE'S  AE1 - V R IH0 - JH IH0 Z\nAVERAGE(2)  AE1 - V R AH0 JH\nAVERAGE(3)  AE1 - V R IH0 JH\nAVERAGED  AE1 - V R AH0 JH D\nAVERAGED(2)  AE1 - V R IH0 JH D\nAVERAGES  AE1 - V R IH0 - JH IH0 Z\nAVERAGING  AE1 - V R IH0 - JH IH0 NG\nAVERBECK  EY1 - V ER0 - B EH2 K\nAVERELL  AA0 - V EH0 - R EY1 L\nAVERETT  AE1 - V ER0 - EH0 T\nAVERETTE  AE1 - V ER0 - EH2 T\nAVERIL  EY1 - V ER0 - IH0 L\nAVERIL(2)  EY1 - V R IH0 L\nAVERILL  AA0 - V EH0 - R IY1 L\nAVERITT  AE1 - V ER0 - IH0 T\nAVEROF  AE1 - V ER0 - AA2 F\nAVERS  EY1 - V ER0 Z\nAVERSA  AA0 - V EH1 R - S AH0\nAVERSANO  AA0 - V ER0 - S AA1 - N OW0\nAVERSE  AH0 - V ER1 S\nAVERSION  AH0 - V ER1 - ZH AH0 N\nAVERSIVE  AH0 - V ER1 - S AH0 V\nAVERT  AH0 - V ER1 T\nAVERTED  AH0 - V ER1 - T AH0 D\nAVERTING  AH0 - V ER1 - T IH0 NG\nAVERTS  AH0 - V ER1 T S\nAVERY  EY1 - V ER0 - IY0\nAVERY'S  EY1 - V ER0 - IY0 Z\nAVERYL  AE1 - V ER0 - IH0 L\nAVEY  EY1 - V IY0\nAVI  AA1 - V IY0\nAVI(2)  EY1 - V IY0\nAVIA  AA1 - V IY0 - AH0\nAVIACION  EY2 - V IY0 - EY1 - SH AH0 N\nAVIALL  EY1 - V IY0 - AH0 L\nAVIANO  AA2 - V IY0 - AA1 - N OW0\nAVIANO'S  AA2 - V IY0 - AA1 - N OW0 Z\nAVIARIES  EY1 - V IY0 - EH2 - R IY0 Z\nAVIARY  EY1 - V IY0 - EH2 - R IY0\nAVIATION  EY2 - V IY0 - EY1 - SH AH0 N\nAVIATION'S  EY2 - V IY0 - EY1 - SH AH0 N Z\nAVIATOR  EY1 - V IY0 - EY2 - T ER0\nAVIATORS  EY1 - V IY0 - EY0 - T ER0 Z\nAVIAZIONE  AE2 - V IY0 - AE2 - Z IY0 - OW1 - N IY0\nAVICE  AA1 - V AY0 S\nAVID  AE1 - V AH0 D\nAVID(2)  AE1 - V IH0 D\nAVIDLY  AE1 - V AH0 D - L IY0\nAVILA  AH0 - V IH1 - L AH0\nAVILES  AA0 - V IY1 - L EH0 S\nAVILEZ  AA0 - V IY1 - L EH0 Z\nAVILLA  AH0 - V IH1 - L AH0\nAVINA  AA0 - V IY1 - N AH0\nAVINGER  EY1 - V IH0 - NG ER0\nAVIONIC  EY2 - V IY0 - AA1 - N IH0 K\nAVIONICS  EY2 - V IY0 - AA1 - N IH0 K S\nAVIONS  EY1 - V IY0 - AH0 N Z\nAVIS  EY1 - V IH0 S\nAVITABILE  AA0 - V IY0 - T AA1 - B AH0 L\nAVITAL  AH0 - V IY1 - T AH0 L\nAVITIA  AA0 - V IY1 - SH AH0\nAVIV  AA0 - V IY1 V\nAVIV'S  AA0 - V IY1 V Z\nAVMARK  AE1 V - M AA2 R K\nAVNER  AE1 V - N ER0\nAVNET  AE1 V - N EH2 T\nAVOCADO  AE2 - V AH0 - K AA1 - D OW0\nAVOCADOS  AE2 - V AH0 - K AA1 - D OW0 Z\nAVOCATION  AE2 - V AH0 - K EY1 - SH AH0 N\nAVOCET  AE1 - V AH0 - S EH2 T\nAVODON  AE1 - V AH0 - D AA0 N\nAVOID  AH0 - V OY1 D\nAVOIDABLE  AH0 - V OY1 - D AH0 - B AH0 L\nAVOIDANCE  AH0 - V OY1 - D AH0 N S\nAVOIDED  AH0 - V OY1 - D AH0 D\nAVOIDED(2)  AH0 - V OY1 - D IH0 D\nAVOIDING  AH0 - V OY1 - D IH0 NG\nAVOIDS  AH0 - V OY1 D Z\nAVOLIO  AH0 - V OW1 - L IY0 - OW0\nAVON  EY1 - V AA0 N\nAVON'S  AE1 - V AH0 N Z\nAVONDALE  AE1 - V AH0 N - D EY2 L\nAVOW  AH0 - V AW1\nAVOWED  AH0 - V AW1 D\nAVOWEDLY  AH0 - V AW1 - AH0 D - L IY0\nAVRAHAM  EY1 - V R AH0 - HH AE0 M\nAVRAHAM(2)  AA1 - V R AH0 - HH AA0 M\nAVRAM  EY1 - V R AH0 M\nAVRETT  AE1 - V R EH0 T\nAVRIL  AE1 - V R IH0 L\nAVRIL(2)  EY1 - V R AH0 L\nAVRIM  AA0 - V R IY1 M\nAVTEX  AE1 V - T EH2 K S\nAVTEX'S  AE1 V - T EH2 K - S IH0 Z\nAVTOVAZ  AE1 V - T OW2 - V AE2 Z\nAVUNCULAR  AH0 - V AH1 NG - K Y AH0 - L ER0\nAW  AO1\nAWACS  EY1 - W AE2 K S\nAWAD  AH0 - W AA1 D\nAWAIT  AH0 - W EY1 T\nAWAITED  AH0 - W EY1 - T AH0 D\nAWAITED(2)  AH0 - W EY1 - T IH0 D\nAWAITING  AH0 - W EY1 - T IH0 NG\nAWAITS  AH0 - W EY1 T S\nAWAKE  AH0 - W EY1 K\nAWAKEN  AH0 - W EY1 - K AH0 N\nAWAKENED  AH0 - W EY1 - K AH0 N D\nAWAKENING  AH0 - W EY1 - K AH0 - N IH0 NG\nAWAKENS  AH0 - W EY1 - K AH0 N Z\nAWALT  AA1 - V AH0 L T\nAWAN  EY1 - W AH0 N\nAWARD  AH0 - W AO1 R D\nAWARDED  AH0 - W AO1 R - D AH0 D\nAWARDED(2)  AH0 - W AO1 R - D IH0 D\nAWARDING  AH0 - W AO1 R - D IH0 NG\nAWARDS  AH0 - W AO1 R D Z\nAWARE  AH0 - W EH1 R\nAWARENESS  AH0 - W EH1 R - N AH0 S\nAWASH  AH0 - W AA1 SH\nAWAY  AH0 - W EY1\nAWAYS  EY1 - W EY2 Z\nAWB  AA1 W B\nAWB(2)  EY1 - D AH1 - B AH0 L - Y UW1 - B IY1\nAWB(3)  EY1 - D AH1 - B AH0 - Y UW1 - B IY1\nAWBREY  AO1 - B R IY0\nAWE  AA1\nAWE(2)  AO1\nAWED  AO1 D\nAWEIDA  AH0 - W EY1 - D AH0\nAWEIDA(2)  AH0 - W AY1 - D AH0\nAWESOME  AA1 - S AH0 M\nAWESOME(2)  AO1 - S AH0 M\nAWESOMELY  AA1 - S AH0 M - L IY0\nAWESOMELY(2)  AO1 - S AH0 M - L IY0\nAWESTRUCK  AA1 - S T R AH2 K\nAWFUL  AA1 - F AH0 L\nAWFUL(2)  AO1 - F AH0 L\nAWFULLY  AA1 F - L IY0\nAWFULLY(2)  AO1 - F AH0 - L IY0\nAWFULNESS  AO1 - F AH0 L - N AH0 S\nAWHILE  AH0 - W AY1 L\nAWKWARD  AA1 - K W ER0 D\nAWKWARD(2)  AO1 - K W ER0 D\nAWKWARDLY  AO1 - K W ER0 D - L IY0\nAWKWARDNESS  AO1 - K W ER0 D - N AH0 S\nAWNING  AA1 - N IH0 NG\nAWOKE  AH0 - W OW1 K\nAWRY  ER0 - AY1\nAWTREY  AO1 - T R IY0\nAX  AE1 K S\nAXA  AE1 K - S AH0\nAXA'S  AE1 K - S AH0 Z\nAXE  AE1 K S\nAXED  AE1 K S T\nAXEL  AE1 K - S AH0 L\nAXELRAD  AE0 K - S EH1 L - R AH0 D\nAXELROD  AE1 K - S AH0 L - R AA2 D\nAXELSEN  AE0 K - S EH1 L - S AH0 N\nAXELSON  AE1 K - S IH0 L - S AH0 N\nAXES  AE1 K - S IH0 Z\nAXES(2)  AE1 K - S IY0 Z\nAXFORD  AE0 K S - F AO1 R D\nAXID  AE1 K - S IH0 D\nAXILROD  AE1 K - S IH0 L - R AA2 D\nAXIOM  AE1 K - S IY0 - AH0 M\nAXIOMATIC  AE2 K - S IY0 - AH0 - M AE1 - T IH0 K\nAXIOMS  AE1 K - S IY0 - AH0 M Z\nAXIS  AE1 K - S AH0 S\nAXLE  AE1 K - S AH0 L\nAXLES  AE1 K - S AH0 L Z\nAXLEY  AE1 K S - L IY0\nAXLINE  AE1 K - S L AY2 N\nAXLON  AE1 K - S L AA0 N\nAXON  AE1 K - S AA2 N\nAXONS  AE1 K - S AA2 N Z\nAXSOM  AE1 K - S AH0 M\nAXT  AE1 K S T\nAXTELL  AE0 K - S T EH1 L\nAXTMAN  AE1 K - S T M AH0 N\nAXTON  AE1 K - S T AH0 N\nAY  EY1\nAY(2)  AY1\nAYACUCHO  AY2 - AH0 - K AH1 - CH OW0\nAYAKO  AH0 - Y AA1 - K OW0\nAYALA  AH0 - Y AA1 - L AH0\nAYARS  EY1 - ER0 Z\nAYATOLLAH  AY2 - AH0 - T OW1 - L AH0\nAYATOLLAH'S  AY2 - AH0 - T OW1 - L AH0\nAYATOLLAHS  AY2 - AH0 - T AA1 - L AA0 Z\nAYBAR  EY1 - B ER0\nAYCOCK  EY1 - K AH0 K\nAYDAR  AY1 - D AA2 R\nAYDAR(2)  EY1 - D AA2 R\nAYDELOTT  EY1 - D IH0 - L AA0 T\nAYDELOTTE  EY1 - D AH0 - L AA2 T\nAYDIN  EY1 - D IH0 N\nAYDT  EY1 T\nAYE  AY1\nAYER  AY1 - ER0\nAYER'S  EH1 R Z\nAYER'S(2)  EY1 R Z\nAYER(2)  EY1 - ER0\nAYERS  AY1 - ER0 Z\nAYERS(2)  EY1 - ER0 Z\nAYERST  EY1 - ER0 S T\nAYERST(2)  EH1 - R AH0 S T\nAYES  AY1 Z\nAYGEN  AY1 - G AH0 N\nAYGEN(2)  EY1 - G AH0 N\nAYKROYD  EY1 - K R OY2 D\nAYKROYD(2)  AY1 - K R OY2 D\nAYLER  EY1 - L ER0\nAYLES  EY1 L Z\nAYLESWORTH  EY1 L Z - W ER0 TH\nAYLESWORTH(2)  EY1 - AH0 L Z - W ER0 TH\nAYLING  EY1 - L IH0 NG\nAYLMER  EY1 L - M ER0\nAYLOR  EY1 - L ER0\nAYLSWORTH  EY1 L - S W ER0 TH\nAYLWARD  EY1 L - W ER0 D\nAYLWIN  EY1 L - W IH0 N\nAYLWIN(2)  AY1 L - W IH2 N\nAYLWORTH  EY1 L - W ER0 TH\nAYMOND  EY1 - M AH0 N D\nAYN  EY1 N\nAYNES  EY1 N Z\nAYO  EY1 - OW0\nAYODHYA  AY2 - AA1 - D Y AH0\nAYON  EY0 - AO1 N\nAYOTTE  EY0 - AO1 T\nAYOUB  EY1 - AW0 B\nAYR  EY1 R\nAYRE  EH1 R\nAYRES  EH1 R Z\nAYSCUE  EY1 - S K Y UW0\nAYTES  EY1 T S\nAYUSO  AY0 - UW1 - S OW0\nAYYAD  AY2 - AA1 D\nAYYAD'S  AY2 - AA1 D Z\nAYYAD'S(2)  AY2 - AE1 D Z\nAYYAD(2)  AY2 - AE1 D\nAYYASH  AY1 Y - AE2 SH\nAZACTAM  AH0 - Z AE1 K - T AE0 M\nAZALEA  AH0 - Z EY1 - L Y AH0\nAZALEAS  AH0 - Z EY1 - L Y AH0 Z\nAZALIA  AA0 - Z AA1 - L IY0 - AH0\nAZAR  AA0 - Z AA1 R\nAZAROW  AE1 - Z ER0 - OW0\nAZBELL  AE1 Z - B EH0 L\nAZBILL  AA0 Z - B IY1 L\nAZCARRAGA  AE0 Z - K AA2 - R AA1 - G AH0\nAZCONA  AE0 Z - K OW1 - N AH0\nAZCUENAGA  AE0 Z - K W EY2 - N AA1 - G AH0\nAZELIA  AA0 - Z EH1 - L IY0 - AH0\nAZERBAIJAN  AA2 - Z ER0 - B AY0 - JH AA1 N\nAZERBAIJAN'S  AA2 - Z ER0 - B AY0 - JH AA1 N Z\nAZERBAIJAN'S(2)  AE2 - Z ER0 - B AY0 - JH AA1 N Z\nAZERBAIJAN(2)  AE2 - Z ER0 - B AY0 - JH AA1 N\nAZERBAIJANI  AA2 - Z ER0 - B AY0 - JH AA1 - N IY0\nAZERBAIJANI(2)  AE2 - Z ER0 - B AY0 - JH AA1 - N IY0\nAZERBAIJANIS  AA2 - Z ER0 - B AY0 - JH AA1 - N IY0 Z\nAZERBAIJANIS(2)  AE2 - Z ER0 - B AY0 - JH AA1 - N IY0 Z\nAZERI  AH0 - Z EH1 - R IY0\nAZEVEDO  AA0 - Z EY0 - V EY1 - D OW0\nAZHAR  AH0 - Z AA1 R\nAZHAR'S  AH0 - Z AA1 R Z\nAZIDES  AE1 - Z AY2 D Z\nAZIDOTHYMIDINE  AH0 - Z IH2 - D AH0 - TH AY1 - M AH0 - D IY2 N\nAZIDOTHYMIDINE(2)  AH0 - Z IH2 - D AH0 - TH AY1 - M AH0 - D AY2 N\nAZIDOTHYMIDINE(3)  EY0 - Z AY2 - D AH0 - TH AY1 - M AH0 - D IY2 N\nAZIDOTHYMIDINE(4)  EY0 - Z AY2 - D AH0 - TH AY1 - M AH0 - D AY2 N\nAZINGER  EY1 - Z IH0 - NG ER0\nAZIZ  AH0 - Z IY1 Z\nAZMEER  AE1 Z - M IH2 R\nAZOFF  AE1 - Z AO0 F\nAZORES  AH0 - Z AO1 R Z\nAZPURUA  AE0 Z - P Y UH1 - R UW0 - AH0\nAZTAR  AE1 Z - T ER0\nAZTEC  AE1 Z - T EH2 K\nAZTECA  AE2 Z - T EH1 - K AH0\nAZTECS  AE1 Z - T EH2 K S\nAZURA  AH0 - Z UH1 - R AH0\nAZURE  AE1 - ZH ER0\nAZZARA  AA0 T - S AA1 - R AH0\nAZZARELLO  AA0 T - S AA0 - R EH1 - L OW0\nAZZARO  AA0 T - S AA1 - R OW0\nAZZATO  AH0 - Z AA1 - T OW0\nAZZOPARDI  AA0 T - S OW0 - P AA1 R - D IY0\nB  B IY1\nB'GOSH  B AH0 - G AO1 SH\nB'NAI  B AH0 - N EY1\nB'RITH  B R IH1 TH\nB'S  B IY1 Z\nB-J  B IY1 - JH EY1\nB-J'S  B IY1 - JH EY1 Z\nB.  B IY1\nB.'S  B IY1 Z\nB.S  B IY1 Z\nBA'ATH  B AA1 TH\nBA'ATH(2)  B AH0 - AA1 TH\nBAAB  B AA1 B\nBAACK  B AA1 K\nBAADE  B AA1 D\nBAALBEK  B AA1 L - B EH0 K\nBAALBEQ  B AA1 L - B EH0 K\nBAAR  B AA1 R\nBAARS  B AA1 R Z\nBAAS  B AA1 Z\nBAASCH  B AA1 SH\nBAATZ  B AA1 T S\nBAB  B AE1 B\nBABA  B AA1 - B AH0\nBABANGIDA  B AH0 - B AA1 NG - G IH0 - D AH0\nBABANGIDA(2)  B AH0 - B AE1 NG - G IH0 - D AH0\nBABB  B AE1 B\nBABBAGE  B AE1 - B IH0 JH\nBABBAGE'S  B AE1 - B IH0 - JH IH0 Z\nBABBIO  B AE1 - B IY0 - OW0\nBABBIT  B AE1 - B IH0 T\nBABBIT'S  B AE1 - B IH0 T S\nBABBITT  B AE1 - B IH0 T\nBABBITT'S  B AE1 - B AH0 T S\nBABBITTS  B AE1 - B AH0 T S\nBABBLE  B AE1 - B AH0 L\nBABBLED  B AE1 - B AH0 L D\nBABBLER  B AE1 - B L ER0\nBABBLERS  B AE1 - B L ER0 Z\nBABBLING  B AE1 - B AH0 L - IH0 NG\nBABBLING(2)  B AE1 - B L IH0 NG\nBABBS  B AE1 B Z\nBABCOCK  B AE1 B - K AO0 K\nBABE  B EY1 B\nBABEL  B AE1 - B AH0 L\nBABER  B EY1 - B ER0\nBABERS  B EY1 - B ER0 Z\nBABES  B EY1 B Z\nBABETTE  B AH0 - B EH1 T\nBABIAK  B AA1 - B IY0 - AE0 K\nBABIARZ  B AH0 - B IY1 - ER0 Z\nBABIC  B AA1 - B IH0 K\nBABICH  B AE1 - B IH0 CH\nBABIES  B EY1 - B IY0 Z\nBABIES'  B EY1 - B IY0 Z\nBABIK  B AA1 - B IH0 K\nBABIN  B AE1 - B IH0 N\nBABINEAU  B AE1 - B IH0 - N OW2\nBABINEAUX  B AE1 - B IH0 - N OW2\nBABINGTON  B AE1 - B IH0 NG - T AH0 N\nBABINO  B AA0 - B IY1 - N OW0\nBABINSKI  B AH0 - B IH1 N - S K IY0\nBABISH  B AE1 - B IH0 SH\nBABITA  B AA0 - B IY1 - T AH0\nBABKA  B AE1 B - K AH0\nBABLER  B EY1 - B AH0 L - ER0\nBABOON  B AH0 - B UW1 N\nBABOON'S  B AE0 - B UW1 N Z\nBABOON'S(2)  B AH0 - B UW1 N Z\nBABOONS  B AE0 - B UW1 N Z\nBABOONS(2)  B AH0 - B UW1 N Z\nBABS  B AE1 B Z\nBABSON  B AE1 B - S AH0 N\nBABU  B AA0 - B UW1\nBABULA  B AA0 - B UW1 - L AH0\nBABUSHKA  B AH0 - B UH1 SH - K AH0\nBABUSHKAS  B AH0 - B UH1 SH - K AH0 Z\nBABY  B EY1 - B IY0\nBABY'S  B EY1 - B IY0 Z\nBABYAK  B AE1 - B IY0 - AE0 K\nBABYHOOD  B EY1 - B IY0 - HH UH2 D\nBABYISH  B EY1 - B IY0 - IH0 SH\nBABYLON  B AE1 - B AH0 - L AA2 N\nBABYLONIAN  B AE2 - B AH0 - L OW1 - N IY0 - AH0 N\nBABYLONIANS  B AE2 - B AH0 - L OW1 - N IY0 - AH0 N Z\nBABYSAT  B EY1 - B IY0 - S AE2 T\nBABYSIT  B EY1 - B IY0 - S IH0 T\nBABYSITTER  B EY1 - B IY0 - S IH2 - T ER0\nBABYSITTERS  B EY1 - B IY0 - S IH2 - T ER0 Z\nBABYSITTING  B EY1 - B IY0 - S IH2 - T IH0 NG\nBACA  B AE1 - K AH0\nBACALL  B AH0 - K AO1 L\nBACARDI  B AH0 - K AA1 R - D IY0\nBACCALAUREATE  B AE2 - K AH0 - L AO1 - R IY0 - AH0 T\nBACCARAT  B AA2 - K ER0 - AA1\nBACCARI  B AA0 - K AA1 - R IY0\nBACCHANALIA  B AE2 - K AH0 - N EY1 - L Y AH0\nBACCHI  B AE1 - K IY0\nBACCHUS  B AE1 - K IH0 S\nBACCI  B AA1 - CH IY0\nBACCUS  B AE1 - K AH0 S\nBACH  B AA1 K\nBACHA  B AE1 - CH AH0\nBACHAND  B AE1 - CH AH0 N D\nBACHAR  B AA1 - K ER0\nBACHARACH  B AE1 - K ER0 - AE0 K\nBACHE  B AE1 CH\nBACHE'S  B AE1 - CH IH0 Z\nBACHE'S(2)  B EY1 - CH IH0 Z\nBACHE(2)  B EY1 CH\nBACHELDER  B AA1 - K IH0 L - D ER0\nBACHELLER  B AA1 - K AH0 - L ER0\nBACHELOR  B AE1 - CH AH0 - L ER0\nBACHELOR'S  B AE1 - CH AH0 - L ER0 Z\nBACHELOR'S(2)  B AE1 CH - L ER0 Z\nBACHELOR(2)  B AE1 CH - L ER0\nBACHELORS  B AE1 CH - L ER0 Z\nBACHER  B AA1 - K ER0\nBACHERA  B AA1 - K ER0 - AH0\nBACHERT  B AE1 - CH ER0 T\nBACHLER  B AE1 K - L ER0\nBACHMAN  B AA1 K - M AH0 N\nBACHMANN  B AA1 K - M AH0 N\nBACHMEIER  B AA1 K - M AY0 - ER0\nBACHNER  B AA1 K - N ER0\nBACHRACH  B AA1 - K R AH0 K\nBACHTEL  B AE1 K - T AH0 L\nBACHTELL  B AE1 K - T AH0 L\nBACHUS  B AE1 - CH AH0 S\nBACIGALUPI  B AA0 - CH IY0 - G AA0 - L UW1 - P IY0\nBACIGALUPO  B AA0 - CH IY0 - G AA0 - L UW1 - P OW0\nBACIK  B AA1 - CH IH0 K\nBACILLUS  B AH0 - S IH1 - L AH0 S\nBACINO  B AA0 - CH IY1 - N OW0\nBACK  B AE1 K\nBACKACHE  B AE1 K - EY2 K\nBACKACHES  B AE1 K - EY2 K S\nBACKBITE  B AE1 K - B AY2 T\nBACKBITING  B AE1 K - B AY2 - T IH0 NG\nBACKBOARD  B AE1 K - B AO2 D\nBACKBONE  B AE1 K - B OW2 N\nBACKDATE  B AE1 K - D EY2 T\nBACKDATED  B AE1 K - D EY2 - T IH0 D\nBACKDOOR  B AE1 K - D AO2 R\nBACKDROP  B AE1 K - D R AA2 P\nBACKDROPS  B AE1 K - D R AA2 P S\nBACKE  B AE1 K\nBACKED  B AE1 K T\nBACKER  B AE1 - K ER0\nBACKER'S  B AE1 - K ER0 Z\nBACKERS  B AE1 - K ER0 Z\nBACKES  B AE1 K S\nBACKFIELD  B AE1 K - F IY2 L D\nBACKFIRE  B AE1 K - F AY2 R\nBACKFIRED  B AE1 K - F AY2 - ER0 D\nBACKFIRES  B AE1 K - F AY2 - ER0 Z\nBACKFIRING  B AE1 K - F AY2 - ER0 - IH0 NG\nBACKGAMMON  B AE1 K - G AE2 - M AH0 N\nBACKGROUND  B AE1 K - G R AW2 N D\nBACKGROUNDS  B AE1 K - G R AW2 N D Z\nBACKHAND  B AE1 K - HH AE2 N D\nBACKHANDED  B AE1 K - HH AE2 N - D AH0 D\nBACKHANDED(2)  B AE1 K - HH AE2 N - D IH0 D\nBACKHAUS  B AE1 K - HH AW2 S\nBACKHOE  B AE1 K - HH OW2\nBACKING  B AE1 - K IH0 NG\nBACKLASH  B AE1 K - L AE2 SH\nBACKLESS  B AE1 K - L AH0 S\nBACKLIGHT  B AE1 K - L AY2 T\nBACKLIGHTS  B AE1 K - L AY2 T S\nBACKLIST  B AE1 K - L IH2 S T\nBACKLOG  B AE1 K - L AA2 G\nBACKLOG(2)  B AE1 K - L AO2 G\nBACKLOGGED  B AE1 K - L AA2 G D\nBACKLOGS  B AE1 K - L AO2 G Z\nBACKLUND  B AE1 K - L AH0 N D\nBACKMAN  B AE1 K - M AH0 N\nBACKPACK  B AE1 K - P AE2 K\nBACKPACKS  B AE1 K - P AE2 K S\nBACKPEDAL  B AE1 K - P EH2 - D AH0 L\nBACKPEDALED  B AE1 K - P EH2 - D AH0 L D\nBACKPEDALING  B AE1 K - P EH2 - D AH0 L - IH0 NG\nBACKPEDALING(2)  B AE1 K - P EH2 D - L IH0 NG\nBACKREST  B AE1 - K R EH2 S T\nBACKROOM  B AE1 K - R UW2 M\nBACKS  B AE1 K S\nBACKSAW  B AE1 K - S AA2\nBACKSAW(2)  B AE1 K - S AO2\nBACKSEAT  B AE0 K - S IY1 T\nBACKSET  B AE1 K - S EH2 T\nBACKSIDE  B AE1 K - S AY2 D\nBACKSLAP  B AE1 K - S L AE2 P\nBACKSLAPPING  B AE1 K - S L AE2 - P IH0 NG\nBACKSLASH  B AE1 K - S L AE2 SH\nBACKSLIDE  B AE1 K - S L AY2 D\nBACKSLIDING  B AE1 K - S L AY2 - D IH0 NG\nBACKSPIN  B AE1 K - S P IH0 N\nBACKSTAGE  B AE1 K - S T EY1 JH\nBACKSTAIRS  B AE1 K - S T EH2 R Z\nBACKSTITCH  B AE1 K - S T IH0 CH\nBACKSTOP  B AE1 K - S T AA2 P\nBACKSTROKE  B AE1 K - S T R OW2 K\nBACKSTROM  B AE1 K - S T R AH0 M\nBACKTRACK  B AE1 K - T R AE2 K\nBACKTRACKED  B AE1 K - T R AE2 K T\nBACKTRACKING  B AE1 K - T R AE2 - K IH0 NG\nBACKUP  B AE1 K - AH2 P\nBACKUPS  B AE1 K - AH2 P S\nBACKUS  B AE1 - K AH0 S\nBACKWARD  B AE1 K - W ER0 D\nBACKWARDATION  B AE2 K - W ER0 - D EY1 - SH AH0 N\nBACKWARDNESS  B AE1 - K W ER0 D - N AH0 S\nBACKWARDS  B AE1 K - W ER0 D Z\nBACKWASH  B AE1 K - W AA2 SH\nBACKWATER  B AE1 K - W AO2 - T ER0\nBACKWATERS  B AE1 K - W AO2 - T ER0 Z\nBACKWOODS  B AE1 K - W UH1 D Z\nBACKWOODSMAN  B AE1 K - W UH1 D Z - M AH0 N\nBACKYARD  B AE1 K - Y AA2 R D\nBACKYARDS  B AE1 K - Y AA2 R D Z\nBACON  B EY1 - K AH0 N\nBACON'S  B EY1 - K AH0 N Z\nBACORN  B AE1 - K ER0 N\nBACOT  B AE1 - K AH0 T\nBACOT(2)  B EY1 - K AE0 T\nBACOTE  B AH0 - K OW1 T\nBACTERIA  B AE0 K - T IH1 - R IY0 - AH0\nBACTERIAL  B AE0 K - T IH1 - R IY0 - AH0 L\nBACTERIOLOGY  B AE2 K - T IH0 - R IY2 - AA1 - L AH0 - JH IY0\nBACTERIUM  B AE0 K - T IH1 - R IY0 - AH0 M\nBACUS  B AE1 - K IH0 S\nBAD  B AE1 D\nBADA  B AA1 - D AH0\nBADAL  B EY1 - D AH0 L\nBADALAMENTI  B AA0 - D AA0 - L AA0 - M EH1 N - T IY0\nBADAMI  B AA0 - D AA1 - M IY0\nBADAVATZ  B AE1 - D AH0 - V AE2 T S\nBADDERS  B AE1 - D ER0 Z\nBADE  B EY1 D\nBADEAH  B AH0 - D IY1 - AH0\nBADEAU  B AH0 - D OW1\nBADEAUX  B AH0 - D OW1\nBADEN  B EY1 - D AH0 N\nBADEN'S  B AA1 - D AH0 N Z\nBADER  B AE1 - D ER0\nBADER(2)  B EY1 - D ER0\nBADERTSCHER  B AE1 - D ER0 - CH ER0\nBADGE  B AE1 JH\nBADGER  B AE1 - JH ER0\nBADGER'S  B AE1 - JH ER0 Z\nBADGERED  B AE1 - JH ER0 D\nBADGERING  B AE1 - JH ER0 - IH0 NG\nBADGERS  B AE1 - JH ER0 Z\nBADGES  B AE1 - JH IH0 Z\nBADGETT  B AE1 - JH IH0 T\nBADGLEY  B AE1 JH - L IY0\nBADIA  B AA1 - D IY0 - AH0\nBADILLO  B AH0 - D IH1 - L OW0\nBADLAND  B AE1 D - L AE2 N D\nBADLANDS  B AE1 D - L AE2 N D Z\nBADLEY  B AE1 D - L IY0\nBADLY  B AE1 D - L IY0\nBADMAN  B AE1 D - M AH0 N\nBADMINTON  B AE1 D - M IH2 N - T AH0 N\nBADMINTONS  B AE1 D - M IH2 N - T AH0 N Z\nBADNESS  B AE1 D - N AH0 S\nBADOLATO  B AA0 - D OW0 - L AA1 - T OW0\nBADOUR  B AH0 - D UH1 R\nBADURA  B AA0 - D UH1 - R AH0\nBADY  B EY1 - D IY0\nBAE  B AY1\nBAECHLE  B EH1 - K AH0 L\nBAECKER  B EH1 - K ER0\nBAEDEKER  B EY1 - D AH0 - K ER0\nBAEDEKER'S  B EY1 - D AH0 - K ER0 Z\nBAEHR  B IY1 R\nBAEHR(2)  B EH1 R\nBAEK  B IY1 K\nBAEK(2)  B EH1 K\nBAER  B EH1 R\nBAERWALD  B EH1 R - W AO0 L D\nBAETEN  B EH1 - T AH0 N\nBAETJER  B EH1 T - JH ER0\nBAETZ  B IY1 T S\nBAEZ  B AY0 - EH1 Z\nBAEZA  B IY1 - Z AH0\nBAFFA  B AE1 - F AH0\nBAFFLE  B AE1 - F AH0 L\nBAFFLED  B AE1 - F AH0 L D\nBAFFLES  B AE1 - F AH0 L Z\nBAFFLING  B AE1 - F AH0 L - IH0 NG\nBAFFLING(2)  B AE1 - F L IH0 NG\nBAFOKENG  B AE1 - F OW0 - K EH2 NG\nBAG  B AE1 G\nBAGAN  B EY1 - G AH0 N\nBAGBY  B AE1 G - B IY0\nBAGDAD  B AE1 G - D AE0 D\nBAGDASARIAN  B AE2 G - D AH0 - S EH1 - R IY0 - AH0 N\nBAGDIKIAN  B AE2 G - D IH1 - K IY0 - AH0 N\nBAGDON  B AE1 G - D AH0 N\nBAGDONAS  B AE1 G - D AH0 - N AH0 Z\nBAGEL  B EY1 - G AH0 L\nBAGELAND  B EY1 - G AH0 - L AE0 N D\nBAGELS  B EY1 - G AH0 L Z\nBAGENT  B EY1 - JH AH0 N T\nBAGFUL  B AE1 G - F UH2 L\nBAGG  B AE1 G\nBAGGAGE  B AE1 - G AH0 JH\nBAGGAGE(2)  B AE1 - G IH0 JH\nBAGGE  B AE1 G\nBAGGED  B AE1 G D\nBAGGERLY  B AE1 - G ER0 - L IY0\nBAGGETT  B AE1 - G IH0 T\nBAGGIE  B AE1 - G IY0\nBAGGINESS  B AE1 - G IY0 - N AH0 S\nBAGGING  B AE1 - G IH0 NG\nBAGGIO  B AA1 - JH IY0 - OW0\nBAGGIO'S  B AA1 - JH IY0 - OW0 Z\nBAGGOTT  B AE1 - G AH0 T\nBAGGS  B AE1 G Z\nBAGGY  B AE1 - G IY0\nBAGHDAD  B AE1 G - D AE0 D\nBAGHDAD'S  B AE1 G - D AE0 D Z\nBAGHLI  B AE1 G - L IY0\nBAGINSKI  B AH0 - G IH1 N - S K IY0\nBAGLEY  B AE1 G - L IY0\nBAGLIO  B AE1 G - L IY0 - OW0\nBAGMAN  B AE1 G - M AH0 N\nBAGNALL  B AE1 G - N AH0 L\nBAGNATO  B AA0 G - N AA1 - T OW0\nBAGNELL  B AE1 G - N AH0 L\nBAGPIPE  B AE1 G - P AY2 P\nBAGPIPER  B AE1 G - P AY2 - P ER0\nBAGPIPES  B AE1 G - P AY2 P S\nBAGS  B AE1 G Z\nBAGSBY  B AE1 G Z - B IY0\nBAGSHAW  B AE1 G - SH AO2\nBAGWELL  B AE1 - G W EH2 L\nBAH  B AA1\nBAHA'IS  B AA1 - HH AA0 - IH2 Z\nBAHAM  B AA1 - AH0 M\nBAHAMA  B AH0 - HH AA1 - M AH0\nBAHAMAS  B AH0 - HH AA1 - M AH0 Z\nBAHAMIAN  B AH0 - HH EY1 - M IY0 - AH0 N\nBAHAN  B AE1 - HH AH0 N\nBAHE  B EY1 HH\nBAHENA  B AE1 - HH IH0 - N AH0\nBAHIA  B AA1 - HH IY0 - AH0\nBAHL  B AA1 L\nBAHLER  B AA1 - L ER0\nBAHLS  B AA1 L Z\nBAHM  B AE1 M\nBAHMAN  B AA1 - M AH0 N\nBAHN  B AE1 N\nBAHNER  B AA1 - N ER0\nBAHNSEN  B AA1 N - S AH0 N\nBAHR  B EH1 R\nBAHR(2)  B AA1 R\nBAHRAIN  B AA0 - R EY1 N\nBAHRAIN'S  B AA0 - R EY1 N Z\nBAHRAIN'S(2)  B AY0 - R EY1 N Z\nBAHRAIN(2)  B AY0 - R EY1 N\nBAHRAINI  B ER0 - EY1 - N IY0\nBAHRAINI(2)  B AY0 - R AA1 - N IY0\nBAHRAINI(3)  B AA0 - R EY1 - N IY0\nBAHRAINIAN  B ER0 - EY1 - N IY0 - AH0 N\nBAHRAINIAN(2)  B AY0 - R AA1 - N IY0 - AH0 N\nBAHRAINIAN(3)  B AA0 - R EY1 - N IY0 - AH0 N\nBAHRAINIS  B ER0 - EY1 - N IY0 Z\nBAHRE  B AA1 R\nBAHRENBURG  B AA1 - R AH0 N - B ER0 G\nBAHT  B AA1 T\nBAIDOA  B AY2 - D OW1 - AH0\nBAIDOA'S  B AY2 - D OW1 - AH0 Z\nBAIDOAN  B AY2 - D OW1 - AH0 N\nBAIDOAN'S  B AY2 - D OW1 - AH0 N Z\nBAIDOANS  B AY2 - D OW1 - AH0 N Z\nBAIDOAS  B AY2 - D OW1 - AH0 Z\nBAIE  B AY1 - IY0\nBAIER  B EY1 - ER0\nBAIG  B EY1 G\nBAIL  B EY1 L\nBAILARD  B EY1 - L ER0 D\nBAILBY  B EY1 L - B IY0\nBAILE  B EY1 L\nBAILED  B EY1 L D\nBAILER  B EY1 - L ER0\nBAILES  B EY1 L Z\nBAILEY  B EY1 - L IY0\nBAILEY'S  B EY1 - L IY0 Z\nBAILEYS  B EY1 - L IY0 Z\nBAILIE  B EY1 - L IY0\nBAILIFF  B EY1 - L AH0 F\nBAILIFF(2)  B EY1 - L IH0 F\nBAILIFFS  B EY1 - L AH0 F S\nBAILIN  B EY1 - L IH0 N\nBAILING  B EY1 - L IH0 NG\nBAILIWICK  B EY1 - L IH0 - W IH2 K\nBAILLARGEON  B AH0 - L AA1 R - JH IH0 N\nBAILLIE  B EY1 - L IY0\nBAILLY  B EY1 - L IY0\nBAILON  B EY1 - L AH0 N\nBAILOR  B EY1 - L ER0\nBAILOUT  B EY1 L - AW2 T\nBAILOUTS  B EY1 L - AW2 T S\nBAILS  B EY1 L Z\nBAILY  B EY1 - L IY0\nBAILYN  B EY1 - L IH0 N\nBAIM  B EY1 M\nBAIN  B EY1 N\nBAIN'S  B EY1 N Z\nBAINBRIDGE  B EY1 N - B R IH0 JH\nBAINBRIDGE'S  B EY1 N - B R IH0 - JH AH0 Z\nBAINE  B EY1 N\nBAINERD  B EY1 - N ER0 D\nBAINES  B EY1 N Z\nBAINS  B EY1 N Z\nBAINTER  B EY1 N - T ER0\nBAINTON  B EY1 N - T AH0 N\nBAIO  B AA1 - IY0 - OW0\nBAIR  B EH1 R\nBAIRD  B EH1 R D\nBAIRD'S  B EH1 R D Z\nBAIRNCO  B EH1 R N - K OW0\nBAISCH  B AY1 SH\nBAISDEN  B EY1 S - D AH0 N\nBAISE  B EY1 Z\nBAISLEY  B EY1 Z - L IY0\nBAIT  B EY1 T\nBAITED  B EY1 - T IH0 D\nBAITING  B EY1 - T IH0 NG\nBAITS  B EY1 T S\nBAITY  B EY1 - T IY0\nBAIUL  B AY2 - UW1 L\nBAIUL'S  B AY2 - UW1 L Z\nBAIZE  B EY1 Z\nBAJA  B AA1 - HH AA2\nBAJARIN  B AE1 - JH ER0 - IH0 N\nBAJEMA  B AA0 - Y EY1 - M AH0\nBAJOREK  B AE1 - JH ER0 - EH0 K\nBAK  B AE1 K\nBAKA  B AA1 - K AH0\nBAKALAR  B AE1 - K AH0 - L ER0\nBAKE  B EY1 K\nBAKE-OFF  B EY1 K - AO1 F\nBAKE-OFFS  B EY1 - K AO1 F S\nBAKED  B EY1 K T\nBAKELMAN  B EY1 - K AH0 L - M AH0 N\nBAKEMAN  B EY1 K - M AH0 N\nBAKER  B EY1 - K ER0\nBAKER'S  B EY1 - K ER0 Z\nBAKERIES  B EY1 - K ER0 - IY0 Z\nBAKERS  B EY1 - K ER0 Z\nBAKERSFIELD  B EY1 - K ER0 Z - F IY2 L D\nBAKERY  B EY1 - K ER0 - IY0\nBAKES  B EY1 K S\nBAKEWARE  B EY1 K - W EH2 R\nBAKEWELL  B EY1 - K W EH2 L\nBAKEY  B EY1 - K IY0\nBAKEY'S  B EY1 - K IY0 Z\nBAKING  B EY1 - K IH0 NG\nBAKKE  B AE1 K\nBAKKEN  B AE1 - K AH0 N\nBAKKER  B AE1 - K ER0\nBAKKER'S  B AE1 - K ER0 Z\nBAKKER'S(2)  B EY1 - K ER0 Z\nBAKKER(2)  B EY1 - K ER0\nBAKKERS  B AE1 - K ER0 Z\nBAKKERS(2)  B EY1 - K ER0 Z\nBAKLEY  B AE1 K - L IY0\nBAKOS  B AA1 - K OW0 Z\nBAKOWSKI  B AH0 - K AO1 F S - K IY0\nBAKRIE  B AE1 K - R AY0\nBAKSHI  B AE1 K - SH IY0\nBAKST  B AE1 K S T\nBAKU  B AA0 - K UW1\nBAKULA  B AH0 - K UW1 - L AH0\nBAL  B AE1 L\nBALA  B AA1 - L AH0\nBALABAN  B AA0 - L AA0 - B AA1 N\nBALAGUER  B AE1 - L AH0 - G ER0\nBALAKUMAR  B AA2 - L AH0 - K UW0 - M AA1 R\nBALAN  B EY1 - L AH0 N\nBALANCE  B AE1 - L AH0 N S\nBALANCED  B AE1 - L AH0 N S T\nBALANCER  B AE1 - L AH0 N - S ER0\nBALANCES  B AE1 - L AH0 N - S AH0 Z\nBALANCES(2)  B AE1 - L AH0 N - S IH0 Z\nBALANCHINE  B AE1 - L AH0 N - CH IY2 N\nBALANCHINE'S  B AE1 - L AH0 N - CH IY2 N Z\nBALANCING  B AE1 - L AH0 N - S IH0 NG\nBALART  B AE1 - L AA0 R T\nBALAS  B AE1 - L AH0 S\nBALASH  B AE1 - L AH0 SH\nBALATA  B AE1 - L AH0 - T AH0\nBALAZS  B AO1 - L AH0 SH\nBALBACH  B AE1 L - B AA0 K\nBALBI  B AE1 L - B IY0\nBALBINA  B AA0 L - B IY1 - N AH0\nBALBO  B AE1 L - B OW0\nBALBOA  B AA0 L - B OW1 - AH0\nBALBONI  B AA0 L - B OW1 - N IY0\nBALBRIGGAN  B AE0 L - B R IH1 - G AH0 N\nBALBRIGGANS  B AE0 L - B R IH1 - G AH0 N Z\nBALCER  B EY1 L - S ER0\nBALCEROWICZ  B AE0 L - S EH1 - R AH0 - W IH0 T S\nBALCERZAK  B AH0 L - CH ER1 - Z AH0 K\nBALCH  B AE1 L CH\nBALCHUNAS  B AE1 L - K UW0 - N AH0 Z\nBALCOM  B AE1 L - K AH0 M\nBALCONIES  B AE1 L - K AH0 - N IY0 Z\nBALCONY  B AE1 L - K AH0 - N IY0\nBALCOR  B AE1 L - K AO0 R\nBALD  B AO1 L D\nBALDASSARE  B AA0 L - D AA0 - S AA1 - R IY0\nBALDASSARI  B AA0 L - D AA0 - S AA1 - R IY0\nBALDASSARRE  B AO0 L - D AH0 - S AA1 - R IY0\nBALDAUF  B AE1 L - D AW0 F\nBALDELLI  B AA0 L - D EH1 - L IY0\nBALDEMAR  B AA0 L - D EY0 - M AA1 R\nBALDER  B AO1 L - D ER0\nBALDERAS  B AE1 L - D ER0 - AH0 Z\nBALDERDASH  B AO1 L - D ER0 - D AE2 SH\nBALDERRAMA  B AA0 L - D EH0 - R AA1 - M AH0\nBALDERSON  B AE1 L - D ER0 - S AH0 N\nBALDERSTON  B AE1 L - D ER0 - S T AH0 N\nBALDEZ  B AA2 L - D EH1 Z\nBALDI  B AA1 L - D IY0\nBALDING  B AO1 L - D IH0 NG\nBALDINGER  B AO1 L - D IH0 - NG ER0\nBALDINI  B AA0 L - D IY1 - N IY0\nBALDINI'S  B AA0 L - D IY1 - N IY0 Z\nBALDINO  B AA0 L - D IY1 - N OW0\nBALDLY  B AO1 L D - L IY0\nBALDNER  B AE1 L D - N ER0\nBALDNESS  B AO1 L D - N AH0 S\nBALDO  B AA1 L - D OW0\nBALDOCK  B AE1 L - D AH0 K\nBALDONADO  B AA0 L - D OW0 - N AA1 - D OW0\nBALDONI  B AA0 L - D OW1 - N IY0\nBALDOR  B AO1 L - D ER0\nBALDREE  B AH0 L - D R IY1\nBALDRIC  B AE1 L - D R IH0 K\nBALDRIDGE  B AE1 L - D R IH0 JH\nBALDRIGE  B AO1 L - D R IH0 JH\nBALDRY  B AO1 L - D R IY0\nBALDUCCI  B AA0 L - D UW1 - CH IY0\nBALDUR  B AA0 L - D UH1 R\nBALDUS  B AA1 L - D IH0 S\nBALDWIN  B AO1 L D - W AH0 N\nBALDWIN'S  B AO1 L D - W AH0 N Z\nBALDWIN(2)  B AO1 L D - W IH0 N\nBALDYGA  B AA1 L - D IY0 - G AH0\nBALE  B EY1 L\nBALEEN  B AH0 - L IY1 N\nBALEFUL  B EY1 L - F AH0 L\nBALENTINE  B AA0 - L EH0 N - T IY1 - N IY0\nBALES  B EY1 L Z\nBALESTRA  B AH0 - L EH1 S - T R AH0\nBALESTRIERI  B AA0 - L EH0 - S T R IH1 - R IY0\nBALEY  B EY1 - L IY0\nBALFANZ  B AA1 L - F AA0 N Z\nBALFE  B EY1 L F\nBALFOUR  B AE1 L - F AO0 R\nBALI  B AA1 - L IY0\nBALIAN  B EY1 - L IY0 - AH0 N\nBALICKI  B AH0 - L IH1 - K IY0\nBALIK  B AA1 - L IH0 K\nBALILAN  B AH0 - L IH1 - L AH0 N\nBALILES  B AH0 - L IY1 - L EH0 Z\nBALIN  B AE1 - L IH0 N\nBALINESE  B AE2 - L IH0 - N IY1 Z\nBALING  B EY1 - L IH0 NG\nBALINSKI  B AH0 - L IH1 N - S K IY0\nBALINT  B AA1 - L IY0 N T\nBALIS  B AA1 - L IY0 Z\nBALISTRERI  B AA0 - L IY0 - S T R EH1 - R IY0\nBALK  B AO1 K\nBALK(2)  B AA1 L K\nBALKAN  B AO1 L - K AH0 N\nBALKANIZATION  B AO2 L - K AH0 - N IH0 - Z EY1 - SH AH0 N\nBALKANIZE  B AO1 L - K AH0 - N AY2 Z\nBALKANIZED  B AO1 L - K AH0 - N AY2 Z D\nBALKANS  B AO1 L - K AH0 N Z\nBALKCOM  B AE1 L - K AH0 M\nBALKE  B EY1 L K\nBALKED  B AO1 K T\nBALKIN  B AE1 L - K IH0 N\nBALKING  B AO1 - K IH0 NG\nBALKO  B AE1 L - K OW0\nBALKS  B AO1 K S\nBALKY  B AO1 - K IY0\nBALL  B AO1 L\nBALL'S  B AO1 L Z\nBALLA  B AE1 - L AH0\nBALLAD  B AE1 - L AH0 D\nBALLADE  B AH0 - L AA1 D\nBALLADS  B AE1 - L AH0 D Z\nBALLADUR  B AE1 - L AH0 - D ER0\nBALLADUR'S  B AE1 - L AH0 - D ER0 Z\nBALLANCE  B AA1 - L AH0 N S\nBALLANTINE  B AE1 - L AH0 N - T AY2 N\nBALLANTRAE  B AE1 - L AH0 N - T R EY2\nBALLANTYNE  B AH0 - L AE1 N - T AY0 N\nBALLARD  B AE1 - L ER0 D\nBALLARD'S  B AE1 - L ER0 D Z\nBALLAS  B AE1 - L AH0 Z\nBALLAST  B AE1 - L AH0 S T\nBALLASTS  B AE1 - L AH0 S T S\nBALLASTS(2)  B AE1 - L AH0 S S\nBALLASTS(3)  B AE1 - L AH0 S\nBALLCLUB  B AO1 L - K L AH0 B\nBALLCOCK  B AO1 L - K AA1 K\nBALLCOCKS  B AO1 L - K AA1 K S\nBALLE  B EY1 L\nBALLED  B AO1 L D\nBALLENGEE  B AH0 - L EH1 NG - G IY0\nBALLENGER  B AE1 - L IH0 N - JH ER0\nBALLENTINE  B AA0 - L EH0 N - T IY1 - N IY0\nBALLER  B AO1 - L ER0\nBALLERINA  B AE2 - L ER0 - IY1 - N AH0\nBALLERINAS  B AE2 - L ER0 - IY1 - N AH0 Z\nBALLES  B EY1 L Z\nBALLESTER  B AE1 - L IH0 - S T ER0\nBALLESTEROS  B AE1 - L IH0 - S T ER0 - OW0 Z\nBALLESTEROS(2)  B AH0 - L EH1 - S T ER0 - OW0 S\nBALLET  B AE0 - L EY1\nBALLET'S  B AE0 - L EY1 Z\nBALLETS  B AE0 - L EY1 Z\nBALLETTO  B AE2 - L EH1 - T OW0\nBALLEW  B AE1 - L UW0\nBALLGAME  B AO0 L - G EY1 M\nBALLI  B AE1 - L IY0\nBALLIET  B AE1 - L IY0 - IH0 T\nBALLIETT  B AE1 - L IY2 T\nBALLIN  B AE1 - L IH0 N\nBALLING  B AO1 - L IH0 NG\nBALLINGER  B AO1 - L IH2 N - JH ER0\nBALLISTIC  B AH0 - L IH1 - S T IH0 K\nBALLISTICS  B AH0 - L IH1 - S T IH0 K S\nBALLMAN  B AO1 L - M AH0 N\nBALLMER  B AE1 L - M ER0\nBALLO  B AE1 - L OW0\nBALLON  B AE1 - L AH0 N\nBALLOON  B AH0 - L UW1 N\nBALLOONED  B AH0 - L UW1 N D\nBALLOONING  B AH0 - L UW1 - N IH0 NG\nBALLOONIST  B AH0 - L UW1 - N IH0 S T\nBALLOONISTS  B AH0 - L UW1 - N IH0 S T S\nBALLOONS  B AH0 - L UW1 N Z\nBALLOR  B AO1 - L ER0\nBALLOT  B AE1 - L AH0 T\nBALLOTING  B AE1 - L AH0 - T IH0 NG\nBALLOTS  B AE1 - L AH0 T S\nBALLOU  B AH0 - L UW1\nBALLOW  B AE1 - L OW0\nBALLOWE  B AE1 - L AW0\nBALLPARK  B AO1 L - P AA2 R K\nBALLPARKS  B AO1 L - P AA2 R K S\nBALLPLAYER  B AO1 L - P L EY2 - ER0\nBALLPLAYERS  B AO0 L - P L EY1 - ER0 Z\nBALLPOINT  B AO1 L - P OY0 N T\nBALLPOINTS  B AO1 L - P OY0 N T S\nBALLROOM  B AO1 L - R UW2 M\nBALLROOMS  B AO1 L - R UW2 M Z\nBALLS  B AO1 L Z\nBALLWEG  B AE1 L - W IH0 G\nBALLY  B AE1 - L IY0\nBALLY'S  B AE1 - L IY0 Z\nBALLY'S(2)  B EY1 - L IY0 Z\nBALLY(2)  B EY1 - L IY0\nBALLYHOO  B AE1 - L IY0 - HH UW1\nBALLYHOOED  B AE1 - L IY0 - HH UW1 D\nBALM  B AA1 M\nBALM(2)  B AA1 L M\nBALMER  B AA1 - M ER0\nBALMES  B AA1 L - M EH0 S\nBALMORAL  B AE0 L - M AO1 - R AH0 L\nBALMORALS  B AE0 L - M AO1 - R AH0 L Z\nBALMS  B AA1 M Z\nBALMS(2)  B AA1 L M Z\nBALMY  B AA1 - M IY0\nBALODIA  B AH0 - L OW1 - D IY0 - AH0\nBALOG  B AE1 - L AO0 G\nBALOGA  B AA0 - L OW1 - G AH0\nBALOGH  B AE1 - L OW0\nBALON  B AA0 - L AO1 N\nBALONEY  B AH0 - L OW1 - N IY0\nBALOW  B AE1 - L OW0\nBALSA  B AO1 L - S AH0\nBALSAM  B AO1 L - S AH0 M\nBALSAMO  B AA0 L - S AA1 - M OW0\nBALSBAUGH  B AO1 L Z - B AO2\nBALSER  B EY1 L - S ER0\nBALSIGER  B AE1 L - S IH0 - G ER0\nBALSLEY  B AE1 L S - L IY0\nBALSTER  B AE1 L - S T ER0\nBALT'S  B AO1 L T S\nBALTAZAR  B AA0 L - T AA0 - Z AA1 R\nBALTER  B AO1 L - T ER0\nBALTES  B EY1 L T S\nBALTHASAR  B AE1 L - TH AH0 - S ER0\nBALTHASER  B AE1 L - TH AH0 - S ER0\nBALTHAZAR  B AE1 L - TH AH0 - Z ER0\nBALTHAZOR  B AA0 L - TH AA0 - Z AO1 R\nBALTHROP  B AE1 L - TH R AH0 P\nBALTIC  B AO1 L - T IH0 K\nBALTICA  B AE1 L - T IH0 - K AH0\nBALTICS  B AO1 L - T IH0 K S\nBALTIERRA  B AA0 L - T IH1 - R AH0\nBALTIMORE  B AO1 L - T AH0 - M AO2 R\nBALTIMORE'S  B AO1 L - T AH0 - M AO2 R Z\nBALTO  B AA1 L - T OW0\nBALTODANO  B AO2 L - T OW0 - D AA1 - N OW0\nBALTSA  B AO1 L T - S AH0\nBALTZ  B AE1 L T S\nBALTZELL  B AE1 L T - Z AH0 L\nBALTZER  B AE1 L T - Z ER0\nBALUCHI  B AH0 - L UW1 - CH IY0\nBALUJA  B AH0 - L UW1 - JH AH0\nBALUKAS  B AH0 - L UW1 - K AH0 Z\nBALYEAT  B AE2 - L IY0 - AE1 T\nBALZ  B AO1 L Z\nBALZANO  B AA0 L - Z AA1 - N OW0\nBALZARINI  B AA0 L - Z AA0 - R IY1 - N IY0\nBALZER  B EY1 L - Z ER0\nBAM  B AE1 M\nBAMBA  B AE1 M - B AH0\nBAMBACH  B AE1 M - B AA2 K\nBAMBENEK  B AE0 M - B EH1 - N EH0 K\nBAMBER  B AE1 M - B ER0\nBAMBERG  B AE1 M - B ER0 G\nBAMBERGER  B AE1 M - B ER0 - G ER0\nBAMBI  B AE1 M - B IY0\nBAMBINO  B AE2 M - B IY1 - N OW0\nBAMBINOS  B AE2 M - B IY1 - N OW0 Z\nBAMBOO  B AE0 M - B UW1\nBAMBRICK  B AE1 M - B R IH0 K\nBAMBURG  B AE1 M - B ER0 G\nBAME  B EY1 M\nBAMFORD  B AE1 M - F ER0 D\nBAMUT  B AE1 - M AH0 T\nBAN  B AE1 N\nBANACCI  B AH0 - N AA1 - CH IY0\nBANACH  B AE1 - N AH0 K\nBANAL  B AH0 - N AA1 L\nBANALITIES  B AH0 - N AE1 - L IH0 - T IY0 Z\nBANALITY  B AH0 - N AE1 - L IH0 - T IY0\nBANAMEX  B AE1 - N AH0 - M EH2 K S\nBANANA  B AH0 - N AE1 - N AH0\nBANANAS  B AH0 - N AE1 - N AH0 Z\nBANAS  B AE1 - N AH0 Z\nBANASIAK  B AH0 - N AA1 - S IY0 - AE0 K\nBANASZAK  B AH0 - N AA1 - SH AH0 K\nBANBURY  B AE1 N - B EH2 - R IY0\nBANC  B AE1 NG K\nBANCA  B AE1 NG - K AH0\nBANCA(2)  B AA1 NG - K AH0\nBANCAIRE  B AE0 N - K EH1 R\nBANCARIO  B AE0 N - K EH1 - R IY0 - OW0\nBANCO  B AE1 NG - K OW0\nBANCOKLAHOMA  B AE0 NG - K AA2 K - L AH0 - HH OW1 - M AH0\nBANCOMER  B AE1 NG - K AH0 - M ER0\nBANCOR  B AE1 N - K AO2 R\nBANCORP  B AE1 NG - K AO0 R P\nBANCORP'S  B AE1 NG - K AO0 R P S\nBANCORP'S(2)  B AE1 N - K AO0 R P S\nBANCORP(2)  B AE1 N - K AO0 R P\nBANCORPORATION  B AE1 N - K AO2 R - P ER0 - EY0 - SH AH0 N\nBANCROFT  B AE1 NG - K R AO0 F T\nBANCROFT'S  B AE1 N - K R AO2 F T S\nBANCSERVE  B AE1 N K - S ER0 V\nBANCSHARES  B AE1 NG K - SH EH0 R Z\nBANCSHARES'  B AE0 NG K - SH EH1 R Z\nBANCTEC  B AE1 NG K - T EH2 K\nBANCTEXAS  B AE0 NG K - T EH1 K - S AH0 S\nBAND  B AE1 N D\nBAND'S  B AE1 N D Z\nBANDA  B AE1 N - D AH0\nBANDAG  B AE1 N - D AE2 G\nBANDAGE  B AE1 N - D IH0 JH\nBANDAGED  B AE1 N - D AH0 JH D\nBANDAGES  B AE1 N - D AH0 - JH AH0 Z\nBANDAGES(2)  B AE1 N - D IH0 - JH IH0 Z\nBANDAI  B AE2 N - D AY1\nBANDAID  B AE1 N - D EY0 D\nBANDANA  B AE2 N - D AE1 - N AH0\nBANDANAS  B AE2 N - D AE1 - N AH0 Z\nBANDAR  B AE1 N - D AA0 R\nBANDED  B AE1 N - D IH0 D\nBANDEL  B AE1 N - D AH0 L\nBANDEMER  B AE1 N - D IY0 - M ER0\nBANDER  B AE1 N - D ER0\nBANDERAS  B AE0 N - D ER1 - AH0 S\nBANDERAS(2)  B AA0 N - D ER0 - AH1 S\nBANDICOOTS  B AE1 N - D IH0 - K UW2 T S\nBANDICOOTS(2)  B AE1 N - D IY0 - K UW2 T S\nBANDIED  B AE1 N - D IY0 D\nBANDING  B AE1 N - D IH0 NG\nBANDIT  B AE1 N - D AH0 T\nBANDITRY  B AE1 N - D AH0 - T R IY0\nBANDITS  B AE1 N - D AH0 T S\nBANDLEADER  B AE1 N D - L IY0 - D ER0\nBANDLEADERS  B AE1 N D - L IY0 - D ER0 Z\nBANDOLIER  B AE2 N - D AH0 - L IH1 R\nBANDOLIERS  B AE2 N - D AH0 - L IH1 R Z\nBANDOW  B AE1 N - D AW2\nBANDOW'S  B AE1 N - D AW2 Z\nBANDS  B AE1 N D Z\nBANDSHELL  B AE0 N D - SH EH1 L\nBANDSTAND  B AE1 N D - S T AE2 N D\nBANDT  B AE1 N T\nBANDUCCI  B AA0 N - D UW1 - CH IY0\nBANDWAGON  B AE1 N D - W AE2 - G AH0 N\nBANDWIDTH  B AE1 N D - W IH0 D TH\nBANDY  B AE1 N - D IY0\nBANE  B EY1 N\nBANEGAS  B AE1 - N IH0 - G AH0 Z\nBANERJEE  B AH0 - N ER1 - JH IY0\nBANES  B EY1 N Z\nBANESTO  B AH0 - N EH1 - S T OW0\nBANESTO'S  B AH0 - N EH1 - S T OW0 Z\nBANET  B AE1 - N IH0 T\nBANEY  B EY1 - N IY0\nBANFF  B AE1 N F\nBANFIELD  B AE1 N - F IY2 L D\nBANFORD  B AE1 N - F ER0 D\nBANG  B AE1 NG\nBANGALORE  B AE1 NG - G AH0 - L AO2 R\nBANGALORE'S  B AE1 NG - G AH0 - L AO2 R Z\nBANGE  B AE1 N JH\nBANGED  B AE1 NG D\nBANGEE  B AE1 N - JH IY0\nBANGEMANN  B AE1 NG - G AH0 - M AH0 N\nBANGER  B AE1 - NG ER0\nBANGERS  B AE1 - NG ER0 Z\nBANGERT  B EY1 NG - G ER0 T\nBANGERTER  B EY1 NG - G ER0 - T ER0\nBANGHART  B AE1 NG - HH AA2 R T\nBANGING  B AE1 - NG IH0 NG\nBANGISH  B AE1 - NG IH0 SH\nBANGKOK  B AE0 NG - K AA1 K\nBANGKOK'S  B AE1 NG - K AA0 K S\nBANGKOK(2)  B AE1 NG - K AA0 K\nBANGLADESH  B AE1 NG - L AH0 - D EH2 SH\nBANGLADESH'S  B AE1 NG - L AH0 - D EH2 - SH IH0 Z\nBANGLADESHI  B AE1 NG - L AH0 - D EH2 - SH IY0\nBANGLADESHI'S  B AE1 NG - L AH0 - D EH2 - SH IY0 Z\nBANGLADESHIS  B AE1 NG - L AH0 - D EH2 - SH IY0 Z\nBANGLE  B AE1 NG - G AH0 L\nBANGO  B AA1 NG - G OW0\nBANGOR  B AE1 NG - G ER0\nBANGOR(2)  B AE1 NG - G AO2 R\nBANGS  B AE1 NG Z\nBANH  B AE1 N\nBANIA  B AA1 - N IY0 - AH0\nBANICK  B AE1 - N IH0 K\nBANIK  B AE1 - N IH0 K\nBANIS  B AE1 - N IH0 S\nBANISH  B AE1 - N IH0 SH\nBANISHED  B AE1 - N IH0 SH T\nBANISHING  B AE1 - N IH0 - SH IH0 NG\nBANISHMENT  B AE1 - N IH0 SH - M AH0 N T\nBANISTER  B AE1 - N IH0 - S T ER0\nBANJA  B AA1 - N Y AH0\nBANJO  B AE1 N - JH OW2\nBANK  B AE1 NG K\nBANK'S  B AE1 NG K S\nBANKABLE  B AE1 NG - K AH0 - B AH0 L\nBANKAMERICA  B AE2 NG - K AH0 - M EH1 - R IH0 - K AH0\nBANKAMERICA'S  B AE2 NG - K AH0 - M EH1 - R IH0 - K AH0 Z\nBANKATLANTIC  B AE2 NG K - AH0 T - L AE1 N - T IH0 K\nBANKCARD  B AE1 NG - K AA2 R D\nBANKCORP  B AE1 NG - K AO2 R P\nBANKE  B AE1 NG K\nBANKEAST  B AE2 NG - K IY1 S T\nBANKED  B AE1 NG K T\nBANKEN  B AE1 NG - K AH0 N\nBANKER  B AE1 NG - K ER0\nBANKER'S  B AE1 NG - K ER0 Z\nBANKERS  B AE1 NG - K ER0 Z\nBANKERS'  B AE1 NG - K ER0 Z\nBANKERT  B AE1 NG - K ER0 T\nBANKES  B AE1 NG K S\nBANKEY  B AE1 N - K IY2\nBANKHEAD  B AE1 NG K - HH EH2 D\nBANKHOLDING  B AE1 NG K - HH OW2 L - D IH0 NG\nBANKING  B AE1 NG - K IH0 NG\nBANKING'S  B AE1 NG - K IH0 NG Z\nBANKNOTE  B AE1 NG K - N OW2 T\nBANKNOTES  B AE1 NG K - N OW2 T S\nBANKO  B AE1 NG - K OW0\nBANKOWSKI  B AH0 NG - K AO1 F S - K IY0\nBANKROLL  B AE1 NG K - R OW2 L\nBANKROLLED  B AE1 NG K - R OW2 L D\nBANKROLLING  B AE1 NG K - R OW2 - L IH0 NG\nBANKROLLS  B AE1 NG K - R OW2 L Z\nBANKRUPCTY  B AE1 NG - K R AH0 P T - S IY0\nBANKRUPT  B AE1 NG - K R AH0 P T\nBANKRUPTCIES  B AE1 NG - K R AH0 P T - S IY0 Z\nBANKRUPTCY  B AE1 NG - K R AH0 P - S IY0\nBANKRUPTCY'S  B AE1 NG - K R AH0 P - S IY0 Z\nBANKRUPTCY(2)  B AE1 NG - K R AH0 P T - S IY0\nBANKRUPTED  B AE1 NG - K R AH0 P - T IH0 D\nBANKRUPTING  B AE1 NG - K R AH2 P - T IH0 NG\nBANKS  B AE1 NG K S\nBANKS'  B AE1 NG K S\nBANKS'S  B AE1 NG K - S IH0 Z\nBANKSHARE  B AE1 NG K - SH EH2 R\nBANKSHARES  B AE1 NG K - SH EH2 R Z\nBANKSON  B AE1 NG K - S AH0 N\nBANKSTON  B AE1 NG K - S T AH0 N\nBANKVEREIN  B AE1 NG K - V ER0 - AY2 N\nBANKVERMONT  B AE1 NG K - V ER0 - M AA1 N T\nBANKWORCESTER  B AE1 NG K - W ER1 - CH EH2 - S T ER0\nBANKWORCESTER(2)  B AE1 NG - K W UW1 - S T ER0\nBANN  B AE1 N\nBANNAN  B AE1 - N AH0 N\nBANNED  B AE1 N D\nBANNER  B AE1 - N ER0\nBANNER'S  B AE1 - N ER0 Z\nBANNERMAN  B AE1 - N ER0 - M AH0 N\nBANNERS  B AE1 - N ER0 Z\nBANNICK  B AE1 - N IH0 K\nBANNING  B AE1 - N IH0 NG\nBANNINGS  B AE1 - N IH0 NG Z\nBANNISTER  B AE1 - N AH0 - S T ER0\nBANNISTER(2)  B AE1 - N IH0 - S T ER0\nBANNON  B AE1 - N AH0 N\nBANOS  B AA1 - N OW0 Z\nBANOUN  B AH0 - N UW1 N\nBANPAIS  B AE2 N - P EY1\nBANPONCE  B AE1 N - P AA0 N S\nBANQUE  B AE1 NG K\nBANQUET  B AE1 NG - K W AH0 T\nBANQUETS  B AE1 NG - K W AH0 T S\nBANQUO'S  B AE1 NG - K W OW0 Z\nBANS  B AE1 N Z\nBANSAL  B AA0 N - S AE1 L\nBANSHEE  B AE0 N - SH IY1\nBANSHEE(2)  B AE1 N - SH IY0\nBANTA  B AE1 N - T AH0\nBANTAM  B AE1 N - T AH0 M\nBANTAM'S  B AE1 N - T AH0 M Z\nBANTAMS  B AE1 N - T AH0 M Z\nBANTER  B AE1 N - T ER0\nBANTERED  B AE1 N - T ER0 D\nBANTERING  B AE1 N - T ER0 - IH0 NG\nBANTLE  B AE1 N - T AH0 L\nBANTON  B AE1 N - T AH0 N\nBANTU  B AE1 N - T UW0\nBANTZ  B AE1 N T S\nBANUELOS  B AA0 N - W EH1 - L OW0 Z\nBANVILLE  B AA1 N - V IH0 L\nBANWART  B AE1 N - W AO2 R T\nBANXQUOTE  B AE0 NG K - S K W OW1 T\nBANYA  B AA1 - N Y AH0\nBANYA(2)  B AE1 - N Y AH0\nBANYALUCA  B AE1 - N Y AH0 - L UW2 - K AH0\nBANYAN  B AE1 - N Y AH0 N\nBANYAS  B AA1 - N Y AH0 Z\nBANYAS(2)  B AE1 - N Y AH0 Z\nBANYU  B AA1 - N UW0\nBANZHAF  B AE1 N Z - HH AH0 F\nBAO  B AW1\nBAOGUANG  B EY1 - OW0 - G W AE2 NG\nBAPLEY  B AE1 P - L IY0\nBAPNA  B AA1 P - N AH0\nBAPTISM  B AE1 P - T IH0 - Z AH0 M\nBAPTISMAL  B AE0 P - T IH1 Z - M AH0 L\nBAPTISMS  B AE1 P - T IH2 - Z AH0 M Z\nBAPTIST  B AE1 P - T AH0 S T\nBAPTIST(2)  B AE1 P - T IH0 S T\nBAPTISTA  B AE2 P - T IH1 - S T AH0\nBAPTISTE  B AH0 P - T IH1 S T\nBAPTISTERY  B AE1 P - T AH0 S - T R IY0\nBAPTISTS  B AE1 P - T AH0 S T S\nBAPTISTS(2)  B AE1 P - T AH0 S S\nBAPTIZE  B AE0 P - T AY1 Z\nBAPTIZED  B AE0 P - T AY1 Z D\nBAPTIZED(2)  B AE1 P - T AY2 Z D\nBAR  B AA1 R\nBAR'S  B AA1 R Z\nBAR-MITZVAH  B AA1 R - M IH1 T - S V AH0\nBARA  B AA1 - R AH0\nBARABAR  B EH1 - R AH0 - B AA0 R\nBARACH  B AH0 - R AA1 K\nBARACH(2)  B ER0 - AA1 K\nBARAFF  B AA0 - R AA1 F\nBARAHONA  B AE2 - R AH0 - HH OW1 - N AH0\nBARAJAS  B AA0 - R AA1 - Y AA0 Z\nBARAK  B AA1 - R AH0 K\nBARAKAT  B AA1 - R AH0 - K AA2 T\nBARAM  B EH1 - R AE0 M\nBARAN  B AA0 - R AA1 N\nBARANEK  B AE1 - R AH0 - N IH0 K\nBARANOSKI  B ER0 - AH0 - N AW1 S - K IY0\nBARANOWSKI  B ER0 - AH0 - N AO1 F S - K IY0\nBARANSKI  B ER0 - AE1 N S - K IY0\nBARANY  B ER0 - AO1 - N IY0\nBARASCH  B AE1 - R AH0 SH\nBARASH  B AE1 - R AH0 SH\nBARATH  B AE1 - R AH0 TH\nBARATTA  B AA0 - R AA1 - T AH0\nBARB  B AA1 R B\nBARB'S  B AA1 R B Z\nBARBA  B AA1 R - B AH0\nBARBADOS  B AA0 R - B EY1 - D OW0 S\nBARBAGALLO  B AA2 R - B AH0 - G AE1 - L OW0\nBARBAKOW  B AA1 R - B AH0 - K AW2\nBARBANEL  B AA1 R - B AH0 - N AH0 L\nBARBANO  B AA0 R - B AA1 - N OW0\nBARBARA  B AA1 R - B ER0 - AH0\nBARBARA'S  B AA1 R - B ER0 - AH0 Z\nBARBARA(2)  B AA1 R - B R AH0\nBARBAREE  B AA1 R - B ER0 - IY1\nBARBARIAN  B AA0 R - B EH1 - R IY0 - AH0 N\nBARBARIANS  B AA0 R - B EH1 - R IY0 - AH0 N Z\nBARBARIC  B AA0 R - B AE1 - R IH0 K\nBARBARIC(2)  B AA0 R - B EH1 - R IH0 K\nBARBARINO  B AA0 R - B AA0 - R IY1 - N OW0\nBARBARISM  B AA1 R - B ER0 - IH2 - Z AH0 M\nBARBARITY  B AA0 R - B AE1 - R AH0 - T IY0\nBARBARITY(2)  B AA0 R - B EH1 - R AH0 - T IY0\nBARBARO  B AA0 R - B AA1 - R OW0\nBARBAROUS  B AA1 R - B ER0 - AH0 S\nBARBARY  B AA1 R - B ER0 - IY0\nBARBASH  B AA1 R - B AE2 SH\nBARBATO  B AA0 R - B AA1 - T OW0\nBARBE  B AA1 R B\nBARBEAU  B AA0 R - B OW1\nBARBECUE  B AA1 R - B IH0 - K Y UW2\nBARBECUE'S  B AA1 R - B IH0 - K Y UW2 Z\nBARBECUED  B AA1 R - B IH0 - K Y UW2 D\nBARBECUEING  B AA1 R - B IH0 - K Y UW2 - IH0 NG\nBARBECUES  B AA1 R - B IH0 - K Y UW2 Z\nBARBED  B AA1 R B D\nBARBEE  B AA1 R - B IY1\nBARBELL  B AA1 R - B EH2 L\nBARBELLA  B AA2 R - B EH1 - L AH0\nBARBELLS  B AA1 R - B EH2 L Z\nBARBELS  B AA1 R - B AH0 L Z\nBARBEQUE  B AA1 R - B IH0 - K Y UW2\nBARBEQUED  B AA1 R - B IH0 - K Y UW2 D\nBARBEQUEING  B AA1 R - B IH0 - K Y UW2 - IH0 NG\nBARBEQUES  B AA1 R - B IH0 - K Y UW2 Z\nBARBER  B AA1 R - B ER0\nBARBER'S  B AA1 R - B ER0 Z\nBARBERA  B AA0 R - B EH1 - R AH0\nBARBERI  B AA0 R - B EH1 - R IY0\nBARBERIO  B AA2 R - B IY1 - R IY0 - OW0\nBARBERIS  B AA1 R - B ER0 - IH0 S\nBARBERO  B AA0 R - B EH1 - R OW0\nBARBERS  B AA1 R - B ER0 Z\nBARBERSHOP  B AA1 R - B ER0 - SH AA2 P\nBARBETTE  B AA0 R - B EH1 T\nBARBIAN  B AA1 R - B IY0 - AH0 N\nBARBIE  B AA1 R - B IY0\nBARBIE'S  B AA1 R - B IY0 Z\nBARBIER  B AA1 R - B IY0 - ER0\nBARBIERI  B AA0 R - B IH1 - R IY0\nBARBIERI'S  B AA0 R - B IH1 - R IY0 Z\nBARBIES  B AA1 R - B IY0 Z\nBARBIN  B AA1 R - B IH0 N\nBARBITURATE  B AA0 R - B IH1 - CH ER0 - AH0 T\nBARBITURATES  B AA0 R - B IH1 - CH ER0 - AH0 T S\nBARBO  B AA1 R - B OW0\nBARBONE  B AA1 R - B OW2 N\nBARBOSA  B AA0 R - B OW1 - S AH0\nBARBOUR  B AA1 R - B ER0\nBARBOUR'S  B AA1 R - B ER0 Z\nBARBOZA  B AA0 R - B OW1 - Z AH0\nBARBRA  B AA1 R - B R AH0\nBARBRE  B AA1 R - B ER0\nBARBS  B AA1 R B Z\nBARBY  B AA1 R - B IY0\nBARCA  B AA1 R - K AH0\nBARCELLA  B AA2 R - S EH1 - L AH0\nBARCELLOS  B AA0 R - S EH1 - L OW0 Z\nBARCELO  B AA0 R - CH EH1 - L OW0\nBARCELONA  B AA2 R - S IH0 - L OW1 - N AH0\nBARCENAS  B AA1 R - S IH0 - N AH0 Z\nBARCH  B AA1 R K\nBARCHEFSKY  B AA0 - CH EH1 F S - K IY0\nBARCIA  B AA1 R - CH AH0\nBARCLAY  B AA1 R K - L EY2\nBARCLAY'S  B AA1 R - K L IY0 Z\nBARCLAY'S(2)  B AA1 R K - L EY0 Z\nBARCLAY(2)  B AA1 R K - L IY2\nBARCLAYS  B AA1 R - K L IY0 Z\nBARCLAYS'  B AA1 R - K L IY0 Z\nBARCLAYS'(2)  B AA1 R K - L EY0 Z\nBARCLAYS'S  B AA1 R - K L IY2 - Z IH0 Z\nBARCLAYS'S(2)  B AA1 R - K L EY2 - Z IH0 Z\nBARCLAYS(2)  B AA1 R K - L EY0 Z\nBARCLIFT  B AA1 R K - L IH0 F T\nBARCO  B AA1 R - K OW0\nBARCO'S  B AA1 R - K OW0 Z\nBARCOMB  B AA1 R - K AH0 M\nBARCROFT  B AA1 R - K R AO2 F T\nBARCUS  B AA1 R - K AH0 S\nBARCZAK  B AA1 R - CH AE0 K\nBARD  B AA1 R D\nBARD'S  B AA1 R D Z\nBARDELL  B AA0 R - D EH1 L\nBARDEN  B AA1 R - D AH0 N\nBARDERA  B AA2 R - D EH1 - R AH0\nBARDIN  B AA1 R - D IH0 N\nBARDO  B AA1 R - D OW0\nBARDOLF  B AA1 R - D OW2 L F\nBARDOLPH  B AA1 R - D AA0 L F\nBARDON  B AA0 R - D AO1 N\nBARDRICK  B AA1 R - D R IH0 K\nBARDSLEY  B AA1 R D S - L IY0\nBARDULF  B AA1 R - D AH0 L F\nBARDULPH  B AA1 R - D AH0 L F\nBARDWELL  B AA1 R D - W EH2 L\nBARE  B EH1 R\nBARED  B EH1 R D\nBAREFIELD  B AE1 - R IH0 F - IY0 L D\nBAREFIELD(2)  B AE1 R - F IY0 L D\nBAREFOOT  B EH1 R - F UH2 T\nBAREIS  B AE1 - R AY0 Z\nBARELA  B AA0 - R EH1 - L AH0\nBARELY  B EH1 R - L IY0\nBARENBOIM  B EH1 - R AH0 N - B OY2 M\nBARENBOIM'S  B EH1 - R AH0 N - B OY2 M Z\nBARENS  B EH1 - R AH0 N Z\nBARENTINE  B AA0 - R EH0 N - T IY1 - N IY0\nBARENTINE(2)  B EH1 - R AH0 N - T IY1 N\nBARENTINE(3)  B EH1 - R AH0 N - T AY1 N\nBARENTS  B EH1 - R AH0 N T S\nBARES  B EH1 R Z\nBAREST  B EH1 - R AH0 S T\nBAREY  B EH1 - R IY0\nBARFIELD  B AA1 R - F IY2 L D\nBARFKNECHT  B AA1 R F - K AH0 - N EH0 K T\nBARFKNECHT(2)  B AA1 R F - N EH0 K T\nBARFOOT  B AA1 R - F UH2 T\nBARFUSS  B AA1 R - F AH2 S\nBARG  B AA1 R G\nBARGA  B AA1 R - G AH0\nBARGAIN  B AA1 R - G AH0 N\nBARGAIN(2)  B AA1 R - G IH0 N\nBARGAINED  B AA1 R - G AH0 N D\nBARGAINER  B AA1 R - G IH0 - N ER0\nBARGAINERS  B AA1 R - G IH0 - N ER0 Z\nBARGAINING  B AA1 R - G IH0 - N IH0 NG\nBARGAINS  B AA1 R - G AH0 N Z\nBARGAINS(2)  B AA1 R - G IH0 N Z\nBARGANIER  B AA1 R - G AH0 - N IY0 - ER0\nBARGAR  B AA0 R - G AA1 R\nBARGAS  B AA1 R - G AH0 Z\nBARGE  B AA1 R JH\nBARGED  B AA1 R JH D\nBARGER  B AA1 R - JH ER0\nBARGERON  B AA1 R - G ER0 - AH0 N\nBARGES  B AA1 R - JH AH0 Z\nBARGES(2)  B AA1 R - JH IH0 Z\nBARGMAN  B AA1 R G - M AH0 N\nBARGMANN  B AA1 R G - M AH0 N\nBARGO  B AA1 R - G OW2\nBARHORST  B AA1 R - HH AO0 R S T\nBARI  B AA1 - R IY0\nBARI'S  B AA1 - R IY0 Z\nBARIBEAU  B AE1 - R IH0 - B OW0\nBARICH  B AE1 - R IH0 K\nBARIL  B EH1 - R AH0 L\nBARILE  B AA1 - R AH0 L\nBARILLARI  B EH2 - R IH0 - L EH1 - R IY0\nBARILLARI'S  B EH2 - R IH0 - L EH1 - R IY0 Z\nBARILLO  B ER0 - IH1 - L OW0\nBARINCO  B ER0 - IH1 NG - K OW2\nBARING  B EH1 - R IH0 NG\nBARING'S  B EH1 - R IH0 NG Z\nBARINGER  B EH1 - R IH0 - NG ER0\nBARINGS  B EH1 - R IH0 NG Z\nBARINGS'  B EH1 - R IH0 NG Z\nBARIS  B AA1 - R IY0 Z\nBARISH  B EH1 - R IH0 SH\nBARITE  B EH1 - R AY0 T\nBARITES  B EH1 - R AY0 T S\nBARITONE  B EH1 - R AH0 - T OW2 N\nBARIUM  B EH1 - R IY0 - AH0 M\nBARK  B AA1 R K\nBARKAI  B AA0 R - K AY1\nBARKALOW  B AA1 R - K AH0 - L OW2\nBARKAN  B AA1 R - K AH0 N\nBARKDOLL  B AA1 R K - D AH0 L\nBARKDULL  B AA1 R K - D AH0 L\nBARKE  B AA1 R K\nBARKED  B AA1 R K T\nBARKELEY  B AA1 R K - L IY0\nBARKER  B AA1 R - K ER0\nBARKERS  B AA1 R - K ER0 Z\nBARKES  B AA1 R K S\nBARKETT  B AA1 R - K IH0 T\nBARKEY  B AA1 R - K IY2\nBARKHURST  B AA1 R K - HH ER0 S T\nBARKIN  B AA1 R - K IH0 N\nBARKING  B AA1 R - K IH0 NG\nBARKLEY  B AA1 R K - L IY0\nBARKLOW  B AA1 R - K L OW2\nBARKMAN  B AA1 R K - M AH0 N\nBARKO  B AA1 R - K OW0\nBARKOCY  B AA1 R - K AH0 - S IY0\nBARKOW  B AA1 R - K OW0\nBARKS  B AA1 R K S\nBARKSDALE  B AA1 R K S - D EY2 L\nBARKSHIRE  B AA1 R K - SH AY2 R\nBARKUS  B AA1 R - K AH0 S\nBARLAGE  B AA1 R - L IH0 JH\nBARLETT  B AA1 R - L IH0 T\nBARLETTA  B AA0 R - L EH1 - T AH0\nBARLETTESVILLE  B AA1 R - L AH0 T S - V IH2 L\nBARLEY  B AA1 R - L IY0\nBARLOON  B AA0 R - L UW1 N\nBARLOW  B AA1 R - L OW2\nBARLOWE  B AA1 R - L OW2\nBARMAN  B AA1 R - M AH0 N\nBARMORE  B AA1 R - M AO0 R\nBARN  B AA1 R N\nBARNA  B AA1 R - N AH0\nBARNABAS  B AA1 R - N AH0 - B AH0 S\nBARNABY  B AA1 R - N AH0 - B IY0\nBARNABY'S  B AA1 R - N AH0 - B IY0 Z\nBARNACLE  B AA1 R - N AH0 - K AH0 L\nBARNACLES  B AA1 R - N AH0 - K AH0 L Z\nBARNARD  B AA1 R - N ER0 R D\nBARNARD'S  B AA1 R - N ER0 D Z\nBARNARD(2)  B ER0 - N AA1 R D\nBARNARD(3)  B AA1 R - N AA0 R D\nBARNARDS  B AA1 R - N ER0 D Z\nBARNAS  B AA1 R - N AH0 Z\nBARNDT  B AA1 R N T\nBARNELL  B AA1 R - N AH0 L\nBARNER  B AA1 R - N ER0\nBARNES  B AA1 R N Z\nBARNET  B AA1 R - N IH0 T\nBARNETT  B AA0 R - N EH1 T\nBARNETT'S  B AA0 R - N EH1 T S\nBARNETTE  B AA1 R - N EH1 T\nBARNEVIK  B AA0 R - N EH1 - V IH0 K\nBARNEY  B AA1 R - N IY0\nBARNEY'S  B AA1 R - N IY0 Z\nBARNEYS  B AA1 R - N IY0 Z\nBARNFIELD  B AA1 R N - F IY2 L D\nBARNHARD  B AA1 R N - HH AA2 R D\nBARNHARDT  B AA1 R N - HH AA2 R T\nBARNHART  B AA1 R N - HH AA2 R T\nBARNHILL  B AA1 R N - HH IH2 L\nBARNHOUSE  B AA1 R N - HH AW2 S\nBARNICK  B AA1 R - N IH0 K\nBARNICLE  B AA1 R - N IH0 - K AH0 L\nBARNISH  B AA1 R - N IH0 SH\nBARNO  B AA1 R - N OW0\nBARNOWSKI  B AA0 R - N AW1 S - K IY0\nBARNS  B AA1 R N Z\nBARNSTORM  B AA1 R N - S T AO2 R M\nBARNSTORMING  B AA1 R N - S T AO2 R - M IH0 NG\nBARNUM  B AA1 R - N AH0 M\nBARNWELL  B AA1 R N - W EH2 L\nBARNY  B AA1 R - N IY0\nBARNYARD  B AA1 R N - Y AA2 R D\nBARO  B AA1 - R OW0\nBAROID  B ER0 - OY1 D\nBAROMETER  B ER0 - AA1 - M IH0 - T ER0\nBAROMETERS  B ER0 - AA1 - M IH0 - T ER0 Z\nBAROMETRIC  B AE2 - R AH0 - M EH1 - T R IH0 K\nBARON  B AE1 - R AH0 N\nBARON'S  B AE1 - R AH0 N Z\nBARON'S(2)  B EH1 - R AH0 N Z\nBARON(2)  B EH1 - R AH0 N\nBARONE  B ER0 - OW1 N\nBARONE'S  B ER0 - OW1 N Z\nBARONESS  B EH1 - R AH0 - N IH0 S\nBARONET  B EH1 - R AH0 - N AH0 T\nBARONET(2)  B EH2 - R AH0 - N EH1 T\nBARONETS  B EH1 - R AH0 - N AH0 T S\nBARONETS(2)  B EH2 - R AH0 - N EH1 T S\nBARONI  B AA0 - R OW1 - N IY0\nBARONS  B AE1 - R AH0 N Z\nBARONS(2)  B EH1 - R AH0 N Z\nBAROODY  B ER0 - UW1 - D IY0\nBAROQUE  B ER0 - OW1 K\nBAROS  B AA1 - R OW0 Z\nBAROVIC  B EH1 - R AH0 - V IH0 K\nBAROVSKY  B ER0 - AA1 V S - K IY0\nBARR  B AA1 R\nBARR'S  B AA1 R Z\nBARRA  B AA1 - R AH0\nBARRACK  B AE1 - R AH0 K\nBARRACK(2)  B EH1 - R AH0 K\nBARRACKS  B AE1 - R AH0 K S\nBARRACKS(2)  B EH1 - R AH0 K S\nBARRACLOUGH  B AE1 - R AH0 K - L AW0\nBARRACO  B AA0 - R AA1 - K OW0\nBARRACUDA  B EH2 - R AH0 - K UW1 - D AH0\nBARRADINO  B EH2 - R AH0 - D IY1 - N OW0\nBARRAGAN  B EH1 - R AH0 - G AH0 N\nBARRAGE  B ER0 - AA1 ZH\nBARRAGED  B ER0 - AA1 ZH D\nBARRAGES  B ER0 - AA1 - ZH IH0 Z\nBARRANCO  B AA0 - R AA1 N - K OW0\nBARRAS  B AE1 - R AH0 Z\nBARRASSO  B AA2 - R AA1 - S OW0\nBARRATT  B AE1 - R AH0 T\nBARRAZA  B AA2 - R AA1 - Z AH0\nBARRE  B EH1 - R IY0\nBARRE(2)  B AA1 R\nBARRECA  B AA2 - R EH1 - K AH0\nBARRED  B AA1 R D\nBARREDA  B AA0 - R EY1 - D AH0\nBARREIRO  B AA0 - R EH1 - R OW0\nBARREL  B AE1 - R AH0 L\nBARREL(2)  B EH1 - R AH0 L\nBARRELED  B AE1 - R AH0 L D\nBARRELED(2)  B EH1 - R AH0 L D\nBARRELING  B AE1 - R AH0 L - IH0 NG\nBARRELING(2)  B EH1 - R AH0 L - IH0 NG\nBARRELL  B AA0 - R EY1 L\nBARRELS  B AE1 - R AH0 L Z\nBARRELS(2)  B EH1 - R AH0 L Z\nBARREN  B AE1 - R AH0 N\nBARREN(2)  B EH1 - R AH0 N\nBARRENS  B AE1 - R AH0 N Z\nBARRENTINE  B AE1 - R AH0 N - T AY2 N\nBARRERA  B AA2 - R EH1 - R AH0\nBARRERAS  B AA0 - R EH1 - R AA0 Z\nBARRES  B AA1 R Z\nBARRESI  B AA2 - R EH1 - S IY0\nBARRET  B AE1 - R IH0 T\nBARRETO  B AA0 - R EH1 - T OW0\nBARRETT  B AE1 - R IH0 T\nBARRETT(2)  B EH1 - R IH0 T\nBARRETTA  B AA0 - R EH1 - T AH0\nBARRETTE  B ER0 - EH1 T\nBARRETTO  B AA0 - R EH1 - T OW0\nBARRICADA  B AA2 - R IH0 - K AA1 - D AH0\nBARRICADE  B AE1 - R AH0 - K EY2 D\nBARRICADE(2)  B EH1 - R AH0 - K EY2 D\nBARRICADED  B AE1 - R AH0 - K EY2 - D IH0 D\nBARRICADED(2)  B EH1 - R AH0 - K EY2 - D IH0 D\nBARRICADES  B AE1 - R AH0 - K EY2 D Z\nBARRICADES(2)  B EH1 - R AH0 - K EY2 D Z\nBARRICK  B AE1 - R IH0 K\nBARRICK'S  B AE1 - R IH0 K S\nBARRICK'S(2)  B EH1 - R IH0 K S\nBARRICK(2)  B EH1 - R IH0 K\nBARRICKLOW  B AE1 - R IH0 K - L AW0\nBARRICKMAN  B AE1 - R IH0 K - M AH0 N\nBARRIE  B AE1 - R IY0\nBARRIE(2)  B EH1 - R IY0\nBARRIENTES  B ER0 - IY1 N T S\nBARRIENTEZ  B AA0 - R IY1 N - T EH0 Z\nBARRIENTOS  B AA0 - R IY1 N - T OW0 Z\nBARRIER  B AE1 - R IY0 - ER0\nBARRIER(2)  B EH1 - R IY0 - ER0\nBARRIERE  B AA0 - R IH1 - R IY0\nBARRIERS  B AE1 - R IY0 - ER0 Z\nBARRIERS(2)  B EH1 - R IY0 - ER0 Z\nBARRIGA  B AA2 - R IY1 - G AH0\nBARRIGER  B AE1 - R IH0 G - ER0\nBARRILLEAUX  B AE1 - R IH0 L - OW2\nBARRINEAU  B AE1 - R IH0 N - OW2\nBARRING  B AA1 - R IH0 NG\nBARRINGER  B AE1 - R IH0 NG - ER0\nBARRINGS  B AA1 - R IH0 NG Z\nBARRINGTON  B AE1 - R IH0 NG - T AH0 N\nBARRINGTON(2)  B EH1 - R IH0 NG - T AH0 N\nBARRIO  B AA1 - R IY0 - OW0\nBARRIOS  B AA0 - R IY1 - OW0 Z\nBARRIOS(2)  B EH0 - R IY1 - OW0 Z\nBARRIS  B AE1 - R IH0 S\nBARRIS(2)  B EH1 - R IH0 S\nBARRISH  B AE1 - R IH0 SH\nBARRISTER  B AE1 - R IH0 S - T ER0\nBARRISTER(2)  B EH1 - R IH0 - S T ER0\nBARRISTERS  B AE1 - R IH0 S - T ER0 Z\nBARRISTERS(2)  B EH1 - R IH0 - S T ER0 Z\nBARRITT  B ER0 - IH1 T\nBARRO  B AA1 - R OW0\nBARRON  B AE1 - R AH0 N\nBARRON'S  B AE1 - R AH0 N Z\nBARRON'S(2)  B EH1 - R AH0 N Z\nBARRON(2)  B EH1 - R AH0 N\nBARRONE  B ER0 - OW1 N\nBARROOM  B AA1 R - R UW2 M\nBARROS  B AA1 - R OW0 Z\nBARROSO  B AA2 - R OW1 - S OW0\nBARROW  B AE1 - R OW0\nBARROW(2)  B EH1 - R OW0\nBARROWMAN  B AE1 - R OW0 - M AH0 N\nBARROWMAN(2)  B EH1 - R OW0 - M AH0 N\nBARROWS  B AE1 - R OW0 Z\nBARROWS(2)  B EH1 - R OW0 Z\nBARRS  B AA1 R Z\nBARRUS  B AE1 - R AH0 S\nBARRY  B AE1 - R IY0\nBARRY'S  B AE1 - R IY0 Z\nBARRY'S(2)  B EH1 - R IY0 Z\nBARRY(2)  B EH1 - R IY0\nBARRYMORE  B AE1 - R IY0 - M AO2 R\nBARRYMORE(2)  B EH1 - R IY0 - M AO2 R\nBARS  B AA1 R Z\nBARSAMIAN  B AA2 R - S EY1 - M IY0 - AH0 N\nBARSANTI  B AA0 R - S AA1 N - T IY0\nBARSCH  B AA1 R SH\nBARSCHEL  B AA1 R - SH AH0 L\nBARSH  B AA1 R SH\nBARSHEFSKY  B AA2 R - SH EH1 F S - K IY0\nBARSKY  B AA1 R S - K IY0\nBARSNESS  B AA1 R Z - N AH0 S\nBARSON  B AA1 R - S AH0 N\nBARSOTTI  B AA0 R - S OW1 - T IY0\nBARSTAD  B AA1 R - S T AH0 D\nBARSTOW  B AA1 R - S T OW2\nBARSZCZ  B AA1 R SH CH\nBART  B AA1 R T\nBARTA  B AA1 R - T AH0\nBARTAK  B AA1 R - T AH0 K\nBARTEE  B AA1 R - T IY2\nBARTEK  B AA1 R - T EH2 K\nBARTEL  B AA1 R - T AH0 L\nBARTELL  B AA0 R - T EY1 L\nBARTELS  B AA1 R - T AH0 L Z\nBARTELSON  B AA1 R - T IH0 L - S AH0 N\nBARTELT  B AA1 R - T IH0 L T\nBARTEN  B AA1 R - T AH0 N\nBARTENDER  B AA1 R - T EH2 N - D ER0\nBARTENDERS  B AA1 R - T EH2 N - D ER0 Z\nBARTER  B AA1 R - T ER0\nBARTERED  B AA1 R - T ER0 D\nBARTERING  B AA1 R - T ER0 - IH0 NG\nBARTH  B AA1 R TH\nBARTHA  B AA1 R - TH AH0\nBARTHEL  B AA1 R - TH AH0 L\nBARTHELEMY  B AA2 R - TH EH1 - L AH0 - M IY0\nBARTHELME  B AA1 R - TH AH0 L M\nBARTHELME'S  B AA1 R - TH AH0 L M Z\nBARTHES  B AA1 R TH S\nBARTHOLD  B AA1 R - TH OW2 L D\nBARTHOLOMAY  B AA0 R - TH AH0 - L AA1 - M EY0\nBARTHOLOMEW  B AA0 R - TH AA1 - L AH0 - M Y UW2\nBARTHOLOW  B AA1 R - TH AH0 - L OW0\nBARTHRAM  B AA1 R - TH R AE2 M\nBARTKO  B AA1 R T - K OW0\nBARTKOWIAK  B ER0 T - K AW1 - IY0 - AE0 K\nBARTKOWSKI  B ER0 T - K AO1 F S - K IY0\nBARTKUS  B AA1 R T - K IH0 S\nBARTL  B AA1 R - T AH0 L\nBARTLE  B AA1 R - T AH0 L\nBARTLEBAUGH  B AA1 R - T AH0 L - B AO0\nBARTLES  B AA1 R - T AH0 L Z\nBARTLESON  B AA1 R - T AH0 L - S AH0 N\nBARTLESVILLE  B AA1 R - T AH0 L Z - V IH2 L\nBARTLETT  B AA1 R T - L IH0 T\nBARTLETT'S  B AA1 R T - L AH0 T S\nBARTLEY  B AA1 R T - L IY0\nBARTLING  B AA1 R T - L IH0 NG\nBARTLOW  B AA1 R T - L OW0\nBARTMAN  B AA1 R T - M AH0 N\nBARTMESS  B AA1 R T - M IH0 S\nBARTNICK  B AA1 R T - N IH0 K\nBARTNICKI  B ER0 T - N IH1 T S - K IY0\nBARTNIK  B AA1 R T - N IH0 K\nBARTO  B AA1 R - T OW0\nBARTOK  B AA1 R - T AH0 K\nBARTOL  B AA1 R - T AH0 L\nBARTOLETTI  B AA0 R - T OW0 - L EH1 - T IY0\nBARTOLI  B AA0 R - T OW1 - L IY0\nBARTOLINI  B AA0 R - T OW0 - L IY1 - N IY0\nBARTOLO  B AA0 R - T OW1 - L OW0\nBARTOLOMEI  B AA0 R - T OW0 - L OW0 - M EY1 - IY0\nBARTOLOMEO  B AA0 R - T AO0 - L AH0 - M EY1 - OW0\nBARTOLUCCI  B AA0 R - T OW0 - L UW1 - CH IY0\nBARTON  B AA1 R - T AH0 N\nBARTON'S  B AA1 R - T AH0 N Z\nBARTONE  B AA0 R - T OW1 - N IY0\nBARTOO  B AA1 R - CH UW0\nBARTOS  B AA1 R - T OW0 Z\nBARTOSCH  B AA1 R - T AO0 SH\nBARTOSH  B AA1 R - T AH0 SH\nBARTOSIEWICZ  B ER0 - T AA1 - S AH0 - V IH0 CH\nBARTOSIK  B ER0 - T OW1 - S IH0 K\nBARTOSZEK  B ER0 - T AA1 - SH EH0 K\nBARTOW  B AA1 R - T OW2\nBARTRAM  B AA1 R - T R AE2 M\nBARTS  B AA1 R T S\nBARTSCH  B AA1 R CH\nBARTUNEK  B AA1 R - T AH0 - N IH0 K\nBARTUS  B AA1 R - T AH0 S\nBARTZ  B AA1 R T S\nBARUCH  B AA2 - R UW1 K\nBARWICK  B AA1 R - W IH2 K\nBARYSHNIKOV  B ER0 - IH1 SH - N IH0 - K AA2 V\nBARYSHNIKOV'S  B ER0 - IH1 SH - N IH0 - K AA2 V Z\nBARZ  B AA1 R Z\nBAS-RELIEF  B AA1 - R IY0 - L IY1 F\nBAS-RELIEF(2)  B AA1 - S R IY0 - L IY1 F\nBAS-RELIEFS  B AA1 - R IY0 - L IY1 F S\nBAS-RELIEFS(2)  B AA1 - S R IY0 - L IY1 F S\nBASA  B AA1 - S AH0\nBASAL  B EY1 - S AH0 L\nBASALDUA  B AA0 - S AA0 L - D UW1 - AH0\nBASALT  B AH0 - S AO1 L T\nBASALTS  B AH0 - S AO1 L T S\nBASARA  B AH0 - S EH1 - R AH0\nBASARA'S  B AH0 - S EH1 - R AH0 Z\nBASAYEV  B AE1 - S AA0 - Y EH2 V\nBASAYEV(2)  B AE1 - S AA0 Y - EH2 F\nBASCAY  B AE1 - S K EY0\nBASCH  B AE1 SH\nBASCO  B AA1 - S K OW0\nBASCOM  B AE1 - S K AH0 M\nBASDEN  B AE1 - S D AH0 N\nBASE  B EY1 S\nBASE'S  B EY1 - S AH0 Z\nBASEBALL  B EY1 S - B AO1 L\nBASEBALL'S  B EY1 S - B AO1 L Z\nBASEBALLS  B EY1 S - B AO1 L Z\nBASEBOARD  B EY1 S - B AO2 R D\nBASEBOARDS  B EY1 S - B AO2 R D Z\nBASED  B EY1 S T\nBASEHORE  B AE1 - S IH0 - HH AO0 R\nBASEHORE(2)  B EY1 S - HH AO0 R\nBASEL  B AA1 - Z AH0 L\nBASELESS  B EY1 S - L AH0 S\nBASELINE  B EY1 S - L AY2 N\nBASEMAN  B EY1 S - M AH0 N\nBASEMENT  B EY1 S - M AH0 N T\nBASEMENTS  B EY1 S - M AH0 N T S\nBASENJI  B AH0 - S EH1 N - JH IY0\nBASES  B EY1 - S AH0 Z\nBASES(2)  B EY1 - S IH0 Z\nBASES(3)  B EY1 - S IY0 Z\nBASEY  B EY1 - S IY0\nBASFORD  B AE1 S - F ER0 D\nBASGALL  B AE1 - S G AH0 L\nBASH  B AE1 SH\nBASHA  B AA1 - SH AH0\nBASHAM  B AE1 - SH AH0 M\nBASHAW  B AH0 - SH AO1\nBASHED  B AE1 SH T\nBASHER  B AE1 - SH ER0\nBASHERS  B AE1 - SH ER0 Z\nBASHES  B AE1 - SH IH0 Z\nBASHFORD  B AE1 SH - F ER0 D\nBASHFUL  B AE1 SH - F AH0 L\nBASHING  B AE1 - SH IH0 NG\nBASHIR  B AH0 - SH IH1 R\nBASHOR  B AE1 - SH ER0\nBASHORE  B AE1 - SH ER0\nBASIC  B EY1 - S IH0 K\nBASIC'S  B EY1 - S IH0 K S\nBASICALLY  B EY1 - S IH0 K - L IY0\nBASICH  B AA1 - S IH0 HH\nBASICS  B EY1 - S IH0 K S\nBASIE  B EY1 - Z IY0\nBASIL  B AE1 - Z AH0 L\nBASILE  B AA1 - S AH0 L\nBASILIA  B AA0 - S IY1 - L IY0 - AH0\nBASILICA  B AH0 - S IH1 - L IH0 - K AH0\nBASILICA(2)  B AH0 - Z IH1 - L AH0 - K AH0\nBASILIO  B AA0 - S IY1 - L IY0 - OW0\nBASIM  B AA0 - S IY1 M\nBASIM'S  B AA0 - S IY1 M Z\nBASIN  B EY1 - S AH0 N\nBASING  B EY1 - S IH0 NG\nBASINGER  B EY1 - S IH0 - NG ER0\nBASINS  B EY1 - S AH0 N Z\nBASINSKI  B AH0 - S IH1 N - S K IY0\nBASIS  B EY1 - S AH0 S\nBASIS(2)  B EY1 - S IH0 S\nBASISTA  B AH0 - S IH1 - S T AH0\nBASIX  B EY1 - S IH0 K S\nBASK  B AE1 S K\nBASKED  B AE1 S K T\nBASKERVILLE  B AE1 - S K ER0 - V IH2 L\nBASKET  B AE1 - S K AH0 T\nBASKETBALL  B AE1 - S K AH0 T - B AO2 L\nBASKETBALL'S  B AE1 - S K AH0 T - B AO2 L Z\nBASKETBALLS  B AE1 - S K AH0 T - B AO2 L Z\nBASKETMAKER  B AE1 - S K AH0 T - M EY2 - K ER0\nBASKETMAKING  B AE1 - S K AH0 T - M EY2 - K IH0 NG\nBASKETRY  B AE1 - S K AH0 - T R IY0\nBASKETS  B AE1 - S K AH0 T S\nBASKETT  B AE1 - S K IH0 T\nBASKETTE  B AH0 - S K EH1 T\nBASKIN  B AE1 - S K IH0 N\nBASKING  B AE1 - S K IH0 NG\nBASKINS  B AE1 - S K IH0 N Z\nBASKS  B AE1 S K S\nBASLE  B AE1 - S AH0 L\nBASLER  B EY1 - Z AH0 L - ER0\nBASNER  B AE1 - S N ER0\nBASNETT  B AE1 - S N IH0 T\nBASNIGHT  B AE1 Z - N AY2 T\nBASON  B AE1 - S AH0 N\nBASORE  B AA0 - S AO1 - R IY0\nBASQUE  B AE1 S K\nBASQUES  B AE1 S K S\nBASQUEZ  B AA0 - S K W EH1 Z\nBASRA  B AA1 - S R AA0\nBASS  B AE1 S\nBASS'S  B EY1 - S IH0 Z\nBASS'S(2)  B AE1 - S IH0 Z\nBASS(2)  B EY1 S\nBASSA  B AE1 - S AH0\nBASSAM  B AE1 - S AH0 M\nBASSE  B AE1 S\nBASSES  B AE1 - S IH0 Z\nBASSES(2)  B EY1 - S IH0 Z\nBASSET  B AE1 - S IH0 T\nBASSETT  B AE1 - S IH0 T\nBASSETTE  B AH0 - S EH1 T\nBASSETTI  B AA0 - S EH1 - T IY0\nBASSFORD  B AE1 S - F ER0 D\nBASSHAM  B AE1 - SH AH0 M\nBASSI  B AE1 - S IY0\nBASSIN  B AE1 - S IH0 N\nBASSINGER  B AE1 - S IH0 N - JH ER0\nBASSIR  B AH0 - S IH1 R\nBASSIR'S  B AH0 - S IH1 R Z\nBASSIST  B EY1 - S IH0 S T\nBASSISTS  B EY1 - S IH0 S T S\nBASSLER  B AE1 S - L ER0\nBASSMAN  B AE1 S - M AH0 N\nBASSO  B AE1 - S OW0\nBASSOON  B AH0 - S UW1 N\nBAST  B AE1 S T\nBASTA  B AE1 - S T AH0\nBASTARACHE  B AA0 - S T AA1 - R EY0 K\nBASTARD  B AE1 - S T ER0 D\nBASTARDS  B AE1 - S T ER0 D Z\nBASTEDO  B AA0 - S T EY1 - D OW0\nBASTEN  B EY1 - S T AH0 N\nBASTIAN  B AE1 - S CH IH0 N\nBASTIEN  B AE1 - S T AH0 N\nBASTILLE  B AE1 - S T IH0 L\nBASTILLE(2)  B AE2 - S T IH1 L\nBASTIN  B AE1 - S T IH0 N\nBASTION  B AE1 - S CH AH0 N\nBASTIONS  B AE1 - S CH AH0 N Z\nBASTOGNE  B AE2 - S T OW1 N\nBASTOGNE'S  B AE2 - S T OW1 N Z\nBASTON  B AE1 - S T AH0 N\nBASTONE  B AA1 - S T OW0 N\nBASTOW  B AE1 - S T OW0\nBASTYR  B EY1 - S T IH0 R\nBASU  B AA1 - S UW0\nBASULTO  B AH0 - S AH1 L - T OW0\nBASURTO  B AA0 - S UH1 R - T OW0\nBASWELL  B AE1 - S W EH0 L\nBASYE  B AE1 - S AY0\nBAT  B AE1 T\nBATAAN  B AH0 - T AA1 N\nBATAN  B EY1 - T AH0 N\nBATAT  B AH0 - T AA1 T\nBATAVIA  B AH0 - T EY1 - V IY0 - AH0\nBATCH  B AE1 CH\nBATCHELDER  B AE1 - CH EH2 L - D ER0\nBATCHELLER  B AE1 - CH AH0 - L ER0\nBATCHELOR  B AE1 - CH AH0 - L ER0\nBATCHES  B AE1 - CH AH0 Z\nBATCHES(2)  B AE1 - CH IH0 Z\nBATDORF  B AE1 T - D AO0 R F\nBATE  B EY1 T\nBATED  B EY1 - T IH0 D\nBATEMAN  B EY1 T - M AH0 N\nBATES  B EY1 T S\nBATES'  B EY1 T S\nBATESON  B AE1 - T IH0 - S AH0 N\nBATESON(2)  B EY1 T - S AH0 N\nBATESON(3)  B AE1 T - S AH0 N\nBATESVILLE  B EY1 T S - V IH2 L\nBATEY  B EY1 - T IY0\nBATH  B AE1 TH\nBATHE  B EY1 DH\nBATHED  B EY1 DH D\nBATHER  B EY1 - DH ER0\nBATHER(2)  B AE1 - DH ER0\nBATHERS  B EY1 - DH ER0 Z\nBATHERS(2)  B AE1 - DH ER0 Z\nBATHES  B EY1 DH Z\nBATHGATE  B AE1 TH - G EY2 T\nBATHING  B EY1 - DH IH0 NG\nBATHKE  B AE1 TH K\nBATHOLITH  B AE1 - TH AH0 - L IH0 TH\nBATHOLITHS  B AE1 - TH AH0 - L IH0 TH S\nBATHRICK  B AE1 TH - R IH0 K\nBATHROBE  B AE1 TH - R OW2 B\nBATHROBES  B AE1 TH - R OW2 B Z\nBATHROOM  B AE1 TH - R UW2 M\nBATHROOMS  B AE1 TH - R UW2 M Z\nBATHROOMS(2)  B AA1 TH - R UW2 M Z\nBATHS  B AE1 TH S\nBATHSHEBA  B AE0 TH - SH IY1 - B AH0\nBATHTUB  B AE1 TH - T AH0 B\nBATHTUBS  B AE1 TH - T AH2 B Z\nBATHURST  B AE1 - TH ER0 S T\nBATHURST'S  B AE1 - TH ER0 S T S\nBATIBOT  B AE1 - T IH0 - B AA0 T\nBATIE  B EY1 - T IY0\nBATIGNOLLES  B AE2 - T IH0 - N Y OW1 - L AH0 S\nBATIK  B AH0 - T IY1 K\nBATIKS  B AE1 - T IH0 K S\nBATIKS(2)  B AH0 - T IY1 K S\nBATISTA  B AH0 - T IH1 - S T AH0\nBATLEY  B AE1 T - L IY0\nBATMAN  B AE1 T - M AE2 N\nBATOGOWSKI  B AE2 - T OW0 - G AW1 S - K IY0\nBATON  B AH0 - T AA1 N\nBATON(2)  B AE1 - T AA2 N\nBATON(3)  B AE1 - T AH0 N\nBATON-ROUGE  B AE1 - T AH0 N - R UW1 JH\nBATON-ROUGE'S  B AE1 - T AH0 N - R UW1 - JH IH0 Z\nBATONS  B AE0 - T AA1 N Z\nBATOR  B AA0 - T AO1 R\nBATRA  B AE1 - T R AH0\nBATRES  B EY1 - T ER0 Z\nBATS  B AE1 T S\nBATSON  B AE1 T - S AH0 N\nBATSON'S  B AE1 T - S AH0 N Z\nBATT  B AE1 T\nBATTAGLIA  B AA0 - T AA1 G - L IY0 - AH0\nBATTAGLINI  B AA0 - T AA0 G - L IY1 - N IY0\nBATTALION  B AH0 - T AE1 - L Y AH0 N\nBATTALIONS  B AH0 - T AE1 - L Y AH0 N Z\nBATTE  B AE1 T\nBATTED  B AE1 - T IH0 D\nBATTELLE  B AH0 - T EH1 L\nBATTELLE'S  B AH0 - T EH1 L Z\nBATTEN  B AE1 - T AH0 N\nBATTENBERG  B AE1 - T AH0 N - B ER2 G\nBATTENFIELD  B AE1 - T AH0 N - F IY2 L D\nBATTENING  B AE1 - T AH0 N - IH0 NG\nBATTER  B AE1 - T ER0\nBATTERED  B AE1 - T ER0 D\nBATTERER  B AE1 - T ER0 - ER0\nBATTERERS  B AE1 - T ER0 - ER0 Z\nBATTERIES  B AE1 - T ER0 - IY0 Z\nBATTERING  B AE1 - T ER0 - IH0 NG\nBATTERMAN  B AE1 - T ER0 - M AH0 N\nBATTERS  B AE1 - T ER0 Z\nBATTERSBY  B AE1 - T ER0 S - B IY0\nBATTERSON  B AE1 - T ER0 - S AH0 N\nBATTERY  B AE1 - T ER0 - IY0\nBATTERYMARCH  B AH0 - T EH1 - R IY0 - M AA0 R CH\nBATTEY  B AE1 - T IY0\nBATTIATO  B AA0 - T IY0 - AA1 - T OW0\nBATTICALOA  B AE2 - T IH0 - K AH0 - L OW1 - AH0\nBATTIN  B AE1 - T IH0 N\nBATTING  B AE1 - T IH0 NG\nBATTIPAGLIA  B AE2 - T IH0 - P AE1 G - L IY0 - AH0\nBATTIS  B AE1 - T IH0 S\nBATTISON  B AE1 - T IH0 - S AH0 N\nBATTISTA  B AH0 - T IY1 - S T AH0\nBATTISTE  B AA0 - T IY1 - S T IY0\nBATTISTI  B AA0 - T IY1 - S T IY0\nBATTISTONI  B AA0 - T IY0 - S T OW1 - N IY0\nBATTLE  B AE1 - T AH0 L\nBATTLE'S  B AE1 - T AH0 L Z\nBATTLED  B AE1 - T AH0 L D\nBATTLEFIELD  B AE1 - T AH0 L - F IY2 L D\nBATTLEFIELDS  B AE1 - T AH0 L - F IY2 L D Z\nBATTLEFRONT  B AE1 - T AH0 L - F R AH2 N T\nBATTLEGROUND  B AE1 - T AH0 L - G R AW2 N D\nBATTLEGROUNDS  B AE1 - T AH0 L - G R AW2 N D Z\nBATTLEMENT  B AE1 - T AH0 L - M AH0 N T\nBATTLEMENT(2)  B AE1 - T AH0 L - M EH0 N T\nBATTLEMENTS  B AE1 - T AH0 L - M AH0 N T S\nBATTLES  B AE1 - T AH0 L Z\nBATTLESHIP  B AE1 - T AH0 L - SH IH2 P\nBATTLESHIPS  B AE1 - T AH0 L - SH IH2 P S\nBATTLING  B AE1 - T AH0 L - IH0 NG\nBATTLING(2)  B AE1 T - L IH0 NG\nBATTON  B AE1 - T AH0 N\nBATTS  B AE1 T S\nBATTY  B AE1 - T IY0\nBATUIGAS  B AE2 - CH UW0 - IY1 - G AH0 S\nBATUS  B AE1 - T AH0 S\nBATUS(2)  B AO1 - T AH0 S\nBATY  B EY1 - T IY0\nBATZ  B AE1 T S\nBATZEL  B AE1 T - Z AH0 L\nBATZER  B EY1 T - Z ER0\nBAUBLE  B AO1 - B AH0 L\nBAUBLES  B AO1 - B AH0 L Z\nBAUBLITZ  B AW1 - B L IH0 T S\nBAUCH  B AO1 CH\nBAUCOM  B OW0 - K AA1 M\nBAUCUM  B OW0 - K AH1 M\nBAUCUS  B AA1 - K AH0 S\nBAUCUS(2)  B AE1 - K AH0 S\nBAUD  B AO1 D\nBAUDENDISTEL  B AW1 - D IH0 N - D IH0 - S T AH0 L\nBAUDER  B AW1 - D ER0\nBAUDOIN  B OW0 D - W AA1 - EY0 N\nBAUDOUIN  B AO0 - D UW1 - IH0 N\nBAUER  B AW1 - ER0\nBAUERLE  B AW1 - ER0 - AH0 L\nBAUERLEIN  B AW1 - ER0 - L AY0 N\nBAUERMEISTER  B AW1 - ER0 - M AY0 - S T ER0\nBAUERNFEIND  B AW1 - ER0 N - F AY0 N D\nBAUERS  B AW1 - ER0 Z\nBAUGH  B AO1\nBAUGHAN  B AO1 - AH0 N\nBAUGHER  B AO1 - ER0\nBAUGHMAN  B AO1 - M AH0 N\nBAUGHN  B AO1 N\nBAUGUESS  B AW1 - G IH0 S\nBAUGUS  B AO1 - G AH0 S\nBAUKNECHT  B AW1 K - N IH0 K T\nBAUKNIGHT  B AO1 K - N AY2 T\nBAUM  B AO1 M\nBAUM(2)  B AW1 M\nBAUMAN  B AW1 - M AH0 N\nBAUMANN  B AW1 - M AH0 N\nBAUMBACH  B AW1 M - B AA2 K\nBAUMBERGER  B AW1 M - B ER0 - G ER0\nBAUMBERGER(2)  B AA1 M - B ER0 - G ER0\nBAUMEISTER  B AW1 - M AY2 - S T ER0\nBAUMEL  B AW1 - M AH0 L\nBAUMER  B AW1 - M ER0\nBAUMERT  B AW1 - M ER0 T\nBAUMGARD  B AW1 M - G ER0 D\nBAUMGARD(2)  B AA1 M - G ER0 D\nBAUMGARDNER  B AW1 M - G AA2 R D - N ER0\nBAUMGARDNER(2)  B AA1 M - G AA2 R D - N ER0\nBAUMGARDT  B AW1 M - G AA2 R T\nBAUMGARDT(2)  B AA1 M - G AA2 R T\nBAUMGARNER  B AW1 M - G AA2 R - N ER0\nBAUMGARNER(2)  B AA1 M - G AA2 R - N ER0\nBAUMGART  B AW1 M - G AA2 R T\nBAUMGART(2)  B AA1 M - G AA2 R T\nBAUMGARTEN  B AW1 M - G AA0 R - T AH0 N\nBAUMGARTEN(2)  B AA1 M - G AA0 R - T AH0 N\nBAUMGARTNER  B AW1 M - G AA2 R T - N ER0\nBAUMGARTNER(2)  B AA1 M - G AA2 R T - N ER0\nBAUMHARDT  B AW1 M - HH AA2 R T\nBAUMHARDT(2)  B AA1 M - HH AA2 R T\nBAUMHOLDER  B AA1 M - HH AO2 L - D ER0\nBAUMHOLDER(2)  B AW1 M - HH AO2 L - D ER0\nBAUMLER  B AW1 - M AH0 - L ER0\nBAUMLER(2)  B AA1 - M AH0 - L ER0\nBAUMLER(3)  B AA1 M - L ER0\nBAUMSTARK  B AW1 M - S T AA2 R K\nBAUMSTARK(2)  B AA1 M - S T AA2 R K\nBAUN  B AO1 N\nBAUR  B AO1 R\nBAUR(2)  B AW1 - ER0\nBAUS  B AO1 Z\nBAUSCH  B AW1 SH\nBAUSERMAN  B AW1 - S ER0 - M AH0 N\nBAUSMAN  B AW1 S - M AH0 N\nBAUTCH  B AW1 CH\nBAUTISTA  B AO0 - T IY1 - S T AH0\nBAUTZ  B AO1 T S\nBAUTZER  B AW1 T - S ER0\nBAUWENS  B AW1 - W AH0 N Z\nBAUXITE  B AO1 K - S AY0 T\nBAUZA  B AW1 - Z AH0\nBAVA  B AA1 - V AH0\nBAVADRA  B AH0 - V AE1 - D R AH0\nBAVARIA  B AH0 - V EH1 - R IY0 - AH0\nBAVARIA'S  B AH0 - V EH1 - R IY0 - AH0 Z\nBAVARIAN  B AH0 - V EH1 - R IY0 - AH0 N\nBAVARO  B AA0 - V AA1 - R OW0\nBAVER  B EY1 - V ER0\nBAVIS  B EY1 - V IH0 S\nBAWD  B AO1 D\nBAWDEN  B AO1 - D AH0 N\nBAWDY  B AO1 - D IY0\nBAWER  B AO1 - ER0\nBAWL  B AO1 L\nBAWLED  B AO1 L D\nBAX  B AE1 K S\nBAXA  B AE1 K - S AH0\nBAXENDALE  B AE1 K - S AH0 N - D EY0 L\nBAXLEY  B AE1 K S - L IY0\nBAXT  B AE1 K S T\nBAXTER  B AE1 K - S T ER0\nBAXTER'S  B AE1 K - S T ER0 Z\nBAY  B EY1\nBAY'S  B EY1 Z\nBAYANJOU  B AY0 - AE1 N - JH UW0\nBAYAR  B EY1 - ER0\nBAYARD  B EY1 - ER0 D\nBAYBANK  B EY1 - B AE2 NG K\nBAYBANK'S  B EY1 - B AE2 NG K S\nBAYBANKS  B EY1 - B AE2 NG K S\nBAYDHABO  B EY0 - D AA1 - B OW0\nBAYE  B EY1\nBAYED  B EY1 D\nBAYER  B EY1 - ER0\nBAYER'S  B EY1 - ER0 Z\nBAYERISCHE  B EY2 - ER0 - IY1 SH\nBAYERS  B EY1 - ER0 Z\nBAYES  B EY1 Z\nBAYH  B EY1\nBAYING  B EY1 - IH0 NG\nBAYLE  B EY1 L\nBAYLEE  B EY1 - L IY0\nBAYLEN  B EY1 - L AH0 N\nBAYLES  B EY1 L Z\nBAYLESS  B EY1 - L IH0 S\nBAYLEY  B EY1 - L IY0\nBAYLIFF  B EY1 - L IH0 F\nBAYLINER  B EY1 - L AY2 - N ER0\nBAYLIS  B EY1 - L IH0 S\nBAYLISS  B EY1 - L IH0 S\nBAYLOR  B EY1 - L ER0\nBAYLY  B EY1 - L IY0\nBAYMAN  B EY1 - M AH0 N\nBAYNARD  B EY1 - N ER0 D\nBAYNE  B EY1 N\nBAYNES  B EY1 N Z\nBAYNHAM  B EY1 N - HH AH0 M\nBAYOG  B EY1 - AA2 G\nBAYONET  B EY1 - AH0 - N EH2 T\nBAYONETS  B EY1 - AH0 - N EH2 T S\nBAYONNE  B EY2 - Y OW1 N\nBAYOU  B AY1 - UW0\nBAYOUS  B AY1 - UW0 Z\nBAYOUTH  B AY1 - UW0 TH\nBAYREUTH  B EY1 - R OY2 TH\nBAYS  B EY1 Z\nBAYSE  B EY1 Z\nBAYSIDE  B EY1 - S AY2 D\nBAYSINGER  B EY1 - S IH0 N - JH ER0\nBAYTOWN  B EY1 - T AW2 N\nBAYTREE  B EY1 - T R IY2\nBAYTREE'S  B EY1 - T R IY2 Z\nBAYUK  B EY1 - AH0 K\nBAYUL  B EY1 - AH0 L\nBAYUS  B EY1 - AH0 S\nBAYWATCH  B EY1 - W AA0 CH\nBAZ  B AE1 Z\nBAZAAR  B AH0 - Z AA1 R\nBAZAARS  B AH0 - Z AA1 R Z\nBAZAN  B EY1 - Z AH0 N\nBAZAR  B AH0 - Z AA1 R\nBAZE  B EY1 Z\nBAZEMORE  B AA1 Z - M AO0 R\nBAZILE  B AA1 - Z AY0 L\nBAZILE(2)  B AA1 - Z IY0 L\nBAZINET  B AE1 - Z IH0 - N EH0 T\nBAZOOKA  B AH0 - Z UW1 - K AH0\nBAZOOKAS  B AH0 - Z UW1 - K AH0 Z\nBAZZANO  B AA0 T - S AA1 - N OW0\nBAZZELL  B AE1 - Z AH0 L\nBAZZLE  B AE1 - Z AH0 L\nBBC  B IY2 - B IY0 - S IY1\nBBC'S  B IY2 - B IY0 - S IY1 S\nBBQ  B IY1 - B IY0 - K Y UW2\nBBQ(2)  B AA1 R - B IH0 - K Y UW2\nBE  B IY1\nBE(2)  B IY0\nBEA  B IY1\nBEABER  B IY1 - B ER0\nBEABOUT  B AH0 - B UW1 T\nBEACH  B IY1 CH\nBEACH'S  B IY1 - CH AH0 Z\nBEACHAM  B AH0 - SH AE1 M\nBEACHAM(2)  B IY1 - CH AH0 M\nBEACHCOMBER  B IY1 CH - K OW2 - M ER0\nBEACHED  B IY1 CH T\nBEACHEM  B IY1 - K IH0 M\nBEACHER  B IY1 - CH ER0\nBEACHES  B IY1 - CH AH0 Z\nBEACHES(2)  B IY1 - CH IH0 Z\nBEACHFRONT  B IY1 CH - F R AA0 N T\nBEACHHEAD  B IY1 CH - HH EH2 D\nBEACHHEADS  B IY1 CH - HH EH2 D Z\nBEACHING  B IY1 - CH IH0 NG\nBEACHLER  B IY1 - K AH0 - L ER0\nBEACHLER(2)  B IY1 CH - L ER0\nBEACHUM  B IY1 - CH AH0 M\nBEACHY  B IY1 - CH IY0\nBEACOM  B IY1 - K AH0 M\nBEACON  B IY1 - K AH0 N\nBEACONS  B IY1 - K AH0 N Z\nBEAD  B IY1 D\nBEADED  B IY1 - D IH0 D\nBEADLE  B IY1 - D AH0 L\nBEADLES  B IY1 - D AH0 L Z\nBEADLING  B IY1 D - L IH0 NG\nBEADS  B IY1 D Z\nBEADWORK  B IY1 D - W ER2 K\nBEADY  B IY1 - D IY0\nBEAGAN  B AH0 - G AE1 N\nBEAGEN  B IY1 - G AH0 N\nBEAGLE  B IY1 - G AH0 L\nBEAGLES  B IY1 - G AH0 L Z\nBEAGLEY  B IY1 G - L IY0\nBEAHAN  B IY1 - HH AH0 N\nBEAHM  B IY1 M\nBEAIRD  B IH1 R D\nBEAK  B IY1 K\nBEAKER  B IY1 - K ER0\nBEAKLEY  B IY1 K - L IY0\nBEAKLIKE  B IY1 K - L AY2 K\nBEAKMAN  B IY1 K - M AH0 N\nBEAKMAN'S  B IY1 K - M AH0 N Z\nBEAL  B IY1 L\nBEALE  B IY1 L\nBEALER  B IY1 - L ER0\nBEALES  B IY1 L Z\nBEALL  B IY1 L\nBEALS  B IY1 L Z\nBEAM  B IY1 M\nBEAM'S  B IY1 M Z\nBEAMAN  B IY1 - M AH0 N\nBEAMED  B IY1 M D\nBEAMER  B IY1 - M ER0\nBEAMING  B IY1 - M IH0 NG\nBEAMISH  B IY1 - M IH0 SH\nBEAMON  B IY1 - M AH0 N\nBEAMS  B IY1 M Z\nBEAN  B IY1 N\nBEAN'S  B IY1 N Z\nBEANBLOSSOM  B IY1 N - B L AH0 - S AH0 M\nBEANE  B IY1 N\nBEANS  B IY1 N Z\nBEANTOWN  B IY1 N - T AW2 N\nBEAR  B EH1 R\nBEAR'S  B EH1 R Z\nBEARA  B EH1 - R AH0\nBEARABLE  B EH1 - R AH0 - B AH0 L\nBEARCE  B ER1 S\nBEARD  B IH1 R D\nBEARDED  B IH1 R - D AH0 D\nBEARDEN  B IH1 R - D AH0 N\nBEARDMORE  B IH1 R D - M AO2 R\nBEARDS  B IH1 R D Z\nBEARDSLEE  B IH1 R D Z - L IY0\nBEARDSLEY  B IH1 R D Z - L IY0\nBEARDSTOWN  B IH1 R D - S T AW2 N\nBEARE  B IH1 R\nBEARER  B EH1 - R ER0\nBEARERS  B EH1 - R ER0 Z\nBEARFIELD  B ER1 - F IY0 L D\nBEARING  B EH1 - R IH0 NG\nBEARINGS  B EH1 - R IH0 NG Z\nBEARISH  B EH1 - R IH0 SH\nBEARISHLY  B EH1 - R IH0 SH - L IY0\nBEARISHNESS  B EH1 - R IH0 SH - N AH0 S\nBEARMAN  B EH1 R - M AH0 N\nBEARS  B EH1 R Z\nBEARS'  B EH1 R Z\nBEARSE  B ER1 S\nBEARSS  B ER1 S\nBEARUP  B EH1 - R AH0 P\nBEARY  B IH1 - R IY0\nBEAS  B IY1 Z\nBEASLEY  B IY1 Z - L IY0\nBEASON  B IY1 - Z AH0 N\nBEAST  B IY1 S T\nBEASTIE  B IY1 - S T IY0\nBEASTON  B IY1 - S T AH0 N\nBEASTS  B IY1 S T S\nBEAT  B IY1 T\nBEATA  B IY0 - AE1 - T AH0\nBEATEN  B IY1 - T AH0 N\nBEATER  B IY1 - T ER0\nBEATERS  B IY1 - T ER0 Z\nBEATIE  B IY1 - T IY0\nBEATING  B IY1 - T IH0 NG\nBEATINGS  B IY1 - T IH0 NG Z\nBEATLE  B IY1 - T AH0 L\nBEATLES  B IY1 - T AH0 L Z\nBEATLES'  B IY1 - T AH0 L Z\nBEATNIK  B IY1 T - N IH0 K\nBEATNIKS  B IY1 T - N IH0 K S\nBEATO  B IY0 - AE1 - T OW0\nBEATON  B IY1 - T AH0 N\nBEATRICE  B IY1 - AH0 - T R AH0 S\nBEATRICE'S  B IY1 - AH0 - T R IH0 - S IH0 Z\nBEATRICE'S(2)  B IY1 - T R IH0 - S IH0 Z\nBEATRICE(2)  B IY1 - AH0 - T R IH0 S\nBEATRICE(3)  B IY1 - T R AH0 S\nBEATRICE(4)  B IY1 - T R IH0 S\nBEATRIX  B IY1 - T R IH0 K S\nBEATRIX(2)  B IY1 - AH0 - T R IH0 K S\nBEATS  B IY1 T S\nBEATSON  B IY1 T - S AH0 N\nBEATTIE  B IY1 - T IY0\nBEATTY  B IY1 - T IY0\nBEATTY(2)  B EY1 - T IY0\nBEATY  B IY1 - T IY0\nBEAU  B OW1\nBEAUBIEN  B OW0 - B IY1 N\nBEAUCAGE  B OW1 - K EY2 JH\nBEAUCE  B OW1 - S IY2\nBEAUCHAINE  B OW2 - SH EY1 N\nBEAUCHAMP  B OW1 - SH AA2 M P\nBEAUCHEMIN  B OW1 - SH IH0 - M AE0 N\nBEAUCHENE  B OW2 - SH IY1 N\nBEAUCHESNE  B OW0 - SH EH1 N\nBEAUDET  B OW0 - D EH1 T\nBEAUDETTE  B OW2 - D EH1 T\nBEAUDIN  B OW0 - D AE1 N\nBEAUDOIN  B OW0 - D OY1 N\nBEAUDREAU  B OW2 - D R OW1\nBEAUDRY  B OW0 - D R IY1\nBEAUFORD  B OW0 - F AO1 R D\nBEAUFORT  B OW1 - F ER0 T\nBEAUFRERE  B OW2 - F R EH1 R\nBEAUJOLAIS  B OW1 - JH OW0 - L EY2\nBEAULAC  B OW0 - L AE1 K\nBEAUMIER  B Y UW1 - M IY0 - ER0\nBEAUMONT  B OW1 - M AO0 N T\nBEAUPRE  B OW1 - P ER0\nBEAUREGARD  B OW1 - R IH0 - G AA2 R D\nBEAUREGARD(2)  B AO1 - R IH0 - G AA2 R D\nBEAUSOLEIL  B OW1 - S AH0 - L EY0\nBEAUTICIAN  B OW1 - T IH2 - SH AH0 N\nBEAUTIES  B Y UW1 - T IY0 Z\nBEAUTIFUL  B Y UW1 - T AH0 - F AH0 L\nBEAUTIFULLEST  B Y UW1 - T AH0 - F AH0 - L AH0 S T\nBEAUTIFULLEST(2)  B Y UW1 - T AH0 - F L AH0 S T\nBEAUTIFULLY  B Y UW1 - T AH0 - F L IY0\nBEAUTIFY  B Y UW1 - T IH0 - F AY2\nBEAUTY  B Y UW1 - T IY0\nBEAUVAIS  B OW0 - V EY1\nBEAUX  B OW1\nBEAVAN  B AH0 - V AE1 N\nBEAVEN  B IY1 - V AH0 N\nBEAVER  B IY1 - V ER0\nBEAVERS  B IY1 - V ER0 Z\nBEAVERSON  B IY1 - V ER0 - S AH0 N\nBEAVERTON  B IY1 - V ER0 - T AH0 N\nBEAVIN  B IY1 - V IH0 N\nBEAVIS  B IY1 - V AH0 S\nBEAZER  B IY1 - Z ER0\nBEAZLEY  B IY1 Z - L IY0\nBEBB  B EH1 B\nBEBBER  B EH1 - B ER0\nBEBBITS  B EH1 - B AH0 T S\nBEBE  B IY1 - B IY0\nBEBE'S  B IY1 - B IY0 Z\nBEBEAR  B AH0 - B IH1 R\nBEBEAU  B IH0 - B OW1\nBEBEE  B EH1 - B IY0\nBEBER  B IY1 - B ER0\nBEBITCH  B EH1 - B IH0 CH\nBEBOP  B IY1 - B AA2 P\nBEBOUT  B IH0 - B UW1 T\nBEC  B EH1 K\nBECALM  B IH0 - K AA1 M\nBECALMED  B IH0 - K AA1 M D\nBECAME  B IH0 - K EY1 M\nBECAME(2)  B IY0 - K EY1 M\nBECAUSE  B IH0 - K AO1 Z\nBECAUSE(2)  B IH0 - K AH1 Z\nBECERRA  B EH0 - CH EH1 - R AH0\nBECERRIL  B EY0 - S EH0 - R IY1 L\nBECHARD  B EH1 - K ER0 D\nBECHER  B EH1 - K ER0\nBECHERER  B EH1 - K ER0 - ER0\nBECHLER  B EH1 - K L ER0\nBECHT  B EH1 K T\nBECHTEL  B EH2 K - T EH1 L\nBECHTHOLD  B EH1 K - TH OW0 L D\nBECHTLE  B EH1 CH - T AH0 L\nBECHTOL  B EH1 K - T AH0 L\nBECHTOLD  B EH1 K - T OW2 L D\nBECK  B EH1 K\nBECK'S  B EH1 K S\nBECKA  B EH1 - S K AH0\nBECKEL  B EH1 - K EH0 L\nBECKER  B EH1 - K ER0\nBECKER'S  B EH1 - K ER0 Z\nBECKERMAN  B EH1 - K ER0 - M AH0 N\nBECKERS  B EH1 - K ER0 Z\nBECKERT  B EH1 - K ER0 T\nBECKET  B EH1 - K AH0 T\nBECKETT  B EH1 - K IH0 T\nBECKFORD  B EH1 K - F AO0 R D\nBECKHAM  B EH1 K - HH AE2 M\nBECKI  B EH1 - K IY0\nBECKIE  B EH1 - K IY0\nBECKIUS  B EH1 - K IY0 - IH0 S\nBECKLER  B EH1 - K L ER0\nBECKLES  B EH1 - K AH0 L Z\nBECKLEY  B EH1 K - L IY0\nBECKLUND  B EH1 K - L AH0 N D\nBECKMAN  B EH1 K - M AH0 N\nBECKMANN  B EH1 K - M AH0 N\nBECKMEYER  B EH1 K - M AY0 - ER0\nBECKNELL  B EH1 K - N EH2 L\nBECKNER  B EH1 K - N ER0\nBECKOM  B EH1 - K AA0 M\nBECKON  B EH1 - K AH0 N\nBECKONED  B EH1 - K AH0 N D\nBECKONING  B EH1 - K AH0 - N IH0 NG\nBECKONS  B EH1 - K AH0 N Z\nBECKS  B EH1 K S\nBECKSTEAD  B EH1 K - S T EH2 D\nBECKSTRAND  B EH1 K - S T R AE2 N D\nBECKSTROM  B EH1 K - S T R AA0 M\nBECKUM  B EH1 - K AH0 M\nBECKWITH  B EH1 - K W IH2 TH\nBECKWITH'S  B EH1 - K W IH2 TH S\nBECKWITT  B EH1 - K W IH2 T\nBECKWORTH  B EH1 - K W ER2 TH\nBECKWORTH'S  B EH1 - K W ER2 TH S\nBECKY  B EH1 - K IY0\nBECNEL  B EH1 K - N AH0 L\nBECO  B IY1 - K OW0\nBECOME  B IH0 - K AH1 M\nBECOMES  B IH0 - K AH1 M Z\nBECOMING  B IH0 - K AH1 - M IH0 NG\nBECOR  B EH1 - K AO2 R\nBECOR'S  B EH1 - K AO2 R Z\nBECRAFT  B IY1 - K R AE0 F T\nBECTON  B EH1 K - T AH0 N\nBECVAR  B EH1 K - V ER0\nBED  B EH1 D\nBEDA  B EY1 - D AH0\nBEDARD  B IH0 - D AA1 R D\nBEDBUG  B EH1 D - B AH0 G\nBEDBUGS  B EH1 D - B AH0 G Z\nBEDCHAMBER  B EH1 D - CH EY2 M - B ER0\nBEDDED  B EH1 - D IH0 D\nBEDDING  B EH1 - D IH0 NG\nBEDDINGFIELD  B EH1 - D IH0 NG - F IY2 L D\nBEDDOE  B EH1 - D OW0\nBEDDORS  B EH1 - D ER0 Z\nBEDDOW  B EH1 - D OW0\nBEDE  B IY1 D\nBEDECK  B IH0 - D EH1 K\nBEDECKED  B IH0 - D EH1 K T\nBEDEL  B IH0 - D EH1 L\nBEDELL  B EH1 - D AH0 L\nBEDENBAUGH  B EH1 - D IH0 N - B AW0\nBEDEVIL  B IH0 - D EH1 - V AH0 L\nBEDEVILED  B IH0 - D EH1 - V AH0 L D\nBEDFELLOW  B EH1 D - F EH2 - L OW0\nBEDFELLOWS  B EH1 D - F EH2 - L OW0 Z\nBEDFORD  B EH1 D - F ER0 D\nBEDGOOD  B EH1 D - G UH2 D\nBEDIENT  B IY1 - D Y IH0 N T\nBEDINGER  B EH1 - D IH0 - NG ER0\nBEDINGFIELD  B EH1 - D IH0 NG - F IY2 L D\nBEDKE  B EH1 D - K IY0\nBEDLAM  B EH1 D - L AH0 M\nBEDLINGTON  B EH1 D - L IH0 NG - T AH0 N\nBEDMINSTER  B EH1 D - M IH0 N - S T ER0\nBEDNAR  B EH1 D - N ER0\nBEDNARCZYK  B EH1 D - N ER0 - CH IH0 K\nBEDNAREK  B EH1 D - N AA0 - R EH0 K\nBEDNARIK  B EH1 D - N AA0 - R IH0 K\nBEDNARSKI  B EH1 D - N AA0 R S - K IY0\nBEDNARZ  B EH1 D - N AA0 R Z\nBEDNER  B EH1 D - N ER0\nBEDNORZ  B EH1 D - N AO0 R Z\nBEDOLLA  B EH0 - D OW1 - L AH0\nBEDORE  B EH1 - D AO2 R\nBEDOUIN  B EH1 - D OW0 - AH0 N\nBEDOUIN(2)  B EH1 - D UW0 - IH2 N\nBEDOUIN(3)  B EH1 - D AH0 W - AH0 N\nBEDOUINS  B EH1 - D OW0 - AH0 N Z\nBEDOUINS(2)  B EH1 - D UW0 - IH2 N Z\nBEDOUINS(3)  B EH1 - D AH0 W - AH0 N Z\nBEDOYA  B EY0 - D OY1 - AH0\nBEDPAN  B EH1 D - P AE2 N\nBEDPANS  B EH1 D - P AE2 N Z\nBEDRAGGLE  B IH0 - D R AE1 - G AH0 L\nBEDRAGGLED  B IH0 - D R AE1 - G AH0 L D\nBEDRIDDEN  B EH1 D - R IH2 - D AH0 N\nBEDROCK  B EH1 D - R AA2 K\nBEDROOM  B EH1 D - R UW2 M\nBEDROOMS  B EH1 D - R UW2 M Z\nBEDROSIAN  B EH0 D - R AA1 - ZH IH0 N\nBEDROSIAN(2)  B AH0 - D R OW1 - Z IY0 - AH0 N\nBEDS  B EH1 D Z\nBEDSAUL  B EH1 D - S AO0 L\nBEDSIDE  B EH1 D - S AY2 D\nBEDSOLE  B EH1 D - S OW2 L\nBEDSPREAD  B EH1 D - S P R EH2 D\nBEDSTRAW  B EH1 D - S T R AO2\nBEDTIME  B EH1 D - T AY2 M\nBEDWELL  B EH1 D - W EH2 L\nBEE  B IY1\nBEE'S  B IY1 Z\nBEEBA'S  B IY1 - B AH0 Z\nBEEBE  B IY1 - B IY2\nBEEBE'S  B IY1 - B IY2 Z\nBEEBES  B IY1 - B IY2 Z\nBEEBOWER  B IY1 - B OW2 - ER0\nBEEBOWER(2)  B IY1 - B AW2 - ER0\nBEEBY  B IY1 - B IY0\nBEECH  B IY1 CH\nBEECHAM  B IY1 - CH AH0 M\nBEECHAM'S  B IY1 - CH AH0 M Z\nBEECHCRAFT  B IY1 CH - K R AE2 F T\nBEECHER  B IY1 - CH ER0\nBEECHLER  B IY1 CH - L ER0\nBEECHWOOD  B IY1 CH - W UH2 D\nBEECHY  B IY1 - CH IY0\nBEECK  B IY1 K\nBEECROFT  B IY1 - K R AO2 F T\nBEEDE  B IY1 D\nBEEDIE  B IY1 - D IY0\nBEEDLE  B IY1 - D AH0 L\nBEEDY  B IY1 - D IY0\nBEEF  B IY1 F\nBEEFEATER  B IY1 F - IY2 - T ER0\nBEEFED  B IY1 F T\nBEEFERMAN  B IY1 - F ER0 - M AH0 N\nBEEFING  B IY1 - F IH0 NG\nBEEFS  B IY1 F S\nBEEFSTEAK  B IY1 F - S T EY2 K\nBEEFY  B IY1 - F IY0\nBEEGHLY  B IY1 G - L IY0\nBEEGLE  B IY1 - G AH0 L\nBEEHIVE  B IY1 - HH AY2 V\nBEEHLER  B IY1 - L ER0\nBEEK  B IY1 K\nBEEKEEPER  B IY1 - K IY2 - P ER0\nBEEKEEPERS  B IY1 - K IY2 - P ER0 Z\nBEEKER  B IY1 - K ER0\nBEEKMAN  B IY1 K - M AH0 N\nBEEKS  B IY1 K S\nBEEL  B IY1 L\nBEELER  B IY1 - L ER0\nBEEM  B IY1 M\nBEEMAN  B IY1 - M AH0 N\nBEEMER  B IY1 - M ER0\nBEEN  B IH1 N\nBEEN(2)  B AH0 N\nBEEN(3)  B IH0 N\nBEENE  B IY1 N\nBEENEY  B IY1 - N IY0\nBEENKEN  B IY1 NG - K AH0 N\nBEENS  B IH1 N Z\nBEEP  B IY1 P\nBEEPER  B IY1 - P ER0\nBEEPERS  B IY1 - P ER0 Z\nBEEPING  B IY1 - P IH0 NG\nBEEPS  B IY1 P S\nBEER  B IH1 R\nBEER'S  B IY1 R Z\nBEERBOWER  B IH1 R - B OW0 - ER0\nBEERMAN  B IH1 R - M AH0 N\nBEERS  B IH1 R Z\nBEERS'S  B IH1 R - Z IH0 Z\nBEERY  B IH1 - R IY0\nBEES  B IY1 Z\nBEESE  B IY1 Z\nBEESLEY  B IY1 Z - L IY0\nBEESON  B IY1 - Z AH0 N\nBEET  B IY1 T\nBEETHOVEN  B EY1 - T OW0 - V AH0 N\nBEETHOVEN'S  B EY1 - T OW0 - V AH0 N Z\nBEETHOVENIAN  B EY2 - T OW0 - V IY1 - N IY0 - AH0 N\nBEETLE  B IY1 - T AH0 L\nBEETLEJUICE  B IY1 - T AH0 L - JH UW2 S\nBEETLES  B IY1 - T AH0 L Z\nBEETON  B IY1 - T AH0 N\nBEETS  B IY1 T S\nBEEVER  B IY1 - V ER0\nBEEVERS  B IY1 - V ER0 Z\nBEEZLEY  B IY1 Z - L IY0\nBEFALL  B IH0 - F AO1 L\nBEFALLEN  B AH0 - F AA1 - L AH0 N\nBEFALLS  B IH0 - F AO1 L Z\nBEFALTO  B AH0 - F AA1 L - T OW0\nBEFELL  B IH0 - F EH1 L\nBEFFA  B IH2 - F AA1\nBEFIT  B IH0 - F IH1 T\nBEFITS  B IH0 - F IH1 T S\nBEFITTING  B IH0 - F IH1 - T IH0 NG\nBEFORE  B IH0 - F AO1 R\nBEFORE(2)  B IY2 - F AO1 R\nBEFOREHAND  B IH0 - F AO1 R - HH AE2 N D\nBEFORT  B EH1 - F ER0 T\nBEFRIEND  B IH0 - F R EH1 N D\nBEFRIENDED  B IH0 - F R EH1 N - D IH0 D\nBEFRIENDS  B IH0 - F R EH1 N D Z\nBEFUDDLE  B IH0 - F AH1 - D AH0 L\nBEFUDDLED  B IH0 - F AH1 - D AH0 L D\nBEFUDDLES  B IH0 - F AH1 - D AH0 L Z\nBEG  B EH1 G\nBEGAJAH  B EH0 - G AA1 - JH AH0\nBEGALA  B EH0 - G AA1 - L AH0\nBEGALA'S  B EH0 - G AA1 - L AH0 Z\nBEGAN  B IH0 - G AE1 N\nBEGAN(2)  B IY0 - G AE1 N\nBEGAT  B IH0 - G AE1 T\nBEGAY  B EH1 - G EY0\nBEGEL  B EY1 - G AH0 L\nBEGELMAN  B EY1 - G AH0 L - M AH0 N\nBEGEMAN  B IY1 G - M AH0 N\nBEGER  B EH1 - G ER0\nBEGET  B IH0 - G EH1 T\nBEGETS  B IH0 - G EH1 T S\nBEGETTING  B IH0 - G EH1 - T IH0 NG\nBEGG  B EH1 G\nBEGGAR  B EH1 - G ER0\nBEGGARS  B EH1 - G ER0 Z\nBEGGED  B EH1 G D\nBEGGING  B EH1 - G IH0 NG\nBEGGS  B EH1 G Z\nBEGHIN  B EH1 - G IH0 N\nBEGIN  B IH0 - G IH1 N\nBEGIN'S  B IH0 - G IH1 N Z\nBEGINNER  B IH0 - G IH1 - N ER0\nBEGINNER'S  B IH0 - G IH1 - N ER0 Z\nBEGINNERS  B IH0 - G IH1 - N ER0 Z\nBEGINNING  B IH0 - G IH1 - N IH0 NG\nBEGINNINGS  B IH0 - G IH1 - N IH0 NG Z\nBEGINS  B IH0 - G IH1 N Z\nBEGLEITER  B EH1 G - L AY2 - T ER0\nBEGLEITER'S  B EH1 G - L AY2 - T ER0 Z\nBEGLEY  B EH1 G - L IY0\nBEGNAUD  B IH0 G - N OW1\nBEGNOCHE  B EH0 G - N OW1 - K IY0\nBEGONIA  B IH0 - G OW1 - N Y AH0\nBEGONIAS  B IH0 - G OW1 - N Y AH0 Z\nBEGOT  B IY0 - G AO1 T\nBEGOTTEN  B IY0 - G AO1 - T IH0 N\nBEGRUDGE  B IH0 - G R AH1 JH\nBEGS  B EH1 G Z\nBEGUE  B EY1 G\nBEGUELIN  B EY1 - G AH0 - L IH0 N\nBEGUILE  B IH0 - G AY1 L\nBEGUILED  B IH0 - G AY1 L D\nBEGUILING  B IH0 - G AY1 - L IH0 NG\nBEGUN  B IH0 - G AH1 N\nBEGUN(2)  B EY1 - G AH0 N\nBEHALF  B IH0 - HH AE1 F\nBEHAN  B EH1 - HH AH0 N\nBEHAR  B EH1 - HH ER0\nBEHAVE  B IH0 - HH EY1 V\nBEHAVED  B IH0 - HH EY1 V D\nBEHAVES  B IH0 - HH EY1 V Z\nBEHAVING  B IH0 - HH EY1 - V IH0 NG\nBEHAVIOR  B IH0 - HH EY1 - V Y ER0\nBEHAVIORAL  B IH0 - HH EY1 - V Y ER0 - AH0 L\nBEHAVIORAL(2)  B IY0 - HH EY1 - V Y ER0 - AH0 L\nBEHAVIORIST  B IH0 - HH EY1 - V Y ER0 - IH0 S T\nBEHAVIORISTS  B IH0 - HH EY1 - V Y ER0 - IH0 S T S\nBEHAVIORISTS(2)  B IH0 - HH EY1 - V Y ER0 - IH0 S S\nBEHAVIORISTS(3)  B IH0 - HH EY1 - V Y ER0 - IH0 S\nBEHAVIORS  B IH0 - HH EY1 - V Y ER0 Z\nBEHEAD  B IH0 - HH EH1 D\nBEHEAD(2)  B IY0 - HH EH1 D\nBEHEADED  B IH0 - HH EH1 - D IH0 D\nBEHEADING  B IH0 - HH EH1 - D IH0 NG\nBEHEADINGS  B IH0 - HH EH1 - D IH0 NG Z\nBEHELER  B EH1 - HH AH0 - L ER0\nBEHEMOTH  B AH0 - HH IY1 - M AH0 TH\nBEHEMOTH(2)  B IY1 - HH AH0 - M AH0 TH\nBEHEMOTHS  B IH0 - HH IY1 - M AH0 TH S\nBEHEST  B IH0 - HH EH1 S T\nBEHIND  B IH0 - HH AY1 N D\nBEHINDS  B IH0 - HH AY1 N D Z\nBEHL  B EH1 L\nBEHLE  B EH1 - HH AH0 L\nBEHLER  B EH1 - L ER0\nBEHLING  B EH1 - L IH0 NG\nBEHLKE  B EH1 L K\nBEHM  B EH1 M\nBEHMER  B EH1 - M ER0\nBEHN  B EH1 N\nBEHNE  B EH1 N\nBEHNER  B EH1 - N ER0\nBEHNEY  B EH1 - N IY0\nBEHNING  B EH1 - N IH0 NG\nBEHNKE  B EH1 NG K\nBEHNKEN  B EH1 NG - K AH0 N\nBEHOF  B IY1 - HH AA0 F\nBEHOFF  B IY1 - HH AA0 F\nBEHOLD  B IH0 - HH OW1 L D\nBEHOLDEN  B IH0 - HH OW1 L - D AH0 N\nBEHOLDER  B IY0 - HH OW1 L - D ER0\nBEHOLDING  B IH0 - HH OW1 L - D IH0 NG\nBEHOOVE  B IH0 - HH UW1 V\nBEHOOVES  B IH0 - HH UW1 V Z\nBEHR  B EH1 R\nBEHREND  B EH1 - R EH0 N D\nBEHRENDS  B EH1 - R EH0 N D Z\nBEHRENDT  B EH1 - R IH0 N T\nBEHRENS  B EH1 - R AH0 N Z\nBEHRING  B EH1 - R IH0 NG\nBEHRINGER  B EH1 - R IH0 - NG ER0\nBEHRINGWERKE  B EH1 - R IH2 NG - W ER0 K\nBEHRLE  B EH1 - R AH0 L\nBEHRMAN  B EH1 R - M AH0 N\nBEHRMANN  B EH1 R - M AH0 N\nBEHRNS  B EH1 R N Z\nBEHUNIN  B EH1 - HH AH0 - N IH0 N\nBEHYMER  B EH1 - HH AY2 - M ER0\nBEIDAIHE  B AY2 - D EY1 - HH IY0\nBEIDLEMAN  B AY1 - D AH0 L - M AH0 N\nBEIDLER  B AY1 - D AH0 - L ER0\nBEIDLER(2)  B AY1 D - L ER0\nBEIER  B AY1 - ER0\nBEIERLE  B AY1 - ER0 - AH0 L\nBEIERSDORF  B AY1 R Z - D AO2 R F\nBEIGE  B EY1 ZH\nBEIGE'S  B EY1 - ZH AH0 Z\nBEIGEL  B AY1 - G AH0 L\nBEIGES  B EY1 - ZH AH0 Z\nBEIGHLEY  B EY1 G - L IY0\nBEIGHTOL  B EY1 - T AH0 L\nBEIJER  B AY1 R\nBEIJING  B EY2 - ZH IH1 NG\nBEIJING'S  B EY2 - ZH IH1 NG Z\nBEIL  B IY1 L\nBEILENSON  B AY1 - L AH0 N - S AH0 N\nBEILER  B AY1 - L ER0\nBEILFUSS  B AY1 L - F AH0 S\nBEILIN  B EH1 - L IH0 N\nBEILIN(2)  B EY1 - L IH0 N\nBEILKE  B IY1 L K\nBEILMAN  B AY1 L - M AH0 N\nBEIM  B AY1 M\nBEIN  B IY1 N\nBEIN'  B IY1 - IH0 N\nBEINE  B IY1 N\nBEING  B IY1 - IH0 NG\nBEING'S  B IY1 - IH0 NG Z\nBEINGS  B IY1 - IH0 NG Z\nBEINY  B AY1 - N IY0\nBEIRA  B EY1 - R AH0\nBEIRNE  B IH1 R N\nBEIRUT  B EY0 - R UW1 T\nBEIRUT'S  B EY0 - R UW1 T S\nBEISEL  B AY1 - S AH0 L\nBEISER  B AY1 - S ER0\nBEISNER  B AY1 S - N ER0\nBEISSEL  B AY1 - S AH0 L\nBEISWENGER  B AY1 S - W IH0 N - JH ER0\nBEIT  B EY1 T\nBEIT(2)  B AY1 T\nBEITEL  B AY1 - T AH0 L\nBEITER  B AY1 - T ER0\nBEITLER  B AY1 - T AH0 L - ER0\nBEITLER(2)  B AY1 T - L ER0\nBEITZ  B IY1 T S\nBEITZEL  B AY1 T - Z AH0 L\nBEJAR  B EY0 - Y AA1 R\nBEJARANO  B EY0 - Y AA0 - R AA1 - N OW0\nBEKAA  B EH0 - K AA1\nBEKAA(2)  B AH0 - K AA1\nBEKAERT  B AH0 - K EH1 R T\nBEKER  B EH1 - K ER0\nBEKER'S  B EH1 - K ER0 Z\nBEKINS  B IY1 - K IH0 N Z\nBEKKER  B EH1 - K ER0\nBEKKI  B EH1 - K IY0\nBEL  B EH1 L\nBEL'C  B EH1 L K\nBELA  B EH1 - L AH0\nBELABOR  B IH0 - L EY1 - B ER0\nBELABORED  B IH0 - L EY1 - B ER0 D\nBELABORES  B IH0 - L EY1 - B ER0 Z\nBELABORING  B IH0 - L EY1 - B ER0 - IH0 NG\nBELABORS  B IH0 - L EY1 - B ER0 Z\nBELADUR  B EH2 - L AH0 - D UH1 R\nBELADUR'S  B EH2 - L AH0 - D UH1 R Z\nBELAFONTE  B EH2 - L AH0 - F AA1 N - T IY0\nBELAIR  B IH0 - L EH1 R\nBELAIR(2)  B EH0 - L EH1 R\nBELAIRE  B AH0 - L EH1 R\nBELAK  B EH1 - L AH0 K\nBELAND  B EH1 - L AH0 N D\nBELANGER  B EH1 - L AH0 - NG ER0\nBELANOFF  B EH1 - L AH0 - N AO0 F\nBELARUS  B EH0 - L AA1 - R AH0 S\nBELASCO  B EH0 - L AA1 - S K OW0\nBELATE  B IH0 - L EY1 T\nBELATED  B IH0 - L EY1 - T IH0 D\nBELATEDLY  B IH0 - L EY1 - T AH0 D - L IY0\nBELCASTRO  B EH0 L - K AE1 - S T R OW0\nBELCH  B EH1 L CH\nBELCHED  B EH1 L CH T\nBELCHER  B EH1 L - CH ER0\nBELCHING  B EH1 L - CH IH0 NG\nBELCOURT  B EH1 L - K AO2 R T\nBELDEN  B EH1 L - D AH0 N\nBELDIN  B EH1 L - D IH0 N\nBELDING  B EH1 L - D IH0 NG\nBELDOCK  B EH1 L - D AA2 K\nBELDON  B EH1 L - D AH0 N\nBELEAGUER  B IH0 - L IY1 - G ER0\nBELEAGUERED  B IH0 - L IY1 - G ER0 D\nBELEAGUERING  B IH0 - L IY1 - G ER0 - IH0 NG\nBELEN  B EH1 - L AH0 N\nBELET  B EH1 - L AH0 T\nBELEW  B EH1 - L UW0\nBELFAST  B EH1 L - F AE2 S T\nBELFER  B EH1 L - F ER0\nBELFIELD  B EH1 L - F IY2 L D\nBELFIORE  B EH0 L - F IY0 - AO1 - R IY0\nBELFLOWER  B EH1 L - F L AW2 - ER0\nBELFORD  B EH1 L - F ER0 D\nBELFRY  B EH1 L - F R IY0\nBELGACOM  B EH1 L - G AH0 - K AA0 M\nBELGACOM(2)  B EH1 L - JH AH0 - K AA0 M\nBELGARD  B EH0 L - G AA1 R D\nBELGARDE  B EH0 L - G AA1 R - D IY0\nBELGE  B EH1 L - JH IY0\nBELGER  B EH1 L - G ER0\nBELGIAN  B EH1 L - JH AH0 N\nBELGIANS  B EH1 L - JH AH0 N Z\nBELGIQUE  B EH0 L - ZH IY1 K\nBELGIQUE'S  B EH0 L - JH IY1 K S\nBELGIUM  B EH1 L - JH AH0 M\nBELGIUM'S  B EH1 L - JH AH0 M Z\nBELGO  B EH1 L - G OW2\nBELGRADE  B EH1 L - G R EY0 D\nBELGRADE'S  B EH1 L - G R EY0 D Z\nBELGRADE'S(2)  B EH1 L - G R AA2 D Z\nBELGRADE(2)  B EH1 L - G R AA2 D\nBELGRAVE  B EH1 L - G R EY2 V\nBELICH  B EH1 - L IH0 K\nBELIE  B IH0 - L AY1\nBELIED  B IH0 - L AY1 D\nBELIEF  B IH0 - L IY1 F\nBELIEFS  B IH0 - L IY1 F S\nBELIER  B EH1 - L Y ER0\nBELIES  B IH0 - L AY1 Z\nBELIEVABILITY  B AH0 - L IY2 - V AH0 - B IH1 - L IH0 - T IY0\nBELIEVABLE  B AH0 - L IY1 - V AH0 - B AH0 L\nBELIEVE  B IH0 - L IY1 V\nBELIEVED  B IH0 - L IY1 V D\nBELIEVER  B AH0 - L IY1 - V ER0\nBELIEVERS  B AH0 - L IY1 - V ER0 Z\nBELIEVES  B IH0 - L IY1 V Z\nBELIEVING  B IH0 - L IY1 - V IH0 NG\nBELIN  B EH1 - L IH0 N\nBELINDA  B AH0 - L IH1 N - D AH0\nBELINSKY  B IH0 - L IH1 N - S K IY0\nBELISLE  B EH1 - L AY0 - AH0 L\nBELITTLE  B IH0 - L IH1 - T AH0 L\nBELITTLED  B IH0 - L IH1 - T AH0 L D\nBELITTLES  B IH0 - L IH1 - T AH0 L Z\nBELITTLING  B IH0 - L IH1 - T AH0 L - IH0 NG\nBELITTLING(2)  B IH0 - L IH1 T - L IH0 NG\nBELITZ  B EH1 - L IH0 T S\nBELIVEAU  B EH1 - L IH0 - V OW2\nBELIZE  B EH0 - L IY1 Z\nBELK  B EH1 L K\nBELKA  B EH1 L - K AH0\nBELKACEM  B EH1 L - K AH0 - S AH0 M\nBELKE  B EH1 L K\nBELKIN  B EH1 L - K IH0 N\nBELKNAP  B EH1 L - N AE0 P\nBELKO  B EH1 L - K OW0\nBELL  B EH1 L\nBELL'S  B EH1 L Z\nBELLA  B EH1 - L AH0\nBELLAH  B EH1 - L AH0\nBELLAMY  B EH1 - L AH0 - M IY0\nBELLANCA  B EH0 - L AA1 N - K AH0\nBELLAND  B EH1 - L AH0 N D\nBELLANGER  B EH1 - L AE2 NG - G ER0\nBELLANTE  B EH0 - L AA1 N - T IY0\nBELLANTONI  B EH0 - L AA0 N - T OW1 - N IY0\nBELLAR  B EH1 - L ER0\nBELLARD  B IH0 - L AA1 R D\nBELLAS  B EH1 - L AH0 Z\nBELLAVANCE  B EH0 - L AA1 - V AH0 N S\nBELLAVIA  B EH0 - L AA1 - V IY0 - AH0\nBELLAVISTA  B EH2 - L AH0 - V IH1 - S T AH0\nBELLCORE  B EH1 L - K AO2 R\nBELLCORE'S  B EH1 L - K AO2 R Z\nBELLE  B EH1 L\nBELLEAU  B IH0 - L OW1\nBELLEFEUILLE  B EH2 - L AH0 - F IY0 - UW1 L\nBELLEMARE  B EH2 - L AH0 - M EH1 R\nBELLER  B EH1 - L ER0\nBELLEROSE  B EH1 - L ER0 - AH0 Z\nBELLES  B EH1 L Z\nBELLEVILLE  B AH0 L - V IH1 L\nBELLEVUE  B EH1 L - V Y UW2\nBELLEW  B IH0 - L UW1\nBELLFLOWER  B EH1 L - F L AW2 - ER0\nBELLFLOWERS  B EH1 L - F L AW2 - ER0 Z\nBELLHOP  B EH1 L - HH AA2 P\nBELLHOPS  B EH1 L - HH AA2 P S\nBELLI  B EH1 - L IY0\nBELLICOSE  B EH1 - L AH0 - K OW2 S\nBELLIED  B EH1 - L IY0 D\nBELLIES  B EH1 - L IY0 Z\nBELLIGERENCE  B AH0 - L IH1 - JH ER0 - AH0 N S\nBELLIGERENT  B AH0 - L IH1 - JH ER0 - AH0 N T\nBELLIGERENTS  B AH0 - L IH1 - JH ER0 - AH0 N T S\nBELLIN  B EH1 - L IH0 N\nBELLINA  B EH0 - L IY1 - N AH0\nBELLING  B EH1 - L IH0 NG\nBELLINGER  B EH1 - L IH0 - NG ER0\nBELLINGHAM  B EH1 - L IH0 NG - HH AE2 M\nBELLINGHAUSEN  B EH1 - L IH0 NG - HH AW2 - Z AH0 N\nBELLINI  B EH0 - L IY1 - N IY0\nBELLINI'S  B EH0 - L IY1 - N IY0 Z\nBELLINO  B EH0 - L IY1 - N OW0\nBELLIS  B EH1 - L IH0 S\nBELLISSIMO  B EH0 - L IY0 - S IY1 - M OW0\nBELLIVEAU  B EH1 - L IH0 - V OW2\nBELLIZZI  B EH0 - L IY1 T - S IY0\nBELLM  B EH1 L M\nBELLMAN  B EH1 L - M AH0 N\nBELLMON  B EH1 L - M AH0 N\nBELLMORE  B EH1 L - M AO0 R\nBELLO  B EH1 - L OW0\nBELLOMO  B EH0 - L OW1 - M OW0\nBELLOMY  B EH1 - L AH0 - M IY0\nBELLON  B EH1 - L AH0 N\nBELLONE  B EH0 - L OW1 - N IY0\nBELLOTTI  B EH0 - L OW1 - T IY0\nBELLOW  B EH1 - L OW0\nBELLOW'S  B EH1 - L OW0 Z\nBELLOWED  B EH1 - L OW0 D\nBELLOWING  B EH1 - L OW0 - IH0 NG\nBELLOWS  B EH1 - L OW0 Z\nBELLROSE  B EH1 L - R OW2 Z\nBELLS  B EH1 L Z\nBELLS'  B EH1 L Z\nBELLSOUTH  B EH1 L - S AW2 TH\nBELLSOUTH'S  B EH1 L - S AW2 TH S\nBELLUCCI  B EH0 - L UW1 - CH IY0\nBELLUOMINI  B EH2 L - W OW0 - M IY1 - N IY0\nBELLVILLE  B EH1 L - V IH2 L\nBELLWETHER  B EH1 L - W EH2 - DH ER0\nBELLWETHERS  B EH1 L - W EH2 - DH ER0 Z\nBELLWOOD  B EH1 L - W UH2 D\nBELLY  B EH1 - L IY0\nBELLYACHE  B EH1 - L IY0 - EY2 K\nBELMAN  B EH1 L - M AH0 N\nBELMONT  B EH1 L - M AA2 N T\nBELMONTE  B EH0 L - M AA1 N - T IY0\nBELMORE  B EH1 L - M AO0 R\nBELNAP  B EH1 L - N AE2 P\nBELNICK  B EH1 L - N IH0 K\nBELO  B EH1 - L OW0\nBELOFF  B EH1 - L AO2 F\nBELOIT  B IH0 - L OY1 T\nBELONG  B IH0 - L AO1 NG\nBELONGED  B IH0 - L AO1 NG D\nBELONGIA  B EH0 - L OW1 N - JH AH0\nBELONGING  B IH0 - L AO1 - NG IH0 NG\nBELONGINGS  B IH0 - L AO1 - NG IH0 NG Z\nBELONGS  B IH0 - L AO1 NG Z\nBELOTE  B EH0 - L OW1 - T IY0\nBELOUS  B EH1 - L AH0 S\nBELOV  B EH1 - L AA0 V\nBELOVE  B IH0 - L AH1 V\nBELOVED  B IH0 - L AH1 V D\nBELOVED(2)  B IH0 - L AH1 - V AH0 D\nBELOW  B IH0 - L OW1\nBELOW(2)  B IY0 - L OW1\nBELS  B EH1 L Z\nBELSER  B EH1 L - S ER0\nBELSHAW  B EH1 L - SH AO2\nBELSHE  B EH1 L SH\nBELSITO  B EH0 L - S IY1 - T OW0\nBELSKY  B EH1 L - S K IY0\nBELSON  B EH1 L - S AH0 N\nBELT  B EH1 L T\nBELT'S  B EH1 L T S\nBELTED  B EH1 L - T AH0 D\nBELTED(2)  B EH1 L - T IH0 D\nBELTER  B EH1 L - T ER0\nBELTH  B EH1 L TH\nBELTING  B EH1 L - T IH0 NG\nBELTON  B EH1 L - T AH0 N\nBELTRAM  B EH1 L - T R AE2 M\nBELTRAN  B EH1 L - T R AH0 N\nBELTS  B EH1 L T S\nBELTSVILLE  B EH1 L T S - V IH2 L\nBELTWAY  B EH1 L T - W EY2\nBELTZ  B EH1 L T S\nBELUE  B EH1 - L Y UW0\nBELUGA  B IH0 - L UW1 - G AH0\nBELUSHI  B EH0 - L UW1 - SH IY0\nBELVA  B EY1 L - V AH0\nBELVEAL  B EH1 L - V AH0 L\nBELVEDERE  B EH2 L - V AH0 - D IH1 R\nBELVEDERE(2)  B EH2 L - V IH0 - D IH1 R\nBELVIA  B EH1 L - V IY0 - AH0\nBELVIDERE  B EH1 L - V IH0 - D IH2 R\nBELVIDERE(2)  B EH1 L - V IH0 - D IH2 R\nBELVILLE  B EH1 L - V IH2 L\nBELVIN  B EH1 L - V IH0 N\nBELY  B AH0 - L AY1\nBELYEA  B EH0 - L IY1 - AH0\nBELYEU  B EH2 - L IY0 - UW1\nBELYING  B IH0 - L AY1 - IH0 NG\nBELZ  B EH1 L Z\nBELZBERG  B EH1 L T S - B ER0 G\nBELZBERGS  B EH1 L T S - B ER0 G Z\nBELZBERGS'  B EH1 L Z - B ER0 G Z\nBELZER  B EH1 L - Z ER0\nBEM  B EH1 M\nBEMAN  B IY1 - M AH0 N\nBEMBENEK  B EH1 M - B IH0 - N AH0 K\nBEMBRY  B EH1 M - B R IY0\nBEMENT  B IY1 - M AH0 N T\nBEMIS  B IY1 - M AH0 S\nBEMISS  B EH1 - M IH0 S\nBEMOAN  B IH0 - M OW1 N\nBEMOANED  B IH0 - M OW1 N D\nBEMOANING  B IH0 - M OW1 - N IH0 NG\nBEMOANS  B IH0 - M OW1 N Z\nBEMUSE  B IH0 - M Y UW1 Z\nBEMUSED  B IH0 - M Y UW1 Z D\nBEMUSEMENT  B EH1 - M Y UW0 S - M AH0 N T\nBEN  B EH1 N\nBEN'S  B EH1 N Z\nBENA  B EH1 - N AH0\nBENACKOVA  B EH2 - N AH0 - K OW1 - V AH0\nBENAK  B EH1 - N AH0 K\nBENAMI  B EH2 - N AH0 - M IY1\nBENANTY  B EH0 - N AA1 N - T IY0\nBENARD  B IH0 - N AA1 R D\nBENASSI  B EH0 - N AA1 - S IY0\nBENASULI  B EH2 - N AH0 - S UW1 - L IY0\nBENATAR  B EH1 - N AH0 - T ER0\nBENAVENTE  B EH0 - N AA0 - V EH1 N - T IY0\nBENAVIDES  B EY0 - N AA0 - V IY1 - D EH0 S\nBENAVIDEZ  B EY0 - N AA0 - V IY1 - D EH0 Z\nBENAZIR  B EH1 - N AH0 - Z IH2 R\nBENBOW  B EH1 N - B OW0\nBENBROOK  B EH1 N - B R UH2 K\nBENCE  B EH1 N S\nBENCH  B EH1 N CH\nBENCHER  B EH1 N - CH ER0\nBENCHERS  B EH1 N - CH ER0 Z\nBENCHES  B EH1 N - CH IH0 Z\nBENCHLEY  B EH1 N CH - L IY0\nBENCHMARK  B EH1 N CH - M AA2 R K\nBENCHMARK'S  B EH1 N CH - M AA2 R K S\nBENCHMARKS  B EH1 N CH - M AA2 R K S\nBENCIVENGA  B EH0 N - CH IY0 - V EH1 NG - G AH0\nBENCOMO  B EH0 N - K OW1 - M OW0\nBENCSIK  B EH1 NG K - S IH0 K\nBEND  B EH1 N D\nBENDA  B EH1 N - D AH0\nBENDALL  B EH1 N - D AH0 L\nBENDECTIN  B EH0 N - D EH1 K - T IH0 N\nBENDED  B EH1 N - D IH0 D\nBENDEL  B EH1 N - D AH0 L\nBENDEL(2)  B EH2 N - D EH1 L\nBENDELE  B EH1 N - D AH0 L\nBENDER  B EH1 N - D ER0\nBENDER'S  B EH1 N - D ER0 Z\nBENDERS  B EH1 N - D ER0 Z\nBENDICK  B EH1 N - D IH0 K\nBENDICKSON  B EH1 N - D IH0 K - S AH0 N\nBENDIG  B EH1 N - D IH0 G\nBENDING  B EH1 N - D IH0 NG\nBENDIX  B EH1 N - D IH0 K S\nBENDIXEN  B IH0 N - D IH1 K - S AH0 N\nBENDLER  B EH1 N D - L ER0\nBENDORF  B EH1 N - D AO0 R F\nBENDS  B EH1 N D Z\nBENDT  B EH1 N T\nBENDURE  B EY0 N - D UH1 - R EY0\nBENE  B EH1 - N AH0\nBENEATH  B IH0 - N IY1 TH\nBENECKE  B EH1 - N AH0 K\nBENEDEK  B EH1 - N AH0 - D IH0 K\nBENEDETTI  B EH2 - N AH0 - D EH1 - T IY0\nBENEDETTI'S  B EH2 - N AH0 - D EH1 - T IY0 Z\nBENEDETTO  B IH0 - N AH0 - D EH1 - T OW0\nBENEDICK  B EH1 - N AH0 - D IH0 K\nBENEDICT  B EH1 - N AH0 - D IH2 K T\nBENEDICTA  B EH1 - N AH0 - D IY0 K - T AH0\nBENEDICTINE  B EH2 - N AH0 - D IH1 K - T IY0 N\nBENEDICTINE'S  B EH2 - N AH0 - D IH1 K - T IY0 N Z\nBENEDICTINES  B EH2 - N AH0 - D IH1 K - T IY0 N Z\nBENEDICTION  B EH2 - N AH0 - D IH1 K - SH AH0 N\nBENEDIKT  B EH1 - N AH0 - D IH0 K T\nBENEDIX  B EH1 - N AH0 - D IH0 K S\nBENEFACTOR  B EH1 - N AH0 - F AE2 K - T ER0\nBENEFACTOR'S  B EH1 - N AH0 - F AE2 K - T ER0 Z\nBENEFACTORS  B EH1 - N AH0 - F AE2 K - T ER0 Z\nBENEFICENCE  B AH0 - N EH1 - F AH0 - S AH0 N S\nBENEFICENT  B EH2 - N AH0 - F IH1 - SH AH0 N T\nBENEFICIAL  B EH2 - N AH0 - F IH1 - SH AH0 L\nBENEFICIAL'S  B EH2 - N AH0 - F IH1 - SH AH0 L Z\nBENEFICIALLY  B EH2 - N AH0 - F IH1 - SH AH0 - L IY0\nBENEFICIARIES  B EH2 - N AH0 - F IH1 - SH IY0 - EH2 - R IY0 Z\nBENEFICIARY  B EH2 - N AH0 - F IH1 - SH IY0 - EH2 - R IY0\nBENEFICIARY'S  B EH2 - N AH0 - F IH1 - SH IY0 - EH2 - R IY0 Z\nBENEFIEL  B EH1 - N AH0 - F IY0 L\nBENEFIELD  B EH1 - N AH0 - F IY0 L D\nBENEFIT  B EH1 - N AH0 - F IH0 T\nBENEFITED  B EH1 - N AH0 - F IH2 - T IH0 D\nBENEFITING  B EH1 - N AH0 - F IH0 - T IH0 NG\nBENEFITS  B EH1 - N AH0 - F IH0 T S\nBENEFITTED  B EH1 - N AH0 - F IH0 - T IH0 D\nBENEFITTING  B EH1 - N AH0 - F IH0 - T IH0 NG\nBENEKE  B EH1 - N AH0 K\nBENEL  B EH1 - N AH0 L\nBENELUX  B EH1 - N AH0 - L AH0 K S\nBENENATI  B IH0 - N AH0 - N AA1 - T IY0\nBENEQUITY  B EH2 - N EH1 - K W AH0 - T IY0\nBENES  B EH1 - N IY0 S\nBENESCH  B EH1 - N AH0 SH\nBENESH  B EH1 - N AH0 SH\nBENETTI  B EH0 - N EH1 - T IY0\nBENETTON  B EH1 - N AH0 - T AH0 N\nBENETTON'S  B EH1 - N AH0 - T AH0 N Z\nBENETTON'S(2)  B EH1 - N AH0 - T AO0 N Z\nBENETTON(2)  B EH1 - N AH0 - T AO0 N\nBENEVENTO  B EH1 - N AH0 - V EY0 N - T OW0\nBENEVIDES  B EH1 - N AH0 - V IY0 - D EH0 S\nBENEVOLENCE  B AH0 - N EH1 - V AH0 - L AH0 N S\nBENEVOLENT  B AH0 - N EH1 - V AH0 - L AH0 N T\nBENEZRA  B EH1 - N AH0 - Z R AH0\nBENFER  B EH1 N - F ER0\nBENFIELD  B EH1 N - F IY0 L D\nBENFORD  B EH1 N - F ER0 D\nBENGAL  B EH1 NG - G AH0 L\nBENGALI  B EH0 NG - G AA1 - L IY0\nBENGALIS  B EH0 NG - G AA1 - L IY0 Z\nBENGALS  B EH1 NG - G AH0 L Z\nBENGE  B EH1 N JH\nBENGEL  B EH1 NG - G AH0 L\nBENGOECHEA  B EH2 NG - G OW0 - EH0 - CH IY1 - AH0\nBENGOECHEA(2)  B EH2 NG - G OW0 - CH IY1 - AH0\nBENGSTON  B EH1 NG G - S T AH0 N\nBENGT  B EH1 NG K T\nBENGTSON  B EH1 NG T - S AH0 N\nBENGUET  B EH1 NG - G AH0 T\nBENHAM  B EH1 N - HH AH0 M\nBENHAMOU  B EH2 N - HH AH0 - M UW1\nBENI  B EH1 - N IY0\nBENIGHTED  B IH0 - N AY1 - T IH0 D\nBENIGN  B IH0 - N AY1 N\nBENIGNA  B EH0 - N IY1 G - N AH0\nBENIGNLY  B AH0 - N AY1 N - L IY0\nBENIGNO  B EH2 - N IY1 - N Y OW0\nBENIGNO(2)  B EH1 - N IH0 G - N OW0\nBENIHANA  B EH2 - N IH0 - HH AA1 - N AH0\nBENIHANA(2)  B EH2 - N IY0 - HH AA1 - N AH0\nBENIN  B IY1 - N IH0 N\nBENINATI  B EH0 - N IY0 - N AA1 - T IY0\nBENINCASA  B EH0 - N IY0 N - K AA1 - S AH0\nBENING  B EH1 - N IH0 NG\nBENISH  B EH1 - N IH0 SH\nBENITA  B AH0 - N IY1 - T AH0\nBENITES  B EH1 - N AY0 T S\nBENITEZ  B EY0 - N IY1 - T EH0 Z\nBENITO  B EH0 - N IY1 - T OW0\nBENITO(2)  B AH0 - N IY1 - T OW0\nBENITO(3)  B IH0 - N IY1 - T OW2\nBENJAMIN  B EH1 N - JH AH0 - M AH0 N\nBENJAMIN'S  B EH1 N - JH AH0 - M AH0 N Z\nBENJIMEN  B EH1 N - JH AH0 - M IH0 N\nBENJY  B EH1 N - JH IY0\nBENKE  B EH1 NG K\nBENKER  B EH1 NG - K ER0\nBENKERT  B EH1 NG - K ER0 T\nBENKO  B EH1 NG - K OW0\nBENLATE  B EH1 - N L EY2 T\nBENLOX  B EH1 N - L AA0 K S\nBENN  B EH1 N\nBENNARDO  B AH0 - N AA1 R - D OW0\nBENNE  B EH1 N\nBENNEFIELD  B EH1 - N IH0 - F IY0 L D\nBENNER  B EH1 - N ER0\nBENNET  B EH1 - N IH0 T\nBENNETT  B EH1 - N AH0 T\nBENNETT'S  B EH1 - N AH0 T S\nBENNETT(2)  B EH1 - N IH0 T\nBENNETTE  B IH0 - N EH1 T\nBENNETTS  B EH1 - N IH0 T S\nBENNEY  B EH1 - N IY0\nBENNICK  B EH1 - N IH0 K\nBENNIE  B EH1 - N IY0\nBENNIGAN  B EH1 - N IH0 - G AH0 N\nBENNIGAN'S  B EH1 - N IH0 - G AH0 N Z\nBENNING  B EH1 - N IH0 NG\nBENNINGER  B EH1 - N IH0 - NG ER0\nBENNINGFIELD  B EH1 - N IH0 NG - F IY0 L D\nBENNINGHOFF  B EH1 - N IH0 NG - HH AO2 F\nBENNINGTON  B EH1 - N IH0 NG - T AH0 N\nBENNINK  B EH1 - N IH0 NG K\nBENNION  B EH1 - N Y AH0 N\nBENNIS  B EH1 - N IH0 S\nBENNISON  B EH1 - N IH0 - S AH0 N\nBENNITT  B EH1 - N IH0 T\nBENNO  B EH1 - N OW0\nBENNY  B EH1 - N IY0\nBENO  B EY1 - N OW0\nBENOIST  B IY1 - N OW0 - IH0 S T\nBENOIT  B AH0 - N OY1 T\nBENONI  B EH0 - N OW1 - N IY0\nBENOWITZ  B EH1 - N AH0 - W IH0 T S\nBENOY  B EH1 - N OY0\nBENS  B EH1 N Z\nBENSALEM  B EH2 N - S EY1 - L AH0 M\nBENSCH  B EH1 N SH\nBENSCOTER  B EH1 N - S K AH0 - T ER0\nBENSEL  B EH1 N - S AH0 L\nBENSEN  B EH1 N - S AH0 N\nBENSHOOF  B EH1 N - SH UH0 F\nBENSING  B EH1 N - S IH0 NG\nBENSINGER  B EH1 N - S IH0 N - JH ER0\nBENSKIN  B EH1 N - S K IH0 N\nBENSLEY  B EH1 N S - L IY0\nBENSMAN  B EH1 N - S M AH0 N\nBENSON  B EH1 N - S AH0 N\nBENSON'S  B EH1 N - S AH0 N Z\nBENSONHURST  B EH1 N - S AH0 N - HH ER0 S T\nBENSTOCK  B EH1 N - S T AA2 K\nBENT  B EH1 N T\nBENTE  B EH1 N T\nBENTEN  B EH1 - T IH0 N\nBENTER  B EH1 N - T ER0\nBENTHALL  B EH1 N - TH AH0 L\nBENTIVEGNA  B EH0 N - T IY0 - V EH1 G - N AH0\nBENTLER  B EH1 N T - L ER0\nBENTLEY  B EH1 N T - L IY0\nBENTLEY'S  B EH1 N T - L IY0 Z\nBENTLY  B EH1 N T - L IY0\nBENTO  B EH1 N - T OW0\nBENTON  B EH1 N - T AH0 N\nBENTONITE  B EH1 N - T AH0 - N AY2 T\nBENTONVILLE  B EH1 N - T AH0 N - V IH2 L\nBENTSEN  B EH1 N T - S AH0 N\nBENTSEN'S  B EH1 N T - S AH0 N Z\nBENTSON  B EH1 N T - S AH0 N\nBENTZ  B EH1 N T S\nBENTZEL  B EH1 N T - Z AH0 L\nBENTZEN  B EH1 N T - Z AH0 N\nBENVENISTE  B EH0 N - V EH0 - N IY1 - S T IY0\nBENVENUTI  B EH0 N - V EH0 - N UW1 - T IY0\nBENVENUTO  B EH0 N - V EH0 - N UW1 - T OW0\nBENWARE  B EH1 N - W EH0 R\nBENWAY  B EH1 N - W EY2\nBENYAMIN  B EH2 - N Y AH0 - M IY1 N\nBENYO  B EY1 - N Y OW0\nBENZ  B EH1 N Z\nBENZ'S  B EH1 N - Z IH0 Z\nBENZ(2)  B AE1 N Z\nBENZEL  B EH1 N - Z AH0 L\nBENZENE  B EH0 N - Z IY1 N\nBENZENE(2)  B EH1 N - Z IY0 N\nBENZES  B EH1 N - Z IH0 Z\nBENZIE  B EH1 N - Z IY0\nBENZIGER  B EH1 N - Z IH0 - G ER0\nBENZINE  B EH1 N - Z IY0 N\nBENZING  B EH1 N - Z IH0 NG\nBENZINGER  B EH1 N - Z IH0 - NG ER0\nBEOUGHER  B AW1 - F ER0\nBEOWULF  B EY1 - AH0 W - UH2 L F\nBEQUEATH  B IH0 - K W IY1 TH\nBEQUEATHED  B AH0 - K W IY1 TH T\nBEQUEST  B IH0 - K W EH1 S T\nBEQUESTS  B IH0 - K W EH1 S T S\nBEQUESTS(2)  B IH0 - K W EH1 S S\nBEQUESTS(3)  B IH0 - K W EH1 S\nBEQUETTE  B IH0 - K EH1 T\nBERA  B EH1 - R AH0\nBERAN  B EH1 - R AH0 N\nBERANEK  B EH1 - R AH0 - N IH0 K\nBERARD  B ER0 - AA1 R D\nBERARDI  B ER0 - AA1 R - D IY0\nBERARDINELLI  B ER0 - AA0 R - D IY0 - N EH1 - L IY0\nBERARDINO  B ER0 - AA0 R - D IY1 - N OW0\nBERARDO  B ER0 - AA1 R - D OW0\nBERARDUCCI  B ER0 - AA0 R - D UW1 - CH IY0\nBERATE  B IH0 - R EY1 T\nBERATED  B IH0 - R EY1 - T IH0 D\nBERATING  B IH0 - R EY1 - T IH0 NG\nBERBER  B ER1 - B ER0\nBERBERIAN  B ER0 - B IH1 - R IY0 - AH0 N\nBERBERICH  B ER1 - B ER0 - IH0 K\nBERBICK  B ER1 - B IH0 K\nBERCAW  B ER1 - K AO0\nBERCH  B ER1 K\nBERCHENALL  B ER1 - K AH0 - N AA2 L\nBERCHTOLD  B ER1 K - T OW0 L D\nBERCIER  B ER1 - K IY0 - ER0\nBERCOR  B ER1 - K AO2 R\nBERDAHL  B ER1 - D AA0 L\nBERDAN  B ER1 - D AH0 N\nBERDINE  B ER0 - D IY1 - N IY0\nBERE  B IH1 R\nBEREA  B ER0 - IY1 - AH0\nBEREAVE  B ER0 - IY1 V\nBEREAVED  B ER0 - IY1 V D\nBEREAVEMENT  B ER0 - IY1 V - M AH0 N T\nBEREFT  B ER0 - EH1 F T\nBEREGOVOY  B ER0 - EH1 - G AH0 - V OY2\nBEREGOVOY(2)  B EH2 - R AH0 - G OW1 - V OY2\nBEREGOVOY(3)  B EH2 - R EH1 - G AH0 - V OY2\nBEREND  B EH1 - R EH0 N D\nBERENDS  B EH1 - R EH0 N D Z\nBERENDT  B EH1 - R IH0 N T\nBERENDZEN  B EH1 - R IH0 N D - Z AH0 N\nBERENS  B IH1 - R AH0 N Z\nBERENSON  B EH1 - R IH0 N - S AH0 N\nBERENT  B EH1 - R AH0 N T\nBERES  B IY1 R Z\nBERESFORD  B IH1 R Z - F ER0 D\nBERET  B EH1 - R AH0 T\nBERET(2)  B EH1 - R EY0 T\nBERETS  B EH1 - R AH0 T S\nBERETS(2)  B EH1 - R EY0 Z\nBERETTA  B ER0 - EH1 - T AH0\nBERETTAS  B ER0 - EH1 - T AH0 S\nBEREZINE  B IH1 - R AH0 - Z IY0 N\nBEREZINE(2)  B IH1 - R AH0 - Z AY0 N\nBERG  B ER1 G\nBERG'S  B ER1 G Z\nBERGAMINI  B ER0 - G AA0 - M IY1 - N IY0\nBERGAMO  B ER0 - G AA1 - M OW0\nBERGAN  B ER1 - G AH0 N\nBERGDAHL  B ER1 G - D AA0 L\nBERGDOLL  B ER1 G - D AA2 L\nBERGDORF  B ER1 G - D AO2 R F\nBERGE  B ER1 JH\nBERGEMAN  B ER1 G - M AH0 N\nBERGEMANN  B ER1 G - M AH0 N\nBERGEN  B ER1 - G AH0 N\nBERGENDAHL  B ER1 - G EH0 N - D AA0 L\nBERGENFIELD  B ER1 - G AH0 N - F IY2 L D\nBERGENTHAL  B ER1 - G AH0 N - TH AA2 L\nBERGER  B ER1 - G ER0\nBERGER'S  B ER1 - G ER0 Z\nBERGERMAN  B ER1 - G ER0 - M AH0 N\nBERGERON  B ER1 - G ER0 - AO0 N\nBERGERSON  B ER1 - G ER0 - S AH0 N\nBERGES  B ER1 - JH IH0 Z\nBERGESON  B ER1 - G IH0 - S AH0 N\nBERGET  B ER1 - G EH0 T\nBERGEVIN  B ER1 - G EH0 - V IH0 N\nBERGEY  B ER1 - JH IY0\nBERGFELD  B ER1 G - F EH0 L D\nBERGGREN  B ER1 - G R EH0 N\nBERGH  B ER1 G\nBERGHOFF  B ER1 G - HH AO0 F\nBERGHUIS  B ER1 - G HH UW0 - IH0 Z\nBERGIN  B ER1 - G IH2 N\nBERGLAND  B ER1 - G L AE2 N D\nBERGLING  B ER1 - G L IH0 NG\nBERGLUND  B ER1 - G L AH0 N D\nBERGMAN  B ER1 G - M AH0 N\nBERGMANN  B ER1 G - M AH0 N\nBERGNER  B ER1 G - N ER0\nBERGQUIST  B ER1 G - K W IH0 S T\nBERGREN  B ER1 - G R EH0 N\nBERGS  B ER1 G Z\nBERGSCHNEIDER  B ER1 G SH - N AY0 - D ER0\nBERGSMA  B EH1 R G Z - M AH0\nBERGSTEDT  B ER1 G - S T EH0 T\nBERGSTEIN  B ER1 G - S T AY2 N\nBERGSTEIN(2)  B ER1 G - S T IY2 N\nBERGSTEN  B ER1 G - S AH0 N\nBERGSTRAND  B ER1 G - S T R AE2 N D\nBERGSTRAUSSER  B ER1 G - S T R AW2 - S ER0\nBERGSTRAUSSER'S  B ER1 G - S T R AW2 - S ER0 Z\nBERGSTRESSER  B ER1 G - S T R EH2 - S ER0\nBERGSTROM  B ER1 G - S T R AA0 M\nBERGTHOLD  B ER1 G - TH OW2 L D\nBERGUM  B ER1 - G AH0 M\nBERHOW  B ER1 - HH OW0\nBERIA  B EH1 - R IY0 - AH0\nBERING  B EH1 - R IH0 NG\nBERINGER  B EH1 - R IH0 - NG ER0\nBERISFORD  B EH1 - R IH0 S - F ER0 D\nBERISH  B ER1 - IH0 SH\nBERJAYA  B ER0 - JH AY1 - AH0\nBERK  B ER1 K\nBERKA  B ER1 - K AH0\nBERKE  B ER1 K\nBERKEBILE  B ER1 - K IH0 - B AH0 L\nBERKEL  B ER1 - K AH0 L\nBERKELEY  B ER1 K - L IY0\nBERKELEY'S  B ER1 - K L IY0 Z\nBERKELMAN  B ER1 - K AH0 L - M AH0 N\nBERKEMEIER  B ER1 - K IH0 - M AY0 - ER0\nBERKEN  B ER1 - K AH0 N\nBERKERY  B ER1 - K ER0 - IY0\nBERKES  B ER1 K S\nBERKEY  B ER1 - K IY0\nBERKHEIMER  B ER1 K - HH AY0 - M ER0\nBERKLAND  B ER1 K - L AH0 N D\nBERKLEE  B ER1 K - L IY0\nBERKLEY  B ER1 K - L IY0\nBERKLINE  B ER1 - K L AY2 N\nBERKMAN  B ER1 K - M AH0 N\nBERKO  B ER1 - K OW0\nBERKOFF  B ER1 - K AO0 F\nBERKOVITZ  B ER1 - K AH0 - V IH0 T S\nBERKOWITZ  B ER1 - K AH0 - W IH0 T S\nBERKSHIRE  B ER1 K - SH ER0\nBERKSHIRE(2)  B ER1 K - SH AY2 R\nBERKSHIRES  B ER1 K - SH IH2 R Z\nBERKSHIRES(2)  B ER1 K - SH AY2 R Z\nBERKSON  B ER1 K - S AH0 N\nBERKSTRESSER  B ER1 K - S T R IH0 - S ER0\nBERLACK  B ER1 - L AE0 K\nBERLAND  B ER1 - L AH0 N D\nBERLANGA  B ER0 - L AA1 NG - G AH0\nBERLASCONE  B EH2 R - L AH0 - S K OW1 - N IY0\nBERLASCONE'S  B EH2 R - L AH0 - S K OW1 - N IY0 Z\nBERLE  B ER1 L\nBERLET  B ER2 - L EH1 T\nBERLET'S  B ER1 - L EH1 T S\nBERLEX  B ER1 - L EH2 K S\nBERLIN  B ER0 - L IH1 N\nBERLIN'S  B ER0 - L IH1 N Z\nBERLINER  B ER0 - L IH1 - N ER0\nBERLINER(2)  B ER0 - L AY1 - N ER0\nBERLINERS  B ER0 - L IH1 - N ER0 Z\nBERLINERS(2)  B ER0 - L AY1 - N ER0 Z\nBERLING  B ER1 - L IH0 NG\nBERLINGER  B ER1 - L IH0 - NG ER0\nBERLITZ  B ER0 - L IH1 T S\nBERLOTTES  B ER0 - L AA1 T S\nBERLS  B ER1 L Z\nBERLUSCONI  B ER2 - L AH0 - S K OW1 - N IY0\nBERLUSCONI'S  B ER2 - L AH0 - S K OW1 - N IY0 Z\nBERM  B ER1 M\nBERMAN  B ER1 - M AH0 N\nBERMAN'S  B ER1 - M AH0 N Z\nBERMANS  B ER1 - M AH0 N Z\nBERMEA  B EH1 R - M IY0 - AH0\nBERMEL  B ER1 - M AH0 L\nBERMUDA  B ER0 - M Y UW1 - D AH0\nBERMUDAS  B ER0 - M Y UW1 - D AH0 Z\nBERMUDES  B ER0 - M Y UW1 D Z\nBERMUDEZ  B ER0 - M Y UW1 - D EH2 Z\nBERMUDEZ(2)  B ER2 - M Y UW1 - D EH2 Z\nBERN  B ER1 N\nBERNA  B EH1 R - N AH0\nBERNABE  B ER1 - N AH0 B\nBERNABEI  B ER1 - N AH0 - B AY0\nBERNACKI  B ER0 - N AA1 T S - K IY0\nBERNADENE  B ER1 - N AH0 - D IY0 N\nBERNADETTE  B ER0 - N AH0 - D EH1 T\nBERNADIN  B ER1 - N AH0 - D IH0 N\nBERNADINE  B ER0 - N AH0 - D IY1 N\nBERNADINO  B ER2 - N AH0 - D IY1 - N OW0\nBERNAL  B ER1 - N AH0 L\nBERNAMA  B ER0 - N AA1 - M AH0\nBERNARD  B ER0 - N AA1 R D\nBERNARD'S  B ER0 - N AA1 R D Z\nBERNARD(2)  B ER1 - N ER0 D\nBERNARDI  B ER0 - N AA1 R - D IY0\nBERNARDIN  B ER1 - N AA0 R - D IY0 N\nBERNARDINI  B ER0 - N AA0 R - D IY1 - N IY0\nBERNARDINO  B ER0 - N AH0 - D IY1 - N OW0\nBERNARDINO(2)  B ER2 - N AA0 R - D IY1 - N OW0\nBERNARDO  B ER0 - N AA1 R - D OW0\nBERNARDO'S  B ER0 - N AA1 R - D OW0 Z\nBERNARDS  B ER0 - N AA1 R D Z\nBERNARDY  B ER0 - N AA1 R - D IY0\nBERNAS  B ER1 - N AH0 Z\nBERNASCONI  B ER0 - N AA0 - S K OW1 - N IY0\nBERNAT  B ER1 - N AH0 T\nBERNATH  B ER1 - N AH0 TH\nBERNAUER  B ER1 - N AW0 - ER0\nBERNAY  B ER0 - N EY1\nBERNBACH  B ER1 N - B AA2 K\nBERND  B ER1 N T\nBERNDT  B ER1 N T\nBERNE  B ER1 N\nBERNEICE  B ER0 - N AY1 S\nBERNER  B ER1 - N ER0\nBERNET  B ER0 - N EH1 T\nBERNETT  B ER1 - N IH0 T\nBERNEY  B ER1 - N IY0\nBERNHAGEN  B ER1 N - HH AH0 - G AH0 N\nBERNHARD  B ER1 N - HH AA0 R D\nBERNHARDT  B ER1 N - HH AA0 R T\nBERNHART  B ER1 N - HH AA0 R T\nBERNHEIM  B ER1 N - HH AY0 M\nBERNHEIMER  B ER1 N - HH AY0 - M ER0\nBERNI  B EH1 R - N IY0\nBERNIA  B EH1 R - N IY0 - AH0\nBERNICE  B ER0 - N IY1 S\nBERNICK  B ER1 - N IH0 K\nBERNIE  B ER1 - N IY0\nBERNIE'S  B ER1 - N IY0 Z\nBERNIER  B ER1 - N IY0 - ER0\nBERNING  B ER1 - N IH0 NG\nBERNINGER  B ER1 - N IH0 - NG ER0\nBERNITA  B ER0 - N IY1 - T AH0\nBERNOULLI  B ER0 - N UW1 - L IY0\nBERNS  B ER1 N Z\nBERNSEN  B ER1 N - S AH0 N\nBERNSON  B ER1 N - S AH0 N\nBERNSTEIN  B ER1 N - S T AY0 N\nBERNSTEIN'S  B ER1 N - S T IY2 N Z\nBERNSTEIN'S(2)  B ER1 N - S T AY2 N Z\nBERNSTEIN(2)  B ER1 N - S T IY0 N\nBERNSTEINS  B ER1 N - S T AY0 N Z\nBERNSTEINS(2)  B ER1 N - S T IY0 N Z\nBERNT  B ER1 N T\nBERNTSEN  B ER1 N T - S AH0 N\nBERNTSON  B ER1 N T - S AH0 N\nBERNY  B ER1 - N IY0\nBERO  B EH1 - R OW0\nBERON  B EH1 - R AH0 N\nBERQUIST  B ER1 - K W IH0 S T\nBERRA  B EH1 - R AH0\nBERRA'S  B EH1 - R AH0 Z\nBERRARD  B EH2 - R AA1 R D\nBERRARD(2)  B ER0 - AA1 R D\nBERRES  B EH1 R Z\nBERRETH  B EH1 - R IH0 TH\nBERRETT  B EH1 - R IH0 T\nBERREY  B EH1 - R IY0\nBERRI  B EH1 - R IY0\nBERRIAN  B EH1 - R IY0 - AH0 N\nBERRIDGE  B EH1 - R IH0 JH\nBERRIE  B EH1 - R IY0\nBERRIEN  B EH1 - R IY0 - AH0 N\nBERRIER  B EH1 - R IY0 - ER0\nBERRIES  B EH1 - R IY0 Z\nBERRIGAN  B EH1 - R IH0 - G AH0 N\nBERRILL  B EH1 - R AH0 L\nBERRINGER  B EH1 - R IH0 - NG ER0\nBERRIOS  B EH0 - R IY1 - OW0 Z\nBERRIS  B EH1 - R IY0 Z\nBERRONG  B EH1 - R AO0 NG\nBERRY  B EH1 - R IY0\nBERRY'S  B EH1 - R IY0 Z\nBERRYHILL  B EH1 - R IY0 - HH IH2 L\nBERRYLIKE  B EH1 - R IY0 - L AY2 K\nBERRYMAN  B EH1 - R IY0 - M AH0 N\nBERSCH  B ER1 SH\nBERSERK  B ER0 - S ER1 K\nBERSHAD  B ER0 - SH AA1 D\nBERSON  B ER1 - S AH0 N\nBERST  B ER1 S T\nBERSTEIN  B ER1 - S T IY0 N\nBERSTEIN(2)  B ER1 - S T AY0 N\nBERT  B ER1 T\nBERTA  B ER1 - T AH0\nBERTCH  B ER1 CH\nBERTE  B ER1 T\nBERTELLI  B ER0 - T EH1 - L IY0\nBERTELS  B ER1 - T AH0 L Z\nBERTELSEN  B ER1 - T IH0 L - S AH0 N\nBERTELSMANN  B ER1 - T AH0 L Z - M AH0 N\nBERTELSMANN'S  B ER1 - T AH0 L Z - M AH0 N Z\nBERTELSON  B ER1 - T IH0 L - S AH0 N\nBERTH  B ER1 TH\nBERTHA  B ER1 - TH AH0\nBERTHELOT  B ER1 - TH AH0 - L AA0 T\nBERTHELSEN  B ER1 - TH AH0 L - S AH0 N\nBERTHIAUME  B ER2 - TH IY0 - UW1 - M IY0\nBERTHOLD  B ER1 - TH OW2 L D\nBERTHOLF  B ER1 - TH OW0 L F\nBERTHS  B ER1 TH S\nBERTHS(2)  B ER1 DH Z\nBERTI  B EH1 R - T IY0\nBERTIE  B ER1 - T IY0\nBERTIL  B ER1 - T IH0 L\nBERTILDE  B ER1 - T IH0 L D\nBERTIN  B ER1 - T IH0 N\nBERTINI  B ER0 - T IY1 - N IY0\nBERTINO  B ER0 - T IY1 - N OW0\nBERTKE  B ER1 T - K IY0\nBERTLING  B ER1 - T AH0 L - IH0 NG\nBERTLING(2)  B ER1 T - L IH0 NG\nBERTOLD  B ER1 - T OW0 L D\nBERTOLDI  B ER0 - T OW1 L - D IY0\nBERTOLI  B ER0 - T OW1 - L IY0\nBERTOLINI  B ER0 - T OW0 - L IY1 - N IY0\nBERTOLINO  B ER0 - T OW0 - L IY1 - N OW0\nBERTOLOTTI  B ER0 - T OW0 - L OW1 - T IY0\nBERTOLUCCI  B ER2 - T OW0 - L UW1 - CH IY0\nBERTON  B ER1 - T AH0 N\nBERTONE  B ER0 - T OW1 - N IY0\nBERTONI  B ER0 - T OW1 - N IY0\nBERTRADE  B ER1 - T R AH0 D\nBERTRAM  B ER1 - T R AH0 M\nBERTRAN  B ER1 - T R AH0 N\nBERTRAND  B ER1 - T R AH0 N D\nBERTSCH  B ER1 CH\nBERTSCHE  B ER1 CH\nBERTUCCI  B ER0 - T UW1 - CH IY0\nBERTUCCI'S  B ER0 - T UW1 - CH IY0 Z\nBERTY  B ER1 - T IY0\nBERTZ  B ER1 T S\nBERUBE  B EH1 - R UW0 B\nBERUMEN  B IH1 - R UW0 - M EH0 N\nBERWALD  B ER1 - W AO0 L D\nBERWANGER  B ER1 - W AO0 NG - ER0\nBERWICK  B ER1 - W IH0 K\nBERWYN  B ER1 - W IH0 N\nBERYL  B EH1 - R AH0 L\nBERYLLIUM  B ER0 - IH1 - L IY0 - AH0 M\nBERZIN  B ER1 - Z IH0 N\nBERZINS  B ER1 - Z IH0 N Z\nBES  B IY1 Z\nBESANCON  B IH0 - S AE1 N - K AH0 N\nBESANT  B EH1 - Z AH0 N T\nBESAW  B IY1 - S AO0\nBESCH  B EH1 SH\nBESCHLOSS  B EH1 SH - L AO2 S\nBESCHLOSS'  B EH1 SH - L AO2 S\nBESCHLOSS'S  B EH1 SH - L AO2 - S IH0 S\nBESECKER  B EH1 - S IH0 - K ER0\nBESEIGED  B IH0 - S IY1 JH D\nBESEMER  B EH1 - S IY0 - M ER0\nBESET  B IH0 - S EH1 T\nBESETTING  B IH0 - S EH1 - T IH0 NG\nBESHARA  B IH0 - SH AA1 - R AH0\nBESHAROV  B EH1 - SH ER0 - AA0 V\nBESHEARS  B EH1 - SH IH0 R Z\nBESHLOSS  B EH1 SH - L AO0 S\nBESHORE  B EH1 - SH ER0\nBESIDE  B IH0 - S AY1 D\nBESIDES  B IH0 - S AY1 D Z\nBESIEGE  B IH0 - S IY1 JH\nBESIEGED  B IH0 - S IY1 JH D\nBESIEGING  B IH0 - S IY1 - JH IH0 NG\nBESKE  B EH1 S K\nBESLER  B EH1 - S AH0 - L ER0\nBESLER(2)  B EH1 S - L ER0\nBESNER  B R EH1 S - N ER0\nBESNER'S  B R EH1 S - N ER0 Z\nBESPEAK  B IH0 - S P IY1 K\nBESPEAKS  B IH0 - S P IY1 K S\nBESPECTACLE  B IH0 - S P EH1 K - T AH0 - K AH0 L\nBESPECTACLED  B IH0 - S P EH1 K - T AH0 - K AH0 L D\nBESS  B EH1 S\nBESSE  B EH1 S\nBESSEMER  B EH1 - S AH0 - M ER0\nBESSENT  B EH1 - S AH0 N T\nBESSER  B EH1 - S ER0\nBESSERT  B EH1 - S ER0 T\nBESSETTE  B IH0 - S EH1 T\nBESSEY  B EH1 - S IY0\nBESSIE  B EH1 - S IY0\nBESSINGER  B EH1 - S IH0 N - JH ER0\nBESSIRE  B EH0 - S IH1 - R IY0\nBESSLER  B EH1 S - L ER0\nBESSO  B EH1 - S OW0\nBESSON  B EH1 - S AH0 N\nBESSY  B EH1 - S IY0\nBEST  B EH1 S T\nBEST'S  B EH1 S T S\nBESTE  B EH1 S T\nBESTED  B EH1 - S T IH0 D\nBESTER  B EH1 - S T ER0\nBESTIAL  B EH1 - S CH AH0 L\nBESTIALITY  B EH0 - S CH AE1 - L IH0 - T IY0\nBESTING  B EH1 - S T IH0 NG\nBESTOW  B IH0 - S T OW1\nBESTOWED  B IH0 - S T OW1 D\nBESTOWING  B IH0 - S T OW1 - IH0 NG\nBESTOWS  B IH0 - S T OW1 Z\nBESTRODE  B IH0 - S T R OW1 D\nBESTSELLER  B EH1 S T - S EH1 - L ER0\nBESTSELLER(2)  B EH1 S - S EH1 - L ER0\nBESTSELLER(3)  B EH1 - S EH1 - L ER0\nBESTSELLERS  B EH1 S T - S EH1 - L ER0 Z\nBESTSELLERS(2)  B EH1 S - S EH1 - L ER0 Z\nBESTSELLERS(3)  B EH1 - S EH1 - L ER0 Z\nBESTSELLING  B EH1 S T - S EH1 - L IH0 NG\nBESTSELLING(2)  B EH1 S - S EH1 - L IH0 NG\nBESTSELLING(3)  B EH1 - S EH1 - L IH0 NG\nBESTUL  B EH1 - S T AH0 L\nBESTWICK  B EH1 - S T W IH2 K\nBESWICK  B EH1 - S W IH0 K\nBET  B EH1 T\nBET'S  B EH1 T S\nBETA  B EY1 - T AH0\nBETAMAX  B EY1 - T AH0 - M AE0 K S\nBETANCOURT  B EH1 - T AH0 N - K AO0 R T\nBETANCUR  B AH0 - T AE1 NG - K ER0\nBETAR  B EH1 - T AA0 R\nBETAS  B EY1 - T AH0 Z\nBETASERON  B EY2 - T AH0 - S EH1 - R AA2 N\nBETAVON  B EH1 - T AH0 - V AA0 N\nBETCHA  B EH1 - CH AH0\nBETCHER  B EH1 - CH ER0\nBETEL  B EH1 - T AH0 L\nBETETA  B EH0 - T EY1 - T AH0\nBETH  B EH1 TH\nBETHANY  B EH1 - TH AH0 - N IY0\nBETHARD  B EH1 - TH ER0 D\nBETHARDS  B EH1 - TH ER0 D Z\nBETHEA  B EH1 - DH IY0 - AH0\nBETHEL  B EH1 - TH AH0 L\nBETHEL(2)  B EH1 - TH EH2 L\nBETHELL  B EH1 - TH AH0 L\nBETHESDA  B AH0 - TH EH1 Z - D AH0\nBETHKE  B EH1 TH K\nBETHLEHEM  B EH1 TH - L IH0 - HH EH2 M\nBETHLEHEM'S  B EH1 TH - L IH0 - HH EH2 M Z\nBETHPAGE  B EH2 TH - P EY1 JH\nBETHUNE  B AH0 - TH Y UW1 N\nBETIDE  B IH0 - T AY1 D\nBETKE  B EH1 T - K IY0\nBETKER  B EH1 T - K ER0\nBETLEY  B EH1 T - L IY0\nBETRAY  B IH0 - T R EY1\nBETRAYAL  B IH0 - T R EY1 - AH0 L\nBETRAYALS  B IH0 - T R EY1 - AH0 L Z\nBETRAYED  B IH0 - T R EY1 D\nBETRAYING  B IH0 - T R EY1 - IH0 NG\nBETRAYS  B IH0 - T R EY1 Z\nBETS  B EH1 T S\nBETSCH  B EH1 CH\nBETSCHART  B EH1 T S - HH AA2 R T\nBETSCHART(2)  B EH1 - CH AA2 R T\nBETSEY  B EH1 T - S IY0\nBETSILL  B EH1 T - S AH0 L\nBETSY  B EH1 T - S IY0\nBETSY'S  B EH1 T - S IY0 Z\nBETT  B EH1 T\nBETTA  B EH1 - T AH0\nBETTCHER  B EH1 T - CH ER0\nBETTE  B EH1 - T IY0\nBETTEN  B EH1 - T AH0 N\nBETTENBERG  B EH1 - T AH0 N - B ER0 G\nBETTENCOURT  B EH1 - T IH0 N - K AO0 R T\nBETTENDORF  B EH1 - T IH0 N - D AO0 R F\nBETTENHAUSEN  B EH1 - T IH0 N - HH AW0 - Z AH0 N\nBETTER  B EH1 - T ER0\nBETTERED  B EH1 - T ER0 D\nBETTERIDGE  B EH1 - T ER0 - IH0 JH\nBETTERING  B EH1 - T ER0 - IH0 NG\nBETTERMENT  B EH1 - T ER0 - M AH0 N T\nBETTERS  B EH1 - T ER0 Z\nBETTERTON  B EH1 - T ER0 - T AH0 N\nBETTES  B EH1 - T IY0 Z\nBETTI  B EH1 - T IY0\nBETTIN  B EH1 - T IH0 N\nBETTINA  B AH0 - T IY1 - N AH0\nBETTING  B EH1 - T IH0 NG\nBETTINGER  B EH1 - T IH0 - NG ER0\nBETTINI  B EH0 - T IY1 - N IY0\nBETTINO  B EH0 - T IY1 - N OW0\nBETTIS  B EH1 - T IH0 S\nBETTMAN  B EH1 T - M AH0 N\nBETTMAN'S  B EH1 T - M AH0 N Z\nBETTNER  B EH1 T - N ER0\nBETTON  B EH1 - T AH0 N\nBETTOR  B EH1 - T ER0\nBETTORS  B EH1 - T ER0 Z\nBETTS  B EH1 T S\nBETTY  B EH1 - T IY0\nBETTY'S  B EH1 - T IY0 Z\nBETWEEN  B IH0 - T W IY1 N\nBETWEEN(2)  B IY0 - T W IY1 N\nBETWEENS  B IH0 - T W IY1 N Z\nBETWEENS(2)  B IY0 - T W IY1 N Z\nBETZ  B EH1 T S\nBETZER  B EH1 T - Z ER0\nBETZLER  B EH1 T S - L ER0\nBETZOLD  B EH1 T - Z OW0 L D\nBEU  B UW1\nBEUCLER  B OY1 - K AH0 - L ER0\nBEUCLER(2)  B OY1 K - L ER0\nBEUKEMA  B UW0 - K IY1 - M AH0\nBEULA  B UW1 - L AH0\nBEULAH  B Y UW1 - L AH0\nBEUMER  B IY1 - AH0 - M ER0\nBEURY  B ER1 - IY0\nBEURY'S  B ER1 - IY0 Z\nBEUTEL  B Y UW0 - T EH1 L\nBEUTHIN  B Y UW1 - TH IH0 N\nBEUTLER  B OY1 - T AH0 L - ER0\nBEUTLER(2)  B OY1 T - L ER0\nBEUYS  B Y UW1 - IY0 Z\nBEV  B EH1 V\nBEVACQUA  B EH0 - V AA1 - K W AH0\nBEVALAQUA  B EH0 - V AH0 - L AA1 - K AH0\nBEVAN  B EH1 - V AH0 N\nBEVANS  B EH1 - V AH0 N Z\nBEVAQUA  B EH0 - V AA1 - K AH0\nBEVARD  B IH0 - V AA1 R D\nBEVEL  B EH1 - V AH0 L\nBEVELLED  B EH1 - V AH0 L D\nBEVEN  B EH1 - V AH0 N\nBEVENS  B IY1 - V AH0 N Z\nBEVER  B EH1 - V ER0\nBEVERAGE  B EH1 - V ER0 - IH0 JH\nBEVERAGE(2)  B EH1 - V R IH0 JH\nBEVERAGES  B EH1 - V R IH0 - JH IH0 Z\nBEVERIDGE  B EH1 - V ER0 - IH0 JH\nBEVERLEY  B EH1 - V ER0 - L IY0\nBEVERLIN  B EH1 - V ER0 - L IH0 N\nBEVERLY  B EH1 - V ER0 - L IY0\nBEVERLY'S  B EH1 - V ER0 - L IY0 Z\nBEVERS  B EH1 - V ER0 Z\nBEVIER  B EH1 - V IY0 - ER0\nBEVIL  B EH1 - V AH0 L\nBEVILACQUA  B EH0 - V IY0 - L AA1 - K W AH0\nBEVILL  B EH1 - V AH0 L\nBEVILLE  B IY1 - V IH0 L\nBEVIN  B EH1 - V IH0 N\nBEVINGTON  B EH1 - V IH0 NG - T AH0 N\nBEVINS  B EH1 - V IH0 N Z\nBEVIS  B EH1 - V IH0 S\nBEVMARK  B EH1 V - M AA2 R K\nBEVY  B EH1 - V IY0\nBEWARE  B IH0 - W EH1 R\nBEWILDER  B IH0 - W IH1 L - D ER0\nBEWILDERED  B IH0 - W IH1 L - D ER0 D\nBEWILDERING  B IH0 - W IH1 L - D ER0 - IH0 NG\nBEWILDERMENT  B IH0 - W IH1 L - D ER0 - M AH0 N T\nBEWILDERS  B IH0 - W IH1 L - D ER0 Z\nBEWITCH  B IH0 - W IH1 CH\nBEWITCHED  B IH0 - W IH1 CH T\nBEWLEY  B Y UW1 - L IY0\nBEXLEY  B EH1 K S - L IY0\nBEY  B EY1\nBEYER  B EY1 - ER0\nBEYERLE  B AY1 - R AH0 L\nBEYERLEIN  B AY1 R - L AY0 N\nBEYERS  B EY1 - ER0 Z\nBEYERSDORF  B AY1 R S - D AO0 R F\nBEYL  B EY1 L\nBEYMER  B EY1 - M ER0\nBEYNON  B EY1 - N AH0 N\nBEYOND  B IH0 - AA1 N D\nBEYOND(2)  B IY2 - AO1 N D\nBEYOND(3)  B IH0 - AO1 N D\nBEYTOUT  B EY1 T - AW2 T\nBEZAIRE  B AH0 - Z EH1 R\nBEZANSON  B EH1 - Z AH0 N - S AH0 N\nBEZDEK  B EH1 Z - D IH0 K\nBEZEK  B EH1 - Z EH0 K\nBEZNER  B EH1 Z - N ER0\nBEZOLD  B EH1 - Z OW0 L D\nBHAGWAN  B AA1 - G W AA0 N\nBHAKTA  B AA1 K - T AH0\nBHANGRA  B AA1 NG - G R AH0\nBHARATA  B AA2 - R AA1 - T AH0\nBHATIA  B AA1 - SH AH0\nBHATIA(2)  B AA1 - T Y AH0\nBHATT  B AE1 T\nBHATT(2)  B AA1 T\nBHATTACHARJY  B AA2 - T AH0 - CH AA1 R - JH IY0\nBHATTI  B AA1 - T IY0\nBHATTI(2)  B AA1 - T IY2\nBHIKSHA  B IH1 K - SH AA2\nBHIKSHA(2)  B IY1 K - SH AA2\nBHIRUD  B IH1 - R AH0 D\nBHOPAL  B OW0 - P AA1 L\nBHUTAN  B UW2 - T AE1 N\nBHUTAN(2)  B AH0 - T AA1 N\nBHUTTO  B UW1 - T OW0\nBHUTTO'S  B UW1 - T OW0 Z\nBI  B AY1\nBIAGGI  B IY0 - AE1 - JH IY0\nBIAGGINI  B IY2 - AH0 - G IY1 - N IY0\nBIAGI  B IY0 - AA1 - JH IY0\nBIAGINI  B IY0 - AH0 - JH IY1 - N IY0\nBIAGIONI  B IY0 - AA2 - JH IY0 - OW1 - N IY0\nBIALAS  B IY0 - AA1 - L AH0 S\nBIALECKI  B IY0 - AH0 - L EH1 - K IY0\nBIALEK  B IY0 - AA1 - L EH0 K\nBIALIK  B IY0 - AA1 - L IH0 K\nBIALKIN  B IY0 - AA1 L - K AH0 N\nBIALKOWSKI  B IY0 - AH0 L - K AW1 S - K IY0\nBIALY  B IY0 - AA1 - L IY0\nBIAMBY  B IY0 - AA1 M - B IY0\nBIAMBY'S  B IY0 - AA1 M - B IY0 Z\nBIAMONTE  B IY0 - AH0 - M AO1 N - T IY0\nBIANA  B IY0 - AA1 - N AH0\nBIANCA  B IY0 - AA1 NG - K AH0\nBIANCHI  B IY0 - AA1 N - CH IY0\nBIANCHINI  B IY0 - AA0 N - CH IY1 - N IY0\nBIANCO  B IY0 - AA1 NG - K OW0\nBIANCONI  B IY0 - AA0 NG - K OW1 - N IY0\nBIANCULLI  B IY0 - AA0 NG - K UW1 - L IY0\nBIANNUAL  B AY0 - AE1 - N UW0 - AH0 L\nBIAS  B AY1 - AH0 S\nBIASED  B AY1 - AH0 S T\nBIASES  B AY1 - AH0 - S IH0 Z\nBIASI  B IY0 - AA1 - S IY0\nBIAXIAL  B AY0 - AE1 K - S IY0 - AH0 L\nBIB  B IH1 B\nBIBA  B IY1 - B AH0\nBIBB  B IH1 B\nBIBBEE  B IH1 - B IY1\nBIBBINS  B IH1 - B IH0 N Z\nBIBBO  B IY1 - B OW0\nBIBBS  B IH1 B Z\nBIBBY  B IH1 - B IY0\nBIBEAU  B IH0 - B OW1\nBIBEAULT  B IH0 - B OW1\nBIBEE  B IH0 - B IY1\nBIBER  B AY1 - B ER0\nBIBI  B IH0 - B IY1\nBIBI'S  B IH0 - B IY1 Z\nBIBI'S(2)  B IY2 - B IY1 Z\nBIBI(2)  B IY2 - B IY1\nBIBLE  B AY1 - B AH0 L\nBIBLE'S  B AY1 - B AH0 L Z\nBIBLER  B AY1 - B AH0 L - ER0\nBIBLER(2)  B AY1 - B L ER0\nBIBLES  B AY1 - B AH0 L Z\nBIBLICAL  B IH1 - B L AH0 - K AH0 L\nBIBLICAL(2)  B IH1 - B L IH0 - K AH0 L\nBIBLIOGRAPHIES  B IH2 - B L IY0 - AA1 - G R AH0 - F IY0 Z\nBIBLIOGRAPHY  B IH2 - B L IY0 - AA1 - G R AH0 - F IY0\nBIBS  B IH1 B Z\nBIBY  B AY1 - B IY0\nBIC  B IH1 K\nBICARBONATE  B AY0 - K AA1 R - B AH0 - N AH0 T\nBICE  B AY1 S\nBICENTENARY  B AY0 - S EH1 N - T IH0 - N EH2 - R IY0\nBICENTENNIAL  B AY2 - S EH0 N - T EH1 - N IY0 - AH0 L\nBICEPS  B AY1 - S EH2 P S\nBICHLER  B IH1 - K AH0 - L ER0\nBICHLER(2)  B IH1 - K L ER0\nBICHSEL  B IH1 K - S AH0 L\nBICK  B IH1 K\nBICKEL  B IH1 - K AH0 L\nBICKELL  B IH1 - K AH0 L\nBICKER  B IH1 - K ER0\nBICKERED  B IH1 - K ER0 D\nBICKERING  B IH1 - K ER0 - IH0 NG\nBICKERS  B IH1 - K ER0 Z\nBICKERSTAFF  B IH1 - K ER0 - S T AE2 F\nBICKERT  B IH1 - K ER0 T\nBICKERTON  B IH1 - K ER0 - T AH0 N\nBICKETT  B IH1 - K IH0 T\nBICKFORD  B IH1 K - F ER0 D\nBICKHAM  B IH1 K - HH AH0 M\nBICKHART  B IH1 K - HH AA2 R T\nBICKING  B IH1 - K IH0 NG\nBICKLE  B IH1 - K AH0 L\nBICKLER  B IH1 - K L ER0\nBICKLEY  B IH1 K - L IY0\nBICKMORE  B IH1 K - M AO0 R\nBICKNELL  B IH1 K - N AH0 L\nBICKNER  B IH1 K - N ER0\nBICKSLER  B IH1 K S - L ER0\nBICKWIT  B IH1 - K W IH0 T\nBICOASTAL  B IH0 - K OW1 - S T AH0 L\nBICUSPID  B AY0 - K AH1 - S P AH0 D\nBICUSPIDS  B AY0 - K AH1 - S P AH0 D Z\nBICYCLE  B AY1 - S IH0 - K AH0 L\nBICYCLED  B AY1 - S IH0 - K AH0 L D\nBICYCLES  B AY1 - S IH0 - K AH0 L Z\nBICYCLING  B AY1 - S IH2 - K AH0 - L IH0 NG\nBICYCLING(2)  B AY1 - S IH2 - K L IH0 NG\nBICYCLIST  B AY1 - S IH2 - K L IH0 S T\nBICYCLISTS  B AY1 - S IH2 - K L IH0 S T S\nBICYCLISTS(2)  B AY1 - S IH2 - K L IH0 S S\nBICYCLISTS(3)  B AY1 - S IH2 - K L IH0 S\nBID  B IH1 D\nBID'S  B IH1 D Z\nBIDCO  B IH1 D - K OW0\nBIDCOS  B IH1 D - K OW0 S\nBIDDER  B IH1 - D ER0\nBIDDER'S  B IH1 - D ER0 Z\nBIDDERS  B IH1 - D ER0 Z\nBIDDIE  B IH1 - D IY0\nBIDDING  B IH1 - D IH0 NG\nBIDDINGER  B IH1 - D IH0 - NG ER0\nBIDDISON  B IH1 - D IH0 - S AH0 N\nBIDDIX  B IH1 - D IH0 K S\nBIDDLE  B IH1 - D AH0 L\nBIDDLE'S  B IH1 - D AH0 L Z\nBIDDY  B IH1 - D IY0\nBIDE  B AY1 D\nBIDEN  B AY1 - D AH0 N\nBIDERMAN  B AY1 - D ER0 - M AH0 N\nBIDGOOD  B IH1 D - G UH2 D\nBIDING  B AY1 - D IH0 NG\nBIDINGER  B AY1 - D IH0 - NG ER0\nBIDLACK  B IH1 D - L AE2 K\nBIDLO  B IH1 - D L OW0\nBIDLO'S  B IH1 - D L OW0 Z\nBIDS  B IH1 D Z\nBIDWELL  B IH1 D - W EH2 L\nBIDWILL  B IH1 D - W IH2 L\nBIEBEL  B IY1 - B AH0 L\nBIEBER  B IY1 - B ER0\nBIEDA  B IY1 - D AH0\nBIEDERMAN  B IY1 - D ER0 - M AH0 N\nBIEDERMANN  B AY1 - D ER0 - M AH0 N\nBIEDERMEIER  B IY1 - D ER0 - M AY2 R\nBIEDRZYCKI  B IH0 - JH IH1 T S - K IY0\nBIEGEL  B IY1 - G AH0 L\nBIEGLER  B IY1 - G AH0 - L ER0\nBIEGLER(2)  B IY1 G - L ER0\nBIEHL  B IY1 L\nBIEHLE  B IY1 - HH AH0 L\nBIEHLER  B IY1 - L ER0\nBIEHN  B IY1 N\nBIEKER  B IY1 - K ER0\nBIEL  B IY1 L\nBIELA  B IY1 - L AH0\nBIELAK  B IY1 - L AH0 K\nBIELANSKI  B IY0 - L AE1 N S - K IY0\nBIELAT  B IY1 - L AH0 T\nBIELAWSKI  B IY0 - L AA1 F S - K IY0\nBIELBY  B IY1 L - B IY0\nBIELECKI  B IY0 - L EH1 T S - K IY0\nBIELECKI(2)  B AY0 - L EH1 - K IY0\nBIELEFELD  B IY1 - L IH0 - F EH0 L D\nBIELEFELDT  B IY1 - L IH0 - F IH0 L T\nBIELEN  B IY1 - L AH0 N\nBIELENBERG  B IY1 - L AH0 N - B ER0 G\nBIELER  B IY1 - L ER0\nBIELICKI  B IH0 - L IH1 T S - K IY0\nBIELINSKI  B IH0 - L IH1 N - S K IY0\nBIELKE  B IY1 L K\nBIELSKI  B IY1 L S - K IY0\nBIEN  B IY1 N\nBIENIEK  B IH1 - N IY0 - EH0 K\nBIENKOWSKI  B IH0 NG - K AO1 F S - K IY0\nBIENNALE  B IY0 - EH1 - N EY2 L\nBIENNIAL  B AY0 - EH1 - N IY0 - AH0 L\nBIENSTOCK  B IY1 N - S T AA2 K\nBIENVENU  B AH0 N - V EH1 - N UW0\nBIENVENUE  B AH0 N - V EY1 N - W EH0\nBIER  B IY1 R\nBIERBARROR  B IH1 R - B AA2 - R ER0\nBIERBAUER  B IH1 R - B AW0 - ER0\nBIERBAUER'S  B IH1 R - B AW0 - ER0 Z\nBIERBAUM  B IH1 R - B AW0 M\nBIERBUSSE  B IH1 R - B AH0 S\nBIERCE  B IH1 R S\nBIERER  B IH1 - R ER0\nBIERI  B IH1 - R IY0\nBIERLEIN  B IH1 R - L AY0 N\nBIERLEY  B IH1 R - L IY0\nBIERLY  B IH1 R - L IY0\nBIERMA  B IH1 R - M AH0\nBIERMAN  B IH1 R - M AH0 N\nBIERMANN  B IH1 R - M AH0 N\nBIERNACKI  B IH0 R - N AA1 T S - K IY0\nBIERNAT  B IH0 R - N AE1 T\nBIERS  B IY1 R Z\nBIERWIRTH  B IH1 R - W ER0 TH\nBIERY  B IH1 - R IY0\nBIES  B AY1 Z\nBIESECKER  B IY1 - S IH0 - K ER0\nBIESER  B IY1 - S ER0\nBIETZ  B IY1 T S\nBIEV  B IY1 V\nBIEV'S  B IY1 V Z\nBIEVER  B IY1 - V ER0\nBIFANO  B IH0 - F AA1 - N OW0\nBIFF  B IH1 F\nBIFFLE  B IH1 - F AH0 L\nBIFIDA  B IH1 - F AH0 - D AH0\nBIFOCAL  B AY1 - F OW0 - K AH0 L\nBIFOCALS  B AY1 - F OW0 - K AH0 L Z\nBIFULCO  B IH0 - F UW1 L - K OW0\nBIFURCATE  B IH1 - F ER0 - K EY2 T\nBIFURCATE(2)  B AY1 - F ER0 - K EY2 T\nBIFURCATED  B IH1 - F ER0 - K EY2 - T IH0 D\nBIFURCATED(2)  B AY1 - F ER0 - K EY2 - T IH0 D\nBIFURCATION  B IH2 - F ER0 - K EY1 - SH AH0 N\nBIFURCATION(2)  B AY2 - F ER0 - K EY1 - SH AH0 N\nBIG  B IH1 G\nBIGBEE  B IH1 G - B IY2\nBIGBIE  B IH1 G - B IY0\nBIGBY  B IH1 G - B IY0\nBIGELOW  B IH1 - G AH0 - L OW2\nBIGELOW'S  B IH1 - G AH0 - L OW2 Z\nBIGEYES  B IH1 - G AY2 Z\nBIGFOOT  B IH1 G - F UH2 T\nBIGFORD  B IH1 G - F ER0 D\nBIGGAR  B IH1 - G ER0\nBIGGER  B IH1 - G ER0\nBIGGERS  B IH1 - G ER0 Z\nBIGGERSTAFF  B IH1 - G ER0 - S T AE2 F\nBIGGEST  B IH1 - G AH0 S T\nBIGGIE  B IH1 - G IY0\nBIGGIES  B IH1 - G IY0 Z\nBIGGINS  B IH1 - G IH0 N Z\nBIGGIO  B IY1 - JH IY0 - OW0\nBIGGS  B IH1 G Z\nBIGHAM  B AY1 G - HH AH0 M\nBIGHORN  B IH1 G - HH AO2 R N\nBIGHORNS  B IH1 G - HH AO2 R N Z\nBIGLER  B AY1 - G AH0 - L ER0\nBIGLER(2)  B AY1 - G L ER0\nBIGLER(3)  B IH1 G - L ER0\nBIGLEY  B IH1 G - L IY0\nBIGLIN  B IH1 - G L IH0 N\nBIGLOW  B IH1 - G L OW0\nBIGNELL  B IH0 G - N EH1 L\nBIGNESS  B IH1 G - N AH0 S\nBIGOS  B IY1 - G OW0 Z\nBIGOT  B IH1 - G AH0 T\nBIGOTED  B IH1 - G AH0 - T IH0 D\nBIGOTRY  B IH1 - G AH0 - T R IY0\nBIGOTS  B IH1 - G AH0 T S\nBIGS  B IH1 G Z\nBIGSBY  B IH1 G Z - B IY0\nBIGTIME  B IH1 G - T AY0 M\nBIGWIG  B IH1 G - W IH2 G\nBIGWIGS  B IH1 G - W IH2 G Z\nBIGWOOD  B IH1 G - W UH2 D\nBIHAC  B IY1 - HH AA2 CH\nBIHAC'S  B IY1 - HH AA2 - CH IH0 Z\nBIHARI  B IH0 - HH AA1 - R IY0\nBIHARI(2)  B IY0 - HH AA1 - R IY0\nBIHL  B IH1 L\nBIHM  B IH1 M\nBIHN  B IH1 N\nBIJAC  B AY1 - JH AE0 K\nBIJAC(2)  B IY1 - JH AE0 K\nBIJAN  B IH1 - JH AH0 N\nBIJELJINA  B IH0 - JH EH1 L - JH IY0 - N AH0\nBIJUR  B IY0 - ZH UH1 R\nBIKE  B AY1 K\nBIKED  B AY1 K T\nBIKER  B AY1 - K ER0\nBIKERS  B AY1 - K ER0 Z\nBIKES  B AY1 K S\nBIKIN  B IH1 - K IH0 N\nBIKING  B AY1 - K IH0 NG\nBIKINI  B IH0 - K IY1 - N IY0\nBIKINIS  B AH0 - K IY1 - N IY0 Z\nBIKO  B IY1 - K OW0\nBIL  B IH1 L\nBILA  B IY1 - L AH0\nBILATERAL  B AY0 - L AE1 - T ER0 - AH0 L\nBILATERALLY  B AY0 - L AE1 - T ER0 - AH0 - L IY0\nBILBAO  B IH0 L - B AW1\nBILBO  B IH1 L - B OW2\nBILBREY  B IH1 L - B R IY0\nBILBRO  B IY1 L - B R OW0\nBILBY  B IH1 L - B IY0\nBILD  B IH1 L D\nBILDERBACK  B AY1 L - D ER0 - B AE0 K\nBILDNER  B IH1 L D - N ER0\nBILDT  B IH1 L T\nBILDT'S  B IH1 L T S\nBILE  B AY1 L\nBILEK  B IH1 - L EH0 K\nBILELLO  B IH0 - L EH1 - L OW0\nBILES  B AY1 L Z\nBILGER  B IH1 L - G ER0\nBILICKI  B IH0 - L IH1 T S - K IY0\nBILINGS  B AY1 - L IH0 NG Z\nBILINGUAL  B AY0 - L IH1 NG - G W AH0 L\nBILINGUALISM  B AY0 - L IH1 NG - G W AH0 - L IH2 - Z AH0 M\nBILINSKI  B IH0 - L IH1 N - S K IY0\nBILIOUS  B IH1 - L IY0 - AH0 S\nBILIRAKIS  B IH0 - L IH1 - R AH0 - K IH0 S\nBILK  B IH1 L K\nBILKA  B IH1 L - K AH0\nBILKED  B IH1 L K T\nBILKING  B IH1 L - K IH0 NG\nBILKO  B IH1 L - K OW0\nBILL  B IH1 L\nBILL'S  B IH1 L Z\nBILLABLE  B IH1 - L AH0 - B AH0 L\nBILLANCOURT  B IH1 - L AH0 N - K AO2 R T\nBILLARD  B IH0 - L AA1 R D\nBILLBOARD  B IH1 L - B AO2 R D\nBILLBOARD'S  B IH1 L - B AO2 R D Z\nBILLBOARDS  B IH1 L - B AO2 R D Z\nBILLE  B AY1 L\nBILLED  B IH1 L D\nBILLER  B IH1 - L ER0\nBILLERICA  B IH2 - L ER0 - IY1 - K AH0\nBILLES  B IH1 L Z\nBILLET  B IH1 - L AH0 T\nBILLET(2)  B IH1 - L IH0 T\nBILLETER  B IH1 - L IY0 - T ER0\nBILLETS  B IH1 - L AH0 T S\nBILLETT  B IH1 - L IH0 T\nBILLFOLD  B IH1 L - F OW2 L D\nBILLIARD  B IH1 - L Y ER0 D\nBILLIARDS  B IH1 - L Y ER0 D Z\nBILLICK  B IH1 - L IH0 K\nBILLIE  B IH1 - L IY0\nBILLIG  B IH1 - L IH0 G\nBILLING  B IH1 - L IH0 NG\nBILLINGER  B IH1 - L IH0 - NG ER0\nBILLINGHAM  B IH1 - L IH0 NG - HH AE2 M\nBILLINGS  B IH1 - L IH0 NG Z\nBILLINGSLEA  B IH1 - L IH0 NG Z - L IY0\nBILLINGSLEY  B IH1 - L IH0 NG Z - L IY0\nBILLINGSLY  B IH1 - L IH0 NG Z - L IY0\nBILLINGTON  B IH1 - L IH0 NG - T AH0 N\nBILLION  B IH1 - L Y AH0 N\nBILLIONAIRE  B IH2 - L Y AH0 - N EH1 R\nBILLIONAIRES  B IH2 - L Y AH0 - N EH1 R Z\nBILLIONS  B IH1 - L Y AH0 N Z\nBILLIONTH  B IH1 - L Y AH0 N TH\nBILLIONTHS  B IH1 - L Y AH0 N TH S\nBILLIOT  B IH1 - L IY0 - AA0 T\nBILLIPS  B IH1 - L IH0 P S\nBILLITER  B IH1 - L IY0 - T ER0\nBILLITON  B IH1 - L IH0 - T AH0 N\nBILLMAN  B IH1 L - M AH0 N\nBILLMEYER  B IH1 L - M AY0 - ER0\nBILLON  B IH1 - L AH0 N\nBILLOW  B IH1 - L OW0\nBILLOWED  B IH1 - L OW0 D\nBILLOWING  B IH1 - L OW0 - IH0 NG\nBILLOWS  B IH1 - L OW0 Z\nBILLS  B IH1 L Z\nBILLS'  B IH1 L Z\nBILLUP  B IH1 - L AH0 P\nBILLUPS  B IH1 - L AH0 P S\nBILLY  B IH1 - L IY0\nBILLY'S  B IH1 - L IY0 Z\nBILODEAU  B IH1 - L AH0 - D OW0\nBILOTTA  B IH0 - L OW1 - T AH0\nBILOTTI  B IH0 - L AA1 - T IY0\nBILOW  B IH1 - L OW0\nBILOXI  B AH0 - L AH1 K - S IY0\nBILOXI'S  B AH0 - L AH1 K - S IY0 Z\nBILSKI  B IH1 L S - K IY0\nBILSKY  B IH1 L S - K IY0\nBILSON  B IH1 L - S AH0 N\nBILTMORE  B IH1 L T - M AO2 R\nBILTON  B IH1 L - T AH0 N\nBILTZ  B IH1 L T S\nBILY  B IH1 - L IY0\nBILYEU  B IH1 - L IY0 - UW0\nBILYK  B IH1 - L IH0 K\nBILZERIAN  B IH0 L - Z EH1 - R IY0 - AH0 N\nBILZERIAN'S  B IH0 L - Z EH1 - R IY0 - AH0 N Z\nBIMA  B IY1 - M AH0\nBIMBO  B IH1 M - B OW0\nBIMBOS  B IH1 M - B OW0 S\nBIMINI  B IH1 - M AH0 - N IY0\nBIMINI(2)  B IH0 - M IY1 - N IY0\nBIMIODAL  B AY0 - M OW1 - D AH0 L\nBIMONTHLY  B AY0 - M AH1 N TH - L IY0\nBIN  B IH1 N\nBINA  B IY1 - N AH0\nBINARY  B AY1 - N ER0 - IY0\nBINATIONAL  B AY0 - N AE1 - SH AH0 - N AH0 L\nBIND  B AY1 N D\nBINDEL  B IH1 N - D AH0 L\nBINDER  B AY1 N - D ER0\nBINDERS  B AY1 N - D ER0 Z\nBINDING  B AY1 N - D IH0 NG\nBINDLE  B IH1 N - D AH0 L\nBINDLES  B IH1 N - D AH0 L Z\nBINDLEY  B IH1 N D - L IY0\nBINDS  B AY1 N D Z\nBINEGAR  B IH1 - N IH0 - G ER0\nBINES  B AY1 N Z\nBINETTE  B IH0 - N EH1 T\nBINETTI  B IH0 - N EH1 - T IY0\nBINFIELD  B IH1 N - F IY2 L D\nBINFORD  B IH1 N - F ER0 D\nBING  B IH1 NG\nBING  B R AY1 - B IH0 NG\nBINGA  B IY1 NG - G AH0\nBINGAMAN  B IH1 - NG AH0 - M AH0 N\nBINGE  B IH1 N JH\nBINGEL  B IH1 NG - G AH0 L\nBINGENHEIMER  B IH1 NG - G IH0 N - HH AY0 - M ER0\nBINGER  B IH1 - NG ER0\nBINGES  B IH1 N - JH IH0 Z\nBINGHAM  B IH1 - NG AH0 M\nBINGHAMTON  B IH1 - NG AH0 M - T AH0 N\nBINGING  B IH1 NG - G IH0 NG\nBINGLE  B IH1 NG - G AH0 L\nBINGLEY  B IH1 NG - L IY0\nBINGMAN  B IH1 NG - M AH0 N\nBINGO  B IH1 NG - G OW0\nBINION  B IH1 - N Y AH0 N\nBINK  B IH1 NG K\nBINKLEY  B IH1 NG K - L IY0\nBINKOWSKI  B IH0 NG - K AO1 F S - K IY0\nBINN  B IH1 N\nBINNER  B IH1 - N ER0\nBINNEY  B IH1 - N IY0\nBINNIE  B IH1 - N IY0\nBINNING  B IH1 - N IH0 NG\nBINNS  B IH1 N Z\nBINOCULAR  B AH0 - N AA1 - K Y AH0 - L ER0\nBINOCULARS  B AH0 - N AA1 - K Y AH0 - L ER0 Z\nBINOMIAL  B AY0 - N OW1 - M IY0 - AH0 L\nBINS  B IH1 N Z\nBINSTOCK  B IH1 N - S T AA2 K\nBINTZ  B IH1 N T S\nBINZ  B IH1 N Z\nBIO  B AY2 - OW1\nBIO'S  B AY2 - OW1 Z\nBIOCHEM  B AY1 - AH0 - CH AH0 M\nBIOCHEMICAL  B AY2 - OW0 - K EH1 - M AH0 - K AH0 L\nBIOCHEMICAL(2)  B AY2 - OW0 - K EH1 - M IH0 - K AH0 L\nBIOCHEMIST  B AY2 - OW0 - K EH1 - M AH0 S T\nBIOCHEMISTRY  B AY2 - OW0 - K EH1 - M AH0 - S T R IY0\nBIOCINE  B AY1 - AH0 - S IY2 N\nBIOCONTROL  B AY2 - AH0 - K AA1 N - T R AA0 L\nBIOCRAFT  B AY1 - OW0 - K R AE2 F T\nBIODEGRADABLE  B AY2 - OW0 - D AH0 - G R EY1 - D AH0 - B AH0 L\nBIODIVERSE  B AY2 - OW0 - D AY0 - V ER1 S\nBIODIVERSITY  B AY2 - OW0 - D AY0 - V ER1 - S AH0 - T IY0\nBIOENGINEER  B AY2 - OW0 - EH2 N - JH AH0 - N IH1 R\nBIOENGINEERED  B AY2 - OW0 - EH2 N - JH AH0 - N IH1 R D\nBIOENGINEERING  B AY2 - OW0 - EH2 N - JH AH0 - N IH1 - R IH0 NG\nBIOETHICS  B AY2 - OW0 - EH1 - TH IH0 K S\nBIOFEEDBACK  B AY0 - OW0 - F IY1 D - B AE2 K\nBIOGEN  B AY1 - OW0 - JH EH2 N\nBIOGEN'S  B AY1 - OW0 - JH EH2 N Z\nBIOGRAPHER  B AY0 - AA1 - G R AH0 - F ER0\nBIOGRAPHERS  B AY0 - AA1 - G R AH0 - F ER0 Z\nBIOGRAPHICAL  B AY2 - AH0 - G R AE1 - F IH0 - K AH0 L\nBIOGRAPHIES  B AY0 - AA1 - G R AH0 - F IY0 Z\nBIOGRAPHY  B AY0 - AA1 - G R AH0 - F IY0\nBIOHAZARD  B AY2 - OW0 - HH AE1 - Z ER0 D\nBIOHAZARDS  B AY2 - OW0 - HH AE1 - Z ER0 D Z\nBIOLOGIC  B AY2 - AH0 - L AA1 - JH IH0 K\nBIOLOGICAL  B AY2 - AH0 - L AA1 - JH IH0 - K AH0 L\nBIOLOGICALLY  B AY0 - AH0 - L AA1 - JH IH0 K - L IY0\nBIOLOGICALS  B AY0 - AH0 - L AA1 - JH IH0 - K AH0 L Z\nBIOLOGICS  B AY0 - AH0 - L AA1 - JH IH0 K S\nBIOLOGIST  B AY0 - AA1 - L AH0 - JH AH0 S T\nBIOLOGISTS  B AY0 - AA1 - L AH0 - JH AH0 S T S\nBIOLOGISTS(2)  B AY0 - AA1 - L AH0 - JH AH0 S S\nBIOLOGISTS(3)  B AY0 - AA1 - L AH0 - JH AH0 S\nBIOLOGY  B AY0 - AA1 - L AH0 - JH IY0\nBIOLOGY'S  B AY0 - AA1 - L AH0 - JH IY0 Z\nBIOMASS  B AY1 - AH0 - M AE0 S\nBIOMATERIAL  B AY2 - OW0 - M AH0 - T IH1 - R IY0 - AH0 L\nBIOMATERIALS  B AY2 - OW0 - M AH0 - T IH1 - R IY0 - AH0 L Z\nBIOME  B AY1 - OW2 M\nBIOMED  B AY2 - OW0 - M EH1 D\nBIOMED'S  B AY2 - OW0 - M EH1 D Z\nBIOMEDICAL  B AY2 - OW0 - M EH1 - D IH0 - K AH0 L\nBIOMEDICALS  B AY2 - OW0 - M EH1 - D IH0 - K AH0 L Z\nBIOMES  B AY2 - OW1 M Z\nBIOMET  B AY1 - OW0 - M EH0 T\nBIONDI  B IY0 - AA1 N - D IY0\nBIONDO  B IY0 - OW1 N - D OW0\nBIONDOLILLO  B IY0 - OW0 N - D OW0 - L IH1 - L OW0\nBIONETIC  B AY2 - OW0 - N EH1 - T IH0 K\nBIONETICS  B AY2 - OW0 - N EH1 - T IH0 K S\nBIOPHARM  B AY1 - AH0 - F AA0 R M\nBIOPHARMACEUTICAL  B AY2 - OW0 - F AA2 R - M AH0 - S UW1 - T IH0 - K AH0 L\nBIOPHARMACY  B AY2 - OW0 - F AA1 R - M AH0 - S IY0\nBIOPHYSICS  B AY2 - OW0 - F IH1 - S IH0 K S\nBIOPSIES  B AY1 - AA0 P - S IY0 Z\nBIOPSY  B AY1 - AA0 P - S IY0\nBIOS  B AY1 - OW0 S\nBIOSAFETY  B AY2 - OW0 - S EY1 F - T IY0\nBIOSCIENCE  B AY2 - OW0 - S IY1 - AH0 N S\nBIOSCIENCES  B AY0 - AO1 - S IY0 - EH2 N - S IH0 Z\nBIOSENSOR  B AY2 - OW0 - S EH1 N - S ER0\nBIOSENSORS  B AY2 - OW0 - S EH1 N - S ER0 Z\nBIOSIS  B IY0 - OW1 - Z IH0 S\nBIOSIS(2)  B IY0 - OW1 - S IH2 S\nBIOSPHERE  B AY1 - OW0 - S F IH2 R\nBIOSPHERE'S  B AY1 - OW0 - S F IH2 R Z\nBIOSPHERES  B AY1 - OW0 - S F IH2 R Z\nBIOSPHERIAN  B AY2 - OW0 - S F IH1 - R IY0 - AH0 N\nBIOSPHERIANS  B AY2 - OW0 - S F IH1 - R IY0 - AH0 N Z\nBIOSYS  B AY1 - OW0 - S IH0 S\nBIOSYSTEM  B AY1 - OW0 - S IH2 - S T AH0 M\nBIOSYSTEMS  B AY1 - OW0 - S IH2 - S T AH0 M Z\nBIOTECH  B AY1 - OW0 - T EH2 K\nBIOTECHNICA  B AY2 - OW0 - T EH1 K - N IH0 - K AH0\nBIOTECHNICA'S  B AY2 - OW0 - T EH1 K - N IH0 - K AH0 Z\nBIOTECHNOLOGICAL  B AY2 - OW0 - T EH2 K - N AH0 - L AA1 - JH IH0 - K AH0 L\nBIOTECHNOLOGIES  B AY2 - OW0 - T EH2 K - N AA1 - L AH0 - JH IY0 Z\nBIOTECHNOLOGY  B AY2 - OW0 - T EH2 K - N AA1 - L AH0 - JH IY0\nBIOTECHNOLOGY'S  B AY2 - OW0 - T EH2 K - N AA1 - L AH0 - JH IY0 Z\nBIOTECHS  B AY1 - OW0 - T EH2 K S\nBIOTHERAPEUTIC  B AY2 - OW0 - TH EH2 - R AH0 - P Y UW1 - T IH0 K\nBIOTHERAPEUTICS  B AY2 - OW0 - TH EH2 - R AH0 - P Y UW1 - T IH0 K S\nBIOTIN  B AY1 - AH0 - T AH0 N\nBIOTITE  B AY1 - AH0 - T AY2 T\nBIOVEST  B AY1 - OW0 - V AH0 S T\nBIPARTISAN  B AY0 - P AA1 R - T IH0 - Z AH0 N\nBIPARTISAN(2)  B AY0 - P AA1 R - T IH0 - S AH0 N\nBIPARTISANSHIP  B AY0 - P AA1 R - T AH0 - Z AH0 N - SH IH2 P\nBIPARTISANSHIP(2)  B AY0 - P AA1 R - T AH0 - S AH0 N - SH IH2 P\nBIPHENYL  B IH1 - F AH0 - N AH0 L\nBIPHENYLS  B IH1 - F AH0 - N AH0 L Z\nBIPLANE  B AY1 - P L EY2 N\nBIPOLAR  B AY0 - P OW1 - L ER0\nBIPPUS  B IH1 - P AH0 S\nBIR  B ER1\nBIRACIAL  B AY0 - R EY1 - SH AH0 L\nBIRCH  B ER1 CH\nBIRCH'S  B ER1 - CH IH0 Z\nBIRCHALL  B ER1 - K AH0 L\nBIRCHARD  B ER1 - K ER0 D\nBIRCHER  B ER1 - CH ER0\nBIRCHETT  B ER1 - CH IH0 T\nBIRCHFIELD  B ER1 CH - F IY2 L D\nBIRCHLER  B ER1 - K AH0 - L ER0\nBIRCHLER(2)  B ER1 - K L ER0\nBIRCHMEIER  B ER1 K - M AY0 - ER0\nBIRCKHEAD  B ER1 K - HH EH0 D\nBIRD  B ER1 D\nBIRD'S  B ER1 D Z\nBIRDCAGE  B ER1 D - K EY0 JH\nBIRDEN  B ER1 - D AH0 N\nBIRDER  B ER1 - D ER0\nBIRDERS  B ER1 - D ER0 Z\nBIRDFEATHER  B ER1 D - F EH1 - DH ER0\nBIRDFEATHER'S  B ER1 D - F EH1 - DH ER0 Z\nBIRDFEEDER  B ER1 D - F IY1 - D ER0\nBIRDFEEDERS  B ER1 D - F IY1 - D ER0 Z\nBIRDFINDER  B ER1 D - F AY2 N - D ER0\nBIRDIE  B ER1 - D IY0\nBIRDIED  B ER1 - D IY0 D\nBIRDLIFE  B ER1 D - L AY2 F\nBIRDMAN  B ER1 D - M AE0 N\nBIRDS  B ER1 D Z\nBIRDS'  B ER1 D Z\nBIRDSALL  B ER1 D - Z AO2 L\nBIRDSELL  B ER1 D - S AH0 L\nBIRDSONG  B ER1 D - S AO2 NG\nBIRDWELL  B ER1 D - W EH2 L\nBIRDY  B ER1 - D IY0\nBIREME  B AY1 - R IY2 M\nBIREMES  B AY1 - R IY2 M Z\nBIRENBAUM  B AY1 - R AH0 N - B AW0 M\nBIRES  B AY1 R Z\nBIRGE  B ER1 JH\nBIRINYI  B IH0 - R IY1 - N Y IY0\nBIRK  B ER1 K\nBIRKEDAL  B ER1 - K AH0 - D AA2 L\nBIRKEL  B ER1 - K AH0 L\nBIRKELAND  B ER1 K - L AH0 N D\nBIRKENAU  B ER1 - K AH0 - N AW0\nBIRKES  B ER1 K S\nBIRKETT  B ER1 - K IH0 T\nBIRKEY  B ER1 - K IY0\nBIRKHEAD  B ER1 K - HH EH0 D\nBIRKHIMER  B ER1 K - HH IH0 - M ER0\nBIRKHOLZ  B ER1 K - HH OW0 L Z\nBIRKLAND  B ER1 K - L AH0 N D\nBIRKNER  B ER1 K - N ER0\nBIRKS  B ER1 K S\nBIRKY  B ER1 - K IY0\nBIRLE  B ER1 L\nBIRLEY  B ER1 - L IY0\nBIRMAN  B ER1 - M AH0 N\nBIRMID  B ER1 - M IH0 D\nBIRMID'S  B ER1 - M IH0 D Z\nBIRMINGHAM  B ER1 - M IH0 NG - HH AE2 M\nBIRNBAUM  B ER1 N - B AW0 M\nBIRNEY  B ER1 - N IY0\nBIRNIE  B ER1 - N IY0\nBIRO  B IH1 - R OW0\nBIRON  B AY1 - R AH0 N\nBIROS  B AY1 - R OW0 Z\nBIRR  B ER1\nBIRREN  B ER1 - AH0 N\nBIRT  B ER1 T\nBIRTCHER  B ER1 - CH ER0\nBIRTH  B ER1 TH\nBIRTHDAY  B ER1 TH - D EY2\nBIRTHDAYS  B ER1 TH - D EY2 Z\nBIRTHING  B ER1 - TH IH0 NG\nBIRTHMARK  B ER1 TH - M AA2 R K\nBIRTHMARKS  B ER1 TH - M AA2 R K S\nBIRTHPLACE  B ER1 TH - P L EY2 S\nBIRTHRATE  B ER1 TH - R EY2 T\nBIRTHRATES  B ER1 TH - R EY2 T S\nBIRTHRIGHT  B ER1 TH - R AY2 T\nBIRTHS  B ER1 TH S\nBIRTLE  B ER1 - T AH0 L\nBIRTLEY  B ER1 T - L IY0\nBIRTLEY'S  B ER1 T - L IY0 Z\nBIS  B IH1 S\nBISAILLON  B AY1 - S AH0 - L AA0 N\nBISBEE  B IH1 S - B IY0\nBISBING  B IH1 S - B IH0 NG\nBISCARDI  B IH0 S - K AA1 R - D IY0\nBISCAYNE  B IH0 - S K EY1 N\nBISCEGLIA  B IH0 S - CH EH1 G - L IY0 - AH0\nBISCH  B IH1 SH\nBISCHEL  B IH1 - SH AH0 L\nBISCHOF  B IH1 - SH AH0 F\nBISCHOFBERGER  B IH1 - SH AO0 F - B ER0 - G ER0\nBISCHOFF  B IH1 - S K HH AO0 F\nBISCOE  B IH0 - S K OW1\nBISCUIT  B IH1 - S K AH0 T\nBISCUITS  B IH1 - S K AH0 T S\nBISE  B AY1 Z\nBISEK  B IH1 - S IH0 K\nBISEL  B IH1 - S AH0 L\nBISER  B AY1 - Z ER0\nBISESI  B IH0 - S EH1 - S IY0\nBISEXUAL  B AY2 - S EH1 K - SH UW0 - AH0 L\nBISEXUALITY  B AY2 - S EH0 K - SH UW0 - AE1 - L AH0 - T IY0\nBISEXUALS  B AY2 - S EH1 K - SH UW0 - AH0 L Z\nBISH  B IH1 SH\nBISHER  B IH1 - SH ER0\nBISHOFF  B IH1 S - HH AO0 F\nBISHOP  B IH1 - SH AH0 P\nBISHOP'S  B IH1 - SH AH0 P S\nBISHOPRICS  B IH1 - SH AH0 - P R IH0 K S\nBISHOPS  B IH1 - SH AH0 P S\nBISHOPS'  B IH1 - SH AA0 P S\nBISHOPSGATE  B IH1 - SH AH0 P S - G EY2 T\nBISIANI  B IH0 - S IY0 - AA1 - N IY0\nBISIG  B IH1 - S IH0 G\nBISIGNANO  B IH0 - S IY0 G - N AA1 - N OW0\nBISKUP  B IH1 - S K AH0 P\nBISMARCK  B IH1 Z - M AA2 R K\nBISMARCK'S  B IH1 Z - M AA2 R K S\nBISMARK  B IH1 Z - M AA2 R K\nBISMUTH  B IH1 Z - M AH0 TH\nBISON  B AY1 - S AH0 N\nBISPING  B IH1 - S P IH0 NG\nBISQUE  B IH1 S K\nBISS  B IH1 S\nBISSELL  B IH1 - S AH0 L\nBISSEN  B IH1 - S AH0 N\nBISSET  B IH1 - S IH0 T\nBISSETT  B IH1 - S IH0 T\nBISSETTE  B IH0 - S EH1 T\nBISSEY  B IH1 - S IY0\nBISSINGER  B IH1 - S IH0 N - JH ER0\nBISSO  B IY1 - S OW0\nBISSON  B IH1 - S AH0 N\nBISSONETTE  B IH1 - S AH0 - N EH0 T\nBISSONNETTE  B IH1 - S AH0 - N EH2 T\nBISTLINE  B IH1 S T - L AY2 N\nBISTODEAU  B IH1 - S T AH0 - D OW0\nBISTRO  B IH1 - S T R OW0\nBISUTEKI  B IY2 - S UW0 - T EY1 - K IY0\nBISUTEKI'S  B IY2 - S UW0 - T EY1 - K IY0 Z\nBIT  B IH1 T\nBITAR  B IH1 - T ER0\nBITCH  B IH1 CH\nBITCHES  B IH1 - CH IH0 Z\nBITCHY  B IH1 - CH IY0\nBITE  B AY1 T\nBITER  B AY1 - T ER0\nBITES  B AY1 T S\nBITESIZE  B IH1 T - S AY2 Z\nBITHER  B IH1 - DH ER0\nBITING  B AY1 - T IH0 NG\nBITLER  B AY1 - T AH0 L - ER0\nBITLER(2)  B AY1 T - L ER0\nBITNER  B IH1 T - N ER0\nBITNEY  B IH1 T - N IY0\nBITS  B IH1 T S\nBITSY  B IH1 T - S IY0\nBITTEL  B IH1 - T AH0 L\nBITTEN  B IH1 - T AH0 N\nBITTENBENDER  B IH1 - T IH0 N - B EH2 N - D ER0\nBITTER  B IH1 - T ER0\nBITTEREST  B IH1 - T ER0 - AH0 S T\nBITTERLY  B IH1 - T ER0 - L IY0\nBITTERMAN  B IH1 - T ER0 - M AH0 N\nBITTERMAN'S  B IH1 - T ER0 - M AH0 N Z\nBITTERMANN  B IH1 - T ER0 - M AH0 N\nBITTERMANN'S  B IH1 - T ER0 - M AH0 N Z\nBITTERNESS  B IH1 - T ER0 - N AH0 S\nBITTERROOT  B IH1 - T ER0 - R UW2 T\nBITTERS  B IH1 - T ER0 Z\nBITTERSWEET  B IH1 - T ER0 - S W IY2 T\nBITTICK  B IH1 - T IH0 K\nBITTING  B IH1 - T IH0 NG\nBITTINGER  B IH1 - T IH0 - NG ER0\nBITTLE  B IH1 - T AH0 L\nBITTMAN  B IH1 T - M AH0 N\nBITTNER  B IH1 T - N ER0\nBITTON  B IH1 - T AH0 N\nBITTY  B IH1 - T IY0\nBITUMEN  B IH2 - T UW1 - M AH0 N\nBITUMEN(2)  B AY2 - T UW1 - M AH0 N\nBITUMINOUS  B IH0 - T UW1 - M AH0 - N AH0 S\nBITZ  B IH1 T S\nBITZER  B IH1 T - Z ER0\nBIVALVE  B AY1 - V AE2 L V\nBIVALVES  B AY1 - V AE2 L V Z\nBIVEN  B AY1 - V AH0 N\nBIVENS  B AY1 - V AH0 N Z\nBIVIANO  B IY2 - V IY0 - AA1 - N OW0\nBIVIN  B IH1 - V IH0 N\nBIVINS  B IH1 - V IH0 N Z\nBIVONA  B IH0 - V OW1 - N AH0\nBIVOUAC  B IH1 V - W AE0 K\nBIWEEKLY  B AY0 - W IY1 K - L IY0\nBIX  B IH1 K S\nBIXBY  B IH1 K S - B IY0\nBIXEL  B IH1 K - S AH0 L\nBIXLER  B IH1 K S - L ER0\nBIZ  B IH1 Z\nBIZANGO  B IH0 - Z AE1 NG - G OW0\nBIZARRE  B AH0 - Z AA1 R\nBIZARRE(2)  B IH0 - Z AA1 R\nBIZMART  B IH1 Z - M AA2 R T\nBIZUB  B IH1 - Z AH0 B\nBIZZELL  B IH1 - Z AH0 L\nBIZZY  B IH1 - Z IY0\nBJELASNICA  B Y EH0 - L AE1 S - N IH0 - K AH0\nBJELLAND  B Y EH1 - L AH0 N D\nBJERKE  B Y ER1 K\nBJOERN  B Y AO1 R N\nBJORGE  B Y AO1 R G\nBJORK  B Y AO1 R K\nBJORKLUND  B Y AO1 R K - L AH0 N D\nBJORKMAN  B Y AO1 R K - M AH0 N\nBJORN  B Y AO1 R N\nBJORNSTAD  B Y AO1 R N - S T AH0 D\nBLACHLY  B L AA1 CH - L IY0\nBLACHLY(2)  B L AA1 K - L IY0\nBLACK  B L AE1 K\nBLACK'S  B L AE1 K S\nBLACKARD  B L AE1 - K ER0 D\nBLACKBALL  B L AE1 K - B AO2 L\nBLACKBERRIES  B L AE1 K - B EH2 - R IY0 Z\nBLACKBERRY  B L AE1 K - B EH2 - R IY0\nBLACKBIRD  B L AE1 K - B ER0 D\nBLACKBIRDS  B L AE1 K - B ER0 D Z\nBLACKBOARD  B L AE1 K - B AO2 R D\nBLACKBOARDS  B L AE1 K - B AO2 R D Z\nBLACKBURN  B L AE1 K - B ER0 N\nBLACKED  B L AE1 K T\nBLACKEN  B L AE1 - K AH0 N\nBLACKENED  B L AE1 - K AH0 N D\nBLACKENING  B L AE1 - K AH0 - N IH0 NG\nBLACKENING(2)  B L AE1 K - N IH0 NG\nBLACKENS  B L AE1 - K AH0 N Z\nBLACKER  B L AE1 - K ER0\nBLACKERBY  B L AE1 - K ER0 - B IY0\nBLACKEST  B L AE1 - K AH0 S T\nBLACKETER  B L AE1 K - IY0 - T ER0\nBLACKETT  B L AE1 - K IH0 T\nBLACKFOOT  B L AE1 K - F UH2 T\nBLACKFORD  B L AE1 K - F ER0 D\nBLACKHAM  B L AE1 K - HH AH0 M\nBLACKHAWK  B L AE1 K - HH AO2 K\nBLACKHAWK'S  B L AE1 K - HH AO2 K S\nBLACKHAWKS  B L AE1 K - HH AO2 K S\nBLACKHEATH  B L AE1 K - HH IY2 TH\nBLACKHURST  B L AE1 K - HH ER0 S T\nBLACKJACK  B L AE1 K - JH AE2 K\nBLACKLEDGE  B L AE1 K - L EH2 JH\nBLACKLEY  B L AE1 K - L IY0\nBLACKLIST  B L AE1 K - L IH2 S T\nBLACKLISTED  B L AE1 K - L IH2 - S T IH0 D\nBLACKLISTING  B L AE1 K - L IH2 - S T IH0 NG\nBLACKLOCK  B L AE1 K - L AA2 K\nBLACKMAIL  B L AE1 K - M EY2 L\nBLACKMAILED  B L AE1 K - M EY2 L D\nBLACKMAILING  B L AE1 K - M EY2 - L IH0 NG\nBLACKMAN  B L AE1 K - M AH0 N\nBLACKMER  B L AE1 K - M ER0\nBLACKMON  B L AE1 K - M AH0 N\nBLACKMORE  B L AE1 K - M AO0 R\nBLACKMUN  B L AE1 K - M AH0 N\nBLACKMUN'S  B L AE1 K - M AH0 N Z\nBLACKNESS  B L AE1 K - N AH0 S\nBLACKOUT  B L AE1 K - AW2 T\nBLACKOUTS  B L AE1 K - AW2 T S\nBLACKPOOL  B L AE1 K - P UW2 L\nBLACKROCK  B L AE1 K - R AA2 K\nBLACKS  B L AE1 K S\nBLACKS'  B L AE1 K S\nBLACKSBURG  B L AE1 K S - B ER0 G\nBLACKSHEAR  B L AE1 K - SH IH0 R\nBLACKSHER  B L AE1 K - SH ER0\nBLACKSHIRE  B L AE1 K - SH AY2 R\nBLACKSMITH  B L AE1 K - S M IH2 TH\nBLACKSON  B L AE1 K - S AH0 N\nBLACKSTOCK  B L AE1 K - S T AA2 K\nBLACKSTON  B L AE1 K - S T AH0 N\nBLACKSTONE  B L AE1 K - S T OW2 N\nBLACKSTONE'S  B L AE1 K - S T OW2 N Z\nBLACKTOP  B L AE1 K - T AA2 P\nBLACKWELDER  B L AE1 K - W EH2 L - D ER0\nBLACKWELL  B L AE1 K - W EH2 L\nBLACKWOOD  B L AE1 K - W UH2 D\nBLADDER  B L AE1 - D ER0\nBLADDERS  B L AE1 - D ER0 Z\nBLADE  B L EY1 D\nBLADED  B L EY1 - D IH0 D\nBLADEN  B L EY1 - D AH0 N\nBLADES  B L EY1 D Z\nBLADING  B L EY1 - D IH0 NG\nBLADOW  B L AE1 - D OW0\nBLAESE  B L EY1 Z\nBLAESING  B L EH1 - S IH0 NG\nBLAGDEN  B L AE1 G - D AH0 N\nBLAGG  B L AE1 G\nBLAH  B L AA1\nBLAHA  B L AA1 - HH AH0\nBLAHNIK  B L AA1 - N IH0 K\nBLAHUT  B L AE1 - HH AH0 T\nBLAICH  B L EY1 CH\nBLAIKIE  B L EY1 - K IY0\nBLAIN  B L EY1 N\nBLAINE  B L EY1 N\nBLAIR  B L EH1 R\nBLAIR'S  B L EH1 R Z\nBLAIS  B L EH1 Z\nBLAISDELL  B L EY1 S - D AH0 L\nBLAISE  B L EY1 Z\nBLAISER  B L EY1 - Z ER0\nBLAIZE  B L EY1 Z\nBLAKE  B L EY1 K\nBLAKE'S  B L EY1 K S\nBLAKELEY  B L EY1 K - L IY0\nBLAKELEY'S  B L EY1 - K L IY0 Z\nBLAKELY  B L EY1 K - L IY0\nBLAKELY'S  B L EY1 - K L IY0 Z\nBLAKEMAN  B L EY1 K - M AH0 N\nBLAKEMORE  B L EY1 K - M AO0 R\nBLAKENEY  B L EY1 K - N IY0\nBLAKENEY'S  B L EY1 K - N IY0 Z\nBLAKENHAM  B L EY1 - K AH0 N - HH AE2 M\nBLAKENSHIP  B L EY1 - K AH0 N - SH IH0 P\nBLAKER  B L EY1 - K ER0\nBLAKES  B L EY1 K S\nBLAKESLEE  B L EY1 K S - L IY0\nBLAKESLEY  B L EY1 K S - L IY0\nBLAKEY  B L EY1 - K IY0\nBLAKLEY  B L AE1 K - L IY0\nBLAKNEY  B L AE1 K - N IY0\nBLALACK  B L AE1 - L AH0 K\nBLALOCK  B L AE1 - L AA0 K\nBLAME  B L EY1 M\nBLAMED  B L EY1 M D\nBLAMELESS  B L EY1 M - L AH0 S\nBLAMES  B L EY1 M Z\nBLAMING  B L EY1 - M IH0 NG\nBLAMPIED  B L AE1 M - P IY0 D\nBLAN  B L AE1 N\nBLANC  B L AE1 NG K\nBLANCA  B L AA1 NG - K AH0\nBLANCETT  B L AE1 N - S IH0 T\nBLANCH  B L AE1 N CH\nBLANCHARD  B L AE1 N - CH ER0 D\nBLANCHARD'S  B L AE1 N - CH ER0 D Z\nBLANCHARDS  B L AE1 N - CH ER0 D Z\nBLANCHE  B L AE1 N CH\nBLANCHET  B L AE1 N - K IH0 T\nBLANCHETT  B L AE1 N - CH IH0 T\nBLANCHETTE  B L AH0 N - SH EH1 T\nBLANCHFIELD  B L AE1 N CH - F IY2 L D\nBLANCK  B L AE1 NG K\nBLANCO  B L AE1 NG - K OW0\nBLAND  B L AE1 N D\nBLANDA  B L AE1 N - D AH0\nBLANDER  B L AE1 N - D ER0\nBLANDFORD  B L AE1 N D - F AO0 R D\nBLANDIN  B L AE1 N - D IH0 N\nBLANDING  B L AE1 N - D IH0 NG\nBLANDINO  B L AA0 N - D IY1 - N OW0\nBLANDISHMENT  B L AE1 N - D IH0 SH - M AH0 N T\nBLANDISHMENTS  B L AE1 N - D IH0 SH - M AH0 N T S\nBLANDLY  B L AE1 N D - L IY0\nBLANDNESS  B L AE1 N D - N AH0 S\nBLANDO  B L AE1 N - D OW0\nBLANDON  B L AE1 N - D IH0 N\nBLANE  B L EY1 N\nBLANEY  B L EY1 - N IY0\nBLANFORD  B L AE1 N - F ER0 D\nBLANK  B L AE1 NG K\nBLANKE  B L AE1 NG K\nBLANKED  B L AE1 NG K T\nBLANKEN  B L AE1 NG - K AH0 N\nBLANKENBAKER  B L AE1 NG - K AH0 N - B EY2 - K ER0\nBLANKENBECKLER  B L AE1 NG - K AH0 N - B EH2 - K L ER0\nBLANKENBURG  B L AE1 NG - K AH0 N - B ER0 G\nBLANKENHORN  B L AE1 NG - K IH0 N - HH ER0 N\nBLANKENSHIP  B L AE1 NG - K AH0 N - SH IH2 P\nBLANKET  B L AE1 NG - K AH0 T\nBLANKET(2)  B L AE1 NG - K IH0 T\nBLANKETED  B L AE1 NG - K AH0 - T IH0 D\nBLANKETING  B L AE1 NG - K AH0 - T IH0 NG\nBLANKETS  B L AE1 NG - K AH0 T S\nBLANKING  B L AE1 NG - K IH0 NG\nBLANKINSHIP  B L AE1 NG - K IH0 N - SH IH0 P\nBLANKLEY  B L AE1 NG - K L IY0\nBLANKLY  B L AE1 NG - K L IY0\nBLANKLY'S  B L AE1 NG - K L IY0 Z\nBLANKS  B L AE1 NG K S\nBLANN  B L AE1 N\nBLANQUITA  B L AA0 N - K IY1 - T AH0\nBLANSETT  B L AE1 N - S IH0 T\nBLANTON  B L AE1 N - T AH0 N\nBLARE  B L EH1 R\nBLARED  B L EH1 R D\nBLARES  B L EH1 R Z\nBLARING  B L EH1 - R IH0 NG\nBLAS  B L AA1 S\nBLASCHKE  B L AE1 SH K\nBLASCO  B L AA1 - S K OW0\nBLASDEL  B L AE1 S - D AH0 L\nBLASDELL  B L AE1 S - D AH0 L\nBLASE  B L EY1 Z\nBLASER  B L EY1 - Z ER0\nBLASI  B L EY1 - Z IY0\nBLASIA  B L AA1 - S IY0 - AH0\nBLASIER  B L EY1 - Z IY0 - ER0\nBLASIER'S  B L EY1 - Z IY0 - ER0 Z\nBLASIER'S(2)  B L EY1 - ZH ER0 Z\nBLASIER(2)  B L EY1 - ZH ER0\nBLASING  B L EY1 - Z IH0 NG\nBLASINGAME  B L AA0 - S IH0 NG - G AA1 - M IY0\nBLASINI  B L AH0 - S IY1 - N IY0\nBLASIUS  B L EY1 - S IY0 - IH0 S\nBLASKE  B L EY1 S K\nBLASKO  B L AA1 - S K OW0\nBLASPHEMOUS  B L AE1 S - F AH0 - M AH0 S\nBLASPHEMY  B L AE1 S - F AH0 - M IY0\nBLASS  B L AE1 S\nBLASSINGAME  B L AA0 - S IH0 NG - G AA1 - M IY0\nBLAST  B L AE1 S T\nBLASTDOWN  B L AE1 S T - D AW2 N\nBLASTED  B L AE1 - S T AH0 D\nBLASTED(2)  B L AE1 - S T IH0 D\nBLASTER  B L AE1 - S T ER0\nBLASTING  B L AE1 - S T IH0 NG\nBLASTOFF  B L AE1 S T - AO2 F\nBLASTS  B L AE1 S T S\nBLASZAK  B L AA1 - SH AH0 K\nBLASZCZYK  B L AA1 SH - CH IH0 K\nBLATANT  B L EY1 - T AH0 N T\nBLATANTLY  B L EY1 - T AH0 N T - L IY0\nBLATCHFORD  B L AE1 CH - F ER0 D\nBLATCHLEY  B L AE1 CH - L IY0\nBLATHER  B L AE1 - DH ER0\nBLATNIK  B L AE1 T - N IH0 K\nBLATT  B L AE1 T\nBLATTER  B L AE1 - T ER0\nBLATTNER  B L AE1 T - N ER0\nBLATZ  B L AE1 T S\nBLAU  B L AW1\nBLAUCH  B L AO1 CH\nBLAUER  B L AW1 R\nBLAUM  B L AO1 M\nBLAUSER  B L AW1 - S ER0\nBLAUSTEIN  B L AW1 - S T AY0 N\nBLAUSTEIN(2)  B L AW1 - S T IY0 N\nBLAUVELT  B L AW1 - V IH0 L T\nBLAY  B L EY1\nBLAYDES  B L EY1 D Z\nBLAYDON  B L EY1 - D AH0 N\nBLAYLOCK  B L EY1 - L AH0 K\nBLAYNE  B L EY1 N\nBLAYNEY  B L EY1 - N IY0\nBLAYZE  B L EY1 Z\nBLAZE  B L EY1 Z\nBLAZED  B L EY1 Z D\nBLAZEJEWSKI  B L AH0 - Z EY0 - EH1 F S - K IY0\nBLAZEK  B L AA1 - Z EH0 K\nBLAZER  B L EY1 - Z ER0\nBLAZERS  B L EY1 - Z ER0 Z\nBLAZES  B L EY1 - Z IH0 Z\nBLAZIER  B L EY1 - Z IY0 - ER0\nBLAZINA  B L AA0 - Z IY1 - N AH0\nBLAZING  B L EY1 - Z IH0 NG\nBLEA  B L IY1\nBLEACH  B L IY1 CH\nBLEACHED  B L IY1 CH T\nBLEACHER  B L IY1 - CH ER0\nBLEACHERS  B L IY1 - CH ER0 Z\nBLEACHING  B L IY1 - CH IH0 NG\nBLEAK  B L IY1 K\nBLEAKER  B L IY1 - K ER0\nBLEAKEST  B L IY1 - K AH0 S T\nBLEAKLEY  B L IY1 K - L IY0\nBLEAKNESS  B L IY1 K - N AH0 S\nBLEAKNEY  B L IY1 K - N IY0\nBLEAM  B L IY1 M\nBLEARY  B L IH1 - R IY0\nBLEAU  B L OW1\nBLECH  B L EH1 K\nBLECH'S  B L EH1 K S\nBLECHA  B L EH1 - CH AH0\nBLECHER  B L EH1 - K ER0\nBLECHLEY  B L EH1 K - L IY0\nBLECHMAN  B L EH1 K - M AH0 N\nBLECK  B L EH1 K\nBLECKER  B L EH1 - K ER0\nBLED  B L EH1 D\nBLEDSOE  B L EH1 D - S OW0\nBLEECKER  B L IY1 - K ER0\nBLEED  B L IY1 D\nBLEEDING  B L IY1 - D IH0 NG\nBLEEDS  B L IY1 D Z\nBLEEKER  B L IY1 - K ER0\nBLEEP  B L IY1 P\nBLEEPING  B L IY1 - P IH0 NG\nBLEGEN  B L EH1 - G AH0 N\nBLEHM  B L EH1 M\nBLEICH  B L AY1 K\nBLEICHER  B L AY1 - K ER0\nBLEIER  B L AY1 - ER0\nBLEIL  B L IY1 L\nBLEILER  B L AY1 - L ER0\nBLELLOCH  B L EH1 - L AA0 K\nBLEMISH  B L EH1 - M IH0 SH\nBLEMISHED  B L EH1 - M IH0 SH T\nBLEMISHES  B L EH1 - M IH0 - SH IH0 Z\nBLEND  B L EH1 N D\nBLENDA  B L EH1 N - D AH0\nBLENDAX  B L EH1 N - D AE2 K S\nBLENDED  B L EH1 N - D AH0 D\nBLENDED(2)  B L EH1 N - D IH0 D\nBLENDER  B L EH1 N - D ER0\nBLENDERS  B L EH1 N - D ER0 Z\nBLENDING  B L EH1 N - D IH0 NG\nBLENDS  B L EH1 N D Z\nBLENHEIM  B L EH1 N - HH AY2 M\nBLEPHARISMA  B L EH2 - F ER0 - IH1 Z - M AH0\nBLESER  B L IY1 - Z ER0\nBLESS  B L EH1 S\nBLESSED  B L EH1 S T\nBLESSES  B L EH1 - S IH0 Z\nBLESSING  B L EH1 - S IH0 NG\nBLESSINGER  B L EH1 - S IH0 - NG ER0\nBLESSINGS  B L EH1 - S IH0 NG Z\nBLESSINGTON  B L EH1 - S IH0 NG - T AH0 N\nBLEST  B L EH1 S T\nBLETHEN  B L EH1 - TH AH0 N\nBLEU  B L UW1\nBLEVENS  B L IY1 - V AH0 N Z\nBLEVINS  B L EH1 - V IH0 N Z\nBLEW  B L UW1\nBLEWETT  B L UW1 - IH0 T\nBLEWITT  B L UW1 - IH0 T\nBLEY  B L EY1\nBLICK  B L IH1 K\nBLICKENSTAFF  B L IH1 - K IH0 N - S T AH0 F\nBLIGH  B L AY1\nBLIGHT  B L AY1 T\nBLIGHTED  B L AY1 - T IH0 D\nBLILEY  B L AY1 - L IY0\nBLIMP  B L IH1 M P\nBLIMPS  B L IH1 M P S\nBLINCOE  B L IH0 N - K OW1\nBLIND  B L AY1 N D\nBLINDED  B L AY1 N - D IH0 D\nBLINDER  B L AY1 N - D ER0\nBLINDER'S  B L AY1 N - D ER0 Z\nBLINDERS  B L AY1 N - D ER0 Z\nBLINDFOLD  B L AY1 N D - F OW2 L D\nBLINDFOLDED  B L AY1 N D - F OW2 L - D IH0 D\nBLINDING  B L AY1 N - D IH0 NG\nBLINDLY  B L AY1 N D - L IY0\nBLINDNESS  B L AY1 N D - N AH0 S\nBLINDNESS(2)  B L AY1 N - N AH0 S\nBLINDS  B L AY1 N D Z\nBLINDSIDE  B L AY1 N D - S AY2 D\nBLINDSIDED  B L AY1 N D - S AY2 - D IH0 D\nBLINK  B L IH1 NG K\nBLINKED  B L IH1 NG K T\nBLINKING  B L IH1 NG - K IH0 NG\nBLINKS  B L IH1 NG K S\nBLINN  B L IH1 N\nBLIP  B L IH1 P\nBLIPS  B L IH1 P S\nBLISCOLL  B L IH1 - S K AO0 L\nBLISH  B L IH1 SH\nBLISS  B L IH1 S\nBLISSETT  B L IH1 - S IH0 T\nBLISSFUL  B L IH1 S - F AH0 L\nBLISSFULLY  B L IH1 S - F AH0 - L IY0\nBLISTER  B L IH1 - S T ER0\nBLISTERED  B L IH1 - S T ER0 D\nBLISTERING  B L IH1 - S T ER0 - IH0 NG\nBLISTERS  B L IH1 - S T ER0 Z\nBLITCH  B L IH1 CH\nBLITHE  B L AY1 DH\nBLITHELY  B L AY1 TH - L IY0\nBLITSTEIN  B L IH1 T - S T IY0 N\nBLITSTEIN(2)  B L IH1 T - S T AY0 N\nBLITZ  B L IH1 T S\nBLITZED  B L IH1 T S T\nBLITZER  B L IH1 T - Z ER0\nBLITZER'S  B L IH1 T - Z ER0 Z\nBLITZES  B L IH1 T - S IH0 Z\nBLITZKRIEG  B L IH1 T - S K R IY2 G\nBLIVEN  B L AY1 - V AH0 N\nBLIXT  B L IH1 K S T\nBLIZARD  B L IH1 - Z ER0 D\nBLIZZARD  B L IH1 - Z ER0 D\nBLIZZARDS  B L IH1 - Z ER0 D Z\nBLOAT  B L OW1 T\nBLOATED  B L OW1 - T IH0 D\nBLOATING  B L OW1 - T IH0 NG\nBLOB  B L AA1 B\nBLOBBY  B L AA1 - B IY0\nBLOBS  B L AA1 B Z\nBLOC  B L AA1 K\nBLOC'S  B L AA1 K S\nBLOCH  B L AA1 K\nBLOCH'S  B L AA1 K S\nBLOCHER  B L AA1 - K ER0\nBLOCK  B L AA1 K\nBLOCK'S  B L AA1 K S\nBLOCKADE  B L AA2 - K EY1 D\nBLOCKADED  B L AA2 - K EY1 - D IH0 D\nBLOCKADES  B L AA2 - K EY1 D Z\nBLOCKADING  B L AA2 - K EY1 - D IH0 NG\nBLOCKAGE  B L AA1 - K IH0 JH\nBLOCKAGES  B L AA1 - K IH0 - JH IH0 Z\nBLOCKBUSTER  B L AA1 K - B AH2 - S T ER0\nBLOCKBUSTER'S  B L AA1 K - B AH2 - S T ER0 Z\nBLOCKBUSTERS  B L AA1 K - B AH2 - S T ER0 Z\nBLOCKED  B L AA1 K T\nBLOCKER  B L AA1 - K ER0\nBLOCKERS  B L AA1 - K ER0 Z\nBLOCKING  B L AA1 - K IH0 NG\nBLOCKS  B L AA1 K S\nBLOCS  B L AA1 K S\nBLODGETT  B L AA1 - JH IH0 T\nBLOEDEL  B L OW1 - D AH0 L\nBLOEDORN  B L OW1 - D ER0 N\nBLOEM  B L OW1 M\nBLOEMER  B L OW1 - M ER0\nBLOEMKER  B L OW1 M - K ER0\nBLOHM  B L OW1 M\nBLOK  B L AA1 K\nBLOKE  B L OW1 K\nBLOKES  B L OW1 K S\nBLOM  B L AA1 M\nBLOMBERG  B L AA1 M - B ER0 G\nBLOME  B L OW1 M\nBLOMGREN  B L AA1 M - G R EH0 N\nBLOMQUIST  B L AA1 M - K W IH2 S T\nBLOMSTROM  B L AA1 M - S T R AH0 M\nBLOND  B L AA1 N D\nBLONDE  B L AA1 N D\nBLONDE'S  B L AA1 N D Z\nBLONDELL  B L AA1 N - D AH0 L\nBLONDER  B L AA1 N - D ER0\nBLONDES  B L AA1 N D Z\nBLONDIE  B L AA1 N - D IY0\nBLONDIN  B L AA1 N - D IH0 N\nBLONDS  B L AA1 N D Z\nBLOOD  B L AH1 D\nBLOOD'S  B L AH1 D Z\nBLOODBATH  B L AH1 D - B AE2 TH\nBLOODED  B L AH1 - D IH0 D\nBLOODGOOD  B L AH1 D - G UH2 D\nBLOODHOUND  B L AH1 D - HH AW0 N D\nBLOODHOUNDS  B L AH1 D - HH AW0 N D Z\nBLOODHOUNDS(2)  B L AH1 D - HH AW0 N Z\nBLOODIED  B L AH1 - D IY0 D\nBLOODIER  B L AH1 - D IY0 - ER0\nBLOODIEST  B L AH1 - D IY0 - AH0 S T\nBLOODLESS  B L AH1 D - L AH0 S\nBLOODLETTING  B L AH1 D - L EH2 - T IH0 NG\nBLOODLINE  B L AH1 D - L AY2 N\nBLOODLINES  B L AH1 D - L AY2 N Z\nBLOODS  B L AH1 D Z\nBLOODSHED  B L AH1 D - SH EH2 D\nBLOODSTAIN  B L AH1 D - S T EY2 N\nBLOODSTAINED  B L AH1 D - S T EY2 N D\nBLOODSTAINS  B L AH1 D - S T EY2 N Z\nBLOODSTONE  B L AH1 D - S T OW2 N\nBLOODSTREAM  B L AH1 D - S T R IY2 M\nBLOODSUCKER  B L AH1 D - S AH2 - K ER0\nBLOODSUCKERS  B L AH1 D - S AH2 - K ER0 Z\nBLOODSUCKING  B L AH1 D - S AH2 - K IH0 NG\nBLOODSWORTH  B L AH1 D Z - W ER2 TH\nBLOODTHIRSTY  B L AH1 D - TH ER2 - S T IY0\nBLOODWORTH  B L AH1 D - W ER2 TH\nBLOODY  B L AH1 - D IY0\nBLOOM  B L UW1 M\nBLOOM'S  B L UW1 M Z\nBLOOMBERG  B L UW1 M - B ER0 G\nBLOOMBERG'S  B L UW1 M - B ER0 G Z\nBLOOMED  B L UW1 M D\nBLOOMER  B L UW1 - M ER0\nBLOOMERS  B L UW1 - M ER0 Z\nBLOOMFIELD  B L UW1 M - F IY2 L D\nBLOOMING  B L UW1 - M IH0 NG\nBLOOMINGDALE  B L UW1 - M IH0 NG - D EY2 L\nBLOOMINGDALE'S  B L UW1 - M IH0 NG - D EY2 L Z\nBLOOMINGDALES  B L UW1 - M IH0 NG - D EY2 L Z\nBLOOMINGTON  B L UW1 - M IH0 NG - T AH0 N\nBLOOMQUIST  B L UW1 M - K W IH2 S T\nBLOOMS  B L UW1 M Z\nBLOOPER  B L UW1 - P ER0\nBLOOPERS  B L UW1 - P ER0 Z\nBLOOR  B L UH1 R\nBLOSE  B L OW1 Z\nBLOSS  B L AO1 S\nBLOSSER  B L AO1 - S ER0\nBLOSSOM  B L AA1 - S AH0 M\nBLOSSOMED  B L AA1 - S AH0 M D\nBLOSSOMING  B L AA1 - S AH0 - M IH0 NG\nBLOSSOMS  B L AA1 - S AH0 M Z\nBLOT  B L AA1 T\nBLOTNICK  B L AA1 T - N IH0 K\nBLOTS  B L AA1 T S\nBLOTTER  B L AA1 - T ER0\nBLOUCH  B L AW1 CH\nBLOUGH  B L AW1\nBLOUIN  B L W IY1 N\nBLOUNT  B L AW1 N T\nBLOUSE  B L AW1 S\nBLOUSES  B L AW1 - S AH0 Z\nBLOUSES(2)  B L AW1 - S IH0 Z\nBLOW  B L OW1\nBLOWE  B L OW1\nBLOWED  B L OW1 D\nBLOWER  B L OW1 - ER0\nBLOWERS  B L OW1 - ER0 Z\nBLOWFISH  B L OW1 - F IH0 SH\nBLOWING  B L OW1 - IH0 NG\nBLOWN  B L OW1 N\nBLOWOUT  B L OW1 - AW2 T\nBLOWOUTS  B L OW1 - AW2 T S\nBLOWS  B L OW1 Z\nBLOWTORCH  B L OW1 - T AO2 R CH\nBLOWUP  B L OW1 - AH2 P\nBLOWY  B L OW1 - IY0\nBLOXHAM  B L AA1 K - S AH0 M\nBLOXOM  B L AA1 K - S AH0 M\nBLOXSOM  B L AA1 K - S AH0 M\nBLOYD  B L OY1 D\nBLOYER  B L OY1 - ER0\nBLUBAUGH  B L AH1 - B AO0\nBLUBBER  B L AH1 - B ER0\nBLUDGEON  B L AH1 - JH AH0 N\nBLUDGEONED  B L AH1 - JH AH0 N D\nBLUDGEONING  B L AH1 - JH AH0 - N IH0 NG\nBLUE  B L UW1\nBLUE'S  B L UW1 Z\nBLUEBERRIES  B L UW1 - B EH2 - R IY0 Z\nBLUEBERRY  B L UW1 - B EH2 - R IY0\nBLUEBIRD  B L UW1 - B ER2 D\nBLUEBONNET  B L UW1 - B AA2 - N AH0 T\nBLUEBONNETS  B L UW1 - B AA2 - N AH0 T S\nBLUECHIP  B L UW1 - CH IH2 P\nBLUEFIELD  B L UW1 - F IY2 L D\nBLUEGRASS  B L UW1 - G R AE2 S\nBLUEJAY  B L UW1 - JH EY2\nBLUEMEL  B L UH1 - M AH0 L\nBLUEPRINT  B L UW1 - P R IH2 N T\nBLUEPRINTS  B L UW1 - P R IH2 N T S\nBLUER  B L UW1 - ER0\nBLUES  B L UW1 Z\nBLUES'  B L UW1 Z\nBLUEST  B L UW1 - AH0 S T\nBLUESTEIN  B L UH1 - S T AY0 N\nBLUESTEIN(2)  B L UH1 - S T IY0 N\nBLUESTINE  B L UW1 - S T AY2 N\nBLUESTONE  B L UW1 - S T OW2 N\nBLUETT  B L UW1 T\nBLUEY  B L UW1 - IY0\nBLUFF  B L AH1 F\nBLUFFED  B L AH1 F T\nBLUFFING  B L AH1 - F IH0 NG\nBLUFFS  B L AH1 F S\nBLUFORD  B L UW1 - F ER0 D\nBLUHDORN  B L AH1 - D AO2 R N\nBLUHM  B L AH1 M\nBLUING  B L UW1 - IH0 NG\nBLUISH  B L UW1 - IH0 SH\nBLUITT  B L UW1 T\nBLUM  B L UW1 M\nBLUMBERG  B L AH1 M - B ER0 G\nBLUME  B L UW1 M\nBLUMENBERG  B L UW1 - M EH0 N - B ER0 G\nBLUMENFELD  B L UW1 - M IH0 N - F EH0 L D\nBLUMENSCHEIN  B L AH1 - M IH0 N - SH AY0 N\nBLUMENSHINE  B L AH1 - M IH0 N - SH AY0 N\nBLUMENSTEIN  B L UW1 - M EH0 N - S T AY0 N\nBLUMENSTEIN(2)  B L UW1 - M EH0 N - S T IY0 N\nBLUMENSTOCK  B L UW1 - M EH0 N - S T AA0 K\nBLUMENTHAL  B L UW1 - M AH0 N - TH AO2 L\nBLUMER  B L UW1 - M ER0\nBLUMSTEIN  B L AH1 M - S T AY0 N\nBLUMSTEIN(2)  B L AH1 M - S T IY0 N\nBLUNCK  B L AH1 NG K\nBLUNDALL  B L AH1 N - D AH0 L\nBLUNDELL  B L AH1 N - D AH0 L\nBLUNDER  B L AH1 N - D ER0\nBLUNDERED  B L AH1 N - D ER0 D\nBLUNDERING  B L AH1 N - D ER0 - IH0 NG\nBLUNDERS  B L AH1 N - D ER0 Z\nBLUNK  B L AH1 NG K\nBLUNT  B L AH1 N T\nBLUNTED  B L AH1 N - T AH0 D\nBLUNTED(2)  B L AH1 N - T IH0 D\nBLUNTER  B L AH1 N - T ER0\nBLUNTEST  B L AH1 N - T AH0 S T\nBLUNTING  B L AH1 N - T IH0 NG\nBLUNTLY  B L AH1 N T - L IY0\nBLUNTNESS  B L AH1 N T - N AH0 S\nBLUNTS  B L AH1 N T S\nBLUR  B L ER1\nBLURB  B L ER1 B\nBLURBS  B L ER1 B Z\nBLURRED  B L ER1 D\nBLURRING  B L ER1 - IH0 NG\nBLURRY  B L ER1 - IY0\nBLURS  B L ER1 Z\nBLURT  B L ER1 T\nBLURTED  B L ER1 - T IH0 D\nBLURTON  B L ER1 - T AH0 N\nBLURTS  B L ER1 T S\nBLUSH  B L AH1 SH\nBLUSHED  B L AH1 SH T\nBLUSHES  B L AH1 - SH AH0 Z\nBLUSHES(2)  B L AH1 - SH IH0 Z\nBLUSHING  B L AH1 - SH IH0 NG\nBLUST  B L AH1 S T\nBLUSTER  B L AH1 - S T ER0\nBLUSTERING  B L AH1 - S T ER0 - IH0 NG\nBLUSTERY  B L AH1 - S T ER0 - IY0\nBLUTH  B L UW1 TH\nBLVD  B UH1 - L AH0 - V AA2 R D\nBLY  B L AY1\nBLYE  B L AY1\nBLYLER  B L AY1 - L ER0\nBLYSTONE  B L AY1 - S T OW2 N\nBLYTH  B L IH1 TH\nBLYTHE  B L AY1 DH\nBO  B OW1\nBO-SHEK  B OW1 - SH EH1 K\nBOA  B OW1 - AH0\nBOAK  B OW1 K\nBOAKE  B OW1 K\nBOAL  B OW1 L\nBOALS  B OW1 L Z\nBOAN  B OW1 N\nBOAR  B AO1 R\nBOARD  B AO1 R D\nBOARD'S  B AO1 R D Z\nBOARDA  B AO1 R - D AH0\nBOARDBENT  B AO1 R D - B EH2 N T\nBOARDED  B AO1 R - D AH0 D\nBOARDED(2)  B AO1 R - D IH0 D\nBOARDER  B AO1 R - D ER0\nBOARDERS  B AO1 R - D ER0 Z\nBOARDING  B AO1 R - D IH0 NG\nBOARDINGHOUSE  B AO1 R - D IH0 NG - HH AW2 S\nBOARDINGHOUSES  B AO1 R - D IH0 NG - HH AW2 - S IH0 Z\nBOARDINGS  B AO1 R - D IH0 NG Z\nBOARDMAN  B AO1 R D - M AH0 N\nBOARDROOM  B AO1 R D - R UW2 M\nBOARDROOMS  B AO1 R D - R UW2 M Z\nBOARDS  B AO1 R D Z\nBOARDWALK  B AO1 R D - W AO2 K\nBOARMAN  B AO1 R - M AH0 N\nBOART  B AO1 R T\nBOAS  B OW1 - AH0 Z\nBOASE  B OW1 Z\nBOAST  B OW1 S T\nBOASTED  B OW1 - S T AH0 D\nBOASTED(2)  B OW1 - S T IH0 D\nBOASTFUL  B OW1 S T - F AH0 L\nBOASTING  B OW1 - S T IH0 NG\nBOASTS  B OW1 S T S\nBOASTS(2)  B OW1 S S\nBOASTS(3)  B OW1 S\nBOAT  B OW1 T\nBOAT'S  B OW1 T S\nBOATED  B OW1 - T IH0 D\nBOATERS  B OW1 - T ER0 Z\nBOATHOUSE  B OW1 T - HH AW1 S\nBOATING  B OW1 - T IH0 NG\nBOATLIFT  B OW1 T - L IH2 F T\nBOATLIFT'S  B OW1 T - L IH2 F T S\nBOATLIFTS  B OW1 T - L IH2 F T S\nBOATLOAD  B OW1 T - L OW2 D\nBOATLOADS  B OW1 T - L OW2 D Z\nBOATMAN  B OW1 T - M AH0 N\nBOATMEN'S  B OW1 T - M EH0 N Z\nBOATNER  B OW1 T - N ER0\nBOATRIGHT  B OW1 T - R AY2 T\nBOATS  B OW1 T S\nBOATWRIGHT  B OW1 T - R AY2 T\nBOATYARD  B OW1 T - Y AA2 R D\nBOAZ  B OW1 - AE0 Z\nBOB  B AA1 B\nBOB'S  B AA1 B Z\nBOBACK  B OW1 - B AE2 K\nBOBADILLA  B OW0 - B AA0 - D IH1 - L AH0\nBOBAK  B OW1 - B AH0 K\nBOBB  B AA1 B\nBOBBER  B AA1 - B ER0\nBOBBETT  B AA1 - B IH0 T\nBOBBETTE  B AA1 - B EH1 T\nBOBBI  B AA1 - B IY0\nBOBBIE  B AA1 - B IY0\nBOBBIN  B AA1 - B AH0 N\nBOBBING  B AA1 - B IH0 NG\nBOBBINGER  B AA1 - B IH0 - NG ER0\nBOBBINGER'S  B AA1 - B IH0 - NG ER0 Z\nBOBBITT  B AA1 - B IH0 T\nBOBBITT'S  B AA1 - B IH0 T S\nBOBBITTS  B AA1 - B IH0 T S\nBOBBO  B AA1 - B OW0\nBOBBY  B AA1 - B IY0\nBOBBY'S  B AA1 - B IY0 Z\nBOBCAT  B AA1 B - K AE2 T\nBOBCATS  B AA1 B - K AE2 T Z\nBOBE  B OW1 B\nBOBECK  B OW1 - B EH2 K\nBOBEK  B OW1 - B IH0 K\nBOBER  B AA1 - B ER0\nBOBERG  B OW1 - B ER0 G\nBOBICK  B AA1 - B IH0 K\nBOBIER  B OW1 - B IY0 - ER0\nBOBINSKI  B AH0 - B IH1 N - S K IY0\nBOBLITT  B AH0 - B L IH1 T\nBOBO  B OW1 - B OW0\nBOBOLAS  B OW1 - B OW0 - L AH0 S\nBOBROW  B AA1 - B R OW2\nBOBROWSKI  B AH0 - B R AO1 F S - K IY0\nBOBSLED  B AA1 B - S L EH2 D\nBOBST  B AA1 B S T\nBOBZIEN  B AA1 B - Z IY0 N\nBOCA  B OW1 - K AH0\nBOCANEGRA  B OW2 - K AH0 - N EH1 - G R AH0\nBOCCE  B OW1 - CH IY0\nBOCCE(2)  B OW1 - K AH0\nBOCCHINO  B OW2 - K IY1 - N OW0\nBOCCIA  B OW1 - CH AH0\nBOCCIO  B OW1 - CH IY0 - OW0\nBOCCUZZI  B OW0 - K UW1 T - S IY0\nBOCEK  B OW1 - CH EH2 K\nBOCH  B AA1 K\nBOCHAROV  B AA1 - CH ER0 - AA0 V\nBOCHCO  B AA1 CH - K OW0\nBOCHE  B AA1 CH\nBOCHENEK  B AA1 - K IH0 - N IH0 K\nBOCHES  B AA1 - CH IH0 Z\nBOCHICCHIO  B OW0 - K IY1 - K IY0 - OW0\nBOCHNER  B AA1 K - N ER0\nBOCHRAM  B AA1 - K R AH0 M\nBOCIAN  B OW1 - SH AH0 N\nBOCK  B AA1 K\nBOCKELMAN  B AA1 - K AH0 L - M AH0 N\nBOCKIUS  B AA1 - K IY0 - AH0 S\nBOCKMAN  B AA1 K - M AH0 N\nBOCKUS  B AA1 - K AH0 S\nBOCOCK  B AA1 - K AH0 K\nBOCOOK  B AA1 - K UH0 K\nBODA  B OW1 - D AH0\nBODAMER  B AA1 - D AH0 - M ER0\nBODANIS  B OW0 - D AA1 - N IH0 S\nBODDEN  B AA1 - D AH0 N\nBODDIE  B AA1 - D IY0\nBODDINGTON  B AA1 - D IH0 NG - T AH0 N\nBODDY  B AA1 - D IY0\nBODE  B OW1 D\nBODEGAS  B OW0 - D EY1 - G AH0 S\nBODELL  B AH0 - D EH1 L\nBODEN  B OW1 - D AH0 N\nBODENHAMER  B AA1 - D IH0 N - HH AH0 - M ER0\nBODENHAMER(2)  B OW1 - D IH0 N - HH AH0 - M ER0\nBODENHEIMER  B AA1 - D IH0 N - HH AY0 - M ER0\nBODENSTEIN  B OW1 - D AH0 N - S T AY1 N\nBODENSTEIN(2)  B OW1 - D AH0 N - S T IY1 N\nBODENSTEINER  B OW1 - D AH0 N - S T AY1 - N ER0\nBODES  B OW1 D Z\nBODEY  B OW1 - D IY0\nBODI  B OW1 - D IY0\nBODIE  B OW1 - D IY0\nBODIED  B AA1 - D IY0 D\nBODIES  B AA1 - D IY0 Z\nBODIKOVA  B AA2 - D IH0 - K OW1 - V AH0\nBODILY  B AA1 - D AH0 - L IY0\nBODIN  B OW1 - D IH0 N\nBODINE  B OW0 - D IY1 - N IY0\nBODKIN  B AA1 D - K IH0 N\nBODKINS  B AA1 D - K IH0 N Z\nBODLE  B OW1 - D AH0 L\nBODLEY  B AA1 D - L IY0\nBODMAN  B AA1 D - M AH0 N\nBODMER  B AA1 D - M ER0\nBODNAR  B AH0 D - N AA1 R\nBODNER  B AA1 D - N ER0\nBODO  B OW1 - D OW0\nBODWELL  B AA1 D - W EH2 L\nBODY  B AA1 - D IY0\nBODY'S  B AA1 - D IY0 Z\nBODYGUARD  B AA1 - D IY0 - G AA2 R D\nBODYGUARDS  B AA1 - D IY0 - G AA2 R D Z\nBODZIAK  B AO1 D - Z IY0 - AE0 K\nBODZIAK'S  B AO1 D - Z IY0 - AE0 K S\nBOE  B OW1\nBOECK  B OW1 K\nBOECKEL  B OW1 - K AH0 L\nBOECKER  B OW1 - K ER0\nBOECKMAN  B OW1 K - M AH0 N\nBOECKMANN  B OW1 K - M AH0 N\nBOEDECKER  B OW1 - D IH0 - K ER0\nBOEDEKER  B OW1 - D IH0 - K ER0\nBOEDER  B OW1 - D ER0\nBOEDING  B OW1 - D IH0 NG\nBOEGE  B OW1 JH\nBOEGER  B OW1 - G ER0\nBOEH  B OW1\nBOEHL  B OW1 L\nBOEHLE  B OW1 - HH AH0 L\nBOEHLER  B OW1 - L ER0\nBOEHLERT  B OW1 - L ER0 T\nBOEHLKE  B OW1 L K\nBOEHM  B OW1 M\nBOEHM(2)  B EY1 M\nBOEHME  B OW1 M\nBOEHME(2)  B EY1 M\nBOEHMER  B OW1 - M ER0\nBOEHMKE  B OW1 M - K IY0\nBOEHNE  B OW1 N\nBOEHNER  B OW1 - N ER0\nBOEHNING  B OW1 - N IH0 NG\nBOEHNKE  B OW1 NG K\nBOEHNLEIN  B OW1 N - L AY2 N\nBOEHRINGER  B AO1 - R IH0 - NG ER0\nBOEING  B OW1 - IH0 NG\nBOEING'S  B OW1 - IH0 NG Z\nBOEKE  B OW1 K\nBOEKER  B OW1 - K ER0\nBOELENS  B OW1 - L AH0 N Z\nBOELKOW  B OW1 L - K AW0\nBOELMAN  B OW1 L - M AH0 N\nBOELTER  B OW1 L - T ER0\nBOEN  B OW1 N\nBOENIG  B OW1 - N IH0 G\nBOENING  B AA1 - AH0 - N IH0 NG\nBOEPPLE  B OW1 - P AH0 L\nBOER  B AO1 R\nBOERGER  B AO1 R - G ER0\nBOERMAN  B AO1 R - M AH0 N\nBOERNER  B AO1 R - N ER0\nBOERS  B AO1 R Z\nBOERSMA  B AO1 R S - M AH0\nBOES  B OW1 Z\nBOESAK  B OW1 - Z AE0 K\nBOESCH  B OW1 SH\nBOESCHENSTEIN  B OW1 - SH AH0 N - S T IY2 N\nBOESCHENSTEIN(2)  B OW1 - SH AH0 N - S T AY2 N\nBOESE  B OW1 S\nBOESEL  B OW1 - S AH0 L\nBOESEN  B OW1 - S AH0 N\nBOESKY  B OW1 S - K IY0\nBOESKY'S  B OW1 S - K IY0 Z\nBOESKYS  B OW1 S - K IY0 Z\nBOETCHER  B OW1 - CH ER0\nBOETTCHER  B OW1 - CH ER0\nBOETTGER  B OW1 T - G ER0\nBOETTNER  B OW1 T - N ER0\nBOEVE  B OW1 V\nBOFF  B AO1 F\nBOFFA  B AA1 - F AH0\nBOFFO  B AO1 - F OW0\nBOFORS  B OW1 - F ER0 Z\nBOFORS'S  B OW1 - F ER0 - Z IH0 Z\nBOG  B AA1 G\nBOG(2)  B AO1 G\nBOGACKI  B AH0 - G AA1 T S - K IY0\nBOGACZ  B AA1 - G AH0 CH\nBOGAN  B OW1 - G AH0 N\nBOGAR  B AH0 - G AA1 R\nBOGARD  B AA1 - G ER0 D\nBOGARDUS  B AA1 - G AA0 R - D IH0 S\nBOGART  B OW1 - G AA2 R T\nBOGDAN  B AA1 G - D AH0 N\nBOGDANOFF  B AA1 G - D AH0 N - AO0 F\nBOGDANOWICZ  B AH0 G - D AE1 - N AH0 - W IH0 T Z\nBOGDANSKI  B AH0 G - D AE1 N S - K IY0\nBOGDEN  B AA1 G - D AH0 N\nBOGDON  B AA1 G - D AH0 N\nBOGE  B OW1 JH\nBOGELSONG  B AA1 - G AH0 L - S AO0 NG\nBOGEN  B AA1 - G AH0 N\nBOGENSCHUTZ  B AA1 - G IH0 N - SH AH0 T S\nBOGER  B OW1 - G ER0\nBOGERT  B AA1 - G ER0 T\nBOGEY  B OW1 - G IY0\nBOGEYED  B OW1 - G IY0 D\nBOGEYMAN  B OW1 - G IY0 - M AE2 N\nBOGEYMAN(2)  B UH1 - G IY0 - M AE2 N\nBOGEYMEN  B OW1 - G IY0 - M IH2 N\nBOGEYMEN(2)  B UH1 - G IY0 - M IH2 N\nBOGGAN  B AA1 - G AH0 N\nBOGGED  B AA1 G D\nBOGGED(2)  B AO1 G D\nBOGGESS  B AA1 - G IH0 S\nBOGGING  B AO1 - G IH0 NG\nBOGGIO  B OW1 - JH IY0 - OW0\nBOGGLE  B AA1 - G AH0 L\nBOGGLED  B AA1 - G AH0 L D\nBOGGLES  B AA1 - G AH0 L Z\nBOGGLING  B AA1 - G AH0 - L IH0 NG\nBOGGLING(2)  B AA1 - G L IH0 NG\nBOGGS  B AO1 G Z\nBOGGUS  B AA1 - G AH0 S\nBOGHOSIAN  B AH0 G - HH AA1 - ZH IH0 N\nBOGIE  B UH1 - G IY0\nBOGIN  B OW1 - JH IH0 N\nBOGLE  B OW1 - G AH0 L\nBOGNAR  B AH0 G - N AA1 R\nBOGNER  B AA1 G - N ER0\nBOGOR  B OW1 - G AO2 R\nBOGOSIAN  B AH0 - G AA1 - ZH IH0 N\nBOGOTA  B OW2 - G AH0 - T AA1\nBOGS  B AA1 G Z\nBOGS(2)  B AO1 G Z\nBOGUCKI  B AH0 - G AH1 T S - K IY0\nBOGUE  B OW1 G\nBOGUS  B OW1 - G AH0 S\nBOGUSLAVSKAYA  B OW0 - G AH2 - S L AH0 V - S K AY1 - AH0\nBOGUSZ  B AA1 - G AH0 SH\nBOHAC  B OW1 - HH AH0 K\nBOHALL  B AA1 - HH AH0 L\nBOHAN  B OW1 - HH AH0 N\nBOHANAN  B AA1 - HH AH0 - N AE0 N\nBOHANNAN  B AH0 - HH AE1 - N AH0 N\nBOHANNON  B AA1 - HH AH0 - N AA0 N\nBOHANON  B AA1 - HH AH0 - N AA0 N\nBOHART  B AA1 - HH AA0 R T\nBOHEME  B OW0 - HH EY1 - M EY0\nBOHEMIA  B OW0 - HH IY1 - M IY0 - AH0\nBOHEMIAN  B OW0 - HH IY1 - M IY0 - AH0 N\nBOHEN  B OW1 - AH0 N\nBOHL  B OW1 L\nBOHLAND  B OW1 - L AH0 N D\nBOHLANDER  B OW1 - L AH0 N - D ER0\nBOHLE  B OW1 - HH AH0 L\nBOHLEN  B OW1 - L AH0 N\nBOHLER  B OW1 - L ER0\nBOHLIN  B OW1 - L IH0 N\nBOHLING  B OW1 - L IH0 NG\nBOHLINGER  B OW1 - L IH0 - NG ER0\nBOHLKE  B AA1 K\nBOHLKE(2)  B OW1 L K\nBOHLKEN  B OW1 L - K AH0 N\nBOHLMAN  B OW1 L - M AH0 N\nBOHLMANN  B OW1 L - M AH0 N\nBOHM  B AA1 M\nBOHMAN  B OW1 - M AH0 N\nBOHMER  B OW1 - M ER0\nBOHN  B OW1 N\nBOHNE  B OW1 N\nBOHNEN  B OW1 - N AH0 N\nBOHNENKAMP  B OW1 - N IH0 N - K AE0 M P\nBOHNER  B OW1 - N ER0\nBOHNERT  B OW1 - N ER0 T\nBOHNET  B AA1 - N IH0 T\nBOHNHOFF  B OW1 N - HH AO2 F\nBOHNING  B AA1 - N IH0 NG\nBOHNSACK  B OW1 N - S AH0 K\nBOHON  B OW1 - HH AH0 N\nBOHR  B AO1 R\nBOHREN  B AO1 - R AH0 N\nBOHRER  B AO1 - R ER0\nBOICE  B OY1 S\nBOIES  B OY1 Z\nBOIK  B OY1 K\nBOIKE  B OY1 K\nBOIL  B OY1 L\nBOILARD  B OY0 - L AA1 R D\nBOILEAU  B OY2 - L OW1\nBOILED  B OY1 L D\nBOILER  B OY1 - L ER0\nBOILERMAKER  B OY1 - L ER0 - M EY2 - K ER0\nBOILERPLATE  B OY1 - L ER0 - P L EY2 T\nBOILERS  B OY1 - L ER0 Z\nBOILING  B OY1 - L IH0 NG\nBOILS  B OY1 L Z\nBOIPATONG  B OY1 - P AH0 - T AO0 NG\nBOIS  B W AA1\nBOISCLAIR  B W AA0 - K L EH1 R\nBOISE  B OY1 - Z IY0\nBOISE'S  B OY1 - Z IY0 Z\nBOISE'S(2)  B OY1 - S IY0 Z\nBOISE(2)  B OY1 - S IY0\nBOISEN  B OY1 - S AH0 N\nBOISI  B OY1 - S IY0\nBOISJOLY  B OY1 S - JH AH0 - L IY0\nBOISSEAU  B W AA2 - S OW1\nBOISSONNEAULT  B W AA1 - S AH0 - N OW0\nBOISTEROUS  B OY1 - S T ER0 - AH0 S\nBOISTEROUS(2)  B OY1 - S T R AH0 S\nBOISVERT  B W AA0 - V ER1 T\nBOITANO  B OY2 - T AA1 - N OW0\nBOITNOTT  B OY0 T - N AA1 T\nBOIVIN  B OY0 - V AE1 N\nBOJANGLES'  B OW0 - JH AE1 NG - G AH0 L Z\nBOJANOWSKI  B AH0 - Y AH0 - N AO1 F S - K IY0\nBOJARSKI  B AH0 - Y AA1 R S - K IY0\nBOJENKA  B AH0 - JH EH1 NG - K AH0\nBOJORQUEZ  B OW0 - Y AO1 R - K W EH0 Z\nBOK  B AA1 K\nBOKASSA  B AH0 - K AA1 - S AH0\nBOKER  B OW1 - K ER0\nBOKOR  B OW1 - K ER0\nBOKSEN  B AA1 K - S AH0 N\nBOL  B AA1 L\nBOLA  B OW1 - L AH0\nBOLAM  B OW1 - L AH0 M\nBOLAN  B OW1 - L AH0 N\nBOLAND  B OW1 - L AH0 N D\nBOLANDER  B AA1 - L AH0 N - D ER0\nBOLANGER  B OW1 - L AH0 N - JH ER0\nBOLANOS  B OW0 - L AA1 - N OW0 Z\nBOLAR  B OW1 - L ER0\nBOLAR'S  B OW1 - L ER0 Z\nBOLCH  B OW1 L CH\nBOLCOM  B OW1 L - K AH0 M\nBOLD  B OW1 L D\nBOLDA  B OW1 L - D AH0\nBOLDEN  B OW1 L - D AH0 N\nBOLDER  B OW1 L - D ER0\nBOLDEST  B OW1 L - D IH0 S T\nBOLDFACE  B OW1 L D - F EY2 S\nBOLDIN  B OW1 L - D IH0 N\nBOLDING  B OW1 L - D IH0 NG\nBOLDLY  B OW1 L D - L IY0\nBOLDMAN  B OW1 L D - M AH0 N\nBOLDNESS  B OW1 L D - N AH0 S\nBOLDON  B OW1 L - D AH0 N\nBOLDS  B OW1 L D Z\nBOLDT  B OW1 L T\nBOLDUC  B OW1 L - D AH0 K\nBOLDUC'S  B OW1 L - D AH0 K S\nBOLE  B OW1 L\nBOLEK  B OW1 - L IH0 K\nBOLEN  B OW1 - L AH0 N\nBOLENBAUGH  B AH0 - L EH1 N - B AO0\nBOLENDER  B AA1 - L EH0 N - D ER0\nBOLER  B OW1 - L ER0\nBOLERJACK  B AA1 - L ER0 - JH AH0 K\nBOLERO  B OW0 - L EH1 - R OW0\nBOLES  B OW1 L Z\nBOLEWARE  B OW1 L - W EH0 R\nBOLEY  B OW1 - L IY0\nBOLF  B OW1 L F\nBOLGER  B OW1 L - JH ER0\nBOLGER'S  B OW1 L - JH ER0 Z\nBOLICH  B AA1 - L IH0 K\nBOLICK  B AA1 - L IH0 K\nBOLIDEN  B OW1 - L IH0 - D AH0 N\nBOLIN  B OW1 - L IH0 N\nBOLINE  B AA1 - L AY0 N\nBOLING  B OW1 - L IH0 NG\nBOLINGER  B OW1 - L IH0 - NG ER0\nBOLIO  B OW1 - L IY0 - OW0\nBOLITHO  B OW0 - L IH1 - TH AH0\nBOLIVAR  B AA1 - L AH0 - V ER0\nBOLIVARS  B AA1 - L AH0 - V ER0 Z\nBOLIVIA  B AH0 - L IH1 - V IY0 - AH0\nBOLIVIA'S  B AH0 - L IH1 - V IY0 - AH0 Z\nBOLIVIA(2)  B OW0 - L IH1 - V IY0 - AH0\nBOLIVIAN  B OW0 - L IH1 - V IY0 - AH0 N\nBOLIVIAN(2)  B AH0 - L IH1 - V IY0 - AH0 N\nBOLKER  B OW1 L - K ER0\nBOLKOW  B OW1 L - K AW0\nBOLL  B OW1 L\nBOLLA  B AA1 - L AH0\nBOLLAND  B AA1 - L AH0 N D\nBOLLAPRAGADA  B OW0 - L AA2 - P R AH0 - G AA1 - D AH0\nBOLLARD  B AA1 - L ER0 D\nBOLLE  B AA1 L\nBOLLEN  B AA1 - L AH0 N\nBOLLENBACH  B AA1 - L IH0 N - B AA0 K\nBOLLENBACHER  B AA1 - L IH0 N - B AA0 - K ER0\nBOLLER  B AA1 - L ER0\nBOLLES  B OW1 L Z\nBOLLETTIERI  B AH0 - L EH2 - T IY0 - EH1 - R IY0\nBOLLIER  B AA1 - L IY0 - ER0\nBOLLIG  B AA1 - L IH0 G\nBOLLIGER  B AA1 - L IH0 - G ER0\nBOLLIN  B AA1 - L IH0 N\nBOLLING  B OW1 - L IH0 NG\nBOLLINGER  B AA1 - L IH0 - NG ER0\nBOLLMAN  B AA1 L - M AH0 N\nBOLLMANN  B AA1 L - M AH0 N\nBOLLORE  B AA1 - L AO0 R\nBOLLS  B OW1 L Z\nBOLOGNA  B AH0 - L OW1 - N IY0\nBOLOGNESE  B OW0 - L OW0 G - N EY1 - Z IY0\nBOLOGNESI  B AA2 - L AA0 G - N EH1 - S IY0\nBOLON  B OW1 - L AH0 N\nBOLOTIN  B AA1 - L AH0 - T IH0 N\nBOLSA  B OW1 L - S AH0\nBOLSA'S  B OW1 L - S AH0 Z\nBOLSER  B OW1 L - S ER0\nBOLSHEVIK  B OW1 L - SH AH0 - V IH2 K\nBOLSHEVIKS  B OW1 L - SH AH0 - V IH2 K S\nBOLSHEVISM  B OW1 L - SH AH0 - V IH2 - Z AH0 M\nBOLSHEVIST  B OW1 L - SH IH0 - V IH2 S T\nBOLSHOI  B OW0 L - SH OY1\nBOLSHOI'S  B OW0 L - SH OY1 Z\nBOLSON  B OW1 L - S AH0 N\nBOLSTAD  B OW1 L - S T AH0 D\nBOLSTER  B OW1 L - S T ER0\nBOLSTERED  B OW1 L - S T ER0 D\nBOLSTERING  B OW1 L - S T ER0 - IH0 NG\nBOLSTERS  B OW1 L - S T ER0 Z\nBOLT  B OW1 L T\nBOLTE  B OW1 L T\nBOLTED  B OW1 L - T AH0 D\nBOLTED(2)  B OW1 L - T IH0 D\nBOLTEN  B OW1 L - T AH0 N\nBOLTER  B OW1 L - T ER0\nBOLTHOUSE  B OW1 L T - HH AW2 S\nBOLTING  B OW1 L - T IH0 NG\nBOLTON  B OW1 L - T AH0 N\nBOLTS  B OW1 L T S\nBOLTZ  B OW1 L T S\nBOLTZMANN'S  B OW1 L T S - M AH0 N Z\nBOLTZMANNS  B OW1 L T S - M AH0 N Z\nBOLUS  B OW1 - L AH0 S\nBOLYARD  B AH0 L - Y AA1 R D\nBOLZ  B OW1 L Z\nBOM  B AA1 M\nBOMAG  B OW1 - M AE0 G\nBOMAN  B OW1 - M AH0 N\nBOMAR  B AH0 - M AA1 R\nBOMB  B AA1 M\nBOMB'S  B AA1 M Z\nBOMB(2)  B AO1 M\nBOMBA  B AA1 M - B AH0\nBOMBARD  B AA0 M - B AA1 R D\nBOMBARDED  B AA0 M - B AA1 R - D IH0 D\nBOMBARDIER  B AA2 M - B ER0 - D IH1 R\nBOMBARDING  B AA0 M - B AA1 R - D IH0 NG\nBOMBARDMENT  B AA0 M - B AA1 R D - M AH0 N T\nBOMBARDMENTS  B AA0 M - B AA1 R D - M AH0 N T S\nBOMBAST  B AA1 M - B AE0 S T\nBOMBASTIC  B AA0 M - B AE1 - S T IH0 K\nBOMBAY  B AA0 M - B EY1\nBOMBAY'S  B AA0 M - B EY1 Z\nBOMBECK  B AA1 M - B EH2 K\nBOMBED  B AA1 M D\nBOMBER  B AA1 - M ER0\nBOMBER'S  B AA1 - M ER0 Z\nBOMBERG  B AA1 M - B ER0 G\nBOMBERGER  B AA1 M - B ER0 - G ER0\nBOMBERS  B AA1 - M ER0 Z\nBOMBING  B AA1 - M IH0 NG\nBOMBINGS  B AA1 - M IH0 NG Z\nBOMBMAKER  B AA1 M - M EY0 - K ER0\nBOMBMAKING  B AA1 M - M EY0 - K IH0 NG\nBOMBS  B AA1 M Z\nBOMBSHELL  B AA1 M - SH EH2 L\nBOMBSHELLS  B AA1 M - SH EH2 L Z\nBOMER  B OW1 - M ER0\nBOMGARDNER  B AA1 M - G AA2 R D - N ER0\nBOMMARITO  B AA2 - M ER0 - IY1 - T OW0\nBOMMER  B AA1 - M ER0\nBON  B AA1 N\nBONA  B OW1 - N AH0\nBONACCI  B OW0 - N AA1 - CH IY0\nBONADIO  B OW0 - N AA1 - D IY0 - OW0\nBONADONNA  B AA2 - N AH0 - D AA1 - N AH0\nBONADUCE  B AA2 - N AH0 - D UW1 - CH IY0\nBONADUCE(2)  B AA1 - N AH0 - D UW0 S\nBONAFIDE  B AA1 - N AH0 - F AY2 D\nBONAFIDE(2)  B OW1 - N AH0 - F AY2 D\nBONANNI  B OW0 - N AA1 - N IY0\nBONANNO  B OW0 - N AA1 - N OW0\nBONANZA  B AH0 - N AE1 N - Z AH0\nBONAPARTE  B OW1 - N AH0 - P AA2 R T\nBONAPARTE'S  B OW1 - N AH0 - P AA2 R T S\nBONAR  B OW1 - N ER0\nBONASERA  B OW0 - N AA0 - S EH1 - R AH0\nBONAVENTURA  B OW0 - N AA0 - V EH0 N - T UH1 - R AH0\nBONAVENTURE  B AA1 - N AH0 - V EH2 N - CH ER0\nBONAVIA  B AA2 - N EY1 - V IY0 - AH0\nBONAVITA  B OW0 - N AA0 - V IY1 - T AH0\nBONAWITZ  B AA1 - N AH0 - W IH0 T S\nBONCZEK  B AA1 N - CH EH0 K\nBOND  B AA1 N D\nBOND'S  B AA1 N D Z\nBONDAGE  B AA1 N - D IH0 JH\nBONDAR  B AH0 N - D AA1 R\nBONDE  B AA1 N D\nBONDED  B AA1 N - D AH0 D\nBONDED(2)  B AA1 N - D IH0 D\nBONDERMAN  B AA1 N - D ER0 - M AH0 N\nBONDHOLDER  B AA1 N D - HH OW2 L - D ER0\nBONDHOLDERS  B AA1 N D - HH OW2 L - D ER0 Z\nBONDHOLDERS'  B AA1 N D - HH OW2 L - D ER0 Z\nBONDI  B AA1 N - D IY0\nBONDING  B AA1 N - D IH0 NG\nBONDS  B AA1 N D Z\nBONDS'  B AA1 N D Z\nBONDT  B AA1 N T\nBONDURANT  B OW0 N - D UH1 - R AH0 N T\nBONDY  B AA1 N - D IY0\nBONE  B OW1 N\nBONEBRAKE  B OW1 N - B R EY2 K\nBONECRUSHER  B OW1 N - K R AH2 - SH ER0\nBONECUTTER  B OW1 N - K AH2 - T ER0\nBONED  B OW1 N D\nBONELESS  B OW1 N - L AH0 S\nBONELLI  B OW0 - N EH1 - L IY0\nBONELLO  B OW0 - N EH1 - L OW0\nBONENBERGER  B OW1 - N AH0 N - B ER0 - G ER0\nBONENFANT  B OW1 N - F AH0 N T\nBONER  B OW1 - N ER0\nBONES  B OW1 N Z\nBONESTEEL  B OW1 N - S T IY2 L\nBONET  B OW1 N T\nBONETTI  B OW0 - N EH1 - T IY0\nBONEY  B OW1 - N IY0\nBONFANTI  B OW0 N - F AA1 N - T IY0\nBONFIELD  B AA1 N - F IY2 L D\nBONFIGLIO  B AA2 N - F IH1 G - L IY0 - OW0\nBONFIRE  B AA1 N - F AY2 - ER0\nBONFIRES  B AA1 N - F AY2 - ER0 Z\nBONG  B AA1 NG\nBONGARD  B AH0 NG - G AA1 R D\nBONGARTEN  B AA1 NG - G AA2 R - T AH0 N\nBONGERS  B AO1 - NG ER0 Z\nBONGIORNO  B OW0 N - JH AO1 R - N OW0\nBONGIOVANNI  B OW0 N - JH OW0 - V AA1 - N IY0\nBONGJIN  B AO1 NG - JH IH1 N\nBONGO  B AA1 NG - G OW2\nBONGOS  B AA1 NG - G OW2 Z\nBONHAM  B AA1 N - HH AH0 M\nBONI  B OW1 - N IY0\nBONICA  B AA1 - N IH0 - K AH0\nBONIER  B AA1 - N Y ER0\nBONIFACIO  B AA2 - N IH0 - F EY1 - S IY0 - OW0\nBONIFAS  B AA1 - N IH0 - F AH0 Z\nBONIFAY  B AA1 - N IH0 - F EY2\nBONIFIELD  B AA1 - N IH0 - F IY2 L D\nBONILLA  B AH0 - N IH1 - L AH0\nBONIN  B OW1 - N IH0 N\nBONINE  B OW0 - N IY1 - N IY0\nBONING  B OW1 - N IH0 NG\nBONINI  B OW0 - N IY1 - N IY0\nBONINO  B OW0 - N IY1 - N OW0\nBONIOR  B OW1 - N IY0 - ER0\nBONIOR(2)  B OW2 N - W AA1 R\nBONITA  B OW0 - N IY1 - T AH0\nBONITO  B AH0 - N IY1 - T OW0\nBONJOUR  B AH0 N - ZH UH1 R\nBONK  B AA1 NG K\nBONKER  B AO1 NG - K ER0\nBONKERS  B AA1 NG - K ER0 Z\nBONKOWSKI  B AH0 NG - K AO1 F S - K IY0\nBONN  B AA1 N\nBONN'S  B AA1 N Z\nBONNE  B AA1 N\nBONNEAU  B AH0 - N OW1\nBONNELL  B AA1 - N AH0 L\nBONNEMA  B AA1 - N IH0 - M AH0\nBONNER  B AO1 - N ER0\nBONNES  B AO1 N Z\nBONNET  B AA1 - N AH0 T\nBONNETT  B AA1 - N IH0 T\nBONNETTE  B AH0 - N EH1 T\nBONNEVILLE  B AA1 - N AH0 - V IH2 L\nBONNEVILLES  B AA1 - N AH0 - V IH2 L Z\nBONNEY  B AA1 - N IY0\nBONNIBEL  B AA1 - N IH0 - B AH0 L\nBONNIBELLE  B AA1 - N IH0 - B AH0 L\nBONNIE  B AA1 - N IY0\nBONNIE'S  B AA1 - N IY0 Z\nBONNIN  B AA1 - N IH0 N\nBONNOR  B AA1 - N ER0\nBONNY  B AA1 - N IY0\nBONO  B OW1 - N OW0\nBONOBOS  B AA0 - N AA1 - B OW0 Z\nBONOBOS(2)  B AA1 - N AH0 - B AH0 Z\nBONOMO  B AA1 - N AH0 - M OW0\nBONSAI  B AA0 N - S AY1\nBONSAI(2)  B OW1 N - S AY0\nBONSALL  B OW0 N - S AA1 L\nBONSER  B AA1 N - S ER0\nBONSIGNORE  B OW0 N - S IY0 G - N AO1 - R IY0\nBONTA  B AA1 N - T AH0\nBONTE  B AA1 N T\nBONTEMPO  B AA2 N - T EH1 M - P OW0\nBONTRAGER  B AA1 N - T R EY2 - G ER0\nBONUM  B AA1 - N AH0 M\nBONURA  B OW0 - N UH1 - R AH0\nBONUS  B OW1 - N AH0 S\nBONUSES  B OW1 - N AH0 - S IH0 Z\nBONVILLAIN  B AA1 N - V IH0 - L EY2 N\nBONVILLE  B OW1 N - V IH0 L\nBONWELL  B AA1 N - W EH2 L\nBONWIT  B AA1 N - W IH0 T\nBONWIT'S  B AA1 N - W IH0 T S\nBONY  B OW1 - N IY0\nBONZO  B AA1 N - Z OW0\nBOO  B UW1\nBOOB  B UW1 B\nBOOBS  B UW1 B Z\nBOOBY  B UW1 - B IY0\nBOOCK  B UW1 K\nBOODLE  B UW1 - D AH0 L\nBOODLES  B UW1 - D AH0 L Z\nBOODY  B UW1 - D IY0\nBOOE  B AA1 - OW0\nBOOED  B UW1 D\nBOOEE  B UW1 - IY0\nBOOGIE  B UW1 - G IY0\nBOOGIE(2)  B UH1 - G IY0\nBOOGIE-WOOGIE  B UW1 - G IY0 - W UW1 - G IY0\nBOOGIE-WOOGIE(2)  B UH1 - G IY0 - W UH1 - G IY0\nBOOHER  B UW1 - ER0\nBOOING  B UW1 - IH0 NG\nBOOK  B UH1 K\nBOOK'S  B UH1 K S\nBOOKBINDER  B UH1 K - B AY2 N - D ER0\nBOOKCASE  B UH1 K - K EY2 S\nBOOKCASES  B UH1 K - K EY2 - S IH0 Z\nBOOKCELLAR  B UH1 K - S EH1 - L ER0\nBOOKED  B UH1 K T\nBOOKEND  B UH1 K - EH2 N D\nBOOKENDS  B UH1 K - EH2 N D Z\nBOOKER  B UH1 K - ER0\nBOOKERS  B UH1 - K ER0 Z\nBOOKIE  B UH1 K - IY0\nBOOKIES  B UH1 K - IY0 Z\nBOOKIN  B UH1 - K IH0 N\nBOOKING  B UH1 - K IH0 NG\nBOOKINGS  B UH1 - K IH0 NG Z\nBOOKISH  B UH1 K - IH0 SH\nBOOKKEEPER  B UH1 K - K IY2 - P ER0\nBOOKKEEPERS  B UH1 K - K IY2 - P ER0 Z\nBOOKKEEPING  B UH1 K - K IY2 - P IH0 NG\nBOOKLET  B UH1 K - L IH0 T\nBOOKLETS  B UH1 K - L AH0 T S\nBOOKMAKING  B UH1 K - M EY2 - K IH0 NG\nBOOKMAN  B UH1 K - M AH0 N\nBOOKMOBILE  B UH1 K - M OW0 - B IY2 L\nBOOKNOTE  B UH1 K - N OW2 T\nBOOKNOTES  B UH1 K - N OW2 T S\nBOOKOUT  B UH1 K - AW2 T\nBOOKS  B UH1 K S\nBOOKS'  B UH1 K S\nBOOKSELLER  B UH1 K - S EH2 - L ER0\nBOOKSELLERS  B UH1 K - S EH2 - L ER0 Z\nBOOKSHELF  B UH1 K - SH EH2 L F\nBOOKSHELVES  B UH1 K - SH EH2 L V Z\nBOOKSHOP  B UH1 K - SH AA2 P\nBOOKSHOPS  B UH1 K - SH AA2 P S\nBOOKSMITH  B UH1 K - S M IH2 TH\nBOOKSTOP  B UH1 K - S T AA2 P\nBOOKSTORE  B UH1 K - S T AO2 R\nBOOKSTORES  B UH1 K - S T AO2 R Z\nBOOKWALTER  B UH1 K - W AH0 L - T ER0\nBOOKWORM  B UH1 K - W ER2 M\nBOOLE  B UW1 L\nBOOM  B UW1 M\nBOOM'S  B UW1 M Z\nBOOMBOX  B UH1 M - B AA2 K S\nBOOMED  B UW1 M D\nBOOMER  B UW1 - M ER0\nBOOMERANG  B UW1 - M ER0 - AE2 NG\nBOOMERANGED  B UW1 - M ER0 - AE2 NG D\nBOOMERS  B UW1 - M ER0 Z\nBOOMERS'  B UW1 - M ER0 Z\nBOOMERSHINE  B UW1 - M ER0 - SH AY2 N\nBOOMHOWER  B UW1 M - HH OW0 - ER0\nBOOMING  B UW1 - M IH0 NG\nBOOMLET  B UW1 M - L AH0 T\nBOOMS  B UW1 M Z\nBOOMSMA  B UW1 M Z - M AH0\nBOOMTOWN  B UW1 M - T AW2 N\nBOON  B UW1 N\nBOONDOCKS  B UW1 N - D AA2 K S\nBOONDOGGLE  B UW2 N - D AA1 - G AH0 L\nBOONDOGGLES  B UW2 N - D AA1 - G AH0 L Z\nBOONE  B UW1 N\nBOONSTRA  B UW1 N - S T R AH0\nBOONTON  B UW1 N - T AH0 N\nBOONVILLE  B UW1 N - V IH0 L\nBOOP  B UW1 P\nBOOR  B UH1 R\nBOORAS  B UH1 - R AH0 Z\nBOORD  B UH1 R D\nBOORDA  B UH1 R - D AH0\nBOORDA'S  B UH1 R - D AH0 Z\nBOORISH  B UH1 - R IH0 SH\nBOORISHNESS  B UH1 - R IH0 SH - N AH0 S\nBOORMAN  B UH1 R - M AH0 N\nBOORS  B UH1 R Z\nBOORSTIN  B UW1 R - S T IH0 N\nBOORTZ  B AO1 R T S\nBOOS  B UW1 Z\nBOOSE  B UW1 S\nBOOST  B UW1 S T\nBOOSTED  B UW1 - S T IH0 D\nBOOSTER  B UW1 - S T ER0\nBOOSTER'S  B UW1 - S T ER0 Z\nBOOSTERISM  B UW1 - S T ER0 - IH2 - Z AH0 M\nBOOSTERS  B UW1 - S T ER0 Z\nBOOSTING  B UW1 - S T IH0 NG\nBOOSTS  B UW1 S T S\nBOOT  B UW1 T\nBOOTE  B UW1 T\nBOOTED  B UW1 - T IH0 D\nBOOTEN  B UW1 - T AH0 N\nBOOTH  B UW1 TH\nBOOTHBY  B UW1 TH - B IY0\nBOOTHE  B UW1 DH\nBOOTHMAN  B UW1 TH - M AH0 N\nBOOTHROYD  B UW1 - TH R OY2 D\nBOOTHS  B UW1 TH S\nBOOTIE  B UW1 - T IY0\nBOOTIES  B UW1 - T IY0 Z\nBOOTING  B UW1 - T IH0 NG\nBOOTLEG  B UW1 T - L EH2 G\nBOOTLEGGER  B UW1 T - L EH2 - G ER0\nBOOTLEGGERS  B UW1 T - L EH2 - G ER0 Z\nBOOTLEGGING  B UW1 T - L EH2 - G IH0 NG\nBOOTLEGS  B UW1 T - L EH2 G Z\nBOOTON  B UW1 - T AH0 N\nBOOTS  B UW1 T S\nBOOTSTRAP  B UW1 T - S T R AE2 P\nBOOTSTRAPS  B UW1 T - S T R AE2 P S\nBOOTY  B UW1 - T IY0\nBOOTZ  B UW1 T S\nBOOZ  B UW1 Z\nBOOZE  B UW1 Z\nBOOZER  B UW1 - Z ER0\nBOOZIER  B UW1 - Z IY0 - ER0\nBOOZING  B UW1 - Z IH0 NG\nBOOZY  B UW1 - Z IY0\nBOP  B AA1 P\nBOPEEP  B OW0 - P IY1 P\nBOPERA  B OW0 - P EH1 - R AH0\nBOPHA  B OW1 - F AH0\nBOPHUTHATSWANA  B OW2 - F UW0 - TH AA0 T - S W AA1 - N AH0\nBOPP  B AA1 P\nBOPPER  B AA1 - P ER0\nBOPPERS  B AA1 - P ER0 Z\nBOQUIST  B AA1 - K W IH0 S T\nBORA  B AO1 - R AH0\nBORAH  B AO1 - R AH0\nBORAK  B AO1 - R AH0 K\nBORAL  B AO1 - R AH0 L\nBORAWSKI  B ER0 - AA1 F S - K IY0\nBORAX  B AO1 - R AE2 K S\nBORBA  B AO1 R - B AH0\nBORCHARD  B ER0 - SH AA1 R D\nBORCHARDT  B ER0 - SH AA1 R D T\nBORCHELT  B AO1 R - K IH0 L T\nBORCHERDING  B AO1 R - K ER0 - D IH0 NG\nBORCHERS  B AO1 R - K ER0 Z\nBORCHERT  B AO1 R - K ER0 T\nBORCK  B AO1 R K\nBORDA  B AO1 R - D AH0\nBORDA'S  B AO1 R - D AH0 Z\nBORDALLO  B AO0 R - D AE1 - L OW0\nBORDAS  B AO1 R - D AH0 Z\nBORDEAU  B ER0 - D OW1\nBORDEAUX  B AO0 R - D OW1\nBORDELLO  B AO0 R - D EH1 - L OW2\nBORDELON  B AO1 R - D IH0 - L AA0 N\nBORDEN  B AO1 R - D AH0 N\nBORDEN'S  B AO1 R - D AH0 N Z\nBORDENAVE  B AO1 R - D EH0 - N AA2 V\nBORDENAVE(2)  B AO0 R - D EH0 - N AA1 V\nBORDER  B AO1 R - D ER0\nBORDER'S  B AO1 R - D ER0 Z\nBORDERED  B AO1 R - D ER0 D\nBORDERING  B AO1 R - D ER0 - IH0 NG\nBORDERLINE  B AO1 R - D ER0 - L AY2 N\nBORDERS  B AO1 R - D ER0 Z\nBORDES  B AO1 R D Z\nBORDMAN  B AO1 R D - M AH0 N\nBORDNER  B AO1 R D - N ER0\nBORDONARO  B AO0 R - D OW0 - N AA1 - R OW0\nBORDWELL  B AO1 R D - W EH0 L\nBORE  B AO1 R\nBOREALIS  B AO2 - R IY0 - AE1 - L AH0 S\nBORED  B AO1 R D\nBOREDOM  B AO1 R - D AH0 M\nBOREK  B AO1 - R IH0 K\nBOREL  B AO1 - R AH0 L\nBORELL  B AO1 - R AH0 L\nBORELLA  B AO0 - R EH1 - L AH0\nBORELLI  B AO0 - R EH1 - L IY0\nBORELLO  B AO0 - R EH1 - L OW0\nBOREN  B AO1 - R AH0 N\nBOREN'S  B AO1 - R AH0 N Z\nBORENSTEIN  B AO1 - R AH0 N - S T AY2 N\nBORENSTEIN(2)  B AO1 - R AH0 N - S T IY2 N\nBORER  B AO1 - R ER0\nBORES  B AO1 R Z\nBORG  B AO1 R G\nBORGE  B AO1 R JH\nBORGELT  B AO1 R - G IH0 L T\nBORGEN  B AO1 R - G AH0 N\nBORGER  B AO1 R - G ER0\nBORGERDING  B AO1 R - G ER0 - D IH0 NG\nBORGERT  B AO1 R - G ER0 T\nBORGES  B AO1 R - G EY0 S\nBORGESON  B AO1 R - G IH0 - S AH0 N\nBORGESS  B AO1 R - G IH0 S\nBORGHI  B AO1 R - G IY0\nBORGIA  B AO1 R - JH AH0\nBORGMAN  B AO1 R G - M AH0 N\nBORGMANN  B AO1 R G - M AH0 N\nBORGMEYER  B AO1 R G - M AY0 - ER0\nBORGSTROM  B AO1 R G - S T R AH0 M\nBORGWARDT  B AO1 R - G W AO2 R T\nBORIC  B AO1 - R IH0 K\nBORIN  B AO1 - R IH0 N\nBORING  B AO1 - R IH0 NG\nBORIS  B AO1 - R IH0 S\nBORIS'  B AO1 - R IH0 S\nBORIS'S  B AO1 - R IH0 - S IH0 Z\nBORJA  B AO1 - R Y AH0\nBORJAS  B AO1 - R Y AH0 Z\nBORK  B AO1 R K\nBORK'S  B AO1 R K S\nBORKENHAGEN  B AO1 R - K IH0 N - HH AA2 - G AH0 N\nBORKENHAGEN(2)  B AO1 R - K IH0 N - HH EY2 - G AH0 N\nBORKOWSKI  B ER0 - K AO1 F S - K IY0\nBORLAND  B AO1 R - L AH0 N D\nBORLAND'S  B AO1 R - L AH0 N D Z\nBORMAN  B AO1 R - M AH0 N\nBORMAN'S  B AO1 R - M AH0 N Z\nBORMANN  B AO1 R - M AH0 N\nBORN  B AO1 R N\nBORNE  B AO1 R N\nBORNEMAN  B AO1 R N - M AH0 N\nBORNEMANN  B AO1 R N - M AH0 N\nBORNEO  B AO1 R - N IY0 - OW2\nBORNER  B AO1 R - N ER0\nBORNHOLDT  B AO1 R N - HH OW0 L T\nBORNHORST  B AO1 R N - HH AO0 R S T\nBORNMAN  B AO1 R N - M AH0 N\nBORNS  B AO1 R N Z\nBORNSTEIN  B AO1 R N - S T AY1 N\nBORNSTEIN(2)  B AO1 R N - S T IY1 N\nBORNTRAGER  B AO1 R N - T R EY0 - G ER0\nBORO  B ER1 - OW0\nBOROFF  B AO1 - R AO0 F\nBOROIAN  B AO0 - R OY1 - AH0 N\nBORON  B AO1 - R AA2 N\nBOROS  B ER1 - OW0 Z\nBOROSAGE  B AO1 - R AH0 - S IH0 JH\nBOROSKI  B ER0 - AW1 S - K IY0\nBOROUGH  B ER1 - OW2\nBOROUGH'S  B ER1 - OW2 Z\nBOROUGHS  B ER1 - OW2 Z\nBOROWIAK  B ER0 - AW1 - IY0 - AE0 K\nBOROWICZ  B ER1 - OW0 - V IH0 CH\nBOROWIEC  B ER0 - AW1 - IY0 K\nBOROWSKI  B ER0 - AO1 F S - K IY0\nBOROWSKY  B ER0 - AW1 S - K IY0\nBOROWY  B ER0 - AW1 - IY0\nBORQUEZ  B AO0 R - K W EH1 Z\nBORRAS  B AO1 - R AH0 Z\nBORRE  B AO1 R\nBORREGO  B AO0 - R EH1 - G OW0\nBORRELL  B AO0 - R EY1 L\nBORRELLI  B AO0 - R EH1 - L IY0\nBORRELLO  B AO2 - R EH1 - L OW0\nBORRERO  B AO0 - R EH1 - R OW0\nBORRIS  B AO1 - R IH0 S\nBORROFF  B AO1 - R AO0 F\nBORROR  B AO1 - ER0 R\nBORROW  B AA1 - R OW2\nBORROWED  B AA1 - R OW2 D\nBORROWER  B AA1 - R OW0 - ER0\nBORROWER'S  B AA1 - R OW0 - ER0 Z\nBORROWERS  B AA1 - R OW0 - ER0 Z\nBORROWERS'  B AO1 - R AH0 - ER0 Z\nBORROWING  B AA1 - R OW0 - IH0 NG\nBORROWINGS  B AA1 - R OW0 - IH0 NG Z\nBORROWMAN  B AA1 - R OW0 - M AH0 N\nBORROWS  B AA1 - R OW0 Z\nBORRUSO  B AO2 - R UW1 - S OW0\nBORS  B AO1 R Z\nBORSCH  B AO1 R SH\nBORSCHT  B AO1 R SH T\nBORSE  B AO1 R S\nBORSETH  B AO1 R - S IH0 TH\nBORSKI  B AO1 R S - K IY0\nBORST  B AO1 R S T\nBORSUK  B AO1 R - S AH0 K\nBORT  B AO1 R T\nBORTEL  B AO1 R - T EH2 L\nBORTEN  B AO1 R - T AH0 N\nBORTH  B AO1 R TH\nBORTHWICK  B AO1 R TH - W IH0 K\nBORTLE  B AO1 R - T AH0 L\nBORTNER  B AO1 R T - N ER0\nBORTNICK  B AO1 R T - N IH0 K\nBORTON  B AO1 R - T AH0 N\nBORTZ  B AO1 R T S\nBORUCH  B AO1 - R AH0 K\nBORUCKI  B ER0 - AH1 T S - K IY0\nBORUFF  B AO1 - R AH0 F\nBORUM  B AO1 - R AH0 M\nBORUNDA  B AO0 - R UW1 N - D AH0\nBORUP  B AO1 - R AH0 P\nBORWN  B AO1 R - W IH0 N\nBORYS  B AO1 - R IY0 Z\nBOS  B AA1 S\nBOSAK  B OW1 - S AH0 K\nBOSARGE  B AA1 - S AA0 R G\nBOSCARINO  B OW0 S - K AA0 - R IY1 - N OW0\nBOSCH  B AO1 SH\nBOSCHEE  B AO1 - SH IY0\nBOSCHEN  B AO1 - SH AH0 N\nBOSCHERT  B AO1 - SH ER0 T\nBOSCHWITZ  B AO1 SH - W IH0 T S\nBOSCIA  B OW1 S - CH AH0\nBOSCO  B AO1 - S K OW0\nBOSE  B OW1 Z\nBOSEMAN  B OW1 S - M AH0 N\nBOSENDORFER  B OW1 - Z AH0 N - D AO2 R - F ER0\nBOSER  B OW1 - Z ER0\nBOSH  B AA1 SH\nBOSHART  B AA1 - SH AA0 R T\nBOSHEARS  B AA1 - SH IH0 R Z\nBOSHELL  B AA1 - SH AH0 L\nBOSHER  B AA1 - SH ER0\nBOSHERS  B AA1 - SH ER0 Z\nBOSKIN  B AO1 - S K IH0 N\nBOSKO  B OW1 - S K OW0\nBOSKOVICH  B AA1 - S K AH0 - V IH0 CH\nBOSLEGO  B AO2 S - L EY1 - G OW0\nBOSLER  B AA1 - S AH0 - L ER0\nBOSLER(2)  B AA1 Z - L ER0\nBOSLEY  B AA1 Z - L IY0\nBOSMA  B OW1 S - M AH0\nBOSMAN  B AA1 S - M AH0 N\nBOSNIA  B AA1 Z - N IY0 - AH0\nBOSNIA'S  B AA1 Z - N IY0 - AH0 Z\nBOSNIAN  B AA1 Z - N IY0 - AH0 N\nBOSNIAN'S  B AA1 Z - N IY0 - AH0 N Z\nBOSNIANS  B AA1 Z - N IY0 - AH0 N Z\nBOSNIAS  B AA1 Z - N IY0 - AH0 Z\nBOSO  B OW1 - S OW0\nBOSOM  B UH1 - Z AH0 M\nBOSQI  B AA1 S - K IY0\nBOSQUEZ  B OW0 - S K W EH1 Z\nBOSS  B AA1 S\nBOSS'  B AO1 S\nBOSS'S  B AO1 - S IH0 Z\nBOSS(2)  B AO1 S\nBOSSARD  B AH0 - S AA1 R D\nBOSSART  B AH0 - S AA1 R T\nBOSSE  B AA1 S\nBOSSED  B AA1 S T\nBOSSEN  B AA1 - S AH0 N\nBOSSERMAN  B AO1 - S ER0 - M AH0 N\nBOSSERT  B AA1 - S ER0 T\nBOSSES  B AO1 - S IH0 Z\nBOSSES'  B AO1 - S IH0 Z\nBOSSHARDT  B AO1 S - HH AA2 R T\nBOSSHART  B AO1 S - HH AA2 R T\nBOSSI  B OW1 - S IY0\nBOSSIDY  B AO1 - S IH0 - D IY0\nBOSSIE  B AO1 - S IY0\nBOSSIER  B AO1 - S IY0 - ER0\nBOSSLER  B AA1 - S AH0 - L ER0\nBOSSLER(2)  B AA1 S - L ER0\nBOSSMAN  B AO1 S - M AH0 N\nBOSSO  B OW1 - S OW0\nBOSSY  B AO1 - S IY0\nBOST  B AA1 S T\nBOSTELMAN  B AA1 - S T AH0 L - M AH0 N\nBOSTER  B AA1 - S T ER0\nBOSTIAN  B AA1 S - CH IH0 N\nBOSTIC  B AA1 - S T IH0 K\nBOSTICK  B OW1 - S T IH0 K\nBOSTOCK  B OW1 - S T AA2 K\nBOSTON  B AA1 - S T AH0 N\nBOSTON'S  B AO1 - S T AH0 N Z\nBOSTON(2)  B AO1 - S T AH0 N\nBOSTONIAN  B AO2 - S T OW1 - N IY0 - AH0 N\nBOSTONIANS  B AA1 - S T OW0 - N IY0 - AH0 N Z\nBOSTRA  B AA1 S - T R AH0\nBOSTROM  B AA1 S - T R AH0 M\nBOSTWICK  B AA1 - S T W IH0 K\nBOSWELL  B AA1 Z - W EH0 L\nBOSWORTH  B AO1 Z - W ER0 TH\nBOTANIC  B AH0 - T AE1 - N IH0 K\nBOTANICAL  B AH0 - T AE1 - N IH0 - K AH0 L\nBOTANICALLY  B AH0 - T AE1 - N AH0 - K AH0 - L IY0\nBOTANICALLY(2)  B AH0 - T AE1 - N AH0 K - L IY0\nBOTANIST  B AA1 - T AH0 - N AH0 S T\nBOTANIST(2)  B AA1 - T AH0 - N IH0 S T\nBOTANISTS  B AA1 - T AH0 - N IH0 S T S\nBOTANISTS(2)  B AA1 - T AH0 - N IH0 S S\nBOTANISTS(3)  B AA1 - T AH0 - N IH0 S\nBOTANY  B AA1 - T AH0 - N IY0\nBOTCH  B AA1 CH\nBOTCHED  B AA1 CH T\nBOTELER  B AA1 - T AH0 L - ER0\nBOTELHO  B OW0 - T EH1 - L OW0\nBOTELLO  B OW0 - T EH1 - L OW0\nBOTERO  B OW0 - T EH1 - R OW0\nBOTFLY  B AA1 T - F L AY2\nBOTH  B OW1 TH\nBOTHA  B AA1 - TH AH0\nBOTHA'S  B AA1 - TH AH0 Z\nBOTHA'S(2)  B OW1 - T AH2 Z\nBOTHA'S(3)  B OW1 - T AH0 Z\nBOTHA(2)  B OW1 - T AH0\nBOTHA(3)  B OW1 - T AH2\nBOTHAM  B AA1 - TH AH0 M\nBOTHAM'S  B AA1 - TH AH0 M Z\nBOTHE  B OW1 DH\nBOTHELL  B AA1 - TH AH0 L\nBOTHER  B AA1 - DH ER0\nBOTHERED  B AA1 - DH ER0 D\nBOTHERING  B AA1 - DH ER0 - IH0 NG\nBOTHERS  B AA1 - DH ER0 Z\nBOTHERSOME  B AA1 - DH ER0 - S AH0 M\nBOTHUN  B AA1 - TH AH0 N\nBOTHWELL  B AA1 TH - W EH2 L\nBOTIN  B AA1 - T IH0 N\nBOTKIN  B AA1 T - K IH0 N\nBOTKINS  B AA1 T - K IH0 N Z\nBOTNER  B AA1 T - N ER0\nBOTOLF  B AA1 - T OW0 L F\nBOTOS  B OW1 - T OW0 Z\nBOTRYTIS  B AH0 - T R IH1 - T IH0 S\nBOTSFORD  B AA1 T S - F ER0 D\nBOTSHABELO  B AA2 - CH AH0 - B EH1 - L OW0\nBOTSWANA  B AA0 T - S W AA1 - N AH0\nBOTT  B AA1 T\nBOTTA  B AA1 - T AH0\nBOTTARI  B OW0 - T AA1 - R IY0\nBOTTCHER  B AA1 T - CH ER0\nBOTTEL  B AA1 - T AH0 L\nBOTTEN  B AA1 - T AH0 N\nBOTTENFIELD  B AH0 - T EH1 N - F IY0 L D\nBOTTGER  B AA1 T - G ER0\nBOTTING  B AA1 - T IH0 NG\nBOTTINI  B OW0 - T IY1 - N IY0\nBOTTINO  B OW0 - T IY1 - N OW0\nBOTTLE  B AA1 - T AH0 L\nBOTTLED  B AA1 - T AH0 L D\nBOTTLENECK  B AA1 - T AH0 L - N EH2 K\nBOTTLENECKS  B AA1 - T AH0 L - N EH2 K S\nBOTTLER  B AA1 T - L ER0\nBOTTLERS  B AA1 T - L ER0 Z\nBOTTLERS'  B AA1 T - L ER0 Z\nBOTTLES  B AA1 - T AH0 L Z\nBOTTLING  B AA1 - T AH0 L - IH0 NG\nBOTTLING(2)  B AA1 T - L IH0 NG\nBOTTOM  B AA1 - T AH0 M\nBOTTOM'S  B AA1 - T AH0 M Z\nBOTTOMED  B AA1 - T AH0 M D\nBOTTOMFISH  B AA1 - T AH0 M - F IH2 SH\nBOTTOMING  B AA1 - T AH0 - M IH0 NG\nBOTTOMLESS  B AA1 - T AH0 M - L AH0 S\nBOTTOMLEY  B AA1 - T AH0 M - L IY0\nBOTTOMS  B AA1 - T AH0 M Z\nBOTTONE  B OW0 - T OW1 - N IY0\nBOTTORF  B AA1 - T ER0 F\nBOTTORFF  B AA1 - T ER0 F\nBOTTRELL  B AA1 - T R AH0 L\nBOTTS  B AA1 T S\nBOTULISM  B AA1 - CH UW0 - L IH2 - Z AH0 M\nBOTZ  B AA1 T S\nBOUCH  B AW1 CH\nBOUCHARD  B UW0 - SH AA1 R D\nBOUCHE  B AW1 CH\nBOUCHER  B UW1 - SH AH0\nBOUCHER(2)  B AW1 - CH ER0\nBOUCHER(3)  B AO1 - CH ER0\nBOUCHEY  B UW0 - SH IY1\nBOUCHIE  B AW1 - CH IY0\nBOUCHILLON  B AW1 - CH IH0 - L AA0 N\nBOUCK  B OW1 K\nBOUDIN  B UW1 - D IH0 N\nBOUDOIN  B UW0 - D OY1 N\nBOUDOIR  B UW1 - D OY2 R\nBOUDREAU  B UW2 - D R OW1\nBOUDREAUX  B UW2 - D R OW1\nBOUFFARD  B UW0 - F AA1 R D\nBOUGAINVILLE  B UW1 - G IH0 N - V IH2 L\nBOUGAINVILLEA  B UW2 - G EY2 N - V IH1 - L IY0 - AH0\nBOUGH  B AW1\nBOUGHAN  B AW1 - AH0 N\nBOUGHER  B AW1 - ER0\nBOUGHMAN  B AW1 - M AH0 N\nBOUGHNER  B AW1 - N ER0\nBOUGHS  B AW1 Z\nBOUGHT  B AA1 T\nBOUGHT(2)  B AO1 T\nBOUGHTEN  B AO1 - T AH0 N\nBOUGHTER  B AO1 - T ER0\nBOUGHTON  B AW1 - T AH0 N\nBOUGIE  B UW1 - ZH IY2\nBOUIE  B UW0 - IY1\nBOUILLON  B UW2 - W IH1 - L AH0 N\nBOUKNIGHT  B AW1 K - N AY0 T\nBOULAIS  B UW0 - L EY1\nBOULALAS  B UW1 - L AH0 - L AH0 S\nBOULANGER  B AW1 - L AH0 - NG ER0\nBOULANGERIE  B UW2 - L AE1 NG - G ER0 - IY0\nBOULAY  B UW0 - L EY1\nBOULDEN  B UH1 - D AH0 N\nBOULDER  B OW1 L - D ER0\nBOULDERS  B OW1 L - D ER0 Z\nBOULE  B UW1 L\nBOULER  B AW1 - L ER0\nBOULET  B UW0 - L EH1 T\nBOULETTE  B UW2 - L EH1 T\nBOULEVARD  B UH1 - L AH0 - V AA2 R D\nBOULEVARDS  B UH1 - L AH0 - V AA2 R D Z\nBOULEY  B UW0 - L IY1\nBOULEZ  B UW1 - L EH2 Z\nBOULIER  B UW1 - L IY0 - ER0\nBOULLION  B UW1 - L Y AH0 N\nBOULOS  B UW0 - L OW1 Z\nBOULTER  B OW1 L - T ER0\nBOULTINGHOUSE  B AW1 L - T IH0 NG - HH AW2 S\nBOULTON  B AW1 L - T AH0 N\nBOULWARE  B AW1 L - W EH0 R\nBOUMA  B OW1 - M AH0\nBOUMAN  B UW0 - M AE1 N\nBOUNCE  B AW1 N S\nBOUNCED  B AW1 N S T\nBOUNCER  B AW1 N - S ER0\nBOUNCERS  B AW1 N - S ER0 Z\nBOUNCES  B AW1 N - S IH0 Z\nBOUNCINESS  B AW1 N - S IY0 - N AH0 S\nBOUNCING  B AW1 N - S IH0 NG\nBOUNCY  B AW1 N - S IY0\nBOUND  B AW1 N D\nBOUNDARIES  B AW1 N - D ER0 - IY0 Z\nBOUNDARIES(2)  B AW1 N - D R IY0 Z\nBOUNDARY  B AW1 N - D ER0 - IY0\nBOUNDARY(2)  B AW1 N - D R IY0\nBOUNDED  B AW1 N - D AH0 D\nBOUNDED(2)  B AW1 N - D IH0 D\nBOUNDER  B AW1 N - D ER0\nBOUNDING  B AW1 N - D IH0 NG\nBOUNDLESS  B AW1 N D - L AH0 S\nBOUNDS  B AW1 N D Z\nBOUNDY  B AW1 N - D IY0\nBOUNTIES  B AW1 N - T IY0 Z\nBOUNTIFUL  B AW1 N - T IH0 - F AH0 L\nBOUNTIFUL(2)  B AW1 - N IH0 - F AH0 L\nBOUNTY  B AW1 N - T IY0\nBOUQUET  B UW0 - K EY1\nBOUQUETS  B OW0 - K EY1 Z\nBOUQUETS(2)  B UW0 - K EY1 Z\nBOUR  B AW1 R\nBOURASSA  B UH0 - R AA1 - S AH0\nBOURBEAU  B UH0 R - B OW1\nBOURBON  B ER1 - B AH0 N\nBOURBONS  B ER1 - B AH0 N Z\nBOURCIER  B AW1 R - K IY0 - ER0\nBOURDEAU  B UH0 R - D OW1\nBOURG  B AO1 R G\nBOURGAULT  B UH0 R - G OW1\nBOURGEOIS  B UH0 R - ZH W AA1\nBOURGEOIS(2)  B UH1 R - ZH W AA0\nBOURGEOISIE  B UH2 R - ZH W AA2 - Z IY1\nBOURGET  B UH0 R - ZH EH1 T\nBOURGOIN  B UH0 R - G OY1 N\nBOURGUIBA  B AO0 R - G W IY1 - B AH0\nBOURGUIGNON  B UH2 R - G IY0 - N Y OW1 N\nBOURKE  B ER1 K\nBOURLAND  B UH0 R - L AE1 N D\nBOURN  B AO1 R N\nBOURNE  B AO1 R N\nBOURNEWOOD  B AO1 R N - W UH2 D\nBOURNIAS  B AO1 R - N IY0 - AH0 S\nBOURNONVILLE  B AO1 R - N AH0 N - V IH2 L\nBOURQUE  B UH1 R K\nBOURQUIN  B UH0 R - K W AE1 N\nBOURRET  B UH0 - R EH1 T\nBOURSE  B AO1 R S\nBOURSE'S  B AO1 R - S IH0 Z\nBOURSES  B AO1 R - S IH0 Z\nBOURSICOT  B UW1 R - S IH0 - K AO2 T\nBOURSICOT(2)  B AH1 R - S AH0 - K AO0 T\nBOUSE  B AW1 S\nBOUSKA  B UW1 - S K AH0\nBOUSMAN  B AH0 S - M AE1 N\nBOUSQUET  B UW0 - S K EH1 T\nBOUSSAC  B UW1 - S AE0 K\nBOUSTANY  B UW1 - S T AH0 - N IY0\nBOUT  B AW1 T\nBOUTELL  B UW0 - T EH1 L\nBOUTELLE  B UW2 - T EH1 L\nBOUTHILLIER  B AW1 - TH AH0 - L IY0 - ER0\nBOUTILIER  B AW1 - T AH0 - L IY0 - ER0\nBOUTIN  B UW0 - T AE1 N\nBOUTIQUE  B UW0 - T IY1 K\nBOUTIQUES  B UW0 - T IY1 K S\nBOUTON  B AW1 - T AH0 N\nBOUTROS  B UW1 - T R OW2 S\nBOUTS  B AW1 T S\nBOUTTE  B UW1 T\nBOUTWELL  B AW1 T - W EH2 L\nBOUVIER  B UW2 - V IY0 - EY1\nBOUWENS  B AW1 - AH0 N Z\nBOUWKAMP  B AW1 - K AE2 M P\nBOUWMAN  B AW1 - M AH0 N\nBOUWSMA  B UW1 Z - M AH0\nBOUYER  B OY1 - ER0\nBOUYGUES  B OY1 - ZH EY1\nBOUYGUES(2)  B OY1 - G EH1 Z\nBOUZA  B UW1 - Z AH0\nBOVA  B OW1 - V AH0\nBOVARD  B AH0 - V AA1 R D\nBOVE  B OW1 V\nBOVEE  B AH1 - V IY0\nBOVEN  B AH1 - V AH0 N\nBOVENZI  B OW0 - V EH1 N - Z IY0\nBOVERI  B OW0 - V EH1 - R IY0\nBOVESPA  B OW1 V - S P AA0\nBOVEY  B OW1 - V IY0\nBOVIK  B OW1 - V IH0 K\nBOVIN  B OW1 - V IH0 N\nBOVINE  B OW1 - V AY2 N\nBOVINO  B OW0 - V IY1 - N OW0\nBOW  B AW1\nBOW(2)  B OW1\nBOWAR  B OW1 - ER0\nBOWARD  B OW1 - ER0 D\nBOWATER  B AW1 - AH2 - T ER0\nBOWATER(2)  B OW1 - AO1 - T ER0\nBOWATER(3)  B OW1 - W AO1 - T ER0\nBOWCAN  B OW1 - K AH0 N\nBOWDEN  B OW1 - D AH0 N\nBOWDEN(2)  B AW1 - D AH0 N\nBOWDISH  B OW1 - D IH0 SH\nBOWDITCH  B OW1 - D IH0 CH\nBOWDLE  B OW1 - D AH0 L\nBOWDOIN  B OW0 - D OY1 N\nBOWE  B OW1\nBOWED  B AW1 D\nBOWED(2)  B OW1 D\nBOWEL  B AW1 - AH0 L\nBOWELL  B AA1 - W EH0 L\nBOWELS  B AW1 - AH0 L Z\nBOWELS(2)  B AW1 L Z\nBOWEN  B OW1 - AH0 N\nBOWENS  B OW1 - AH0 N Z\nBOWER  B AW1 - ER0\nBOWERMAN  B OW1 - ER0 - M AH0 N\nBOWERMASTER  B OW1 - ER0 - M AE0 - S T ER0\nBOWERS  B AW1 - ER0 Z\nBOWERSOCK  B OW0 - ER1 - S AH0 K\nBOWERSOX  B OW0 - ER1 - S AA0 K S\nBOWERY  B AW1 - ER0 - IY0\nBOWERY'S  B AW1 - ER0 - IY0 Z\nBOWES  B OW1 Z\nBOWICK  B OW1 - IH0 K\nBOWIE  B OW1 - IY0\nBOWING  B OW1 - IH0 NG\nBOWING(2)  B AW1 - IH0 NG\nBOWKER  B OW1 - K ER0\nBOWL  B OW1 L\nBOWLAND  B OW1 - L AH0 N D\nBOWLBY  B OW1 L - B IY0\nBOWLDS  B OW1 L D Z\nBOWLED  B OW1 L D\nBOWLEN  B OW1 - L AH0 N\nBOWLER  B OW1 - L ER0\nBOWLERS  B OW1 - L ER0 Z\nBOWLES  B OW1 L Z\nBOWLEY  B OW1 - L IY0\nBOWLIN  B OW1 - L IH0 N\nBOWLING  B OW1 - L IH0 NG\nBOWLING'S  B OW1 - L IH0 NG Z\nBOWLS  B OW1 L Z\nBOWLUS  B OW1 - L AH0 S\nBOWMAN  B OW1 - M AH0 N\nBOWMAN'S  B OW1 - M AH0 N Z\nBOWMEN  B OW1 - M AH0 N\nBOWMER  B OW1 - M ER0\nBOWN  B OW1 N\nBOWNDS  B OW1 N D Z\nBOWNE  B OW1 N\nBOWRING  B OW1 - R IH0 NG\nBOWRON  B OW1 - R AH0 N\nBOWRON(2)  B OW1 - R AA2 N\nBOWS  B AW1 Z\nBOWS(2)  B OW1 Z\nBOWSE  B OW1 S\nBOWSED  B AW1 Z D\nBOWSER  B OW1 - Z ER0\nBOWSES  B AW1 - Z IH0 Z\nBOWSHER  B OW1 - SH ER0\nBOWSING  B AW1 - Z IH0 NG\nBOWYER  B OW1 - Y ER0\nBOX  B AA1 K S\nBOXBERGER  B AA1 K S - B ER0 - G ER0\nBOXCAR  B AA1 K S - K AA2 R\nBOXCARS  B AA1 K S - K AA2 R Z\nBOXED  B AA1 K S T\nBOXELL  B AA1 K - S AH0 L\nBOXER  B AA1 K - S ER0\nBOXER'S  B AA1 K - S ER0 Z\nBOXERS  B AA1 K - S ER0 Z\nBOXES  B AA1 K - S AH0 Z\nBOXES(2)  B AA1 K - S IH0 Z\nBOXING  B AA1 K - S IH0 NG\nBOXING'S  B AA1 K - S IH0 NG Z\nBOXLEY  B AA1 K S - L IY0\nBOXWELL  B AA1 K S - W EH2 L\nBOXWOOD  B AA1 K S - W UH2 D\nBOXX  B AA1 K S\nBOXY  B AA1 K - S IY0\nBOY  B OY1\nBOY'S  B OY1 Z\nBOY-AR-DEE  B OY1 - AA1 R - D IY1\nBOYACK  B OY1 - AH0 K\nBOYAJIAN  B OY0 - AE1 - JH IY0 - AH0 N\nBOYAN  B OY1 - AA0 N\nBOYAR  B OW0 - Y AA1 R\nBOYCE  B OY1 S\nBOYCOTT  B OY1 - K AA2 T\nBOYCOTTED  B OY1 - K AA2 - T IH0 D\nBOYCOTTING  B OY1 - K AA2 - T IH0 NG\nBOYCOTTS  B OY1 - K AA2 T S\nBOYD  B OY1 D\nBOYD'S  B OY1 D Z\nBOYDE  B OY1 D\nBOYDEN  B OY1 - D AH0 N\nBOYDSTON  B OY1 D - S T AH0 N\nBOYDSTUN  B OY1 D - S T AH0 N\nBOYE  B OY1\nBOYEA  B OY1 - IY0 - AH0\nBOYER  B OY1 - ER0\nBOYERS  B OY1 - ER0 Z\nBOYES  B OY1 Z\nBOYETT  B OY1 - IH0 T\nBOYETTE  B OY1 - EH1 T\nBOYFRIEND  B OY1 - F R EH2 N D\nBOYFRIENDS  B OY1 - F R EH2 N D Z\nBOYFRIENDS(2)  B OY1 - F R EH2 N Z\nBOYHOOD  B OY1 - HH UH2 D\nBOYINGTON  B OY1 - IH0 NG - T AH0 N\nBOYISH  B OY1 - IH0 SH\nBOYKIN  B OY1 - K IH0 N\nBOYKINS  B OY1 - K IH0 N Z\nBOYKO  B OY1 - K OW0\nBOYLAN  B OY1 - L AH0 N\nBOYLAND  B OY1 - L AH0 N D\nBOYLE  B OY1 L\nBOYLEN  B OY1 - L AH0 N\nBOYLES  B OY1 L Z\nBOYLLS  B OY1 L Z\nBOYLSTON  B OY1 L - S T AH0 N\nBOYLSTON'S  B OY1 L - S T AH0 N Z\nBOYNE  B OY1 N\nBOYNTON  B OY1 N - T AH0 N\nBOYS  B OY1 Z\nBOYS'  B OY1 Z\nBOYSEL  B OY1 - S AH0 L\nBOYSEN  B OY1 - S AH0 N\nBOYSON  B OY1 - Z AH0 N\nBOYT  B OY1 T\nBOYTE  B OY1 T\nBOYTER  B OY1 - T ER0\nBOYUM  B OY0 - AH1 M\nBOYZ  B OY1 Z\nBOZA  B OW1 - Z AH0\nBOZARD  B AH0 - Z AA1 R D\nBOZARTH  B AA1 - Z ER0 TH\nBOZE  B OW1 Z\nBOZEK  B OW1 - Z EH0 K\nBOZELL  B OW0 - Z EH1 L\nBOZELL'S  B OW0 - Z EH1 L Z\nBOZEMAN  B OW1 Z - M AH0 N\nBOZIAN  B OW1 - Z IY0 - AH0 N\nBOZIC  B AA1 - Z IH0 K\nBOZICH  B AA1 - Z IH0 HH\nBOZMAN  B AA1 Z - M AH0 N\nBOZO  B OW1 - Z OW2\nBOZOS  B OW1 - Z OW2 Z\nBOZTEPE  B AA0 Z - T EH1 P\nBOZTEPE(2)  B OW0 Z - T EH1 P\nBOZTEPE(3)  B AA0 Z - T EH1 - P IY0\nBOZTEPE(4)  B OW0 Z - T EH1 - P IY0\nBOZZA  B AA1 - Z AH0\nBOZZI  B AA1 - Z IY0\nBOZZO  B AA1 - Z OW0\nBRA  B R AA1\nBRAAKSMA  B R AA1 K S - M AH0\nBRAASCH  B R AA1 SH\nBRAATEN  B R AA1 - EY0 - T AH0 N\nBRAATZ  B R AA1 T S\nBRABANT  B R AA1 - B AH0 N T\nBRABEC  B R AA1 - B IH0 K\nBRABENDER  B R AE1 - B EH0 N - D ER0\nBRABHAM  B R AE1 B - HH AH0 M\nBRABSON  B R AE1 B - S AH0 N\nBRAC  B R AE1 K\nBRACAMONTE  B R AE2 - K AH0 - M AA1 N - T IY0\nBRACAMONTE'S  B R AE2 - K AH0 - M AA1 N - T IY0 Z\nBRACAMONTES  B R AE2 - K AH0 - M AA1 N - T IY0 Z\nBRACCI  B R AA1 - CH IY0\nBRACCO  B R AE1 - K OW0\nBRACE  B R EY1 S\nBRACE'S  B R EY1 - S IH0 Z\nBRACED  B R EY1 S T\nBRACELET  B R EY1 S - L AH0 T\nBRACELETS  B R EY1 S - L IH0 T S\nBRACER  B R EY1 - S ER0\nBRACERO  B R AA0 - CH EH1 - R OW0\nBRACES  B R EY1 - S AH0 Z\nBRACES(2)  B R EY1 - S IH0 Z\nBRACEWELL  B R EY1 S - W EH2 L\nBRACEY  B R EY1 - S IY0\nBRACH  B R AE1 CH\nBRACHER  B R AE1 - K ER0\nBRACHER'S  B R AE1 - K ER0 Z\nBRACHFELD  B R AA1 K - F EH2 L D\nBRACHIOPOD  B R EY1 - K IY0 - AH0 - P AA2 D\nBRACHIOPODS  B R EY1 - K IY0 - AH0 - P AA2 D Z\nBRACHT  B R AE1 K T\nBRACING  B R EY1 - S IH0 NG\nBRACINGLY  B R EY1 - S IH0 NG - G L IY0\nBRACK  B R AE1 K\nBRACKBILL  B R AE1 K - B AH0 L\nBRACKEEN  B R AH0 - K IY1 N\nBRACKEN  B R AE1 - K AH0 N\nBRACKENBURY  B R AE1 - K AH0 N - B EH2 - R IY0\nBRACKENS  B R AE1 - K AH0 N Z\nBRACKER  B R AE1 - K ER0\nBRACKET  B R AE1 - K IH0 T\nBRACKETS  B R AE1 - K AH0 T S\nBRACKETS(2)  B R AE1 - K IH0 T S\nBRACKETT  B R AE1 - K IH0 T\nBRACKIN  B R AE1 - K IH0 N\nBRACKINS  B R AE1 - K IH0 N Z\nBRACKISH  B R AE1 - K IH0 SH\nBRACKMAN  B R AE1 K - M AH0 N\nBRACKNELL  B R AE0 K - N EH1 L\nBRACKNEY  B R AE1 K - N IY0\nBRACY  B R EY1 - S IY0\nBRAD  B R AE1 D\nBRAD'S  B R AE1 D Z\nBRADBERRY  B R AE1 D - B EH2 - R IY0\nBRADBURN  B R AE1 D - B ER2 N\nBRADBURY  B R AE1 D - B EH2 - R IY0\nBRADCO  B R AE1 D - K OW0\nBRADDOCK  B R AE1 - D AH0 K\nBRADDY  B R AE1 - D IY0\nBRADEEN  B R AH0 - D IY1 N\nBRADEMAS  B R AH0 - D EY1 - M AH0 S\nBRADEN  B R EY1 - D AH0 N\nBRADENTON  B R AE1 - D AH0 N - T AH0 N\nBRADER  B R AE1 - D ER0\nBRADFIELD  B R AE1 D - F IY0 L D\nBRADFORD  B R AE1 D - F ER0 D\nBRADFORD'S  B R AE1 D - F ER0 D Z\nBRADFORDS  B R AE1 D - F ER0 D Z\nBRADHAM  B R AE1 D - HH AH0 M\nBRADISH  B R AE1 - D IH0 SH\nBRADLEE  B R AE1 D - L IY2\nBRADLEES  B R AE1 D - L IY2 Z\nBRADLEY  B R AE1 D - L IY0\nBRADLEY'S  B R AE1 D - L IY0 Z\nBRADLEYS  B R AE1 D - L IY0 Z\nBRADNER  B R AE1 D - N ER0\nBRADNEY  B R AE1 D - N IY0\nBRADSHAW  B R AE1 D - SH AO2\nBRADSHER  B R AE1 D - SH ER0\nBRADSTREET  B R AE1 D - S T R IY2 T\nBRADSTREET'S  B R AE1 D - S T R IY2 T S\nBRADT  B R AE1 D T\nBRADTKE  B R AE1 D - K IY0\nBRADTMILLER  B R AE1 T - M IH2 - L ER0\nBRADWAY  B R AE1 D - W EY2\nBRADWELL  B R AE1 D - W EH2 L\nBRADY  B R EY1 - D IY0\nBRADY'S  B R EY1 - D IY0 Z\nBRADYCARDIA  B R AE2 - D AH0 - K AA1 R - D IY0 - AH0\nBRADYCARDIA(2)  B R AE2 - D IH0 - K AA1 R - D IY0 - AH0\nBRADYKININ  B R AH0 - D IH1 - K IH0 - N IH0 N\nBRADYS  B R EY1 - D IY0 Z\nBRAE  B R EY1\nBRAENDSTROEM  B R AE1 N D - S T R OW0 M\nBRAER  B R EY1 R\nBRAFF  B R AE1 F\nBRAFFORD  B R AE1 - F ER0 D\nBRAG  B R AE1 G\nBRAGA  B R AA1 - G AH0\nBRAGAN  B R EY1 - G AH0 N\nBRAGDON  B R AE1 G - D AH0 N\nBRAGER  B R EY1 - G ER0\nBRAGG  B R AE1 G\nBRAGGADOCIO  B R AE2 - G AH0 - D OW1 - SH IY0 - OW2\nBRAGGED  B R AE1 G D\nBRAGGER  B R AE1 - G ER0\nBRAGGERS  B R AE1 - G ER0 Z\nBRAGGING  B R AE1 - G IH0 NG\nBRAGGIOTTI  B R AE2 - Z IY0 - AA1 - T IY0\nBRAGGS  B R AE1 G Z\nBRAGS  B R AE1 G Z\nBRAHAM  B R AE1 - HH AH0 M\nBRAHM  B R AA1 M\nBRAHMIN  B R AA1 - M IH0 N\nBRAHMS  B R AA1 M Z\nBRAHMS'S  B R AA1 M - Z IH0 Z\nBRAID  B R EY1 D\nBRAIDED  B R EY1 - D IH0 D\nBRAIDING  B R EY1 - D IH0 NG\nBRAIDS  B R EY1 D Z\nBRAIDWOOD  B R EY1 D - W UH2 D\nBRAILEY  B R EY1 - L IY0\nBRAILLE  B R EY1 L\nBRAILLES  B R EY1 L Z\nBRAILSFORD  B R EY1 L S - F ER0 D\nBRAIN  B R EY1 N\nBRAIN'S  B R EY1 N Z\nBRAINARD  B R EY1 - N ER0 D\nBRAINCHILD  B R EY1 N - CH AY2 L D\nBRAINED  B R EY1 N D\nBRAINER  B R EY1 - N ER0\nBRAINERD  B R EY1 - N ER0 D\nBRAINLESS  B R EY1 N - L IH0 S\nBRAINPOWER  B R EY1 N - P AW2 - ER0\nBRAINS  B R EY1 N Z\nBRAINSTORM  B R EY1 N - S T AO2 R M\nBRAINSTORMING  B R EY1 N - S T AO2 R - M IH0 NG\nBRAINTREE  B R EY1 N - T R IY2\nBRAINWASH  B R EY1 N - W AA2 SH\nBRAINWASHED  B R EY1 N - W AA2 SH T\nBRAINWASHING  B R EY1 N - W AA2 - SH IH0 NG\nBRAINY  B R EY1 - N IY0\nBRAISE  B R EY1 Z\nBRAISED  B R EY1 Z D\nBRAITHWAITE  B R EY1 TH - W EY2 T\nBRAJDAS  B R AY1 - D AH0 S\nBRAJOVIC  B R AA1 - JH OW0 - V IH0 CH\nBRAKE  B R EY1 K\nBRAKEBILL  B R EY1 K - B IH2 L\nBRAKED  B R EY1 K T\nBRAKEFIELD  B R EY1 K - F IY2 L D\nBRAKEMAN  B R EY1 K - M AH0 N\nBRAKEMEN  B R EY1 K - M EH0 N\nBRAKER  B R EY1 - K ER0\nBRAKES  B R EY1 K S\nBRAKING  B R EY1 - K IH0 NG\nBRAKKE  B R AE1 K\nBRALEY  B R AE1 - L IY0\nBRALLEY  B R AE1 - L IY0\nBRALLIER  B R AE1 - L IY0 - ER0\nBRALORNE  B R AE1 - L AO0 R N\nBRALY  B R AA1 - L IY0\nBRAM  B R AE1 M\nBRAMAH  B R AA1 - M AH0\nBRAMALEA  B R AE2 - M AH0 - L IY1 - AH0\nBRAMALEA'S  B R AE1 - M AH0 - L IY2 Z\nBRAMAN  B R EY1 - M AH0 N\nBRAMBILA  B R AA0 M - B IY1 - L AH0\nBRAMBLE  B R AE1 M - B AH0 L\nBRAMBLES  B R AE1 M - B AH0 L Z\nBRAMBLETT  B R AE1 M - B L IH0 T\nBRAME  B R EY1 M\nBRAMEL  B R AE1 - M AH0 L\nBRAMER  B R EY1 - M ER0\nBRAMHALL  B R AE1 M - HH AH0 L\nBRAMLAGE  B R AE1 M - L IH0 JH\nBRAMLET  B R AE1 M - L IH0 T\nBRAMLETT  B R AE1 M - L IH0 T\nBRAMLETTE  B R AE2 M - L EH1 T\nBRAMLEY  B R AE1 M - L IY0\nBRAMMEIER  B R AE1 - M AY0 - ER0\nBRAMMER  B R AE1 - M ER0\nBRAMPTON  B R AE1 M P - T AH0 N\nBRAMS  B R AE1 M Z\nBRAMSON  B R AE1 M - S AH0 N\nBRAMWELL  B R AE1 M - W EH2 L\nBRAN  B R AE1 N\nBRANAGAN  B R AE1 - N AH0 - G AE0 N\nBRANAGH  B R AE1 - N AH0 G\nBRANAM  B R AE1 - N AH0 M\nBRANAMAN  B R AE1 - N AH0 - M AH0 N\nBRANAN  B R EY1 - N AH0 N\nBRANCA  B R AE1 NG - K AH0\nBRANCACCIO  B R AA0 N - K AA1 - CH IY0 - OW0\nBRANCATO  B R AA0 N - K AA1 - T OW0\nBRANCH  B R AE1 N CH\nBRANCH'S  B R AE1 N - CH IH0 Z\nBRANCHE  B R AE1 N CH\nBRANCHEAU  B R AH0 N - SH OW1\nBRANCHED  B R AE1 N CH T\nBRANCHES  B R AE1 N - CH AH0 Z\nBRANCHES(2)  B R AE1 N - CH IH0 Z\nBRANCHING  B R AE1 N - CH IH0 NG\nBRANCHLET  B R AE1 N CH - L AH0 T\nBRANCHLETS  B R AE1 N CH - L AH0 T S\nBRANCO  B R AE1 NG - K OW0\nBRAND  B R AE1 N D\nBRAND'S  B R AE1 N D Z\nBRANDA  B R AE1 N - D AH0\nBRANDAU  B R AE1 N - D AW0\nBRANDE  B R AE1 N D\nBRANDEBERRY  B R AE1 N D - B EH0 - R IY0\nBRANDED  B R AE1 N - D IH0 D\nBRANDEIS  B R AE1 N - D AY0 S\nBRANDEL  B R AE1 N - D AH0 L\nBRANDEN  B R AE1 N - D AH0 N\nBRANDENBERG  B R AE1 N - D AH0 N - B ER0 G\nBRANDENBERGER  B R AE1 N - D AH0 N - B ER0 - G ER0\nBRANDENBURG  B R AE1 N - D AH0 N - B ER0 G\nBRANDENBURGER  B R AE1 N - D AH0 N - B ER0 - G ER0\nBRANDENSTEIN  B R AE1 N - D EH0 N - S T AY2 N\nBRANDENSTEIN(2)  B R AE1 N - D EH0 N - S T IY2 N\nBRANDER  B R AE1 N - D ER0\nBRANDES  B R AE1 N D Z\nBRANDFORD  B R AE1 N D - F ER0 D\nBRANDHORST  B R AE1 N D - HH AO0 R S T\nBRANDI  B R AE1 N - D IY0\nBRANDING  B R AE1 N - D IH0 NG\nBRANDIS  B R AE1 N - D IH0 S\nBRANDISH  B R AE1 N - D IH0 SH\nBRANDISHED  B R AE1 N - D IH0 SH T\nBRANDISHES  B R AE1 N - D IH0 - SH IH0 Z\nBRANDISHING  B R AE1 N - D IH0 - SH IH0 NG\nBRANDL  B R AE1 N - D AH0 L\nBRANDLE  B R AE1 N - D AH0 L\nBRANDNAME  B R AE1 N D - N EY2 M\nBRANDNER  B R AE1 N D - N ER0\nBRANDO  B R AE1 N - D OW0\nBRANDO'S  B R AE1 N - D OW0 Z\nBRANDON  B R AE1 N - D AH0 N\nBRANDON'S  B R AE1 N - D AH0 N Z\nBRANDOW  B R AE1 N - D AW2\nBRANDS  B R AE1 N D Z\nBRANDS'  B R AE1 N D Z\nBRANDS'S  B R AE1 N D - Z IH0 Z\nBRANDSTETTER  B R AE1 N D - S T IH0 - T ER0\nBRANDT  B R AE1 N T\nBRANDTNER  B R AE1 N T - N ER0\nBRANDVOLD  B R AE1 N D - V OW2 L D\nBRANDWEIN  B R AE1 N D - W AY2 N\nBRANDY  B R AE1 N - D IY0\nBRANDYWINE  B R AE1 N - D IY0 - W AY2 N\nBRANER  B R EY1 - N ER0\nBRANFORD  B R AE1 N - F ER0 D\nBRANHAM  B R AE1 N - HH AH0 M\nBRANI  B R AE1 NG - K IY0\nBRANIFF  B R AE1 - N IH0 F\nBRANIFF'S  B R AE1 - N IH0 F S\nBRANIGAN  B R AE1 - N IH0 - G AH0 N\nBRANIN  B R AE1 - N IH0 N\nBRANISLOV  B R AE1 - N IH0 - S L AA2 V\nBRANITZKY  B R AH0 - N IH1 T S - K IY1\nBRANK  B R AE1 NG K\nBRANKO  B R AE1 NG - K OW0\nBRANN  B R AE1 N\nBRANNA  B R AE1 - N AH0\nBRANNAM  B R AE1 - N AH0 M\nBRANNAN  B R AE1 - N AH0 N\nBRANNEN  B R AE1 - N AH0 N\nBRANNER  B R AE1 - N ER0\nBRANNICK  B R AE1 - N IH0 K\nBRANNIGAN  B R AE1 - N IH0 - G AH0 N\nBRANNING  B R AE1 - N IH0 NG\nBRANNOCK  B R AE1 - N AH0 K\nBRANNON  B R AE1 - N AH0 N\nBRANNUM  B R AE1 - N AH0 M\nBRANON  B R AE1 - N AH0 N\nBRANSCOM  B R AE1 N S - K AH0 M\nBRANSCOMB  B R AE1 N S - K AH0 M\nBRANSCOME  B R AE1 N Z - K AH2 M\nBRANSCUM  B R AE1 N S - K AH0 M\nBRANSFIELD  B R AE1 N Z - F IY2 L D\nBRANSFORD  B R AE1 N S - F ER0 D\nBRANSOM  B R AE1 N - S AH0 M\nBRANSON  B R AE1 N - S AH0 N\nBRANSON'S  B R AE1 N - S AH2 N Z\nBRANSTAD  B R AE1 N - S T AE2 D\nBRANSTETTER  B R AE1 N - S T IH0 - T ER0\nBRANT  B R AE1 N T\nBRANTLEY  B R AE1 N T - L IY0\nBRANTLY  B R AE1 N T - L IY0\nBRANTNER  B R AE1 N T - N ER0\nBRANTON  B R AE1 N - T AH0 N\nBRANUM  B R AE1 - N AH0 M\nBRANYON  B R AE1 - N Y AH0 N\nBRANZ  B R AE1 N Z\nBRAQUE  B R AE1 K\nBRAS  B R AE1 S\nBRAS(2)  B R AA1 S\nBRASCADE  B R AH0 - S K EY1 D\nBRASCAN  B R AE1 S - K AH0 N\nBRASCH  B R AE1 SH\nBRASE  B R EY1 Z\nBRASEL  B R AE1 - S AH0 L\nBRASELTON  B R AH0 - S EH1 L - T AH0 N\nBRASFIELD  B R AE1 S - F IY0 L D\nBRASH  B R AE1 SH\nBRASHEAR  B R AE1 - SH IH0 R\nBRASHEARS  B R AE1 - SH IH0 R Z\nBRASHER  B R AE1 - SH ER0\nBRASHERS  B R AE1 - SH ER0 Z\nBRASHIER  B R AE1 - SH IY0 - ER0\nBRASHNESS  B R AE1 SH - N AH0 S\nBRASIL  B R AE1 - S AH0 L\nBRASIL(2)  B R AH0 - S IY1 L\nBRASILIA  B R AH0 - Z IH1 - L Y AH0\nBRASILIA(2)  B R AH0 - S IH1 - L Y AH0\nBRASINGTON  B R AE1 - S IH0 NG - T AH0 N\nBRASOW  B R AE1 - S OW0\nBRASOW(2)  B R AE1 - Z OW0\nBRASS  B R AE1 S\nBRASSARD  B R AE1 - S ER0 D\nBRASSEAUX  B R AH0 - S OW1\nBRASSELL  B R AE1 - S AH0 L\nBRASSERIE  B R AE1 - S ER0 - IY0\nBRASSEUR  B R AE1 - S ER0\nBRASSFIELD  B R AE1 S - F IY2 L D\nBRASSO  B R AE1 - S OW0\nBRASSO'S  B R AE1 - S OW0 Z\nBRASSY  B R AE1 - S IY0\nBRASWELL  B R AE1 S - W EH0 L\nBRAT  B R AE1 T\nBRATCHER  B R AE1 - CH ER0\nBRATON  B R AE1 - T IH0 N\nBRATS  B R AE1 T S\nBRATSCH  B R AE1 CH\nBRATT  B R AE1 T\nBRATTAIN  B R AH0 - T EY1 N\nBRATTASLAVA  B R AA2 - T AH0 S - L AA1 - V AH0\nBRATTASLAVA'S  B R AA2 - T AH0 S - L AA1 - V AH0 Z\nBRATTEN  B R AE1 - T AH0 N\nBRATTIN  B R AE1 - T IH0 N\nBRATTLE  B R AE1 - T AH0 L\nBRATTON  B R AE1 - T AH0 N\nBRATWURST  B R AE1 T - W ER0 S T\nBRATZ  B R AE1 T S\nBRAU  B R AW1\nBRAUCH  B R AO1 CH\nBRAUCHER  B R AO1 - CH ER0\nBRAUCHLI  B R AO1 CH - L IY0\nBRAUD  B R AO1 D\nBRAUDE  B R AO1 D\nBRAUER  B R AW1 - ER0\nBRAUGHTON  B R AO1 - T AH0 N\nBRAULT  B R AO1 L T\nBRAUN  B R AO1 N\nBRAUN'S  B R AO1 N Z\nBRAUND  B R AO1 N D\nBRAUNE  B R AO1 N\nBRAUNER  B R AO1 - N ER0\nBRAUNS  B R AO1 N Z\nBRAUNSCHWEIG  B R AW1 N SH - W AY0 G\nBRAUNSTEIN  B R AO1 N - S T IY2 N\nBRAUNSTEIN(2)  B R AO1 N - S T AY2 N\nBRAUNWALD  B R AO1 N - W AO2 L D\nBRAUSE  B R AO1 Z\nBRAUTIGAM  B R OW1 - T IH0 - G AH0 M\nBRAUTIGAMS  B R AO1 - T IH0 - G AE0 M Z\nBRAVADO  B R AH0 - V AA1 - D OW0\nBRAVE  B R EY1 V\nBRAVED  B R EY1 V D\nBRAVEHEART  B R EY1 V - HH AA0 R T\nBRAVELY  B R EY1 V - L IY0\nBRAVER  B R EY1 - V ER0\nBRAVERMAN  B R EY1 - V ER0 - M AH0 N\nBRAVERY  B R EY1 - V ER0 - IY0\nBRAVES  B R EY1 V Z\nBRAVES'  B R EY1 V Z\nBRAVEST  B R EY1 - V AH0 S T\nBRAVING  B R EY1 - V IH0 NG\nBRAVO  B R AA1 - V OW0\nBRAVURA  B R AH0 - V Y UH1 - R AH0\nBRAWER  B R AO1 - ER0\nBRAWL  B R AO1 L\nBRAWLEY  B R AO1 - L IY0\nBRAWLING  B R AO1 - L IH0 NG\nBRAWLS  B R AO1 L Z\nBRAWN  B R AO1 N\nBRAWNER  B R AO1 - N ER0\nBRAWNY  B R AO1 - N IY0\nBRAXTON  B R AE1 K - S T AH0 N\nBRAY  B R EY1\nBRAYBOY  B R EY1 - B OY2\nBRAYER  B R EY1 - ER0\nBRAYFIELD  B R EY1 - F IY2 L D\nBRAYMAN  B R EY1 - M AH0 N\nBRAYTON  B R EY1 - T AH0 N\nBRAZ  B R AE1 Z\nBRAZDA  B R AE1 Z - D AH0\nBRAZEAL  B R AH0 - Z IY1 L\nBRAZEAU  B R AH0 - Z OW1\nBRAZEE  B R AE1 - Z IY0\nBRAZEL  B R AE1 - Z AH0 L\nBRAZELL  B R AE1 - Z AH0 L\nBRAZELTON  B R AH0 - Z EH1 L - T AH0 N\nBRAZEN  B R EY1 - Z AH0 N\nBRAZENLY  B R EY1 - Z AH0 N - L IY0\nBRAZIEL  B R AH0 - Z IY1 L\nBRAZIER  B R EY1 - Z IY0 - ER0\nBRAZIERS  B R EY1 - ZH ER0 Z\nBRAZIL  B R AH0 - Z IH1 L\nBRAZIL'S  B R AH0 - Z IH1 L Z\nBRAZILE  B R AA1 - Z AY0 L\nBRAZILIAN  B R AH0 - Z IH1 - L Y AH0 N\nBRAZILIANS  B R AH0 - Z IH1 - L Y AH0 N Z\nBRAZILL  B R AE1 - Z AH0 L\nBRAZOS  B R AA1 - Z OW0 S\nBRAZZAVILLE  B R AE1 - Z AH0 - V IH0 L\nBRAZZEL  B R AE1 - Z AH0 L\nBRAZZELL  B R AE1 - Z AH0 L\nBRCA  B R IH1 - K AH0\nBRCKO  B ER1 CH - K OW0\nBRCKO'S  B ER1 CH - K OW0 Z\nBREA  B R IY1\nBREACH  B R IY1 CH\nBREACHED  B R IY1 CH T\nBREACHES  B R IY1 - CH IH0 Z\nBREACHING  B R IY1 - CH IH0 NG\nBREAD  B R EH1 D\nBREADBASKET  B R EH1 D - B AE2 - S K AH0 T\nBREADBOX  B R EH1 D - B AA2 K S\nBREADED  B R EH1 - D IH0 D\nBREADFRUIT  B R EH1 D - F R UW2 T\nBREADING  B R EH1 - D IH0 NG\nBREADS  B R EH1 D Z\nBREADTH  B R EH1 D TH\nBREADWINNER  B R EH1 D - W IH2 - N ER0\nBREADWINNERS  B R EH1 D - W IH2 - N ER0 Z\nBREADY  B R EH1 - D IY0\nBREAK  B R EY1 K\nBREAKABLE  B R EY1 - K AH0 - B AH0 L\nBREAKAGE  B R EY1 - K IH0 JH\nBREAKAWAY  B R EY1 K - AH0 - W EY2\nBREAKDOWN  B R EY1 K - D AW2 N\nBREAKDOWNS  B R EY1 K - D AW2 N Z\nBREAKER  B R EY1 - K ER0\nBREAKERS  B R EY1 - K ER0 Z\nBREAKEVEN  B R EY1 - K IY2 - V AH0 N\nBREAKEY  B R EY1 - K IY0\nBREAKFAST  B R EH1 K - F AH0 S T\nBREAKFASTS  B R EH1 K - F AH0 S T S\nBREAKFIELD  B R EY1 K - F IY2 L D\nBREAKING  B R EY1 - K IH0 NG\nBREAKMATE  B R EY1 K - M EY2 T\nBREAKNECK  B R EY1 K - N EH2 K\nBREAKOUT  B R EY1 K - AW2 T\nBREAKOUTS  B R EY1 K - AW2 T S\nBREAKS  B R EY1 K S\nBREAKTHROUGH  B R EY1 K - TH R UW2\nBREAKTHROUGHS  B R EY1 K - TH R UW2 Z\nBREAKUP  B R EY1 K - AH2 P\nBREAKUPS  B R EY1 K - AH0 P S\nBREAKWATER  B R EY1 K - W AO2 - T ER0\nBREAKY  B R EY1 - K IY0\nBREAM  B R IY1 M\nBREAN  B R IY1 N\nBREARLEY  B R ER1 - L IY0\nBREAST  B R EH1 S T\nBREASTED  B R EH1 - S T AH0 D\nBREASTED(2)  B R EH1 - S T IH0 D\nBREASTFED  B R EH1 S T - F EH2 D\nBREASTFEED  B R EH1 S T - F IY0 D\nBREASTFEEDING  B R EH1 S T - F IY0 - D IH0 NG\nBREASTFEEDING'S  B R EH1 S T - F IY0 - D IH0 NG Z\nBREASTFEEDS  B R EH1 S T - F IY0 D Z\nBREASTING  B R EH1 - S T IH0 NG\nBREASTPLATE  B R EH1 S T - P L EY2 T\nBREASTS  B R EH1 S T S\nBREATH  B R EH1 TH\nBREATHE  B R IY1 DH\nBREATHED  B R IY1 DH D\nBREATHER  B R IY1 - DH ER0\nBREATHES  B R IY1 DH Z\nBREATHING  B R IY1 - DH IH0 NG\nBREATHLESS  B R EH1 TH - L AH0 S\nBREATHLESSLY  B R EH1 TH - L AH0 S - L IY0\nBREATHS  B R EH1 TH S\nBREATHTAKING  B R EH1 TH - T EY2 - K IH0 NG\nBREATHTAKINGLY  B R EH1 TH - T EY2 - K IH0 NG - L IY0\nBREATHY  B R EH1 - TH IY0\nBREAU  B R OW1\nBREAULT  B R OW1\nBREAUX  B R OW1\nBREAUX(2)  B R UW1\nBREAZEALE  B R IY1 - Z IY2 L\nBREBACH  B R EH1 - B AH0 K\nBRECHBILL  B R EH1 K - B AH0 L\nBRECHEEN  B R EH1 - K IY0 N\nBRECHEISEN  B R EH1 - K AY0 - S AH0 N\nBRECHER  B R EH1 - K ER0\nBRECHT  B R EH1 K T\nBRECHTEL  B R EH1 K - T AH0 L\nBRECK  B R EH1 K\nBRECKENRIDGE  B R EH1 - K AH0 N - R IH2 JH\nBRECKER  B R EH1 - K ER0\nBRECO  B R EH1 - K OW0\nBRED  B R EH1 D\nBREDA  B R EY1 - D AH0\nBREDE  B R IY1 D\nBREDEN  B R IY1 - D AH0 N\nBREDESON  B R EH1 - D IH0 - S AH0 N\nBREE  B R IY1\nBREECE  B R IY1 S\nBREECH  B R IY1 CH\nBREED  B R IY1 D\nBREED'S  B R IY1 D Z\nBREEDEN  B R IY1 - D AH0 N\nBREEDEN'S  B R IY1 - D AH0 N Z\nBREEDER  B R IY1 - D ER0\nBREEDERS  B R IY1 - D ER0 Z\nBREEDERS'  B R IY1 - D ER0 Z\nBREEDING  B R IY1 - D IH0 NG\nBREEDLOVE  B R IY1 D - L AH2 V\nBREEDS  B R IY1 D Z\nBREELAND  B R IY1 - L AH0 N D\nBREEN  B R IY1 N\nBREES  B R IY1 Z\nBREESE  B R IY1 Z\nBREEZE  B R IY1 Z\nBREEZED  B R IY1 Z D\nBREEZES  B R IY1 - Z IH0 Z\nBREEZEWAY  B R IY1 Z - W EY2\nBREEZY  B R IY1 - Z IY0\nBREGE  B R IY1 JH\nBREGER  B R IY1 - G ER0\nBREGLIO  B R EH1 G - L IY0 - OW0\nBREGMAN  B R EH1 G - M AH0 N\nBREGUET  B R IY1 - G AH0 T\nBREHM  B R EH1 M\nBREHMER  B R EH1 - M ER0\nBREIDENBACH  B R AY1 - D IH0 N - B AA0 K\nBREIDENSTEIN  B R AY1 - D AH0 N - S T AY0 N\nBREIDENSTEIN(2)  B R AY1 - D AH0 N - S T IY0 N\nBREIER  B R AY1 - ER0\nBREIGHNER  B R EY1 - N ER0\nBREIGHTON  B R AY1 - T AH0 N\nBREINER  B R AY1 - N ER0\nBREINING  B R AY1 - N IH0 NG\nBREININGER  B R AY1 - N IH0 - NG ER0\nBREISCH  B R AY1 SH\nBREIT  B R IY1 T\nBREITBACH  B R AY1 T - B AA2 K\nBREITBARTH  B R AY1 T - B AA2 R TH\nBREITENBACH  B R AY1 - T IH0 N - B AA0 K\nBREITENSTEIN  B R AY1 - T AH0 N - S T AY0 N\nBREITENSTEIN(2)  B R AY1 - T AH0 N - S T IY0 N\nBREITHAUPT  B R AY1 - TH AW0 P T\nBREITKREUTZ  B R AY1 T - K R OY2 T S\nBREITLING  B R AY1 - T AH0 L - IH0 NG\nBREITLING(2)  B R AY1 T - L IH0 NG\nBREITMAN  B R AY1 T - M AH0 N\nBREITSCHWERDT  B R AY1 CH - W ER0 T\nBREITWEISER  B R AY1 T - W AY2 - S ER0\nBREITZMAN  B R AY1 T S - M AH0 N\nBREKKE  B R EH1 K\nBRELAND  B R EH1 - L AH0 N D\nBRELSFORD  B R EH1 L S - F ER0 D\nBREM  B R EH1 M\nBREMEN  B R EH1 - M AH0 N\nBREMER  B R IY1 - M ER0\nBREMMER  B R EH1 - M ER0\nBREMNER  B R EH1 M - N ER0\nBREMS  B R EH1 M Z\nBREN  B R EH1 N\nBRENDA  B R EH1 N - D AH0\nBRENDA'S  B R EH1 N - D AH0 Z\nBRENDAN  B R EH1 N - D AH0 N\nBRENDEL  B R EH1 N - D AH0 L\nBRENDEN  B R EH1 N - D AH0 N\nBRENDER  B R EH1 N - D ER0\nBRENDLE  B R EH1 N - D AH0 L\nBRENDLINGER  B R EH1 N - D AH0 L - IH0 - NG ER0\nBRENDLINGER(2)  B R EH1 N D - L IH0 - NG ER0\nBRENDOR  B R EH1 N - D ER0\nBRENDSEL  B R EH1 N D - S AH0 L\nBRENEMAN  B R IY1 N - M AH0 N\nBRENER  B R IY1 - N ER0\nBRENES  B R IY1 N Z\nBRENGLE  B R IH1 - NG AH0 L\nBRENIZER  B R EH1 - N AY0 - Z ER0\nBRENN  B R EH1 N\nBRENNA  B R EH1 - N AH0\nBRENNAN  B R EH1 - N AH0 N\nBRENNAN'S  B R EH1 - N AH0 N Z\nBRENNANS  B R EH1 - N AH0 N Z\nBRENNECKE  B R EH1 - N IH0 K\nBRENNEKE  B R EH1 - N AH0 - K IY0\nBRENNEMAN  B R EH1 N - M AH0 N\nBRENNEN  B R EH1 - N AH0 N\nBRENNER  B R EH1 - N ER0\nBRENNING  B R EH1 - N IH0 NG\nBRENSINGER  B R EH1 N - S IH0 - NG ER0\nBRENT  B R EH1 N T\nBRENTANO  B R EH2 N - T AA1 - N OW0\nBRENTANOS  B R EH2 N - T AA1 - N OW0 Z\nBRENTLINGER  B R EH1 N - T AH0 L - IH0 - NG ER0\nBRENTLINGER(2)  B R EH1 N T - L IH0 - NG ER0\nBRENTON  B R EH1 N - T AH0 N\nBRENTS  B R EH1 N T S\nBRENTWOOD  B R EH1 N T - W UH2 D\nBREON  B R IY1 - AH0 N\nBRESCA  B R EH1 S - K AH0\nBRESCIA  B R EH1 S - CH AH0\nBRESEE  B R IH0 - S IY1\nBRESETTE  B R IH0 - S EH1 T\nBRESHEARS  B R EH1 - SH IH0 R Z\nBRESLAW  B R EH1 S - L AA0\nBRESLER  B R EH1 S - L ER0\nBRESLIN  B R EH1 S - L IH0 N\nBRESLOW  B R EH1 S - L OW0\nBRESNAHAN  B R EH1 S - N AH0 - HH AE0 N\nBRESNAN  B R EH1 S - N AH0 N\nBRESNICK  B R EH1 S - N IH0 K\nBRESS  B R EH1 S\nBRESSE  B R EH1 S\nBRESSEAU  B R EH1 - S OW0\nBRESSER  B R EH1 - S ER0\nBRESSER'S  B R EH1 - S ER0 Z\nBRESSETTE  B R EH2 - S EH1 T\nBRESSLER  B R EH1 S - L ER0\nBRESSMAN  B R EH1 S - M AH0 N\nBRESSON  B R EH1 - S AH0 N\nBREST  B R EH1 S T\nBRESTER  B R EH1 - S T ER0\nBRET  B R EH1 T\nBRETH  B R EH1 TH\nBRETHAUER  B R EH1 - TH AW0 - ER0\nBRETHEN  B R IY1 - TH AH0 N\nBRETHREN  B R EH1 - DH R AH0 N\nBRETON  B R EH1 - T AH0 N\nBRETSCHNEIDER  B R EH1 CH - N AY0 - D ER0\nBRETT  B R EH1 T\nBRETTHAUER  B R EH1 - TH AW0 - ER0\nBRETTON  B R EH1 - T AH0 N\nBRETTS  B R EH1 T S\nBRETTSCHNEIDER  B R EH1 CH - N AY2 - D ER0\nBRETTSCHNEIDER(2)  B R EH1 T S - N AY2 - D ER0\nBRETZ  B R EH1 T S\nBREUER  B R UW1 - ER0\nBREUNIG  B R UW1 - N IH0 G\nBREUNINGER  B R UW1 - N IH0 - NG ER0\nBREVARD  B R EH1 - V ER0 D\nBREVETS  B R AH0 - V EH1 T S\nBREVIG  B R EH1 - V IH0 G\nBREVIK  B R EH1 - V IH0 K\nBREVITY  B R EH1 - V AH0 - T IY0\nBREW  B R UW1\nBREWBAKER  B R UW1 - B EY2 - K ER0\nBREWED  B R UW1 D\nBREWER  B R UW1 - ER0\nBREWER'S  B R UW1 - ER0 Z\nBREWERIES  B R UW1 - ER0 - IY0 Z\nBREWERIES(2)  B R UW1 - R IY0 Z\nBREWERS  B R UW1 - ER0 Z\nBREWERS'  B R UW1 - ER0 Z\nBREWERY  B R UW1 - ER0 - IY0\nBREWING  B R UW1 - IH0 NG\nBREWINGTON  B R UW1 - IH0 NG - T AH0 N\nBREWRY  B R UW1 - R IY0\nBREWS  B R UW1 Z\nBREWSTER  B R UW1 - S T ER0\nBREWTON  B R UW1 - T AH0 N\nBREY  B R EY1\nBREYER  B R EY1 - ER0\nBREYER'S  B R EY1 - ER0 Z\nBREYFOGLE  B R EY1 - F OW2 - G AH0 L\nBREZA  B R EH1 - Z AH0\nBREZHNEV  B R EH1 Z - N AH0 V\nBREZHNEV'S  B R EH1 Z - N AH0 V Z\nBREZHNEV'S(2)  B R EH1 Z - N EH0 F S\nBREZHNEV(2)  B R EH1 Z - N EH0 F\nBREZINA  B R EH0 - Z IY1 - N AH0\nBREZINSKI  B R IH0 - Z IH1 N - S K IY0\nBRIA  B R IY1 - AH0\nBRIAN  B R AY1 - AH0 N\nBRIAN'S  B R AY1 - AH0 N Z\nBRIANA  B R IY0 - AE1 - N AH0\nBRIANA'S  B R IY0 - AE1 - N AH0 Z\nBRIANA'S(2)  B R IY0 - AA1 - N AH0 Z\nBRIANA(2)  B R IY0 - AA1 - N AH0\nBRIANCON  B R AY1 - AH0 N - S AH0 N\nBRIAND  B R AY1 - AH0 N D\nBRIANNA  B R IY0 - AE1 - N AH0\nBRIANNA'S  B R IY0 - AE1 - N AH0 Z\nBRIANT  B R AY1 - AH0 N T\nBRIAR  B R AY1 - ER0\nBRIARCLIFF  B R AY1 R K - L IH2 F\nBRIBE  B R AY1 B\nBRIBED  B R AY1 B D\nBRIBERY  B R AY1 - B ER0 - IY0\nBRIBES  B R AY1 B Z\nBRIC  B R IH1 K\nBRICCETTI  B R IH0 - CH EH1 - T IY0\nBRICCO  B R IH1 - K OW0\nBRICE  B R AY1 S\nBRICENO  B R IY0 - CH EH1 - N OW0\nBRICK  B R IH1 K\nBRICKBAT  B R IH1 K - B AE2 T\nBRICKBATS  B R IH1 K - B AE2 T S\nBRICKEL  B R IH1 - K AH0 L\nBRICKELL  B R IH1 - K AH0 L\nBRICKER  B R IH1 - K ER0\nBRICKEY  B R IH1 - K IY0\nBRICKHOUSE  B R IH1 K - HH AW2 S\nBRICKLAYER  B R IH1 K - L EY2 - ER0\nBRICKLAYERS  B R IH1 K - L EY2 - ER0 Z\nBRICKLE  B R IH1 - K AH0 L\nBRICKLER  B R IH1 K - L ER0\nBRICKLEY  B R IH1 K - L IY0\nBRICKLIN  B R IH1 K - L IH0 N\nBRICKLIN'S  B R IH1 K - L IH0 N Z\nBRICKMAN  B R IH1 K - M AH0 N\nBRICKNER  B R IH1 K - N ER0\nBRICKS  B R IH1 K S\nBRICKYARD  B R IH1 K - Y AA2 R D\nBRICOM  B R IH1 - K AH0 M\nBRIDAL  B R AY1 - D AH0 L\nBRIDE  B R AY1 D\nBRIDE'S  B R AY1 D Z\nBRIDEAU  B R IH0 - D OW1\nBRIDEGROOM  B R AY1 D - G R UW2 M\nBRIDEGROOM'S  B R AY1 D - G R UW2 M Z\nBRIDEN  B R AY1 - D AH0 N\nBRIDENBAUGH  B R IH1 - D IH0 N - B AW0\nBRIDENSTINE  B R IH1 - D IH0 N - S T IY0 N\nBRIDES  B R AY1 D Z\nBRIDESBURG  B R AY1 D Z - B AH0 R G\nBRIDESMAID  B R AY1 D Z - M EY2 D\nBRIDESMAID'S  B R AY1 D Z - M EY2 D Z\nBRIDESMAIDS  B R AY1 D Z - M EY2 D Z\nBRIDESMAIDS'  B R AY1 D Z - M EY2 D Z\nBRIDGE  B R IH1 JH\nBRIDGE'S  B R IH1 - JH IH0 Z\nBRIDGED  B R IH1 JH D\nBRIDGEFORD  B R IH1 JH - F AO0 R D\nBRIDGEFORTH  B R IH1 JH - F AO2 R TH\nBRIDGEHEAD  B R IH1 JH - HH EH2 D\nBRIDGEMAN  B R IH1 JH - M AH0 N\nBRIDGEPORT  B R IH1 JH - P AO2 R T\nBRIDGER  B R IH1 - JH ER0\nBRIDGERS  B R IH1 - JH ER0 Z\nBRIDGES  B R IH1 - JH AH0 Z\nBRIDGES(2)  B R IH1 - JH IH0 Z\nBRIDGESTONE  B R IH1 JH - S T OW2 N\nBRIDGESTONE'S  B R IH1 JH - S T OW2 N Z\nBRIDGET  B R IH1 - JH AH0 T\nBRIDGET'S  B R IH1 - JH AH0 T S\nBRIDGET(2)  B R IH1 - JH IH0 T\nBRIDGETON  B R IH1 JH - T AH0 N\nBRIDGETOWN  B R IH1 JH - T AW2 N\nBRIDGETT  B R IH1 - JH IH0 T\nBRIDGETTE  B R IH1 - JH IH0 T\nBRIDGETTE(2)  B R IH2 - JH IY1 T\nBRIDGEWATER  B R IH1 JH - W AO2 - T ER0\nBRIDGHAM  B R IH1 JH - HH AH0 M\nBRIDGING  B R IH1 - JH IH0 NG\nBRIDGMAN  B R IH1 JH - M AH0 N\nBRIDIE  B R IH1 - D IY0\nBRIDLE  B R AY1 - D AH0 L\nBRIDLED  B R AY1 - D AH0 L D\nBRIDWELL  B R IH1 D - W EH2 L\nBRIE  B R IY1\nBRIEANT  B R IY1 - AH0 N T\nBRIEF  B R IY1 F\nBRIEFCASE  B R IY1 F - K EY2 S\nBRIEFCASES  B R IY1 F - K EY2 - S IH0 Z\nBRIEFED  B R IY1 F T\nBRIEFER  B R IY1 - F ER0\nBRIEFERS  B R IY1 - F ER0 Z\nBRIEFEST  B R IY1 - F AH0 S T\nBRIEFING  B R IY1 - F IH0 NG\nBRIEFINGS  B R IY1 - F IH0 NG Z\nBRIEFLY  B R IY1 F - L IY0\nBRIEFS  B R IY1 F S\nBRIEGEL  B R IY1 - G AH0 L\nBRIEGER  B R IY1 - G ER0\nBRIEL  B R IY1 L\nBRIEN  B R AY1 - IH0 N\nBRIENZA  B R IY1 N - Z AH0\nBRIER  B R AY1 - ER0\nBRIERE  B R IH1 R\nBRIERLEY  B R AY1 - ER0 - L IY0\nBRIERLY  B R AY1 - ER0 - L IY0\nBRIESE  B R IY1 Z\nBRIETZKE  B R IY1 T S - K IY0\nBRIG  B R IH1 G\nBRIGADE  B R AH0 - G EY1 D\nBRIGADE(2)  B R IH0 - G EY1 D\nBRIGADEER  B R IH2 - G AH0 - D IH1 R\nBRIGADES  B R IH0 - G EY1 D Z\nBRIGADIER  B R IH2 - G AH0 - D IH1 R\nBRIGANCE  B R IH1 - G AH0 N S\nBRIGANDI  B R IH0 - G AE1 N - D IY0\nBRIGANTE  B R IY0 - G AA1 N - T IY0\nBRIGANTI  B R IH0 - G AE1 N - T IY0\nBRIGGS  B R IH1 G Z\nBRIGGSTONE  B R IH1 G - S T OW0 N\nBRIGHAM  B R IH1 - G AH0 M\nBRIGHAM'S  B R IH1 - G AH0 M Z\nBRIGHAMS  B R IH1 - G AH0 M Z\nBRIGHT  B R AY1 T\nBRIGHT'S  B R AY1 T S\nBRIGHTBILL  B R AY1 T - B IH2 L\nBRIGHTEN  B R AY1 - T AH0 N\nBRIGHTENED  B R AY1 - T AH0 N D\nBRIGHTENING  B R AY1 - T AH0 N - IH0 NG\nBRIGHTENING(2)  B R AY1 T - N IH0 NG\nBRIGHTENS  B R AY1 - T AH0 N Z\nBRIGHTER  B R AY1 - T ER0\nBRIGHTEST  B R AY1 - T AH0 S T\nBRIGHTLY  B R AY1 T - L IY0\nBRIGHTMAN  B R AY1 T - M AH0 N\nBRIGHTNESS  B R AY1 T - N AH0 S\nBRIGHTON  B R AY1 - T AH0 N\nBRIGHTWELL  B R AY1 T - W EH2 L\nBRIGITTE  B R IH1 - JH IH0 T\nBRIGMAN  B R IH1 G - M AH0 N\nBRIGNAC  B R IH1 G - N AH0 K\nBRIGNER  B R AY1 G - N ER0\nBRIGODE  B R IH0 - G OW1 - D AH0\nBRIGUGLIO  B R IH0 - G AH1 G - L IY0 - OW0\nBRILES  B R AY1 L Z\nBRILEY  B R IH1 - L IY0\nBRILL  B R IH1 L\nBRILLHART  B R IH1 L - HH AA2 R T\nBRILLIANCE  B R IH1 L - Y AH0 N S\nBRILLIANT  B R IH1 L - Y AH0 N T\nBRILLIANTLY  B R IH1 L - Y AH0 N T - L IY0\nBRILLSTEIN  B R IH1 L - S T IY2 N\nBRILLSTEIN(2)  B R IH1 L - S T AY2 N\nBRIM  B R IH1 M\nBRIMBERRY  B R IH1 M - B EH2 - R IY0\nBRIMELOW  B R IH1 - M AH0 - L OW0\nBRIMER  B R AY1 - M ER0\nBRIMHALL  B R IH1 M - HH AO2 L\nBRIMM  B R IH1 M\nBRIMMED  B R IH1 M D\nBRIMMER  B R IH1 - M ER0\nBRIMMING  B R IH1 - M IH0 NG\nBRIMSTONE  B R IH1 M - S T OW0 N\nBRIN  B R IH1 N\nBRINDEL  B R IH1 N - D EH2 L\nBRINDLE  B R IH1 N - D AH0 L\nBRINDLEY  B R IH1 N D - L IY0\nBRINE  B R AY1 N\nBRINEGAR  B R IH1 - N IH0 - G ER0\nBRINER  B R AY1 - N ER0\nBRINES  B R AY1 N Z\nBRINEY  B R IH1 - N IY0\nBRING  B R IH1 NG\nBRINGHURST  B R IH1 NG - HH ER0 S T\nBRINGING  B R IH1 - NG IH0 NG\nBRINGLE  B R IH1 NG - G AH0 L\nBRINGMAN  B R IH1 NG - M AH0 N\nBRINGS  B R IH1 NG Z\nBRINING  B R AY1 - N IH0 NG\nBRINK  B R IH1 NG K\nBRINK'S  B R IH1 NG K S\nBRINKER  B R IH1 NG - K ER0\nBRINKERHOFF  B R IH1 NG - K ER0 - HH AO2 F\nBRINKLEY  B R IH1 NG - K L IY0\nBRINKLY  B R IH1 NG - K L IY0\nBRINKMAN  B R IH1 NG K - M AH0 N\nBRINKMANN  B R IH1 NG K - M AH0 N\nBRINKMANN'S  B R IH1 NG K - M AH0 N Z\nBRINKMANSHIP  B R IH1 NG K - M AH0 N - SH IH2 P\nBRINKMEIER  B R IH1 NG K - M AY0 - ER0\nBRINKMEYER  B R IH1 NG K - M AY0 - ER0\nBRINKS  B R IH1 NG K S\nBRINKSMANSHIP  B R IH1 NG K S - M AH0 N - SH IH2 P\nBRINLEE  B R IH1 N - L IY0\nBRINLEY  B R IH1 N - L IY0\nBRINN  B R IH1 N\nBRINNER  B R IH1 - N ER0\nBRINSER  B R IH1 N - S ER0\nBRINSFIELD  B R IH1 N S - F IY0 L D\nBRINSON  B R IH1 N - S AH0 N\nBRINTEC  B R IH1 N - T EH2 K\nBRINTON  B R IH1 N - T AH0 N\nBRIO  B R AY1 - OW0\nBRIOCHE  B R IY2 - OW1 SH\nBRIOCHE(2)  B R IY1 - AA0 SH\nBRIODY  B R AY1 - AH0 - D IY0\nBRION  B R AY1 - AH0 N\nBRIONES  B R IY0 - OW1 - N EH0 S\nBRIQUEMONT  B R IH1 K - M AO0 N T\nBRISBANE  B R IH1 Z - B EY2 N\nBRISBIN  B R IH1 Z - B IH0 N\nBRISBOIS  B R IH0 Z - B W AA1\nBRISBOIS(2)  B R IH1 Z - B W AA2\nBRISBON  B R IH1 Z - B AH0 N\nBRISBURG  B R IH1 S - B ER0 G\nBRISCO  B R IY1 - S K OW0\nBRISCOE  B R IH1 - S K OW0\nBRISENDINE  B R IH1 - S IH0 N - D AY2 N\nBRISENO  B R IY0 - S EH1 - N OW0\nBRISENO'S  B R IY0 - S EH1 - N OW0 Z\nBRISK  B R IH1 S K\nBRISKER  B R IH1 - S K ER0\nBRISKET  B R IH1 - S K AH0 T\nBRISKEY  B R IH1 S - K IY0\nBRISKI  B R IH1 S - K IY0\nBRISKIN  B R IH1 - S K IH0 N\nBRISKLY  B R IH1 S K - L IY0\nBRISKY  B R IH1 S - K IY0\nBRISLIN  B R IH1 S - L IH0 N\nBRISON  B R IH1 - S AH0 N\nBRISSETTE  B R IH0 - S EH1 T\nBRISSEY  B R IH1 - S IY0\nBRISSON  B R IH1 - S AH0 N\nBRISTER  B R IH1 - S T ER0\nBRISTLE  B R IH1 - S AH0 L\nBRISTLED  B R IH1 - S AH0 L D\nBRISTLES  B R IH1 - S AH0 L Z\nBRISTLING  B R IH1 - S AH0 L - IH0 NG\nBRISTLING(2)  B R IH1 - S L IH0 NG\nBRISTOL  B R IH1 - S T AH0 L\nBRISTOW  B R IH1 - S T OW0\nBRIT  B R IH1 T\nBRITA  B R IY1 - T AH0\nBRITAIN  B R IH1 - T AH0 N\nBRITAIN'S  B R IH1 - T AH0 N Z\nBRITAINS  B R IH1 - T AH0 N Z\nBRITANNIA  B R IH0 - T AE1 - N IY0 - AH0\nBRITANNICA  B R IH0 - T AE1 - N IH0 - K AH0\nBRITCHER  B R IH1 - CH ER0\nBRITCHES  B R IH1 - CH AH0 Z\nBRITE  B R AY1 T\nBRITIAN  B R IH1 - SH AH0 N\nBRITISH  B R IH1 - T IH0 SH\nBRITNELL  B R IH1 T - N AH0 L\nBRITO  B R IY1 - T OW0\nBRITOIL  B R IH0 - T OY1 L\nBRITON  B R IH1 - T AH0 N\nBRITONS  B R IH1 - T AH0 N Z\nBRITONS'  B R IH1 - T AH0 N Z\nBRITS  B R IH1 T S\nBRITSCH  B R IH1 CH\nBRITT  B R IH1 T\nBRITTAIN  B R IH1 - T AH0 N\nBRITTAN  B R IH1 - T AH0 N\nBRITTANY  B R IH1 - T AH0 - N IY0\nBRITTEN  B R IH1 - T AH0 N\nBRITTENHAM  B R IH1 - T IH0 N - HH AH0 M\nBRITTIAN  B R IH1 - T IY0 - AH0 N\nBRITTIN  B R IH1 - T IH0 N\nBRITTINGHAM  B R IH1 - T IH0 NG - HH AE0 M\nBRITTLE  B R IH1 - T AH0 L\nBRITTON  B R IH1 - T AH0 N\nBRITTS  B R IH1 T S\nBRITZ  B R IH1 T S\nBRIX  B R IH1 K S\nBRIXEY  B R IH1 K - S IY0\nBRIXIUS  B R AY1 K - S IY0 - IH0 S\nBRIZENDINE  B R IY0 - Z EH0 N - D IY1 - N IY0\nBRIZILL  B R IH0 - Z IH1 L\nBRIZOLA  B R IH0 - Z OW1 - L AH0\nBRIZZI  B R IH1 - Z IY0\nBRIZZOLARA  B R IY0 T - S OW0 - L AA1 - R AH0\nBRO  B R OW1\nBRO'S  B R OW1 Z\nBROACH  B R OW1 CH\nBROACHED  B R OW1 CH T\nBROACHES  B R OW1 - CH IH0 Z\nBROACHING  B R OW1 - CH IH0 NG\nBROAD  B R AO1 D\nBROAD'S  B R AO1 D Z\nBROADAWAY  B R AO1 D - AH0 - W EY2\nBROADBAND  B R AO1 D - B AE2 N D\nBROADBASE  B R AO1 D - B EY2 S\nBROADBASED  B R AO1 D - B EY2 S T\nBROADBEACH  B R AO1 D - B IY2 CH\nBROADBENT  B R AO1 D - B EH2 N T\nBROADCAST  B R AO1 D - K AE2 S T\nBROADCASTER  B R AO1 D - K AE2 - S T ER0\nBROADCASTER'S  B R AO1 D - K AE2 - S T ER0 Z\nBROADCASTERS  B R AO1 D - K AE2 - S T ER0 Z\nBROADCASTERS'  B R AO1 D - K AE2 - S T ER0 Z\nBROADCASTING  B R AO1 D - K AE2 - S T IH0 NG\nBROADCASTING'S  B R AO1 D - K AE2 - S T IH0 NG Z\nBROADCASTS  B R AO1 D - K AE2 S T S\nBROADCASTS(2)  B R AO1 D - K AE2 S S\nBROADCASTS(3)  B R AO1 D - K AE2 S\nBROADDUS  B R AO1 - D IH0 S\nBROADEN  B R AO1 - D AH0 N\nBROADENED  B R AO1 - D AH0 N D\nBROADENING  B R AO1 - D AH0 N - IH0 NG\nBROADENING(2)  B R AO1 D - N IH0 NG\nBROADENS  B R AO1 - D AH0 N Z\nBROADER  B R AO1 - D ER0\nBROADEST  B R AO1 - D IH0 S T\nBROADHEAD  B R AO1 D - HH EH2 D\nBROADHURST  B R AO1 D - HH ER0 S T\nBROADIE  B R AO1 - D IY0\nBROADLEY  B R AO1 D - L IY0\nBROADLY  B R AO1 D - L IY0\nBROADNAX  B R AO1 D - N AE0 K S\nBROADPFOOT  B R AO1 D - F UH0 T\nBROADRICK  B R AO1 - D R IH0 K\nBROADSIDE  B R AO1 D - S AY2 D\nBROADSIDED  B R AO1 D - S AY2 - D IH0 D\nBROADSTREET  B R AO1 D - S T R IY2 T\nBROADSWORD  B R AO1 D - S AO2 R D\nBROADUS  B R OW1 - D AH0 S\nBROADVIEW  B R AO1 D - V Y UW2\nBROADWAY  B R AO1 D - W EY2\nBROADWAY'S  B R AO1 D - W EY2 Z\nBROADWELL  B R AO1 D - W EH2 L\nBROADY  B R AO1 - D IY0\nBROBDINGNAGIAN  B R AO2 B - D IH0 G - N AE1 - G IY0 - AH0 N\nBROBDINGNAGIANS  B R AO2 B - D IH0 G - N AE1 - G IY0 - AH0 N Z\nBROBECK  B R OW1 - B EH2 K\nBROBERG  B R OW1 - B ER0 G\nBROBST  B R AA1 B S T\nBROC  B R AA1 K\nBROCADE  B R OW0 - K EY1 D\nBROCADES  B R OW0 - K EY1 D Z\nBROCATO  B R OW0 - K AA1 - T OW0\nBROCCO  B R AA1 - K OW0\nBROCCOLI  B R AA1 - K AH0 - L IY0\nBROCCOLI(2)  B R AA1 K - L IY0\nBROCE  B R OW1 S\nBROCHU  B R OW1 - K UW0\nBROCHURE  B R OW0 - SH UH1 R\nBROCHURES  B R OW0 - SH UH1 R Z\nBROCIOUS  B R AH0 - SH IY1 S\nBROCK  B R AA1 K\nBROCK'S  B R AA1 K S\nBROCKBANK  B R AA1 K - B AH0 NG K\nBROCKEL  B R AA1 - K AH0 L\nBROCKER  B R AA1 - K ER0\nBROCKERT  B R AA1 - K ER0 T\nBROCKETT  B R AA1 - K IH0 T\nBROCKHAUS  B R AA1 K - HH AW2 S\nBROCKHOFF  B R AA1 K - HH AO2 F\nBROCKHOUSE  B R AA1 K - HH AW2 S\nBROCKIE  B R AA1 - K IY0\nBROCKINGTON  B R AA1 - K IH0 NG - T AH0 N\nBROCKLEHURST  B R AA1 - K AH0 L - HH ER0 S T\nBROCKLEY  B R AA1 K - L IY0\nBROCKLIN  B R AA1 K - L IH0 N\nBROCKLIN'S  B R AA1 K - L IH0 N Z\nBROCKMAN  B R AA1 K - M AH0 N\nBROCKMANN  B R AA1 K - M AH0 N\nBROCKMEIER  B R AA1 K - M AY0 - ER0\nBROCKMEYER  B R AA1 K - M AY0 - ER0\nBROCKNER  B R AA1 K - N ER0\nBROCKSMITH  B R AA1 K - S M IH2 TH\nBROCKTON  B R AA1 K - T AH0 N\nBROCKWAY  B R AA1 K - W EY2\nBROCKWAY'S  B R AA1 K - W EY2 Z\nBROCKWELL  B R AA1 K - W EH2 L\nBROD  B R AA1 D\nBRODA  B R OW1 - D AH0\nBRODBECK  B R AA1 D - B EH2 K\nBRODE  B R OW1 D\nBRODEN  B R OW1 - D AH0 N\nBRODER  B R OW1 - D ER0\nBRODER'S  B R OW1 - D ER0 Z\nBRODERBUND  B R OW1 - T ER0 - B AH0 N D\nBRODERICK  B R AA1 - D ER0 - IH0 K\nBRODERICK'S  B R AA1 - D ER0 - IH0 K Z\nBRODERICK'S(2)  B R AA1 - D R IH0 K Z\nBRODERICK(2)  B R AA1 - D R IH0 K\nBRODERSEN  B R AA1 - D ER0 - S AH0 N\nBRODERSOHN  B R OW1 - T ER0 - S AH0 N\nBRODERSON  B R AA1 - D ER0 - S AH0 N\nBRODEUR  B R AA1 - D ER0\nBRODHEAD  B R AA1 D - HH EH2 D\nBRODIE  B R OW1 - T IY0\nBRODIN  B R OW1 - D IH0 N\nBRODKIN  B R AA1 D - K IH0 N\nBRODMAN  B R AA1 D - M AH0 N\nBRODNAX  B R AA1 D - N AE0 K S\nBRODOWSKI  B R AH0 - D AO1 F S - K IY0\nBRODRICK  B R AA1 - D R IH0 K\nBRODRY  B R AA1 - D R IY0\nBRODSKY  B R AA1 D - S K IY0\nBRODT  B R AA1 D T\nBRODY  B R OW1 - D IY0\nBRODY'S  B R OW1 - D IY0 Z\nBRODZINSKI  B R AH0 - JH IH1 N - S K IY0\nBROE  B R OW1\nBROECKER  B R OW1 - K ER0\nBROEKER  B R OW1 - K ER0\nBROER  B R OW1 - ER0\nBROERMAN  B R OW1 - ER0 - M AH0 N\nBROERS  B R OW1 - ER0 Z\nBROGAN  B R OW1 - G AH0 N\nBROGDEN  B R AA1 G - D AH0 N\nBROGDON  B R AA1 G - D AH0 N\nBROGNA  B R OW1 G - N AH0\nBROICH  B R OY1 CH\nBROIL  B R OY1 L\nBROILED  B R OY1 L D\nBROILER  B R OY1 - L ER0\nBROILERS  B R OY1 - L ER0 Z\nBROILING  B R OY1 - L IH0 NG\nBROK  B R AA1 K\nBROKAW  B R OW1 - K AO0\nBROKE  B R OW1 K\nBROKEN  B R OW1 - K AH0 N\nBROKEN-WIND  B R OW1 - K AH0 N - W IH1 N D\nBROKEN-WINDED  B R OW1 - K AH0 N - W IH1 N - D IH0 D\nBROKER  B R OW1 - K ER0\nBROKER'S  B R OW1 - K ER0 Z\nBROKERAGE  B R OW1 - K ER0 - IH0 JH\nBROKERAGE'S  B R OW1 - K ER0 - IH0 - JH IH0 Z\nBROKERAGE'S(2)  B R OW1 - K R IH0 - JH IH0 Z\nBROKERAGE(2)  B R OW1 - K R IH0 JH\nBROKERAGES  B R OW1 - K ER0 - IH0 - JH IH0 Z\nBROKERAGES'  B R OW1 - K ER0 - IH0 - JH IH0 Z\nBROKERAGES'(2)  B R OW1 - K R IH0 - JH IH0 Z\nBROKERAGES(2)  B R OW1 - K R IH0 - JH IH0 Z\nBROKERED  B R OW1 - K ER0 D\nBROKERING  B R OW1 - K ER0 - IH0 NG\nBROKERS  B R OW1 - K ER0 Z\nBROKERS'  B R OW1 - K ER0 Z\nBROKING  B R OW1 - K IH0 NG\nBROLIN  B R OW1 - L IH0 N\nBROLLY  B R AA1 - L IY0\nBROM  B R AA1 M\nBROMAN  B R OW1 - M AH0 N\nBROMBERG  B R AA1 M - B ER0 G\nBROMFIELD  B R AA1 M - F IY2 L D\nBROMFIELD'S  B R AA1 M - F IY2 L D Z\nBROMIDE  B R OW1 - M AY2 D\nBROMIDES  B R OW1 - M AY2 D Z\nBROMINE  B R OW1 - M IY2 N\nBROMLEY  B R AA1 M - L IY0\nBROMM  B R AA1 M\nBROMMER  B R AA1 - M ER0\nBROMONT  B R OW1 - M AA2 N T\nBROMPHERIL  B R AA1 M - F EH0 - R IH0 L\nBROMWELL  B R AA1 M - W EH2 L\nBROMWICH  B R AA1 M - W IH0 CH\nBRONAUGH  B R AA1 - N AO0\nBRONC  B R AA1 NG K\nBRONCHIAL  B R AA1 N - CH IY0 - AH0 L\nBRONCHITIS  B R AA0 NG - K AY1 - T AH0 S\nBRONCO  B R AA1 NG - K OW0\nBRONCOS  B R AA1 NG - K OW0 Z\nBRONDER  B R AA1 N - D ER0\nBRONER  B R OW1 - N ER0\nBRONFMAN  B R AA1 N F - M AH0 N\nBRONFMAN'S  B R AA1 N F - M AH0 N Z\nBRONFMANS  B R AA1 N F - M AH0 N Z\nBRONK  B R AA1 NG K\nBRONKEMA  B R AH0 NG - K IY1 - M AH0\nBRONN  B R AA1 N\nBRONNER  B R AA1 - N ER0\nBRONS  B R AA1 N Z\nBRONSON  B R AA1 N - S AH0 N\nBRONSTEIN  B R AA1 N - S T IY2 N\nBRONSTEIN(2)  B R AA1 N - S T AY2 N\nBRONSTON  B R AA1 N - S T AH0 N\nBRONTE  B R AA1 N - T IY0\nBRONTE'S  B R AA1 N - T IY0 Z\nBRONTOSAURUS  B R AO2 N - T AH0 - S AO1 - R AH0 S\nBRONTOSAURUS(2)  B R AO2 - N AH0 - S AO1 - R AH0 S\nBRONWEN  B R AO1 N - W IH0 N\nBRONX  B R AA1 NG K S\nBRONZE  B R AA1 N Z\nBRONZED  B R AA1 N Z D\nBRONZEN  B R AA1 N - Z AH0 N\nBRONZES  B R AA1 N - Z AH0 Z\nBRONZES(2)  B R AA1 N - Z IH0 Z\nBROOCH  B R UW1 CH\nBROOCH(2)  B R OW1 CH\nBROOD  B R UW1 D\nBROODED  B R UW1 - D IH0 D\nBROODING  B R UW1 - D IH0 NG\nBROODY  B R UW1 - D IY0\nBROOK  B R UH1 K\nBROOK'S  B R UH1 K S\nBROOKBANK  B R UH1 K - B AE2 NG K\nBROOKE  B R UH1 K\nBROOKE'S  B R UH1 K S\nBROOKEHILL  B R UH1 K - HH IH2 L\nBROOKEN  B R UH1 - K AH0 N\nBROOKENS  B R UH1 - K AH0 N Z\nBROOKER  B R UH1 - K ER0\nBROOKES  B R UH1 K S\nBROOKFIELD  B R UH1 K - F IY2 L D\nBROOKHART  B R UW1 K - HH AA0 R T\nBROOKHAVEN  B R UH1 K - HH EY2 - V AH0 N\nBROOKHURST  B R UH1 K - HH ER2 S T\nBROOKING  B R UH1 - K IH0 NG\nBROOKINGS  B R UH1 - K IH0 NG Z\nBROOKINS  B R UW1 - K IH0 N Z\nBROOKLINE  B R UH1 K - L AY2 N\nBROOKLYN  B R UH1 K - L AH0 N\nBROOKLYN'S  B R UH1 K - L AH0 N Z\nBROOKLYN'S(2)  B R UH1 K - L IH0 N Z\nBROOKLYN(2)  B R UH1 K - L IH0 N\nBROOKMAN  B R UH1 K - M AH0 N\nBROOKNER  B R UH1 K - N ER0\nBROOKNER'S  B R UH1 K - N ER0 Z\nBROOKOVER  B R UH1 K - OW2 - V ER0\nBROOKS  B R UH1 K S\nBROOKS'  B R UH1 K S\nBROOKS'S  B R UH1 K - S IH0 Z\nBROOKS'S(2)  B R UH1 K S\nBROOKSHIER  B R UW1 K - SH IY0 - ER0\nBROOKSHIRE  B R UW1 K - SH AY0 R\nBROOKSIDE  B R UH1 K - S AY2 D\nBROOKSTONE  B R UH1 K - S T OW2 N\nBROOKSVILLE  B R UH1 K S - V IH0 L\nBROOKSVILLE'S  B R UH1 K S - V IH0 L Z\nBROOM  B R UW1 M\nBROOMALL  B R UW1 - M AH0 L\nBROOME  B R UW1 M\nBROOMFIELD  B R UW1 M - F IY2 L D\nBROOMS  B R UW1 M Z\nBROOMSTICK  B R UW1 M - S T IH2 K\nBROOMSTICKS  B R UW1 M - S T IH2 K S\nBROPHY  B R OW1 - F IY0\nBROSCH  B R AO1 SH\nBROSE  B R OW1 Z\nBROSH  B R AA1 SH\nBROSHEARS  B R AA1 - SH IH0 R Z\nBROSIOUS  B R OW1 - Z IY0 - AH0 S\nBROSIUS  B R OW1 - S IY0 - IH0 S\nBROSKI  B R AW1 S - K IY0\nBROSKY  B R AA1 S - K IY0\nBROSNAHAN  B R AA1 S - N AH0 - HH AE0 N\nBROSNAN  B R AA1 S - N AH0 N\nBROSS  B R AO1 S\nBROSSARD  B R AH0 - S AA1 R D\nBROSSART  B R AA1 - S AA0 R T\nBROSSEAU  B R AH0 - S OW1\nBROSSER  B R AA1 - S ER0\nBROSSETTE  B R AH0 - S EH1 T\nBROSSMAN  B R AO1 S - M AH0 N\nBROST  B R AA1 S T\nBROSTROM  B R AA1 S - T R AH0 M\nBROSZ  B R AA1 SH\nBROTEN  B R OW1 - T AH0 N\nBROTH  B R AO1 TH\nBROTHEL  B R AA1 - TH AH0 L\nBROTHELS  B R AA1 - TH AH0 L Z\nBROTHER  B R AH1 - DH ER0\nBROTHER'S  B R AH1 - DH ER0 Z\nBROTHERHOOD  B R AH1 - DH ER0 - HH UH2 D\nBROTHERLY  B R AH1 - DH ER0 - L IY0\nBROTHERS  B R AH1 - DH ER0 Z\nBROTHERS'  B R AH1 - DH ER0 Z\nBROTHERS'S  B R AH1 - DH ER0 - Z IH0 Z\nBROTHERSON  B R AH1 - DH ER0 - S AH0 N\nBROTHERTON  B R AH1 - DH ER0 - T AH0 N\nBROTHS  B R AO1 TH S\nBROTMAN  B R AA1 T - M AH0 N\nBROTT  B R AA1 T\nBROTZMAN  B R AA1 T S - M AH0 N\nBROUCEK  B R UW1 - CH EH0 K\nBROUDY  B R AW1 - D IY0\nBROUGH  B R AW1\nBROUGHAM  B R UW1 G - AH0 M\nBROUGHER  B R AW1 - ER0\nBROUGHMAN  B R AW1 - M AH0 N\nBROUGHT  B R AO1 T\nBROUGHTON  B R AO1 - T AH0 N\nBROUHAHA  B R UW1 - HH AA0 - HH AA0\nBROUHARD  B R AA1 - UW0 - ER0 D\nBROUILLARD  B R W IY0 - L AA1 R D\nBROUILLET  B R W IY0 - L EH1 T\nBROUILLETTE  B R W IY0 - L EH1 T\nBROUN  B R UW1 N\nBROUNTAS  B R AW1 N - T AH0 S\nBROUSE  B R AW1 S\nBROUSSARD  B R UW0 - S AA1 R D\nBROUSSEAU  B R UW2 - S OW1\nBROUSSET  B R UW1 - S EH0 T\nBROUWER  B R AW1 - W ER0\nBROW  B R AW1\nBROWARD  B R AW1 - ER0 D\nBROWBEAT  B R AW1 - B IY2 T\nBROWDER  B R AW1 - D ER0\nBROWE  B R OW1\nBROWED  B R AW1 D\nBROWER  B R AW1 - ER0\nBROWN  B R AW1 N\nBROWN'S  B R AW1 N Z\nBROWNBACK  B R AW1 N - B AE2 K\nBROWNE  B R AW1 N\nBROWNED  B R AW1 N D\nBROWNELL  B R AW0 - N EH1 L\nBROWNER  B R AW1 - N ER0\nBROWNEST  B R AW1 - N IH0 S T\nBROWNFIELD  B R AW1 N - F IY2 L D\nBROWNFIELDS  B R AW1 N - F IY2 L D Z\nBROWNIE  B R AW1 - N IY0\nBROWNIES  B R AW1 - N IY0 Z\nBROWNING  B R AW1 - N IH0 NG\nBROWNING'S  B R AW1 - N IH0 NG Z\nBROWNISH  B R AW1 - N IH0 SH\nBROWNLEE  B R AW1 N - L IY0\nBROWNLEY  B R AW1 N - L IY0\nBROWNLIE  B R AW1 N - L IY0\nBROWNLOW  B R AW1 N - L OW2\nBROWNMILLER  B R AW1 N - M IH2 - L ER0\nBROWNOUT  B R AW1 N - AW2 T\nBROWNOUTS  B R AW1 N - AW2 T S\nBROWNRIGG  B R AW1 N - R IH0 G\nBROWNS  B R AW1 N Z\nBROWNS'  B R AW1 N Z\nBROWNSON  B R AW1 N - S AH0 N\nBROWNSTEIN  B R AW1 N - S T AY2 N\nBROWNSTEIN(2)  B R AW1 N - S T IY2 N\nBROWNSTONE  B R AW1 N - S T OW2 N\nBROWNSVILLE  B R AW1 N Z - V IH0 L\nBROWS  B R AW1 Z\nBROWSE  B R AW1 Z\nBROWSED  B R AW1 Z D\nBROWSER  B R AW1 - Z ER0\nBROWSERS  B R AW1 - Z ER0 Z\nBROWSING  B R AW1 - Z IH0 NG\nBROX  B R AA1 K S\nBROXSON  B R AA1 K - S AH0 N\nBROXTERMAN  B R AA1 K - S T ER0 - M AH0 N\nBROXTON  B R AA1 K - S T AH0 N\nBROY  B R OY1\nBROYARD  B R OY1 - ER0 D\nBROYHILL  B R OY1 - HH IH2 L\nBROYLES  B R OY1 L Z\nBROZ  B R AA1 Z\nBROZEK  B R OW1 - Z EH0 K\nBROZMAN  B R AA1 Z - M AH0 N\nBROZOVICH  B R AA1 - Z AH0 - V IH0 CH\nBROZOWSKI  B R AH0 - Z AO1 F S - K IY0\nBRUBAKER  B R AH1 - B AH0 - K ER0\nBRUBECK  B R UW1 - B EH2 K\nBRUCATO  B R UW0 - K AA1 - T OW0\nBRUCE  B R UW1 S\nBRUCE'S  B R UW1 - S AH0 Z\nBRUCH  B R AH1 CH\nBRUCHHAUSEN  B R UW1 K - HH AW2 - Z AH0 N\nBRUCIE  B R AH1 - K IY0\nBRUCITE  B R UW1 - S AY2 T\nBRUCK  B R AH1 K\nBRUCK'S  B R AH1 K S\nBRUCKER  B R AH1 - K ER0\nBRUCKHEIMER  B R AH1 K - HH AY2 - M ER0\nBRUCKMAN  B R AH1 K - M AH0 N\nBRUCKNER  B R AH1 K - N ER0\nBRUCKS  B R AH1 K S\nBRUDER  B R UW1 - D ER0\nBRUE  B R UW1\nBRUECHER  B R UW1 - CH ER0\nBRUECK  B R UW1 K\nBRUECKNER  B R UH1 K - N ER0\nBRUEGGE  B R UW1 - G AH0\nBRUEGGEMAN  B R UW1 G - M AH0 N\nBRUEGGEMANN  B R UW1 G - M AH0 N\nBRUEGGEN  B R UW1 - G AH0 N\nBRUEGGER  B R UW1 - G ER0\nBRUEGGER'S  B R UW1 - G ER0 Z\nBRUEHL  B R UW1 L\nBRUELLA  B R UW2 - EH1 - L AH0\nBRUEMMER  B R UW1 - M ER0\nBRUEN  B R UW1 N\nBRUENING  B R UW1 - N IH0 NG\nBRUER  B R UW1 - ER0\nBRUFF  B R AH1 F\nBRUFORD  B R UW1 - F ER0 D\nBRUGES  B R UW1 - JH IH0 Z\nBRUGES(2)  B R UW1 ZH\nBRUGGEMAN  B R AH1 G - M AH0 N\nBRUGGER  B R AH1 - G ER0\nBRUGH  B R AH1\nBRUGMAN  B R AH1 G - M AH0 N\nBRUHA  B R UW1 - HH AH0\nBRUHL  B R AH1 L\nBRUHN  B R AH1 N\nBRUIN  B R UW1 - IH0 N\nBRUINGTON  B R UW1 - IH0 NG - T AH0 N\nBRUINS  B R UW1 - IH0 N Z\nBRUINSMA  B R UW0 - IH1 N - S M AH0\nBRUISE  B R UW1 Z\nBRUISED  B R UW1 Z D\nBRUISES  B R UW1 - Z AH0 Z\nBRUISES(2)  B R UW1 - Z IH0 Z\nBRUISING  B R UW1 - Z IH0 NG\nBRULE  B R UW1 L\nBRULEY  B R UW1 - L IY0\nBRUM  B R AH1 M\nBRUMBACH  B R AH1 M - B AA2 K\nBRUMBACK  B R AH1 M - B AE2 K\nBRUMBAUGH  B R AH1 M - B AO2\nBRUMBELOW  B R AH1 M - B IH0 - L OW0\nBRUMER  B R UW1 - M ER0\nBRUMETT  B R AH1 - M IH0 T\nBRUMFIELD  B R AH1 M - F IY2 L D\nBRUMIT  B R UW1 - M IH0 T\nBRUMITT  B R UW1 - M IH0 T\nBRUMLEY  B R AH1 M - L IY0\nBRUMLOW  B R AH1 M - L OW0\nBRUMM  B R AH1 M\nBRUMMEL  B R AH1 - M AH0 L\nBRUMMELL  B R AH1 - M AH0 L\nBRUMMER  B R AH1 - M ER0\nBRUMMET  B R AH1 - M IH0 T\nBRUMMETT  B R AH1 - M IH0 T\nBRUMMITT  B R AH1 - M IH0 T\nBRUMMOND  B R AH1 - M AH0 N D\nBRUN  B R AH1 N\nBRUNA  B R UW1 - N AH0\nBRUNCH  B R AH1 N CH\nBRUNCHES  B R AH1 N - CH IH0 Z\nBRUNCOR  B R AH1 N - K AO2 R\nBRUNDAGE  B R AH1 N - D IH0 JH\nBRUNDIDGE  B R AH1 N - D IH0 JH\nBRUNDIGE  B R AH1 N - D IH0 G\nBRUNDTLAND  B R AH1 N T - L AH0 N D\nBRUNE  B R UW1 N\nBRUNEAU  B R AH0 - N OW1\nBRUNEI  B R UW0 - N AY1\nBRUNELL  B R AH1 - N AH0 L\nBRUNELLA  B R UW2 - N EH1 - L AH0\nBRUNELLE  B R AH0 - N EH1 L\nBRUNELLI  B R UW0 - N EH1 - L IY0\nBRUNER  B R UW1 - N ER0\nBRUNET  B R UW0 - N EH1 T\nBRUNETT  B R AH1 - N IH0 T\nBRUNETTA  B R UW0 - N EH1 - T AH0\nBRUNETTE  B R UW0 - N EH1 T\nBRUNETTES  B R UW0 - N EH1 T S\nBRUNETTI  B R UW0 - N EH1 - T IY0\nBRUNETTO  B R UW0 - N EH1 - T OW0\nBRUNEY  B R UW1 - N IY0\nBRUNGARD  B R AH1 NG - G ER0 D\nBRUNGARDT  B R AH1 NG - G AA0 R T\nBRUNGER  B R AH1 - NG ER0\nBRUNHILDA  B R UW0 N - HH IY1 L - D AH0\nBRUNI  B R UW1 - N IY0\nBRUNICK  B R UW1 - N IH0 K\nBRUNING  B R UW1 - N IH0 NG\nBRUNJES  B R AH0 N - ZH IY1 Z\nBRUNK  B R AH1 NG K\nBRUNKE  B R AH1 NG K\nBRUNKEN  B R AH1 NG - K AH0 N\nBRUNKER  B R AH1 NG - K ER0\nBRUNKHORST  B R AH1 NG K - HH AO0 R S T\nBRUNKOW  B R AH1 NG - K OW0\nBRUNN  B R AH1 N\nBRUNNER  B R AH1 - N ER0\nBRUNNHILDE  B R AH1 N - HH IH0 L D\nBRUNO  B R UW1 - N OW0\nBRUNO'S  B R UW1 - N OW0 Z\nBRUNS  B R AH1 N Z\nBRUNSKILL  B R AH1 N - S K IH2 L\nBRUNSMAN  B R AH1 N - S M AH0 N\nBRUNSON  B R AH1 N - S AH0 N\nBRUNSVOLD  B R AH1 N Z - V OW2 L D\nBRUNSWICK  B R AH1 N Z - W IH0 K\nBRUNSWICK'S  B R AH1 N Z - W IH0 K S\nBRUNSWIG  B R AH1 N - S W IH0 G\nBRUNSWIG'S  B R AH1 N - S W IH0 G Z\nBRUNT  B R AH1 N T\nBRUNTJEN  B R AH1 N T - JH EH2 N\nBRUNTON  B R AH1 N - T AH0 N\nBRUNTY  B R AH1 N - T IY0\nBRUNTZ  B R AH1 N T S\nBRUS  B R AH1 S\nBRUSCA  B R AH1 S - K AH0\nBRUSCHI  B R UW1 S - K IY0\nBRUSCO  B R UW1 - S K OW0\nBRUSE  B R UW1 Z\nBRUSETT  B R UH0 - S EH1 T\nBRUSETT(2)  B R UW2 - S EH1 T\nBRUSETTE  B R UW2 - S EH1 T\nBRUSH  B R AH1 SH\nBRUSHABER  B R AH1 - SH AH0 - B ER0\nBRUSHED  B R AH1 SH T\nBRUSHES  B R AH1 - SH IH0 Z\nBRUSHFIRE  B R AH1 SH - F AY2 R\nBRUSHFIRES  B R AH1 SH - F AY2 R Z\nBRUSHING  B R AH1 - SH IH0 NG\nBRUSHWORK  B R AH1 SH - W ER2 K\nBRUSHY  B R AH1 - SH IY0\nBRUSKE  B R AH1 S K\nBRUSKI  B R AH1 S - K IY0\nBRUSKY  B R AH1 S - K IY0\nBRUSO  B R UW1 - S OW0\nBRUSQUE  B R AH1 S K\nBRUSQUELY  B R AH1 S K - L IY0\nBRUSS  B R AH1 S\nBRUSSEAU  B R AH0 - S OW1\nBRUSSEL  B R AH1 - S AH0 L\nBRUSSELMANS  B R AH1 - S AH0 L - M AH0 N Z\nBRUSSELS  B R AH1 - S AH0 L Z\nBRUST  B R AH1 S T\nBRUSTER  B R AH1 - S T ER0\nBRUSTOLONI  B R UW1 - S T OW0 - L OW1 - N IY0\nBRUT  B R UW1 T\nBRUTAL  B R UW1 - T AH0 L\nBRUTALITIES  B R UW0 - T AE1 - L AH0 - T IY0 Z\nBRUTALITY  B R UW0 - T AE1 - L AH0 - T IY0\nBRUTALITY(2)  B R UW0 - T AE1 - L IH0 - T IY0\nBRUTALIZATION  B R UW1 - T AH0 - L AH0 - Z EY2 - SH AH0 N\nBRUTALIZE  B R UW1 - T AH0 - L AY2 Z\nBRUTALIZED  B R UW1 - T AH0 - L AY2 Z D\nBRUTALIZES  B R UW1 - T AH0 - L AY2 - Z IH0 Z\nBRUTALIZING  B R UW1 - T AH0 - L AY2 - Z IH0 NG\nBRUTALLY  B R UW1 - T AH0 - L IY0\nBRUTE  B R UW1 T\nBRUTISH  B R UW1 - T IH0 SH\nBRUTON  B R UW1 - T AH0 N\nBRUTSCHE  B R AH1 - CH IY0\nBRUTUS  B R UW1 - T AH0 S\nBRUUN  B R UW1 N\nBRUXELLES  B R AH0 K - S EH1 - L AH0 S\nBRUYETTE  B R UW0 - EH1 T\nBRUYNES  B R UW1 - IH0 N Z\nBRUZZESE  B R UW0 T - S EY1 - Z IY0\nBRYAN  B R AY1 - AH0 N\nBRYAN'S  B R AY1 - AH0 N Z\nBRYANS  B R AY1 - AH0 N Z\nBRYANT  B R AY1 - AH0 N T\nBRYARS  B R AY1 - ER0 Z\nBRYCE  B R AY1 S\nBRYDEN  B R AY1 - D AH0 N\nBRYDGES  B R IH1 - JH IH0 Z\nBRYDIE  B R IH1 - D IY0\nBRYDON  B R IH1 - D AH0 N\nBRYE  B R AY1\nBRYEN  B R AY1 - AH0 N\nBRYER  B R AY1 - ER0\nBRYK  B R IH1 K\nBRYMER  B R AY1 - M ER0\nBRYN  B R IH1 N\nBRYNA  B R IH1 - N AH0\nBRYNE  B R AY1 N\nBRYNER  B R AY1 - N ER0\nBRYNGELSON  B R IH1 NG - G IH0 L - S AH0 N\nBRYON  B R AY1 - AH0 N\nBRYS  B R IH1 S\nBRYSON  B R AY1 - S AH0 N\nBRZEZINSKI  B R IH0 - Z IH1 N - S K IY0\nBRZOSKA  B R OW1 - S K AH0\nBRZOZOWSKI  B R AH0 - Z AO1 F S - K IY0\nBRZYCKI  B R IH1 T S - K IY0\nBT  B IY1 - T IY1\nBTA  B IY1 - T IY1 - EY1\nBUA  B Y UW1 - AH0\nBUA(2)  B IY1 - Y UW1 - EY1\nBUB  B AH1 B\nBUBAR  B UW1 - B ER0\nBUBB  B AH1 B\nBUBBA  B AH1 - B AH0\nBUBBLE  B AH1 - B AH0 L\nBUBBLED  B AH1 - B AH0 L D\nBUBBLES  B AH1 - B AH0 L Z\nBUBBLING  B AH1 - B AH0 L - IH0 NG\nBUBBLING(2)  B AH1 - B L IH0 NG\nBUBBLY  B AH1 - B L IY0\nBUBBLY(2)  B AH1 - B AH0 - L IY0\nBUBECK  B UW1 - B EH0 K\nBUBEL  B UW1 - B AH0 L\nBUBIER  B Y UW1 - B IY0 - ER0\nBUBKA  B AH1 B - K AH0\nBUBLITZ  B AH1 - B L IH0 T S\nBUBOLTZ  B Y UW1 - B OW2 L T S\nBUBOLZ  B Y UW1 - B OW2 L Z\nBUBONIC  B Y UW0 - B AA1 - N IH0 K\nBUC  B AH1 K\nBUCARO  B UW0 - K AA1 - R OW0\nBUCASE  B Y UW1 - K EY2 S\nBUCCANEER  B AH2 - K AH0 - N IY1 R\nBUCCANEERS  B AH2 - K AH0 - N IY1 R Z\nBUCCELLATO  B UW0 - CH EH0 - L AA1 - T OW0\nBUCCHERI  B UW0 - K EH1 - R IY0\nBUCCI  B UW1 - CH IY0\nBUCCIARELLI  B UW0 - CH ER0 - EH1 - L IY0\nBUCCIERI  B UW0 - CH IH1 - R IY0\nBUCCINO  B UW0 - CH IY1 - N OW0\nBUCCOLA  B UW0 - K OW1 - L AH0\nBUCEK  B UW1 - CH EH0 K\nBUCEY  B Y UW1 - S IY0\nBUCH  B AH1 CH\nBUCHALTER  B AH1 - K AH0 L - T ER0\nBUCHAN  B AH1 - K AH0 N\nBUCHANAN  B Y UW0 - K AE1 - N AH0 N\nBUCHANAN'S  B Y UW0 - K AE1 - N AH0 N Z\nBUCHANANISM  B Y UW0 - K AE1 - N AH0 - N IH2 - Z AH0 M\nBUCHANANS  B Y UW0 - K AE1 - N AH0 N Z\nBUCHANNAN  B Y UW0 - K AE1 - N AH0 N\nBUCHANON  B Y UW0 - K AE1 - N AH0 N\nBUCHAREST  B Y UW1 - K ER0 - EH2 S T\nBUCHAREST(2)  B UW1 - K ER0 - EH2 S T\nBUCHBERGER  B AH1 K - B ER0 - G ER0\nBUCHBINDER  B AH1 K - B IH2 N - D ER0\nBUCHBINDER(2)  B UH1 K - B AY2 N - D ER0\nBUCHE  B AH1 CH\nBUCHEN  B AH1 - K AH0 N\nBUCHENWALD  B Y UW1 - K EH0 N - W AA2 L D\nBUCHER  B AH1 - K ER0\nBUCHERT  B AH1 - CH ER0 T\nBUCHHEIT  B AH1 K - HH AY0 T\nBUCHHOLTZ  B AH1 K - HH OW0 L T S\nBUCHHOLZ  B AH1 K - HH OW0 L Z\nBUCHI  B AH1 - CH IY0\nBUCHI'S  B AH1 - CH IY0 Z\nBUCHI'S(2)  B UW1 - CH IY0 Z\nBUCHI(2)  B UW1 - CH IY0\nBUCHINGER  B AH1 - K IH0 N - JH ER0\nBUCHKO  B AH1 CH - K OW0\nBUCHLER  B AH1 - K AH0 - L ER0\nBUCHLER(2)  B AH1 - K L ER0\nBUCHMAN  B AH1 K - M AH0 N\nBUCHMANN  B AH1 K - M AH0 N\nBUCHMILLER  B AH1 K - M AH0 - L ER0\nBUCHMILLER(2)  B UH1 K - M AH0 - L ER0\nBUCHNER  B AH1 K - N ER0\nBUCHOLTZ  B AH1 - K OW0 L T S\nBUCHOLTZ(2)  B UH1 K - OW0 L T S\nBUCHOLZ  B AH1 - K OW0 L Z\nBUCHS  B AH1 K S\nBUCHSBAUM  B AH1 K S - B AW0 M\nBUCHTA  B AH1 CH - T AH0\nBUCHTER  B AH1 K - T ER0\nBUCHWALD  B AH1 - K W AO0 L D\nBUCK  B AH1 K\nBUCK'S  B AH1 K S\nBUCKALEW  B AH1 - K AH0 - L UW0\nBUCKBEE  B AH1 K - B IY2\nBUCKED  B AH1 K T\nBUCKEL  B AH1 - K AH0 L\nBUCKELEW  B AH1 - K IH0 - L UW0\nBUCKELS  B AH1 - K AH0 L Z\nBUCKET  B AH1 - K AH0 T\nBUCKET(2)  B AH1 - K IH0 T\nBUCKETS  B AH1 - K AH0 T S\nBUCKEY  B AH1 - K IY0\nBUCKEYE  B AH1 - K AY2\nBUCKHANTZ  B AH1 K - HH AE2 N T S\nBUCKHOLTZ  B AH1 K - HH OW2 L T S\nBUCKHOLZ  B AH1 K - HH OW0 L Z\nBUCKHORN  B AH1 K - HH AO2 R N\nBUCKING  B AH1 - K IH0 NG\nBUCKINGHAM  B AH1 - K IH0 NG - HH AE2 M\nBUCKLAND  B AH1 K - L AH0 N D\nBUCKLE  B AH1 - K AH0 L\nBUCKLED  B AH1 - K AH0 L D\nBUCKLER  B AH1 - K AH0 - L ER0\nBUCKLER(2)  B AH1 - K L ER0\nBUCKLES  B AH1 - K AH0 L Z\nBUCKLEW  B AH1 - K L UW0\nBUCKLEY  B AH1 K - L IY0\nBUCKLIN  B AH1 - K L IH0 N\nBUCKLING  B AH1 - K L IH0 NG\nBUCKMAN  B AH1 K - M AH0 N\nBUCKMASTER  B AH1 K - M AE2 - S T ER0\nBUCKMINSTER  B AH1 K - M IH2 N - S T ER0\nBUCKNAM  B AH1 K - N AH0 M\nBUCKNELL  B AH2 K - N EH1 L\nBUCKNER  B AH1 K - N ER0\nBUCKO  B AH1 - K OW0\nBUCKS  B AH1 K S\nBUCKSHOT  B AH1 K - SH AA2 T\nBUCKSKIN  B AH1 K - S K IH2 N\nBUCKSTEIN  B AH1 K - S T IY2 N\nBUCKTHORN  B AH1 K - TH AO2 R N\nBUCKWALTER  B AH1 - K W AH0 L - T ER0\nBUCKWHEAT  B AH1 K - W IY2 T\nBUCKY  B AH1 - K IY0\nBUCOBA  B Y UW0 - K OW1 - B AH0\nBUCOLIC  B Y UW0 - K AA1 - L IH0 K\nBUCY  B Y UW1 - S IY0\nBUCZEK  B AH1 - CH EH0 K\nBUCZKOWSKI  B AH0 CH - K AO1 F S - K IY0\nBUCZYNSKI  B AH0 - CH IH1 N - S K IY0\nBUD  B AH1 D\nBUD'S  B AH1 D Z\nBUD-TEST  B AH1 D - T EH1 S T\nBUDAI  B UW0 - D AA1 - IY0\nBUDAPEST  B UW1 - D AH0 - P EH2 S T\nBUDAPEST'S  B UW1 - D AH0 - P EH2 S T S\nBUDAY  B UW1 - D EY0\nBUDD  B AH1 D\nBUDDE  B AH1 D\nBUDDEN  B AH1 - D AH0 N\nBUDDENBROOKS  B AH1 - D AH0 N - B R UH2 K S\nBUDDENHAGEN  B AH1 - D IH0 N - HH AH0 - G AH0 N\nBUDDHA  B UW1 - D AH0\nBUDDHA'S  B UW1 - D AH0 Z\nBUDDHISM  B UW1 - D IH0 - Z AH0 M\nBUDDHIST  B UW1 - D AH0 S T\nBUDDHISTS  B UW1 - D AH0 S T S\nBUDDHISTS(2)  B UW1 - D AH0 S S\nBUDDHISTS(3)  B UW1 - D AH0 S\nBUDDIE  B AH1 - D IY0\nBUDDIER  B AH1 - D IY0 - ER0\nBUDDIERS  B AH1 - D IY0 - ER0 Z\nBUDDIES  B AH1 - D IY0 Z\nBUDDIN  B AH1 - D IH0 N\nBUDDING  B AH1 - D IH0 NG\nBUDDY  B AH1 - D IY0\nBUDDY'S  B AH1 - D IY0 Z\nBUDER  B Y UW1 - D ER0\nBUDGE  B AH1 JH\nBUDGED  B AH1 JH D\nBUDGET  B AH1 - JH IH0 T\nBUDGET'S  B AH1 - JH IH0 T S\nBUDGETARY  B AH1 - JH IH0 - T EH2 - R IY0\nBUDGETED  B AH1 - JH IH0 - T AH0 D\nBUDGETED(2)  B AH1 - JH IH0 - T IH0 D\nBUDGETEER  B AH2 - JH IH0 - T IH1 R\nBUDGETEERS  B AH2 - JH IH0 - T IH1 R Z\nBUDGETING  B AH1 - JH IH0 - T IH0 NG\nBUDGETS  B AH1 - JH IH0 T S\nBUDGING  B AH1 - JH IH0 NG\nBUDICK  B AH1 - D IH0 K\nBUDICK'S  B AH1 - D IH0 K S\nBUDIMAN  B Y UW1 - T IH0 - M AH0 N\nBUDIMAN(2)  B AH0 - D IH0 - M AH0 N\nBUDIN  B UW1 - D IH0 N\nBUDINGER  B Y UW1 - D IH0 - NG ER0\nBUDKA  B AH1 D - K AH0\nBUDKE  B AH1 D - K IY0\nBUDLONG  B AH1 D - L AO2 NG\nBUDNER  B AH1 D - N ER0\nBUDNEY  B AH1 D - N IY0\nBUDNICK  B AH1 D - N IH0 K\nBUDNIK  B AH1 D - N IH0 K\nBUDNY  B AH1 D - N IY0\nBUDREAU  B AH0 - D R OW1\nBUDROW  B AH1 - D R OW2\nBUDS  B AH1 D Z\nBUDSON  B AH1 D - S AH0 N\nBUDVAR  B AH1 D - V AA2 R\nBUDVAR(2)  B UH1 D - V AA2 R\nBUDWEISER  B AH1 D - W AY0 - Z ER0\nBUDYONNOVSK  B UW1 - D Y AH0 - N AA2 V S K\nBUDZ  B AH1 D Z\nBUDZINSKI  B AH0 - JH IH1 N - S K IY0\nBUDZYN  B AH1 D - Z IH0 N\nBUDZYNSKI  B AH0 - JH IH1 N - S K IY0\nBUE  B W EH1\nBUECHE  B UW1 CH\nBUECHEL  B Y UW1 - K AH0 L\nBUECHELE  B Y UW1 - K AH0 L\nBUECHLER  B Y UW1 - K AH0 - L ER0\nBUECHLER(2)  B Y UW1 - K L ER0\nBUECHNER  B Y UW1 K - N ER0\nBUEGE  B UW1 JH\nBUEGLER  B Y UW1 - G L ER0\nBUEHL  B Y UW1 L\nBUEHLER  B Y UW1 - L ER0\nBUEHNER  B Y UW1 - N ER0\nBUEHRER  B Y UW1 - HH ER0\nBUEHRER(2)  B Y UW1 - ER0\nBUEHRING  B Y UW1 - R IH0 NG\nBUEHRLE  B Y UW1 - R AH0 L\nBUEKER  B Y UW1 - K ER0\nBUEL  B Y UW1 L\nBUELL  B Y UW1 - AH0 L\nBUELOW  B UW1 - L OW0\nBUENA  B UW1 - N AH0\nBUENDIA  B UW1 N - D IY0 - AH0\nBUENGER  B Y UW1 N - JH ER0\nBUENING  B W EH1 - N IH0 NG\nBUENO  B W EY1 - N OW0\nBUENOS  B W EY1 - N OW0 S\nBUENOS(2)  B W EY1 - N AH0 S\nBUENROSTRO  B W EH0 N - R OW1 - S T R OW0\nBUENTELLO  B UW0 N - T EH1 - L OW0\nBUER  B UW1 - ER0\nBUERGE  B Y UW1 R JH\nBUERGER  B Y UW1 R - G ER0\nBUERKLE  B Y UW1 R - K AH0 L\nBUERRY  B EH1 - R IY0\nBUESCHER  B Y UW1 - SH ER0\nBUESING  B Y UW1 - S IH0 NG\nBUETER  B Y UW1 - T ER0\nBUETOW  B UW1 - T OW0\nBUETTNER  B Y UW1 T - N ER0\nBUFANO  B UW0 - F AA1 - N OW0\nBUFE  B Y UW1 F\nBUFETE  B Y UW2 - F IY1 T\nBUFF  B AH1 F\nBUFF'S  B AH1 F S\nBUFFA  B AH1 - F AH0\nBUFFALO  B AH1 - F AH0 - L OW2\nBUFFALO'S  B AH1 - F AH0 - L OW2 Z\nBUFFALOS  B AH1 - F AH0 - L OW2 Z\nBUFFER  B AH1 - F ER0\nBUFFERED  B AH1 - F ER0 D\nBUFFERIN  B AH1 - F ER0 - IH0 N\nBUFFERS  B AH1 - F ER0 Z\nBUFFET  B AH1 - F AH0 T\nBUFFET(2)  B AH0 - F EY1\nBUFFETED  B AH0 - F EY1 D\nBUFFETED(2)  B AH1 - F IH2 - T IH0 D\nBUFFETING  B AH0 - F EY1 - IH0 NG\nBUFFETING(2)  B AH1 - F AH0 - T IH0 NG\nBUFFETS  B AH1 - F AH0 T S\nBUFFETS(2)  B AH0 - F EY1 Z\nBUFFETT  B AH1 - F IH0 T\nBUFFETT'S  B AH1 - F AH0 T S\nBUFFIN  B AH1 - F IH0 N\nBUFFINGTON  B AH1 - F IH0 NG - T AH0 N\nBUFFKIN  B AH1 F - K IH0 N\nBUFFO  B UW1 - F OW0\nBUFFONE  B UW0 - F OW1 - N IY0\nBUFFOON  B AH0 - F UW1 N\nBUFFORD  B AH1 - F ER0 D\nBUFFS  B AH1 F S\nBUFFTON  B AH1 F - T AH0 N\nBUFFUM  B AH1 - F AH0 M\nBUFFY  B AH1 - F IY0\nBUFKIN  B AH1 F - K IH0 N\nBUFORD  B Y UW1 - F ER0 D\nBUG  B AH1 G\nBUGA  B Y UW1 - G AH0\nBUGA(2)  B IY1 - Y UW1 - JH IY1 - EY1\nBUGABOO  B AH1 - G AH0 - B UW2\nBUGAJ  B UW1 - G AH0 JH\nBUGARIN  B Y UW1 - G ER0 - IH0 N\nBUGAY  B Y UW1 - G EY0\nBUGBEE  B AH1 G - B IY2\nBUGEYE  B AH1 - G AY2\nBUGEYED  B AH1 - G AY2 D\nBUGG  B AH1 G\nBUGGE  B AH1 G\nBUGGED  B AH1 G D\nBUGGER  B AH1 - G ER0\nBUGGERS  B AH1 - G ER0 Z\nBUGGIES  B AH1 - G IY0 Z\nBUGGING  B AH1 - G IH0 NG\nBUGGS  B AH1 G Z\nBUGGY  B AH1 - G IY0\nBUGH  B Y UW1 G\nBUGHER  B Y UW1 - G ER0\nBUGLE  B Y UW1 - G AH0 L\nBUGLES  B Y UW1 - G AH0 L Z\nBUGLING  B Y UW1 - G AH0 - L IH0 NG\nBUGLING(2)  B Y UW1 - G L IH0 NG\nBUGLIOSI  B UW0 G - L IY0 - OW1 - S IY0\nBUGLIOSI'S  B UW0 G - L IY0 - OW1 - S IY0 Z\nBUGOJNO  B UW0 - G OW1 ZH - N OW0\nBUGS  B AH1 G Z\nBUGSY  B AH1 G - Z IY0\nBUHL  B Y UW1 L\nBUHLER  B UW1 - L ER0\nBUHMAN  B AH1 - M AH0 N\nBUHR  B Y UH1 R\nBUHRMAN  B UH1 R - M AH0 N\nBUHROW  B UH1 - R OW0\nBUI  B IH1\nBUI(2)  B W IY1\nBUICE  B IH1 S\nBUICE(2)  B W IY1 S\nBUICK  B Y UW1 - IH0 K\nBUICK'S  B Y UW1 - IH0 K S\nBUICKS  B Y UW1 - IH0 K S\nBUIE  B UW0 - IY1\nBUIE(2)  B W IY1\nBUIKEMA  B IH0 - K EY1 - M AH0\nBUIKEMA(2)  B W IH0 - K EY1 - M AH0\nBUILD  B IH1 L D\nBUILDABLE  B IH1 L - D AH0 - B AH0 L\nBUILDER  B IH1 L - D ER0\nBUILDER'S  B IH1 L - D ER0 Z\nBUILDERS  B IH1 L - D ER0 Z\nBUILDERS'  B IH1 L - D ER0 Z\nBUILDING  B IH1 L - D IH0 NG\nBUILDING'S  B IH1 L - D IH0 NG Z\nBUILDINGS  B IH1 L - D IH0 NG Z\nBUILDS  B IH1 L D Z\nBUILDUP  B IH1 L D - AH2 P\nBUILDUPS  B IH1 L D - AH2 P S\nBUILT  B IH1 L T\nBUIS  B IH1 Z\nBUISSON  B W IY2 - S AA1 N\nBUIST  B UW1 - IH0 S T\nBUITONI  B Y UW0 - T OW1 - N IY0\nBUITRAGO  B IH0 - T R AA1 - G OW0\nBUITRON  B IH1 - T R AH0 N\nBUJAK  B UW1 - Y AH0 K\nBUJUMBURA  B UW0 - JH AH0 M - B UH1 - R AH0\nBUKAVU  B UW0 - K AA1 - V UW2\nBUKAVU'S  B UW0 - K AA1 - V UW2 Z\nBUKER  B Y UW1 - K ER0\nBUKHARIN  B AH1 K - HH ER0 - IH0 N\nBUKOVSKY  B UW0 - K AA1 V S - K IY0\nBUKOWSKI  B Y UW0 - K AO1 F S - K IY0\nBULA  B Y UW1 - L AH0\nBULAT  B UW1 - L AH0 T\nBULB  B AH1 L B\nBULBOUS  B AH1 L - B AH0 S\nBULBS  B AH1 L B Z\nBULEN  B AH1 - L AH0 N\nBULENT  B Y UW1 - L AH0 N T\nBULEY  B Y UW1 - L IY0\nBULFINCH  B UH1 L - F IH2 N CH\nBULFINCH'S  B UH1 L - F IH2 N - CH IH0 Z\nBULGARIA  B AH0 L - G EH1 - R IY0 - AH0\nBULGARIA'S  B AH0 L - G EH1 - R IY0 - AH0 Z\nBULGARIAN  B AH0 L - G EH1 - R IY0 - AH0 N\nBULGARIANS  B AH0 L - G EH1 - R IY0 - AH0 N Z\nBULGE  B AH1 L JH\nBULGED  B AH1 L JH D\nBULGER  B AH1 L - G ER0\nBULGES  B AH1 L - JH IH0 Z\nBULGING  B AH1 L - JH IH0 NG\nBULGRIN  B UH1 L - G R IH0 N\nBULIMIA  B Y UW0 - L IH1 - M IY0 - AH0\nBULIMIC  B Y UW0 - L IH1 - M IH0 K\nBULIMIC(2)  B UW0 - L IH1 - M IH0 K\nBULIN  B Y UW1 - L IH0 N\nBULK  B AH1 L K\nBULKELEY  B UH1 L - K AH0 - L IY0\nBULKHEAD  B AH1 L K - HH EH2 D\nBULKHEADS  B AH1 L K - HH EH2 D Z\nBULKIER  B AH1 L - K IY0 - ER0\nBULKLEY  B AH1 L K - L IY0\nBULKY  B AH1 L - K IY0\nBULL  B UH1 L\nBULL'S  B UH1 L Z\nBULLA  B UH1 - L AH0\nBULLARD  B UH1 - L ER0 D\nBULLDOG  B UH1 L - D AO2 G\nBULLDOGS  B UH1 L - D AO2 G Z\nBULLDOZE  B UH1 L - D OW2 Z\nBULLDOZED  B UH1 L - D OW2 Z D\nBULLDOZER  B UH1 L - D OW2 - Z ER0\nBULLDOZERS  B UH1 L - D OW2 - Z ER0 Z\nBULLDOZING  B UH1 L - D OW2 - Z IH0 NG\nBULLEN  B UH1 - L AH0 N\nBULLER  B UH1 - L ER0\nBULLET  B UH1 - L AH0 T\nBULLETIN  B UH1 - L IH0 - T AH0 N\nBULLETINS  B UH1 - L AH0 - T AH0 N Z\nBULLETPROOF  B UH1 - L AH0 T - P R UW2 F\nBULLETS  B UH1 - L AH0 T S\nBULLFIGHT  B UH1 L - F AY2 T\nBULLFIGHTER  B UH1 L - F AY2 - T ER0\nBULLFIGHTING  B UH1 L - F AY2 - T IH0 NG\nBULLFIGHTS  B UH1 L - F AY2 T Z\nBULLFROG  B UH1 L - F R AO2 G\nBULLFROGS  B UH1 L - F R AO2 G Z\nBULLHEAD  B UH1 L - HH EH2 D\nBULLHEADS  B UH1 L - HH EH2 D Z\nBULLHORN  B UH1 L - HH AO2 R N\nBULLHORNS  B UH1 L - HH AO2 R N Z\nBULLIED  B UH1 - L IY0 D\nBULLIES  B UH1 - L IY0 Z\nBULLINGER  B UH1 - L IH0 - NG ER0\nBULLINGTON  B UH1 - L IH0 NG - T AH0 N\nBULLINS  B UH1 - L IH0 N Z\nBULLION  B UH1 - L Y AH0 N\nBULLIS  B UH1 - L IH0 S\nBULLISH  B UH1 - L IH0 SH\nBULLISHLY  B UH1 - L IH0 SH - L IY0\nBULLISHNESS  B UH1 - L IH0 SH - N AH0 S\nBULLITT  B UW1 - L IH0 T\nBULLMAN  B UH1 L - M AH0 N\nBULLOCH  B UH1 - L AH0 K\nBULLOCK  B UH1 - L AH0 K\nBULLOCK'S  B UH1 - L AH0 K S\nBULLOCKS  B UH1 - L AH0 K S\nBULLPEN  B UH1 L - P EH2 N\nBULLS  B UH1 L Z\nBULLS'  B UH1 L Z\nBULLSEYE  B UW1 L - Z AY0\nBULLSHIT  B UH1 L - SH IH2 T\nBULLUCK  B UH1 - L AH0 K\nBULLWINKLE  B UH1 L - W IH2 NG - K AH0 L\nBULLY  B UH1 - L IY0\nBULLYING  B UH1 - L IY0 - IH0 NG\nBULMAN  B AH1 L - M AH0 N\nBULMER  B AH1 L - M ER0\nBULOVA  B Y UW0 - L OW1 - V AH0\nBULOW  B Y UW1 - L OW0\nBULRUSH  B UH1 L - R AH0 SH\nBULSON  B UH1 L - S AH0 N\nBULT  B AH1 L T\nBULTEMA  B UW0 L - T EH1 - M AH0\nBULTHUIS  B AH1 L - DH UW0 - IH0 Z\nBULTMAN  B UH1 L T - M AH0 N\nBULWARK  B UH1 L - W ER0 K\nBULWINKLE  B UH1 L - W IH2 NG - K AH0 L\nBUM  B AH1 M\nBUMANN  B Y UW1 - M AH0 N\nBUMBALOUGH  B AH1 M - B AH0 - L AW0\nBUMBARGER  B AH1 M - B AA2 R - G ER0\nBUMBAUGH  B AH1 M - B AO2\nBUMBLE  B AH1 M - B AH0 L\nBUMBLING  B AH1 M - B AH0 L - IH0 NG\nBUMBLING(2)  B AH1 M - B L IH0 NG\nBUMGARDNER  B AH1 M - G AA2 R D - N ER0\nBUMGARNER  B AH1 M - G AA2 R - N ER0\nBUMIPUTRA  B UW2 - M IY0 - P Y UW1 - T R AH0\nBUMMED  B AH1 M D\nBUMMER  B AH1 - M ER0\nBUMP  B AH1 M P\nBUMPAS  B AH1 M - P AH0 Z\nBUMPASS  B AH1 M - P AE2 S\nBUMPED  B AH1 M P T\nBUMPER  B AH1 M - P ER0\nBUMPERS  B AH1 M - P ER0 Z\nBUMPERSTICKER  B AH1 M - P ER0 - S T IH0 - K ER0\nBUMPERSTICKERS  B AH1 M - P ER0 - S T IH0 - K ER0 Z\nBUMPING  B AH1 M - P IH0 NG\nBUMPINGS  B AH1 M - P IH0 NG Z\nBUMPKIN  B AH1 M P - K IH0 N\nBUMPS  B AH1 M P S\nBUMPUS  B AH1 M - P AH0 S\nBUMPY  B AH1 M - P IY0\nBUMS  B AH1 M Z\nBUMSTEAD  B AH1 M - S T EH2 D\nBUN  B AH1 N\nBUNCE  B AH1 N S\nBUNCH  B AH1 N CH\nBUNCHE  B AH1 N CH\nBUNCHED  B AH1 N CH T\nBUNCHES  B AH1 N - CH AH0 Z\nBUNCHES(2)  B AH1 N - CH IH0 Z\nBUNCHING  B AH1 N - CH IH0 NG\nBUNCHY  B AH1 N - CH IY0\nBUND  B AH1 N D\nBUNDA  B AH1 N - D AH0\nBUNDE  B AH1 N D\nBUNDESBANK  B UH1 N - D IH0 S - B AE2 NG K\nBUNDESBANK'S  B UH1 N - D IH0 S - B AE2 NG K S\nBUNDESBANK(2)  B AA1 N - D IH0 S - B AE2 NG K\nBUNDESBANK(3)  B UH1 N - D IH0 S - B AA2 NG K\nBUNDESPOST  B UH1 N - D IH0 - S P OW2 S T\nBUNDESPOST'S  B UH1 N - D IH0 - S P OW2 S T S\nBUNDESRAT  B UH1 N - D IH0 S - R AE2 T\nBUNDESTAG  B AH1 N - D AH0 - S T AE2 G\nBUNDESWEHR  B AH1 N - D AH0 S - W EH2 R\nBUNDICK  B AH1 N - D IH0 K\nBUNDLE  B AH1 N - D AH0 L\nBUNDLED  B AH1 N - D AH0 L D\nBUNDLES  B AH1 N - D AH0 L Z\nBUNDLING  B AH1 N - D AH0 L - IH0 NG\nBUNDLING(2)  B AH1 N D - L IH0 NG\nBUNDREN  B AH1 N - D ER0 - AH0 N\nBUNDRICK  B AH1 N - D R IH0 K\nBUNDS  B AH1 N D Z\nBUNDSCHUH  B AH1 N D - SH UW0\nBUNDY  B AH1 N - D IY0\nBUNDY'S  B AH1 N - D IY0 Z\nBUNDYS  B AH1 N - D IY0 Z\nBUNG  B AH1 NG\nBUNGALOW  B AH1 NG - G AH0 - L OW2\nBUNGALOWS  B AH1 NG - G AH0 - L OW2 Z\nBUNGARD  B AH1 NG - G ER0 D\nBUNGE  B AH1 N JH\nBUNGEE  B AH1 N - JH IY0\nBUNGER  B AH1 - NG ER0\nBUNGERT  B AH1 NG - G ER0 T\nBUNGEY  B AH1 N - JH IY0\nBUNGLED  B AH1 NG - G AH0 L D\nBUNGLER  B AH1 NG - G L ER0\nBUNGLERS  B AH1 NG - G L ER0 Z\nBUNGLING  B AH1 NG - G AH0 L - IH0 NG\nBUNGLING(2)  B AH1 NG - G L IH0 NG\nBUNK  B AH1 NG K\nBUNKE  B AH1 NG K\nBUNKER  B AH1 NG - K ER0\nBUNKERS  B AH1 NG - K ER0 Z\nBUNKLEY  B AH1 NG K - L IY0\nBUNKS  B AH1 NG K S\nBUNN  B AH1 N\nBUNNELL  B AH1 - N AH0 L\nBUNNER  B AH1 - N ER0\nBUNNEY  B AH1 - N IY0\nBUNNI  B UW1 - N IY0\nBUNNIE  B AH1 - N IY0\nBUNNIES  B AH1 - N IY0 Z\nBUNNING  B AH1 - N IH0 NG\nBUNNY  B AH1 - N IY0\nBUNOWSKI  B UW2 - N AW1 S - K IY0\nBUNS  B AH1 N Z\nBUNT  B AH1 N T\nBUNT'S  B AH1 N T S\nBUNTAIN  B AH0 N - T EY1 N\nBUNTE  B AH1 N T\nBUNTEN  B AH1 N - T AH0 N\nBUNTIN  B AH1 N - T IH0 N\nBUNTING  B AH1 N - T IH0 NG\nBUNTON  B AH1 N - T AH0 N\nBUNTROCK  B AH1 N - T R AA2 K\nBUNTSTROCK  B AH1 N T - S T R AA2 K\nBUNTYN  B AH1 N - T IH0 N\nBUNTZ  B AH1 N T S\nBUNYAN  B AH1 - N Y AH0 N\nBUNYARD  B AH0 N - Y AA1 R D\nBUNZL  B AH1 N - Z AH0 L\nBUOL  B OW1 L\nBUONANNO  B W OW0 - N AA1 - N OW0\nBUONICONTIS  B W AA2 - N IH0 - K AA1 N - T IY0 Z\nBUONO  B W OW1 - N OW0\nBUONOCORE  B W OW0 - N OW0 - K AO1 - R IY0\nBUONOMO  B W OW0 - N OW1 - M OW0\nBUOY  B UW1 - IY0\nBUOYANCY  B OY1 - AH0 N - S IY0\nBUOYANT  B OY1 - AH0 N T\nBUOYED  B UW1 - IY0 D\nBUOYING  B OY1 - IH0 NG\nBUOYS  B UW1 - IY0 Z\nBUPKUS  B AH1 P - K AH0 S\nBUPP  B AH1 P\nBUPRENORPHINE  B Y UW1 - P R AH0 - N ER0 - F IY2 N\nBUR  B ER1\nBURACK  B Y UW1 - R AH0 K\nBURAK  B Y UW1 - R AH0 K\nBURAN  B Y UW1 - R AH0 N\nBURANDT  B Y UW1 - R AH0 N T\nBURAS  B Y UW1 - R AH0 Z\nBURBA  B ER1 - B AH0\nBURBACH  B ER1 - B AA0 K\nBURBACK  B ER1 - B AE0 K\nBURBAGE  B ER1 - B IH0 JH\nBURBANK  B ER1 - B AE2 NG K\nBURBANK'S  B ER1 - B AE0 NG K S\nBURBIDGE  B ER1 - B IH0 JH\nBURBRIDGE  B ER1 - B R IH0 JH\nBURBY  B ER1 - B IY0\nBURCH  B ER1 CH\nBURCHAM  B ER0 - SH AE1 M\nBURCHARD  B ER0 - SH AA1 R D\nBURCHELL  B ER1 - K AH0 L\nBURCHER  B ER1 - CH ER0\nBURCHETT  B ER1 - CH IH0 T\nBURCHETTE  B ER0 - SH EH1 T\nBURCHFIELD  B ER1 CH - F IY0 L D\nBURCHILL  B ER1 K - HH IH0 L\nBURCIAGA  B UH0 R - S IY0 - AA1 - G AH0\nBURCK  B ER1 K\nBURCKHARD  B ER1 K - HH ER0 D\nBURCKHARDT  B ER1 K - HH AA0 R T\nBURD  B ER1 D\nBURDA  B UH1 R - D AH0\nBURDELL  B ER0 - D EH1 L\nBURDEN  B ER1 - D AH0 N\nBURDENED  B ER1 - D AH0 N D\nBURDENING  B ER1 - D AH0 N - IH0 NG\nBURDENS  B ER1 - D AH0 N Z\nBURDENSOME  B ER1 - D AH0 N - S AH0 M\nBURDETT  B ER1 - D IH0 T\nBURDETTE  B ER0 - D EH1 T\nBURDGE  B ER1 JH\nBURDI  B UH1 R - D IY0\nBURDICK  B ER1 - D IH0 K\nBURDIN  B ER1 - D IH0 N\nBURDINE  B ER0 - D IY1 N\nBURDINE'S  B ER0 - D IY1 N Z\nBURDINE'S(2)  B ER0 - D AY1 N Z\nBURDINE(2)  B ER0 - D AY1 N\nBURDINES  B ER0 - D IY1 N Z\nBURDINES(2)  B ER0 - D AY1 N Z\nBURDITT  B ER0 - D IH1 T\nBURDO  B UH1 R - D OW0\nBURDON  B ER1 - D AH0 N\nBURDSALL  B ER1 D - S AH0 L\nBUREAU  B Y UH1 - R OW0\nBUREAU'S  B Y UH1 - R OW0 Z\nBUREAUCRACIES  B Y UH0 - R AA1 - K R AH0 - S IY0 Z\nBUREAUCRACY  B Y UH0 - R AA1 - K R AH0 - S IY0\nBUREAUCRACY'S  B Y UH0 - R AA1 - K R AH0 - S IY0 Z\nBUREAUCRAT  B Y UH1 - R AH0 - K R AE2 T\nBUREAUCRAT(2)  B Y UH1 - R OW0 - K R AE2 T\nBUREAUCRATESE  B Y UH1 - R AH0 - K R AE0 - T IY2 Z\nBUREAUCRATIC  B Y UH2 - R AH0 - K R AE1 - T IH0 K\nBUREAUCRATS  B Y UH1 - R AH0 - K R AE2 T S\nBUREAUCRATS(2)  B Y UH1 - R OW0 - K R AE2 T S\nBUREAUS  B Y UH1 - R OW0 Z\nBUREK  B EH1 - R IH0 K\nBUREL  B EH1 - R AH0 L\nBURELL  B EH1 - R AH0 L\nBUREN  B Y UH1 - R AH0 N\nBURES  B EH1 R Z\nBURES(2)  B EH1 - R IH0 Z\nBURESH  B EH1 - R IH0 SH\nBURFEIND  B ER1 - F AY0 N D\nBURFIELD  B ER1 - F IY0 L D\nBURFORD  B ER1 - F ER0 D\nBURG  B ER1 G\nBURGAMY  B ER1 - G AH0 - M IY0\nBURGAN  B ER1 - G AE0 N\nBURGARD  B ER1 - G ER0 D\nBURGDORF  B ER1 G - D AO0 R F\nBURGE  B ER1 G\nBURGEE  B ER1 - G IY0\nBURGENER  B ER1 - G IY0 - N ER0\nBURGEON  B ER1 - JH AH0 N\nBURGEONED  B ER1 - JH AH0 N D\nBURGEONING  B ER1 - JH AH0 - N IH0 NG\nBURGER  B ER1 - G ER0\nBURGER'S  B ER1 - G ER0 Z\nBURGERS  B ER1 - G ER0 Z\nBURGERT  B ER1 - G ER0 T\nBURGES  B ER1 G Z\nBURGESON  B ER1 - G IH0 - S AH0 N\nBURGESS  B ER1 - JH AH0 S\nBURGET  B ER1 - G EH0 T\nBURGETT  B ER1 - JH IH0 T\nBURGGRAF  B ER1 - G R AH0 F\nBURGHARDT  B ER1 - G AA0 R T\nBURGHART  B ER1 - G HH AA0 R T\nBURGHER  B ER1 - G ER0\nBURGHLEY  B ER1 - G L IY0\nBURGIN  B ER1 - G IH0 N\nBURGIO  B ER1 - G IY0 - OW0\nBURGLAR  B ER1 - G L ER0\nBURGLARIES  B ER1 - G L ER0 - IY0 Z\nBURGLARIZE  B ER1 - G L ER0 - AY2 Z\nBURGLARIZED  B ER1 - G L ER0 - AY2 Z D\nBURGLARS  B ER1 - G L ER0 Z\nBURGLARY  B ER1 - G L ER0 - IY0\nBURGLING  B ER1 - G L IH0 NG\nBURGMAN  B ER1 G - M AH0 N\nBURGMASTER  B ER1 G - M AE2 - S T ER0\nBURGNER  B ER1 G - N ER0\nBURGO  B ER1 - G OW0\nBURGOMASTER  B ER1 - G AH0 - M AE2 - S T ER0\nBURGOMASTER'S  B ER1 - G AH0 - M AE2 - S T ER0 Z\nBURGOMASTERS  B ER1 - G AH0 - M AE2 - S T ER0 Z\nBURGOON  B ER1 - G UW0 N\nBURGOS  B ER1 - G OW0 Z\nBURGOYNE  B ER0 - G OY1 N\nBURGOYNE'S  B ER0 - G OY1 N Z\nBURGUNDIAN  B ER0 - G AH1 N - D IY0 - AH0 N\nBURGUNDIANS  B ER0 - G AH1 N - D IY0 - AH0 N Z\nBURGUNDIES  B ER1 - G AH0 N - D IY0 Z\nBURGUNDY  B ER1 - G AH0 N - D IY0\nBURGUNDY'S  B ER1 - G AH0 N - D IY0 Z\nBURGY  B ER1 - JH IY0\nBURHAM  B ER1 - HH AH0 M\nBURHANS  B ER1 - HH AH0 N Z\nBURI  B UH1 - R IY0\nBURIAL  B EH1 - R IY0 - AH0 L\nBURIALS  B EH1 - R IY0 - AH0 L Z\nBURIAN  B Y UH1 - R IY0 - AH0 N\nBURICH  B EH1 - R IH0 K\nBURIED  B EH1 - R IY0 D\nBURIES  B EH1 - R IY0 Z\nBURK  B ER1 K\nBURKARD  B ER1 - K ER0 D\nBURKART  B ER1 - K AA0 R T\nBURKE  B ER1 K\nBURKE'S  B ER1 K S\nBURKEEN  B ER0 - K IY1 N\nBURKEL  B ER1 - K AH0 L\nBURKEMPER  B ER1 - K IH0 M - P ER0\nBURKERT  B ER1 - K ER0 T\nBURKES  B ER1 K S\nBURKET  B ER1 - K IH0 T\nBURKETT  B ER1 - K IH0 T\nBURKEY  B ER1 - K IY0\nBURKHALTER  B ER1 K - HH AH0 L - T ER0\nBURKHAMMER  B ER1 K - HH AH0 - M ER0\nBURKHARD  B ER1 K - HH ER0 D\nBURKHARDT  B ER1 K - HH AA0 R T\nBURKHART  B ER1 K - HH AA0 R T\nBURKHEAD  B ER1 K - HH EH0 D\nBURKHOLDER  B ER1 K - HH OW0 L - D ER0\nBURKINA  B ER0 - K IY1 - N AH0\nBURKINS  B ER1 - K IH0 N Z\nBURKITT  B ER1 - K IH0 T\nBURKLAND  B ER1 K - L AH0 N D\nBURKLE  B ER1 - K AH0 L\nBURKLEY  B ER1 K - L IY0\nBURKLOW  B ER1 - K L AW0\nBURKLUND  B ER1 K - L AH0 N D\nBURKMAN  B ER1 K - M AH0 N\nBURKS  B ER1 K S\nBURKUS  B ER1 - K AH0 S\nBURL  B ER1 L\nBURLAND  B ER1 - L AH0 N D\nBURLAP  B ER1 - L AE2 P\nBURLAPPED  B ER1 - L AE2 P T\nBURLATSKY  B ER0 - L AE1 T S - K IY0\nBURLEIGH  B ER1 - L AH0\nBURLESON  B ER1 - L IH0 - S AH0 N\nBURLESON(2)  B ER1 L - S AH0 N\nBURLESQUE  B ER0 - L EH1 S K\nBURLEW  B ER1 - L UW0\nBURLEY  B ER1 - L IY0\nBURLING  B ER1 - L IH0 NG\nBURLINGAME  B ER1 - L IH0 NG - G EY2 M\nBURLINGHAM  B ER1 - L IH0 NG - HH AE2 M\nBURLINGTON  B ER1 - L IH0 NG - T AH0 N\nBURLINGTON'S  B ER1 - L IH0 NG - T AH0 N Z\nBURLISON  B ER1 - L IH0 - S AH0 N\nBURLY  B ER1 - L IY0\nBURMA  B ER1 - M AH0\nBURMA'S  B ER1 - M AH0 Z\nBURMAH  B ER1 - M AH0\nBURMAN  B ER1 - M AH0 N\nBURMANS  B ER1 - M AH0 N Z\nBURMASTER  B ER1 - M AE0 - S T ER0\nBURMEISTER  B ER1 - M AY0 - S T ER0\nBURMESE  B ER0 - M IY1 Z\nBURMESTER  B ER1 - M IH0 - S T ER0\nBURN  B ER1 N\nBURNABLE  B ER1 - N AH0 - B AH0 L\nBURNABY  B ER1 - N AH0 - B IY0\nBURNAM  B ER1 - N AH0 M\nBURNAP  B ER1 - N AH0 P\nBURNARD  B ER0 - N AA1 R D\nBURNDY  B ER1 N - D IY0\nBURNE  B ER1 N\nBURNED  B ER1 N D\nBURNELL  B ER1 - N AH0 L\nBURNER  B ER1 - N ER0\nBURNERS  B ER1 - N ER0 Z\nBURNES  B ER1 N Z\nBURNESS  B ER1 - N AH0 S\nBURNET  B ER1 - N IH0 T\nBURNETT  B ER0 - N EH1 T\nBURNETT'S  B ER0 - N EH1 T S\nBURNETTE  B ER1 - N EH1 T\nBURNEY  B ER1 - N IY0\nBURNHAM  B ER1 - N AH0 M\nBURNHAM'S  B ER1 - N AH0 M Z\nBURNHAM'S(2)  B ER1 N - HH AE0 M Z\nBURNHAM(2)  B ER1 N - HH AE0 M\nBURNING  B ER1 - N IH0 NG\nBURNINGHAM  B ER1 - N IH0 NG - HH AE2 M\nBURNINGS  B ER1 - N IH0 NG Z\nBURNISH  B ER1 - N IH0 SH\nBURNISHED  B ER1 - N IH0 SH T\nBURNLEY  B ER1 N - L IY0\nBURNLEY'S  B ER1 N - L IY0 Z\nBURNOUT  B ER1 N - AW2 T\nBURNS  B ER1 N Z\nBURNS'  B ER1 N Z\nBURNS'S  B ER1 N - Z IH0 Z\nBURNSED  B ER1 N Z D\nBURNSIDE  B ER1 N - S AY2 D\nBURNSIDE'S  B ER1 N - S AY2 D Z\nBURNSTEIN  B ER1 N - S T AY2 N\nBURNSTEIN(2)  B ER1 N - S T IY2 N\nBURNSWORTH  B ER1 N Z - W ER2 TH\nBURNT  B ER1 N T\nBURNUP  B ER1 - N AH2 P\nBURNWORTH  B ER1 N - W ER2 TH\nBUROKER  B Y UW1 - R AH0 - K ER0\nBUROW  B Y UH1 - R OW0\nBURP  B ER1 P\nBURPEE  B ER1 - P IY0\nBURPING  B ER1 - P IH0 NG\nBURPO  B UH1 R - P OW0\nBURR  B ER1\nBURRAGE  B ER1 - IH0 JH\nBURRELL  B ER0 - EH1 L\nBURRER  B ER1 - ER0\nBURRES  B ER1 Z\nBURRESS  B ER1 - AH0 S\nBURRI  B UH1 - R IY0\nBURRIDGE  B AO1 - R IH0 JH\nBURRIER  B ER1 - IY0 - ER0\nBURRIGHT  B AO1 - R AY0 T\nBURRILL  B AO1 - R AH0 L\nBURRINGTON  B ER1 - IH0 NG - T AH0 N\nBURRIS  B ER1 - IH0 S\nBURRISS  B ER1 - IH0 - S IH0 Z\nBURRITO  B ER0 - IY1 - T OW0\nBURRITOS  B ER0 - IY1 - T OW0 S\nBURRITT  B ER1 - IH0 T\nBURRO  B ER1 - OW0\nBURROLA  B UH0 - R OW1 - L AH0\nBURROS  B ER1 - OW0 Z\nBURROUGH  B ER1 - OW0\nBURROUGHS  B AH1 - R OW0 Z\nBURROUGHS(2)  B ER1 - OW0 Z\nBURROUS  B ER1 - AH0 S\nBURROW  B ER1 - OW0\nBURROWER  B ER1 - OW0 - ER0\nBURROWERS  B ER1 - OW0 - ER0 Z\nBURROWES  B ER1 - OW2 Z\nBURROWING  B ER1 - OW0 - IH0 NG\nBURROWS  B ER1 - OW0 Z\nBURRUS  B UH1 - R AH0 S\nBURRUSS  B UH1 - R AH0 S\nBURRY  B ER1 - IY0\nBURSCH  B ER1 SH\nBURSE  B ER1 S\nBURSEY  B ER1 - S IY0\nBURSLEY  B ER1 S - L IY0\nBURSON  B ER1 - S AH0 N\nBURST  B ER1 S T\nBURSTEIN  B ER1 - S T AY0 N\nBURSTEIN(2)  B ER1 - S T IY0 N\nBURSTING  B ER1 - S T IH0 NG\nBURSTON  B ER1 - S T AH0 N\nBURSTS  B ER1 S T S\nBURT  B ER1 T\nBURTCH  B ER1 CH\nBURTIS  B ER1 - T IH0 S\nBURTNER  B ER1 T - N ER0\nBURTNESS  B ER1 T - N IH0 S\nBURTNETT  B ER1 T - N IH0 T\nBURTON  B ER1 - T AH0 N\nBURTON'S  B ER1 - T AH0 N Z\nBURTS  B ER1 T S\nBURTT  B ER1 T\nBURUNDI  B ER0 - AH1 N - D IY0\nBURUNDI'S  B ER0 - AH1 N - D IY0 Z\nBURWELL  B ER1 - W EH0 L\nBURWICK  B ER1 - W IH0 K\nBURY  B EH1 - R IY0\nBURY'S  B EH1 - R IY0 Z\nBURYING  B EH1 - R IY0 - IH0 NG\nBURZYNSKI  B ER0 - Z IH1 N - S K IY0\nBUS  B AH1 S\nBUSA  B Y UW1 - S AH0\nBUSALACCHI  B UW0 - S AA0 - L AA1 - K IY0\nBUSAM  B IH1 - S AH0 M\nBUSBEE  B AH1 S - B IY2\nBUSBEY  B AH1 S - B IY0\nBUSBIN  B AH1 S - B IH0 N\nBUSBOOM  B AH1 S - B UW2 M\nBUSBOY  B AH1 S - B OY2\nBUSBOYS  B AH1 S - B OY2 Z\nBUSBY  B AH1 Z - B IY0\nBUSCAGLIA  B UW0 - S K AA1 G - L IY0 - AH0\nBUSCEMI  B UW0 S - CH EH1 - M IY0\nBUSCH  B UH1 SH\nBUSCH'S  B UH1 - SH IH0 Z\nBUSCHBAUM  B UH1 SH - B AW2 M\nBUSCHE  B AH1 SH\nBUSCHER  B UW1 - SH ER0\nBUSCHMAN  B AH1 SH - M AH0 N\nBUSCHMANN  B AH1 SH - M AH0 N\nBUSE  B Y UW1 Z\nBUSED  B AH1 S T\nBUSEMAN  B IH1 S - M AH0 N\nBUSENBARK  B IH1 - S IH0 N - B AA0 R K\nBUSER  B IH1 - S ER0\nBUSES  B AH1 - S IH0 Z\nBUSEY  B Y UW1 - Z IY0\nBUSEY(2)  B AH1 - S IY0\nBUSH  B UH1 SH\nBUSH'S  B UH1 - SH IH0 Z\nBUSHA  B AH1 - SH AH0\nBUSHARD  B UH1 - SH ER0 D\nBUSHART  B UH1 - SH AA0 R T\nBUSHAW  B UH1 - SH AO0\nBUSHBY  B UH1 SH - B IY0\nBUSHEE  B UH1 - SH IY1\nBUSHEL  B UH1 - SH AH0 L\nBUSHELL  B UH1 - SH AH0 L\nBUSHELS  B UH1 - SH AH0 L Z\nBUSHER  B UH1 - SH ER0\nBUSHES  B UH1 - SH AH0 Z\nBUSHEY  B UH1 - SH IY0\nBUSHINGS  B UH1 - SH IH0 NG Z\nBUSHKIN  B UH1 SH - K IH2 N\nBUSHMAN  B UH1 SH - M AH0 N\nBUSHMEN  B UH1 SH - M EH0 N\nBUSHNELL  B UH1 SH - N AH0 L\nBUSHONG  B UH1 - SH AO0 NG\nBUSHWAY  B UH1 SH - W EY2\nBUSHY  B UH1 - SH IY0\nBUSIC  B AH1 - S IH0 K\nBUSICK  B IH1 - S IH0 K\nBUSIED  B IH1 - Z IY0 D\nBUSIER  B IH1 - Z IY0 - ER0\nBUSIEST  B IH1 - Z IY0 - AH0 S T\nBUSILY  B IH1 - Z AH0 - L IY0\nBUSINESS  B IH1 Z - N AH0 S\nBUSINESS'  B IH1 Z - N IH0 S\nBUSINESS'(2)  B IH1 Z - N AH0 S\nBUSINESS'S  B IH1 Z - N IH0 - S IH0 Z\nBUSINESS(2)  B IH1 Z - N IH0 S\nBUSINESSES  B IH1 Z - N AH0 - S AH0 Z\nBUSINESSES'  B IH1 Z - N EH2 - S IH0 Z\nBUSINESSES(2)  B IH1 Z - N IH0 - S IH0 Z\nBUSINESSLAND  B IH1 Z - N IH0 S - L AE2 N D\nBUSINESSLIKE  B IH1 Z - N IH0 S - L AY2 K\nBUSINESSMAN  B IH1 Z - N AH0 S - M AE2 N\nBUSINESSMAN'S  B IH1 Z - N IH0 S - M AE2 N Z\nBUSINESSMAN(2)  B IH1 Z - N IH0 S - M AE2 N\nBUSINESSMEN  B IH1 Z - N IH0 S - M EH2 N\nBUSINESSPEOPLE  B IH1 Z - N AH0 S - P IY1 - P AH0 L\nBUSINESSPERSON  B IH1 Z - N AH0 S - P ER1 - S AH0 N\nBUSINESSPHONE  B IH1 Z - N AH0 S - F OW2 N\nBUSINESSPHONES  B IH1 Z - N AH0 S - F OW2 N Z\nBUSINESSWOMAN  B IH1 Z - N IH0 S - W UH2 - M AH0 N\nBUSINESSWOMEN  B IH1 Z - N AH0 S - W OW1 - M AH0 N\nBUSING  B AH1 - S IH0 NG\nBUSK  B AH1 S K\nBUSKE  B AH1 S K\nBUSKER  B AH1 - S K ER0\nBUSKEY  B AH1 S - K IY2\nBUSKIRK  B AH1 - S K ER0 K\nBUSLEASE  B AH1 S - L IY2 S\nBUSLER  B AH1 - S AH0 - L ER0\nBUSLER(2)  B AH1 S - L ER0\nBUSLOAD  B AH0 S - L OW1 D\nBUSLOADS  B AH0 S - L OW1 D Z\nBUSPAR  B AH1 - S P ER0\nBUSS  B AH1 S\nBUSSA  B UW1 - S AH0\nBUSSARD  B AH1 - S ER0 D\nBUSSE  B AH1 S\nBUSSED  B AH1 S T\nBUSSELL  B AH1 - S AH0 L\nBUSSEN  B AH1 - S AH0 N\nBUSSER  B AH1 - S ER0\nBUSSERT  B AH1 - S ER0 T\nBUSSES  B AH1 - S AH0 Z\nBUSSEY  B AH1 - S IY0\nBUSSI  B AH1 - S IY0\nBUSSI(2)  B Y UW1 - S IY0\nBUSSIE  B AH1 - S IY0\nBUSSIE(2)  B Y UW1 - S IY0\nBUSSIERE  B AH1 - S IY0 - EH0 R\nBUSSING  B AH1 - S IH0 NG\nBUSSINGER  B AH1 - S IH0 N - JH ER0\nBUSSMAN  B AH1 S - M AH0 N\nBUST  B AH1 S T\nBUSTA  B AH1 - S T AH0\nBUSTAMANTE  B UW2 - S T AH0 - M AA1 N - T IY0\nBUSTARD  B AH1 - S T ER0 D\nBUSTED  B AH1 - S T IH0 D\nBUSTER  B AH1 - S T ER0\nBUSTERS  B AH1 - S T ER0 Z\nBUSTI  B AH1 - S T IY0\nBUSTIER  B AH1 - S T Y ER0\nBUSTILLO  B UW0 - S T IH1 - L OW0\nBUSTILLOS  B AH1 - S T AY0 - L OW0 Z\nBUSTIN  B AH1 - S T IH0 N\nBUSTING  B AH1 - S T IH0 NG\nBUSTLE  B AH1 - S AH0 L\nBUSTLING  B AH1 - S AH0 - L IH0 NG\nBUSTLING(2)  B AH1 - S L IH0 NG\nBUSTO  B AH1 - S T OW0\nBUSTOS  B AH1 - S T OW0 Z\nBUSTS  B AH1 S T S\nBUSULAKI  B Y UW1 - S AH0 - L AE2 - K IY0\nBUSWELL  B AH1 - S W EH2 L\nBUSY  B IH1 - Z IY0\nBUT  B AH1 T\nBUT'S  B AH1 T S\nBUTALA  B UW0 - T AA1 - L AH0\nBUTANE  B Y UW0 - T EY1 N\nBUTANE(2)  B Y UW1 - T EY0 N\nBUTARE  B UW0 - T AA1 - R IY0\nBUTARE'S  B UW0 - T AA1 - R IY0 Z\nBUTARE'S(2)  B Y UW0 - T AA1 - R IY0 Z\nBUTARE(2)  B Y UW0 - T AA1 - R IY0\nBUTCH  B UH1 CH\nBUTCHART  B UH1 - CH ER0 T\nBUTCHER  B UH1 - CH ER0\nBUTCHER'S  B UH1 - CH ER0 Z\nBUTCHERED  B UH1 - CH ER0 D\nBUTCHERING  B UH1 - CH ER0 - IH0 NG\nBUTCHERS  B UH1 - CH ER0 Z\nBUTCHERY  B UH1 - CH ER0 - IY0\nBUTCHKO  B AH1 CH - K OW0\nBUTCHKO(2)  B UH1 CH - K OW0\nBUTE  B Y UW1 T\nBUTEAU  B Y UW0 - T OW1\nBUTECO  B UW2 - T EH1 - K OW0\nBUTENHOFF  B Y UW1 - T IH0 N - HH AO0 F\nBUTERA  B UW0 - T EH1 - R AH0\nBUTERBAUGH  B Y UW1 - T ER0 - B AW0\nBUTH  B UW1 TH\nBUTHELEZI  B UW2 - T AH0 - L EY1 - Z IY0\nBUTHELEZI'S  B UW2 - T AH0 - L EY1 - Z IY0 Z\nBUTKA  B AH1 T - K AH0\nBUTKIEWICZ  B AH1 T - K AH0 - V IH0 CH\nBUTKOVICH  B AH1 T - K AH0 - V IH0 CH\nBUTKUS  B AH1 T - K IH0 S\nBUTLER  B AH1 T - L ER0\nBUTLER'S  B AH1 T - L ER0 Z\nBUTLERS  B AH1 T - L ER0 Z\nBUTMAN  B AH1 T - M AH0 N\nBUTNER  B AH1 T - N ER0\nBUTORAC  B Y UW0 - T AO1 - R AH0 K\nBUTRICK  B AH1 - T R IH0 K\nBUTROS  B UW1 - T R OW2 S\nBUTROS(2)  B UW1 - T R AH0 S\nBUTS  B AH1 T S\nBUTSCH  B AH1 CH\nBUTSON  B AH1 T - S AH0 N\nBUTT  B AH1 T\nBUTTACAVOLI  B UW0 - T AA0 - K AA0 - V OW1 - L IY0\nBUTTAFUOCO  B UW0 - T AH0 - F W OW1 - K OW0\nBUTTAFUOCO'S  B UW0 - T AH0 - F W OW1 - K OW0 Z\nBUTTARS  B AH1 - T ER0 Z\nBUTTE  B Y UW1 T\nBUTTER  B AH1 - T ER0\nBUTTERBALL  B AH1 - T ER0 - B AO2 L\nBUTTERBAUGH  B AH1 - T ER0 - B AW0\nBUTTERCUP  B AH1 - T ER0 - K AH2 P\nBUTTERCUPS  B AH1 - T ER0 - K AH2 P S\nBUTTERED  B AH1 - T ER0 D\nBUTTERFAT  B AH1 - T ER0 - F AE2 T\nBUTTERFIELD  B AH1 - T ER0 - F IY0 L D\nBUTTERFLIES  B AH1 - T ER0 - F L AY2 Z\nBUTTERFLY  B AH1 - T ER0 - F L AY2\nBUTTERFLY'S  B AH1 - T ER0 - F L AY2 Z\nBUTTERICK  B AH1 - T ER0 - IH0 K\nBUTTERMILK  B AH1 - T ER0 - M IH2 L K\nBUTTERMORE  B AH1 - T ER0 - M AO0 R\nBUTTERS  B AH1 - T ER0 Z\nBUTTERSCOTCH  B AH1 - T ER0 - S K AA2 CH\nBUTTERWORTH  B AH1 - T ER0 - W ER2 TH\nBUTTERY  B AH1 - T ER0 - IY0\nBUTTHEAD  B AH1 T - HH EH2 D\nBUTTING  B AH1 - T IH0 NG\nBUTTITTA  B UW0 - T IY1 - T AH0\nBUTTKE  B AH1 T - K IY0\nBUTTLER  B AH1 T - L ER0\nBUTTNER  B AH1 T - N ER0\nBUTTOCK  B AH1 - T AH0 K\nBUTTOCKS  B AH1 - T AH0 K S\nBUTTON  B AH1 - T AH0 N\nBUTTONED  B AH1 - T AH0 N D\nBUTTONHOLE  B AH1 - T AH0 N - HH OW2 L\nBUTTONHOLED  B AH1 - T AH0 N - HH OW2 L D\nBUTTONHOLES  B AH1 - T AH0 N - HH OW2 L Z\nBUTTONS  B AH1 - T AH0 N Z\nBUTTONVILLE  B AH1 - T AH0 N - V IH2 L\nBUTTRAM  B AH1 - T R AE2 M\nBUTTRESS  B AH1 - T R AH0 S\nBUTTRESSED  B AH1 - T R AH0 S T\nBUTTRESSES  B AH1 - T R AH0 - S AH0 Z\nBUTTRESSES(2)  B AH1 - T R AH0 - S IH0 Z\nBUTTRESSING  B AH1 - T R AH0 - S IH0 NG\nBUTTREY  B AH1 - T R IY0\nBUTTRICK  B AH1 - T R IH0 K\nBUTTRUM  B AH1 - T R AH0 M\nBUTTRY  B AH1 - T R IY0\nBUTTS  B AH1 T S\nBUTULESI  B UW2 - T AH0 - L EY1 - Z IY0\nBUTULESI'S  B UW2 - T AH0 - L EY1 - Z IY0 Z\nBUTYL  B Y UW1 - T AH0 L\nBUTZ  B AH1 T S\nBUTZBERGER  B AH1 T S - B ER0 - G ER0\nBUTZEN  B AH1 T - S AH0 N\nBUTZER  B AH1 T - S ER0\nBUTZIN  B AH1 T - S AH0 N\nBUUS  B UW1 Z\nBUXBAUM  B AH1 K S - B AW0 M\nBUXOM  B AH1 K - S AH0 M\nBUXTON  B AH1 K - S T AH0 N\nBUY  B AY1\nBUY'S  B AY1 Z\nBUYBACK  B AY1 - B AE2 K\nBUYBACKS  B AY1 - B AE2 K S\nBUYER  B AY1 - ER0\nBUYER'S  B AY1 - ER0 Z\nBUYERS  B AY1 - ER0 Z\nBUYERS'  B AY1 - ER0 Z\nBUYING  B AY1 - IH0 NG\nBUYOUT  B AY1 - AW2 T\nBUYOUTS  B AY1 - AW2 T S\nBUYS  B AY1 Z\nBUYSSE  B AY1 S\nBUZA  B Y UW1 - Z AH0\nBUZAN  B Y UW1 - Z AH0 N\nBUZARD  B Y UW0 - Z AA1 R D\nBUZBEE  B AH1 Z - B IY2\nBUZBY  B AH1 Z - B IY0\nBUZEK  B UW1 - Z EH0 K\nBUZZ  B AH1 Z\nBUZZARD  B AH1 - Z ER0 D\nBUZZARD'S  B AH1 - Z ER0 D Z\nBUZZARDS  B AH1 - Z ER0 D Z\nBUZZED  B AH1 Z D\nBUZZELL  B AH0 - Z EH1 L\nBUZZELLI  B UW0 T - S EH1 - L IY0\nBUZZER  B AH1 - Z ER0\nBUZZES  B AH1 - Z IH0 Z\nBUZZETTA  B Y UW0 - Z EH1 - T AH0\nBUZZING  B AH1 - Z IH0 NG\nBUZZWORD  B AH1 Z - W ER0 D\nBUZZWORDS  B AH1 Z - W ER0 D Z\nBUZZY  B AH1 - Z IY0\nBUZZY'S  B AH1 - Z IY0 Z\nBY  B AY1\nBYAM  B AY1 - AH0 M\nBYARD  B Y AA1 R D\nBYARD(2)  B AY1 - ER0 D\nBYARS  B AY1 - ER0 Z\nBYAS  B AY1 - AH0 S\nBYASSEE  B IY0 - AA1 - S IY0\nBYBEE  B AY1 - B IY2\nBYE  B AY1\nBYE-BYE  B AY1 - B AY1\nBYELORUSSIA  B AY2 - AH0 - L OW0 - R AH1 - SH AH0\nBYELORUSSIA(2)  B EH1 - L OW0 - R AH1 - SH AH0\nBYELORUSSIA(3)  B AY2 - EH1 - L OW0 - R AH1 - SH AH0\nBYER  B AY1 - ER0\nBYERLEIN  B AY1 R - L AY2 N\nBYERLEY  B AY1 - ER0 - L IY0\nBYERLY  B AY1 - ER0 - L IY0\nBYERS  B AY1 - ER0 Z\nBYFIELD  B AY1 - F IY2 L D\nBYFORD  B IH1 - F ER0 D\nBYGONE  B AY1 - G AO2 N\nBYGONES  B AY1 - G AO2 N Z\nBYINGTON  B AY1 - IH0 NG - T AH0 N\nBYKER  B AY1 - K ER0\nBYKOWSKI  B IH0 - K AO1 F S - K IY0\nBYLAND  B AY1 - L AH0 N D\nBYLAW  B AY1 - L AO2\nBYLAWS  B AY1 - L AO2 Z\nBYLER  B AY1 - L ER0\nBYLES  B AY1 L Z\nBYLINE  B AY1 - L AY2 N\nBYLINES  B AY1 - L IY2 N Z\nBYLSMA  B IH1 L S - M AH0\nBYLUND  B IH1 - L AH0 N D\nBYNER  B AY1 - N ER0\nBYNES  B AY1 N Z\nBYNOE  B IH1 - N OW0\nBYNUM  B IH1 - N AH0 M\nBYPASS  B AY1 - P AE2 S\nBYPASSED  B AY1 - P AE2 S T\nBYPASSES  B AY1 - P AE2 - S IH0 Z\nBYPASSING  B AY1 - P AE2 - S IH0 NG\nBYPRODUCT  B AY1 - P R AA0 - D AH0 K T\nBYPRODUCTS  B AY1 - P R AO2 - D AH0 K T S\nBYRAM  B IH1 - R AH0 M\nBYRD  B ER1 D\nBYRD'S  B ER1 D Z\nBYRER  B AY1 - R ER0\nBYRGE  B AY1 R JH\nBYRLE  B AY1 - R AH0 L\nBYRN  B IH1 R N\nBYRNE  B ER1 N\nBYRNE'S  B ER1 N Z\nBYRNES  B ER1 N Z\nBYRNS  B IH1 R N Z\nBYROM  B AY1 - R AH0 M\nBYRON  B AY1 - R AH0 N\nBYRON'S  B AY1 - R AH0 N Z\nBYRUM  B IH1 - R AH0 M\nBYSTANDER  B AY1 - S T AE2 N - D ER0\nBYSTANDERS  B AY1 - S T AE2 N - D ER0 Z\nBYSTROM  B IH1 - S T R AH0 M\nBYTE  B AY1 T\nBYTES  B AY1 T S\nBYU  B IY1 - W AY1 - Y UW1\nBYUN  B Y AH1 N\nBYUS  B AY1 - AH0 S\nBYWATER  B AY1 - W AO2 - T ER0\nBYWAY  B AY1 - W EY2\nBYWAYS  B AY1 - W EY2 Z\nBYWORD  B AY1 - W ER2 D\nBYZANTINE  B IH1 - Z AH0 N - T AY2 N\nBYZANTINE(2)  B IH1 - Z AH0 N - T IY2 N\nBYZANTIUM  B AH0 - Z AE1 N - T IY0 - AH0 M\nC  S IY1\nC'EST  S EH1 S T\nC'EST(2)  S EY1\nC'MON  K AH0 - M AA1 N\nC'S  S IY1 Z\nC-CODE  S IY1 - K OW1 D\nC-CODES  S IY1 - K OW1 D Z\nC-SPAN  S IY1 - S P AE2 N\nC-SPAN'S  S IY1 - S P AE2 N Z\nC.  S IY1\nC.'S  S IY1 Z\nC.D.S  S IY1 - D IY1 Z\nC.S  S IY1 Z\nC1  S IY1 - W AH1 N\nC2  S IY1 - T UW1\nC3  S IY1 - TH R IY1\nC4  S IY1 - F AO1 R\nC5  S IY1 - F AY1 V\nCA  K AH1\nCA(2)  S IY1 - EY1\nCA(3)  K AA1\nCAAN  K AA1 N\nCAB  K AE1 B\nCAB'S  K AE1 B Z\nCABA  K AA1 - B AH0\nCABAL  K AH0 - B AA1 L\nCABALLERO  K AE2 - B AH0 - Y EH1 - R OW0\nCABAN  K EY1 - B AH0 N\nCABANA  K AH0 - B AE1 - N AH0\nCABANAS  K AH0 - B AE1 - N AH0 Z\nCABANISS  K AE1 - B AH0 - N IH0 S\nCABARET  K AE2 - B ER0 - EY1\nCABBAGE  K AE1 - B AH0 JH\nCABBAGE(2)  K AE1 - B IH0 JH\nCABBAGES  K AE1 - B IH0 - JH IH0 Z\nCABBIE  K AE1 - B IY0\nCABBIES  K AE1 - B IY0 Z\nCABBY  K AE1 - B IY0\nCABDRIVER  K AE1 B - D R AY2 - V ER0\nCABDRIVERS  K AE1 B - D R AY2 - V ER0 Z\nCABE  K EY1 B\nCABELL  K AA0 - B EH1 L\nCABELLO  K AH0 - B EH1 - L OW0\nCABERNET  K AE2 - B ER0 - N EY1\nCABERNETS  K AE2 - B ER0 - N EH1 T S\nCABERNETS(2)  K AE2 - B ER0 - N EY1 Z\nCABEY  K EY1 - B IY0\nCABEZAS  K AH0 - B EY1 - Z AH0 Z\nCABIN  K AE1 - B AH0 N\nCABINDA  K AH0 - B IH1 N - D AH0\nCABINESS  K EY1 - B IY0 - N IH0 S\nCABINET  K AE1 - B AH0 - N AH0 T\nCABINET'S  K AE1 B - N AH0 T S\nCABINET(2)  K AE1 B - N AH0 T\nCABINETRY  K AE1 B - N AH0 - T R IY0\nCABINETS  K AE1 - B AH0 - N AH0 T S\nCABINETS(2)  K AE1 B - N AH0 T S\nCABINS  K AE1 - B AH0 N Z\nCABLE  K EY1 - B AH0 L\nCABLE'S  K EY1 - B AH0 L Z\nCABLEC  K AE1 - B L AH0 K\nCABLEC(2)  K EY1 - B AH0 L - S IY1\nCABLEC(3)  K EY1 - B L EH0 K\nCABLECOMM  K EY1 - B AH0 L - K AA2 M\nCABLECOMMS  K EY1 - B AH0 L - K AA2 M Z\nCABLED  K EY1 - B AH0 L D\nCABLEGRAM  K EY1 - B AH0 L - G R AE2 M\nCABLEONE  K EY1 - B AH0 L - W AH2 N\nCABLER  K EY1 - B AH0 L - ER0\nCABLER(2)  K EY1 - B L ER0\nCABLES  K EY1 - B AH0 L Z\nCABLESYSTEM  K EY1 - B AH0 L - S IH2 - S T AH0 M\nCABLESYSTEMS  K EY1 - B AH0 L - S IH2 - S T AH0 M Z\nCABLETRON  K EY1 - B AH0 L - T R AO2 N\nCABLETRON'S  K EY1 - B AH0 L - T R AO2 N Z\nCABLEVISION  K EY1 - B AH0 L - V IH2 - ZH AH0 N\nCABLEVISION'S  K EY1 - B AH0 L - V IH2 - ZH AH0 N Z\nCABO  K AE0 - B OW1\nCABO(2)  S IY1 - EY1 - B IY1 - OW1\nCABOK  AE1 - B OW0\nCABOODLE  K AH0 - B UW1 - D AH0 L\nCABOOSE  K AH0 - B UW1 S\nCABOOSES  K AH0 - B UW1 - S IH0 Z\nCABOT  K AE1 - B AH0 T\nCABOT'S  K AE1 - B AH0 T S\nCABOTAGE  K AE1 - B AH0 - T IH0 JH\nCABRAL  K AE1 - B R AH0 L\nCABRALES  K AA0 B - R AA1 - L EH0 S\nCABRALL  K AH0 - B R AA1 L\nCABRALL'S  K AH0 - B R AA1 L Z\nCABRANES  K AH0 - B R EY1 N Z\nCABRERA  K AA0 - B R EH1 - R AH0\nCABRINI  K AH0 - B R IY1 - N IY0\nCABRINI'S  K AH0 - B R IY1 - N IY0 Z\nCABRIOLET  K AE2 - B R IY0 - OW0 - L EY1\nCABRIOLET(2)  K AE2 - B R IY0 - OW0 - L EH1 T\nCABS  K AE1 B Z\nCAC  K AE1 K\nCAC'S  K AE1 K S\nCAC(2)  S IY1 - EY1 - S IY1\nCACACE  K AE1 - K AH0 S\nCACACI  K AH0 - K AA1 - S IY0\nCACAO  K AH0 - K EY1 - OW0\nCACCAMISE  K AA0 - K AA1 - M IH0 S\nCACCAMO  K AA0 - K AA1 - M OW0\nCACCAVALE  K AA0 - K AH0 - V AA1 - L IY0\nCACCIA  K AA1 - CH AH0\nCACCIATORE  K AA0 - CH AH0 - T AO1 - R IY0\nCACCIOLA  K AA0 K - CH OW1 - L AH0\nCACERES  K AA0 - S EH1 - R EH0 S\nCACHE  K AE1 SH\nCACHE(2)  K AE0 - SH EY1\nCACHES  K AE1 - SH IH0 Z\nCACHES(2)  K AE0 - SH EY1 Z\nCACHET  K AE1 - SH EY0\nCACHO  K AE1 - CH OW0\nCACIOPPO  K AA0 - CH OW1 - P OW0\nCACIQUE  K AH0 - S IY1 K\nCACKLE  K AE1 - K AH0 L\nCACKLING  K AE1 - K AH0 - L IH0 NG\nCACKLING(2)  K AE1 - K L IH0 NG\nCACLD  K AE1 - K AH0 L D\nCACLD(2)  S IY1 - EY1 - S IY1 - EH1 L - D IY1\nCACOPHONY  K AE0 - K AA1 - F AH0 - N IY0\nCACTI  K AE1 K - T AY0\nCACTI(2)  K AE1 K - T IY0\nCACTUS  K AE1 K - T AH0 S\nCAD  K AE1 D\nCADA  K AA1 - D AH0\nCADAM  K AE1 - D AH0 M\nCADAVER  K AH0 - D AE1 - V ER0\nCADAVERS  K AH0 - D AE1 - V ER0 Z\nCADBURY  K AE1 D - B EH2 - R IY0\nCADBURY'S  K AE1 D - B EH2 - R IY0 Z\nCADBY  K AE1 D - B IY0\nCADDELL  K AE1 - D AH0 L\nCADDEN  K AE1 - D AH0 N\nCADDICK  K AE1 - D IH0 K\nCADDIES  K AE1 - D IY0 Z\nCADDOCK  K AE1 - D AH0 K\nCADDY  K AE1 - D IY0\nCADDYSHACK  K AE1 - D IY0 - SH AE2 K\nCADE  K EY1 D\nCADELL  K AA0 - D EY1 L\nCADENA  K AH0 - D IY1 - N AH0\nCADENCE  K EY1 - D AH0 N S\nCADENCES  K EY1 - D AH0 N - S IH0 Z\nCADENHEAD  K EY1 - D AH0 N - HH EH2 D\nCADET  K AH0 - D EH1 T\nCADETS  K AH0 - D EH1 T S\nCADIEUX  K AE1 - D IY0 - OW0\nCADILLAC  K AE1 - D AH0 - L AE2 K\nCADILLAC'S  K AE1 - D AH0 - L AE2 K S\nCADILLACS  K AE1 - D AH0 - L AE2 K S\nCADIZ  K AH0 - D IY1 Z\nCADLE  K EY1 - D AH0 L\nCADMAN  K AE1 D - M AH0 N\nCADMIUM  K AE1 D - M IY0 - AH0 M\nCADMUS  K AE1 D - M AH0 S\nCADNETIX  K AE2 D - N EH1 - T IH0 K S\nCADOGAN  K AA0 - D OW0 - G AA1 N\nCADORETTE  K AE1 - D ER0 - EH0 T\nCADOTTE  K AH0 - D AO1 T\nCADRE  K AE1 - D R IY0\nCADRES  K AE1 - D R IY0 Z\nCADRONE  K AH0 - D R OW1 N\nCADRONE(2)  K AH0 - D R OW1 - N IY0\nCADS  K AE1 D S\nCADWALADER  K AE2 D - W AO1 - L AH0 - D ER0\nCADWALADER'S  K AE2 D - W AO1 - L AH0 - D ER0 Z\nCADWALLADER  K AE2 D - W AO1 - L AH0 - D ER0\nCADWELL  K AE1 D - W EH2 L\nCADY  K EY1 - D IY0\nCAEN  K AE1 N\nCAEN'S  K AE1 N Z\nCAEN'S(2)  K AA1 N Z\nCAEN(2)  K AA1 N\nCAESAR  S IY1 - Z ER0\nCAESAR'S  S IY1 - Z ER0 Z\nCAESAREA  K EY2 - S ER0 - IY1 - AH0\nCAESAREAN  K EY1 - S ER0 - IY2 N\nCAESAREANS  K EY1 - S ER0 - IY2 N Z\nCAESARS  S IY1 - Z ER0 Z\nCAESARS'  S IY1 - Z ER0 Z\nCAETANO  K AH0 - T AA1 - N OW0\nCAFARELLA  K AA0 - F AA0 - R EH1 - L AH0\nCAFARELLI  K AA0 - F AA0 - R EH1 - L IY0\nCAFARO  K AA0 - F AA1 - R OW0\nCAFE  K AH0 - F EY1\nCAFE(2)  K AE0 - F EY1\nCAFES  K AE2 - F EY1 Z\nCAFETERIA  K AE2 - F AH0 - T IH1 - R IY0 - AH0\nCAFETERIAS  K AE2 - F AH0 - T IH1 - R IY0 - AH0 Z\nCAFETIZER  K AE1 - F IH0 - T AY2 - Z ER0\nCAFFEE  K AE1 - F IY0\nCAFFEINATE  K AE1 - F IH0 - N EY2 T\nCAFFEINATED  K AE1 - F IH0 - N EY2 - T AH0 D\nCAFFEINE  K AE0 - F IY1 N\nCAFFERTY  K AE1 - F ER0 - T IY0\nCAFFERY  K AE1 - F ER0 - IY0\nCAFFEY  K AE1 - F IY0\nCAFFREY  K AE1 - F R IY0\nCAFIERO  K AE2 - F IY0 - EH1 - R OW0\nCAGAN  K EY1 - G AH0 N\nCAGE  K EY1 JH\nCAGE'S  K EY1 - JH IH0 Z\nCAGED  K EY1 JH D\nCAGES  K EY1 - JH IH0 Z\nCAGEY  K EY1 - JH IY0\nCAGGIANO  K AA0 - JH IY0 - AA1 - N OW0\nCAGLE  K EY1 - G AH0 L\nCAGLEY  K AE1 G - L IY0\nCAGLIARI  K AE2 G - L IY0 - AA1 - R IY0\nCAGNEY  K AE1 G - N IY0\nCAGUAS  K AA1 G - W AA2 S\nCAHALAN  K AE1 - HH AH0 - L AH0 N\nCAHALL  K AE1 - HH AH0 L\nCAHAN  K AE1 - HH AH0 N\nCAHASA  K AH0 - HH AA1 - S AH0\nCAHILL  K EY1 - HH IH2 L\nCAHN  K AE1 N\nCAHNERS  K AA1 - N ER0 Z\nCAHOON  K AH0 - HH UW1 N\nCAHOOT  K AH0 - HH UW1 T\nCAHOOTS  K AH0 - HH UW1 T S\nCAHORA  K AH0 - HH AO1 - R AH0\nCAHOUET  K AH0 - HH UW1 T\nCAI  K AY1\nCAIAZZO  K AA0 - Y AA1 - Z OW0\nCAICEDO  K AH0 - CH EY1 - D OW0\nCAIL  K EY1 L\nCAILLIER  K EY1 - L IY0 - ER0\nCAILLOUET  K EY2 - L UW1 T\nCAIN  K EY1 N\nCAIN'S  K EY1 N Z\nCAINE  K EY1 N\nCAINES  K EY1 N Z\nCAIOLA  K AY1 - OW0 - L AH0\nCAIRE  K EH1 R\nCAIRNES  K EH1 R N Z\nCAIRNS  K EH1 R N Z\nCAIRO  K AY1 - R OW0\nCAIRO'S  K AY1 - R OW0 Z\nCAISON  K EY1 - Z AH0 N\nCAISSE  K EY1 S\nCAISSIE  K EY1 - S IY0\nCAITLIN  K EY1 T - L IH0 N\nCAITO  K EY1 - T OW0\nCAJOLE  K AH0 - JH OW1 L\nCAJOLED  K AH0 - JH OW1 L D\nCAJOLING  K AH0 - JH OW1 - L IH0 NG\nCAJUN  K EY1 - JH AH0 N\nCAJUNS  K EY1 - JH AH0 N Z\nCAKE  K EY1 K\nCAKE'S  K EY1 K S\nCAKED  K EY1 K T\nCAKES  K EY1 K S\nCAL  K AE1 L\nCALA  K AA1 - L AH0\nCALABASAS  K AE2 - L AH0 - B AA1 - S AH0 S\nCALABRESE  K AA0 - L AA0 - B R EY1 - Z IY0\nCALABRIA  K AH0 - L AE1 - B R IY0 - AH0\nCALABRO  K AH0 - L AE1 - B R OW0\nCALADIUMS  K AH0 - L EY1 - D IY0 - AH0 M Z\nCALAF  K AE1 - L AH0 F\nCALAHAN  K AE1 - L AH0 - HH AE0 N\nCALAIS  K AH0 - L EY1\nCALAMANDER  K AE1 - L AH0 - M AE2 N - D ER0\nCALAMARI  K AA0 - L AA0 - M AA1 - R IY0\nCALAME  K AA0 - L AA1 - M IY0\nCALAMIA  K AH0 - L EY1 - M IY0 - AH0\nCALAMINE  K AE1 - L AH0 - M AY2 N\nCALAMINE'S  K AE1 - L AH0 - M AY2 N Z\nCALAMITIES  K AH0 - L AE1 - M AH0 - T IY0 Z\nCALAMITOUS  K AH0 - L AE1 - M AH0 - T AH0 S\nCALAMITY  K AH0 - L AE1 - M AH0 - T IY0\nCALAMITY(2)  K AH0 - L AE1 - M IH0 - T IY0\nCALAN  K EY1 - L AH0 N\nCALANDRA  K AH0 - L AE1 N - D R AH0\nCALANDRO  K AH0 - L AE1 N - D R OW0\nCALANTHA  K AH0 - L AE1 N - TH AH0\nCALARCO  K AH0 - L AA1 R - K OW0\nCALAVERAS  K AE0 - L AH0 - V EH1 - R AH0 Z\nCALAWAY  K AA1 - L AH0 - W EY0\nCALBERT  K AE1 L - B ER0 T\nCALBOS  K AA1 L - B OW0 S\nCALCAGNI  K AA0 L - K AA1 G - N IY0\nCALCAGNO  K AA0 L - K AA1 G - N OW0\nCALCATERRA  K AE2 L - K AH0 - T EH1 - R AH0\nCALCIFIED  K AE1 L - S AH0 - F AY2 D\nCALCIFY  K AE1 L - S AH0 - F AY2\nCALCITE  K AE1 L - S AY2 T\nCALCIUM  K AE1 L - S IY0 - AH0 M\nCALCOMP  K AO1 L - K AA2 M P\nCALCOTE  K AA0 L - K OW1 - T IY0\nCALCULATE  K AE1 L - K Y AH0 - L EY2 T\nCALCULATED  K AE1 L - K Y AH0 - L EY2 - T AH0 D\nCALCULATED(2)  K AE1 L - K Y AH0 - L EY2 - T IH0 D\nCALCULATES  K AE1 L - K Y AH0 - L EY2 T S\nCALCULATING  K AE1 L - K Y AH0 - L EY2 - T IH0 NG\nCALCULATION  K AE2 L - K Y AH0 - L EY1 - SH AH0 N\nCALCULATIONS  K AE2 L - K Y AH0 - L EY1 - SH AH0 N Z\nCALCULATOR  K AE1 L - K Y AH0 - L EY2 - T ER0\nCALCULATORS  K AE1 L - K Y AH0 - L EY2 - T ER0 Z\nCALCULUS  K AE1 L - K Y AH0 - L AH0 S\nCALCUTT  K AE1 L - K AH0 T\nCALCUTTA  K AE2 L - K AH1 - T AH0\nCALDEIRA  K AA0 L - D EH1 - R AH0\nCALDER  K AO1 L - D ER0\nCALDERA  K AE2 L - D EH1 - R AH0\nCALDERA(2)  K AO2 L - D EH1 - R AH0\nCALDERARO  K AA0 L - D ER0 - AA1 - R OW0\nCALDERON  K AO1 L - D ER0 - AA0 N\nCALDERON(2)  K AE2 L - D ER0 - OW1 N\nCALDERONE  K AA0 L - D ER0 - OW1 - N IY0\nCALDERWOOD  K AO1 L - D ER0 - W UH0 D\nCALDOR  K AE1 L - D AO0 R\nCALDRELLO  K AA2 L - D R EH1 - L OW0\nCALDWELL  K AO1 L D - W EH0 L\nCALDWELL'S  K AO1 L D - W EH0 L Z\nCALE  K EY1 L\nCALEB  K EY1 - L AH0 B\nCALEBS  K EY1 - L AH0 B Z\nCALECA  K AA0 - L EH1 - K AH0\nCALEDONIA  K AE2 - L AH0 - D OW1 - N IY0 - AH0\nCALEDONIAN  K AE2 - L IH0 - D OW1 - N IY0 - AH0 N\nCALEDONIAN'S  K AE2 - L IH0 - D OW1 - N IY0 - AH0 N Z\nCALEF  K AE1 - L IH0 F\nCALEMBURG  K AE1 - L AH0 M - B ER0 G\nCALENDAR  K AE1 - L AH0 N - D ER0\nCALENDARS  K AE1 - L AH0 N - D ER0 Z\nCALER  K EY1 - L ER0\nCALERO  K AH0 - L EH1 - R OW0\nCALES  K EY1 L Z\nCALEY  K EY1 - L IY0\nCALF  K AE1 F\nCALF'S  K AE1 F S\nCALFED  K AE1 F T\nCALFED'S  K AE1 L - F EH2 D Z\nCALFED(2)  K AE1 L - F EH2 D\nCALFEE  K AE1 L - F IY0\nCALGARY  K AE1 L - G ER0 - IY0\nCALGENE  K AE1 L - JH IY2 N\nCALGENE'S  K AE1 L - JH IY2 N Z\nCALGON  K AE1 L - G AO0 N\nCALGROUP  K AE1 L - G R UW2 P\nCALHOON  K AE0 L - HH UW1 N\nCALHOUN  K AE0 L - HH UW1 N\nCALI  K AA1 - L IY0\nCALI(2)  K AE1 - L IY0\nCALIA  K AA1 - L IY0 - AH0\nCALIBER  K AE1 - L AH0 - B ER0\nCALIBRATE  K AE1 - L AH0 - B R EY2 T\nCALIBRATED  K AE1 - L AH0 - B R EY2 - T AH0 D\nCALIBRATION  K AE2 - L AH0 - B R EY1 - SH AH0 N\nCALICO  K AE1 - L AH0 - K OW2\nCALIDA  K AA0 - L IY1 - D AH0\nCALIENDO  K AA0 - L IY0 - EH1 N - D OW0\nCALIF  K AE2 - L AH0 - F AO1 R - N Y AH0\nCALIF(2)  K AE1 - L IH0 F\nCALIF.  K AE0 - L IH0 - F AO1 R - N Y AH0\nCALIFANO  K AA0 - L IY0 - F AA1 - N OW0\nCALIFF  K AE1 - L IH0 F\nCALIFORNIA  K AE2 - L AH0 - F AO1 R - N Y AH0\nCALIFORNIA'S  K AE2 - L IH0 - F AO1 R - N Y AH0 Z\nCALIFORNIAN  K AE2 - L IH0 - F AO1 R - N Y AH0 N\nCALIFORNIAN'S  K AE2 - L IH0 - F AO1 R - N Y AH0 N Z\nCALIFORNIANS  K AE2 - L IH0 - F AO1 R - N Y AH0 N Z\nCALIGIURI  K AE2 - L AH0 - JH IH1 - R IY0\nCALILL  K AH0 - L IH1 L\nCALILLS  K AH0 - L IH1 L Z\nCALIPER  K AE1 - L AH0 - P ER0\nCALIPERS  K AE1 - L AH0 - P ER0 Z\nCALIPH  K AE1 - L AH0 F\nCALIRI  K AA0 - L IH1 - R IY0\nCALISE  K AA1 - L AY0 Z\nCALISTA  K AH0 - L IH1 - S T AH0\nCALISTHENIC  K AE2 - L AH0 S - TH EH1 - N IH0 K\nCALISTHENICS  K AE2 - L AH0 S - TH EH1 - N IH0 K S\nCALITE  K AE1 - L AY2 T\nCALITE(2)  K EY1 - L AY2 T\nCALIX  K AE1 - L IH0 K S\nCALIX(2)  K EY1 - L AH0 K S\nCALK  K AO1 K\nCALKIN  K AE1 L - K IH0 N\nCALKINS  K AE1 L - K IH0 N Z\nCALL  K AO1 L\nCALL'S  K AO1 L Z\nCALL'S(2)  K AA1 L Z\nCALLA  K AE1 - L AH0\nCALLABLE  K AO1 - L AH0 - B AH0 L\nCALLACE  K AE1 - L AH0 S\nCALLAGHAN  K AE1 - L AH0 - HH AE0 N\nCALLAHAM  K AE1 - L AH0 - HH AE2 M\nCALLAHAN  K AE1 - L AH0 - HH AE2 N\nCALLAHAN'S  K AE1 - L AH0 - HH AE2 N Z\nCALLAIS  K AH0 - L EY1\nCALLAN  K AE1 - L AH0 N\nCALLANAN  K AE1 - L AH0 - N AH0 N\nCALLAND  K AE1 - L AH0 N D\nCALLANDER  K AE1 - L AH0 N - D ER0\nCALLARI  K AA0 - L AA1 - R IY0\nCALLAS  K AE1 - L AH0 Z\nCALLAWAY  K AE1 - L AH0 - W EY0\nCALLAWAY'S  K AO1 L - AH0 - W EY2 Z\nCALLE  K EY1 L\nCALLEBS  K EY1 - L EH2 B Z\nCALLED  K AO1 L D\nCALLEGARI  K AA0 - L EH0 - G AA1 - R IY0\nCALLEJA  K AA0 - L EY1 - Y AH0\nCALLEJAS  K AA0 - L EY1 - Y AA0 Z\nCALLEN  K AE1 - L AH0 N\nCALLENDER  K AH0 - L EH1 N - D ER0\nCALLENS  K AO1 - L AH0 N Z\nCALLER  K AO1 - L ER0\nCALLER'S  K AO1 - L ER0 Z\nCALLERS  K AO1 - L ER0 Z\nCALLERY  K AE1 - L ER0 - IY0\nCALLES  K EY1 L Z\nCALLEY  K AE1 - L IY0\nCALLICOAT  K AE1 - L IH0 - K OW2 T\nCALLICOTT  K AE1 - L IH0 - K AA0 T\nCALLICUTT  K AE1 - L IH0 - K AH0 T\nCALLIE  K AO1 - L IY0\nCALLIER  K AE1 - L IY0 - ER0\nCALLIES  K AE1 - L IY0 Z\nCALLIGAN  K AE1 - L IH0 - G AH0 N\nCALLIGRAPHIC  K AE2 - L AH0 - G R AE1 - F IH0 K\nCALLIGRAPHY  K AH0 - L IH1 - G R AH0 - F IY0\nCALLIHAN  K AE1 - L IH0 - HH AE0 N\nCALLINAN  K AE1 - L IH0 - N AH0 N\nCALLING  K AO1 - L IH0 NG\nCALLIOPE  K AH0 - L AY1 - AH0 - P IY2\nCALLIOPES  K AH0 - L AY1 - AH0 - P IY2 Z\nCALLIS  K AE1 - L IH0 S\nCALLISON  K AE1 - L IH0 - S AH0 N\nCALLISTER  K AO1 - L IH0 - S T ER0\nCALLOUS  K AE1 - L AH0 S\nCALLOUSED  K AE1 - L AH0 S T\nCALLOUSLY  K AE1 - L AH0 S - L IY0\nCALLOUSNESS  K AE1 - L AH0 S - N AH0 S\nCALLOW  K AE1 - L OW0\nCALLOWAY  K AE1 - L OW0 - W EY2\nCALLS  K AO1 L Z\nCALLULA  K AE1 - L UW0 - L AH0\nCALLUM  K AE1 - L AH0 M\nCALLUS  K AE1 - L AH0 S\nCALLY  K AE1 - L IY0\nCALM  K AA1 M\nCALM(2)  K AA1 L M\nCALMA  K AA1 L - M AH0\nCALMAQUIP  K AE1 L - M AH0 - K W IH2 P\nCALMAR  K AE1 L - M AA0 R\nCALMARK  K AA1 L - M AA2 R K\nCALMART  K AA1 L - M AA2 R T\nCALMART'S  K AA1 L - M AA2 R T S\nCALMART'S(2)  K AE1 L - M AA2 R T S\nCALMART(2)  K AE1 L - M AA2 R T\nCALMAT  K AE1 L - M AE0 T\nCALMAT'S  K AE1 L - M AE0 T S\nCALMED  K AA1 M D\nCALMED(2)  K AA1 L M D\nCALMER  K AA1 - M ER0\nCALMER(2)  K AA1 L - M ER0\nCALMES  K AA1 L - M EH0 S\nCALMING  K AA1 - M IH0 NG\nCALMING(2)  K AA1 L - M IH0 NG\nCALMLY  K AA1 M - L IY0\nCALMLY(2)  K AA1 L M - L IY0\nCALMNESS  K AA1 M - N AH0 S\nCALMNESS(2)  K AA1 L M - N AH0 S\nCALMS  K AA1 M Z\nCALMS(2)  K AA1 L M Z\nCALNAN  K AE1 L - N AH0 N\nCALNY  K AE1 L - N IY0\nCALO  K AA1 - L OW0\nCALOGERO  K AA0 - L OW0 - JH EH1 - R OW0\nCALOR  K AE1 - L ER0\nCALORIC  K AH0 - L AO1 - R IH0 K\nCALORIE  K AE1 - L ER0 - IY0\nCALORIES  K AE1 - L ER0 - IY0 Z\nCALOWAY  K AE1 - L OW0 - W EY2\nCALPERS  K AE1 L - P ER0 Z\nCALPERS'S  K AE1 L - P ER0 - Z IH0 Z\nCALPIS  K AE1 L - P IH0 S\nCALTABIANO  K AA0 L - T AA0 - B IY0 - AA1 - N OW0\nCALTAGIRONE  K AA0 L - T AA0 - JH IH0 - R OW1 - N IY0\nCALTEX  K AH1 L - T EH1 K S\nCALTHA  K AE1 L - DH AH0\nCALTON  K AE1 L - T AH0 N\nCALTRANS  K AE1 L - T R AE2 N Z\nCALUMET  K AE2 - L Y AH0 - M EH1 T\nCALUMNY  K AE1 - L AH0 M - N IY0\nCALUTZI  K AH0 - L UW1 T - Z IY0\nCALUZZI  K AH0 - L UW1 - Z IY0\nCALVANI  K AO2 L - V AA1 - N IY0\nCALVANO  K AA0 L - V AA1 - N OW0\nCALVARIES  K AE1 L - V ER0 - IY0 Z\nCALVARY  K AE1 L - V ER0 - IY0\nCALVERAS  K AE0 L - V EH1 - R AH0 S\nCALVERLEY  K AE1 L - V ER0 - L IY0\nCALVERT  K AE1 L - V ER0 T\nCALVERY  K AE1 L - V ER0 - IY0\nCALVES  K AE1 V Z\nCALVET  K AE1 L - V AH0 T\nCALVEY  K AE0 L - V EY1\nCALVI  K AA1 L - V IY0\nCALVILLO  K AA0 L - V IH1 - L OW0\nCALVIN  K AE1 L - V AH0 N\nCALVIN'S  K AE1 L - V AH0 N Z\nCALVIN'S(2)  K AE1 L - V IH0 N Z\nCALVIN(2)  K AE1 L - V IH0 N\nCALVINA  K AA0 L - V IY1 - N AH0\nCALVING  K AE1 - V IH0 NG\nCALVINIST  K AE1 L - V AH0 - N AH0 S T\nCALVINIST(2)  K AE1 L - V IH0 - N IH0 S T\nCALVINO  K AO2 L - V IY1 - N OW0\nCALVO  K AA1 L - V OW0\nCALYPSO  K AH0 - L IH1 P - S OW2\nCALYPSOS  K AH0 - L IH1 P - S OW2 Z\nCALYX  K AE1 - L IH0 K S\nCALZADA  K AA0 L - Z AA1 - D AH0\nCAM  K AE1 M\nCAM'S  K AE1 M Z\nCAMACHO  K AH0 - M AA1 - CH OW0\nCAMAN  K EY1 - M AH0 N\nCAMARA  K AA0 - M AA1 - R AH0\nCAMARADERIE  K AA2 - M ER0 - AA1 - D ER0 - IY0\nCAMARATA  K AA0 - M AA0 - R AA1 - T AH0\nCAMARENA  K AA0 - M AA0 - R EH1 - N AH0\nCAMARENA(2)  K AA2 - M ER0 - EY1 - N AH0\nCAMARGO  K AA0 - M AA1 R - G OW0\nCAMARILLO  K AA0 - M AA0 - R IH1 - L OW0\nCAMARO  K AH0 - M EH1 - R OW0\nCAMAROS  K AH0 - M AA1 - R OW0 S\nCAMBELL  K AE1 M - B AH0 L\nCAMBER  K AE1 M - B ER0\nCAMBEX  K AE1 M - B AH0 K S\nCAMBIOR  K AE1 M - B IY0 - ER0\nCAMBODIA  K AE2 M - B OW1 - D IY0 - AH0\nCAMBODIA'S  K AE2 M - B OW1 - D IY0 - AH0 Z\nCAMBODIAN  K AE2 M - B OW1 - D IY0 - AH0 N\nCAMBODIANS  K AE2 M - B OW1 - D IY0 - AH0 N Z\nCAMBRA  K AE1 M - B R AH0\nCAMBRE  K AE1 M - B ER0\nCAMBRIA  K AE1 M - B R IY0 - AH0\nCAMBRIAN  K AE1 M - B R IY0 - AH0 N\nCAMBRIAN'S  K AE1 M - B R IY0 - AH0 N Z\nCAMBRIDGE  K EY1 M - B R IH0 JH\nCAMBRIDGEPORT  K EY1 M - B R IH2 JH - P AO2 R T\nCAMBRIDGESIDE  K EY1 M - B R IH2 JH - S AY2 D\nCAMBRON  K AE1 M - B R AH0 N\nCAMBURN  K AE1 M - B ER2 N\nCAMBY  K AE1 M - B IY0\nCAMBY'S  K AE1 M - B IY0 Z\nCAMCO  K AE1 M - K OW0\nCAMCORDER  K AE1 M - K AO2 R - D ER0\nCAMCORDERS  K AE1 M - K AO2 R - D ER0 Z\nCAMDEN  K AE1 M - D AH0 N\nCAMDEN'S  K AE1 M - D AH0 N Z\nCAMDESSUS  K AE0 M - D EH1 - S AH0 S\nCAME  K EY1 M\nCAMECO  K AE1 - M IH0 - K OW0\nCAMEJO  K AA0 - M EY1 - Y OW0\nCAMEL  K AE1 - M AH0 L\nCAMEL'S  K AE1 - M AH0 L Z\nCAMELOT  K AE1 - M AH0 - L AA2 T\nCAMELS  K AE1 - M AH0 L Z\nCAMEO  K AE1 - M IY0 - OW2\nCAMEOS  K AE1 - M IY0 - OW2 Z\nCAMERA  K AE1 - M ER0 - AH0\nCAMERA'S  K AE1 - M R AH0 Z\nCAMERA(2)  K AE1 - M R AH0\nCAMERAMAN  K AE1 - M ER0 - AH0 - M AH0 N\nCAMERAMEN  K AE1 - M ER0 - AH0 - M EH0 N\nCAMERAS  K AE1 - M ER0 - AH0 Z\nCAMERAS(2)  K AE1 - M R AH0 Z\nCAMERER  K AE1 - M ER0 - ER0\nCAMERO  K AH0 - M EH1 - R OW0\nCAMERON  K AE1 - M ER0 - AH0 N\nCAMERON'S  K AE1 - M ER0 - AH0 N Z\nCAMEROON  K AE1 - M ER0 - UW2 N\nCAMFIELD  K AE1 M - F IY2 L D\nCAMHI  K AE1 M - HH IY0\nCAMILLA  K AH0 - M IH1 - L AH0\nCAMILLE  K AH0 - M IY1 L\nCAMILLERI  K AA0 - M IY0 - L EH1 - R IY0\nCAMILLI  K AH0 - M IH1 - L IY0\nCAMILLO  K AH0 - M IH1 - L OW0\nCAMINITI  K AA0 - M IY0 - N IY1 - T IY0\nCAMINO  K AH0 - M IY1 - N OW0\nCAMIRE  K AA0 - M IH1 - R IY0\nCAMM  K AE1 M\nCAMMACK  K AE1 - M AH0 K\nCAMMARANO  K AA0 - M AA0 - R AA1 - N OW0\nCAMMARATA  K AA0 - M AA0 - R AA1 - T AH0\nCAMMAROTA  K AA0 - M AA0 - R OW1 - T AH0\nCAMMER  K AE1 - M ER0\nCAMMERMEYER  K AE1 - M ER0 - M AY2 - ER0\nCAMMIE  K AE1 - M IY0\nCAMMISA  K AH0 - M IY1 - S AH0\nCAMMON  K AE1 - M AH0 N\nCAMMY  K AE1 - M IY0\nCAMORRA  K AH0 - M AO1 - R AH0\nCAMOUFLAGE  K AE1 - M AH0 - F L AA2 ZH\nCAMOUFLAGED  K AE1 - M AH0 - F L AA2 ZH D\nCAMOUFLAGING  K AE1 - M AH0 - F L AA2 - ZH IH0 NG\nCAMP  K AE1 M P\nCAMP'S  K AE1 M P S\nCAMPA  K AE1 M - P AH0\nCAMPAIGN  K AE0 M - P EY1 N\nCAMPAIGN'S  K AE0 M - P EY1 N Z\nCAMPAIGNED  K AE0 M - P EY1 N D\nCAMPAIGNER  K AE0 M - P EY1 - N ER0\nCAMPAIGNERS  K AE0 M - P EY1 - N ER0 Z\nCAMPAIGNING  K AE0 M - P EY1 - N IH0 NG\nCAMPAIGNS  K AE0 M - P EY1 N Z\nCAMPANA  K AA0 M - P AE1 - N AH0\nCAMPANALE  K AA0 M - P AA0 - N AA1 - L IY0\nCAMPANARO  K AA0 M - P AA0 - N AA1 - R OW0\nCAMPANELLA  K AE2 M - P AH0 - N EH1 - L AH0\nCAMPANELLI  K AA0 M - P AA0 - N EH1 - L IY0\nCAMPANIS  K AE2 M - P AA1 - N IH0 S\nCAMPAU  K AA1 M - P AW0\nCAMPBELL  K AE1 M - B AH0 L\nCAMPBELL'S  K AE1 M - B AH0 L Z\nCAMPBELLS  K AE1 M - B AH0 L Z\nCAMPEAU  K AE0 M - P OW1\nCAMPEAU'S  K AE0 M - P OW1 Z\nCAMPED  K AE1 M P T\nCAMPEN  K AE1 M - P AH0 N\nCAMPER  K AE1 M - P ER0\nCAMPERS  K AE1 M - P ER0 Z\nCAMPESINOS  K AE2 M - P EH0 - S IY1 - N OW0 S\nCAMPFIELD  K AE1 M P - F IY2 L D\nCAMPFIRE  K AE1 M P - F AY2 - ER0\nCAMPFIRES  K AE1 M P - F AY2 - ER0 Z\nCAMPGROUND  K AE1 M P - G R AW2 N D\nCAMPGROUNDS  K AE1 M P - G R AW2 N D Z\nCAMPI  K AE1 M - P IY0\nCAMPING  K AE1 M - P IH0 NG\nCAMPION  K AE1 M - P IY0 - AH0 N\nCAMPIONE  K AA0 M - P IY0 - OW1 - N IY0\nCAMPISE  K AA1 M - P AY0 Z\nCAMPISI  K AA0 M - P IY1 - S IY0\nCAMPO  K AE1 M - P OW0\nCAMPOBASSO  K AA0 M - P OW0 - B AA1 - S OW0\nCAMPOFRIO  K AE2 M - P AO1 - F R IY0 - OW0\nCAMPOLI  K AA0 M - P OW1 - L IY0\nCAMPOPIANO  K AA0 M - P OW0 - P IY0 - AA1 - N OW0\nCAMPOS  K AE1 M - P OW0 Z\nCAMPS  K AE1 M P S\nCAMPS'  K AE1 M P S\nCAMPSITE  K AE1 M P - S AY2 T S\nCAMPSITES  K AE1 M P - S AY2 T S\nCAMPTON  K AE1 M P - T AH0 N\nCAMPUS  K AE1 M - P AH0 S\nCAMPUSES  K AE1 M - P AH0 - S AH0 Z\nCAMPUSES(2)  K AE1 M - P AH0 - S IH0 Z\nCAMPUZANO  K AA0 M - P UW0 - Z AA1 - N OW0\nCAMPY  K AE1 M - P IY0\nCAMRO  K AE1 M - R OW0\nCAMRY  K AE1 M - R IY0\nCAMRYS  K AE1 - M R IY0 Z\nCAMSHAFT  K AE1 M - SH AE2 F T\nCAMSHAFTS  K AE1 M - SH AE2 F T S\nCAMUS  K AE1 - M IH0 S\nCAMUSO  K AA0 - M UW1 - S OW0\nCAN  K AE1 N\nCAN'S  K AE1 N Z\nCAN'T  K AE1 N T\nCAN(2)  K AH0 N\nCANA  K AE1 - N AH0\nCANAAN  K EY1 - N AH0 N\nCANAANITE  K EY1 - N AH0 - N AY2 T\nCANACE  K AA0 - N AA1 - CH IY0\nCANADA  K AE1 - N AH0 - D AH0\nCANADA'S  K AE1 - N AH0 - D AH0 Z\nCANADAIR  K AE2 - N AH0 - D EH1 R\nCANADAY  K AE1 - N AH0 - D EY2\nCANADIAN  K AH0 - N EY1 - D IY0 - AH0 N\nCANADIAN'S  K AH0 - N EY1 - D IY0 - AH0 N Z\nCANADIANS  K AH0 - N EY1 - D IY0 - AH0 N Z\nCANADIANS'  K AH0 - N EY1 - D IY0 - AH0 N Z\nCANADIENNE  K AH0 - N AE1 - D IY0 - EH2 N\nCANADY  K AH0 - N AA1 - D IY0\nCANAL  K AH0 - N AE1 L\nCANAL'S  K AH0 - N AE1 L Z\nCANALE  K AA0 - N AA1 - L IY0\nCANALES  K AE1 - N AH0 L Z\nCANALS  K AH0 - N AE1 L Z\nCANAM  K AE1 - N AH0 M\nCANAN  K EY1 - N AH0 N\nCANANDAIGUA  K AE2 - N AH0 N - D EY1 - G W AH0\nCANANEA  K AE2 - N AH0 - N IY1 - AH0\nCANARD  K AH0 - N AA1 R D\nCANARIES  K AH0 - N EH1 - R IY0 Z\nCANARY  K AH0 - N EH1 - R IY0\nCANAS  K AE1 - N AH0 Z\nCANASTA  K AH0 - N AE1 - S T AH0\nCANAVAN  K AE1 - N AH0 - V AE2 N\nCANAVERAL  K AH0 - N AE1 - V ER0 - AH0 L\nCANAVERAL(2)  K AH0 - N AE1 - V R AH0 L\nCANBERRA  K AE2 N - B EH1 - R AH0\nCANBY  K AE1 N - B IY0\nCANCAN  K AE1 N - K AE2 N\nCANCEL  K AE1 N - S AH0 L\nCANCELED  K AE1 N - S AH0 L D\nCANCELING  K AE1 N - S AH0 - L IH0 NG\nCANCELING(2)  K AE1 N - S L IH0 NG\nCANCELLATION  K AE2 N - S AH0 - L EY1 - SH AH0 N\nCANCELLATIONS  K AE2 N - S AH0 - L EY1 - SH AH0 N Z\nCANCELLED  K AE1 N - S AH0 L D\nCANCELLING  K AE1 N - S AH0 - L IH0 NG\nCANCELLING(2)  K AE1 N - S L IH0 NG\nCANCELS  K AE1 N - S AH0 L Z\nCANCER  K AE1 N - S ER0\nCANCER'S  K AE1 N - S ER0 Z\nCANCEROUS  K AE1 N - S ER0 - AH0 S\nCANCERPHOBIA  K AE2 N - S ER0 - F OW1 - B IY0 - AH0\nCANCERS  K AE1 N - S ER0 Z\nCANCHOLA  K AA0 N - K OW1 - L AH0\nCANCIENNE  K AA0 N - CH IY1 - EH0 N\nCANCILLA  K AA0 N - CH IH1 - L AH0\nCANCINO  K AA0 N - CH IY1 - N OW0\nCANCIO  K AE1 N - S IY0 - OW0\nCANCOM  K AE1 NG - K AH0 M\nCANCRO  K AA1 N - K R OW0\nCANCUN  K AE1 NG - K AH0 N\nCANCUN(2)  K AA2 NG - K UW1 N\nCANDACE  K AE1 N - D AH0 S\nCANDEE  K AE1 N - D IY1\nCANDELA  K AE2 N - D EH1 - L AH0\nCANDELABRA  K AE2 N - D AH0 - L AA1 - B R AH0\nCANDELARIA  K AA0 N - D EH0 - L AA1 - R IY0 - AH0\nCANDELARIO  K AA0 N - D EH0 - L AA1 - R IY0 - OW0\nCANDELLA  K AA0 N - D EH1 - L AH0\nCANDELLIN  K AE1 N - D AH0 - L IH0 N\nCANDIA  K AE1 N - D IY0 - AH0\nCANDICE  K AE1 N - D IH0 S\nCANDICE'S  K AE1 N - D IH0 - S IH0 Z\nCANDID  K AE1 N - D AH0 D\nCANDID(2)  K AE1 N - D IH0 D\nCANDIDA  K AE1 N - D IH0 - D AH0\nCANDIDACIES  K AE1 N - D AH0 - D AH0 - S IY0 Z\nCANDIDACY  K AE1 N - D IH0 - D AH0 - S IY0\nCANDIDATE  K AE1 N - D AH0 - D EY0 T\nCANDIDATE'S  K AE1 N - D AH0 - D EY0 T S\nCANDIDATE(2)  K AE1 - N AH0 - D IH0 T\nCANDIDATES  K AE1 N - D AH0 - D EY0 T S\nCANDIDATES'  K AE1 N - D AH0 - D EY0 T S\nCANDIDATES(2)  K AE1 - N AH0 - D IH0 T S\nCANDIDLY  K AE1 N - D IH0 D - L IY0\nCANDIDO  K AE0 N - D IY1 - D OW0\nCANDIE  K AE1 N - D IY0\nCANDIED  K AE1 N - D IY0 D\nCANDIES  K AE1 N - D IY0 Z\nCANDILIN  K AE1 N - D IH0 - L IH0 N\nCANDIOTTI  K AE2 N - D IY0 - AA1 - T IY0\nCANDIOTTI'S  K AE2 N - D IY0 - AA1 - T IY0 Z\nCANDLE  K AE1 N - D AH0 L\nCANDLELIGHT  K AE1 N - D AH0 L - L AY2 T\nCANDLEMAKER  K AE1 N - D AH0 L - M EY2 - K ER0\nCANDLER  K AE1 N - D AH0 - L ER0\nCANDLER(2)  K AE1 N D - L ER0\nCANDLES  K AE1 N - D AH0 L Z\nCANDLESTICK  K AE1 N - D AH0 L - S T IH2 K\nCANDLESTICKS  K AE1 N - D AH0 L - S T IH2 K S\nCANDLISH  K AE1 N D - L IH0 SH\nCANDOR  K AE1 N - D ER0\nCANDY  K AE1 N - D IY0\nCANDY'S  K AE1 N - D IY0 Z\nCANDYMAN  K AE1 N - D IY0 - M AE0 N\nCANE  K EY1 N\nCANED  K EY1 N D\nCANEDO  K AA0 - N EY1 - D OW0\nCANEDY  K AH0 - N IY1 - D IY0\nCANELO  K AH0 - N EH1 - L OW0\nCANEPA  K AA0 - N EH1 - P AH0\nCANES  K EY1 N Z\nCANEVARI  K AA0 - N EH0 - V AA1 - R IY0\nCANEZ  K AA0 - N EH1 Z\nCANFIELD  K AE1 N - F IY2 L D\nCANFOR  K AE1 N - F ER0\nCANFOR'S  K AE1 N - F ER0 Z\nCANGELOSI  K AA0 NG - G EH0 - L OW1 - S IY0\nCANGEMI  K AA0 NG - G EH1 - M IY0\nCANGIALOSI  K AA0 N - JH AH0 - L OW1 - S IY0\nCANGIANO  K AA0 NG - G IY0 - AA1 - N OW0\nCANHAM  K AE1 N - HH AH0 M\nCANIDA  K AA0 - N IY1 - D AH0\nCANIGLIA  K AH0 - N IH1 G - L IY0 - AH0\nCANILLES  K AH0 - N IH1 - L IY0 Z\nCANIN  K EY1 - N IH0 N\nCANINE  K EY1 - N AY2 N\nCANINES  K EY1 - N AY2 N Z\nCANING  K EY1 - N IH0 NG\nCANINGS  K EY1 - N IH0 NG Z\nCANINO  K AA0 - N IY1 - N OW0\nCANION  K AE1 - N Y AH0 N\nCANIPE  K AA0 - N IY1 - P IY0\nCANISTER  K AE1 - N AH0 - S T ER0\nCANISTER(2)  K AE1 - N IH0 - S T ER0\nCANISTERS  K AE1 - N AH0 - S T ER0 Z\nCANISTERS(2)  K AE1 - N IH0 - S T ER0 Z\nCANKER  K AE1 NG - K ER0\nCANKERS  K AE1 NG - K ER0 Z\nCANN  K AE1 N\nCANNABIS  K AE1 - N AH0 - B AH0 S\nCANNADAY  K AE1 - N AH0 - D EY2\nCANNADY  K AE1 - N AH0 - D IY0\nCANNAN  K AE1 - N AH0 N\nCANNATA  K AA0 - N AA1 - T AH0\nCANNAVINO  K AE2 - N AH0 - V IY1 - N OW0\nCANNAVO  K AA0 - N AA1 - V OW0\nCANNED  K AE1 N D\nCANNEDY  K AE1 - N IH0 - D IY0\nCANNELL  K AE1 - N AH0 L\nCANNELLA  K AA0 - N EH1 - L AH0\nCANNELTON  K AE1 - N AH0 L - T AH0 N\nCANNER  K AE1 - N ER0\nCANNERIES  K AE1 - N ER0 - IY0 Z\nCANNERY  K AE1 - N ER0 - IY0\nCANNES  K AE1 N Z\nCANNES(2)  K AE1 N\nCANNEY  K AE1 - N IY0\nCANNIBAL  K AE1 - N AH0 - B AH0 L\nCANNIBALISM  K AE1 - N AH0 - B AH0 - L IH2 - Z AH0 M\nCANNIBALIZATION  K AE2 - N AH0 - B AH0 - L IH0 - Z EY1 - SH AH0 N\nCANNIBALIZE  K AE1 - N AH0 - B AH0 - L AY2 Z\nCANNIBALIZING  K AE1 - N AH0 - B AH0 - L AY2 - Z IH0 NG\nCANNIBALS  K AE1 - N AH0 - B AH0 L Z\nCANNIFF  K AE1 - N IH0 F\nCANNING  K AE1 - N IH0 NG\nCANNISTER  K AE1 - N IH0 - S T ER0\nCANNISTERS  K AE1 - N IH0 - S T ER0 Z\nCANNISTRARO  K AE2 - N IH0 - S T R AA1 - R OW0\nCANNIZZARO  K AA0 - N IY0 T - S AA1 - R OW0\nCANNIZZO  K AA0 - N IY1 - Z OW0\nCANNON  K AE1 - N AH0 N\nCANNON'S  K AE1 - N AH0 N Z\nCANNONBALL  K AE1 - N AH0 N - B AO2 L\nCANNONDALE  K AE1 - N AH0 N - D EY2 L\nCANNONE  K AA0 - N OW1 - N IY0\nCANNONS  K AE1 - N AH0 N Z\nCANNONSBURG  K AE1 - N AH0 N Z - B ER0 G\nCANNOT  K AE1 - N AA0 T\nCANNOT(2)  K AH0 - N AA1 T\nCANNY  K AE1 - N IY0\nCANO  K AA1 - N OW0\nCANOE  K AH0 - N UW1\nCANOED  K AH0 - N UW1 D\nCANOEING  K AH0 - N UW1 - IH0 NG\nCANOEIST  K AH0 - N UW1 - AH0 S T\nCANOES  K AH0 - N UW1 Z\nCANOGA  K AH0 - N OW1 - G AH0\nCANOLA  K AH0 - N OW1 - L AH0\nCANON  K AE1 - N AH0 N\nCANON'S  K AE1 - N AH0 N Z\nCANONICO  K AA0 - N OW0 - N IY1 - K OW0\nCANONIE  K AE1 - N AH0 - N IY0\nCANONS  K AE1 - N AH0 N Z\nCANOPY  K AE1 - N AH0 - P IY0\nCANOSA  K AH0 - N OW1 - S AH0\nCANOVA  K AA0 - N OW1 - V AH0\nCANOY  K AE1 - N OY0\nCANRAD  K AE1 N - R AE0 D\nCANRON  K AE1 N - R AH0 N\nCANS  K AE1 N Z\nCANSECO  K AE2 N - S EH1 - K OW0\nCANSLER  K AE1 N - S AH0 - L ER0\nCANSLER(2)  K AE1 N S - L ER0\nCANSO  K AE1 N - S OW0\nCANSTAR  K AE1 N - S T AA2 R\nCANT  K AE1 N T\nCANTALOUPE  K AE1 N - T AH0 - L OW2 P\nCANTALOUPES  K AE1 N - T AH0 - L OW2 P S\nCANTALUPO  K AE2 N - T AH0 - L UW1 - P OW0\nCANTANKEROUS  K AE0 N - T AE1 NG - K ER0 - AH0 S\nCANTARA  K AA0 N - T AA1 - R AH0\nCANTATA  K AE2 N - T AA1 - T AH0\nCANTEEN  K AE0 N - T IY1 N\nCANTEENS  K AE0 N - T IY1 N Z\nCANTEL  K AE1 N - T EH2 L\nCANTER  K AE1 N - T ER0\nCANTERBURY  K AE1 N - T ER0 - B EH2 - R IY0\nCANTERBURY'S  K AE1 N - T ER0 - B EH2 - R IY0 Z\nCANTERBURY'S(2)  K AE1 - N ER0 - B EH2 - R IY0 Z\nCANTERO  K AA0 N - T EH1 - R OW0\nCANTERRA  K AA2 N - T EH1 - R AH0\nCANTEY  K AE1 N - T IY0\nCANTIN  K AA0 N - T IY1 N\nCANTINA  K AE2 N - T IY1 - N AH0\nCANTLE  K AE1 N - T AH0 L\nCANTLEY  K AE1 N T - L IY0\nCANTLIN  K AE1 N T - L IH0 N\nCANTLON  K AE1 N T - L AH0 N\nCANTO  K AE1 N - T OW0\nCANTON  K AE1 N - T AH0 N\nCANTONAL  K AE1 N - T AH0 - N AH0 L\nCANTONE  K AA0 N - T OW1 - N IY0\nCANTONESE  K AE2 N - T AH0 - N IY1 Z\nCANTONS  K AE1 N - T AH0 N Z\nCANTOR  K AE1 N - T ER0\nCANTOR'S  K AE1 N - T ER0 Z\nCANTORE  K AE1 N - T AO2 R\nCANTRALL  K AE1 N - T R AH0 L\nCANTRELL  K AE0 N - T R EH1 L\nCANTRELLE  K AH0 N - T R EH1 L\nCANTU  K AE1 N - T UW0\nCANTV  K AE1 N - T IY1 - V IY1\nCANTWELL  K AE1 N T - W EH2 L\nCANTY  K AE1 N - T IY0\nCANUP  K AE1 - N AH2 P\nCANUPP  K AE1 - N AH0 P\nCANVAS  K AE1 N - V AH0 S\nCANVASES  K AE1 N - V AH0 - S IH0 Z\nCANVASS  K AE1 N - V AH0 S\nCANVASSED  K AE1 N - V AH0 S T\nCANVASSERS  K AE1 N - V AH0 - S ER0 Z\nCANVASSES  K AE1 N - V AH0 - S IH0 Z\nCANVASSING  K AE1 N - V AH0 - S IH0 NG\nCANWEST  K AE1 N - W EH2 S T\nCANYON  K AE1 - N Y AH0 N\nCANYON'S  K AE1 - N Y AH0 N Z\nCANYONS  K AE1 - N Y AH0 N Z\nCANZANO  K AA0 N - Z AA1 - N OW0\nCANZONERI  K AA0 N - Z OW0 - N EH1 - R IY0\nCAO  K AW1\nCAOUETTE  K EY1 - UW1 T\nCAP  K AE1 P\nCAP'S  K AE1 P S\nCAPABILITIES  K EY2 - P AH0 - B IH1 - L AH0 - T IY0 Z\nCAPABILITY  K EY2 - P AH0 - B IH1 - L AH0 - T IY0\nCAPABLE  K EY1 - P AH0 - B AH0 L\nCAPACIOUS  K AH0 - P EY1 - SH AH0 S\nCAPACITANCE  K AH0 - P AE1 - S AH0 - T AH0 N S\nCAPACITIES  K AH0 - P AE1 - S AH0 - T IY0 Z\nCAPACITIES(2)  K AH0 - P AE1 - S IH0 - T IY0 Z\nCAPACITOR  K AH0 - P AE1 - S AH0 - T ER0\nCAPACITORS  K AH0 - P AE1 - S AH0 - T ER0 Z\nCAPACITORS(2)  K AH0 - P AE1 - S IH0 - T ER0 Z\nCAPACITY  K AH0 - P AE1 - S AH0 - T IY0\nCAPACITY(2)  K AH0 - P AE1 - S IH0 - T IY0\nCAPALBO  K AH0 - P AE1 L - B OW0\nCAPALDI  K AA0 - P AA1 L - D IY0\nCAPALDO  K AA0 - P AA1 L - D OW0\nCAPANO  K AA0 - P AA1 - N OW0\nCAPASSO  K AA0 - P AA1 - S OW0\nCAPCOM  K AE1 P - K AH0 M\nCAPE  K EY1 P\nCAPECE  K AH0 - P IY1 S\nCAPECI  K AH0 - P EH1 - CH IY0\nCAPECI(2)  K AH0 - P IY1 - CH IY0\nCAPED  K EY1 P T\nCAPEHART  K EY1 P - HH AA2 R T\nCAPEK  K AE1 - P IH0 K\nCAPEL  K EY1 - P AH0 L\nCAPEL'S  K AE1 - P AH0 L Z\nCAPELL  K AA0 - P EY1 L\nCAPELLA  K AH0 - P EH1 - L AH0\nCAPELLE  K AH0 - P EH1 L\nCAPELLI  K AH0 - P EH1 - L IY0\nCAPELLO  K AH0 - P EH1 - L OW0\nCAPEN  K EY1 - P AH0 N\nCAPER  K EY1 - P ER0\nCAPERS  K EY1 - P ER0 Z\nCAPERTON  K EY1 - P ER0 - T AH0 N\nCAPES  K EY1 P S\nCAPETILLO  K AA0 - P EH0 - T IH1 - L OW0\nCAPETOWN  K EY1 P - T AW2 N\nCAPILLARIES  K AE1 - P AH0 - L EH2 - R IY0 Z\nCAPILLARY  K AE1 - P AH0 - L EH2 - R IY0\nCAPISTRANO  K AE2 - P IH0 - S T R AA1 - N OW0\nCAPITA  K AE1 - P IH0 - T AH0\nCAPITAL  K AE1 - P AH0 - T AH0 L\nCAPITAL'S  K AE1 - P IH0 - T AH0 L Z\nCAPITAL(2)  K AE1 - P IH0 - T AH0 L\nCAPITALISM  K AE1 - P IH0 - T AH0 - L IH2 - Z AH0 M\nCAPITALISM'S  K AE1 - P AH0 - T AH0 - L IH2 - Z AH0 M Z\nCAPITALIST  K AE1 - P AH0 - T AH0 - L AH0 S T\nCAPITALISTIC  K AE2 - P IH0 - T AH0 - L IH1 - S T IH0 K\nCAPITALISTS  K AE1 - P AH0 - T AH0 - L AH0 S T S\nCAPITALISTS(2)  K AE1 - P AH0 - T AH0 - L AH0 S S\nCAPITALISTS(3)  K AE1 - P AH0 - T AH0 - L AH0 S\nCAPITALIZATION  K AE2 - P IH0 - T AH0 - L IH0 - Z EY1 - SH AH0 N\nCAPITALIZATIONS  K AE2 - P IH0 - T AH0 - L IH0 - Z EY1 - SH AH0 N Z\nCAPITALIZE  K AE1 - P AH0 - T AH0 - L AY2 Z\nCAPITALIZED  K AE1 - P IH0 - T AH0 - L AY2 Z D\nCAPITALIZES  K AE1 - P AH0 - T AH0 - L AY2 - Z IH0 Z\nCAPITALIZING  K AE1 - P IH0 - T AH0 - L AY2 - Z IH0 NG\nCAPITALS  K AE1 - P AH0 - T AH0 L Z\nCAPITALS(2)  K AE1 - P IH0 - T AH0 L Z\nCAPITAN  K AE1 - P IH0 - T AH0 N\nCAPITANO  K AA0 - P IY0 - T AA1 - N OW0\nCAPITO  K AA0 - P IY1 - T OW0\nCAPITOL  K AE1 - P IH0 - T AH0 L\nCAPITOL'S  K AE1 - P IH0 - T AH0 L Z\nCAPITOLINE  K AE1 - P IH0 - T OW2 - L AY2 N\nCAPITOLS  K AE1 - P IH0 - T AH0 L Z\nCAPITULATE  K AH0 - P IH1 - CH UW0 - L IH0 T\nCAPITULATE(2)  K AH0 - P IH1 - CH UW0 - L EY0 T\nCAPITULATED  K AH0 - P IH1 - CH AH0 - L EY2 - T IH0 D\nCAPITULATION  K AH0 - P IH2 - CH AH0 - L EY1 - SH AH0 N\nCAPIZZI  K AA0 - P IY1 T - S IY0\nCAPLAN  K AE1 P - L AH0 N\nCAPLE  K EY1 - P AH0 L\nCAPLES  K EY1 - P AH0 L Z\nCAPLEY  K AE1 P - L IY0\nCAPLIN  K AE1 P - L IH0 N\nCAPLINGER  K EY1 - P AH0 L - IH0 - NG ER0\nCAPLINGER(2)  K EY1 P - L IH0 - NG ER0\nCAPLINGER(3)  K AE1 P - L IH0 N - JH ER0\nCAPO  K AA1 - P OW0\nCAPOBIANCO  K AA0 - P OW0 - B IY0 - AA1 N - K OW0\nCAPON  K EY1 - P AA2 N\nCAPONE  K AH0 - P OW1 N\nCAPONI  K AA0 - P OW1 - N IY0\nCAPONIGRO  K AA0 - P OW0 - N IY1 - G R OW0\nCAPORALE  K AA0 - P AO0 - R AA1 - L IY0\nCAPORASO  K AA0 - P AO0 - R AA1 - S OW0\nCAPOTE  K AH0 - P OW1 T\nCAPOTE'S  K AH0 - P OW1 T S\nCAPOTEN  K AH0 - P OW1 - T AH0 N\nCAPOZZI  K AH0 - P AA1 - Z IY0\nCAPOZZOLI  K AA0 - P OW0 T - S OW1 - L IY0\nCAPP  K AE1 P\nCAPPA  K AE1 - P AH0\nCAPPADONA  K AA0 - P AA0 - D OW1 - N AH0\nCAPPARELLI  K AA0 - P AA0 - R EH1 - L IY0\nCAPPED  K AE1 P T\nCAPPEL  K AE1 - P AH0 L\nCAPPELLA  K AA0 - P EH1 - L AH0\nCAPPELLETTI  K AA0 - P EH0 - L EH1 - T IY0\nCAPPELLI  K AA0 - P EH1 - L IY0\nCAPPELLO  K AA0 - P EH1 - L OW0\nCAPPER  K AE1 - P ER0\nCAPPETTA  K AA0 - P EH1 - T AH0\nCAPPIELLO  K AA0 - P IY0 - EH1 - L OW0\nCAPPING  K AE1 - P IH0 NG\nCAPPO  K AE1 - P OW0\nCAPPS  K AE1 P S\nCAPPUCCINO  K AE2 - P UW2 - CH IY1 - N OW0\nCAPPUCCIO  K AA0 - P UW1 - CH IY0 - OW0\nCAPPY  K AE1 - P IY0\nCAPPY'S  K AE1 - P IY0 Z\nCAPRA  K AE1 - P R AH0\nCAPRARO  K AA0 - P R AA1 - R OW0\nCAPRI  K AE1 - P R IY0\nCAPRI'S  K AE1 - P R IY0 Z\nCAPRI'S(2)  K AH0 - P R IY1 Z\nCAPRI(2)  K AH0 - P R IY1\nCAPRIATI  K AE2 - P R IY0 - AA1 - T IY0\nCAPRIATI'S  K AE2 - P R IY0 - AA1 - T IY0 Z\nCAPRICE  K AH0 - P R IY1 S\nCAPRICIOUS  K AH0 - P R IH1 - SH AH0 S\nCAPRICIOUSLY  K AH0 - P R IH1 - SH IH0 S - L IY0\nCAPRICORN  K AE1 - P R AH0 - K AO0 R N\nCAPRIO  K AE1 - P R IY0 - OW0\nCAPRIOTTI  K AA0 - P R IY0 - OW1 - T IY0\nCAPRON  K AE1 - P R AH0 N\nCAPS  K AE1 P S\nCAPSAICIN  K AE2 P - S EY1 - S AH0 N\nCAPSHAW  K AE1 P - SH AO2\nCAPSIZE  K AE1 P - S AY2 Z\nCAPSIZED  K AE1 P - S AY2 Z D\nCAPSTAN  K AE1 P - S T AH0 N\nCAPSTICK  K AE1 P - S T IH2 K\nCAPSTONE  K AE1 P - S T OW2 N\nCAPSULE  K AE1 P - S AH0 L\nCAPSULES  K AE1 P - S AH0 L Z\nCAPTAIN  K AE1 P - T AH0 N\nCAPTAIN'S  K AE1 P - T AH0 N Z\nCAPTAINS  K AE1 P - T AH0 N Z\nCAPTION  K AE1 P - SH AH0 N\nCAPTIONED  K AE1 P - SH AH0 N D\nCAPTIONING  K AE1 P - SH AH0 N - IH0 NG\nCAPTIONS  K AE1 P - SH AH0 N Z\nCAPTIVATE  K AE1 P - T IH0 - V EY2 T\nCAPTIVATED  K AE1 P - T IH0 - V EY2 - T IH0 D\nCAPTIVATING  K AE1 P - T IH0 - V EY2 - T IH0 NG\nCAPTIVE  K AE1 P - T IH0 V\nCAPTIVES  K AE1 P - T IH0 V Z\nCAPTIVITY  K AE0 P - T IH1 - V AH0 - T IY0\nCAPTOR  K AE1 P - T ER0\nCAPTORS  K AE1 P - T ER0 Z\nCAPTURE  K AE1 P - CH ER0\nCAPTURED  K AE1 P - CH ER0 D\nCAPTURES  K AE1 P - CH ER0 Z\nCAPTURING  K AE1 P - CH ER0 - IH0 NG\nCAPUA  K AE1 - P Y UW0 - AH0\nCAPUANO  K AA0 - P UW0 - AA1 - N OW0\nCAPUTI  K AA0 - P UW1 - T IY0\nCAPUTO  K AA0 - P UW1 - T OW0\nCAPWELL  K AE1 P - W EH2 L\nCAQ  K AE1 K\nCAQ'S  K AE1 K S\nCAR  K AA1 R\nCAR'S  K AA1 R Z\nCARA  K EH1 - R AH0\nCARA'S  K EH1 - R AH0 Z\nCARA'VERAS  K AA2 - R AH0 - V EH1 - R AH0 Z\nCARABAJAL  K ER0 - AE1 - B AH0 - JH AH0 L\nCARABALLO  K AE2 - R AH0 - B AE1 - L OW0\nCARABELLO  K AE2 - R AH0 - B EH1 - L OW0\nCARACARA  K AA2 - R AH0 - K AA1 - R AH0\nCARACAS  K ER0 - AA1 - K AH0 S\nCARACCI  K AA0 - R AA1 - CH IY0\nCARACCIOLO  K AA0 - R AA0 K - CH OW1 - L OW0\nCARADINE  K AA0 - R AA0 - D IY1 - N IY0\nCARADONNA  K AA0 - R AA0 - D OW1 - N AH0\nCARAFATE  K EH1 - R AH0 - F EY2 T\nCARAHER  K AE1 - R AH0 - HH ER0\nCARAKER  K AE1 - R AH0 - K ER0\nCARAMANDI  K AE2 - R AH0 - M AA1 N - D IY0\nCARAMEL  K EH1 - R AH0 - M AH0 L\nCARAMELIZE  K EH1 - R AH0 - M AH0 - L AY2 Z\nCARAMELIZED  K EH1 - R AH0 - M AH0 - L AY2 Z D\nCARANGELO  K AA0 - R AA0 NG - G EH1 - L OW0\nCARANO  K AA0 - R AA1 - N OW0\nCARAS  K AA1 - R AH0 Z\nCARAT  K EH1 - R AH0 T\nCARATS  K EH1 - R AH0 T S\nCARAVA  K AE1 - R AH0 - V AH0\nCARAVAN  K AE1 - R AH0 - V AE2 N\nCARAVAN(2)  K EH1 - R AH0 - V AE2 N\nCARAVANS  K AE1 - R AH0 - V AE2 N Z\nCARAVANS(2)  K EH1 - R AH0 - V AE2 N Z\nCARAVEL  K EH1 - R AH0 - V EH2 L\nCARAVELLA  K AE2 - R AH0 - V EH1 - L AH0\nCARAVELLE  K EH1 - R AH0 - V EH2 L\nCARAVELLO  K AE2 - R AH0 - V EH1 - L OW0\nCARAVEO  K AA0 - R AA1 - V IY0 - OW0\nCARAWAN  K AE1 - R AH0 - W AE0 N\nCARAWAY  K AE1 - R AH0 - W EY2\nCARAWAY(2)  K EH1 - R AH0 - W EY2\nCARBAJAL  K AA0 R - B AA0 - Y AE1 L\nCARBALLO  K AA0 R - B AA1 - L OW0\nCARBARY  K AA1 R - B EH0 - R IY0\nCARBAUGH  K AA1 R - B AO2\nCARBERRY  K AA1 R - B EH2 - R IY0\nCARBERRY'S  K AA1 R - B EH2 - R IY0 Z\nCARBIDE  K AA1 R - B AY2 D\nCARBIDE'S  K AA1 R - B AY2 D Z\nCARBIN  K AA1 R - B IH0 N\nCARBINE  K AA1 R - B AY2 N\nCARBO  K AA1 R - B OW0\nCARBOHYDRATE  K AA2 R - B OW0 - HH AY1 - D R EY2 T\nCARBOHYDRATE(2)  K AA2 R - B OW0 - HH AY1 - D R AH0 T\nCARBOHYDRATES  K AA2 R - B OW0 - HH AY1 - D R EY0 T S\nCARBON  K AA1 R - B AH0 N\nCARBONARA  K AA0 R - B OW0 - N AA1 - R AH0\nCARBONARO  K AA0 R - B OW0 - N AA1 - R OW0\nCARBONATE  K AA1 R - B AH0 - N EY2 T\nCARBONATED  K AA1 R - B AH0 - N EY2 - T AH0 D\nCARBONATED(2)  K AA1 R - B AH0 - N EY2 - T IH0 D\nCARBONATES  K AA1 R - B AH0 - N EY2 T S\nCARBONDALE  K AA1 R - B AH0 N - D EY2 L\nCARBONE  K AA1 R - B OW2 N\nCARBONELL  K AA1 R - B OW0 - N AH0 L\nCARBONETTO  K AA2 R - B OW0 - N EH1 - T OW0\nCARBONI  K AA0 R - B OW1 - N IY0\nCARBONIFEROUS  K AA2 R - B AH0 - N IH1 - F ER0 - AH0 S\nCARBONIZE  K AA1 R - B AH0 - N AY2 Z\nCARBONIZED  K AA1 R - B AH0 - N AY2 Z D\nCARBONNEAU  K AA1 R - B AH0 - N OW2\nCARBONS  K AA1 R - B AH0 N Z\nCARBORUNDUM  K AA2 R - B ER0 - AH1 N - D AH0 M\nCARBOY  K AA1 R - B OY2\nCARBURETE  K AA1 R - B Y ER0 - EH2 T\nCARBURETED  K AA1 R - B Y ER0 - EH2 - T IH0 D\nCARBURETION  K AA2 R - B Y ER0 - IY1 - SH AH0 N\nCARBURETOR  K AA1 R - B ER0 - EY2 - T ER0\nCARBURETORS  K AA1 R - B ER0 - EY2 - T ER0 Z\nCARBY  K AA1 R - B IY0\nCARCASS  K AA1 R - K AH0 S\nCARCASSES  K AA1 R - K AH0 - S IH0 Z\nCARCINOGEN  K AA0 R - S IH1 - N AH0 - JH AH0 N\nCARCINOGENIC  K AA2 R - S AH0 - N OW0 - JH EH1 - N IH0 K\nCARCINOGENS  K AA0 R - S IH1 - N AH0 - JH AH0 N Z\nCARCINOMA  K AA2 R - S AH0 - N OW1 - M AH0\nCARCIONE  K AA0 R - CH OW1 - N IY0\nCARD  K AA1 R D\nCARD'S  K AA1 R D Z\nCARDA  K AA1 R - D AH0\nCARDARELLI  K AA0 R - D AA0 - R EH1 - L IY0\nCARDBOARD  K AA1 R D - B AO2 R D\nCARDBOARDS  K AA1 R D - B AO2 R D Z\nCARDED  K AA1 R - D AH0 D\nCARDED(2)  K AA1 R - D IH0 D\nCARDELL  K AA0 R - D EY1 L\nCARDELLA  K AA2 R - D EH1 - L AH0\nCARDELLO  K AA2 R - D EH1 - L OW0\nCARDEN  K AA1 R - D AH0 N\nCARDENAS  K AA0 R - D IY1 - N AH0 S\nCARDENAS'S  K AA0 R - D IY1 - N AH0 - S IH0 Z\nCARDER  K AA1 R - D ER0\nCARDHOLDER  K AA1 R D - HH OW2 L - D ER0\nCARDHOLDERS  K AA1 R D - HH OW2 L - D ER0 Z\nCARDIA  K AA1 R - D IY0 - AH0\nCARDIAC  K AA1 R - D IY0 - AE2 K\nCARDIEL  K AA1 R - D IY2 L\nCARDIFF  K AA1 R - D IH0 F\nCARDIGAN  K AA1 R - D IH0 - G AH0 N\nCARDIGANS  K AA1 R - D IH0 - G AH0 N Z\nCARDIGES  K AA1 R - D IH0 - JH IH0 Z\nCARDILLO  K AA2 R - D IH1 - L OW0\nCARDIN  K AA1 R - D IH0 N\nCARDINAL  K AA1 R - D AH0 - N AH0 L\nCARDINAL'S  K AA1 R - D AH0 - N AH0 L Z\nCARDINAL(2)  K AA1 R - D IH0 - N AH0 L\nCARDINALE  K AA0 R - D IY0 - N AA1 - L IY0\nCARDINALI  K AA0 R - D IY0 - N AA1 - L IY0\nCARDINALS  K AA1 R - D AH0 - N AH0 L Z\nCARDINALS'  K AA1 R - D IH0 - N AH0 L Z\nCARDIO  K AA1 R - D IY0 - OW0\nCARDIOLOGIST  K AA2 R - D IY0 - AA1 - L AH0 - JH IH0 S T\nCARDIOLOGISTS  K AA2 R - D IY0 - AA1 - L AH0 - JH IH0 S T S\nCARDIOLOGISTS(2)  K AA2 R - D IY0 - AA1 - L AH0 - JH IH0 S S\nCARDIOLOGISTS(3)  K AA2 R - D IY0 - AA1 - L AH0 - JH IH0 S\nCARDIOLOGY  K AA2 R - D IY0 - AA1 - L AH0 - JH IY0\nCARDIOPULMONARY  K AA2 R - D IY0 - OW0 - P UH1 L - M AH0 - N EH2 - R IY0\nCARDIOVASCULAR  K AA2 R - D IY0 - OW0 - V AE1 - S K Y AH0 - L ER0\nCARDIS  K AA1 R - D IH0 S\nCARDISS  K AA1 R - D IH0 S\nCARDIZEM  K AA2 R - D IH0 - Z EH1 M\nCARDOEN  K AA1 R - D OW2 - AH0 N\nCARDON  K AA0 R - D AO1 N\nCARDONA  K AA0 R - D OW1 - N AH0\nCARDONE  K AA0 R - D OW1 - N IY0\nCARDONI  K AA0 R - D OW1 - N IY0\nCARDOON  K AA0 R - D UW1 N\nCARDOSA  K AA0 R - D OW1 - S AH0\nCARDOSI  K AA0 R - D OW1 - S IY0\nCARDOSO  K AA0 R - D OW1 - S OW0\nCARDOSO'S  K AA0 R - D OW1 - S OW0 Z\nCARDOZA  K AA0 R - D OW1 - Z AH0\nCARDOZO  K AA0 R - D OW1 - Z OW0\nCARDS  K AA1 R D Z\nCARDS'  K AA1 R D Z\nCARDUCCI  K AA0 R - D UW1 - CH IY0\nCARDWELL  K AA1 R D - W EH2 L\nCARDY  K AA1 R - D IY0\nCARE  K EH1 R\nCARE'S  K EH1 R Z\nCARED  K EH1 R D\nCAREEN  K ER0 - IY1 N\nCAREENED  K ER0 - IY1 N D\nCAREENING  K ER0 - IY1 - N IH0 NG\nCAREENS  K ER0 - IY1 N Z\nCAREER  K ER0 - IH1 R\nCAREERCOM  K ER0 - IH1 R - K AA0 M\nCAREERISM  K ER0 - IY1 - R IH0 - Z AH0 M\nCAREERIST  K ER0 - IH1 - R IH0 S T\nCAREERISTS  K ER0 - IH1 - R IH0 S T S\nCAREERISTS(2)  K ER0 - IH1 - R IH0 S S\nCAREERISTS(3)  K ER0 - IH1 - R IH0 S\nCAREERS  K ER0 - IH1 R Z\nCAREFREE  K EH1 R - F R IY2\nCAREFUL  K EH1 R - F AH0 L\nCAREFULLY  K EH1 R - F AH0 - L IY0\nCAREGIVER  K EH1 R - G IH2 - V ER0\nCAREGIVERS  K EH1 R - G IH2 - V ER0 Z\nCAREGIVING  K EH1 R - G IH2 - V IH0 NG\nCAREL  K AA0 - R EH1 L\nCARELESS  K EH1 R - L AH0 S\nCARELESSLY  K EH1 R - L AH0 S - L IY0\nCARELESSNESS  K EH1 R - L AH0 S - N AH0 S\nCARELLA  K AA0 - R EH1 - L AH0\nCARELLI  K AA0 - R EH1 - L IY0\nCARELLO  K EH2 - R EH1 - L OW0\nCARELOCK  K AE1 - R IH0 - L AA0 K\nCARELOCK(2)  K AE1 R - L AA0 K\nCAREMARK  K EH1 R - M AA2 R K\nCAREMARK'S  K EH1 R - M AA2 R K S\nCARENA  K EH2 - R IY1 - N AH0\nCAREPLUS  K EH1 R P - L AH1 S\nCARER  K EH1 - R ER0\nCARES  K EH1 R Z\nCARESS  K ER0 - EH1 S\nCARESSE  K AA1 - R EH0 S\nCARESSING  K ER0 - EH1 - S IH0 NG\nCARETAKER  K EH1 R - T EY2 - K ER0\nCARETAKERS  K EH1 R - T EY2 - K ER0 Z\nCAREUNIT  K EH1 - R Y UW2 - N IH0 T\nCAREW  K AE1 - R UW0\nCAREY  K EH1 - R IY0\nCAREY'S  K EH1 - R IY0 Z\nCARFAGNO  K AA0 R - F AA1 G - N OW0\nCARFORA  K AA0 R - F AO1 - R AH0\nCARGAL  K AA0 R - G AE1 L\nCARGILE  K AA1 R - JH AH0 L\nCARGILL  K AA1 R - G IH2 L\nCARGO  K AA1 R - G OW2\nCARGO'S  K AA1 R - G OW2 Z\nCARGOES  K AA1 R - G OW2 Z\nCARGONOFF  K AA1 R - G AH0 - N AO2 F\nCARGOS  K AA1 R - G OW2 Z\nCARHART  K AA1 R - HH AA2 R T\nCARIBBEAN  K ER0 - IH1 - B IY0 - AH0 N\nCARIBE  K EH2 - R IY1 B\nCARIBOU  K EH1 - R IH0 - B UW2\nCARICATURE  K EH1 - R AH0 - K AH0 - CH ER0\nCARICATURED  K ER0 - IH1 - K AH0 - CH ER0 D\nCARICATURES  K ER0 - IH1 - K AH0 - CH ER0 Z\nCARICATURIST  K EH1 - R AH0 - K AH0 - CH ER0 - AH0 S T\nCARICO  K AA0 - R IY1 - K OW0\nCARICOM  K EH1 - R IH0 - K AA2 M\nCARICOM'S  K EH1 - R IH0 - K AA2 M Z\nCARIDI  K AA0 - R IY1 - D IY0\nCARIE  K EH1 - R IY0\nCARIELLO  K AA0 - R IY0 - EH1 - L OW0\nCARIGNAN  K AE1 - R IH0 G - N AH0 N\nCARIKER  K AE1 - R IH0 - K ER0\nCARILLA  K AA0 - R IH1 - L AH0\nCARILLO  K AA0 - R IH1 - L OW0\nCARILLON  K EH1 - R AH0 L - AA2 N\nCARIN  K AE1 - R IH0 N\nCARINE  K AA0 - R IY1 - N IY0\nCARING  K EH1 - R IH0 NG\nCARINI  K AA0 - R IY1 - N IY0\nCARINII  K EH2 - R IY1 - N IY0\nCARINO  K AA0 - R IY1 - N OW0\nCARIOCA  K EH2 - R IY0 - OW1 - K AH0\nCARIS  K AE1 - R IH0 S\nCARISBROOK  K EH1 - R IH0 S - B R UH2 K\nCARISSA  K AA0 - R IY1 - S AH0\nCARITA  K AA0 - R IY1 - T AH0\nCARITHERS  K AE1 - R IH0 - DH ER0 Z\nCARJACK  K AA1 R - JH AE2 K\nCARJACKED  K AA1 R - JH AE2 K T\nCARJACKER  K AA1 R - JH AE2 - K ER0\nCARJACKER'S  K AA1 R - JH AE2 - K ER0 Z\nCARJACKERS  K AA1 R - JH AE2 - K ER0 Z\nCARJACKING  K AA1 R - JH AE2 - K IH0 NG\nCARJACKINGS  K AA1 R - JH AE2 - K IH0 NG Z\nCARJACKS  K AA1 R - JH AE2 K S\nCARKHUFF  K AA1 R K - HH AH0 F\nCARL  K AA1 R L\nCARL'S  K AA1 R L Z\nCARLA  K AA1 R - L AH0\nCARLA'S  K AA1 R - L AH0 Z\nCARLAN  K AA1 R - L AH0 N\nCARLAND  K AA1 R - L AH0 N D\nCARLBERG  K AA1 R L - B ER0 G\nCARLE  K AA1 - R AH0 L\nCARLEEN  K AA0 R - L IY1 N\nCARLEN  K AA1 R - L AH0 N\nCARLENE  K AA1 R - L IY2 N\nCARLES  K AA1 R L Z\nCARLETON  K AA1 R L - T AH0 N\nCARLEY  K AA1 R - L IY0\nCARLI  K AA1 R - L IY0\nCARLILE  K AA1 R - L AY0 L\nCARLIN  K AA1 R - L IH0 N\nCARLIN'S  K AA1 R - L IH0 N Z\nCARLINER  K AA1 R - L AY2 - N ER0\nCARLING  K AA1 R - L IH0 NG\nCARLING'S  K AA1 R - L IH0 NG Z\nCARLINI  K AA0 R - L IY1 - N IY0\nCARLINO  K AA0 R - L IY1 - N OW0\nCARLISI  K AA0 R - L IY1 - S IY0\nCARLISLE  K AA1 R - L AY2 L\nCARLITA  K AA0 R - L IY1 - T AH0\nCARLITO  K AA0 R - L IY1 - T OW0\nCARLITO'S  K AA0 R - L IY1 - T OW0 Z\nCARLL  K AA1 R L\nCARLO  K AA1 R - L OW0\nCARLOAD  K AA1 R - L OW2 D\nCARLOADING  K AA1 R - L OW2 - D IH0 NG\nCARLOADINGS  K AA1 R - L OW2 - D IH0 NG Z\nCARLOADS  K AA1 R - L OW2 D Z\nCARLOCK  K AA1 R - L AA2 K\nCARLON  K AA1 R - L AH0 N\nCARLONE  K AA0 R - L OW1 - N IY0\nCARLONI  K AA0 R - L OW1 - N IY0\nCARLOS  K AA1 R - L OW0 S\nCARLOTTA  K AA0 R - L AO1 - T AH0\nCARLOUGH  K AA1 R - L OW0\nCARLOW  K AA1 R - L OW2\nCARLS  K AA1 R L Z\nCARLSBAD  K AA1 R L S - B AE0 D\nCARLSBERG  K AA1 R L Z - B ER0 G\nCARLSEN  K AA1 R L - S AH0 N\nCARLSON  K AA1 R L - S AH0 N\nCARLSON'S  K AA1 R L - S AH0 N Z\nCARLSSON  K AA1 R L - S AH0 N\nCARLSTADT  K AA1 R L - S T AE2 T\nCARLSTON  K AA1 R L - S T AH0 N\nCARLSTROM  K AA1 R L - S T R AH0 M\nCARLTON  K AA1 R L - T AH0 N\nCARLTON'S  K AA1 R L - T AH0 N Z\nCARLUCCI  K AA0 R - L UW1 - CH IY0\nCARLY  K AA1 R - L IY0\nCARLYLE  K AA1 R - L AY2 L\nCARLYLE'S  K AA0 R - L AY1 L Z\nCARLYON  K AA1 R - L IY0 - AA0 N\nCARLZON  K AA1 R L - Z AA0 N\nCARMA  K AA1 R - M AH0\nCARMACK  K AA1 R - M AH0 K\nCARMAKER  K AA1 R - M EY2 - K ER0\nCARMAKER'S  K AA1 R - M EY2 - K ER0 Z\nCARMAKERS  K AA1 R - M EY2 - K ER0 Z\nCARMAKERS'  K AA1 R - M EY2 - K ER0 Z\nCARMAN  K AA1 R - M AH0 N\nCARMANY  K AA1 R - M AH0 - N IY0\nCARMEAN  K AA1 R - M IY0 - AH0 N\nCARMEL  K AA0 R - M EH1 L\nCARMEL(2)  K AA1 R - M AH0 L\nCARMELA  K AA0 R - M EH1 - L AH0\nCARMELITA  K AA0 R - M AH0 - L IY1 - T AH0\nCARMELITE  K AA1 R - M AH0 - L AY2 T\nCARMELO  K AA0 R - M EH1 - L OW0\nCARMEN  K AA1 R - M AH0 N\nCARMER  K AA1 R - M ER0\nCARMICAL  K AA1 R - M IH0 - K AH0 L\nCARMICHAEL  K AA1 R - M AY2 - K AH0 L\nCARMICKLE  K AA1 R - M IH0 - K AH0 L\nCARMIE  K AA1 R - M IY0\nCARMIKE  K AA1 R - M AY2 K\nCARMINE  K AA1 R - M AH0 N\nCARMITA  K AA0 R - M IY1 - T AH0\nCARMODY  K AA1 R - M AH0 - D IY0\nCARMON  K AA1 R - M AH0 N\nCARMONA  K AA0 R - M OW1 - N AH0\nCARMONY  K AA1 R - M OW0 - N IY0\nCARMOUCHE  K AA0 R - M UW1 SH\nCARMOY  K AA1 R - M OY0\nCARMY  K AA1 R - M IY0\nCARN  K AA1 R N\nCARNAGE  K AA1 R - N IH0 JH\nCARNAHAN  K AA1 R - N AH0 - HH AE0 N\nCARNAL  K AA1 R - N AH0 L\nCARNATHAN  K AA1 R - N AH0 - TH AE0 N\nCARNATION  K AA0 R - N EY1 - SH AH0 N\nCARNATIONS  K AA0 R - N EY1 - SH AH0 N Z\nCARNAUBA  K AA0 R - N AO1 - B AH0\nCARNAUD  K AA0 R - N AO1 B\nCARNE  K AA1 R N\nCARNEAL  K AA1 R - N AH0 L\nCARNEGIE  K AA1 R - N AH0 - G IY0\nCARNEGIE'S  K AA1 R - N AH0 - G IY0 Z\nCARNEGIE'S(2)  K AA2 R - N EY1 - G IY0 Z\nCARNEGIE(2)  K AA2 R - N EY1 - G IY0\nCARNEGIES  K AA1 R - N AH0 - G IY0 Z\nCARNEGIES(2)  K AA2 R - N EY1 - G IY0 Z\nCARNEIRO  K AA0 R - N EH1 - R OW0\nCARNELL  K AA1 R - N AH0 L\nCARNER  K AA1 R - N ER0\nCARNES  K AA1 R N Z\nCARNETT  K AA1 R - N AH0 T\nCARNEVALE  K AA0 R - N EY0 - V AA1 - L EY0\nCARNEY  K AA1 R - N IY0\nCARNICERO  K AA2 R - N IH0 - S EH1 - R OW0\nCARNINE  K AA0 R - N IY1 - N IY0\nCARNIVAL  K AA1 R - N AH0 - V AH0 L\nCARNIVAL'S  K AA1 R - N AH0 - V AH0 L Z\nCARNIVALS  K AA1 R - N AH0 - V AH0 L Z\nCARNIVORE  K AA1 R - N IH0 - V AO2 R\nCARNIVORES  K AA1 R - N AH0 - V AO2 R Z\nCARNIVOROUS  K AA0 R - N IH1 - V ER0 - AH0 S\nCARNLEY  K AA1 R N - L IY0\nCARNS  K AA1 R N Z\nCARO  K AA1 - R OW0\nCAROB  K EH1 - R AH0 B\nCAROCHE  K ER0 - OW1 CH\nCAROL  K AE1 - R AH0 L\nCAROL'S  K EH1 - R AH0 L Z\nCAROL'S(2)  K AE1 - R AH0 L Z\nCAROL(2)  K EH1 - R AH0 L\nCAROLAN  K EH1 - R AH0 - L AE0 N\nCAROLCO  K ER0 - AA1 L - K OW0\nCAROLCO'S  K EH1 - R AH0 L - K OW2 Z\nCAROLCO'S(2)  K ER0 - EH1 L - K OW2 Z\nCAROLE  K AE1 - R AH0 L\nCAROLE(2)  K EH1 - R AH0 L\nCAROLINA  K EH2 - R AH0 - L AY1 - N AH0\nCAROLINA'S  K EH2 - R AH0 - L AY1 - N AH0 Z\nCAROLINAS  K EH2 - R AH0 - L AY1 - N AH0 Z\nCAROLINE  K EH1 - R AH0 - L AY2 N\nCAROLINE'S  K EH1 - R AH0 - L AY2 N Z\nCAROLINGIAN  K EH2 - R AH0 - L IH1 N - JH IY0 - AH0 N\nCAROLINIAN  K EH2 - R OW0 - L IH1 - N IY0 - AH0 N\nCAROLINIAN(2)  K EH2 - R AH0 - L IH1 - N IY0 - AH0 N\nCAROLINIANS  K EH2 - R AH0 - L IH1 - N IY0 - AH0 N Z\nCAROLLAN  K ER0 - AA1 - L AH0 N\nCAROLLO  K ER0 - AA1 - L OW0\nCAROLS  K EH1 - R AH0 L Z\nCAROLUS  K EH1 - R AH0 - L AH0 S\nCAROLYN  K EH1 - R AH0 - L IH0 N\nCAROLYNE  K EH1 - R AH0 - L IH0 N\nCAROLYNE(2)  K EH1 - R AH0 - L AY0 N\nCARON  K AA0 - R AO1 N\nCARONE  K ER0 - OW1 N\nCARONNA  K ER0 - AA1 - N AH0\nCAROSELLA  K AA0 - R OW0 - S EH1 - L AH0\nCAROSELLI  K AA0 - R OW0 - S EH1 - L IY0\nCAROSI  K ER0 - OW1 - S IY0\nCAROTA  K ER0 - OW1 - T AH0\nCAROTENE  K EH1 - R AH0 - T IY2 N\nCAROTENUTO  K AA0 - R OW0 - T EH0 - N UW1 - T OW0\nCAROTHERS  K AE1 - R AH0 - DH ER0 Z\nCAROTID  K ER0 - AA1 - T IH0 D\nCAROUSE  K ER0 - AW1 Z\nCAROUSEL  K EH1 - R AH0 - S EH2 L\nCAROUSING  K ER0 - AW1 - Z IH0 NG\nCAROW  K AE1 - R OW0\nCAROZZA  K ER0 - AA1 - Z AH0\nCARP  K AA1 R P\nCARPAL  K AA1 R - P AH0 L\nCARPENCIC  K AA0 R - P EH1 N - CH IH0 K\nCARPENCIC'S  K AA0 R - P EH1 N - CH IH0 K S\nCARPENITO  K AA0 R - P EH0 - N IY1 - T OW0\nCARPENTER  K AA1 R - P AH0 N - T ER0\nCARPENTER'S  K AA1 R - P AH0 N - T ER0 Z\nCARPENTERS  K AA1 R - P AH0 N - T ER0 Z\nCARPENTIER  K AA1 R - P AH0 N - T IY0 - ER0\nCARPENTIERI  K AA0 R - P EH0 N - T IH1 - R IY0\nCARPENTRY  K AA1 R - P AH0 N - T R IY0\nCARPER  K AA1 R - P ER0\nCARPET  K AA1 R - P AH0 T\nCARPETBAGGER  K AA1 R - P AH0 T - B AE2 - G ER0\nCARPETBAGGERS  K AA1 R - P AH0 T - B AE2 - G ER0 Z\nCARPETED  K AA1 R - P AH0 - T IH0 D\nCARPETING  K AA1 R - P AH0 - T IH0 NG\nCARPETS  K AA1 R - P AH0 T S\nCARPINELLI  K AA0 R - P IY0 - N EH1 - L IY0\nCARPING  K AA1 R - P IH0 NG\nCARPINO  K AA0 R - P IY1 - N OW0\nCARPIO  K AA1 R - P IY0 - OW0\nCARPOOL  K AA1 R - P UW2 L\nCARPORT  K AA1 R - P AO2 R T\nCARPORTS  K AA1 R - P AO2 R T S\nCARR  K AA1 R\nCARR'S  K AA1 R Z\nCARRA  K AA1 - R AH0\nCARRAGHER  K AE1 - R AH0 G - HH ER0\nCARRAHER  K AE1 - R AH0 - HH ER0\nCARRANCO  K AA0 - R AA1 N - K OW0\nCARRANO  K AA2 - R AA1 - N OW0\nCARRANZA  K AA0 - R AA1 N - Z AH0\nCARRARA  K AA2 - R AA1 - R AH0\nCARRAS  K AE1 - R AH0 Z\nCARRASCO  K AA0 - R AA1 - S K OW0\nCARRASQUEL  K EH2 - R AH0 - S K EH1 L\nCARRASQUILLO  K EH2 - R AH0 - S K IH1 - L OW0\nCARRAWAY  K AE1 - R AH0 - W EY2\nCARRE  K AA1 R\nCARRE(2)  K AA2 - R EY1\nCARREIRA  K AA0 - R EH1 - R AH0\nCARREIRO  K AA0 - R EH1 - R OW0\nCARREKER  K EH1 - R IH0 - K ER0\nCARREL  K AE1 - R AH0 L\nCARRELL  K AA0 - R EY1 L\nCARRENO  K AA0 - R EH1 - N OW0\nCARREON  K AA0 - R EY0 - AO1 N\nCARRERA  K AA0 - R EH1 - R AH0\nCARRERAS  K AA0 - R EH1 - R AA0 Z\nCARRERE  K AA0 - R EH1 - R EY0\nCARRERO  K AA2 - R EH1 - R OW0\nCARRETTA  K AA0 - R EH1 - T AH0\nCARREY  K EH1 - R IY0\nCARREY'S  K AE1 - R IY0 Z\nCARRIAGE  K AE1 - R IH0 JH\nCARRIAGE(2)  K EH1 - R AH0 JH\nCARRIAGES  K AE1 - R IH0 - JH IH0 Z\nCARRIAGES(2)  K EH1 - R AH0 - JH AH0 Z\nCARRIAN  K EH1 - R IY0 - AH0 N\nCARRIAN'S  K AE1 - R IY0 - AH0 N Z\nCARRIBEAN  K AE2 - R AH0 - B IY1 - AH0 N\nCARRIBEAN(2)  K AH0 - R IH1 - B IY0 - AH0 N\nCARRICK  K EH1 - R IH0 K\nCARRICO  K AA0 - R IY1 - K OW0\nCARRIE  K EH1 - R IY0\nCARRIED  K AE1 - R IY0 D\nCARRIED(2)  K EH1 - R IY0 D\nCARRIER  K AE1 - R IY0 - ER0\nCARRIER'S  K AE1 - R IY0 - ER0 Z\nCARRIER'S(2)  K EH1 - R IY0 - ER0 Z\nCARRIER(2)  K EH1 - R IY0 - ER0\nCARRIERE  K AA0 - R IH1 - R IY0\nCARRIERO  K AA0 - R IH1 - R OW0\nCARRIERS  K AE1 - R IY0 - ER0 Z\nCARRIERS'  K EH1 - R IY0 - ER0 Z\nCARRIERS'S  K AE1 - R IY0 - ER0 - Z IH0 Z\nCARRIERS(2)  K EH1 - R IY0 - ER0 Z\nCARRIES  K AE1 - R IY0 Z\nCARRIES(2)  K EH1 - R IY0 Z\nCARRIG  K AE1 - R IH0 G\nCARRIGAN  K AE1 - R IH0 - G AH0 N\nCARRIGER  K AE1 - R IH0 - JH ER0\nCARRIGG  K AE1 - R IH0 G\nCARRIKER  K AE1 - R IH0 - K ER0\nCARRILLO  K ER0 - IH1 - L OW0\nCARRINGER  K AE1 - R IH0 - NG ER0\nCARRINGTON  K EH1 - R IH0 NG - T AH0 N\nCARRINGTON'S  K EH1 - R IH0 NG - T AH0 N Z\nCARRINO  K AA2 - R IY1 - N OW0\nCARRION  K EH1 - R IY0 - AH0 N\nCARRIS  K AE1 - R IH0 S\nCARRISYN  K AE1 - R IH0 - S IH0 N\nCARRITHERS  K AE1 - R IH0 - DH ER0 Z\nCARRIVEAU  K AE1 - R IH0 - V OW2\nCARRIZALES  K AA0 - R IY0 - Z AA1 - L EH0 S\nCARRO  K AA1 - R OW0\nCARROL  K AE1 - R AH0 L\nCARROLL  K AE1 - R AH0 L\nCARROLL'S  K AE1 - R AH0 L Z\nCARROLL'S(2)  K EH1 - R AH0 L Z\nCARROLL(2)  K EH1 - R AH0 L\nCARROLLTON  K EH1 - R AH0 L - T AH0 N\nCARRON  K AE1 - R AH0 N\nCARROT  K AE1 - R AH0 T\nCARROT(2)  K EH1 - R AH0 T\nCARROTHERS  K AE1 - R AH0 - DH ER0 Z\nCARROTS  K AE1 - R AH0 T S\nCARROTS(2)  K EH1 - R AH0 T S\nCARROUSEL  K EH1 - R AH0 - S EH2 L\nCARROW  K AE1 - R OW0\nCARROZZA  K AA0 - R OW1 - Z AH0\nCARRUBBA  K AA2 - R UW1 - B AH0\nCARRUTH  K AE1 - R UW0 TH\nCARRUTHERS  K ER0 - AH1 - DH ER0 Z\nCARRY  K AE1 - R IY0\nCARRY(2)  K EH1 - R IY0\nCARRYANNE  K AE1 - R IY0 - AE1 N\nCARRYFORWARD  K EH1 - R IY0 - F AO2 R - W ER0 D\nCARRYFORWARDS  K EH1 - R IY0 - F AO2 R - W ER0 D Z\nCARRYING  K AE1 - R IY0 - IH0 NG\nCARRYING(2)  K EH1 - R IY0 - IH0 NG\nCARRYOVER  K EH1 - R Y OW2 - V ER0\nCARS  K AA1 R Z\nCARS'  K AA1 R Z\nCARS(2)  K AA1 Z\nCARSE  K AA1 R S\nCARSEY  K AA1 R - S IY0\nCARSICK  K AA1 R - S IH0 K\nCARSON  K AA1 R - S AH0 N\nCARSON'S  K AA1 R - S AH0 N Z\nCARSON(2)  K AA1 R - Z AH0 N\nCARSTARPHEN  K AA0 R - S T AA1 R - F AH0 N\nCARSTEN  K AA1 R - S T AH0 N\nCARSTENS  K AA1 R - S T AH0 N Z\nCARSTENSEN  K AA0 R - S T EH1 N - S AH0 N\nCARSWELL  K AA1 R - S W EH2 L\nCART  K AA1 R T\nCARTA  K AA1 R - T AH0\nCARTAGENA  K AA2 R - T AH0 - JH IY1 - N AH0\nCARTAYA  K AA2 R - T AY1 - AH0\nCARTE  K AA1 R T\nCARTED  K AA1 R - T IH0 D\nCARTEE  K AA1 R - T IY1\nCARTEL  K AA0 R - T EH1 L\nCARTEL'S  K AA0 R - T EH1 L Z\nCARTELS  K AA0 R - T EH1 L Z\nCARTER  K AA1 R - T ER0\nCARTER'S  K AA1 R - T ER0 Z\nCARTERA  K AA2 R - T EH1 - R AH0\nCARTERET  K AA1 R - T ER0 - IH0 T\nCARTERET'S  K AA2 R - T ER0 - EH1 T S\nCARTERS  K AA1 R - T ER0 Z\nCARTERSVILLE  K AA1 R - T ER0 Z - V IH2 L\nCARTHAGE  K AA1 R - TH AH0 JH\nCARTHAGE(2)  K AA1 R - TH IH0 JH\nCARTHAGINIAN  K AA2 R - TH AH0 - JH IH1 - N IY0 - AH0 N\nCARTIER  K AA1 R - T IY0 - ER0\nCARTILAGE  K AA1 R - T AH0 - L AH0 JH\nCARTILAGE(2)  K AA1 R - T AH0 - L IH0 JH\nCARTING  K AA1 R - T IH0 NG\nCARTLAND  K AA1 R T - L AH0 N D\nCARTLEDGE  K AA1 R T - L EH2 JH\nCARTLIDGE  K AA1 R T - L IH0 JH\nCARTMELL  K AA0 R T - M EY1 L\nCARTMILL  K AA1 R T - M IH2 L\nCARTNER  K AA1 R T - N ER0\nCARTON  K AA1 R - T AH0 N\nCARTONEROS  K AA2 R - T OW2 - N EH1 - R OW0 S\nCARTONS  K AA1 R - T AH0 N Z\nCARTOON  K AA0 R - T UW1 N\nCARTOONING  K AA0 R - T UW1 - N IH0 NG\nCARTOONIST  K AA0 R - T UW1 - N AH0 S T\nCARTOONISTS  K AA0 R - T UW1 - N IH0 S T S\nCARTOONISTS(2)  K AA0 R - T UW1 - N IH0 S S\nCARTOONS  K AA0 R - T UW1 N Z\nCARTRETTE  K AA2 R - T R EH1 T\nCARTRIDGE  K AA1 R - T R AH0 JH\nCARTRIDGE(2)  K AA1 R - T R IH0 JH\nCARTRIDGES  K AA1 R - T R AH0 - JH AH0 Z\nCARTS  K AA1 R T S\nCARTUSCIELLO  K AA0 R - T UW2 - S IY0 - EH1 - L OW0\nCARTWHEEL  K AA1 R T - W IY2 L\nCARTWHEELS  K AA1 R T - W IY2 L Z\nCARTWRIGHT  K AA1 R T - R AY2 T\nCARTY  K AA1 R - T IY0\nCARUANA  K AA0 - R UW0 - AE1 - N AH0\nCARUCCI  K AA0 - R UW1 - CH IY0\nCARUSO  K ER0 - UW1 - S OW0\nCARUSONE  K AA0 - R UW0 - S OW1 - N IY0\nCARUTH  K AE1 - R UW0 TH\nCARUTHERS  K ER0 - AH1 - DH ER0 Z\nCARVAJAL  K AA0 R - V AA0 - Y AE1 L\nCARVALHO  K AA0 R - V AA1 L - HH OW0\nCARVE  K AA1 R V\nCARVED  K AA1 R V D\nCARVEL  K AA0 R - V EH1 L\nCARVELL  K AA0 R - V EY1 L\nCARVELL(2)  K AA0 R - V EH1 L\nCARVER  K AA1 R - V ER0\nCARVER'S  K AA1 R - V ER0 Z\nCARVERS  K AA1 R - V ER0 Z\nCARVES  K AA1 R V Z\nCARVEY  K AA1 R - V IY0\nCARVILLE  K AA1 R - V IH2 L\nCARVILLE'S  K AA1 R - V IH2 L Z\nCARVIN  K AA1 R - V IH0 N\nCARVING  K AA1 R - V IH0 NG\nCARVINGS  K AA1 R - V IH0 NG Z\nCARWELL  K AA1 R - W EH2 L\nCARWILE  K AA1 R - W AY2 L\nCARY  K EH1 - R IY0\nCARYL  K EH1 - R AH0 L\nCARYN  K AA1 - R IH0 N\nCAS  K AE1 S\nCASA  K AA1 - S AH0\nCASABLANCA  K AE2 - S AH0 - B L AE1 NG - K AH0\nCASAD  K AE1 - S AH0 D\nCASADA  K AA0 - S AA1 - D AH0\nCASADO  K AA0 - S AA1 - D OW0\nCASADOS  K AA0 - S AA1 - D OW0 Z\nCASADY  K AH0 - S AA1 - D IY0\nCASAGRANDE  K AA0 - S AA1 - G R AE0 N - D IY0\nCASAL  K AA0 - S AA1 L\nCASALE  K AA0 - S AA1 - L IY0\nCASALI  K AA0 - S AA1 - L IY0\nCASALINO  K AA0 - S AA0 - L IY1 - N OW0\nCASALS  K AA0 - S AA1 L Z\nCASALS(2)  K AH0 - S AA1 L Z\nCASAMENTO  K AE2 - S AH0 - M EH1 N - T OW0\nCASANOVA  K AE2 - S AH0 - N OW1 - V AH0\nCASARES  K AA0 - S AA1 - R EH0 S\nCASAREZ  K AA0 - S AA1 - R EH0 Z\nCASAS  K AA1 - S AH0 Z\nCASASSA  K AA0 - S AA1 - S AH0\nCASAUS  K AE1 - S AO0 Z\nCASAVANT  K AE1 - S AH0 - V AH0 N T\nCASAZZA  K AA0 - S AA1 T - S AH0\nCASBAH  K AE1 S - B AH0\nCASCADE  K AE0 - S K EY1 D\nCASCADE'S  K AE0 - S K EY1 D Z\nCASCADED  K AE0 - S K EY1 - D IH0 D\nCASCADES  K AE0 - S K EY1 D Z\nCASCADES'  K AE0 - S K EY1 D Z\nCASCADING  K AE0 - S K EY1 - D IH0 NG\nCASCIANO  K AA0 - S CH IY0 - AA1 - N OW0\nCASCIATO  K AA0 S - CH AA1 - T OW0\nCASCIO  K AE1 - S IY0 - OW0\nCASCO  K AE1 - S K OW0\nCASCONE  K AA0 - S K OW1 - N IY0\nCASDORPH  K AE1 S - D ER0 F\nCASE  K EY1 S\nCASE'S  K EY1 - S IH0 Z\nCASEBEER  K AE0 - S IH0 - B IH1 R\nCASEBEER(2)  K EY0 S - B IH1 R\nCASEBIER  K AE1 - S IH0 - B IY0 - ER0\nCASEBOLT  K EY1 S - B OW2 L T\nCASEIN  K EY0 - S IY1 N\nCASELLA  K AH0 - S EH1 - L AH0\nCASELLI  K AH0 - S EH1 - L IY0\nCASELOAD  K EY1 S - L OW2 D\nCASELOADS  K AE1 - S AH0 - L OW2 D Z\nCASERA  K AH0 - S EH1 - R AH0\nCASERTA  K AA0 - S EH1 R - T AH0\nCASES  K EY1 - S AH0 Z\nCASES(2)  K EY1 - S IH0 Z\nCASESA  K AH0 - S EH1 - S AH0\nCASEWORK  K EY1 S - W ER2 K\nCASEWORKER  K EY1 S - W ER2 - K ER0\nCASEWORKERS  K EY1 S - W ER2 - K ER0 Z\nCASEY  K EY1 - S IY0\nCASEY'S  K EY1 - S IY0 Z\nCASEZE  K AH0 - S IY1 - Z IY0\nCASEZE'S  K AH0 - S IY1 - Z IY0 Z\nCASGRAIN  K AE1 S - G R EY2 N\nCASH  K AE1 SH\nCASHATT  K AE1 - SH AH0 T\nCASHDOLLAR  K AE1 SH - D AA2 - L ER0\nCASHED  K AE1 SH T\nCASHEN  K AE1 - SH AH0 N\nCASHER  K AE1 - SH ER0\nCASHES  K AE1 - SH IH0 Z\nCASHEW  K AE1 - SH UW2\nCASHEWS  K AE1 - SH UW2 Z\nCASHFLOW  K AE1 SH - F L OW2\nCASHIER  K AE0 - SH IH1 R\nCASHIER'S  K AE0 - SH IH1 R Z\nCASHIERED  K AE0 - SH IH1 R D\nCASHIERS  K AE2 - SH IH1 R Z\nCASHIN  K AE1 - SH IH0 N\nCASHING  K AE1 - SH IH0 NG\nCASHION  K AA0 - SH IY1 N\nCASHLESS  K AE1 SH - L AH0 S\nCASHMAN  K AE1 SH - M AH0 N\nCASHMERE  K AE1 ZH - M IH0 R\nCASHMORE  K AE1 SH - M AO0 R\nCASHON  K AE1 - SH AH0 N\nCASHWAY  K AE1 SH - W EY2\nCASHWAYS  K AE1 SH - W EY2 Z\nCASHWELL  K AE1 SH - W EH2 L\nCASIANO  K AA0 - S IY0 - AA1 - N OW0\nCASIAS  K AA0 - S IY1 - AH0 Z\nCASILLAS  K AA0 - S IH1 - L AH0 Z\nCASILLO  K AH0 - S IH1 - L OW0\nCASIMIR  K AE1 - S IH0 - M IY2 R\nCASIMIRO  K AA0 - S IY0 - M IH1 - R OW0\nCASING  K EY1 - S IH0 NG\nCASINGS  K EY1 - S IH0 NG Z\nCASINO  K AH0 - S IY1 - N OW0\nCASINO'S  K AH0 - S IY1 - N OW0 Z\nCASINOS  K AH0 - S IY1 - N OW0 Z\nCASIO  K AE1 - S IY0 - OW0\nCASK  K AE1 S K\nCASKET  K AE1 - S K AH0 T\nCASKETS  K AE1 - S K AH0 T S\nCASKEY  K AE1 S - K IY0\nCASKS  K AE1 S K S\nCASLER  K AE1 - S AH0 - L ER0\nCASLER(2)  K AE1 S - L ER0\nCASLIN  K AE1 S - L IH0 N\nCASNER  K AE1 S - N ER0\nCASO  K AA1 - S OW0\nCASOLA  K AA0 - S OW1 - L AH0\nCASON  K AE1 - S AH0 N\nCASPAR  K AE1 - S P ER0\nCASPAR(2)  K AE1 - S P AA2 R\nCASPER  K AE1 - S P ER0\nCASPERS  K AE1 - S P ER0 Z\nCASPERSEN  K AE1 - S P ER0 - S AH0 N\nCASPERSON  K AE1 - S P ER0 - S AH0 N\nCASPIAN  K AE1 - S P IY0 - AH0 N\nCASS  K AE1 S\nCASSADA  K AA0 - S AA1 - D AH0\nCASSADAY  K AE1 - S AH0 - D EY2\nCASSADY  K AE1 - S AH0 - D IY0\nCASSANDRA  K AH0 - S AE1 N - D R AH0\nCASSANDRAS  K AH0 - S AE1 N - D R AH0 S\nCASSANI  K AA0 - S AA1 - N IY0\nCASSANO  K AA0 - S AA1 - N OW0\nCASSAR  K AE1 - S ER0\nCASSARA  K AA0 - S AA1 - R AH0\nCASSARINO  K AA0 - S AA0 - R IY1 - N OW0\nCASSARO  K AA0 - S AA1 - R OW0\nCASSATA  K AA0 - S AA1 - T AH0\nCASSATT  K AE1 - S AH0 T\nCASSAVETES  K AE2 - S AH0 - V IY1 - T IY0 Z\nCASSEB  K AE1 - S AH0 B\nCASSEDY  K AE1 - S IH0 - D IY0\nCASSEL  K AE1 - S AH0 L\nCASSELBERRY  K AE1 - S AH0 L - B EH2 - R IY0\nCASSELL  K AE1 - S AH0 L\nCASSELLA  K AA0 - S EH1 - L AH0\nCASSELLS  K AE1 - S AH0 L Z\nCASSELMAN  K AE1 - S AH0 L - M AH0 N\nCASSELS  K AE1 - S AH0 L Z\nCASSENS  K AE1 - S AH0 N Z\nCASSERLY  K AE1 - S ER0 - L IY0\nCASSEROLE  K AE1 - S ER0 - OW2 L\nCASSESE  K AA0 - S EY1 - Z IY0\nCASSETTA  K AA0 - S EH1 - T AH0\nCASSETTE  K AH0 - S EH1 T\nCASSETTES  K AH0 - S EH1 T S\nCASSETTY  K AE1 - S IH0 - T IY0\nCASSIA  K AE1 - SH IY0 - AH0\nCASSIDAY  K AE1 - S IY0 - D EY0\nCASSIDY  K AE1 - S IH0 - D IY0\nCASSIDY'S  K AE1 - S IH0 - D IY0 Z\nCASSIE  K AE1 - S IY0\nCASSIN  K AE1 - S IH0 N\nCASSINELLI  K AA0 - S IY0 - N EH1 - L IY0\nCASSINI  K AH0 - S IY1 - N IY0\nCASSINO  K AH0 - S IY1 - N OW0\nCASSIS  K AE1 - S IH0 S\nCASSITY  K AE1 - S IH0 - T IY0\nCASSO  K AE1 - S OW0\nCASSOCK  K AE1 - S AH0 K\nCASSON  K AE1 - S AH0 N\nCASSONE  K AA0 - S OW1 - N IY0\nCASSONI  K AH0 - S OW1 - N IY0\nCASSONI'S  K AH0 - S OW1 - N IY0 Z\nCASSOWARY  K AE1 - S AH0 - W EH2 - R IY0\nCASSTEVENS  K AA0 - S T EY0 - V EY1 - AH0 N Z\nCAST  K AE1 S T\nCASTA  K AE1 - S T AH0\nCASTAGNA  K AA0 - S T AA1 G - N AH0\nCASTAGNO  K AA0 - S T AA1 G - N OW0\nCASTAGNOLA  K AA0 - S T AA0 G - N OW1 - L AH0\nCASTALDI  K AA0 - S T AA1 L - D IY0\nCASTALDO  K AA0 - S T AA1 L - D OW0\nCASTANEDA  K AA0 - S T AA0 - N EH1 - D AH0\nCASTANO  K AA0 - S T AA1 - N OW0\nCASTANON  K AE1 - S T AH0 - N AA0 N\nCASTAWAY  K AE1 S T - AH0 - W EY2\nCASTAWAYS  K AE1 S T - AH0 - W EY2 Z\nCASTE  K AE1 S T\nCASTEEL  K EY1 - S T IY0 L\nCASTEEN  K AH0 - S T IY1 N\nCASTEL  K EY1 - S T AH0 L\nCASTELL  K EY1 - S T AH0 L\nCASTELLANA  K AA0 - S T EH0 - L AE1 - N AH0\nCASTELLANI  K AA0 - S T EH0 - L AA1 - N IY0\nCASTELLANO  K AA0 - S T EH0 - L AA1 - N OW0\nCASTELLANOS  K AA0 - S T EY0 - L AA1 - N OW0 Z\nCASTELLAW  K EY1 - S T IH0 - L AO0\nCASTELLI  K AA0 - S T EH1 - L IY0\nCASTELLO  K AH0 - S T EH1 - L OW0\nCASTELLON  K EY1 - S T IH0 - L AA0 N\nCASTELLUCCI  K AA0 - S T EH0 - L UW1 - CH IY0\nCASTELLUCCIO  K AA0 - S T EH0 - L UW1 - CH IY0 - OW0\nCASTELLVI  K AH0 - S T EH1 L - V IY0\nCASTELO  K AA0 - S T EH1 - L OW0\nCASTEN  K AE1 - S T AH0 N\nCASTER  K AE1 - S T ER0\nCASTERLINE  K AE1 - S T ER0 - L AY2 N\nCASTERS  K AE1 - S T ER0 Z\nCASTES  K AE1 S T S\nCASTIGATE  K AE1 - S T AH0 - G EY2 T\nCASTIGATED  K AE1 - S T AH0 - G EY2 - T IH0 D\nCASTIGATING  K AE1 - S T AH0 - G EY2 - T IH0 NG\nCASTIGLIA  K AA0 - S T IY1 G - L IY0 - AH0\nCASTIGLIONE  K AA0 - S T IY0 - G L IY0 - OW1 - N IY0\nCASTILLA  K AA0 - S T IH1 - L AH0\nCASTILLE  K AE1 - S T IH0 L\nCASTILLEJA  K AA0 - S T IY0 - L EY1 - Y AH0\nCASTILLO  K AE2 - S T IY1 - OW0\nCASTILLO(2)  K AE2 - S T IH1 - L OW0\nCASTILLON  K AE1 - S T IH0 - L AA0 N\nCASTINE  K AA0 - S T IY1 - N IY0\nCASTING  K AE1 - S T IH0 NG\nCASTINGS  K AE1 - S T IH0 NG Z\nCASTLE  K AE1 - S AH0 L\nCASTLE'S  K AE1 - S AH0 L Z\nCASTLEBERRY  K AE1 - S AH0 L - B EH2 - R IY0\nCASTLEMAN  K AE1 - S AH0 L - M AH0 N\nCASTLES  K AE1 - S AH0 L Z\nCASTNER  K AE1 S T - N ER0\nCASTO  K AE1 - S T OW0\nCASTOFF  K AE1 S T - AO2 F\nCASTOFFS  K AE1 S T - AO2 F S\nCASTON  K AE1 - S T AH0 N\nCASTONGUAY  K AH0 - S T AA1 NG - G EY0\nCASTOR  K AE1 - S T ER0\nCASTORENA  K AA1 - S T AO0 R - N AH0\nCASTORO  K AA0 - S T AO1 - R OW0\nCASTPART  K AE1 S T - P AA2 R T\nCASTPARTS  K AE1 S T - P AA2 R T S\nCASTRATE  K AE1 - S T R EY2 T\nCASTRATED  K AE1 - S T R EY2 - T IH0 D\nCASTRATES  K AE1 - S T R EY2 T S\nCASTRATING  K AE1 - S T R EY2 - T IH0 NG\nCASTRATION  K AE2 S - T R EY1 - SH AH0 N\nCASTRATIONS  K AE2 S - T R EY1 - SH AH0 N Z\nCASTREJON  K AE1 - S T R IH0 - JH AA0 N\nCASTRILLON  K AH0 S - T R IH1 - L Y AH0 N\nCASTRO  K AE1 - S T R OW0\nCASTRO'S  K AE1 S - T R OW0 Z\nCASTROL  K AE1 - S T R AA0 L\nCASTRONOVA  K AE0 S T - R OW0 - N OW1 - V AH0\nCASTRONOVO  K AE0 S T - R OW0 - N OW1 - V OW0\nCASTRUCCI  K AH0 S - T R UW1 - CH IY0\nCASTRUITA  K AA0 S - T R UW1 - T AH0\nCASTS  K AE1 S T S\nCASUAL  K AE1 - ZH AH0 - W AH0 L\nCASUAL(2)  K AE1 - ZH W AH0 L\nCASUALLY  K AE1 - ZH AH0 W - AH0 - L IY0\nCASUALLY(2)  K AE1 - ZH W AH0 - L IY0\nCASUALNESS  K AE1 - ZH AH0 W - AH0 L - N EH0 S\nCASUALNESS(2)  K AE1 - ZH W AH0 L - N EH0 S\nCASUALS  K AE1 - ZH AH0 - W AH0 L Z\nCASUALTIES  K AE1 - ZH AH0 - W AH0 L - T IY0 Z\nCASUALTIES(2)  K AE1 - ZH W AH0 L - T IY0 Z\nCASUALTIES(3)  K AE1 - ZH AH0 L - T IY0 Z\nCASUALTY  K AE1 - ZH AH0 - W AH0 L - T IY0\nCASUALTY(2)  K AE1 - ZH W AH0 L - T IY0\nCASUALTY(3)  K AE1 - ZH AH0 L - T IY0\nCASWELL  K AE1 Z - W EH2 L\nCAT  K AE1 T\nCAT'S  K AE1 T S\nCAT-2  K AE1 T - T UW1\nCAT-3  K AE1 T - TH R IY1\nCAT-4  K AE1 T - F AO1 R\nCAT-O-NINE-TAILS  K AE1 - T OW1 - N AY1 N - T EY1 L Z\nCATACLYSM  K AE1 - T AH0 - K L IH2 - S AH0 M\nCATACLYSMIC  K AE2 - T AH0 - K L IH1 Z - M IH0 K\nCATACOMB  K AE1 - T AH0 - K OW2 M\nCATACOMBS  K AE1 - T AH0 - K OW2 M Z\nCATACOSINOS  K AH0 - T AE2 - K AH0 - S IY1 - N OW0 S\nCATACOSINOS'S  K AH0 - T AE2 - K AH0 - S IY1 - N AH0 - S IH0 Z\nCATAIN  K AE1 - T IH0 N\nCATAIN(2)  K AH0 - T EY1 N\nCATALAN  K AE1 - T AH0 - L AH0 N\nCATALANO  K AA0 - T AA0 - L AA1 - N OW0\nCATALANOTTO  K AA0 - T AA0 - L AA0 - N OW1 - T OW0\nCATALDI  K AA0 - T AA1 L - D IY0\nCATALDO  K AA0 - T AA1 L - D OW0\nCATALFAMO  K AA0 - T AA0 L - F AA1 - M OW0\nCATALINA  K AE2 - T AH0 - L IY1 - N AH0\nCATALOG  K AE1 - T AH0 - L AO0 G\nCATALOGED  K AE1 - T AH0 - L AO0 G D\nCATALOGER  K AE1 - T AH0 - L AO2 - G ER0\nCATALOGERS  K AE1 - T AH0 - L AO2 - G ER0 Z\nCATALOGING  K AE1 - T AH0 - L AA0 - G IH0 NG\nCATALOGS  K AE1 - T AH0 - L AA0 G Z\nCATALOGS(2)  K AE1 - T AH0 - L AO0 G Z\nCATALOGUE  K AE1 - T AH0 - L AO2 G\nCATALOGUED  K AE1 - T AH0 - L AO2 G D\nCATALOGUES  K AE1 - T AH0 - L AO2 G Z\nCATALOGUING  K AE1 - T AH0 - L AO2 - G IH0 NG\nCATALONIA  K AE2 - T AH0 - L OW1 - N Y AH0\nCATALYST  K AE1 - T AH0 - L AH0 S T\nCATALYST'S  K AE1 - T AH0 - L IH0 S T S\nCATALYST(2)  K AE1 - T AH0 - L IH0 S T\nCATALYSTS  K AE1 - T AH0 - L AH0 S T S\nCATALYSTS(2)  K AE1 - T AH0 - L IH0 S T S\nCATALYSTS(3)  K AE1 - T AH0 - L IH0 S S\nCATALYTIC  K AE2 - T AH0 - L IH1 - T IH0 K\nCATALYZE  K AE1 - T AH0 - L AY2 Z\nCATALYZED  K AE1 - T AH0 - L AY2 Z D\nCATAMARAN  K AE2 - T AH0 - M ER0 - AE1 N\nCATAMARANS  K AH0 - T AE1 - M ER0 - AH0 N Z\nCATAMOUNT  K AE1 - T AH0 - M AW2 N T\nCATANESE  K AA0 - T AA0 - N EY1 - Z IY0\nCATANIA  K AH0 - T EY1 - N Y AH0\nCATANO  K AA0 - T AA1 - N OW0\nCATANZARITE  K AH0 - T AE1 N - Z ER0 - AY2 T\nCATANZARO  K AA0 - T AA0 N - Z AA1 - R OW0\nCATAPANO  K AA0 - T AA0 - P AA1 - N OW0\nCATAPULT  K AE1 - T AH0 - P AH2 L T\nCATAPULTED  K AE1 - T AH0 - P AH2 L - T IH0 D\nCATAPULTING  K AE1 - T AH0 - P AH2 L - T IH0 NG\nCATAPULTS  K AE1 - T AH0 - P AH0 L T S\nCATARACT  K AE1 - T ER0 - AE0 K T S\nCATARACTS  K AE1 - T ER0 - AE2 K T S\nCATASTROPHE  K AH0 - T AE1 S - T R AH0 - F IY0\nCATASTROPHES  K AH0 - T AE1 S - T R AH0 - F IY0 Z\nCATASTROPHIC  K AE2 - T AH0 - S T R AA1 - F IH0 K\nCATATONIC  K AE2 - T AH0 - T AA1 - N IH0 K\nCATAWBA  K AH0 - T AO1 - B AH0\nCATBIRD  K AE1 T - B ER2 D\nCATCALL  K AE1 T - K AO2 L\nCATCALLS  K AE1 T - K AO2 L Z\nCATCH  K AE1 CH\nCATCHACAN  K AE1 - CH AH0 - K AA2 N\nCATCHALL  K AE1 - CH AO2 L\nCATCHER  K AE1 - CH ER0\nCATCHER'S  K AE1 - CH ER0 Z\nCATCHERS  K AE1 - CH ER0 Z\nCATCHES  K AE1 - CH AH0 Z\nCATCHES(2)  K AE1 - CH IH0 Z\nCATCHING  K AE1 - CH IH0 NG\nCATCHINGS  K AE1 - CH IH0 NG Z\nCATCHUP  K AE1 - CH AH0 P\nCATCHWORD  K AE1 CH - W ER2 D\nCATCHY  K AE1 - CH IY0\nCATE  K EY1 T\nCATECHISM  K AE1 - T AH0 - K IH2 - Z AH0 M\nCATEGORICAL  K AE2 - T AH0 - G AA1 - R IH0 - K AH0 L\nCATEGORICAL(2)  K AE2 - T AH0 - G AO1 - R IH0 - K AH0 L\nCATEGORICALLY  K AE2 - T AH0 - G AA1 - R IH0 K - L IY0\nCATEGORICALLY(2)  K AE2 - T AH0 - G AO1 - R IH0 K - L IY0\nCATEGORIES  K AE1 - T AH0 - G AO2 - R IY0 Z\nCATEGORIZATION  K AE2 - T AH0 - G ER0 - IH0 - Z EY1 - SH AH0 N\nCATEGORIZE  K AE1 - T AH0 - G ER0 - AY2 Z\nCATEGORIZED  K AE1 - T AH0 - G ER0 - AY2 Z D\nCATEGORIZES  K AE1 - T AH0 - G ER0 - AY2 - Z IH0 Z\nCATEGORIZING  K AE1 - T AH0 - G ER0 - AY2 - Z IH0 NG\nCATEGORY  K AE1 - T AH0 - G AO2 - R IY0\nCATELLI  K AH0 - T EH1 - L IY0\nCATENA  K AH0 - T IY1 - N AH0\nCATER  K EY1 - T ER0\nCATERED  K EY1 - T ER0 D\nCATERER  K EY1 - T ER0 - ER0\nCATERERS  K EY1 - T ER0 - ER0 Z\nCATERING  K EY1 - T ER0 - IH0 NG\nCATERINO  K AA0 - T ER0 - IY1 - N OW0\nCATERPILLAR  K AE1 - T AH0 - P IH2 - L ER0\nCATERPILLAR'S  K AE1 - T ER0 - P IH2 - L ER0 Z\nCATERPILLAR(2)  K AE1 - T ER0 - P IH2 - L ER0\nCATERPILLARS  K AE1 - T AH0 - P IH2 - L ER0 Z\nCATERPILLER  K AE1 - T AH0 - P IH2 - L ER0\nCATERPILLER'S  K AE1 - T AH0 - P IH2 - L ER0 Z\nCATERPILLER'S(2)  K AE1 - T ER0 - P IH2 - L ER0 Z\nCATERPILLER(2)  K AE1 - T ER0 - P IH2 - L ER0\nCATERS  K EY1 - T ER0 Z\nCATES  K EY1 T S\nCATFISH  K AE1 T - F IH2 SH\nCATHARINE  K AE1 TH - R IH0 N\nCATHARINES  K AE1 TH - R IH0 N Z\nCATHARINES(2)  K AE1 - TH ER0 - IH0 N Z\nCATHARSIS  K AH0 - TH AA1 R - S AH0 S\nCATHARTIC  K AH0 - TH AA1 R - T IH0 K\nCATHAY  K AE0 - TH EY1\nCATHCART  K AE1 TH - K AA0 R T\nCATHEDRAL  K AH0 - TH IY1 - D R AH0 L\nCATHEDRALS  K AH0 - TH IY1 - D R AH0 L Z\nCATHELL  K AE1 - TH AH0 L\nCATHER  K AE1 - DH ER0\nCATHER'S  K AE1 - DH ER0 Z\nCATHERINA  K AA0 - TH ER0 - IY1 - N AH0\nCATHERINE  K AE1 - TH ER0 - AH0 N\nCATHERINE'S  K AE1 TH - R IH0 N Z\nCATHERINE(2)  K AE1 - TH ER0 - IH0 N\nCATHERINE(3)  K AE1 TH - R IH0 N\nCATHERINES  K AE1 TH - R IH0 N Z\nCATHERMAN  K AE1 - DH ER0 - M AH0 N\nCATHERS  K AE1 - DH ER0 Z\nCATHERWOOD  K AE1 - DH ER0 - W UH2 D\nCATHETER  K AE1 - TH AH0 - T ER0\nCATHETERS  K AE1 - TH AH0 - T ER0 Z\nCATHEY  K AE1 - DH IY0\nCATHIE  K AE1 - TH IY0\nCATHLEEN  K AE2 TH - L IY1 N\nCATHMOR  K AE1 - TH AH0 - M ER0\nCATHODE  K AE1 - TH OW2 D\nCATHODES  K AE1 - TH OW2 D Z\nCATHOLIC  K AE1 TH - L IH0 K\nCATHOLICISM  K AH0 - TH AO1 - L AH0 - S IH2 - Z AH0 M\nCATHOLICS  K AE1 TH - L IH0 K S\nCATHY  K AE1 - TH IY0\nCATHY'S  K AE1 - TH IY0 Z\nCATIJA  K AH0 - T IY1 - JH AH0\nCATINO  K AA0 - T IY1 - N OW0\nCATKINS  K AE1 T - K AH0 N Z\nCATLEDGE  K AE1 T - L IH0 JH\nCATLETT  K AE1 T - L IH0 T\nCATLIKE  K AE1 T - L AY2 K\nCATLIN  K AE1 T - L IH0 N\nCATNAP  K AE1 T - N AE2 P\nCATNIP  K AE1 T - N IH0 P\nCATO  K EY1 - T OW0\nCATOE  K AE1 - T OW0\nCATOLICA  K AH0 - T OW1 - L IH0 - K AH0\nCATON  K AE1 - T AH0 N\nCATONE  K AH0 - T OW1 N\nCATRAMBONE  K AE1 - T R AE2 M - B OW2 N\nCATRETT  K AE1 - T R IH0 T\nCATRON  K AE1 - T R AH0 N\nCATS  K AE1 T S\nCATSKILL  K AE1 T - S K IH2 L\nCATSKILLS  K AE1 T - S K IH2 L Z\nCATSUP  K EH1 - CH AH0 P\nCATT  K AE1 T\nCATTANACH  K AE1 - T AH0 - N AE0 CH\nCATTANEO  K AA0 - T AA1 - N IY0 - OW0\nCATTANI  K AA0 - T AA1 - N IY0\nCATTELL  K AH0 - T EH1 L\nCATTERALL  K AE1 - T ER0 - AO2 L\nCATTERSON  K AE1 - T ER0 - S AH0 N\nCATTERTON  K AE1 - T ER0 - T AH0 N\nCATTLE  K AE1 - T AH0 L\nCATTLEMEN  K AE1 - T AH0 L - M AH0 N\nCATTLEMEN'S  K AE1 - T AH0 L - M AH0 N Z\nCATTLEMEN(2)  K AE1 - T AH0 L - M IH0 N\nCATTO  K AE1 - T OW0\nCATTOLICA  K AH0 - T OW1 - L IH0 - K AH0\nCATTON  K AE1 - T AH0 N\nCATTY  K AE1 - T IY0\nCATWALK  K AE1 T - W AA2 K\nCATWALK(2)  K AE1 T - W AO2 K\nCATWOMAN  K AE1 T - W UH2 - M AH0 N\nCAUBLE  K AO1 - B AH0 L\nCAUCASIAN  K AO0 - K EY1 - ZH AH0 N\nCAUCASIANS  K AO0 - K EY1 - ZH AH0 N Z\nCAUCASUS  K AO1 - K AH0 - S AH0 S\nCAUCUS  K AO1 - K AH0 S\nCAUCUS'S  K AO1 - K AH0 - S IH0 Z\nCAUCUS(2)  K AA1 - K AH0 S\nCAUCUSES  K AO1 - K AH0 - S IH0 Z\nCAUDAL  K AA1 - D AH0 L\nCAUDAL(2)  K AO1 - D AH0 L\nCAUDELL  K OW0 - D EH1 L\nCAUDILL  K AO1 - D AH0 L\nCAUDILLO  K AO2 - D IH1 - L OW0\nCAUDLE  K AO1 - D AH0 L\nCAUFFMAN  K AO1 F - M AH0 N\nCAUFIELD  K OW1 - F IY0 L D\nCAUGHEY  K AO1 - IY0\nCAUGHLIN  K AO1 - L IH0 N\nCAUGHMAN  K AO1 - M AH0 N\nCAUGHRON  K AO1 - R AH0 N\nCAUGHT  K AA1 T\nCAUGHT(2)  K AO1 T\nCAUL  K AA1 L\nCAUL(2)  K AO1 L\nCAULDER  K AO1 L - D ER0\nCAULDRON  K AA1 L - D R AH0 N\nCAULDRON(2)  K AO1 L - D R AH0 N\nCAULEY  K AO1 - L IY0\nCAULFIELD  K AO1 L - F IY2 L D\nCAULIFLOWER  K AA1 - L AH0 - F L AW2 - ER0\nCAULK  K AA1 K\nCAULK(2)  K AO1 K\nCAULKING  K AO1 - K IH0 NG\nCAULKINS  K AO1 L - K IH0 N Z\nCAUSAL  K AO1 - Z AH0 L\nCAUSALITIES  K AO2 - Z AE1 - L IH0 - T IY0 Z\nCAUSALITY  K AO2 - Z AA1 - L IH0 - T IY0\nCAUSATION  K AO2 - Z EY1 - SH AH0 N\nCAUSATIVE  K AA1 - Z AH0 - T IH0 V\nCAUSATIVE(2)  K AO1 - Z AH0 - T IH0 V\nCAUSBY  K AO1 Z - B IY0\nCAUSE  K AA1 Z\nCAUSE(2)  K AO1 Z\nCAUSED  K AA1 Z D\nCAUSED(2)  K AO1 Z D\nCAUSER  K AO1 - Z ER0\nCAUSES  K AA1 - Z AH0 Z\nCAUSES(2)  K AO1 - Z IH0 Z\nCAUSEWAY  K AA1 Z - W EY2\nCAUSEWAY(2)  K AO1 Z - W EY2\nCAUSEWAYS  K AO1 Z - W EY2 Z\nCAUSEY  K AO1 - Z IY0\nCAUSING  K AA1 - Z IH0 NG\nCAUSING(2)  K AO1 - Z IH0 NG\nCAUSTIC  K AA1 - S T IH0 K\nCAUSTIC(2)  K AO1 - S T IH0 K\nCAUTHEN  K AO1 - TH AH0 N\nCAUTHON  K AO1 - TH AH0 N\nCAUTHORN  K AO1 - TH ER0 N\nCAUTION  K AA1 - SH AH0 N\nCAUTION(2)  K AO1 - SH AH0 N\nCAUTIONARY  K AO1 - SH AH0 N - EH2 - R IY0\nCAUTIONED  K AA1 - SH AH0 N D\nCAUTIONED(2)  K AO1 - SH AH0 N D\nCAUTIONING  K AO1 - SH AH0 N - IH0 NG\nCAUTIONS  K AO1 - SH AH0 N Z\nCAUTIOUS  K AO1 - SH AH0 S\nCAUTIOUSLY  K AO1 - SH AH0 S - L IY0\nCAUTIOUSNESS  K AO1 - SH AH0 S - N AH0 S\nCAVA  K AA1 - V AH0\nCAVACO  K AE1 - V AH0 - K OW0\nCAVACO(2)  K AH0 - V AA1 - K OW0\nCAVAGNARO  K AA0 - V AA0 G - N AA1 - R OW0\nCAVALCADE  K AE1 - V AH0 L - K EY2 D\nCAVALIER  K AE2 - V AH0 - L IH1 R\nCAVALIERE  K AA0 - V AA0 - L IH1 - R IY0\nCAVALIERI  K AA0 - V AA0 - L IH1 - R IY0\nCAVALIERLY  K AE2 - V AH0 - L IH1 R - L IY0\nCAVALIERS  K AE2 - V AH0 - L IH1 R Z\nCAVALLARO  K AA0 - V AA0 - L AA1 - R OW0\nCAVALLERO  K AA0 - V AA0 - L EH1 - R OW0\nCAVALLI  K AH0 - V AE1 - L IY0\nCAVALLI-SFOR  K AH0 - V AE2 - L IY0 S - F AO1 R\nCAVALLO  K AH0 - V AE1 - L OW0\nCAVALRY  K AE1 - V AH0 L - R IY0\nCAVAN  K EY1 - V AH0 N\nCAVANAGH  K AE1 - V AH0 - N AE0 G\nCAVANAGH(2)  K AE1 - V AH0 - N AA0\nCAVANAH  K AE1 - V AH0 - N AH0\nCAVANAUGH  K AE1 - V AH0 - N AO0\nCAVANESS  K AA1 - V AH0 - N IH0 S\nCAVATAIO  K AA0 - V AA0 - T AA1 - IY0 - OW0\nCAVAZOS  K AA0 - V AA1 - Z OW0 Z\nCAVAZOS(2)  K AE1 - V AH0 - Z OW2 S\nCAVE  K EY1 V\nCAVE'S  K EY1 V Z\nCAVEAT  K EY1 - V IY0 - AE2 T\nCAVEATS  K EY1 - V IY0 - AE2 T S\nCAVED  K EY1 V D\nCAVELL  K AH0 - V EH1 L\nCAVEMAN  K EY1 V - M AE2 N\nCAVEN  K EY1 - V AH0 N\nCAVENAUGH  K AE1 - V IH0 - N AO0\nCAVENDER  K AH0 - V EH1 N - D ER0\nCAVENDISH  K AE1 - V AH0 N - D IH0 SH\nCAVER  K EY1 - V ER0\nCAVERLY  K EY1 - V ER0 - L IY0\nCAVERN  K AE1 - V ER0 N\nCAVERNOUS  K AE1 - V ER0 - N AH0 S\nCAVERNS  K AE1 - V ER0 N Z\nCAVERS  K EY1 - V ER0 Z\nCAVES  K EY1 V Z\nCAVETT  K AE1 - V IH0 T\nCAVEY  K EY1 - V IY0\nCAVIAR  K AE1 - V IY0 - AA2 R\nCAVIN  K AE1 - V IH0 N\nCAVINESS  K EY1 - V IY0 - N IH0 S\nCAVING  K EY1 - V IH0 NG\nCAVINS  K AE1 - V IH0 N Z\nCAVITIES  K AE1 - V IH0 - T IY0 Z\nCAVITT  K AE1 - V IH0 T\nCAVITY  K AE1 - V AH0 - T IY0\nCAVNESS  K AE1 V - N IH0 S\nCAVORT  K AH0 - V AO1 R T\nCAVORTING  K AH0 - V AO1 R - T IH0 NG\nCAW  K AO1\nCAWLEY  K AO1 - L IY0\nCAWOOD  K AA1 - W UH0 D\nCAWSL  K AO1 - S AH0 L\nCAWTHON  K AO1 - TH AH0 N\nCAWTHORN  K AO1 - TH ER0 N\nCAWTHORNE  K AO1 - TH ER0 N\nCAXTON  K AE1 K - S T AH0 N\nCAY  K EY1\nCAYA  K EY1 - AH0\nCAYCE  K EY1 S\nCAYENNE  K AY2 - EH1 N\nCAYENNE(2)  K EY2 - EH1 N\nCAYER  K EY1 - ER0\nCAYES  K EY1 Z\nCAYLIN  K EY1 - L IH0 N\nCAYLOR  K EY1 - L ER0\nCAYMAN  K EY1 - M AH0 N\nCAYMANS  K EY1 - M AH0 N Z\nCAYNE  K EY1 N\nCAYSON  K EY1 - S AH0 N\nCAYTON  K EY1 - T AH0 N\nCAYUSES  K AY1 - UW2 - S AH0 Z\nCAYWOOD  K EY1 - W UH2 D\nCAZARES  K AA0 - Z AA1 - R EH0 S\nCAZENOVE  K AE1 - Z AH0 - N OW2 V\nCAZIER  K EY1 - Z IY0 - ER0\nCC  S IY1 - S IY1\nCCS  S IY1 - S IY1 - EH1 S\nCCS(2)  S IY1 - S IY1 Z\nCD  S IY1 - D IY1\nCDEBACA  S IY0 - D IH0 - B AA1 - K AH0\nCDROM  S IY1 - D IY1 - R AA1 M\nCDROMS  S IY1 - D IY1 - R AA1 M Z\nCDS  S IY1 - D IY1 Z\nCEA  S IY1 - IY1 - EY1\nCEA(2)  S IY1 - AH0\nCEARA  S IY1 - R AH0\nCEARLEY  S ER1 - L IY0\nCEASAR  S AH0 - S AA1 R\nCEASE  S IY1 S\nCEASE-FIRE  S IY1 S - F AY1 - ER0\nCEASED  S IY1 S T\nCEASEFIRE  S IY1 S - F AY1 - ER0\nCEASEFIRES  S IY1 S - F AY1 - ER0 Z\nCEASELESS  S IY1 S - L IH0 S\nCEASELESSLY  S IY1 Z - L AH0 S - L IY0\nCEASER  S IY1 - S ER0\nCEASES  S IY1 - S IH0 Z\nCEASING  S IY1 - S IH0 NG\nCEAUCESCU  CH AW0 - CH EH1 - S K Y UW0\nCEAUSESCU  CH AW0 - CH EH1 - S K Y UW0\nCEAUSESCU'S  CH AW0 - CH EH1 - S K Y UW0 Z\nCEBALLOS  S EY0 - B AA1 - L OW0 Z\nCEBU  S IY0 - B UW1\nCEBU'S  S IY0 - B UW1 Z\nCEBULA  CH EH0 - B UW1 - L AH0\nCEBULSKI  CH IH0 - B AH1 L - S K IY0\nCECALA  CH EH0 - K AA1 - L AH0\nCECCARELLI  CH EH0 - K ER0 - EH1 - L IY0\nCECCHI  S EH1 - K IY0\nCECCHINI  CH EH0 - K IY1 - N IY0\nCECCONI  CH EH0 - K OW1 - N IY0\nCECE  S IY1 S\nCECELIA  S IH0 - S IY1 - L Y AH0\nCECERE  CH EH0 - CH EH1 - R IY0\nCECH  S EH1 K\nCECI  S EH1 - S IY0\nCECIL  S IY1 - S AH0 L\nCECIL'S  S IY1 - S AH0 L Z\nCECILE  S IH0 - S IY1 L\nCECILIA  S IH0 - S IY1 - L Y AH0\nCECIN  S EH1 - S IH0 N\nCECO  S IY1 - K OW0\nCECOLA  S EH0 - K OW1 - L AH0\nCECOS  S IY1 - K OW0 S\nCEDAR  S IY1 - D ER0\nCEDARS  S IY1 - D ER0 Z\nCEDE  S IY1 D\nCEDED  S IY1 - D AH0 D\nCEDED(2)  S IY1 - D IH0 D\nCEDENO  CH EH0 - D EH1 - N OW0\nCEDER  S IY1 - D ER0\nCEDERBERG  S IY1 - D ER0 - B ER0 G\nCEDERGREN  S IY1 - D ER0 - G R EH0 N\nCEDERHOLM  S IY1 - D ER0 - HH OW0 M\nCEDERQUIST  S EH1 - D ER0 - K W IH0 S T\nCEDERQUIST(2)  S IY1 - D ER0 - K W IH0 S T\nCEDES  S IY1 D Z\nCEDILLO  CH EH0 - D IH1 - L OW0\nCEDING  S IY1 - D IH0 NG\nCEDRAS  S EY1 - D R AA2 S\nCEDRAS'  S EY1 - D R AA2 S\nCEDRAS'(2)  S EY1 - D R AH0 S\nCEDRAS'S  S EY1 - D R AA2 - S IH0 S\nCEDRAS'S(2)  S EY1 - D R AH0 - S IH0 S\nCEDRAS(2)  S EY1 - D R AH0 S\nCEDRIC  S EH1 D - R IH0 K\nCEDRIC(2)  S IY1 - D R IH0 K\nCEDRONE  S EY0 - D R OW1 - N EY0\nCEES  S IY1 Z\nCEFALO  CH EH0 - F AA1 - L OW0\nCEFALU  CH EH0 - F AA1 - L UW0\nCEGIELSKI  CH IH0 - G IY1 L S - K IY0\nCEILING  S IY1 - L IH0 NG\nCEILINGS  S IY1 - L IH0 NG Z\nCEJA  S EY1 - Y AH0\nCEJKA  CH EY1 - K AH0\nCEL  S EH1 L\nCEL(2)  S IY1 - IY1 - EH1 L\nCELA  S EH1 - L AH0\nCELADON  S EH1 - L AH0 - D AA2 N\nCELANDINE  S EH1 - L AH0 N - D AY2 N\nCELANESE  S EH1 - L AH0 - N IY2 Z\nCELANI  CH EH0 - L AA1 - N IY0\nCELANO  CH EH0 - L AA1 - N OW0\nCELAYA  S EY0 - L EY1 - AH0\nCELE  S IY1 L\nCELEBRANT  S EH1 - L AH0 - B R AH0 N T\nCELEBRANTS  S EH1 - L AH0 - B R AH0 N T S\nCELEBRATE  S EH1 - L AH0 - B R EY2 T\nCELEBRATED  S EH1 - L AH0 - B R EY2 - T AH0 D\nCELEBRATED(2)  S EH1 - L AH0 - B R EY2 - T IH0 D\nCELEBRATES  S EH1 - L AH0 - B R EY2 T S\nCELEBRATING  S EH1 - L AH0 - B R EY2 - T IH0 NG\nCELEBRATION  S EH2 - L AH0 - B R EY1 - SH AH0 N\nCELEBRATIONS  S EH2 - L AH0 - B R EY1 - SH AH0 N Z\nCELEBRATORY  S AH0 - L EH1 - B R AH0 - T AO2 - R IY0\nCELEBRE  S EH1 - L AH0 - B R AH0\nCELEBRITIES  S AH0 - L EH1 - B R IH0 - T IY0 Z\nCELEBRITY  S AH0 - L EH1 - B R IH0 - T IY0\nCELENA  CH EH0 - L EH1 - N AH0\nCELENE  CH EH1 - L IY0 N\nCELENTANO  CH EH0 - L EH0 N - T AA1 - N OW0\nCELERON  S EH1 - L ER0 - AA0 N\nCELERY  S EH1 - L ER0 - IY0\nCELESTA  S IH0 - L EH1 - S T AH0\nCELESTE  S AH0 - L EH1 S T\nCELESTIAL  S AH0 - L EH1 - S CH AH0 L\nCELESTIN  S EH1 - L IH0 - S T IH0 N\nCELESTINA  CH EH0 - L EH0 - S T IY1 - N AH0\nCELESTINE  CH EH0 - L EH0 - S T IY1 - N IY0\nCELESTINO  CH EH0 - L EH0 - S T IY1 - N OW0\nCELIA  S IY1 - L Y AH0\nCELIBACY  S EH1 - L AH0 - B AH0 - S IY0\nCELIBATE  S EH1 - L IH0 - B AH0 T\nCELICA  S EH1 - L IH0 - K AH0\nCELIE  S EH1 - L IY0\nCELIMENE  S EH1 - L IH0 - M IY2 N\nCELINA  S AH0 - L IY1 - N AH0\nCELINDA  CH EH0 - L IY1 N - D AH0\nCELINE  S AH0 - L IY1 N\nCELIO  S IY1 - L IY0 - OW0\nCELIS  S EH1 - L IH0 S\nCELL  S EH1 L\nCELL'S  S EH1 L Z\nCELLA  S EH1 - L AH0\nCELLAR  S EH1 - L ER0\nCELLARS  S EH1 - L ER0 Z\nCELLED  S EH1 L D\nCELLI  CH EH1 - L IY0\nCELLINI  CH EH0 - L IY1 - N IY0\nCELLIO  CH EH1 - L IY0 - OW0\nCELLIST  CH EH1 - L AH0 S T\nCELLMARK  S EH1 L - M AA2 R K\nCELLMARK'S  S EH1 L - M AA2 R K S\nCELLNET  S EH1 L - N EH2 T\nCELLO  CH EH1 - L OW0\nCELLOPHANE  S EH1 - L AH0 - F EY2 N\nCELLPHONE  S EH1 L - F OW0 N\nCELLPRO  S EH1 L - P R OW0\nCELLS  S EH1 L Z\nCELLS'  S EH1 L Z\nCELLSTAR  S EH1 L - S T AA2 R\nCELLUCCI  CH EH0 - L UW1 - CH IY0\nCELLULAR  S EH1 L - Y AH0 - L ER0\nCELLULAR'S  S EH1 L - Y AH0 - L ER0 Z\nCELLULOID  S EH1 L - AH0 - L OY2 D\nCELLULOSA  S EH2 - L UW0 - L OW1 - S AH0\nCELLULOSE  S EH1 L - Y AH0 - L OW2 S\nCELMER  S EH1 L - M ER0\nCELNIK  S EH1 L - N IH0 K\nCELO  S EH1 - L OW0\nCELO(2)  S IY1 - L OW0\nCELO(3)  S IY1 - IY1 - EH1 - L OW1\nCELONA  CH EH0 - L OW1 - N AH0\nCELOSIA  CH EH0 - L OW1 - S IY0 - AH0\nCELS  S EH1 L Z\nCELSIUS  S EH1 L - S IY0 - AH0 S\nCELSO  S EH1 L - S OW0\nCELT  S EH1 L T\nCELT(2)  K EH1 L T\nCELTIC  S EH1 L - T IH0 K\nCELTIC(2)  K EH1 L - T IH0 K\nCELTICS  S EH1 L - T IH0 K S\nCELTICS'  S EH1 L - T IH2 K S\nCELTS  S EH1 L T S\nCELTS(2)  K EH1 L T S\nCEMENT  S AH0 - M EH1 N T\nCEMENT(2)  S IH0 - M EH1 N T\nCEMENTED  S AH0 - M EH1 N - T AH0 D\nCEMENTED(2)  S IH0 - M EH1 N - T IH0 D\nCEMENTING  S IH0 - M EH1 N - T IH0 NG\nCEMENTOS  S EH0 - M EH1 N - T OW0 S\nCEMETERIES  S EH1 - M AH0 - T EH2 - R IY0 Z\nCEMETERY  S EH1 - M AH0 - T EH2 - R IY0\nCEMETERY(2)  S EH1 - M IH0 - T EH2 - R IY0\nCEMEX  K EH1 - M EH2 K S\nCEMP  S EH1 M P\nCENCALL  S EH1 N - S EH2 L\nCENCI  CH EH1 N - CH IY0\nCENCOR  S EH1 N - K AO2 R\nCENDEJAS  S EY0 N - D EY1 - Y AA0 Z\nCENERGY  S EH1 - N ER0 - JH IY0\nCENICEROS  S EY0 - N IY0 - S EH1 - R OW0 Z\nCENITH  S EH1 - N IH0 TH\nCENITH'S  S EH1 - N IH0 TH S\nCENOZOIC  S IY2 - N AH0 - Z OW1 - IH0 K\nCENSER  S EH1 N - S ER0\nCENSOR  S EH1 N - S ER0\nCENSORED  S EH1 N - S ER0 D\nCENSORING  S EH1 N - S ER0 - IH0 NG\nCENSORS  S EH1 N - S ER0 Z\nCENSORSHIP  S EH1 N - S ER0 - SH IH2 P\nCENSURE  S EH1 N - SH ER0\nCENSURED  S EH1 N - SH ER0 D\nCENSUS  S EH1 N - S AH0 S\nCENSUSES  S EH1 N - S AH0 - S IH0 Z\nCENT  S EH1 N T\nCENTANNI  CH EH0 N - T AA1 - N IY0\nCENTANNI(2)  S EH0 N - T AA1 - N IY0\nCENTAUR  S EH1 N - T AO2 R\nCENTAUR'S  S EH1 N - T AO2 R Z\nCENTAURS  S EH1 N - T AO2 R Z\nCENTAVOS  S EH0 N - T AA1 - V OW2 S\nCENTEL  S EH1 N - T EH2 L\nCENTEL'S  S EH1 N - T EH2 L Z\nCENTENARIAN  S EH2 N - T AH0 - N EH1 - R IY0 - AH0 N\nCENTENARIANS  S EH2 N - T AH0 - N EH1 - R IY0 - AH0 N Z\nCENTENARY  S EH1 N - T AH0 - N EH2 - R IY0\nCENTENNIAL  S EH0 N - T EH1 - N IY0 - AH0 L\nCENTENNIAL'S  S EH0 N - T EH1 - N IY0 - AH0 L Z\nCENTENO  CH EH0 N - T EH1 - N OW0\nCENTENO(2)  S EH0 N - T EH1 - N OW0\nCENTER  S EH1 N - T ER0\nCENTER'S  S EH1 N - T ER0 Z\nCENTER'S(2)  S EH1 - N ER0 Z\nCENTER(2)  S EH1 - N ER0\nCENTERBANC  S EH1 N - T ER0 - B AE0 NG K\nCENTERBANK  S EH1 N - T ER0 - B AE2 NG K\nCENTERED  S EH1 N - T ER0 D\nCENTERFIELDER  S EH1 N - T ER0 - F IY2 L - D ER0\nCENTERFOLD  S EH1 N - T ER0 - F OW2 L D\nCENTERING  S EH1 N - T ER0 - IH0 NG\nCENTERIOR  S EH2 N - T IH1 - R IY0 - ER0\nCENTERPIECE  S EH1 N - T ER0 - P IY2 S\nCENTERRE  S EH1 N - T ER0\nCENTERRE'S  S EH1 N - T ER0 Z\nCENTERS  S EH1 N - T ER0 Z\nCENTERS'  S EH1 N - T ER0 Z\nCENTERS'(2)  S EH1 - N ER0 Z\nCENTERS(2)  S EH1 - N ER0 Z\nCENTERVILLE  S EH1 N - T ER0 - V IH0 L\nCENTEX  S EH1 N - T EH2 K S\nCENTIGRADE  S EH1 N - T AH0 - G R EY2 D\nCENTIGRAM  S EH1 N - T AH0 - G R AE2 M\nCENTIME  S EH1 N - T AY2 M\nCENTIMES  S EH1 N - T AY2 M Z\nCENTIMETER  S EH1 N - T AH0 - M IY2 - T ER0\nCENTIMETERS  S EH1 N - T AH0 - M IY2 - T ER0 Z\nCENTIPEDE  S EH1 N - T IH0 - P IY2 D\nCENTNER  S EH1 N T - N ER0\nCENTOCOR  S EH1 N - T AH0 - K AO2 R\nCENTOCOR'S  S EH1 N - T AH0 - K AO2 R Z\nCENTOFANTI  CH EH0 N - T OW0 - F AA1 N - T IY0\nCENTOLA  CH EH0 N - T OW1 - L AH0\nCENTOXIN  S EH2 N - T AA1 K - S IH0 N\nCENTRAL  S EH1 N - T R AH0 L\nCENTRAL'S  S EH1 N - T R AH0 L Z\nCENTRALE  S EH0 N - T R AA1 L\nCENTRALIA  S EH0 N - T R EY1 - L IY0 - AH0\nCENTRALISM  S EH1 N - T R AH0 - L IH2 - Z AH0 M\nCENTRALISTS  S EH1 N - T R AH0 - L IH0 S T S\nCENTRALISTS(2)  S EH1 N - T R AH0 - L IH0 S S\nCENTRALISTS(3)  S EH1 N - T R AH0 - L IH0 S\nCENTRALITY  S EH0 N - T AE1 - L IH0 - T IY0\nCENTRALIZATION  S EH2 N - T R AH0 - L IH0 - Z EY1 - SH AH0 N\nCENTRALIZE  S EH1 N - T R AH0 - L AY2 Z\nCENTRALIZED  S EH1 N - T R AH0 - L AY2 Z D\nCENTRALIZING  S EH1 N - T R AH0 - L AY2 - Z IH0 NG\nCENTRALLY  S EH1 N - T R AH0 - L IY0\nCENTRAM  S EH1 N - T R AE2 M\nCENTRE  S EH1 N - T ER0\nCENTRELLA  S EH2 N - T R EH1 - L AH0\nCENTRES  S EH1 N - T ER0 Z\nCENTREX  S EH1 N - T R AH0 K S\nCENTRIFUGAL  S EH0 N - T R IH1 - F Y IH0 - G AH0 L\nCENTRIFUGE  S EH1 N - T R AH0 - F Y UW2 JH\nCENTRIFUGES  S EH1 N - T R AH0 - F Y UW2 - JH IH0 Z\nCENTRIST  S EH1 N - T R IH0 S T\nCENTRISTS  S EH1 N - T R IH0 S T S\nCENTRISTS(2)  S EH1 N - T R IH0 S S\nCENTRISTS(3)  S EH1 N - T R IH0 S\nCENTRO  S EH1 N - T R OW0\nCENTROMIN  S EH1 N - T R AH0 - M IH0 N\nCENTRONICS  S EH2 N - T R AA1 - N IH0 K S\nCENTRUST  S EH1 N - T R AH2 S T\nCENTRUST'S  S EH1 N - T R AH2 S T S\nCENTS  S EH1 N T S\nCENTS(2)  S EH1 N S\nCENTUM  K EH1 N - T AH0 M\nCENTURI  S EH0 N - T UH1 - R IY0\nCENTURIES  S EH1 N - CH ER0 - IY0 Z\nCENTURION  S EH0 N - T UH1 - R IY0 - AH0 N\nCENTURY  S EH1 N - CH ER0 - IY0\nCENTURY'S  S EH1 N - CH ER0 - IY0 Z\nCENVILL  S EH1 N - V IH0 L\nCEP  S EH1 P\nCEPEDA  S EY0 - P EY1 - D AH0\nCEPERO  S EY0 - P EH1 - R OW0\nCEPHALON  S EH1 - F AH0 - L AA2 N\nCEPHALOPOD  S EH1 - F AH0 - L AH0 - P AA2 D\nCEPHALOSPORIN  S EH2 - F AH0 - L AO1 - S P ER0 - IH0 N\nCEPHAS  S EH1 - F AH0 Z\nCEPHUS  S EH1 - F AH0 S\nCERA  S EH1 - R AH0\nCERACEOUS  S ER0 - EY1 - SH AH0 S\nCERADYNE  S EH1 - R AH0 - D AY2 N\nCERAMI  CH ER0 - AA1 - M IY0\nCERAMIC  S ER0 - AE1 - M IH0 K\nCERAMICS  S ER0 - AE1 - M IH0 K S\nCERANKOSKY  S EH2 - R AH0 NG - K AO1 S - K IY0\nCERASOLI  CH ER0 - AA0 - S OW1 - L IY0\nCERAVOLO  CH ER0 - AA0 - V OW1 - L OW0\nCERBONE  CH ER1 - B OW0 N\nCERCONE  CH ER0 - K OW1 - N IY0\nCERDA  CH EH1 R - D AH0\nCEREAL  S IH1 - R IY0 - AH0 L\nCEREALS  S IH1 - R IY0 - AH0 L Z\nCEREBRAL  S EH1 - R AH0 - B R AH0 L\nCEREBRAL(2)  S ER0 - IY1 - B R AH0 L\nCEREBRALLY  S ER0 - IY1 - B R AH0 - L IY0\nCEREDASE  S EH1 - R AH0 - D EY2 Z\nCEREGHINO  CH ER0 - EH0 - G IY1 - N OW0\nCERELIA  CH ER0 - EH1 - L IY0 - AH0\nCEREMONIAL  S EH2 - R AH0 - M OW1 - N IY0 - AH0 L\nCEREMONIES  S EH1 - R AH0 - M OW2 - N IY0 Z\nCEREMONY  S EH1 - R AH0 - M OW2 - N IY0\nCERENO  S ER0 - EY1 - N OW0\nCERES  S IH1 - R IY0 Z\nCEREZO  S EH2 - R EY1 - Z OW0\nCEREZO(2)  S ER0 - EY1 - Z OW0\nCERF  S ER1 F\nCERIDIAN  S ER0 - IH1 - D IY0 - AH0 N\nCERINO  CH ER0 - IY1 - N OW0\nCERIO  CH EH1 - R IY0 - OW0\nCERISE  S ER0 - IY1 S\nCERMAK  CH ER1 - M AH0 K\nCERN  S ER1 N\nCERNA  CH EH1 R - N AH0\nCERNEY  S ER1 - N IY0\nCERNIGLIA  CH ER0 - N IY1 - G L IY0 - AH0\nCERNUDA  S ER0 - N UW1 - D AH0\nCERNUDA'S  S ER0 - N UW1 - D AH0 Z\nCERNY  S ER1 - N IY0\nCERONE  CH ER0 - OW1 - N IY0\nCERRA  S EH1 - R AH0\nCERRATO  CH ER0 - AA1 - T OW0\nCERRETA  CH ER0 - EH1 - T AH0\nCERRITO  CH ER0 - IY1 - T OW0\nCERRITOS  S EH0 - R IY1 - T OW0 S\nCERRO  S EH1 - R OW0\nCERRONE  CH ER0 - OW1 - N IY0\nCERRUTI  CH ER0 - UW1 - T IY0\nCERRUTI(2)  S ER0 - UW1 - T IY0\nCERSKA  K ER1 - S K AH0\nCERSKA(2)  S ER1 - S K AH0\nCERTAIN  S ER1 - T AH0 N\nCERTAINLY  S ER1 - T AH0 N - L IY0\nCERTAINTEED  S ER1 - T AH0 N - T IY2 D\nCERTAINTIES  S ER1 - T AH0 N - T IY0 Z\nCERTAINTY  S ER1 - T AH0 N - T IY0\nCERTIFICATE  S ER0 - T IH1 - F IH0 - K AH0 T\nCERTIFICATES  S ER0 - T IH1 - F IH0 - K AH0 T S\nCERTIFICATION  S ER2 - T AH0 - F AH0 - K EY1 - SH AH0 N\nCERTIFICATIONS  S ER2 - T AH0 - F AH0 - K EY1 - SH AH0 N Z\nCERTIFIED  S ER1 - T AH0 - F AY2 D\nCERTIFIED'S  S ER1 - T AH0 - F AY2 D Z\nCERTIFIES  S ER1 - T AH0 - F AY2 Z\nCERTIFY  S ER1 - T AH0 - F AY2\nCERTIFYING  S ER1 - T AH0 - F AY2 - IH0 NG\nCERTITUDE  S ER1 - T AH0 - T UW2 D\nCERTO  CH EH1 R - T OW0\nCERTRON  S ER1 - T R AA0 N\nCERULLI  CH ER0 - UW1 - L IY0\nCERULLO  CH ER0 - UW1 - L OW0\nCERUS  S EH1 - R AH0 S\nCERUTTI  CH ER0 - UW1 - T IY0\nCERVANTEZ  S EH0 R - V AA1 N - T EH0 Z\nCERVECERIA  S ER2 - V AH0 - S IH1 - R IY0 - AH0\nCERVENKA  S EH0 R - V EY1 NG - K AH0\nCERVENY  CH ER0 - V IY1 - N IY0\nCERVERA  CH ER0 - V EH1 - R AH0\nCERVESATO  S EH2 R - V EH0 - S AA1 - T OW2\nCERVEZA  S ER2 - V EY1 - Z AH0\nCERVEZA(2)  S EH2 R - V EY1 - Z AH0\nCERVI  CH EH1 R - V IY0\nCERVICAL  S ER1 - V AH0 - K AH0 L\nCERVICAL(2)  S ER1 - V IH0 - K AH0 L\nCERVINI  CH ER0 - V IY1 - N IY0\nCERVIX  S ER1 - V IH0 K S\nCERVONE  CH ER0 - V OW1 - N IY0\nCERYL  S EH1 - R AH0 L\nCESAR  S IY1 - Z ER0\nCESARE  CH EY0 - Z AA1 - R EY0\nCESARIO  CH EH0 - S AA1 - R IY0 - OW0\nCESARO  CH EH0 - S AA1 - R OW0\nCESARZ  S EY1 - S AA0 R Z\nCESENA  CH EH0 - S EH1 - N AH0\nCESIUM  S IY1 - Z IY0 - AH0 M\nCESPEDES  S EY0 S - P EY1 - D EH0 S\nCESSATION  S EH2 - S EY1 - SH AH0 N\nCESSNA  S EH1 S - N AH0\nCESSNA'S  S EH1 S - N AH0 Z\nCESSNA'S(2)  S EH1 Z - N AH0 Z\nCESSNA(2)  S EH1 Z - N AH0\nCESSPOOL  S EH1 S - P UW2 L\nCESTARO  CH EH0 - S T AA1 - R OW0\nCETA  S EH1 - T AH0\nCETA(2)  S IY1 - IY1 - T IY1 - EY1\nCETACEAN  S IH0 - T EY1 - SH AH0 N\nCETACEAN(2)  S IY0 - T EY1 - SH AH0 N\nCETEC  S IY1 - T EH2 K\nCETERA  S EH1 - T ER0 - AH0\nCETUS  S IY1 - T AH0 S\nCETUS'S  S IY1 - T AH0 - S IH0 Z\nCEVALLOS  S EY0 - V AA1 - L OW0 Z\nCEVAXS  S EH1 - V AE0 K - S IH0 Z\nCEYLON  S IH0 - L AA1 N\nCEYLON(2)  S IY0 - L AA1 N\nCEZANNE  S EH2 - Z AE1 N\nCEZANNE'S  S EH2 - Z AE1 N Z\nCHA  CH AA1\nCHA-CHAS  CH AA1 - CH AA2 Z\nCHABLIS  SH AH0 - B L IY1\nCHABON  CH EY1 - B AH0 N\nCHABOT  SH AH0 - B OW1\nCHACABUCO  CH AE2 - K AH0 - B Y UW1 - K OW0\nCHACE  CH EY1 S\nCHACHERE  SH AH0 - SH IH1 R\nCHACHI  CH AA1 - CH IY0\nCHACIN  SH EY1 - S IH0 N\nCHACKO  CH AE1 - K OW0\nCHACON  CH AE1 - K AH0 N\nCHAD  CH AE1 D\nCHAD'S  CH AE1 D Z\nCHADBOURNE  SH AH0 D - B UH1 R N\nCHADD  CH AE1 D\nCHADDERDON  CH AH0 - D ER1 - D AH0 N\nCHADDOCK  CH AE1 - D AH0 K\nCHADEL  CH AE1 - D AH0 L\nCHADIAN  CH EY1 - D IY0 - AH0 N\nCHADICK  CH AE1 - D IH0 K\nCHADLI  CH AE1 D - L IY0\nCHADRON  CH AE1 - D R AH0 N\nCHADWELL  CH AE1 D - W EH2 L\nCHADWICK  CH AE1 D - W IH0 K\nCHADWICK'S  CH AE1 D - W IH0 K S\nCHAE  CH AY1\nCHAEBOL  CH EY1 - B AH0 L\nCHAFE  CH EY1 F\nCHAFED  CH EY1 F T\nCHAFEE  CH AE1 - F IY0\nCHAFEE'S  CH EY1 - F IY0 Z\nCHAFEE'S(2)  CH AE1 - F IY0 Z\nCHAFEE(2)  CH EY1 - F IY0\nCHAFES  CH EY1 F S\nCHAFF  CH AE1 F\nCHAFFEE  CH AE1 - F IY0\nCHAFFIN  CH AE1 - F IH0 N\nCHAFFINS  CH AE1 - F IH0 N Z\nCHAFFY  CH AE1 - F IY0\nCHAFIN  CH AE1 - F IH0 N\nCHAFING  CH EY1 - F IH0 NG\nCHAGALL  CH AH0 - G AA1 L\nCHAGALL(2)  CH AH0 - G AE1 L\nCHAGNON  CH AE1 G - N AH0 N\nCHAGRIN  SH AH0 - G R IH1 N\nCHAGRINED  SH AH0 - G R IH1 N D\nCHAI  CH AY1\nCHAIDEZ  CH AA0 - IY1 - D EH0 Z\nCHAIKEN  CH EY1 - K AH0 N\nCHAIKIN  CH EY1 - K IH0 N\nCHAIM  HH AY1 - IH0 M\nCHAIN  CH EY1 N\nCHAIN'S  CH EY1 N Z\nCHAINED  CH EY1 N D\nCHAINING  CH EY1 - N IH0 NG\nCHAINS  CH EY1 N Z\nCHAINS'  CH EY1 N Z\nCHAINSAW  CH EY1 N - S AO2\nCHAINSAWS  CH EY1 N - S AO2 Z\nCHAIR  CH EH1 R\nCHAIRED  CH EH1 R D\nCHAIRES  SH EH1 R Z\nCHAIREZ  CH AA0 - IH1 - R EH0 Z\nCHAIRING  CH EH1 - R IH0 NG\nCHAIRMAN  CH EH1 R - M AH0 N\nCHAIRMAN'S  CH EH1 R - M AH0 N Z\nCHAIRMANSHIP  CH EH1 R - M AH0 N - SH IH2 P\nCHAIRMANSHIPS  CH EH1 R - M AH0 N - SH IH2 P S\nCHAIRMEN  CH EH1 R - M IH0 N\nCHAIRPEOPLE  CH EH1 R - P IY2 - P AH0 L\nCHAIRPERSON  CH EH1 R - P ER2 - S AH0 N\nCHAIRS  CH EH1 R Z\nCHAIRWOMAN  CH EH1 R - W UH2 - M AH0 N\nCHAIRWOMEN  CH EH1 R - W IH2 - M EH0 N\nCHAISE  SH EY1 Z\nCHAISSON  CH EY1 - S AH0 N\nCHAIT  CH EY1 T\nCHAJET  CH AE1 - JH AH0 T\nCHALABI  CH AH0 - L AA1 - B IY0\nCHALASANI  CH AE2 - L AH0 - S AE1 - N IY0\nCHALET  SH AE1 - L EY2\nCHALET(2)  SH AH0 - L EY1\nCHALETS  SH AH0 - L EY1 Z\nCHALETS(2)  SH AE1 - L EY2 Z\nCHALFANT  CH AE1 - F AH0 N T\nCHALFANT(2)  CH AE1 - F AA0 N T\nCHALFIN  CH AE1 L - F IH0 N\nCHALIFOUX  SH AE1 - L IH0 - F UW0\nCHALK  CH AA1 K\nCHALK(2)  CH AO1 K\nCHALKED  CH AO1 K T\nCHALKER  CH AO1 - K ER0\nCHALKING  CH AO1 - K IH0 NG\nCHALKLEY  CH AE1 L K - L IY0\nCHALKS  CH AO1 K S\nCHALLENDER  CH AH0 - L EH1 N - D ER0\nCHALLENGE  CH AE1 - L AH0 N JH\nCHALLENGED  CH AE1 - L AH0 JH D\nCHALLENGER  CH AE1 - L AH0 N - JH ER0\nCHALLENGER'S  CH AE1 - L AH0 N - JH ER0 Z\nCHALLENGER(2)  CH AE1 - L IH0 N - JH ER0\nCHALLENGERS  CH AE1 - L AH0 N - JH ER0 Z\nCHALLENGERY  CH AE1 - L AH0 N - JH ER0 - IY0\nCHALLENGES  CH AE1 - L AH0 N - JH IH0 Z\nCHALLENGING  CH AE1 - L AH0 N - JH IH0 NG\nCHALLIS  CH AE1 - L IH0 S\nCHALLIS(2)  SH AE1 - L IY0\nCHALMERS  CH AA1 - M ER0 Z\nCHALMETTE  SH AE0 L - M EH1 T\nCHALOUPKA  CH AH0 - L UW1 P - K AH0\nCHALOUX  SH AH0 - L UW1\nCHALSTY  CH AE1 L - S T IY0\nCHALUPA  CH AH0 - L UW1 - P AH0\nCHAM  CH AE1 M\nCHAMBER  CH EY1 M - B ER0\nCHAMBER'S  CH EY1 M - B ER0 Z\nCHAMBERED  CH EY1 M - B ER0 D\nCHAMBERLAIN  CH EY1 M - B ER0 - L AH0 N\nCHAMBERLAIN'S  CH EY1 M - B ER0 - L AH0 N Z\nCHAMBERLAIN(2)  CH EY1 M - B ER0 - L IH0 N\nCHAMBERLAND  CH AE1 M - B ER0 - L AH0 N D\nCHAMBERLAYNE  CH EY1 M - B ER0 - L EY2 N\nCHAMBERLIN  CH EY1 M - B ER0 - L IH0 N\nCHAMBERS  CH EY1 M - B ER0 Z\nCHAMBERS'  CH EY1 M - B ER0 Z\nCHAMBERS'S  CH EY1 M - B ER0 - Z IH0 Z\nCHAMBLEE  CH AE1 M - B L IY0\nCHAMBLESS  SH AH0 M - B L IY1 S\nCHAMBLIN  CH AE1 M - B L IH0 N\nCHAMBLISS  CH AE1 M - B L IH0 S\nCHAMBON  CH AE1 M - B AH0 N\nCHAMELEON  CH AH0 - M EH1 - L IY0 - AH0 N\nCHAMELEON(2)  K AH0 - M IY1 - L IY0 - AH0 N\nCHAMLEE  CH AE1 M - L IY0\nCHAMLONG  CH AE1 M - L AO2 NG\nCHAMNESS  CH AE1 M - N IH0 S\nCHAMORRO  CH AH0 - M AO1 - R OW0\nCHAMORRO'S  CH AH0 - M AO1 - R OW0 Z\nCHAMORRO(2)  CH OW0 - M AO1 - R OW0\nCHAMP  CH AE1 M P\nCHAMPA  K AA1 M - P AH0\nCHAMPAGNE  SH AE0 M - P EY1 N\nCHAMPAGNES  SH AE0 M - P EY1 N Z\nCHAMPAIGN  CH AE0 M - P EY1 N\nCHAMPEAU  SH AE0 M - P OW1\nCHAMPINE  CH AE1 M - P AY2 N\nCHAMPION  CH AE1 M - P IY0 - AH0 N\nCHAMPION'S  CH AE1 M - P IY0 - AH0 N Z\nCHAMPIONED  CH AE1 M - P IY0 - AH0 N D\nCHAMPIONING  CH AE1 M - P IY0 - AH0 - N IH0 NG\nCHAMPIONS  CH AE1 M - P IY0 - AH0 N Z\nCHAMPIONSHIP  CH AE1 M - P IY0 - AH0 N - SH IH2 P\nCHAMPIONSHIPS  CH AE1 M - P IY0 - AH0 N - SH IH2 P S\nCHAMPLAIN  SH AE0 M - P L EY1 N\nCHAMPLIN  CH AE1 M - P L IH0 N\nCHAMPNEY  CH AE1 M P - N IY0\nCHAMPOUX  SH AE0 M - P UW1\nCHAMPS  CH AE1 M P S\nCHAN  CH AE1 N\nCHAN'S  CH AE1 N Z\nCHANA  CH AE1 - N AH0\nCHANCE  CH AE1 N S\nCHANCELLOR  CH AE1 N - S AH0 - L ER0\nCHANCELLOR'S  CH AE1 N - S AH0 - L ER0 Z\nCHANCELLOR(2)  CH AE1 N S - L ER0\nCHANCELLORS  CH AE1 N - S AH0 - L ER0 Z\nCHANCERY  CH AE1 N - S ER0 - IY0\nCHANCES  CH AE1 N - S AH0 Z\nCHANCES(2)  CH AE1 N - S IH0 Z\nCHANCEY  CH AE1 N - S IY0\nCHANCY  CH AE1 N - S IY0\nCHAND  CH AE1 N D\nCHANDA  CH AE1 N - D AH0\nCHANDELIER  SH AE0 N - D AH0 - L IH1 R\nCHANDELIERS  SH AE2 N - D AH0 - L IH1 Z\nCHANDLER  CH AE1 N D - L ER0\nCHANDLER'S  CH AE1 N D - L ER0 Z\nCHANDLEY  CH AE1 N D - L IY0\nCHANDON  CH AE1 N - D IH0 N\nCHANDON(2)  SH AE2 N - D AA1 N\nCHANDRA  CH AE1 N - D R AH0\nCHANDROSS  CH AE0 N - D R AO1 S\nCHANEL  SH AH0 - N EH1 L\nCHANEY  CH EY1 - N IY0\nCHANG  CH AE1 NG\nCHANG-HSIN  CH AA1 NG - SH IH1 N\nCHANG-MING  CH AA1 NG - M IH1 NG\nCHANG-MING(2)  CH AE1 NG - M IH1 NG\nCHANGCHUN  CH AA1 NG - CH UH1 N\nCHANGE  CH EY1 N JH\nCHANGEABLE  CH EY1 N - JH AH0 - B AH0 L\nCHANGED  CH EY1 N JH D\nCHANGEOVER  CH EY1 N JH - OW2 - V ER0\nCHANGEOVERS  CH EY1 N JH - OW2 - V ER0 Z\nCHANGER  CH EY1 N - JH ER0\nCHANGERS  CH EY1 N - JH ER0 Z\nCHANGES  CH EY1 N - JH AH0 Z\nCHANGES(2)  CH EY1 N - JH IH0 Z\nCHANGING  CH EY1 N - JH IH0 NG\nCHANGSHO  CH AE1 NG - SH OW1\nCHANIN  CH AE1 - N IH0 N\nCHANLEY  CH AE1 N - L IY0\nCHANNEL  CH AE1 - N AH0 L\nCHANNEL'S  CH AE1 - N AH0 L Z\nCHANNELED  CH AE1 - N AH0 L D\nCHANNELING  CH AE1 - N AH0 L - IH0 NG\nCHANNELING(2)  CH AE1 N - L IH0 NG\nCHANNELL  CH AE1 - N AH0 L\nCHANNELL'S  SH AH0 - N EH1 L Z\nCHANNELS  CH AE1 - N AH0 L Z\nCHANNING  CH AE1 - N IH0 NG\nCHANNON  CH AE1 - N AH0 N\nCHANOS  CH AA1 - N OW0 S\nCHANT  CH AE1 N T\nCHANTAL  CH AE1 N - T AH0 L\nCHANTED  CH AE1 N - T IH0 D\nCHANTILLY  SH AE2 N - T IH1 - L IY0\nCHANTING  CH AE1 N - T IH0 NG\nCHANTS  CH AE1 N T S\nCHANUKAH  HH AA1 - N AH0 - K AH0\nCHANY  CH EY1 - N IY0\nCHAO  CH AW1\nCHAOS  K EY1 - AA0 S\nCHAOTIC  K EY0 - AA1 - T IH0 K\nCHAP  CH AE1 P\nCHAPA  CH AA1 - P AH0\nCHAPARRAL  SH AE2 - P ER0 - AE1 L\nCHAPARRO  K AA0 - P AA1 - R OW0\nCHAPAS  CH AA1 - P AH0 S\nCHAPDELAINE  SH AE1 P - D IH0 - L EY0 N\nCHAPEK  CH AE1 - P IH0 K\nCHAPEL  CH AE1 - P AH0 L\nCHAPEL'S  CH AE1 - P AH0 L Z\nCHAPELL  SH AH0 - P EH1 L\nCHAPELLE  SH AH0 - P EH1 L\nCHAPERONE  SH AE1 - P ER0 - OW2 N\nCHAPERONING  SH AE1 - P ER0 - OW2 - N IH0 NG\nCHAPIN  SH AH0 - P AE1 N\nCHAPLAIN  CH AE1 P - L AH0 N\nCHAPLAINS  CH AE1 P - L AH0 N Z\nCHAPLIN  CH AE1 P - L AH0 N\nCHAPLIN'S  CH AE1 P - L IH0 N Z\nCHAPLIN(2)  CH AE1 P - L IH0 N\nCHAPMAN  CH AE1 P - M AH0 N\nCHAPMAN'S  CH AE1 P - M AH0 N Z\nCHAPNICK  CH AE1 P - N IH0 K\nCHAPOTON  CH AE1 - P OW0 - AA2 N\nCHAPP  CH AE1 P\nCHAPPAQUIDDICK  CH AE2 - P AH0 - K W IH1 - D IH0 K\nCHAPPEL  CH AE1 - P AH0 L\nCHAPPELEAR  SH AE1 - P IH0 - L ER0\nCHAPPELL  CH AE1 - P AH0 L\nCHAPPELLE  SH AH0 - P EH1 L\nCHAPPIE  CH AE1 - P IY0\nCHAPPLE  CH AE1 - P AH0 L\nCHAPPUIS  SH AE1 - P UW0 - IH0 Z\nCHAPS  CH AE1 P S\nCHAPTER  CH AE1 P - T ER0\nCHAPTERS  CH AE1 P - T ER0 Z\nCHAPUT  CH AE1 - P AH0 T\nCHAR  CH AA1 R\nCHARACTER  K EH1 - R IH0 K - T ER0\nCHARACTER'S  K EH1 - R IH0 K - T ER0 Z\nCHARACTERISTIC  K EH2 - R AH0 K - T ER0 - IH1 - S T IH0 K\nCHARACTERISTICALLY  K EH2 - R AH0 K - T ER0 - IH1 - S T IH0 K - L IY0\nCHARACTERISTICS  K EH2 - R AH0 K - T ER0 - IH1 - S T IH0 K S\nCHARACTERIZATION  K EH2 - R AH0 K - T ER0 - IH0 - Z EY1 - SH AH0 N\nCHARACTERIZATIONS  K EH2 - R AH0 K - T ER0 - IH0 - Z EY1 - SH AH0 N Z\nCHARACTERIZE  K EH1 - R AH0 K - T ER0 - AY2 Z\nCHARACTERIZED  K EH1 - R AH0 K - T ER0 - AY2 Z D\nCHARACTERIZES  K EH1 - R AH0 K - T ER0 - AY2 - Z AH0 Z\nCHARACTERIZING  K EH1 - R IH0 K - T ER0 - AY2 - Z IH0 NG\nCHARACTERS  K AE1 - R IH0 K - T ER0 Z\nCHARACTERS'  CH EH1 - R AH0 K - T ER0 Z\nCHARACTERS(2)  K EH1 - R AH0 K - T ER0 Z\nCHARADE  SH ER0 - EY1 D\nCHARADES  SH ER0 - EY1 D Z\nCHARALAMBOS  CH AA2 - R AH0 - L AA1 M - B OW0 S\nCHARASSE  CH EH1 - R AE0 S\nCHARBONEAU  SH AA1 R - B AH0 - N OW0\nCHARBONNEAU  SH AA1 R - B AH0 - N OW2\nCHARBONNET  SH AA1 R - B AH0 - N IH0 T\nCHARBONNET(2)  SH AA1 R - B AH0 - N EY0\nCHARCOAL  CH AA1 R - K OW2 L\nCHARCOALS  CH AA1 R - K OW2 L Z\nCHARD  CH AA1 R D\nCHARDONNAY  CH AA0 R - D AA1 - N EY0\nCHARDONNAYS  CH AA0 R - D AA1 - N EY0 Z\nCHAREN  CH AA1 - R AH0 N\nCHAREN'S  CH AA1 - R AH0 N Z\nCHAREST  CH AA0 - R EY1 - IH0 S T\nCHARETTE  SH ER0 - EH1 T\nCHARGE  CH AA1 R JH\nCHARGEABLE  CH AA1 R - JH AH0 - B AH0 L\nCHARGED  CH AA1 R JH D\nCHARGER  CH AA1 R - JH ER0\nCHARGERS  CH AA1 R - JH ER0 Z\nCHARGES  CH AA1 R - JH AH0 Z\nCHARGES(2)  CH AA1 R - JH IH0 Z\nCHARGEURS  CH AA0 R - G Y UW1 R Z\nCHARGING  CH AA1 R - JH IH0 NG\nCHARGIT  CH AA1 R - JH IH0 T\nCHARGOIS  SH AA0 R - G W AA1\nCHARIOT  CH EH1 - R IY0 - AH0 T\nCHARIOTS  CH EH1 - R IY0 - AH0 T S\nCHARISMA  K ER0 - IH1 Z - M AH0\nCHARISMATIC  K EH0 - R IH0 Z - M AE1 - T IH0 K\nCHARISMATICS  K EH2 - R IH0 Z - M AE1 - T IH0 K S\nCHARISSA  K AA0 - R IY1 - S AH0\nCHARITA  K AA0 - R IY1 - T AH0\nCHARITABLE  CH AE1 - R AH0 - T AH0 - B AH0 L\nCHARITABLE(2)  CH EH1 - R AH0 - T AH0 - B AH0 L\nCHARITABLY  CH EH1 - R IH0 - T AH0 - B L IY0\nCHARITIES  CH EH1 - R AH0 - T IY0 Z\nCHARITIES'  CH EH1 - R IH0 - T IY0 Z\nCHARITIES(2)  CH EH1 - R IH0 - T IY0 Z\nCHARITY  CH EH1 - R IH0 - T IY0\nCHARITY'S  CH EH1 - R AH0 - T IY0 Z\nCHARLA  CH AA1 R - L AH0\nCHARLAND  CH AA1 R - L AH0 N D\nCHARLATAN  SH AA1 R - L AH0 - T AH0 N\nCHARLATANS  SH AA1 R - L AH0 - T AH0 N Z\nCHARLAYNE  SH AA0 R - L EY1 N\nCHARLE  CH AA1 R L\nCHARLEBOIS  SH AA1 R - L IH0 - B W AA0\nCHARLEEN  CH AA0 R - L IY1 N\nCHARLEMAGNE  SH AA1 R - L AH0 - M EY2 N\nCHARLENE  SH AA0 R - L IY1 N\nCHARLES  CH AA1 R L Z\nCHARLES'  CH AA1 R L Z\nCHARLES'(2)  CH AA1 - R AH0 L Z\nCHARLES'S  CH AA1 R L - Z IH0 Z\nCHARLES(2)  CH AA1 - R AH0 L Z\nCHARLESTON  CH AA1 R L - S T AH0 N\nCHARLESTON'S  CH AA1 R L - S T AH0 N Z\nCHARLESTON'S(2)  CH AA1 - R AH0 L - S T AH0 N Z\nCHARLESTON(2)  CH AA1 - R AH0 L - S T AH0 N\nCHARLESTOWN  CH AA1 R L - S T AW2 N\nCHARLESTOWN(2)  CH AA1 - R AH0 L - S T AW2 N\nCHARLESWORTH  CH AA1 - R AH0 L - S W ER0 TH\nCHARLESWORTH(2)  CH AA1 - R AH0 L Z - W ER0 TH\nCHARLET  CH AA1 R - L IH0 T\nCHARLEY  CH AA1 R - L IY0\nCHARLEY'S  CH AA1 R - L IY0 Z\nCHARLIE  CH AA1 R - L IY0\nCHARLIE'S  CH AA1 R - L IY0 Z\nCHARLIER  CH AA1 R - L IY0 - ER0\nCHARLINE  SH AA0 R - L IY1 N\nCHARLOT  CH AA1 R - L AH0 T\nCHARLOTTE  SH AA1 R - L AH0 T\nCHARLOTTE'S  SH AA1 R - L AH0 T S\nCHARLOTTESVILLE  SH AA1 R - L AH0 T S - V IH2 L\nCHARLOTTETOWN  SH AA1 R - L AH0 T - T AW2 N\nCHARLOTTEVILLE  SH AA1 R - L AH0 T - V IH2 L\nCHARLS  CH AA1 R L Z\nCHARLSON  CH AA1 R L - S AH0 N\nCHARLTON  CH AA1 R L - T AH0 N\nCHARM  CH AA1 R M\nCHARMAIN  SH AA0 R - M EY1 N\nCHARMAINE  SH AA0 R - M EY1 N\nCHARMED  CH AA1 R M D\nCHARMER  CH AA1 R - M ER0\nCHARMERS  CH AA1 R - M ER0 Z\nCHARMIAN  CH AA1 R - M IY0 - AH0 N\nCHARMING  CH AA1 R - M IH0 NG\nCHARMINGLY  CH AA1 R - M IH0 NG - L IY0\nCHARMION  CH AA1 R - M IY0 - AH0 N\nCHARMS  CH AA1 R M Z\nCHARNEY  CH AA1 R - N IY0\nCHARNLEY  CH AA1 R N - L IY0\nCHARNOCK  CH AA1 R - N AH0 K\nCHARON  K EH1 - R AH0 N\nCHARPENTIER  SH AA2 R - P AH0 N - T IH1 R\nCHARPIE  CH AA1 R - P IY0\nCHARRED  CH AA1 R D\nCHARREN  CH EH1 - R AH0 N\nCHARRIER  CH AE1 - R IY0 - ER0\nCHARRING  CH AA1 - R IH0 NG\nCHARRON  CH EH1 - R AH0 N\nCHARRON(2)  K EH1 - R AH0 N\nCHARRY  CH AE1 - R IY0\nCHART  CH AA1 R T\nCHARTED  CH AA1 R - T AH0 D\nCHARTED(2)  CH AA1 R - T IH0 D\nCHARTER  CH AA1 R - T ER0\nCHARTER'S  CH AA1 R - T ER0 Z\nCHARTERED  CH AA1 R - T ER0 D\nCHARTERHOUSE  CH AA1 R - T ER0 - HH AW2 S\nCHARTERING  CH AA1 R - T ER0 - IH0 NG\nCHARTERS  CH AA1 R - T ER0 Z\nCHARTIER  CH AA1 R - T IY0 - ER0\nCHARTING  CH AA1 R - T IH0 NG\nCHARTIST  CH AA1 R - T IH0 S T\nCHARTISTS  CH AA1 R - T IH0 S T S\nCHARTISTS(2)  CH AA1 R - T IH0 S S\nCHARTISTS(3)  CH AA1 R - T IH0 S\nCHARTRAND  CH AA1 R - T R AH0 N D\nCHARTRES  CH AA1 R - T R IY0 Z\nCHARTS  CH AA1 R T S\nCHARTWELL  CH AA1 R T - W EH2 L\nCHARVAT  CH AA1 R - V AH0 T\nCHARY  CH AA1 - R IY0\nCHARYL  CH AE1 - R AH0 L\nCHAS  CH AA1 R L Z\nCHAS(2)  CH AA1 Z\nCHASE  CH EY1 S\nCHASE'S  CH EY1 - S IH0 Z\nCHASED  CH EY1 S T\nCHASEN  CH EY1 - S AH0 N\nCHASER  CH EY1 - S ER0\nCHASERS  CH EY1 - S ER0 Z\nCHASES  CH EY1 - S AH0 Z\nCHASES(2)  CH EY1 - S IH0 Z\nCHASIN  CH AE1 - S IH0 N\nCHASING  CH EY1 - S IH0 NG\nCHASKA  CH AE1 S - K AH0\nCHASM  K AE1 - Z AH0 M\nCHASON  CH AE1 - S AH0 N\nCHASSE  CH AE1 S\nCHASSIS  CH AE1 - S IY0\nCHASTAIN  SH AH0 - S T EY1 N\nCHASTE  CH EY1 S T\nCHASTEEN  CH AH0 - S T IY1 N\nCHASTEN  CH EY1 - S AH0 N\nCHASTENED  CH EY1 - S AH0 N D\nCHASTISE  CH AE0 - S T AY1 Z\nCHASTISED  CH AE0 - S T AY1 Z D\nCHASTISES  CH AE0 - S T AY1 - Z IH0 Z\nCHASTISING  CH AE0 - S T AY1 - Z IH0 NG\nCHASTITY  CH AE1 - S T AH0 - T IY0\nCHAT  CH AE1 T\nCHATEAU  SH AE0 - T OW1\nCHATEAUX  SH AH0 - T OW1\nCHATFIELD  CH AE1 T - F IY2 L D\nCHATHAM  CH AE1 - T AH0 M\nCHATICHAI  CH AE1 - T IH0 - CH AY2\nCHATICHAI'S  CH AE1 - T IH2 - K AY0 Z\nCHATICHAI'S(2)  CH AE1 - T IH0 - CH AY2 Z\nCHATIHACHI  CH AE2 - T IH0 - HH AA1 - CH IY0\nCHATIHACHI'S  CH AE2 - T IH0 - HH AA1 - CH IY0 Z\nCHATMAN  CH AE1 T - M AH0 N\nCHATMON  CH AE1 T - M AH0 N\nCHATS  CH AE1 T S\nCHATSWOOD  CH AE1 T S - W UH2 D\nCHATSWORTH  CH AE1 T - S W ER2 TH\nCHATTAHOOCHEE  CH AE2 - T AH0 - HH UW1 - CH IY0\nCHATTAHOOCHEE'S  CH AE2 - T AH0 - HH UW1 - CH IY0 Z\nCHATTANOOGA  CH AE2 - T AH0 - N UW1 - G AH0\nCHATTANOOGA'S  CH AE2 - T AH0 - N UW1 - G AH0 Z\nCHATTANUGA  CH AE2 - T AH0 - N UW1 - G AH0\nCHATTED  CH AE1 - T AH0 D\nCHATTED(2)  CH AE1 - T IH0 D\nCHATTEL  CH AE1 - T AH0 L\nCHATTER  CH AE1 - T ER0\nCHATTERING  CH AE1 - T ER0 - IH0 NG\nCHATTERJEE  CH AH0 - T ER1 - JH IY0\nCHATTERTON  CH AE1 - T ER0 - T AH0 N\nCHATTERTON'S  CH AE1 - T ER0 - T AH0 N Z\nCHATTIN  CH AE1 - T IH0 N\nCHATTING  CH AE1 - T IH0 NG\nCHATTY  CH AE1 - T IY0\nCHATWAL  CH AE1 T - W AO2 L\nCHATWIN  CH AE1 T - W IH0 N\nCHATZ  CH AE1 T S\nCHATZ'  CH AE1 T S\nCHATZ'S  CH AE1 T - S IH0 Z\nCHAU  SH OW1\nCHAUCER  CH AO1 - S ER0\nCHAUCER'S  CH AO1 - S ER0 Z\nCHAUDHRY  CH AO1 - D R IY0\nCHAUDOIN  SH OW0 - D OY1 N\nCHAUFFEUR  SH OW0 - F ER1\nCHAUFFEUR'S  SH OW0 - F ER1 Z\nCHAUFFEUR'S(2)  SH OW1 - F ER0 Z\nCHAUFFEUR(2)  SH OW1 - F ER0\nCHAUFFEURED  SH OW0 - F ER1 D\nCHAUFFEURED(2)  SH OW1 - F ER0 D\nCHAUFFEURS  SH OW0 - F ER1 Z\nCHAUFFEURS(2)  SH OW1 - F ER0 Z\nCHAUMET  CH AO1 - M IH0 T\nCHAUNCE  CH AO1 N S\nCHAUNCEY  CH AO1 N - S IY0\nCHAUNCY  CH AO1 N - S IY0\nCHAUS  CH AW1 S\nCHAUSSE  CH AW1 S\nCHAUSSEE  CH AW1 - S IY0\nCHAUTAUQUA  SH AH0 - T AO1 - K W AH0\nCHAUTAUQUAN  SH AH0 - T AO1 - K W AH0 N\nCHAUTAUQUANS  SH AH0 - T AO1 - K W AH0 N Z\nCHAUVIN  SH OW0 - V AE1 N\nCHAUVINISM  SH OW1 - V AH0 - N IH2 - Z AH0 M\nCHAUVINIST  SH OW1 - V AH0 - N AH0 S T\nCHAUVINISTIC  CH OW2 - V AH0 - N IH1 - S T IH0 K\nCHAVARRIA  CH AH0 - V AE1 - R IY0 - AH0\nCHAVERS  CH EY1 - V ER0 Z\nCHAVES  CH EY1 V Z\nCHAVEZ  SH AA1 - V EH0 Z\nCHAVEZ(2)  CH AE1 - V EH2 Z\nCHAVEZ(3)  SH AH0 - V EH1 Z\nCHAVIN  CH EY1 - V IH0 N\nCHAVIRA  K AA0 - V IH1 - R AH0\nCHAVIS  CH AE1 - V IH0 S\nCHAVIS'  CH AE1 - V IH0 S\nCHAVIS'(2)  CH EY1 - V IH0 S\nCHAVIS(2)  CH EY1 - V IH0 S\nCHAVITZ  CH AE1 - V IH0 T S\nCHAVOUS  SH AH0 - V AO1 S\nCHAW  CH AO1\nCHAWLA  CH AO1 - L AH0\nCHAZ  CH AE1 Z\nCHAZANOFF  CH AE1 - Z AH0 N - AO0 F\nCHAZEN  CH EY1 - Z AH0 N\nCHAZOV  CH AE1 - Z AA0 V\nCHAZZ  CH AE1 Z\nCHAZZ(2)  CH AA1 Z\nCHE  CH EY1\nCHEA  CH IY1\nCHEADLE  CH IY1 - D AH0 L\nCHEANE  CH IY1 N\nCHEANE'S  CH IY1 N Z\nCHEANEY  CH IY1 - N IY0\nCHEAP  CH IY1 P\nCHEAPEN  CH IY1 - P AH0 N\nCHEAPENED  CH IY1 - P AH0 N D\nCHEAPENING  CH IY1 - P AH0 - N IH0 NG\nCHEAPER  CH IY1 - P ER0\nCHEAPEST  CH IY1 - P AH0 S T\nCHEAPLY  CH IY1 P - L IY0\nCHEAPNESS  CH IY1 P - N AH0 S\nCHEAPO  CH IY1 - P OW2\nCHEAPSKATE  CH IY1 P - S K EY2 T\nCHEAT  CH IY1 T\nCHEATED  CH IY1 - T AH0 D\nCHEATED(2)  CH IY1 - T IH0 D\nCHEATER  CH IY1 - T ER0\nCHEATERS  CH IY1 - T ER0 Z\nCHEATHAM  CH IY1 - T AH0 M\nCHEATING  CH IY1 - T IH0 NG\nCHEATS  CH IY1 T S\nCHEATUM  CH IY1 - T AH0 M\nCHEATWOOD  CH IY1 T - W UH2 D\nCHEBRIKOV  CH EH1 - B R IH0 - K AA2 V\nCHECCHI  CH EH1 - K IY0\nCHECHEN  CH EH1 - CH IH0 N\nCHECHEN'S  CH EH1 - CH IH0 N Z\nCHECHENS  CH EH1 - CH IH0 N Z\nCHECHNYA  CH EH1 CH - N IY0 - AH0\nCHECHNYA'S  CH EH1 CH - N IY0 - AH0 Z\nCHECHNYAN  CH EH1 CH - N IY0 - AH0 N\nCHECHNYAN'S  CH EH1 CH - N IY0 - AH0 N Z\nCHECHNYANS  CH EH1 CH - N IY0 - AH0 N Z\nCHECK  CH EH1 K\nCHECKBOOK  CH EH1 K - B UH2 K\nCHECKBOOKS  CH EH1 K - B UH2 K S\nCHECKED  CH EH1 K T\nCHECKER  CH EH1 - K ER0\nCHECKERBOARD  CH EH1 - K ER0 - B AO2 R D\nCHECKERBOARDING  CH EH1 - K ER0 - B AO2 R - D IH0 NG\nCHECKERBOARDS  CH EH1 - K ER0 - B AO2 R D Z\nCHECKERED  CH EH1 - K ER0 D\nCHECKERS  CH EH1 - K ER0 Z\nCHECKERSPOT  CH EH1 - K ER0 - S P AA2 T\nCHECKETTS  CH EH1 - K IH0 T S\nCHECKING  CH EH1 - K IH0 NG\nCHECKLIST  CH EH1 K - L IH2 S T\nCHECKMATE  CH EH1 K - M EY2 T\nCHECKOFF  CH EH1 K - AO2 F\nCHECKOUT  CH EH1 K - AW2 T\nCHECKOUTS  CH EH1 K - AW2 T S\nCHECKPOINT  CH EH1 K - P OY2 N T\nCHECKPOINTS  CH EH1 K - P OY2 N T S\nCHECKS  CH EH1 K S\nCHECKUP  CH EH1 K - AH2 P\nCHECKUPS  CH EH1 K - AH2 P S\nCHEDDAR  CH EH1 - D ER0\nCHEDDARS  CH EH1 - D ER0 Z\nCHEDESTER  CH EH1 - D IH0 - S T ER0\nCHEE  CH IY1\nCHEECH  CH IY1 CH\nCHEEK  CH IY1 K\nCHEEKBONE  CH IY1 K - B OW2 N\nCHEEKBONES  CH IY1 K - B OW2 N Z\nCHEEKED  CH IY1 K T\nCHEEKS  CH IY1 K S\nCHEEKTOWAGA  CH IY2 K - T AH0 - W AA1 - G AH0\nCHEEKY  CH IY1 - K IY0\nCHEELY  CH IY1 - L IY0\nCHEER  CH IH1 R\nCHEERED  CH IH1 R D\nCHEERFUL  CH IH1 R - F AH0 L\nCHEERFULLY  CH IH1 R - F AH0 - L IY0\nCHEERFULLY(2)  CH IH1 R - F L IY0\nCHEERING  CH IH1 - R IH0 NG\nCHEERIO  CH IH1 - R IY0 - OW0\nCHEERIOS  CH IH1 - R IY0 - OW0 S\nCHEERLEADER  CH IH1 R - L IY2 - D ER0\nCHEERLEADERS  CH IH1 R - L IY2 - D ER0 Z\nCHEERLEADING  CH IH1 R - L IY2 - D IH0 NG\nCHEERS  CH IH1 R Z\nCHEERY  CH IH1 - R IY0\nCHEESE  CH IY1 Z\nCHEESEBURGER  CH IY1 Z - B ER0 - G ER0\nCHEESEBURGERS  CH IY1 Z - B ER0 - G ER0 Z\nCHEESECAKE  CH IY1 Z - K EY2 K\nCHEESEMAN  CH IY1 Z - M AH0 N\nCHEESER  CH IY1 - Z ER0\nCHEESES  CH IY1 - Z IH0 Z\nCHEESIER  CH IY1 - Z IY0 - ER0\nCHEESIEST  CH IY1 - Z IY0 - IH0 S T\nCHEESMAN  CH IY1 Z - M AH0 N\nCHEESY  CH IY1 - Z IY0\nCHEETAH  CH IY1 - T AH0\nCHEETAHS  CH IY1 - T AH0 Z\nCHEETAL  CH IY1 - T AH0 L\nCHEETHAM  CH IY1 - TH AH0 M\nCHEEVER  CH IY1 - V ER0\nCHEF  SH EH1 F\nCHEF'S  SH EH1 F S\nCHEFITZ  CH EH1 - F IH0 T S\nCHEFS  SH EH1 F S\nCHEIL  CH AY1 L\nCHEIMI  CH EY1 - M IY0\nCHEK  CH EH1 K\nCHEKHOV  CH EH1 - K AA0 V\nCHEKHOV'S  CH EH1 - K AA0 V Z\nCHELAN  CH EH1 - L AH0 N\nCHELETTE  SH IH0 - L EH1 T\nCHELF  CH EH1 L F\nCHELL  CH EH1 L\nCHELLIS  CH EH1 - L IH0 S\nCHELMSFORD  CH EH1 L M S - F ER0 D\nCHELSEA  CH EH1 L - S IY0\nCHELSEA'S  CH EH1 L - S IY0 Z\nCHELYABINSK  CH EH0 L - Y AH0 - B IH1 N S K\nCHEM  K EH1 M\nCHEMA  CH EH1 - M AA0\nCHEMCLEAR  CH EH1 M - K L IH2 R\nCHEMDESIGN  CH EH1 M - D AH0 - Z AY2 N\nCHEMED  K EH1 - M EH0 D\nCHEMED(2)  K EH1 M D\nCHEMEL  K EH1 - M EH0 L\nCHEMERINSKY  CH EH2 - M ER0 - IH1 N - S K IY0\nCHEMETRON  CH EH1 - M AH0 - T R AA0 N\nCHEMFIX  CH EH1 M - F IH0 K S\nCHEMICAL  K EH1 - M AH0 - K AH0 L\nCHEMICAL'S  K EH1 - M IH0 - K AH0 L Z\nCHEMICAL(2)  K EH1 - M IH0 - K AH0 L\nCHEMICALLY  K EH1 - M AH0 - K L IY0\nCHEMICALS  K EH1 - M IH0 - K AH0 L Z\nCHEMICALS'  CH EH1 - M AH0 - K AH0 L Z\nCHEMIE  CH EH1 - M IY0\nCHEMINS  CH EH1 - M IH0 N Z\nCHEMINS(2)  SH AH0 - M IH1 N Z\nCHEMISE  SH AH0 - M IY1 Z\nCHEMIST  K EH1 - M IH0 S T\nCHEMISTRY  K EH1 - M AH0 - S T R IY0\nCHEMISTRY(2)  K EH1 - M IH0 - S T R IY0\nCHEMISTS  K EH1 - M AH0 S T S\nCHEMISTS(2)  K EH1 - M IH0 S T S\nCHEMISTS(3)  K EH1 - M IH0 S S\nCHEMISTS(4)  K EH1 - M IH0 S\nCHEMLAWN  K EH1 M - L AO2 N\nCHEMLAWN'S  K EH1 M - L AO2 N Z\nCHEMO  K IY1 - M OW0\nCHEMOTHERAPY  K IY2 - M OW0 - TH EH1 - R AH0 - P IY0\nCHEMYR  K EH1 - M IH0 R\nCHEN  CH EH1 N\nCHEN'S  CH EH1 N Z\nCHENARD  CH EH1 - N ER0 D\nCHENAULT  SH IH0 - N OW1\nCHENETTE  SH IH0 - N EH1 T\nCHENEVERT  CH EH1 - N IH0 - V ER0 T\nCHENEY  CH EY1 - N IY0\nCHENEY'S  CH EY1 - N IY0 Z\nCHENG  CH EH1 NG\nCHENG-CHUNG  CH EH1 NG - CH UH1 NG\nCHENG-HUA  CH EH1 NG - HH W AA1\nCHENGDU  CH EH2 NG - D UW1\nCHENGXIANG  CH EH1 NG - SH AA1 NG\nCHENIER  CH IY1 - N IY0 - ER0\nCHENNAULT  CH EH1 - N AO0 L T\nCHENOWETH  CH EH1 - N AH0 - W EH0 TH\nCHENOWITZ  CH EH1 - N AH0 - W IH0 T S\nCHENXIANG  CH EH1 N - SH AA1 NG\nCHEONG  CH IY1 - AA0 NG\nCHER  SH EH1 R\nCHERAMIE  CH EH1 - R AH0 - M IY0\nCHERBOURG  SH EH1 R - B AH0 R G\nCHERI  SH EH1 - R IY0\nCHERICO  K ER0 - IY1 - K OW0\nCHERICO(2)  CH ER0 - IY1 - K OW0\nCHERIE  SH EH1 - R IY0\nCHERISH  CH EH1 - R IH0 SH\nCHERISHED  CH EH1 - R IH0 SH T\nCHERISHES  CH EH1 - R IH0 - SH IH0 Z\nCHERMAK  CH ER1 - M AH0 K\nCHERN  CH ER1 N\nCHERNE  CH ER1 N\nCHERNENKO  CH ER0 - N EH1 NG - K OW0\nCHERNEY  CH ER1 - N IY0\nCHERNICK  CH ER1 - N IH0 K\nCHERNIN  CH ER1 - N IH0 N\nCHERNOBYL  CH ER0 - N OW1 - B AH0 L\nCHERNOBYL'S  CH ER0 - N OW1 - B AH0 L Z\nCHERNOFF  K ER1 - N AO0 F\nCHERNOMYRDIN  CH EH2 R - N OW0 - M IH1 R - D AH0 N\nCHERNOMYRDIN'S  CH EH2 R - N OW0 - M IH1 R - D AH0 N Z\nCHERNOW  CH ER1 - N OW0\nCHERNY  CH ER1 - N IY0\nCHEROKEE  CH EH1 - R AH0 - K IY2\nCHEROKEE'S  CH EH1 - R AH0 - K IY2 Z\nCHEROKEES  CH EH1 - R AH0 - K IY2 Z\nCHERRAPUNJI  CH EH2 - R AH0 - P AH1 N - JH IY0\nCHERRIER  CH EH1 - R IY0 - ER0\nCHERRIES  CH EH1 - R IY0 Z\nCHERRINGTON  CH EH1 - R IH0 NG - T AH0 N\nCHERRY  CH EH1 - R IY0\nCHERRYSTONE  CH EH1 - R IY0 - S T OW2 N\nCHERRYSTONES  CH EH1 - R IY0 - S T OW2 N Z\nCHERT  CH ER1 T\nCHERTKOW  CH ER1 T - K AW0\nCHERTOFF  CH ER1 - T AA0 F\nCHERTS  CH ER1 T S\nCHERUB  CH EH1 - R AH0 B\nCHERUBIC  CH ER0 - UW1 - B IH0 K\nCHERUBINI  K ER0 - UW0 - B IY1 - N IY0\nCHERUBS  CH EH1 - R AH0 B Z\nCHERUMIRDAN  CH EH2 - R AH0 - M IH1 R - D AH0 N\nCHERUMIRDAN'S  CH EH2 - R AH0 - M IH1 R - D AH0 N Z\nCHERVENAK  CH ER1 - V IH0 - N AE0 K\nCHERY  CH EH1 - R IY0\nCHERYL  SH EH1 - R AH0 L\nCHES  CH EH1 S\nCHESAPEAKE  CH EH1 - S AH0 - P IY2 K\nCHESBRO  K EH1 S - B R OW0\nCHESEBRO  K EH0 - S EH1 - B R OW0\nCHESEBROUGH  CH EH1 - S AH0 - B R UW0\nCHESHER  CH EH1 - SH ER0\nCHESHIER  CH EH1 - SH IY0 - ER0\nCHESHIRE  CH EH1 - SH ER0\nCHESLER  CH EH1 - S AH0 - L ER0\nCHESLER(2)  CH EH1 S - L ER0\nCHESLEY  CH EH1 S - L IY0\nCHESLOCK  CH EH1 S - L AH0 K\nCHESNEY  CH EH1 S - N IY0\nCHESNUT  CH EH1 S - N AH2 T\nCHESNUTT  SH IH0 S - N AH1 T\nCHESNUTT(2)  CH EH0 S - N AH1 T\nCHESS  CH EH1 S\nCHESSBOARD  CH EH1 S - B AO2 R D\nCHESSER  CH EH1 - S ER0\nCHESSHER  CH EH1 - SH ER0\nCHESSHIR  SH IH0 - SH ER1\nCHESSMAN  CH EH1 S - M AH0 N\nCHESSON  CH EH1 - S AH0 N\nCHEST  CH EH1 S T\nCHESTANG  CH EH1 - S T AH0 NG\nCHESTED  CH EH1 - S T AH0 D\nCHESTED(2)  CH EH1 - S T IH0 D\nCHESTER  CH EH1 - S T ER0\nCHESTERFIELD  CH EH1 - S T ER0 - F IY2 L D\nCHESTERMAN  CH EH1 - S T ER0 - M AH0 N\nCHESTERS  CH EH1 - S T ER0 Z\nCHESTERSON  CH EH1 - S T ER0 - S AH0 N\nCHESTERTON  CH EH1 - S T ER0 - T AH0 N\nCHESTMAN  CH EH1 S T - M AH0 N\nCHESTNUT  CH EH1 S - N AH2 T\nCHESTNUT(2)  CH EH1 S T - N AH2 T\nCHESTNUTS  CH EH1 S - N AH0 T S\nCHESTNUTT  CH EH1 S T - N AH0 T\nCHESTON  CH EH1 - S T AH0 N\nCHESTS  CH EH1 S T S\nCHET  CH EH1 T\nCHETNIKS  CH EH1 T - N IH0 K S\nCHETWIN  CH EH1 T - W IH0 N\nCHEUNG  CH Y UW1 NG\nCHEUSE  CH UW1 S\nCHEUVRONT  SH UW0 - V R AA1 N T\nCHEVALIER  SH EH2 - V AH0 - L IH1 R\nCHEVERLY  CH EH1 - V ER0 - L IY0\nCHEVES  CH IY1 V Z\nCHEVETTE  SH AH0 - V EH1 T\nCHEVIES  CH EH1 - V IY0 Z\nCHEVIOT  SH EH1 - V IY0 - AH0 T\nCHEVIOTS  CH IY1 - V IY0 - AH0 T S\nCHEVIS  CH EH1 - V IH0 S\nCHEVRETTE  SH IH0 - V R EH1 T\nCHEVRIER  CH EH1 - V ER0 - IY0 - ER0\nCHEVROLET  SH EH2 - V R AH0 - L EY1\nCHEVROLET'S  SH EH2 - V R AH0 - L EY1 Z\nCHEVROLET'S(2)  SH EH2 - V R OW0 - L EY1 Z\nCHEVROLET(2)  SH EH2 - V R OW0 - L EY1\nCHEVROLETS  SH EH2 - V R AH0 - L EY1 Z\nCHEVROLETS(2)  SH EH2 - V R OW0 - L EY1 Z\nCHEVRON  SH EH1 - V R AH0 N\nCHEVRON'S  SH EH1 - V R AH0 N Z\nCHEVRON'S(2)  SH EH1 - V R AA0 N Z\nCHEVRON(2)  SH EH1 - V R AA0 N\nCHEVY  CH EH1 - V IY0\nCHEVY'S  CH EH1 - V IY0 Z\nCHEVY'S(2)  SH EH1 - V IY0 Z\nCHEVY(2)  SH EH1 - V IY0\nCHEVYS  CH EH1 - V IH0 S\nCHEVYS(2)  SH EH1 - V IH0 S\nCHEW  CH UW1\nCHEWED  CH UW1 D\nCHEWER  CH UW1 - ER0\nCHEWERS  CH UW1 - ER0 Z\nCHEWING  CH UW1 - IH0 NG\nCHEWNING  CH UW1 - N IH0 NG\nCHEWS  CH UW1 Z\nCHEWY  CH UW1 - IY0\nCHEYENNE  SH AY0 - AE1 N\nCHEYENNE'S  SH AY0 - AE1 N Z\nCHEYENNES  SH AY0 - AE1 N Z\nCHEYNE  CH EY1 N\nCHEYNEY  CH EY1 - N IY0\nCHEZ  CH EH1 Z\nCHI  K AY1\nCHI'S  K AY1 Z\nCHIA  CH IY1 - AH0\nCHIANESE  K IY0 - AA0 - N EY1 - Z IY0\nCHIANG  CH AE1 NG\nCHIANG'S  CH AE1 NG Z\nCHIANTI  CH IY0 - AE1 N - T IY0\nCHIAPAS  CH IY0 - AA1 - P AH0 S\nCHIAPPARONE  CH IY0 - AE1 - P ER0 - OW2 N\nCHIAPPETTA  K IY0 - AA0 - P EH1 - T AH0\nCHIAPPONE  K IY0 - AA0 - P OW1 - N IY0\nCHIARA  K Y AA1 - R AH0\nCHIARAMONTE  K IY0 - AA0 - R AA0 - M OW1 N - T IY0\nCHIARELLA  K IY0 - AA0 - R EH1 - L AH0\nCHIARELLI  K IY0 - AA0 - R EH1 - L IY0\nCHIARELLO  K IY0 - AA0 - R EH1 - L OW0\nCHIARENZA  K IY0 - AA0 - R EH1 N - Z AH0\nCHIARNIM  K IY0 - AA1 R - N IH2 M\nCHIARO  K IY0 - AA1 - R OW0\nCHIASSON  CH IY0 - AA1 - S AH0 N\nCHIAT  CH IY1 - AE0 T\nCHIAVETTA  K IY0 - AA0 - V EH1 - T AH0\nCHIBA  CH IY1 - B AH0\nCHIC  SH IY1 K\nCHICAGO  SH AH0 - K AA1 - G OW2\nCHICAGO'S  SH AH0 - K AA1 - G OW2 Z\nCHICAGOAN  CH IH1 - K AH0 - G OW2 N\nCHICAGOANS  SH AH0 - K AA1 - G OW2 - AH0 N Z\nCHICANERY  SH IH0 - K EY1 - N ER0 - IY0\nCHICANO  CH IH0 - K AA1 - N OW0\nCHICANOS  CH IH0 - K AA1 - N OW0 Z\nCHICHAUHA  CH IY2 - CH AW1 - AH0\nCHICHAUHA'S  CH IY2 - CH AW1 - AH0 Z\nCHICHESTER  CH IH1 - CH EH0 - S T ER0\nCHICHI  CH IY1 - CH IY0\nCHICK  CH IH1 K\nCHICKASAW  CH IH1 - K AH0 - S AO2\nCHICKASAWS  CH IH1 - K AH0 - S AO2 Z\nCHICKED  CH IH0 K T\nCHICKEN  CH IH1 - K AH0 N\nCHICKEN'S  CH IH1 - K AH0 N Z\nCHICKENED  CH IH1 - K AH0 N D\nCHICKENS  CH IH1 - K AH0 N Z\nCHICKERING  CH IH1 - K ER0 - IH0 NG\nCHICKS  CH IH1 K S\nCHICO  CH IY1 - K OW2\nCHICO'S  CH IY1 - K OW2 Z\nCHICOINE  CH IH0 - K OY1 N\nCHICOTS  CH IH1 - K AH0 T S\nCHIDE  CH AY1 D\nCHIDED  CH AY1 - D IH0 D\nCHIDES  CH AY1 D Z\nCHIDESTER  CH IH1 - D IH0 - S T ER0\nCHIDEYA  CH IH0 - D IY1 - Y AH0\nCHIDEYA(2)  CH IH0 - D EY1 - Y AH0\nCHIDING  CH AY1 - D IH0 NG\nCHIDSEY  CH IH1 D - Z IY0\nCHIEF  CH IY1 F\nCHIEF'S  CH IY1 F S\nCHIEFDOM  CH IY1 F - D AH0 M\nCHIEFFO  K IY1 - F OW0\nCHIEFLY  CH IY1 F - L IY0\nCHIEFS  CH IY1 F S\nCHIEFS'  CH IY1 F S\nCHIEFTAIN  CH IY1 F - T AH0 N\nCHIEFTAIN'S  CH IY1 F - T AH0 N Z\nCHIEFTAINS  CH IY1 F - T AH0 N Z\nCHIEN  CH EH1 N\nCHIENGMAI  CH EH1 NG - M AY1\nCHIESA  K IY1 - S AH0\nCHIFFON  SH IH0 - F AA1 N\nCHIGGERS  CH IH1 - G ER0 Z\nCHIGNEY  CH IH1 G - N IY0\nCHIHUAHUA  CH AH0 - W AA1 - W AA2\nCHIHUAHUA(2)  CH IY2 - W AA1 - W AH0\nCHIKANE  CH IH0 - K AA1 - N EY0\nCHIKATILO  CH IH0 - K AH0 - T IH2 - L OW0\nCHIKOS  CH IY1 - K OW0 S\nCHILCOAT  CH IH1 L - K OW2 T\nCHILCOTE  CH IH1 L - K OW2 T\nCHILCOTT  CH IH1 L - K AH0 T\nCHILCUTT  CH IH1 L - K AH0 T\nCHILD  CH AY1 L D\nCHILD'S  CH AY1 L D Z\nCHILDBEARING  CH AY1 L D - B EH2 - R IH0 NG\nCHILDBIRTH  CH AY1 L D - B ER2 TH\nCHILDCARE  CH AY1 L D - K EH2 R\nCHILDCRAFT  CH AY1 L D - K R AE2 F T\nCHILDE  CH IH1 L D\nCHILDENER  CH IH1 L D - N ER0\nCHILDENER'S  CH IH1 L D - N ER0 Z\nCHILDENER'S(2)  CH IH1 L - D IH0 - N ER0 Z\nCHILDENER(2)  CH IH1 L - D IH0 - N ER0\nCHILDERS  CH IH1 L - D ER0 Z\nCHILDHOOD  CH AY1 L D - HH UH2 D\nCHILDHOODS  CH AY1 L D - HH UH2 D Z\nCHILDISH  CH AY1 L - D IH0 SH\nCHILDLESS  CH AY1 L D - L AH0 S\nCHILDLIKE  CH AY1 L D - L AY2 K\nCHILDRAISING  CH AY1 L - D R EY2 - Z IH0 NG\nCHILDREE  CH AY0 L - D R IY1\nCHILDREN  CH IH1 L - D R AH0 N\nCHILDREN'S  CH IH1 L - D R AH0 N Z\nCHILDRENS  CH IH1 L - D R AH0 N Z\nCHILDRENS'  CH IH1 L - D R AH0 N Z\nCHILDRES  CH AY1 L - D ER0 Z\nCHILDRESS  CH IH1 L - D R IH0 S\nCHILDREY  CH IH1 L - D R IY0\nCHILDS  CH AY1 L D Z\nCHILE  CH IH1 - L IY0\nCHILE'S  CH IH1 - L IY0 Z\nCHILEAN  CH IH1 - L IY0 - AH0 N\nCHILEANS  CH IH1 - L IY0 - AH0 N Z\nCHILES  CH AY1 L Z\nCHILES'S  CH IH1 - L IY0 - Z IH0 Z\nCHILES(2)  CH IH1 - L IY0 Z\nCHILI  CH IH1 - L IY0\nCHILI'S  CH IH1 - L IY0 Z\nCHILIES  CH IH1 - L IY0 Z\nCHILIS  CH IH1 - L IY0 Z\nCHILL  CH IH1 L\nCHILLED  CH IH1 L D\nCHILLEMI  K IY0 - L EH1 - M IY0\nCHILLER  CH IH1 - L ER0\nCHILLICOTHE  CH IH1 - L IH0 - K AO0 TH\nCHILLIER  CH IH1 - L IY0 - ER0\nCHILLIES  CH IH1 - L IY0 Z\nCHILLING  CH IH1 - L IH0 NG\nCHILLINGLY  CH IH1 - L IH0 NG - L IY0\nCHILLS  CH IH1 L Z\nCHILLY  CH IH1 - L IY0\nCHILMARK  CH IH1 L - M AA2 R K\nCHILSON  CH IH1 L - S AH0 N\nCHILTON  CH IH1 L - T AH0 N\nCHIMAYO  CH IH0 - M AY1 - OW0\nCHIME  CH AY1 M\nCHIMED  CH AY1 M D\nCHIMENTI  CH IH0 - M EH1 N - T IY0\nCHIMENTO  CH IH0 - M EH1 N - T OW0\nCHIMERA  CH IH0 - M EH1 - R AH0\nCHIMERINE  CH IH1 - M ER0 - IY2 N\nCHIMES  CH AY1 M Z\nCHIMICLES  CH IH1 - M IH0 - K AH0 L Z\nCHIMIE  CH IH1 - M IY0\nCHIMNEY  CH IH1 M - N IY0\nCHIMNEYS  CH IH1 M - N IY0 Z\nCHIMP  CH IH1 M P\nCHIMPANZEE  CH IH0 M - P AE1 N - Z IY0\nCHIMPANZEES  CH IH0 M - P AE1 N - Z IY0 Z\nCHIMPS  CH IH1 M P S\nCHIN  CH IH1 N\nCHINA  CH AY1 - N AH0\nCHINA'S  CH AY1 - N AH0 Z\nCHINATOWN  CH AY1 - N AH0 - T AW2 N\nCHINCHILLA  CH IH0 N - CH IH1 - L AH0\nCHINEN  CH IH1 - N AH0 N\nCHINESE  CH AY0 - N IY1 Z\nCHING  CH IH1 NG\nCHINH  CH IH1 N\nCHINK  CH IH1 NG K\nCHINKS  CH IH1 NG K S\nCHINN  CH IH1 N\nCHINN'S  CH IH1 N Z\nCHINNICI  K IY0 - N IY1 - CH IY0\nCHINNOCK  CH IH1 - N AH0 K\nCHINO  CH IY1 - N OW0\nCHINOOK  SH IH0 - N UH1 K\nCHINOOK(2)  CH IH2 - N UH1 K\nCHINOOKS  CH IH0 - N UH1 K S\nCHINOOKS(2)  SH IH2 - N UH1 K S\nCHINOY  CH IH1 - N OY2\nCHINTUNG  CH IH1 N - T AH0 NG\nCHINTZY  CH IH1 N T - S IY0\nCHIODO  K IY0 - OW1 - D OW0\nCHIP  CH IH1 P\nCHIP'S  CH IH1 P S\nCHIPBOARD  CH IH1 P - B AO2 R D\nCHIPCOM  CH IH1 P - K AA2 M\nCHIPCOM'S  CH IH1 P - K AA2 M Z\nCHIPELLO  CH IH0 - P EH1 - L OW0\nCHIPETAS  CH IH0 - P IY1 - T AH0 Z\nCHIPLEY  CH IH1 P - L IY0\nCHIPMAKER  CH IH1 P - M EY2 - K ER0\nCHIPMAKERS  CH IH1 P - M EY2 - K ER0 Z\nCHIPMAN  CH IH1 P - M AH0 N\nCHIPOTE  CH IH0 - P OW1 T\nCHIPPED  CH IH1 P T\nCHIPPER  CH IH1 - P ER0\nCHIPPEWA  CH IH1 - P AH0 - W AA2\nCHIPPING  CH IH1 - P IH0 NG\nCHIPPS  CH IH1 P S\nCHIPPY  CH IH1 - P IY0\nCHIPS  CH IH1 P S\nCHIPSOFT  CH IH1 P - S AO2 F T\nCHIQUITA  K IH0 - K W IY1 - T AH0\nCHIQUITA(2)  CH IH0 - K W IY1 - T AH0\nCHIQUITA(3)  CH IH0 - K IY1 - T AH0\nCHIRAC  SH IH0 - R AE1 K\nCHIRAC'S  SH IH0 - R AE1 K S\nCHIRCO  K IH1 R - K OW0\nCHIRICO  K IH0 - R IY1 - K OW0\nCHIRON  CH AY1 - R AH0 N\nCHIRON'S  CH AY1 - R AH0 N Z\nCHIROPRACTIC  K AY2 - R OW0 - P R AE1 K - T IH0 K\nCHIROPRACTOR  K AY1 - R AH0 - P R AE2 K - T ER0\nCHIROPRACTOR'S  K AY1 - R OW0 - P R AE2 K - T ER0 Z\nCHIROPRACTORS  K AY1 - R AH0 - P R AE2 K - T ER0 Z\nCHIRP  CH ER1 P\nCHIRPING  CH ER1 - P IH0 NG\nCHIRPS  CH ER1 P S\nCHIRPY  CH ER1 - P IY0\nCHISAM  CH IH1 - S AH0 M\nCHISEL  CH IH1 - Z AH0 L\nCHISELED  CH IH1 - Z AH0 L D\nCHISELS  CH IH1 - Z AH0 L Z\nCHISENHALL  CH IH0 - S EH1 N - HH AH0 L\nCHISHOLM  CH IH1 - Z AH0 M\nCHISLER  CH IH1 - S AH0 - L ER0\nCHISLER(2)  CH IH1 S - L ER0\nCHISLER(3)  CH IH1 Z - L ER0\nCHISM  CH IH1 - Z AH0 M\nCHISMAN  CH IH1 S - M AH0 N\nCHISMAR  CH IH1 Z - M ER0\nCHISOLM  CH IH1 - S OW0 M\nCHISOM  CH IH1 - S AH0 M\nCHISSANO  CH IH0 - S AA1 - N OW0\nCHISUM  CH IH1 - Z AH0 M\nCHIT  CH IH1 T\nCHITA  CH IY1 - T AH0\nCHITCHAT  CH IH1 T - CH AE2 T\nCHITINOUS  K AY1 - T AH0 - N AH0 S\nCHITRA  CH IH1 - T R AH0\nCHITRA'S  CH IH1 - T R AH0 Z\nCHITRAO  CH IH1 - T R AW0\nCHITS  CH IH1 T S\nCHITTENDEN  CH IH1 - T AH0 N - D AH0 N\nCHITTICK  CH IH1 - T IH0 K\nCHITTUM  CH IH1 - T AH0 M\nCHITTY  CH IH1 - T IY0\nCHITWOOD  CH IH1 T - W UH2 D\nCHIU  CH UW1\nCHIUSANO  K IY0 - UW0 - S AA1 - N OW0\nCHIVALRY  SH IH1 - V AH0 L - R IY0\nCHIVAS  CH IY1 - V AH0 S\nCHIVAS(2)  SH IY1 - V AH0 S\nCHIVERS  CH AY1 - V ER0 Z\nCHIVES  CH AY1 V Z\nCHIYODA  CH IH0 - Y OW1 - D AH0\nCHIZEK  CH IH1 - Z EH0 K\nCHIZMAR  CH IH1 Z - M ER0\nCHLAMYDIA  K L AE0 - M AY1 - D IY0 - AH0\nCHLAMYDIA(2)  K L AE0 - M IH1 - D IY0 - AH0\nCHLEBOWSKI  CH L IH0 - B AO1 F S - K IY0\nCHLEBOWSKI(2)  K L IH0 - B AO1 F S - K IY0\nCHLOE  K L OW1 - IY0\nCHLORATE  K L AO1 - R EY0 T\nCHLORDANE  K L AO1 R - D EY2 N\nCHLORIDE  K L AO1 - R AY0 D\nCHLORINATE  K L AO1 - R AH0 - N EY2 T\nCHLORINATED  K L AO1 - R AH0 - N EY2 - T AH0 D\nCHLORINATING  K L AO1 - R AH0 - N EY2 - T IH0 NG\nCHLORINE  K L AO1 - R IY0 N\nCHLORIS  K L AO1 - R IH0 S\nCHLOROFLUOROCARBON  K L AO0 - R OW0 - F L AO2 - R OW0 - K AA1 R - B AA0 N\nCHLOROFLUOROCARBONS  K L AO1 - R OW0 - F L AO1 - R OW0 - K AA1 R - B AA0 N Z\nCHLOROFORM  K L AO1 - R AH0 - F AO2 R M\nCHLOROPHYLL  K L AO1 - R AH0 - F IH0 L\nCHLOROPLAST  K L AO1 - R AH0 - P L AE2 S T\nCHLOROPLASTS  K L AO1 - R AH0 - P L AE2 S T S\nCHLOROPLASTS(2)  K L AO1 - R AH0 - P L AE2 S S\nCHLOROPLASTS(3)  K L AO1 - R AH0 - P L AE2 S\nCHLOROPRENE  K L AO1 - R AH0 - P R IY2 N\nCHMIEL  CH AH0 - M IY1 L\nCHMIELEWSKI  CH AH0 - M AH0 - L EH1 F S - K IY0\nCHMIELEWSKI(2)  CH AH0 - M AH0 - L UW1 S - K IY0\nCHMURA  CH AH0 - M UH1 - R AH0\nCHO  CH OW1\nCHOAT  CH OW1 T\nCHOATE  CH OW1 T\nCHOCK  CH AA1 K\nCHOCOLAT  CH AA1 K - L AH0 T\nCHOCOLATE  CH AO1 K - L AH0 T\nCHOCOLATES  CH AO1 K - L AH0 T S\nCHODOROW  CH OW1 - D ER0 - OW0\nCHOE  CH OW1\nCHOI  CH OY1\nCHOICE  CH OY1 S\nCHOICER  CH OY1 - S ER0\nCHOICERS  CH OY1 - S ER0 Z\nCHOICES  CH OY1 - S AH0 Z\nCHOICES(2)  CH OY1 - S IH0 Z\nCHOICEST  CH OY1 - S AH0 S T\nCHOINIERE  SH OY1 - N IY0 - EH0 R\nCHOINSKI  CH OY1 N - S K IY0\nCHOIR  K W AY1 - ER0\nCHOIRS  K W AY1 R Z\nCHOJNACKI  CH AH0 Y - N AA1 T S - K IY0\nCHOJNOWSKI  CH AH0 Y - N AO1 F S - K IY0\nCHOK  CH AA1 K\nCHOKE  CH OW1 K\nCHOKED  CH OW1 K T\nCHOKEHOLD  CH OW1 K - HH OW2 L D\nCHOKES  CH OW1 K S\nCHOKING  CH OW1 - K IH0 NG\nCHOLERA  K AA1 - L ER0 - AH0\nCHOLERIC  K AA1 - L ER0 - IH0 K\nCHOLESTEROL  K AH0 - L EH1 S - T ER0 - AO2 L\nCHOLESTEROL(2)  K AH0 - L EH1 - S T ER0 - AH0 L\nCHOLESTYRAMINE  CH OW0 - L EH1 - S T IH0 - R AH0 - M AY2 N\nCHOLET  CH OW1 - L AH0 T\nCHOLEWA  CH AH0 - L UW1 - AH0\nCHOLLA  CH AA1 - L AH0\nCHOMA  CH OW1 - M AH0\nCHOMP  CH AA1 M P\nCHOMPING  CH AA1 M - P IH0 NG\nCHON  CH AA1 N\nCHONG  CH AO1 NG\nCHONGQING  CH AO1 NG - K IH1 NG\nCHONKO  CH AA1 NG - K OW0\nCHONTALES  SH AA2 N - T EY1 L Z\nCHOO  CH UW1\nCHOON  CH UW1 N\nCHOONG  CH UW1 NG\nCHOOSE  CH UW1 Z\nCHOOSES  CH UW1 - Z AH0 Z\nCHOOSES(2)  CH UW1 - Z IH0 Z\nCHOOSING  CH UW1 - Z IH0 NG\nCHOOSY  CH UW1 - Z IY0\nCHOP  CH AA1 P\nCHOP-SUEY  CH AA1 P - S UW1 - IY0\nCHOPER  CH OW1 - P ER0\nCHOPIN  SH OW1 - P AE0 N\nCHOPLIN  CH AA1 P - L IH0 N\nCHOPP  CH AA1 P\nCHOPPED  CH AA1 P T\nCHOPPER  CH AA1 - P ER0\nCHOPPER'S  CH AA1 - P ER0 Z\nCHOPPERS  CH AA1 - P ER0 Z\nCHOPPING  CH AA1 - P IH0 NG\nCHOPPY  CH AA1 - P IY0\nCHOPRA  CH AA1 - P R AH0\nCHOPS  CH AA1 P S\nCHOPSTICK  CH AA1 P - S T IH2 K\nCHOPSTICKS  CH AA1 P - S T IH2 K S\nCHOPSUEY  CH AA1 P - S UW1 - IY0\nCHOQUETTE  SH AH0 - K EH1 T\nCHORAL  K AO1 - R AH0 L\nCHORALS  K AO1 - R AH0 L Z\nCHORBA  K AO1 R - B AH0\nCHORD  K AO1 R D\nCHORDATES  K AO1 R - D EY2 T S\nCHORDS  K AO1 R D Z\nCHORE  CH AO1 R\nCHOREOGRAPH  K AO1 - R IY0 - AH0 - G R AE2 F\nCHOREOGRAPHED  K AO1 - R IY0 - AH0 - G R AE2 F T\nCHOREOGRAPHER  K AO2 - R IY0 - AA1 - G R AH0 - F ER0\nCHOREOGRAPHER'S  K AO2 - R IY0 - AA1 - G R AH0 - F ER0 Z\nCHOREOGRAPHERS  K AO2 - R IY0 - AA1 - G R AH0 - F ER0 Z\nCHOREOGRAPHIC  K AO2 - R IY0 - AH0 - G R AE1 - F IH0 K\nCHOREOGRAPHING  K AO2 - R IY0 - AA1 - G R AH0 - F IH0 NG\nCHOREOGRAPHING(2)  K AO1 - R IY0 - AH0 - G R AE2 - F IH0 NG\nCHOREOGRAPHY  K AO2 - R IY0 - AA1 - G R AH0 - F IY0\nCHORES  CH AO1 R Z\nCHORIC  K AO1 - R IH0 K\nCHORNEY  K AO1 R - N IY0\nCHORTLE  CH AO1 R - T AH0 L\nCHORTLED  CH AO1 R - T AH0 L D\nCHORTLES  CH AO1 R - T AH0 L Z\nCHORTLING  CH AO1 R - T AH0 L - IH0 NG\nCHORTLING(2)  CH AO1 R T - L IH0 NG\nCHORUS  K AO1 - R AH0 S\nCHORUSES  K AO1 - R AH0 - S IH0 Z\nCHOSE  CH OW1 Z\nCHOSEN  CH OW1 - Z AH0 N\nCHOSUN  CH OW1 - Z AH0 N\nCHOTILLA  CH AH0 - T IH1 - L AH0\nCHOU  CH UW1\nCHOUINARD  SH W IY0 - N AA1 R D\nCHOVAN  CH OW1 - V AH0 N\nCHOVANEC  CH AH0 - V AE1 - N IH0 K\nCHOW  CH AW1\nCHOWDER  CH AW1 - D ER0\nCHOWDHURY  CH AW1 D - HH Y UW0 - R IY0\nCHOWNING  CH AW1 - N IH0 NG\nCHOWS  CH AW1 Z\nCHOY  CH OY1\nCHOYCE  CH OY1 S\nCHREST  K R EH1 S T\nCHRESTMAN  K R EH1 S T - M AH0 N\nCHRETIEN  SH R IH0 - T IY1 N\nCHRIBONIKO  CH R IY2 - B OW0 - N IY1 - K OW0\nCHRIBONIKO'S  CH R IY2 - B OW0 - N IY1 - K OW0 Z\nCHRIBONIKO'S(2)  CH R IH2 - B AH0 - N IY1 - K OW0 Z\nCHRIBONIKO(2)  CH R IH2 - B AH0 - N IY1 - K OW0\nCHRIPTOSPORIDIUM  K R IH2 P - T OW0 - S P AO0 - R IH1 - D IY0 - AH0 M\nCHRIS  K R IH1 S\nCHRIS'  K R IH1 S\nCHRISCO  K R IY1 - S K OW0\nCHRISCOE  K R IH1 - S K OW0\nCHRISMAN  K R IH1 S - M AH0 N\nCHRISMER  K ER1 - IH0 - Z AH0 - M ER0\nCHRISMER(2)  K R IH1 S - M ER0\nCHRISMON  K R IH1 Z - M AH0 N\nCHRISP  K R IH1 S P\nCHRISS  K R IH1 S\nCHRISSIE  K R IH1 - S IY0\nCHRISSY  K R IH1 - S IY0\nCHRIST  K R AY1 S T\nCHRIST'S  K R AY1 S T S\nCHRISTA  K R IH1 - S T AH0\nCHRISTABELLE  SH R IH1 - S T AH0 - B AH0 L\nCHRISTAKOS  K R IH1 - S T AH0 - K OW0 Z\nCHRISTAL  K R IH1 - S T AH0 L\nCHRISTCHURCH  K R AY1 S T - CH ER0 CH\nCHRISTEL  K R IH1 - S T AH0 L\nCHRISTEN  K R IH1 - S AH0 N\nCHRISTENBERRY  K R IH1 - S AH0 N - B EH2 - R IY0\nCHRISTENBURY  K R IH1 - S AH0 N - B EH2 - R IY0\nCHRISTENDOM  K R IH1 - S AH0 N - D AH0 M\nCHRISTENED  K R IH1 - S AH0 N D\nCHRISTENING  K R IH1 - S AH0 N - IH0 NG\nCHRISTENING(2)  K R IH1 S - N IH0 NG\nCHRISTENSEN  K R IH1 - S T AH0 N - S AH0 N\nCHRISTENSON  K R IH1 - S T IH0 N - S AH0 N\nCHRISTESON  K R IH1 - S T IH0 - S AH0 N\nCHRISTI  K R IH1 - S T IY0\nCHRISTIAAN  K R IH1 - S T IY0 - AA2 N\nCHRISTIAN  K R IH1 S - CH AH0 N\nCHRISTIAN(2)  K R IH1 S - CH IH0 N\nCHRISTIANA  K R IH2 - S T IY0 - AE1 - N AH0\nCHRISTIANE  K R IH0 - S T IY0 - AA1 N\nCHRISTIANITY  K R IH2 - S CH IY0 - AE1 - N IH0 - T IY0\nCHRISTIANIZATION  K R IH2 S - CH AH0 - N AH0 - Z EY1 - SH AH0 N\nCHRISTIANIZE  K R IH1 S - CH AH0 - N AY2 Z\nCHRISTIANIZED  K R IH1 S - CH AH0 - N AY2 Z D\nCHRISTIANNA  K R IH2 - S T IY0 - AE1 - N AH0\nCHRISTIANNE  K R IH0 - S T IY0 - AA1 N\nCHRISTIANO  K R IY0 - S T IY0 - AA1 - N OW0\nCHRISTIANS  K R IH1 S - CH AH0 N Z\nCHRISTIANS(2)  K R IH1 S - CH IH0 N Z\nCHRISTIANSEN  K R IH1 S - CH AH0 N - S AH0 N\nCHRISTIANSON  K R IH1 S - CH AH0 N - S AH0 N\nCHRISTIC  K R IH1 - S T IH0 K\nCHRISTIE  K R IH1 - S T IY0\nCHRISTIE'S  K R IH1 - S T IY0 Z\nCHRISTIES  K R IH1 - S T IY0 Z\nCHRISTINA  K R IH0 - S T IY1 - N AH0\nCHRISTINE  K R IH0 - S T IY1 N\nCHRISTINE'S  K R IH0 - S T IY1 N Z\nCHRISTISON  K R IH1 - S T IH0 - S AH0 N\nCHRISTLIEB  K R IH1 S T - L IY2 B\nCHRISTMAN  K R IH1 S T - M AH0 N\nCHRISTMAN'S  K R IH1 S T - M AH0 N Z\nCHRISTMANN  K R IH1 S T - M AH0 N\nCHRISTMAS  K R IH1 S - M AH0 S\nCHRISTMAS'  K R IH1 S - M AH0 S\nCHRISTMASES  K R IH1 S - M AH0 - S IH0 Z\nCHRISTMASTIME  K R IH1 S T - M AH0 S - T AY2 M\nCHRISTNER  K R IH1 S T - N ER0\nCHRISTO  K R IH1 - S T OW0\nCHRISTOFF  K R IH1 S T - AO0 F\nCHRISTOFFEL  K R IH1 - S T AH0 - F EH0 L\nCHRISTOFFERSEN  K R IH0 - S T AH0 - F ER1 - S AH0 N\nCHRISTOFFERSEN(2)  K R IH0 S T - AA1 - F ER0 - S AH0 N\nCHRISTOFFERSON  K R IH0 S T - AA1 - F ER0 - S AH0 N\nCHRISTON  K R IH1 - S T AH0 N\nCHRISTOPH  K R IH1 S T - AO0 F\nCHRISTOPHE  K R IH0 - S T R AO1 F\nCHRISTOPHEL  K R IH1 - S T AH0 - F EH0 L\nCHRISTOPHER  K R IH1 - S T AH0 - F ER0\nCHRISTOPHER'S  K R IH1 - S T AH0 - F ER0 Z\nCHRISTOPHERSEN  K R IH0 - S T AH0 - F ER1 - S AH0 N\nCHRISTOPHERSON  K R IH0 S T - AA1 - F ER0 - S AH0 N\nCHRISTOPOULOS  K R IH0 - S T AA1 - P AH0 - L IH0 S\nCHRISTY  K R IH1 - S T IY0\nCHRISTY'S  K R IH1 - S T IY0 Z\nCHRISWELL  K R IH1 - S W EH2 L\nCHROBAK  K R OW1 - B AH0 K\nCHROMAKALIM  CH R OW2 - M AH0 - K AA2 - L IY1 M\nCHROMALLOY  K R OW0 - M AE1 - L OY0\nCHROMATOGRAM  K R OW0 - M AE1 - T AH0 - G R AE0 M\nCHROMATOGRAMS  K R OW0 - M AE1 - T AH0 - G R AE0 M Z\nCHROMATOGRAPHY  K R OW0 - M AH0 - T AA1 - G R AH0 - F IY0\nCHROME  K R OW1 M\nCHROMINANCE  K R OW1 - M AH0 - N AH0 N S\nCHROMIUM  K R OW1 - M IY0 - AH0 M\nCHROMOSOME  K R OW1 - M AH0 - S OW2 M\nCHROMOSOME(2)  K R OW1 - M AH0 - Z OW2 M\nCHROMOSOMES  K R OW1 - M AH0 - Z OW2 M Z\nCHROMOSOMES(2)  K R OW1 - M AH0 - S OW2 M Z\nCHRONAR  K R AA1 - N ER0\nCHRONIC  K R AA1 - N IH0 K\nCHRONICALLY  K R AA1 - N IH0 - K AH0 - L IY0\nCHRONICALLY(2)  K R AA1 - N IH0 K - L IY0\nCHRONICLE  K R AA1 - N IH0 - K AH0 L\nCHRONICLE'S  K R AA1 - N IH0 - K AH0 L Z\nCHRONICLE(2)  K R AA1 - N IH0 - K AH0 L\nCHRONICLED  K R AA1 - N IH0 - K AH0 L D\nCHRONICLER  K R AA1 - N IH0 - K L ER0\nCHRONICLERS  K R AA1 - N IH0 - K L ER0 Z\nCHRONICLES  K R AA1 - N IH0 - K AH0 L Z\nCHRONICLES(2)  K R AA1 - N IH0 - K AH0 L Z\nCHRONICLING  K R AA1 - N IH0 - K L IH0 NG\nCHRONIS  K R OW1 - N IH0 S\nCHRONISTER  K R AA1 - N IH0 - S T ER0\nCHRONOLOGICAL  K R AA2 - N AH0 - L AA1 - JH IH0 - K AH0 L\nCHRONOLOGICALLY  K R AA2 - N AH0 - L AA1 - JH IH0 K - L IY0\nCHRONOLOGIES  K R AH0 - N AA1 - L AH0 - JH IY0 Z\nCHRONOLOGY  K R AH0 - N AA1 - L AH0 - JH IY0\nCHRONOWITZ  K R AA1 - N AH0 - W IH0 T S\nCHROSTOWSKI  K R AH0 S T - AO1 F S - K IY0\nCHRUSCIEL  K R AH1 - S IY2 L\nCHRYSANTHEMUM  K R IH0 - S AE1 N - TH AH0 - M AH0 M\nCHRYSANTHEMUMS  K R IH0 - S AE1 N - TH AH0 - M AH0 M Z\nCHRYSEIS  K R IH1 - S AH0 Z\nCHRYSLER  K R AY1 S - L ER0\nCHRYSLER'S  K R AY1 S - L ER0 Z\nCHRYSLERS  K R AY1 S - L ER0 Z\nCHRYST  CH R IH1 S T\nCHRYSTAL  K R IH1 - S T AH0 L\nCHRZAN  K ER1 - Z AE2 N\nCHRZANOWSKI  K ER2 - Z AH0 N - AO1 F S - K IY0\nCHSEING  CH EY1 NG\nCHU  CH UW1\nCHUA  K UW1 - AH0\nCHUA(2)  K W AA1\nCHUAH  CH UW1 - AA0\nCHUAN  CH UW2 - AA1 N\nCHUANG  CH AE1 NG\nCHUANG(2)  CH W AA1 NG\nCHUBA  CH UW1 - B AH0\nCHUBAIS  CH UW2 - B AY1\nCHUBB  CH AH1 B\nCHUBB'S  CH AH1 B Z\nCHUBBUCK  CH AH1 - B AH0 K\nCHUBBY  CH AH1 - B IY0\nCHUBU  CH UW1 - B UW0\nCHUCK  CH AH1 K\nCHUCK'S  CH AH1 K S\nCHUCK-A-LUCK  CH AH1 - K AH0 - L AH1 K\nCHUCKED  CH AH1 K T\nCHUCKIE  CH AH1 - K IY0\nCHUCKING  CH AH1 - K IH0 NG\nCHUCKLE  CH AH1 - K AH0 L\nCHUCKLED  CH AH1 - K AH0 L D\nCHUCKLES  CH AH1 - K AH0 L Z\nCHUCKLING  CH AH1 - K L IH0 NG\nCHUDLER  CH AH1 D - L ER0\nCHUDY  CH UW1 - D IY0\nCHUDZIK  CH AH1 D - Z IH0 K\nCHUDZINSKI  CH AH0 - JH IH1 N - S K IY0\nCHUG  CH AH1 G\nCHUGAI  CH UW0 - G AY1\nCHUGGED  CH AH1 G D\nCHUGGING  CH AH1 - G IH0 NG\nCHUGOKU  CH UW0 - G OW1 - K UW2\nCHUI  K UW1 - IH0\nCHUJITSUYA  CH UW2 - JH IY0 T - S UW0 - Y AH0\nCHUKCHI  CH UW1 K - CH IY0\nCHUL  CH AH1 L\nCHULA  CH UW1 - L AH0\nCHUM  CH AH1 M\nCHUMBLEY  CH AH1 M - B L IY0\nCHUMLEY  CH AH1 M - L IY0\nCHUMMY  CH AH1 - M IY0\nCHUMNEY  CH AH1 M - N IY0\nCHUMP  CH AH1 M P\nCHUMS  CH AH1 M Z\nCHUN  CH AH1 N\nCHUN'S  CH AH1 N Z\nCHUNG  CH AH1 NG\nCHUNG'S  CH AH1 NG Z\nCHUNK  CH AH1 NG K\nCHUNKS  CH AH1 NG K S\nCHUNKY  CH AH1 NG - K IY0\nCHUNN  CH AH1 N\nCHUNNEL  CH AH1 - N AH0 L\nCHUPP  CH AH1 P\nCHURA  CH UH1 - R AH0\nCHURCH  CH ER1 CH\nCHURCH'S  CH ER1 - CH AH0 Z\nCHURCHES  CH ER1 - CH AH0 Z\nCHURCHES'  CH ER1 - CH IH0 Z\nCHURCHES(2)  CH ER1 - CH IH0 Z\nCHURCHGOER  CH ER1 CH - G OW2 - ER0\nCHURCHGOERS  CH ER1 CH - G OW2 - ER0 Z\nCHURCHGOING  CH ER1 CH - G OW2 - IH0 NG\nCHURCHILL  CH ER1 - CH IH0 L\nCHURCHILL'S  CH ER1 - CH IH0 L Z\nCHURCHILL'S(2)  CH ER1 CH - HH IH0 L Z\nCHURCHILL(2)  CH ER1 CH - HH IH0 L\nCHURCHMAN  CH ER1 CH - M AH0 N\nCHURCHMEN  CH ER1 CH - M AH0 N\nCHURCHWELL  CH ER1 CH - W EH2 L\nCHURCHYARD  CH ER1 CH - Y AA2 R D\nCHURILLA  CH ER0 - IH1 - L AH0\nCHURKIN  CH ER1 - K AH0 N\nCHURKIN'S  CH ER1 - K AH0 N Z\nCHURLISH  CH ER1 - L IH0 SH\nCHURN  CH ER1 N\nCHURNED  CH ER1 N D\nCHURNING  CH ER1 - N IH0 NG\nCHURNS  CH ER1 N Z\nCHURRY  CH ER1 - IY0\nCHUSE  CH Y UW1 Z\nCHUSE(2)  CH UW1 Z\nCHUSMIR  CH UH0 S - M IH1 R\nCHUSTZ  CH AH1 S T S\nCHUTE  SH UW1 T\nCHUTES  SH UW1 T S\nCHUTNEY  CH AH1 T - N IY0\nCHUTZPAH  CH AH1 T - S P AA2\nCHUTZPAH(2)  HH UH1 T - S P AA2\nCHYKATKA  CH IY0 - K AA1 T - K AH0\nCHYNOWETH  CH IH1 - N AW0 - EH0 TH\nCHYRON  CH AY1 - R AH0 N\nCHYRON'S  CH AY1 - R AH0 N Z\nCIA  S IY1 - AH0\nCIACCIA  CH IY0 - AH0 - CH IY1 - AH0\nCIACCIA(2)  S IY0 - AH0 - S IY1 - AH0\nCIACCIO  CH AO1 - CH IY0 - OW0\nCIAMPA  CH AO1 M - P AH0\nCIAMPI  CH AO1 M - P IY0\nCIAN  SH IY1 N\nCIANCI  CH AO1 N - CH IY0\nCIANCIO  CH AO1 N - CH IY0 - OW0\nCIANCIOLA  CH AO1 N - CH OW0 - L AH0\nCIANCIOLO  CH AO1 N - CH OW0 - L OW0\nCIANCIULLI  CH AO1 N - CH UW0 - L IY0\nCIANI  CH AO1 - N IY0\nCIANO  CH IY0 - AA1 - N OW0\nCIAOBELLA  CH AW2 - B EH1 - L AH0\nCIARAMELLA  CH ER0 - AA0 - M EH1 - L AH0\nCIARAMITARO  CH ER1 - AA0 - M IY0 - T AA0 - R OW0\nCIARAVINO  CH ER0 - AA0 - V IY1 - N OW0\nCIARDI  CH ER1 - D IY0\nCIARLO  CH ER1 - L OW0\nCIAVARELLA  CH AH0 - V AA0 - R EH1 - L AH0\nCIBA  S IY1 - B AH0\nCIBA'S  S IY1 - B AH0 Z\nCIBA'S(2)  S AY1 - B AH0 Z\nCIBA(2)  S AY1 - B AH0\nCIBOROWSKI  CH IH0 - B ER0 - AO1 F S - K IY0\nCIBRO  S IH1 - B R OW0\nCIBULA  CH IY0 - B UW1 - L AH0\nCICADA  S AH0 - K EY1 - D AH0\nCICADAS  S IH0 - K EY1 - D AH0 Z\nCICALA  S IH0 - K AA1 - L AH0\nCICALESE  CH IY0 - K AA0 - L EY1 - Z IY0\nCICCARELLI  CH IY0 - K ER0 - EH1 - L IY0\nCICCARELLO  CH IY0 - K ER0 - EH1 - L OW0\nCICCARONE  S IH1 - K ER0 - OW2 N\nCICCO  S IH1 - K OW0\nCICCONE  CH IY0 - K OW1 - N IY0\nCICELY  S IH1 - S AH0 - L IY0\nCICERO  S IH1 - S ER0 - OW2\nCICERONE  S IH1 - S ER0 - OW2 N\nCICHOCKI  S IH0 - CH AA1 - K IY0\nCICHON  S IH1 - CH AH0 N\nCICHOWSKI  CH IH0 - HH AO1 F S - K IY0\nCICHY  S IH1 - CH IY0\nCICILY  CH IH1 - CH AH0 - L IY0\nCICIO  S IH1 - S IY0 - OW0\nCICIPPIO  S IH0 - S IH1 - P IY0 - OW0\nCID  S IH1 D\nCIDER  S AY1 - D ER0\nCIE  S IY1\nCIE(2)  S IY1 - AY1 - IY1\nCIEL  S IY1 L\nCIERA  S IY1 - R AH0\nCIERI  S IY1 - R IY0\nCIESIELSKI  CH EH0 - S IY1 L S - K IY0\nCIESLA  CH EH1 S - L AH0\nCIESLAK  CH EH1 S - L AH0 K\nCIESLEWICZ  CH EH1 S - L IH0 - V IH0 CH\nCIESLIK  CH EH1 S - L IH0 K\nCIESLINSKI  CH EH0 S - L IH1 N - S K IY0\nCIFELLI  S IH0 - F EH1 - L IY0\nCIFRA  S IH1 - F R AH0\nCIFUENTES  S IY0 F - W EH1 N - T EH0 S\nCIGA  S IY1 - G AH0\nCIGAR  S IH0 - G AA1 R\nCIGARETTE  S IH2 - G ER0 - EH1 T\nCIGARETTE'S  S IH2 - G ER0 - EH1 T S\nCIGARETTES  S IH2 - G ER0 - EH1 T S\nCIGARS  S IH0 - G AA1 R Z\nCIGNA  S IH1 G - N AH0\nCIGNA'S  S IH1 G - N AH0 Z\nCIHAK  S IH1 - HH AH0 K\nCIHLAR  S IH1 - L ER0\nCILAG  S IH1 - L AE0 G\nCILANTRO  S IH0 - L AE1 N - T R OW0\nCILCORP  S IH1 L - K AO0 R P\nCILENTO  S IH0 - L EH1 N - T OW0\nCILIATES  S IH1 - L IY0 - AH0 T S\nCILIBERTO  CH IY0 - L IY0 - B EH1 R - T OW0\nCILICIA  S IH0 - L IH1 - SH AH0\nCILLER  S IH1 - L ER0\nCILLEY  S IH1 - L IY0\nCILLO  S IH1 - L OW0\nCILLUFFO  S IH0 - L UW1 - F OW0\nCILVA  S IH1 L - V AH0\nCIMA  CH IY1 - M AH0\nCIMAGLIA  S IH0 - M AE1 - G L IY0 - AH0\nCIMARRON  S IH1 - M ER0 - AA2 N\nCIMENTS  S IH0 - M EH1 N T S\nCIMINERO  S IY2 - M IH0 - N EH1 - R OW0\nCIMINI  CH IY0 - M IY1 - N IY0\nCIMINO  CH IY0 - M IY1 - N OW0\nCIMMINO  CH IY0 - M IY1 - N OW0\nCIMO  CH IY1 - M OW0\nCIMORELLI  CH IY0 - M AO0 - R EH1 - L IY0\nCINA  CH IY1 - N AH0\nCINCH  S IH1 N CH\nCINCHED  S IH1 N CH T\nCINCINNATI  S IH2 N - S AH0 - N AE1 - T IY0\nCINCINNATI'S  S IH2 N - S IH0 - N AE1 - T IY0 Z\nCINCO  S IH1 NG - K OW0\nCINCOTTA  CH IY0 N - K OW1 - T AH0\nCINDER  S IH1 N - D ER0\nCINDERELLA  S IH2 N - D ER0 - EH1 - L AH0\nCINDERS  S IH1 N - D ER0 Z\nCINDIE  S AY1 N - D IY0\nCINDRIC  S IH1 N - D R IH0 K\nCINDY  S IH1 N - D IY0\nCINDY'S  S IH1 N - D IY0 Z\nCINELLI  S IH0 - N EH1 - L IY0\nCINEMA  S IH1 - N AH0 - M AH0\nCINEMA'S  S IH1 - N AH0 - M AH0 Z\nCINEMARK  S IH1 - N AH0 - M AA2 K\nCINEMAS  S IH1 - N AH0 - M AH0 Z\nCINEMATIC  S IH2 - N AH0 - M AE1 - T IH0 K\nCINEMATOGRAPHER  S IH2 - N IH0 - M AH0 - T AA1 - G R AH0 - F ER0\nCINEMATOGRAPHY  S IH2 - N IH0 - M AH0 - T AA1 - G R AH0 - F IY0\nCINEMAX  S IH1 - N AH0 - M AE0 K S\nCINEPLEX  S IH1 - N AH0 - P L EH2 K S\nCINEPLEX'S  S IH1 - N AH0 - P L EH2 K - S IH0 Z\nCINERGY  S IH1 - N ER0 - JH IY0\nCINI  CH IY1 - N IY0\nCINNABAR  S IH1 - N AH0 - B AA2 R\nCINNABON  S IH1 - N AH0 - B AO2 N\nCINNAMINSON  S IH1 - N AH0 - M IH0 N - S AH0 N\nCINNAMON  S IH1 - N AH0 - M AH0 N\nCINNAMONSON  S IH1 - N AH0 - M AH0 N - S AH0 N\nCINO  CH IY1 - N OW0\nCINQ  S IH1 NG K\nCINQUE  S IH1 NG K\nCINQUEMANI  CH IY0 N - K W EH0 - M AA1 - N IY0\nCINRAM  S IH1 N - R AE0 M\nCINTHIE  S IH1 N - TH IY0\nCINTRON  S IH1 N - T R AH0 N\nCIOCCA  CH OW1 - K AH0\nCIOFFI  CH IY0 - OW1 - F IY0\nCIOLEK  CH IY0 - OW1 - L EH0 K\nCIOLINO  CH OW0 - L IY1 - N OW0\nCIOTTI  CH OW1 - T IY0\nCIPHER  S AY1 - F ER0\nCIPOLLA  S IH0 - P AA1 - L AH0\nCIPOLLONE  S IH2 - P AH0 - L OW1 N\nCIPOLLONE(2)  S IH2 - P AH0 - L OW1 - N IY0\nCIPRI  S IH1 - P R IY0\nCIPRIANI  CH IY0 - P R IY0 - AA1 - N IY0\nCIPRIANO  CH IY0 - P R IY0 - AA1 - N OW0\nCIRA  S ER1 - AH0\nCIRAULO  S ER0 - AO1 - L OW0\nCIRCA  S ER1 - K AH0\nCIRCADIAN  S ER0 - K EY1 - D IY0 - AH0 N\nCIRCLE  S ER1 - K AH0 L\nCIRCLE'S  S ER1 - K AH0 L Z\nCIRCLED  S ER1 - K AH0 L D\nCIRCLES  S ER1 - K AH0 L Z\nCIRCLING  S ER1 - K AH0 L - IH0 NG\nCIRCLING(2)  S ER1 - K L IH0 NG\nCIRCON  S ER1 - K AA0 N\nCIRCUIT  S ER1 - K AH0 T\nCIRCUIT'S  S ER1 - K AH0 T S\nCIRCUITED  S ER1 - K AH0 - T IH0 D\nCIRCUITOUS  S ER0 - K Y UW1 - IH0 - T AH0 S\nCIRCUITRY  S ER1 - K AH0 - T R IY0\nCIRCUITS  S ER1 - K AH0 T S\nCIRCULAR  S ER1 - K Y AH0 - L ER0\nCIRCULARLY  S ER1 - K Y AH0 - L ER0 - L IY0\nCIRCULARS  S ER1 - K Y AH0 - L ER0 Z\nCIRCULATE  S ER1 - K Y AH0 - L EY2 T\nCIRCULATED  S ER1 - K Y AH0 - L EY2 - T AH0 D\nCIRCULATED(2)  S ER1 - K Y AH0 - L EY2 - T IH0 D\nCIRCULATES  S ER1 - K Y AH0 - L EY2 T S\nCIRCULATING  S ER1 - K Y AH0 - L EY2 - T IH0 NG\nCIRCULATION  S ER1 - K Y AH0 - L EY2 - SH AH0 N\nCIRCULATIONS  S ER2 - K Y AH0 - L EY1 - SH AH0 N Z\nCIRCULATORY  S ER1 - K Y AH0 - L AH0 - T AO2 - R IY0\nCIRCUMCISE  S ER1 - K AH0 M - S AY2 Z\nCIRCUMCISED  S ER1 - K AH0 M - S AY2 Z D\nCIRCUMCISION  S ER2 - K AH0 M - S IH1 - ZH AH0 N\nCIRCUMFERENCE  S ER0 - K AH1 M - F R AH0 N S\nCIRCUMSCRIBE  S ER2 - K AH0 M - S K R AY1 B\nCIRCUMSCRIBED  S ER2 - K AH0 M - S K R AY1 B D\nCIRCUMSPECT  S ER1 - K AH0 M - S P EH2 K T\nCIRCUMSPECTION  S ER2 - K AH0 M - S P EH1 K - SH AH0 N\nCIRCUMSTANCE  S ER1 - K AH0 M - S T AE2 N S\nCIRCUMSTANCES  S ER1 - K AH0 M - S T AE2 N - S AH0 Z\nCIRCUMSTANCES(2)  S ER1 - K AH0 M - S T AE2 N - S IH0 Z\nCIRCUMSTANTIAL  S ER2 - K AH0 M - S T AE1 N - CH AH0 L\nCIRCUMSTANTIAL(2)  S ER2 - K AH0 M - S T AE1 N - SH AH0 L\nCIRCUMSTANTIALLY  S ER2 - K AH0 M - S T AE1 N - CH AH0 - L IY0\nCIRCUMSTANTIALLY(2)  S ER2 - K AH0 M - S T AE1 N - SH AH0 - L IY0\nCIRCUMVENE  S ER2 - K AH0 M - V IY1 N\nCIRCUMVENT  S ER2 - K AH0 M - V EH1 N T\nCIRCUMVENTED  S ER2 - K AH0 M - V EH1 N - T IH0 D\nCIRCUMVENTING  S ER2 - K AH0 M - V EH1 N - T IH0 NG\nCIRCUMVENTION  S ER2 - K AH0 M - V EH1 N - CH AH0 N\nCIRCUMVENTS  S ER2 - K AH0 M - V EH1 N T S\nCIRCUS  S ER1 - K AH0 S\nCIRCUS'S  S ER1 - K AH0 - S IH0 Z\nCIRCUSES  S ER1 - K AH0 - S AH0 Z\nCIRELLI  S IH0 - R EH1 - L IY0\nCIRESI  S ER0 - EH1 - S IY0\nCIRIACO  S IH2 - R IY0 - AA1 - K OW0\nCIRIELLO  S ER0 - IY0 - EH1 - L OW0\nCIRIGLIANO  S ER0 - IY0 - G L IY0 - AA1 - N OW0\nCIRILLO  S IH0 - R IH1 - L OW0\nCIRINCIONE  S ER0 - IY0 N - CH OW1 - N IY0\nCIRINO  S ER0 - IY1 - N OW0\nCIRKIN  S ER1 - K IH0 N\nCIRONE  S IH0 - R OW1 N\nCIROS  S IH1 - R OW2 Z\nCIRQUE  S ER1 K\nCIRRHOSIS  S ER0 - OW1 - S AH0 S\nCIRRINCIONE  S ER0 - R IY0 N - CH OW1 - N IY0\nCIRRUS  S IH1 - R AH0 S\nCISAR  S IH0 - S AA1 R\nCISCO  S IH1 - S K OW0\nCISCO'S  S IH1 - S K OW0 Z\nCISEK  CH IH1 - S EH0 K\nCISEWSKI  CH IH0 - S EH1 F S - K IY0\nCISKEI  S IH0 - S K EY1\nCISLER  S IH1 - S AH0 - L ER0\nCISLER(2)  S IH1 S - L ER0\nCISLO  CH IY1 S - L OW0\nCISNEROS  S IH0 S - N EH1 - R OW0 S\nCISNEY  S IH1 Z - N IY0\nCISSELL  S IH1 - S AH0 L\nCISSIE  S IH1 - S IY0\nCISSNA  S IH1 S - N AH0\nCIST  S IH1 S T\nCISTERCIAN  S IH0 - S T ER1 - SH AH0 N\nCISTERN  S IH1 - S T ER0 N\nCISTERNS  S IH1 - S T ER0 N Z\nCISZEK  CH IH1 - SH EH0 K\nCISZEWSKI  CH IH0 - SH EH1 F S - K IY0\nCITADEL  S IH1 - T AH0 - D EH2 L\nCITADEL'S  S IH1 - T AH0 - D EH2 L Z\nCITATION  S AY0 - T EY1 - SH AH0 N\nCITATIONS  S AY0 - T EY1 - SH AH0 N Z\nCITE  S AY1 T\nCITED  S AY1 - T AH0 D\nCITED(2)  S AY1 - T IH0 D\nCITES  S AY1 T S\nCITGO  S IH1 T - G OW0\nCITI  S IH1 - T IY0\nCITIBANK  S IH1 - T IY0 - B AE2 NG K\nCITIBANK'S  S IH1 - T IY0 - B AE2 NG K S\nCITIC  S IH1 - T IH0 K\nCITICORP  S IH1 - T IY0 - K AO2 R P\nCITICORP'S  S IH1 - T IY0 - K AO2 R P S\nCITICORPS  S IH1 - T IY0 - K AO2 R P S\nCITICORPS'  S IH1 - T IY0 - K AO2 R P S\nCITIES  S IH1 - T IY0 Z\nCITIES'  S IH1 - T IY0 Z\nCITING  S AY1 - T IH0 NG\nCITISTEEL  S IH1 - T IY0 - S T IY2 L\nCITIZEN  S IH1 - T AH0 - Z AH0 N\nCITIZEN'S  S IH1 - T AH0 - Z AH0 N Z\nCITIZEN(2)  S IH1 - T IH0 - Z AH0 N\nCITIZENRY  S IH1 - T IH0 - Z AH0 N - R IY0\nCITIZENS  S IH1 - T AH0 - Z AH0 N Z\nCITIZENS'  S IH1 - T IH0 - Z AH0 N Z\nCITIZENS(2)  S IH1 - T IH0 - Z AH0 N Z\nCITIZENSHIP  S IH1 - T IH0 - Z AH0 N - SH IH2 P\nCITRANO  CH IY0 - T R AA1 - N OW0\nCITRIC  S IH1 - T R IH0 K\nCITRIN  S IH1 - T R IH0 N\nCITRINE  S IH2 - T R IY1 N\nCITRO  S IH1 - T R OW0\nCITROEN  S IH1 - T R OW0 N\nCITRON  S IH1 - T R AH0 N\nCITRON'S  S IH1 - T R AH0 N Z\nCITRON'S(2)  S IH1 - T R AA0 N Z\nCITRON(2)  S IH1 - T R AH0 N Z\nCITRONELLA  S IH2 - T R AA0 - N EH1 - L AH0\nCITROSUCO  S IH2 - T R AH0 - S UW1 - K OW0\nCITRUCEL  S IH1 - T R AH0 - S EH2 L\nCITRUCEL'S  S IH1 - T R AH0 - S EH2 L Z\nCITRUS  S IH1 - T R AH0 S\nCITRUS'S  S IH1 - T R AH0 - S AH0 Z\nCITRUS'S(2)  S IH1 - T R AH0 - S IH0 Z\nCITTADINO  CH IY0 - T AA0 - D IY1 - N OW0\nCITY  S IH1 - T IY0\nCITY'S  S IH1 - T IY0 Z\nCITYFED  S IH1 - T IY0 - F EH2 D\nCITYPLACE  S IH1 - T IY0 - P L EY2 S\nCITYSIDE  S IH1 - T IY0 - S AY2 D\nCITYTRUST  S IH1 - T IY0 - T R AH2 S T\nCITYWIDE  S IH1 - T IY0 - W AY2 D\nCIUCCI  CH UW1 - CH IY0\nCIUDAD  S IY2 - UW0 - D AE1 D\nCIULLA  CH UW1 - L AH0\nCIULLO  CH UW1 - L OW0\nCIVET  S IH1 - V AH0 T\nCIVIC  S IH1 - V IH0 K\nCIVICS  S IH1 - V IH0 K S\nCIVIL  S IH1 - V AH0 L\nCIVILETTI  S IY2 - V IH0 - L EH1 - T IY0\nCIVILIAN  S AH0 - V IH1 L - Y AH0 N\nCIVILIANS  S AH0 - V IH1 L - Y AH0 N Z\nCIVILITY  S AH0 - V IH1 - L AH0 - T IY0\nCIVILIZATION  S IH2 - V AH0 - L IH0 - Z EY1 - SH AH0 N\nCIVILIZATIONS  S IH2 - V AH0 - L IH0 - Z EY1 - SH AH0 N Z\nCIVILIZE  S IH1 - V AH0 - L AY2 Z\nCIVILIZED  S IH1 - V AH0 - L AY2 Z D\nCIVILLY  S IH1 - V IH0 - L IY0\nCIVITELLO  CH IY0 - V IY0 - T EH1 - L OW0\nCIZEK  CH IH1 - Z EH0 K\nCIZIK  S IY1 - Z IH0 K\nCIZNEROS  S IH2 Z - N EH1 - R OW0 S\nCLAAR  K L AA1 R\nCLAASSEN  K L AA1 - S AH0 N\nCLABAUGH  K L AE1 - B AO0\nCLABIR  K L AE1 - B IH0 R\nCLABO  K L AA1 - B OW0\nCLABORN  K L AE1 - B ER0 N\nCLABOUGH  K L AE1 - B AW0\nCLACK  K L AE1 K\nCLACKAMAS  K L AE1 - K AH0 - M AH0 S\nCLAD  K L AE1 D\nCLADDAGH  K L AE1 - D AH2\nCLAES  K L EY1 Z\nCLAEYS  K L EY1 Z\nCLAFFEY  K L AE1 - F IY0\nCLAFLIN  K L AE1 F - L IH0 N\nCLAGETT  K L AE1 - JH IH0 T\nCLAGG  K L AE1 G\nCLAGGETT  K L AE1 - G IH0 T\nCLAGUE  K L AA1 G\nCLAIBORN  K L EY1 - B ER0 N\nCLAIBORNE  K L EY1 - B ER0 N\nCLAIBORNE'S  K L EY1 - B AO0 R N Z\nCLAIBORNE'S(2)  K L EY1 - B ER0 N Z\nCLAIM  K L EY1 M\nCLAIMANT  K L EY1 - M AH0 N T\nCLAIMANTS  K L EY1 - M AH0 N T S\nCLAIMANTS'  K L EY1 - M AH0 N T S\nCLAIMED  K L EY1 M D\nCLAIMING  K L EY1 - M IH0 NG\nCLAIMS  K L EY1 M Z\nCLAIR  K L EH1 R\nCLAIRE  K L EH1 R\nCLAIRE'S  K L EH1 R Z\nCLAIRMONT  K L EH1 R - M AH0 N T\nCLAIROL  K L EH1 - R AA0 L\nCLAIRSON  K L EH1 R - S AH0 N\nCLAIRVOYANCE  K L EH0 R - V OY1 - AH0 N S\nCLAIRVOYANT  K L EH0 R - V OY1 - AH0 N T\nCLAM  K L AE1 M\nCLAMBER  K L AE1 M - B ER0\nCLAMBERED  K L AE1 M - B ER0 D\nCLAMEN  K L EY1 - M AH0 N\nCLAMMY  K L AE1 - M IY0\nCLAMOR  K L AE1 - M ER0\nCLAMORED  K L AE1 - M ER0 D\nCLAMORING  K L AE1 - M ER0 - IH0 NG\nCLAMP  K L AE1 M P\nCLAMPDOWN  K L AE1 M P - D AW2 N\nCLAMPED  K L AE1 M P T\nCLAMPING  K L AE1 M - P IH0 NG\nCLAMPITT  K L AH0 M - P IH1 T\nCLAMPS  K L AE1 M P S\nCLAMS  K L AE1 M Z\nCLAMSHELL  K L AE1 M - SH EH2 L\nCLAN  K L AE1 N\nCLANCEY  K L AE1 N - S IY0\nCLANCY  K L AE1 N - S IY0\nCLANCY'S  K L AE1 N - S IY0 Z\nCLANDESTINE  K L AE0 N - D EH1 - S T IH0 N\nCLANDESTINELY  K L AE0 N - D EH1 - S T AH0 N - L IY0\nCLANG  K L AE1 NG\nCLANGING  K L AE1 - NG IH0 NG\nCLANIN  K L AE1 - N IH0 N\nCLANK  K L AE1 NG K\nCLANKING  K L AE1 NG - K IH0 NG\nCLANNISH  K L AE1 - N IH0 SH\nCLANS  K L AE1 N Z\nCLANTON  K L AE1 N - T AH0 N\nCLAP  K L AE1 P\nCLAPBOARD  K L AE1 P - B AO2 R D\nCLAPBOARDS  K L AE1 P - B AO2 R D Z\nCLAPHAM  K L AE1 - F AH0 M\nCLAPMAN  K L AE1 P - M AH0 N\nCLAPP  K L AE1 P\nCLAPPED  K L AE1 P T\nCLAPPER  K L AE1 - P ER0\nCLAPPING  K L AE1 - P IH0 NG\nCLAPS  K L AE1 P S\nCLAPSADDLE  K L AE1 P - S AE2 - D AH0 L\nCLAPTON  K L AE1 P - T AH0 N\nCLAPTON'S  K L AE1 P - T AH0 N Z\nCLAR  K L AA1 R\nCLARA  K L AE1 - R AH0\nCLARA(2)  K L EH1 - R AH0\nCLARABELLE  K L AE1 - R AH0 - B AH0 L\nCLARABELLE(2)  K L AE1 - R AH0 - B EH2 L\nCLARAMAE  K L AA0 - R AA1 - M AY0\nCLARAN  K L EH1 - R AH0 N\nCLARCOR  K L AA1 R - K AO2 R\nCLARDY  K L AA1 R - D IY0\nCLARE  K L EH1 R\nCLAREMONT  K L EH1 R - M AA2 N T\nCLAREN  K L AE1 - R AH0 N\nCLARENCE  K L EH1 - R AH0 N S\nCLARENDON  K L EH1 - R AH0 N - D AH0 N\nCLARESTA  K L AA0 - R EH1 - S T AH0\nCLARETTE  K L ER0 - EH1 T\nCLAREY  K L AE1 - R IY0\nCLARIBEL  K L EH1 - R AH0 - B EH2 L\nCLARICE  K L ER0 - IY1 S\nCLARIDA  K L AA0 - R IY1 - D AH0\nCLARIDGE  K L EH1 - R IH0 JH\nCLARIDGES  K L EH1 - R IH0 - JH IH0 Z\nCLARIFICATION  K L EH2 - R AH0 - F AH0 - K EY1 - SH AH0 N\nCLARIFICATIONS  K L EH2 - R IH0 - F IH0 - K EY1 - SH AH0 N Z\nCLARIFIED  K L EH1 - R AH0 - F AY2 D\nCLARIFIES  K L EH1 - R AH0 - F AY2 Z\nCLARIFY  K L EH1 - R AH0 - F AY2\nCLARIFYING  K L EH1 - R AH0 - F AY2 - IH0 NG\nCLARIMOND  K L AE1 - R IH0 - M AH0 N D\nCLARINDA  K L ER0 - IH1 N - D AH0\nCLARINE  K L EH1 - R IY0 N\nCLARINET  K L EH2 - R AH0 - N EH1 T\nCLARINETIST  K L EH2 - R AH0 - N EH1 - T IH0 S T\nCLARINETISTS  K L EH2 - R AH0 - N EH1 - T IH0 S T S\nCLARINETISTS(2)  K L EH2 - R AH0 - N EH1 - T IH0 S S\nCLARINETISTS(3)  K L EH2 - R AH0 - N EH1 - T IH0 S\nCLARINS  K L EH1 - R IH0 N Z\nCLARION  K L EH1 - R IY0 - AH0 N\nCLARIS  K L EH1 - R IH0 S\nCLARISSA  K L ER0 - IH1 - S AH0\nCLARISSE  K L AE1 - R IH0 S\nCLARISSE(2)  K L AH0 - R IY1 S\nCLARITA  K L AA0 - R IY1 - T AH0\nCLARITIN  K L EH1 - R IH0 - T IH0 N\nCLARITY  K L EH1 - R AH0 - T IY0\nCLARITY(2)  K L EH1 - R IH0 - T IY0\nCLARK  K L AA1 R K\nCLARK'S  K L AA1 R K S\nCLARKE  K L AA1 R K\nCLARKE'S  K L AA1 R K S\nCLARKEN  K L AA1 R - K EH0 N\nCLARKIN  K L AA1 R - K IH0 N\nCLARKS  K L AA1 R K S\nCLARKSBURG  K L AA1 R K S - B ER0 G\nCLARKSON  K L AA1 R K - S AH0 N\nCLARKSTON  K L AA1 R K - S T AH0 N\nCLARKSVILLE  K L AA1 R K S - V IH2 L\nCLARO  K L AA1 - R OW0\nCLAROSTAT  K L EH1 - R AH0 - S T AE2 T\nCLARRIDGE  K L AE1 - R IH0 JH\nCLARRISSE  K L AE1 - R IH0 S\nCLARY  K L EH1 - R IY0\nCLASBY  K L AE1 S - B IY0\nCLASEN  K L EY1 - S AH0 N\nCLASH  K L AE1 SH\nCLASHED  K L AE1 SH T\nCLASHES  K L AE1 - SH IH0 Z\nCLASHING  K L AE1 - SH IH0 NG\nCLASON  K L AE1 - S AH0 N\nCLASP  K L AE1 S P\nCLASPED  K L AE1 S P T\nCLASS  K L AE1 S\nCLASS'S  K L AE1 - S IH0 Z\nCLASSACTION  K L AE1 - S AE1 K - SH AH0 N\nCLASSED  K L AE1 S T\nCLASSEN  K L AE1 - S AH0 N\nCLASSES  K L AE1 - S AH0 Z\nCLASSES(2)  K L AE1 - S IH0 Z\nCLASSIC  K L AE1 - S IH0 K\nCLASSICAL  K L AE1 - S IH0 - K AH0 L\nCLASSICALLY  K L AE1 - S IH0 K - L IY0\nCLASSICISM  K L AE1 - S IH0 - S IH2 - Z AH0 M\nCLASSICIST  K L AE1 - S AH0 - S AH0 S T\nCLASSICS  K L AE1 - S IH0 K S\nCLASSIER  K L AE1 - S IY0 - ER0\nCLASSIFIABLE  K L AE1 - S AH0 - F AY2 - AH0 - B AH0 L\nCLASSIFICATION  K L AE2 - S AH0 - F AH0 - K EY1 - SH AH0 N\nCLASSIFICATIONS  K L AE2 - S AH0 - F AH0 - K EY1 - SH AH0 N Z\nCLASSIFIED  K L AE1 - S AH0 - F AY2 D\nCLASSIFIES  K L AE1 - S AH0 - F AY2 Z\nCLASSIFY  K L AE1 - S AH0 - F AY2\nCLASSIFYING  K L AE1 - S AH0 - F AY2 - IH0 NG\nCLASSING  K L AE1 - S IH0 NG\nCLASSLESS  K L AE1 S - L AH0 S\nCLASSMATE  K L AE1 S - M EY2 T\nCLASSMATES  K L AE1 S - M EY2 T S\nCLASSON  K L AE1 - S AH0 N\nCLASSROOM  K L AE1 S - R UW2 M\nCLASSROOMS  K L AE1 S - R UW2 M Z\nCLASSY  K L AE1 - S IY0\nCLATTER  K L AE1 - T ER0\nCLAUD  K L AO1 D\nCLAUDE  K L AO1 D\nCLAUDET  K L AO0 - D EH1 T\nCLAUDETTE  K L OW0 - D EH1 T\nCLAUDIA  K L AO1 - D IY0 - AH0\nCLAUDIAN  K L AO1 - D IY0 - AH0 N\nCLAUDIE  K L AO1 - D IY0\nCLAUDINA  K L AO1 - D IH0 - N AH0\nCLAUDINA(2)  K L AO0 - D IY1 - N AH0\nCLAUDINE  K L AO0 - D IY1 N\nCLAUDIO  K L AO1 - D IY0 - OW2\nCLAUDIUS  K L AO1 - D IY0 - AH0 S\nCLAUDSON  K L AO1 D - S AH0 N\nCLAUNCH  K L AO1 N CH\nCLAUS  K L AO1 Z\nCLAUS'  K L AO1 Z\nCLAUSE  K L AO1 Z\nCLAUSELL  K L AO1 - Z AH0 L\nCLAUSEN  K L AW1 - S AH0 N\nCLAUSER  K L AO1 - Z ER0\nCLAUSES  K L AO1 - Z AH0 Z\nCLAUSES(2)  K L AO1 - Z IH0 Z\nCLAUSING  K L AO1 - Z IH0 NG\nCLAUSON  K L AO1 - Z AH0 N\nCLAUSS  K L AO1 S\nCLAUSSEN  K L AO1 Z - S AH0 N\nCLAUSTROPHOBIA  K L AO2 - S T R AH0 - F OW1 - B IY0 - AH0\nCLAUSTROPHOBIC  K L AO2 - S T R AH0 - F OW1 - B IH0 K\nCLAVETTE  K L AH0 - V EH1 T\nCLAVICHORD  K L AE1 - V AH0 - K AO2 R D\nCLAVICLE  K L AE1 - V AH0 - K AH0 L\nCLAVICLE(2)  K L AE1 - V IH0 - K AH0 L\nCLAVIN  K L AE1 - V IH0 N\nCLAW  K L AO1\nCLAWED  K L AO1 D\nCLAWING  K L AO1 - IH0 NG\nCLAWS  K L AO1 Z\nCLAWSON  K L AO1 - S AH0 N\nCLAXON  K L AE1 K - S AH0 N\nCLAXTON  K L AE1 K - S T AH0 N\nCLAY  K L EY1\nCLAYBAUGH  K L EY1 - B AO2\nCLAYBORN  K L EY1 - B ER0 N\nCLAYBORNE  K L EY1 - B ER0 N\nCLAYBOURNE  K L EY1 - B ER0 N\nCLAYBROOK  K L EY1 - B R UH2 K\nCLAYBROOKS  K L EY1 - B R UH2 K S\nCLAYBURN  K L EY1 - B ER2 N\nCLAYCOMB  K L EY1 - K AH0 M\nCLAYEY  K L EY1 - IY0\nCLAYMAN  K L EY1 - M AH0 N\nCLAYMATION  K L EY1 - M EY2 - SH AH0 N\nCLAYMONT  K L EY1 - M AA2 N T\nCLAYMORE  K L EY1 - M AO2 R\nCLAYPOOL  K L EY1 - P UW2 L\nCLAYPOOLE  K L EY1 - P UW2 L\nCLAYS  K L EY1 Z\nCLAYSON  K L EY1 - Z AH0 N\nCLAYTON  K L EY1 - T AH0 N\nCLAYTON'S  K L EY1 - T AH0 N Z\nCLAYTOR  K L EY1 - T ER0\nCLAYWELL  K L EY1 - W EH2 L\nCLEAH  K IY1 - AH0\nCLEAN  K L IY1 N\nCLEANED  K L IY1 N D\nCLEANER  K L IY1 - N ER0\nCLEANERS  K L IY1 - N ER0 Z\nCLEANEST  K L IY1 - N AH0 S T\nCLEANING  K L IY1 - N IH0 NG\nCLEANLINESS  K L EH1 N - L IY0 - N IH0 S\nCLEANLY  K L IY1 N - L IY0\nCLEANNESS  K L IY1 - N N IH0 S\nCLEANNESS(2)  K L IY1 - N IH0 S\nCLEANS  K L IY1 N Z\nCLEANSE  K L EH1 N Z\nCLEANSED  K L EH1 N Z D\nCLEANSER  K L EH1 N - Z ER0\nCLEANSERS  K L EH1 N - Z ER0 Z\nCLEANSING  K L EH1 N - Z IH0 NG\nCLEANTHA  K L IY1 N - TH AH0\nCLEANUP  K L IY1 N - AH2 P\nCLEANUPS  K L IY1 N - AH2 P S\nCLEAR  K L IH1 R\nCLEARANCE  K L IH1 - R AH0 N S\nCLEARANCES  K L IH1 - R AH0 N - S IH0 Z\nCLEARCUT  K L IH1 R - K AH2 T\nCLEARCUTS  K L IH1 R - K AH2 T S\nCLEARCUTTING  K L IH1 R - K AH2 - T IH0 NG\nCLEARED  K L IH1 R D\nCLEARER  K L IH1 - R ER0\nCLEAREST  K L IH1 - R IH0 S T\nCLEARING  K L IH1 - R IH0 NG\nCLEARINGHOUSE  K L IH1 - R IH0 NG - HH AW2 S\nCLEARINGHOUSES  K L IY1 - R IH0 NG - HH AW2 - S IH0 Z\nCLEARLY  K L IH1 R - L IY0\nCLEARMAN  K L IH1 R - M AH0 N\nCLEARS  K L IH1 R Z\nCLEARWATER  K L IH1 R - W AO2 - T ER0\nCLEARY  K L IH1 - R IY0\nCLEAT  K L IY1 T\nCLEATS  K L IY1 T S\nCLEAVAGE  K L IY1 - V AH0 JH\nCLEAVAGE(2)  K L IY1 - V IH0 JH\nCLEAVE  K L IY1 V\nCLEAVELAND  K L IY1 V - L AH0 N D\nCLEAVENGER  K L IY1 - V IH0 N - JH ER0\nCLEAVER  K L IY1 - V ER0\nCLEAVES  K L IY1 V Z\nCLECKLER  K L EH1 K - L ER0\nCLECKLEY  K L EH1 K - L IY0\nCLECKNER  K L EH1 K - N ER0\nCLEEK  K L IY1 K\nCLEERE  K L IH1 R\nCLEESE  K L IY1 S\nCLEETON  K L IY1 - T AH0 N\nCLEF  K L EH1 F\nCLEFT  K L EH1 F T\nCLEGG  K L EH1 G\nCLEGHORN  K L EH1 G - HH ER0 N\nCLELAND  K L EH1 - L AH0 N D\nCLELL  K L EH1 L\nCLELLAND  K L EH1 - L AH0 N D\nCLEM  K L EH1 M\nCLEMANS  K L EH1 - M AH0 N Z\nCLEMATIS  K L EH1 - M AH0 - T IH0 S\nCLEMATIS(2)  K L AH0 - M AE1 - T IH0 S\nCLEMEN  K L EH1 - M AH0 N\nCLEMENCE  K L EH1 - M AH0 N S\nCLEMENCY  K L EH1 - M AH0 N - S IY0\nCLEMENS  K L EH1 - M AH0 N Z\nCLEMENSEN  K L EH1 - M AH0 N - S AH0 N\nCLEMENSON  K L EH1 - M IH0 N - S AH0 N\nCLEMENT  K L EH1 - M AH0 N T\nCLEMENTE  K L AH0 - M EH1 N - T EY0\nCLEMENTI  K L EY0 - M EY1 N - T IY0\nCLEMENTIA  K L EY0 - M EY1 N - SH AH0\nCLEMENTINE  K L EH1 - M AH0 N - T AY2 N\nCLEMENTS  K L EH1 - M AH0 N T S\nCLEMENTSON  K L EH1 - M IH0 N T - S AH0 N\nCLEMENTZ  K L EH1 - M IH0 N T S\nCLEMMER  K L EH1 - M ER0\nCLEMMIE  K L EH1 - M IY0\nCLEMMONS  K L EH1 - M AH0 N Z\nCLEMMY  K L EH1 - M IY0\nCLEMO  K L EY1 - M OW0\nCLEMONS  K L EH1 - M AH0 N Z\nCLEMSON  K L EH1 M - S AH0 N\nCLENCH  K L EH1 N CH\nCLENCHED  K L EH1 N CH T\nCLENCHER  K L EH1 N - CH ER0\nCLENCHES  K L EH1 N - CH AH0 Z\nCLENDANIEL  K L EH1 N - D AH0 - N IY2 L\nCLENDENEN  K L EH1 N - D AH0 - N AH0 N\nCLENDENIN  K L EH1 N - D IH0 - N IH0 N\nCLENDENING  K L EH1 N - D AH0 - N IH0 NG\nCLENDENNING  K L EH2 N - D EH1 - N IH0 NG\nCLENNEY  K L EH1 - N IY0\nCLENWAR  K L EH1 N - W ER0\nCLEO  K L IY1 - OW0\nCLEOPATRA  K L IY2 - AH0 - P AE1 - T R AH0\nCLEOPATRA'S  K L IY2 - AH0 - P AE1 - T R AH0 Z\nCLEPHANE  K L EH1 - F EY2 N\nCLEPPER  K L EH1 - P ER0\nCLERC  K L ER1 K\nCLERCQ  K L ER1 K\nCLERGY  K L ER1 - JH IY0\nCLERGYMAN  K L ER1 - JH IY0 - M AH0 N\nCLERGYMAN(2)  K L ER1 - JH IY0 - M AE2 N\nCLERGYMEN  K L ER1 - JH IY0 - M IH0 N\nCLERGYMEN(2)  K L ER1 - JH IY0 - M EH2 N\nCLERIC  K L EH1 - R IH0 K\nCLERICAL  K L EH1 - R AH0 - K AH0 L\nCLERICAL(2)  K L EH1 - R IH0 - K AH0 L\nCLERICS  K L EH1 - R IH0 K S\nCLERISSA  K L ER0 - IY1 - S AH0\nCLERK  K L ER1 K\nCLERK'S  K L ER1 K S\nCLERKIN  K L ER1 - K IH0 N\nCLERKS  K L ER1 K S\nCLERKS'  K L ER1 K S\nCLERMONT  K L EH1 R - M AA2 N T\nCLEVA  K L IY1 - V AH0\nCLEVE  K L IY1 V\nCLEVELAND  K L IY1 V - L AH0 N D\nCLEVELAND'S  K L IY1 V - L AH0 N D Z\nCLEVELANDER  K L IY1 V - L AH0 N - D ER0\nCLEVELANDERS  K L IY1 V - L AH0 N - D ER0 Z\nCLEVEN  K L IY1 - V AH0 N\nCLEVENGER  K L EH1 - V IH0 N - JH ER0\nCLEVER  K L EH1 - V ER0\nCLEVERLY  K L EH1 - V ER0 - L IY0\nCLEVERNESS  K L EH1 - V ER0 - N AH0 S\nCLEVETRUST  K L IY1 V - T R AH1 S T\nCLEVIE  K L IY1 - V IY0\nCLEVINGER  K L EH1 - V IH0 - NG ER0\nCLEVITE  K L AH0 - V AY1 T\nCLEVITE'S  K L AH0 - V AY1 T S\nCLEWELL  K L EH1 - W EH0 L\nCLEWIS  K L UW1 - IH0 S\nCLEWS  K L UW1 Z\nCLIANTHA  K L IY0 - AE1 N - TH AH0\nCLIBURN  K L AY1 - B ER0 N\nCLICHE  K L IY0 - SH EY1\nCLICHED  K L IY2 - SH EY1 D\nCLICHES  K L IY0 - SH EY1 Z\nCLICK  K L IH1 K\nCLICKED  K L IH1 K T\nCLICKER  K L IH1 - K ER0\nCLICKING  K L IH1 - K IH0 NG\nCLICKNER  K L IH1 K - N ER0\nCLICKS  K L IH1 K S\nCLIENT  K L AY1 - AH0 N T\nCLIENT'S  K L AY1 - AH0 N T S\nCLIENTELE  K L AY2 - AH0 N - T EH1 L\nCLIENTS  K L AY1 - AH0 N T S\nCLIENTS'  K L AY1 - AH0 N T S\nCLIETT  K L IY1 T\nCLIF  K L IH1 F\nCLIFF  K L IH1 F\nCLIFF'S  K L IH1 F S\nCLIFFE  K L IH1 F\nCLIFFHANGER  K L IH1 F - HH AE2 - NG ER0\nCLIFFHANGERS  K L IH1 F - HH AE2 - NG ER0 Z\nCLIFFORD  K L IH1 - F ER0 D\nCLIFFORD'S  K L IH1 - F ER0 D Z\nCLIFFS  K L IH1 F S\nCLIFFS'  K L IH1 F S\nCLIFT  K L IH1 F T\nCLIFTON  K L IH1 F - T AH0 N\nCLIGGOTT  K L IH1 - G AH0 T\nCLIM  K L IH1 M\nCLIMACO  K L IH1 - M AH0 - K OW0\nCLIMACTIC  K L AY0 - M AE1 K - T IH0 K\nCLIMATE  K L AY1 - M AH0 T\nCLIMATE(2)  K L AY1 - M IH0 T\nCLIMATES  K L AY1 - M AH0 T S\nCLIMATES(2)  K L AY1 - M IH0 T S\nCLIMATIC  K L AY0 - M AE1 - T IH0 K\nCLIMATOLOGIST  K L IH2 - M AH0 - T AA1 - L AH0 - JH IH0 S T\nCLIMATOLOGIST(2)  K L AY2 - M AH0 - T AA1 - L AH0 - JH IH0 S T\nCLIMAX  K L AY1 - M AE2 K S\nCLIMAXED  K L AY1 - M AE2 K S T\nCLIMAXES  K L IH1 - M AE0 K - S IH0 Z\nCLIMAXES(2)  K L AY1 - M AE0 K - S IH0 Z\nCLIMB  K L AY1 M\nCLIMBED  K L AY1 M D\nCLIMBER  K L AY1 - M ER0\nCLIMBERS  K L AY1 - M ER0 Z\nCLIMBERS'  K L AY1 - M ER0 Z\nCLIMBING  K L AY1 - M IH0 NG\nCLIMBS  K L AY1 M Z\nCLIMER  K L AY1 - M ER0\nCLIMES  K L AY1 M Z\nCLINARD  K L IH1 - N ER0 D\nCLINCH  K L IH1 N CH\nCLINCHED  K L IH1 N CH T\nCLINCHER  K L IH1 N - CH ER0\nCLINCHES  K L IH1 N - CH AH0 Z\nCLINCHES(2)  K L IH1 N - CH IH0 Z\nCLINCHING  K L IH1 N - CH IH0 NG\nCLINE  K L AY1 N\nCLINES  K L AY1 N Z\nCLINES'S  K L AY1 N - Z IH0 Z\nCLING  K L IH1 NG\nCLINGAN  K L IH1 NG - G AH0 N\nCLINGENPEEL  K L IH0 NG - G EH1 N - P IY0 L\nCLINGER  K L IH1 - NG ER0\nCLINGERMAN  K L IH1 - NG ER0 - M AH0 N\nCLINGING  K L IH1 - NG IH0 NG\nCLINGMAN  K L IH1 NG - M AH0 N\nCLINGS  K L IH1 NG Z\nCLINI  K L IY1 - N IY0\nCLINIC  K L IH1 - N IH0 K\nCLINIC'S  K L IH1 - N IH0 K S\nCLINICAL  K L IH1 - N AH0 - K AH0 L\nCLINICAL'S  K L IH1 - N IH0 - K AH0 L Z\nCLINICAL(2)  K L IH1 - N IH0 - K AH0 L\nCLINICALLY  K L IH1 - N IH0 - K AH0 - L IY0\nCLINICALLY(2)  K L IH1 - N IH0 K - L IY0\nCLINICIAN  K L IH0 - N IH1 - SH AH0 N\nCLINICIANS  K L IH0 - N IH1 - SH AH0 N Z\nCLINICS  K L IH1 - N IH0 K S\nCLINK  K L IH1 NG K\nCLINKENBEARD  K L IH0 NG - K EH1 N - B ER0 D\nCLINKSCALE  K L IH1 NG K - S K EY2 L\nCLINKSCALES  K L IH1 NG K S - K EY2 L Z\nCLINT  K L IH1 N T\nCLINTON  K L IH1 N - T AH0 N\nCLINTON'S  K L IH1 N - T AH0 N Z\nCLINTONITE  K L IH1 N - T AH0 - N AY2 T\nCLINTONITES  K L IH1 N - T AH0 - N AY2 T S\nCLINTONOMICS  K L IH2 N - T AH0 - N AA1 - M IH0 K S\nCLINTONS  K L IH1 N - T AH0 N Z\nCLINTONS'  K L IH1 N - T AH0 N Z\nCLIO  K L IY1 - OW0\nCLIP  K L IH1 P\nCLIPBOARD  K L IH1 P - B AO2 R D\nCLIPPARD  K L IH1 - P ER0 D\nCLIPPED  K L IH1 P T\nCLIPPER  K L IH1 - P ER0\nCLIPPERS  K L IH1 - P ER0 Z\nCLIPPING  K L IH1 - P IH0 NG\nCLIPPINGER  K L IH1 - P IH0 - NG ER0\nCLIPPINGS  K L IH1 - P IH0 NG Z\nCLIPS  K L IH1 P S\nCLIQUE  K L IY1 K\nCLIQUES  K L IH1 K S\nCLITES  K L AY1 T S\nCLITORIS  K L AY0 - T AO1 - R IH0 S\nCLIVE  K L AY1 V\nCLIVER  K L AY1 - V ER0\nCLOAK  K L OW1 K\nCLOAKED  K L OW1 K T\nCLOAKING  K L OW1 - K IH0 NG\nCLOAKROOM  K L OW1 K - R UW2 M\nCLOBBER  K L AA1 - B ER0\nCLOBBERED  K L AA1 - B ER0 D\nCLOBBERING  K L AA1 - B ER0 - IH0 NG\nCLOCK  K L AA1 K\nCLOCK'S  K L AA1 K S\nCLOCKED  K L AA1 K T\nCLOCKER  K L AA1 - K ER0\nCLOCKERS  K L AA1 - K ER0 Z\nCLOCKS  K L AA1 K S\nCLOCKWISE  K L AA1 K - W AY2 Z\nCLOCKWORK  K L AA1 K - W ER2 K\nCLODFELTER  K L AA1 D - F EH2 L - T ER0\nCLODOVEO  K L OW0 - D OW1 - V IY0 - OW0\nCLOE  K L OW1\nCLOER  K L OW1 - ER0\nCLOEY  K L OW1 - IY0\nCLOG  K L AA1 G\nCLOGGED  K L AO1 G D\nCLOGGING  K L AA1 - G IH0 NG\nCLOGGING(2)  K L AO1 - G IH0 NG\nCLOGS  K L AA1 G Z\nCLOGSTON  K L AA1 G - S T AH0 N\nCLOHERTY  K L AA1 - HH ER0 - T IY0\nCLOHESSY  K L AA1 - HH IH0 - S IY0\nCLOISTER  K L OY1 - S T ER0\nCLOISTERED  K L OY1 - S T ER0 D\nCLOISTERS  K L OY1 - S T ER0 Z\nCLOKE  K L OW1 K\nCLOMIPRAMINE  K L OW1 - M IH0 - P R AH0 - M AY2 N\nCLONCH  K L AA1 N CH\nCLONE  K L OW1 N\nCLONED  K L OW1 N D\nCLONES  K L OW1 N Z\nCLONES'  K L OW1 N Z\nCLONIDINE  K L AA1 - N IH0 - D IY2 N\nCLONING  K L OW1 - N IH0 NG\nCLONINGER  K L OW1 - N IH0 - NG ER0\nCLONTS  K L AA1 N T S\nCLONTZ  K L AA1 N T S\nCLOONAN  K L UW1 - N AH0 N\nCLOONEY  K L UW1 - N IY0\nCLOOTIE  K L UW1 - T IY0\nCLOPPER  K L AA1 - P ER0\nCLOPTON  K L AA1 P - T AH0 N\nCLORE  K L AO1 R\nCLORE'S  K L AO1 R Z\nCLORINDA  K L AO0 - R IY1 N - D AH0\nCLOROX  K L AO1 - R AA0 K S\nCLOS  K L AA1 S\nCLOSE  K L OW1 S\nCLOSE(2)  K L OW1 Z\nCLOSE-UP  K L OW1 - S AH2 P\nCLOSED  K L OW1 Z D\nCLOSEDOWN  K L OW1 Z - D AW2 N\nCLOSEDOWNS  K L OW1 Z - D AW2 N Z\nCLOSELY  K L OW1 S - L IY0\nCLOSENESS  K L OW1 S - N IH0 S\nCLOSER  K L OW1 - S ER0\nCLOSER(2)  K L OW1 - Z ER0\nCLOSES  K L OW1 - Z IH0 Z\nCLOSEST  K L OW1 - S AH0 S T\nCLOSET  K L AA1 - Z AH0 T\nCLOSETED  K L AA1 - Z AH0 - T IH0 D\nCLOSETS  K L AA1 - Z AH0 T S\nCLOSEUP  K L OW1 - S AH1 P\nCLOSEUPS  K L OW1 - S AH1 P S\nCLOSING  K L OW1 - Z IH0 NG\nCLOSINGS  K L OW1 - Z IH0 NG Z\nCLOSS  K L AO1 S\nCLOSSER  K L AO1 - S ER0\nCLOSSON  K L AA1 - S AH0 N\nCLOSURE  K L OW1 - ZH ER0\nCLOSURES  K L OW1 - ZH ER0 Z\nCLOT  K L AA1 T\nCLOTFELTER  K L AA1 T - F EH2 L - T ER0\nCLOTH  K L AO1 TH\nCLOTHE  K L OW1 DH\nCLOTHED  K L OW1 DH D\nCLOTHES  K L OW1 DH Z\nCLOTHES(2)  K L OW1 Z\nCLOTHESHORSE  K L OW1 Z - HH AO2 R S\nCLOTHESTIME  K L OW1 DH Z - T AY1 M\nCLOTHIER  K L OW1 - DH Y ER0\nCLOTHIERS  K L OW1 - DH Y ER0 Z\nCLOTHILDA  K L AH0 - TH IH1 L - D AH0\nCLOTHILDE  K L AA1 - TH IH0 L D\nCLOTHING  K L OW1 - DH IH0 NG\nCLOTHS  K L AO1 TH S\nCLOTILDA  K L AH0 - T IH1 L - D AH0\nCLOTS  K L AA1 T S\nCLOTT  K L AA1 T\nCLOTTED  K L AA1 - T AH0 D\nCLOTTED(2)  K L AA1 - T IH0 D\nCLOTTING  K L AA1 - T IH0 NG\nCLOTURE  K L OW1 - CH ER0\nCLOUATRE  K L AW1 - AH0 T R\nCLOUD  K L AW1 D\nCLOUDBURST  K L AW1 D - B ER2 S T\nCLOUDED  K L AW1 - D IH0 D\nCLOUDINESS  K L AW1 - D IY0 - N IH0 S\nCLOUDING  K L AW1 - D IH0 NG\nCLOUDLESS  K L AW1 D - L AH0 S\nCLOUDS  K L AW1 D Z\nCLOUDY  K L AW1 - D IY0\nCLOUGH  K L AW1\nCLOUGHERTY  K L AW1 - ER0 - T IY0\nCLOUSE  K L AW1 S\nCLOUSER  K L AW1 - S ER0\nCLOUT  K L AW1 T\nCLOUTHIER  K L AW1 - TH IY0 - ER0\nCLOUTHIER(2)  K L OW1 - TH IY0 - ER0\nCLOUTHIER(3)  K L OW1 - DH IY0 - ER0\nCLOUTIER  K L AW1 - T IY0 - ER0\nCLOVER  K L OW1 - V ER0\nCLOVERLEAF  K L OW1 - V ER0 - L IY2 F\nCLOVES  K L OW1 V Z\nCLOVIS  K L OW1 - V IH0 S\nCLOW  K L OW1\nCLOWARD  K L OW1 - W ER0 D\nCLOWDUS  K L AW1 - D IH0 S\nCLOWER  K L AW1 - ER0\nCLOWERS  K L AW1 - ER0 Z\nCLOWES  K L AW1 Z\nCLOWN  K L AW1 N\nCLOWNEY  K L AW1 - N IY0\nCLOWNING  K L AW1 - N IH0 NG\nCLOWNS  K L AW1 N Z\nCLOY  K L OY1\nCLOYD  K L OY1 D\nCLOYING  K L OY1 - IH0 NG\nCLOZAPINE  K L OW1 - Z AH0 - P AY2 N\nCLUB  K L AH1 B\nCLUB'S  K L AH1 B Z\nCLUBB  K L AH1 B\nCLUBBED  K L AH1 B D\nCLUBBING  K L AH1 - B IH0 NG\nCLUBBY  K L AH1 - B IY0\nCLUBHOUSE  K L AH1 B - HH AW2 S\nCLUBHOUSES  K L AH1 B - HH AW2 - S IH0 Z\nCLUBS  K L AH1 B Z\nCLUCAS  K L UW1 - K AH0 Z\nCLUCK  K L AH1 K\nCLUCKEY  K L AH1 - K IY0\nCLUCKING  K L AH1 - K IH0 NG\nCLUCKS  K L AH1 K S\nCLUE  K L UW1\nCLUED  K L UW1 D\nCLUELESS  K L UW1 - L AH0 S\nCLUES  K L UW1 Z\nCLUETT  K L UW1 - IH0 T\nCLUFF  K L AH1 F\nCLUGSTON  K L AH1 G - S T AH0 N\nCLUJ  K L UW1 JH\nCLUJ(2)  S IY1 - EH1 - L Y UW1 - JH EY1\nCLUKEY  K L UW1 - K IY0\nCLUM  K L AH1 M\nCLUMP  K L AH1 M P\nCLUMPING  K L AH1 M - P IH0 NG\nCLUMPS  K L AH1 M P S\nCLUMPY  K L AH1 M - P IY0\nCLUMSILY  K L AH1 M - S AH0 - L IY0\nCLUMSINESS  K L AH1 M - Z IY0 - N AH0 S\nCLUMSY  K L AH1 M - Z IY0\nCLUNE  K L UW1 N\nCLUNG  K L AH1 NG\nCLUNK  K L AH1 NG K\nCLUNKER  K L AH1 NG - K ER0\nCLUNKERS  K L AH1 NG - K ER0 Z\nCLUNKS  K L AH1 NG K S\nCLUNKY  K L AH1 NG - K IY0\nCLUNY  K L UW1 - N IY0\nCLUSTER  K L AH1 - S T ER0\nCLUSTERED  K L AH1 - S T ER0 D\nCLUSTERING  K L AH1 - S T ER0 - IH0 NG\nCLUSTERS  K L AH1 - S T ER0 Z\nCLUTCH  K L AH1 CH\nCLUTCHED  K L AH1 CH T\nCLUTCHES  K L AH1 - CH AH0 Z\nCLUTCHES(2)  K L AH1 - CH IH0 Z\nCLUTCHING  K L AH1 - CH IH0 NG\nCLUTE  K L UW1 T\nCLUTTER  K L AH1 - T ER0\nCLUTTERED  K L AH1 - T ER0 D\nCLUTTERING  K L AH1 - T ER0 - IH0 NG\nCLUTTS  K L AH1 T S\nCLYATT  K L AY1 - AH0 T\nCLYBURN  K L IH1 - B ER0 N\nCLYDE  K L AY1 D\nCLYDESDALE  K L AY1 D Z - D EY2 L\nCLYMENE  K L IH0 - M IY1 N\nCLYMER  K L AY1 - M ER0\nCLYNE  K L AY1 N\nCLYTE  K L AY1 T\nCLYTIE  K L IH1 - T IY0\nCLYVE  K L AY1 V\nCMOS  S IY1 - M OW0 S\nCMOS(2)  S IY1 - EH1 - M OW1 - EH1 S\nCMX  K AH0 - M EH1 K S\nCNN  S IY1 - EH1 - N EH1 N\nCNN.COM  S IY1 - EH1 - N EH1 N - D AA1 T - K AA1 M\nCNNFN  S IY1 - EH1 - N EH1 - N EH1 - F EH1 N\nCO  K OW1\nCO-OP  K OW1 - AA2 P\nCO-OPERATIVE  K OW2 - AA1 - P ER2 - AH0 - T IH0 V\nCO-OPERATIVE(2)  K OW2 - AA1 - P R AH0 - T IH0 V\nCO-OPT  K OW0 - AA1 P T\nCO-OPTED  K OW0 - AA1 P - T AH0 D\nCO-WIFE  K OW1 - W AY1 F\nCO.  K OW1\nCO.(2)  K AH1 - P AH0 - N IY0\nCOACH  K OW1 CH\nCOACH'S  K OW1 - CH IH0 Z\nCOACHED  K OW1 CH T\nCOACHES  K OW1 - CH IH0 Z\nCOACHING  K OW1 - CH IH0 NG\nCOACHMAN  K OW1 CH - M AH0 N\nCOAD  K OW1 D\nCOADY  K OW1 - D IY0\nCOAGULATE  K OW0 - AE1 - G Y AH0 - L EY2 T\nCOAGULATING  K OW0 - AE1 - G Y AH0 - L EY2 - T IH0 NG\nCOAGULATION  K OW0 - AE1 - G Y AH0 - L EY1 - SH AH0 N\nCOAKLEY  K OW1 K - L IY0\nCOAL  K OW1 L\nCOAL'S  K OW1 L Z\nCOALE  K OW1 L\nCOALESCE  K OW2 - AH0 - L EH1 S\nCOALESCED  K OW2 - AH0 - L EH1 S T\nCOALESCING  K OW2 - AH0 - L EH1 - S IH0 NG\nCOALITION  K OW2 - AH0 - L IH1 - SH AH0 N\nCOALITION'S  K OW2 - AH0 - L IH1 - SH AH0 N Z\nCOALITIONS  K OW2 - AH0 - L IH1 - SH AH0 N Z\nCOALS  K OW1 L Z\nCOALSON  K OW1 L - S AH0 N\nCOAN  K OW1 N\nCOAR  K AO1 R\nCOARSE  K AO1 R S\nCOARSENING  K AO1 R - S IH0 - N IH0 NG\nCOARSER  K AO1 R - S ER0\nCOAST  K OW1 S T\nCOAST'S  K OW1 S T S\nCOASTAL  K OW1 - S T AH0 L\nCOASTAL'S  K OW1 - S T AH0 L Z\nCOASTAMERICA  K OW2 - S T AH0 - M EH1 - R IH0 - K AH0\nCOASTAMERICA'S  K OW2 - S T AH0 - M EH1 - R IH0 - K AH0 Z\nCOASTED  K OW1 - S T IH0 D\nCOASTER  K OW1 - S T ER0\nCOASTERS  K OW1 - S T ER0 Z\nCOASTING  K OW1 - S T IH0 NG\nCOASTLINE  K OW1 S T - L AY2 N\nCOASTLINES  K OW1 S T - L AY2 N Z\nCOASTS  K OW1 S T S\nCOASTS(2)  K OW1 S S\nCOASTS(3)  K OW1 S\nCOAT  K OW1 T\nCOAT'S  K OW1 T S\nCOATE  K OW1 - EY1 T\nCOATED  K OW1 - T AH0 D\nCOATED(2)  K OW1 - T IH0 D\nCOATES  K OW1 - EY1 T S\nCOATESVILLE  K OW1 T S - V IH2 L\nCOATING  K OW1 - T IH0 NG\nCOATINGS  K OW1 - T IH0 NG Z\nCOATNEY  K OW1 T - N IY0\nCOATS  K OW1 T S\nCOATTAIL  K OW1 T - T EY2 L\nCOATTAILS  K OW1 T - T EY2 L Z\nCOAUTHOR  K OW1 - AA1 - TH ER0\nCOAUTHORS  K OW1 - AA1 - TH ER0 Z\nCOAX  K OW1 K S\nCOAXED  K OW1 K S T\nCOAXES  K OW1 K - S IH0 Z\nCOAXIAL  K OW1 - AE1 K - S IY0 - AH0 L\nCOAXING  K OW1 K - S IH0 NG\nCOAXUM  K OW1 K - S AH0 M\nCOB  K AA1 B\nCOBAIN  K OW1 - B EY2 N\nCOBAIN'S  K OW1 - B EY2 N Z\nCOBAINE  K OW1 - B EY2 N\nCOBALT  K OW1 - B AO2 L T\nCOBAUGH  K AA1 - B AO0\nCOBB  K AA1 B\nCOBBETT  K AA1 - B IH0 T\nCOBBINS  K AA1 - B IH0 N Z\nCOBBLE  K AA1 - B AH0 L\nCOBBLED  K AA1 - B AH0 L D\nCOBBLER  K AA1 B - L ER0\nCOBBLER'S  K AA1 B - L ER0 Z\nCOBBLERS  K AA1 B - L ER0 Z\nCOBBLESTONE  K AA1 - B AH0 L - S T OW2 N\nCOBBLESTONES  K AA1 - B AH0 L - S T OW2 N Z\nCOBBS  K AA1 B Z\nCOBE  K OW1 B\nCOBEN  K OW1 - B AH0 N\nCOBEPA  K OW0 - B EY1 - P AH0\nCOBERLY  K OW1 - B ER0 - L IY0\nCOBERN  K AA1 - B ER0 N\nCOBERT  K AA1 - B ER0 T\nCOBEY  K OW1 - B IY0\nCOBIA  K OW1 - B IY0 - AH0\nCOBIAN  K OW1 - B IY0 - AH0 N\nCOBIN  K OW1 - B IH0 N\nCOBLE  K OW1 - B AH0 L\nCOBLEIGH  K AA1 B - L AH0\nCOBLENTZ  K AA1 B - L IH0 N T S\nCOBLER  K OW1 - B AH0 L - ER0\nCOBLER(2)  K OW1 - B L ER0\nCOBLINER  K AA1 B - L AY0 - N ER0\nCOBO  K OW1 - B OW0\nCOBOS  K OW1 - B OW0 Z\nCOBRA  K OW1 - B R AH0\nCOBRAS  K OW1 - B R AH0 Z\nCOBRE  K AA1 - B R AH0\nCOBRIN  K AA1 - B R IH0 N\nCOBS  K AA1 B Z\nCOBURN  K OW1 - B ER0 N\nCOBWEB  K AA1 B - W EH2 B\nCOBWEBS  K AA1 B - W EH2 B Z\nCOBY  K OW1 - B IY0\nCOCA  K OW1 - K AH0\nCOCAINE  K OW0 - K EY1 N\nCOCANINO  K OW2 - K AH0 - N IY1 - N OW0\nCOCANOUGHER  K AA1 - K AH0 - N AH2 - F ER0\nCOCCA  K OW1 - K AH0\nCOCCARO  K OW0 - K AA1 - R OW0\nCOCCHI  K OW1 - K IY0\nCOCCIA  K OW1 - CH AH0\nCOCCO  K OW1 - K OW0\nCOCCUS  K AA1 - K AH0 S\nCOCHAIRMAN  K OW1 - CH EH2 R - M AH0 N\nCOCHENOUR  K AA1 - SH IH0 - N UH0 R\nCOCHIN  K OW1 - CH IH0 N\nCOCHLEA  K AA1 K - L IY0 - AH0\nCOCHLEAR  K AA1 K - L IY0 - ER0\nCOCHRAN  K AA1 - K R AH0 N\nCOCHRAN'S  K AA1 - K R AH0 N Z\nCOCHRANE  K AA1 - K R AH0 N\nCOCK  K AA1 K\nCOCKAMAMIE  K AO2 - K AH0 - M EY1 - M IY0\nCOCKATOO  K AA1 - K AH0 - T UW2\nCOCKATOOS  K AA1 - K AH0 - T UW2 Z\nCOCKBURN  K AA1 K - B ER2 N\nCOCKBURN'S  K OW1 - B ER0 N Z\nCOCKBURN'S(2)  K AA1 K - B ER2 N Z\nCOCKE  K OW1 K\nCOCKED  K AA1 K T\nCOCKED(2)  K AO1 K T\nCOCKER  K AA1 - K ER0\nCOCKERELL  K AA1 - K ER0 - EH2 L\nCOCKERHAM  K AA1 - K ER0 - HH AE2 M\nCOCKERILL  K AA1 - K ER0 - IH2 L\nCOCKEY  K AA1 - K IY0\nCOCKEYED  K AA1 K - AY2 D\nCOCKFIELD  K AA1 K - F IY2 L D\nCOCKINESS  K AA1 - K IY0 - N AH0 S\nCOCKING  K AA1 - K IH0 NG\nCOCKLIN  K AA1 K - L IH0 N\nCOCKMAN  K AA1 K - M AH0 N\nCOCKNEY  K AA1 K - N IY0\nCOCKPIT  K AA1 K - P IH2 T\nCOCKPITS  K AA1 K - P IH2 T S\nCOCKRAN  K AA1 - K R AH0 N\nCOCKRELL  K AA1 - K R AH0 L\nCOCKRILL  K AA1 - K R AH0 L\nCOCKROACH  K AA1 K - R OW2 CH\nCOCKROACHES  K AA1 K - R OW2 - CH IH0 Z\nCOCKROFT  K AA1 - K R AH0 F T\nCOCKRUM  K AA1 - K R AH0 M\nCOCKS  K AA1 K S\nCOCKTAIL  K AA1 K - T EY2 L\nCOCKTAILS  K AA1 K - T EY2 L Z\nCOCKWELL  K AA1 K - W EH2 L\nCOCKWELL'S  K AA1 K - W EH2 L Z\nCOCKY  K AA1 - K IY0\nCOCO  K OW1 - K OW2\nCOCOA  K OW1 - K OW0\nCOCOANUTS  K OW1 - K OW0 - N AH2 T S\nCOCOM  K OW1 - K AA1 M\nCOCONINO  K OW2 - K AH0 - N IY1 - N OW0\nCOCONUT  K OW1 - K AH0 - N AH2 T\nCOCONUTS  K OW1 - K AH0 - N AH2 T S\nCOCOON  K AH0 - K UW1 N\nCOCOONING  K AH0 - K UW1 - N IH0 NG\nCOCOONS  K AH0 - K UW1 N Z\nCOCOS  K OW1 - K OW2 Z\nCOCOZZA  K OW0 - K OW1 T - S AH0\nCOCUZZA  K OW0 - K UW1 T - S AH0\nCOD  K AA1 D\nCOD(2)  S IY1 - OW1 - D IY1\nCODA  K OW1 - D AH0\nCODAG  K OW1 - D AE1 G\nCODAY  K OW1 - D EY1\nCODD  K AA1 D\nCODDING  K AA1 - D IH0 NG\nCODDINGTON  K AA1 - D IH0 NG - T AH0 N\nCODDLE  K AA1 - D AH0 L\nCODDLED  K AA1 - D AH0 L D\nCODDLING  K AA1 - D AH0 L - IH0 NG\nCODDLING(2)  K AA1 D - L IH0 NG\nCODE  K OW1 D\nCODE'S  K OW1 D Z\nCODEBREAKER  K OW1 D - B R EY2 - K ER0\nCODEBREAKERS  K OW1 D - B R EY2 - K ER0 Z\nCODED  K OW1 - D IH0 D\nCODELCO  K OW0 - D EH1 L - K OW0\nCODER  K OW1 - D ER0\nCODERRE  K AH0 - D EH1 R\nCODES  K OW1 D Z\nCODESA  K OW0 - D EH1 - S AH0\nCODIFICATION  K AA2 - D AH0 - F AH0 - K EY1 - SH AH0 N\nCODIFIED  K AA1 - D AH0 - F AY2 D\nCODIFIES  K OW1 - D AH0 - F AY2 Z\nCODIFY  K OW1 - D AH0 - F AY2\nCODIFYING  K OW1 - D AH0 - F AY2 - IH0 NG\nCODING  K OW1 - D IH0 NG\nCODISPOTI  K OW0 - D IY0 - S P OW1 - T IY0\nCODLIN  K AA1 D - L IH0 N\nCODNER  K AA1 D - N ER0\nCODRESCU  K AH0 - D R EH1 - S K Y UW2\nCODRESCU'S  K AH0 - D R EH1 - S K Y UW2 Z\nCODY  K OW1 - D IY0\nCOE  K OW1\nCOEBURN  K OW1 - B ER0 N\nCOED  K OW1 - EH2 D\nCOED(2)  K OW1 D\nCOEDS  K OW1 - EH2 D Z\nCOEDUCATIONAL  K OW1 - EH1 - JH AH0 - K EY1 - SH AH0 - N AH0 L\nCOEFFICIENT  K OW2 - AH0 - F IH1 - SH AH0 N T\nCOEFFICIENTS  K OW2 - AH0 - F IH1 - SH AH0 N T S\nCOEHLO  K OW1 - L OW0\nCOELACANTH  S IY1 - L AH0 - K AE2 N TH\nCOELHO  K OW2 - EH1 - L OW0\nCOELLO  K OW2 - EH1 - L OW0\nCOEN  K OW1 - IH0 N\nCOENEN  K OW0 - IY1 - N AH0 N\nCOENZYME  K OW0 - EH1 N - Z AY0 M\nCOEQUAL  K OW0 - IY1 - K W AH0 L\nCOERCE  K OW0 - ER1 S\nCOERCED  K OW0 - ER1 S T\nCOERCING  K OW0 - ER1 - S IH0 NG\nCOERCION  K OW0 - ER1 - SH AH0 N\nCOERCIVE  K OW0 - ER1 - S IH0 V\nCOEUR  K UW1 R\nCOEXIST  K OW2 - AH0 G - Z IH1 S T\nCOEXISTED  K OW2 - AH0 G - Z IH1 - S T AH0 D\nCOEXISTENCE  K OW2 - IH0 G - Z IH1 - S T AH0 N S\nCOEXISTING  K OW2 - IH0 G - Z IH1 - S T IH0 NG\nCOEY  K OW1 - IY0\nCOFER  K OW1 - F ER1\nCOFFARO  K OW0 - F AA1 - R OW0\nCOFFEE  K AA1 - F IY0\nCOFFEE'S  K AA1 - F IY0 Z\nCOFFEE'S(2)  K AO1 - F IY0 Z\nCOFFEE(2)  K AO1 - F IY0\nCOFFEEHOUSE  K AO1 - F IY0 - HH AW2 S\nCOFFEEHOUSES  K AO1 - F IY0 - HH AW2 - S IH0 Z\nCOFFEEN  K AH0 - F IY1 N\nCOFFEES  K AO1 - F IY0 Z\nCOFFEL  K AA1 - F AH0 L\nCOFFELT  K AA1 - F IH0 L T\nCOFFER  K AO1 - F ER0\nCOFFERS  K AA1 - F ER0 Z\nCOFFERS(2)  K AO1 - F ER0 Z\nCOFFEY  K AA1 - F IY0\nCOFFIELD  K AA1 - F IY0 L D\nCOFFIN  K AO1 - F IH0 N\nCOFFING  K AO1 - F IH0 NG\nCOFFINS  K AO1 - F IH0 N Z\nCOFFLIN  K AO1 F - L IH0 N\nCOFFMAN  K AO1 F - M AH0 N\nCOFIDE  K OW2 - F AY1 D\nCOFIELD  K OW1 - F IY1 L D\nCOFOUNDER  K OW1 - F AW1 N - D ER0\nCOG  K AO1 G\nCOGAN  K OW1 - G AH0 N\nCOGAR  K OW1 - G ER0\nCOGBILL  K AA1 G - B IH2 L\nCOGBURN  K AA1 G - B ER2 N\nCOGDELL  K AA1 G - D AH0 L\nCOGDILL  K AA1 G - D AH0 L\nCOGECO  K OW2 - JH EH1 - K OW0\nCOGEMA  K OW1 G - M AA0\nCOGENCY  K OW1 - JH AH0 N - S IY0\nCOGENERATE  K OW1 - JH EH1 - N ER0 - EY2 T\nCOGENERATED  K OW1 - JH EH1 - N ER0 - EY2 - T IH0 D\nCOGENERATION  K OW1 - JH EH1 - N ER0 - EY1 - SH AH0 N\nCOGENERATOR  K OW0 - JH EH1 - N ER0 - EY2 - T ER0\nCOGENERATORS  K OW0 - JH EH1 - N ER0 - EY2 - T ER0 Z\nCOGENT  K OW1 - JH AH0 N T\nCOGER  K OW1 - JH ER0\nCOGGESHALL  K AA1 - G IH0 - SH AO0 L\nCOGGIN  K AA1 - G IH0 N\nCOGGINS  K AA1 - G IH0 N Z\nCOGHILL  K AA1 G - HH IH2 L\nCOGHLAN  K AA1 G - L AH0 N\nCOGITATE  K AA2 - JH IH0 - T EY2 T\nCOGITATION  K AA2 - JH IH0 - T EY1 - SH AH0 N\nCOGLEY  K AA1 G - L IY0\nCOGLIANESE  K OW0 G - L IY0 - AH0 - N EY1 - Z IY0\nCOGLIANO  K OW0 G - L IY0 - AA1 - N OW0\nCOGNAC  K OW1 N - Y AE2 K\nCOGNAC(2)  K AA1 N - Y AE2 K\nCOGNETICS  K AA2 G - N EH1 - T IH0 K S\nCOGNEX  K AA1 G - N EH0 K S\nCOGNITION  K AA0 G - N IH1 - SH AH0 N\nCOGNITIVE  K AA1 G - N IH0 - T IH0 V\nCOGNIZANCE  K AA1 G - N AH0 - Z AH0 N S\nCOGNIZANT  K AA1 G - N AH0 - Z AH0 N T\nCOGNOSCENTI  K AA2 G - N AO2 - SH EH1 N - T IY0\nCOGSWELL  K AA1 G - S W EH2 L\nCOHABIT  K OW0 - HH AE1 - B IH0 T\nCOHABITATION  K OW0 - HH AE2 - B AH0 - T EY1 - SH AH0 N\nCOHABITING  K OW0 - HH AE1 - B IH0 - T IH0 NG\nCOHAN  K OW1 - HH AH0 N\nCOHASSET  K OW0 - HH AE1 - S AH0 T\nCOHEA  K AA1 - HH IY0 - AH0\nCOHEE  K AA1 - HH IY0\nCOHEN  K OW1 - AH0 N\nCOHEN'S  K OW1 - AH0 N Z\nCOHENOUR  K AH0 - HH EH1 - N ER0\nCOHERENCE  K OW0 - HH IH1 - R AH0 N S\nCOHERENT  K OW0 - HH IH1 - R AH0 N T\nCOHERENTLY  K OW0 - HH IY1 - R AH0 N T - L IY0\nCOHESION  K OW0 - HH IY1 - ZH AH0 N\nCOHESIVE  K OW0 - HH IY1 - S IH0 V\nCOHESIVELY  K OW0 - HH IY1 - S IH0 V - L IY0\nCOHESIVENESS  K OW0 - HH IY1 - S IH0 V - N AH0 S\nCOHICK  K AA1 - HH IH0 K\nCOHILL  K OW1 - HH IH1 L\nCOHN  K OW1 N\nCOHO  K OW1 - HH OW0\nCOHOON  K AH0 - HH UW1 N\nCOHORT  K OW1 - HH AO0 R T\nCOHORTS  K OW1 - HH AO0 R T S\nCOHOST  K OW1 - HH OW2 S T\nCOHOSTS  K OW1 - HH OW2 S T S\nCOHOSTS(2)  K OW1 - HH OW2 S S\nCOHOSTS(3)  K OW1 - HH OW2 S\nCOHR  K AO1 R\nCOHRON  K AA1 - R AH0 N\nCOHRS  K AO1 R Z\nCOIA  K OW1 - Y AH0\nCOIFFE  K OY1 F\nCOIFFED  K OY1 F T\nCOIL  K OY1 L\nCOILE  K OY1 L\nCOILED  K OY1 L D\nCOILS  K OY1 L Z\nCOIN  K OY1 N\nCOIN'S  K OY1 N Z\nCOINAGE  K OY1 - N IH0 JH\nCOINCIDE  K OW2 - IH0 N - S AY1 D\nCOINCIDED  K OW2 - AH0 N - S AY1 - D AH0 D\nCOINCIDENCE  K OW0 - IH1 N - S IH0 - D AH0 N S\nCOINCIDENCES  K OW0 - IH1 N - S AH0 - D AH0 N - S IH0 Z\nCOINCIDENT  K OW0 - IH1 N - S AH0 - D AH0 N T\nCOINCIDENTAL  K OW0 - IH2 N - S AH0 - D EH1 N - T AH0 L\nCOINCIDENTALLY  K OW0 - IH2 N - S IH0 - D EH1 N - T AH0 - L IY0\nCOINCIDENTALLY(2)  K OW0 - IH2 N - S IH0 - D EH1 - N AH0 - L IY0\nCOINCIDES  K OW2 - IH0 N - S AY1 D Z\nCOINCIDING  K OW2 - AH0 N - S AY1 - D IH0 NG\nCOINED  K OY1 N D\nCOINER  K OY1 - N ER0\nCOINING  K OY1 - N IH0 NG\nCOINS  K OY1 N Z\nCOINSURANCE  K OW2 - IH0 N - SH ER1 - AH0 N S\nCOINTREAU  K AO2 N - T R OW1\nCOIPA  K OY1 - P AH0\nCOIRO  K OY1 - R OW0\nCOIT  K OY1 T\nCOITSVILLE  K OY1 T S - V IH0 L\nCOJIMAR  K OW1 - JH IH0 - M AA2 R\nCOJIMAR'S  K OW1 - JH IH0 - M AA2 R Z\nCOJUANGCO  K OW0 - W AA1 NG - K OW0\nCOJUANGCO(2)  K OW0 JH - W AE1 NG - K OW0\nCOKE  K OW1 K\nCOKE'S  K OW1 K S\nCOKER  K OW1 - K ER0\nCOKES  K OW1 K S\nCOKIE  K OW1 - K IY0\nCOKIE'S  K OW1 - K IY0 Z\nCOKING  K OW1 - K IH0 NG\nCOKLEY  K AA1 K - L IY0\nCOLA  K OW1 - L AH0\nCOLA'S  K OW1 - L AH0 Z\nCOLAB  K OW1 - L AE1 B\nCOLABELLA  K OW2 - L AH0 - B EH1 - L AH0\nCOLAIANNI  K OW0 - L AA0 - Y AA1 - N IY0\nCOLAIZZI  K OW2 - L EY1 - Z IY0\nCOLALUCA  K OW2 - L AH0 - L UW1 - K AH0\nCOLAN  K OW1 - L AH0 N\nCOLANGELO  K OW0 - L AA0 NG - G EH1 - L OW0\nCOLANTONIO  K OW0 - L AA0 N - T OW1 - N IY0 - OW0\nCOLANTUONO  K OW0 - L AA0 N - T W OW1 - N OW0\nCOLAO  K OW1 - L AW0\nCOLARUSSO  K OW0 - L AA0 - R UW1 - S OW0\nCOLAS  K OW1 - L AH0 S\nCOLASANTI  K OW2 - L AH0 - S AE1 N - T IY0\nCOLASURDO  K OW0 - L AA0 - S UH1 R - D OW0\nCOLAVITO  K OW0 - L AA0 - V IY1 - T OW0\nCOLAW  K OW1 - L AO1\nCOLBATH  K OW1 L - B AH0 TH\nCOLBAUGH  K OW1 L - B AO2\nCOLBECK  K AA1 L - B EH0 K\nCOLBERG  K AA1 L - B ER0 G\nCOLBERN  K OW1 L - B ER0 N\nCOLBERT  K OW1 L - B ER0 T\nCOLBORN  K OW1 L - B AO0 R N\nCOLBORNE  K OW1 L - B AO0 R N\nCOLBURN  K OW1 L - B ER0 N\nCOLBY  K OW1 L - B IY0\nCOLBY'S  K OW1 L - B IY0 Z\nCOLBYS  K OW1 L - B IY0 Z\nCOLCLASURE  K OW0 L - K L AA1 - ZH ER0\nCOLCLOUGH  K OW1 L - K L AW0\nCOLCORD  K OW1 L - K ER0 D\nCOLD  K OW1 L D\nCOLD-BLOOD  K OW1 L D - B L AH1 D\nCOLD-BLOODED  K OW1 L D - B L AH1 - D AH0 D\nCOLDEN  K OW1 L - D AH0 N\nCOLDER  K OW1 L - D ER0\nCOLDEST  K OW1 L - D AH0 S T\nCOLDIRON  K OW1 L - D ER0 - AA0 N\nCOLDLY  K OW1 L D - L IY0\nCOLDNESS  K OW1 L D - N AH0 S\nCOLDREN  K OW1 L - D ER0 - AH0 N\nCOLDS  K OW1 L D Z\nCOLDWATER  K OW1 L D - W AO2 - T ER0\nCOLDWELL  K OW1 L D - W EH2 L\nCOLE  K OW1 L\nCOLE'S  K OW1 L Z\nCOLEBANK  K OW1 L - B AE2 NG K\nCOLEBROOK  K OW1 L - B R UH2 K\nCOLECO  K OW2 - L EH1 - K OW0\nCOLECO'S  K OW2 - L EH1 - K OW0 Z\nCOLEE  K OW1 - L IY1\nCOLEEN  K AO0 - L IY1 N\nCOLEGROVE  K OW1 L - G R OW2 V\nCOLELLA  K OW2 - L EH1 - L AH0\nCOLELLO  K OW2 - L EH1 - L OW0\nCOLEMAN  K OW1 L - M AH0 N\nCOLEMAN'S  K OW1 L - M AH0 N Z\nCOLEN  K OW1 - L AH0 N\nCOLER  K OW1 - L ER0\nCOLERIDGE  K OW1 L - R IH0 JH\nCOLES  K OW1 L Z\nCOLESLAW  K OW1 L - S L AA2\nCOLESON  K AA1 - L IH0 - S AH0 N\nCOLESON(2)  K OW1 L - S AH0 N\nCOLESTIPOL  K OW1 L - S T IH2 - P AA2 L\nCOLESTOCK  K OW1 L - S T AA2 K\nCOLETTA  K OW0 - L EH1 - T AH0\nCOLETTE  K OW1 - L EH1 T\nCOLETTI  K OW0 - L EH1 - T IY0\nCOLEUS  K OW1 - L IY0 - AH0 S\nCOLEVILLE  K OW1 L - V IH2 L\nCOLEY  K OW1 - L IY0\nCOLFER  K OW1 L - F ER0\nCOLFORD  K OW1 L - F ER0 D\nCOLGAN  K OW1 L - G AH0 N\nCOLGATE  K OW1 L - G EY0 T\nCOLGATE'S  K OW1 L - G EY0 T S\nCOLGIN  K OW1 L - JH IH0 N\nCOLGLAZIER  K OW1 L - G L AH0 - Z IY0 - ER0\nCOLGROVE  K OW1 L - G R AH0 V\nCOLI  K OW1 - L IY0\nCOLICCHIO  K OW2 - L IH1 - K IY0 - OW0\nCOLIER  K OW1 - L IY0 - ER0\nCOLIN  K OW1 - L IH0 N\nCOLINA  K OW0 - L IY1 - N AH0\nCOLINAS  K OW0 - L IY1 - N AH0 S\nCOLINE  K OW0 - L IY1 - N IY0\nCOLINO  K OW0 - L IY1 - N OW0\nCOLIS  K OW1 - L IH0 S\nCOLISEUM  K AA2 - L AH0 - S IY1 - AH0 M\nCOLL  K AA1 L\nCOLLA  K OW1 - L AH0\nCOLLABORATE  K AH0 - L AE1 - B ER0 - EY2 T\nCOLLABORATED  K AH0 - L AE1 - B ER0 - EY2 - T AH0 D\nCOLLABORATED(2)  K AH0 - L AE1 - B ER0 - EY2 - T IH0 D\nCOLLABORATING  K AH0 - L AE1 - B ER0 - EY2 - T IH0 NG\nCOLLABORATION  K AH0 - L AE2 - B ER0 - EY1 - SH AH0 N\nCOLLABORATIONS  K AA2 - L AH0 - B ER0 - EY1 - SH AH0 N Z\nCOLLABORATIVE  K AH0 - L AE1 - B ER0 - EY2 - T IH0 V\nCOLLABORATIVE(2)  K AH0 - L AE1 - B R AH0 - T IH0 V\nCOLLABORATOR  K AH0 - L AE1 - B ER0 - EY2 - T ER0\nCOLLABORATORS  K AH0 - L AE1 - B ER0 - EY2 - T ER0 Z\nCOLLADO  K OW0 - L AA1 - D OW0\nCOLLAGE  K AH0 - L AA1 ZH\nCOLLAGEN  K AA1 - L AH0 - G AH0 N\nCOLLAGES  K AH0 - L AA1 - ZH IH0 Z\nCOLLAMORE  K OW0 - L AA1 - M AO0 R\nCOLLAPSE  K AH0 - L AE1 P S\nCOLLAPSED  K AH0 - L AE1 P S T\nCOLLAPSES  K AH0 - L AE1 P - S IH0 Z\nCOLLAPSIBLE  K AH0 - L AE1 P - S AH0 - B AH0 L\nCOLLAPSING  K AH0 - L AE1 P - S IH0 NG\nCOLLAR  K AA1 - L ER0\nCOLLARBONE  K AA1 - L ER0 - B OW2 N\nCOLLARD  K AA1 - L ER0 D\nCOLLARDS  K AA1 - L ER0 D Z\nCOLLARED  K AA1 - L ER0 D\nCOLLARS  K AA1 - L ER0 Z\nCOLLATE  K AH0 - L EY1 T\nCOLLATERAL  K AH0 - L AE1 - T ER0 - AH0 L\nCOLLATERALIZE  K AH0 - L AE1 - T ER0 - AH0 - L AY2 Z\nCOLLATERALIZED  K AH0 - L AE1 - T ER0 - AH0 - L AY2 Z D\nCOLLAZO  K OW0 - L AA1 - Z OW0\nCOLLE  K OW1 L\nCOLLEAGUE  K AA1 - L IY0 G\nCOLLEAGUE'S  K AA1 - L IY0 G Z\nCOLLEAGUES  K AA1 - L IY0 G Z\nCOLLEAGUES'  K AA1 - L IY0 G Z\nCOLLECT  K AH0 - L EH1 K T\nCOLLECTED  K AH0 - L EH1 K - T AH0 D\nCOLLECTIBILITY  K AH0 - L EH2 K - T IH0 - B IH1 - L IH0 - T IY0\nCOLLECTIBLE  K AH0 - L EH1 K - T AH0 - B AH0 L\nCOLLECTIBLES  K AH0 - L EH1 K - T AH0 - B AH0 L Z\nCOLLECTING  K AH0 - L EH1 K - T IH0 NG\nCOLLECTION  K AH0 - L EH1 K - SH AH0 N\nCOLLECTIONS  K AH0 - L EH1 K - SH AH0 N Z\nCOLLECTIVE  K AH0 - L EH1 K - T IH0 V\nCOLLECTIVELY  K AH0 - L EH1 K - T IH0 V - L IY0\nCOLLECTIVES  K AH0 - L EH1 K - T IH0 V Z\nCOLLECTIVISM  K AH0 - L EH1 K - T IH0 - V IH2 - Z AH0 M\nCOLLECTIVIST  K AH0 - L EH1 K - T IH0 - V IH0 S T\nCOLLECTIVIZATION  K AH0 - L EH2 K - T IH0 - V IH0 - Z EY1 - SH AH0 N\nCOLLECTIVIZE  K AH0 - L EH1 K - T IH0 - V AY2 Z\nCOLLECTIVIZED  K AH0 - L EH1 K - T IH0 - V AY2 Z D\nCOLLECTOR  K AH0 - L EH1 K - T ER0\nCOLLECTOR'S  K AH0 - L EH1 K - T ER0 Z\nCOLLECTOR'S(2)  K L EH1 K - T ER0 Z\nCOLLECTOR(2)  K L EH1 K - T ER0\nCOLLECTORS  K AH0 - L EH1 K - T ER0 Z\nCOLLECTORS'  K AH0 - L EH1 K - T ER0 Z\nCOLLECTORS'(2)  K L EH1 K - T ER0 Z\nCOLLECTORS(2)  K L EH1 K - T ER0 Z\nCOLLECTS  K AH0 - L EH1 K T S\nCOLLEDGE  K AA1 - L IH0 JH\nCOLLEEN  K AA2 - L IY1 N\nCOLLEGE  K AA1 - L IH0 JH\nCOLLEGE'S  K AA1 - L IH0 - JH IH0 Z\nCOLLEGES  K AA1 - L IH0 - JH IH0 Z\nCOLLEGES'  K AA1 - L IH0 - JH IH0 Z\nCOLLEGEVILLE  K AA1 - L AH0 JH - V IH0 L\nCOLLEGIAL  K AH0 - L IY1 - JH IY0 - AH0 L\nCOLLEGIALITY  K AH0 - L IY2 - JH IY0 - AE1 - L IH0 - T IY0\nCOLLEGIAN  K AH0 - L IY1 - JH AH0 N\nCOLLEGIANS  K AH0 - L IY1 - JH AH0 N Z\nCOLLEGIATE  K AH0 - L IY1 - JH IH0 T\nCOLLEN  K AA1 - L AH0 N\nCOLLENDER  K AA1 - L AH0 N - D ER0\nCOLLER  K AA1 - L ER0\nCOLLERAN  K AA1 - L ER0 - AE0 N\nCOLLET  K AA1 - L IH0 T\nCOLLETT  K AA1 - L IH0 T\nCOLLETTA  K OW0 - L EH1 - T AH0\nCOLLETTE  K AH0 - L EH1 T\nCOLLETTI  K OW0 - L EH1 - T IY0\nCOLLEVILLE  K OW1 L - V IH0 L\nCOLLEVILLE'S  K OW1 L - V IH0 L Z\nCOLLEY  K AA1 - L IY0\nCOLLI  K OW1 - L IY0\nCOLLICK  K AA1 - L IH0 K\nCOLLIDE  K AH0 - L AY1 D\nCOLLIDED  K AH0 - L AY1 - D IH0 D\nCOLLIDER  K AH0 - L AY1 - D ER0\nCOLLIDES  K AH0 - L AY1 D Z\nCOLLIDING  K AH0 - L AY1 - D IH0 NG\nCOLLIE  K AA1 - L IY0\nCOLLIER  K AA1 - L Y ER0\nCOLLIER'S  K AA1 - L Y ER0 Z\nCOLLIERS  K AA1 - L Y ER0 Z\nCOLLIES  K AA1 - L IY0 Z\nCOLLIGAN  K AA1 - L IH0 - G AE0 N\nCOLLIGNON  K AH0 - L IH1 G - N AH0 N\nCOLLIN  K AA1 - L IH0 N\nCOLLING  K AA1 - L IH0 NG\nCOLLINGE  K AA1 - L IH0 N JH\nCOLLINGS  K AA1 - L IH0 NG Z\nCOLLINGSWORTH  K AH0 - L IH1 NG - Z W ER0 TH\nCOLLINGWOOD  K AA1 - L IH0 NG - W UH2 D\nCOLLINS  K AA1 - L IH0 N Z\nCOLLINS'  K AA1 - L IH0 N Z\nCOLLINS'S  K AA1 - L IH0 N - Z IH0 Z\nCOLLINS'S(2)  K AA1 - L IH0 N Z\nCOLLINSON  K AA1 - L IH0 N - S AH0 N\nCOLLINSWORTH  K AH0 - L IH1 N - S W ER0 TH\nCOLLIS  K AA1 - L IH0 S\nCOLLISION  K AH0 - L IH1 - ZH AH0 N\nCOLLISIONAL  K AH0 - L IH1 - ZH AH0 - N AH0 L\nCOLLISIONS  K AH0 - L IH1 - ZH AH0 N Z\nCOLLISON  K AA1 - L IH0 - S AH0 N\nCOLLISTER  K AA1 - L IH0 - S T ER0\nCOLLIVER  K AA1 - L IH0 - V ER0\nCOLLMAN  K AA1 L - M AH0 N\nCOLLODION  K AH0 - L OW1 - D IY0 - AH0 N\nCOLLOID  K AA1 - L OY0 D\nCOLLOIDAL  K AH0 - L OY1 - D AH0 L\nCOLLOM  K AA1 - L AH0 M\nCOLLOMB  K AA1 - L AA0 M\nCOLLOPY  K AH0 - L OW1 - P IY0\nCOLLOQUIAL  K AH0 - L OW1 K - W IY0 - AH0 L\nCOLLOQUIUM  K AH0 - L OW1 - K W IY0 - AH0 M\nCOLLOQUY  K AA1 - L AH0 - K W IY0\nCOLLOR  K AA1 - L ER0\nCOLLOR'S  K AA1 - L ER0 Z\nCOLLOR(2)  K AO1 - L ER0\nCOLLOSIO  K AH0 - L OW1 - S IY0 - OW0\nCOLLOSIO'S  K AH0 - L OW1 - S IY0 - OW0 Z\nCOLLUDE  K AH0 - L UW1 D\nCOLLUDED  K AH0 - L UW1 - D IH0 D\nCOLLUDING  K AH0 - L UW1 - D IH0 NG\nCOLLUM  K AA1 - L AH0 M\nCOLLUMS  K AA1 - L AH0 M Z\nCOLLURA  K AA1 - L UH0 - R AH0\nCOLLUSION  K AH0 - L UW1 - ZH AH0 N\nCOLLUSIVE  K AH0 - L UW1 - S IH0 V\nCOLLVER  K AA1 L - V ER0\nCOLLY  K AA1 - L IY0\nCOLLYER  K AA1 - L IY0 - ER0\nCOLMAN  K OW1 L - M AH0 N\nCOLMENERO  K OW0 L - M EY0 - N EH1 - R OW0\nCOLMER  K OW1 - M ER0\nCOLO  K OW1 - L OW0\nCOLODNY  K AH0 - L AA1 D - N IY0\nCOLOGNE  K AH0 - L OW1 N\nCOLOMA  K OW2 - L OW1 - M AH0\nCOLOMB  K AA1 - L AH0 M\nCOLOMBARI  K AA2 L - AA0 M - B AA1 - R IY0\nCOLOMBE  K OW0 - L OW1 M - B IY0\nCOLOMBIA  K AH0 - L AH1 M - B IY0 - AH0\nCOLOMBIA'S  K AH0 - L AH1 M - B IY0 - AH0 Z\nCOLOMBIAN  K AH0 - L AH1 M - B IY0 - AH0 N\nCOLOMBIANS  K AH0 - L AH1 M - B IY0 - AH0 N Z\nCOLOMBO  K AH0 - L AH1 M - B OW0\nCOLON  K OW1 - L AH0 N\nCOLONEL  K ER1 - N AH0 L\nCOLONEL'S  K ER1 - N AH0 L Z\nCOLONELS  K ER1 - N AH0 L Z\nCOLONIA  K AH0 - L OW1 - N IY0 - AH0\nCOLONIAL  K AH0 - L OW1 - N IY0 - AH0 L\nCOLONIAL'S  K AH0 - L OW1 - N IY0 - AH0 L Z\nCOLONIALISM  K AH0 - L OW1 - N IY0 - AH0 - L IH2 - Z AH0 M\nCOLONIALIST  K AH0 - L OW1 - N IY0 - AH0 - L IH0 S T\nCOLONIALISTS  K AH0 - L OW1 - N IY0 - AH0 - L IH0 S T S\nCOLONIALISTS(2)  K AH0 - L OW1 - N IY0 - AH0 - L IH0 S S\nCOLONIALISTS(3)  K AH0 - L OW1 - N IY0 - AH0 - L IH0 S\nCOLONIALS  K AH0 - L OW1 - N IY0 - AH0 L Z\nCOLONIES  K AA1 - L AH0 - N IY0 Z\nCOLONIST  K AA1 - L AH0 - N IH0 S T\nCOLONISTS  K AA1 - L AH0 - N IH0 S T S\nCOLONISTS(2)  K AA1 - L AH0 - N IH0 S S\nCOLONISTS(3)  K AA1 - L AH0 - N IH0 S\nCOLONIZATION  K AA2 - L AH0 - N IH0 - Z EY1 - SH AH0 N\nCOLONIZE  K AA1 - L AH0 - N AY2 Z\nCOLONIZED  K AA1 - L AH0 - N AY2 Z D\nCOLONIZER  K AA1 - L AH0 - N AY2 - Z ER0\nCOLONIZERS  K AA1 - L AH0 - N AY2 - Z ER0 Z\nCOLONNA  K OW0 - L OW1 - N AH0\nCOLONNADE  K AA2 - L AH0 - N EY1 D\nCOLONUS  K AH0 - L OW1 - N AH0 S\nCOLONY  K AA1 - L AH0 - N IY0\nCOLONY'S  K AA1 - L AH0 - N IY0 Z\nCOLOPY  K AH0 - L OW1 - P IY0\nCOLOR  K AH1 - L ER0\nCOLOR(2)  K AO1 - L ER0\nCOLORADAN  K AA2 - L ER0 - AA1 - D AH0 N\nCOLORADANS  K AA2 - L ER0 - AA1 - D AH0 N Z\nCOLORADO  K AA2 - L ER0 - AA1 - D OW0\nCOLORADO'S  K AA2 - L ER0 - AA1 - D OW0 Z\nCOLORADO'S(2)  K AA2 - L ER0 - AE1 - D OW0 Z\nCOLORADO(2)  K AA2 - L ER0 - AE1 - D OW0\nCOLORATION  K AH2 - L ER0 - EY1 - SH AH0 N\nCOLORATURA  K AH0 - L ER0 - AH0 - T UH1 - R AH0\nCOLORBLIND  K AH1 - L ER0 - B L AY2 N D\nCOLORCRAFT  K AH1 - L ER0 - K R AE2 F T\nCOLORED  K AH1 - L ER0 D\nCOLOREDS  K AA1 - L ER0 - AH0 D Z\nCOLORFAST  K AH1 - L ER0 - F AE2 S T\nCOLORFUL  K AH1 - L ER0 - F AH0 L\nCOLORFULLY  K AH1 - L ER0 F - L IY0\nCOLORING  K AH1 - L ER0 - IH0 NG\nCOLORISTIC  K AH2 - L ER0 - IH1 - S T IH0 K\nCOLORIZATION  K AH2 - L ER0 - AH0 - Z EY1 - SH AH0 N\nCOLORIZE  K AH1 - L ER0 - AY2 Z\nCOLORIZED  K AH1 - L ER0 - AY2 Z D\nCOLORIZING  K AH1 - L ER0 - AY2 - Z IH0 NG\nCOLORLESS  K AH1 - L ER0 - L AH0 S\nCOLOROCS  K AH1 - L ER0 - AA2 K S\nCOLOROLL  K AH1 - L ER0 - OW2 L\nCOLORS  K AH1 - L ER0 Z\nCOLORWATCH  K AH1 - L ER0 - W AA2 CH\nCOLOSI  K AH0 - L OW1 - S IY0\nCOLOSIMO  K OW0 - L OW0 - S IY1 - M OW0\nCOLOSIO  K AH0 - L OW1 - S IY0 - OW0\nCOLOSIO'S  K AH0 - L OW1 - S IY0 - OW0 Z\nCOLOSSAL  K AH0 - L AA1 - S AH0 L\nCOLOSSALLY  K AH0 - L AA1 - S AH0 - L IY2\nCOLOSSEUM  K AA2 - L AH0 - S IY1 - AH0 M\nCOLOSSUS  K AH0 - L AA1 - S AH0 S\nCOLOURED  K AH1 - L ER0 D\nCOLPEPPER  K AH1 L - P EH2 - P ER0\nCOLPITTS  K OW1 L - P IH0 T S\nCOLQUITT  K OW1 L - K W IH0 T\nCOLSON  K OW1 L - S AH0 N\nCOLSTON  K OW1 L - S T AH0 N\nCOLSTRIP  K OW1 L - S T R IH0 P\nCOLT  K OW1 L T\nCOLT'S  K OW1 L T S\nCOLTEC  K OW1 L - T EH2 K\nCOLTER  K OW1 L - T ER0\nCOLTHARP  K OW1 L - TH AA0 R P\nCOLTIE  K OW1 L - T IY0\nCOLTON  K OW1 L - T AH0 N\nCOLTRAIN  K OW1 L - T R EY2 N\nCOLTRANE  K OW1 L - T R AH0 N\nCOLTRANE'S  K OW1 L - T R AH0 N Z\nCOLTRANE'S(2)  K OW1 L - T R EY0 N Z\nCOLTRANE(2)  K OW1 L - T R EY0 N\nCOLTRIN  K OW1 L - T R IH0 N\nCOLTS  K OW1 L T S\nCOLTSFOOT  K OW1 L T S - F UH2 T\nCOLUCCI  K OW0 - L UW1 - CH IY0\nCOLUCCIO  K OW0 - L UW1 - CH IY0 - OW0\nCOLUMBA  K OW2 - L AH1 M - B AH0\nCOLUMBIA  K AH0 - L AH1 M - B IY0 - AH0\nCOLUMBIA'S  K AH0 - L AH1 M - B IY0 - AH0 Z\nCOLUMBIAN  K OW2 - L AH1 M - B IY0 - AH0 N\nCOLUMBIANS(2)  K OW2 - L AH1 M - B IY0 - AH0 N Z\nCOLUMBINE  K AA1 - L AH0 M - B AY2 N\nCOLUMBINES  K AA1 - L AH0 M - B AY2 N Z\nCOLUMBO  K OW2 - L AH1 M - B OW0\nCOLUMBUS  K AH0 - L AH1 M - B AH0 S\nCOLUMBUS'  K AH0 - L AH1 M - B AH0 S\nCOLUMBUS'S  K AH0 - L AH1 M - B AH0 - S IH0 Z\nCOLUMN  K AA1 - L AH0 M\nCOLUMNED  K AA1 - L AH0 M D\nCOLUMNIST  K AA1 - L AH0 M - N AH0 S T\nCOLUMNISTS  K AA1 - L AH0 M - N AH0 S T S\nCOLUMNISTS(2)  K AA1 - L AH0 M - N AH0 S S\nCOLUMNISTS(3)  K AA1 - L AH0 M - N AH0 S\nCOLUMNS  K AA1 - L AH0 M Z\nCOLUNGA  K OW0 - L UW1 NG - G AH0\nCOLUSSY  K AH0 - L UW1 - S IY0\nCOLVARD  K AA1 L - V ER0 D\nCOLVER  K OW1 L - V ER0\nCOLVERT  K AA1 L - V ER0 T\nCOLVILLE  K AA1 L - V IH0 L\nCOLVIN  K OW1 L - V IH0 N\nCOLWELL  K OW1 L - W EH2 L\nCOLYER  K OW1 - L IY0 - ER0\nCOM  K AA1 M\nCOM'S  K AA1 M Z\nCOMA  K OW1 - M AH0\nCOMAIR  K AA1 - M EH1 R\nCOMAN  K OW1 - M AH0 N\nCOMANCHE  K AH0 - M AE1 N - CH IY0\nCOMANCHES  K AH0 - M AE1 N - CH IY0 Z\nCOMANDANTE  K OW2 - M AH0 N - D AA1 N - T EY0\nCOMANDANTES  K OW2 - M AH0 N - D AA1 N - T EH0 Z\nCOMARCO  K OW0 - M AA1 R - K OW0\nCOMAS  K OW1 - M AH0 Z\nCOMATOSE  K OW1 - M AH0 - T OW2 S\nCOMB  K OW1 M\nCOMBAT  K AA1 M - B AE0 T\nCOMBAT(2)  K AH0 M - B AE1 T\nCOMBATANT  K AH0 M - B AE1 - T AH0 N T\nCOMBATANTS  K AH0 M - B AE1 - T AH0 N T S\nCOMBATING  K AH0 M - B AE1 - T IH0 NG\nCOMBATIVE  K AH0 M - B AE1 - T IH0 V\nCOMBATIVE(2)  K AA2 M - B AE1 - T IH2 V\nCOMBATIVENESS  K AH0 M - B AE1 - T IH0 V - N AH0 S\nCOMBATS  K AH0 M - B AE1 T S\nCOMBATTING  K AH0 M - B AE1 - T IH0 NG\nCOMBE  K OW1 M\nCOMBED  K OW1 M D\nCOMBEE  K AA1 M - B IY2\nCOMBER  K OW1 - M ER0\nCOMBES  K OW1 M Z\nCOMBEST  K OW1 - M IH0 S T\nCOMBINABILITY  K AH0 M - B AY2 - N AH0 - B IH1 - L AH0 - T IY0\nCOMBINABILITY  K AH2 M - B IH0 N - AH0 - B IH1 - L AH0 - T IY0\nCOMBINABLE  K AH0 M - B AY1 - N AH0 - B AH0 L\nCOMBINATION  K AA2 M - B AH0 - N EY1 - SH AH0 N\nCOMBINATIONS  K AA2 M - B AH0 - N EY1 - SH AH0 N Z\nCOMBINE  K AA1 M - B AY0 N\nCOMBINE(2)  K AH0 M - B AY1 N\nCOMBINED  K AH0 M - B AY1 N D\nCOMBINES  K AH0 M - B AY1 N Z\nCOMBING  K OW1 - M IH0 NG\nCOMBINING  K AH0 M - B AY1 - N IH0 NG\nCOMBO  K AA1 M - B OW2\nCOMBS  K OW1 M Z\nCOMBUST  K AH0 M - B AH1 S T\nCOMBUSTABLE  K AH0 M - B AH1 - S T AH0 - B AH0 L\nCOMBUSTION  K AH0 M - B AH1 S - CH AH0 N\nCOMCAST  K AA1 M - K AE2 S T\nCOMCAST'S  K AA1 M - K AE2 S T S\nCOMDATA  K AA1 M - D AE2 - D AH0\nCOMDATA(2)  K AA1 M - D EY2 - D AH0\nCOMDEN  K AA1 M - D IH0 N\nCOMDEX  K AA1 M - D AH0 K S\nCOMDISCO  K AA2 M - D IH1 - S K OW0\nCOME  K AH1 M\nCOME-ON  K AH1 - M AA1 N\nCOME-ONS  K AH1 - M AA1 N Z\nCOMEAU  K AH0 - M OW1\nCOMEAUX  K AH0 - M OW1\nCOMEBACK  K AH1 M - B AE2 K\nCOMEBACKS  K AH1 M - B AE2 K S\nCOMECON  K AA1 - M AH0 - K AA2 N\nCOMEDIAN  K AH0 - M IY1 - D IY0 - AH0 N\nCOMEDIAN'S  K AH0 - M IY1 - D IY0 - AH0 N Z\nCOMEDIANS  K AH0 - M IY1 - D IY0 - AH0 N Z\nCOMEDIC  K AH0 - M IY1 - D IH0 K\nCOMEDIENNE  K AH0 - M IY2 - D IY0 - EH1 N\nCOMEDIES  K AA1 - M AH0 - D IY0 Z\nCOMEDOWN  K AH1 M - D AW2 N\nCOMEDY  K AA1 - M AH0 - D IY0\nCOMEDY'S  K AA1 - M AH0 - D IY0 Z\nCOMEGYS  K AA1 - M IH0 - JH IY0 Z\nCOMELLA  K OW0 - M EH1 - L AH0\nCOMELY  K AH1 M - L IY0\nCOMER  K AH1 - M ER0\nCOMERFORD  K AH0 - M ER1 - F ER0 D\nCOMERICA  K AH0 - M EH1 - R IH0 - K AH0\nCOMERS  K AH1 - M ER0 Z\nCOMES  K AH1 M Z\nCOMET  K AA1 - M AH0 T\nCOMET'S  K AA1 - M AH0 T S\nCOMETARY  K AA1 - M AH0 - T EH2 - R IY0\nCOMETH  K AH1 - M IH0 TH\nCOMETRA  K OW0 - M EH1 - T R AH0\nCOMETS  K AA1 - M AH0 T S\nCOMEUPPANCE  K AH2 - M AH1 - P AH0 N S\nCOMEX  K AA1 - M EH2 K S\nCOMEX'S  K AA1 - M EH2 K - S IH0 Z\nCOMFED  K AA1 M - F EH2 D\nCOMFINANCE  K AA1 M - F IH0 - N AH0 N S\nCOMFORT  K AH1 M - F ER0 T\nCOMFORTABLE  K AH1 M - F ER0 - T AH0 - B AH0 L\nCOMFORTABLY  K AH1 M - F ER0 - T AH0 - B L IY0\nCOMFORTED  K AH1 M - F ER0 - T IH0 D\nCOMFORTER  K AH1 M - F ER0 - T ER0\nCOMFORTERS  K AH1 M - F ER0 - T ER0 Z\nCOMFORTING  K AH1 M - F ER0 - T IH0 NG\nCOMFORTS  K AH1 M - F ER0 T S\nCOMFREY  K AH1 M - F R IY0\nCOMFY  K AH1 M - F IY0\nCOMIC  K AA1 - M IH0 K\nCOMICAL  K AA1 - M IH0 - K AH0 L\nCOMICALLY  K AA1 - M IH0 - K AH0 - L IY0\nCOMICALLY(2)  K AA1 - M IH0 K - L IY0\nCOMICOPIA  K AA2 - M IH0 - K OW1 - P IY0 - AH0\nCOMICS  K AA1 - M IH0 K S\nCOMIN'  K AH1 - M IH0 N\nCOMINCO  K OW0 - M IH1 NG - K OW0\nCOMING  K AH1 - M IH0 NG\nCOMINGS  K AH1 - M IH0 NG Z\nCOMINO  K AH0 - M IY1 - N OW0\nCOMINS  K OW1 - M IH0 N Z\nCOMINSKY  K AH0 - M IH1 N - S K IY0\nCOMISKEY  K OW1 - M IH0 S - K IY1\nCOMITATUS  K AO0 - M AH0 - T EY1 - T AH0 S\nCOMITO  K OW0 - M IY1 - T OW0\nCOMITY  K OW1 - M IH0 - T IY0\nCOMLEY  K AA1 M - L IY0\nCOMLY  K AA1 M - L IY0\nCOMMA  K AA1 - M AH0\nCOMMACK  K AA1 - M AH0 K\nCOMMAND  K AH0 - M AE1 N D\nCOMMAND'S  K AH0 - M AE1 N D Z\nCOMMANDANT  K AA2 - M AH0 N - D AA1 N T\nCOMMANDED  K AH0 - M AE1 N - D AH0 D\nCOMMANDED(2)  K AH0 - M AE1 N - D IH0 D\nCOMMANDEER  K AA2 - M AH0 N - D IH1 R\nCOMMANDEERED  K AA2 - M AH0 N - D IH1 R D\nCOMMANDER  K AH0 - M AE1 N - D ER0\nCOMMANDER'S  K AH0 - M AE1 N - D ER0 Z\nCOMMANDERS  K AH0 - M AE1 N - D ER0 Z\nCOMMANDING  K AH0 - M AE1 N - D IH0 NG\nCOMMANDMENT  K AH0 - M AE1 N D - M AH0 N T\nCOMMANDMENTS  K AH0 - M AE1 N D - M AH0 N T S\nCOMMANDO  K AH0 - M AE1 N - D OW2\nCOMMANDOS  K AH0 - M AE1 N - D OW2 Z\nCOMMANDS  K AH0 - M AE1 N D Z\nCOMMAS  K AA1 - M AH0 Z\nCOMMEMORATE  K AH0 - M EH1 - M ER0 - EY2 T\nCOMMEMORATED  K AH0 - M EH1 - M ER0 - EY2 - T IH0 D\nCOMMEMORATES  K AH0 - M EH1 - M ER0 - EY2 T S\nCOMMEMORATING  K AH0 - M EH1 - M ER0 - EY2 - T IH0 NG\nCOMMEMORATION  K AH0 - M EH2 - M ER0 - EY1 - SH AH0 N\nCOMMEMORATIONS  K AH0 - M EH2 - M ER0 - EY1 - SH AH0 N Z\nCOMMEMORATIVE  K AH0 - M EH1 M - R AH0 - T IH0 V\nCOMMEMORATIVE(2)  K AH0 - M EH1 - M ER0 - EY2 - T IH0 V\nCOMMENCE  K AH0 - M EH1 N S\nCOMMENCED  K AH0 - M EH1 N S T\nCOMMENCEMENT  K AH0 - M EH1 N - S M AH0 N T\nCOMMENCES  K AH0 - M EH1 N - S AH0 Z\nCOMMENCING  K AH0 - M EH1 N - S IH0 NG\nCOMMEND  K AH0 - M EH1 N D\nCOMMENDABLE  K AH0 - M EH1 N - D AH0 - B AH0 L\nCOMMENDATION  K AA2 - M AH0 N - D EY1 - SH AH0 N\nCOMMENDED  K AH0 - M EH1 N - D IH0 D\nCOMMENDING  K AH0 - M EH1 N - D IH0 NG\nCOMMENDS  K AH0 - M EH1 N D Z\nCOMMENSURATE  K AH0 - M EH1 N - S ER0 - AH0 T\nCOMMENSURATE(2)  K AH0 - M EH1 N - S ER0 - IH0 T\nCOMMENSURATELY  K AH0 - M EH1 N - S ER0 - AH0 T - L IY0\nCOMMENSURATELY  K AH0 - M EH1 N - SH ER0 - AH0 T - L IY0\nCOMMENT  K AA1 - M EH0 N T\nCOMMENTARIES  K AA1 - M AH0 N - T EH2 - R IY0 Z\nCOMMENTARY  K AA1 - M AH0 N - T EH2 - R IY0\nCOMMENTATOR  K AA1 - M AH0 N - T EY2 - T ER0\nCOMMENTATOR'S  K AA1 - M AH0 N - T EY2 - T ER0 Z\nCOMMENTATORS  K AA1 - M AH0 N - T EY2 - T ER0 Z\nCOMMENTED  K AA1 - M EH0 N - T AH0 D\nCOMMENTER  K AA1 - M EH0 N - T ER0\nCOMMENTERS  K AA1 - M EH0 N - T ER0 Z\nCOMMENTING  K AA1 - M EH0 N - T IH0 NG\nCOMMENTS  K AA1 - M EH0 N T S\nCOMMERCE  K AA1 - M ER0 S\nCOMMERCE'S  K AA1 - M ER0 - S IH0 Z\nCOMMERCEBANCORP  K AA2 - M ER0 S - B AE1 N - K AO2 R P\nCOMMERCIAL  K AH0 - M ER1 - SH AH0 L\nCOMMERCIAL'S  K AH0 - M ER1 - SH AH0 L Z\nCOMMERCIALE  K AH0 - M ER2 - S IY0 - AE1 L\nCOMMERCIALE'S  K AH0 - M ER2 - S IY0 - AE1 L Z\nCOMMERCIALE'S(2)  K OW0 - M EH2 R - S IY0 - AE1 - L EY2 Z\nCOMMERCIALISM  K AH0 - M ER1 - SH AH0 - L IH2 - Z AH0 M\nCOMMERCIALIZATION  K AH0 - M ER2 - SH AH0 - L IH0 - Z EY1 - SH AH0 N\nCOMMERCIALIZE  K AH0 - M ER1 - SH AH0 - L AY2 Z\nCOMMERCIALIZED  K AH0 - M ER1 - SH AH0 - L AY2 Z D\nCOMMERCIALIZING  K AH0 - M ER1 - SH AH0 - L AY2 - Z IH0 NG\nCOMMERCIALLY  K AH0 - M ER1 - SH AH0 - L IY0\nCOMMERCIALS  K AH0 - M ER1 - SH AH0 L Z\nCOMMERFORD  K AA1 - M ER0 - F ER0 D\nCOMMERICAL  K AH0 - M ER1 - SH AH0 L\nCOMMERZBANK  K AA1 - M ER0 Z - B AE2 NG K\nCOMMERZBANK'S  K AA1 - M ER0 Z - B AE1 NG K S\nCOMMIE  K AA1 - M IY0\nCOMMIES  K AA1 - M IY0 Z\nCOMMINGLE  K AH0 - M IH1 NG - G AH0 L\nCOMMINGLE(2)  K OW0 - M IH1 NG - G AH0 L\nCOMMINGLED  K AA0 - M IH1 NG - G AH0 L D\nCOMMINGLED(2)  K OW0 - M IH1 NG - G AH0 L D\nCOMMINGLING  K AA0 - M IH1 NG - G AH0 L - IH0 NG\nCOMMINGLING(2)  K OW0 - M IH1 NG - G L IH0 NG\nCOMMINS  K AA1 - M IH0 N Z\nCOMMISERATE  K AH0 - M IH1 - S ER0 - EY2 T\nCOMMISH  K AH0 - M IH1 SH\nCOMMISION  K AH0 - M IH1 - Z AH0 N\nCOMMISION(2)  K AH0 - M IH1 - SH AH0 N\nCOMMISSAR  K AA1 - M AH0 - S AA2 R\nCOMMISSARIES  K AA1 - M AH0 - S EH2 - R IY0 Z\nCOMMISSARS  K AA1 - M IH0 - S AA0 Z\nCOMMISSARY  K AA1 - M AH0 - S EH2 - R IY0\nCOMMISSION  K AH0 - M IH1 - SH AH0 N\nCOMMISSION'S  K AH0 - M IH1 - SH AH0 N Z\nCOMMISSIONED  K AH0 - M IH1 - SH AH0 N D\nCOMMISSIONER  K AH0 - M IH1 - SH AH0 N - ER0\nCOMMISSIONER'S  K AH0 - M IH1 - SH AH0 N - ER0 Z\nCOMMISSIONERS  K AH0 - M IH1 - SH AH0 N - ER0 Z\nCOMMISSIONING  K AH0 - M IH1 - SH AH0 N - IH0 NG\nCOMMISSIONS  K AH0 - M IH1 - SH AH0 N Z\nCOMMISSO  K OW0 - M IY1 - S OW0\nCOMMIT  K AH0 - M IH1 T\nCOMMITEE  K AA1 - M IH0 - T IY0\nCOMMITEE(2)  K AH0 - M IH1 - T IY0\nCOMMITMENT  K AH0 - M IH1 T - M AH0 N T\nCOMMITMENTS  K AH0 - M IH1 T - M AH0 N T S\nCOMMITS  K AH0 - M IH1 T S\nCOMMITTAL  K AH0 - M IH1 - T AH0 L\nCOMMITTED  K AH0 - M IH1 - T AH0 D\nCOMMITTEE  K AH0 - M IH1 - T IY0\nCOMMITTEE'S  K AH0 - M IH1 - T IY0 Z\nCOMMITTEEMAN  K AH0 - M IH1 - T IY0 - M AH0 N\nCOMMITTEES  K AH0 - M IH1 - T IY0 Z\nCOMMITTEES'  K AH0 - M IH1 - T IY0 Z\nCOMMITTING  K AH0 - M IH1 - T IH0 NG\nCOMMODE  K AH0 - M OW1 D\nCOMMODIOUS  K AH0 - M OW1 - D IY0 - AH0 S\nCOMMODITIES  K AH0 - M AA1 - D AH0 - T IY0 Z\nCOMMODITY  K AH0 - M AA1 - D AH0 - T IY0\nCOMMODITY'S  K AH0 - M AA1 - D AH0 - T IY0 Z\nCOMMODORE  K AA1 - M AH0 - D AO2 R\nCOMMODORE'S  K AA1 - M AH0 - D AO2 R Z\nCOMMON  K AA1 - M AH0 N\nCOMMONALITIES  K AA2 - M AH0 - N AE1 - L AH0 - T IY0 Z\nCOMMONALITY  K AA2 - M AH0 - N AE1 - L AH0 - T IY0\nCOMMONER  K AA1 - M AH0 - N ER0\nCOMMONERS  K AA1 - M AH0 - N ER0 Z\nCOMMONLY  K AA1 - M AH0 N - L IY0\nCOMMONPLACE  K AA1 - M AH0 N - P L EY2 S\nCOMMONS  K AA1 - M AH0 N Z\nCOMMONSENSE  K AA2 - M AH0 N - S EH1 N S\nCOMMONSENSICAL  K AA2 - M AH0 N - S EH1 N - S IH0 - K AH0 L\nCOMMONWEALTH  K AA1 - M AH0 N - W EH2 L TH\nCOMMONWEALTH'S  K AA1 - M AH0 N - W EH2 L TH S\nCOMMOTION  K AH0 - M OW1 - SH AH0 N\nCOMMUNAL  K AH0 - M Y UW1 - N AH0 L\nCOMMUNE  K AA1 - M Y UW0 N\nCOMMUNE(2)  K AH0 - M Y UW1 N\nCOMMUNES  K AA1 - M Y UW0 N Z\nCOMMUNES(2)  K AH0 - M Y UW1 N Z\nCOMMUNICABLE  K AH0 - M Y UW1 - N AH0 - K AH0 - B AH0 L\nCOMMUNICATE  K AH0 - M Y UW1 - N AH0 - K EY2 T\nCOMMUNICATED  K AH0 - M Y UW1 - N AH0 - K EY2 - T IH0 D\nCOMMUNICATES  K AH0 - M Y UW1 - N IH0 - K EY2 T S\nCOMMUNICATING  K AH0 - M Y UW1 - N AH0 - K EY2 - T IH0 NG\nCOMMUNICATION  K AH0 - M Y UW2 - N AH0 - K EY1 - SH AH0 N\nCOMMUNICATION'S  K AH0 - M Y UW2 - N IH0 - K EY1 - SH AH0 N Z\nCOMMUNICATIONS  K AH0 - M Y UW2 - N AH0 - K EY1 - SH AH0 N Z\nCOMMUNICATIONS'  K AH0 - M Y UW2 - N AH0 - K EY1 - SH AH0 N Z\nCOMMUNICATIVE  K AH0 - M Y UW1 - N AH0 - K AH0 - T IH0 V\nCOMMUNICATOR  K AH0 - M Y UW1 - N AH0 - K EY2 - T ER0\nCOMMUNICATORS  K AH0 - M Y UW1 - N AH0 - K EY0 - T ER0 Z\nCOMMUNION  K AH0 - M Y UW1 - N Y AH0 N\nCOMMUNIQUE  K AH0 - M Y UW1 - N AH0 - K EY2\nCOMMUNIQUE(2)  K AH0 - M Y UW2 - N AH0 - K EY1\nCOMMUNIQUES  K AH0 - M Y UW2 - N IH0 - K EY1 Z\nCOMMUNISM  K AA1 - M Y AH0 - N IH2 - Z AH0 M\nCOMMUNISM'S  K AA1 - M Y AH0 - N IH2 - Z AH0 M Z\nCOMMUNIST  K AA1 - M Y AH0 - N AH0 S T\nCOMMUNIST'S  K AA1 - M Y AH0 - N AH0 S T S\nCOMMUNISTS  K AA1 - M Y AH0 - N AH0 S T S\nCOMMUNISTS'  K AA1 - M Y UW0 - N IH0 S T S\nCOMMUNISTS(2)  K AA1 - M Y AH0 - N AH0 S S\nCOMMUNISTS(3)  K AA1 - M Y AH0 - N AH0 S\nCOMMUNITIES  K AH0 - M Y UW1 - N AH0 - T IY0 Z\nCOMMUNITIES(2)  K AH0 - M Y UW1 - N IH0 - T IY0 Z\nCOMMUNITY  K AH0 - M Y UW1 - N AH0 - T IY0\nCOMMUNITY'S  K AH0 - M Y UW1 - N IH0 - T IY0 Z\nCOMMUNITY(2)  K AH0 - M Y UW1 - N IH0 - T IY0\nCOMMUNITYWIDE  K AH0 - M Y UW1 - N IH0 - T IY0 - W AY2 D\nCOMMUNIZATION  K AA2 - M Y AH0 - N AH0 - Z EY1 - SH AH0 N\nCOMMUNIZE  K AA1 - M Y AH0 - N AY2 Z\nCOMMUTE  K AH0 - M Y UW1 T\nCOMMUTED  K AH0 - M Y UW1 - T IH0 D\nCOMMUTER  K AH0 - M Y UW1 - T ER0\nCOMMUTERS  K AH0 - M Y UW1 - T ER0 Z\nCOMMUTES  K AH0 - M Y UW1 T S\nCOMMUTING  K AH0 - M Y UW1 - T IH0 NG\nCOMO  K OW1 - M OW0\nCOMP  K AA1 M P\nCOMPACT  K AA1 M - P AE0 K T\nCOMPACT(2)  K AH0 M - P AE1 K T\nCOMPACTED  K AH0 M - P AE1 K - T IH0 D\nCOMPACTNESS  K AH0 M - P AE1 K T - N AH0 S\nCOMPACTOR  K AH0 M - P AE1 K - T ER0\nCOMPACTS  K AH0 M - P AE1 K T S\nCOMPACTS(2)  K AA1 M - P AE0 K T S\nCOMPAGNIE  K AH1 M - P AH0 - N IY0\nCOMPANHIA  K AH0 M - P AE1 N - HH IY0 - AH0\nCOMPANIA  K AH0 M - P EY1 - N IY0 - AH0\nCOMPANIES  K AH1 M - P AH0 - N IY0 Z\nCOMPANIES'  K AH1 M - P AH0 - N IY0 Z\nCOMPANIES'S  K AH1 M - P AH0 - N IY0 - Z IH0 Z\nCOMPANION  K AH0 M - P AE1 - N Y AH0 N\nCOMPANIONS  K AH0 M - P AE1 - N Y AH0 N Z\nCOMPANIONSHIP  K AH0 M - P AE1 - N Y AH0 N - SH IH2 P\nCOMPANIONWAY  K AH0 M - P AE1 - N Y AH0 N - W EY2\nCOMPANY  K AH1 M - P AH0 - N IY0\nCOMPANY'S  K AH1 M - P AH0 - N IY0 Z\nCOMPANYWIDE  K AH1 M - P AH0 - N IY0 - W AY2 D\nCOMPAQ  K AA1 M - P AE2 K\nCOMPAQ'S  K AA1 M - P AE2 K S\nCOMPARABILITY  K AA2 M - P ER0 - AH0 - B IH1 - L IH0 - T IY0\nCOMPARABLE  K AA1 M - P ER0 - AH0 - B AH0 L\nCOMPARABLE(2)  K AH0 M - P EH1 - R AH0 - B AH0 L\nCOMPARABLE(3)  K AH0 M - P R AH0 - B AH0 L\nCOMPARABLY  K AA1 M - P ER0 - AH0 - B L IY0\nCOMPARABLY(2)  K AA1 M - P R AH0 - B L IY0\nCOMPARATIVE  K AH0 M - P EH1 - R AH0 - T IH0 V\nCOMPARATIVELY  K AH0 M - P EH1 - R AH0 - T IH0 V - L IY0\nCOMPARATOR  K AH0 M - P ER1 - AH0 - T ER0\nCOMPARE  K AH0 M - P EH1 R\nCOMPARED  K AH0 M - P EH1 R D\nCOMPARES  K AH0 M - P EH1 R Z\nCOMPARING  K AH0 M - P EH1 - R IH0 NG\nCOMPARISON  K AH0 M - P EH1 - R AH0 - S AH0 N\nCOMPARISONS  K AH0 M - P EH1 - R AH0 - S AH0 N Z\nCOMPARTMENT  K AH0 M - P AA1 R T - M AH0 N T\nCOMPARTMENTAL  K AH0 M - P AA2 R T - M EH1 N - T AH0 L\nCOMPARTMENTALIZE  K AH0 M - P AA2 R T - M EH1 N - T AH0 - L AY2 Z\nCOMPARTMENTALIZED  K AA2 M - P AA0 R T - M EH1 N - T AH0 - L AY0 Z D\nCOMPARTMENTS  K AH0 M - P AA1 R T - M AH0 N T S\nCOMPAS  K AA1 M - P AH0 S\nCOMPASS  K AH1 M - P AH0 S\nCOMPASSION  K AH0 M - P AE1 - SH AH0 N\nCOMPASSIONATE  K AH0 M - P AE1 - SH AH0 - N AH0 T\nCOMPASSIONATELY  K AH0 M - P AE1 - SH AH0 - N AH0 T - L IY0\nCOMPATIBILITY  K AH0 M - P AE2 - T AH0 - B IH1 - L AH0 - T IY0\nCOMPATIBLE  K AH0 M - P AE1 - T AH0 - B AH0 L\nCOMPATIBLES  K AH0 M - P AE1 - T IH0 - B AH0 L Z\nCOMPATRIOT  K AH0 M - P EY1 - T R IY0 - AH0 T\nCOMPATRIOTS  K AH0 M - P EY1 - T R IY0 - AH0 T S\nCOMPEAN  K AA1 M - P AH0 N\nCOMPEAU  K AH0 M - P OW1\nCOMPEL  K AH0 M - P EH1 L\nCOMPELLED  K AH0 M - P EH1 L D\nCOMPELLING  K AH0 M - P EH1 - L IH0 NG\nCOMPELLINGLY  K AH0 M - P EH1 - L IH0 NG - L IY0\nCOMPELS  K AH0 M - P EH1 L Z\nCOMPENDIUM  K AH0 M - P EH1 N - D IY0 - AH0 M\nCOMPENSABLE  K AH0 M - P EH1 N - S AH0 - B AH0 L\nCOMPENSATE  K AA1 M - P AH0 N - S EY2 T\nCOMPENSATED  K AA1 M - P AH0 N - S EY2 - T AH0 D\nCOMPENSATES  K AA1 M - P AH0 N - S EY2 T S\nCOMPENSATING  K AA1 M - P AH0 N - S EY2 - T IH0 NG\nCOMPENSATION  K AA2 M - P AH0 N - S EY1 - SH AH0 N\nCOMPENSATIONS  K AA2 M - P AH0 N - S EY1 - SH AH0 N Z\nCOMPENSATORY  K AH0 M - P EH1 N - S AH0 - T AO2 - R IY0\nCOMPETE  K AH0 M - P IY1 T\nCOMPETED  K AH0 M - P IY1 - T IH0 D\nCOMPETENCE  K AA1 M - P AH0 - T IH0 N S\nCOMPETENCIES  K AA1 M - P AH0 - T IH0 N - S IY0 Z\nCOMPETENCY  K AA1 M - P AH0 - T IH0 N - S IY0\nCOMPETENT  K AA1 M - P AH0 - T IH0 N T\nCOMPETENTLY  K AA1 M - P AH0 - T IH0 N T - L IY0\nCOMPETES  K AH0 M - P IY1 T S\nCOMPETING  K AH0 M - P IY1 - T IH0 NG\nCOMPETITION  K AA2 M - P AH0 - T IH1 - SH AH0 N\nCOMPETITION'S  K AA2 M - P AH0 - T IH1 - SH AH0 N Z\nCOMPETITIONS  K AA2 M - P AH0 - T IH1 - SH AH0 N Z\nCOMPETITIVE  K AH0 M - P EH1 - T AH0 - T IH0 V\nCOMPETITIVE(2)  K AH0 M - P EH1 - T IH0 - T IH0 V\nCOMPETITIVELY  K AH0 M - P EH1 - T IH0 - T IH0 V - L IY0\nCOMPETITIVENESS  K AH0 M - P EH1 - T IH0 - T IH0 V - N IH0 S\nCOMPETITOR  K AH0 M - P EH1 - T AH0 - T ER0\nCOMPETITOR'S  K AH0 M - P EH1 - T AH0 - T ER0 Z\nCOMPETITOR(2)  K AH0 M - P EH1 - T IH0 - T ER0\nCOMPETITORS  K AH0 M - P EH1 - T AH0 - T ER0 Z\nCOMPETITORS'  K AH0 M - P EH1 - T IH0 - T ER0 Z\nCOMPETITORS(2)  K AH0 M - P EH1 - T IH0 - T ER0 Z\nCOMPHER  K AA1 M - F ER0\nCOMPILATION  K AA2 M - P AH0 - L EY1 - SH AH0 N\nCOMPILATIONS  K AA2 M - P AH0 - L EY1 - SH AH0 N Z\nCOMPILE  K AH0 M - P AY1 L\nCOMPILED  K AH0 M - P AY1 L D\nCOMPILER  K AH0 M - P AY1 - L ER0\nCOMPILERS  K AH0 M - P AY1 - L ER0 Z\nCOMPILES  K AH0 M - P AY1 L Z\nCOMPILING  K AH0 M - P AY1 - L IH0 NG\nCOMPLACENCY  K AH0 M - P L EY1 - S AH0 N - S IY0\nCOMPLACENT  K AH0 M - P L EY1 - S AH0 N T\nCOMPLACENTLY  K AH0 M - P L EY1 - S AH0 N T - L IY0\nCOMPLAIN  K AH0 M - P L EY1 N\nCOMPLAINANT  K AH0 M - P L EY1 - N AH0 N T\nCOMPLAINANTS  K AH0 M - P L EY1 - N AH0 N T S\nCOMPLAINED  K AH0 M - P L EY1 N D\nCOMPLAINER  K AH0 M - P L EY1 - N ER0\nCOMPLAINERS  K AA1 M - P L EY2 - N ER0 Z\nCOMPLAINING  K AH0 M - P L EY1 - N IH0 NG\nCOMPLAINS  K AH0 M - P L EY1 N Z\nCOMPLAINT  K AH0 M - P L EY1 N T\nCOMPLAINTS  K AH0 M - P L EY1 N T S\nCOMPLAISANT  K AH0 M - P L EY1 - S AH0 N T\nCOMPLEMENT  K AA1 M - P L AH0 - M AH0 N T\nCOMPLEMENTARY  K AA2 M - P L AH0 - M EH1 N - T R IY0\nCOMPLEMENTARY(2)  K AA2 M - P L AH0 - M EH1 N - CH IY0\nCOMPLEMENTED  K AA1 M - P L AH0 - M EH2 N - T IH0 D\nCOMPLEMENTING  K AA1 M - P L AH0 - M EH2 N - T IH0 NG\nCOMPLEMENTS  K AA1 M - P L AH0 - M AH0 N T S\nCOMPLETE  K AH0 M - P L IY1 T\nCOMPLETED  K AH0 M - P L IY1 - T AH0 D\nCOMPLETED(2)  K AH0 M - P L IY1 - T IH0 D\nCOMPLETELY  K AH0 M - P L IY1 T - L IY0\nCOMPLETENESS  K AH0 M - P L IY1 T - N AH0 S\nCOMPLETES  K AH0 M - P L IY1 T S\nCOMPLETING  K AH0 M - P L IY1 - T IH0 NG\nCOMPLETION  K AH0 M - P L IY1 - SH AH0 N\nCOMPLETIONS  K AH0 M - P L IY1 - SH AH0 N Z\nCOMPLEX  K AA1 M - P L EH0 K S\nCOMPLEX(2)  K AH0 M - P L EH1 K S\nCOMPLEXES  K AA1 M - P L EH0 K - S AH0 Z\nCOMPLEXION  K AH0 M - P EH1 K - SH AH0 N\nCOMPLEXIONS  K AH0 M - P EH1 K - SH AH0 N Z\nCOMPLEXITIES  K AH0 M - P L EH1 K - S IH0 - T IY0 Z\nCOMPLEXITY  K AH0 M - P L EH1 K - S AH0 - T IY0\nCOMPLEXITY(2)  K AH0 M - P L EH1 K - S IH0 - T IY0\nCOMPLIANCE  K AH0 M - P L AY1 - AH0 N S\nCOMPLIANT  K AH0 M - P L AY1 - AH0 N T\nCOMPLICATE  K AA1 M - P L AH0 - K EY2 T\nCOMPLICATED  K AA1 M - P L AH0 - K EY2 - T AH0 D\nCOMPLICATES  K AA1 M - P L IH0 - K EY2 T S\nCOMPLICATING  K AA1 M - P L AH0 - K EY2 - T IH0 NG\nCOMPLICATION  K AA2 M - P L AH0 - K EY1 - SH AH0 N\nCOMPLICATIONS  K AA2 M - P L AH0 - K EY1 - SH AH0 N Z\nCOMPLICIT  K AH0 M - P L IH1 - S AH0 T\nCOMPLICITY  K AH0 M - P L IH1 - S AH0 - T IY0\nCOMPLICITY(2)  K AH0 M - P L IH1 - S IH0 - T IY0\nCOMPLIED  K AH0 M - P L AY1 D\nCOMPLIES  K AH0 M - P L AY1 Z\nCOMPLIMENT  K AA1 M - P L AH0 - M EH0 N T\nCOMPLIMENTARY  K AA2 M - P L AH0 - M EH1 N - T ER0 - IY0\nCOMPLIMENTED  K AA1 M - P L AH0 - M EH2 N - T IH0 D\nCOMPLIMENTING  K AA1 M - P L AH0 - M EH2 N - T IH0 NG\nCOMPLIMENTS  K AA1 M - P L AH0 - M EH0 N T S\nCOMPLY  K AH0 M - P L AY1\nCOMPLYING  K AH0 M - P L AY1 - IH0 NG\nCOMPO  K AA1 M - P OW2\nCOMPONENT  K AH0 M - P OW1 - N AH0 N T\nCOMPONENTS  K AH0 M - P OW1 - N AH0 N T S\nCOMPORT  K AH0 M - P AO1 R T\nCOMPORTMENT  K AH0 M - P AO1 R T - M AH0 N T\nCOMPOSE  K AH0 M - P OW1 Z\nCOMPOSED  K AH0 M - P OW1 Z D\nCOMPOSER  K AH0 M - P OW1 - Z ER0\nCOMPOSER'S  K AH0 M - P OW1 - Z ER0 Z\nCOMPOSERS  K AH0 M - P OW1 - Z ER0 Z\nCOMPOSES  K AH0 M - P OW1 - Z IH0 Z\nCOMPOSING  K AH0 M - P OW1 - Z IH0 NG\nCOMPOSITE  K AH0 M - P AA1 - Z AH0 T\nCOMPOSITE'S  K AH0 M - P AA1 - Z AH0 T S\nCOMPOSITE'S(2)  K AA0 M - P AA1 - Z AH0 T S\nCOMPOSITE(2)  K AA0 M - P AA1 - Z AH0 T\nCOMPOSITES  K AH0 M - P AA1 - Z AH0 T S\nCOMPOSITES(2)  K AA0 M - P AA1 - Z AH0 T S\nCOMPOSITION  K AA2 M - P AH0 - Z IH1 - SH AH0 N\nCOMPOSITIONAL  K AA2 M - P AH0 - Z IH1 - SH AH0 - N AH0 L\nCOMPOSITIONS  K AA2 M - P AH0 - Z IH1 - SH AH0 N Z\nCOMPOST  K AA1 M - P OW0 S T\nCOMPOSTING  K AA1 M - P OW2 - S T IH0 NG\nCOMPOSURE  K AH0 M - P OW1 - ZH ER0\nCOMPOTE  K AA1 M - P OW0 T\nCOMPOUND  K AA1 M - P AW0 N D\nCOMPOUND(2)  K AH0 M - P AW1 N D\nCOMPOUNDED  K AH0 M - P AW1 N - D AH0 D\nCOMPOUNDED(2)  K AH0 M - P AW1 N - D IH0 D\nCOMPOUNDING  K AH0 M - P AW1 N - D IH0 NG\nCOMPOUNDS  K AA1 M - P AW0 N D Z\nCOMPOUNDS(2)  K AH0 M - P AW1 N D Z\nCOMPREHEND  K AA2 M - P R IY0 - HH EH1 N D\nCOMPREHENDED  K AA2 M - P R IH0 - HH EH1 N - D IH0 D\nCOMPREHENDING  K AA2 M - P R IH0 - HH EH1 N - D IH0 NG\nCOMPREHENSIBILITY  K AA2 M - P R IY0 - HH EH2 N - S AH0 - B IH1 - L AH0 - T IY0\nCOMPREHENSIBLE  K AA2 M - P R IY0 - HH EH1 N - S AH0 - B AH0 L\nCOMPREHENSION  K AA2 M - P R IY0 - HH EH1 N - SH AH0 N\nCOMPREHENSIVE  K AA2 M - P R IY0 - HH EH1 N - S IH0 V\nCOMPREHENSIVELY  K AA2 M - P R IH0 - HH EH1 N - S IH0 V - L IY0\nCOMPRESS  K AA1 M - P R EH0 S\nCOMPRESS(2)  K AH0 M - P R EH1 S\nCOMPRESSED  K AH0 M - P R EH1 S T\nCOMPRESSES  K AA1 M - P R EH0 - S AH0 Z\nCOMPRESSES(2)  K AH0 M - P R EH1 - S AH0 Z\nCOMPRESSES(3)  K AH0 M - P R EH1 - S IH0 Z\nCOMPRESSING  K AH0 M - P R EH1 - S IH0 NG\nCOMPRESSION  K AH0 M - P R EH1 - SH AH0 N\nCOMPRESSOR  K AH0 M - P R EH1 - S ER0\nCOMPRESSORS  K AH0 M - P R EH1 - S ER0 Z\nCOMPRINT  K AA1 M - P R IH2 N T\nCOMPRISE  K AH0 M - P R AY1 Z\nCOMPRISED  K AH0 M - P R AY1 Z D\nCOMPRISES  K AH0 M - P R AY1 - Z AH0 Z\nCOMPRISES(2)  K AH0 M - P R AY1 - Z IH0 Z\nCOMPRISING  K AH0 M - P R AY1 - Z IH0 NG\nCOMPROMISE  K AA1 M - P R AH0 - M AY2 Z\nCOMPROMISED  K AA1 M - P R AH0 - M AY2 Z D\nCOMPROMISER  K AA1 M - P R AH0 - M AY2 - Z ER0\nCOMPROMISES  K AA1 M - P R AH0 - M AY2 - Z IH0 Z\nCOMPROMISING  K AA1 M - P R AH0 - M AY2 - Z IH0 NG\nCOMPSTON  K AA1 M P - S T AH0 N\nCOMPTEK  K AA1 M P - T EH2 K\nCOMPTON  K AA1 M P - T AH0 N\nCOMPTON'S  K AA1 M P - T AH0 N Z\nCOMPTROLLER  K AH0 N - T R OW1 - L ER0\nCOMPTROLLER'S  K AH0 N - T R OW1 - L ER0 Z\nCOMPTROLLER'S(2)  K AA1 M - T R OW2 - L ER0 Z\nCOMPTROLLER(2)  K AA1 N - T R OW2 - L ER0\nCOMPTRONIX  K AA2 M P - T R AA1 - N IH2 K S\nCOMPUADD  K AA1 M - P Y UW0 - AE2 D\nCOMPUCHEM  K AA1 M - P Y UW0 - K EH2 M\nCOMPUDYNE  K AA1 M - P Y UW0 - D AY2 N\nCOMPUFUND  K AA1 M - P Y UW0 - F AH2 N D\nCOMPUGRAPHIC  K AA2 M - P Y UW0 - G R AE1 - F IH0 K\nCOMPULSION  K AH0 M - P AH1 L - SH AH0 N\nCOMPULSIONS  K AH0 M - P UH1 L - SH AH0 N Z\nCOMPULSIVE  K AH0 M - P AH1 L - S IH0 V\nCOMPULSIVELY  K AH0 M - P AH1 L - S IH0 V - L IY0\nCOMPULSORY  K AH0 M - P AH1 L - S ER0 - IY0\nCOMPUMAT  K AA1 M - P Y UW0 - M AE2 T\nCOMPUNCTION  K AH0 M - P AH1 NG K - SH AH0 N\nCOMPUSA  K AA1 M - P Y UW1 - EH1 - S EY1\nCOMPUSA'S  K AA1 M - P Y UW1 - EH1 - S EY1 Z\nCOMPUSERVE  K AA1 M - P Y UW0 - S ER0 V\nCOMPUSERVE'S  K AA1 M - P Y UW0 - S ER0 V Z\nCOMPUTALOG  K AA1 M - P Y UW0 - T AE2 - L AO0 G\nCOMPUTATION  K AA2 M - P Y AH0 - T EY1 - SH AH0 N\nCOMPUTATIONAL  K AA2 M - P Y UW0 - T EY1 - SH AH0 - N AH0 L\nCOMPUTATIONS  K AA2 M - P Y UW0 - T EY1 - SH AH0 N Z\nCOMPUTE  K AH0 M - P Y UW1 T\nCOMPUTED  K AH0 M - P Y UW1 - T AH0 D\nCOMPUTED(2)  K AH0 M - P Y UW1 - T IH0 D\nCOMPUTER  K AH0 M - P Y UW1 - T ER0\nCOMPUTER'S  K AH0 M - P Y UW1 - T ER0 Z\nCOMPUTERCRAFT  K AH0 M - P Y UW1 - T ER0 - K R AE2 F T\nCOMPUTERIZATION  K AH0 M - P Y UW2 - T ER0 - IH0 - Z EY1 - SH AH0 N\nCOMPUTERIZE  K AH0 M - P Y UW1 - T ER0 - AY2 Z\nCOMPUTERIZED  K AH0 M - P Y UW1 - T ER0 - AY2 Z D\nCOMPUTERIZING  K AH0 M - P Y UW1 - T ER0 - AY2 - Z IH0 NG\nCOMPUTERLAND  K AH0 M - P Y UW1 - T ER0 - L AE2 N D\nCOMPUTERLAND'S  K AH0 M - P Y UW1 - T ER0 - L AE2 N D Z\nCOMPUTERLIKE  K AH0 M - P Y UW1 - T ER0 - L AY2 K\nCOMPUTERS  K AH0 M - P Y UW1 - T ER0 Z\nCOMPUTERS'  K AH0 M - P Y UW1 - T ER0 Z\nCOMPUTERVISION  K AH0 M - P Y UW1 - T ER0 - V IH2 - ZH AH0 N\nCOMPUTERWORLD  K AH0 M - P Y UW1 - T ER0 - W ER2 L D\nCOMPUTES  K AH0 M - P Y UW1 T S\nCOMPUTING  K AH0 M - P Y UW1 - T IH0 NG\nCOMPUTRAC  K AA1 M - P Y UW0 - T R AE2 K\nCOMPUWARE  K AA1 M - P Y UW0 - W EH2 R\nCOMRADE  K AA1 M - R AE2 D\nCOMRADES  K AA1 M - R AE2 D Z\nCOMRIE  K AA1 - M ER0 - IY0\nCOMS  K AA1 M Z\nCOMSAT  K AA1 M - S AE0 T\nCOMSAT'S  K AA1 M - S AE0 T S\nCOMSTOCK  K AA1 M - S T AA2 K\nCOMTOIS  K AH0 M - T W AA1\nCOMTREX  K AA1 M - T R EH2 K S\nCOMUNALE  K OW0 - M UW0 - N AA1 - L IY0\nCON  K AA1 N\nCONA  K OW1 - N AH0\nCONABLE  K OW1 - N AH0 - B AH0 L\nCONABLE'S  K OW1 - N AH0 - B AH0 L Z\nCONAGRA  K AA2 - N AE1 - G R AH0\nCONAGRA'S  K AA2 - N AE1 - G R AH0 Z\nCONAHAN  K AA1 - N AH0 - HH AE0 N\nCONAIR  K AA1 - N EH2 R\nCONAL  K OW1 - N AH0 L\nCONAN  K OW1 - N AH0 N\nCONANT  K OW1 - N AH0 N T\nCONANT-PABLOS  K OW1 - N AH0 N T - P AA1 - B L OW0 S\nCONARD  K AA1 - N ER0 D\nCONASUPO  K AA2 - N AH0 - S UW1 - P OW0\nCONATSER  K AA1 - N AH0 T - S ER0\nCONATY  K AA1 - N AH0 - T IY0\nCONAWAY  K AA1 N - AH0 - W EY0\nCONBOY  K AA1 N - B OY0\nCONCA  K AA1 NG - K AH0\nCONCANNON  K AH0 N - K AE1 - N AH0 N\nCONCATENATE  K AH0 N - K AE1 - T AH0 - N EY2 T\nCONCATENATION  K AH0 N - K AE2 - T AH0 - N EY1 - SH AH0 N\nCONCAVE  K AA0 N - K EY1 V\nCONCAVE(2)  K AA1 N - K EY0 V\nCONCEAL  K AH0 N - S IY1 L\nCONCEALED  K AH0 N - S IY1 L D\nCONCEALING  K AH0 N - S IY1 - L IH0 NG\nCONCEALMENT  K AH0 N - S IY1 L - M AH0 N T\nCONCEALS  K AH0 N - S IY1 L Z\nCONCEDE  K AH0 N - S IY1 D\nCONCEDED  K AH0 N - S IY1 - D IH0 D\nCONCEDES  K AH0 N - S IY1 D Z\nCONCEDING  K AH0 N - S IY1 - D IH0 NG\nCONCEIT  K AH0 N - S IY1 T\nCONCEITED  K AH0 N - S IY1 - T AH0 D\nCONCEIVABLE  K AH0 N - S IY1 - V AH0 - B AH0 L\nCONCEIVABLY  K AH0 N - S IY1 - V AH0 - B L IY0\nCONCEIVE  K AH0 N - S IY1 V\nCONCEIVED  K AH0 N - S IY1 V D\nCONCEIVING  K AH0 N - S IY1 - V IH0 NG\nCONCENTRATE  K AA1 N - S AH0 N - T R EY2 T\nCONCENTRATED  K AA1 N - S AH0 N - T R EY2 - T AH0 D\nCONCENTRATED(2)  K AO1 N - S AH0 N - T R EY2 - T IH0 D\nCONCENTRATES  K AA1 N - S AH0 N - T R EY2 T S\nCONCENTRATING  K AA1 N - S AH0 N - T R EY2 - T IH0 NG\nCONCENTRATION  K AA2 N - S AH0 N - T R EY1 - SH AH0 N\nCONCENTRATIONS  K AA2 N - S AH0 N - T R EY1 - SH AH0 N Z\nCONCENTRIC  K AH0 N - S EH1 N - T R IH0 K\nCONCEPCION  K AH0 N - S EH2 P - S IY0 - OW1 N\nCONCEPT  K AA1 N - S EH0 P T\nCONCEPTION  K AH0 N - S EH1 P - SH AH0 N\nCONCEPTIONS  K AH0 N - S EH1 P - SH AH0 N Z\nCONCEPTS  K AA1 N - S EH0 P T S\nCONCEPTS(2)  K AA1 N - S EH0 P S\nCONCEPTUAL  K AH0 N - S EH1 P - CH UW0 - AH0 L\nCONCEPTUALIZATION  K AH0 N - S EH1 P - CH W AH0 - L IH0 - Z EY2 - SH AH0 N\nCONCEPTUALLY  K AH0 N - S EH1 P - CH UW0 - AH0 - L IY0\nCONCERN  K AH0 N - S ER1 N\nCONCERN'S  K AH0 N - S ER1 N Z\nCONCERNED  K AH0 N - S ER1 N D\nCONCERNING  K AH0 N - S ER1 - N IH0 NG\nCONCERNS  K AH0 N - S ER1 N Z\nCONCERNS'  K AH0 N - S ER1 N Z\nCONCERT  K AA1 N - S ER0 T\nCONCERT(2)  K AH0 N - S ER1 T\nCONCERTED  K AH0 N - S ER1 - T AH0 D\nCONCERTED(2)  K AH0 N - S ER1 - T IH0 D\nCONCERTI  K AH0 N - CH EH1 R - T IY0\nCONCERTINA  K AA0 N - S ER0 - T IY1 - N AH0\nCONCERTMASTER  K AA1 N - S ER0 T - M AE2 - S T ER0\nCONCERTO  K AH0 N - CH EH1 R - T OW0\nCONCERTOS  K AH0 N - CH EH1 R - T OW0 Z\nCONCERTS  K AA1 N - S ER0 T S\nCONCERTS(2)  K AH0 N - S ER1 T S\nCONCESSION  K AH0 N - S EH1 - SH AH0 N\nCONCESSIONAIRE  K AH0 N - S EH2 - SH AH0 - N EH1 R\nCONCESSIONAL  K AH0 N - S EH1 - SH AH0 - N AH0 L\nCONCESSIONARY  K AH0 N - S EH1 - SH AH0 N - EH2 - R IY0\nCONCESSIONS  K AH0 N - S EH1 - SH AH0 N Z\nCONCH  K AA1 N CH\nCONCH(2)  K AA1 NG K\nCONCHA  K AA1 N - CH AH0\nCONCHEMCO  K AA2 N - CH EH1 M - K OW0\nCONCHITA  K AH0 N - CH IY1 - T AH0\nCONCIERGE  K AA2 N - S IY0 - EH1 R ZH\nCONCILIATION  K AH0 N - S IH2 - L IY0 - EY1 - SH AH0 N\nCONCILIATOR  K AH0 N - S IH1 - L IY0 - EY2 - T ER0\nCONCILIATOR'S  K AH0 N - S IH1 - L IY0 - EY2 - T ER0 Z\nCONCILIATORY  K AH0 N - S IH1 - L IY2 - AH0 - T AO2 - R IY0\nCONCILIATORY(2)  K AH0 N - S IH1 - L Y AH0 - T AO2 - R IY0\nCONCISE  K AH0 N - S AY1 S\nCONCISELY  K AH0 N - S AY1 S - L IY0\nCONCLAVE  K AA1 N - K L EY2 V\nCONCLUDE  K AH0 N - K L UW1 D\nCONCLUDED  K AH0 N - K L UW1 - D AH0 D\nCONCLUDED(2)  K AH0 N - K L UW1 - D IH0 D\nCONCLUDES  K AH0 N - K L UW1 D Z\nCONCLUDING  K AH0 N - K L UW1 - D IH0 NG\nCONCLUSION  K AH0 N - K L UW1 - ZH AH0 N\nCONCLUSIONS  K AH0 N - K L UW1 - ZH AH0 N Z\nCONCLUSIVE  K AH0 N - K L UW1 - S IH0 V\nCONCLUSIVELY  K AH0 N - K L UW1 - S IH0 V - L IY0\nCONCOCT  K AH0 N - K AA1 K T\nCONCOCTED  K AH0 N - K AA1 K - T AH0 D\nCONCOCTING  K AH0 N - K AA1 K - T IH0 NG\nCONCOCTION  K AH0 N - K AA1 K - SH AH0 N\nCONCOCTIONS  K AH0 N - K AA1 K - SH AH0 N Z\nCONCOMITANT  K AA2 N - K AA1 - M AH0 - T AH0 N T\nCONCOMITANT(2)  K AA2 N - K AH0 - M IH1 - T AH0 N T\nCONCOMITANTLY  K AA2 N - K AA1 - M AH0 - T AH0 N T - L IY0\nCONCOMITANTLY(2)  K AA2 N - K AH0 - M IH1 - T AH0 N T - L IY0\nCONCORD  K AA1 N - K AO2 R D\nCONCORD'S  K AA1 N - K AO2 R D Z\nCONCORD'S(2)  K AA1 N - K ER0 D Z\nCONCORD(2)  K AA1 N - K ER0 D\nCONCORDE  K AA1 N - K AO2 R D\nCONCOURSE  K AA1 N - K AO2 R S\nCONCOURSES  K AA1 N - K AO2 R - S IH0 Z\nCONCRETE  K AH0 N - K R IY1 T\nCONCRETE(2)  K AA1 N - K R IY0 T\nCONCRETELY  K AA1 N - K R IY2 T - L IY0\nCONCUBINAGE  K AA0 N - K Y UW1 - B AH0 - N AH0 JH\nCONCUBINE  K AA1 N - K Y AH0 - B AY2 N\nCONCUBINES  K AA1 N - K Y AH0 - B AY2 N Z\nCONCUR  K AH0 N - K ER1\nCONCURRED  K AH0 N - K ER1 D\nCONCURRENCE  K AH0 N - K ER1 - AH0 N S\nCONCURRENT  K AH0 N - K ER1 - AH0 N T\nCONCURRENTLY  K AH0 N - K ER1 - AH0 N T - L IY0\nCONCURRING  K AH0 N - K ER1 - IH0 NG\nCONCURS  K AH0 N - K ER1 Z\nCONCUSSION  K AH0 N - K AH1 - SH AH0 N\nCONCUSSIONS  K AH0 N - K AH1 - SH AH0 N Z\nCONDE  K AA1 N D\nCONDELLO  K AH0 N - D EH1 - L OW0\nCONDEMN  K AH0 N - D EH1 M\nCONDEMNATION  K AA2 N - D AH0 M - N EY1 - SH AH0 N\nCONDEMNATIONS  K AA2 N - D AH0 M - N EY1 - SH AH0 N Z\nCONDEMNED  K AH0 N - D EH1 M D\nCONDEMNING  K AH0 N - D EH1 - M IH0 NG\nCONDEMNS  K AH0 N - D EH1 M Z\nCONDENSATE  K AA1 N - D AH0 N - S EY2 T\nCONDENSATES  K AA1 N - D AH0 N - S EY2 T S\nCONDENSATION  K AA2 N - D AH0 N - S EY1 - SH AH0 N\nCONDENSE  K AH0 N - D EH1 N S\nCONDENSED  K AH0 N - D EH1 N S T\nCONDENSER  K AH0 N - D EH1 N - S ER0\nCONDENSING  K AH0 N - D EH1 N - S IH0 NG\nCONDER  K AA1 N - D ER0\nCONDESCEND  K AA2 N - D IH0 - S EH1 N D\nCONDESCENDING  K AA2 N - D IH0 - S EH1 N - D IH0 NG\nCONDESCENSION  K AA2 N - D AH0 - S EH1 N - SH AH0 N\nCONDIE  K AA1 N - D IY0\nCONDIMENT  K AA1 N - D AH0 - M AH0 N T\nCONDIMENTS  K AA1 N - D AH0 - M AH0 N T S\nCONDIT  K AA1 N - D IH0 T\nCONDITION  K AH0 N - D IH1 - SH AH0 N\nCONDITIONAL  K AH0 N - D IH1 - SH AH0 - N AH0 L\nCONDITIONALITY  K AH0 N - D IH2 - SH AH0 - N AE1 - L IH0 - T IY0\nCONDITIONALLY  K AH0 N - D IH1 - SH AH0 N - AH0 - L IY0\nCONDITIONALLY(2)  K AH0 N - D IH1 SH - N AH0 - L IY0\nCONDITIONED  K AH0 N - D IH1 - SH AH0 N D\nCONDITIONER  K AH0 N - D IH1 - SH AH0 N - ER0\nCONDITIONERS  K AH0 N - D IH1 - SH AH0 N - ER0 Z\nCONDITIONING  K AH0 N - D IH1 - SH AH0 N - IH0 NG\nCONDITIONS  K AH0 N - D IH1 - SH AH0 N Z\nCONDITT  K AA1 N - D IH0 T\nCONDO  K AA1 N - D OW0\nCONDOLENCE  K AH0 N - D OW1 - L AH0 N S\nCONDOLENCES  K AH0 N - D OW1 - L AH0 N - S AH0 Z\nCONDOM  K AA1 N - D AH0 M\nCONDOMINIUM  K AA2 N - D AH0 - M IH1 - N IY0 - AH0 M\nCONDOMINIUMS  K AA2 N - D AH0 - M IH1 - N IY0 - AH0 M Z\nCONDOMS  K AA1 N - D AH0 M Z\nCONDON  K AA1 N - D AH0 N\nCONDONE  K AH0 N - D OW1 N\nCONDONED  K AH0 N - D OW1 N D\nCONDONES  K AH0 N - D OW1 N Z\nCONDONING  K AH0 N - D OW1 - N IH0 NG\nCONDOR  K AA1 N - D ER0\nCONDORS  K AA1 N - D ER0 Z\nCONDOS  K AA1 N - D OW0 Z\nCONDRA  K AA1 N - D R AH0\nCONDRACKY  K AA2 N - D R AE1 - K IY0\nCONDRACKY'S  K AA2 N - D R AE1 - K IY0 Z\nCONDRAY  K AA1 N - D R EY0\nCONDREN  K AA1 N - D ER0 - AH0 N\nCONDREY  K AA1 N - D R IY0\nCONDRON  K AA1 N - D R AH0 N\nCONDRY  K AA1 N - D ER0 - IY0\nCONDUCIVE  K AH0 N - D UW1 - S IH0 V\nCONDUCT  K AH0 N - D AH1 K T\nCONDUCT(2)  K AA1 N - D AH0 K T\nCONDUCTED  K AH0 N - D AH1 K - T AH0 D\nCONDUCTING  K AH0 N - D AH1 K - T IH0 NG\nCONDUCTION  K AH0 N - D AH1 K - SH AH0 N\nCONDUCTIVE  K AH0 N - D AH1 K - T IH0 V\nCONDUCTIVITY  K AA2 N - D AH2 K - T IH1 - V AH0 - T IY0\nCONDUCTOR  K AH0 N - D AH1 K - T ER0\nCONDUCTORS  K AH0 N - D AH1 K - T ER0 Z\nCONDUCTS  K AH0 N - D AH1 K T S\nCONDUIT  K AA1 N - D UW0 - IH0 T\nCONDUIT(2)  K AA1 N - JH UW0 - IH0 T\nCONDUIT(3)  K AA1 N D - W IH0 T\nCONDUITS  K AA1 N - D UW0 - AH0 T S\nCONDUITS(2)  K AA1 N - D W AH0 T S\nCONE  K OW1 N\nCONE'S  K OW1 N Z\nCONEFLOWER  K OW1 N - F L AW2 - ER0\nCONEHEAD  K OW1 N - HH EH0 D\nCONEHEADS  K OW1 N - HH EH0 D Z\nCONELY  K OW1 N - L IY0\nCONERLY  K OW1 - N ER0 - L IY0\nCONERY  K OW1 - N ER0 - IY0\nCONES  K OW1 N Z\nCONESTOGA  K AA2 - N AH0 - S T OW1 - G AH0\nCONEY  K OW1 - N IY0\nCONFABULATION  K AH0 N - F AE2 - B Y AH0 - L EY1 - SH AH0 N\nCONFAIR  K AA1 N - F EH2 R\nCONFECT  K AH0 N - F EH1 K T\nCONFECTION  K AH0 N - F EH1 K - SH AH0 N\nCONFECTIONARIES  K AH0 N - F EH1 K - SH AH0 N - EH2 - R IY0 Z\nCONFECTIONARY  K AH0 N - F EH1 K - SH AH0 N - EH2 - R IY0\nCONFECTIONER  K AH0 N - F EH1 K - SH AH0 N - ER0\nCONFECTIONERS  K AH0 N - F EH1 K - SH AH0 N - ER0 Z\nCONFECTIONERY  K AH0 N - F EH1 K - SH AH0 N - EH2 - R IY0\nCONFECTIONS  K AH0 N - F EH1 K - SH AH0 N Z\nCONFEDERACY  K AH0 N - F EH1 - D ER0 - AH0 - S IY0\nCONFEDERACY'S  K AH0 N - F EH1 - D ER0 - AH0 - S IY0 Z\nCONFEDERACY'S(2)  K AH0 N - F EH1 - D R AH0 - S IY0 Z\nCONFEDERACY(2)  K AH0 N - F EH1 - D R AH0 - S IY0\nCONFEDERATE  K AH0 N - F EH1 - D ER0 - AH0 T\nCONFEDERATE(2)  K AH0 N - F EH1 - D ER0 - EY2 T\nCONFEDERATION  K AH0 N - F EH2 - D ER0 - EY1 - SH AH0 N\nCONFER  K AH0 N - F ER1\nCONFEREE  K AA2 N - F ER0 - IY1\nCONFEREES  K AA2 N - F ER0 - IY1 Z\nCONFERENCE  K AA1 N - F ER0 - AH0 N S\nCONFERENCE'S  K AA1 N - F ER0 - AH0 N - S IH0 Z\nCONFERENCE'S(2)  K AA1 N - F R AH0 N - S IH0 Z\nCONFERENCE(2)  K AA1 N - F R AH0 N S\nCONFERENCES  K AA1 N - F ER0 - AH0 N - S AH0 Z\nCONFERENCES(2)  K AA1 N - F R AH0 N - S AH0 Z\nCONFERENCING  K AA1 N - F R AH0 N - S IH0 NG\nCONFERRED  K AH0 N - F ER1 D\nCONFERRING  K AH0 N - F ER1 - IH0 NG\nCONFERS  K AH0 N - F ER1 Z\nCONFESS  K AH0 N - F EH1 S\nCONFESSED  K AH0 N - F EH1 S T\nCONFESSES  K AH0 N - F EH1 - S IH0 Z\nCONFESSING  K AH0 N - F EH1 - S IH0 NG\nCONFESSION  K AH0 N - F EH1 - SH AH0 N\nCONFESSIONAL  K AH0 N - F EH1 - SH AH0 - N AH0 L\nCONFESSIONALS  K AH0 N - F EH1 - SH AH0 - N AH0 L Z\nCONFESSIONS  K AH0 N - F EH1 - SH AH0 N Z\nCONFETTI  K AH0 N - F EH1 - T IY0\nCONFIDANT  K AA1 N - F AH0 - D AA2 N T\nCONFIDANTE  K AA1 N - F AH0 - D AE2 N T\nCONFIDANTS  K AA1 N - F AH0 - D AE2 N T S\nCONFIDE  K AH0 N - F AY1 D\nCONFIDED  K AH0 N - F AY1 - D AH0 D\nCONFIDED(2)  K AH0 N - F AY1 - D IH0 D\nCONFIDENCE  K AA1 N - F AH0 - D AH0 N S\nCONFIDENCE'S  K AA1 N - F AH0 - D AH0 N - S AH0 Z\nCONFIDENCES  K AA1 N - F AH0 - D AH0 N - S IH0 Z\nCONFIDENT  K AA1 N - F AH0 - D AH0 N T\nCONFIDENTIAL  K AA2 N - F AH0 - D EH1 N - SH AH0 L\nCONFIDENTIAL(2)  K AA2 N - F AH0 - D EH1 N - CH AH0 L\nCONFIDENTIALITY  K AA2 N - F AH0 - D EH2 N - SH IY0 - AE1 - L AH0 - T IY0\nCONFIDENTIALITY(2)  K AA2 N - F AH0 - D EH2 N - CH IY0 - AE1 - L AH0 - T IY0\nCONFIDENTIALLY  K AA2 N - F AH0 - D EH1 N - SH AH0 - L IY0\nCONFIDENTIALLY(2)  K AA2 N - F AH0 - D EH1 N - CH AH0 - L IY0\nCONFIDENTLY  K AA1 N - F AH0 - D AH0 N T - L IY0\nCONFIDES  K AH0 N - F AY1 D Z\nCONFIDING  K AH0 N - F AY1 - D IH0 NG\nCONFIGURATION  K AH0 N - F IH2 - G Y ER0 - EY1 - SH AH0 N\nCONFIGURATIONS  K AH0 N - F IH2 - G Y ER0 - EY1 - SH AH0 N Z\nCONFIGURE  K AH0 N - F IH1 - G Y ER0\nCONFIGURED  K AH0 N - F IH1 - G Y ER0 D\nCONFIGURING  K AH0 N - F IH1 - G Y ER0 - IH0 NG\nCONFINDUSTRIA  K AA2 N - F IH0 N - D AH1 S - T R IY0 - AH0\nCONFINE  K AH0 N - F AY1 N\nCONFINED  K AH0 N - F AY1 N D\nCONFINEMENT  K AH0 N - F AY1 N - M AH0 N T\nCONFINES  K AA1 N - F AY2 N Z\nCONFINES(2)  K AH0 N - F AY1 N Z\nCONFINING  K AH0 N - F AY1 - N IH0 NG\nCONFIRM  K AH0 N - F ER1 M\nCONFIRMABLE  K AH0 N - F ER1 - M AH0 - B AH0 L\nCONFIRMATION  K AA2 N - F ER0 - M EY1 - SH AH0 N\nCONFIRMATIONS  K AA2 N - F ER0 - M EY1 - SH AH0 N Z\nCONFIRMATORY  K AH0 N - F ER1 - M AH0 - T AO2 - R IY0\nCONFIRMED  K AH0 N - F ER1 M D\nCONFIRMING  K AH0 N - F ER1 - M IH0 NG\nCONFIRMS  K AH0 N - F ER1 M Z\nCONFISCATE  K AA1 N - F AH0 - S K EY2 T\nCONFISCATED  K AA1 N - F AH0 - S K EY2 - T AH0 D\nCONFISCATING  K AA1 N - F AH0 - S K EY2 - T IH0 NG\nCONFISCATION  K AA2 N - F AH0 - S K EY1 - SH AH0 N\nCONFISCATORY  K AH0 N - F IH1 S - K AH0 - T AO2 - R IY0\nCONFITERIAS  K AA2 N - F IH0 - T IH1 - R IY0 - AH0 Z\nCONFLAGRATION  K AA2 N - F L AH0 - G R EY1 - SH AH0 N\nCONFLATE  K AH0 N - F L EY1 T\nCONFLATES  K AH0 N - F L EY1 T S\nCONFLICT  K AA1 N - F L IH0 K T\nCONFLICT(2)  K AH0 N - F L IH1 K T\nCONFLICTED  K AH0 N - F L IH1 K - T IH0 D\nCONFLICTING  K AH0 N - F L IH1 K - T IH0 NG\nCONFLICTS  K AH0 N - F L IH1 K T S\nCONFLICTS(2)  K AA1 N - F L IH0 K T S\nCONFLICTS(3)  K AH0 N - F L IH1 K S\nCONFLICTS(4)  K AA1 N - F L IH0 K S\nCONFLUENCE  K AA1 N - F L UW0 - AH0 N S\nCONFLUENT  K AA0 N - F L UW1 - AH0 N T\nCONFORM  K AH0 N - F AO1 R M\nCONFORMANCE  K AH0 N - F AO1 R - M AH0 N S\nCONFORMATIONAL  K AA2 N - F ER0 - M EY1 - SH AH0 - N AH0 L\nCONFORMED  K AH0 N - F AO1 R M D\nCONFORMING  K AH0 N - F AO1 R - M IH0 NG\nCONFORMIST  K AH0 N - F AO1 R - M IH0 S T\nCONFORMISTS  K AH0 N - F AO1 R - M AH0 S T S\nCONFORMISTS(2)  K AH0 N - F AO1 R - M AH0 S S\nCONFORMISTS(3)  K AH0 N - F AO1 R - M AH0 S\nCONFORMITY  K AH0 N - F AO1 R - M AH0 - T IY0\nCONFORMS  K AH0 N - F AO1 R M Z\nCONFORTI  K AA0 N - F AO1 R - T IY0\nCONFOUND  K AA0 N - F AW1 N D\nCONFOUND(2)  K AA1 N - F AW2 N D\nCONFOUND(3)  K AH0 N - F AW1 N D\nCONFOUNDED  K AH0 N - F AW1 N - D IH0 D\nCONFOUNDING  K AH0 N - F AW1 N - D IH0 NG\nCONFOUNDS  K AH0 N - F AW1 N D Z\nCONFRONT  K AH0 N - F R AH1 N T\nCONFRONTATION  K AA2 N - F R AH0 N - T EY1 - SH AH0 N\nCONFRONTATIONAL  K AA2 N - F R AH0 N - T EY1 - SH AH0 - N AH0 L\nCONFRONTATIONS  K AA2 N - F R AH0 N - T EY1 - SH AH0 N Z\nCONFRONTED  K AH0 N - F R AH1 N - T AH0 D\nCONFRONTED(2)  K AH0 N - F R AH1 N - T IH0 D\nCONFRONTING  K AH0 N - F R AH1 N - T IH0 NG\nCONFRONTS  K AH0 N - F R AH1 N T S\nCONFUCIAN  K AH0 N - F Y UW1 - SH AH0 N\nCONFUCIANISM  K AH0 N - F Y UW1 - SH AH0 - N IH2 - Z AH0 M\nCONFUCIUS  K AH0 N - F Y UW1 - SH AH0 S\nCONFUSE  K AH0 N - F Y UW1 Z\nCONFUSED  K AH0 N - F Y UW1 Z D\nCONFUSES  K AH0 N - F Y UW1 - Z IH0 Z\nCONFUSING  K AH0 N - F Y UW1 - Z IH0 NG\nCONFUSINGLY  K AH0 N - F Y UW1 - Z IH0 NG - L IY0\nCONFUSION  K AH0 N - F Y UW1 - ZH AH0 N\nCONFUSIONS  K AH0 N - F Y UW1 - ZH AH0 N Z\nCONG  K AO1 NG\nCONGA  K AO1 NG - G AH0\nCONGDON  K AA1 NG - D AH0 N\nCONGEAL  K AH0 N - JH IY1 L\nCONGEALED  K AH0 N - JH IY1 L D\nCONGENIAL  K AH0 N - JH IY1 - N Y AH0 L\nCONGENIALITY  K AH0 N - JH IY2 - N IY0 - AE1 - L AH0 - T IY0\nCONGENITAL  K AH0 N - JH EH1 - N AH0 - T AH0 L\nCONGER  K AO1 NG - ER0\nCONGEST  K AH0 N - JH EH1 S T\nCONGESTED  K AH0 N - JH EH1 - S T AH0 D\nCONGESTED(2)  K AH0 N - JH EH1 - S T IH0 D\nCONGESTION  K AH0 N - JH EH1 S - CH AH0 N\nCONGESTIVE  K AH0 N - JH EH1 - S T IH0 V\nCONGLETON  K AA1 NG - G AH0 L - T AA0 N\nCONGLOMERATE  K AH0 N - G L AA1 - M ER0 - AH0 T\nCONGLOMERATE'S  K AH0 N - G L AA1 - M ER0 - AH0 T S\nCONGLOMERATES  K AH0 N - G L AA1 - M ER0 - AH0 T S\nCONGLOMERATION  K AH0 N - G L AA2 - M ER0 - EY1 - SH AH0 N\nCONGO  K AA1 NG - G OW0\nCONGRATULATE  K AH0 N - G R AE1 - CH AH0 - L EY2 T\nCONGRATULATED  K AH0 N - G R AE1 - CH AH0 - L EY2 - T IH0 D\nCONGRATULATING  K AH0 N - G R AE1 - CH AH0 - L EY2 - T IH0 NG\nCONGRATULATION  K AH0 N - G R AE2 - CH AH0 - L EY1 - SH AH0 N\nCONGRATULATIONS  K AH0 N - G R AE2 - CH AH0 - L EY1 - SH AH0 N Z\nCONGRATULATORY  K AH0 N - G R AE1 - CH AH0 - L AH0 - T AO2 - R IY0\nCONGREGATE  K AA1 NG - G R AH0 - G EY2 T\nCONGREGATED  K AA1 NG - G R IH0 - G EY2 - T IH0 D\nCONGREGATION  K AA2 NG - G R AH0 - G EY1 - SH AH0 N\nCONGREGATION'S  K AA2 NG - G R AH0 - G EY1 - SH AH0 N Z\nCONGREGATIONAL  K AA2 NG - G R AH0 - G EY1 - SH AH0 - N AH0 L\nCONGREGATIONS  K AA2 NG - G R AH0 - G EY1 - SH AH0 N Z\nCONGRESS  K AA1 NG - G R AH0 S\nCONGRESS'  K AA1 N - G R AH0 - S IH0 Z\nCONGRESS'(2)  K AA1 NG - G R AH0 S\nCONGRESS'S  K AA1 NG - G R AH0 - S IH0 Z\nCONGRESSES  K AA1 NG - G R AH0 - S IH0 Z\nCONGRESSIONAL  K AH0 N - G R EH1 - SH AH0 - N AH0 L\nCONGRESSIONALLY  K AH0 N - G R EH1 - SH AH0 N - AH0 - L IY0\nCONGRESSIONALLY(2)  K AH0 N - G R EH1 SH - N AH0 - L IY0\nCONGRESSMAN  K AA1 NG - G R AH0 S - M AH0 N\nCONGRESSMAN'S  K AA1 NG - G R AH0 S - M AH0 N Z\nCONGRESSMEN  K AA1 NG - G R AH0 S - M IH0 N\nCONGRESSPEOPLE  K AA1 NG - G R AH0 - S P IY2 - P AH0 L\nCONGRESSPERSON  K AA1 NG - G R AH0 - S P ER2 - S AH0 N\nCONGRESSPERSONS  K AA1 NG - G R AH0 - S P ER2 - S AH0 N Z\nCONGRESSWOMAN  K AA1 NG - G R AH0 S - W UH2 - M AH0 N\nCONGRESSWOMAN'S  K AA1 NG - G R AH0 S - W UH2 - M AH0 N Z\nCONGRESSWOMEN  K AA1 NG - G R AH0 S - W IH2 - M IH0 N\nCONGROVE  K AA1 NG - G R AH0 V\nCONGRUENCE  K AO1 N - G R UW0 - AH0 N S\nCONGRUITY  K AH0 N - G R UW1 - AH0 - T IY0\nCONIC  K AA1 - N IH0 K\nCONIC(2)  K OW1 - N IH0 K\nCONICAL  K AA1 - N IH0 - K AH0 L\nCONICAL(2)  K OW1 - N IH0 - K AH0 L\nCONICS  K AA1 - N IH0 K S\nCONICS(2)  K OW1 - N IH0 K S\nCONIFER  K AA1 - N AH0 - F ER0\nCONIFER'S  K AA1 - N AH0 - F ER0 Z\nCONIFEROUS  K AH0 - N IH1 - F ER0 - AH0 S\nCONIFERS  K AA1 - N AH0 - F ER0 Z\nCONIGLIARO  K AH0 - N IH2 G - L IY0 - AA1 - R OW0\nCONIGLIO  K AH0 - N IH1 G - L IY0 - OW0\nCONISTON  K AA1 - N AH0 - S T AH0 N\nCONJECTURE  K AH0 N - JH EH1 K - CH ER0\nCONJECTURE(2)  K AH0 N - JH EH1 K - SH ER0\nCONJECTURES  K AH0 N - JH EH1 K - CH ER0 Z\nCONJECTURES(2)  K AH0 N - JH EH1 K - SH ER0 Z\nCONJOIN  K AA2 N - JH OY1 N\nCONJOINED  K AA2 N - JH OY1 N D\nCONJUGAL  K AA1 N - JH AH0 - G AH0 L\nCONJUGATE  K AA2 N - JH AH0 - G EY1 T\nCONJUGATE(2)  K AA1 N - JH AH0 - G EY2 T\nCONJUGATED  K AA2 N - JH AH0 - G EY1 - T IH0 D\nCONJUGATED(2)  K AA1 N - JH AH0 - G EY2 - T IH0 D\nCONJUGATES  K AA2 N - JH AH0 - G EY1 T S\nCONJUGATES(2)  K AA1 N - JH AH0 - G EY2 T S\nCONJUGATION  K AA2 N - JH AH0 - G EY1 - SH AH0 N\nCONJUGATIONS  K AA2 N - JH AH0 - G EY1 - SH AH0 N Z\nCONJUL  K AA1 N - JH AH0 L\nCONJUNCTION  K AH0 N - JH AH1 NG K - SH AH0 N\nCONJUNCTIONS  K AH0 N - JH AH1 NG K - SH AH0 N Z\nCONJUNCTIVA  K AA2 N - JH AH0 NG K - T AY1 - V AH0\nCONJURE  K AA1 N - JH ER0\nCONJURED  K AA1 N - JH ER0 D\nCONJURES  K AA1 N - JH ER0 Z\nCONJURING  K AA1 N - JH ER0 - IH0 NG\nCONJUROR  K AA1 N - JH ER0 - ER0\nCONK  K AA1 NG K\nCONKEL  K AA1 NG - K AH0 L\nCONKEY  K AA1 N - K IY0\nCONKIN  K AA1 NG - K IH0 N\nCONKLE  K AA1 NG - K AH0 L\nCONKLIN  K AA1 NG - K L IH0 N\nCONKLING  K AA1 NG - K L IH0 NG\nCONKRIGHT  K AA1 NG K - R AY2 T\nCONLAN  K AA1 N - L AH0 N\nCONLEE  K AA1 N - L IY0\nCONLEY  K AA1 N - L IY0\nCONLIN  K AA1 N - L IH0 N\nCONLON  K AA1 N - L AH0 N\nCONLOW  K AA1 N - L OW0\nCONLY  K AA1 N - L IY0\nCONN  K AA1 N\nCONN.  K AA1 N\nCONN.(2)  K AH0 - N EH1 - T AH0 - K AH0 T\nCONNALLY  K AA1 - N AH0 - L IY0\nCONNALLY'S  K AA1 - N AH0 - L IY0 Z\nCONNAUGHT  K AA1 - N AO0 T\nCONNAUGHT'S  K AA1 - N AO0 T S\nCONNAUGHTON  K AA1 - N AO0 - T AA0 N\nCONNAWAY  K AA1 N - AH0 - W EY2\nCONNECT  K AH0 - N EH1 K T\nCONNECTED  K AH0 - N EH1 K - T AH0 D\nCONNECTED(2)  K AH0 - N EH1 K - T IH0 D\nCONNECTER  K AH0 - N EH1 K - T ER0\nCONNECTICUT  K AH0 - N EH1 - T AH0 - K AH0 T\nCONNECTICUT'S  K AH0 - N EH1 - T AH0 - K AH0 T S\nCONNECTING  K AH0 - N EH1 K - T IH0 NG\nCONNECTION  K AH0 - N EH1 K - SH AH0 N\nCONNECTIONS  K AH0 - N EH1 K - SH AH0 N Z\nCONNECTIVE  K AH0 - N EH1 K - T IH0 V\nCONNECTIVITY  K AH0 - N EH0 K - T IH1 - V IH0 - T IY0\nCONNECTOR  K AH0 - N EH1 K - T ER0\nCONNECTORS  K AH0 - N EH1 K - T ER0 Z\nCONNECTS  K AH0 - N EH1 K T S\nCONNED  K AA1 N D\nCONNEELY  K AH0 - N IY1 - L IY0\nCONNELL  K AA1 - N AH0 L\nCONNELLEY  K AA1 - N IH0 - L IY0\nCONNELLY  K AA1 - N AH0 - L IY0\nCONNELLY'S  K AA1 - N AH0 - L IY0 Z\nCONNELY  K AA1 N - L IY0\nCONNER  K AA1 - N ER0\nCONNER'S  K AA1 - N ER0 Z\nCONNERLY  K AA1 - N ER0 - L IY0\nCONNERS  K AA1 - N ER0 Z\nCONNERY  K AA1 - N ER0 - IY0\nCONNERY'S  K AA1 - N ER0 - IY0 Z\nCONNETT  K AA1 - N IH0 T\nCONNICK  K AA1 - N IH0 K\nCONNIE  K AO1 - N IY0\nCONNIE'S  K AO1 - N IY0 Z\nCONNIFF  K AA1 - N IH0 F\nCONNING  K AA1 - N IH0 NG\nCONNIPTION  K AH0 - N IH1 P - SH AH0 N\nCONNIVANCE  K AH0 - N AY1 - V AH0 N S\nCONNIVE  K AH0 - N AY1 V\nCONNIVING  K AH0 - N AY1 - V IH0 NG\nCONNOISSEUR  K AA2 - N AH0 - S ER1\nCONNOISSEURS  K AA2 - N AH0 - S ER1 Z\nCONNOLE  K AA1 - N AH0 L\nCONNOLLY  K AO1 - N AH0 - L IY0\nCONNON  K AA1 - N AH0 N\nCONNOR  K AA1 - N ER0\nCONNORS  K AA1 - N ER0 Z\nCONNOTATION  K AA2 - N AH0 - T EY1 - SH AH0 N\nCONNOTATIONAL  K AA2 - N AH0 - T EY1 - SH AH0 - N AH0 L\nCONNOTATIONS  K AA2 - N AH0 - T EY1 - SH AH0 N Z\nCONNOTE  K AH0 - N OW1 T\nCONNOTES  K AH0 - N OW1 T S\nCONNY  K AA1 - N IY0\nCONOCO  K AA1 - N AH0 - K OW0\nCONOCO'S  K AA1 - N AH0 - K OW0 Z\nCONOCO(2)  K AH0 - N AA1 - K OW0\nCONOLLY  K AA1 - N OW0 - L IY0\nCONOLY  K AA1 - N OW0 - L IY0\nCONOVER  K AA1 - N AH0 - V ER0\nCONQUER  K AA1 NG - K ER0\nCONQUERED  K AA1 NG - K ER0 D\nCONQUERING  K AA1 NG - K ER0 - IH0 NG\nCONQUEROR  K AA1 NG - K ER0 - ER0\nCONQUEROR'S  K AA1 NG - K ER0 - ER0 Z\nCONQUERORS  K AA1 NG - K ER0 - ER0 Z\nCONQUERS  K AA1 NG - K ER0 Z\nCONQUEST  K AA1 NG - K W EH0 S T\nCONQUEST'S  K AA1 NG - K W EH0 S T S\nCONQUESTS  K AA1 N - K W EH2 S T S\nCONQUESTS(2)  K AA1 N - K W EH2 S S\nCONQUESTS(3)  K AA1 N - K W EH2 S\nCONRAC  K AA1 N - R AE0 K\nCONRAD  K AA1 N - R AE0 D\nCONRAD'S  K AA1 N - R AE0 D Z\nCONRADES  K AH0 N - R EY1 D Z\nCONRADI  K AA0 N - R AA1 - D IY0\nCONRADINE  K AA1 N - R AH0 - D AY2 N\nCONRADS  K AA1 N - R AE0 D Z\nCONRADT  K AA1 N - R AE0 T\nCONRADY  K AH0 N - R AA1 - D IY0\nCONRAIL  K AA1 N - R EY2 L\nCONRAIL'S  K AA1 N - R EY2 L Z\nCONRAN  K AA1 N - R AH0 N\nCONRATH  K AA1 N - R AH0 TH\nCONREY  K AA1 N - R IY0\nCONROE  K AA1 N - R OW0\nCONROW  K AA1 N - R OW0\nCONROY  K AO1 N - R OY0\nCONRY  K AA1 N - R IY0\nCONS  K AA1 N Z\nCONSALVO  K AA0 N - S AA1 L - V OW0\nCONSCIENCE  K AA1 N - SH AH0 N S\nCONSCIENCES  K AA1 N - CH IH0 N - S IH0 Z\nCONSCIENTIOUS  K AA2 N - SH IY0 - EH1 N - SH AH0 S\nCONSCIENTIOUSLY  K AA2 N - CH IY0 - EH1 N - CH AH0 S - L IY0\nCONSCIOUS  K AA1 N - SH AH0 S\nCONSCIOUSLY  K AA1 N - SH AH0 S - L IY0\nCONSCIOUSNESS  K AA1 N - SH AH0 S - N AH0 S\nCONSCRIPT  K AA1 N - S K R IH2 P T\nCONSCRIPT(2)  K AH0 N - S K R IH1 P T\nCONSCRIPTED  K AH0 N - S K R IH1 P - T IH0 D\nCONSCRIPTION  K AH0 N - S K R IH1 P - SH AH0 N\nCONSCRIPTS  K AA1 N - S K R IH0 P T S\nCONSECO  K AA0 N - S EY1 - K OW0\nCONSECO'S  K AA0 N - S EY1 - K OW0 Z\nCONSECO'S(2)  K AH0 N - S EY1 - K OW0 Z\nCONSECO(2)  K AH0 N - S EY1 - K OW0\nCONSECRATE  K AA1 N - S AH0 - K R EY2 T\nCONSECRATED  K AA1 N - S AH0 - K R EY2 - T AH0 D\nCONSECRATED(2)  K AA1 N - S AH0 - K R EY2 - T IH0 D\nCONSECRATION  K AA2 N - S AH0 - K R EY1 - SH AH0 N\nCONSECRATIONS  K AA2 N - S AH0 - K R EY1 - SH AH0 N Z\nCONSECUTIVE  K AH0 N - S EH1 - K Y AH0 - T IH0 V\nCONSECUTIVELY  K AH0 N - S EH1 - K Y AH0 - T IH0 V - L IY0\nCONSENSUAL  K AH0 N - S EH1 N - S UW0 - AH0 L\nCONSENSUAL(2)  K AH0 N - S EH1 N - SH UW0 - AH0 L\nCONSENSUS  K AH0 N - S EH1 N - S AH0 S\nCONSENT  K AH0 N - S EH1 N T\nCONSENTED  K AH0 N - S EH1 N - T IH0 D\nCONSENTED(2)  K AH0 N - S EH1 - N IH0 D\nCONSENTING  K AH0 N - S EH1 N - T IH0 NG\nCONSENTING(2)  K AH0 N - S EH1 - N IH0 NG\nCONSENTINO  K AA0 N - S EH0 N - T IY1 - N OW0\nCONSENTS  K AH0 N - S EH1 N T S\nCONSEQUENCE  K AA1 N - S AH0 - K W AH0 N S\nCONSEQUENCES  K AA1 N - S AH0 - K W EH2 N - S AH0 Z\nCONSEQUENT  K AA1 N - S AH0 - K W AH0 N T\nCONSEQUENTIAL  K AA2 N - S AH0 - K W EH1 N - CH AH0 L\nCONSEQUENTLY  K AA1 N - S AH0 - K W AH0 N T - L IY0\nCONSEQUENTLY(2)  K AA1 N - S AH0 - K W EH2 N T - L IY0\nCONSER  K AA1 N - S ER0\nCONSERVANCY  K AH0 N - S ER1 - V AH0 N - S IY0\nCONSERVANCY'S  K AH0 N - S ER1 - V AH0 N - S IY0 Z\nCONSERVATION  K AA2 N - S ER0 - V EY1 - SH AH0 N\nCONSERVATIONIST  K AA2 N - S ER0 - V EY1 - SH AH0 N - AH0 S T\nCONSERVATIONISTS  K AA2 N - S ER0 - V EY1 - SH AH0 N - AH0 S T S\nCONSERVATIONISTS(2)  K AA2 N - S ER0 - V EY1 - SH AH0 N - AH0 S S\nCONSERVATIONISTS(3)  K AA2 N - S ER0 - V EY1 - SH AH0 N - AH0 S\nCONSERVATISM  K AH0 N - S ER1 - V AH0 - T IH2 - Z AH0 M\nCONSERVATIVE  K AH0 N - S ER1 - V AH0 - T IH0 V\nCONSERVATIVELY  K AH0 N - S ER1 - V AH0 - T IH0 V - L IY0\nCONSERVATIVES  K AH0 N - S ER1 - V AH0 - T IH0 V Z\nCONSERVATIVES'  K AH0 N - S ER1 - V AH0 - T IH0 V Z\nCONSERVATIVISM  K AH0 N - S ER1 - V AH0 - T IH0 - V IH2 - Z AH0 M\nCONSERVATOR  K AH0 N - S ER1 - V AH0 - T ER0\nCONSERVATORIES  K AH0 N - S ER1 - V AH0 - T AO2 - R IY0 Z\nCONSERVATORS  K AH0 N - S ER1 - V AH0 - T ER0 Z\nCONSERVATORSHIP  K AH0 N - S ER1 - V AH0 - T ER0 - SH IH2 P\nCONSERVATORY  K AH0 N - S ER1 - V AH0 - T AO0 - R IY0\nCONSERVE  K AH0 N - S ER1 V\nCONSERVED  K AH0 N - S ER1 V D\nCONSERVING  K AH0 N - S ER1 - V IH0 NG\nCONSHOHOCKEN  K AA2 N - SH AH0 - HH AA1 - K AH0 N\nCONSIDER  K AH0 N - S IH1 - D ER0\nCONSIDERABLE  K AH0 N - S IH1 - D ER0 - AH0 - B AH0 L\nCONSIDERABLY  K AH0 N - S IH1 - D ER0 - AH0 - B L IY0\nCONSIDERATE  K AH0 N - S IH1 - D ER0 - AH0 T\nCONSIDERATION  K AH0 N - S IH2 - D ER0 - EY1 - SH AH0 N\nCONSIDERATIONS  K AH0 N - S IH2 - D ER0 - EY1 - SH AH0 N Z\nCONSIDERED  K AH0 N - S IH1 - D ER0 D\nCONSIDERING  K AH0 N - S IH1 - D ER0 - IH0 NG\nCONSIDERS  K AH0 N - S IH1 - D ER0 Z\nCONSIDINE  K AA1 N - S IH0 - D AY2 N\nCONSIGLIO  K AA0 N - S IY1 - G L IY0 - OW0\nCONSIGN  K AH0 N - S AY1 N\nCONSIGNED  K AH0 N - S AY1 N D\nCONSIGNMENT  K AH0 N - S AY1 N - M AH0 N T\nCONSIST  K AH0 N - S IH1 S T\nCONSISTED  K AH0 N - S IH1 - S T AH0 D\nCONSISTED(2)  K AH0 N - S IH1 - S T IH0 D\nCONSISTENCE  K AH0 N - S IH1 - S T AH0 N S\nCONSISTENCY  K AH0 N - S IH1 - S T AH0 N - S IY0\nCONSISTENT  K AH0 N - S IH1 - S T AH0 N T\nCONSISTENTLY  K AH0 N - S IH1 - S T AH0 N T - L IY0\nCONSISTING  K AH0 N - S IH1 - S T IH0 NG\nCONSISTS  K AH0 N - S IH1 S T S\nCONSISTS(2)  K AH0 N - S IH1 S S\nCONSISTS(3)  K AH0 N - S IH1 S\nCONSOB  K AA1 N - S AA0 B\nCONSOL  K AA1 N - S AA0 L\nCONSOL'S  K AA1 N - S AA0 L Z\nCONSOLATA  K AA0 N - S OW0 - L AA1 - T AH0\nCONSOLATION  K AA2 N - S AH0 - L EY1 - SH AH0 N\nCONSOLATIONS  K AA2 N - S AH0 - L EY1 - SH AH0 N Z\nCONSOLE  K AA1 N - S OW0 L\nCONSOLE(2)  K AH0 N - S OW1 L\nCONSOLED  K AH0 N - S OW1 L D\nCONSOLES  K AH0 N - S OW1 L Z\nCONSOLI  K AA0 N - S OW1 - L IY0\nCONSOLIDATE  K AH0 N - S AA1 - L IH0 - D EY2 T\nCONSOLIDATED  K AH0 N - S AA1 - L AH0 - D EY2 - T AH0 D\nCONSOLIDATED'S  K AH0 N - S AA1 - L IH0 - D EY2 - T IH0 D Z\nCONSOLIDATES  K AH0 N - S AA1 - L IH0 - D EY2 T S\nCONSOLIDATING  K AH0 N - S AA1 - L AH0 - D EY2 - T IH0 NG\nCONSOLIDATION  K AH0 N - S AA2 - L AH0 - D EY1 - SH AH0 N\nCONSOLIDATIONS  K AH0 N - S AA2 - L IH0 - D EY1 - SH AH0 N Z\nCONSOLIDATOR  K AH0 N - S AA1 - L IH0 - D EY2 - T ER0\nCONSOLIDATORS  K AH0 N - S AA1 - L IH0 - D EY2 - T ER0 Z\nCONSOLING  K AH0 N - S OW1 - L IH0 NG\nCONSOLO  K AA0 N - S OW1 - L OW0\nCONSONANT  K AA1 N - S AH0 - N AH0 N T\nCONSONANTAL  K AA2 N - S AH0 - N AA1 N - T AH0 L\nCONSONANTAL(2)  K AA2 N - S AH0 - N AA1 - N AH0 L\nCONSONANTS  K AA1 N - S AH0 - N AH0 N T S\nCONSORT  K AH0 N - S AO1 R T\nCONSORTIA  K AH0 N - S AO1 R - SH AH0\nCONSORTING  K AH0 N - S AO1 R - T IH0 NG\nCONSORTIUM  K AH0 N - S AO1 R - SH IY0 - AH0 M\nCONSORTIUM'S  K AH0 N - S AO1 R - SH IY0 - AH0 M Z\nCONSORTIUM'S(2)  K AH0 N - S AO1 R - SH Y AH0 M Z\nCONSORTIUM(2)  K AH0 N - S AO1 R - SH Y AH0 M\nCONSORTIUMS  K AH0 N - S AO1 R - SH AH0 M Z\nCONSORTIUMS(2)  K AH0 N - S AO1 R - SH Y AH0 M Z\nCONSPICUOUS  K AH0 N - S P IH1 - K Y UW0 - AH0 S\nCONSPICUOUSLY  K AH0 N - S P IH1 - K Y UW0 - AH0 S - L IY0\nCONSPIRACIES  K AH0 N - S P IH1 - R AH0 - S IY0 Z\nCONSPIRACY  K AH0 N - S P IH1 - R AH0 - S IY0\nCONSPIRATOR  K AH0 N - S P IH1 - R AH0 - T ER0\nCONSPIRATORIAL  K AH0 N - S P IH2 - R AH0 - T AO1 - R IY0 - AH0 L\nCONSPIRATORIALLY  K AH0 N - S P IH2 - R AH0 - T AO1 - R IY0 - AH0 - L IY0\nCONSPIRATORIALLY(2)  K AH0 N - S P IH2 - R AH0 - T AO1 - R Y AH0 - L IY0\nCONSPIRATORS  K AH0 N - S P IH1 - R AH0 - T ER0 Z\nCONSPIRE  K AH0 N - S P AY1 - ER0\nCONSPIRED  K AH0 N - S P AY1 - ER0 D\nCONSPIRING  K AH0 N - S P AY1 - R IH0 NG\nCONSTABLE  K AA1 N - S T AH0 - B AH0 L\nCONSTABLES  K AA1 N - S T AH0 - B AH0 L Z\nCONSTABULARY  K AH0 N - S T AE1 - B Y AH0 - L EH2 - R IY0\nCONSTANCE  K AA1 N - S T AH0 N S\nCONSTANCY  K AA1 N - S T AH0 N - S IY0\nCONSTANT  K AA1 N - S T AH0 N T\nCONSTANT'S  K AA1 N - S T AH0 N T S\nCONSTANTA  K AA0 N - S T AA1 N - T AH0\nCONSTANTIN  K AH0 N - S T AE1 N - T IH0 N\nCONSTANTINA  K AA0 N - S T AA0 N - T IY1 - N AH0\nCONSTANTINE  K AA1 N - S T AH0 N - T IY2 N\nCONSTANTINE(2)  K AA1 N - S T AH0 N - T AY2 N\nCONSTANTINO  K AA2 N - S T AH0 N - T IY1 - N OW0\nCONSTANTINOPLE  K AA2 N - S T AE0 N - T AH0 - N OW1 - P AH0 L\nCONSTANTINOS  K AA2 N - S T AH0 N - T IY1 - N OW0 S\nCONSTANTLY  K AA1 N - S T AH0 N T - L IY0\nCONSTANTS  K AA1 N - S T AH0 N T S\nCONSTAR  K AA1 N - S T AA2 R\nCONSTELLATION  K AA2 N - S T AH0 - L EY1 - SH AH0 N\nCONSTELLATION'S  K AA2 N - S T AH0 - L EY1 - SH AH0 N Z\nCONSTELLATIONS  K AA2 N - S T AH0 - L EY1 - SH AH0 N Z\nCONSTERNATION  K AA2 N - S T ER0 - N EY1 - SH AH0 N\nCONSTIPATE  K AA1 N - S T AH0 - P EY2 T\nCONSTIPATED  K AA1 N - S T AH0 - P EY2 - T AH0 D\nCONSTIPATION  K AA2 N - S T AH0 - P EY1 - SH AH0 N\nCONSTITUENCIES  K AH0 N - S T IH1 - CH UW0 - AH0 N - S IY0 Z\nCONSTITUENCY  K AH0 N - S T IH1 - CH UW0 - AH0 N - S IY0\nCONSTITUENT  K AH0 N - S T IH1 - CH UW0 - AH0 N T\nCONSTITUENTS  K AH0 N - S T IH1 - CH UW0 - AH0 N T S\nCONSTITUENTS'  K AH0 N - S T IH1 - CH UW0 - AH0 N T S\nCONSTITUTE  K AA1 N - S T AH0 - T UW2 T\nCONSTITUTED  K AA1 N - S T AH0 - T UW2 - T AH0 D\nCONSTITUTES  K AA1 N - S T AH0 - T UW2 T S\nCONSTITUTING  K AA1 N - S T AH0 - T UW2 - T IH0 NG\nCONSTITUTION  K AA2 N - S T AH0 - T UW1 - SH AH0 N\nCONSTITUTION'S  K AA2 N - S T IH0 - T UW1 - SH AH0 N Z\nCONSTITUTIONAL  K AA2 N - S T AH0 - T UW1 - SH AH0 - N AH0 L\nCONSTITUTIONALITY  K AA2 N - S T IH0 - T UW2 - SH AH0 - N AE1 - L IH0 - T IY0\nCONSTITUTIONALLY  K AA2 N - S T AH0 - T UW1 - SH AH0 N - AH0 L - IY0\nCONSTITUTIONIST  K AA2 N - S T AH0 - T UW1 - SH AH0 - N IH0 S T\nCONSTITUTIONISTS  K AA2 N - S T AH0 - T UW1 - SH AH0 - N IH0 S T S\nCONSTITUTIONISTS(2)  K AA2 N - S T AH0 - T UW1 - SH AH0 N - IH0 S S\nCONSTITUTIONISTS(3)  K AA2 N - S T AH0 - T UW1 - SH AH0 N - IH0 S\nCONSTITUTIONS  K AA2 N - S T IH0 - T UW1 - SH AH0 N Z\nCONSTRAIN  K AH0 N - S T R EY1 N\nCONSTRAINED  K AH0 N - S T R EY1 N D\nCONSTRAINING  K AH0 N - S T R EY1 - N IH0 NG\nCONSTRAINS  K AH0 N - S T R EY1 N Z\nCONSTRAINT  K AH0 N - S T R EY1 N T\nCONSTRAINTS  K AH0 N - S T R EY1 N T S\nCONSTRICT  K AH0 N - S T R IH1 K T\nCONSTRICTED  K AH0 N - S T R IH1 K - T AH0 D\nCONSTRICTING  K AH0 N - S T R IH1 K - T IH0 NG\nCONSTRICTION  K AH0 N - S T R IH1 K - SH AH0 N\nCONSTRICTIONS  K AH0 N - S T R IH1 K - SH AH0 N Z\nCONSTRICTOR  K AH0 N - S T R IH1 K - T ER0\nCONSTRICTORS  K AH0 N - S T R IH1 K - T ER0 Z\nCONSTRUCCIONES  K AH0 N - S T R UW1 - CH IY0 - OW2 - N EY0 Z\nCONSTRUCT  K AH0 N - S T R AH1 K T\nCONSTRUCT(2)  K AA1 N - S T R AH0 K T\nCONSTRUCTED  K AH0 N - S T R AH1 K - T AH0 D\nCONSTRUCTED(2)  K AH0 N - S T R AH1 K - T IH0 D\nCONSTRUCTING  K AH0 N - S T R AH1 K - T IH0 NG\nCONSTRUCTION  K AH0 N - S T R AH1 K - SH AH0 N\nCONSTRUCTIONIST  K AH0 N - S T R AH1 K - SH AH0 - N IH0 S T\nCONSTRUCTIONS  K AH0 N - S T R AH1 K - SH AH0 N Z\nCONSTRUCTIVE  K AH0 N - S T R AH1 K - T IH0 V\nCONSTRUCTIVELY  K AH0 N - S T R AH1 K - T IH0 V - L IY0\nCONSTRUCTOR  K AH0 N - S T R AH1 K - T ER0\nCONSTRUCTORS  K AH0 N - S T R AH1 K - T ER0 Z\nCONSTRUCTS  K AH0 N - S T R AH1 K T S\nCONSTRUCTS(2)  K AA1 N - S T R AH0 K T S\nCONSTRUE  K AH0 N - S T R UW1\nCONSTRUED  K AH0 N - S T R UW1 D\nCONSUELA  K AH0 N - S W EY1 - L AH0\nCONSUL  K AA1 N - S AH0 L\nCONSULAR  K AA1 N - S AH0 - L ER0\nCONSULATE  K AA1 N - S AH0 - L AH0 T\nCONSULATES  K AA1 N - S AH0 - L AH0 T S\nCONSULSHIP  K AA1 N - S AH0 L - SH IH2 P\nCONSULT  K AH0 N - S AH1 L T\nCONSULTANCY  K AH0 N - S AH1 L - T AH0 N - S IY0\nCONSULTANT  K AH0 N - S AH1 L - T AH0 N T\nCONSULTANT'S  K AH0 N - S AH1 L - T AH0 N T S\nCONSULTANTS  K AH0 N - S AH1 L - T AH0 N T S\nCONSULTANTS'  K AH0 N - S AH1 L - T AH2 N T S\nCONSULTATION  K AA2 N - S AH0 L - T EY1 - SH AH0 N\nCONSULTATIONS  K AA2 N - S AH0 L - T EY1 - SH AH0 N Z\nCONSULTATIVE  K AH0 N - S AH1 L - T AH0 - T IH0 V\nCONSULTED  K AH0 N - S AH1 L - T AH0 D\nCONSULTED(2)  K AH0 N - S AH1 L - T IH0 D\nCONSULTING  K AH0 N - S AH1 L - T IH0 NG\nCONSULTS  K AH0 N - S AH1 L T S\nCONSUMABLE  K AH0 N - S UW1 - M AH0 - B AH0 L\nCONSUME  K AH0 N - S UW1 M\nCONSUMED  K AH0 N - S UW1 M D\nCONSUMER  K AH0 N - S UW1 - M ER0\nCONSUMER'S  K AH0 N - S UW1 - M ER0 Z\nCONSUMERISM  K AH0 N - S UW1 - M ER0 - IH2 - Z AH0 M\nCONSUMERIST  K AH0 N - S UW1 - M ER0 - IH0 S T\nCONSUMERISTS  K AH0 N - S UW1 - M ER0 - IH0 S T S\nCONSUMERISTS(2)  K AH0 N - S UW1 - M ER0 - IH0 S S\nCONSUMERISTS(3)  K AH0 N - S UW1 - M ER0 - IH0 S\nCONSUMERS  K AH0 N - S UW1 - M ER0 Z\nCONSUMERS'  K AH0 N - S UW1 - M ER0 Z\nCONSUMES  K AH0 N - S UW1 M Z\nCONSUMING  K AH0 N - S UW1 - M IH0 NG\nCONSUMMATE  K AA1 N - S AH0 - M AH0 T\nCONSUMMATE(2)  K AA1 N - S AH0 - M EY2 T\nCONSUMMATED  K AA1 N - S AH0 - M EY2 - T AH0 D\nCONSUMMATING  K AA1 N - S AH0 - M EY2 - T IH0 NG\nCONSUMMATION  K AA2 N - S AH0 - M EY1 - SH AH0 N\nCONSUMPTION  K AH0 N - S AH1 M P - SH AH0 N\nCONSUMPTION(2)  K AH0 N - S AH1 M - SH AH0 N\nCONTAC  K AA1 N - T AE0 K\nCONTACT  K AA1 N - T AE2 K T\nCONTACTED  K AA1 N - T AE2 K - T IH0 D\nCONTACTING  K AA1 N - T AE2 K - T IH0 NG\nCONTACTS  K AA1 N - T AE2 K T S\nCONTACTS(2)  K AA1 N - T AE2 K S\nCONTADORA  K AA2 N - T AH0 - D AO1 - R AH0\nCONTAGION  K AH0 N - T EY1 - JH AH0 N\nCONTAGIOUS  K AH0 N - T EY1 - JH AH0 S\nCONTAGIOUSNESS  K AH0 N - T EY1 - JH AH0 S - N AH0 S\nCONTAIN  K AH0 N - T EY1 N\nCONTAINED  K AH0 N - T EY1 N D\nCONTAINER  K AH0 N - T EY1 - N ER0\nCONTAINER'S  K AH0 N - T EY1 - N ER0 Z\nCONTAINERBOARD  K AH0 N - T EY1 - N ER0 - B AO2 R D\nCONTAINERIZE  K AH0 N - T EY1 - N ER0 - AY2 Z\nCONTAINERIZED  K AH0 N - T EY1 - N ER0 - AY2 Z D\nCONTAINERS  K AH0 N - T EY1 - N ER0 Z\nCONTAINERS'  K AH0 N - T EY1 - N ER0 Z\nCONTAINING  K AH0 N - T EY1 - N IH0 NG\nCONTAINMENT  K AH0 N - T EY1 N - M AH0 N T\nCONTAINS  K AH0 N - T EY1 N Z\nCONTAMINANT  K AH0 N - T AE1 - M AH0 - N AH0 N T\nCONTAMINANTS  K AH0 N - T AE1 - M AH0 - N AH0 N T S\nCONTAMINATE  K AH0 N - T AE1 - M AH0 - N EY2 T\nCONTAMINATED  K AH0 N - T AE1 - M AH0 - N EY2 - T AH0 D\nCONTAMINATED(2)  K AH0 N - T AE1 - M AH0 - N EY2 - T IH0 D\nCONTAMINATES  K AH0 N - T AE1 - M AH0 - N EY2 T S\nCONTAMINATING  K AH0 N - T AE1 - M AH0 - N EY2 - T IH0 NG\nCONTAMINATION  K AH0 N - T AE2 - M AH0 - N EY1 - SH AH0 N\nCONTANT  K AA1 N - T AH0 N T\nCONTE  K AO1 N T\nCONTE(2)  K AO1 N - T EY0\nCONTEL  K AA1 N - T EH2 L\nCONTEMPLATE  K AA1 N - T AH0 M - P L EY2 T\nCONTEMPLATED  K AA1 N - T AH0 M - P L EY2 - T IH0 D\nCONTEMPLATES  K AA1 N - T AH0 M - P L EY2 T S\nCONTEMPLATING  K AA1 N - T AH0 M - P L EY2 - T IH0 NG\nCONTEMPLATION  K AA2 N - T AH0 M - P L EY1 - SH AH0 N\nCONTEMPLATIVE  K AH0 N - T EH1 M - P L AH0 - T IH0 V\nCONTEMPO  K AA2 N - T EH1 M - P OW0\nCONTEMPORANEOUS  K AH0 N - T EH2 M - P ER0 - EY1 - N IY0 - AH0 S\nCONTEMPORANEOUSLY  K AH0 N - T EH2 M - P ER0 - EY1 - N IY0 - AH0 S - L IY0\nCONTEMPORARIES  K AH0 N - T EH1 M - P ER0 - EH2 - R IY0 Z\nCONTEMPORARY  K AH0 N - T EH1 M - P ER0 - EH2 - R IY0\nCONTEMPT  K AH0 N - T EH1 M P T\nCONTEMPTIBLE  K AH0 N - T EH1 M P - T AH0 - B AH0 L\nCONTEMPTUOUS  K AH0 N - T EH1 M P - CH UW0 - AH0 S\nCONTEMPTUOUSLY  K AH0 N - T EH1 M P - CH W AH0 S - L IY0\nCONTEND  K AH0 N - T EH1 N D\nCONTENDED  K AH0 N - T EH1 N - D IH0 D\nCONTENDER  K AH0 N - T EH1 N - D ER0\nCONTENDERS  K AH0 N - T EH1 N - D ER0 Z\nCONTENDING  K AH0 N - T EH1 N - D IH0 NG\nCONTENDS  K AH0 N - T EH1 N D Z\nCONTENDS(2)  K AH0 N - T EH1 N Z\nCONTENT  K AA1 N - T EH0 N T\nCONTENT(2)  K AH0 N - T EH1 N T\nCONTENTED  K AH0 N - T EH1 N - T AH0 D\nCONTENTED(2)  K AH0 N - T EH1 N - T IH0 D\nCONTENTEDLY  K AH0 N - T EH1 N - T AH0 D - L IY0\nCONTENTION  K AH0 N - T EH1 N - SH AH0 N\nCONTENTIONED  K AH0 N - T EH1 N - SH AH0 N D\nCONTENTIONS  K AH0 N - T EH1 N - SH AH0 N Z\nCONTENTIOUS  K AH0 N - T EH1 N - SH AH0 S\nCONTENTIOUSNESS  K AH0 N - T EH1 N - SH AH0 S - N AH0 S\nCONTENTMENT  K AH0 N - T EH1 N T - M AH0 N T\nCONTENTO  K AH0 N - T EH1 N - T OW0\nCONTENTS  K AA1 N - T EH0 N T S\nCONTENTS(2)  K AH0 N - T EH1 N T S\nCONTEST  K AA1 N - T EH0 S T\nCONTEST'S  K AA1 N - T EH0 S T S\nCONTEST(2)  K AH0 N - T EH1 S T\nCONTESTABLE  K AH0 N - T EH1 - S T AH0 - B AH0 L\nCONTESTANT  K AH0 N - T EH1 - S T AH0 N T\nCONTESTANTS  K AH0 N - T EH1 - S T AH0 N T S\nCONTESTED  K AH0 N - T EH1 - S T AH0 D\nCONTESTING  K AH0 N - T EH1 - S T IH0 NG\nCONTESTS  K AA1 N - T EH0 S T S\nCONTESTS(2)  K AH0 N - T EH1 S T S\nCONTESTS(3)  K AA1 N - T EH0 S S\nCONTESTS(4)  K AH0 N - T EH1 S S\nCONTESTS(5)  K AA1 N - T EH0 S\nCONTESTS(6)  K AH0 N - T EH1 S\nCONTEXT  K AA1 N - T EH0 K S T\nCONTEXTS  K AA1 N - T EH2 K S T S\nCONTI  K AA1 N - T IY0\nCONTIBEL  K AA1 N - T IH0 - B AH0 L\nCONTICOMMODITY  K AA2 N - T IH0 - K AH0 - M AA1 - D IH0 - T IY0\nCONTIGUOUS  K AH0 N - T IH1 - G Y UW0 - AH0 S\nCONTINENT  K AA1 N - T AH0 - N AH0 N T\nCONTINENT'S  K AA1 N - T AH0 - N AH0 N T S\nCONTINENTAL  K AA2 N - T AH0 - N EH1 N - T AH0 L\nCONTINENTAL'S  K AA2 N - T AH0 - N EH1 N - T AH0 L Z\nCONTINENTAL(2)  K AA2 N - T AH0 - N EH1 - N AH0 L\nCONTINENTALLY  K AA2 N - T AH0 - N EH1 N - T AH0 - L IY0\nCONTINENTALLY(2)  K AA2 N - T AH0 - N EH1 - N AH0 - L IY0\nCONTINENTALS  K AA2 N - T AH0 - N EH1 N - T AH0 L Z\nCONTINENTALS(2)  K AA2 N - T AH0 - N EH1 - N AH0 L Z\nCONTINENTS  K AA1 N - T AH0 - N AH0 N T S\nCONTINGENCIES  K AH0 N - T IH1 N - JH AH0 N - S IY0 Z\nCONTINGENCY  K AH0 N - T IH1 N - JH AH0 N - S IY0\nCONTINGENT  K AH0 N - T IH1 N - JH AH0 N T\nCONTINGENTS  K AH0 N - T IH1 N - JH AH0 N T S\nCONTINI  K AH0 N - T IY1 - N IY0\nCONTINO  K AA0 N - T IY1 - N OW0\nCONTINUAL  K AH0 N - T IH1 - N Y UW0 - AH0 L\nCONTINUALLY  K AH0 N - T IH1 - N Y UW0 - AH0 - L IY0\nCONTINUALLY(2)  K AH0 N - T IH1 - N Y UW0 - L IY0\nCONTINUANCE  K AH0 N - T IH1 - N Y UW0 - AH0 N S\nCONTINUANCES  K AH0 N - T IH1 - N Y UW0 - AH0 N - S IH0 Z\nCONTINUATION  K AH0 N - T IH2 - N Y UW0 - EY1 - SH AH0 N\nCONTINUE  K AH0 N - T IH1 - N Y UW0\nCONTINUED  K AH0 N - T IH1 - N Y UW0 D\nCONTINUES  K AH0 N - T IH1 - N Y UW0 Z\nCONTINUING  K AH0 N - T IH1 - N Y UW0 - IH0 NG\nCONTINUITY  K AA2 N - T AH0 - N UW1 - AH0 - T IY0\nCONTINUOUS  K AH0 N - T IH1 - N Y UW0 - AH0 S\nCONTINUOUSLY  K AH0 N - T IH1 - N Y UW0 - AH0 S - L IY0\nCONTINUUM  K AH0 N - T IH1 - N Y UW0 - AH0 M\nCONTOIS  K AH0 N - T W AA1\nCONTORT  K AH0 N - T AO1 R T\nCONTORTED  K AH0 N - T AO1 R - T AH0 D\nCONTORTION  K AH0 N - T AO1 R - SH AH0 N\nCONTORTIONIST  K AH0 N - T AO1 R - SH AH0 N - AH0 S T\nCONTORTIONS  K AH0 N - T AO1 R - SH AH0 N Z\nCONTORTS  K AH0 N - T AO1 R T S\nCONTOS  K AA1 N - T OW0 Z\nCONTOUR  K AA1 N - T UH2 R\nCONTOURED  K AA1 N - T UH2 R D\nCONTOURS  K AA1 N - T UH2 R Z\nCONTRA  K AA1 N - T R AH0\nCONTRABAND  K AA1 N - T R AH0 - B AE2 N D\nCONTRABASSOON  K AA1 N - T R AH0 - B AE0 - S UW1 N\nCONTRACEPTION  K AA2 N - T R AH0 - S EH1 P - SH AH0 N\nCONTRACEPTIVE  K AA2 N - T R AH0 - S EH1 P - T IH0 V\nCONTRACEPTIVES  K AA2 N - T R AH0 - S EH1 P - T IH0 V Z\nCONTRACT  K AA1 N - T R AE2 K T\nCONTRACT'S  K AA1 N - T R AE2 K T S\nCONTRACT(2)  K AH0 N - T R AE1 K T\nCONTRACTED  K AA1 N - T R AE0 K - T AH0 D\nCONTRACTING  K AA1 N - T R AE0 K - T IH0 NG\nCONTRACTION  K AH0 N - T R AE1 K - SH AH0 N\nCONTRACTIONARY  K AH0 N - T R AE1 K - SH AH0 - N EH0 - R IY0\nCONTRACTIONS  K AH0 N - T R AE1 K - SH AH0 N Z\nCONTRACTOR  K AA1 N - T R AE2 K - T ER0\nCONTRACTOR'S  K AA1 N - T R AE2 K - T ER0 Z\nCONTRACTORS  K AA1 N - T R AE2 K - T ER0 Z\nCONTRACTORS'  K AH0 N - T R AE1 K - T ER0 Z\nCONTRACTS  K AA1 N - T R AE2 K T S\nCONTRACTS(2)  K AH0 N - T R AE1 K T S\nCONTRACTUAL  K AH0 N - T R AE1 K - CH UW0 - AH0 L\nCONTRACTUALLY  K AH0 N - T R AE1 K - CH UW0 - AH0 - L IY0\nCONTRADICT  K AA2 N - T R AH0 - D IH1 K T\nCONTRADICTED  K AA2 N - T R AH0 - D IH1 K - T AH0 D\nCONTRADICTING  K AA2 N - T R AH0 - D IH1 K - T IH0 NG\nCONTRADICTION  K AA2 N - T R AH0 - D IH1 K - SH AH0 N\nCONTRADICTIONS  K AA2 N - T R AH0 - D IH1 K - SH AH0 N Z\nCONTRADICTORILY  K AA2 N - T R AH0 - D IH1 K - T ER0 - AH0 - L IY0\nCONTRADICTORY  K AA2 N - T R AH0 - D IH1 K - T ER0 - IY0\nCONTRADICTS  K AA2 N - T R AH0 - D IH1 K T S\nCONTRAN  K AA1 N - T R AE2 N\nCONTRAPTION  K AH0 N - T R AE1 P - SH AH0 N\nCONTRAPTIONS  K AH0 N - T R AE1 P - SH AH0 N Z\nCONTRARIAN  K AA2 N - T R EH1 - R IY0 - AH0 N\nCONTRARIANS  K AH0 N - T R EH1 - R IY0 - AH0 N Z\nCONTRARINESS  K AA1 N - T R EH0 - R IY0 - N AH0 S\nCONTRARY  K AA1 N - T R EH0 - R IY0\nCONTRARY(2)  K AH0 N - T R EH1 - R IY0\nCONTRAS  K AA1 N - T R AH0 Z\nCONTRAS'  K AA1 N - T R AH0 Z\nCONTRAS(2)  K AO1 N - T R AH0 Z\nCONTRAST  K AA1 N - T R AE0 S T\nCONTRAST(2)  K AH0 N - T R AE1 S T\nCONTRASTED  K AH0 N - T R AE1 - S T AH0 D\nCONTRASTING  K AH0 N - T R AE1 - S T IH0 NG\nCONTRASTS  K AA1 N - T R AE0 S T S\nCONTRASTS(2)  K AH0 N - T R AE1 S T S\nCONTRASTS(3)  K AA1 N - T R AE0 S S\nCONTRASTS(4)  K AH0 N - T R AE1 S S\nCONTRASTS(5)  K AA1 N - T R AE0 S\nCONTRASTS(6)  K AH0 N - T R AE1 S\nCONTRAVENE  K AA1 N - T R AH0 - V IY2 N\nCONTRAVENTION  K AA2 N - T R AH0 - V EH1 N - CH AH0 N\nCONTRERAS  K AA0 N - T R EH1 - R AA0 Z\nCONTRETEMPS  K AA1 N - T R AH0 - T EH2 M P S\nCONTRIBUTE  K AH0 N - T R IH1 - B Y UW0 T\nCONTRIBUTED  K AH0 N - T R IH1 - B Y UW0 - T IH0 D\nCONTRIBUTES  K AH0 N - T R IH1 - B Y UW0 T S\nCONTRIBUTING  K AH0 N - T R IH1 - B Y UW0 - T IH0 NG\nCONTRIBUTION  K AA2 N - T R AH0 - B Y UW1 - SH AH0 N\nCONTRIBUTIONS  K AA2 N - T R AH0 - B Y UW1 - SH AH0 N Z\nCONTRIBUTOR  K AH0 N - T R IH1 - B Y AH0 - T ER0\nCONTRIBUTORS  K AH0 N - T R IH1 - B Y AH0 - T ER0 Z\nCONTRIBUTORY  K AH0 N - T R IH1 - B Y AH0 - T AO2 - R IY0\nCONTRITE  K AH0 N - T R AY1 T\nCONTRITION  K AH0 N - T R IH1 - SH AH0 N\nCONTRIVANCE  K AH0 N - T R AY1 - V AH0 N S\nCONTRIVANCES  K AH0 N - T R AY1 - V AH0 N - S IH0 Z\nCONTRIVE  K AH0 N - T R AY1 V\nCONTRIVED  K AH0 N - T R AY1 V D\nCONTROL  K AH0 N - T R OW1 L\nCONTROL'S  K AH0 N - T R OW1 L Z\nCONTROLADORA  K AH0 N - T R OW2 - L AH0 - D AO1 - R AH0\nCONTROLLABLE  K AH0 N - T R OW1 - L AH0 - B AH0 L\nCONTROLLED  K AH0 N - T R OW1 L D\nCONTROLLER  K AH0 N - T R OW1 - L ER0\nCONTROLLER'S  K AH0 N - T R OW1 - L ER0 Z\nCONTROLLERS  K AH0 N - T R OW1 - L ER0 Z\nCONTROLLERS'  K AH0 N - T R AA1 - L ER0 Z\nCONTROLLING  K AH0 N - T R OW1 - L IH0 NG\nCONTROLS  K AH0 N - T R OW1 L Z\nCONTROLS'  K AA1 N - T R AA0 L Z\nCONTROVERSIAL  K AA2 N - T R AH0 - V ER1 - SH AH0 L\nCONTROVERSIES  K AA1 N - T R AH0 - V ER2 - S IY0 Z\nCONTROVERSY  K AA1 N - T R AH0 - V ER2 - S IY0\nCONTURA  K AA2 N - T UH1 - R AH0\nCONTUSION  K AH0 N - T UW1 - ZH AH0 N\nCONTUSIONS  K AH0 N - T UW1 - ZH AH0 N Z\nCONUNDRUM  K AH0 - N AH1 N - D R AH0 M\nCONUS  K OW1 - N AH0 S\nCONVAIR  K AA0 N - V EH1 R\nCONVALESCE  K AA2 N - V AH0 - L EH1 S\nCONVALESCENCE  K AA2 N - V AH0 - L EH1 - S AH0 N S\nCONVALESCENT  K AA2 N - V AH0 - L EH1 - S AH0 N T\nCONVECTION  K AH0 N - V EH1 K - SH AH0 N\nCONVENE  K AH0 N - V IY1 N\nCONVENED  K AH0 N - V IY1 N D\nCONVENES  K AH0 N - V IY1 N Z\nCONVENIENCE  K AH0 N - V IY1 - N Y AH0 N S\nCONVENIENCES  K AH0 N - V IY1 - N Y AH0 N - S IH0 Z\nCONVENIENT  K AH0 N - V IY1 - N Y AH0 N T\nCONVENIENTLY  K AH0 N - V IY1 - N Y AH0 N T - L IY0\nCONVENING  K AH0 N - V IY1 - N IH0 NG\nCONVENT  K AA1 N - V AH0 N T\nCONVENT(2)  K AA1 N - V EH2 N T\nCONVENTION  K AH0 N - V EH1 N - SH AH0 N\nCONVENTION'S  K AH0 N - V EH1 N - SH AH0 N Z\nCONVENTIONAL  K AH0 N - V EH1 N - SH AH0 - N AH0 L\nCONVENTIONALLY  K AH0 N - V EH1 N - SH AH0 N - AH0 - L IY0\nCONVENTIONEER  K AH0 N - V EH2 N - SH AH0 - N IH1 R\nCONVENTIONEERS  K AH0 N - V EH2 N - SH AH0 - N IH1 R Z\nCONVENTIONS  K AH0 N - V EH1 N - SH AH0 N Z\nCONVERGE  K AH0 N - V ER1 JH\nCONVERGED  K AH0 N - V ER1 JH D\nCONVERGENCE  K AH0 N - V ER1 - JH AH0 N S\nCONVERGENT  K AH0 N - V ER1 - JH AH0 N T\nCONVERGING  K AH0 N - V ER1 - JH IH0 NG\nCONVERSANT  K AH0 N - V ER1 - S AH0 N T\nCONVERSATION  K AA2 N - V ER0 - S EY1 - SH AH0 N\nCONVERSATIONAL  K AA2 N - V ER0 - S EY1 - SH AH0 - N AH0 L\nCONVERSATIONALIST  K AA2 N - V ER0 - S EY1 - SH AH0 N - AH0 - L AH0 S T\nCONVERSATIONS  K AA2 N - V ER0 - S EY1 - SH AH0 N Z\nCONVERSE  K AA1 N - V ER0 S\nCONVERSE(2)  K AH0 N - V ER1 S\nCONVERSED  K AH0 N - V ER1 S T\nCONVERSELY  K AA1 N - V ER0 S - L IY0\nCONVERSES  K AA1 N - V ER0 - S AH0 Z\nCONVERSES(2)  K AH0 N - V ER1 - S AH0 Z\nCONVERSING  K AH0 N - V ER1 - S IH0 NG\nCONVERSION  K AH0 N - V ER1 - ZH AH0 N\nCONVERSION'S  K AH0 N - V ER1 - ZH AH0 N Z\nCONVERSIONS  K AH0 N - V ER1 - ZH AH0 N Z\nCONVERT  K AA1 N - V ER0 T\nCONVERT(2)  K AH0 N - V ER1 T\nCONVERTED  K AH0 N - V ER1 - T IH0 D\nCONVERTER  K AH0 N - V ER1 - T ER0\nCONVERTERS  K AH0 N - V ER1 - T ER0 Z\nCONVERTIBILITY  K AA2 N - V ER0 - T IH0 - B IH1 - L IH0 - T IY0\nCONVERTIBLE  K AH0 N - V ER1 - T AH0 - B AH0 L\nCONVERTIBLES  K AH0 N - V ER1 - T AH0 - B AH0 L Z\nCONVERTING  K AH0 N - V ER1 - T IH0 NG\nCONVERTS  K AA1 N - V ER0 T S\nCONVERTS(2)  K AH0 N - V ER1 T S\nCONVERY  K AA1 N - V ER0 - IY0\nCONVEX  K AH0 N - V EH1 K S\nCONVEX(2)  K AA1 N - V EH2 K S\nCONVEY  K AH0 N - V EY1\nCONVEYANCE  K AH0 N - V EY1 - AH0 N S\nCONVEYED  K AH0 N - V EY1 D\nCONVEYER  K AH0 N - V EY1 - ER0\nCONVEYING  K AH0 N - V EY1 - IH0 NG\nCONVEYOR  K AH0 N - V EY1 - ER0\nCONVEYS  K AH0 N - V EY1 Z\nCONVICT  K AA1 N - V IH0 K T\nCONVICT(2)  K AH0 N - V IH1 K T\nCONVICTED  K AH0 N - V IH1 K - T AH0 D\nCONVICTING  K AH0 N - V IH1 K - T IH0 NG\nCONVICTION  K AH0 N - V IH1 K - SH AH0 N\nCONVICTIONS  K AH0 N - V IH1 K - SH AH0 N Z\nCONVICTS  K AA1 N - V IH0 K T S\nCONVICTS(2)  K AH0 N - V IH1 K T S\nCONVILLE  K AA1 N - V IH0 L\nCONVINCE  K AH0 N - V IH1 N S\nCONVINCED  K AH0 N - V IH1 N S T\nCONVINCES  K AH0 N - V IH1 N - S IH0 Z\nCONVINCING  K AH0 N - V IH1 N - S IH0 NG\nCONVINCINGLY  K AH0 N - V IH1 N - S IH0 NG - L IY0\nCONVIVIAL  K AH0 N - V IH1 - V IY0 - AH0 L\nCONVOCATION  K AA2 N - V AH0 - K EY1 - SH AH0 N\nCONVOLUTE  K AA1 N - V AH0 - L UW2 T\nCONVOLUTED  K AA1 N - V AH0 - L UW2 - T AH0 D\nCONVOLUTION  K AA1 N - V AH0 - L UW2 - SH AH0 N\nCONVOY  K AA1 N - V OY2\nCONVOYS  K AA1 N - V OY2 Z\nCONVULSION  K AH0 N - V AH1 L - SH AH0 N\nCONVULSIONS  K AH0 N - V AH1 L - SH AH0 N Z\nCONVULSIVE  K AH0 N - V AH1 L - S IH0 V\nCONWAY  K AA1 N - W EY2\nCONWELL  K AA1 N - W EH2 L\nCONYER  K AA1 - N Y ER0\nCONYERS  K AA1 - N Y ER0 Z\nCOO  K UW1\nCOOCHIE  K UW1 - CH IY0\nCOODY  K UW1 - D IY0\nCOOGAN  K UW1 - G AH0 N\nCOOGLE  K UW1 - G AH0 L\nCOOGLER  K UW1 - G AH0 - L ER0\nCOOGLER(2)  K UW1 G - L ER0\nCOOING  K UW1 - IH0 NG\nCOOK  K UH1 K\nCOOK'S  K UH1 K S\nCOOKBOOK  K UH1 K - B UH2 K\nCOOKBOOK'S  K UH1 K - B UH2 K S\nCOOKBOOKS  K UH1 K - B UH2 K S\nCOOKE  K UH1 K\nCOOKED  K UH1 K T\nCOOKER  K UH1 - K ER0\nCOOKERS  K UH1 - K ER0 Z\nCOOKIE  K UH1 - K IY0\nCOOKIES  K UH1 - K IY0 Z\nCOOKIN'  K UH1 - K IH0 N\nCOOKING  K UH1 - K IH0 NG\nCOOKINGHAM  K UH1 - K IH0 NG - HH AE0 M\nCOOKMAN  K UH1 K - M AH0 N\nCOOKOUT  K UH1 K - AW2 T\nCOOKOUTS  K UH1 K - AW2 T S\nCOOKS  K UH1 K S\nCOOKSEY  K UH1 K - S IY0\nCOOKSON  K UH1 K - S AH0 N\nCOOKSTON  K UH1 K - S T AH0 N\nCOOKWARE  K UH1 K - W EH2 R\nCOOL  K UW1 L\nCOOLANT  K UW1 - L AH0 N T\nCOOLANTS  K UW1 - L AH0 N T S\nCOOLBAUGH  K UW1 L - B AO2\nCOOLE  K UW1 L\nCOOLED  K UW1 L D\nCOOLER  K UW1 - L ER0\nCOOLERS  K UW1 - L ER0 Z\nCOOLEST  K UW1 - L AH0 S T\nCOOLEY  K UW1 - L IY0\nCOOLEY'S  K UW1 - L IY0 Z\nCOOLIDGE  K UW1 - L IH0 JH\nCOOLIDGE'S  K UW1 - L IH0 - JH AH0 Z\nCOOLING  K UW1 - L IH0 NG\nCOOLIO  K UW1 - L IY2 - OW0\nCOOLIO(2)  K UW1 - L Y OW0\nCOOLLY  K UW1 - L IY0\nCOOLMAN  K UW1 L - M AH0 N\nCOOLNESS  K UW1 L - N AH0 S\nCOOLS  K UW1 L Z\nCOOMBE  K UW1 M B\nCOOMBE(2)  K UW1 M\nCOOMBES  K UW1 M B Z\nCOOMBES(2)  K UW1 M Z\nCOOMBS  K UW1 M Z\nCOOMER  K UW1 - M ER0\nCOOMES  K UW1 M Z\nCOON  K UW1 N\nCOONAN  K UW1 - N AH0 N\nCOONCE  K UW1 N S\nCOONE  K UW1 N\nCOONER  K UW1 - N ER0\nCOONES  K UW1 N Z\nCOONEY  K UW1 - N IY0\nCOONRADT  K UW1 N - R AE0 T\nCOONROD  K UW1 N - R AA2 D\nCOONS  K UW1 N Z\nCOONTZ  K UW1 N T S\nCOOP  K UW1 P\nCOOPED  K UW1 P T\nCOOPER  K UW1 - P ER0\nCOOPER'S  K UW1 - P ER0 Z\nCOOPERAGE  K UW1 - P ER0 - AH0 JH\nCOOPERATE  K OW0 - AA1 - P ER0 - EY2 T\nCOOPERATE(2)  K W AA1 - P ER0 - EY2 T\nCOOPERATED  K OW0 - AA1 - P ER0 - EY2 - T AH0 D\nCOOPERATED(2)  K W AA1 - P ER0 - EY2 - T AH0 D\nCOOPERATES  K OW0 - AA1 - P ER0 - EY2 T S\nCOOPERATING  K OW0 - AA1 - P ER0 - EY2 - T IH0 NG\nCOOPERATION  K OW0 - AA2 - P ER0 - EY1 - SH AH0 N\nCOOPERATION(2)  K W AA2 - P ER0 - EY1 - SH AH0 N\nCOOPERATION(3)  K W AO2 - P ER0 - EY1 - SH AH0 N\nCOOPERATIONS  K OW0 - AA2 - P ER0 - EY1 - SH AH0 N Z\nCOOPERATIONS(2)  K W AA2 - P ER0 - EY1 - SH AH0 N Z\nCOOPERATIVE  K OW0 - AA1 - P ER0 - EY2 - T IH0 V\nCOOPERATIVELY  K OW0 - AA1 - P R AH0 - T IH0 V - L IY0\nCOOPERATIVES  K OW0 - AA1 - P R AH0 - T IH0 V Z\nCOOPERIDER  K UW1 - P ER0 - AY0 - D ER0\nCOOPERMAN  K UW1 - P ER0 - M AE2 N\nCOOPERRIDER  K UW1 - P ER0 - AY0 - D ER0\nCOOPERS  K UW1 - P ER0 Z\nCOOPERSMITH  K UW1 - P ER0 - S M IH2 TH\nCOOPERSTEIN  K UW1 - P ER0 - S T AY2 N\nCOOPERSTEIN(2)  K UW1 - P ER0 - S T IY2 N\nCOOPERSTOWN  K UW1 - P ER0 Z - T AW2 N\nCOOPERVISION  K UW1 - P ER0 - V IH2 - ZH AH0 N\nCOOPMAN  K UW1 P - M AH0 N\nCOOPRIDER  K UW1 - P R AY2 - D ER0\nCOORDINATE  K OW0 - AO1 R - D AH0 N - AH0 T\nCOORDINATE(2)  K OW0 - AO1 R - D AH0 N - EY2 T\nCOORDINATED  K OW0 - AO1 R - D AH0 - N EY0 - T IH0 D\nCOORDINATES  K OW0 - AO1 R - D AH0 N - AH0 T S\nCOORDINATES(2)  K OW0 - AO1 R - D AH0 N - EY2 T S\nCOORDINATING  K OW0 - AO1 R - D AH0 - N EY2 - T IH0 NG\nCOORDINATION  K OW0 - AO2 R - D AH0 N - EY1 - SH AH0 N\nCOORDINATOR  K OW0 - AO1 R - D AH0 N - EY2 - T ER0\nCOORDINATORS  K OW0 - AO1 R - D AH0 N - EY2 - T ER0 Z\nCOORS  K UW1 R Z\nCOORS'S  K UW1 R - Z IH0 Z\nCOOS  K UW1 S\nCOOSA  K UW1 - S AH0\nCOOT  K UW1 T\nCOOTE  K UW1 T\nCOOTER  K UW1 - T ER0\nCOOTS  K UW1 T S\nCOOVER  K UW1 - V ER0\nCOOVICK  K UW1 - V IH0 K\nCOP  K AA1 P\nCOPA  K OW1 - P AH0\nCOPACABANA  K OW2 - P AH0 - K AH0 - B AE1 - N AH0\nCOPARTNER  K OW1 - P AA2 R T - N ER0\nCOPARTNERS  K OW1 - P AA2 R T - N ER0 Z\nCOPAS  K OW1 - P AH0 Z\nCOPAYMENT  K OW1 - P EY1 - M AH0 N T\nCOPAYMENTS  K OW1 - P EY1 - M AH0 N T S\nCOPCO  K AA1 P - K OW0\nCOPE  K OW1 P\nCOPED  K OW1 P T\nCOPELAN  K AA1 - P IH0 - L AE0 N\nCOPELAND  K OW1 P - L AH0 N D\nCOPELAND'S  K OW1 P - L AH0 N D Z\nCOPELCO  K OW2 - P EH1 L - K OW0\nCOPELIN  K AA1 - P IH0 - L IH0 N\nCOPEMAN  K OW1 P - M AH0 N\nCOPEN  K OW1 - P AH0 N\nCOPENHAGEN  K OW2 - P AH0 N - HH EY1 - G AH0 N\nCOPENHAVER  K AH0 - P EH1 N - HH AH0 - V ER0\nCOPERNICAN  K AH0 - P ER1 - N AH0 - K AH0 N\nCOPERNICUS  K AH0 - P ER1 - N AH0 - K AH0 S\nCOPES  K OW1 P S\nCOPETAS  K AH0 - P EY1 - T AH0 S\nCOPETAS(2)  K AH0 - P IY1 - T AH0 S\nCOPHER  K AA1 - F ER0\nCOPIAGUE  K OW1 - P IY0 - AE0 G\nCOPIED  K AA1 - P IY0 D\nCOPIER  K AA1 - P IY0 - ER0\nCOPIERS  K AA1 - P IY0 - ER0 Z\nCOPIES  K AA1 - P IY0 Z\nCOPILOT  K OW1 - P AY0 - L AH0 T\nCOPING  K OW1 - P IH0 NG\nCOPIOUS  K OW1 - P IY0 - AH0 S\nCOPLAN  K AA1 P - L AH0 N\nCOPLAND  K AA1 P - L AH0 N D\nCOPLEN  K AA1 - P AH0 - L AH0 N\nCOPLEY  K AA1 P - L IY0\nCOPLEY'S  K AA1 - P L IY0 Z\nCOPLEYS  K AA1 - P L IY0 Z\nCOPLIN  K AA1 P - L IH0 N\nCOPOLLA  K OW0 - P OW1 - L AH0\nCOPP  K AA1 P\nCOPPA  K OW1 - P AH0\nCOPPAGE  K AA1 - P IH0 JH\nCOPPED  K AA1 P T\nCOPPEDGE  K AA1 - P IH0 JH\nCOPPEE  K AA1 - P IY1\nCOPPEL  K AA1 - P AH0 L\nCOPPENS  K AA1 - P AH0 N Z\nCOPPER  K AA1 - P ER0\nCOPPER'S  K AA1 - P ER0 Z\nCOPPERFIELD  K AA1 - P ER0 - F IY2 L D\nCOPPERFIELD'S  K AA1 - P ER0 - F IY2 L D Z\nCOPPERFIELDS  K AA1 - P ER0 - F IY2 L D Z\nCOPPERFIELDS'  K AA1 - P ER0 - F IY2 L D Z\nCOPPERHEAD  K AA1 - P ER0 - HH EH2 D\nCOPPERHEADS  K AA1 - P ER0 - HH EH2 D Z\nCOPPERMAN  K AA1 - P ER0 - M AH0 N\nCOPPERNOLL  K AH0 - P ER1 - N OW0 L\nCOPPERS  K AA1 - P ER0 Z\nCOPPERSMITH  K AA1 - P ER0 - S M IH2 TH\nCOPPERWELD  K AA1 - P ER0 - W EH2 L D\nCOPPERY  K AA1 - P ER0 - IY0\nCOPPESS  K AA1 - P AH0 S\nCOPPIN  K AA1 - P IH0 N\nCOPPING  K AA1 - P IH0 NG\nCOPPINGER  K AA1 - P IH0 - NG ER0\nCOPPINS  K AA1 - P IH0 N Z\nCOPPLE  K AA1 - P AH0 L\nCOPPOCK  K AA1 - P AH0 K\nCOPPOLA  K OW0 - P OW1 - L AH0\nCOPPOLA'S  K OW0 - P OW1 - L AH0 Z\nCOPPOLINO  K OW0 - P OW0 - L IY1 - N OW0\nCOPPS  K AA1 P S\nCOPRA  K OW1 - P R AH0\nCOPROCESSOR  K OW1 - P R AA1 - S EH0 - S ER0\nCOPROCESSORS  K OW1 - P R AA1 - S EH0 - S ER0 Z\nCOPS  K AA1 P S\nCOPSEY  K AA1 P - S IY0\nCOPTIC  K AA1 P - T IH0 K\nCOPULATE  K AA1 - P Y AH0 - L EY2 T\nCOPUS  K OW1 - P AH0 S\nCOPY  K AA1 - P IY0\nCOPYCAT  K AA1 - P IY0 - K AE2 T\nCOPYCATS  K AA1 - P IY0 - K AE2 T S\nCOPYCATTING  K AA1 - P IY0 - K AE2 - T IH0 NG\nCOPYCODE  K AA1 - P IY0 - K OW2 D\nCOPYING  K AA1 - P IY0 - IH0 NG\nCOPYREADER  K AA1 - P IY0 - R IY2 - D ER0\nCOPYREADERS  K AA1 - P IY0 - R IY2 - D ER0 Z\nCOPYRIGHT  K AA1 - P IY0 - R AY2 T\nCOPYRIGHTABLE  K AA1 - P IY0 - R AY2 - T AH0 - B AH0 L\nCOPYRIGHTED  K AA1 - P IY0 - R AY2 - T IH0 D\nCOPYRIGHTS  K AA1 - P IY0 - R AY2 T S\nCOPYTELE  K AA1 - P IY0 - T EH2 - L AH0\nCOPYWRITE  K AA1 - P IY0 - R AY2 T\nCOPYWRITED  K AA1 - P IY0 - R AY2 - T IH0 D\nCOPYWRITER  K AA1 - P IY0 - R AY2 - T ER0\nCOPYWRITERS  K AA1 - P IY0 - R AY2 - T ER0 Z\nCOR  K AO1 R\nCORA  K AO1 - R AH0\nCORA'S  K AO1 - R AH0 Z\nCORABELLE  K AO1 - R AH0 - B AH0 L\nCORABELLE(2)  K AO1 - R AH0 - B EH2 L\nCORACLE  K AO1 - R AH0 - K AH0 L\nCORAL  K AO1 - R AH0 L\nCORALIE  K AO1 - R AH0 - L IY0\nCORALINE  K AO1 - R AH0 - L AY2 N\nCORALLO  K AO2 - R AE1 - L OW0\nCORALS  K AO1 - R AH0 L Z\nCORAM  K AO1 - R AE2 M\nCORATH  K AO1 - R AE1 TH\nCORAZON  K AO1 - R AH0 - Z OW2 N\nCORBAN  K AO1 R - B AH0 N\nCORBEIL  K AO1 R - B AY2 L\nCORBEL  K AO1 R - B AH0 L\nCORBELL  K AO1 R - B EH0 L\nCORBELLED  K AO1 R - B AH0 L D\nCORBELLO  K ER0 - B EH1 - L OW0\nCORBET  K AO1 R - B IH0 T\nCORBETT  K AO1 R - B IH0 T\nCORBIN  K AO1 R - B IH0 N\nCORBIT  K AO1 R - B IH0 T\nCORBITT  K AO1 R - B IH0 T\nCORBO  K AO1 R - B OW0\nCORBRIDGE  K AO1 R - B R IH0 JH\nCORBU  K AO2 R - B UW1\nCORBUSIER  K AO2 R - B Y UW1 - S Y ER0\nCORBY  K AO1 R - B IY0\nCORCAP  K AO1 R - K AE2 P\nCORCORAN  K AO1 R - K ER0 - AH0 N\nCORD  K AO1 R D\nCORDA  K AO1 R - D AH0\nCORDAGE  K AO1 R - D AH0 JH\nCORDARO  K ER0 - D AA1 - R OW0\nCORDASCO  K ER0 - D AA1 - S K OW0\nCORDAY  K AO1 R - D EY2\nCORDED  K AO1 R - D AH0 D\nCORDEIRO  K ER0 - D EH1 - R OW0\nCORDELL  K AO2 R - D EH1 L\nCORDER  K AO1 R - D ER0\nCORDERO  K ER0 - D EH1 - R OW0\nCORDES  K AO1 R D Z\nCORDESMAN  K AO1 R - D AH0 S - M AH0 N\nCORDIAL  K AO1 R - JH AH0 L\nCORDIALLY  K AO1 R - JH AH0 - L IY0\nCORDIANT  K AO1 R - D IY0 - AH0 N T\nCORDIANT'S  K AO1 R - D IY0 - AH0 N T S\nCORDIE  K AO1 R - D IY0\nCORDIER  K AO1 R - D IY0 - ER0\nCORDILL  K AO1 R - D AH0 L\nCORDING  K AO1 R - D IH0 NG\nCORDIS  K AO1 R - D IH0 S\nCORDLE  K AO1 R - D AH0 L\nCORDLESS  K AO1 R D - L AH0 S\nCORDNER  K AO1 R D - N ER0\nCORDOBA  K AO2 R - D OW1 - B AH0\nCORDOBA'S  K AO2 R - D OW1 - B AH0 Z\nCORDOBAS  K AO2 R - D OW1 - B AH0 Z\nCORDON  K AO1 R - D AH0 N\nCORDONE  K AO1 R - D AH0 N\nCORDONED  K AO1 R - D AH0 N D\nCORDOVA  K AO2 R - D OW1 - V AH0\nCORDOVER  K AO1 R D - OW2 - V ER0\nCORDOVEZ  K AO2 R D - OW1 - V EH0 Z\nCORDRAY  K AO1 R D - R EY2\nCORDREY  K AO1 R - D R IY0\nCORDRY  K AO1 R - D ER0 - IY0\nCORDS  K AO1 R D Z\nCORDTS  K AO1 R D T S\nCORDUROY  K AO1 R - D ER0 - OY2\nCORDY  K AO1 R - D IY0\nCORE  K AO1 R\nCOREA  K AO0 - R IY1 - AH0\nCOREL  K AO2 - R EH1 L\nCORELL  K AO2 - R EH1 L\nCORELLA  K ER0 - EH1 - L AH0\nCOREN  K AO1 - R AH0 N\nCORES  K AO1 R Z\nCORESPONDENT  K AO2 - R AH0 - S P AA1 N - D AH0 N T\nCORESTATE  K AO1 R - S T EY2 T\nCORESTATES  K AO1 R S - T EY2 T S\nCORESTATES'  K AO1 - R AH0 - S T EY2 T S\nCORETECH  K AO1 R - T EH2 K\nCORETTA  K AO0 - R EH1 - T AH0\nCORETTE  K AO1 - R EH1 T\nCOREXIT  K AO0 - R EH1 K - S IH0 T S\nCOREY  K AO1 - R IY0\nCORGI  K AO1 R - G IY0\nCORIA  K AO1 - R IY0 - AH0\nCORIANDER  K AO2 - R IY0 - AE1 N - D ER0\nCORIELL  K AO1 - R IY0 L\nCORIGLIANO  K ER0 - IY0 - G L IY0 - AA1 - N OW0\nCORINA  K AO2 - R IY1 - N AH0\nCORINN  K AO1 - R IH0 N\nCORINN'S  K AO1 - R IH0 N Z\nCORINNA  K AO2 - R IH1 - N AH0\nCORINNE  K ER0 - IY1 N\nCORINTH  K AO1 - R AH0 N TH\nCORINTHIAN  K ER0 - IH1 N - TH IY0 - AH0 N\nCORINTO  K AO2 - R IH1 N - T OW0\nCORIO  K AO1 - R IY0 - OW0\nCORISA  K ER0 - IY1 - S AH0\nCORISSA  K AO2 - R IH1 - S AH0\nCORK  K AO1 R K\nCORKEN  K AO1 R - K AH0 N\nCORKER  K AO1 R - K ER0\nCORKERN  K AO1 R - K ER0 N\nCORKERY  K AO1 R - K ER0 - IY0\nCORKILL  K AO1 R - K IH2 L\nCORKING  K AO1 R - K IH0 NG\nCORKINS  K AO1 R - K IH0 N Z\nCORKRAN  K AO1 R - K R AH0 N\nCORKS  K AO1 R K S\nCORKSCREW  K AO1 R K - S K R UW2\nCORKUM  K AO1 R - K AH0 M\nCORKWOOD  K AO1 R K - W UH2 D\nCORKY  K AO1 R - K IY0\nCORL  K AO1 R L\nCORLE  K AO1 - R AH0 L\nCORLEONE  K AO1 R - L IY0 - OW2 N\nCORLEONE(2)  K AO1 R - L IY0 - OW2 - N IY0\nCORLESS  K AO1 R - L IH0 S\nCORLETT  K AO1 R - L IH0 T\nCORLEW  K AO1 R - L UW0\nCORLEY  K AO1 R - L IY0\nCORLISS  K AO1 R - L IH0 S\nCORMAC  K AO1 R - M AH0 K\nCORMACK  K AO1 R - M AH0 K\nCORMAN  K AO1 R - M AH0 N\nCORMANY  K AO1 R - M AH0 - N IY0\nCORMEN  K AO1 R - M AH0 N\nCORMEN(2)  K AO1 R - M IH0 N\nCORMICAN  K AO1 R - M IH0 - K AH0 N\nCORMICK  K AO1 R - M IH0 K\nCORMIER  K AO1 R - M IY0 - ER0\nCORMORANT  K AO1 R - M ER0 - AH0 N T\nCORMORANTS  K AO1 R - M ER0 - AH0 N T S\nCORN  K AO1 R N\nCORNACCHIA  K ER0 - N AA1 - K IY0 - AH0\nCORNALL  K AO1 R - N AH0 L\nCORNBLUME  K AO1 R N - B L UW2 M\nCORNBREAD  K AO1 R N - B R EH2 D\nCORNCOB  K AO1 R N - K AA2 B\nCORNCRIB  K AO1 R N - K R IH2 B\nCORNE  K AO1 R N\nCORNEA  K AO1 R - N IY0 - AH0\nCORNEAL  K AO2 R - N IY1 L\nCORNEAS  K AO1 R - N IY0 - AH0 Z\nCORNEJO  K ER0 - N EY1 - Y OW0\nCORNEL  K AO1 R - N AH0 L\nCORNELA  K ER0 - N EH1 - L AH0\nCORNELIA  K AO0 R - N IY1 - L Y AH0\nCORNELIO  K ER0 - N EH1 - L IY0 - OW0\nCORNELIOUS  K AO1 R - N IH0 - L IY0 - IH0 S\nCORNELIOUS(2)  K AO0 R - N IY1 L - Y IH0 S\nCORNELISON  K ER0 - N EH1 - L IH0 - S AH0 N\nCORNELIUS  K AO0 R - N IY1 - L Y AH0 S\nCORNELIUSON  K AO2 R - N IH0 - L IY0 - UW1 - S AH0 N\nCORNELL  K AO0 R - N EH1 L\nCORNELL'S  K AO0 R - N EH1 L Z\nCORNELLE  K ER0 - N EH1 L\nCORNER  K AO1 R - N ER0\nCORNERBACK  K AO1 R - N ER0 - B AE2 K\nCORNERED  K AO1 R - N ER0 D\nCORNERING  K AO1 R - N ER0 - IH0 NG\nCORNERS  K AO1 R - N ER0 Z\nCORNERSTONE  K AO1 R - N ER0 - S T OW2 N\nCORNERSTONES  K AO1 R - N ER0 - S T OW2 N Z\nCORNET  K AO0 R - N EH1 T\nCORNETT  K AO1 R - N IH0 T\nCORNETTE  K ER0 - N EH1 T\nCORNETTIST  K AO0 R - N EH1 - T AH0 S T\nCORNEY  K AO1 R - N IY0\nCORNFELD  K AO1 R N - F EH2 L D\nCORNFIELD  K AO1 R N - F IY2 L D\nCORNFIELDS  K AO1 R N - F IY1 L D Z\nCORNFLOWER  K AO1 R N - F L AW2 - ER0\nCORNFLOWERS  K AO1 R N - F L AW2 - ER0 Z\nCORNFORTH  K AO1 R N - F ER0 TH\nCORNHUSK  K AO1 R N - HH AH2 S K\nCORNHUSKING  K AO1 R N - HH AH2 - S K IH0 NG\nCORNIA  K AO1 R - N IY0 - AH0\nCORNICHE  K AO1 R - N IH0 SH\nCORNICK  K AO1 R - N IH0 K\nCORNIE  K AO1 R - N IY0\nCORNIEL  K AO2 R - N IY1 L\nCORNIEL'S  K AO2 R - N IY1 L Z\nCORNING  K AO1 R - N IH0 NG\nCORNING'S  K AO1 R - N IH0 NG Z\nCORNISH  K AO1 R - N IH0 SH\nCORNMAN  K AO1 R N - M AH0 N\nCORNMEAL  K AO1 R N - M IY2 L\nCORNS  K AO1 R N Z\nCORNSTALK  K AO1 R N - S T AO2 K\nCORNSTALKS  K AO1 R N - S T AO2 K S\nCORNSTARCH  K AO1 R N - S T AA2 R CH\nCORNUCOPIA  K AO2 R - N AH0 - K OW1 - P IY0 - AH0\nCORNWALL  K AO1 R N - W AO0 L\nCORNWALL'S  K AO1 R N - W AO0 L Z\nCORNWALLIS  K AO0 R N - W AO1 - L AH0 S\nCORNWELL  K AO1 R N - W EH2 L\nCORNY  K AO1 R - N IY0\nCOROLLA  K ER0 - AA1 - L AH0\nCOROLLARIES  K AO1 - R AH0 - L EH2 - R IY0 Z\nCOROLLARY  K AO1 - R AH0 - L EH2 - R IY0\nCOROLOGIS  K ER0 - R AA1 - L AH0 - JH IH0 S\nCORONA  K ER0 - OW1 - N AH0\nCORONA'S  K ER0 - OW1 - N AH0 Z\nCORONADO  K ER0 - OW0 - N AA1 - D OW0\nCORONARY  K AO1 - R AH0 - N EH2 - R IY0\nCORONATION  K AO2 - R AH0 - N EY1 - SH AH0 N\nCORONER  K AO1 - R AH0 - N ER0\nCORONER'S  K AO1 - R AH0 - N ER0 Z\nCORONERS  K AO1 - R AH0 - N ER0 Z\nCORONET  K AO1 - R AH0 - N EH1 T\nCORONETS  K AO1 - R AH0 - N EH1 T S\nCORP  K AO1 R P\nCORP'S  K AO1 R P S\nCORP'S(2)  K AO1 R - P ER0 - EY1 - SH AH0 N Z\nCORP(2)  K AO1 R - P ER0 - EY1 - SH AH0 N\nCORP.  K AO1 R P\nCORP.'S  K AO1 R P S\nCORP.'S(2)  K AO1 R - P ER0 - EY1 - SH AH0 N Z\nCORP.(2)  K AO1 R - P ER0 - EY1 - SH AH0 N\nCORPENING  K AO1 R - P AH0 - N IH0 NG\nCORPORA  K AO1 R - P ER0 - AH0\nCORPORACION  K AO2 R - P ER0 - AA2 - S IY0 - OW1 N\nCORPORAL  K AO1 R - P ER0 - AH0 L\nCORPORAL(2)  K AO1 R - P R AH0 L\nCORPORATE  K AO1 R - P ER0 - AH0 T\nCORPORATE(2)  K AO1 R - P R AH0 T\nCORPORATES  K AO1 R - P ER0 - AH0 T S\nCORPORATEWATCH  K AO1 R - P R AH0 T - W AA2 CH\nCORPORATEWIDE  K AO1 R - P ER0 - IH0 T - W AY2 D\nCORPORATION  K AO2 R - P ER0 - EY1 - SH AH0 N\nCORPORATION'S  K AO2 R - P ER0 - EY1 - SH AH0 N Z\nCORPORATIONS  K AO2 R - P ER0 - EY1 - SH AH0 N Z\nCORPORATIONS'  K AO2 R - P ER0 - EY1 - SH AH0 N Z\nCORPORATISM  K AO1 R - P ER0 - AH0 - T IH2 - Z AH0 M\nCORPORATIST  K AO1 R - P ER0 - AH0 - T IH0 S T\nCORPS  K AO1 R\nCORPS'  K AO1 R Z\nCORPS(2)  K AO1 R Z\nCORPSE  K AO1 R P S\nCORPSES  K AO1 R P - S AH0 Z\nCORPSES(2)  K AO1 R P - S IH0 Z\nCORPSMAN  K AO1 R - M AH0 N\nCORPULANT  K AO1 R - P Y AH0 - L AH0 N T\nCORPUS  K AO1 R - P AH0 S\nCORPUZ  K AO1 R - P UW0 Z\nCORR  K AO1 R\nCORRADI  K ER0 - AA1 - D IY0\nCORRADINO  K ER0 - AA0 - D IY1 - N OW0\nCORRADO  K ER0 - AA1 - D OW0\nCORRAL  K ER0 - AE1 L\nCORRALES  K ER0 - AA1 - L EH0 S\nCORRALLED  K ER0 - AE1 L D\nCORRALLING  K ER0 - AE1 - L IH0 NG\nCORRAO  K AO1 - R AW0\nCORREA  K AO1 - R IY0 - AH0\nCORREALE  K AO1 - R IY0 - AH0 L\nCORRECT  K ER0 - EH1 K T\nCORRECTED  K ER0 - EH1 K - T AH0 D\nCORRECTED(2)  K ER0 - EH1 K - T IH0 D\nCORRECTING  K ER0 - EH1 K - T IH0 NG\nCORRECTION  K ER0 - EH1 K - SH AH0 N\nCORRECTIONAL  K ER0 - EH1 K - SH AH0 - N AH0 L\nCORRECTIONS  K ER0 - EH1 K - SH AH0 N Z\nCORRECTIVE  K ER0 - EH1 K - T IH0 V\nCORRECTLY  K ER0 - EH1 K T - L IY0\nCORRECTNESS  K ER0 - EH1 K T - N AH0 S\nCORRECTS  K ER0 - EH1 K T S\nCORREGIDOR  K ER0 - EH1 - G AH0 - D AO0 R\nCORREIA  K ER0 - EY1 - IY0 - AH0\nCORREIRA  K ER0 - EH1 - R AH0\nCORRELATE  K AO1 - R AH0 - L EY2 T\nCORRELATE(2)  K AO1 - R AH0 - L AH0 T\nCORRELATED  K AO1 - R AH0 - L EY2 - T AH0 D\nCORRELATES  K AO1 - R AH0 - L AH0 T S\nCORRELATES(2)  K AO1 - R AH0 - L EY0 T S\nCORRELATING  K AO1 - R AH0 - L EY0 - T IH0 NG\nCORRELATION  K AO2 - R AH0 - L EY1 - SH AH0 N\nCORRELATIONS  K AO2 - R AH0 - L EY1 - SH AH0 N Z\nCORRELL  K ER0 - EY1 L\nCORRENE  K AO1 - R IY0 N\nCORRENTE  K ER0 - EH1 N - T IY0\nCORRENTI  K ER0 - EH1 N - T IY0\nCORRESPOND  K AO2 - R AH0 - S P AA1 N D\nCORRESPONDED  K AO2 - R AH0 - S P AA1 N - D IH0 D\nCORRESPONDENCE  K AO2 - R AH0 - S P AA1 N - D AH0 N S\nCORRESPONDENT  K AO2 - R AH0 - S P AA1 N - D AH0 N T\nCORRESPONDENTS  K AO2 - R AH0 - S P AA1 N - D AH0 N T S\nCORRESPONDENTS'  K AO2 - R AH0 - S P AA1 N - D AH0 N T S\nCORRESPONDING  K AO2 - R AH0 - S P AA1 N - D IH0 NG\nCORRESPONDINGLY  K AO2 - R AH0 - S P AA1 N - D IH0 NG - L IY0\nCORRESPONDS  K AO2 - R AH0 - S P AA1 N D Z\nCORRIB  K AO1 - R IH0 B\nCORRICK  K AO1 - R IH0 K\nCORRIDOR  K AO1 - R AH0 - D ER0\nCORRIDOR(2)  K AO1 - R IH0 - D ER0\nCORRIDORS  K AO1 - R IH0 - D ER0 Z\nCORRIDORS(2)  K AO1 - R AH0 - D ER0 Z\nCORRIE  K AO1 - R IY0\nCORRIERE  K AO2 R - Y EH1 R\nCORRIGAN  K AO1 - R IH0 - G AH0 N\nCORRIGAN'S  K AO1 - R IH0 - G AH0 N Z\nCORRIHER  K AO1 - R IH0 - HH ER0\nCORRIN  K AO1 - R IH0 N\nCORRINA  K ER0 - IY1 - N AH0\nCORRINGTON  K AO1 - R IH0 NG - T AH0 N\nCORRIVEAU  K AO1 - R IH0 - V OW0\nCORROBORATE  K ER0 - AA1 - B ER0 - EY2 T\nCORROBORATED  K ER0 - AA1 - B ER0 - EY2 - T IH0 D\nCORROBORATES  K ER0 - AO1 - B ER0 - EY2 T S\nCORROBORATING  K ER0 - AA1 - B ER0 - EY2 - T IH0 NG\nCORROBORATION  K ER0 - AO2 - B ER0 - EY1 - SH AH0 N\nCORROBORATIVE  K ER0 - AA1 - B ER0 - AH0 - T IH2 V\nCORROBORATIVE(2)  K ER0 - AA1 - B R AH0 - T IH2 V\nCORRODE  K ER0 - OW1 D\nCORRODED  K ER0 - OW1 - D IH0 D\nCORRODES  K ER0 - OW1 D Z\nCORRON  K ER0 - AO1 N\nCORROON  K AO0 - R UW1 N\nCORROSION  K ER0 - OW1 - ZH AH0 N\nCORROSIVE  K ER0 - OW1 - S IH0 V\nCORROW  K AO1 - R OW0\nCORRUGATE  K AO1 - R AH0 - G EY2 T\nCORRUGATED  K AO1 - R AH0 - G EY2 - T AH0 D\nCORRUGATED(2)  K AO1 - R AH0 - G EY2 - T IH0 D\nCORRUPT  K ER0 - AH1 P T\nCORRUPTED  K ER0 - AH1 P - T IH0 D\nCORRUPTING  K ER0 - AH1 P - T IH0 NG\nCORRUPTION  K ER0 - AH1 P - SH AH0 N\nCORRUPTIONS  K ER0 - AH1 P - SH AH0 N Z\nCORRUPTIVE  K ER0 - AH1 P - T IH0 V\nCORRUPTS  K ER0 - AH1 P T S\nCORRY  K AO1 - R IY0\nCORSA  K AO1 - S AH0\nCORSAGE  K AO0 R - S AA1 ZH\nCORSAIR  K AO1 R - S EH0 R\nCORSARO  K ER0 - S AA1 - R OW0\nCORSE  K AO1 R S\nCORSELLO  K ER0 - S EH1 - L OW0\nCORSENTINO  K ER0 - S EH0 N - T IY1 - N OW0\nCORSER  K AO1 R - S ER0\nCORSET  K AO1 R - S AH0 T\nCORSETTI  K ER0 - S EH1 - T IY0\nCORSI  K AO1 R - S IY0\nCORSICA  K AO1 R - S IH0 - K AH0\nCORSICAN  K AO1 R - S AH0 - K AH0 N\nCORSICAS  K AO1 R - S IH0 - K AH0 Z\nCORSIGLIA  K ER0 - S IY1 - G L IY0 - AH0\nCORSINI  K ER0 - S IY1 - N IY0\nCORSO  K AO1 R - S OW0\nCORSON  K AO1 R - S AH0 N\nCORT  K AO1 R T\nCORTE  K AO1 R T\nCORTELYOU  K AO1 R - T EH0 - L Y UW2\nCORTEN  K AO1 R - T EH0 N\nCORTENS  K AO1 R - T EH0 N Z\nCORTENS'  K AO1 R - T EH0 N Z\nCORTER  K AO1 R - T ER0\nCORTES  K AO1 R T S\nCORTESE  K ER0 - T EY1 - Z IY0\nCORTESI  K ER0 - T EH1 - S IY0\nCORTEX  K AO1 R - T EH0 K S\nCORTEZ  K AO0 R - T EH1 Z\nCORTI  K AO1 R - T IY0\nCORTICAL  K AO1 R - T AH0 - K AH0 L\nCORTICOSTEROID  K AO2 R - T IH0 - K OW0 - S T EH1 - R OY2 D\nCORTICOSTEROIDS  K AO2 R - T IH0 - K OW0 - S T EH1 - R OY2 D Z\nCORTIN  K AO1 R - T IH0 N\nCORTINA  K ER0 - T IY1 - N AH0\nCORTINAS  K AO1 R - T IY0 - N AH0 Z\nCORTINE  K AO0 R - T IY1 N\nCORTINES  K AO0 R - T IY1 N Z\nCORTISONE  K AO1 R - T AH0 - Z OW2 N\nCORTLAND  K AO1 R T - L AH0 N D\nCORTNER  K AO1 R T - N ER0\nCORTOPASSI  K ER0 - T OW0 - P AA1 - S IY0\nCORTRIGHT  K AO1 R T - R AY0 T\nCORUM  K AO1 - R AH0 M\nCORUNDUM  K ER0 - AH1 N - D AH0 M\nCORVA  K AO1 R - V AH0\nCORVALLIS  K AO2 R - V AE1 - L IH0 S\nCORVETTE  K AO0 R - V EH1 T\nCORVETTES  K AO2 R - V EH1 T S\nCORVIN  K AO1 R - V IH0 N\nCORVINO  K ER0 - V IY1 - N OW0\nCORVO  K AO1 R - V OW0\nCORVUS  K AO1 R - V AH0 S\nCORWIN  K AO1 R - W IH0 N\nCORY  K AO1 - R IY0\nCORZINE  K ER0 - Z IY1 - N IY0\nCORZO  K AO1 R - Z OW0\nCOS  K AO1 S\nCOSA  K OW1 - S AH0\nCOSATU  K AH0 - S AA1 - T UW2\nCOSATU'S  K AH0 - S AA1 - T UW2 Z\nCOSBY  K AO1 Z - B IY0\nCOSBY'S  K AO1 Z - B IY0 Z\nCOSCIA  K OW1 S - CH AH0\nCOSE  K OW1 Z\nCOSELL  K OW0 - S EH1 L\nCOSENS  K OW1 - S AH0 N Z\nCOSENTINO  K OW2 - S EH0 N - T IY1 - N OW0\nCOSENZA  K OW2 - S EH1 N - Z AH0\nCOSERATZ  K OW1 - Z ER0 - AE2 T S\nCOSETTE  K AH0 - S EH1 T\nCOSEY  K OW1 - Z IY0\nCOSGRIFF  K AA1 S - G R IH0 F\nCOSGROVE  K AA1 S - G R AH0 V\nCOSI  K OW1 - S IY0\nCOSIC  K OW1 - S IH0 K\nCOSIC(2)  K OW1 - Z IH0 K\nCOSIC(3)  K AA1 - S IH0 K\nCOSIMA  K OW0 - S IY1 - M AH0\nCOSIO  K OW1 - S IY0 - OW0\nCOSLETT  K AA1 S - L IH0 T\nCOSMA  K OW1 Z - M AH0\nCOSMAIR  K AO1 Z - M EH2 R\nCOSMAN  K AA1 S - M AH0 N\nCOSME  K OW1 Z M\nCOSMETIC  K AA0 Z - M EH1 - T IH0 K\nCOSMETICALLY  K AO2 Z - M EH1 - T IH0 K - L IY0\nCOSMETICS  K AA0 Z - M EH1 - T IH0 K S\nCOSMETOLOGY  K AA2 Z - M AH0 - T AA1 - L AH0 - JH IY0\nCOSMIC  K AA1 Z - M IH0 K\nCOSMO  K AO1 Z - M OW0\nCOSMO'S  K AA1 Z - M OW0 Z\nCOSMOLOGY  K AO0 Z - M AO1 - L AH0 - JH IY0\nCOSMONAUT  K AO1 Z - M AH0 - N AO2 T\nCOSMONAUTS  K AO1 Z - M AH0 - N AO2 T S\nCOSMOPOLITAN  K AA2 Z - M AH0 - P AA1 - L AH0 - T AH0 N\nCOSMOPULOS  K AO2 Z - M AH0 - P Y UW1 - L OW0 S\nCOSMOS  K AA1 Z - M OW0 S\nCOSNER  K AA1 S - N ER0\nCOSPER  K AA1 - S P ER0\nCOSPONSOR  K OW2 S - P AO1 N - S ER0\nCOSPONSORS  K OW2 S - P AO1 N - S ER0 Z\nCOSS  K AO1 S\nCOSSA  K AO1 - S AH0\nCOSSACK  K AO1 - S AH0 K\nCOSSACKS  K AA1 - S AE0 K S\nCOSSAIRT  K AA1 - S ER0 T\nCOSSAT  K AA1 - S AE0 T\nCOSSET  K AA1 - S AH0 T\nCOSSETTE  K AH0 - S EH1 T\nCOSSEY  K AA1 - S IY0\nCOSSIGA  K AO2 - S IY1 - G AH0\nCOSSIN  K AA1 - S IH0 N\nCOSSMAN  K AO1 S - M AH0 N\nCOST  K AA1 S T\nCOST(2)  K AO1 S T\nCOSTA  K AO1 - S T AH0\nCOSTABILE  K AO1 - S T AH0 - B AY2 L\nCOSTAIN  K OW2 - S T EY1 N\nCOSTALES  K AA1 - S T AH0 L Z\nCOSTANO  K OW0 - S T AA1 - N OW0\nCOSTANTINI  K OW0 - S T AA0 N - T IY1 - N IY0\nCOSTANTINO  K OW0 - S T AA0 N - T IY1 - N OW0\nCOSTANZA  K OW0 - S T AA1 N - Z AH0\nCOSTANZO  K OW0 - S T AA1 N - Z OW0\nCOSTAR  K OW1 - S T AA0 R\nCOSTARS  K OW1 - S T AA0 R Z\nCOSTAS  K AO1 - S T AH0 Z\nCOSTCO  K AO1 S T - K OW0\nCOSTCUTTING  K AO1 S T - K AH2 - T IH0 NG\nCOSTE  K OW1 S T\nCOSTED  K AA1 - S T IH0 D\nCOSTEIRA  K OW2 - S T IY0 - EH1 - R AH0\nCOSTELLA  K AO2 - S T EH1 - L AH0\nCOSTELLO  K AO2 - S T EH1 - L OW0\nCOSTELLO'S  K AO2 - S T EH1 - L OW0 Z\nCOSTEN  K AO1 - S T AH0 N\nCOSTER  K AO1 - S T ER0\nCOSTIGAN  K AA1 - S T IH0 - G AE0 N\nCOSTILLA  K OW0 - S T IH1 - L AH0\nCOSTILOW  K AA1 - S T IH0 - L OW0\nCOSTIN  K AA1 - S T IH0 N\nCOSTING  K AO1 - S T IH0 NG\nCOSTLEY  K AA1 S T - L IY0\nCOSTLIER  K AO1 S T - L IY0 - ER0\nCOSTLIEST  K AO1 S T - L IY0 - IH0 S T\nCOSTLOW  K AO1 S T - L OW2\nCOSTLY  K AA1 S T - L IY0\nCOSTLY(2)  K AO1 S T - L IY0\nCOSTNER  K AA1 S T - N ER0\nCOSTNER'S  K AA1 S T - N ER0 Z\nCOSTON  K AA1 - S T AH0 N\nCOSTRA  K AA1 S - T R AH0\nCOSTS  K AA1 S T S\nCOSTS(2)  K AO1 S T S\nCOSTS(3)  K AO1 S S\nCOSTS(4)  K AO1 S\nCOSTUME  K AA0 - S T UW1 M\nCOSTUME(2)  K AA1 - S T UW0 M\nCOSTUMED  K AO1 - S T UW2 M D\nCOSTUMER  K AA1 - S T UW0 - M ER0\nCOSTUMERS  K AA1 - S T UW0 - M ER0 Z\nCOSTUMES  K AA0 - S T UW1 M Z\nCOSTUMES(2)  K AA1 - S T UW0 M Z\nCOSURTUH  K AH0 - S ER1 - T AH0\nCOSY  K OW1 - Z IY0\nCOT  K AA1 T\nCOTA  K OW1 - T AH0\nCOTE  K OW1 T\nCOTELLE  K OW2 - T EH1 L\nCOTERIE  K OW1 - T ER0 - IY0\nCOTES  K OW1 T S\nCOTHAM  K AA1 - TH AH0 M\nCOTHERN  K AH1 - DH ER0 N\nCOTHRAN  K AA1 - TH R AH0 N\nCOTHREN  K AA1 - TH ER0 - AH0 N\nCOTHRON  K AA1 - TH R AH0 N\nCOTIJA  K OW0 - T IY1 - JH AH0\nCOTILLA  K AH0 - T IH1 - L AH0\nCOTLER  K OW1 - T AH0 L - ER0\nCOTLER(2)  K AA1 T - L ER0\nCOTMAN  K AA1 T - M AH0 N\nCOTNER  K AA1 T - N ER0\nCOTNEY  K AA1 T - N IY0\nCOTNOIR  K AH0 T - N W AA1 R\nCOTO  K OW1 - T OW0\nCOTRET  K AA1 - T R AH0 T\nCOTRONE  K OW0 - T R OW1 - N IY0\nCOTRONEO  K OW0 - T R OW1 - N IY0 - OW0\nCOTS  K AA1 T S\nCOTT  K AA1 T\nCOTTA  K AA1 - T AH0\nCOTTAGE  K AA1 - T AH0 JH\nCOTTAGE(2)  K AA1 - T IH0 JH\nCOTTAGES  K AA1 - T IH0 - JH IH0 Z\nCOTTAM  K AA1 - T AH0 M\nCOTTEE  K OW0 - T IY1\nCOTTEN  K AA1 - T AH0 N\nCOTTER  K AA1 - T ER0\nCOTTERILL  K AA1 - T ER0 - IH0 L\nCOTTERMAN  K AA1 - T ER0 - M AH0 N\nCOTTIER  K AA1 - T IY0 - ER0\nCOTTINGHAM  K AA1 - T IH0 NG - HH AE2 M\nCOTTLE  K AA1 - T AH0 L\nCOTTMAN  K AA1 T - M AH0 N\nCOTTO  K OW1 - T OW0\nCOTTOM  K AA1 - T AH0 M\nCOTTON  K AA1 - T AH0 N\nCOTTON'S  K AA1 - T AH0 N Z\nCOTTON(2)  K AO1 - T AH0 N\nCOTTONE  K OW0 - T OW1 - N IY0\nCOTTONED  K AA1 - T AH0 N D\nCOTTONGIN  K AH0 - T AA1 NG - JH IH0 N\nCOTTONMOUTH  K AA1 - T AH0 N - M AW2 TH\nCOTTONS  K AA1 - T AH0 N Z\nCOTTONSEED  K AA1 - T AH0 N - S IY2 D\nCOTTONWOOD  K AA1 - T AH0 N - W UH2 D\nCOTTONWOODS  K AA1 - T AH0 N - W UH2 D Z\nCOTTRELL  K AA2 - T R EH1 L\nCOTTRILL  K AA1 - T R AH0 L\nCOTTY  K AA1 - T IY0\nCOTUGNO  K OW0 - T UW1 G - N OW0\nCOTY  K OW1 - T IY0\nCOU  K UW1\nCOUCH  K AW1 CH\nCOUCHED  K AW1 CH T\nCOUCHES  K AW1 - CH IH0 Z\nCOUCHMAN  K UW0 SH - M AE1 N\nCOUDERSPORT  K AW1 - D ER0 Z - P AO2 R T\nCOUDERT  K UW1 - D ER0 T\nCOUEY  K UW0 - IY1\nCOUFAL  K UW0 - F AE1 L\nCOUGAR  K UW1 - G ER0\nCOUGARS  K UW1 - G ER0 Z\nCOUGH  K AA1 F\nCOUGH(2)  K AO1 F\nCOUGHED  K AO1 F T\nCOUGHENOUR  K AO0 - F EH1 - N ER0\nCOUGHING  K AA1 - F IH0 NG\nCOUGHING(2)  K AO1 - F IH0 NG\nCOUGHLAN  K AO1 G - L AH0 N\nCOUGHLIN  K AO1 G - L IH0 N\nCOUGHRAN  K AO1 - G R AH0 N\nCOUGHS  K AO1 F S\nCOUILLARD  K W IY0 - L AA1 R D\nCOULD  K UH1 D\nCOULD'VE  K UH0 - D AH0 V\nCOULDN'T  K UH1 - D AH0 N T\nCOULDN'T(2)  K UH1 - D AH0 N\nCOULEE  K UW1 - L IY0\nCOULL  K AW1 L\nCOULOMBE  K AW0 - L OW1 M - B IY0\nCOULON  K AW1 - L AH0 N\nCOULSON  K AW1 L - S AH0 N\nCOULSTON  K AW1 L - S T AH0 N\nCOULTAS  K UW0 L - T AA1 Z\nCOULTER  K OW1 L - T ER0\nCOULTHARD  K UW0 L - TH AA1 R D\nCOUNCE  K AW1 N S\nCOUNCIL  K AW1 N - S AH0 L\nCOUNCIL'S  K AW1 N - S AH0 L Z\nCOUNCILMAN  K AW1 N - S AH0 L - M AH0 N\nCOUNCILMEN  K AW1 N - S AH0 L - M EH1 N\nCOUNCILOR  K AW1 N - S AH0 L - ER0\nCOUNCILOR(2)  K AW1 N - S L ER0\nCOUNCILORS  K AW1 N - S AH0 L - ER0 Z\nCOUNCILORS(2)  K AW1 N - S L ER0 Z\nCOUNCILS  K AW1 N - S AH0 L Z\nCOUNCILWOMAN  K AW1 N - S AH0 L - W UH2 - M AH0 N\nCOUNCILWOMEN  K AW1 N - S AH0 L - W IH2 - M AH0 N\nCOUNIHAN  K AW1 - N IH0 - HH AE0 N\nCOUNSEL  K AW1 N - S AH0 L\nCOUNSEL'S  K AW1 N - S AH0 L Z\nCOUNSELED  K AW1 N - S AH0 L D\nCOUNSELING  K AW1 N - S AH0 L - IH0 NG\nCOUNSELING(2)  K AW1 N - S L IH0 NG\nCOUNSELL  K AW1 N - S AH0 L\nCOUNSELLOR  K AW1 N - S AH0 L - ER0\nCOUNSELLOR(2)  K AW1 N - S L ER0\nCOUNSELLORS  K AW1 N - S AH0 L - ER0 Z\nCOUNSELLORS(2)  K AW1 N - S L ER0 Z\nCOUNSELMAN  K AW1 N - S AH0 L - M AH0 N\nCOUNSELOR  K AW1 N - S AH0 L - ER0\nCOUNSELORS  K AW1 N - S AH0 L - ER0 Z\nCOUNSELS  K AW1 N - S AH0 L Z\nCOUNT  K AW1 N T\nCOUNTABLE  K AW1 N - T AH0 - B AH0 L\nCOUNTDOWN  K AW1 N T - D AW2 N\nCOUNTDOWNS  K AW1 N T - D AW2 N Z\nCOUNTED  K AW1 N - T AH0 D\nCOUNTED(2)  K AW1 N - T IH0 D\nCOUNTED(3)  K AW1 - N IH0 D\nCOUNTED(4)  K AW1 - N AH0 D\nCOUNTENANCE  K AW1 N - T AH0 - N AH0 N S\nCOUNTENANCED  K AW1 N - T AH0 - N AH0 N S T\nCOUNTENANCES  K AW1 N - T AH0 - N AH0 N - S IH0 Z\nCOUNTER  K AW1 N - T ER0\nCOUNTERACT  K AW1 N - T ER0 - AE2 K T\nCOUNTERACTED  K AW1 N - T ER0 - AE2 K - T IH0 D\nCOUNTERACTING  K AW2 N - T ER0 - AE1 K - T IH0 NG\nCOUNTERATTACK  K AW1 N - T ER0 - AH0 - T AE2 K\nCOUNTERATTACK(2)  K AW1 - N ER0 - AH0 - T AE2 K\nCOUNTERATTACKED  K AW2 N - T ER0 - AH0 - T AE1 K T\nCOUNTERATTACKED(2)  K AW2 - N ER0 - AH0 - T AE1 K T\nCOUNTERATTACKS  K AW1 N - T ER0 - AH0 - T AE2 K S\nCOUNTERATTACKS(2)  K AW1 - N ER0 - AH0 - T AE2 K S\nCOUNTERBALANCE  K AW1 N - T ER0 - B AE2 - L AH0 N S\nCOUNTERBALANCE(2)  K AW1 - N ER0 - B AE2 - L AH0 N S\nCOUNTERBALANCED  K AW2 N - T ER0 - B AE1 - L AH0 N S T\nCOUNTERBALANCED(2)  K AW2 - N ER0 - B AE1 - L AH0 N S T\nCOUNTERBID  K AW2 N - T ER0 - B IH1 D\nCOUNTERCHALLENGE  K AW1 N - T ER0 - CH AE2 - L AH0 N JH\nCOUNTERCHALLENGE(2)  K AW1 - N ER0 - CH AE2 - L AH0 N JH\nCOUNTERCHARGE  K AW1 N - T ER0 - CH AA2 R JH\nCOUNTERCHARGE(2)  K AW1 - N ER0 - CH AA2 R JH\nCOUNTERCHARGES  K AW1 N - T ER0 - CH AA2 R - JH IH0 Z\nCOUNTERCHARGES(2)  K AW1 - N ER0 - CH AA2 R - JH IH0 Z\nCOUNTERCLAIM  K AW1 N - T ER0 - K L EY2 M\nCOUNTERCLAIMS  K AW1 N - T ER0 - K L EY2 M Z\nCOUNTERCLOCKWISE  K AW2 N - T ER0 - K L AO1 - K W AY0 Z\nCOUNTERCLOCKWISE(2)  K AW2 - N ER0 - K L AO1 - K W AY0 Z\nCOUNTERCULTURAL  K AW2 N - T ER0 - K AH1 L - CH ER0 - AH0 L\nCOUNTERCULTURAL(2)  K AW2 - N ER0 - K AH1 L - CH ER0 - AH0 L\nCOUNTERCULTURE  K AW1 N - T ER0 - K AH2 L - CH ER0\nCOUNTERCULTURE(2)  K AW1 - N ER0 - K AH2 L - CH ER0\nCOUNTERED  K AW1 N - T ER0 D\nCOUNTERED(2)  K AW1 - N ER0 D\nCOUNTERESPIONAGE  K AW2 N - T ER0 - EH1 - S P IY0 - AH0 - N AA0 JH\nCOUNTERESPIONAGE(2)  K AW2 - N ER0 - EH1 S - P IY0 - AH0 - N AA0 JH\nCOUNTERFEIT  K AW1 N - T ER0 - F IH2 T\nCOUNTERFEIT(2)  K AW1 - N ER0 - F IH2 T\nCOUNTERFEITED  K AW1 N - T ER0 - F IH2 - T IH0 D\nCOUNTERFEITED(2)  K AW1 - N ER0 - F IH2 - T IH0 D\nCOUNTERFEITER  K AW1 N - T ER0 - F IH2 - T ER0\nCOUNTERFEITER(2)  K AW1 - N ER0 - F IH2 - T ER0\nCOUNTERFEITERS  K AW1 N - T ER0 - F IH2 - T ER0 Z\nCOUNTERFEITERS(2)  K AW1 - N ER0 - F IH2 - T ER0 Z\nCOUNTERFEITING  K AW1 N - T ER0 - F IH2 - T IH0 NG\nCOUNTERFEITING(2)  K AW1 - N ER0 - F IH2 - T IH0 NG\nCOUNTERFEITS  K AW1 N - T ER0 - F IH2 T S\nCOUNTERFEITS(2)  K AW1 - N ER0 - F IH2 T S\nCOUNTERFORCE  K AW1 N - T ER0 - F AO2 R S\nCOUNTERING  K AW1 N - T ER0 - IH0 NG\nCOUNTERING(2)  K AW1 - N ER0 - IH0 NG\nCOUNTERINSURGENCY  K AW2 N - T ER0 - IH0 N - S ER1 - JH AH0 N - S IY0\nCOUNTERINSURGENCY(2)  K AW2 - N ER0 - IH0 N - S ER1 - JH AH0 N - S IY0\nCOUNTERINTELLIGENCE  K AW2 N - T ER0 - IH0 N - T EH1 - L IH0 - JH AH0 N S\nCOUNTERINTELLIGENCE(2)  K AW2 - N ER0 - IH0 N - T EH1 - L IH0 - JH AH0 N S\nCOUNTERLIFE  K AW1 N - T ER0 - L AY2 F\nCOUNTERMAN  K AW1 N - T ER0 - M AE2 N\nCOUNTERMEASURE  K AW1 N - T ER0 - M EH2 - ZH ER0\nCOUNTERMEASURE(2)  K AW1 - N ER0 - M EH2 - ZH ER0\nCOUNTERMEASURES  K AW1 N - T ER0 - M EH2 - ZH ER0 Z\nCOUNTERMEASURES(2)  K AW1 - N ER0 - M EH2 - ZH ER0 Z\nCOUNTERMOVE  K AW1 N - T ER0 - M UW2 V\nCOUNTERMOVES  K AW1 N - T ER0 - M UW2 V Z\nCOUNTEROFFENSIVE  K AW2 N - T ER0 - AO0 - F EH1 N - S IH0 V\nCOUNTEROFFENSIVE(2)  K AW2 - N ER0 - AO0 - F EH1 N - S IH0 V\nCOUNTEROFFER  K AW1 N - T ER0 - AO2 - F ER0\nCOUNTEROFFER(2)  K AW1 - N ER0 - AO2 - F ER0\nCOUNTEROFFERS  K AW1 N - T ER0 - AO2 - F ER0 Z\nCOUNTEROFFERS(2)  K AW1 - N ER0 - AO2 - F ER0 Z\nCOUNTERPART  K AW1 N - T ER0 - P AA2 R T\nCOUNTERPART(2)  K AW1 - N ER0 - P AA2 R T\nCOUNTERPARTS  K AW1 N - T ER0 - P AA2 R T S\nCOUNTERPARTS(2)  K AW1 - N ER0 - P AA2 R T S\nCOUNTERPARTY  K AW1 N - T ER0 - P AA2 R - T IY0\nCOUNTERPOINT  K AW1 N - T ER0 - P OY2 N T\nCOUNTERPOINT(2)  K AW1 - N ER0 - P OY2 N T\nCOUNTERPRODUCTIVE  K AW1 N - T ER0 - P R AH0 - D AH2 K - T IH0 V\nCOUNTERPRODUCTIVE(2)  K AW1 - N ER0 - P R AH0 - D AH2 K - T IH0 V\nCOUNTERPROPOSAL  K AW1 N - T ER0 - P R AH0 - P OW2 - Z AH0 L\nCOUNTERPROPOSAL(2)  K AW1 - N ER0 - P R AH0 - P OW2 - Z AH0 L\nCOUNTERPROPOSALS  K AW1 N - T ER0 - P R AH0 - P OW2 - Z AH0 L Z\nCOUNTERPROPOSALS(2)  K AW1 - N ER0 - P R AH0 - P OW2 - Z AH0 L Z\nCOUNTERPUNCH  K AW1 N - T ER0 - P AH2 N CH\nCOUNTERREVOLT  K AW1 N - T ER0 - R IY0 - V OW2 L T\nCOUNTERREVOLT(2)  K AW1 - N ER0 - R IY0 - V OW2 L T\nCOUNTERREVOLUTION  K AW2 N - T ER0 - R EH0 - V AH0 - L UW1 - SH AH0 N\nCOUNTERREVOLUTION(2)  K AW2 - N ER0 - R EH0 - V AH0 - L UW1 - SH AH0 N\nCOUNTERREVOLUTIONARY  K AW2 N - T ER0 - R EH0 - V AH0 - L UW1 - SH AH0 N - EH2 - R IY0\nCOUNTERREVOLUTIONARY(2)  K AW2 - N ER0 - R EH0 - V AH0 - L UW1 - SH AH0 N - EH2 - R IY0\nCOUNTERS  K AW1 N - T ER0 Z\nCOUNTERSUE  K AW1 N - T ER0 - S UW2\nCOUNTERSUE(2)  K AW1 - N ER0 - S UW2\nCOUNTERSUED  K AW1 N - T ER0 - S UW2 D\nCOUNTERSUED(2)  K AW1 - N ER0 - S UW2 D\nCOUNTERSUIT  K AW1 N - T ER0 - S UW2 T\nCOUNTERSUIT(2)  K AW1 - N ER0 - S UW2 T\nCOUNTERTENOR  K AW1 N - T ER0 - T EH2 - N ER0\nCOUNTERTERRORISM  K AW1 N - T ER0 - T EH2 - R ER0 - IH2 - Z AH0 M\nCOUNTERTERRORISM(2)  K AW1 - N ER0 - T EH2 - R ER0 - IH2 - Z AH0 M\nCOUNTERTERRORIST  K AW2 N - T ER0 - T EH1 - R ER0 - IH0 S T\nCOUNTERTERRORIST(2)  K AW2 - N ER0 - T EH1 - R ER0 - IH0 S T\nCOUNTERTOP  K AW1 N - T ER0 - T AA2 P\nCOUNTERTOP(2)  K AW1 - N ER0 - T AA2 P\nCOUNTERTRADE  K AW1 N - T ER0 - T R EY2 D\nCOUNTERVAILING  K AW1 N - T ER0 - V EY2 - L IH0 NG\nCOUNTERWEIGHT  K AW1 N - T ER0 - W EY2 T\nCOUNTESS  K AW1 N - T AH0 S\nCOUNTIES  K AW1 N - T IY0 Z\nCOUNTIES(2)  K AW1 - N IY0 Z\nCOUNTING  K AW1 N - T IH0 NG\nCOUNTING(2)  K AW1 - N IH0 NG\nCOUNTLESS  K AW1 N T - L AH0 S\nCOUNTRIES  K AH1 N - T R IY0 Z\nCOUNTRIES'  K AH1 N - T R IY0 Z\nCOUNTRY  K AH1 N - T R IY0\nCOUNTRY'S  K AH1 N - T R IY0 Z\nCOUNTRYFOLK  K AH1 N - T R IY0 - F OW2 K\nCOUNTRYMAN  K AH1 N - T R IY0 - M AH0 N\nCOUNTRYMEN  K AH1 N - T R IY0 - M IH0 N\nCOUNTRYSIDE  K AH1 N - T R IY0 - S AY2 D\nCOUNTRYWIDE  K AH1 N - T R IY0 - W AY2 D\nCOUNTS  K AW1 N T S\nCOUNTY  K AW1 N - T IY0\nCOUNTY'S  K AW1 N - T IY0 Z\nCOUNTY'S(2)  K AW1 - N IY0 Z\nCOUNTY(2)  K AW1 - N IY0\nCOUP  K UW1\nCOUPE  K UW1 P\nCOUPER  K UW1 - ER0\nCOUPES  K UW1 P S\nCOUPLAND  K UW1 P - L AH0 N D\nCOUPLE  K AH1 - P AH0 L\nCOUPLE'S  K AH1 - P AH0 L Z\nCOUPLED  K AH1 - P AH0 L D\nCOUPLER  K AH1 P - L ER0\nCOUPLERS  K AH1 P - L ER0 Z\nCOUPLES  K AH1 - P AH0 L Z\nCOUPLEY  K AH1 P - L IY0\nCOUPLING  K AH1 - P L IH0 NG\nCOUPLINGS  K AH1 P - L IH0 NG Z\nCOUPON  K UW1 - P AO2 N\nCOUPON(2)  K Y UW1 - P AO2 N\nCOUPONING  K UW1 - P AA0 - N IH0 NG\nCOUPONING(2)  K Y UW1 - P AA0 - N IH0 NG\nCOUPONITE  K UW1 - P AA0 - N AY0 T\nCOUPONITE(2)  K Y UW1 - P AA0 - N AY0 T\nCOUPONITES  K UW1 - P AA0 - N AY0 T S\nCOUPONITES(2)  K Y UW1 - P AA0 - N AY0 T S\nCOUPONS  K UW1 - P AO2 N Z\nCOUPONS(2)  K Y UW1 - P AO2 N Z\nCOUPS  K UW1 Z\nCOUPS(2)  K UW1\nCOURAGE  K ER1 - AH0 JH\nCOURAGE(2)  K ER1 - IH0 JH\nCOURAGEOUS  K ER0 - EY1 - JH AH0 S\nCOURAGEOUSLY  K ER0 - EY1 - JH AH0 S - L IY0\nCOURANT  K UH1 - R AH0 N T\nCOURCHAINE  K UH0 R - SH EY1 N\nCOURCHESNE  K UH0 R - SH EH1 N\nCOURIC  K AO1 - R IH0 K\nCOURIER  K ER1 - IY0 - ER0\nCOURIER'S  K ER1 - IY0 - ER0 Z\nCOURIERS  K ER1 - IY0 - ER0 Z\nCOURINGTON  K AO1 - R IH0 NG - T AH0 N\nCOURNOYER  K AO1 R - N OY0 - ER0\nCOURSE  K AO1 R S\nCOURSE'S  K AO1 R - S IH0 Z\nCOURSEN  K AO1 R - S AH0 N\nCOURSER  K AO1 R - S ER0\nCOURSES  K AO1 R - S AH0 Z\nCOURSES(2)  K AO1 R - S IH0 Z\nCOURSEY  K AO1 R - S IY0\nCOURSING  K AO1 R - S IH0 NG\nCOURSON  K AO1 R - S AH0 N\nCOURT  K AO1 R T\nCOURT'S  K AO1 R T S\nCOURTADE  K AO1 R - T EY0 D\nCOURTAULDS  K AO1 R - T AO2 L D Z\nCOURTEAU  K ER1 - T OW0\nCOURTED  K AO1 R - T IH0 D\nCOURTEMANCHE  K AO2 R T - M AE1 N SH\nCOURTEMANCHE(2)  K AO2 R T - M AA1 N SH\nCOURTENAY  K ER1 - T AH0 - N EY0\nCOURTENAY(2)  K AO1 R T - N EY0\nCOURTEOUS  K ER1 - T IY0 - AH0 S\nCOURTER  K AO1 R - T ER0\nCOURTER'S  K AO1 R - T ER0 Z\nCOURTESIES  K ER1 - T AH0 - S IY0 Z\nCOURTESY  K ER1 - T AH0 - S IY0\nCOURTHOUSE  K AO1 R T - HH AW2 S\nCOURTHOUSES  K AO1 R T - HH AW2 - S IH0 Z\nCOURTIER  K AO1 R - T IY0 - ER0\nCOURTIERS  K AO1 R - T IY0 - ER0 Z\nCOURTING  K AO1 R - T IH0 NG\nCOURTIS  K AO1 R - T IH0 S\nCOURTLAND  K AO1 R T - L AE0 N D\nCOURTLY  K AO1 R T - L IY0\nCOURTNEY  K AO1 R T - N IY0\nCOURTOIS  K AO1 R T - W AA0\nCOURTRIGHT  K AO1 R T - R AY2 T\nCOURTROOM  K AO1 R T - R UW2 M\nCOURTROOMS  K AO1 R T - R UW2 M Z\nCOURTS  K AO1 R T S\nCOURTS'  K AO1 R T S\nCOURTSHIP  K AO1 R - CH IH2 P\nCOURTWRIGHT  K AO1 R T - R AY2 T\nCOURTYARD  K AO1 R T - Y AA2 R D\nCOURTYARDS  K AO1 R T - Y AA2 R D Z\nCOURVILLE  K UH0 R - V IH1 L\nCOURY  K AO1 - R IY0\nCOUSAR  K UW0 - S AA1 R\nCOUSE  K AW1 S\nCOUSENS  K UW1 - S AH0 N Z\nCOUSENS(2)  K AW1 - S AH0 N Z\nCOUSER  K AW1 - S ER0\nCOUSIN  K AH1 - Z AH0 N\nCOUSIN'S  K AH1 - Z AH0 N Z\nCOUSINEAU  K UW1 - S IH0 - N OW2\nCOUSINO  K AW0 - S IY1 - N OW0\nCOUSINS  K AH1 - Z AH0 N Z\nCOUSTEAU  K UW2 - S T OW1\nCOUSY  K UW1 - Z IY0\nCOUTANT  K UW0 - T AO1 N T\nCOUTEE  K UW0 - T IY1\nCOUTO  K AW1 - T OW0\nCOUTS  K AW1 T S\nCOUTTS  K AW1 T S\nCOUTU  K UW0 - CH UW1\nCOUTURE  K UW0 - T UH1 R\nCOUTURIER  K UW0 - T UH1 - R IY0 - ER0\nCOUVILLION  K UW0 - V IY0 - L Y AO1 N\nCOUVILLON  K UW0 - V IY0 - L AO1 N\nCOUZENS  K UW1 - Z AH0 N Z\nCOVAL  K OW0 - V EY0 - AE1 L\nCOVALT  K OW1 - V AA0 L T\nCOVARRUBIAS  K OW0 - V AA0 - R UW0 - B IY1 - AH0 Z\nCOVAS  K OW1 - V AH0 S\nCOVATTA  K OW0 - V AA1 - T AH0\nCOVAULT  K OW1 - V AO1 L T\nCOVE  K OW1 V\nCOVEL  K OW1 - V AH0 L\nCOVELL  K AA1 - V AH0 L\nCOVELLI  K OW2 - V EH1 - L IY0\nCOVELLO  K OW2 - V EH1 - L OW0\nCOVEN  K AH1 - V AH0 N\nCOVEN(2)  K OW1 - V AH0 N\nCOVENANT  K AH1 - V AH0 - N AH0 N T\nCOVENANTER  K AH1 - V AH0 - N AH0 N - T ER0\nCOVENANTERS  K AH1 - V AH0 - N AH0 N - T ER0 Z\nCOVENANTS  K AH1 - V AH0 - N AH0 N T S\nCOVENEY  K AA1 - V IH0 - N IY0\nCOVENT  K AH1 - V AH0 N T\nCOVENTRY  K AH1 - V AH0 N - T R IY0\nCOVER  K AH1 - V ER0\nCOVERAGE  K AH1 - V ER0 - AH0 JH\nCOVERAGE(2)  K AH1 - V ER0 - IH0 JH\nCOVERAGE(3)  K AH1 - V R IH0 JH\nCOVERAGES  K AH1 - V ER0 - AH0 - JH IH0 Z\nCOVERAGES(2)  K AH1 - V ER0 - IH0 - JH IH0 Z\nCOVERAGES(3)  K AH1 - V R IH0 - JH IH0 Z\nCOVERALL  K AH1 - V ER0 - AO2 L\nCOVERALLS  K AH1 - V ER0 - AO2 L Z\nCOVERDALE  K AH1 - V ER0 - D EY2 L\nCOVERDELL  K AH1 - V ER0 - D EH2 L\nCOVERED  K AH1 - V ER0 D\nCOVERING  K AH1 - V ER0 - IH0 NG\nCOVERING(2)  K AH1 - V R IH0 NG\nCOVERINGS  K AH1 - V ER0 - IH0 NG Z\nCOVERS  K AH1 - V ER0 Z\nCOVERSTONE  K AH1 - V ER0 - S T OW2 N\nCOVERT  K OW1 - V ER0 T\nCOVERTLY  K AH1 - V ER0 T - L IY0\nCOVERUP  K AH1 - V ER0 - AH2 P\nCOVERUPS  K AH1 - V ER0 - AH2 P S\nCOVES  K OW1 V Z\nCOVET  K AH1 - V AH0 T\nCOVETED  K AH1 - V AH0 - T IH0 D\nCOVETS  K AH1 - V AH0 T S\nCOVEY  K AH1 - V IY0\nCOVIA  K OW1 - V IY0 - AH0\nCOVIELLO  K OW2 - V IY0 - EH1 - L OW0\nCOVILL  K AA1 - V AH0 L\nCOVILLE  K OW1 - V IH2 L\nCOVIN  K OW1 - V IH0 N\nCOVINA  K OW0 - V IY1 - N AH0\nCOVINGTON  K AH1 - V IH0 NG - T AH0 N\nCOVINO  K OW0 - V IY1 - N OW0\nCOVITZ  K OW1 - V IH0 T S\nCOVY  K AH1 - V IY0\nCOW  K AW1\nCOW'S  K AW1 Z\nCOWAN  K AW1 - AH0 N\nCOWANS  K AW1 - AH0 N Z\nCOWARD  K AW1 - ER0 D\nCOWARD'S  K AW1 - ER0 D Z\nCOWARDICE  K AW1 - ER0 - D AH0 S\nCOWARDLY  K AW1 - ER0 D - L IY0\nCOWARDS  K AW1 - ER0 D Z\nCOWART  K AW1 - AA0 R T\nCOWBELL  K AW1 - B EH2 L\nCOWBELLS  K AW1 - B EH2 L Z\nCOWBOY  K AW1 - B OY2\nCOWBOY'S  K AW1 - B OY2 Z\nCOWBOYS  K AW1 - B OY2 Z\nCOWBOYS'  K AW1 - B OY2 Z\nCOWDEN  K AW1 - D AH0 N\nCOWDERY  K AW1 - D ER0 - IY0\nCOWDREY  K AW1 - D R IY0\nCOWED  K AW1 D\nCOWEDA  K AH0 - W IY1 - D AH0\nCOWELL  K AA1 - W EH0 L\nCOWEN  K AW1 - AH0 N\nCOWEN(2)  K OW1 - AH0 N\nCOWENS  K AW1 - AH0 N Z\nCOWENS(2)  K OW1 - AH0 N Z\nCOWER  K AW1 - ER0\nCOWERING  K AW1 - ER0 - IH0 NG\nCOWGER  K AW1 - JH ER0\nCOWGILL  K AW1 - G IH2 L\nCOWGIRL  K AW1 - G ER2 L\nCOWGIRLS  K AW1 - G ER2 L Z\nCOWHER  K AA1 - W ER0\nCOWHERD  K AW1 - HH ER2 D\nCOWIE  K AW1 - IY0\nCOWIN  K AW1 - IH0 N\nCOWING  K AW1 - IH0 NG\nCOWL  K AW1 L\nCOWLES  K AW1 - AH0 L Z\nCOWLEY  K AW1 - L IY0\nCOWLING  K AW1 - L IH0 NG\nCOWLING'S  K AW1 - L IH0 NG Z\nCOWLINGS  K AW1 - L IH0 NG Z\nCOWLINGS'  K AW1 - L IH0 NG Z\nCOWLINGS'S  K AW1 - L IH0 NG - Z IH0 Z\nCOWMAN  K AW1 - M AH0 N\nCOWORKER  K OW1 - W ER1 - K ER0\nCOWORKERS  K OW1 - W ER1 - K ER0 Z\nCOWPER  K AW1 - P ER0\nCOWPER(2)  K UW1 - P ER0\nCOWPERTHWAITE  K AW1 - P ER0 TH - W EY2 T\nCOWRIES  K AW1 - R IY0 Z\nCOWS  K AW1 Z\nCOWSER  K AW1 - Z ER0\nCOWSERT  K AW1 - S ER0 T\nCOWSLIP  K AW1 S - L IH0 P\nCOX  K AA1 K S\nCOX'S  K AA1 K - S IH0 Z\nCOXE  K AA1 K S\nCOXEN  K AA1 K - S AH0 N\nCOXON  K AA1 K - S AH0 N\nCOXWELL  K AA1 K - S W EH2 L\nCOY  K OY1\nCOYE  K OY1\nCOYER  K OY1 - ER0\nCOYKENDALL  K OY0 - K EH1 N - D AH0 L\nCOYLE  K OY1 L\nCOYLY  K OY1 - L IY0\nCOYM  K OY1 M\nCOYNE  K OY1 N\nCOYNER  K OY1 - N ER0\nCOYOTE  K AY0 - OW1 - T IY0\nCOYOTE(2)  K AY1 - OW0 T\nCOYOTES  K AY0 - OW1 - T IY0 S\nCOYOTES(2)  K AY1 - OW0 T S\nCOZ  K AA1 Z\nCOZAD  K OW1 - Z AH0 D\nCOZART  K AA1 - Z AA0 R T\nCOZBY  K AA1 Z - B IY0\nCOZIER  K OW1 - Z IY0 - ER0\nCOZINE  K OW0 - Z IY1 - N IY0\nCOZINESS  K OW1 - Z IY0 - N AH0 S\nCOZMAN  K OW1 Z - M AH0 N\nCOZY  K OW1 - Z IY0\nCOZYING  K OW1 - Z IY0 - IH0 NG\nCOZZA  K OW1 T - S AH0\nCOZZENS  K AA1 - Z AH0 N Z\nCOZZI  K OW1 T - S IY0\nCOZZOLINO  K OW0 T - S OW0 - L IY1 - N OW0\nCRAB  K R AE1 B\nCRABB  K R AE1 B\nCRABBE  K R AE1 B\nCRABBED  K R AE1 B D\nCRABBS  K R AE1 B Z\nCRABBY  K R AE1 - B IY0\nCRABEATER  K R AE1 - B IY2 - T ER0\nCRABILL  K R AE1 - B AH0 L\nCRABLE  K R EY1 - B AH0 L\nCRABMEAT  K R AE1 B - M IY2 T\nCRABS  K R AE1 B Z\nCRABTREE  K R AE1 B - T R IY2\nCRACCHIOLO  K R AA0 - K IY0 - OW1 - L OW0\nCRACE  K R EY1 S\nCRACK  K R AE1 K\nCRACKDOWN  K R AE1 K - D AW2 N\nCRACKDOWNS  K R AE1 K - D AW2 N Z\nCRACKED  K R AE1 K T\nCRACKEL  K R AE1 - K AH0 L\nCRACKER  K R AE1 - K ER0\nCRACKERJACK  K R AE1 - K ER0 - JH AE2 K\nCRACKERS  K R AE1 - K ER0 Z\nCRACKING  K R AE1 - K IH0 NG\nCRACKLE  K R AE1 - K AH0 L\nCRACKLED  K R AE1 - K AH0 L D\nCRACKLES  K R AE1 - K AH0 L Z\nCRACKLING  K R AE1 - K L IH0 NG\nCRACKPOT  K R AE1 K - P AA2 T\nCRACKPOTS  K R AE1 K - P AA2 T S\nCRACKS  K R AE1 K S\nCRACRAFT  K R AA1 - K R AE0 F T\nCRADDOCK  K R AE1 - D AH0 K\nCRADER  K R EY1 - D ER0\nCRADIC  K R AE1 - D IH0 K\nCRADLE  K R EY1 - D AH0 L\nCRADLES  K R EY1 - D AH0 L Z\nCRADLING  K R EY1 - D AH0 L - IH0 NG\nCRADLING(2)  K R EY1 D - L IH0 NG\nCRADOCK  K R AE1 - D AH0 K\nCRADY  K R EY1 - D IY0\nCRAFT  K R AE1 F T\nCRAFT'S  K R AE1 F T S\nCRAFTED  K R AE1 F - T IH0 D\nCRAFTING  K R AE1 F - T IH0 NG\nCRAFTON  K R AE1 F - T AH0 N\nCRAFTS  K R AE1 F T S\nCRAFTS(2)  K R AE1 F S\nCRAFTSMAN  K R AE1 F T S - M AH0 N\nCRAFTSMAN(2)  K R AE1 F S - M AH0 N\nCRAFTSMANSHIP  K R AE1 F T S - M AH0 N - SH IH2 P\nCRAFTSMANSHIP(2)  K R AE1 F S - M AH0 N - SH IH2 P\nCRAFTSMEN  K R AE1 F T S - M EH0 N\nCRAFTSMEN(2)  K R AE1 F S - M EH0 N\nCRAFTSPEOPLE  K R AE1 F T - S P IY2 - P AH0 L\nCRAFTSPEOPLE(2)  K R AE1 F - S P IY2 - P AH0 L\nCRAFTY  K R AE1 F - T IY0\nCRAGER  K R EY1 - JH ER0\nCRAGG  K R AE1 G\nCRAGGS  K R AE1 G Z\nCRAGGY  K R AE1 - G IY0\nCRAGHEAD  K R AE1 G - HH EH2 D\nCRAGIN  K R AE1 - JH IH0 N\nCRAGLE  K R EY1 - G AH0 L\nCRAGO  K R AA1 - G OW0\nCRAGUN  K R AE1 - G AH0 N\nCRAIB  K R EY1 B\nCRAIG  K R EY1 G\nCRAIG'S  K R EY1 G Z\nCRAIGHEAD  K R EY1 G - HH EH2 D\nCRAIGIE  K R EY1 - G IY0\nCRAIGO  K R EY1 - G OW0\nCRAIL  K R EY1 L\nCRAIN  K R EY1 N\nCRAIN'S  K R EY1 N Z\nCRAINE  K R EY1 N\nCRAKER  K R EY1 - K ER0\nCRALL  K R AO1 L\nCRAM  K R AE1 M\nCRAMBLIT  K R AE1 M - B L IH0 T\nCRAMER  K R EY1 - M ER0\nCRAMER'S  K R EY1 - M ER0 Z\nCRAMES  K R EY1 M Z\nCRAMMED  K R AE1 M D\nCRAMMER  K R AE1 - M ER0\nCRAMMING  K R AE1 - M IH0 NG\nCRAMP  K R AE1 M P\nCRAMPED  K R AE1 M P T\nCRAMPING  K R AE1 M - P IH0 NG\nCRAMPS  K R AE1 M P S\nCRAMPTON  K R AE1 M P - T AH0 N\nCRAMS  K R AE1 M Z\nCRAMTON  K R AE1 M - T AH0 N\nCRANBERRIES  K R AE1 N - B EH2 - R IY0 Z\nCRANBERRY  K R AE1 N - B EH2 - R IY0\nCRANCE  K R AE1 N S\nCRANDALL  K R AE1 N - D AH0 L\nCRANDALL'S  K R AE1 N - D AH0 L Z\nCRANDELL  K R AE1 N - D AH0 L\nCRANE  K R EY1 N\nCRANE'S  K R EY1 N Z\nCRANED  K R EY1 N D\nCRANER  K R EY1 - N ER0\nCRANES  K R EY1 N Z\nCRANESBILL  K R EY1 N Z - B IH2 L\nCRANESBILLS  K R EY1 N Z - B IH2 L Z\nCRANEY  K R EY1 - N IY0\nCRANFIELD  K R AE1 N - F IY2 L D\nCRANFILL  K R AE1 N - F AH0 L\nCRANFORD  K R AE1 N - F ER0 D\nCRANK  K R AE1 NG K\nCRANKED  K R AE1 NG K T\nCRANKING  K R AE1 NG - K IH0 NG\nCRANKS  K R AE1 NG K S\nCRANKSHAFT  K R AE1 NG K - SH AE2 F T\nCRANKSHAFTS  K R AE1 NG K - SH AE2 F T S\nCRANKY  K R AE1 NG - K IY0\nCRANLEY  K R AE1 N - L IY0\nCRANMER  K R AE1 N - M ER0\nCRANMORE  K R AA1 N - M AO0 R\nCRANNELL  K R AE1 - N AH0 L\nCRANNEY  K R AE1 - N IY0\nCRANNIES  K R AE1 - N IY0 Z\nCRANNY  K R AE1 - N IY0\nCRANOR  K R EY1 - N ER0\nCRANS  K R AE1 N Z\nCRANSHAW  K R AE1 N - SH AO2\nCRANSTON  K R AE1 N - S T AH0 N\nCRANSTON'S  K R AE1 N - S T AH0 N Z\nCRAP  K R AE1 P\nCRAPO  K R AA1 - P OW0\nCRAPPIE  K R AE1 - P IY0\nCRAPPS  K R AE1 P S\nCRAPS  K R AE1 P S\nCRAPSER  K R AE1 P - S ER0\nCRAPSHOOT  K R AE1 P - SH UW2 T\nCRARY  K ER1 - EH0 - R IY0\nCRASE  K R EY1 Z\nCRASH  K R AE1 SH\nCRASH'S  K R AE1 - SH IH0 Z\nCRASHED  K R AE1 SH T\nCRASHES  K R AE1 - SH IH0 Z\nCRASHING  K R AE1 - SH IH0 NG\nCRASNER  K R AE1 Z - N ER0\nCRASNIANSKI  K R AE2 S - N IY0 - AE1 N S - K IY0\nCRASS  K R AE1 S\nCRASSWELLER  K R AE1 S - W EH2 - L ER0\nCRASSWELLER'S  K R AE1 S - W EH2 - L ER0 Z\nCRATE  K R EY1 T\nCRATER  K R EY1 - T ER0\nCRATERED  K R EY1 - T ER0 D\nCRATERS  K R EY1 - T ER0 Z\nCRATES  K R EY1 T S\nCRATING  K R EY1 - T IH0 NG\nCRATON  K R AE1 - T AH0 N\nCRATTY  K R AE1 - T IY0\nCRAUGH  K R AO1\nCRAUN  K R AO1 N\nCRAVATH  K R AE1 - V AH0 TH\nCRAVE  K R EY1 V\nCRAVED  K R EY1 V D\nCRAVEN  K R EY1 - V AH0 N\nCRAVEN'S  K R EY1 - V AH0 N Z\nCRAVENS  K R EY1 - V AH0 N Z\nCRAVER  K R EY1 - V ER0\nCRAVES  K R EY1 V Z\nCRAVEY  K R EY1 - V IY0\nCRAVIN  K R EY1 - V IH0 N\nCRAVING  K R EY1 - V IH0 NG\nCRAVINGS  K R EY1 - V IH0 NG Z\nCRAW  K R AO1\nCRAWFISH  K R AO1 - F IH2 SH\nCRAWFORD  K R AO1 - F ER0 D\nCRAWFORD'S  K R AO1 - F ER0 D Z\nCRAWFORDSVILLE  K R AO1 - F ER0 D Z - V IH2 L\nCRAWL  K R AO1 L\nCRAWLED  K R AO1 L D\nCRAWLEY  K R AO1 - L IY0\nCRAWLING  K R AO1 - L IH0 NG\nCRAWLS  K R AO1 L Z\nCRAWLY  K R AO1 - L IY0\nCRAWMER  K R AO1 - M ER0\nCRAWSHAW  K R AO1 - SH AO2\nCRAXI  K R AE1 K - S IY0\nCRAY  K R EY1\nCRAY'S  K R EY1 Z\nCRAYCRAFT  K R EY1 - K R AE2 F T\nCRAYFISH  K R EY1 - F IH0 SH\nCRAYNE  K R EY1 N\nCRAYON  K R EY1 - AA2 N\nCRAYONS  K R EY1 - AA2 N Z\nCRAYS  K R EY1 Z\nCRAYTON  K R EY1 - T AH0 N\nCRAZE  K R EY1 Z\nCRAZED  K R EY1 Z D\nCRAZIER  K R EY1 - Z IY0 - ER0\nCRAZIES  K R EY1 - Z IY0 Z\nCRAZIEST  K R EY1 - Z IY0 - AH0 S T\nCRAZILY  K R EY1 - Z AH0 - L IY0\nCRAZINESS  K R EY1 - Z IY0 - N AH0 S\nCRAZY  K R EY1 - Z IY0\nCREA  K R IY1\nCREACH  K R IY1 CH\nCREAGER  K R IY1 - IH0 - JH ER0\nCREAGH  K R IY1 G\nCREAK  K R IY1 K\nCREAKED  K R IY1 K T\nCREAKING  K R IY1 - K IH0 NG\nCREAKY  K R IY1 - K IY0\nCREAL  K R IY1 L\nCREAM  K R IY1 M\nCREAMED  K R IY1 M D\nCREAMER  K R IY1 - M ER0\nCREAMERY  K R IY1 - M ER0 - IY0\nCREAMIER  K R IY1 - M IY0 - ER0\nCREAMIEST  K R IY1 - M IY0 - IH0 S T\nCREAMS  K R IY1 M Z\nCREAMY  K R IY1 - M IY0\nCREAN  K R IY1 N\nCREAR  K R IH1 R\nCREASE  K R IY1 S\nCREASES  K R IY1 - S IH0 Z\nCREASEY  K R IY1 - S IY0\nCREASMAN  K R IY1 Z - M AH0 N\nCREASON  K R IY1 - S AH0 N\nCREASY  K R IY1 - S IY0\nCREATE  K R IY0 - EY1 T\nCREATE-A-BOOK  K R IY0 - EY2 - T AH0 - B UH1 K\nCREATED  K R IY0 - EY1 - T AH0 D\nCREATED(2)  K R IY0 - EY1 - T IH0 D\nCREATES  K R IY0 - EY1 T S\nCREATH  K R EH1 TH\nCREATING  K R IY0 - EY1 - T IH0 NG\nCREATION  K R IY0 - EY1 - SH AH0 N\nCREATIONISM  K R IY0 - EY1 - SH AH0 N - IH2 - Z AH0 M\nCREATIONS  K R IY0 - EY1 - SH AH0 N Z\nCREATIVE  K R IY0 - EY1 - T IH0 V\nCREATIVELY  K R IY0 - EY1 - T IH0 V - L IY0\nCREATIVENESS  K R IY0 - EY1 - T IH0 V - N AH0 S\nCREATIVITY  K R IY2 - EY0 - T IH1 - V AH0 - T IY0\nCREATOLOGIST  K R IY0 - EY2 - T AO1 - L AH0 - JH IH0 S T\nCREATOLOGISTS  K R IY0 - EY2 - T AO1 - L AH0 - JH IH0 S T S\nCREATOLOGISTS(2)  K R IY0 - EY2 - T AO1 - L AH0 - JH IH0 S S\nCREATOLOGISTS(3)  K R IY0 - EY2 - T AO1 - L AH0 - JH IH0 S\nCREATOR  K R IY0 - EY1 - T ER0\nCREATORS  K R IY0 - EY1 - T ER0 Z\nCREATURE  K R IY1 - CH ER0\nCREATURES  K R IY1 - CH ER0 Z\nCRECELIUS  K R IH0 - S IY1 - L IY0 - IH0 S\nCREDENCE  K R IY1 - D AH0 N S\nCREDENTIAL  K R IH0 - D EH1 N - CH AH0 L\nCREDENTIAL(2)  K R AH0 - D EH1 N - SH AH0 L\nCREDENTIALED  K R AH0 - D EH1 N - CH AH0 L D\nCREDENTIALED(2)  K R AH0 - D EH1 N - SH AH0 L D\nCREDENTIALS  K R AH0 - D EH1 N - SH AH0 L Z\nCREDENTIALS(2)  K R AH0 - D EH1 N - CH AH0 L Z\nCREDEUR  K R IH0 - D ER1\nCREDIBILITY  K R EH2 - D AH0 - B IH1 - L IH0 - T IY0\nCREDIBLE  K R EH1 - D AH0 - B AH0 L\nCREDIBLY  K R EH1 - D AH0 - B L IY0\nCREDIT  K R EH1 - D AH0 T\nCREDIT'S  K R EH1 - D IH0 T S\nCREDIT(2)  K R EH1 - D IH0 T\nCREDITABLE  K R EH1 - D AH0 - T AH0 - B AH0 L\nCREDITABLY  K R EH1 - D AH0 - T AH0 - B L IY0\nCREDITANSTALT  K R EH2 - D IH1 - T AH0 N SH - T AO2 L T\nCREDITBANK  K R EH1 - D IH0 T - B AE2 NG K\nCREDITED  K R EH1 - D AH0 - T AH0 D\nCREDITED(2)  K R EH1 - D IH0 - T IH0 D\nCREDITHRIFT  K R EH2 - D IH0 - TH R IH1 F T\nCREDITING  K R EH1 - D AH0 - T IH0 NG\nCREDITO  K R EH0 - D IY1 - T OW0\nCREDITOR  K R EH1 - D AH0 - T ER0\nCREDITOR(2)  K R EH1 - D IH0 - T ER0\nCREDITORS  K R EH1 - D IH0 - T ER0 Z\nCREDITORS'  K R EH1 - D IH0 - T ER0 Z\nCREDITS  K R EH1 - D IH0 T S\nCREDITWATCH  K R EH1 - D IH0 T - W AA2 CH\nCREDITWORTHINESS  K R EH1 - D IH0 T - W ER2 - DH IY0 - N AH0 S\nCREDITWORTHY  K R EH1 - D IH0 T - W ER2 - DH IY0\nCREDLE  K R EH1 - D AH0 L\nCREDO  K R EY1 - D OW0\nCREDO(2)  K R IY1 - D OW0\nCREDULITY  K R IH0 - D UW1 - L AH0 - T IY0\nCREE  K R IY1\nCREECH  K R IY1 CH\nCREECY  K R IY1 - S IY0\nCREED  K R IY1 D\nCREEDEN  K R IY1 - D AH0 N\nCREEDON  K R IY1 - D AH0 N\nCREEDS  K R IY1 D Z\nCREEGAN  K R IY1 - G AH0 N\nCREEK  K R IY1 K\nCREEK'S  K R IY1 K S\nCREEKMORE  K R IY1 K - M AO0 R\nCREEKMUR  K R IY1 K - M ER0\nCREEKS  K R IY1 K S\nCREEL  K R IY1 L\nCREELMAN  K R IY1 L - M AH0 N\nCREELY  K R IY1 - L IY0\nCREEP  K R IY1 P\nCREEPINESS  K R IY1 - P IY0 - N IH0 S\nCREEPING  K R IY1 - P IH0 NG\nCREEPS  K R IY1 P S\nCREEPY  K R IY1 - P IY0\nCREER  K R IH1 R\nCREES  K R IY1 Z\nCREF  K R EH1 F\nCREF'S  K R EH1 F S\nCREGAN  K R IY1 - G AH0 N\nCREGAR  K R IY1 - G ER0\nCREGER  K R IY1 - JH ER0\nCREGG  K R EH1 G\nCREGGER  K R EH1 - G ER0\nCREGO  K R EH1 - G OW0\nCREHAN  K R EH1 - HH AH0 N\nCREIGHTON  K R EY1 - T AH0 N\nCREKO  K R EH1 - K OW0\nCRELLIN  K R EH1 - L IH0 N\nCREMATE  K R IY1 - M EY0 T\nCREMATED  K R IY1 - M EY0 - T IH0 D\nCREMATION  K R IY0 - M EY1 - SH AH0 N\nCREMATORIA  K R IY0 - M AH0 - T AO1 - R IY0 - AH0\nCREMATORIUM  K R IY0 - M AH0 - T AO1 - R IY0 - AH0 M\nCREME  K R IY1 M\nCREMEANS  K R EH1 - M AH0 N Z\nCREMEENS  K R IH0 - M IY1 N Z\nCREMER  K R IY1 - M ER0\nCREMIN  K R EH1 - M IH0 N\nCRENELATE  K R EH1 - N AH0 - L EY2 T\nCRENELATED  K R EH1 - N AH0 - L EY2 - T AH0 D\nCRENSHAW  K R EH1 N - SH AO2\nCRENWELGE  K R EH1 N - W IH0 L JH\nCREOLE  K R IY1 - OW0 L\nCREOLES  K R IY0 - OW1 L Z\nCREOLIZE  K R IY1 - OW2 - L AY2 Z\nCREOLIZED  K R IY1 - OW2 - L AY2 Z D\nCREOSOTE  K R IY1 - AH0 - S OW2 T\nCREPE  K R EY1 P\nCREPEAU  K R IH0 - P OW1\nCREPES  K R EY1 P S\nCREPS  K R EH1 P S\nCREPT  K R EH1 P T\nCREQUE  K R EH1 K\nCRESAP  K R EH1 - S AH0 P\nCRESAP(2)  K R IY1 - S AH0 P\nCRESCENDO  K R IH0 - SH EH1 N - D OW0\nCRESCENT  K R EH1 - S AH0 N T\nCRESCENZI  K R EH0 S - CH EH1 N - Z IY0\nCRESCENZO  K R EH0 S - CH EH1 N - Z OW0\nCRESCI  K R EH1 - S IY0\nCRESCOTT  K R EH1 - S K AA0 T\nCRESON  K R EH1 - S AH0 N\nCRESPI  K R EH1 - S P IY0\nCRESPIN  K R EH1 - S P IH0 N\nCRESPO  K R EH1 - S P OW0\nCRESS  K R EH1 S\nCRESSES  K R EH1 - S AH0 Z\nCRESSES(2)  K R EH1 - S IH0 Z\nCRESSEY  K R EH1 - S IY0\nCRESSLER  K R EH1 S - L ER0\nCRESSMAN  K R EH1 S - M AH0 N\nCRESSON  K R EH1 - S AH0 N\nCRESSWELL  K R EH1 S - W EH2 L\nCRESSY  K R EH1 - S IY0\nCREST  K R EH1 S T\nCRESTAR  K R EH1 - S T AA2 R\nCRESTED  K R EH1 - S T AH0 D\nCRESTFALLEN  K R EH1 S T - F AO2 - L AH0 N\nCRESTING  K R EH1 - S T IH0 NG\nCRESTMONT  K R EH1 S T - M AA2 N T\nCRESTS  K R EH1 S T S\nCRESTS(2)  K R EH1 S S\nCRESTS(3)  K R EH1 S\nCRESWELL  K R EH1 S - W EH2 L\nCRETACEOUS  K R IH0 - T EY1 - SH IH0 S\nCRETCHEN  K R EH1 - CH AH0 N\nCRETE  K R IY1 T\nCRETELLA  K R EH0 - T EH1 - L AH0\nCRETIEN  K R IY1 - SH Y AH0 N\nCRETSINGER  K R EH1 T - S IH0 N - JH ER0\nCREUTZFELDT  K R UH1 T S - F EH0 L D\nCREUTZFELDT(2)  K R UH1 T S - F EH0 L T\nCREVELING  K R EH1 - V AH0 L - IH0 NG\nCREVELING(2)  K R EH1 V - L IH0 NG\nCREVICE  K R EH1 - V AH0 S\nCREVICES  K R EH1 - V AH0 - S IH0 Z\nCREVIER  K R IY1 - V IY0 - ER0\nCREVISTON  K R EH1 - V IH0 - S T AA0 N\nCREW  K R UW1\nCREW'S  K R UW1 Z\nCREWE  K R UW1\nCREWEL  K R UW1 - AH0 L\nCREWES  K R UW1 Z\nCREWMAN  K R UW1 - M AH0 N\nCREWMEN  K R UW1 - M IH0 N\nCREWS  K R UW1 Z\nCRIB  K R IH1 B\nCRIBARI  K R IY0 - B AA1 - R IY0\nCRIBB  K R IH1 B\nCRIBBAGE  K R IH1 - B IH0 JH\nCRIBBS  K R IH1 B Z\nCRIBS  K R IH1 B Z\nCRICHLOW  K R IH1 - K L OW0\nCRICHTON  K R IH1 CH - T AH0 N\nCRICK  K R IH1 K\nCRICKET  K R IH1 - K AH0 T\nCRICKET'S  K R IH1 - K AH0 T S\nCRICKET(2)  K R IH1 - K IH0 T\nCRICKETS  K R IH1 - K AH0 T S\nCRIDDLE  K R IH1 - D AH0 L\nCRIDER  K R AY1 - D ER0\nCRIED  K R AY1 D\nCRIER  K R AY1 - ER0\nCRIES  K R AY1 Z\nCRIGER  K R AY1 - JH ER0\nCRIGGER  K R IH1 - G ER0\nCRIGLER  K R IH1 G - L ER0\nCRIHFIELD  K R IH1 - F IY0 L D\nCRILL  K R IH1 L\nCRILLEY  K R IH1 - L IY0\nCRILLY  K R IH1 - L IY0\nCRIM  K R IH1 M\nCRIME  K R AY1 M\nCRIME'S  K R AY1 M Z\nCRIMEA  K R AY0 - M IY1 - AH0\nCRIMEAN  K R IH0 - M IY1 N\nCRIMEAN(2)  K R AY2 - M IY1 - AH0 N\nCRIMES  K R AY1 M Z\nCRIMI  K R IY1 - M IY0\nCRIMINAL  K R IH1 - M AH0 - N AH0 L\nCRIMINAL'S  K R IH1 - M AH0 - N AH0 L Z\nCRIMINALIST  K R IH1 - M AH0 - N AH0 - L IH0 S T\nCRIMINALIST'S  K R IH1 - M AH0 - N AH0 - L IH0 S T S\nCRIMINALISTICS  K R IH2 - M AH0 - N AH0 - L IH1 - S T IH0 K S\nCRIMINALISTS  K R IH1 - M AH0 - N AH0 - L IH0 S T S\nCRIMINALISTS(2)  K R IH1 - M AH0 - N AH0 - L IH0 S S\nCRIMINALISTS(3)  K R IH1 - M AH0 - N AH0 - L IH0 S\nCRIMINALITY  K R IH2 - M AH0 - N AE1 - L IH0 - T IY0\nCRIMINALIZATION  K R IH2 - M AH0 - N AH0 - L AH0 - Z EY1 - SH AH0 N\nCRIMINALIZE  K R IH1 - M AH0 - N AH0 - L AY2 Z\nCRIMINALIZED  K R IH1 - M AH0 - N AH0 - L AY2 Z D\nCRIMINALIZING  K R IH1 - M AH0 - N AH0 - L AY2 - Z IH0 NG\nCRIMINALLY  K R IH1 - M AH0 - N AH0 - L IY0\nCRIMINALS  K R IH1 - M AH0 - N AH0 L Z\nCRIMINALS'  K R IH1 - M AH0 - N AH0 L Z\nCRIMINOLOGIST  K R IH2 - M IH0 - N AA1 - L AH0 - JH IH0 S T\nCRIMINOLOGISTS  K R IH2 - M IH0 - N AA1 - L AH0 - JH IH0 S T S\nCRIMINOLOGISTS(2)  K R IH2 - M IH0 - N AA1 - L AH0 - JH IH0 S S\nCRIMINOLOGISTS(3)  K R IH2 - M IH0 - N AA1 - L AH0 - JH IH0 S\nCRIMINOLOGY  K R IH2 - M IH0 - N AA1 - L AH0 - JH IY0\nCRIMM  K R IH1 M\nCRIMMINS  K R IH1 - M IH0 N Z\nCRIMP  K R IH1 M P\nCRIMPED  K R IH1 M P T\nCRIMPING  K R IH1 M - P IH0 NG\nCRIMPS  K R IH1 M P S\nCRIMSON  K R IH1 M - Z AH0 N\nCRINER  K R AY1 - N ER0\nCRINGE  K R IH1 N JH\nCRINGED  K R IH1 N JH D\nCRINGES  K R IH1 N - JH IH0 Z\nCRINGING  K R IH1 N - JH IH0 NG\nCRIP  K R IH1 P\nCRIPE  K R AY1 P\nCRIPPEN  K R IH1 - P AH0 N\nCRIPPLE  K R IH1 - P AH0 L\nCRIPPLED  K R IH1 - P AH0 L D\nCRIPPLES  K R IH1 - P AH0 L Z\nCRIPPLING  K R IH1 - P AH0 L - IH0 NG\nCRIPPLING(2)  K R IH1 - P L IH0 NG\nCRIPPS  K R IH1 P S\nCRIPS  K R IH1 P S\nCRIS  K R IH1 S\nCRISAFI  K R IY0 - S AA1 - F IY0\nCRISAFULLI  K R IY0 - S AA0 - F UW1 - L IY0\nCRISANTI  K R IH0 - S AE1 N - T IY0\nCRISCI  K R IH1 - S IY0\nCRISCIONE  K R IY0 S - CH OW1 - N IY0\nCRISCO  K R IY1 - S K OW0\nCRISCUOLO  K R IY0 S K - W OW1 - L OW0\nCRISE  K R AY1 Z\nCRISES  K R AY1 - S IY0 Z\nCRISHMAN  K R IH1 SH - M AH0 N\nCRISHMAN'S  K R IH1 SH - M AH0 N Z\nCRISIS  K R AY1 - S AH0 S\nCRISLER  K R IH1 - S AH0 L - ER0\nCRISLER(2)  K R IH1 S - L ER0\nCRISLIP  K R IH1 S - L IH0 P\nCRISMAN  K R IH1 S - M AH0 N\nCRISMON  K R IH1 Z - M AH0 N\nCRISOSTOMO  K R IY0 - S OW0 - S T OW1 - M OW0\nCRISP  K R IH1 S P\nCRISPELL  K R IH1 - S P AH0 L\nCRISPEN  K R IH1 - S P AH0 N\nCRISPER  K R IH1 - S P ER0\nCRISPIN  K R IH1 - S P IH0 N\nCRISPINA  K R IY0 - S P IY1 - N AH0\nCRISPINO  K R IY0 - S P IY1 - N OW0\nCRISPLY  K R IH1 S P - L IY0\nCRISPNESS  K R IH1 S P - N AH0 S\nCRISPO  K R IY1 - S P OW0\nCRISPY  K R IH1 - S P IY0\nCRISS  K R IH1 S\nCRISS-CROSS  K R IH1 S - K R AO1 S\nCRISS-CROSSED  K R IH1 S - K R AO1 S T\nCRISSCROSS  K R IH1 S - K R AO2 S\nCRISSCROSSED  K R IH1 S - K R AO2 S T\nCRISSCROSSING  K R IH1 S - K R AO2 - S IH0 NG\nCRISSEY  K R IH1 - S IY0\nCRISSINGER  K R IH1 - S IH0 N - JH ER0\nCRISSLOW  K R IH1 S - L OW0\nCRISSMAN  K R IH1 S - M AH0 N\nCRIST  K R IH1 S T\nCRISTABEL  K R IH1 - S T AH0 - B EH0 L\nCRISTAL  K R IH1 - S T AH0 L\nCRISTIANI  K R IH2 - S T IY0 - AA1 - N IY0\nCRISTIANI'S  K R IH2 - S T IY0 - AA1 - N IY0 Z\nCRISTIANI'S(2)  K R IH2 - S CH IY0 - AA1 - N IY0 Z\nCRISTIANI(2)  K R IH2 - S CH IY0 - AA1 - N IY0\nCRISTIANO  K R IY0 - S T IY0 - AA1 - N OW0\nCRISTINA  K R IH0 - S T IY1 - N AH0\nCRISTO  K R IH1 - S T OW2\nCRISTO'S  K R IH1 - S T OW2 Z\nCRISTOBAL  K R IH1 - S T AH0 - B AH0 L\nCRISTOBEL  K R IH1 - S T AH0 - B EH0 L\nCRISTOBEL'S  K R IH1 - S T AH0 - B EH0 L Z\nCRISWELL  K R IH1 - S W EH0 L\nCRITCHER  K R IH1 - CH ER0\nCRITCHFIELD  K R IH1 CH - F IY0 L D\nCRITCHLEY  K R IH1 CH - L IY0\nCRITCHLOW  K R IH1 CH - L OW0\nCRITELLI  K R IH0 - T EH1 - L IY0\nCRITERIA  K R AY0 - T IH1 - R IY0 - AH0\nCRITERION  K R AY0 - T IH1 - R IY0 - AH0 N\nCRITES  K R AY1 T S\nCRITIC  K R IH1 - T IH0 K\nCRITIC'S  K R IH1 - T IH0 K S\nCRITICAL  K R IH1 - T IH0 - K AH0 L\nCRITICALITY  K R IH2 - T AH0 - K AE1 - L AH0 - T IY0\nCRITICALLY  K R IH1 - T IH0 - K AH0 - L IY0\nCRITICALLY(2)  K R IH1 - T IH0 K - L IY0\nCRITICISM  K R IH1 - T IH0 - S IH2 - Z AH0 M\nCRITICISMS  K R IH1 - T IH0 - S IH2 - Z AH0 M Z\nCRITICIZE  K R IH1 - T IH0 - S AY2 Z\nCRITICIZED  K R IH1 - T AH0 - S AY2 Z D\nCRITICIZES  K R IH1 - T IH0 - S AY2 - Z IH0 Z\nCRITICIZING  K R IH1 - T IH0 - S AY2 - Z IH0 NG\nCRITICS  K R IH1 - T IH0 K S\nCRITICS'  K R IH1 - T IH0 K S\nCRITIQUE  K R AH0 - T IY1 K\nCRITIQUE(2)  K R IH0 - T IY1 K\nCRITIQUED  K R IH0 - T IY1 K T\nCRITIQUES  K R IH0 - T IY1 K S\nCRITIQUING  K R IH0 - T IY1 - K IH0 NG\nCRITON  K R AY1 - T AH0 N\nCRITSER  K R IH1 T - S ER0\nCRITTENDEN  K R IH0 - T EH1 N - D AH0 N\nCRITTENDON  K R IH1 - T AH0 N - D IH0 N\nCRITTER  K R IH1 - T ER0\nCRITTERS  K R IH1 - T ER0 Z\nCRITZ  K R IH1 T S\nCRITZER  K R IH1 T - Z ER0\nCRIVARO  K R IH0 - V AE1 - R OW0\nCRIVELLI  K R IH0 - V EH1 - L IY0\nCRIVELLO  K R IH0 - V EH1 - L OW0\nCRNKOVICH  S ER1 - N AH0 - V IH2 CH\nCRO  K R OW1\nCROAK  K R OW1 K\nCROAKER  K R OW1 - K ER0\nCROAKING  K R OW1 - K IH0 NG\nCROAT  K R OW1 - AA2 T\nCROAT'S  K R OW1 - AA2 T S\nCROATIA  K R OW0 - EY1 - SH AH0\nCROATIA'S  K R OW0 - EY1 - SH AH0 Z\nCROATIAN  K R OW0 - EY1 - SH AH0 N\nCROATIAN'S  K R OW0 - EY1 - SH AH0 N Z\nCROATIANS  K R OW0 - EY1 - SH AH0 N Z\nCROATIANS'  K R OW0 - EY1 - SH AH0 N Z\nCROATS  K R OW1 - AA2 T S\nCROC  K R AA1 K\nCROCCO  K R AA1 - K OW0\nCROCE  K R OW1 - CH IY0\nCROCHET  K R OW0 - SH EY1\nCROCHETED  K R OW0 - SH EY1 D\nCROCHETIERE  K R OW2 - SH AH0 - T IH1 R\nCROCHETING  K R OW0 - SH EY1 - IH0 NG\nCROCK  K R AA1 K\nCROCKER  K R AA1 - K ER0\nCROCKER'S  K R AA1 - K ER0 Z\nCROCKERY  K R AA1 - K ER0 - IY0\nCROCKETT  K R AA1 - K IH0 T\nCROCKFORD  K R AA1 K - F ER0 D\nCROCODILE  K R AA1 - K AH0 - D AY2 L\nCROCODILES  K R AA1 - K AH0 - D AY2 L Z\nCROCUS  K R OW1 - K AH0 S\nCROCUSES  K R OW1 - K Y UW0 - S IH0 Z\nCROFF  K R AO1 F\nCROFFORD  K R AA1 - F ER0 D\nCROFOOT  K R OW1 - F UH0 T\nCROFT  K R AO1 F T\nCROFTON  K R AA1 F - T AH0 N\nCROFTS  K R AO1 F T S\nCROGAN  K R OW1 - G AH0 N\nCROGHAN  K R AA1 G - HH AH0 N\nCROISSANT  K W AA2 - S AA1 N T\nCROISSANT(2)  K R AH0 - S AA1 N T\nCROISSANTS  K W AA2 - S AA1 N T S\nCROISSANTS(2)  K R AH0 - S AA1 N T S\nCROITZER  K R OY1 T - S ER0\nCROIX  K R OY1\nCROIX'S  K R OY1 Z\nCROKE  K R OW1 K\nCROKER  K R OW1 - K ER0\nCROLEY  K R OW1 - L IY0\nCROLL  K R OW1 L\nCROM  K R AA1 M\nCROMARTIE  K R AA1 - M AA0 R - T IY0\nCROMBIE  K R AA1 M - B IY0\nCROMER  K R OW1 - M ER0\nCROMIE  K R AA1 - M IY0\nCROMLEY  K R AA1 M - L IY0\nCROMPTON  K R AA1 M P - T AH0 N\nCROMWELL  K R AA1 M - W AH0 L\nCROMWELL'S  K R AA1 M - W IH0 L Z\nCRON  K R AA1 N\nCRONAN  K R OW1 - N AH0 N\nCRONAUER  K R AA1 - N AW0 R\nCRONCE  K R AA1 N S\nCRONE  K R OW1 N\nCRONEN  K R OW1 - N AH0 N\nCRONER  K R OW1 - N ER0\nCRONEY  K R OW1 - N IY0\nCRONIES  K R OW1 - N IY0 Z\nCRONIN  K R OW1 - N IH0 N\nCRONK  K R AA1 NG K\nCRONKHITE  K R AA1 NG K - HH AY2 T\nCRONKITE  K R AA1 NG - K AY2 T\nCRONKRIGHT  K R AA1 NG K - R AY2 T\nCRONQUIST  K R AA1 N - K W IH2 S T\nCRONUS  K R OW1 - N AH0 S\nCRONY  K R OW1 - N IY0\nCRONYISM  K R OW1 - N IY0 - IH2 - Z AH0 M\nCROOK  K R UH1 K\nCROOKE  K R UH1 K\nCROOKED  K R UH1 - K AH0 D\nCROOKEDNESS  K R UH1 - K AH0 D - N AH0 S\nCROOKER  K R UH1 - K ER0\nCROOKLYN  K R UH1 K - L IH2 N\nCROOKLYN'S  K R UH1 K - L IH2 N Z\nCROOKS  K R UH1 K S\nCROOKSHANK  K R UH1 K - SH AE2 NG K\nCROOKSHANKS  K R UH1 K - SH AE2 NG K S\nCROOKSTON  K R UH1 K - S T AH0 N\nCROOM  K R UW1 M\nCROOMS  K R UW1 M Z\nCROON  K R UW1 N\nCROONER  K R UW1 - N ER0\nCROONING  K R UW1 - N IH0 NG\nCROONS  K R UW1 N Z\nCROP  K R AA1 P\nCROP'S  K R AA1 P S\nCROPLAND  K R AA1 P - L AE2 N D\nCROPLEY  K R AA1 P - L IY0\nCROPP  K R AA1 P\nCROPPED  K R AA1 P T\nCROPPER  K R AA1 - P ER0\nCROPPING  K R AA1 - P IH0 NG\nCROPS  K R AA1 P S\nCROPSEY  K R AA1 P - S IY0\nCROQUET  K R OW0 - K EY1\nCROS  K R AO1 S\nCROSBEY  K R AA1 S - B IY0\nCROSBIE  K R AO1 Z - B IY0\nCROSBY  K R AO1 Z - B IY0\nCROSBY'S  K R AO1 Z - B IY0 Z\nCROSE  K R OW1 Z\nCROSHAW  K R AA1 - SH AO0\nCROSKEY  K R AA1 S - K IY0\nCROSLAND  K R AA1 S - L AH0 N D\nCROSLEY  K R AA1 S - L IY0\nCROSLIN  K R AA1 S - L IH0 N\nCROSON  K R OW1 - S AH0 N\nCROSS  K R AO1 S\nCROSS'S  K R AO1 - S IH0 Z\nCROSS-POLLINATE  K R AO1 S - P AA1 - L AH0 - N EY2 T\nCROSSAN  K R AA1 - S AH0 N\nCROSSBILL  K R AO1 S - B IH2 L\nCROSSBILLS  K R AO1 S - B IH2 L Z\nCROSSBONES  K R AO1 S - B OW2 N Z\nCROSSBORDER  K R AO1 S - B AO2 R - D ER0\nCROSSBOW  K R AO1 S - B OW2\nCROSSCURRENT  K R AO1 S - K ER2 - AH0 N T\nCROSSCURRENTS  K R AO1 S - K ER2 - AH0 N T S\nCROSSE  K R AA1 S\nCROSSED  K R AO1 S T\nCROSSEN  K R AO1 - S AH0 N\nCROSSER  K R AO1 - S ER0\nCROSSES  K R AO1 - S IH0 Z\nCROSSETT  K R AA1 - S IH0 T\nCROSSFIELD  K R AO1 S - F IY2 L D\nCROSSFIRE  K R AO1 S - F AY0 R\nCROSSFIRE'S  K R AO1 S - F AY0 R Z\nCROSSFIRE(2)  K R AO1 S - F AY2 R\nCROSSIN  K R AA1 - S IH0 N\nCROSSING  K R AO1 - S IH0 NG\nCROSSINGS  K R AO1 - S IH0 NG Z\nCROSSLAND  K R AO1 S - L AE2 N D\nCROSSLEY  K R AA1 S - L IY0\nCROSSLIN  K R AA1 S - L IH0 N\nCROSSMAN  K R AO1 S - M AH0 N\nCROSSNINE  K R AO1 S - N AY2 N\nCROSSNO  K R OW1 S - N OW0\nCROSSON  K R AA1 - S AH0 N\nCROSSOVER  K R AO1 S - OW2 - V ER0\nCROSSPIECE  K R AO1 S - P IY2 S\nCROSSPIECES  K R AO1 S - P IY2 - S AH0 Z\nCROSSPIECES(2)  K R AO1 S - P IY2 - S IH0 Z\nCROSSROAD  K R AO1 S - R OW2 D\nCROSSROADS  K R AO1 S - R OW2 D Z\nCROSSTALK  K R AO1 S T - AO1 K\nCROSSTOWN  K R AO1 S T - AW2 N\nCROSSVILLE  K R AA1 S - V IH0 L\nCROSSWALK  K R AA1 S - W AA2 K\nCROSSWHITE  K R AA1 S - W AY0 T\nCROSSWISE  K R AO1 S - W AY2 Z\nCROSSWORD  K R AO1 S - W ER2 D\nCROSSWORDS  K R AO1 S - W ER2 D Z\nCROSTHWAIT  K R AA1 S TH - W AH0 T\nCROSTHWAITE  K R AA1 S TH - W AH0 T\nCROSTON  K R AA1 - S T AH0 N\nCROSWELL  K R AA1 S - W EH0 L\nCROTCH  K R AA1 CH\nCROTCHETY  K R AA1 - CH AH0 - T IY0\nCROTEAU  K R AH0 - T OW1\nCROTHERS  K R AH1 - DH ER0 Z\nCROTONVILLE  K R OW1 - T AH0 N - V IH2 L\nCROTTEAU  K R AH0 - T OW1\nCROTTS  K R AA1 T S\nCROTTY  K R AA1 - T IY0\nCROTWELL  K R AA1 T - W EH2 L\nCROTZER  K R OW1 T - Z ER0\nCROUCH  K R AW1 CH\nCROUCHED  K R AW1 CH T\nCROUCHER  K R AW1 - CH ER0\nCROUCHING  K R AW1 - CH IH0 NG\nCROUGH  K R AW1\nCROUNSE  K R AW1 N S\nCROUP  K R UW1 P\nCROUSE  K R AW1 S\nCROUSER  K R AW1 - S ER0\nCROUT  K R AW1 T\nCROUTHAMEL  K R AW1 - TH AH0 - M EH0 L\nCROVITZ  K R OW1 - V IH0 T S\nCROVITZ'S  K R OW1 - V IH0 T - S IH0 Z\nCROVL  K R OW1 - V AH0 L\nCROVLS  K R OW1 - V AH0 L Z\nCROW  K R OW1\nCROW'S  K R OW1 Z\nCROWBAR  K R OW1 - B AA2 R\nCROWBOROUGH  K R OW1 - B ER0 - OW0\nCROWD  K R AW1 D\nCROWD'S  K R AW1 D Z\nCROWDED  K R AW1 - D AH0 D\nCROWDED(2)  K R AW1 - D IH0 D\nCROWDEN  K R AW1 - D AH0 N\nCROWDER  K R AW1 - D ER0\nCROWDING  K R AW1 - D IH0 NG\nCROWDS  K R AW1 D Z\nCROWE  K R OW1\nCROWED  K R OW1 D\nCROWELL  K R OW1 - AH0 L\nCROWING  K R OW1 - IH0 NG\nCROWKEEPER  K R OW1 - K IY2 - P ER0\nCROWKEEPERS  K R OW1 - K IY2 - P ER0 Z\nCROWL  K R AW1 L\nCROWLE  K R AW1 L\nCROWLEY  K R AW1 - L IY0\nCROWLEY'S  K R AW1 - L IY0 Z\nCROWN  K R AW1 N\nCROWN'S  K R AW1 N Z\nCROWNE  K R AW1 N\nCROWNED  K R AW1 N D\nCROWNER  K R AW1 - N ER0\nCROWNING  K R AW1 - N IH0 NG\nCROWNLIKE  K R AW1 N - L AY2 K\nCROWNOVER  K R AW1 N - OW2 - V ER0\nCROWNS  K R AW1 N Z\nCROWNX  K R AW1 - N EH2 K S\nCROWS  K R OW1 Z\nCROWSON  K R AW1 - S AH0 N\nCROWTHER  K R AW1 - DH ER0\nCROWTHER'S  K R OW1 - TH ER0 Z\nCROWTHERS  K R OW1 - TH ER0 Z\nCROXTON  K R AA1 K - S T AH0 N\nCROY  K R OY1\nCROYLE  K R OY1 L\nCROZIER  K R OW1 - ZH ER0\nCRUCE  K R UW1 S\nCRUCES  K R UW1 - S IY0 Z\nCRUCIAL  K R UW1 - SH AH0 L\nCRUCIALLY  K R UW1 - SH AH0 - L L IY0\nCRUCIALLY(2)  K R UW1 - SH AH0 - L IY0\nCRUCIBLE  K R UW1 - S AH0 - B AH0 L\nCRUCIFIED  K R UW1 - S AH0 - F AY2 D\nCRUCIFIX  K R UW1 - S AH0 - F IH2 K S\nCRUCIFIXES  K R UW1 - S AH0 - F IH2 K - S IH0 Z\nCRUCIFIXION  K R UW2 - S IH0 - F IH1 K - SH AH0 N\nCRUCIFY  K R UW1 - S AH0 - F AY2\nCRUD  K R AH1 D\nCRUDDY  K R AH1 - D IY0\nCRUDE  K R UW1 D\nCRUDE'S  K R UW1 D Z\nCRUDELE  K R UW1 - D AH0 L\nCRUDELY  K R UW1 D - L IY0\nCRUDES  K R UW1 D Z\nCRUDUP  K R AH1 - D AH2 P\nCRUEA  K R UW1 - IY0 - AH0\nCRUEL  K R UW1 - AH0 L\nCRUEL(2)  K R UW1 L\nCRUELEST  K R UW1 - L AH0 S T\nCRUELLY  K R UW1 - L IY0\nCRUELTIES  K R UW1 L - T IY0 Z\nCRUELTIES(2)  K R UW1 - AH0 L - T IY0 Z\nCRUELTY  K R UW1 L - T IY0\nCRUELTY(2)  K R UW1 - AH0 L - T IY0\nCRUEY  K R AH1 - IY0\nCRUGER  K R UW1 - JH ER0\nCRUICKSHANK  K R UH1 K - SH AE2 NG K\nCRUIKSHANK  K R UW1 - IH0 K - SH AE2 NG K\nCRUISE  K R UW1 Z\nCRUISED  K R UW1 Z D\nCRUISER  K R UW1 - Z ER0\nCRUISER'S  K R UW1 - Z ER0 Z\nCRUISERS  K R UW1 - Z ER0 Z\nCRUISES  K R UW1 - Z IH0 Z\nCRUISING  K R UW1 - Z IH0 NG\nCRULL  K R AH1 L\nCRUM  K R AH1 M\nCRUMB  K R AH1 M\nCRUMBAUGH  K R AH1 M - B AO2\nCRUMBLE  K R AH1 M - B AH0 L\nCRUMBLED  K R AH1 M - B AH0 L D\nCRUMBLES  K R AH1 M - B AH0 L Z\nCRUMBLEY  K R AH1 M - B L IY0\nCRUMBLING  K R AH1 M - B AH0 L - IH0 NG\nCRUMBLING(2)  K R AH1 M - B L IH0 NG\nCRUMBS  K R AH1 M Z\nCRUMBY  K R AH1 M - B IY0\nCRUME  K R UW1 M\nCRUMITIE  K R UW1 - M IH0 - T IY0\nCRUMLEY  K R AH1 M - L IY0\nCRUMLY  K R AH1 M - L IY0\nCRUMM  K R AH1 M\nCRUMMETT  K R AH1 - M IH0 T\nCRUMMEY  K R AH1 - M IY0\nCRUMMY  K R AH1 - M IY0\nCRUMP  K R AH1 M P\nCRUMPACKER  K R AH1 M - P AH0 - K ER0\nCRUMPLE  K R AH1 M - P AH0 L\nCRUMPLED  K R AH1 M - P AH0 L D\nCRUMPLER  K R AH1 M - P AH0 - L ER0\nCRUMPLER(2)  K R AH1 M - P L ER0\nCRUMPTON  K R AH1 M P - T AH0 N\nCRUMRINE  K R AH1 - M R IY2 N\nCRUNCH  K R AH1 N CH\nCRUNCHED  K R AH1 N CH T\nCRUNCHER  K R AH1 N - CH ER0\nCRUNCHERS  K R AH1 N - CH ER0 Z\nCRUNCHES  K R AH1 N - CH IH0 Z\nCRUNCHING  K R AH1 N - CH IH0 NG\nCRUNCHY  K R AH1 N - CH IY0\nCRUNK  K R AH1 NG K\nCRUNKLETON  K R AH1 NG - K AH0 L - T AA0 N\nCRUPI  K R UW1 - P IY0\nCRUSADE  K R UW0 - S EY1 D\nCRUSADER  K R UW0 - S EY1 - D ER0\nCRUSADERS  K R UW0 - S EY1 - D ER0 Z\nCRUSADES  K R UW0 - S EY1 D Z\nCRUSADING  K R UW0 - S EY1 - D IH0 NG\nCRUSAN  K R UW1 - Z AH0 N\nCRUSE  K R UW1 Z\nCRUSER  K R UW1 - Z ER0\nCRUSH  K R AH1 SH\nCRUSHED  K R AH1 SH T\nCRUSHER  K R AH1 - SH ER0\nCRUSHERS  K R AH1 - SH ER0 Z\nCRUSHES  K R AH1 - SH IH0 Z\nCRUSHING  K R AH1 - SH IH0 NG\nCRUSOE  K R UW1 - S OW0\nCRUST  K R AH1 S T\nCRUSTACEAN  K R AH0 - S T EY1 - SH AH0 N\nCRUSTACEANS  K R AH0 - S T EY1 - SH AH0 N Z\nCRUSTAL  K R AH1 - S T AH0 L\nCRUSTED  K R AH1 - S T IH0 D\nCRUSTS  K R AH1 S T S\nCRUSTY  K R AH1 - S T IY0\nCRUTCH  K R AH1 CH\nCRUTCHER  K R AH1 - CH ER0\nCRUTCHES  K R AH1 - CH IH0 Z\nCRUTCHFIELD  K R AH1 CH - F IY2 L D\nCRUTCHFIELD'S  K R AH1 CH - F IY2 L D Z\nCRUTCHLEY  K R AH1 CH - L IY0\nCRUTE  K R UW1 T\nCRUTHIRDS  K R AH1 - TH ER0 D Z\nCRUX  K R AH1 K S\nCRUZ  K R UW1 Z\nCRUZ'S  K R UW1 - Z IH0 Z\nCRUZADO  K R UW2 - Z AA1 - D OW0\nCRUZADOS  K R UW2 - Z AA1 - D OW0 S\nCRUZAN  K R UW1 - Z AH0 N\nCRUZAN(2)  K R UW2 - Z AE1 N\nCRUZE  K R UW1 Z\nCRUZEN  K R UW1 - Z AH0 N\nCRY  K R AY1\nCRYAN  K R AY1 - AH0 N\nCRYBABY  K R AY1 - B EY1 - B IY0\nCRYDER  K R AY1 - D ER0\nCRYDERMAN  K R AY1 - D ER0 - M AH0 N\nCRYE  K R AY1\nCRYER  K R AY1 - ER0\nCRYING  K R AY1 - IH0 NG\nCRYMES  K R AY1 M Z\nCRYOGENIC  K R AY1 - AH0 - JH EH2 - N IH0 K\nCRYOGENICS  K R AY1 - AH0 - JH EH2 - N IH0 K S\nCRYOLITE  K R AY1 - AH0 - L AY2 T\nCRYPT  K R IH1 P T\nCRYPTIC  K R IH1 P - T IH0 K\nCRYPTO  K R IH1 P - T OW0\nCRYPTOCLEARANCE  K R IH2 P - T OW0 - L IH1 - R AH0 N S\nCRYPTOSPORIDIUM  K R IH2 P - T OW0 - S P AO0 - R IH1 - D IY0 - AH0 M\nCRYPTS  K R IH1 P T S\nCRYSLER  K R IH1 - S AH0 L - ER0\nCRYSLER(2)  K R IH1 S - L ER0\nCRYSTAL  K R IH1 - S T AH0 L\nCRYSTAL'S  K R IH1 - S T AH0 L Z\nCRYSTALLINE  K R IH1 - S T AH0 - L AY2 N\nCRYSTALLIZE  K R IH1 - S T AH0 - L AY2 Z\nCRYSTALLIZED  K R IH1 - S T AH0 - L AY2 Z D\nCRYSTALLIZING  K R IH1 - S T AH0 - L AY2 - Z IH0 NG\nCRYSTALLOGRAPHER  K R IH2 - S T AH0 - L AA1 - G R AH0 - F ER0\nCRYSTALLOGRAPHY  K R IH2 - S T AH0 - L AA1 - G R AH0 - F IY0\nCRYSTALS  K R IH1 - S T AH0 L Z\nCRYSTER  K R AY1 - S T ER0\nCRYTZER  K R AY1 T - Z ER0\nCSAR  Z AA1 R\nCSASZAR  K AH0 - S AA1 - SH ER0\nCSASZAR(2)  S AA1 - SH ER0\nCSPAN  S IY1 - S P AE1 N\nCSPI  S IY1 - EH1 - S P IY1 - AY1\nCT  K AO1 R T\nCUADRA  K UW0 - AA1 - D R AH0\nCUADRADO  K UW0 - AA0 - D R AA1 - D OW0\nCUAJONE  K Y UW1 - AH0 - JH OW2 N\nCUAUHTEMOC  K Y UW0 - AW1 - T AH0 - M AA0 K\nCUB  K AH1 B\nCUBA  K Y UW1 - B AH0\nCUBA'S  K Y UW1 - B AH0 Z\nCUBAN  K Y UW1 - B AH0 N\nCUBANS  K Y UW1 - B AH0 N Z\nCUBBAGE  K AH1 - B IH0 JH\nCUBBIES  K AH1 - B IY0 Z\nCUBBISON  K AH1 - B IH0 - S AH0 N\nCUBBYHOLE  K AH1 - B IY0 - HH OW2 L\nCUBE  K Y UW1 B\nCUBED  K Y UW1 B D\nCUBES  K Y UW1 B Z\nCUBIC  K Y UW1 - B IH0 K\nCUBIC'S  K Y UW1 - B IH0 K S\nCUBICLE  K Y UW1 - B IH0 - K AH0 L\nCUBICLES  K Y UW1 - B IH0 - K AH0 L Z\nCUBISM  K Y UW1 - B IH0 - Z AH0 M\nCUBIST  K Y UW1 - B IH0 S T\nCUBIT  K Y UW1 - B IH0 T\nCUBS  K AH1 B Z\nCUBS'  K AH1 B Z\nCUCCARO  K UW0 - K AA1 - R OW0\nCUCCHI  K UW1 - K IY0\nCUCCHIARA  K UW0 - K IY0 - AA1 - R AH0\nCUCCI  K UW1 - CH IY0\nCUCCIA  K UW1 - CH AH0\nCUCCIO  K UW1 - CH IY0 - OW0\nCUCKOO  K AH1 - K UW2\nCUCKOO'S  K UW1 - K UW0 Z\nCUCKOO(2)  K UW1 - K UW2\nCUCKOOS  K UW1 - K UW0 Z\nCUCO  K UW1 - K OW0\nCUCUMBER  K Y UW1 - K AH0 M - B ER0\nCUCUMBERS  K Y UW1 - K AH0 M - ER0 Z\nCUDAHY  K AH1 - D AH0 - HH IY0\nCUDD  K AH1 D\nCUDDEBACK  K AH1 D - B AE0 K\nCUDDIHY  K AH1 - D IH0 - HH IY0\nCUDDLE  K AH1 - D AH0 L\nCUDDLED  K AH1 - D AH0 L D\nCUDDLING  K AH1 D - L IH0 NG\nCUDDLY  K AH1 D - L IY0\nCUDDY  K AH1 - D IY0\nCUDE  K Y UW1 D\nCUDGEL  K AH1 - JH AH0 L\nCUDGELS  K AH1 - JH AH0 L Z\nCUDMORE  K AH1 D - M AO0 R\nCUDNEY  K AH1 D - N IY0\nCUDWORTH  K AH1 D - W ER2 TH\nCUE  K Y UW1\nCUED  K Y UW1 D\nCUELLAR  K Y UW1 - L ER0\nCUELLO  K UW0 - EH1 - L OW0\nCUENCA  K W EH1 N - K AH0\nCUERO  K W EH1 - R OW0\nCUERVO  K UH1 R - V OW0\nCUES  K Y UW1 Z\nCUESTA  K W EH1 - S T AH0\nCUETO  K W EH1 - T OW0\nCUEVA  K W EH1 - V AH0\nCUEVAS  K W EH1 - V AA0 Z\nCUFF  K AH1 F\nCUFFE  K AH1 F\nCUFFED  K AH1 F T\nCUFFEE  K AH1 - F IY1\nCUFFS  K AH1 F S\nCUGINI  K UW0 - JH IY1 - N IY0\nCUHNEY  K UW1 - N IY0\nCUISINART  K W IY1 - S IH0 - N ER0 T\nCUISINART(2)  K W IY1 - Z AH0 - N AA2 T\nCUISINARTS  K W IY1 - Z AH0 N - AA2 R T S\nCUISINE  K W IH0 - Z IY1 N\nCUISINES  K W IH0 - Z IY1 N Z\nCUL  K AH1 L\nCULBERSON  K AH1 L - B ER0 - S AH0 N\nCULBERT  K AH1 L - B ER0 T\nCULBERTSON  K AH1 L - B ER0 T - S AH0 N\nCULBREATH  K AH1 L - B R EH2 TH\nCULBRETH  K AH1 L - B R IH0 TH\nCULBRO  K AH1 L - B R OW0\nCULHANE  K AH1 L - HH EY2 N\nCULINARY  K Y UW1 - L IH0 - N EH2 - R IY0\nCULINOVA  K Y UW2 - L IH0 - N OW1 - V AH0\nCULKIN  K AH1 L - K IH0 N\nCULL  K AH1 L\nCULLAN  K AH1 - L AH0 N\nCULLED  K AH1 L D\nCULLEN  K AH1 - L AH0 N\nCULLENS  K AH1 - L AH0 N Z\nCULLER  K AH1 - L ER0\nCULLER'S  K AH1 - L ER0 Z\nCULLERS  K AH1 - L ER0 Z\nCULLERTON  K AH1 - L ER0 - T AH0 N\nCULLERTON'S  K AH1 - L ER0 - T AH0 N Z\nCULLETON  K UW1 - L IH0 - T AA0 N\nCULLEY  K AH1 - L IY0\nCULLIFER  K AH1 - L IH0 - F ER0\nCULLIGAN  K AH1 - L IH0 - G AH0 N\nCULLIMORE  K AH1 - L IY0 - M AO0 R\nCULLIN  K AH1 - L IH0 N\nCULLINAN  K AH1 - L IH0 - N AH0 N\nCULLINANE  K AH1 - L IH0 - N EY2 N\nCULLINET  K AH2 - L IH0 - N EH1 T\nCULLING  K AH1 - L IH0 NG\nCULLINS  K AH1 - L IH0 N Z\nCULLIPHER  K AH1 - L IH0 - F ER0\nCULLISON  K AH1 - L IH0 - S AH0 N\nCULLMAN  K AH1 L - M AH0 N\nCULLOM  K AH1 - L AH0 M\nCULLOP  K AH1 - L AH0 P\nCULLUD  K AH1 - L AH0 D\nCULLUM  K AH1 - L AH0 M\nCULLUM'S  K AH1 - L AH0 M Z\nCULLY  K AH1 - L IY0\nCULMER  K AH1 L - M ER0\nCULMINATE  K AH1 L - M IH0 - N EY2 T\nCULMINATED  K AH1 L - M AH0 - N EY2 - T AH0 D\nCULMINATED(2)  K AH1 L - M AH0 - N EY2 - T IH0 D\nCULMINATES  K AH1 L - M IH0 - N EY2 T S\nCULMINATING  K AH1 L - M AH0 - N EY2 - T IH0 NG\nCULMINATION  K AH2 L - M AH0 - N EY1 - SH AH0 N\nCULP  K AH1 L P\nCULPA  K AH1 L - P AH0\nCULPABILITY  K AH2 L - P AH0 - B IH1 - L IH0 - T IY0\nCULPABLE  K AH1 L - P AH0 - B AH0 L\nCULPEPPER  K AH1 L - P IH0 - P ER0\nCULPRIT  K AH1 L - P R IH0 T\nCULPRITS  K AH1 L - P R IH0 T S\nCULT  K AH1 L T\nCULT'S  K AH1 L T S\nCULTIC  K AH1 L - T IH0 K\nCULTIST  K AH1 L - T AH0 S T\nCULTIST(2)  K AH1 L - T IH0 S T\nCULTISTS  K AH1 L - T IH0 S T S\nCULTISTS(2)  K AH1 L - T IH0 S S\nCULTIVATE  K AH1 L - T AH0 - V EY2 T\nCULTIVATED  K AH1 L - T AH0 - V EY2 - T AH0 D\nCULTIVATED(2)  K AH1 L - T IH0 - V EY2 - T IH0 D\nCULTIVATES  K AH1 L - T IH0 - V EY2 T S\nCULTIVATING  K AH1 L - T IH0 - V EY2 - T IH0 NG\nCULTIVATION  K AH2 L - T IH0 - V EY1 - SH AH0 N\nCULTON  K AH1 L - T AH0 N\nCULTS  K AH1 L T S\nCULTURAL  K AH1 L - CH ER0 - AH0 L\nCULTURALISM  K AH1 L - CH ER0 - AH0 - L IH0 - Z AH0 M\nCULTURALLY  K AH1 L - CH ER0 - AH0 - L IY0\nCULTURE  K AH1 L - CH ER0\nCULTURE'S  K AH1 L - CH ER0 Z\nCULTURED  K AH1 L - CH ER0 D\nCULTURES  K AH1 L - CH ER0 Z\nCULTURING  K AH1 L - CH ER0 - IH0 NG\nCULVAHOUSE  K AH1 L - V AH0 - HH AW2 S\nCULVER  K AH1 L - V ER0\nCULVER'S  K AH1 L - V ER0 Z\nCULVERHOUSE  K AH1 L - V ER0 - HH AW2 S\nCULVERHOUSE'S  K AH1 L - V ER0 - HH AW2 - S IH0 Z\nCULVERT  K AH1 L - V ER0 T\nCULWELL  K AH1 L - W EH2 L\nCUL_DE_SAC  K AH1 L - D IH0 - S AE2 K\nCUM  K AH1 M\nCUMBEE  K AH1 M - B IY2\nCUMBER  K AH1 M - B ER0\nCUMBERBATCH  K AH1 M - B ER0 - B AE2 CH\nCUMBERLAND  K AH1 M - B ER0 - L AH0 N D\nCUMBERLEDGE  K AH1 M - B ER0 - L EH2 JH\nCUMBERSOME  K AH1 M - B ER0 - S AH0 M\nCUMBIE  K AH1 M - B IY0\nCUMBO  K AH1 M - B OW0\nCUMBY  K AH1 M - B IY0\nCUMINGS  K UW1 - M IH0 NG Z\nCUMMING  K AH1 - M IH0 NG\nCUMMINGS  K AH1 - M IH0 NG Z\nCUMMINGTON  K AH1 - M IH0 NG - T AH0 N\nCUMMINS  K AH1 - M IH0 N Z\nCUMMINS'S  K AH1 - M IH0 N - Z IH0 Z\nCUMMISKEY  K AH1 - M IH0 S - K IY0\nCUMPSTON  K AH1 M P - S T AH0 N\nCUMPTON  K AH1 M P - T AH0 N\nCUMULATIVE  K Y UW1 - M Y AH0 - L AH0 - T IH0 V\nCUMULATIVELY  K Y UW1 - M Y AH0 - L AH0 - T IH0 V - L IY0\nCUNANAN  K Y UW0 - N AE1 - N AH0 N\nCUNARD  K Y UW1 - N ER0 D\nCUNDALL  K AH1 N - D AH0 L\nCUNDARI  K UW0 N - D AA1 - R IY0\nCUNDIFF  K AH1 N - D IH0 F\nCUNDILL  K AH1 N - D IH0 L\nCUNDY  K AH1 N - D IY0\nCUNEIFORM  K Y UW1 - N IY0 - AH0 - F AO2 R M\nCUNEO  K Y UW1 - N IY0 - OW0\nCUNHA  K AH1 N - HH AH0\nCUNLIFFE  K AH1 N - L IH0 F\nCUNNANE  K AH1 - N AH0 N\nCUNNEEN  K AH0 - N IY1 N\nCUNNIFF  K AH1 - N IH0 F\nCUNNING  K AH1 - N IH0 NG\nCUNNINGHAM  K AH1 - N IH0 NG - HH AE2 M\nCUNNINGHAM'S  K AH1 - N IH0 NG - HH AE2 M Z\nCUNNINGTON  K AH1 - N IH0 NG - T AH0 N\nCUNY  K Y UW1 - N IY0\nCUOCO  K W OW1 - K OW0\nCUOMO  K W OW1 - M OW0\nCUOMO'S  K W OW1 - M OW0 Z\nCUONG  K W AO1 NG\nCUOZZO  K W OW1 - Z OW0\nCUP  K AH1 P\nCUPBOARD  K AH1 - B ER0 D\nCUPBOARDS  K AH1 - B ER0 D Z\nCUPCAKE  K AH1 P - K EY2 K\nCUPCAKES  K AH1 P - K EY2 K S\nCUPERTINO  K UW2 - P ER0 - T IY1 - N OW0\nCUPID  K Y UW1 - P IH0 D\nCUPIDS  K Y UW1 - P IH0 D Z\nCUPIT  K Y UW1 - P IH0 T\nCUPO  K Y UW1 - P OW0\nCUPP  K AH1 P\nCUPPETT  K AH1 - P IH0 T\nCUPPLES  K AH1 - P AH0 L Z\nCUPPS  K AH1 P S\nCUPPY  K AH1 - P IY0\nCUPS  K AH1 P S\nCUR  K ER1\nCURABLE  K Y UH1 - R AH0 - B AH0 L\nCURACAO  K Y UH1 - R AH0 - S AW2\nCURATE  K Y UH1 - R AH0 T\nCURATIVE  K Y UH1 - R AH0 - T IH0 V\nCURATOLO  K UH0 - R AA0 - T OW1 - L OW0\nCURATOR  K Y UH0 - R EY1 - T ER0\nCURATOR'S  K Y UH0 - R EY1 - T ER0 Z\nCURATOR'S(2)  K Y UH1 - R AH0 - T ER0 Z\nCURATOR(2)  K Y UH1 - R AH0 - T ER0\nCURATORIAL  K Y UH2 - R AH0 - T AO1 - R IY0 - AH0 L\nCURATORS  K Y UH1 - R AH0 - T ER0 Z\nCURATORS(2)  K Y UH0 - R EY1 - T ER0 Z\nCURB  K ER1 B\nCURBED  K ER1 B D\nCURBELO  K UH0 R - B EH1 - L OW0\nCURBING  K ER1 - B IH0 NG\nCURBOW  K ER1 - B OW0\nCURBS  K ER1 B Z\nCURBSIDE  K ER1 B - S AY2 D\nCURBSTONE  K ER1 B - S T OW2 N\nCURBY  K ER1 - B IY0\nCURCI  K UH1 R - CH IY0\nCURCIO  K UH1 R - CH IY0 - OW0\nCURCURU  K UH0 R - K UH1 - R UW0\nCURD  K ER1 D\nCURE  K Y UH1 R\nCURED  K Y UH1 R D\nCURES  K Y UH1 R Z\nCURETON  K Y UH1 R - T AH0 N\nCURFEW  K ER1 - F Y UW0\nCURFEWS  K ER1 - F Y UW0 Z\nCURFMAN  K ER1 F - M AH0 N\nCURIALE  K UH0 - R IY0 - AA1 - L IY0\nCURIE  K Y UH0 - R IY1\nCURIE(2)  K Y UH1 - R IY0\nCURIEL  K Y UW1 - R IY0 L\nCURING  K Y UH1 - R IH0 NG\nCURINGTON  K Y UH1 - R IH0 NG - T AH0 N\nCURIOSITIES  K Y UH2 - R IY0 - AA1 - S AH0 - T IY0 Z\nCURIOSITY  K Y UH2 - R IY0 - AA1 - S AH0 - T IY0\nCURIOUS  K Y UH1 - R IY0 - AH0 S\nCURIOUSER  K Y UH1 - R IY0 - AH0 - S ER0\nCURIOUSLY  K Y UH1 - R IY0 - AH0 S - L IY0\nCURITIBA  K Y UH2 - IH0 - T IY1 - B AH0\nCURL  K ER1 L\nCURLE  K AO1 - R AH0 L\nCURLED  K ER1 L D\nCURLEE  K ER1 - L IY1\nCURLER  K ER1 - L ER0\nCURLERS  K ER1 - L ER0 Z\nCURLESS  K ER1 - L AH0 S\nCURLETT  K ER1 - L IH0 T\nCURLEY  K ER1 - L IY0\nCURLIN  K ER1 - L IH0 N\nCURLING  K ER1 - L IH0 NG\nCURLS  K ER1 L Z\nCURLY  K ER1 - L IY0\nCURMUDGEON  K ER0 - M AH1 - JH IH0 N\nCURNOW  K ER1 - N OW0\nCURNUTT  K ER1 - N AH0 T\nCURNUTTE  K ER0 - N AH1 T\nCURRAGH  K AH1 - R AH0\nCURRAGH(2)  K ER1 - AH0\nCURRAN  K ER1 - AH0 N\nCURREN  K ER1 - AH0 N\nCURRENCE  K ER1 - AH0 N S\nCURRENCIES  K ER1 - AH0 N - S IY0 Z\nCURRENCIES'  K ER0 - EH1 N - S IY0 Z\nCURRENCY  K ER1 - AH0 N - S IY0\nCURRENCY'S  K ER1 - AH0 N - S IY0 Z\nCURRENCYWATCH  K ER1 - AH0 N - S IY0 - W AA2 CH\nCURRENS  K ER1 - AH0 N Z\nCURRENT  K ER1 - AH0 N T\nCURRENT'S  K ER1 - AH0 N T S\nCURRENT(2)  K ER1 N T\nCURRENT(3)  K AA1 - R AH0 N T\nCURRENTLY  K ER1 - AH0 N T - L IY0\nCURRENTS  K ER1 - AH0 N T S\nCURRERI  K UH0 - R EH1 - R IY0\nCURREY  K ER1 - IY0\nCURRICULA  K ER0 - IH1 - K Y AH0 - L AH0\nCURRICULAR  K ER0 - IH1 - K Y AH0 - L ER0\nCURRICULUM  K ER0 - IH1 - K Y AH0 - L AH0 M\nCURRICULUMS  K ER0 - IH1 - K Y AH0 - L AH0 M Z\nCURRIE  K ER1 - IY0\nCURRIED  K ER1 - IY0 D\nCURRIER  K ER1 - IY0 - ER0\nCURRIES  K ER1 - IY0 Z\nCURRIN  K AO1 - R IH0 N\nCURRINGTON  K ER1 - IH0 NG - T AH0 N\nCURRO  K UH1 - R OW0\nCURRY  K AH1 - R IY0\nCURRY'S  K AH1 - R IY0 Z\nCURRY'S(2)  K ER1 - IY0 Z\nCURRY(2)  K ER1 - IY0\nCURRYING  K ER1 - IY0 - IH0 NG\nCURRYS  K AH1 - R IY0 Z\nCURRYS(2)  K ER1 - IY0 Z\nCURSE  K ER1 S\nCURSED  K ER1 S T\nCURSES  K ER1 - S IH0 Z\nCURSING  K ER1 - S IH0 NG\nCURSOR  K ER1 - S ER0\nCURSORY  K ER1 - S ER0 - IY0\nCURT  K ER1 T\nCURT'S  K ER1 T S\nCURTAIL  K ER0 - T EY1 L\nCURTAILED  K ER0 - T EY1 L D\nCURTAILING  K ER0 - T EY1 - L IH0 NG\nCURTAILMENT  K ER0 - T EY1 L - M AH0 N T\nCURTAILMENTS  K ER0 - T EY1 L - M AH0 N T S\nCURTAILS  K ER0 - T EY1 L Z\nCURTAIN  K ER1 - T AH0 N\nCURTAINS  K ER1 - T AH0 N Z\nCURTI  K UH1 R - T IY0\nCURTICE  K UH1 R - T IH0 S\nCURTIN  K ER1 - T IH0 N\nCURTIS  K ER1 - T AH0 S\nCURTIS'  K ER1 - T IH0 S\nCURTIS(2)  K ER1 - T IH0 S\nCURTISS  K ER1 - T IH0 S\nCURTLY  K ER1 T - L IY0\nCURTNER  K ER1 T - N ER0\nCURTO  K UH1 R - T OW0\nCURTRIGHT  K ER1 T - R AY2 T\nCURTS  K ER1 T S\nCURTSINGER  K ER1 T - S IH0 N - JH ER0\nCURVATURE  K ER1 - V AH0 - CH ER0\nCURVE  K ER1 V\nCURVED  K ER1 V D\nCURVES  K ER1 V Z\nCURVIN  K ER1 - V IH0 N\nCURVING  K ER1 - V IH0 NG\nCURVY  K ER1 - V IY0\nCURZIO  K ER1 - Z IY0 - OW0\nCUS  K AH1 S\nCUS(2)  S IY1 - Y UW1 - EH1 S\nCUSACK  K Y UW1 - Z AH0 K\nCUSANO  K UW0 - S AA1 - N OW0\nCUSH  K AH1 SH\nCUSH(2)  K UH1 SH\nCUSHEY  K UH1 - SH IY0\nCUSHING  K UH1 - SH IH0 NG\nCUSHION  K UH1 - SH AH0 N\nCUSHIONED  K UH1 - SH AH0 N D\nCUSHIONING  K UH1 - SH AH0 N - IH0 NG\nCUSHIONING(2)  K UH1 SH - N IH0 NG\nCUSHIONS  K UH1 - SH AH0 N Z\nCUSHITIC  K AH0 - SH IH1 - T IH0 K\nCUSHMAN  K UH1 SH - M AH0 N\nCUSHY  K UH1 - SH IY0\nCUSIANA  K Y UW2 - Z IY0 - AE1 - N AH0\nCUSIC  K Y UW1 - Z IH0 K\nCUSICK  K Y UW1 - Z IH0 K\nCUSIMANO  K UW0 - S IY0 - M AA1 - N OW0\nCUSIP  K AH1 - S IH0 P\nCUSIP(2)  K Y UW1 - S IH0 P\nCUSK  K AH1 S K\nCUSMANO  K UW0 S - M AA1 - N OW0\nCUSO  K Y UW1 - S OW0\nCUSO'S  K Y UW1 - S OW0 Z\nCUSO'S(2)  K UW1 - S OW0 Z\nCUSO(2)  K UW1 - S OW0\nCUSP  K AH1 S P\nCUSS  K AH1 S\nCUSSED  K AH1 S T\nCUSSING  K AH1 - S IH0 NG\nCUSSON  K AH1 - S AH0 N\nCUSTARD  K AH1 - S T ER0 D\nCUSTER  K AH1 - S T ER0\nCUSTER'S  K AH1 - S T ER0 Z\nCUSTIS  K AH1 - S T IH0 S\nCUSTODIAL  K AH0 - S T OW1 - D IY0 - AH0 L\nCUSTODIAN  K AH0 - S T OW1 - D IY0 - AH0 N\nCUSTODIANS  K AH0 - S T OW1 - D IY0 - AH0 N Z\nCUSTODIO  K UW0 - S T OW1 - D IY0 - OW0\nCUSTODY  K AH1 - S T AH0 - D IY0\nCUSTOM  K AH1 - S T AH0 M\nCUSTOMARILY  K AH2 - S T AH0 - M EH1 - R AH0 - L IY0\nCUSTOMARY  K AH1 - S T AH0 - M EH2 - R IY0\nCUSTOMER  K AH1 - S T AH0 - M ER0\nCUSTOMER'S  K AH1 - S T AH0 - M ER0 Z\nCUSTOMERS  K AH1 - S T AH0 - M ER0 Z\nCUSTOMERS'  K AH1 - S T AH0 - M ER0 Z\nCUSTOMIZE  K AH1 - S T AH0 - M AY2 Z\nCUSTOMIZED  K AH1 - S T AH0 - M AY2 Z D\nCUSTOMIZING  K AH1 - S T AH0 - M AY2 - Z IH0 NG\nCUSTOMS  K AH1 - S T AH0 M Z\nCUSUMANO  K UW0 - S UW0 - M AA1 - N OW0\nCUT  K AH1 T\nCUTAIA  K UW0 - T AA1 - Y AH0\nCUTAWAY  K AH1 T - AH0 - W EY0\nCUTBACK  K AH1 T - B AE2 K\nCUTBACKS  K AH1 T - B AE2 K S\nCUTBIRTH  K AH1 T - B ER2 TH\nCUTCHALL  K AH1 - CH AH0 L\nCUTCHER  K AH1 - CH ER0\nCUTCHIN  K AH1 - CH IH0 N\nCUTCHINS  K AH1 - CH IH0 N Z\nCUTE  K Y UW1 T\nCUTENESS  K Y UW1 T - N AH0 S\nCUTER  K Y UW1 - T ER0\nCUTESINESS  K Y UW1 T - S IY2 - N IH0 S\nCUTEST  K Y UW1 - T IH0 S T\nCUTESY  K Y UW1 T - S IY0\nCUTHBERT  K AH1 TH - B ER0 T\nCUTHBERTSON  K AH1 TH - B ER0 T - S AH0 N\nCUTHRELL  K AH1 - TH R AH0 L\nCUTICLE  K Y UW1 - T AH0 - K AH0 L\nCUTICLE(2)  K Y UW1 - T IH0 - K AH0 L\nCUTILLO  K Y UW2 - T IH1 - L OW0\nCUTLASS  K AH1 T - L AH0 S\nCUTLER  K AH1 T - L ER0\nCUTLER'S  K AH1 T - L ER0 Z\nCUTLERY  K AH1 T - L ER0 - IY0\nCUTLIP  K AH1 T - L IH0 P\nCUTOFF  K AH1 - T AO2 F\nCUTOFFS  K AH1 - T AO2 F S\nCUTOUT  K AH1 T - AW2 T\nCUTOUTS  K AH1 T - AW2 T S\nCUTRALE  K AH1 - T R EY2 L\nCUTRELL  K AH1 - T R AH0 L\nCUTRER  K AH1 - T R ER0\nCUTRIGHT  K AH1 T - R AY2 T\nCUTRONA  K UW0 - T R OW1 - N AH0\nCUTRONE  K UW0 - T R OW1 - N IY0\nCUTS  K AH1 T S\nCUTSFORTH  K AH1 T S - F AO2 R TH\nCUTSHALL  K AH1 - CH AH0 L\nCUTSHAW  K AH1 - CH AO2\nCUTSINGER  K AH1 T - S IH0 N - JH ER0\nCUTTER  K AH1 - T ER0\nCUTTERS  K AH1 - T ER0 Z\nCUTTHROAT  K AH1 T - TH R OW2 T\nCUTTING  K AH1 - T IH0 NG\nCUTTINGS  K AH1 - T IH0 NG Z\nCUTTINO  K UW0 - T IY1 - N OW0\nCUTTLEFISH  K AH1 - T AH0 L - F IH2 SH\nCUTTS  K AH1 T S\nCUTTY  K AH1 - T IY0\nCUTUGNO  K Y UW0 - T AH1 - N Y OW0\nCUTWORM  K AH1 T - W ER2 M\nCUTWORMS  K AH1 T - W ER2 M Z\nCUVELIER  K Y UW1 V - L IY0 - ER0\nCUYAHOGA  K AY2 - AH0 - HH OW1 - G AH0\nCUYLER  K AY1 - L ER0\nCUZZORT  K AH1 - Z ER0 T\nCWIERTNIA  K W IY1 R T - N IY0 - AH0\nCWIK  K W IH1 K\nCWIKLA  K W IH1 - K L AH0\nCWIKLINSKI  K W IH0 - K L IH1 N - S K IY0\nCWYNAR  K W IH1 - N ER0\nCXC  S IY1 - EH1 K S - S IY1\nCXC(2)  S IY1 - EH1 K - S IY1\nCY  S AY1\nCYACQ  S AY1 - AE0 K\nCYAN  S AY0 - AE1 N\nCYANAMID  S AY0 - AE1 - N AH0 - M IH0 D\nCYANAMID'S  S AY0 - AE1 - N AH0 - M IH0 D Z\nCYANAZINE  S AY1 - AH0 - N AH0 - Z IY2 N\nCYANIDE  S AY1 - AH0 - N AY2 D\nCYANIDE(2)  S AY1 - N AY2 D\nCYANURIC  S AY0 - AE1 - N ER0 - IH0 K\nCYB  S AY1 B\nCYB(2)  S IY1 - W AY1 - B IY1\nCYBER  S AY1 - B ER0\nCYBERCASH  S AY1 - B ER0 - K AE2 SH\nCYBERPORN  S AY1 - B ER0 - P AO2 R N\nCYBERSEX  S AY1 - B ER0 - S EH2 K S\nCYBERSPACE  S AY1 - B ER0 - S P EY2 S\nCYBERSPACE'S  S AY1 - B ER0 - S P EY2 - S IH0 Z\nCYBILL  S AY1 - B IH2 L\nCYBULSKI  K IH0 - B AH1 L S - K IY0\nCYCADS  S AY1 - K AE0 D Z\nCYCARE  S AY1 - K EH2 R\nCYCLADES  S AY0 - K L EY1 - D IY0 Z\nCYCLADES(2)  S AY1 - K L AE2 D Z\nCYCLE  S AY1 - K AH0 L\nCYCLED  S AY1 - K AH0 L D\nCYCLES  S AY1 - K AH0 L Z\nCYCLICAL  S AY1 - K L IH0 - K AH0 L\nCYCLICAL(2)  S IH1 - K L IH0 - K AH0 L\nCYCLICALITY  S IH2 - K L IH0 - K AE1 - L IH0 - T IY0\nCYCLICALS  S IH1 - K L IH0 - K AH0 L Z\nCYCLING  S AY1 - K AH0 L - IH0 NG\nCYCLING(2)  S AY1 - K L IH0 NG\nCYCLIST  S AY1 - K AH0 - L IH0 S T\nCYCLIST(2)  S AY1 - K L IH0 S T\nCYCLISTS  S AY1 - K AH0 - L IH0 S T S\nCYCLISTS(2)  S AY1 - K AH0 - L IH0 S S\nCYCLISTS(3)  S AY1 - K L IH0 S T S\nCYCLISTS(4)  S AY1 - K L IH0 S S\nCYCLISTS(5)  S AY1 - K AH0 - L IH0 S\nCYCLISTS(6)  S AY1 K - L IH0 S\nCYCLOHEXANE  S AY2 - K L AH0 - HH EH1 K - S EY0 N\nCYCLONE  S IH0 - K L OW1 N\nCYCLONES  S IH0 - K L OW1 N Z\nCYCLOPEAN  S AY2 - K L AH0 - P IY1 - AH0 N\nCYCLOPS  S AY1 - K L AO2 P S\nCYCLOPS'S  S AY1 - K L AO2 P - S IH0 Z\nCYCLOSPORINE  S IH0 - K L AO1 - S P ER0 - IY2 N\nCYCLOSTOME  S AY1 K - L AH0 S - T OW2 M\nCYCLOSTOMES  S AY1 K - L AH0 S - T OW2 M Z\nCYCOLOR  S IH1 - K AH0 - L ER0\nCYD  S IH1 D\nCYDONIA  S IH0 - D OW1 - N IY0 - AH0\nCYDROME  S IH0 - D R OW1 M\nCYGAN  S AY1 - G AH0 N\nCYGNE  S IH1 G - N AH0\nCYGNUS  S IH1 G - N AH0 S\nCYHEXATIN  S AY0 - HH EH1 K - S AH0 - T IH0 N\nCYLINDER  S IH1 - L AH0 N - D ER0\nCYLINDER(2)  S IH1 - L IH0 N - D ER0\nCYLINDERS  S IH1 - L AH0 N - D ER0 Z\nCYLINDRICAL  S AH0 - L IH1 N - D R IH0 - K AH0 L\nCYLINDRICAL(2)  S IH0 - L IH1 N - D R IH0 - K AH0 L\nCYMBAL  S IH1 M - B AH0 L\nCYMBALS  S IH1 M - B AH0 L Z\nCYMROT  S IH1 - M R AH0 T\nCYNARA  K IH0 N - AA1 - R AH0\nCYNDI  S IH1 N - D IY0\nCYNIC  S IH1 - N IH0 K\nCYNICAL  S IH1 - N IH0 - K AH0 L\nCYNICALLY  S IH1 - N IH0 - K AH0 - L IY0\nCYNICALLY(2)  S IH1 - N IH0 K - L IY0\nCYNICISM  S IH1 - N IH0 - S IH2 - Z AH0 M\nCYNICS  S IH1 - N IH0 K S\nCYNRIC  S IH1 N - R IH0 K\nCYNTH  S IH1 N TH\nCYNTHIA  S IH1 N - TH IY0 - AH0\nCYNTHIA'S  S IH1 N - TH IY0 - AH0 Z\nCYNTHIE  S IH1 N - TH IY0\nCYNWYD  S IH1 N - W IH0 D\nCYPERT  S AY1 - P ER0 T\nCYPHER  S AY1 - F ER0\nCYPHERS  S AY1 - F ER0 Z\nCYPHERT  S AY1 - F ER0 T\nCYPRESS  S AY1 - P R AH0 S\nCYPRESS'S  S AY1 - P R AH0 - S IH0 Z\nCYPRESS(2)  S AY1 - P R IH0 S\nCYPRIAN  S IH1 - P R IY0 - AH0 N\nCYPRIOT  S IH1 - P R IY0 - AH0 T\nCYPRIOT(2)  S IH1 - P R IY0 - AA2 T\nCYPRIOTS  S IH1 - P R IY0 - AH0 T S\nCYPRIOTS(2)  S IH1 - P R IY0 - AA2 T S\nCYPRIS  S AY1 - P R IH0 S\nCYPRUS  S AY1 - P R AH0 S\nCYR  S IH1 R\nCYRAN  K IH1 - R AH0 N\nCYRANO  K IY0 - R AA1 - N OW0\nCYRANO(2)  S IH1 - R AH0 - N OW2\nCYRENA  K IH0 - R IY1 - N AH0\nCYRIL  S IH1 - R AH0 L\nCYRILLA  S IH0 - R IH1 - L AH0\nCYRILLIC  S ER0 - IH1 - L IH0 K\nCYRIX  S AY1 - R IH2 K S\nCYRIX'S  S AY1 - R IH2 K - S IH0 Z\nCYRIX'S(2)  S IH1 - R IH0 K - S IH0 Z\nCYRIX(2)  S IH1 - R IH0 K S\nCYRUS  S AY1 - R AH0 S\nCYST  S IH1 S T\nCYSTIC  S IH1 - S T IH0 K\nCYSTS  S IH1 S T S\nCYSTS(2)  S IH1 S S\nCYSTS(3)  S IH1 S\nCYTHEREA  S IH2 - TH ER0 - IY1 - AH0\nCYTOGEN  S AY1 - T OW0 - JH EH0 N\nCYTOLOGY  S AY0 - T AA1 - L AH0 - JH IY0\nCYTOMEGALOVIRUS  S AY2 - T AH0 - M EH2 - G AH0 - L OW0 - V AY1 - R AH0 S\nCYTOPLASM  S AY1 - T AH0 - P L AE2 - Z AH0 M\nCYTOPLASMIC  S AY2 - T AH0 - P L AE1 Z - M IH0 K\nCYTOTECH  S AY1 - T OW0 - T EH2 K\nCYTOTECHS  S AY1 - T OW0 - T EH2 K S\nCYWINSKI  K IH0 - V IH1 N - S K IY0\nCZAJA  CH AY1 - AH0\nCZAJKA  CH AY1 - K AH0\nCZAJKOWSKI  CH AY0 - K AO1 F S - K IY0\nCZAPLA  CH AA1 - P L AH0\nCZAPLEWSKI  CH AH0 - P L EH1 F S - K IY0\nCZAPLICKI  CH AH0 - P L IH1 T S - K IY0\nCZAR  Z AA1 R\nCZAR'S  Z AA1 R Z\nCZARIST  Z AA1 - R IH0 S T\nCZARNECKI  CH ER0 - N EH1 T S - K IY0\nCZARNIK  CH AA1 R - N IH0 K\nCZARNY  CH AA1 R - N IY0\nCZARS  Z AA1 R Z\nCZECH  CH EH1 K\nCZECHOSLOVAK  CH EH2 - K AH0 - S L OW1 - V AA0 K\nCZECHOSLOVAKIA  CH EH2 - K AH0 - S L OW0 - V AA1 - K IY0 - AH0\nCZECHOSLOVAKIA'S  CH EH2 - K AH0 - S L OW0 - V AA1 - K IY0 - AH0 Z\nCZECHOSLOVAKIAN  CH EH2 - CH AH0 - S L OW0 - V AA1 - K IY0 - AH0 N\nCZECHOSLOVAKS  CH EH2 - K AH0 - S L OW1 - V AA0 K S\nCZECHOWSKI  CH IH0 - HH AO1 F S - K IY0\nCZECHS  CH EH1 K S\nCZEKAJEWSKI  CH EH2 - K AH0 - JH UW1 S - K IY0\nCZEPIEL  CH EH1 - P IY0 L\nCZERNIAK  CH ER1 - N IY0 - AE0 K\nCZERNY  CH ER1 - N IY0\nCZERWINSKI  CH ER0 - V IH1 N - S K IY0\nCZERWONKA  CH ER0 - V AA1 NG - K AH0\nCZESLAW  CH EH0 S - L AO1\nCZYZ  CH IH1 Z\nCZYZEWSKI  CH IH0 - Z EH1 F S - K IY0\nD  D IY1\nD'AFFAIRES  D AH0 - F EH1 R Z\nD'AGOSTINO  D AA2 - G AH0 - S T IY1 - N OW0\nD'ALENE  D AH0 - L IY1 N\nD'ALESSANDRO  D AE2 - L EH0 - S AE1 N - D R OW0\nD'ALLEST  D AE2 - L EH1 S T\nD'AMATO  D AH0 - M AA1 - T OW0\nD'AMATO'S  D AH0 - M AA1 - T OW0 Z\nD'AMERICA  D AH0 - M EH1 - R IH0 - K AH0\nD'AMICO  D AE2 - M IY0 - K OW2\nD'AMORE  D IY2 - AH0 - M AO1 - R EY0\nD'AMORE'S  D IY2 - AH0 - M AO1 - R EY0 Z\nD'ANDREA  D AE1 N - D R IY0 - AH0\nD'ANGELO  D IY0 - AE1 N - JH IH0 - L OW0\nD'ARCY  D AA1 R - S IY0\nD'AUBUISSON  D AO1 B - W IY2 - S AA2 N\nD'AVIATION  D EY2 - V IY0 - EY1 - SH AH0 N\nD'ELECTRICITE  D AH0 - L EH2 K - T R IH1 - S AH0 - T EY2\nD'ELECTRICITE(2)  D AH0 - L EH2 K - T R IH1 - S IH2 - T EY2\nD'ESCOTO  D EH0 - S K OW1 - T OW0\nD'ESTAING  D AH0 - S T EY1 NG\nD'ETAT  D EH1 - T AE2 T\nD'ETAT(2)  D EY2 - T AA1\nD'ETATS  D EY2 - T AA1 Z\nD'ETRE  D EH1 - T R IY0\nD'ETUDE  D EH1 - T UW2 D\nD'GENETTA  D IY0 - JH AH0 - N EH1 - T AH0\nD'IVOIRE  D IY0 - V W AA1 R\nD'OEUVRE  D ER1 V\nD'OEUVRES  D ER1 V Z\nD'OR  D AO1 R\nD'ORSAY  D AO2 R - S EY1\nD'S  D IY1 Z\nD'SOUZA  D IH0 - S UW1 - Z AH0\nD'SOUZA(2)  D IY0 - S UW1 - Z AH0\nD.  D IY1\nD.'S  D IY1 Z\nD.S  D IY1 Z\nDA  D AA1\nDA'S  D IY1 - EY1 Z\nDA(2)  D IY1 - EY1\nDAANE  D AA1 N\nDAB  D AE1 B\nDABAH  D AE1 - B AH0\nDABAH(2)  D AH0 - B AA1\nDABBING  D AE1 - B IH0 NG\nDABBLE  D AE1 - B AH0 L\nDABBLED  D AE1 - B AH0 L D\nDABBLES  D AE1 - B AH0 L Z\nDABBLING  D AE1 - B AH0 L - IH0 NG\nDABBLING(2)  D AE1 - B L IH0 NG\nDABBS  D AE1 B Z\nDABCHICK  D AE1 B - CH IH0 K\nDABHOL  D AE1 - B OW0 L\nDABKOWSKI  D AH0 B - K AO1 F S - K IY0\nDABNEY  D AE1 B - N IY0\nDABROWSKI  D AH0 - B R AO1 F S - K IY0\nDAC  D AE1 K\nDACE  D EY1 S\nDACEY  D EY1 - S IY0\nDACHA  D AA1 - CH AH0\nDACHAU  D AE1 - K AW0\nDACHSHUND  D AA1 K S - HH UH2 N D\nDACHSHUNDS  D AA1 K S - HH UH2 N T S\nDACIA  D EY1 - SH IY0 - AH0\nDACK  D AE1 K\nDACOSTA  D AA0 - K OW1 - S T AH0\nDACQUISTO  D AE1 - K W IH0 - S T OW0\nDACRON  D AE1 - K R AA2 N\nDACRUZ  D AA1 - K R UW0 Z\nDACS  D AE1 K S\nDACUNHA  D AH0 - K AH1 N - HH AH0\nDACUS  D AE1 - K IH0 S\nDACY  D EY1 - S IY0\nDAD  D AE1 D\nDAD'S  D AE1 D Z\nDADA  D AA1 - D AA2\nDADAMO  D AA0 - D AA1 - M OW0\nDADDARIO  D AA0 - D AA1 - R IY0 - OW0\nDADDIES  D AE1 - D IY0 Z\nDADDONA  D AA0 - D OW1 - N AH0\nDADDY  D AE1 - D IY0\nDADDY'S  D AE1 - D IY0 Z\nDADDY-O  D AE1 - D IY0 - OW0\nDADDY-O'S  D AE1 - D IY0 - OW0 Z\nDADE  D EY1 D\nDADELAND  D EY1 D - L AH0 N D\nDADFAR  D AE1 D - F AA2 R\nDADISMAN  D AE1 - D IH0 S - M AH0 N\nDADO  D EY1 - D OW2\nDADS  D AE1 D Z\nDADY  D EY1 - D IY0\nDAE  D EY1\nDAEDALUS  D EH1 - D AH0 - L AH0 S\nDAEDALUS(2)  D EY2 - D AE1 - L AH0 S\nDAELIM  D EY2 - L IY1 M\nDAEMON  D IY1 - M AH0 N\nDAEMON(2)  D EY1 - M AH0 N\nDAENZER  D EH1 N - Z ER0\nDAEWOO  D EY1 - W UW2\nDAFFERN  D AE1 - F ER0 N\nDAFFIN  D AE1 - F IH0 N\nDAFFODIL  D AE1 - F AH0 - D IH2 L\nDAFFODILS  D AE1 - F AH0 - D IH2 L Z\nDAFFRON  D AE1 - F R AH0 N\nDAFFY  D AE1 - F IY0\nDAFFYNITION  D AE2 - F IY0 - N IH1 - SH AH0 N\nDAFNA  D AE1 F - N AH0\nDAFOE  D AE1 - F OW0\nDAFSA  D AE1 F - S AH0\nDAFT  D AE1 F T\nDAG  D AE1 G\nDAGAN  D EY1 - G AH0 N\nDAGATA  D AA0 - G AA1 - T AH0\nDAGEN  D AE1 - G AH0 N\nDAGENAIS  D AE1 - ZH IH0 - N EY0\nDAGENHAM  D AE1 - G AH0 N - HH AE2 M\nDAGENHART  D AE1 - G AH0 N - HH AA2 R T\nDAGER  D EY1 - G ER0\nDAGESTAN  D AE1 - G EH0 - S T AE2 N\nDAGG  D AE1 G\nDAGGER  D AE1 - G ER0\nDAGGERS  D AE1 - G ER0 Z\nDAGGETT  D AE1 - G IH0 T\nDAGGS  D AE1 G Z\nDAGGY  D AE1 - G IY0\nDAGLE  D EY1 - G AH0 L\nDAGLEY  D AE1 G - L IY0\nDAGMAR  D AE1 G - M AA2 R\nDAGON  D EY1 - G AH0 N\nDAGOSTINO  D AA0 - G OW0 - S T IY1 - N OW0\nDAGUE  D AA1 G\nDAGWOOD  D AE1 G - W UH2 D\nDAH  D AH1\nDAHER  D AA1 - ER0\nDAHILL  D AA1 - HH IH0 L\nDAHL  D AA1 L\nDAHL'S  D AA1 L Z\nDAHLBERG  D AA1 L - B ER0 G\nDAHLE  D AA1 - AH0 L\nDAHLEM  D AA1 - L IH0 M\nDAHLEN  D AA1 - L AH0 N\nDAHLER  D AA1 - L ER0\nDAHLGREN  D AE1 L - G R IH0 N\nDAHLHEIMER  D AA1 L - HH AY2 - M ER0\nDAHLIA  D AE1 - L Y AH0\nDAHLIN  D AA1 - L IH0 N\nDAHLKE  D AA1 L K\nDAHLMAN  D AA1 L - M AH0 N\nDAHLQUIST  D AA1 L - K W IH2 S T\nDAHLSTROM  D AA1 L - S T R AH0 M\nDAHM  D AE1 M\nDAHMAN  D AA1 - M AH0 N\nDAHMEN  D AA1 - M EH0 N\nDAHMER  D AA1 - M ER0\nDAHMER'S  D AA1 - M ER0 Z\nDAHMS  D AA1 M Z\nDAHN  D AE1 N\nDAHN(2)  D AA1 N\nDAHNKE  D AE1 NG K\nDAHRAIN  D AH0 - R EY1 N\nDAI  D AY1\nDAIDO  D EY1 - D OW0\nDAIDONE  D EY1 - D OW2 N\nDAIEI  D AY1 - EY2\nDAIGLE  D EY1 - G AH0 L\nDAIGLER  D EY1 - G L ER0\nDAIGNAULT  D EH0 G - N OW1\nDAIGNEAULT  D EH0 G - N OW1\nDAIGRE  D EY1 - G ER0\nDAIGREPONT  D EY1 - G R IH0 - P AA0 N T\nDAIHATSU  D AY2 - HH AE1 T - S UW0\nDAIICHI  D AY2 - IY1 - CH IY0\nDAIKIN  D EY1 - K IH0 N\nDAIL  D EY1 L\nDAILE  D EY1 L\nDAILEY  D EY1 - L IY0\nDAILIES  D EY1 - L IY0 Z\nDAILY  D EY1 - L IY0\nDAIMLER  D EY1 M - L ER0\nDAIMLER'S  D EY1 M - L ER0 Z\nDAIMLER(2)  D EH1 M - L ER0\nDAIMONES  D EY1 - M OW2 N Z\nDAIN  D EY1 N\nDAINES  D EY1 N Z\nDAINI  D EY1 - N IY0\nDAINIPPON  D EY2 - N IH0 - P AA1 N\nDAINS  D EY1 N Z\nDAINTY  D EY1 N - T IY0\nDAIRIES  D EH1 - R IY0 Z\nDAIRY  D EH1 - R IY0\nDAIRYING  D EH1 - R IY0 - IH0 NG\nDAIRYMEN  D EY1 - R IY0 - M AH0 N\nDAIS  D EY1 Z\nDAISE  D EY1 Z\nDAISEY  D EY1 - S IY0\nDAISHOWA  D EY2 - SH AW1 - AH0\nDAISIES  D EY1 - Z IY0 Z\nDAISY  D EY1 - Z IY0\nDAISY'S  D EY1 - Z IY0 Z\nDAIWA  D EY1 - W AH0\nDAIWA'S  D EY1 - W AH0 Z\nDAJUN  D EY1 - JH AH0 N\nDAK  D AE1 K\nDAK(2)  D IY1 - EY1 - K EY1\nDAKAR  D AA0 - K AA1 R\nDAKE  D EY1 K\nDAKIN  D EY1 - K IH0 N\nDAKOTA  D AH0 - K OW1 - T AH0\nDAKOTA'S  D AH0 - K OW1 - T AH0 Z\nDAKOTAN  D AH0 - K OW1 - T AH0 N\nDAKOTANS  D AH0 - K OW1 - T AH0 N Z\nDAKOTAS  D AH0 - K OW1 - T AH0 Z\nDAL  D AE1 L\nDALAFIELD  D AE1 - L AH0 - F IY2 L D\nDALAI  D AE1 - L EY2\nDALAI(2)  D AO1 - L AY2\nDALAI(3)  D AA1 - L IY2\nDALAL  D EY1 - L AH0 L\nDALBAR  D AE1 L - B AA0 R\nDALBEC  D AE1 L - B IH0 K\nDALBERT  D AE1 L - B ER0 T\nDALBEY  D AE1 L - B IY0\nDALBY  D AO1 L - B IY0\nDALE  D EY1 L\nDALE'S  D EY1 L Z\nDALEIDEN  D AE1 - L AY0 - D AH0 N\nDALEN  D AE1 - L AH0 N\nDALEO  D AA1 - L IY0 - OW0\nDALES  D EY1 L Z\nDALESANDRO  D AA0 - L EH0 - S AA1 N - D R OW0\nDALESIO  D AH0 - L IY1 - S IY0 - OW0\nDALESSANDRO  D AA0 - L EH0 - S AA1 N - D R OW0\nDALESSIO  D AH0 - L EH1 - S IY0 - OW0\nDALETH  D AA1 - L EH2 TH\nDALEY  D EY1 - L IY0\nDALEY'S  D EY1 - L IY0 Z\nDALFEN  D AE1 L - F AH0 N\nDALFONSO  D AE2 L - F AA1 N - S OW0\nDALFORT  D AO1 L - F ER0 T\nDALGETY  D AE2 L - G EH1 - T IY0\nDALGLEISH  D AE1 L - G AH0 - L IH0 SH\nDALGLEISH(2)  D AE1 L - G L IH2 SH\nDALHOUSE  D AO1 L - HH AW2 S\nDALI  D AA1 - L IY0\nDALIA  D AA1 - L Y AH0\nDALIAN  D EY1 - L IY0 - AH0 N\nDALIBERTI  D AE0 - L AH0 - B EH1 R - T IY0\nDALILA  D AH0 - L AY1 - L AH0\nDALIS  D AE1 - L IH0 S\nDALKE  D EY1 L K\nDALKON  D AE1 L - K AH0 N\nDALL  D AO1 L\nDALLA  D AE1 - L AH0\nDALLAIRE  D AA1 - L EH0 R\nDALLARA  D AE2 - L AA1 - R AH0\nDALLAS  D AE1 - L AH0 S\nDALLAS'  D AE1 - L AH0 S\nDALLAS'S  D AE1 - L AH0 - S IH0 Z\nDALLEY  D AE1 - L IY0\nDALLHOLD  D AO1 L - HH OW2 L D\nDALLIANCE  D AE1 - L IY0 - AH0 N S\nDALLIED  D AE1 - L IY0 D\nDALLMAN  D AO1 L - M AH0 N\nDALLMANN  D AO1 L - M AH0 N\nDALLY  D AE1 - L IY0\nDALMA  D AA1 L - M AH0\nDALMAN  D AE1 L - M AH0 N\nDALMATIAN  D AE0 L - M EY1 - SH AH0 N\nDALMATIANS  D AE0 L - M EY1 - SH AH0 N Z\nDALMO  D AO1 L - M OW0\nDALO  D AA1 - L OW0\nDALOIA  D AA0 - L OW1 - Y AH0\nDALOISIO  D AA0 - L OY1 - S IY0 - OW0\nDALONZO  D AH0 - L AA1 N - Z OW0\nDALPE  D EY1 L P\nDALPIAZ  D AA0 L - P IY1 - AA0 Z\nDALPORTO  D AA0 L - P AO1 R - T OW0\nDALRYMPLE  D AE1 L - R IH0 M - P AH0 L\nDALTO  D AA1 L - T OW0\nDALTON  D AO1 L - T AH0 N\nDALTON'S  D AO1 L - T AH0 N Z\nDALTONS  D AO1 L - T AH0 N Z\nDALY  D EY1 - L IY0\nDALZELL  D AE1 L - Z AH0 L\nDALZIEL  D AE1 L - Z IY2 L\nDAM  D AE1 M\nDAM'S  D AE1 M Z\nDAMA  D AA1 - M AH0\nDAMACLEAN  D AE1 - M AH0 - K L IY0 N\nDAMAGE  D AE1 - M AH0 JH\nDAMAGE(2)  D AE1 - M IH0 JH\nDAMAGED  D AE1 - M AH0 JH D\nDAMAGED(2)  D AE1 - M IH0 JH D\nDAMAGES  D AE1 - M AH0 - JH AH0 Z\nDAMAGES(2)  D AE1 - M IH0 - JH IH0 Z\nDAMAGING  D AE1 - M IH0 - JH IH0 NG\nDAMAN  D EY1 - M AH0 N\nDAMARIS  D AH0 - M AA1 - R AH0 S\nDAMAS  D AA1 - M AH0 Z\nDAMASCUS  D AH0 - M AE1 S - K AH0 S\nDAMASCUS'S  D AH0 - M AE1 S - K AH0 - S IH0 Z\nDAMASK  D AE1 - M AH0 S K\nDAMASKS  D AE1 - M AH0 S K S\nDAMATO  D AA0 - M AA1 - T OW0\nDAMBACH  D AE1 M - B AA2 K\nDAMBACHER  D AE1 M - B AA2 - K ER0\nDAMBRA  D AE1 M - B R AH0\nDAMBROSIA  D AA0 M - B R OW1 - S IY0 - AH0\nDAMBROSIO  D AE2 M - B R OW1 - S IY0 - OW0\nDAME  D EY1 M\nDAME'S  D EY1 M Z\nDAMELIO  D AH0 - M IY1 - L IY0 - OW0\nDAMER  D EY1 - M ER0\nDAMERON  D AA0 - M EH0 - R AO1 N\nDAMES  D EY1 M Z\nDAMEWOOD  D EY1 M - W UH2 D\nDAMGARD  D AE1 M - G AA2 R D\nDAMIAN  D EY1 - M IY0 - AH0 N\nDAMIANI  D AA0 - M IY0 - AA1 - N IY0\nDAMIANO  D AA0 - M IY0 - AA1 - N OW0\nDAMICO  D AA0 - M IY1 - K OW0\nDAMIEN  D EY1 - M IY0 - AH0 N\nDAMIEN'S  D EY1 - M IY0 - AH0 N Z\nDAMIETTA  D AE2 - M IY0 - EH1 - T AH0\nDAMINOZIDE  D AE2 - M IH1 - N AH0 - Z AY2 D\nDAMITA  D AA0 - M IY1 - T AH0\nDAMITZ  D AE1 - M IH0 T S\nDAMM  D AE1 M\nDAMMAM  D AE1 - M AH0 M\nDAMMAN  D AE1 - M AH0 N\nDAMMANN  D AE1 - M AH0 N\nDAMME  D AE1 M\nDAMME(2)  D EY1 M\nDAMMED  D AE1 M D\nDAMMEN  D AE1 - M AH0 N\nDAMMER  D AE1 - M ER0\nDAMMERMAN  D AE1 - M ER0 - M AH0 N\nDAMMING  D AE1 - M IH0 NG\nDAMMIT  D AE1 - M IH0 T\nDAMN  D AE1 M\nDAMNATION  D AE0 M - N EY1 - SH AH0 N\nDAMNED  D AE1 M D\nDAMNING  D AE1 - M IH0 NG\nDAMOCLES  D AE1 - M AH0 - K L IY2 Z\nDAMON  D EY1 - M AH0 N\nDAMON'S  D EY1 - M AH0 N Z\nDAMONE  D AH0 - M OW1 N\nDAMONS  D EY1 - M AH0 N Z\nDAMOOSE  D AH0 - M UW1 S\nDAMORE  D EY1 - M AO2 R\nDAMOUR  D AH0 - M UH1 R\nDAMP  D AE1 M P\nDAMPED  D AE1 M P T\nDAMPEN  D AE1 M - P AH0 N\nDAMPENED  D AE1 M - P AH0 N D\nDAMPENING  D AE1 M - P AH0 - N IH0 NG\nDAMPENING(2)  D AE1 M P - N IH0 NG\nDAMPER  D AE1 M - P ER0\nDAMPERS  D AE1 M - P ER0 Z\nDAMPIER  D AE1 M - P IY0 - ER0\nDAMPING  D AE1 M - P IH0 NG\nDAMPNESS  D AE1 M P - N IH0 S\nDAMPS  D AE1 M P S\nDAMRON  D AE1 - M R AH0 N\nDAMROW  D AE1 M - R OW2\nDAMS  D AE1 M Z\nDAMSEL  D AE1 M - Z AH0 L\nDAMSON  D AE1 M - S AH0 N\nDAMUTH  D AE1 - M UW0 TH\nDAN  D AE1 N\nDAN'S  D AE1 N Z\nDANA  D EY1 - N AH0\nDANA'S  D EY1 - N AH0 Z\nDANAHER  D AE1 - N AH0 - HH ER0\nDANAHY  D AE1 - N AH0 - HH IY0\nDANBURY  D AE1 N - B ER0 - IY0\nDANBY  D AE1 N - B IY0\nDANCA  D AA1 NG - K AH0\nDANCANET  D AE2 NG - K AH0 - N EH1 T\nDANCE  D AE1 N S\nDANCED  D AE1 N S T\nDANCER  D AE1 N - S ER0\nDANCER'S  D AE1 N - S ER0 Z\nDANCERS  D AE1 N - S ER0 Z\nDANCERS'  D AE1 N - S ER0 Z\nDANCES  D AE1 N - S AH0 Z\nDANCES(2)  D AE1 N - S IH0 Z\nDANCEY  D AE1 N - S IY0\nDANCIN'  D AE1 N - S IH0 N\nDANCING  D AE1 N - S IH0 NG\nDANCSAK  D AE1 N K - S AE0 K\nDANCY  D AE1 N - S IY0\nDANDELION  D AE1 N - D AH0 - L AY2 - AH0 N\nDANDELIONS  D AE1 N - D AH0 - L AY2 - AH0 N Z\nDANDENEAU  D AE1 N - D IH0 - N OW0\nDANDO  D AE1 N - D OW0\nDANDREA  D AE1 N - D R IY0 - AH0\nDANDRIDGE  D AE1 N - D R IH0 JH\nDANDRUFF  D AE1 N - D R AH0 F\nDANDURAND  D AE1 N - D ER0 - AH0 N D\nDANDY  D AE1 N - D IY0\nDANDYISM  D AE1 N - D IY0 - IH2 - Z AH0 M\nDANE  D EY1 N\nDANE'S  D EY1 N Z\nDANEK  D AE1 - N IH0 K\nDANELLA  D AH0 - N EH1 - L AH0\nDANELLE  D AH0 - N EH1 L\nDANER  D EY1 - N ER0\nDANES  D EY1 N Z\nDANESE  D AA0 - N EY1 - Z IY0\nDANEY  D EY1 - N IY0\nDANFORD  D AE1 N - F ER0 D\nDANFORTH  D AE1 N - F ER0 TH\nDANG  D AE1 NG\nDANGEL  D EY1 NG - G AH0 L\nDANGELO  D AE1 N - JH AH0 - L OW0\nDANGER  D EY1 N - JH ER0\nDANGERFIELD  D EY1 N - JH ER0 - F IY2 L D\nDANGEROUS  D EY1 N - JH ER0 - AH0 S\nDANGEROUSLY  D EY1 N - JH ER0 - AH0 S - L IY0\nDANGERS  D EY1 N - JH ER0 Z\nDANGEWS  D EY1 N - JH UW0 Z\nDANGLE  D AE1 NG - G AH0 L\nDANGLED  D AE1 NG - G AH0 L D\nDANGLER  D AE1 NG - G AH0 - L ER0\nDANGLER(2)  D AE1 NG - G L ER0\nDANGLES  D AE1 NG - G AH0 L Z\nDANGLING  D AE1 NG - G AH0 - L IH0 NG\nDANGLING(2)  D AE1 NG - G L IH0 NG\nDANGO  D AE1 NG - G OW0\nDANI  D AA1 - N IY0\nDANIA  D EY1 - N Y AH0\nDANICA  D AE1 - N IH0 - K AH0\nDANIEL  D AE1 - N Y AH0 L\nDANIEL'S  D AE1 - N Y AH0 L Z\nDANIELA  D AE0 - N Y EH1 - L AH0\nDANIELE  D AE0 - N Y EH1 L\nDANIELL  D AE1 - N IY0 L\nDANIELLA  D AE2 - N Y EH1 - L AH0\nDANIELLE  D AE2 - N IY0 - EH1 L\nDANIELLE(2)  D AE2 - N Y EH1 L\nDANIELLO  D AA0 - N IY0 - EH1 - L OW0\nDANIELS  D AE1 - N Y AH0 L Z\nDANIELS'S  D AE1 - N Y AH0 L - Z IH0 Z\nDANIELS'S(2)  D AE2 - N Y EH1 L - Z IH0 Z\nDANIELSEN  D AE1 - N Y AH0 L - S AH0 N\nDANIELSKI  D AH0 - N IY1 L - S K IY0\nDANIELSON  D AE1 - N Y AH0 L - S AH0 N\nDANILOFF  D AE1 - N AH0 - L AO0 F\nDANIS  D AA1 - N IY0 Z\nDANISH  D EY1 - N IH0 SH\nDANJU  D AE1 N - JH UW0\nDANJU'S  D AE1 N - JH UW0 Z\nDANJUB  D AE1 N - JH UW0 B\nDANJUB'S  D AE1 N - JH UW0 B Z\nDANJUBE  D AE1 N - JH UW0 B\nDANJUBE'S  D AE1 N - JH UW0 B Z\nDANJUS  D AE1 N - JH AH0 S\nDANJUS(2)  D AE1 N - JH UW0 Z\nDANK  D AE1 NG K\nDANKER  D AE1 NG - K ER0\nDANKERT  D AE1 NG - K ER0 T\nDANKNER  D AE1 NG K - N ER0\nDANKO  D AE1 NG - K OW0\nDANKS  D AE1 NG K S\nDANLEY  D AE1 N - L IY0\nDANLY  D AE1 N - L IY0\nDANN  D AE1 N\nDANNA  D AE1 - N AH0\nDANNELLY  D AE1 - N AH0 - L IY0\nDANNELS  D AE1 - N AH0 L Z\nDANNEMEYER  D AE1 - N AH0 - M AY2 R\nDANNEMEYER(2)  D AE1 N - M AY2 R\nDANNEMILLER  D AE1 - N AH0 - M IH2 - L ER0\nDANNEMILLER(2)  D AE1 N - M IH2 - L ER0\nDANNEN  D AE1 - N AH0 N\nDANNENBERG  D AE1 - N AH0 N - B ER0 G\nDANNER  D AE1 - N ER0\nDANNERS  D AE1 - N ER0 Z\nDANNIE  D AE1 - N IY0\nDANNUNZIO  D AA0 - N UW1 N - Z IY0 - OW0\nDANNY  D AE1 - N IY0\nDANNY'S  D AE1 - N IY0 Z\nDANO  D AA1 - N OW0\nDANOS  D EY1 - N OW0 Z\nDANOWSKI  D AH0 - N AO1 F S - K IY0\nDANSBY  D AE1 N S - B IY0\nDANSER  D AE1 N - S ER0\nDANSEREAU  D AE1 N - S ER0 - OW2\nDANSFORTH  D AE1 N S - F AO1 R TH\nDANSFORTH'S  D AE1 N S - F AO1 R TH S\nDANSIE  D AE1 N - S IY0\nDANSKE  D AE1 N S K\nDANSKIN  D AE1 N - S K IH0 N\nDANSKY  D AE1 N S - K IY0\nDANSON  D AE1 N - S AH0 N\nDANSTETT  D AE1 N - S T EH0 T\nDANSVILLE  D AE1 N Z - V IH0 L\nDANSVILLE'S  D AE1 N Z - V IH0 L Z\nDANT  D AE1 N T\nDANTE  D AA1 N - T EY0\nDANTE'S  D AE1 N - T IY0 Z\nDANTIN  D AE1 N - T IH0 N\nDANTON  D AE1 N - T AH0 N\nDANTONI  D AA0 N - T OW1 - N IY0\nDANTONIO  D AE2 N - T OW1 - N IY0 - OW0\nDANTRELL  D AE2 N - T R EH1 L\nDANTUONO  D AA0 N - T W OW1 - N OW0\nDANTZLER  D AE1 N T S - L ER0\nDANUBE  D AE1 - N Y UW0 B\nDANVERS  D AE1 N - V ER0 Z\nDANVILLE  D AE1 N - V IH2 L\nDANVY  D AE1 N - V IY0\nDANYLYSZYN  D AE2 - N IH0 - L IY1 - Z IH0 N\nDANZ  D AE1 N Z\nDANZA  D AE1 N - Z AH0\nDANZER  D AE1 N - Z ER0\nDANZIG  D AE1 N - Z IH0 G\nDANZIGER  D AE1 N - Z IH0 - G ER0\nDANZY  D AE1 N - Z IY0\nDAO  D AW1\nDAOUD  D AW1 D\nDAOUST  D AW1 S T\nDAPHNE  D AE1 F - N IY0\nDAPHNE'S  D AE1 F - N IY0 Z\nDAPHNIS  D AE1 F - N AH0 S\nDAPICE  D AA1 - P IH0 S\nDAPOLITO  D AA0 - P OW0 - L IY1 - T OW0\nDAPONTE  D AA0 - P OW1 N - T EY0\nDAPOZZO  D AH0 - P AA1 - Z OW2\nDAPP  D AE1 P\nDAPPER  D AE1 - P ER0\nDAPUZZO  D AH0 - P AH1 - Z OW0\nDAQUILA  D AA0 K - W IY1 - L AH0\nDAR  D AA1 R\nDARA  D AE1 - R AH0\nDARAK  D EH1 - R AE0 K\nDARBLAY  D AA1 R - B L EY0\nDARBONNE  D AA1 R - B AH0 N\nDARBY  D AA1 R - B IY0\nDARBY'S  D AA1 R - B IY0 Z\nDARBYSHIRE  D AA1 R - B IH0 - SH AY2 R\nDARCANGELO  D AA0 R - K AA0 NG - G EH1 - L OW0\nDARCEY  D AA1 R - S IY0\nDARCIE  D AA1 R - K IY0\nDARCO  D AA1 R - K OW0\nDARCY  D AA1 R - S IY0\nDARDAR  D AA0 R - D AA1 R\nDARDEN  D AA1 R - D AH0 N\nDARDEN'S  D AA1 R - D AH0 N Z\nDARDIS  D AA1 R - D IH0 S\nDARE  D EH1 R\nDARED  D EH1 R D\nDAREDEVIL  D EH1 R - D EH2 - V AH0 L\nDAREMBLUM  D EH1 - R AH0 M - B L UW2 M\nDAREN  D AE1 - R IH0 N\nDARENSBOURG  D AE1 - R IH0 N S - B ER0 G\nDARENSBOURG(2)  D AE1 - R AH0 N Z - B ER0 G\nDARES  D EH1 R Z\nDARESAY  D EH1 R - S EY0\nDARGA  D AA1 R - G AH0\nDARGAN  D AA1 R - G AH0 N\nDARGIS  D AA1 R - G IH0 S\nDARIA  D AA1 - R IY0 - AH0\nDARICE  D AA1 - R IH0 S\nDARIEN  D EH1 - R IY0 - AH0 N\nDARIENZO  D AA0 - R IY1 N - Z OW0\nDARIN  D AE1 - R IH0 N\nDARING  D EH1 - R IH0 NG\nDARIO  D EH1 - R IY0 - OW2\nDARITY  D AE1 - R IH0 - T IY0\nDARIUS  D ER0 - AY1 - AH0 S\nDARJEELING  D AA2 R - JH IY1 - L IH0 NG\nDARJEELING(2)  D AA2 R - ZH IY1 - L IH0 NG\nDARK  D AA1 R K\nDARKE  D AA1 R K\nDARKEN  D AA1 R - K AH0 N\nDARKENED  D AA1 R - K AH0 N D\nDARKENING  D AA1 R - K AH0 - N IH0 NG\nDARKENING(2)  D AA1 R K - N IH0 NG\nDARKER  D AA1 R - K ER0\nDARKEST  D AA1 R - K AH0 S T\nDARKIE  D AA1 R - K IY0\nDARKLY  D AA1 R K - L IY0\nDARKNESS  D AA1 R K - N AH0 S\nDARKROOM  D AA1 R K - R UW2 M\nDARLAND  D AA1 R - L AH0 N D\nDARLENE  D AA1 R - L IY2 N\nDARLEY  D AA1 R - L IY0\nDARLIN  D AA1 R - L IH0 N\nDARLINE  D AA1 R - L AY2 N\nDARLING  D AA1 R - L IH0 NG\nDARLINGS  D AA1 R - L IH0 NG Z\nDARLINGTON  D AA1 R - L IH0 NG - T AH0 N\nDARMAN  D AA1 R - M AH0 N\nDARMAN'S  D AA1 R - M AH0 N Z\nDARMSTADT  D AA1 R M - S T AE2 T\nDARN  D AA1 R N\nDARNALL  D AA1 R - N AH0 L\nDARNED  D AA1 R N D\nDARNEDEST  D AA1 R N - D EH0 S T\nDARNEDEST(2)  D AA1 R - N EH0 S T\nDARNEL  D AA1 R - N AH0 L\nDARNELL  D AA0 R - N EH1 L\nDARNER  D AA1 R - N ER0\nDARNOLD  D AA1 R - N OW2 L D\nDARNS  D AA1 R N Z\nDAROCHA  D AA0 - R OW1 - K AH0\nDAROSA  D AA0 - R OW1 - S AH0\nDARPA  D AA1 R - P AH0\nDARPINO  D AA0 R - P IY1 - N OW0\nDARR  D EH1 R\nDARR(2)  D AA1 R\nDARRAGH  D EH1 - R AH0\nDARRAH  D AE1 - R AH0\nDARRELL  D EH1 - R AH0 L\nDARRELLE  D ER0 - EH1 L\nDARREN  D AA1 - R AH0 N\nDARRICK  D AE1 - R IH0 K\nDARRIGO  D AA2 - R IY1 - G OW0\nDARRINGTON  D AE1 - R IH0 NG - T AH0 N\nDARROCH  D AE1 - R AH0 K\nDARROUGH  D AE1 - R AW0\nDARROW  D EH1 - R OW0\nDARRYL  D EH1 - R AH0 L\nDARSEY  D AA1 R - S IY0\nDARST  D AA1 R S T\nDARSY  D AA1 R - S IY0\nDART  D AA1 R T\nDART'S  D AA1 R T S\nDARTBOARD  D AA1 R T - B AO2 R D\nDARTED  D AA1 R - T IH0 D\nDARTER  D AA1 R - T ER0\nDARTEZ  D AA0 R - T EH1 Z\nDARTH  D AA1 R TH\nDARTING  D AA1 R - T IH0 NG\nDARTMOUTH  D AA1 R T - M AH0 TH\nDARTMOUTH'S  D AA1 R T - M AH0 TH S\nDARTON  D AA1 R - T AH0 N\nDARTS  D AA1 R T S\nDARTT  D AA1 R T\nDARTY  D AA1 R - T IY0\nDARTY'S  D AA1 R - T IY0 Z\nDARVILLE  D AA1 R - V IH2 L\nDARWIN  D AA1 R - W IH0 N\nDARWINIAN  D AA2 R - W IH1 - N IY0 - AH0 N\nDARWINISM  D AA1 R - W IH0 - N IH2 - Z AH0 M\nDARWISH  D AA1 R - W IH0 SH\nDARYL  D EH1 - R AH0 L\nDAS  D AE1 S\nDASA  D AA1 - S AH0\nDASA(2)  D AE1 - S AH0\nDASARO  D AA0 - S AA1 - R OW0\nDASBURG  D AE1 S - B ER0 G\nDASCENZO  D AA0 S - CH EH1 N - Z OW0\nDASCH  D AE1 SH\nDASCHLE  D AE1 SH - L IY0\nDASCOLI  D AA0 - S K OW1 - L IY0\nDASE  D EY1 Z\nDASEKE  D EY1 - S AH0 - K IY0\nDASH  D AE1 SH\nDASHBOARD  D AE1 SH - B AO2 R D\nDASHBOARDS  D AE1 SH - B AO2 R D Z\nDASHED  D AE1 SH T\nDASHEL  D AE1 - SH AH0 L\nDASHELL  D AE1 - SH AH0 L\nDASHER  D AE1 - SH ER0\nDASHES  D AE1 - SH IH0 Z\nDASHIELL  D AE1 - SH IY0 L\nDASHIKI  D AH0 - SH IY1 - K IY0\nDASHING  D AE1 - SH IH0 NG\nDASHNAW  D AE1 SH - N AO0\nDASHNER  D AE1 SH - N ER0\nDASHVILLE  D AE1 SH - V IH2 L\nDASHWOOD  D AE1 SH - W UH2 D\nDASILVA  D AH0 - S IH1 L - V AH0\nDASPIN  D AE1 - S P IH0 N\nDASPIT  D AE1 - S P IH0 T\nDASS  D AE1 S\nDASSAULT  D AE1 - S AO0 L T\nDASSAULT'S  D AE1 - S AO0 L T S\nDASSLER  D AE1 S - L ER0\nDASSOW  D AE1 - S OW0\nDASTARDLY  D AE1 - S T ER0 D - L IY0\nDAT  D AE1 T\nDATA  D EY1 - T AH0\nDATA'S  D EY1 - T AH0 Z\nDATA'S(2)  D AE1 - T AH0 Z\nDATA(2)  D AE1 - T AH0\nDATABASE  D EY1 - T AH0 - B EY2 S\nDATABASE(2)  D AE1 - T AH0 - B EY2 S\nDATABASES  D EY1 - T AH0 - B EY2 - S IH0 Z\nDATABASES(2)  D AE1 - T AH0 - B EY2 - S IH0 Z\nDATACARD  D EY1 - T AH0 - K AA2 R D\nDATACARD(2)  D AE1 - T AH0 - K AA2 R D\nDATACOMM  D EY1 - T AH0 - K AA2 M\nDATACOMM(2)  D AE1 - T AH0 - K AA2 M\nDATACOMP  D EY1 - T AH0 - K AA2 M P\nDATACOMP(2)  D AE1 - T AH0 - K AA2 M P\nDATACOPY  D EY1 - T AH0 - K AA2 - P IY0\nDATACOPY(2)  D AE1 - T AH0 - K AA2 - P IY0\nDATAGRAPHIX  D EY1 - T AH0 - G R AE2 - F IH0 K S\nDATAGRAPHIX(2)  D EY1 - T AH0 - G R AE2 - F IH0 K S\nDATAMETRICS  D EY1 - T AH0 - M EH2 - T R IH0 K S\nDATAMETRICS(2)  D AE1 - T AH0 - M EH2 - T R IH0 K S\nDATAPOINT  D EY1 - T AH0 - P OY1 N T\nDATAPOINT'S  D EY1 - T AH0 - P OY1 N T S\nDATAPOINT'S(2)  D AE1 - T AH0 - P OY1 N T S\nDATAPOINT(2)  D AE1 - T AH0 - P OY1 N T\nDATAPOWER  D EY1 - T AH0 - P AW2 R\nDATAPOWER(2)  D AE1 - T AH0 - P AW2 R\nDATAPRODUCTS  D EY1 - T AH0 - P R AA2 - D AH0 K T S\nDATAPRODUCTS'  D EY1 - T AH0 - P R AO2 - D AH0 K T S\nDATAPRODUCTS'(2)  D AE1 - T AH0 - P R AO2 - D AH0 K T S\nDATAQUEST  D EY1 - T AH0 - K W EH2 S T\nDATAQUEST'S  D EY1 - T AH0 - K W EH2 S T S\nDATAQUEST'S(2)  D AE1 - T AH0 - K W EH2 S T S\nDATAQUEST(2)  D AE1 - T AH0 - K W EH2 S T\nDATARAM  D EY1 - T ER0 - AE2 M\nDATARAM(2)  D AE1 - T ER0 - AE2 M\nDATAREX  D EY1 - T ER0 - EH2 K S\nDATAREX(2)  D AE1 - T ER0 - EH2 K S\nDATAS  D EY1 - T AH0 Z\nDATAS(2)  D AE1 - T AH0 Z\nDATE  D EY1 T\nDATED  D EY1 - T IH0 D\nDATEK  D AE1 - T EH0 K\nDATELINE  D EY1 T - L AY2 N\nDATELINE'S  D EY1 T - L AY2 N Z\nDATELINES  D EY1 T - L AY2 N Z\nDATES  D EY1 T S\nDATEXT  D AE1 - T EH2 K S T\nDATING  D EY1 - T IH0 NG\nDATO  D AA1 - T OW0\nDATRON  D AE1 - T R AH0 N\nDATS  D AE1 T S\nDATSUN  D AE1 T - S AH0 N\nDATSUN'S  D AE1 T - S AH0 N Z\nDATSUN'S(2)  D AA1 T - S AH0 N Z\nDATSUN(2)  D AA1 T - S AH0 N\nDATTILIO  D AA0 - T IY1 - L IY0 - OW0\nDATTILO  D AA0 - T IY1 - L OW0\nDATUK  D AA1 - T UW2 K\nDATUM  D AE1 - T AH0 M\nDATUM(2)  D EY1 - T AH0 M\nDATURA  D AH0 - T UH1 - R AH0\nDATZ  D AE1 T S\nDAU  D OW1\nDAUB  D AO1 B\nDAUBE  D AO1 B\nDAUBED  D AO1 B D\nDAUBENSPECK  D AW1 - B IH0 N - S P IH0 K\nDAUBER  D AW1 - B ER0\nDAUBERT  D AW1 - B ER0 T\nDAUCH  D AW1 CH\nDAUDELIN  D OW1 - D IH0 - L AE0 N\nDAUENHAUER  D AW1 - AH0 N - HH AW0 - ER0\nDAUER  D AW1 - ER0\nDAUFUSKIE  D OW1 - F AH2 S - K IY0\nDAUGHDRILL  D AO1 - D R IH0 L\nDAUGHENBAUGH  D AO0 - EH1 N - B AO0\nDAUGHERTY  D AA1 - K ER0 - T IY0\nDAUGHETY  D AO1 - IH0 - T IY0\nDAUGHNEY  D AO1 - N IY0\nDAUGHTER  D AO1 - T ER0\nDAUGHTER'S  D AO1 - T ER0 Z\nDAUGHTERS  D AO1 - T ER0 Z\nDAUGHTERS'  D AO1 - T ER0 Z\nDAUGHTERY  D AO1 - T ER0 - IY0\nDAUGHTON  D AO1 - T AH0 N\nDAUGHTREY  D AO1 - T R IY0\nDAUGHTRIDGE  D AO1 - T R IH0 JH\nDAUGHTRY  D AO1 - T R IY0\nDAUL  D AO1 L\nDAULT  D AO1 L T\nDAULTON  D AO1 L - T AH0 N\nDAUM  D AO1 M\nDAUN  D AO1 N\nDAUNT  D AO1 N T\nDAUNTED  D AO1 N - T IH0 D\nDAUNTING  D AO1 N - T IH0 NG\nDAUPHIN  D AW1 - F IH0 N\nDAUPHINAIS  D OW1 - F IH0 - N EY0\nDAUPHINEE  D AO0 - F IH0 - N IY1\nDAURIA  D AO1 - R IY0 - AH0\nDAUS  D AO1 Z\nDAUSTER  D AW1 - S T ER0\nDAUTERIVE  D OW1 - T ER0 - IH0 V\nDAUZAT  D AW1 - Z AH0 T\nDAVALOS  D AA0 - V AA1 - L OW0 Z\nDAVANZO  D AH0 - V AE1 N - Z OW0\nDAVAO  D AH0 - V OW1\nDAVAO(2)  D EY1 - V OW0\nDAVAULT  D AH0 - V OW1\nDAVCO  D AE1 V - K OW0\nDAVE  D EY1 V\nDAVE'S  D EY1 V Z\nDAVEE  D AE1 - V IY0\nDAVENPORT  D AE1 - V AH0 N - P AO2 R T\nDAVENPORT'S  D AE1 - V AH0 N - P AO2 R T S\nDAVERN  D AE1 - V ER0 N\nDAVERSA  D AA0 - V EH1 R - S AH0\nDAVES  D EY1 V Z\nDAVEY  D EY1 - V IY0\nDAVI  D AA1 - V IY0\nDAVIA  D AA1 - V IY0 - AH0\nDAVID  D EY1 - V IH0 D\nDAVID'S  D EY1 - V IH0 D Z\nDAVIDA  D AA0 - V IY1 - D AH0\nDAVIDE  D AH2 - V IY1 - D EY2\nDAVIDGE  D AE1 - V IH0 JH\nDAVIDIAN  D AH0 - V IH1 - D IY0 - AH0 N\nDAVIDIAN'S  D AH0 - V IH1 - D IY0 - AH0 N Z\nDAVIDIANS  D AH0 - V IH1 - D IY0 - AH0 N Z\nDAVIDOFF  D EY1 - V IH0 D - AO0 F\nDAVIDOW  D AE1 - V IH0 - D OW0\nDAVIDS  D EY1 - V IH0 D Z\nDAVIDSON  D EY1 - V IH0 D - S AH0 N\nDAVIDSON'S  D EY1 - V IH0 D - S AH0 N Z\nDAVIE  D EY1 - V IY0\nDAVIES  D EY1 - V IY0 Z\nDAVIGNON  D AA0 - V IY0 G - N AO1 N\nDAVILA  D AH0 - V IH1 - L AH0\nDAVILLA  D AH0 - V IH1 - L AH0\nDAVIN  D AE1 - V IH0 N\nDAVINA  D AA0 - V IY1 - N AH0\nDAVINO  D AA0 - V IY1 - N OW0\nDAVIO'S  D AE1 - V IY0 - OW0 Z\nDAVIS  D EY1 - V AH0 S\nDAVIS'  D EY1 - V AH0 S\nDAVIS'(2)  D EY1 - V AH0 - S AH0 Z\nDAVIS'S  D EY1 - V AH0 - S AH0 Z\nDAVIS'S(2)  D EY1 - V IH0 - S IH0 Z\nDAVIS(2)  D EY1 - V IH0 S\nDAVISON  D EY1 - V IH0 - S AH0 N\nDAVISSON  D AE1 - V IH0 - S AH0 N\nDAVITT  D AH0 - V IH1 T\nDAVLIN  D AE1 V - L IH0 N\nDAVOLI  D AA0 - V OW1 - L IY0\nDAVOS  D AA1 - V OW0 S\nDAVOX  D AE1 - V AA0 K S\nDAVY  D EY1 - V IY0\nDAVYDOV  D EY1 - V IH0 - D AO2 V\nDAW  D AO1\nDAWDLE  D AO1 - D AH0 L\nDAWDLING  D AO1 D - L IH0 NG\nDAWDY  D AO1 - D IY0\nDAWE  D AO1\nDAWES  D AO1 Z\nDAWIT  D AE1 - W IH0 T\nDAWKINS  D AO1 - K IH0 N Z\nDAWLEY  D AO1 - L IY0\nDAWN  D AO1 N\nDAWN'S  D AO1 N Z\nDAWNED  D AO1 N D\nDAWNING  D AO1 - N IH0 NG\nDAWNS  D AO1 N Z\nDAWS  D AO1 Z\nDAWSEY  D AO1 - S IY0\nDAWSON  D AO1 - S AH0 N\nDAWSON'S  D AO1 - S AH0 N Z\nDAX  D AE1 K S\nDAX'  D AE1 K S\nDAX'S  D AE1 K - S IH0 Z\nDAXOR  D AE1 K - S ER0\nDAY  D EY1\nDAY'S  D EY1 Z\nDAYA  D AY1 - AH0\nDAYA'S  D AY1 - AH0 Z\nDAYAN  D EY1 - AH0 N\nDAYBREAK  D EY1 - B R EY2 K\nDAYCARE  D EY1 - K EH2 R\nDAYCO  D EY1 - K OW0\nDAYDREAM  D EY1 - D R IY2 M\nDAYDREAMED  D EY1 - D R IY2 M D\nDAYDREAMING  D EY1 - D R IY2 - M IH0 NG\nDAYE  D EY1\nDAYHOFF  D EY1 - HH AO0 F\nDAYHUFF  D EY1 - HH AH2 F\nDAYLE  D EY1 L\nDAYLEY  D EY1 - L IY0\nDAYLIGHT  D EY1 - L AY2 T\nDAYLIGHTS  D EY1 - L AY2 T S\nDAYLONG  D EY1 - L AO2 NG\nDAYNARD  D EY1 - N ER0 D\nDAYNE  D EY1 N\nDAYS  D EY1 Z\nDAYS'  D EY1 Z\nDAYTIME  D EY1 - T AY2 M\nDAYTIMES  D EY1 - T AY2 M Z\nDAYTON  D EY1 - T AH0 N\nDAYTON'S  D EY1 - T AH0 N Z\nDAYTONA  D EY0 - T OW1 - N AH0\nDAYTOP  D EY1 - T AA2 P\nDAYWALT  D EY1 - W AH0 L T\nDAZE  D EY1 Z\nDAZED  D EY1 Z D\nDAZEY  D EY1 - Z IY0\nDAZS  D AA1 S\nDAZZLE  D AE1 - Z AH0 L\nDAZZLED  D AE1 - Z AH0 L D\nDAZZLING  D AE1 - Z AH0 L - IH0 NG\nDAZZLING(2)  D AE1 Z - L IH0 NG\nDAZZO  D AE1 - Z OW0\nDBASE  D IY1 - B EY2 S\nDDT  D IY2 - D IY2 - T IY1\nDE  D IY1\nDE(2)  D EY1\nDE(3)  D AH0\nDE-EXCITE  D IY1 - IH0 K - S AY1 T\nDE-EXCITES  D IY1 - IH0 K - S AY1 T S\nDEA  D IY1\nDEACON  D IY1 - K AH0 N\nDEACONESS  D IY1 - K AH0 - N AH0 S\nDEACONS  D IY1 - K AH0 N Z\nDEACTIVATE  D IY2 - AE1 K - T IH0 - V EY2 T\nDEACTIVATED  D IY2 - AE1 K - T IH0 - V EY2 - T IH0 D\nDEAD  D EH1 D\nDEADBEAT  D EH1 D - B IY2 T\nDEADBEATS  D EH1 D - B IY2 T S\nDEADBOLT  D EH1 D - B OW2 L T\nDEADEN  D EH1 - D AH0 N\nDEADENING  D EH1 - D AH0 N - IH0 NG\nDEADENING(2)  D EH1 D - N IH0 NG\nDEADER  D EH1 - D ER0\nDEADHEAD  D EH1 D - HH EH2 D\nDEADHEADS  D EH1 D - HH EH2 D Z\nDEADLIER  D EH1 D - L IY0 - ER0\nDEADLIEST  D EH1 D - L IY0 - AH0 S T\nDEADLINE  D EH1 D - L AY2 N\nDEADLINES  D EH1 D - L AY2 N Z\nDEADLINESS  D EH1 D - L IY0 - N AH0 S\nDEADLOCK  D EH1 D - L AA2 K\nDEADLOCKED  D EH1 D - L AA2 K T\nDEADLOCKS  D EH1 D - L AA2 K S\nDEADLY  D EH1 D - L IY0\nDEADPAN  D EH1 D - P AE2 N\nDEADWEIGHT  D EH1 D - W EY2 T\nDEADWOOD  D EH1 D - W UH2 D\nDEADWYLER  D EH1 D - W AY2 - L ER0\nDEADY  D EH1 - D IY0\nDEAF  D EH1 F\nDEAFEN  D EH1 - F AH0 N\nDEAFENING  D EH1 - F AH0 N - IH0 NG\nDEAFENING(2)  D EH1 F - N IH0 NG\nDEAFNESS  D EH1 F - N AH0 S\nDEAHL  D IY1 L\nDEAK  D IY1 K\nDEAK'S  D IY1 K S\nDEAKIN  D IY1 - K IH0 N\nDEAKINS  D IY1 - K IH0 N Z\nDEAL  D IY1 L\nDEAL'S  D IY1 L Z\nDEALBA  D IY2 - AE1 L - B AH0\nDEALE  D IY1 L\nDEALER  D IY1 - L ER0\nDEALER'S  D IY1 - L ER0 Z\nDEALERLINE  D IY1 - L ER0 - L AY2 N\nDEALERS  D IY1 - L ER0 Z\nDEALERS'  D IY1 - L ER0 Z\nDEALERSHIP  D IY1 - L ER0 - SH IH2 P\nDEALERSHIP'S  D IY1 - L ER0 - SH IH2 P S\nDEALERSHIPS  D IY1 - L ER0 - SH IH2 P S\nDEALEY  D IY1 - L IY0\nDEALFISH  D IY1 L - F IH2 SH\nDEALING  D IY1 - L IH0 NG\nDEALINGS  D IY1 - L IH0 NG Z\nDEALMAKER  D IY1 L - M EY2 - K ER0\nDEALMAKERS  D IY1 L - M EY2 - K ER0 Z\nDEALMAKING  D IY1 L - M EY2 - K IH0 NG\nDEALMEIDA  D AH0 L - M IY1 - D AH0\nDEALS  D IY1 L Z\nDEALT  D EH1 L T\nDEALY  D IY1 - L IY0\nDEAM  D IY1 M\nDEAMER  D IY1 - M ER0\nDEAN  D IY1 N\nDEAN'S  D IY1 N Z\nDEANA  D IY2 - AE1 - N AH0\nDEANDA  D IY2 - AE1 N - D AH0\nDEANDRADE  D AH0 N - D R AA1 - D IY0\nDEANDREA  D AE1 - D R IY0 - AH0\nDEANDREA'S  D AE1 - D R IY0 - AH0 Z\nDEANDREA'S(2)  D IY2 - AE0 - D R EY1 - AH0 Z\nDEANDREA(2)  D IY2 - AE0 - D R EY1 - AH0\nDEANE  D IY1 N\nDEANER  D IY1 - N ER0\nDEANGELIS  D IY0 - AE1 N - JH AH0 - L AH0 S\nDEANGELO  D AH0 NG - G EH1 - L OW0\nDEANNA  D IY2 - AE1 - N AH0\nDEANS  D IY1 N Z\nDEAR  D IH1 R\nDEARBORN  D IH1 R - B AO2 R N\nDEARDEN  D IH1 R - D AH0 N\nDEARDORFF  D IH1 R - D AO2 R F\nDEARDOURFF  D IH1 R - D AO2 R F\nDEAREST  D IH1 - R AH0 S T\nDEARING  D IH1 - R IH0 NG\nDEARINGER  D IH1 - R IH0 - NG ER0\nDEARLY  D IH1 R - L IY0\nDEARMAN  D IH1 R - M AH0 N\nDEARMAS  D ER1 - M AH0 Z\nDEARMENT  D IH1 R - M AH0 N T\nDEARMON  D ER1 - M AH0 N\nDEARMOND  D ER1 - M AH0 N D\nDEARTH  D ER1 TH\nDEARY  D IH1 - R IY0\nDEAS  D IY1 Z\nDEASE  D IY1 S\nDEASON  D IY1 - Z AH0 N\nDEASY  D IY1 - S IY0\nDEATER  D IY1 - T ER0\nDEATH  D EH1 TH\nDEATH'S  D EH1 TH S\nDEATHBED  D EH1 TH - B EH2 D\nDEATHERAGE  D EH1 - TH ER0 - IH0 JH\nDEATHERAGE(2)  D EH1 - TH R IH0 JH\nDEATHLY  D EH1 TH - L IY0\nDEATHS  D EH1 TH S\nDEATHSHOT  D EH1 TH - SH AO0 T\nDEATHWATCH  D EH1 TH - W AA2 CH\nDEATLEY  D IY1 T - L IY0\nDEATON  D IY1 - T AH0 N\nDEATRICK  D IY1 - T R IH0 K\nDEATS  D IY1 T S\nDEAVER  D IY1 - V ER0\nDEAVER'S  D IY1 - V ER0 Z\nDEAVERS  D IY1 - V ER0 Z\nDEAVILA  D AH0 - V IY1 - L AH0\nDEB  D EH1 B\nDEBACKER  D IY1 - B AE0 - K ER0\nDEBACLE  D AH0 - B AA1 - K AH0 L\nDEBACLES  D EY0 - B AA1 - K AH0 L Z\nDEBAKEY  D IH0 - B EY1 - K IY0\nDEBARMENT  D IH0 - B AA1 R - M AH0 N T\nDEBARR  D IH0 - B AE1 R\nDEBARROS  D EY0 - B AA1 - R OW0 Z\nDEBARTOLO  D IH0 - B AA0 R - T OW1 - L OW0\nDEBARTOLO(2)  D AH0 - B AA1 R - T AH0 - L OW0\nDEBARTOLOS  D AH0 - B AA1 R - T AH0 - L OW0 Z\nDEBARTOLOS(2)  D IH0 - B AA0 R - T OW1 - L OW0 Z\nDEBASE  D AH0 - B EY1 S\nDEBASED  D AH0 - B EY1 S T\nDEBASEMENT  D AH0 - B EY1 S - M AH0 N T\nDEBASING  D IH0 - B EY1 - S IH0 NG\nDEBATABLE  D AH0 - B EY1 - T AH0 - B AH0 L\nDEBATE  D AH0 - B EY1 T\nDEBATE'S  D AH0 - B EY1 T S\nDEBATED  D AH0 - B EY1 - T IH0 D\nDEBATER  D AH0 - B EY1 - T ER0\nDEBATERS  D AH0 - B EY1 - T ER0 Z\nDEBATES  D AH0 - B EY1 T S\nDEBATING  D AH0 - B EY1 - T IH0 NG\nDEBATOR  D IY0 - B EY1 - T ER0\nDEBATOR'S  D IY0 - B EY1 - T ER0 Z\nDEBAUCHE  D EH1 - B AW0 K\nDEBAUCHERY  D AH0 - B AO1 - CH ER0 - IY0\nDEBAUN  D EH1 - B AW0 N\nDEBBIE  D EH1 - B IY0\nDEBBIE'S  D EH1 - B IY0 Z\nDEBBY  D EH1 - B IY0\nDEBEER  D EH1 - B IH0 R\nDEBEERS  D IH0 - B IH1 R Z\nDEBELAK  D EH1 - B IH0 - L AH0 K\nDEBELL  D IY1 - B EH0 L\nDEBELLA  D IH0 - B EH1 - L AH0\nDEBELLIS  D EH1 - B IH0 - L IH0 S\nDEBELLO  D IH0 - B EH1 - L OW0\nDEBENEDETTO  D IH0 - B EH0 - N AH0 - D EH1 - T OW0\nDEBENEDICTIS  D EH1 - B IH0 - N AH0 - D IH0 K - T IH0 S\nDEBENTURE  D AH0 - B EH1 N - CH ER0\nDEBENTURES  D AH0 - B EH1 N - CH ER0 Z\nDEBENTURES'  D IH0 - B EH1 N - CH ER0 Z\nDEBERNARDI  D IH0 - B ER0 - N AA1 R - D IY0\nDEBERRY  D IY1 - B EH0 - R IY0\nDEBES  D IY1 B Z\nDEBEVOISE  D EH2 - B EH0 - V W AA1 Z\nDEBI  D EH1 - B IY0\nDEBIASE  D IH0 - B IY0 - AA1 - S IY0\nDEBILITATE  D AH0 - B IH1 - L AH0 - T EY2 T\nDEBILITATED  D AH0 - B IH1 - L AH0 - T EY2 - T IH0 D\nDEBILITATING  D AH0 - B IH1 - L AH0 - T EY2 - T IH0 NG\nDEBILITY  D AH0 - B IH1 - L AH0 - T IY0\nDEBIT  D EH1 - B IH0 T\nDEBLANC  D IH0 - B L AE1 NG K\nDEBLASIO  D IH0 - B L AA1 - S IY0 - OW0\nDEBLOCK  D EH1 - B L AH0 K\nDEBLOIS  D EH2 - B L UW1\nDEBNAM  D EH1 B - N AH0 M\nDEBO  D IY1 - B OW0\nDEBOARD  D IY1 - B AO0 R D\nDEBOE  D IH0 - B OW1\nDEBOER  D IY1 - B OW0 - ER0\nDEBOERS  D IY1 - B OW0 - ER0 Z\nDEBOLD  D EH1 - B OW0 L D\nDEBOLT  D EH1 - B OW0 L T\nDEBONA  D IH0 - B OW1 - N AH0\nDEBONAIR  D EH2 - B AH0 - N EH1 R\nDEBONIS  D EH1 - B AH0 - N IH0 S\nDEBONO  D IH0 - B OW1 - N OW0\nDEBOR  D EH1 - B AO0 R\nDEBORA  D EH1 - B R AH0\nDEBORAH  D EH1 - B ER0 - AH0\nDEBORAH'S  D EH1 - B ER0 - AH0 Z\nDEBORAH'S(2)  D EH1 - B R AH0 Z\nDEBORAH(2)  D EH1 - B R AH0\nDEBORD  D IH0 - B AO1 R D\nDEBORDE  D IH0 - B AO1 R D\nDEBOSE  D EH1 - B AH0 S\nDEBOW  D EH1 - B OW0\nDEBOY  D IH0 - B OY1\nDEBRA  D EH1 - B R AH0\nDEBRAUDWICK  D IH0 - B R AA1 D - W IH0 K\nDEBRIEF  D IH0 - B R IY1 F\nDEBRIEFED  D IH0 - B R IY1 F T\nDEBRIEFING  D IH0 - B R IY1 - F IH0 NG\nDEBRIS  D AH0 - B R IY1\nDEBROSSE  D EH1 - B R AH0 S\nDEBRUHL  D EH1 - B R AH0 L\nDEBRUIN  D EH1 - B R UW0 - IH0 N\nDEBRULER  D EH1 - B R UW0 - L ER0\nDEBRUYN  D EH1 - B R AY0 N\nDEBRUYNE  D EH1 - B R AY0 N\nDEBS  D EH1 B Z\nDEBT  D EH1 T\nDEBT'S  D EH1 T S\nDEBTHOLDER  D EH1 T - HH OW2 L - D ER0\nDEBTHOLDERS  D EH1 T - HH OW2 L - D ER0 Z\nDEBTOR  D EH1 - T ER0\nDEBTOR'S  D EH1 - T ER0 Z\nDEBTORS  D EH1 - T ER0 Z\nDEBTORS'  D EH1 - T ER0 Z\nDEBTS  D EH1 T S\nDEBUG  D IY0 - B AH1 G\nDEBUGGING  D IY0 - B AH1 - G IH0 NG\nDEBUHR  D EH1 - B UH0 R\nDEBUNK  D IH0 - B AH1 NG K\nDEBUNKED  D IH0 - B AH1 NG K T\nDEBUNKING  D IH0 - B AH1 NG - K IH0 NG\nDEBUS  D EH1 - B IH0 S\nDEBUSK  D EH1 - B AH0 S K\nDEBUSSY  D IH0 - B AH1 - S IY0\nDEBUSSY'S  D IH0 - B AH1 - S IY0 Z\nDEBUSSY'S(2)  D IH0 - B Y UW1 - S IY0 Z\nDEBUSSY(2)  D IH0 - B Y UW1 - S IY0\nDEBUT  D EY0 - B Y UW1\nDEBUT(2)  D EY1 - B Y UW0\nDEBUTANTE  D EH1 - B Y AH0 - T AA1 N T\nDEBUTANTES  D EH1 - B Y AH0 - T AA1 N T S\nDEBUTED  D EY0 - B Y UW1 D\nDEBUTED(2)  D EY1 - B Y UW0 D\nDEBUTING  D EY0 - B Y UW1 - IH0 NG\nDEBUTS  D EY1 - B Y UW0 Z\nDEC  D EH1 K\nDEC'S  D EH1 K S\nDECADE  D EH0 - K EY1 D\nDECADE'S  D EH1 - K EY0 D Z\nDECADE(2)  D EH1 - K EY0 D\nDECADENCE  D EH1 - K AH0 - D AH0 N S\nDECADENT  D EH1 - K AH0 - D AH0 N T\nDECADES  D EH0 - K EY1 D Z\nDECADES(2)  D EH1 - K EY0 D Z\nDECAF  D IY1 - K AE0 F\nDECAFFEINATE  D IY0 - K AE1 - F AH0 - N EY2 T\nDECAFFEINATED  D IY0 - K AE1 - F AH0 - N EY2 - T IH0 D\nDECAFFEINATING  D IY0 - K AE1 - F AH0 - N EY2 - T IH0 NG\nDECAFFEINATION  D IY0 - K AE2 - F AH0 - N EY1 - SH AH0 N\nDECAIRE  D IY1 - K EH0 R\nDECALS  D IY1 - K AE2 L Z\nDECAMILLO  D EH2 - K AH0 - M IH1 - L OW0\nDECAMILLO'S  D EH2 - K AH0 - M IH1 - L OW0 Z\nDECAMP  D AH0 - K AE1 M P\nDECAMPED  D IY0 - K AE1 M P T\nDECANDIA  D IH0 - K AA1 N - D IY0 - AH0\nDECANT  D AH0 - K AE1 N T\nDECANTING  D AH0 - K AE1 N - T IH0 NG\nDECAPITATE  D IY0 - K AE1 - P AH0 - T EY2 T\nDECAPITATED  D IY0 - K AE1 - P AH0 - T EY2 - T IH0 D\nDECAPITATION  D IH0 - K AE2 - P IH0 - T EY1 - SH AH0 N\nDECAPITATIONS  D IH0 - K AE2 - P IH0 - T EY1 - SH AH0 N Z\nDECAPRIO  D IH0 - K AA1 - P R IY0 - OW0\nDECAPUA  D IH0 - K AA0 - P UW1 - AH0\nDECARAVA  D IH0 - K AE1 - AH0 - V AH0\nDECARAVA'S  D IH0 - K AE1 - AH0 - V AH0 Z\nDECARLI  D IH0 - K AA1 R - L IY0\nDECARLO  D IH0 - K AA1 R - L OW0\nDECARO  D IH0 - K AA1 - R OW0\nDECAROLIS  D EH1 - K ER0 - AH0 - L IH0 S\nDECAROLIS(2)  D IH0 - K ER1 - AH0 - L IH0 S\nDECASTRO  D IH0 - K AE1 - S T R OW0\nDECATHLETE  D IY0 - K AE1 TH - L IY0 T\nDECATHLON  D IY0 - K AE1 TH - L AO0 N\nDECATO  D IH0 - K AA1 - T OW0\nDECATUR  D IH0 - K EY1 - T ER0\nDECAY  D AH0 - K EY1\nDECAY(2)  D IH0 - K EY1\nDECAYED  D AH0 - K EY1 D\nDECAYING  D AH0 - K EY1 - IH0 NG\nDECAYING(2)  D IH0 - K EY1 - IH0 NG\nDECAYS  D AH0 - K EY1 Z\nDECCA  D EH1 - K AH0\nDECEASE  D IH0 - S IY1 S\nDECEASED  D IH0 - S IY1 S T\nDECECCO  D IH0 - CH EH1 - K OW0\nDECEDENT  D EH0 - S IY1 - D AH0 N T\nDECEDENT'S  D EH0 - S IY1 - D AH0 N T S\nDECEDENTS  D EH0 - S IY1 - D AH0 N T S\nDECEIT  D AH0 - S IY1 T\nDECEIT(2)  D IH0 - S IY1 T\nDECEITFUL  D AH0 - S IY1 T - F AH0 L\nDECEITFUL(2)  D IH0 - S IY1 T - F AH0 L\nDECEITS  D AH0 - S IY1 T S\nDECEIVE  D IH0 - S IY1 V\nDECEIVED  D IH0 - S IY1 V D\nDECEIVING  D IH0 - S IY1 - V IH0 NG\nDECELERATE  D IH0 - S EH1 - L ER0 - EY2 T\nDECELERATED  D IH0 - S EH1 - L ER0 - EY2 - T IH0 D\nDECELERATING  D IH0 - S EH1 - L ER0 - EY2 - T IH0 NG\nDECELERATION  D IH0 - S EH2 - L ER0 - EY1 - SH AH0 N\nDECELLE  D IH0 - S EH1 L\nDECELLES  D EH1 - S AH0 L Z\nDECEMBER  D IH0 - S EH1 M - B ER0\nDECEMBER'S  D IH0 - S EH1 M - B ER0 Z\nDECENCY  D IY1 - S AH0 N - S IY0\nDECENNIAL  D AH0 - S EH1 - N IY0 - AH0 L\nDECENT  D IY1 - S AH0 N T\nDECENTLY  D IY1 - S AH0 N T - L IY0\nDECENTRALIZATION  D IH0 - S EH2 N - T R AH0 - L IH0 - Z EY1 - SH AH0 N\nDECENTRALIZE  D IH0 - S EH1 N - T R AH0 - L AY2 Z\nDECENTRALIZED  D IH0 - S EH1 N - T R AH0 - L AY2 Z D\nDECENTRALIZING  D IH0 - S EH1 N - T R AH0 - L AY2 - Z IH0 NG\nDECEPTION  D IH0 - S EH1 P - SH AH0 N\nDECEPTIONS  D IH0 - S EH1 P - SH AH0 N Z\nDECEPTIVE  D IH0 - S EH1 P - T IH0 V\nDECEPTIVELY  D IH0 - S EH1 P - T IH0 V - L IY0\nDECERTIFICATION  D IY0 - S ER2 - T AH0 - F AH0 - K EY1 - SH AH0 N\nDECERTIFIED  D IY0 - S ER1 - T AH0 - F AY2 D\nDECERTIFY  D IY0 - S ER1 - T AH0 - F AY2\nDECESARE  D IH0 - CH EH0 - S AA1 - R IY0\nDECESARIS  D IH0 - S EH1 - S ER0 - IH0 S\nDECH  D EH1 K\nDECHANT  D EY1 - CH AH0 N T\nDECHELLIS  D EH1 - K IH0 - L IH0 S\nDECHENE  D EH1 - K IY0 N\nDECHERD  D EH1 - CH ER0 D\nDECHERT  D EH1 - K ER0 T\nDECHINE  D EH1 - CH IH2 N\nDECHINE(2)  D AH0 - CH IH1 N\nDECHRISTOPHER  D EH1 - K R IH0 - S T AA0 - F ER0\nDECIBEL  D EH1 - S AH0 - B EH2 L\nDECIBELS  D EH1 - S AH0 - B AH0 L Z\nDECICCO  D IH0 - CH IY1 - K OW0\nDECIDE  D IH0 - S AY1 D\nDECIDED  D IH0 - S AY1 - D IH0 D\nDECIDEDLY  D IH0 - S AY1 - D AH0 D - L IY0\nDECIDES  D IH0 - S AY1 D Z\nDECIDING  D AH0 - S AY1 - D IH0 NG\nDECIDUOUS  D IH0 - S IH1 - JH UW0 - AH0 S\nDECILITER  D EH1 - S AH0 - L IY2 - T ER0\nDECIMA  D IH0 - CH IY1 - M AH0\nDECIMAL  D EH1 - S AH0 - M AH0 L\nDECIMALS  D EH1 - S AH0 - M AH0 L Z\nDECIMATE  D EH1 - S AH0 - M EY2 T\nDECIMATED  D EH1 - S AH0 - M EY2 - T IH0 D\nDECIMATING  D EH1 - S AH0 - M EY2 - T IH0 NG\nDECIMATION  D EH1 - S AH0 - M EY2 - SH AH0 N\nDECIPHER  D IH0 - S AY1 - F ER0\nDECIPHERED  D IH0 - S AY1 - F ER0 D\nDECIPHERING  D AH0 - S AY1 - F ER0 - IH0 NG\nDECISION  D IH0 - S IH1 - ZH AH0 N\nDECISION'S  D IH0 - S IH1 - ZH AH0 N Z\nDECISIONMAKER  D IH0 - S IH1 - ZH AH0 N - M EY2 - K ER0\nDECISIONMAKING  D IH0 - S IH1 - ZH AH0 N - M EY2 - K IH0 NG\nDECISIONS  D IH0 - S IH1 - ZH AH0 N Z\nDECISIVE  D IH0 - S AY1 - S IH0 V\nDECISIVELY  D IH0 - S AY1 - S IH0 V - L IY0\nDECISIVENESS  D IH0 - S AY1 - S IH0 V - N AH0 S\nDECK  D EH1 K\nDECKARD  D IH0 - K AA1 R D\nDECKED  D EH1 K T\nDECKER  D EH1 - K ER0\nDECKER'S  D EH1 - K ER0 Z\nDECKERT  D EH1 - K ER0 T\nDECKING  D EH1 - K IH0 NG\nDECKMAN  D EH1 K - M AH0 N\nDECKS  D EH1 K S\nDECLAIM  D IH0 - K L EY1 M\nDECLAIMED  D IH0 - K L EY1 M D\nDECLARANT  D IH0 - K L EH1 - R AH0 N T\nDECLARATION  D EH2 - K L ER0 - EY1 - SH AH0 N\nDECLARATIONS  D EH2 - K L ER0 - EY1 - SH AH0 N Z\nDECLARATORY  D IH0 - K L EH1 - R AH0 - T AO2 - R IY0\nDECLARE  D IH0 - K L EH1 R\nDECLARED  D IH0 - K L EH1 R D\nDECLARES  D IH0 - K L EH1 R Z\nDECLARING  D IH0 - K L EH1 - R IH0 NG\nDECLASSIFIED  D IH0 - K L AE1 - S AH0 - F AY2 D\nDECLASSIFY  D IH0 - K L AE1 - S AH0 - F AY2\nDECLERCK  D AH0 K - L ER1 K\nDECLERCK'S  D AH0 K - L ER1 K S\nDECLERCQ  D AH0 K - L ER1 K\nDECLERCQ'S  D AH0 K - L ER1 K S\nDECLERK  D AH0 K - L ER1 K\nDECLERK'S  D AH0 K - L ER1 K S\nDECLERQUE  D AH0 K - L ER1 K\nDECLERQUE'S  D AH0 K - L ER1 K S\nDECLINE  D IH0 - K L AY1 N\nDECLINED  D IH0 - K L AY1 N D\nDECLINER  D IH0 - K L AY1 - N ER0\nDECLINERS  D IH0 - K L AY1 - N ER0 Z\nDECLINES  D IH0 - K L AY1 N Z\nDECLINING  D IH0 - K L AY1 - N IH0 NG\nDECLUE  D EH1 - K L UW0\nDECO  D EH1 - K OW0\nDECODE  D IH0 - K OW1 D\nDECODER  D IH0 - K OW1 - D ER0\nDECODERS  D IH0 - K OW1 - D ER0 Z\nDECODING  D IH0 - K OW1 - D IH0 NG\nDECOLA  D IH0 - K OW1 - L AH0\nDECOM  D EH1 - K AA2 M\nDECOMMISSION  D IY0 - K AH0 - M IH1 - SH AH0 N\nDECOMMISSIONED  D IY0 - K AH0 - M IH1 - SH AH0 N D\nDECOMMISSIONING  D IY0 - K AH0 - M IH1 - SH AH0 N - IH0 NG\nDECOMPOSE  D IY2 - K AH0 M - P OW1 Z\nDECOMPOSED  D IY2 - K AH0 M - P OW1 Z D\nDECOMPOSES  D IY2 - K AH0 M - P OW1 - Z IH0 Z\nDECOMPOSING  D IY2 - K AH0 M - P OW1 - Z IH0 NG\nDECOMPOSITION  D IY2 - K AH0 M - P OW0 - Z IH1 - SH AH0 N\nDECOMPOSITION(2)  D IY2 - K AH0 M - P AH0 - Z IH1 - SH AH0 N\nDECOMPRESSION  D IY2 - K AH0 M - P R EH1 - SH AH0 N\nDECONCINI  D IY2 - K AH0 N - S IY1 - N IY0\nDECONGESTANT  D IH0 - K AH0 N - JH EH1 - S T AH0 N T\nDECONGESTANT(2)  D IY0 - K AH0 N - JH EH1 - S T AH0 N T\nDECONGESTANTS  D IH0 - K AH0 N - JH EH1 - S T AH0 N T S\nDECONGESTANTS(2)  D IY0 - K AH0 N - JH EH1 - S T AH0 N T S\nDECONSTRUCT  D IY2 - K AH0 N - S T R AH1 K T\nDECONSTRUCTION  D IY0 - K AH0 N - S T R AH1 K - SH AH0 N\nDECONTAMINATE  D IY0 - K AH0 N - T AE1 - M AH0 - N EY2 T\nDECONTAMINATED  D IY0 - K AH0 N - T AE1 - M AH0 - N EY2 - T IH0 D\nDECONTAMINATION  D IY0 - K AH0 N - T AE2 - M AH0 - N EY1 - SH AH0 N\nDECONTROL  D IY2 - K AH0 N - T R OW1 L\nDECONTROLLED  D IY2 - K AH0 N - T R OW1 L D\nDECOOK  D EH0 - K UH1 K\nDECOR  D IH0 - K AO1 R\nDECOR(2)  D EY1 - K AO0 R\nDECORATE  D EH1 - K ER0 - EY2 T\nDECORATED  D EH1 - K ER0 - EY2 - T AH0 D\nDECORATED(2)  D EH1 - K ER0 - EY2 - T IH0 D\nDECORATING  D EH1 - K ER0 - EY2 - T IH0 NG\nDECORATION  D EH2 - K ER0 - EY1 - SH AH0 N\nDECORATIONS  D EH2 - K ER0 - EY1 - SH AH0 N Z\nDECORATIVE  D EH1 - K R AH0 - T IH0 V\nDECORATOR  D EH1 - K ER0 - EY2 - T ER0\nDECORATORS  D EH1 - K ER0 - EY2 - T ER0 Z\nDECORDOVA  D IY2 - K AO2 R - D OW1 - V AH0\nDECOROUS  D EH1 - K ER0 - AH0 S\nDECORTE  D IH0 - K AO1 R - T IY0\nDECORUM  D IH0 - K AO1 - R AH0 M\nDECOSTA  D IH0 - K OW1 - S T AH0\nDECOSTE  D IH0 - K OW1 - S T IY0\nDECOSTER  D EH1 - K AH0 - S T ER0\nDECOTEAU  D EH1 - K AH0 - T OW0\nDECOU  D IH0 - K UW1\nDECOUPLE  D IY0 - K AH1 - P AH0 L\nDECOUPLING  D IY0 - K AH1 - P L IH0 NG\nDECOURCY  D EH1 - K UH0 R - K IY0\nDECOURSEY  D EH1 - K AO0 R - S IY0\nDECOY  D AH0 - K OY1\nDECOYS  D IY1 - K OY0 Z\nDECRANE  D AH0 K - R EY1 N\nDECREASE  D IH0 - K R IY1 S\nDECREASE(2)  D IY1 - K R IY2 S\nDECREASED  D IH0 - K R IY1 S T\nDECREASED(2)  D IY1 - K R IY2 S T\nDECREASES  D IH0 - K R IY1 - S AH0 Z\nDECREASES(2)  D IH0 - K R IY1 - S IH0 Z\nDECREASES(3)  D IY1 - K R IY2 - S IH0 Z\nDECREASING  D IH0 - K R IY1 - S IH0 NG\nDECREASING(2)  D IY1 - K R IY2 - S IH0 NG\nDECREE  D IH0 - K R IY1\nDECREED  D IH0 - K R IY1 D\nDECREES  D IH0 - K R IY1 Z\nDECREPIT  D AH0 - K R EH1 - P IH0 T\nDECRESCENZO  D IH0 - K R EH0 S - CH EH1 N - Z OW0\nDECRIED  D IH0 - K R AY1 D\nDECRIES  D IH0 - K R AY1 Z\nDECRIMINALIZATION  D IY0 - K R IH2 - M AH0 - N AH0 - L AH0 - Z EY1 - SH AH0 N\nDECRIMINALIZE  D IY0 - K R IH2 - M AH0 - N AH0 - L AY1 Z\nDECRIMINALIZING  D IY0 - K R IH2 - M AH0 - N AH0 - L AY1 - Z IH0 NG\nDECRISTOFARO  D IH0 - K R IY0 - S T OW0 - F AA1 - R OW0\nDECRY  D IH0 - K R AY1\nDECRYING  D IH0 - K R AY1 - IH0 NG\nDECTER  D EH1 K - T ER0\nDECUIR  D EH1 - K IH0 R\nDECURTIS  D IY0 - K ER1 - T AH0 S\nDECWORLD  D EH1 - K W ER0 L D\nDEDE  D IY1 D\nDEDEAUX  D IH0 - D OW1\nDEDECKER  D EH1 - D IH0 - K ER0\nDEDERICHS  D EH1 - D R IH0 K S\nDEDERICK  D EH1 - D ER0 - IH0 K\nDEDEURWAERDER  D AH0 - D ER1 - W AA2 R - D ER0\nDEDHAM  D EH1 - D AH0 M\nDEDIC  D EH1 - D IH0 K\nDEDICATE  D EH1 - D AH0 - K EY2 T\nDEDICATED  D EH1 - D AH0 - K EY0 - T AH0 D\nDEDICATES  D EH1 - D IH0 - K EY2 T S\nDEDICATING  D EH1 - D IH0 - K EY2 - T IH0 NG\nDEDICATION  D EH2 - D AH0 - K EY1 - SH AH0 N\nDEDIOS  D EY0 - D IY1 - OW0 Z\nDEDMAN  D EH1 D - M AH0 N\nDEDMON  D EH1 D - M AH0 N\nDEDO  D EY1 - D OW0\nDEDOMINICIS  D EY0 - D OW0 - M IY0 - N IY1 - S IH0 S\nDEDRICK  D EH1 - D R IH0 K\nDEDUCE  D IH0 - D UW1 S\nDEDUCED  D IH0 - D UW1 S T\nDEDUCT  D IH0 - D AH1 K T\nDEDUCTED  D IH0 - D AH1 K - T IH0 D\nDEDUCTIBILITY  D IH0 - D AH2 K - T AH0 - B IH1 - L AH0 - T IY0\nDEDUCTIBLE  D IH0 - D AH1 K - T AH0 - B AH0 L\nDEDUCTIBLES  D IH0 - D AH1 K - T AH0 - B AH0 L Z\nDEDUCTING  D IH0 - D AH1 K - T IH0 NG\nDEDUCTION  D IH0 - D AH1 K - SH AH0 N\nDEDUCTIONS  D IH0 - D AH1 K - SH AH0 N Z\nDEDUCTS  D IH0 - D AH1 K T S\nDEE  D IY1\nDEE'S  D IY1 Z\nDEEB  D IY1 B\nDEED  D IY1 D\nDEEDED  D IY1 - D AH0 D\nDEEDED(2)  D IY1 - D IH0 D\nDEEDEE  D IY1 - D IY1\nDEEDRICK  D IY1 - D R IH0 K\nDEEDRICK'S  D IY1 - D R IH0 K S\nDEEDS  D IY1 D Z\nDEEDY  D IY1 - D IY0\nDEEG  D IY1 G\nDEEGAN  D IY1 - G AH0 N\nDEEHAN  D IY1 - HH AE2 N\nDEEHAN(2)  D IY1 - AH0 N\nDEEL  D IY1 L\nDEELEY  D IY1 - L IY0\nDEELY  D IY1 - L IY0\nDEEM  D IY1 M\nDEEMED  D IY1 M D\nDEEMER  D IY1 - M ER0\nDEEMPHASIZE  D IY0 - EH1 M - F AH0 - S AY2 Z\nDEEMPHASIZING  D IY0 - EH1 M - F AH0 - S AY2 - Z IH0 NG\nDEEMS  D IY1 M Z\nDEEN  D IY1 N\nDEENER  D IY1 - N ER0\nDEENEY  D IY1 - N IY0\nDEEP  D IY1 P\nDEEPAK  D IY1 - P AE2 K\nDEEPEN  D IY1 - P AH0 N\nDEEPENED  D IY1 - P AH0 N D\nDEEPENING  D IY1 - P AH0 - N IH0 NG\nDEEPENING(2)  D IY1 P - N IH0 NG\nDEEPENS  D IY1 - P AH0 N Z\nDEEPER  D IY1 - P ER0\nDEEPEST  D IY1 - P AH0 S T\nDEEPLY  D IY1 P - L IY0\nDEEPWATER  D IY1 P - W AO2 - T ER0\nDEER  D IH1 R\nDEERBORNE  D IH1 R - B AO0 R N\nDEERE  D IH1 R\nDEERE'S  D IH1 R Z\nDEERFIELD  D IH1 R - F IY0 L D\nDEERING  D IH1 - R IH0 NG\nDEERMAN  D IH1 R - M AH0 N\nDEERSKIN  D IH1 R - S K IH2 N\nDEERY  D IH1 - R IY0\nDEES  D IY1 Z\nDEESE  D IY1 Z\nDEETER  D IY1 - T ER0\nDEETS  D IY1 T S\nDEETZ  D IY1 T S\nDEFABIO  D IH0 - F AA1 - B IY0 - OW0\nDEFACE  D IH0 - F EY1 S\nDEFACED  D IH0 - F EY1 S T\nDEFACING  D IH0 - F EY1 - S IH0 NG\nDEFALCO  D IH0 - F AA1 L - K OW0\nDEFAMATION  D EH2 - F AH0 - M EY1 - SH AH0 N\nDEFAMATORY  D IH0 - F AE1 - M AH0 - T AO2 - R IY0\nDEFAME  D IH0 - F EY1 M\nDEFAMED  D IH0 - F EY1 M D\nDEFARGES  D IH0 - F AA1 R - JH IH0 Z\nDEFAULT  D IH0 - F AO1 L T\nDEFAULTED  D IH0 - F AO1 L - T IH0 D\nDEFAULTERS  D IH0 - F AO1 L - T ER0 Z\nDEFAULTING  D IH0 - F AO1 L - T IH0 NG\nDEFAULTS  D IH0 - F AO1 L T S\nDEFAZIO  D IH0 - F AA1 - Z IY0 - OW0\nDEFAZIO(2)  D IH0 - F EY1 - Z IY0 - OW0\nDEFEASANCE  D IH0 - F IY1 - Z AH0 N S\nDEFEAT  D IH0 - F IY1 T\nDEFEATED  D IH0 - F IY1 - T AH0 D\nDEFEATED(2)  D IH0 - F IY1 - T IH0 D\nDEFEATING  D IH0 - F IY1 - T IH0 NG\nDEFEATISM  D IH0 - F IY1 - T IH0 - Z AH0 M\nDEFEATIST  D IH0 - F IY1 - T IH0 S T\nDEFEATS  D IH0 - F IY1 T S\nDEFECT  D IY1 - F EH0 K T\nDEFECT(2)  D IH0 - F EH1 K T\nDEFECTED  D IH0 - F EH1 K - T IH0 D\nDEFECTING  D IH0 - F EH1 K - T IH0 NG\nDEFECTION  D IH0 - F EH1 K - SH AH0 N\nDEFECTIONS  D IH0 - F EH1 K - SH AH0 N Z\nDEFECTIVE  D IH0 - F EH1 K - T IH0 V\nDEFECTOR  D IH0 - F EH1 K - T ER0\nDEFECTORS  D IH0 - F EH1 K - T ER0 Z\nDEFECTS  D IY1 - F EH0 K T S\nDEFECTS(2)  D IH0 - F EH1 K T S\nDEFEE  D EH1 - F IY0\nDEFELICE  D IH0 - F EH1 - L IH0 S\nDEFENBAUGH  D EH1 - F IH0 N - B AW0\nDEFENCE  D IH0 - F EH1 N S\nDEFEND  D IH0 - F EH1 N D\nDEFENDANT  D IH0 - F EH1 N - D AH0 N T\nDEFENDANT'S  D IH0 - F EH1 N - D AH0 N T S\nDEFENDANTS  D IH0 - F EH1 N - D AH0 N T S\nDEFENDANTS'  D IH0 - F EH1 N - D AH0 N T S\nDEFENDED  D IH0 - F EH1 N - D AH0 D\nDEFENDED(2)  D IH0 - F EH1 N - D IH0 D\nDEFENDER  D IH0 - F EH1 N - D ER0\nDEFENDER'S  D IH0 - F EH1 N - D ER0 Z\nDEFENDERS  D IH0 - F EH1 N - D ER0 Z\nDEFENDING  D IH0 - F EH1 N - D IH0 NG\nDEFENDS  D IH0 - F EH1 N D Z\nDEFENSE  D IH0 - F EH1 N S\nDEFENSE'S  D IH0 - F EH1 N - S IH0 Z\nDEFENSELESS  D IH0 - F EH1 N S - L AH0 S\nDEFENSES  D IH0 - F EH1 N - S AH0 Z\nDEFENSES(2)  D IH0 - F EH1 N - S IH0 Z\nDEFENSIBLE  D IH0 - F EH1 N - S AH0 - B AH0 L\nDEFENSIVE  D IH0 - F EH1 N - S IH0 V\nDEFENSIVELY  D IH0 - F EH1 N - S IH0 V - L IY0\nDEFENSIVENESS  D IH0 - F EH1 N - S IH0 V - N AH0 S\nDEFEO  D IY1 - F IY0 - OW0\nDEFER  D IH0 - F ER1\nDEFERENCE  D EH1 - F ER0 - AH0 N S\nDEFERENCE(2)  D EH1 - F R AH0 N S\nDEFERENTIAL  D EH2 - F ER0 - EH1 N - CH AH0 L\nDEFERENTIAL(2)  D EH2 - F ER0 - EH1 N - SH AH0 L\nDEFERMENT  D IH0 - F ER1 - M AH0 N T\nDEFERMENTS  D IH0 - F ER1 - M AH0 N T S\nDEFERRAL  D IH0 - F ER1 - AH0 L\nDEFERRALS  D IH0 - F ER1 - AH0 L Z\nDEFERRED  D IH0 - F ER1 D\nDEFERRING  D IH0 - F ER1 - IH0 NG\nDEFERS  D IH0 - F ER1 Z\nDEFEX  D EH1 - F EH2 K S\nDEFFENBAUGH  D EH1 - F IH0 N - B AW0\nDEFFEYES  D EH0 - F AY1 Z\nDEFIANCE  D IH0 - F AY1 - AH0 N S\nDEFIANT  D IH0 - F AY1 - AH0 N T\nDEFIANTLY  D IH0 - F AY1 - AH0 N T - L IY0\nDEFIBAUGH  D EH1 - F IH0 - B AO2\nDEFIBRILLATOR  D IY0 - F IH1 - B R IH0 - L EY2 - T ER0\nDEFIBRILLATORS  D IY0 - F IH1 - B R IH0 - L EY2 - T ER0 Z\nDEFICIENCIES  D IH0 - F IH1 - SH AH0 N - S IY0 Z\nDEFICIENCY  D IH0 - F IH1 - SH AH0 N - S IY0\nDEFICIENT  D IH0 - F IH1 - SH AH0 N T\nDEFICIT  D EH1 - F AH0 - S AH0 T\nDEFICIT'S  D EH1 - F AH0 - S AH0 T S\nDEFICITS  D EH1 - F IH0 - S IH0 T S\nDEFIED  D IH0 - F AY1 D\nDEFIES  D IH0 - F AY1 Z\nDEFILIPPIS  D EH1 - F IH0 - L IH0 - P IH0 S\nDEFILIPPIS(2)  D AH0 - F AH0 - L IH1 - P AH0 S\nDEFILIPPO  D IH0 - F IY0 - L IY1 - P OW0\nDEFINA  D IH0 - F IY1 - N AH0\nDEFINABLE  D IH0 - F AY1 - N AH0 - B AH0 L\nDEFINE  D IH0 - F AY1 N\nDEFINED  D IH0 - F AY1 N D\nDEFINES  D IH0 - F AY1 N Z\nDEFINING  D IH0 - F AY1 - N IH0 NG\nDEFINITE  D EH1 - F AH0 - N AH0 T\nDEFINITELY  D EH1 - F AH0 - N AH0 T - L IY0\nDEFINITION  D EH2 - F AH0 - N IH1 - SH AH0 N\nDEFINITIONS  D EH2 - F AH0 - N IH1 - SH AH0 N Z\nDEFINITIVE  D IH0 - F IH1 - N IH0 - T IH0 V\nDEFINITIVELY  D IH0 - F IH1 - N IH0 - T IH0 V - L IY0\nDEFINO  D IH0 - F IY1 - N OW0\nDEFIORE  D IH0 - F IY0 - AO1 - R IY0\nDEFLATE  D IH0 - F L EY1 T\nDEFLATED  D IH0 - F L EY1 - T IH0 D\nDEFLATING  D IH0 - F L EY1 - T IH0 NG\nDEFLATION  D IH0 - F L EY1 - SH AH0 N\nDEFLATIONARY  D IH0 - F L EY1 - SH AH0 N - EH2 - R IY0\nDEFLATOR  D IH0 - F L EY1 - T ER0\nDEFLECT  D IH0 - F L EH1 K T\nDEFLECTED  D IH0 - F L EH1 K - T IH0 D\nDEFLECTING  D IH0 - F L EH1 K - T IH0 NG\nDEFLECTS  D IH0 - F L EH1 K T S\nDEFLEUR  D IH0 - F L ER1\nDEFOE  D IH0 - F OW1\nDEFOE'S  D IH0 - F OW1 Z\nDEFOLIANT  D IH0 - F OW1 - L IY0 - AH0 N T\nDEFOLIANTS  D IH0 - F OW1 - L IY0 - AH0 N T S\nDEFOOR  D EH1 - F UH0 R\nDEFORD  D EH1 - F ER0 D\nDEFORD'S  D EH1 - F ER0 D Z\nDEFORE  D IY1 - F AO0 R\nDEFOREST  D IH0 - F AO1 - R AH0 S T\nDEFORESTATION  D IH0 - F AO2 - R IH0 - S T EY1 - SH AH0 N\nDEFORGE  D EH1 - F ER0 G\nDEFORM  D IY2 - F AO1 R M\nDEFORMATION  D IY2 - F AO0 R - M EY1 - SH AH0 N\nDEFORMED  D IH0 - F AO1 R M D\nDEFORMITIES  D IH0 - F AO1 R - M AH0 - T IY0 Z\nDEFORMITY  D IH0 - F AO1 R - M AH0 - T IY0\nDEFORREST  D EY0 - F AO1 - R IH0 S T\nDEFORREST(2)  D IH0 - F AO1 - R IH0 S T\nDEFRAIN  D IH0 - F R EY1 N\nDEFRANCE  D IY1 - F R AH0 N S\nDEFRANCESCO  D IH0 - F R AA0 N - CH EH1 - S K OW0\nDEFRANCISCO  D IH0 - F R AA0 N - CH IY1 - S K OW0\nDEFRANCO  D IH0 - F R AA1 N - K OW0\nDEFRANK  D EH1 - F R AH0 NG K\nDEFRATES  D EH1 - F ER0 - EY0 T S\nDEFRAUD  D IH0 - F R AO1 D\nDEFRAUDED  D IH0 - F R AO1 - D IH0 D\nDEFRAUDING  D IH0 - F R AO1 - D IH0 NG\nDEFRAY  D IH0 - F R EY1\nDEFRAYS  D IH0 - F R EY1 Z\nDEFREES  D IH0 - F R IY1 Z\nDEFREESE  D EH1 - F R IY0 S\nDEFREITAS  D EH1 - F R AY0 - T AH0 Z\nDEFRIES  D IH0 - F R IY1 Z\nDEFROST  D IH0 - F R AO1 S T\nDEFROSTING  D IH0 - F R AO1 - S T IH0 NG\nDEFT  D EH1 F T\nDEFTERIOS  D EH2 F - T EH1 - R IY0 - OW0 Z\nDEFTLY  D EH1 F T - L IY0\nDEFUNCT  D IH0 - F AH1 NG K T\nDEFUND  D IY0 - F AH1 N D\nDEFUNDING  D IY0 - F AH1 N - D IH0 NG\nDEFUSCO  D IH0 - F UW1 - S K OW0\nDEFUSE  D IH0 - F Y UW1 Z\nDEFUSED  D IH0 - F Y UW1 Z D\nDEFUSED(2)  D IY0 - F Y UW1 Z D\nDEFUSING  D IH0 - F Y UW1 - Z IH0 NG\nDEFY  D IH0 - F AY1\nDEFYING  D IH0 - F AY1 - IH0 NG\nDEGAETANO  D IH0 - G AA0 - EH0 - T AA1 - N OW0\nDEGAN  D IY1 - G AH0 N\nDEGARMO  D IH0 - G AA1 R - M OW0\nDEGAS  D EY1 - G AH0 S\nDEGAS(2)  D EY1 - G AH0\nDEGAULLE  D AH0 - G AA1 L\nDEGAULLE'S  D AH0 - G AA1 L Z\nDEGEN  D EH1 - G AH0 N\nDEGENER  D EH1 - G IY0 - N ER0\nDEGENERACY  D IH0 - JH EH1 - N ER0 - AH0 - S IY0\nDEGENERATE  D IH0 - JH EH1 - N ER0 - AH0 T\nDEGENERATE(2)  D IH0 - JH EH1 - N ER0 - EY2 T\nDEGENERATED  D IH0 - JH EH1 - N ER0 - EY2 - T IH0 D\nDEGENERATES  D IH0 - JH EH1 - N ER0 - AH0 T S\nDEGENERATING  D IH0 - JH EH1 - N ER0 - EY2 - T IH0 NG\nDEGENERATION  D IH0 - JH EH2 - N ER0 - EY1 - SH AH0 N\nDEGENERATIVE  D IH0 - JH EH1 - N ER0 - AH0 - T IH0 V\nDEGENERES  D IH0 - JH IH0 - N EH1 - R EH0 S\nDEGENERES(2)  D IY0 - JH IH0 - N EH1 - R EH0 S\nDEGENHARDT  D EH1 - G IH0 N - HH AA0 R T\nDEGENHART  D EH1 - G AH0 N - HH AA2 R T\nDEGENNARO  D IH0 - JH EH0 - N AA1 - R OW0\nDEGEORGE  D EH1 - G IY0 - ER0 G\nDEGER  D IY1 - G ER0\nDEGIACOMO  D IY1 - JH AH0 - K OW0 - M OW0\nDEGIDIO  D IH0 - JH IY1 - D IY0 - OW0\nDEGIROLAMO  D IH0 - JH IH0 - R OW0 - L AA1 - M OW0\nDEGLER  D EH1 G - L ER0\nDEGNAN  D EH1 G - N AH0 N\nDEGNER  D EH1 G - N ER0\nDEGOOD  D EH1 - G UH0 D\nDEGRAAF  D EH1 - G R AA0 F\nDEGRACE  D IH0 - G R AA1 - CH IY0\nDEGRACE(2)  D IH0 - G R EY1 S\nDEGRADABLE  D IH0 - G R EY1 - D AH0 - B AH0 L\nDEGRADATION  D EH2 - G R AH0 - D EY1 - SH AH0 N\nDEGRADATIONS  D EH2 - G R AH0 - D EY1 - SH AH0 N Z\nDEGRADE  D IH0 - G R EY1 D\nDEGRADED  D IH0 - G R EY1 - D AH0 D\nDEGRADED(2)  D IH0 - G R EY1 - D IH0 D\nDEGRADES  D IH0 - G R EY1 D Z\nDEGRADING  D IH0 - G R EY1 - D IH0 NG\nDEGRAFF  D EH1 - G R AH0 F\nDEGRAFFENREID  D EH1 - G R AH0 - F IH0 N - R AY0 D\nDEGRAND  D EH1 - G R AE0 N D\nDEGRANGE  D EH1 - G R EY0 N JH\nDEGRASSE  D IH0 - G R AA1 - S IY0\nDEGRAVE  D IH0 - G R AA1 - V IY0\nDEGRAW  D EH1 - G R AO0\nDEGRAY  D EH1 - G R EY0\nDEGRAZIA  D IH0 - G R AA1 - Z IY0 - AH0\nDEGREE  D IH0 - G R IY1\nDEGREED  D IH0 - G R IY1 D\nDEGREES  D IH0 - G R IY1 Z\nDEGREGORIO  D IH0 - G R EH0 - G AO1 - R IY0 - OW0\nDEGREGORY  D EH1 - G R IH0 - G ER0 - IY0\nDEGROAT  D EH1 - G R OW0 T\nDEGROFF  D EH1 - G R AO0 F\nDEGROOT  D EH1 - G R UW0 T\nDEGROOTE  D AH0 - G R UW1 T\nDEGUERIN  D IH0 - G ER1 - IH0 N\nDEGUIRE  D EY0 - G W IH1 - R EY0\nDEGUSSA  D IH0 - G Y UW1 - S AH0\nDEGUTARE  D EH2 - G UW0 - T AA1 - R IY0\nDEGUTARE'S  D EH2 - G UW0 - T AA1 - R IY0 Z\nDEGUZMAN  D EY0 - G UW0 Z - M AE1 N\nDEHAAN  D EH1 - HH AA0 N\nDEHAAS  D EH1 - HH AA0 Z\nDEHARBE  D AH0 - HH AA1 R - B IY0\nDEHART  D EH1 - HH AA0 R T\nDEHAVEN  D EH1 - HH AH0 - V AH0 N\nDEHECQ  D IH0 - HH EH1 K\nDEHERE  D AH0 - HH IH1 - R IY0\nDEHERRERA  D EY0 - HH EH0 - R EH1 - R AH0\nDEHLER  D EH1 - L ER0\nDEHM  D EH1 M\nDEHMER  D EH1 - M ER0\nDEHN  D EH1 N\nDEHNE  D EH1 N\nDEHNER  D EH1 - N ER0\nDEHNERT  D EH1 - N ER0 T\nDEHOFF  D EH1 - HH AO0 F\nDEHOYOS  D EH1 - HH OY0 - OW0 Z\nDEHUMANIZATION  D IY2 - HH Y UW2 - M AH0 - N AH0 - Z EY1 - SH AH0 N\nDEHUMANIZE  D IH0 - HH Y UW1 - M AH0 - N AY0 Z\nDEHUMANIZED  D IH0 - HH Y UW1 - M AH0 - N AY0 Z D\nDEHUMANIZING  D IY0 - HH Y UW1 - M AH0 - N AY2 - Z IH0 NG\nDEHYDRATE  D IH0 - HH AY1 - D R EY0 T\nDEHYDRATED  D IH0 - HH AY1 - D R EY0 - T AH0 D\nDEHYDRATION  D IY2 - HH AY0 - D R EY1 - SH AH0 N\nDEIBEL  D AY1 - B AH0 L\nDEIBERT  D AY1 - B ER0 T\nDEIBLER  D AY1 - B AH0 L - ER0\nDEIBLER(2)  D AY1 - B L ER0\nDEICHERT  D AY1 - K ER0 T\nDEIDRE  D IY1 - D R AH0\nDEIDRE'S  D IY1 - D R AH0 Z\nDEIFICATION  D IY2 - AH0 - F AH0 - K EY1 - SH AH0 N\nDEIFY  D IY1 - AH0 - F AY2\nDEIGHAN  D EY1 G - HH AH0 N\nDEIGHTON  D EY1 - T AH0 N\nDEIGNAN  D AH0 G - N AE1 N\nDEIHL  D AY1 L\nDEIKE  D IY1 K\nDEIKEL  D AY1 - K AH0 L\nDEILY  D IY1 - L IY0\nDEINES  D IY1 N Z\nDEININGER  D AY1 - N IH0 - NG ER0\nDEINSTITUTIONALIZATION  D IY0 - IH2 N - S T IH0 - T UW2 - SH AH0 - N AH0 L - AH0 - Z EY1 - SH AH0 N\nDEINSTITUTIONALIZE  D IY0 - IH2 N - S T IH0 - T UW2 - SH AH0 - N AH0 L - AY2 Z\nDEION  D IY1 - Y AA0 N\nDEION(2)  D IY1 - AA0 N\nDEIRDRE  D IY1 R - D R AH0\nDEIS  D IY1 Z\nDEIS(2)  D EY1 - IH0 Z\nDEISHER  D IY1 - IH0 - SH ER0\nDEISM  D IY1 - IH0 - Z AH0 M\nDEISS  D AY1 S\nDEIST  D IY1 - IH0 S T\nDEITCH  D AY1 CH\nDEITER  D AY1 - T ER0\nDEITERS  D AY1 - T ER0 Z\nDEITIES  D IY1 - AH0 - T IY0 Z\nDEITRICH  D AY1 - T R IH0 K\nDEITRICK  D AY1 - T R IH0 K\nDEITSCH  D AY1 CH\nDEITY  D IY1 - AH0 - T IY0\nDEITZ  D IY1 T S\nDEJA  D IY1 - JH AH0\nDEJA(2)  D EY1 - ZH AA2\nDEJAGER  D EH1 - JH EY0 - G ER0\nDEJARNETT  D IH0 - JH AA1 R - N IH0 T\nDEJARNETTE  D EH1 - ZH AA0 R - N EH0 T\nDEJEAN  D IH0 - ZH IY1 N\nDEJECT  D IH0 - JH EH1 K T\nDEJECTED  D IH0 - JH EH1 K - T IH0 D\nDEJESUS  D IH0 - JH IY1 - Z AH0 S\nDEJOHN  D AH0 - JH AA1 N\nDEJONG  D AH0 - JH AO1 NG\nDEJONGE  D AH0 - JH AO1 NG\nDEJONGH  D AH0 - JH AO1 NG\nDEJOSEPH  D AH0 - JH OW1 - S AH0 F\nDEJOY  D AH0 - JH OY1\nDEJULIO  D AH0 - JH UW1 - L IY0 - OW0\nDEKALB  D IH0 - K AE1 L B\nDEKAY  D AH0 - K EY1\nDEKEYSER  D AH0 - K AY1 - Z ER0\nDEKKER  D EH1 - K ER0\nDEKLE  D EH1 - K AH0 L\nDEKLERK  D AH0 K - L ER1 K\nDEKLERK'S  D AH0 K - L ER1 K S\nDEKOM  D EH1 - K AH0 M\nDEKONING  D EH1 - K AH0 - N IH0 NG\nDEKROON  D EH2 - K R UW1 N\nDEKUYPER  D IH0 - K AY1 - P ER0\nDEL  D EH1 L\nDEL-CAMPOS  D EH1 L - K AE1 M - P OW0 Z\nDELA  D EH1 - L AH0\nDELACERDA  D EH0 - L AA0 - CH EH1 R - D AH0\nDELACRUZ  D EY0 - L AA1 K - R UW0 Z\nDELACY  D AH0 - L AO1 - S IY0\nDELAFIELD  D EH1 - L AH0 - F IY2 L D\nDELAFUENTE  D EY0 - L AA0 F - W EH1 N - T EY0\nDELAGARZA  D EH0 - L AA0 - G AA1 R - Z AH0\nDELAGE  D EH1 - L IH0 JH\nDELAGRANGE  D EH0 - L AA1 - G R AA0 N JH\nDELAHANTY  D EH1 - L AH0 - HH AH0 N - T IY0\nDELAHOUSSAYE  D EH0 - L AH0 - HH AW1 - S EY0\nDELAHUNT  D EH1 - L AH0 - HH AH0 N T\nDELAHUNTY  D EH1 - L AH0 - HH AH0 N - T IY0\nDELAINE  D IH0 - L EY1 N\nDELAIR  D IH0 - L EH1 R\nDELAMAR  D EY0 - L AA0 - M AA1 R\nDELAMATER  D EH1 - L AH0 - M EY0 - T ER0\nDELANCEY  D EH1 - L AH0 N - S IY0\nDELANCY  D EH1 - L AH0 N - S IY0\nDELAND  D IH0 - L AE1 N D\nDELANE  D EH1 - L AH0 N\nDELANEY  D AH0 - L EY1 - N IY0\nDELANGE  D EH1 - L EY0 N JH\nDELANO  D IH0 - L AA1 - N OW0\nDELANO(2)  D EH1 - L AH0 - N OW0\nDELANOY  D EH1 - L AH0 - N OY0\nDELANY  D EH1 - L AH0 - N IY0\nDELAO  D EH1 - L AW0\nDELAP  D EH1 - L AH0 P\nDELAPAZ  D EY0 - L AA1 - P AA0 Z\nDELAPENA  D EH0 - L AA0 - P EH1 - N AH0\nDELAPP  D EH1 - L AH0 P\nDELARA  D EH0 - L AA1 - R AH0\nDELARIVA  D EH0 - L AA0 - R IY1 - V AH0\nDELAROSA  D EH0 - L AA0 - R OW1 - S AH0\nDELASHMIT  D EH1 - L AH0 SH - M IH0 T\nDELASHMUTT  D EH1 - L AH0 SH - M AH0 T\nDELASKI  D AH0 - L AE1 S - K IY0\nDELATORRE  D EH0 - L AA0 - T AO1 - R IY0\nDELATTE  D IH0 - L AE1 T\nDELAUDER  D EH1 - L AW0 - D ER0\nDELAUGHTER  D EH1 - L AO0 - T ER0\nDELAUNE  D EH1 - L AO0 N\nDELAURA  D EH0 - L AO1 - R AH0\nDELAUREL  D AH0 - L AA1 - R AH0 L\nDELAURENTIIS  D IY0 - L AO0 - R EH1 N - T IY2 Z\nDELAURENTIS  D EY0 - L AW0 - R EY1 N - T IH0 S\nDELAUTER  D EH1 L - AW0 - T ER0\nDELAVAL  D EH1 - L AH0 - V AE0 L\nDELAVAN  D EH1 - L AH0 - V AH0 N\nDELAVEGA  D EY0 - L AA0 - V EY1 - G AH0\nDELAWARE  D EH1 - L AH0 - W EH2 R\nDELAWARE'S  D EH1 - L AH0 - W EH2 R Z\nDELAWARIAN  D EH1 - L AH0 W - EH2 - R IY0 - IH0 N\nDELAWARIANS  D EH1 - L AH0 W - EH2 - R IY0 - IH0 N Z\nDELAWDER  D EH1 - L AO0 - D ER0\nDELAY  D IH0 - L EY1\nDELAYED  D IH0 - L EY1 D\nDELAYING  D IH0 - L EY1 - IH0 NG\nDELAYS  D IH0 - L EY1 Z\nDELBARCO  D EH0 L - B AA1 R - K OW0\nDELBARCO'S  D EH0 L - B AA1 R - K OW0 Z\nDELBENE  D EH1 L - B IH0 - N AH0\nDELBERT  D EH1 L - B ER0 T\nDELBIANCO  D EH0 L - B IY0 - AA1 N - K OW0\nDELBOSQUE  D IH0 L - B OW1 S K\nDELBRIDGE  D EH1 L - B R IH0 JH\nDELBUONO  D EH2 L - B W OW1 - N OW0\nDELCAMBRE  D EH0 L - K AA1 M - B R IY0\nDELCAMP  D EH1 L - K AE0 M P\nDELCAMPO  D EH0 L - K AA1 M - P OW0\nDELCARLO  D EH2 L - K AA1 R - L OW0\nDELCASTILLO  D EH0 L - K AA0 - S T IH1 - L OW0\nDELCHAMPS  D EH2 L - CH AE1 M P S\nDELCINE  D EH0 L - CH IY1 - N IY0\nDELCO  D EH1 L - K OW0\nDELCONTE  D EH0 L - K OW1 N - T IY0\nDELCOR  D EH1 L - K AO2 R\nDELDUCA  D EH2 L - D UW1 - K AH0\nDELEBARRE  D EH2 - L AH0 - B AA1 R\nDELECTABLE  D IH0 - L EH1 K - T AH0 - B AH0 L\nDELEE  D EH1 - L IY0\nDELEEUW  D EH1 - L IY0 - UW0\nDELEGATE  D EH1 - L AH0 - G EY2 T\nDELEGATE'S  D EH1 - L IH0 - G AH0 T S\nDELEGATE(2)  D EH1 - L AH0 - G AH0 T\nDELEGATED  D EH1 - L AH0 - G EY2 - T AH0 D\nDELEGATES  D EH1 - L AH0 - G EY2 T S\nDELEGATES'  D EH2 - L AH0 - G EY1 T S\nDELEGATES(2)  D EH1 - L AH0 - G AH0 T S\nDELEGATING  D EH1 - L AH0 - G EY2 - T IH0 NG\nDELEGATION  D EH2 - L AH0 - G EY1 - SH AH0 N\nDELEGATION'S  D EH2 - L AH0 - G EY1 - SH AH0 N Z\nDELEGATIONS  D EH2 - L AH0 - G EY1 - SH AH0 N Z\nDELEHANTY  D EH1 - L IH0 - HH AH0 N - T IY0\nDELELLIS  D EH1 - L IH0 - L IH0 S\nDELELLIS(2)  D IH0 - L EH1 - L IH0 S\nDELEO  D EH1 - L IY0 - OW0\nDELEON  D EH1 - L IY0 - AH0 N\nDELEONARDIS  D EH1 - L IY0 - AH0 - N AA0 R - D IH0 S\nDELETE  D IH0 - L IY1 T\nDELETED  D IH0 - L IY1 - T AH0 D\nDELETERIOUS  D EH2 - L AH0 - T IH1 - R IY0 - AH0 S\nDELETING  D IH0 - L IY1 - T IH0 NG\nDELETION  D IH0 - L IY1 - SH AH0 N\nDELETIONS  D IH0 - L IY1 - SH AH0 N Z\nDELFAVERO  D EH0 L - F AA0 - V EH1 - R OW0\nDELFIN  D EH1 L - F IH0 N\nDELFINA  D EH2 L - F IY1 - N AH0\nDELFINE  D EH0 L - F IY1 - N IY0\nDELFINO  D EH2 L - F IY1 - N OW0\nDELFOSSE  D EH1 L - F AH0 S\nDELFS  D EH1 L F S\nDELFT  D EH1 L F T\nDELFTWARE  D EH1 L F T - W EH2 R\nDELGADILLO  D EH0 L - G AA0 - D IH1 - L OW0\nDELGADO  D EH0 L - G AA1 - D OW0\nDELGAUDIO  D EH0 L - G AO1 - D IY0 - OW0\nDELGIORNO  D EH0 L - JH AO1 R - N OW0\nDELGIUDICE  D EH0 L - JH UW1 - D AH0 S\nDELGRANDE  D EH1 L - G R AE0 N - D IY0\nDELGRECO  D EH2 L - G R EH1 - K OW0\nDELGROSSO  D EH2 L - G R OW1 - S OW0\nDELGUERCIO  D EH0 L - G EH1 R - CH IY0 - OW0\nDELGUIDICE  D EH0 L - G AY1 - D IH0 S\nDELHAIZE  D EH2 L - HH EY1 Z\nDELHI  D EH1 - L IY0\nDELHI'S  D EH1 - L IY0 Z\nDELI  D EH1 - L IY0\nDELIA  D IY1 - L Y AH0\nDELIAL  D IH0 - L AY1 - EH0 L\nDELIAL(2)  D IY0 - L AY1 - EH0 L\nDELIBERATE  D IH0 - L IH1 - B ER0 - AH0 T\nDELIBERATE(2)  D IH0 - L IH1 - B ER0 - EY2 T\nDELIBERATE(3)  D IH0 - L IH1 - B R AH0 T\nDELIBERATED  D IH0 - L IH1 - B ER0 - EY2 - T IH0 D\nDELIBERATELY  D IH0 - L IH1 - B ER0 - AH0 T - L IY0\nDELIBERATELY(2)  D IH0 - L IH1 - B R AH0 T - L IY0\nDELIBERATES  D IH0 - L IH1 - B ER0 - EY2 T S\nDELIBERATES(2)  D IH0 - L IH1 - B R EY0 T S\nDELIBERATING  D IH0 - L IH1 - B ER0 - EY2 - T IH0 NG\nDELIBERATION  D IH0 - L IH2 - B ER0 - EY1 - SH AH0 N\nDELIBERATIONS  D IH0 - L IH2 - B ER0 - EY1 - SH AH0 N Z\nDELIBERATIVE  D IH0 - L IH1 - B ER0 - EY2 - T IH0 V\nDELIBERATIVE(2)  D IH0 - L IH1 - B R AH0 - T IH0 V\nDELICACIES  D EH1 - L IH0 - K AH0 - S IY0 Z\nDELICACY  D EH1 - L AH0 - K AH0 - S IY0\nDELICACY(2)  D EH1 - L IH0 - K AH0 - S IY0\nDELICATE  D EH1 - L AH0 - K AH0 T\nDELICATELY  D EH1 - L AH0 - K AH0 T - L IY0\nDELICATESSEN  D EH2 - L IH0 - K AH0 - T EH1 - S AH0 N\nDELICATESSENS  D EH2 - L IH0 - K AH0 - T EH1 - S AH0 N Z\nDELICH  D EH1 - L IH0 K\nDELICIA  D EH0 - L IY1 - CH AH0\nDELICIOUS  D IH0 - L IH1 - SH AH0 S\nDELICIOUSLY  D IH0 - L IH1 - SH AH0 SH - L IY0\nDELIGHT  D IH0 - L AY1 T\nDELIGHTED  D IH0 - L AY1 - T AH0 D\nDELIGHTED(2)  D IH0 - L AY1 - T IH0 D\nDELIGHTFUL  D IH0 - L AY1 T - F AH0 L\nDELIGHTFULLY  D IH0 - L AY1 T - F AH0 - L IY0\nDELIGHTING  D IH0 - L AY1 - T IH0 NG\nDELIGHTS  D IH0 - L AY1 T S\nDELILA  D EH0 - L IY1 - L AH0\nDELILAH  D AH0 - L AY1 - L AH0\nDELILAH(2)  D IH0 - L AY1 - L AH0\nDELILLO  D AH0 - L IH1 - L OW0\nDELIMA  D EH0 - L IY1 - M AH0\nDELINE  D EH0 - L IY1 - N IY0\nDELINEATE  D IH0 - L IH1 - N IY0 - EY2 T\nDELINEATED  D IH0 - L IH1 - N IY0 - EY2 - T IH0 D\nDELINEATES  D IH0 - L IH1 - N IY0 - EY2 T S\nDELINEATING  D IH0 - L IH1 - N IY0 - EY2 - T IH0 NG\nDELINEATION  D IH0 - L IH2 - N IY0 - EY1 - SH AH0 N\nDELINQUENCIES  D IH0 - L IH1 NG - K W AH0 N - S IY0 Z\nDELINQUENCY  D IH0 - L IH1 NG - K W AH0 N - S IY0\nDELINQUENT  D IH0 - L IH1 NG - K W AH0 N T\nDELINQUENTS  D IH0 - L IH1 NG - K W AH0 N T S\nDELIO  D EY1 - L IY0 - OW0\nDELIRIOUS  D IH0 - L IH1 - R IY0 - AH0 S\nDELIRIUM  D IH0 - L IH1 - R IY0 - AH0 M\nDELISA  D EH0 - L IY1 - S AH0\nDELISE  D EH1 - L AY0 Z\nDELISI  D EH0 - L IY1 - S IY0\nDELISIO  D EH0 - L IY1 - S IY0 - OW0\nDELISLE  D IH0 - L AY1 L\nDELIST  D IY2 - L IH1 S T\nDELISTED  D IY2 - L IH1 - S T IH0 D\nDELISTING  D IY0 - L IH1 - S T IH0 NG\nDELIVER  D IH0 - L IH1 - V ER0\nDELIVERABLE  D IH0 - L IH1 - V ER0 - AH0 - B AH0 L\nDELIVERABLE(2)  D IH0 - L IH1 - V R AH0 - B AH0 L\nDELIVERANCE  D IH0 - L IH1 - V ER0 - AH0 N S\nDELIVERANCE(2)  D IH0 - L IH1 - V R AH0 N S\nDELIVERED  D IH0 - L IH1 - V ER0 D\nDELIVERER  D IH0 - L IH1 - V ER0 - ER0\nDELIVERERS  D IH0 - L IH1 - V ER0 - ER0 Z\nDELIVERIES  D IH0 - L IH1 - V ER0 - IY0 Z\nDELIVERIES(2)  D IH0 - L IH1 - V R IY0 Z\nDELIVERING  D IH0 - L IH1 - V ER0 - IH0 NG\nDELIVERS  D IH0 - L IH1 - V ER0 Z\nDELIVERY  D IH0 - L IH1 - V ER0 - IY0\nDELK  D EH1 L K\nDELKER  D EH1 L - K ER0\nDELL  D EH1 L\nDELL'AQUILA  D EH1 - L AH0 - K W IY1 - L AH0\nDELL'S  D EH1 L Z\nDELLA  D EH1 - L AH0\nDELLAERT  D EH1 - L AA0 R T\nDELLAERT(2)  D EH1 - L ER0 T\nDELLAPENNA  D EH1 - L AH0 - P EH2 - N AH0\nDELLAQUILA  D EY0 - L AA0 K - W IY1 - L AH0\nDELLAROCCO  D EH1 - L ER0 - OW0 - K OW0\nDELLAVALLE  D EH1 - L AH0 - V AA0 - L IY0\nDELLAVECCHIA  D EH1 - L AH0 - V EH2 - K IY0 - AH0\nDELLE  D EH1 L\nDELLER  D EH1 - L ER0\nDELLIGATTI  D EH0 - L IY0 - G AA1 - T IY0\nDELLING  D EH1 - L IH0 NG\nDELLINGER  D EH1 - L IH0 - NG ER0\nDELLIS  D EH1 - L IH0 S\nDELLOLIO  D EH0 - L OW1 - L IY0 - OW0\nDELLUMS  D EH1 - L AH0 M Z\nDELMA  D EH1 L - M AH0\nDELMAN  D EH1 L - M AH0 N\nDELMAR  D EH1 L - M ER0\nDELMARVA  D EH2 L - M AA1 R - V AH0\nDELMAS  D EH1 L - M AH0 Z\nDELMASTRO  D EH2 L - M AE1 - S T R OW0\nDELMED  D EH1 L - M EH2 D\nDELMED'S  D EH1 L - M EH2 D Z\nDELMER  D EH1 L - M ER0\nDELMONACO  D EH0 L - M OW0 - N AA1 - K OW0\nDELMONICO  D EH0 L - M AA0 - N IY1 - K OW0\nDELMONT  D EY1 L - M OW0 N T\nDELMONTE  D EH0 L - M AA1 N - T IY0\nDELMORE  D EH1 L - M AO0 R\nDELNEGRO  D EH2 L - N EH1 - G R OW0\nDELNERO  D EH0 L - N EH1 - R OW0\nDELO  D EH1 - L OW0\nDELOACH  D EH1 - L OW0 CH\nDELOATCH  D EH1 - L OW0 CH\nDELOITTE  D AH0 - L OY1 T\nDELONEY  D EH1 - L AH0 - N IY0\nDELONG  D AH0 - L AO1 NG\nDELORA  D EH0 - L AO1 - R AH0\nDELORE  D AH0 - L AO1 R\nDELORE'S  D AH0 - L AO1 R Z\nDELORE'S(2)  D AH0 - L AO1 - R IY0 Z\nDELORE(2)  D AH0 - L AO1 - R IY0\nDELOREAN  D AH0 - L AO1 - R IY0 - AH0 N\nDELORENZO  D EH0 - L AO0 - R EH1 N - Z OW0\nDELORENZO(2)  D EY2 - L AO0 - R EH1 N - Z OW0\nDELORES  D AH0 - L AO1 - R IH0 S\nDELOREY  D EH1 - L ER0 - IY0\nDELORIA  D EH0 - L AO1 - R IY0 - AH0\nDELORIS  D EH1 - L ER0 - IH0 S\nDELORME  D EH0 - L AO1 R - M IY0\nDELORS  D AH0 - L AO1 R Z\nDELOSH  D EH1 - L AH0 SH\nDELOSREYES  D IH0 - L AA1 - S ER0 - AY0 Z\nDELOSREYES(2)  D EH0 - L OW0 - S R EY1 Z\nDELOSREYES(3)  D EH0 - L OW0 - S R EY1 - AH0 Z\nDELOSSANTOS  D EY0 - L OW0 - S AA1 N - T OW0 Z\nDELOUIS  D EH2 - L UW0 - IY1 Z\nDELOZIER  D EH1 - L AH0 - Z IY0 - ER0\nDELP  D EH1 L P\nDELPH  D EH1 L F\nDELPHAX  D EH1 L - F AE0 K S\nDELPHI  D EH1 L - F AY0\nDELPHIA  D EH1 L - F IY0 - AH0\nDELPHIC  D EH1 L - F IH0 K\nDELPHINA  D EH0 L - F IY1 - N AH0\nDELPHINE  D EH0 L - F IY1 - N IY0\nDELPINO  D EH2 L - P IY1 - N OW0\nDELPIZZO  D EH0 L - P IY1 - Z OW0\nDELPONTE  D EH0 L - P OW1 N - T IY0\nDELPOZO  D EH2 L - P OW1 - Z OW0\nDELPRETE  D EH1 L - P R IY0 T\nDELPRIORE  D EH0 L - P R IY0 - AO1 - R IY0\nDELRAY  D EH2 L - R EY1\nDELRE  D EH1 L R\nDELREAL  D EH1 - L R AH0 L\nDELRINA  D EH2 L - R IY1 - N AH0\nDELRINA'S  D EH2 L - R IY1 - N AH0 Z\nDELRIO  D EH1 L - R IY0 - OW0\nDELROSARIO  D EH0 L - R OW0 - S AA1 - R IY0 - OW0\nDELROSSI  D EH0 L - R AA1 - S IY0\nDELROSSO  D EH0 L - R OW1 - S OW0\nDELSANTO  D EH0 L - S AA1 N - T OW0\nDELSIGNORE  D EH0 L - S IY0 G - N AO1 - R IY0\nDELTA  D EH1 L - T AH0\nDELTA'S  D EH1 L - T AH0 Z\nDELTACORP  D EH1 L - T AH0 - K AO2 R P\nDELTADROMEUS  D EH2 L - T AH0 - D R OW1 - M AH0 S\nDELTAIC  D EH0 L - T EY1 - IH0 K\nDELTAK  D EH1 L - T AE2 K\nDELTEC  D EH1 L - T EH2 K\nDELTONA  D EH2 L - T OW1 - N AH0\nDELTONA'S  D EH2 L - T OW1 - N AH0 Z\nDELTORO  D EH0 L - T AO1 - R OW0\nDELUCA  D IH0 - L UW1 - K AH0\nDELUCAS  D IH0 - L UW1 - K AH0 Z\nDELUCCA  D EH0 - L UW1 - K AH0\nDELUCCHI  D EH0 - L UW1 - K IY0\nDELUCCIA  D EH0 - L UW1 - CH AH0\nDELUCIA  D EH0 - L UW1 - CH AH0\nDELUDE  D IH0 - L UW1 D\nDELUDED  D IH0 - L UW1 - D IH0 D\nDELUDING  D IH0 - L UW1 - D IH0 NG\nDELUGE  D EH1 - L Y UW0 JH\nDELUGED  D EH1 - L Y UW0 JH D\nDELUISE  D EH0 - L UW1 - S IY0\nDELUNA  D EH0 - L UW1 - N AH0\nDELUSION  D IH0 - L UW1 - ZH AH0 N\nDELUSIONAL  D IH0 - L UW1 - ZH AH0 - N AH0 L\nDELUSIONS  D IH0 - L UW1 - ZH AH0 N Z\nDELUXE  D AH0 - L AH1 K S\nDELVALLE  D EH2 L - V AE1 - L IY0\nDELVALLE'S  D EH2 L - V AE1 - L IY0 Z\nDELVE  D EH1 L V\nDELVECCHIO  D EH2 L - V EH1 - K IY0 - OW0\nDELVED  D EH1 L V D\nDELVES  D EH1 L V Z\nDELVING  D EH1 L - V IH0 NG\nDELWIN  D EH1 L - W IH0 N\nDELWIP  D EH1 L - W IH0 P\nDELWYN  D EH1 L - W IH0 N\nDELZELL  D EH1 L - Z AH0 L\nDELZER  D EH1 L - Z ER0\nDEMAGGIO  D IH0 - M AA1 - JH IY0 - OW0\nDEMAGOGIC  D EH2 - M AH0 - G AA1 - JH IH0 K\nDEMAGOGUE  D EH1 - M AH0 - G AA2 G\nDEMAGOGUERY  D EH1 - M AH0 - G AA2 - G ER0 - IY0\nDEMAGOGUES  D EH1 - M AH0 - G AA2 G Z\nDEMAGOGUING  D EH1 - M AH0 - G AA2 - G IH0 NG\nDEMAGOGY  D EH1 - M AH0 - G AA2 - JH IY0\nDEMAIN  D IH0 - M EY1 N\nDEMAIO  D IH0 - M AA1 - IY0 - OW0\nDEMAIO(2)  D IH0 - M AA1 - OW0\nDEMAN  D IY1 - M AH0 N\nDEMAND  D IH0 - M AE1 N D\nDEMANDED  D IH0 - M AE1 N - D AH0 D\nDEMANDED(2)  D IH0 - M AE1 N - D IH0 D\nDEMANDING  D IH0 - M AE1 N - D IH0 NG\nDEMANDINGLY  D IH0 - M AE1 N - D IH0 NG - L IY0\nDEMANDS  D IH0 - M AE1 N D Z\nDEMAR  D IH0 - M AA1 R\nDEMARAIS  D EH1 - M ER0 - EY0\nDEMARAY  D EH1 - M ER0 - EY0\nDEMARCATION  D IY2 - M AA0 R - K EY1 - SH AH0 N\nDEMARCATIONS  D IY2 - M AA0 R - K EY1 - SH AH0 N Z\nDEMARCHE  D IH0 - M AA1 R CH\nDEMARCHE(2)  D IY0 - M AA1 R CH\nDEMARCHI  D IH0 - M AA1 R - K IY0\nDEMARCO  D IH0 - M AA1 R - K OW0\nDEMARCUS  D EH1 - M AA0 R - K IH0 S\nDEMAREE  D EH0 - M ER0 - IY1\nDEMAREST  D EY0 - M AA0 - R EY1 - IH0 S T\nDEMAREST(2)  D EH1 - M ER0 - IH0 S T\nDEMARIA  D IH0 - M AA1 - R IY0 - AH0\nDEMARINIS  D EH1 - M ER0 - IH0 - N IH0 S\nDEMARINO  D IH0 - M AA0 - R IY1 - N OW0\nDEMARIO  D IH0 - M AA1 - R IY0 - OW0\nDEMARIS  D EH1 - M ER0 - IH0 S\nDEMARK  D AH0 - M AA1 R K\nDEMARS  D EH1 - M ER0 Z\nDEMARSH  D EH1 - M AA0 R SH\nDEMARTIN  D IH0 - M AA1 R - T IH0 N\nDEMARTINI  D IH0 - M AA0 R - T IY1 - N IY0\nDEMARTINO  D IH0 - M AA0 R - T IY1 - N OW0\nDEMARY  D EH1 - M EH0 - R IY0\nDEMARZO  D IH0 - M AA1 R - Z OW0\nDEMAS  D IY1 - M AH0 S\nDEMASI  D IH0 - M AA1 - S IY0\nDEMASTERS  D IY1 - M AE0 - S T ER0 Z\nDEMATTEIS  D EH1 - M AH0 - T AY0 Z\nDEMATTEO  D IH0 - M AA1 - T IY0 - OW0\nDEMATTIA  D IH0 - M AA1 - SH AH0\nDEMAURO  D IH0 - M AO1 - R OW0\nDEMAY  D EH1 - M EY0\nDEMAYO  D EY0 - M EY1 - OW0\nDEMBECK  D EH1 M - B EH2 K\nDEMBINSKI  D IH0 M - B IH1 N - S K IY0\nDEMBOWSKI  D IH0 M - B AO1 F S - K IY0\nDEMBSKI  D EH1 M S - K IY0\nDEMBY  D EH1 M - B IY0\nDEMCHAK  D EH1 M - CH AH0 K\nDEMEAN  D IH0 - M IY1 N\nDEMEANED  D IH0 - M IY1 N D\nDEMEANING  D IH0 - M IY1 - N IH0 NG\nDEMEANOR  D IH0 - M IY1 - N ER0\nDEMEANS  D IH0 - M IY1 N Z\nDEMEL  D EH1 - M AH0 L\nDEMELLO  D IH0 - M EH1 - L OW0\nDEMELO  D IH0 - M EH1 - L OW0\nDEMENT  D AH0 - M EH1 N T\nDEMENTED  D IH0 - M EH1 N - T IH0 D\nDEMENTIA  D IH0 - M EH1 N - SH IY0 - AH0\nDEMEO  D IY1 - M IY0 - OW0\nDEMEREE  D EH1 - M ER0 - IY0\nDEMERGER  D IY0 - M ER1 - JH ER0\nDEMERIST  D IH0 - M ER1 - IH0 S T\nDEMERIST'S  D IH0 - M ER1 - IH0 S T S\nDEMERIST'S(2)  D IH0 - M ER1 - IH0 S S\nDEMERIST'S(3)  D IH0 - M ER1 - IH0 S\nDEMERIST(2)  D EH1 - M ER0 - IH0 S T\nDEMERIT  D IY0 - M EH1 - R AH0 T\nDEMERITS  D IY0 - M EH1 - R AH0 T S\nDEMERITT  D EH1 - M ER0 - IH0 T\nDEMERS  D IY1 - M ER0 Z\nDEMERY  D IH0 - M ER1 - IY0\nDEMETER  D IH0 - M IY1 - T ER0\nDEMETRE  D EH0 - M IY1 - T ER0\nDEMETRIA  D IH0 - M EH1 - T R IY0 - AH0\nDEMETRIO  D IH0 - M EH1 - T R IY0 - OW0\nDEMETRIOU  D IH0 - M EH0 - T R IY1 - UW0\nDEMETRIUS  D IH0 - M IY1 - T R IY0 - AH0 S\nDEMEYER  D EH1 - M AY0 - ER0\nDEMI  D EH1 - M IY0\nDEMI'S  D EH1 - M IY0 Z\nDEMICCO  D IH0 - M IY1 - K OW0\nDEMICHAEL  D EH1 - M IH0 - K EH0 L\nDEMICHELE  D EH1 - M IH0 - K AH0 L\nDEMICK  D EH1 - M IH0 K\nDEMILIO  D IH0 - M IY1 - L IY0 - OW0\nDEMILITARIZATION  D IY0 - M IH2 - L AH0 - T ER0 - AH0 - Z EY1 - SH AH0 N\nDEMILITARIZE  D IY0 - M IH1 - L AH0 - T ER0 - AY2 Z\nDEMILITARIZED  D IY0 - M IH1 - L AH0 - T ER0 - AY2 Z D\nDEMILITARIZES  D IY0 - M IH1 - L AH0 - T ER0 - AY2 - Z IH0 Z\nDEMILITARIZING  D IY0 - M IH1 - L AH0 - T ER0 - AY2 - Z IH0 NG\nDEMILLE  D IH0 - M IY1 - L IY0\nDEMILLE(2)  D IH0 - M IH1 L\nDEMILO  D IH0 - M IH1 - L OW0\nDEMILO(2)  D IH0 - M AY1 - L OW0\nDEMING  D EH1 - M IH0 NG\nDEMINT  D EY1 - M IY0 N T\nDEMIRAG  D EY2 - M IH0 - R AA1 JH\nDEMIREL  D AH0 - M IH1 - R AH0 L\nDEMIRJIAN  D IH0 - M ER1 - JH IY0 - AH0 N\nDEMISCH  D AH0 - M IH1 SH\nDEMISE  D IH0 - M AY1 Z\nDEMISH  D EH1 - M IH0 SH\nDEMJANJUK  D EH0 - M Y AA1 - N Y UW0 K\nDEMJANJUK'S  D EH0 - M Y AA1 - N Y UW0 K S\nDEMJANJUK'S(2)  D EH0 - M Y AE1 - N Y UW0 K S\nDEMJANJUK(2)  D EH0 - M Y AE1 - N Y UW0 K\nDEMKO  D EH1 M - K OW0\nDEMLER  D EH1 M - L ER0\nDEMMA  D IY1 - M AH0\nDEMME  D EH1 M\nDEMMER  D EH1 - M ER0\nDEMMING  D EH1 - M IH0 NG\nDEMMON  D EH1 - M AH0 N\nDEMMONS  D EH1 - M AH0 N Z\nDEMO  D EH1 - M OW0\nDEMOBILIZATION  D IY0 - M OW2 - B AH0 - L AY0 - Z EY1 - SH AH0 N\nDEMOBILIZATION(2)  D IY0 - M OW2 - B AH0 - L AH0 - Z EY1 - SH AH0 N\nDEMOBILIZE  D IH0 - M OW1 - B AH0 - L AY2 Z\nDEMOBILIZED  D IH0 - M OW1 - B AH0 - L AY2 Z D\nDEMOCRACIES  D IH0 - M AA1 - K R AH0 - S IY0 Z\nDEMOCRACY  D IH0 - M AA1 - K R AH0 - S IY0\nDEMOCRACY'S  D IH0 - M AA1 - K R AH0 - S IY0 Z\nDEMOCRAT  D EH1 - M AH0 - K R AE2 T\nDEMOCRAT'S  D EH1 - M AH0 - K R AE2 T S\nDEMOCRATIC  D EH2 - M AH0 - K R AE1 - T IH0 K\nDEMOCRATIC'S  D EH2 - M AH0 - K R AE1 - T IH0 K S\nDEMOCRATICA  D EH2 - M AH0 - K R AE1 - T IH0 - K AH0\nDEMOCRATICALLY  D EH2 - M AH0 - K R AE1 - T IH0 K - L IY0\nDEMOCRATICS  D EH2 - M AH0 - K R AE1 - T IH0 K S\nDEMOCRATIZATION  D IH0 - M AA2 - K R AH0 - T AH0 - Z EY1 - SH AH0 N\nDEMOCRATIZE  D IH0 - M AA1 - K R AH0 - T AY2 Z\nDEMOCRATIZED  D IH0 - M AA1 - K R AH0 - T AY2 Z D\nDEMOCRATIZING  D IH0 - M AA1 - K R AH0 - T AY2 - Z IH0 NG\nDEMOCRATS  D EH1 - M AH0 - K R AE2 T S\nDEMOCRATS'  D EH1 - M AH0 - K R AE2 T S\nDEMODULATE  D IY2 - M AA2 - JH AH0 - L EY1 T\nDEMODULATION  D IY2 - M AA2 - JH AH0 - L EY1 - SH AH0 N\nDEMOGRAPHER  D IH0 - M AA1 - G R AH0 - F ER0\nDEMOGRAPHERS  D IH0 - M AA1 - G R AH0 - F ER0 Z\nDEMOGRAPHIC  D EH2 - M AH0 - G R AE1 - F IH0 K\nDEMOGRAPHICALLY  D EH2 - M AH0 - G R AE1 - F IH0 K - L IY0\nDEMOGRAPHICS  D EH2 - M AH0 - G R AE1 - F IH0 K S\nDEMOGRAPHY  D IH0 - M AA1 - G R AH0 - F IY0\nDEMOLISH  D IH0 - M AA1 - L IH0 SH\nDEMOLISHED  D IH0 - M AA1 - L IH0 SH T\nDEMOLISHING  D IH0 - M AA1 - L IH0 - SH IH0 NG\nDEMOLITION  D EH2 - M AH0 - L IH1 - SH AH0 N\nDEMON  D IY1 - M AH0 N\nDEMOND  D AH0 - M AA1 N D\nDEMONIC  D IH0 - M AA1 - N IH0 K\nDEMONIZATION  D IY2 - M AH0 - N AH0 - Z EY1 - SH AH0 N\nDEMONIZE  D IY1 - M AH0 - N AY2 Z\nDEMONIZED  D IY1 - M AH0 - N AY2 Z D\nDEMONIZER  D IY1 - M AH0 - N AY2 - Z ER0\nDEMONIZEZ  D IY1 - M AH0 - N AY2 - Z IH0 Z\nDEMONIZING  D IY1 - M AH0 - N AY2 - Z IH0 NG\nDEMONS  D IY1 - M AH0 N Z\nDEMONSTRABLE  D EH1 - M AH0 N - S T R AH0 - B AH0 L\nDEMONSTRABLY  D IH0 - M AA1 N - S T R AH0 - B L IY0\nDEMONSTRATE  D EH1 - M AH0 N - S T R EY2 T\nDEMONSTRATED  D EH1 - M AH0 N - S T R EY2 - T AH0 D\nDEMONSTRATED(2)  D EH1 - M AH0 N - S T R EY2 - T IH0 D\nDEMONSTRATES  D EH1 - M AH0 N - S T R EY2 T S\nDEMONSTRATING  D EH1 - M AH0 N - S T R EY2 - T IH0 NG\nDEMONSTRATION  D EH2 - M AH0 N - S T R EY1 - SH AH0 N\nDEMONSTRATIONS  D EH2 - M AH0 N - S T R EY1 - SH AH0 N Z\nDEMONSTRATIVE  D IH0 - M AA1 N - S T R AH0 - T IH0 V\nDEMONSTRATOR  D EH1 - M AH0 N - S T R EY2 - T ER0\nDEMONSTRATORS  D EH1 - M AH0 N - S T R EY2 - T ER0 Z\nDEMONT  D EH1 - M AH0 N T\nDEMONTE  D AH0 - M AA1 N - T IY0\nDEMOPOULOS  D AH0 - M AA1 - P AH0 - L IH0 S\nDEMORALIZATION  D IH0 - M AO2 - R AH0 - L IH0 - Z EY1 - SH AH0 N\nDEMORALIZE  D IH0 - M AO1 - R AH0 - L AY2 Z\nDEMORALIZED  D IH0 - M AO1 - R AH0 - L AY2 Z D\nDEMORALIZING  D IH0 - M AO1 - R AH0 - L AY2 - Z IH0 NG\nDEMORE  D EH1 - M AO0 R\nDEMOREST  D EY0 - M AO1 - R IH0 S T\nDEMORY  D IH0 - M ER1 - IY0\nDEMORY'S  D IH0 - M ER1 - IY0 Z\nDEMOS  D EH1 - M OW2 Z\nDEMOSS  D AH0 - M AA1 S\nDEMOTE  D IH0 - M OW1 T\nDEMOTED  D IH0 - M OW1 - T IH0 D\nDEMOTION  D IH0 - M OW1 - SH AH0 N\nDEMOTIONS  D IH0 - M OW1 - SH AH0 N Z\nDEMOTT  D AH0 - M AA1 T\nDEMOULIN  D EH1 - M UW0 - L AE0 N\nDEMOV  D EH1 - M AA0 V\nDEMPEWOLF  D EH1 M - P Y UW0 - UH0 L F\nDEMPS  D EH1 M P S\nDEMPSEY  D EH1 M P - S IY0\nDEMPSTER  D EH1 M P - S T ER0\nDEMSKI  D EH1 M S - K IY0\nDEMSKY  D EH1 M S - K IY0\nDEMUR  D IH0 - M ER1\nDEMURE  D IH0 - M Y UH1 R\nDEMURELY  D IH0 - M Y UH1 R - L IY0\nDEMURO  D IH0 - M UH1 - R OW0\nDEMURRED  D IH0 - M ER1 D\nDEMURRING  D IH0 - M ER1 - IH0 NG\nDEMURS  D IH0 - M ER1 Z\nDEMUS  D IY1 - M AH0 S\nDEMUTH  D IY1 - M AH0 TH\nDEMYAN  D EH1 - M Y AH0 N\nDEMYSTIFY  D IY0 - M IH1 - S T AH0 - F AY2\nDEN  D EH1 N\nDENA  D IY1 - N AH0\nDENAPOLI  D IH0 - N AA1 - P AH0 - L IY0\nDENARD  D IH0 - N AA1 R D\nDENARDO  D IH0 - N AA1 R - D OW0\nDENARII  D IH0 - N AE1 - R IY0\nDENARIUS  D IH0 - N AE1 - R IY0 - AH0 S\nDENARO  D IH0 - N AA1 - R OW0\nDENATALE  D IH0 - N AA0 - T AA1 - L IY0\nDENATIONALIZATION  D IY2 - N AE2 - SH AH0 N - AH0 - L IH0 - Z EY1 - SH AH0 N\nDENATIONALIZATIONS  D IY0 - N AE2 - SH AH0 N - AH0 - L IH0 - Z EY1 - SH AH0 N Z\nDENATIONALIZE  D IH0 - N AE1 - SH AH0 N - AH0 - L AY2 Z\nDENATIONALIZED  D IH0 - N AE1 - SH AH0 N - AH0 - L AY2 Z D\nDENATIONALIZING  D IH0 - N AE1 - SH AH0 N - AH0 - L AY2 - Z IH0 NG\nDENATURE  D IH0 - N EY1 - CH ER0\nDENATURED  D IH0 - N EY1 - CH ER0 D\nDENAULT  D IH0 - N OW1\nDENBO  D IY1 N - B OW0\nDENBOER  D EH1 N - B OW0 - ER0\nDENBOW  D EH1 N - B OW0\nDENBY  D EH1 N - B IY0\nDENDEN  D EH1 N - D AH0 N\nDENDINGER  D IY1 N - D IH0 - NG ER0\nDENDRITIC  D EH0 N - D R IH1 - T IH0 K\nDENDROCHRONOLOGY  D EH2 N - D R OW2 - K R AH0 - N AA1 - L AH0 - JH IY0\nDENDY  D EH1 N - D IY0\nDENEAU  D IH0 - N OW1\nDENEAULT  D IH0 - N OW1\nDENEEN  D IH0 - N IY1 N\nDENEKE  D EH1 - N IH0 K\nDENENBERG  D EH1 - N AH0 N - B ER0 G\nDENES  D IY1 N Z\nDENEUVE  D IH0 - N AH1 V\nDENEUVE(2)  D IY0 - N AH1 V\nDENEVE  D EH1 - N IH0 V\nDENG  D EH1 NG\nDENG'S  D EH1 NG Z\nDENGEL  D EH1 NG - G AH0 L\nDENGLER  D IH1 - NG AH0 - L ER0\nDENGLER(2)  D IH1 NG - L ER0\nDENGUE  D EH1 N G\nDENHAM  D EH1 - N AH0 M\nDENHART  D EH1 N - HH AA2 R T\nDENHARTOG  D EH1 N - HH AA0 R - T AH0 G\nDENHERDER  D EH1 N - HH ER2 - D ER0\nDENHOLM  D EH1 N - HH OW2 L M\nDENIABILITY  D IH0 - N AY2 - AH0 - B IH1 - L IH0 - T IY0\nDENIAL  D IH0 - N AY1 - AH0 L\nDENIALS  D IH0 - N AY1 - AH0 L Z\nDENICE  D IH0 - N IY1 S\nDENICOLA  D IH0 - N IY0 - K OW1 - L AH0\nDENIED  D IH0 - N AY1 D\nDENIES  D IH0 - N AY1 Z\nDENIGRATE  D EH1 - N AH0 - G R EY2 T\nDENIGRATED  D EH1 - N IH0 - G R EY2 - T IH0 D\nDENIGRATING  D EH1 - N IH0 - G R EY2 - T IH0 NG\nDENIGRIS  D EH1 - N IH0 - G R IH0 S\nDENIKE  D EH1 - N IH0 K\nDENIM  D EH1 - N AH0 M\nDENIO  D IY1 - N IY0 - OW0\nDENIRO  D IH0 - N IH1 - R OW0\nDENIRO'S  D IH0 - N IH1 - R OW0 Z\nDENIS  D EH1 - N IH0 S\nDENISE  D IH0 - N IY1 S\nDENISON  D EH1 - N IH0 - S AH0 N\nDENISON'S  D EH1 - N IH0 - S AH0 N Z\nDENISTON  D EH1 - N IH0 - S T AA0 N\nDENIZ  D EY1 - N IY0 Z\nDENIZEN  D EH1 - N AH0 - Z AH0 N\nDENIZENS  D EH1 - N AH0 - Z AH0 N Z\nDENK  D EH1 NG K\nDENKER  D EH1 NG - K ER0\nDENKI  D EH1 NG - K IY0\nDENKINS  D EH1 NG - K IH0 N Z\nDENKO  D EH1 NG - K OW0\nDENKTAS  D EH1 NG K - T AH0 S\nDENLEA  D EH1 N - L IY2\nDENLEY  D EH1 N - L IY0\nDENLINGER  D EH1 - N AH0 L - IH0 - NG ER0\nDENLINGER(2)  D EH1 N - L IH0 - NG ER0\nDENLINGER(3)  D EH1 N - L IH0 N - JH ER0\nDENMAN  D EH1 N - M AH0 N\nDENMARK  D EH1 N - M AA2 R K\nDENMARK'S  D EH1 N - M AA2 R K S\nDENMON  D EH1 N - M AH0 N\nDENN  D EH1 N\nDENNARD  D IH0 - N AA1 R D\nDENNE  D EH1 N\nDENNEHY  D EH1 - N IH0 - HH IY0\nDENNEN  D EH1 - N AH0 N\nDENNER  D EH1 - N ER0\nDENNETT  D EH1 - N IH0 T\nDENNEY  D EH1 - N IY0\nDENNIE  D EH1 - N IY0\nDENNIN  D EH1 - N IH0 N\nDENNING  D EH1 - N IH0 NG\nDENNINGER  D EH1 - N IH0 - NG ER0\nDENNINGTON  D EH1 - N IH0 NG - T AH0 N\nDENNIS  D EH1 - N IH0 S\nDENNISON  D EH1 - N IH0 - S AH0 N\nDENNISTON  D EH1 - N IH0 - S T AA0 N\nDENNO  D EH1 - N OW0\nDENNY  D EH1 - N IY0\nDENNY'S  D EH1 - N IY0 Z\nDENO  D IY1 - N OW0\nDENOBLE  D EH1 - N OW0 - B AH0 L\nDENOMINATE  D IH0 - N AA1 - M AH0 - N EY2 T\nDENOMINATED  D IH0 - N AA1 - M AH0 - N EY2 - T IH0 D\nDENOMINATION  D IH0 - N AO2 - M AH0 - N EY1 - SH AH0 N\nDENOMINATION'S  D IH0 - N AO2 - M AH0 - N EY1 - SH AH0 N Z\nDENOMINATIONAL  D IH0 - N AO2 - M AH0 - N EY1 - SH AH0 - N AH0 L\nDENOMINATIONS  D IH0 - N AO2 - M AH0 - N EY1 - SH AH0 N Z\nDENOMINATOR  D IH0 - N AA1 - M AH0 - N EY2 - T ER0\nDENOMME  D EH1 - N AH0 M\nDENOSSE  D IH0 - N OW1 S\nDENOSSE(2)  D IH0 - N AO1 - S IY0\nDENOTE  D IH0 - N OW1 T\nDENOTED  D IH0 - N OW1 - T AH0 D\nDENOTES  D IH0 - N OW1 T S\nDENOUEMENT  D EY2 - N UW2 - M AA1 N\nDENOUNCE  D IH0 - N AW1 N S\nDENOUNCED  D IH0 - N AW1 N S T\nDENOUNCES  D IH0 - N AW1 N - S IH0 Z\nDENOUNCING  D IH0 - N AW1 N - S IH0 NG\nDENOYER  D EH1 - N OY0 - ER0\nDENS  D EH1 N Z\nDENSE  D EH1 N S\nDENSELY  D EH1 N S - L IY0\nDENSER  D EH1 N - S ER0\nDENSEST  D EH1 N - S AH0 S T\nDENSHIN  D EH1 N - SH IH0 N\nDENSITIES  D EH1 N - S AH0 - T IY0 Z\nDENSITOMETER  D EH2 N - S AH0 - T AA1 - M AH0 - T ER0\nDENSITY  D EH1 N - S AH0 - T IY0\nDENSITY(2)  D EH1 N - S IH0 - T IY0\nDENSLEY  D EH1 N S - L IY0\nDENSLOW  D EH1 N - S L OW2\nDENSMORE  D IY1 N S - M AO0 R\nDENSMORE(2)  D EH1 N - S M AO0 R\nDENSON  D EH1 N - S AH0 N\nDENT  D EH1 N T\nDENTAL  D EH1 N - T AH0 L\nDENTAL(2)  D EH1 - N AH0 L\nDENTALS  D EH1 N - T AH0 L Z\nDENTALS(2)  D EH1 - N AH0 L Z\nDENTE  D EH1 N T\nDENTED  D EH1 N - T IH0 D\nDENTIN  D EH1 N - T AH0 N\nDENTINE  D EH1 N - T IY0 N\nDENTING  D EH1 N - T IH0 NG\nDENTINO  D IH0 N - T IY1 - N OW0\nDENTIST  D EH1 N - T AH0 S T\nDENTIST'S  D EH1 N - T IH0 S T S\nDENTIST'S(2)  D EH1 - N IH0 S S\nDENTIST'S(3)  D EH1 - N IH0 S\nDENTIST(2)  D EH1 N - T IH0 S T\nDENTIST(3)  D EH1 - N IH0 S T\nDENTISTRY  D EH1 N - T AH0 S - T R IY0\nDENTISTRY(2)  D EH1 N - T IH0 S - T R IY0\nDENTISTRY(3)  D EH1 - N IH0 - S T R IY0\nDENTISTS  D EH1 N - T AH0 S T S\nDENTISTS'  D EH1 N - T IH0 S T S\nDENTISTS'(2)  D EH1 - N IH0 S T S\nDENTISTS(2)  D EH1 N - T IH0 S T S\nDENTISTS(3)  D EH1 - N IH0 S S\nDENTISTS(4)  D EH1 - N IH0 S\nDENTITION  D EH0 N - T IH1 - SH AH0 N\nDENTLER  D EH1 N T - L ER0\nDENTON  D EH1 N - T AH0 N\nDENTREMONT  D EY0 N - T R EY1 - M AA0 N T\nDENTS  D EH1 N T S\nDENTSU  D EH1 N T - S UW0\nDENTTON  D EH1 N - T AH0 N\nDENTURE  D EH1 N - CH ER0\nDENTURES  D EH1 N - CH ER0 Z\nDENTZER  D EH1 N T - Z ER0\nDENUCCI  D IH0 - N UW1 - CH IY0\nDENUCLEARIZATION  D IY0 - N UW2 - K L IY0 - ER0 - AH0 - Z EY1 - SH AH0 N\nDENUCLEARIZED  D IH0 - N UW1 - K L IY0 - ER0 - AY2 Z D\nDENUCLEARIZED(2)  D IY0 - N UW1 - K L IY0 - ER0 - AY2 Z D\nDENUDE  D IH0 - N UW1 D\nDENUDED  D IH0 - N UW1 - D IH0 D\nDENUDING  D IH0 - N UW1 - D IH0 NG\nDENUNCIATION  D IH0 - N AH2 N - S IY0 - EY1 - SH AH0 N\nDENUNCIATIONS  D IH0 - N AH2 N - S IY0 - EY1 - SH AH0 N Z\nDENUNZIO  D AH0 - N AH1 N - Z IY0 - OW0\nDENVER  D EH1 N - V ER0\nDENVER'S  D EH1 N - V ER0 Z\nDENWA  D EH1 N - W AA2\nDENY  D IH0 - N AY1\nDENYING  D IH0 - N AY1 - IH0 NG\nDENYS  D EH1 - N IH0 S\nDENYSE  D EH1 - N AY0 S\nDENZ  D EH1 N Z\nDENZEL  D EH1 N - Z AH0 L\nDENZER  D EH1 N - Z ER0\nDENZIL  D EH1 N - Z AH0 L\nDENZLER  D EH1 N Z - L ER0\nDEO  D IY1 - OW0\nDEODORANT  D IY0 - OW1 - D ER0 - AH0 N T\nDEODORANTS  D IY0 - OW1 - D ER0 - AH0 N T S\nDEOLIVEIRA  D IY2 - AA2 - L IH0 - V EY1 - R AH0\nDEON  D IY1 - AA0 N\nDEOXYRIBONUCLEIC  D IY0 - AA2 K - S IY0 - R AY2 - B OW0 - N UW0 - K L EY1 - IH0 K\nDEP  D IH0 - P AA1 R T - M AH0 N T\nDEP(2)  D EH1 P\nDEPACE  D IH0 - P AA1 - CH IY0\nDEPALMA  D IH0 - P AA1 L - M AH0\nDEPALMA'S  D IH0 - P AA1 L - M AH0 Z\nDEPALO  D IH0 - P AA1 - L OW0\nDEPAOLA  D IH0 - P AW1 - L AH0\nDEPAOLI  D IH0 - P AW1 - L IY0\nDEPAOLIS  D EH0 - P AW1 - L IH0 S\nDEPAOLO  D IH0 - P AW1 - L OW0\nDEPARDIEU  D IY2 - P AA0 R - D Y AH1\nDEPARDIEU(2)  D IY2 - P AA0 R - D UW1\nDEPART  D IH0 - P AA1 R T\nDEPARTED  D IH0 - P AA1 R - T AH0 D\nDEPARTED(2)  D IH0 - P AA1 R - T IH0 D\nDEPARTING  D IH0 - P AA1 R - T IH0 NG\nDEPARTMENT  D IH0 - P AA1 R T - M AH0 N T\nDEPARTMENT'S  D IH0 - P AA1 R T - M AH0 N T S\nDEPARTMENTAL  D IH0 - P AA2 R T - M EH1 - N AH0 L\nDEPARTMENTAL(2)  D IH0 - P AA2 R T - M EH1 N - T AH0 L\nDEPARTMENTALIZE  D IH0 - P AA2 R T - M EH1 N - T AH0 - L AY2 Z\nDEPARTMENTALIZE(2)  D IH0 - P AA2 R T - M EH1 - N AH0 - L AY2 Z\nDEPARTMENTALIZED  D IH0 - P AA2 R T - M EH1 N - T AH0 - L AY2 Z D\nDEPARTMENTALIZED(2)  D IH0 - P AA2 R T - M EH1 - N AH0 - L AY2 Z D\nDEPARTMENTS  D IH0 - P AA1 R T - M AH0 N T S\nDEPARTS  D IH0 - P AA1 R T S\nDEPARTURE  D IH0 - P AA1 R - CH ER0\nDEPARTURES  D IH0 - P AA1 R - CH ER0 Z\nDEPASCALE  D IH0 - P AA0 - S K AA1 - L IY0\nDEPASQUALE  D IH0 - P AA0 S - K W AA1 - L IY0\nDEPASS  D IH0 - P AE1 S\nDEPAUL  D IH0 - P AO1 L\nDEPAULA  D IH0 - P AO1 - L AH0\nDEPAULO  D IH0 - P AO1 - L OW0\nDEPAUW  D AH0 - P AW1\nDEPEND  D IH0 - P EH1 N D\nDEPENDABILITY  D IH0 - P EH2 N - D AH0 - B IH1 - L IH0 - T IY0\nDEPENDABLE  D IH0 - P EH1 N - D AH0 - B AH0 L\nDEPENDED  D IH0 - P EH1 N - D AH0 D\nDEPENDED(2)  D IH0 - P EH1 N - D IH0 D\nDEPENDENCE  D IH0 - P EH1 N - D AH0 N S\nDEPENDENCIES  D IH0 - P EH1 N - D AH0 N - S IY0 Z\nDEPENDENCY  D IH0 - P EH1 N - D AH0 N - S IY0\nDEPENDENT  D IH0 - P EH1 N - D AH0 N T\nDEPENDENTS  D IH0 - P EH1 N - D AH0 N T S\nDEPENDING  D IH0 - P EH1 N - D IH0 NG\nDEPENDS  D IH0 - P EH1 N D Z\nDEPERSONALIZE  D IY0 - P ER1 - S AH0 N - AH0 - L AY2 Z\nDEPERSONALIZE(2)  D IY0 - P ER1 - S N AH0 - L AY2 Z\nDEPETRO  D IH0 - P EH1 - T R OW0\nDEPEW  D AH0 - P Y UW1\nDEPHILLIPS  D EH1 - F IH0 - L IH0 P S\nDEPHILLIPS(2)  D IH0 - F IH1 - L IH0 P S\nDEPICT  D IH0 - P IH1 K T\nDEPICTED  D IH0 - P IH1 K - T AH0 D\nDEPICTED(2)  D IH0 - P IH1 K - T IH0 D\nDEPICTING  D IH0 - P IH1 K - T IH0 NG\nDEPICTION  D IH0 - P IH1 K - SH AH0 N\nDEPICTIONS  D IH0 - P IH1 K - SH AH0 N Z\nDEPICTS  D IH0 - P IH1 K T S\nDEPICTS(2)  D IH0 - P IH1 K S\nDEPIETRO  D IH0 - P IY1 - T R OW0\nDEPILATORY  D IH0 - P IH1 - L AH0 - T AO2 - R IY0\nDEPINA  D IH0 - P IY1 - N AH0\nDEPINTO  D IH0 - P IY1 N - T OW0\nDEPLETE  D IH0 - P L IY1 T\nDEPLETED  D IH0 - P L IY1 - T IH0 D\nDEPLETER  D IH0 - P L IY1 - T ER0\nDEPLETERS  D IH0 - P L IY1 - T ER0 Z\nDEPLETES  D IH0 - P L IY1 T S\nDEPLETING  D IH0 - P L IY1 - T IH0 NG\nDEPLETION  D IH0 - P L IY1 - SH AH0 N\nDEPLORABLE  D IH0 - P L AO1 - R AH0 - B AH0 L\nDEPLORE  D IH0 - P L AO1 R\nDEPLORED  D IH0 - P L AO1 R D\nDEPLORES  D IH0 - P L AO1 R Z\nDEPLORING  D IH0 - P L AO1 - R IH0 NG\nDEPLOY  D IH0 - P L OY1\nDEPLOYABLE  D IH0 - P L OY1 - AH0 - B AH0 L\nDEPLOYED  D IH0 - P L OY1 D\nDEPLOYING  D IH0 - P L OY1 - IH0 NG\nDEPLOYMENT  D IH0 - P L OY1 - M AH0 N T\nDEPLOYMENTS  D IH0 - P L OY1 - M AH0 N T S\nDEPLOYS  D IH0 - P L OY1 Z\nDEPNER  D EH1 P - N ER0\nDEPO  D IY1 - P OW0\nDEPO(2)  D EH1 - P OW0\nDEPOLO  D IH0 - P OW1 - L OW0\nDEPONTE  D IH0 - P OW1 N - T IY0\nDEPOPULATE  D IY0 - P AA1 - P Y AH0 - L EY2 T\nDEPOPULATION  D IH0 - P AA2 - P Y AH0 - L EY1 - SH AH0\nDEPOPULATION(2)  D IY2 - P AA0 - P Y AH0 - L EY1 - SH AH0\nDEPORT  D IH0 - P AO1 R T\nDEPORTATION  D IY2 - P AO0 R - T EY1 - SH AH0 N\nDEPORTATIONS  D IY2 - P AO0 R - T EY1 - SH AH0 N Z\nDEPORTED  D IH0 - P AO1 R - T AH0 D\nDEPORTEE  D IY2 - P AO0 R - T IY1\nDEPORTEES  D IY2 - P AO0 R - T IY1 Z\nDEPORTING  D IH0 - P AO1 R - T IH0 NG\nDEPORTMENT  D AH0 - P AO1 R T - M AH0 N T\nDEPOSE  D IH0 - P OW1 Z\nDEPOSED  D IH0 - P OW1 Z D\nDEPOSIT  D AH0 - P AA1 - Z IH0 T\nDEPOSIT(2)  D IH0 - P AA1 - Z AH0 T\nDEPOSITARY  D AH0 - P AA1 - Z IH0 - T EH2 - R IY0\nDEPOSITARY(2)  D IH0 - P AA1 - Z IH0 - T EH2 - R IY0\nDEPOSITED  D AH0 - P AA1 - Z IH0 - T IH0 D\nDEPOSITED(2)  D IH0 - P AA1 - Z AH0 - T AH0 D\nDEPOSITING  D AH0 - P AA1 - Z IH0 - T IH0 NG\nDEPOSITION  D EH2 - P AH0 - Z IH1 - SH AH0 N\nDEPOSITIONAL  D EH2 - P AH0 - Z IH1 - SH AH0 - N AH0 L\nDEPOSITIONS  D EH2 - P AH0 - Z IH1 - SH AH0 N Z\nDEPOSITOR  D AH0 - P AA1 - Z IH0 - T ER0\nDEPOSITOR'S  D AH0 - P AA1 - Z IH0 - T ER0 Z\nDEPOSITORS  D AH0 - P AA1 - Z IH0 - T ER0 Z\nDEPOSITORS'  D IH0 - P AA1 - Z IH0 - T ER0 Z\nDEPOSITORY  D IH0 - P AA1 - Z AH0 - T AO2 - R IY0\nDEPOSITS  D AH0 - P AA1 - Z IH0 T S\nDEPOSITS(2)  D IH0 - P AA1 - Z AH0 T S\nDEPOT  D IY1 - P OW0\nDEPOT'S  D IY1 - P OW0 Z\nDEPOTS  D IY1 - P OW0 Z\nDEPOY  D EH1 - P OY0\nDEPP  D EH1 P\nDEPPE  D EH1 P\nDEPPEN  D EH1 - P AH0 N\nDEPRAVATION  D EH2 - P R AH0 - V EY1 - SH AH0 N\nDEPRAVE  D IY0 - P R EY1 V\nDEPRAVED  D IY0 - P R EY1 V D\nDEPRAVITY  D IH0 - P R AE1 - V AH0 - T IY0\nDEPRECATE  D EH1 - P R AH0 - K EY2 T\nDEPRECATING  D EH1 - P R AH0 - K EY2 - T IH0 NG\nDEPRECIABLE  D IH0 - P R IH1 - SH AH0 - B AH0 L\nDEPRECIATE  D IH0 - P R IY1 - SH IY0 - EY2 T\nDEPRECIATED  D IH0 - P R IY1 - SH IY0 - EY2 - T IH0 D\nDEPRECIATES  D IH0 - P R IY1 - SH IY0 - EY2 T S\nDEPRECIATING  D IH0 - P R IY1 - SH IY0 - EY2 - T IH0 NG\nDEPRECIATION  D IH0 - P R IY2 - SH IY0 - EY1 - SH AH0 N\nDEPRECIATIONS  D IH0 - P R IY2 - SH IY0 - EY1 - SH AH0 N Z\nDEPREDATION  D EH2 - P R AH0 - D EY1 - SH AH0 N\nDEPREDATIONS  D EH2 - P R AH0 - D EY1 - SH AH0 N Z\nDEPREE  D IH0 - P R IY1\nDEPRENYL  D EH1 - P R AH0 - N IH2 L\nDEPRESS  D IH0 - P R EH1 S\nDEPRESSANT  D IH0 - P R EH1 - S AH0 N T\nDEPRESSANTS  D IH0 - P R EH1 - S AH0 N T S\nDEPRESSED  D IH0 - P R EH1 S T\nDEPRESSES  D IH0 - P R EH1 - S AH0 Z\nDEPRESSES(2)  D IH0 - P R EH1 - S IH0 Z\nDEPRESSING  D IH0 - P R EH1 - S IH0 NG\nDEPRESSINGLY  D IH0 - P R EH1 - S IH0 NG - L IY0\nDEPRESSION  D IH0 - P R EH1 - SH AH0 N\nDEPRESSIONS  D IH0 - P R EH1 - SH AH0 N Z\nDEPRESSIVE  D IH0 - P R EH1 - S IH0 V\nDEPRESSURIZE  D IH0 - P R EH1 - SH ER0 - AY2 Z\nDEPRESSURIZED  D IH0 - P R EH1 - SH ER0 - AY2 Z D\nDEPREY  D EH1 - P R IY0\nDEPREZ  D EY0 - P R EH1 Z\nDEPRIEST  D EH1 - P ER0 - IY0 - IH0 S T\nDEPRIEST(2)  D IH0 - P R IY1 S T\nDEPRIVATION  D EH2 - P R AH0 - V EY1 - SH AH0 N\nDEPRIVATIONS  D EH2 - P R AH0 - V EY1 - SH AH0 N Z\nDEPRIVE  D IH0 - P R AY1 V\nDEPRIVED  D IH0 - P R AY1 V D\nDEPRIVES  D IH0 - P R AY1 V Z\nDEPRIVING  D IH0 - P R AY1 - V IH0 NG\nDEPROGRAM  D IY0 - P R OW1 - G R AE0 M\nDEPROGRAMMING  D IY0 - P R OW1 - G R AE0 - M IH0 NG\nDEPTH  D EH1 P TH\nDEPTHS  D EH1 P TH S\nDEPTULA  D IH0 P - T UW1 - L AH0\nDEPUE  D AH0 - P Y UW1\nDEPUTIES  D EH1 - P Y AH0 - T IY0 Z\nDEPUTIES(2)  D EH1 - P Y UW0 - T IY0 Z\nDEPUTIZE  D EH1 - P Y AH0 - T AY2 Z\nDEPUTIZED  D EH1 - P Y AH0 - T AY2 Z D\nDEPUTY  D EH1 - P Y AH0 - T IY0\nDEPUTY(2)  D EH1 - P Y UW0 - T IY0\nDEPUY  D IH0 - P W IY1\nDEQUEKER  D IH0 - K W EH1 - K ER0\nDER  D ER1\nDERAIL  D IH0 - R EY1 L\nDERAILED  D IH0 - R EY1 L D\nDERAILING  D IH0 - R EY1 - L IH0 NG\nDERAILMENT  D IH0 - R EY1 L - M AH0 N T\nDERAILMENTS  D IH0 - R EY1 L - M AH0 N T S\nDERAILS  D IH0 - R EY1 L Z\nDERAMO  D IH0 - R AA1 - M OW0\nDERAMUS  D EH1 - R AH0 - M IH0 S\nDERANGE  D IH0 - R EY1 N JH\nDERANGED  D IH0 - R EY1 N JH D\nDERASMO  D IH0 - R AA1 S - M OW0\nDERBY  D ER1 - B IY0\nDERCHIN  D ER1 - CH IH0 N\nDERCOLE  D IH0 R - K OW1 - L IY0\nDERDEN  D ER1 - D AH0 N\nDERDERIAN  D ER0 - D IH1 - R IY0 - AH0 N\nDERECKTOR  D ER0 - EH1 K - T ER0\nDEREGT  D ER0 - EH1 K T\nDEREGULATE  D IY0 - R EH1 - G Y AH0 - L EY0 T\nDEREGULATED  D IY0 - R EH1 - G Y AH0 - L EY0 - T IH0 D\nDEREGULATING  D IY0 - R EH1 - G Y AH0 - L EY2 - T IH0 NG\nDEREGULATION  D IY0 - R EH2 - G Y AH0 - L EY1 - SH AH0 N\nDEREGULATOR  D IY0 - R EH1 - G Y AH0 - L EY0 - T ER0\nDEREGULATORS  D IY0 - R EH1 - G Y AH0 - L EY0 - T ER0 Z\nDEREGULATORY  D IY0 - R EH1 - G Y AH0 - L AH0 - T AO2 - R IY0\nDEREK  D EH1 - R IH0 K\nDERELICT  D EH1 - R AH0 - L IH2 K T\nDERELICTION  D EH2 - R AH0 - L IH1 K - SH AH0 N\nDERELICTS  D EH1 - R AH0 - L IH2 K T S\nDERELICTS(2)  D EH1 - R AH0 - L IH2 K S\nDEREMER  D EH1 - R IY0 - M ER0\nDEREN  D IH1 - R AH0 N\nDERENZO  D IH0 - R EH1 N - Z OW0\nDERFLINGER  D ER1 - F AH0 L - IH0 - NG ER0\nDERFLINGER(2)  D ER1 - F L IH0 - NG ER0\nDERHAM  D ER1 - HH AH0 M\nDERHAMMER  D ER1 - HH AH0 - M ER0\nDERICK  D EH1 - R IH0 K\nDERICKSON  D EH1 - R IH0 K - S AH0 N\nDERIDDER  D EH1 - R IH0 - D ER0\nDERIDE  D IH0 - R AY1 D\nDERIDED  D IH0 - R AY1 - D IH0 D\nDERIDES  D IH0 - R AY1 D Z\nDERIDING  D IH0 - R AY1 - D IH0 NG\nDERIENZO  D IH0 - R IY1 N - Z OW0\nDERIK  D EH1 - R IH0 K\nDERING  D IH1 - R IH0 NG\nDERINGER  D EH1 - R IH0 N - JH ER0\nDERINGTON  D ER1 - IH0 NG - T AH0 N\nDERISE  D EH1 - R AY0 Z\nDERISION  D ER0 - IH1 - ZH AH0 N\nDERISIVE  D ER0 - IH1 - S IH0 V\nDERISIVE(2)  D ER0 - AY1 - S IH0 V\nDERISIVELY  D ER0 - IH1 - S IH0 V - L IY0\nDERISIVELY(2)  D ER0 - AY1 - S IH0 V - L IY0\nDERISO  D IH0 - R IY1 - S OW0\nDERIVATION  D EH2 - R AH0 - V EY1 - SH AH0 N\nDERIVATIVE  D ER0 - IH1 - V AH0 - T IH0 V\nDERIVATIVE(2)  D ER0 - IH1 - V IH0 - T IH0 V\nDERIVATIVES  D ER0 - IH1 - V AH0 - T IH0 V Z\nDERIVE  D ER0 - AY1 V\nDERIVED  D ER0 - AY1 V D\nDERIVES  D ER0 - AY1 V Z\nDERIVES(2)  D IH0 - R AY1 V Z\nDERIVING  D ER0 - AY1 - V IH0 NG\nDERK  D ER1 K\nDERKS  D ER1 K S\nDERKSEN  D ER1 K - S AH0 N\nDERLETH  D ER1 - L IH0 TH\nDERMA  D ER1 - M AH0\nDERMAL  D ER1 - M AH0 L\nDERMAN  D ER1 - M AH0 N\nDERMATOLOGICAL  D ER2 - M AH0 - T AH0 - L AA1 - JH IH0 - K AH0 L\nDERMATOLOGIST  D ER2 - M AH0 - T AA1 - L AH0 - JH IH0 S T\nDERMATOLOGISTS  D ER2 - M AH0 - T AA1 - L AH0 - JH IH0 S T S\nDERMATOLOGISTS(2)  D ER2 - M AH0 - T AA1 - L AH0 - JH IH0 S S\nDERMATOLOGISTS(3)  D ER2 - M AH0 - T AA1 - L AH0 - JH IH0 S\nDERMATOLOGY  D ER2 - M AH0 - T AA1 - L AH0 - JH IY0\nDERMER  D ER1 - M ER0\nDERMIS  D ER1 - M AH0 S\nDERMODY  D ER1 - M AH0 - D IY0\nDERMOT  D ER1 - M AH0 T\nDERMOTT  D ER1 - M AH0 T\nDERN  D ER1 N\nDERNER  D ER1 - N ER0\nDEROBERTIS  D EH1 - R AH0 - B ER0 - T IH0 S\nDEROCCO  D IH0 - R OW1 - K OW0\nDEROCHE  D EH1 - R AH0 K\nDEROCHER  D EH1 - R AH0 - K ER0\nDEROGATORY  D ER0 - AA1 - G AH0 - T AO2 - R IY0\nDEROO  D EH1 - R UW0\nDEROOS  D IH1 - R UW0 Z\nDEROSA  D IH0 - R OW1 - S AH0\nDEROSE  D EH1 - R AH0 S\nDEROSIA  D IH0 - R OW1 - S IY0 - AH0\nDEROSIER  D EH1 - R AH0 - S IY0 - ER0\nDEROSSETT  D EH1 - R AH0 - S EH0 T\nDEROUEN  D ER0 - W EH1 N\nDEROUIN  D ER0 - W IY1 N\nDEROUSSE  D ER0 - UW1 S\nDEROY  D IH1 - R OY0\nDERR  D EH1 R\nDERRICK  D EH1 - R IH0 K\nDERRICKSON  D EH1 - R IH0 K - S AH0 N\nDERRICO  D IH0 - R IY1 - K OW0\nDERRIG  D EH1 - R IH0 G\nDERRING  D EH1 - R IH0 NG\nDERRINGER  D EH1 - R AH0 N - JH ER0\nDERRINGTON  D EH1 - R IH0 NG - T AH0 N\nDERROW  D EH1 - R OW0\nDERRY  D EH1 - R IY0\nDERRYBERRY  D EH1 - R IY0 - B EH2 - R IY0\nDERSCH  D ER1 SH\nDERSHEM  D ER1 - SH IH0 M\nDERSHOWITZ  D ER1 - SH AH0 - W IH2 T S\nDERSHOWITZ'S  D ER1 - SH AH0 - W IH2 T - S IH0 Z\nDERSTINE  D ER1 - S T IY0 N\nDERTHICK  D ER1 - TH IH0 K\nDERUBEIS  D EH1 - R AH0 - B AY0 Z\nDERUITER  D IH1 - R IH0 - T ER0\nDERUKO  D IH0 - R UW1 - K OW0\nDERUS  D EH1 - R IH0 S\nDERUSHA  D EH1 - R AH0 - SH AH0\nDERUYTER  D IH1 - R AY0 - T ER0\nDERVIN  D ER1 - V IH0 N\nDERVISH  D ER1 - V IH0 SH\nDERWARD  D ER1 - W ER0 D\nDERWIN  D ER1 - W IH0 N\nDERWINSKI  D ER0 - W IH1 N - S K IY0\nDERY  D EH1 - R IY0\nDERYCK  D EH1 - R IH0 K\nDERYLE  D EH1 - R AH0 L\nDES  D EH1\nDES(2)  D IH2\nDESAI  D EY0 - S AA1 - IY0\nDESALINATION  D IY0 - S EY2 - L IH0 - N EY1 - SH AH0 N\nDESALINIZATION  D IY0 - S EY2 - L IH0 - N AH0 - Z EY1 - SH AH0 N\nDESALVO  D IH0 - S AA1 L - V OW0\nDESANCTIS  D EH0 - S AE1 NG K - T IH0 S\nDESANTI  D IH0 - S AA1 N - T IY0\nDESANTIAGO  D IH0 S - AA0 N - T IY0 - AA1 - G OW0\nDESANTIS  D EY0 - S AA1 N - T IH0 S\nDESANTO  D IH0 - S AA1 N - T OW0\nDESANTOS  D EY0 - S AA1 N - T OW0 Z\nDESAULNIERS  D EH1 - S OW0 L - N IY0 - ER0 Z\nDESAUTEL  D EH1 - S OW0 - T AH0 L\nDESAUTELS  D EH1 - S OW0 - T AH0 L Z\nDESCARPENTRIES  D EY0 - K AA1 R - P AH0 N - T R IY0 Z\nDESCARTES  D EY0 - K AA1 R T\nDESCARTES'S  D EY0 - K AA1 R T S\nDESCEND  D IH0 - S EH1 N D\nDESCENDANT  D IH0 - S EH1 N - D AH0 N T\nDESCENDANTS  D IH0 - S EH1 N - D AH0 N T S\nDESCENDANTS(2)  D IH0 - S EH1 - N IH0 N T S\nDESCENDED  D IH0 - S EH1 N - D AH0 D\nDESCENDED(2)  D IH0 - S EH1 N - D IH0 D\nDESCENDENT  D IH0 - S EH1 N - D AH0 N T\nDESCENDENTS  D IH0 - S EH1 N - D AH0 N T S\nDESCENDING  D IH0 - S EH1 N - D IH0 NG\nDESCENDS  D IH0 - S EH1 N D Z\nDESCENT  D IH0 - S EH1 N T\nDESCENTS  D IH0 - S EH1 N T S\nDESCENZA  D EH0 - SH EH1 N - Z AH0\nDESCH  D EH1 SH\nDESCHAINE  D IH0 - S K EY1 N\nDESCHAMPS  D EH1 - SH AH0 M P S\nDESCHENE  D EH1 - SH IY0 N\nDESCHENES  D EH1 - SH IY0 N Z\nDESCHEPPER  D EH1 - SH IH0 - P ER0\nDESCHLER  D EH1 - SH AH0 - L ER0\nDESCHLER(2)  D EH1 SH - L ER0\nDESCHNER  D EH1 SH - N ER0\nDESCOTEAUX  D EH1 - S K AH0 - T OW0\nDESCRIBABLE  D IH0 - S K R AY1 - B AH0 - B AH0 L\nDESCRIBE  D IH0 - S K R AY1 B\nDESCRIBED  D IH0 - S K R AY1 B D\nDESCRIBES  D IH0 - S K R AY1 B Z\nDESCRIBING  D IH0 - S K R AY1 - B IH0 NG\nDESCRIPTION  D IH0 - S K R IH1 P - SH AH0 N\nDESCRIPTIONS  D IH0 - S K R IH1 P - SH AH0 N Z\nDESCRIPTIVE  D IH0 - S K R IH1 P - T IH0 V\nDESECRATE  D EH0 - Z AH0 - K R EY1 T\nDESECRATE(2)  D EH0 - S AH0 - K R EY1 T\nDESECRATED  D EH0 - Z AH0 - K R EY1 - T IH0 D\nDESECRATED(2)  D EH0 - S AH0 - K R EY1 - T IH0 D\nDESECRATION  D EH0 - S AH0 - K R EY1 - SH AH0 N\nDESECRATION(2)  D EH0 - Z AH0 - K R EY1 - SH AH0 N\nDESECRATIONS  D EH0 - S AH0 - K R EY1 - SH AH0 N Z\nDESECRATIONS(2)  D EH0 - Z AH0 - K R EY1 - SH AH0 N Z\nDESEGREGATE  D IH0 - S EH1 - G R AH0 - G EY2 T\nDESEGREGATED  D IH0 - S EH1 - G R IH0 - G EY2 - T IH0 D\nDESEGREGATION  D IH0 - S EH2 - G R AH0 - G EY1 - SH AH0 N\nDESEGREGATION(2)  D IY2 - S EH0 - G R AH0 - G EY1 - SH AH0 N\nDESENA  D IH0 - S EH1 - N AH0\nDESENSITIZE  D IH0 - S EH1 N - S AH0 - T AY2 Z\nDESENSITIZED  D IH0 - S EH1 N - S AH0 - T AY2 Z D\nDESENSITIZING  D IH0 - S EH1 N - S AH0 - T AY2 - Z IH0 NG\nDESERET  D EH2 - S ER0 - EH1 T\nDESERET(2)  D EH2 - Z ER0 - EY1\nDESERT  D EH1 - Z ER0 T\nDESERT(2)  D IH0 - Z ER1 T\nDESERTED  D IH0 - Z ER1 - T IH0 D\nDESERTER  D EH1 - Z ER0 - T ER0\nDESERTERS  D EH1 - Z ER0 - T ER0 Z\nDESERTING  D EH1 - Z ER0 - T IH0 NG\nDESERTION  D IH0 - Z ER1 - SH AH0 N\nDESERTIONS  D IH0 - Z ER1 - SH AH0 N Z\nDESERTS  D EH1 - Z ER0 T S\nDESERTS(2)  D IH0 - Z ER1 T S\nDESERVE  D IH0 - Z ER1 V\nDESERVED  D IH0 - Z ER1 V D\nDESERVEDLY  D IH0 - Z ER1 - V AH0 D - L IY0\nDESERVES  D IH0 - Z ER1 V Z\nDESERVING  D IH0 - Z ER1 - V IH0 NG\nDESHA  D EH1 - SH AH0\nDESHAIES  D IH0 - SH EY1 Z\nDESHANE  D EH1 - SH AH0 N\nDESHAW  D EH1 - SH AO0\nDESHAZER  D EH1 - SH AH0 - Z ER0\nDESHAZO  D EY0 - SH AA1 - Z OW0\nDESHIELDS  D EH1 - SH IY0 L D Z\nDESHLER  D EH1 SH - L ER0\nDESHON  D EH1 - SH AH0 N\nDESHONG  D EH1 - SH AO0 NG\nDESHOTEL  D EH1 - SH AH0 - T AH0 L\nDESHOTELS  D EH1 - SH AH0 - T AH0 L Z\nDESI  D EH1 - Z IY0\nDESICCATION  D EH2 - S AH0 - K EY1 - SH AH0 N\nDESIDERIO  D IH0 - S IY0 - D EH1 - R IY0 - OW0\nDESIGN  D IH0 - Z AY1 N\nDESIGNATE  D EH1 - Z AH0 G - N EY2 T\nDESIGNATE(2)  D EH1 - Z IH0 G - N EY2 T\nDESIGNATED  D EH1 - Z IH0 G - N EY2 - T IH0 D\nDESIGNATES  D EH1 - Z IH0 G - N EY2 T S\nDESIGNATING  D EH1 - Z IH0 G - N EY2 - T IH0 NG\nDESIGNATION  D EH2 - Z AH0 G - N EY1 - SH AH0 N\nDESIGNATION(2)  D EH2 - Z IH0 G - N EY1 - SH AH0 N\nDESIGNATIONS  D EH2 - Z AH0 G - N EY1 - SH AH0 N Z\nDESIGNCRAFT  D IH0 - Z AY1 N - K R AE2 F T\nDESIGNED  D IH0 - Z AY1 N D\nDESIGNEE  D EH2 - Z IH0 G - N IY1\nDESIGNEES  D EH2 - Z IH0 G - N IY1 Z\nDESIGNER  D IH0 - Z AY1 - N ER0\nDESIGNER'S  D IH0 - Z AY1 - N ER0 Z\nDESIGNERS  D IH0 - Z AY1 - N ER0 Z\nDESIGNERS'  D IH0 - Z AY1 - N ER0 Z\nDESIGNING  D IH0 - Z AY1 - N IH0 NG\nDESIGNS  D IH0 - Z AY1 N Z\nDESILETS  D EH1 - S IH0 - L IH0 T S\nDESILLERS  D IH0 S - IH1 - L ER0 Z\nDESILVA  D IH0 - S IY1 L - V AH0\nDESIMONE  D IH0 - S IY0 - M OW1 - N IY0\nDESIO  D IY1 - S IY0 - OW0\nDESIR  D IH0 - S IH1 R\nDESIRABILITY  D IH0 - Z AY2 - R AH0 - B IH1 - L IH0 - T IY0\nDESIRABLE  D IH0 - Z AY1 - R AH0 - B AH0 L\nDESIRABLE(2)  D IH0 - Z AY1 - ER0 - AH0 - B AH0 L\nDESIRE  D IH0 - Z AY1 - ER0\nDESIRED  D IH0 - Z AY1 - ER0 D\nDESIREE  D EH1 - S AY0 - R IY0\nDESIRES  D IH0 - Z AY1 - ER0 Z\nDESIRING  D IH0 - Z AY1 - ER0 - IH0 NG\nDESIROUS  D IH0 - Z AY1 - R AH0 S\nDESIST  D IH0 - S IH1 S T\nDESIST(2)  D IH0 - Z IH1 S T\nDESISTO  D IH0 - S IY1 - S T OW0\nDESJARDIN  D EH1 S - ZH AA0 R - D AE0 N\nDESJARDINS  D EH1 S - ZH AA0 R - D IH0 N Z\nDESJARLAIS  D EH1 S - ZH AA0 R - L EY0\nDESK  D EH1 S K\nDESKIN  D EH1 - S K IH0 N\nDESKINS  D EH1 - S K IH0 N Z\nDESKJET  D EH1 - S K JH EH2 T\nDESKPRO  D EH1 S K - P R OW2\nDESKS  D EH1 S K S\nDESKTOP  D EH1 S K - T AA2 P\nDESKTOPS  D EH1 S K - T AA2 P S\nDESLATTE  D IH0 S - L AE1 T\nDESLAURIERS  D EH1 S - L AO0 - R IY0 - ER0 Z\nDESMA  D IY1 S - M AH0\nDESMA(2)  D EH1 Z - M AH0\nDESMAN  D EH1 Z - M AH0 N\nDESMARAIS  D EH1 Z - M ER0 - EY0\nDESMET  D EH1 S - M IH0 T\nDESMIDS  D EH1 S - M AH0 D Z\nDESMITH  D EH1 - S M IH0 TH\nDESMONA  D IH0 S - M OW1 - N AH0\nDESMOND  D EH1 Z - M AH0 N D\nDESNOYERS  D EH1 S - N OY0 - ER0 Z\nDESOLATE  D EH1 - S AH0 - L AH0 T\nDESOLATE(2)  D EH1 - Z AH0 - L AH0 T\nDESOLATE(3)  D EH1 - S AH0 - L EY2 T\nDESOLATION  D EH2 - S AH0 - L EY1 - SH AH0 N\nDESORMEAUX  D EH1 - S ER0 - M OW0\nDESOTO  D IH0 S - OW1 - T OW0\nDESOUSA  D IH0 - S AW1 - S AH0\nDESOUSA(2)  D IH0 - S UW1 - S AH0\nDESOUZA  D EY0 - S UW1 - Z AH0\nDESPAIN  D IH0 - S P EY1 N\nDESPAIR  D IH0 - S P EH1 R\nDESPAIRED  D IH0 - S P EH1 R D\nDESPAIRING  D IH0 - S P EH1 - R IH0 NG\nDESPAIRS  D IH0 - S P EH1 R Z\nDESPER  D EH1 - S P ER0\nDESPERADO  D EH2 - S P ER0 - AA1 - D OW0\nDESPERADOES  D EH2 - S P ER0 - AA1 - D OW0 Z\nDESPERATE  D EH1 - S P R IH0 T\nDESPERATE(2)  D EH1 - S P ER0 - IH0 T\nDESPERATELY  D EH1 - S P ER0 - AH0 T - L IY0\nDESPERATELY(2)  D EH1 - S P R AH0 T - L IY0\nDESPERATION  D EH2 - S P ER0 - EY1 - SH AH0 N\nDESPERATION(2)  D EH2 - S P ER0 - EY1 - SH IH0 N\nDESPICABLE  D IH0 - S P IH1 - K AH0 - B AH0 L\nDESPINA'S  D EH1 - S P IY0 - N AH0 Z\nDESPISE  D IH0 - S P AY1 Z\nDESPISED  D IH0 - S P AY1 Z D\nDESPISES  D IH0 - S P AY1 - Z IH0 Z\nDESPITE  D IH0 - S P AY1 T\nDESPONDENCY  D IH0 - S P AA1 N - D AH0 N - S IY0\nDESPONDENT  D IH0 - S P AA1 N - D AH0 N T\nDESPOSITO  D IH0 - S P OW0 - S IY1 - T OW0\nDESPOT  D EH1 - S P AH0 T\nDESPOTIC  D IH0 - S P AA1 - T IH0 K\nDESPOTISM  D EH1 - S P AH0 - T IH2 - Z AH0 M\nDESPRES  D EH1 - S P ER0 Z\nDESROCHERS  D EY0 - R OW1 - SH ER0 Z\nDESROCHES  D EY0 - R OW1 - SH IH0 Z\nDESROSIER  D EY0 - R OW1 - SH IY0 - ER0\nDESROSIERS  D EY0 - R OW1 - SH IY0 - ER0 Z\nDESROSIERS(2)  D EY2 - R OW0 - ZH IH1 R Z\nDESSAUER  D IH0 - S AW1 R\nDESSAUER(2)  D EH1 - S AW2 R\nDESSELLE  D IH0 - S EH1 L\nDESSENT  D IH0 - S EH1 N T\nDESSERT  D IH0 - Z ER1 T\nDESSERTS  D IH0 - Z ER1 T S\nDEST  D EH1 S T\nDESTABILIZATION  D IY0 - S T EY2 - B AH0 - L AH0 - Z EY1 - SH AH0 N\nDESTABILIZE  D IH0 - S T EY1 - B AH0 - L AY2 Z\nDESTABILIZED  D IH0 - S T EY1 - B AH0 - L AY2 Z D\nDESTABILIZING  D IH0 - S T EY1 - B AH0 - L AY2 - Z IH0 NG\nDESTEC  D EH1 - S T EH2 K\nDESTEFANIS  D IH0 - S T IH0 - F AA1 - N IH0 S\nDESTEFANO  D IH0 - S T EH0 - F AA1 - N OW0\nDESTIN  D EH1 - S T IH0 N\nDESTINATION  D EH2 - S T AH0 - N EY1 - SH AH0 N\nDESTINATION(2)  D EH2 - S T IH0 - N EY1 - SH AH0 N\nDESTINATIONS  D EH2 - S T AH0 - N EY1 - SH AH0 N Z\nDESTINED  D EH1 - S T IH0 N D\nDESTINIES  D EH1 - S T AH0 - N IY0 Z\nDESTINY  D EH1 - S T AH0 - N IY0\nDESTITUTE  D EH1 - S T AH0 - T UW2 T\nDESTITUTION  D EH1 - S T AH0 - T UW2 - SH AH0 N\nDESTROY  D IH0 - S T R OY1\nDESTROYED  D IH0 - S T R OY1 D\nDESTROYER  D IH0 - S T R OY1 - ER0\nDESTROYERS  D IH0 - S T R OY1 - ER0 Z\nDESTROYING  D IH0 - S T R OY1 - IH0 NG\nDESTROYS  D IH0 - S T R OY1 Z\nDESTRUCT  D IH0 - S T R AH1 K T\nDESTRUCTED  D IH0 - S T R AH1 K - T IH0 D\nDESTRUCTING  D IH0 - S T R AH1 K - T IH0 NG\nDESTRUCTION  D IH0 S - T R AH1 K - SH AH0 N\nDESTRUCTIVE  D IH0 - S T R AH1 K - T IH0 V\nDESTRUCTIVENESS  D IH0 - S T R AH1 K - T IH0 V - N IH0 S\nDESTRUCTS  D IH0 - S T R AH1 K T S\nDESULTORY  D EH1 - S AH0 L - T AO2 - R IY0\nDETACH  D IH0 - T AE1 CH\nDETACH(2)  D IY0 - T AE1 CH\nDETACHABLE  D IH0 - T AE1 - CH AH0 - B AH0 L\nDETACHABLE(2)  D IY0 - T AE1 - CH AH0 - B AH0 L\nDETACHED  D IH0 - T AE1 CH T\nDETACHED(2)  D IY0 - T AE1 CH T\nDETACHES  D IH0 - T AE1 - CH IH0 Z\nDETACHES(2)  D IY0 - T AE1 - CH AH0 Z\nDETACHMENT  D IH0 - T AE1 CH - M AH0 N T\nDETACHMENT(2)  D IY0 - T AE1 CH - M AH0 N T\nDETAIL  D IH0 - T EY1 L\nDETAIL(2)  D IY1 - T EY0 L\nDETAILED  D IH0 - T EY1 L D\nDETAILEE  D IH0 - T EY2 - L IY1\nDETAILER  D IY1 - T EY0 - L ER0\nDETAILING  D IH0 - T EY1 - L IH0 NG\nDETAILS  D IH0 - T EY1 L Z\nDETAILS(2)  D IY1 - T EY0 L Z\nDETAIN  D IH0 - T EY1 N\nDETAINED  D IH0 - T EY1 N D\nDETAINEE  D IY2 - T EY0 - N IY1\nDETAINEES  D IH0 - T EY2 - N IY1 Z\nDETAINING  D IH0 - T EY1 - N IH0 NG\nDETAMORE  D IH0 - T AA1 - M AO0 R\nDETAR  D IH0 - T AA1 R\nDETAR(2)  D IY0 - T AA0 R\nDETECT  D IH0 - T EH1 K T\nDETECTABLE  D IH0 - T EH1 K - T AH0 - B AH0 L\nDETECTED  D IH0 - T EH1 K - T AH0 D\nDETECTED(2)  D IH0 - T EH1 K - T IH0 D\nDETECTING  D IH0 - T EH1 K - T IH0 NG\nDETECTION  D IH0 - T EH1 K - SH AH0 N\nDETECTIVE  D IH0 - T EH1 K - T IH0 V\nDETECTIVE'S  D IH0 - T EH1 K - T IH0 V Z\nDETECTIVES  D IH0 - T EH1 K - T IH0 V Z\nDETECTOR  D IH0 - T EH1 K - T ER0\nDETECTORS  D IH0 - T EH1 K - T ER0 Z\nDETECTS  D IH0 - T EH1 K T S\nDETEMPLE  D EH1 - T IH0 M - P AH0 L\nDETENTE  D EY0 - T AA1 N T\nDETENTION  D IH0 - T EH1 N - SH AH0 N\nDETENTIONS  D IH0 - T EH1 N - SH AH0 N Z\nDETER  D IH0 - T ER1\nDETERDING  D EH1 - T ER0 - D IH0 NG\nDETERGENT  D IH0 - T ER1 - JH AH0 N T\nDETERGENTS  D IH0 - T ER1 - JH AH0 N T S\nDETERIORATE  D IH0 - T IH1 - R IY0 - ER0 - EY2 T\nDETERIORATED  D IH0 - T IH1 - R IY0 - ER0 - EY2 - T IH0 D\nDETERIORATES  D IH0 - T IH1 - R IY0 - ER0 - EY2 T S\nDETERIORATING  D IH0 - T IH1 - R IY0 - ER0 - EY2 - T IH0 NG\nDETERIORATION  D IH0 - T IH1 - R IY0 - ER0 - EY2 - SH AH0 N\nDETERMAN  D IY1 - T ER0 - M AH0 N\nDETERMENT  D IH0 - T ER1 - M AH0 N T\nDETERMINABLE  D IH0 - T ER1 - M AH0 - N AH0 - B AH0 L\nDETERMINANT  D IH0 - T ER1 - M AH0 - N AH0 N T\nDETERMINANTS  D IH0 - T ER1 - M AH0 - N AH0 N T S\nDETERMINATE  D IH0 - T ER1 - M AH0 - N EY2 T\nDETERMINATION  D IH0 - T ER2 - M AH0 - N EY1 - SH AH0 N\nDETERMINATION'S  D IH0 - T ER2 - M IH0 - N EY1 - SH AH0 N Z\nDETERMINATIONS  D IH0 - T ER2 - M IH0 - N EY1 - SH AH0 N Z\nDETERMINATIVE  D IH0 - T ER1 - M IH0 - N AH0 - T IH2 V\nDETERMINE  D AH0 - T ER1 - M AH0 N\nDETERMINE(2)  D IH0 - T ER1 - M AH0 N\nDETERMINED  D IH0 - T ER1 - M AH0 N D\nDETERMINEDLY  D AH0 - T ER1 - M AH0 - N AH0 D - L IY0\nDETERMINEDLY(2)  D AH0 - T ER1 - M AH0 N D - L IY0\nDETERMINES  D AH0 - T ER1 - M AH0 N Z\nDETERMINES(2)  D IH0 - T ER1 - M AH0 N Z\nDETERMINING  D IH0 - T ER1 - M AH0 - N IH0 NG\nDETERMINISM  D IH0 - T ER1 - M AH0 - N IH2 - Z AH0 M\nDETERMINIST  D IH0 - T ER1 - M AH0 - N AH0 S T\nDETERMINISTIC  D IH0 - T ER2 - M AH0 - N IH1 - S T IH0 K\nDETERRED  D IH0 - T ER1 D\nDETERRENCE  D IH0 - T ER1 - AH0 N S\nDETERRENT  D IH0 - T ER1 - R AH0 N T\nDETERRENTS  D IH0 - T ER1 - AH0 N T S\nDETERRING  D IH0 - T ER1 - IH0 NG\nDETERS  D IH0 - T ER1 Z\nDETERT  D EH1 - T ER0 T\nDETEST  D IH0 - T EH1 S T\nDETEST(2)  D IY0 - T EH1 S T\nDETESTED  D IH0 - T EH1 - S T IH0 D\nDETESTED(2)  D IY0 - T EH1 - S T IH0 D\nDETHERAGE  D EH1 - DH ER0 - IH0 JH\nDETHLEFS  D EH1 TH - L IH0 F S\nDETHLEFSEN  D EH1 TH - L IH0 F - S AH0 N\nDETHLOFF  D EH1 TH - L AO0 F\nDETHOMAS  D IH0 - TH OW1 - M AH0 Z\nDETHOMAS(2)  D IH0 - T AA1 - M AH0 S\nDETHRONE  D IH0 - TH R OW1 N\nDETHRONE(2)  D IY0 - TH R OW1 N\nDETHRONED  D IH0 - TH R OW1 N D\nDETHRONED(2)  D IY0 - TH R OW1 N D\nDETIENNE  D EH1 - T IY0 - EH0 N\nDETJEN  D EH1 T - JH AH0 N\nDETLEFSEN  D EH1 T - L IH0 F - S AH0 N\nDETLOFF  D EH1 T - L AO0 F\nDETMER  D EH1 T - M ER0\nDETONATE  D EH1 - T AH0 - N EY2 T\nDETONATED  D EH1 - T AH0 - N EY2 - T AH0 D\nDETONATING  D EH1 - T AH0 - N EY2 - T IH0 NG\nDETONATION  D EH2 - T AH0 - N EY1 - SH AH0 N\nDETONATIONS  D EH2 - T AH0 - N EY1 - SH AH0 N Z\nDETONATOR  D EH1 - T AH0 - N EY2 - T ER0\nDETONATORS  D EH1 - T AH0 - N EY2 - T ER0 Z\nDETORE  D IH0 - T AO1 - R IY0\nDETOUR  D IH0 - T UH1 R\nDETOUR(2)  D IY1 - T UH0 R\nDETOURED  D IY1 - T UH0 R D\nDETOURS  D IH0 - T UH1 R Z\nDETOURS(2)  D IY1 - T UH0 R Z\nDETOX  D IY1 - T AA2 K S\nDETOXICATION  D IH0 - T AA2 K - S AH0 - K EY1 - SH AH0 N\nDETOXIFICATION  D IH0 - T AA2 K - S IH0 - F IH0 - K EY1 - SH AH0 N\nDETOXIFY  D IH0 - T AA1 K - S AH0 - F AY2\nDETRACT  D IH0 - T R AE1 K T\nDETRACTED  D IH0 - T R AE1 K - T IH0 D\nDETRACTING  D IH0 - T R AE1 K - T IH0 NG\nDETRACTOR(2)  D IY0 - T R AE1 K - T ER0\nDETRACTORS  D IH0 - T R AE1 K - T ER0 Z\nDETRACTORS(2)  D IY0 - T R AE1 K - T ER0 Z\nDETRACTS  D IH0 - T R AE1 K T S\nDETRICH  D EH1 - T R IH0 K\nDETRICK  D EH1 - T R IH0 K\nDETRIMENT  D EH1 - T R AH0 - M AH0 N T\nDETRIMENTAL  D EH2 - T R AH0 - M EH1 N - T AH0 L\nDETRIMENTAL(2)  D EH2 - T R AH0 - M EH1 - N AH0 L\nDETRITUS  D IH0 - T R AY1 - T AH0 S\nDETRITUS(2)  D EH1 - T R AH0 - T AH0 S\nDETRO  D IY1 - T R OW0\nDETROIT  D IH0 - T R OY1 T\nDETROIT'S  D AH0 - T R OY1 T S\nDETROIT'S(2)  D IH0 - T R OY1 T S\nDETROIT(2)  D IY1 - T R OY2 T\nDETROITERS  D AH0 - T R OY1 - T ER0 Z\nDETROITERS(2)  D IY1 - T R OY2 - T ER0 Z\nDETTER  D EH1 - T ER0\nDETTINGER  D EH1 - T IH0 N - JH ER0\nDETTLING  D EH1 T - L IH0 NG\nDETTLOFF  D EH1 T - L AO0 F\nDETTMAN  D EH1 T - M AH0 N\nDETTMANN  D EH1 T - M AH0 N\nDETTMER  D EH1 T - M ER0\nDETTORE  D IH0 - T AO1 - R IY0\nDETTY  D EH1 - T IY0\nDETURK  D EH1 - T ER0 K\nDETWEILER  D EH1 T - W AY2 - L ER0\nDETWILER  D EH1 T - W AY2 - L ER0\nDETZEL  D EH1 T - Z AH0 L\nDEUBEL  D OY1 - B AH0 L\nDEUBLER  D OY1 - B AH0 L - ER0\nDEUBLER(2)  D OY1 - B L ER0\nDEUCE  D UW1 S\nDEUEL  D UW1 - EH0 L\nDEUKMEJIAN  D UW0 K - M EY1 - JH IY0 - AH0 N\nDEUKMEJIAN'S  D UW0 K - M EY1 - JH IY0 - AH0 N Z\nDEUPREE  D UW0 - P R IY1\nDEUSCHLE  D OY1 - SH AH0 L\nDEUSER  D OY1 - S ER0\nDEUSS  D UW1 S\nDEUTCH  D OY1 CH\nDEUTERIUM  D UW0 - T IY1 - R IY0 - AH0 M\nDEUTERONS  D UW1 - T ER0 - AA2 N Z\nDEUTSCH  D OY1 CH\nDEUTSCHE  D OY1 CH\nDEUTSCHEMARK  D OY1 CH - M AA2 R K\nDEUTSCHEMARK'S  D OY1 CH - M AA2 R K S\nDEUTSCHEMARKS  D OY1 CH - M AA2 R K S\nDEUTSCHER  D OY1 - CH ER0\nDEUTSCHLAND  D OY1 CH - L AE0 N D\nDEUTSCHMAN  D OY1 CH - M AH0 N\nDEUTZ  D OY1 T S\nDEUX  D UW1\nDEV  D EH1 V\nDEVA  D EY1 - V AH0\nDEVAL  D IH0 - V AA1 L\nDEVAL'S  D IH0 - V AA1 L Z\nDEVALL  D EY0 - V AA1 L\nDEVALLE  D IH0 - V AE1 L\nDEVALLE(2)  D IH0 - V AE1 - L IY0\nDEVALUATE  D IH0 - V AE1 L - Y UW0 - EY2 T\nDEVALUATED  D IH0 - V AE1 L - Y UW0 - EY2 - T IH0 D\nDEVALUATION  D IH0 - V AE2 L - Y UW0 - EY1 - SH AH0 N\nDEVALUATION(2)  D IY2 - V AE0 L - Y UW0 - EY1 - SH AH0 N\nDEVALUATIONS  D IY2 - V AE0 L - Y UW0 - EY1 - SH AH0 N Z\nDEVALUE  D IH0 - V AE1 L - Y UW2\nDEVALUED  D IH0 - V AE1 L - Y UW2 D\nDEVALUED(2)  D IY0 - V AE1 L - Y UW2 D\nDEVALUING  D IH0 - V AE1 L - Y UW0 - IH0 NG\nDEVAN  D EH1 - V AH0 N\nDEVANE  D IH0 - V EY1 N\nDEVANEY  D EH1 - V AH0 - N IY0\nDEVANY  D EH1 - V AH0 - N IY0\nDEVASTATE  D EH1 - V AH0 - S T EY2 T\nDEVASTATED  D EH1 - V AH0 - S T EY2 - T AH0 D\nDEVASTATED(2)  D EH1 - V AH0 - S T EY2 - T IH0 D\nDEVASTATING  D EH1 - V AH0 - S T EY2 - T IH0 NG\nDEVASTATINGLY  D EH1 - V AH0 - S T EY2 - T IH0 NG - L IY0\nDEVASTATION  D EH2 - V AH0 - S T EY1 - SH AH0 N\nDEVAUGHN  D EH1 - V AO0 N\nDEVAUL  D IH0 - V OW1 L\nDEVAULT  D IH0 - V OW1\nDEVAUX  D IH0 - V OW1\nDEVEAU  D IH0 - V OW1\nDEVEAUX  D IH0 - V OW1\nDEVELCON  D AH0 - V EH1 L - K AH0 N\nDEVELLE  D AH0 - V EH1 L\nDEVELOP  D IH0 - V EH1 - L AH0 P\nDEVELOPABLE  D IH0 - V EH1 - L AH0 - P AH0 - B AH0 L\nDEVELOPED  D IH0 - V EH1 - L AH0 P T\nDEVELOPER  D IH0 - V EH1 - L AH0 - P ER0\nDEVELOPER'S  D IH0 - V EH1 - L AH0 - P ER0 Z\nDEVELOPERS  D IH0 - V EH1 - L AH0 - P ER0 Z\nDEVELOPERS'  D IH0 - V EH1 - L AH0 - P ER0 Z\nDEVELOPING  D IH0 - V EH1 - L AH0 - P IH0 NG\nDEVELOPMENT  D IH0 - V EH1 - L AH0 P - M AH0 N T\nDEVELOPMENT'S  D IH0 - V EH1 - L AH0 P - M AH0 N T S\nDEVELOPMENTAL  D IH0 - V EH2 - L AH0 P - M EH1 N - T AH0 L\nDEVELOPMENTAL(2)  D IH0 - V EH2 - L AH0 P - M EH1 - N AH0 L\nDEVELOPMENTALLY  D IH0 - V EH2 - L AH0 P - M EH1 N - AH0 - L IY0\nDEVELOPMENTALLY(2)  D IH0 - V EH2 - L AH0 P - M EH1 N - T AH0 - L IY0\nDEVELOPMENTS  D IH0 - V EH1 - L AH0 P - M AH0 N T S\nDEVELOPS  D IH0 - V EH1 - L AH0 P S\nDEVENDORF  D EH1 - V IH0 N - D AO0 R F\nDEVENEY  D EH1 - V IH0 - N IY0\nDEVENNEY  D EH1 - V IH0 - N IY0\nDEVENNY  D EH1 - V IH0 - N IY0\nDEVENPORT  D IH0 - V EH1 N - P AO0 R T\nDEVENS  D IY1 - V AH0 N Z\nDEVENY  D IH0 - V IY1 - N IY0\nDEVER  D IY1 - V ER0\nDEVERA  D EY0 - V EH1 - R AH0\nDEVERAUX  D EH1 - V ER0 - OW0\nDEVERE  D EY0 - V EH1 - R EY0\nDEVEREAUX  D EH1 - V ER0 - OW0\nDEVERELL  D EY0 - V EH0 - R EY1 L\nDEVEREUX  D EH1 - V ER0 - UW2\nDEVEROY  D EH1 - V ER0 - OY2\nDEVERS  D EH1 - V ER0 Z\nDEVEY  D IH0 - V EY1\nDEVIANCE  D IY1 - V IY0 - AH0 N S\nDEVIANCY  D IY1 - V IY0 - EH2 N - S IY0\nDEVIANCY(2)  D IY1 - V Y EH0 N - S IY0\nDEVIANT  D IY1 - V IY0 - AH0 N T\nDEVIANTS  D IY1 - V IY0 - AH0 N T S\nDEVIATE  D IY1 - V IY0 - EY2 T\nDEVIATED  D IY1 - V IY0 - EY2 - T IH0 D\nDEVIATES  D IY1 - V IY0 - EY2 T S\nDEVIATION  D IY2 - V IY0 - EY1 - SH AH0 N\nDEVIATIONS  D IY0 - V IY0 - EY1 - SH AH0 N Z\nDEVICE  D IH0 - V AY1 S\nDEVICE'S  D IH0 - V AY1 - S IH0 Z\nDEVICES  D IH0 - V AY1 - S AH0 Z\nDEVICES(2)  D IH0 - V AY1 - S IH0 Z\nDEVIL  D EH1 - V AH0 L\nDEVIL'S  D EH1 - V AH0 L Z\nDEVILBISS  D EH1 - V IH0 L - B IH0 S\nDEVILBISS(2)  D IH0 - V IH1 L - B IH0 S\nDEVILISH  D EH1 V - L IH0 SH\nDEVILISHLY  D EH1 - V AH0 L - IH0 SH - L IY0\nDEVILISHLY(2)  D EH1 V - L IH0 SH - L IY0\nDEVILLE  D AH0 - V IH1 L\nDEVILLE'S  D AH0 - V IH1 L Z\nDEVILLIER  D AH0 - V IH1 L - Y ER0\nDEVILLIER'S  D AH0 - V IH1 L - Y ER0 S\nDEVILS  D EH1 - V AH0 L Z\nDEVILWOOD  D EH1 - V AH0 L - W UH2 D\nDEVIN  D EH1 - V IH0 N\nDEVINCENT  D EY0 - V IY1 N - S AH0 N T\nDEVINCENTIS  D EH0 - V IH0 N - S EH1 N - T IH0 S\nDEVINCENZI  D IH0 - V IY0 N - CH EH1 N - Z IY0\nDEVINCENZO  D IH0 - V IY0 N - CH EH1 N - Z OW0\nDEVINCI'S  D IH0 - V IH1 N - CH IY0 Z\nDEVINE  D AH0 - V AY1 N\nDEVINEY  D EH1 - V IH0 - N IY0\nDEVINNEY  D EH1 - V IH0 - N IY0\nDEVINO  D IH0 - V IY1 - N OW0\nDEVINS  D EH1 - V IH0 N Z\nDEVIOUS  D IY1 - V IY0 - AH0 S\nDEVISE  D IH0 - V AY1 Z\nDEVISE(2)  D IH0 - V AY1 S\nDEVISED  D IH0 - V AY1 Z D\nDEVISES  D IH0 - V AY1 - Z IH0 Z\nDEVISING  D IH0 - V AY1 - Z IH0 NG\nDEVITA  D IH0 - V IY1 - T AH0\nDEVITO  D IH0 - V IY1 - T OW0\nDEVITT  D IH0 - V IH1 T\nDEVIVO  D IH0 - V IY1 - V OW0\nDEVLIN  D EH1 V - L IH0 N\nDEVOE  D IH0 - V OW1\nDEVOID  D IH0 - V OY1 D\nDEVOL  D EH1 - V AO0 L\nDEVOLDER  D EH1 - V OW0 L - D ER0\nDEVOLL  D EH1 - V AH0 L\nDEVOLUTION  D EH2 - V AH0 - L UW1 - SH AH0 N\nDEVOLVE  D IH0 - V AA1 L V\nDEVOLVED  D IH0 - V AA1 L V D\nDEVON  D EH1 - V AH0 N\nDEVONA  D EH1 - V AH0 - N AH0\nDEVONIAN  D IH0 - V OW1 - N IY0 - AH0 N\nDEVONSHIRE  D IH0 - V AA1 N - SH AY2 R\nDEVOR  D IH0 - V AO1 R\nDEVORE  D EH1 - V ER0\nDEVOS  D IY1 - V OW0 Z\nDEVOSS  D IH0 - V AA1 S\nDEVOTE  D IH0 - V OW1 T\nDEVOTED  D IH0 - V OW1 - T AH0 D\nDEVOTED(2)  D IH0 - V OW1 - T IH0 D\nDEVOTEE  D EH2 - V AH0 - T IY1\nDEVOTEES  D EH1 - V AH0 - T IY1 Z\nDEVOTES  D IH0 - V OW1 T S\nDEVOTING  D IH0 - V OW1 - T IH0 NG\nDEVOTION  D IH0 - V OW1 - SH AH0 N\nDEVOTIONAL  D IH0 - V OW1 - SH AH0 - N AH0 L\nDEVOTO  D IH0 - V OW1 - T OW0\nDEVOUR  D IH0 - V AW1 - ER0\nDEVOURED  D IH0 - V AW1 - ER0 D\nDEVOURING  D IH0 - V AW1 - ER0 - IH0 NG\nDEVOURS  D IH0 - V AW1 - ER0 Z\nDEVOUT  D IH0 - V AW1 T\nDEVOUTLY  D IH0 - V AW1 T - L IY0\nDEVOY  D EH1 - V OY0\nDEVRIES  D IH0 - V R IY1 S\nDEVRY  D EH1 - V R IY0\nDEW  D UW1\nDEWAARD  D UW0 - AA1 R D\nDEWAELE  D UW1 - EH0 L\nDEWALD  D UW1 - AH0 L D\nDEWALL  D UW1 - AH0 L\nDEWALT  D UW1 - AH0 L T\nDEWAN  D UW1 - AH0 N\nDEWAR  D UW1 - ER0\nDEWAR'S  D UW1 - ER0 Z\nDEWARE  D UW1 - EH0 R\nDEWARR  D UW1 - ER0\nDEWART  D UW1 - AA0 R T\nDEWAYNE  D IH0 - W EY1 N\nDEWAYNE(2)  D IY0 - W EY1 N\nDEWBERRY  D UW1 - B EH2 - R IY0\nDEWBRE  D UW1 - B ER0\nDEWCLAW  D UW1 - K L AO2\nDEWEERD  D UW1 - IH0 R D\nDEWEES  D UW1 - IY0 Z\nDEWEESE  D UW1 - IY0 Z\nDEWEISS  D IH0 - W AY1 S\nDEWELL  D EH1 - W EH0 L\nDEWEY  D UW1 - IY0\nDEWEY'S  D UW1 - IY0 Z\nDEWHIRST  D EH1 - W ER0 S T\nDEWHURST  D EH1 - W ER0 S T\nDEWILDE  D IY1 - W AY0 L D\nDEWINE  D AH0 - W AY1 N\nDEWING  D UW1 - IH0 NG\nDEWINTER  D UW1 - IH0 N - T ER0\nDEWINTER(2)  D IH0 - W IH1 N - T ER0\nDEWIRE  D UW1 - AY0 R\nDEWIT  D UW1 - IH0 T\nDEWITT  D AH0 - W IH1 T\nDEWITTE  D UW0 - IH1 T\nDEWITZ  D EH1 - W IH0 T S\nDEWOLF  D UW1 - UH0 L F\nDEWOLFE  D UW1 - UH0 L F\nDEWOODY  D IY1 - W UH0 - D IY0\nDEWS  D UW1 Z\nDEWULF  D UW1 - AH0 L F\nDEWY  D UW1 - IY0\nDEX  D EH1 K S\nDEXFENFLURAMINE  D EH2 K - S AH0 N - F L AO1 - R AH0 - M IY0 N\nDEXHEIMER  D EH1 K S - HH AY0 - M ER0\nDEXTER  D EH1 K - S T ER0\nDEXTER'S  D EH1 K - S T ER0 Z\nDEXTERITY  D EH0 K - S T EH1 - R AH0 - T IY0\nDEXTERITY(2)  D EH0 K - S T EH1 - R IH0 - T IY0\nDEXTRA  D EH1 K - S T R AH0\nDEXTRAN  D EH1 K - S T R AE2 N\nDEXTRATHORAPHAN  D EH0 K - S T R AH0 - TH AO1 - R AH0 - F AH0 N\nDEXTRO  D EH1 K - S T R OW0\nDEXTROSE  D EH1 K S - T R OW0 S\nDEXTROUS  D EH1 K - S T R AH0 S\nDEY  D EY1\nDEYO  D EY1 - OW0\nDEYOE  D EY1 - OW0\nDEYOUNG  D EH1 - Y AH0 NG\nDEYTON  D IH0 - T AO1 N\nDEYTON(2)  D EY1 - T AH0 N\nDEZARN  D EY0 - Z AA1 R N\nDEZEEUW  D IH0 - Z IY1 - UW0\nDEZERN  D EY0 - Z EH1 R N\nDEZIEL  D EH1 - Z IY0 L\nDFW  D IY1 - EH1 F - D AH1 - B AH0 L - Y UW1\nDFW(2)  D IY1 - EH1 F - D AH1 - B AH0 - Y UW1\nDHABI  D AA1 - B IY0\nDHAHARAN  D AH0 - R AA1 N\nDHAHRAN  D AH0 - R AA1 N\nDHAKA  D AA1 - K AH0\nDHAKA(2)  D AE1 - K AH0\nDHAKA(3)  D AE1 - K AE0\nDHALI  D AA1 - L IY0\nDHARMA  D AA1 R - M AH0\nDHEIN  D AY1 N\nDHIA  D IY1 - AH0\nDHILLON  D IH1 - L AH0 N\nDHIRAJ  D IH2 - R AA1 ZH\nDHLAKAMA  D AH0 - L AH0 - K AA1 - M AH0\nDHOLE  D OW1 L\nDHONDT  D HH AA1 N T\nDHOWS  D AW1 Z\nDI  D IY1\nDI'S  D AY1 Z\nDI(2)  D AY1\nDIA  D IY1 - AH0\nDIAB  D AY1 - AH0 B\nDIABASE  D AY1 - AH0 - B EY2 S\nDIABASIC  D AY2 - AH0 - B EY1 - S IH0 K\nDIABETES  D AY2 - AH0 - B IY1 - T IY0 Z\nDIABETIC  D AY2 - AH0 - B EH1 - T IH0 K\nDIABETICS  D AY2 - AH0 - B EH1 - T IH0 K S\nDIABLO  D AY2 - AE1 - B L OW0\nDIABLO(2)  D IY2 - AE1 - B L OW0\nDIABOLICAL  D AY2 - AH0 - B AA1 - L IH0 - K AH0 L\nDIACONATE  D AY0 - AE1 - K AH0 - N AH0 T\nDIACRITIC  D AY2 - AH0 - K R IH1 - T AH0 K\nDIACRITICAL  D AY2 - AH0 - K R IH1 - T AH0 - K AH0 L\nDIADEM  D AY1 - AH0 - D EH2 M\nDIAGNOSE  D AY2 - AH0 G - N OW1 S\nDIAGNOSED  D AY2 - AH0 G - N OW1 S T\nDIAGNOSES  D AY2 - AH0 G - N OW1 - S IY0 Z\nDIAGNOSING  D AY2 - AH0 G - N OW1 - S IH0 NG\nDIAGNOSIS  D AY2 - AH0 G - N OW1 - S AH0 S\nDIAGNOSTEK  D AY2 - AH0 G - N AA1 - S T EH0 K\nDIAGNOSTIC  D AY2 - AH0 G - N AA1 - S T IH0 K\nDIAGNOSTICS  D AY2 - AH0 G - N AA1 - S T IH0 K S\nDIAGONAL  D AY0 - AE1 - G AH0 - N AH0 L\nDIAGONALLY  D AY0 - AE1 - G AH0 - N AH0 - L IY0\nDIAGONALS  D AY0 - AE1 - G AH0 - N AH0 L Z\nDIAGRAM  D AY1 - AH0 - G R AE2 M\nDIAGRAMING  D AY1 - AH0 - G R AE2 - M IH0 NG\nDIAGRAMMATIC  D AY2 - AH0 - G R AH0 - M AE1 - T IH0 K\nDIAGRAMMED  D AY1 - AH0 - G R AE2 M D\nDIAGRAMS  D AY1 - AH0 - G R AE2 M Z\nDIAHANN  D AY2 - AE1 N\nDIAL  D AY1 - AH0 L\nDIAL'S  D AY1 - AH0 L Z\nDIAL'S(2)  D AY1 L Z\nDIAL(2)  D AY1 L\nDIALECT  D AY1 - AH0 - L EH2 K T\nDIALECTIC  D AY2 - AH0 - L EH1 K - T IH0 K\nDIALECTICAL  D AY2 - AH0 - L EH1 K - T IH0 - K AH0 L\nDIALECTS  D AY1 - AH0 - L EH2 K T S\nDIALED  D AY1 - AH0 L D\nDIALING  D AY1 - AH0 - L IH0 NG\nDIALING(2)  D AY1 - L IH0 NG\nDIALOG  D AY1 - AH0 - L AO0 G\nDIALOGUE  D AY1 - AH0 - L AO2 G\nDIALOGUES  D AY1 - AH0 - L AO2 G Z\nDIALS  D AY1 - AH0 L Z\nDIALS(2)  D AY1 L Z\nDIALTONE  D AY1 - AH0 L - T OW2 N\nDIALTONE(2)  D AY1 L - T OW2 N\nDIALYSIS  D AY0 - AE1 - L AH0 - S AH0 S\nDIALYSIS(2)  D AY0 - AE1 - L IH0 - S IH0 S\nDIAMAGNETIC  D AY2 - AH0 - M AE0 G - N EH1 - T IH0 K\nDIAMAGNETISM  D AY2 - AH0 - M AE1 G - N IH0 - T IH2 - Z AH0 M\nDIAMANDIS  D AY2 - AH0 - M AE1 N - D IH0 S\nDIAMANDIS(2)  D IY2 - AH0 - M AE1 N - D IH0 S\nDIAMANT  D AY1 - AH0 - M AH0 N T\nDIAMANTA  D AY2 - AH0 - M AE1 N - T AH0\nDIAMANTE  D AY2 - AH0 - M AA1 N - T IY0\nDIAMETER  D AY0 - AE1 - M AH0 - T ER0\nDIAMETRICALLY  D AY2 - AH0 - M EH1 - T R IH0 - K AH0 - L IY0\nDIAMETRICALLY(2)  D AY2 - AH0 - M EH1 - T R IH0 K - L IY0\nDIAMOND  D AY1 - M AH0 N D\nDIAMOND'S  D AY1 - M AH0 N D Z\nDIAMONDS  D AY1 - M AH0 N D Z\nDIAN  D AY1 - AH0 N\nDIANA  D AY0 - AE1 - N AH0\nDIANA'S  D AY0 - AE1 - N AH0 Z\nDIANE  D AY0 - AE1 N\nDIANE'S  D AY0 - AE1 N Z\nDIANETICS  D AY2 - AH0 - N EH1 - T IH0 K S\nDIANGELO  D AY0 - AH0 NG - G EH1 - L OW0\nDIANNA  D AY2 - AE1 - N AH0\nDIANNE  D AY0 - AE1 N\nDIANTHA  D AY2 - AE1 N - TH AH0\nDIANTHE  D AY0 - AE1 N - DH IY0\nDIANTHIA  D AY2 - AE1 N - TH IY0 - AH0\nDIANTONIO  D AY2 - AH0 N - T OW1 - N IY0 - OW0\nDIAPER  D AY1 - P ER0\nDIAPERING  D AY1 - P ER0 - IH0 NG\nDIAPERS  D AY1 - AH0 - P ER0 Z\nDIAPERS(2)  D AY1 - P ER0 Z\nDIAPHONIA  D AY2 - AH0 - F OW1 - N IY0 - AH0\nDIAPHRAGM  D AY1 - AH0 - F R AE2 M\nDIAPSID  D AY2 - AE1 P - S IH0 D\nDIARIES  D AY1 - ER0 - IY0 Z\nDIARIES(2)  D AY1 - R IY0 Z\nDIARIO  D AY0 - EH1 - R IY0 - OW0\nDIARRHEA  D AY2 - ER0 - IY1 - AH0\nDIARRHOEA  D AY2 - ER0 - IY1 - AH0\nDIARY  D AY1 - ER0 - IY0\nDIARY(2)  D AY1 - R IY0\nDIAS  D AY1 - AH0 Z\nDIASA  D IY0 - AA1 - S AH0\nDIASA'S  D IY0 - AA1 - S AH0 Z\nDIASONIC  D AY2 - AH0 - S AA1 - N IH0 K\nDIASONICS  D AY2 - AH0 - S AA1 - N IH0 K S\nDIASPORA  D AY0 - AE1 - S P ER0 - AH0\nDIASTASE  D AY1 - AH0 - S T EY2 S\nDIASTOLE  D AY0 - AE1 - S T AH0 - L IY2\nDIASTOLIC  D AY2 - AH0 - S T AA1 - L IH0 K\nDIASTROPHISM  D AY0 - AE1 - S T R AH0 - F IH2 - Z AH0 M\nDIATHERMY  D AY1 - AH0 - TH ER2 - M IY0\nDIATOMIC  D AY2 - AH0 - T AA1 - M IH0 K\nDIATOMS  D AY1 - AH0 - T AA2 M Z\nDIATONIC  D AY2 - AH0 - T AA1 - N IH0 K\nDIATRIBE  D AY1 - AH0 - T R AY2 B\nDIATRIBES  D AY1 - AH0 - T R AY2 B Z\nDIAZ  D IY1 - AE2 Z\nDIAZ(2)  D IY1 - AA2 Z\nDIAZ-CALDERON  D IY1 - AE2 Z - K AE2 L - D ER0 - OW1 N\nDIAZO  D AY0 - AE1 - Z OW2\nDIBACCO  D IH0 - B AA1 - K OW0\nDIBARI  D IH0 - B AA1 - R IY0\nDIBARTOLO  D IY2 - B AA0 R - T OW1 - L OW0\nDIBARTOLOMEO  D IH0 - B AA0 R - T OW0 - L OW1 - M IY0 - OW0\nDIBATTISTA  D IH0 - B AA0 - T IY1 - S T AH0\nDIBB  D IH1 B\nDIBBERN  D IH1 - B ER0 N\nDIBBLE  D IH1 - B AH0 L\nDIBBLED  D IH1 - B AH0 L D\nDIBELLA  D IH0 - B EH1 - L AH0\nDIBELLO  D IH0 - B EH1 - L OW0\nDIBENEDETTO  D IH0 - B IH0 - N AH0 - D EH1 - T OW0\nDIBERNARDO  D IH0 - B ER0 - N AA1 R - D OW0\nDIBERT  D IH1 - B ER0 T\nDIBIASE  D IY2 - B IY0 - AA1 - S IY0\nDIBIASIO  D IH0 - B IY0 - AA1 - S IY0 - OW0\nDIBLASI  D IH0 - B L AA1 - S IY0\nDIBLASIO  D IH0 - B L AA1 - S IY0 - OW0\nDIBLE  D AY1 - B AH0 L\nDIBOLL  D IH1 - B AH0 L\nDIBONA  D IH0 - B OW1 - N AH0\nDIBRELL  D IH1 - B R AH0 L\nDIBS  D IH1 B Z\nDIBUONO  D IH0 - B W OW1 - N OW0\nDIC  D IH1 K\nDICAMBA  D IH0 - K AE1 M - B AH0\nDICAMILLO  D IH0 - K AA0 - M IH1 - L OW0\nDICAPRIO  D IH0 - K AE1 - P R IY0 - OW0\nDICARLO  D IH0 - K AA1 R - L OW0\nDICE  D AY1 S\nDICECCO  D IH0 - S EH1 - K OW0\nDICED  D AY1 S T\nDICELLO  D IH0 - S EH1 - L OW0\nDICENSO  D IH0 - S EH1 N - S OW0\nDICENZO  D IH0 - S EH1 N - Z OW0\nDICEON  D IH1 - S IY0 - AH0 N\nDICESARE  D IH0 - CH EH0 - S AA1 - R IY0\nDICEY  D AY1 - S IY0\nDICHIARA  D IH0 - K IY0 - AA1 - R AH0\nDICHOTOMY  D AY0 - K AA1 - T AH0 - M IY0\nDICHROIC  D AY0 - K R OW1 - IH0 K\nDICHROMATE  D AY0 - K R OW1 - M EY2 T\nDICHROMATE(2)  D AY1 - K R OW0 - M EY2 T\nDICHTER  D IH1 K - T ER0\nDICICCO  D IH0 - S IH1 - K OW0\nDICIER  D AY1 - S IY0 - ER0\nDICIOCCIO  D IH0 - CH OW1 - CH IY0 - OW0\nDICK  D IH1 K\nDICK'S  D IH1 K S\nDICKARD  D IH1 - K ER0 D\nDICKASON  D IH1 - K AH0 - S AH0 N\nDICKE  D IH1 K\nDICKEL  D IH1 - K AH0 L\nDICKEN  D IH1 - K AH0 N\nDICKENS  D IH1 - K AH0 N Z\nDICKENS'  D IH1 - K AH0 N Z\nDICKENS'S  D IH1 - K AH0 N - Z IH0 Z\nDICKENSHEETS  D IH1 - K AH0 N - SH IY2 T S\nDICKENSIAN  D IH0 - K EH1 N - Z IY0 - AH0 N\nDICKENSON  D IH1 - K IH0 N - S AH0 N\nDICKER  D IH1 - K ER0\nDICKERED  D IH1 - K ER0 D\nDICKERING  D IH1 - K ER0 - IH0 NG\nDICKERMAN  D IH1 - K ER0 - M AH0 N\nDICKERSON  D IH1 - K ER0 - S AH0 N\nDICKERT  D IH1 - K ER0 T\nDICKES  D IH1 K S\nDICKESON  D IH1 - K IH0 - S AH0 N\nDICKEY  D IH1 - K IY0\nDICKEY'S  D IH1 - K IY0 Z\nDICKHAUT  D IH1 K - HH AW2 T\nDICKIE  D IH1 - K IY0\nDICKINSON  D IH1 - K IH0 N - S AH0 N\nDICKISON  D IH1 - K IH0 - S AH0 N\nDICKLER  D IH1 - K L ER0\nDICKMAN  D IH1 K - M AH0 N\nDICKMANN  D IH1 K - M AH0 N\nDICKMEYER  D IH1 K - M AY0 - ER0\nDICKS  D IH1 K S\nDICKSON  D IH1 K - S AH0 N\nDICKSTEIN  D IH1 K - S T AY0 N\nDICKSTEIN'S  D IH1 K - S T AY2 N Z\nDICKSTEIN'S(2)  D IH1 K S - T IY2 N Z\nDICKSTEIN(2)  D IH1 K S - T IY0 N\nDICKY  D IH1 - K IY0\nDICLEMENTE  D IH2 - K L AH0 - M EH1 N - T EY0\nDICOCCO  D IH0 - K OW1 - K OW0\nDICOLA  D IH0 - K OW1 - L AH0\nDICOMED  D IH1 - K AH0 - M EH0 D\nDICOMED(2)  D IY0 - K OW1 M D\nDICOSTANZO  D IH0 - K OW0 - S T AA1 N - Z OW0\nDICOTS  D AY1 - K AA0 T S\nDICTA  D IH1 K - T AH0\nDICTAPHONE  D IH1 K - T AH0 - F OW2 N\nDICTATE  D IH0 K - T EY1 T\nDICTATE(2)  D IH1 K - T EY2 T\nDICTATED  D IH0 K - T EY1 - T AH0 D\nDICTATED(2)  D IH1 K - T EY2 - T AH0 D\nDICTATED(3)  D IH1 K - T EY2 - T IH0 D\nDICTATES  D IH0 K - T EY1 T S\nDICTATES(2)  D IH1 K - T EY2 T S\nDICTATING  D IH1 K - T EY2 - T IH0 NG\nDICTATION  D IH0 K - T EY1 - SH AH0 N\nDICTATOR  D IH0 K - T EY1 - T ER0\nDICTATOR(2)  D IH1 K - T EY0 - T ER0\nDICTATORIAL  D IH2 K - T AH0 - T AO1 - R IY0 - AH0 L\nDICTATORS  D IH0 K - T EY1 - T ER0 Z\nDICTATORS(2)  D IH1 K - T EY0 - T ER0 Z\nDICTATORSHIP  D IH0 K - T EY1 - T ER0 - SH IH2 P\nDICTATORSHIPS  D IH0 K - T EY1 - T ER0 - SH IH2 P S\nDICTION  D IH1 K - SH AH0 N\nDICTIONARIES  D IH1 K - SH AH0 - N EH2 - R IY0 Z\nDICTIONARY  D IH1 K - SH AH0 - N EH2 - R IY0\nDICTUM  D IH1 K - T AH0 M\nDICUS  D AY1 - K AH0 S\nDID  D IH1 D\nDID(2)  D IH0 D\nDIDACTIC  D AY0 - D AE1 K - T IH0 K\nDIDDLEY  D IH1 D - L IY0\nDIDDY  D IH1 - D IY0\nDIDEMEYER  D IY1 - D AH0 - M AY2 - ER0\nDIDEMEYER'S  D IY1 - D AH0 - M AY2 - ER0 Z\nDIDEOXYCYTIDINE  D IH2 - D IY0 - AA2 K - S IY0 - S AY1 - T IH0 - D AY2 N\nDIDI  D IY1 - D IY0\nDIDIER  D IH1 - D IY0 - ER0\nDIDINIUM  D IH0 - D IH1 - N IY0 - AH0 M\nDIDION  D IH1 - D IY0 - AH0 N\nDIDION'S  D IH1 - D IY0 - AH0 N Z\nDIDN'T  D IH1 - D AH0 N T\nDIDN'T(2)  D IH1 D N T\nDIDN'T(3)  D IH1 - D AH0 N\nDIDN'T(4)  D IH1 N T\nDIDO  D AY1 - D OW0\nDIDOMENICO  D IH0 - D OW0 - M EH1 - N IH0 - K OW0\nDIDONATO  D IH0 - D OW0 - N AA1 - T OW0\nDIDONNA  D IH0 - D AA1 - N AH0\nDIE  D AY1\nDIEBEL  D IY1 - B AH0 L\nDIEBOLD  D AY1 - B OW2 L D\nDIECK  D IY1 K\nDIECKMAN  D IY1 K - M AH0 N\nDIECKMANN  D IY1 K - M AH0 N\nDIED  D AY1 D\nDIEDE  D IY1 D\nDIEDERICH  D IY1 - D ER0 - IH0 K\nDIEDRE  D IY1 - D R AH0\nDIEDRICH  D IY1 - D R IH0 K\nDIEDRICK  D IY1 - D R IH0 K\nDIEFENBACH  D IY1 - F IH0 N - B AA0 K\nDIEFENDERFER  D IY1 - F IH0 N - D ER0 - F ER0\nDIEFENDORF  D IY1 - F IH0 N - D AO0 R F\nDIEFFENBACH  D IY1 - F IH0 N - B AA0 K\nDIEGANS  D IY1 - G AH0 N Z\nDIEGEL  D IY1 - G AH0 L\nDIEGO  D IY0 - EY1 - G OW0\nDIEGO'S  D IY2 - EY1 - G OW2 Z\nDIEGO-GARCIA  D IY0 - EY1 - G OW0 - G AA2 R - S IY1 - AH0\nDIEGUEZ  D IH0 - G EH1 Z\nDIEHARD  D AY1 - HH AA2 R D\nDIEHARDS  D AY1 - HH AA2 R D Z\nDIEHL  D IY1 L\nDIEHM  D IY1 M\nDIEKMAN  D IY1 K - M AH0 N\nDIEKMANN  D IY1 K - M AH0 N\nDIEL  D IY1 L\nDIEM  D IY1 M\nDIEMER  D IY1 - M ER0\nDIEMERT  D IY1 - M ER0 T\nDIENER  D IY1 - N ER0\nDIENES  D IY1 - N EH0 Z\nDIENST  D IY1 N S T\nDIEP  D IY1 P\nDIER  D IY1 - ER0\nDIERCKS  D IY1 R K S\nDIERINGER  D IH1 - R IH0 N - JH ER0\nDIERKER  D IY1 R - K ER0\nDIERKES  D IY1 R K S\nDIERKING  D AY1 - ER0 - K IH0 NG\nDIERKS  D IY1 R K S\nDIEROLF  D IH1 - R OW0 L F\nDIERS  D IY1 - ER0 Z\nDIERY  D IH1 - R IY0\nDIES  D AY1 Z\nDIESEL  D IY1 - S AH0 L\nDIESEL(2)  D IY1 - Z AH0 L\nDIESELS  D IY1 - Z AH0 L Z\nDIESES  D AY1 - Z IH0 Z\nDIESING  D IY1 - S IH0 NG\nDIET  D AY1 - AH0 T\nDIET'S  D AY1 - AH0 T S\nDIETARY  D AY1 - AH0 - T EH2 - R IY0\nDIETEL  D IY1 - T AH0 L\nDIETER  D IY1 - T ER0\nDIETERICH  D IY1 - T ER0 - IH0 K\nDIETERLE  D IY1 - T ER0 - AH0 L\nDIETERS  D AY1 - AH0 - T ER0 Z\nDIETETIC  D AY2 - AH0 - T EH1 - T IH0 K\nDIETING  D AY1 - AH0 - T IH0 NG\nDIETITIAN  D AY2 - AH0 - T IH1 - SH AH0 N\nDIETITIAN'S  D AY2 - AH0 - T IH1 - SH AH0 N Z\nDIETITIANS  D AY2 - AH0 - T IH1 - SH AH0 N Z\nDIETL  D AY1 - AH0 T L\nDIETRICH  D IY1 - T R IH0 K\nDIETRICK  D IY1 - T R IH0 K\nDIETS  D AY1 - IH0 T S\nDIETSCH  D IY1 CH\nDIETSCHE  D IY1 CH\nDIETZ  D IY1 T S\nDIETZE  D AY1 - AH0 T Z\nDIETZEL  D IY1 T - Z AH0 L\nDIETZEN  D IY1 T - Z AH0 N\nDIETZLER  D IY1 T S - L ER0\nDIETZMAN  D IY1 T S - M AH0 N\nDIEVLER  D IY1 V - L ER0\nDIEZ  D AY1 - AH0 Z\nDIFABIO  D IH0 - F EY1 - B IY0 - OW0\nDIFABIO(2)  D IH0 - F AE1 - B IY0 - OW0\nDIFALCO  D IH0 - F AE1 L - K OW0\nDIFAZIO  D IH0 - F EY1 - Z IY0 - OW0\nDIFELICE  D IH0 - F EH1 - L IH0 S\nDIFELICE(2)  D IH0 - F EH1 - L IY0 S\nDIFELICE(3)  D IH0 - F IH0 - L IY1 - CH EY0\nDIFF  D IH1 F\nDIFFEE  D IH1 - F IY0\nDIFFENDERFER  D IH1 - F IH0 N - D ER0 - F ER0\nDIFFER  D IH1 - F ER0\nDIFFERED  D IH1 - F ER0 D\nDIFFERENCE  D IH1 - F ER0 - AH0 N S\nDIFFERENCE(2)  D IH1 - F R AH0 N S\nDIFFERENCES  D IH1 - F ER0 - AH0 N - S IH0 Z\nDIFFERENCES(2)  D IH1 - F R AH0 N - S AH0 Z\nDIFFERENT  D IH1 - F ER0 - AH0 N T\nDIFFERENT(2)  D IH1 - F R AH0 N T\nDIFFERENTIAL  D IH2 - F ER0 - EH1 N - CH AH0 L\nDIFFERENTIAL(2)  D IH2 - F ER0 - EH1 N - SH AH0 L\nDIFFERENTIALS  D IH2 - F ER0 - EH1 N - CH AH0 L Z\nDIFFERENTIALS(2)  D IH2 - F ER0 - EH1 N - CH AH0 L Z\nDIFFERENTIATE  D IH2 - F ER0 - EH1 N - SH IY0 - EY2 T\nDIFFERENTIATE(2)  D IH2 - F ER0 - EH1 N - CH IY0 - EY2 T\nDIFFERENTIATED  D IH2 - F ER0 - EH1 N - CH IY0 - EY2 - T IH0 D\nDIFFERENTIATED(2)  D IH2 - F ER0 - EH1 N - SH IY0 - EY2 - T AH0 D\nDIFFERENTIATES  D IH0 - F ER0 - EH1 N - SH IY0 - EY2 T S\nDIFFERENTIATES(2)  D IH2 - F ER0 - EH1 N - CH IY0 - EY2 T S\nDIFFERENTIATING  D IH2 - F ER0 - EH1 N - CH IY0 - EY2 - T IH0 NG\nDIFFERENTIATING(2)  D IH2 - F ER0 - EH1 N - SH IY0 - EY2 - T IH0 NG\nDIFFERENTIATION  D IH0 - F ER0 - EH2 N - SH IY0 - EY1 - SH AH0 N\nDIFFERENTIATION(2)  D IH2 - F ER0 - EH2 N - CH IY0 - EY1 - SH AH0 N\nDIFFERENTLY  D IH1 - F R AH0 N T - L IY0\nDIFFERENTLY(2)  D IH1 - F ER0 - EH1 N T - L IY0\nDIFFERING  D IH1 - F ER0 - IH0 NG\nDIFFERING(2)  D IH1 - F R IH0 NG\nDIFFERS  D IH1 - F ER0 Z\nDIFFICULT  D IH1 - F AH0 - K AH0 L T\nDIFFICULTIES  D IH1 - F AH0 - K AH0 L - T IY0 Z\nDIFFICULTIES(2)  D IH1 - F IH0 - K AH2 L - T IY0 Z\nDIFFICULTLY  D IH1 - F AH0 - K AH0 L T - L IY0\nDIFFICULTY  D IH1 - F AH0 - K AH0 L - T IY0\nDIFFICULTY(2)  D IH1 - F IH0 - K AH2 L - T IY0\nDIFFIN  D IH1 - F IH0 N\nDIFFLEY  D IH1 F - L IY0\nDIFFRACT  D IH0 - F R AE1 K T\nDIFFRACTION  D IH0 - F R AE1 K - SH AH0 N\nDIFFUSE  D IH0 - F Y UW1 S\nDIFFUSE(2)  D IH0 - F Y UW1 Z\nDIFFUSED  D IH0 - F Y UW1 Z D\nDIFFUSES  D IH0 - F Y UW1 - Z AH0 Z\nDIFFUSING  D IH0 - F Y UW1 - Z IH0 NG\nDIFFUSION  D IH0 - F Y UW1 - ZH AH0 N\nDIFILIPPO  D IH0 - F IY0 - L IY1 - P OW0\nDIFIORE  D IH0 - F IY0 - AO1 - R IY0\nDIFIORE(2)  D AH0 - F Y AO1 - R IY0\nDIFM  D IH1 F M\nDIFM(2)  D IY1 - AY1 - EH1 - F EH1 M\nDIFONZO  D IH0 - F AA1 N - Z OW0\nDIFRANCESCO  D IH0 - F R AA0 N - CH EH1 - S K OW0\nDIFRANCO  D IH0 - F R AA1 N - K OW0\nDIG  D IH1 G\nDIGAETANO  D IH0 - JH AH0 - T AA1 - N OW0\nDIGALAKIS  D IH0 - JH AH0 - L AA1 - K AH0 S\nDIGANGI  D IH0 - G AE1 N - JH IY0\nDIGATE  D AY1 - G EY2 T\nDIGBY  D IH1 G - B IY0\nDIGENNARO  D IH0 - JH EH0 - N AA1 - R OW0\nDIGENOVA  D IY2 - JH EH0 - N OW1 - V AH0\nDIGERONIMO  D IH0 - JH ER0 - OW0 - N IY1 - M OW0\nDIGEST  D AY0 - JH EH1 S T\nDIGEST'S  D AY1 - JH EH2 S T S\nDIGEST(2)  D AY1 - JH EH0 S T\nDIGESTED  D AY1 - JH EH2 - S T IH0 D\nDIGESTER  D AY1 - JH EH2 - S T ER0\nDIGESTIBLE  D AY0 - JH EH1 - S T AH0 - B AH0 L\nDIGESTING  D AY0 - JH EH1 - S T IH0 NG\nDIGESTING(2)  D AY1 - JH EH2 - S T IH0 NG\nDIGESTION  D AY0 - JH EH1 S - CH AH0 N\nDIGESTIVE  D AY0 - JH EH1 - S T IH0 V\nDIGESTS  D AH0 - JH EH1 S T S\nDIGESTS(2)  D AY1 - JH EH0 S T S\nDIGESTS(3)  D AH0 - JH EH1 S S\nDIGESTS(4)  D AY1 - JH EH0 S S\nDIGESTS(5)  D AH0 - JH EH1 S\nDIGESTS(6)  D AY1 - JH EH0 S\nDIGGA  D IH1 - G AH0\nDIGGER  D IH1 - G ER0\nDIGGERS  D IH1 - G ER0 Z\nDIGGES  D IH1 G Z\nDIGGING  D IH1 - G IH0 NG\nDIGGINS  D IH1 - G IH0 N Z\nDIGGLE  D IH1 - G AH0 L\nDIGGS  D IH1 G Z\nDIGIACOMO  D IY1 - JH AH0 - K OW0 - M OW0\nDIGICON  D IH1 - JH IH0 - K AA2 N\nDIGIDYNE  D IH1 - JH IH0 - D AY2 N\nDIGILIO  D IH0 - JH IY1 - L IY0 - OW0\nDIGIOIA  D IH0 - JH OW1 - Y AH0\nDIGIORGIO  D IH0 - JH AO1 R - JH IY0 - OW0\nDIGIOVANNA  D IH0 - JH OW0 - V AA1 - N AH0\nDIGIOVANNI  D IH0 - JH OW0 - V AA1 - N IY0\nDIGIROLAMO  D IH0 - JH IH0 - R OW0 - L AA1 - M OW0\nDIGIT  D IH1 - JH AH0 T\nDIGIT(2)  D IH1 - JH IH0 T\nDIGITAL  D IH1 - JH AH0 - T AH0 L\nDIGITAL'S  D IH1 - JH AH0 - T AH0 L Z\nDIGITAL'S(2)  D IH1 - JH IH0 - T AH0 L Z\nDIGITAL(2)  D IH1 - JH IH0 - T AH0 L\nDIGITALIS  D IH2 - JH AH0 - T AE1 - L AH0 S\nDIGITALLY  D IH1 - JH AH0 - T AH0 - L IY0\nDIGITECH  D IH1 - JH AH0 - T EH2 K\nDIGITIZE  D IH1 - JH AH0 - T AY2 Z\nDIGITIZED  D IH1 - JH AH0 - T AY2 Z D\nDIGITIZING  D IH1 - JH AH0 - T AY2 - Z IH0 NG\nDIGITS  D IH1 - JH AH0 T S\nDIGITS(2)  D IH1 - JH IH0 T S\nDIGIULIO  D IH0 - JH UW1 - L IY0 - OW0\nDIGIUSEPPE  D IY2 - JH UW0 - S EH1 - P IY0\nDIGMAN  D IH1 G - M AH0 N\nDIGNAN  D IH1 G - N AH0 N\nDIGNIFIED  D IH1 G - N AH0 - F AY2 D\nDIGNIFY  D IH1 G - N AH0 - F AY2\nDIGNITARIES  D IH1 G - N AH0 - T EH2 - R IY0 Z\nDIGNITARY  D IH1 G - N AH0 - T EH2 - R IY0\nDIGNITY  D IH1 G - N AH0 - T IY0\nDIGRAZIA  D IH0 - G R AA1 - Z IY0 - AH0\nDIGREGORIO  D IH0 - G R EH0 - G AO1 - R IY0 - OW0\nDIGRESS  D AY0 - G R EH1 S\nDIGRESSED  D AY0 - G R EH1 S T\nDIGRESSING  D AY0 - G R EH1 - S IH0 NG\nDIGRESSION  D AY0 - G R EH1 - SH AH0 N\nDIGRESSIONS  D AY0 - G R EH1 - SH AH0 N Z\nDIGS  D IH1 G Z\nDIGUGLIELMO  D IH0 - G UW2 G - L IY0 - EH1 L - M OW0\nDIIANNI  D IY2 - AE1 - N IY0\nDIIORIO  D IH0 - Y AO1 - R IY0 - OW0\nDIJKER  D IY1 - K ER0\nDIJON  D IY1 - ZH AA2 N\nDIJON(2)  D IY0 - ZH OW1 N\nDIKE  D AY1 K\nDIKEMAN  D AY1 K - M AH0 N\nDIKES  D AY1 K S\nDILAPIDATE  D AH0 - L AE1 - P AH0 - D EY2 T\nDILAPIDATED  D AH0 - L AE1 - P AH0 - D EY2 - T IH0 D\nDILATATION  D IH2 - L AH0 - T EY1 - SH AH0 N\nDILATE  D AY0 - L EY1 T\nDILATED  D AY0 - L EY1 - T AH0 D\nDILATION  D AY0 - L EY1 - SH AH0 N\nDILATORY  D IH1 - L AH0 - T AO2 - R IY0\nDILAURA  D IH0 - L AO1 - R AH0\nDILAURO  D IH0 - L AO1 - R OW0\nDILBECK  D IH1 L - B EH2 K\nDILBERT  D IH0 L - B ER1 T\nDILDAY  D IH1 L - D EY2\nDILDINE  D IH0 L - D IY1 - N IY0\nDILDY  D IH1 L - D IY0\nDILELLA  D IH0 - L EH1 - L AH0\nDILELLO  D IH0 - L EH1 - L OW0\nDILEMMA  D IH0 - L EH1 - M AH0\nDILEMMAS  D AH0 - L EH1 - M AH0 Z\nDILENSCHNEIDER  D AY1 - L AH0 N SH - N AY2 - D ER0\nDILEO  D IH1 - L IY0 - OW0\nDILEONARDO  D IH0 - L IY0 - AH0 - N AA1 R - D OW0\nDILES  D AY1 L Z\nDILG  D IH1 L G\nDILGER  D IH1 L - G ER0\nDILIBERTO  D IH0 - L IY0 - B EH1 R - T OW0\nDILIGENCE  D IH1 - L AH0 - JH AH0 N S\nDILIGENCE(2)  D IH1 - L IH0 - JH AH0 N S\nDILIGENT  D IH1 - L IH0 - JH AH0 N T\nDILIGENTLY  D IH1 - L AH0 - JH AH0 N T - L IY0\nDILIP  D IH1 - L IH0 P\nDILITHIUM  D AY0 - L IH1 - TH IY0 - AH0 M\nDILKS  D IH1 L K S\nDILL  D IH1 L\nDILLAHUNT  D IH1 - L AH0 - HH AH2 N T\nDILLAHUNTY  D IH1 - L AH0 - HH AH2 N - T IY0\nDILLARD  D IH1 - L ER0 D\nDILLARD'S  D IH1 - L ER0 D Z\nDILLARD'S(2)  D IH1 - L AA1 R D Z\nDILLARD'S(3)  D IH1 - L AH0 D Z\nDILLARD(2)  D IH1 - L AA1 R D\nDILLARD(3)  D IH1 - L AH0 D\nDILLE  D IH1 L\nDILLEHAY  D IH1 - L IH0 - HH EY0\nDILLEN  D IH1 - L AH0 N\nDILLENBECK  D IH1 - L AH0 N - B EH2 K\nDILLENBURG  D IH1 - L AH0 N - B ER0 G\nDILLER  D IH1 - L ER0\nDILLER'S  D IH1 - L ER0 Z\nDILLEY  D IH1 - L IY0\nDILLIE  D IH1 - L IY0\nDILLIN  D IH1 - L IH0 N\nDILLING  D IH1 - L IH0 NG\nDILLINGER  D IH1 - L IH0 - NG ER0\nDILLINGHAM  D IH1 - L IH0 NG - HH AE2 M\nDILLION  D IH1 - L Y AH0 N\nDILLMAN  D IH1 L - M AH0 N\nDILLMORE  D IH1 L - M AO0 R\nDILLON  D IH1 - L AH0 N\nDILLON'S  D IH1 - L AH0 N Z\nDILLOW  D IH1 - L OW0\nDILLS  D IH1 L Z\nDILLWORTH  D IH1 L - W ER2 TH\nDILLY  D IH1 - L IY0\nDILMORE  D IY1 L - M AO0 R\nDILORENZO  D IH0 - L AO0 - R EH1 N - Z OW0\nDILORETO  D IH0 - L AO0 - R EH1 - T OW0\nDILORIO  D IH0 - L AO1 - R IY0 - OW0\nDILS  D IH1 L Z\nDILSAVER  D IH1 L - S AH0 - V ER0\nDILSON  D IH1 L - S AH0 N\nDILTIAZEM  D IH0 L - T IY1 - AH0 - Z EH2 M\nDILTS  D IH1 L T S\nDILTZ  D IH1 L T S\nDILULLO  D IH0 - L UW1 - L OW0\nDILUTE  D AY0 - L UW1 T\nDILUTE(2)  D IH0 - L UW1 T\nDILUTED  D AY0 - L UW1 - T AH0 D\nDILUTED(2)  D IH0 - L UW1 - T AH0 D\nDILUTES  D AY0 - L UW1 T S\nDILUTES(2)  D IH0 - L UW1 T S\nDILUTING  D AY0 - L UW1 - T IH0 NG\nDILUTING(2)  D IH0 - L UW1 - T IH0 NG\nDILUTION  D AY0 - L UW1 - SH AH0 N\nDILUTION(2)  D IH0 - L UW1 - SH AH0 N\nDILUTIVE  D AH0 - L UW1 - T IH0 V\nDILUTIVE(2)  D IY0 - L UW1 - T IH0 V\nDILUZIO  D IH0 - L UW1 - Z IY0 - OW0\nDILWORTH  D IH1 L - W ER0 TH\nDIM  D IH1 M\nDIMAGGIO  D IH0 - M AE1 - JH IY0 - OW0\nDIMAIO  D IH0 - M AA1 - IY0 - OW0\nDIMAMBRO  D IH0 - M AE1 M - B R OW0\nDIMARCO  D IH0 - M AA1 R - K OW0\nDIMARE  D IH0 - M AA1 - R IY0\nDIMARIA  D IH0 - M AA1 - R IY0 - AH0\nDIMARINO  D IH0 - M AA0 - R IY1 - N OW0\nDIMARIO  D IH0 - M AA1 - R IY0 - OW0\nDIMARTINO  D IY2 - M AA0 R - T IY1 - N OW0\nDIMARZIO  D IH0 - M AA1 R - Z IY0 - OW0\nDIMARZO  D IH0 - M AA1 R - Z OW0\nDIMAS  D AY1 - M AH0 Z\nDIMASCIO  D IH0 - M AE1 - S IY0 - OW0\nDIMASI  D IH0 - M AA1 - S IY0\nDIMATTEO  D IH0 - M AA1 - T IY0 - OW0\nDIMAURO  D IH0 - M AO1 - R OW0\nDIME  D AY1 M\nDIME'S  D AY1 M Z\nDIMEGLIO  D IH0 - M EH1 G - L IY0 - OW0\nDIMENACI  D IH2 - M EH1 - AH0 - CH IY0\nDIMENSION  D IH0 - M EH1 N - SH AH0 N\nDIMENSIONAL  D IH0 - M EH1 N - SH AH0 - N AH0 L\nDIMENSIONALITY  D IH0 - M EH2 N - SH AH0 - N AE1 - L AH0 - T IY0\nDIMENSIONED  D AH0 - M EH1 N - CH AH0 N D\nDIMENSIONS  D IH0 - M EH1 N - SH AH0 N Z\nDIMEO  D IY1 - M IY0 - OW0\nDIMER  D AY1 - M ER0\nDIMERCURIO  D IH0 - M ER0 - K UH1 - R IY0 - OW0\nDIMES  D AY1 M Z\nDIMETAPP  D AY1 - M AH0 - T AE2 P\nDIMICELI  D IH0 - M IY0 - CH EH1 - L IY0\nDIMICHELE  D IH0 - M IY0 - K EH1 - L IY0\nDIMICK  D IH1 - M IH0 K\nDIMING  D AY1 - M IH0 NG\nDIMINISH  D IH0 - M IH1 - N IH0 SH\nDIMINISHED  D IH0 - M IH1 - N IH0 SH T\nDIMINISHES  D IH0 - M IH1 - N IH0 - SH IH0 Z\nDIMINISHING  D IH0 - M IH1 - N IH0 - SH IH0 NG\nDIMINISHMENT  D IH0 - M IH1 - N IH0 SH - M AH0 N T\nDIMINO  D IH0 - M IY1 - N OW0\nDIMINUTION  D IH2 - M AH0 - N UW1 - SH AH0 N\nDIMINUTIVE  D IH0 - M IH1 - N Y AH0 - T IH0 V\nDIMITRI  D IH0 - M IY1 - T R IY0\nDIMITRIOS  D IH0 - M IY1 - T R IY0 - OW0 S\nDIMITRIUS  D IH0 - M IY1 - T R IY0 - AH0 S\nDIMITRIUS'  D IH0 - M IY1 - T R IY0 - AH0 S\nDIMITRIUS'S  D IH0 - M IY1 - T R IY0 - AH0 - S IH0 S\nDIMITROFF  D IH1 - M IH0 - T R AO0 F\nDIMITRUK  D IH0 - M IY1 - T R UH2 K\nDIMLY  D IH1 M - L IY0\nDIMMED  D IH1 M D\nDIMMER  D IH1 - M ER0\nDIMMERS  D IH1 - M ER0 Z\nDIMMICK  D IH1 - M IH0 K\nDIMMING  D IH1 - M IH0 NG\nDIMMITT  D IH1 - M IH0 T\nDIMOCK  D IH1 - M AH0 K\nDIMON  D IH1 - M AH0 N\nDIMONA  D IH0 - M OW1 - N AH0\nDIMOND  D AY1 - M AH0 N D\nDIMORPHIC  D AY0 - M AO1 R - F IH0 K\nDIMORPHISM  D AY0 - M AO1 R - F IH0 - Z AH0 M\nDIMPERIO  D IH0 M - P EH1 - R IY0 - OW0\nDIMPLE  D IH1 M - P AH0 L\nDIMPLED  D IH1 M - P AH0 L D\nDIMRY  D IH1 M - R IY0\nDIMS  D IH1 M Z\nDIMSDALE  D IH1 M Z - D EY2 L\nDIMURO  D IH0 - M UH1 - R OW0\nDIMUZIO  D IH0 - M UW1 - Z IY0 - OW0\nDIN  D IH1 N\nDINA  D IY1 - N AH0\nDINAH  D AY1 - N AH0\nDINAN  D IH1 - N AH0 N\nDINAPOLI  D IH0 N - AE1 - P AH0 - L IY0\nDINAR  D IH0 - N AA1 R\nDINARDO  D IH0 - N AA1 R - D OW0\nDINARS  D AY1 - N ER0 Z\nDINARS(2)  D IH2 - N AA1 R Z\nDINATALE  D IH0 - N AA0 - T AA1 - L IY0\nDINATALE(2)  D IY0 - N AA0 - T AA1 - L IY0\nDINDA  D IH1 N - D AH0\nDINE  D AY1 N\nDINED  D AY1 N D\nDINEEN  D IH0 - N IY1 N\nDINEHART  D AY1 N - HH AA2 R T\nDINER  D AY1 - N ER0\nDINERS  D AY1 - N ER0 Z\nDINES  D AY1 N Z\nDINESH  D IH1 - N EH0 SH\nDING  D IH1 NG\nDINGEE  D IH1 NG - G IY0\nDINGEL  D IH1 NG - G AH0 L\nDINGELL  D IH1 NG - G AH0 L\nDINGELL'S  D IH1 NG - G AH0 L Z\nDINGER  D IH1 - NG ER0\nDINGES  D IH1 N - JH IH0 Z\nDINGESS  D IH1 NG - G IH0 S\nDINGHAM  D IH1 - NG AH0 M\nDINGHY  D IH1 NG - IY0\nDINGLE  D IH1 NG - G AH0 L\nDINGLEDINE  D IH1 NG - G AH0 L - D AY0 N\nDINGLER  D IH1 NG - G AH0 - L ER0\nDINGLER(2)  D IH1 NG - G L ER0\nDINGLEY  D IH1 NG - G L IY0\nDINGMAN  D IH1 NG - M AH0 N\nDINGO  D IH1 NG - G OW0\nDINGS  D IH1 NG Z\nDINGUS  D IH1 NG - G IH0 S\nDINGWALL  D IH1 NG - G W AH0 L\nDINGY  D IH1 N - JH IY0\nDINH  D IH1 N\nDINI  D IY1 - N IY0\nDINICOLA  D IH0 - N IY0 - K OW1 - L AH0\nDINING  D AY1 - N IH0 NG\nDININO  D IH0 - N IY1 - N OW0\nDINIUS  D AY1 - N IY0 - IH0 S\nDINK  D IH1 NG K\nDINKEL  D IH1 NG - K AH0 L\nDINKINS  D IH1 NG - K IH0 N Z\nDINKINS'  D IH1 NG - K IH0 N Z\nDINKY  D IH1 NG - K IY0\nDINMUKHAMED  D IH2 N - M UW0 - K AA1 - M EH0 D\nDINNEEN  D IH0 - N IY1 N\nDINNER  D IH1 - N ER0\nDINNERS  D IH1 - N ER0 Z\nDINNERTIME  D IH1 - N ER0 - T AY2 M\nDINNERWARE  D IH1 - N ER0 - W EH2 R\nDINNING  D IH1 - N IH0 NG\nDINO  D IY1 - N OW0\nDINOSAUR  D AY1 - N AH0 - S AO2 R\nDINOSAURS  D AY1 - N AH0 - S AO2 R Z\nDINOSEB  D AY1 - N OW0 - S EH2 B\nDINOTO  D IH0 - N OW1 - T OW0\nDINOTOPIA  D AY2 - N AH0 - T OW1 - P IY0 - AH0\nDINOVO  D IH0 - N OW1 - V OW0\nDINSA  D IH1 N - S AH0\nDINSDALE  D IH1 N Z - D EY2 L\nDINSE  D IH1 N S\nDINSMORE  D IY1 N S - M AO0 R\nDINT  D IH1 N T\nDINUNZIO  D IH0 - N AH1 N - Z IY0 - OW0\nDINWIDDIE  D IH1 N - W IH0 - D IY0\nDIOCESAN  D AY0 - AA1 - S AH0 - S AH0 N\nDIOCESE  D AY1 - AH0 - S IY2 Z\nDIOCESE(2)  D AY1 - AH0 - S AH0 S\nDIOCESES  D AY1 - AH0 - S IY2 Z\nDIOCESES(2)  D AY1 - AH0 - S IY2 - Z AH0 Z\nDIODATI  D IY0 - OW0 - D AA1 - T IY0\nDIODATO  D IY0 - OW0 - D AA1 - T OW0\nDIODE  D AY1 - OW2 D\nDIODES  D AY1 - OW2 D Z\nDIOGUARDI  D IY0 - OW0 - G AA1 R - D IY0\nDION  D AY1 - AH0 N\nDION(2)  D IY1 - AO2 N\nDIONA  D IY0 - OW1 - N AH0\nDIONE  D IY1 - AA0 N\nDIONISIO  D AY2 - AH0 - N IH1 - S IY0 - OW0\nDIONNE  D IY1 - AA0 N\nDIONYSIUS  D AY2 - AH0 - N IH1 - S IY0 - AH0 S\nDIOR  D IY2 - AO1 R\nDIORIO  D IY0 - AO1 - R IY0 - OW0\nDIORITE  D AY1 - ER0 - AY2 T\nDIOS  D IY1 - OW0 S\nDIOS'  D IY1 - OW0 S\nDIOS'S  D IY1 - OW0 - S IH0 Z\nDIOXIDE  D AY0 - AA1 K - S AY2 D\nDIOXIDES  D AY0 - AA1 K - S AY0 D Z\nDIOXIN  D AY2 - AA1 K - S IH0 N\nDIOXINS  D AY2 - AA1 K - S IH0 N Z\nDIP  D IH1 P\nDIPALMA  D IH0 - P AA1 L - M AH0\nDIPAOLA  D IH0 - P AA0 - OW1 - L AH0\nDIPAOLO  D IH0 - P AA0 - OW1 - L OW0\nDIPASQUALE  D IH0 - P AA0 S - K W AA1 - L IY0\nDIPASQUALE(2)  D IY0 - P AA0 S - K W AA1 - L IY0\nDIPERNA  D IH0 - P EH1 R - N AH0\nDIPHTHERIA  D IH0 F - TH IH1 - R IY0 - AH0\nDIPIAZZA  D IH0 - P IY0 - AA1 T - S AH0\nDIPIAZZA(2)  D IY0 - P IY0 - AA1 T - S AH0\nDIPIERO  D IH0 - P IH1 - R OW0\nDIPIERRO  D IH0 - P IH1 - R OW0\nDIPIETRO  D IH0 - P IY1 - T R OW0\nDIPINTO  D IH0 - P IH1 N - T OW0\nDIPIRRO  D IH0 - P IH1 - R OW0\nDIPLOMA  D IH0 - P L OW1 - M AH0\nDIPLOMACY  D IH0 - P L OW1 - M AH0 - S IY0\nDIPLOMAS  D IH0 - P L OW1 - M AH0 Z\nDIPLOMAT  D IH1 - P L AH0 - M AE2 T\nDIPLOMAT'S  D IH1 - P L AH0 - M AE2 T S\nDIPLOMATIC  D IH2 - P L AH0 - M AE1 - T IH0 K\nDIPLOMATICALLY  D IH2 - P L AH0 - M AE1 - T IH0 K - L IY0\nDIPLOMATS  D IH1 - P L AH0 - M AE2 T S\nDIPLOMATS'  D IH1 - P L AH0 - M AE2 T S\nDIPOLE  D AY1 - P OW2 L\nDIPPED  D IH1 P T\nDIPPEL  D IH1 - P AH0 L\nDIPPER  D IH1 - P ER0\nDIPPERS  D IH1 - P ER0 Z\nDIPPING  D IH1 - P IH0 NG\nDIPPLE  D IH1 - P AH0 L\nDIPPOLD  D IH1 - P OW2 L D\nDIPPOLITO  D IH0 - P OW0 - L IY1 - T OW0\nDIPPY  D IH1 - P IY0\nDIPRIMA  D IH0 - P R IY1 - M AH0\nDIPS  D IH1 P S\nDIPSTICK  D IH1 P - S T IH2 K\nDIRCKS  D ER1 K S\nDIRE  D AY1 R\nDIRE(2)  D AY1 - ER0\nDIRECT  D ER0 - EH1 K T\nDIRECT(2)  D AY0 - R EH1 K T\nDIRECT(3)  D IY0 - R EH1 K T\nDIRECT(4)  D IH0 - R EH1 K T\nDIRECTED  D ER0 - EH1 K - T AH0 D\nDIRECTED(2)  D ER0 - EH1 K - T IH0 D\nDIRECTED(3)  D AY0 - R EH1 K - T IH0 D\nDIRECTED(4)  D IY0 - R EH1 K - T IH0 D\nDIRECTED(5)  D IH0 - R EH1 K - T IH0 D\nDIRECTING  D ER0 - EH1 K - T IH0 NG\nDIRECTING(2)  D IY0 - R EH1 K - T IH0 NG\nDIRECTING(3)  D AY0 - R EH1 K - T IH0 NG\nDIRECTING(4)  D IH0 - R EH1 K - T IH0 NG\nDIRECTION  D ER0 - EH1 K - SH AH0 N\nDIRECTION(2)  D IY0 - R EH1 K - SH IH0 N\nDIRECTION(3)  D AY0 - R EH1 K - SH IH0 N\nDIRECTION(4)  D IH0 - R EH1 K - SH IH0 N\nDIRECTIONAL  D ER0 - EH1 K - SH AH0 - N AH0 L\nDIRECTIONAL(2)  D IY0 - R EH1 K - SH IH0 - N AH0 L\nDIRECTIONAL(3)  D AY0 - R EH1 K - SH IH0 - N AH0 L\nDIRECTIONAL(4)  D IH0 - R EH1 K - SH IH0 - N AH0 L\nDIRECTIONLESS  D ER0 - EH1 K - SH AH0 N - L AH0 S\nDIRECTIONLESS(2)  D IY0 - R EH1 K - SH IH0 N - L AH0 S\nDIRECTIONLESS(3)  D AY0 - R EH1 K - SH IH0 N - L AH0 S\nDIRECTIONLESS(4)  D IH0 - R EH1 K - SH IH0 N - L AH0 S\nDIRECTIONS  D ER0 - EH1 K - SH AH0 N Z\nDIRECTIONS(2)  D IY0 - R EH1 K - SH IH0 N Z\nDIRECTIONS(3)  D AY0 - R EH1 K - SH IH0 N Z\nDIRECTIONS(4)  D IH0 - R EH1 K - SH IH0 N Z\nDIRECTIVE  D ER0 - EH1 K - T IH0 V\nDIRECTIVE(2)  D IY0 - R EH1 K - T IH0 V\nDIRECTIVE(3)  D AY0 - R EH1 K - T IH0 V\nDIRECTIVE(4)  D IH0 - R EH1 K - T IH0 V\nDIRECTIVES  D AY0 - R EH1 K - T IH0 V Z\nDIRECTIVES(2)  D IY0 - R EH1 K - T IH0 V Z\nDIRECTIVES(3)  D ER0 - EH1 K - T IH0 V Z\nDIRECTIVES(4)  D IH0 - R EH1 K - T IH0 V Z\nDIRECTLY  D ER0 - EH1 K T - L IY0\nDIRECTLY(2)  D IY0 - R EH1 K - L IY0\nDIRECTLY(3)  D AY0 - R EH1 K - L IY0\nDIRECTLY(4)  D IH0 - R EH1 K - L IY0\nDIRECTNESS  D ER0 - EH1 K T - N AH0 S\nDIRECTNESS(2)  D IY0 - R EH1 K - N AH0 S\nDIRECTNESS(3)  D AY0 - R EH1 K - N AH0 S\nDIRECTNESS(4)  D IH0 - R EH1 K - N AH0 S\nDIRECTOR  D ER0 - EH1 K - T ER0\nDIRECTOR'S  D AY0 - R EH1 K - T ER0 Z\nDIRECTOR'S(2)  D ER0 - EH1 K - T ER0 Z\nDIRECTOR'S(3)  D IY0 - R EH1 K - T ER0 Z\nDIRECTOR'S(4)  D IH0 - R EH1 K - T ER0 Z\nDIRECTOR(2)  D AY0 - R EH1 K - T ER0\nDIRECTOR(3)  D IY0 - R EH1 K - T ER0\nDIRECTOR(4)  D IH0 - R EH1 K - T ER0\nDIRECTORAL  D ER0 - EH1 K - T ER0 - AH0 L\nDIRECTORATE  D ER0 - EH1 K - T ER0 - AH0 T\nDIRECTORATE(2)  D AY0 - R EH1 K - T ER0 - AH0 T\nDIRECTORATE(3)  D IY0 - R EH1 K - T ER0 - AH0 T\nDIRECTORATE(4)  D IH0 - R EH1 K - T ER0 - AH0 T\nDIRECTORIAL  D ER0 - EH0 K - T AO1 - R IY0 - AH0 L\nDIRECTORIAL(2)  D AY0 - R EH0 K - T AO1 - R IY0 - AH0 L\nDIRECTORIAL(3)  D IY0 - R EH0 K - T AO1 - R IY0 - AH0 L\nDIRECTORIAL(4)  D IH0 - R EH0 K - T AO1 - R IY0 - AH0 L\nDIRECTORIES  D AY0 - R EH1 K - T ER0 - IY0 Z\nDIRECTORIES(2)  D ER0 - EH1 K - T ER0 - IY0 Z\nDIRECTORIES(3)  D IY0 - R EH1 K - T ER0 - IY0 Z\nDIRECTORIES(4)  D IH0 - R EH1 K - T ER0 - IY0 Z\nDIRECTORS  D ER0 - EH1 K - T ER0 Z\nDIRECTORS'  D IH0 - R EH1 K - T ER0 Z\nDIRECTORS'(2)  D ER0 - EH1 K - T ER0 Z\nDIRECTORS'(3)  D IY0 - R EH1 K - T ER0 Z\nDIRECTORS(2)  D AY0 - R EH1 K - T ER0 Z\nDIRECTORS(3)  D IY0 - R EH1 K - T ER0 Z\nDIRECTORS(4)  D IH0 - R EH1 K - T ER0 Z\nDIRECTORSHIP  D ER0 - EH1 K - T ER0 - SH IH2 P\nDIRECTORSHIP(2)  D AY0 - R EH1 K - T ER0 - SH IH2 P\nDIRECTORSHIP(3)  D IY0 - R EH1 K - T ER0 - SH IH2 P\nDIRECTORSHIP(4)  D IH0 - R EH1 K - T ER0 - SH IH2 P\nDIRECTORSHIPS  D ER0 - EH1 K - T ER0 - SH IH2 P S\nDIRECTORSHIPS(2)  D AY0 - R EH1 K - T ER0 - SH IH2 P S\nDIRECTORSHIPS(3)  D IY0 - R EH1 K - T ER0 - SH IH2 P S\nDIRECTORSHIPS(4)  D IH0 - R EH1 K - T ER0 - SH IH2 P S\nDIRECTORY  D ER0 - EH1 K - T ER0 - IY0\nDIRECTORY(2)  D AY0 - R EH1 K - T ER0 - IY0\nDIRECTORY(3)  D IY0 - R EH1 K - T ER0 - IY0\nDIRECTORY(4)  D IH0 - R EH1 K - T ER0 - IY0\nDIRECTS  D ER0 - EH1 K T S\nDIRECTS(2)  D AY0 - R EH1 K T S\nDIRECTS(3)  D IY0 - R EH1 K T S\nDIRECTS(4)  D IH0 - R EH1 K T S\nDIRECTV  D ER0 - EH1 K - T IY1 - V IY1\nDIRECTV(2)  D AY0 - R EH1 K - T IY1 - V IY1\nDIRECTV(3)  D IY0 - R EH1 K - T IY1 - V IY1\nDIRECTV(4)  D IH0 - R EH1 K - T IY1 - V IY1\nDIRENZO  D IH0 - R EH1 N - Z OW0\nDIREST  D AY1 - R AH0 S T\nDIRGE  D ER1 JH\nDIRHAMS  D ER1 - AH0 M Z\nDIRICKSON  D AO1 - R IH0 K - S AH0 N\nDIRIENZO  D IH0 - R IY1 N - Z OW0\nDIRK  D ER1 K\nDIRKES  D ER1 K S\nDIRKS  D ER1 K S\nDIRKSE  D ER1 K S\nDIRKSEN  D ER1 K - S AH0 N\nDIRLAM  D ER0 - L AE1 M\nDIROCCO  D IH0 - R AA1 - K OW0\nDIROSA  D IH0 - R OW1 - S AH0\nDIRR  D ER1\nDIRT  D ER1 T\nDIRT'S  D ER1 T S\nDIRTIER  D ER1 - T IY0 - ER0\nDIRTIEST  D ER1 - T IY0 - AH0 S T\nDIRTY  D ER1 - T IY0\nDIRUSSO  D IH0 - R UW1 - S OW0\nDIS  D IH1 S\nDISA  D IH1 - S AH0\nDISABATINO  D IH0 S - AA0 - B AA0 - T IY1 - N OW0\nDISABATO  D IH0 S - AA0 - B AA1 - T OW0\nDISABILITIES  D IH0 S - AH0 - B IH1 - L AH0 - T IY0 Z\nDISABILITIES(2)  D IH0 S - AH0 - B IH1 - L IH0 - T IY0 Z\nDISABILITY  D IH2 S - AH0 - B IH1 - L IH0 - T IY0\nDISABILITY(2)  D IH0 S - AH0 - B IH1 - L IH0 - T IY0 Z\nDISABLE  D IH0 S - EY1 - B AH0 L\nDISABLED  D IH0 S - EY1 - B AH0 L D\nDISABLES  D IH0 S - EY1 - B AH0 L Z\nDISABLING  D IH0 S - EY1 - B AH0 L - IH0 NG\nDISABLING(2)  D IH2 S - EY1 - B L IH0 NG\nDISABUSE  D IH0 S - AH0 - B Y UW1 S\nDISABUSE(2)  D IH0 S - AH0 - B Y UW1 Z\nDISABUSED  D IH0 S - AH0 - B Y UW1 Z D\nDISABUSES  D IH0 S - AH0 - B Y UW1 - S IH0 Z\nDISADVANTAGE  D IH2 S - AH0 D - V AE1 N - T IH0 JH\nDISADVANTAGE(2)  D IH2 S - AH0 D - V AE1 - N IH0 JH\nDISADVANTAGED  D IH0 S - AH0 D - V AE1 N - T IH0 JH D\nDISADVANTAGED(2)  D IH2 S - AH0 D - V AE1 - N IH0 JH D\nDISADVANTAGEOUS  D IH2 S - AE2 D - V AE2 N - T EY1 - JH AH0 S\nDISADVANTAGES  D IH2 S - AH0 D - V AE1 N - T IH0 - JH IH0 Z\nDISADVANTAGES(2)  D IH2 S - AH0 D - V AE1 - N IH0 JH Z\nDISAFFECT  D IH2 S - AH0 - F EH1 K T\nDISAFFECTED  D IH2 S - AH0 - F EH1 K - T IH0 D\nDISAFFECTION  D IH2 S - AH0 - F EH1 K - SH AH0 N\nDISAGREE  D IH0 S - AH0 - G R IY1\nDISAGREEABLE  D IH2 S - AH0 - G R IY1 - AH0 - B AH0 L\nDISAGREED  D IH0 S - AH0 - G R IY1 D\nDISAGREEING  D IH0 S - AH0 - G R IY1 - IH0 NG\nDISAGREEMENT  D IH0 S - AH0 - G R IY1 - M AH0 N T\nDISAGREEMENTS  D IH2 S - AH0 - G R IY1 - M AH0 N T S\nDISAGREES  D IH0 S - AH0 - G R IY1 Z\nDISALLOW  D IH2 S - AH0 - L AW1\nDISALLOWANCE  D IH2 S - AH0 - L AW1 - AH0 N S\nDISALLOWANCES  D IH2 S - AH0 - L AW1 - AH0 N - S IH0 Z\nDISALLOWED  D IH2 S - AH0 - L AW1 D\nDISALLOWING  D IH0 S - AH0 - L AW1 - IH0 NG\nDISALVO  D IH0 - S AA1 L - V OW0\nDISANO  D IH0 S - AA1 - N OW0\nDISANTI  D IH0 - S AE1 N - T IY0\nDISANTIS  D IH0 - S AA1 N - T IH0 S\nDISANTO  D IH0 - S AE1 N - T OW0\nDISAPPEAR  D IH2 S - AH0 - P IH1 R\nDISAPPEAR(2)  D IH2 - S AH0 - P IY1 R\nDISAPPEARANCE  D IH2 S - AH0 - P IH1 - R AH0 N S\nDISAPPEARANCE(2)  D IH2 S - AH0 - P IY1 - R AH0 N S\nDISAPPEARANCES  D IH2 S - AH0 - P IH1 - R AH0 N - S IH0 Z\nDISAPPEARANCES(2)  D IH2 S - AH0 - P IY1 - R AH0 N - S IH0 Z\nDISAPPEARED  D IH2 S - AH0 - P IH1 R D\nDISAPPEARED(2)  D IH2 S - AH0 - P IY1 R D\nDISAPPEARING  D IH2 S - AH0 - P IH1 - R IH0 NG\nDISAPPEARING(2)  D IH2 S - AH0 - P IY1 - R IH0 NG\nDISAPPEARS  D IH2 S - AH0 - P IH1 R Z\nDISAPPEARS(2)  D IH2 S - AH0 - P IY1 R Z\nDISAPPOINT  D IH2 S - AH0 - P OY1 N T\nDISAPPOINTED  D IH2 S - AH0 - P OY1 N - T IH0 D\nDISAPPOINTED(2)  D IH2 S - AH0 - P OY1 - N IH0 D\nDISAPPOINTING  D IH2 S - AH0 - P OY1 N - T IH0 NG\nDISAPPOINTING(2)  D IH2 S - AH0 - P OY1 - N IH0 NG\nDISAPPOINTINGLY  D IH0 S - AH0 - P OY1 N - T IH0 NG - L IY0\nDISAPPOINTINGLY(2)  D IH0 S - AH0 - P OY1 - N IH0 NG - L IY0\nDISAPPOINTMENT  D IH2 S - AH0 - P OY1 N T - M AH0 N T\nDISAPPOINTMENTS  D IH0 S - AH0 - P OY1 N T - M AH0 N T S\nDISAPPOINTS  D IH2 S - AH0 - P OY1 N T S\nDISAPPROVAL  D IH0 S - AH0 - P R UW1 - V AH0 L\nDISAPPROVE  D IH2 S - AH0 - P R UW1 V\nDISAPPROVED  D IH2 S - AH0 - P R UW1 V D\nDISAPPROVES  D IH0 S - AH0 - P R UW1 V Z\nDISAPPROVING  D IH0 S - AH0 - P R UW1 - V IH0 NG\nDISARM  D IH0 S - AA1 R M\nDISARMAMENT  D IH0 S - AA1 R - M AH0 - M AH0 N T\nDISARMED  D IH0 S - AA1 R M D\nDISARMING  D IH0 S - AA1 R - M IH0 NG\nDISARMINGLY  D IH0 S - AA1 R - M IH0 NG - L IY0\nDISARRAY  D IH2 S - ER0 - EY1\nDISARRAY(2)  D IH2 S - AH0 - R EY1\nDISASSEMBLE  D IH2 S - AH0 - S EH1 M - B AH0 L\nDISASSEMBLED  D IH2 S - AH0 - S EH1 M - B AH0 L D\nDISASSOCIATE  D IH2 S - AH0 - S OW1 - SH IY0 - EY0 T\nDISASSOCIATE(2)  D IH2 S - AH0 - S OW1 - S IY0 - EY0 T\nDISASSOCIATED  D IH2 S - AH0 - S OW1 - SH IY0 - EY0 - T AH0 D\nDISASSOCIATED(2)  D IH2 S - AH0 - S OW1 - S IY0 - EY0 - T AH0 D\nDISASTER  D IH0 - Z AE1 - S T ER0\nDISASTERS  D IH0 - Z AE1 - S T ER0 Z\nDISASTROUS  D IH0 - Z AE1 - S T R AH0 S\nDISASTROUSLY  D IH0 - Z AE1 - S T R AH0 S - L IY0\nDISAVOW  D IH2 S - AH0 - V AW1\nDISAVOWED  D IH2 S - AH0 - V AW1 D\nDISAVOWING  D IH0 S - AH0 - V AW1 - IH0 NG\nDISBAND  D IH0 S - B AE1 N D\nDISBANDED  D IH0 S - B AE1 N - D IH0 D\nDISBANDING  D IH0 S - B AE1 N - D IH0 NG\nDISBAR  D IH2 S - B AA1 R\nDISBARMENT  D IH2 S - B AA1 R - M AH0 N T\nDISBARRED  D IH0 S - B AA1 R D\nDISBELIEF  D IH2 S - B IH0 - L IY1 F\nDISBELIEVE  D IH0 S - B AH0 - L IY1 V\nDISBELIEVING  D IH0 S - B AH0 - L IY1 - V IH0 NG\nDISBRO  D IH1 S - B R OW0\nDISBROW  D IH1 S - B R AW0\nDISBURSE  D IH0 S - B ER1 S\nDISBURSED  D IH0 S - B ER1 S T\nDISBURSEMENT  D IH0 S - B ER1 S - M AH0 N T\nDISBURSEMENTS  D IH0 S - B ER1 S - M AH0 N T S\nDISBURSING  D IH0 S - B ER1 - S IH0 NG\nDISC  D IH1 S K\nDISCARD  D IH0 S - K AA1 R D\nDISCARDED  D IH0 S - K AA1 R - D IH0 D\nDISCARDING  D IH0 S - K AA1 R - D IH0 NG\nDISCARDS  D IH0 S - K AA1 R D Z\nDISCENZA  D IH0 S - CH EH1 N - Z AH0\nDISCERN  D IH0 - S ER1 N\nDISCERNED  D IH0 - S ER1 N D\nDISCERNIBLE  D IH0 - S ER1 - N AH0 - B AH0 L\nDISCERNING  D IH0 - S ER1 - N IH0 NG\nDISCERNMENT  D IH0 - S ER1 N - M AH0 N T\nDISCH  D IH1 SH\nDISCHARGE  D IH0 S - CH AA1 R JH\nDISCHARGE(2)  D IH1 S - CH AA2 R JH\nDISCHARGED  D IH0 S - CH AA1 R JH D\nDISCHARGED(2)  D IH1 S - CH AA2 R JH D\nDISCHARGES  D IH0 S - CH AA1 R - JH AH0 Z\nDISCHARGES(2)  D IH1 S - CH AA2 R - JH AH0 Z\nDISCHARGING  D IH0 S - CH AA1 R - JH IH0 NG\nDISCHARGING(2)  D IH1 S - CH AA2 R - JH IH0 NG\nDISCHER  D IH1 - SH ER0\nDISCHINGER  D IH1 - SH IH0 N - JH ER0\nDISCIPLE  D IH0 - S AY1 - P AH0 L\nDISCIPLES  D IH0 - S AY1 - P AH0 L Z\nDISCIPLINARIAN  D IH2 - S IH0 - P L IH0 - N EH1 - R IY0 - AH0 N\nDISCIPLINARIANS  D IH2 - S IH0 - P L IH0 - N EH1 - R IY0 - AH0 N Z\nDISCIPLINARY  D IH1 - S AH0 - P L AH0 - N EH2 - R IY0\nDISCIPLINE  D IH1 - S AH0 - P L AH0 N\nDISCIPLINED  D IH1 - S AH0 - P L AH0 N D\nDISCIPLINES  D IH1 - S AH0 - P L AH0 N Z\nDISCIPLINING  D IH1 - S AH0 - P L AH0 - N IH0 NG\nDISCLAIM  D IH0 S - K L EY1 M\nDISCLAIMED  D IH0 S - K L EY1 M D\nDISCLAIMER  D IH0 S - K L EY1 - M ER0\nDISCLAIMERS  D IH0 S - K L EY1 - M ER0 Z\nDISCLAIMING  D IH0 S - K L EY1 - M IH0 NG\nDISCLAIMS  D IH0 S - K L EY1 M Z\nDISCLAND  D IH1 S K - L AE2 N D\nDISCLOSE  D IH0 S - K L OW1 Z\nDISCLOSED  D IH0 S - K L OW1 Z D\nDISCLOSES  D IH0 S - K L OW1 - Z IH0 Z\nDISCLOSING  D IH0 S - K L OW1 - Z IH0 NG\nDISCLOSURE  D IH0 S - K L OW1 - ZH ER0\nDISCLOSURES  D IH0 S - K L OW1 - ZH ER0 Z\nDISCO  D IH1 - S K OW0\nDISCOGRAPHY  D IH0 - S K AO1 - G R AH0 - F IY0\nDISCOLOR  D IH0 - S K AH1 - L ER0\nDISCOLORATION  D IH0 - S K AH2 - L ER0 - EY1 - SH AH0 N\nDISCOLORATIONS  D IH0 - S K AH2 - L ER0 - EY1 - SH AH0 N Z\nDISCOLORED  D IH0 S - K AH1 - L ER0 D\nDISCOLORS  D IH0 - S K AH1 - L ER0 Z\nDISCOMFORT  D IH0 S - K AH1 M - F ER0 T\nDISCONCERT  D IH2 S - K AH0 N - S ER1 T\nDISCONCERTING  D IH2 S - K AH0 N - S ER1 - T IH0 NG\nDISCONNECT  D IH0 S - K AH0 - N EH1 K T\nDISCONNECTED  D IH2 S - K AH0 - N EH1 K - T IH0 D\nDISCONNECTING  D IH2 S - K AH0 - N EH1 K - T IH0 NG\nDISCONNECTION  D IH2 S - K AH0 - N EH1 K - SH AH0 N\nDISCONTENT  D IH0 S - K AH0 N - T EH1 N T\nDISCONTENTED  D IH2 S - K AH0 N - T EH1 N - T IH0 D\nDISCONTENTS  D IH2 S - K AH0 N - T EH1 N T S\nDISCONTINUANCE  D IH2 S - K AH0 N - T IH1 - N Y UW0 - AH0 N S\nDISCONTINUATION  D IH2 S - K AH0 N - T IH2 - N Y UW0 - EY1 - SH AH0 N\nDISCONTINUE  D IH0 S - K AH0 N - T IH1 - N Y UW0\nDISCONTINUED  D IH0 S - K AH0 N - T IH1 - N Y UW0 D\nDISCONTINUING  D IH0 S - K AH0 N - T IH1 - N Y UW0 - IH0 NG\nDISCONTINUITY  D IH0 S - K AA2 N - T IH0 - N UW1 - IH0 - T IY0\nDISCORD  D IH1 - S K AO0 R D\nDISCORDANT  D IH0 - S K AO1 R - D AH0 N T\nDISCOS  D IH1 - S K OW0 Z\nDISCOTHEQUE  D IH1 - S K OW0 - T EH2 K\nDISCOUNT  D IH0 S - K AW1 N T\nDISCOUNT(2)  D IH1 S - K AW0 N T\nDISCOUNTABLE  D IH1 S - K AW2 N - T AH0 - B AH0 L\nDISCOUNTED  D IH1 S - K AW2 N - T IH0 D\nDISCOUNTED(2)  D IH1 S - K AW2 - N IH0 D\nDISCOUNTER  D IH1 S - K AW2 N - T ER0\nDISCOUNTERS  D IH0 S - K AW1 N - T ER0 Z\nDISCOUNTERS(2)  D IH1 S - K AW2 - N ER0 R Z\nDISCOUNTING  D IH1 S - K AW2 N - T IH0 NG\nDISCOUNTING(2)  D IH1 S - K AW2 - N IH0 NG\nDISCOUNTS  D IH0 S - K AW1 N T S\nDISCOUNTS(2)  D IH1 S - K AW2 N T S\nDISCOURAGE  D IH0 - S K ER1 - IH0 JH\nDISCOURAGED  D IH0 - S K ER1 - AH0 JH D\nDISCOURAGED(2)  D IH0 - S K ER1 - IH0 JH D\nDISCOURAGEMENT  D IH0 - S K ER1 - IH0 JH - M AH0 N T\nDISCOURAGES  D IH0 - S K ER1 - IH0 - JH IH0 Z\nDISCOURAGING  D IH0 - S K ER1 - AH0 - JH IH0 NG\nDISCOURAGING(2)  D IH0 - S K ER1 - IH0 - JH IH0 NG\nDISCOURSE  D IH1 S - K AO0 R S\nDISCOURSES  D IH0 S - K AO1 R - S IH0 Z\nDISCOURSES(2)  D IH1 S - K AO0 R - S IH0 Z\nDISCOVER  D IH0 - S K AH1 - V ER0\nDISCOVERABLE  D IH0 - S K AH1 - V ER0 - AH0 - B AH0 L\nDISCOVERABLE(2)  D IH0 - S K AH1 - V R AH0 - B AH0 L\nDISCOVERED  D IH0 - S K AH1 - V ER0 D\nDISCOVERIES  D IH0 - S K AH1 - V ER0 - IY0 Z\nDISCOVERING  D IH0 - S K AH1 - V ER0 - IH0 NG\nDISCOVERS  D IH0 - S K AH1 - V ER0 Z\nDISCOVERY  D IH0 - S K AH1 - V ER0 - IY0\nDISCOVERY'S  D IH0 - S K AH1 - V ER0 - IY0 Z\nDISCOVERY'S(2)  D IH0 - S K AH1 - V R IY0 Z\nDISCOVERY(2)  D IH0 - S K AH1 - V R IY0\nDISCOVERY(2)  D IH2 - S K AH1 - V R IY0\nDISCREDIT  D IH0 S - K R EH1 - D AH0 T\nDISCREDITED  D IH0 S - K R EH1 - D IH0 - T IH0 D\nDISCREDITING  D IH0 S - K R EH1 - D AH0 - T IH0 NG\nDISCREDITS  D IH0 S - K R EH1 - D AH0 T S\nDISCREET  D IH0 - S K R IY1 T\nDISCREETLY  D IH0 - S K R IY1 T - L IY0\nDISCREPANCIES  D IH0 - S K R EH1 - P AH0 N - S IY0 Z\nDISCREPANCY  D IH0 - S K R EH1 - P AH0 N - S IY0\nDISCRETE  D IH0 - S K R IY1 T\nDISCRETION  D IH0 - S K R EH1 - SH AH0 N\nDISCRETIONARY  D IH0 - S K R EH1 - SH AH0 N - EH2 - R IY0\nDISCRIMINATE  D IH0 - S K R IH1 - M AH0 - N EY2 T\nDISCRIMINATED  D IH0 - S K R IH1 - M AH0 - N EY2 - T AH0 D\nDISCRIMINATED(2)  D IH0 - S K R IH1 - M AH0 - N EY2 - T IH0 D\nDISCRIMINATES  D IH0 - S K R IH1 - M AH0 - N EY2 T S\nDISCRIMINATING  D IH0 - S K R IH1 - M AH0 - N EY2 - T IH0 NG\nDISCRIMINATION  D IH0 - S K R IH2 - M AH0 - N EY1 - SH AH0 N\nDISCRIMINATORY  D IH0 - S K R IH1 - M AH0 - N AH0 - T AO2 - R IY0\nDISCS  D IH1 S K S\nDISCURSIVE  D IH0 - S K ER1 - S IH0 V\nDISCUS  D IH1 - S K AH0 S\nDISCUSS  D IH0 - S K AH1 S\nDISCUSSED  D IH0 - S K AH1 S T\nDISCUSSES  D IH0 - S K AH1 - S AH0 Z\nDISCUSSES(2)  D IH0 - S K AH1 - S IH0 Z\nDISCUSSING  D IH0 - S K AH1 - S IH0 NG\nDISCUSSION  D IH0 - S K AH1 - SH AH0 N\nDISCUSSIONS  D IH0 - S K AH1 - SH AH0 N Z\nDISDAIN  D IH0 S - D EY1 N\nDISDAINED  D IH0 S - D EY1 N D\nDISDAINFUL  D IH0 S - D EY1 N - F AH0 L\nDISDAINING  D IH0 S - D EY1 - N IH0 NG\nDISDAINS  D IH0 S - D EY1 N Z\nDISE  D AY1 S\nDISE(2)  D AY1 Z\nDISEASE  D IH0 - Z IY1 Z\nDISEASE'S  D IH0 - Z IY1 - Z IH0 Z\nDISEASED  D IH0 - Z IY1 Z D\nDISEASES  D IH0 - Z IY1 - Z AH0 Z\nDISEASES(2)  D IH0 - Z IY1 - Z IH0 Z\nDISEMBARK  D IH0 S - EH0 M - B AA1 R K\nDISEMBARKATION  D IH0 S - EH2 M - B AA0 R - K EY1 - SH AH0 N\nDISEMBODIED  D IH0 S - IH0 - B AA1 - D IY0 D\nDISEMBODY  D IH0 S - IH0 - B AA1 - D IY0\nDISENCHANTED  D IH0 S - IH0 N - CH AE1 N - T IH0 D\nDISENCHANTED(2)  D IH0 S - IH0 N - CH AE1 - N IH0 D\nDISENCHANTMENT  D IH0 S - IH0 N - CH AE1 N T - M AH0 N T\nDISENFRANCHISE  D IH0 S - IH0 N - F R AE1 N - CH AY2 Z\nDISENFRANCHISED  D IH0 S - IH0 N - F R AE1 N - CH AY2 Z D\nDISENFRANCHISEMENT  D IH0 S - IH0 N - F R AE1 N - CH AY2 Z - M AH0 N T\nDISENGAGE  D IH0 S - IH0 N - G EY1 JH\nDISENGAGED  D IH0 S - IH0 N - G EY1 JH D\nDISENGAGEMENT  D IH0 S - IH0 N - G EY1 JH - M AH0 N T\nDISENGAGING  D IH0 S - IH0 N - G EY1 - JH IH0 NG\nDISENTANGLE  D IH2 S - AH0 N - T AE1 NG - G AH0 L\nDISEQUILIBRIUM  D IH0 - S IY2 - K W AH0 - L IH1 - B R IY0 - AH0 M\nDISESTABLISHMENT  D IH0 - S IH0 - S T AE1 - B L IH0 SH - M AH0 N T\nDISFAVOR  D IH0 S - F EY1 - V ER0\nDISFAVORING  D IH0 S - F EY1 - V ER0 - IH0 NG\nDISFIGURE  D IH0 S - F IH1 - G Y ER0\nDISFIGURED  D IH0 S - F IH1 - G Y ER0 D\nDISFIGUREMENT  D IH0 S - F IH1 - G Y ER0 - M EH0 N T\nDISFIGURING  D IH0 S - F IH1 - G Y ER0 - IH0 NG\nDISGORGE  D IH0 S - G AO1 R JH\nDISGORGED  D IH0 S - G AO1 R JH D\nDISGORGEMENT  D IH0 S - G AO1 R JH - M AH0 N T\nDISGRACE  D IH0 S - G R EY1 S\nDISGRACED  D IH0 S - G R EY1 S T\nDISGRACEFUL  D IH0 S - G R EY1 S - F AH0 L\nDISGRUNTLED  D IH0 S - G R AH1 N - T AH0 L D\nDISGRUNTLED(2)  D IH0 S - G R AH1 - N AH0 L D\nDISGRUNTLEMENT  D IH0 S - G R AH1 N - T AH0 L - M AH0 N T\nDISGRUNTLING  D IH0 S - G R AH1 N - T AH0 L - IH0 NG\nDISGRUNTLING(2)  D IH0 S - G R AH1 N T - L IH0 NG\nDISGUISE  D IH0 S - G AY1 Z\nDISGUISED  D IH0 S - G AY1 Z D\nDISGUISES  D IH0 S - G AY1 - Z IH0 Z\nDISGUISING  D IH0 S - G AY1 - Z IH0 NG\nDISGUST  D IH0 S - G AH1 S T\nDISGUSTED  D IH0 S - G AH1 - S T AH0 D\nDISGUSTED(2)  D IH0 S - G AH1 - S T IH0 D\nDISGUSTING  D IH0 S - G AH1 - S T IH0 NG\nDISGUSTS  D IH0 S - G AH1 S T S\nDISGUSTS(2)  D IH0 S - G AH1 S S\nDISGUSTS(3)  D IH0 S - G AH1 S\nDISH  D IH1 SH\nDISHARMONY  D IH0 S - HH AA1 R - M AH0 - N IY0\nDISHAROON  D IH0 - SH ER0 - UW1 N\nDISHAW  D IH1 - SH AO2\nDISHEARTENED  D IH0 S - HH AA1 R - T AH0 N D\nDISHEARTENING  D IH0 S - HH AA1 R - T AH0 N - IH0 NG\nDISHEARTENING(2)  D IH2 S - HH AA1 R T - N IH0 NG\nDISHED  D IH1 SH T\nDISHER  D IH1 - SH ER0\nDISHES  D IH1 - SH AH0 Z\nDISHES(2)  D IH1 - SH IH0 Z\nDISHEVEL  D IH0 - SH EH1 - V AH0 L\nDISHEVELED  D IH0 - SH EH1 - V AH0 L D\nDISHING  D IH1 - SH IH0 NG\nDISHMAN  D IH1 SH - M AH0 N\nDISHNER  D IH1 SH - N ER0\nDISHON  D IH1 - S AH0 N\nDISHONEST  D IH0 S - AA1 - N AH0 S T\nDISHONESTLY  D IH0 S - AO1 - N AH0 S T - L IY0\nDISHONESTY  D IH0 S - AA1 - N AH0 - S T IY0\nDISHONG  D IH1 - S AO0 NG\nDISHONOR  D IH0 S - AA1 - N ER0\nDISHONORABLE  D IH0 S - AA1 - N ER0 - AH0 - B AH0 L\nDISHONORED  D IH0 S - AA1 - N ER0 D\nDISHWASHER  D IH1 SH - W AA2 - SH ER0\nDISHWASHERS  D IH1 SH - W AA2 - SH ER0 Z\nDISHWASHING  D IH1 SH - W AA2 - SH IH0 NG\nDISILLUSION  D IH2 S - IH0 - L UW1 - ZH AH0 N\nDISILLUSIONED  D IH2 S - IH0 - L UW1 - ZH AH0 N D\nDISILLUSIONING  D IH2 S - IH0 - L UW1 - ZH AH0 N - IH0 NG\nDISILLUSIONMENT  D IH2 S - IH0 - L UW1 - ZH AH0 N - M AH0 N T\nDISILVESTRO  D IH0 - S IY0 L - V EH1 - S T R OW0\nDISIMONE  D IH0 - S IY0 - M OW1 - N IY0\nDISINCENTIVE  D IH2 S - IH0 N - S EH1 N - T IH0 V\nDISINCENTIVES  D IH2 S - IH0 N - S EH1 N - T IH0 V Z\nDISINCLINATION  D IH0 S - IH0 N - K L AH0 - N EY1 - SH AH0 N\nDISINCLINE  D IH2 S - IH0 N - K L AY1 N\nDISINCLINED  D IH2 S - IH0 N - K L AY1 N D\nDISINFECT  D IH0 S - IH0 N - F EH1 K T\nDISINFECTANT  D IH0 S - IH0 N - F EH1 K - T AH0 N T\nDISINFECTANTS  D IH0 S - IH0 N - F EH1 K - T AH0 N T S\nDISINFECTION  D IH0 S - IH0 N - F EH1 K - SH AH0 N\nDISINFLATE  D IH2 S - IH0 N - F L EY1 T\nDISINFLATION  D IH2 S - IH0 N - F L EY1 - SH AH0 N\nDISINFLATIONARY  D IH2 S - IH0 N - F L EY1 - SH AH0 N - EH2 - R IY0\nDISINFORM  D IH0 S - IH0 N - F AO1 R M\nDISINFORMATION  D IH0 - Z IH2 N - F ER0 - M EY1 - SH AH0 N\nDISINGENUOUS  D IH0 S - IH0 N - JH EH1 - N Y UW0 - AH0 S\nDISINGENUOUSNESS  D IH2 S - IH0 N - JH EH1 - N Y UW0 - AH0 S - N AH0 S\nDISINTEGRATE  D IH0 S - IH1 N - T AH0 - G R EY2 T\nDISINTEGRATED  D IH0 S - IH1 N - T AH0 - G R EY2 - T IH0 D\nDISINTEGRATES  D IH0 S - IH1 N - T AH0 - G R EY2 T S\nDISINTEGRATING  D IH0 S - IH1 N - T AH0 - G R EY2 - T IH0 NG\nDISINTEGRATION  D IH0 S - IH2 N - T AH0 - G R EY1 - SH AH0 N\nDISINTEGRATION(2)  D IH0 S - IH2 - N AH0 - G R EY1 - SH AH0 N\nDISINTEREST  D IH0 S - IH1 N - T ER0 - AH0 S T\nDISINTERESTED  D IH0 S - IH1 N - T R IH0 - S T IH0 D\nDISINTERESTED(2)  D IH0 S - IH1 N - R IH0 - S T IH0 D\nDISINVESTMENT  D IH0 S - IH0 N - V EH1 S T - M AH0 N T\nDISINVESTMENT(2)  D IH0 S - IH0 N - V EH1 S - M AH0 N T\nDISINVITE  D IH0 - S IH0 N - V AY1 T\nDISINVITED  D IH2 - S IH2 N - V AY1 - T IH0 D\nDISJOINT  D IH0 S - JH OY1 N T\nDISJOINTED  D IH0 S - JH OY1 N - T IH0 D\nDISK  D IH1 S K\nDISKETTE  D IH0 - S K EH1 T\nDISKETTES  D IH0 - S K EH1 T S\nDISKIN  D IH1 - S K IH0 N\nDISKLESS  D IH1 S K - L AH0 S\nDISKS  D IH1 S K S\nDISLIKE  D IH0 S - L AY1 K\nDISLIKED  D IH0 S - L AY1 K T\nDISLIKES  D IH0 S - L AY1 K S\nDISLIKING  D IH0 S - L AY1 - K IH0 NG\nDISLOCATE  D IH1 S - L OW0 - K EY0 T\nDISLOCATED  D IH1 S - L OW0 - K EY0 - T IH0 D\nDISLOCATION  D IH0 S - L OW1 - K EY1 - SH AH0 N\nDISLOCATIONS  D IH0 S - L OW1 - K EY1 - SH AH0 N Z\nDISLODGE  D IH0 S - L AA1 JH\nDISLODGED  D IH0 S - L AA1 JH D\nDISLODGING  D IH0 S - L AA1 - JH IH0 NG\nDISLOYAL  D IH0 S - L OY1 - AH0 L\nDISLOYALTY  D IH0 S - L OY1 - AH0 L - T IY0\nDISMAL  D IH1 Z - M AH0 L\nDISMALLY  D IH1 Z - M AH0 - L IY0\nDISMANTLE  D IH0 S - M AE1 N - T AH0 L\nDISMANTLE(2)  D IH0 S - M AE1 - N AH0 L\nDISMANTLED  D IH0 S - M AE1 N - T AH0 L D\nDISMANTLED(2)  D IH0 S - M AE1 - N AH0 L D\nDISMANTLEMENT  D IH0 S - M AE1 N - T AH0 L - M AH0 N T\nDISMANTLES  D IH0 S - M AE1 N - T AH0 L Z\nDISMANTLING  D IH0 S - M AE1 N - T AH0 L - IH0 NG\nDISMANTLING(2)  D IH0 S - M AE1 - N AH0 L - IH0 NG\nDISMANTLING(3)  D IH2 S - M AE1 N T - L IH0 NG\nDISMAY  D IH0 S - M EY1\nDISMAYED  D IH0 S - M EY1 D\nDISMAYING  D IH0 S - M EY1 - IH0 NG\nDISMAYS  D IH0 S - M EY1 Z\nDISMEMBER  D IH0 S - M EH1 M - B ER0\nDISMEMBERED  D IH0 S - M EH1 M - B ER0 D\nDISMEMBERING  D IH0 S - M EH1 M - B ER0 - IH0 NG\nDISMEMBERMENT  D IH0 S - M EH1 M - B ER0 - M AH0 N T\nDISMISS  D IH0 S - M IH1 S\nDISMISSAL  D IH0 S - M IH1 - S AH0 L\nDISMISSALS  D IH0 S - M IH1 - S AH0 L Z\nDISMISSED  D IH0 S - M IH1 S T\nDISMISSES  D IH0 S - M IH1 - S IH0 Z\nDISMISSING  D IH0 S - M IH1 - S IH0 NG\nDISMISSIVE  D IH0 S - M IH1 - S IH0 V\nDISMORE  D IH1 S - M AO0 R\nDISMUKE  D IH1 S - M Y UW0 K\nDISMUKES  D IH1 S - M Y UW0 K S\nDISMUTASE  D IH2 S - M Y UW0 - T EY1 Z\nDISNEY  D IH1 Z - N IY0\nDISNEY'S  D IH1 Z - N IY0 Z\nDISNEYLAND  D IH1 Z - N IY0 - L AE2 N D\nDISNEYWORLD  D IH1 Z - N IY0 - W ER0 L D\nDISOBEDIENCE  D IH2 S - AH0 - B IY1 - D IY0 - AH0 N S\nDISOBEDIENCE(2)  D IH2 S - OW0 - B IY1 - D IY0 - AH0 N S\nDISOBEDIENT  D IH2 S - AH0 - B IY1 - D IY0 - AH0 N T\nDISOBEDIENT(2)  D IH2 S - OW0 - B IY1 - D IY0 - AH0 N T\nDISOBEY  D IH2 S - AH0 - B EY1\nDISOBEYED  D IH2 S - OW0 - B EY1 D\nDISOBEYING  D IH2 S - OW0 - B EY1 - IH0 NG\nDISON  D IH1 - S AH0 N\nDISORDER  D IH0 S - AO1 R - D ER0\nDISORDERED  D IH0 S - AO1 R - D ER0 D\nDISORDERLY  D IH0 S - AO1 R - D ER0 - L IY0\nDISORDERS  D IH0 S - AO1 R - D ER0 Z\nDISORGANIZATION  D IH0 S - AO2 R - G AH0 - N AH0 - Z EY1 - SH AH0 N\nDISORGANIZE  D IH0 S - AO1 R - G AH0 - N AY2 Z\nDISORGANIZED  D IH0 S - AO1 R - G AH0 - N AY2 Z D\nDISORIENT  D IH0 S - AO1 - R IY0 - EH2 N T\nDISORIENTATION  D IH0 - S AO2 - R IY0 - AH0 N - T EY1 - SH AH0 N\nDISORIENTED  D IH0 S - AO1 - R IY0 - EH2 N - T IH0 D\nDISORIENTING  D IH0 S - AO1 - R IY0 - EH2 N - T IH0 NG\nDISOWN  D IH0 S - OW1 N\nDISOWNED  D IH0 S - OW1 N D\nDISPAIR  D IH0 - S P EH1 R\nDISPARAGE  D IH0 - S P EH1 - R IH0 JH\nDISPARAGED  D IH0 - S P EH1 - R IH0 JH D\nDISPARAGES  D IH0 - S P EH1 - R IH0 - JH IH0 Z\nDISPARAGING  D IH0 - S P EH1 - R IH0 - JH IH0 NG\nDISPARAGINGLY  D IH0 - S P EH1 - R IH0 - JH IH0 NG - L IY0\nDISPARATE  D IH1 - S P ER0 - IH0 T\nDISPARATE(2)  D IH0 - S P EH1 - R IH0 T\nDISPARITIES  D IH0 - S P EH1 - R AH0 - T IY0 Z\nDISPARITY  D IH0 - S P EH1 - R AH0 - T IY0\nDISPASSIONATE  D IH0 - S P AE1 - SH AH0 N - AH0 T\nDISPASSIONATELY  D IH0 - S P AE1 - SH AH0 N - AH0 T - L IY0\nDISPATCH  D IH0 - S P AE1 CH\nDISPATCHED  D IH0 - S P AE1 CH T\nDISPATCHER  D IH0 - S P AE1 - CH ER0\nDISPATCHER'S  D IH0 - S P AE1 - CH ER0 Z\nDISPATCHER'S(2)  D IH1 - S P AE2 - CH ER0 Z\nDISPATCHER(2)  D IH1 - S P AE2 - CH ER0\nDISPATCHERS  D IH0 - S P AE1 - CH ER0 Z\nDISPATCHES  D IH0 - S P AE1 - CH IH0 Z\nDISPATCHING  D IH0 - S P AE1 - CH IH0 NG\nDISPEL  D IH0 - S P EH1 L\nDISPELL  D IH0 - S P EH1 L\nDISPELLED  D IH0 - S P EH1 L D\nDISPELLING  D IH0 - S P EH1 - L IH0 NG\nDISPELS  D IH0 - S P EH1 L Z\nDISPENSABLE  D IH0 - S P EH1 N - S AH0 - B AH0 L\nDISPENSARY  D IH0 - S P EH1 N - S ER0 - IY0\nDISPENSARY(2)  D IH1 - S P EH0 N - S EH2 - R IY0\nDISPENSATION  D IH2 - S P AH0 N - S EY1 - SH AH0 N\nDISPENSE  D IH0 - S P EH1 N S\nDISPENSED  D IH0 - S P EH1 N S T\nDISPENSER  D IH0 - S P EH1 N - S ER0\nDISPENSERS  D IH0 - S P EH1 N - S ER0 Z\nDISPENSES  D IH0 - S P EH1 N - S IH0 Z\nDISPENSING  D IH0 - S P EH1 N - S IH0 NG\nDISPENZA  D IH0 - S P EH1 N - Z AH0\nDISPERSAL  D IH0 - S P ER1 - S AH0 L\nDISPERSANT  D IH2 - S P ER1 - S AH0 N T\nDISPERSANTS  D IH2 - S P ER1 - S AH0 N T S\nDISPERSE  D IH0 - S P ER1 S\nDISPERSED  D IH0 - S P ER1 S T\nDISPERSING  D IH0 - S P ER1 - S IH0 NG\nDISPERSION  D IH0 - S P ER1 - ZH AH0 N\nDISPERSIVE  D IH0 - S P ER1 - S IH0 V\nDISPIRITED  D IH0 - S P IH1 - R AH0 - T IH0 D\nDISPIRITING  D IH0 - S P IH1 - R IH0 - T IH0 NG\nDISPLACE  D IH0 S - P L EY1 S\nDISPLACED  D IH0 S - P L EY1 S T\nDISPLACEMENT  D IH0 S - P L EY1 S - M AH0 N T\nDISPLACEMENTS  D IH0 S - P L EY1 S - M AH0 N T S\nDISPLACES  D IH0 S - P L EY1 - S IH0 Z\nDISPLACING  D IH0 S - P L EY1 - S IH0 NG\nDISPLAY  D IH0 - S P L EY1\nDISPLAYED  D IH0 - S P L EY1 D\nDISPLAYING  D IH0 - S P L EY1 - IH0 NG\nDISPLAYS  D IH0 - S P L EY1 Z\nDISPLAYWRITE  D IH0 - S P L EY1 - R AY2 T\nDISPLEASE  D IH0 S - P L IY1 Z\nDISPLEASED  D IH0 S - P L IY1 Z D\nDISPLEASURE  D IH0 S - P L EH1 - ZH ER0\nDISPOSABLE  D IH0 - S P OW1 - Z AH0 - B AH0 L\nDISPOSABLES  D IH0 - S P OW1 - Z AH0 - B AH0 L Z\nDISPOSAL  D IH0 - S P OW1 - Z AH0 L\nDISPOSALS  D IH0 - S P OW1 - Z AH0 L Z\nDISPOSE  D IH0 - S P OW1 Z\nDISPOSED  D IH0 - S P OW1 Z D\nDISPOSER  D IH0 - S P OW1 - Z ER0\nDISPOSES  D IH0 - S P OW1 - Z IH0 Z\nDISPOSING  D IH0 - S P OW1 - Z IH0 NG\nDISPOSITION  D IH2 - S P AH0 - Z IH1 - SH AH0 N\nDISPOSITIONS  D IH2 - S P AH0 - Z IH1 - SH AH0 N Z\nDISPOSITIVE  D IH2 - S P AA1 - Z AH0 - T IH0 V\nDISPOSSESS  D IH2 S - P AH0 - Z EH1 S\nDISPOSSESSED  D IH2 S - P AH0 - Z EH1 S T\nDISPROPORTIONATE  D IH2 - S P R AH0 - P AO1 R - SH AH0 N - IH0 T\nDISPROPORTIONATELY  D IH2 - S P R AH0 - P AO1 R - SH AH0 N - AH0 T - L IY0\nDISPROVE  D IH0 S - P R UW1 V\nDISPROVED  D IH0 S - P R UW1 V D\nDISPROVEN  D IH0 S - P R UW1 - V IH0 N\nDISPROVES  D IH0 S - P R UW1 V Z\nDISPUTATION  D IH0 - S P Y UW1 - T EY1 - SH AH0 N\nDISPUTE  D IH0 - S P Y UW1 T\nDISPUTED  D IH0 - S P Y UW1 - T AH0 D\nDISPUTED(2)  D IH0 - S P Y UW1 - T IH0 D\nDISPUTES  D IH0 - S P Y UW1 T S\nDISPUTING  D IH0 - S P Y UW1 - T IH0 NG\nDISQUALIFICATION  D IH0 S - K W AA2 - L AH0 - F AH0 - K EY1 - SH AH0 N\nDISQUALIFIED  D IH0 S - K W AA1 - L AH0 - F AY2 D\nDISQUALIFIES  D IH0 S - K W AA1 - L AH0 - F AY2 Z\nDISQUALIFY  D IH0 S - K W AA1 - L AH0 - F AY2\nDISQUALIFYING  D IH0 S - K W AA1 - L AH0 - F AY2 - IH0 NG\nDISQUE  D IH1 S K\nDISQUIET  D IH0 S - K W AY1 - AH0 T\nDISQUIETING  D IH0 S - K W AY1 - AH0 - T IH0 NG\nDISRAELI  D IH0 Z - R EY1 - L IY0\nDISREGARD  D IH2 S - R IH0 - G AA1 R D\nDISREGARDED  D IH2 S - R IH0 - G AA1 R - D IH0 D\nDISREGARDING  D IH2 S - R IH0 - G AA1 R - D IH0 NG\nDISREGARDS  D IH2 S - R IH0 - G AA1 R D Z\nDISREPAIR  D IH2 S - R IH0 - P EH1 R\nDISREPUTABLE  D IH0 S - R EH1 - P Y AH0 - T AH0 - B AH0 L\nDISREPUTE  D IH2 S - R IH0 - P Y UW1 T\nDISRESPECT  D IH2 S - R IH0 - S P EH1 K T\nDISRESPECTED  D IH2 S - R IH0 - S P EH1 K - T IH0 D\nDISRESPECTFUL  D IH2 S - R IH0 - S P EH1 K T - F AH0 L\nDISRESPECTING  D IH2 S - R IH0 - S P EH1 K - T IH0 NG\nDISRESPECTS  D IH2 S - R IH0 - S P EH1 K T S\nDISRUPT  D IH0 S - R AH1 P T\nDISRUPTED  D IH0 S - R AH1 P - T IH0 D\nDISRUPTING  D IH0 S - R AH1 P - T IH0 NG\nDISRUPTION  D IH0 S - R AH1 P - SH AH0 N\nDISRUPTIONS  D IH0 S - R AH1 P - SH AH0 N Z\nDISRUPTIVE  D IH0 S - R AH1 P - T IH0 V\nDISRUPTS  D IH0 S - R AH1 P T S\nDISS  D IH1 S\nDISSATISFACTION  D IH2 S - AE0 - T IH0 S - F AE1 K - SH AH0 N\nDISSATISFIED  D IH0 S - AE1 - T AH0 S - F AY2 D\nDISSATISFY  D IH0 S - AE1 - T AH0 S - F AY2\nDISSECT  D AY0 - S EH1 K T\nDISSECTED  D AY0 - S EH1 K - T AH0 D\nDISSECTING  D AY0 - S EH1 K - T IH0 NG\nDISSECTION  D AY0 - S EH1 K - SH AH0 N\nDISSECTION(2)  D AY1 - S EH0 K - SH AH0 N\nDISSECTIONS  D AY0 - S EH1 K - SH AH0 N Z\nDISSECTIONS(2)  D AY1 - S EH0 K - SH AH0 N Z\nDISSECTS  D AY0 - S EH1 K T S\nDISSECTS(2)  D AY0 - S EH1 K S\nDISSEMBLE  D IH0 - S EH1 M - B AH0 L\nDISSEMBLING  D IH0 - S EH1 M - B L IH0 NG\nDISSEMINATE  D IH0 - S EH1 - M AH0 - N EY2 T\nDISSEMINATED  D IH0 - S EH1 - M AH0 - N EY2 - T AH0 D\nDISSEMINATING  D IH0 - S EH1 - M AH0 - N EY2 - T IH0 NG\nDISSEMINATION  D IH0 - S EH2 - M AH0 - N EY1 - SH AH0 N\nDISSENSION  D IH0 - S EH1 N - SH AH0 N\nDISSENT  D IH0 - S EH1 N T\nDISSENTED  D IH0 - S EH1 N - T IH0 D\nDISSENTED(2)  D IH0 - S EH1 - N IH0 D\nDISSENTER  D IH0 - S EH1 N - T ER0\nDISSENTERS  D IH0 - S EH1 N - T ER0 Z\nDISSENTERS(2)  D IH0 - S EH1 - N ER0 Z\nDISSENTING  D IH0 - S EH1 N - T IH0 NG\nDISSENTING(2)  D IH0 - S EH1 - N IH0 NG\nDISSENTS  D IH0 - S EH1 N T S\nDISSERTATION  D IH2 - S ER0 - T EY1 - SH AH0 N\nDISSERVICE  D IH0 S - S ER1 - V AH0 S\nDISSERVICE(2)  D IH0 - S ER1 - V AH0 S\nDISSIDENCE  D IH1 - S AH0 - D IH0 N S\nDISSIDENT  D IH1 - S AH0 - D IH0 N T\nDISSIDENTS  D IH1 - S AH0 - D AH0 N T S\nDISSIDENTS'  D IH1 - S AH0 - D AH0 N T S\nDISSIMILAR  D IH0 - S S IH1 - M AH0 - L ER0\nDISSIMILAR(2)  D IH0 - S IH1 - M AH0 - L ER0\nDISSIMILARITY  D IH0 - S S IH2 - M AH0 - L AE1 - R AH0 - T IY0\nDISSIMILARITY(2)  D IH2 - S IH2 - M AH0 - L AE1 - R AH0 - T IY0\nDISSINGER  D IH1 S - IH0 N - JH ER0\nDISSIPATE  D IH1 - S AH0 - P EY2 T\nDISSIPATED  D IH1 - S AH0 - P EY2 - T IH0 D\nDISSIPATES  D IH1 - S AH0 - P EY2 T S\nDISSIPATING  D IH1 - S AH0 - P EY2 - T IH0 NG\nDISSIPATION  D IH2 - S IH0 - P EY1 - SH AH0 N\nDISSIPATIVE  D IH1 - S AH0 - P EY2 - T IH0 V\nDISSOCIATE  D IH0 - S OW1 - S IY0 - EY0 T\nDISSOCIATION  D IH0 - S OW2 - S IY0 - EY1 - SH AH0 N\nDISSOLUTION  D IH2 - S AH0 - L UW1 - SH AH0 N\nDISSOLVE  D IH0 - Z AA1 L V\nDISSOLVED  D IH0 - Z AA1 L V D\nDISSOLVER  D IH0 - Z AA1 L - V ER0\nDISSOLVERS  D IH0 - Z AA1 L - V ER0 Z\nDISSOLVES  D IH0 - Z AA1 L V Z\nDISSOLVING  D IH0 - Z AO1 L - V IH0 NG\nDISSONANCE  D IH1 - S AH0 - N AH0 N S\nDISSONANT  D IH1 - S AH0 - N AH0 N T\nDISSUADE  D IH0 - S W EY1 D\nDISSUADED  D IH0 - S W EY1 - D IH0 D\nDISSYMMETRIC  D IH2 - S IH0 - M EH1 - T R IH0 K\nDISSYMMETRY  D IH0 - S IH1 - M AH0 - T R IY0\nDISTAD  D IH1 - S T AH0 D\nDISTAL  D IH1 - S T AH0 L\nDISTANCE  D IH1 - S T AH0 N S\nDISTANCED  D IH1 - S T AH0 N S T\nDISTANCES  D IH1 - S T AH0 N - S AH0 Z\nDISTANCES(2)  D IH1 - S T AH0 N - S IH0 Z\nDISTANCING  D IH1 - S T AH0 N - S IH0 NG\nDISTANT  D IH1 - S T AH0 N T\nDISTASI  D IH0 - S T AA1 - S IY0\nDISTASIO  D IH0 - S T AA1 - S IY0 - OW0\nDISTASTE  D IH0 S - T EY1 S T\nDISTASTEFUL  D IH0 S - T EY1 S T - F AH0 L\nDISTEFANO  D IH0 - S T EH0 - F AA1 - N OW0\nDISTEL  D IH1 - S T AH0 L\nDISTEMPER  D IH0 - S T EH1 M - P ER0\nDISTEND  D IH0 - S T EH1 N D\nDISTENDED  D IH0 - S T EH1 N - D IH0 D\nDISTIL  D IH0 - S T IH1 L\nDISTILL  D IH0 - S T IH1 L\nDISTILLATE  D IH1 - S T AH0 - L EY2 T\nDISTILLATE(2)  D IH1 - S T AH0 - L AH0 T\nDISTILLATES  D IH1 - S T AH0 - L EY2 T S\nDISTILLATION  D IH2 - S T AH0 - L EY1 - SH AH0 N\nDISTILLED  D IH0 - S T IH1 L D\nDISTILLER  D IH0 - S T IH1 - L ER0\nDISTILLER'S  D IH0 - S T IH1 - L ER0 Z\nDISTILLERIES  D IH0 - S T IH1 - L ER0 - IY0 Z\nDISTILLERS  D IH0 - S T IH1 - L ER0 Z\nDISTILLERS'  D IH0 - S T IH1 - L ER0 Z\nDISTILLERS'S  D IH0 - S T IH1 - L ER0 - Z IH0 Z\nDISTILLERY  D IH0 - S T IH1 - L ER0 - IY0\nDISTILLING  D IH0 - S T IH1 - L IH0 NG\nDISTILLS  D IH0 - S T IH1 L Z\nDISTINCT  D IH0 - S T IH1 NG K T\nDISTINCTION  D IH0 - S T IH1 NG K - SH AH0 N\nDISTINCTIONS  D IH0 - S T IH1 NG K - SH AH0 N Z\nDISTINCTIVE  D IH0 - S T IH1 NG K - T IH0 V\nDISTINCTIVELY  D IH0 - S T IH1 NG K - T IH0 V - L IY0\nDISTINCTIVENESS  D IH0 - S T IH1 NG K - T IH0 V - N AH0 S\nDISTINCTLY  D IH0 - S T IH1 NG K T - L IY0\nDISTINGUISH  D IH0 - S T IH1 NG - G W IH0 SH\nDISTINGUISHABLE  D IH0 - S T IH1 NG - G W IH0 - SH AH0 - B AH0 L\nDISTINGUISHED  D IH0 - S T IH1 NG - G W IH0 SH T\nDISTINGUISHES  D IH0 - S T IH1 NG - G W IH0 - SH IH0 Z\nDISTINGUISHING  D IH0 - S T IH1 NG - G W IH0 - SH IH0 NG\nDISTLER  D IH1 S T - L ER0\nDISTORT  D IH0 - S T AO1 R T\nDISTORTED  D IH0 - S T AO1 R - T AH0 D\nDISTORTED(2)  D IH0 - S T AO1 R - T IH0 D\nDISTORTING  D IH0 - S T AO1 R - T IH0 NG\nDISTORTION  D IH0 - S T AO1 R - SH AH0 N\nDISTORTIONS  D IH0 - S T AO1 R - SH AH0 N Z\nDISTORTS  D IH0 - S T AO1 R T S\nDISTRACT  D IH0 - S T R AE1 K T\nDISTRACTED  D IH0 - S T R AE1 K - T AH0 D\nDISTRACTED(2)  D IH0 - S T R AE1 K - T IH0 D\nDISTRACTING  D IH0 - S T R AE1 K - T IH0 NG\nDISTRACTION  D IH0 S - T R AE1 K - SH AH0 N\nDISTRACTIONS  D IH0 S - T R AE1 K - SH AH0 N Z\nDISTRACTS  D IH0 - S T R AE1 K T S\nDISTRAUGHT  D IH0 - S T R AO1 T\nDISTRESS  D IH0 - S T R EH1 S\nDISTRESSED  D IH0 - S T R EH1 S T\nDISTRESSES  D IH0 - S T R EH1 - S IH0 Z\nDISTRESSING  D IH0 - S T R EH1 - S IH0 NG\nDISTRESSINGLY  D IH0 - S T R EH1 - S IH0 NG - L IY0\nDISTRIBUTE  D IH0 - S T R IH1 - B Y UW0 T\nDISTRIBUTED  D IH0 S - T R IH1 - B Y AH0 - T AH0 D\nDISTRIBUTES  D IH0 - S T R IH1 - B Y UW0 T S\nDISTRIBUTING  D IH0 - S T R IH1 - B Y UW0 - T IH0 NG\nDISTRIBUTION  D IH2 S - T R AH0 - B Y UW1 - SH AH0 N\nDISTRIBUTIONS  D IH2 S - T R AH0 - B Y UW1 - SH AH0 N Z\nDISTRIBUTIVE  D IH0 - S T R IH1 - B Y UW0 - T IH0 V\nDISTRIBUTOR  D IH0 S - T R IH1 - B Y AH0 - T ER0\nDISTRIBUTOR'S  D IH0 - S T R IH1 - B Y UW0 - T ER0 Z\nDISTRIBUTORS  D IH0 S - T R IH1 - B Y AH0 - T ER0 Z\nDISTRIBUTORS'  D IH0 S - T R IH1 - B Y AH0 - T ER0 Z\nDISTRIBUTORSHIP  D IH0 - S T R IH1 - B Y UW0 - T ER0 - SH IH2 P\nDISTRIBUTORSHIPS  D IH0 - S T R IH1 - B Y UW0 - T ER0 - SH IH2 P S\nDISTRICT  D IH1 - S T R IH0 K T\nDISTRICT'S  D IH1 - S T R IH0 K T S\nDISTRICTING  D IH1 - S T R IH0 K - T IH0 N G\nDISTRICTS  D IH1 - S T R IH0 K T S\nDISTRIGAS  D IH0 S - T R IY1 - G AH0 S\nDISTRON  D IH1 - S T R AA2 N\nDISTRUST  D IH0 S - T R AH1 S T\nDISTRUSTED  D IH0 S - T R AH1 - S T AH0 D\nDISTRUSTED(2)  D IH0 S - T R AH1 - S T IH0 D\nDISTRUSTFUL  D IH0 S - T R AH1 S T - F AH0 L\nDISTRUSTS  D IH0 S - T R AH1 S T S\nDISTRUSTS(2)  D IH0 - S T R AH1 S S\nDISTRUSTS(3)  D IH0 - S T R AH1 S\nDISTURB  D IH0 - S T ER1 B\nDISTURBANCE  D IH0 - S T ER1 - B AH0 N S\nDISTURBANCES  D IH0 - S T ER1 - B AH0 N - S AH0 Z\nDISTURBANCES(2)  D IH0 - S T ER1 - B AH0 N - S IH0 Z\nDISTURBED  D IH0 - S T ER1 B D\nDISTURBING  D IH0 - S T ER1 - B IH0 NG\nDISTURBINGLY  D IH0 - S T ER1 - B IH0 NG - L IY0\nDISTURBS  D IH0 - S T ER1 B Z\nDISUNION  D IH0 S - Y UW1 - N Y AH0 N\nDISUNITY  D IH0 S - Y UW1 - N AH0 - T IY0\nDISUSE  D IH0 S - Y UW1 S\nDITCH  D IH1 CH\nDITCHED  D IH1 CH T\nDITCHES  D IH1 - CH AH0 Z\nDITCHES(2)  D IH1 - CH IH0 Z\nDITCHING  D IH1 - CH IH0 NG\nDITH  D IH1 TH\nDITHER  D IH1 - DH ER0\nDITHERING  D IH1 - DH ER0 - IH0 NG\nDITHERS  D IH1 - DH ER0 Z\nDITHYRAMB  D IH1 - TH ER0 - AE2 M\nDITKA  D IH1 T - K AH0\nDITKA'S  D IH1 T - K AH0 Z\nDITLOW  D IH1 T - L OW0\nDITMARS  D IH1 T - M ER0 Z\nDITMER  D IH1 T - M ER0\nDITMORE  D IH1 T - M AO0 R\nDITOMASSO  D IH0 - T OW0 - M AA1 - S OW0\nDITOMMASO  D IH0 - T OW0 - M AA1 - S OW0\nDITSY  D IH1 T - S IY0\nDITTBERNER  D IH1 T - B ER0 - N ER0\nDITTEMORE  D IH0 - T EH1 - M AO0 R\nDITTER  D IH1 - T ER0\nDITTIES  D IH1 - T IY0 Z\nDITTMAN  D IH1 T - M AH0 N\nDITTMANN  D IH1 T - M AH0 N\nDITTMAR  D IH1 T - M ER0\nDITTMER  D IH1 T - M ER0\nDITTO  D IH1 - T OW0\nDITTON  D IH1 - T AH0 N\nDITTRICH  D IH1 - T R IH0 K\nDITTUS  D IH1 - T AH0 S\nDITTY  D IH1 - T IY0\nDITULLIO  D IH0 - T AH1 - L IY0 - OW0\nDITZEL  D IH1 T - Z AH0 L\nDITZLER  D IH1 T - S L ER0\nDIURETIC  D AY2 - UW0 - R EH1 - T IH0 K\nDIURETICS  D AY2 - UW0 - R EH1 - T IH0 K S\nDIURNAL  D AY0 - ER1 - N AH0 L\nDIURNALLY  D AY0 - ER1 - N AH0 - L IY0\nDIVA  D IY1 - V AH0\nDIVAD  D IH1 - V AE0 D\nDIVALENT  D AY0 - V EY1 - L AH0 N T\nDIVALL  D IH1 - V AH0 L\nDIVAN  D IH0 - V AE1 N\nDIVAS  D IY1 - V AH0 Z\nDIVE  D AY1 V\nDIVED  D AY1 V D\nDIVELBISS  D IH0 - V EH1 L - B IH0 S\nDIVELEY  D IH1 - V IH0 - L IY0\nDIVELY  D AY1 V - L IY0\nDIVEN  D AY1 - V AH0 N\nDIVENS  D AY1 - V AH0 N Z\nDIVER  D AY1 - V ER0\nDIVER'S  D AY1 - V ER0 Z\nDIVERGE  D IH0 - V ER1 JH\nDIVERGED  D AY0 - V ER1 JH D\nDIVERGENCE  D AY0 - V ER1 - JH AH0 N S\nDIVERGENCE(2)  D IH0 - V ER1 - JH AH0 N S\nDIVERGENCES  D AY0 - V ER1 - JH AH0 N - S IH0 Z\nDIVERGENT  D AY0 - V ER1 - JH AH0 N T\nDIVERGENT(2)  D IH0 - V ER1 - JH AH0 N T\nDIVERGES  D AY0 - V ER1 - JH IH0 Z\nDIVERGING  D AY0 - V ER1 - JH IH0 NG\nDIVERS  D AY1 - V ER0 Z\nDIVERSE  D AY0 - V ER1 S\nDIVERSE(2)  D IH0 - V ER1 S\nDIVERSICARE  D IH1 - V ER0 - S IH0 - K EH2 R\nDIVERSIFICATION  D AY0 - V ER2 - S AH0 - F AH0 - K EY1 - SH AH0 N\nDIVERSIFICATION(2)  D IH0 - V ER2 - S AH0 - F AH0 - K EY1 - SH AH0 N\nDIVERSIFICATIONS  D AY0 - V ER2 - S AH0 - F AH0 - K EY1 - SH AH0 N Z\nDIVERSIFICATIONS(2)  D IH0 - V ER2 - S AH0 - F AH0 - K EY1 - SH AH0 N Z\nDIVERSIFIED  D AY0 - V ER1 - S AH0 - F AY2 D\nDIVERSIFIED(2)  D IH0 - V ER1 - S AH0 - F AY2 D\nDIVERSIFY  D AY0 - V ER1 - S AH0 - F AY2\nDIVERSIFY(2)  D IH0 - V ER1 - S AH0 - F AY2\nDIVERSIFYING  D AY0 - V ER1 - S AH0 - F AY2 - IH0 NG\nDIVERSIFYING(2)  D IH0 - V ER1 - S AH0 - F AY2 - IH0 NG\nDIVERSION  D AY0 - V ER1 - ZH AH0 N\nDIVERSION(2)  D IH0 - V ER1 - ZH AH0 N\nDIVERSIONARY  D AY0 - V ER1 - ZH AH0 N - EH2 - R IY0\nDIVERSIONARY(2)  D IH0 - V ER1 - ZH AH0 N - EH2 - R IY0\nDIVERSIONS  D IH0 - V ER1 - ZH AH0 N Z\nDIVERSIONS(2)  D AY0 - V ER1 - ZH AH0 N Z\nDIVERSITY  D IH0 - V ER1 - S AH0 - T IY0\nDIVERSITY(2)  D IH0 - V ER1 - S IH0 - T IY0\nDIVERSITY(3)  D AY0 - V ER1 - S AH0 - T IY0\nDIVERSITY(4)  D AY0 - V ER1 - S IH0 - T IY0\nDIVERT  D AY0 - V ER1 T\nDIVERT(2)  D IH0 - V ER1 T\nDIVERTED  D AY0 - V ER1 - T IH0 D\nDIVERTED(2)  D IH0 - V ER1 - T IH0 D\nDIVERTICULA  D AY2 - V ER0 - T IH1 - K Y AH0 - L AH0\nDIVERTICULUM  D AY2 - V ER0 - T IH1 - K Y AH0 - L AH0 M\nDIVERTIMENTO  D IH0 - V ER2 - T AH0 - M EH1 N - T OW2\nDIVERTING  D AY0 - V ER1 - T IH0 NG\nDIVERTING(2)  D IH0 - V ER1 - T IH0 NG\nDIVERTS  D AY0 - V ER1 T S\nDIVERTS(2)  D IH0 - V ER1 T S\nDIVES  D AY1 V Z\nDIVEST  D AY0 - V EH1 S T\nDIVEST(2)  D IH0 - V EH1 S T\nDIVESTED  D AY0 - V EH1 - S T IH0 D\nDIVESTING  D AY0 - V EH1 - S T IH0 NG\nDIVESTITURE  D IH0 - V EH1 - S T IH0 - CH ER0\nDIVESTITURE(2)  D AY0 - V EH1 - S T IH0 - CH ER0\nDIVESTITURES  D IH0 - V EH1 - S T IH0 - CH ER0 Z\nDIVESTITURES(2)  D AY0 - V EH1 - S T IH0 - CH ER0 Z\nDIVESTMENT  D AY0 - V EH1 S T - M AH0 N T\nDIVESTMENT(2)  D AY0 - V EH1 S - M AH0 N T\nDIVESTMENT(3)  D IH0 - V EH1 S - M AH0 N T\nDIVESTMENTS  D AY0 - V EH1 S T - M AH0 N T S\nDIVESTMENTS(2)  D AY0 - V EH1 S - M AH0 N T S\nDIVESTMENTS(3)  D IH0 - V EH1 S - M AH0 N T S\nDIVESTS  D AY0 - V EH1 S T S\nDIVESTS(2)  D AY0 - V EH1 S S\nDIVESTS(3)  D AY0 - V EH1 S\nDIVI  D IY1 - V IY0\nDIVIDE  D IH0 - V AY1 D\nDIVIDED  D IH0 - V AY1 - D AH0 D\nDIVIDEND  D IH1 - V IH0 - D EH2 N D\nDIVIDEND'S  D IH1 - V AH0 - D EH2 N D Z\nDIVIDENDS  D IH1 - V AH0 - D EH2 N D Z\nDIVIDER  D IH0 - V AY1 - D ER0\nDIVIDES  D IH0 - V AY1 D Z\nDIVIDING  D IH0 - V AY1 - D IH0 NG\nDIVINATION  D IH2 - V AH0 - N EY1 - SH AH0 N\nDIVINCENZO  D IH0 - V IY0 N - CH EH1 N - Z OW0\nDIVINE  D IH0 - V AY1 N\nDIVINELY  D IH0 - V AY1 N - L IY0\nDIVINEY  D IH1 - V IH0 - N IY0\nDIVING  D AY1 - V IH0 NG\nDIVINING  D AH0 - V AY1 - N IH0 NG\nDIVINITAS  D IH2 - V IH0 - N IY1 - T AH0 S\nDIVINITIES  D IH0 - V IH1 - N AH0 - T IY0 Z\nDIVINITY  D IH0 - V IH1 - N AH0 - T IY0\nDIVIRGILIO  D IH0 - V IH0 R - JH IY1 - L IY0 - OW0\nDIVIS  D IY1 - V IH0 S\nDIVISIBLE  D IH0 - V IH1 - Z AH0 - B AH0 L\nDIVISION  D IH0 - V IH1 - ZH AH0 N\nDIVISION'S  D IH0 - V IH1 - ZH AH0 N Z\nDIVISIONAL  D IH0 - V IH1 - ZH AH0 - N AH0 L\nDIVISIONS  D IH0 - V IH1 - ZH AH0 N Z\nDIVISIONS'  D IH0 - V IH1 - ZH AH0 N Z\nDIVISIVE  D IH0 - V AY1 - S IH0 V\nDIVISIVENESS  D IH0 - V AY1 - S IH0 V - N AH0 S\nDIVISON  D IH0 - V IH1 - ZH AH0 N\nDIVISON(2)  D IH0 - V IH1 - S AH0 N\nDIVISOR  D IH0 - V AY1 - Z ER0\nDIVITA  D IH0 - V IY1 - T AH0\nDIVITO  D IH0 - V IY1 - T OW0\nDIVORCE  D IH0 - V AO1 R S\nDIVORCED  D IH0 - V AO1 R S T\nDIVORCEE  D AH0 - V AO1 R - S IY2\nDIVORCEE(2)  D AH0 - V AO1 R - S EY2\nDIVORCES  D IH0 - V AO1 R - S IH0 Z\nDIVORCING  D IH0 - V AO1 R - S IH0 NG\nDIVULGE  D IH0 - V AH1 L JH\nDIVULGE(2)  D AY0 - V AH1 L JH\nDIVULGED  D IH0 - V AH1 L JH D\nDIVULGED(2)  D AY0 - V AH1 L JH D\nDIVULGING  D IH0 - V AH1 L - JH IH0 NG\nDIVULGING(2)  D AY0 - V AH1 L - JH IH0 NG\nDIVVIED  D IH1 - V IY0 D\nDIVVY  D IH1 - V IY0\nDIWA  D IY1 - W AH0\nDIX  D IH1 K S\nDIXIE  D IH1 K - S IY0\nDIXIELAND  D IH1 K - S IY0 - L AE2 N D\nDIXON  D IH1 K - S AH0 N\nDIXON'S  D IH1 K - S AH0 N Z\nDIXONS  D IH1 K - S AH0 N Z\nDIXSON  D IH1 K - S AH0 N\nDIXVILLE  D IH1 K S - V IH0 L\nDIXY  D IH1 K - S IY0\nDIZON  D IH1 - Z AH0 N\nDIZZINESS  D IH1 - Z IY0 - N AH0 S\nDIZZY  D IH1 - Z IY0\nDIZZYING  D IH1 - Z IY0 - IH0 NG\nDJAKARTA  JH AH0 - K AA1 R - T AH0\nDJAKARTA'S  JH AH0 - K AA1 R - T AH0 Z\nDJIBOUTI  JH IH0 - B UW1 - T IY2\nDJURDJEVIC  JH ER1 - JH AH0 - V IH0 K\nDK  D IY1 - K EY1\nDLOUHY  D AH0 - L AW1 - IY0\nDLUGOS  D AH0 - L UW1 - G OW0 S\nDLUGOSZ  D AH0 - L UW1 - G OW0 S\nDLUGOSZ(2)  D AH0 - L UW1 - G OW0 SH\nDMITRI  D AH0 - M IY1 - T R IY0\nDMITRI(2)  D M IY1 - T R IY0\nDNASE  D IY1 - N EY2 S\nDNASE(2)  D IY1 - N EY2 Z\nDNIESTER  D AH0 - N IY1 - S T ER0\nDO  D UW1\nDO'S  D UW1 Z\nDOABLE  D UW1 - AH0 - B AH0 L\nDOAK  D OW1 K\nDOAN  D OW1 N\nDOANE  D OW1 N\nDOANH  D OW1 N\nDOANNA  D OW1 - N AH0\nDOB  D AA1 B\nDOBB  D AA1 B\nDOBBERSTEIN  D AA1 - B ER0 - S T IY2 N\nDOBBERSTEIN(2)  D AA1 - B ER0 - S T AY2 N\nDOBBIE  D AA1 - B IY0\nDOBBIN  D AA1 - B IH0 N\nDOBBINS  D AA1 - B IH0 N Z\nDOBBS  D AA1 B Z\nDOBEK  D OW1 - B IH0 K\nDOBER  D OW1 - B ER0\nDOBERMAN  D OW1 - B ER0 - M AH0 N\nDOBERSTEIN  D OW1 - B ER0 - S T AY0 N\nDOBERSTEIN(2)  D OW1 - B ER0 - S T IY0 N\nDOBESH  D AA1 - B IH0 SH\nDOBEY  D AA1 - B IY0\nDOBIAS  D OW0 - B IY1 - AH0 Z\nDOBIE  D AA1 - B IY0\nDOBIES  D OW1 - B IY0 Z\nDOBIS  D OW1 - B IH0 S\nDOBKIN  D AA1 B - K IH0 N\nDOBKINS  D AA1 B - K IH0 N Z\nDOBLE  D OW1 - B AH0 L\nDOBLER  D OW1 - B AH0 L - ER0\nDOBLER(2)  D OW1 - B L ER0\nDOBMEIER  D AA1 B - M AY0 - ER0\nDOBOS  D OW1 - B OW0 Z\nDOBOSZ  D AA1 - B AH0 SH\nDOBRANSKY  D AH0 - B R AE1 N S - K IY0\nDOBRATZ  D AA1 - B R AH0 T S\nDOBRIMIR  D AH0 - B R IY1 - M IH0 R\nDOBRIN  D AA1 - B R IH0 N\nDOBRINJA  D AH0 - B R IY1 N - JH AH0\nDOBRINJA(2)  D AH0 - B R IY1 - N Y AH0\nDOBRINS  D AA1 - B R IH0 N Z\nDOBRINSKI  D AH0 - B R IH1 N S - K IY0\nDOBROWOLSKI  D AH0 - B R AW0 - OW1 L - S K IY0\nDOBROWSKI  D AH0 - B R AO1 F S - K IY0\nDOBRY  D AA1 - B R IY0\nDOBRYNIN  D AA1 - B R IH0 - N IH0 N\nDOBRYNIN(2)  D AH0 - B R IY1 - N IH0 N\nDOBRZYNSKI  D OW2 - B R AH0 - ZH IH1 N - S K IY0\nDOBSON  D AA1 B - S AH0 N\nDOBSON'S  D AA1 B - S AH0 N Z\nDOBSONS  D AA1 B - S AH0 N Z\nDOBY  D OW1 - B IY0\nDOBYNS  D OW1 - B IH0 N Z\nDOC  D AA1 K\nDOCENT  D OW1 - S AH0 N T\nDOCENTS  D OW1 - S AH0 N T S\nDOCHERTY  D AA1 - CH ER0 - T IY0\nDOCHOW  D OW1 - CH AW0\nDOCHTERMAN  D AA1 K - T ER0 - M AH0 N\nDOCIE  D AA1 - K IY0\nDOCILA  D AA1 - S IH0 - L AH0\nDOCILE  D AA1 - S AH0 L\nDOCILITY  D AA0 - S IH1 - L AH0 - T IY0\nDOCK  D AA1 K\nDOCK'S  D AA1 K S\nDOCKED  D AA1 K T\nDOCKEN  D AA1 - K AH0 N\nDOCKENDORF  D AA1 - K IH0 N - D AO0 R F\nDOCKER  D AA1 - K ER0\nDOCKERS  D AA1 - K ER0 Z\nDOCKERY  D AA1 - K ER0 - IY0\nDOCKET  D AA1 - K AH0 T\nDOCKETS  D AA1 - K AH0 T S\nDOCKHAM  D AA1 K - HH AH0 M\nDOCKIERS  D AA1 - K Y ER0 Z\nDOCKING  D AA1 - K IH0 NG\nDOCKINS  D AA1 - K IH0 N Z\nDOCKLAND  D AA1 K - L AH0 N D\nDOCKLANDS  D AA1 K - L AH0 N D Z\nDOCKS  D AA1 K S\nDOCKSIDE  D AA1 K - S AY2 D\nDOCKSON  D AA1 K - S AH0 N\nDOCKSTADER  D AA1 K - S T AH0 - D ER0\nDOCKTER  D AA1 K - T ER0\nDOCKWORKER  D AA1 K - W ER2 - K ER0\nDOCKWORKERS  D AA1 K - W ER2 - K ER0 Z\nDOCKYARD  D AA1 K - Y AA2 R D\nDOCTOR  D AA1 K - T ER0\nDOCTOR'S  D AA1 K - T ER0 Z\nDOCTOR(2)  D AO1 K - T ER0\nDOCTORAL  D AA1 K - T ER0 - AH0 L\nDOCTORATE  D AA1 K - T ER0 - AH0 T\nDOCTORATES  D AA1 K - T ER0 - AH0 T S\nDOCTORED  D AA1 K - T ER0 D\nDOCTORING  D AA1 K - T ER0 - IH0 NG\nDOCTORS  D AA1 K - T ER0 Z\nDOCTORS'  D AA1 K - T ER0 Z\nDOCTRINAIRE  D AA2 K - T R AH0 - N EH1 R\nDOCTRINAL  D AA1 K - T R AH0 - N AH0 L\nDOCTRINE  D AA1 K - T R AH0 N\nDOCTRINE'S  D AA1 K - T R AH0 N Z\nDOCTRINE(2)  D AO1 K - T ER0 - IH0 N\nDOCTRINES  D AA1 K - T R AH0 N Z\nDOCUDRAMA  D OW2 - K AH0 - D R AE1 - M AH0\nDOCUMENT  D AA1 - K Y AH0 - M EH0 N T\nDOCUMENT(2)  D AA1 - K Y UW0 - M EH0 N T\nDOCUMENTA  D AA2 - K Y UW0 - M EH1 N - T AH0\nDOCUMENTARIES  D AA2 - K Y AH0 - M EH1 N - T ER0 - IY0 Z\nDOCUMENTARIES(2)  D AA2 - K Y AH0 - M EH1 - N ER0 - IY0 Z\nDOCUMENTARIES(3)  D AA2 - K Y UW0 - M EH1 N - T ER0 - IY0 Z\nDOCUMENTARIES(4)  D AA2 - K Y UW0 - M EH1 - N ER0 - IY0 Z\nDOCUMENTARY  D AA2 - K Y AH0 - M EH1 N - T ER0 - IY0\nDOCUMENTARY(2)  D AA2 - K Y AH0 - M EH1 - N ER0 - IY0\nDOCUMENTARY(3)  D AA2 - K Y UW0 - M EH1 N - T ER0 - IY0\nDOCUMENTARY(4)  D AA2 - K Y UW0 - M EH1 - N ER0 - IY0\nDOCUMENTATION  D AA2 - K Y AH0 - M EH0 N - T EY1 - SH AH0 N\nDOCUMENTATION(2)  D AA2 - K Y UW0 - M EH0 N - T EY1 - SH AH0 N\nDOCUMENTED  D AA1 - K Y AH0 - M EH2 N - T AH0 D\nDOCUMENTED(2)  D AA1 - K Y AH0 - M EH2 - N AH0 D\nDOCUMENTED(3)  D AA1 - K Y UW0 - M EH2 N - T AH0 D\nDOCUMENTED(4)  D AA1 - K Y UW0 - M EH2 - N AH0 D\nDOCUMENTING  D AA1 - K Y AH0 - M AH0 N - T IH0 NG\nDOCUMENTING(2)  D AA1 - K Y AH0 - M AH0 - N IH0 NG\nDOCUMENTING(3)  D AA1 - K Y UW0 - M AH0 N - T IH0 NG\nDOCUMENTING(4)  D AA1 - K Y UW0 - M AH0 - N IH0 NG\nDOCUMENTS  D AA1 - K Y AH0 - M AH0 N T S\nDOCUMENTS(2)  D AA1 - K Y UW0 - M AH0 N T S\nDODARO  D OW0 - D AA1 - R OW0\nDODD  D AA1 D\nDODD'S  D AA1 D Z\nDODDERING  D AA1 - D ER0 - IH0 NG\nDODDINGTON  D AA1 - D IH0 N - T AH0 N\nDODDINGTON(2)  D AA1 - D IH0 NG - T AH0 N\nDODDRIDGE  D AA1 - D R IH0 JH\nDODDS  D AA1 D Z\nDODGE  D AA1 JH\nDODGE'S  D AA1 - JH IH0 Z\nDODGED  D AA1 JH D\nDODGEN  D AA1 - JH AH0 N\nDODGER  D AA1 - JH ER0\nDODGER'S  D AA1 - JH ER0 Z\nDODGERS  D AA1 - JH ER0 Z\nDODGERS'  D AA1 - JH ER0 Z\nDODGES  D AA1 - JH IH0 Z\nDODGING  D AA1 - JH IH0 NG\nDODO  D OW1 - D OW0\nDODO'S  D OW1 - D OW0 Z\nDODOS  D OW1 - D OW0 Z\nDODRILL  D AA1 - D R AH0 L\nDODSON  D AA1 D - S AH0 N\nDODSWORTH  D AA1 D - S W ER0 TH\nDOE  D OW1\nDOE'S  D OW1 Z\nDOEBLER  D OW1 - B AH0 L - ER0\nDOEBLER(2)  D OW1 - B L ER0\nDOEDEN  D OW1 - D AH0 N\nDOEGE  D OW1 JH\nDOEHRING  D AO1 - R IH0 NG\nDOELL  D OW1 L\nDOENGES  D OW1 N - JH IH0 Z\nDOEPKE  D OW1 P K\nDOEPKER  D OW1 P - K ER0\nDOER  D UW1 R\nDOERFLER  D AO1 R - F AH0 - L ER0\nDOERFLER(2)  D AO1 R - F L ER0\nDOERFLINGER  D AO1 R - F AH0 L - IH0 - NG ER0\nDOERFLINGER(2)  D AO1 R - F L IH0 - NG ER0\nDOERING  D UW1 - ER0 - IH0 NG\nDOERNBERG  D AO1 R N - B ER0 G\nDOERNER  D AO1 R - N ER0\nDOERR  D AO1 R\nDOERS  D UW1 - ER0 Z\nDOERSAM  D AO1 R - S AH0 M\nDOES  D AH1 Z\nDOES(2)  D IH0 Z\nDOESCHER  D OW1 - SH ER0\nDOESN'T  D AH1 - Z AH0 N T\nDOESN'T(2)  D AH1 - Z AH0 N\nDOETSCH  D OW1 CH\nDOFASCO  D AH0 - F AE1 - S K OW0\nDOFF  D AO1 F\nDOFFING  D AO1 - F IH0 NG\nDOFFS  D AO1 F S\nDOG  D AO1 G\nDOG'S  D AO1 G Z\nDOGAN  D OW1 - G AH0 N\nDOGBANE  D AO1 G - B EY2 N\nDOGBERRY  D AO1 G - B EH2 - R IY0\nDOGE  D OW1 JH\nDOGFIGHT  D AA1 G - F AY2 T\nDOGFIGHTS  D AO1 G - F AY2 T S\nDOGFISH  D AO1 G - F IH2 SH\nDOGGED  D AO1 G D\nDOGGEDLY  D AO1 - G AH0 D - L IY0\nDOGGEREL  D AA1 - G ER0 - AH0 L\nDOGGETT  D AA1 - G IH0 T\nDOGGIE  D AO1 - G IY0\nDOGGIES  D AO1 - G IY0 Z\nDOGGING  D AO1 - G IH0 NG\nDOGGONE  D AO1 - G AO0 N\nDOGGY  D AO1 - G IY0\nDOGGY'S  D AO1 - G IY0 Z\nDOGHOUSE  D AO1 G - HH AW2 S\nDOGLE  D OW1 - G AH0 L\nDOGLE(2)  D AA1 - G AH0 L\nDOGLIKE  D AO1 G - L AY2 K\nDOGMA  D AA1 G - M AH0\nDOGMATIC  D AA0 G - M AE1 - T IH0 K\nDOGMATIC(2)  D AO0 G - M AE1 - T IH0 K\nDOGMATICALLY  D AA0 G - M AE1 - T IH0 K - L IY0\nDOGMATISM  D AA1 G - M AH0 - T IH2 - Z AH0 M\nDOGS  D AA1 G Z\nDOGS'  D AO1 G Z\nDOGS(2)  D AO1 G Z\nDOGWOOD  D AO1 G - W UH2 D\nDOGWOODS  D AO1 G - W UH2 D Z\nDOH  D OW1\nDOHENY  D AA1 - HH IH0 - N IY0\nDOHERTY  D OW1 - ER0 - T IY0\nDOHERTY(2)  D AO1 R - T IY0\nDOHERTY(3)  D AA1 - HH ER0 - T IY0\nDOHM  D AA1 M\nDOHMAN  D OW1 - M AH0 N\nDOHME  D OW1 M\nDOHMEN  D OW1 - M EH0 N\nDOHN  D AA1 N\nDOHNANYI  D OW2 - N AA1 N - Y IY0\nDOHNER  D OW1 - N ER0\nDOHR  D AO1 R\nDOHRMAN  D AO1 R - M AH0 N\nDOHRMANN  D AO1 R - M AH0 N\nDOHSE  D OW1 S\nDOI  D OY1\nDOIDGE  D OY1 JH\nDOIG  D OY1 G\nDOILIES  D OY1 - L IY0 Z\nDOILY  D OY1 - L IY0\nDOIN'  D UW1 - IH0 N\nDOING  D UW1 - IH0 NG\nDOINGS  D UW1 - IH0 NG Z\nDOIRON  D OY0 - R AO1 N\nDOKE  D OW1 K\nDOKEY  D OW1 - K IY0\nDOKKEN  D AA1 - K AH0 N\nDOKTOR  D AA1 K - T ER0\nDOL  D AA1 L\nDOLAK  D OW1 - L AH0 K\nDOLAN  D OW1 - L AH0 N\nDOLAND  D UW1 - L AH0 N D\nDOLATA  D OW0 - L AA1 - T AH0\nDOLBOW  D OW1 L - B OW0\nDOLBY  D OW1 L - B IY0\nDOLCE  D OW1 L - CH EY2\nDOLCH  D OW1 L CH\nDOLD  D OW1 L D\nDOLDER  D OW1 L - D ER0\nDOLDRUM  D OW1 L - D R AH0 M\nDOLDRUMS  D OW1 L - D R AH0 M Z\nDOLE  D OW1 L\nDOLE'S  D OW1 L Z\nDOLECKI  D AH0 - L EH1 T - S K IY0\nDOLED  D OW1 L D\nDOLEFUL  D OW1 L - F AH0 L\nDOLEN  D OW1 - L AH0 N\nDOLENCE  D OW1 - L AH0 N S\nDOLES  D OW1 L Z\nDOLES'S  D OW1 L - Z IH0 Z\nDOLEY  D OW1 - L IY0\nDOLEZAL  D OW0 - L EY0 - Z AE1 L\nDOLF  D OW1 L F\nDOLFI  D OW1 L - F IY0\nDOLGEN  D OW1 L - JH EH0 N\nDOLGIN  D OW1 L - JH IH0 N\nDOLIN  D OW1 - L IH0 N\nDOLINAR  D AA1 - L IH0 - N ER0\nDOLING  D OW1 - L IH0 NG\nDOLINGER  D OW1 - L IH0 - NG ER0\nDOLINSKI  D AH0 - L IH1 N - S K IY0\nDOLINSKY  D AH0 - L IH1 N - S K IY0\nDOLL  D AA1 L\nDOLL'S  D AA1 L Z\nDOLLAR  D AA1 - L ER0\nDOLLAR'S  D AA1 - L ER0 Z\nDOLLAR'S(2)  D AA1 - L AH0 Z\nDOLLAR'S(3)  D AO1 - L ER0 Z\nDOLLAR(2)  D AO1 - L ER0\nDOLLARD  D AA1 - L ER0 D\nDOLLARHIDE  D AA1 - L ER0 - HH AY2 D\nDOLLARS  D AA1 - L ER0 Z\nDOLLARS'  D AA1 - L ER0 Z\nDOLLARS(2)  D AO1 - L ER0 Z\nDOLLE  D AA1 L\nDOLLED  D AA1 L D\nDOLLENS  D AA1 - L AH0 N Z\nDOLLEY  D AA1 - L IY0\nDOLLHOUSE  D AA1 L - HH AW2 S\nDOLLHOUSES  D AA1 L - HH AW2 - S IH0 Z\nDOLLIE  D AA1 - L IY0\nDOLLINGER  D AA1 - L IH0 - NG ER0\nDOLLINS  D AA1 - L IH0 N Z\nDOLLISON  D AA1 - L IH0 - S AH0 N\nDOLLIVER  D AA1 - L IH0 - V ER0\nDOLLOFF  D AA1 - L AO2 F\nDOLLOP  D AA1 - L AH0 P\nDOLLS  D AA1 L Z\nDOLLY  D AA1 - L IY0\nDOLLY'S  D AA1 - L IY0 Z\nDOLMAN  D AA1 L - M AH0 N\nDOLNEY  D OW1 L - N IY0\nDOLOMITE  D OW1 - L AH0 - M AY2 T\nDOLOMITE'S  D OW1 - L AH0 - M AY2 T S\nDOLOMITES  D OW1 - L AH0 - M AY2 T S\nDOLORES  D AH0 - L AO1 - R IH0 S\nDOLORITA  D OW0 - L AO0 - R IY1 - T AH0\nDOLPH  D OW1 L F\nDOLPHIN  D AA1 L - F AH0 N\nDOLPHINS  D AA1 L - F AH0 N Z\nDOLPHINS'  D AA1 L - F AH0 N Z\nDOLS  D AA1 L Z\nDOLSON  D OW1 L - S AH0 N\nDOLTON  D OW1 L - T AH0 N\nDOM  D AA1 M\nDOMAGALA  D OW0 - M AA0 - G AA1 - L AH0\nDOMAGALSKI  D AH0 - M AH0 - G AA1 L S - K IY0\nDOMAIN  D OW0 - M EY1 N\nDOMAINE  D OW0 - M EY1 N\nDOMAINS  D OW0 - M EY1 N Z\nDOMAN  D UW1 - M AH0 N\nDOMANGUE  D OW1 - M AA0 NG\nDOMANICO  D OW0 - M AA0 - N IY1 - K OW0\nDOMANSKI  D AH0 - M AE1 N - S K IY0\nDOMAS  D OW1 - M AH0 S\nDOMBECK  D AA1 M - B EH2 K\nDOMBEK  D AA1 M - B IH0 K\nDOMBKOWSKI  D AH0 M - K AO1 F S - K IY0\nDOMBROSKI  D AH0 M - B R AW1 S - K IY0\nDOMBROSKY  D AH0 M - B R OW1 S - K IY0\nDOMBROWSKI  D AH0 M - B R AO1 F S - K IY0\nDOME  D OW1 M\nDOME'S  D OW1 M Z\nDOMECQ  D OW2 - M EH1 K\nDOMED  D OW1 M D\nDOMEIER  D AA1 - M AY0 - ER0\nDOMEK  D OW1 - M EH0 K\nDOMENECH  D AA1 - M IH0 - N IH0 K\nDOMENICI  D AH0 - M EH1 - N AH0 - CH IY0\nDOMENICI'S  D AH0 - M EH1 - N AH0 - CH IY0 Z\nDOMENICI'S(2)  D OW0 - M IH1 - N IY0 - CH IY0 Z\nDOMENICI'S(3)  D OW0 - M EH1 - N IY0 - CH IY0 Z\nDOMENICI(2)  D OW0 - M IH1 - N IY0 - CH IY0\nDOMENICI(3)  D OW0 - M EH1 - N IY0 - CH IY0\nDOMENICK  D AA1 - M IH0 - N IH0 K\nDOMENICO  D OW0 - M EY1 - N IY0 - K OW0\nDOMENICONI  D OW0 - M EH2 - N IH0 - K OW1 - N IY0\nDOMER  D OW1 - M ER0\nDOMES  D OW1 M Z\nDOMESTIC  D AH0 - M EH1 - S T IH0 K\nDOMESTICALLY  D AH0 - M EH1 - S T IH0 K - L IY0\nDOMESTICATE  D AH0 - M EH1 - S T AH0 - K EY2 T\nDOMESTICATED  D AH0 - M EH1 - S T AH0 - K EY2 - T AH0 D\nDOMESTICATING  D AH0 - M EH1 - S T AH0 - K EY2 - T IH0 NG\nDOMESTICATION  D AH0 - M EH2 - S T AH0 - K EY1 - SH AH0 N\nDOMESTICITY  D OW2 - M EH2 - S T IH1 - S AH0 - T IY0\nDOMESTICS  D AH0 - M EH1 - S T IH0 K S\nDOMICAL  D AA1 - M AH0 - K AH0 L\nDOMICO  D OW1 - M AH0 - K OW0\nDOMIN  D OW1 - M IH0 N\nDOMINA  D OW0 - M IY1 - N AH0\nDOMINANCE  D AA1 - M AH0 - N AH0 N S\nDOMINANT  D AA1 - M AH0 - N AH0 N T\nDOMINATE  D AA1 - M AH0 - N EY2 T\nDOMINATED  D AA1 - M AH0 - N EY2 - T AH0 D\nDOMINATES  D AA1 - M AH0 - N EY2 T S\nDOMINATING  D AA1 - M AH0 - N EY2 - T IH0 NG\nDOMINATION  D AA2 - M AH0 - N EY1 - SH AH0 N\nDOMINE  D OW0 - M IY1 - N IY0\nDOMINEE  D OW1 - M IH0 - N EY2\nDOMINEER  D AA2 - M AH0 - N IH1 R\nDOMINEERING  D AA2 - M AH0 - N IH1 - R IH0 NG\nDOMINELLI  D OW2 - M IH0 - N EH1 - L IY0\nDOMINELLI'S  D OW2 - M IH0 - N EH1 - L IY0 Z\nDOMINELLI'S(2)  D AA2 - M IH0 N - EH1 - L IY0 Z\nDOMINELLI(2)  D AA2 - M IH0 - N EH1 - L IY0\nDOMINEY  D AA1 - M IH0 - N IY0\nDOMINGO  D OW0 - M IH1 NG - G OW0\nDOMINGO(2)  D AH0 - M IH1 NG - G OW0\nDOMINGOS  D AH0 - M IH1 NG - G OW0 Z\nDOMINGUE  D OW1 - M IH0 NG\nDOMINGUES  D OW0 - M IY1 N - G EH0 S\nDOMINGUEZ  D AH0 - M IH1 - NG IH0 Z\nDOMINI  D AA1 - M IH0 - N IY0\nDOMINIAK  D AH0 - M IH1 - N IY0 - AE0 K\nDOMINIC  D AA1 - M AH0 - N IH0 K\nDOMINIC'S  D AA1 - M AH0 - N IH0 K S\nDOMINICA  D AH0 - M IH1 - N IH0 - K AH0\nDOMINICAN  D AH0 - M IH1 - N AH0 - K AH0 N\nDOMINICANA  D OW0 - M IH2 - N IH0 - K AA1 - N AH0\nDOMINICANA(2)  D OW0 - M IH2 - N IH0 - K AE1 - N AH0\nDOMINICANS  D OW0 - M IH1 - N IH0 - K AH0 N Z\nDOMINICI  D OW0 - M IY0 - N IY1 - CH IY0\nDOMINICK  D AA1 - M AH0 - N IH0 K\nDOMINIK  D AH0 - M IH1 - N IH0 K\nDOMINION  D AH0 - M IH1 - N Y AH0 N\nDOMINION'S  D AH0 - M IH1 - N Y AH0 N Z\nDOMINIQUE  D AO0 - M IH0 - N IY1 K\nDOMINO  D AA1 - M AH0 - N OW2\nDOMINO'S  D AA1 - M IH0 - N OW2 Z\nDOMINO(2)  D AA1 - M IH0 - N OW2\nDOMINOES  D AA1 - M AH0 - N OW2 Z\nDOMINOS  D AA1 - M IH0 - N OW2 Z\nDOMINQUEZ  D OW0 - M IY1 N - K W EH0 Z\nDOMINSKI  D AH0 - M IH1 N - S K IY0\nDOMINUS  D OW0 - M IY1 - N AH0 S\nDOMINY  D AH0 - M AY1 - N IY0\nDOMKE  D AA1 M K\nDOMMER  D AA1 - M ER0\nDOMMIE  D AA1 - M IY0\nDOMOLING  D AA1 - M AO0 - L IH0 NG\nDOMTAR  D AA1 M - T ER0\nDOMTAR'S  D AA1 M - T ER0 Z\nDOMZALSKI  D AH0 M - Z AA1 L S - K IY0\nDON  D AA1 N\nDON'S  D AA1 N Z\nDON'T  D OW1 N T\nDON'T(2)  D OW1 N\nDON'TS  D OW1 N T S\nDON'TS(2)  D OW1 N S\nDONA  D OW1 - N AH0\nDONADIO  D OW0 - N AA1 - D IY0 - OW0\nDONAGHEY  D AA1 - N AH0 G - HH IY0\nDONAGHUE  D AA1 - N AH0 - HH UW0\nDONAGHY  D AA1 - N AH0 G - HH IY0\nDONAHEY  D AA1 - N AH0 - HH IY0\nDONAHO  D OW0 - N AA1 - HH OW0\nDONAHOE  D AA1 - N AH0 - HH OW2\nDONAHOO  D AA1 - N AH0 - HH UW2\nDONAHUE  D AA1 - N AH0 - HH Y UW2\nDONAHUE(2)  D AA1 - N AH0 - Y UW2\nDONAIS  D AH0 - N EY1\nDONALD  D AA1 - N AH0 L D\nDONALD'S  D AA1 - N AH0 L D Z\nDONALDA  D OW0 - N AA1 L - D AH0\nDONALDO  D OW0 - N AA1 L - D OW0\nDONALDO'S  D OW0 - N AA1 L - D OW0 Z\nDONALDSON  D AA1 - N AH0 L D - S AH0 N\nDONALDSON'S  D AA1 - N AH0 L D - S AH0 N Z\nDONALDSONS  D AA1 - N AH0 L D - S AH0 N Z\nDONALSON  D AA1 - N AH0 L - S AH0 N\nDONAPRIA  D AH0 - N AE1 - P R IY0 - AH0\nDONAR  D AA1 - N ER0\nDONAT  D OW1 - N AH0 T\nDONATA  D AH0 - N AA1 - T AH0\nDONATE  D OW1 - N EY2 T\nDONATED  D OW1 - N EY2 - T AH0 D\nDONATED(2)  D OW1 - N EY2 - T IH0 D\nDONATELLI  D OW0 - N AA0 - T EH1 - L IY0\nDONATES  D OW1 - N EY2 T S\nDONATH  D AA1 - N AH0 TH\nDONATHAN  D AA1 - N AH0 - TH AH0 N\nDONATI  D OW0 - N AA1 - T IY0\nDONATING  D OW1 - N EY2 - T IH0 NG\nDONATION  D OW0 - N EY1 - SH AH0 N\nDONATIONS  D OW0 - N EY1 - SH AH0 N Z\nDONATISTS  D AA1 - N AH0 - T AH0 S T S\nDONATISTS(2)  D AA1 - N AH0 - T AH0 S S\nDONATISTS(3)  D AA1 - N AH0 - T AH0 S\nDONATO  D AH0 - N AA1 - T OW0\nDONAVAN  D AA1 - N AH0 - V AE2 N\nDONAWAY  D AA1 N - AH0 - W EY2\nDONDE  D AA1 N D\nDONDERO  D OW0 N - D EH1 - R OW0\nDONDLINGER  D AA1 N - D AH0 L - IH0 - NG ER0\nDONDLINGER(2)  D AA1 N D - L IH0 - NG ER0\nDONE  D AH1 N\nDONEGAN  D AA1 - N IH0 - G AE0 N\nDONEHOO  D OW0 - N EY1 - HH UW0\nDONELAN  D AA1 - N IH0 - L AE0 N\nDONELLA  D OW0 - N EH1 - L AH0\nDONELSON  D AA1 - N IH0 L - S AH0 N\nDONER  D AO1 - N ER0\nDONES  D AH1 N Z\nDONEY  D AA1 - N IY0\nDONG  D AO1 NG\nDONG(2)  D AO1 NG G\nDONGEN  D AO1 NG - G AH0 N\nDONGMEI  D OW1 NG - M AY1\nDONHAM  D AA1 N - HH AH0 M\nDONIA  D OW1 - N IY0 - AH0\nDONICA  D AA1 - N IH0 - K AH0\nDONIGAN  D AA1 - N IH0 - G AH0 N\nDONIGER  D AA1 - N IH0 - G ER0\nDONILON  D AA1 - N AH0 - L AA0 N\nDONIS  D OW1 - N IH0 S\nDONIZETTI  D AA2 - N AH0 - Z EH1 - T IY0\nDONIZETTI'S  D AA2 - N IH0 - Z EH1 - T IY0 Z\nDONKEY  D AA1 NG - K IY0\nDONKEY(2)  D AO1 NG - K IY0\nDONKEYS  D AA1 NG - K IY0 Z\nDONLAN  D AA1 N - L AH0 N\nDONLEY  D AA1 N - L IY0\nDONLIN  D AA1 N - L IH0 N\nDONLON  D AA1 N - L AH0 N\nDONMOYER  D AA1 N - M OY2 - ER0\nDONN  D AA1 N\nDONNA  D AA1 - N AH0\nDONNA'S  D AA1 - N AH0 Z\nDONNAN  D AA1 - N AH0 N\nDONNAS  D AA1 - N AH0 Z\nDONNAY  D AA1 - N EY0\nDONNE  D AH1 N\nDONNED  D AA1 N D\nDONNELL  D AA1 - N IH0 L\nDONNELLAN  D AA1 - N IH0 - L AE0 N\nDONNELLEY  D AA1 - N AH0 - L IY0\nDONNELLEY'S  D AA1 N - AH0 - L IY0 Z\nDONNELLEY'S(2)  D AA1 N - EH0 - L IY0 Z\nDONNELLEY(2)  D AA1 - N EH0 - L IY0\nDONNELLY  D AA1 - N AH0 - L IY0\nDONNELLY'S  D AA1 N - AH0 - L IY0 Z\nDONNELLY'S(2)  D AA1 N - EH0 - L IY0 Z\nDONNELLY(2)  D AA1 - N EH0 - L IY0\nDONNER  D AA1 - N ER0\nDONNIE  D AA1 - N IY0\nDONNING  D AA1 - N IH0 NG\nDONNY  D AA1 - N IY0\nDONNYBROOK  D AA1 - N IY0 - B R UH2 K\nDONOFRIO  D OW0 - N OW1 - F R IY0 - OW0\nDONOGHUE  D AA1 - N AH0 - HH Y UW0\nDONOGHUE'S  D AA1 - N AH0 - HH Y UW0 Z\nDONOGHUE'S(2)  D AA1 - N AH0 - Y UW0 Z\nDONOGHUE(2)  D AA1 - N AH0 - Y UW0\nDONOHO  D AA1 - N AH0 - HH OW0\nDONOHOE  D AA1 - N AH0 - HH OW0\nDONOHOO  D AA1 - N AH0 - HH UW2\nDONOHUE  D AA1 - N AH0 - HH Y UW2\nDONOHUE'S  D AA1 - N AH0 - HH Y UW2 Z\nDONOHUE'S(2)  D AA1 - N AH0 - Y UW2 Z\nDONOHUE(2)  D AA1 - N AH0 - Y UW0\nDONOR  D OW1 - N ER0\nDONOR'S  D OW1 - N ER0 Z\nDONORS  D OW1 - N ER0 Z\nDONORS'  D OW1 - N ER0 Z\nDONOVAN  D AA1 - N AH0 - V AH0 N\nDONOVAN'S  D AA1 - N AH0 - V AH0 N Z\nDONS  D AA1 N Z\nDONSBACH  D AA1 N Z - B AA2 K\nDONUT  D OW1 - N AH2 T\nDONUTS  D OW1 - N AH2 T S\nDONUTS'  D OW1 - N AH2 T S\nDONVAN  D AA1 N - V AH0 N\nDONVAN'S  D AA1 N - V AH0 N Z\nDONZE  D AA1 N Z\nDOO  D UW1\nDOODAD  D UW1 - D AE2 D\nDOODADS  D UW1 - D AE2 D Z\nDOODLE  D UW1 - D AH0 L\nDOODLES  D UW1 - D AH0 L Z\nDOODY  D UW1 - D IY0\nDOOGIE  D UW1 - G IY0\nDOOLAN  D UW1 - L AH0 N\nDOOLEN  JH UW1 - L AH0 N\nDOOLEY  D UW1 - L IY0\nDOOLIN  D UW1 - L IH0 N\nDOOLING  D UW1 - L IH0 NG\nDOOLITTLE  D UW1 - L IH2 - T AH0 L\nDOOM  D UW1 M\nDOOMED  D UW1 M D\nDOOMING  D UW1 - M IH0 NG\nDOOMS  D UW1 M Z\nDOOMSAYER  D UW2 M - S EY1 - ER0\nDOOMSAYERS  D UW2 M - S EY1 - ER0 Z\nDOOMSAYING  D UW2 M - S EY1 - IH0 NG\nDOOMSDAY  D UW1 M Z - D EY2\nDOONAN  D UW1 - N AH0 N\nDOONER  D UW1 - N ER0\nDOONESBURY  D UW1 N Z - B EH2 - R IY0\nDOOR  D AO1 R\nDOOR'S  D AO1 R Z\nDOORBELL  D AO1 R - B EH2 L\nDOORDARSHAN  D UW2 R - D AA1 R - SH AH0 N\nDOORENBOS  D UH1 - R EH0 N - B OW1 S\nDOORKEEPER  D AO1 R - K IY2 - P ER0\nDOORKNOB  D UW1 R - N AA0 B\nDOORKNOBS  D UW1 R - N AA0 B Z\nDOORMAN  D AO1 R - M AE2 N\nDOORMAT  D AO1 R - M AE2 T\nDOORMATS  D AO1 R - M AE2 T S\nDOORN  D AO1 R N\nDOORNAIL  D AO1 R - N EY2 L\nDOORNBOS  D AO1 R N - B OW0 Z\nDOORS  D AO1 R Z\nDOORSILL  D AO1 R - S IH0 L\nDOORSTEP  D AO1 R - S T EH2 P\nDOORSTEPS  D AO1 R - S T EH2 P S\nDOORWAY  D AO1 R - W EY2\nDOORWAYS  D AO1 R - W EY2 Z\nDOOSE  D UW1 S\nDOOZY  D UW1 - Z IY0\nDOPA  D OW1 - P AH0\nDOPAMINE  D AA1 - P AH0 - M AY2 N\nDOPE  D OW1 P\nDOPED  D OW1 P T\nDOPEY  D OW1 - P IY0\nDOPP  D AA1 P\nDOPPLER  D AA1 P - L ER0\nDOPSON  D AA1 P - S AH0 N\nDORA  D AO1 - R AH0\nDORADO  D AO0 - R AA1 - D OW0\nDORAIS  D ER0 - EY1\nDORAL  D AO0 - R AE1 L\nDORALIN  D AO0 - R AA0 - L IY1 N\nDORALYNNE  D AO1 - R AH0 - L AY0 N\nDORAN  D AO0 - R AE1 N\nDORAVILLE  D AO1 - R AH0 - V IH0 L\nDORAZIO  D AO0 - R AA1 - Z IY0 - OW0\nDORAZIO(2)  D AO0 - R EY1 - Z IY0 - OW0\nDORCAS  D AO1 R - K AH0 S\nDORCH  D AO1 R K\nDORCHESTER  D AO1 R - CH EH2 - S T ER0\nDORDIES  D AO1 R - D IY0 Z\nDORE  D AO1 R\nDOREA  D AO1 - R IY0 - AH0\nDOREEN  D AO0 - R IY1 N\nDORELIA  D AO0 - R EH1 - L IY0 - AH0\nDOREMUS  D AO1 - R IH0 - M IH0 S\nDOREN  D AO1 - R AH0 N\nDORENA  D AO1 - R IH0 - N AH0\nDORENE  D AO1 - R IY0 N\nDORER  D AO1 - R ER0\nDORETTE  D ER0 - EH1 T\nDORETTI  D AO0 - R EH1 - T IY0\nDOREY  D AO1 - R IY0\nDORF  D AO1 R F\nDORFF  D AO1 R F\nDORFMAN  D AO1 R F - M AH0 N\nDORGAN  D AO1 R - G AH0 N\nDORGAN'S  D AO1 R - G AH0 N Z\nDORI  D AO1 - R IY0\nDORIA  D AO1 - R IY0 - AH0\nDORIAN  D AO1 - R IY0 - AH0 N\nDORIANS  D AO1 - R IY0 - AH0 N Z\nDORIC  D AO1 - R IH0 K\nDORICE  D AO1 - R IH0 S\nDORIE  D AO1 - R IY0\nDORIN  D AO1 - R IH0 N\nDORINDA  D AO0 - R IY1 N - D AH0\nDORINE  D AO0 - R IY1 - N IY0\nDORING  D AO1 - R IH0 NG\nDORIO  D AO1 - R IY0 - OW0\nDORION  D AO0 - R IY0 - AO1 N\nDORIS  D AO1 - R AH0 S\nDORIS(2)  D AO1 - R IH0 S\nDORIS(3)  D AA1 - R AH0 S\nDORIS(4)  D AA1 - R IH0 S\nDORISE  D AO1 - R AY0 Z\nDORITOS  D AO2 - R IY1 - T OW0 Z\nDORITY  D AO1 - R IH0 - T IY0\nDORKO  D AO1 R - K OW0\nDORLAND  D AO1 R - L AH0 N D\nDORM  D AO1 R M\nDORMAN  D AO1 R - M AH0 N\nDORMANCY  D AO1 R - M AH0 N - S IY0\nDORMANT  D AO1 R - M AH0 N T\nDORMER  D AO1 R - M ER0\nDORMINEY  D AO1 R - M IH0 - N IY0\nDORMITORIES  D AO1 R - M AH0 - T AO2 - R IY0 Z\nDORMITORY  D AO1 R - M AH0 - T AO2 - R IY0\nDORMOUSE  D AO1 R - M AW2 S\nDORMS  D AO1 R M Z\nDORN  D AO1 R N\nDORNAK  D AO1 R - N AH0 K\nDORNAM  D AO1 R - N AH0 M\nDORNAN  D AO1 R - N IH0 N\nDORNAN'S  D AO1 R - N IH0 N Z\nDORNBUSCH  D AO1 R N - B UH0 SH\nDORNBUSH  D AO1 R N - B UH0 SH\nDORNER  D AO1 R - N ER0\nDORNEY  D AO1 R - N IY0\nDORNFELD  D AO1 R N - F EH0 L D\nDORNHENS  D AO1 R N - HH EH0 N Z\nDORNIER  D AO2 R - N IH1 R\nDORNIN  D AO1 - N IH0 N\nDORO  D AO1 - R OW0\nDORON  D AO1 - R AH0 N\nDOROTEA  D AO1 - R AH0 - SH AH0\nDOROTEA(2)  D AO1 - R AH0 - T EY0 - AH0\nDOROTHEA  D AO2 - R AH0 - TH IY1 - AH0\nDOROTHY  D AO1 - R AH0 - TH IY0\nDOROTHY'S  D AO1 - R AH0 - TH IY0 Z\nDOROTHY'S(2)  D AO1 R - TH IY0 Z\nDOROTHY(2)  D AO1 R - TH IY0\nDOROUGH  D AO1 - R AW0\nDOROW  D AO1 - R OW0\nDORR  D AO1 R\nDORRANCE  D AO1 - R AH0 N S\nDORRELL  D AO0 - R EY1 L\nDORRIE  D AO1 - R IY0\nDORRIES  D AO1 - R IY0 Z\nDORRIS  D AO1 - R IH0 S\nDORROH  D AO1 - R OW0\nDORROUGH  D AO1 - R AW0\nDORSA  D AO1 R - S AH0\nDORSAL  D AO1 R - S AH0 L\nDORSALLY  D AO1 R - S AH0 - L IY0\nDORSCH  D AO1 R SH\nDORSET  D AO1 R - S IH0 T\nDORSETT  D AO1 R - S IH0 T\nDORSEY  D AO1 R - S IY0\nDORSI  D AO1 R - S IY0\nDORST  D AO1 R S T\nDORT  D AO1 R T\nDORTA  D AO1 R - T AH0\nDORTCH  D AO1 R CH\nDORTHEA  D AO1 R - DH IY0 - AH0\nDORTHY  D AO1 R - TH IY0\nDORTMUND  D AO1 R T - M AH0 N D\nDORTON  D AO1 R - T AH0 N\nDORVAL  D AO1 R - V AH0 L\nDORWARD  D AO1 R - W ER0 D\nDORWART  D AO1 R - W AO0 R T\nDORY  D AO1 - R IY0\nDOS  D AO1 S\nDOS(2)  D OW1 S\nDOSAGE  D OW1 - S AH0 JH\nDOSAGE(2)  D OW1 - S IH0 JH\nDOSAGES  D OW1 - S IH0 - JH IH0 Z\nDOSCH  D AO1 SH\nDOSCHER  D AO1 - SH ER0\nDOSE  D OW1 S\nDOSER  D OW1 - S ER0\nDOSES  D OW1 - S AH0 Z\nDOSES(2)  D OW1 - S IH0 Z\nDOSH  D AA1 SH\nDOSHER  D AA1 - SH ER0\nDOSHI  D OW1 - SH IY0\nDOSHIER  D AA1 - SH IY0 - ER0\nDOSIA  D OW1 - S IY0 - AH0\nDOSIE  D AA1 - S IY0\nDOSIER  D OW1 - S IY0 - ER0\nDOSIMETERS  D OW0 - S IH1 - M AH0 - T ER0 Z\nDOSING  D OW1 - S IH0 NG\nDOSKOCIL  D AO1 - S K AH0 - S IH0 L\nDOSPASOS  D OW0 - S P AE1 - S OW0 S\nDOSPASOS'  D OW0 - S P AE1 - S OW0 S\nDOSS  D AO1 S\nDOSSANTOS  D OW0 - S AA1 N - T OW0 Z\nDOSSETT  D AA1 - S IH0 T\nDOSSEY  D AA1 - S IY0\nDOSSIER  D AO2 - S Y EY1\nDOSSIER(2)  D AO2 - S IY0 - EY1\nDOSSIERS  D AO2 - S Y EY1 Z\nDOSSIERS(2)  D AO2 - S IY0 - EY1 Z\nDOST  D AA1 S T\nDOSTAL  D AA1 - S T AH0 L\nDOSTER  D AA1 - S T ER0\nDOSTIE  D AA1 - S T IY0\nDOSTOEVSKI  D AO2 - S T OW1 V - S K IY0\nDOSTOEVSKY  D AO2 - S T OW1 V - S K IY0\nDOSTOEVSKY(2)  D AO0 - S T OY0 - EH1 V S - K IY0\nDOSTOEVSKY(3)  D AO0 - S T OY0 - EH1 F S - K IY0\nDOSWELL  D AA1 S - W EH0 L\nDOT  D AA1 T\nDOTAN  D OW1 - T AH0 N\nDOTE  D OW1 T\nDOTEN  D OW1 - T AH0 N\nDOTH  D AO1 TH\nDOTHAN  D AA1 - TH AH0 N\nDOTING  D OW1 - T IH0 NG\nDOTO  D OW1 - T OW0\nDOTS  D AA1 T S\nDOTSON  D AA1 T - S AH0 N\nDOTT  D AA1 T\nDOTTAVIO  D OW0 - T AA1 - V IY0 - OW0\nDOTTED  D AA1 - T AH0 D\nDOTTED(2)  D AA1 - T IH0 D\nDOTTER  D AA1 - T ER0\nDOTTERER  D AA1 - T ER0 - ER0\nDOTTIE  D AA1 - T IY0\nDOTTING  D AA1 - T IH0 NG\nDOTTS  D AA1 T S\nDOTTY  D AA1 - T IY0\nDOTY  D OW1 - T IY0\nDOTZLER  D AA1 T S - L ER0\nDOUB  D AW1 B\nDOUBEK  D AW1 - B IH0 K\nDOUBET  D AW1 - B IH0 T\nDOUBLE  D AH1 - B AH0 L\nDOUBLE-ENTENDRE  D AH1 - B AH0 L - AA0 N - T AA1 N - D R AH0\nDOUBLED  D AH1 - B AH0 L D\nDOUBLEDAY  D AH1 - B AH0 L - D EY2\nDOUBLES  D AH1 - B AH0 L Z\nDOUBLESPEAK  D AH1 - B AH0 L - S P IY2 K\nDOUBLETHINK  D AH1 - B AH0 L - TH IH2 NG K\nDOUBLETREE  D AH1 - B AH0 L - T R IY2\nDOUBLING  D AH1 - B AH0 L - IH0 NG\nDOUBLING(2)  D AH1 - B L IH0 NG\nDOUBLY  D AH1 - B L IY0\nDOUBRAVA  D AW1 - B R AH0 - V AH0\nDOUBT  D AW1 T\nDOUBTED  D AW1 - T IH0 D\nDOUBTER  D AW1 - T ER0\nDOUBTERS  D AW1 - T ER0 Z\nDOUBTFIRE  D AW1 T - F AY1 - ER0\nDOUBTFIRE'S  D AW1 T - F AY1 - ER0 Z\nDOUBTFIRES  D AW1 T - F AY1 - ER0 Z\nDOUBTFUL  D AW1 T - F AH0 L\nDOUBTING  D AW1 - T IH0 NG\nDOUBTLESS  D AW1 T - L AH0 S\nDOUBTS  D AW1 T S\nDOUCET  D UW0 - S EH1 T\nDOUCETTE  D UW1 - S EH1 T\nDOUD  D AW1 D\nDOUDNA  D AW1 D - N AH0\nDOUDS  D AW1 D Z\nDOUG  D AH1 G\nDOUG'S  D AH1 G Z\nDOUGAL  D UW1 - G AH0 L\nDOUGALL  D AW1 - G AH0 L\nDOUGALL(2)  D UW1 - G AH0 L\nDOUGAN  D AW1 - G AH0 N\nDOUGAN(2)  D UW1 - G AH0 N\nDOUGANS  D AW1 - G AH0 N\nDOUGANS(2)  D UW1 - G AH0 N\nDOUGENS  D AW1 - G AH0 N Z\nDOUGENS(2)  D UW1 - G AH0 N Z\nDOUGH  D OW1\nDOUGHBOY  D OW1 - B OY2\nDOUGHER  D OW1 - ER0\nDOUGHERTY  D OW1 - ER0 - T IY0\nDOUGHERTY(2)  D AA1 - G ER0 - T IY0\nDOUGHMAN  D OW1 - M AH0 N\nDOUGHNUT  D OW1 - N AH2 T\nDOUGHNUTS  D OW1 - N AH2 T S\nDOUGHTEN  D AO1 - T AH0 N\nDOUGHTIE  D AO1 - T IY0\nDOUGHTY  D AO1 - T IY0\nDOUGHY  D OW1 - IY0\nDOUGIE  D UW1 - G IY0\nDOUGIE'S  D UW1 - G IY0 Z\nDOUGL  D UW1 - G AH0 L\nDOUGLAS  D AH1 G - L AH0 S\nDOUGLAS'  D AH1 G - L AH0 S\nDOUGLAS'S  D AH1 G - L AH0 - S IH0 Z\nDOUGLASS  D AH1 G - L AH0 - S IH0 Z\nDOUKAS  D AW1 - K AH0 Z\nDOULTON  D OW1 L - T AH0 N\nDOUMA  D OW1 - M AH0\nDOUPE  D UW1 P\nDOUR  D AW1 - ER0\nDOUR(2)  D AW1 R\nDOUSE  D AW1 S\nDOUSED  D AW1 S T\nDOUSING  D AW1 - S IH0 NG\nDOUTHAT  D AW1 - TH AH0 T\nDOUTHETT  D AW1 - TH IH0 T\nDOUTHIT  D UW0 - TH IH1 T\nDOUTHITT  D UW0 - TH IH1 T\nDOUTT  D AW1 T\nDOUTY  D AW1 - T IY0\nDOUVILLE  D UW0 - V IH1 L\nDOUWE  D UW1\nDOV  D AA1 V\nDOVE  D AH1 V\nDOVE(2)  D OW1 V\nDOVEL  D OW0 - V EH1 L\nDOVER  D OW1 - V ER0\nDOVER'S  D OW1 - V ER0 Z\nDOVERSPIKE  D AH0 - V ER1 - S P IH0 K\nDOVES  D AH1 V Z\nDOVETAIL  D AH1 V - T EY2 L\nDOVETAILED  D AH1 V - T EY2 L D\nDOVETAILS  D AH1 V - T EY2 L Z\nDOVEY  D AH0 - V EY1\nDOVIDIO  D OW0 - V IY1 - D IY0 - OW0\nDOVISH  D OW1 - V IH0 SH\nDOVISH(2)  D AH1 - V IH0 SH\nDOW  D AW1\nDOW'S  D AW1 Z\nDOWAGER  D AW1 - AH0 - JH ER0\nDOWD  D AW1 D\nDOWDA  D AW1 - D AH0\nDOWDALL  D AW1 - D AH0 L\nDOWDELL  D AW1 - D AH0 L\nDOWDEN  D AW1 - D AH0 N\nDOWDING  D AW1 - D IH0 NG\nDOWDLE  D AW1 - D AH0 L\nDOWDS  D AW1 D Z\nDOWDY  D AW1 - D IY0\nDOWE  D AW1\nDOWEL  D AW1 - AH0 L\nDOWELL  D AA1 - W EH0 L\nDOWELS  D AW1 - AH0 L Z\nDOWEN  D AW1 - AH0 N\nDOWER  D AW1 R\nDOWERS  D AW1 R Z\nDOWIE  D AW1 - IY0\nDOWIS  D AW1 - IH0 S\nDOWLAND  D AW1 - L AH0 N D\nDOWLEN  D AW1 - L AH0 N\nDOWLER  D AW1 - L ER0\nDOWLESS  D AW1 - L AH0 S\nDOWLING  D AW1 - L IH0 NG\nDOWN  D AW1 N\nDOWN'S  D AW1 N Z\nDOWNARD  D AW1 - N ER0 D\nDOWNBEAT  D AW0 N - B IY1 T\nDOWNCAST  D AW1 N - K AE2 S T\nDOWNDRAFT  D AW1 N - D R AE2 F T\nDOWNE  D AW1 N\nDOWNED  D AW1 N D\nDOWNEN  D AW1 - N AH0 N\nDOWNER  D AW1 - N ER0\nDOWNERS  D AW1 - N ER0 Z\nDOWNES  D AW1 N Z\nDOWNES'S  D AW1 N - Z IH0 Z\nDOWNEY  D AW1 - N IY0\nDOWNEY'S  D AW1 - N IY0 Z\nDOWNFALL  D AW1 N - F AO2 L\nDOWNGRADE  D AW1 N - G R EY1 D\nDOWNGRADED  D AW1 N - G R EY1 - D AH0 D\nDOWNGRADES  D AW1 N - G R EY1 D Z\nDOWNGRADING  D AW1 N - G R EY1 - D IH0 NG\nDOWNGRADINGS  D AW1 N - G R EY2 - D IH0 NG Z\nDOWNHAM  D AW1 N - HH AH0 M\nDOWNHILL  D AW1 N - HH IH1 L\nDOWNIE  D AW1 - N IY0\nDOWNING  D AW1 - N IH0 NG\nDOWNINGTOWN  D AW1 - N IH0 NG - T AW2 N\nDOWNLOAD  D AW1 N - L OW2 D\nDOWNLOADED  D AW1 N - L OW2 - D IH0 D\nDOWNLOADING  D AW1 N - L OW2 - D IH0 NG\nDOWNPAYMENT  D AW2 N - P EY1 - M AH0 N T\nDOWNPLAY  D AW1 N - P L EY2\nDOWNPLAYED  D AW1 N - P L EY2 D\nDOWNPLAYING  D AW1 N - P L EY2 - IH0 NG\nDOWNPLAYS  D AW1 N - P L EY2 Z\nDOWNPOUR  D AW1 N - P AO0 R\nDOWNPOURS  D AW1 N - P AO2 R Z\nDOWNRANGE  D AW1 N - R EY1 N JH\nDOWNRIGHT  D AW1 N - R AY2 T\nDOWNRIVER  D AW2 N - R IH1 - V ER0\nDOWNS  D AW1 N Z\nDOWNSCALE  D AW1 N - S K EY2 L\nDOWNSIDE  D AW1 N - S AY2 D\nDOWNSIDES  D AW1 N - S AY2 D Z\nDOWNSIZE  D AW1 N - S AY2 Z\nDOWNSIZED  D AW1 N - S AY2 Z D\nDOWNSIZING  D AW1 N - S AY2 - Z IH0 NG\nDOWNSIZINGS  D AW1 N - S AY2 - Z IH0 NG Z\nDOWNSTAGE  D AW1 N - S T EY2 JH\nDOWNSTAIRS  D AW1 N - S T EH1 R Z\nDOWNSTATE  D AW1 N - S T EY2 T\nDOWNSTREAM  D AW1 N - S T R IY1 M\nDOWNSWING  D AW1 N - S W IH2 NG\nDOWNTIME  D AW1 N - T AY2 M\nDOWNTOWN  D AW1 N - T AW1 N\nDOWNTOWNS  D AW1 N - T AW1 N Z\nDOWNTREND  D AW1 N - T R EH2 N D\nDOWNTRODDEN  D AW2 N - T R AA1 - D AH0 N\nDOWNTURN  D AW1 N - T ER2 N\nDOWNTURNS  D AW1 N - T ER2 N Z\nDOWNUM  D AW1 - N AH0 M\nDOWNWARD  D AW1 N - W ER0 D\nDOWNWARDLY  D AW1 N - W ER0 D - L IY0\nDOWNWARDS  D AW1 N - W ER0 D Z\nDOWNWIND  D AW0 N - W IH1 N D\nDOWNY  D AW1 - N IY0\nDOWRY  D AW1 - R IY0\nDOWSE  D AW1 S\nDOWSING  D AW1 - S IH0 NG\nDOWSMAN  D AW1 Z - M AH0 N\nDOWTY  D AW1 - T IY0\nDOXEY  D AA1 K - S IY0\nDOXIE  D AA1 K - S IY0\nDOXOLOGIES  D AA0 K - S AA1 - L AH0 - JH IY0 Z\nDOXOLOGY  D AA0 K - S AA1 - L AH0 - JH IY0\nDOXTATER  D AA1 K - S T EY0 - T ER0\nDOXY  D AA1 K - S IY0\nDOYAL  D OY0 - AA1 L\nDOYEL  D OY1 - AH0 L\nDOYEN  D OY1 - IH0 N\nDOYLE  D OY1 L\nDOYLE'S  D OY1 L Z\nDOYON  D OY1 - AH0 N\nDOZE  D OW1 Z\nDOZED  D OW1 Z D\nDOZEN  D AH1 - Z AH0 N\nDOZENS  D AH1 - Z AH0 N Z\nDOZES  D OW1 - Z IH0 Z\nDOZIER  D OW1 - Z IY0 - ER0\nDOZING  D OW1 - Z IH0 NG\nDQALPHA  D IY1 - K Y UW1 - AE1 L - F AH0\nDR  D R AY1 V\nDR(2)  D AA1 K - T ER0\nDR.  D R AY1 V\nDR.(2)  D AA1 K - T ER0\nDRAB  D R AE1 B\nDRABBED  D R AE1 B D\nDRABBLE  D R AE1 - B AH0 L\nDRABEK  D R AE1 - B IH0 K\nDRABENSTOTT  D R AH0 - B EH1 N - S T AH0 T\nDRABIK  D R AA1 - B IH0 K\nDRABINSKY  D R AH0 - B IH1 N - S K IY0\nDRABKIN  D R AE1 B - K IH2 N\nDRABS  D R AE1 B Z\nDRACE  D R EY1 S\nDRACH  D R AE1 CH\nDRACHENBERG  D R AE1 - K AH0 N - B ER0 G\nDRACHMA  D R AE1 K - M AH0\nDRACHMAS  D R AA1 K - M AH0 Z\nDRACKETT  D R AE1 - K IH0 T\nDRACO  D R EY1 - K OW0\nDRACO(2)  D R AE1 - K OW0\nDRACONIAN  D R EY0 - K OW1 - N IY0 - AH0 N\nDRACONIAN(2)  D R AH0 - K OW1 - N IY0 - AH0 N\nDRACULA  D R AE1 - K Y UW0 - L AH0\nDRAEGER  D R EH1 - G ER0\nDRAFFEN  D R AE1 - F AH0 N\nDRAFT  D R AE1 F T\nDRAFT'S  D R AE1 F T S\nDRAFTED  D R AE1 F - T IH0 D\nDRAFTEE  D R AE1 F - T IY1\nDRAFTEES  D R AE1 F - T IY1 Z\nDRAFTER  D R AE1 F - T ER0\nDRAFTERS  D R AE1 F - T ER0 Z\nDRAFTING  D R AE1 F - T IH0 NG\nDRAFTS  D R AE1 F T S\nDRAFTSMAN  D R AE1 F T S - M AH0 N\nDRAFTSMANSHIP  D R AE1 F T S - M AH0 N - SH IH2 P\nDRAFTSMEN  D R AE1 F T S - M AH0 N\nDRAFTY  D R AE1 F - T IY0\nDRAG  D R AE1 G\nDRAGAN  D R AA1 - G AH0 N\nDRAGE  D R EY1 JH\nDRAGER  D R EY1 - G ER0\nDRAGGED  D R AE1 G D\nDRAGGING  D R AE1 - G IH0 NG\nDRAGGY  D R AE1 - G IY0\nDRAGLINE  D R AE1 - G L AY2 N\nDRAGNET  D R AE1 G - N EH2 T\nDRAGNETS  D R AE1 G - N EH2 T S\nDRAGO  D R AA1 - G OW0\nDRAGON  D R AE1 - G AH0 N\nDRAGON'S  D R AE1 - G AH0 N Z\nDRAGONAIR  D R AE1 - G AH0 - N EH2 R\nDRAGONE  D R AH0 - G OW1 N\nDRAGONHEAD  D R AE1 - G AH0 N - HH EH2 D\nDRAGONHEART  D R AE1 - G AH0 N - HH AA2 R T\nDRAGONS  D R AE1 - G AH0 N Z\nDRAGOO  D R AA1 - G UW0\nDRAGOVICH  D R AE1 - G AH0 - V IH0 CH\nDRAGS  D R AE1 G Z\nDRAHEIM  D R AE1 - HH AY0 M\nDRAHOS  D R EY1 - HH OW0 Z\nDRAHUSCHAK  D R AE1 - HH AH0 - SH AE0 K\nDRAHUSCHAK(2)  D R AH0 - HH UW1 - SH AH0 K\nDRAIN  D R EY1 N\nDRAINAGE  D R EY1 - N AH0 JH\nDRAINAGE(2)  D R EY1 - N IH0 JH\nDRAINE  D R EY1 N\nDRAINED  D R EY1 N D\nDRAINER  D R EY1 - N ER0\nDRAINERS  D R EY1 - N ER0 Z\nDRAINING  D R EY1 - N IH0 NG\nDRAINS  D R EY1 N Z\nDRAKE  D R EY1 K\nDRAKEFORD  D R AE1 K - F AO0 R D\nDRAKES  D R EY1 K S\nDRAKOS  D R EY1 - K OW0 Z\nDRALLE  D R EY1 L\nDRAM  D R AE1 M\nDRAM(2)  D IY1 - R AE2 M\nDRAMA  D R AA1 - M AH0\nDRAMAMINE  D R AE1 - M AH0 - M IY2 N\nDRAMAS  D R AA1 - M AH0 Z\nDRAMATIC  D R AH0 - M AE1 - T IH0 K\nDRAMATICALLY  D R AH0 - M AE1 - T IH0 K - L IY0\nDRAMATICALLY(2)  D R AH0 - M AE1 - T IH0 - K AH0 - L IY0\nDRAMATIST  D R AA1 - M AH0 - T IH0 S T\nDRAMATIZATION  D R AE2 - M AH0 - T AH0 - Z EY1 - SH AH0 N\nDRAMATIZATIONS  D R AE2 - M AH0 - T AH0 - Z EY1 - SH AH0 N Z\nDRAMATIZE  D R AA1 - M AH0 - T AY2 Z\nDRAMATIZE(2)  D R AE1 - M AH0 - T AY2 Z\nDRAMATIZED  D R AE1 - M AH0 - T AY2 Z D\nDRAMATIZES  D R AE1 - M AH0 - T AY2 - Z IH0 Z\nDRAMATIZING  D R AE1 - M AH0 - T AY2 - Z IH0 NG\nDRAMS  D R AE1 M Z\nDRAMS(2)  D IY1 - R AE2 M Z\nDRANE  D R EY1 N\nDRANEY  D R EY1 - N IY0\nDRANG  D R AE1 NG\nDRANK  D R AE1 NG K\nDRANSFIELD  D R AE1 N S - F IY2 L D\nDRAPE  D R EY1 P\nDRAPEAU  D R AH0 - P OW1\nDRAPED  D R EY1 P T\nDRAPER  D R EY1 - P ER0\nDRAPERIES  D R EY1 - P ER0 - IY0 Z\nDRAPERY  D R EY1 - P ER0 - IY0\nDRAPES  D R EY1 P S\nDRAPING  D R EY1 - P IH0 NG\nDRAPKIN  D R AE1 P - K IH0 N\nDRASNER  D R AE1 S - N ER0\nDRASTIC  D R AE1 - S T IH0 K\nDRASTICALLY  D R AE1 - S T IH0 K - L IY0\nDRAUGHN  D R AO1 N\nDRAUGHON  D R AO1 - AH0 N\nDRAUGHT  D R AE1 F T\nDRAUGHTS  D R AE1 F T S\nDRAUS  D R AO1 Z\nDRAVECKY  D R AH0 - V EH1 - K IY0\nDRAVES  D R EY1 V Z\nDRAVIS  D R AE1 - V IH0 S\nDRAVO  D R AE1 - V OW0\nDRAVO'S  D R AE1 - V OW0 Z\nDRAW  D R AO1\nDRAWBACK  D R AO1 - B AE2 K\nDRAWBACKS  D R AO1 - B AE2 K S\nDRAWBAUGH  D R AO1 - B AO2\nDRAWBRIDGE  D R AO1 - B R IH2 JH\nDRAWDOWN  D R AO1 - D AW2 N\nDRAWDOWNS  D R AO1 - D AW2 N Z\nDRAWDY  D R AO1 - D IY0\nDRAWER  D R AO1 R\nDRAWERS  D R AO1 R Z\nDRAWING  D R AO1 - IH0 NG\nDRAWINGS  D R AO1 - IH0 NG Z\nDRAWL  D R AO1 L\nDRAWLED  D R AO1 L D\nDRAWLS  D R AO1 L Z\nDRAWN  D R AO1 N\nDRAWS  D R AO1 Z\nDRAY  D R EY1\nDRAYER  D R EY1 - ER0\nDRAYTON  D R EY1 - T AH0 N\nDRAYTON'S  D R EY1 - T AH0 N Z\nDREAD  D R EH1 D\nDREADED  D R EH1 - D IH0 D\nDREADFUL  D R EH1 D - F AH0 L\nDREADFULLY  D R EH1 D - F AH0 - L IY0\nDREADING  D R EH1 - D IH0 NG\nDREADNOUGHT  D R EH1 D - N AO2 T\nDREADS  D R EH1 D Z\nDREAM  D R IY1 M\nDREAMED  D R IY1 M D\nDREAMER  D R IY1 - M ER0\nDREAMERS  D R IY1 - M ER0 Z\nDREAMING  D R IY1 - M IH0 NG\nDREAMLAND  D R IY1 M - L AE2 N D\nDREAMLIKE  D R IY1 M - L AY2 K\nDREAMS  D R IY1 M Z\nDREAMT  D R EH1 M T\nDREAMWORKS  D R IY1 M - W ER2 K S\nDREAMWORKS'  D R IY1 M - W ER2 K S\nDREAMWORLD  D R IY1 M - W ER2 L D\nDREAMY  D R IY1 - M IY0\nDREARINESS  D R IY1 - R IY0 - N AH0 S\nDREARY  D R IH1 - R IY0\nDREBSKY  D R EH1 B S - K IY0\nDRECHSEL  D R EH1 K - S AH0 L\nDRECHSLER  D R EH1 K - S AH0 - L ER0\nDRECHSLER(2)  D R EH1 K S - L ER0\nDRED  D R EH1 D\nDREDD  D R EH1 D\nDREDGE  D R EH1 JH\nDREDGED  D R EH1 JH D\nDREDGES  D R EH1 - JH AH0 Z\nDREDGES(2)  D R EH1 - JH IH0 Z\nDREDGING  D R EH1 - JH IH0 NG\nDREES  D R IY1 Z\nDREESE  D R IY1 Z\nDREESSEN  D R IY1 - S AH0 N\nDREGER  D R EH1 - G ER0\nDREGS  D R EH1 G Z\nDREHER  D R EH1 R\nDREIBELBIS  D R AY1 - B IH0 L - B IH0 S\nDREIER  D R AY1 - ER0\nDREIGHTON  D R AY1 - T IH0 N\nDREILING  D R AY1 - L IH0 NG\nDREIS  D R IY1 Z\nDREISBACH  D R AY1 S - B AA2 K\nDREMAN  D R IY1 - M AH0 N\nDRENCH  D R EH1 N CH\nDRENCHED  D R EH1 N CH T\nDRENCHING  D R EH1 N - CH IH0 NG\nDRENNAN  D R EH1 - N AH0 N\nDRENNEN  D R EH1 - N AH0 N\nDRENNING  D R EH1 - N IH0 NG\nDRENNON  D R EH1 - N AH0 N\nDRENTH  D R EH1 N TH\nDREPUNG  D R EY1 - P AH2 NG\nDREPUNG(2)  D R EY2 - P AO1 NG\nDRESBACH  D R EH1 S - B AA2 K\nDRESCH  D R EH1 SH\nDRESCHER  D R EH1 - SH ER0\nDRESDEN  D R EH1 Z - D IH0 N\nDRESDNER  D R EH1 Z D - N ER0\nDRESDNER'S  D R EH1 Z D - N ER0 Z\nDRESEN  D R IY1 - Z AH0 N\nDRESHER  D R EH1 - SH ER0\nDRESNER  D R EH1 Z - N ER0\nDRESS  D R EH1 S\nDRESSAGE  D R EH0 - S AA1 ZH\nDRESSED  D R EH1 S T\nDRESSEL  D R EH1 - S AH0 L\nDRESSEN  D R EH1 - S AH0 N\nDRESSER  D R EH1 - S ER0\nDRESSER'S  D R EH1 - S ER0 Z\nDRESSERS  D R EH1 - S ER0 Z\nDRESSES  D R EH1 - S AH0 Z\nDRESSES(2)  D R EH1 - S IH0 Z\nDRESSIER  D R EH1 - S IY0 - ER0\nDRESSING  D R EH1 - S IH0 NG\nDRESSINGS  D R EH1 - S IH0 NG Z\nDRESSLER  D R EH1 S - L ER0\nDRESSMAKER  D R EH1 S - M EY2 - K ER0\nDRESSMAKERS  D R EH1 S - M EY2 - K ER0 Z\nDRESSMAKING  D R EH1 S - M EY2 - K IH0 NG\nDRESSY  D R EH1 - S IY0\nDREW  D R UW1\nDREWERY  D R UW1 - ER0 - IY0\nDREWES  D R UW1 Z\nDREWETT  D R UW1 - IH0 T\nDREWRY  D R UW1 - R IY0\nDREWS  D R UW1 Z\nDREXEL  D R EH1 K - S AH0 L\nDREXEL'S  D R EH1 K - S AH0 L Z\nDREXLER  D R EH1 K S - L ER0\nDREY  D R EY1\nDREYER  D R EY1 - ER0\nDREYFUS  D R AY1 - F AH0 S\nDREYFUS'S  D R EY1 - F AH0 - S IH0 Z\nDREYFUS(2)  D R EY1 - F AH0 S\nDREYFUSS  D R EY1 - F AH0 S\nDRIBBED  D R IH1 B D\nDRIBBLE  D R IH1 - B AH0 L\nDRIBBLED  D R IH1 - B AH0 L D\nDRIBBLING  D R IH1 - B AH0 L - IH0 NG\nDRIBBLING(2)  D R IH1 - B L IH0 NG\nDRIBS  D R IH1 B Z\nDRIED  D R AY1 D\nDRIEHAUS  D R IY1 - HH AW2 S\nDRIER  D R AY1 - ER0\nDRIES  D R AY1 Z\nDRIESSEN  D R IY1 - S AH0 N\nDRIEST  D R AY1 - AH0 S T\nDRIEVER  D R IY1 - V ER0\nDRIFT  D R IH1 F T\nDRIFTED  D R IH1 F - T AH0 D\nDRIFTED(2)  D R IH1 F - T IH0 D\nDRIFTER  D R IH1 F - T ER0\nDRIFTERS  D R IH1 F - T ER0 Z\nDRIFTING  D R IH1 F - T IH0 NG\nDRIFTNET  D R IH1 F T - N EH2 T\nDRIFTS  D R IH1 F T S\nDRIFTWOOD  D R IH1 F T - W UH2 D\nDRIGGERS  D R IH1 - G ER0 Z\nDRIGGS  D R IH1 G Z\nDRILL  D R IH1 L\nDRILLBIT  D R IH1 L - B IH2 T\nDRILLED  D R IH1 L D\nDRILLER  D R IH1 - L ER0\nDRILLERS  D R IH1 - L ER0 Z\nDRILLING  D R IH1 - L IH0 NG\nDRILLING'S  D R IH1 - L IH0 NG Z\nDRILLS  D R IH1 L Z\nDRINA  D IY1 - N AH0\nDRINA'S  D IY1 - N AH0 Z\nDRINAS  D IY1 - N AH0 Z\nDRING  D R IH1 NG\nDRINK  D R IH1 NG K\nDRINKABLE  D R IH1 N - K AH0 - B AH0 L\nDRINKARD  D R IH1 NG - K ER0 D\nDRINKER  D R IH1 NG - K ER0\nDRINKER'S  D R IH1 NG - K ER0 Z\nDRINKERS  D R IH1 NG - K ER0 Z\nDRINKING  D R IH1 NG - K IH0 NG\nDRINKS  D R IH1 NG K S\nDRINKWATER  D R IH1 NG - K W AO2 - T ER0\nDRINKWINE  D R IH1 NG - K W AY2 N\nDRINNON  D R IH1 - N AH0 N\nDRIP  D R IH1 P\nDRIPPED  D R IH1 P T\nDRIPPING  D R IH1 - P IH0 NG\nDRIPPS  D R IH1 P S\nDRIPS  D R IH1 P S\nDRISCOLL  D R IH1 S - K AH0 L\nDRISKELL  D R IH1 S - K AH0 L\nDRISKILL  D R IH1 - S K IH0 L\nDRIVABLE  D R AY1 - V AH0 - B AH0 L\nDRIVE  D R AY1 V\nDRIVE'S  D R AY1 V Z\nDRIVEL  D R IH1 - V AH0 L\nDRIVEN  D R IH1 - V AH0 N\nDRIVER  D R AY1 - V ER0\nDRIVER'S  D R AY1 - V ER0 Z\nDRIVERLESS  D R AY1 - V ER0 - L IH0 S\nDRIVERS  D R AY1 - V ER0 Z\nDRIVERS'  D R AY1 - V ER0 Z\nDRIVES  D R AY1 V Z\nDRIVEWAY  D R AY1 V - W EY2\nDRIVEWAYS  D R AY1 V - W EY2 Z\nDRIVING  D R AY1 - V IH0 NG\nDRIZZLE  D R IH1 - Z AH0 L\nDRIZZLING  D R IH1 - Z AH0 L - IH0 NG\nDRIZZLING(2)  D R IH1 Z - L IH0 NG\nDRIZZLY  D R IH1 Z - L IY0\nDROBKOV  D R AO1 B - K AO0 V\nDROBKOV(2)  D R AO1 B - K AO0 F\nDROBNY  D R AA1 B - N IY0\nDRODDY  D R AA1 - D IY0\nDROEGE  D R OW1 JH\nDROESSLER  D R OW1 - S AH0 - L ER0\nDROESSLER(2)  D R OW1 S - L ER0\nDROGE  D R OW1 JH\nDROGOUL  D R OW0 - G UW1 L\nDROGOUL'S  D R OW0 - G UW1 L Z\nDROGUE  D R OW1 G\nDROHAN  D R OW1 - AH0 N\nDROKE  D R OW1 K\nDROLET  D R OW1 - L IH0 T\nDROLL  D R OW1 L\nDROLLINGER  D R OW1 - L IH0 - NG ER0\nDROMEDARY  D R AA1 - M AH0 - D EH2 - R IY0\nDROMER  D R OW1 - M ER0\nDROMEY  D R OW1 - M IY0\nDROMGOOLE  D R AA1 M - G UW2 L\nDROMGOOLES  D R AA0 M - G UW1 L Z\nDROMI  D R AA1 - M IY0\nDROMOMANIA  D R OW2 - M OW0 - M EY1 - N IY0 - AH0\nDROMOMANIA(2)  D R OW2 - M OW0 - M EY1 - N Y AH0\nDROMON  D R OW1 - M AH0 N\nDRONE  D R OW1 N\nDRONED  D R OW1 N D\nDRONES  D R OW1 N Z\nDRONET  D R OW1 - N IH0 T\nDRONEY  D R OW1 - N IY0\nDRONING  D R OW1 - N IH0 NG\nDROOL  D R UW1 L\nDROOLING  D R UW1 - L IH0 NG\nDROOP  D R UW1 P\nDROOPED  D R UW1 P T\nDROOPING  D R UW1 - P IH0 NG\nDROOPY  D R UW1 - P IY0\nDROP  D R AA1 P\nDROP(2)  D R AO1 P\nDROPKIN  D R AA1 P - K IH0 N\nDROPLET  D R AA1 - P L AH0 T\nDROPLETS  D R AA1 - P L AH0 T S\nDROPOFF  D R AA1 - P AO2 F\nDROPOUT  D R AA1 P - AW2 T\nDROPOUTS  D R AA1 P - AW2 T S\nDROPPED  D R AA1 P T\nDROPPER  D R AA1 - P ER0\nDROPPERS  D R AA1 - P ER0 Z\nDROPPING  D R AA1 - P IH0 NG\nDROPPINGS  D R AA1 - P IH0 NG Z\nDROPS  D R AA1 P S\nDROPSY  D R AA1 P - S IY0\nDROSER  D R OW1 - Z ER0\nDROSS  D R AO1 S\nDROST  D R AA1 S T\nDROSTE  D R OW1 S T\nDROTAR  D R OW1 - T ER0\nDROUGHT  D R AW1 T\nDROUGHT'S  D R AW1 T S\nDROUGHTS  D R AW1 T S\nDROUILLARD  D R W IY0 - L AA1 R D\nDROUIN  D R W IY1 N\nDROVE  D R OW1 V\nDROVER  D R OW1 - V ER0\nDROVES  D R OW1 V Z\nDROWN  D R AW1 N\nDROWNED  D R AW1 N D\nDROWNING  D R AW1 - N IH0 NG\nDROWNINGS  D R AW1 - N IH0 NG Z\nDROWNS  D R AW1 N Z\nDROWSINESS  D R AW1 - Z IY0 - N AH0 S\nDROWSY  D R AW1 - Z IY0\nDROZ  D R AA1 Z\nDROZD  D R AA1 Z D\nDROZDA  D R AA1 Z - D AH0\nDROZDOWSKI  D R AH0 Z - D AO1 F S - K IY0\nDRU  D R UW1\nDRUB  D R AH1 B\nDRUBBED  D R AH1 B D\nDRUBBING  D R AH1 - B IH0 NG\nDRUCE  D R UW1 S\nDRUCIE  D R AH1 - K IY0\nDRUCK  D R AH1 K\nDRUCKENMILLER  D R AH1 - K IH0 N - M IH2 - L ER0\nDRUCKER  D R AH1 - K ER0\nDRUCKMAN  D R AH1 K - M AH0 N\nDRUDGE  D R AH1 JH\nDRUDGERY  D R AH1 - JH ER0 - IY0\nDRUELLA  D R UW2 - EH1 - L AH0\nDRUG  D R AH1 G\nDRUG'S  D R AH1 G Z\nDRUGAN  D R UW1 - G AH0 N\nDRUGGED  D R AH1 G D\nDRUGGING  D R AH1 - G IH0 NG\nDRUGGIST  D R AH1 - G IH0 S T\nDRUGGIST'S  D R AH1 - G AH0 S T S\nDRUGGIST'S(2)  D R AH1 - G IH0 S T S\nDRUGGISTS  D R AH1 - G AH0 S T S\nDRUGGISTS(2)  D R AH1 - G IH0 S T S\nDRUGGISTS(3)  D R AH1 - G IH0 S S\nDRUGGISTS(4)  D R AH1 - G IH0 S\nDRUGMAKER  D R AH1 G - M EY2 - K ER0\nDRUGMAKERS  D R AH1 G - M EY2 - K ER0 Z\nDRUGS  D R AH1 G Z\nDRUGS'  D R AH1 G Z\nDRUGSTORE  D R AH1 G - S T AO2 R\nDRUGSTORES  D R AH1 G - S T AO2 R Z\nDRUID  D R UW1 - IH0 D\nDRUIDISM  D R UW1 - AH0 - D IH2 - Z AH0 M\nDRUIDS  D R UW1 - IH0 D Z\nDRUISILLA  D R IH0 - S IH1 - L AH0\nDRUM  D R AH1 M\nDRUMBEAT  D R AH1 M - B IY2 T\nDRUMHEAD  D R AH1 M - HH EH2 D\nDRUMHELLER  D R AH1 M - HH EH2 - L ER0\nDRUMLIN'S  D R AH1 M - L IH0 N Z\nDRUMM  D R AH1 M\nDRUMMED  D R AH1 M D\nDRUMMER  D R AH1 - M ER0\nDRUMMERS  D R AH1 - M ER0 Z\nDRUMMEY  D R AH1 - M IY0\nDRUMMING  D R AH1 - M IH0 NG\nDRUMMOND  D R AH1 - M AH0 N D\nDRUMMONDS  D R AH1 - M AH0 N D Z\nDRUMRIGHT  D R AH1 M - R AY2 T\nDRUMS  D R AH1 M Z\nDRUMSTICK  D R AH1 M - S T IH0 K\nDRUMWRIGHT  D R AH1 M - R AY2 T\nDRUNK  D R AH1 NG K\nDRUNKARD  D R AH1 NG - K ER0 D\nDRUNKARDS  D R AH1 NG - K ER0 D Z\nDRUNKEN  D R AH1 NG - K AH0 N\nDRUNKENNESS  D R AH1 NG - K AH0 N - N AH0 S\nDRUNKS  D R AH1 NG K S\nDRUPE  D R UW1 P\nDRUPES  D R UW1 P S\nDRURY  D R UW1 - R IY0\nDRUSA  D R UW1 - S AH0\nDRUSE  D R UW1 Z\nDRUSIE  D R AH1 - S IY0\nDRUSILLA  D R UW2 - S IH1 - L AH0\nDRUTHERS  D R AH1 - DH ER0 Z\nDRUZE  D R UW1 Z\nDRY  D R AY1\nDRYCLEAN  D R AY1 - K L IY2 N\nDRYDEN  D R AY1 - D AH0 N\nDRYE  D R AY1\nDRYER  D R AY1 - ER0\nDRYERS  D R AY1 - ER0 Z\nDRYING  D R AY1 - IH0 NG\nDRYLY  D R AY1 - L IY0\nDRYNESS  D R AY1 - N AH0 S\nDRYPERS  D R AY1 - P ER0 Z\nDRYPOINT  D R AY1 - P OY2 N T\nDRYSDALE  D R AY1 Z - D EY2 L\nDRYSER  D R AY1 - S ER0\nDRYWALL  D R AY1 - W AA2 L\nDRZEWIECKI  JH UW0 - IY1 T S - K IY0\nDSOUZA  D AH0 - S UW1 - Z AH0\nDSS  D IY1 - EH1 - S EH1 S\nDSV  D IY1 - EH1 S - V IY1\nDU  D UW1\nDU(2)  D AH0\nDUAL  D UW1 - AH0 L\nDUAL(2)  D UW1 L\nDUALISM  D UW1 - AH0 - L IH2 - Z AH0 M\nDUALISMS  D UW1 - AH0 - L IH2 - Z AH0 M Z\nDUALIST  D UW1 - AH0 - L IH0 S T\nDUALISTIC  D UW2 - AH0 - L IH1 - S T IH0 K\nDUALITY  D UW0 - AE1 - L AH0 - T IY0\nDUALS  D UW1 - AH0 L Z\nDUAN  D W AE1 N\nDUAN(2)  D W EY1 N\nDUANA  D UW0 - AE1 - N AH0\nDUANE  D W EY1 N\nDUARTE  D W AA1 R - T EY2\nDUARTE'S  D W AA1 R - T EY2 Z\nDUB  D AH1 B\nDUBA  D UW1 - B AH0\nDUBACH  D AH1 - B AA0 K\nDUBAI  D UW0 - B AY1\nDUBARRY  D UW1 - B EH2 - R IY0\nDUBAS  D UW1 - B AH0 Z\nDUBAY  D AH1 - B EY0\nDUBBED  D AH1 B D\nDUBBERLY  D AH1 - B ER0 - L IY0\nDUBBING  D AH1 - B IH0 NG\nDUBBS  D AH1 B Z\nDUBCEK  D AH1 B - CH EH2 K\nDUBCEK(2)  D UW1 B - CH EH2 K\nDUBE  D UW1 B\nDUBEAU  D AH0 - B OW1\nDUBERSTEIN  D UW1 - B ER0 - S T AY2 N\nDUBERSTEIN'S  D UW1 - B ER0 - S T AY2 N Z\nDUBERSTEIN'S(2)  D UW1 - B ER0 - S T IY2 N Z\nDUBERSTEIN(2)  D UW1 - B ER0 - S T IY2 N\nDUBEY  D AH1 - B IY0\nDUBHI  D UW1 - B IY0\nDUBICKI  D AH0 - B IH1 T S - K IY0\nDUBIE  D AH1 - B IY0\nDUBIEL  D AH1 - B IY0 L\nDUBILIER  D UW2 - B AH0 - L IH1 R\nDUBILIER(2)  D UW2 - B AH0 - L AY1 - ER0\nDUBIN  D UW1 - B IH0 N\nDUBININ  D UW0 - B IH1 - N IH0 N\nDUBINSKY  D AH0 - B IH1 N - S K IY0\nDUBIOUS  D UW1 - B IY0 - AH0 S\nDUBIS  D UW1 - B IH0 S\nDUBLIN  D AH1 - B L IH0 N\nDUBLIN'S  D AH1 - B L IH0 N Z\nDUBOFF  D AH1 - B AO2 F\nDUBOIS  D UW0 - B OY1 S\nDUBOIS(2)  D UW0 - B W AA1\nDUBOISE  D UW0 - B OY1 S\nDUBOISE(2)  D UW0 - B W AA1\nDUBORD  D AH0 - B AO1 R D\nDUBOSE  D UW0 - B OW1 Z\nDUBOW  D UW1 - B OW0\nDUBRAWSKI  D UW0 - B R AW1 S - K IY0\nDUBRAY  D AH1 - B R EY2\nDUBREE  D AH0 - B R IY1\nDUBREUIL  D AH1 - B R UW0 L\nDUBROC  D AH1 - B R AH0 K\nDUBROFF  D UW1 - B R AO0 F\nDUBROVNIK  D UW0 - B R AA1 V - N IH0 K\nDUBROVNIK'S  D UW0 - B R AA1 V - N IH0 K Z\nDUBROVNIKS  D UW0 - B R AA1 V - N IH0 K Z\nDUBROW  D AH1 - B R OW2\nDUBS  D AH1 B Z\nDUBUC  D UW1 - B AH0 K\nDUBUISSON  D AH1 - B IH0 - S AH0 N\nDUBUQUE  D AH0 - B Y UW1 K\nDUBUQUE'S  D AH0 - B Y UW1 K S\nDUBY  D UW1 - B IY0\nDUC  D AH1 K\nDUCA  D UW1 - K AH0\nDUCAL  D UW1 - K AH0 L\nDUCE  D UW1 S\nDUCEY  D AH1 - S IY0\nDUCH  D AH1 CH\nDUCHAINE  D AH0 - SH EY1 N\nDUCHAMP  D UW0 - SH AA1 M P\nDUCHAMP'S  D UW0 - SH AA1 M P S\nDUCHARME  D AH0 - SH AA1 R M\nDUCHEMIN  D AH1 - SH IH0 - M AE0 N\nDUCHENE  D AH1 - K IY0 N\nDUCHENNE  D UW0 - SH EH1 N\nDUCHESNEAU  D AH1 - SH IH0 S - N OW0\nDUCHESS  D AH1 - CH AH0 S\nDUCHIN  D UW1 - CH IH0 N\nDUCHON  D AH1 - CH AH0 N\nDUCHOSSOIS  D UW0 - CH AO1 S - W AA2\nDUCHOW  D AH1 - CH OW0\nDUCHY  D AH1 - CH IY0\nDUCK  D AH1 K\nDUCK'S  D AH1 K S\nDUCKED  D AH1 K T\nDUCKER  D AH1 - K ER0\nDUCKETT  D AH1 - K IH0 T\nDUCKING  D AH1 - K IH0 NG\nDUCKLING  D AH1 - K L IH0 NG\nDUCKLINGS  D AH1 K - L IH0 NG Z\nDUCKS  D AH1 K S\nDUCKS'  D AH1 K S\nDUCKSWORTH  D AH1 K - S W ER2 TH\nDUCKWALL  D AH1 K - W AO2 L\nDUCKWEED  D AH1 K - W IY2 D\nDUCKWORTH  D AH1 K - W ER2 TH\nDUCLOS  D AH0 - K L OW1 Z\nDUCOMMUN  D UW0 - K AA1 - M AH0 N\nDUCOMMUN(2)  D UW0 - K AA1 - M UW1 N\nDUCOTE  D AH0 - K OW1 T\nDUCT  D AH1 K T\nDUCTILE  D AH1 K - T AH0 L\nDUCTILITY  D AH0 K - T IH1 - L AH0 - T IY0\nDUCTLESS  D AH1 K T - L AH0 S\nDUCTS  D AH1 K T S\nDUD  D AH1 D\nDUDA  D UW1 - D AH0\nDUDACK  D UW1 - D AE0 K\nDUDAR  D UW1 - D ER0\nDUDAS  D UW1 - D AH0 Z\nDUDASH  D AH1 - D AH0 SH\nDUDAYEV  D UW0 - D AY1 - EH2 V\nDUDAYEV'S  D UW0 - D AY1 - EH2 V Z\nDUDD  D AH1 D\nDUDDING  D AH1 - D IH0 NG\nDUDDY  D AH1 - D IY0\nDUDE  D UW1 D\nDUDECK  D UW1 - D EH0 K\nDUDECK'S  D UW1 - D EH0 K S\nDUDEK  D UW1 - D IH0 K\nDUDEN  D UW1 - D AH0 N\nDUDENHOEFFER  D AH1 - D IH0 N - HH OW0 - F ER0\nDUDES  D Y UW1 D Z\nDUDGEON  D AH1 - JH AH0 N\nDUDIK  D UW1 - D IH0 K\nDUDLEY  D AH1 D - L IY0\nDUDMAN  D AH1 D - M AH0 N\nDUDNEY  D AH1 D - N IY0\nDUDS  D AH1 D Z\nDUDZIAK  D AH1 - JH IY0 - AE0 K\nDUDZIK  D AH1 D - Z IH0 K\nDUDZINSKI  D AH0 - JH IH1 N - S K IY0\nDUE  D UW1\nDUE(2)  D Y UW1\nDUECKER  D UW1 - K ER0\nDUEITT  D UW1 - AH0 T\nDUEKER  D UW1 - K ER0\nDUEL  D UW1 - AH0 L\nDUELED  D UW1 - AH0 L D\nDUELING  D UW1 - L IH0 NG\nDUELIST  D UW1 - AH0 - L IH0 S T\nDUELL  JH UW1 L\nDUELL(2)  D UW1 L\nDUELS  D UW1 - AH0 L Z\nDUENA  D UW0 - EH1 - N AH0\nDUENA(2)  D W EY1 - N Y AH0\nDUENAS  D UW0 - EH1 - N AH0 S\nDUENAS(2)  D W EY1 - N Y AH0 S\nDUENEZ  D W EH0 - N EH1 Z\nDUENOW  D UW1 - N OW0\nDUENSING  D UH1 N - S IH0 NG\nDUER  D UW1 - ER0\nDUERKSEN  D UH1 R K - S AH0 N\nDUERR  D UH1 R\nDUERSON  D UH1 R - S AH0 N\nDUERST  D UH1 R S T\nDUES  D UW1 Z\nDUESBERG  D UW1 Z - B ER0 G\nDUESING  D UW1 - S IH0 NG\nDUESLER  D UW1 - S AH0 - L ER0\nDUESLER(2)  D UW1 S - L ER0\nDUESSELDORF  D UW1 - S AH0 L - D AO2 R F\nDUET  D UW0 - EH1 T\nDUET(2)  D Y UW0 - EH1 T\nDUETS  D UW0 - EH1 T S\nDUETS(2)  D Y UW0 - EH1 T S\nDUEY  D UW1 - IY0\nDUEY(2)  D Y UW1 - IY0\nDUFAULT  D AH0 - F OW1\nDUFEK  D UW1 - F IH0 K\nDUFF  D AH1 F\nDUFFEE  D AH1 - F IY0\nDUFFEK  D AH1 - F IH0 K\nDUFFEL  D AH1 - F AH0 L\nDUFFELL  D AH1 - F AH0 L\nDUFFER  D AH1 - F ER0\nDUFFETT  D AH1 - F IH0 T\nDUFFEY  D AH1 - F IY0\nDUFFIE  D AH1 - F IY0\nDUFFIELD  D AH1 - F IY2 L D\nDUFFIN  D AH1 - F IH0 N\nDUFFNER  D AH1 F - N ER0\nDUFFORD  D AH1 - F ER0 D\nDUFFOUR  D AH1 - F AO0 R\nDUFFUS  D AH1 - F AH0 S\nDUFFY  D AH1 - F IY0\nDUFNER  D AH1 F - N ER0\nDUFORD  D AH1 - F ER0 D\nDUFORT  D AH1 - F ER0 T\nDUFOUR  D AH0 - F UH1 R\nDUFRANE  D AH0 - F R EY1 N\nDUFRENE  D AH0 - F R IY1 N\nDUFRESNE  D AH0 - F R EH1 N\nDUFUR  D AH0 - F ER1\nDUG  D AH1 G\nDUGAL  D UW1 - JH AH0 L\nDUGALD  D AH1 - G AH0 L D\nDUGAN  D AH1 - G AH0 N\nDUGAR  D UW1 - G ER0\nDUGAS  D UW1 - G AH0 Z\nDUGDALE  D AH1 G - D EY2 L\nDUGGAN  D AH1 - G AH0 N\nDUGGAR  D AH1 - G ER0\nDUGGER  D AH1 - G ER0\nDUGGIN  D AH1 - G IH0 N\nDUGGINS  D AH1 - G IH0 N Z\nDUGO  D UW1 - G OW0\nDUGOUT  D AH1 G - AW2 T\nDUGOUTS  D AH1 G - AW2 T S\nDUGUAY  D AH1 - G EY0\nDUGUID  D AH1 G - W IH0 D\nDUH  D AH1\nDUHAIME  D UW1 - AY0 M\nDUHAMEL  D UW2 - HH AE1 - M AH0 L\nDUHART  D AH1 - HH AA0 R T\nDUHE  D UW1 HH\nDUHON  D UW1 - HH AH0 N\nDUHR  D ER1\nDUI  D IY1 - Y UW1 - AY1\nDUIGNAN  D IH0 G - N AE1 N\nDUIS  D UW1 - IH0 Z\nDUIS(2)  D IY1 - Y UW1 - AY1 Z\nDUISBURG  D UW1 S - B ER0 G\nDUITSMAN  D UW1 T S - M AH0 N\nDUK  D AH1 K\nDUKAKIS  D UW0 - K AA1 - K IH0 S\nDUKAKIS'  D UW0 - K AA1 - K IH0 S\nDUKAKIS'(2)  D UW0 - K AA1 - K IH0 - S IH0 Z\nDUKAKIS'S  D UW0 - K AA1 - K IH0 - S IH0 Z\nDUKAKISES  D UW0 - K AA1 - K IH0 - S IH0 Z\nDUKART  D AH1 - K AA0 R T\nDUKE  D UW1 K\nDUKE'S  D UW1 K S\nDUKEDOM  D UW1 K - D AH0 M\nDUKEMAN  D UW1 K - M AH0 N\nDUKER  D UW1 - K ER0\nDUKES  D UW1 K S\nDUKING  D UW1 - K IH0 NG\nDULA  D UW1 - L AH0\nDULAC  D AH0 - L AE1 K\nDULAK  D UW1 - L AH0 K\nDULANEY  D Y UW1 - L AH0 - N IY0\nDULANY  D Y UW0 - L AO1 - N IY0\nDULAY  D Y UW1 - L EY0\nDULCE  D AH1 L S\nDULCEA  D AH1 L - S IY0 - AH0\nDULCET  D AH1 L - S AH0 T\nDULCIANA  D UW0 L - CH AE1 - N AH0\nDULCIBELLE  D AH1 L - S IH0 - B AH0 L\nDULCIE  D AH1 L - K IY0\nDULCIMER  D AH1 L - S IH0 - M ER0\nDULCINE  D AH1 L - S IH0 N\nDULCINEA  D AH2 L - S IH0 - N IY1 - AH0\nDULE  D UW1 L\nDULEY  D Y UW1 - L IY0\nDULIN  D UW1 - L IH0 N\nDULING  D Y UW1 - L IH0 NG\nDULL  D AH1 L\nDULLE  D AH1 L\nDULLEA  D AH1 - L IY0 - AH0\nDULLED  D AH1 L D\nDULLER  D AH1 - L ER0\nDULLES  D AH1 - L AH0 S\nDULLEST  D AH1 - L AH0 S T\nDULLING  D AH1 - L IH0 NG\nDULLNESS  D AH1 L - N AH0 S\nDULMAGE  D AH1 L - M AH0 JH\nDULONG  D Y UW1 - L AO0 NG\nDULSKI  D AH1 L - S K IY0\nDULUDE  D Y UW1 - L UW2 D\nDULUTH  D AH0 - L UW1 TH\nDULWICH  D AH1 L - W IH2 CH\nDULWORTH  D AH1 L - W ER0 TH\nDULY  D UW1 - L IY0\nDUM  D AH1 M\nDUMA  D UW1 - M AH0\nDUMAINE  D AH0 - M EY1 N\nDUMAIS  D AH0 - M EY1\nDUMAN  D UW1 - M AH0 N\nDUMAS  D UW1 - M AH0 Z\nDUMAS(2)  D UW2 - M AA1\nDUMB  D AH1 M\nDUMBBELL  D AH1 M - B EH2 L\nDUMBBELLS  D AH1 M - B EH2 L Z\nDUMBER  D AH1 - M ER0\nDUMBEST  D AH1 - M AH0 S T\nDUMBFOUND  D AH1 M - F AW0 N D\nDUMBFOUNDED  D AH1 M - F AW0 N - D IH0 D\nDUMBING  D AH1 - M IH0 NG\nDUMBO  D AH1 M - B OW0\nDUMBSTRUCK  D AH1 M - S T R AH2 K\nDUMENIL  D UW1 - M AH0 - N IH2 L\nDUMEZ  D UW1 - M EH0 Z\nDUMFORD  D AH1 M - F ER0 D\nDUMIRE  D UW0 - M IH1 - R EY0\nDUMKE  D AH1 M - K IY0\nDUMLAO  D UW1 M - L AW0\nDUMLER  D AH1 M - L ER0\nDUMM  D AH1 M\nDUMMER  D AH1 - M ER0\nDUMMIES  D AH1 - M IY0 Z\nDUMMITT  D AH1 - M IH0 T\nDUMMY  D AH1 - M IY0\nDUMOND  D AH0 - M AA1 N D\nDUMONT  D UW0 - M AA1 N T\nDUMOULIN  D AH1 - M UW0 - L AE0 N\nDUMP  D AH1 M P\nDUMPED  D AH1 M P T\nDUMPER  D AH1 M - P ER0\nDUMPING  D AH1 M - P IH0 NG\nDUMPLING  D AH1 M - P L IH0 NG\nDUMPLINGS  D AH1 M - P L IH0 NG Z\nDUMPS  D AH1 M P S\nDUMPSTER  D AH1 M P - S T ER0\nDUMPSTERS  D AH1 M P - S T ER0 Z\nDUMPTRUCK  D AH1 M P - T R AH2 K\nDUMPTRUCKS  D AH1 M P - T R AH2 K S\nDUMPTY  D AH1 M P - T IY0\nDUMPY  D AH1 M - P IY0\nDUN  D AH1 N\nDUN'S  D AH1 N Z\nDUNA  D UW1 - N AH0\nDUNAGAN  D UW0 - N AA1 - G AA0 N\nDUNAHOO  D UW0 - N AA1 - HH UW0\nDUNAJ  D UW1 - N AH0 JH\nDUNAVAN  D AH1 - N AH0 - V AE2 N\nDUNAVANT  D UW0 - N AA1 - V AH0 N T\nDUNAWAY  D AH1 N - AH0 - W EY2\nDUNAY  D AH1 - N EY0\nDUNBAR  D AH1 N - B AA0 R\nDUNBLANE  D AH1 N - B L EY2 N\nDUNC  D AH1 NG K\nDUNCAN  D AH1 NG - K AH0 N\nDUNCANSON  D AH1 NG - K AH0 N - S AH0 N\nDUNCKEL  D AH1 NG - K AH0 L\nDUNCOMBE  D AH1 NG - K AH0 M\nDUNDAS  D AH1 N - D AH0 Z\nDUNDEE  D AH0 N - D IY1\nDUNDON  D AH1 N - D AH0 N\nDUNDORE  D AH1 N - D ER0\nDUNE  D UW1 N\nDUNEDIN  D UW1 - N AH0 - D IH0 N\nDUNEGAN  D AH1 - N IH0 - G AE0 N\nDUNES  D UW1 N Z\nDUNFEE  D AH1 N - F IY2\nDUNFORD  D AH1 N - F ER0 D\nDUNG  D AH1 NG\nDUNGAN  D AH1 NG - G AH0 N\nDUNGEON  D AH1 N - JH AH0 N\nDUNGEONS  D AH1 N - JH AH0 N Z\nDUNGEY  D AH1 N - JH IY0\nDUNHAM  D AH1 - N AH0 M\nDUNHILL  D AH1 N - HH IH2 L\nDUNIGAN  D AH1 - N IH0 - G AE0 N\nDUNITE  D UW0 - N AY1 T\nDUNIVAN  D AH1 - N IH0 - V AE0 N\nDUNJA  D UW1 - N Y AH0\nDUNJA(2)  D AH1 N - JH AH0\nDUNK  D AH1 NG K\nDUNKED  D AH1 NG K T\nDUNKEL  D AH1 NG - K AH0 L\nDUNKELBERG  D AH1 NG - K AH0 L - B ER0 G\nDUNKELBERGER  D AH1 NG - K AH0 L - B ER0 - G ER0\nDUNKER  D AH1 NG - K ER0\nDUNKERLEY  D AH1 NG - K ER0 - L IY0\nDUNKIN  D AH1 NG - K IH0 N\nDUNKIN'  D AH1 NG - K IH0 N\nDUNKIRK  D AH1 N - K ER0 K\nDUNKLE  D AH1 NG - K AH0 L\nDUNKLEBERGER  D AH1 NG - K AH0 L - B ER0 - G ER0\nDUNKLEE  D AH1 NG - K L IY2\nDUNKLEY  D AH1 NG - K L IY0\nDUNKLIN  D AH1 NG - K L IH0 N\nDUNKS  D AH1 NG K S\nDUNLAEVY  D AH0 N - L EY1 - V IY0\nDUNLAP  D AH1 N - L AE0 P\nDUNLAVEY  D AH0 N - L AH0 - V EY1\nDUNLAVY  D AH1 N - L AH0 - V IY0\nDUNLAY  D AH1 N - L EY2\nDUNLEAVY  D UW1 N - L AH0 - V IY0\nDUNLEVY  D UW1 N - L IH0 - V IY0\nDUNLEY  D AH1 N - L IY0\nDUNLOP  D AH1 N - L AA2 P\nDUNMAN  D AH1 N - M AH0 N\nDUNMIRE  D UW0 N - M IH1 - R EY0\nDUNN  D AH1 N\nDUNNAGAN  D AH1 - N AH0 - G AE0 N\nDUNNAM  D AH1 - N AH0 M\nDUNNAVANT  D AH1 - N AH0 - V AH0 N T\nDUNNAWAY  D AH1 N - AH0 - W EY0\nDUNNE  D AH1 N\nDUNNED  D AH1 N D\nDUNNELL  D AH1 - N AH0 L\nDUNNETT  D AH1 - N IH0 T\nDUNNIGAN  D AH1 - N IH0 - G AH0 N\nDUNNING  D AH1 - N IH0 NG\nDUNNINGTON  D AH1 - N IH0 NG - T AH0 N\nDUNPHY  D AH1 N - F IY0\nDUNS  D AH1 N Z\nDUNSHEE  D AH1 N - SH IY0\nDUNSMOOR  D AH1 N Z - M UH2 R\nDUNSMORE  D AH1 N - S M AO0 R\nDUNSON  D AH1 N - S AH0 N\nDUNST  D AH1 N S T\nDUNSTAN  D AH1 N - S T AH0 N\nDUNSTER  D AH1 N - S T ER0\nDUNSTON  D AH1 N - S T AH0 N\nDUNSWORTH  D AH1 N - Z W ER2 TH\nDUNTON  D AH1 N - T AH0 N\nDUNWOODY  D AH1 N - W UH2 - D IY0\nDUNWORTH  D AH1 N - W ER2 TH\nDUO  D UW1 - OW0\nDUODENAL  D UW1 - AH0 - D IY1 - N AH0 L\nDUODENAL(2)  D UW0 - AA1 - D AH0 - N AH0 L\nDUODENUM  D UW0 - AA1 - D AH0 - N AH0 M\nDUONG  D UW1 - OW0 NG\nDUOPOLY  D UW1 - OW0 - P AA2 - L IY0\nDUOPOLY(2)  D Y UW0 - AA1 - P AH0 - L IY0\nDUPAY  D UW0 - P EY1\nDUPE  D UW1 P\nDUPED  D UW1 P T\nDUPEE  D UW1 - P IY1\nDUPER  D UW1 - P ER0\nDUPES  D UW1 P S\nDUPIN  D AH0 - P AE1 N\nDUPLANTIS  D AH0 - P L AE1 N - T IH0 S\nDUPLECHAIN  D UW1 - P L IH0 - SH EY0 N\nDUPLECHIN  D UW1 - P L IH0 - K IH0 N\nDUPLER  D UW1 - P AH0 - L ER0\nDUPLER(2)  D UW1 - P L ER0\nDUPLESSIS  D UW1 - P L IH0 - S IH0 S\nDUPLEX  D UW1 - P L EH2 K S\nDUPLICATE  D UW1 - P L AH0 - K AH0 T\nDUPLICATE(2)  D UW1 - P L AH0 - K EY2 T\nDUPLICATED  D UW1 - P L IH0 - K EY2 - T IH0 D\nDUPLICATED(2)  D Y UW1 - P L AH0 - K EY2 - T IH0 D\nDUPLICATES  D Y UW1 - P L AH0 - K EY2 T S\nDUPLICATING  D UW1 - P L IH0 - K EY2 - T IH0 NG\nDUPLICATION  D Y UW2 - P L AH0 - K EY1 - SH AH0 N\nDUPLICATIONS  D UW2 - P L IH0 - K EY1 - SH AH0 N Z\nDUPLICATIVE  D UW0 - P L IH1 - K AH0 - T IH0 V\nDUPLICITOUS  D UW0 - P L IH1 - S IH0 - T AH0 S\nDUPLICITY  D UW0 - P L IH1 - S IH0 - T IY0\nDUPONT  D UW1 - P AA0 N T\nDUPONT'S  D UW1 - P AA0 N T S\nDUPRAS  D AH0 - P R AA1 Z\nDUPRE  D AH1 - P ER0\nDUPREE  D AH0 - P R IY1\nDUPREY  D AH1 - P R IY0\nDUPRIEST  D AH1 - P ER0 - IY0 - IH0 S T\nDUPRIEST(2)  D UW2 - P R IY1 S T\nDUPUIS  D AH1 - P UW0 - IH0 Z\nDUPUY  D AH0 - P AY1\nDUQUE  D UW1 K\nDUQUESNE  D UW0 - K EY1 N\nDUQUESNE'S  D UW0 - K EY1 N Z\nDUQUETTE  D AH0 - K EH1 T\nDURA  D UH1 - R AH0\nDURABILITY  D ER0 - AH0 - B IH1 - L IH0 - T IY0\nDURABLE  D UH1 - R AH0 - B AH0 L\nDURABLES  D UH1 - R AH0 - B AH0 L Z\nDURACELL  D UH1 - R AH0 - S EH2 L\nDURAKON  D UH1 - R AH0 - K IH0 N\nDURALL  D Y UW1 - R AH0 L\nDURAMED  D UH1 - R AH0 - M EH2 D\nDURAN  D ER0 - AE1 N\nDURAN'S  D ER0 - AE1 N S\nDURANDO  D UH0 - R AA1 N - D OW0\nDURANG  D ER0 - AE1 NG\nDURANGO  D ER0 - AE1 NG - G OW0\nDURANT  D UH1 - R AH0 N T\nDURANT'S  D ER0 - AE1 N T S\nDURANTE  D UH0 - R AA1 N - T IY0\nDURATION  D UH1 - R EY1 - SH AH0 N\nDURATIONS  D UH1 - R EY1 - SH AH0 N Z\nDURAY  D UH1 - R EY0\nDURAZO  D UH0 - R AA1 - Z OW0\nDURBAN  D ER1 - B AH0 N\nDURBEN  D ER1 - B AH0 N\nDURBIN  D ER1 - B IH0 N\nDURCH  D ER1 CH\nDURCHHOLZ  D ER1 - CH OW2 L T S\nDURDEN  D ER1 - D AH0 N\nDURDIN  D ER1 - D IH0 N\nDUREE  D UH1 - R IY1\nDURELL  D Y UW1 - R AH0 L\nDUREN  D UH1 - R AH0 N\nDURENBERGER  D UH1 - R AH0 N - B ER0 - G ER0\nDURENE  D Y UW1 - R IY0 N\nDURER  D UH1 - R ER0\nDURESS  D UH1 - R EH0 S\nDURETTE  D ER0 - EH1 T\nDURFEE  D ER1 - F IY0\nDURFEY  D ER1 - F IY0\nDURFLINGER  D ER1 - F AH0 L - IH0 - NG ER0\nDURFLINGER(2)  D ER1 - F L IH0 - NG ER0\nDURGAN  D ER1 - G AH0 N\nDURGIN  D ER1 - JH IH0 N\nDURHAM  D ER1 - AH0 M\nDURHAM(2)  D UH1 R - HH AE1 M\nDURHAM(3)  D UH1 - R AH0 M\nDURI  D UH1 - R IY0\nDURICK  D Y UW1 - R IH0 K\nDURIE  D UH1 - R IY0\nDURING  D UH1 - R IH0 NG\nDURING(2)  D Y UH1 - R IH0 NG\nDURING(3)  D ER1 - IH0 NG\nDURIO  D UH1 - R IY0 - OW0\nDURIRON  D UW0 - R IH1 - R AH0 N\nDURIS  D Y UW1 - R IH0 S\nDURKEE  D ER1 - K IY0\nDURKHEIM  D ER1 K - HH AY2 M\nDURKHEIM'S  D ER1 K - HH AY2 M Z\nDURKIN  D ER1 - K IH0 N\nDURLAND  D ER1 - L AH0 N D\nDURLEY  D ER1 - L IY0\nDURLING  D ER1 - L IH0 NG\nDURN  D ER1 N\nDURNELL  D ER1 - N AH0 L\nDURNEY  D ER1 - N IY0\nDURNIL  D ER1 - N AH0 L\nDURNIN  D ER1 - N IH0 N\nDURNING  D ER1 - N IH0 NG\nDURO  D UH1 - R OW2\nDUROCHER  D Y UW1 - R AH0 - K ER0\nDURON  D Y UW1 - R AH0 N\nDUROSS  D Y UW1 - R AH0 S\nDURR  D ER1\nDURRAH  D AO1 - R AH0\nDURRANCE  D UH1 - R AH0 N S\nDURRANT  D AO1 - R AH0 N T\nDURRELL  D AO1 - R AH0 L\nDURRENCE  D AO1 - R AH0 N S\nDURRETT  D AO1 - R IH0 T\nDURSO  D UH1 R - S OW0\nDURST  D ER1 S T\nDURUM  D UH1 - R AH0 M\nDURWARD  D ER1 - W ER0 D\nDURWIN  D ER1 - W IH0 N\nDURY  D UH1 - R IY0\nDURYEA  D UH0 - R IY1 - AH0\nDURYEE  D UH0 - R IY1\nDUSCH  D AH1 SH\nDUSCH(2)  D AH1 CH\nDUSEK  D UW1 - S EH0 K\nDUSENBERRY  D UW1 - S AH0 N - B EH0 - R IY0\nDUSENBERY  D AH0 - S EH1 N - B ER0 - IY0\nDUSENBURY  D UW1 - S AH0 N - B EH0 - R IY0\nDUSH  D AH1 SH\nDUSH(2)  D UW1 SH\nDUSHANE  D UW2 - SH EY1 N\nDUSHYANTH  D UW2 - SH IY0 - AA1 N TH\nDUSING  D UW1 - S IH0 NG\nDUSK  D AH1 S K\nDUSKIN  D AH1 - S K IH0 N\nDUSSAULT  D AH0 - S OW1\nDUSSEAU  D AH0 - S OW1\nDUSSEAULT  D AH0 - S OW1\nDUSSELDORF  D UW1 - S AH0 L - D AO2 R F\nDUST  D AH1 S T\nDUSTBIN  D AH1 S T - B IH0 N\nDUSTED  D AH1 - S T IH0 D\nDUSTER  D AH1 - S T ER0\nDUSTERS  D AH1 - S T ER0 Z\nDUSTIN  D AH1 - S T IH0 N\nDUSTING  D AH1 - S T IH0 NG\nDUSTMAN  D AH1 S T - M AH0 N\nDUSTON  D AH1 - S T AH0 N\nDUSTS  D AH1 S T S\nDUSTS(2)  D AH1 S S\nDUSTS(3)  D AH1 S\nDUSTY  D AH1 - S T IY0\nDUSZA  D AH1 - SH AH0\nDUSZYNSKI  D AH0 - SH IH1 N - S K IY0\nDUTCH  D AH1 CH\nDUTCHER  D AH1 - CH ER0\nDUTCHMAN  D AH1 CH - M AH0 N\nDUTHIE  D AH1 - TH IY0\nDUTIES  D UW1 - T IY0 Z\nDUTIFUL  D UW1 - T IY0 - F AH0 L\nDUTIFULLY  D UW1 - T IY0 - F AH0 - L IY0\nDUTIL  D AH0 - T IH1 L\nDUTKA  D AH1 T - K AH0\nDUTKIEWICZ  D AH1 T - K AH0 - V IH0 CH\nDUTKO  D AH1 T - K OW0\nDUTOIT  D UW0 - T OY1 T\nDUTRA  D UW1 - T R AH0\nDUTRO  D AH1 - T R OW0\nDUTROW  D AH1 - T R OW0\nDUTSON  D AH1 T - S AH0 N\nDUTT  D AH1 T\nDUTTER  D AH1 - T ER0\nDUTTON  D AH1 - T AH0 N\nDUTY  D UW1 - T IY0\nDUTY(2)  D Y UW1 - T IY0\nDUVA  D UW1 - V AH0\nDUVAL  D UW0 - V AE1 L\nDUVALIER  D UW0 - V AE1 L - Y ER0\nDUVALIERS  D UW0 - V EY1 - L Y ER0 Z\nDUVALL  D UW0 - V AA1 L\nDUVE  D UW1 V\nDUVERNAY  D AH0 - V ER1 - N EY0\nDUVREES  D UW0 - V R IY1 Z\nDUWAYNE  D UW0 - W EY1 N\nDUWE  D UW1 W\nDUX  D AH1 K S\nDUZAN  D UW1 - Z AH0 N\nDVORACEK  D V AO1 - R AH0 - CH EH0 K\nDVORAK  D V AO1 - R AH0 K\nDVORSKY  D V AO1 R - S K IY0\nDWAN  D W AA1 N\nDWANA  D W AA1 - N AH0\nDWARF  D W AO1 R F\nDWARFED  D W AO1 R F T\nDWARFING  D W AO1 R - F IH0 NG\nDWARFISM  D W AO1 R - F IH0 - Z AH0 M\nDWARFS  D W AO1 R F S\nDWARVES  D W AO1 R V Z\nDWAYNE  D W EY1 N\nDWECK  D W EH1 K\nDWELL  D W EH1 L\nDWELLE  D W EH1 L\nDWELLED  D W EH1 L D\nDWELLER  D W EH1 - L ER0\nDWELLERS  D W EH1 - L ER0 Z\nDWELLEY  D W EH1 - L IY0\nDWELLING  D W EH1 - L IH0 NG\nDWELLINGS  D W EH1 - L IH0 NG Z\nDWELLS  D W EH1 L Z\nDWELT  D W EH1 L T\nDWI  D IY1 - D AH1 - B AH0 L - Y UW1 - AY1\nDWI(2)  D IY1 - D AH1 - B AH0 - Y UW1 - AY1\nDWIGGINS  D W IH1 - G IH0 N Z\nDWIGHT  D W AY1 T\nDWINDLE  D W IH1 N - D AH0 L\nDWINDLED  D W IH1 N - D AH0 L D\nDWINDLES  D W IH1 N - D AH0 L Z\nDWINDLING  D W IH1 N - D AH0 L - IH0 NG\nDWINDLING(2)  D W IH1 N D - L IH0 NG\nDWINELL  D W IH1 - N AH0 L\nDWIRE  D W AY1 R\nDWIVEDI  D W IH0 - V EH1 - D IY0\nDWORAK  D W ER1 - AH0 K\nDWORIN  D W AO1 - R IH0 N\nDWORKIN  D W AO1 R - K IH0 N\nDWORSKY  D W ER1 S - K IY0\nDWYER  D W AY1 - ER0\nDYAD  D AY1 - AE2 D\nDYAL  D AY1 - AH0 L\nDYAN  D AY0 - AE1 N\nDYANA  D AY0 - AE1 - N AH0\nDYANE  D AY0 - AE1 N\nDYANSEN  D AY1 - AH0 N - S AH0 N\nDYAR  D AY1 - ER0\nDYAS  D AY1 - AH0 S\nDYATRON  D AY1 - AH0 - T R AH0 N\nDYAZIDE  D AY1 - AH0 - Z AY2 D\nDYBAS  D AY1 - B AH0 Z\nDYCE  D AY1 S\nDYCHE  D AY1 CH\nDYCHES  D AY1 - CH IH0 Z\nDYCK  D AY1 K\nDYCKMAN  D IH1 K - M AH0 N\nDYCO  D AY1 - K OW0\nDYCUS  D AY1 - K AH0 S\nDYE  D AY1\nDYED  D AY1 D\nDYEING  D AY1 - IH0 NG\nDYER  D AY1 - ER0\nDYES  D AY1 Z\nDYESS  D AY1 - AH0 S\nDYESTUFF  D AY1 - S T AH2 F\nDYESTUFFS  D AY1 - S T AH2 F S\nDYGERT  D IH1 - G ER0 T\nDYING  D AY1 - IH0 NG\nDYK  D IH1 K\nDYKAS  D AY1 - K AH0 Z\nDYKE  D AY1 K\nDYKEMAN  D AY1 K - M AH0 N\nDYKES  D AY1 K S\nDYKHOUSE  D IH1 K - HH AW2 S\nDYKMAN  D IH1 K - M AH0 N\nDYKSTRA  D AY1 K - S T R AH0\nDYLAN  D IH1 - L AH0 N\nDYLAN'S  D IH1 - L AH0 N Z\nDYLEWSKI  D IH0 - L EH1 F - S K IY0\nDYLEX  D AY1 - L AH0 K S\nDYMALLY  D IH1 - M AH0 - L IY0\nDYMEK  D IH1 - M EH0 K\nDYMENT  D IH1 - M AH0 N T\nDYMOND  D AY1 - M AH0 N D\nDYNAFAC  D AY1 - N AH0 - F AE2 K\nDYNALECTRIC  D AY1 - N AH0 - L EH2 K - T R IH0 K\nDYNALECTRON  D AY1 - N AH0 - L EH2 K - T R AH0 N\nDYNAMIC  D AY0 - N AE1 - M IH0 K\nDYNAMICS  D AY0 - N AE1 - M IH0 K S\nDYNAMICS'  D IH0 - N AE1 - M IH0 K S\nDYNAMICS'(2)  D AY0 - N AE1 - M IH0 K S\nDYNAMICS'S  D AY0 - N AE1 - M IH0 K - S IH0 Z\nDYNAMISM  D AY1 - N AH0 - M IH2 - Z AH0 M\nDYNAMITE  D AY1 - N AH0 - M AY2 T\nDYNAMO  D AY1 - N AH0 - M OW2\nDYNAPAC  D AY1 - N AH0 - P AE2 K\nDYNASCAN  D AY1 - N AH0 - S K AE2 N\nDYNASTIC  D AY0 - N AE1 - S T IH0 K\nDYNASTIES  D AY1 - N AH0 - S T IY0 Z\nDYNASTY  D AY1 - N AH0 - S T IY0\nDYNATECH  D IH1 - N AH0 - T EH2 K\nDYNCORP  D IH1 N - K AO2 R P\nDYNCORP(2)  D AY1 N - K AO2 R P\nDYNEER  D IH0 - N IH1 R\nDYNEER(2)  D AY0 - N IH1 R\nDYNES  D AY1 N Z\nDYSAN  D AY1 - S AH0 N\nDYSART  D IH1 - S ER0 T\nDYSENTERY  D IH1 S - AH0 N - T EH2 - R IY0\nDYSERT  D IH1 - S ER0 T\nDYSFUNCTION  D IH0 S - F AH1 NG K - SH AH0 N\nDYSFUNCTIONAL  D IH0 S - F AH1 NG K - SH AH0 - N AH0 L\nDYSINGER  D IH1 S - IH0 N - JH ER0\nDYSLEXIA  D IH0 S - L EH1 K - S IY0 - AH0\nDYSLEXIC  D IH0 S - L EH1 K - S IH0 K\nDYSON  D AY1 - S AH0 N\nDYSPLASIA  D IH0 - S P L EY1 - ZH AH0\nDYSTROPHIN  D IH1 - S T R AH0 - F IH0 N\nDYSTROPHY  D IH1 S - T R AH0 - F IY0\nDZHIRKVELOV  D AH0 - Z ER1 K - V AH0 - L AA0 V\nDZHOKHAR  JH OW2 - K AA1 R\nDZHOKHAR'S  JH OW2 - K AA1 R Z\nDZIAK  D Z IY1 - AE0 K\nDZIALO  JH IY0 - AA1 - L OW0\nDZIEDZIC  JH IY1 - JH IH0 K\nDZIEKAN  JH IY1 - K AH0 N\nDZIK  D Z IH1 K\nDZIKOWSKI  JH IH0 - K AO1 F S - K IY0\nDZIUBA  JH IY0 - UW1 - B AH0\nDZIUK  JH IY0 - UW1 K\nDZOKHAR  JH OW2 - K AA1 R\nE  IY1\nE'S  IY1 Z\nE.  IY1\nE.'S  IY1 Z\nE.S  IY1 Z\nEACH  IY1 CH\nEACHAN  IY1 - CH AH0 N\nEACHUS  IY1 - CH AH0 S\nEADDY  IY1 - D IY0\nEADE  IY1 D\nEADER  IY1 - D ER0\nEADES  IY1 D Z\nEADIE  EH1 - D IY0\nEADS  IY1 D Z\nEADY  IY1 - D IY0\nEAGAN  IY1 - G AH0 N\nEAGAR  IY1 - G ER0\nEAGEN  IY1 - G AH0 N\nEAGER  IY1 - G ER0\nEAGERLY  IY1 - G ER0 - L IY0\nEAGERNESS  IY1 - G ER0 - N AH0 S\nEAGLE  IY1 - G AH0 L\nEAGLE'S  IY1 - G AH0 L Z\nEAGLEBURGER  IY1 - G AH0 L - B ER0 - G ER0\nEAGLES  IY1 - G AH0 L Z\nEAGLESON  IY1 - G AH0 L - S AH0 N\nEAGLETON  IY1 - G AH0 L - T AH0 N\nEAGLEYE  IY1 - G AH0 - L AY2\nEAGLIN  IY1 - G L IH0 N\nEAGON  IY1 - G AH0 N\nEAKEN  IY1 - K AH0 N\nEAKER  IY1 - K ER0\nEAKES  IY1 K S\nEAKIN  IY1 - K IH0 N\nEAKINS  IY1 - K IH0 N Z\nEAKLE  IY1 - K AH0 L\nEALES  IY1 L Z\nEALEY  IY1 - L IY0\nEALING  IY1 - L IH0 NG\nEALY  IY1 - L IY0\nEAMER  IY1 - M ER0\nEAMES  IY1 M Z\nEAMON  IY1 - M AH0 N\nEANES  IY1 N Z\nEAP  IY1 - EY1 - P IY1\nEAP(2)  IY1 P\nEAR  IH1 R\nEAR(2)  IY1 R\nEARDLEY  IH1 R D - L IY0\nEARDLEY(2)  ER1 D - L IY0\nEARED  IH1 R D\nEARFULL  IH1 R - F AH2 L\nEARGLE  IH1 R - G AH0 L\nEARHART  IH1 R - HH AA0 R T\nEARHART(2)  EH1 R - HH AA0 R T\nEARL  ER1 L\nEARLDOM  ER1 L - D AH0 M\nEARLE  ER1 L\nEARLENE  ER1 - L IY0 N\nEARLES  ER1 L Z\nEARLESS  IH1 R - L AH0 S\nEARLESS(2)  IY1 R - L AH0 S\nEARLEY  ER1 - L IY0\nEARLIE  ER1 - L IY0\nEARLIER  ER1 - L IY0 - ER0\nEARLIER'S  ER1 - L IY0 - ER0 Z\nEARLIEST  ER1 - L IY0 - AH0 S T\nEARLINE  ER1 - L AY0 N\nEARLL  ER1 L\nEARLS  ER1 L Z\nEARLY  ER1 - L IY0\nEARLYWINE  ER1 - L IY0 - W AY2 N\nEARMARK  IH1 R - M AA2 R K\nEARMARK(2)  IY1 R - M AA2 R K\nEARMARKED  IH1 R - M AA2 R K T\nEARMARKED(2)  IY1 R - M AA2 R K T\nEARMARKING  IH1 R - M AA2 R - K IH0 NG\nEARMARKING(2)  IY1 R - M AA2 R - K IH0 NG\nEARMARKS  IH1 R - M AA2 R K S\nEARMARKS(2)  IY1 R - M AA2 R K S\nEARMUFF  IH1 R - M AH2 F\nEARMUFF(2)  IY1 R - M AH2 F\nEARMUFFS  IH1 R - M AH2 F S\nEARMUFFS(2)  IY1 R - M AH2 F S\nEARN  ER1 N\nEARNED  ER1 N D\nEARNER  ER1 - N ER0\nEARNERS  ER1 - N ER0 Z\nEARNEST  ER1 - N IH0 S T\nEARNESTLY  ER1 - N AH0 S T - L IY0\nEARNESTNESS  ER1 - N AH0 S T - N AH0 S\nEARNEY  ER1 - N IY0\nEARNHARDT  ER1 N - HH AA2 R T\nEARNHART  ER1 N - HH AA2 R T\nEARNHEART  ER1 N - HH AA2 R T\nEARNING  ER1 - N IH0 NG\nEARNINGS  ER1 - N IH0 NG Z\nEARNINGS'  ER1 - N IH0 NG Z\nEARNS  ER1 N Z\nEARNSHAW  ER1 N - SH AO2\nEARP  ER1 P\nEARPHONE  IH1 R - F OW2 N\nEARPHONE(2)  IY1 R - F OW2 N\nEARPHONES  IH1 R - F OW2 N Z\nEARPHONES(2)  IY1 R - F OW2 N Z\nEARPIECE  IH1 R - P IY0 S\nEARPIECE(2)  IY1 R - P IY0 S\nEARPIECES  IH1 R - P IY0 - S IH0 Z\nEARPIECES(2)  IY1 R - P IY0 - S IH0 Z\nEARPLUG  IH1 R - P L AH2 G\nEARPLUG(2)  IY1 R - P L AH2 G\nEARPLUGS  IH1 R - P L AH2 G Z\nEARPLUGS(2)  IY1 R - P L AH2 G Z\nEARRING  IH1 - R IH0 NG\nEARRING(2)  IY1 - R IH0 NG\nEARRINGS  IH1 - R IH0 NG Z\nEARRINGS(2)  IY1 - R IH0 NG Z\nEARS  IH1 R Z\nEARS(2)  IY1 R Z\nEARSHOT  IH1 R - SH AA2 T\nEARSHOT(2)  IY1 R - SH AA2 T\nEARTH  ER1 TH\nEARTH'S  ER1 TH S\nEARTHA  ER1 - TH AH0\nEARTHBOUND  ER1 TH - B AW2 N D\nEARTHEN  ER1 - TH AH0 N\nEARTHENWARE  ER1 - TH AH0 N - W EH2 R\nEARTHLING  ER1 TH - L IH0 NG\nEARTHLINGS  ER1 TH - L IH0 NG Z\nEARTHLY  ER1 TH - L IY0\nEARTHMOVING  ER1 TH - M UW2 - V IH0 NG\nEARTHQUAKE  ER1 TH - K W EY2 K\nEARTHQUAKE'S  ER1 TH - K W EY2 K S\nEARTHQUAKES  ER1 TH - K W EY2 K S\nEARTHS  ER1 TH S\nEARTHSHAKING  ER1 TH - SH EY2 - K IH0 NG\nEARTHSHINE  ER1 TH - SH AY2 N\nEARTHSTAR  ER1 TH - S T AA2 R\nEARTHWORK  ER1 TH - W ER2 K\nEARTHWORM  ER1 TH - W ER2 M\nEARTHWORMS  ER1 TH - W ER2 M Z\nEARTHY  ER1 - TH IY0\nEARVIN  ER1 - V IH0 N\nEARWAX  IH1 R - W AE2 K S\nEARWAX(2)  IY1 R - W AE2 K S\nEARWOOD  IH1 R - W UH2 D\nEARWOOD(2)  IY1 R - W UH2 D\nEARY  IH1 - R IY0\nEASCO  IY1 - S K OW0\nEASE  IY1 Z\nEASED  IY1 Z D\nEASEL  IY1 - Z AH0 L\nEASEMENT  IY1 Z - M AH0 N T\nEASES  IY1 - Z IH0 Z\nEASH  IY1 SH\nEASIER  IY1 - Z IY0 - ER0\nEASIEST  IY1 - Z IY0 - AH0 S T\nEASILY  IY1 - Z AH0 - L IY0\nEASING  IY1 - Z IH0 NG\nEASLER  IY1 Z - L ER0\nEASLEY  IY1 Z - L IY0\nEASOM  IY1 - Z AH0 M\nEASON  IY1 - Z AH0 N\nEAST  IY1 S T\nEAST'S  IY1 S T S\nEASTBOUND  IY1 S T - B AW2 N D\nEASTBURN  IY1 S T - B ER2 N\nEASTDIL  IY1 S T - D IH2 L\nEASTEND  IY1 - S T EH2 N D\nEASTENDER  IY1 - S T EH2 N - D ER0\nEASTENDERS  IY1 - S T EH2 N - D ER0 Z\nEASTEP  IY1 Z - T IH0 P\nEASTER  IY1 - S T ER0\nEASTERBROOK  IY1 - S T ER0 - B R UH2 K\nEASTERDAY  IY1 - S T ER0 - D EY2\nEASTERLIN  AH0 Z - T ER1 - L IH0 N\nEASTERLIN(2)  IY1 - S T ER0 - L IH0 N\nEASTERLING  IY1 - S T ER0 - L IH0 NG\nEASTERLY  IY1 - S T ER0 - L IY0\nEASTERN  IY1 - S T ER0 N\nEASTERN'S  IY1 - S T ER0 N Z\nEASTERN-WEST  IY1 - S T ER0 N - W EH1 S T\nEASTERNER  IY1 - S T ER0 - N ER0\nEASTERNERS  IY1 - S T ER0 - N ER0 Z\nEASTERWOOD  IY1 - S T ER0 - W UH2 D\nEASTES  IY1 S T S\nEASTGROUP  IY1 - S T G R UW2 P\nEASTHAM  IY1 - S T AH0 M\nEASTIN  IY1 Z - T IH0 N\nEASTLAND  IY1 S T - L AH0 N D\nEASTLAND'S  IY1 S T - L AH0 N D Z\nEASTLAND'S(2)  IY1 S T - L AE0 N D Z\nEASTLAND'S(3)  IY1 S - L AH0 N D Z\nEASTLAND'S(4)  IY1 S - L AE0 N D Z\nEASTLAND(2)  IY1 S T - L AE0 N D\nEASTLAND(3)  IY1 S - L AH0 N D\nEASTLAND(4)  IY1 S - L AE0 N D\nEASTLICK  IY1 - S T L IH2 K\nEASTMAN  IY1 S T - M AH0 N\nEASTMET  IY1 - S T M EH2 T\nEASTMET'S  IY1 - S T M EH2 T S\nEASTON  IY1 - S T AH0 N\nEASTOVER  IY1 - S T OW2 - V ER0\nEASTPAC  IY1 - S T P AE2 K\nEASTPAC'S  IY1 - S T P AE2 K S\nEASTRIDGE  IY1 - S T R IH2 JH\nEASTWARD  IY1 S T - W ER0 D\nEASTWICK  IY1 - S T W IH2 K\nEASTWOOD  IY1 S T - W UH2 D\nEASTWOOD'S  IY1 S T - W UH2 D Z\nEASUDES  EY2 S - UW1 - D EY0 S\nEASY  IY1 - Z IY0\nEASY'S  IY1 - Z IY0 Z\nEASYGOING  IY1 - Z IY0 - G OW1 - IH0 NG\nEAT  IY1 T\nEATABLE  IY1 - T AH0 - B AH0 L\nEATEN  IY1 - T AH0 N\nEATER  IY1 - T ER0\nEATERIES  IY1 - T ER0 - IY0 Z\nEATERS  IY1 - T ER0 Z\nEATERY  IY1 - T ER0 - IY0\nEATHERLY  EH1 - DH ER0 - L IY0\nEATHERTON  EH0 - TH ER1 - T AH0 N\nEATHERTON(2)  IY2 - TH ER1 - T AH0 N\nEATING  IY1 - T IH0 NG\nEATMAN  IY1 T - M AH0 N\nEATMON  IY1 T - M AH0 N\nEATON  IY1 - T AH0 N\nEATON'S  IY1 - T AH0 N Z\nEATS  IY1 T S\nEAU  OW1\nEAUX  OW1\nEAUX(2)  OW1 Z\nEAVE  IY1 V\nEAVENSON  IY1 - V IH0 N - S AH0 N\nEAVES  IY1 V Z\nEAVESDROP  IY1 V Z - D R AA2 P\nEAVESDROPPING  IY1 V Z - D R AA2 - P IH0 NG\nEB  EH1 B\nEBA  IY1 - B AH0\nEBAN  EH1 - B AH0 N\nEBAN(2)  IY1 - B AH0 N\nEBANKS  EH1 - B AH0 NG K S\nEBANO  EH0 - B AA1 - N OW0\nEBANO(2)  IY1 - B AH0 - N OW0\nEBARB  EH1 - B AA0 R B\nEBASCO  EH0 - B AE1 - S K OW0\nEBAUGH  EH1 - B AO0\nEBB  EH1 B\nEBBA  EH1 - B AH0\nEBBED  EH1 B D\nEBBEN  EH1 - B AH0 N\nEBBERS  EH1 - B ER0 Z\nEBBERT  EH1 - B ER0 T\nEBBING  EH1 - B IH0 NG\nEBBS  EH1 B Z\nEBBY  EH1 - B IY0\nEBEL  EH1 - B AH0 L\nEBELING  EH1 - B AH0 L - IH0 NG\nEBEN  EH1 - B AH0 N\nEBENEEZER  EH1 - B AH0 - N IY2 - Z ER0\nEBENEZER  EH2 - B IH0 - N IY1 - Z ER0\nEBER  EH1 - B ER0\nEBERHARD  EH1 - B ER0 - HH AA0 R T\nEBERHARDT  EH1 - B ER0 - HH AA2 R T\nEBERHART  EH1 - B ER0 - HH AA2 R T\nEBERL  EH1 - B ER0 L\nEBERLE  EH1 - B ER0 - AH0 L\nEBERLEIN  EH1 - B ER0 - L AY2 N\nEBERLIN  EH1 - B ER0 - L IH0 N\nEBERLING  EH1 - B ER0 - L IH0 NG\nEBERLY  EH1 - B ER0 - L IY0\nEBERS  EH1 - B ER0 Z\nEBERSOL  EH1 - B ER0 - S AA0 L\nEBERSOLD  EH1 - B ER0 - S OW2 L D\nEBERSOLE  EH1 - B ER0 - S OW2 L\nEBERSTADT  EH1 - B ER0 - S T AE2 T\nEBERT  EH1 - B ER0 T\nEBERTS  EH1 - B ER0 T S\nEBERWEIN  EH1 - B ER0 - W AY2 N\nEBEY  EH1 - B IY0\nEBINGER  EH1 - B IH0 - NG ER0\nEBLE  EH1 - B AH0 L\nEBLEN  EH1 - B AH0 - L AH0 N\nEBLIN  EH1 - B L IH0 N\nEBLING  EH1 - B AH0 L - IH0 NG\nEBLING(2)  EH1 - B L IH0 NG\nEBNER  EH1 B - N ER0\nEBOLA  IY0 - B OW1 - L AH0\nEBONICS  IY0 - B AO1 - N IH0 K S\nEBONY  EH1 - B AH0 - N IY0\nEBRIGHT  IH0 - B R AY1 T\nEBRO  IY1 - B R OW2\nEBRON  EH1 - B R AH0 N\nEBULLIENCE  IH0 - B UH1 L - Y AH0 N S\nEBULLIENT  IH0 - B AH1 L - Y AH0 N T\nEBY  IY1 - B IY0\nECAD  IY1 - K AE2 D\nECCENTRIC  IH0 K - S EH1 N - T R IH0 K\nECCENTRIC(2)  EH2 K - S EH1 N - T R IH0 K\nECCENTRICITIES  EH2 K - S EH0 N - T R IH1 - S IH0 - T IY0 Z\nECCENTRICITY  EH2 K - S AH0 N - T R IH1 - S AH0 - T IY0\nECCENTRICS  IH0 K - S EH1 N - T R IH0 K S\nECCENTRICS(2)  EH2 K - S EH1 N - T R IH0 K S\nECCLES  EH1 - K AH0 L Z\nECCLESIASTIC  IH0 - K L IY2 - Z IY0 - AE1 - S T IH0 K\nECCLESIASTICAL  IH0 - K L IY2 - Z IY0 - AE1 - S T IH0 - K AH0 L\nECCLESTON  EH1 - K AH0 L - S T AA0 N\nECEVIT  EH1 - S AH0 - V IH0 T\nECHARD  EH1 - CH ER0 D\nECHAVARRIA  EH2 - CH AH0 - V AE1 - R IY0 - AH0\nECHELON  EH1 - SH AH0 - L AA2 N\nECHELONS  EH1 - SH AH0 - L AA2 N Z\nECHENBERG  EH1 - K AH0 N - B ER0 G\nECHEVARRIA  EY0 - CH EY0 - V AA1 - R IY0 - AH0\nECHEVERRIA  EY0 - CH EY0 - V EH1 - R IY0 - AH0\nECHLIN  EH1 - K L IH0 N\nECHLIN'S  EH1 - K L IH0 N Z\nECHO  EH1 - K OW0\nECHO'S  EH1 - K OW0 Z\nECHOED  EH1 - K OW0 D\nECHOES  EH1 - K OW0 Z\nECHOHAWK  EH1 - K OW0 - HH AO2 K\nECHOHAWK'S  EH1 - K OW0 - HH AO2 K S\nECHOING  EH1 - K OW0 - IH0 NG\nECHOLOCATION  EH2 - K OW0 - L OW0 - K EY1 - SH AH0 N\nECHOLS  EH1 - K AH0 L Z\nECHOS  EH1 - K OW0 Z\nECK  EH1 K\nECKARD  EH1 - K ER0 D\nECKARD(2)  EH1 K - HH AA2 R D\nECKARDT  EH1 - K ER0 T\nECKARDT'S  EH1 - K ER0 T S\nECKARDT'S(2)  EH1 K - HH AA2 R T S\nECKARDT(2)  EH1 K - HH AA2 R T\nECKART  EH1 - K AA0 R T\nECKBERG  EH1 K - B ER0 G\nECKEL  EH1 - K AH0 L\nECKELBERRY  EH1 - K AH0 L - B EH2 - R IY0\nECKELS  EH1 - K AH0 L Z\nECKENFELDER  EH1 - K AH0 N - F EH2 L - D ER0\nECKENROD  EH1 - K IH0 N - R AH0 D\nECKENRODE  EH1 - K IH0 N - R OW2 D\nECKENROTH  EH1 - K IH0 N - R AO0 TH\nECKER  EH1 - K ER0\nECKERD  EH1 - K ER0 D\nECKERLE  EH1 - K ER0 - AH0 L\nECKERMAN  EH1 - K ER0 - M AH0 N\nECKERSLEY  EH1 - K ER0 S - L IY0\nECKERSON  EH1 - K ER0 - S AH0 N\nECKERT  EH1 - K ER0 T\nECKES  EH1 K S\nECKHARD  EH1 K - HH AA2 R D\nECKHARDT  EH1 K - HH AA2 R T\nECKHART  EH1 K - HH AA2 R T\nECKHOFF  EH1 K - HH AO2 F\nECKL  EH1 - K AH0 L\nECKLAND  EH1 K - L AH0 N D\nECKLER  EH1 - K L ER0\nECKLES  EH1 - K AH0 L Z\nECKLEY  EH1 K - L IY0\nECKLUND  EH1 K - L AH0 N D\nECKMAN  EH1 K - M AH0 N\nECKMANN  EH1 K - M AH0 N\nECKRICH  EH1 - K R IH0 K\nECKROTE  EH1 - K R AH0 T\nECKROTH  EH1 - K R AO2 TH\nECKSTEIN  EH1 K - S T IY2 N\nECKSTEIN(2)  EH1 K - S T AY2 N\nECKSTROM  EH1 K - S T R AH0 M\nECLECTIC  IH0 - K L EH1 K - T IH0 K\nECLIPSE  IH0 - K L IH1 P S\nECLIPSE(2)  AH0 - K L IH1 P S\nECLIPSE(3)  IY0 - K L IH1 P S\nECLIPSED  IH0 - K L IH1 P S T\nECLIPSED(2)  AH0 - K L IH1 P S T\nECLIPSED(3)  IY0 - K L IH1 P S T\nECLIPSES  IH0 - K L IH1 P - S AH0 Z\nECLIPSES(2)  IH0 - K L IH1 P - S IH0 Z\nECLIPSES(3)  AH0 - K L IH1 P - S IH0 Z\nECLIPSES(4)  IY0 - K L IH1 P - S AH0 Z\nECLIPSES(5)  IY0 - K L IH1 P - S IH0 Z\nECLIPSES(6)  AH0 - K L IH1 P - S AH0 Z\nECLIPSING  IH0 - K L IH1 P - S IH0 NG\nECLIPSING(2)  IY0 - K L IH1 P - S IH0 NG\nECLIPSING(3)  AH0 - K L IH1 P - S IH0 NG\nECLIPTIC  IH0 - K L IH1 P - T IH0 K\nECO  IY1 - K OW0\nECO(2)  EH1 - K OW0\nECOGEN  IY1 - K OW0 - G AH0 N\nECOLAB  IY1 - K OW0 - L AE2 B\nECOLAB(2)  EH1 - K OW0 - L AE2 B\nECOLAIRE  IY1 - K OW0 - L EH2 R\nECOLE  IH0 - K OW1 L\nECOLOGICAL  IY0 - K AH0 - L AA1 - JH IH0 - K AH0 L\nECOLOGICAL(2)  EH0 - K AH0 - L AA1 - JH IH0 - K AH0 L\nECOLOGICALLY  IY0 - K AH0 - L AA1 - JH IH0 K - L IY0\nECOLOGICALLY(2)  EH0 - K AH0 - L AA1 - JH IH0 K - L IY0\nECOLOGIST  IH0 - K AA1 - L AH0 - JH IH0 S T\nECOLOGIST(2)  IY0 - K AA1 - L AH0 - JH IH0 S T\nECOLOGISTS  IH0 - K AA1 - L AH0 - JH IH0 S T S\nECOLOGISTS(2)  IH0 - K AA1 - L AH0 - JH IH0 S S\nECOLOGISTS(3)  IY0 - K AA1 - L AH0 - JH IH0 S S\nECOLOGISTS(4)  IY0 - K AA1 - L AH0 - JH IH0 S T S\nECOLOGISTS(5)  IH0 - K AA1 - L AH0 - JH IH0 S\nECOLOGISTS(6)  IY0 - K AA1 - L AH0 - JH IH0 S\nECOLOGY  IH0 - K AA1 - L AH0 - JH IY0\nECOLOGY(2)  IY0 - K AA1 - L AH0 - JH IY0\nECON  IY1 - K AA2 N\nECONOCOM  IY0 - K AA1 - N OW0 - K AA2 M\nECONOLINE  IY0 - K AA1 - N OW0 - L AY2 N\nECONOMETRIC  IH0 - K AA2 - N AH0 - M EH1 - T R IH0 K\nECONOMETRICS  IH0 - K AA2 - N AH0 - M EH1 - T R IH0 K S\nECONOMIC  EH2 - K AH0 - N AA1 - M IH0 K\nECONOMIC(2)  IY2 - K AH0 - N AA1 - M IH0 K\nECONOMICAL  EH2 - K AH0 - N AA1 - M IH0 - K AH0 L\nECONOMICAL(2)  IY2 - K AH0 - N AA1 - M IH0 - K AH0 L\nECONOMICALLY  EH2 - K AH0 - N AA1 - M IH0 K - L IY0\nECONOMICALLY(2)  IY2 - K AH0 - N AA1 - M IH0 K - L IY0\nECONOMICO  IY0 - K AA2 - N AH0 - M IY1 - K OW0\nECONOMICS  EH2 - K AH0 - N AA1 - M IH0 K S\nECONOMICS(2)  IY2 - K AH0 - N AA1 - M IH0 K S\nECONOMIES  IH0 - K AA1 - N AH0 - M IY0 Z\nECONOMIES(2)  IY0 - K AA1 - N AH0 - M IY0 Z\nECONOMIST  IH0 - K AA1 - N AH0 - M IH0 S T\nECONOMIST'S  IH0 - K AA1 - N AH0 - M IH0 S T S\nECONOMIST'S(2)  IY0 - K AA1 - N AH0 - M IH0 S T S\nECONOMIST'S(3)  IH0 - K AA1 - N AH0 - M IH0 S S\nECONOMIST'S(4)  IY0 - K AA1 - N AH0 - M IH0 S S\nECONOMIST'S(5)  IH0 - K AA1 - N AH0 - M IH0 S\nECONOMIST'S(6)  IY0 - K AA1 - N AH0 - M IH0 S\nECONOMIST(2)  IY0 - K AA1 - N AH0 - M IH0 S T\nECONOMISTS  IH0 - K AA1 - N AH0 - M IH0 S T S\nECONOMISTS'  IH0 - K AA1 - N AH0 - M IH0 S T S\nECONOMISTS'(2)  IY0 - K AA1 - N AH0 - M IH0 S T S\nECONOMISTS'(3)  IH0 - K AA1 - N AH0 - M IH0 S S\nECONOMISTS'(4)  IY0 - K AA1 - N AH0 - M IH0 S S\nECONOMISTS(2)  IH0 - K AA1 - N AH0 - M IH0 S S\nECONOMISTS(3)  IY0 - K AA1 - N AH0 - M IH0 S S\nECONOMISTS(4)  IH0 - K AA1 - N AH0 - M IH0 S\nECONOMISTS(5)  IY0 - K AA1 - N AH0 - M IH0 S\nECONOMIZE  IH0 - K AA1 - N AH0 - M AY2 Z\nECONOMIZE(2)  IY0 - K AA1 - N AH0 - M AY2 Z\nECONOMIZING  IH0 - K AA1 - N AH0 - M AY2 - Z IH0 NG\nECONOMIZING(2)  IY0 - K AA1 - N AH0 - M AY2 - Z IH0 NG\nECONOMOS  EH0 - K AH0 - N OW1 - M OW0 Z\nECONOMOU  EH0 - K OW0 - N OW1 - M UW0\nECONOMY  IH0 - K AA1 - N AH0 - M IY0\nECONOMY'S  IH0 - K AA1 - N AH0 - M IY0 Z\nECONOMY'S(2)  IY0 - K AA1 - N AH0 - M IY0 Z\nECONOMY(2)  IY0 - K AA1 - N AH0 - M IY0\nECONSHIPS  IY1 - K AA2 N - SH IH2 P S\nECOSYSTEM  IY1 - K OW0 - S IH2 - S T AH0 M\nECOSYSTEMS  IY1 - K OW0 - S IH2 - S T AH0 M Z\nECRU  EH1 - K R UW0\nECSTASY  EH1 K - S T AH0 - S IY0\nECSTATIC  EH0 K - S T AE1 - T IH0 K\nECSTATICALLY  EH0 K - S T AE1 - T IH0 K - L IY0\nECTON  EH1 K - T AH0 N\nECTOR  EH1 K - T ER0\nECUADOR  EH1 - K W AH0 - D AO2 R\nECUADOR'S  EH1 - K W AH0 - D AO2 R Z\nECUADORAN  EH2 - K W AH0 - D AO1 - R AH0 N\nECUADOREAN  EH2 - K W AH0 - D AO1 - R IY0 - AH0 N\nECUADORIAN  EH2 - K W AH0 - D AO1 - R IY0 - AH0 N\nECUMENA  EH2 - K Y UW0 - M IY1 - N AH0\nECUMENICAL  EH2 - K Y UW0 - M EH1 - N IH0 - K AH0 L\nECZEMA  EH1 K - S AH0 - M AH0\nED  EH1 D\nED'S  EH1 D Z\nEDA  IY1 - D AH0\nEDAM  IY1 - D AH0 M\nEDAN  IY1 - D AH0 N\nEDANA  EH0 - D AE1 - N AH0\nEDBERG  EH1 D - B ER0 G\nEDBERT  EH1 D - B ER0 T\nEDDIE  EH1 - D IY0\nEDDIE'S  EH1 - D IY2 Z\nEDDIES  EH1 - D IY0 Z\nEDDINGER  EH1 - D IH0 - NG ER0\nEDDINGS  EH1 - D IH0 NG Z\nEDDINGTON  EH1 - D IH0 NG - T AH0 N\nEDDINS  EH1 - D IH0 N Z\nEDDLEMAN  EH1 - D AH0 L - M AH0 N\nEDDLEMON  EH1 - D AH0 L - M AA0 N\nEDDS  EH1 D Z\nEDDY  EH1 - D IY0\nEDE  IY1 D\nEDEL  EH1 - D AH0 L\nEDELEN  EH1 - D AH0 - L AH0 N\nEDELINE  EH1 - D IH0 - L AY0 N\nEDELL  IH0 - D EH1 L\nEDELMAN  EH1 - D AH0 L - M AH0 N\nEDELMAN'S  EH1 - D AH0 L - M AH0 N Z\nEDELMAN'S(2)  EY1 - D AH0 L - M AH0 N Z\nEDELMAN(2)  EY1 - D AH0 L - M AH0 N\nEDELMANN  EH1 - D AH0 L - M AH0 N\nEDELMAR  EH1 - D IH0 L - M ER0\nEDELSON  EH1 - D IH0 L - S AH0 N\nEDELSTEIN  EH1 - D AH0 L - S T AY2 N\nEDELSTEIN(2)  EH1 - D AH0 L - S T IY2 N\nEDELWEISS  EY1 - D AH0 L - V AY2 S\nEDEMA  IH0 - D IY1 - M AH0\nEDEN  IY1 - D AH0 N\nEDENFIELD  EH1 - D AH0 N - F IY2 L D\nEDENS  IY1 - D AH0 N Z\nEDENTON  EH1 - D AH0 N - T AH0 N\nEDER  EH1 - D ER0\nEDERER  EH1 - D ER0 - ER0\nEDES  IY1 D Z\nEDGAR  EH1 D - G ER0\nEDGAR'S  EH1 D - G ER0 Z\nEDGCOMB  EH1 JH - K AH0 M\nEDGE  EH1 JH\nEDGECOMB  EH1 JH - K AO0 M\nEDGECOMBE  EH1 JH - K OW0 M\nEDGED  EH1 JH D\nEDGELL  EH1 - JH AH0 L\nEDGEMON  EH1 JH - M AH0 N\nEDGER  EH1 - JH ER0\nEDGERLY  EH1 - JH ER0 - L IY0\nEDGERTON  EH1 - JH ER0 - T AH0 N\nEDGES  EH1 - JH AH0 Z\nEDGES(2)  EH1 - JH IH0 Z\nEDGETT  EH1 - JH IH0 T\nEDGEWAY  EH1 JH - W EY2\nEDGEWAYS  EH1 JH - W EY2 Z\nEDGEWISE  EH1 JH - W AY2 Z\nEDGEWOOD  EH1 JH - W UH2 D\nEDGEWORTH  EH1 JH - W ER0 TH\nEDGIN  EH1 - JH IH0 N\nEDGINESS  EH1 - JH IY0 - N AH0 S\nEDGING  EH1 - JH IH0 NG\nEDGINGTON  EH1 - JH IH0 NG - T AH0 N\nEDGINGTON'S  EH1 - JH IH0 NG - T AH0 N Z\nEDGLEY  EH1 JH - L IY0\nEDGMON  EH1 JH - M AH0 N\nEDGREN  EH1 D - G R EH0 N\nEDGY  EH1 - JH IY0\nEDI  IY1 - D IY0\nEDIBLE  EH1 - D AH0 - B AH0 L\nEDIBLES  EH1 - D AH0 - B AH0 L Z\nEDICK  EH1 - D IH0 K\nEDICT  IY1 - D IH0 K T\nEDICTS  IY1 - D IH0 K T S\nEDIE  EH1 - D IY0\nEDIFICATION  EH2 - D AH0 - F AH0 - K EY1 - SH AH0 N\nEDIFICE  EH1 - D AH0 - F AH0 S\nEDIFY  EH1 - D AH0 - F AY2\nEDIFYING  EH1 - D AH0 - F AY2 - IH0 NG\nEDIGER  EH1 - D IH0 - G ER0\nEDIN  EH1 - D IH0 N\nEDINA  AH0 - D IY1 - N AH0\nEDINBORO  EH1 - D AH0 N - B ER0 - OW0\nEDINBURGH  EH1 - D AH0 N - B ER0 - OW0\nEDINGER  EH1 - D IH0 - NG ER0\nEDINGTON  EH1 - D IH0 NG - T AH0 N\nEDISON  EH1 - D IH0 - S AH0 N\nEDISON'S  EH1 - D IH0 - S AH0 N Z\nEDISTO  EH1 - D IH0 - S T OW0\nEDIT  EH1 - D AH0 T\nEDITED  EH1 - D AH0 - T AH0 D\nEDITED(2)  EH1 - D IH0 - T IH0 D\nEDITH  IY1 - D IH0 TH\nEDITHA  EH1 - D IH0 - DH AH0\nEDITHE  EH1 - D IH0 DH\nEDITING  EH1 - D AH0 - T IH0 NG\nEDITING(2)  EH1 - D IH0 - T IH0 NG\nEDITION  AH0 - D IH1 - SH AH0 N\nEDITION'S  IH0 - D IH1 - SH AH0 N Z\nEDITION(2)  IH0 - D IH1 - SH AH0 N\nEDITIONS  IH0 - D IH1 - SH AH0 N Z\nEDITOR  EH1 - D AH0 - T ER0\nEDITOR'S  EH1 - D IH0 - T ER0 Z\nEDITOR(2)  EH1 - D IH0 - T ER0\nEDITORIAL  EH2 - D AH0 - T AO1 - R IY0 - AH0 L\nEDITORIAL'S  EH2 - D AH0 - T AO1 - R IY0 - AH0 L Z\nEDITORIALIST  EH2 - D AH0 - T AO1 - R IY0 - AH0 - L IH0 S T\nEDITORIALISTS  EH2 - D AH0 - T AO1 - R IY0 - AH0 - L IH0 S T S\nEDITORIALISTS(2)  EH2 - D AH0 - T AO1 - R IY0 - AH0 - L IH0 S S\nEDITORIALISTS(3)  EH2 - D AH0 - T AO1 - R IY0 - AH0 - L IH0 S\nEDITORIALIZE  EH2 - D AH0 - T AO1 - R IY0 - AH0 - L AY2 Z\nEDITORIALIZED  EH2 - D AH0 - T AO1 - R IY0 - AH0 - L AY2 Z D\nEDITORIALIZING  EH2 - D AH0 - T AO1 - R IY0 - AH0 - L AY2 - Z IH0 NG\nEDITORIALLY  EH2 - D AH0 - T AO1 - R IY0 - AH0 - L IY0\nEDITORIALS  EH2 - D AH0 - T AO1 - R IY0 - AH0 L Z\nEDITORS  EH1 - D IH0 - T ER0 Z\nEDITORS'  EH1 - D IH0 - T ER0 Z\nEDITORSHIP  EH1 - D AH0 - T ER0 - SH IH2 P\nEDITS  EH1 - D IH0 T S\nEDIVA  EH0 - D IY1 - V AH0\nEDIVAL  EH0 - D IY1 - V AH0 L\nEDIVAL(2)  EH1 - D IY0 - V AE2 L\nEDIZIONE  EH0 - D IY2 - Z IY0 - OW1 - N IY0\nEDLEMAN  EH1 - D AH0 L - M AH0 N\nEDLER  EH1 D - L ER0\nEDLEY  EH1 D - L IY0\nEDLIN  EH1 D - L IH0 N\nEDLING  EH1 D - L IH0 NG\nEDLUND  EH1 D - L AH0 N D\nEDLYN  EH1 D - L IH0 N\nEDMAN  EH1 D - M AH0 N\nEDMANDS  EH1 D - M AH0 N D Z\nEDMAR  EH1 D - M AA0 R\nEDMARK  EH1 D - M AA0 R K\nEDMINSTER  IH0 D - M IH1 N - S T ER0\nEDMISON  EH1 D - M IH0 - S AH0 N\nEDMISTEN  EH0 D - M IH1 - S AH0 N\nEDMISTER  EH1 D - M IH0 - S T ER0\nEDMISTON  EH1 D - M IH0 - S T AA0 N\nEDMOND  EH1 D - M AH0 N D\nEDMONDA  EH2 D - M AA1 N - D AH0\nEDMONDS  EH1 D - M AH0 N D Z\nEDMONDSON  EH1 D - M AH0 N D - S AH0 N\nEDMONSON  EH1 D - M AH0 N - S AH0 N\nEDMONSTON  IH0 D - M AA1 N - S T AH0 N\nEDMONTON  EH1 D - M AH0 N - T AH0 N\nEDMUND  EH1 D - M AH0 N D\nEDMUNDA  EH2 D - M AH1 N - D AH0\nEDMUNDO  EH2 D - M AH1 N - D OW0\nEDMUNDS  EH1 D - M AH0 N D Z\nEDMUNDSON  EH1 D - M AH0 N D - S AH0 N\nEDNA  EH1 D - N AH0\nEDNEY  EH1 D - N IY0\nEDO  IY1 - D OW0\nEDOARDO  EH2 D - W AA1 R - D OW0\nEDOLF  EH1 - D OW0 L F\nEDOUARD  EH1 - D UW0 - AA0 R D\nEDPER  EH1 D - P ER0\nEDQUIST  EH1 D - K W IH2 S T\nEDRA  EH1 - D R AH0\nEDREA  EH1 - D R IY0 - AH0\nEDRIC  EH1 D - R IH0 K\nEDRINGTON  EH1 - D ER0 - IH0 NG - T AH0 N\nEDRIS  IH0 - D R IY1 S\nEDSALL  IH0 D - S AO1 L\nEDSEL  EH1 D - S AH0 L\nEDSON  EH1 D - S AH0 N\nEDSTROM  EH1 D - S T R AH0 M\nEDUARD  EH1 D - W ER0 D\nEDUARDO  EH0 D - W AA1 R - D OW0\nEDUCATE  EH1 - JH AH0 - K EY2 T\nEDUCATE(2)  EH1 - JH Y UW0 - K EY2 T\nEDUCATED  EH1 - JH AH0 - K EY2 - T AH0 D\nEDUCATED(2)  EH1 - JH Y UW0 - K EY2 - T AH0 D\nEDUCATES  EH1 - JH AH0 - K EY2 T S\nEDUCATES(2)  EH1 - JH Y AH0 - K EY2 T S\nEDUCATES(3)  EH1 - JH UW0 - K EY2 T S\nEDUCATES(4)  EH1 - JH Y UW0 - K EY2 T S\nEDUCATING  EH1 - JH AH0 - K EY2 - T IH0 NG\nEDUCATING(2)  EH1 - JH Y UW0 - K EY2 - T IH0 NG\nEDUCATION  EH2 - JH AH0 - K EY1 - SH AH0 N\nEDUCATION'S  EH2 - JH AH0 - K EY1 - SH AH0 N Z\nEDUCATION'S(2)  EH2 - JH Y UW0 - K EY1 - SH AH0 N Z\nEDUCATION(2)  EH2 - JH Y UW0 - K EY1 - SH AH0 N\nEDUCATIONAL  EH2 - JH AH0 - K EY1 - SH AH0 - N AH0 L\nEDUCATIONAL(2)  EH2 - JH Y UW0 - K EY1 - SH AH0 - N AH0 L\nEDUCATIONALLY  EH2 - JH AH0 - K EY1 - SH AH0 N - AH0 - L IY0\nEDUCATIONALLY(2)  EH2 - JH AH0 - K EY1 SH - N AH0 - L IY0\nEDUCATIONALLY(3)  EH2 - JH Y UW0 - K EY1 - SH AH0 N - AH0 - L IY0\nEDUCATIONALLY(4)  EH2 - JH Y UW0 - K EY1 SH - N AH0 - L IY0\nEDUCATIONS  EH2 - JH AH0 - K EY1 - SH AH0 N Z\nEDUCATIONS(2)  EH2 - JH Y UW0 - K EY1 - SH AH0 N Z\nEDUCATOR  EH1 - JH AH0 - K EY2 - T ER0\nEDUCATOR(2)  EH1 - JH Y UW0 - K EY2 - T ER0\nEDUCATORS  EH1 - JH AH0 - K EY2 - T ER0 Z\nEDUCATORS(2)  EH1 - JH Y UW0 - K EY2 - T ER0 Z\nEDWALD  IH0 D - W AO1 L D\nEDWARD  EH1 D - W ER0 D\nEDWARD'S  EH1 D - W ER0 D Z\nEDWARDIAN  EH0 D - W AO1 R - D IY0 - AH0 N\nEDWARDINE  IH0 D - W AO1 R - D AY0 N\nEDWARDS  EH1 D - W ER0 D Z\nEDWARDS'  EH1 D - W ER0 D Z\nEDWARDS'S  EH1 D - W ER0 D - Z IH0 Z\nEDWARDSON  EH1 D - W AO0 R D - S AH0 N\nEDWIN  EH1 D - W AH0 N\nEDWIN(2)  EH1 D - W IH0 N\nEDWINA  EH0 D - W IY1 - N AH0\nEDYE  EH1 - D IY0\nEDYE(2)  IY1 - D IY0\nEDYTH  EH1 - D IH0 TH\nEDYTHE  EH1 - D AY0 DH\nEDZARD  EH1 D - Z ER0 D\nEE  IY1\nEEG  IY1 G\nEEL  IY1 L\nEELAM  IY1 - L AE0 M\nEELGRASS  IY1 L - G R AE2 S\nEELLIKE  IY1 L - L AY2 K\nEELPOUT  IY1 L P - AW2 T\nEELPOUTS  IY1 L P - AW2 T S\nEELS  IY1 L Z\nEEO  IY1 - IY1 - OW1\nEERIE  IH1 - R IY0\nEERILY  IH1 - R AH0 - L IY0\nEFAW  EH1 - F AO0\nEFFACE  IH0 - F EY1 S\nEFFACING  IH0 - F EY1 - S IH0 NG\nEFFECT  IH0 - F EH1 K T\nEFFECT(2)  IY1 - F EH0 K T\nEFFECT(3)  AH0 - F EH1 K T\nEFFECTED  IH0 - F EH1 K - T AH0 D\nEFFECTED(2)  IH0 - F EH1 K - T IH0 D\nEFFECTED(3)  IY1 - F EH0 K - T AH0 D\nEFFECTED(4)  IY1 - F EH0 K - T IH0 D\nEFFECTING  IH0 - F EH1 K - T IH0 NG\nEFFECTING(2)  IY1 - F EH0 K - T IH0 NG\nEFFECTIVE  IH0 - F EH1 K - T IH0 V\nEFFECTIVE(2)  IY1 - F EH0 K - T IH0 V\nEFFECTIVELY  IH0 - F EH1 K - T IH0 V - L IY0\nEFFECTIVELY(2)  IY1 - F EH0 K - T IH0 V - L IY0\nEFFECTIVENESS  IH0 - F EH1 K - T IH0 V - N AH0 S\nEFFECTIVENESS(2)  IY1 - F EH0 K - T IH0 V - N AH0 S\nEFFECTS  IH0 - F EH1 K T S\nEFFECTS(2)  IH0 - F EH1 K S\nEFFECTS(3)  IY1 - F EH0 K T S\nEFFECTS(4)  IY1 - F EH0 K S\nEFFECTUATE  IH0 - F EH1 K - CH UW0 - EY2 T\nEFFEMINATE  IY0 - F EH1 - M IH0 - N AH0 T\nEFFERENT  EH1 - F ER0 - AH0 N T\nEFFERSON  EH1 - F ER0 - S AH0 N\nEFFERTZ  EH1 - F ER0 T S\nEFFERVESCENT  EH2 - F ER0 - V EH1 - S AH0 N T\nEFFETE  EH0 - F IY1 T\nEFFICACIOUS  EH2 - F AH0 - K EY1 - SH AH0 S\nEFFICACY  EH1 - F IH0 - K AE2 - S IY0\nEFFICIENCIES  IH0 - F IH1 - SH AH0 N - S IY0 Z\nEFFICIENCY  IH0 - F IH1 - SH AH0 N - S IY0\nEFFICIENT  IH0 - F IH1 - SH AH0 N T\nEFFICIENTLY  IH0 - F IH1 - SH AH0 N T - L IY0\nEFFIE  EH1 - F IY0\nEFFIGY  EH1 - F IH0 - JH IY0\nEFFINGER  EH1 - F IH0 - NG ER0\nEFFINGHAM  EH1 - F IH0 - NG AH0 M\nEFFINGHAM(2)  EH1 - F IH0 NG - HH AH0 M\nEFFLER  EH1 - F L ER0\nEFFLUENT  EH1 - F L UW0 - AH0 N T\nEFFLUX  EH1 - F L AH0 K S\nEFFORT  EH1 - F ER0 T\nEFFORTLESS  EH1 - F ER0 T - L AH0 S\nEFFORTLESSLY  EH1 - F ER0 T - L AH0 S - L IY0\nEFFORTS  EH1 - F ER0 T S\nEFFRON  EH1 - F R AH0 N\nEFFRONTERY  IH0 - F R AH1 N - T ER0 - IY0\nEFFUSIVE  EH1 - F Y UW0 - S IH0 V\nEFFUSIVELY  IH0 - F Y UW1 - S IH0 V - L IY0\nEFFY  EH1 - F IY0\nEFIRD  EH1 - F ER0 D\nEFRON  EH1 - F R AH0 N\nEFTA  EH1 F - T AH0\nEGALDEY  IY1 - G AH0 L - D EY0\nEGALITARIAN  IH0 - G AE2 - L AH0 - T EH1 - R IY0 - AH0 N\nEGALITARIANISM  IY0 - G AE2 - L AH0 - T EH1 - R IY0 - AH0 - N IH2 - Z AH0 M\nEGAN  IY1 - G AH0 N\nEGBERT  EH1 G - B ER0 T\nEGBERTA  EY0 G - B EH1 R - T AH0\nEGBERTINA  EH0 G - B ER0 - T IY1 - N AH0\nEGBERTINE  EH1 G - B ER0 - T IY2 N\nEGBERTS  EH1 G - B ER0 T S\nEGE  IY1 JH\nEGELAND  EH1 - G IH0 - L AH0 N D\nEGELER  EH1 - G AH0 - L ER0\nEGELHOFF  EH1 - G IH0 L - HH AO0 F\nEGELSTON  EH1 - G IH0 L - S T AH0 N\nEGELTON  EH1 - G AH0 L - T AH0 N\nEGER  IY1 - G ER0\nEGERER  EH1 - G ER0 - ER0\nEGERT  EH1 - G ER0 T\nEGERTON  EH1 - G ER0 - T AH0 N\nEGG  EH1 G\nEGGE  EH1 G\nEGGEBRECHT  EH1 - G IH0 - B R IH0 K T\nEGGED  EH1 G D\nEGGEMEYER  EH1 - G IH0 - M AY2 - ER0\nEGGEN  EH1 - G AH0 N\nEGGENBERGER  EH1 - G AH0 N - B ER0 - G ER0\nEGGER  EH1 - G ER0\nEGGERS  EH1 - G ER0 Z\nEGGERT  EH1 - G ER0 T\nEGGHEAD  EH1 G - HH EH2 D\nEGGHEAD'S  EH1 G - HH EH2 D Z\nEGGLESTON  EH1 - G AH0 L - S T AH0 N\nEGGLETON  EH1 - G AH0 L - T AA0 N\nEGGPLANT  EH1 G - P L AE2 N T\nEGGPLANTS  EH1 G - P L AE2 N T S\nEGGS  EH1 G Z\nEGGSHELL  EH1 G - SH EH2 L\nEGGSHELLS  EH1 G - SH EH2 L Z\nEGGUM  EH1 - G AH0 M\nEGLAND  EH1 G - L AH0 N D\nEGLANTINE  EH1 G - L AH0 N - T AY2 N\nEGLE  EH1 - G AH0 L\nEGLER  EH1 G - L ER0\nEGLESTON  EH1 - G AH0 L - S T AA0 N\nEGLEY  EH1 G - L IY0\nEGLI  EH1 G - L IY0\nEGLIN  EH1 G - L IH0 N\nEGLISE  EH2 G - L IY1 S\nEGLOFF  EH1 G - L AO0 F\nEGLY  EH1 G - L IY0\nEGNER  EH1 G - N ER0\nEGNEW  IH0 G - N UW1\nEGNOR  EH1 G - N ER0\nEGO  IY1 - G OW0\nEGOCENTRIC  IY2 - G OW0 - S EH1 N - T R IH0 K\nEGOISM  IY1 - G OW0 - IH2 - Z AH0 M\nEGOLF  EH1 - G OW0 L F\nEGOMANIAC  IY2 - G OW0 - M EY1 - N IY0 - AE0 K\nEGON  IY1 - G AH0 N\nEGON(2)  IY1 - G AA2 N\nEGOS  IY1 - G OW0 Z\nEGOTISM  IY1 - G AH0 - T IH2 - Z AH0 M\nEGOTIST  IY1 - G AH0 - T IH0 S T\nEGOTISTICAL  IY2 - G AH0 - T IH1 - S T IH0 - K AH0 L\nEGREGIOUS  IH0 - G R IY1 - JH AH0 S\nEGREGIOUSLY  IH0 - G R IY1 - JH AH0 S - L IY0\nEGRESS  IH0 - G R EH1 S\nEGYPT  IY1 - JH AH0 P T\nEGYPT'S  IY1 - JH AH0 P T S\nEGYPT'S(2)  IY1 - JH IH0 P T S\nEGYPT(2)  IY1 - JH IH0 P T\nEGYPTAIR  IY1 - JH IH0 P - T EH2 R\nEGYPTIAN  IH0 - JH IH1 P - SH AH0 N\nEGYPTIANS  IH0 - JH IH1 P - SH AH0 N Z\nEGYPTOLOGY  IY2 - JH AH0 P - T AA1 - L AH0 - JH IY0\nEH  EH1\nEHINGER  EH1 - HH IH0 N - JH ER0\nEHLE  EH1 L\nEHLEN  EH1 - L AH0 N\nEHLER  EH1 - L ER0\nEHLERS  EH1 - L ER0 Z\nEHLERT  EH1 - L ER0 T\nEHLINGER  EH1 - L IH0 - NG ER0\nEHLKE  EH1 L K\nEHLY  EH1 - L IY0\nEHMAN  EH1 - M AH0 N\nEHMANN  EH1 - M AH0 N\nEHMEN  EH1 - M EH0 N\nEHMKE  EH1 M - K IY0\nEHREN  EH1 - R AH0 N\nEHRENBERG  EH1 - R AH0 N - B ER0 G\nEHRENFELD  EH1 - R IH0 N - F EH0 L D\nEHRENHALT  EH1 - R AH0 N - HH AO2 L T\nEHRENKRANTZ  EH1 - R AH0 N - K R AE2 N T S\nEHRENREICH  EH1 - R IH0 N - R AY0 K\nEHRENREICH(2)  EH1 - R AH0 N - R IH2 CH\nEHRESMAN  EH1 - R IH0 S - M AH0 N\nEHRET  EH1 - R IH0 T\nEHRHARD  EH1 R - HH ER0 D\nEHRHARDT  EH1 R - HH AA0 R T\nEHRHART  EH1 R - HH AA0 R T\nEHRICH  EH1 - R IH0 K\nEHRIG  EH1 - R IH0 G\nEHRKE  EH1 R K\nEHRLER  EH1 R - L ER0\nEHRLICH  ER1 - L IH0 K\nEHRLICHMAN  ER1 - L IH0 K - M AH0 N\nEHRMAN  EH1 R - M AH0 N\nEHRMANN  EH1 R - M AH0 N\nEHRSAM  EH1 R - S AH0 M\nEHUD  EH0 - HH AH1 D\nEIBEN  AY1 - B AH0 N\nEICH  AY1 K\nEICHBERG  AY1 K - B ER0 G\nEICHEL  AY1 - K AH0 L\nEICHELBERGER  AY1 - K AH0 L - B ER0 - G ER0\nEICHEN  AY1 - K AH0 N\nEICHENBAUM  AY1 - K AH0 N - B AW2 M\nEICHENBERG  AY1 - K AH0 N - B ER0 G\nEICHENBERGER  AY1 - K AH0 N - B ER0 - G ER0\nEICHENLAUB  AY1 - K IH0 N - L AW0 B\nEICHER  AY1 - K ER0\nEICHHOLZ  AY1 K - HH OW0 L Z\nEICHHORN  AY1 K - HH ER0 N\nEICHHORST  AY1 K - HH AO0 R S T\nEICHINGER  AY1 - K IH0 N - JH ER0\nEICHLER  AY1 - K AH0 - L ER0\nEICHLER(2)  AY1 - K L ER0\nEICHMAN  AY1 K - M AH0 N\nEICHMANN  AY1 K - M AH0 N\nEICHNER  AY1 K - N ER0\nEICHOLTZ  AY1 - K OW0 L T S\nEICHORN  AY1 - K AO0 R N\nEICHORST  AY1 K - HH AO0 R S T\nEICHSTADT  AY1 K - S T AE0 T\nEICHSTAEDT  AY1 K - S T AE0 T\nEICK  AY1 K\nEICKHOFF  AY1 K - HH AO2 F\nEICKHOLT  AY1 K - HH OW2 L T\nEICKMEYER  AY1 K - M AY0 - ER0\nEID  AY1 D\nEIDE  AY1 D\nEIDEM  AY1 - D IH0 M\nEIDEN  AY1 - D AH0 N\nEIDSON  IY1 D - S AH0 N\nEIERMANN  AY1 R - M AH0 N\nEIFERT  AY1 - F ER0 T\nEIFFEL  AY1 - F AH0 L\nEIFLER  AY1 - F AH0 - L ER0\nEIFLER(2)  AY1 F - L ER0\nEIGEN  AY1 - G AH0 N\nEIGHMEY  EY1 - M IY0\nEIGHMY  EY1 G - M IY0\nEIGHT  EY1 T\nEIGHT'S  EY1 T S\nEIGHTEEN  EY0 - T IY1 N\nEIGHTEEN'S  EY0 - T IY1 N Z\nEIGHTEEN(2)  EY1 - T IY1 N\nEIGHTEENS  EY0 - T IY1 N Z\nEIGHTEENTH  EY0 - T IY1 N TH\nEIGHTEENTH(2)  EY1 - T IY1 N TH\nEIGHTFOLD  EY1 T - F OW2 L D\nEIGHTH  EY1 T TH\nEIGHTH(2)  EY1 TH\nEIGHTHS  EY1 T TH S\nEIGHTIES  EY1 - T IY0 Z\nEIGHTIETH  EY1 - T IY0 - IH0 TH\nEIGHTS  EY1 T S\nEIGHTY  EY1 - T IY0\nEIGHTY'S  EY1 - T IY0 Z\nEIGNER  AY1 G - N ER0\nEIICHI  EY0 - IY1 - CH IY0\nEIJI  EY1 - JH IY0\nEIKE  AY1 K\nEIKENBERRY  IY1 - K AH0 N - B EH0 - R IY0\nEILAN  AY1 - L AH0 N\nEILAND  AY1 - L AH0 N D\nEILEEN  AY0 - L IY1 N\nEILER  AY1 - L ER0\nEILERMAN  AY1 - L ER0 - M AH0 N\nEILERS  AY1 - L ER0 Z\nEILERT  AY1 - L ER0 T\nEILEY  AY1 - L IY0\nEILTS  AY1 L T S\nEIMER  AY1 - M ER0\nEIMERS  AY1 - M ER0 Z\nEIN  AY1 N\nEINAR  AY1 - N ER0\nEINBENDER  AY1 N - B EH2 N - D ER0\nEINDHOVEN  AY1 N D - HH OW2 - V AH0 N\nEINHORN  AY1 N - HH AO2 R N\nEINON  AY1 - N AO0 N\nEINON'S  AY1 - N AO0 N Z\nEINSPAHR  AY1 N - S P AA0 R\nEINSTEIN  AY1 N - S T AY0 N\nEINSTEIN'S  AY1 N - S T AY0 N Z\nEIR  AY1 R\nEIRENA  ER0 - EY1 - N AH0\nEIRICH  AY1 - R IH0 K\nEIS  AY1 Z\nEISA  EY1 - S AH0\nEISAI  AY1 - S AY2\nEISAMAN  AY1 - S AH0 - M AH0 N\nEISCHEID  AY1 - SH AY0 D\nEISCHEN  AY1 - SH AH0 N\nEISCHENS  AY1 - SH AH0 N Z\nEISEL  AY1 - S AH0 L\nEISELE  AY1 - S AH0 L\nEISEMAN  AY1 S - M AH0 N\nEISEMANN  AY1 S - M AH0 N\nEISEN  AY1 - S AH0 N\nEISENACH  AY1 - Z AH0 - N AA2 K\nEISENBACH  AY1 - Z AH0 N - B AA0 K\nEISENBARTH  AY1 - Z AH0 N - B AA0 R TH\nEISENBEIS  AY1 - Z AH0 N - B AY0 S\nEISENBERG  AY1 - Z AH0 N - B ER0 G\nEISENBERGER  AY1 - Z AH0 N - B ER0 - G ER0\nEISENBRAUN  AY1 - Z AH0 N - B R AW0 N\nEISENHARDT  AY1 - Z AH0 N - HH AA0 R T\nEISENHART  AY1 - Z AH0 N - HH AA0 R T\nEISENHAUER  AY1 - Z AH0 N - HH AW0 - ER0\nEISENHOUR  AY1 - Z AH0 - N AW0 R\nEISENHOWER  AY1 - Z AH0 N - HH AW2 - ER0\nEISENHOWER'S  AY1 - Z AH0 N - HH AW2 - ER0 Z\nEISENHOWERS  AY1 - Z AH0 N - HH AW2 - ER0 Z\nEISENHUT  AY1 - Z AH0 N - HH AH0 T\nEISENHUTH  AY1 - Z AH0 N - HH UW0 TH\nEISENMAN  AY1 - Z AH0 N - M AH0 N\nEISENMANN  AY1 - Z AH0 N - M AH0 N\nEISENMENGER  AY1 - Z AH0 N - M EH0 - NG ER0\nEISENSTADT  AY1 - Z AH0 N - S T AE0 T\nEISENSTEIN  AY1 - Z AH0 N - S T AY0 N\nEISENSTEIN(2)  AY1 - Z AH0 N - S T IY0 N\nEISERMAN  AY1 - Z ER0 - M AH0 N\nEISERT  AY1 - S ER0 T\nEISHI  EY1 - SH IY0\nEISIN  AY1 - S AH0 N\nEISINGER  AY1 - S IH0 N - JH ER0\nEISLER  AY1 S - L ER0\nEISMAN  AY1 S - M AH0 N\nEISNER  AY1 S - N ER0\nEISNER'S  AY1 S - N ER0 Z\nEISON  AY1 - Z AH0 N\nEISSLER  AY1 - S AH0 - L ER0\nEISSLER(2)  AY1 S - L ER0\nEISZNER  AY1 Z - N ER0\nEITEL  AY1 - T AH0 L\nEITHER  IY1 - DH ER0\nEITHER(2)  AY1 - DH ER0\nEITZEN  AY1 T - Z AH0 N\nEIZENSTAT  AY1 - Z AH0 N - S T AE2 T\nEJACULATE  IH0 - JH AE1 - K Y UW0 - L EY2 T\nEJACULATION  IY0 - JH AE2 - K Y UW0 - L EY1 - SH AH0 N\nEJECT  IH0 - JH EH1 K T\nEJECTED  IH0 - JH EH1 K - T IH0 D\nEJECTION  IH0 - JH EH1 K - SH AH0 N\nEJUP  IY1 - JH AH0 P\nEJUP'S  IY1 - JH AH0 P S\nEJUP'S(2)  IY1 - JH UW0 P S\nEJUP(2)  IY1 - JH UW0 P\nEK  EH1 K\nEK(2)  IY1 - K EY1\nEKA  EH1 - K AH0\nEKATERINA  EY0 - K AA0 - T EH0 - R IY1 - N AH0\nEKBERG  EH1 K - B ER0 G\nEKBLAD  EH1 K - B L AE2 D\nEKCO  EH1 - K OW0\nEKDAHL  EH1 K - D AA2 L\nEKE  IY1 K\nEKED  IY1 K T\nEKERN  EH1 - K ER0 N\nEKEUS  IY2 - K UW1 S\nEKHOLM  EH1 K - HH OW2 L M\nEKING  IY1 - K IH0 NG\nEKINS  EH1 - K IH0 N Z\nEKK  IY1 - K EY1 - K EY1\nEKKEHARD  EH1 K - HH AA2 R D\nEKLUND  EH1 K - L AH0 N D\nEKMAN  EH1 K - M AH0 N\nEKO  EH1 - K OW0\nEKOFISK  EH1 - K AH0 - F IH0 S K\nEKSPORTFINANS  EH1 K - S P AO2 R T - F IH0 - N AH0 N Z\nEKSTRAND  EH1 K - S T R AH0 N D\nEKSTROM  EH1 K - S T R AH0 M\nEL  EH1 L\nEL-GRECO  EH1 L - G R EH1 - K OW0\nEL-PASO  EH1 L - P AE1 - S OW0\nEL-SALVADOR  EH1 L - S AE1 L - V AH0 - D AO2 R\nELA  EH1 - L AH0\nELABORATE  IH0 - L AE1 - B R AH0 T\nELABORATE(2)  IH0 - L AE1 - B ER0 - EY2 T\nELABORATED  IH0 - L AE1 - B ER0 - EY0 - T AH0 D\nELABORATELY  IH0 - L AE1 - B R AH0 T - L IY0\nELABORATES  IH0 - L AE1 - B ER0 - EY2 T S\nELABORATING  IH0 - L AE1 - B ER0 - EY2 - T IH0 NG\nELABORATION  IH0 - L AE2 - B ER0 - EY1 - SH AH0 N\nELAINA  IH0 - L EY1 - N AH0\nELAINE  IH0 - L EY1 N\nELAINE'S  AH0 - L EY1 N Z\nELAINE'S(2)  IY2 - L EY1 N Z\nELAINE'S(3)  IH0 - L EY1 N Z\nELAINE(2)  AH0 - L EY1 N\nELAINE(3)  IY2 - L EY1 N\nELAM  EH1 - L AH0 M\nELAMIN  EH1 - L AH0 - M IH0 N\nELAN  IY1 - L AH0 N\nELAND  IY1 - L AH0 N D\nELANE  IH0 - L EY1 N\nELAPSE  IH0 - L AE1 P S\nELAPSED  IH0 - L AE1 P S T\nELARDO  EH0 - L AA1 R - D OW0\nELASTIC  IH0 - L AE1 - S T IH0 K\nELASTICITY  IY2 - L AE2 - S T IH1 - S AH0 - T IY0\nELASTOMER  IH0 - L AE1 - S T AH0 - M ER0\nELASTOMERS  IH0 - L AE1 - S T AH0 - M ER0 Z\nELAT  EH0 - L AE1 T\nELATA  EH0 - L AA1 - T AH0\nELATE  IH0 - L EY1 T\nELATED  IH0 - L EY1 - T AH0 D\nELATED(2)  IH0 - L EY1 - T IH0 D\nELATER  EH1 - L AH0 - T ER0\nELATER(2)  IH1 - L EY0 - T ER0\nELATERS  EH1 - L AH0 - T ER0 Z\nELATERS(2)  IH1 - L EY0 - T ER0 Z\nELATING  IH0 - L EY1 - T IH0 NG\nELATION  IH0 - L EY1 - SH AH0 N\nELAYNE  IH0 - L EY1 N\nELBAUM  EH1 L - B AW2 M\nELBE  EH1 L B\nELBER  EH1 L - B ER0\nELBERSON  EH1 L - B ER0 - S AH0 N\nELBERT  EH1 L - B ER0 T\nELBERTA  EH0 L - B EH1 R - T AH0\nELBERTINE  EH1 L - B ER0 - T IY2 N\nELBOW  EH1 L - B OW2\nELBOWED  EH1 L - B OW2 D\nELBOWING  EH1 L - B OW2 - IH0 NG\nELBOWROOM  EH1 L - B OW2 - R UW2 M\nELBOWS  EH1 L - B OW2 Z\nELBRUS  EH1 L - B R AH0 S\nELCHIBEY  EH1 L - CH AH0 - B EY0\nELCO  EH1 L - K OW0\nELCOCK  IH0 L - K AA1 K\nELCOR  EH1 L - K AO2 R\nELCOTEL  EH1 L - K OW0 - T EH2 L\nELDAR  EH1 L - D AA2 R\nELDEN  EH1 L - D AH0 N\nELDER  EH1 L - D ER0\nELDERKIN  EH1 L - D ER0 - K IH0 N\nELDERLY  EH1 L - D ER0 - L IY0\nELDERLY'S  EH1 L - D ER0 - L IY0 Z\nELDERS  EH1 L - D ER0 Z\nELDERS'  EH1 L - D ER0 Z\nELDERS'S  EH1 L - D ER0 - Z IH0 Z\nELDEST  EH1 L - D AH0 S T\nELDIN  EH1 L - D IH0 N\nELDON  IH0 L - D AA1 N\nELDORA  EH0 L - D AO1 - R AH0\nELDORADO  EH2 L - D ER0 - AA1 - D OW0\nELDORADO'S  EH2 L - D ER0 - AA1 - D OW0 Z\nELDRED  EH1 L - D ER0 D\nELDREDGE  IH0 L - D R EH1 JH\nELDRETH  IH0 L - D R EH1 TH\nELDRIC  EH1 L - D R IH0 K\nELDRIDA  EH0 L - D R IY1 - D AH0\nELDRIDGE  EH1 L - D R IH2 JH\nELDRITCH  EH1 L - D R IH0 CH\nELDWIN  IH0 L D - W IH1 N\nELEANOR  EH1 - L AH0 - N AO0 R\nELEANOR'S  EH1 - L AH0 - N AO0 R Z\nELEANOR'S(2)  EH1 - L AH0 - N ER0 Z\nELEANOR(2)  EH1 - L AH0 - N ER0\nELEANORA  EH2 - L AH0 - N AO1 - R AH0\nELEANORE  EH1 - L AH0 - N AO0 R\nELEAZER  EH1 - L AH0 - Z ER0\nELECT  IH0 - L EH1 K T\nELECT'S  IH0 - L EH1 K T S\nELECTABILITY  IH0 - L EH2 K - T AH0 - B IH1 - L AH0 - T IY0\nELECTABLE  IH0 - L EH1 K - T AH0 - B AH0 L\nELECTED  IH0 - L EH1 K - T AH0 D\nELECTED(2)  IH0 - L EH1 K - T IH0 D\nELECTING  IH0 - L EH1 K - T IH0 NG\nELECTION  IH0 - L EH1 K - SH AH0 N\nELECTION'S  IH0 - L EH1 K - SH AH0 N Z\nELECTIONEER  IH0 - L EH2 K - SH AH0 - N IH1 R\nELECTIONEERING  IH0 - L EH2 K - SH AH0 - N IH1 - R IH0 NG\nELECTIONEERS  IH0 - L EH2 K - SH AH0 - N IH1 R Z\nELECTIONS  IH0 - L EH1 K - SH AH0 N Z\nELECTIVE  IH0 - L EH1 K - T IH0 V\nELECTIVES  IH0 - L EH1 K - T IH0 V Z\nELECTORAL  IH0 - L EH1 K - T ER0 - AH0 L\nELECTORATE  IH0 - L EH1 K - T ER0 - AH0 T\nELECTORATE'S  IH0 - L EH1 K - T ER0 - AH0 T S\nELECTORATE(2)  IH0 - L EH1 K - T R IH0 T\nELECTORATES  IH0 - L EH1 K - T ER0 - AH0 T S\nELECTORS  IH0 - L EH1 K - T ER0 Z\nELECTRA  IH0 - L EH1 K - T R AH0\nELECTRIC  IH0 - L EH1 K - T R IH0 K\nELECTRIC'S  IH0 - L EH1 K - T R IH0 K S\nELECTRICAL  IH0 - L EH1 K - T R IH0 - K AH0 L\nELECTRICALLY  IH0 - L EH1 K - T R IH0 - K AH0 - L IY0\nELECTRICALLY(2)  IH0 - L EH1 K - T R IH0 K - L IY0\nELECTRICALS  IH0 - L EH1 K - T R IH0 - K AH0 L Z\nELECTRICAR  IH0 - L EH1 K - T R IH0 - K AA2 R\nELECTRICIAN  IH0 - L EH0 K - T R IH1 - SH AH0 N\nELECTRICIANS  IH0 - L EH0 K - T R IH1 - SH AH0 N Z\nELECTRICIANS'  IH0 - L EH0 K - T R IH1 - SH AH0 N Z\nELECTRICITE  AH0 - L EH2 K - T R IH1 - S IH2 - T EY0\nELECTRICITY  IH0 - L EH2 K - T R IH1 - S AH0 - T IY0\nELECTRICS  IH0 - L EH1 K - T R IH0 K S\nELECTRIFICATION  IH0 - L EH2 K - T R AH0 - F IH0 - K EY1 - SH AH0 N\nELECTRIFIED  IH0 - L EH1 K - T R AH0 - F AY2 D\nELECTRIFIES  IH0 - L EH1 K - T R AH0 - F AY2 Z\nELECTRIFY  IH0 - L EH1 K - T R AH0 - F AY2\nELECTRIFYING  IH0 - L EH1 K - T R AH0 - F AY2 - IH0 NG\nELECTRIQUE  EH2 - L EH0 K - T R IY1 K\nELECTRO  IH0 - L EH1 K - T R OW0\nELECTROBIOLOGY  IH0 - L EH1 K - T R OW0 - B AY0 - AA1 - L AH0 - JH IY0\nELECTROBIOLOGY'S  IH0 - L EH1 K - T R OW0 - B AY0 - AA1 - L AH0 - JH IY0 Z\nELECTROCARDIOGRAM  IH0 - L EH2 K - T R OW0 - K AA1 R - D IY0 - AH0 - G R AE2 M\nELECTROCARDIOGRAMS  IH0 - L EH2 K - T R OW0 - K AA1 R - D IY0 - AH0 - G R AE2 M Z\nELECTROCHEMICAL  AH0 - L EH2 K - T R OW0 - K EH1 - M IH0 - K AH0 L\nELECTROCOM  IH0 - L EH1 K - T R OW0 - K AA2 M\nELECTROCUTE  IH0 - L EH1 K - T R AH0 - K Y UW2 T\nELECTROCUTED  IH0 - L EH1 K - T R AH0 - K Y UW2 - T IH0 D\nELECTROCUTION  IH0 - L EH2 K - T R AH0 - K Y UW1 - SH AH0 N\nELECTROCUTIONS  AH0 - L EH2 K - T R AH0 - K Y UW1 - SH AH0 N Z\nELECTRODE  IH0 - L EH1 K - T R OW0 D\nELECTRODES  IH0 - L EH1 K - T R OW0 D Z\nELECTRODYNAMIC  IH0 - L EH2 K - T R OW0 - D AY2 - N AE1 - M IH0 K\nELECTRODYNAMICS  IH0 - L EH2 K - T R OW0 - D AY2 - N AE1 - M IH0 K S\nELECTROLUX  IH0 - L EH1 K - T R AH0 - L AH0 K S\nELECTROLYSIS  IH0 - L EH2 K - T R AA1 - L AH0 - S AH0 S\nELECTROLYTIC  IH0 - L EH2 K - T R AH0 - L IH1 - T IH0 K\nELECTROMAGNET  IH0 - L EH2 K - T R OW0 - M AE1 G - N AH0 T\nELECTROMAGNETIC  IH0 - L EH2 K - T R OW0 - M AE0 G - N EH1 - T IH0 K\nELECTROMAGNETISM  IH0 - L EH2 K - T R OW0 - M AE1 G - N AH0 - T IH2 - Z AH0 M\nELECTROMAGNETS  IH0 - L EH2 K - T R OW0 - M AE1 G - N AH0 T S\nELECTROMECHANICAL  IH0 - L EH2 K - T R OW0 - M AH0 - K AE1 - N IH0 - K AH0 L\nELECTROMEDICS  IH0 - L EH2 K - T R OW0 - M EH1 - D IH0 K S\nELECTRON  IH0 - L EH1 K - T R AA0 N\nELECTRONIC  IH0 - L EH2 K - T R AA1 - N IH0 K\nELECTRONICALLY  IH0 - L EH2 K - T R AA1 - N IH0 - K AH0 - L IY0\nELECTRONICALLY(2)  IH0 - L EH2 K - T R AA1 - N IH0 K - L IY0\nELECTRONICS  IH0 - L EH2 K - T R AA1 - N IH0 K S\nELECTRONICS'  IH0 - L EH2 K - T R AA1 - N IH0 K S\nELECTRONS  IH0 - L EH1 K - T R AA0 N Z\nELECTROPHORESIS  IH0 - L EH0 K - T R OW0 - F AO0 - R IH2 - S IH0 S\nELECTROPHORESIS(2)  IH0 - L EH0 K - T R OW0 - F ER0 - IY1 - S IH0 S\nELECTROPHORETOGRAM  IH0 - L EH2 K - T R AA0 - F AH0 - R EH1 - T AH0 - G R AE0 M\nELECTROPLATE  IH0 - L EH1 K - T R AH0 - P L EY2 T\nELECTROPLATING  IH0 - L EH1 K - T R AH0 - P L EY2 - T IH0 NG\nELECTROSHOCK  IH0 - L EH1 K - T R OW2 - SH AA2 K\nELECTROSOUND  IH0 - L EH1 K - T R OW0 - S AW2 N D\nELECTROSPACE  IH0 - L EH1 K - T R OW0 - S P EY2 S\nELECTROSPRAY  IH0 - L EH1 K - T R OW0 - S P R EY2\nELECTROSTATIC  IH0 - L EH2 K - T R OW0 - S T AE1 - T IH0 K\nELECTS  IH0 - L EH1 K T S\nELEDGE  EH1 - L IH0 JH\nELEEN  EH1 - L IY0 N\nELEFANTE  EH0 - L EH0 - F AA1 N - T IY0\nELEGANCE  EH1 - L AH0 - G AH0 N S\nELEGANT  EH1 - L AH0 - G AH0 N T\nELEGANTLY  EH1 - L IH0 - G AH0 N T - L IY0\nELEGY  EH1 - L AH0 - JH IY0\nELEK  EH1 - L IH0 K\nELEKTRA  EH0 - L EH1 K - T R AH0\nELEKTRISK  IH0 - L EH2 K - T R IH1 S K\nELEKTRIZITAETSWERK  EH2 - L IH0 K - T R IH1 - Z IH0 - T AE2 T S - W ER0 K\nELEMENT  EH1 - L AH0 - M AH0 N T\nELEMENTAL  EH2 - L AH0 - M EH1 N - T AH0 L\nELEMENTAL(2)  EH2 - L AH0 - M EH1 - N AH0 L\nELEMENTARY  EH2 - L AH0 - M EH1 N - T R IY0\nELEMENTARY(2)  EH2 - L AH0 - M EH1 N - T ER0 - R IY0\nELEMENTARY(3)  EH2 - L AH0 - M EH1 N - CH R IY0\nELEMENTS  EH1 - L AH0 - M AH0 N T S\nELENA  EH1 - L AH0 - N AH0\nELENA(2)  EH2 - L EY1 - N AH0\nELENBAAS  EH1 - L IH0 N - B AA0 Z\nELENE  EH1 - L IY0 N\nELENORE  EH1 - L IH0 - N ER0\nELEONORE  EH0 - L IY0 - AH0 - N AO1 - R IY0\nELEPHANT  EH1 - L AH0 - F AH0 N T\nELEPHANT'S  EH1 - L AH0 - F AH0 N T S\nELEPHANTINE  EH2 - L AH0 - F AE1 N - T IY2 N\nELEPHANTS  EH1 - L AH0 - F AH0 N T S\nELETR  EH1 - L AH0 - T ER0\nELEUTHERA  IH0 - L UW1 - TH ER0 - AH0\nELEVATE  EH1 - L AH0 - V EY2 T\nELEVATED  EH1 - L AH0 - V EY2 - T IH0 D\nELEVATES  EH1 - L AH0 - V EY2 T S\nELEVATING  EH1 - L AH0 - V EY2 - T IH0 NG\nELEVATION  EH2 - L AH0 - V EY1 - SH AH0 N\nELEVATIONS  EH2 - L AH0 - V EY1 - SH AH0 N Z\nELEVATOR  EH1 - L AH0 - V EY2 - T ER0\nELEVATORS  EH1 - L AH0 - V EY2 - T ER0 Z\nELEVEN  IH0 - L EH1 - V AH0 N\nELEVEN'S  IH0 - L EH1 - V AH0 N Z\nELEVEN'S(2)  IY1 - L EH0 - V AH0 N Z\nELEVEN(2)  IY1 - L EH0 - V AH0 N\nELEVENS  IH0 - L EH1 - V AH0 N Z\nELEVENS(2)  IY1 - L EH0 - V AH0 N Z\nELEVENTH  IH0 - L EH1 - V AH0 N TH\nELEVENTH(2)  IY1 - L EH0 - V AH0 N TH\nELEXIS  EH0 - L EH1 K - S IH0 S\nELEY  IY1 - L IY0\nELF  EH1 L F\nELF'S  EH1 L F S\nELFERS  EH1 L - F ER0 Z\nELFIE  EH1 L - F IY0\nELFIN  EH1 L - F IH0 N\nELFMAN  EH1 L F - M AH0 N\nELFORD  EH1 L - F ER0 D\nELFREDA  EH0 L - F R EH1 - D AH0\nELFRIDA  EH0 L - F R IY1 - D AH0\nELFRIEDA  EH0 L - F R IY1 - D AH0\nELFRINK  EH1 L - F R IH0 NG K\nELFSTROM  EH1 L F S - T R AH0 M\nELG  EH1 L G\nELGA  IH0 L - G AA1\nELGABROWNY  EH0 L - G AH0 - B R AW1 - N IY0\nELGAR  EH1 L - G ER0\nELGAR'S  EH1 L - G ER0 Z\nELGART  EY1 L - G AA0 R T\nELGER  EH1 L - G ER0\nELGERSMA  EH0 L - JH EH1 R S - M AH0\nELGIE  EH1 L - JH IY0\nELGIN  EH1 L - JH IH0 N\nELI  IY1 - L AY0\nELIA  AH0 - L AY1 - AH0\nELIADES  IY1 - L IY2 - EY0 D Z\nELIAS  AH0 - L AY1 - AH0 S\nELIASON  AH0 - L AY1 - AH0 - S AH0 N\nELIASSEN  AH0 - L AY1 - AH0 - S AH0 N\nELICH  EH1 - L IH0 K\nELICIT  IH0 - L IH1 - S IH0 T\nELICITED  IH0 - L IH1 - S IH0 - T IH0 D\nELICITING  IH0 - L IH1 - S AH0 - T IH0 NG\nELICITS  IH0 - L IH1 - S AH0 T S\nELICK  EH1 - L IH0 K\nELICKER  EH1 - L IH0 - K ER0\nELIE  EH1 - L IY0\nELIGIBILITY  EH2 - L IH0 - JH AH0 - B IH1 - L IH0 - T IY0\nELIGIBLE  EH1 - L AH0 - JH AH0 - B AH0 L\nELIGIBLE(2)  EH1 - L IH0 - JH AH0 - B AH0 L\nELIHU  EH1 - L IH0 - HH UW0\nELIJAH  EH0 - L AY1 - JH AH0\nELIJAH(2)  IY0 - L AY1 - JH AH0\nELIMINATE  IH0 - L IH1 - M AH0 - N EY2 T\nELIMINATED  IH0 - L IH1 - M AH0 - N EY2 - T AH0 D\nELIMINATED(2)  IH0 - L IH1 - M AH0 - N EY2 - T IH0 D\nELIMINATES  IH0 - L IH1 - M AH0 - N EY2 T S\nELIMINATING  IH0 - L IH1 - M AH0 - N EY2 - T IH0 NG\nELIMINATION  IH0 - L IH2 - M AH0 - N EY1 - SH AH0 N\nELIMINATIONS  IH0 - L IH2 - M IH0 - N EY1 - SH AH0 N Z\nELINE  EH1 - L AY0 N\nELINOR  EH1 - L IH0 - N ER0\nELINORE  EH0 - L IY0 - N AO1 - R IY0\nELIO  EH1 - L IY0 - OW0\nELIOPOULOS  EH0 - L IY0 - AA1 - P AH0 - L IH0 S\nELIOT  EH1 - L IY0 - AH0 T\nELIOT'S  EH1 - L IY0 - AH0 T S\nELIOTT  EH1 - L IY0 - AA0 T\nELISA  AH0 - L IY1 - S AH0\nELISA'S  AH0 - L IY1 - S AH0 Z\nELISA'S(2)  AH0 - L IY1 - Z AH0 Z\nELISA(2)  AH0 - L IY1 - Z AH0\nELISABETH  IH0 - L IH1 - Z AH0 - B IH0 TH\nELISE  AH0 - L IY1 S\nELISH  EH1 - L IH0 SH\nELISHA  EH1 - L IH0 - SH AH0\nELISON  EH1 - L IH0 - S AH0 N\nELISSA  EH0 - L IY1 - S AH0\nELITE  IH0 - L IY1 T\nELITE(2)  EY0 - L IY1 T\nELITES  IH0 - L IY1 T S\nELITES(2)  EY0 - L IY1 T S\nELITISM  EH1 - L IH0 - T IH2 - Z AH0 M\nELITISM(2)  EY0 - L IY1 - T IH2 - Z AH0 M\nELITIST  EY0 - L IY1 - T IH0 S T\nELITIST(2)  IH0 - L IY1 - T IH0 S T\nELITISTS  EY0 - L IY1 - T IH0 S T S\nELITISTS(2)  IH0 - L IY1 - T IH0 S T S\nELITISTS(3)  IH0 - L IY1 - T IH0 S S\nELITISTS(4)  IH0 - L IY1 - T IH0 S\nELIXIR  IH0 - L IH1 K - S ER0\nELIZA  IH0 - L AY1 - Z AH0\nELIZABETH  IH0 - L IH1 - Z AH0 - B AH0 TH\nELIZABETH'S  IH0 - L IH1 - Z AH0 - B AH0 TH S\nELIZABETH(2)  IH0 - L IH1 - Z AH0 - B IH0 TH\nELIZABETHAN  EH2 - L IH0 - Z AH0 - B IY1 - TH AH0 N\nELIZABETHTOWN  AH0 - L IH1 - Z AH0 - B EH0 TH - T AW2 N\nELIZALDE  EH0 - L IY0 - Z AA1 L - D IY0\nELIZONDO  EH2 - L IH0 - Z AA1 N - D OW0\nELJER  EH1 L - JH ER0\nELK  EH1 L K\nELKES  EH1 L K S\nELKHART  EH1 L K - HH AA2 R T\nELKHORN  EH1 L K - HH AO2 R N\nELKIN  IH0 L - K IH1 N\nELKIND  IH0 L - K AY1 N D\nELKIND(2)  EH1 L - K IH0 N D\nELKINGTON  EH1 L - K IH0 NG - T AH0 N\nELKINS  EH1 L - K IH0 N Z\nELKO  EH1 L - K OW0\nELKS  EH1 L K S\nELKTON  EH1 L K - T AH0 N\nELL  EH1 L\nELLA  EH1 - L AH0\nELLA'S  EH1 - L AH0 Z\nELLAMAY  EH1 - L AH0 - M EY2\nELLAN  EH1 - L AH0 N\nELLAN'S  EH1 - L AH0 N Z\nELLARD  EH1 - L ER0 D\nELLE  EH1 L\nELLEDGE  EH1 - L IH0 JH\nELLEFSON  EH1 - L IH0 F - S AH0 N\nELLEGOOD  EH1 - L IH0 - G UH0 D\nELLEMANN  EH1 - L AH0 - M AH0 N\nELLEN  EH1 - L AH0 N\nELLEN'S  EH1 - L AH0 N Z\nELLENA  EH0 - L EH1 - N AH0\nELLENBECKER  EH1 - L IH0 N - B EH0 - K ER0\nELLENBERG  EH1 - L AH0 N - B ER0 G\nELLENBERGER  EH1 - L AH0 N - B ER0 - G ER0\nELLENBOGEN  EH1 - L IH0 N - B AH0 - G AH0 N\nELLENBURG  EH1 - L AH0 N - B ER0 G\nELLENDER  EH1 - L EH0 N - D ER0\nELLENE  EH1 - L IY2 N\nELLENPORE  EH1 - L IH0 N - P AO0 R\nELLENSON  EH1 - L IH0 N - S AH0 N\nELLENWOOD  EH1 - L AH0 N - W UH2 D\nELLER  EH1 - L ER0\nELLERBE  EH1 - L ER0 B\nELLERBEE  IH0 - L ER1 - B IY0\nELLERBROCK  IH0 - L ER1 - B R AH0 K\nELLERBY  EH1 - L ER0 - B IY0\nELLEREY  EH1 - L ER0 - IY0\nELLERMAN  EH1 - L ER0 - M AH0 N\nELLERS  EH1 - L ER0 Z\nELLERT  EH1 - L ER0 T\nELLERTSON  EH1 - L ER0 T - S AH0 N\nELLERY  EH1 - L ER0 - IY0\nELLESMERE  EH1 L Z - M IH2 R\nELLESSE  EH0 - L EH1 S\nELLESTAD  EH1 - L IH0 - S T AH0 D\nELLETT  EH1 - L IH0 T\nELLETTE  IH0 - L EH1 T\nELLEY  EH1 - L IY0\nELLICE  EH1 - L IH0 S\nELLICOTT  EH1 - L IH0 - K AA0 T\nELLIE  EH1 - L IY0\nELLIFF  EH1 - L IH0 F\nELLIJAY  IY0 - L AY1 - JH EY0\nELLIMAN  EH1 - L IH0 - M AH0 N\nELLING  EH1 - L IH0 NG\nELLINGER  EH1 - L IH0 - NG ER0\nELLINGSEN  EH1 - L IH0 NG - S AH0 N\nELLINGSON  EH1 - L IH0 NG - S AH0 N\nELLINGSWORTH  EH1 - L IH0 NG - Z W ER2 TH\nELLINGTON  EH1 - L IH0 NG - T AH0 N\nELLINGTON'S  EH1 - L IH0 NG - T AH0 N Z\nELLINGWOOD  EH1 - L IH0 NG - W UH2 D\nELLINWOOD  EH1 - L IH0 N - W UH2 D\nELLIOT  EH1 - L IY0 - AH0 T\nELLIOTT  EH1 - L IY0 - AH0 T\nELLIOTT'S  EH1 - L IY0 - AH0 T S\nELLIPSE  IH0 - L IH1 P S\nELLIPSOID  IH0 - L IH1 P - S OY0 D\nELLIPSOIDS  IH0 - L IH1 P - S OY0 D Z\nELLIPTICAL  IH0 - L IH1 P - T IH0 - K AH0 L\nELLIS  EH1 - L IH0 S\nELLIS'S  EH1 - L IH0 - S IH0 Z\nELLISON  EH1 - L IH0 - S AH0 N\nELLISOR  EH1 - L IH0 - S ER0\nELLISTON  EH1 - L IH0 - S T AA0 N\nELLITHORPE  EH1 - L IH0 - TH ER0 P\nELLMAN  EH1 L - M AH0 N\nELLMANN  EH1 L - M AH0 N\nELLNER  EH1 L - N ER0\nELLROY  EH1 L - R OY2\nELLS  EH1 L Z\nELLSBERG  EH1 L Z - B ER0 G\nELLSBERG'S  EH1 L Z - B ER0 G Z\nELLSBURG  EH1 L Z - B ER0 G\nELLSWORTH  EH1 L Z - W ER0 TH\nELLWANGER  EH1 L - W AO0 NG - ER0\nELLWOOD  EH1 L - W UH2 D\nELLWOOD'S  EH1 L - W UH2 D Z\nELLY  EH1 - L IY0\nELLYN  EH1 - L IH0 N\nELLYSON  EH1 - L IH0 - S AH0 N\nELLZEY  EH1 L - Z IY0\nELM  EH1 L M\nELMA  EH1 L - M AH0\nELMAN  EH1 L - M AH0 N\nELMENDORF  EH1 L - M IH0 N - D AO0 R F\nELMER  EH1 L - M ER0\nELMES  EH1 L M Z\nELMHURST  EH1 L M - HH ER0 S T\nELMIRA  EH0 L - M AY1 - R AH0\nELMO  EH1 L - M OW0\nELMOOTAZBELL  EH0 L - M UW1 - T AH2 Z - B EH2 L\nELMOOTAZBELLAH  EH0 L - M UW2 - T AH2 Z - B EH1 - L AH0\nELMORE  EH1 L - M AO0 R\nELMQUIST  EH1 L M - K W IH2 S T\nELMS  EH1 L M Z\nELMSFORD  EH1 L M Z - F ER0 D\nELMWOOD  EH1 L M - W UH2 D\nELNA  IH0 L - N AA1\nELNORA  EH0 L - N AO1 - R AH0\nELNORE  IH0 L - N AO1 R\nELNOZAHY  EH2 L - N OW1 - Z AA1 - HH IY0\nELOCUTION  EH2 - L AH0 - K Y UW1 - SH AH0 N\nELOCUTIONS  EH2 - L AH0 - K Y UW1 - SH AH0 N Z\nELOISA  EH0 - L OY1 - S AH0\nELOISE  IH0 - L OY1 Z\nELOISE(2)  EH1 - L OW0 - IY0 Z\nELONGATE  IH0 - L AO1 NG - G EY0 T\nELONGATED  IH0 - L AO1 NG - G EY0 - T AH0 D\nELONGATION  IY2 - L AO0 NG - G EY1 - SH AH0 N\nELOPE  IH0 - L OW1 P\nELOPES  IH0 - L OW1 P S\nELOQUENCE  EH1 - L AH0 - K W AH0 N S\nELOQUENT  EH1 - L AH0 - K W AH0 N T\nELOQUENTLY  EH1 - L AH0 - K W AH0 N T - L IY0\nELOUISE  EH1 - L AH0 - W IY2 Z\nELPERS  EH1 L - P ER0 Z\nELRICA  EH1 - L R IH0 - K AH0\nELRICK  EH1 L - R IH0 K\nELROD  IH0 L - R AA1 D\nELRON  EH1 L - R AH0 N\nELROY  IH0 L - R OY1\nELS  EH1 L Z\nELSA  EH1 L - S AH0\nELSAS  EH1 L - S AH0 Z\nELSASSER  EH1 L - S AH0 - S ER0\nELSBERRY  EH1 L Z - B EH2 - R IY0\nELSBURY  EH1 L Z - B EH2 - R IY0\nELSDON  EH1 L - S D AH0 N\nELSE  EH1 L S\nELSE'S  EH1 L - S IH0 Z\nELSEA  EH1 L - S IY0 - AH0\nELSEN  EH1 L - S AH0 N\nELSER  EH1 L - S ER0\nELSES  EH1 L - S IH0 Z\nELSESSER  EH1 L - S IH0 - S ER0\nELSEVIER  EH0 L - S EH1 - V Y ER0\nELSEVIER'S  EH0 L - S EH1 - V Y ER0 Z\nELSEVIER'S(2)  EH1 L - S AH0 - V IH2 R Z\nELSEVIER(2)  EH1 L - S AH0 - V IH2 R\nELSEWHERE  EH1 L - S W EH2 R\nELSEY  EH1 L - S IY0\nELSIE  EH1 L - S IY0\nELSIE'S  EH1 L - S IY0 Z\nELSINORE  EH1 L - S AH0 - N AO2 R\nELSNER  EH1 L - S N ER0\nELSON  EH1 L - S AH0 N\nELSTAD  EH1 L - S T AH0 D\nELSTER  EH1 L - S T ER0\nELSTON  IH0 L - S T AA1 N\nELSWICK  EH1 L Z - W IH2 K\nELSWORTH  EH1 L Z - W ER2 TH\nELTING  EH1 L - T IH0 NG\nELTON  EH1 L - T AH0 N\nELTRINGHAM  EH1 L - T R IH0 - NG AE0 M\nELTZROTH  EH1 L T - S R AO0 TH\nELUCIDATE  IH0 - L UW1 - S AH0 - D EY2 T\nELUCIDATED  IH0 - L UW1 - S AH0 - D EY2 - T AH0 D\nELUCIDATIVE  IH0 - L UW1 - S AH0 - D EY2 - T IH0 V\nELUDE  IH0 - L UW1 D\nELUDED  IH0 - L UW1 - D IH0 D\nELUDES  IH0 - L UW1 D Z\nELUDING  IH0 - L UW1 - D IH0 NG\nELUSIVE  IH0 - L UW1 - S IH0 V\nELUSIVENESS  IH0 - L UW1 - S IH0 V - N AH0 S\nELVA  EH1 L - V AH0\nELVERA  EY0 L - V EH1 - R AH0\nELVERS  EH1 L - V ER0 Z\nELVES  EH1 L V Z\nELVGREN  EH1 L V - G R EH0 N\nELVIA  EH1 L - V IY0 - AH0\nELVIE  EH1 L - V IY0\nELVIN  EH1 L - V IH0 N\nELVINA  EH0 L - V IY1 - N AH0\nELVING  EH1 L - V IH0 NG\nELVINGTON  EH1 L - V IH0 NG - T AH0 N\nELVIRA  EH0 L - V AY1 - R AH0\nELVIRE  EH1 L - V AY2 R\nELVIS  EH1 L - V IH0 S\nELVIS'  EH1 L - V IH0 S\nELVIS'S  EH1 L - V IH0 - S IH0 Z\nELVY  EH1 L - V IY0\nELWAY  EH1 L - W EY2\nELWAY'S  EH1 L - W EY2 Z\nELWELL  IH0 L - W EH1 L\nELWIN  EH1 L - W IH0 N\nELWOOD  EH1 L - W UH2 D\nELXSI  EH1 L K - S IY0\nELY  IY1 - L AY0\nELYN  EH1 - L IH0 N\nELYRIA  IH0 - L IH1 - R IY0 - AH0\nELYSE  EH1 - L AY0 S\nELYSEE  EH1 - L IH0 - S IY2\nELYSEE(2)  EH1 - L IY0 - S IY2\nELYSEES  EH1 - L IH0 - S IY2 Z\nELYSEES(2)  EH1 - L IY0 - S IY2 Z\nELYSIA  IH0 - L IH1 - ZH IY0 - AH0\nELYSIA(2)  IH0 - L IY1 - ZH AH0\nELYSIUM  IH0 - L IH1 - Z IY0 - AH0 M\nELZA  EH1 L - Z AH0\nELZEY  EH1 L - Z IY0\nELZINGA  EH0 L - Z IY1 NG - G AH0\nELZY  EH1 L - Z IY0\nEM  EH1 M\nEMA  IY1 - M AH0\nEMACIATE  IH0 - M EY1 - SH IY0 - EY2 T\nEMACIATED  IH0 - M EY1 - SH IY0 - EY2 - T IH0 D\nEMAD  IY1 - M AE0 D\nEMAIL  IY0 - M EY1 L\nEMAILED  IY0 - M EY1 L D\nEMAILING  IY0 - M EY1 - L IH0 NG\nEMAILS  IY0 - M EY1 L Z\nEMANATE  EH1 - M AH0 - N EY2 T\nEMANATED  EH1 - M AH0 - N EY2 - T IH0 D\nEMANATES  EH1 - M AH0 - N EY0 T S\nEMANATING  EH1 - M AH0 - N EY2 - T IH0 NG\nEMANATION  EH2 - M AH0 - N EY1 - SH AH0 N\nEMANATIONS  EH2 - M AH0 - N EY1 - SH AH0 N Z\nEMANCIPATE  IH0 - M AE1 N - S AH0 - P EY2 T\nEMANCIPATED  IH0 - M AE1 N - S AH0 - P EY2 - T IH0 D\nEMANCIPATION  IH0 - M AE2 N - S AH0 - P EY1 - SH AH0 N\nEMANUEL  IH0 - M AE1 - N Y UW0 - AH0 L\nEMANUELE  EY0 - M AA0 - N UW0 - EH1 - L EY0\nEMANUELSON  IH0 - M AE1 - N UW0 L - S AH0 N\nEMARD  EH1 - M ER0 D\nEMASCULATE  AH0 - M AE1 S - K Y UW0 - L IH0 T\nEMASCULATE(2)  AH0 - M AE1 S - K Y UW0 - L EY2 T\nEMASCULATED  AH0 - M AE1 S - K Y UW0 - L EY2 - T IH0 D\nEMBALM  EH0 M - B AA1 M\nEMBALMED  EH0 M - B AA1 M D\nEMBALMING  EH0 M - B AA1 - M IH0 NG\nEMBANKMENT  EH0 M - B AE1 NG K - M AH0 N T\nEMBARCADERO  EH0 M - B AA2 R - K AH0 - D EH1 - R OW0\nEMBARGO  EH0 M - B AA1 R - G OW0\nEMBARGOED  IH0 M - B AA1 R - G OW0 D\nEMBARGOES  EH0 M - B AA1 R - G OW0 Z\nEMBARK  EH0 M - B AA1 R K\nEMBARK(2)  IH0 M - B AA1 R K\nEMBARKATION  EH2 M - B AA0 R - K EY1 - SH AH0 N\nEMBARKED  EH0 M - B AA1 R K T\nEMBARKING  EH0 M - B AA1 R - K IH0 NG\nEMBARKS  IH0 M - B AA1 R K S\nEMBARRASS  IH0 M - B EH1 - R AH0 S\nEMBARRASSED  IH0 M - B EH1 - R AH0 S T\nEMBARRASSES  IH0 M - B AE1 - R AH0 - S IH0 Z\nEMBARRASSING  IH0 M - B EH1 - R AH0 - S IH0 NG\nEMBARRASSINGLY  IH0 M - B EH1 - R AH0 - S IH0 NG - L IY0\nEMBARRASSMENT  IH0 M - B EH1 - R AH0 S - M AH0 N T\nEMBARRASSMENTS  IH0 M - B EH1 - R AH0 S - M AH0 N T S\nEMBASSIES  EH1 M - B AH0 - S IY0 Z\nEMBASSY  EH1 M - B AH0 - S IY0\nEMBASSY'S  EH1 M - B AH0 - S IY0 Z\nEMBATTLE  EH0 M - B AE1 - T AH0 L\nEMBATTLED  EH0 M - B AE1 - T AH0 L D\nEMBAYMENT  EH0 M - B EY1 - M AH0 N T\nEMBED  IH0 M - B EH1 D\nEMBEDDED  EH0 M - B EH1 - D IH0 D\nEMBELLISH  IH0 M - B EH1 - L IH0 SH\nEMBELLISHED  EH0 M - B EH1 - L IH0 SH T\nEMBELLISHING  EH0 M - B EH1 - L IH0 - SH IH0 NG\nEMBELLISHMENT  EH0 M - B EH1 - L IH0 SH - M AH0 N T\nEMBER  EH1 M - B ER0\nEMBERS  EH1 M - B ER0 Z\nEMBERSON  EH1 M - B ER0 - S AH0 N\nEMBERTON  IH0 M - B ER1 - T AH0 N\nEMBERTON(2)  EH1 M - B ER0 - T AH0 N\nEMBEZZLE  IH0 M - B EH1 - Z AH0 L\nEMBEZZLED  IH0 M - B EH1 - Z AH0 L D\nEMBEZZLEMENT  EH0 M - B EH1 - Z AH0 L - M AH0 N T\nEMBEZZLER  IH0 M - B EH1 - Z AH0 L - ER0\nEMBEZZLER(2)  EH0 M - B EH1 Z - L ER0\nEMBEZZLERS  IH0 M - B EH1 - Z AH0 L - ER0 Z\nEMBEZZLERS(2)  EH0 M - B EH1 Z - L ER0 Z\nEMBEZZLES  IH0 M - B EH1 - Z AH0 L Z\nEMBEZZLING  IH0 M - B EH1 - Z AH0 L - IH0 NG\nEMBEZZLING(2)  EH0 M - B EH1 Z - L IH0 NG\nEMBEZZLING(3)  IH0 M - B EH1 Z - L IH0 NG\nEMBEZZLING(4)  EH0 M - B EH1 - Z AH0 L - IH0 NG\nEMBITTER  EH0 M - B IH1 - T ER0\nEMBITTERED  EH0 M - B IH1 - T ER0 D\nEMBLAZON  EH0 M - B L EY1 - Z AH0 N\nEMBLAZONED  EH0 M - B L EY1 - Z AH0 N D\nEMBLEM  EH1 M - B L AH0 M\nEMBLEMATIC  EH2 M - B L AH0 - M AE1 - T IH0 K\nEMBLEMS  EH1 M - B L AH0 M Z\nEMBLER  EH1 M - B L ER0\nEMBLETON  EH1 M - B L IH0 - T AA0 N\nEMBLETON(2)  EH1 M - B AH0 L - T AA0 N\nEMBODIED  IH0 M - B AA1 - D IY0 D\nEMBODIES  EH0 M - B AA1 - D IY0 Z\nEMBODIMENT  EH0 M - B AA1 - D IY0 - M AH0 N T\nEMBODY  IH0 M - B AA1 - D IY0\nEMBODYING  IH0 M - B AA1 - D IY0 - IH0 NG\nEMBOLDEN  EH0 M - B OW1 L - D AH0 N\nEMBOLDENED  EH0 M - B OW1 L - D AH0 N D\nEMBOLISM  EH1 M - B OW0 - L IH2 - Z AH0 M\nEMBOLISMS  EH1 M - B OW0 - L IH2 - Z AH0 M Z\nEMBOSS  IH0 M - B AO1 S\nEMBOSSED  IH0 M - B AO1 S T\nEMBRACE  EH0 M - B R EY1 S\nEMBRACE(2)  IH0 M - B R EY1 S\nEMBRACEABLE  IH0 M - B R EY1 - S AH0 - B AH0 L\nEMBRACED  EH0 M - B R EY1 S T\nEMBRACES  EH0 M - B R EY1 - S IH0 Z\nEMBRACING  EH0 M - B R EY1 - S IH0 NG\nEMBREE  IH0 M - B R IY1\nEMBREY  EH1 M - B R IY0\nEMBROIDER  IH0 M - B R OY1 - D ER0\nEMBROIDERED  EH0 M - B R OY1 - D ER0 D\nEMBROIDERER  EH0 M - B R OY1 - D ER0 - ER0\nEMBROIDERERS  EH0 M - B R OY1 - D ER0 - ER0 Z\nEMBROIDERIES  IH0 M - B R OY1 - D ER0 - IY0 Z\nEMBROIDERING  EH0 M - B R OY1 - D ER0 - IH0 NG\nEMBROIDERY  EH0 M - B R OY1 - D ER0 - IY0\nEMBROIL  EH0 M - B R OY1 L\nEMBROILED  EH0 M - B R OY1 L D\nEMBROSE  EH1 M - B R OW0 Z\nEMBRY  EH1 M - B R IY0\nEMBRYO  EH1 M - B R IY0 - OW2\nEMBRYOLOGY  EH2 M - B R IY0 - AA1 - L AH0 - JH IY0\nEMBRYONIC  EH2 M - B R IY0 - AA1 - N IH0 K\nEMBRYOS  EH1 M - B R IY0 - OW2 Z\nEMBURY  EH1 M - B EH2 - R IY0\nEMCEE  EH1 M - S IY1\nEMCH  EH1 M CH\nEMCO  EH1 M - K OW0\nEMDE  EH1 M D\nEMDR  IY1 - EH1 M - D IY1 - AA1 R\nEMEL  EH1 - M AH0 L\nEMELDA  EH0 - M EH1 L - D AH0\nEMELIE  EH1 - M AH0 - L IY0\nEMELINA  EH2 - M EH0 - L IY1 - N AH0\nEMELINE  EH1 - M IH0 - L AY2 N\nEMELITA  EH0 - M EH0 - L IY1 - T AH0\nEMELYNE  EH1 - M IH0 - L AY0 N\nEMENS  EH1 - M EH0 N Z\nEMERA  EH0 - M EH1 - R AH0\nEMERALD  EH1 M - R AH0 L D\nEMERALD(2)  EH1 - M ER0 - R AH0 L D\nEMERALDS  EH1 M - R AH0 L D Z\nEMERALDS(2)  EH1 - M ER0 - R AH0 L D Z\nEMERANT  EY0 - M EH1 - R AH0 N T\nEMERAUDE  EH1 - M ER0 - AW2 D\nEMERGE  IH0 - M ER1 JH\nEMERGE(2)  IY1 - M ER0 JH\nEMERGED  IH0 - M ER1 JH D\nEMERGED(2)  IY1 - M ER0 JH D\nEMERGENCE  IH0 - M ER1 - JH AH0 N S\nEMERGENCE(2)  IY1 - M ER0 - JH AH0 N S\nEMERGENCIES  IH0 - M ER1 - JH AH0 N - S IY0 Z\nEMERGENCIES(2)  IY1 - M ER0 - JH AH0 N - S IY0 Z\nEMERGENCY  IH0 - M ER1 - JH AH0 N - S IY0\nEMERGENCY(2)  IY1 - M ER0 - JH AH0 N - S IY0\nEMERGENT  IH0 - M ER1 - JH AH0 N T\nEMERGENT(2)  IY1 - M ER0 - JH AH0 N T\nEMERGES  IH0 - M ER1 - JH IH0 Z\nEMERGES(2)  IY1 - M ER0 - JH IH0 Z\nEMERGING  IH0 - M ER1 - JH IH0 NG\nEMERGING(2)  IY1 - M ER0 - JH IH0 NG\nEMERICH  EH1 - M ER0 - IH0 K\nEMERICK  EH1 - M ER0 - IH0 K\nEMERINE  EH1 - M ER0 - IY2 N\nEMERITUS  IH0 - M EH1 - R AH0 - T AH0 S\nEMERSE  IH0 - M ER1 S\nEMERSED  IH0 - M ER1 S T\nEMERSON  EH1 - M ER0 - S AH0 N\nEMERSON'S  EH1 - M ER0 - S AH0 N Z\nEMERT  EH1 - M ER0 T\nEMERTON  IH0 - M ER1 - T AH0 N\nEMERTON(2)  EH1 - M ER0 - T AH0 N\nEMERY  EH1 - M ER0 - IY0\nEMERY'S  EH1 - M ER0 - IY0 Z\nEMERYVILLE  EH1 - M ER0 - IY0 - V IH2 L\nEMETIC  IH0 - M EH1 - T IH0 K\nEMFINGER  EH1 M - F IH0 - NG ER0\nEMGE  EH1 M JH\nEMHART  EH1 M - HH AA2 R T\nEMICK  EH1 - M IH0 K\nEMIG  EH1 - M IH0 G\nEMIGH  EH1 - M AY0\nEMIGRANT  EH1 - M AH0 - G R AH0 N T\nEMIGRANTS  EH1 - M AH0 - G R AH0 N T S\nEMIGRATE  EH1 - M AH0 - G R EY2 T\nEMIGRATED  EH1 - M AH0 - G R EY2 - T IH0 D\nEMIGRATES  EH1 - M AH0 - G R EY2 T S\nEMIGRATING  EH1 - M AH0 - G R EY2 - T IH0 NG\nEMIGRATION  EH2 - M AH0 - G R EY1 - SH AH0 N\nEMIGRATIONS  EH2 - M AH0 - G R EY1 - SH AH0 N Z\nEMIGRE  EH1 - M AH0 - G R EY2\nEMIGRES  EH1 - M AH0 - G R EY2 Z\nEMIL  EH0 - M IY1 L\nEMILE  EY0 - M IY1 L\nEMILIA  AH0 - M IY1 - L IY0 - AH0\nEMILIE  EH1 - M AH0 - L IY0\nEMILIO  AH0 - M IY1 - L IY0 - OW0\nEMILO  EH0 - M IY1 - L OW0\nEMILO'S  EH0 - M IY1 - L OW0 Z\nEMILY  EH1 - M IH0 - L IY0\nEMILY'S  EH1 - M IH0 - L IY0 Z\nEMINA  EH0 - M IY1 - N AH0\nEMINASE  EH2 - M IH0 - N AA1 - S IY0\nEMINENCE  EH1 - M AH0 - N AH0 N S\nEMINENCES  EH1 - M AH0 - N AH0 N - S IH0 Z\nEMINENT  EH1 - M AH0 - N AH0 N T\nEMINENTLY  EH1 - M AH0 - N AH0 N T - L IY0\nEMIR  IH0 - M IH1 R\nEMIR(2)  EY0 - M IH1 R\nEMIRATE  EH1 - M ER0 - AH0 T\nEMIRATE(2)  EH1 - M ER0 - EY2 T\nEMIRATES  EH1 - M ER0 - AH0 T S\nEMIRATES'  EH1 - M ER0 - AH0 T S\nEMIRATES'(2)  EH1 - M ER0 - EY2 T S\nEMIRATES(2)  EH1 - M ER0 - EY2 T S\nEMISON  EH1 - M IH0 - S AH0 N\nEMISSARIES  EH1 - M AH0 - S EH2 - R IY0 Z\nEMISSARY  EH1 - M AH0 - S EH2 - R IY0\nEMISSION  IH0 - M IH1 - SH AH0 N\nEMISSIONS  IH0 - M IH1 - SH AH0 N Z\nEMIT  IH0 - M IH1 T\nEMITS  IH0 - M IH1 T S\nEMITTED  IH0 - M IH1 - T AH0 D\nEMITTED(2)  IH0 - M IH1 - T IH0 D\nEMITTING  IH0 - M IH1 - T IH0 NG\nEMLER  EH1 M - L ER0\nEMLEY  EH1 M - L IY0\nEMLING  EH1 M - L IH0 NG\nEMLYN  IH0 M - L IH1 N\nEMLYNNE  IH0 M - L AY1 N\nEMMA  EH1 - M AH0\nEMMALINE  EH0 - M AA0 - L IY1 - N IY0\nEMMANUEL  IH0 - M AE1 - N Y UW0 - AH0 L\nEMMAUS  EH1 - M AW0 S\nEMME  EH1 M\nEMMEL  EH1 - M AH0 L\nEMMELINE  EH1 - M AH0 - L AY2 N\nEMMENDORFER  EH1 - M IH0 N - D AO0 R - F ER0\nEMMER  EH1 - M ER0\nEMMERICH  EH1 - M ER0 - IH0 K\nEMMERLING  EH1 - M ER0 - L IH0 NG\nEMMERSON  EH1 - M ER0 - S AH0 N\nEMMERT  EH1 - M ER0 T\nEMMERY  EH1 - M ER0 - IY0\nEMMET  EH1 - M IH0 T\nEMMETT  EH1 - M IH0 T\nEMMI  EH1 - M IY0\nEMMICK  EH1 - M IH0 K\nEMMIE  EH1 - M IY0\nEMMINGER  EH1 - M IH0 - NG ER0\nEMMIS  EH1 - M IH0 S\nEMMIT  EH1 - M IH0 T\nEMMITT  EH1 - M IH0 T\nEMMONS  EH1 - M AH0 N Z\nEMMOTT  EH1 - M AH0 T\nEMMY  EH1 - M IY0\nEMMY'S  EH1 - M IY0 Z\nEMMYS  EH1 - M IY0 Z\nEMOGENE  EH1 - M AH0 - G IY0 N\nEMOND  EH1 - M AH0 N D\nEMORY  EH1 - M ER0 - IY0\nEMORY'S  EH1 - M ER0 - IY0 Z\nEMOTION  IH0 - M OW1 - SH AH0 N\nEMOTION(2)  IY1 - M OW0 - SH AH0 N\nEMOTIONAL  IH0 - M OW1 - SH AH0 - N AH0 L\nEMOTIONAL(2)  IY1 - M OW0 - SH AH0 - N AH0 L\nEMOTIONALISM  IH0 - M OW1 - SH AH0 N - AH0 - L IH2 - Z AH0 M\nEMOTIONALISM(2)  IY1 - M OW0 - SH AH0 N - AH0 - L IH2 - Z AH0 M\nEMOTIONALLY  IH0 - M OW1 SH - N AH0 - L IY0\nEMOTIONALLY(2)  IY1 - M OW0 SH - N AH0 - L IY0\nEMOTIONS  IH0 - M OW1 - SH AH0 N Z\nEMOTIONS(2)  IY1 - M OW0 - SH AH0 N Z\nEMPANEL  IH0 M - P AE1 - N AH0 L\nEMPANELED  IH0 M - P AE1 - N AH0 L D\nEMPANELING  EH0 M - P AE1 - N AH0 - L IH0 NG\nEMPANELING(2)  EH0 M - P AE1 N - L IH0 NG\nEMPATH  EH1 M - P AE2 TH\nEMPATHETIC  EH2 M - P AH0 - TH EH1 - T IH0 K\nEMPATHIZE  EH1 M - P AH0 - TH AY2 Z\nEMPATHY  EH1 M - P AH0 - TH IY0\nEMPEROR  EH1 M - P ER0 - ER0\nEMPEROR'S  EH1 M - P ER0 - ER0 Z\nEMPERORS  EH1 M - P ER0 - ER0 Z\nEMPEY  EH1 M - P IY0\nEMPHASES  EH1 M - F AH0 - S IY2 Z\nEMPHASIS  EH1 M - F AH0 - S AH0 S\nEMPHASIS(2)  EH1 M - F AH0 - S IH0 S\nEMPHASIZE  EH1 M - F AH0 - S AY2 Z\nEMPHASIZED  EH1 M - F AH0 - S AY2 Z D\nEMPHASIZES  EH1 M - F AH0 - S AY2 - Z AH0 Z\nEMPHASIZES(2)  EH1 M - F AH0 - S AY2 - Z IH0 Z\nEMPHASIZING  EH1 M - F AH0 - S AY2 - Z IH0 NG\nEMPHATIC  EH0 M - F AE1 - T IH0 K\nEMPHATICALLY  EH0 M - F AE1 - T IH0 K - L IY0\nEMPHATICALLY(2)  EH0 M - F AE1 - T IH0 - K AH0 - L IY0\nEMPHYSEMA  EH2 M - F AH0 - Z IY1 - M AH0\nEMPIE  EH1 M - P IY0\nEMPIRE  EH1 M - P AY0 - ER0\nEMPIRE'S  EH1 M - P AY0 - ER0 Z\nEMPIRES  EH1 M - P AY0 - ER0 Z\nEMPIRICAL  EH2 M - P IH1 - R IH0 - K AH0 L\nEMPIRICALLY  EH0 M - P IH1 - R IH0 - K AH0 - L IY0\nEMPIRICALLY(2)  EH0 M - P IH1 - R IH0 K - L IY0\nEMPIRICISM  EH0 M - P IH1 - R AH0 - S IH2 - Z AH0 M\nEMPIRICIST  IH0 M - P IH1 - R AH0 - S AH0 S T\nEMPLACEMENT  IH0 M - P L EY1 S - M AH0 N T\nEMPLACEMENTS  IH0 M - P L EY1 S - M AH0 N T S\nEMPLOY  EH0 M - P L OY1\nEMPLOY(2)  IH0 M - P L OY1\nEMPLOYABLE  EH0 M - P L OY1 - AH0 - B AH0 L\nEMPLOYED  EH0 M - P L OY1 D\nEMPLOYED(2)  IH0 M - P L OY1 D\nEMPLOYEE  EH0 M - P L OY1 - IY0\nEMPLOYEE'S  EH0 M - P L OY1 - IY0 Z\nEMPLOYEE'S(2)  IH0 M - P L OY1 - IY0 Z\nEMPLOYEE(2)  IH0 M - P L OY1 - IY0\nEMPLOYEES  EH0 M - P L OY1 - IY0 Z\nEMPLOYEES'  EH0 M - P L OY1 - IY0 Z\nEMPLOYEES(2)  IH0 M - P L OY1 - IY0 Z\nEMPLOYER  EH0 M - P L OY1 - ER0\nEMPLOYER'S  EH0 M - P L OY1 - ER0 Z\nEMPLOYER'S(2)  IH0 M - P L OY1 - ER0 Z\nEMPLOYER(2)  IH0 M - P L OY1 - ER0\nEMPLOYERS  EH0 M - P L OY1 - ER0 Z\nEMPLOYERS'  EH0 M - P L OY1 - ER0 Z\nEMPLOYERS'(2)  IH0 M - P L OY1 - ER0 Z\nEMPLOYERS(2)  IH0 M - P L OY1 - ER0 Z\nEMPLOYING  EH0 M - P L OY1 - IH0 NG\nEMPLOYING(2)  IH0 M - P L OY1 - IH0 NG\nEMPLOYMENT  EH0 M - P L OY1 - M AH0 N T\nEMPLOYMENT(2)  IH0 M - P L OY1 - M AH0 N T\nEMPLOYMENTS  EH0 M - P L OY1 - M AH0 N T S\nEMPLOYMENTS(2)  IH0 M - P L OY1 - M AH0 N T S\nEMPLOYS  EH0 M - P L OY1 Z\nEMPLOYS(2)  IH0 M - P L OY1 Z\nEMPORIA  EH0 M - P AO1 - R IY0 - AH0\nEMPORIUM  EH2 M - P AO1 - R IY0 - AH0 M\nEMPOWER  IH0 M - P AW1 - ER0\nEMPOWERED  IH0 M - P AW1 - ER0 D\nEMPOWERING  IH0 M - P AW1 - ER0 - IH0 NG\nEMPOWERMENT  IH0 M - P AW1 - ER0 - M AH0 N T\nEMPOWERS  IH0 M - P AW1 - ER0 Z\nEMPRESA  EH0 M - P R EH1 - S AH0\nEMPRESAS  EH0 M - P R EH1 - S AH0 Z\nEMPRESS  EH1 M - P R EH0 S\nEMPRISE  EH0 M - P R AY1 Z\nEMPSON  EH1 M P - S AH0 N\nEMPT  EH1 M P T\nEMPT(2)  EH1 M T\nEMPTED  EH1 M P - T IH0 D\nEMPTED(2)  EH1 M - T IH0 D\nEMPTIED  EH1 M P - T IY0 D\nEMPTIED(2)  EH1 M - T IY0 D\nEMPTIER  EH1 M P - T IY0 - ER0\nEMPTIER(2)  EH1 M - T IY0 - ER0\nEMPTIES  EH1 M P - T IY0 Z\nEMPTIES(2)  EH1 M - T IY0 Z\nEMPTINESS  EH1 M P - T IY0 - N AH0 S\nEMPTINESS(2)  EH1 M - T IY0 - N AH0 S\nEMPTING  EH1 M P - T IH0 NG\nEMPTING(2)  EH1 M - T IH0 NG\nEMPTION  EH1 M P - SH AH0 N\nEMPTIVE  EH1 M P - T IH0 V\nEMPTOR  EH1 M P - T ER0\nEMPTS  EH1 M P T S\nEMPTY  EH1 M P - T IY0\nEMPTY(2)  EH1 M - T IY0\nEMPTYING  EH1 M P - T IY0 - IH0 NG\nEMPTYING(2)  EH1 M - T IY0 - IH0 NG\nEMRICH  EH1 M - R IH0 K\nEMRICK  EH1 M - R IH0 K\nEMRY  EH1 M - R IY0\nEMSLIE  EH1 M - S AH0 - L IY0\nEMSWILER  EH1 M Z - W AY2 - L ER0\nEMU  IY1 - M Y UW2\nEMUIL  EH1 - M Y UW0 - IH2 L\nEMUIL'S  EH1 - M Y UW0 - IH2 L Z\nEMULATE  EH1 - M Y AH0 - L EY2 T\nEMULATED  EH1 - M Y AH0 - L EY2 - T IH0 D\nEMULATING  EH1 - M Y AH0 - L EY2 - T IH0 NG\nEMULATION  EH2 - M Y AH0 - L EY1 - SH AH0 N\nEMULEX  EH1 - M Y UW0 - L AH0 K S\nEMULSIFIER  IH0 - M AH1 L - S AH0 - F AY2 - ER0\nEMULSION  IH0 - M AH1 L - SH AH0 N\nEN  EH1 N\nENA  EH1 - N AH0\nENABLE  EH0 - N EY1 - B AH0 L\nENABLE(2)  IH0 N - EY1 - B AH0 L\nENABLED  EH0 - N EY1 - B AH0 L D\nENABLED(2)  IH0 N - EY1 - B AH0 L D\nENABLER  EH0 - N EY1 - B AH0 L - ER0\nENABLER(2)  EH0 - N EY1 - B L ER0\nENABLER(3)  IH0 N - EY1 - B L ER0\nENABLER(4)  IH0 N - EY1 - B AH0 L - ER0\nENABLES  EH0 - N EY1 - B AH0 L Z\nENABLES(2)  IH0 N - EY1 - B AH0 L Z\nENABLING  EH0 - N EY1 - B AH0 L - IH0 NG\nENABLING(2)  IH0 N - EY1 - B AH0 L - IH0 NG\nENABLING(3)  IH0 N - EY1 - B L IH0 NG\nENACT  IH0 - N AE1 K T\nENACTED  EH0 - N AE1 K - T AH0 D\nENACTING  EH0 - N AE1 K - T IH0 NG\nENACTMENT  EH0 - N AE1 K T - M AH0 N T\nENACTMENT(2)  EH0 - N AE1 K - M AH0 N T\nENACTMENTS  EH2 - N AE1 K T - M AH0 N T S\nENACTMENTS(2)  EH2 - N AE1 K - M AH0 N T S\nENACTMENTS(3)  EH2 - N AE1 K - M AH0 N S\nENACTS  IH2 - N AE1 K T S\nENAMEL  IH0 - N AE1 - M AH0 L\nENAMELED  IH0 - N AE1 - M AH0 L D\nENAMELS  IH0 - N AE1 - M AH0 L Z\nENAMOR  EH0 - N AE1 - M ER0\nENAMORED  EH0 - N AE1 - M ER0 D\nENASA  EY0 - N AA1 - S AH0\nENBERG  EH1 N - B ER0 G\nENCAMP  IH0 N - K AE1 M P\nENCAMPED  IH0 N - K AE1 M P T\nENCAMPMENT  IH0 N - K AE1 M P - M IH0 N T\nENCAMPMENTS  IH0 N - K AE1 M P - M IH0 N T S\nENCAPSULATE  EH0 N - K AE1 P - S AH0 - L EY2 T\nENCAPSULATED  EH0 N - K AE1 P - S AH0 - L EY2 - T IH0 D\nENCAPSULATING  EH0 N - K AE1 P - S AH0 - L EY2 - T IH0 NG\nENCARNACION  IH0 N - K AA0 R - N AA0 - S IY0 - AO1 N\nENCARTA  EH0 N - K AA1 R - T AH2\nENCARTA(2)  EH0 N - K AA1 R - T AH0\nENCASE  EH0 N - K EY1 S\nENCASED  EH0 N - K EY1 S T\nENCATA  EH0 N - K AA1 - T AH2\nENCATA'S  EH0 N - K AA1 - T AH2 Z\nENCATA'S(2)  EH0 N - K AA1 - T AH0 Z\nENCATA(2)  EH0 N - K AA1 - T AH0\nENCEPHALITIS  EH0 N - S EH2 - F AH0 - L AY1 - T AH0 S\nENCEPHALOPATHY  EH0 N - S EH2 - F AH0 - L AO1 - P AH0 - TH IY0\nENCHANT  EH0 N - CH AE1 N T\nENCHANTED  EH0 N - CH AE1 N - T IH0 D\nENCHANTED(2)  EH0 N - CH AE1 - N IH0 D\nENCHANTER  EH0 N - CH AE1 N - T ER0\nENCHANTER'S  EH0 N - CH AE1 N - T ER0 Z\nENCHANTER'S(2)  IH0 N - CH AE1 N - T ER0 Z\nENCHANTER'S(3)  EH0 N - CH AE1 - N ER0 Z\nENCHANTER'S(4)  IH0 N - CH AE1 - N ER0 Z\nENCHANTERS  EH0 N - CH AE1 N - T ER0 Z\nENCHANTERS(2)  IH0 N - CH AE1 N - T ER0 Z\nENCHANTERS(3)  EH0 N - CH AE1 - N ER0 Z\nENCHANTERS(4)  IH0 N - CH AE1 - N ER0 Z\nENCHANTING  EH0 N - CH AE1 N - T IH0 NG\nENCHANTING(2)  EH0 N - CH AE1 - N IH0 NG\nENCHANTMENT  EH0 N - CH AE1 N T - M AH0 N T\nENCHILADA  EH0 N - CH IH0 - L AA1 - D AH0\nENCINAS  EH1 N - S IH0 - N AH0 Z\nENCINIAS  IH0 N - S IY0 - N IY1 - AH0 Z\nENCINO  EH0 N - S IY1 - N OW0\nENCIRCLE  EH0 N - S ER1 - K AH0 L\nENCIRCLED  IH0 N - S ER1 - K AH0 L D\nENCIRCLEMENT  EH0 N - S ER1 - K AH0 L - M AH0 N T\nENCIRCLING  EH0 N - S ER1 - K AH0 L - IH0 NG\nENCIRCLING(2)  EH0 N - S ER1 - K L IH0 NG\nENCISO  IH0 N - S IY1 - S OW0\nENCK  EH1 NG K\nENCLAVE  AA1 N - K L EY2 V\nENCLAVE(2)  EH1 N - K L EY2 V\nENCLAVES  AA1 N - K L EY2 V Z\nENCLAVES(2)  EH1 N - K L EY2 V Z\nENCLOSE  IH0 N - K L OW1 Z\nENCLOSED  EH0 N - K L OW1 Z D\nENCLOSED(2)  IH0 N - K L OW1 Z D\nENCLOSING  EH0 N - K L OW1 - Z IH0 NG\nENCLOSURE  EH0 N - K L OW1 - ZH ER0\nENCLOSURE(2)  IH0 N - K L OW1 - ZH ER0\nENCLOSURES  IH0 N - K L OW1 - ZH ER0 Z\nENCODE  EH0 N - K OW1 D\nENCODED  EH0 N - K OW1 - D IH0 D\nENCODING  EH0 N - K OW1 - D IH0 NG\nENCOMPASS  EH0 N - K AH1 M - P AH0 S\nENCOMPASSED  EH0 N - K AH1 M - P AH0 S T\nENCOMPASSES  EH0 N - K AH1 M - P AH0 - S AH0 Z\nENCOMPASSING  EH0 N - K AH1 M - P AH0 - S IH0 NG\nENCOR  EH1 N - K AO2 R\nENCOR'S  EH1 N - K AO2 R Z\nENCORE  AA1 N - K AO2 R\nENCORES  AA1 N - K AO2 R Z\nENCOUNTER  IH0 N - K AW1 N - T ER0\nENCOUNTER(2)  IH0 N - K AW1 - N ER0\nENCOUNTERED  IH0 N - K AW1 N - T ER0 D\nENCOUNTERED(2)  IH0 N - K AW1 - N ER0 D\nENCOUNTERING  EH0 N - K AW1 N - T ER0 - IH0 NG\nENCOUNTERING(2)  EH0 N - K AW1 - N ER0 - IH0 NG\nENCOUNTERS  IH0 N - K AW1 N - T ER0 Z\nENCOUNTERS(2)  IH0 N - K AW1 - N ER0 Z\nENCOURAGE  EH0 N - K ER1 - IH0 JH\nENCOURAGE(2)  IH0 N - K ER1 - AH0 JH\nENCOURAGED  EH0 N - K ER1 - IH0 JH D\nENCOURAGED(2)  IH0 N - K ER1 - AH0 JH D\nENCOURAGEMENT  EH0 N - K ER1 - IH0 JH - M AH0 N T\nENCOURAGES  EH0 N - K ER1 - IH0 - JH IH0 Z\nENCOURAGES(2)  IH0 N - K ER1 - AH0 - JH AH0 Z\nENCOURAGING  EH0 N - K ER1 - IH0 - JH IH0 NG\nENCOURAGING(2)  IH0 N - K ER1 - AH0 - JH IH0 NG\nENCROACH  IH0 N - K R OW1 CH\nENCROACHED  IH0 N - K R OW1 CH T\nENCROACHES  IH0 N - K R OW1 - CH IH0 Z\nENCROACHING  IH0 N - K R OW1 - CH IH0 NG\nENCROACHMENT  EH0 N - K R OW1 CH - M AH0 N T\nENCROACHMENTS  IH0 N - K R OW1 CH - M AH0 N T S\nENCRUST  EH0 N - K R AH1 S T\nENCRUSTED  EH0 N - K R AH1 - S T IH0 D\nENCRUSTING  EH0 N - K R AH1 - S T IH0 NG\nENCRYPT  EH0 N - K R IH1 P T\nENCRYPT(2)  IH0 N - K R IH1 P T\nENCRYPTED  EH0 N - K R IH1 P - T IH0 D\nENCRYPTED(2)  IH0 N - K R IH1 P - T IH0 D\nENCRYPTION  EH0 N - K R IH1 P - SH AH0 N\nENCUMBER  EH0 N - K AH1 M - B ER0\nENCUMBERED  EH0 N - K AH1 M - B ER0 D\nENCYCLICAL  EH0 N - S IH1 - K L IH0 - K AH0 L\nENCYCLICALS  EH0 N - S IH1 - K L IH0 - K AH0 L Z\nENCYCLOPAEDIA  IH0 N - S AY2 - K L AH0 - P IY1 - D IY0 - AH0\nENCYCLOPAEDIA(2)  IH0 N - S AY2 - K L OW0 - P IY1 - D IY0 - AH0\nENCYCLOPEDIA  IH0 N - S AY2 - K L AH0 - P IY1 - D IY0 - AH0\nENCYCLOPEDIA(2)  IH0 N - S AY2 - K L OW0 - P IY1 - D IY0 - AH0\nENCYCLOPEDIAS  IH0 N - S AY2 - K L AH0 - P IY1 - D IY0 - AH0 Z\nENCYCLOPEDIAS(2)  IH0 N - S AY2 - K L OW0 - P IY1 - D IY0 - AH0 Z\nENCYCLOPEDIC  IH0 N - S AY2 - K L AH0 - P IY1 - D IH0 K\nENCYCLOPEDIC(2)  IH0 N - S AY2 - K L OW0 - P IY1 - D IH0 K\nENCYCLOPEDIST  IH0 N - S AY2 - K L AH0 - P IY1 - D AH0 S T\nENCYCLOPEDIST(2)  IH0 N - S AY2 - K L OW0 - P IY1 - D AH0 S T\nEND  EH1 N D\nENDAKA  EH0 N - D AA1 - K AH0\nENDANGER  EH0 N - D EY1 N - JH ER0\nENDANGERED  EH0 N - D EY1 N - JH ER0 D\nENDANGERED(2)  IH0 N - D EY1 N - JH ER0 D\nENDANGERING  EH0 N - D EY1 N - JH ER0 - IH0 NG\nENDANGERMENT  EH0 N - D EY1 N - JH ER0 - M AH0 N T\nENDANGERS  EH0 N - D EY1 N - JH ER0 Z\nENDARA  EH1 N - D AA1 - R AH0\nENDE  EH1 N D\nENDEAR  EH0 N - D IY1 R\nENDEARED  EH0 N - D IY1 R D\nENDEARING  EH0 N - D IY1 - R IH0 NG\nENDEARMENT  IH0 N - D IH1 R - M AH0 N T\nENDEAVOR  IH0 N - D EH1 - V ER0\nENDEAVOR'S  IH0 N - D EH1 - V ER0 Z\nENDEAVORED  IH0 N - D EH1 - V ER0 D\nENDEAVORING  IH0 N - D EH1 - V ER0 - IH0 NG\nENDEAVORING(2)  IH0 N - D EH1 - V R IH0 NG\nENDEAVORS  IH0 N - D EH1 - V ER0 Z\nENDEAVOUR  IH0 N - D EH1 - V ER0\nENDEAVOUR'S  IH0 N - D EH1 - V ER0 Z\nENDED  EH1 N - D AH0 D\nENDED(2)  EH1 N - D IH0 D\nENDEMIC  EH0 N - D EH1 - M IH0 K\nENDER  EH1 N - D ER0\nENDERBY  EH1 N - D ER0 - B IY0\nENDERLE  EH1 N - D ER0 - AH0 L\nENDERLIN  EH1 N - D ER0 - L IH0 N\nENDERS  EH1 N - D ER0 Z\nENDERSON  EH1 N - D ER0 - S AH0 N\nENDEVCO  EH0 N - D EH1 V - K OW0\nENDGAME  EH1 N D - G EY0 M\nENDGAMES  EH1 N D - G EY0 M Z\nENDICOTT  EH1 N - D IH0 - K AA2 T\nENDING  EH1 N - D IH0 NG\nENDINGS  EH1 N - D IH0 NG Z\nENDIVE  EH1 N - D IH0 V\nENDLER  EH1 N D - L ER0\nENDLESS  EH1 N D - L AH0 S\nENDLESSLY  EH1 N D - L AH0 S - L IY0\nENDLICH  EH1 N D - L IH0 K\nENDO  EH1 N - D OW0\nENDOCRINE  EH1 N - D OW0 - K R AY2 N\nENDOCRINOLOGIST  EH2 N - D OW0 - K R AH0 - N AA1 - L AH0 - JH AH0 S T\nENDOCRINOLOGIST'S  EH2 N - D OW0 - K R AH0 - N AA1 - L AH0 - JH AH0 S T S\nENDOCRINOLOGISTS  EH2 N - D OW0 - K R AH0 - N AA1 - L AH0 - JH AH0 S T S\nENDOCRINOLOGISTS(2)  EH2 N - D OW0 - K R AH0 - N AA1 - L AH0 - JH AH0 S S\nENDOCRINOLOGISTS(3)  EH2 N - D OW0 - K R AH0 - N AA1 - L AH0 - JH AH0 S\nENDOCRINOLOGY  EH2 N - D OW0 - K R AH0 - N AA1 - L AH0 - JH IY0\nENDODERMAL  EH2 N - D OW0 - D ER1 - M AH0 L\nENDOMETRIAL  EH2 N - D OW0 - M EH2 - T R IY0 - AH0 L\nENDOMETRIOSIS  EH2 N - D OW0 - M EH2 - T R IY0 - OW1 - S IH0 S\nENDORPHIN  EH0 N - D AO1 R - F IH0 N\nENDORPHINS  EH0 N - D AO1 R - F IH0 N Z\nENDORSE  EH0 N - D AO1 R S\nENDORSED  EH0 N - D AO1 R S T\nENDORSEMENT  EH0 N - D AO1 R S - M AH0 N T\nENDORSEMENTS  EH0 N - D AO1 R S - M AH0 N T S\nENDORSER  IH0 N - D AO1 R - S ER0\nENDORSERS  IH0 N - D AO1 R - S ER0 Z\nENDORSES  EH0 N - D AO1 R - S IH0 Z\nENDORSING  EH0 N - D AO1 R - S IH0 NG\nENDOSCOPIC  EH2 N - D OW0 - S K AA1 - P IH0 K\nENDOSPERM  EH1 N - D AH0 - S P ER2 M\nENDOTHERMIC  EH2 N - D OW0 - TH ER1 - M IH0 K\nENDOTRONICS  EH2 N - D OW0 - T R AA1 - N IH0 K S\nENDOTRONICS'  EH2 N - D AH0 - T R AA1 - N IH0 K S\nENDOTRONICS'S  EH2 N - D OW0 - T R AA1 - N IH0 K - S IH0 Z\nENDOW  EH0 N - D AW1\nENDOWED  EH0 N - D AW1 D\nENDOWING  EH0 N - D AW1 - IH0 NG\nENDOWMENT  EH0 N - D AW1 - M AH0 N T\nENDOWMENT'S  EH0 N - D AW1 - M AH0 N T S\nENDOWMENTS  EH0 N - D AW1 - M AH0 N T S\nENDPOINT  EH1 N D - P OY2 N T\nENDRES  EH1 N - D ER0 Z\nENDRESS  EH1 N - D R IH0 S\nENDRIZZI  IH0 N - D R IY1 T - S IY0\nENDS  EH1 N D Z\nENDSLEY  EH1 N D S - L IY0\nENDTIMER  EH1 N D - T AY0 - M ER0\nENDTIMERS  EH1 N D - T AY0 - M ER0 Z\nENDUED  EH0 N - D UW1 D\nENDURANCE  EH1 N - D ER0 - AH0 N S\nENDURE  EH0 N - D Y UH1 R\nENDURE(2)  IH0 N - D UH1 R\nENDURED  EH0 N - D Y UH1 R D\nENDURED(2)  IH0 N - D UH1 R D\nENDURES  EH0 N - D Y UH1 R Z\nENDURES(2)  IH0 N - D UH1 R Z\nENDURING  EH0 N - D Y UH1 - R IH0 NG\nENDURING(2)  IH0 N - D UH1 - R IH0 NG\nENDY  EH1 N - D IY0\nENEA  EH1 - N IY0 - AH0\nENEMA  EH1 - N AH0 - M AH0\nENEMAS  EH1 - N AH0 - M AH0 Z\nENEMIES  EH1 - N AH0 - M IY0 Z\nENEMIES'  EH1 - N AH0 - M IY0 Z\nENEMY  EH1 - N AH0 - M IY0\nENEMY'S  EH1 - N AH0 - M IY0 Z\nENERGAS  EH1 - N ER0 - G AE2 S\nENERGEN  EH1 - N ER0 - JH EH2 N\nENERGETIC  EH2 - N ER0 - JH EH1 - T IH0 K\nENERGETICALLY  EH2 - N ER0 - JH EH1 - T IH0 K - L IY0\nENERGIES  EH1 - N ER0 - JH IY0 Z\nENERGIZE  EH1 - N ER0 - JH AY2 Z\nENERGIZED  EH1 - N ER0 - JH AY2 Z D\nENERGIZER  EH1 - N ER0 - JH AY2 - Z ER0\nENERGIZES  EH1 - N ER0 - JH AY2 - Z IH0 Z\nENERGIZING  EH1 - N ER0 - JH AY2 - Z IH0 NG\nENERGY  EH1 - N ER0 - JH IY0\nENERGY'S  EH1 - N ER0 - JH IY0 Z\nENERSON  EH1 - N ER0 - S AH0 N\nENEX  IY1 - N AH0 K S\nENFANT  EH1 N - F AA2 N T\nENFANT(2)  AA2 N - F AA1 N T\nENFEEBLE  EH0 N - F IY1 - B AH0 L\nENFEEBLED  EH0 N - F IY1 - B AH0 L D\nENFIELD  EH1 N - F IY0 L D\nENFIELD'S  EH1 N - F IY0 L D Z\nENFINGER  EH1 N - F IH0 - NG ER0\nENFOLD  IH0 N - F OW1 L D\nENFORCE  EH0 N - F AO1 R S\nENFORCEABILITY  EH0 N - F AO2 R - S AH0 - B IH1 - L IH0 - T IY0\nENFORCEABLE  EH0 N - F AO1 R - S AH0 - B AH0 L\nENFORCED  EH0 N - F AO1 R S T\nENFORCEMENT  EH0 N - F AO1 R S - M AH0 N T\nENFORCEMENT'S  EH0 N - F AO1 R S - M AH0 N T S\nENFORCEMENTS  EH0 N - F AO1 R S - M AH0 N T S\nENFORCER  EH0 N - F AO1 R - S ER0\nENFORCERS  EH0 N - F AO1 R - S ER0 Z\nENFORCES  EH0 N - F AO1 R - S IH0 Z\nENFORCING  EH0 N - F AO1 R - S IH0 NG\nENFRANCHISE  IH0 N - F R AE1 N - CH AY2 Z\nENFRANCHISED  EH0 N - F R AE1 N - CH AY2 Z D\nENFRANCHISES  EH0 N - F R AE1 N - CH AY2 - Z IH0 Z\nENG  EH1 NG\nENGAGE  EH0 N - G EY1 JH\nENGAGED  EH0 N - G EY1 JH D\nENGAGEMENT  EH0 N - G EY1 JH - M AH0 N T\nENGAGEMENTS  EH0 N - G EY1 JH - M AH0 N T S\nENGAGES  EH0 N - G EY1 - JH IH0 Z\nENGAGING  EH0 N - G EY1 - JH IH0 NG\nENGBERG  EH1 NG - B ER0 G\nENGDAHL  EH1 NG - D AA0 L\nENGE  EH1 N JH\nENGEBRETSEN  EH1 NG - G IH0 - B R IH0 T - S AH0 N\nENGEBRETSON  EH1 NG - G IH0 - B R IH0 T - S AH0 N\nENGEL  EH1 N - G AH0 L\nENGELBERG  EH1 NG - G AH0 L - B ER0 G\nENGELBERT  EH1 NG - G IH0 L - B ER0 T\nENGELBERTA  EH0 NG - G EH0 L - B EH1 R - T AH0\nENGELBRECHT  EH1 NG - G IH0 L - B R IH0 K T\nENGELEITER  EH1 NG - G AH0 - L AY2 - T ER0\nENGELHARD  EH1 NG - G AH0 L - HH AA2 R D\nENGELHARDT  EH1 NG - G IH0 L - HH AA0 R T\nENGELHART  EH1 NG - G AH0 L - HH AA2 R T\nENGELKE  EH1 NG - G IH0 L K\nENGELKEN  EH1 NG - G IH0 L - K AH0 N\nENGELKING  EH1 NG - G IH0 L - K IH0 NG\nENGELMAN  EH1 NG - G AH0 L - M AH0 N\nENGELMANN  EH1 NG - G AH0 L - M AH0 N\nENGELS  EH1 NG - G AH0 L Z\nENGELSON  EH1 NG - G IH0 L - S AH0 N\nENGELSTAD  EH1 NG - G IH0 L - S T AH0 D\nENGEMAN  EH1 N JH - M AH0 N\nENGEN  EH1 - NG AH0 N\nENGENDER  EH0 N - JH EH1 N - D ER0\nENGENDER(2)  IH0 N - JH EH1 N - D ER0\nENGENDERED  EH0 N - JH EH1 N - D ER0 D\nENGENDERS  EH1 NG - G AH0 N - D ER0 Z\nENGER  EH1 NG - G ER0\nENGERT  EH1 NG - G ER0 T\nENGESSER  EH1 NG - G IH0 - S ER0\nENGH  EH1 NG\nENGHOLM  EH1 NG - HH OW0 L M\nENGINE  EH1 N - JH AH0 N\nENGINE'S  EH1 N - JH AH0 N Z\nENGINE(2)  IH1 N - JH AH0 N\nENGINED  EH1 N - JH AH0 N D\nENGINEER  EH1 N - JH AH0 - N IH1 R\nENGINEER'S  EH2 N - JH AH0 - N IY1 R Z\nENGINEERED  EH2 N - JH AH0 - N IY1 R D\nENGINEERING  EH1 N - JH AH0 - N IH1 - R IH0 NG\nENGINEERS  EH1 N - JH AH0 - N IH1 R Z\nENGINEERS'  EH1 N - JH AH0 - N IH1 R Z\nENGINES  EH1 N - JH AH0 N Z\nENGINES'  EH1 NG - G IY2 N Z\nENGLAND  IH1 NG - G L AH0 N D\nENGLAND'S  IH1 NG - G L AH0 N D Z\nENGLANDER  IH1 NG - G L AH0 N - D ER0\nENGLANDERS  IH1 NG - G L AH0 N - D ER0 Z\nENGLANDS  IH1 NG - G L AH0 N D Z\nENGLE  EH1 NG - G AH0 L\nENGLEBERT  IH1 - NG AH0 L - B ER0 T\nENGLEHARDT  IH1 NG - AH0 L - HH AA0 R T\nENGLEHART  IH1 NG - AH0 L - HH AA0 R T\nENGLEMAN  IH1 - NG AH0 L - M AH0 N\nENGLER  EH1 NG - G AH0 - L ER0\nENGLER'S  EH1 NG - G AH0 - L ER0 Z\nENGLER'S(2)  EH1 NG - G L ER0 Z\nENGLER(2)  EH1 NG - G L ER0\nENGLERT  IH1 NG - L ER0 T\nENGLERTH  IH1 NG - L ER0 TH\nENGLES  IH1 - NG AH0 L Z\nENGLEWOOD  EH1 NG - G AH0 L - W UH2 D\nENGLISH  IH1 NG - G L IH0 SH\nENGLISH(2)  IH1 NG - L IH0 SH\nENGLISHMAN  IH1 NG - G L IH0 SH - M AH0 N\nENGLISHMEN  EH2 NG - L IH1 SH - M AH0 N\nENGLISHWOMAN  IH1 NG - G L IH0 SH - W UH2 - M AH0 N\nENGLUND  IH1 NG - L AH0 N D\nENGMAN  EH1 NG - M AH0 N\nENGQUIST  EH1 NG - K W IH0 S T\nENGRAM  EH1 N - G R AE2 M\nENGRAVE  IH0 N - G R EY1 V\nENGRAVED  IH0 N - G R EY1 V D\nENGRAVER  IH0 N - G R EY1 - V ER0\nENGRAVING  IH0 N - G R EY1 - V IH0 NG\nENGRAVINGS  IH0 N - G R EY1 - V IH0 NG Z\nENGROSS  IH0 N - G R OW1 S\nENGROSSED  IH0 N - G R OW1 S T\nENGROSSING  IH0 N - G R OW1 - S IH0 NG\nENGSTRAND  EH1 NG - S T R AH0 N D\nENGSTROM  EH1 NG - S T R AH0 M\nENGULF  IH0 N - G AH1 L F\nENGULFED  IH0 N - G AH1 L F T\nENGULFING  IH0 N - G AH1 L - F IH0 NG\nENGWALL  IH0 NG - W AO1 L\nENHANCE  EH0 N - HH AE1 N S\nENHANCED  EH0 N - HH AE1 N S T\nENHANCED(2)  IH0 N - HH AE1 N S T\nENHANCEMENT  EH0 N - HH AE1 N S - M AH0 N T\nENHANCEMENTS  EH0 N - HH AE1 N S - M AH0 N T S\nENHANCER  EH0 N - HH AE1 N - S ER0\nENHANCES  EH0 N - HH AE1 N - S IH0 Z\nENHANCING  EH0 N - HH AE1 N - S IH0 NG\nENHOLM  EH1 N - HH OW2 L M\nENHOLME  EH1 N - HH OW2 L M\nENIAC  IY1 - N IY0 - AE2 K\nENICHEM  EH1 - N IH0 - CH AH0 M\nENID  IY1 - N IH0 D\nENIGMA  IH0 - N IH1 G - M AH0\nENIGMATIC  EH2 - N IH0 G - M AE1 - T IH0 K\nENIMONT  IY1 - N IH0 - M AA2 N T\nENIS  EH1 - N IH0 S\nENITT  EH1 - N IH0 T\nENIX  EH1 - N IH0 K S\nENJOIN  EH0 N - JH OY1 N\nENJOIN(2)  IH0 N - JH OY1 N\nENJOINED  EH0 N - JH OY1 N D\nENJOINING  EH0 N - JH OY1 - N IH0 NG\nENJOY  EH0 N - JH OY1\nENJOY(2)  IH0 N - JH OY1\nENJOYABLE  EH0 N - JH OY1 - AH0 - B AH0 L\nENJOYED  EH0 N - JH OY1 D\nENJOYED(2)  IH0 N - JH OY1 D\nENJOYING  EH0 N - JH OY1 - IH0 NG\nENJOYING(2)  IH0 N - JH OY1 - IH0 NG\nENJOYMENT  EH0 N - JH OY1 - M AH0 N T\nENJOYMENT(2)  IH0 N - JH OY1 - M AH0 N T\nENJOYMENTS  EH0 N - JH OY1 - M AH0 N T S\nENJOYS  EH0 N - JH OY1 Z\nENJOYS(2)  IH0 N - JH OY1 Z\nENKE  EH1 NG K\nENLARGE  EH0 N - L AA1 R JH\nENLARGE(2)  IH0 N - L AA1 R JH\nENLARGED  EH0 N - L AA1 R JH D\nENLARGED(2)  IH0 N - L AA1 R JH D\nENLARGEMENT  IH0 N - L AA1 R JH - M AH0 N T\nENLARGEMENTS  IH0 N - L AA1 R JH - M AH0 N T S\nENLARGER  IH0 N - L AA1 R - G ER0\nENLARGES  IH0 N - L AA1 R - JH IH0 Z\nENLARGING  IH0 N - L AA1 R - JH IH0 NG\nENLIGHTEN  EH0 N - L AY1 - T AH0 N\nENLIGHTENED  EH0 N - L AY1 - T AH0 N D\nENLIGHTENING  EH0 N - L AY1 - T AH0 N - IH0 NG\nENLIGHTENING(2)  EH0 N - L AY1 T - N IH0 NG\nENLIGHTENMENT  EH0 N - L AY1 - T AH0 N - M AH0 N T\nENLIST  EH0 N - L IH1 S T\nENLISTED  EH0 N - L IH1 - S T IH0 D\nENLISTED(2)  IH0 N - L IH1 - S T AH0 D\nENLISTEE  IH0 N - L IH2 - S T IY1\nENLISTEES  IH0 N - L IH2 - S T IY1 Z\nENLISTING  EH0 N - L IH1 - S T IH0 NG\nENLISTING(2)  IH0 N - L IH1 - S T IH0 NG\nENLISTMENT  EH0 N - L IH1 S T - M AH0 N T\nENLISTS  EH0 N - L IH1 S T S\nENLISTS(2)  EH0 N - L IH1 S S\nENLISTS(3)  EH0 N - L IH1 S\nENLIVEN  EH0 N - L AY1 - V AH0 N\nENLIVENED  EH0 N - L AY1 - V AH0 N D\nENLO  EH1 N - L OW0\nENLOE  IH0 N - L OW1\nENLOW  IH0 N - L OW1\nENMAN  EH1 N - M AH0 N\nENMESH  EH0 N - M EH1 SH\nENMESHED  EH0 N - M EH1 SH T\nENMITIES  EH1 N - M AH0 - T IY0 Z\nENMITIES(2)  EH1 N - M IH0 - T IY0 Z\nENMITY  EH1 N - M AH0 - T IY0\nENMITY(2)  EH1 N - M IH0 - T IY0\nENNEA  EH1 - N IY0 - AH0\nENNEKING  EH1 - N IH0 - K IH0 NG\nENNEN  EH1 - N AH0 N\nENNES  EH1 N Z\nENNES(2)  EH1 - N EH0 Z\nENNIS  EH1 - N IH0 S\nENNOBLE  IH0 - N OW1 - B AH0 L\nENNOSUKE  EH1 - N AH0 - S UW0 K\nENNS  EH1 N Z\nENNUI  EH0 - N UW1 - IY0\nENO  EH1 - N OW0\nENOCH  IY1 - N AH0 K\nENOCHS  EH1 - N AH0 K S\nENOLA  IH0 - N OW1 - L AH0\nENOMOTO  IH0 - N OW0 - M OW1 - T OW0\nENORMITY  IH0 - N AO1 R - M AH0 - T IY0\nENORMITY(2)  IY0 - N AO1 R - M AH0 - T IY0\nENORMOUS  IH0 - N AO1 R - M AH0 S\nENORMOUS(2)  IH0 - N AO1 R - M IH0 S\nENORMOUS(3)  IY0 - N AO1 R - M AH0 S\nENORMOUS(4)  IY0 - N AO1 R - M IH0 S\nENORMOUSLY  IH0 - N AO1 R - M AH0 S - L IY0\nENORMOUSLY(2)  IY0 - N AO1 R - M AH0 S - L IY0\nENOUGH  IH0 N - AH1 F\nENOUGH'S  IH0 N - AH1 F S\nENOUGH'S(2)  IY0 - N AH1 F S\nENOUGH(2)  IY0 - N AH1 F\nENQUESO  EH0 N - K W EH1 - S OW0\nENQUIRE  IH0 N - K W AY1 - ER0\nENQUIRER  IH0 N - K W AY1 - R ER0\nENQUIST  EH1 N - K W IH2 S T\nENRAGE  EH0 N - R EY1 JH\nENRAGED  EH0 N - R EY1 JH D\nENRAGED(2)  IH0 N - R EY1 JH D\nENRAGING  EH0 N - R EY1 - JH IH0 NG\nENRAPTURE  EH0 N - R AE1 P - CH ER0\nENRAPTURED  EH0 N - R AE1 P - CH ER0 D\nENRICA  IH0 N - R IY1 - K AH0\nENRICH  EH0 N - R IH1 CH\nENRICH(2)  IH0 N - R IH1 CH\nENRICHED  EH0 N - R IH1 CH T\nENRICHES  EH0 N - R IH1 - CH IH0 Z\nENRICHING  EH0 N - R IH1 - CH IH0 NG\nENRICHING(2)  IH0 N - R IH1 - CH IH0 NG\nENRICHMENT  EH0 N - R IH1 CH - M AH0 N T\nENRICHMENT(2)  IH0 N - R IH1 CH - M AH0 N T\nENRICO  EH0 N - R IY1 - K OW0\nENRIGHT  IH0 N - R AY1 T\nENRILE  EH0 N - R IY1 L\nENRILE(2)  EH0 N - R IY1 - L EY2\nENRIQUE  EH0 N - R IY1 - K EY0\nENRIQUEZ  IH0 N - R IY1 - K W EH0 Z\nENRO  EH1 N - R OW0\nENROLL  EH0 N - R OW1 L\nENROLL(2)  IH0 N - R OW1 L\nENROLLED  EH0 N - R OW1 L D\nENROLLEE  EH0 N - R OW1 - L IY1\nENROLLEES  EH0 N - R OW1 - L IY1 Z\nENROLLING  EH0 N - R OW1 - L IH0 NG\nENROLLMENT  EH0 N - R OW1 L - M AH0 N T\nENROLLMENTS  EH0 N - R OW1 L - M AH0 N T S\nENROLLS  EH0 N - R OW1 L Z\nENRON  EH1 N - R AA0 N\nENRON'S  EH1 N - R AA0 N Z\nENROUTE  EH0 N - R UW1 T\nENSCO  EH1 N - S K OW0\nENSCO'S  EH1 N - S K OW0 Z\nENSCONCE  IH0 N - S K AA1 N S\nENSCONCED  IH0 N - S K AA1 N S T\nENSECO  EH0 N - S EH1 - K OW0\nENSEMBLE  AA0 N - S AA1 M - B AH0 L\nENSEMBLES  AA0 N - S AA1 M - B AH0 L Z\nENSERCH  EH1 N - S ER0 CH\nENSEY  EH1 N - Z IY0\nENSHRINE  EH0 N - SH R AY1 N\nENSHRINED  EH0 N - SH R AY1 N D\nENSHROUD  IH0 N - SH R AW1 D\nENSHROUDED  IH0 N - SH R AW1 - D AH0 D\nENSIGN  EH1 N - S AH0 N\nENSING  EH1 N - S IH0 NG\nENSINGER  EH1 N - S IH0 N - JH ER0\nENSKILDA  EH0 N - S K IH1 L - D AH0\nENSLAVE  EH0 N - S L EY1 V\nENSLAVED  EH0 N - S L EY1 V D\nENSLAVEMENT  EH0 N - S L EY1 V - M AH0 N T\nENSLEN  EH1 N - S AH0 - L AH0 N\nENSLEY  EH1 N S - L IY0\nENSLIN  EH1 N - S L IH0 N\nENSLOW  IH0 N - S L OW1\nENSMINGER  EH1 N - S AH0 - M IH0 - NG ER0\nENSNARE  IH0 N - S N EH1 R\nENSNARED  IH0 N - S N EH1 R D\nENSNARL  IH0 N - S N AA1 R L\nENSNARLED  IH0 N - S N AA1 R L D\nENSOR  EH1 N - S ER0\nENSOURCE  EH0 N - S AO1 R S\nENSRUD  EH1 N - Z R UW2 D\nENSTROM  EH1 N - S T R AH0 M\nENSUE  IH0 N - S UW1\nENSUED  IH0 N - S UW1 D\nENSUES  IH0 N - S UW1 Z\nENSUING  EH1 N - S UW0 - IH0 NG\nENSURE  EH0 N - SH UH1 R\nENSURE(2)  IH0 N - SH UH1 R\nENSURED  EH0 N - SH UH1 R D\nENSURED(2)  IH0 N - SH UH1 R D\nENSURES  EH0 N - SH UH1 R Z\nENSURES(2)  IH0 N - SH UH1 R Z\nENSURING  EH0 N - SH UH1 - R IH0 NG\nENSURING(2)  IH0 N - SH UH1 - R IH0 NG\nENSZ  EH1 N SH\nENT  EH1 N T\nENTAIL  EH0 N - T EY1 L\nENTAILED  IH0 N - T EY1 L D\nENTAILING  IH0 N - T EY1 - L IH0 NG\nENTAILS  IH0 N - T EY1 L Z\nENTANGLE  EH0 N - T AE1 NG - G AH0 L\nENTANGLED  EH0 N - T AE1 NG - G AH0 L D\nENTANGLEMENT  EH0 N - T AE1 NG - G AH0 L - M AH0 N T\nENTANGLEMENT(2)  IH0 N - T AE1 NG - G AH0 L - M AH0 N T\nENTANGLEMENTS  EH0 N - T AE1 NG - G AH0 L - M AH0 N T S\nENTANGLEMENTS(2)  IH0 N - T AE1 NG - G AH0 L - M AH0 N T S\nENTANGLING  IH0 N - T AE1 NG - L IH0 NG\nENTANGLING(2)  EH0 N - T AE1 NG - L IH0 NG\nENTE  EH1 N - T EY0\nENTEBBE  EH2 N - T EH1 - B IY0\nENTEBBE'S  EH2 N - T EH1 - B IY0 Z\nENTENDRE  AA0 N - T AA1 N - D R AH0\nENTENMANN  EH1 N - T AH0 N - M AH0 N\nENTENMANN'S  EH1 N - T AH0 N - M AH0 N Z\nENTER  EH1 N - T ER0\nENTER(2)  EH1 - N ER0\nENTERED  EH1 N - T ER0 D\nENTERED(2)  EH1 - N ER0 D\nENTERGY  EH1 N - T ER0 - JH IY0\nENTERING  EH1 N - T ER0 - IH0 NG\nENTERING(2)  EH1 - N ER0 - IH0 NG\nENTERITIDIS  EH2 N - T ER0 - IH1 - T IH0 - D IH0 S\nENTERIVIDOUS  EH2 N - T ER0 - IH1 - V IH0 - D AH0 S\nENTERLINE  EH1 N - T ER0 - L AY2 N\nENTERLINE'S  EH1 N - T ER0 - L AY2 N Z\nENTERPRISE  EH1 N - T ER0 - P R AY2 Z\nENTERPRISE'S  EH1 N - T ER0 - P R AY2 - Z AH0 Z\nENTERPRISE'S(2)  EH1 N - T ER0 - P R AY2 - Z IH0 Z\nENTERPRISE'S(3)  EH1 - N ER0 - P R AY2 - Z AH0 Z\nENTERPRISE'S(4)  EH1 - N ER0 - P R AY2 - Z IH0 Z\nENTERPRISE(2)  EH1 - N ER0 - P R AY2 Z\nENTERPRISES  EH1 N - T ER0 - P R AY2 - Z IH0 Z\nENTERPRISES'  EH1 N - T ER0 - P R AY2 - Z IH0 Z\nENTERPRISES'(2)  EH1 - N ER0 - P R AY2 - Z IH0 Z\nENTERPRISES(2)  EH1 - N ER0 - P R AY2 - Z IH0 Z\nENTERPRISING  EH1 N - T ER0 - P R AY2 - Z IH0 NG\nENTERPRISING(2)  EH1 - N ER0 - P R AY2 - Z IH0 NG\nENTERRA  EH0 N - T EH1 - R AH0\nENTERS  EH1 N - T ER0 Z\nENTERS(2)  EH1 - N ER0 Z\nENTERTAIN  EH2 N - T ER0 - T EY1 N\nENTERTAIN(2)  EH2 - N ER0 - T EY1 N\nENTERTAINED  EH2 N - T ER0 - T EY1 N D\nENTERTAINED(2)  EH2 - N ER0 - T EY1 N D\nENTERTAINER  EH2 N - T ER0 - T EY1 - N ER0\nENTERTAINER'S  EH2 N - T ER0 - T EY1 - N ER0 Z\nENTERTAINER'S(2)  EH2 - N ER0 - T EY1 - N ER0 Z\nENTERTAINER(2)  EH2 - N ER0 - T EY1 - N ER0\nENTERTAINERS  EH2 N - T ER0 - T EY1 - N ER0 Z\nENTERTAINERS(2)  EH2 - N ER0 - T EY1 - N ER0 Z\nENTERTAINING  EH2 N - T ER0 - T EY1 - N IH0 NG\nENTERTAINING(2)  EH2 - N ER0 - T EY1 - N IH0 NG\nENTERTAINMENT  EH2 N - T ER0 - T EY1 N - M AH0 N T\nENTERTAINMENT'S  EH2 N - T ER0 - T EY1 N - M AH0 N T S\nENTERTAINMENT'S(2)  EH2 - N ER0 - T EY1 N - M AH0 N T S\nENTERTAINMENT(2)  EH2 - N ER0 - T EY1 N - M AH0 N T\nENTERTAINMENTS  EH2 N - T ER0 - T EY1 N - M AH0 N T S\nENTERTAINMENTS(2)  EH2 - N ER0 - T EY1 N - M AH0 N T S\nENTERTAINS  EH2 N - T ER0 - T EY1 N Z\nENTERTAINS(2)  EH2 - N ER0 - T EY1 N Z\nENTEX  EH1 N - T EH2 K S\nENTHRAL  EH0 N - TH R AO1 L\nENTHRALLED  EH0 N - TH R AO1 L D\nENTHUSE  IH0 N - TH UW1 Z\nENTHUSED  IH0 N - TH UW1 Z D\nENTHUSIASM  IH0 N - TH UW1 - Z IY0 - AE2 - Z AH0 M\nENTHUSIASMS  IH0 N - TH UW1 - Z IY0 - AE2 - Z AH0 M Z\nENTHUSIAST  EH0 N - TH UW1 - Z IY0 - AE2 S T\nENTHUSIASTIC  IH0 N - TH UW2 - Z IY0 - AE1 - S T IH0 K\nENTHUSIASTICALLY  IH0 N - TH UW2 - Z IY0 - AE1 - S T IH0 K - L IY0\nENTHUSIASTS  EH0 N - TH UW1 - Z IY0 - AE2 S T S\nENTHUSIASTS(2)  EH0 N - TH UW1 - Z IY0 - AE2 S S\nENTHUSIASTS(3)  EH0 N - TH UW1 - Z IY0 - AE2 S\nENTICE  IH0 N - T AY1 S\nENTICED  IH0 N - T AY1 S T\nENTICEMENT  IH0 N - T AY1 S - M AH0 N T\nENTICEMENTS  IH0 N - T AY1 S - M AH0 N T S\nENTICING  EH0 N - T AY1 - S IH0 NG\nENTIN  EH1 N - T IH0 N\nENTIRE  IH0 N - T AY1 - ER0\nENTIRELY  IH0 N - T AY1 - ER0 - L IY0\nENTIRETY  IH0 N - T AY1 - ER0 - T IY0\nENTITIES  EH1 N - T IH0 - T IY0 Z\nENTITIES'  EH1 N - T IH0 - T IY0 Z\nENTITLE  EH0 N - T AY1 - T AH0 L\nENTITLE(2)  IH0 N - T AY1 - T AH0 L\nENTITLED  EH0 N - T AY1 - T AH0 L D\nENTITLEMENT  EH0 N - T AY1 - T AH0 L - M AH0 N T\nENTITLEMENTS  EH0 N - T AY1 - T AH0 L - M AH0 N T S\nENTITLES  EH0 N - T AY1 - T AH0 L Z\nENTITLING  EH0 N - T AY1 - T AH0 L - IH0 NG\nENTITLING(2)  EH0 N - T AY1 T - L IH0 NG\nENTITY  EH1 N - T AH0 - T IY0\nENTITY'S  EH1 N - T AH0 - T IY0 Z\nENTITY(2)  EH1 N - T IH0 - T IY0\nENTLER  EH1 N T - L ER0\nENTOFFEN  EH1 N - T AH0 - F AH0 N\nENTOFFEN'S  EH1 N - T AH0 - F AH0 N Z\nENTOMB  EH0 N - T UW1 M\nENTOMBED  EH0 N - T UW1 M D\nENTOMBMENT  IH0 N - T UW1 M - M AH0 N T\nENTOMOLOGIST  EH2 N - T AH0 - M AA1 - L AH0 - JH AH0 S T\nENTOMOLOGISTS  EH2 N - T AH0 - M AA1 - L AH0 - JH AH0 S T S\nENTOMOLOGISTS(2)  EH2 N - T AH0 - M AA1 - L AH0 - JH AH0 S S\nENTOMOLOGISTS(3)  EH2 N - T AH0 - M AA1 - L AH0 - JH AH0 S\nENTOMOLOGY  EH2 N - T AH0 - M AA1 - L AH0 - JH IY0\nENTOURAGE  AA2 N - T UH0 - R AA1 ZH\nENTOURAGE(2)  AA2 N - T ER0 - AA1 ZH\nENTRAIL  EH1 N - T R AH0 L\nENTRAILS  EH1 N - T R AH0 L Z\nENTRANCE  EH1 N - T R AH0 N S\nENTRANCED  IH0 N - T R AE1 N S T\nENTRANCES  EH1 N - T R AH0 N - S AH0 Z\nENTRANT  EH1 N - T R AH0 N T\nENTRANTS  EH1 N - T R AH0 N T S\nENTRAP  IH0 N - T R AE1 P\nENTRAPMENT  IH0 N - T R AE1 P - M AH0 N T\nENTRAPPED  IH0 N - T R AE1 P T\nENTRE  AA1 N - T R EY0\nENTRE(2)  AA1 N - T R AH0\nENTREATIES  EH0 N - T R IY1 - T IY0 Z\nENTREATY  EH0 N - T R IY1 - T IY0\nENTREE  AA1 N - T R EY2\nENTREES  AA1 N - T R EY2 Z\nENTREGROWTH  EH1 N - T R AH0 - G R OW0 TH\nENTREKIN  EH1 N - T R IH0 - K IH0 N\nENTRENCH  EH0 N - T R EH1 N CH\nENTRENCHED  EH0 N - T R EH1 N CH T\nENTRENCHED(2)  IH0 N - T R EH1 N CH T\nENTRENCHES  EH0 N - T R EH1 N - CH IH0 Z\nENTRENCHING  EH0 N - T R EH1 N - CH IH0 NG\nENTRENCHMENT  EH0 N - T R EH1 N CH - M AH0 N T\nENTREPRENEUR  AA2 N - T R AH0 - P R AH0 - N ER1\nENTREPRENEUR'S  AA2 N - T R AH0 - P R AH0 - N ER1 Z\nENTREPRENEUR(2)  AA2 N - T R AH0 - P R AH0 - N UH1 R\nENTREPRENEURIAL  AA2 N - T R AH0 - P R AH0 - N ER1 - IY0 - AH0 L\nENTREPRENEURIALISM  EH2 N - T R AH0 - P R AH0 - N UW2 - R IY1 - AH0 - L IH2 - Z AH0 M\nENTREPRENEURS  AA2 N - T R AH0 - P R AH0 - N ER1 Z\nENTREPRENEURSHIP  AA2 N - T R AH0 - P R AH0 - N ER1 - SH IH0 P\nENTRIES  EH1 N - T R IY0 Z\nENTRIKIN  EH1 N - T R IH0 - K IH0 N\nENTRINGER  EH1 N - T ER0 - IH0 - NG ER0\nENTROPY  EH1 N - T R AH0 - P IY0\nENTRUST  EH0 N - T R AH1 S T\nENTRUSTED  EH0 N - T R AH1 - S T IH0 D\nENTRUSTING  EH0 N - T R AH1 - S T IH0 NG\nENTRY  EH1 N - T R IY0\nENTRYWAY  EH1 N - T R IY0 - W EY0\nENTSMINGER  EH1 N T - S AH0 - M IH0 - NG ER0\nENTWINE  EH0 N - T W AY1 N\nENTWINED  EH0 N - T W AY1 N D\nENTWISLE  EH1 N - T W AY0 - AH0 L\nENTWISTLE  IH0 N T - W IH1 - S AH0 L\nENTZ  EH1 N T S\nENTZMINGER  EH1 N T S - M IH0 - NG ER0\nENUMERATE  IH0 - N UW1 - M ER0 - EY2 T\nENUMERATED  IH0 - N UW1 - M ER0 - EY2 - T IH0 D\nENUMERATES  IH0 - N UW1 - M ER0 - EY2 T S\nENUMERATION  IH0 - N UW2 - M ER0 - EY1 - SH AH0 N\nENUNCIATE  IH0 - N AH1 N - S IY0 - EY2 T\nENUNCIATE(2)  IY0 - N AH1 N - S IY0 - EY2 T\nENUNCIATED  IH0 - N AH1 N - S IY0 - EY2 - T IH0 D\nENUNCIATING  IH0 - N AH1 N - S IY0 - EY2 - T IH0 NG\nENVELOP  IH0 N - V EH1 - L AH0 P\nENVELOPE  EH1 N - V AH0 - L OW2 P\nENVELOPED  EH0 N - V EH1 - L AH0 P T\nENVELOPES  EH1 N - V AH0 - L OW2 P S\nENVELOPING  IH0 N - V EH1 - L AH0 - P IH0 NG\nENVELOPS  IH0 N - V EH1 - L AH0 P S\nENVIABLE  EH1 N - V IY0 - AH0 - B AH0 L\nENVIED  EH1 N - V IY0 D\nENVIOUS  EH1 N - V IY0 - AH0 S\nENVIOUSLY  EH1 N - V IY0 - AH0 S - L IY0\nENVIRODYNE  EH0 N - V AY1 - R OW0 - D AY2 N\nENVIRONIC  EH2 N - V AY0 - R AO1 - N IH0 K\nENVIRONICS  EH2 N - V AY0 - R AO1 - N IH0 K S\nENVIRONMENT  IH0 N - V AY1 - R AH0 N - M AH0 N T\nENVIRONMENT'S  IH0 N - V AY1 - R AH0 N - M AH0 N T S\nENVIRONMENTAL  IH0 N - V AY2 - R AH0 N - M EH1 N - T AH0 L\nENVIRONMENTAL(2)  IH0 N - V AY2 - R AH0 N - M EH1 - N AH0 L\nENVIRONMENTALISM  EH0 N - V AY1 - R AH0 N - M EH2 N - T AH0 - L IH2 - Z AH0 M\nENVIRONMENTALISM(2)  EH0 N - V AY1 - R AH0 N - M EH2 - N AH0 - L IH2 - Z AH0 M\nENVIRONMENTALIST  IH0 N - V AY2 - R AH0 N - M EH1 N - T AH0 - L IH0 S T\nENVIRONMENTALIST(2)  IH0 N - V AY2 - R AH0 N - M EH1 - N AH0 - L IH0 S T\nENVIRONMENTALISTS  EH0 N - V AY1 - R AH0 N - M EH2 N - T AH0 - L IH0 S T S\nENVIRONMENTALISTS'  IH0 N - V AY2 - R AH0 N - M EH1 N - T AH0 - L IH0 S T S\nENVIRONMENTALISTS'(2)  EH0 N - V AY2 - R AH0 N - M EH1 - N AH0 - L IH0 S T S\nENVIRONMENTALISTS(2)  EH0 N - V AY1 - R AH0 N - M EH2 N - T AH0 - L IH0 S S\nENVIRONMENTALISTS(3)  EH0 N - V AY1 - R AH0 N - M EH2 - N AH0 - L IH0 S T S\nENVIRONMENTALISTS(4)  EH0 N - V AY1 - R AH0 N - M EH2 - N AH0 - L IH0 S S\nENVIRONMENTALISTS(5)  EH0 N - V AY1 - R AH0 N - M EH2 N - T AH0 - L IH0 S\nENVIRONMENTALISTS(6)  EH0 N - V AY1 - R AH0 N - M EH2 - N AH0 - L IH0 S\nENVIRONMENTALLY  IH0 N - V AY2 - R AH0 N - M EH1 N - T AH0 - L IY0\nENVIRONMENTALLY(2)  IH0 N - V AY2 - R AH0 N - M EH1 - N AH0 - L IY0\nENVIRONMENTS  IH0 N - V AY1 - R AH0 N - M AH0 N T S\nENVIRONS  IH0 N - V AY1 - R AH0 N Z\nENVIROPACT  IH0 N - V AY1 - R OW0 - P AE2 K T\nENVIROSAFE  IH0 N - V AY1 - R OW0 - S EY2 F\nENVIROTEST  IH2 N - V AY1 - R OW0 - T EH2 S T\nENVISAGE  EH0 N - V IH1 - Z IH0 JH\nENVISAGED  EH0 N - V IH1 - Z IH0 JH D\nENVISAGES  EH0 N - V IH1 - Z IH0 - JH IH0 Z\nENVISION  EH0 N - V IH1 - ZH AH0 N\nENVISIONED  EH0 N - V IH1 - ZH AH0 N D\nENVISIONING  EH0 N - V IH1 - ZH AH0 N - IH0 NG\nENVISIONS  EH0 N - V IH1 - ZH AH0 N Z\nENVOS  EH1 N - V OW0 S\nENVOY  EH1 N - V OY0\nENVOY(2)  AA1 N - V OY0\nENVOYS  EH1 N - V OY0 Z\nENVOYS(2)  AA1 N - V OY0 Z\nENVY  EH1 N - V IY0\nENWRIGHT  IH0 N W - R AY1 T\nENYART  EH1 - N Y AA0 R T\nENYEART  EH1 - N Y ER0 T\nENZ  EH1 N Z\nENZO  EH1 N - Z OW0\nENZON  EH1 N - Z AA0 N\nENZOR  EH1 N - Z ER0\nENZYMATIC  EH2 N - Z AY0 - M AE1 - T IH0 K\nENZYME  EH1 N - Z AY2 M\nENZYMES  EH1 N - Z AY2 M Z\nEOCENE  IY1 - AH0 - S IY2 N\nEOFF  EY1 - AO0 F\nEOHIPPUS  IY2 - OW0 - HH IH1 - P AH0 S\nEOLANDE  EY2 - OW0 - L AA1 N - D IY0\nEON  IY1 - AH0 N\nEON(2)  IY1 - AA0 N\nEONS  IY1 - AH0 N Z\nEOS  IY1 - AA0 S\nEOS'S  IY1 - AA0 - S AH0 Z\nEPCOT  EH1 P - K AA0 T\nEPEDA  EH0 - P EY1 - D AH0\nEPEDA'S  EH0 - P EY1 - D AH0 Z\nEPES  IY1 P S\nEPHEDRINE  IH0 - F EH1 D - R IH0 N\nEPHEMERAL  IH0 - F EH1 - M ER0 - AH0 L\nEPHLIN  EH1 - F L IH0 N\nEPHRAIM  IY1 - F R AH0 M\nEPHRON  EH1 - F R AH0 N\nEPIC  EH1 - P IH0 K\nEPIC'S  EH1 - P IH0 K S\nEPICENTER  EH1 - P AH0 - S EH2 N - T ER0\nEPICS  EH1 - P IH0 K S\nEPICURE  EH1 - P IH0 - K Y UH2 R\nEPICUREAN  EH2 - P AH0 - K Y UH0 - R IY1 - AH0 N\nEPICUREAN(2)  EH2 - P AH0 - K Y UH1 - R IY0 - AH0 N\nEPIDEMIC  EH2 - P AH0 - D EH1 - M IH0 K\nEPIDEMIC(2)  EH2 - P IH0 - D EH1 - M IH0 K\nEPIDEMICS  EH2 - P AH0 - D EH1 - M IH0 K S\nEPIDEMIOLOGICAL  EH2 - P AH0 - D IY0 - M IY0 - AH0 - L AA1 - JH IH0 - K AH0 L\nEPIDEMIOLOGIST  EH2 - P AH0 - D IY0 - M IY0 - AA1 - L AH0 - JH IH0 S T\nEPIDEMIOLOGISTS  EH2 - P AH0 - D IY0 - M IY0 - AA1 - L AH0 - JH IH0 S T S\nEPIDEMIOLOGISTS(2)  EH2 - P AH0 - D IY0 - M IY0 - AA1 - L AH0 - JH IH0 S S\nEPIDEMIOLOGISTS(3)  EH2 - P AH0 - D IY0 - M IY0 - AA1 - L AH0 - JH IH0 S\nEPIDEMIOLOGY  EH2 - P AH0 - D EH2 - M IY0 - AA1 - L AH0 - JH IY0\nEPIDERMAL  EH2 - P AH0 - D ER1 - M AH0 L\nEPIDERMIS  EH2 - P AH0 - D ER1 - M AH0 S\nEPIDURAL  EH2 - P AH0 - D ER1 - AH0 L\nEPIGENETIC  EH2 - P AH0 - JH AH0 - N EH1 - T IH0 K\nEPIGRAM  EH1 - P AH0 - G R AE2 M\nEPIGRAPHIC  EH2 - P AH0 - G R AE1 - F IH0 K\nEPILEPSIES  EH1 - P AH0 - L EH2 P - S IY0 Z\nEPILEPSY  EH1 - P AH0 - L EH2 P - S IY0\nEPILEPTIC  EH2 - P AH0 - L EH1 P - T IH0 K\nEPILOGUE  EH1 - P AH0 - L AO2 G\nEPIPHANY  IH0 - P IH1 - F AH0 - N IY0\nEPISCOPAL  IH0 - P IH1 S - K AH0 - P AH0 L\nEPISCOPALIAN  IH0 - P IH2 S - K AH0 - P EY1 - L IY0 - AH0 N\nEPISCOPALIAN(2)  IH0 - P IH2 S - K AH0 - P EY1 - L Y AH0 N\nEPISCOPALIANS  IH0 - P IH2 S - K AH0 - P EY1 - L IY0 - AH0 N Z\nEPISCOPALIANS(2)  IH0 - P IH2 S - K AH0 - P EY1 - L Y AH0 N Z\nEPISCOPO  IH0 - P IH0 S - K OW1 - P OW0\nEPISODE  EH1 - P AH0 - S OW2 D\nEPISODE(2)  EH1 - P IH0 - S OW2 D\nEPISODES  EH1 - P AH0 - S OW2 D Z\nEPISODES(2)  EH1 - P IH0 - S OW2 D Z\nEPISODIC  EH2 - P AH0 - S AA1 - D IH0 K\nEPISTEME  EH1 - P IH0 - S T IY2 M\nEPISTEMOLOGY  IH0 - P IH2 - S T AH0 - M AA1 - L AH0 - JH IY0\nEPISTLE  IH0 - P IH1 - S AH0 L\nEPISTOLARY  IH0 - P IH1 - S T AH0 - L EH2 - R IY0\nEPITAPH  EH1 - P AH0 - T AE2 F\nEPITAPHS  EH1 - P AH0 - T AE2 F S\nEPITHELIAL  EH0 - P IH0 - TH EH1 - L Y AH0 L\nEPITHET  EH1 - P AH0 - TH EH2 T\nEPITHETS  EH1 - P AH0 - TH EH2 T S\nEPITOME  IH0 - P IH1 - T AH0 - M IY0\nEPITOMIZE  IH0 - P IH1 - T AH0 - M AY2 Z\nEPITOMIZED  IH0 - P IH1 - T AH0 - M AY2 Z D\nEPITOMIZES  IH0 - P IH1 - T AH0 - M AY2 - Z IH0 Z\nEPITOPE  EH1 - P IH0 - T OW2 P\nEPLER  EH1 P - L ER0\nEPLEY  EH1 P - L IY0\nEPLIN  EH1 P - L IH0 N\nEPLING  EH1 - P L IH0 NG\nEPOCH  EH1 - P AH0 K\nEPOCH(2)  IY1 - P AH0 K\nEPOCHAL  EH1 - P AH0 - K AH0 L\nEPOCHS  EH1 - P AH0 K S\nEPOCHS(2)  IY1 - P AH0 K S\nEPOGEN  EH1 - P AH0 - JH EH0 N\nEPOXY  IH0 - P AA1 K - S IY0\nEPP  EH1 P\nEPPARD  EH1 - P ER0 D\nEPPEL  EH1 - P AH0 L\nEPPERLY  EH1 - P ER0 - L IY0\nEPPERS  EH1 - P ER0 Z\nEPPERSON  EH1 - P ER0 - S AH0 N\nEPPES  EH1 P S\nEPPICH  EH1 - P IH0 CH\nEPPING  EH1 - P IH0 NG\nEPPINGER  EH1 - P IH0 - NG ER0\nEPPLE  EH1 - P AH0 L\nEPPLER  EH1 P - L ER0\nEPPLEY  EH1 P - L IY0\nEPPNER  EH1 P - N ER0\nEPPOLITO  EH0 - P OW0 - L IY1 - T OW0\nEPPS  EH1 P S\nEPROM  EH1 - P R AH0 M\nEPROMS  EH1 - P R AH0 M Z\nEPSCO  EH1 P - S K OW0\nEPSILON  EH1 P - S AH0 - L AA2 N\nEPSOM  EH1 P - S AH0 M\nEPSOMITE  EH1 P - S AH0 - M AY2 T\nEPSON  EH1 P - S AH0 N\nEPSTEIN  EH1 P - S T IY2 N\nEPSTEIN(2)  EH1 P - S T AY2 N\nEPTING  EH1 P - T IH0 NG\nEQUABLE  EH1 - K W AH0 - B AH0 L\nEQUAL  IY1 - K W AH0 L\nEQUALED  IY1 - K W AH0 L D\nEQUALING  IY1 - K W AH0 L - IH0 NG\nEQUALITY  IH0 - K W AA1 - L AH0 - T IY0\nEQUALIZATION  IY2 - K W AH0 - L IH0 - Z EY1 - SH AH0 N\nEQUALIZE  IY1 - K W AH0 - L AY2 Z\nEQUALIZED  IY1 - K W AH0 - L AY2 Z D\nEQUALIZER  IY1 - K W AH0 - L AY2 - Z ER0\nEQUALIZING  IY1 - K W AH0 - L AY2 - Z IH0 NG\nEQUALLY  IY1 - K W AH0 - L IY0\nEQUALS  IY1 - K W AH0 L Z\nEQUANIMITY  IY2 - K W AH0 - N IH1 - M IH0 - T IY0\nEQUATE  IH0 - K W EY1 T\nEQUATED  IH0 - K W EY1 - T IH0 D\nEQUATES  IH0 - K W EY1 T S\nEQUATING  IH0 - K W EY1 - T IH0 NG\nEQUATION  IH0 - K W EY1 - ZH AH0 N\nEQUATIONS  IH0 - K W EY1 - ZH AH0 N Z\nEQUATOR  IH0 - K W EY1 - T ER0\nEQUATORIAL  IY2 - K W AH0 - T AO1 - R IY0 - AH0 L\nEQUESTRIAN  IH0 - K W EH1 S - T R IY0 - AH0 N\nEQUIANGULAR  IY2 - K W AH0 - AE1 NG - G Y AH0 - L ER0\nEQUIBANK  EH1 - K W AH0 - B AE2 NG K\nEQUICOR  EH1 - K W IH2 - K AO2 R\nEQUIFAX  EH1 - K W IH0 - F AE2 K S\nEQUILIBRIA  IY2 - K W AH0 - L IH1 - B R IY0 - AH0\nEQUILIBRIUM  IY2 - K W AH0 - L IH1 - B R IY0 - AH0 M\nEQUILINK  EH1 - K W AH0 L - IH2 NG K\nEQUIMARK  EH1 - K W IH0 - M AA2 R K\nEQUINE  IY1 - K W AY2 N\nEQUINOX  IY1 - K W AH0 - N AA2 K S\nEQUION  EH1 - K W IY0 - AA0 N\nEQUIP  IH0 - K W IH1 P\nEQUIPMENT  IH0 - K W IH1 P - M AH0 N T\nEQUIPMENT'S  IH0 - K W IH1 P - M AH0 N T S\nEQUIPMENTS  IH0 - K W IH1 P - M AH0 N T S\nEQUIPPED  IH0 - K W IH1 P T\nEQUIPPING  IH0 - K W IH1 - P IH0 NG\nEQUIPS  IH0 - K W IH1 P S\nEQUITABLE  EH1 - K W AH0 - T AH0 - B AH0 L\nEQUITABLE'S  EH1 - K W AH0 - T AH0 - B AH0 L Z\nEQUITABLE(2)  EH1 - K W IH0 - T AH0 - B AH0 L\nEQUITABLY  EH1 - K W IH0 - T AH0 - B L IY0\nEQUITAS  EH1 - K W AH0 - T AH0 S\nEQUITATION  EH2 - K W AH0 - T EY1 - SH AH0 N\nEQUITEC  EH1 - K W AH0 - T EH2 K\nEQUITEX  EH1 - K W AH0 - T EH2 K S\nEQUITICORP  EH1 - K W IH0 - T IY0 - K AO2 R P\nEQUITIES  EH1 - K W AH0 - T IY0 Z\nEQUITIES'  EH1 - K W AH0 - T IY0 Z\nEQUITY  EH1 - K W AH0 - T IY0\nEQUITY'S  EH1 - K W AH0 - T IY0 Z\nEQUIVALENCE  IH0 - K W IH1 - V AH0 - L AH0 N S\nEQUIVALENCY  IH0 - K W IH1 - V AH0 - L AH0 N - S IY0\nEQUIVALENT  IH0 - K W IH1 - V AH0 - L AH0 N T\nEQUIVALENTS  IH0 - K W IH1 - V AH0 - L AH0 N T S\nEQUIVOCAL  IH0 - K W IH1 - V AH0 - K AH0 L\nEQUIVOCATE  IH0 - K W IH1 - V AH0 - K EY2 T\nEQUIVOCATING  IH0 - K W IH1 - V AH0 - K EY2 - T IH0 NG\nEQUIVOCATION  IH0 - K W IH0 - V AH0 - K EY1 - SH AH0 N\nER  ER0\nERA  EH1 - R AH0\nERA'S  EH1 - R AH0 Z\nERA'S(2)  IH1 - R AH0 Z\nERA(2)  IH1 - R AH0\nERADICATE  IH0 - R AE1 - D AH0 - K EY2 T\nERADICATED  IH0 - R AE1 - D AH0 - K EY2 - T IH0 D\nERADICATING  IH0 - R AE1 - D AH0 - K EY2 - T IH0 NG\nERADICATION  IH0 - R AE2 - D AH0 - K EY1 - SH AH0 N\nERAKAT  EH0 - R AA1 - K AH0 T\nERALP  EH1 - R AO0 L P\nERAMO  EH0 - R AA1 - M OW0\nERANTHE  EH1 - R AH0 N TH\nERANY  AH0 - R EY1 - N IY0\nERAS  IH1 - R AH0 Z\nERASABLE  IH0 - R EY1 - S AH0 - B AH0 L\nERASABLE(2)  IY1 - R EY0 - S AH0 - B AH0 L\nERASE  IH0 - R EY1 S\nERASE(2)  IY0 - R EY1 S\nERASED  IH0 - R EY1 S T\nERASED(2)  IY0 - R EY1 S T\nERASER  IH0 - R EY1 - S ER0\nERASER(2)  IY0 - R EY1 - S ER0\nERASERS  IH0 - R EY1 - S ER0 Z\nERASERS(2)  IY0 - R EY1 - S ER0 Z\nERASES  IH0 - R EY1 - S IH0 Z\nERASES(2)  IY0 - R EY1 - S IH0 Z\nERASING  IH0 - R EY1 - S IH0 NG\nERASING(2)  IY0 - R EY1 - S IH0 NG\nERASMUS  IH0 - R AE1 Z - M AH0 S\nERASTUS  IH0 - R AE1 - S T AH0 S\nERAWAN  EH1 - R AH0 W - AA2 N\nERAZO  EH0 - R AA1 - Z OW0\nERB  ER1 B\nERBACHER  ER1 - B AA0 - K ER0\nERBAMONT  ER1 - B AH0 - M AA2 N T\nERBAMONT'S  ER1 - B AH0 - M AA2 N T S\nERBE  ER1 B\nERBER  ER1 - B ER0\nERBES  ER1 B Z\nERBURU  ER0 - B UH1 - R UW0\nERBY  ER1 - B IY0\nERCEG  ER1 - S IH0 G\nERCK  ER1 K\nERCOLE  ER0 - K OW1 - L IY0\nERCROS  ER1 - K R OW0 Z\nERDA  EH1 R - D AH0\nERDAHL  ER1 - D AA0 L\nERDMAN  ER1 D - M AH0 N\nERDMANN  ER1 D - M AH0 N\nERDOS  ER1 - D OW0 Z\nERDRICH  ER1 - D R IH0 K\nERECT  IH0 - R EH1 K T\nERECTED  IH0 - R EH1 K - T AH0 D\nERECTED(2)  IH0 - R EH1 K - T IH0 D\nERECTING  IH0 - R EH1 K - T IH0 NG\nERECTION  IH0 - R EH1 K - SH AH0 N\nERECTIONS  IH0 - R EH1 K - SH AH0 N Z\nERECTOR  IH0 - R EH1 K - T ER0\nERECTS  IH0 - R EH1 K T S\nERENA  ER0 - EH1 - N AH0\nERENSEL  EH1 - R AH0 N - S EH0 L\nERGLE  ER1 - G AH0 L\nERGO  ER1 - G OW0\nERGONOMIC  ER2 - G AH0 - N AA1 - M IH0 K\nERGONOMICS  ER2 - G AH0 - N AA1 - M IH0 K S\nERGOT  ER1 - G AH0 T\nERGOT'S  ER1 - G AH0 T S\nERGOTISM  ER1 - G AH0 - T IH2 - Z AH0 M\nERGOTS  ER1 - G AH0 T S\nERHARD  EH1 R - HH AA0 R D\nERHARDT  ER1 - HH AA0 R T\nERHART  ER1 - HH AA0 R T\nERIC  EH1 - R IH0 K\nERIC'S  EH1 - R IH0 K S\nERICA  EH1 - R IH0 - K AH0\nERICH  EH1 - R IH0 K\nERICHSEN  EH1 - R IH0 K - S AH0 N\nERICK  EH1 - R IH0 K\nERICKA  EH1 - R IH0 - K AH0\nERICKSEN  EH1 - R IH0 K - S AH0 N\nERICKSON  EH1 - R IH0 K - S AH0 N\nERICSON  EH1 - R IH0 K - S AH0 N\nERICSSON  EH1 - R IH0 K - S AH0 N\nERICSSON'S  EH1 - R IH0 K - S AH0 N Z\nERIDANIA  EH2 - R IH0 - D AE1 - N IY0 - AH0\nERIE  IH1 - R IY0\nERIK  EH1 - R IH0 K\nERIK'S  EH1 - R IH0 K S\nERIKA  EH1 - R IH0 - K AH0\nERIKSEN  EH1 - R IH0 K - S AH0 N\nERIKSON  EH1 - R IH0 K - S AH0 N\nERIKSON'S  EH1 - R IH0 K - S AH0 N Z\nERIKSSON  EH1 - R IH0 K - S AH0 N\nERIN  EH1 - R IH0 N\nERINA  ER0 - IY1 - N AH0\nERION  EH0 - R IY0 - AO1 N\nERISA  EH0 - R IY1 - S AH0\nERISMAN  EH1 - R IH0 S - M AH0 N\nERITREA  EH2 - R IH0 - T R IY1 - AH0\nERITREA(2)  EH2 - R IH0 - T R EY1 - AH0\nERITREAN  EH2 - R IH0 - T R IY1 - AH0 N\nERITREAN(2)  EH2 - R IH0 - T R EY1 - AH0 N\nERITREANS  EH1 - R IH0 - T R IY2 N Z\nERITREANS(2)  EH2 - R IH0 - T R EY1 - AH0 N Z\nERK  ER1 K\nERKER  ER1 - K ER0\nERKKILA  ER1 - K IH0 - L AH0\nERL  ER1 L\nERLACH  ER1 - L AA2 K\nERLAND  ER1 - L AH0 N D\nERLANDSON  ER1 - L AH0 N D - S AH0 N\nERLANGEN  ER0 - L AE1 NG - G AH0 N\nERLANGER  EH1 R - L AE0 - NG ER0\nERLANGER(2)  EH1 R - L AE0 NG - G ER0\nERLE  AO1 - R AH0 L\nERLENE  ER1 - L IY0 N\nERLER  ER1 - L ER0\nERLICH  ER1 - L IH0 K\nERLICHMAN  ER1 - L IH0 K - M AH0 N\nERLICHMAN(2)  EH1 R - L IH0 K - M AH0 N\nERLICK  ER1 - L IH0 K\nERLICK(2)  EH1 R - L IH0 K\nERLINE  ER1 - L AY0 N\nERLING  ER1 - L IH0 NG\nERLY  ER1 - L IY0\nERMA  ER1 - M AH0\nERMA'S  ER1 - M AH0 Z\nERMAN  ER1 - M AH0 N\nERMER  ER1 - M ER0\nERMIN  ER1 - M IH0 N\nERMINA  ER0 - M IY1 - N AH0\nERMINE  ER1 - M AH0 N\nERMINIA  ER0 - M IY1 - N IY0 - AH0\nERMINIE  ER1 - M IH0 - N IY0\nERMIS  ER1 - M IH0 S\nERNA  ER1 - N AH0\nERNALINE  ER1 - N AH0 - L AY0 N\nERNE  ER1 N\nERNEST  ER1 - N AH0 S T\nERNEST'S  ER1 - N AH0 S T S\nERNEST(2)  ER1 - N IH0 S T\nERNESTINE  ER1 - N IH0 - S T IY2 N\nERNESTO  ER0 - N EH1 - S T OW0\nERNESTS  ER1 - N AH0 S T S\nERNESTS(2)  ER1 - N AH0 S S\nERNESTS(3)  ER1 - N AH0 S\nERNEY  ER1 - N IY0\nERNIE  ER1 - N IY0\nERNO  EH1 R - N OW0\nERNSBERGER  ER1 N Z - B ER0 - G ER0\nERNST  ER1 N S T\nERNSTER  ER1 N - S T ER0\nERNY  ER1 - N IY0\nERO  IH1 - R OW0\nERODE  IH0 - R OW1 D\nERODE(2)  IY1 - R OW0 D\nERODED  IH0 - R OW1 - D AH0 D\nERODED(2)  IH0 - R OW1 - D IH0 D\nERODED(3)  IH0 - R OW1 - D IH0 D\nERODED(4)  IH0 - R OW1 - D AH0 D\nERODES  IH0 - R OW1 D Z\nERODES(2)  IH0 - R OW1 D Z\nERODIBLE  IH0 - R OW1 - D AH0 - B AH0 L\nERODIBLE(2)  IH0 - R OW1 - D AH0 - B AH0 L\nERODING  IH0 - R OW1 - D IH0 NG\nERODING(2)  IY0 - R OW1 - D IH0 NG\nEROH  EH1 - R OW0\nEROICA  ER0 - OY1 - K AH0\nEROL  EH1 - R AH0 L\nEROL'S  EH1 - R AH0 L Z\nERON  IH1 - R AA0 N\nEROS  IH1 - R AA0 S\nEROSION  IH0 - R OW1 - ZH AH0 N\nEROSIONAL  IH0 - R OW1 - ZH AH0 - N AH0 L\nEROSIVE  IH0 - R OW1 - S IH0 V\nEROTIC  IH0 - R AA1 - T IH0 K\nEROTICA  IH0 - R AA1 - T IH0 - K AH0\nEROTICISM  ER0 - AA1 - T IH0 - S IH2 - Z AH0 M\nERPELDING  ER1 - P IH0 L - D IH0 NG\nERPS  ER1 P S\nERR  EH1 R\nERR(2)  ER1\nERRA  EH1 - R AH0\nERRAND  EH1 - R AH0 N D\nERRANDS  EH1 - R AH0 N D Z\nERRANT  EH1 - R AH0 N T\nERRATIC  IH0 - R AE1 - T IH0 K\nERRATICALLY  EH0 - R AE1 - T IH0 K - L IY0\nERRED  EH1 R D\nERRETT  EH1 - R IH0 T\nERRIA  EH1 - R IY0 - AH0\nERRICKSON  EH1 - R IH0 K - S AH0 N\nERRICO  ER0 - IY1 - K OW0\nERRINGTON  EH1 - R IH0 NG - T AH0 N\nERROL  EH1 - R AH0 L\nERRONEOUS  EH0 - R OW1 - N IY0 - AH0 S\nERRONEOUS(2)  ER0 - OW1 - N IY0 - AH0 S\nERRONEOUSLY  EH0 - R OW1 - N IY0 - AH0 S - L IY0\nERROR  EH1 - R ER0\nERRORS  EH1 - R ER0 Z\nERRS  EH1 R Z\nERS  ER1 Z\nERS(2)  IY1 - AA1 - R EH1 S\nERSATZ  EH1 R - S AA2 T S\nERSATZ(2)  EH1 R - Z AA2 T S\nERSHAD  ER1 - SH AE2 D\nERSHAD(2)  ER1 - SH AA2 D\nERSKIN  ER1 - S K IH0 N\nERSKINE  ER1 - S K AY2 N\nERSTWHILE  ER1 S T - W AY2 L\nERTE  ER1 T\nERTE(2)  ER1 - T EY0\nERTEL  ER1 - T AH0 L\nERTHA  ER1 - DH AH0\nERTL  ER1 - T AH0 L\nERTLE  ER1 - T AH0 L\nERTMAN  ER1 T - M AH0 N\nERTZ  ER1 T S\nERUDITE  EH1 - R AH0 - D AY2 T\nERUDITION  EH2 - R AH0 - D IH1 - SH AH0 N\nERUPT  IH0 - R AH1 P T\nERUPT(2)  IY1 - R AH0 P T\nERUPTED  IH0 - R AH1 P - T AH0 D\nERUPTED(2)  IY0 - R AH1 P - T IH0 D\nERUPTED(3)  IH0 - R AH1 P - T IH0 D\nERUPTED(4)  IY0 - R AH1 P - T AH0 D\nERUPTING  IH0 - R AH1 P - T IH0 NG\nERUPTING(2)  IY0 - R AH1 P - T IH0 NG\nERUPTION  IH0 - R AH1 P - SH AH0 N\nERUPTION(2)  IY0 - R AH1 P - SH AH0 N\nERUPTIONS  IH0 - R AH1 P - SH AH0 N Z\nERUPTIONS(2)  IY0 - R AH1 P - SH AH0 N Z\nERUPTIVE  IH0 - R AH1 P - T IH0 V\nERUPTIVE(2)  IY0 - R AH1 P - T IH0 V\nERUPTS  IH0 - R AH1 P T S\nERUPTS(2)  IY0 - R AH1 P T S\nERUPTS(3)  IH0 - R AH1 P S\nERUPTS(4)  IY0 - R AH1 P S\nERVEN  ER1 - V AH0 N\nERVIN  ER1 - V IH0 N\nERVING  ER1 - V IH0 NG\nERWAY  ER1 - W EY0\nERWIN  ER1 - W IH0 N\nERWINA  ER0 - V AY1 - N AH0\nERXLEBEN  ER0 K - S L EH1 - B AH0 N\nERYTHROPOIETIN  EH0 - R IH2 - TH R AH0 - P OY1 - T IH0 N\nES  EH1 S\nESAREY  EH1 - S ER0 - IY0\nESAU  IY1 - S AO2\nESBENSHADE  EH1 S - B IH0 N - SH AH0 D\nESBENSHADE(2)  EH1 S - B AH0 N - SH EY0 D\nESBER  EH1 S - B ER0\nESCADA  EH2 - S K AA1 - D AH0\nESCALANTE  EH0 - S K AA0 - L AA1 N - T IY0\nESCALATE  EH1 - S K AH0 - L EY2 T\nESCALATED  EH1 - S K AH0 - L EY2 - T IH0 D\nESCALATES  EH1 - S K AH0 - L EY2 T S\nESCALATING  EH1 - S K AH0 - L EY2 - T IH0 NG\nESCALATION  EH2 - S K AH0 - L EY1 - SH AH0 N\nESCALATOR  EH1 - S K AH0 - L EY2 - T ER0\nESCALATORS  EH1 - S K AH0 - L EY2 - T ER0 Z\nESCALERA  EH0 - S K AA0 - L EH1 - R AH0\nESCALONA  EH0 - S K AA0 - L OW1 - N AH0\nESCAMBIA  EH2 - S K AE1 M - B IY0 - AH0\nESCAMEZ  EH0 - S K AA1 - M EH0 Z\nESCAMILLA  EH0 - S K AA0 - M IH1 - L AH0\nESCANABA  EH2 - S K AH0 - N AA1 - B AH0\nESCANDON  IH0 - S K AE1 N - D AH0 N\nESCAPADE  EH1 - S K AH0 - P EY2 D\nESCAPADES  EH1 - S K AH0 - P EY2 D Z\nESCAPE  IH0 - S K EY1 P\nESCAPED  IH0 - S K EY1 P T\nESCAPEE  IH0 - S K EY2 - P IY1\nESCAPEES  IH0 - S K EY2 - P IY1 Z\nESCAPEMENT  IH0 - S K EY1 P - M AH0 N T\nESCAPES  IH0 - S K EY1 P S\nESCAPING  IH0 - S K EY1 - P IH0 NG\nESCAPISM  IH0 - S K EY1 - P IH2 - Z AH0 M\nESCARCEGA  EH0 - S K AA0 R - CH EH1 - G AH0\nESCARENO  EH0 - S K AA0 - R EH1 - N OW0\nESCARPMENT  EH0 - S K AA1 R P - M AH0 N T\nESCARPMENTS  EH0 - S K AA1 R P - M AH0 N T S\nESCH  EH1 SH\nESCHATOLOGICAL  EH2 - S K AH0 - T AH0 - L AA1 - JH IH0 - K AH0 L\nESCHBACH  EH1 SH - B AA2 K\nESCHE  EH1 SH\nESCHEN  EH1 - SH AH0 N\nESCHENBACH  EH1 - SH IH0 N - B AA0 K\nESCHENBURG  EH1 - SH AH0 N - B ER0 G\nESCHER  EH1 - SH ER0\nESCHETE  EH1 - SH IY0 T\nESCHEW  EH0 S - CH UW1\nESCHEWED  EH2 SH - UW1 D\nESCHEWED(2)  EH2 - S K Y UW1 D\nESCHEWING  EH2 SH - UW1 - IH0 NG\nESCHEWING(2)  EH2 - S K Y UW1 - IH0 NG\nESCHEWS  EH0 S - CH UW1 Z\nESCHMANN  EH1 SH - M AH0 N\nESCO  EH1 - S K OW0\nESCOBAR  EH1 - S K OW0 - B AA2 R\nESCOBAR'S  EH1 - S K OW0 - B AA2 R Z\nESCOBAR'S(2)  EH1 - S K AH0 - B AA2 R Z\nESCOBAR(2)  EH1 - S K AH0 - B AA2 R\nESCOBEDO  EH0 - S K OW0 - B EY1 - D OW0\nESCOE  IH0 - S K OW1\nESCONDIDO  EH2 - S K AA0 N - D IY1 - D OW0\nESCORT  EH0 - S K AO1 R T\nESCORT(2)  EH1 - S K AO0 R T\nESCORTED  EH0 - S K AO1 R - T IH0 D\nESCORTING  EH1 - S K AO0 R - T IH0 NG\nESCORTS  EH1 - S K AO0 R T S\nESCOTO  EH0 - S K OW1 - T OW0\nESCOTT  EH1 - S K AH0 T\nESCROW  EH0 - S K R OW1\nESCROW(2)  EH1 - S K R OW0\nESCROWED  EH1 - S K R OW0 D\nESCUDERO  EH0 - S K UW0 - D EH1 - R OW0\nESCUDO  EH0 - S K UW1 - D OW0\nESCUDOS  EH0 - S K UW1 - D OW0 Z\nESCUE  EY1 - S K Y UW0\nESCULENT  EH0 - S K UW1 - L AH0 N T\nESH  EH1 SH\nESHAM  EH1 - SH AH0 M\nESHBACH  EH1 SH - B AA2 K\nESHBAUGH  IH0 SH - B AO1\nESHELMAN  EH1 - SH AH0 L - M AH0 N\nESHLEMAN  EH1 - SH AH0 L - M AH0 N\nESKANDARIAN  EH2 - S K AH0 N - D EH1 - R IY0 - AH0 N\nESKELSON  EH1 - S K IH0 L - S AH0 N\nESKENAZI  EY0 - S K EY0 - N AA1 - Z IY0\nESKENAZI(2)  EH0 - S K AH0 - N AA1 - Z IY0\nESKER  EH1 - S K ER0\nESKEW  EH1 - S K Y UW0\nESKEY  EH1 S - K IY0\nESKIMO  EH1 - S K AH0 - M OW2\nESKIMOS  EH1 - S K AH0 - M OW2 Z\nESKIN  IH0 - S K IH1 N\nESKRIDGE  EH1 - S K R IH2 JH\nESLER  EH1 - S AH0 - L ER0\nESLER(2)  EH1 S - L ER0\nESLICK  EH1 - S L IH0 K\nESLINGER  EH1 - S AH0 - L IH0 - NG ER0\nESLINGER(2)  EH1 - S L IH0 - NG ER0\nESMARK  EH1 S - M AA2 R K\nESME  EH1 Z M\nESMERELDA  EH0 S - M ER0 - EH1 L - D AH0\nESMINE  EH1 Z - M AH0 N\nESMOND  EH1 Z - M AH0 N D\nESOPHAGUS  IH0 - S AA1 - F AH0 - G AH0 S\nESOTERIC  EH2 - S AH0 - T EH1 - R IH0 K\nESOTERIC(2)  EH2 - S OW0 - T EH1 - R IH0 K\nESPADA  EY0 - S P AA1 - D AH0\nESPALIER  EH0 - S P AE1 L - Y ER0\nESPANA  EH0 - S P AE1 - N Y AH0\nESPANOL  EH2 - S P AA0 N - Y OW1 L\nESPANOLA  EH2 - S P AH0 - N OW1 - L AH0\nESPARZA  EH0 - S P AA1 R - Z AH0\nESPE  EH1 S P\nESPECIALLY  AH0 - S P EH1 SH - L IY0\nESPECIALLY(2)  AH0 - S P EH1 - SH AH0 - L IY0\nESPECTADOR  EH0 - S P EH2 K - T AH0 - D AO1 R\nESPEJO  EY0 - S P EY1 - Y OW0\nESPELAND  EH1 - S P IH0 - L AH0 N D\nESPENSCHIED  EH1 - S P IH0 N - SH IY0 D\nESPENSHADE  EH1 - S P IH0 N - SH AH0 D\nESPENSHADE(2)  EH1 - S P IH0 N - SH EY0 D\nESPER  EH1 - S P ER0\nESPERANTO  EH2 - S P ER0 - AE1 N - T OW0\nESPERANTO'S  EH2 - S P ER0 - AE1 N - T OW0 Z\nESPESETH  EH1 - S P IH0 - S IH0 TH\nESPEY  EH1 - S P IY0\nESPINAL  EY0 - S P IY1 - N AH0 L\nESPINO  EY0 - S P IY1 - N OW0\nESPINOLA  EH0 - S P IY0 - N OW1 - L AH0\nESPINOSA  EH0 - S P IH0 - N OW1 - Z AH0\nESPINOZA  EY0 - S P IY0 - N OW1 - Z AH0\nESPIONAGE  EH1 - S P IY0 - AH0 - N AA0 JH\nESPIRITO  EH2 - S P IH0 - R IY1 - T OW0\nESPIRITO(2)  EH2 - S P IH1 - R IH0 - T OW0\nESPIRITU  EH0 - S P IH0 - R IY1 - CH UW0\nESPITIA  EH0 - S P IY1 - SH AH0\nESPLANADE  EH2 S - P L AH0 - N AA1 D\nESPLIN  EH1 - S P L IH0 N\nESPOSITO  EH0 - S P AH0 - Z IY1 - T OW0\nESPOUSE  IH0 - S P AW1 Z\nESPOUSE(2)  IH0 - S P AW1 S\nESPOUSED  IH0 - S P AW1 Z D\nESPOUSED(2)  IH0 - S P AW1 S T\nESPOUSES  IH0 - S P AW1 - Z IH0 Z\nESPOUSES(2)  IH0 - S P AW1 - S IH0 Z\nESPOUSING  IH0 - S P AW1 - Z IH0 NG\nESPOUSING(2)  IH0 - S P AW1 - S IH0 NG\nESPRESSO  EH2 - S P R EH1 - S OW0\nESPRIT  EH0 - S P R IY1\nESPRIT'S  EH0 - S P R IY1 Z\nESPY  EH1 - S P IY0\nESPY'S  EH1 - S P IY0 Z\nESQUE  EH1 S K\nESQUEDA  EH0 - S K W EY1 - D AH0\nESQUER  IH0 - S K ER1\nESQUIBEL  EY0 S K - W IY0 - B EH1 L\nESQUIRE  EH1 - S K W AY2 R\nESQUIRE'S  EH1 - S K W AY2 R Z\nESQUIVEL  EY0 S K - W IY0 - V EH1 L\nESREY  EH1 - S R IY0\nESS  EH1 S\nESSA  EH1 - S AH0\nESSARY  EH1 - S EH0 - R IY0\nESSAY  EH0 - S EY1\nESSAY(2)  EH1 - S EY2\nESSAYIST  EH1 - S EY2 - IH0 S T\nESSAYS  EH0 - S EY1 Z\nESSAYS(2)  EH1 - S EY2 Z\nESSE  EH1 S\nESSELMAN  EH1 - S AH0 L - M AH0 N\nESSELTE  EH0 - S EH1 L - T IY0\nESSEN  EH1 - S AH0 N\nESSENBURG  EH1 - S AH0 N - B ER0 G\nESSENCE  EH1 - S AH0 N S\nESSENTIAL  IH0 - S EH1 N - SH AH0 L\nESSENTIAL(2)  IY0 - S EH1 N - SH AH0 L\nESSENTIAL(3)  AH0 - S EH1 N - CH AH0 L\nESSENTIAL(4)  IY0 - S EH1 N - CH AH0 L\nESSENTIALLY  IH0 - S EH1 N - SH AH0 - L IY0\nESSENTIALLY(2)  IY0 - S EH1 N - SH AH0 - L IY0\nESSENTIALS  EH0 - S EH1 N - CH AH0 L Z\nESSENTIALS(2)  IY0 - S EH1 N - CH AH0 L Z\nESSENTIALS(3)  EH0 - S EH1 N - SH AH0 L Z\nESSENTIALS(4)  IY0 - S EH1 N - SH AH0 L Z\nESSER  EH1 - S ER0\nESSES  EH1 - S IH0 Z\nESSES(2)  EH1 - S IY0 Z\nESSEX  EH1 - S IH0 K S\nESSEX'S  EH1 - S IH0 K - S IH0 Z\nESSICK  EH1 - S IH0 K\nESSIE  EH1 - S IY0\nESSIG  EH1 - S IH0 G\nESSLINGER  EH1 - S AH0 - L IH0 - NG ER0\nESSLINGER(2)  EH1 - S L IH0 - NG ER0\nESSMAN  EH1 S - M AH0 N\nESSNER  EH1 S - N ER0\nESSO  EH1 - S OW0\nESSON  EH1 - S AH0 N\nEST  AH0 - S T EY1 T\nESTA  EH1 - S T AH0\nESTABLISH  IH0 - S T AE1 - B L IH0 SH\nESTABLISH(2)  IY0 - S T AE1 - B L IH0 SH\nESTABLISHED  IH0 - S T AE1 - B L IH0 SH T\nESTABLISHED(2)  IY0 - S T AE1 - B L IH0 SH T\nESTABLISHES  IH0 - S T AE1 - B L IH0 - SH IH0 Z\nESTABLISHES(2)  IY0 - S T AE1 - B L IH0 - SH IH0 Z\nESTABLISHING  IH0 - S T AE1 - B L IH0 - SH IH0 NG\nESTABLISHING(2)  IY0 - S T AE1 - B L IH0 - SH IH0 NG\nESTABLISHMENT  IH0 - S T AE1 - B L IH0 SH - M AH0 N T\nESTABLISHMENT'S  EH0 - S T AE1 - B L IH0 SH - M AH0 N T S\nESTABLISHMENT'S(2)  IY0 - S T AE1 - B L IH0 SH - M AH0 N T S\nESTABLISHMENT(2)  IY0 - S T AE1 - B L IH0 SH - M AH0 N T\nESTABLISHMENTS  EH0 - S T AE1 - B L IH0 SH - M AH0 N T S\nESTABLISHMENTS(2)  IY0 - S T AE1 - B L IH0 SH - M AH0 N T S\nESTABROOK  EH1 - S T AH0 - B R UH2 K\nESTABROOKS  EH1 - S T AH0 - B R UH0 K S\nESTAI  EH1 - S T EY0\nESTATE  IH0 - S T EY1 T\nESTATE'S  IH0 - S T EY1 T S\nESTATEHOOD  IH0 - S T EY1 T - HH UH2 D\nESTATES  IH0 - S T EY1 T S\nESTE  EH1 S T\nESTEBAN  EH1 - S T AH0 - B AA0 N\nESTEDAT  EH1 - S T EH0 - D AE2 T\nESTEE  EH1 - S T IY0\nESTEEM  AH0 - S T IY1 M\nESTEEM'S  IH0 - S T IY1 M Z\nESTEEMED  IH0 - S T IY1 M D\nESTEFAN  EH1 - S T IH0 - F AA0 N\nESTEFAN(2)  EH0 - S T EH1 - V AH0 N\nESTEL  EH1 - S T AH0 L\nESTELL  EH1 - S T AH0 L\nESTELLA  EH0 - S T EH1 - L AH0\nESTELLE  EH0 - S T EH1 L\nESTENSON  EH1 - S T IH0 N - S AH0 N\nESTEP  EH1 - S T IH0 P\nESTEPP  EH1 - S T IH0 P\nESTER  EH1 - S T ER0\nESTERLINE  EH1 - S T ER0 - L AY2 N\nESTERLINE'S  EH1 - S T ER0 - L AY2 N Z\nESTERLY  EH1 - S T ER0 - L IY0\nESTERS  EH1 - S T ER0 Z\nESTES  EH1 - S T IY0 Z\nESTEVE  EH1 - S T IH0 V\nESTEVES  EY0 - S T EY1 - V EH0 S\nESTEVEZ  EY0 - S T EY1 - V EH0 Z\nESTEY  EH1 - S T IY0\nESTHER  EH1 - S T ER0\nESTILL  EY0 - S T IY1 L\nESTIMABLE  EH1 - S T AH0 - M AH0 - B AH0 L\nESTIMATE  EH1 - S T AH0 - M AH0 T\nESTIMATE(2)  EH1 - S T AH0 - M EY2 T\nESTIMATED  EH1 - S T AH0 - M EY2 - T AH0 D\nESTIMATED(2)  EH1 - S T AH0 - M EY2 - T IH0 D\nESTIMATES  EH1 - S T AH0 - M AH0 T S\nESTIMATES(2)  EH1 - S T AH0 - M EY2 T S\nESTIMATING  EH1 - S T AH0 - M EY2 - T IH0 NG\nESTIMATION  EH2 - S T AH0 - M EY1 - SH AH0 N\nESTIMATIONS  EH2 - S T AH0 - M EY1 - SH AH0 N Z\nESTIMATOR  EH0 - S T IH1 - M AH0 - T ER0\nESTIMATOR(2)  EH1 - S T IH0 - M EY2 - T ER0\nESTIMATORS  EH0 - S T IH1 - M AH0 - T ER0 Z\nESTIMATORS(2)  EH1 - S T IH0 - M EY2 - T ER0 Z\nESTIS  EH1 - S T IH0 S\nESTLE  EH1 - S AH0 L\nESTOCK  EH1 - S T AA0 K\nESTOK  IH0 - S T AA1 K\nESTONIA  EH0 - S T OW1 - N IY0 - AH0\nESTONIAN  EH0 - S T OW1 - N IY0 - AH0 N\nESTONIANS  EH0 - S T OW1 - N IY0 - AH0 N Z\nESTRADA  EH0 - S T R AA1 - D AH0\nESTRANGE  EH0 - S T R EY1 N JH\nESTRANGED  EH0 - S T R EY1 N JH D\nESTRANGEMENT  IH0 - S T R EY1 N JH - M AH0 N T\nESTRELLA  EH2 - S T R EH1 - L AH0\nESTRICH  EH1 - S T R IH0 K\nESTRIDGE  IH0 - S T R IH1 JH\nESTRIN  EH1 - S T R IH0 N\nESTROGEN  EH1 - S T R AH0 - JH AH0 N\nESTROGENS  EH1 - S T R AH0 - JH IH0 N Z\nESTROUS  EH1 - S T R AH0 S\nESTRUS  EH1 - S T R AH0 S\nESTRUTH  EH1 S - T R UW2 TH\nESTUARIES  EH1 S - CH UW0 - EH2 - R IY0 Z\nESTUARY  EH1 S - CH UW0 - EH2 - R IY0\nESTY  EH1 - S T IY0\nESWORTHY  EH1 S - W ER0 - DH IY0\nESZTERHAS  EH1 - S T ER0 - HH AA0 S\nET  EH1 T\nETABLISSEMENTS  EH2 - T AE0 - B L IH2 - S AH0 - M AA1 N T S\nETC  EH2 T - S EH1 - T ER0 - AH0\nETCETERA  EH1 T - S EH1 - T ER0 - AH0\nETCH  EH1 CH\nETCHED  EH1 CH T\nETCHES  EH1 - CH IH0 Z\nETCHEVERRY  EH1 - CH IH0 - V EH0 - R IY0\nETCHING  EH1 - CH IH0 NG\nETCHINGS  EH1 - CH IH0 NG Z\nETCHISON  EH1 - CH IH0 - S AH0 N\nETERNAL  IH0 - T ER1 - N AH0 L\nETERNAL(2)  IY0 - T ER1 - N AH0 L\nETERNALLY  IH0 - T ER1 - N AH0 - L IY0\nETERNALLY(2)  IY0 - T ER1 - N AH0 - L IY0\nETERNIT  EH1 - T ER0 - N IH0 T\nETERNITY  IH0 - T ER1 - N AH0 - T IY0\nETERNITY(2)  IY0 - T ER1 - N AH0 - T IY0\nETESS  EH2 - T EH1 S\nETHAN  IY1 - TH AH0 N\nETHANE  EH1 - TH EY2 N\nETHANOL  EH1 - TH AH0 - N AO2 L\nETHEL  EH1 - TH AH0 L\nETHELBERT  EH1 - TH IH0 L - B ER0 T\nETHELDA  IH0 - TH EH1 L - D AH0\nETHELINDA  EH0 - TH EH0 - L IY1 N - D AH0\nETHELINE  EH1 - TH IH0 - L AY2 N\nETHELJEAN  EH1 - TH IH0 - L Y AH0 N\nETHELJEAN(2)  EH2 - TH AH0 L - JH IY1 N\nETHELSON  EH1 - TH IH0 L - S IH0 N\nETHELYN  EH1 - TH IH0 - L IH0 N\nETHENE  EH1 - TH IY2 N\nETHER  IY1 - TH ER0\nETHEREAL  IH0 - TH IH1 - R IY0 - AH0 L\nETHEREDGE  EH1 - TH ER0 - EH0 JH\nETHERIDGE  EH1 - TH ER0 - IH2 JH\nETHERINGTON  EH1 - DH ER0 - IH0 NG - T AH0 N\nETHERNET  EH1 - TH ER0 - N EH2 T\nETHERS  IY1 - TH ER0 Z\nETHERTON  IH0 - TH ER1 - T AH0 N\nETHERTON(2)  EH1 - TH ER0 - T AH0 N\nETHIC  EH1 - TH IH0 K\nETHICAL  EH1 - TH AH0 - K AH0 L\nETHICAL(2)  EH1 - TH IH0 - K AH0 L\nETHICALLY  EH1 - TH IH0 - K AH0 - L IY0\nETHICALLY(2)  EH1 - TH IH0 K - L IY0\nETHICIST  EH1 - TH IH0 - S IH0 S T\nETHICISTS  EH1 - TH IH0 - S IH0 S T S\nETHICISTS(2)  EH1 - TH IH0 - S IH0 S S\nETHICISTS(3)  EH1 - TH IH0 - S IH0 S\nETHICON  EH1 - TH IH0 - K AA2 N\nETHICS  EH1 - TH IH0 K S\nETHIER  EH1 - TH IY0 - ER0\nETHINGTON  EH1 - TH IH0 NG - T AH0 N\nETHIOPIA  IY2 - TH IY0 - OW1 - P IY0 - AH0\nETHIOPIA'S  IY2 - TH IY0 - OW1 - P IY0 - AH0 Z\nETHIOPIAN  IY2 - TH IY0 - OW1 - P IY0 - AH0 N\nETHIOPIANS  IY2 - TH IY0 - OW1 - P IY0 - AH0 N Z\nETHNIC  EH1 TH - N IH0 K\nETHNICAL  EH1 TH - N IH0 - K AH0 L\nETHNICALLY  EH1 TH - N IH0 K - L IY0\nETHNICITY  EH0 TH - N IH1 - S IH0 - T IY0\nETHNICS  EH1 TH - N IH0 K S\nETHNOCENTRIC  EH2 TH - N OW0 - S EH1 N - T R IH0 K\nETHNOCENTRISM  EH2 TH - N OW0 - S EH1 N - T R IH0 - Z AH0 M\nETHNOGRAPHIC  EH2 TH - N AH0 - G R AE1 - F IH0 K\nETHNOLOGY  EH0 TH - N AA1 - L AH0 - JH IY0\nETHNOMUSICOLOGIST  EH0 TH - N AH0 - M Y UW2 - Z AH0 - K AA1 - L AH0 - JH IH0 S T\nETHNOS  EH1 TH - N OW0 S\nETHNOS'S  EH1 TH - N AH0 - S IH0 Z\nETHOLOGY  IH0 - TH AA1 - L AH0 - JH IY0\nETHOS  IY1 - TH AA0 S\nETHRIDGE  IH0 - TH R IH1 JH\nETHYL  EH1 - TH AH0 L\nETHYLENE  EH1 - TH AH0 - L IY2 N\nETHYOL  EH1 - TH AY0 - AA0 L\nETIENNE  EH1 - T IY0 - EH0 N\nETIOLOGIES  IY2 - T IY0 - AA1 - L AH0 - JH IY0 Z\nETIOLOGY  IY2 - T IY0 - AA1 - L AH0 - JH IY0\nETIOLOGY(2)  IY2 - T IY2 - AA1 - L AH0 - JH IY0\nETIQUETTE  EH1 - T AH0 - K AH0 T\nETLING  EH1 T - L IH0 NG\nETNA  EH1 T - N AH0\nETON  IY1 - T AH0 N\nETOPS  IY1 - T AA0 P S\nETRUSCAN  IH0 - T R AH1 S - K AH0 N\nETRUSCANS  IH0 - T R AH1 S - K AH0 N Z\nETSTY  EH1 T - S T IY0\nETSU  EH1 T - S UW0\nETTA  EH1 - T AH0\nETTER  EH1 - T ER0\nETTERS  EH1 - T ER0 Z\nETTIE  EH1 - T IY0\nETTINGER  EH1 - T IH0 - NG ER0\nETTINGER'S  EH1 - T IH0 - NG ER0 Z\nETTLINGER  EH1 T - L IH0 - NG ER0\nETTY  EH1 - T IY0\nETUDES  EY1 - T UW2 D Z\nETYMOLOGICAL  EH2 - T AH0 - M AH0 - L AA1 - JH AH0 - K AH0 L\nETYMOLOGY  EH2 - T AH0 - M AA1 - L AH0 - JH IY0\nETYMOLOGY(2)  EH2 - T IH0 - M AA1 - L AH0 - JH IY0\nETZEL  EH1 T - Z AH0 L\nETZEL'S  EH1 T - Z AH0 L Z\nETZIONI  EH2 T - S IY2 - OW1 - N IY0\nETZKORN  EH1 T - S K ER0 N\nETZLER  EH1 T - S L ER0\nEUAN  Y UW1 - AH0 N\nEUBANK  Y UW1 - B AE0 NG K\nEUBANKS  Y UW1 - B AE0 NG K S\nEUCALYPTI  Y UW2 - K AH0 - L IH1 P - T AY0\nEUCALYPTI(2)  Y UW2 - K AH0 - L IH1 P - T IY0\nEUCALYPTUS  Y UW2 - K AH0 - L IH1 P - T AH0 S\nEUCHARIST  Y UW1 - K ER0 - AH0 S T\nEUCHRE  Y UW1 - K ER0\nEUCHRED  Y UW1 - K ER0 D\nEUCLEA  Y UW1 - K L IY0 - AH0\nEUCLID  Y UW1 - K L IH0 D\nEUDOCIA  Y UW0 - D OW1 - CH AH0\nEUDORA  Y UW0 - D AO1 - R AH0\nEUDOSIA  Y UW0 - D OW1 - S IY0 - AH0\nEUDOXIA  Y UW2 - D AA1 K - S IY0 - AH0\nEUDY  Y UW1 - D IY0\nEUGENE  Y UW0 - JH IY1 N\nEUGENIA  Y UW2 - JH IY1 - N IY0 - AH0\nEUGENIA'S  Y UW2 - JH IY1 - N IY0 - AH0 Z\nEUGENIC  Y UW0 - JH EH1 - N IH0 K\nEUGENICS  Y UW0 - JH EH1 - N IH0 K S\nEUGENIE  Y UW2 - JH IY1 - N IY0\nEUGENIO  Y UW2 - JH IY1 - N IY0 - OW0\nEUGENIO'S  Y UW2 - JH IY1 - N IY0 - OW0 Z\nEULA  Y UW1 - L AH0\nEULER  OY1 - L ER0\nEULICH  Y UW1 - L IH0 K\nEULOGIES  Y UW1 - L AH0 - JH IY0 Z\nEULOGIZE  Y UW1 - L AH0 - JH AY2 Z\nEULOGIZED  Y UW1 - L AH0 - JH AY2 Z D\nEULOGY  Y UW1 - L AH0 - JH IY0\nEULOGY'S  Y UW1 - L AH0 - JH IY0 Z\nEUNICE  Y UW1 - N AH0 S\nEUNICE(2)  Y UW1 - N IH0 S\nEUPHEMIA  Y UW0 - F IY1 - M IY0 - AH0\nEUPHEMISM  Y UW1 - F AH0 - M IH2 - Z AH0 M\nEUPHEMISMS  Y UW1 - F AH0 - M IH2 - Z AH0 M Z\nEUPHEMISTIC  Y UW2 - F AH0 - M IH1 - S T IH0 K\nEUPHEMISTICALLY  Y UW2 - F AH0 - M IH1 - S T IH0 K - L IY0\nEUPHORIA  Y UW0 - F AO1 - R IY0 - AH0\nEUPHORIC  Y UW0 - F AA1 - R IH0 K\nEUPHRATES  Y UW0 - F R EY1 - T IY0 Z\nEURASIA  Y UH0 - R EY1 - ZH AH0\nEURASIAN  Y UH0 - R EY1 - ZH IH0 N\nEURE  ER1\nEURECA  Y UW1 - R EH0 - K AH0\nEUREKA  Y UH0 - R IY1 - K AH0\nEUREST  Y UH1 - R EH0 S T\nEURICH  OY1 - R IH0 K\nEURO  Y UW1 - R OW0\nEURO(2)  Y UH1 - R OW0\nEURO(3)  Y UH1 - R AH0\nEUROBOND  Y UW1 - R OW0 - B AA2 N D\nEUROBONDS  Y UW1 - R OW0 - B AA2 N D Z\nEUROCHECK  Y UW1 - R AH0 - CH EH2 K\nEUROCHECKS  Y UW1 - R AH0 - CH EH2 K S\nEUROCOM  Y UW1 - R AH0 - K AH0 M\nEUROCOM(2)  Y UW1 - R OW0 - K AA0 M\nEUROCOMMERCIAL  Y UW1 - R OW0 - K AH0 - M ER1 - SH AH0 L\nEUROCOPTER  Y UH1 - R OW0 - K AA2 P - T ER0\nEUROCRAT  Y UW1 - R AH0 - K R AE0 T\nEUROCRATS  Y UW1 - R AH0 - K R AE0 T S\nEURODEBENTURE  Y UW2 - R OW0 - D AH0 - B EH1 N - CH ER0\nEURODEBENTURES  Y UW2 - R OW0 - D AH0 - B EH1 N - CH ER0 Z\nEURODEBT  Y UW1 - R OW0 - D EH2 T\nEURODEPOSIT  Y UW2 - R OW0 - D AH0 - P AA1 - Z AH0 T\nEURODEPOSITS  Y UW2 - R OW0 - D IH0 - P AA1 - Z IH0 T S\nEURODISNEY  Y UW1 - R OW0 - D IH2 Z - N IY0\nEURODISNEY(2)  Y UH1 - R OW0 - D IH2 Z - N IY0\nEURODOLLAR  Y UW1 - R OW0 - D AA2 - L ER0\nEURODOLLAR(2)  Y UH1 - R OW0 - D AO2 - L ER0\nEURODOLLARS  Y UW1 - R OW0 - D AA2 - L ER0 Z\nEUROFIGHTER  Y UW1 - R OW0 - F AY2 - T ER0\nEUROFIMA  Y UW2 - R AH0 - F IY1 - M AH0\nEUROMARK  Y UW1 - R AH0 - M AA0 R K\nEUROMARKET  Y UW1 - R OW0 - M AA2 R - K IH0 T\nEUROMARKETS  Y UW1 - R OW0 - M AA2 R - K IH0 T S\nEUROMISSILE  Y UW2 - R OW0 - M IH1 - S AH0 L\nEUROMISSILES  Y UW2 - R OW0 - M IH1 - S AH0 L Z\nEUROMOBILIARE  Y UW1 - R OW0 - M OW0 - B IH0 - L EH1 R\nEUROMOBILIARE'S  Y UW1 - R OW0 - M OW0 - B IH0 - L EH1 R Z\nEUROMONEY  Y UW1 - R OW0 - M AH2 - N IY0\nEURONOTE  Y UW1 - R AH0 - N OW2 T\nEURONOTES  Y UW1 - R AH0 - N OW2 T S\nEUROPA  Y UH0 - R OW1 - P AH0\nEUROPE  Y UH1 - R AH0 P\nEUROPE'S  Y UH1 - R AH0 P S\nEUROPEAN  Y UH2 - R AH0 - P IY1 - AH0 N\nEUROPEANS  Y UH2 - R AH0 - P IY1 - AH0 N Z\nEUROPEANS'  Y UH2 - R AH0 - P IY1 - AH0 N Z\nEUROPEENNE  Y UW1 - R OW0 - P IY2 N\nEUROPEWIDE  Y UH1 - R AH0 P - W AY1 D\nEUROPHILE  Y UH1 - R OW0 - F AY0 L\nEUROPHILES  Y UH1 - R OW0 - F AY0 L Z\nEUROPIUM  Y UH0 - R OW1 - P IY0 - AH0 M\nEUROSID  Y UW1 - R AH0 - S IH0 D\nEUROSTAR  Y UH1 - R OW0 - S T AA2 R\nEUROSTAT  Y UW2 - R AO1 - S T AE0 T\nEUROSTERLING  Y UW1 - R OW0 - S T ER1 - L IH0 NG\nEUROTUNNEL  Y UW1 - R OW0 - T AH1 - N AH0 L\nEUROTUNNEL'S  Y UH1 - R OW0 - T AH2 - N AH0 L Z\nEUROYEN  Y UW1 - R OW0 - Y EH2 N\nEURY  Y UW1 - R IY0\nEUSEBIO  Y UW2 - S IY1 - B IY0 - OW0\nEUSTACE  Y UW1 - S T AH0 S\nEUSTACHIAN  Y UW0 - S T EY1 - K IY0 - AH0 N\nEUSTACIA  Y UW0 - S T AA1 - CH AH0\nEUSTICE  Y UW1 - S T IH0 S\nEUSTIS  Y UW1 - S T AH0 S\nEUTHANASIA  Y UW2 - TH AH0 - N EY1 - ZH AH0\nEUTHANASIA'S  Y UW2 - TH AH0 - N EY1 - ZH AH0 Z\nEUTHANASIA(2)  Y UW2 - TH AH0 - N EY1 - ZH Y AH0\nEUTHANIZE  Y UW1 - TH AH0 - N AY2 Z\nEUTSEY  Y UW1 T - S IY0\nEUTSLER  Y UW1 T S - L ER0\nEV  EH1 V\nEVA  EY1 - V AH0\nEVA'S  EY1 - V AH0 Z\nEVA'S(2)  IY1 - V AH0 Z\nEVA(2)  IY1 - V AH0\nEVACUATE  IH0 - V AE1 - K Y AH0 - EY2 T\nEVACUATE(2)  IY0 - V AE1 - K Y AH0 - EY2 T\nEVACUATED  IH0 - V AE1 - K Y AH0 W - EY2 - T IH0 D\nEVACUATED(2)  IY0 - V AE1 - K Y AH0 W - EY2 - T IH0 D\nEVACUATING  IH0 - V AE1 - K Y AH0 W - EY2 - T IH0 NG\nEVACUATING(2)  IY0 - V AE1 - K Y AH0 W - EY2 - T IH0 NG\nEVACUATION  IH0 - V AE2 - K Y AH0 W - EY1 - SH AH0 N\nEVACUATION(2)  IY0 - V AE1 - K Y AH0 W - EY1 - SH AH0 N\nEVACUATIONS  IH0 - V AE2 - K Y AH0 W - EY1 - SH AH0 N Z\nEVACUATIONS(2)  IY0 - V AE1 - K Y AH0 W - EY1 - SH AH0 N Z\nEVACUEE  IH0 - V AE1 - K Y UW0 - IY0\nEVACUEE(2)  IY0 - V AE1 - K Y UW0 - IY0\nEVACUEES  IH0 - V AE1 - K Y UW0 - IY0 Z\nEVACUEES(2)  IY0 - V AE1 - K Y UW0 - IY0 Z\nEVADE  IH0 - V EY1 D\nEVADE(2)  IY0 - V EY1 D\nEVADED  IH0 - V EY1 - D IH0 D\nEVADED(2)  IY0 - V EY1 - D IH0 D\nEVADER  IH0 - V EY1 - D ER0\nEVADER(2)  IY0 - V EY1 - D ER0\nEVADERS  IH0 - V EY1 - D ER0 Z\nEVADERS(2)  IY0 - V EY1 - D ER0 Z\nEVADES  IH0 - V EY1 D Z\nEVADES(2)  IY0 - V EY1 D Z\nEVADING  IH0 - V EY1 - D IH0 NG\nEVADING(2)  IY0 - V EY1 - D IH0 NG\nEVADNE  IH0 - V EH1 D - N IY0\nEVALD  EH1 - V AH0 L D\nEVALD(2)  IY1 - V AA2 L D\nEVALEEN  EH1 - V AH0 - L IY2 N\nEVALUATE  IH0 - V AE1 L - Y UW0 - EY2 T\nEVALUATE(2)  IY0 - V AE1 L - Y UW0 - EY2 T\nEVALUATED  IH0 - V AE1 L - Y UW0 - EY2 - T AH0 D\nEVALUATED(2)  IY0 - V AE1 L - Y UW0 - EY2 - T AH0 D\nEVALUATES  IH0 - V AE1 L - Y UW0 - EY2 T S\nEVALUATES(2)  IY0 - V AE1 L - Y UW0 - EY2 T S\nEVALUATING  IH0 - V AE1 L - Y UW0 - EY2 - T IH0 NG\nEVALUATING(2)  IY0 - V AE1 L - Y UW0 - EY2 - T IH0 NG\nEVALUATION  IH0 - V AE2 L - Y UW0 - EY1 - SH AH0 N\nEVALUATION(2)  IY0 - V AE2 L - Y UW0 - EY1 - SH AH0 N\nEVALUATIONS  IH0 - V AE2 L - Y UW0 - EY1 - SH AH0 N Z\nEVALUATIONS(2)  IY0 - V AE2 L - Y UW0 - EY1 - SH AH0 N Z\nEVAN  EH1 - V AH0 N\nEVANCHO  EH0 - V AA1 N - K OW0\nEVANDER  IY2 - V AE1 N - D ER0\nEVANDRO  EY2 - V AA1 - D R OW0\nEVANDRO(2)  IY2 - V AE1 - D R OW0\nEVANESCENCE  EH2 - V AH0 - N EH1 - S AH0 N S\nEVANESCENT  EH2 - V AH0 - N EH1 - S AH0 N T\nEVANGELICAL  IY2 - V AE0 N - JH EH1 - L IH0 - K AH0 L\nEVANGELICALS  IY2 - V AE2 N - JH EH1 - L IH0 - K AH0 L Z\nEVANGELINE  IH0 - V AE1 N - JH IH0 - L AY2 N\nEVANGELISM  IH0 - V AE1 N - JH AH0 - L IH2 - Z AH0 M\nEVANGELISM(2)  IY0 - V AE1 N - JH AH0 - L IH2 - Z AH0 M\nEVANGELIST  IH0 - V AE1 N - JH AH0 - L AH0 S T\nEVANGELIST(2)  IH0 - V AE1 N - JH AH0 - L IH0 S T\nEVANGELIST(3)  IY0 - V AE1 N - JH AH0 - L AH0 S T\nEVANGELIST(4)  IY0 - V AE1 N - JH AH0 - L IH0 S T\nEVANGELISTA  EH0 - V AA0 NG - G EH0 - L IY1 - S T AH0\nEVANGELISTIC  IY0 - V AE1 N - JH AH0 - L IH0 - S T IH0 K\nEVANGELISTS  IH0 - V AE1 N - JH AH0 - L IH0 S T S\nEVANGELISTS(2)  IH0 - V AE1 N - JH AH0 - L IH0 S S\nEVANGELISTS(3)  IY0 - V AE1 N - JH AH0 - L IH0 S T S\nEVANGELISTS(4)  IY0 - V AE1 N - JH AH0 - L IH0 S S\nEVANGELISTS(5)  IH0 - V AE1 N - JH AH0 - L IH0 S\nEVANGELISTS(6)  IY0 - V AE1 N - JH AH0 - L IH0 S\nEVANGELIZE  IH0 - V AE1 N - JH AH0 - L AY2 Z\nEVANGELIZE(2)  IY0 - V AE1 N - JH AH0 - L AY2 Z\nEVANGI  IH0 - V AE1 N - JH IY0\nEVANKO  IH0 - V AE1 NG - K OW0\nEVANOFF  EH1 - V AH0 N - AO0 F\nEVANS  EH1 - V AH0 N Z\nEVANS'  EH1 - V AH0 N Z\nEVANS'S  EH1 - V AH0 N - Z IH0 Z\nEVANSON  EH1 - V AH0 N - S AH0 N\nEVANSTON  EH1 - V AH0 N - S T AH0 N\nEVANSVILLE  EH1 - V AH0 N Z - V IH2 L\nEVAPORATE  IH0 - V AE1 - P ER0 - EY2 T\nEVAPORATED  IH0 - V AE1 - P ER0 - EY2 - T AH0 D\nEVAPORATED(2)  IH0 - V AE1 - P ER0 - EY2 - T IH0 D\nEVAPORATED(3)  IY0 - V AE1 - P ER0 - EY2 - T AH0 D\nEVAPORATED(4)  IY0 - V AE1 - P ER0 - EY2 - T IH0 D\nEVAPORATES  IH0 - V AE1 - P ER0 - EY2 T S\nEVAPORATES(2)  IY0 - V AE1 - P ER0 - EY2 T S\nEVAPORATING  IH0 - V AE1 - P ER0 - EY2 - T IH0 NG\nEVAPORATING(2)  IY0 - V AE1 - P ER0 - EY2 - T IH0 NG\nEVAPORATION  IH0 - V AE2 - P ER0 - EY1 - SH AH0 N\nEVAPORATION(2)  IY0 - V AE2 - P ER0 - EY1 - SH AH0 N\nEVAPORATOR  IH0 - V AE1 - P ER0 - EY2 - T ER0\nEVAPORATOR(2)  IY0 - V AE1 - P ER0 - EY2 - T ER0\nEVARTS  EH1 - V ER0 T S\nEVASION  IH0 - V EY1 - ZH AH0 N\nEVASION(2)  IY0 - V EY1 - ZH AH0 N\nEVASIONS  IH0 - V EY1 - ZH AH0 N Z\nEVASIONS(2)  IY0 - V EY1 - ZH AH0 N Z\nEVASIVE  IH0 - V EY1 - S IH0 V\nEVASIVE(2)  IH0 - V EY1 - Z IH0 V\nEVASIVE(3)  IY0 - V EY1 - S IH0 V\nEVASIVE(4)  IY0 - V EY1 - Z IH0 V\nEVATT  EH1 - V AH0 T\nEVE  IY1 V\nEVEL  EH1 - V AH0 L\nEVELAND  IY1 V - L AH0 N D\nEVELETH  EH1 - V IH0 - L IH0 TH\nEVELINA  EH2 - V EH0 - L IY1 - N AH0\nEVELINE  EH1 - V AH0 - L IH0 N\nEVELYN  EH1 - V AH0 - L AH0 N\nEVELYN(2)  EH1 - V AH0 - L IH0 N\nEVEN  IY1 - V IH0 N\nEVENDALE  EH1 - V AH0 N - D EY2 L\nEVENED  IY1 - V AH0 N D\nEVENHANDED  IY1 - V AH0 N - HH AE1 N - D IH0 D\nEVENHANDEDLY  EH1 - V AH0 N - HH AE2 N - D IH0 D - L IY0\nEVENING  IY1 V - N IH0 NG\nEVENING'S  IY1 V - N IH0 NG Z\nEVENINGS  IY1 V - N IH0 NG Z\nEVENLY  IY1 - V AH0 N - L IY0\nEVENNESS  IY1 - V AH0 N - N AH0 S\nEVENS  IY1 - V AH0 N Z\nEVENSEN  EH1 - V IH0 N - S AH0 N\nEVENSKY  IY2 - V EH1 N - S K IY0\nEVENSON  EH1 - V IH0 N - S AH0 N\nEVENT  IH0 - V EH1 N T\nEVENT'S  IH0 - V EH1 N T S\nEVENT'S(2)  IY0 - V EH1 N T S\nEVENT(2)  IY0 - V EH1 N T\nEVENTFUL  IH0 - V EH1 N T - F AH0 L\nEVENTFUL(2)  IY0 - V EH1 N T - F AH0 L\nEVENTS  IH0 - V EH1 N T S\nEVENTS(2)  IY0 - V EH1 N T S\nEVENTUAL  AH0 - V EH1 N - CH UW0 - AH0 L\nEVENTUAL(2)  IY0 - V EH1 N - CH UW0 - AH0 L\nEVENTUALITY  AH0 - V EH2 N - CH UW0 - AE1 - L IH0 - T IY0\nEVENTUALITY(2)  IY0 - V EH2 N - CH UW0 - AE1 - L IH0 - T IY0\nEVENTUALLY  IH0 - V EH1 N - CH AH0 W - AH0 - L IY0\nEVENTUALLY(2)  IH0 - V EH1 N - SH AH0 - L IY0\nEVENTUALLY(3)  IY0 - V EH1 N - CH AH0 W - AH0 - L IY0\nEVENTUALLY(4)  IY0 - V EH1 N - SH AH0 - L IY0\nEVER  EH1 - V ER0\nEVERAGE  EH1 - V ER0 - IH0 JH\nEVERARD  EH1 - V ER0 - ER0 D\nEVERBACH  EH1 - V ER0 - B AA2 K\nEVERDING  EH1 - V ER0 - D IH0 NG\nEVEREADY  EH1 - V ER0 - R EH2 - D IY0\nEVERED  EH1 - V ER0 D\nEVEREST  EH1 - V ER0 - AH0 S T\nEVEREST'S  EH1 - V ER0 - AH0 S T S\nEVEREST'S(2)  EH1 - V R AH0 S T S\nEVEREST(2)  EH1 - V R AH0 S T\nEVERETT  EH1 - V ER0 - AH0 T\nEVERETT(2)  EH1 - V R AH0 T\nEVERETTE  EH1 - V ER0 - EH1 T\nEVERETTS  EH1 - V ER0 - AH0 T S\nEVERETTS(2)  EH1 - V R AH0 T S\nEVEREX  EH1 - V ER0 - AH0 K S\nEVERGLADES  EH1 - V ER0 - G L EY2 D Z\nEVERGLADES'  EH1 - V ER0 - G L EY2 D Z\nEVERGOOD  EH1 - V ER0 - G UH2 D\nEVERGREEN  EH1 - V ER0 - G R IY2 N\nEVERGREENS  EH1 - V ER0 - G R IY2 N Z\nEVERHARDT  EH1 - V ER0 - HH AA2 R T\nEVERHART  EH1 - V ER0 - HH AA2 R T\nEVERIDGE  EH1 - V ER0 - IH2 JH\nEVERINGHAM  EH1 - V ER0 - IH0 NG - HH AE2 M\nEVERINGTON  EH1 - V ER0 - IH2 NG - T AH0 N\nEVERITT  EH1 - V ER0 - IH0 T\nEVERLASTING  EH2 - V ER0 - L AE1 - S T IH0 NG\nEVERLASTINGS  EH2 - V ER0 - L AE1 - S T IH0 NG Z\nEVERLEY  EH1 - V ER0 - L IY0\nEVERLING  EH1 - V ER0 - L IH0 NG\nEVERLY  EH1 - V ER0 - L IY0\nEVERMAN  EH1 - V ER0 - M AH0 N\nEVERMORE  EH1 - V ER0 - M AO2 R\nEVERS  EH1 - V ER0 Z\nEVERS'  EH1 - V ER0 Z\nEVERSMAN  EH1 - V ER0 S - M AH0 N\nEVERSOLE  EH1 - V ER0 - S OW2 L\nEVERSON  EH1 - V ER0 - S AH0 N\nEVERT  IH0 - V ER1 T\nEVERTON  EH1 - V ER0 - T AH0 N\nEVERTS  EH1 - V ER0 T S\nEVERY  EH1 - V ER0 - IY0\nEVERY(2)  EH1 - V R IY0\nEVERYBODY  EH1 - V R IY0 - B AA2 - D IY0\nEVERYBODY'D  EH1 - V R IY0 - B AA2 - D IY0 D\nEVERYBODY'S  EH1 - V R IY0 - B AA2 - D IY0 Z\nEVERYDAY  EH1 - V R IY0 - D EY1\nEVERYMAN  EH1 - V R IY0 - M AH0 N\nEVERYMAN'S  EH1 - V R IY0 - M AH0 N Z\nEVERYONE  EH1 - V R IY0 - W AH2 N\nEVERYONE'S  EH1 - V R IY0 - W AH2 N Z\nEVERYPLACE  EH1 - V R IY0 - P L EY2 S\nEVERYTHING  EH1 - V R IY0 - TH IH2 NG\nEVERYTHING'S  EH1 - V R IY0 - TH IH2 NG Z\nEVERYTIME  EH1 - V R IY0 - T AY2 M\nEVERYWHERE  EH1 - V R IY0 - W EH2 R\nEVERYWHERE(2)  EH1 - V R IY0 HH - W EH2 R\nEVES  IY1 V Z\nEVETT  EH1 - V IH0 T\nEVETTS  EH1 - V IH0 T S\nEVIAN  EH1 - V IY0 - AH0 N\nEVICT  IH0 - V IH1 K T\nEVICTED  IH0 - V IH1 K - T IH0 D\nEVICTING  IH0 - V IH1 K - T IH0 NG\nEVICTION  IH0 - V IH1 K - SH AH0 N\nEVICTIONS  IH0 - V IH1 K - SH AH0 N Z\nEVIDENCE  EH1 - V AH0 - D AH0 N S\nEVIDENCED  EH1 - V IH0 - D AH0 N S T\nEVIDENCES  EH1 - V AH0 - D AH0 N - S AH0 Z\nEVIDENT  EH1 - V AH0 - D AH0 N T\nEVIDENTIARY  EH2 - V IH0 - D EH1 N - SH IY0 - EH0 - R IY0\nEVIDENTIARY(2)  EH2 - V IH0 - D EH1 N - CH IY0 - EH0 - R IY0\nEVIDENTLY  EH1 - V AH0 - D AH0 N T - L IY0\nEVIL  IY1 - V AH0 L\nEVILDOER  IY1 - V AH0 L - D UW2 - ER0\nEVILDOERS  IY1 - V AH0 L - D UW2 - ER0 Z\nEVILS  IY1 - V AH0 L Z\nEVILSIZER  IY1 - V AH0 L - S AY2 - Z ER0\nEVILSIZOR  IY1 - V AH0 L - S AY2 - Z ER0\nEVIN  EH1 - V IH0 N\nEVINCE  IH0 - V IH1 N S\nEVINCED  IH0 - V IH1 N S T\nEVINGER  IY1 - V IH0 - NG ER0\nEVINS  EH1 - V IH0 N Z\nEVISCERATE  AH0 - V IH1 - S ER0 - EY2 T\nEVISCERATED  AH0 - V IH1 - S ER0 - EY2 - T IH0 D\nEVITA  EH0 - V IY1 - T AH0\nEVITT  EH1 - V IH0 T\nEVITTS  EH1 - V IH0 T S\nEVJEN  EH1 V - JH AH0 N\nEVLYN  EH1 V - L AH0 N\nEVOCATION  IY2 - V OW0 - K EY1 - SH AH0 N\nEVOCATIVE  IH0 - V AA1 - K AH0 - T IH0 V\nEVOKE  IH0 - V OW1 K\nEVOKE(2)  IY0 - V OW1 K\nEVOKED  IH0 - V OW1 K T\nEVOKED(2)  IY0 - V OW1 K T\nEVOKES  IH0 - V OW1 K S\nEVOKES(2)  IY0 - V OW1 K S\nEVOKING  IH0 - V OW1 - K IH0 NG\nEVOKING(2)  IY0 - V OW1 - K IH0 NG\nEVOLA  EH0 - V OW1 - L AH0\nEVOLUTION  EH2 - V AH0 - L UW1 - SH AH0 N\nEVOLUTION(2)  IY2 - V AH0 - L UW1 - SH AH0 N\nEVOLUTION(3)  EH2 - V OW0 - L UW1 - SH AH0 N\nEVOLUTION(4)  IY2 - V OW0 - L UW1 - SH AH0 N\nEVOLUTIONARY  EH2 - V AH0 - L UW1 - SH AH0 N - EH2 - R IY0\nEVOLUTIONARY(2)  IY2 - V AH0 - L UW1 - SH AH0 N - EH2 - R IY0\nEVOLUTIONARY(3)  EH2 - V OW0 - L UW1 - SH AH0 N - EH2 - R IY0\nEVOLUTIONARY(4)  IY2 - V OW0 - L UW1 - SH AH0 N - EH2 - R IY0\nEVOLVE  IH0 - V AA1 L V\nEVOLVE(2)  IY0 - V AA1 L V\nEVOLVED  IH0 - V AA1 L V D\nEVOLVED(2)  IY0 - V AA1 L V D\nEVOLVES  IH0 - V AA1 L V Z\nEVOLVES(2)  IY0 - V AA1 L V Z\nEVOLVING  IH0 - V AA1 L - V IH0 NG\nEVOLVING(2)  IY0 - V AA1 L - V IH0 NG\nEVON  EH1 - V AH0 N\nEVONNE  EH2 - V AA1 N\nEVRARD  EH1 - V R ER0 D\nEVREN  EH1 - V R AH0 N\nEWALD  Y UW1 - AH0 L D\nEWALT  Y UW1 - AH0 L T\nEWAN  Y UW1 - AH0 N\nEWART  Y UW1 - ER0 T\nEWBAL  Y UW1 - B AA0 L\nEWBANK  Y UW1 - B AH0 NG K\nEWE  Y UW1\nEWELL  Y UW1 - AH0 L\nEWEN  Y UW1 - AH0 N\nEWER  Y UW1 - ER0\nEWERS  Y UW1 - ER0 Z\nEWERT  Y UW1 - ER0 T\nEWES  Y UW1 Z\nEWIG  Y UW1 - IH0 G\nEWING  Y UW1 - IH0 NG\nEWING'S  Y UW1 - IH0 NG Z\nEWINGS  Y UW1 - IH0 NG Z\nEWOLDT  Y UW1 - OW0 L T\nEWORLD  IY1 - W ER2 L D\nEWTON  Y UW1 - T AH0 N\nEWY  Y UW1 - IY0\nEX  EH1 K S\nEX-FIGHTER  EH1 K S - F AY1 - T ER0\nEXABYTE  EH1 K - S AH0 - B AY2 T\nEXACERBATE  IH0 G - Z AE1 - S ER0 - B EY2 T\nEXACERBATED  IH0 G - Z AE1 - S ER0 - B EY2 - T AH0 D\nEXACERBATED(2)  IH0 G - Z AE1 - S ER0 - B EY2 - T IH0 D\nEXACERBATES  IH0 G - Z AE1 - S ER0 - B EY2 T S\nEXACERBATING  IH0 G - Z AE1 - S ER0 - B EY2 - T IH0 NG\nEXACERBATION  IH0 G - Z AE2 - S ER0 - B EY1 - SH AH0 N\nEXACERBATIONS  IH0 G - Z AE2 - S ER0 - B EY1 - SH AH0 N Z\nEXACT  IH0 G - Z AE1 K T\nEXACTED  IH0 G - Z AE1 K - T IH0 D\nEXACTING  IH0 G - Z AE1 K - T IH0 NG\nEXACTION  IH0 G - Z AE1 K - SH AH0 N\nEXACTIONS  IH0 G - Z AE1 K - SH AH0 N Z\nEXACTITUDE  IH0 G - Z AE1 K - T AH0 - T UW2 D\nEXACTLY  IH0 G - Z AE1 K T - L IY0\nEXACTS  IH0 G - Z AE1 K T S\nEXAGGERATE  IH0 G - Z AE1 - JH ER0 - EY2 T\nEXAGGERATED  IH0 G - Z AE1 - JH ER0 - EY2 - T AH0 D\nEXAGGERATED(2)  IH0 G - Z AE1 - JH ER0 - EY2 - T IH0 D\nEXAGGERATES  IH0 G - Z AE1 - JH ER0 - EY2 T S\nEXAGGERATING  IH0 G - Z AE1 - JH ER0 - EY2 - T IH0 NG\nEXAGGERATION  IH0 G - Z AE2 - JH ER0 - EY1 - SH AH0 N\nEXAGGERATIONS  IH0 G - Z AE2 - JH ER0 - EY1 - SH AH0 N Z\nEXALT  IH0 G - Z AO1 L T\nEXALTED  IH0 G - Z AO1 L - T IH0 D\nEXALTING  IH0 G - Z AO1 L - T IH0 NG\nEXALTS  IH0 G - Z AO1 L T S\nEXAM  IH0 G - Z AE1 M\nEXAMINATION  IH0 G - Z AE2 - M AH0 - N EY1 - SH AH0 N\nEXAMINATIONS  IH0 G - Z AE2 - M AH0 - N EY1 - SH AH0 N Z\nEXAMINE  IH0 G - Z AE1 - M IH0 N\nEXAMINED  IH0 G - Z AE1 - M AH0 N D\nEXAMINER  IH0 G - Z AE1 - M AH0 - N ER0\nEXAMINER'S  EH0 G - Z AE1 - M AH0 - N ER0 Z\nEXAMINERS  IH0 G - Z AE1 - M IH0 - N ER0 Z\nEXAMINERS'  IH0 G - Z AE1 - M IH0 - N ER0 Z\nEXAMINES  IH0 G - Z AE1 - M AH0 N Z\nEXAMINING  IH0 G - Z AE1 - M IH0 - N IH0 NG\nEXAMPLE  IH0 G - Z AE1 M - P AH0 L\nEXAMPLES  IH0 G - Z AE1 M - P AH0 L Z\nEXAMS  IH0 G - Z AE1 M Z\nEXAR  EH1 K - S ER0\nEXASPERATE  IH0 G - Z AE1 - S P ER0 - EY2 T\nEXASPERATED  IH0 G - Z AE1 - S P ER0 - EY2 - T IH0 D\nEXASPERATING  IH0 G - Z AE1 - S P ER0 - EY2 - T IH0 NG\nEXASPERATION  EH2 K - S AE2 - S P ER0 - EY1 - SH AH0 N\nEXBOYFRIEND  EH2 K S - B OY1 - F R EH2 N D\nEXBROKER  EH1 K S - B R OW1 - K ER0\nEXBROKER'S  EH1 K S - B R OW1 - K ER0 Z\nEXBROKERS  EH1 K S - B R OW1 - K ER0 Z\nEXCALIBUR  EH2 K - S K AE1 - L AH0 - B ER0\nEXCAVATE  EH1 K - S K AH0 - V EY2 T\nEXCAVATED  EH1 K - S K AH0 - V EY2 - T IH0 D\nEXCAVATING  EH1 K - S K AH0 - V EY2 - T IH0 NG\nEXCAVATION  EH2 K - S K AH0 - V EY1 - SH AH0 N\nEXCAVATIONS  EH2 K - S K AH0 - V EY1 - SH AH0 N Z\nEXCAVATOR  EH1 K - S K AH0 - V EY2 - T ER0\nEXCAVATORS  EH1 K - S K AH0 - V EY2 - T ER0 Z\nEXCEDRIN  EH0 K - S EH1 - D R AH0 N\nEXCEED  IH0 K - S IY1 D\nEXCEEDED  IH0 K - S IY1 - D AH0 D\nEXCEEDED(2)  IH0 K - S IY1 - D IH0 D\nEXCEEDING  IH0 K - S IY1 - D IH0 NG\nEXCEEDINGLY  IH0 K - S IY1 - D IH0 NG - L IY0\nEXCEEDS  IH0 K - S IY1 D Z\nEXCEL  IH0 K - S EH1 L\nEXCEL'S  IH0 K - S EH1 L Z\nEXCELAN  EH2 K - S EH1 - L AH0 N\nEXCELLED  IH0 K - S EH1 L D\nEXCELLENCE  EH1 K - S AH0 - L AH0 N S\nEXCELLENCIES  EH1 K - S L EH1 N - S IY0 Z\nEXCELLENCY  EH1 K - S L EH1 N - S IY0\nEXCELLENT  EH1 K - S AH0 - L AH0 N T\nEXCELLENTLY  EH1 K - S AH0 - L AH0 N T - L IY0\nEXCELLING  EH0 K - S EH1 - L IH0 NG\nEXCELS  IH0 K - S EH1 L Z\nEXCELSIOR  IH0 K - S EH1 L - S IY0 - ER0\nEXCEPT  IH0 K - S EH1 P T\nEXCEPTED  IH0 K - S EH1 P - T IH0 D\nEXCEPTING  EH2 K - S EH1 P - T IH0 NG\nEXCEPTION  IH0 K - S EH1 P - SH AH0 N\nEXCEPTIONAL  IH0 K - S EH1 P - SH AH0 - N AH0 L\nEXCEPTIONALLY  IH0 K - S EH1 P - SH AH0 N - AH0 - L IY0\nEXCEPTIONALLY(2)  IH0 K - S EH1 P SH - N AH0 - L IY0\nEXCEPTIONS  IH0 K - S EH1 P - SH AH0 N Z\nEXCERPT  EH1 K - S ER0 P T\nEXCERPT(2)  EH0 K - S ER1 P T\nEXCERPTED  EH2 K - S ER1 P - T IH0 D\nEXCERPTS  EH1 K - S ER0 P T S\nEXCERPTS(2)  EH0 K - S ER1 P T S\nEXCESS  EH1 K - S EH2 S\nEXCESS(2)  IH0 K - S EH1 S\nEXCESSES  EH2 K - S EH1 - S IH0 Z\nEXCESSES(2)  IH0 K - S EH1 - S IH0 Z\nEXCESSIVE  IH0 K - S EH1 - S IH0 V\nEXCESSIVELY  IH0 K - S EH1 - S IH0 V - L IY0\nEXCHANGE  IH0 K S - CH EY1 N JH\nEXCHANGE'S  IH0 K S - CH EY1 N - JH IH0 Z\nEXCHANGEABLE  IH0 K S - CH EY1 N - JH AH0 - B AH0 L\nEXCHANGED  IH0 K S - CH EY1 N JH D\nEXCHANGER  IH0 K S - CH EY1 N - JH ER0\nEXCHANGERS  IH0 K S - CH EY1 N - JH ER0 Z\nEXCHANGES  IH0 K S - CH EY1 N - JH AH0 Z\nEXCHANGES'  EH0 K S - CH EY1 N - JH IH0 Z\nEXCHANGES(2)  IH0 K S - CH EY1 N - JH IH0 Z\nEXCHANGING  IH0 K S - CH EY1 N - JH IH0 NG\nEXCHEQUER  EH1 K S - CH EH2 - K ER0\nEXCIMER  EH2 K - S IH1 - M ER0\nEXCISE  EH0 K - S AY1 S\nEXCISE(2)  EH1 K - S AY0 Z\nEXCISED  EH1 K - S AY2 Z D\nEXCISES  EH1 K - S AY2 - Z IH0 Z\nEXCISION  IH0 K - S IH1 - ZH AH0 N\nEXCITABLE  IH0 K - S AY1 - T AH0 - B AH0 L\nEXCITATION  EH2 K - S AY0 - T EY1 - SH AH0 N\nEXCITE  IH0 K - S AY1 T\nEXCITED  IH0 K - S AY1 - T AH0 D\nEXCITED(2)  IH0 K - S AY1 - T IH0 D\nEXCITEDLY  IH0 K - S AY1 - T AH0 D - L IY0\nEXCITEMENT  IH0 K - S AY1 T - M AH0 N T\nEXCITES  IH0 K - S AY1 T S\nEXCITING  IH0 K - S AY1 - T IH0 NG\nEXCLAIM  IH0 K - S K L EY1 M\nEXCLAIMED  IH0 K - S K L EY1 M D\nEXCLAIMING  IH0 K - S K L EY1 - M IH0 NG\nEXCLAIMS  IH0 K - S K L EY1 M Z\nEXCLAMATION  EH2 K - S K L AH0 - M EY1 - SH AH0 N\nEXCLAMATION-POINT  EH2 K - S K L AH0 - M EY1 - SH AH0 N - P OY1 N T\nEXCLAMATIONS  EH2 K - S K L AH0 - M EY1 - SH AH0 N Z\nEXCLUDABLE  IH0 K - S K L UW1 - D AH0 - B AH0 L\nEXCLUDE  IH0 K - S K L UW1 D\nEXCLUDED  IH0 K - S K L UW1 - D AH0 D\nEXCLUDED(2)  IH0 K - S K L UW1 - D IH0 D\nEXCLUDES  IH0 K - S K L UW1 D Z\nEXCLUDING  IH0 K - S K L UW1 - D IH0 NG\nEXCLUSION  IH0 K - S K L UW1 - ZH AH0 N\nEXCLUSIONARY  IH0 K - S K L UW1 - ZH AH0 N - EH2 - R IY0\nEXCLUSIONS  IH0 K - S K L UW1 - ZH AH0 N Z\nEXCLUSIVE  IH0 K - S K L UW1 - S IH0 V\nEXCLUSIVELY  IH0 K - S K L UW1 - S IH0 V - L IY0\nEXCLUSIVES  IH0 K - S K L UW1 - S IH0 V Z\nEXCLUSIVITY  EH2 K - S K L UW2 - S IH1 - V AH0 - T IY0\nEXCO  EH1 K - S K OW0\nEXCOA  EH2 K - S K OW1 - AH0\nEXCOMMUNICATE  EH2 K S - K AH0 - M Y UW1 - N AH0 - K EY2 T\nEXCOMMUNICATED  EH2 K S - K AH0 - M Y UW1 - N AH0 - K EY2 - T AH0 D\nEXCOMMUNICATION  EH2 K S - K AH0 - M Y UW2 - N AH0 - K EY1 - SH AH0 N\nEXCORIATE  EH0 K S - K AO1 - R IY0 - EY2 T\nEXCORIATED  EH0 K S - K AO1 - R IY0 - EY2 - T IH0 D\nEXCORIATING  EH0 K S - K AO1 - R IY0 - EY2 - T IH0 NG\nEXCORIATION  EH0 K S - K AO1 - R IY0 - EY2 - SH AH0 N\nEXCREMENT  EH1 K - S K R AH0 - M AH0 N T\nEXCRETE  IH0 K - S K R IY1 T\nEXCRETION  IH0 K - S K R IY1 - SH AH0 N\nEXCRETORY  EH1 K - S K R AH0 - T AO2 - R IY0\nEXCRUCIATING  IH0 K - S K R UW1 - SH IY0 - EY2 - T IH0 NG\nEXCRUCIATINGLY  EH2 K - S K R UW1 - S IY0 - EY2 - T IH0 NG - L IY0\nEXCULPATE  EH2 K - S K AH1 L - P EY0 T\nEXCULPATORY  EH2 K - S K AH1 L - P AH0 - T AO2 - R IY0\nEXCURSION  IH0 K - S K ER1 - ZH AH0 N\nEXCURSIONS  IH0 K - S K ER1 - ZH AH0 N Z\nEXCUSABLE  IH0 K - S K Y UW1 - Z AH0 - B AH0 L\nEXCUSE  IH0 K - S K Y UW1 S\nEXCUSE(2)  IH0 K - S K Y UW1 Z\nEXCUSED  IH0 K - S K Y UW1 Z D\nEXCUSES  IH0 K - S K Y UW1 - S IH0 Z\nEXCUSES(2)  IH0 K - S K Y UW1 - Z IH0 Z\nEXCUSING  IH0 K - S K Y UW1 - Z IH0 NG\nEXEC  EH2 G - Z EH1 K\nEXECRABLE  EH2 G - Z EH1 - K R AH0 - B AH0 L\nEXECS  EH2 G - Z EH1 K S\nEXECUTE  EH1 K - S AH0 - K Y UW2 T\nEXECUTED  EH1 K - S AH0 - K Y UW2 - T AH0 D\nEXECUTED(2)  EH1 K - S AH0 - K Y UW2 - T IH0 D\nEXECUTES  EH1 K - S AH0 - K Y UW2 T S\nEXECUTING  EH1 K - S AH0 - K Y UW2 - T IH0 NG\nEXECUTION  EH2 K - S AH0 - K Y UW1 - SH AH0 N\nEXECUTIONER  EH2 K - S AH0 - K Y UW1 - SH AH0 N - ER0\nEXECUTIONER'S  EH2 K - S AH0 - K Y UW1 - SH AH0 N - ER0 Z\nEXECUTIONERS  EH2 K - S AH0 - K Y UW1 - SH AH0 N - ER0 Z\nEXECUTIONS  EH2 K - S AH0 - K Y UW1 - SH AH0 N Z\nEXECUTIVE  IH0 G - Z EH1 - K Y AH0 - T IH0 V\nEXECUTIVE'S  EH0 G - Z EH1 - K Y AH0 - T IH0 V Z\nEXECUTIVES  IH0 G - Z EH1 - K Y AH0 - T IH0 V Z\nEXECUTIVES'  EH0 G - Z EH1 - K Y AH0 - T IH0 V Z\nEXECUTONE  EH2 G - Z EH1 - K Y UW0 - T OW2 N\nEXECUTOR  IH0 G - Z EH1 - K Y AH0 - T ER0\nEXECUTORS  IH0 G - Z EH1 - K Y AH0 - T ER0 Z\nEXEL  EH1 K - S AH0 L\nEXEMPLAR  IH0 G - Z EH1 M - P L AA0 R\nEXEMPLARS  IH0 G - Z EH1 M - P L AA0 R Z\nEXEMPLARY  IH0 G - Z EH1 M - P L ER0 - IY0\nEXEMPLIFIED  IH0 G - Z EH1 M - P L AH0 - F AY2 D\nEXEMPLIFIES  IH0 G - Z EH1 M - P L AH0 - F AY2 Z\nEXEMPLIFY  IH0 G - Z EH1 M - P L AH0 - F AY2\nEXEMPLIFYING  IH0 G - Z EH1 M - P L AH0 - F AY2 - IH0 NG\nEXEMPLUM  IH0 G - Z EH1 M - P L AH0 M\nEXEMPT  IH0 G - Z EH1 M P T\nEXEMPTED  IH0 G - Z EH1 M P - T IH0 D\nEXEMPTING  IH0 G - Z EH1 M P - T IH0 NG\nEXEMPTION  IH0 G - Z EH1 M P - SH AH0 N\nEXEMPTION(2)  IH0 G - Z EH1 M - SH AH0 N\nEXEMPTIONS  IH0 G - Z EH1 M P - SH AH0 N Z\nEXEMPTIONS(2)  IH0 G - Z EH1 M - SH AH0 N Z\nEXEMPTS  IH0 G - Z EH1 M P T S\nEXERCISABLE  EH1 K - S ER0 - S AY2 - Z AH0 - B AH0 L\nEXERCISE  EH1 K - S ER0 - S AY2 Z\nEXERCISED  EH1 K - S ER0 - S AY2 Z D\nEXERCISER  EH1 K - S ER0 - S AY2 - Z ER0\nEXERCISERS  EH1 K - S ER0 - S AY2 - Z ER0 Z\nEXERCISES  EH1 K - S ER0 - S AY2 - Z AH0 Z\nEXERCISES(2)  EH1 K - S ER0 - S AY2 - Z IH0 Z\nEXERCISING  EH1 K - S ER0 - S AY2 - Z IH0 NG\nEXERT  IH0 G - Z ER1 T\nEXERTED  IH0 G - Z ER1 - T IH0 D\nEXERTING  IH0 G - Z ER1 - T IH0 NG\nEXERTION  IH0 G - Z ER1 - SH AH0 N\nEXERTIONS  IH0 G - Z ER1 - SH AH0 N Z\nEXERTS  IH0 G - Z ER1 T S\nEXES  EH1 K - S IH0 Z\nEXETER  EH1 K - S IH0 - T ER0\nEXFOLIATE  EH0 K S - F OW1 - L IY0 - EY0 T\nEXFOLIATION  EH0 K S - F OW2 - L IY0 - EY1 - SH AH0 N\nEXHALATION  EH2 K S - HH AH0 - L EY1 - SH AH0 N\nEXHALE  EH0 K S - HH EY1 L\nEXHALED  EH0 K S - HH EY1 L D\nEXHAUST  IH0 G - Z AO1 S T\nEXHAUSTED  IH0 G - Z AO1 - S T AH0 D\nEXHAUSTED(2)  IH0 G - Z AO1 - S T IH0 D\nEXHAUSTING  IH0 G - Z AO1 - S T IH0 NG\nEXHAUSTION  IH0 G - Z AO1 S - CH AH0 N\nEXHAUSTIVE  IH0 G - Z AO1 - S T IH0 V\nEXHAUSTIVELY  IH0 G - Z AA1 - S T IH0 V - L IY0\nEXHAUSTS  IH0 G - Z AO1 S T S\nEXHAUSTS(2)  IH0 G - Z AO1 S S\nEXHAUSTS(3)  IH0 G - Z AO1 S\nEXHIBIT  IH0 G - Z IH1 - B IH0 T\nEXHIBIT'S  IH0 G - Z IH1 - B AH0 T S\nEXHIBITED  IH0 G - Z IH1 - B AH0 - T AH0 D\nEXHIBITING  IH0 G - Z IH1 - B IH0 - T IH0 NG\nEXHIBITION  EH2 K - S AH0 - B IH1 - SH AH0 N\nEXHIBITIONIST  EH2 K - S AH0 - B IH1 - SH AH0 N - AH0 S T\nEXHIBITIONISTS  EH2 K - S AH0 - B IH1 - SH AH0 N - AH0 S T S\nEXHIBITIONISTS(2)  EH2 K - S AH0 - B IH1 - SH AH0 N - AH0 S S\nEXHIBITIONISTS(3)  EH2 K - S AH0 - B IH1 - SH AH0 N - AH0 S\nEXHIBITIONS  EH2 K - S AH0 - B IH1 - SH AH0 N Z\nEXHIBITOR  IH0 G - Z IH1 - B AH0 - T ER0\nEXHIBITORS  IH0 G - Z IH1 - B AH0 - T ER0 Z\nEXHIBITS  IH0 G - Z IH1 - B AH0 T S\nEXHILARATE  IH0 G - Z IH1 - L ER0 - EY2 T\nEXHILARATED  IH0 G - Z IH1 - L ER0 - EY2 - T IH0 D\nEXHILARATING  IH0 G - Z IH1 - L ER0 - EY2 - T IH0 NG\nEXHILARATION  IH0 G - Z IH2 - L ER0 - EY1 - SH AH0 N\nEXHORT  IH0 G - Z AO1 R T\nEXHORTATION  EH2 G - Z AO2 R - T EY1 - SH AH0 N\nEXHORTATIONS  EH2 G - Z AO2 R - T EY1 - SH AH0 N Z\nEXHORTED  IH0 G - Z AO1 R - T IH0 D\nEXHORTING  IH0 G - Z AO1 R - T IH0 NG\nEXHORTS  IH0 G - Z AO1 R T S\nEXHUMATION  EH0 K S - HH Y UW2 - M EY1 - SH AH0 N\nEXHUME  EH0 K S - HH Y UW1 M\nEXHUMED  EH0 K S - HH Y UW1 M D\nEXHUMES  EH0 K S - HH Y UW1 M Z\nEXIDE  EH1 K - S AY2 D\nEXIGENCIES  EH2 K - S IH1 - JH AH0 N - S IY0 Z\nEXIGENCY  EH2 K - S IH1 - JH AH0 N - S IY0\nEXIGENT  EH1 K - S IH0 - JH AH0 N T\nEXIGENTS  EH1 K - S IH0 - JH AH0 N T S\nEXILE  EH1 G - Z AY2 L\nEXILE(2)  EH1 K - S AY2 L\nEXILED  EH1 G - Z AY2 L D\nEXILED(2)  EH1 K - S AY2 L D\nEXILES  EH1 G - Z AY2 L Z\nEXILES(2)  EH1 K - S AY2 L Z\nEXIM  EH1 K - S IH0 M\nEXIM'S  EH1 K - S IH0 M Z\nEXIST  IH0 G - Z IH1 S T\nEXISTED  IH0 G - Z IH1 - S T AH0 D\nEXISTENCE  EH0 G - Z IH1 - S T AH0 N S\nEXISTENCE(2)  IH0 G - Z IH1 - S T AH0 N S\nEXISTENT  EH0 G - Z IH1 - S T AH0 N T\nEXISTENTIAL  EH2 K - S IH0 - S T EH1 N - CH AH0 L\nEXISTENTIAL(2)  EH2 K - S IH2 - S T EH1 N - SH AH0 L\nEXISTENTIAL(3)  EH2 G - Z IH2 - S T EH1 N - CH AH0 L\nEXISTENTIAL(4)  EH2 G - Z IH2 - S T EH1 N - SH AH0 L\nEXISTING  IH0 G - Z IH1 - S T IH0 NG\nEXISTS  IH0 G - Z IH1 S T S\nEXISTS(2)  IH0 G - Z IH1 S S\nEXISTS(3)  IH0 G - Z IH1 S\nEXIT  EH1 G - Z IH0 T\nEXIT(2)  EH1 K - S AH0 T\nEXITED  EH1 G - Z AH0 - T IH0 D\nEXITING  EH1 G - Z IH0 - T IH0 NG\nEXITS  EH1 G - Z IH0 T S\nEXITS(2)  EH1 K - S AH0 T S\nEXLER  EH1 K - S L ER0\nEXLEY  EH1 K S - L IY0\nEXLINE  EH1 K - S L AY0 N\nEXNER  EH1 K S - N ER0\nEXOCET  EH1 K - S OW0 - S EH2 T\nEXODUS  EH1 K - S AH0 - D AH0 S\nEXOGENOUS  EH2 K - S OW1 - JH AH0 - N AH0 S\nEXON  EH2 K - S AO1 N\nEXONERATE  IH0 G - Z AA1 - N ER0 - EY2 T\nEXONERATED  IH0 G - Z AA1 - N ER0 - EY2 - T IH0 D\nEXONERATES  IH0 G - Z AA1 - N ER0 - EY2 T S\nEXONERATING  IH0 G - Z AA1 - N ER0 - EY2 - T IH0 NG\nEXONERATION  IH0 G - Z AA0 - N ER0 - EY1 - SH AH0 N\nEXORBITANT  IH0 G - Z AO1 R - B IH0 - T AH0 N T\nEXORCIST  EH1 K - S ER0 - S AH0 S T\nEXOSKELETON  EH2 K - S OW0 - S K EH1 - L AH0 - T AH0 N\nEXOTHERMIC  EH2 K - S OW0 - TH ER1 - M IH0 K\nEXOTIC  IH0 G - Z AA1 - T IH0 K\nEXOTICS  EH0 G - Z AA1 - T IH0 K S\nEXOVIR  EH2 K - S OW0 - V IH1 R\nEXPAND  IH0 K - S P AE1 N D\nEXPANDABLE  IH0 K - S P AE1 N - D AH0 - B AH0 L\nEXPANDED  IH0 K - S P AE1 N - D AH0 D\nEXPANDED(2)  IH0 K - S P AE1 N - D IH0 D\nEXPANDING  IH0 K - S P AE1 N - D IH0 NG\nEXPANDS  IH0 K - S P AE1 N D Z\nEXPANSE  IH0 K - S P AE1 N S\nEXPANSES  IH0 K - S P AE1 N - S IH0 Z\nEXPANSION  IH0 K - S P AE1 N - SH AH0 N\nEXPANSION'S  IH0 K - S P AE1 N - SH AH0 N Z\nEXPANSION'S(2)  IH0 K - S P AE1 N - CH AH0 N Z\nEXPANSION(2)  IH0 K - S P AE1 N - CH AH0 N\nEXPANSIONARY  IH0 K - S P AE1 N - SH AH0 N - EH2 - R IY0\nEXPANSIONARY(2)  IH0 K - S P AE1 N - CH AH0 - N EH2 - R IY0\nEXPANSIONISM  IH0 K - S P AE1 N - SH AH0 - N IH2 - Z AH0 M\nEXPANSIONISM(2)  IH0 K - S P AE1 N - CH AH0 - N IH2 - Z AH0 M\nEXPANSIONIST  IH0 K - S P AE1 N - SH AH0 - N IH0 S T\nEXPANSIONIST(2)  IH0 K - S P AE1 N - CH AH0 - N IH0 S T\nEXPANSIONS  IH0 K - S P AE1 N - SH AH0 N Z\nEXPANSIONS(2)  IH0 K - S P AE1 N - CH AH0 N Z\nEXPANSIVE  IH0 K - S P AE1 N - S IH0 V\nEXPATRIATE  EH0 K S - P EY1 - T R IY0 - EY2 T\nEXPATRIATE(2)  EH0 K S - P EY1 - T R IY0 - AH0 T\nEXPATRIATES  EH0 K S - P EY1 - T R IY0 - EY2 T S\nEXPATRIATES(2)  EH0 K S - P EY1 - T R IY0 - AH0 T S\nEXPATRIATION  EH0 K S - P EY2 - T R IY0 - EY1 - SH AH0 N\nEXPECT  IH0 K - S P EH1 K T\nEXPECTANCIES  IH0 K - S P EH1 K - T AH0 N - S IY0 Z\nEXPECTANCY  IH0 K - S P EH1 K - T AH0 N - S IY0\nEXPECTANT  IH0 K - S P EH1 K - T AH0 N T\nEXPECTATION  EH2 K - S P EH0 K - T EY1 - SH AH0 N\nEXPECTATIONS  EH2 K - S P EH0 K - T EY1 - SH AH0 N Z\nEXPECTED  IH0 K - S P EH1 K - T AH0 D\nEXPECTED(2)  IH0 K - S P EH1 K - T IH0 D\nEXPECTING  IH0 K - S P EH1 K - T IH0 NG\nEXPECTORANT  IH0 K - S P EH1 K - T ER0 - AH0 N T\nEXPECTS  IH0 K - S P EH1 K T S\nEXPECTS(2)  IH0 K - S P EH1 K S\nEXPEDIENCE  IH0 K - S P IY1 - D IY0 - AH0 N S\nEXPEDIENCY  IH0 K - S P IY1 - D IY0 - AH0 N - S IY0\nEXPEDIENT  IH0 K - S P IY1 - D IY0 - AH0 N T\nEXPEDITE  EH1 K - S P IH0 - D AY2 T\nEXPEDITED  EH1 K - S P IH0 - D AY2 - T IH0 D\nEXPEDITING  EH1 K - S P AH0 - D AY2 - T IH0 NG\nEXPEDITION  EH2 K - S P AH0 - D IH1 - SH AH0 N\nEXPEDITIONARY  EH2 K - S P AH0 - D IH1 - SH AH0 N - EH2 - R IY0\nEXPEDITIONS  EH2 K - S P AH0 - D IH1 - SH AH0 N Z\nEXPEDITIOUS  EH2 K - S P AH0 - D IH1 - SH AH0 S\nEXPEDITIOUSLY  EH2 K - S P AH0 - D IH1 - SH AH0 S - L IY0\nEXPEL  IH0 K - S P EH1 L\nEXPELLED  IH0 K - S P EH1 L D\nEXPELLING  IH0 K - S P EH1 - L IH0 NG\nEXPEND  IH0 K - S P EH1 N D\nEXPENDABLE  IH0 K - S P EH1 N - D AH0 - B AH0 L\nEXPENDED  IH0 K - S P EH1 N - D IH0 D\nEXPENDING  EH2 K - S P EH1 N - D IH0 NG\nEXPENDITURE  IH0 K - S P EH1 N - D AH0 - CH ER0\nEXPENDITURE(2)  IH0 K - S P EH1 N - D IH0 - CH ER0\nEXPENDITURES  IH0 K - S P EH1 N - D AH0 - CH ER0 Z\nEXPENDITURES(2)  IH0 K - S P EH1 N - D IH0 - CH ER0 Z\nEXPENSE  IH0 K - S P EH1 N S\nEXPENSES  IH0 K - S P EH1 N - S AH0 Z\nEXPENSES(2)  IH0 K - S P EH1 N - S IH0 Z\nEXPENSING  IH0 K - S P EH1 N - S IH0 NG\nEXPENSIVE  IH0 K - S P EH1 N - S IH0 V\nEXPENSIVELY  EH2 K - S P EH1 N - S IH0 V - L IY0\nEXPERIENCE  IH0 K - S P IH1 - R IY0 - AH0 N S\nEXPERIENCED  IH0 K - S P IH1 - R IY0 - AH0 N S T\nEXPERIENCES  IH0 K - S P IH1 - R IY0 - AH0 N - S IH0 Z\nEXPERIENCING  IH0 K - S P IH1 - R IY0 - AH0 N - S IH0 NG\nEXPERIENTIAL  EH0 K - S P EH2 - R IY0 - EH1 N - SH AH0 L\nEXPERIMENT  IH0 K - S P EH1 - R AH0 - M AH0 N T\nEXPERIMENT'S  IH0 K - S P EH1 - R AH0 - M AH0 N T S\nEXPERIMENTAL  IH0 K - S P EH2 - R AH0 - M EH1 N - T AH0 L\nEXPERIMENTAL(2)  IH0 K - S P EH2 - R IH0 - M EH1 N - T AH0 L\nEXPERIMENTAL(3)  IH0 K - S P ER0 - M EH1 N - T AH0 L\nEXPERIMENTAL(4)  IH0 K - S P EH2 - R AH0 - M EH1 - N AH0 L\nEXPERIMENTAL(5)  IH0 K - S P EH2 - R IH0 - M EH1 - N AH0 L\nEXPERIMENTAL(6)  IH0 K - S P ER0 - M EH1 - N AH0 L\nEXPERIMENTALIST  IH0 K - S P EH2 - R AH0 - M EH1 N - T AH0 - L IH0 S T\nEXPERIMENTALIST(2)  IH0 K - S P EH2 - R AH0 - M EH1 - N AH0 - L IH0 S T\nEXPERIMENTALLY  IH0 K - S P EH0 - R AH0 - M EH1 N - T AH0 - L IY0\nEXPERIMENTALLY(2)  IH0 K - S P EH0 - R AH0 - M EH1 - N AH0 - L IY0\nEXPERIMENTATION  IH0 K - S P EH2 - R AH0 - M AH0 N - T EY1 - SH AH0 N\nEXPERIMENTED  IH0 K - S P EH1 - R AH0 - M AH0 N - T AH0 D\nEXPERIMENTER  IH0 K - S P EH1 - R AH0 - M EH2 N - T ER0\nEXPERIMENTERS  IH0 K - S P EH1 - R AH0 - M EH2 N - T ER0 Z\nEXPERIMENTING  EH0 K - S P EH1 - R AH0 - M EH2 N - T IH0 NG\nEXPERIMENTING(2)  EH0 K - S P EH1 - R AH0 - M EH0 - N IH0 NG\nEXPERIMENTS  IH0 K - S P EH1 - R AH0 - M AH0 N T S\nEXPERT  EH1 K - S P ER0 T\nEXPERT'S  EH1 K - S P ER0 T S\nEXPERTISE  EH2 K - S P ER0 - T IY1 Z\nEXPERTLY  EH1 K - S P ER0 T - L IY0\nEXPERTS  EH1 K - S P ER0 T S\nEXPERTS'  EH1 K - S P ER0 T S\nEXPIATE  EH1 K - S P IY0 - EY2 T\nEXPIRATION  EH2 K - S P ER0 - EY1 - SH AH0 N\nEXPIRATIONS  EH2 K - S P ER0 - EY1 - SH AH0 N Z\nEXPIRATORY  IH0 K - S P AY1 - R AH0 - T AO2 - R IY0\nEXPIRE  IH0 K - S P AY1 R\nEXPIRED  IH0 K - S P AY1 R D\nEXPIRES  IH0 K - S P AY1 - ER0 Z\nEXPIRING  IH0 K - S P AY1 - R IH0 NG\nEXPIRY  EH2 K - S P AY1 - R IY0\nEXPLAIN  IH0 K - S P L EY1 N\nEXPLAINABLE  IH0 K - S P L EY1 - N AH0 - B AH0 L\nEXPLAINED  IH0 K - S P L EY1 N D\nEXPLAINING  IH0 K - S P L EY1 - N IH0 NG\nEXPLAINS  IH0 K - S P L EY1 N Z\nEXPLANATION  EH2 K - S P L AH0 - N EY1 - SH AH0 N\nEXPLANATIONS  EH2 K - S P L AH0 - N EY1 - SH AH0 N Z\nEXPLANATORY  IH0 K - S P L AE1 - N AH0 - T AO2 - R IY0\nEXPLETIVE  EH1 K - S P L AH0 - T IH0 V\nEXPLETIVES  EH1 K - S P L AH0 - T IH0 V Z\nEXPLICATION  EH2 K - S P L AH0 - K EY1 - SH AH0 N\nEXPLICIT  IH0 K - S P L IH1 - S AH0 T\nEXPLICITLY  IH0 K - S P L IH1 - S AH0 T - L IY0\nEXPLODE  IH0 K - S P L OW1 D\nEXPLODED  IH0 K - S P L OW1 - D AH0 D\nEXPLODED(2)  IH0 K - S P L OW1 - D IH0 D\nEXPLODES  IH0 K - S P L OW1 D Z\nEXPLODING  IH0 K - S P L OW1 - D IH0 NG\nEXPLOIT  EH1 K - S P L OY2 T\nEXPLOIT(2)  EH2 K - S P L OY1 T\nEXPLOITATION  EH2 K - S P L OY2 - T EY1 - SH AH0 N\nEXPLOITATIVE  EH2 K - S P L OY1 - T AH0 - T IH0 V\nEXPLOITED  EH1 K - S P L OY2 - T AH0 D\nEXPLOITED(2)  IH0 K - S P L OY1 - T AH0 D\nEXPLOITING  EH1 K - S P L OY2 - T IH0 NG\nEXPLOITING(2)  IH0 K - S P L OY1 - T IH0 NG\nEXPLOITIVE  IH0 K - S P L OY1 - T IH0 V\nEXPLOITIVE(2)  EH0 K - S P L OY1 - T IH0 V\nEXPLOITS  EH1 K - S P L OY2 T S\nEXPLORATION  EH2 K - S P L ER0 - EY1 - SH AH0 N\nEXPLORATION'S  EH2 K - S P L ER0 - EY1 - SH AH0 N Z\nEXPLORATION'S(2)  EH1 K - S P L AO0 - R EY1 - SH AH0 N Z\nEXPLORATION(2)  EH2 K - S P L AO0 - R EY1 - SH AH0 N\nEXPLORATIONS  EH2 K - S P L ER0 - EY1 - SH AH0 N Z\nEXPLORATIONS(2)  EH1 K - S P L AO0 - R EY1 - SH AH0 N Z\nEXPLORATORY  IH0 K - S P L AO1 - R AH0 - T AO2 - R IY0\nEXPLORE  IH0 K - S P L AO1 R\nEXPLORED  IH0 K - S P L AO1 R D\nEXPLORER  IH0 K - S P L AO1 - R ER0\nEXPLORERS  IH0 K - S P L AO1 - R ER0 Z\nEXPLORES  IH0 K - S P L AO1 R Z\nEXPLORING  IH0 K - S P L AO1 - R IH0 NG\nEXPLOSION  IH0 K - S P L OW1 - ZH AH0 N\nEXPLOSIONS  IH0 K - S P L OW1 - ZH AH0 N Z\nEXPLOSIVE  IH0 K - S P L OW1 - S IH0 V\nEXPLOSIVELY  EH2 K - S P L OW1 - S IH0 V - L IY0\nEXPLOSIVES  IH0 K - S P L OW1 - S IH0 V Z\nEXPLOSIVOS  EH2 K - S P L AH0 - S IY1 - V OW0 S\nEXPO  EH1 K - S P OW0\nEXPONENT  EH1 K - S P OW2 - N AH0 N T\nEXPONENTIAL  EH2 K - S P OW0 - N EH1 N - CH AH0 L\nEXPONENTIAL(2)  EH2 K - S P OW0 - N EH1 N - SH AH0 L\nEXPONENTIALLY  EH2 K - S P OW0 - N EH1 N - SH AH0 - L IY0\nEXPONENTIALLY(2)  EH2 K - S P OW0 - N EH1 N - CH AH0 - L IY0\nEXPONENTS  IH0 K - S P OW1 - N AH0 N T S\nEXPORT  EH1 K - S P AO0 R T\nEXPORTABLE  EH0 K - S P AO1 R - T AH0 - B AH0 L\nEXPORTED  IH0 K - S P AO1 R - T AH0 D\nEXPORTER  IH0 K - S P AO1 R - T ER0\nEXPORTERS  IH0 K - S P AO1 R - T ER0 Z\nEXPORTERS'  EH2 K - S P AO1 R - T ER0 Z\nEXPORTING  IH0 K - S P AO1 R - T IH0 NG\nEXPORTS  EH1 K - S P AO0 R T S\nEXPOS  EH1 K - S P OW0 Z\nEXPOSE  IH0 K - S P OW1 Z\nEXPOSED  IH0 K - S P OW1 Z D\nEXPOSES  IH0 K - S P OW1 - Z IH0 Z\nEXPOSING  IH0 K - S P OW1 - Z IH0 NG\nEXPOSITION  EH2 K - S P AH0 - Z IH1 - SH AH0 N\nEXPOSITIONS  EH2 K - S P AH0 - Z IH1 - SH AH0 N Z\nEXPOSITO  EH0 K - S P AH0 - S AY1 - T OW0\nEXPOSITO(2)  EH0 K - S P AH0 - Z IY1 - T OW0\nEXPOSURE  IH0 K - S P OW1 - ZH ER0\nEXPOSURES  IH0 K - S P OW1 - ZH ER0 Z\nEXPOUND  IH0 K - S P AW1 N D\nEXPOUNDED  IH0 K - S P AW1 N - D AH0 D\nEXPOUNDING  IH0 K - S P AW1 N - D IH0 NG\nEXPOUNDS  IH0 K - S P AW1 N D Z\nEXPRESS  IH0 K - S P R EH1 S\nEXPRESS'  IH0 K - S P R EH1 S\nEXPRESS'S  IH0 K - S P R EH1 - S IH0 Z\nEXPRESSED  IH0 K - S P R EH1 S T\nEXPRESSES  IH0 K - S P R EH1 - S AH0 Z\nEXPRESSES(2)  IH0 K - S P R EH1 - S IH0 Z\nEXPRESSING  IH0 K - S P R EH1 - S IH0 NG\nEXPRESSION  IH0 K - S P R EH1 - SH AH0 N\nEXPRESSIONISM  IH0 K - S P R EH1 - SH AH0 N - IH2 - Z AH0 M\nEXPRESSIONIST  IH0 K - S P R EH1 - SH AH0 N - AH0 S T\nEXPRESSIONISTIC  IH0 K - S P R EH2 - SH AH0 - N IH1 - S T IH0 K\nEXPRESSIONLESS  IH0 K - S P R EH2 - SH AH0 N - L IH0 S\nEXPRESSIONS  IH0 K - S P R EH1 - SH AH0 N Z\nEXPRESSIVE  IH0 K - S P R EH1 - S IH0 V\nEXPRESSIVITY  EH2 K - S P R AH0 - S IH1 - V IH0 - T IY0\nEXPRESSLY  EH0 K - S P R EH1 S - L IY0\nEXPRESSO  IH0 K - S P EH1 - S OW0\nEXPRESSO(2)  EH0 K - S P EH1 - S OW0\nEXPRESSWAY  IH0 K - S P R EH1 S - W EY2\nEXPROPRIATE  EH0 K S - P R OW1 - P R IY0 - EY2 T\nEXPROPRIATED  EH0 K S - P R OW1 - P R IY0 - EY2 - T IH0 D\nEXPROPRIATION  EH2 K S - P R OW2 - P R IY0 - EY1 - SH AH0 N\nEXPROPRIATIONS  EH2 K S - P R OW2 - P R IY0 - EY1 - SH AH0 N Z\nEXPULSION  IH0 K - S P AH1 L - SH AH0 N\nEXPULSIONS  IH0 K - S P AH1 L - SH AH0 N Z\nEXPUNGE  IH0 K - S P AH1 N JH\nEXPUNGED  IH0 K - S P AH1 N JH D\nEXQUISITE  EH1 K - S K W AH0 - Z AH0 T\nEXQUISITELY  EH2 K - S K W IH1 - Z IH0 T - L IY0\nEXTANT  EH1 K - S T AH0 N T\nEXTEL  EH1 K - S T EH2 L\nEXTEND  IH0 K - S T EH1 N D\nEXTENDABLE  EH2 K - S T EH1 N - D AH0 - B AH0 L\nEXTENDED  IH0 K - S T EH1 N - D AH0 D\nEXTENDED(2)  IH0 K - S T EH1 N - D IH0 D\nEXTENDER  EH1 K - S T EH2 N - D ER0\nEXTENDERS  EH1 K - S T EH2 N - D ER0 Z\nEXTENDIBLE  EH2 K - S T EH1 N - D IH0 - B AH0 L\nEXTENDING  IH0 K - S T EH1 N - D IH0 NG\nEXTENDS  IH0 K - S T EH1 N D Z\nEXTENSION  IH0 K - S T EH1 N - SH AH0 N\nEXTENSIONS  IH0 K - S T EH1 N - SH AH0 N Z\nEXTENSIVE  IH0 K - S T EH1 N - S IH0 V\nEXTENSIVELY  IH0 K - S T EH1 N - S IH0 V - L IY0\nEXTENT  IH0 K - S T EH1 N T\nEXTENUATE  IH0 K - S T EH1 - N Y UW0 - EY2 T\nEXTENUATING  IH0 K - S T EH1 - N Y UW0 - EY2 - T IH0 NG\nEXTERIOR  IH0 K - S T IH1 - R IY0 - ER0\nEXTERIORS  EH0 K - S T IH1 - R IY0 - ER0 Z\nEXTERMINATE  IH0 K - S T ER1 - M AH0 - N EY2 T\nEXTERMINATED  IH0 K - S T ER1 - M AH0 - N EY2 - T IH0 D\nEXTERMINATES  IH0 K - S T ER1 - M AH0 - N EY2 T S\nEXTERMINATING  IH0 K - S T ER1 - M AH0 - N EY2 - T IH0 NG\nEXTERMINATION  IH0 K - S T ER2 - M AH0 - N EY1 - SH AH0 N\nEXTERMINATOR  IH0 K - S T ER1 - M AH0 - N EY2 - T ER0\nEXTERMINATORS  IH0 K - S T ER1 - M AH0 - N EY2 - T ER0 Z\nEXTERNAL  IH0 K - S T ER1 - N AH0 L\nEXTERNALLY  IH0 K - S T ER1 - N AH0 - L IY0\nEXTINCT  IH0 K - S T IH1 NG K T\nEXTINCTION  IH0 K - S T IH1 NG K - SH AH0 N\nEXTINCTION(2)  IH0 K - S T IH1 NG - SH AH0 N\nEXTINGUISH  IH0 K - S T IH1 NG - G W IH0 SH\nEXTINGUISHED  IH0 K - S T IH1 NG - G W IH0 SH T\nEXTINGUISHER  IH0 K - S T IH1 NG - G W IH0 - SH ER0\nEXTINGUISHERS  IH0 K - S T IH1 NG - G W IH0 - SH ER0 Z\nEXTINGUISHING  IH0 K - S T IH1 NG - G W IH0 - SH IH0 NG\nEXTINGUISHMENT  IH0 K - S T IH1 NG - G W IH0 SH - M AH0 N T\nEXTIRPATE  EH1 K - S T ER0 - P EY2 T\nEXTOL  IH0 K - S T OW1 L\nEXTOLLED  IH0 K - S T OW1 L D\nEXTOLLING  IH0 K - S T OW1 - L IH0 NG\nEXTOLS  IH0 K - S T OW1 L Z\nEXTON  EH1 K - S T AH0 N\nEXTORT  IH0 K - S T AO1 R T\nEXTORTED  IH0 K - S T AO1 R - T IH0 D\nEXTORTING  IH0 K - S T AO1 R - T IH0 NG\nEXTORTION  IH0 K - S T AO1 R - SH AH0 N\nEXTORTIONATE  IH0 K - S T AO1 R - SH AH0 N - AH0 T\nEXTORTIONATE(2)  IH0 K - S T AO1 R - SH AH0 N - EY2 T\nEXTRA  EH1 K - S T R AH0\nEXTRACELLULARLY  EH1 K - S T R AH0 - S EH2 - L Y AH0 - L ER0 - L IY0\nEXTRACT  IH0 K - S T R AE1 K T\nEXTRACT(2)  EH1 K - S T R AE2 K T\nEXTRACTED  IH0 K - S T R AE1 K - T AH0 D\nEXTRACTED(2)  IH0 K - S T R AE1 K - T IH0 D\nEXTRACTING  IH0 K - S T R AE1 K - T IH0 NG\nEXTRACTION  IH0 K - S T R AE1 K - SH AH0 N\nEXTRACTIONS  IH0 K - S T R AE1 K - SH AH0 N Z\nEXTRACTS  IH0 K - S T R AE1 K T S\nEXTRACTS(2)  EH1 K - S T R AE2 K T S\nEXTRACURRICULAR  EH2 K - S T R AH0 - K ER0 - IH1 - K Y AH0 - L ER0\nEXTRADITE  EH1 K - S T R AH0 - D AY2 T\nEXTRADITED  EH1 K - S T R AH0 - D AY2 - T IH0 D\nEXTRADITING  EH1 K - S T R AH0 - D AY2 - T IH0 NG\nEXTRADITION  EH2 K - S T R AH0 - D IH1 - SH AH0 N\nEXTRAGALACTIC  EH2 K - S T R AH0 - G AH0 - L AE1 K - T IH0 K\nEXTRALEGAL  EH2 K - S T R AH0 - L IY1 - G AH0 L\nEXTRAMARITAL  EH2 K - S T R AH0 - M EH1 - R AH0 - T AH0 L\nEXTRANEOUS  EH0 K - S T R EY1 - N IY0 - AH0 S\nEXTRAORDINAIRE  EH2 K - S T R AH0 - AO1 R - D IH0 - N EH2 R\nEXTRAORDINARILY  IH0 K - S T R AO2 R - D AH0 - N EH1 - R AH0 - L IY0\nEXTRAORDINARY  IH0 K - S T R AO1 R - D AH0 N - EH2 - R IY0\nEXTRAORDINARY(2)  EH2 K - S T R AH0 - AO1 R - D AH0 N - EH2 - R IY0\nEXTRAPOLATE  IH0 K - S T R AE1 - P AH0 - L EY2 T\nEXTRAPOLATED  IH0 K - S T R AE1 - P AH0 - L EY2 - T IH0 D\nEXTRAPOLATING  IH0 K - S T R AE1 - P AH0 - L EY2 - T IH0 NG\nEXTRAPOLATION  IH0 K - S T R AE2 - P AH0 - L EY1 - SH AH0 N\nEXTRAS  EH1 K - S T R AH0 Z\nEXTRASENSORY  EH2 K - S T R AH0 - S EH1 N - S ER0 - IY0\nEXTRATERRESTRIAL  EH2 K - S T R AH0 - T ER0 - EH1 S - T R IY0 - AH0 L\nEXTRATERRESTRIALS  EH2 K - S T R AH0 - T ER2 - EH1 S - T R IY0 - AH0 L Z\nEXTRATERRITORIAL  EH2 K - S T R AH0 - T EH2 - R IH0 - T AO1 - R IY0 - AH0 L\nEXTRATERRITORIALITY  EH2 K - S T R AH0 - T EH2 - R AH0 - T AO2 - R IY0 - AE1 - L AH0 - T IY0\nEXTRAVAGANCE  IH0 K - S T R AE1 - V AH0 - G AH0 N S\nEXTRAVAGANT  IH0 K - S T R AE1 - V AH0 - G AH0 N T\nEXTRAVAGANTLY  EH2 K - S T R AE1 - V AH0 - G AH0 N T - L IY0\nEXTRAVAGANZA  IH0 K - S T R AE2 - V AH0 - G AE1 N - Z AH0\nEXTRAVAGANZAS  IH0 K - S T R AE2 - V AH0 - G AE1 N - Z AH0 Z\nEXTREME  IH0 K - S T R IY1 M\nEXTREMELY  IH0 K - S T R IY1 M - L IY0\nEXTREMES  IH0 K - S T R IY1 M Z\nEXTREMISM  EH2 K - S T R EH1 - M IH0 - Z AH0 M\nEXTREMISM(2)  EH2 K - S T R IY1 - M IH2 - Z AH0 M\nEXTREMIST  IH0 K - S T R IY1 - M IH0 S T\nEXTREMISTS  IH0 K - S T R IY1 - M AH0 S T S\nEXTREMISTS(2)  IH0 K - S T R IY1 - M IH0 S T S\nEXTREMISTS(3)  IH0 K - S T R IY1 - M IH0 S S\nEXTREMISTS(4)  IH0 K - S T R IY1 - M IH0 S\nEXTREMITIES  IH0 K S - T R EH1 - M AH0 - T IY0 Z\nEXTREMITY  IH0 K S - T R EH1 - M AH0 - T IY0\nEXTRICATE  EH1 K - S T R AH0 - K EY2 T\nEXTRICATED  EH1 K - S T R IH0 - K EY2 - T IH0 D\nEXTRINSIC  EH0 K - S T R IH1 N - S IH0 K\nEXTROVERT  EH1 K - S T R AH0 - V ER2 T\nEXTROVERTED  EH1 K - S T R AH0 - V ER2 - T IH0 D\nEXTRUDE  IH0 K - S T R UW1 D\nEXTRUDED  IH0 K - S T R UW1 - D AH0 D\nEXTRUDING  IH0 K - S T R UW1 - D IH0 NG\nEXTRUSION  IH0 K S - T R UW1 - ZH AH0 N\nEXUBERANCE  IH0 G - Z UW1 - B ER0 - AH0 N S\nEXUBERANT  IH0 G - Z UW1 - B ER0 - AH0 N T\nEXUDE  IH0 G - Z UW1 D\nEXUDED  IH0 G - Z UW1 - D IH0 D\nEXUDES  IH0 G - Z UW1 D Z\nEXULT  IH0 G - Z AH1 L T\nEXULTANT  IH0 G - Z AH1 L - T AH0 N T\nEXULTANTLY  IH0 G - Z AH1 L - T AH0 N T - L IY0\nEXULTED  IH0 G - Z AH1 L - T IH0 D\nEXULTS  IH0 G - Z AH1 L T S\nEXUM  IH0 G - Z AH1 M\nEXXON  EH1 K - S AA0 N\nEXXON'S  EH1 K - S AA0 N Z\nEYDE  EY1 D\nEYDIE  EY1 - D IY0\nEYE  AY1\nEYE'S  AY1 Z\nEYEBALL  AY1 - B AO2 L\nEYEBALLS  AY1 - B AO2 L Z\nEYEBROW  AY1 - B R AW2\nEYEBROWS  AY1 - B R AW2 Z\nEYECARE  AY1 - K EH2 R\nEYED  AY1 D\nEYEDROP  AY1 - D R AA2 P\nEYEDROPPER  AY1 - D R AA2 - P ER0\nEYEDROPS  AY1 - D R AA2 P S\nEYEGLASS  AY1 - G L AE2 S\nEYEGLASSES  AY1 - G L AE2 - S AH0 Z\nEYEGLASSES(2)  AY1 - G L AE2 - S IH0 Z\nEYEING  AY1 - IH0 NG\nEYELAB  AY1 - L AE2 B\nEYELASH  AY1 - L AE2 SH\nEYELASHES  AY1 - L AE2 - SH IH0 Z\nEYELESS  AY1 - L AH0 S\nEYELET  AY1 - L AH0 T\nEYELETS  AY1 - L AH0 T S\nEYELID  AY1 - L IH2 D\nEYELIDS  AY1 - L IH2 D Z\nEYELIKE  AY1 - L AY2 K\nEYELINER  AY1 - L AY2 - N ER0\nEYEPIECE  AY1 - P IY2 S\nEYER  AY1 - ER0\nEYERLY  IY1 - ER0 - L IY0\nEYERMAN  IY1 - ER0 - M AH0 N\nEYES  AY1 Z\nEYES'  AY1 Z\nEYESHADE  AY1 - SH EY2 D\nEYESIGHT  AY1 - S AY2 T\nEYESORE  AY1 - S AO2 R\nEYESPOT  AY1 - S P AA2 T\nEYESTONE  AY1 - S T OW2 N\nEYESTRAIN  AY1 - S T R EY2 N\nEYETECH  AY1 - T EH2 K\nEYETECH'S  AY1 - T EH2 K S\nEYEWEAR  AY1 - W EH2 R\nEYEWITNESS  AY1 - W IH1 T - N AH0 S\nEYEWITNESSES  AY1 - W IH2 T - N AH0 - S IH0 Z\nEYLER  EY1 - L ER0\nEYMAN  EY1 - M AH0 N\nEYNON  EY1 - N AH0 N\nEYRE  EH1 R\nEYRICH  EH1 - R IH0 CH\nEYRIE  EH1 - R IY0\nEYRING  EY1 - R IH0 NG\nEYSTER  EY1 - S T ER0\nEYTON  EY1 - T AH0 N\nEZEKIEL  EH1 - Z IH0 - K IY2 L\nEZELL  AH0 - Z EH1 L\nEZELL'S  AH0 - Z EH1 L Z\nEZELLE  IH0 - Z EH1 L\nEZER  IY1 - Z ER0\nEZER(2)  EH1 - Z ER0\nEZOE  EH1 - Z OW0\nEZOLA  EY2 - Z OW1 - L AH0\nEZRA  EH1 - Z R AH0\nEZZELL  EH1 - Z AH0 L\nEZZO  EH1 - Z OW0\nF  EH1 F\nF'D  EH1 F D\nF'S  EH1 F S\nF.  EH1 F\nF.'S  EH1 F S\nFAAL  F AA1 L\nFAAL'S  F AA1 L Z\nFAAS  F AA1 Z\nFAB  F AE1 B\nFABBRI  F AE1 - B R IY0\nFABEL  F AE1 - B AH0 L\nFABELA  F AA0 - B EH1 - L AH0\nFABER  F EY1 - B ER0\nFABERGE  F AE1 - B ER0 JH\nFABERGE(2)  F AE2 - B ER0 - JH EY1\nFABERMAN  F EY1 - B ER0 - M AH0 N\nFABIA  F AA1 - B IY0 - AH0\nFABIAN  F EY1 - B IY0 - AH0 N\nFABIANI  F AA0 - B IY0 - AA1 - N IY0\nFABIANO  F AA0 - B IY0 - AA1 - N OW0\nFABIEN  F AE1 - B IY0 N\nFABIO  F AA1 - B IY0 - OW0\nFABLE  F EY1 - B AH0 L\nFABLED  F EY1 - B AH0 L D\nFABLES  F EY1 - B AH0 L Z\nFABRE  F EY1 - B ER0\nFABRI  F AE1 - B R IY0\nFABRIC  F AE1 - B R IH0 K\nFABRICANT  F AE1 - B R IH0 - K AH0 N T\nFABRICATE  F AE1 - B R AH0 - K EY2 T\nFABRICATED  F AE1 - B R IH0 - K EY2 - T AH0 D\nFABRICATED(2)  F AE1 - B R IH0 - K EY2 - T IH0 D\nFABRICATES  F AE1 - B R IH0 - K EY2 T S\nFABRICATING  F AE1 - B R IH0 - K EY2 - T IH0 NG\nFABRICATION  F AE2 - B R IH0 - K EY1 - SH AH0 N\nFABRICATIONS  F AE2 - B R IH0 - K EY1 - SH AH0 N Z\nFABRICATOR  F AE1 - B R IH0 - K EY2 - T ER0\nFABRICATORS  F AE1 - B R IH0 - K EY2 - T ER0 Z\nFABRICS  F AE1 - B R IH0 K S\nFABRIS  F AE1 - B R IH0 S\nFABRIZI  F AA0 - B R IY1 - Z IY0\nFABRIZIO  F AA0 - B R IY1 T - S IY0 - OW0\nFABRIZIUS  F AE2 - B R IY1 - Z IY0 - AH0 S\nFABRON  F AE1 - B R AH0 N\nFABRY  F AE1 - B R IY0\nFABULOUS  F AE1 - B Y AH0 - L AH0 S\nFABULOUSLY  F AE1 - B Y UW0 - L AH0 S - L IY0\nFAC  F AE1 K\nFACADE  F AH0 - S AA1 D\nFACADES  F AH0 - S AA1 D Z\nFACCHINI  F AA0 - K IY1 - N IY0\nFACCIOLA  F AE2 - CH IY0 - OW1 - L AH0\nFACE  F EY1 S\nFACED  F EY1 S T\nFACEDOWN  F EY1 S - D AW1 N\nFACELESS  F EY1 S - L AH0 S\nFACELIFT  F EY1 S - L IH2 F T\nFACEMIRE  F AA0 - CH EH0 - M IH1 - R IY0\nFACER  F EY1 - S ER0\nFACES  F EY1 - S AH0 Z\nFACES(2)  F EY1 - S IH0 Z\nFACET  F AE1 - S AH0 T\nFACET'S  F AE1 - S AH0 T S\nFACETED  F AE1 - S AH0 - T IH0 D\nFACETIOUS  F AH0 - S IY1 - SH AH0 S\nFACETIOUSLY  F AH0 - S IY1 - SH AH0 S - L IY0\nFACETS  F AE1 - S AH0 T S\nFACEY  F EY1 - S IY0\nFACIAL  F EY1 - SH AH0 L\nFACIALS  F EY1 - SH AH0 L Z\nFACIANE  F AA0 - S IY0 - AA1 - N EY0\nFACIE  F EY1 - S IY0\nFACILE  F AE1 - S AH0 L\nFACILITATE  F AH0 - S IH1 - L AH0 - T EY2 T\nFACILITATED  F AH0 - S IH1 - L AH0 - T EY2 - T IH0 D\nFACILITATES  F AH0 - S IH1 - L AH0 - T EY2 T S\nFACILITATING  F AH0 - S IH1 - L AH0 - T EY2 - T IH0 NG\nFACILITATION  F AH0 - S IH2 - L AH0 - T EY1 - SH AH0 N\nFACILITATOR  F AH0 - S IH1 - L AH0 - T EY2 - T ER0\nFACILITATOR'S  F AH0 - S IH1 - L AH0 - T EY2 - T ER0 Z\nFACILITATORS  F AH0 - S IH1 - L AH0 - T EY2 - T ER0 Z\nFACILITIES  F AH0 - S IH1 - L AH0 - T IY0 Z\nFACILITIES(2)  F AH0 - S IH1 - L IH0 - T IY0 Z\nFACILITY  F AH0 - S IH1 - L IH0 - T IY0\nFACILITY'S  F AH0 - S IH1 - L IH0 - T IY0 Z\nFACING  F EY1 - S IH0 NG\nFACINGS  F EY1 - S IH0 NG Z\nFACKLER  F AE1 K - L ER0\nFACKRELL  F AE1 - K R AH0 L\nFACSIMILE  F AE0 K - S IH1 - M AH0 - L IY0\nFACSIMILES  F AE0 K - S IH1 - M AH0 - L IY0 Z\nFACT  F AE1 K T\nFACTEAU  F AH0 K - T OW1\nFACTION  F AE1 K - SH AH0 N\nFACTIONAL  F AE1 K - SH AH0 - N AH0 L\nFACTIONALISM  F AE1 K - SH AH0 N - AH0 L - IH2 - Z AH0 M\nFACTIONS  F AE1 K - SH AH0 N Z\nFACTITIOUS  F AE0 K - T IH1 - SH AH0 S\nFACTLY  F AE1 K T - L IY0\nFACTO  F AE1 K - T OW0\nFACTOR  F AE1 K - T ER0\nFACTORED  F AE1 K - T ER0 D\nFACTORIES  F AE1 K - T ER0 - IY0 Z\nFACTORING  F AE1 K - T ER0 - IH0 NG\nFACTORS  F AE1 K - T ER0 Z\nFACTORS'  F AE1 K - T ER0 Z\nFACTORY  F AE1 K - T ER0 - IY0\nFACTORY'S  F AE1 K - T ER0 - IY0 Z\nFACTS  F AE1 K T S\nFACTS(2)  F AE1 K S\nFACTUAL  F AE1 K - CH UW0 - AH0 L\nFACTUALLY  F AE1 K - CH UW0 - AH0 - L IY0\nFACULTATIVE  F AE1 - K AH0 L - T EY2 - T IH0 V\nFACULTIES  F AE1 - K AH0 L - T IY0 Z\nFACULTY  F AE1 - K AH0 L - T IY0\nFAD  F AE1 D\nFADDEN  F AE1 - D AH0 N\nFADDIS  F AE1 - D IH0 S\nFADDISH  F AE1 - D IH0 SH\nFADE  F EY1 D\nFADED  F EY1 - D AH0 D\nFADED(2)  F EY1 - D IH0 D\nFADEL  F AE1 - D AH0 L\nFADELEY  F AE1 - D IH0 - L IY0\nFADELY  F EY1 D - L IY0\nFADEN  F EY1 - D AH0 N\nFADER  F EY1 - D ER0\nFADES  F EY1 D Z\nFADING  F EY1 - D IH0 NG\nFADLALLAH  F AE2 D - L AE1 - L AH0\nFADNESS  F AE1 D - N AH0 S\nFADS  F AE1 D Z\nFAE  F AY1\nFAERBER  F EH1 R - B ER0\nFAETH  F IY1 TH\nFAG  F AE1 G\nFAGAN  F EY1 - G AH0 N\nFAGEN  F AE1 - G AH0 N\nFAGER  F EY1 - G ER0\nFAGERBERG  F EY1 - G ER0 - B ER0 G\nFAGERSTROM  F EY1 - G ER0 - S T R AH0 M\nFAGG  F AE1 G\nFAGGART  F AE1 - G AA0 R T\nFAGGOT  F AE1 - G AH0 T\nFAGIN  F EY1 - G IH0 N\nFAGLEY  F AE1 G - L IY0\nFAGNANT  F AE1 G - N AH0 N T\nFAGOTH  F AE1 - G AH0 TH\nFAGS  F AE1 G Z\nFAGUNDES  F AE1 - G AH0 N D Z\nFAHD  F AA1 D\nFAHERTY  F AE1 - HH ER0 - T IY0\nFAHEY  F AE1 - HH IY0\nFAHL  F AA1 L\nFAHLMAN  F AA1 L - M AH0 N\nFAHMY  F AA1 - M IY0\nFAHNESTOCK  F AA1 N - S T AA2 K\nFAHR  F AA1 R\nFAHRENHEIT  F EH1 - R AH0 N - HH AY2 T\nFAHRENHEIT'S  F EH1 - R AH0 N - HH AY2 T S\nFAHRENKOPF  F AA1 - R AH0 N - K AA2 P F\nFAHRER  F AA1 - R ER0\nFAHRINGER  F AA1 - R IH0 - NG ER0\nFAHRNER  F AA1 R - N ER0\nFAHRNEY  F AA1 R - N IY0\nFAHS  F AE1 S\nFAHY  F EY1 - HH IY0\nFAIDLEY  F EY1 D - L IY0\nFAIELLA  F AY2 - EH1 - L AH0\nFAIL  F EY1 L\nFAILE  F EY1 L\nFAILED  F EY1 L D\nFAILING  F EY1 - L IH0 NG\nFAILINGS  F EY1 - L IH0 NG Z\nFAILLA  F EY1 - L AH0\nFAILOR  F EY1 - L ER0\nFAILS  F EY1 L Z\nFAILSAFE  F EY1 L - S EY2 F\nFAILURE  F EY1 - L Y ER0\nFAILURES  F EY1 - L Y ER0 Z\nFAIN  F EY1 N\nFAINT  F EY1 N T\nFAINTED  F EY1 N - T IH0 D\nFAINTER  F EY1 N - T ER0\nFAINTEST  F EY1 N - T AH0 S T\nFAINTHEARTED  F EY1 N T - HH AA1 R - T IH0 D\nFAINTING  F EY1 N - T IH0 NG\nFAINTLY  F EY1 N T - L IY0\nFAINTNESS  F EY1 N T - N AH0 S\nFAIOLA  F AY1 - OW0 - L AH0\nFAIR  F EH1 R\nFAIR'S  F EH1 R Z\nFAIRALL  F EH0 - R AO1 L\nFAIRBAIRN  F EH1 R - B ER0 N\nFAIRBANK  F EH1 R - B AH0 NG K\nFAIRBANKS  F EH1 R - B AH0 NG K S\nFAIRBROTHER  F EH1 R - B R AH0 - DH ER0\nFAIRBURN  F EH1 R - B ER2 N\nFAIRCHILD  F EH1 R - CH AY2 L D\nFAIRCHILD'S  F EH1 R - CH AY2 L D Z\nFAIRCLOTH  F EH1 R - K L AH0 TH\nFAIRCLOUGH  F EH1 R - K L AW0\nFAIRE  F EH1 R\nFAIRER  F EH1 - R ER0\nFAIRES  F EH1 R Z\nFAIREST  F EH1 - R IH0 S T\nFAIREY  F EH1 - R IY0\nFAIRFAX  F EH1 R - F AE2 K S\nFAIRFIELD  F EH1 R - F IY2 L D\nFAIRGROUND  F EH1 R - G R AW2 N D\nFAIRGROUNDS  F EH1 R - G R AW2 N D Z\nFAIRHAVEN  F EH1 R - HH EY2 - V AH0 N\nFAIRHURST  F AY1 R - HH ER0 S T\nFAIRIES  F EH1 - R IY0 Z\nFAIRLAWN  F EH1 R - L AO2 N\nFAIRLEIGH  F EH1 R - L AH0\nFAIRLESS  F EH1 R - L IH0 S\nFAIRLEY  F EH1 R - L IY0\nFAIRLIE  F EH1 R - L IY0\nFAIRLOW  F EH1 R - L OW0\nFAIRLY  F EH1 R - L IY0\nFAIRMAN  F AY1 R - M AH0 N\nFAIRMONT  F EH1 R - M AA2 N T\nFAIRNESS  F EH1 R - N AH0 S\nFAIRS  F EH1 R Z\nFAIRVIEW  F EH1 R - V Y UW2\nFAIRWAY  F EH1 R - W EY2\nFAIRWAYS  F EH1 R - W EY2 Z\nFAIRWEATHER  F EH1 R - W EH2 - DH ER0\nFAIRY  F EH1 - R IY0\nFAIRYLAND  F EH1 - R IY0 - L AE2 N D\nFAIRYTALE  F EH1 - R IY0 - T EY2 L\nFAIRYTALES  F EH1 - R IY0 - T EY2 L Z\nFAISAL  F EY1 - Z AH0 L\nFAISON  F EY1 - Z AH0 N\nFAIST  F AA1 - IH0 S T\nFAIT  F EY1 T\nFAITH  F EY1 TH\nFAITHFUL  F EY1 TH - F AH0 L\nFAITHFULLY  F EY1 TH - F AH0 - L IY0\nFAITHFULS  F EY1 TH - F AH0 L Z\nFAITHS  F EY1 TH S\nFAIVRE  F EY1 - V ER0\nFAJARDO  F AA0 - Y AA1 R - D OW0\nFAJITA  F AH0 - JH IY1 - T AH0\nFAJITA(2)  F AH0 - HH IY1 - T AH0\nFAJITAS  F AH0 - JH IY1 - T AH0 Z\nFAJITAS(2)  F AH0 - HH IY1 - T AH0 Z\nFAKE  F EY1 K\nFAKED  F EY1 K T\nFAKER  F EY1 - K ER0\nFAKERS  F EY1 - K ER0 Z\nFAKES  F EY1 K S\nFAKING  F EY1 - K IH0 NG\nFALAFEL  F AH0 - L AA1 - F AH0 L\nFALANGA  F AA0 - L AA1 NG - G AH0\nFALARDEAU  F AE1 - L AA0 R - D OW2\nFALASCO  F AA0 - L AA1 - S K OW0\nFALB  F AO1 L B\nFALBO  F AE1 L - B OW0\nFALCIGNO  F AE2 L - S IH1 G - N OW0\nFALCIGNO(2)  F EH2 L - S IY1 - N Y OW0\nFALCK  F AE1 L K\nFALCO  F AE1 L - K OW0\nFALCOFF  F AE1 L - K AO0 F\nFALCON  F AE1 L - K AH0 N\nFALCONBRIDGE  F AE1 L - K AH0 N - B R IH2 JH\nFALCONBRIDGE'S  F AE1 L - K AH0 N - B R IH2 - JH IH0 Z\nFALCONE  F AA0 L - K OW1 - N IY0\nFALCONER  F AE1 L - K AH0 - N ER0\nFALCONERS  F AE1 L - K AH0 - N ER0 Z\nFALCONET  F AE2 L - K AH0 - N EH1 T\nFALCONETS  F AE2 L - K AH0 - N EH1 T S\nFALCONI  F AA0 L - K OW1 - N IY0\nFALCONRY  F AE1 L - K AH0 N - R IY0\nFALCONS  F AE1 L - K AH0 N Z\nFALDO  F AA1 L - D OW0\nFALER  F EY1 - L ER0\nFALES  F EY1 L Z\nFALEY  F EY1 - L IY0\nFALGOUST  F AA1 L - G UW0 S T\nFALGOUT  F AE1 L - G AW0 T\nFALIK  F AA1 - L IH0 K\nFALIN  F AE1 - L IH0 N\nFALISE  F AH0 - L IY1 S\nFALK  F AO1 K\nFALKE  F AO1 K\nFALKENBERG  F AO1 - K AH0 N - B ER0 G\nFALKENSTEIN  F AO1 - K AH0 N - S T AY0 N\nFALKENSTEIN(2)  F AO1 - K AH0 N - S T IY0 N\nFALKLAND  F AO1 K - L AH0 N D\nFALKLANDS  F AO1 K - L AH0 N D Z\nFALKNER  F AO1 K - N ER0\nFALKOWSKI  F AH0 L - K AO1 F S - K IY0\nFALL  F AO1 L\nFALL'S  F AO1 L Z\nFALL(2)  F AA1 L\nFALLA  F AE1 - L AH0\nFALLACIES  F AE1 - L AH0 - S IY0 Z\nFALLACIOUS  F AH0 - L EY1 - SH AH0 S\nFALLACIOUSLY  F AH0 - L EY1 - SH AH0 S - L IY0\nFALLACY  F AE1 - L AH0 - S IY0\nFALLAW  F AE1 - L AO2\nFALLBACK  F AO1 L - B AE2 K\nFALLEN  F AA1 - L AH0 N\nFALLER  F AO1 - L ER0\nFALLERT  F AE1 - L ER0 T\nFALLIBILITY  F AE2 - L IH0 - B IH1 - L IH0 - T IY0\nFALLIBLE  F AE1 - L AH0 - B AH0 L\nFALLIN  F AE1 - L IH0 N\nFALLING  F AA1 - L IH0 NG\nFALLIS  F AE1 - L IH0 S\nFALLOFF  F AO1 L - AO2 F\nFALLON  F AE1 - L AH0 N\nFALLOPIAN  F AH0 - L OW1 - P IY0 - AH0 N\nFALLOUT  F AO1 L - AW2 T\nFALLOUTS  F AO1 L - AW2 T S\nFALLOW  F AE1 - L OW2\nFALLOWS  F AE1 - L OW2 Z\nFALLS  F AO1 L Z\nFALMOUTH  F AE1 L - M AH0 TH\nFALOR  F AE1 - L ER0\nFALOTICO  F AA0 - L OW0 - T IY1 - K OW0\nFALSE  F AO1 L S\nFALSEHOOD  F AE1 L S - HH UH2 D\nFALSEHOODS  F AE1 L S - HH UH2 D Z\nFALSELY  F AO1 L S - L IY0\nFALSETTO  F AO0 L - S EH1 - T OW2\nFALSETTOS  F AO0 L - S EH1 - T OW2 Z\nFALSIFICATION  F AE2 L - S AH0 - F AH0 - K EY1 - SH AH0 N\nFALSIFIED  F AO1 L - S AH0 - F AY2 D\nFALSIFY  F AO1 L - S AH0 - F AY2\nFALSIFYING  F AO1 L - S AH0 - F AY2 - IH0 NG\nFALSITY  F AO1 L - S AH0 - T IY0\nFALSONE  F AO1 L - S AH0 N\nFALSTAFF  F AO1 L - S T AE2 F\nFALSTAFF'S  F AO1 L - S T AE2 F S\nFALTER  F AO1 L - T ER0\nFALTERED  F AA1 L - T ER0 D\nFALTERING  F AO1 L - T ER0 - IH0 NG\nFALTERS  F AO1 L - T ER0 Z\nFALVEY  F AE1 L - V IY0\nFALVO  F AA1 L - V OW0\nFALWELL  F AO1 L - W EH2 L\nFALWELL'S  F AO1 L - W EH2 L Z\nFALYNN  F AE1 - L IH0 N\nFALZARANO  F AA0 L - Z AA0 - R AA1 - N OW0\nFALZON  F AA1 L - Z AH0 N\nFALZONE  F AA0 L - Z OW1 - N IY0\nFAMA  F AA1 - M AH0\nFAMBRO  F AE1 M - B R OW0\nFAMBROUGH  F AE1 M - B R AW0\nFAME  F EY1 M\nFAMED  F EY1 M D\nFAMER  F EY1 - M ER0\nFAMERS  F EY1 - M ER0 Z\nFAMIGLIETTI  F AH0 - M IH2 G - L IY0 - EH1 - T IY0\nFAMILIAL  F AH0 - M IH1 - L Y AH0 L\nFAMILIAR  F AH0 - M IH1 - L Y ER0\nFAMILIARITY  F AH0 - M IH2 - L Y EH1 - R AH0 - T IY0\nFAMILIARIZE  F AH0 - M IH1 - L Y ER0 - AY2 Z\nFAMILIARIZED  F AH0 - M IH1 - L Y ER0 - AY2 Z D\nFAMILIES  F AE1 - M AH0 - L IY0 Z\nFAMILIES'  F AE1 - M AH0 - L IY0 Z\nFAMILIES(2)  F AE1 M - L IY0 Z\nFAMILY  F AE1 - M AH0 - L IY0\nFAMILY'S  F AE1 - M AH0 - L IY0 Z\nFAMILY'S(2)  F AE1 M - L IY0 Z\nFAMILY(2)  F AE1 M - L IY0\nFAMINE  F AE1 - M AH0 N\nFAMINES  F AE1 - M AH0 N Z\nFAMOUS  F EY1 - M AH0 S\nFAMOUSLY  F EY1 - M AH0 S - L IY0\nFAMULARO  F AA0 - M UW0 - L AA1 - R OW0\nFAN  F AE1 N\nFAN'S  F AE1 N Z\nFANARA  F AA0 - N AA1 - R AH0\nFANATIC  F AH0 - N AE1 - T IH0 K\nFANATICAL  F AH0 - N AE1 - T IH0 - K AH0 L\nFANATICALLY  F AH0 - N AE1 - T IH0 - K AH0 - L IY0\nFANATICALLY(2)  F AH0 - N AE1 - T IH0 K - L IY0\nFANATICISM  F AH0 - N AE1 - T AH0 - S IH2 - Z AH0 M\nFANATICS  F AH0 - N AE1 - T IH0 K S\nFANCHER  F AE1 N - CH ER0\nFANCHON  F AE1 N - CH AH0 N\nFANCIED  F AE1 N - S IY0 D\nFANCIER  F AE1 N - S IY0 - ER0\nFANCIERS  F AE1 N - S IY0 - ER0 Z\nFANCIES  F AE1 N - S IY0 Z\nFANCIEST  F AE1 N - S IY0 - AH0 S T\nFANCIFUL  F AE1 N - S IH0 - F AH0 L\nFANCY  F AE1 N - S IY0\nFANDANGO  F AE0 N - D AE1 NG - G OW2\nFANDEL  F AE1 N - D AH0 L\nFANDRICH  F AE1 N - D R IH0 K\nFANE  F EY1 N\nFANECH  F AE1 - N EH2 K\nFANECH'S  F AE1 - N EH2 K S\nFANELLI  F AH0 - N EH1 - L IY0\nFANEUIL  F AE1 - N Y UW0 - IH0 L\nFANFARE  F AE1 N - F EH2 R\nFANG  F AE1 NG\nFANGER  F AE1 - NG ER0\nFANGLE  F AE1 NG - G AH0 L\nFANGLED  F AE1 NG - G AH0 L D\nFANGMAN  F AE1 NG - M AH0 N\nFANGS  F AE1 NG Z\nFANGUY  F AH0 NG - G W IY1\nFANKHAUSER  F AE1 NG K - HH AW2 - Z ER0\nFANLIKE  F AE1 N - L AY2 K\nFANN  F AE1 N\nFANNED  F AE1 N D\nFANNIE  F AE1 - N IY0\nFANNIN  F AE1 - N IH0 N\nFANNING  F AE1 - N IH0 NG\nFANNING'S  F AE1 - N IH0 NG Z\nFANNON  F AE1 - N AH0 N\nFANNY  F AE1 - N IY0\nFANS  F AE1 N Z\nFANS'  F AE1 N Z\nFANSLER  F AE1 N - S AH0 - L ER0\nFANSLER(2)  F AE1 N Z - L ER0\nFANT  F AE1 N T\nFANTA  F AA1 N - T AH0\nFANTAIL  F AE1 N - T EY2 L\nFANTASIA  F AE0 N - T EY1 - ZH AH0\nFANTASIES  F AE1 N - T AH0 - S IY0 Z\nFANTASIES(2)  F AE1 - N AH0 - S IY0 Z\nFANTASIZE  F AE1 N - T AH0 - S AY2 Z\nFANTASIZE(2)  F AE1 - N AH0 - S AY2 Z\nFANTASIZED  F AE1 N - T IH0 - S AY2 Z D\nFANTASIZED(2)  F AE1 - N IH0 - S AY2 Z D\nFANTASIZES  F AE1 N - T AH0 - S AY2 - Z IH0 Z\nFANTASIZES(2)  F AE1 - N AH0 - S AY2 - Z IH0 Z\nFANTASIZING  F AE1 N - T AH0 - S AY2 - Z IH0 NG\nFANTASIZING(2)  F AE1 - N AH0 - S AY2 - Z IH0 NG\nFANTASTIC  F AE0 N - T AE1 - S T IH0 K\nFANTASTICALLY  F AE0 N - T AE1 - S T IH0 K - L IY0\nFANTASTIK  F AE2 N - T AE1 - S T IH0 K\nFANTASY  F AE1 N - T AH0 - S IY0\nFANTASY(2)  F AE1 - N AH0 - S IY0\nFANTASYLAND  F AE1 N - T AH0 - S IY0 - L AE2 N D\nFANTASYLAND(2)  F AE1 - N AH0 - S IY0 - L AE2 N D\nFANTINI  F AA0 N - T IY1 - N IY0\nFANTLE  F AE1 N - T AH0 L\nFANTON  F AE1 N - T AH0 N\nFANTOZZI  F AA0 N - T OW1 T - S IY0\nFANTROY  F AE1 N - T R OY2\nFANUC  F AE1 - N AH0 K\nFANUCCHI  F AA0 - N UW1 - K IY0\nFANUEIL  F AE1 - N Y AH0 L\nFAO  F AW1\nFAR  F AA1 R\nFAR'S  F AA1 R Z\nFARABAUGH  F AE1 - R AH0 - B AO2\nFARABEE  F AE1 - R AH0 - B IY0\nFARABUNDO  F EH2 - R AH0 - B UW1 N - D OW2\nFARACE  F AA0 - R AA1 - CH IY0\nFARACI  F AA0 - R AA1 - CH IY0\nFARADAY  F AE1 - R AH0 - D EY2\nFARADAY'S  F AE1 - R AH0 - D EY2 Z\nFARAGHER  F AE1 - R AH0 G - HH ER0\nFARAGO  F AA0 - R AA1 - G OW0\nFARAH  F EH1 - R AH0\nFARAHKAN  F AE1 - R AH0 - K AE2 N\nFARAI  F EH1 - R EY0\nFARAI(2)  F AA1 - R EY0\nFARAI(3)  F AA1 - R AY0\nFARANDA  F ER0 - AE1 N - D AH0\nFARAONE  F AA0 - R AA0 - OW1 - N IY0\nFARAWAY  F AA1 - R AH0 - W EY1\nFARB  F AA1 R B\nFARBEN  F AA1 R - B AH0 N\nFARBER  F AA1 R - B ER0\nFARBERWARE  F AA1 R - B ER0 - W EH2 R\nFARBMAN  F AA1 R B - M AH0 N\nFARCE  F AA1 R S\nFARCICAL  F AA1 R - S AH0 - K AH0 L\nFARCICAL(2)  F AA1 R - S IH0 - K AH0 L\nFARE  F EH1 R\nFARED  F EH1 R D\nFARES  F EH1 R Z\nFARESE  F AA0 - R EY1 - Z IY0\nFARETLOW  F AH0 - R EH1 T - L OW0\nFAREWELL  F EH2 R - W EH1 L\nFAREWELLS  F EH2 R - W EH1 L Z\nFARFEN  F AA1 R - F AH0 N\nFARFETCHED  F AA1 R - F EH1 CH T\nFARGE  F AA1 R JH\nFARGNOLI  F AA0 R G - N OW1 - L IY0\nFARGO  F AA1 R - G OW2\nFARGO'S  F AA1 R - G OW2 Z\nFARHA  F AA1 R - HH AH0\nFARHAT  F AA1 R - HH AE2 T\nFARIA  F AA1 - R IY0 - AH0\nFARIAS  F EH1 - R IY0 - AH0 Z\nFARIBAULT  F AE1 - R AH0 - B AA2 L T\nFARICA  F AA0 - R IY1 - K AH0\nFARIDOUN  F AA1 - R IH0 - D UW0 N\nFARIELLO  F AA0 - R IY0 - EH1 - L OW0\nFARIES  F EH0 - R IY1 Z\nFARINA  F ER0 - IY1 - N AH0\nFARINACCI  F AA0 - R IY0 - N AA1 - CH IY0\nFARINAS  F ER0 - IY1 - N AH0 Z\nFARINELLA  F AA0 - R IY0 - N EH1 - L AH0\nFARING  F EH1 - R IY0 NG\nFARINO  F AA0 - R IY1 - N OW0\nFARIS  F EH1 - R IH0 S\nFARISH  F EH1 - R IH0 SH\nFARISS  F ER0 - IH1 S\nFARKAS  F AA1 R - K AH0 S\nFARLAND  F AA1 R - L AH0 N D\nFARLEE  F AA1 R - L IY2\nFARLER  F AA1 R - L ER0\nFARLESS  F AA1 R - L AH0 S\nFARLEY  F AA1 R - L IY0\nFARLING  F AA1 R - L IH0 NG\nFARLOW  F AA1 R - L OW2\nFARLY  F AA1 R - L IY0\nFARM  F AA1 R M\nFARM'S  F AA1 R M Z\nFARMAN  F AA1 R - M AH0 N\nFARMBOY  F AA1 R M - B OY2\nFARMED  F AA1 R M D\nFARMER  F AA1 R - M ER0\nFARMER'S  F AA1 R - M ER0 Z\nFARMERS  F AA1 R - M ER0 Z\nFARMERS'  F AA1 R - M ER0 Z\nFARMERS'S  F AA1 R - M ER0 - Z IH0 Z\nFARMHAND  F AA1 R M - HH AE2 N D\nFARMHANDS  F AA1 R M - HH AE2 N D Z\nFARMHOUSE  F AA1 R M - HH AW2 S\nFARMHOUSES  F AA1 R M - HH AW2 - S AH0 Z\nFARMHOUSES(2)  F AA1 R M - HH AW2 - S IH0 Z\nFARMING  F AA1 R - M IH0 NG\nFARMING'S  F AA1 R - M IH0 NG Z\nFARMINGDALE  F AA1 R - M IH0 NG - D EY2 L\nFARMINGTON  F AA1 R - M IH0 NG - T AH0 N\nFARMLAND  F AA1 R M - L AE2 N D\nFARMLANDS  F AA1 R M - L AE2 N D Z\nFARMS  F AA1 R M Z\nFARMS'  F AA1 R M Z\nFARMSTEAD  F AA1 R M - S T EH2 D\nFARMWORKER  F AA1 R M - W ER2 - K ER0\nFARMWORKERS  F AA1 R M - W ER2 - K ER0 Z\nFARMYARD  F AA1 R M - Y AA2 R D\nFARNALL  F AA1 R - N AH0 L\nFARNAM  F AA1 R - N AH0 M\nFARNAN  F AA1 R - N AH0 N\nFARNBOROUGH  F AA1 R N - B ER0 - OW0\nFARNELL  F AA1 R - N AH0 L\nFARNER  F AA1 R - N ER0\nFARNES  F AA1 R N Z\nFARNEY  F AA1 R - N IY0\nFARNHAM  F AA1 R - N AH0 M\nFARNLEY  F AA1 R N - L IY0\nFARNSWORTH  F AA1 R N - S W ER0 TH\nFARNUM  F AA1 R - N AH0 M\nFARNWORTH  F AA1 R N - W ER0 TH\nFARO  F EH1 - R OW0\nFAROLD  F AE1 - R OW0 L D\nFARON  F EH1 - R AH0 N\nFARONE  F ER0 - OW1 N\nFAROUK  F AH0 - R UW1 K\nFARQUAR  F AA0 R - K W AA1 R\nFARQUHAR  F AA1 R - K W ER0\nFARQUHARSON  F AA0 R - K AH1 - HH AA0 R - S AH0 N\nFARR  F AA1 R\nFARRA  F AA1 - R AH0\nFARRAGUT  F EH1 - R AH0 - G AH0 T\nFARRAH  F EH1 - R AH0\nFARRAKHAN  F AA1 - R AH0 - K AA2 N\nFARRAKHAN'S  F AA1 - R AH0 - K AA2 N Z\nFARRAN  F AE1 - R AH0 N\nFARRAND  F AE1 - R AH0 N D\nFARRANT  F AA1 - R AH0 N T\nFARRAR  F ER0 - AA1 R\nFARREL  F EH1 - R AH0 L\nFARRELL  F EH1 - R IH0 L\nFARRELL'S  F EH1 - R IH0 L Z\nFARRELLY  F EH1 - R AH0 - L IY0\nFARREN  F EH1 - R AH0 N\nFARRENS  F AE1 - R AH0 N Z\nFARRER  F AA1 - R ER0\nFARREY  F AE1 - R IY0\nFARRIER  F EH1 - R IY0 - ER0\nFARRINGTON  F EH1 - R IH0 NG - T AH0 N\nFARRIOR  F AA0 - R IY1 - ER0\nFARRIS  F EH1 - R IH0 S\nFARRISH  F AE1 - R IH0 SH\nFARRO  F AA1 - R OW0\nFARRON  F EH1 - R AH0 N\nFARROW  F EH1 - R OW2\nFARROW'S  F EH1 - R OW2 Z\nFARROWING  F AE1 - R OW2 - IH0 NG\nFARRUGGIA  F AA0 - R UW1 G - JH AH0\nFARRUGIA  F AA0 - R UW1 - JH AH0\nFARRY  F AE1 - R IY0\nFARSI  F AA1 R - S IY0\nFARSIGHTED  F AA1 R - S AY1 - T AH0 D\nFARSIGHTED(2)  F AA1 R - S AY2 - T IH0 D\nFARSIGHTEDNESS  F AA2 R - S AY1 - T IH0 D - N AH0 S\nFARSON  F AA1 R - S AH0 N\nFARTHER  F AA1 R - DH ER0\nFARTHEST  F AA1 R - DH AH0 S T\nFARTHING  F AA1 R - DH IH0 NG\nFARTHINGALE  F AA1 R - DH IH0 NG - G EY2 L\nFARVE  F AA1 R V\nFARVER  F AA1 R - V ER0\nFARWELL  F AA1 R - W EH2 L\nFARWEST  F AA2 R - W EH1 S T\nFASANO  F AA0 - S AA1 - N OW0\nFASBENDER  F AE1 S - B EH2 N - D ER0\nFASCELL  F AH0 - S EH1 L\nFASCHING  F AE1 - SH IH0 NG\nFASCIANO  F AA0 - S CH IY0 - AA1 - N OW0\nFASCINATE  F AE1 - S AH0 - N EY2 T\nFASCINATED  F AE1 - S AH0 - N EY2 - T AH0 D\nFASCINATED(2)  F AE1 - S AH0 - N EY2 - T IH0 D\nFASCINATES  F AE1 - S AH0 - N EY2 T S\nFASCINATING  F AE1 - S AH0 - N EY2 - T IH0 NG\nFASCINATION  F AE2 - S AH0 - N EY1 - SH AH0 N\nFASCISM  F AE1 - SH IH2 - Z AH0 M\nFASCIST  F AE1 - SH AH0 S T\nFASCISTS  F AE1 - SH AH0 S T S\nFASCISTS(2)  F AE1 - SH AH0 S S\nFASCISTS(3)  F AE1 - SH AH0 S\nFASHION  F AE1 - SH AH0 N\nFASHION'S  F AE1 - SH AH0 N Z\nFASHIONABLE  F AE1 - SH AH0 N - AH0 - B AH0 L\nFASHIONABLE(2)  F AE1 SH - N AH0 - B AH0 L\nFASHIONABLY  F AE1 - SH AH0 N - AH0 - B L IY0\nFASHIONED  F AE1 - SH AH0 N D\nFASHIONING  F AE1 - SH AH0 N - IH0 NG\nFASHIONS  F AE1 - SH AH0 N Z\nFASICK  F AE1 - S IH0 K\nFASIG  F AE1 - S IH0 G\nFASNACHT  F AE1 S - N AH0 K T\nFASO  F AA1 - S OW0\nFASON  F AE1 - S AH0 N\nFASONE  F AA0 - S OW1 - N IY0\nFASS  F AE1 S\nFASSBENDER  F AE1 S - B EH2 N - D ER0\nFASSETT  F AE1 - S IH0 T\nFASSLER  F AE1 S - L ER0\nFASSNACHT  F AE1 S - N AH0 K T\nFASSULO  F AH0 - S UW1 - L OW0\nFAST  F AE1 S T\nFASTBALL  F AE1 S T - B AO2 L\nFASTED  F AE1 - S T IH0 D\nFASTEN  F AE1 - S AH0 N\nFASTENED  F AE1 - S AH0 N D\nFASTENER  F AE1 - S AH0 - N ER0\nFASTENER(2)  F AE1 S - N ER0\nFASTENERS  F AE1 - S AH0 - N ER0 Z\nFASTENERS(2)  F AE1 S - N ER0 Z\nFASTENING  F AE1 - S AH0 - N IH0 NG\nFASTENING(2)  F AE1 S - N IH0 NG\nFASTENINGS  F AE1 - S AH0 - N IH0 NG Z\nFASTENINGS(2)  F AE1 S - N IH0 NG Z\nFASTER  F AE1 - S T ER0\nFASTEST  F AE1 - S T AH0 S T\nFASTFOOD  F AE1 S T - F UW2 D\nFASTIDIOUS  F AE0 - S T IH1 - D IY0 - AH0 S\nFASTING  F AE1 - S T IH0 NG\nFASTNESS  F AE1 S T - N AH0 S\nFASTS  F AE1 S T S\nFASULO  F AH0 - S UW1 - L OW0\nFAT  F AE1 T\nFATA  F AA1 - T AH0\nFATAH  F AA1 - T AH0\nFATAH(2)  F AH0 - T AA1\nFATAL  F EY1 - T AH0 L\nFATALISM  F EY1 - T AH0 - L IH2 - Z AH0 M\nFATALIST  F EY1 - T AH0 - L IH0 S T\nFATALISTIC  F EY0 - T AH0 - L IH1 - S T IH0 K\nFATALISTS  F EY1 - T AH0 - L IH0 S T S\nFATALISTS(2)  F EY1 - T AH0 - L IH0 S S\nFATALISTS(3)  F EY1 - T AH0 - L IH0 S\nFATALITIES  F AH0 - T AE1 - L AH0 - T IY0 Z\nFATALITIES(2)  F AH0 - T AE1 - L IH0 - T IY0 Z\nFATALITY  F AH0 - T AE1 - L AH0 - T IY0\nFATALITY(2)  F AH0 - T AE1 - L IH0 - T IY0\nFATALLY  F EY1 - T AH0 - L IY0\nFATE  F EY1 T\nFATED  F EY1 - T IH0 D\nFATEFUL  F EY1 T - F AH0 L\nFATES  F EY1 T S\nFATH  F AE1 TH\nFATHER  F AA1 - DH ER0\nFATHER'S  F AA1 - DH ER0 Z\nFATHERED  F AA1 - DH ER0 D\nFATHEREE  F AE0 - TH ER0 - IY1\nFATHERHOOD  F AA1 - DH ER0 - HH UH2 D\nFATHERING  F AA1 - DH ER0 - IH0 NG\nFATHERLAND  F AA1 - DH ER0 - L AE2 N D\nFATHERLESS  F AA1 - DH ER0 - L AH0 S\nFATHERLY  F AA1 - DH ER0 - L IY0\nFATHERS  F AA1 - DH ER0 Z\nFATHERS'  F AE1 - TH ER0 Z\nFATHI  F AE1 - TH IY0\nFATHOM  F AE1 - DH AH0 M\nFATHOMABLE  F AE1 - DH AH0 - M AH0 - B AH0 L\nFATHOMS  F AE1 - DH AH0 M Z\nFATIGUE  F AH0 - T IY1 G\nFATIGUED  F AH0 - T IY1 G D\nFATIGUES  F AH0 - T IY1 G Z\nFATIGUING  F AH0 - T IY1 - G IH0 NG\nFATIMA  F AE1 - TH IH0 - M AH0\nFATIMA(2)  F AE1 - T IH0 - M AH0\nFATIMAH  F AE1 - TH IH0 - M AH0\nFATS  F AE1 T S\nFATTEN  F AE1 - T AH0 N\nFATTENED  F AE1 - T AH0 N D\nFATTENING  F AE1 - T AH0 N - IH0 NG\nFATTENING(2)  F AE1 T - N IH0 NG\nFATTER  F AE1 - T ER0\nFATTEST  F AE1 - T AH0 S T\nFATTIES  F AE1 - T IY0 Z\nFATTY  F AE1 - T IY0\nFATULA  F AA0 - T UW1 - L AH0\nFATUOUS  F AE1 - CH AH0 W - AH0 S\nFATWA  F AA1 T - W AA0\nFATZINGER  F EY1 T - Z IH0 - NG ER0\nFAUBEL  F AW1 - B AH0 L\nFAUBER  F AW1 - B ER0\nFAUBERT  F AW1 - B ER0 T\nFAUBION  F AW1 - B IY0 - AH0 N\nFAUBLE  F AO1 - B AH0 L\nFAUBUS  F AO1 - B AH0 S\nFAUCET  F AO1 - S AH0 T\nFAUCETS  F AO1 - S AH0 T S\nFAUCETT  F AO1 - S IH0 T\nFAUCETTE  F OW0 - S EH1 T\nFAUCHER  F AW1 - K ER0\nFAUCHEUX  F OW0 - SH OW1\nFAUCI  F AO1 - S IY0\nFAUGHN  F AO1 N\nFAUGHNAN  F AO1 - N AH0 N\nFAUGHT  F AO1 T\nFAUGHT'S  F AO1 T S\nFAUL  F AO1 L\nFAULCON  F AO1 L - K AH0 N\nFAULCONER  F AO1 L - K AH0 - N ER0\nFAULDING  F AO1 L - D IH0 NG\nFAULDS  F AO1 L D Z\nFAULHABER  F AW1 L - HH AH0 - B ER0\nFAULK  F AO1 K\nFAULKENBERRY  F AO1 L - K AH0 N - B EH2 - R IY0\nFAULKNER  F AO1 K - N ER0\nFAULKNER'S  F AO1 K - N ER0 Z\nFAULKS  F AO1 K S\nFAULL  F AO1 L\nFAULSTICH  F AO1 L - S T IH0 CH\nFAULT  F AO1 L T\nFAULTED  F AO1 L - T IH0 D\nFAULTING  F AO1 L - T IH0 NG\nFAULTS  F AO1 L T S\nFAULTY  F AO1 L - T IY0\nFAUNA  F AO1 - N AH0\nFAUNAL  F AA1 - N AH0 L\nFAUNAL(2)  F AO1 - N AH0 L\nFAUNCE  F AO1 N S\nFAUNTLEROY  F AO1 N T - L ER0 - OY2\nFAUNTROY  F AO1 N - T R OY2\nFAUPEL  F OW0 - P EH1 L\nFAURE  F AO1 R\nFAUROT  F AO0 - R OW1\nFAUROUX  F AO0 - R UW1\nFAUS  F AO1 Z\nFAUSER  F AW1 - S ER0\nFAUSETT  F AO1 - S IH0 T\nFAUSEY  F AO1 - S IY0\nFAUSNAUGH  F AO1 S - N AO0\nFAUSS  F AO1 S\nFAUST  F AW1 S T\nFAUSTA  F AO1 - S T AH0\nFAUSTIAN  F AO1 S - CH AH0 N\nFAUSTINA  F AO2 - S T IY1 - N AH0\nFAUSTINE  F AW1 - S T IY0 N\nFAUSTINO  F AO2 - S T IY1 - N OW0\nFAUSTO  F AO1 - S T OW0\nFAUSTUS  F AO1 - S T AH0 S\nFAUTEUX  F OW0 - T OW1\nFAUTH  F AO1 TH\nFAUVER  F AW1 - V ER0\nFAUX  F AO1 K S\nFAVA  F AA1 - V AH0\nFAVALE  F AA0 - V AA1 - L IY0\nFAVALORO  F AA0 - V AA0 - L AO1 - R OW0\nFAVARO  F AA0 - V AA1 - R OW0\nFAVATA  F AA0 - V AA1 - T AH0\nFAVAZZA  F AA0 - V AA1 T - S AH0\nFAVELA  F AA0 - V EH1 - L AH0\nFAVER  F EY1 - V ER0\nFAVERO  F AA0 - V EH1 - R OW0\nFAVIA  F AA1 - V IY0 - AH0\nFAVINGER  F EY1 - V IH0 - NG ER0\nFAVOR  F EY1 - V ER0\nFAVORABILITY  F AE2 - V ER0 - AH0 - B IH1 - L IH0 - T IY0\nFAVORABLE  F EY1 - V ER0 - AH0 - B AH0 L\nFAVORABLE(2)  F EY1 - V R AH0 - B AH0 L\nFAVORABLY  F EY1 - V ER0 - AH0 - B L IY0\nFAVORABLY(2)  F EY1 - V R AH0 - B L IY0\nFAVORED  F EY1 - V ER0 D\nFAVORING  F EY1 - V ER0 - IH0 NG\nFAVORITE  F EY1 - V ER0 - IH0 T\nFAVORITE(2)  F EY1 - V R AH0 T\nFAVORITES  F EY1 - V ER0 - IH0 T S\nFAVORITES(2)  F EY1 - V R AH0 T S\nFAVORITISM  F EY1 - V ER0 - IH0 - T IH2 - Z AH0 M\nFAVORS  F EY1 - V ER0 Z\nFAVRE  F EY1 - V ER0\nFAVREAU  F AH0 - V R OW1\nFAVRO  F AE1 - V R OW0\nFAW  F AO1\nFAWBUSH  F AO1 - B UH0 SH\nFAWCETT  F AO1 - S IH0 T\nFAWKES  F AO1 K S\nFAWLEY  F AO1 - L IY0\nFAWN  F AO1 N\nFAWNING  F AO1 - N IH0 NG\nFAWVER  F AO1 - V ER0\nFAX  F AE1 K S\nFAXED  F AE1 K S T\nFAXER  F AE1 K - S ER0\nFAXES  F AE1 K - S IH0 Z\nFAXING  F AE1 K - S IH0 NG\nFAXON  F AE1 K - S AH0 N\nFAY  F EY1\nFAY'S  F EY1 Z\nFAYANJUU  F AY1 - AH0 N - JH UW0\nFAYANNE  F EY1 - IH0 N\nFAYANNE(2)  F EY2 - AE1 N\nFAYARD  F AH0 - Y AA1 R D\nFAYE  F EY1\nFAYED  F EY1 D\nFAYETTE  F EY1 - EH1 T\nFAYETTEVILLE  F EY1 - EH2 T - V IH2 L\nFAYEZ  F EY1 - EH0 Z\nFAYME  F EY1 M\nFAYMONVILLE  F EY1 - M AH0 N - V IH2 L\nFAYNE  F EY1 N\nFAYROUZ  F EY1 - R UW2 Z\nFAZ  F AE1 Z\nFAZE  F EY1 Z\nFAZED  F EY1 Z D\nFAZEKAS  F AE1 - Z IH0 - K AH0 Z\nFAZENBAKER  F EY1 - Z AH0 N - B EY2 - K ER0\nFAZIO  F EY1 - Z IY0 - OW0\nFAZIO(2)  F AA1 - Z IY0 - OW0\nFAZZINO  F AA0 T - S IY1 - N OW0\nFAZZIO  F AE1 - Z IY0 - OW0\nFE  F EY1\nFE'S  F EY1 Z\nFEAGAN  F EY1 - G AH0 N\nFEAGANS  F IY1 - G AH0 N Z\nFEAGIN  F IY1 - JH IH0 N\nFEAGINS  F IY1 - JH IH0 N Z\nFEAGLE  F IY1 - G AH0 L\nFEALTY  F IY1 - AH0 L - T IY0\nFEALTY(2)  F IY1 L - T IY0\nFEAR  F IH1 R\nFEARED  F IH1 R D\nFEARFUL  F IH1 R - F AH0 L\nFEARING  F IH1 - R IH0 NG\nFEARLESS  F IH1 R - L AH0 S\nFEARN  F ER1 N\nFEARNOW  F ER1 - N OW0\nFEARON  F IH1 - R AH0 N\nFEARS  F IH1 R Z\nFEARSOME  F IH1 R - S AH0 M\nFEASEL  F IY1 - Z AH0 L\nFEASIBILITY  F IY2 - Z AH0 - B IH1 - L AH0 - T IY0\nFEASIBLE  F IY1 - Z AH0 - B AH0 L\nFEASIBLY  F IY1 - Z AH0 - B L IY0\nFEAST  F IY1 S T\nFEASTED  F IY1 - S T IH0 D\nFEASTER  F IY1 - S T ER0\nFEASTING  F IY1 - S T IH0 NG\nFEASTS  F IY1 S T S\nFEASTS(2)  F IY1 S S\nFEASTS(3)  F IY1 S\nFEAT  F IY1 T\nFEATHER  F EH1 - DH ER0\nFEATHERBED  F EH1 - DH ER0 - B EH2 D\nFEATHERBEDDING  F EH1 - DH ER0 - B EH2 - D IH0 NG\nFEATHERED  F EH1 - DH ER0 D\nFEATHERING  F EH1 - DH ER0 - IH0 NG\nFEATHERING(2)  F EH1 - DH R IH0 NG\nFEATHERLESS  F EH1 - DH ER0 - L AH0 S\nFEATHERLY  F EH1 - DH ER0 - L IY0\nFEATHERS  F EH1 - DH ER0 Z\nFEATHERSTON  F EH1 - DH ER0 - S T AH0 N\nFEATHERSTONE  F EH1 - DH ER0 - S T OW2 N\nFEATHERWEIGHT  F EH1 - DH ER0 - W EY2 T\nFEATHERY  F EH1 - DH ER0 - IY0\nFEATHERY(2)  F EH1 - DH R IY2\nFEATS  F IY1 T S\nFEATURE  F IY1 - CH ER0\nFEATURED  F IY1 - CH ER0 D\nFEATURELESS  F IY1 - CH ER0 - L AH0 S\nFEATURES  F IY1 - CH ER0 Z\nFEATURING  F IY1 - CH ER0 - IH0 NG\nFEAZEL  F IY1 - Z AH0 L\nFEAZELL  F IY1 - Z AH0 L\nFEB  F EH1 - B Y AH0 W - EH2 - R IY0\nFEBLES  F EH1 - B AH0 L Z\nFEBRES  F EH1 - B R AH0 S\nFEBRUARY  F EH1 - B Y AH0 W - EH2 - R IY0\nFEBRUARY'S  F EH1 - B Y AH0 W - EH2 - R IY0 Z\nFEBRUARY'S(2)  F EH1 - B AH0 - W EH2 - R IY0 Z\nFEBRUARY'S(3)  F EH1 - B R UW0 W - EH2 - R IY0 Z\nFEBRUARY'S(4)  F EH1 - B UW0 - W EH2 - R IY0 Z\nFEBRUARY'S(5)  F EH1 - B Y UW0 - W EH2 - R IY0 Z\nFEBRUARY(2)  F EH1 - B AH0 - W EH2 - R IY0\nFEBRUARY(3)  F EH1 - B R UW0 W - EH2 - R IY0\nFEBRUARY(4)  F EH1 - B UW0 - W EH2 - R IY0\nFEBRUARY(5)  F EH1 - B Y UW0 - W EH2 - R IY0\nFECAL  F IY1 - K AH0 L\nFECES  F IY1 - S IY2 Z\nFECHER  F EH1 - K ER0\nFECHNER  F EH1 K - N ER0\nFECHT  F EH1 K T\nFECHTER  F EH1 K - T ER0\nFECK  F EH1 K\nFECKLESS  F EH1 K - L IH0 S\nFECTEAU  F IH0 K - T OW1\nFED  F EH1 D\nFED'S  F EH1 D Z\nFEDAK  F EH1 - D AH0 K\nFEDDER  F EH1 - D ER0\nFEDDERS  F EH1 - D ER0 Z\nFEDDERS'S  F EH1 - D ER0 - Z IH0 Z\nFEDDERSEN  F EH1 - D ER0 - S AH0 N\nFEDE  F IY1 D\nFEDECCREDITO  F EH0 - D EH2 - K R EH0 - D IY1 - T OW0\nFEDELE  F EH1 - D AH0 L\nFEDELI  F EH0 - D EH1 - L IY0\nFEDER  F EH1 - D ER0\nFEDERAL  F EH1 - D ER0 - AH0 L\nFEDERAL'S  F EH1 - D ER0 - AH0 L Z\nFEDERAL'S(2)  F EH1 - D R AH0 L Z\nFEDERAL(2)  F EH1 - D R AH0 L\nFEDERALISM  F EH1 - D ER0 - AH0 - L IH2 - Z AH0 M\nFEDERALISM(2)  F EH1 - D R AH0 - L IH2 - Z AH0 M\nFEDERALIST  F EH1 - D ER0 - AH0 - L IH0 S T\nFEDERALIST(2)  F EH1 - D R AH0 - L AH0 S T\nFEDERALISTS  F EH1 - D ER0 - AH0 - L IH0 S T S\nFEDERALISTS(2)  F EH1 - D ER0 - AH0 - L IH0 S S\nFEDERALISTS(3)  F EH1 - D R AH0 - L IH0 S T S\nFEDERALISTS(4)  F EH1 - D R AH0 - L IH0 S S\nFEDERALISTS(5)  F EH1 - D R AH0 - L IH0 S\nFEDERALIZE  F EH1 - D ER0 - AH0 - L AY2 Z\nFEDERALIZE(2)  F EH1 - D R AH0 - L AY2 Z\nFEDERALIZED  F EH1 - D ER0 - AH0 - L AY2 Z D\nFEDERALIZED(2)  F EH1 - D R AH0 - L AY2 Z D\nFEDERALIZING  F EH1 - D ER0 - AH0 - L AY2 - Z IH0 NG\nFEDERALIZING(2)  F EH1 - D R AH0 - L AY2 - Z IH0 NG\nFEDERALLY  F EH1 - D ER0 - AH0 - L IY0\nFEDERALLY(2)  F EH1 - D R AH0 - L IY0\nFEDERALS  F EH1 - D ER0 - AH0 L Z\nFEDERALS(2)  F EH1 - D R AH0 L Z\nFEDERATE  F EH1 - D ER0 - EY2 T\nFEDERATED  F EH1 - D ER0 - EY2 - T IH0 D\nFEDERATED'S  F EH1 - D ER0 - EY2 - T IH0 D Z\nFEDERATION  F EH2 - D ER0 - EY1 - SH AH0 N\nFEDERATION'S  F EH2 - D ER0 - EY1 - SH AH0 N Z\nFEDERATIONS  F EH2 - D ER0 - EY1 - SH AH0 N Z\nFEDERATIVE  F EH1 - D ER0 - AH0 - T IH0 V\nFEDERATIVE(2)  F EH1 - D R AH0 - T IH0 V\nFEDERBUSH  F EH1 - D ER0 - B UH2 SH\nFEDERER  F EH1 - D ER0 - ER0\nFEDERICA  F EH0 - D ER0 - IY1 - K AH0\nFEDERICI  F EH0 - D ER0 - IY1 - CH IY0\nFEDERICO  F EH0 - D ER0 - IY1 - K OW0\nFEDERLE  F EH1 - D ER0 - AH0 L\nFEDERMAN  F IY1 - D ER0 - M AH0 N\nFEDEROFF  F EH1 - D ER0 - AO2 F\nFEDEROV  F EH1 - D ER0 - AO2 V\nFEDERSPIEL  F EH1 - D ER0 - S P IY0 L\nFEDEWA  F IH0 - D UW1 - AH0\nFEDEX  F EH1 - D EH1 K S\nFEDIAY  F IY1 - D IY0 - EY2\nFEDLER  F EH1 D - L ER0\nFEDOR  F EH1 - D ER0\nFEDORA  F IH0 - D AO1 - R AH0\nFEDORCHAK  F EH1 - D ER0 - K AH0 K\nFEDORKO  F IH0 - D AO1 R - K OW0\nFEDRICK  F EH1 - D R IH0 K\nFEDS  F EH1 D Z\nFEE  F IY1\nFEEBACK  F IY1 - B AE2 K\nFEEBIS  F IY1 - B IH0 S\nFEEBLE  F IY1 - B AH0 L\nFEEBLY  F IY1 - B L IY0\nFEED  F IY1 D\nFEEDBACK  F IY1 D - B AE2 K\nFEEDER  F IY1 - D ER0\nFEEDERS  F IY1 - D ER0 Z\nFEEDING  F IY1 - D IH0 NG\nFEEDINGS  F IY1 - D IH0 NG Z\nFEEDLOT  F IY1 D - L AA2 T\nFEEDLOTS  F IY1 D - L AA2 T S\nFEEDS  F IY1 D Z\nFEEDSTOCK  F IY1 D - S T AA2 K\nFEEDSTOCKS  F IY1 D - S T AA2 K S\nFEEHAN  F IY1 - AH0 N\nFEEL  F IY1 L\nFEELER  F IY1 - L ER0\nFEELERS  F IY1 - L ER0 Z\nFEELEY  F IY1 - L IY0\nFEELIN'  F IY1 - L IH0 N\nFEELING  F IY1 - L IH0 NG\nFEELINGS  F IY1 - L IH0 NG Z\nFEELS  F IY1 L Z\nFEELY  F IY1 - L IY0\nFEEMSTER  F IY1 M - S T ER0\nFEENEY  F IY1 - N IY0\nFEENSTRA  F IY1 N - S T R AH0\nFEENY  F IY1 - N IY0\nFEES  F IY1 Z\nFEESE  F IY1 Z\nFEESER  F IY1 - Z ER0\nFEET  F IY1 T\nFEEZOR  F IY1 - Z ER0\nFEFFER  F EH1 - F ER0\nFEGAN  F EH1 - G AH0 N\nFEGER  F IY1 - G ER0\nFEGLEY  F EH1 G - L IY0\nFEHER  F EH1 - HH ER0\nFEHL  F EH1 L\nFEHLING  F EH1 - L IH0 NG\nFEHLMAN  F EH1 L - M AH0 N\nFEHN  F EH1 N\nFEHNEL  F EH1 - N AH0 L\nFEHR  F EH1 R\nFEHRENBACH  F EH1 - R IH0 N - B AA0 K\nFEHRENBACHER  F EH1 - R IH0 N - B AA0 - K ER0\nFEHRING  F EH1 - R IH0 NG\nFEHRINGER  F EH1 - R IH0 - NG ER0\nFEHRMAN  F EH1 R - M AH0 N\nFEICK  F IY1 K\nFEICKERT  F AY1 - K ER0 T\nFEIG  F IY1 G\nFEIGE  F IY1 JH\nFEIGEL  F AY1 - G AH0 L\nFEIGEN  F AY1 - G AH0 N\nFEIGENBAUM  F AY1 - G AH0 N - B AW2 M\nFEIGER  F AY1 - G ER0\nFEIGHAN  F EY1 - G AH0 N\nFEIGHNER  F EY1 - N ER0\nFEIGHT  F EY1 T\nFEIGIN  F AY1 - G IH0 N\nFEIGN  F EY1 N\nFEIGNED  F EY1 N D\nFEIGNING  F EY1 - N IH0 NG\nFEIL  F IY1 L\nFEILD  F IY1 L D\nFEILER  F AY1 - L ER0\nFEIMSTER  F AY1 M - S T ER0\nFEIN  F AY1 N\nFEIN'S  F AY1 N Z\nFEIN'S(2)  F EY1 N Z\nFEIN(2)  F EY1 N\nFEINAUER  F AY1 - N AW0 - ER0\nFEINBERG  F AY1 N - B ER0 G\nFEINER  F AY1 - N ER0\nFEINGOLD  F AY1 NG - G OW0 L D\nFEINMAN  F AY1 N - M AH0 N\nFEINSTEIN  F AY1 N - S T AY2 N\nFEINSTEIN'S  F AY1 N - S T AY2 N Z\nFEINSTEIN'S(2)  F AY1 N - S T IY2 N Z\nFEINSTEIN(2)  F AY1 N - S T IY2 N\nFEINT  F EY1 N T\nFEIS  F AY1 S\nFEIST  F AY1 S T\nFEISTER  F AY1 - S T ER0\nFEISTY  F AY1 - S T IY0\nFEIT  F AY1 T\nFEITH  F AY1 TH\nFEITH'S  F AY1 TH S\nFEITZ  F AY1 T S\nFEJES  F IH0 - ZH IY1 Z\nFEKETE  F EH1 - K IY0 T\nFEL  F EH1 L\nFELA  F EH1 - L AH0\nFELAN  F EH1 - L AH0 N\nFELBATOL  F EH1 L - B AH0 - T AA0 L\nFELBER  F EH1 L - B ER0\nFELCH  F EH1 L CH\nFELD  F EH1 L D\nFELDA  F EH1 L - D AH0\nFELDBERG  F EH1 L D - B ER0 G\nFELDBLUM  F EH1 L D - B L UW2 M\nFELDBLUM(2)  F EH1 L D - B L AH0 M\nFELDE  F EH1 L D\nFELDENE  F EH0 L - D IY1 N\nFELDER  F EH1 L - D ER0\nFELDERMAN  F EH1 L - D ER0 - M AH0 N\nFELDHAUS  F EH1 L D - HH AW2 S\nFELDKAMP  F EH1 L D - K AE2 M P\nFELDMAN  F EH1 L D - M AH0 N\nFELDMAN'S  F EH1 L D - M AH0 N Z\nFELDMANN  F EH1 L D - M AH0 N\nFELDMEIER  F EH1 L D - M AY0 - ER0\nFELDMUEHLE  F EH1 L D - M Y UW2 - L AH0\nFELDNER  F EH1 L D - N ER0\nFELDPAUSCH  F EH1 L D - P AW2 SH\nFELDSPAR  F EH1 L D - S P AA2 R\nFELDSPARS  F EH1 L D - S P AA2 R Z\nFELDSTEIN  F EH1 L D - S T AY0 N\nFELDSTEIN'S  F EH1 L D - S T IY2 N Z\nFELDSTEIN'S(2)  F EH1 L D - S T AY2 N Z\nFELDSTEIN(2)  F EH1 L D - S T IY0 N\nFELDT  F EH1 L T\nFELGENHAUER  F EH1 L - G IH0 N - HH AW0 - ER0\nFELGER  F EH1 L - G ER0\nFELICE  F AH0 - L IY1 S\nFELICETTI  F EH0 - L IY0 - CH EH1 - T IY0\nFELICIA  F AH0 - L IY1 - SH AH0\nFELICIA'S  F AH0 - L IY1 - SH AH0 Z\nFELICIANO  F AH0 - L IY0 - S IY0 - AA1 - N OW0\nFELICITE  F EH1 - L IH0 - S AY2 T\nFELICITE(2)  F EH0 - L IH1 - S AH0 - T IY0\nFELICITOUS  F IH0 - L IH1 - S AH0 - T AH0 S\nFELICITY  F IH0 - L IH1 - S AH0 - T IY0\nFELINE  F IY1 - L AY2 N\nFELINES  F IY1 - L AY2 N Z\nFELIPE  F AH0 - L IY1 P\nFELIS  F EH1 - L IH0 S\nFELIX  F IY1 - L IH0 K S\nFELIZ  F EH1 - L IH0 Z\nFELKEL  F EH1 L - K AH0 L\nFELKER  F EH1 L - K ER0\nFELKER'S  F EH1 L - K ER0 Z\nFELKINS  F EH1 L - K IH0 N Z\nFELKNER  F EH1 L K - N ER0\nFELL  F EH1 L\nFELLA  F EH1 - L AH0\nFELLAND  F EH1 - L AH0 N D\nFELLAS  F EH1 - L AH0 S\nFELLED  F EH1 L D\nFELLEISEN  F EH2 - L AY1 - S AH0 N\nFELLENZ  F EH1 - L IH0 N S\nFELLER  F EH1 - L ER0\nFELLERS  F EH1 - L ER0 Z\nFELLHEIMER  F EH1 L - HH AY2 - M ER0\nFELLIN  F EH1 - L IH0 N\nFELLING  F EH1 - L IH0 NG\nFELLINGER  F EH1 - L IH0 - NG ER0\nFELLINI  F AH0 - L IY1 - N IY0\nFELLMAN  F EH1 L - M AH0 N\nFELLMETH  F EH1 L - M AH0 TH\nFELLNER  F EH1 L - N ER0\nFELLOW  F EH1 - L OW0\nFELLOW'S  F EH1 - L OW0 Z\nFELLOWES  F EH1 - L OW2 Z\nFELLOWS  F EH1 - L OW0 Z\nFELLOWSHIP  F EH1 - L OW0 - SH IH2 P\nFELLOWSHIPS  F EH1 - L OW0 - SH IH2 P S\nFELLS  F EH1 L Z\nFELLSWAY  F EH1 L Z - W EY2\nFELMAN  F EH1 L - M AH0 N\nFELMLEE  F EH1 L M - L IY0\nFELON  F EH1 - L AH0 N\nFELONIES  F EH1 - L AH0 - N IY0 Z\nFELONIOUS  F EH0 - L OW1 - N IY0 - AH0 S\nFELONS  F EH1 - L AH0 N Z\nFELONY  F EH1 - L AH0 - N IY0\nFELPS  F EH1 L P S\nFELRICE  F EH1 L - R AY2 S\nFELS  F EH1 L Z\nFELSENTHAL  F EH1 L - Z AH0 N - TH AA2 L\nFELSKE  F EH1 L S K\nFELT  F EH1 L T\nFELTEN  F EH1 L - T AH0 N\nFELTER  F EH1 L - T ER0\nFELTES  F EH1 L T S\nFELTLER  F EH1 L T - L ER0\nFELTMAN  F EH1 L T - M AH0 N\nFELTNER  F EH1 L T - N ER0\nFELTON  F EH1 L - T AH0 N\nFELTRAX  F EH1 L - T R AE0 K S\nFELTS  F EH1 L T S\nFELTSMAN  F EH1 L T S - M AH0 N\nFELTUS  F EH1 L - T AH0 S\nFELTY  F EH1 L - T IY0\nFELTZ  F EH1 L T S\nFELUCCA  F IH0 - L AH1 - K AH0\nFELVER  F EH1 L - V ER0\nFEMALE  F IY1 - M EY2 L\nFEMALE'S  F IY1 - M EY2 L Z\nFEMALES  F IY1 - M EY2 L Z\nFEMIA  F IY1 - M IY0 - AH0\nFEMINA  F EH1 - M IH0 - N AH0\nFEMININE  F EH1 - M AH0 - N AH0 N\nFEMININITY  F EH2 - M AH0 - N IH1 - N AH0 - T IY0\nFEMINISM  F EH1 - M IH0 - N IH2 - Z AH0 M\nFEMINIST  F EH1 - M AH0 - N AH0 S T\nFEMINISTS  F EH1 - M AH0 - N AH0 S T S\nFEMINISTS(2)  F EH1 - M AH0 - N AH0 S S\nFEMINISTS(3)  F EH1 - M AH0 - N AH0 S\nFEMME  F EH1 M\nFEMORAL  F EH1 - M ER0 - AH0 L\nFEMRITE  F EH1 M - R AY2 T\nFEMSA  F EH1 M - S AH0\nFEMUR  F IY1 - M ER0\nFENCE  F EH1 N S\nFENCED  F EH1 N S T\nFENCELESS  F EH1 N S - L AH0 S\nFENCES  F EH1 N - S AH0 Z\nFENCES(2)  F EH1 N - S IH0 Z\nFENCING  F EH1 N - S IH0 NG\nFENCL  F EH1 NG - K AH0 L\nFEND  F EH1 N D\nFENDED  F EH1 N - D IH0 D\nFENDER  F EH1 N - D ER0\nFENDERS  F EH1 N - D ER0 Z\nFENDERSON  F EH1 N - D ER0 - S AH0 N\nFENDI  F EH1 N - D IY0\nFENDING  F EH1 N - D IH0 NG\nFENDLER  F EH1 N D - L ER0\nFENDLEY  F EH1 N D - L IY0\nFENDRICK  F EH1 N - D R IH0 K\nFENDS  F EH1 N D Z\nFENDT  F EH1 N T\nFENECH  F EH1 - N IH0 K\nFENELLA  F EH0 - N EH1 - L AH0\nFENELON  F EH1 - N IH0 - L AA2 N\nFENG  F EH1 NG\nFENGER  F EH1 - NG ER0\nFENIAN  F IY1 - N IY0 - AH0 N\nFENICHELL  F EH1 - N IH0 - CH AH0 L\nFENIMORE  F EH1 - N IH0 - M AO2 R\nFENJVES  F EH0 N - HH EH1 - V EH0 Z\nFENJVES(2)  F EH1 N - V EH0 Z\nFENLEY  F EH1 N - L IY0\nFENLON  F EH1 N - L AH0 N\nFENN  F EH1 N\nFENNEL  F EH1 - N AH0 L\nFENNELL  F EH1 - N AH0 L\nFENNELLY  F EH1 - N AH0 - L IY0\nFENNEMA  F EH1 - N IH0 - M AH0\nFENNER  F EH1 - N ER0\nFENNESSEY  F EH1 - N IH0 - S IY0\nFENNESSY  F EH1 - N IH0 - S IY0\nFENNEWALD  F EH1 - N IH0 - W AO0 L D\nFENNEY  F EH1 - N IY0\nFENNIMORE  F EH1 - N IH0 - M AO2 R\nFENNO  F EH1 - N OW0\nFENOGLIO  F EH0 - N OW1 - G L IY0 - OW0\nFENSKE  F EH1 N S K\nFENSTER  F EH1 N - S T ER0\nFENSTERMACHER  F EH1 N - S T ER0 - M AH0 - K ER0\nFENSTERMAKER  F EH1 N - S T ER0 - M EY2 - K ER0\nFENSTERSTOCK  F EH1 N - S T ER0 - S T AA2 K\nFENT  F EH1 N T\nFENTER  F EH1 N - T ER0\nFENTON  F EH1 N - T AH0 N\nFENTRESS  F EH1 N - T R IH0 S\nFENUGREEK  F EH1 - N UW0 - G R IY2 K\nFENWAY  F EH1 N - W EY2\nFENWICK  F EH1 N - W IH2 K\nFENWOOD  F EH1 N - W UH2 D\nFENYVESSY  F EH1 - N IH0 - V EH2 - S IY0\nFENZEL  F EH1 N - Z AH0 L\nFEODOR  F IY1 - AH0 - D ER0\nFEODORA  F IY0 - AH0 - D AO1 - R AH0\nFEOLA  F IY0 - AA1 - L AH0\nFER  F ER1\nFER(2)  F EH1 R\nFERA  F EH1 - R AH0\nFERAL  F EH1 - R AH0 L\nFERARRO  F EH0 - R AA1 - R OW0\nFERBER  F ER1 - B ER0\nFERCH  F ER1 K\nFERD  F ER1 D\nFERDERER  F ER1 - D ER0 - ER0\nFERDIE  F ER1 - D IY0\nFERDIG  F ER1 - D IH0 G\nFERDINAND  F ER1 - D IH0 - N AE2 N D\nFERDINAND(2)  F ER1 - D IH0 - N AE2 N\nFERDINANDA  F ER0 - D IY0 - N AA1 N - D AH0\nFERDLOW  F EH1 R - D L OW0\nFERDON  F EH0 R - D AO1 N\nFEREBEE  F EH1 - R IH0 - B IY0\nFERENC  F ER0 - EH1 N S\nFERENCE  F IH1 - R AH0 N S\nFERENCZ  F EH1 - R IH0 N CH\nFERETLOW  F EH1 - R AH0 - T L OW0\nFERETLOW(2)  F EH1 R - T L OW0\nFERG  F ER1 G\nFERGASON  F ER1 - G AH0 - S AH0 N\nFERGER  F ER1 - G ER0\nFERGERSON  F ER1 - G ER0 - S AH0 N\nFERGESON  F ER1 - G AH0 - S AH0 N\nFERGIE  F ER1 - G IY0\nFERGUS  F ER1 - G AH0 S\nFERGUSON  F ER1 - G AH0 - S AH0 N\nFERGUSON'S  F ER1 - G AH0 - S AH0 N Z\nFERGUSSON  F ER1 - G AH0 - S AH0 N\nFERIA  F EH1 - R IY0 - AH0\nFERKO  F ER1 - K OW0\nFERLAND  F ER1 - L AH0 N D\nFERM  F ER1 M\nFERMAN  F ER1 - M AH0 N\nFERMENT  F ER0 - M EH1 N T\nFERMENT(2)  F ER1 - M EH0 N T\nFERMENTA  F ER0 - M EH1 N - T AH0\nFERMENTA'S  F ER0 - M EH1 N - T AH0 Z\nFERMENTA'S(2)  F ER0 - M EH1 - N AH0 Z\nFERMENTA(2)  F ER0 - M EH1 - N AH0\nFERMENTATION  F ER2 - M AH0 N - T EY1 - SH AH0 N\nFERMENTED  F ER0 - M EH1 N - T AH0 D\nFERMENTING  F ER0 - M EH1 N - T IH0 NG\nFERMENTS  F ER0 - M EH1 N T S\nFERMI  F ER1 - M IY0\nFERMILAB  F ER1 - M IH0 - L AE2 B\nFERMIN  F ER1 - M IH0 N\nFERMIUM  F EH1 R - M IY0 - AH0 M\nFERMOYLE  F ER1 - M OY2 L\nFERN  F ER1 N\nFERNALD  F ER0 - N AA1 L D\nFERNALD(2)  F EH2 R - N AA1 L D\nFERNAND  F ER0 - N AE1 N D\nFERNAND(2)  F ER0 - N AA1 N\nFERNAND(3)  F ER0 - N AA1 N D\nFERNANDA  F ER0 - N AE1 N - D AH0\nFERNANDA(2)  F ER0 - N AA1 N - D AH0\nFERNANDES  F ER0 - N AA1 N - D EH0 S\nFERNANDES(2)  F ER0 - N AE1 N - D EH0 S\nFERNANDEZ  F ER0 - N AE1 N - D EH0 Z\nFERNANDEZ(2)  F EH0 R - N AE1 N - D EH0 Z\nFERNANDEZ(3)  F ER0 - N AA1 N - D EH0 Z\nFERNANDEZ(4)  F EH0 R - N AA1 N - D EH0 Z\nFERNANDINA  F ER0 - N AH0 N - D IY1 - N AH0\nFERNANDO  F ER0 - N AE1 N - D OW0\nFERNANDO(2)  F ER0 - N AA1 N - D OW0\nFERNAO  F ER0 - N AW1\nFERNAU  F ER1 - N AW0\nFERNBANK  F ER1 N - B AE2 NG K\nFERNBERG  F ER1 N - B ER0 G\nFERNDALE  F ER1 N - D EY2 L\nFERNER  F ER1 - N ER0\nFERNERY  F ER1 - N ER0 - IY0\nFERNHOLZ  F ER1 N - HH OW0 L Z\nFERNICOLA  F ER0 - N IY0 - K OW1 - L AH0\nFERNLIKE  F ER1 N - L AY2 K\nFERNS  F ER1 N Z\nFERNSTROM  F ER1 N - S T R AH0 M\nFERO  F EH1 - R OW0\nFEROCIOUS  F ER0 - OW1 - SH AH0 S\nFEROCIOUSLY  F ER0 - OW1 - SH IH0 S - L IY0\nFEROCITY  F ER0 - AA1 - S AH0 - T IY0\nFEROL  F EH1 - R AH0 L\nFERRA  F EH1 - R AH0\nFERRAIOLI  F EH1 - R AY0 - OW0 - L IY0\nFERRALL  F EH1 - R AH0 L\nFERRAN  F EH1 - R AH0 N\nFERRAND  F EH1 - R AH0 N D\nFERRANDINO  F ER0 - AA0 N - D IY1 - N OW0\nFERRANDO  F EH2 - R AE1 N - D OW0\nFERRANT  F EH1 - R AH0 N T\nFERRANTE  F ER0 - AA1 N - T IY0\nFERRANTI  F EH0 - R AE1 N - T IY0\nFERRANTI(2)  F EH0 - R AE1 - N IY0\nFERRARA  F ER0 - AA1 - R AH0\nFERRARI  F ER0 - AA1 - R IY0\nFERRARIO  F ER0 - AA1 - R IY0 - OW0\nFERRARIS  F ER0 - AA1 - R IH0 S\nFERRARO  F ER0 - AA1 - R OW0\nFERRE  F EH1 R\nFERREBEE  F EH1 - R IH0 - B IY0\nFERREE  F ER0 - IY1\nFERREIRA  F EH0 - R EY1 - R AH0\nFERREIRO  F EH0 - R EH1 - R OW0\nFERREL  F EH0 - R EH1 L\nFERRELL  F EH1 - R IH0 L\nFERRELLI  F ER0 - EH1 - L IY0\nFERREN  F EH1 - R AH0 N\nFERRENCY  F EH2 - R EH1 N - S IY0\nFERRENTINO  F ER0 - EH0 N - T IY1 - N OW0\nFERRER  F EH1 - R ER0\nFERRERA  F EH0 - R EH1 - R AH0\nFERRERI  F ER0 - EH1 - R IY0\nFERRERO  F EH0 - R EH1 - R OW0\nFERRET  F EH1 - R AH0 T\nFERRETED  F EH1 - R AH0 - T AH0 D\nFERRETED(2)  F EH1 - R AH0 - T IH0 D\nFERRETING  F EH1 - R AH0 - T IH0 NG\nFERRETS  F EH1 - R AH0 T S\nFERRETTI  F ER0 - EH1 - T IY0\nFERRI  F EH1 - R IY0\nFERRICK  F EH1 - R IH0 K\nFERRIE  F EH1 - R IY0\nFERRIED  F EH1 - R IY0 D\nFERRIER  F EH1 - R IY0 - ER0\nFERRIERA  F ER0 - IH1 - R AH0\nFERRIERS  F EH1 - R IY0 - ER0 Z\nFERRIES  F EH1 - R IY0 Z\nFERRIGNO  F ER0 - IY1 G - N OW0\nFERRILL  F EH0 - R IY1 L\nFERRIN  F EH1 - R IH0 N\nFERRINGTON  F EH1 - R IH0 NG - T AH0 N\nFERRINI  F ER0 - IY1 - N IY0\nFERRIS  F EH1 - R IH0 S\nFERRISS  F EH1 - R IH0 - S IH0 Z\nFERRITE  F EH1 - R AY0 T\nFERRITER  F EH1 - R AY0 - T ER0\nFERRIZ  F EH1 - R IH0 Z\nFERRO  F EH1 - R OW0\nFERROCHROME  F EH1 - R AH0 - K R OW2 M\nFERROFLUIDIC  F EH2 - R OW0 - F L UW0 - IH1 - D IH0 K\nFERROFLUIDICS  F EH2 - R OW0 - F L UW0 - IH1 - D IH0 K S\nFERROMAGNET  F EH2 - R OW0 - M AE1 G - N AH0 T\nFERROMAGNETIC  F EH2 - R OW0 - M AE2 G - N EH1 - T IH0 K\nFERROMAGNETISM  F EH2 - R OW0 - M AE1 G - N AH0 - T IH2 - Z AH0 M\nFERRON  F EH1 - R AH0 N\nFERRONE  F ER0 - OW1 - N IY0\nFERRONICKEL  F EH2 - R AH0 - N IH1 - K AH0 L\nFERROTYPE  F EH1 - R AH0 - T AY2 P\nFERROUS  F EH1 - R AH0 S\nFERRUCCI  F ER0 - UW1 - CH IY0\nFERRUZZI  F EH0 - R UW1 - Z IY0\nFERRUZZI'S  F ER2 - UW1 - Z IY0 Z\nFERRY  F EH1 - R IY0\nFERRY'S  F EH1 - R IY0 Z\nFERRYBOAT  F EH1 - R IY0 - B OW2 T\nFERRYBOATS  F EH1 - R IY0 - B OW2 T S\nFERRYING  F EH1 - R IY0 - IH0 NG\nFERRYMAN  F EH1 - R IY0 - M AH0 N\nFERTIG  F ER1 - T IH0 G\nFERTILE  F ER1 - T AH0 L\nFERTILE(2)  F ER0 - T AY1 L\nFERTILITY  F ER0 - T IH1 - L AH0 - T IY0\nFERTILITY(2)  F ER0 - T IH1 - L IH0 - T IY0\nFERTILIZATION  F ER2 - T AH0 - L IH0 - Z EY1 - SH AH0 N\nFERTILIZE  F ER1 - T AH0 - L AY2 Z\nFERTILIZED  F ER1 - T AH0 - L AY2 Z D\nFERTILIZER  F ER1 - T AH0 - L AY2 - Z ER0\nFERTILIZERS  F ER1 - T AH0 - L AY2 - Z ER0 Z\nFERTILIZES  F ER1 - T AH0 - L AY2 - Z IH0 Z\nFERTILIZING  F ER1 - T AH0 - L AY2 - Z IH0 NG\nFERTITTA  F ER0 - T IY1 - T AH0\nFERTLOW  F ER1 T - L OW0\nFERULLO  F ER0 - UW1 - L OW0\nFERVENT  F ER1 - V AH0 N T\nFERVENTLY  F ER1 - V AH0 N T - L IY0\nFERVID  F ER1 - V AH0 D\nFERVOR  F ER1 - V ER0\nFERY  F EH1 - R IY0\nFESCHBACH  F EH1 SH - B AA2 K\nFESCUE  F EH1 - S K Y UW2\nFESER  F IY1 - Z ER0\nFESHBACH  F EH1 SH - B AA2 K\nFESLER  F EH1 - S AH0 - L ER0\nFESLER(2)  F EH1 S - L ER0\nFESMIRE  F EH1 S - M AY2 R\nFESPERMAN  F EH1 - S P ER0 - M AH0 N\nFESS  F EH1 S\nFESSED  F EH1 S T\nFESSEL  F EH1 - S AH0 L\nFESSENDEN  F EH1 - S AH0 N - D AH0 N\nFESSLER  F EH1 S - L ER0\nFEST  F EH1 S T\nFESTA  F EH1 - S T AH0\nFESTER  F EH1 - S T ER0\nFESTERED  F EH1 - S T ER0 D\nFESTERING  F EH1 - S T ER0 - IH0 NG\nFESTIVA  F EH0 - S T IY1 - V AH0\nFESTIVAL  F EH1 - S T AH0 - V AH0 L\nFESTIVAL'S  F EH1 - S T IH0 - V AH0 L Z\nFESTIVAL(2)  F EH1 - S T IH0 - V AH0 L\nFESTIVALS  F EH1 - S T AH0 - V AH0 L Z\nFESTIVALS(2)  F EH1 - S T IH0 - V AH0 L Z\nFESTIVE  F EH1 - S T IH0 V\nFESTIVITIES  F EH0 - S T IH1 - V AH0 - T IY0 Z\nFESTIVITY  F EH0 - S T IH1 - V AH0 - T IY0\nFESTOON  F EH2 - S T UW1 N\nFESTOONED  F EH2 - S T UW1 N D\nFESTS  F EH1 S T S\nFESTS(2)  F EH1 S S\nFESTS(3)  F EH1 S\nFESTSPIELHAUS  F EH1 S T - S P IY1 L - HH AW2 S\nFESTUS  F EH1 - S T AH0 S\nFETAL  F IY1 - T AH0 L\nFETCH  F EH1 CH\nFETCHED  F EH1 CH T\nFETCHES  F EH1 - CH IH0 Z\nFETCHING  F EH1 - CH IH0 NG\nFETE  F EY1 T\nFETED  F EY1 - T IH0 D\nFETHEROLF  F EH1 - TH ER0 - OW0 L F\nFETHERSTON  F EH1 - TH ER0 - S T AH0 N\nFETID  F EH1 - T AH0 D\nFETISH  F EH1 - T IH0 SH\nFETISHISM  F EH1 - T IH0 - SH IH2 - Z AH0 M\nFETISHIST  F EH1 - T IH0 - SH IH0 S T\nFETISHIST(2)  F EH1 - T IH0 - SH AH0 S T\nFETISHISTS  F EH1 - T IH0 - SH AH0 S T S\nFETISHISTS(2)  F EH1 - T IH0 - SH IH0 S T S\nFETISHISTS(3)  F EH1 - T IH0 - SH IH0 S S\nFETISHISTS(4)  F EH1 - T IH0 - SH IH0 S\nFETNER  F EH1 T - N ER0\nFETROW  F EH1 - T R OW0\nFETSCH  F EH1 CH\nFETSKO  F EH1 T - S K OW0\nFETT  F EH1 T\nFETTE  F EH1 T\nFETTER  F EH1 - T ER0\nFETTERED  F EH1 - T ER0 D\nFETTERHOFF  F EH1 - T ER0 - HH AO0 F\nFETTERLY  F EH1 - T ER0 - L IY0\nFETTERMAN  F EH1 - T ER0 - M AH0 N\nFETTEROLF  F EH1 - T ER0 - OW0 L F\nFETTERS  F EH1 - T ER0 Z\nFETTES  F EH1 T S\nFETTIG  F EH1 - T IH0 G\nFETTING  F EH1 - T IH0 NG\nFETTUCCINE  F EH2 - T AH0 - CH IY1 - N IY0\nFETTY  F EH1 - T IY0\nFETUS  F IY1 - T AH0 S\nFETUSES  F IY1 - T AH0 - S IH0 Z\nFETZ  F EH1 T S\nFETZER  F EH1 T - S ER0\nFEUCHT  F OY1 K T\nFEUD  F Y UW1 D\nFEUDAL  F Y UW1 - D AH0 L\nFEUDALISM  F Y UW1 - D AH0 - L IH2 - Z AH0 M\nFEUDALISTIC  F Y UW2 - D AH0 - L IH1 - S T IH0 K\nFEUDED  F Y UW1 - D IH0 D\nFEUDING  F Y UW1 - D IH0 NG\nFEUDS  F Y UW1 D Z\nFEUER  F Y UW1 - ER0\nFEUERBORN  F OY1 - ER0 - B ER0 N\nFEUERMAN  F Y UW1 - ER0 - M AH0 N\nFEUERSTEIN  F Y UW1 - ER0 - S T IY2 N\nFEUERSTEIN(2)  F Y UW1 - ER0 - S T AY2 N\nFEULNER  F OY1 L - N ER0\nFEUR  F ER1\nFEUSTEL  F OY1 - S T AH0 L\nFEUTZ  F Y UW1 T S\nFEVER  F IY1 - V ER0\nFEVERED  F IY1 - V ER0 D\nFEVERFEW  F IY1 - V ER0 - F Y UW2\nFEVERFEWS  F IY1 - V ER0 - F Y UW2 Z\nFEVERISH  F IY1 - V ER0 - IH0 SH\nFEVERISHLY  F EH1 - V ER0 - IH2 SH - L IY0\nFEVERS  F IY1 - V ER0 Z\nFEW  F Y UW1\nFEWELL  F EH1 - W EH0 L\nFEWER  F Y UW1 - ER0\nFEWEST  F Y UW1 - AH0 S T\nFEY  F EY1\nFEYEN  F AY1 N\nFEYNMAN  F EY1 N - M AH0 N\nFEZ  F EH1 Z\nFI  F AY1\nFI(2)  F IY1\nFIACCO  F IY0 - AA1 - K OW0\nFIALA  F IY0 - AA1 - L AH0\nFIALKOWSKI  F IY0 - AH0 L - K AO1 F S - K IY0\nFIANCE  F IY0 - AA1 N - S EY2\nFIANCE(2)  F IY2 - AA2 N - S EY1\nFIANCEE  F IY0 - AE1 N - S IY0\nFIANNA  F IY0 - AE1 - N AH0\nFIASCO  F IY0 - AE1 S - K OW0\nFIASCOS  F IY0 - AE1 S - K OW0 Z\nFIAT  F AY1 - AE0 T\nFIAT'S  F IY1 - AE2 T S\nFIATO  F IY0 - AE1 - T OW0\nFIATO(2)  F Y AE1 - T OW0\nFIBER  F AY1 - B ER0\nFIBER'S  F AY1 - B ER0 Z\nFIBERBOARD  F AY1 - B ER0 - B AO2 R D\nFIBERGLAS  F AY1 - B ER0 - G L AE2 S\nFIBERGLASS  F AY1 - B ER0 - G L AE2 S\nFIBEROPTIC  F AY1 - B ER0 - AA2 P - T IH0 K\nFIBERS  F AY1 - B ER0 Z\nFIBERWEB  F AY1 - B ER0 - W EH2 B\nFIBRE  F AY1 - B ER0\nFIBREBOARD  F AY1 - B ER0 - B AO2 R D\nFIBRILE  F AY1 - B R IH0 L\nFIBRILES  F AY1 - B R IH0 L Z\nFIBRILLATION  F IH2 - B R IH0 - L EY1 - SH AH0 N\nFIBRIN  F AY1 - B R AH0 N\nFIBROID  F AY1 - B R OY0 D\nFIBROIDS  F AY1 - B R OY0 D Z\nFIBRONIC  F IH0 - B R AA1 - N IH0 K\nFIBRONICS  F IH0 - B R AA1 - N IH0 K S\nFIBROSIS  F AY0 - B R OW1 - S AH0 S\nFIBROUS  F AY1 - B R AH0 S\nFIBULA  F IH1 - B Y AH0 - L AH0\nFICARRA  F IY0 - K AA1 - R AH0\nFICCO  F IH1 - K OW0\nFICEK  F IH1 - S IH0 K\nFICHERA  F IY0 - K EH1 - R AH0\nFICHTEL  F IH1 CH - T EH2 L\nFICHTER  F IH1 K - T ER0\nFICHTNER  F IH1 K T - N ER0\nFICHUS  F IH1 - CH AH0 S\nFICK  F IH1 K\nFICKE  F IH1 K\nFICKEL  F IH1 - K AH0 L\nFICKEN  F IH1 - K AH0 N\nFICKER  F IH1 - K ER0\nFICKES  F IH1 K S\nFICKETT  F IH1 - K IH0 T\nFICKLE  F IH1 - K AH0 L\nFICKLENESS  F IH1 - K AH0 L - N AH0 S\nFICKLIN  F IH1 - K L IH0 N\nFICKLING  F IH1 - K L IH0 NG\nFICO  F IY1 - K OW0\nFICOM  F IH1 - K AA0 M\nFICORCA  F IH0 - K AO1 R - K AH0\nFICTION  F IH1 K - SH AH0 N\nFICTIONAL  F IH1 K - SH AH0 - N AH0 L\nFICTIONALIZE  F IH1 K - SH AH0 - N AH0 L - AY2 Z\nFICTIONALIZED  F IH1 K - SH AH0 - N AH0 L - AY2 Z D\nFICTIONS  F IH1 K - SH AH0 N Z\nFICTITIOUS  F IH0 K - T IH1 - SH AH0 S\nFIDALGO  F IY0 - D AA1 L - G OW0\nFIDATA  F IH0 - D AA1 - T AH0\nFIDDLE  F IH1 - D AH0 L\nFIDDLED  F IH1 - D AH0 L D\nFIDDLER  F IH1 - D AH0 L - ER0\nFIDDLER'S  F IH1 - D AH0 L - ER0 Z\nFIDDLER'S(2)  F IH1 D - L ER0 Z\nFIDDLER(2)  F IH1 D - L ER0\nFIDDLERS  F IH1 - D AH0 L - ER0 Z\nFIDDLERS(2)  F IH1 D - L ER0 Z\nFIDDLES  F IH1 - D AH0 L Z\nFIDDLING  F IH1 D - L IH0 NG\nFIDE  F AY1 D\nFIDEL  F IH0 - D EH1 L\nFIDEL'S  F IH0 - D EH1 L Z\nFIDELCO  F IH0 - D EH1 L - K OW0\nFIDELCOR  F IH1 - D AH0 L - K AO2 R\nFIDELIA  F IH0 - D IY1 - L Y AH0\nFIDELITIES  F AH0 - D EH1 - L AH0 - T IY0 Z\nFIDELITY  F AH0 - D EH1 - L AH0 - T IY0\nFIDELITY'S  F AH0 - D EH1 - L AH0 - T IY0 Z\nFIDELITY(2)  F AY2 - D EH1 - L AH0 - T IY0\nFIDENAS  F IH1 - D IH0 - N AH0 S\nFIDES  F AY1 D Z\nFIDGET  F IH1 - JH IH0 T\nFIDGETING  F IH1 - JH AH0 - T IH0 NG\nFIDLER  F AY1 - D AH0 - L ER0\nFIDLER(2)  F AY1 D - L ER0\nFIDO  F AY1 - D OW0\nFIDORA  F AH0 - D AO1 - R AH0\nFIDORA'S  F AH0 - D AO1 - R AH0 Z\nFIDUCIARES  F IH0 - D UW1 - S IY0 - EH2 R Z\nFIDUCIARES(2)  F IH0 - D UW1 - S IY0 - EH2 - R IY0 Z\nFIDUCIARIES  F IH0 - D UW1 - SH IY0 - EH2 - R IY0 Z\nFIDUCIARY  F AH0 - D UW1 - SH IY0 - EH2 - R IY0\nFIEBELKORN  F IY1 - B IH0 L - K ER0 N\nFIEBER  F IY1 - B ER0\nFIEBIG  F IY1 - B IH0 G\nFIEBIGER  F IY1 - B IH0 - G ER0\nFIECHTER  F IH1 K - T ER0\nFIEDLER  F IY1 D - L ER0\nFIEDLER'S  F IY1 D - L ER0 Z\nFIEF  F IY1 F\nFIEFDOM  F IY1 F - D AH0 M\nFIEFDOMS  F IY1 F - D AH0 M Z\nFIEGEL  F IY1 - G AH0 L\nFIEGER  F IY1 - G ER0\nFIEGER'S  F IY1 - G ER0 Z\nFIEL  F IY1 L\nFIELD  F IY1 L D\nFIELD'S  F IY1 L D Z\nFIELDCREST  F IY1 L D - K R EH2 S T\nFIELDED  F IY1 L - D IH0 D\nFIELDEN  F IY1 L - D AH0 N\nFIELDER  F IY1 L - D ER0\nFIELDER'S  F IY1 L - D ER0 Z\nFIELDERS  F IY1 L - D ER0 Z\nFIELDHOUSE  F IY1 L D - HH AW2 S\nFIELDING  F IY1 L - D IH0 NG\nFIELDS  F IY1 L D Z\nFIELDS'  F IY1 L D Z\nFIELDWORK  F IY1 L D - W ER2 K\nFIEND  F IY1 N D\nFIENDISH  F IY1 N - D IH0 SH\nFIENDS  F IY1 N D Z\nFIENE  F IY1 N\nFIENNES  F IY0 - EH1 - N EH0 S\nFIENNES(2)  F Y EH1 - N EH0 S\nFIER  F IH1 R\nFIERCE  F IH1 R S\nFIERCELY  F IH1 R S - L IY0\nFIERCER  F IH1 R - S ER0\nFIERCEST  F IH1 R - S AH0 S T\nFIERMAN  F IH1 R - M AH0 N\nFIERO  F IY1 - R OW0\nFIEROS  F IY0 - EH1 - R OW0 S\nFIERRO  F IH1 - R OW0\nFIERROS  F IH1 - R OW0 Z\nFIERS  F IY1 R Z\nFIERST  F IY1 R S T\nFIERSTEIN  F IY1 R - S T IY2 N\nFIERSTEIN(2)  F IY1 R - S T AY2 N\nFIERY  F AY1 - ER0 - IY0\nFIESER  F IY1 - S ER0\nFIEST  F IY1 - IH0 S T\nFIESTA  F IY0 - EH1 - S T AH0\nFIFE  F AY1 F\nFIFER  F AY1 - F ER0\nFIFI  F IY1 - F IY0\nFIFIELD  F IH1 - F IY0 L D\nFIFTEEN  F IH0 F - T IY1 N\nFIFTEEN(2)  F IH1 F - T IY1 N\nFIFTEENS  F IH0 F - T IY1 N Z\nFIFTEENTH  F IH0 F - T IY1 N TH\nFIFTH  F IH1 F TH\nFIFTH(2)  F IH1 TH\nFIFTHS  F IH1 F TH S\nFIFTHS(2)  F IH1 F S\nFIFTIES  F IH1 F - T IY0 Z\nFIFTIETH  F IH1 F - T IY0 - IH0 TH\nFIFTY  F IH1 F - T IY0\nFIFTY'S  F IH1 F - T IY0 Z\nFIG  F IH1 G\nFIGALLO  F IH0 - G AA1 - L OW0\nFIGARO  F IH1 - G ER0 - OW2\nFIGAROA  F IH2 - G ER0 - OW1 - AH0\nFIGAROA'S  F IH2 - G ER0 - OW1 - AH0 Z\nFIGEL  F IH1 - G AH0 L\nFIGG  F IH1 G\nFIGGE  F IH1 G\nFIGGIE  F IH1 - G IY0\nFIGGIE'S  F IH1 - G IY0 Z\nFIGGINS  F IH1 - G IH0 N Z\nFIGGS  F IH1 G Z\nFIGHT  F AY1 T\nFIGHT'S  F AY1 T Z\nFIGHTER  F AY1 - T ER0\nFIGHTER'S  F AY1 - T ER0 Z\nFIGHTERS  F AY1 - T ER0 Z\nFIGHTERS'  F AY1 - T ER0 Z\nFIGHTIN'  F AY1 - T IH0 N\nFIGHTING  F AY1 - T IH0 NG\nFIGHTING'S  F AY1 - T IH0 NG Z\nFIGHTINGS  F AY1 - T IH0 NG Z\nFIGHTMASTER  F AY1 T - M AE2 - S T ER0\nFIGHTS  F AY1 T S\nFIGLER  F AY1 - G AH0 - L ER0\nFIGLER(2)  F IH1 G - L ER0\nFIGLEY  F IH1 G - L IY0\nFIGMENT  F IH1 G - M IH0 N T\nFIGMENTS  F IH1 G - M IH0 N T S\nFIGONE  F IH1 - G AH0 N\nFIGS  F IH1 G Z\nFIGUEIRA  F IY0 - G EH1 - R AH0\nFIGUEIREDO  F IY0 - G ER0 - EY1 - D OW0\nFIGUERAS  F IY0 - G EH1 - R AA0 Z\nFIGUEREDO  F IY0 - G EH0 - R EY1 - D OW0\nFIGUEROA  F IY0 - G EH0 - R OW1 - AH0\nFIGURA  F IY0 - G UH1 - R AH0\nFIGURATION  F IH2 - G Y ER0 - EY1 - SH AH0 N\nFIGURATIVE  F IH1 - G Y ER0 - AH0 - T IH0 V\nFIGURATIVELY  F IH0 - G Y UH1 - R AH0 - T IH0 V - L IY0\nFIGURE  F IH1 - G Y ER0\nFIGURE'S  F IH1 - G Y ER0 Z\nFIGURED  F IH1 - G Y ER0 D\nFIGUREHEAD  F IH1 - G Y ER0 - HH EH2 D\nFIGURES  F IH1 - G Y ER0 Z\nFIGURINE  F IH2 - G Y ER0 - IY1 N\nFIGURINES  F IH2 - G Y ER0 - IY1 N Z\nFIGURING  F IH1 - G Y ER0 - IH0 NG\nFIGURSKI  F IH0 - G ER1 S - K IY0\nFIJI  F IY1 - JH IY0\nFIJI'S  F IY1 - JH IY0 Z\nFIJIAN  F IY1 - JH IY0 - AH0 N\nFIJIANS  F IH1 - JH IY0 - AH0 N Z\nFIKE  F AY1 K\nFIKES  F AY1 K S\nFIL  F IH1 L\nFILA  F AY1 - L AH0\nFILAMENT  F IH1 - L AH0 - M AH0 N T\nFILAMENTS  F IH1 - L AH0 - M AH0 N T S\nFILBERT  F IH1 L - B ER0 T\nFILBERT'S  F IH1 L - B ER0 T S\nFILBERTS  F IH1 L - B ER0 T S\nFILBY  F IH1 L - B IY0\nFILCH  F IH1 L CH\nFILCHED  F IH1 L CH T\nFILDES  F IH1 L D Z\nFILE  F AY1 L\nFILED  F AY1 L D\nFILEGATE  F AY1 L - G EY2 T\nFILENE  F IH0 - L IY1 N\nFILENE'S  F IH0 - L IY1 N Z\nFILENET  F AY1 L - N EH2 T\nFILER  F AY1 - L ER0\nFILERS  F AY1 - L ER0 Z\nFILES  F AY1 L Z\nFILET  F IH0 - L EY1\nFILETS  F IH0 - L EY1 Z\nFILIAL  F IH1 - L IY0 - AH0 L\nFILIBUSTER  F IH1 - L AH0 - B AH2 - S T ER0\nFILIBUSTERED  F IH1 - L AH0 - B AH2 - S T ER0 D\nFILIBUSTERING  F IH1 - L AH0 - B AH2 - S T ER0 - IH0 NG\nFILIBUSTERS  F IH1 - L AH0 - B AH2 - S T ER0 Z\nFILICE  F IY1 - L IH0 S\nFILIGREE  F IH1 - L AH0 - G R IY2\nFILIGREES  F IH1 - L AH0 - G R IY2 Z\nFILING  F AY1 - L IH0 NG\nFILINGS  F AY1 - L IH0 NG Z\nFILINSKI  F IH0 - L IH1 N - S K IY0\nFILION  F IH1 - L Y AH0 N\nFILIP  F IH1 - L IH0 P\nFILIPA  F IY0 - L IY1 - P AH0\nFILIPEK  F IH1 - L IH0 - P IH0 K\nFILIPIAK  F IH0 - L IH1 - P IY0 - AE0 K\nFILIPINO  F IH2 - L AH0 - P IY1 - N OW0\nFILIPINOS  F IH2 - L AH0 - P IY1 - N OW0 Z\nFILIPKOWSKI  F IH0 - L IH0 P - K AO1 F S - K IY0\nFILIPOVIC  F IH0 - L IH0 - P OW1 - V IH0 K\nFILIPOWICZ  F IH0 - L IH1 - P AH0 - V IH0 CH\nFILIPPELLI  F IY0 - L IY0 - P EH1 - L IY0\nFILIPPELLO  F IY2 - L IH0 - P EH1 - L OW0\nFILIPPI  F IH0 - L IH1 - P IY0\nFILIPPINI  F IY0 - L IY0 - P IY1 - N IY0\nFILIPPO  F IH0 - L IY1 - P OW0\nFILIPPONE  F IH1 - L IH0 - P OW2 N\nFILIPSKI  F IH0 - L IH1 P - S K IY0\nFILKINS  F IH1 L - K IH0 N Z\nFILL  F IH1 L\nFILL-A-BUSTER  F IH1 - L AH0 - B AH2 - S T ER0\nFILLA  F IH1 - L AH0\nFILLAUER  F IH1 - L AW2 - ER0\nFILLED  F IH1 L D\nFILLER  F IH1 - L ER0\nFILLERS  F IH1 - L ER0 Z\nFILLET  F AH0 - L EY1\nFILLETED  F IH1 - L AH0 - T IH0 D\nFILLETED(2)  F AH0 - L EY1 D\nFILLETS  F IH1 - L IH0 T S\nFILLEY  F IH1 - L IY0\nFILLIES  F IH1 - L IY0 Z\nFILLING  F IH1 - L IH0 NG\nFILLINGAME  F IY0 - L IH0 NG - G AA1 - M IY0\nFILLINGER  F IH1 - L IH0 - NG ER0\nFILLINGHAM  F IH1 - L IH0 NG - HH AE2 M\nFILLINGIM  F IH1 - L IH0 NG - G IH0 M\nFILLINGS  F IH1 - L IH0 NG Z\nFILLION  F IH1 - L Y AH0 N\nFILLIP  F IH1 - L AH0 P\nFILLMAN  F IH1 L - M AH0 N\nFILLMORE  F IH1 L - M AO0 R\nFILLS  F IH1 L Z\nFILLY  F IH1 - L IY0\nFILM  F IH1 L M\nFILM'S  F IH1 L M Z\nFILMA  F IH1 L - M AH0\nFILMED  F IH1 L M D\nFILMER  F IH1 L - M ER0\nFILMING  F IH1 L - M IH0 NG\nFILMLESS  F IH1 L M - L AH0 S\nFILMMAKER  F IH1 L - M EY2 - K ER0\nFILMMAKER'S  F IH1 L - M EY2 - K ER0 Z\nFILMMAKERS  F IH1 L - M EY2 - K ER0 Z\nFILMMAKING  F IH1 L - M EY2 - K IH0 NG\nFILMORE  F IH1 L - M AO2 R\nFILMS  F IH1 L M Z\nFILO  F IY1 - L OW0\nFILOFAX  F IH1 - L OW0 - F AE2 K S\nFILOFAX(2)  F AY1 - L OW0 - F AE2 K S\nFILOMENA  F IH2 - L AH0 - M IY1 - N AH0\nFILOSA  F IY0 - L OW1 - S AH0\nFILSINGER  F IH1 L - S IH0 - NG ER0\nFILSON  F IH1 L - S AH0 N\nFILTER  F IH1 L - T ER0\nFILTERED  F IH1 L - T ER0 D\nFILTERING  F IH1 L - T ER0 - IH0 NG\nFILTERS  F IH1 L - T ER0 Z\nFILTERTEK  F IH1 L - T ER0 - T EH2 K\nFILTH  F IH1 L TH\nFILTHY  F IH1 L - TH IY0\nFILTRATION  F IH0 L - T R EY1 - SH AH0 N\nFILTROL  F IH1 L - T R AA0 L\nFILYAW  F IH0 - L IY1 - AA0 V\nFILYAW(2)  F IH1 - L Y AW2\nFIMA  F IY1 - M AH0\nFIMBRES  F IH1 M - B ER0 Z\nFIN  F IH1 N\nFINA  F AY1 - N AH0\nFINAGLE  F IH1 - N AH0 - G AH0 L\nFINAGLE(2)  F IH0 - N EY1 - G AH0 L\nFINAGLER  F AH0 - N EY1 - G L ER0\nFINAL  F AY1 - N AH0 L\nFINALCO  F IH0 - N AE1 L - K OW0\nFINALE  F AH0 - N AE1 - L IY0\nFINALIST  F AY1 - N AH0 - L IH0 S T\nFINALISTS  F AY1 - N AH0 - L AH0 S T S\nFINALISTS(2)  F AY1 - N AH0 - L AH0 S S\nFINALISTS(3)  F AY1 - N AH0 - L AH0 S\nFINALITY  F AY0 - N AE1 - L AH0 - T IY0\nFINALIZE  F AY1 - N AH0 - L AY2 Z\nFINALIZED  F AY1 - N AH0 - L AY2 Z D\nFINALIZING  F AY1 - N AH0 - L AY2 - Z IH0 NG\nFINALLY  F AY1 - N AH0 - L IY0\nFINALS  F AY1 - N AH0 L Z\nFINAMORE  F IH1 - N AH0 - M AO2 R\nFINAN  F IH1 - N AH0 N\nFINANCE  F AH0 - N AE1 N S\nFINANCE(2)  F IH0 - N AE1 N S\nFINANCE(3)  F AY1 - N AE2 N S\nFINANCED  F IH0 - N AE1 N S T\nFINANCED(2)  F AY1 - N AE2 N S T\nFINANCEMENT  F IH0 - N AE1 N S - M AH0 N T\nFINANCEMENT(2)  F AY1 - N AE2 N S - M AH0 N T\nFINANCER  F AY1 - N AE2 N - S ER0\nFINANCER(2)  F IH0 - N AE1 N - S ER0\nFINANCES  F IH0 - N AE1 N - S IH0 Z\nFINANCES(2)  F AY1 - N AE2 N - S IH0 Z\nFINANCIAL  F AH0 - N AE1 N - SH AH0 L\nFINANCIAL'S  F AY2 - N AE1 N - SH AH0 L Z\nFINANCIAL'S(2)  F IH0 - N AE1 N - SH AH0 L Z\nFINANCIAL(2)  F IH0 - N AE1 N - SH AH0 L\nFINANCIAL(3)  F AY2 - N AE1 N - SH AH0 L\nFINANCIALLY  F AH0 - N AE1 N - SH AH0 - L IY0\nFINANCIALLY(2)  F IH0 - N AE1 N - SH AH0 - L IY0\nFINANCIALLY(3)  F AY2 - N AE1 N - SH AH0 - L IY0\nFINANCIALS  F AY2 - N AE1 N - SH AH0 L Z\nFINANCIALS(2)  F IH0 - N AE1 N - SH AH0 L Z\nFINANCIALS(3)  F AH0 - N AE1 N - SH AH0 L Z\nFINANCIER  F IH2 - N AH0 N - S IH1 R\nFINANCIER(2)  F AY2 - N AE0 N - S IH1 R\nFINANCIERA  F IH0 - N AE2 N - S IY0 - EH1 - R AH0\nFINANCIERE  F IH2 - N AE0 N - S IH1 R\nFINANCIERO  F IH0 - N AE2 N - S IY0 - EH1 - R OW0\nFINANCIERS  F IH2 - N AH0 N - S IH1 R Z\nFINANCING  F AH0 - N AE1 N - S IH0 NG\nFINANCING(2)  F IH0 - N AE1 N - S IH0 NG\nFINANCING(3)  F AY0 - N AE1 N - S IH0 NG\nFINANCINGS  F AH0 - N AE1 N - S IH0 NG Z\nFINANCINGS(2)  F IH0 - N AE1 N - S IH0 NG Z\nFINANCINGS(3)  F AY1 - N AE2 N - S IH0 NG Z\nFINANCO  F IH0 - N AE1 NG - K OW0\nFINANZ  F IH1 - N AE0 N Z\nFINANZA  F IH0 - N AE1 N - Z AH0\nFINANZIARIA  F IH0 - N AE2 N - Z IY0 - EH1 - R IY0 - AH0\nFINANZIARIO  F IH0 - N AE2 N - Z IY0 - EH1 - R IY0 - OW0\nFINARTE  F IH1 - N AA0 R T\nFINAZZO  F IY0 - N AA1 - Z OW0\nFINBERG  F IH1 N - B ER0 G\nFINCANNON  F IH1 N - K AH0 - N AA0 N\nFINCANNON(2)  F IH0 N - K AE1 - N AH0 N\nFINCH  F IH1 N CH\nFINCHAM  F IH1 N - CH AH0 M\nFINCHER  F IH1 N - CH ER0\nFINCHES  F IH1 N - CH IH0 Z\nFINCHUM  F IH1 N - K AH0 M\nFINCK  F IH1 NG K\nFINCKE  F IH1 NG K\nFINCKLE  F IH1 NG - K AH0 L\nFIND  F AY1 N D\nFINDER  F AY1 N - D ER0\nFINDER'S  F AY1 N - D ER0 Z\nFINDERS  F AY1 N - D ER0 Z\nFINDING  F AY1 N - D IH0 NG\nFINDINGS  F AY1 N - D IH0 NG Z\nFINDLAY  F IH1 N D - L IY0\nFINDLER  F IH1 N D - L ER0\nFINDLEY  F IH1 N D - L IY0\nFINDLING  F IH1 N - D AH0 L - IH0 NG\nFINDLING(2)  F IH1 N D - L IH0 NG\nFINDS  F AY1 N D Z\nFINE  F AY1 N\nFINEBERG  F AY1 N - B ER0 G\nFINED  F AY1 N D\nFINEFROCK  F AY1 N - F R AA2 K\nFINEGAN  F IH1 - N IH0 - G AE0 N\nFINEGOLD  F AY1 N - G OW2 L D\nFINELLA  F IH0 - N EH1 - L AH0\nFINELLI  F IH0 - N EH1 - L IY0\nFINELY  F AY1 N - L IY0\nFINEMAN  F AY1 N - M AH0 N\nFINER  F AY1 - N ER0\nFINERAN  F IH1 - N ER0 - AE0 N\nFINERTY  F IH1 - N ER0 - T IY0\nFINERY  F AY1 - N ER0 - IY0\nFINES  F AY1 N Z\nFINESSE  F IH0 - N EH1 S\nFINESSED  F IH0 - N EH1 S T\nFINEST  F AY1 - N AH0 S T\nFINESTONE  F AY1 N - S T OW2 N\nFINEVEST  F AY1 N - V EH2 S T\nFINEX  F IH1 - N EH2 K S\nFINFROCK  F IH1 N - F R AA2 K\nFINGER  F IH1 NG - G ER0\nFINGERBOARD  F IH1 NG - G ER0 - B AO2 R D\nFINGERED  F IH1 NG - G ER0 D\nFINGERHUT  F IH1 NG - G ER0 - HH AH2 T\nFINGERING  F IH1 NG - G ER0 - IH0 NG\nFINGERNAIL  F IH1 NG - G ER0 - N EY2 L\nFINGERNAILS  F IH1 NG - G ER0 - N EY2 L Z\nFINGERPAINT  F IH1 NG - G ER0 - P EY2 N T\nFINGERPAINTED  F IH1 NG - G ER0 - P EY2 N - T IH0 D\nFINGERPAINTED(2)  F IH1 NG - G ER0 - P EY2 - N IH0 D\nFINGERPOINTING  F IH1 NG - G ER0 - P OY2 N - T IH0 NG\nFINGERPRINT  F IH1 NG - G ER0 - P R IH2 N T\nFINGERPRINTED  F IH1 NG - G ER0 - P R IH2 N - T IH0 D\nFINGERPRINTING  F IH1 NG - G ER0 - P R IH2 N - T IH0 NG\nFINGERPRINTS  F IH1 NG - G ER0 - P R IH2 N T S\nFINGERS  F IH1 NG - G ER0 Z\nFINGERTIP  F IH1 NG - G ER0 - T IH2 P\nFINGERTIPS  F IH1 NG - G ER0 - T IH2 P S\nFINI  F IY1 - N IY0\nFINIAN  F IH1 - N IY0 - AH0 N\nFINIAN'S  F IH1 - N IY0 - AH0 N Z\nFINICKY  F IH1 - N AH0 - K IY0\nFINIGAN  F IH1 - N IH0 - G AH0 N\nFINING  F AY1 - N IH0 NG\nFININVEST  F IH1 - N IH2 N - V EH2 S T\nFININVEST'S  F IH1 - N IH2 N - V EH2 S T S\nFINISH  F IH1 - N IH0 SH\nFINISHED  F IH1 - N IH0 SH T\nFINISHER  F IH1 - N IH0 - SH ER0\nFINISHERS  F IH1 - N IH0 - SH ER0 Z\nFINISHES  F IH1 - N IH0 - SH IH0 Z\nFINISHING  F IH1 - N IH0 - SH IH0 NG\nFINITE  F AY1 - N AY2 T\nFINK  F IH1 NG K\nFINK'S  F IH1 NG K S\nFINKBEINER  F IH1 NG K - B AY2 - N ER0\nFINKBINER  F IH1 NG K - B AY2 - N ER0\nFINKE  F IH1 NG K\nFINKEL  F IH1 NG - K AH0 L\nFINKELMAN  F IH1 NG - K AH0 L - M AH0 N\nFINKELSON  F IH1 NG - K AH0 L - S AH0 N\nFINKELSTEIN  F IH1 NG - K AH0 L - S T IY2 N\nFINKELSTEIN'S  F IH1 NG - K AH0 L - S T IY2 N Z\nFINKELSTEIN'S(2)  F IH1 NG - K AH0 L - S T AY2 N Z\nFINKELSTEIN(2)  F IH1 NG - K AH0 L - S T AY2 N\nFINKEN  F IH1 NG - K AH0 N\nFINKENBINDER  F IH1 NG - K IH0 N - B IH0 N - D ER0\nFINKIELSTAIN  F IH0 NG - K IY1 L - S T IH0 N\nFINKIELSTAIN(2)  F IH2 NG - K IY1 L - S T EY0 N\nFINKLE  F IH1 NG - K AH0 L\nFINKLEA  F IH1 NG - K L IY0 - AH0\nFINKLER  F IH1 NG - K L ER0\nFINKLEY  F IH1 NG - K L IY0\nFINKS  F IH1 NG K S\nFINLAND  F IH1 N - L AE2 N D\nFINLAND'S  F IH1 N - L AH0 N D Z\nFINLAND(2)  F IH1 N - L AH0 N D\nFINLANDIZATION  F IH2 N - L AE0 N - D IH0 - Z EY1 - SH AH0 N\nFINLAY  F IH1 N - L IY0\nFINLAYSON  F IH1 N - L IY0 - S AH0 N\nFINLETS  F IH1 N - L AH0 T S\nFINLEY  F IH1 N - L IY0\nFINLEY'S  F IH1 N - L IY0 Z\nFINMECCANICA  F IH2 N - M AH0 - K AE1 - N IH0 - K AH0\nFINN  F IH1 N\nFINN'S  F IH1 N Z\nFINNAIR  F IH1 - N EH1 R\nFINNAN  F IH1 - N AH0 N\nFINNE  F IH1 N\nFINNEGAN  F IH1 - N AH0 - G AH0 N\nFINNELL  F IH1 - N AH0 L\nFINNERAN  F IH1 - N ER0 - AE0 N\nFINNERTY  F IH1 - N ER0 - T IY0\nFINNEY  F IH1 - N IY0\nFINNICK  F IH1 - N IH0 K\nFINNICUM  F IH1 - N IH0 - K AH0 M\nFINNIE  F IH1 - N IY0\nFINNIGAN  F IH1 - N IH0 - G AH0 N\nFINNING  F IH1 - N IH0 NG\nFINNISH  F IH1 - N IH0 SH\nFINNS  F IH1 N Z\nFINO  F IY1 - N OW0\nFINOCCHIARO  F IY0 - N OW0 - K IY0 - AA1 - R OW0\nFINOCCHIO  F IY0 - N OW1 - K IY0 - OW0\nFINS  F IH1 N Z\nFINSCHER  F IH1 N - SH ER0\nFINSIDER  F IH1 N - S AY0 - D ER0\nFINSIDER'S  F IH1 N - S AY0 - D ER0 Z\nFINSTAD  F IH1 N - S T AH0 D\nFINSTER  F IH1 N - S T ER0\nFINSTROM  F IH1 N - S T R AH0 M\nFINTON  F IH1 N - T AH0 N\nFINUCANE  F IH1 - N AH0 - K EY0 N\nFINZEL  F IH1 N - Z AH0 L\nFIOLA  F IY0 - OW1 - L AH0\nFIONA  F IY0 - OW1 - N AH0\nFIORAVANTI  F IY0 - AO0 - R AA0 - V AA1 N - T IY0\nFIORE  F IY0 - AO1 - R IY0\nFIORELLA  F IY0 - AO0 - R EH1 - L AH0\nFIORELLI  F IY0 - AO0 - R EH1 - L IY0\nFIORELLO  F IY0 - AO0 - R EH1 - L OW0\nFIORENTINO  F IY0 - AO0 - R EH0 N - T IY1 - N OW0\nFIORENZA  F IY0 - AO0 - R EH1 N - Z AH0\nFIORETTI  F IY0 - AO0 - R EH1 - T IY0\nFIORI  F IY0 - AO1 - R IY0\nFIORILLO  F IY0 - AO0 - R IH1 - L OW0\nFIORINA  F IY0 - AO0 - R IY1 - N AH0\nFIORINI  F IY0 - AO0 - R IY1 - N IY0\nFIORINO  F IY0 - AO0 - R IY1 - N OW0\nFIORITO  F IY0 - AO0 - R IY1 - T OW0\nFIORUCCI  F IY0 - AO0 - R UW1 - CH IY0\nFIPPLE  F IH1 - P AH0 L\nFIPPS  F IH1 P S\nFIR  F ER1\nFIRE  F AY1 - ER0\nFIRE'S  F AY1 - ER0 Z\nFIRE(2)  F AY1 R\nFIREARM  F AY1 - ER0 - AA2 R M\nFIREARM(2)  F AY1 - R AA2 R M\nFIREARMS  F AY1 - ER0 - AA2 R M Z\nFIREARMS(2)  F AY1 - R AA2 R M Z\nFIREBALL  F AY1 - ER0 - B AO2 L\nFIREBALL(2)  F AY1 R - B AO2 L\nFIREBALLS  F AY1 - ER0 - B AO2 L Z\nFIREBALLS(2)  F AY1 R - B AO2 L Z\nFIREBAUGH  F AY1 R - B AO2\nFIREBIRD  F AY1 - ER0 - B ER2 D\nFIREBIRDS  F AY1 - ER0 - B ER2 D Z\nFIREBOMB  F AY1 - ER0 - B AA2 M\nFIREBOMB(2)  F AY1 R - B AA2 M\nFIREBOMBED  F AY1 R - B AA2 M D\nFIREBOMBING  F AY1 - ER0 - B AA2 - M IH0 NG\nFIREBOMBS  F AY1 R - B AA2 M Z\nFIREBRAND  F AY1 - ER0 - B R AE2 N D\nFIREBRANDS  F AY1 - ER0 - B R AE2 N D Z\nFIREBRICK  F AY1 - ER0 - B R IH2 K\nFIREBUG  F AY1 - ER0 - B AH2 G\nFIREBUSH  F AY1 - ER0 - B UH2 SH\nFIREBUSH'S  F AY1 R - B UH2 - SH IH0 Z\nFIRECRACKER  F AY1 - ER0 - K R AE2 - K ER0\nFIRECRACKERS  F AY1 - ER0 - K R AE2 - K ER0 Z\nFIRED  F AY1 - ER0 D\nFIREDAMP  F AY1 - ER0 - D AE2 M P\nFIREFIGHT  F AY1 R - F AY2 T\nFIREFIGHTER  F AY1 R - F AY2 - T ER0\nFIREFIGHTERS  F AY1 - ER0 - F AY2 - T ER0 Z\nFIREFIGHTING  F AY1 R - F AY2 - T IH0 NG\nFIREFIGHTS  F AY1 R - F AY2 T S\nFIREFLIES  F AY1 - ER0 - F L AY2 Z\nFIREFLY  F AY1 - ER0 - F L AY2\nFIREHOUSE  F AY1 - ER0 - HH AW2 S\nFIREHOUSES  F AY1 - ER0 - HH AW2 - S IH0 Z\nFIREMAN  F AY1 R - M AH0 N\nFIREMAN'S  F AY1 R - M AH0 N Z\nFIREMEN  F AY1 R - M AH0 N\nFIRENZA  F IH0 - R EH1 N - Z AH0\nFIRENZAS  F ER0 - EH1 N - Z AH0 Z\nFIREPLACE  F AY1 - ER0 - P L EY2 S\nFIREPLACES  F AY1 - ER0 - P L EY2 - S AH0 Z\nFIREPLACES(2)  F AY1 R - P L EY2 - S IH0 Z\nFIREPOWER  F AY1 R - P AW2 - ER0\nFIREPROOF  F AY1 - ER0 - P R UW2 F\nFIREPROOFING  F AY1 - ER0 - P R UW2 - F IH0 NG\nFIRES  F AY1 - ER0 Z\nFIRES(2)  F AY1 R Z\nFIRESIDE  F AY1 - ER0 - S AY2 D\nFIRESIGN  F AY1 - ER0 - S AY2 N\nFIRESIGN'S  F AY1 - ER0 - S AY2 N Z\nFIRESTINE  F AY0 R - S T IY1 - N IY0\nFIRESTONE  F AY1 R - S T OW2 N\nFIRESTONE'S  F AY1 R - S T OW2 N Z\nFIRESTORM  F AY1 R - S T AO2 R M\nFIREWALL  F AY1 R - W AA0 L\nFIREWEED  F AY1 - ER0 - W IY2 D\nFIREWOOD  F AY1 - ER0 - W UH2 D\nFIREWOOD(2)  F AY1 R - W UH2 D\nFIREWORK  F AY1 R - W ER2 K\nFIREWORKS  F AY1 R - W ER2 K S\nFIRFER  F ER1 - F ER0\nFIRING  F AY1 - R IH0 NG\nFIRING(2)  F AY1 - ER0 - R IH0 NG\nFIRINGS  F AY1 - R IH0 NG Z\nFIRINGS(2)  F AY1 - ER0 - R IH0 NG Z\nFIRINO  F IH0 - R IY1 - N OW0\nFIRKINS  F ER1 - K IH0 N Z\nFIRKUS  F ER1 - K IH0 S\nFIRM  F ER1 M\nFIRM'S  F ER1 M Z\nFIRMA  F ER1 - M AH0\nFIRMAN  F ER1 - M AH0 N\nFIRMANS  F ER1 - M AH0 N Z\nFIRMED  F ER1 M D\nFIRMER  F ER1 - M ER0\nFIRMEST  F ER1 - M AH0 S T\nFIRMIN  F ER1 - M IH0 N\nFIRMING  F ER1 - M IH0 NG\nFIRMLY  F ER1 M - L IY0\nFIRMNESS  F ER1 M - N AH0 S\nFIRMS  F ER1 M Z\nFIRMS'  F ER1 M Z\nFIRPO  F IH1 R - P OW0\nFIRS  F ER1 Z\nFIRST  F ER1 S T\nFIRST'S  F ER1 S T S\nFIRSTAR  F ER1 - S T AA2 R\nFIRSTBORN  F ER1 S T - B AO1 R N\nFIRSTFED  F ER1 S T - F EH2 D\nFIRSTHAND  F ER0 S T - HH AE1 N D\nFIRSTHAND(2)  F ER0 S - HH AE1 N D\nFIRSTHAND(3)  F ER1 S T - HH AE0 N D\nFIRSTHAND(4)  F ER1 S - HH AE0 N D\nFIRSTIER  F ER1 S T - Y ER0\nFIRSTIER(2)  F ER1 - S T IY0 - ER0\nFIRSTLY  F ER1 S T - L IY0\nFIRSTS  F ER1 S T S\nFIRSTS(2)  F ER1 S S\nFIRSTS(3)  F ER1 S\nFIRSTSOUTH  F ER1 S T - S AW2 TH\nFIRTH  F ER1 TH\nFIRZITE  F ER1 - Z AY2 T\nFIS  F IH1 S\nFISC  F IH1 S K\nFISCAL  F IH1 S - K AH0 L\nFISCALLY  F IH1 S - K AH0 - L IY0\nFISCH  F IH1 SH\nFISCHBACH  F IH1 SH - B AA2 K\nFISCHBACH'S  F IH1 SH - B AA2 K S\nFISCHBEIN  F IH1 SH - B AY2 N\nFISCHEL  F IH1 - SH AH0 L\nFISCHER  F IH1 - SH ER0\nFISCHER'S  F IH1 - SH ER0 Z\nFISCHETTI  F IY0 - S K EH1 - T IY0\nFISCHL  F IH1 S - K AH0 L\nFISCHLER  F IH1 - SH AH0 - L ER0\nFISCHLER(2)  F IH1 SH - L ER0\nFISCHMAN  F IH1 SH - M AH0 N\nFISCUS  F IH1 S - K AH0 S\nFISER  F AY1 - Z ER0\nFISERV  F IH1 - S ER0 V\nFISETTE  F IH0 - S EH1 T\nFISH  F IH1 SH\nFISH'S  F IH1 - SH IH0 Z\nFISHBACH  F IH1 SH - B AH2 K\nFISHBACK  F IH1 SH - B AE2 K\nFISHBAINE  F IH1 SH - B EY2 N\nFISHBAUGH  F IH1 SH - B AO2\nFISHBECK  F IH1 SH - B EH2 K\nFISHBEIN  F IH1 SH - B AY2 N\nFISHBOWL  F IH1 SH - B OW2 L\nFISHBURN  F IH1 SH - B ER2 N\nFISHBURNE  F IH1 SH - B ER0 N\nFISHEATER  F IH1 - SH IY2 - T ER0\nFISHEATERS  F IH1 - SH IY2 - T ER0 Z\nFISHED  F IH1 SH T\nFISHEL  F IH1 - SH AH0 L\nFISHELL  F IH1 - SH AH0 L\nFISHER  F IH1 - SH ER0\nFISHER'S  F IH1 - SH ER0 Z\nFISHERIES  F IH1 - SH ER0 - IY0 Z\nFISHERMAN  F IH1 - SH ER0 - M AE2 N\nFISHERMAN'S  F IH1 - SH ER0 - M AH0 N Z\nFISHERMAN(2)  F IH1 - SH ER0 - M AH0 N\nFISHERMEN  F IH1 - SH ER0 - M IH0 N\nFISHERS  F IH1 - SH ER0 Z\nFISHERY  F IH1 - SH ER0 - IY0\nFISHES  F IH1 - SH AH0 Z\nFISHES(2)  F IH1 - SH IH0 Z\nFISHING  F IH1 - SH IH0 NG\nFISHKILL  F IH1 SH - K IH2 L\nFISHKIN  F IH1 SH - K IH0 N\nFISHLOW  F IH1 SH - L OW2\nFISHMAN  F IH1 SH - M AE2 N\nFISHMAN(2)  F IH1 SH - M AH0 N\nFISHMONGER  F IH1 SH - M AA2 NG - G ER0\nFISHY  F IH1 - SH IY0\nFISK  F IH1 S K\nFISK'S  F IH1 S K S\nFISKE  F IH1 S K\nFISKE'S  F IH1 S K S\nFISLER  F IH1 - S AH0 - L ER0\nFISLER(2)  F IH1 S - L ER0\nFISONS  F AY1 - Z AH0 N Z\nFISS  F IH1 S\nFISSEL  F IH1 - S AH0 L\nFISSELL  F IH1 - S AH0 L\nFISSILE  F IH1 - S AH0 L\nFISSION  F IH1 - SH AH0 N\nFISSIONABLE  F IH1 - SH AH0 N - AH0 - B AH0 L\nFISSURE  F IH1 - SH ER0\nFISSURED  F IH1 - SH ER0 D\nFISSURES  F IH1 - SH ER0 Z\nFIST  F IH1 S T\nFISTED  F IH1 - S T IH0 D\nFISTER  F IH1 - S T ER0\nFISTFUL  F IH1 S T - F AH0 L\nFISTICUFF  F IH1 - S T IH0 - K AH2 F\nFISTICUFFS  F IH1 - S T IH0 - K AH2 F S\nFISTS  F IH1 S T S\nFIT  F IH1 T\nFITAK  F IH1 - T AE2 K\nFITCH  F IH1 CH\nFITCHBURG  F IH1 CH - B ER0 G\nFITCHETT  F IH1 - CH IH0 T\nFITE  F AY1 T\nFITES  F AY1 T S\nFITFUL  F IH1 T - F AH0 L\nFITFULLY  F IH1 T - F AH0 - L IY0\nFITHE  F IH1 TH\nFITHIAN  F IH1 - TH IY0 - AH0 N\nFITNESS  F IH1 T - N AH0 S\nFITS  F IH1 T S\nFITSWATER  F IH1 T - S W AO2 - T ER0\nFITT  F IH1 T\nFITTED  F IH1 - T AH0 D\nFITTED(2)  F IH1 - T IH0 D\nFITTER  F IH1 - T ER0\nFITTERER  F IH1 - T ER0 - ER0\nFITTEST  F IH1 - T AH0 S T\nFITTING  F IH1 - T IH0 NG\nFITTINGLY  F IH1 - T IH0 NG - L IY0\nFITTINGS  F IH1 - T IH0 NG Z\nFITTIPALDI  F IH0 - T IH0 - P AA1 L - D IY0\nFITTON  F IH1 - T AH0 N\nFITTRO  F IH1 - T R OW0\nFITTS  F IH1 T S\nFITZ  F IH1 T S\nFITZCO  F IH1 T - S K OW0\nFITZER  F IH1 T - S ER0\nFITZGERALD  F IH0 T - S JH EH1 - R AH0 L D\nFITZGERALD'S  F IH0 T - S JH EH1 - R AH0 L D Z\nFITZGIBBON  F IH2 T S - JH IH1 - B AH0 N\nFITZGIBBONS  F IH2 T S - JH IH1 - B AH0 N Z\nFITZHARRIS  F IH0 T S - HH AE1 - R IH0 S\nFITZHENRY  F IH0 T S - HH EH1 - N ER0 - IY0\nFITZHENRY(2)  F IH0 T S - HH EH1 N - R IY0\nFITZHUGH  F IH0 T S - HH Y UW1\nFITZMAURICE  F IH0 T S - M AO1 - R IH0 S\nFITZMORRIS  F IH0 T S - M AO1 - R IH0 S\nFITZNER  F IH1 T S - N ER0\nFITZPATRICK  F IH2 T - S P AE1 - T R IH0 K\nFITZROY  F IH1 T - S R OY2\nFITZSIMMONS  F IH0 T - S IH1 - M AH0 N Z\nFITZSIMONS  F IH0 T - S IH1 - M AH0 N Z\nFITZWATER  F IH1 T - S W AO2 - T ER0\nFITZWATER'S  F IH1 T S - W AO2 - T ER0 Z\nFITZWILLIAM  F IH0 T - S W IH1 - L Y AH0 M\nFIUMARA  F IY2 - UW0 - M AA1 - R AH0\nFIVE  F AY1 V\nFIVE'S  F AY1 V Z\nFIVEASH  F AY1 - V AE2 SH\nFIVECOAT  F AY1 V - K OW2 T\nFIVEFOLD  F AY1 V - F OW2 L D\nFIVES  F AY1 V Z\nFIX  F IH1 K S\nFIXABLE  F IH1 K - S AH0 - B AH0 L\nFIXATE  F IH1 K - S EY2 T\nFIXATED  F IH1 K - S EY2 - T IH0 D\nFIXATION  F IH0 K - S EY1 - SH AH0 N\nFIXATIVE  F IH1 K - S AH0 - T IH0 V\nFIXATIVES  F IH1 K - S AH0 - T IH0 V Z\nFIXED  F IH1 K S T\nFIXER  F IH1 K - S ER0\nFIXES  F IH1 K - S IH0 Z\nFIXING  F IH1 K - S IH0 NG\nFIXINGS  F IH1 K - S IH0 NG Z\nFIXLER  F IH1 K S - L ER0\nFIXTURE  F IH1 K S - CH ER0\nFIXTURES  F IH1 K S - CH ER0 Z\nFIZER  F AY1 - Z ER0\nFIZZ  F IH1 Z\nFIZZLE  F IH1 - Z AH0 L\nFIZZLED  F IH1 - Z AH0 L D\nFIZZLES  F IH1 - Z AH0 L Z\nFIZZLING  F IH1 - Z AH0 L - IH0 NG\nFIZZLING(2)  F IH1 Z - L IH0 NG\nFJELD  F Y EH1 L D\nFJELSTAD  F Y EH1 L - S T AH0 D\nFJORD  F Y AO1 R D\nFJORDS  F Y AO1 R D Z\nFLAB  F L AE1 B\nFLABBERGAST  F L AE1 - B ER0 - G AE2 S T\nFLABBERGASTED  F L AE1 - B ER0 - G AE2 - S T IH0 D\nFLABBY  F L AE1 - B IY0\nFLACCID  F L AE1 K - S IH0 D\nFLACCID(2)  F L AE1 - K IH0 D\nFLACH  F L AE1 CH\nFLACK  F L AE1 K\nFLAD  F L AE1 D\nFLAG  F L AE1 G\nFLAGELLA  F L AH0 - JH EH1 - L AH0\nFLAGELLATE  F L AE1 - JH AH0 - L EY2 T\nFLAGELLATED  F L AE1 - JH AH0 - L EY2 - T AH0 D\nFLAGELLUM  F L AH0 - JH EH1 - L AH0 M\nFLAGEOLET  F L AE2 - JH AH0 - L EH1 T\nFLAGG  F L AE1 G\nFLAGGED  F L AE1 G D\nFLAGGING  F L AE1 - G IH0 NG\nFLAGLER  F L AE1 G - L ER0\nFLAGPOLE  F L AE1 G - P OW2 L\nFLAGPOLES  F L AE1 G - P OW2 L Z\nFLAGRANT  F L EY1 - G R AH0 N T\nFLAGRANTLY  F L EY1 - G R AH0 N T - L IY0\nFLAGS  F L AE1 G Z\nFLAGSHIP  F L AE1 G - SH IH2 P\nFLAGSHIPS  F L AE1 G - SH IH2 P S\nFLAGSTAFF  F L AE1 G - S T AE2 F\nFLAGSTAR  F L AE1 G - S T AA2 R\nFLAGSTONE  F L AE1 G - S T OW2 N\nFLAHARTY  F L EH1 R - T IY0\nFLAHERTY  F L EH1 R - T IY0\nFLAHIVE  F L AE1 - HH IH0 V\nFLAIG  F L EY1 G\nFLAIL  F L EY1 L\nFLAILING  F L EY1 - L IH0 NG\nFLAIM  F L EY1 M\nFLAIR  F L EH1 R\nFLAK  F L AE1 K\nFLAKE  F L EY1 K\nFLAKES  F L EY1 K S\nFLAKING  F L EY1 - K IH0 NG\nFLAKY  F L EY1 - K IY0\nFLAM  F L AE1 M\nFLAMBOYANCE  F L AE0 M - B OY1 - AH0 N S\nFLAMBOYANT  F L AE0 M - B OY1 - AH0 N T\nFLAMBOYANTLY  F L AE0 M - B OY1 - AH0 N T - L IY0\nFLAME  F L EY1 M\nFLAMED  F L EY1 M D\nFLAMEMASTER  F L EY1 - M AE2 - S T ER0\nFLAMENCO  F L AH0 - M EH1 NG - K OW2\nFLAMER  F L EY1 - M ER0\nFLAMES  F L EY1 M Z\nFLAMING  F L EY1 - M IH0 NG\nFLAMINGO  F L AH0 - M IH1 NG - G OW0\nFLAMINGOS  F L AH0 - M IH1 NG - G OW0 Z\nFLAMINIAN  F L AH0 - M IH1 - N IY0 - AH0 N\nFLAMM  F L AE1 M\nFLAMMABILITY  F L AE2 - M AH0 - B IH1 - L IH0 - T IY0\nFLAMMABLE  F L AE1 - M AH0 - B AH0 L\nFLAMMANG  F L AE1 - M AH0 NG\nFLAMMER  F L AE1 - M ER0\nFLAMMIA  F L AE1 - M IY0 - AH0\nFLAMSON  F L AE1 M - S AH0 N\nFLAN  F L AE1 N\nFLANAGAN  F L AE1 - N AH0 - G AH0 N\nFLANAGIN  F L AE1 - N AH0 - G IH0 N\nFLANARY  F L AE1 - N ER0 - IY0\nFLANDERS  F L AE1 N - D ER0 Z\nFLANERY  F L EY1 - N ER0 - IY0\nFLANGE  F L AE1 N JH\nFLANGES  F L AE1 N - JH AH0 Z\nFLANIGAN  F L AE1 - N IH0 - G AH0 N\nFLANIGAN'S  F L AE1 - N IH0 - G AH0 N Z\nFLANK  F L AE1 NG K\nFLANKED  F L AE1 NG K T\nFLANKING  F L AE1 NG - K IH0 NG\nFLANKS  F L AE1 NG K S\nFLANN  F L AE1 N\nFLANNA  F L AE1 - N AH0\nFLANNAGAN  F L AE1 - N AH0 - G AH0 N\nFLANNEL  F L AE1 - N AH0 L\nFLANNELED  F L AE1 - N AH0 L D\nFLANNELS  F L AE1 - N AH0 L Z\nFLANNERY  F L AE1 - N ER0 - IY0\nFLANNIGAN  F L AE1 - N IH0 - G AH0 N\nFLANSBURG  F L AE1 N S - B ER0 G\nFLAP  F L AE1 P\nFLAPLIKE  F L AE1 P - L AY2 K\nFLAPPED  F L AE1 P T\nFLAPPER  F L AE1 - P ER0\nFLAPPERS  F L AE1 - P ER0 Z\nFLAPPING  F L AE1 - P IH0 NG\nFLAPS  F L AE1 P S\nFLARE  F L EH1 R\nFLARED  F L EH1 R D\nFLARES  F L EH1 R Z\nFLARING  F L EH1 - R IH0 NG\nFLASCH  F L AE1 SH\nFLASH  F L AE1 SH\nFLASH'S  F L AE1 - SH IH0 Z\nFLASHBACK  F L AE1 SH - B AE2 K\nFLASHBACKS  F L AE1 SH - B AE2 K S\nFLASHBULB  F L AE1 SH - B AH0 L B\nFLASHDANCE  F L AE1 SH - D AE2 N S\nFLASHED  F L AE1 SH T\nFLASHER  F L AE1 - SH ER0\nFLASHER'S  F L AE1 - SH ER0 Z\nFLASHERS  F L AE1 - SH ER0 Z\nFLASHES  F L AE1 - SH IH0 Z\nFLASHIER  F L AE1 - SH IY0 - ER0\nFLASHING  F L AE1 - SH IH0 NG\nFLASHLIGHT  F L AE1 SH - L AY2 T\nFLASHLIGHTS  F L AE1 SH - L AY2 T S\nFLASHPOINT  F L AE1 SH - P OY2 N T\nFLASHPOINTS  F L AE1 SH - P OY2 N T S\nFLASHY  F L AE1 - SH IY0\nFLASK  F L AE1 S K\nFLASKS  F L AE1 S K S\nFLAT  F L AE1 T\nFLATAU  F L AE1 - T AW0\nFLATBED  F L AE1 T - B EH2 D\nFLATBOAT  F L AE1 T - B OW2 T\nFLATBUSH  F L AE1 T - B UH2 SH\nFLATEN  F L AE1 - T AH0 N\nFLATER  F L EY1 - T ER0\nFLATFISH  F L AE1 T - F IH2 SH\nFLATFISHES  F L AE1 T - F IH2 - SH IH0 Z\nFLATH  F L AE1 TH\nFLATHEAD  F L AE1 T - HH EH2 D\nFLATHEADS  F L AE1 T - HH EH2 D Z\nFLATHERS  F L AE1 - DH ER0 Z\nFLATLAND  F L AE1 T - L AE2 N D\nFLATLANDS  F L AE1 T - L AE0 N D Z\nFLATLEY  F L AE1 T - L IY0\nFLATLY  F L AE1 T - L IY0\nFLATNESS  F L AE1 T - N AH0 S\nFLATS  F L AE1 T S\nFLATT  F L AE1 T\nFLATTEN  F L AE1 - T AH0 N\nFLATTENED  F L AE1 - T AH0 N D\nFLATTENING  F L AE1 - T AH0 - N IH0 NG\nFLATTENING(2)  F L AE1 T - N IH0 NG\nFLATTER  F L AE1 - T ER0\nFLATTERED  F L AE1 - T ER0 D\nFLATTERING  F L AE1 - T ER0 - IH0 NG\nFLATTERY  F L AE1 - T ER0 - IY0\nFLATTISH  F L AE1 - T IH0 SH\nFLATULENT  F L AE1 - CH AH0 - L AH0 N T\nFLATWARE  F L AE1 T - W EH2 R\nFLATWORM  F L AE1 T - W ER0 M\nFLAUBERT  F L AW1 - B ER0 T\nFLAUGH  F L AO1\nFLAUGHER  F L AO1 - ER0\nFLAUM  F L AO1 M\nFLAUNT  F L AO1 N T\nFLAUNTED  F L AO1 N - T IH0 D\nFLAUNTING  F L AO1 N - T IH0 NG\nFLAUNTS  F L AO1 N T S\nFLAVELL  F L AE1 - V AH0 L\nFLAVIA  F L AE1 - V IY0 - AH0\nFLAVIER  F L EY1 - V Y ER0\nFLAVIER(2)  F L AE1 - V Y ER0\nFLAVIN  F L EY1 - V IH0 N\nFLAVIO  F L AA1 - V IY0 - OW0\nFLAVIUS  F L EY1 - V IY0 - IH0 S\nFLAVOR  F L EY1 - V ER0\nFLAVORED  F L EY1 - V ER0 D\nFLAVORFUL  F L EY1 - V ER0 - F AH0 L\nFLAVORING  F L EY1 - V ER0 - IH0 NG\nFLAVORINGS  F L EY1 - V ER0 - IH0 NG Z\nFLAVORIST  F L EY1 - V ER0 - IH0 S T\nFLAVORISTS  F L EY1 - V ER0 - IH0 S T S\nFLAVORISTS(2)  F L EY1 - V ER0 - IH0 S S\nFLAVORISTS(3)  F L EY1 - V ER0 - IH0 S\nFLAVORS  F L EY1 - V ER0 Z\nFLAW  F L AO1\nFLAWED  F L AO1 D\nFLAWLESS  F L AO1 - L AH0 S\nFLAWLESSLY  F L AO1 - L AH0 S - L IY0\nFLAWN  F L AO1 N\nFLAWS  F L AO1 Z\nFLAX  F L AE1 K S\nFLAXMAN  F L AE1 K S - M AH0 N\nFLAXSEED  F L AE1 K - S IY2 D\nFLAY  F L EY1\nFLAYED  F L EY1 D\nFLEA  F L IY1\nFLEAGLE  F L IY1 - G AH0 L\nFLEAS  F L IY1 Z\nFLECK  F L EH1 K\nFLECKENSTEIN  F L EH1 - K AH0 N - S T AY2 N\nFLECKENSTEIN(2)  F L EH1 - K AH0 N - S T IY2 N\nFLECKS  F L EH1 K S\nFLED  F L EH1 D\nFLEDERMAUS  F L EH1 - D ER0 - M AW0 S\nFLEDGE  F L EH1 JH\nFLEDGED  F L EH1 JH D\nFLEDGING  F L EH1 - JH IH0 NG\nFLEDGLING  F L EH1 JH - L IH0 NG\nFLEE  F L IY1\nFLEECE  F L IY1 S\nFLEECED  F L IY1 S T\nFLEECY  F L IY1 - S IY0\nFLEEGER  F L IY1 - G ER0\nFLEEING  F L IY1 - IH0 NG\nFLEEK  F L IY1 K\nFLEEMAN  F L IY1 - M AH0 N\nFLEENER  F L IY1 - N ER0\nFLEENOR  F L IY1 - N ER0\nFLEER  F L IH1 R\nFLEES  F L IY1 Z\nFLEET  F L IY1 T\nFLEET'S  F L IY1 T S\nFLEETING  F L IY1 - T IH0 NG\nFLEETINGLY  F L IY1 - T IH0 NG - L IY0\nFLEETS  F L IY1 T S\nFLEETWOOD  F L IY1 T - W UH2 D\nFLEGAL  F L IY1 - G AH0 L\nFLEGEL  F L EH1 - G AH0 L\nFLEHARTY  F L EH1 - HH AA0 R - T IY0\nFLEIG  F L IY1 G\nFLEISCH  F L AY1 SH\nFLEISCHAUER  F L AY1 - SH AW0 - ER0\nFLEISCHER  F L AY1 - SH ER0\nFLEISCHHACKER  F L AY1 SH - HH AH0 - K ER0\nFLEISCHMAN  F L AY1 SH - M AH0 N\nFLEISCHMANN  F L AY1 SH - M AH0 N\nFLEISHER  F L AY1 - SH ER0\nFLEISHMAN  F L AY1 SH - M AH0 N\nFLEISS  F L AY1 SH\nFLEISS'  F L AY1 SH\nFLEISS'(2)  F L AY1 S\nFLEISS'S  F L AY1 - SH IH0 Z\nFLEISS'S(2)  F L AY1 - S IH0 Z\nFLEISS(2)  F L AY1 S\nFLEISSNER  F L AY1 S - N ER0\nFLEITAS  F L AY1 - T AH0 S\nFLEMING  F L EH1 - M IH0 NG\nFLEMING'S  F L EH1 - M IH0 NG Z\nFLEMINGS  F L EH1 - M IH0 NG Z\nFLEMINGTON  F L EH1 - M IH0 NG - T AH0 N\nFLEMISH  F L EH1 - M IH0 SH\nFLEMISTER  F L EH1 - M IH0 - S T ER0\nFLEMMER  F L EH1 - M ER0\nFLEMMING  F L EH1 - M IH0 NG\nFLEMONS  F L EH1 - M AH0 N Z\nFLENER  F L IY1 - N ER0\nFLENNER  F L EH1 - N ER0\nFLENNIKEN  F L EH1 - N IH0 - K AH0 N\nFLESCH  F L EH1 SH\nFLESH  F L EH1 SH\nFLESHED  F L EH1 SH T\nFLESHER  F L EH1 - SH ER0\nFLESHMAN  F L EH1 SH - M AH0 N\nFLESHY  F L EH1 - SH IY0\nFLESNER  F L EH1 S - N ER0\nFLESSNER  F L EH1 S - N ER0\nFLETA  F L IY1 - T AH0\nFLETCHALL  F L EH1 - CH AH0 L\nFLETCHER  F L EH1 - CH ER0\nFLETT  F L EH1 T\nFLEUR  F L ER1\nFLEURETTE  F L ER0 - EH1 T\nFLEURI  F L ER1 - R IY1\nFLEURI(2)  F L UH1 - R IY1\nFLEURY  F L UH1 - R IY0\nFLEW  F L UW1\nFLEWELLEN  F L UW2 - EH1 - L AH0 N\nFLEWELLING  F L UW2 - EH1 - L IH0 NG\nFLEX  F L EH1 K S\nFLEXED  F L EH1 K S T\nFLEXER  F L EH1 K - S ER0\nFLEXES  F L EH1 K - S IH0 Z\nFLEXI  F L EH1 K - S IY0\nFLEXIBILITY  F L EH2 K - S AH0 - B IH1 - L AH0 - T IY0\nFLEXIBLE  F L EH1 K - S AH0 - B AH0 L\nFLEXIBLY  F L EH1 K - S AH0 - B L IY0\nFLEXING  F L EH1 K - S IH0 NG\nFLEXION  F L EH1 K - SH AH0 N\nFLEXNOR  F L EH1 K S - N AO0 R\nFLEXTIME  F L EH1 K - S T AY2 M\nFLEXTRONIC  F L EH2 K - S T R AA1 - N IH0 K\nFLEXTRONICS  F L EH2 K - S T R AA1 - N IH0 K S\nFLICEK  F L IH1 - CH EH0 K\nFLICK  F L IH1 K\nFLICKER  F L IH1 - K ER0\nFLICKERED  F L IH1 - K ER0 D\nFLICKERING  F L IH1 - K ER0 - IH0 NG\nFLICKERS  F L IH1 - K ER0 Z\nFLICKING  F L IH1 - K IH0 NG\nFLICKINGER  F L IH1 - K IH0 - NG ER0\nFLICKS  F L IH1 K S\nFLIED  F L AY1 D\nFLIEGEL  F L IY1 - G AH0 L\nFLIER  F L AY1 - ER0\nFLIERS  F L AY1 - ER0 Z\nFLIES  F L AY1 Z\nFLIGHT  F L AY1 T\nFLIGHT'S  F L AY1 T S\nFLIGHTLESS  F L AY1 T - L AH0 S\nFLIGHTS  F L AY1 T S\nFLIGHTSAFETY  F L AY1 T - S EY1 F - T IY0\nFLIGHTY  F L AY1 - T IY0\nFLIM  F L IH1 M\nFLIMFLAM  F L IH1 M - F L AE2 M\nFLIMSIEST  F L IH1 M - Z IY0 - AH0 S T\nFLIMSY  F L IH1 M - Z IY0\nFLINCH  F L IH1 N CH\nFLINCHBAUGH  F L IH1 N CH - B AO2\nFLINCHED  F L IH1 N CH T\nFLINCHING  F L IH1 N - CH IH0 NG\nFLINCHUM  F L IH1 N - K AH0 M\nFLINDERS  F L IH1 N - D ER0 Z\nFLING  F L IH1 NG\nFLINGING  F L IH1 - NG IH0 NG\nFLINGS  F L IH1 NG Z\nFLINK  F L IH1 NG K\nFLINN  F L IH1 N\nFLINNER  F L IH1 - N ER0\nFLINT  F L IH1 N T\nFLINT'S  F L IH1 N T S\nFLINTLOCK  F L IH1 N T - L AA2 K\nFLINTLOCKS  F L IH1 N T - L AA2 K S\nFLINTOFF  F L IH1 N - T AO0 F\nFLINTS  F L IH1 N T S\nFLINTSTONE  F L IH1 N T - S T OW1 N\nFLINTSTONES  F L IH1 N T - S T OW1 N Z\nFLINTY  F L IH1 N - T IY0\nFLIP  F L IH1 P\nFLIPPANT  F L IH1 - P AH0 N T\nFLIPPED  F L IH1 P T\nFLIPPEN  F L IH1 - P AH0 N\nFLIPPER  F L IH1 - P ER0\nFLIPPERS  F L IH1 - P ER0 Z\nFLIPPIN  F L IH1 - P IH0 N\nFLIPPING  F L IH1 - P IH0 NG\nFLIPPO  F L IH1 - P OW0\nFLIPS  F L IH1 P S\nFLIRT  F L ER1 T\nFLIRTATION  F L ER0 - T EY1 - SH AH0 N\nFLIRTATIONS  F L ER0 - T EY1 - SH AH0 N Z\nFLIRTATIOUS  F L ER0 - T EY1 - SH AH0 S\nFLIRTED  F L ER1 - T IH0 D\nFLIRTING  F L ER1 - T IH0 NG\nFLIRTS  F L ER1 T S\nFLIS  F L IH1 S\nFLISS  F L IH1 S\nFLIT  F L IH1 T\nFLITTING  F L IH1 - T IH0 NG\nFLO  F L OW1\nFLOAT  F L OW1 T\nFLOATED  F L OW1 - T AH0 D\nFLOATED(2)  F L OW1 - T IH0 D\nFLOATER  F L OW1 - T ER0\nFLOATERS  F L OW1 - T ER0 Z\nFLOATING  F L OW1 - T IH0 NG\nFLOATS  F L OW1 T S\nFLOC  F L AA1 K\nFLOCK  F L AA1 K\nFLOCKED  F L AA1 K T\nFLOCKHART  F L AA1 K - HH AA2 R T\nFLOCKING  F L AA1 - K IH0 NG\nFLOCKS  F L AA1 K S\nFLODIN  F L OW1 - D IH0 N\nFLOE  F L OW1\nFLOERSHEIM  F L AO1 R - SH AY2 M\nFLOG  F L AA1 G\nFLOGGING  F L AA1 - G IH0 NG\nFLOHR  F L AA1 R\nFLOIRENDA  F L OY2 - R EH1 N - D AH0\nFLOM  F L AA1 M\nFLONORIAL  F L AA2 - N AO1 - R IY0 - AH0 L\nFLOOD  F L AH1 D\nFLOODED  F L AH1 - D AH0 D\nFLOODED(2)  F L AH1 - D IH0 D\nFLOODGATE  F L AH1 D - G EY2 T\nFLOODGATES  F L AH1 D - G EY2 T S\nFLOODING  F L AH1 - D IH0 NG\nFLOODLIGHT  F L AH1 D - L AY2 T\nFLOODLIGHTS  F L AH1 D - L AY2 T S\nFLOODPLAIN  F L AH1 D - P L EY2 N\nFLOODS  F L AH1 D Z\nFLOODWATER  F L AH1 D - W AO2 - T ER0\nFLOODWATERS  F L AH1 D - W AO2 - T ER0 Z\nFLOOK  F L UH1 K\nFLOOR  F L AO1 R\nFLOORBOARD  F L AO1 R - B AO2 R D\nFLOORBOARDS  F L AO1 R - B AO2 R D Z\nFLOORED  F L AO1 R D\nFLOORING  F L AO1 - R IH0 NG\nFLOORS  F L AO1 R Z\nFLOP  F L AA1 P\nFLOPPED  F L AA1 P T\nFLOPPING  F L AA1 - P IH0 NG\nFLOPPY  F L AA1 - P IY0\nFLOPS  F L AA1 P S\nFLOPTICAL  F L AA1 P - T IH0 - K AH0 L\nFLOR  F L AO1 R\nFLORA  F L AO1 - R AH0\nFLORAFAX  F L AO1 - R AH0 - F AE2 K S\nFLORAL  F L AO1 - R AH0 L\nFLORALLY  F L AO1 - R AH0 - L IY0\nFLORANCE  F L AO1 - R AH0 N S\nFLORE  F L AO1 R\nFLOREA  F L AO1 - R IY0 - AH0\nFLOREK  F L AO1 - R IH0 K\nFLOREN  F L AO1 - R AH0 N\nFLORENCE  F L AO1 - R AH0 N S\nFLORENCE'S  F L AO1 - R AH0 N - S IH0 Z\nFLORENTINA  F L AO2 - R EH0 N - T IY1 - N AH0\nFLORENTINE  F L AO1 - R AH0 N - T IY2 N\nFLORENTINO  F L AO0 - R EH0 N - T IY1 - N OW0\nFLORER  F L AO1 - R ER0\nFLORES  F L AO1 - R EH2 Z\nFLORESCUE  F L AO1 - R AH0 - S K Y UW0\nFLORESHEIM  F L AO1 R - SH AY2 M\nFLOREY  F L AO1 - R IY0\nFLOREZ  F L AO0 - R EH1 Z\nFLORI  F L AO1 - R IY0\nFLORIA  F L AO1 - R IY0 - AH0\nFLORIAN  F L AO1 - R IY0 - AH0 N\nFLORID  F L AO1 - R AH0 D\nFLORIDA  F L AO1 - R AH0 - D AH0\nFLORIDA'S  F L AO1 - R IH0 - D AH0 Z\nFLORIDA'S(2)  F L AA1 - R IH0 - D AH0 Z\nFLORIDA'S(3)  F L AO1 - R AH0 - D AH0 Z\nFLORIDA(2)  F L AO1 - R IH0 - D AH0\nFLORIDA(3)  F L AA1 - R AH0 - D AH0\nFLORIDA(4)  F L AA1 - R IH0 - D AH0\nFLORIDABANC  F L AO1 - R AH0 - D AH0 - B AE2 NG K\nFLORIDIAN  F L AO0 - R IH1 - D IY0 - AH0 N\nFLORIDIANS  F L AO0 - R IH1 - D IY0 - AH0 N Z\nFLORIN  F L AO1 - R IH0 N\nFLORINDA  F L AO0 - R IY1 N - D AH0\nFLORINE  F L AO0 - R IY1 - N IY0\nFLORIO  F L AO1 - R IY0 - OW0\nFLORIO'S  F L AO1 - R IY0 - OW0 Z\nFLORIS  F L AO1 - R IH0 S\nFLORIST  F L AA1 - R AH0 S T\nFLORIST(2)  F L AO1 - R AH0 S T\nFLORISTS  F L AO1 - R IH0 S T S\nFLORISTS(2)  F L AO1 - R IH0 S S\nFLORISTS(3)  F L AO1 - R IH0 S\nFLORO  F L AO1 - R OW0\nFLORRIE  F L AO1 - R IY0\nFLORRY  F L AO1 - R IY0\nFLORSHEIM  F L AO1 R - SH AY2 M\nFLORY  F L AO1 - R IY0\nFLOSS  F L AA1 S\nFLOSSIE  F L AO1 - S IY0\nFLOTATION  F L OW0 - T EY1 - SH AH0 N\nFLOTILLA  F L OW0 - T IH1 - L AH0\nFLOTOW  F L AA1 - T AW0\nFLOTSAM  F L AA1 T - S AH0 M\nFLOTT  F L AA1 T\nFLOTTA  F L AA1 - T AH0\nFLOUNCE  F L AW1 N S\nFLOUNCES  F L AW1 N - S IH0 Z\nFLOUNDER  F L AW1 N - D ER0\nFLOUNDERED  F L AW1 N - D ER0 D\nFLOUNDERING  F L AW1 N - D ER0 - IH0 NG\nFLOUNDERS  F L AW1 N - D ER0 Z\nFLOUR  F L AW1 - ER0\nFLOUR(2)  F L AW1 R\nFLOURISH  F L ER1 - IH0 SH\nFLOURISHED  F L ER1 - IH0 SH T\nFLOURISHES  F L ER1 - IH0 - SH AH0 Z\nFLOURISHES(2)  F L ER1 - IH0 - SH IH0 Z\nFLOURISHING  F L ER1 - IH0 - SH IH0 NG\nFLOURNOY  F L UH0 R - N OY1\nFLOURS  F L AW1 - ER0 Z\nFLOUT  F L AW1 T\nFLOUTED  F L AW1 - T IH0 D\nFLOUTING  F L AW1 - T IH0 NG\nFLOW  F L OW1\nFLOWE  F L OW1\nFLOWED  F L OW1 D\nFLOWER  F L AW1 - ER0\nFLOWERED  F L AW1 - ER0 D\nFLOWERING  F L AW1 - ER0 - IH0 NG\nFLOWERPOT  F L AW1 - ER0 - P AA2 T\nFLOWERS  F L AW1 - ER0 Z\nFLOWERS'  F L AW1 - ER0 Z\nFLOWERY  F L AW1 - ER0 - IY0\nFLOWING  F L OW1 - IH0 NG\nFLOWN  F L OW1 N\nFLOWS  F L OW1 Z\nFLOWTON  F L OW1 - T AH0 N\nFLOY  F L OY1\nFLOYD  F L OY1 D\nFLU  F L UW1\nFLUBS  F L AH1 B Z\nFLUCK  F L AH1 K\nFLUCTUATE  F L AH1 K - CH AH0 W - EY2 T\nFLUCTUATED  F L AH1 K - CH AH0 W - EY2 - T IH0 D\nFLUCTUATES  F L AH1 K - CH UW0 - EY2 T S\nFLUCTUATING  F L AH1 K - CH AH0 W - EY2 - T IH0 NG\nFLUCTUATION  F L AH2 K - CH UW0 - EY1 - SH AH0 N\nFLUCTUATIONS  F L AH2 K - CH UW0 - EY1 - SH AH0 N Z\nFLUD  F L AH1 D\nFLUDD  F L AH1 D\nFLUE  F L UW1\nFLUEGEL  F L UH1 - G AH0 L\nFLUEGGE  F L UW1 G\nFLUENCY  F L UW1 - AH0 N - S IY0\nFLUENT  F L UW1 - AH0 N T\nFLUENTLY  F L UW1 - AH0 N T - L IY0\nFLUET  F L UW1 T\nFLUFF  F L AH1 F\nFLUFFED  F L AH1 F T\nFLUFFIER  F L AH1 - F IY0 - ER0\nFLUFFS  F L AH1 F S\nFLUFFY  F L AH1 - F IY0\nFLUHARTY  F L AH1 - ER0 - T IY0\nFLUHR  F L ER1\nFLUHR(2)  F L UH1 R\nFLUID  F L UW1 - AH0 D\nFLUID(2)  F L UW1 - IH0 D\nFLUIDITY  F L UW0 - IH1 - D AH0 - T IY0\nFLUIDS  F L UW1 - AH0 D Z\nFLUIDS(2)  F L UW1 - IH0 D Z\nFLUITT  F L UW1 - AH0 T\nFLUKE  F L UW1 K\nFLUKER  F L UW1 - K ER0\nFLUKES  F L UW1 K S\nFLULIKE  F L UW1 - L AY2 K\nFLUME  F L UW1 M\nFLUMENBAUM  F L UW1 - M AH0 N - B AW2 M\nFLUMES  F L UW1 M Z\nFLUMMOX  F L AH0 - M AO1 K S\nFLUMMOXED  F L AH0 - M AO1 K S T\nFLUNG  F L AH1 NG\nFLUNK  F L AH1 NG K\nFLUNKED  F L AH1 NG K T\nFLUNKING  F L AH1 NG - K IH0 NG\nFLUNKS  F L AH1 NG K S\nFLUOR  F L UW1 - ER0\nFLUOR'S  F L UW1 - ER0 Z\nFLUORESCE  F L UH2 - R EH1 S\nFLUORESCE(2)  F L AO2 - R EH1 S\nFLUORESCENT  F L UH2 - R EH1 - S AH0 N T\nFLUORESCENT(2)  F L AO2 - R EH1 - S AH0 N T\nFLUORESCENTLY  F L UH2 - R EH1 - S AH0 N T - L IY0\nFLUORESCENTLY(2)  F L AO2 - R EH1 - S AH0 N T - L IY0\nFLUORESCENTS  F L UH2 - R EH1 - S AH0 N T S\nFLUORESCENTS(2)  F L AO2 - R EH1 - S AH0 N T S\nFLUORIDATION  F L UH2 - R AH0 - D EY1 - SH AH0 N\nFLUORIDATION(2)  F L AO2 - R AH0 - D EY1 - SH AH0 N\nFLUORIDE  F L UH1 - R AY2 D\nFLUORIDE(2)  F L AO1 - R AY2 D\nFLUORIDES  F L UH1 - R AY2 D Z\nFLUORIDES(2)  F L AO1 - R AY2 D Z\nFLUORINE  F L UH1 - R IY2 N\nFLUORINE(2)  F L AO1 - R IY2 N\nFLUORITE  F L UH1 - R AY2 T\nFLUORITE(2)  F L AO1 - R AY2 T\nFLUOROCARBON  F L UH2 - R OW0 - K AA1 R - B AH0 N\nFLUOROCARBON(2)  F L AO2 - R OW0 - K AA1 R - B AH0 N\nFLUOROCARBONS  F L UH2 - R OW0 - K AA1 R - B AH0 N Z\nFLUOROCARBONS(2)  F L AO2 - R OW0 - K AA1 R - B AH0 N Z\nFLUOROMETER  F L UH2 - R AA1 - M AH0 - T ER0\nFLUOROMETER(2)  F L AO2 - R AA1 - M AH0 - T ER0\nFLUORSPAR  F L UH1 R - S P AA2 R\nFLUORSPAR(2)  F L AO1 R - S P AA2 R\nFLURRIED  F L ER1 - IY0 D\nFLURRIES  F L ER1 - IY0 Z\nFLURRY  F L ER1 - IY0\nFLURY  F L UW1 - R IY0\nFLURY(2)  F L ER1 - IY0\nFLUS  F L UW1 Z\nFLUSH  F L AH1 SH\nFLUSHED  F L AH1 SH T\nFLUSHES  F L AH1 - SH IH0 Z\nFLUSHING  F L AH1 - SH IH0 NG\nFLUSTER  F L AH1 - S T ER0\nFLUSTERED  F L AH1 - S T ER0 D\nFLUTE  F L UW1 T\nFLUTES  F L UW1 T S\nFLUTIST  F L UW1 - T IH0 S T\nFLUTTER  F L AH1 - T ER0\nFLUTTERED  F L AH1 - T ER0 D\nFLUTTERING  F L AH1 - T ER0 - IH0 NG\nFLUTTERS  F L AH1 - T ER0 Z\nFLUTY  F L UW1 - T IY0\nFLUVIAL  F L UW1 - V IY0 - AH0 L\nFLUX  F L AH1 K S\nFLUXIONAL  F L AH1 K - SH AH0 - N AH0 L\nFLY  F L AY1\nFLYBY  F L AY1 - B AY2\nFLYCATCHER  F L AY1 - K AE2 - CH ER0\nFLYE  F L AY1\nFLYER  F L AY1 - ER0\nFLYERS  F L AY1 - ER0 Z\nFLYING  F L AY1 - IH0 NG\nFLYNN  F L IH1 N\nFLYNT  F L IH1 N T\nFLYPAPER  F L AY1 - P EY2 - P ER0\nFLYTHE  F L AY1 DH\nFLYTRAP  F L AY1 - T R AE2 P\nFLYWAY  F L AY1 - W EY2\nFLYWHEEL  F L AY1 - W IY2 L\nFM  EH1 - F EH1 M\nFOAL  F OW1 L\nFOALE  F OW1 L\nFOALING  F OW1 - L IH0 NG\nFOAM  F OW1 M\nFOAMING  F OW1 - M IH0 NG\nFOAMS  F OW1 M Z\nFOAMY  F OW1 - M IY0\nFOARD  F AO1 R D\nFOB  F AO1 B\nFOBBS  F AA1 B Z\nFOBEL  F OW1 - B AH0 L\nFOBEL'S  F OW1 - B AH0 L Z\nFOBES  F OW1 B Z\nFOCAL  F OW1 - K AH0 L\nFOCHT  F AA1 K T\nFOCHTMAN  F AA1 K T - M AH0 N\nFOCKLER  F AA1 K - L ER0\nFOCUS  F OW1 - K AH0 S\nFOCUS(2)  F OW1 - K IH0 S\nFOCUSED  F OW1 - K AH0 S T\nFOCUSED(2)  F OW1 - K IH0 S T\nFOCUSES  F OW1 - K AH0 - S IH0 Z\nFOCUSES(2)  F OW1 - K IH0 - S IH0 Z\nFOCUSING  F OW1 - K AH0 - S IH0 NG\nFOCUSING(2)  F OW1 - K IH0 - S IH0 NG\nFOCUSSED  F OW1 - K AH0 S T\nFOCUSSED(2)  F OW1 - K IH0 S T\nFODDER  F AA1 - D ER0\nFODERA  F OW0 - D EH1 - R AH0\nFODOR  F OW1 - D ER0\nFOE  F OW1\nFOEHLICH  F OW1 - L IH0 CH\nFOELL  F IY1 L\nFOELLER  F OW1 - L ER0\nFOERSTER  F AO1 R - S T ER0\nFOERTSCH  F AO1 R CH\nFOES  F OW1 Z\nFOG  F AA1 G\nFOG(2)  F AO1 G\nFOGAL  F OW1 - JH AH0 L\nFOGARTY  F AA1 - G AA2 R - T IY0\nFOGARTY(2)  F OW1 - G AA2 R - T IY0\nFOGEL  F OW1 - G AH0 L\nFOGELBERG  F OW1 - G AH0 L - B ER0 G\nFOGELMAN  F OW1 - G AH0 L - M AH0 N\nFOGELSON  F OW1 - G AH0 L - S AH0 N\nFOGERTY  F AA1 - JH ER0 - T IY0\nFOGG  F AA1 G\nFOGGIEST  F AA1 - G IY0 - AH0 S T\nFOGGY  F AA1 - G IY0\nFOGLE  F OW1 - G AH0 L\nFOGLEMAN  F OW1 - G AH0 L - M AH0 N\nFOGLER  F OW1 - G AH0 - L ER0\nFOGLER(2)  F OW1 G - L ER0\nFOGLESONG  F AA1 - G AH0 L - S AO0 NG\nFOGLIA  F AA1 G - L IY0 - AH0\nFOGLIO  F AA1 G - L IY0 - OW0\nFOGT  F AA1 G T\nFOGY  F OW1 - G IY0\nFOHL  F OW1 L\nFOIA  F OW1 - Y AH0\nFOIA(2)  EH1 - F OW1 - AY1 - EY1\nFOIBLE  F OY1 - B AH0 L\nFOIBLES  F OY1 - B AH0 L Z\nFOIE  F OY1\nFOIL  F OY1 L\nFOILED  F OY1 L D\nFOILES  F AA1 - AY0 L Z\nFOILING  F OY1 - L IH0 NG\nFOILS  F OY1 L Z\nFOIST  F OY1 S T\nFOISTED  F OY1 - S T IH0 D\nFOISTER  F OY1 - S T ER0\nFOISY  F OY1 - Z IY0\nFOJTIK  F AA1 Y - T IH0 K\nFOKKER  F AA1 - K ER0\nFOLAN  F OW1 - L AH0 N\nFOLAND  F OW1 - L AH0 N D\nFOLCK  F OW1 L K\nFOLD  F OW1 L D\nFOLDED  F OW1 L - D AH0 D\nFOLDED(2)  F OW1 L - D IH0 D\nFOLDEN  F OW1 L - D AH0 N\nFOLDER  F OW1 L - D ER0\nFOLDERS  F OW1 L - D ER0 Z\nFOLDING  F OW1 L - D IH0 NG\nFOLDS  F OW1 L D Z\nFOLEY  F OW1 - L IY0\nFOLEY'S  F OW1 - L IY0 Z\nFOLGER  F OW1 L - JH ER0\nFOLGER'S  F OW1 L - JH ER0 Z\nFOLGERS  F OW1 L - JH ER0 Z\nFOLHA  F OW1 L - HH AH0\nFOLIAGE  F OW1 - L IH0 JH\nFOLIAGE(2)  F OW1 - L IY0 - IH0 JH\nFOLIATE  F OW1 - L IY0 - EY2 T\nFOLIATION  F OW2 - L IY0 - EY1 - SH AH0 N\nFOLIC  F AA1 - L IH0 K\nFOLINO  F OW0 - L IY1 - N OW0\nFOLK  F OW1 K\nFOLKER  F OW1 - K ER0\nFOLKERS  F OW1 - K ER0 Z\nFOLKERT  F OW1 - K ER0 T\nFOLKERTS  F OW1 - K ER0 T S\nFOLKES  F OW1 K S\nFOLKISH  F OW1 - K IH0 SH\nFOLKLORE  F OW1 K - L AO2 R\nFOLKMAN  F OW1 K - M AH0 N\nFOLKROCK  F OW1 K - R AA2 K\nFOLKS  F OW1 K S\nFOLKS'  F OW1 K S\nFOLKSTONE  F OW1 K - S T OW2 N\nFOLKSTONE'S  F OW1 K - S T OW2 N Z\nFOLKSY  F OW1 K - S IY0\nFOLKTALE  F OW1 K - T EY2 L\nFOLKWAY  F OW1 K - W EY2\nFOLKWAYS  F OW1 K - W EY2 Z\nFOLLAND  F AA1 - L AH0 N D\nFOLLETT  F AA1 - L IH0 T\nFOLLETTE  F AA2 - L EH1 T\nFOLLEY  F AA1 - L IY0\nFOLLIARD  F AA1 - L Y ER0 D\nFOLLICLE  F AA1 - L AH0 - K AH0 L\nFOLLICLE(2)  F AA1 - L IH0 - K AH0 L\nFOLLICLES  F AA1 - L IH0 - K AH0 L Z\nFOLLIES  F AA1 - L IY0 Z\nFOLLIN  F AA1 - L IH0 N\nFOLLIS  F AA1 - L IH0 S\nFOLLMAN  F AA1 L - M AH0 N\nFOLLMER  F AA1 L - M ER0\nFOLLOW  F AA1 - L OW0\nFOLLOWED  F AA1 - L OW0 D\nFOLLOWELL  F AA1 - L AH0 - W EH0 L\nFOLLOWER  F AA1 - L OW0 - ER0\nFOLLOWERS  F AA1 - L OW0 - ER0 Z\nFOLLOWING  F AA1 - L OW0 - IH0 NG\nFOLLOWINGS  F AA1 - L OW0 - IH0 NG Z\nFOLLOWS  F AA1 - L OW0 Z\nFOLLOWUP  F AA1 - L OW0 - AH2 P\nFOLLY  F AA1 - L IY0\nFOLMAR  F OW1 L - M ER0\nFOLMER  F OW1 L - M ER0\nFOLSE  F OW1 L S\nFOLSOM  F OW1 L - S AH0 M\nFOLSON  F OW1 L - S AH0 N\nFOLTA  F OW1 L - T AH0\nFOLTENE  F OW0 L - T IY1 N\nFOLTS  F OW1 L T S\nFOLTZ  F OW1 L T S\nFOLWELL  F OW1 L - W EH2 L\nFOLZ  F OW1 L Z\nFOMBY  F AA1 M - B IY0\nFOMENT  F OW1 - M EH0 N T\nFOMENTED  F OW1 - M EH0 N - T IH0 D\nFOMENTING  F OW1 - M EH0 N - T IH0 NG\nFOMENTO  F OW2 - M EH1 N - T OW0\nFOMON  F OW1 - M AH0 N\nFOMON'S  F OW1 - M AH0 N Z\nFONAR  F AA1 - N ER0\nFONCIER  F AA1 N - S Y ER0\nFOND  F AA1 N D\nFONDA  F AA1 N - D AH0\nFONDA'S  F AA1 N - D AH0 Z\nFONDER  F AA1 N - D ER0\nFONDEST  F AA1 N - D AH0 S T\nFONDIARIA  F AA2 N - D IY0 - EH1 - R IY0 - AH0\nFONDKOMMISSION  F AA2 N D - K AH0 - M IH1 - SH AH0 N\nFONDLE  F AO1 N - D AH0 L\nFONDLED  F AO1 N - D AH0 L D\nFONDLING  F AA1 N - D AH0 L - IH0 NG\nFONDLING(2)  F AA1 N - D L IH0 NG\nFONDLY  F AA1 N D - L IY0\nFONDNESS  F AA1 N D - N AH0 S\nFONDREN  F AA1 N - D ER0 - AH0 N\nFONDUE  F AA0 N - D Y UW1\nFONDUE(2)  F AA1 N - D UW2\nFONDUES  F AA1 N - D UW0 Z\nFONE  F OW1 N\nFONER  F OW1 - N ER0\nFONES  F OW1 N Z\nFONG  F AO1 NG\nFONGER  F AO1 NG - ER0\nFONNER  F AA1 - N ER0\nFONS  F AA1 N Z\nFONSECA  F OW0 N - S EH1 - K AH0\nFONT  F AA1 N T\nFONTAINE  F AO0 N - T EY1 N\nFONTANA  F AO0 N - T AE1 - N AH0\nFONTANELLA  F AA2 N - T AH0 - N EH1 - L AH0\nFONTANEZ  F OW0 N - T AA1 - N EH0 Z\nFONTANILLA  F AA2 N - T AH0 - N IH1 - L AH0\nFONTE  F AA1 N T\nFONTENETTE  F AA1 N - T IH0 - N EH0 T\nFONTENOT  F AA1 N - T IH0 - N AH0 T\nFONTES  F OW1 N - T EH0 S\nFONTS  F AA1 N T S\nFONVILLE  F OW1 N - V IH0 L\nFOO  F UW1\nFOOD  F UW1 D\nFOOD'S  F UW1 D Z\nFOODARAMA  F UW2 - D ER0 - AE1 - M AH0\nFOODMAKER  F UW1 D - M EY2 - K ER0\nFOODMAKER'S  F UW1 D - M EY2 - K ER0 Z\nFOODS  F UW1 D Z\nFOODS'  F UW1 D Z\nFOODSERVICE  F UW1 D - S ER1 - V IH0 S\nFOODSTUFF  F UW1 D - S T AH2 F\nFOODSTUFFS  F UW1 D - S T AH2 F S\nFOODTOWN  F UW1 D - T AW2 N\nFOODWAY  F UW1 D - W EY2\nFOODWAYS  F UW1 D - W EY2 Z\nFOOKS  F UH1 K S\nFOOL  F UW1 L\nFOOL'S  F UW1 L Z\nFOOLED  F UW1 L D\nFOOLERY  F UW1 - L ER0 - IY0\nFOOLHARDY  F UW1 L - HH AA2 R - D IY0\nFOOLING  F UW1 - L IH0 NG\nFOOLISH  F UW1 - L IH0 SH\nFOOLISHLY  F UW1 - L IH0 SH - L IY0\nFOOLISHNESS  F UW1 - L IH0 SH - N AH0 S\nFOOLPROOF  F UW1 L - P R UW2 F\nFOOLS  F UW1 L Z\nFOONG  F UW1 NG\nFOOR  F UH1 R\nFOOS  F UW1 Z\nFOOSE  F UW1 S\nFOOSHEE  F UW1 - SH IY0\nFOOT  F UH1 T\nFOOTAGE  F UH1 - T IH0 JH\nFOOTBALL  F UH1 T - B AO2 L\nFOOTBALL'S  F UH1 T - B AO2 L Z\nFOOTBALLS  F UH1 T - B AO2 L Z\nFOOTE  F UH1 T\nFOOTE'S  F UH1 T S\nFOOTED  F UH1 - T IH0 D\nFOOTER  F UH1 - T ER0\nFOOTFALL  F UH1 T - F AO2 L\nFOOTHILL  F UH1 T - HH IH2 L\nFOOTHILLS  F UH1 T - HH IH2 L Z\nFOOTHOLD  F UH1 T - HH OW2 L D\nFOOTHOLDS  F UH1 T - HH OW2 L D Z\nFOOTING  F UH1 - T IH0 NG\nFOOTLIGHT  F UH1 T - L AY2 T\nFOOTLIGHTS  F UH1 T - L AY2 T S\nFOOTLOOSE  F UH1 T - L UW2 S\nFOOTMAN  F UH1 T - M AH0 N\nFOOTNOTE  F UH1 T - N OW2 T\nFOOTNOTED  F UH1 T - N OW2 - T IH0 D\nFOOTNOTES  F UH1 T - N OW2 T S\nFOOTNOTING  F UH1 T - N OW2 - T IH0 NG\nFOOTPATH  F UH1 T - P AE2 TH\nFOOTPRINT  F UH1 T - P R IH2 N T\nFOOTPRINTS  F UH1 T - P R IH2 N T S\nFOOTRACE  F UH1 T - R EY2 S\nFOOTSTEP  F UH1 T - S T EH2 P\nFOOTSTEPS  F UH1 T - S T EH2 P S\nFOOTWALL  F UH1 T - W AO2 L\nFOOTWARE  F UH1 T - W EH2 R\nFOOTWEAR  F UH1 T - W EH2 R\nFOOTWORK  F UH1 T - W ER2 K\nFOP  F AO1 P\nFOP(2)  EH1 - F OW1 - P IY1\nFOPPIANO  F OW0 - P IY0 - AA1 - N OW0\nFOR  F AO1 R\nFOR(2)  F ER0\nFOR(3)  F R ER0\nFORA  F AO1 - R AH0\nFORAGE  F AO1 - R IH0 JH\nFORAGES  F AO1 - R AH0 - JH AH0 Z\nFORAGING  F AO1 - R IH0 - JH IH0 NG\nFORAKER  F AO1 - R AH0 - K ER0\nFORAMEN  F ER0 - EY1 - M AH0 N\nFORAN  F AO1 - R AH0 N\nFORAND  F AO1 - R AH0 N D\nFORAY  F AO1 - R EY0\nFORAYS  F AO1 - R EY0 Z\nFORBAD  F ER0 - B AE1 D\nFORBADE  F ER0 - B EY1 D\nFORBEARANCE  F AO0 R - B EH1 - R AH0 N S\nFORBES  F AO1 R B Z\nFORBES'  F AO1 R B Z\nFORBES'S  F AO1 R B - Z IH0 Z\nFORBESES  F AO1 R B - Z IH0 Z\nFORBESS  F AO0 R - B EH1 S\nFORBID  F ER0 - B IH1 D\nFORBID(2)  F AO0 - B IH1 D\nFORBIDDEN  F AO1 R - B IH0 - D AH0 N\nFORBIDDEN(2)  F ER0 R - B IH1 - D AH0 N\nFORBIDDING  F ER0 - B IH1 - D IH0 NG\nFORBIDDING(2)  F AO0 - B IH1 - D IH0 NG\nFORBIDS  F ER0 - B IH1 D Z\nFORBIDS(2)  F AO0 - B IH1 D Z\nFORBIS  F AO1 R - B IH0 S\nFORBUS  F AO1 R - B IH0 S\nFORBUSH  F AO1 R - B UH2 SH\nFORCE  F AO1 R S\nFORCE'S  F AO1 R - S IH0 Z\nFORCED  F AO1 R S T\nFORCEFUL  F AO1 R S - F AH0 L\nFORCEFULLY  F AO1 R S - F AH0 - L IY0\nFORCEFULNESS  F AO1 R S - F AH0 L - N AH0 S\nFORCEPS  F AO1 R - S EH0 P S\nFORCES  F AO1 R - S IH0 Z\nFORCES'  F AO1 R - S IH0 Z\nFORCIBLE  F AO1 R - S AH0 - B AH0 L\nFORCIBLY  F AO1 R - S AH0 - B L IY0\nFORCIER  F AO1 R - K IY0 - ER0\nFORCING  F AO1 R - S IH0 NG\nFORCUM  F AO1 R - K AH0 M\nFORD  F AO1 R D\nFORD'S  F AO1 R D Z\nFORDE  F AO1 R D\nFORDHAM  F AO1 R - D AH0 M\nFORDICE  F AO1 R - D IH0 S\nFORDICE(2)  F AO1 R - D AY0 S\nFORDS  F AO1 R D Z\nFORDYCE  F AO1 R - D AY2 S\nFORE  F AO1 R\nFOREARM  F AO0 - R AA1 R M\nFOREARM(2)  F AO1 - R AA2 R M\nFOREBEAR  F AO1 R - B EH2 R\nFOREBEARANCE  F AO2 R - B EH1 - R AH0 N S\nFOREBEARS  F AO1 R - B EH2 R Z\nFOREBODE  F AO0 R - B OW1 D\nFOREBODING  F AO0 R - B OW1 - D IH0 NG\nFOREBRAIN  F AO1 R - B R EY2 N\nFORECAST  F AO1 R - K AE2 S T\nFORECASTED  F AO1 R - K AE2 - S T IH0 D\nFORECASTER  F AO1 R - K AE2 - S T ER0\nFORECASTERS  F AO1 R - K AE2 - S T ER0 Z\nFORECASTING  F AO1 R - K AE2 - S T IH0 NG\nFORECASTS  F AO0 R - K AE1 S T S\nFORECASTS(2)  F AO1 R - K AE2 S T S\nFORECASTS(3)  F AO0 R - K AE1 S S\nFORECASTS(4)  F AO1 R - K AE2 S S\nFORECASTS(5)  F AO0 R - K AE1 S\nFORECASTS(6)  F AO1 R - K AE2 S\nFORECLOSE  F AO0 R - K L OW1 Z\nFORECLOSED  F AO0 R - K L OW1 Z D\nFORECLOSES  F AO0 R - K L OW1 - Z IH0 Z\nFORECLOSING  F AO0 R - K L OW1 - Z IH0 NG\nFORECLOSURE  F AO0 R - K L OW1 - ZH ER0\nFORECLOSURES  F AO0 R - K L OW1 - ZH ER0 Z\nFOREE  F AO1 - R IY1\nFOREFATHER  F AO1 R - F AA2 - DH ER0\nFOREFATHERS  F AO1 R - F AA2 - DH ER0 Z\nFOREFINGER  F AO1 R - F IH2 NG - G ER0\nFOREFINGERS  F AO1 R - F IH2 NG - G ER0 Z\nFOREFOOT  F AO1 R - F UH2 T\nFOREFRONT  F AO1 R - F R AH2 N T\nFOREGO  F AO0 R - G OW1\nFOREGOING  F AO0 R - G OW1 - IH0 NG\nFOREGONE  F AO1 R - G AO1 N\nFOREGROUND  F AO1 R - G R AW2 N D\nFOREHAND  F AO1 R - HH AE2 N D\nFOREHANDS  F AO1 R - HH AE2 N D Z\nFOREHEAD  F AO1 - R HH EH0 D\nFOREHEADS  F AO1 - R HH EH2 D Z\nFOREIGN  F AO1 - R AH0 N\nFOREIGN(2)  F AA1 - R AH0 N\nFOREIGNER  F AO1 - R AH0 - N ER0\nFOREIGNER(2)  F AA1 - R AH0 - N ER0\nFOREIGNER(3)  F AO1 R - N ER0\nFOREIGNER(4)  F AA1 R - N ER0\nFOREIGNERS  F AO1 - R AH0 - N ER0 Z\nFOREIGNERS'  F AO1 - R AH0 - N ER0 Z\nFOREIGNERS'(2)  F AA1 - R AH0 - N ER0 Z\nFOREIGNERS'(3)  F AO1 R - N ER0 Z\nFOREIGNERS'(4)  F AA1 R - N ER0 Z\nFOREIGNERS(2)  F AA1 - R AH0 - N ER0 Z\nFOREIGNERS(3)  F AO1 R - N ER0 Z\nFOREIGNERS(4)  F AA1 R - N ER0 Z\nFORELIMB  F AO1 R - L IH2 M\nFORELIMBS  F AO1 R - L IH2 M Z\nFOREMAN  F AO1 R - M AH0 N\nFOREMEN  F AO1 R - M AH0 N\nFOREMOST  F AO1 R - M OW2 S T\nFORENSIC  F ER0 - EH1 N - S IH0 K\nFORENSIC(2)  F AO2 - R EH1 N - S IH0 K\nFORENSICALLY  F ER0 - EH1 N - S IH0 K - L IY0\nFORENSICALLY(2)  F ER0 - EH1 N - S IH0 - K AH0 - L IY0\nFORENSICS  F ER0 - EH1 N - S IH0 K S\nFORENSICS(2)  F AO2 - R EH1 N - S IH0 K S\nFOREPERSON  F AO1 R - P ER0 - S AH0 N\nFOREPLAY  F AO1 R - P L EY2\nFORERO  F AO1 - R OW0\nFORERUNNER  F AO1 - R AH2 - N ER0\nFORERUNNERS  F AO1 - R AH2 - N ER0 Z\nFORESAW  F AO2 R - S AO1\nFORESEE  F AO0 R - S IY1\nFORESEEABLE  F AO0 R - S IY1 - AH0 - B AH0 L\nFORESEEING  F AO0 R - S IY1 - IH0 NG\nFORESEEN  F AO2 R - S IY1 N\nFORESEES  F AO0 R - S IY1 Z\nFORESHADOW  F AO0 R - SH AE1 - D OW0\nFORESHADOWED  F AO0 R - SH AE1 - D OW0 D\nFORESHADOWING  F AO0 R - SH AE1 - D OW0 - IH0 NG\nFORESHADOWS  F AO0 R - SH AE1 - D OW0 Z\nFORESIGHT  F AO1 R - S AY2 T\nFORESMAN  F AO1 R S - M AH0 N\nFOREST  F AO1 - R AH0 S T\nFOREST'S  F AO1 - R AH0 S T S\nFOREST(2)  F AO1 - R IH0 S T\nFORESTA  F AO1 R - S T AH0\nFORESTALL  F AO0 R - S T AO1 L\nFORESTALLED  F AO2 R - S T AA1 L D\nFORESTALLING  F AO2 R - S T AA1 - L IH0 NG\nFORESTED  F AO1 - R AH0 - S T AH0 D\nFORESTER  F AO1 - R AH0 - S T ER0\nFORESTERS  F AO1 - R AH0 - S T ER0 Z\nFORESTRY  F AO1 - R AH0 - S T R IY0\nFORESTS  F AO1 - R AH0 S T S\nFORESTS(2)  F AO1 - R AH0 S S\nFORESTS(3)  F AO1 - R AH0 S\nFORESTVILLE  F AO1 - R EH0 S T - V IH2 L\nFORET  F AO1 R T\nFORET(2)  F AO1 - R EH0 T\nFORETASTE  F AO0 R - T EY1 S T\nFORETASTE(2)  F AO1 R - T EY0 S T\nFORETELL  F AO0 R - T EH1 L\nFORETELLING  F AO0 R - T EH1 - L IH0 NG\nFORETHOUGHT  F AO1 R - TH AO2 T\nFORETOLD  F AO0 R - T OW1 L D\nFOREVER  F ER0 - EH1 - V ER0\nFOREWARNED  F AO0 R - W AO1 R N D\nFOREWING  F AO1 R - W IH2 NG\nFOREWINGS  F AO1 R - W IH2 NG Z\nFOREWOMAN  F AO1 R - W UW0 - M AH0 N\nFOREWORD  F AO1 R - W ER2 D\nFOREX  F AO1 - R EH0 K S\nFORFEIT  F AO1 R - F IH0 T\nFORFEITABLE  F AO1 R - F AH0 - T AH0 - B AH0 L\nFORFEITED  F AO1 R - F IH0 - T IH0 D\nFORFEITING  F AO1 R - F AH0 - T IH0 NG\nFORFEITURE  F AO1 R - F AH0 - CH ER0\nFORFEITURES  F AO1 R - F AH0 - CH ER0 Z\nFORGAVE  F ER0 - G EY1 V\nFORGE  F AO1 R JH\nFORGED  F AO1 R JH D\nFORGER  F AO1 R - JH ER0\nFORGERIES  F AO1 R - JH ER0 - IY0 Z\nFORGERS  F AO1 R - JH ER0 Z\nFORGERY  F AO1 R - JH ER0 - IY0\nFORGES  F AO1 R - JH IH0 Z\nFORGET  F ER0 - G EH1 T\nFORGET(2)  F AO0 R - G EH1 T\nFORGETFUL  F AO0 R - G EH1 T - F AH0 L\nFORGETFUL(2)  F ER0 - G EH1 T - F AH0 L\nFORGETS  F ER0 - G EH1 T S\nFORGETS(2)  F AO0 R - G EH1 T S\nFORGETTABLE  F AO0 R - G EH1 - T AH0 - B AH0 L\nFORGETTABLE(2)  F ER0 - G EH1 - T AH0 - B AH0 L\nFORGETTE  F ER0 - ZH EH1 T\nFORGETTING  F ER0 - G EH1 - T IH0 NG\nFORGETTING(2)  F AO0 R - G EH1 - T IH0 NG\nFORGEY  F AO1 R - JH IY0\nFORGIE  F AO1 R - JH IY0\nFORGING  F AO1 R - JH IH0 NG\nFORGINGS  F AO1 - JH IH0 NG Z\nFORGIONE  F AO0 R - JH OW1 - N IY0\nFORGIVABLE  F AO0 R - G IH1 - V AH0 - B AH0 L\nFORGIVABLE(2)  F ER0 - G IH1 - V AH0 - B AH0 L\nFORGIVE  F ER0 - G IH1 V\nFORGIVE(2)  F AO0 R - G IH1 V\nFORGIVEN  F ER0 - G IH1 - V AH0 N\nFORGIVEN(2)  F AO0 R - G IH1 - V AH0 N\nFORGIVENESS  F ER0 - G IH1 V - N AH0 S\nFORGIVENESS(2)  F AO0 R - G IH1 V - N AH0 S\nFORGIVES  F ER0 - G IH1 V Z\nFORGIVES(2)  F AO0 R - G IH1 V Z\nFORGIVING  F ER0 - G IH1 - V IH0 NG\nFORGIVING(2)  F AO0 R - G IH1 - V IH0 NG\nFORGO  F AO0 R - G OW1\nFORGOES  F AO0 R - G OW1 Z\nFORGOING  F AO0 R - G OW1 - IH0 NG\nFORGONE  F AO0 R - G AA1 N\nFORGOT  F ER0 - G AA1 T\nFORGOT(2)  F AO0 R - G AA1 T\nFORGOTTEN  F ER0 - G AA1 - T AH0 N\nFORGOTTEN(2)  F AO0 R - G AA1 - T AH0 N\nFORGUE  F AO1 R G\nFORGY  F AO1 R - JH IY0\nFORHAN  F AO1 R - HH AH0 N\nFORIE  F AO1 - R IY0\nFORIN  F AO1 - R IH0 N\nFORINASH  F AO1 - R IH0 - N AE0 SH\nFORINT  F AO1 - R IH0 N T\nFORINTS  F AO1 - R IH0 N T S\nFORISTER  F AO1 - R IH0 - S T ER0\nFORK  F AO1 R K\nFORK-LIFT  F AO1 R K - L IH1 F T\nFORKED  F AO1 R K T\nFORKER  F AO1 R - K ER0\nFORKEY  F AO1 R - K IY2\nFORKING  F AO1 R - K IH0 NG\nFORKLIFT  F AO1 R K - L IH2 F T\nFORKLIFTS  F AO1 R K - L IH2 F T S\nFORKNER  F AO1 R K - N ER0\nFORKS  F AO1 R K S\nFORLENZA  F AO0 R - L EH1 N - Z AH0\nFORLORN  F ER0 - L AO1 R N\nFORM  F AO1 R M\nFORMA  F AO1 R - M AH0\nFORMAL  F AO1 R - M AH0 L\nFORMALDEHYDE  F AO0 R - M AE1 L - D AH0 - HH AY2 D\nFORMALDEHYDE(2)  F ER0 - M AE1 L - D AH0 - HH AY2 D\nFORMALISM  F AO1 R - M AH0 - L IH2 - Z AH0 M\nFORMALIST  F AO1 R - M AH0 - L AH0 S T\nFORMALITIES  F AO0 R - M AE1 - L AH0 - T IY0 Z\nFORMALITY  F AO0 R - M AE1 - L AH0 - T IY0\nFORMALIZATION  F AO1 R - M AH0 - L AH0 - Z EY0 - SH AH0 N\nFORMALIZE  F AO1 R - M AH0 - L AY2 Z\nFORMALIZED  F AO1 R - M AH0 - L AY2 Z D\nFORMALIZES  F AO1 R - M AH0 - L AY2 - Z IH0 Z\nFORMALIZING  F AO1 R - M AH0 - L AY2 - Z IH0 NG\nFORMALLY  F AO1 R - M AH0 - L IY0\nFORMAN  F AO1 R - M AE2 N\nFORMANEK  F AO1 R - M AH0 - N IH0 K\nFORMANT  F AO1 R - M AH0 N T\nFORMANTS  F AO1 R - M AH0 N T S\nFORMAT  F AO1 R - M AE2 T\nFORMATION  F AO0 R - M EY1 - SH AH0 N\nFORMATIONS  F AO0 R - M EY1 - SH AH0 N Z\nFORMATIVE  F AO1 R - M AH0 - T IH0 V\nFORMATO  F AO0 R - M AA1 - T OW0\nFORMATS  F AO1 R - M AE2 T S\nFORMBEY  F AO1 R M - B IY0\nFORMBY  F AO1 R M - B IY0\nFORMED  F AO1 R M D\nFORMER  F AO1 R - M ER0\nFORMERLY  F AO1 R - M ER0 - L IY0\nFORMIC  F AO1 R - M IH0 K\nFORMICA  F AO0 R - M AY1 - K AH0\nFORMICA'S  F AO0 R - M AY1 - K AH0 Z\nFORMICA'S(2)  F ER0 - M AY1 - K AH0 Z\nFORMICA(2)  F ER0 - M AY1 - K AH0\nFORMIDABLE  F AO1 R - M AH0 - D AH0 - B AH0 L\nFORMIDABLE(2)  F AO2 R - M IH1 - D AH0 - B AH0 L\nFORMIDABLY  F AO1 R - M AH0 - D AH0 - B L IY0\nFORMING  F AO1 R - M IH0 NG\nFORMOSA  F AO0 R - M OW1 - S AH0\nFORMOSO  F AO0 R - M OW1 - S OW0\nFORMS  F AO1 R M Z\nFORMULA  F AO1 R - M Y AH0 - L AH0\nFORMULAIC  F AO2 R - M Y AH0 - L EY1 - IH0 K\nFORMULARY  F AO1 R - M Y AH0 - L EH2 - R IY0\nFORMULAS  F AO1 R - M Y AH0 - L AH0 Z\nFORMULATE  F AO1 R - M Y AH0 - L EY2 T\nFORMULATED  F AO1 R - M Y AH0 - L EY2 - T AH0 D\nFORMULATED(2)  F AO1 R - M Y AH0 - L EY2 - T IH0 D\nFORMULATES  F AO1 R - M Y AH0 - L EY2 T S\nFORMULATING  F AO1 R - M Y AH0 - L EY2 - T IH0 NG\nFORMULATION  F AO2 R - M Y AH0 - L EY1 - SH AH0 N\nFORMULATION(2)  F AO2 R - M Y UW0 - L EY1 - SH AH0 N\nFORMULATIONS  F AO2 R - M Y UW0 - L EY1 - SH AH0 N Z\nFORMYLIN  F AO1 R - M IH0 - L IH0 N\nFORNAL  F AO1 R - N AH0 L\nFORNER  F AO1 R - N ER0\nFORNES  F AO1 R N Z\nFORNESS  F ER1 - N IH0 S\nFORNEY  F AO1 R - N IY0\nFORNI  F AO1 R - N IY0\nFORNOFF  F AO1 R - N AO0 F\nFORNWALT  F AO1 R - N W AH0 L T\nFORQUER  F AO1 R - K ER0\nFORRER  F AO1 - ER0 R\nFORREST  F AO1 - R AH0 S T\nFORRESTAL  F AO1 - R AH0 - S T AH0 L\nFORRESTER  F AO1 - R AH0 - S T ER0\nFORREY  F AO1 - R IY0\nFORRY  F AO1 - R IY0\nFORS  F ER1 Z\nFORSAKE  F AO0 R - S EY1 K\nFORSAKEN  F AO0 R - S EY1 - K AH0 N\nFORSAKING  F AO0 R - S EY1 - K IH0 NG\nFORSBERG  F AO1 R S - B ER0 G\nFORSBURG  F AO1 R S - B ER0 G\nFORSBURG'S  F AO1 R S - B ER0 G Z\nFORSCHNER  F AO1 R SH - N ER0\nFORSE  F AO1 R S\nFORSEE  F ER0 - S IY1\nFORSEEABLE  F AO2 R - S IY1 - AH0 - B AH0 L\nFORSEEABLE(2)  F ER0 - S IY1 - AH0 - B AH0 L\nFORSELL  F AO1 R - S AH0 L\nFORSETH  F AO1 R - S IH0 TH\nFORSGREN  F AO1 R S - G R EH0 N\nFORSHAN  F AO1 R - SH AH0 N\nFORSHEE  F AO1 R - SH IY0\nFORSHEY  F AO1 R - SH IY0\nFORSLUND  F AO1 R S - L AH0 N D\nFORSMAN  F AO1 R S - M AH0 N\nFORSON  F AO1 R - S AH0 N\nFORSOOK  F AO0 R - S UH1 K\nFORST  F AO1 R S T\nFORSTER  F AO1 R - S T ER0\nFORSTMANN  F AO1 R S T - M AH0 N\nFORSTNER  F AO1 R - S T N ER0\nFORSTROM  F AO1 R - S T R AH0 M\nFORSWEAR  F AO0 R - S W EH1 R\nFORSWORN  F AO2 R - S W AO1 R N\nFORSYTH  F AO1 R - S AY2 TH\nFORSYTHE  F AO1 R - S AY0 DH\nFORSYTHIA  F AO0 R - S IH1 - TH IY0 - AH0\nFORSYTHIA(2)  F AO0 R - S IH1 - DH IY0 - AH0\nFORSYTHIAS  F AO0 R - S IH1 - TH IY0 - AH0 Z\nFORSYTHIAS(2)  F AO0 R - S IH1 - DH IY0 - AH0 Z\nFORT  F AO1 R T\nFORTAS  F AO1 R - T AH0 S\nFORTAS'S  F AO1 R - T AH0 - S IH0 Z\nFORTE  F AO1 R - T EY0\nFORTE(2)  F AO1 R T\nFORTENBERRY  F AO1 R - T AH0 N - B EH0 - R IY0\nFORTES  F AO1 R - T EY0 Z\nFORTES(2)  F AO1 R T S\nFORTH  F AO1 R TH\nFORTHCOMING  F AO1 R TH - K AH1 - M IH0 NG\nFORTHRIGHT  F AO1 R TH - R AY1 T\nFORTHRIGHTLY  F AO1 R TH - R AY1 T - L IY0\nFORTHRIGHTNESS  F AO1 R TH - R AY1 T - N AH0 S\nFORTHWITH  F AO1 R TH - W IH1 TH\nFORTI  F AO1 R - T IY0\nFORTIER  F AO1 R - T IY0 - ER0\nFORTIER'S  F AO1 R - T IY0 - ER0 Z\nFORTIER'S(2)  F AO1 R - T Y ER0 Z\nFORTIER(2)  F AO1 R - T Y ER0\nFORTIES  F AO1 R - T IY0 Z\nFORTIETH  F AO1 R - T IY0 - IH0 TH\nFORTIFICATION  F AO2 R - T AH0 - F AH0 - K EY1 - SH AH0 N\nFORTIFICATIONS  F AO2 R - T AH0 - F AH0 - K EY1 - SH AH0 N Z\nFORTIFIED  F AO1 R - T AH0 - F AY2 D\nFORTIFIER  F AO1 R - T AH0 - F AY2 - ER0\nFORTIFIERS  F AO1 R - T AH0 - F AY2 - ER0 Z\nFORTIFY  F AO1 R - T IH0 - F AY2\nFORTIFYING  F AO1 R - T IH0 - F AY2 - IH0 NG\nFORTIN  F AO1 R - T IH0 N\nFORTINI  F AO0 R - T IY1 - N IY0\nFORTINO  F AO0 R - T IY1 - N OW0\nFORTIS  F AO1 R - T IH0 S\nFORTITUDE  F AO1 R - T IH0 - T UW2 D\nFORTMAN  F AO1 R T - M AH0 N\nFORTNA  F AO1 R T - N AH0\nFORTNER  F AO1 R T - N ER0\nFORTNEY  F AO1 R T - N IY0\nFORTNIGHT  F AO1 R T - N AY2 T\nFORTNIGHTLY  F AO1 R T - N AY2 T - L IY0\nFORTON  F AO1 R - T AH0 N\nFORTRESS  F AO1 R - T R AH0 S\nFORTRESSES  F AO1 R - T R AH0 - S IH0 Z\nFORTS  F AO1 R T S\nFORTSON  F AO1 R T - S AH0 N\nFORTUITOUS  F AO0 R - T UW1 - IH0 - T AH0 S\nFORTUNA  F AO0 R - T UW1 - N AH0\nFORTUNATE  F AO1 R - CH AH0 - N AH0 T\nFORTUNATE(2)  F AO1 R - CH UW0 - N AH0 T\nFORTUNATELY  F AO1 R - CH AH0 - N AH0 T - L IY0\nFORTUNATELY(2)  F AO1 R - CH UW0 - N AH0 T - L IY0\nFORTUNATO  F AO0 R - T UW0 - N AA1 - T OW0\nFORTUNATO(2)  F AO0 R - CH UW0 - N AA1 - T OW0\nFORTUNE  F AO1 R - CH AH0 N\nFORTUNE'S  F AO1 R - CH AH0 N Z\nFORTUNE'S(2)  F AO1 R - CH UW0 N Z\nFORTUNE(2)  F AO1 R - CH UW0 N\nFORTUNES  F AO1 R - CH AH0 N Z\nFORTUNES(2)  F AO1 R - CH UW0 N Z\nFORTY  F AO1 R - T IY0\nFORTY'S  F AO1 R - T IY0 Z\nFORUM  F AO1 - R AH0 M\nFORUM'S  F AO1 - R AH0 M Z\nFORUMS  F AO1 - R AH0 M Z\nFORWARD  F AO1 R - W ER0 D\nFORWARDED  F AO1 R - W ER0 - D IH0 D\nFORWARDER  F AO1 R - W ER0 - D ER0\nFORWARDERS  F AO1 R - W ER0 - D ER0 Z\nFORWARDING  F AO1 R - W ER0 - D IH0 NG\nFORWARDS  F AO1 R - W ER0 D Z\nFORWOOD  F AO1 R - W UH2 D\nFORYS  F AO1 - R IY0 Z\nFORZA  F AO1 R - Z AH0\nFOSAMAX  F AA1 - S AH0 - M AE2 K S\nFOSBACK  F AA1 S - B AE2 K\nFOSBERG  F AA1 S - B ER0 G\nFOSCO  F AA1 - S K OW0\nFOSDICK  F AA1 S - D IH0 K\nFOSHEE  F AA1 - SH IY0\nFOSIA  F OW1 - ZH AH0\nFOSKETT  F AA1 - S K IH0 T\nFOSKEY  F AA1 S - K IY0\nFOSLER  F AA1 - S AH0 - L ER0\nFOSLER(2)  F AA1 S - L ER0\nFOSNAUGH  F AA1 S - N AO0\nFOSS  F AA1 S\nFOSSE  F AA1 S\nFOSSEL  F AA1 - S AH0 L\nFOSSEN  F AA1 - S AH0 N\nFOSSETT  F AA1 - S IH0 T\nFOSSEY  F AA1 - S IY0\nFOSSEY'S  F AA1 - S IY0 Z\nFOSSIL  F AA1 - S AH0 L\nFOSSILIFEROUS  F AA2 - S AH0 - L IH1 - F ER0 - AH0 S\nFOSSILIZE  F AA1 - S AH0 - L AY2 Z\nFOSSILIZED  F AA1 - S AH0 - L AY2 Z D\nFOSSILS  F AA1 - S AH0 L Z\nFOSSUM  F AA1 - S AH0 M\nFOSTER  F AA1 - S T ER0\nFOSTER'S  F AA1 - S T ER0 Z\nFOSTERED  F AA1 - S T ER0 D\nFOSTERING  F AA1 - S T ER0 - IH0 NG\nFOSTERS  F AA1 - S T ER0 Z\nFOTH  F AA1 TH\nFOTHERGILL  F AH1 - DH ER0 - G IH2 L\nFOTHERINGHAM  F AH1 - DH ER0 - IH0 NG - HH AE0 M\nFOTI  F OW1 - T IY0\nFOTIS  F OW1 - T IH0 S\nFOTOPOULOS  F AH0 - T AA1 - P AH0 - L IH0 S\nFOUAD  F UW1 - AE0 D\nFOUCH  F AW1 CH\nFOUCHE  F AW1 CH\nFOUCHER  F AW1 - K ER0\nFOUGERE  F AW1 - G ER0\nFOUGHT  F AO1 T\nFOUHY  F UW1 - IY0\nFOUHY(2)  F UW1 - HH IY0\nFOUL  F AW1 L\nFOULDS  F OW1 L D Z\nFOULED  F AW1 L D\nFOULING  F AW1 - L IH0 NG\nFOULK  F AW1 L K\nFOULKE  F AW1 L K\nFOULKES  F AW1 L K S\nFOULKS  F UW1 L K S\nFOULNESS  F AW1 L - N AH0 S\nFOULS  F AW1 L Z\nFOUND  F AW1 N D\nFOUNDATION  F AW0 N - D EY1 - SH AH0 N\nFOUNDATION'S  F AW0 N - D EY1 - SH AH0 N Z\nFOUNDATIONAL  F AW0 N - D EY1 - SH AH0 - N AH0 L\nFOUNDATIONS  F AW0 N - D EY1 - SH AH0 N Z\nFOUNDED  F AW1 N - D AH0 D\nFOUNDED(2)  F AW1 N - D IH0 D\nFOUNDER  F AW1 N - D ER0\nFOUNDER'S  F AW1 N - D ER0 Z\nFOUNDERED  F AW1 N - D ER0 D\nFOUNDERING  F AW1 N - D ER0 - IH0 NG\nFOUNDERS  F AW1 N - D ER0 Z\nFOUNDERS'  F AW1 N - D ER0 Z\nFOUNDING  F AW1 N - D IH0 NG\nFOUNDLING  F AW1 N D - L IH0 NG\nFOUNDRIES  F AW1 N - D R IY0 Z\nFOUNDRY  F AW1 N - D R IY0\nFOUNTAIN  F AW1 N - T AH0 N\nFOUNTAINE  F UW0 N - T EY1 N\nFOUNTAINS  F AW1 N - T AH0 N Z\nFOUR  F AO1 R\nFOUR'S  F AO1 R Z\nFOURFOLD  F AO1 R - F OW1 L D\nFOURMAN  F AO1 R - M AH0 N\nFOURNET  F UH0 R - N EH1 T\nFOURNIER  F AO1 R - N IY0 - ER0\nFOURS  F AO1 R Z\nFOURSOME  F AO1 R - S AH0 M\nFOURSQUARE  F AO1 R - S K W EH1 R\nFOURTEEN  F AO1 R - T IY1 N\nFOURTEEN(2)  F AO2 R - T IY1 N\nFOURTEENS  F AO1 R - T IY1 N Z\nFOURTEENTH  F AO1 R - T IY1 N TH\nFOURTEENTH(2)  F AO2 R - T IY1 N TH\nFOURTH  F AO1 R TH\nFOURTH'S  F AO1 R TH S\nFOURTHLY  F AO1 R TH - L IY0\nFOURTHQUARTER  F AO1 R TH - K W AO1 R - T ER0\nFOURTHQUARTER(2)  F AO1 R TH - K AO1 R - T ER0\nFOURTHS  F AO1 R TH S\nFOURTHS(2)  F AO1 R S\nFOURTOU  F AO0 R - T UW1\nFOUSE  F AW1 S\nFOUSEK  F AW1 - S IH0 K\nFOUSHEE  F AW1 - SH IY0\nFOUST  F AW1 S T\nFOUT  F AW1 T\nFOUTCH  F AW1 CH\nFOUTS  F AW1 T S\nFOUTY  F AW1 - T IY0\nFOUTZ  F AW1 T S\nFOWBLE  F AW1 - B AH0 L\nFOWERS  F AW1 - ER0 Z\nFOWKES  F AW1 K S\nFOWL  F AW1 L\nFOWLE  F AW1 - AH0 L\nFOWLER  F AW1 - L ER0\nFOWLER'S  F AW1 - L ER0 Z\nFOWLES  F AW1 - AH0 L Z\nFOWLKES  F AW1 L K S\nFOX  F AA1 K S\nFOX'S  F AA1 K - S AH0 Z\nFOXBORO  F AA1 K S - B ER0 - OW0\nFOXES  F AA1 K - S AH0 Z\nFOXFIRE  F AA1 K S - F AY2 R\nFOXFIRE(2)  F AA1 K S - F AY2 - ER0\nFOXGLOVE  F AA1 K S - G L AH2 V\nFOXHOLE  F AA1 K S - HH OW2 L\nFOXHOLES  F AA1 K S - HH OW2 L Z\nFOXHOUND  F AA1 K S - HH AW2 N D\nFOXMAN  F AA1 K S - M AH0 N\nFOXMAN'S  F AA1 K S - M AH0 N Z\nFOXMEYER  F AA1 K S - M AY2 R\nFOXTAIL  F AA1 K S - T EY2 L\nFOXWELL  F AA1 K S - W EH2 L\nFOXWOOD  F AA1 K S - W UH2 D\nFOXWOODS  F AA1 K S - W UH2 D Z\nFOXWORTH  F AA1 K S - W ER2 TH\nFOXWORTHY  F AA1 K S - W ER2 - DH IY0\nFOXWORTHY'S  F AA1 K S - W ER2 - DH IY0 Z\nFOXX  F AA1 K S\nFOXY  F AA1 K - S IY0\nFOY  F OY1\nFOYE  F OY1\nFOYER  F OY1 - ER0\nFOYLE  F OY1 L\nFOYT  F OY1 T\nFRAAS  F R AA1 Z\nFRABLE  F R EY1 - B AH0 L\nFRACAS  F R EY1 - K AH0 S\nFRACE  F R EY1 S\nFRACTAL  F R AE1 K - T AH0 L\nFRACTION  F R AE1 K - SH AH0 N\nFRACTIONAL  F R AE1 K - SH AH0 - N AH0 L\nFRACTIONALLY  F R AE1 K - SH AH0 N - AH0 L - IY0\nFRACTIONALLY(2)  F R AE1 K SH - N AH0 - L IY0\nFRACTIONS  F R AE1 K - SH AH0 N Z\nFRACTIOUS  F R AE1 K - SH AH0 S\nFRACTIOUSNESS  F R AE1 K - SH AH0 S - N AH0 S\nFRACTURE  F R AE1 K - CH ER0\nFRACTURE(2)  F R AE1 K - SH ER0\nFRACTURED  F R AE1 K - CH ER0 D\nFRACTURES  F R AE1 K - CH ER0 Z\nFRACTURES(2)  F R AE1 K - SH ER0 Z\nFRACTURING  F R AE1 K - CH ER0 - IH0 NG\nFRADETTE  F R AH0 - D EH1 T\nFRADKIN  F R AE1 D - K IH0 N\nFRADY  F R EY1 - D IY0\nFRAGA  F R AA1 - G AH0\nFRAGALE  F R AA0 - G AA1 - L IY0\nFRAGER  F R EY1 - G ER0\nFRAGILE  F R AE1 - JH AH0 L\nFRAGILITY  F R AH0 - JH IH1 - L AH0 - T IY0\nFRAGMENT  F R AE1 G - M AH0 N T\nFRAGMENTARY  F R AE1 G - M AH0 N - T EH2 - R IY0\nFRAGMENTATION  F R AE2 G - M AH0 N - T EY1 - SH AH0 N\nFRAGMENTED  F R AE1 G - M AH0 N - T IH0 D\nFRAGMENTED(2)  F R AE1 G - M AH0 - N IH0 D\nFRAGMENTING  F R AE1 G - M AH0 N - T IH0 NG\nFRAGMENTING(2)  F R AE1 G - M AH0 - N IH0 NG\nFRAGMENTS  F R AE1 G - M AH0 N T S\nFRAGO  F R EY1 - G OW0\nFRAGONARD  F R AE1 - G AH0 - N ER0 D\nFRAGONARD(2)  F R AE1 - G AH0 - N AA0 R D\nFRAGOSO  F R AA0 - G OW1 - S OW0\nFRAGRANCE  F R EY1 - G R AH0 N S\nFRAGRANCES  F R EY1 - G R AH0 N - S AH0 Z\nFRAGRANCES(2)  F R EY1 - G R AH0 N - S IH0 Z\nFRAGRANT  F R EY1 - G R AH0 N T\nFRAHER  F R AA1 - ER0\nFRAHM  F R AE1 M\nFRAIL  F R EY1 L\nFRAILEY  F R EY1 - L IY0\nFRAILTIES  F R EY1 L - T IY0 Z\nFRAILTY  F R EY1 L - T IY0\nFRAIM  F R EY1 M\nFRAIN  F R EY1 N\nFRAINE  F R EY1 N\nFRAIOLI  F R AY0 - OW1 - L IY0\nFRAIRE  F R EH1 R\nFRAISER  F R EY1 - ZH ER0\nFRAIZER  F R EY1 - ZH ER0\nFRAKER  F R EY1 - K ER0\nFRAKES  F R EY1 K S\nFRALEIGH  F R EY1 - L IY0\nFRALEY  F R EY1 - L IY0\nFRALICK  F R AE1 - L IH0 K\nFRALIN  F R AE1 - L IH0 N\nFRALIX  F R AE1 - L IH0 K S\nFRAM  F R AE1 M\nFRAMATOME  F R AE1 - M AH0 - T OW2 M\nFRAME  F R EY1 M\nFRAMED  F R EY1 M D\nFRAMER  F R EY1 - M ER0\nFRAMERS  F R EY1 - M ER0 Z\nFRAMERS'  F R AE1 - M ER0 Z\nFRAMES  F R EY1 M Z\nFRAMEWORK  F R EY1 M - W ER2 K\nFRAMING  F R EY1 - M IH0 NG\nFRAMINGHAM  F R EY1 - M IH0 NG - HH AE2 M\nFRAMPTON  F R AE1 M P - T AH0 N\nFRAN  F R AE1 N\nFRANA  F R AE1 - N AH0\nFRANC  F R AE1 NG K\nFRANC'S  F R AE1 NG K S\nFRANCA  F R AE1 NG - K AH0\nFRANCAIS  F R AA0 N - S EY1\nFRANCAISE  F R AA0 N - S EH1 Z\nFRANCAISES  F R AA0 N - S EH1 Z\nFRANCAVILLA  F R AA0 N - K AA0 - V IH1 - L AH0\nFRANCE  F R AE1 N S\nFRANCE'S  F R AE1 N - S IH0 Z\nFRANCEK  F R AE1 N - CH EH2 K\nFRANCES  F R AE1 N - S IH0 S\nFRANCESCA  F R AE0 N - CH EH1 - S K AH0\nFRANCESCHI  F R AA0 N - CH EH1 S - K IY0\nFRANCESCHINI  F R AA0 N - CH EH0 S - K IY1 - N IY0\nFRANCESCO  F R AE0 N - CH EH1 - S K OW0\nFRANCESCO'S  F R AE0 N - CH EH1 - S K OW0 Z\nFRANCESCONI  F R AA0 N - CH EH0 - S K OW1 - N IY0\nFRANCESE  F R AA0 N - CH EY1 - Z IY0\nFRANCESMARY  F R AE2 N - S AH0 - S M EH1 - R IY0\nFRANCHI  F R AA1 N - K IY0\nFRANCHIK  F R AE1 N - CH IH0 K\nFRANCHINI  F R AA0 N - K IY1 - N IY0\nFRANCHINO  F R AA0 N - K IY1 - N OW0\nFRANCHISE  F R AE1 N - CH AY2 Z\nFRANCHISE'S  F R AE1 N - CH AY2 - Z IH0 Z\nFRANCHISED  F R AE1 N - CH AY0 Z D\nFRANCHISEE  F R AE1 N - CH AY2 - Z IY1\nFRANCHISEES  F R AE2 N - CH AY0 - Z IY1 Z\nFRANCHISEES'  F R AE2 N - CH AY0 - Z IY1 Z\nFRANCHISER  F R AE1 N - CH AY2 - Z ER0\nFRANCHISERS  F R AE1 N - CH AY2 - Z ER0 Z\nFRANCHISES  F R AE1 N - CH AY2 - Z IH0 Z\nFRANCHISING  F R AE1 N - CH AY0 - Z IH0 NG\nFRANCHOT  F R AE1 N - K AH0 T\nFRANCIA  F R AA1 N - CH AH0\nFRANCIE  F R AE1 NG - K IY0\nFRANCIES  F R AH0 N - S IY1 Z\nFRANCINE  F R AE0 N - S IY1 N\nFRANCINE'S  F R AE0 N - S IY1 N Z\nFRANCINES  F R AE0 N - S IY1 N Z\nFRANCIS  F R AE1 N - S AH0 S\nFRANCIS'  F R AE1 N - S AH0 S\nFRANCIS'(2)  F R AE1 N - S IH0 S\nFRANCIS(2)  F R AE1 N - S IH0 S\nFRANCISCAN  F R AE0 N - S IH1 - S K AH0 N\nFRANCISCANS  F R AE0 N - S IH1 - S K AH0 N Z\nFRANCISCO  F R AE0 N - S IH1 - S K OW0\nFRANCISCO'S  F R AE0 N - S IH1 - S K OW0 Z\nFRANCISO  F R AE0 N - S IY1 - S OW0\nFRANCISVILLE  F R AE1 N - S IH0 - S V IH2 L\nFRANCK  F R AE1 NG K\nFRANCKE  F R AE1 NG K\nFRANCKLIN  F R AE1 NG - K L IH0 N\nFRANCKLYN  F R AE1 NG - K L IH0 N\nFRANCKOWIAK  F R AH0 N - S K AW1 - IY0 - AE0 K\nFRANCO  F R AE1 NG - K OW0\nFRANCO'S  F R AE1 NG - K OW0 Z\nFRANCOEUR  F R AH0 N - K ER1\nFRANCOIS  F R AA0 N - S W AA1\nFRANCOISE  F R AE0 N - S W AA1 Z\nFRANCOISE(2)  F R AE0 N - S W AA1\nFRANCOM  F R AE1 NG - K AA0 M\nFRANCOPHILE  F R AE1 NG - K AH0 - F AY2 L\nFRANCORP  F R AE1 N - K AO2 R P\nFRANCS  F R AE1 NG K S\nFRANCY  F R AE1 N - S IY0\nFRANCYNE  F R AE1 N - S AY2 N\nFRANCZAK  F R AE1 N - CH AE0 K\nFRANDSEN  F R AE1 N D - S AH0 N\nFRANE  F R EY1 N\nFRANEK  F R AE1 - N IH0 K\nFRANEY  F R EY1 - N IY0\nFRANGOS  F R AE1 NG - G OW0 Z\nFRANJO  F R AE1 N - JH OW0\nFRANK  F R AE1 NG K\nFRANK'S  F R AE1 NG K S\nFRANKE  F R AE1 NG K\nFRANKED  F R AE1 NG K T\nFRANKEL  F R AE1 NG - K AH0 L\nFRANKEN  F R AE1 NG - K AH0 N\nFRANKENBERG  F R AE1 NG - K AH0 N - B ER0 G\nFRANKENBERGER  F R AE1 NG - K AH0 N - B ER0 - G ER0\nFRANKENBERRY  F R AE1 NG - K AH0 N - B EH2 - R IY0\nFRANKENFIELD  F R AE1 NG - K AH0 N - F IY2 L D\nFRANKENHEIMER  F R AE1 NG - K AH0 N - HH AY2 - M ER0\nFRANKENSTEIN  F R AE1 NG - K AH0 N - S T AY2 N\nFRANKENSTEIN'S  F R AE1 NG - K AH0 N - S T AY2 N Z\nFRANKENSTEIN'S(2)  F R AE1 NG - K AH0 N - S T IY2 N Z\nFRANKENSTEIN(2)  F R AE1 NG - K AH0 N - S T IY2 N\nFRANKFORT  F R AE1 NG K - F ER0 T\nFRANKFORT'S  F R AE1 NG K - F ER0 T S\nFRANKFURT  F R AE1 NG K - F ER0 T\nFRANKFURT'S  F R AE1 NG K - F ER0 T S\nFRANKFURTER  F R AE1 NG K - F ER0 - T ER0\nFRANKFURTERS  F R AE1 NG K - F ER0 - T ER0 Z\nFRANKHOUSER  F R AE1 NG K - HH AW2 - S ER0\nFRANKIE  F R AE1 NG - K IY0\nFRANKIEWICZ  F R AE1 N - K AH0 - V IH0 CH\nFRANKINCENSE  F R AE1 NG - K AH0 N - S EH2 N S\nFRANKING  F R AE1 NG - K IH0 NG\nFRANKINO  F R AE0 NG - K IY1 - N OW0\nFRANKISH  F R AE1 NG - K IH0 SH\nFRANKL  F R AE1 NG - K AH0 L\nFRANKLAND  F R AE1 NG - K L AH0 N D\nFRANKLIN  F R AE1 NG - K L IH0 N\nFRANKLIN'S  F R AE1 NG - K L AH0 N Z\nFRANKLINITE  F R AE1 NG - K L IH0 - N AY2 T\nFRANKLINVILLE  F R AE1 NG - K L IH0 N - V IH0 L\nFRANKLY  F R AE1 NG - K L IY0\nFRANKLYN  F R AE1 NG - K L IH0 N\nFRANKNESS  F R AE1 NG K - N AH0 S\nFRANKO  F R AE1 NG - K OW0\nFRANKOVICH  F R AE1 NG - K AH0 - V IH0 CH\nFRANKOWSKI  F R AH0 NG - K AO1 F S - K IY0\nFRANKS  F R AE1 NG K S\nFRANKSON  F R AE1 NG K - S AH0 N\nFRANKUM  F R AE1 NG - K AH0 M\nFRANNIE  F R AE1 - N IY0\nFRANNY  F R AE1 - N IY0\nFRANS  F R AE1 N Z\nFRANSEN  F R AE1 N - S AH0 N\nFRANSON  F R AE1 N - S AH0 N\nFRANSSEN  F R AE1 N - S AH0 N\nFRANTA  F R AE1 N - T AH0\nFRANTIC  F R AE1 N - T IH0 K\nFRANTICALLY  F R AE1 N - T AH0 - K AH0 - L IY0\nFRANTICALLY(2)  F R AE1 N - T AH0 K - L IY0\nFRANTICALLY(3)  F R AE1 - N AH0 - K AH0 - L IY0\nFRANTICALLY(4)  F R AE1 - N AH0 K - L IY0\nFRANTOM  F R AE1 N - T AH0 M\nFRANTZ  F R AE1 N T S\nFRANTZEN  F R AE1 N T - Z AH0 N\nFRANYO  F R AA1 - N Y OW0\nFRANZ  F R AE1 N Z\nFRANZE  F R AE1 N Z\nFRANZEL  F R AE1 N - Z AH0 L\nFRANZEN  F R AE1 N - Z AH0 N\nFRANZESE  F R AA0 N - Z EY1 - Z IY0\nFRANZONE  F R AA0 N - Z OW1 - N IY0\nFRANZONI  F R AA0 N - Z OW1 - N IY0\nFRAP  F R AE1 P\nFRAPH  F R AE1 F\nFRAPH'S  F R AE1 F S\nFRAPPIER  F R AE1 - P IY0 - ER0\nFRARY  F R EH1 - R IY0\nFRASCA  F R AA1 S - K AH0\nFRASCELLA  F R AA0 S - CH EH1 - L AH0\nFRASCH  F R AE1 SH\nFRASCO  F R AA1 - S K OW0\nFRASE  F R EY1 Z\nFRASER  F R EY1 - Z ER0\nFRASER'S  F R EY1 - Z ER0 Z\nFRASHER  F R AE1 - SH ER0\nFRASHIER  F R EY1 - ZH Y ER0\nFRASIER  F R EY1 - ZH ER0\nFRASIER'S  F R EY1 - ZH ER0 Z\nFRASURE  F R AA1 - ZH ER0\nFRATANGELO  F R AA0 - T AA0 NG - G EH1 - L OW0\nFRATE  F R EY1 T\nFRATER  F R EY1 - T ER0\nFRATERNAL  F R AH0 - T ER1 - N AH0 L\nFRATERNITIES  F R AH0 - T ER1 - N AH0 - T IY0 Z\nFRATERNITY  F R AH0 - T ER1 - N AH0 - T IY0\nFRATERNITY(2)  F R AH0 - T ER1 - N IH0 - T IY0\nFRATERNIZE  F R AE1 - T ER0 - N AY2 Z\nFRATERNIZING  F R AE1 - T ER0 - N AY2 - Z IH0 NG\nFRATES  F R EY1 T S\nFRATRICIDE  F R AE1 - T R AH0 - S AY2 D\nFRATRICIDES  F R AE1 - T R AH0 - S AY2 D Z\nFRATUS  F R AE1 - T IH0 S\nFRATZKE  F R AE1 T S K\nFRATZKE(2)  F R AE1 T - S K IY0\nFRAU  F R AW1\nFRAUD  F R AO1 D\nFRAUDS  F R AO1 D Z\nFRAUDSTER  F R AO1 D - S T ER0\nFRAUDSTER'S  F R AO1 D - S T ER0 Z\nFRAUDSTERS  F R AO1 D - S T ER0 Z\nFRAUDULENT  F R AO1 - JH AH0 - L AH0 N T\nFRAUDULENTLY  F R AO1 - D UW0 - L AH0 N T - L IY0\nFRAUGHT  F R AO1 T\nFRAUM  F R AW1 M\nFRAUM(2)  F R AA1 M\nFRAUSTO  F R AO1 - S T OW0\nFRAVEL  F R AE1 - V AH0 L\nFRAWLEY  F R AO1 - L IY0\nFRAY  F R EY1\nFRAYED  F R EY1 D\nFRAYER  F R EY1 - ER0\nFRAYING  F R EY1 - IH0 NG\nFRAYN  F R EY1 N\nFRAYNE  F R EY1 N\nFRAZE  F R EY1 Z\nFRAZEE  F R AH0 - Z IY1\nFRAZER  F R EY1 - Z ER0\nFRAZIER  F R EY1 - ZH ER0\nFRAZZANO  F R AH0 - Z AA1 - N OW0\nFRAZZINI  F R AA0 T - S IY1 - N IY0\nFRAZZLE  F R AE1 - Z AH0 L\nFRAZZLED  F R AE1 - Z AH0 L D\nFREAD  F R EH1 D\nFREAK  F R IY1 K\nFREAKED  F R IY1 K T\nFREAKING  F R IY1 - K IH0 NG\nFREAKS  F R IY1 K S\nFREAKY  F R IY1 - K IY0\nFREAN  F R IY1 N\nFREAR  F R IH1 R\nFREARS  F R IY1 R Z\nFREAS  F R IY1 Z\nFREASE  F R IY1 Z\nFREBERG  F R IY1 - B ER0 G\nFRECH  F R EH1 K\nFRECHETTE  F R IH0 - SH EH1 T\nFRECK  F R EH1 K\nFRECKLE  F R EH1 - K AH0 L\nFRECKLED  F R EH1 - K AH0 L D\nFRECKLES  F R EH1 - K AH0 L Z\nFRED  F R EH1 D\nFRED'S  F R EH1 D Z\nFREDA  F R EH1 D\nFREDDIE  F R EH1 - D IY0\nFREDDY  F R EH1 - D IY0\nFREDDY'S  F R EH1 - D IY0 Z\nFREDDYE  F R EH1 - D IY0\nFREDE  F R IY1 D\nFREDELL  F R EH1 - D AH0 L\nFREDELLA  F R EH0 - D EH1 - L AH0\nFREDENBURG  F R IY1 - D AH0 N - B ER0 G\nFREDERIC  F R EH1 D - R IH0 K\nFREDERICA  F R EH2 - D ER0 - IY1 - K AH0\nFREDERICK  F R EH1 D - R IH0 K\nFREDERICK'S  F R EH1 D - R IH0 K S\nFREDERICK'S(2)  F R EH1 - D ER0 - IH0 K S\nFREDERICK(2)  F R EH1 - D ER0 - IH0 K\nFREDERICKA  F R EY0 - D EH0 - R IY1 - K AH0\nFREDERICKS  F R EH1 D - R IH0 K S\nFREDERICKSBURG  F R EH1 D - R IH0 K S - B ER0 G\nFREDERICKSBURG(2)  F R EH1 - D ER0 - IH0 K S - B ER0 G\nFREDERICKSEN  F R EH1 - D ER0 - IH0 K - S AH0 N\nFREDERICKSEN(2)  F R EH1 D - R IH0 K - S AH0 N\nFREDERICKSON  F R EH1 - D ER0 - IH0 K - S AH0 N\nFREDERICKSON(2)  F R EH1 D - R IH0 K - S AH0 N\nFREDERICO  F R EH0 - D ER0 - IY1 - K OW0\nFREDERIKA  F R EY0 - D EH0 - R IY1 - K AH0\nFREDERIKSEN  F R EH1 - D ER0 - IH0 K - S AH0 N\nFREDERKING  F R EH1 - D ER0 - K IH2 NG\nFREDETTE  F R IH0 - D EH1 T\nFREDIANI  F R EH0 - D IY0 - AA1 - N IY0\nFREDIN  F R EH1 - D IH0 N\nFREDKIN  F R EH1 D - K IH0 N\nFREDLUND  F R EH1 D - L AH0 N D\nFREDMAN  F R EH1 D - M AH0 N\nFREDO  F R IY1 - D OW0\nFREDRIC  F R EH1 D - R IH0 K\nFREDRICH  F R EH1 D - R IH0 K\nFREDRICK  F R EH1 D - R IH0 K\nFREDRICKS  F R EH1 D - R IH0 K S\nFREDRICKSEN  F R EH1 D - R IH0 K - S AH0 N\nFREDRICKSON  F R EH1 D - R IH0 K - S AH0 N\nFREDRIKSEN  F R IH0 - D R IH1 K - S AH0 N\nFREDRIKSON  F R EH1 D - R IH0 K - S AH0 N\nFREE  F R IY1\nFREEBERG  F R IY1 - B ER0 G\nFREEBIE  F R IY1 - B IY0\nFREEBIES  F R IY1 - B IY0 Z\nFREEBORN  F R IY1 - B ER0 N\nFREEBURG  F R IY1 - B ER0 G\nFREEBURN  F R IY1 - B ER2 N\nFREED  F R IY1 D\nFREEDENBERG  F R IY1 - D EH2 N - B ER0 G\nFREEDLAND  F R IY1 D - L AH0 N D\nFREEDLE  F R IY1 - D AH0 L\nFREEDMAN  F R IY1 D - M AH0 N\nFREEDMAN'S  F R IY1 D - M AH0 N Z\nFREEDOM  F R IY1 - D AH0 M\nFREEDOM'S  F R IY1 - D AH0 M Z\nFREEDOMS  F R IY1 - D AH0 M Z\nFREEFALL  F R IY1 - F AO2 L\nFREEFORM  F R IY1 - F AO2 R M\nFREEH  F R IY1\nFREEH'S  F R IY1 Z\nFREEHAND  F R IY1 - HH AE2 N D\nFREEHLING  F R IY1 - L IH0 NG\nFREEHOLD  F R IY1 - HH OW2 L D\nFREEHOLDER  F R IY1 - HH OW2 L - D ER0\nFREEHOLDERS  F R IY1 - HH OW2 L - D ER0 Z\nFREEING  F R IY1 - IH0 NG\nFREEL  F R IY1 L\nFREELANCE  F R IY1 - L AE2 N S\nFREELANCER  F R IY1 - L AE2 N - S ER0\nFREELANCERS  F R IY1 - L AE2 N - S ER0 Z\nFREELANCING  F R IY1 - L AE2 N - S IH0 NG\nFREELAND  F R IY1 - L AH0 N D\nFREELOADER  F R IY1 - L OW2 - D ER0\nFREELOADERS  F R IY1 - L OW2 - D ER0 Z\nFREELOVE  F R IY1 - L AH2 V\nFREELS  F R IY1 L Z\nFREELY  F R IY1 - L IY0\nFREEMAN  F R IY1 - M AH0 N\nFREEMAN'S  F R IY1 - M AH0 N Z\nFREEMANS  F R IY1 - M AH0 N Z\nFREEMASON  F R IY1 - M EY1 - S AH0 N\nFREEMASONRY  F R IY1 - M EY1 - S AH0 N - R IY0\nFREEMEN  F R IY1 - M EH0 N\nFREEMEN'S  F R IY1 - M EH0 N Z\nFREEMON  F R IY1 - M AH0 N\nFREEMONT  F R IY1 - M AA2 N T\nFREEMYER  F R IY1 - M IY0 - ER0\nFREEN  F R IY1 N\nFREENEY  F R IY1 - N IY0\nFREENY  F R IY1 - N IY0\nFREEPORT  F R IY1 - P AO2 R T\nFREEPORT'S  F R IY1 - P AO2 R T S\nFREER  F R IY1 - ER0\nFREES  F R IY1 Z\nFREESE  F R IY1 Z\nFREEST  F R IY1 - IH0 S T\nFREESTANDING  F R IY1 - S T AE2 N - D IH0 NG\nFREESTONE  F R IY1 - S T OW2 N\nFREESTYLE  F R IY1 - S T AY2 L\nFREET  F R IY1 T\nFREETHINKER  F R IY1 - TH IH1 NG - K ER0\nFREETHINKERS  F R IY1 - TH IH1 NG - K ER0 Z\nFREETOWN  F R IY1 - T AW2 N\nFREEWAY  F R IY1 - W EY2\nFREEWAYS  F R IY1 - W EY2 Z\nFREEWHEELING  F R IY1 - W IY2 - L IH0 NG\nFREEWHEELING(2)  F R IY1 HH - W IY2 - L IH0 NG\nFREEWING  F R IY1 - W IH0 NG\nFREEZE  F R IY1 Z\nFREEZER  F R IY1 - Z ER0\nFREEZERS  F R IY1 - Z ER0 Z\nFREEZES  F R IY1 - Z IH0 Z\nFREEZING  F R IY1 - Z IH0 NG\nFREGEAU  F R IH0 - ZH OW1\nFREGIA  F R IY1 - JH IY0 - AH0\nFREGOSO  F R EH0 - G OW1 - S OW0\nFREI  F R AY1\nFREIA  F R IY1 - AH0\nFREIBERG  F R AY1 - B ER0 G\nFREIBERGER  F R AY1 - B ER0 - G ER0\nFREIBURGER  F R AY1 - B ER0 - G ER0\nFREID  F R IY1 D\nFREIDAN  F R IY1 - D AH0 N\nFREIDEL  F R AY1 - D AH0 L\nFREIDMAN  F R AY1 D - M AH0 N\nFREIDMAN(2)  F R IY1 D - M AH0 N\nFREIDY  F R IY1 - D IY0\nFREIDY'S  F R IY1 - D IY0 Z\nFREIDY'S(2)  F R AY1 - D IY0 Z\nFREIDY(2)  F R AY1 - D IY0\nFREIER  F R EY1 - ER0\nFREIERMUTH  F R AY1 - ER0 - M UW0 TH\nFREIGHT  F R EY1 T\nFREIGHTER  F R EY1 - T ER0\nFREIGHTERS  F R EY1 - T ER0 Z\nFREIGHTLINER  F R EY1 T - L AY2 - N ER0\nFREIGHTWAY  F R EY1 T - W EY2\nFREIGHTWAYS  F R EY1 T - W EY2 Z\nFREIHEIT  F R AY1 - HH AY2 T\nFREIJE  F R IY1 JH\nFREILICH  F R AY1 - L IH0 K\nFREIMAN  F R AY1 - M AH0 N\nFREIMAN(2)  F R IY1 - M AH0 N\nFREIMARK  F R AY1 - M AA0 R K\nFREIMUTH  F R AY1 - M UW0 TH\nFREIN  F R EY1 N\nFREIND  F R AY1 N D\nFREIRE  F R IH1 R\nFREIS  F R IY1 Z\nFREISE  F R IY1 S\nFREITAG  F R AY1 - T AH0 G\nFREITAS  F R AY1 - T AH0 Z\nFREIWALD  F R AY1 - W AO2 L D\nFREL  F R EH1 L\nFRELIMO  F R EH1 - L IH0 - M OW2\nFRELS  F R EH1 L Z\nFREMD  F R EH1 M D\nFREMD'S  F R EH1 M D Z\nFREMIN  F R EH1 - M IH0 N\nFREMONT  F R IY1 - M AA0 N T\nFRENCH  F R EH1 N CH\nFRENCH'S  F R EH1 N - CH IH0 Z\nFRENCH-POLYNESIA  F R EH1 N CH - P AA2 - L IH0 - N IY1 - ZH AH0\nFRENCHMAN  F R EH1 N CH - M AE0 N\nFRENCHMEN  F R EH1 N CH - M EH0 N\nFRENETIC  F R AH0 - N EH1 - T IH0 K\nFRENETTE  F R IH0 - N EH1 T\nFRENI  F R EH1 - N IY0\nFRENKEL  F R EH1 NG - K AH0 L\nFRENTZ  F R EH1 N T S\nFRENZ  F R EH1 N Z\nFRENZEL  F R EH1 N - Z AH0 L\nFRENZEL(2)  F R EH2 N - Z EH1 L\nFRENZIED  F R EH1 N - Z IY0 D\nFRENZY  F R EH1 N - Z IY0\nFREON  F R IY1 - AA0 N\nFREONS  F R IY1 - AA0 N Z\nFREQUENCIES  F R IY1 - K W AH0 N - S IY0 Z\nFREQUENCY  F R IY1 - K W AH0 N - S IY0\nFREQUENT  F R IY1 - K W AH0 N T\nFREQUENT(2)  F R IY1 - K W EH2 N T\nFREQUENTED  F R IY1 - K W AH0 N - T IH0 D\nFREQUENTLY  F R IY1 - K W AH0 N T - L IY0\nFREQUENTS  F R IY1 - K W AH0 N T S\nFREQUENTS(2)  F R IY1 - K W EH2 N T S\nFRERE  F R IH1 R\nFRERES  F R IY1 R Z\nFRERICHS  F R EH1 - R IH0 K S\nFRERICKS  F R EH1 - R IH0 K S\nFRERIKA  F R EH1 - R IH0 - K AH0\nFRERKING  F R ER1 - K IH0 NG\nFRESCO  F R EH1 S - K OW0\nFRESCO'S  F R EH1 S - K OW0 Z\nFRESCOED  F R EH1 S - K OW0 D\nFRESCOES  F R EH1 S - K OW0 Z\nFRESE  F R IY1 Z\nFRESENIUS  F R AH0 - S IY1 - N IY0 - AH0 S\nFRESH  F R EH1 SH\nFRESHBAKE  F R EH1 SH - B EY2 K\nFRESHBAKE'S  F R EH1 SH - B EY2 K S\nFRESHEN  F R EH1 - SH AH0 N\nFRESHENER  F R EH1 - SH AH0 N - ER0\nFRESHENER(2)  F R EH1 SH - N ER0\nFRESHENERS  F R EH1 - SH AH0 N - ER0 Z\nFRESHENERS(2)  F R EH1 SH - N ER0 Z\nFRESHENING  F R EH1 - SH AH0 N - IH0 NG\nFRESHENING(2)  F R EH1 SH - N IH0 NG\nFRESHER  F R EH1 - SH ER0\nFRESHEST  F R EH1 - SH AH0 S T\nFRESHKILL  F R EH1 SH - K IH2 L\nFRESHKILLS  F R EH1 SH - K IH2 L Z\nFRESHLEY  F R EH1 SH - L IY0\nFRESHLY  F R EH1 SH - L IY0\nFRESHMAN  F R EH1 SH - M AH0 N\nFRESHMEN  F R EH1 SH - M IH0 N\nFRESHNESS  F R EH1 SH - N AH0 S\nFRESHOUR  F R EH1 - S AW0 R\nFRESHWATER  F R EH1 SH - W AO2 - T ER0\nFRESNO  F R EH1 Z - N OW0\nFRESNO'S  F R EH1 Z - N OW0 Z\nFRESQUEZ  F R EY0 S - K W EH1 Z\nFRESTON  F R EH1 - S T AH0 N\nFRET  F R EH1 T\nFRETFUL  F R EH1 T - F AH0 L\nFRETS  F R EH1 T S\nFRETT  F R EH1 T\nFRETTED  F R EH1 - T IH0 D\nFRETTER  F R EH1 - T ER0\nFRETTING  F R EH1 - T IH0 NG\nFRETWELL  F R EH1 T - W EH2 L\nFRETZ  F R EH1 T S\nFREUD  F R OY1 D\nFREUD'S  F R OY1 D Z\nFREUDENBERG  F R OY1 - D AH0 N - B ER0 G\nFREUDENTHAL  F R OY1 - D IH0 N - TH AH0 L\nFREUDIAN  F R UW1 - D IY0 - AH0 N\nFREUND  F R UW1 N D\nFREUNDLICH  F R OY1 N D - L IH0 K\nFREVERT  F R EH1 - V ER0 T\nFREW  F R UW1\nFREWEN  F R UW1 - AH0 N\nFREWIN  F R UW1 - IH0 N\nFREY  F R EY1\nFREYA  F R EY1 - AH0\nFREYER  F R EY1 - ER0\nFREYERMUTH  F ER1 - AY0 R - M UW0 TH\nFREYMAN  F R EY1 - M AH0 N\nFREYMILLER  F R EY1 - M IH2 - L ER0\nFREYNE  F R EY1 N\nFREYRE  F R EH1 R\nFREYTAG  F R EY1 - T AH0 G\nFREZZA  F R EH1 - Z AH0\nFRIAR  F R AY1 - ER0\nFRIARS  F R AY1 - ER0 Z\nFRIARY  F R AY1 - ER0 - IY0\nFRIAS  F R IY1 - AH0 Z\nFRIBERG  F R AY1 - B ER0 G\nFRIBOURG  F R AY1 - B AO2 R G\nFRICANO  F R IY0 - K AA1 - N OW0\nFRICK  F R IH1 K\nFRICKE  F R IH1 K\nFRICKER  F R IH1 - K ER0\nFRICKEY  F R IH1 - K IY0\nFRICKS  F R IH1 K S\nFRICTION  F R IH1 K - SH AH0 N\nFRICTIONLESS  F R IH1 K - SH AH0 N - L AH0 S\nFRICTIONS  F R IH1 K - SH AH0 N Z\nFRIDA  F R IY1 - D AH0\nFRIDAY  F R AY1 - D IY0\nFRIDAY'S  F R AY1 - D IY0 Z\nFRIDAY'S(2)  F R AY1 - D EY2 Z\nFRIDAY(2)  F R AY1 - D EY2\nFRIDAYS  F R AY1 - D IY0 Z\nFRIDAYS(2)  F R AY1 - D EY2 Z\nFRIDDLE  F R IH1 - D AH0 L\nFRIDGE  F R IH1 JH\nFRIDLEY  F R IH1 D - L IY0\nFRIDMAN  F R IH1 D - M AH0 N\nFRIDOLF  F R IH1 - D OW0 L F\nFRIDOVICH  F R IH1 - D AH0 - V IH0 CH\nFRIDRICH  F R IH1 - D R IH0 K\nFRIDSON  F R IH1 D - S AH0 N\nFRIE  F ER1 - IY0\nFRIEBEL  F R IY1 - B AH0 L\nFRIED  F R AY1 D\nFRIED(2)  F R IY1 D\nFRIEDA  F R IY1 - D AH0\nFRIEDAN  F R IY1 - D AH0 N\nFRIEDBERG  F R AY1 D - B ER0 G\nFRIEDE  F R IY1 D\nFRIEDEL  F R IY1 - D AH0 L\nFRIEDEN  F R IY1 - D AH0 N\nFRIEDENBERG  F R IY1 - D AH0 N - B ER0 G\nFRIEDER  F R AY1 - D ER0\nFRIEDERICH  F R IY1 - D ER0 - IH0 K\nFRIEDERIKE  F R IY1 - D ER0 - IH0 K\nFRIEDHELM  F R IY1 D - HH EH2 L M\nFRIEDHOFF  F R IY1 D - HH AO2 F\nFRIEDL  F R IY1 - D AH0 L\nFRIEDLAND  F R IY1 D - L AH0 N D\nFRIEDLANDER  F R IY1 D - L AH0 N - D ER0\nFRIEDLEY  F R IY1 D - L IY0\nFRIEDLI  F R IY1 D - L IY2\nFRIEDLINE  F R IY1 D - L AY2 N\nFRIEDLY  F R IY1 D - L IY0\nFRIEDMAN  F R IY1 D - M AH0 N\nFRIEDMAN'S  F R IY1 D - M AH0 N Z\nFRIEDMANN  F R IY1 D - M AH0 N\nFRIEDRICH  F R IY1 - D R IH0 K\nFRIEDRICHS  F R IY1 - D R IH0 K S\nFRIEDRICHSEN  F R IY1 - D R IH0 K - S AH0 N\nFRIEDRICK  F R IY1 - D R IH0 K\nFRIEDSAM  F R IY1 D - S AE2 M\nFRIEDSON  F R IY1 D - S AH0 N\nFRIEDT  F R IY1 D T\nFRIEL  F R IY1 L\nFRIELING  F R IY1 - L IH0 NG\nFRIEMAN  F R IY1 - M AH0 N\nFRIEND  F R EH1 N D\nFRIEND'S  F R EH1 N D Z\nFRIEND'S(2)  F R EH1 N Z\nFRIENDLIER  F R EH1 N D - L IY0 - ER0\nFRIENDLIER(2)  F R EH1 N - L IY0 - ER0\nFRIENDLIEST  F R EH1 N D - L IY0 - AH0 S T\nFRIENDLIEST(2)  F R EH1 N - L IY0 - AH0 S T\nFRIENDLINESS  F R EH1 N D - L IY0 - N IH0 S\nFRIENDLINESS(2)  F R EH1 N - L IY0 - N IH0 S\nFRIENDLY  F R EH1 N D - L IY0\nFRIENDLY'S  F R EH1 N - D L IY0 Z\nFRIENDLY'S(2)  F R EH1 N - L IY0 Z\nFRIENDLY(2)  F R EH1 N - L IY0\nFRIENDS  F R EH1 N D Z\nFRIENDS'  F R EH1 N D Z\nFRIENDS'(2)  F R EH1 N Z\nFRIENDS(2)  F R EH1 N Z\nFRIENDSHIP  F R EH1 N D - SH IH0 P\nFRIENDSHIP(2)  F R EH1 N - SH IH0 P\nFRIENDSHIPS  F R EH1 N D - SH IH0 P S\nFRIENDSHIPS(2)  F R EH1 N - SH IH0 P S\nFRIER  F R AY1 - ER0\nFRIERSON  F R IH1 R - S AH0 N\nFRIES  F R AY1 Z\nFRIESE  F R IY1 Z\nFRIESEN  F R IY1 - S AH0 N\nFRIESENHAHN  F R IY1 - S IH0 N - HH AH0 N\nFRIESNER  F R IY1 S - N ER0\nFRIESON  F R IY1 - Z AH0 N\nFRIESS  F R IY1 S\nFRIESZ  F R IY1 SH\nFRIEZE  F R IY1 Z\nFRIGATE  F R IH1 - G AH0 T\nFRIGATE'S  F R IH1 - G AH0 T S\nFRIGATES  F R IH1 - G AH0 T S\nFRIGHT  F R AY1 T\nFRIGHTEN  F R AY1 - T AH0 N\nFRIGHTENED  F R AY1 - T AH0 N D\nFRIGHTENING  F R AY1 - T AH0 N - IH0 NG\nFRIGHTENING(2)  F R AY1 T - N IH0 NG\nFRIGHTENINGLY  F R AY1 - T AH0 N - IH0 NG - L IY0\nFRIGHTENS  F R AY1 - T AH0 N Z\nFRIGHTFUL  F R AY1 T - F AH0 L\nFRIGHTFULLY  F R AY1 T - F AH0 - L IY0\nFRIGID  F R IH1 - JH AH0 D\nFRIGO  F R IY1 - G OW0\nFRIGON  F R IH1 - G AH0 N\nFRIIS  F R IY1 Z\nFRIKKIE  F R IH1 - K IY0\nFRIL  F R IH1 L\nFRILEY  F R IH1 - L IY0\nFRILL  F R IH1 L\nFRILLS  F R IH1 L Z\nFRILLY  F R IH1 - L IY0\nFRINGE  F R IH1 N JH\nFRINGER  F R IH1 N - JH ER0\nFRINGES  F R IH1 N - JH IH0 Z\nFRINK  F R IH1 NG K\nFRIONA  F R IY0 - OW1 - N AH0\nFRISA  F R IY1 - Z AH0\nFRISBEE  F R IH1 S - B IY0\nFRISBIE  F R IH1 S - B IY0\nFRISBY  F R IH1 S - B IY0\nFRISCH  F R IH1 SH\nFRISCIA  F R IY1 - S CH AH0\nFRISCO  F R IY1 - S K OW0\nFRISELLA  F R IH0 - S EH1 - L AH0\nFRISHMAN  F R IH1 SH - M AH0 N\nFRISINA  F R IY0 - S IY1 - N AH0\nFRISINGER  F R IH1 - S IH0 N - JH ER0\nFRISK  F R IH1 S K\nFRISKE  F R IH1 S K\nFRISKED  F R IH1 S K T\nFRISKIN  F R IH1 - S K IH0 N\nFRISKY  F R IH1 S - K IY0\nFRISON  F R IH1 - S AH0 N\nFRIST  F R IH1 S T\nFRISTOE  F R IH1 - S T OW0\nFRITCH  F R IH1 CH\nFRITCHER  F R IH1 - CH ER0\nFRITCHMAN  F R IH1 CH - M AH0 N\nFRITH  F R IH1 TH\nFRITO  F R IY1 - T OW0\nFRITOS  F R IY1 - T OW0 Z\nFRITS  F R IH1 T S\nFRITSCH  F R IH1 CH\nFRITSCHE  F R IH1 CH\nFRITTER  F R IH1 - T ER0\nFRITTERED  F R IH1 - T ER0 D\nFRITTERING  F R IH1 - T ER0 - IH0 NG\nFRITTS  F R IH1 T S\nFRITZ  F R IH1 T S\nFRITZE  F R IH1 T Z\nFRITZEN  F R IH1 T - Z AH0 N\nFRITZI  F R IY1 T - Z IY0\nFRITZIE  F R IH1 T - Z IY0\nFRITZINGER  F R IH1 T - Z IH0 - NG ER0\nFRITZLER  F R IH1 T - S L ER0\nFRITZSCHE  F R IH1 T Z SH\nFRITZSCHE(2)  F R IH1 T SH\nFRITZSCHE(3)  F R IH1 CH\nFRIVOLITY  F R AH0 - V AA1 - L AH0 - T IY0\nFRIVOLOUS  F R IH1 - V AH0 - L AH0 S\nFRIVOLOUSLY  F R IH1 - V AH0 - L AH0 S - L IY0\nFRIX  F R IH1 K S\nFRIZELL  F R IH1 - Z AH0 L\nFRIZZELL  F R IH1 - Z AH0 L\nFRO  F R OW1\nFROBERG  F R OW1 - B ER0 G\nFROCK  F R AA1 K\nFROCKS  F R AA1 K S\nFRODER  F R OW1 - D ER0\nFROEDGE  F R OW1 JH\nFROEHLICH  F R OW1 - L IH0 K\nFROELICH  F R OW1 - L IH0 K\nFROEMMING  F R OW1 - M IH0 NG\nFROESE  F R OW1 S\nFROG  F R AA1 G\nFROG'S  F R AA1 G Z\nFROGG  F R AA1 G\nFROGGE  F R AA1 G\nFROGMAN  F R AA1 G - M AE2 N\nFROGMEN  F R AA1 G - M IH0 N\nFROGMOUTH  F R AA1 G - M AW2 TH\nFROGMOUTHS  F R AA1 G - M AW2 TH S\nFROGMOUTHS(2)  F R AA1 G - M AW2 DH Z\nFROGS  F R AA1 G Z\nFROH  F R OW1\nFROHLICH  F R OW1 - L IH0 K\nFROHMAN  F R OW1 - M AH0 N\nFROHN  F R AA1 N\nFROHNMAYER  F R AO1 N - M AY2 - ER0\nFROIO  F R OW1 - IY0 - OW0\nFROLIC  F R AA1 - L IH0 K\nFROLICKING  F R AA1 - L IH0 - K IH0 NG\nFROLO  F R OW1 - L OW0\nFROM  F R AH1 M\nFROM(2)  F ER0 M\nFROMAN  F R OW1 - M AH0 N\nFROMBUGER  F R OW1 M - B Y UW2 - G ER0\nFROMBUGER'S  F R OW1 M - B Y UW2 - G ER0 Z\nFROME  F R OW1 M\nFROMER  F R OW1 - M ER0\nFROMM  F R AA1 M\nFROMME  F R AA1 M\nFROMMELT  F R AA1 - M IH0 L T\nFROMMER  F R AA1 - M ER0\nFROMSTEIN  F R AA1 M - S T IY2 N\nFROMSTEIN(2)  F R AA1 M - S T AY2 N\nFRONCZAK  F R AA1 N - CH AE0 K\nFROND  F R AA1 N D\nFRONDE  F R AA1 N D\nFRONDS  F R AA1 N D Z\nFRONEK  F R OW1 - N IH0 K\nFRONING  F R OW1 - N IH0 NG\nFRONK  F R AA1 NG K\nFRONT  F R AH1 N T\nFRONT'S  F R AH1 N T S\nFRONTAGE  F R AH1 N - T IH0 JH\nFRONTAL  F R AH1 N - T AH0 L\nFRONTED  F R AH1 N - T IH0 D\nFRONTERA  F R OW0 N - T EH1 - R AH0\nFRONTERHOUSE  F R AH1 N - T ER0 - HH AW2 S\nFRONTIER  F R AH0 N - T IH1 R\nFRONTIER'S  F R AH0 N - T IH1 R Z\nFRONTIERE  F R AA0 N - T Y EH1 R\nFRONTIERES  F R AA0 N - T Y EH1 R Z\nFRONTIERS  F R AH0 N - T IH1 R Z\nFRONTING  F R AH1 N - T IH0 NG\nFRONTLINE  F R AH1 N T - L AY2 N\nFRONTLINE'S  F R AH1 N T - L AY2 N Z\nFRONTRUNNER  F R AH1 N - T R AH2 - N ER0\nFRONTRUNNERS  F R AH1 N - T R AH2 - N ER0 Z\nFRONTS  F R AH1 N T S\nFRONTZ  F R AA1 N T S\nFROSCH  F R AO1 SH\nFROSS  F R AO1 S\nFROST  F R AO1 S T\nFROSTBAN  F R AO1 S T - B AE2 N\nFROSTBITE  F R AO1 S T - B AY2 T\nFROSTBITTEN  F R AO1 S T - B IH2 - T AH0 N\nFROSTED  F R AO1 - S T AH0 D\nFROSTED(2)  F R AO1 - S T IH0 D\nFROSTING  F R AO1 - S T IH0 NG\nFROSTINGS  F R AO1 - S T IH0 NG Z\nFROSTS  F R AO1 S T S\nFROSTY  F R AO1 - S T IY0\nFROTH  F R AO1 TH\nFROTHINESS  F R AO1 - TH IY0 - N IH0 S\nFROTHINGHAM  F R AO1 - TH IH0 NG - HH AE2 M\nFROTHS  F R AO1 TH S\nFROTHY  F R AO1 - TH IY0\nFROWN  F R AW1 N\nFROWNED  F R AW1 N D\nFROWNFELTER  F R AW1 N - F EH2 L - T ER0\nFROWNING  F R AW1 - N IH0 NG\nFROWNINGLY  F R AW1 - N IH0 NG - L IY0\nFROWNS  F R AW1 N Z\nFROZE  F R OW1 Z\nFROZEN  F R OW1 - Z AH0 N\nFRUCHER  F R UW1 - K ER0\nFRUCHEY  F R AH1 - CH IY0\nFRUCHTER  F R AH1 K - T ER0\nFRUCHTMAN  F R AH1 K T - M AH0 N\nFRUCTOSE  F R AH1 K - T OW2 S\nFRUEH  F R UW1\nFRUEHAUF  F R UW1 - HH AO2 F\nFRUEHLING  F R UW1 - L IH0 NG\nFRUGAL  F R UW1 - G AH0 L\nFRUGALITY  F R UW0 - G AE1 - L AH0 - T IY0\nFRUGALLY  F R UW1 - G AH0 - L IY0\nFRUGE  F R UW1 JH\nFRUIN  F R UW1 - IH0 N\nFRUIT  F R UW1 T\nFRUITCAKE  F R UW1 T - K EY2 K\nFRUITCAKES  F R UW1 T - K EY2 K S\nFRUITFUL  F R UW1 T - F AH0 L\nFRUITING  F R UW1 - T IH0 NG\nFRUITION  F R UW0 - IH1 - SH AH0 N\nFRUITLESS  F R UW1 T - L AH0 S\nFRUITLESSLY  F R UW1 T - L AH0 S - L IY0\nFRUITOPIA  F R UW2 - T OW1 - P IY0 - AH0\nFRUITS  F R UW1 T S\nFRUITY  F R UW1 - T IY0\nFRUM  F R AH1 M\nFRUMKIN  F R AH1 M - K IH0 N\nFRUMP  F R AH1 M P\nFRUMPY  F R AH1 M - P IY0\nFRUNZE  F R AH1 N Z\nFRUSEN  F R UW1 - Z AH0 N\nFRUSH  F R AH1 SH\nFRUSTRATE  F R AH1 - S T R EY2 T\nFRUSTRATED  F R AH1 - S T R EY2 - T AH0 D\nFRUSTRATES  F R AH1 - S T R EY2 T S\nFRUSTRATING  F R AH1 - S T R EY2 - T IH0 NG\nFRUSTRATINGLY  F R AH1 - S T R EY2 - T IH0 NG - L IY0\nFRUSTRATION  F R AH0 S - T R EY1 - SH AH0 N\nFRUSTRATIONS  F R AH0 S - T R EY1 - SH AH0 N Z\nFRUTCHEY  F R AH1 - CH IY0\nFRUTH  F R UW1 TH\nFRUTIGER  F R AH1 - T IH0 - G ER0\nFRY  F R AY1\nFRY'S  F R AY1 Z\nFRYAR  F R AY1 - ER0\nFRYBERGER  F R AY1 - B ER0 - G ER0\nFRYE  F R AY1\nFRYER  F R AY1 - ER0\nFRYERS  F R AY1 - ER0 Z\nFRYING  F R AY1 - IH0 NG\nFRYLING  F R AY1 - L IH0 NG\nFRYMAN  F R AY1 - M AH0 N\nFRYMIRE  F R IH0 - M AY1 R\nFRYMIRE(2)  F R IY0 - M AY1 R\nFRYREAR  F R AY1 - R IH2 R\nFRYSINGER  F R IH1 - S IH0 N - JH ER0\nFS  F S\nFS(2)  EH1 - F EH1 S\nFSI  F S IY1\nFTHENAKIS  F TH EH0 - N AA1 - K IH0 S\nFU  F UW1\nFUCCI  F UW1 - CH IY0\nFUCHS  F Y UW1 K S\nFUCHSIAS  F Y UW1 - SH AH0 Z\nFUCK  F AH1 K\nFUCKED  F AH1 K T\nFUCKING  F AH1 - K IH0 NG\nFUCKS  F AH1 K S\nFUDALA  F UW0 - D AA1 - L AH0\nFUDDRUCKER  F AH1 - D R AH0 - K ER0\nFUDDRUCKERS  F AH1 - D R AH0 - K ER0 Z\nFUDDY  F AH1 - D IY0\nFUDGE  F AH1 JH\nFUDGED  F AH1 JH D\nFUDGING  F AH1 - JH IH0 NG\nFUDGY  F AH1 - JH IY0\nFUDO  F Y UW1 - D OW0\nFUDOSAN  F Y UW1 - D AH0 - S AA0 N\nFUEL  F Y UW1 - AH0 L\nFUEL'S  F Y UW1 - AH0 L Z\nFUEL(2)  F Y UW1 L\nFUELED  F Y UW1 - AH0 L D\nFUELING  F Y UW1 - L IH0 NG\nFUELLED  F Y UW1 - AH0 L D\nFUELLING  F Y UW1 - L IH0 NG\nFUELS  F Y UW1 - AH0 L Z\nFUENTE  F W EH1 N - T EY2\nFUENTES  F W EH1 N - T EY2 Z\nFUENTEZ  F W EH1 N - T EY2 Z\nFUER  F Y UW1 R\nFUERST  F W EH1 R S T\nFUERSTENBERG  F UH1 R - S T AH0 N - B ER0 G\nFUGARD  F Y UW1 - G AA2 R D\nFUGATE  F AH1 - G EY0 T\nFUGAZY  F Y UW1 - G AH0 - Z IY0\nFUGE  F Y UW1 JH\nFUGERE  F Y UW1 - G ER0\nFUGETT  F Y UW1 - JH IH0 T\nFUGITIVE  F Y UW1 - JH AH0 - T IH0 V\nFUGITIVE(2)  F Y UW1 - JH IH0 - T IH0 V\nFUGITIVES  F Y UW1 - JH IH0 - T IH0 V Z\nFUGITT  F Y UW1 - JH IH0 T\nFUGOTSTEN  F Y UW1 - G AO0 T - S T EH0 N\nFUGUE  F Y UW1 G\nFUGUES  F Y UW1 G Z\nFUHR  F UH1 R\nFUHRER  F UH1 - R ER0\nFUHRMAN  F UH1 R - M AH0 N\nFUHRMAN'S  F UH1 R - M AH0 N Z\nFUHRMANN  F UH1 R - M AH0 N\nFUHRMANN'S  F UH1 R - M AH0 N Z\nFUHRMANS  F UH1 R - M AH0 N Z\nFUHS  F AH1 S\nFUJI  F UW1 - JH IY0\nFUJI'S  F UW1 - JH IY0 Z\nFUJIAN  F UW2 - JH IY1 - AH0 N\nFUJII  F UW0 - JH IY1 - IY0\nFUJIKAWA  F UW2 - JH IY0 - K AA1 - W AH0\nFUJIKURA  F UW2 - JH IH0 - K UW1 - R AH0\nFUJIMORI  F UW2 - JH IY0 - M AO1 - R IY0\nFUJIMORI'S  F UW2 - JH IY0 - M AO1 - R IY0 Z\nFUJIMOTO  F UW2 - JH IY0 - M OW1 - T OW0\nFUJIO  F UW1 - JH IY0 - OW0\nFUJIOKA  F UW2 - JH IY0 - OW1 - K AH0\nFUJIS  F Y UW1 - JH IH0 S\nFUJISANKEI  F UW2 - JH IH0 - S AA1 NG - K EY0\nFUJISAWA  F UW2 - JH IH0 - S AA1 - W AH0\nFUJITA  F UW0 - JH IY1 - T AH0\nFUJITSU  F UW0 - JH IH1 T - S UW0\nFUJITSU'S  F UW0 - JH IH1 T - S UW0 Z\nFUJIWARA  F UW0 - JH IY0 - W AA1 - R AH0\nFUJIYA  F UW0 - JH IY1 - Y AH0\nFUJIYAMA  F UW2 - JH IY0 - Y AA1 - M AH0\nFUKE  F UW1 K\nFUKLAH  F UW1 - K L AH0\nFUKLAH'S  F UW1 - K L AH0 Z\nFUKOWOKA  F UW2 - K OW0 - W AO1 - K AH0\nFUKUDA  F UW0 - K UW1 - D AH0\nFUKUI  F UW0 - K UW1 - IY0\nFUKUMOTO  F UW0 - K UW0 - M OW1 - T OW0\nFUKUNAGA  F UW0 - K UW0 - N AA1 - G AH0\nFUKUOKA  F UW2 - K UW2 - OW1 - K AH0\nFUKUSHIMA  F UW0 - K UW0 - SH IY1 - M AH0\nFUKUYAMA  F UW2 - K UW2 - Y AA1 - M AH0\nFULANI  F UW2 - L AA1 - N IY0\nFULBRIGHT  F UH1 L - B R AY2 T\nFULCHER  F UH1 L - CH ER0\nFULCO  F UH1 L - K OW0\nFULCRUM  F UH1 L - K R AH0 M\nFULD  F UH1 L D\nFULENWIDER  F Y UW1 - L IH0 N - W AY0 - D ER0\nFULFER  F UH1 L - F ER0\nFULFILL  F UH0 L - F IH1 L\nFULFILLED  F UH0 L - F IH1 L D\nFULFILLING  F UH0 L - F IH1 - L IH0 NG\nFULFILLMENT  F UH0 L - F IH1 L - M AH0 N T\nFULFILLS  F UH0 L - F IH1 L Z\nFULFORD  F UH1 L - F ER0 D\nFULGHAM  F AH1 L - G AH0 M\nFULGHUM  F AH1 L - G AH0 M\nFULGINITI  F UH2 L - JH IH0 - N IH1 - T IY0\nFULK  F AH1 L K\nFULKERSON  F AH1 L - K ER0 - S AH0 N\nFULKS  F AH1 L K S\nFULL  F UH1 L\nFULL'S  F UH1 L Z\nFULLAM  F UH1 - L AH0 M\nFULLARD  F UH1 - L ER0 D\nFULLBACK  F UH1 L - B AE2 K\nFULLBRIGHT  F UH1 L - B R AY2 T\nFULLEN  F UH1 - L AH0 N\nFULLENKAMP  F UH1 - L AH0 N - K AE2 M P\nFULLENWIDER  F UH1 - L AH0 N - W AY2 - D ER0\nFULLER  F UH1 - L ER0\nFULLER'S  F UH1 - L ER0 Z\nFULLERTON  F UH1 - L ER0 - T AH0 N\nFULLEST  F UH1 - L AH0 S T\nFULLILOVE  F UW0 - L IY0 - L OW1 - V IY0\nFULLINGTON  F UH1 - L IH0 NG - T AH0 N\nFULLMAN  F UH1 L - M AH0 N\nFULLMER  F UH1 L - M ER0\nFULLNESS  F UH1 L - N AH0 S\nFULLTIME  F UH1 L - T AY2 M\nFULLWOOD  F UH1 L - W UH2 D\nFULLY  F UH1 - L IY0\nFULMER  F AH1 L - M ER0\nFULMINATE  F UH1 L - M AH0 - N EY2 T\nFULMORE  F UH1 L - M AO0 R\nFULOP  F UW1 - L AH0 P\nFULP  F UH1 L P\nFULSOME  F UH1 L - S AH0 M\nFULTON  F UH1 L - T AH0 N\nFULTON'S  F UH1 L - T AH0 N Z\nFULTS  F UH1 L T S\nFULTZ  F UH1 L T S\nFULVIA  F UH1 L - V IY0 - AH0\nFULWIDER  F AH1 L - W AY0 - D ER0\nFULWILER  F AH1 L - W AY0 - L ER0\nFULWOOD  F AH0 L - W UH1 D\nFUMAROLES  F Y UW1 - M ER0 - OW2 L Z\nFUMBLE  F AH1 M - B AH0 L\nFUMBLED  F AH1 M - B AH0 L D\nFUMBLES  F AH1 M - B AH0 L Z\nFUMBLING  F AH1 M - B AH0 L - IH0 NG\nFUMBLING(2)  F AH1 M - B L IH0 NG\nFUME  F Y UW1 M\nFUMED  F Y UW1 M D\nFUMES  F Y UW1 M Z\nFUMI  F UW1 - M IY0\nFUMI(2)  F Y UW1 - M IY0\nFUMIGATE  F Y UW1 - M AH0 - G EY2 T\nFUMIGATION  F Y UW2 - M AH0 - G EY1 - SH AH0 N\nFUMIGATION(2)  F Y UW2 - M IH0 - G EY1 - SH AH0 N\nFUMING  F Y UW1 - M IH0 NG\nFUMIO  F Y UW1 - M IY0 - OW0\nFUN  F AH1 N\nFUNARI  F UW0 - N AA1 - R IY0\nFUNARO  F UW0 - N AA1 - R OW0\nFUNARO'S  F UW0 - N AA1 - R OW0 Z\nFUNCHES  F AH1 N - CH IH0 Z\nFUNCHESS  F AH1 N - K IH0 S\nFUNCK  F AH1 NG K\nFUNCTION  F AH1 NG K - SH AH0 N\nFUNCTIONAL  F AH1 NG K - SH AH0 - N AH0 L\nFUNCTIONALITY  F AH2 NG K - SH AH0 - N AE1 - L IH0 - T IY0\nFUNCTIONALLY  F AH1 NG K - SH AH0 N - AH0 L - IY0\nFUNCTIONALLY(2)  F AH1 NG K SH - N AH0 - L IY0\nFUNCTIONARIES  F AH1 NG K - SH AH0 N - EH2 - R IY0 Z\nFUNCTIONARY  F AH1 NG K - SH AH0 N - EH2 - R IY0\nFUNCTIONED  F AH1 NG K - SH AH0 N D\nFUNCTIONING  F AH1 NG K - SH AH0 N - IH0 NG\nFUNCTIONS  F AH1 NG K - SH AH0 N Z\nFUND  F AH1 N D\nFUND'S  F AH1 N D Z\nFUNDAMENTAL  F AH2 N - D AH0 - M EH1 N - T AH0 L\nFUNDAMENTAL(2)  F AH2 N - D AH0 - M EH1 - N AH0 L\nFUNDAMENTALISM  F AH2 N - D AH0 - M EH1 N - T AH0 - L IH2 - Z AH0 M\nFUNDAMENTALISM(2)  F AH2 N - D AH0 - M EH1 - N AH0 - L IH2 - Z AH0 M\nFUNDAMENTALIST  F AH2 N - D AH0 - M EH1 N - T AH0 - L IH0 S T\nFUNDAMENTALIST(2)  F AH2 N - D AH0 - M EH1 - N AH0 - L IH0 S T\nFUNDAMENTALISTS  F AH2 N - D AH0 - M EH1 N - T AH0 - L IH0 S T S\nFUNDAMENTALISTS(2)  F AH2 N - D AH0 - M EH1 N - T AH0 - L IH0 S S\nFUNDAMENTALISTS(3)  F AH2 N - D AH0 - M EH1 - N AH0 - L IH0 S T S\nFUNDAMENTALISTS(4)  F AH2 N - D AH0 - M EH1 - N AH0 - L IH0 S S\nFUNDAMENTALISTS(5)  F AH2 N - D AH0 - M EH1 N - T AH0 - L IH0 S\nFUNDAMENTALISTS(6)  F AH2 N - D AH0 - M EH1 - N AH0 - L IH0 S\nFUNDAMENTALLY  F AH2 N - D AH0 - M EH1 N - T AH0 - L IY0\nFUNDAMENTALLY(2)  F AH2 N - D AH0 - M EH1 - N AH0 - L IY0\nFUNDAMENTALS  F AH2 N - D AH0 - M EH1 N - T AH0 L Z\nFUNDAMENTALS(2)  F AH2 N - D AH0 - M EH1 - N AH0 L Z\nFUNDED  F AH1 N - D AH0 D\nFUNDED(2)  F AH1 N - D IH0 D\nFUNDER  F AH1 N - D ER0\nFUNDERBURG  F AH1 N - D ER0 - B ER0 G\nFUNDERBURK  F AH1 N - D ER0 - B ER0 K\nFUNDERBURKE  F AH1 N - D ER0 - B ER2 K\nFUNDERS  F AH1 N - D ER0 Z\nFUNDING  F AH1 N - D IH0 NG\nFUNDORA  F UW0 N - D AO1 - R AH0\nFUNDRAISER  F AH1 N - D R EY2 - Z ER0\nFUNDRAISER'S  F AH1 N - D R EY2 - Z ER0 Z\nFUNDRAISERS  F AH1 N - D R EY2 - Z ER0 Z\nFUNDRAISING  F AH1 N - D R EY2 - S IH0 NG\nFUNDS  F AH1 N D Z\nFUNDS'  F AH1 N D Z\nFUNERAL  F Y UW1 - N ER0 - AH0 L\nFUNERALS  F Y UW1 - N ER0 - AH0 L Z\nFUNERARY  F Y UW1 - N ER0 - EH2 - R IY0\nFUNES  F Y UW1 N Z\nFUNG  F AH1 NG\nFUNG'S  F AH1 NG Z\nFUNGAL  F AH1 NG - G AH0 L\nFUNGI  F AH1 N - JH AY0\nFUNGIBLE  F AH1 N - JH IH0 - B AH0 L\nFUNGICIDE  F AH1 N - JH AH0 - S AY2 D\nFUNGICIDES  F AH1 N - JH AH0 - S AY2 D Z\nFUNGUS  F AH1 NG - G AH0 S\nFUNICELLO  F AH2 - N AH0 - CH EH1 - L OW0\nFUNK  F AH1 NG K\nFUNKE  F AH1 NG K\nFUNKHOUSER  F AH1 NG K - HH AW2 - S ER0\nFUNKS  F AH1 NG K S\nFUNKY  F AH1 NG - K IY0\nFUNNEL  F AH1 - N AH0 L\nFUNNELED  F AH1 - N AH0 L D\nFUNNELING  F AH1 - N AH0 L - IH0 NG\nFUNNELING(2)  F AH1 N - L IH0 NG\nFUNNELL  F AH1 - N AH0 L\nFUNNELS  F AH1 - N AH0 L Z\nFUNNEST  F AH1 - N IH0 S T\nFUNNIER  F AH1 - N IY0 - ER0\nFUNNIEST  F AH1 - N IY0 - AH0 S T\nFUNNINESS  F AH1 - N IY0 - N AH0 S\nFUNNY  F AH1 - N IY0\nFUNS  F AH1 N Z\nFUNSTON  F AH1 N - S T AH0 N\nFUNTIME  F AH1 N - T AY2 M\nFUOCO  F UW0 - OW1 - K OW0\nFUOSS  F UW1 S\nFUQUA  F UW1 - K W AH0\nFUQUAY  F UW1 - K EY0\nFUR  F ER1\nFURASH  F Y ER0 - AE1 SH\nFURBEE  F ER1 - B IY2\nFURBER  F ER1 - B ER0\nFURBISH  F ER1 - B IH0 SH\nFURBISHING  F ER1 - B IH0 - SH IH0 NG\nFURBUSH  F ER1 - B UH2 SH\nFURBY  F ER1 - B IY0\nFURCHES  F ER0 - SH IY1 Z\nFURER  F Y UH1 - R ER0\nFUREY  F Y UH1 - R IY0\nFURFARO  F UH0 R - F AA1 - R OW0\nFURGASON  F ER1 - G AH0 - S AH0 N\nFURGERSON  F ER1 - G ER0 - S AH0 N\nFURGESON  F ER1 - G IH0 - S AH0 N\nFURIA  F Y UH1 - R IY0 - AH0\nFURINI  F UH0 - R IY1 - N IY0\nFURINI'S  F UH0 - R IY1 - N IY0 Z\nFURINO  F UH0 - R IY1 - N OW0\nFURIOUS  F Y UH1 - R IY0 - AH0 S\nFURIOUSER  F Y UH1 - R IY0 - AH0 - S ER0\nFURIOUSLY  F Y UH1 - R IY0 - AH0 S - L IY0\nFURLAN  F ER1 - L AH0 N\nFURLAUD  F ER0 - L OW1\nFURLETT  F ER0 - L EH1 T\nFURLETT(2)  F ER1 - L AH0 T\nFURLONG  F ER1 - L AO2 NG\nFURLOUGH  F ER1 - L OW0\nFURLOUGHED  F ER1 - L OW0 D\nFURLOUGHS  F ER1 - L OW0 Z\nFURLOW  F ER1 - L OW2\nFURMAN  F ER1 - M AE2 N\nFURMARK  F ER1 - M AA2 R K\nFURNACE  F ER1 - N AH0 S\nFURNACES  F ER1 - N AH0 - S AH0 Z\nFURNACES(2)  F ER1 - N AH0 - S IH0 Z\nFURNARI  F UH0 R - N AA1 - R IY0\nFURNAS  F ER1 - N AH0 S\nFURNER  F ER1 - N ER0\nFURNESS  F ER1 - N IH0 S\nFURNEY  F ER1 - N IY0\nFURNISH  F ER1 - N IH0 SH\nFURNISHED  F ER1 - N IH0 SH T\nFURNISHES  F ER1 - N IH0 - SH AH0 Z\nFURNISHES(2)  F ER1 - N IH0 - SH IH0 Z\nFURNISHING  F ER1 - N IH0 - SH IH0 NG\nFURNISHINGS  F ER1 - N IH0 - SH IH0 NG Z\nFURNISS  F ER0 - N IH1 S\nFURNITURE  F ER1 - N IH0 - CH ER0\nFURNITURE'S  F ER1 - N IH0 - CH ER0 Z\nFURNO  F UH1 R - N OW0\nFUROR  F Y UH1 - R AO0 R\nFURR  F ER1\nFURR'S  F ER1 Z\nFURRER  F ER1 - ER0\nFURRH  F ER1\nFURRIER  F ER1 - IY0 - ER0\nFURRIERS  F ER1 - IY0 - ER0 Z\nFURROW  F ER1 - OW0\nFURROWED  F ER1 - OW0 D\nFURRY  F ER1 - IY0\nFURS  F ER1 Z\nFURSE  F ER1 S\nFURST  F ER1 S T\nFURSTENBERG  F ER1 - S T AH0 N - B ER0 G\nFURTADO  F UH0 R - T AA1 - D OW0\nFURTAK  F ER1 - T AH0 K\nFURTAW  F ER1 - T AO0\nFURTH  F ER1 TH\nFURTHER  F ER1 - DH ER0\nFURTHERANCE  F ER1 - TH ER0 - AH0 N S\nFURTHERED  F ER1 - DH ER0 D\nFURTHERING  F ER1 - DH ER0 - IH0 NG\nFURTHERMORE  F ER1 - DH ER0 - M AO2 R\nFURTHERS  F ER1 - DH ER0 Z\nFURTHEST  F ER1 - TH AH0 S T\nFURTICK  F ER1 - T IH0 K\nFURTIVE  F ER1 - T IH0 V\nFURTIVELY  F ER1 - T IH0 V - L IY0\nFURUKAWA  F UH0 - R UW0 - K AA1 - W AH0\nFURUTA  F ER0 - UW1 - T AH0\nFURUYA  F UH0 - R UW1 - Y AH0\nFURY  F Y UH1 - R IY0\nFUSARO  F UW0 - S AA1 - R OW0\nFUSCO  F UW1 - S K OW0\nFUSE  F Y UW1 Z\nFUSED  F Y UW1 Z D\nFUSELAGE  F Y UW1 - S AH0 - L AA2 JH\nFUSELAGE(2)  F Y UW1 - S AH0 - L IH0 JH\nFUSELAGES  F Y UW1 - S AH0 - L AA0 - JH IH0 Z\nFUSELAGES(3)  F Y UW1 - S AH0 - L IH0 - JH IH0 Z\nFUSELIER  F Y UW1 S - L IY0 - ER0\nFUSES  F Y UW1 - Z AH0 Z\nFUSES(2)  F Y UW1 - Z IH0 Z\nFUSIBLE  F Y UW1 - Z AH0 - B AH0 L\nFUSILLADE  F Y UW1 - S IH0 - L EY2 D\nFUSILLI  F Y UW0 - S IH1 - L IY0\nFUSING  F Y UW1 - Z IH0 NG\nFUSION  F Y UW1 - ZH AH0 N\nFUSON  F UW1 - S AH0 N\nFUSS  F AH1 S\nFUSSED  F AH1 S T\nFUSSELL  F AH1 - S AH0 L\nFUSSELMAN  F AH1 - S AH0 L - M AH0 N\nFUSSES  F AH1 - S IH0 Z\nFUSSING  F AH1 - S IH0 NG\nFUSSNER  F AH1 S - N ER0\nFUSSY  F AH1 - S IY0\nFUST  F AH1 S T\nFUSTAT  F AH1 - S T AE0 T\nFUSTOK  F AH1 - S T AA0 K\nFUSTON  F AH1 - S T AH0 N\nFUTCH  F AH1 CH\nFUTHER  F AH1 - DH ER0\nFUTILE  F Y UW1 - T AH0 L\nFUTILITY  F Y UW0 - T IH1 - L AH0 - T IY0\nFUTRAL  F AH1 - T R AH0 L\nFUTRELL  F Y UW0 - T R EH1 L\nFUTTERMAN  F AH1 - T ER0 - M AH0 N\nFUTURE  F Y UW1 - CH ER0\nFUTURE'S  F Y UW1 - CH ER0 Z\nFUTURES  F Y UW1 - CH ER0 Z\nFUTURES'  F Y UW1 - CH ER0 Z\nFUTURISM  F Y UW1 - CH ER0 - IH2 - Z AH0 M\nFUTURIST  F Y UW1 - CH ER0 - IH0 S T\nFUTURISTIC  F Y UW2 - CH ER0 - IH1 - S T IH0 K\nFUTURISTS  F Y UW1 - CH ER0 - IH0 S T S\nFUTURISTS(2)  F Y UW1 - CH ER0 - IH0 S S\nFUTURISTS(3)  F Y UW1 - CH ER0 - IH0 S\nFUZES  F Y UW1 - Z IH0 Z\nFUZZ  F AH1 Z\nFUZZIER  F AH1 - Z IY0 - ER0\nFUZZY  F AH1 - Z IY0\nFYE  F AY1\nFYFE  F AY1 F\nFYFFE  F AY1 F\nFYFFES  F IH1 F S\nFYFFES(2)  F AY1 F S\nFYKE  F AY1 K\nFYOCK  F Y AA1 K\nFYODOR  F Y OW1 - D ER0\nFYODOR'S  F Y OW1 - D ER0 Z\nFYODOROV  F Y OW1 - D ER0 - AO2 V\nFYODOROV'S  F Y OW1 - D ER0 - AO2 V Z\nG  JH IY1\nG'S  JH IY1 Z\nG'VANNI'S  JH IY2 - OW0 - V AA1 - N IY0 Z\nG.  JH IY1\nG.'S  JH IY1 Z\nG.S  JH IY1 Z\nGA  G AA1\nGA(2)  JH IY1 - EY1\nGA(3)  JH AO1 R - JH AH0\nGAAL  G AA1 L\nGAAR  G AA1 R\nGAARDER  G AA1 R - D ER0\nGAB  G AE1 B\nGABA  G AA1 - B AH0\nGABALDON  G AA0 - B AA0 L - D AO1 N\nGABARDINE  G AE1 - B ER0 - D IY2 N\nGABARDINES  G AE1 - B ER0 - D IY2 N Z\nGABAY  G AE1 - B EY0\nGABBARD  G AH0 - B AA1 R D\nGABBERT  G AE1 - B ER0 T\nGABBING  G AE1 - B IH0 NG\nGABBRO  G AE1 - B R OW0\nGABBROIC  G AE0 - B R OW1 - IH0 K\nGABBY  G AE1 - B IY0\nGABE  G EY1 B\nGABEHART  G EY1 B - HH AA2 R T\nGABEL  G AH0 - B EH1 L\nGABELE  G AH0 - B EH1 - L EY0\nGABELLI  G AH0 - B EH1 - L IY0\nGABER  G EY1 - B ER0\nGABERT  G AE1 - B ER0 T\nGABHART  G AE1 B - HH AA2 R T\nGABIE  G AE1 - B IY0\nGABLE  G EY1 - B AH0 L\nGABLER  G EY1 - B AH0 L - ER0\nGABLER(2)  G EY1 - B L ER0\nGABLES  G EY1 - B AH0 L Z\nGABON  G AH0 - B AA1 N\nGABOR  G AH0 - B AO1 R\nGABORIAULT  G AE1 - B ER0 - IY0 - OW0\nGABOURY  G AE1 - B UH0 - R IY0\nGABRALL  G EY1 - B R AH0 L\nGABRALL'S  G EY1 - B R AH0 L Z\nGABRIEL  G EY1 - B R IY0 - AH0 L\nGABRIEL'S  G EY1 - B R IY0 - AH0 L Z\nGABRIELA  G AA0 - B R IY0 - EH1 - L AH0\nGABRIELE  G AA0 - B R IY0 - EH1 L\nGABRIELLA  G AA0 - B R IY0 - EH1 - L AH0\nGABRIELLE  G AE1 - B R IY0 - EH0 L\nGABRIELLI  G AA0 - B R IY0 - EH1 - L IY0\nGABRIELSEN  G AE1 - B R IY0 L - S AH0 N\nGABRIELSEN(2)  G EY1 - B R IY0 - EH0 L - S AH0 N\nGABRIELSON  G AE1 - B R IY0 L - S AH0 N\nGABRIELSON(2)  G EY1 - B R IY0 - EH0 L - S AH0 N\nGABROWNY  G AH0 - B R AW1 - N IY0\nGABRYS  G AE1 - B ER0 - IY0 Z\nGABY  G AE1 - B IY0\nGACCIONE  G AA0 K - CH OW1 - N IY0\nGACEK  G AA1 - CH EH2 K\nGACH  G AE1 CH\nGACY  G EY1 - S IY0\nGACY'S  G EY1 - S IY0 Z\nGAD  G AE1 D\nGADBERRY  G AE1 D - B EH2 - R IY0\nGADBOIS  G AE1 D - B W AA2\nGADD  G AE1 D\nGADDIE  G AE1 - D IY0\nGADDING  G AE1 - D IH0 NG\nGADDIS  G AE1 - D IH0 S\nGADDUM  G AE1 - D AH0 M\nGADDY  G AE1 - D IY0\nGADE  G EY1 D\nGADFLIES  G AE1 D - F L AY2 Z\nGADFLY  G AE1 D - F L AY2\nGADGET  G AE1 - JH AH0 T\nGADGETRY  G AE1 - JH AH0 - T R IY0\nGADGETS  G AE1 - JH AH0 T S\nGADHAFI  G AH0 - D AA1 - F IY0\nGADHAFI'S  G AH0 - D AA1 - F IY0 Z\nGADHAFI'S(2)  G AH0 D - HH AA1 - F IY0 Z\nGADHAFI(2)  G AH0 D - HH AA1 - F IY0\nGADOMSKI  G AH0 - D AA1 M S - K IY0\nGADOURY  G AE1 - D UH0 - R IY0\nGADS  G AE1 D Z\nGADSBY  G AE1 D Z - B IY0\nGADSDEN  G AE1 D Z - D AH0 N\nGADSON  G AE1 D - S AH0 N\nGADWAY  G AE1 D - W EY2\nGADZINSKI  G AH0 - JH IH1 N - S K IY0\nGAE  G AY1\nGAEA  G IY1 - AH0\nGAEBEL  G EH1 - B AH0 L\nGAEDE  G IY1 D\nGAEL  G EY1 L\nGAELIC  G EY1 - L IH0 K\nGAERTNER  G EH1 R T - N ER0\nGAETA  G IY1 - T AH0\nGAETANO  G AY0 - T AA1 - N OW0\nGAETH  G IY1 TH\nGAETZ  G IY1 T S\nGAF  G AE1 F\nGAFF  G AE1 F\nGAFFE  G AE1 F\nGAFFES  G AE1 F S\nGAFFEY  G AE1 - F IY0\nGAFFIN  G AE1 - F IH0 N\nGAFFNEY  G AE1 F - N IY0\nGAFFORD  G AE1 - F ER0 D\nGAG  G AE1 G\nGAGAN  G EY1 - G AH0 N\nGAGARIN  G AH0 - G AE1 - R AH0 N\nGAGE  G EY1 JH\nGAGEL  G AE1 - G AH0 L\nGAGEN  G AE1 - G AH0 N\nGAGER  G EY1 - G ER0\nGAGGED  G AE1 G D\nGAGGLE  G AE1 - G AH0 L\nGAGLIANO  G AA0 - G L IY0 - AA1 - N OW0\nGAGLIANO(2)  G AE0 G - L IY0 - AA1 - N OW0\nGAGLIARDI  G AA0 - G L IY0 - AA1 R - D IY0\nGAGLIARDI(2)  G AE0 G - L IY0 - AA1 R - D IY0\nGAGLIARDO  G AA0 - G L IY0 - AA1 R - D OW0\nGAGLIARDO(2)  G AE0 G - L IY0 - AA1 R - D OW0\nGAGLIO  G AE1 G - L IY0 - OW0\nGAGLIONE  G AA0 - G L IY0 - OW1 - N IY0\nGAGLIONE(2)  G AE0 G - L IY0 - OW1 - N IY0\nGAGNE  G EY1 - N IY0\nGAGNE(2)  G AE1 G - N IY0\nGAGNER  G AE1 G - N ER0\nGAGNIER  G AE1 G - N IY0 - ER0\nGAGNON  G AE1 - N Y AH0 N\nGAGS  G AE1 G Z\nGAHAGAN  G AA0 - HH AA1 - G AA0 N\nGAHAN  G AE1 - HH AH0 N\nGAHLI  G AA1 - L IY0\nGAHM  G AE1 M\nGAHN  G AE1 N\nGAHR  G AA1 R\nGAIA  G AY1 - AH0\nGAIDAR  G AY1 - D AA2 R\nGAIDAR'S  G AY1 - D AA2 R Z\nGAIER  G EY1 - ER0\nGAIGE  G EY1 JH\nGAIL  G EY1 L\nGAIL'S  G EY1 L Z\nGAILE  G EY1 L\nGAILEY  G EY1 - L IY0\nGAILLARD  G EY1 - L ER0 D\nGAILY  G EY1 - L IY0\nGAIN  G EY1 N\nGAINED  G EY1 N D\nGAINER  G EY1 - N ER0\nGAINERS  G EY1 - N ER0 Z\nGAINES  G EY1 N Z\nGAINESVILLE  G EY1 N Z - V IH2 L\nGAINEY  G EY1 - N IY0\nGAINFUL  G EY1 N - F AH0 L\nGAINFULLY  G EY1 N - F AH0 - L IY0\nGAINING  G EY1 - N IH0 NG\nGAINOR  G EY1 - N ER0\nGAINOUS  G EY1 - N AH0 S\nGAINS  G EY1 N Z\nGAINSAY  G EY1 N - S EY2\nGAINSBORO  G EY1 N Z - B ER0 - OW0\nGAINSCO  G EY1 N - S K OW0\nGAIR  G EH1 R\nGAISER  G EY1 - Z ER0\nGAIT  G EY1 T\nGAITAN  G AY2 - T AA1 N\nGAITER  G EY1 - T ER0\nGAITHER  G EY1 - TH ER0\nGAITHERSBURG  G EY1 - TH ER0 Z - B ER0 G\nGAITSKILL  G EY1 T - S K IH1 L\nGAJDA  G AY1 - D AH0\nGAJEWSKI  G AY0 - EH1 F S - K IY0\nGAL  G AE1 L\nGALA  G AE1 - L AH0\nGALA(2)  G EY1 - L AH0\nGALACTIC  G AH0 - L AE1 K - T IH0 K\nGALACTOSE  G AH0 - L AE1 K - T OW0 S\nGALAHAD  G AE1 - L AH0 - HH AE2 D\nGALAMBOS  G AA0 - L AA1 M - B OW0 Z\nGALAN  G EY1 - L AH0 N\nGALANE  G AH0 - L EY1 N\nGALANG  G AE1 - L AH0 NG\nGALANIS  G AH0 - L AA1 - N IH0 S\nGALANT  G AA1 - L AH0 N T\nGALANTE  G AA0 - L AA1 N - T IY0\nGALANTER  G AH0 - L AE1 N - T ER0\nGALANTI  G AH0 - L AE1 N - T IY0\nGALAPAGOS  G AH0 - L AA1 - P AH0 - G OW0 Z\nGALARNEAU  G AE1 - L AA0 R - N OW2\nGALARZA  G AH0 - L AA1 R - Z AH0\nGALAS  G EY1 - L AH0 Z\nGALASIE  G AE1 - L AH0 - S IY0\nGALASSI  G AA0 - L AA1 - S IY0\nGALASSO  G AA0 - L AA1 - S OW0\nGALATAS  G AA0 - L AA1 - T AA0 Z\nGALATEA  G AE2 - L AH0 - T IY1 - AH0\nGALATI  G AA0 - L AA1 - T IY0\nGALAVIZ  G AE1 - L AH0 - V IH0 Z\nGALAX  G AE1 - L AE2 K S\nGALAXIES  G AE1 - L AH0 K - S IY0 Z\nGALAXY  G AE1 - L AH0 K - S IY0\nGALAXY'S  G AE1 - L AH0 K - S IY0 Z\nGALBAN  G AE1 L - B AH0 N\nGALBO  G AE1 L - B OW0\nGALBRAITH  G AE1 L - B R EY2 TH\nGALBREATH  G AE1 L - B R EH2 TH\nGALE  G EY1 L\nGALE'S  G EY1 L Z\nGALEA  G EY1 - L IY0 - AH0\nGALEANO  G AA0 - L IY1 - N OW0\nGALEB  G AE1 - L AH0 B\nGALEB(2)  G EY1 - L AH0 B\nGALEBS  G AE1 - L AH0 B Z\nGALEBS(2)  G EY1 - L AH0 B Z\nGALEF  G AE1 - L AH0 F\nGALEN  G EY1 - L AH0 N\nGALEN'S  G EY1 - L AH0 N Z\nGALENA  G AH0 - L IY1 - N AH0\nGALENICAL  G AH0 - L EH1 - N IH0 - K AH0 L\nGALENTINE  G AA0 - L EH0 N - T IY1 - N IY0\nGALER  G EY1 - L ER0\nGALERIA  G AE2 - L ER0 - IY1 - AH0\nGALERIAS  G AE2 - L ER0 - IY1 - AH0 Z\nGALERIES  G AE1 - L ER0 - IY0 Z\nGALERNTER  G AH0 - L ER1 N - T ER0\nGALES  G EY1 L Z\nGALESBURG  G EY1 L Z - B ER0 G\nGALESI  G AH0 - L EH1 - S IY0\nGALEY  G EY1 - L IY0\nGALFORD  G AE1 L - F ER0 D\nGALGANO  G AA0 L - G AA1 - N OW0\nGALI  G AA1 - L IY0\nGALI'S  G AA1 - L IY0 Z\nGALIANO  G AA0 - L IY0 - AA1 - N OW0\nGALICIA  G AH0 - L IH1 - SH IY0 - AH0\nGALIE  G EY1 - L IY0\nGALIENA  G AA0 - L IY1 - N AH0\nGALIK  G AE1 - L IH0 K\nGALILEAN  G AE2 - L AH0 - L IY1 - AH0 N\nGALILEE  G AE1 - L AH0 - L IY2\nGALILEO  G AE2 - L AH0 - L IY1 - OW0\nGALILEO'S  G AE2 - L AH0 - L IY1 - OW0 Z\nGALILEO'S(2)  G AE2 - L AH0 - L EY1 - OW0 Z\nGALILEO(2)  G AE2 - L AH0 - L EY1 - OW0\nGALIN  G AE1 - L IH0 N\nGALINDO  G AA0 - L IY1 N - D OW0\nGALINSKI  G AH0 - L IH1 N - S K IY0\nGALINSKY  G AH0 - L IH1 N - S K IY0\nGALIOTO  G AA0 - L IY0 - OW1 - T OW0\nGALIPAULT  G AE1 - L IH0 - P AO2 L T\nGALIPAULT(2)  G AE1 - L IH0 - P OW2\nGALIPEAU  G AE1 - L IH0 - P OW2\nGALITSIN  G AH0 - L IH1 T - S IH0 N\nGALKA  G AE1 L - K AH0\nGALL  G AO1 L\nGALLA  G AE1 - L AH0\nGALLACHER  G AE1 - L AH0 - K ER0\nGALLAGER  G AO1 - L IH0 - JH ER0\nGALLAGHER  G AE1 - L AH0 - G ER0\nGALLAHAN  G AE1 - L AH0 - HH AE0 N\nGALLAHER  G AE1 - L AH0 - HH ER0\nGALLAMORE  G AA0 - L AA1 - M AO0 R\nGALLAND  G AE1 - L AH0 N D\nGALLANT  G AE1 - L AH0 N T\nGALLANTRY  G AE1 - L AH0 N - T R IY0\nGALLARD  G AH0 - L AA1 R D\nGALLARDO  G AA0 - L AA1 R - D OW0\nGALLAS  G AE1 - L AH0 Z\nGALLATIN  G AE1 - L AH0 - T IH0 N\nGALLAUDET  G AE1 - L AH0 - D EH0 T\nGALLAWAY  G AO1 L - AH0 - W EY2\nGALLBLADDER  G AO1 L - B L AE2 - D ER0\nGALLE  G EY1 L\nGALLE(2)  G AE2 - L EY1\nGALLEGO  G AA0 - L EH1 - G OW0\nGALLEGOS  G AE1 - L IH0 - G OW0 Z\nGALLEMORE  G AA0 - L EH1 - M AO0 R\nGALLEN  G AO1 - L AH0 N\nGALLENTINE  G AA0 - L EH0 N - T IY1 - N IY0\nGALLEON  G AE1 - L IY0 - AH0 N\nGALLEONS  G AE1 - L IY0 - AH0 N Z\nGALLER  G AO1 - L ER0\nGALLERANI  G AA0 - L ER0 - AA1 - N IY0\nGALLERIA  G AE2 - L ER0 - IY1 - AH0\nGALLERIES  G AE1 - L ER0 - IY0 Z\nGALLERY  G AE1 - L ER0 - IY0\nGALLERY'S  G AE1 - L ER0 - IY0 Z\nGALLES  G EY1 L Z\nGALLET  G AE1 - L IH0 T\nGALLETTI  G AA0 - L EH1 - T IY0\nGALLEY  G AE1 - L IY0\nGALLEYS  G AE1 - L IY0 Z\nGALLI  G AE1 - L IY0\nGALLIA  G AE1 - L Y AH0\nGALLIANO  G AA0 - L IY0 - AA1 - N OW0\nGALLIC  G AE1 - L IH0 K\nGALLICK  G AE1 - L IH0 K\nGALLIEN  G AH0 - L IY1 N\nGALLIER  G AE1 - L IY0 - ER0\nGALLIGAN  G AE1 - L IH0 - G AH0 N\nGALLIHER  G AE1 - L IH0 - HH ER0\nGALLIK  G AE1 - L IH0 K\nGALLIMARD  G AE1 - L IH0 - M ER0 D\nGALLIMORE  G AA0 - L IY1 - M AO0 R\nGALLINA  G AA0 - L IY1 - N AH0\nGALLING  G AO1 - L IH0 NG\nGALLINGER  G AO1 - L IH0 - NG ER0\nGALLINSKY  G AH0 - L IH1 N - S K IY0\nGALLION  G AE1 - L Y AH0 N\nGALLIUM  G AE1 - L IY0 - AH0 M\nGALLIVAN  G AE1 - L IH0 - V AH0 N\nGALLMAN  G AO1 L - M AH0 N\nGALLO  G AE1 - L OW0\nGALLO'S  G AE1 - L OW0 Z\nGALLOGLY  G AE1 - L AH0 G - L IY0\nGALLON  G AE1 - L AH0 N\nGALLONS  G AE1 - L AH0 N Z\nGALLOON  G AH0 - L UW1 N\nGALLOP  G AE1 - L AH0 P\nGALLOPED  G AE1 - L AH0 P T\nGALLOPING  G AE1 - L AH0 - P IH0 NG\nGALLOS  G AE1 - L OW0 Z\nGALLOW  G AE1 - L OW0\nGALLOWAY  G AE1 - L OW0 - W EY2\nGALLOWAYS  G AE1 L - OW0 - W EY2 Z\nGALLOWS  G AE1 - L OW0 Z\nGALLS  G AO1 L Z\nGALLSTONE  G AO1 L - S T OW2 N\nGALLSTONES  G AA1 L - S T OW2 N Z\nGALLSTONES(2)  G AO1 L - S T OW2 N Z\nGALLUCCI  G AA0 - L UW1 - CH IY0\nGALLUCCIO  G AA0 - L UW1 - CH IY0 - OW0\nGALLUP  G AE1 - L AH0 P\nGALLUS  G AE1 - L AH0 S\nGALLUZZO  G AA0 - L UW1 - Z OW0\nGALLWAY  G AO1 L - W EY2\nGALOOB  G AH0 - L UW1 B\nGALOOB'S  G AH0 - L UW1 B Z\nGALORE  G AH0 - L AO1 R\nGALOSH  G AH0 - L AA1 SH\nGALOSHES  G AH0 - L AA1 - SH AH0 Z\nGALOSHES(2)  G AH0 - L AA1 - SH IH0 Z\nGALOTTI  G AH0 - L AA1 - T IY0\nGALPIN  G AE1 L - P IH0 N\nGALS  G AE1 L Z\nGALSTER  G AE1 L - S T ER0\nGALSWORTHY  G AE1 L Z - W ER2 - DH IY0\nGALT  G AO1 L T\nGALTON  G AE1 L - T AH0 N\nGALUDET  G AE2 L - Y UW0 - D EH1 T\nGALUS  G AE1 - L IH0 S\nGALUSHA  G AE1 - L AH0 - SH AH0\nGALUSKA  G AH0 - L AH1 - S K AH0\nGALVAN  G AA0 L - V AA1 N\nGALVANIC  G AE0 L - V AE1 - N IH0 K\nGALVANIZE  G AE1 L - V AH0 - N AY2 Z\nGALVANIZED  G AE1 L - V AH0 - N AY2 Z D\nGALVANIZES  G AE1 L - V AH0 - N AY2 - Z AH0 Z\nGALVANIZING  G AE1 L - V AH0 - N AY2 - Z IH0 NG\nGALVEN  G AA1 L - V AH0 N\nGALVESTON  G AE1 L - V AH0 - S T AH0 N\nGALVEZ  G AA0 L - V EH1 Z\nGALVIN  G AE1 L - V IH0 N\nGALVIN'S  G AE1 L - V IH0 N Z\nGALWAY  G AA1 L - W EY0\nGALYEAN  G AE1 - L IY0 - AH0 N\nGALYEN  G AE1 - L IY0 - EH0 N\nGALYON  G AE1 - L IY0 - AA0 N\nGAMA  G AA1 - M AH0\nGAMACHE  G AA1 - M EY0 K\nGAMAGE  G AE1 - M IH0 JH\nGAMAL  G AH0 - M AA1 L\nGAMBA  G AE1 M - B AH0\nGAMBALE  G AA0 M - B AA1 - L IY0\nGAMBARDELLA  G AA0 M - B AA0 R - D EH1 - L AH0\nGAMBER  G AE1 M - B ER0\nGAMBIA  G AE1 M - B IY0 - AH0\nGAMBILL  G AH0 M - B IH1 L\nGAMBINO  G AE0 M - B IY1 - N OW0\nGAMBIT  G AE1 M - B IH0 T\nGAMBITS  G AE1 M - B AH0 T S\nGAMBLE  G AE1 M - B AH0 L\nGAMBLE'S  G AE1 M - B AH0 L Z\nGAMBLED  G AE1 M - B AH0 L D\nGAMBLER  G AE1 M - B L ER0\nGAMBLER'S  G AE1 M - B L ER0 Z\nGAMBLERS  G AE1 M - B L ER0 Z\nGAMBLES  G AE1 M - B AH0 L Z\nGAMBLIN  G AE1 M - B L IH0 N\nGAMBLING  G AE1 M - B AH0 L - IH0 NG\nGAMBLING'S  G AE1 M - B L IH0 NG Z\nGAMBLING(2)  G AE1 M - B L IH0 NG\nGAMBOA  G AA0 M - B OW1 - AH0\nGAMBONE  G AA1 M - B OW0 N\nGAMBREL  G AE1 M - B R AH0 L\nGAMBRELL  G AE1 M - B R AH0 L\nGAMBRILL  G AE1 M - B R IH0 L\nGAMBRO  G AE1 M - B R OW0\nGAMCO  G AE1 M - K OW0\nGAME  G EY1 M\nGAME'S  G EY1 M Z\nGAMEL  G AA1 - M AH0 L\nGAMELIN  G AE1 - M IH0 - L IH0 N\nGAMELIN(2)  G AE1 M - L IH0 N\nGAMELLO  G AH0 - M EH1 - L OW0\nGAMELY  G EY1 M - L IY0\nGAMER  G EY1 - M ER0\nGAMERS  G EY1 - M ER0 Z\nGAMES  G EY1 M Z\nGAMES'  G EY1 M Z\nGAMESHOW  G EY1 M - SH OW2\nGAMESHOWS  G EY1 M - SH OW2 Z\nGAMESMANSHIP  G EY1 M Z - M AH0 N - SH IH2 P\nGAMET  G AE1 - M IH0 T\nGAMETANGIA  G AE2 - M AH0 - T AE1 N - JH IY0 - AH0\nGAMETE  G AE1 - M IY0 T\nGAMETE(2)  G AH0 - M IY1 T\nGAMETOPHYTE  G AH0 - M IY1 - T AH0 - F AY2 T\nGAMEZ  G AA0 - M EH1 Z\nGAMING  G EY1 - M IH0 NG\nGAMING'S  G EY1 - M IH0 NG Z\nGAMINO  G AA0 - M IY1 - N OW0\nGAMM  G AE1 M\nGAMMA  G AE1 - M AH0\nGAMMAGE  G AE1 - M IH0 JH\nGAMMAL  G AH0 - M AA1 L\nGAMMEL  G AE1 - M AH0 L\nGAMMELL  G AE1 - M AH0 L\nGAMMILL  G AE1 - M IH0 L\nGAMMON  G AE1 - M AH0 N\nGAMMONS  G AE1 - M AH0 N Z\nGAMONS  G AE1 - M AH0 N Z\nGAMP  G AE1 M P\nGAMPER  G AE1 M - P ER0\nGAMSAKHURDIA  G AE0 M - S AH0 - K ER1 - D IY0 - AH0\nGAMSAKHURDIA(2)  G AE0 M - S AH0 - K ER1 - D Y AH0\nGAMUNDE  G AH0 - M UW1 N D\nGAMUNDE'S  G AH0 - M UW1 N D Z\nGAMUT  G AE1 - M AH0 T\nGAN  G AE1 N\nGANAS  G AE1 - N AH0 Z\nGANATIEUGANAUF  G AH0 - N EY1 - SH AH0 - G AE2 - N AH0 L F\nGANAWAY  G AE1 N - AH0 - W EY0\nGANCARZ  G AA1 N - K AA0 R Z\nGANCI  G AE1 N - S IY0\nGANDA  G AE1 N - D AH0\nGANDALF  G AE1 N - D AO0 L F\nGANDALF'S  G AE1 N - D AO0 L F S\nGANDARA  G AA0 N - D AA1 - R AH0\nGANDEE  G AE1 N - D IY0\nGANDER  G AE1 N - D ER0\nGANDHI  G AA1 N - D IY0\nGANDHI'S  G AA1 N - D IY0 Z\nGANDOLFI  G AA0 N - D OW1 L - F IY0\nGANDOLFO  G AA0 N - D OW1 L - F OW0\nGANDY  G AE1 N - D IY0\nGANEM  G AE1 - N IH0 M\nGANES  G EY1 N Z\nGANEY  G EY1 - N IY0\nGANG  G AE1 NG\nGANG'S  G AE1 NG Z\nGANGBANGER  G AE1 NG - B AE0 NG - G ER0\nGANGBANGERS  G AE1 NG - B AE0 NG - G ER0 Z\nGANGBUSTER  G AE1 NG - B AH2 - S T ER0\nGANGBUSTERS  G AE1 NG - B AH2 - S T ER0 Z\nGANGE  G AE1 N JH\nGANGEMI  G AA0 NG - G EH1 - M IY0\nGANGER  G AE1 NG - ER0\nGANGES  G AE1 N - JH IY0 Z\nGANGI  G AE1 N - JH IY0\nGANGING  G AE1 - NG IH0 NG\nGANGL  G AE1 NG - G AH0 L\nGANGLIA  G AE1 NG - G L IY0 - AH0\nGANGLIONIC  G AE2 NG - G L IY0 - AA1 - N IH0 K\nGANGLOFF  G AE1 NG - G L AO0 F\nGANGLY  G AE1 NG - L IY0\nGANGPLANK  G AE1 NG - P L AE2 NG K\nGANGS  G AE1 NG Z\nGANGSTA  G AE1 NG - S T AH0\nGANGSTER  G AE1 NG - S T ER0\nGANGSTERS  G AE1 NG - S T ER0 Z\nGANGWER  G AE1 NG - W ER0\nGANIC  G AE1 - N IH0 K\nGANIM  G AE1 - N IH0 M\nGANIS  G AE1 - N IH0 S\nGANLEY  G AE1 N - L IY0\nGANN  G AE1 N\nGANNAWAY  G AE1 N - AH0 - W EY0\nGANNETT  G AE1 - N IH0 T\nGANNETT'S  G AE1 - N AH0 T S\nGANNON  G AE1 - N AH0 N\nGANO  G AA1 - N OW0\nGANOE  G AE1 - N OW0\nGANONG  G AE1 - N AO0 NG\nGANS  G AE1 N Z\nGANSEN  G AE1 N - S AH0 N\nGANSER  G AE1 N - S ER0\nGANSKE  G AE1 N S K\nGANSON  G AE1 N - S AH0 N\nGANSTER  G AE1 N - S T ER0\nGANT  G AE1 N T\nGANTENBEIN  G AE1 N - T IH0 N - B AY0 N\nGANTER  G AE1 N - T ER0\nGANTLET  G AO1 N T - L AH0 T\nGANTNER  G AE1 N T - N ER0\nGANTOS  G AE1 N - T OW0 S\nGANTRY  G AE1 N - T R IY0\nGANTT  G AE1 N T\nGANTZ  G AE1 N T S\nGANUS  G EY1 - N IH0 S\nGANYMEDE  G AE1 - N AH0 - M IY2 D\nGANZ  G AE1 N Z\nGANZEL  G AE1 N - Z AH0 L\nGANZER  G AE1 N - Z ER0\nGAONA  G AA0 - OW1 - N AH0\nGAP  G AE1 P\nGAP'S  G AE1 P S\nGAPE  G EY1 P\nGAPING  G EY1 - P IH0 NG\nGAPINSKI  G AH0 - P IH1 N - S K IY0\nGAPP  G AE1 P\nGAPPA  G AE1 - P AH0\nGAPS  G AE1 P S\nGAR  G AA1 R\nGARA  G AE1 - R AH0\nGARABEDIAN  G AE2 - R AH0 - B IY1 - D IY0 - AH0 N\nGARAFALO  G AA0 - R AA0 - F AA1 - L OW0\nGARAFOLA  G AA0 - R AA0 - F OW1 - L AH0\nGARAGE  G ER0 - AA1 ZH\nGARAGES  G ER0 - AA1 - ZH IH0 Z\nGARAGIOLA  G ER0 - AE2 - JH IY0 - OW1 - L AH0\nGARAGIOLA(2)  G EH2 - R AH0 - JH IY0 - OW1 - L AH0\nGARAJDA  G ER0 - AA1 ZH - D AH0\nGARAJDA'S  G ER0 - AA1 ZH - D AH0 Z\nGARAJDA'S(2)  G AO0 - R AA1 ZH - D AH0 Z\nGARAJDA(2)  G AO0 - R AA1 ZH - D AH0\nGARAMENDI  G EH2 - R AH0 - M EH1 N - D IY0\nGARAMENDI'S  G EH2 - R AH0 - M EH1 N - D IY0 Z\nGARAND  G AE1 - R AH0 N D\nGARANT  G AA1 - R AH0 N T\nGARARD  G ER0 - AA1 R D\nGARAVAGLIA  G AA0 - R AA0 - V AA1 G - L IY0 - AH0\nGARAY  G AE1 - R EY0\nGARB  G AA1 R B\nGARBACZ  G AA1 R - B AH0 CH\nGARBAGE  G AA1 R - B IH0 JH\nGARBARINI  G AA0 R - B AA0 - R IY1 - N IY0\nGARBARINO  G AA0 R - B AA0 - R IY1 - N OW0\nGARBE  G AA1 R B\nGARBED  G AA1 R B D\nGARBER  G AA1 R - B ER0\nGARBERS  G AA1 R - B ER0 Z\nGARBETT  G AA1 R - B IH0 T\nGARBLE  G AA1 R - B AH0 L\nGARBLED  G AA1 R - B AH0 L D\nGARBO  G AA1 R - B OW0\nGARBUTT  G AA1 R - B AH0 T\nGARCEAU  G AA0 R - S OW1\nGARCES  G AA1 R - S EH0 S\nGARCETTI  G AA2 R - CH EH1 - T IY0\nGARCETTI'S  G AA2 R - CH EH1 - T IY0 Z\nGARCIA  G AA2 R - S IY1 - AH0\nGARCIA'S  G AA0 R - S IY1 - AH0 Z\nGARCIAS  G AA0 R - S IY1 - AH0 Z\nGARCZYNSKI  G ER0 - CH IH1 N - S K IY0\nGARD  G AA1 R D\nGARDA  G AA1 R - D AH0\nGARDE  G AA1 R D\nGARDEA  G AA1 R - D IY0 - AH0\nGARDELLA  G AA2 R - D EH1 - L AH0\nGARDEN  G AA1 R - D AH0 N\nGARDEN'S  G AA1 R - D AH0 N Z\nGARDENA  G AA0 R - D IY1 - N AH0\nGARDENAMERICA  G AA2 R - D AH0 - N AH0 - M EH1 - R IH0 - K AH0\nGARDENED  G AA1 R - D AH0 N D\nGARDENER  G AA1 R - D AH0 N - ER0\nGARDENER'S  G AA1 R - D AH0 N - ER0 Z\nGARDENERS  G AA1 R - D AH0 N - ER0 Z\nGARDENERS(2)  G AA1 R D - N ER0 Z\nGARDENHIRE  G AA1 R - D AH0 N - HH AY2 R\nGARDENIA  G AA0 R - D IY1 - N Y AH0\nGARDENIAS  G AA0 R - D IY1 - N Y AH0 Z\nGARDENING  G AA1 R - D AH0 N - IH0 NG\nGARDENING(2)  G AA1 R D - N IH0 NG\nGARDENS  G AA1 R - D AH0 N Z\nGARDIN  G AA1 R - D IH0 N\nGARDINER  G AA1 R D - N ER0\nGARDINI  G AA0 R - D IY1 - N IY0\nGARDINI'S  G AA0 R - D IY1 - N IY0 Z\nGARDINIER  G AA1 R - D IH0 - N IY0 - ER0\nGARDINIER(2)  G AA1 R - D IH0 - N Y ER0\nGARDNER  G AA1 R D - N ER0\nGARDNER'S  G AA1 R D - N ER0 Z\nGARDOLIN  G AA1 R - D OW0 - L IH0 N\nGARDOLIN'S  G AA1 R - D OW0 - L IH0 N Z\nGARDUNO  G AA0 R - D UW1 - N OW0\nGARDYNE  G AA1 R - D AY2 N\nGARE  G EH1 R\nGAREAU  G ER0 - OW1\nGARELICK  G AE1 - R IH0 - L IH0 K\nGARETH  G EH1 - R IH0 TH\nGARETT  G AE1 - R IH0 T\nGAREY  G AE1 - R IY0\nGARFIELD  G AA1 R - F IY2 L D\nGARFINKEL  G AA1 R - F IH0 NG - K AH0 L\nGARFINKLE  G AA1 R - F IH2 NG - K AH0 L\nGARFUNKEL  G AA1 R F - AH0 NG - K AH0 L\nGARG  G AA1 R G\nGARGAN  G AA1 R - G AH0 N\nGARGANO  G AA0 R - G AA1 - N OW0\nGARGANTUAN  G AA0 R - G AE1 N - CH UW0 - AH0 N\nGARGER  G AA1 R - G ER0\nGARGES  G AA1 R - JH IH0 Z\nGARGILL  G AA1 R - JH IH0 L\nGARGIS  G AA1 R - G IH0 S\nGARGIULO  G AA1 R - JH UW0 - L OW0\nGARGOYLE  G AA1 R - G OY2 L\nGARGOYLES  G AA1 R - G OY2 L Z\nGARGUILO  G AA0 R G - W IY1 - L OW0\nGARGUS  G AA1 R - G AH0 S\nGARI  G AA1 - R IY0\nGARIBALDI  G AE2 - R AH0 - B AO1 L - D IY0\nGARIBAY  G AE1 - R IH0 - B EY0\nGARIEPY  G ER0 - IY1 - P IY0\nGARIN  G EH1 - R IH0 N\nGARING  G EH1 - R IH0 NG\nGARINGER  G EH1 - R IH0 - NG ER0\nGARIS  G AE1 - R IH0 S\nGARISH  G EH1 - R IH0 SH\nGARITY  G AE1 - R IH0 - T IY0\nGARL  G AA1 R L\nGARLAN  G AA1 R - L AH0 N\nGARLAND  G AA1 R - L AH0 N D\nGARLIC  G AA1 R - L IH0 K\nGARLICK  G AA1 R - L IH0 K\nGARLICKY  G AA1 R - L IH0 - K IY0\nGARLING  G AA1 R - L IH0 NG\nGARLINGER  G AA1 R - L IH0 - NG ER0\nGARLINGHOUSE  G AA1 R - L IH0 NG - HH AW2 S\nGARLINGTON  G AA1 R - L IH0 NG - T AH0 N\nGARLITZ  G AA1 R - L IH0 T S\nGARLOCK  G AA1 R - L AH0 K\nGARLOW  G AA1 R - L OW0\nGARMAN  G AA1 R - M AH0 N\nGARMANY  G ER0 - M AO1 - N IY0\nGARMENT  G AA1 R - M AH0 N T\nGARMENTS  G AA1 R - M AH0 N T S\nGARMON  G AA1 R - M AH0 N\nGARMOND  G AA1 R - M AH0 N D\nGARMS  G AA1 R M Z\nGARMUND  G AA1 R - M AH0 N D\nGARN  G AA1 R N\nGARNEAU  G AA0 R - N OW1\nGARNER  G AA1 R - N ER0\nGARNERED  G AA1 R - N ER0 D\nGARNERING  G AA1 R - N ER0 - IH0 NG\nGARNERS  G AA1 R - N ER0 Z\nGARNES  G AA1 R N Z\nGARNET  G AA1 R - N AH0 T\nGARNETT  G AA1 R - N IH0 T\nGARNETTE  G AA0 R - N EH1 T\nGARNEY  G AA1 R - N IY0\nGARNICA  G AA0 R - N IY1 - K AH0\nGARNIER  G AA1 R - N IY0 - ER0\nGARNISH  G AA1 R - N IH0 SH\nGARNISHED  G AA1 R - N IH0 SH T\nGARNISHES  G AA1 R - N IH0 - SH AH0 Z\nGARNISHMENT  G AA1 R - N IH0 SH - M AH0 N T\nGARNO  G AA1 R - N OW0\nGARNOCK  G AA1 R - N AH0 K\nGARNSEY  G AA1 R N - S IY0\nGARO  G EH1 - R OW0\nGAROFALO  G AA0 - R OW0 - F AA1 - L OW0\nGAROFANO  G AA0 - R OW0 - F AA1 - N OW0\nGAROFOLO  G EH0 - R AH0 - F OW1 - L AH0\nGAROLS  G AE1 - R AO0 L Z\nGARON  G AA0 - R AO1 N\nGARONE  G ER0 - OW1 N\nGARONZIK  G ER0 - AA1 N - Z IH0 K\nGAROUTTE  G ER0 - UW1 T\nGARR  G AE1 R\nGARRABRANT  G AA0 - R AA1 - B R AH0 N T\nGARRAHAN  G AE1 - R AH0 - HH AE0 N\nGARRAMONE  G AE1 - R AH0 - M OW2 N\nGARRARD  G AE1 - R ER0 D\nGARRATT  G EH1 - R AH0 T\nGARRAWAY  G AE1 - R AH0 - W EY0\nGARRELL  G AA0 - R EY1 L\nGARRELS  G AE1 - R AH0 L Z\nGARRELTS  G AE1 - R IH0 L T S\nGARREN  G AA1 - R AH0 N\nGARRET  G EH1 - R IH0 T\nGARRET'S  G EH1 - R AH0 T S\nGARRETS  G EH1 - R AH0 T S\nGARRETSON  G AE1 - R IH0 T - S AH0 N\nGARRETT  G AE1 - R IH0 T\nGARRETT'S  G AE1 - R IH0 T Z\nGARRETT'S(2)  G EH1 - R IH0 T Z\nGARRETT(2)  G EH1 - R IH0 T\nGARRETTE  G ER0 - EH1 T\nGARREY  G AE1 - R IY0\nGARRICK  G EH1 - R IH0 K\nGARRIDO  G AA0 - R IY1 - D OW0\nGARRIDO-LUNA  G AA0 - R IY1 - D OW0 - L UW1 - N AH0\nGARRIGA  G AE1 - R IH0 - G AH0\nGARRIGAN  G AE1 - R IH0 - G AH0 N\nGARRIGUES  G AA0 - R IY1 - G EH0 S\nGARRIGUS  G AA0 - R IY1 - G IH0 S\nGARRINGER  G AE1 - R IH0 - NG ER0\nGARRIOTT  G AE1 - R IY0 - AH0 T\nGARRIS  G AE1 - R IH0 S\nGARRISON  G AE1 - R IH0 - S AH0 N\nGARRISONED  G AE1 - R AH0 - S AH0 N D\nGARRITANO  G AA0 - R IY0 - T AA1 - N OW0\nGARRITT  G AE1 - R IH0 T\nGARRITY  G EH1 - R IH0 - T IY0\nGARRO  G AA1 - R OW0\nGARROD  G AE1 - R AH0 D\nGARROL  G AE1 - R AH0 L\nGARROLS  G AE1 - R AH0 L Z\nGARRON  G AE1 - R AH0 N\nGARRON'S  G EH1 - R AH0 N Z\nGARROS  G EH1 - R OW0 S\nGARROTT  G AE1 - R AH0 T\nGARROW  G EH1 - R OW0\nGARROWAY  G AE1 R - OW0 - W EY2\nGARROZ  G AE1 - R AH0 Z\nGARRULOUS  G EH1 - R AH0 - L AH0 S\nGARRY  G AE1 - R IY0\nGARRY(2)  G EH1 - R IY0\nGARS  G AA1 R Z\nGARSIDE  G AA1 R - S AY2 D\nGARSKE  G AA1 R S K\nGARSON  G AA1 R - S AH0 N\nGARST  G AA1 R S T\nGARSTEN  G AA1 R - S T EH0 N\nGARSTEN'S  G AA1 R - S T EH0 N Z\nGARSTIN  G AA1 R - S T AH0 N\nGARSTKA  G AA1 R S T - K AH0\nGARSTON  G AA1 R - S T AH0 N\nGARTEN  G AA1 R - T AH0 N\nGARTENBERG  G AA1 R - T AH0 N - B ER0 G\nGARTER  G AA1 R - T ER0\nGARTERS  G AA1 R - T ER0 Z\nGARTH  G AA1 R TH\nGARTHWAITE  G AA1 R TH - W EY2 T\nGARTIN  G AA1 R - T IH0 N\nGARTLAND  G AA1 R T - L AH0 N D\nGARTLEY  G AA1 R T - L IY0\nGARTMAN  G AA1 R T - M AH0 N\nGARTMORE  G AA1 R T - M AO2 R\nGARTNER  G AA1 R T - N ER0\nGARTON  G AA1 R - T AH0 N\nGARTRELL  G AA1 R - T R AH0 L\nGARTSIDE  G AA1 R T - S AY2 D\nGARTZKE  G AA1 R T S K\nGARTZKE(2)  G AA1 R T S - K IY0\nGARUDA  G AH0 - R UW1 - D AH0\nGARVER  G AA1 R - V ER0\nGARVERICK  G AA1 R - V ER0 - IH0 K\nGARVEY  G AA1 R - V IY0\nGARVIE  G AA1 R - V IY0\nGARVIN  G AA1 R - V IH0 N\nGARWIN  G AA1 R - W IH0 N\nGARWOOD  G AA1 R - W UH2 D\nGARY  G EH1 - R IY0\nGARY'S  G EH1 - R IY0 Z\nGARZA  G AA1 R - Z AH0\nGARZARELLI  G AA1 R - Z ER0 - EH2 - L IY0\nGARZON  G AA1 R - Z AH0 N\nGAS  G AE1 S\nGAS'S  G AE1 - S IH0 Z\nGASAWAY  G AE1 S - AH0 - W EY2\nGASBARRO  G AA0 S - B AA1 - R OW0\nGASCA  G AA1 - S K AH0\nGASCON  G AE1 S - K AH0 N\nGASCONS  G AE1 S - K AH0 N Z\nGASE  G EY1 Z\nGASEOUS  G AE1 - S IY0 - AH0 S\nGASES  G AE1 - S AH0 Z\nGASES(2)  G AE1 - S IH0 Z\nGASH  G AE1 SH\nGASHED  G AE1 SH T\nGASHES  G AE1 - SH AH0 Z\nGASICH  G EY1 - Z IH0 K\nGASIFICATION  G AE2 - S AH0 - F AH0 - K EY1 - SH AH0 N\nGASIFY  G AE2 - S AH0 - F AY0\nGASIOR  G AE1 - S IY0 - ER0\nGASIOROWSKI  G AH0 - S IY0 - AO0 - R AO1 F S - K IY0\nGASKA  G AA1 - S K AH0\nGASKAMP  G AE1 S - K AE2 M P\nGASKELL  G AE1 S - K AH0 L\nGASKET  G AE1 S - K AH0 T\nGASKETS  G AE1 S - K AH0 T S\nGASKEY  G AE1 S - K IY2\nGASKILL  G AE1 S - K IH2 L\nGASKIN  G AE1 S - K IH0 N\nGASKINS  G AE1 S - K IH0 N Z\nGASLIGHT  G AE1 S - L AY0 T\nGASNER  G AE1 S - N ER0\nGASOHOL  G AE1 - S AH0 - HH AO2 L\nGASOLINE  G AE1 - S AH0 - L IY2 N\nGASOLINES  G AE2 - S AH0 - L IY1 N Z\nGASP  G AE1 S P\nGASPAR  G AE1 - S P ER0\nGASPARD  G AH0 - S P AA1 R D\nGASPARI  G AA0 - S P AA1 - R IY0\nGASPARINI  G AA0 - S P AA0 - R IY1 - N IY0\nGASPARRO  G AA0 - S P AA1 - R OW0\nGASPE  G AE1 - S P IY0\nGASPED  G AE1 S P T\nGASPER  G AE1 - S P ER0\nGASPERINI  G AA0 - S P ER0 - IY1 - N IY0\nGASPING  G AE1 - S P IH0 NG\nGASPS  G AE1 S P S\nGASQUE  G EY1 S K\nGASS  G AE1 S\nGASSAWAY  G AE1 S - AH0 - W EY0\nGASSED  G AE1 S T\nGASSEE  G AE1 - S IY1\nGASSEN  G AE1 - S AH0 N\nGASSER  G AE1 - S ER0\nGASSERT  G AE1 - S ER0 T\nGASSES  G AE1 - S IH0 Z\nGASSETT  G AE1 - S IH0 T\nGASSING  G AE1 - S IH0 NG\nGASSMAN  G AE1 S - M AH0 N\nGASSMANN  G AE1 S - M AH0 N\nGASSNER  G AE1 S - N ER0\nGAST  G AE1 S T\nGASTELLI  G AH0 - S T EH1 - L IY0\nGASTER  G AE1 - S T ER0\nGASTILUM  G EY1 - S T IH0 - L AH0 M\nGASTINEAU  G AE1 - S T IH0 - N OW2\nGASTON  G AE1 - S T AH0 N\nGASTON'S  G AE1 - S T AH0 N Z\nGASTONIA  G AH0 - S T OW1 - N IY0 - AH0\nGASTRIC  G AE1 - S T R IH0 K\nGASTRITIS  G AE0 - S T R AY1 - T AH0 S\nGASTROINTESTINAL  G AE2 - S T R OW0 - IH0 N - T EH1 - S T AH0 - N AH0 L\nGASTRONOMIC  G AH0 - S T R AA2 - N AA1 - M IH0 K\nGASTRONOMY  G AE0 S - T R AA1 - N AH0 - M IY0\nGASTROSCOPE  G AE1 S - T R AH0 - S K OW2 P\nGASTROVASCULAR  G AE2 S - T R OW0 - V AE1 - S K Y AH0 - L ER0\nGASTRULATE  G AE1 S - T R AH0 - L EY2 T\nGASTRULATION  G AE2 S - T R AH0 - L EY1 - SH AH0 N\nGAT  G AE1 T\nGATCH  G AE1 CH\nGATCHEL  G AE1 - CH AH0 L\nGATCHELL  G AE1 - CH AH0 L\nGATE  G EY1 T\nGATED  G EY1 - T IH0 D\nGATEKEEPER  G EY1 T - K IY2 - P ER0\nGATEKEEPERS  G EY1 T - K IY2 - P ER0 Z\nGATELEY  G AE1 - T IH0 - L IY0\nGATELEY(2)  G EY1 T - L IY0\nGATELY  G EY1 T - L IY0\nGATES  G EY1 T S\nGATES'  G EY1 T S\nGATES'S  G EY1 T - S IH0 Z\nGATES'S(2)  G EY1 T S\nGATEWAY  G EY1 T - W EY2\nGATEWAY'S  G EY1 T - W EY2 Z\nGATEWAYS  G EY1 T - W EY2 Z\nGATEWOOD  G EY1 T - W UH2 D\nGATH  G AE1 TH\nGATHER  G AE1 - DH ER0\nGATHERED  G AE1 - DH ER0 D\nGATHERER  G AE1 - DH ER0 - ER0\nGATHERERS  G AE1 - DH ER0 - ER0 Z\nGATHERING  G AE1 - DH ER0 - IH0 NG\nGATHERINGS  G AE1 - DH ER0 - IH0 NG Z\nGATHERS  G AE1 - DH ER0 Z\nGATHINGS  G AE1 - TH IH0 NG Z\nGATHMAN  G AE1 TH - M AH0 N\nGATHRIGHT  G AE1 TH - R AY2 T\nGATIEN  G EY1 - T Y EH0 N\nGATLEY  G AE1 T - L IY0\nGATLIFF  G AE1 T - L IH0 F\nGATLIN  G AE1 T - L IH0 N\nGATLING  G AE1 T - L IH0 NG\nGATLING'S  G AE1 T - L IH0 NG Z\nGATOIL  G AH0 - T OY1 L\nGATOR  G EY1 - T ER0\nGATORADE  G AE1 - T ER0 - EY2 D\nGATORS  G EY1 - T ER0 Z\nGATOS  G AA1 - T OW2 S\nGATOS(2)  G AE1 - T OW2 S\nGATOS(3)  G EY1 - T OW2 S\nGATOS(4)  G EY1 - T OW0 S\nGATRELL  G AE1 - T R AH0 L\nGATSBY  G AE1 T S - B IY0\nGATSON  G AE1 T - S AH0 N\nGATT  G AE1 T\nGATTEN  G AE1 - T AH0 N\nGATTI  G AE1 - T IY0\nGATTING  G AE1 - T IH0 NG\nGATTIS  G AE1 - T IH0 S\nGATTIS(2)  G AE1 - T IY0 Z\nGATTON  G AE1 - T AH0 N\nGATTUSO  G AA0 - T UW1 - S OW0\nGATTY  G AE1 - T IY0\nGATWARD  G AE1 T - W ER0 D\nGATWICK  G AE1 T - W IH2 K\nGATWICK(2)  G EY1 T - W IH2 K\nGATX  G AE1 - T EH2 K S\nGATZ  G AE1 T S\nGATZA  G AA1 T - Z AH0\nGATZKE  G AE1 T S K\nGATZKE(2)  G AE1 T S - K IY0\nGAU  G OW1\nGAUB  G AO1 B\nGAUBATZ  G AW1 - B AH0 T S\nGAUBERT  G AW1 - B ER0 T\nGAUBERT'S  G AW1 - B ER0 T S\nGAUBERT'S(2)  G AW0 - B EH1 R T S\nGAUBERT(2)  G AW0 - B EH1 R T\nGAUCH  G AO1 CH\nGAUCHE  G OW1 SH\nGAUCHER  G OW1 - SH ER0\nGAUCHO  G AW1 - CH OW0\nGAUCHOS  G AW1 - CH OW0 Z\nGAUDET  G OW0 - D EH1 T\nGAUDETTE  G OW0 - D EH1 T\nGAUDIN  G OW0 - D AE1 N\nGAUDINO  G AO2 - D IY1 - N OW0\nGAUDIO  G AO1 - D IY0 - OW0\nGAUDIOSO  G AO0 - D IY0 - OW1 - S OW0\nGAUDREAU  G OW0 - D R OW1\nGAUDY  G AO1 - D IY0\nGAUER  G AW1 - ER0\nGAUERKE  G AW1 - ER0 K\nGAUFMAN  G AO1 F - M AH0 N\nGAUFMAN'S  G AO1 F - M AH0 N Z\nGAUGE  G EY1 JH\nGAUGED  G EY1 JH D\nGAUGER  G EY1 - JH ER0\nGAUGES  G EY1 - JH AH0 Z\nGAUGES(2)  G EY1 - JH IH0 Z\nGAUGH  G AO1\nGAUGHAN  G AO1 - AH0 N\nGAUGHMAN  G AO1 - M AH0 N\nGAUGHRAN  G AO1 - R AH0 N\nGAUGING  G EY1 - JH IH0 NG\nGAUGLER  G AO1 G - L ER0\nGAUGUIN  G AO1 G - W IH0 N\nGAUGUIN(2)  G OW1 - G AE2 N\nGAUL  G AO1 L\nGAULAN  G AO1 - L AH0 N\nGAULDEN  G AW1 - D AH0 N\nGAULDING  G AO1 L - D IH0 NG\nGAULIN  G OW0 - L AE1 N\nGAULKE  G AO1 L K\nGAULLE  G AO1 L\nGAULLIST  G AO1 - L IH0 S T\nGAULS  G AO1 L Z\nGAULT  G AO1 L T\nGAULTIER  G OW1 L - T Y EY0\nGAULTIER(2)  G AA1 L - T Y ER0\nGAULTNEY  G AO1 L T - N IY0\nGAUMER  G AW1 - M ER0\nGAUMOND  G OW0 - M AA1 N D\nGAUNA  G AO1 - N AH0\nGAUNCE  G AO1 N S\nGAUNT  G AO1 N T\nGAUNTLET  G AO1 N T - L AH0 T\nGAUNTNESS  G AO1 N T - N AH0 S\nGAUNTT  G AO1 N T\nGAUS  G AO1 Z\nGAUSE  G AO1 Z\nGAUSMAN  G AW1 S - M AH0 N\nGAUSS  G AW1 S\nGAUSTAD  G AW1 - S T AH0 D\nGAUT  G AO1 T\nGAUTHIER  G AW1 - TH IY0 - ER0\nGAUTHREAUX  G OW0 - TH R OW1\nGAUTIER  G AW1 - T IY0 - ER0\nGAUTNEY  G AO1 T - N IY0\nGAUTREAU  G OW0 - T R OW1\nGAUTREAUX  G OW0 - T R OW1\nGAUVAIN  G OW0 - V AE1 N\nGAUVIN  G OW0 - V AE1 N\nGAUVREAU  G OW0 - V R OW1\nGAUZE  G AO1 Z\nGAVALDA  G AH0 - V AA1 L - D AH0\nGAVAN  G EY1 - V AH0 N\nGAVE  G EY1 V\nGAVEL  G AE1 - V AH0 L\nGAVEN  G EY1 - V AH0 N\nGAVER  G EY1 - V ER0\nGAVIGAN  G AE1 - V IH0 - G AH0 N\nGAVIN  G AE1 - V IH0 N\nGAVIOTAS  G AE0 - V IY0 - AO1 - T AH0 Z\nGAVIOTAS(2)  G AE0 - V Y AO1 - T AH0 Z\nGAVIRIA  G AH0 - V IH1 - R IY0 - AH0\nGAVITT  G AE1 - V IH0 T\nGAVRAS  G AE1 - V R AH0 S\nGAVRAS'S  G AE1 - V R AH0 - S IH0 Z\nGAW  G AO1\nGAWAIN  G AA1 - W AH0 N\nGAWEL  G AO1 - AH0 L\nGAWEN  G AO1 - AH0 N\nGAWK  G AO1 K\nGAWKER  G AA1 - K ER0\nGAWKERS  G AA1 - K ER0 Z\nGAWKING  G AO1 - K IH0 NG\nGAWKY  G AO1 - K IY0\nGAWLIK  G AO1 - L IH0 K\nGAWNE  G AO1 N\nGAWRON  G AO1 - R AH0 N\nGAWRONSKI  G AA0 - V R AA1 N - S K IY0\nGAWTHROP  G AO1 - TH R AH0 P\nGAXIOLA  G AE0 K - S IY0 - OW1 - L AH0\nGAY  G EY1\nGAYDA  G EY1 - D AH0\nGAYDEN  G EY1 - D AH0 N\nGAYDOS  G EY1 - D OW0 Z\nGAYDOSH  G EY1 - D AH0 SH\nGAYE  G EY1\nGAYER  G EY1 - ER0\nGAYHART  G EY1 - HH AA2 R T\nGAYHEART  G EY1 - HH AA2 R T\nGAYLE  G EY1 L\nGAYLER  G EY1 - L ER0\nGAYLES  G EY1 L Z\nGAYLOR  G EY1 - L ER0\nGAYLORD  G EY1 - L AO2 R D\nGAYMAN  G EY0 - M AE1 N\nGAYMON  G EY1 - M AH0 N\nGAYNATIE  G EY1 - N AH0 - T IY0\nGAYNER  G EY1 - N ER0\nGAYNESS  G EY1 - N AH0 S\nGAYNOR  G EY1 - N ER0\nGAYS  G EY1 Z\nGAYSHILL  G EY2 Z - HH IH1 L\nGAYSHILL(2)  G EY0 - SH IH1 L\nGAYTAN  G EY1 - T AH0 N\nGAYTON  G EY1 - T AH0 N\nGAZ  G AA1 Z\nGAZ(2)  G AE1 Z\nGAZA  G AA1 - Z AH0\nGAZA'S  G AA1 - Z AH0 Z\nGAZANS  G AA1 - Z AH0 N Z\nGAZAWAY  G AA1 - Z AH0 - W EY0\nGAZDA  G AE1 Z - D AH0\nGAZDIK  G AE1 Z - D IH0 K\nGAZE  G EY1 Z\nGAZED  G EY1 Z D\nGAZELLA  G AH0 - Z EH1 - L AH0\nGAZELLE  G AH0 - Z EH1 L\nGAZELLES  G AH0 - Z EH1 L Z\nGAZES  G EY1 - Z AH0 Z\nGAZES(2)  G EY1 - Z IH0 Z\nGAZETA  G AH0 - Z EY1 - T AH0\nGAZETA(2)  G AH0 - Z EH1 - T AH0\nGAZETTE  G AH0 - Z EH1 T\nGAZING  G EY1 - Z IH0 NG\nGAZONSKY  G AH0 - Z AA1 N - S K IY0\nGAZONSKY'S  G AH0 - Z AA1 N - S K IY0 Z\nGAZPROM  G AE1 Z - P R AA2 M\nGAZZOLA  G AA0 T - S OW1 - L AH0\nGDANSK  G AH0 - D AE1 N S K\nGEAC  G IY1 K\nGEAC(2)  JH IY1 - IY1 - EY1 - S IY1\nGEAGEA  JH IY1 - AH0 - JH IY1 - AH0\nGEAN  JH IY1 N\nGEAR  G IH1 R\nGEAR'S  G IH1 R Z\nGEARAN  G IH1 - R AH0 N\nGEARAN'S  G IH1 - R AH0 N Z\nGEARBOX  G IH1 R - B AA2 K S\nGEARBOXES  G IH1 R - B AA0 K - S IH0 Z\nGEARED  G IH1 R D\nGEAREY  G IH1 - R IY0\nGEARHART  G IH1 R - HH AA0 R T\nGEARHART(2)  G IY1 R - HH AA0 R T\nGEARHEART  G IH1 R - HH AA0 R T\nGEARHEART(2)  G IY1 R - HH AA0 R T\nGEARIN  G IH1 - R IH0 N\nGEARING  G IH1 - R IH0 NG\nGEARS  G IH1 R Z\nGEARY  G IH1 - R IY0\nGEBAUER  G EH1 - B AW0 - ER0\nGEBBIA  JH EH1 - B IY0 - AH0\nGEBBIE  JH EH1 - B IY0\nGEBBIE'S  JH EH1 - B IY0 Z\nGEBEL  G EH1 - B AH0 L\nGEBERT  G EH1 - B ER0 T\nGEBHARD  G EH1 B - HH ER0 D\nGEBHARDT  G EH1 B - HH AA0 R T\nGEBHART  G EH1 B - HH AA0 R T\nGEBLER  G EH1 - B AH0 L - ER0\nGEBLER(2)  G EH1 B - L ER0\nGEBO  JH EY1 - B OW0\nGECHEM  G EH1 - CH AH0 M\nGECK  JH EH1 K\nGECKO  G EH1 - K OW0\nGECKOS  G EH1 - K OW0 Z\nGED  G EH1 D\nGED(2)  JH IY1 - IY1 - D IY1\nGEDDES  G EH1 - D AH0 S\nGEDDES(2)  G EH1 - D AH0 Z\nGEDDIE  JH EH1 - D IY0\nGEDDINGS  JH EH1 - D IH0 NG Z\nGEDDIS  G EH1 - D IH0 S\nGEDEON  G EH1 - D IY0 - AH0 N\nGEDNEY  JH EH1 D - N IY0\nGEDULD  G EH1 - D AH0 L D\nGEE  JH IY1\nGEE'S  JH IY1 Z\nGEEING  JH IY1 - IH0 NG\nGEEK  G IY1 K\nGEEKS  G IY1 K S\nGEEKY  G IY1 - K IY0\nGEENA  G IY1 - N AH0\nGEENEN  G IY1 - N AH0 N\nGEER  G IH1 R\nGEERDES  G IH1 R D Z\nGEERS  G IY1 - ER0 Z\nGEERTS  G IH1 R T S\nGEES  JH IY1 S\nGEESAMAN  G IY1 - S AH0 - M AH0 N\nGEESE  G IY1 S\nGEESEY  G IY1 - S IY0\nGEESLIN  G IY1 S - L IH0 N\nGEETING  G IY1 - T IH0 NG\nGEEZ  JH IY1 Z\nGEFFEN  G EH1 - F AH0 N\nGEFFERT  G EH1 - F ER0 T\nGEFFNER  G EH1 F - N ER0\nGEFFRE  JH EH1 - F ER0\nGEFINOR  G EH1 - F IH0 - N ER0\nGEGENHEIMER  G EH1 - G IH0 N - HH AY0 - M ER0\nGEGG  JH EH1 G\nGEHL  G EH1 L\nGEHLE  JH EH1 - HH AH0 L\nGEHLHAUSEN  G EH1 L - HH AW0 - Z AH0 N\nGEHLING  G EH1 - L IH0 NG\nGEHM  JH EH1 M\nGEHMAN  G EH1 - M AH0 N\nGEHR  JH EH1 R\nGEHRES  JH EH1 R Z\nGEHRET  G EH1 - R IH0 T\nGEHRIG  G EH1 - R IH0 G\nGEHRIG'S  G EH1 - R IH0 G Z\nGEHRING  G EH1 - R IH0 NG\nGEHRINGER  G EH1 - R IH0 - NG ER0\nGEHRIS  G EH1 - R IH0 S\nGEHRKE  JH EH1 R K\nGEHRMAN  G EH1 R - M AH0 N\nGEHRMANN  G EH1 R - M AH0 N\nGEHRT  G EH1 R T\nGEHRY  G EH1 - R IY0\nGEIB  G AY1 B\nGEIBEL  G AY1 - B AH0 L\nGEICO  G AY1 - K OW0\nGEICO'S  G AY1 - K OW0 Z\nGEIDAR  G AY1 - D AA2 R\nGEIDEL  G AY1 - D AH0 L\nGEIER  G AY1 - ER0\nGEIGER  G AY1 - G ER0\nGEIGLE  G AY1 - G AH0 L\nGEIGY  G AY1 - G IY0\nGEIGY'S  G AY1 - G IY0 Z\nGEIKEN  G AY1 - K AH0 N\nGEIL  G AY1 L\nGEILER  G AY1 - L ER0\nGEIMAN  G AY1 - M AH0 N\nGEIMER  G AY1 - M ER0\nGEIS  G AY1 Z\nGEISE  G AY1 S\nGEISEL  G AY1 - S AH0 L\nGEISELMAN  G AY1 - S AH0 L - M AH0 N\nGEISEN  G AY1 - S AH0 N\nGEISER  G AY1 - S ER0\nGEISERT  G AY1 - S ER0 T\nGEISHA  G EY1 - SH AH0\nGEISINGER  G AY1 - S IH0 N - JH ER0\nGEISLER  G AY1 S - L ER0\nGEISS  G AY1 S\nGEISSINGER  G AY1 - S IH0 N - JH ER0\nGEISSLER  G AY1 S - L ER0\nGEIST  G AY1 S T\nGEISTER  G AY1 - S T ER0\nGEISZLER  G AY1 S - L ER0\nGEITNER  G AY1 T - N ER0\nGEITZ  G AY1 T S\nGEJDENSON  G EY1 - D AH0 N - S AH0 N\nGEKKO  G EH1 - K OW0\nGEL  JH EH1 L\nGELARDI  JH EH0 - L AA1 R - D IY0\nGELARDIN  G AH0 - L AA1 R - D IH0 N\nGELASIA  JH EH0 - L AA1 - S IY0 - AH0\nGELATIN  JH EH1 - L AH0 - T AH0 N\nGELATINE  JH EH2 - L AH0 - T IY1 N\nGELATINOUS  JH AH0 - L AE1 - T AH0 - N AH0 S\nGELB  JH EH1 L B\nGELBART  G EH1 L - B AA2 R T\nGELBER  G EH1 L - B ER0\nGELCO  JH EH1 L - K OW0\nGELDER  G EH1 L - D ER0\nGELDERMANN  G EH1 L - D ER0 - M AH0 N\nGELERNTER  G AH0 - L ER1 N - T ER0\nGELETT  JH EH1 - L IH0 T\nGELETTE  ZH IH0 - L EH1 T\nGELFAND  G EH1 L - F AH0 N D\nGELINAS  G EH1 - L IH0 - N AH0 Z\nGELINEAU  ZH EH1 - L IH0 - N OW0\nGELL  JH EH1 L\nGELLATLY  JH EH1 - L AH0 T - L IY0\nGELLER  G EH1 - L ER0\nGELLERMAN  G EH1 - L ER0 - M AH0 N\nGELLERT  G EH1 - L ER0 T\nGELLES  JH EH1 L Z\nGELLI  G EH1 - L IY0\nGELLIS  G EH1 - L IH0 S\nGELLMAN  G EH1 L - M AH0 N\nGELLNER  G EH1 L - N ER0\nGELMAN  G EH1 L - M AH0 N\nGELPI  JH EH1 L - P IY0\nGELS  JH EH1 L Z\nGELSINGER  G EH1 L - S IH0 N - JH ER0\nGELTZ  G EH1 L T S\nGELVIN  G EH1 L - V IH0 N\nGEM  JH EH1 M\nGEM'S  JH EH1 M Z\nGEMAYEL  G AH0 - M EY1 - AH0 L\nGEMAYEL'S  G AH0 - M EY1 - AH0 L Z\nGEMAYEL'S(2)  JH AH0 - M AY1 - AH0 L Z\nGEMAYEL'S(3)  G AH0 - M AY1 - AH0 L Z\nGEMAYEL(2)  JH AH0 - M AY1 - AH0 L\nGEMAYEL(3)  G AH0 - M AY1 - AH0 L\nGEMBERLING  G EH1 M - B ER0 - L IH0 NG\nGEMCO  JH EH1 M - K OW0\nGEMCRAFT  JH EH1 M - K R AE2 F T\nGEMCRAFT'S  JH EH1 M - K R AE2 F T S\nGEMEX  JH EH1 - M EH0 K S\nGEMFIBROZIL  G EH1 M - F IH0 - B R OW0 - Z AH0 L\nGEMFIBROZIL(2)  JH IH2 M - F EY1 - B R OW0 - Z IH2 L\nGEMIGNANI  JH EH0 - M IY0 G - N AA1 - N IY0\nGEMINA  G EH0 - M IY1 - N AH0\nGEMINATE  JH EH1 - M AH0 - N AH0 T\nGEMINATE(2)  JH EH1 - M AH0 - N EY2 T\nGEMINI  JH EH1 - M AH0 - N AY2\nGEMINI(2)  JH EH1 - M AH0 - N IY2\nGEMMA  JH EH1 - M AH0\nGEMME  JH EH1 M\nGEMMELL  G EH1 - M AH0 L\nGEMMER  G EH1 - M ER0\nGEMMILL  G EH1 - M AH0 L\nGEMS  JH EH1 M Z\nGEMSBOK  G EH1 M Z - B AA0 K\nGEMSTONE  JH EH1 M - S T OW2 N\nGEMSTONES  JH EH1 M - S T OW2 N Z\nGEN  JH EH1 - N ER0 - AH0 L\nGEN.  JH EH1 - N ER0 - AH0 L\nGEN.(2)  JH EH1 N\nGENA  JH EH1 - N AH0\nGENADY  JH AH0 - N EY1 - D IY0\nGENCARELLI  JH EH0 N - K AA0 R - EH1 - L IY0\nGENCO  JH EH1 NG - K OW0\nGENCOR  JH EH1 N - K AO2 R\nGENCORP  JH EH1 N - K AO2 R P\nGENCORP'S  JH EH1 N - K AO2 R P S\nGENCORP'S(2)  JH EH1 N - K AO2 R S\nGENCORP(2)  JH EH1 N - K AO2 R\nGENDARME  ZH AA1 N - D AA2 R M\nGENDER  JH EH1 N - D ER0\nGENDERS  JH EH1 N - D ER0 Z\nGENDLER  JH EH1 N D - L ER0\nGENDREAU  ZH IH0 N - D R OW1\nGENDRISEK  JH EH1 D - R IH0 - S EH2 K\nGENDRISEK'S  JH EH1 D - R IH0 - S EH2 K S\nGENDRON  JH EH1 N - D R AH0 N\nGENE  JH IY1 N\nGENE'S  JH IY1 N Z\nGENEALOGY  JH IY2 - N IY0 - AA1 - L AH0 - JH IY0\nGENEEN  JH AH0 - N IY1 N\nGENEGO  G EH1 - N AH0 - G OW2\nGENEGO(2)  JH EH1 - N AH0 - G OW0\nGENEGO(3)  JH IY1 - IY1 - EH1 - N IY1 - JH IY1 - OW1\nGENELAB  JH EH1 - N AH0 - L AE2 B\nGENELABS  JH EH1 - N AH0 - L AE2 B Z\nGENEMEDICINE  JH EH1 - N AH0 - M EH1 - D AH0 - S AH0 N\nGENENCOR  JH EH1 - N AH0 N - K AO2 R\nGENENTECH  JH EH1 - N AH0 N - T EH2 K\nGENENTECH'S  JH EH1 - N AH0 N - T EH2 K S\nGENERA  JH EH1 - N ER0 - AH0\nGENERAL  JH EH1 - N ER0 - AH0 L\nGENERAL'S  JH EH1 - N ER0 - AH0 L Z\nGENERAL'S(2)  JH EH1 - N R AH0 L Z\nGENERAL(2)  JH EH1 - N R AH0 L\nGENERALE  JH EH2 - N ER0 - AE1 L\nGENERALES  JH EH2 - N EH0 - R AA1 - L EH0 S\nGENERALI  JH EH2 - N ER0 - AA1 - L IY0\nGENERALISSIMO  JH EH2 - N EH0 - R AH0 - L IH1 - S IH0 - M OW2\nGENERALIST  JH EH1 - N ER0 - AH0 - L IH0 S T\nGENERALISTS  JH EH1 - N ER0 - AH0 - L IH0 S T S\nGENERALISTS(2)  JH EH1 - N ER0 - AH0 - L IH0 S S\nGENERALISTS(3)  JH EH1 - N ER0 - AH0 - L IH0 S\nGENERALITIES  JH EH2 - N ER0 - AE1 - L AH0 - T IY0 Z\nGENERALITY  JH EH2 - N ER0 - AE1 - L AH0 - T IY0\nGENERALIZATION  JH EH2 - N ER0 - AH0 - L IH0 - Z EY1 - SH AH0 N\nGENERALIZATION(2)  JH EH2 - N R AH0 - L IH0 - Z EY1 - SH AH0 N\nGENERALIZATIONS  JH EH2 - N ER0 - AH0 - L AH0 - Z EY1 - SH AH0 N Z\nGENERALIZATIONS(2)  JH EH2 - N R AH0 - L AH0 - Z EY1 - SH AH0 N Z\nGENERALIZE  JH EH1 - N ER0 - AH0 - L AY2 Z\nGENERALIZED  JH EH1 - N ER0 - AH0 - L AY2 Z D\nGENERALIZED(2)  JH EH1 N - R AH0 - L AY2 Z D\nGENERALIZING  JH EH1 - N ER0 - AH0 - L AY2 - Z IH0 NG\nGENERALIZING(2)  JH EH1 N - R AH0 - L AY2 - Z IH0 NG\nGENERALLY  JH EH1 - N ER0 - AH0 - L IY0\nGENERALLY(2)  JH EH1 N - R AH0 - L IY0\nGENERALS  JH EH1 - N ER0 - AH0 L Z\nGENERALS(2)  JH EH1 - N R AH0 L Z\nGENERALSHIP  JH EH1 - N ER0 - AH0 L - SH IH2 P\nGENERATE  JH EH1 - N ER0 - EY2 T\nGENERATED  JH EH1 - N ER0 - EY2 - T AH0 D\nGENERATED(2)  JH EH1 - N ER0 - EY2 - T IH0 D\nGENERATES  JH EH1 - N ER0 - EY2 T S\nGENERATING  JH EH1 - N ER0 - EY2 - T IH0 NG\nGENERATION  JH EH2 - N ER0 - EY1 - SH AH0 N\nGENERATION'S  JH EH2 - N ER0 - EY1 - SH AH0 N Z\nGENERATIONAL  JH EH2 - N ER0 - EY1 - SH AH0 - N AH0 L\nGENERATIONALLY  JH EH2 - N ER0 - EY1 - SH AH0 N - AH0 - L IY0\nGENERATIONS  JH EH2 - N ER0 - EY1 - SH AH0 N Z\nGENERATIVE  JH EH1 - N ER0 - AH0 - T IH0 V\nGENERATOR  JH EH1 - N ER0 - EY2 - T ER0\nGENERATORS  JH EH1 - N ER0 - EY2 - T ER0 Z\nGENEREUX  ZH EH1 - N ER0 - OW0\nGENERIC  JH AH0 - N EH1 - R IH0 K\nGENERICALLY  JH AH0 - N EH1 - R IH0 K - L IY0\nGENERICS  JH AH0 - N EH1 - R IH0 K S\nGENERO  JH AH0 - N ER1 - OW0\nGENEROSITY  JH EH2 - N ER0 - AA1 - S AH0 - T IY0\nGENEROUS  JH EH1 - N ER0 - AH0 S\nGENEROUSLY  JH EH1 - N ER0 - AH0 S - L IY0\nGENES  JH IY1 N Z\nGENESCO  JH EH0 - N EH1 - S K OW0\nGENESEE  JH EH1 - N AH0 - S IY2\nGENESIS  JH EH1 - N AH0 - S AH0 S\nGENET  JH EH1 - N IH0 T\nGENETIC  JH AH0 - N EH1 - T IH0 K\nGENETICALLY  JH AH0 - N EH1 - T IH0 K - L IY0\nGENETICIST  JH AH0 - N EH1 - T AH0 - S AH0 S T\nGENETICISTS  JH AH0 - N EH1 - T AH0 - S AH0 S T S\nGENETICISTS(2)  JH AH0 - N EH1 - T AH0 - S AH0 S S\nGENETICISTS(3)  JH AH0 - N EH1 - T AH0 - S AH0 S\nGENETICS  JH AH0 - N EH1 - T IH0 K S\nGENETIZATION  JH EH2 - N AH0 - T IH0 - Z EY1 - SH AH0 N\nGENEVA  JH AH0 - N IY1 - V AH0\nGENEVE  JH AH0 - N IY1 V\nGENEVIEVE  JH EH1 - N AH0 - V IY2 V\nGENEX  JH EH1 - N EH0 K S\nGENEX'S  JH EH1 - N EH0 K - S IH0 Z\nGENG  JH EH1 NG\nGENGENBACH  G EH1 - NG AH0 N - B AA2 K\nGENGENBACH(2)  JH EH1 - NG AH0 N - B AA2 K\nGENGER  JH EH1 NG - G ER0\nGENGHIS  JH EH1 NG - HH IH0 S\nGENGLER  G EH1 NG - L ER0\nGENGLER(2)  JH EH1 NG - L ER0\nGENIAL  JH IY1 - N Y AH0 L\nGENIALITY  JH IY2 - N IY0 - AE1 - L AH0 - T IY0\nGENICOM  JH EH1 - N IH0 - K AA0 M\nGENIE  JH IY1 - N IY0\nGENIERE  JH EH0 - N Y EH1 R\nGENIS  G EH1 - N IH0 S\nGENISCO  JH EH0 - N IH1 - S K OW0\nGENITAL  JH EH1 - N AH0 - T AH0 L\nGENITALIA  JH EH0 - N AH0 - T AA1 - L Y AH0\nGENITALS  JH EH1 - N AH0 - T AH0 L Z\nGENIUS  JH IY1 - N Y AH0 S\nGENIUSES  JH IY1 - N Y AH0 - S IH0 Z\nGENK  JH EH1 NG K\nGENLYTE  JH EH1 N - L AY2 T\nGENMAR  JH EH1 N - M AA0 R\nGENNA  JH EH1 - N AH0\nGENNADI  JH EH0 - N AA1 - D IY0\nGENNADY  G AH0 - N AA1 - D IY0\nGENNARO  JH AH0 - N AA1 - R OW0\nGENNETT  JH EH1 - N IH0 T\nGENNIFER  JH EH1 - N IH0 - F ER0\nGENO  JH IY1 - N OW0\nGENOA  JH EH1 - N OW0 - AH0\nGENOCIDAL  JH EH1 - N AH0 - S AY2 - D AH0 L\nGENOCIDE  JH EH1 - N AH0 - S AY2 D\nGENOESE  JH EH1 - N OW0 S\nGENOME  JH IY1 - N OW2 M\nGENOSSENSCHAFTSBANK  G EH0 - N OW1 - S EH0 N - SH AE0 F T S - B AE2 NG K\nGENOTYPE  JH EH1 - N AH0 - T AY2 P\nGENOTYPES  JH EH1 - N AH0 - T AY2 P S\nGENOVA  JH EH1 - N OW0 - V AH0\nGENOVESE  JH EH1 - N AH0 - V IY0 Z\nGENOVESI  JH EH2 - N OW0 - V EH1 - S IY0\nGENOVISE  JH EH1 - N AH0 - V IY0 Z\nGENPHARM  JH EH1 N - F AA2 R M\nGENRAD  JH EH1 N - R AE0 D\nGENRE  ZH AA1 N - R AH0\nGENRES  ZH AA1 N - R AH0 Z\nGENRICH  G EH1 N - R IH0 K\nGENS  JH EH1 N Z\nGENSCHER  G EH1 N - SH ER0\nGENSEL  G EH1 N - S AH0 L\nGENSIA  JH EH2 N - S IY1 - AH0\nGENSKE  JH EH1 N S K\nGENSLER  G EH1 N - S AH0 - L ER0\nGENSLER(2)  G EH1 N - S L ER0\nGENSON  JH EH1 N - S AH0 N\nGENSTAR  JH EH1 N - S T AA2 R\nGENT  JH EH1 N T\nGENTEEL  JH EH0 N - T IY1 L\nGENTER  JH EH1 N - T ER0\nGENTHER  G EH1 N - DH ER0\nGENTHNER  JH EH1 N TH - N ER0\nGENTIAN  JH EH1 N - SH AH0 N\nGENTILE  JH EH1 N - T AY2 L\nGENTILE'S  JH EH1 N - T AY2 L Z\nGENTILES  JH EH1 N - T AY2 L Z\nGENTILITY  JH EH0 N - T IH1 - L IH0 - T IY0\nGENTLE  JH EH1 N - T AH0 L\nGENTLE(2)  JH EH1 - N AH0 L\nGENTLELADIES  JH EH1 N - T AH0 - L EY2 - D IY0 Z\nGENTLELADY  JH EH1 N - T AH0 - L EY2 - D IY0\nGENTLEMAN  JH EH1 N - T AH0 L - M AH0 N\nGENTLEMAN'S  JH EH1 N - T AH0 L - M AH2 N Z\nGENTLEMAN'S(2)  JH EH1 - N AH0 L - M AH2 N Z\nGENTLEMAN(2)  JH EH1 - N AH0 L - M AH0 N\nGENTLEMANLY  JH EH1 N - T AH0 L - M AH0 N - L IY0\nGENTLEMANLY(2)  JH EH1 - N AH0 L - M AH0 N - L IY0\nGENTLEMEN  JH EH1 N - T AH0 L - M IH0 N\nGENTLEMEN'S  JH EH1 N - T AH0 L - M EH2 N Z\nGENTLEMEN'S(2)  JH EH1 - N AH0 L - M EH2 N Z\nGENTLEMEN(2)  JH EH1 - N AH0 L - M IH0 N\nGENTLENESS  JH EH1 N - T AH0 L - N AH0 S\nGENTLENESS(2)  JH EH1 - N AH0 L - N AH0 S\nGENTLER  JH EH1 N T - L ER0\nGENTLES  JH EH1 N - T AH0 L Z\nGENTLES(2)  JH EH1 - N AH0 L Z\nGENTLEST  JH EH1 N - T AH0 - L AH0 S T\nGENTLEWOMAN  JH EH1 N - T AH0 L - W UH2 - M AH0 N\nGENTLEWOMAN'S  JH EH1 N - T AH0 L - W UH2 - M AH0 N Z\nGENTLEWOMAN'S(2)  JH EH1 - N AH0 L - W UH2 - M AH0 N Z\nGENTLEWOMAN(2)  JH EH1 - N AH0 L - W UH2 - M AH0 N\nGENTLEWOMEN  JH EH1 N - T AH0 L - W IH2 - M AH0 N\nGENTLEWOMEN'S  JH EH1 N - T AH0 L - W IH2 - M AH0 N Z\nGENTLEWOMEN'S(2)  JH EH1 - N AH0 L - W IH2 - M AH0 N Z\nGENTLEWOMEN(2)  JH EH1 - N AH0 L - W IH2 - M AH0 N\nGENTLY  JH EH1 N T - L IY0\nGENTNER  JH EH1 N T - N ER0\nGENTRIFICATION  JH EH2 N - T R IH0 - F IH0 - K EY1 - SH AH0 N\nGENTRIFIED  JH EH1 N - T R IH0 - F AY2 D\nGENTRIFY  JH EH1 N - T R IH0 - F AY2\nGENTRIFYING  JH EH1 N - T R IH0 - F AY2 - IH0 NG\nGENTRY  JH EH1 N - T R IY0\nGENTZ  JH EH1 N T S\nGENTZLER  JH EH1 N T S - L ER0\nGENUINE  JH EH1 - N Y AH0 W - AH0 N\nGENUINE(2)  JH EH1 - N Y UW1 - W AY2 N\nGENUINELY  JH EH1 - N Y AH0 W - AH0 N - L IY0\nGENUINELY(2)  JH EH1 - N Y UW1 - W AY2 N - L IY0\nGENUINENESS  JH EH1 - N Y AH0 W - AH0 N - IH0 S\nGENUNG  JH EH1 - N AH0 NG\nGENUS  JH IY1 - N AH0 S\nGENZ  JH EH1 N Z\nGENZYME  JH EH1 N - Z AY2 M\nGEO  JH IY1 - OW0\nGEOCENTRIC  JH IY2 - OW0 - S EH1 N - T R IH0 K\nGEOCHEMISTRY  JH IY2 - OW0 - K EH1 - M AH0 - S T R IY0\nGEODESIC  JH IY2 - AH0 - D EH1 - S IH0 K\nGEODESY  JH IY0 - AA1 - D AH0 - S IY0\nGEODYNE  JH IY1 - OW0 - D AY2 N\nGEOFF  JH EH1 F\nGEOFFREY  JH EH1 - F R IY0\nGEOFFREY'S  JH EH1 - F R IY0 Z\nGEOFFRION  JH IY2 - AA1 - F R IY0 - AH0 N\nGEOFFROY  JH IY1 - AH0 - F R OY0\nGEOGHEGAN  G AH0 - HH EY1 - G AH0 N\nGEOGRAPHER  JH IY0 - AA1 - G R AH0 - F ER0\nGEOGRAPHIC  JH IY2 - AH0 - G R AE1 - F IH0 K\nGEOGRAPHIC'S  JH IY2 - AH0 - G R AE1 - F IH0 K S\nGEOGRAPHICAL  JH IY2 - AH0 - G R AE1 - F IH0 - K AH0 L\nGEOGRAPHICALLY  JH IY2 - AH0 - G R AE1 - F IH0 - K AH0 - L IY0\nGEOGRAPHICALLY(2)  JH IY2 - AH0 - G R AE1 - F IH0 K - L IY0\nGEOGRAPHY  JH IY0 - AA1 - G R AH0 - F IY0\nGEOID  JH IY1 - OY0 D\nGEOLOGIC  JH IY2 - AH0 - L AA1 - JH IH0 K\nGEOLOGICAL  JH IY2 - AH0 - L AA1 - JH IH0 - K AH0 L\nGEOLOGIST  JH IY0 - AA1 - L AH0 - JH AH0 S T\nGEOLOGISTS  JH IY0 - AA1 - L AH0 - JH IH0 S T S\nGEOLOGISTS(2)  JH IY0 - AA1 - L AH0 - JH IH0 S S\nGEOLOGISTS(3)  JH IY0 - AA1 - L AH0 - JH IH0 S\nGEOLOGY  JH IY0 - AA1 - L AH0 - JH IY0\nGEOMAGNETIC  JH IY2 - OW0 - M AE0 G - N EH1 - T IH0 K\nGEOMETRIC  JH IY2 - AH0 - M EH1 - T R IH0 K\nGEOMETRICAL  JH IY2 - AH0 - M EH1 - T R IH0 - K AH0 L\nGEOMETRICALLY  JH IY2 - AH0 - M EH1 - T R IH0 K - L IY0\nGEOMETRICS  JH IY2 - AH0 - M EH1 - T R IH0 K S\nGEOMETRIES  JH IY0 - AA1 - M AH0 - T R IY0 Z\nGEOMETRY  JH IY0 - AA1 - M AH0 - T R IY0\nGEOMORPHOLOGY  JH IY2 - AH0 - M AO2 R - F AA1 - L AH0 - JH IY0\nGEON  JH IY1 - AA0 N\nGEOPHYSICAL  JH IY2 - OW0 - F IH1 - Z AH0 - K AH0 L\nGEOPOLITIC  JH IY2 - OW0 - P AA1 - L IH0 - T IH0 K\nGEOPOLITICAL  JH IY2 - OW0 - P AH0 - L IH1 - T IH0 - K AH0 L\nGEOPOLITICALLY  JH IY2 - OW0 - P AH0 - L IH1 - T IH0 K - L IY0\nGEOPOLITICS  JH IY2 - OW0 - P AA1 - L AH0 - T IH0 K S\nGEORDIE  JH IY1 - ER0 - D IY0\nGEORG  G EY1 - AO0 R G\nGEORGAKIS  JH AO2 R - JH AA1 - K AH0 S\nGEORGANN  JH AO2 R - JH AE1 N\nGEORGE  JH AO1 R JH\nGEORGE'S  JH AO1 R - JH AH0 Z\nGEORGE'S(2)  JH AO1 R - JH IH0 Z\nGEORGENE  JH AO1 R - JH IY2 N\nGEORGES  JH AO1 R - JH AH0 Z\nGEORGES(2)  JH AO1 R - JH IH0 Z\nGEORGESON  JH AO1 R - JH IH0 - S AH0 N\nGEORGESON(2)  JH AO1 R JH - S AH0 N\nGEORGETOWN  JH AO1 R JH - T AW2 N\nGEORGETTE  JH AO0 R - JH EH1 T\nGEORGI  JH IY0 - AA1 R - JH IY0\nGEORGIA  JH AO1 R - JH AH0\nGEORGIA'S  JH AO1 R - JH AH0 Z\nGEORGIADES  JH AO2 R - JH IY0 - AA1 - D AH0 S\nGEORGIADIS  JH AO2 R - JH IY0 - AA1 - D IH0 S\nGEORGIAN  JH AO1 R - JH AH0 N\nGEORGIANA  JH AO2 R - JH IY0 - AE1 - N AH0\nGEORGIANS  JH AO1 R - JH AH0 N Z\nGEORGIE  JH AO1 R - JH IY0\nGEORGIENNE  JH AO2 R - JH IY0 - EH1 N\nGEORGINA  JH AO2 R - JH IY1 - N AH0\nGEORGINE  JH AO2 R - JH IY1 N\nGEORGIO  JH AO1 R - JH IY2 - OW0\nGEORGIOU  JH AO2 R - JH OW1\nGEORGOPOULOS  JH AO2 R - JH AA1 - P AH0 - L IH0 S\nGEORGY  JH AO1 R - JH IY0\nGEOSTROPHIC  JH IY2 - OW0 - S T R AA1 - F IH0 K\nGEOSYNCLINE  JH IY2 - OW0 - S IH1 N - K L AY0 N\nGEOTAXIS  JH IY2 - OW0 - T AE1 K - S AH0 S\nGEOTEK  G IY1 - OW0 - T EH2 K\nGEOTHERMAL  JH IY2 - OW0 - TH ER1 - M AH0 L\nGEOTROPIC  JH IY2 - AH0 - T R AA1 - P IH0 K\nGEOTROPISM  JH IY0 - AA1 - T R AH0 - P IH2 - Z AH0 M\nGEOWORKS  JH IY1 - OW0 - W ER0 K S\nGEPHARDT  G EH1 P - HH AA2 R T\nGEPHARDT'S  G EH1 P - HH AA2 R T S\nGEPHART  G EH1 P - HH AA0 R T\nGEPPERT  G EH1 - P ER0 T\nGERA  JH EH1 - R AH0\nGERACE  JH ER0 - AA1 - CH IY0\nGERACI  JH ER0 - AA1 - CH IY0\nGERAGHTY  JH EH1 - R AH0 - T IY0\nGERAIS  JH ER0 - EY1\nGERALD  JH EH1 - R AH0 L D\nGERALDI  JH EH0 - R AE1 L - D IY0\nGERALDI(2)  HH EH0 - R AE1 L - D IY0\nGERALDINA  JH ER0 - AA0 L - D IY1 - N AH0\nGERALDINE  JH EH0 - R AH0 L - D IY1 N\nGERALDO  JH ER0 - AA1 L - D OW0\nGERALDO(2)  HH ER0 - AA1 L - D OW0\nGERALDS  JH EH1 - R AH0 L D Z\nGERAN  JH EH1 - R AH0 N\nGERANIUM  JH ER0 - EY1 - N IY0 - AH0 M\nGERANIUMS  JH ER0 - EY1 - N IY0 - AH0 M Z\nGERARD  JH ER0 - AA1 R D\nGERARDI  JH ER0 - AA1 R - D IY0\nGERARDO  JH ER0 - AA1 R - D OW0\nGERASHCHENKO  G EH2 - AH0 - SH EY1 NG - K OW0\nGERASIMOV  JH ER0 - AE1 - S IH0 - M AA0 V\nGERASIMOV(2)  G ER0 - AE1 - S IH0 - M AA0 V\nGERBASI  JH ER0 - B AA1 - S IY0\nGERBER  G ER1 - B ER0\nGERBER'S  G ER1 - B ER0 Z\nGERBERDING  G ER1 - B ER0 - D IH0 NG\nGERBERT  G ER1 - B ER0 T\nGERBIG  G ER1 - B IH0 G\nGERBINO  JH ER0 - B IY1 - N OW0\nGERBRANDT  G ER1 - B R AE2 N T\nGERCHAS  G ER1 - CH AH0 Z\nGERCHAS(2)  G ER1 - SH AH0 Z\nGERD  G ER1 D\nGERDA  G ER1 - D AH0\nGERDEMAN  G ER1 D - M AH0 N\nGERDES  ZH ER1 D Z\nGERDES'  ZH ER1 D Z\nGERDING  G EH1 R - T IH0 NG\nGERDTS  JH ER1 D T S\nGERDTS(2)  JH ER1 T S\nGERE  JH IH1 R\nGERE(2)  G IH1 R\nGEREMIA  JH ER0 - IY1 - M IY0 - AH0\nGEREN  G IH1 - R AH0 N\nGERENA  JH ER0 - EH1 - N AH0\nGERETY  ZH EH1 - R IH0 - T IY0\nGERGEL  G ER1 - G AH0 L\nGERGELY  JH ER1 JH - L IY0\nGERGEN  G ER1 - G AH0 N\nGERGEN'S  G ER1 - G AH0 N Z\nGERGER  G ER1 - G ER0\nGERGRUDE  G ER1 - G R UW0 D\nGERHARD  G ER1 - HH AA2 R D\nGERHARDT  G ER1 - HH AA0 R T\nGERHART  G ER1 - HH AA0 R T\nGERHOLD  G ER1 - HH OW0 L D\nGERIATRIC  JH EH2 - R IY0 - AE1 - T R IH0 K\nGERIATRICIAN  JH EH2 - R IY0 - AH0 - T R IH1 - SH AH0 N\nGERIATRICIANS  JH EH2 - R IY0 - AH0 - T R IH1 - SH AH0 N Z\nGERIATRICS  JH EH2 - R IY0 - AE1 - T R IH0 K S\nGERICH  G EH1 - R IH0 K\nGERICKE  JH EH1 - R IH0 K\nGERIG  JH EH1 - R IH0 G\nGERING  G IH1 - R IH0 NG\nGERINGER  G EH1 - R IH0 N - JH ER0\nGERK  JH ER1 K\nGERKE  JH ER1 K\nGERKEN  G ER1 - K AH0 N\nGERKIN  JH ER1 - K IH0 N\nGERLACH  G ER1 - L AH0 K\nGERLEMAN  G AO1 - R AH0 L - M AH0 N\nGERLICH  G ER1 - L IH0 K\nGERLING  G ER1 - L IH0 NG\nGERLOCK  G ER1 - L AH0 K\nGERLOFF  G ER1 - L AO0 F\nGERM  JH ER1 M\nGERMAIN  JH ER0 - M EY1 N\nGERMAIN'S  JH ER0 - M EY1 N Z\nGERMAINE  ZH ER0 - M EY1 N\nGERMAN  JH ER1 - M AH0 N\nGERMAN'S  JH ER1 - M AH0 N Z\nGERMANE  JH ER0 - M EY1 N\nGERMANI  JH ER0 - M AA1 - N IY0\nGERMANIA  JH ER0 - M EY1 - N IY0 - AH0\nGERMANIC  JH ER0 - M AE1 - N IH0 K\nGERMANN  G ER1 - M AH0 N\nGERMANO  JH ER0 - M AA1 - N OW0\nGERMANS  JH ER1 - M AH0 N Z\nGERMANS'  JH ER1 - M AH0 N Z\nGERMANTOWN  JH ER1 - M AH0 N - T AW2 N\nGERMANY  JH ER1 - M AH0 - N IY0\nGERMANY'S  JH ER1 - M AH0 - N IY0 Z\nGERMANYS  JH ER1 - M AH0 - N IY0 Z\nGERME  JH ER1 M\nGERMER  JH ER1 - M ER0\nGERMICIDE  JH ER1 - M AH0 - S AY2 D\nGERMINATE  JH ER1 - M AH0 - N EY2 T\nGERMINATED  JH ER1 - M AH0 - N EY2 - T IH0 D\nGERMINATION  JH ER2 - M AH0 - N EY1 - SH AH0 N\nGERMISTON  JH ER1 - M AH0 - S T AA2 N\nGERMISTON'S  JH ER1 - M AH0 - S T AA2 N Z\nGERMOND  G ER1 - M AH0 N D\nGERMS  JH ER1 M Z\nGERNER  G ER1 - N ER0\nGERNERT  G ER1 - N ER0 T\nGERO  JH EH1 - R OW0\nGEROLD  G EH1 - R OW0 L D\nGEROME  G EH1 - R AH0 M\nGERON  JH EH1 - R AH0 N\nGERONIMO  JH AH0 - R AO1 - N IH0 - M OW2\nGERONTOLOGIST  JH EH2 - R AH0 N - T AA1 - L AH0 - JH IH0 S T\nGERONTOLOGY  JH EH2 - R AH0 N - T AA1 - L AH0 - JH IY0\nGEROUX  ZH ER0 - UW1\nGEROW  JH EH1 - R OW0\nGERRALD  JH EH1 - R AH0 L D\nGERRI  JH EH1 - R IY0\nGERRICK  JH EH1 - R IH0 K\nGERRIE  JH EH1 - R IY0\nGERRINGER  JH EH1 - R IH0 - NG ER0\nGERRISH  JH EH1 - R IH0 SH\nGERRIT  JH EH1 - R IH0 T\nGERRITS  JH EH1 - R IH0 T S\nGERRITSEN  G EH1 - R IH0 T - S AH0 N\nGERRITY  JH EH1 - R IH0 - T IY0\nGERRY  JH EH1 - R IY0\nGERRY'S  JH EH1 - R IY0 Z\nGERRYMANDER  JH EH1 - R IY0 - M AE2 N - D ER0\nGERRYMANDERED  JH EH2 - R IY0 - M AE1 N - D ER0 D\nGERRYMANDERING  JH EH2 - R IY0 - M AE1 N - D ER0 - IH0 NG\nGERRYMANDERS  JH EH1 - R IY0 - M AE2 N - D ER0 Z\nGERSCH  G ER1 SH\nGERSH  G ER1 SH\nGERSHMAN  G ER1 SH - M AH0 N\nGERSHON  G ER1 - SH AH0 N\nGERSHOWITZ  G ER1 - SH AH0 - W IH0 T S\nGERSHWIN  G ER1 SH - W IH0 N\nGERSHWIN'S  G ER1 SH - W IH0 N Z\nGERSKI  G ER1 S - K IY0\nGERSON  JH ER1 - S AH0 N\nGERSON(2)  G ER1 - S AH0 N\nGERST  G ER1 S T\nGERSTEIN  G ER1 - S T AY0 N\nGERSTEIN(2)  G ER1 - S T IY0 N\nGERSTEL  G ER1 - S T AH0 L\nGERSTEN  G ER1 - S T AH0 N\nGERSTENBERGER  G ER1 - S T AH0 N - B ER0 - G ER0\nGERSTENHABER  G ER1 - S T AH0 N - HH EY2 - B ER0\nGERSTER  G ER1 - S T ER0\nGERSTMAN  G ER1 S T - M AH0 N\nGERSTNER  G ER1 S T - N ER0\nGERSTNER'S  G ER1 S T - N ER0 Z\nGERSZEWSKI  G ER0 - SH EH1 F S - K IY0\nGERT  G ER1 T\nGERTH  G ER1 TH\nGERTIE  JH ER1 - T IY0\nGERTLER  G ER1 - T AH0 L - ER0\nGERTLER(2)  G ER1 T - L ER0\nGERTNER  G ER1 T - N ER0\nGERTRUD  G ER1 - T R UW0 D\nGERTRUDE  G ER1 - T R UW0 D\nGERTSCH  G ER1 CH\nGERTY  JH ER1 - T IY0\nGERTZ  G ER1 T S\nGERVAIS  ZH ER0 - V EY1\nGERVASE  G ER1 - V AH0 S\nGERVASI  JH ER0 - V AA1 - S IY0\nGERVASIO  JH ER0 - V AA1 - S IY0 - OW0\nGERWIG  G ER1 - W IH0 G\nGERWIN  G ER1 - W IH0 N\nGERY  JH EH1 - R IY0\nGESAMTMETALL  G EH0 - S AE1 M T - M EH2 - T AH0 L\nGESCHKE  G EH1 SH K\nGESCO  G EH1 S - K OW0\nGESELL  G EH1 - S AH0 L\nGESELL'S  G EH1 - S AH0 L Z\nGESELLSCHAFT  G AH0 - S EH1 L - SH AE0 F T\nGESKE  JH EH1 S K\nGESNER  G EH1 S - N ER0\nGESS  JH EH1 S\nGESSEL  G EH1 - S AH0 L\nGESSERT  G EH1 - S ER0 T\nGESSLER  G EH1 - S AH0 - L ER0\nGESSLER(2)  G EH1 S - L ER0\nGESSNER  G EH1 S - N ER0\nGEST  JH EH1 S T\nGESTAL  JH EH1 - S T AH0 L\nGESTAPO  G AH0 - S T AA1 - P OW0\nGESTATE  JH EH1 - S T EY2 T\nGESTATION  JH EH0 - S T EY1 - SH AH0 N\nGESTETNER  G AH0 - S T EH1 T - N ER0\nGESTURE  JH EH1 S - CH ER0\nGESTURED  JH EH1 S - CH ER0 D\nGESTURES  JH EH1 S - CH ER0 Z\nGESTURING  JH EH1 S - CH ER0 - IH0 NG\nGESUALDI  JH EH0 - S UW0 - AA1 L - D IY0\nGET  G EH1 T\nGET(2)  G IH1 T\nGET-TOGETHER  G EH1 T - T AH0 - G EH1 - DH ER0\nGET-TOGETHER(2)  G EH1 - T AH0 - G EH1 - DH ER0\nGET-TOGETHERS  G EH1 T - T AH0 - G EH1 - DH ER0 Z\nGET-TOGETHERS(2)  G EH1 - T AH0 - G EH1 - DH ER0 Z\nGET-WELL  G EH1 T - W EH1 L\nGET-WELL(2)  G EH1 T - HH W EH1 L\nGETAWAY  G EH1 T - AH0 - W EY2\nGETAWAYS  G EH1 T - AH0 - W EY2 Z\nGETCHELL  G EH1 - CH AH0 L\nGETER  G EH1 - T ER0\nGETHERS  G EH1 - DH ER0 Z\nGETMAN  G EH1 T - M AH0 N\nGETS  G EH1 T S\nGETS(2)  G IH1 T S\nGETSINGER  G EH1 T - S IH0 N - JH ER0\nGETTEL  G EH1 - T AH0 L\nGETTER  G EH1 - T ER0\nGETTERS  G EH1 - T ER0 Z\nGETTIN'  G IH1 - T AH0 N\nGETTING  G EH1 - T IH0 NG\nGETTING(2)  G IH1 - T IH0 NG\nGETTINGER  G EH1 - T IH0 - NG ER0\nGETTINGER(2)  G EH1 - T IH0 N - JH ER0\nGETTINGS  G EH1 - T IH0 NG Z\nGETTIS  G EH1 - T IH0 S\nGETTLE  G EH1 - T AH0 L\nGETTLER  G EH1 - T AH0 L - ER0\nGETTLER(2)  G EH1 T - L ER0\nGETTMAN  G EH1 T - M AH0 N\nGETTS  G EH1 T S\nGETTY  G EH1 - T IY0\nGETTY'S  G EH1 - T IY0 Z\nGETTYS  G EH1 - T IY0 Z\nGETTYSBURG  G EH1 - T IY0 Z - B ER0 G\nGETULIO  G AH0 - CH UW1 - L IY0 - OW0\nGETZ  G EH1 T S\nGEURIN  ZH ER0 - AE1 N\nGEURTS  ZH ER1 T S\nGEVA  G EY1 - V AH0\nGEVAERT  G AH0 - V EH1 R T\nGEVING  JH IY1 - V IH0 NG\nGEWIRTZ  G UW1 - ER0 T S\nGEYELIN  JH EY2 - IH1 - L IH0 N\nGEYER  G EY1 - ER0\nGEYSER  G AY1 - Z ER0\nGEYSERS  G AY1 - Z ER0 Z\nGFELLER  G AH0 - F EH1 - L ER0\nGHADA  G AA1 - D AH0\nGHADAFI  G AH0 - D AE1 - F IY0\nGHADAFI(2)  K AH0 - D AA1 - F IY0\nGHADAFI(3)  G AH0 - D AA1 - F IY0\nGHAFAR  G AH0 - F AA1 R\nGHAFAR(2)  G AO1 - F ER0\nGHALI  G AA1 - L IY0\nGHALI'S  G AA1 - L IY0 Z\nGHANA  G AE1 - N AH0\nGHANA'S  G AE1 - N AH0 Z\nGHANAIAN  G AH0 - N AY1 - AH0 N\nGHANAIANS  G AH0 - N AY1 - AH0 N Z\nGHANDI  G AA1 N - D IY0\nGHARBONIFAR  G AA0 R - B AA1 - N IH0 - F AA0 R\nGHASTLINESS  G AE1 S T - L IY0 - N AH0 S\nGHASTLY  G AE1 S T - L IY0\nGHATTAS  G AA1 - T AH2 S\nGHAZNAVI  G AH0 Z - N AA1 - V IY0\nGHEE  G IY1\nGHEEN  G IY1 N\nGHENT  G EH1 N T\nGHERARDI  G ER0 - AA1 R - D IY0\nGHERIG  G EH1 - R IH0 G\nGHERIG'S  G EH1 - R IH0 G Z\nGHERMAN  G ER1 - M AH0 N\nGHETTO  G EH1 - T OW0\nGHETTOS  G EH1 - T OW0 Z\nGHEZ  G EH1 Z\nGHEZZI  G EH1 - Z IY0\nGHIDELLA  G IH0 - D EH1 - L AH0\nGHIO  G AY1 - OW0\nGHOLAMREZA  G OW2 - L AH0 - M R EY1 - Z AH0\nGHOLSON  G OW1 L - S AH0 N\nGHOLSTON  G OW1 L - S T AH0 N\nGHORBANIFAR  G AO0 R - B AE1 - N IH0 - F AA0 R\nGHORBANIFAR(2)  G AO0 R - B AA1 - N IH0 - F AA0 R\nGHORBANIFAR(3)  G AO0 R - B AE1 - N IH0 - F ER0\nGHORBANIFAR(4)  G AO0 R - B AA1 - N IH0 - F ER0\nGHORMLEY  G AO1 R M - L IY0\nGHOSE  G OW1 Z\nGHOSH  G AA1 SH\nGHOST  G OW1 S T\nGHOSTBUSTER  G OW1 S T - B AH2 - S T ER0\nGHOSTBUSTERS  G OW1 S T - B AH2 - S T ER0 Z\nGHOSTLIKE  G OW1 S T - L AY2 K\nGHOSTLY  G OW1 S T - L IY0\nGHOSTS  G OW1 S T S\nGHOSTS(2)  G OW1 S S\nGHOSTS(3)  G OW1 S\nGHOULISH  G UW1 - L IH0 SH\nGHRIST  G R IH1 S T\nGHULAM  G Y UW1 - L AE0 M\nGHULOUM  G UW2 - L OW1 M\nGIA'S  JH IY1 - AH0 Z\nGIACALONE  JH AA1 - K AA0 - L OW0 - N IY0\nGIACCO  JH AA1 - K OW0\nGIACINTA  JH AA1 - CH IY0 N - T AH0\nGIACOBBE  JH AA1 - K OW0 - B IY0\nGIACOMELLI  JH AH0 - K OW0 - M EH1 - L IY0\nGIACOMETTI  JH AH0 - K AH0 - M EH1 - T IY0\nGIACOMINI  JH AH0 - K OW0 - M IY1 - N IY0\nGIACOMO  JH AA1 - K AH0 - M OW0\nGIACONDA  JH IY2 - AH0 - K AA1 N - D AH0\nGIACONDA'S  JH IY1 - AH0 - K AA1 N - D AH0 Z\nGIACONE  JH IY2 - AH0 - K OW1 - N IY0\nGIAIMO  JH EY1 - M OW0\nGIALANELLA  JH AH0 - L AA0 - N EH1 - L AH0\nGIAMATTI  JH IY2 - AH0 - M AA1 - T IY0\nGIAMBALVO  JH AA1 M - B AA0 L - V OW0\nGIAMBRA  JH AA1 M - B R AH0\nGIAMBRONE  JH AA1 M - B R OW0 - N IY0\nGIAMMALVA  JH IY2 - AH0 - M AO1 L - V AH0\nGIAMMARCO  JH AA1 - M AA0 R - K OW0\nGIAMMARINO  JH AH0 - M AA0 - R IY1 - N OW0\nGIAMPA  JH AA1 M - P AH0\nGIAMPAOLO  JH AA0 M - P AW1 - L OW0\nGIAMPAPA  JH AA0 M - P AA1 - P AH0\nGIAMPIETRO  JH AA1 M - P IY0 - T R OW0\nGIAN  JH IY1 - AA0 N\nGIANCANA  JH IY0 - AH0 - K AA1 - N AH0\nGIANCARLO  JH IY2 - AE0 NG - K AA1 R - L OW0\nGIANCOLA  JH AA1 NG - K OW0 - L AH0\nGIANELLI  JH AH0 - N EH1 - L IY0\nGIANFRANCESCO  JH AA2 N - F R AE0 N - CH EH1 - S K OW0\nGIANFRANCO  JH AH0 N - F R AA1 N - K OW0\nGIANFRANCO(2)  JH IY1 - AH0 N - F R AE1 N - K OW0\nGIANG  JH IY0 - AA1 NG\nGIANG(2)  JH AA1 NG\nGIANGRANDE  JH AA1 N - G R AE0 N - D IY0\nGIANINI  JH AH0 - N IY1 - N IY0\nGIANINO  JH AH0 - N IY1 - N OW0\nGIANNATTASIO  JH AA1 - N AA0 - T AA0 - S IY0 - OW0\nGIANNELLI  JH AH0 - N EH1 - L IY0\nGIANNETTI  JH AH0 - N EH1 - T IY0\nGIANNETTO  JH AH0 - N EH1 - T OW0\nGIANNI  JH AA1 - N IY0\nGIANNI(2)  JH IY0 - AA1 - N IY0\nGIANNI(3)  JH Y AA1 - N IY0\nGIANNINI  JH AH0 - N IY1 - N IY0\nGIANNINO  JH IY2 - AH0 - N IY1 - N OW0\nGIANNOLA  JH AA1 - N OW0 - L AH0\nGIANNONE  JH AA1 - N OW0 - N IY0\nGIANNOTTI  JH AA1 - N OW0 - T IY0\nGIANOTTI  JH AA1 - N OW0 - T IY0\nGIANT  JH AY1 - AH0 N T\nGIANT'S  JH AY1 - AH0 N T S\nGIANTS  JH AY1 - AH0 N T S\nGIANTS'  JH AY1 - AH0 N T S\nGIAP  JH IY0 - AE1 P\nGIAP(2)  JH Y AE1 P\nGIAQUINTO  JH AA1 K - W IY0 N - T OW0\nGIARD  JH IY0 - AA1 R D\nGIARD(2)  JH AA1 R D\nGIARDINA  JH AA1 R - D IY0 - N AH0\nGIARDINI  JH ER0 - D IY1 - N IY0\nGIARDINO  JH ER0 - D IY1 - N OW0\nGIARRATANO  JH AA2 - R AH0 - T AA1 - N OW0\nGIARRUSSO  JH AA0 - R UW1 - S OW0\nGIB  G IH1 B\nGIBAS  JH AY1 - B AH0 Z\nGIBB  JH IH1 B\nGIBB'S  G IH1 B Z\nGIBBARD  ZH IH0 - B AA1 R D\nGIBBENS  G IH1 - B AH0 N Z\nGIBBERISH  G IH1 - B ER0 - IH0 SH\nGIBBINS  JH IH1 - B IH0 N Z\nGIBBLE  JH IH1 - B AH0 L\nGIBBON  G IH1 - B AH0 N\nGIBBONEY  JH IH1 - B AH0 - N IY0\nGIBBONS  G IH1 - B IH0 N Z\nGIBBS  G IH1 B Z\nGIBBS'S  G IH1 B - Z IH0 Z\nGIBBY  JH IH1 - B IY0\nGIBE  JH AY1 B\nGIBEAU  ZH IH0 - B OW1\nGIBEAULT  ZH IH0 - B OW1\nGIBERSON  JH IH1 - B ER0 - S AH0 N\nGIBERT  G IH1 - B ER0 T\nGIBIAN  G IH1 - B IY0 - AH0 N\nGIBIAN'S  G IH1 - B IY0 - AH0 N Z\nGIBLEN  G IH1 - B L AH0 N\nGIBLER  JH IH1 - B AH0 L - ER0\nGIBLER(2)  JH IH1 - B L ER0\nGIBLET  JH IH1 - B L AH0 T\nGIBLIN  JH IH1 - B L IH0 N\nGIBNEY  JH IH1 B - N IY0\nGIBONEY  JH IH1 - B AH0 - N IY0\nGIBRALTAR  JH IH0 - B R AO1 L - T ER0\nGIBSON  G IH1 B - S AH0 N\nGIBSON'S  G IH1 B - S AH0 N Z\nGICK  JH IH1 K\nGIDCUMB  G IH1 D - K AH0 M\nGIDDENS  G IH1 - D AH0 N Z\nGIDDINGS  G IH1 - D IH0 NG Z\nGIDDY  G IH1 - D IY0\nGIDEL  G AY1 - D EH2 L\nGIDEON  G IH1 - D IY0 - AH0 N\nGIDGET  G IH1 - JH AH0 T\nGIDLEY  G IH1 D - L IY0\nGIDNEY  G IH1 D - N IY0\nGIDWITZ  G IH1 D - W IH0 T S\nGIEBEL  G IY1 - B AH0 L\nGIEBLER  G IY1 - B AH0 L - ER0\nGIEBLER(2)  G IY1 - B L ER0\nGIECK  JH IY1 K\nGIEFER  G IY1 - F ER0\nGIEGER  G IY1 - G ER0\nGIEGERICH  G IY1 - G ER0 - IH0 K\nGIEL  JH IY1 L\nGIELGUD  G IY1 L - G AH0 D\nGIELOW  JH IY1 - L OW0\nGIENGER  G IY1 N - JH ER0\nGIENOW  G IY1 - N AW0\nGIER  JH IH1 R\nGIERE  JH IH1 R\nGIERHART  G IH1 R - HH AA0 R T\nGIERKE  JH IH1 R K\nGIERMAN  G IH1 R - M AH0 N\nGIERSCH  G IH1 R SH\nGIES  G IY1 Z\nGIESBRECHT  G IY1 S - B R IH0 K T\nGIESE  JH IY1 S\nGIESECKE  G IY1 - S IH0 K\nGIESEKE  G IY1 - S IH0 K\nGIESELER  G IY1 - S AH0 - L ER0\nGIESELMAN  G IY1 - S AH0 L - M AH0 N\nGIESEN  G IY1 - S AH0 N\nGIESER  G IY1 - S ER0\nGIESEY  JH IY1 - S IY0\nGIESKE  JH IY1 S K\nGIESLER  G IY1 - S AH0 - L ER0\nGIESLER(2)  G IY1 S - L ER0\nGIESSEN  G IY1 Z - S AH0 N\nGIETZEN  G IY1 T - Z AH0 N\nGIFF  G IH1 F\nGIFFARD  G IH1 - F ER0 D\nGIFFEN  G IH1 - F AH0 N\nGIFFERD  G IH1 - F ER0 D\nGIFFIN  G IH1 - F IH0 N\nGIFFORD  G IH1 - F ER0 D\nGIFFORD'S  G IH1 - F ER0 D Z\nGIFFORDS  G IH1 - F ER0 D Z\nGIFFY  G IH1 - F IY0\nGIFT  G IH1 F T\nGIFTED  G IH1 F - T AH0 D\nGIFTED(2)  G IH1 F - T IH0 D\nGIFTING  G IH1 F - T IH0 NG\nGIFTRUST  G IH1 F - T R AH2 S T\nGIFTS  G IH1 F T S\nGIFTS(2)  G IH1 F S\nGIFTWARE  G IH1 F T - W EH2 R\nGIG  G IH1 G\nGIGABYTE  G IH1 - G AH0 - B AY2 T\nGIGABYTES  G IH1 - G AH0 - B AY2 T S\nGIGAFLOP  G IH1 - G AH0 - F L AA2 P\nGIGAFLOPS  G IH1 - G AH0 - F L AA2 P S\nGIGANTE  JH IY0 - G AA1 N - T IY0\nGIGANTIC  JH AY0 - G AE1 N - T IH0 K\nGIGANTIC(2)  JH AY0 - G AE1 - N IH0 K\nGIGER  G AY1 - G ER0\nGIGGING  G IH1 - G IH0 NG\nGIGGLE  G IH1 - G AH0 L\nGIGGLED  G IH1 - G AH0 L D\nGIGGLES  G IH1 - G AH0 L Z\nGIGGLING  G IH1 - G AH0 L - IH0 NG\nGIGGLING(2)  G IH1 - G L IH0 NG\nGIGGLY  G IH1 - G AH0 - L IY0\nGIGI  JH IY1 - JH IY0\nGIGLIA  JH IY1 G - L IY0 - AH0\nGIGLIO  JH IH1 G - L IY0 - OW0\nGIGLIOTTI  JH IY0 G - L IY0 - OW1 - T IY0\nGIGNAC  G IH1 G - N AH0 K\nGIGNOUX  G IH0 - N UW1\nGIGOT  JH IH1 - G AH0 T\nGIGOT'S  JH IH1 - G AH0 T S\nGIGS  G IH1 G Z\nGIGUERE  JH IY0 - G EH1 - R EY0\nGIKAS  G AY1 - K AH0 Z\nGIL  G IH1 L\nGILARDI  JH IY0 - L AA1 R - D IY0\nGILB  G IH1 L B\nGILBERG  G IH1 L - B ER0 G\nGILBERT  G IH1 L - B ER0 T\nGILBERT'S  G IH1 L - B ER0 T S\nGILBERTA  JH IY0 L - B EH1 R - T AH0\nGILBERTE  G IH1 L - B ER0 T\nGILBERTI  JH IY0 L - B EH1 R - T IY0\nGILBERTINA  JH IY0 L - B ER0 - T IY1 - N AH0\nGILBERTINE  JH IY0 L - B ER0 - T IY1 - N IY0\nGILBERTO  G IH0 L - B EH1 R - T OW2\nGILBERTO(2)  G IH0 L - B ER1 - T OW0\nGILBERTSON  G IH1 L - B ER0 T - S AH0 N\nGILBEY  G IH1 L - B IY0\nGILBO  JH IY1 L - B OW0\nGILBOY  G IH1 L - B OY0\nGILBREATH  G IH1 L - B R EH2 TH\nGILBRETH  G IH1 L - B R IH0 TH\nGILBRIDE  G IH1 L - B R AY2 D\nGILBY  G IH1 L - B IY0\nGILCHREST  G IH1 L - K ER0 - IH0 S T\nGILCHRIST  G IH1 L - K R IH0 S T\nGILCREASE  G IH0 L - K R IY1 S\nGILCREST  G IH1 L - K ER0 - IH0 S T\nGILCREST(2)  G IH1 L - K R EH0 S T\nGILD  G IH1 L D\nGILDA  G IH1 L - D AH0\nGILDAY  G IH1 L - D EY2\nGILDEA  JH IY1 L - D IY0 - AH0\nGILDED  G IH1 L - D IH0 D\nGILDEN  G IH1 L - D AH0 N\nGILDER  G IH1 L - D ER0\nGILDER'S  G IH1 L - D ER0 Z\nGILDERSLEEVE  G IH1 L - D ER0 - S L IY2 V\nGILDING  G IH1 L - D IH0 NG\nGILDNER  G IH1 L D - N ER0\nGILDON  G IH1 L - D AH0 N\nGILE  G AY1 L\nGILEAD  G IH0 - L IY1 D\nGILES  JH AY1 L Z\nGILFILLAN  G IH2 L - F IH1 - L AH0 N\nGILFORD  G IH1 L - F ER0 D\nGILGER  G IH1 L - G ER0\nGILGIT  G IH1 L - JH IH0 T\nGILGORE  G IH2 L - G AO1 R\nGILHAM  G IH1 L - HH AH0 M\nGILHOOLY  G IH1 L - HH UW0 - L IY0\nGILKERSON  G IH1 L - K ER0 - S AH0 N\nGILKES  G IH1 L K S\nGILKESON  G IH1 L - K IH0 - S AH0 N\nGILKEY  G IH1 L - K IY0\nGILKISON  G IH1 L - K IH0 - S AH0 N\nGILKISONS  G IH1 L - K IH0 - S AH0 N Z\nGILL  G IH1 L\nGILL'S  G IH1 L Z\nGILLAM  G IH1 - L AH0 M\nGILLAN  G IH1 - L AH0 N\nGILLAND  G IH1 - L AH0 N D\nGILLARD  ZH IH0 - L AA1 R D\nGILLASPIE  G IH1 - L AH0 - S P IY0\nGILLASPY  G IH1 - L AH0 - S P IY0\nGILLE  G AY1 L\nGILLEAN  G IH1 - L AH0 N\nGILLELAND  G IH1 - L IH0 - L AE0 N D\nGILLEM  G IH1 - L IH0 M\nGILLEN  G IH1 - L AH0 N\nGILLEN'S  G IH1 - L AH0 N Z\nGILLENTINE  G IH1 - L AH0 N - T AY2 N\nGILLER  G IH1 - L ER0\nGILLERAN  G IH1 - L ER0 - AE0 N\nGILLERS  G IH1 - L ER0 Z\nGILLES  ZH IY1 L\nGILLESPIE  G AH0 - L EH1 - S P IY0\nGILLET  G IH1 - L IH0 T\nGILLETT  JH IH0 - L IH1 T\nGILLETTE  JH IH0 - L EH1 T\nGILLETTE'S  JH IH0 - L EH1 T S\nGILLEY  G IH1 - L IY0\nGILLHAM  G IH1 L - HH AH0 M\nGILLIAM  G IH1 - L IY0 - AH0 M\nGILLIAN  JH IH1 - L IY0 - AH0 N\nGILLIAND  G IH1 - L IY0 - AH0 N D\nGILLIARD  G IH1 - L IY0 - ER0 D\nGILLIATT  G IH1 - L IY0 - AE0 T\nGILLICK  G IH1 - L IH0 K\nGILLIE  G IH1 - L IY0\nGILLIES  G IH1 - L IY0 Z\nGILLIG  G IH1 - L IH0 G\nGILLIGAN  G IH1 - L AH0 - G AH0 N\nGILLIGAN'S  G IH1 - L AH0 - G AH0 N Z\nGILLIHAN  G IH1 - L AH0 - HH AE0 N\nGILLIKIN  G IH1 - L AH0 - K AH0 N\nGILLILAN  G IH1 - L AH0 - L AH0 N\nGILLILAND  G IH1 - L AH0 - L AH0 N D\nGILLIN  G IH1 - L IH0 N\nGILLINGHAM  G IH1 - L IH0 NG - HH AE2 M\nGILLINGS  G IH1 - L IH0 NG Z\nGILLINOV  G IH1 - L IH0 - N AA0 V\nGILLINS  G IH1 - L IH0 N Z\nGILLIS  G IH1 - L IH0 S\nGILLISON  G IH1 - L IH0 - S AH0 N\nGILLISPIE  G AH0 - L EH1 - S P IY0\nGILLMAN  G IH1 L - M AH0 N\nGILLMORE  JH IY1 L - M AO0 R\nGILLOCK  G IH1 - L AH0 K\nGILLOGLY  G IH1 - L AH0 G - L IY0\nGILLON  G IH1 - L AH0 N\nGILLOOLY  G IH1 - L UW0 - L IY0\nGILLOOLY'S  G IH1 - L UW0 - L IY0 Z\nGILLOTT  G IH1 - L AH0 T\nGILLOTTI  JH IY0 - L OW1 - T IY0\nGILLS  G IH1 L Z\nGILLSON  G IH1 L - S AH0 N\nGILLUM  G IH1 - L AH0 M\nGILLY  G IH1 - L IY0\nGILMAN  G IH1 L - M AH0 N\nGILMARTIN  G IH0 L - M AA1 R - T IH0 N\nGILMER  G IH1 L - M ER0\nGILMORE  G IH1 L - M AO0 R\nGILMOUR  ZH IH0 L - M UH1 R\nGILPATRICK  G IH1 L - P AH0 - T R IH0 K\nGILPATRICK(2)  G IH0 L - P AE1 - T R IH0 K\nGILPIN  G IH1 L - P IH0 N\nGILREATH  G IH1 L - R EH0 TH\nGILROY  G IH1 L - R OY2\nGILSDORF  G IH1 L S - D AO0 R F\nGILSON  G IH1 L - S AH0 N\nGILSTRAP  G IH1 L - S T R AH0 P\nGILT  G IH1 L T\nGILTNER  G IH1 L T - N ER0\nGILTS  G IH1 L T S\nGILVIN  G IH1 L - V IH0 N\nGILYARD  ZH AH0 L - Y AA1 R D\nGIMBEL  G IH1 M - B AH0 L\nGIMENEZ  JH IY0 - M EY1 - N EH0 Z\nGIMLIN  G IH1 M - L IH0 N\nGIMME  G IH1 - M IY0\nGIMMICK  G IH1 - M IH0 K\nGIMMICKRY  G IH1 - M IH0 - K R IY0\nGIMMICKS  G IH1 - M IH0 K S\nGIMMICKY  G IH0 - M IH1 - K IY0\nGIMPEL  G IH1 M - P AH0 L\nGIN  JH IH1 N\nGINA  JH IY1 - N AH0\nGINA'S  JH IY1 - N AH0 Z\nGINANDJAR  JH IH0 - N AE1 N - JH ER0\nGINAS  JH IY1 - N AH0 Z\nGINDER  G AY1 N - D ER0\nGINDIN  G IH1 N - D IH0 N\nGINDLESPERGER  G IH1 N - D AH0 L - S P ER0 - G ER0\nGINES  JH AY1 N Z\nGINEVRA  JH IH0 - N EH1 - V R AH0\nGING  JH IH1 NG\nGINGELL  G IH1 NG - G AH0 L\nGINGER  JH IH1 N - JH ER0\nGINGERBREAD  JH IH1 N - JH ER0 - B R EH2 D\nGINGERICH  G IH1 NG - G ER0 - IH0 K\nGINGERLY  JH IH1 N - JH ER0 - L IY0\nGINGERY  JH IH1 N - JH ER0 - IY0\nGINGHAM  G IH1 - NG AH0 M\nGINGHAMS  G IH1 - NG AH0 M Z\nGINGLES  JH IH1 NG - G AH0 L Z\nGINGOLD  JH IH1 N - G OW2 L D\nGINGOLD(2)  G IH1 N - G OW2 L D\nGINGRAS  G IH1 NG - G R AH0 Z\nGINGRICH  G IH1 NG - G R IH0 CH\nGINGRICH'S  G IH1 NG - G R IH0 - CH IH0 Z\nGINGRICHES  G IH1 NG - G R IH0 - CH IH0 Z\nGINLEY  JH IH1 N - L IY0\nGINN  JH IH1 N\nGINNED  JH IH1 N D\nGINNELL  JH IH0 - N EH1 L\nGINNIE  JH IH1 - N IY0\nGINNING  JH IH1 - N IH0 NG\nGINNY  JH IH1 - N IY0\nGINO  JH IY1 - N OW0\nGINOCCHIO  JH IY0 - N OW1 - K IY0 - OW0\nGINSBERG  G IH1 N S - B ER0 G\nGINSBURG  G IH1 N Z - B ER0 G\nGINSBURG'S  G IH1 N Z - B ER0 G Z\nGINSENG  JH IH1 N - S EH2 NG\nGINSU  G IH1 N - S UW0\nGINSU'S  G IH1 N - S UW0 Z\nGINTEL  JH IH1 N - T EH2 L\nGINTER  G IH1 N - T ER0\nGINTHER  G IH1 N - DH ER0\nGINTING  JH IH1 N - T IH1 NG\nGINTY  JH IH1 N - T IY0\nGINTZ  G IH1 N T S\nGINYARD  JH IH1 N - Y AA2 R D\nGINZA  G IH1 N - Z AH0\nGINZBERG  G IH1 N Z - B ER0 G\nGIOIA  JH OW1 - Y AH0\nGIONET  JH IY0 - OW1 - N EY0 T\nGIONFRIDDO  JH OW0 N - F R IY1 - D OW0\nGIORDANI  JH AO0 R - D AA1 - N IY0\nGIORDANO  JH AO0 R - D AA1 - N OW0\nGIORGI  JH AO1 R - JH IY0\nGIORGIA  JH AO1 R - JH AH0\nGIORGIO  JH AO1 R - JH IY0 - OW0\nGIOVANELLI  JH OW0 - V AA0 - N EH1 - L IY0\nGIOVANETTI  JH OW0 - V AA0 - N EH1 - T IY0\nGIOVANNETTI  JH OW0 - V AA0 - N EH1 - T IY0\nGIOVANNI  JH IY2 - OW0 - V AA1 - N IY0\nGIOVANNI'S  JH IY2 - OW0 - V AA1 - N IY0 Z\nGIOVANNI'S(2)  JH AH0 - V AA1 - N IY0 Z\nGIOVANNI(2)  JH AH0 - V AA1 - N IY0\nGIOVANNIELLO  JH OW0 - V AA2 - N IY0 - EH1 - L OW0\nGIOVANNINI  JH OW0 - V AA0 - N IY1 - N IY0\nGIOVANNONI  JH OW0 - V AA0 - N OW1 - N IY0\nGIOVENCO  JH OW0 - V EH1 N - K OW0\nGIOVINAZZO  JH OW0 - V IY0 - N AA1 - Z OW0\nGIPE  JH AY1 P\nGIPP  JH IH1 P\nGIPPER  G IH1 - P ER0\nGIPPLE  JH IH1 - P AH0 L\nGIPSON  G IY1 P - S AH0 N\nGIRAFFE  JH ER0 - AE1 F\nGIRAFFES  JH ER0 - AE1 F S\nGIRALDO  JH IH0 - R AA1 L - D OW0\nGIRARD  JH ER0 - AA1 R D\nGIRARDI  JH IH0 - R AA1 R - D IY0\nGIRARDIN  ZH AO1 - R AA0 R - D AE0 N\nGIRARDOT  ZH AO1 - R AA0 R - D OW0\nGIRAUD  ZH AY0 - R OW1\nGIRD  G ER1 D\nGIRDER  G ER1 - D ER0\nGIRDERS  G ER1 - D ER0 Z\nGIRDING  G ER1 - D IH0 NG\nGIRDLE  G ER1 - D AH0 L\nGIRDLER  G ER1 - D AH0 L - ER0\nGIRDLER(2)  G ER1 D - L ER0\nGIRDLEY  G ER1 D - L IY0\nGIRDNER  G ER1 D - N ER0\nGIRDS  G ER1 D Z\nGIRE  G AY1 R\nGIREN  G IH1 - R AH0 N\nGIREN(2)  JH IH1 - R AH0 N\nGIRGENTI  JH IH0 R - JH EH1 N - T IY0\nGIRGIS  G ER1 - G IH0 S\nGIRIJA  G IH2 - R IY1 - JH AH0\nGIRL  G ER1 L\nGIRL'S  G ER1 L Z\nGIRLFRIEND  G ER1 L - F R EH2 N D\nGIRLFRIEND'S  G ER1 L - F R EH2 N D Z\nGIRLFRIENDS  G ER1 L - F R EH2 N D Z\nGIRLHOOD  G ER1 L - HH UH2 D\nGIRLIE  G ER1 - L IY0\nGIRLISH  G ER1 - L IH0 SH\nGIRLISHLY  G ER1 - L IH0 SH - L IY0\nGIRLS  G ER1 L Z\nGIRLS'  G ER1 L Z\nGIROBANK  G IH1 - R OW0 - B AE2 NG K\nGIROD  ZH ER0 - AA1 D\nGIROIR  ZH AY0 R - W AA1 R\nGIROLAMO  JH IH0 - R OW0 - L AA1 - M OW0\nGIROLDI  G IH0 - R OW1 L - D IY0\nGIROLDI'S  G IH0 - R OW1 L - D IY0 Z\nGIRON  G AO1 - R AH0 N\nGIROUARD  ZH AY1 - R UW0 - ER0 D\nGIROUX  G IH0 - R UW1\nGIROZENTRALE  G IH0 - R OW1 - Z AH0 N - T R AA2 L\nGIRSKY  G ER1 S - K IY0\nGIRT  G ER1 T\nGIRTEN  G ER1 - T AH0 N\nGIRTH  G ER1 TH\nGIRTMAN  G ER1 T - M AH0 N\nGIRTON  G ER1 - T AH0 N\nGIRVAN  G ER1 - V AH0 N\nGIRVEN  G ER1 - V AH0 N\nGIRVIN  G ER1 - V IH0 N\nGISBERT  JH IH1 S - B ER0 T\nGISBERT(2)  G IH1 S - B ER0 T\nGISCARD  G IH0 S - K AA1 R D\nGISCARD(2)  ZH IH0 S - K AA1 R\nGISCLAIR  ZH IH0 S - K L EH1 R\nGISELA  G IY1 - Z AH0 - L AH0\nGISELLA  JH IH0 - S EH1 - L AH0\nGISELLE  ZH IH0 - S EH1 L\nGISENYI  JH IH0 - S EH1 - N IY0\nGISENYI(2)  JH IH0 - S EH1 - N Y IY0\nGISH  JH IH1 SH\nGISH(2)  G IH1 SH\nGISI  JH IY1 - S IY0\nGISLER  G IH1 - S AH0 - L ER0\nGISLER(2)  G IH1 S - L ER0\nGISMONDI  JH IY0 S - M OW1 N - D IY0\nGISSENDANNER  G IH1 - S IH0 N - D AH0 N - ER0\nGISSI  G IH1 - S IY0\nGIST  JH IH1 S T\nGITANA  JH IY0 - T AE1 - N AH0\nGITANO  G IH0 - T AA1 - N OW0\nGITANO'S  G IH0 - T AA1 - N OW0 Z\nGITCHELL  JH IH1 - CH AH0 L\nGITHA  JH IH1 - DH AH0\nGITHENS  G IH1 - TH AH0 N Z\nGITLIN  JH IH1 T - L IH0 N\nGITTELMAN  G IH1 - T AH0 L - M AH0 N\nGITTENS  G IH1 - T AH0 N Z\nGITTER  G IH1 - T ER0\nGITTINGS  JH IH1 - T IH0 NG Z\nGITTINS  JH IH1 - T IH0 N Z\nGITTIS  JH IH1 - T AH0 S\nGITTIS(2)  G IH1 - T IH0 S\nGITTLEMAN  G IH1 - T AH0 L - M AH0 N\nGITTLEMAN'S  G IH1 - T AH0 L - M AH0 N Z\nGITTLER  G IH1 T - L ER0\nGITTO  JH IY1 - T OW0\nGIUDICE  JH UW1 - D IH0 - S IY0\nGIUDICI  JH UW1 - D IH0 - CH IY0\nGIUFFRE  JH UW1 - F R IY0\nGIUFFRE'S  JH UW1 - F R IY0 Z\nGIUFFRIDA  JH UW1 - F R IY0 - D AH0\nGIULIANI  JH UW2 - L IY0 - AA1 - N IY0\nGIULIANI'S  JH UW2 - L IY0 - AA1 - N IY0 Z\nGIULIANO  JH UW2 - L IY0 - AA1 - N OW0\nGIULIO  JH UW1 - L IY0 - OW0\nGIUNTA  JH UW1 N - T AH0\nGIURESCU  JH UW2 - R EH1 - S K UW0\nGIUSEPPE  JH IH0 - S EH1 - P IY0\nGIUSTI  JH UW1 - S T IY0\nGIUSTO  JH UW1 - S T OW0\nGIVAN  G IH1 - V AH0 N\nGIVE  G IH1 V\nGIVEAWAY  G IH1 - V AH0 - W EY2\nGIVEAWAYS  G IH1 - V AH0 - W EY2 Z\nGIVEBACK  G IH1 V - B AE2 K\nGIVEBACKS  G IH1 V - B AE2 K S\nGIVEN  G IH1 - V AH0 N\nGIVEN(2)  G IH1 - V IH0 N\nGIVENCHY  G IH0 - V EH1 N - CH IY0\nGIVENNESS  G IH1 - V AH0 - N AH0 S\nGIVENS  G IH1 - V AH0 N Z\nGIVENS'S  G IH1 - V AH0 N - Z IH0 Z\nGIVER  G IH1 - V ER0\nGIVERS  G IH1 - V ER0 Z\nGIVES  G IH1 V Z\nGIVETH  G IH1 - V EH0 TH\nGIVHAN  G IH1 V - HH AH0 N\nGIVIN'  G IH1 - V IH0 N\nGIVING  G IH1 - V IH0 NG\nGIVINS  G IH1 - V IH0 N Z\nGIVLER  G IH1 V - L ER0\nGIZA  G IH1 - Z AH0\nGIZA(2)  G IY1 - Z AH0\nGIZBERT  G IH1 Z - B ER0 T\nGIZBERT'S  G IH1 Z - B ER0 T S\nGIZMO  G IH1 Z - M OW2\nGIZMOS  G IH1 Z - M OW0 Z\nGIZZARD  G IH1 - Z ER0 D\nGIZZI  JH IY1 T - S IY0\nGJELTEN  JH EH1 L - T AH0 N\nGJELTEN'S  JH EH1 L - T AH0 N Z\nGJERDE  JH ER1 D\nGLAAB  G L AA1 B\nGLAB  G L AE1 B\nGLACE  G L EY1 S\nGLACIAL  G L EY1 - SH AH0 L\nGLACIATE  G L EY1 - SH IY0 - EY2 T\nGLACIATE(2)  G L EY1 - S IY0 - EY2 T\nGLACIATED  G L EY1 - SH IY0 - EY2 - T AH0 D\nGLACIATED(2)  G L EY1 - S IY0 - EY2 - T AH0 D\nGLACIATION  G L EY2 - SH IY0 - EY1 - SH AH0 N\nGLACIER  G L EY1 - SH ER0\nGLACIER'S  G L EY1 - SH ER0 Z\nGLACIERS  G L EY1 - SH ER0 Z\nGLACIS  G L EY1 - S AH0 S\nGLACKEN  G L AE1 - K AH0 N\nGLACKIN  G L AE1 - K IH0 N\nGLAD  G L AE1 D\nGLADD  G L AE1 D\nGLADDEN  G L AE1 - D AH0 N\nGLADDING  G L AE1 - D IH0 NG\nGLADDOCK  G L AE1 - D AH0 K\nGLADE  G L EY1 D\nGLADES  G L EY1 D Z\nGLADFELTER  G L AE1 D - F EH2 L - T ER0\nGLADHILL  G L AE1 D - HH IH2 L\nGLADIATOR  G L AE1 - D IY0 - EY2 - T ER0\nGLADIATORS  G L AE1 - D IY0 - EY2 - T ER0 Z\nGLADIEUX  G L AE1 - D IY0 - OW0\nGLADIOLUS  G L AE2 - D IY0 - OW1 - L AH0 S\nGLADIS  G L AE1 - D IH0 S\nGLADISH  G L AE1 - D IH0 SH\nGLADJE  G L AE1 D - JH IY2\nGLADLY  G L AE1 D - L IY0\nGLADMAN  G L AE1 D - M AH0 N\nGLADNEY  G L AE1 D - N IY0\nGLADSON  G L AE1 D - S AH0 N\nGLADSTEIN  G L AE1 D - S T AY2 N\nGLADSTEIN(2)  G L AE1 D - S T IY2 N\nGLADSTONE  G L AE1 D - S T OW2 N\nGLADSTONES  G L AE1 D - S T OW2 N Z\nGLADU  G L EY1 - D UW0\nGLADWELL  G L AE1 D - W EH2 L\nGLADWIN  G L AE1 D - W IH0 N\nGLADYS  G L AE1 - D IH0 S\nGLAESER  G L EY1 - Z ER0\nGLAHN  G L AE1 N\nGLAMOR  G L AE1 - M ER0\nGLAMORIZE  G L AE1 - M ER0 - AY2 Z\nGLAMORIZED  G L AE1 - M ER0 - AY0 Z D\nGLAMORIZING  G L AE1 - M ER0 - AY0 - Z IH0 NG\nGLAMOROUS  G L AE1 - M ER0 - AH0 S\nGLAMOUR  G L AE1 - M ER0\nGLANCE  G L AE1 N S\nGLANCED  G L AE1 N S T\nGLANCES  G L AE1 N - S IH0 Z\nGLANCING  G L AE1 N - S IH0 NG\nGLANCY  G L AE1 N - S IY0\nGLAND  G L AE1 N D\nGLANDER  G L AE1 N - D ER0\nGLANDON  G L AE1 N - D AH0 N\nGLANDS  G L AE1 N D Z\nGLANDULAR  G L AE1 N - JH AH0 - L ER0\nGLANTON  G L AE1 N - T AH0 N\nGLANTZ  G L AE1 N T S\nGLANVILLE  G L AE1 N - V IH2 L\nGLANZ  G L AE1 N Z\nGLANZER  G L AE1 N - Z ER0\nGLANZMAN  G L AE1 N Z - M AH0 N\nGLARE  G L EH1 R\nGLARED  G L EH1 R D\nGLARES  G L EH1 R Z\nGLARING  G L EH1 - R IH0 NG\nGLARIS  G L EH1 - R IH0 S\nGLAS  G L AE1 S\nGLASBY  G L AE1 S - B IY0\nGLASCO  G L AA1 - S K OW0\nGLASCOCK  G L AE1 S - K AH0 K\nGLASCOE  G L AE1 - S K OW0\nGLASER  G L EY1 - Z ER0\nGLASGOW  G L AE1 - S K OW2\nGLASGOW(2)  G L AE1 S - G OW2\nGLASHEEN  G L AH0 - SH IY1 N\nGLASHOW  G L AE1 - SH AW0\nGLASNER  G L AE1 S - N ER0\nGLASNOST  G L AE1 S - N AA0 S T\nGLASNOST(2)  G L AO1 S T - N OW2 S T\nGLASNOST(3)  G L AO1 S - N OW2 S T\nGLASOW  G L EY1 - Z OW0\nGLASPER  G L AE1 - S P ER0\nGLASPIE  G L AE1 - S P IY0\nGLASPY  G L AE1 - S P IY0\nGLASS  G L AE1 S\nGLASS'S  G L AE1 - S IH0 Z\nGLASSBERG  G L AE1 S - B ER0 G\nGLASSBLOWER  G L AE1 S - B L OW2 - ER0\nGLASSBLOWERS  G L AE1 S - B L OW2 - ER0 Z\nGLASSBLOWING  G L AE1 S - B L OW2 - IH0 NG\nGLASSBURN  G L AE1 S - B ER2 N\nGLASSCO  G L AE1 - S K OW0\nGLASSCOCK  G L AE1 S - K AA2 K\nGLASSED  G L AE1 S T\nGLASSER  G L AE1 - S ER0\nGLASSES  G L AE1 - S AH0 Z\nGLASSES(2)  G L AE1 - S IH0 Z\nGLASSEY  G L AE1 - S IY0\nGLASSFORD  G L AE1 S - F AO0 R D\nGLASSLIKE  G L AE1 S - L AY2 K\nGLASSMAKER  G L AE1 S - M EY2 - K ER0\nGLASSMAKING  G L AE1 S - M EY2 - K IH0 NG\nGLASSMAN  G L AE1 S - M AE2 N\nGLASSMAN(2)  G L AE1 S - M AH0 N\nGLASSMEYER  G L AE1 S - M AY0 - ER0\nGLASSNER  G L AE1 S - N ER0\nGLASSON  G L AE1 - S AH0 N\nGLASSWARE  G L AE1 S - W EH2 R\nGLASSY  G L AE1 - S IY0\nGLASTETTER  G L AE1 - S T IH0 - T ER0\nGLATFELTER  G L AE1 T - F IH0 L - T ER0\nGLATT  G L AE1 T\nGLATZ  G L AE1 T S\nGLATZER  G L EY1 T - Z ER0\nGLAUB  G L AO1 B\nGLAUBER  G L AW1 - B ER0\nGLAUCOMA  G L AO0 - K OW1 - M AH0\nGLAUDE  G L AO1 D\nGLAUS  G L AO1 Z\nGLAUSER  G L AW1 - S ER0\nGLAVAN  G L EY1 - V AH0 N\nGLAVIN  G L AE1 - V IH0 N\nGLAVINE  G L AE0 - V IH1 N\nGLAVINE(2)  G L AE0 - V IY1 N\nGLAWE  G L AO1\nGLAXO  G L AE1 K - S OW0\nGLAXO'S  G L AE1 K - S OW0 Z\nGLAZA  G L AA1 - Z AH0\nGLAZE  G L EY1 Z\nGLAZEBROOK  G L EY1 Z - B R UH2 K\nGLAZED  G L EY1 Z D\nGLAZENER  G L AE1 - Z IY0 - N ER0\nGLAZER  G L EY1 - Z ER0\nGLAZES  G L EY1 - Z AH0 Z\nGLAZES(2)  G L EY1 - Z IH0 Z\nGLAZIER  G L EY1 - Z IY0 - ER0\nGLAZING  G L EY1 - Z IH0 NG\nGLAZNER  G L AE1 Z - N ER0\nGLAZUNOV  G L AE1 - Z UW0 - N AA0 V\nGLEACHER  G L IY1 - CH ER0\nGLEAM  G L IY1 M\nGLEAMED  G L IY1 M D\nGLEAMING  G L IY1 - M IH0 NG\nGLEAMS  G L IY1 M Z\nGLEAN  G L IY1 N\nGLEANED  G L IY1 N D\nGLEASON  G L IY1 - S AH0 N\nGLEASON'S  G L IY1 - S AH0 N Z\nGLEATON  G L IY1 - T AH0 N\nGLEAVE  G L IY1 V\nGLEAVES  G L IY1 V Z\nGLEBA  G L IY1 - B AH0\nGLECKLER  G L EH1 K - L ER0\nGLEDA  G L EY1 - D AH0\nGLEDHILL  G L EH1 D - HH IH2 L\nGLEE  G L IY1\nGLEEFUL  G L IY1 - F AH0 L\nGLEEFULLY  G L IY1 - F AH0 - L IY0\nGLEESON  G L IY1 - Z AH0 N\nGLEGHORN  G L EH1 G - HH ER0 N\nGLEICH  G L AY1 K\nGLEICHAUF  G L AY1 - K AO0 F\nGLEIM  G L IY1 M\nGLEISNER  G L AY1 S - N ER0\nGLEMP  G L EH1 M P\nGLEN  G L EH1 N\nGLENAYRE  G L EH2 - N EH1 R\nGLENAYRE(2)  G L EH2 - N AY1 R\nGLENBROOK  G L EH1 N - B R UH2 K\nGLENDA  G L EH1 N - D AH0\nGLENDALE  G L EH1 N - D EY2 L\nGLENDENING  G L EH1 N - D AH0 - N IH0 NG\nGLENDENNING  G L EH1 N - D IH0 - N IH0 NG\nGLENDINNING  G L EH1 N - D IH0 - N IH0 NG\nGLENDON  G L EH1 N - D OW0 N\nGLENFED  G L EH1 N - F EH2 D\nGLENFED'S  G L EH1 N - F EH2 D Z\nGLENGARRY  G L EH2 N - G EH1 - R IY0\nGLENHAM  G L EH1 N - HH AH0 M\nGLENHAM(2)  G L EH1 - N AH0 M\nGLENMORE  G L EH1 N - M AO2 R\nGLENN  G L EH1 N\nGLENN'S  G L EH1 N Z\nGLENNA  G L EH1 - N AH0\nGLENNIE  G L EH1 - N IY0\nGLENNON  G L EH1 - N AH0 N\nGLENNY  G L EH1 - N IY0\nGLENS  G L EH1 N Z\nGLENVIEW  G L EH1 N - V Y UW2\nGLENVILLE  G L EH1 N - V IH0 L\nGLENWOOD  G L EH1 N - W UH2 D\nGLENWOOD'S  G L EH1 N - W UH2 D Z\nGLESS  G L EH1 S\nGLESSNER  G L EH1 S - N ER0\nGLEW  G L UW1\nGLIB  G L IH1 B\nGLIBLY  G L IH1 - B L IY0\nGLICK  G L IH1 K\nGLICKENHAUS  G L IH1 - K AH0 N - HH AW2 S\nGLICKMAN  G L IH1 K - M AH0 N\nGLICKMAN'S  G L IH1 K S - M AH0 N Z\nGLICKSMAN  G L IH1 K S - M AH0 N\nGLICKSTEIN  G L IH1 K S - T IY2 N\nGLICKSTEIN(2)  G L IH1 K - S T AY2 N\nGLIDDEN  G L IH1 - D AH0 N\nGLIDE  G L AY1 D\nGLIDED  G L AY1 - D IH0 D\nGLIDER  G L AY1 - D ER0\nGLIDERS  G L AY1 - D ER0 Z\nGLIDES  G L AY1 D Z\nGLIDEWELL  G L AY1 D - W EH2 L\nGLIDING  G L AY1 - D IH0 NG\nGLIMCHER  G L IH1 M - CH ER0\nGLIMMER  G L IH1 - M ER0\nGLIMMERING  G L IH1 - M ER0 - IH0 NG\nGLIMMERS  G L IH1 - M ER0 Z\nGLIMPSE  G L IH1 M P S\nGLIMPSED  G L IH1 M P S T\nGLIMPSES  G L IH1 M P - S IH0 Z\nGLINES  G L AY1 N Z\nGLINKA  G L IH1 NG - K AH0\nGLINSKI  G L IH1 N - S K IY0\nGLINT  G L IH1 N T\nGLINTING  G L IH1 N - T IH0 NG\nGLISSANDI  G L AH0 - S AA1 N - D IY0\nGLISSON  G L IH1 - S AH0 N\nGLISTEN  G L IH1 - S AH0 N\nGLISTENED  G L IH1 - S AH0 N D\nGLISTENING  G L IH1 - S AH0 N - IH0 NG\nGLISTENING(2)  G L IH1 S - N IH0 NG\nGLITCH  G L IH1 CH\nGLITCHES  G L IH1 - CH IH0 Z\nGLITTER  G L IH1 - T ER0\nGLITTERED  G L IH1 - T ER0 D\nGLITTERING  G L IH1 - T ER0 - IH0 NG\nGLITTERS  G L IH1 - T ER0 Z\nGLITTERY  G L IH1 - T ER0 - IY0\nGLITZ  G L IH1 T S\nGLITZY  G L IH1 T - S IY0\nGLO  G L OW1\nGLOAM  G L OW1 M\nGLOAMING  G L OW1 - M IH0 NG\nGLOAT  G L OW1 T\nGLOATED  G L OW1 - T IH0 D\nGLOATING  G L OW1 - T IH0 NG\nGLOATS  G L OW1 T S\nGLOB  G L AA1 B\nGLOBAL  G L OW1 - B AH0 L\nGLOBAL'S  G L OW1 - B AH0 L Z\nGLOBALIZATION  G L OW2 - B AH0 L - IH0 - Z EY1 - SH AH0 N\nGLOBALIZE  G L OW1 - B AH0 L - AY2 Z\nGLOBALIZED  G L OW1 - B AH0 L - AY2 Z D\nGLOBALLY  G L OW1 - B AH0 L - IY0\nGLOBALSTAR  G L OW1 - B AH0 L - S T AA2 R\nGLOBCOM  G L AA1 B - K AA0 M\nGLOBE  G L OW1 B\nGLOBE'S  G L OW1 B Z\nGLOBES  G L OW1 B Z\nGLOBETROTTER  G L OW1 B - T R AO0 - T ER0\nGLOBETROTTERS  G L OW1 B - T R AO0 - T ER0 Z\nGLOBEX  G L OW1 - B AH0 K S\nGLOBO  G L OW1 - B OW0\nGLOBS  G L AA1 B Z\nGLOBULAR  G L AA1 - B Y AH0 - L ER0\nGLOBULIN  G L AA1 - B Y AH0 - L IH0 N\nGLOBULINS  G L AA1 - B Y AH0 - L IH0 N Z\nGLOBUS  G L OW1 - B AH0 S\nGLOCK  G L AA1 K\nGLOCKENSPIEL  G L AA1 - K AH0 N - S P IY2 L\nGLOCKNER  G L AA1 K - N ER0\nGLOD  G L AA1 D\nGLODOWSKI  G L AH0 - D AO1 F S - K IY0\nGLOE  G L OW1\nGLOECKNER  G L OW1 K - N ER0\nGLOEDE  G L OW1 D\nGLOGOWSKI  G L AH0 - G AO1 F S - K IY0\nGLOMAR  G L OW1 - M AA0 R\nGLOMB  G L AA1 M\nGLOMSKI  G L AA1 M - S K IY2\nGLONASS  G L AA1 - N AH0 S\nGLOOM  G L UW1 M\nGLOOMIER  G L UW1 - M IY0 - ER0\nGLOOMILY  G L UW1 - M AH0 - L IY0\nGLOOMY  G L UW1 - M IY0\nGLOOR  G L UH1 R\nGLOP  G L AA1 P\nGLOPPY  G L AA1 - P IY0\nGLOR  G L AO1 R\nGLORE  G L AO1 R\nGLORI  G L AO1 - R IY0\nGLORIA  G L AO1 - R IY0 - AH0\nGLORIANA  G L AO2 - R IY0 - AE1 - N AH0\nGLORIANE  G L AO2 - R IY0 - AE1 N\nGLORIES  G L AO1 - R IY0 Z\nGLORIFICATION  G L AO2 - R AH0 - F IH0 - K EY1 - SH AH0 N\nGLORIFICATION(2)  G L AO2 - R IH0 - F IH0 - K EY1 - SH AH0 N\nGLORIFIED  G L AO1 - R AH0 - F AY2 D\nGLORIFIES  G L AO1 - R AH0 - F AY2 Z\nGLORIFY  G L AO1 - R AH0 - F AY2\nGLORIFYING  G L AO1 - R AH0 - F AY2 - IH0 NG\nGLORIOSO  G L AO0 - R IY0 - OW1 - S OW0\nGLORIOUS  G L AO1 - R IY0 - AH0 S\nGLORIOUSLY  G L AO1 - R IY0 - AH0 S - L IY0\nGLORY  G L AO1 - R IY0\nGLOSS  G L AO1 S\nGLOSSARY  G L AO1 - S ER0 - IY0\nGLOSSED  G L AO1 S T\nGLOSSER  G L AO1 - S ER0\nGLOSSES  G L AO1 - S IH0 Z\nGLOSSIER  G L AO1 - S IY0 - ER0\nGLOSSMAN  G L AO1 S - M AH0 N\nGLOSSON  G L AA1 - S AH0 N\nGLOSSY  G L AO1 - S IY0\nGLOSTER  G L AA1 - S T ER0\nGLOTFELTY  G L AA1 T - F IH0 L - T IY0\nGLOTTAL  G L AA1 - T AH0 L\nGLOTTIS  G L AA1 - T AH0 S\nGLOTZBACH  G L AA1 T S - B AA0 K\nGLOUCESTER  G L AO1 - S T ER0\nGLOVE  G L AH1 V\nGLOVED  G L AH1 V D\nGLOVER  G L AH1 - V ER0\nGLOVES  G L AH1 V Z\nGLOW  G L OW1\nGLOWACKI  G L AW0 - AA1 T S - K IY0\nGLOWED  G L OW1 D\nGLOWER  G L AW1 - ER0\nGLOWERED  G L AW1 - ER0 D\nGLOWERING  G L AW1 - ER0 - IH0 NG\nGLOWING  G L OW1 - IH0 NG\nGLOWINGLY  G L OW1 - IH0 NG - L IY0\nGLOWS  G L OW1 Z\nGLOYD  G L OY1 D\nGLUCK  G L AH1 K\nGLUCK'S  G L AH1 K S\nGLUCKMAN  G L AH1 K - M AH0 N\nGLUCKSMAN  G L AH1 K S - M AH0 N\nGLUCOSE  G L UW1 - K OW2 S\nGLUCOSIDE  G L UW1 - K AH0 - S AY2 D\nGLUCOSIDES  G L UW1 - K AH0 - S AY2 D Z\nGLUE  G L UW1\nGLUECK  G L UW1 K\nGLUED  G L UW1 D\nGLUES  G L UW1 Z\nGLUM  G L AH1 M\nGLUMLY  G L AH1 M - L IY0\nGLUNT  G L AH1 N T\nGLUNTZ  G L AH1 N T S\nGLUNZ  G L AH1 N Z\nGLUSKIN  G L AH1 - S K IH0 N\nGLUT  G L AH1 T\nGLUTAMATE  G L UW1 - T AH0 - M EY2 T\nGLUTAMIC  G L UW0 - T AE1 - M IH0 K\nGLUTARIC  G L UW0 - T AE1 - R IH0 K\nGLUTEN  G L UW1 - T AH0 N\nGLUTH  G L UW1 TH\nGLUTS  G L AH1 T S\nGLUTTED  G L AH1 - T IH0 D\nGLUTTONOUS  G L AH1 - T AH0 N - AH0 S\nGLUTTONS  G L AH1 - T AH0 N Z\nGLUTTONY  G L AH1 - T AH0 N - IY0\nGLYCEL  G L IH1 - S AH0 L\nGLYCEROL  G L IH1 - S ER0 - OW2 L\nGLYCINE  G L AY1 - S IY2 N\nGLYCINE(2)  G L AY1 - S AH0 N\nGLYCOGEN  G L AY1 - K AH0 - JH IH0 N\nGLYCOL  G L AY1 - K AO2 L\nGLYCOL(2)  G L AY1 - K OW2 L\nGLYCOLIC  G L AY0 - K AO1 - L AH0 K\nGLYCOMED  G L AY1 - K OW2 M D\nGLYCOMED(2)  G L AY1 - K OW0 - M EH2 D\nGLYCOSIDE  G L AY1 - K AH0 - S AY2 D\nGLYMPH  G L IH1 M F\nGLYN  G L IH1 N\nGLYNDEBOURNE  G L IH1 N D - B AO2 R N\nGLYNIS  G L IH1 - N IH0 S\nGLYNN  G L IH1 N\nGLYNNIE  G L IH1 - N IY0\nGLYNNIS  G L IH1 - N IH0 S\nGMBH  G AH0 M\nGMBH(2)  JH IY1 - EH1 M - B IY1 - EY1 CH\nGNAGEY  N AE1 - JH IY0\nGNAIZDA  N EY1 Z - D AH0\nGNANN  N AE1 N\nGNARL  N AA1 R L\nGNARLE  N AA1 R L\nGNARLED  N AA1 R L D\nGNARLY  N AA1 R - L IY0\nGNASH  N AE1 SH\nGNASHING  N AE1 - SH IH0 NG\nGNAT  N AE1 T\nGNATCATCHER  N AE1 T - K AE2 - CH ER0\nGNATS  N AE1 T S\nGNAU  N AW1\nGNAW  N AO1\nGNAWED  N AO1 D\nGNAWING  N AO1 - IH0 NG\nGNAWS  N AO1 Z\nGNC  N K\nGNEISS  N AY1 S\nGNOMES  N OW1 M Z\nGNOMIC  N OW1 - M IH0 K\nGNOMONIC  N OW0 - M AA1 - N IH0 K\nGNOSTICISM  N AA1 - S T IH0 - S IH2 - Z AH0 M\nGNU  N UW1\nGO  G OW1\nGO-CART  G OW1 - K AA2 R T\nGOA  G OW1 - AH0\nGOAD  G OW1 D\nGOADED  G OW1 - D IH0 D\nGOADING  G OW1 - D IH0 NG\nGOAL  G OW1 L\nGOALIE  G OW1 - L IY0\nGOALKEEPER  G OW1 L - K IY2 - P ER0\nGOALPOST  G OW1 L - P OW2 S T\nGOALS  G OW1 L Z\nGOAN  G OW1 N\nGOANS  G OW1 N Z\nGOAR  G AO1 R\nGOARD  G AO1 R D\nGOAT  G OW1 T\nGOAT'S  G OW1 T S\nGOATEE  G OW1 - T IY1\nGOATES  G OW1 - EY0 T S\nGOATLEY  G OW1 T - L IY0\nGOATS  G OW1 T S\nGOB  G AA1 B\nGOBAIN  G OW1 - B IH0 N\nGOBBLE  G AA1 - B AH0 L\nGOBBLED  G AA1 - B AH0 L D\nGOBBLEDYGOOK  G AA2 - B AH0 L - D IY0 - G UH1 K\nGOBBLER  G AA1 - B AH0 L - ER0\nGOBBLER(2)  G AA1 - B L ER0\nGOBBLERS  G AA1 - B AH0 L - ER0 Z\nGOBBLERS(2)  G AA1 - B L ER0 Z\nGOBBLING  G AA1 - B AH0 L - IH0 NG\nGOBBLING(2)  G AA1 - B L IH0 NG\nGOBEL  G OW1 - B AH0 L\nGOBEN  G AA1 - B AH0 N\nGOBER  G OW1 - B ER0\nGOBERSTEIN  G OW1 - B ER0 - S T IY2 N\nGOBERSTEIN(2)  G OW1 - B ER0 - S T AY2 N\nGOBERT  G AA1 - B ER0 T\nGOBI  G OW1 - B IY0\nGOBIE  G OW1 - B IY0\nGOBIN  G OW1 - B IH0 N\nGOBINOT  G OW1 - B IH0 - N AA0 T\nGOBIOFF  G OW1 - B IY0 - AO0 F\nGOBLE  G OW1 - B AH0 L\nGOBLET  G AA1 - B L AH0 T\nGOBLIN  G AA1 - B L IH0 N\nGOBLINS  G AA1 - B L IH0 N Z\nGOBLIRSCH  G AA1 - B L ER0 SH\nGOBS  G AA1 B Z\nGOCHENOUR  G AA1 - SH IH0 - N UH0 R\nGOCHNAUER  G AA1 K - N AW0 - ER0\nGOCHNOUR  G AH0 SH - N UH1 R\nGOCKE  G AA1 K\nGOCKEL  G AA1 - K AH0 L\nGOCKLEY  G AA1 K - L IY0\nGOD  G AA1 D\nGOD'S  G AA1 D Z\nGODA  G OW1 - D AH0\nGODAR  G AH0 - D AA1 R\nGODARD  G AH0 - D AA1 R D\nGODART  G AA1 - D AA0 R T\nGODBEE  G AA1 D - B IY2\nGODBEY  G AA1 D - B IY0\nGODBOLD  G AA1 D - B OW2 L D\nGODBOLT  G AA1 D - B OW2 L T\nGODBOUT  G AA1 D - B AW2 T\nGODBY  G AA1 D - B IY0\nGODDAM  G AA1 - D D AE2 M\nGODDAMN  G AA1 - D D AE2 M\nGODDARD  G AA1 - D ER0 D\nGODDART  G AA1 - D AA0 R T\nGODDEAU  G AA1 - D OW2\nGODDEN  G AA1 - D AH0 N\nGODDESS  G AA1 - D AH0 S\nGODDESSES  G AA1 - D AH0 - S IH0 Z\nGODDING  G AA1 - D IH0 NG\nGODEK  G OW1 - D IH0 K\nGODETTE  G AH0 - D EH1 T\nGODFATHER  G AA1 D - F AA2 - DH ER0\nGODFATHER'S  G AA1 D - F AA2 - DH ER0 Z\nGODFREY  G AA1 D - F R IY0\nGODHEAD  G AA1 D - HH EH2 D\nGODIN  G OW1 - D IH0 N\nGODINA  G OW0 - D IY1 - N AH0\nGODINE  G OW0 - D IY1 N\nGODINES  G AA1 - D AY0 N Z\nGODINEZ  G OW0 - D IY1 - N EH0 Z\nGODING  G OW1 - D IH0 NG\nGODINO  G OW0 - D IY1 - N OW0\nGODIVA  G AH0 - D AY1 - V AH0\nGODKIN  G AA1 D - K IH0 N\nGODLESKI  G AH0 D - L EH1 S - K IY0\nGODLESS  G AA1 D - L AH0 S\nGODLEWSKI  G AH0 D - L EH1 F S - K IY0\nGODLEY  G AA1 D - L IY0\nGODLOVE  G AA1 D - L AH2 V\nGODLY  G AA1 D - L IY0\nGODMAN  G AA1 D - M AH0 N\nGODMOTHER  G AA1 D - M AH2 - DH ER0\nGODOT  G OW1 - D AH0 T\nGODOWN  G OW1 - D AW2 N\nGODOY  G AA1 - D OY0\nGODREJ  G AA1 - D R EY0\nGODS  G AA1 D Z\nGODSELL  G AA1 D - S AH0 L\nGODSEND  G AA1 D - S EH2 N D\nGODSEY  G AA1 D - Z IY0\nGODSHALK  G AA1 D - SH AH0 K\nGODSHALL  G AA1 D - SH AH0 L\nGODSPEED  G AA1 D - S P IY0 D\nGODUNOV  G OW1 - D UW0 - N AA0 V\nGODWIN  G AA1 D - W IH0 N\nGODZILLA  G AA2 D - Z IH1 - L AH0\nGOE  G OW1\nGOEAS  G OW1 - IY0 - AH0 Z\nGOEAS(2)  G OW1 - Y AH0 Z\nGOEBBELS  G OW1 - B AH0 L Z\nGOEBEL  G OW1 - B AH0 L\nGOECKE  G OW1 K\nGOEDDE  G OW1 D\nGOEDE  G OW1 D\nGOEDECKE  G OW1 - D IH0 K\nGOEDEN  G OW1 - D AH0 N\nGOEDERT  G OW1 - D ER0 T\nGOEDKEN  G OW1 D - K AH0 N\nGOEGLEIN  G OW1 - G L AY2 N\nGOEHNER  G OW1 - N ER0\nGOEHRING  G AO1 - R IH0 NG\nGOEKE  G OW1 K\nGOEKEN  G OW1 - K AH0 N\nGOELLER  G OW1 - L ER0\nGOELLNER  G OW1 L - N ER0\nGOELZ  G OW1 L Z\nGOELZER  G OW1 L - Z ER0\nGOEMAN  G OW1 - M AH0 N\nGOEMON  G OW1 - EY2 - M AH0 N\nGOEN  G OW1 N\nGOENS  G OW1 N Z\nGOEPFERT  G OW1 P - F ER0 T\nGOER  G OW1 - ER0\nGOERGEN  G AO1 R - G AH0 N\nGOERING  G OW1 - ER0 - IH0 NG\nGOERKE  G AO1 R K\nGOERLITZ  G AO1 R - L IH0 T S\nGOERNER  G AO1 R - N ER0\nGOERS  G OW1 - ER0 Z\nGOERTZ  G AO1 R T S\nGOERTZEN  G AO1 R T - Z AH0 N\nGOES  G OW1 Z\nGOESER  G OW1 - Z ER0\nGOETABANKEN  G OW2 - T AH0 - B AE1 NG - K AH0 N\nGOETHALS  G OW1 - TH AH0 L Z\nGOETHE  G OW1 TH\nGOETSCH  G OW1 CH\nGOETTE  G EH1 T\nGOETTEL  G OW1 - T AH0 L\nGOETTING  G OW1 - T IH0 NG\nGOETTL  G OW1 - T AH0 L\nGOETTSCH  G OW1 T CH\nGOETZ  G EH1 T S\nGOETZE  G OW1 T Z\nGOETZINGER  G OW1 T - Z IH0 - NG ER0\nGOETZKE  G OW1 T S - K IY0\nGOETZMAN  G OW1 T S - M AH0 N\nGOEWEY  G AA1 - UW0 - IY0\nGOFF  G AO1 F\nGOFFIN  G AA1 - F IH0 N\nGOFFINET  G AA1 - F IH0 - N IH0 T\nGOFFMAN  G AA1 F - M AH0 N\nGOFFMAN'S  G AA1 F - M AH0 N Z\nGOFFNEY  G AA1 F - N IY0\nGOFFREDO  G OW0 - F R EY1 - D OW0\nGOFORTH  G OW1 - F AO1 R TH\nGOGA  G OW1 - G AH0\nGOGAN  G OW1 - G AH0 N\nGOGEL  G OW1 - G AH0 L\nGOGGANS  G AA1 - G AH0 N Z\nGOGGIN  G AA1 - G IH0 N\nGOGGINS  G AA1 - G IH0 N Z\nGOGGLE  G AA1 - G AH0 L\nGOGGLES  G AA1 - G AH0 L Z\nGOGH  G OW1\nGOGHS  G OW1 Z\nGOGLIA  G AA1 - G L IY0 - AH0\nGOGO  G OW1 - G OW2\nGOGUEN  G OW1 - G W AH0 N\nGOH  G OW1\nGOHEEN  G AH0 - HH IY1 N\nGOHL  G OW1 L\nGOHLKE  G AA1 K\nGOHLKE(2)  G OW1 K\nGOHMAN  G OW1 - M AH0 N\nGOHN  G AA1 N\nGOHR  G AA1 R\nGOIN  G OY1 N\nGOIN'  G OW1 - AH0 N\nGOINES  G OY1 N Z\nGOING  G OW1 - IH0 NG\nGOING(2)  G OW1 - IH0 N\nGOINGS  G OW1 - IH0 NG Z\nGOINGS-ON  G OW1 - IH0 NG - Z AA1 N\nGOINGS-ONS  G OW1 - IH0 NG - Z AA1 N Z\nGOINS  G OY1 N Z\nGOITER  G OY1 - T ER0\nGOIZUETA  G OY2 Z - W EY1 - T AH0\nGOKEY  G OW1 - K IY2\nGOKSEL  G AO1 K - S AH1 L\nGOLA  G OW1 - L AH0\nGOLAB  G OW1 - L AE2 B\nGOLAN  G OW1 - L AH0 N\nGOLAN(2)  G AH0 - L AA1 N\nGOLAND  G OW1 - L AH0 N D\nGOLAS  G OW1 - L AH0 Z\nGOLASZEWSKI  G AH0 - L AH0 - SH EH1 F S - K IY0\nGOLAY  G AA1 - L EY0\nGOLBA  G OW1 L - B AH0\nGOLBERG  G OW1 L - B ER0 G\nGOLCONDA  G AA0 L - K AA1 N - D AH0\nGOLD  G OW1 L D\nGOLD'S  G OW1 L D Z\nGOLDA  G OW1 L - D AH0\nGOLDADE  G OW1 L - D EY1 D\nGOLDAMMER  G OW1 L - D AH0 - M ER0\nGOLDBACH  G OW1 L D - B AA2 K\nGOLDBAUM  G OW1 L D - B AW2 M\nGOLDBECK  G OW1 L D - B EH2 K\nGOLDBERG  G OW1 L D - B ER0 G\nGOLDBERG'S  G OW1 L D - B ER0 G Z\nGOLDBERGER  G OW1 L D - B ER0 - G ER0\nGOLDBLATT  G OW1 L D - B L AH0 T\nGOLDBLUM  G OW1 L D - B L AH0 M\nGOLDCOR  G OW1 L D - K AO2 R\nGOLDCREEK  G OW1 L D - K R IY2 K\nGOLDCREST  G OW1 L D - K R EH2 S T\nGOLDE  G OW1 L D\nGOLDEN  G OW1 L - D AH0 N\nGOLDEN'S  G OW1 L - D AH0 N Z\nGOLDENBERG  G OW1 L - D AH0 N - B ER0 G\nGOLDENEYE  G OW1 L - D AH0 - N AY2\nGOLDENROD  G OW1 L - D AH0 N - R AA2 D\nGOLDENSON  G OW1 L - D AH0 N - S AH0 N\nGOLDENSON'S  G OW1 L - D AH0 N - S AH0 N Z\nGOLDENSTEIN  G OW1 L - D AH0 N - S T AY2 N\nGOLDENSTEIN(2)  G OW1 L - D AH0 N - S T IY2 N\nGOLDENTHAL  G OW1 L - D AH0 N - TH AA2 L\nGOLDENTHAL'S  G OW1 L - D AH0 N - TH AA2 L Z\nGOLDER  G OW1 L - D ER0\nGOLDEST  G OW1 L - D IH0 S T\nGOLDEY  G OW1 L - D IY0\nGOLDFARB  G OW1 L D - F AA2 R B\nGOLDFEDER  G OW1 L D - F EH2 - D ER0\nGOLDFIELD  G OW1 L D - F IY2 L D\nGOLDFIELDS  G OW1 L D - F IY2 L D Z\nGOLDFINCH  G OW1 L D - F IH2 N CH\nGOLDFINCHES  G OW1 L D - F IH2 N - CH IH0 Z\nGOLDFINE  G OW1 L D - F AY2 N\nGOLDFINGER  G OW1 L D - F IH2 NG - G ER0\nGOLDFISH  G OW1 L D - F IH2 SH\nGOLDFUS  G OW1 L D - F AH2 S\nGOLDHAMMER  G OW1 L D - HH AE2 - M ER0\nGOLDIE  G OW1 L - D IY0\nGOLDILOCKS  G OW1 L - D IY0 - L AO2 K S\nGOLDIN  G OW1 L - D IH0 N\nGOLDING  G OW1 L - D IH0 NG\nGOLDINGER  G OW1 L - D IH0 - NG ER0\nGOLDMAN  G OW1 L D - M AH0 N\nGOLDMAN'S  G OW1 L D - M AH0 N Z\nGOLDMANN  G OW1 L D - M AH0 N\nGOLDMANS  G OW1 L D - M AH0 N Z\nGOLDMARK  G OW1 L D - M AA2 R K\nGOLDMINE  G OW1 L D - M AY2 N\nGOLDNER  G OW1 L D - N ER0\nGOLDOME  G OW1 L - D OW2 M\nGOLDOME(2)  G OW1 L D - D OW2 M\nGOLDRESS  G OW1 L - D R EH2 S\nGOLDRICK  G OW1 L - D R IH0 K\nGOLDRING  G OW1 L - D R IH2 NG\nGOLDS  G OW1 L D Z\nGOLDSBERRY  G OW1 L D Z - B EH2 - R IY0\nGOLDSBOROUGH  G OW1 L D Z - B ER0 - OW0\nGOLDSBY  G OW1 L D Z - B IY0\nGOLDSCHMID  G OW1 L D SH - M IH2 D\nGOLDSCHMIDT  G OW1 L D SH - M IH2 T\nGOLDSMITH  G OW1 L D - S M IH2 TH\nGOLDSMITH'S  G OW1 L D - S M IH2 TH S\nGOLDSON  G OW1 L D - S AH0 N\nGOLDSTAR  G OW1 L D - S T AA2 R\nGOLDSTEIN  G OW1 L D - S T AY2 N\nGOLDSTEIN'S  G OW1 L D - S T AY2 N Z\nGOLDSTEIN'S(2)  G OW1 L D - S T IY2 N Z\nGOLDSTEIN(2)  G OW1 L D - S T IY2 N\nGOLDSTOCK  G OW1 L D - S T AA2 K\nGOLDSTON  G OW1 L D - S T AH0 N\nGOLDSTONE  G OW1 L D - S T OW2 N\nGOLDSTRIKE  G OW1 L D - S T R AY2 K\nGOLDSWORTHY  G OW1 L D Z - W ER2 - DH IY0\nGOLDTHWAITE  G OW1 L D TH - W EY2 T\nGOLDWASSER  G OW1 L D - W AO0 - S ER0\nGOLDWATER  G OW1 L D - W AO2 - T ER0\nGOLDWATER'S  G OW1 L D - W AO2 - T ER0 Z\nGOLDWIN  G OW1 L D - W IH0 N\nGOLDWIRE  G OW1 L D - W AY2 R\nGOLDWYN  G OW1 L D - W IH0 N\nGOLDY  G OW1 L - D IY0\nGOLEC  G OW1 - L IH0 K\nGOLEM  G OW1 - L AH0 M\nGOLEMAN  G OW1 L - M AH0 N\nGOLEMBESKI  G AH0 - L IH0 M - B EH1 S - K IY0\nGOLEMBIEWSKI  G AH0 - L IH0 M - B IY0 - EH1 F S - K IY0\nGOLEN  G AA1 - L AH0 N\nGOLEY  G OW1 - L IY0\nGOLF  G AA1 L F\nGOLF'S  G AA1 L F S\nGOLF(2)  G AO1 L F\nGOLFARB  G AO1 L - F AA2 R B\nGOLFED  G AA1 L F T\nGOLFER  G AA1 L - F ER0\nGOLFER'S  G AA1 L - F ER0 Z\nGOLFERS  G AA1 L - F ER0 Z\nGOLFIE  G AA1 L - F IY0\nGOLFING  G AA1 L - F IH0 NG\nGOLFING(2)  G AO1 L - F IH0 NG\nGOLFMAN  G AA1 L F - M AH0 N\nGOLFS  G AA1 L F S\nGOLGI  G OW1 L - JH IY0\nGOLGO  G OW1 L - G OW0\nGOLIATH  G AH0 - L AY1 - AH0 TH\nGOLIATHS  G OW1 - L IY0 - AE0 TH S\nGOLIGHTLY  G OW1 - L AY2 T - L IY0\nGOLINSKI  G AH0 - L IH1 N - S K IY0\nGOLISANO  G OW2 - L IH0 - S AA1 - N OW0\nGOLKAR  G OW1 L - K AA0 R\nGOLL  G AA1 L\nGOLLA  G AA1 - L AH0\nGOLLADAY  G AA1 - L AH0 - D EY2\nGOLLE  G AA1 L\nGOLLER  G AA1 - L ER0\nGOLLIDAY  G AA1 - L IY0 - D EY0\nGOLLIHER  G AA1 - L IH0 - HH ER0\nGOLLNICK  G AA1 L - N IH0 K\nGOLLUM  G AA1 - L AH0 M\nGOLLUST  G OW1 - L AH0 S T\nGOLLY  G AA1 - L IY0\nGOLOB  G OW1 - L AH0 B\nGOLOMB  G AA1 - L AH0 M\nGOLONKA  G OW0 - L OW1 NG - K AH0\nGOLOVEN  G OW1 - L AH0 - V AH0 N\nGOLPHIN  G OW1 L - F IH0 N\nGOLSON  G OW1 L - S AH0 N\nGOLSTON  G OW1 L - S T AH0 N\nGOLTZ  G OW1 L T S\nGOLUB  G OW1 - L AH0 B\nGOLUBSKI  G AH0 - L AH1 B - S K IY0\nGOLZ  G OW1 L Z\nGOMA  G OW1 - M AH0\nGOMBAR  G AH0 M - B AA1 R\nGOMBERG  G AA1 M - B ER0 G\nGOMBERT  G AA1 M - B ER0 T\nGOMBOS  G OW1 M - B OW0 Z\nGOMER  G OW1 - M ER0\nGOMERY  G OW1 - M ER0 - IY0\nGOMES  G OW1 - M EH2 Z\nGOMEZ  G OW1 - M EH0 Z\nGOMILLION  G AA1 - M IH0 - L Y AH0 N\nGOMOLL  G AA1 - M AH0 L\nGOMORRAH  G AH0 - M AO1 - R AH0\nGOMORY  G OW1 - M ER0 - IY0\nGONAIVES  G OW0 - N AY1 V Z\nGONCALVES  G OW0 N - K AA1 L - V EH0 S\nGONCE  G AA1 N S\nGONCHAROV  G AA1 N - CH ER0 - AA0 V\nGOND  G AA1 N D\nGONDA  G AA1 N - D AH0\nGONDEK  G AA1 N - D IH0 K\nGONDER  G AA1 N - D ER0\nGONDOLA  G AA1 N - D AH0 - L AH0\nGONDOLA(2)  G AA0 N - D OW1 - L AH0\nGONDOLAS  G AA1 N - D AH0 - L AH0 Z\nGONDOLAS(2)  G AA0 N - D OW1 - L AH0 Z\nGONDOLIER  G AA2 N - D AH0 - L IH1 R\nGONDOLIERS  G AA2 N - D AH0 - L IH1 R Z\nGONE  G AO1 N\nGONER  G AA1 - N ER0\nGONET  G OW1 - N IH0 T\nGONG  G AO1 NG\nGONGAWARE  G AA1 NG - G AH0 - W EH0 R\nGONGORA  G OW0 NG - G AO1 - R AH0\nGONGS  G AO1 NG Z\nGONIA  G OW1 - N IY0 - AH0\nGONIOMETER  G OW2 - N IY0 - AA1 - M AH0 - T ER0\nGONIUM  G OW1 - N IY0 - AH0 M\nGONNA  G AA1 - N AH0\nGONNELLA  G OW0 - N EH1 - L AH0\nGONNERMAN  G AA1 - N ER0 - M AH0 N\nGONOCOCCAL  G AA2 - N AH0 - K AA1 - K AH0 L\nGONORRHEA  G AA2 - N ER0 - IY1 - AH0\nGONSALES  G OW1 N - S EY0 L Z\nGONSALEZ  G OW0 N - S AA1 - L EH0 Z\nGONSALVES  G OW0 N - S AA1 L - V EH0 S\nGONSER  G AA1 N - S ER0\nGONSOULIN  G AA1 N - S AW0 - L IH0 N\nGONTERMAN  G AA1 N - T ER0 - M AH0 N\nGONYA  G OW1 - N Y AH0\nGONYEA  G OW1 - N Y EH0\nGONYER  G OW1 - N Y ER0\nGONYO  G OW1 - N Y OW0\nGONZALES  G AA0 N - Z AA1 - L AH0 S\nGONZALEZ  G AA0 N - Z AA1 - L AH0 Z\nGONZALEZ'S  G AA0 N - Z AA1 - L AH0 - Z AH0 Z\nGONZALO  G AA0 N - Z AA1 - L OW0\nGONZO  G AA1 N - Z OW0\nGONZO'S  G AA1 N - Z OW0 Z\nGOO  G UW1\nGOOCH  G UW1 CH\nGOOD  G UH1 D\nGOOD'S  G UH1 D Z\nGOOD(2)  G IH0 D\nGOOD-BYE  G IH0 D - B AY1\nGOOD-BYE  G UH1 D - B AY1\nGOOD-HEARTEDLY  G UH1 D - HH AA1 R - T IH0 D - L IY0\nGOOD-NATUREDLY  G UH1 D - N EY1 - CH ER0 D - L IY0\nGOODA  G UH1 - D AH0\nGOODA(2)  G UW1 - D AH0\nGOODALE  G UH1 - D EY2 L\nGOODALL  G UH1 - D AO2 L\nGOODBAR  G UH1 D - B AA2 R\nGOODBREAD  G UH1 D - B R EH2 D\nGOODBY  G UH1 D - B AY2\nGOODBYE  G UH2 D - B AY1\nGOODBYES  G UH2 D - B AY1 Z\nGOODBYES(2)  G IH0 D - B AY1 Z\nGOODCHILD  G UH1 D - CH AY2 L D\nGOODE  G UH1 D\nGOODELL  G UH1 - D EH0 L\nGOODEN  G UH1 - D AH0 N\nGOODEN'S  G UH1 - D AH0 N Z\nGOODENOUGH  G UH1 - D AH0 - N AW2\nGOODENOW  G UH1 - D EH0 - N OW0\nGOODER  G UH1 - D ER0\nGOODERHAM  G UH1 - D ER0 - HH AE2 M\nGOODERS  G UH1 - D ER0 Z\nGOODFELLA  G UH1 D - F EH2 - L AH0\nGOODFELLAS  G UH1 D - F EH2 - L AH0 Z\nGOODFELLOW  G UH1 D - F EH2 - L OW0\nGOODFELLOWS  G UH1 D - F EH2 - L OW0 Z\nGOODFRIEND  G UH1 D - F R EH2 N D\nGOODFRIENDS  G UH1 D - F R EH2 N D Z\nGOODGAME  G UH1 D - G EY2 M\nGOODHART  G UH1 D - HH AA2 R T\nGOODHEART  G UH1 D - HH AA2 R T\nGOODHUE  G UH1 D - HH Y UW2\nGOODIE  G UH1 - D IY0\nGOODIES  G UH1 - D IY0 Z\nGOODIN  G UH1 - D AH0 N\nGOODINE  G UH1 - D AY0 N\nGOODING  G UH1 - D IH0 NG\nGOODING'S  G UH1 - D IH0 NG Z\nGOODISON  G UH1 - D IH0 - S AH0 N\nGOODKIN  G UH1 D - K IH2 N\nGOODLAND  G UH1 D - L AH0 N D\nGOODLAND(2)  G UH1 D - L AE2 N D\nGOODLET  G UH1 D - L EH2 T\nGOODLETT  G UH1 D - L EH2 T\nGOODLEY  G UH1 D - L IY0\nGOODLIN  G UH1 D - L IH0 N\nGOODLING  G UH1 D - L IH0 NG\nGOODLOE  G UH1 D - L OW2\nGOODLOW  G UH1 D - L OW2\nGOODLY  G UH1 D - L IY0\nGOODMAN  G UH1 D - M AH0 N\nGOODMAN'S  G UH1 D - M AE2 N Z\nGOODMORNING  G UH2 D - M AO1 R - N IH0 NG\nGOODNER  G UH1 D - N ER0\nGOODNESS  G UH1 D - N AH0 S\nGOODNESS(2)  G UH1 D - N IH0 S\nGOODNIGHT  G UH1 D - N AY2 T\nGOODNOUGH  G UH1 D - N AH2 F\nGOODNOW  G UH1 D - N OW0\nGOODPASTER  G UH1 D - P AE2 - S T ER0\nGOODPASTURE  G UH1 D - P AE2 S - CH ER0\nGOODREAU  G UH1 - D R OW2\nGOODRICH  G UH1 - D R IH2 CH\nGOODRICH'S  G UH1 D - R IH2 - CH IH0 Z\nGOODRICK  G UH1 - D R IH0 K\nGOODRIDGE  G UH1 - D R IH2 JH\nGOODROE  G UH1 - D R OW2\nGOODROW  G UH1 - D R OW2\nGOODRUM  G UH1 - D R AH2 M\nGOODS  G UH1 D Z\nGOODSELL  G UH1 D - S EH2 L\nGOODSON  G UH1 D - S AH0 N\nGOODSON'S  G UH1 D - S AH0 N Z\nGOODSPEED  G UH1 D - S P IY2 D\nGOODSPEED'S  G UH1 D - S P IY1 D Z\nGOODSTEIN  G UH1 D - S T AY2 N\nGOODSTEIN(2)  G UH1 D - S T IY2 N\nGOODTAB  G UH1 D - T AE2 B\nGOODWILL  G UH1 D - W IH1 L\nGOODWIN  G UH1 D - W IH0 N\nGOODWINE  G UH1 D - W AY2 N\nGOODWYN  G UH1 D - W IH2 N\nGOODY  G UH1 - D IY0\nGOODY'S  G UH1 - D IY0 Z\nGOODYEAR  G UH1 - D Y IH0 R\nGOODYEAR'S  G UH1 - D Y IH0 R Z\nGOODYEAR(2)  G UH1 D - Y IY0 R\nGOOEY  G UW1 - IY0\nGOOF  G UW1 F\nGOOFED  G UW1 F T\nGOOFING  G UW1 - F IH0 NG\nGOOFS  G UW1 F S\nGOOFY  G UW1 - F IY0\nGOOGE  G UW1 JH\nGOOGIN  G UW1 - G IH0 N\nGOOGINS  G UW1 - G IH0 N Z\nGOOK  G UH1 K\nGOOKIN  G UH1 - K IH0 N\nGOOLD  G UW1 L D\nGOOLEY  G UW1 - L IY0\nGOOLSBY  G UW1 L S - B IY0\nGOON  G UW1 N\nGOONAN  G UW1 - N AH0 N\nGOONS  G UW1 N Z\nGOOP  G UW1 P\nGOOS  G UW1 Z\nGOOSBY  G UW1 S - B IY0\nGOOSE  G UW1 S\nGOOSEBERRY  G UW1 S - B EH2 - R IY0\nGOOSEFISH  G UW1 S - F IH2 SH\nGOOSEFOOT  G UW1 S - F UH2 T\nGOOSEN  G UW1 - S AH0 N\nGOOSEY  G UW1 - S IY0\nGOOSSEN  G UW1 - S AH0 N\nGOOSSENS  G UW1 - S AH0 N Z\nGOOSTREE  G UW0 S - T R IY1\nGOOTEE  G UW1 - T IY0\nGOPAC  G OW1 - P AE2 K\nGOPAC'S  G OW1 - P AE2 K S\nGOPAL  G OW2 - P AA1 L\nGOPHER  G OW1 - F ER0\nGOPHERS  G OW1 - F ER0 Z\nGORA  G AO1 - R AH0\nGORACKE  G AO1 - R AH0 K\nGORADZE  G AO2 - R AA1 D - Z AH0\nGORAL  G AO1 - R AH0 L\nGORALSKI  G ER0 - AA1 L - S K IY0\nGORANSON  G AO1 - R AH0 N - S AH0 N\nGORAZDE  G AO2 - R AA1 ZH - D AH0\nGORAZDE'S  G AO2 - R AA1 ZH - D AH0 Z\nGORAZDE'S(2)  G ER0 - AA1 ZH - D AH0 Z\nGORAZDE(2)  G ER0 - AA1 ZH - D AH0\nGORBACHEV  G AO1 R - B AH0 - CH EH0 V\nGORBACHEV'S  G AO1 R - B AH0 - CH EH0 V Z\nGORBACHEV'S(2)  G AO1 R - B AH0 - CH AO2 F S\nGORBACHEV(2)  G AO1 R - B AH0 CH - AO2 F\nGORBACHEVS  G AO1 R - B AH0 - CH EH0 V Z\nGORBACHEVS(2)  G AO1 R - B AH0 - CH AO2 F S\nGORBY  G AO1 R - B IY0\nGORCZYCA  G ER0 - CH IH1 - K AH0\nGORCZYNSKI  G ER0 - CH IH1 N - S K IY0\nGORDA  G AO1 R - D AH0\nGORDAN  G AO1 R - D AH0 N\nGORDEN  G AO1 R - D AH0 N\nGORDER  G AO1 R - D ER0\nGORDEYEV  G AO0 R - D AY1 - AH0 V\nGORDIAN  G AO1 R - D IY0 - AH0 N\nGORDIE  G AO1 R - D IY0\nGORDILLO  G AO2 R - D IH1 - L OW0\nGORDIN  G AO1 R - D IH0 N\nGORDINIER  G AO1 R - D IH0 - N IY0 - ER0\nGORDJI  G AO1 R - JH IY0\nGORDNER  G AO1 R D - N ER0\nGORDON  G AO1 R - D AH0 N\nGORDON'S  G AO1 R - D AH0 N Z\nGORDY  G AO1 R - D IY0\nGORE  G AO1 R\nGORE'S  G AO1 R Z\nGORECKI  G ER0 - EH1 T S - K IY0\nGORED  G AO1 R D\nGOREE  G AO1 - R IY1\nGORELICK  G AO1 - R IH0 - L IH0 K\nGOREN  G AO1 - R AH0 N\nGORENFLO  G AO0 - R EH1 N - F L OW0\nGORES  G AO1 R Z\nGOREY  G AO1 - R IY0\nGORGAS  G AO1 R - G AH0 Z\nGORGE  G AO1 R JH\nGORGEOUS  G AO1 R - JH AH0 S\nGORGES  G AO1 R - JH AH0 Z\nGORGES(2)  G AO1 R - JH IH0 Z\nGORGON  G AO1 R - G AH0 N\nGORGONE  G AO1 R - G AH0 N\nGORGONIAN  G AO0 R - G OW1 - N IY0 - AH0 N\nGORGONS  G AO1 R - G AH0 N Z\nGORGUZE  G AO1 R - G Y UW0 Z\nGORHAM  G AO1 - R AH0 M\nGORI  G AO1 - R IY0\nGORIA  G AO1 - R IY0 - AH0\nGORILLA  G ER0 - IH1 - L AH0\nGORILLAS  G ER0 - IH1 - L AH0 Z\nGORIN  G AO1 - R AH0 N\nGORING  G AO1 - R IH0 NG\nGORIS  G AO1 - R AH0 S\nGORKA  G AO1 R - K AH0\nGORKI  G AO1 R - K IY0\nGORKY  G AO1 R - K IY0\nGORKY'S  G AO1 R - K IY0 Z\nGORLEY  G AO1 R - L IY0\nGORMAN  G AO1 R - M AH0 N\nGORMLEY  G AO1 R M - L IY0\nGORMLY  G AO1 R M - L IY0\nGORNEY  G AO1 R - N IY0\nGORNIAK  G AO1 R - N IY0 - AE0 K\nGORNICK  G AO1 R - N IH0 K\nGORNIK  G AO1 R - N IH0 K\nGORNTO  G AO1 R N - T OW0\nGORNY  G AO1 R - N IY0\nGOROSPE  G AO0 - R OW1 - S P EY0\nGORR  G AO1 R\nGORRELL  G AO0 - R EY1 L\nGORRID  G AO1 - R AH0 D\nGORRIDS  G AO1 - R AH0 D Z\nGORSKI  G AO1 R S - K IY0\nGORSKY  G AO1 R S - K IY0\nGORSLINE  G AO1 R S - L AY2 N\nGORSUCH  G AO1 R - S AH0 CH\nGORT  G AO1 R T\nGORTARI  G AO0 R - T AA1 - R IY0\nGORTER  G AO1 R - T ER0\nGORTNEY  G AO1 R T - N IY0\nGORTON  G AO1 R - T AH0 N\nGORUM  G AO1 - R AH0 M\nGORY  G AO1 - R IY0\nGOSA  G OW1 - S AH0\nGOSBANK  G AO1 S - B AE2 NG K\nGOSCH  G AO1 SH\nGOSDIN  G AA1 S - D IH0 N\nGOSE  G OW1 Z\nGOSH  G AA1 SH\nGOSHA  G OW1 - SH AH0\nGOSHAWK  G AA1 S - HH AO2 K\nGOSHEN  G OW1 - SH IH0 N\nGOSHORN  G AA1 - SH ER0 N\nGOSLEE  G AA1 S - L IY0\nGOSLIN  G AA1 - S L IH0 N\nGOSLINE  G AA1 S - L AY0 N\nGOSMAN  G AA1 S - M AH0 N\nGOSNELL  G AA1 S - N AH0 L\nGOSNEY  G AA1 S - N IY0\nGOSORNSTEM  G AH0 - S AO1 R N - S T EH0 M\nGOSPEL  G AA1 - S P AH0 L\nGOSPEL(2)  G AO1 - S P AH0 L\nGOSPELS  G AA1 - S P AH0 L Z\nGOSPLAN  G AO1 S - P L AE2 N\nGOSS  G AO1 S\nGOSSAGE  G AO1 - S IH0 JH\nGOSSAMER  G AA1 - S AH0 - M ER0\nGOSSARD  G AH0 - S AA1 R D\nGOSSE  G AA1 S\nGOSSELIN  G AA1 - S IH0 - L IH0 N\nGOSSEN  G AO1 - S AH0 N\nGOSSER  G AO1 - S ER0\nGOSSETT  G AA1 - S IH0 T\nGOSSIP  G AA1 - S AH0 P\nGOSSIPER  G AA1 - S AH0 - P ER0\nGOSSIPERS  G AA1 - S AH0 - P ER0 Z\nGOSSIPING  G AA1 - S AH0 - P IH0 NG\nGOSSIPS  G AA1 - S AH0 P S\nGOSSIPY  G AA1 - S AH0 - P IY0\nGOSSMAN  G AO1 S - M AH0 N\nGOSTEV  G AO1 - S T AH0 V\nGOSTOMSKI  G AH0 - S T AA1 M - S K IY0\nGOSWICK  G AA1 - S W IH0 K\nGOT  G AA1 T\nGOTAAS  G AA1 - T AA2 S\nGOTBAUM  G AA1 T - B AO0 M\nGOTBAUM(2)  G AA1 T - B AW2 M\nGOTCH  G AA1 CH\nGOTCHA  G AA1 - CH AH0\nGOTCHER  G AA1 - CH ER0\nGOTH  G AA1 TH\nGOTHAM  G AA1 - TH AH0 M\nGOTHARD  G AA1 - TH ER0 D\nGOTHENBURG  G OW1 - T AH0 N - B ER0 G\nGOTHENBURG(2)  G AA1 - T AH0 N - B ER0 G\nGOTHIC  G AA1 - TH IH0 K\nGOTLIEB  G AA1 T - L IY2 B\nGOTO  G OW1 - T UW2\nGOTO(2)  G OW1 - T OW0\nGOTSCH  G AA1 CH\nGOTSCHAL  G AA1 - CH AH0 L\nGOTSCHALL  G AA1 - CH AH0 L\nGOTSHAL  G AA1 - CH AH0 L\nGOTSHAL'S  G AA1 - CH AH0 L Z\nGOTSHALL  G AA1 - CH AH0 L\nGOTT  G AA1 T\nGOTTA  G AA1 - T AH0\nGOTTEN  G AA1 - T AH0 N\nGOTTEN(2)  G AO1 - T AH0 N\nGOTTERDAMMERUNG  G AA1 - T ER0 - D AE2 - M ER0 - AH0 NG\nGOTTESMAN  G AA1 T S - M AH0 N\nGOTTFRIED  G AO1 T - F R IY0 D\nGOTTHARDT  G AA1 - TH AA0 R T\nGOTTHELF  G AA1 T - HH EH2 L F\nGOTTI  G AA1 - T IY0\nGOTTIS  G AA1 - T IH0 S\nGOTTIS(2)  G AA1 - T IY0 Z\nGOTTLIEB  G AA1 T - L IY2 B\nGOTTLIEB'S  G AA1 T - L IY2 B Z\nGOTTMAN  G AA1 T - M AH0 N\nGOTTS  G AA1 T S\nGOTTSCH  G AA1 CH\nGOTTSCHALK  G AA1 - CH AH0 K\nGOTTSCHALKS  G AA1 - CH AH0 K S\nGOTTSCHALL  G AA1 - CH AH0 L\nGOTTSHALL  G AA1 - CH AH0 L\nGOTTWALD  G AA1 - T W AH0 L D\nGOTWALT  G AA1 - T W AH0 L T\nGOTZ  G AA1 T S\nGOUCHER  G AW1 - K ER0\nGOUDE  G AW1 D\nGOUDEAU  G UW2 - D OW1\nGOUDIE  G AW1 - D IY0\nGOUDREAU  G UW2 - D R OW1\nGOUDY  G AW1 - D IY0\nGOUGE  G AW1 JH\nGOUGED  G AW1 JH D\nGOUGEON  G AW1 - JH IH0 N\nGOUGER  G AW1 - JH ER0\nGOUGH  G AO1 F\nGOUGHNOUR  G AW1 - N ER0\nGOUGING  G AW1 - JH IH0 NG\nGOUIN  G W IY1 N\nGOUKER  G AW1 - K ER0\nGOULART  G UW0 - L AA1 R T\nGOULASH  G UW1 - L AA2 SH\nGOULD  G UW1 L D\nGOULD'S  G UW1 L D Z\nGOULDEN  G UH1 - D AH0 N\nGOULDING  G UW1 L - D IH0 NG\nGOULET  G UW0 - L EH1 T\nGOULETTE  G UW2 - L EH1 T\nGOULSTON  G UW1 L - S T AH0 N\nGOUPIL  G UW1 - P AH0 L\nGOURD  G AO1 R D\nGOURDINE  G UH0 R - D AY1 N\nGOURDS  G AO1 R D Z\nGOURLAY  G AO1 R - L EY0\nGOURLEY  G AO1 R - L IY0\nGOURMENT  G AO2 R - M EH1 N T\nGOURMET  G UH1 R - M EY2\nGOURMETS  G UH1 R - M EY2 Z\nGOUSHA  G UW1 - SH AH0\nGOUT  G AW1 T\nGOUTAL  G UW1 - T AH0 L\nGOUTY  G AW1 - T IY0\nGOUVEA  G UW0 - V EY1 - AH0\nGOUVEIA  G UW0 - V EY1 - IY0 - AH0\nGOV  G AH1 V\nGOV(2)  G AH1 - V ER0 - N ER0\nGOVAN  G OW1 - V AH0 N\nGOVE  G OW1 V\nGOVEA  G AH1 - V IY0 - AH0\nGOVER  G AH1 - V ER0\nGOVERN  G AH1 - V ER0 N\nGOVERNALE  G AH1 - V ER0 - N EY2 L\nGOVERNANCE  G AH1 - V ER0 - N AH0 N S\nGOVERNED  G AH1 - V ER0 N D\nGOVERNESS  G AH1 - V ER0 - N AH0 S\nGOVERNING  G AH1 - V ER0 - N IH0 NG\nGOVERNMENT  G AH1 - V ER0 - M AH0 N T\nGOVERNMENT'S  G AH1 - V ER0 - M AH0 N T S\nGOVERNMENT'S(2)  G AH1 - V ER0 N - M AH0 N T S\nGOVERNMENT(2)  G AH1 - V ER0 N - M AH0 N T\nGOVERNMENTAL  G AH1 - V ER0 - M EH2 N - T AH0 L\nGOVERNMENTAL(2)  G AH2 - V ER0 N - M EH1 N - T AH0 L\nGOVERNMENTALLY  G AH1 - V ER0 - M EH2 N - T AH0 - L IY0\nGOVERNMENTALLY(2)  G AH1 - V ER0 - M EH2 - N AH0 - L IY0\nGOVERNMENTS  G AH1 - V ER0 - M AH0 N T S\nGOVERNMENTS'  G AH1 - V ER0 N - M AH0 N T S\nGOVERNMENTS'(2)  G AH1 - V ER0 - M AH0 N T S\nGOVERNMENTS(2)  G AH1 - V ER0 N - M AH0 N T S\nGOVERNOR  G AH1 - V ER0 - N ER0\nGOVERNOR'S  G AH1 - V ER0 - N ER0 Z\nGOVERNORS  G AH1 - V ER0 - N ER0 Z\nGOVERNORS'  G AH1 - V ER0 - N ER0 Z\nGOVERNORSHIP  G AH1 - V ER0 - N ER0 - SH IH2 P\nGOVERNORSHIPS  G AH1 - V ER0 - N ER0 - SH IH2 P S\nGOVERNS  G AH1 - V ER0 N Z\nGOVETT  G AH1 - V AH0 T\nGOVIER  G OW1 - V IY0 - ER0\nGOVONI  G OW0 - V OW1 - N IY0\nGOVPX  G AH1 V - P IY2 - EH1 K S\nGOVS  G AA1 V Z\nGOVS(2)  G AA1 - V ER0 - N ER0 Z\nGOW  G AW1\nGOWAN  G AW1 - AH0 N\nGOWANS  G AW1 - AH0 N Z\nGOWARD  G OW1 - W ER0 D\nGOWDY  G AW1 - D IY0\nGOWELL  G AA1 - W EH0 L\nGOWEN  G AW1 - AH0 N\nGOWENS  G AW1 - AH0 N Z\nGOWER  G AW1 - ER0\nGOWIN  G AW1 - IH0 N\nGOWING  G AW1 - IH0 NG\nGOWINS  G AW1 - IH0 N Z\nGOWN  G AW1 N\nGOWNS  G AW1 N Z\nGOY  G OY1\nGOYA  G OY1 - AH0\nGOYER  G OY1 - ER0\nGOYETTE  G OY2 - EH1 T\nGOYIM  G OY1 - IH0 M\nGOYKO  G OY1 - K OW0\nGOYNE  G OY1 N\nGOYNES  G OY1 N Z\nGOZA  G OW1 - Z AH0\nGOZO  G OW1 - Z OW0\nGOZO'S  G OW1 - Z OW0 Z\nGOZOFSKY  G AH0 - Z AO1 F S - K IY0\nGRAB  G R AE1 B\nGRABAU  G R AE1 - B AW0\nGRABBE  G R AE1 B\nGRABBED  G R AE1 B D\nGRABBER  G R AE1 - B ER0\nGRABBERS  G R AE1 - B ER0 Z\nGRABBING  G R AE1 - B IH0 NG\nGRABE  G R EY1 B\nGRABEL  G R AE1 - B AH0 L\nGRABEN  G R AE1 - B AH0 N\nGRABENS  G R AA1 - B AH0 N Z\nGRABENSTEIN  G R AE1 - B AH0 N - S T AY2 N\nGRABENSTEIN(2)  G R AE1 - B AH0 N - S T IY2 N\nGRABER  G R EY1 - B ER0\nGRABERT  G R AE1 - B ER0 T\nGRABILL  G R AH0 - B IH1 L\nGRABINSKI  G R AH0 - B IH1 N - S K IY0\nGRABLE  G R EY1 - B AH0 L\nGRABNER  G R AE1 B - N ER0\nGRABOSKI  G R AH0 - B AW1 S - K IY0\nGRABOW  G R AE1 - B OW0\nGRABOWSKI  G R AH0 - B AO1 F S - K IY0\nGRABOY  G R EY1 - B OY0\nGRABS  G R AE1 B Z\nGRABSKI  G R AE1 B - S K IY2\nGRACE  G R EY1 S\nGRACE'S  G R EY1 - S IH0 Z\nGRACED  G R EY1 S T\nGRACEFFA  G R AH0 - S EH1 - F AH0\nGRACEFUL  G R EY1 S - F AH0 L\nGRACEFULLY  G R EY1 S - F AH0 - L IY0\nGRACELAND  G R EY1 S - L AE0 N D\nGRACELESS  G R EY1 S - L AH0 S\nGRACES  G R EY1 - S IH0 Z\nGRACEY  G R EY1 - S IY0\nGRACHEV  G R AA1 - CH EH0 V\nGRACHEV'S  G R AA1 - CH EH0 V Z\nGRACHOV  G R AA1 - CH AO1 V\nGRACI  G R AA1 - CH IY0\nGRACIA  G R AA1 - CH AH0\nGRACIANO  G R AA0 - CH IY0 - AA1 - N OW0\nGRACIE  G R EY1 - S IY0\nGRACILE  G R AE1 - S AH0 L\nGRACIOUS  G R EY1 - SH AH0 S\nGRACIOUSLY  G R EY1 - SH AH0 S - L IY0\nGRACIOUSNESS  G R EY1 - SH AH0 S - N AH0 S\nGRACKLE  G R AE1 - K AH0 L\nGRACKLES  G R AE1 - K AH0 L Z\nGRACO  G R AE1 - K OW0\nGRACY  G R EY1 - S IY0\nGRACZYK  G R AA1 - CH IH0 K\nGRAD  G R AE1 D\nGRADATION  G R EY0 - D EY1 - SH AH0 N\nGRADATIONS  G R EY0 - D EY1 - SH AH0 N Z\nGRADCHEV  G R AE1 D - CH EH0 F\nGRADCHEV(2)  G R AE1 D - CH AO0 V\nGRADCO  G R AE1 D - K OW0\nGRADDY  G R AE1 - D IY0\nGRADE  G R EY1 D\nGRADED  G R EY1 - D AH0 D\nGRADED(2)  G R EY1 - D IH0 D\nGRADEL  G R AE1 - D AH0 L\nGRADEN  G R EY1 - D AH0 N\nGRADER  G R EY1 - D ER0\nGRADERS  G R EY1 - D ER0 Z\nGRADES  G R EY1 D Z\nGRADING  G R EY1 - D IH0 NG\nGRADISON  G R AE1 - D IH0 S - AH0 N\nGRADNEY  G R AE1 D - N IY0\nGRADO  G R AA1 - D OW0\nGRADOV  G R EY1 - D AO0 F\nGRADOVS  G R EY1 - D AO0 F S\nGRADS  G R AE1 D Z\nGRADSTEIN  G R AE1 D - S T IY0 N\nGRADSTEIN'S  G R AE1 D - S T IY0 N Z\nGRADSTEIN'S(2)  G R AE1 D - S T AY0 N Z\nGRADSTEIN(2)  G R AE1 D - S T AY0 N\nGRADUAL  G R AE1 - JH UW0 - AH0 L\nGRADUALISM  G R AE1 - JH AH0 W - AH0 - L IH2 - Z AH0 M\nGRADUALIST  G R AE1 - JH AH0 W - AH0 - L IH0 S T\nGRADUALLY  G R AE1 - JH UW0 - AH0 - L IY0\nGRADUALLY(2)  G R AE1 - JH UW0 - L IY0\nGRADUATE  G R AE1 - JH AH0 W - AH0 T\nGRADUATE(2)  G R AE1 - JH AH0 W - EY2 T\nGRADUATE(3)  G R AE1 - JH UW0 - W AH0 T\nGRADUATE(4)  G R AE1 - JH UW0 - EY2 T\nGRADUATED  G R AE1 - JH UW0 - EY2 - T IH0 D\nGRADUATED(2)  G R AE1 - JH AH0 W - EY2 - T IH0 D\nGRADUATES  G R AE1 - JH AH0 W - AH0 T S\nGRADUATES(2)  G R AE1 - JH AH0 W - EY2 T S\nGRADUATES(3)  G R AE1 - JH UW0 W - AH0 T S\nGRADUATES(4)  G R AE1 - JH UW0 - EY2 T S\nGRADUATING  G R AE1 - JH AH0 W - EY2 - T IH0 NG\nGRADUATING(2)  G R AE1 - JH UW0 - EY2 - T IH0 NG\nGRADUATION  G R AE2 - JH UW0 - EY1 - SH AH0 N\nGRADUATION(2)  G R AE2 - JH AH0 W - EY1 - SH AH0 N\nGRADUATIONS  G R AE2 - JH UW0 - EY1 - SH AH0 N Z\nGRADUATIONS(2)  G R AE2 - JH AH0 W - EY1 - SH AH0 N Z\nGRADUS  G R EY1 - D AH0 S\nGRADY  G R EY1 - D IY0\nGRAEBER  G R EH1 - B ER0\nGRAEBNER  G R EH1 B - N ER0\nGRAEF  G R IY1 F\nGRAEF(2)  G R AE1 F\nGRAEFE  G R IY1 F\nGRAEFE(2)  G R AE1 F\nGRAEFF  G R IY1 F\nGRAEFF(2)  G R AE1 F\nGRAEME  G R EY1 M\nGRAEME(2)  G R AE1 M\nGRAESER  G R EY1 - Z ER0\nGRAESSLE  G R EH1 - S AH0 L\nGRAETZ  G R IY1 T S\nGRAF  G R AE1 F\nGRAFE  G R EY1 F\nGRAFF  G R AE1 F\nGRAFFAM  G R AE1 - F AH0 M\nGRAFFEO  G R AA1 - F IY0 - OW0\nGRAFFITI  G R AH0 - F IY1 - T IY0\nGRAFFIUS  G R AE1 - F IY0 - IH0 S\nGRAFT  G R AE1 F T\nGRAFTED  G R AE1 F - T IH0 D\nGRAFTING  G R AE1 F - T IH0 NG\nGRAFTON  G R AE1 F - T AH0 N\nGRAFTS  G R AE1 F T S\nGRAGE  G R EY1 JH\nGRAGERT  G R EY1 - G ER0 T\nGRAGG  G R AE1 G\nGRAHAM  G R EY1 - AH0 M\nGRAHAM'S  G R EY1 - AH0 M Z\nGRAHAM'S(2)  G R AE1 M Z\nGRAHAM(2)  G R AE1 M\nGRAHAMS  G R AE1 M Z\nGRAHAMS(2)  G R EY1 - AH0 M Z\nGRAHEK  G R AE1 - HH IH0 K\nGRAHL  G R AA1 L\nGRAHN  G R AE1 N\nGRAICHEN  G R AY1 - K AH0 N\nGRAIL  G R EY1 L\nGRAIN  G R EY1 N\nGRAINED  G R EY1 N D\nGRAINERY  G R EY1 - N ER0 - IY0\nGRAINGER  G R AA1 - IH0 - NG ER0\nGRAINS  G R EY1 N Z\nGRAINY  G R EY1 - N IY0\nGRAJEDA  G R AY0 - IY1 - D AH0\nGRALEY  G R AE1 - L IY0\nGRALL  G R AO1 L\nGRAM  G R AE1 M\nGRAMA  G R AE1 - M AH0\nGRAMAPHONE  G R AE1 - M AH0 - F OW2 N\nGRAMBLING  G R AE1 M - B L IH0 NG\nGRAMBLING(2)  G R AE1 M - B AH0 L - IH0 NG\nGRAMER  G R EY1 - M ER0\nGRAMERCY  G R AH0 - M ER1 - S IY0\nGRAMERSEY  G R AH0 - M ER1 - S IY0\nGRAMES  G R EY1 M Z\nGRAMLEY  G R AE1 M - L IY0\nGRAMLICH  G R AE1 M - L IH0 K\nGRAMLING  G R AE1 M - L IH0 NG\nGRAMM  G R AE1 M\nGRAMM'S  G R AE1 M Z\nGRAMMAR  G R AE1 - M ER0\nGRAMMATICAL  G R AH0 - M AE1 - T AH0 - K AH0 L\nGRAMMATICAL(2)  G R AH0 - M AE1 - T IH0 - K AH0 L\nGRAMMATICO  G R AA0 - M AA0 - T IY1 - K OW0\nGRAMMER  G R AE1 - M ER0\nGRAMMIES  G R AE1 - M IY2 Z\nGRAMMOPHON  G R AE1 - M AH0 - F AA0 N\nGRAMMS  G R AE1 M Z\nGRAMMY  G R AE1 - M IY0\nGRAMMY'S  G R AE1 - M IY0 Z\nGRAMMYS  G R AE1 - M IY0 Z\nGRAMS  G R AE1 M Z\nGRAMZA  G R AE1 M - Z AH0\nGRAN  G R AE1 N\nGRANA  G R AE1 - N AH0\nGRANADA  G R AH0 - N AA1 - D AH0\nGRANADA'S  G R AH0 - N AA1 - D AH0 Z\nGRANADE  G R AH0 - N EY1 D\nGRANADO  G R AA0 - N AA1 - D OW0\nGRANADOS  G R AA0 - N AA1 - D OW0 Z\nGRANAHAN  G R AE1 - N AH0 - HH AE0 N\nGRANAT  G R AE1 - N AH0 T\nGRANATA  G R AA0 - N AA1 - T AH0\nGRANATO  G R AA0 - N AA1 - T OW0\nGRANBERG  G R AE1 N - B ER0 G\nGRANBERRY  G R AE1 N - B EH2 - R IY0\nGRANCARE  G R AE1 N - K EH2 R\nGRAND  G R AE1 N D\nGRAND'S  G R AE1 N D Z\nGRANDA  G R AE1 N - D AH0\nGRANDAD  G R AE1 N - D AE2 D\nGRANDBABY  G R AE1 N D - B EY2 - B IY0\nGRANDBABY(2)  G R AE1 N - B EY2 - B IY0\nGRANDBERRY  G R AE1 N D - B EH2 - R IY0\nGRANDCHAMP  G R AE1 N D - CH AE2 M P\nGRANDCHILD  G R AE1 N D - CH AY2 L D\nGRANDCHILD(2)  G R AE1 N - CH AY2 L D\nGRANDCHILDREN  G R AE1 N - CH IH2 L - D R AH0 N\nGRANDCHILDREN'S  G R AE1 N - CH IH2 L - D R AH0 N Z\nGRANDCHILDREN'S(2)  G R AE1 N D - CH IH2 L - D R AH0 N Z\nGRANDCHILDREN(2)  G R AE1 N D - CH IH2 L - D R AH0 N\nGRANDDADDY  G R AE1 N - D AE2 - D IY0\nGRANDDAUGHTER  G R AE1 N - D AO2 - T ER0\nGRANDDAUGHTER'S  G R AE1 N - D AO2 - T ER0 Z\nGRANDDAUGHTERS  G R AE1 N - D AO2 - T ER0 Z\nGRANDE  G R AE1 N D\nGRANDER  G R AE1 N - D ER0\nGRANDERSON  G R AE1 N - D ER0 - S AH0 N\nGRANDEST  G R AE1 N - D AH0 S T\nGRANDEUR  G R AE0 N - D UW1 R\nGRANDFATHER  G R AE1 N D - F AA2 - DH ER0\nGRANDFATHER'S  G R AE1 N D - F AA2 - DH ER0 Z\nGRANDFATHER'S(2)  G R AE1 N - F AA2 - DH ER0 Z\nGRANDFATHER(2)  G R AE1 N - F AA2 - DH ER0\nGRANDFATHERED  G R AE1 N D - F AA2 - DH ER0 D\nGRANDFATHERED(2)  G R AE1 N - F AA2 - DH ER0 D\nGRANDFATHERING  G R AE1 N D - F AA2 - DH ER0 - IH0 NG\nGRANDFATHERING(2)  G R AE1 N - F AA2 - DH ER0 - IH0 NG\nGRANDFATHERLY  G R AE1 N D - F AA2 - DH ER0 - L IY0\nGRANDFATHERLY(2)  G R AE1 N - F AA2 - DH ER0 - L IY0\nGRANDFATHERS  G R AE1 N D - F AA2 - DH ER0 Z\nGRANDFATHERS(2)  G R AE1 N - F AA2 - DH ER0 Z\nGRANDFIELD  G R AE1 N D - F IY2 L D\nGRANDI  G R AE1 N - D IY0\nGRANDILLO  G R AE0 N - D IH1 - L OW0\nGRANDILOQUENT  G R AE0 N - D IH1 - L AH0 - K W AH0 N T\nGRANDIN  G R AE1 N - D IH2 N\nGRANDINETTI  G R AE0 N - D IY0 - N EH1 - T IY0\nGRANDIOSE  G R AE2 N - D IY0 - OW1 S\nGRANDIOSE(2)  G R AE1 N - D IY0 - OW2 S\nGRANDIS  G R AE1 N - D IH0 S\nGRANDISON  G R AE1 N - D IH0 - S AH0 N\nGRANDKID  G R AE1 N D - K IH2 D\nGRANDKID(2)  G R AE1 N - K IH2 D\nGRANDKIDS  G R AE1 N D - K IH2 D Z\nGRANDKIDS(2)  G R AE1 N - K IH2 D Z\nGRANDLY  G R AE1 N D - L IY0\nGRANDMA  G R AE1 - M AA0\nGRANDMA'S  G R AE1 N D - M AA2 Z\nGRANDMA'S(2)  G R AE1 - M AA2 Z\nGRANDMA(2)  G R AE1 N D - M AA0\nGRANDMAISON  G R AE1 N D - M AY2 - Z AA1 N\nGRANDMAISON(2)  G R AE1 N D - M EY1 - S AH0 N\nGRANDMAS  G R AE1 N D - M AA2 Z\nGRANDMAS(2)  G R AE1 N - M AA2 Z\nGRANDMAS(3)  G R AE1 - M AA2 Z\nGRANDMASTER  G R AE1 N D - M AE1 - S T ER0\nGRANDMASTER(2)  G R AE1 N - M AE1 - S T ER0\nGRANDMET  G R AE1 N D - M EH2 T\nGRANDMOTHER  G R AE1 N D - M AH2 - DH ER0\nGRANDMOTHER'S  G R AE1 N D - M AH2 - DH ER0 Z\nGRANDMOTHER'S(2)  G R AE1 - M AH2 - DH ER0 Z\nGRANDMOTHER'S(3)  G R AE1 N - M AH2 - DH ER0 Z\nGRANDMOTHER(2)  G R AE1 N - M AH2 - DH ER0\nGRANDMOTHER(3)  G R AE1 - M AH2 - DH ER0\nGRANDMOTHERLY  G R AE1 N D - M AH2 - DH ER0 - L IY0\nGRANDMOTHERLY(2)  G R AE1 N - M AH2 - DH ER0 - L IY0\nGRANDMOTHERLY(3)  G R AE1 - M AH2 - DH ER0 - L IY0\nGRANDMOTHERS  G R AE1 N D - M AH2 - DH ER0 Z\nGRANDMOTHERS(2)  G R AE1 N - M AH2 - DH ER0 Z\nGRANDMOTHERS(3)  G R AE1 - M AH2 - DH ER0 Z\nGRANDNEPHEW  G R AE1 N D - N EH1 - F Y UW0\nGRANDNEPHEW(2)  G R AE1 N - N EH1 - F Y UW0\nGRANDON  G R AE1 N - D AA0 N\nGRANDPA  G R AE1 N D - P AA2\nGRANDPA(2)  G R AE1 N - P AA2\nGRANDPA(3)  G R AE1 M - P AA2\nGRANDPARENT  G R AE1 N D - P EH2 - R AH0 N T\nGRANDPARENT(2)  G R AE1 N - P EH2 - R AH0 N T\nGRANDPARENT(3)  G R AE1 M - P EH2 - R AH0 N T\nGRANDPARENTS  G R AE1 N D - P EH2 - R AH0 N T S\nGRANDPARENTS'  G R AE1 N D - P EH2 - R AH0 N T S\nGRANDPARENTS'(2)  G R AE1 N - P EH2 - R AH0 N T S\nGRANDPARENTS'(3)  G R AE1 M - P EH2 - R AH0 N T S\nGRANDPARENTS(2)  G R AE1 N - P EH2 - R AH0 N T S\nGRANDPARENTS(3)  G R AE1 M - P EH2 - R AH0 N T S\nGRANDPRE  G R AE1 N D - P R EY2\nGRANDS  G R AE1 N D Z\nGRANDSON  G R AE1 N D - S AH2 N\nGRANDSON'S  G R AE1 N D - S AH2 N Z\nGRANDSON'S(2)  G R AE1 N - S AH2 N Z\nGRANDSON(2)  G R AE1 N - S AH2 N\nGRANDSONS  G R AE1 N D - S AH2 N Z\nGRANDSONS(2)  G R AE1 N - S AH2 N Z\nGRANDSTAFF  G R AE1 N D - S T AE2 F\nGRANDSTAFF(2)  G R AE1 N S - T AE2 F\nGRANDSTAND  G R AE1 N D - S T AE2 N D\nGRANDSTAND(2)  G R AE1 N S - T AE2 N D\nGRANDSTANDING  G R AE1 N D - S T AE2 N - D IH0 NG\nGRANDSTANDING(2)  G R AE1 N S - T AE2 N - D IH0 NG\nGRANDT  G R AE1 N T\nGRANDUNCLE  G R AE1 N D - AH1 NG - K AH0 L\nGRANDVIEW  G R AE1 N D - V Y UW2\nGRANDY  G R AE1 N - D IY0\nGRANER  G R EY1 - N ER0\nGRANESE  G R AE1 - N IY0 Z\nGRANEY  G R EY1 - N IY0\nGRANFIELD  G R AE1 N - F IY2 L D\nGRANGE  G R EY1 N JH\nGRANGER  G R EY1 N - JH ER0\nGRANGERS  G R EY1 N - JH ER0 Z\nGRANGES  G R EY1 N - JH IH0 Z\nGRANHOLM  G R AE1 N - HH OW2 L M\nGRANIER  G R EY1 - N IY0 - ER0\nGRANIERI  G R AA0 - N IH1 - R IY0\nGRANILLO  G R AH0 - N IH1 - L OW0\nGRANINGEVERKEN  G R AE2 - N IH0 NG - G EH1 - V ER0 - K AH0 N\nGRANINGEVERKEN'S  G R AE2 - N IH0 NG - G EH1 - V ER0 - K AH0 N Z\nGRANITE  G R AE1 - N AH0 T\nGRANITE(2)  G R AE1 - N IH0 T\nGRANITIC  G R AH0 - N IH1 - T IH0 K\nGRANITO  G R AA0 - N IY1 - T OW0\nGRANLUND  G R AE1 N - L AH0 N D\nGRANNAN  G R AE1 - N AH0 N\nGRANNIS  G R AE1 - N IH0 S\nGRANNY  G R AE1 - N IY0\nGRANO  G R AA1 - N OW0\nGRANOFF  G R AE1 - N AO0 F\nGRANOLA  G R AH0 - N OW1 - L AH0\nGRANQUIST  G R AE1 N - K W IH2 S T\nGRANSTROM  G R AE1 N S - T R AH0 M\nGRANT  G R AE1 N T\nGRANT'S  G R AE1 N T S\nGRANTED  G R AE1 N - T AH0 D\nGRANTED(2)  G R AE1 N - T IH0 D\nGRANTED(3)  G R AE1 - N AH0 D\nGRANTED(4)  G R AE1 - N IH0 D\nGRANTHAM  G R AE1 N - TH AH0 M\nGRANTING  G R AE1 N - T IH0 NG\nGRANTING(2)  G R AE1 - N IH0 NG\nGRANTLAND  G R AE1 N T - L AH0 N D\nGRANTOR  G R AE1 N - T ER0\nGRANTORS  G R AE1 N - T ER0 Z\nGRANTREE  G R AE1 N - T R IY2\nGRANTREE'S  G R AE1 N - T R IY2 Z\nGRANTS  G R AE1 N T S\nGRANTZ  G R AE1 N T S\nGRANULAR  G R AE1 - N Y AH0 - L ER0\nGRANULATION  G R AE2 - N Y AH0 - L EY1 - SH AH0 N\nGRANULE  G R AE1 - N Y AH0 L\nGRANULES  G R AE1 - N Y AH0 L Z\nGRANULOCYTE  G R AH0 - N UW1 - L OW0 - S AY2 T\nGRANUM  G R AE1 - N AH0 M\nGRANVILLE  G R AE1 N - V IH0 L\nGRANVILLE'S  G R AE1 N - V IH0 L Z\nGRANZ  G R AE1 N T S\nGRANZOW  G R AE1 N - Z OW0\nGRAPAGE  G R EY1 - P AH0 JH\nGRAPE  G R EY1 P\nGRAPEFRUIT  G R EY1 P - F R UW2 T\nGRAPEFRUITS  G R EY1 P - F R UW2 T S\nGRAPER  G R EY1 - P ER0\nGRAPES  G R EY1 P S\nGRAPESHOT  G R EY1 P - SH AA2 T\nGRAPEVINE  G R EY1 P - V AY2 N\nGRAPEVINES  G R EY1 P - V AY2 N Z\nGRAPH  G R AE1 F\nGRAPHIC  G R AE1 - F IH0 K\nGRAPHICAL  G R AE1 - F IH0 - K AH0 L\nGRAPHICALLY  G R AE1 - F IH0 K - L IY0\nGRAPHICS  G R AE1 - F IH0 K S\nGRAPHICS'  G R AE1 - F IH0 K S\nGRAPHITE  G R AE1 - F AY2 T\nGRAPHOLOGY  G R AH0 - F AA1 - L AH0 - JH IY0\nGRAPHS  G R AE1 F S\nGRAPPLE  G R AE1 - P AH0 L\nGRAPPLED  G R AE1 - P AH0 L D\nGRAPPLES  G R AE1 - P AH0 L Z\nGRAPPLING  G R AE1 - P L IH0 NG\nGRAPPLING(2)  G R AE1 - P AH0 L - IH0 NG\nGRAS  G R AE1 S\nGRAS(2)  G R AA1\nGRASER  G R EY1 - Z ER0\nGRASMICK  G R AE1 Z - M IH0 K\nGRASP  G R AE1 S P\nGRASPED  G R AE1 S P T\nGRASPING  G R AE1 - S P IH0 NG\nGRASPS  G R AE1 S P S\nGRASS  G R AE1 S\nGRASSE  G R AE1 S\nGRASSED  G R AE1 S T\nGRASSEL  G R AE1 - S AH0 L\nGRASSER  G R AE1 - S ER0\nGRASSERS  G R AE1 - S ER0 Z\nGRASSES  G R AE1 - S AH0 Z\nGRASSES(2)  G R AE1 - S IH0 Z\nGRASSFIELD  G R AE1 S - F IY2 L D\nGRASSFIELD'S  G R AE1 S - F IY2 L D Z\nGRASSGREEN  G R AE1 S - G R IY2 N\nGRASSHOPPER  G R AE1 S - HH AA2 - P ER0\nGRASSHOPPERS  G R AE1 S - HH AA2 - P ER0 Z\nGRASSI  G R AE1 - S IY0\nGRASSIA  G R AA1 - S IY0 - AH0\nGRASSL  G R AE1 - S AH0 L\nGRASSLAND  G R AE1 S - L AE2 N D\nGRASSLANDS  G R AE1 S - L AE2 N D Z\nGRASSLEY  G R AE1 S - L IY0\nGRASSLIKE  G R AE1 S - L AY2 K\nGRASSMAN  G R AE1 S - M AH0 N\nGRASSO  G R AE1 - S OW0\nGRASSROOT  G R AE1 S - R UW1 T\nGRASSROOTS  G R AE1 S - R UW1 T S\nGRASSY  G R AE1 - S IY0\nGRASTY  G R AE1 - S T IY0\nGRATA  G R AA1 - T AH0\nGRATE  G R EY1 T\nGRATED  G R EY1 - T IH0 D\nGRATEFUL  G R EY1 T - F AH0 L\nGRATEFULLY  G R EY1 T - F AH0 - L IY0\nGRATER  G R EY1 - T ER0\nGRATES  G R EY1 T S\nGRATHWOHL  G R AE1 TH - W OW2 L\nGRATIFICATION  G R AE2 - T AH0 - F AH0 - K EY1 - SH AH0 N\nGRATIFIED  G R AE1 - T AH0 - F AY2 D\nGRATIFY  G R AE1 - T AH0 - F AY2\nGRATIFYING  G R AE1 - T AH0 - F AY2 - IH0 NG\nGRATING  G R EY1 - T IH0 NG\nGRATIS  G R AE1 - T AH0 S\nGRATITUDE  G R AE1 - T AH0 - T UW2 D\nGRATTAN  G R AE1 - T AH0 N\nGRATTON  G R AE1 - T AH0 N\nGRATUITIES  G R AH0 - T UW1 - IH0 - T IY0 Z\nGRATUITOUS  G R AH0 - T UW1 - AH0 - T AH0 S\nGRATUITOUSLY  G R AH0 - T UW1 - AH0 - T AH0 S - L IY0\nGRATUITY  G R AH0 - T UW1 - IH0 - T IY0\nGRATZ  G R AE1 T S\nGRATZER  G R EY1 T - Z ER0\nGRAU  G R AW1\nGRAUBERGER  G R AW1 - B ER0 - G ER0\nGRAUE  G R AW1\nGRAUE(2)  G R UW1\nGRAUEL  G R AW1 - AH0 L\nGRAUEL(2)  G R UW1 - AH0 L\nGRAUER  G R AW1 - ER0\nGRAUER(2)  G R UW1 - ER0\nGRAUL  G R AO1 L\nGRAUMAN  G R AO1 - M AH0 N\nGRAUMANN  G R AO1 - M AH0 N\nGRAUNKE  G R AO1 NG K\nGRAVANO  G R AH0 - V AA1 - N OW0\nGRAVANO(2)  G R AH0 - V AE1 - N OW0\nGRAVATT  G R AE1 - V AH0 T\nGRAVE  G R EY1 V\nGRAVEL  G R AE1 - V AH0 L\nGRAVELINE  G R EY1 V - L AY2 N\nGRAVELL  G R AE1 - V AH0 L\nGRAVELLE  G R AH0 - V EH1 L\nGRAVELLY  G R AE1 - V AH0 - L IY0\nGRAVELY  G R EY1 V - L IY0\nGRAVEN  G R EY1 - V AH0 N\nGRAVER  G R EY1 - V ER0\nGRAVES  G R EY1 V Z\nGRAVES'S  G R EY1 V - Z IH0 Z\nGRAVESIDE  G R EY1 V - S AY2 D\nGRAVESITE  G R EY1 V - S AY2 T\nGRAVEST  G R AE1 - V AH0 S T\nGRAVESTONE  G R EY1 V - S T OW2 N\nGRAVESTONES  G R EY1 V - S T OW2 N Z\nGRAVETT  G R AE1 - V IH0 T\nGRAVETTE  G R AH0 - V EH1 T\nGRAVEYARD  G R EY1 V - Y AA2 R D\nGRAVEYARDS  G R EY1 V - Y AA2 R D Z\nGRAVIES  G R EY1 - V IY0 Z\nGRAVIMETER  G R AE1 - V AH0 M - IY2 - T ER0\nGRAVIMETRIC  G R AE2 - V AH0 - M EH1 - T R IH0 K\nGRAVINA  G R AA0 - V IY1 - N AH0\nGRAVINO  G R AA0 - V IY1 - N OW0\nGRAVITAS  G R AE1 - V AH0 - T AH0 S\nGRAVITATE  G R AE1 - V IH0 - T EY2 T\nGRAVITATED  G R AE1 - V AH0 - T EY2 - T IH0 D\nGRAVITATES  G R AE1 - V IH0 - T EY2 T S\nGRAVITATING  G R AE1 - V IH0 - T EY2 - T IH0 NG\nGRAVITATION  G R AE2 - V IH0 - T EY1 - SH AH0 N\nGRAVITATIONAL  G R AE2 - V IH0 - T EY1 - SH AH0 - N AH0 L\nGRAVITATIONALLY  G R AE2 - V AH0 - T EY1 SH - N AH0 - L IY0\nGRAVITT  G R AE1 - V IH0 T\nGRAVITT'S  G R AE1 - V IH0 T S\nGRAVITY  G R AE1 - V AH0 - T IY0\nGRAVITY(2)  G R AE1 - V IH0 - T IY0\nGRAVLEY  G R AE1 V - L IY0\nGRAVLIN  G R AE1 V - L IH0 N\nGRAVOIS  G R AH0 V - W AA1\nGRAVY  G R EY1 - V IY0\nGRAW  G R AO1\nGRAWE  G R AO1\nGRAY  G R EY1\nGRAY'S  G R EY1 Z\nGRAYBEAL  G R EY1 - B AH0 L\nGRAYBEARD  G R EY1 - B IY0 R D\nGRAYBEARDS  G R EY1 - B IY0 R D Z\nGRAYBILL  G R EY1 - B IH2 L\nGRAYDON  G R EY1 - D AH0 N\nGRAYE  G R EY1\nGRAYER  G R EY1 - ER0\nGRAYEST  G R EY1 - IH0 S T\nGRAYING  G R EY1 - IH0 NG\nGRAYISH  G R EY1 - IH0 SH\nGRAYLING  G R EY1 - L IH0 NG\nGRAYS  G R EY1 Z\nGRAYSON  G R EY1 - S AH0 N\nGRAZE  G R EY1 Z\nGRAZED  G R EY1 Z D\nGRAZER  G R EY1 - Z ER0\nGRAZIANI  G R AA0 - Z IY0 - AA1 - N IY0\nGRAZIANO  G R AA0 T - S IY0 - AA1 - N OW0\nGRAZIER  G R EY1 - Z IY0 - ER0\nGRAZING  G R EY1 - Z IH0 NG\nGRBAVICA  G ER0 - B AA1 - V IH0 - K AH0\nGRBAVICA(2)  G ER2 - B AH0 - V AY1 - K AH0\nGREANEY  G R IY1 - N IY0\nGREAR  G R IH1 R\nGREASE  G R IY1 S\nGREASED  G R IY1 S T\nGREASER  G R IY1 - S ER0\nGREASEWOOD  G R IY1 S - W UH2 D\nGREASING  G R IY1 - S IH0 NG\nGREASON  G R IY1 - S AH0 N\nGREASY  G R IY1 - S IY0\nGREAT  G R EY1 T\nGREAT'S  G R EY1 T S\nGREAT-CIRCLE  G R EY1 T - S ER1 - K AH0 L\nGREATER  G R EY1 - T ER0\nGREATEST  G R EY1 - T AH0 S T\nGREATHOUSE  G R EY1 T - HH AW2 S\nGREATLY  G R EY1 T - L IY0\nGREATNESS  G R EY1 T - N AH0 S\nGREATS  G R EY1 T S\nGREAVE  G R IY1 V\nGREAVES  G R IY1 V Z\nGREB  G R EH1 B\nGREBE  G R IY1 B\nGREBER  G R IY1 - B ER0\nGREBNER  G R EH1 B - N ER0\nGRECCO  G R EH1 - K OW0\nGRECH  G R EH1 K\nGRECIAN  G R IY1 - SH AH0 N\nGRECKO  G R EH1 - K OW0\nGRECO  G R EH1 - K OW0\nGRECO-ROMAN  G R EH2 - K OW0 - R OW1 - M AH0 N\nGREDE  G R IY1 D\nGREDEL  G R EH1 - D AH0 L\nGREDITOR  G R EH1 - D IH0 - T ER0\nGREEAR  G R IY1 - ER0\nGREECE  G R IY1 S\nGREECE'S  G R IY1 - S IH0 Z\nGREED  G R IY1 D\nGREEDIER  G R IY2 - D IY0 - ER0\nGREEDIEST  G R IY2 - D IY0 - IH0 S T\nGREEDILY  G R IY1 - D AH0 - L IY0\nGREEDY  G R IY1 - D IY0\nGREEK  G R IY1 K\nGREEKS  G R IY1 K S\nGREELEY  G R IY1 - L IY0\nGREELEYVILLE  G R IY1 - L IY0 - V IH0 L\nGREELIEVILLE  G R IY1 - L IY0 - V IH0 L\nGREELY  G R IY1 - L IY0\nGREEN  G R IY1 N\nGREEN'S  G R IY1 N Z\nGREENAN  G R IY1 - N AH0 N\nGREENAWALT  G R IY1 N - AH0 - W AO2 L T\nGREENAWAY  G R IY1 N - AH0 - W EY2\nGREENBACK  G R IY1 N - B AE2 K\nGREENBACK'S  G R IY1 N - B AE2 K S\nGREENBACKS  G R IY1 N - B AE2 K S\nGREENBAUM  G R IY1 N - B AW2 M\nGREENBELT  G R IY1 N - B EH2 L T\nGREENBERG  G R IY1 N - B ER0 G\nGREENBERG'S  G R IY1 N - B ER0 G Z\nGREENBERGER  G R IY1 N - B ER0 - G ER0\nGREENBLATT  G R IY1 N - B L AH0 T\nGREENBURG  G R IY1 N - B ER0 G\nGREENBURY  G R IY1 N - B ER0 - IY0\nGREENBUSH  G R IY1 N - B UH0 SH\nGREENCASTLE  G R IY1 N - K AE2 - S AH0 L\nGREENE  G R IY1 N\nGREENE'S  G R IY1 N Z\nGREENED  G R IY1 N D\nGREENER  G R IY1 - N ER0\nGREENERY  G R IY1 - N ER0 - IY0\nGREENEST  G R IY1 - N IH0 S T\nGREENFELD  G R IY1 N - F EH2 L D\nGREENFELD'S  G R IY1 N - F EH2 L D Z\nGREENFELL  G R IY1 N - F EH2 L\nGREENFELL'S  G R IY1 N - F EH2 L Z\nGREENFIELD  G R IY1 N - F IY2 L D\nGREENFIELD'S  G R IY1 N - F IY2 L D Z\nGREENHALGH  G R IY1 N - HH AH2 L G\nGREENHAM  G R IY1 - N AH0 M\nGREENHAW  G R IY1 N - HH AO2\nGREENHILL  G R IY1 N - HH IH2 L\nGREENHOE  G R IY1 N - HH OW2\nGREENHOUSE  G R IY1 N - HH AW2 S\nGREENHOUSES  G R IY1 N - HH AW2 - S IH0 Z\nGREENHOUSES(2)  G R IY1 N - HH AW2 - Z AH0 Z\nGREENHUT  G R IY1 N - HH AH0 T\nGREENIAUS  G R IY1 - N IY0 - AW0 S\nGREENIDGE  G R IY1 - N IH0 JH\nGREENING  G R IY1 - N IH0 NG\nGREENISH  G R IY1 - N IH0 SH\nGREENLAND  G R IY1 N - L AH0 N D\nGREENLAND(2)  G R IY1 N - L AE2 N D\nGREENLAW  G R IY1 N - L AO2\nGREENLEAF  G R IY1 N - L IY2 F\nGREENLEE  G R IY1 N - L IY2\nGREENLEES  G R IY1 N - L IY2 Z\nGREENLEY  G R IY1 N - L IY0\nGREENLY  G R IY1 N - L IY0\nGREENMAIL  G R IY1 N - M EY2 L\nGREENMAILER  G R IY1 N - M EY2 - L ER0\nGREENMAN  G R IY1 N - M AH0 N\nGREENNESS  G R IY1 N - N AH0 S\nGREENO  G R IY1 - N OW0\nGREENOUGH  G R IY1 - N AH0 F\nGREENPEACE  G R IY1 N - P IY2 S\nGREENPEACE'S  G R IY1 N - P IY2 - S IH0 Z\nGREENS  G R IY1 N Z\nGREENS'  G R IY1 N Z\nGREENSBORO  G R IY1 N Z - B ER0 - R OW0\nGREENSBURG  G R IY1 N Z - B ER0 G\nGREENSHIELD  G R IY1 N - SH IY2 L D\nGREENSHIELDS  G R IY1 N - SH IY2 L D Z\nGREENSLADE  G R IY1 N - S L AH0 D\nGREENSLET  G R IY1 N - S L EH2 T\nGREENSPAN  G R IY1 N - S P AE2 N\nGREENSPAN'S  G R IY1 N - S P AE2 N Z\nGREENSPON  G R IY1 N - S P AA2 N\nGREENSPUN  G R IY1 N - S P AH2 N\nGREENSTEIN  G R IY1 N - S T AY2 N\nGREENSTEIN(2)  G R IY1 N - S T IY2 N\nGREENSTONE  G R IY1 N - S T OW2 N\nGREENSTREET  G R IY1 N - S T R IY2 T\nGREENUP  G R IY1 N - AH2 P\nGREENVALE  G R IY1 N - V EY2 L\nGREENVILLE  G R IY1 N - V IH0 L\nGREENWALD  G R IY1 N - W AO2 L D\nGREENWALD'S  G R IY1 N - W AO2 L D Z\nGREENWALDS  G R IY1 N - W AO2 L D Z\nGREENWALT  G R IY1 - N W AH0 L T\nGREENWAY  G R IY1 N - W EY2\nGREENWELL  G R IY1 N - W EH2 L\nGREENWICH  G R EH1 - N IH0 CH\nGREENWICH'S  G R EH1 - N IH0 - CH IH0 Z\nGREENWICH(2)  G R IY1 N - W IH2 CH\nGREENWOOD  G R IY1 N - W UH2 D\nGREER  G R IH1 R\nGREESON  G R IY1 - S AH0 N\nGREET  G R IY1 T\nGREETED  G R IY1 - T AH0 D\nGREETED(2)  G R IY1 - T IH0 D\nGREETHAM  G R IY1 - TH AH0 M\nGREETING  G R IY1 - T IH0 NG\nGREETINGS  G R IY1 - T IH0 NG Z\nGREETS  G R IY1 T S\nGREEVER  G R IY1 - V ER0\nGREFE  G R IY1 F\nGREFF  G R EH1 F\nGREG  G R EH1 G\nGREG'S  G R EH1 G Z\nGREGA  G R IY1 - G AH0\nGREGARIOUS  G R AH0 - G EH1 - R IY0 - AH0 S\nGREGER  G R EH1 - G ER0\nGREGERSEN  G R EH1 - G ER0 - S AH0 N\nGREGERSON  G R EH1 - G ER0 - S AH0 N\nGREGG  G R EH1 G\nGREGGS  G R EH1 G Z\nGREGO  G R EH1 - G OW0\nGREGOIRE  G R IH0 - G W AA1 R\nGREGOR  G R EH1 - G ER0\nGREGORI  G R EH0 - G AO1 - R IY0\nGREGORIA  G R EH0 - G AO1 - R IY0 - AH0\nGREGORIAN  G R AH0 - G AO1 - R IY0 - AH0 N\nGREGORICH  G R EH1 - G ER0 - IH0 K\nGREGORIE  G R EH1 - G ER0 - IY0\nGREGORIO  G R IH0 - G AO1 - R IY0 - OW0\nGREGORY  G R EH1 - G ER0 - IY0\nGREGORY'S  G R EH1 - G ER0 - IY0 Z\nGREGSON  G R EH1 G - S AH0 N\nGREGSTON  G R EH1 G - S T AH0 N\nGREGUS  G R IY1 - G AH0 S\nGREIDER  G R AY1 - D ER0\nGREIF  G R IY1 F\nGREIFF  G R IY1 F\nGREIFF(2)  G R AY1 F\nGREIG  G R IY1 G\nGREIM  G R IY1 M\nGREIMAN  G R AY1 - M AH0 N\nGREIN  G R EY1 N\nGREINER  G R AY1 - N ER0\nGREINKE  G R EY1 NG K\nGREIS  G R IY1 Z\nGREITZ  G R EH1 T S\nGREITZ(2)  G R AY1 T S\nGREIWE  G R IY1 W\nGRELL  G R EH1 L\nGRELLA  G R EH1 - L AH0\nGRELLE  G R EH1 L\nGREMBAN  G R EH1 M - B AE2 N\nGREMILLION  G R EH1 - M IH0 - L Y AH0 N\nGREMLIN  G R EH1 M - L AH0 N\nGREMLINS  G R EH1 M - L AH0 N Z\nGREN  G R EH1 N\nGRENADA  G R IH0 - N EY1 - D AH0\nGRENADA(2)  G R IH0 - N AA1 - D AH0\nGRENADE  G R AH0 - N EY1 D\nGRENADES  G R AH0 - N EY1 D Z\nGRENDA  G R EH1 N - D AH0\nGRENDEL  G R EH1 N - D AH0 L\nGRENDEL'S  G R EH1 N - D AH0 L Z\nGRENELL  G R EH1 - N AH0 L\nGRENFELL  G R EH1 N - F AH0 L\nGRENIER  G R IY1 - N IY0 - ER0\nGRENINGER  G R EH1 - N IH0 - NG ER0\nGRENNAN  G R EH1 - N AH0 N\nGRENOBLE  G R AH0 - N OW1 - B AH0 L\nGRENON  G R EH1 - N AH0 N\nGRENOUILLE  G R AH0 - N UW1 - IY0\nGRENZ  G R EH1 N Z\nGRESH  G R EH1 SH\nGRESHAM  G R EH1 - SH AH0 M\nGRESHAM'S  G R EH1 - SH AH0 M Z\nGRESKO  G R EH1 S - K OW0\nGRESS  G R EH1 S\nGRESSER  G R EH1 - S ER0\nGRESSETT  G R EH1 - S IH0 T\nGRESSLEY  G R EH1 S - L IY0\nGRESSMAN  G R EH1 S - M AH0 N\nGRETA  G R IY1 - T AH0\nGRETA'S  G R IY1 - T AH0 Z\nGRETAL  G R EH1 - T AH0 L\nGRETCHEN  G R EH1 - CH AH0 N\nGRETE  G R IY1 T\nGRETEL  G R EH1 - T AH0 L\nGRETH  G R EH1 TH\nGRETHEL  G R EH1 - TH AH0 L\nGRETHER  G R EH1 - DH ER0\nGRETNA  G R EH1 T - N AH0\nGRETNA'S  G R EH1 T - N AH0 Z\nGRETTENBERGER  G R EH1 - T AH0 N - B ER0 - G ER0\nGRETZ  G R EH1 T S\nGRETZINGER  G R EH1 T - Z IH0 - NG ER0\nGRETZKY  G R EH1 T S - K IY1\nGREUBEL  G R OY1 - B AH0 L\nGREUEL  G R UW1 - AH0 L\nGREULICH  G R OY1 - L IH0 K\nGREUNKE  G R UW1 NG K\nGREVE  G R IY1 V\nGREVER  G R EH1 - V ER0\nGREW  G R UW1\nGREWAL  G R UW1 - AH0 L\nGREWE  G R UW1\nGREWELL  G R EH1 - W EH0 L\nGREY  G R EY1\nGREY'S  G R EY1 Z\nGREYHOUND  G R EY1 - HH AW2 N D\nGREYHOUND'S  G R EY1 - HH AW2 N D Z\nGREYLAG  G R EY1 - L AE2 G\nGREYSTONE  G R EY1 - S T OW2 N\nGRIBBEN  G R IH1 - B AH0 N\nGRIBBIN  G R IH1 - B IH0 N\nGRIBBINS  G R IH1 - B IH0 N Z\nGRIBBLE  G R IH1 - B AH0 L\nGRIBBLES  G R IH1 - B AH0 L Z\nGRIBBON  G R IH1 - B AH0 N\nGRICE  G R AY1 S\nGRID  G R IH1 D\nGRID'S  G R IH1 D Z\nGRIDER  G R AY1 - D ER0\nGRIDIRON  G R IH1 D - AY2 - ER0 N\nGRIDLEY  G R IH1 D - L IY0\nGRIDLEY'S  G R IH1 D - L IY0 Z\nGRIDLOCK  G R IH1 D - L AA2 K\nGRIDLOCK'S  G R IH1 D - L AA2 K S\nGRIDLOCKED  G R IH1 D - L AA2 K T\nGRIDS  G R IH1 D Z\nGRIEB  G R IY1 B\nGRIEBEL  G R IY1 - B AH0 L\nGRIECO  G R IY1 - K OW0\nGRIEDER  G R IY1 - D ER0\nGRIEF  G R IY1 F\nGRIEGER  G R IY1 - G ER0\nGRIEGO  G R IY1 - G OW0\nGRIEME  G R IY1 M\nGRIEP  G R IY1 P\nGRIEPENTROG  G R IY1 - P IH0 N - T R AH0 G\nGRIER  G R AY1 - ER0\nGRIER'S  G R AY1 - ER0 Z\nGRIER'S(2)  G R IY1 R Z\nGRIER(2)  G R IY1 R\nGRIERSON  G R IH1 R - S AH0 N\nGRIES  G R AY1 Z\nGRIESA  G R IY0 - EH1 - S AH0\nGRIESBACH  G R IY1 S - B AA0 K\nGRIESE  G R IY1 Z\nGRIESEMER  G R IY1 - S IY0 - M ER0\nGRIESER  G R IY1 - S ER0\nGRIESHABER  G R IY1 - SH AH0 - B ER0\nGRIESINGER  G R IY1 - S IH0 - NG ER0\nGRIESS  G R IY1 S\nGRIESSER  G R IY1 - S ER0\nGRIEST  G R AY1 - IH0 S T\nGRIEVANCE  G R IY1 - V AH0 N S\nGRIEVANCES  G R IY1 - V AH0 N - S AH0 Z\nGRIEVANCES(2)  G R IY1 - V AH0 N - S IH0 Z\nGRIEVE  G R IY1 V\nGRIEVED  G R IY1 V D\nGRIEVER  G R IY1 - V ER0\nGRIEVERS  G R IY1 - V ER0 Z\nGRIEVES  G R IY1 V Z\nGRIEVESON  G R IY1 - V AH0 - S AH0 N\nGRIEVESON(2)  G R IY1 V - S AH0 N\nGRIEVING  G R IY1 - V IH0 NG\nGRIEVOUS  G R IY1 - V AH0 S\nGRIEVOUSLY  G R IY1 - V AH0 S - L IY0\nGRIFF  G R IH1 F\nGRIFFEE  G R IH1 - F IY0\nGRIFFEN  G R IH1 - F AH0 N\nGRIFFETH  G R IH1 - F IH0 TH\nGRIFFEY  G R IH1 - F IY0\nGRIFFEY'S  G R IH1 - F IY0 Z\nGRIFFIE  G R IH1 - F IY0\nGRIFFIN  G R IH1 - F IH0 N\nGRIFFIN'S  G R IH1 - F IH0 N Z\nGRIFFING  G R IH1 - F IH0 NG\nGRIFFIS  G R IH1 - F IH0 S\nGRIFFITH  G R IH1 - F AH0 TH\nGRIFFITH'S  G R IH1 - F IH0 TH S\nGRIFFITH(2)  G R IH1 - F IH0 TH\nGRIFFITHS  G R IH1 - F IH0 TH S\nGRIFFITTS  G R IH1 - F IH0 T S\nGRIFFO  G R IH1 - F OW0\nGRIFFON  G R IH1 - F AH0 N\nGRIFFY  G R IH1 - F IY0\nGRIGAS  G R AY1 - G AH0 Z\nGRIGG  G R IH1 G\nGRIGGS  G R IH1 G Z\nGRIGGY  G R IH1 - G IY0\nGRIGNON  G R IH1 G - N AH0 N\nGRIGOLI  G R IH0 - G OW1 - L IY0\nGRIGOROVICH  G R IH0 - G AO1 - R AH0 - V IH0 CH\nGRIGORY  G R EH1 - G ER0 - IY0\nGRIGORY(2)  G R IY1 - G ER0 - IY0\nGRIGORYANT  G R IH0 - G AO1 - R Y AE0 N T\nGRIGORYANTS  G R IH0 - G AO1 R - Y AE0 N T S\nGRIGSBY  G R IH1 G Z - B IY0\nGRIJALVA  G R IY0 - Y AA1 L - V AH0\nGRILL  G R IH1 L\nGRILLE  G R IH1 L\nGRILLED  G R IH1 L D\nGRILLI  G R IH1 - L IY0\nGRILLING  G R IH1 - L IH0 NG\nGRILLIOT  G R IH1 - L IY0 - AH0 T\nGRILLO  G R IH1 - L OW0\nGRILLOT  G R IH1 - L AH0 T\nGRILLS  G R IH1 L Z\nGRIM  G R IH1 M\nGRIMA  G R IY1 - M AH0\nGRIMACE  G R IH1 - M AH0 S\nGRIMACED  G R IH1 - M AH0 S T\nGRIMACES  G R IH1 - M AH0 - S IH0 Z\nGRIMACING  G R IH1 - M AH0 - S IH0 NG\nGRIMALDI  G R IY0 - M AA1 L - D IY0\nGRIMALDO  G R IY0 - M AA1 L - D OW0\nGRIME  G R AY1 M\nGRIMES  G R AY1 M Z\nGRIMLEY  G R IH1 M - L IY0\nGRIMLY  G R IH1 M - L IY0\nGRIMM  G R IH1 M\nGRIMM'S  G R IH1 M Z\nGRIMME  G R IH1 M\nGRIMMER  G R IH1 - M ER0\nGRIMMEST  G R IH1 - M AH0 S T\nGRIMMETT  G R IH1 - M IH0 T\nGRIMNESS  G R IH1 M - N AH0 S\nGRIMSHAW  G R IH1 M - SH AO2\nGRIMSLEY  G R IH1 M Z - L IY0\nGRIMSTAD  G R IH1 M - S T AH0 D\nGRIMWOOD  G R IH1 M - W UH2 D\nGRIMY  G R AY1 - M IY0\nGRIN  G R IH1 N\nGRINAGE  G R IH1 - N IH0 JH\nGRINBERG  G R IH1 N - B ER0 G\nGRINCH  G R IH1 N CH\nGRIND  G R AY1 N D\nGRINDE  G R IH1 N D\nGRINDER  G R AY1 N - D ER0\nGRINDERS  G R AY1 N - D ER0 Z\nGRINDING  G R AY1 N - D IH0 NG\nGRINDLAY  G R AY1 N D - L EY2\nGRINDLAY(2)  G R IH1 N D - L IY2\nGRINDLAYS  G R AY1 N D - L EY2 Z\nGRINDLAYS(2)  G R IH1 N D - L IY2 Z\nGRINDLE  G R IH1 N - D AH0 L\nGRINDLEY  G R IH1 N D - L IY0\nGRINDROD  G R AY1 N - D R AA2 D\nGRINDS  G R AY1 N D Z\nGRINDSTAFF  G R AY1 N D - S T AE2 F\nGRINDSTONE  G R AY1 N D - S T OW2 N\nGRINE  G R AY1 N\nGRINER  G R AY1 - N ER0\nGRING  G R IH1 NG\nGRINGO  G R IH1 NG - G OW0\nGRINGOS  G R IH1 NG - G OW0 Z\nGRINNED  G R IH1 N D\nGRINNELL  G R IH0 - N EH1 L\nGRINNING  G R IH1 - N IH0 NG\nGRINS  G R IH1 N Z\nGRINSTEAD  G R IH1 N - S T EH2 D\nGRINSTEIN  G R IH1 N - S T IY2 N\nGRINSTEIN(2)  G R IH1 N - S T AY2 N\nGRIP  G R IH1 P\nGRIPE  G R AY1 P\nGRIPED  G R AY1 P T\nGRIPES  G R AY1 P S\nGRIPING  G R AY1 - P IH0 NG\nGRIPP  G R IH1 P\nGRIPPED  G R IH1 P T\nGRIPPI  G R IH1 - P IY0\nGRIPPING  G R IH1 - P IH0 NG\nGRIPPO  G R IH1 - P OW0\nGRIPS  G R IH1 P S\nGRISANTI  G R IH0 - S AE1 N - T IY0\nGRISBY  G R IH1 S - B IY0\nGRISCOM  G R IH1 S - K AH0 M\nGRISE  G R AY1 Z\nGRISHAM  G R IH1 - SH AH0 M\nGRISHAM'S  G R IH1 - SH AH0 M Z\nGRISHILDA  G R IH0 - SH IH1 L - D AH0\nGRISHMAN  G R IH1 SH - M AH0 N\nGRISLY  G R IH1 Z - L IY0\nGRISMER  G ER1 - IH0 - Z AH0 - M ER0\nGRISMER(2)  G R IH1 S - M ER0\nGRISMORE  G R IY1 S - M AO0 R\nGRISSETT  G R IH1 - S IH0 T\nGRISSINGER  G R IH1 - S IH0 - NG ER0\nGRISSO  G R IH1 - S OW0\nGRISSOM  G R IH1 - S AH0 M\nGRISSON  G R IH1 - S AH0 N\nGRIST  G R IH1 S T\nGRISTLE  G R IH1 - S AH0 L\nGRISWELL  G R IH1 S - W EH0 L\nGRISWOLD  G R IH1 S - W OW2 L D\nGRIT  G R IH1 T\nGRITES  G R AY1 T S\nGRITS  G R IH1 T S\nGRITTER  G R IH1 - T ER0\nGRITTING  G R IH1 - T IH0 NG\nGRITTON  G R IH1 - T AH0 N\nGRITTY  G R IH1 - T IY0\nGRITZ  G R IH1 T S\nGRITZMACHER  G R IH1 T S - M AA2 - K ER0\nGRIVAS  G R IY1 - V AA0 Z\nGRIZ  G R IH1 Z\nGRIZELDA  G R IY0 - Z EH1 L - D AH0\nGRIZZARD  G R IH1 - Z ER0 D\nGRIZZELL  G R IH1 - Z AH0 L\nGRIZZLE  G R IH1 - Z AH0 L\nGRIZZLED  G R IH1 - Z AH0 L D\nGRIZZLIES  G R IH1 Z - L IY0 Z\nGRIZZLY  G R IH1 Z - L IY0\nGRO  G R OW1\nGROAN  G R OW1 N\nGROANED  G R OW1 N D\nGROANING  G R OW1 - N IH0 NG\nGROANS  G R OW1 N Z\nGROAT  G R OW1 T\nGROB  G R AA1 B\nGROBE  G R OW1 B\nGROBEN  G R AA1 - B AH0 N\nGROBER  G R OW1 - B ER0\nGROBIAN  G R OW1 - B IY0 - AH0 N\nGROBLER  G R AA1 B - L ER0\nGROCE  G R OW1 S\nGROCER  G R OW1 - S ER0\nGROCER'S  G R OW1 - S ER0 Z\nGROCERIES  G R OW1 - S ER0 - IY0 Z\nGROCERIES(2)  G R OW1 - S R IY0 Z\nGROCERS  G R OW1 - S ER0 Z\nGROCERY  G R OW1 - S ER0 - IY0\nGROCERY(2)  G R OW1 - S R IY0\nGROCH  G R AA1 K\nGROCHOWSKI  G R AH0 - HH AO1 F S - K IY0\nGRODE  G R OW1 D\nGRODEN  G R OW1 - D AH0 N\nGRODIN  G R OW1 - D IH0 N\nGRODSKY  G R AA1 D - S K IY0\nGROEBNER  G R OW1 B - N ER0\nGROEGER  G R OW1 - G ER0\nGROEN  G R OW1 N\nGROENE  G R AA1 - IY0 N\nGROENEVELD  G R OW1 - N IH0 - V IH0 L D\nGROENEWOLD  G R OW1 - N UW0 - OW0 L D\nGROENING  G R AA1 - AH0 - N IH0 NG\nGROEP  G R OW1 P\nGROER  G R OW1 - ER0\nGROESBECK  G R OW1 S - B EH0 K\nGROFF  G R AO1 F\nGROFT  G R AA1 F T\nGROGAN  G R OW1 - G AH0 N\nGROGG  G R AA1 G\nGROGGY  G R AA1 - G IY0\nGROH  G R OW1\nGROHMAN  G R OW1 - M AH0 N\nGROHS  G R OW1 S\nGROIN  G R OY1 N\nGROINED  G R OY1 N D\nGROINS  G R OY1 N Z\nGROLEAU  G R AH0 - L OW1\nGROLIER  G R OW1 - L Y ER0\nGROLL  G R OW1 L\nGROM  G R AA1 M\nGROMA  G R AA1 - M AH0\nGROMAN  G R OW1 - M AH0 N\nGROMEK  G R OW1 - M IH0 K\nGROMER  G R OW1 - M ER0\nGROMES  G R OW1 M Z\nGROMYKO  G R OW0 - M IY1 - K OW0\nGRONAU  G R OW1 - N AW0\nGRONBERG  G R AA1 N - B ER0 G\nGRONDAHL  G R AA1 N - D AA2 L\nGRONDIN  G R AA1 N - D IH0 N\nGRONE  G R OW1 N\nGRONEMEYER  G R AA1 - N IH0 - M AY0 - ER0\nGRONER  G R OW1 - N ER0\nGRONEWOLD  G R AA1 - N UW0 - OW0 L D\nGRONINGER  G R OW1 - N IH0 - NG ER0\nGRONLUND  G R AA1 N - L AH0 N D\nGRONOWSKI  G R AH0 - N AO1 F S - K IY0\nGRONSETH  G R AA1 N - S IH0 TH\nGRONSKI  G R AA1 N - S K IY0\nGROOM  G R UW1 M\nGROOME  G R UW1 M\nGROOMED  G R UW1 M D\nGROOMER  G R UW1 - M ER0\nGROOMERS  G R UW1 - M ER0 Z\nGROOMES  G R UW1 M Z\nGROOMING  G R UW1 - M IH0 NG\nGROOMS  G R UW1 M Z\nGROOPMAN  G R UW1 P - M AH0 N\nGROOS  G R UW1 Z\nGROOT  G R UW1 T\nGROOTERS  G R UW1 - T ER0 Z\nGROOVE  G R UW1 V\nGROOVER  G R UW1 - V ER0\nGROOVES  G R UW1 V Z\nGROOVIEST  G R UW1 - V IY0 - AH0 S T\nGROOVY  G R UW1 - V IY0\nGROPE  G R OW1 P\nGROPED  G R OW1 P T\nGROPING  G R OW1 - P IH0 NG\nGROPP  G R AA1 P\nGROPPER  G R AA1 - P ER0\nGROPPY  G R AA1 - P IY0\nGROPPY'S  G R AA1 - P IY0 Z\nGROS  G R OW1 S\nGROSBEAK  G R OW1 S - B IY2 K\nGROSBEAKS  G R OW1 S - B IY2 K S\nGROSCH  G R AO1 SH\nGROSE  G R OW1 Z\nGROSECLOSE  G R AA0 - S IH0 - K L OW1 Z\nGROSH  G R AA1 SH\nGROSHEK  G R AA1 - SH IH0 K\nGROSHONG  G R AA1 - SH AO0 NG\nGROSJEAN  G R AH0 S - ZH IY1 N\nGROSKOPF  G R AA1 - S K AO0 P F\nGROSKOPF(2)  G R OW1 S K - AO0 F\nGROSS  G R OW1 S\nGROSS'S  G R OW1 - S IH0 Z\nGROSSBARD  G R OW1 S - B AA2 R D\nGROSSBERG  G R OW1 S - B ER0 G\nGROSSE  G R AA1 S\nGROSSED  G R OW1 S T\nGROSSENBACHER  G R AA1 - S IH0 N - B AA0 - K ER0\nGROSSER  G R OW1 - S ER0\nGROSSES  G R OW1 - S IH0 Z\nGROSSFELD  G R OW1 S - F EH2 L D\nGROSSHANS  G R AA1 - SH AH0 N Z\nGROSSI  G R OW1 - S IY0\nGROSSING  G R OW1 - S IH0 NG\nGROSSKOPF  G R OW1 - S K AO0 P F\nGROSSKOPF(2)  G R OW1 S K - AO0 F\nGROSSLY  G R OW1 S - L IY0\nGROSSMAN  G R OW1 S - M AH0 N\nGROSSMAN'S  G R OW1 S - M AH0 N Z\nGROSSMANN  G R AO1 S - M AH0 N\nGROSSNICKLE  G R AA1 S - N IH0 - K AH0 L\nGROSSO  G R OW1 - S OW0\nGROSVENOR  G R OW1 V - N ER0\nGROSZ  G R OW1 S\nGROTE  G R OW1 T\nGROTESQUE  G R OW0 - T EH1 S K\nGROTESQUELY  G R OW0 - T EH1 S K - L IY0\nGROTH  G R AA1 TH\nGROTHAUS  G R AA1 T - HH AW2 S\nGROTHE  G R OW1 DH\nGROTHEER  G R AO1 - TH IH0 R\nGROTON  G R AA1 - T AH0 N\nGROTTO  G R AA1 - T OW2\nGROTZ  G R AA1 T S\nGROUCH  G R AW1 CH\nGROUCHO  G R UW1 - CH OW0\nGROUCHO(2)  G R AW1 - CH OW0\nGROULX  G R AW1 L K S\nGROUND  G R AW1 N D\nGROUNDBREAKING  G R AW1 N D - B R EY2 - K IH0 NG\nGROUNDBREAKING(2)  G R AW1 N - B R EY2 - K IH0 NG\nGROUNDED  G R AW1 N - D IH0 D\nGROUNDHOG  G R AW1 N D - HH AA2 G\nGROUNDING  G R AW1 N - D IH0 NG\nGROUNDLESS  G R AW1 N D - L AH0 S\nGROUNDLING  G R AW1 N D - L IH0 NG\nGROUNDNUT  G R AW1 N D - N AH2 T\nGROUNDNUTS  G R AW1 N D - N AH2 T S\nGROUNDS  G R AW1 N D Z\nGROUNDS(2)  G R AW1 N Z\nGROUNDSKEEPER  G R AW1 N D - S K IY2 - P ER0\nGROUNDSKEEPERS  G R AW1 N D - S K IY2 - P ER0 Z\nGROUNDSWELL  G R AW1 N D - S W EH2 L\nGROUNDWATER  G R AW1 N D - W AA2 - T ER0\nGROUNDWATER(2)  G R AW1 N D - W AO2 - T ER0\nGROUNDWORK  G R AW1 N D - W ER2 K\nGROUP  G R UW1 P\nGROUP'S  G R UW1 P S\nGROUPE  G R UW1 P\nGROUPED  G R UW1 P T\nGROUPEMENT  G R UW1 P - M AH0 N T\nGROUPER  G R UW1 - P ER0\nGROUPERS  G R UW1 - P ER0 Z\nGROUPIE  G R UW1 - P IY0\nGROUPIES  G R UW1 - P IY0 Z\nGROUPING  G R UW1 - P IH0 NG\nGROUPINGS  G R UW1 - P IH0 NG Z\nGROUPS  G R UW1 P S\nGROUPS'  G R UW1 P S\nGROUPWARE  G R UW1 P - W EH2 R\nGROUSE  G R AW1 S\nGROUSED  G R AW1 S T\nGROUSES  G R AW1 - S IH0 Z\nGROUSING  G R AW1 - S IH0 NG\nGROUSSMAN  G R AW1 S - M AH0 N\nGROUT  G R AW1 T\nGROUTING  G R AW1 - T IH0 NG\nGROVE  G R OW1 V\nGROVE'S  G R OW1 V Z\nGROVEL  G R AA1 - V AH0 L\nGROVELING  G R AO1 - V AH0 L - IH0 NG\nGROVELING(2)  G R AO1 V - L IH0 NG\nGROVEMAN  G R OW1 V - M AH0 N\nGROVER  G R OW1 - V ER0\nGROVER'S  G R OW1 - V ER0 Z\nGROVERS  G R OW1 - V ER0 Z\nGROVES  G R OW1 V Z\nGROW  G R OW1\nGROWE  G R OW1\nGROWER  G R OW1 - ER0\nGROWERS  G R OW1 - ER0 Z\nGROWERS'  G R OW1 - ER0 Z\nGROWING  G R OW1 - IH0 NG\nGROWL  G R AW1 L\nGROWLED  G R AW1 L D\nGROWLING  G R OW1 - L IH0 NG\nGROWLS  G R AW1 L Z\nGROWN  G R OW1 N\nGROWNUP  G R OW1 - N AH2 P\nGROWNUPS  G R OW1 - N AH2 P S\nGROWS  G R OW1 Z\nGROWTH  G R OW1 TH\nGROWTHS  G R OW1 TH S\nGROZNY  G R OW1 Z - N IY0\nGROZNY'S  G R OW1 Z - N IY0 Z\nGRUA  G R UW1 - AH0\nGRUB  G R AH1 B\nGRUBA  G R UW1 - B AH0\nGRUBAUGH  G R AH1 - B AO0\nGRUBB  G R AH1 B\nGRUBBS  G R AH1 B Z\nGRUBBY  G R AH1 - B IY0\nGRUBE  G R UW1 B\nGRUBEN  G R AH1 - B AH0 N\nGRUBER  G R UW1 - B ER0\nGRUBEROVA  G R UW2 - B EH0 - R OW1 - V AH0\nGRUBMAN  G R AH1 B - M AH0 N\nGRUBS  G R AH1 B Z\nGRUBSTEIN  G R AH1 B - S T IY2 N\nGRUBSTEIN(2)  G R AH1 B - S T AY2 N\nGRUCCI  G R UW1 - CH IY0\nGRUDENSTEIN  G R UW1 - D IH0 N - S T IY2 N\nGRUDENSTEIN(2)  G R UW1 - D IH0 N - S T AY2 N\nGRUDGE  G R AH1 JH\nGRUDGES  G R AH1 - JH IH0 Z\nGRUDGING  G R AH1 - JH IH0 NG\nGRUDGINGLY  G R AH1 - JH IH0 NG - L IY0\nGRUDGINGLY(2)  G R AH1 - JH IH0 NG - G L IY0\nGRUDZIEN  G R AH1 D - Z IY0 N\nGRUDZINSKI  G R AH0 - JH IH1 N - S K IY0\nGRUEL  G R UW1 - IH0 L\nGRUELING  G R UW1 - IH0 - L IH0 NG\nGRUELING(2)  G R UW1 - L IH0 NG\nGRUEN  G R UW1 N\nGRUENBERG  G R UH1 N - B ER0 G\nGRUENER  G R UH1 - N ER0\nGRUENEWALD  G R UH1 - N IH0 - W AO0 L D\nGRUENHAGEN  G R UH1 N - HH AH0 - G AH0 N\nGRUENWALD  G R UH1 N - W AO0 L D\nGRUESOME  G R UW1 - S AH0 M\nGRUET  G R UW1 - IH0 T\nGRUETZMACHER  G R UH1 T S - M AA2 - K ER0\nGRUFF  G R AH1 F\nGRUHLKE  G R UW1 L K\nGRUHN  G R AH1 N\nGRUIS  G R UW1 - IH0 Z\nGRULKE  G R AH1 L K\nGRULLON  G R AH1 - L AH0 N\nGRUM  G R AH1 M\nGRUMBINE  G R AH1 M - B AY2 N\nGRUMBLE  G R AH1 M - B AH0 L\nGRUMBLED  G R AH1 M - B AH0 L D\nGRUMBLES  G R AH1 M - B AH0 L Z\nGRUMBLING  G R AH1 M - B AH0 L - IH0 NG\nGRUMBLING(2)  G R AH1 M - B L IH0 NG\nGRUMBLINGS  G R AH1 M - B AH0 - L IH0 NG Z\nGRUMBLINGS(2)  G R AH1 M - B L IH0 NG Z\nGRUMMAN  G R AH1 - M AH0 N\nGRUMMAN'S  G R AH1 - M AH0 N Z\nGRUMMOND  G R AH1 - M AH0 N D\nGRUMMOND'S  G R AH1 - M AH0 N D Z\nGRUMP  G R AH1 M P\nGRUMPIER  G R AH1 M - P IY0 - ER0\nGRUMPIER(2)  G R AH1 M - P Y ER0\nGRUMPY  G R AH1 M - P IY0\nGRUN  G R AH1 N\nGRUNBERG  G R AH1 N - B ER0 G\nGRUND  G R AH1 N D\nGRUNDEN  G R AH1 N - D AH0 N\nGRUNDER  G R AH1 N - D ER0\nGRUNDFEST  G R AH1 N D - F EH2 S T\nGRUNDFEST(2)  G R UH1 N D - F EH2 S T\nGRUNDHOFER  G R AH1 N D - HH AA2 - F ER0\nGRUNDIG  G R AH1 N - D IH0 G\nGRUNDMAN  G R AH1 N D - M AH0 N\nGRUNDSTROM  G R AH1 N D - S T R AH0 M\nGRUNDY  G R AH1 N - D IY0\nGRUNEBAUM  G R UW1 N - B AW2 M\nGRUNEICH  G R UW0 - N AY1 K\nGRUNER  G R UW1 - N ER0\nGRUNERT  G R UW1 - N ER0 T\nGRUNEWALD  G R AH1 - N IH0 - W AO0 L D\nGRUNEWALD(2)  G R UW1 N - W AO0 L D\nGRUNGE  G R AH1 N JH\nGRUNGY  G R AH1 N - JH IY0\nGRUNION  G R AH1 - N Y AH0 N\nGRUNOW  G R UW1 - N OW0\nGRUNT  G R AH1 N T\nGRUNTAL  G R AH1 N - T AH0 L\nGRUNTAL'S  G R AH1 N - T AH0 L Z\nGRUNTED  G R AH1 N - T IH0 D\nGRUNTING  G R AH1 N - T IH0 NG\nGRUNTS  G R AH1 N T S\nGRUNWALD  G R AH1 N - W AO2 L D\nGRUPE  G R UW1 P\nGRUPO  G R UW1 - P OW0\nGRUPP  G R AH1 P\nGRUPPO  G R UW1 - P OW0\nGRUSH  G R AH1 SH\nGRUSHOW  G R AH1 - SH OW0\nGRUSS  G R AH1 S\nGRUSSING  G R AH1 - S IH0 NG\nGRUSZKA  G R AH1 SH - K AH0\nGRUTMAN  G R AH1 T - M AH0 N\nGRUVER  G R UW1 - V ER0\nGRUWELL  G R AH1 - W EH0 L\nGRYDER  G R AY1 - D ER0\nGRYGIEL  G R IH1 - JH IY0 L\nGRYPHONS  G R IH1 - F AH0 N Z\nGRZELAK  G ER1 - Z AH0 - L AE2 K\nGRZESIAK  G ER0 - Z EH1 - S IY0 - AE0 K\nGRZESKOWIAK  G ER0 - Z IH0 S - K AW1 - IY0 - AE0 K\nGRZYB  G ER1 - Z IH2 B\nGRZYBOWSKI  G ER2 - Z IH0 - B AW1 S - K IY0\nGRZYWACZ  G ER1 - Z IH0 - V AE2 CH\nGRZYWINSKI  G ER0 - Z IH0 - W IH1 N - S K IY0\nGSCHWIND  G AH0 SH - W AY1 N D\nGSELL  G AH0 - S EH1 L\nGTECH  JH IY1 - T EH2 K\nGTECH'S  JH IY1 - T EH2 K S\nGU  G UW1\nGUACAMOLE  G W AA2 - K AH0 - M OW1 - L IY0\nGUADAGNO  G AA0 - D AA1 G - N OW0\nGUADALAJARA  G W AA2 - D AH2 - L AH0 - HH AA1 - R AH0\nGUADALAJARA(2)  G W AA2 D - L AH0 - HH AA1 - R AH0\nGUADALCANAL  G W AA2 - D AH0 L - K AH0 - N AE1 L\nGUADALUPE  G W AA2 - D AH0 L - UW1 P\nGUADALUPE(2)  G W AA2 - D AH0 - L UW1 - P EY0\nGUADARRAMA  G UW0 - AA0 - D AA0 - R AA1 - M AH0\nGUADELOUPE  G W AA2 - D AH0 L - UW1 P\nGUAGLIARDO  G W AA2 - G L IY0 - AA1 R - D OW0\nGUAJARDO  G W AA0 - Y AA1 R - D OW0\nGUALDONI  G AA0 L - D OW1 - N IY0\nGUALTIERI  G AA0 L - T IH1 - R IY0\nGUAM  G W AA1 M\nGUANACO  G W AH0 - N AA1 - K OW2\nGUANDJO  G W AA1 N - JH OW1\nGUANDJO'S  G W AA1 N - JH OW1 Z\nGUANDJONG  G W AA1 N - JH OW1 NG\nGUANDJONG'S  G W AA1 N - JH OW1 NG Z\nGUANDONG  G W AA1 N - D OW2 NG\nGUANDONG'S  G W AA1 N - D OW2 NG Z\nGUANGDONG  G W AE1 NG - D AO1 NG\nGUANGDONG(2)  G W AA1 NG - D AO1 NG\nGUANGJO  G W AA1 NG - JH OW2\nGUANGJO'S  G W AA1 NG - JH OW2 Z\nGUANGZHOU  G W AE1 NG - Z UW2\nGUANINE  G W AA1 - N IY2 N\nGUANO  G W AA1 - N OW2\nGUANTANAMO  G W AA2 N - T AA1 - N AH0 - M OW2\nGUANTANAMO'S  G W AA2 N - T AA1 - N AH0 - M OW2 Z\nGUARANI  G W AA2 - R AH0 - N IY1\nGUARANI(2)  G W AA2 - R AA1 - N IY0\nGUARANTEE  G EH2 - R AH0 N - T IY1\nGUARANTEE'S  G EH2 - R AH0 N - T IY1 Z\nGUARANTEED  G EH2 - R AH0 N - T IY1 D\nGUARANTEEING  G EH2 - R AH0 N - T IY1 - IH0 NG\nGUARANTEES  G EH2 - R AH0 N - T IY1 Z\nGUARANTIES  G EH2 - R AH0 N - T IY1 Z\nGUARANTOR  G EH2 - R AH0 N - T AO1 R\nGUARANTORS  G EH2 - R AH0 N - T AO1 R Z\nGUARANTY  G EH2 - R AH0 N - T IY1\nGUARANTY'S  G EH2 - R AH0 N - T IY1 Z\nGUARANTY-FIRST  G EH2 - R AH0 N - T IY2 - F ER1 S T\nGUARD  G AA1 R D\nGUARD'S  G AA1 R D Z\nGUARDADO  G AA0 R - D AA1 - D OW0\nGUARDED  G AA1 R - D AH0 D\nGUARDED(2)  G AA1 R - D IH0 D\nGUARDEDLY  G AA1 R - D IH0 D - L IY0\nGUARDFISH  G AA1 R D - F IH2 SH\nGUARDFISH'S  G AA1 R D - F IH2 - SH IH0 Z\nGUARDIA  G W AA1 R - D IY0 - AH0\nGUARDIAN  G AA1 R - D IY0 - AH0 N\nGUARDIAN'S  G AA1 R - D IY0 - AH0 N Z\nGUARDIANS  G AA1 R - D IY0 - AH0 N Z\nGUARDIANSHIP  G AA1 R - D IY0 - AH0 N - SH IH0 P\nGUARDIN  G AA1 R - D IH0 N\nGUARDING  G AA1 R - D IH0 NG\nGUARDINO  G AA0 R - D IY1 - N OW0\nGUARDIOLA  G AA0 R - D IY0 - OW1 - L AH0\nGUARDRAIL  G AA1 R D - R EY2 L\nGUARDRAILS  G AA1 R D - R EY2 L Z\nGUARDS  G AA1 R D Z\nGUARDSMAN  G AA1 R D Z - M AE2 N\nGUARDSMAN(2)  G AA1 R D Z - M AH0 N\nGUARDSMEN  G AA1 R D Z - M IH0 N\nGUARIGLIA  G AA0 - R IY1 - G L IY0 - AH0\nGUARIN  G W AA1 - R IH0 N\nGUARIN(2)  G AA1 - R IH0 N\nGUARINI  G AA0 - R IY1 - N IY0\nGUARINO  G AA0 - R IY1 - N OW0\nGUARISCO  G AA0 - R IY1 - S K OW0\nGUARNACCIA  G AA0 R - N AE1 - CH IY0 - AH0\nGUARNERI  G AA0 R - N EH1 - R IY0\nGUARNIERI  G AA0 R - N IH1 - R IY0\nGUASCH  G W AE1 SH\nGUASTELLA  G AA0 - S T EH1 - L AH0\nGUATEMALA  G W AA2 - T AH0 - M AA1 - L AH0\nGUATEMALA'S  G W AA2 - T AH0 - M AA1 - L AH0 Z\nGUATEMALAN  G W AA2 - T AH0 - M AA1 - L AH0 N\nGUATEMALANS  G W AA2 - T AH0 - M AA1 - L AH0 N Z\nGUATTERY  G W AA1 - T ER0 - IY0\nGUAVA  G W AA1 - V AH0\nGUAVAS  G W AA1 - V AH0 Z\nGUAY  G EY1\nGUAYABERA  G W AY2 - AH0 - B EH1 - R AH0\nGUBA  G UW1 - B AH0\nGUBA'S  G Y UW1 - B AH0 Z\nGUBBELS  G AH1 - B AH0 L Z\nGUBBINS  G AH1 - B IH0 N Z\nGUBER  G Y UW1 - B ER0\nGUBER(2)  G UW1 - B ER0\nGUBERMAN  G UW1 - B ER0 - M AH0 N\nGUBERNATORIAL  G UW0 - B ER0 - N AH0 - T AO1 - R IY0 - AH0 L\nGUBLER  G Y UW1 - B AH0 L - ER0\nGUBLER(2)  G Y UW1 - B L ER0\nGUBSER  G AH1 B - S ER0\nGUCCI  G UW1 - CH IY0\nGUCCIARDO  G UW0 - CH AA1 R - D OW0\nGUCCIO  G UW1 - CH IY0 - OW0\nGUCCIONE  G UW0 K - CH OW1 - N IY0\nGUCK  G AH1 K\nGUCKERT  G AH1 - K ER0 T\nGUCWA  G AH1 - K W AH0\nGUDE  G Y UW1 D\nGUDELAY  G UW1 - D AH0 - L EY2\nGUDERIAN  G Y UW2 - D IY1 - R IY0 - AH0 N\nGUDGEL  G AH1 - JH AH0 L\nGUDGEON  G AH1 - JH AH0 N\nGUDGER  G AH1 - JH ER0\nGUDINO  G UW0 - D IY1 - N OW0\nGUDMUNDSON  G AH1 D - M AH0 N D - S AH0 N\nGUE  G Y UW1\nGUEDRY  G EH1 D - R IY0\nGUEI-YUAN  G W EY1 - Y UW0 - AA1 N\nGUEL  G EH1 L\nGUENETTE  G IH0 - N EH1 T\nGUENNA  G EY1 - N AH0\nGUENTER  G EH1 N - T ER0\nGUENTHER  G UH1 N - TH ER0\nGUENTHNER  G EH1 N TH - N ER0\nGUERARD  G ER0 - AA1 R D\nGUERCIO  G EH1 R - S IY0 - OW0\nGUERETTE  G ER0 - EH1 T\nGUERILLA  G ER0 - IH1 - L AH0\nGUERILLAS  G ER0 - IH1 - L AH0 Z\nGUERIN  G EH1 - R IH0 N\nGUERINO  G EH0 - R IY1 - N OW0\nGUERNEVILLE  G ER1 - N AH0 - V IH0 L\nGUERNSEY  G ER1 N - Z IY0\nGUERRA  G W EH1 - R AH0\nGUERRANT  G EH1 - R AH0 N T\nGUERRE  G EH1 R\nGUERRERA  G W ER0 - EH1 - R AH0\nGUERRERO  G ER0 - EH1 - R OW0\nGUERRETTE  G ER0 - EH1 T\nGUERRIER  G EH1 - R IY0 - ER0\nGUERRIERI  G ER0 - IH1 - R IY0\nGUERRIERO  G ER0 - IH1 - R OW0\nGUERRILLA  G ER0 - IH1 - L AH0\nGUERRILLAS  G ER0 - IH1 - L AH0 Z\nGUERRILLAS'  G ER0 - IH1 - L AH0 Z\nGUERRINI  G ER0 - IY1 - N IY0\nGUERRY  G ER0 - IY1\nGUERTIN  G EH0 R - T IY1 N\nGUESS  G EH1 S\nGUESSED  G EH1 S T\nGUESSER  G EH1 - S ER0\nGUESSERS  G EH1 - S ER0 Z\nGUESSES  G EH1 - S AH0 Z\nGUESSES(2)  G EH1 - S IH0 Z\nGUESSING  G EH1 - S IH0 NG\nGUESSTIMATE  G EH1 - S T IH0 - M IH0 T\nGUESSTIMATE(2)  G EH1 - S T IH0 - M EY0 T\nGUESSTIMATES  G EH1 - S T IH0 - M IH0 T S\nGUESSTIMATES(2)  G EH1 - S T IH0 - M EY0 T S\nGUESSWORK  G EH1 S - W ER2 K\nGUEST  G EH1 S T\nGUEST'S  G EH1 S T S\nGUESTED  G EH1 - S T IH0 D\nGUESTHOUSE  G EH1 S T - HH AW2 S\nGUESTHOUSES  G EH1 S T - HH AW2 - S IH0 Z\nGUESTS  G EH1 S T S\nGUESTS'  G EH1 S T S\nGUESTS'(2)  G EH1 S S\nGUESTS'(3)  G EH1 S\nGUESTS(2)  G EH1 S S\nGUESTS(3)  G EH1 S\nGUETTLER  G EH1 - T AH0 L - ER0\nGUETTLER(2)  G EH1 T - L ER0\nGUEVARA  G EY0 - V AA1 - R AH0\nGUEZ  G EH1 Z\nGUEZ'S  G EH1 - Z IH0 Z\nGUFF  G AH1 F\nGUFFAW  G AH0 - F AO1\nGUFFAWS  G AH0 - F AO1 Z\nGUFFEY  G AH1 - F IY0\nGUFFIN  G AH1 - F IH0 N\nGUFFY  G AH1 - F IY0\nGUGEL  G UW1 - G AH0 L\nGUGGENHEIM  G UW1 - G AH0 N - HH AY2 M\nGUGGISBERG  G AH1 - G IH0 S - B ER0 G\nGUGINO  G UW0 - JH IY1 - N OW0\nGUGLIELMETTI  G UW0 G - L IY0 - EH0 L - M EH1 - T IY0\nGUGLIELMI  G UW0 G - L IY0 - EH1 L - M IY0\nGUGLIELMO  G UW0 G - L IY0 - EH1 L - M OW0\nGUGLIOTTA  G UW0 G - L IY0 - OW1 - T AH0\nGUGLIOTTI  G UW0 G - L IY0 - OW1 - T IY0\nGUGLIUZZA  G UW0 G - L IY0 - UW1 T - S AH0\nGUHL  G AH1 L\nGUIANA  G IY0 - AA1 - N AH0\nGUICE  G AY1 S\nGUICHARD  G IH0 - SH AA1 R D\nGUIDA  G IY1 - D AH0\nGUIDANCE  G AY1 - D AH0 N S\nGUIDE  G AY1 D\nGUIDE'S  G AY1 D Z\nGUIDEBOOK  G AY1 D - B UH2 K\nGUIDEBOOKS  G AY1 D - B UH2 K S\nGUIDED  G AY1 - D AH0 D\nGUIDED(2)  G AY1 - D IH0 D\nGUIDELINE  G AY1 D - L AY2 N\nGUIDELINES  G AY1 D - L AY2 N Z\nGUIDEPOST  G AY1 D - P OW2 S T\nGUIDEPOSTS  G AY1 D - P OW2 S T S\nGUIDEPOSTS(2)  G AY1 D - P OW2 S S\nGUIDEPOSTS(3)  G AY1 D - P OW2 S\nGUIDER  G AY1 - D ER0\nGUIDERA  G IY0 - D EH1 - R AH0\nGUIDES  G AY1 D Z\nGUIDI  G IY1 - D IY0\nGUIDICE  G AY1 - D IH0 S\nGUIDING  G AY1 - D IH0 NG\nGUIDO  G W IY1 - D OW0\nGUIDONE  G IY0 - D OW1 - N IY0\nGUIDOTTI  G IY0 - D OW1 - T IY0\nGUIDROZ  G W IY1 - D R OW0 Z\nGUIDRY  G IH1 - D ER0 - IY0\nGUIER  G AY1 - ER0\nGUIFFRE  G IH1 - F ER0\nGUILBAULT  G IH0 L - B OW1\nGUILBEAU  G IH0 L - B OW1\nGUILBEAULT  G IH0 L - B OW1\nGUILBEAUX  G IH0 L - B OW1\nGUILBERT  G IH1 L - B ER0 T\nGUILD  G IH1 L D\nGUILD'S  G IH1 L D Z\nGUILDER  G IH1 L - D ER0\nGUILDER'S  G IH1 L - D ER0 Z\nGUILDERS  G IH1 L - D ER0 Z\nGUILDHALL  G IH1 L D - HH AO2 L\nGUILDS  G IH1 L D Z\nGUILE  G AY1 L\nGUILELESS  G AY1 L - L AH0 S\nGUILES  G AY1 L Z\nGUILFOIL  G IH0 L - F OY1 L\nGUILFORD  G IH1 L - F ER0 D\nGUILFORD'S  G IH1 L - F ER0 D Z\nGUILFOYLE  G IH1 L - F OY0 L\nGUILIANI  G IY2 - L IY0 - AA1 - N IY0\nGUILIANO  G IY2 - L IY0 - AA1 - N OW0\nGUILIN  G IH1 - L IH0 N\nGUILL  G IH1 L\nGUILLA  G W IH1 - L AH0\nGUILLAUME  G IH2 - L AW1 M\nGUILLAUME(2)  G W IY2 - L OW1 M\nGUILLEMETTE  G IH1 - L AH0 - M EH2 T\nGUILLEN  G IH1 - L AH0 N\nGUILLERMO  G W IH0 - L Y EH1 R - M OW0\nGUILLERMO(2)  G IY0 - EH1 R - M OW0\nGUILLERMO(3)  G W IY0 - EH1 R - M OW0\nGUILLET  G IH0 - L EH1 T\nGUILLETTE  G IH0 - L EH1 T\nGUILLIAMS  G W IY0 - L IY1 - AA0 M Z\nGUILLORY  G IH1 - L ER0 - IY0\nGUILLOT  G IH0 - L OW1\nGUILLOTINE  G IH1 - L AH0 - T IY2 N\nGUILLOTINE(2)  G IY1 - Y AH0 - T IY2 N\nGUILLOTTE  G IH0 - L AO1 T\nGUILMARTIN  G IH0 L - M AA1 R - T IH0 N\nGUILMETTE  G IH0 L - M EH1 T\nGUILT  G IH1 L T\nGUILTLESS  G IH1 L T - L IH0 S\nGUILTY  G IH1 L - T IY0\nGUIMARAES  G IH1 - M ER0 - EY2 Z\nGUIMOND  G IH0 - M AA1 N D\nGUIMONT  G IH0 - M AA1 N T\nGUIN  G IH1 N\nGUINAN  G W IY0 - N AA1 N\nGUINAROU  G W IH0 - N AA1 - R OW2\nGUINAROU'S  G W IH0 - N AA1 - R OW2 Z\nGUINDON  G IH1 N - D AH0 N\nGUINEA  G IH1 - N IY0\nGUINEAS  G IH1 - N IY0 Z\nGUINEY  G IH1 - N IY0\nGUINIER  G W IH0 - N IH1 R\nGUINIER'S  G W IH0 - N IH1 R Z\nGUINN  G IH1 N\nGUINNESS  G IH1 - N AH0 S\nGUINNESS'S  G IH1 - N AH0 - S IH0 Z\nGUINTA  G W IY1 N - T AH0\nGUINTHER  G IH1 N - DH ER0\nGUINTO  G W IY1 N - T OW0\nGUINYARD  G IH0 N - Y AA1 R D\nGUION  G W IY0 - AO1 N\nGUIRE  G AY1 R\nGUISE  G AY1 Z\nGUISES  G AY1 - Z AH0 Z\nGUISES(2)  G AY1 - Z IH0 Z\nGUISEWITE  G AY1 S - W AY2 T\nGUISINGER  G IH1 - S IH0 N - JH ER0\nGUITAR  G IH0 - T AA1 R\nGUITARIST  G IH2 - T AA1 - R AH0 S T\nGUITARIST'S  G IH2 - T AA1 - R AH0 S T S\nGUITARISTS  G IH2 - T AA1 - R AH0 S T S\nGUITARISTS(2)  G IH2 - T AA1 - R AH0 S S\nGUITARISTS(3)  G IH2 - T AA1 - R AH0 S\nGUITARRO  G IH0 - T AA1 - R OW0\nGUITARRO'S  G IH0 - T AA1 - R OW0 Z\nGUITARS  G IH0 - T AA1 R Z\nGUITERREZ  G W IY0 - T EH1 - R EH0 Z\nGUITIERREZ  G W IY0 - T IH1 - R EH0 Z\nGUIZAR  G W IY0 - Z AA1 R\nGUJARAT  G Y UW2 - JH ER0 - AE1 T\nGUL  G AH1 L\nGULA  G Y UW1 - L AH0\nGULAG  G Y UW1 - L AE0 G\nGULAG(2)  G UW1 - L AA2 G\nGULAS  G Y UW1 - L AH0 Z\nGULBRANDSEN  G AH1 L - B R AH0 N D - S AH0 N\nGULBRANDSON  G AH1 L - B R AH0 N D - S AH0 N\nGULBRANSEN  G AH1 L - B R AH0 N - S AH0 N\nGULBRANSON  G AH1 L - B R AH0 N - S AH0 N\nGULBUDDIN  G AH2 - B UW1 - D IH0 N\nGULBUDDIN'S  G AH2 - B UW1 - D IH0 N Z\nGULCH  G AH1 L CH\nGULDIN  G AH1 L - D IH0 N\nGULF  G AH1 L F\nGULF'S  G AH1 L F S\nGULFPORT  G AH1 L F - P AO0 R T\nGULFSTREAM  G AH1 L F S - T R IY2 M\nGULICK  G Y UW1 - L IH0 K\nGULINO  G UW0 - L IY1 - N OW0\nGULL  G AH1 L\nGULL'S  G AH1 L Z\nGULLA  G AH1 - L AH0\nGULLAH  G AH1 - L AH0\nGULLATT  G AH1 - L AH0 T\nGULLEDGE  G UW1 - L IH0 JH\nGULLET  G AH1 - L AH0 T\nGULLETT  G UW1 - L IH0 T\nGULLETTE  G UW0 - L EH1 T\nGULLEY  G AH1 - L IY0\nGULLI  G UW1 - L IY0\nGULLIBILITY  G AH2 - L AH0 - B IH1 - L IH0 - T IY0\nGULLIBLE  G AH1 - L AH0 - B AH0 L\nGULLICK  G AH1 - L IH0 K\nGULLICKSON  G AH1 - L IH0 K - S AH0 N\nGULLIES  G AH1 - L IY0 Z\nGULLIFORD  G AH1 - L IH0 - F ER0 D\nGULLIKSON  G AH1 - L IH0 K - S AH0 N\nGULLION  G AH1 - L Y AH0 N\nGULLIVER  G AH1 - L IH0 - V ER0\nGULLO  G UW1 - L OW0\nGULLS  G AH1 L Z\nGULLY  G AH1 - L IY0\nGULP  G AH1 L P\nGULPED  G AH1 L P T\nGULPING  G AH1 L - P IH0 NG\nGULPS  G AH1 L P S\nGULYAS  G UW1 - L Y AH0 S\nGUM  G AH1 M\nGUMAER  G AH1 - M AW0 - ER0\nGUMAER(2)  G AH1 - M AA2 R\nGUMBEL  G AH1 M - B AH0 L\nGUMBERT  G AH1 M - B ER0 T\nGUMBI  G AH1 M - B IY0\nGUMBI'S  G AH1 M - B IY0 Z\nGUMBINER  G AH1 M - B AY2 - N ER0\nGUMBINGER  G AH1 M - B IH2 - NG ER0\nGUMBO  G AH1 M - B OW0\nGUMBO-LIMBO  G AH1 M - B OW0 - L IH1 M - B OW0\nGUMBS  G AH1 M Z\nGUMI  G UW1 - M IY0\nGUMINA  G UW0 - M IY1 - N AH0\nGUMM  G AH1 M\nGUMMED  G AH1 M D\nGUMMI  G AH1 - M IY0\nGUMMY  G AH1 - M IY0\nGUMP  G AH1 M P\nGUMP'S  G AH1 M P S\nGUMPERT  G AH1 M - P ER2 T\nGUMPORT  G AH1 M - P AO2 R T\nGUMPP  G AH1 M P\nGUMPTION  G AH1 M P - SH AH0 N\nGUMS  G AH1 M Z\nGUMSHOE  G AH1 M - SH UW2\nGUMUCIO  G Y UW2 - M Y UW1 - S IY0 - OW0\nGUMZ  G AH1 M Z\nGUN  G AH1 N\nGUN'S  G AH1 N Z\nGUNADI  G AH0 - N AA1 - D IY0\nGUNATILAKE  G UW0 - N AA2 - T IH2 - L AA1 - K EY2\nGUNBOAT  G AH1 N - B OW2 T\nGUNBOATS  G AH1 N - B OW2 T S\nGUNBY  G AH1 N - B IY0\nGUNCOTTON  G AH1 N - K AA1 - T AH0 N\nGUNDEL  G AH1 N - D AH0 L\nGUNDER  G AH1 N - D ER0\nGUNDERMAN  G AH1 N - D ER0 - M AH0 N\nGUNDERSEN  G AH1 N - D ER0 - S AH0 N\nGUNDERSON  G AH1 N - D ER0 - S AH0 N\nGUNDLACH  G AH1 N D - L AH0 K\nGUNDLE  G AH1 N - D AH0 L\nGUNDOG  G AH1 N - D AO2 G\nGUNDRUM  G AH1 N - D R AH0 M\nGUNDRY  G AH1 N - D ER0 - IY0\nGUNDY  G AH1 N - D IY0\nGUNFIGHT  G AH1 N - F AY2 T\nGUNFIGHTER  G AH1 N - F AY2 - T ER0\nGUNFIGHTER'S  G AH1 N - F AY2 - T ER0 Z\nGUNFIGHTERS  G AH1 N - F AY2 - T ER0 Z\nGUNFIGHTING  G AH1 N - F AY2 - T IH0 NG\nGUNFIGHTS  G AH1 N - F AY2 T S\nGUNFIRE  G AH1 N - F AY2 - ER0\nGUNFIRE(2)  G AH1 N - F AY2 R\nGUNFLINT  G AH1 N - F L IH0 N T\nGUNG  G AH1 NG\nGUNHILDA  G UW0 N - HH IY1 L - D AH0\nGUNIA  G UW1 - N IY0 - AH0\nGUNKEL  G AH1 NG - K AH0 L\nGUNLICK  G AH1 N - L IH0 K\nGUNLICKS  G AH1 N - L IH0 K S\nGUNMAN  G AH1 N - M AH0 N\nGUNMAN'S  G AH1 N - M AH0 N Z\nGUNMEN  G AH1 N - M EH2 N\nGUNN  G AH1 N\nGUNN'S  G AH1 N Z\nGUNNAR  G AH1 - N ER0\nGUNNARSON  G AH1 - N AA0 R - S AH0 N\nGUNNED  G AH1 N D\nGUNNELL  G AH1 - N AH0 L\nGUNNELLS  G AH1 - N AH0 L Z\nGUNNELS  G AH1 - N AH0 L Z\nGUNNER  G AH1 - N ER0\nGUNNERS  G AH1 - N ER0 Z\nGUNNERSON  G AH1 - N ER0 - S AH0 N\nGUNNERY  G AH1 - N ER0 - IY0\nGUNNING  G AH1 - N IH0 NG\nGUNNISON  G AH1 - N IH0 - S AH0 N\nGUNNOE  G AH1 - N OW0\nGUNNY  G AH1 - N IY0\nGUNNYSACK  G AH1 - N IY0 - S AE2 K\nGUNNYSACKS  G AH1 - N IY0 - S AE2 K S\nGUNPOINT  G AH1 N - P OY2 N T\nGUNPOWDER  G AH1 N - P AW2 - D ER0\nGUNRUNNER  G AH1 N - R AH2 - N ER0\nGUNS  G AH1 N Z\nGUNSALUS  G AH0 N - S AA1 - L AH0 S\nGUNSHIP  G AH1 N - SH IH2 P\nGUNSHIPS  G AH1 N - SH IH2 P S\nGUNSHOT  G AH1 N - SH AA2 T\nGUNSHOTS  G AH1 N - SH AA2 T S\nGUNSLINGER  G AH1 N - S L IH2 - NG ER0\nGUNSLINGERS  G AH1 N - S L IH2 - NG ER0 Z\nGUNSMOKE  G AH1 N - S M OW2 K\nGUNST  G AH1 N S T\nGUNTER  G AH1 N - T ER0\nGUNTHER  G AH1 N - TH ER0\nGUNTUR  G AH1 N - T ER0\nGUNTY  G AH1 N - T IY0\nGUPPIES  G AH1 - P IY0 Z\nGUPPY  G AH1 - P IY0\nGUPTA  G UH1 P - T AH0\nGUPTILL  G AH1 P - T IH0 L\nGUPTON  G AH1 P - T AH0 N\nGURA  G UH1 - R AH0\nGURAL  G Y UH1 - R AH0 L\nGUREVICH  G Y UW1 - R IH0 - V IH0 CH\nGURGANIOUS  G ER1 - G AH0 - N IY0 - IH0 S\nGURGANUS  G ER1 - G AH0 - N IH0 S\nGURGLE  G ER1 - G AH0 L\nGURGLING  G ER1 - G AH0 L - IH0 NG\nGURGLING(2)  G ER1 - G L IH0 NG\nGURIAN  G Y UH1 - R IY0 - AH0 N\nGURION  G Y UH1 - R IY0 - AH0 N\nGURIT  G Y UH1 - R IH0 T\nGURIT(2)  G UH1 - R IH0 T\nGURKA  G ER1 - K AH0\nGURKIN  G ER1 - K IH0 N\nGURLEY  G ER1 - L IY0\nGURNARDS  G ER1 - N ER0 D Z\nGURNEE  G ER0 - N IY1\nGURNEY  G ER1 - N IY0\nGURNEY'S  G ER1 - N IY0 Z\nGURNSEY  G ER1 N - S IY0\nGURR  G ER1\nGURRIA  G ER1 - IY0 - AH0\nGURROLA  G UH0 - R OW1 - L AH0\nGURRY  G ER1 - IY0\nGURSKI  G ER1 S - K IY0\nGURSKY  G ER1 S - K IY0\nGURTLER  G ER1 - T AH0 L - ER0\nGURTLER(2)  G ER1 T - L ER0\nGURTNER  G ER1 T - N ER0\nGURTZ  G ER1 T S\nGURU  G UW1 - R UW2\nGURU'S  G UW1 - R UW2 Z\nGURULE  G ER0 - UW1 L\nGURUS  G UW1 - R UW2 Z\nGUS  G AH1 S\nGUSCIORA  G UW2 - S IY0 - AO1 - R AH0\nGUSE  G Y UW1 Z\nGUSELLA  G Y UW2 - S EH1 - L AH0\nGUSEMAN  G UW1 S - M AH0 N\nGUSES  G Y UW1 - Z IH0 Z\nGUSES(2)  G AH1 - S AH0 Z\nGUSH  G AH1 SH\nGUSHED  G AH1 SH T\nGUSHER  G AH1 - SH ER0\nGUSHERS  G AH1 - SH ER0 Z\nGUSHES  G AH1 - SH IH0 Z\nGUSHING  G AH1 - SH IH0 NG\nGUSINSKY  G AH0 - S IH1 N - S K IY0\nGUSKY  G AH1 S - K IY0\nGUSLAN  G UW1 Z - L AA2 N\nGUSLER  G AH1 - S AH0 - L ER0\nGUSLER(2)  G AH1 S - L ER0\nGUSMAN  G AH1 S - M AH0 N\nGUSS  G AH1 S\nGUSSIE  G AH1 - S IY0\nGUSSIED  G AH1 - S IY0 D\nGUSSMAN  G AH1 S - M AH0 N\nGUSSY  G AH1 - S IY0\nGUST  G AH1 S T\nGUSTAF  G UW1 - S T AA0 F\nGUSTAFSON  G AH1 - S T AH0 F - S AH0 N\nGUSTAFSSON  G UW1 - S T AA0 F - S AH0 N\nGUSTAV  G UH1 - S T AA0 F\nGUSTAVA  G UW0 - S T AA1 - V AH0\nGUSTAVE  G UW0 - S T AA1 - V IY0\nGUSTAVESON  G UW0 - S T AA0 - V EY1 - S AH0 N\nGUSTAVO  G AH0 - S T AA1 - V OW0\nGUSTAVSON  G AH1 - S T AH0 V - S AH0 N\nGUSTE  G AH1 S T\nGUSTED  G AH1 - S T IH0 D\nGUSTER  G AH1 - S T ER0\nGUSTIN  G AH1 - S T IH0 N\nGUSTING  G AH1 - S T IH0 NG\nGUSTO  G AH1 - S T OW2\nGUSTON  G AH1 - S T AH0 N\nGUSTS  G AH1 S T S\nGUSTUS  G AH1 - S T AH0 S\nGUSTY  G AH1 - S T IY0\nGUT  G AH1 T\nGUTEKUNST  G AH1 - T IH0 - K AH0 N S T\nGUTENBERG  G UW1 - T AH0 N - B ER0 G\nGUTERMAN  G Y UW1 - T ER0 - M AH0 N\nGUTERMUTH  G AH1 - T ER0 - M UW0 TH\nGUTFELD  G AH1 T - F EH2 L D\nGUTFREUND  G UH1 T - F R EH2 N D\nGUTH  G UW1 TH\nGUTHERIE  G AH1 - TH ER0 - IY0\nGUTHERY  G AH1 - TH ER0 - IY0\nGUTHMILLER  G AH1 TH - M IH0 - L ER0\nGUTHRIDGE  G AH1 - TH R IH0 JH\nGUTHRIE  G AH1 - TH R IY0\nGUTHRIE'S  G AH1 - TH R IY0 Z\nGUTIEREZ  G UW0 - T IH1 - R EH0 Z\nGUTIERRES  G UW0 - T Y EH1 - R EH0 Z\nGUTIERREZ  G UW0 - T Y EH1 - R EH0 Z\nGUTKNECHT  G UW1 T - N EH0 K T\nGUTKOWSKI  G AH0 T - K AO1 F S - K IY0\nGUTLESS  G AH1 T - L EH0 S\nGUTMAN  G AH1 T - M AH0 N\nGUTMANN  G AH1 T - M AH0 N\nGUTOWSKI  G AH0 - T AO1 F S - K IY0\nGUTRIDGE  G AH1 - T R IH2 JH\nGUTS  G AH1 T S\nGUTSHALL  G AH1 - CH AH0 L\nGUTSY  G AH1 T - S IY1\nGUTT  G AH1 T\nGUTTED  G AH1 - T IH0 D\nGUTTENBERG  G AH1 - T AH0 N - B ER0 G\nGUTTER  G AH1 - T ER0\nGUTTERED  G AH1 - T ER0 D\nGUTTERING  G AH1 - T ER0 - IH0 NG\nGUTTERMAN  G AH1 - T ER0 - M AH0 N\nGUTTERS  G AH1 - T ER0 Z\nGUTTING  G AH1 - T IH0 NG\nGUTTMACHER  G AH1 T - M AA2 - K ER0\nGUTTMAN  G AH1 T - M AH0 N\nGUTTMANN  G AH1 T - M AH0 N\nGUTTURAL  G AH1 - T ER0 - AH0 L\nGUTWAKS  G AH1 T - W AA2 K S\nGUTWEIN  G AH1 - T W AY2 N\nGUTZMAN  G AH1 T S - M AH0 N\nGUTZMER  G AH1 T S - M ER0\nGUTZWILLER  G AH1 T - S W IH2 - L ER0\nGUY  G AY1\nGUY'S  G AY1 Z\nGUYANA  G AY2 - AA1 - N AH0\nGUYER  G AY1 - ER0\nGUYETT  G AY2 - EH1 T\nGUYETTE  G AY2 - EH1 T\nGUYMON  G AY1 - M AH0 N\nGUYNES  G AY1 N Z\nGUYNN  G AY1 N\nGUYON  G AY1 - AH0 N\nGUYOT  G AY1 - AH0 T\nGUYS  G AY1 Z\nGUYS'  G AY1 Z\nGUYTON  G AY1 - T AH0 N\nGUZA  G Y UW1 - Z AH0\nGUZEK  G UW1 - Z EH0 K\nGUZIK  G Y UW1 - Z IH0 K\nGUZMAN  G AH1 Z - M AH0 N\nGUZMAN(2)  G UW1 Z - M AA2 N\nGUZOWSKI  G AH0 - Z AO1 F S - K IY0\nGUZY  G Y UW1 - Z IY0\nGUZZARDO  G UW0 T - S AA1 R - D OW0\nGUZZETTA  G UW0 T - S EH1 - T AH0\nGUZZETTI  G Y UW0 - Z EH1 - T IY0\nGUZZI  G UW1 T - S IY0\nGUZZLE  G AH1 - Z AH0 L\nGUZZLER  G AH1 Z - L ER0\nGUZZLERS  G AH1 - Z AH0 L - ER0 Z\nGUZZLERS(2)  G AH1 Z - L ER0 Z\nGUZZLES  G AH1 - Z AH0 L Z\nGUZZLING  G AH1 - Z AH0 L - IH0 NG\nGUZZLING(2)  G AH1 Z - L IH0 NG\nGUZZO  G UW1 - Z OW0\nGVARYAHU  G AH0 - V EH0 R - Y AA1 - HH UW0\nGWALTNEY  G W AO1 L T - N IY0\nGWARTNEY  G W AO1 R T - N IY0\nGWAY  G W EY1\nGWAY(2)  JH IY1 - W EY2\nGWEN  G W EH1 N\nGWENDA  G W EH1 N - D AH0\nGWENDOLYN  G W EH1 N - D AH0 - L IH0 N\nGWENNIE  G W EH1 - N IY0\nGWENORE  G W EH1 - N ER0\nGWIN  G W IH1 N\nGWINN  G W IH1 N\nGWINNER  G W IH1 - N ER0\nGWINNETT  G W IH0 - N EH1 T\nGWIZDALA  G W IH0 Z - D AA1 - L AH0\nGWOZDZ  G W AA1 Z D Z\nGWYN  G W IH1 N\nGWYNN  G W IH1 N\nGWYNNE  G W IH1 N\nGYGER  G AY1 - G ER0\nGYI  G IY1\nGYI(2)  JH IY1 - W AY1 - AY1\nGYLES  JH AY1 L Z\nGYLLENHAMMAR  JH IH1 - L EH0 N - HH AE2 - M ER0\nGYM  JH IH1 M\nGYM'S  JH IH1 M Z\nGYMBOREE  JH IH2 M - B AO0 - R IY1\nGYMNASIA  JH IH0 M - N EY1 - Z IY0 - AH0\nGYMNASIUM  JH IH0 M - N EY1 - Z IY0 - AH0 M\nGYMNASIUMS  JH IH0 M - N EY1 - Z IY0 - AH0 M Z\nGYMNAST  JH IH1 M - N AH0 S T\nGYMNASTIC  JH IH0 M - N AE1 - S T IH0 K\nGYMNASTICS  JH IH0 M - N AE1 - S T IH0 K S\nGYMNASTS  JH IH1 M - N AE0 S T S\nGYMNASTS(2)  JH IH1 M - N AE0 S S\nGYMNASTS(3)  JH IH1 M - N AE0 S\nGYMS  JH IH1 M Z\nGYN  G IH1 N\nGYN(2)  G AY1 N\nGYNECOLOGIC  G AY2 - N AH0 - K AH0 - L AA1 - JH IH0 K\nGYNECOLOGICAL  G AY2 - N AH0 - K AH0 - L AA1 - JH IH0 - K AH0 L\nGYNECOLOGIST  G AY2 - N AH0 - K AA1 - L AH0 - JH AH0 S T\nGYNECOLOGISTS  G AY2 - N AH0 - K AA1 - L AH0 - JH AH0 S T S\nGYNECOLOGISTS(2)  G AY2 - N AH0 - K AA1 - L AH0 - JH AH0 S S\nGYNECOLOGISTS(3)  G AY2 - N AH0 - K AA1 - L AH0 - JH AH0 S\nGYNECOLOGY  G AY2 - N AH0 - K AA1 - L AH0 - JH IY0\nGYNEX  JH IH1 - N AH0 K S\nGYOHTEN  G Y OW1 - T AH0 N\nGYOSAI  G Y OW1 - S EY2\nGYP  JH IH1 P\nGYPPED  JH IH1 P T\nGYPSIES  JH IH1 P - S IY0 Z\nGYPSUM  JH IH1 P - S AH0 M\nGYPSUM'S  JH IH1 P - S AH0 M Z\nGYPSY  JH IH1 P - S IY0\nGYR  JH AY1 R\nGYRATE  JH AY1 - R EY2 T\nGYRATED  JH AY1 - R EY2 - T IH0 D\nGYRATING  JH AY1 - R EY2 - T IH0 NG\nGYRATION  JH AY0 - R EY1 - SH AH0 N\nGYRATIONS  JH AY0 - R EY1 - SH AH0 N Z\nGYRO  JH AY1 - R OW2\nGYROCOMPASS  JH AY1 - R OW0 - K AH2 M - P AH0 S\nGYROPILOT  JH AY1 - R OW0 - P AY2 - L AH0 T\nGYROS  JH AY1 - R OW2 Z\nGYROSCOPE  JH AY1 - R AH0 - S K OW2 P\nGYROSCOPES  JH AY1 - R AH0 - S K OW2 P S\nGYROSCOPIC  JH AY2 - R AH0 - S K AA1 - P IH0 K\nGYTHA  JH AY1 - DH AH0\nGYUHAMA  G Y UW2 - HH AA1 - M AH0\nH  EY1 CH\nH'S  EY1 - CH IH0 Z\nH.  EY1 CH\nH.'S  EY1 - CH IH0 Z\nHA  HH AA1\nHA'ARETZ  HH AA1 - R EH0 T S\nHA'ARETZ(2)  HH AH0 - AA1 - R EH0 T S\nHA'ETZNI  HH AH0 - EH1 T S - N IY0\nHA(2)  EY1 - CH EY1\nHAAB  HH AA1 B\nHAACK  HH AA1 K\nHAACKE  HH AA1 K\nHAAF  HH AA1 F\nHAAG  HH AA1 G\nHAAGEN  HH AA1 - G AH0 N\nHAAGENSON  HH AA1 - G IH0 N - S AH0 N\nHAAK  HH AA1 K\nHAAKE  HH AA1 K\nHAAKENSON  HH AA1 - K IH0 N - S AH0 N\nHAALAND  HH AA1 - L AH0 N D\nHAAN  HH AA1 N\nHAAPALA  HH AA2 - P AA1 - L AH0\nHAAR  HH AA1 R\nHAAS  HH AA1 S\nHAASE  HH AA1 S\nHAASS  HH AA1 S\nHAAVELMO  HH AA2 - V EH1 L - M OW0\nHABBEN  HH AE1 - B AH0 N\nHABEAS  HH AE1 - B IY0 - AH0 S\nHABECK  HH AA1 - B EH0 K\nHABECKER  HH AE1 - B EH0 - K ER0\nHABEEB  HH AE1 - B IY0 B\nHABEGGER  HH AE1 - B IH0 - G ER0\nHABEL  HH AE1 - B AH0 L\nHABENICHT  HH AE1 - B IH0 - N IH0 K T\nHABER  HH EY1 - B ER0\nHABERDASHERY  HH AE1 - B ER0 - D AE2 - SH ER0 - IY0\nHABERER  HH AE1 - B ER0 - ER0\nHABERKORN  HH AE1 - B ER0 - K ER0 N\nHABERL  HH AE1 - B ER0 L\nHABERLAND  HH AE1 - B ER0 - L AH0 N D\nHABERLE  HH AE1 - B ER0 - AH0 L\nHABERMAN  HH EY1 - B ER0 - M AH0 N\nHABERMANN  HH EY1 - B ER0 - M AH0 N\nHABERMEHL  HH AE1 - B ER0 - M AH0 L\nHABERSON  HH EY1 - B ER0 - S IH0 N\nHABERSON(2)  HH AE1 - B ER0 - S IH0 N\nHABERSTROH  HH AA0 - B EH1 R - S T R OW0\nHABIB  HH AH0 - B IY1 B\nHABIBIE  HH AH0 - B IY1 - B IY0\nHABICH  HH AE1 - B IH0 K\nHABICHT  HH AE1 - B IH0 K T\nHABIG  HH AE1 - B IH0 G\nHABIGER  HH AE1 - B IH0 - G ER0\nHABIT  HH AE1 - B AH0 T\nHABITABLE  HH AE1 - B AH0 - T AH0 - B AH0 L\nHABITAT  HH AE1 - B AH0 - T AE2 T\nHABITAT'S  HH AE1 - B AH0 - T AE2 T S\nHABITATION  HH AE2 - B AH0 - T EY1 - SH AH0 N\nHABITATS  HH AE1 - B AH0 - T AE2 T S\nHABITS  HH AE1 - B AH0 T S\nHABITUAL  HH AH0 - B IH1 - CH UW0 - AH0 L\nHABITUALLY  HH AH0 - B IH1 - CH UW0 - AH0 - L IY0\nHABITUALLY(2)  HH AH0 - B IH1 - CH UW0 - L IY0\nHABITUES  HH AE1 - B IH0 - CH UW0 Z\nHABLE  HH EY1 - B AH0 L\nHABS  HH AE1 B Z\nHABSBURG  HH AE1 P S - B ER0 G\nHABY  HH EY1 - B IY0\nHABYARIMANA  HH AE2 - B IY0 - ER0 - IY0 - M AA1 - N AH0\nHABYARIMANA(2)  HH AE2 - B IY0 - AA0 - R IY0 - M AA1 - N AH0\nHACH  HH AE1 CH\nHACHETTE  HH AH0 - SH EH1 T\nHACHEY  HH AE1 - CH IY0\nHACHTEL  HH AE1 K - T AH0 L\nHACIENDA  HH AE2 - S IY0 - EH1 N - D AH0\nHACK  HH AE1 K\nHACKATHORN  HH AE1 - K AH0 - TH ER0 N\nHACKBART  HH AE1 K - B AA2 R T\nHACKBARTH  HH AE1 K - B AA2 R TH\nHACKBERRY  HH AE1 K - B EH2 - R IY0\nHACKE  HH AE1 K\nHACKED  HH AE1 K T\nHACKEL  HH AE1 - K AH0 L\nHACKENBERG  HH AE1 - K AH0 N - B ER0 G\nHACKENSACK  HH AE1 - K AH0 N - S AE2 K\nHACKER  HH AE1 - K ER0\nHACKER'S  HH AE1 - K ER0 Z\nHACKERS  HH AE1 - K ER0 Z\nHACKERT  HH AE1 - K ER0 T\nHACKETT  HH AE1 - K IH0 T\nHACKFORD  HH AE1 K - F ER0 D\nHACKING  HH AE1 - K IH0 NG\nHACKL  HH AE1 - K AH0 L\nHACKLE  HH AE1 - K AH0 L\nHACKLEMAN  HH AE1 - K AH0 L - M AH0 N\nHACKLER  HH AE1 - K AH0 - L ER0\nHACKLER(2)  HH AE1 K - L ER0\nHACKLES  HH AE1 - K AH0 L Z\nHACKLEY  HH AE1 K - L IY0\nHACKMAN  HH AE1 K - M AE2 N\nHACKMAN(2)  HH AE1 K - M AH0 N\nHACKMANN  HH AE1 K - M AH0 N\nHACKMATACK  HH AE1 K - M AH0 - T AE2 K\nHACKNEY  HH AE1 K - N IY0\nHACKNEYED  HH AE1 K - N IY0 D\nHACKS  HH AE1 K S\nHACKSAW  HH AE1 K - S AO2\nHACKSTAFF  HH AE1 K - S T AE2 F\nHACKWORTH  HH AE1 K - W ER2 TH\nHAD  HH AE1 D\nHADA  HH AA1 - D AH0\nHADAD  HH AE1 - D AH0 D\nHADAWAY  HH AA1 D - AH0 - W EY0\nHADD  HH AE1 D\nHADDAD  HH AE1 - D AH0 D\nHADDAN  HH AE1 - D AH0 N\nHADDAWAY  HH AE1 - D AH0 - W EY0\nHADDEN  HH AE1 - D AH0 N\nHADDOCK  HH AE1 - D AH0 K\nHADDON  HH AE1 - D AH0 N\nHADDOW  HH AE1 - D OW0\nHADE  HH EY1 D\nHADEN  HH EY1 - D AH0 N\nHADER  HH EY1 - D ER0\nHADES  HH EY1 - D IY0 Z\nHADES(2)  HH EY1 D Z\nHADFIELD  HH AE1 D - F IY2 L D\nHADID  HH AA0 - D IY1 D\nHADLEIGH  HH AE1 D - L AH0\nHADLER  HH EY1 - D AH0 - L ER0\nHADLER(2)  HH EY1 D - L ER0\nHADLEY  HH AE1 D - L IY0\nHADLINE  HH AE1 D - L AY0 N\nHADLOCK  HH AE1 D - L AH0 K\nHADN'T  HH AE1 - D AH0 N T\nHADN'T(2)  HH AE1 - D AH0 N\nHADNOT  HH AE1 D - N AH0 T\nHADRIA  HH AE1 - D R IY0 - AH0\nHADRIAN  HH AE1 - D R IY0 - AH0 N\nHADRIAN'S  HH EY1 - D R IY0 - AH0 N Z\nHADRIAN(2)  HH EY1 - D R IY0 - AH0 N\nHADSALL  HH AE1 D - S AH0 L\nHADSELL  HH AE1 D - S AH0 L\nHADSON  HH AE1 D - S AH0 N\nHADWIN  HH AE1 D - W IH0 N\nHAEBERLE  HH EH1 - B ER0 - AH0 L\nHAECKER  HH EH1 - K ER0\nHAEFELE  HH EH1 - F AH0 L\nHAEFFNER  HH EH1 F - N ER0\nHAEFNER  HH EH1 F - N ER0\nHAEGELE  HH EH1 - G AH0 L\nHAEGER  HH EH1 - G ER0\nHAEN  HH IY1 N\nHAENEL  HH EH1 - N AH0 L\nHAERING  HH AA1 - ER0 - IH0 NG\nHAERTEL  HH EH1 R - T AH0 L\nHAESE  HH IY1 S\nHAESSLY  HH AE1 S - L IY0\nHAEUSSLER  HH AW1 S - L ER0\nHAFELE  HH AE1 - F AH0 L\nHAFEMAN  HH EY1 F - M AH0 N\nHAFEN  HH AE1 - F AH0 N\nHAFER  HH EY1 - F ER0\nHAFEY  HH EY1 - F IY0\nHAFEZ  HH AA1 - F EH0 Z\nHAFF  HH AE1 F\nHAFFEY  HH AE1 - F IY0\nHAFFEZ  HH AA1 - F EH0 Z\nHAFFNER  HH AE1 F - N ER0\nHAFFORD  HH AE1 - F ER0 D\nHAFIF  HH AA0 - F IY1 F\nHAFIF'S  HH AA0 - F IY1 F S\nHAFLEY  HH AE1 F - L IY0\nHAFNER  HH AE1 F - N ER0\nHAFNIA  HH AE1 F - N IY0 - AH0\nHAFNIUM  HH AE1 F - N IY0 - AH0 M\nHAFT  HH AE1 F T\nHAFT'S  HH AE1 F T S\nHAFT'S(2)  HH AE1 F S\nHAFTA  HH AE1 F - T AH0\nHAFTS  HH AE1 F T S\nHAFTS'  HH AE1 F T S\nHAFTS'(2)  HH AE1 F S\nHAFTS(2)  HH AE1 F S\nHAG  HH AE1 G\nHAGA  HH AA1 - G AH0\nHAGADORN  HH AE1 - G AH0 - D AO0 R N\nHAGAMAN  HH AE1 - G AH0 - M AH0 N\nHAGAN  HH EY1 - G AH0 N\nHAGANS  HH EY1 - G AH0 N Z\nHAGAR  HH EY1 - G AA0 R\nHAGAR(2)  HH EY1 - G ER0\nHAGARTY  HH AE1 - G AA0 R - T IY0\nHAGBERG  HH AE1 G - B ER0 G\nHAGE  HH EY1 JH\nHAGEDORN  HH AE1 - G IH0 - D ER0 N\nHAGEE  HH AE1 - JH IY0\nHAGEL  HH AE1 - G AH0 L\nHAGELIN  HH AE1 - G IH0 - L IH0 N\nHAGEMAN  HH EY1 JH - M AH0 N\nHAGEMANN  HH EY1 JH - M AH0 N\nHAGEMEIER  HH AE1 - G IH0 - M AY0 - ER0\nHAGEMEISTER  HH AE1 - G IH0 - M AY0 - S T ER0\nHAGEMEYER  HH AE1 - G IH0 - M AY0 - ER0\nHAGEN  HH EY1 - G AH0 N\nHAGENBUCH  HH AE1 - G IH0 N - B AH0 K\nHAGENLOCKER  HH EY1 - G AH0 N - L AA2 - K ER0\nHAGENOW  HH AE1 - JH IH0 - N OW0\nHAGENS  HH EY1 - G AH0 N Z\nHAGER  HH EY1 - G ER0\nHAGERMAN  HH EY1 - G ER0 - M AH0 N\nHAGERSTOWN  HH EY1 - G ER0 Z - T AW2 N\nHAGERTY  HH AE1 - JH ER0 - T IY0\nHAGEWOOD  HH EY1 JH - W UH0 D\nHAGEY  HH AE1 - JH IY0\nHAGFISH  HH AE1 G - F IH0 SH\nHAGG  HH AE1 G\nHAGGADAH  HH AH0 - G AH1 - D AH0\nHAGGAN  HH AE1 - G AH0 N\nHAGGAR  HH AE1 - G ER0\nHAGGARD  HH AE1 - G ER0 D\nHAGGART  HH AE1 - G ER0 T\nHAGGARTY  HH AE1 - G AA2 R - T IY0\nHAGGE  HH AE1 G\nHAGGERTY  HH AE1 - G ER0 - T IY0\nHAGGETT  HH AE1 - G IH0 T\nHAGGINS  HH AE1 - G IH0 N Z\nHAGGLE  HH AE1 - G AH0 L\nHAGGLED  HH AE1 - G AH0 L D\nHAGGLING  HH AE1 - G AH0 - L IH0 NG\nHAGGLING(2)  HH AE1 - G L IH0 NG\nHAGGLUND  HH AE1 G - L AH0 N D\nHAGGSTROM  HH AE1 G S - T R AH0 M\nHAGIN  HH AE1 - JH IH0 N\nHAGIN(2)  HH AE1 - G IH2 N\nHAGINS  HH AE1 - G IH0 N Z\nHAGINS(2)  HH AE1 - JH IH2 N Z\nHAGIOGRAPHY  HH AE2 - G IY0 - AA1 - G R AH0 - F IY0\nHAGIWARA  HH AA2 - G IH0 - W AA1 - R AH0\nHAGLE  HH EY1 - G AH0 L\nHAGLER  HH AE1 - G L ER0\nHAGLEY  HH AE1 G - L IY0\nHAGLUND  HH AE1 G - L AH0 N D\nHAGMAN  HH AE1 G - M AH0 N\nHAGMANN  HH AE1 G - M AH0 N\nHAGNER  HH AE1 G - N ER0\nHAGOOD  HH AE1 - G UH0 D\nHAGOPIAN  HH AH0 - G OW1 - P IY0 - AH0 N\nHAGSTROM  HH AE1 G S - T R AH0 M\nHAGUE  HH EY1 G\nHAGWOOD  HH AE1 G - W UH2 D\nHAGY  HH EY1 - G IY0\nHAH  HH AA1\nHAHL  HH AA1 L\nHAHM  HH AE1 M\nHAHN  HH AA1 N\nHAHNE  HH EY1 N\nHAHNER  HH AA1 - N ER0\nHAHS  HH AA1 S\nHAID  HH EY1 D\nHAIDEE  HH EY1 - D IY0\nHAIDER  HH EY1 - D ER0\nHAIDET  HH EY1 - D IH0 T\nHAIFA  HH AY1 - F AH0\nHAIFONG  HH AY1 - F AO0 NG\nHAIG  HH EY1 G\nHAIG'S  HH EY1 G Z\nHAIGH  HH EY1\nHAIGHT  HH EY1 T\nHAIGLER  HH EY1 G - L ER0\nHAIK  HH EY1 K\nHAIKU  HH AY1 - K UW0\nHAIL  HH EY1 L\nHAILAND  HH EY1 - L AH0 N D\nHAILE  HH EY1 L\nHAILE(2)  HH AY1 - L IY0\nHAILED  HH EY1 L D\nHAILES  HH EY1 L Z\nHAILES(2)  HH AY1 - L IY0 Z\nHAILEY  HH EY1 - L IY0\nHAILING  HH EY1 - L IH0 NG\nHAILS  HH EY1 L Z\nHAILSTONE  HH EY1 L - S T OW2 N\nHAILSTONES  HH EY1 L - S T OW2 N Z\nHAILSTORM  HH EY1 L - S T AO2 R M\nHAIM  HH AY1 M\nHAIM(2)  HH EY1 M\nHAIMES  HH EY1 M Z\nHAIMOVITCH  HH EY1 - M AH0 - V IH0 CH\nHAIMOVITZ  HH EY1 - M AH0 - V IH0 T S\nHAIMOWITZ  HH AY1 - M AH0 - W IH0 T S\nHAIN  HH EY1 N\nHAINAN  HH EY1 - N AH0 N\nHAINER  HH EY1 - N ER0\nHAINES  HH EY1 N Z\nHAINEY  HH EY1 - N IY0\nHAINLEY  HH EY1 N - L IY0\nHAINLINE  HH EY1 N - L AY2 N\nHAINS  HH EY1 N Z\nHAINSWORTH  HH EY1 N - S W ER0 TH\nHAIR  HH EH1 R\nHAIR'S  HH EH1 R Z\nHAIRCUT  HH EH1 R - K AH2 T\nHAIRCUTS  HH EH1 R - K AH2 T S\nHAIRDO  HH EH1 R - D UW2\nHAIRDOS  HH EH1 R - D UW2 Z\nHAIRDRESSER  HH EH1 R - D R EH2 - S ER0\nHAIRDRESSERS  HH EH1 R - D R EH2 - S ER0 Z\nHAIRDRESSING  HH EH1 R - D R EH2 - S IH0 NG\nHAIRE  HH EH1 R\nHAIRED  HH EH1 R D\nHAIRFIELD  HH EH1 R - F IY2 L D\nHAIRGROVE  HH AY1 R - G R AH0 V\nHAIRINESS  HH EH1 - R IY0 - N AH0 S\nHAIRLESS  HH EH1 R - L AH0 S\nHAIRLINE  HH EH1 R - L AY2 N\nHAIRR  HH EH1 R\nHAIRS  HH EH1 R Z\nHAIRSPRAY  HH EH1 R - S P R EY2\nHAIRSTON  HH AY1 R - S T AH0 N\nHAIRSTYLE  HH EH1 R - S T AY2 L\nHAIRY  HH EH1 - R IY0\nHAISLEY  HH EY1 Z - L IY0\nHAISLIP  HH AY1 S - L IH0 P\nHAIST  HH AA1 - IH0 S T\nHAIT  HH EY1 T\nHAITH  HH EY1 TH\nHAITHCOCK  HH EY1 TH - K AA2 K\nHAITI  HH EY1 - T IY0\nHAITI'S  HH EY1 - T IY0 Z\nHAITIAN  HH EY1 - SH AH0 N\nHAITIANS  HH EY1 - SH AH0 N Z\nHAITIEN  HH EY1 - SH AH0 N\nHAITIENS  HH EY1 - SH AH0 N Z\nHAITIS  HH EY1 - T IY0 Z\nHAIZLIP  HH EY1 Z - L IH0 P\nHAJDU  HH AA1 Y - D UW0\nHAJDUK  HH AY1 - D AH0 K\nHAJEK  HH AY1 - EH0 K\nHAJIME  HH AA0 - JH IY1 - M IY0\nHAJJ  HH AE1 JH\nHAJJAR  HH AA0 - Y AA1 R\nHAKALA  HH AH0 - K AA1 - L AH0\nHAKAN  HH EY1 - K AH0 N\nHAKAN(2)  HH AA1 - K AH0 N\nHAKANSON  HH AE1 - K AH0 N - S AH0 N\nHAKE  HH EY1 K\nHAKES  HH EY1 K S\nHAKIM  HH AA0 - K IY1 M\nHAKIM'S  HH AA0 - K IY1 M Z\nHAKIM'S(2)  AA0 - K IY1 M Z\nHAKIM(2)  AA0 - K IY1 M\nHAKKI  HH AE1 - K IY0\nHAKKO  HH AE1 - K OW0\nHAKON  HH AE1 - K AH0 N\nHAKUHODO  HH AA2 - K UW2 - HH OW1 - D OW0\nHAL  HH AE1 L\nHAL'S  HH AE1 L Z\nHALAMA  HH AA0 - L AA1 - M AH0\nHALAMANDARIS  HH AE2 - L AH0 - M AE1 N - D ER0 - IH0 S\nHALAS  HH AA1 - L AH0 Z\nHALASZ  HH AA1 - L AH0 SH\nHALBACH  HH AE1 L - B AA0 K\nHALBERG  HH AE1 L - B ER0 G\nHALBERSTADT  HH AE1 L - B ER0 SH - T AE0 T\nHALBERSTAM  HH AE1 L - B ER0 - S T AE0 M\nHALBERT  HH AE1 L - B ER0 T\nHALBIG  HH AE1 L - B IH0 G\nHALBROOK  HH AE1 L - B R UH0 K\nHALBROOKS  HH AE1 L - B R UH0 K S\nHALBUR  HH AE1 L - B ER0\nHALBUTOGULLARI  HH AE0 L - B UW2 - T OW2 - G UW0 - L AA1 - R IY0\nHALCION  HH AE1 L - S IY0 - AH0 N\nHALCION'S  HH AE1 L - S IY0 - AH0 N Z\nHALCOMB  HH AE1 L - K AH0 M\nHALCYON  HH AE1 L - S IY0 - AH0 N\nHALCYONE  HH AE1 L - S IY0 - OW0 N\nHALD  HH AO1 L D\nHALDAN  HH AE1 L - D AH0 N\nHALDANA  HH AH0 L - D AE1 - N AH0\nHALDEMAN  HH AA1 L D - M AH0 N\nHALDEMAN'S  HH AA1 L D - M AH0 N Z\nHALDEMAN'S(2)  HH AA1 L - D AH0 - M AH0 N Z\nHALDEMAN(2)  HH AA1 L - D AH0 - M AH0 N\nHALDEN  HH AO1 L - D AH0 N\nHALDER  HH AO1 L - D ER0\nHALDERMAN  HH AO1 L - D ER0 - M AH0 N\nHALE  HH EY1 L\nHALE'S  HH EY1 L Z\nHALEN  HH EY1 - L EH0 N\nHALES  HH EY1 L Z\nHALEY  HH EY1 - L IY0\nHALEY'S  HH EY1 - L IY0 Z\nHALF  HH AE1 F\nHALF'S  HH AE1 F S\nHALFACRE  HH AE1 - F EY2 - K ER0\nHALFBACK  HH AE1 F - B AE2 K\nHALFDAN  HH AE1 L F - D AH0 N\nHALFERTY  HH AE1 - F ER0 - T IY0\nHALFHEARTED  HH AE1 F - HH AA2 R - T IH0 D\nHALFHILL  HH AE1 F - HH IH2 L\nHALFMAN  HH AE1 F - M AH0 N\nHALFMANN  HH AE1 F - M AH0 N\nHALFORD  HH AE1 - F ER0 D\nHALFRIDA  HH AE1 - F R IH0 - D AH0\nHALFTIME  HH AE1 F - T AY2 M\nHALFTONE  HH AE1 F - T OW2 N\nHALFWAY  HH AE1 F - W EY1\nHALGREN  HH AE1 L - G R EH0 N\nHALIBURTON  HH AE1 - L IH0 - B ER2 - T AH0 N\nHALIBUT  HH AE1 - L AH0 - B AH0 T\nHALIDE  HH AE1 - L AY2 D\nHALIFAX  HH AE1 - L IH0 - F AE2 K S\nHALIK  HH AE1 - L IH0 K\nHALIMA  HH AH0 - L IY1 - M AH0\nHALIMEDA  HH AA0 - L IY0 - M EY1 - D AH0\nHALITE  HH AE1 - L AY0 T\nHALKO  HH AE1 L - K OW0\nHALL  HH AO1 L\nHALL'S  HH AO1 L Z\nHALLA  HH AE1 - L AH0\nHALLADAY  HH AE1 - L AH0 - D EY2\nHALLAHAN  HH AE1 - L AH0 - HH AE0 N\nHALLAM  HH AE1 - L AH0 M\nHALLANAN  HH AE1 - L AH0 - N AH0 N\nHALLANDALE  HH AE1 - L AH0 N - D EY2 L\nHALLAS  HH AE1 - L AH0 Z\nHALLAUER  HH AE1 - L AW0 - ER0\nHALLBAUER  HH AO1 L - B AW2 R\nHALLBERG  HH AO1 L - B ER0 G\nHALLE  HH AE1 L\nHALLE(2)  HH AE1 - L IY0\nHALLECK  HH AE1 - L IH0 K\nHALLELUJAH  HH AE2 - L AH0 - L UW1 - Y AH0\nHALLEN  HH AO1 - L AH0 N\nHALLENBECK  HH AO1 - L AH0 N - B EH2 K\nHALLER  HH AO1 - L ER0\nHALLERAN  HH AE1 - L ER0 - AE0 N\nHALLET  HH AE1 - L IH0 T\nHALLETT  HH AE1 - L IH0 T\nHALLEY  HH AE1 - L IY0\nHALLEY(2)  HH EY1 - L IY0\nHALLFORD  HH AE1 L - F ER0 D\nHALLGARTEN  HH AO1 L - G AA2 R - T AH0 N\nHALLGREN  HH AE1 L - G R EH0 N\nHALLIBURTON  HH AE1 - L IH0 - B ER2 - T AH0 N\nHALLIBURTON'S  HH AE1 - L IH0 - B ER2 - T AH0 N Z\nHALLICIFORN  HH AH0 - L IH1 - S IH0 - F AO0 R N\nHALLIDAY  HH AE1 - L IH0 - D EY2\nHALLIE  HH AO1 - L IY0\nHALLIGAN  HH AE1 - L IH0 - G AH0 N\nHALLIN  HH AE1 - L IH0 N\nHALLINAN  HH AE1 - L IH0 - N AH0 N\nHALLING  HH AO1 - L IH0 NG\nHALLINGBY  HH AO1 - L IH0 NG - B IY0\nHALLISEY  HH AE1 - L IH0 - S IY0\nHALLMAN  HH AO1 L - M AH0 N\nHALLMARK  HH AA1 L - M AA2 R K\nHALLMARK'S  HH AO1 L - M AA2 R K S\nHALLMARKS  HH AO1 L - M AA2 R K S\nHALLOCK  HH AE1 - L AH0 K\nHALLORAN  HH AE1 - L ER0 - AH0 N\nHALLOW  HH AE1 - L OW0\nHALLOWAY  HH AE1 - L OW0 - W EY2\nHALLOWE'EN  HH AE2 - L AH0 W - IY1 N\nHALLOWED  HH AE1 - L OW0 D\nHALLOWEEN  HH AE2 - L AH0 W - IY1 N\nHALLOWELL  HH AE1 - L AH0 W - EH0 L\nHALLOWS  HH AE1 - L OW0 Z\nHALLQUIST  HH AE1 L - K W IH0 S T\nHALLS  HH AO1 L Z\nHALLSTROM  HH AE1 L - S T R AH0 M\nHALLUCINATE  HH AH0 - L UW1 - S AH0 - N EY0 T\nHALLUCINATED  HH AH0 - L UW1 - S AH0 - N EY0 - T IH0 D\nHALLUCINATES  HH AH0 - L UW1 - S AH0 - N EY0 T S\nHALLUCINATING  HH AH0 - L UW1 - S AH0 - N EY0 - T IH0 NG\nHALLUCINATING(2)  HH AH0 - L UW1 - S IH0 - N EY0 - T IH0 NG\nHALLUCINATION  HH AH0 - L UW2 - S AH0 - N EY1 - SH AH0 N\nHALLUCINATIONS  HH AH0 - L UW2 - S AH0 - N EY1 - SH AH0 N Z\nHALLUCINATORY  HH AH0 - L UW1 - S AH0 - N AH0 - T AO2 - R IY0\nHALLUCINOGENIC  HH AH0 - L UW2 - S AH0 - N AH0 - JH EH1 - N IH0 K\nHALLUM  HH AE1 - L AH0 M\nHALLUMS  HH AE1 - L AH0 M Z\nHALLWARD  HH AO1 L - W ER0 D\nHALLWAY  HH AO1 L - W EY2\nHALLWAYS  HH AO1 L - W EY2 Z\nHALLWOOD  HH AO1 L - W UH2 D\nHALLY  HH AE1 - L IY0\nHALM  HH AA1 M\nHALMI  HH AO1 L - M IY0\nHALMOS  HH AO1 L - M OW0 S\nHALMSTAD  HH AA1 L M - S T AE2 D\nHALO  HH EY1 - L OW0\nHALOGEN  HH AE1 - L AH0 - JH AH0 N\nHALOGENATE  HH AE1 - L AH0 - JH AH0 - N EY2 T\nHALOGENATED  HH AE1 - L AH0 - JH AH0 - N EY2 - T IH0 D\nHALON  HH EY1 - L AA2 N\nHALOPHYTIC  HH AE2 - L AH0 - F IH1 - T IH0 K\nHALOS  HH EY1 - L OW0 Z\nHALPER  HH AE1 L - P ER0\nHALPERIN  HH AE1 L - P ER0 - IH0 N\nHALPERIN(2)  HH AE1 L - P R IH0 N\nHALPERN  HH AE1 L - P ER0 N\nHALPERT  HH AE1 L - P ER0 T\nHALPIN  HH AE1 L - P IH0 N\nHALPRIN  HH AE1 L - P R IH0 N\nHALSELL  HH AE1 L - S AH0 L\nHALSETH  HH AE1 L - S IH0 TH\nHALSEY  HH AE1 L - S IY0\nHALSTEAD  HH AE1 L - S T EH0 D\nHALSTED  HH AE1 L - S T IH0 D\nHALSTON  HH AO1 L - S T AH0 N\nHALT  HH AO1 L T\nHALTED  HH AO1 L - T AH0 D\nHALTED(2)  HH AO1 L - T IH0 D\nHALTEMAN  HH EY1 L T - M AH0 N\nHALTER  HH AO1 L - T ER0\nHALTERMAN  HH AO1 L - T ER0 - M AH0 N\nHALTERS  HH AO1 L - T ER0 Z\nHALTING  HH AO1 L - T IH0 NG\nHALTINGLY  HH AO1 L - T IH0 NG - L IY0\nHALTIWANGER  HH AE1 L - T IH0 - W AH0 - NG ER0\nHALTOM  HH AE1 L - T AH0 M\nHALTON  HH AE1 L - T AH0 N\nHALTS  HH AO1 L T S\nHALUSKA  HH AH0 - L AH1 - S K AH0\nHALVE  HH AE1 V\nHALVED  HH AE1 V D\nHALVERSON  HH AE1 L - V ER0 - S AH0 N\nHALVES  HH AE1 V Z\nHALVING  HH AE1 - V IH0 NG\nHALVORSEN  HH AE0 L - V AO1 R - S AH0 N\nHALVORSON  HH AE1 L - V ER0 - S AH0 N\nHAM  HH AE1 M\nHAMA  HH AA1 - M AH0\nHAMACHER  HH AE1 - M AH0 - K ER0\nHAMAD  HH AE1 - M AH0 D\nHAMADA  HH AA0 - M AA1 - D AH0\nHAMADEI  HH AE1 - M AH0 - D EY2\nHAMADI  HH AH0 - M AA1 - D IY0\nHAMAKER  HH AA1 - M EY0 - K ER0\nHAMAL  HH EY1 - M AH0 L\nHAMAMOTO  HH AA0 - M AA0 - M OW1 - T OW0\nHAMAN  HH EY1 - M AH0 N\nHAMANAKA  HH AH0 - M AH0 - N AA1 - K AH0\nHAMANN  HH AA1 - M AH0 N\nHAMAR  HH AH0 - M AA1 R\nHAMAS  HH AA2 - M AA1 S\nHAMAS'  HH AA2 - M AA1 S\nHAMASAKI  HH AA2 - M AA0 - S AA1 - K IY0\nHAMBELTON  HH AH0 M - B EH1 L - T AH0 N\nHAMBERG  HH AE1 M - B ER0 G\nHAMBERGER  HH AE1 M - B ER0 - G ER0\nHAMBLEN  HH AE1 M - B AH0 - L AH0 N\nHAMBLET  HH AE1 M - B L IH0 T\nHAMBLETON  HH AE1 M - B AH0 L - T AA0 N\nHAMBLEY  HH AE1 M - B L IY0\nHAMBLIN  HH AE1 M - B L IH0 N\nHAMBLY  HH AE1 M - B L IY0\nHAMBRECHT  HH AE1 M - B R EH2 K T\nHAMBRICK  HH AE1 M - B R IH2 K\nHAMBRIGHT  HH AE1 M - B R AY2 T\nHAMBRO  HH AE1 M - B R OW0\nHAMBROS  HH AE1 M - B R OW0 S\nHAMBURG  HH AE1 M - B ER0 G\nHAMBURGER  HH AE1 M - B ER0 - G ER0\nHAMBURGERS  HH AE1 M - B ER0 - G ER0 Z\nHAMBY  HH AE1 M - B IY0\nHAMDAN  HH AE1 M - D AH0 N\nHAMDOON  HH AE0 M - D UW1 N\nHAMED  HH AE1 M D\nHAMEISTER  HH AE1 - M AY0 - S T ER0\nHAMEL  HH AE1 - M AH0 L\nHAMELIN  HH AE1 - M AH0 - L IH0 N\nHAMELIN(2)  HH AE1 M - L IH2 N\nHAMER  HH AE1 - M ER0\nHAMES  HH EY1 M Z\nHAMID  HH AH0 - M IY1 D\nHAMIEL  HH AE1 - M IY0 L\nHAMIL  HH AE1 - M AH0 L\nHAMILL  HH AE1 - M AH0 L\nHAMILTON  HH AE1 - M AH0 L - T AH0 N\nHAMILTON'S  HH AE1 - M AH0 L - T AH0 N Z\nHAMISH  HH AE1 - M IH0 SH\nHAMITER  HH AE1 - M AY0 - T ER0\nHAMITIC  HH AE0 - M IH1 - T IH0 K\nHAMLER  HH AE1 - M AH0 - L ER0\nHAMLER(2)  HH AE1 M - L ER0\nHAMLET  HH AE1 M - L AH0 T\nHAMLET(2)  HH AE1 M - L IH0 T\nHAMLETS  HH AE1 M - L AH0 T S\nHAMLETT  HH AE1 M - L IH0 T\nHAMLEY  HH AE1 M - L IY0\nHAMLEY'S  HH AE1 M - L IY0 Z\nHAMLIN  HH AE1 M - L IH0 N\nHAMLING  HH AE1 M - L IH0 NG\nHAMLISCH  HH AE1 M - L IH0 SH\nHAMLISCH'S  HH AE1 M - L IH0 - SH AH0 Z\nHAMM  HH AE1 M\nHAMMAC  HH AE1 - M AH0 K\nHAMMACHER  HH AE1 - M AA2 - K ER0\nHAMMACK  HH AE1 - M AH0 K\nHAMMAKER  HH AE1 - M EY2 - K ER0\nHAMMAN  HH AE1 - M AH0 N\nHAMMANN  HH AE1 - M AH0 N\nHAMMAR  HH AE1 - M ER0\nHAMMAS  HH AH0 - M AA1 S\nHAMMAS'  HH AH0 - M AA1 S\nHAMMAS'S  HH AH0 - M AA1 - S IH0 S\nHAMME  HH AE1 M\nHAMMEL  HH AE1 - M AH0 L\nHAMMELL  HH AE1 - M AH0 L\nHAMMEN  HH AE1 - M AH0 N\nHAMMER  HH AE1 - M ER0\nHAMMER'S  HH AE1 - M ER0 Z\nHAMMERED  HH AE1 - M ER0 D\nHAMMERING  HH AE1 - M ER0 - IH0 NG\nHAMMERLE  HH AE1 - M ER0 - AH0 L\nHAMMERLOCK  HH AE1 - M ER0 - L AA2 K\nHAMMERMAN  HH AE1 - M ER0 - M AH0 N\nHAMMERMEISTER  HH AE1 - M ER0 - M AY2 - S T ER0\nHAMMERMILL  HH AE1 - M ER0 - M IH2 L\nHAMMERS  HH AE1 - M ER0 Z\nHAMMERSCHMIDT  HH AE1 - M ER0 SH - M IH2 T\nHAMMERSLEY  HH AE1 - M ER0 S - L IY0\nHAMMERSMITH  HH AE1 - M ER0 - S M IH2 TH\nHAMMERSON  HH AE1 - M ER0 - S AH0 N\nHAMMERSTEIN  HH AE1 - M ER0 - S T IY2 N\nHAMMERSTEIN'S  HH AE1 - M ER0 - S T IY2 N Z\nHAMMERSTEIN'S(2)  HH AE1 - M ER0 - S T AY2 N Z\nHAMMERSTEIN(2)  HH AE1 - M ER0 - S T AY2 N\nHAMMERSTROM  HH AE1 - M ER0 S - T R AH0 M\nHAMMES  HH AE1 M Z\nHAMMETT  HH AE1 - M IH0 T\nHAMMILL  HH AE1 - M AH0 L\nHAMMITT  HH AE1 - M IH0 T\nHAMMOCK  HH AE1 - M AH0 K\nHAMMOCKS  HH AE1 - M AH0 K S\nHAMMON  HH AE1 - M AH0 N\nHAMMOND  HH AE1 - M AH0 N D\nHAMMONDS  HH AE1 - M AH0 N D Z\nHAMMONS  HH AE1 - M AH0 N Z\nHAMMONTREE  HH AE0 - M AH0 N - T R IY1\nHAMNER  HH AE1 M - N ER0\nHAMON  HH AE1 - M AH0 N\nHAMOR  HH AE1 - M ER0\nHAMP  HH AE1 M P\nHAMPE  HH AE1 M P\nHAMPEL  HH AE1 M - P AH0 L\nHAMPER  HH AE1 M - P ER0\nHAMPERED  HH AE1 M - P ER0 D\nHAMPERING  HH AE1 M - P ER0 - IH0 NG\nHAMPERS  HH AE1 M - P ER0 Z\nHAMPLE  HH AE1 M - P AH0 L\nHAMPSHIRE  HH AE1 M P - SH ER0\nHAMPSHIRE'S  HH AE1 M P - SH ER0 Z\nHAMPSHIRE'S(2)  HH AE1 M - SH ER0 Z\nHAMPSHIRE'S(3)  HH AE1 M P - SH AY0 - ER0 Z\nHAMPSHIRE'S(4)  HH AE1 M - SH AY0 - ER0 Z\nHAMPSHIRE(2)  HH AE1 M - SH ER0\nHAMPSHIRE(3)  HH AE1 M P - SH AY0 - ER0\nHAMPSHIRE(4)  HH AE1 M - SH AY0 - ER0\nHAMPSHIRITES  HH AE1 M P - SH ER0 - AY2 T S\nHAMPSON  HH AE1 M P - S AH0 N\nHAMPSTEAD  HH AE1 M P - S T EH2 D\nHAMPTON  HH AE1 M P - T AH0 N\nHAMPTON'S  HH AE1 M P - T AH0 N Z\nHAMPTONS  HH AE1 M P - T AH0 N Z\nHAMRE  HH AE1 - M ER0\nHAMRIC  HH AE1 M - R IH0 K\nHAMRICK  HH AE1 M - R IH0 K\nHAMROCK  HH AE1 M - R AA2 K\nHAMS  HH AE1 M Z\nHAMSHER  HH AE1 M - SH ER0\nHAMSON  HH AE1 M - S AH0 N\nHAMSPHIRE  HH AE1 M S - F AY2 R\nHAMSTER  HH AE1 M - S T ER0\nHAMSTERS  HH AE1 M - S T ER0 Z\nHAMSTRA  HH AE1 M - S T R AH0\nHAMSTRING  HH AE1 M - S T R IH2 NG\nHAMSTRINGS  HH AE1 M - S T R IH2 NG Z\nHAMSTRUNG  HH AE1 M - S T R AH0 NG\nHAMTRAMCK  HH AE0 M - T R AE1 - M IH0 K\nHAN  HH AA1 N\nHAN'S  HH AA1 N Z\nHAN'S(2)  HH AE1 N Z\nHAN(2)  HH AE1 N\nHANA  HH AE1 - N AH0\nHANAFIN  HH AE1 - N AH0 - F IH0 N\nHANAGAN  HH AA0 - N AA1 - G AA0 N\nHANAHAN  HH AE1 - N AH0 - HH AE0 N\nHANAK  HH AA1 - N AH0 K\nHANAN  HH EY1 - N AH0 N\nHANAS  HH AE1 - N AH0 Z\nHANAUER  HH AE1 - N AW0 - ER0\nHANAWALT  HH AE1 - N AH0 - W AO2 L T\nHANAWAY  HH AE1 - N AH0 - W EY0\nHANBACK  HH AE1 N - B AE2 K\nHANBERRY  HH AE1 N - B EH2 - R IY0\nHANBURY  HH AE1 N - B EH2 - R IY0\nHANBY  HH AE1 N - B IY0\nHANCE  HH AE1 N S\nHANCHER  HH AE1 N - CH ER0\nHANCHETT  HH AE1 N - CH IH0 T\nHANCHEY  HH AE1 N - CH IY0\nHANCOCK  HH AE1 N - K AA2 K\nHANCOCK'S  HH AE1 N - K AA2 K S\nHANCOX  HH AE1 N - K AA0 K S\nHAND  HH AE1 N D\nHANDA  HH AE1 N - D AH0\nHANDBAG  HH AE1 N D - B AE2 G\nHANDBAGS  HH AE1 N D - B AE2 G Z\nHANDBALL  HH AE1 N D - B AO2 L\nHANDBILL  HH AE1 N D - B IH2 L\nHANDBILLS  HH AE1 N D - B IH2 L Z\nHANDBOOK  HH AE1 N D - B UH2 K\nHANDBOOKS  HH AE1 N D - B UH2 K S\nHANDCLASP  HH AE1 N D - K L AE2 S P\nHANDCRAFT  HH AE1 N D - K R AE2 F T\nHANDCRAFTED  HH AE1 N D - K R AE2 F - T IH0 D\nHANDCRAFTS  HH AE1 N D - K R AE2 F T S\nHANDCUFF  HH AE1 N D - K AH2 F\nHANDCUFFED  HH AE1 N D - K AH2 F T\nHANDCUFFS  HH AE1 N D - K AH2 F S\nHANDED  HH AE1 N - D AH0 D\nHANDED(2)  HH AE1 N - D IH0 D\nHANDEDLY  HH AE1 N - D IH0 D - L IY0\nHANDEDNESS  HH AE1 N - D AH0 D - N AH0 S\nHANDEL  HH AE1 N - D AH0 L\nHANDEL'S  HH AE1 N - D AH0 L Z\nHANDELAND  HH AE1 N - D IH0 - L AH0 N D\nHANDELMAN  HH AE1 N - D AH0 L - M AH0 N\nHANDELS  HH AE1 N - D AH0 L Z\nHANDELSBANK  HH AE1 N - D AH0 L Z - B AE2 NG K\nHANDELSBANKEN  HH AE2 N - D AH0 L - S B AE1 NG - K AH0 N\nHANDELSMAN  HH AE1 N - D IH0 L S - M AH0 N\nHANDER  HH AE1 N - D ER0\nHANDERS  HH AE1 N - D ER0 Z\nHANDFORD  HH AE1 N D - F ER0 D\nHANDFUL  HH AE1 N D - F UH2 L\nHANDFULS  HH AE1 N D - F UH2 L Z\nHANDGUN  HH AE1 N D - G AH2 N\nHANDGUNS  HH AE1 N D - G AH2 N Z\nHANDHELD  HH AE1 N D - HH EH1 L D\nHANDHOLD  HH AE1 N D - HH OW2 L D\nHANDHOLDING  HH AE1 N D - HH OW2 L - D IH0 NG\nHANDICAP  HH AE1 N - D IY0 - K AE2 P\nHANDICAPPED  HH AE1 N - D IY0 - K AE2 P T\nHANDICAPPER  HH AE1 N - D IY0 - K AE2 - P ER0\nHANDICAPPERS  HH AE1 N - D IY0 - K AE2 - P ER0 Z\nHANDICAPPING  HH AE1 N - D IY0 - K AE2 - P IH0 NG\nHANDICAPS  HH AE1 N - D IY0 - K AE2 P S\nHANDICRAFT  HH AE1 N - D IY0 - K R AE2 F T\nHANDICRAFTS  HH AE1 N - D IY0 - K R AE2 F T S\nHANDIER  HH AE1 N - D IY0 - ER0\nHANDILY  HH AE1 N - D AH0 - L IY0\nHANDING  HH AE1 N - D IH0 NG\nHANDIWORK  HH AE1 N - D IY0 - W ER2 K\nHANDKE  HH AE1 N D - K IY0\nHANDKERCHIEF  HH AE1 NG - K ER0 - CH IH0 F\nHANDKERCHIEF(2)  HH AE1 NG - K ER0 - CH IY0 F\nHANDKERCHIEFS  HH AE1 NG - K ER0 - CH AH0 F S\nHANDKERCHIEFS(2)  HH AE1 NG - K ER0 - CH IY0 F S\nHANDLE  HH AE1 N - D AH0 L\nHANDLEBAR  HH AE1 N - D AH0 L - B AA2 R\nHANDLEBARS  HH AE1 N - D AH0 L - B AA2 R Z\nHANDLED  HH AE1 N - D AH0 L D\nHANDLER  HH AE1 N D - L ER0\nHANDLER(2)  HH AE1 N - D AH0 - L ER0\nHANDLERS  HH AE1 N D - L ER0 Z\nHANDLERS(2)  HH AE1 N - D AH0 - L ER0 Z\nHANDLES  HH AE1 N - D AH0 L Z\nHANDLEY  HH AE1 N D - L IY0\nHANDLIN  HH AE1 N D - L IH0 N\nHANDLING  HH AE1 N D - L IH0 NG\nHANDLING(2)  HH AE1 N - D AH0 L - IH0 NG\nHANDLON  HH AE1 N D - L AH0 N\nHANDLOOM  HH AE1 N D - L UW2 M\nHANDLOOMS  HH AE1 N D - L UW2 M Z\nHANDLY  HH AE1 N D - L IY0\nHANDMADE  HH AE1 N D - M EY1 D\nHANDMADE(2)  HH AE1 N - M EY1 D\nHANDOUT  HH AE1 N D - AW2 T\nHANDOUTS  HH AE1 N D - AW2 T S\nHANDOVER  HH AE1 N D - OW0 - V ER0\nHANDPICK  HH AE1 N D - P IH1 K\nHANDPICKED  HH AE1 N D - P IH1 K T\nHANDRAIL  HH AE1 N D - R EY2 L\nHANDRICH  HH AE1 N - D R IH0 K\nHANDROS  HH AE1 N - D R OW0 S\nHANDS  HH AE1 N D Z\nHANDS(2)  HH AE1 N Z\nHANDSAW  HH AE1 N D - S AO2\nHANDSET  HH AE1 N D - S EH2 T\nHANDSETS  HH AE1 N D - S EH2 T S\nHANDSHAKE  HH AE1 N D - SH EY2 K\nHANDSHAKES  HH AE1 N D - SH EY2 K S\nHANDSHAKING  HH AE1 N D - SH EY2 - K IH0 NG\nHANDSOME  HH AE1 N - S AH0 M\nHANDSOMELY  HH AE1 N - S AH0 M - L IY0\nHANDSTAND  HH AE1 N D - S T AE2 N D\nHANDSTANDS  HH AE1 N D - S T AE2 N D Z\nHANDWERK  HH AE1 N D - W ER0 K\nHANDWERKER  HH AE1 N D - W ER0 - K ER0\nHANDWOVEN  HH AE1 N D - W OW1 - V AH0 N\nHANDWOVEN(2)  HH AE1 N - W OW1 - V AH0 N\nHANDWRITING  HH AE1 N D - R AY2 - T IH0 NG\nHANDWRITTEN  HH AE1 N D - R IH2 - T AH0 N\nHANDY  HH AE1 N - D IY0\nHANDYMAN  HH AE1 N - D IY0 - M AE2 N\nHANDYMEN  HH AE1 N - D IY0 - M EH1 N\nHANE  HH EY1 N\nHANEDA  HH AH0 - N EY1 - D AH0\nHANEL  HH AE1 - N AH0 L\nHANELINE  HH AE1 - N IH0 - L AY2 N\nHANEMANN  HH EY1 N - M AH0 N\nHANER  HH EY1 - N ER0\nHANES  HH EY1 N Z\nHANEY  HH EY1 - N IY0\nHANF  HH AE1 N F\nHANFORD  HH AE1 N - F ER0 D\nHANFT  HH AE1 N F T\nHANG  HH AE1 NG\nHANGAR  HH AE1 - NG ER0\nHANGARS  HH AE1 - NG ER0 Z\nHANGARTNER  HH AE1 NG - G AA0 R T - N ER0\nHANGED  HH AE1 NG D\nHANGEN  HH AE1 - NG AH0 N\nHANGER  HH AE1 - NG ER0\nHANGERS  HH AE1 - NG ER0 Z\nHANGIN'  HH AE1 NG - G IH0 N\nHANGING  HH AE1 - NG IH0 NG\nHANGING(2)  HH AE1 - NG G IH0 NG\nHANGINGS  HH AE1 - NG G IH0 NG Z\nHANGMAN  HH AE1 NG - M AH0 N\nHANGOUT  HH AE1 NG - AW2 T\nHANGOUTS  HH AE1 NG - AW2 T S\nHANGOVER  HH AE1 NG - OW2 - V ER0\nHANGOVERS  HH AE1 NG - OW2 - V ER0 Z\nHANGS  HH AE1 NG Z\nHANGSANG  HH AE1 NG - S AE2 NG\nHANGSANG'S  HH AE1 NG - S AE2 NG Z\nHANGUP  HH AE1 NG G - AH2 P\nHANGUPS  HH AE1 NG G - AH2 P S\nHANI  HH AE1 - N IY0\nHANI'S  HH AE1 - N IY0 Z\nHANIFEN  HH AE1 - N IH0 - F AH0 N\nHANIFIN  HH AE1 - N IH0 - F IH0 N\nHANIGAN  HH AE1 - N IH0 - G AH0 N\nHANING  HH EY1 - N IH0 NG\nHANISCH  HH AE1 - N IH0 SH\nHANISEE  HH AE1 - N IH0 - S IY0\nHANISH  HH AE1 - N IH0 SH\nHANJIN  HH AE1 N - JH IH0 N\nHANK  HH AE1 NG K\nHANK'S  HH AE1 N K S\nHANKE  HH AE1 NG K\nHANKEL  HH AE1 NG - K AH0 L\nHANKEN  HH AE1 NG - K AH0 N\nHANKER  HH AE1 NG - K ER0\nHANKERING  HH AE1 NG - K ER0 - IH0 NG\nHANKERSON  HH AE1 NG - K ER0 - S AH0 N\nHANKES  HH AE1 NG K S\nHANKEY  HH AE1 NG - K IY0\nHANKIN  HH AE1 NG - K IH0 N\nHANKINS  HH AE1 NG - K IH0 N Z\nHANKINSON  HH AE1 NG - K IH0 N - S AH0 N\nHANKLA  HH AE1 NG - K L AH0\nHANKO  HH AE1 NG - K OW0\nHANKS  HH AE1 NG K S\nHANKY  HH AE1 NG - K IY0\nHANLEY  HH AE1 N - L IY0\nHANLEY'S  HH AE1 - N L IY0 Z\nHANLIN  HH AE1 N - L IH0 N\nHANLON  HH AE1 N - L AH0 N\nHANLY  HH AE1 N - L IY0\nHANMER  HH AE1 N - M ER0\nHANN  HH AE1 N\nHANNA  HH AE1 - N AH0\nHANNA'S  HH AE1 - N AH0 Z\nHANNAFORD  HH AE1 - N AH0 - F ER0 D\nHANNAGAN  HH AE1 - N AH0 - G AE0 N\nHANNAH  HH AE1 - N AH0\nHANNAHS  HH AE1 - N AH0 Z\nHANNAM  HH AE1 - N AH0 M\nHANNAMAN  HH AE1 - N AH0 - M AH0 N\nHANNAN  HH AE1 - N AH0 N\nHANNAY  HH AE1 - N EY0\nHANNEKEN  HH AE1 - N IH0 - K AH0 N\nHANNEMAN  HH AE1 N - M AH0 N\nHANNEMANN  HH AE1 N - M AH0 N\nHANNEN  HH AE1 - N AH0 N\nHANNER  HH AE1 - N ER0\nHANNERS  HH AE1 - N ER0 Z\nHANNES  HH AE1 N Z\nHANNESSON  HH AE1 - N AH0 - S AH0 N\nHANNEY  HH AE1 - N IY0\nHANNI  HH AE1 - N IY0\nHANNIBAL  HH AE1 - N IH0 - B AH0 L\nHANNIE  HH AE1 - N IY0\nHANNIFIN  HH AE1 - N IH0 - F IH0 N\nHANNIG  HH AE1 - N IH0 G\nHANNIGAN  HH AE1 - N IH0 - G AH0 N\nHANNING  HH AE1 - N IH0 NG\nHANNIS  HH AE1 - N IH0 S\nHANNITY  HH AE1 - N IH0 - T IY0\nHANNOCH  HH AE1 - N AH0 K\nHANNOLD  HH AE1 - N OW2 L D\nHANNON  HH AE1 - N AH0 N\nHANNULA  HH AE1 - N UW0 - L AH0\nHANNUM  HH AE1 - N AH0 M\nHANNY  HH AE1 - N IY0\nHANO  HH AA1 - N OW0\nHANOI  HH AE1 - N OY0\nHANOI'S  HH AH0 - N OY1 Z\nHANOLD  HH AE1 - N OW0 L D\nHANOVER  HH AE1 - N OW0 - V ER0\nHANOVER'S  HH AE1 - N OW0 - V ER0 Z\nHANOVERIAN  HH AE2 - N OW0 - V IH1 - R IY0 - AH0 N\nHANRAHAN  HH AE1 N - R AH0 - HH AE0 N\nHANRATTY  HH AE1 - N R AH0 - T IY0\nHANS  HH AA1 N S\nHANS(2)  HH AE1 N Z\nHANSA  HH AE1 N - S AH0\nHANSARD  HH AE1 N - S ER0 D\nHANSBERGER  HH AE1 N S - B ER0 - G ER0\nHANSBERRY  HH AE1 N S - B EH2 - R IY0\nHANSBROUGH  HH AE1 N S - B R AW0\nHANSBURY  HH AE1 N S - B EH0 - R IY0\nHANSCHE  HH AE1 N - SH IY0\nHANSCOM  HH AE1 N S - K AH0 M\nHANSEATIC  HH AE2 N - S IY0 - AE1 - T IH0 K\nHANSEL  HH AE1 N - S AH0 L\nHANSELL  HH AE1 N - S AH0 L\nHANSELMAN  HH AE1 N - S AH0 L - M AH0 N\nHANSEN  HH AE1 N - S AH0 N\nHANSEN'S  HH AE1 N - S AH0 N Z\nHANSER  HH AA1 N - S ER0\nHANSFORD  HH AE1 N S - F ER0 D\nHANSHAW  HH AE1 N - SH AO2\nHANSHEW  HH AE1 N - SH UW0\nHANSHIN  HH AE1 N - SH IH0 N\nHANSLEY  HH AE1 N S - L IY0\nHANSMAN  HH AE1 N S - M AH0 N\nHANSMANN  HH AE1 N S - M AH0 N\nHANSOM  HH AE1 N - S AH0 M\nHANSON  HH AE1 N - S AH0 N\nHANSON'S  HH AE1 N - S AH0 N Z\nHANSSEN  HH AE1 N - S AH0 N\nHANSSON  HH AE1 N - S AH0 N\nHANTA  HH AE1 N - T AH0\nHANTA(2)  HH AA1 N - T AH0\nHANTAVIRUS  HH AE1 N - T AH0 - V AY2 - R AH0 S\nHANTEN  HH AE1 N - T AH0 N\nHANTHORN  HH AE1 N - TH ER0 N\nHANTMAN  HH AE1 N T - M AH0 N\nHANTZ  HH AE1 N T S\nHANUKKAH  HH AA1 - N AH0 - K AH0\nHANUKKAH'S  HH AA1 - N AH0 - K AH0 Z\nHANUKKAHS  HH AA1 - N AH0 - K AH0 Z\nHANUS  HH EY1 - N IH0 S\nHANVEY  HH AE1 N - V IY0\nHANWA  HH AE1 - N W AH0\nHANWA'S  HH AE1 - N W AH0 Z\nHANWAY  HH AE1 N - W EY2\nHANY  HH EY1 - N IY0\nHANY'S  HH EY1 - N IY0 Z\nHANZEL  HH AE1 N - Z AH0 L\nHANZLIK  HH AE1 N Z - L IH0 K\nHAO  HH AW1\nHAO-CHI  HH AW1 - CH IY1\nHAP  HH AE1 P\nHAPAG  HH EY1 - P AE2 G\nHAPEMAN  HH EY1 P - M AH0 N\nHAPGOOD  HH AE1 P - G UH2 D\nHAPHAZARD  HH AE0 P - HH AE1 - Z ER0 D\nHAPHAZARDLY  HH AE1 F - AH0 - Z ER0 D - L IY0\nHAPHAZARDLY(2)  HH AE0 P - HH AE1 - Z ER0 D - L IY0\nHAPKE  HH EY1 P - K IY0\nHAPLESS  HH AE1 P - L AH0 S\nHAPLOID  HH AE1 - P L OY0 D\nHAPNER  HH AE1 P - N ER0\nHAPOALIM  HH AH0 - P OW1 - L IH0 M\nHAPOALIM(2)  HH AH0 - P OW0 - AH0 - L IY1 M\nHAPP  HH AE1 P\nHAPPE  HH AE1 P\nHAPPEL  HH AE1 - P AH0 L\nHAPPEN  HH AE1 - P AH0 N\nHAPPENED  HH AE1 - P AH0 N D\nHAPPENING  HH AE1 - P AH0 - N IH0 NG\nHAPPENING(2)  HH AE1 P - N IH0 NG\nHAPPENINGS  HH AE1 - P AH0 - N IH0 NG Z\nHAPPENINGS(2)  HH AE1 P - N IH0 NG Z\nHAPPENS  HH AE1 - P AH0 N Z\nHAPPENSTANCE  HH AE1 - P AH0 N - S T AE2 N S\nHAPPIER  HH AE1 - P IY0 - ER0\nHAPPIEST  HH AE1 - P IY0 - AH0 S T\nHAPPILY  HH AE1 - P AH0 - L IY0\nHAPPINESS  HH AE1 - P IY0 - N AH0 S\nHAPPY  HH AE1 - P IY0\nHAPSBURG  HH AE1 P S - B ER0 G\nHAQ  HH AE1 K\nHAQ'S  HH AE1 K S\nHAQUE  HH AE1 K\nHARA  HH EH1 - R AH0\nHARA-KIRI  HH AA1 - R IH0 - K IH1 - R IY0\nHARADA  HH AA0 - R AA1 - D AH0\nHARADIM  HH AH0 - R AE1 - D IH2 M\nHARADIM(2)  HH AH0 - R AE2 - D IY1 M\nHARAHAN  HH AE1 - R AH0 - HH AE2 N\nHARALD  HH AA1 - R AH0 L D\nHARALDA  HH AA0 - R AA1 L - D AH0\nHARALSON  HH AE1 - R AH0 L - S AH0 N\nHARAN  HH AE1 - R AH0 N\nHARANGUE  HH ER0 - AE1 NG\nHARANGUED  HH ER0 - AE1 NG D\nHARANGUES  HH ER0 - AE1 NG Z\nHARANGUING  HH ER0 - AE1 - NG IH0 NG\nHARARE  HH ER0 - AA1 - R IY0\nHARASS  HH ER0 - AE1 S\nHARASSED  HH ER0 - AE1 S T\nHARASSER  HH ER0 - AE1 - S ER0\nHARASSERS  HH ER0 - AE1 - S ER0 Z\nHARASSING  HH ER0 - AE1 - S IH0 NG\nHARASSMENT  HH ER0 - AE1 S - M AH0 N T\nHARASZTI  HH ER0 - AE1 - S T IY0\nHARAWAY  HH AA1 - R AH0 - W EY0\nHARB  HH AA1 R B\nHARBACH  HH AA1 R - B AA2 K\nHARBAUGH  HH AA1 R - B AO2\nHARBECK  HH AA1 R - B EH2 K\nHARBER  HH AA1 R - B ER0\nHARBERT  HH AA1 R - B ER0 T\nHARBERTS  HH AA1 R - B ER0 T S\nHARBESON  HH AA1 R - B IH0 - S AH0 N\nHARBIN  HH AA1 R - B IH0 N\nHARBINGER  HH AA1 R - B IH0 N - JH ER0\nHARBINGERS  HH AA1 R - B IH0 NG - ER0 Z\nHARBINSON  HH AA1 R - B IH0 N - S AH0 N\nHARBISON  HH AA1 R - B IH0 - S AH0 N\nHARBOLD  HH AA1 R - B OW2 L D\nHARBOR  HH AA1 R - B ER0\nHARBOR'S  HH AA1 R - B ER0 Z\nHARBORED  HH AA1 R - B ER0 D\nHARBORING  HH AA1 R - B ER0 - IH0 NG\nHARBORS  HH AA1 R - B ER0 Z\nHARBORSIDE  HH AA1 R - B ER0 - S AY2 D\nHARBOUR  HH AA1 R - B ER0\nHARBUCK  HH AA1 R - B AH0 K\nHARBURY  HH AA1 R - B ER0 - IY0\nHARC  HH AA1 R K\nHARCLERODE  HH AA1 R - K AH0 - L ER0 - OW0 D\nHARCLERODE(2)  HH AA1 R K - L ER0 - OW0 D\nHARCOURT  HH AA1 R - K AO2 R T\nHARCOURT'S  HH AA1 R - K ER0 T S\nHARCROW  HH AA1 R - K R OW0\nHARCUM  HH AA1 R - K AH0 M\nHARD  HH AA1 R D\nHARDACRE  HH AA1 R - D EY2 - K ER0\nHARDAGE  HH AA1 R - D IH0 JH\nHARDART  HH AA1 R - D AA2 R T\nHARDAWAY  HH AA1 R D - AH0 - W EY2\nHARDBACK  HH AA1 R D - B AE2 K\nHARDBALL  HH AA1 R D - B AO2 L\nHARDBOARD  HH AA1 R D - B AO2 R D\nHARDCASTLE  HH AA1 R D - K AE2 - S AH0 L\nHARDCORE  HH AA1 R D - K AO1 R\nHARDCOVER  HH AA1 R D - K AH2 - V ER0\nHARDEBECK  HH AA1 R D - B EH0 K\nHARDEE  HH AA1 R - D IY1\nHARDEE'S  HH AA1 R - D IY1 Z\nHARDEGREE  HH AA0 R - D IH0 - G R IY1\nHARDEMAN  HH AA1 R D - M AH0 N\nHARDEN  HH AA1 R - D AH0 N\nHARDEN'S  HH AA1 R - D AH0 N Z\nHARDENBROOK  HH AA1 R - D AH0 N - B R UH2 K\nHARDENED  HH AA1 R - D AH0 N D\nHARDENER  HH AA1 R - D AH0 N - ER0\nHARDENING  HH AA1 R - D AH0 N - IH0 NG\nHARDENING(2)  HH AA1 R D - N IH0 NG\nHARDENS  HH AA1 R - D AH0 N Z\nHARDER  HH AA1 R - D ER0\nHARDERS  HH AA1 R - D ER0 Z\nHARDEST  HH AA1 R - D AH0 S T\nHARDESTY  HH AA1 R - D AH0 - S T IY0\nHARDEY  HH AA1 R - D IY0\nHARDGOOD  HH AA1 R D - G UH2 D\nHARDGOODS  HH AA1 R D - G UH2 D Z\nHARDGRAVE  HH AA1 R D - G R EY2 V\nHARDGROVE  HH AA1 R D - G R OW2 V\nHARDHEAD  HH AA1 R D - HH EH2 D\nHARDHEADED  HH AA1 R D - HH EH2 - D IH0 D\nHARDICK  HH AA1 R - D IH0 K\nHARDIE  HH AA1 R - D IY0\nHARDIER  HH AA1 R - D IY0 - ER0\nHARDIGREE  HH AA0 R - D IH0 - G R IY1\nHARDIMAN  HH AA1 R - D IH0 - M AH0 N\nHARDIMON  HH AA1 R - D IH0 - M AA0 N\nHARDIN  HH AA1 R - D IH0 N\nHARDING  HH AA1 R - D IH0 NG\nHARDING'S  HH AA1 R - D IH0 NG S\nHARDINGER  HH AA1 R - D IH0 - NG ER0\nHARDISON  HH AA1 R - D IH0 S - AH0 N\nHARDISTER  HH AA1 R - D IH0 - S T ER0\nHARDISTY  HH AA1 R - D IH0 - S T IY0\nHARDLINE  HH AA1 R D - L AY2 N\nHARDLINER  HH AA1 R D - L AY2 - N ER0\nHARDLINERS  HH AA1 R D - L AY2 - N ER0 Z\nHARDLY  HH AA1 R D - L IY0\nHARDMAN  HH AA1 R D - M AH0 N\nHARDNESS  HH AA1 R D - N AH0 S\nHARDNETT  HH AA1 R D - N IH0 T\nHARDPRESSED  HH AA1 R D - P R EH2 S T\nHARDRICK  HH AA1 R D - R IH0 K\nHARDS  HH AA1 R D Z\nHARDSCRABBLE  HH AA1 R D - S K R AE2 - B AH0 L\nHARDSHIP  HH AA1 R D - SH IH0 P\nHARDSHIPS  HH AA1 R D - SH IH0 P S\nHARDT  HH AA1 R T\nHARDTKE  HH AA1 R D - K IY0\nHARDWARE  HH AA1 R D - W EH2 R\nHARDWAY  HH AA1 R D - W EY2\nHARDWICK  HH AA1 R D - W IH2 K\nHARDWICKE  HH AA1 R D - W IH0 K\nHARDWIN  HH AA1 R D - W IH0 N\nHARDWOOD  HH AA1 R D - W UH2 D\nHARDWOODS  HH AA1 R D - W UH2 D Z\nHARDWORK  HH AA1 R D - W ER2 K\nHARDWORKING  HH AA1 R D - W ER2 - K IH0 NG\nHARDY  HH AA1 R - D IY0\nHARDY'S  HH AA1 R - D IY0 Z\nHARDYMON  HH AA1 R - D IY0 - M AA2 N\nHARE  HH EH1 R\nHARE'S  HH EH1 R Z\nHAREBRAINED  HH EH1 R - B R EY2 N D\nHARELSON  HH AE1 - R IH0 L - S AH0 N\nHAREM  HH EH1 - R AH0 M\nHAREN  HH EH1 - R AH0 N\nHARER  HH EH1 - R ER0\nHARES  HH EH1 R Z\nHAREWOOD  HH EH1 R - W UH2 D\nHARFF  HH AA1 R F\nHARFORD  HH AA1 R - F ER0 D\nHARGADON  HH AA0 R - G AA0 - D AO1 N\nHARGAN  HH AA1 R - G AH0 N\nHARGARTEN  HH AA1 R - G AA0 R - T AH0 N\nHARGENS  HH AA1 R - G AH0 N Z\nHARGER  HH AA1 R - G ER0\nHARGETT  HH AA1 R - JH IH0 T\nHARGIS  HH AA1 R - G IH0 S\nHARGRAVE  HH AA1 R - G R EY2 V\nHARGRAVES  HH AA1 R - G R EY2 V Z\nHARGREAVES  HH AA1 R - G R IY2 V Z\nHARGROVE  HH AA1 R - G R OW2 V\nHARGUS  HH AA1 R - G AH0 S\nHARI  HH AA1 - R IY0\nHARIG  HH AE1 - R IH0 G\nHARIMA  HH EH0 - R IY1 - M AH0\nHARING  HH EH1 - R IH0 NG\nHARIRI  HH ER0 - IH1 - R IY0\nHARIS  HH AA1 - R IY0 S\nHARIS(2)  HH EH1 - R IH0 S\nHARITOS  HH EH0 - R IY1 - T OW0 S\nHARIZ  HH EH1 - R IH0 Z\nHARJO  HH AA1 R - JH OW0\nHARJU  HH AA1 - R Y UW0\nHARK  HH AA1 R K\nHARKAVY  HH AA1 R - K AH0 - V IY0\nHARKE  HH AA1 R K\nHARKEN  HH AA1 R - K AH0 N\nHARKER  HH AA1 R - K ER0\nHARKEY  HH AA1 R - K IY0\nHARKIN  HH AA1 R - K IH0 N\nHARKIN'S  HH AA1 R - K IH0 N Z\nHARKING  HH AA1 R - K IH0 NG\nHARKINS  HH AA1 R - K IH0 N Z\nHARKLEROAD  HH AA1 R K - L ER0 - OW0 D\nHARKLESS  HH AA1 R K - L AH0 S\nHARKNESS  HH AA1 R K - N AH0 S\nHARKRADER  HH AA1 R - K R AH0 - D ER0\nHARKRIDER  HH AA1 R K - R AY2 - D ER0\nHARKS  HH AA1 R K S\nHARL  HH AA1 R L\nHARLACHER  HH AA1 R - L AH0 - K ER0\nHARLAN  HH AA1 R - L AH0 N\nHARLAND  HH AA1 R - L AH0 N D\nHARLE  HH AA1 - R AH0 L\nHARLEM  HH AA1 R - L AH0 M\nHARLEM'S  HH AA1 R - L AH0 M Z\nHARLEMAN  HH AA1 - R AH0 L - M AH0 N\nHARLEQUIN  HH AA1 R - L AH0 - K W AH0 N\nHARLESS  HH AA1 R - L IH0 S\nHARLEY  HH AA1 R - L IY0\nHARLEY'S  HH AA1 R - L IY0 Z\nHARLEYSVILLE  HH AA1 R - L IY0 Z - V IH2 L\nHARLIN  HH AA1 R - L IH0 N\nHARLIN'S  HH AA1 R - L IH0 N Z\nHARLING  HH AA1 R - L IH0 NG\nHARLINGEN  HH AA1 R - L IH0 - NG AH0 N\nHARLISON  HH AA1 R - L IH0 - S AH0 N\nHARLOFF  HH AA1 R - L AO0 F\nHARLOT  HH AA1 R - L AH0 T\nHARLOW  HH AA1 R - L OW0\nHARM  HH AA1 R M\nHARM'S  HH AA1 R M Z\nHARMAN  HH AA1 R - M AH0 N\nHARMATA  HH AA0 R - M AA1 - T AH0\nHARMATTAN  HH AA2 R - M AH0 - T AE1 N\nHARMED  HH AA1 R M D\nHARMEL  HH AA1 R - M AH0 L\nHARMENING  HH AA1 R - M AH0 - N IH0 NG\nHARMER  HH AA1 R - M ER0\nHARMES  HH AA1 R M Z\nHARMETZ  HH AA1 R - M EH2 T S\nHARMEYER  HH AA1 R - M AY2 - ER0\nHARMFUL  HH AA1 R M - F AH0 L\nHARMFULNESS  HH AA1 R M - F AH0 L - N AH0 S\nHARMING  HH AA1 R - M IH0 NG\nHARMISON  HH AA1 R - M IH0 - S AH0 N\nHARMLESS  HH AA1 R M - L AH0 S\nHARMLESSLY  HH AA1 R M - L AH0 S - L IY0\nHARMON  HH AA1 R - M AH0 N\nHARMON'S  HH AA1 R - M AH0 N Z\nHARMONIA  HH AA0 R - M OW1 - N IY0 - AH0\nHARMONIC  HH AA0 R - M AA1 - N IH0 K\nHARMONICA  HH AA0 R - M AA1 - N IH0 - K AH0\nHARMONICS  HH AA0 R - M AA1 - N IH0 K S\nHARMONIE  HH AA1 R - M AH0 - N IY0\nHARMONIES  HH AA1 R - M AH0 - N IY0 Z\nHARMONIOUS  HH AA0 R - M OW1 - N IY0 - AH0 S\nHARMONIOUSLY  HH AA0 R - M OW1 - N IY0 - AH0 S - L IY0\nHARMONIUM  HH AA0 R - M OW1 - N IY0 - AH0 M\nHARMONIZATION  HH AA2 R - M AH0 - N IH0 - Z EY1 - SH AH0 N\nHARMONIZE  HH AA1 R - M AH0 - N AY2 Z\nHARMONIZED  HH AA1 R - M AH0 - N AY2 Z D\nHARMONIZING  HH AA1 R - M AH0 - N AY2 - Z IH0 NG\nHARMONY  HH AA1 R - M AH0 - N IY0\nHARMS  HH AA1 R M Z\nHARMSEN  HH AA1 R M - S AH0 N\nHARN  HH AA1 R N\nHARNACK  HH AA1 R - N AH0 K\nHARNAGE  HH AA1 R - N IH0 JH\nHARNDEN  HH AA1 R N - D AH0 N\nHARNE  HH AA1 R N\nHARNED  HH AA1 R N D\nHARNER  HH AA1 R - N ER0\nHARNESS  HH AA1 R - N AH0 S\nHARNESS(2)  HH AA1 R - N IH0 S\nHARNESSED  HH AA1 R - N AH0 S T\nHARNESSES  HH AA1 R - N AH0 - S AH0 Z\nHARNESSES(2)  HH AA1 R - N AH0 - S IH0 Z\nHARNESSING  HH AA1 R - N AH0 - S IH0 NG\nHARNETT  HH AA1 R - N IH0 T\nHARNEY  HH AA1 R - N IY0\nHARNISCH  HH AA1 R - N IH0 SH\nHARNISCHFEGER  HH AA1 R - N IH0 SH - F EH2 - G ER0\nHARNISCHFEGER'S  HH AA1 R - N IH0 SH - F EH2 - G ER0 Z\nHARNISH  HH AA1 R - N IH0 SH\nHARNOIS  HH AA0 R N - W AA1\nHARO  HH AA1 - R OW0\nHAROLD  HH EH1 - R AH0 L D\nHAROLD'S  HH EH1 - R AH0 L D Z\nHAROLDSON  HH AE1 - R OW0 L D - S AH0 N\nHARP  HH AA1 R P\nHARPE  HH AA1 R P\nHARPED  HH AA1 R P T\nHARPEL  HH AA0 R - P EH1 L\nHARPENAU  HH AA1 R - P IH0 - N OW0\nHARPER  HH AA1 R - P ER0\nHARPER'S  HH AA1 R - P ER0 Z\nHARPERCOLLINS  HH AA1 R - P ER0 - K AO1 - L IH0 N Z\nHARPERS  HH AA1 R - P ER0 Z\nHARPHAM  HH AA1 R - F AH0 M\nHARPIN  HH AA0 R - P AE1 N\nHARPING  HH AA1 R - P IH0 NG\nHARPIST  HH AA1 R - P IH0 S T\nHARPISTS  HH AA1 R - P IH0 S T S\nHARPISTS(2)  HH AA1 R - P IH0 S S\nHARPISTS(3)  HH AA1 R - P IH0 S\nHARPLEY  HH AA1 R P - L IY0\nHARPO  HH AA1 R - P OW0\nHARPOLD  HH AA1 R - P OW2 L D\nHARPOLE  HH AA1 R - P OW2 L\nHARPOON  HH AA0 R - P UW1 N\nHARPOONS  HH AA0 R - P UW1 N Z\nHARPOOTLIAN  HH AA0 R - P UW1 T - L IY0 - AH0 N\nHARPS  HH AA1 R P S\nHARPSICHORD  HH AA1 R P - S AH0 - K AO2 R D\nHARPST  HH AA1 R P S T\nHARPSTER  HH AA1 R P - S T ER0\nHARQUEBUS  HH AA1 R - K W AH0 - B AH0 S\nHARR  HH AE1 R\nHARRAH  HH AE1 - R AH0\nHARRAH'S  HH EH1 - R AH0 Z\nHARRAL  HH AE1 - R AH0 L\nHARRALSON  HH AE1 - R AH0 L - S AH0 N\nHARRE  HH AE1 R\nHARREL  HH AE1 - R AH0 L\nHARRELD  HH AE1 - R IH0 L D\nHARRELL  HH EH1 - R AH0 L\nHARRELL'S  HH AE1 - R AH0 L Z\nHARRELSON  HH EH1 - R IH0 L - S AH0 N\nHARREN  HH AE1 - R AH0 N\nHARRER  HH AA1 - R ER0\nHARRIED  HH EH1 - R IY0 D\nHARRIER  HH EH1 - R IY0 - ER0\nHARRIES  HH EH1 - R IY0 Z\nHARRIET  HH EH1 - R IY0 - AH0 T\nHARRIETTE  HH AE1 - R IY0 - EH0 T\nHARRIGAN  HH EH1 - R IH0 - G AH0 N\nHARRIGER  HH AE1 - R IH0 - G ER0\nHARRILL  HH AE1 - R AH0 L\nHARRIMAN  HH EH1 - R IH0 - M AH0 N\nHARRING  HH AE1 - R IH0 NG\nHARRINGTON  HH EH1 - R IH0 NG - T AH0 N\nHARRIOTT  HH AE1 - R IY0 - AH0 T\nHARRIS  HH EH1 - R IH0 S\nHARRIS'  HH EH1 - R IH0 S\nHARRIS'S  HH EH1 - R IH0 - S IH0 Z\nHARRISBURG  HH AE1 - R IH0 S - B ER0 G\nHARRISBURG'S  HH AE1 - R IH0 S - B ER0 G Z\nHARRISBURG'S(2)  HH EH1 - R IH0 S - B ER0 G Z\nHARRISBURG(2)  HH EH1 - R IH0 S - B ER0 G\nHARRISON  HH EH1 - R IH0 - S AH0 N\nHARRISON'S  HH EH1 - R IH0 - S AH0 N Z\nHARRISS  HH AE1 - R IH0 S\nHARRITY  HH AE1 - R IH0 - T IY0\nHARROD  HH EH1 - R AH0 D\nHARROD'S  HH EH1 - R AH0 D Z\nHARRODS  HH EH1 - R AH0 D Z\nHARROLD  HH EH1 - R AH0 L D\nHARRON  HH AE1 - R AH0 N\nHARROP  HH EH1 - R AH0 P\nHARROUN  HH ER0 - UW1 N\nHARROW  HH AE1 - R OW0\nHARROWER  HH AE1 - R OW0 - W ER0\nHARROWING  HH EH1 - R OW0 - IH0 NG\nHARRY  HH EH1 - R IY0\nHARRY'S  HH EH1 - R IY0 Z\nHARRYMAN  HH AE1 - R IY0 - M AH0 N\nHARSCH  HH AA1 R SH\nHARSCO  HH AA1 R - S K OW0\nHARSH  HH AA1 R SH\nHARSHA  HH AA1 R - SH AH0\nHARSHAM  HH AA1 R - SH AH0 M\nHARSHAW  HH AA1 R - SH AO2\nHARSHBARGER  HH AA1 R SH - B AA2 R - G ER0\nHARSHBERGER  HH AA1 R SH - B ER0 - G ER0\nHARSHER  HH AA1 R - SH ER0\nHARSHEST  HH AA1 R - SH AH0 S T\nHARSHFIELD  HH AA1 R SH - F IY2 L D\nHARSHLY  HH AA1 R SH - L IY0\nHARSHMAN  HH AA1 R SH - M AH0 N\nHARSHNESS  HH AA1 R SH - N AH0 S\nHARSTAD  HH AA1 R - S T AH0 D\nHARSTON  HH AA1 R - S T AH0 N\nHART  HH AA1 R T\nHART'S  HH AA1 R T S\nHARTE  HH AA1 R T\nHARTEL  HH AA1 R - T AH0 L\nHARTELL  HH AA1 R - T AH0 L\nHARTEN  HH AA1 R - T AH0 N\nHARTENSTEIN  HH AA1 R - T AH0 N - S T AY2 N\nHARTENSTEIN(2)  HH AA1 R - T AH0 N - S T IY2 N\nHARTER  HH AA1 R - T ER0\nHARTFIEL  HH AA1 R T - F IY2 L\nHARTFIELD  HH AA1 R T - F IY2 L D\nHARTFORD  HH AA1 R T - F ER0 D\nHARTFORD'S  HH AA1 R T - F ER0 D Z\nHARTGRAVES  HH AA1 R T - G R EY2 V Z\nHARTGROVE  HH AA1 R T - G R OW2 V\nHARTH  HH AA1 R TH\nHARTIG  HH AA1 R - T IH0 G\nHARTIGAN  HH AA1 R - T IH0 - G AH0 N\nHARTIN  HH AA1 R - T IH0 N\nHARTING  HH AA1 R - T IH0 NG\nHARTINGER  HH AA1 R - T IH0 - NG ER0\nHARTIS  HH AA1 R - T IH0 S\nHARTJE  HH AA1 R T - JH EY0\nHARTKE  HH AA1 R T - K IY0\nHARTKOPF  HH AA1 R T - K AO0 F\nHARTL  HH AA1 R - T AH0 L\nHARTLAGE  HH AA1 R T - L IH0 JH\nHARTLAND  HH AA1 R T - L AH0 N D\nHARTLAUB  HH AA1 R T - L AW2 B\nHARTLE  HH AA1 R - T AH0 L\nHARTLESS  HH AA1 R T - L AH0 S\nHARTLEY  HH AA1 R T - L IY0\nHARTLIEB  HH AA1 R T - L IY2 B\nHARTLINE  HH AA1 R T - L AY2 N\nHARTLING  HH AA1 R T - L IH0 NG\nHARTMAN  HH AA1 R T - M AH0 N\nHARTMANN  HH AA1 R T - M AH0 N\nHARTMARX  HH AA1 R T - M AA2 R K S\nHARTNELL  HH AA1 R T - N AH0 L\nHARTNER  HH AA1 R T - N ER0\nHARTNESS  HH AA1 R T - N AH0 S\nHARTNETT  HH AA1 R T - N IH0 T\nHARTNEY  HH AA1 R T - N IY0\nHARTOG  HH AA1 R - T AH0 G\nHARTON  HH AA1 R - T AH0 N\nHARTONG  HH AA1 R - T AO0 NG\nHARTRANFT  HH AA1 R - T R AH2 N F T\nHARTS  HH AA1 R T S\nHARTSELL  HH AA1 R T - S AH0 L\nHARTSFIELD  HH AA1 R T S - F IY2 L D\nHARTSHORN  HH AA1 R T S - HH AO2 R N\nHARTSHORNE  HH AA1 R - CH ER0 N\nHARTSOCK  HH AA1 R T - S AH0 K\nHARTSOE  HH AA1 R T - S OW0\nHARTSON  HH AA1 R T - S AH0 N\nHARTSOOK  HH AA1 R T - S UH0 K\nHARTSOUGH  HH AA1 R T - S AW0\nHARTSTEIN  HH AA1 R T - S T AY2 N\nHARTSTEIN(2)  HH AA1 R T - S T IY2 N\nHARTSVILLE  HH AA1 R T - S V IH0 L\nHARTT  HH AA1 R T\nHARTTER  HH AA1 R - T ER0\nHARTUNG  HH AA1 R - T AH0 NG\nHARTWELL  HH AA1 R T - W EH2 L\nHARTWICK  HH AA1 R T - W IH2 K\nHARTWIG  HH AA1 R T - W IH0 K\nHARTWOOD  HH AA1 R T - W UH2 D\nHARTY  HH AA1 R - T IY0\nHARTZ  HH AA1 R T S\nHARTZEL  HH AA1 R T - Z AH0 L\nHARTZELL  HH AA1 R T - Z AH0 L\nHARTZLER  HH AA1 R T - S L ER0\nHARTZOG  HH AA1 R T - Z AH0 G\nHARUO  HH AA0 - R UW1 - OW0\nHARV  HH AA1 R V\nHARVARD  HH AA1 R - V ER0 D\nHARVARD'S  HH AA1 R - V ER0 D Z\nHARVATH  HH AA1 R - V AH0 TH\nHARVE  HH AA1 R V\nHARVEL  HH AA1 R - V AH0 L\nHARVELL  HH AA1 R - V AH0 L\nHARVEST  HH AA1 R - V AH0 S T\nHARVESTABLE  HH AA1 R - V AH0 - S T AH0 - B AH0 L\nHARVESTED  HH AA1 R - V AH0 - S T AH0 D\nHARVESTED(2)  HH AA1 R - V AH0 - S T IH0 D\nHARVESTER  HH AA1 R - V AH0 - S T ER0\nHARVESTERS  HH AA1 R - V AH0 - S T ER0 Z\nHARVESTING  HH AA1 R - V AH0 - S T IH0 NG\nHARVESTS  HH AA1 R - V AH0 S T S\nHARVESTS(2)  HH AA1 R - V AH0 S S\nHARVESTS(3)  HH AA1 R - V AH0 S\nHARVEY  HH AA1 R - V IY0\nHARVEY'S  HH AA1 R - V IY0 Z\nHARVIE  HH AA1 R - V IY0\nHARVILL  HH AA1 R - V IH0 L\nHARVILLE  HH AA1 R - V IH2 L\nHARVIN  HH AA1 R - V IH0 N\nHARVISON  HH AA1 R - V IH0 - S AH0 N\nHARWARD  HH AA1 R - W ER0 D\nHARWELL  HH AA1 R - W EH2 L\nHARWICK  HH AA1 R - W IH0 K\nHARWOOD  HH AA1 R - W UH2 D\nHARYANA  HH EH0 R - Y AA1 - N AH0\nHAS  HH AE1 Z\nHAS(2)  HH AH0 Z\nHAS-BEEN  HH AE1 Z - B IH2 N\nHAS-BEENS  HH AE1 Z - B IH2 N Z\nHASAN  HH EY1 - Z AH0 N\nHASBRO  HH AE1 Z - B R OW0\nHASBRO'S  HH AE1 Z - B R OW2 Z\nHASBROOK  HH AE1 S - B R UH0 K\nHASBROUCK  HH AE1 Z - B R UH2 K\nHASCALL  HH AE1 S - K AH0 L\nHASCH  HH AE1 SH\nHASCHKE  HH AE1 SH K\nHASE  HH EY1 Z\nHASEGAWA  HH AA2 - S EY0 - G AA1 - W AH0\nHASEK  HH AA1 - S EH0 K\nHASELDEN  HH AE1 - S IH0 L - D AH0 N\nHASELEY  HH AE1 - S IH0 - L IY0\nHASELHORST  HH AE1 - S IH0 L - HH AO0 R S T\nHASELTINE  HH AE1 - S IH0 L - T IY0 N\nHASELTON  HH AH0 - S EH1 L - T AH0 N\nHASEMAN  HH EY1 S - M AH0 N\nHASENAUER  HH AE1 - S IH0 - N AW0 - ER0\nHASENFUS  HH EY1 - Z AH0 N - F AH2 S\nHASER  HH EH1 - Z ER0\nHASH  HH AE1 SH\nHASHAGEN  HH AE1 - SH AH0 - G AH0 N\nHASHED  HH AE1 SH T\nHASHEM  HH AE1 - SH IH0 M\nHASHEMI  HH AH0 - SH EY1 - M IY0\nHASHEMITE  HH AE1 - SH AH0 - M AY2 T\nHASHER  HH AE1 - SH ER0\nHASHER'S  HH AE1 - SH ER0 Z\nHASHERS  HH AE1 - SH ER0 Z\nHASHES  HH AE1 - SH AH0 Z\nHASHI  HH AE1 - SH IY0\nHASHIM  HH AE1 - SH IH0 M\nHASHIMOTO  HH AA0 - SH IY0 - M OW1 - T OW0\nHASHING  HH AE1 - SH IH0 NG\nHASHISH  HH AE1 - SH IH0 SH\nHASHISH(2)  HH AH0 - SH IY1 SH\nHASHMAN  HH AE1 SH - M AH0 N\nHASHMI  HH AE1 SH - M IY0\nHASHMI(2)  HH AA1 SH - M IY0\nHASIDIC  HH AH0 - S IH1 - D IH0 K\nHASIDIC(2)  HH AH0 - S IY1 - D IH0 K\nHASIDIM  HH AH0 - S IH1 - D IH0 M\nHASIDIM(2)  HH AH0 - S IY1 - D IH0 M\nHASKE  HH EY1 S K\nHASKELL  HH AE1 S - K AH0 L\nHASKETT  HH AE1 - S K IH0 T\nHASKEW  HH AE1 - S K Y UW0\nHASKIN  HH AE1 - S K IH0 N\nHASKINS  HH AE1 - S K IH0 N Z\nHASLAM  HH AE1 - S L AH0 M\nHASLER  HH AE1 - S AH0 - L ER0\nHASLER(2)  HH AE1 S - L ER0\nHASLETT  HH AE1 S - L IH0 T\nHASLEY  HH AE1 Z - L IY0\nHASN'T  HH AE1 - Z AH0 N T\nHASO  HH AA1 - S OW2\nHASO'S  HH AA1 - S OW2 Z\nHASPEL  HH AE1 - S P AH0 L\nHASS  HH AE1 S\nHASSAN  HH AH0 - S AA1 N\nHASSE  HH AA1 S\nHASSEBROCK  HH AE1 - S IH0 - B R AA1 K\nHASSEL  HH AE1 - S AH0 L\nHASSELBACH  HH AE1 - S IH0 L - B AA0 K\nHASSELBRING  HH AE1 - S IH0 L - B R IH0 NG\nHASSELL  HH AE1 - S AH0 L\nHASSELMAN  HH AE1 - S AH0 L - M AH0 N\nHASSEN  HH AE1 - S AH0 N\nHASSENBERG  HH AE1 - S AH0 N - B ER0 G\nHASSENFELD  HH AE1 - S AH0 N - F EH2 L D\nHASSETT  HH AE1 - S IH0 T\nHASSEY  HH AE1 - S IY0\nHASSIG  HH AE1 - S IH0 G\nHASSING  HH AE1 - S IH0 NG\nHASSINGER  HH AE1 - S IH0 N - JH ER0\nHASSLE  HH AE1 - S AH0 L\nHASSLED  HH AE1 - S AH0 L D\nHASSLER  HH AE1 S - L ER0\nHASSLES  HH AE1 - S AH0 L Z\nHASSLING  HH AE1 - S AH0 - L IH0 NG\nHASSLING(2)  HH AE1 - S L IH0 NG\nHASSMAN  HH AE1 S - M AH0 N\nHASSON  HH AE1 - S AH0 N\nHAST  HH AE1 S T\nHASTA  HH AE1 - S T AH0\nHASTA(2)  AA1 - S T AH0\nHASTE  HH EY1 S T\nHASTEN  HH EY1 - S AH0 N\nHASTENED  HH EY1 - S AH0 N D\nHASTENING  HH EY1 - S AH0 N - IH0 NG\nHASTENING(2)  HH EY1 S - N IH0 NG\nHASTENS  HH EY1 - S AH0 N Z\nHASTERT  HH AE1 - S T ER0 T\nHASTEY  HH EY1 - S T IY0\nHASTIE  HH EY1 - S T IY0\nHASTILY  HH EY1 - S T AH0 - L IY0\nHASTING  HH EY1 - S T IH0 NG\nHASTINGS  HH EY1 - S T IH0 NG Z\nHASTON  HH AE1 - S T AH0 N\nHASTY  HH EY1 - S T IY0\nHASWELL  HH AE1 - S W EH0 L\nHASZ  HH AA1 SH\nHAT  HH AE1 T\nHAT'S  HH AE1 T S\nHATA  HH AA1 - T AH0\nHATALA  HH AE1 - T AH0 - L AH0\nHATAWAY  HH AE1 T - AH0 - W EY2\nHATCH  HH AE1 CH\nHATCH'S  HH AE1 - CH IH0 Z\nHATCHBACK  HH AE1 CH - B AE2 K\nHATCHED  HH AE1 CH T\nHATCHEL  HH AE1 - CH AH0 L\nHATCHELL  HH AE1 - CH AH0 L\nHATCHER  HH AE1 - CH ER0\nHATCHERIES  HH AE1 - CH ER0 - IY0 Z\nHATCHERY  HH AE1 - CH ER0 - IY0\nHATCHES  HH AE1 - CH IH0 Z\nHATCHET  HH AE1 - CH AH0 T\nHATCHETS  HH AE1 - CH AH0 T S\nHATCHETT  HH AE1 - CH IH0 T\nHATCHING  HH AE1 - CH IH0 NG\nHATE  HH EY1 T\nHATED  HH EY1 - T AH0 D\nHATED(2)  HH EY1 - T IH0 D\nHATEFUL  HH EY1 T - F AH0 L\nHATEM  HH AE1 - T IH0 M\nHATER  HH EY1 - T ER0\nHATERS  HH EY1 - T ER0 Z\nHATES  HH EY1 T S\nHATFIELD  HH AE1 T - F IY2 L D\nHATFIELD'S  HH AE1 T - F IY2 L D Z\nHATH  HH AE1 TH\nHATHAWAY  HH AE1 TH - AH0 - W EY2\nHATHAWAY'S  HH AE1 TH - AH0 - W EY2 Z\nHATHCOAT  HH AE1 TH - K OW2 T\nHATHCOCK  HH AE1 TH - K AH0 K\nHATHEWAY  HH EY1 DH - W EY0\nHATHORN  HH AA1 - TH AO0 R N\nHATHORNE  HH AE1 - TH ER0 N\nHATING  HH EY1 - T IH0 NG\nHATLER  HH EY1 - T AH0 L - ER0\nHATLER(2)  HH EY1 T - L ER0\nHATLESTAD  HH AE1 - T AH0 L - S T AH0 D\nHATLEY  HH AE1 T - L IY0\nHATMAKER  HH AE1 T - M EY2 - K ER0\nHATRED  HH EY1 - T R AH0 D\nHATREDS  HH EY1 - T R AH0 D Z\nHATS  HH AE1 T S\nHATT  HH AE1 T\nHATTABAUGH  HH AE1 - T AH0 - B AO0\nHATTAN  HH AE1 - T AH0 N\nHATTAWAY  HH AE1 T - AH0 - W EY0\nHATTEN  HH AE1 - T AH0 N\nHATTENDORF  HH AE1 - T IH0 N - D AO0 R F\nHATTER  HH AE1 - T ER0\nHATTERAS  HH AE1 - T ER0 - AH0 S\nHATTERSLEY  HH AE1 - T ER0 Z - L IY0\nHATTERY  HH AE1 - T ER0 - IY0\nHATTIE  HH AE1 - T IY0\nHATTON  HH AE1 - T AH0 N\nHATTORI  HH AA0 - T AO1 - R IY0\nHATTUSAS  HH AH0 - T UW1 - S AH0 S\nHATTY  HH AE1 - T IY0\nHATZ  HH AE1 T S\nHAU  HH AW1\nHAUB  HH AO1 B\nHAUBER  HH AW1 - B ER0\nHAUBERT  HH AW1 - B ER0 T\nHAUBNER  HH AW1 B - N ER0\nHAUBRICH  HH AW1 - B R IH0 K\nHAUCH  HH AO1 CH\nHAUCK  HH AO1 K\nHAUENSTEIN  HH AW1 - AH0 N - S T AY0 N\nHAUENSTEIN(2)  HH AW1 - AH0 N - S T IY0 N\nHAUER  HH AW1 - ER0\nHAUETER  HH AW1 - T ER0\nHAUF  HH AO1 F\nHAUFER  HH AO1 - F ER0\nHAUFF  HH AO1 F\nHAUG  HH AO1 G\nHAUGAN  HH AO1 - G AH0 N\nHAUGE  HH AO1 JH\nHAUGEN  HH AW1 - G AH0 N\nHAUGER  HH AW1 - G ER0\nHAUGH  HH AO1\nHAUGHEY  HH AO1 - K IY0\nHAUGHN  HH AO1 N\nHAUGHT  HH AO1 T\nHAUGHTILY  HH AO1 - T IH0 - L IY0\nHAUGHTON  HH AO1 - T AH0 N\nHAUGHTY  HH AO1 - T IY0\nHAUGLAND  HH AO1 G - L AH0 N D\nHAUK  HH AO1 K\nHAUKE  HH AO1 K\nHAUL  HH AO1 L\nHAULED  HH AO1 L D\nHAULER  HH AO1 - L ER0\nHAULERS  HH AO1 - L ER0 Z\nHAULING  HH AO1 - L IH0 NG\nHAULS  HH AO1 L Z\nHAULSEY  HH AO1 L - S IY0\nHAUN  HH AO1 N\nHAUNT  HH AO1 N T\nHAUNTED  HH AO1 N - T AH0 D\nHAUNTED(2)  HH AO1 N - T IH0 D\nHAUNTING  HH AO1 N - T IH0 NG\nHAUNTINGLY  HH AO1 N - T IH0 NG - L IY0\nHAUNTS  HH AO1 N T S\nHAUPERT  HH AW1 - P ER0 T\nHAUPPAUGE  HH AW1 - P AO0 JH\nHAUPT  HH AO1 P T\nHAUPTFUHRER  HH AW1 P T - F Y UH2 - R ER0\nHAUPTMAN  HH AW1 P T - M AH0 N\nHAUPTMANN  HH AW1 P T - M AH0 N\nHAURY  HH AO1 - R IY0\nHAUS  HH AW1 S\nHAUSA  HH AW1 - S AH0\nHAUSAUER  HH AW1 - S AW0 - ER0\nHAUSCH  HH AW1 SH\nHAUSCHILD  HH AW1 S - CH AY2 L D\nHAUSCHILDT  HH AW1 - SH IH0 L T\nHAUSE  HH AW1 S\nHAUSEN  HH AW1 - Z AH0 N\nHAUSER  HH AW1 - Z ER0\nHAUSERMAN  HH AW1 - Z ER0 - M AH0 N\nHAUSFELD  HH AW1 S - F EH2 L D\nHAUSKY  HH AO1 S - K IY0\nHAUSLER  HH AW1 - S AH0 - L ER0\nHAUSLER(2)  HH AW1 S - L ER0\nHAUSMAN  HH AW1 S - M AH0 N\nHAUSMANN  HH AW1 S - M AH0 N\nHAUSNER  HH AW1 S - N ER0\nHAUSS  HH AW1 S\nHAUSSER  HH AW1 - S ER0\nHAUSSLER  HH AW1 - S AH0 - L ER0\nHAUSSLER(2)  HH AW1 S - L ER0\nHAUSSMANN  HH AW1 S - M AH0 N\nHAUSUMMI  HH AW0 - S UW1 - M IY0\nHAUSWIRTH  HH AW1 S - W ER0 TH\nHAUT  HH AO1 T\nHAUTALA  HH AO1 - T AH0 - L AH0\nHAUTE  HH OW1 T\nHAUTE(2)  HH AH1 T\nHAUTER  HH AW1 - T ER0\nHAUTH  HH AO1 TH\nHAUVER  HH AW1 - V ER0\nHAVANA  HH AH0 - V AE1 - N AH0\nHAVANA'S  HH AH0 - V AE1 - N AH0 Z\nHAVARD  HH AE1 - V ER0 D\nHAVAS  HH AA1 - V AA0 Z\nHAVE  HH AE1 V\nHAVEL  HH AE1 - V AH0 L\nHAVELKA  HH AH0 - V EH1 L - K AH0\nHAVELOCK  HH AE1 V - L AA2 K\nHAVEMAN  HH EY1 V - M AH0 N\nHAVEMANN  HH AE1 - V AH0 - M AH0 N\nHAVEN  HH EY1 - V AH0 N\nHAVEN'T  HH AE1 - V AH0 N T\nHAVEN'T(2)  HH AE1 - V AH0 N\nHAVENER  HH AE1 - V IY0 - N ER0\nHAVENS  HH EY1 - V AH0 N Z\nHAVER  HH EH1 - V ER0\nHAVERFIELD  HH AE1 - V ER0 - F IY2 L D\nHAVERFORD  HH AE1 - V ER0 - F ER0 D\nHAVERKAMP  HH AE1 - V ER0 - K AE2 M P\nHAVERLAND  HH AE1 - V ER0 - L AH0 N D\nHAVERLY  HH EY1 - V ER0 - L IY0\nHAVERSTICK  HH EY1 - V ER0 - S T IH0 K\nHAVERSTOCK  HH EY1 - V ER0 - S T AA0 K\nHAVERTY  HH AE1 - V ER0 - T IY0\nHAVES  HH AE1 V Z\nHAVEY  HH EY1 - V IY0\nHAVILAND  HH EY1 - V IY0 - L AH0 N D\nHAVILL  HH AA0 - V IY1 L\nHAVILLAND  HH AE1 - V AH0 - L AH0 N D\nHAVIN'  HH AE1 - V IH0 N\nHAVING  HH AE1 - V IH0 NG\nHAVINGTON  HH AE1 - V IH0 NG - T AH0 N\nHAVINGTON'S  HH AE1 - V IH0 NG - T AH0 N Z\nHAVINS  HH AE1 - V IH0 N Z\nHAVIS  HH AE1 - V IH0 S\nHAVLICEK  HH AA1 V - L IH0 - CH EH0 K\nHAVLIK  HH AE1 V - L IH0 K\nHAVLIN  HH AE1 V - L IH0 N\nHAVNER  HH AE1 V - N ER0\nHAVOC  HH AE1 - V AH0 K\nHAVRAN  HH AE1 - V R AH0 N\nHAVRANEK  HH AH0 V - R AE1 - N EH0 K\nHAVRILLA  HH AE2 - V R IH1 - L AH0\nHAVRON  HH AE1 - V R AH0 N\nHAW  HH AO1\nHAWAII  HH AH0 - W AY1 - IY2\nHAWAII'S  HH AH0 - W AY1 - IY2 Z\nHAWAIIAN  HH AH0 - W AY1 - AH0 N\nHAWAIIANS  HH AH0 - W AY1 - AH0 N Z\nHAWASS  HH AE1 - W AA0 S\nHAWBAKER  HH AO1 - B EY2 - K ER0\nHAWE  HH AO1\nHAWES  HH AO1 Z\nHAWING  HH AO1 - IH0 NG\nHAWK  HH AO1 K\nHAWKBILL  HH AO1 K - B IH2 L\nHAWKBILL'S  HH AO1 K - B IH2 L Z\nHAWKE  HH AO1 K\nHAWKE'S  HH AO1 K S\nHAWKED  HH AO1 K T\nHAWKEN  HH AO1 - K AH0 N\nHAWKER  HH AO1 - K ER0\nHAWKERS  HH AO1 - K ER0 Z\nHAWKES  HH AO1 K S\nHAWKEY  HH AO1 - K IY2\nHAWKEYE  HH AO1 - K AY2\nHAWKEYE'S  HH AO1 - K AY2 Z\nHAWKINESS  HH AO1 K - N AH0 S\nHAWKING  HH AO1 - K IH0 NG\nHAWKINS  HH AO1 - K IH0 N Z\nHAWKINS'  HH AO1 - K IH0 N Z\nHAWKINSON  HH AO1 - K IH0 N - S AH0 N\nHAWKISH  HH AO1 - K IH0 SH\nHAWKS  HH AO1 K S\nHAWKSLEY  HH AO1 K S - L IY0\nHAWLEY  HH AO1 - L IY0\nHAWLEY'S  HH AO1 - L IY0 Z\nHAWN  HH AO1 N\nHAWORTH  HH AE1 - W ER0 TH\nHAWS  HH AO1 Z\nHAWTHORN  HH AO1 - TH AO2 R N\nHAWTHORNE  HH AO1 - TH AO0 R N\nHAWTHORNE'S  HH AO1 - TH AO0 R N Z\nHAWTHORNS  HH AO1 - TH AO2 R N Z\nHAWVER  HH AO1 - V ER0\nHAXTON  HH AE1 K - S T AH0 N\nHAY  HH EY1\nHAYASHI  HH AA0 - Y AA1 - SH IY0\nHAYASHIDA  HH AA0 Y - AA0 - SH IY1 - D AH0\nHAYCOCK  HH EY1 - K AA2 K\nHAYCRAFT  HH EY1 - K R AE2 F T\nHAYDEL  HH EY1 - D AH0 L\nHAYDEN  HH EY1 - D AH0 N\nHAYDN  HH AY1 - D AH0 N\nHAYDN'S  HH AY1 - D AH0 N Z\nHAYDOCK  HH EY1 - D AA2 K\nHAYDON  HH EY1 - D AH0 N\nHAYDU  HH EY1 - D UW0\nHAYDUK  HH EY1 - D AH0 K\nHAYE  HH EY1\nHAYEK  HH EY1 - IH0 K\nHAYEN  HH EY1 - AH0 N\nHAYENGA  HH EY0 - EY1 NG - G AH0\nHAYER  HH EY1 - ER0\nHAYES  HH EY1 Z\nHAYFIELD  HH EY1 - F IY2 L D\nHAYFIELDS  HH EY1 - F IY2 L D Z\nHAYFORD  HH EY1 - F ER0 D\nHAYGOOD  HH EY1 - G UH2 D\nHAYHURST  HH EY1 - HH ER0 S T\nHAYING  HH EY1 - IH0 NG\nHAYLES  HH EY1 L Z\nHAYLEY  HH EY1 - L IY0\nHAYLOFT  HH EY1 - L AO2 F T\nHAYMAKER  HH EY1 - M EY2 - K ER0\nHAYMAN  HH EY1 - M AH0 N\nHAYMARKET  HH EY1 - M AA2 R - K IH0 T\nHAYMES  HH EY1 M Z\nHAYMON  HH EY1 - M AH0 N\nHAYMOND  HH EY1 - M AH0 N D\nHAYMORE  HH EY1 - M AO0 R\nHAYN  HH EY1 N\nHAYNE  HH EY1 N\nHAYNER  HH EY1 - N ER0\nHAYNES  HH EY1 N Z\nHAYNESWORTH  HH EY1 N Z - W ER0 TH\nHAYNIE  HH EY1 - N IY0\nHAYNSWORTH  HH EY1 N Z - W ER0 TH\nHAYS  HH EY1 Z\nHAYSE  HH EY1 Z\nHAYSLETT  HH EY1 S - L IH0 T\nHAYSLIP  HH EY1 S - L IH0 P\nHAYSTACK  HH EY1 - S T AE2 K\nHAYTER  HH EY1 - T ER0\nHAYTON  HH EY1 - T AH0 N\nHAYWARD  HH EY1 - W ER0 D\nHAYWARD'S  HH EY1 - W ER0 D Z\nHAYWIRE  HH EY1 - W AY2 R\nHAYWOOD  HH EY1 - W UH2 D\nHAYWORTH  HH EY1 - W ER2 TH\nHAZAN  HH EY1 - Z AH0 N\nHAZARD  HH AE1 - Z ER0 D\nHAZARDOUS  HH AE1 - Z ER0 - D AH0 S\nHAZARDS  HH AE1 - Z ER0 D Z\nHAZE  HH EY1 Z\nHAZEL  HH EY1 - Z AH0 L\nHAZELBAKER  HH EY1 - Z AH0 L - B EY2 - K ER0\nHAZELETT  HH AE1 - Z IH0 - L EH0 T\nHAZELETT(2)  HH AE1 Z - L EH0 T\nHAZELIP  HH AE1 - Z IH0 - L IH0 P\nHAZELL  HH AE1 - Z AH0 L\nHAZELNUT  HH EY1 - Z AH0 L - N AH2 T\nHAZELRIGG  HH AH0 - Z EH1 L - R IH0 G\nHAZELRIGG(2)  HH EY1 - Z EH0 L - R IH0 G\nHAZELTINE  HH EY1 - Z AH0 L - T AY2 N\nHAZELTON  HH EY1 - Z AH0 L - T AH0 N\nHAZELWOOD  HH EY1 - Z AH0 L - W UH2 D\nHAZELWOOD'S  HH EY1 - Z AH0 L - W UH2 D Z\nHAZEN  HH EY1 - Z AH0 N\nHAZING  HH EY1 - Z IH0 NG\nHAZLE  HH EY1 - Z AH0 L\nHAZLETON  HH EY1 - Z AH0 L - T AH0 N\nHAZLETT  HH AE1 Z - L IH0 T\nHAZLEWOOD  HH EY1 - Z AH0 L - W UH2 D\nHAZY  HH EY1 - Z IY0\nHAZZARD  HH AE1 - Z ER0 D\nHBOX  EY1 CH - B AO1 K S\nHCES  EY1 CH - S IY1 - IY1 - EH1 S\nHE  HH IY1\nHE'D  HH IY1 D\nHE'LL  HH IY1 L\nHE'S  HH IY1 Z\nHEABERLIN  HH IY1 - B ER0 - L IH0 N\nHEACOCK  HH IY1 - K AH0 K\nHEACOX  HH IY1 - K AA0 K S\nHEAD  HH EH1 D\nHEAD'S  HH EH1 D Z\nHEADACHE  HH EH1 D - EY2 K\nHEADACHES  HH EH1 D - EY2 K S\nHEADBAND  HH EH1 D - B AE2 N D\nHEADBANDS  HH EH1 D - B AE2 N D Z\nHEADBOARD  HH EH1 D - B AO2 R D\nHEADCHEESE  HH EH1 D - CH IY2 Z\nHEADCOUNT  HH EH1 D - K AW2 N T\nHEADDRESS  HH EH1 D - R EH2 S\nHEADDRESSES  HH EH1 D - D R EH2 - S AH0 Z\nHEADED  HH EH1 - D AH0 D\nHEADED(2)  HH EH1 - D IH0 D\nHEADEN  HH EH1 - D AH0 N\nHEADER  HH EH1 - D ER0\nHEADFIRST  HH EH1 D - F ER1 S T\nHEADGEAR  HH EH1 D - G IH2 R\nHEADHUNTER  HH EH1 D - HH AH2 N - T ER0\nHEADHUNTERS  HH EH1 D - HH AH2 N - T ER0 Z\nHEADING  HH EH1 - D IH0 NG\nHEADINGS  HH EH1 - D IH0 NG Z\nHEADINGTON  HH EH1 - D IH0 NG - T AH0 N\nHEADLEE  HH EH1 D - L IY2\nHEADLESS  HH EH1 D - L AH0 S\nHEADLEY  HH EH1 D - L IY0\nHEADLIGHT  HH EH1 D - L AY2 T\nHEADLIGHTS  HH EH1 D - L AY2 T S\nHEADLINE  HH EH1 D - L AY2 N\nHEADLINED  HH EH1 D - L AY2 N D\nHEADLINER  HH EH1 D - L AY2 - N ER0\nHEADLINES  HH EH1 D - L AY2 N Z\nHEADLINING  HH EH1 D - L AY2 - N IH0 NG\nHEADLONG  HH EH1 D - L AO2 NG\nHEADLUND  HH EH1 D - L AH0 N D\nHEADMAN  HH EH1 D - M AH0 N\nHEADMASTER  HH EH1 D - M AE1 - S T ER0\nHEADMISTRESS  HH EH1 D - M IH2 - S T R AH0 S\nHEADPHONE  HH EH1 D - F OW2 N\nHEADPHONES  HH EH1 D - F OW2 N Z\nHEADQUARTER  HH EH1 D - K W AO2 R - T ER0\nHEADQUARTER(2)  HH EH1 D - K AO2 R - T ER0\nHEADQUARTERED  HH EH1 D - K AO2 R - T ER0 D\nHEADQUARTERED(2)  HH EH1 D - K W AO2 R - T ER0 D\nHEADQUARTERS  HH EH1 D - K W AO2 R - T ER0 Z\nHEADQUARTERS(2)  HH EH1 D - K AO2 R - T ER0 Z\nHEADREST  HH EH1 D - R EH2 S T\nHEADRESTS  HH EH1 D - R EH2 S T S\nHEADRESTS(2)  HH EH1 D - R EH2 S S\nHEADRESTS(3)  HH EH1 D - R EH2 S\nHEADRICK  HH EH1 D - R IH0 K\nHEADROOM  HH EH1 D - R UW2 M\nHEADS  HH EH1 D Z\nHEADSET  HH EH1 D - S EH2 T\nHEADSETS  HH EH1 D - S EH2 T S\nHEADSHIP  HH EH1 D - SH IH2 P\nHEADSMAN  HH EH1 D Z - M AH0 N\nHEADSTART  HH EH1 D - S T AA2 R T\nHEADSTARTS  HH EH1 D - S T AA2 R T S\nHEADSTONE  HH EH1 D - S T OW2 N\nHEADSTONES  HH EH1 D - S T OW2 N Z\nHEADSTRONG  HH EH1 D - S T R AO2 NG\nHEADWATER  HH EH1 D - W AO2 - T ER0\nHEADWATERS  HH EH1 D - W AO2 - T ER0 Z\nHEADWAY  HH EH1 D - W EY2\nHEADWIND  HH EH1 D - W IH2 N D\nHEADY  HH EH1 - D IY0\nHEAFNER  HH IY1 F - N ER0\nHEAGLE  HH IY1 - G AH0 L\nHEAGNEY  HH IY1 G - N IY0\nHEAGY  HH IY1 - JH IY0\nHEAL  HH IY1 L\nHEALD  HH IY1 L D\nHEALED  HH IY1 L D\nHEALER  HH IY1 - L ER0\nHEALERS  HH IY1 - L ER0 Z\nHEALEY  HH IY1 - L IY0\nHEALING  HH IY1 - L IH0 NG\nHEALS  HH IY1 L Z\nHEALTH  HH EH1 L TH\nHEALTH'S  HH EH1 L TH S\nHEALTHAMERICA  HH IY2 L - TH AH0 - M EH1 - R IH0 - K AH0\nHEALTHCARE  HH EH1 L TH - K EH2 R\nHEALTHCARE'S  HH EH1 L TH - K EH2 R Z\nHEALTHCORP  HH EH1 L TH - K AO2 R P\nHEALTHCORP(2)  HH EH1 L TH - K AO2 R\nHEALTHDYNE  HH EH1 L TH - D AY2 N\nHEALTHFUL  HH EH1 L TH - F AH0 L\nHEALTHIER  HH EH1 L - TH IY0 - ER0\nHEALTHIEST  HH EH1 L - TH IY0 - IH0 S T\nHEALTHSOURCE  HH EH1 L TH - S AO2 R S\nHEALTHSOUTH  HH EH1 L TH - S AW2 TH\nHEALTHTRUST  HH EH1 L TH - T R AH2 S T\nHEALTHTRUST'S  HH EH1 L TH - T R AH2 S T S\nHEALTHVEST  HH EH1 L TH - V EH2 S T\nHEALTHWEEK  HH EH1 L TH - W IY2 K\nHEALTHWORK  HH EH1 L TH - W ER0 K\nHEALTHWORKS  HH EH1 L TH - W ER0 K S\nHEALTHY  HH EH1 L - TH IY0\nHEALY  HH IY1 - L IY0\nHEALY'S  HH IY1 - L IY0 Z\nHEANEY  HH IY1 - N IY0\nHEAP  HH IY1 P\nHEAPE  HH IY1 P\nHEAPED  HH IY1 P T\nHEAPHY  HH IY1 - F IY0\nHEAPING  HH IY1 - P IH0 NG\nHEAPS  HH IY1 P S\nHEAR  HH IH1 R\nHEARD  HH ER1 D\nHEARER  HH IH1 - R ER0\nHEARERS  HH IH1 - R ER0 Z\nHEARIN  HH IH1 - R IH0 N\nHEARING  HH IH1 - R IH0 NG\nHEARING'S  HH IH1 - R IH0 NG Z\nHEARINGS  HH IH1 - R IH0 NG Z\nHEARL  HH ER1 L\nHEARN  HH ER1 N\nHEARNE  HH ER1 N\nHEARNS  HH ER1 N Z\nHEARON  HH IH1 - R AH0 N\nHEARRON  HH AO1 - R AH0 N\nHEARS  HH IH1 R Z\nHEARSAY  HH IH1 R - S EY2\nHEARSE  HH ER1 S\nHEARST  HH ER1 S T\nHEARST'S  HH ER1 S T S\nHEART  HH AA1 R T\nHEART'S  HH AA1 R T S\nHEARTACHE  HH AA1 R - T EY2 K\nHEARTBEAT  HH AA1 R T - B IY2 T\nHEARTBEATS  HH AA1 R T - B IY2 T S\nHEARTBREAK  HH AA1 R T - B R EY2 K\nHEARTBREAKING  HH AA1 R T - B R EY2 - K IH0 NG\nHEARTBROKEN  HH AA1 R T - B R OW2 - K AH0 N\nHEARTBURN  HH AA1 R T - B ER2 N\nHEARTED  HH AA1 R - T AH0 D\nHEARTED(2)  HH AA1 R - T IH0 D\nHEARTEDLY  HH AA1 R - T IH0 D - L IY0\nHEARTEN  HH AA1 R - T AH0 N\nHEARTENED  HH AA1 R - T AH0 N D\nHEARTENING  HH AA1 R - T AH0 N - IH0 NG\nHEARTENING(2)  HH AA1 R T - N IH0 NG\nHEARTFELT  HH AA1 R T - F EH2 L T\nHEARTH  HH AA1 R TH\nHEARTHS  HH AA1 R TH S\nHEARTILY  HH AA1 R - T AH0 - L IY0\nHEARTLAND  HH AA1 R T - L AE2 N D\nHEARTLESS  HH AA1 R T - L AH0 S\nHEARTS  HH AA1 R T S\nHEARTSCAN  HH AA1 R T - S K AE2 N\nHEARTTHROB  HH AA1 R T - TH R AA2 B\nHEARTWARMING  HH AA1 R T - W AO2 R - M IH0 NG\nHEARTWISE  HH AA1 R T - W AY2 Z\nHEARTWOOD  HH AA1 R T - W UH2 D\nHEARTY  HH AA1 R - T IY0\nHEASLEY  HH IY1 Z - L IY0\nHEASLIP  HH IY1 S - L IH0 P\nHEASTON  HH IY1 - S T AH0 N\nHEAT  HH IY1 T\nHEAT'S  HH IY1 T S\nHEATED  HH IY1 - T AH0 D\nHEATED(2)  HH IY1 - T IH0 D\nHEATEDLY  HH IY1 - T IH0 D - L IY0\nHEATER  HH IY1 - T ER0\nHEATERS  HH IY1 - T ER0 Z\nHEATH  HH IY1 TH\nHEATH'S  HH IY1 TH S\nHEATHCLIFF  HH EH1 TH K - L IH0 F\nHEATHCOCK  HH EH1 TH - K AH0 K\nHEATHCOTE  HH EH1 TH - K AH0 T\nHEATHEN  HH IY1 - DH AH0 N\nHEATHER  HH EH1 - DH ER0\nHEATHER'S  HH EH1 - DH ER0 Z\nHEATHERINGTON  HH EH1 - DH ER0 - IH0 NG - T AH0 N\nHEATHERLY  HH EH1 - DH ER0 - L IY0\nHEATHERS  HH EH1 - DH ER0 Z\nHEATHMAN  HH IY1 TH - M AH0 N\nHEATHROW  HH IY1 - TH R OW0\nHEATHWOOD  HH IY1 TH - W UH2 D\nHEATING  HH IY1 - T IH0 NG\nHEATLEY  HH IY1 T - L IY0\nHEATON  HH IY1 - T AH0 N\nHEATS  HH IY1 T S\nHEATWOLE  HH IY1 T - W OW2 L\nHEAVE  HH IY1 V\nHEAVED  HH IY1 V D\nHEAVEN  HH EH1 - V AH0 N\nHEAVEN'S  HH EH1 - V AH0 N Z\nHEAVENER  HH EH1 - V AH0 - N ER0\nHEAVENLY  HH EH1 - V AH0 N - L IY0\nHEAVENS  HH EH1 - V AH0 N Z\nHEAVES  HH IY1 V Z\nHEAVEY  HH IY1 - V IY0\nHEAVIER  HH EH1 - V IY0 - ER0\nHEAVIES  HH EH1 - V IY0 Z\nHEAVIEST  HH EH1 - V IY0 - AH0 S T\nHEAVILY  HH EH1 - V AH0 - L IY0\nHEAVIN  HH EH1 - V IH0 N\nHEAVING  HH IY1 - V IH0 NG\nHEAVNER  HH IY1 V - N ER0\nHEAVRIN  HH IY1 - V R IH0 N\nHEAVY  HH EH1 - V IY0\nHEAVYHANDED  HH EH1 - V IY0 - HH AE2 N - D IH0 D\nHEAVYSET  HH EH1 - V IY0 - S EH2 T\nHEAVYWEIGHT  HH EH1 - V IY0 - W EY2 T\nHEAVYWEIGHTS  HH EH1 - V IY0 - W EY2 T S\nHEBARD  HH EH1 - B ER0 D\nHEBB  HH EH1 B\nHEBDA  HH EH1 B - D AH0\nHEBDING  HH EH1 B - D IH0 NG\nHEBE  HH IY1 B\nHEBEL  HH EH1 - B AH0 L\nHEBELER  HH EH1 - B AH0 - L ER0\nHEBENSTREIT  HH EH1 - B IH0 N - S T R AY0 T\nHEBER  HH IY1 - B ER0\nHEBERER  HH EH1 - B ER0 - ER0\nHEBERLE  HH EH1 - B ER0 - AH0 L\nHEBERLEIN  HH EH1 - B ER0 - L AY2 N\nHEBERLING  HH EH1 - B ER0 - L IH0 NG\nHEBERT  HH EH1 - B ER0 T\nHEBNER  HH EH1 B - N ER0\nHEBREW  HH IY1 - B R UW0\nHEBRIDES  HH EH1 - B R IH0 - D IY0 Z\nHEBRON  HH EH1 - B R AH0 N\nHEBRON(2)  HH EH1 - B R AO2 N\nHECCO  HH EH1 - K OW0\nHECHINGER  HH EH1 - K IH0 N - JH ER0\nHECHLER  HH EH1 - K L ER0\nHECHT  HH EH1 K T\nHECHT'S  HH EH1 K T S\nHECHTMAN  HH EH1 K T - M AH0 N\nHECK  HH EH1 K\nHECK'S  HH EH1 K S\nHECKAMAN  HH EH1 - K AH0 - M AH0 N\nHECKARD  HH EH1 - K ER0 D\nHECKART  HH EH1 - K ER0 T\nHECKATHORN  HH EH1 - K AH0 - TH ER0 N\nHECKBERT  HH EH1 K - B ER0 T\nHECKEL  HH EH1 - K AH0 L\nHECKENDORN  HH EH1 - K EH0 N - D AO0 R N\nHECKER  HH EH1 - K ER0\nHECKERT  HH EH1 - K ER0 T\nHECKLE  HH EH1 - K AH0 L\nHECKLED  HH EH1 - K AH0 L D\nHECKLER  HH EH1 - K L ER0\nHECKLERS  HH EH1 - K L ER0 Z\nHECKLING  HH EH1 - K L IH0 NG\nHECKMAN  HH EH1 K - M AH0 N\nHECKMANN  HH EH1 K - M AH0 N\nHECKUVA  HH EH0 - K Y UW1 - V AH0\nHECKUVA(2)  HH EH1 - K AH0 - V AH0\nHECLA  HH EH1 - K L AH0\nHECLA'S  HH EH1 - K L AH0 Z\nHECOX  HH EH1 - K AA0 K S\nHECTARE  HH EH1 K - T AA2 R\nHECTARES  HH EH1 K - T AA2 R Z\nHECTIC  HH EH1 K - T IH0 K\nHECTOGRAPH  HH EH1 K - T AH0 - G R AE2 F\nHECTOR  HH EH1 K - T ER0\nHECTOR'S  HH EH1 K - T ER0 Z\nHECTORING  HH EH1 K - T ER0 - IH0 NG\nHECUBA  HH EH1 - K Y AH0 - B AH0\nHECUBA(2)  HH EH1 - K Y UW0 - B AH0\nHEDA  HH EY1 - D AH0\nHEDBERG  HH EH1 D - B ER0 G\nHEDDA  HH EH1 - D AH0\nHEDDEN  HH EH1 - D AH0 N\nHEDDING  HH EH1 - D IH0 NG\nHEDDY  HH EH1 - D IY0\nHEDEEN  HH EH1 - D IY0 N\nHEDGE  HH EH1 JH\nHEDGECOCK  HH EH1 JH - K AA2 K\nHEDGED  HH EH1 JH D\nHEDGEHOG  HH EH1 JH - HH AA2 G\nHEDGEHOGS  HH EH1 JH - HH AA2 G Z\nHEDGEPATH  HH EH1 JH - P AE2 TH\nHEDGEPETH  HH EH1 - JH IH0 - P EH0 TH\nHEDGER  HH EH1 - JH ER0\nHEDGERS  HH EH1 - JH ER0 Z\nHEDGES  HH EH1 - JH IH0 Z\nHEDGING  HH EH1 - JH IH0 NG\nHEDGLIN  HH EH1 JH - L IH0 N\nHEDGPETH  HH EH1 JH - P IH0 TH\nHEDI  HH EH1 - D IY0\nHEDIGER  HH EH1 - D IH0 - G ER0\nHEDIN  HH EH1 - D IH0 N\nHEDINGER  HH EH1 - D IH0 N - G ER0\nHEDINGER(2)  HH EH1 - D IH0 N - JH ER0\nHEDLEY  HH EH1 D - L IY0\nHEDLUND  HH EH1 D - L AH0 N D\nHEDMAN  HH EH1 D - M AH0 N\nHEDONIC  HH AH0 - D AA1 - N IH0 K\nHEDONISM  HH IY1 - D AH0 - N IH2 - Z AH0 M\nHEDONISTIC  HH IY2 - D AH0 - N IH1 - S T IH0 K\nHEDQUIST  HH EH1 D - K W IH2 S T\nHEDRICH  HH EH1 D - R IH0 K\nHEDRICK  HH EH1 D - R IH0 K\nHEDSTROM  HH EH1 D - S T R AH0 M\nHEDTKE  HH EH1 D - K IY0\nHEDWIG  HH EH1 D - W IH0 G\nHEDWIGA  HH EH1 D - W IH0 - G AH0\nHEDY  HH IY1 - D IY0\nHEE  HH IY1\nHEEB  HH IY1 B\nHEEBNER  HH IY1 B - N ER0\nHEED  HH IY1 D\nHEEDED  HH IY1 - D AH0 D\nHEEDED(2)  HH IY1 - D IH0 D\nHEEDING  HH IY1 - D IH0 NG\nHEEDS  HH IY1 D Z\nHEEFNER  HH IY1 F - N ER0\nHEEG  HH IY1 G\nHEEKE  HH IY1 K\nHEEKIN  HH IY1 - K IH0 N\nHEEL  HH IY1 L\nHEELAN  HH IY1 - L AH0 N\nHEELED  HH IY1 L D\nHEELS  HH IY1 L Z\nHEEMSTRA  HH IY1 M - S T R AH0\nHEENAN  HH IY1 - N AH0 N\nHEENEY  HH IY1 - N IY0\nHEER  HH IY1 - ER0\nHEEREN  HH IH1 - R AH0 N\nHEERMANN  HH IH1 R - M AH0 N\nHEES  HH IY1 Z\nHEESCH  HH IY1 SH\nHEESE  HH IY1 Z\nHEETER  HH IY1 - T ER0\nHEFEI  HH AH0 - F EY1\nHEFFEL  HH EH1 - F AH0 L\nHEFFELFINGER  HH EH1 - F IH0 L - F IH0 - NG ER0\nHEFFERAN  HH EH1 - F ER0 - AH0 N\nHEFFERMAN  HH EH1 - F ER0 - M AH0 N\nHEFFERN  HH EH1 - F ER0 N\nHEFFERNAN  HH EH1 - F ER0 - N AH0 N\nHEFFERON  HH EH1 - F ER0 - AH0 N\nHEFFINGTON  HH EH1 - F IH0 NG - T AH0 N\nHEFFLER  HH EH1 F - L ER0\nHEFFLEY  HH EH1 F - L IY0\nHEFFNER  HH EH1 F - N ER0\nHEFFRON  HH EH1 - F R AH0 N\nHEFLER  HH EH1 F - L ER0\nHEFLEY  HH EH1 F - L IY0\nHEFLIN  HH EH1 - F L IH0 N\nHEFNER  HH EH1 F - N ER0\nHEFNER'S  HH EH1 F - N ER0 Z\nHEFT  HH EH1 F T\nHEFTER  HH EH1 F - T ER0\nHEFTI  HH EH1 F - T IY0\nHEFTIER  HH EH1 F - T IY0 - ER0\nHEFTIEST  HH EH1 F - T IY0 - AH0 S T\nHEFTY  HH EH1 F - T IY0\nHEGADORN  HH EH1 - G AH0 - D AO2 R N\nHEGARTY  HH EH1 - G AA0 R - T IY0\nHEGE  HH IY1 JH\nHEGEDUS  HH EH1 - G IH0 - D IH0 S\nHEGEL  HH EH1 - G AH0 L\nHEGELIAN  HH IY0 - JH IY1 - L IY0 - AH0 N\nHEGEMAN  HH IY1 G - M AH0 N\nHEGEMONIC  HH EH2 - G AH0 - M AA1 - N IH0 K\nHEGEMONY  HH IY0 - JH EH1 - M AH0 - N IY0\nHEGENNA  HH EH0 - G EH1 - N AH0\nHEGER  HH IY1 - G ER0\nHEGG  HH EH1 G\nHEGGE  HH EH1 G\nHEGGEN  HH EH1 - G AH0 N\nHEGGIE  HH EH1 - G IY0\nHEGLAND  HH EH1 G - L AH0 N D\nHEGLER  HH EH1 G - L ER0\nHEGLUND  HH EH1 G - L AH0 N D\nHEGNA  HH EH1 G - N AH0\nHEGNER  HH EH1 G - N ER0\nHEGSTROM  HH EH1 G - S T R AH0 M\nHEGWOOD  HH EH1 G - W UH2 D\nHEGYI  HH EY1 - G Y IY0\nHEH  HH EH1\nHEHIR  HH EH1 - HH IH0 R\nHEHL  HH EH1 L\nHEHMAN  HH EH1 - M AH0 N\nHEHMEYER  HH EH1 - M AY2 R\nHEHN  HH EH1 N\nHEHR  HH EH1 R\nHEIBEL  HH AY1 - B AH0 L\nHEIBERG  HH AY1 - B ER0 G\nHEIBERGER  HH AY1 - B ER0 - G ER0\nHEICHEL  HH AY1 - K AH0 L\nHEICHELBECH  HH AY1 - K IH0 L - B IH0 K\nHEICK  HH AY1 K\nHEICO  HH AY1 - K OW0\nHEICO'S  HH AY1 - K OW0 Z\nHEID  HH AY1 D\nHEIDBREDER  HH AY1 D - B R IH0 - D ER0\nHEIDBRINK  HH AY1 D - B R IH0 NG K\nHEIDE  HH AY1 D\nHEIDECKER  HH AY1 - D IH0 - K ER0\nHEIDEL  HH AY1 - D AH0 L\nHEIDELBERG  HH AY1 - D AH0 L - B ER0 G\nHEIDELBERGER  HH AY1 - D AH0 L - B ER0 - G ER0\nHEIDEMAN  HH AY1 D - M AH0 N\nHEIDEMANN  HH AY1 D - M AH0 N\nHEIDEN  HH AY1 - D AH0 N\nHEIDENREICH  HH AY1 - D IH0 N - R AY0 K\nHEIDER  HH AY1 - D ER0\nHEIDI  HH AY1 - D IY0\nHEIDI'S  HH AY1 - D IY0 S\nHEIDINGER  HH AY1 - D IH0 - NG ER0\nHEIDIWEAR  HH AY1 - D IY0 - W EH0 R\nHEIDLER  HH AY1 - D AH0 - L ER0\nHEIDLER(2)  HH AY1 D - L ER0\nHEIDORN  HH AY1 - D ER0 N\nHEIDRICH  HH AY1 - D R IH0 K\nHEIDRICK  HH AY1 - D R IH0 K\nHEIDSTRA  HH AY1 D - S T R AH0\nHEIDT  HH AY1 D T\nHEIER  HH AY1 - ER0\nHEIFER  HH AY1 - F ER0\nHEIFER(2)  HH EH1 - F ER0\nHEIFERS  HH EH1 - F ER0 Z\nHEIFERS(2)  HH AY1 - F ER0 Z\nHEIFETZ  HH AY1 - F IH0 T S\nHEIFNER  HH IY1 F - N ER0\nHEIGES  HH AY1 - JH IH0 Z\nHEIGHT  HH AY1 T\nHEIGHTEN  HH AY1 - T AH0 N\nHEIGHTENED  HH AY1 - T AH0 N D\nHEIGHTENING  HH AY1 - T AH0 N - IH0 NG\nHEIGHTENING(2)  HH AY1 T - N IH0 NG\nHEIGHTENS  HH AY1 - T AH0 N Z\nHEIGHTH  HH AY1 TH\nHEIGHTS  HH AY1 T S\nHEIGL  HH AY1 - G AH0 L\nHEIKEN  HH AY1 - K AH0 N\nHEIKES  HH AY1 - K AH0 Z\nHEIKKILA  HH AY1 - K IH0 - L AH0\nHEIKKINEN  HH AY1 - K IH0 - N AH0 N\nHEIKO  HH AY1 - K OW0\nHEIKO(2)  HH EY1 - K OW0\nHEIL  HH AY1 L\nHEILAND  HH AY1 - L AH0 N D\nHEILBRUN  HH AY1 L - B R AH0 N\nHEILEMAN  HH AY1 L - M AH0 N\nHEILEMAN'S  HH AY1 L - M AH0 N Z\nHEILER  HH AY1 - L ER0\nHEILIG  HH AY1 - L IH0 G\nHEILMAN  HH AY1 L - M AH0 N\nHEILMANN  HH AY1 L - M AH0 N\nHEIM  HH AY1 M\nHEIMAN  HH AY1 - M AH0 N\nHEIMANN  HH AY1 - M AH0 N\nHEIMBACH  HH AY1 M - B AA2 K\nHEIMBERGER  HH AY1 M - B ER0 - G ER0\nHEIMBIGNER  HH AY1 M - B AY0 G - N ER0\nHEIMBUCH  HH AY1 M - B AH0 K\nHEIMBURGER  HH AY1 M - B ER0 - G ER0\nHEIMER  HH AY1 - M ER0\nHEIMERL  HH AY1 - M ER0 L\nHEIMLICH  HH AY1 M - L IH0 K\nHEIMS  HH AY1 M Z\nHEIMSOTH  HH AY1 M - S AH0 TH\nHEIN  HH AY1 N\nHEINBACH  HH AY1 N - B AA2 K\nHEINBAUGH  HH AY1 N - B AW0\nHEINBURGER  HH AY1 N - B ER0 - G ER0\nHEINDEL  HH AY1 N - D AH0 L\nHEINDL  HH AY1 N - D AH0 L\nHEINE  HH AY1 N\nHEINECKE  HH AY1 - N IH0 K\nHEINEKEN  HH AY1 - N AH0 - K AH0 N\nHEINEMAN  HH AY1 N - M AH0 N\nHEINEMANN  HH AY1 N - M AH0 N\nHEINEN  HH AY1 - N AH0 N\nHEINER  HH AY1 - N ER0\nHEINES  HH AY1 N Z\nHEINEY  HH AY1 - N IY0\nHEINI  HH AY1 - N IY0\nHEINICKE  HH AY1 - N IH0 K\nHEINIG  HH AY1 - N IH0 G\nHEININGER  HH AY1 - N IH0 - NG ER0\nHEINISCH  HH AY1 - N IH0 SH\nHEINKE  HH AY1 NG K\nHEINKEL  HH AY1 NG - K AH0 L\nHEINL  HH AY1 - N AH0 L\nHEINLE  HH AY1 - N AH0 L\nHEINLEIN  HH AY1 N - L AY2 N\nHEINLEN  HH AY1 - N AH0 - L AH0 N\nHEINLY  HH AY1 N - L IY0\nHEINO  HH AY1 - N OW0\nHEINOLD  HH AY1 - N OW0 L D\nHEINONEN  HH AY1 - N AH0 - N AH0 N\nHEINOUS  HH EY1 - N AH0 S\nHEINRICH  HH AY1 - N R IH0 K\nHEINRICHS  HH AY1 - N R IH0 K S\nHEINS  HH AY1 N Z\nHEINSOHN  HH AY1 N - S AH0 N\nHEINTZ  HH AY1 N T S\nHEINTZE  HH AY1 N T S\nHEINTZELMAN  HH AY1 N T - Z AH0 L - M AH0 N\nHEINTZMAN  HH AY1 N T S - M AH0 N\nHEINY  HH AY1 - N IY0\nHEINZ  HH AY1 N Z\nHEINZ'S  HH AY1 N - Z IH0 Z\nHEINZE  HH AY1 N Z\nHEINZEL  HH AY1 N - Z AH0 L\nHEINZELMAN  HH AY1 N - Z AH0 L - M AH0 N\nHEINZEN  HH AY1 N - Z AH0 N\nHEINZMAN  HH AY1 N Z - M AH0 N\nHEINZMANN  HH AY1 N Z - M AH0 N\nHEIPLE  HH AY1 - P AH0 L\nHEIR  EH1 R\nHEIRESS  EH1 - R AH0 S\nHEIRLOOM  EH1 R - L UW2 M\nHEIRLOOMS  EH1 R - L UW2 M Z\nHEIRONIMUS  EH1 - R AA0 - N IH0 - M UW0 S\nHEIRONIMUS(2)  HH AY0 - R AA1 - N IH0 - M AH0 S\nHEIRS  EH1 R Z\nHEISBOURG  HH AY1 S - B AO2 R G\nHEISE  HH AY1 S\nHEISEL  HH AY1 - S AH0 L\nHEISER  HH AY1 - S ER0\nHEISERMAN  HH AY1 - S ER0 - M AH0 N\nHEISEY  HH AY1 - S IY0\nHEISHMAN  HH IY1 - IH0 SH - M AH0 N\nHEISINGER  HH AY1 - S IH0 N - JH ER0\nHEISKELL  HH AY1 S - K AH0 L\nHEISLER  HH AY1 - S AH0 - L ER0\nHEISLER(2)  HH AY1 S - L ER0\nHEISMAN  HH AY1 S - M AH0 N\nHEISMAN'S  HH AY1 S - M AH0 N Z\nHEISNER  HH AY1 S - N ER0\nHEISS  HH AY1 S\nHEIST  HH AY1 S T\nHEISTAND  HH AY1 - S T AH0 N D\nHEISTER  HH AY1 - S T ER0\nHEIT  HH AY1 T\nHEITKAMP  HH AY1 T - K AE2 M P\nHEITMAN  HH AY1 T - M AH0 N\nHEITMANN  HH AY1 T - M AH0 N\nHEITMEYER  HH AY1 T - M AY0 - ER0\nHEITNER  HH AY1 T - N ER0\nHEITZ  HH AY1 T S\nHEITZENRATER  HH AY1 T - Z IH0 N - R EY0 - T ER0\nHEITZMAN  HH AY1 T S - M AH0 N\nHEIWA  HH AY1 - W AH0\nHEIZER  HH AY1 - Z ER0\nHEJL  HH EH1 JH L\nHEJNA  HH EH1 JH - N AH0\nHEKKER  HH EH1 - K ER0\nHEKMATYAR  HH EH2 K - M AH0 - T Y AA1 R\nHEKMATYAR'S  HH EH2 K - M AH0 - T Y AA1 R Z\nHELABA  HH EH0 - L AA1 - B AH0\nHELANDER  HH EH1 - L AH0 N - D ER0\nHELANE  HH AH0 - L EY1 N\nHELBER  HH EH1 L - B ER0\nHELBERG  HH EH1 L - B ER0 G\nHELBERT  HH EH1 L - B ER0 T\nHELBIG  HH EH1 L - B IH0 G\nHELBING  HH EH1 L - B IH0 NG\nHELBLING  HH EH1 L - B AH0 L - IH0 NG\nHELBLING(2)  HH EH1 L - B L IH0 NG\nHELD  HH EH1 L D\nHELDENBRAND  HH EH1 L - D IH0 N - B R AH0 N D\nHELDENBRAND(2)  HH EH1 L - D IH0 N - B R AE0 N D\nHELDENTENOR  HH EH1 L - D EH0 N - T EH2 - N ER0\nHELDER  HH EH1 L - D ER0\nHELDERMAN  HH EH1 L - D ER0 - M AH0 N\nHELDMAN  HH EH1 L D - M AH0 N\nHELDOR  HH EH1 L - D ER0\nHELDRETH  HH EH1 L - D R IH0 TH\nHELDRING  HH EH1 L - D R IH0 NG\nHELDS  HH EH1 L D Z\nHELDT  HH EH1 L T\nHELEN  HH EH1 - L AH0 N\nHELEN'S  HH EH1 - L IH0 N Z\nHELENA  HH EH1 - L AH0 - N AH0\nHELENA'S  HH EH1 - L IH0 - N AH0 Z\nHELENE  HH AH0 - L IY1 N\nHELENS  HH EH1 - L AH0 N Z\nHELF  HH EH1 L F\nHELFAND  HH EH1 L - F AH0 N D\nHELFER  HH EH1 L - F ER0\nHELFGOTT  HH EH1 L F - G AA2 T\nHELFMAN  HH EH1 L F - M AH0 N\nHELFRICH  HH EH1 L - F R IH0 K\nHELGA  HH EH1 L - G AH0\nHELGERSON  HH EH1 L - G ER0 - S AH0 N\nHELGESEN  HH EH1 L - G IY0 - Z AH0 N\nHELGESON  HH EH1 L - G IH0 - S AH0 N\nHELGET  HH EH1 L - G IH0 T\nHELGREN  HH EH1 L - G R EH0 N\nHELICAL  HH EH1 - L IH0 - K AH0 L\nHELICE  HH EH1 - L IH0 S\nHELICON  HH EH1 - L IH0 - K AA2 N\nHELICONS  HH EH1 - L IH0 - K AA2 N Z\nHELICOPTER  HH EH1 - L IH0 - K AA2 P - T ER0\nHELICOPTER'S  HH EH1 - L AH0 - K AA2 P - T ER0 Z\nHELICOPTERS  HH EH1 - L IH0 - K AA2 P - T ER0 Z\nHELIE  HH EH1 - L IY0\nHELIN  HH EH1 - L IH0 N\nHELING  HH IY1 - L IH0 NG\nHELINSKI  HH IH0 - L IH1 N - S K IY0\nHELIONETIC  HH IY2 - L IY0 - OW0 - N EH1 - T IH0 K\nHELIONETICS  HH IY2 - L IY0 - OW0 - N EH1 - T IH0 K S\nHELIOPOLIS  HH IY2 - L IY0 - AA1 - P AH0 - L AH0 S\nHELIOS  HH IY1 - L IY0 - AA2 S\nHELIOTROPE  HH IY1 - L IY0 - AH0 - T R OW2 P\nHELIUM  HH IY1 - L IY0 - AH0 M\nHELIX  HH IY1 - L IH0 K S\nHELKE  HH EH1 L K\nHELL  HH EH1 L\nHELL'S  HH EH1 L Z\nHELLACIOUS  HH EH2 - L EY1 - SH AH0 S\nHELLACIOUSLY  HH EH2 - L EY1 - SH AH0 S - L IY0\nHELLACIOUSNESS  HH EH2 - L EY1 - SH AH0 S - N AH0 S\nHELLAMS  HH EH1 - L AH0 M Z\nHELLAND  HH EH1 - L AH0 N D\nHELLARD  HH EH1 - L ER0 D\nHELLBERG  HH EH1 L - B ER0 G\nHELLBUSCH  HH EH1 L - B AH0 SH\nHELLBUSCH(2)  HH EH1 L - B UH0 SH\nHELLE  HH EH1 L\nHELLEN  HH EH1 - L AH0 N\nHELLENBRAND  HH EH1 - L AH0 N - B R AE2 N D\nHELLENIC  HH AH0 - L EH1 - N IH0 K\nHELLENISM  HH EH1 - L AH0 - N IH2 - Z AH0 M\nHELLENISTIC  HH EH2 - L AH0 - N IH1 - S T IH0 K\nHELLENIZE  HH EH1 - L AH0 - N AY2 Z\nHELLENIZED  HH EH1 - L AH0 - N AY2 Z D\nHELLER  HH EH1 - L ER0\nHELLER'S  HH EH1 - L ER0 Z\nHELLERMAN  HH EH1 - L ER0 - M AH0 N\nHELLFIRE  HH EH1 L - F AY2 R\nHELLICKSON  HH EH1 - L IH0 K - S AH0 N\nHELLING  HH EH1 - L IH0 NG\nHELLINGER  HH EH1 - L IH0 - NG ER0\nHELLISH  HH EH1 - L IH0 SH\nHELLMAN  HH EH1 L - M AH0 N\nHELLMANN  HH EH1 L - M AH0 N\nHELLMER  HH EH1 L - M ER0\nHELLMUTH  HH EH1 L - M UW2 TH\nHELLNER  HH EH1 L - N ER0\nHELLO  HH AH0 - L OW1\nHELLO(2)  HH EH0 - L OW1\nHELLRAISER  HH EH1 L - R EY2 - Z ER0\nHELLSTROM  HH EH1 L - S T R AH0 M\nHELLUMS  HH EH1 - L AH0 M Z\nHELLUVA  HH EH2 - L UW1 - V AH0\nHELLWIG  HH EH1 L - W IH0 G\nHELLYER  HH EH1 - L IY0 - ER0\nHELM  HH EH1 L M\nHELMA  HH EH1 L - M AH0\nHELMAN  HH EH1 L - M AH0 N\nHELMBRECHT  HH EH1 L M - B R IH0 K T\nHELME  HH EH1 L M\nHELMER  HH EH1 L - M ER0\nHELMERICH  HH EH1 L - M ER0 - IH0 K\nHELMERS  HH EH1 L - M ER0 Z\nHELMES  HH EH1 L M Z\nHELMET  HH EH1 L - M AH0 T\nHELMETED  HH EH1 L - M AH0 - T IH0 D\nHELMETS  HH EH1 L - M AH0 T S\nHELMICH  HH EH1 L - M IH0 K\nHELMICK  HH EH1 L - M IH0 K\nHELMIG  HH EH1 L - M IH0 G\nHELMING  HH EH1 L - M IH0 NG\nHELMINIAK  HH EH1 L - M IH0 - N IY0 - AE0 K\nHELMINSKI  HH IH0 L - M IH1 N - S K IY0\nHELMINTH  HH EH1 L - M IH0 N TH\nHELMKAMP  HH EH1 L M - K AE2 M P\nHELMKE  HH EH1 L M K\nHELMONT  HH EH1 L - M AA2 N T\nHELMS  HH EH1 L M Z\nHELMS'  HH EH1 L M Z\nHELMS'S  HH EH1 L M - Z IH0 Z\nHELMSBURTON  HH EH1 L M Z - B ER0 - T AH0 N\nHELMSLEY  HH EH1 L M Z - L IY0\nHELMSLEY'S  HH EH1 L M - Z L IY0 Z\nHELMSLEYS  HH EH1 L M - Z L IY0 Z\nHELMSMAN  HH EH1 L M Z - M AE2 N\nHELMSTETTER  HH EH1 L M - S T IH0 - T ER0\nHELMUT  HH EH1 L - M AH0 T\nHELMUTH  HH EH1 L - M UW2 TH\nHELOT  HH EH1 - L AH0 T\nHELOTISM  HH EH1 - L AH0 - T IH2 - Z AH0 M\nHELOTRY  HH EH1 - L AH0 - T R IY0\nHELOTS  HH EH1 - L AH0 T S\nHELP  HH EH1 L P\nHELPED  HH EH1 L P T\nHELPER  HH EH1 L - P ER0\nHELPERS  HH EH1 L - P ER0 Z\nHELPFUL  HH EH1 L P - F AH0 L\nHELPFULLY  HH EH1 L P - F AH0 - L IY0\nHELPING  HH EH1 L - P IH0 NG\nHELPINGS  HH EH1 L - P IH0 NG Z\nHELPLESS  HH EH1 L P - L AH0 S\nHELPLESSLY  HH EH1 L P - L AH0 S - L IY0\nHELPLESSNESS  HH EH1 L P - L AH0 S - N AH0 S\nHELPRIN  HH EH1 L - P R IH0 N\nHELPS  HH EH1 L P S\nHELSEL  HH EH1 L - S AH0 L\nHELSER  HH EH1 L - S ER0\nHELSETH  HH EH1 L - S IH0 TH\nHELSINKI  HH EH1 L - S IH0 NG - K IY0\nHELSLEY  HH EH1 L S - L IY0\nHELSTROM  HH EH1 L - S T R AH0 M\nHELT  HH EH1 L T\nHELTER  HH EH1 L - T ER0\nHELTON  HH EH1 L - T AH0 N\nHELTSLEY  HH EH1 L T S - L IY0\nHELTZEL  HH EH1 L T - Z AH0 L\nHELVEY  HH EH1 L - V IY0\nHELVIE  HH EH1 L - V IY0\nHELWIG  HH EH1 L - W IH0 G\nHELZER  HH EH1 L - Z ER0\nHEM  HH EH1 M\nHEMAN  HH IY1 - M AH0 N\nHEMANI  HH AH0 - M AA1 - N IY0\nHEMANN  HH EH1 - M AH0 N\nHEMANT  HH EH1 - M AH0 N T\nHEMATITE  HH EH1 - M AH0 - T AY2 T\nHEMATOLOGY  HH EH2 - M AH0 - T AA1 - L AH0 - JH IY0\nHEMATOLOGY(2)  HH IY2 - M AH0 - T AA1 - L AH0 - JH IY0\nHEMBERGER  HH EH1 M - B ER0 - G ER0\nHEMBREE  HH IH0 M - B R IY1\nHEMBRICK  HH EH1 M - B R IH2 K\nHEMBY  HH EH1 M - B IY0\nHEMDALE  HH EH1 M - D EY2 L\nHEMDALE'S  HH EH1 M - D EY2 L Z\nHEMEL  HH EH1 - M AH0 L\nHEMENWAY  HH EH1 - M AH0 N - W EY2\nHEMIMORPHITE  HH EH2 - M AH0 - M AO1 R - F AY2 T\nHEMING  HH EH1 - M IH0 NG\nHEMINGER  HH EH1 - M IH0 - NG ER0\nHEMINGWAY  HH EH1 - M IH0 NG - W EY2\nHEMINGWAY'S  HH EH1 - M IH0 NG - W EY2 Z\nHEMIPLEGIA  HH EH2 - M AH0 - P L IY1 - JH IY0 - AH0\nHEMIPLEGIA(2)  HH EH2 - M AH0 - P L IY1 - JH Y AH0\nHEMISPHERE  HH EH1 - M IH0 - S F IH2 R\nHEMISPHERIC  HH EH2 - M AH0 - S F IH1 - R IH0 K\nHEMKER  HH EH1 M - K ER0\nHEMLER  HH EH1 M - L ER0\nHEMLINE  HH EH1 M - L AY2 N\nHEMLINES  HH EH1 M - L AY2 N Z\nHEMLO  HH EH1 M - L OW0\nHEMLOCK  HH EH1 M - L AA2 K\nHEMM  HH EH1 M\nHEMME  HH EH1 M\nHEMMED  HH EH1 M D\nHEMMELGARN  HH EH1 - M IH0 L - G AA0 R N\nHEMMEN  HH EH1 - M AH0 N\nHEMMER  HH EH1 - M ER0\nHEMMERICH  HH EH1 - M ER0 - IH0 K\nHEMMERLE  HH EH1 - M ER0 - L IY0\nHEMMERLING  HH EH1 - M ER0 - L IH0 NG\nHEMMERT  HH EH1 - M ER0 T\nHEMMETER  HH EH1 - M IH0 - T ER0\nHEMMING  HH EH1 - M IH0 NG\nHEMMINGER  HH EH1 - M IH0 - NG ER0\nHEMMINGHAUS  HH EH1 - M IH0 NG - HH AW2 S\nHEMMINGS  HH EH1 - M IH0 NG Z\nHEMMINGSEN  HH EH1 - M IH0 NG - S AH0 N\nHEMMINGSON  HH EH1 - M IH0 NG - S AH0 N\nHEMO  HH IY1 - M OW0\nHEMOCYANIN  HH IY2 - M AH0 - S AY1 - AH0 - N AH0 N\nHEMODYNAMIC  HH EH2 - M OW0 - D AY0 - N AE1 - M IH0 K\nHEMODYNAMICS  HH EH2 - M OW0 - D AY0 - N AE1 - M IH0 K S\nHEMOGLOBIN  HH IY2 - M AH0 - G L OW1 - B AH0 N\nHEMOLYTIC  HH IY2 - M AH0 - L IH1 - T IH0 K\nHEMOND  HH EH1 - M AH0 N D\nHEMOPHILIA  HH IY2 - M AH0 - F IY1 - L IY0 - AH0\nHEMOPHILIAC  HH IY0 - M AH0 - F IH1 - L IY0 - AE0 K\nHEMOPHILIAC(2)  HH IY0 - M OW0 - F IH1 - L IY0 - AE0 K\nHEMOPHILIAC(3)  HH IY0 - M AH0 - F IH1 L - Y AE0 K\nHEMOPHILIAC(4)  HH IY0 - M OW0 - F IH1 L - Y AE0 K\nHEMOPHILIACS  HH IY2 - M AH0 - F IH1 - L IY0 - AE2 K S\nHEMORRHAGE  HH EH1 - M ER0 - IH0 JH\nHEMORRHAGE(2)  HH EH1 M - R AH0 JH\nHEMORRHAGED  HH EH1 - M ER0 - IH0 JH D\nHEMORRHAGIC  HH EH2 - M ER0 - AE1 - G IH0 K\nHEMORRHAGING  HH EH1 - M ER0 - IH0 - JH IH0 NG\nHEMORRHOID  HH EH1 - M ER0 - OY2 D\nHEMORRHOIDS  HH EH1 - M ER0 - OY2 D Z\nHEMOTEC  HH EH1 - M OW0 - T EH2 K\nHEMP  HH EH1 M P\nHEMPEL  HH EH1 M - P AH0 L\nHEMPEN  HH EH1 M - P AH0 N\nHEMPFLING  HH EH1 M P - F AH0 L - IH0 NG\nHEMPFLING(2)  HH EH1 M P - F L IH0 NG\nHEMPHILL  HH EH1 M P - HH IH2 L\nHEMPSTEAD  HH EH1 M P - S T EH0 D\nHEMRIC  HH EH1 M - R IH0 K\nHEMRICK  HH EH1 M - R IH0 K\nHEMRY  HH EH1 M - R IY0\nHEMS  HH EH1 M Z\nHEMSLEY  HH EH1 M Z - L IY0\nHEMSTREET  HH EH1 M - S T R IY2 T\nHEMY  HH EH1 - M IY0\nHEN  HH EH1 N\nHEN'S  HH EH1 N Z\nHENAO  HH EY1 - N AW0\nHENARD  HH EH1 - N ER0 D\nHENAULT  HH EH1 - N AW0 L T\nHENBANE  HH EH1 N - B EY2 N\nHENCE  HH EH1 N S\nHENCEFORTH  HH EH1 N S - F AO1 R TH\nHENCH  HH EH1 N CH\nHENCHMAN  HH EH1 N CH - M AH0 N\nHENCHMEN  HH EH1 N CH - M AH0 N\nHENCKEL  HH EH1 N - K AH0 L\nHENDEE  HH EH1 N - D IY0\nHENDEL  HH EH1 N - D AH0 L\nHENDERSHOT  HH EH1 N - D ER0 - SH AH0 T\nHENDERSHOTT  HH EH1 N - D ER0 - SH AH0 T\nHENDERSON  HH EH1 N - D ER0 - S AH0 N\nHENDLER  HH EH1 N D - L ER0\nHENDLEY  HH EH1 N D - L IY0\nHENDON  HH EH1 N - D OW0 N\nHENDRA  HH EH1 N - D R AH0\nHENDREN  HH EH1 N - D ER0 - AH0 N\nHENDRICH  HH EH1 N - D R IH0 K\nHENDRICK  HH EH1 N - D R IH0 K\nHENDRICKS  HH EH1 N - D R IH0 K S\nHENDRICKSEN  HH EH1 N - D R IH0 K - S AH0 N\nHENDRICKSON  HH EH1 N - D R IH0 K - S AH0 N\nHENDRIE  HH EH1 N - D ER0 - IY0\nHENDRIK  HH EH1 N - D R IH0 K\nHENDRIKS  HH EH1 N - D R IH0 K S\nHENDRIKSEN  HH EH1 N - D R IH0 K - S AH0 N\nHENDRIX  HH EH1 N - D R IH0 K S\nHENDRIXSON  HH EH1 N - D R IH0 K - S AH0 N\nHENDRON  HH EH1 N - D R AH0 N\nHENDRY  HH EH1 N - D R IY0\nHENDRY'S  HH EH1 N - D R IY0 Z\nHENDRYX  HH EH1 N - D R IH0 K S\nHENDY  HH EH1 N - D IY0\nHENEGAR  HH EH1 - N IH0 - G ER0\nHENEGHAN  HH IH0 - N EH1 G - HH AH0 N\nHENEHAN  HH EH1 - N IH0 - HH AE0 N\nHENERY  HH EH1 - N ER0 - IY0\nHENES  HH IY1 N Z\nHENEY  HH EH1 - N IY0\nHENG  HH EH1 NG\nHENGEL  HH EH1 NG - G AH0 L\nHENGST  HH EH1 NG G S T\nHENHOUSE  HH EH1 N - HH AW2 S\nHENIE  HH EH1 - N IY0\nHENIGAN  HH EH1 - N IH0 - G AH0 N\nHENIN  HH EH1 - N IH0 N\nHENINGER  HH EH1 - N IH0 - NG ER0\nHENION  HH EH1 - N Y AH0 N\nHENK  HH EH1 NG K\nHENKE  HH EH1 NG K\nHENKEL  HH EH1 NG - K AH0 L\nHENKELMAN  HH EH1 NG - K AH0 L - M AH0 N\nHENKELS  HH EH1 NG - K AH0 L Z\nHENKEN  HH EH1 NG - K AH0 N\nHENKES  HH EH1 NG K S\nHENKIN  HH EH1 NG - K IH0 N\nHENKLE  HH EH1 NG - K AH0 L\nHENLE  HH EH1 - N AH0 L\nHENLEY  HH EH1 N - L IY0\nHENLEY'S  HH EH1 N - L IY0 Z\nHENLEYS  HH EH1 N - L IY0 Z\nHENLINE  HH EH1 N - L AY2 N\nHENLY  HH EH1 N - L IY0\nHENMAN  HH EH1 N - M AH0 N\nHENN  HH EH1 N\nHENNA  HH EH1 - N AH0\nHENNAN  HH EH1 - N AH0 N\nHENNE  HH EH1 N\nHENNE(2)  HH EH1 - N IY0\nHENNEBERGER  HH EH1 N - B ER0 - G ER0\nHENNEBERRY  HH EH1 N - B EH0 - R IY0\nHENNEKE  HH EH1 - N IH0 K\nHENNELLY  HH EH1 - N AH0 - L IY0\nHENNEMAN  HH EH1 N - M AH0 N\nHENNEN  HH EH1 - N AH0 N\nHENNEPIN  HH EH1 - N IH0 - P IH0 N\nHENNER  HH EH1 - N ER0\nHENNES  HH EH1 N Z\nHENNESS  HH EH1 - N IH0 S\nHENNESSEE  HH EH1 - N IH0 - S IY0\nHENNESSEY  HH EH1 - N AH0 - S IY0\nHENNESSEY'S  HH EH1 - N AH0 - S IY0 Z\nHENNESSY  HH EH1 - N AH0 - S IY0\nHENNEY  HH EH1 - N IY0\nHENNICK  HH EH1 - N IH0 K\nHENNIG  HH EH1 - N IH0 G\nHENNIGAN  HH EH1 - N IH0 - G AH0 N\nHENNIGAR  HH EH1 - N IH0 - G ER0\nHENNING  HH EH1 - N IH0 NG\nHENNINGER  HH EH1 - N IH0 - NG ER0\nHENNINGS  HH EH1 - N IH0 NG Z\nHENNINGSEN  HH EH1 - N IH0 NG - S AH0 N\nHENNINGTON  HH EH1 - N IH0 NG - T AH0 N\nHENNIS  HH EH1 - N IH0 S\nHENNON  HH EH1 - N AH0 N\nHENPECK  HH EH1 N - P EH2 K\nHENPECKED  HH EH1 N - P EH2 K T\nHENRI  HH EH1 N - R IY0\nHENRI(2)  AO2 - R IY1\nHENRI(3)  AA2 N - R IY1\nHENRICH  HH EH1 N - R IH0 K\nHENRICHS  HH EH1 N - R IH0 K S\nHENRICHSEN  HH EH1 N - R IH0 K - S AH0 N\nHENRICK  HH EH1 N - R IH0 K\nHENRICKS  HH EH1 N - R IH0 K S\nHENRICKSEN  HH EH1 N - R IH0 K - S AH0 N\nHENRICKSON  HH EH1 N - R IH0 K - S AH0 N\nHENRIE  HH EH1 - N ER0 - IY0\nHENRIETTA  HH EH2 N - R IY0 - EH1 - T AH0\nHENRIETTE  HH EH2 N - R IY0 - EH1 T\nHENRIK  HH EH1 N - R IH0 K\nHENRIKA  HH EH1 - N R IH0 - K AH0\nHENRIKSEN  HH EH1 N - R IH0 K - S AH0 N\nHENRIKSON  HH EH1 N - R IH0 K - S AH0 N\nHENRIQUE  AA0 N - R IY1 K\nHENRIQUES  HH EH0 N - R IY1 - K EH0 Z\nHENRIQUES(2)  AA0 N - R IY1 K\nHENRIQUEZ  HH EH0 N - R IY1 - K EH0 Z\nHENRIQUEZ(2)  AA0 N - R IY1 K\nHENRY  HH EH1 N - R IY0\nHENRY'S  HH EH1 N - R IY0 Z\nHENS  HH EH1 N Z\nHENSARLING  HH EH1 N - S AA0 R - L IH0 NG\nHENSCH  HH EH1 N SH\nHENSCHEL  HH EH1 N - SH AH0 L\nHENSCHEN  HH EH1 N - SH AH0 N\nHENSE  HH EH1 N S\nHENSEL  HH EH1 N - S AH0 L\nHENSEN  HH EH1 N - S AH0 N\nHENSHAW  HH EH1 N - SH AO2\nHENSKE  HH EH1 N S - K IY0\nHENSLEE  HH EH1 N Z - L IY2\nHENSLER  HH EH1 N - S AH0 - L ER0\nHENSLER(2)  HH EH1 N S - L ER0\nHENSLEY  HH EH1 N Z - L IY0\nHENSON  HH EH1 N - S AH0 N\nHENTGES  HH EH1 N T - JH IH0 Z\nHENTHORN  HH EH1 N - TH ER0 N\nHENTHORNE  HH EH1 N - TH ER0 N\nHENTIC  HH EH1 N - T IH0 K\nHENTOFF  HH EH1 N - T AO0 F\nHENTON  HH EH1 N - T AH0 N\nHENTSCHEL  HH EH1 N - CH AH0 L\nHENTZ  HH EH1 N T S\nHENWOOD  HH EH1 N - W UH2 D\nHENZE  HH EH1 N Z\nHENZEL  HH EH1 N - Z AH0 L\nHENZLER  HH EH1 N Z - L ER0\nHEON  HH IY1 - AH0 N\nHEP  HH EH1 P\nHEPARIN  HH EH1 - P ER0 - IH0 N\nHEPATIC  HH AH0 - P AE1 - T IH0 K\nHEPATITIS  HH EH2 - P AH0 - T AY1 - T AH0 S\nHEPBURN  HH EH1 P - B ER0 N\nHEPBURN'S  HH EH1 P - B ER0 N Z\nHEPFER  HH EH1 P - F ER0\nHEPKER  HH EH1 P - K ER0\nHEPLER  HH EH1 P - L ER0\nHEPNER  HH EH1 P - N ER0\nHEPP  HH EH1 P\nHEPPE  HH EH1 P\nHEPPER  HH EH1 - P ER0\nHEPPLER  HH EH1 P - L ER0\nHEPPNER  HH EH1 P - N ER0\nHEPTATHLON  HH EH0 P - T AE1 TH - L AA0 N\nHEPWORTH  HH EH1 P - W ER0 TH\nHER  HH ER0\nHER'S  HH ER1 Z\nHER(2)  HH ER1\nHERA  HH IH1 - R AH0\nHERALD  HH EH1 - R AH0 L D\nHERALD'S  HH EH1 - R AH0 L D Z\nHERALDED  HH EH1 - R AH0 L - D IH0 D\nHERALDIC  HH EH0 - R AE1 L - D IH0 K\nHERALDING  HH EH1 - R AH0 L - D IH0 NG\nHERALDRY  HH EH1 - R AH0 L - D R IY0\nHERALDS  HH EH1 - R AH0 L D Z\nHERB  ER1 B\nHERB'S  ER1 B Z\nHERB'S(2)  HH ER1 B Z\nHERB(2)  HH ER1 B\nHERBACEOUS  ER0 - B EY1 - SH AH0 S\nHERBAL  ER1 - B AH0 L\nHERBAL(2)  HH ER1 - B AH0 L\nHERBALIFE  HH ER1 - B AH0 - L AY2 F\nHERBALIFE(2)  ER1 - B AH0 - L AY2 F\nHERBALIST  ER1 - B AH0 - L AH0 S T\nHERBALIST'S  ER1 - B AH0 - L AH0 S T S\nHERBALIST'S(2)  HH ER1 - B AH0 - L AH0 S T S\nHERBALIST(2)  HH ER1 - B AH0 - L AH0 S T\nHERBALISTS  ER1 - B AH0 - L AH0 S T S\nHERBALISTS'  ER1 - B AH0 - L AH0 S T S\nHERBALISTS'(2)  HH ER1 - B AH0 - L AH0 S T S\nHERBALISTS(2)  ER1 - B AH0 - L AH0 S S\nHERBALISTS(3)  HH ER1 - B AH0 - L AH0 S T S\nHERBALISTS(4)  HH ER1 - B AH0 - L AH0 S S\nHERBALISTS(5)  ER1 - B AH0 - L AH0 S\nHERBALISTS(6)  HH ER1 - B AH0 - L AH0 S\nHERBARIUM  HH ER0 - B EH1 - R IY0 - AH0 M\nHERBARIUM(2)  ER0 - B EH1 - R IY0 - AH0 M\nHERBARIUMS  HH ER0 - B EH1 - R IY0 - AH0 M Z\nHERBARIUMS(2)  ER0 - B EH1 - R IY0 - AH0 M Z\nHERBECK  HH ER1 - B EH0 K\nHERBEL  HH ER1 - B AH0 L\nHERBER  HH ER1 - B ER0\nHERBERG  HH ER1 - B ER0 G\nHERBERGER  HH ER1 - B ER0 - G ER0\nHERBERS  HH ER1 - B ER0 Z\nHERBERT  HH ER1 - B ER0 T\nHERBERT'S  HH ER1 - B ER0 T S\nHERBICIDE  HH ER1 - B IH0 - S AY2 D\nHERBICIDE(2)  ER1 - B IH0 - S AY2 D\nHERBICIDES  ER1 - B AH0 - S AY2 D Z\nHERBICIDES(2)  HH ER1 - B AH0 - S AY2 D Z\nHERBIE  HH ER1 - B IY0\nHERBIG  HH ER1 - B IH0 G\nHERBIN  HH ER1 - B IH0 N\nHERBISON  HH ER1 - B IH0 - S AH0 N\nHERBIVORE  HH ER1 - B IH0 - V AO2 R\nHERBIVORE(2)  ER1 - B IH0 - V AO2 R\nHERBIVOROUS  HH ER0 - B IH1 - V ER0 - AH0 S\nHERBIVOROUS(2)  ER0 - B IH1 - V ER0 - AH0 S\nHERBOLD  HH ER1 - B OW0 L D\nHERBS  ER1 B Z\nHERBST  HH ER1 B S T\nHERBSTER  HH ER1 B - S T ER0\nHERCEG  HH ER1 - S IH0 G\nHERCEGOVINA  HH EH2 R T - S AH0 - G OW0 - V IY1 - N AH0\nHERCEGOVINA'S  HH EH2 R T - S AH0 - G OW0 - V IY1 - N AH0 Z\nHERCEGOVINA'S(2)  HH ER2 R T - S AH0 - G OW0 - V IY1 - N AH0 Z\nHERCEGOVINA(2)  HH ER2 R T - S AH0 - G OW0 - V IY1 - N AH0\nHERCULEAN  HH ER0 - K Y UW1 - L IY0 - AH0 N\nHERCULES  HH ER1 - K Y AH0 - L IY2 Z\nHERCZEG  HH ER1 - CH IH0 G\nHERD  HH ER1 D\nHERDA  HH EH1 R - D AH0\nHERDAL  HH EH1 R - D AH0 L\nHERDED  HH ER1 - D IH0 D\nHERDER  HH EH1 R - D ER0\nHERDER(2)  HH ER1 - D ER0\nHERDERS  HH ER1 - D ER0 Z\nHERDING  HH ER1 - D IH0 NG\nHERDMAN  HH ER1 D - M AH0 N\nHERDS  HH ER1 D Z\nHERDSMEN  HH ER1 D Z - M IH0 N\nHERDT  HH ER1 T\nHERE  HH IH1 R\nHERE'S  HH IH1 R Z\nHEREABOUT  HH IH1 - R AH0 - B AW2 T\nHEREABOUTS  HH IH1 - R AH0 - B AW2 T S\nHEREAFTER  HH IH0 - R AE1 F - T ER0\nHEREBY  HH IH0 R - B AY1\nHEREDIA  HH ER0 - EH1 - D IY0 - AH0\nHEREDITARY  HH ER0 - EH1 - D AH0 - T EH2 - R IY0\nHEREDITY  HH ER0 - EH1 - D AH0 - T IY0\nHEREFORD  HH EH1 - R AH0 - F ER0 D\nHEREIN  HH IH0 - R IH1 N\nHERENDEEN  HH IH1 R N - D IY0 N\nHERESY  HH EH1 - R AH0 - S IY0\nHERETIC  HH EH1 - R AH0 - T IH0 K\nHERETICAL  HH ER0 - EH1 - T IH0 - K AH0 L\nHERETOFORE  HH IH2 R - T AH0 - F AO1 R\nHEREWITH  HH IH1 R - W IH1 TH\nHERFORD  HH ER1 - F ER0 D\nHERFURTH  HH ER1 - F ER0 TH\nHERGERT  HH ER1 - G ER0 T\nHERGET  HH ER1 - G IH0 T\nHERGOTT  HH ER1 - G AH0 T\nHERIN  HH EH1 - R IH0 N\nHERING  HH ER1 - IH0 NG\nHERINGER  HH EH1 - R IH0 N - JH ER0\nHERINGTON  HH EH1 - R IH0 NG - T AH0 N\nHERITABLE  HH EH1 - R AH0 - T AH0 - B AH0 L\nHERITAGE  HH EH1 - R AH0 - T AH0 JH\nHERITAGE'S  HH EH1 - R AH0 - T IH0 - JH IH0 Z\nHERITAGE(2)  HH EH1 - R IH0 - T IH0 JH\nHERITAGES  HH EH1 - R IH0 - T IH0 - JH AH0 Z\nHERK  HH ER1 K\nHERKERT  HH ER1 - K ER0 T\nHERL  HH ER1 L\nHERLIHY  HH ER1 - L IH0 - HH IY0\nHERLING  HH ER1 - L IH0 NG\nHERLONG  HH ER1 - L AO0 NG\nHERM  HH ER1 M\nHERMAN  HH ER1 - M AH0 N\nHERMAN'S  HH ER1 - M AH0 N Z\nHERMANCE  HH ER1 - M AH0 N S\nHERMANN  HH ER1 - M AH0 N\nHERMANNS  HH ER1 - M AA0 N Z\nHERMANS  HH ER1 - M AH0 N Z\nHERMANSEN  HH ER1 - M AH0 N - S AH0 N\nHERMANSON  HH ER1 - M AH0 N - S AH0 N\nHERMAPHRODITE  HH ER0 - M AE1 - F R AH0 - D AY2 T\nHERMAPHRODITIC  HH ER0 - M AE2 - F R AH0 - D IH1 - T IH0 K\nHERMES  HH ER1 - M IY0 Z\nHERMETICALLY  HH ER0 - M EH1 - T IH0 - K AH0 - L IY0\nHERMETICALLY(2)  HH ER0 - M EH1 - T IH0 K - L IY0\nHERMIA  HH ER1 - M IY0 - AH0\nHERMIAS  HH ER1 - M IY0 - AH0 Z\nHERMIDA  HH EH0 R - M IY1 - D AH0\nHERMIE  HH ER1 - M IY0\nHERMINA  HH ER1 - M IH0 - N AH0\nHERMINA(2)  HH ER0 - M IY1 - N AH0\nHERMINE  HH ER1 - M IH0 N\nHERMINIA  HH EH0 R - M IY1 - N IY0 - AH0\nHERMINIE  HH ER1 - M IH0 - N IY0\nHERMIT  HH ER1 - M AH0 T\nHERMITAGE  HH ER1 - M AH0 - T AH0 JH\nHERMITS  HH ER1 - M AH0 T S\nHERMON  HH ER1 - M AH0 N\nHERMOSA  HH EH0 R - M OW1 - S AH0\nHERMOSILLO  HH ER0 - M AH0 - S IH1 - L OW0\nHERMS  HH ER1 M Z\nHERMSEN  HH ER1 M - S AH0 N\nHERN  HH ER1 N\nHERNAN  HH ER1 - N AH0 N\nHERNANDES  HH ER1 - N IH0 N D Z\nHERNANDES(2)  HH ER0 - N AE1 N - D EH0 Z\nHERNANDEZ  HH ER0 - N AE1 N - D EH0 Z\nHERNANDO  HH ER0 - N AA1 N - D OW0\nHERNDON  HH ER1 N - D AH0 N\nHERNE  HH ER1 N\nHERNER  HH ER1 - N ER0\nHERNIA  HH ER1 - N IY0 - AH0\nHERNIATE  HH ER1 - N IY0 - EY2 T\nHERNIATES  HH ER1 - N IY0 - EY2 T S\nHERNON  HH ER1 - N AH0 N\nHERO  HH IH1 - R OW0\nHERO'S  HH IH1 - R OW0 Z\nHERO'S(2)  HH IY1 - R OW0 Z\nHERO(2)  HH IY1 - R OW0\nHEROD  HH EH1 - R AH0 D\nHEROES  HH IH1 - R OW0 Z\nHEROES(2)  HH IY1 - R OW0 Z\nHEROIC  HH IH0 - R OW1 - IH0 K\nHEROICALLY  HH IH2 - R OW1 - IH0 K - L IY0\nHEROICS  HH IH0 - R OW1 - IH0 K S\nHEROIN  HH EH1 - R OW0 - AH0 N\nHEROIN'S  HH EH1 - R OW0 - AH0 N Z\nHEROINE  HH EH1 - R OW0 - AH0 N\nHEROINES  HH EH1 - R OW2 - AH0 N Z\nHEROISM  HH EH1 - R OW0 - IH2 - Z AH0 M\nHEROIZE  HH IY1 - R OW0 - AY2 Z\nHEROIZED  HH IY1 - R OW0 - AY2 Z D\nHEROLD  HH EH1 - R AH0 L D\nHERON  HH EH1 - R AH0 N\nHERON'S  HH EH1 - R AH0 N Z\nHERONS  HH EH1 - R AH0 N Z\nHEROS  HH IH1 - R OW0 Z\nHEROUX  HH ER0 - UW1\nHERPES  HH ER1 - P IY0 Z\nHERR  HH EH1 R\nHERRE  HH EH1 R\nHERRE(2)  HH AH1 - R IY0\nHERREID  HH EH1 - R AY0 D\nHERRELL  HH EH1 - R AH0 L\nHERREN  HH EH1 - R AH0 N\nHERRERA  HH ER0 - EH1 - R AH0\nHERRERO  HH EH0 - R EH1 - R OW0\nHERRHAUSEN  HH EH1 R - HH AW2 - Z AH0 N\nHERRIAGE  HH EH1 - R IY0 - IH0 JH\nHERRICK  HH EH1 - R IH0 K\nHERRIDGE  HH EH1 - R IH0 JH\nHERRIG  HH EH1 - R IH0 G\nHERRIMAN  HH EH1 - R IH0 - M AH0 N\nHERRIN  HH EH1 - R IH0 N\nHERRING  HH EH1 - R IH0 NG\nHERRINGS  HH EH1 - R IH0 NG Z\nHERRINGSHAW  HH EH1 - R IH0 NG - SH AO2\nHERRINGTON  HH EH1 - R IH0 NG - T AH0 N\nHERRINGTON'S  HH EH1 - R IH0 NG - T AH0 N Z\nHERRIOTT  HH EH1 - R IY0 - AA0 T\nHERRIOTT(2)  HH EH1 - R IY0 - AH0 T\nHERRLE  HH EH1 - R AH0 L\nHERRLINGER  HH EH1 R - L IH2 - NG ER0\nHERRLINGER(2)  HH EH1 R - L IH2 NG - G ER0\nHERRMAN  HH EH1 R - M AH0 N\nHERRMANN  HH EH1 R - M AH0 N\nHERRO  HH EH1 - R OW0\nHERROD  HH EH1 - R AH0 D\nHERROLD  HH EH1 - R OW2 L D\nHERRON  HH EH1 - R AH0 N\nHERRONIMO  HH ER0 - AA1 - N AH0 - M OW0\nHERRONIMO'S  HH ER0 - AA1 - N AH0 - M OW0 Z\nHERS  HH ER0 Z\nHERS(2)  HH ER1 Z\nHERSANT  HH ER1 - S AH0 N T\nHERSCH  HH ER1 SH\nHERSCHEL  HH ER1 - SH AH0 L\nHERSCHEL'S  HH ER1 - SH AH0 L Z\nHERSCHELL  HH ER1 - SH AH0 L\nHERSCHENSOHN  HH ER1 - SH AH0 N - S AH0 N\nHERSCU  HH ER0 - S K UW1\nHERSELF  HH ER0 - S EH1 L F\nHERSEY  HH ER1 - S IY0\nHERSH  HH ER1 SH\nHERSHBERGER  HH ER1 SH - B ER0 - G ER0\nHERSHEY  HH ER1 - SH IY0\nHERSHEY'S  HH ER1 - SH IY0 Z\nHERSHISER  HH ER1 - SH AY0 - Z ER0\nHERSHKOWITZ  HH ER1 SH - K AH0 - W IH0 T S\nHERSHMAN  HH ER1 SH - M AH0 N\nHERSHNER  HH ER1 SH - N ER0\nHERSKOVITZ  HH ER1 - S K AH0 - V IH0 T S\nHERSKOWITZ  HH ER1 - S K AH0 - W IH0 T S\nHERSMAN  HH ER1 S - M AH0 N\nHERSOM  HH ER1 - S AH0 M\nHERSON  HH ER1 - S AH0 N\nHERST  HH ER1 S T\nHERT  HH ER1 T\nHERTA  HH ER1 - T AH0\nHERTEL  HH ER1 - T AH0 L\nHERTENSTEIN  HH ER1 - T AH0 N - S T AY0 N\nHERTENSTEIN(2)  HH ER1 - T AH0 N - S T IY0 N\nHERTER  HH ER1 - T ER0\nHERTHA  HH ER1 - TH AH0\nHERTIG  HH ER1 - T IH0 G\nHERTING  HH ER1 - T IH0 NG\nHERTLEIN  HH ER1 T - L AY0 N\nHERTOG  HH ER1 - T AA0 G\nHERTZ  HH EH1 R T S\nHERTZ(2)  HH ER1 T S\nHERTZBERG  HH ER1 T S - B ER0 G\nHERTZENLEBEN  HH ER1 - T AH0 N - L EY2 - B AH0 N\nHERTZENLEBEN'S  HH ER1 - T AH0 N - L EY2 - B AH0 N Z\nHERTZLER  HH ER1 T - Z AH0 L - ER0\nHERTZLER(2)  HH ER1 T Z - L ER0\nHERTZOG  HH ER1 T - Z AH0 G\nHERTZOG(2)  HH ER1 T - Z AA2 G\nHERVE  HH ER1 V\nHERVE(2)  HH ER1 - V EY0\nHERVEY  HH ER0 - V EY1\nHERWICK  HH ER1 - W IH2 K\nHERWIG  HH ER1 - W IH0 G\nHERWITZ  HH ER1 - W IH0 T S\nHERYANA  HH ER0 - Y AE1 - N AH0\nHERZ  HH ER1 Z\nHERZBERG  HH ER1 Z - B ER0 G\nHERZBERGER  HH ER1 Z - B ER0 - G ER0\nHERZEGOVINA  HH EH2 R T - S AH0 - G OW0 - V IY1 - N AH0\nHERZEGOVINA'S  HH EH2 R T - S AH0 - G OW0 - V IY1 - N AH0 Z\nHERZEGOVINA'S(2)  HH ER2 T - S AH0 - G OW0 - V IY1 - N AH0 Z\nHERZEGOVINA(2)  HH ER2 T - S AH0 - G OW0 - V IY1 - N AH0\nHERZER  HH ER1 - Z ER0\nHERZFELD  HH ER1 Z - F EH0 L D\nHERZIG  HH ER1 - Z IH0 G\nHERZING  HH ER1 - Z IH0 NG\nHERZLINGER  HH ER1 Z - L IH2 - NG ER0\nHERZOG  HH ER1 - Z AA0 G\nHESCH  HH EH1 SH\nHESELTINE  HH EH1 - S AH0 L - T IY2 N\nHESELTINE(2)  HH EH1 - S AH0 L - T AY2 N\nHESELTON  HH IH0 - S EH1 L - T AH0 N\nHESHENG  HH EH1 - SH EH1 NG\nHESIOD  HH IY1 - S IY0 - AH0 D\nHESITANCY  HH EH1 - Z IH0 - T AH0 N - S IY0\nHESITANT  HH EH1 - Z IH0 - T AH0 N T\nHESITANTLY  HH EH1 - Z IH0 - T AH0 N T - L IY0\nHESITATE  HH EH1 - Z AH0 - T EY2 T\nHESITATED  HH EH1 - Z IH0 - T EY2 - T IH0 D\nHESITATES  HH EH1 - Z AH0 - T EY2 T S\nHESITATING  HH EH1 - Z AH0 - T EY2 - T IH0 NG\nHESITATION  HH EH2 - Z AH0 - T EY1 - SH AH0 N\nHESITATIONS  HH EH2 - Z AH0 - T EY1 - SH AH0 N Z\nHESKETH  HH EH1 - S K IH0 TH\nHESKETT  HH EH1 - S K IH0 T\nHESLEP  HH EH1 S - L IH0 P\nHESLER  HH EH1 - S AH0 - L ER0\nHESLER(2)  HH EH1 S - L ER0\nHESLIN  HH EH1 S - L IH0 N\nHESLOP  HH EH1 S - L AH0 P\nHESPER  HH EH1 - S P ER0\nHESPERA  HH EY0 - S P EH1 - R AH0\nHESS  HH EH1 S\nHESSE  HH EH1 S\nHESSE'S  HH EH1 - S IH0 Z\nHESSEL  HH EH1 - S AH0 L\nHESSELTINE  HH EH1 - S IH0 L - T IY0 N\nHESSER  HH EH1 - S ER0\nHESSIAN  HH EH1 - SH AH0 N\nHESSING  HH EH1 - S IH0 NG\nHESSINGER  HH EH1 - S IH0 N - JH ER0\nHESSION  HH EH1 - SH IH0 N\nHESSITE  HH EH1 - S AY0 T\nHESSLER  HH EH1 S - L ER0\nHESSLING  HH EH1 - S AH0 - L IH0 NG\nHESSLING(2)  HH EH1 - S L IH0 NG\nHESSON  HH EH1 - S AH0 N\nHESSTON  HH EH1 - S T AH0 N\nHESSTON'S  HH EH1 - S T AH0 N Z\nHESTAND  HH EH1 - S T AH0 N D\nHESTER  HH EH1 - S T ER0\nHESTHER  HH EH1 S - DH ER0\nHESTIA  HH EH1 - S T IY0 - AH0\nHESTON  HH EH1 - S T AH0 N\nHETEROCERCAL  HH EH2 - T ER0 - OW0 - S ER1 - K AH0 L\nHETERODOX  HH EH2 - T ER0 - AH0 - D AA2 K S\nHETERODOXY  HH EH1 - T ER0 - AH0 - D AA2 K - S IY0\nHETERODYNE  HH EH1 - T ER0 - AH0 - D AY2 N\nHETEROGENEITY  HH EH2 - T ER0 - AH0 - JH IH0 - N IY1 - AH0 - T IY0\nHETEROGENEITY(2)  HH EH2 - T ER0 - AH0 - JH IH0 - N EY1 - AH0 - T IY0\nHETEROGENEOUS  HH EH2 - T ER0 - AH0 - JH IY1 - N Y AH0 S\nHETEROSEXUAL  HH EH2 - T ER0 - OW0 - S EH1 K - SH AH0 - W AH0 L\nHETEROSEXUALITY  HH EH2 - T ER0 - OW0 - S EH0 K - SH AH0 W - AE1 - L IH0 - T IY0\nHETEROSEXUALS  HH EH2 - T ER0 - OW0 - S EH1 K - SH AH0 - W AH0 L Z\nHETEROSIS  HH EH2 - T ER0 - OW1 - S AH0 S\nHETEROSPOROUS  HH EH2 - T ER0 - AA1 - S P ER0 - AH0 S\nHETEROTROPHIC  HH EH2 - T ER0 - AH0 - T R AA1 - F IH0 K\nHETEROZYGOUS  HH EH2 - T ER0 - AH0 - Z AY1 - G AH0 S\nHETH  HH EH1 TH\nHETHERINGTON  HH EH1 - DH ER0 - IH0 NG - T AH0 N\nHETLAND  HH EH1 T - L AH0 N D\nHETMAN  HH EH1 T - M AH0 N\nHETRICK  HH EH1 - T R IH0 K\nHETT  HH EH1 T\nHETTEL  HH EH1 - T AH0 L\nHETTI  HH EH1 - T IY0\nHETTICK  HH EH1 - T IH0 K\nHETTIE  HH EH1 - T IY0\nHETTLER  HH EH1 T - L ER0\nHETTRICK  HH EH1 - T R IH0 K\nHETTY  HH EH1 - T IY0\nHETU  HH IY1 - CH UW0\nHETZ  HH EH1 T S\nHETZEL  HH EH1 T - Z AH0 L\nHETZER  HH EH1 T - Z ER0\nHETZLER  HH EH1 T S - L ER0\nHEUBERGER  HH OY1 - B ER0 - G ER0\nHEUBLEIN  HH Y UW1 - B L AY2 N\nHEUER  HH Y UW1 - ER0\nHEUER'S  HH Y UW1 - ER0 Z\nHEUERMAN  HH OY1 - ER0 - M AH0 N\nHEUERMANN  HH OY1 - ER0 - M AH0 N\nHEUMAN  HH Y UW1 - M AH0 N\nHEUMANN  HH Y UW1 - M AH0 N\nHEUN  HH Y UW1 N\nHEUNG-YEUNG  HH UW1 - NG Y UW1 NG\nHEUPEL  HH OY1 - P AH0 L\nHEURING  HH ER1 - IH0 NG\nHEUSEN  HH Y UW1 - S AH0 N\nHEUSER  HH OY1 - S ER0\nHEUSSER  HH Y UW1 - S ER0\nHEVENER  HH EH1 - V IY0 - N ER0\nHEVERLY  HH EH1 - V ER0 - L IY0\nHEVEY  HH IH0 - V EY1\nHEVIA  HH EY1 - V IY0 - AH0\nHEW  HH Y UW1\nHEWARD  HH Y UW1 - ER0 D\nHEWE  HH Y UW1\nHEWELL  HH EH1 - W EH0 L\nHEWELL(2)  HH Y UW1 - W EH0 L\nHEWER  HH Y UW1 - ER0\nHEWES  HH Y UW1 Z\nHEWETT  HH Y UW1 - IH0 T\nHEWEY  HH Y UW1 - IY0\nHEWING  HH Y UW1 - IH0 NG\nHEWINS  HH Y UW1 - IH0 N Z\nHEWITT  HH Y UW1 - IH0 T\nHEWITT'S  HH Y UW1 - IH0 T S\nHEWLER  HH Y UW1 - L ER0\nHEWLER'S  HH Y UW1 - L ER0 Z\nHEWLETT  HH Y UW1 - L IH0 T\nHEWN  HH Y UW1 N\nHEWS  HH Y UW1 Z\nHEWSON  HH Y UW1 - S AH0 N\nHEXACHLOROPHENE  HH EH2 K - S AH0 - K L AO1 - R AH0 - F IY2 N\nHEXAGON  HH EH1 K - S AH0 - G AA2 N\nHEXAGONAL  HH EH0 K - S AE1 - G AH0 - N AH0 L\nHEXCEL  HH EH1 K - S AH0 L\nHEXT  HH EH1 K S T\nHEY  HH EY1\nHEYBOER  HH EY1 - B OW0 - ER0\nHEYD  HH EY1 D\nHEYDAY  HH EY1 - D EY2\nHEYDE  HH EY1 D\nHEYDEN  HH EY1 - D AH0 N\nHEYDON  HH EY1 - D AH0 N\nHEYDT  HH EY1 D T\nHEYE  HH AY1\nHEYEN  HH AY1 N\nHEYER  HH EY1 - ER0\nHEYING  HH EY1 - IH0 NG\nHEYL  HH EY1 L\nHEYMAN  HH EY1 - M AH0 N\nHEYMAN'S  HH EY1 - M AH0 N Z\nHEYMANN  HH EY1 - M AH0 N\nHEYMANN'S  HH EY1 - M AH0 N Z\nHEYN  HH EY1 N\nHEYNE  HH EY1 N\nHEYS  HH EY1 Z\nHEYSE  HH EY1 S\nHEYSER  HH EY1 - Z ER0\nHEYWARD  HH EY1 - W ER0 D\nHEYWOOD  HH EY1 - W UH2 D\nHEZBOLLAH  HH EH0 Z - B AA1 - L AH0\nHEZBOLLAH'S  HH EH0 Z - B AA1 - L AH0 Z\nHEZBOLLAH'S(2)  HH EH1 Z - B AH0 - L AH0 Z\nHEZBOLLAH(2)  HH EH1 Z - B AH0 - L AH0\nHEZBULLAH  HH EH0 Z - B AA1 - L AH0\nHEZBULLAH(2)  HH EH1 Z - B AH0 - L AH0\nHFDF  EY1 - CH EH1 F - D IY1 - EH1 F\nHGH  EY1 CH - JH IY1 - EY1 CH\nHI  HH AY1\nHI-FI  HH AY1 - F AY1\nHIAA  EY1 - CH AY1 - EY1 - EY1\nHIAASEN  HH AY1 - AA0 - S IH0 N\nHIALEAH  HH AY2 - AH0 - L IY1 - AH0\nHIAM  HH AY1 - AH0 M\nHIATT  HH AY1 - AH0 T\nHIATT'S  HH AY1 - AH0 T S\nHIATUS  HH AY0 - EY1 - T AH0 S\nHIAWATHA  HH AY2 - AH0 - W AA1 - TH AH0\nHIBAAQ  HH AY1 - B AE2 K\nHIBACHI  HH AH0 - B AA1 - CH IY0\nHIBACHI(2)  HH IY0 - B AA1 - CH IY0\nHIBBARD  HH IH1 - B ER0 D\nHIBBEN  HH IH1 - B AH0 N\nHIBBERD  HH IH1 - B ER0 D\nHIBBERT  HH IH1 - B ER0 T\nHIBBETT  HH IH1 - B IH0 T\nHIBBITTS  HH IH1 - B IH0 T S\nHIBBLER  HH IH1 - B L ER0\nHIBBS  HH IH1 B Z\nHIBDON  HH IH1 B - D AH0 N\nHIBERNATE  HH AY1 - B ER0 - N EY2 T\nHIBERNATION  HH AY2 - B ER0 - N EY1 - SH AH0 N\nHIBERNIA  HH AY2 - B ER1 - N IY0 - AH0\nHIBERNIA'S  HH AY2 - B ER1 - N IY0 - AH0 Z\nHIBLER  HH IH1 - B L ER0\nHIBMA  HH IH1 B - M AH0\nHIBNER  HH IH1 B - N ER0\nHIBOR  HH AY1 - B ER0\nHIBSHMAN  HH IH1 B SH - M AH0 N\nHICCUP  HH IH1 - K AH0 P\nHICCUPS  HH IH1 - K AH0 P S\nHICE  HH AY1 S\nHICHENS  HH IH1 - K AH0 N Z\nHICK  HH IH1 K\nHICKAM  HH IH1 - K AH0 M\nHICKCOX  HH IH1 - K AA0 K S\nHICKEL  HH IH1 - K AH0 L\nHICKEN  HH IH1 - K AH0 N\nHICKERSON  HH IH1 - K ER0 - S AH0 N\nHICKEY  HH IH1 - K IY0\nHICKLE  HH IH1 - K AH0 L\nHICKLIN  HH IH1 - K L IH0 N\nHICKLING  HH IH1 - K L IH0 NG\nHICKMAN  HH IH1 K - M AH0 N\nHICKMON  HH IH1 K - M AH0 N\nHICKOK  HH IH1 - K AH0 K\nHICKORIES  HH IH1 - K ER0 - IY0 Z\nHICKORY  HH IH1 - K ER0 - IY0\nHICKORY(2)  HH IH1 - K R IY0\nHICKOX  HH IH1 - K AA0 K S\nHICKS  HH IH1 K S\nHICKSON  HH IH1 K - S AH0 N\nHICKSVILLE  HH IH1 K S - V IH2 L\nHID  HH IH1 D\nHIDALGO  HH AH0 - D AE1 L - G OW2\nHIDDEN  HH IH1 - D AH0 N\nHIDE  HH AY1 D\nHIDEAKI  HH IY2 - D EY0 - AA1 - K IY0\nHIDEAWAY  HH AY1 - D AH0 - W EY2\nHIDEBOUND  HH AY1 D - B AW2 N D\nHIDEO  HH IH0 - D EY1 - OW0\nHIDEOUS  HH IH1 - D IY0 - AH0 S\nHIDEOUSLY  HH IH1 - D IY0 - AH0 S - L IY0\nHIDEOUT  HH AY1 - D AW2 T\nHIDEOUTS  HH AY1 - D AW2 T S\nHIDER  HH AY1 - D ER0\nHIDES  HH AY1 D Z\nHIDING  HH AY1 - D IH0 NG\nHIDY  HH AY1 - D IY0\nHIEB  HH IY1 B\nHIEBER  HH IY1 - B ER0\nHIEBERT  HH IY1 - B ER0 T\nHIEGEL  HH IY1 - G AH0 L\nHIEMS  HH IY1 M Z\nHIEMSTRA  HH IY1 M - S T R AH0\nHIER  HH AY1 - ER0\nHIERARCHICAL  HH AY2 - R AA1 R - K AH0 - K AH0 L\nHIERARCHIES  HH AY1 - R AA2 R - K IY0 Z\nHIERARCHY  HH AY1 - ER0 - AA2 R - K IY0\nHIERARCHY(2)  HH AY1 - R AA2 R - K IY0\nHIERHOLZER  HH AY1 R - HH OW0 L - Z ER0\nHIEROGLYPHIC  HH AY2 - R OW0 - G L IH1 - F IH0 K\nHIEROGLYPHICS  HH AY2 - R OW0 - G L IH1 - F IH0 K S\nHIERS  HH IY1 R Z\nHIESTAND  HH IY1 - S T AH0 N D\nHIESTER  HH AY1 - IH0 - S T ER0\nHIETALA  HH AY1 - T AH0 - L AH0\nHIETPAS  HH AY1 T - P AH0 Z\nHIETT  HH AY1 T\nHIGA  HH IY1 - G AH0\nHIGASHI  HH IY0 - G AA1 - SH IY0\nHIGBEE  HH IH1 G - B IY2\nHIGBIE  HH IH1 G - B IY0\nHIGBY  HH IH1 G - B IY0\nHIGDON  HH IH1 G - D AH0 N\nHIGGASON  HH IH1 - G AH0 - S AH0 N\nHIGGENBOTHAM  HH IH1 - G IH0 N - B AH0 - TH AH0 M\nHIGGENS  HH IH1 - G AH0 N Z\nHIGGERSON  HH IH1 - G ER0 - S AH0 N\nHIGGINBOTHAM  HH IH0 - G IH0 N - B AA1 - TH AH0 M\nHIGGINBOTTOM  HH IH0 - G IH0 N - B AA1 - T AH0 M\nHIGGINS  HH IH1 - G IH0 N Z\nHIGGINSON  HH IH1 - G IH0 N - S AH0 N\nHIGGS  HH IH1 G Z\nHIGH  HH AY1\nHIGH-SPIRITED  HH AY1 - S P IH1 - R IH0 - D IH0 D\nHIGH-SPIRITEDNESS  HH AY1 - S P IH1 - R IH0 - D IH0 D - N AH0 S\nHIGHAM  HH AY1 - AH0 M\nHIGHBERGER  HH AY1 - B ER0 - G ER0\nHIGHBOY  HH AY1 - B OY2\nHIGHBROW  HH AY1 - B R AW2\nHIGHBROWS  HH AY1 - B R AW2 Z\nHIGHER  HH AY1 - ER0\nHIGHEST  HH AY1 - AH0 S T\nHIGHFALUTIN  HH AY2 - F AH0 - L UW1 - T IH0 N\nHIGHFIELD  HH AY1 - F IY2 L D\nHIGHFILL  HH AY1 - F IH2 L\nHIGHFLIER  HH AY1 - F L AY2 - ER0\nHIGHFLIERS  HH AY1 - F L AY2 - ER0 Z\nHIGHFLYING  HH AY1 - F L AY2 - IH0 NG\nHIGHLAND  HH AY1 - L AH0 N D\nHIGHLANDER  HH AY1 - L AE2 N - D ER0\nHIGHLANDERS  HH AY1 - L AE2 N - D ER0 Z\nHIGHLANDS  HH AY1 - L AH0 N D Z\nHIGHLEY  HH AY1 - L IY0\nHIGHLIGHT  HH AY1 - L AY2 T\nHIGHLIGHTED  HH AY1 - L AY2 - T IH0 D\nHIGHLIGHTING  HH AY1 - L AY2 - T IH0 NG\nHIGHLIGHTS  HH AY1 - L AY2 T S\nHIGHLY  HH AY1 - L IY0\nHIGHMAN  HH AY1 - M AH0 N\nHIGHNESS  HH AY1 - N AH0 S\nHIGHOSIN  HH AY1 - OW0 - S IH0 N\nHIGHRISE  HH AY1 - R AY2 Z\nHIGHRISES  HH AY1 - R AY2 - Z IH0 Z\nHIGHS  HH AY1 Z\nHIGHSCHOOL  HH AY1 - S K UW2 L\nHIGHSMITH  HH AY1 - S M IH2 TH\nHIGHSPEED  HH AY1 - S P IY2 D\nHIGHT  HH AY1 T\nHIGHTECH  HH AY1 - T EH2 K\nHIGHTOWER  HH AY1 - T AW2 - ER0\nHIGHTOWER'S  HH AY1 - T AW2 - ER0 Z\nHIGHWAY  HH AY1 - W EY2\nHIGHWAY'S  HH AY1 - W EY2 Z\nHIGHWAYS  HH AY1 - W EY2 Z\nHIGHYIELD  HH AY1 - Y IY1 L D\nHIGINBOTHAM  HH IH1 - G IH0 N - B AH0 - TH AH0 M\nHIGLEY  HH IH1 G - L IY0\nHIGMAN  HH IH1 G - M AH0 N\nHIGNIGHT  HH IH1 G - N AY2 T\nHIGNITE  HH IH1 G - N AY2 T\nHIGUCHI  HH IY0 - G UW1 - CH IY0\nHIGUERA  HH IY0 - G EH1 - R AH0\nHIJACK  HH AY1 - JH AE2 K\nHIJACKED  HH AY1 - JH AE2 K T\nHIJACKER  HH AY1 - JH AE2 - K ER0\nHIJACKERS  HH AY1 - JH AE2 - K ER0 Z\nHIJACKING  HH AY1 - JH AE2 - K IH0 NG\nHIJACKINGS  HH AY1 - JH AE2 - K IH0 NG Z\nHIJINKS  HH IH1 - JH IH0 NG K S\nHIKE  HH AY1 K\nHIKED  HH AY1 K T\nHIKER  HH AY1 - K ER0\nHIKERS  HH AY1 - K ER0 Z\nHIKES  HH AY1 K S\nHIKING  HH AY1 - K IH0 NG\nHILAND  HH IH1 - L AH0 N D\nHILARIA  HH IY0 - L AA1 - R IY0 - AH0\nHILARIO  HH IY0 - L AA1 - R IY0 - OW0\nHILARIOUS  HH IH0 - L EH1 - R IY0 - AH0 S\nHILARIOUSLY  HH IH0 - L EH1 - R IY0 - AH0 S - L IY0\nHILARITY  HH IH0 - L EH1 - R AH0 - T IY0\nHILARY  HH IH1 - L ER0 - IY0\nHILB  HH IH1 L B\nHILBERG  HH IH1 L - B ER0 G\nHILBERT  HH IH1 L - B ER0 T\nHILBORN  HH IH1 L - B ER0 N\nHILBUN  HH IH1 L - B AH0 N\nHILBURN  HH IH1 L - B ER0 N\nHILD  HH IH1 L D\nHILDA  HH IH1 L - D AH0\nHILDE  HH IH1 L D\nHILDEBRAN  HH IH1 L - D IH0 - B R AH0 N\nHILDEBRAND  HH IH1 L - D IH0 - B R AE2 N D\nHILDEBRANDT  HH IH1 L - D IH0 - B R AH0 N T\nHILDEBRANT  HH IH1 L - D IH0 - B R AH0 N T\nHILDEGARD  HH IH1 L - D AH0 - G AA2 R D\nHILDEGARDE  HH IH1 L - D IH0 - G AA2 R D\nHILDEGARDES  HH IH1 L - D AH0 - G AA2 R D Z\nHILDEMAR  HH IH1 L - D IH0 - M ER0\nHILDEN  HH AY1 L - D AH0 N\nHILDENBRAND  HH IH1 L - D IH0 N - B R AH0 N D\nHILDENBRAND(2)  HH IH1 L - D AH0 N - B R AE0 N D\nHILDER  HH IH1 L - D ER0\nHILDERBRAND  HH IH1 L - D ER0 - B R AH0 N D\nHILDERBRANDT  HH IH1 L - D ER0 - B R AH0 N T\nHILDIE  HH AY1 L - D IY0\nHILDITCH  HH IH1 L - D IH0 CH\nHILDRETH  HH IH1 L - D R IH0 TH\nHILDUM  HH IH1 L - D AH0 M\nHILDY  HH IH1 L - D IY0\nHILE  HH AY1 L\nHILEMAN  HH AY1 L - M AH0 N\nHILEMON  HH AY1 L - M AH0 N\nHILEMON'S  HH AY1 L - M AH0 N Z\nHILER  HH AY1 - L ER0\nHILES  HH AY1 L Z\nHILEY  HH IH1 - L IY0\nHILFIGER  HH IH1 L - F AY0 - G ER0\nHILFIGER  HH IH1 L - F IH0 - G ER0\nHILFIKER  HH IH1 L - F IH0 - K ER0\nHILGART  HH IH1 L - G AA2 R T\nHILGEMAN  HH IH1 L G - M AH0 N\nHILGENBERG  HH IH1 L - G AH0 N - B ER0 G\nHILGENDORF  HH IH1 L - G IH0 N - D AO0 R F\nHILGER  HH IH1 L - G ER0\nHILGERS  HH IH1 L - G ER0 Z\nHILGERT  HH IH1 L - G ER0 T\nHILINSKI  HH IH0 - L IH1 N - S K IY0\nHILKE  HH IH1 L - K AH0\nHILKER  HH IH1 L - K ER0\nHILL  HH IH1 L\nHILL'S  HH IH1 L Z\nHILLA  HH IH1 - L AH0\nHILLARD  HH IH1 - L ER0 D\nHILLARD'S  HH IH1 - L ER0 D Z\nHILLARY  HH IH1 - L ER0 - IY0\nHILLARY'S  HH IH1 - L ER0 - IY0 Z\nHILLAS  HH IH1 - L AH0 S\nHILLBILLIES  HH IH1 L - B IH2 - L IY0 Z\nHILLBILLY  HH IH1 L - B IH0 - L IY0\nHILLCREST  HH IH1 L - K R EH0 S T\nHILLE  HH IH1 L\nHILLEARY  HH IH1 - L ER0 - IY0\nHILLEBRAND  HH IH1 - L IH0 - B R AH0 N D\nHILLEGAS  HH IH1 - L IH0 - G AH0 Z\nHILLEGASS  HH IH1 - L IH0 - G AH0 S\nHILLEL  HH IH2 - L EH1 L\nHILLEN  HH IH1 - L AH0 N\nHILLENBRAND  HH IH1 - L AH0 N - B R AE2 N D\nHILLENBRAND'S  HH IH1 - L AH0 N - B R AE2 N D Z\nHILLENBURG  HH IH1 - L AH0 N - B ER0 G\nHILLER  HH IH1 - L ER0\nHILLERMAN  HH IH1 - L ER0 - M AH0 N\nHILLERY  HH IH1 - L ER0 - IY0\nHILLESHEIM  HH IH1 - L IH0 S - HH AY0 M\nHILLESTAD  HH IH1 - L IH0 - S T AH0 D\nHILLEY  HH IH1 - L IY0\nHILLHAVEN  HH IH1 L - HH EY2 - V AH0 N\nHILLHAVEN'S  HH IH1 L - HH EY2 - V AH0 N Z\nHILLHOUSE  HH IH1 L - HH AW2 S\nHILLIARD  HH IH1 L - Y AA0 R D\nHILLIER  HH IH1 - L IY0 - ER0\nHILLIGOSS  HH IH1 - L IH0 - G AA0 S\nHILLIKER  HH IH1 - L AY0 - K ER0\nHILLIKER(2)  HH IH1 - L IH0 - K ER0\nHILLIN  HH IH1 - L IH0 N\nHILLING  HH IH1 - L IH0 NG\nHILLIS  HH IH1 - L IH0 S\nHILLMAN  HH IH1 L - M AE2 N\nHILLMANN  HH IH1 L - M AH0 N\nHILLMER  HH IH1 L - M ER0\nHILLOCK  HH IH1 - L AH0 K\nHILLS  HH IH1 L Z\nHILLS'  HH IH1 L Z\nHILLSBORO  HH IH1 L Z - B ER0 - OW0\nHILLSBOROUGH  HH IH1 L Z - B ER0 - OW0\nHILLSDALE  HH IH1 L Z - D EY2 L\nHILLSDOWN  HH IH1 L Z - D AW2 N\nHILLSIDE  HH IH1 L - S AY2 D\nHILLSIDES  HH IH1 L - S AY2 D Z\nHILLSMAN  HH IH1 L S - M AH0 N\nHILLSON  HH IH1 L - S AH0 N\nHILLSTROM  HH IH1 L - S T R AH0 M\nHILLTOP  HH IH1 L - T AA2 P\nHILLTOPS  HH IH1 L - T AA2 P S\nHILLY  HH IH1 - L IY0\nHILLYARD  HH IH1 L - Y AA2 R D\nHILLYER  HH IH1 - L IY0 - ER0\nHILMA  HH IH1 L - M AH0\nHILMER  HH IH1 L - M ER0\nHILMES  HH IH1 L M Z\nHILO  HH IY1 - L OW0\nHILPERT  HH IH1 L - P ER0 T\nHILSABECK  HH IH1 L - S AH0 - B EH2 K\nHILSCHER  HH IH1 L - SH ER0\nHILSINGER  HH IH1 L - S IH0 - NG ER0\nHILSMAN  HH IH1 L Z - M AH0 N\nHILSON  HH IH1 L - S AH0 N\nHILT  HH IH1 L T\nHILTNER  HH IH1 L T - N ER0\nHILTON  HH IH1 L - T AH0 N\nHILTON'S  HH IH1 L - T AH0 N Z\nHILTS  HH IH1 L T S\nHILTUNEN  HH IH1 L - T AH0 - N AH0 N\nHILTY  HH IH1 L - T IY0\nHILTZ  HH IH1 L T S\nHILYARD  HH AH0 L - Y AA1 R D\nHILYER  HH IH1 - L IY0 - ER0\nHIM  HH IH1 M\nHIM(2)  IH0 M\nHIMALAYA  HH IH2 - M AH0 - L AY1 - AH0\nHIMALAYA(2)  HH IH2 - M AH0 - L EY1 - AH0\nHIMALAYAN  HH IH2 - M AH0 - L EY1 - AH0 N\nHIMALAYAN(2)  HH IH2 - M AH0 - L AY1 - AH0 N\nHIMALAYAS  HH IH2 - M AH0 - L AY1 - AH0 S\nHIMALAYAS(2)  HH IH2 - M AH0 - L EY1 - AH0 S\nHIME  HH AY1 M\nHIMEBAUGH  HH IH1 - M IH0 - B AO0\nHIMEL  HH IH1 - M AH0 L\nHIMES  HH AY1 M Z\nHIMMEL  HH IH1 - M AH0 L\nHIMMELBERGER  HH IH1 - M AH0 L - B ER0 - G ER0\nHIMMELFARB  HH IH1 - M AH0 L - F AA2 R B\nHIMMELSBACH  HH IH1 - M IH0 L S - B AA0 K\nHIMMELSTEIN  HH IH1 - M AH0 L - S T AY0 N\nHIMMELSTEIN(2)  HH IH1 - M AH0 L - S T IY0 N\nHIMMLER  HH IH1 M - L ER0\nHIMONT  HH IH1 - M AH0 N T\nHIMONT(2)  HH AY1 - M AH0 N T\nHIMSELF  HH IH0 M - S EH1 L F\nHINCH  HH IH1 N CH\nHINCHCLIFF  HH IH1 N CH - K L IH0 F\nHINCHCLIFFE  HH IH1 N CH - K L IH0 F\nHINCHEY  HH IH1 N - CH IY0\nHINCHLIFFE  HH IH1 N - K L IH0 F\nHINCHMAN  HH IH1 NG K - M AH0 N\nHINCK  HH IH1 NG K\nHINCKLEY  HH IH1 NG - K L IY0\nHIND  HH AY1 N D\nHINDE  HH IH1 N D\nHINDELONG  HH IH1 N - D AH0 - L AO0 NG\nHINDER  HH IH1 N - D ER0\nHINDERED  HH IH1 N - D ER0 D\nHINDERER  HH IH1 N - D ER0 - ER0\nHINDERING  HH IH1 N - D ER0 - IH0 NG\nHINDERLITER  HH IH1 N - D ER0 - L IY0 - T ER0\nHINDERMAN  HH AY1 N - D ER0 - M AH0 N\nHINDERS  HH IH1 N - D ER0 Z\nHINDES  HH IH1 N D Z\nHINDI  HH IH1 N - D IY0\nHINDLE  HH IH1 N - D AH0 L\nHINDLEY  HH IH1 N D - L IY0\nHINDMAN  HH AY1 N D - M AH0 N\nHINDQUARTER  HH AY1 N D - K W AO2 R - T ER0\nHINDQUARTER(2)  HH AY1 N D - K AO2 R - T ER0\nHINDQUARTERS  HH AY1 N D - K W AO2 R - T ER0 Z\nHINDQUARTERS(2)  HH AY1 N D - K AO2 R - T ER0 Z\nHINDRANCE  HH IH1 N - D R AH0 N S\nHINDRANCES  HH IH1 N - D R AH0 N - S IH0 Z\nHINDS  HH AY1 N D Z\nHINDSIGHT  HH AY1 N D - S AY2 T\nHINDSIGHT'S  HH AY1 N D - S AY2 T S\nHINDSIGHT'S(2)  HH AY1 N - S AY2 T S\nHINDSIGHT(2)  HH AY1 N - S AY2 T\nHINDU  HH IH1 N - D UW2\nHINDUISM  HH IH1 N - JH UW0 - IH2 - Z AH0 M\nHINDUS  HH IH1 N - D UW2 Z\nHINDUSTAN  HH IH1 N - D UW0 - S T AE2 N\nHINE  HH AY1 N\nHINEBAUGH  HH IH1 - N IH0 - B AO0\nHINELINE  HH IH1 - N IH0 - L AY2 N\nHINELY  HH AY1 N - L IY0\nHINEMAN  HH AY1 N - M AH0 N\nHINER  HH AY1 - N ER0\nHINERMAN  HH AY1 - N ER0 - M AH0 N\nHINES  HH AY1 N Z\nHINESLEY  HH IH1 - N IH0 S - L IY0\nHINESLEY(2)  HH AY1 N Z - L IY0\nHINEY  HH IH1 - N IY0\nHING  HH IH1 NG\nHINGE  HH IH1 N JH\nHINGED  HH IH1 N JH D\nHINGER  HH IH1 N - JH ER0\nHINGES  HH IH1 N - JH IH0 Z\nHINGHAM  HH IH1 - NG AH0 M\nHINGLE  HH IH1 NG - G AH0 L\nHINGST  HH IH1 NG S T\nHINGSTON  HH IH1 NG - S T AH0 N\nHINK  HH IH1 NG K\nHINKEL  HH IH1 NG - K AH0 L\nHINKELMAN  HH IH1 NG - K AH0 L - M AH0 N\nHINKLE  HH IH1 NG - K AH0 L\nHINKLEY  HH IH1 NG - K L IY0\nHINKSON  HH IH1 NG K - S AH0 N\nHINMAN  HH IH1 N - M AH0 N\nHINMEN  HH IH1 N - M EH0 N\nHINN  HH IH1 N\nHINNANT  HH IH1 - N AH0 N T\nHINNENKAMP  HH IH1 - N IH0 N - K AE0 M P\nHINNERS  HH IH1 - N ER0 Z\nHINNY  HH IH1 - N IY0\nHINO  HH IY1 - N OW0\nHINOJOS  HH IY0 - N OW1 - Y OW0 Z\nHINOJOSA  HH IY0 - N OW0 - JH OW1 - S AH0\nHINOTE  HH IH0 - N OW1 T\nHINRICHS  HH IH1 - N R IH0 K S\nHINRICHSEN  HH IH1 - N R IH0 K - S AH0 N\nHINSCH  HH IH1 N SH\nHINSDALE  HH IH1 N S - D EY2 L\nHINSHAW  HH IH1 N - SH AO2\nHINSLEY  HH IH1 N S - L IY0\nHINSON  HH IH1 N - S AH0 N\nHINT  HH IH1 N T\nHINTED  HH IH1 N - T AH0 D\nHINTED(2)  HH IH1 N - T IH0 D\nHINTED(3)  HH IH1 - N IH0 D\nHINTERLAND  HH IH1 N - T ER0 - L AE2 N D\nHINTERLANDS  HH IH1 N - T ER0 - L AE2 N D Z\nHINTING  HH IH1 N - T IH0 NG\nHINTON  HH IH1 N - T AH0 N\nHINTS  HH IH1 N T S\nHINTZ  HH IH1 N T S\nHINTZE  HH IH1 N T Z\nHINZ  HH IH1 N Z\nHINZACK  HH IH1 N - Z AE0 K\nHINZE  HH IH1 N Z\nHINZMAN  HH IH1 N Z - M AH0 N\nHIOTT  HH AY1 - AH0 T\nHIP  HH IH1 P\nHIP-POCKET  HH IH1 P - P AA1 - K AH0 T\nHIPBONE  HH IH1 P - B OW1 N\nHIPBONES  HH IH1 P - B OW1 N Z\nHIPKINS  HH IH1 P - K IH0 N Z\nHIPOLITO  IY1 - P OW0 - L IY1 - T OW0\nHIPP  HH IH1 P\nHIPPE  HH IH1 P\nHIPPEN  HH IH1 - P AH0 N\nHIPPENSTEEL  HH IH1 - P IH0 N - S T IY0 L\nHIPPER  HH IH1 - P ER0\nHIPPERT  HH IH1 - P ER0 T\nHIPPEST  HH IH1 - P AH0 S T\nHIPPIE  HH IH1 - P IY0\nHIPPIES  HH IH1 - P IY0 Z\nHIPPLE  HH IH1 - P AH0 L\nHIPPLER  HH IH1 P - L ER0\nHIPPO  HH IH1 - P OW0\nHIPPOCRATES  HH IH1 - P AH0 - K R EY2 T S\nHIPPOCRATES(2)  HH IH0 - P AO1 - K R AH0 - T IY0 Z\nHIPPOCRATIC  HH IH0 - P AH0 - K R AE1 - T IH0 K\nHIPPODROME  HH IH1 - P AH0 - D R OW2 M\nHIPPOLYTUS  HH AH0 - P AA1 - L AH0 - T AH0 S\nHIPPOPOTAMUS  HH IH2 - P AH0 - P AA1 - T AH0 - M AH0 S\nHIPPOPOTAMUSES  HH IH2 - P AH0 - P AA1 - T AH0 - M AH0 - S IH0 Z\nHIPPOS  HH IH1 - P OW0 Z\nHIPPS  HH IH1 P S\nHIPS  HH IH1 P S\nHIPSHER  HH IH1 P - SH ER0\nHIPSKIND  HH IH1 P - S K IH0 N D\nHIPWELL  HH IH1 P - W EH2 L\nHIRABAYASHI  HH IH0 - R AH0 - B AY0 - AA1 - SH IY0\nHIRADIN  HH IH0 - R AA1 - D IH0 N\nHIRAI  HH IH0 - R AA1 - IY0\nHIRAM  HH AY1 - R AH0 M\nHIRANO  HH IH0 - R AA1 - N OW0\nHIRATA  HH IH0 - R AA1 - T AH0\nHIRAYAMA  HH IH0 - R AA0 - Y AA1 - M AH0\nHIRD  HH ER1 D\nHIRE  HH AY1 - ER0\nHIRE(2)  HH AY1 R\nHIRED  HH AY1 - ER0 D\nHIRES  HH AY1 - ER0 Z\nHIRES(2)  HH AY1 R Z\nHIRIART  HH IH1 - R IY0 - AA0 R T\nHIRING  HH AY1 - R IH0 NG\nHIRINGS  HH AY1 - R IH0 NG Z\nHIRN  HH ER1 N\nHIRO  HH IH1 - R OW0\nHIROAKI  HH IH2 - R OW0 - AA1 - K IY0\nHIROHITO  HH IH2 - R OW0 - HH IY1 - T OW2\nHIROHITO'S  HH IH2 - R OW0 - HH IY1 - T OW2 Z\nHIROHITO'S(2)  HH IH2 - R AH0 - HH IY1 - T OW2 Z\nHIROHITO(2)  HH IH2 - R AH0 - HH IY1 - T OW2\nHIROMASA  HH IH2 - R OW0 - M AA1 - S AH0\nHIRONS  HH AO1 - R AH0 N Z\nHIROSAKAMOKI  HH IH2 - R AH0 - S AE0 - K AH0 - M OW1 - K IY0\nHIROSAKIMA  HH IH2 - R AH0 - S AH0 - K IY1 - M AH0\nHIROSE  HH IH0 - R OW1 - S EY0\nHIROSHI  HH IH0 - R OW1 - SH IY0\nHIROSHIMA  HH IH2 - R OW0 - SH IY1 - M AH0\nHIROSHIMA(2)  HH IH2 - R OW1 - SH IH0 - M AH0\nHIROTA  HH IH0 - R OW1 - T AH0\nHIROYUKI  HH IH2 - R OW0 - Y UW1 - K IY0\nHIRSCH  HH ER1 SH\nHIRSCH'S  HH ER1 - SH IH0 Z\nHIRSCHBERG  HH ER1 SH - B ER0 G\nHIRSCHFELD  HH ER1 SH - F EH0 L D\nHIRSCHFIELD  HH ER1 S K - F IY0 L D\nHIRSCHHORN  HH ER1 SH - HH ER0 N\nHIRSCHI  HH IH1 R S - K IY0\nHIRSCHMAN  HH ER1 SH - M AH0 N\nHIRSCHMANN  HH ER1 SH - M AH0 N\nHIRSCHY  HH ER1 - SH IY0\nHIRSH  HH ER1 SH\nHIRSHBERG  HH ER1 SH - B ER0 G\nHIRSHFIELD  HH ER1 SH - F IY0 L D\nHIRSHHORN  HH ER1 SH - HH AO2 R N\nHIRSHHORN(2)  HH ER1 - SH AO2 R N\nHIRSHMAN  HH ER1 SH - M AH0 N\nHIRST  HH ER1 S T\nHIRT  HH ER1 T\nHIRTH  HH ER1 TH\nHIRTLE  HH ER1 - T AH0 L\nHIRTZ  HH ER1 T S\nHIRULOG  HH IH1 - R UW2 - L AA2 G\nHIRZEL  HH ER1 - Z AH0 L\nHIS  HH IH1 Z\nHIS(2)  HH IH0 Z\nHISADA  HH IH0 - S AA1 - D AH0\nHISAO  HH IH0 - S AA1 - OW0\nHISAW  HH AY1 - S AO0\nHISCOCK  HH IH1 - S K AH0 K\nHISCOX  HH IH1 S - K AA0 K S\nHISE  HH AY1 Z\nHISEL  HH IH1 - S AH0 L\nHISER  HH AY1 - Z ER0\nHISEY  HH IH1 - S IY0\nHISHAM  HH IH1 - SH AH0 M\nHISLE  HH AY1 - AH0 L\nHISLOP  HH IH1 S - L AH0 P\nHISPANIC  HH IH0 - S P AE1 - N IH0 K\nHISPANICS  HH IH0 - S P AE1 - N IH0 K S\nHISPANO  HH IH0 - S P AA1 - N OW0\nHISPANOIL  HH IH1 - S P AH0 - N OY2 L\nHISS  HH IH1 S\nHISS'S  HH IH1 - S IH0 Z\nHISSED  HH IH1 S T\nHISSELF  HH IH2 - S EH1 L F\nHISSES  HH IH1 - S IH0 Z\nHISSING  HH IH1 - S IH0 NG\nHISSONG  HH IH1 - S AO2 NG\nHISTADRUT  HH IH1 - S T AH0 - D R AH0 T\nHISTAMINE  HH IH1 - S T AH0 - M IY2 N\nHISTIDINE  HH IH1 - S T AH0 - D IY2 N\nHISTOGRAM  HH IH1 - S T AH0 - G R AE2 M\nHISTOGRAMS  HH IH1 - S T AH0 - G R AE2 M Z\nHISTOLOGY  HH IH0 - S T AA1 - L AH0 - JH IY0\nHISTORIAN  HH IH0 - S T AO1 - R IY0 - AH0 N\nHISTORIANS  HH IH0 - S T AO1 - R IY0 - AH0 N Z\nHISTORIC  HH IH0 - S T AO1 - R IH0 K\nHISTORICAL  HH IH0 - S T AO1 - R IH0 - K AH0 L\nHISTORICALLY  HH IH0 - S T AO1 - R IH0 - K AH0 - L IY0\nHISTORICALLY(2)  HH IH0 - S T AO1 - R IH0 K - L IY0\nHISTORIES  HH IH1 - S T ER0 - IY0 Z\nHISTORIES(2)  HH IH1 S - T R IY0 Z\nHISTORIOGRAPHY  HH IH0 - S T AO2 - R IY0 - AA1 - G R AH0 - F IY0\nHISTORY  HH IH1 - S T ER0 - IY0\nHISTORY'S  HH IH1 - S T ER0 - IY0 Z\nHISTORY'S(2)  HH IH1 S - T R IY0 Z\nHISTORY(2)  HH IH1 S - T R IY0\nHISTRIONIC  HH IH2 S - T R IY0 - AA1 - N IH0 K\nHISTRIONICS  HH IH2 S - T R IY0 - AA1 - N IH0 K S\nHIT  HH IH1 T\nHITACHI  HH IH0 - T AA1 - CH IY0\nHITCH  HH IH1 CH\nHITCHCOCK  HH IH1 CH - K AA2 K\nHITCHCOCK'S  HH IH1 CH - K AA2 K S\nHITCHED  HH IH1 CH T\nHITCHENS  HH IH1 - CH AH0 N Z\nHITCHES  HH IH1 - CH IH0 Z\nHITCHHIKE  HH IH1 CH - HH AY2 K\nHITCHHIKING  HH IH1 CH - HH AY2 - K IH0 NG\nHITCHING  HH IH1 - CH IH0 NG\nHITCHINGS  HH IH1 - CH IH0 NG Z\nHITCHINS  HH IH1 - CH IH0 N Z\nHITCHMAN  HH IH1 CH - M AH0 N\nHITCHNER  HH IH1 CH - N ER0\nHITE  HH AY1 T\nHITES  HH AY1 T S\nHITHER  HH IH1 - DH ER0\nHITHERTO  HH IH1 - DH ER2 - T UW1\nHITLER  HH IH1 T - L ER0\nHITLER'S  HH IH1 T - L ER0 Z\nHITMAN  HH IH1 T - M AE2 N\nHITOSHI  HH IH0 - T OW1 - SH IY0\nHITS  HH IH1 T S\nHITSCHLER  HH IH1 T S - L ER0\nHITSCHLER(2)  HH IH1 CH - L ER0\nHITSMAN  HH IH1 T S - M AH0 N\nHITSON  HH IH1 T - S AH0 N\nHITT  HH IH1 T\nHITTER  HH IH1 - T ER0\nHITTERS  HH IH1 - T ER0 Z\nHITTING  HH IH1 - T IH0 NG\nHITTITE  HH IH1 - T AY0 T\nHITTITE(2)  HH IH1 - T AY2 T\nHITTLE  HH IH1 - T AH0 L\nHITTNER  HH IH1 T - N ER0\nHITTY  HH IH1 - T IY0\nHITZ  HH IH1 T S\nHITZEMAN  HH IH1 T S - M AH0 N\nHIVE  HH AY1 V\nHIVELY  HH AY1 V - L IY0\nHIVES  HH AY1 V Z\nHIWAY  HH AY1 - W EY2\nHIX  HH IH1 K S\nHIXENBAUGH  HH IH0 G - Z EH1 N - B AO0\nHIXON  HH IH1 K - S AH0 N\nHIXSON  HH IH1 K - S AH0 N\nHIZBOLLAH  HH IH0 Z - B OW1 - L AH0\nHIZER  HH AY1 - Z ER0\nHJELM  HH AH0 - JH EH1 L M\nHJELM(2)  JH EH1 L M\nHJERPE  HH AH0 - JH ER1 P\nHJERPE(2)  JH ER1 P\nHJORT  HH AH0 - JH AO1 R T\nHJORT(2)  JH AO1 R T\nHLAD  HH L AE1 D\nHLAD(2)  HH AH0 - L AE1 D\nHLADIK  HH L AE1 - D IH0 K\nHLADIK(2)  HH AH0 - L AE1 - D IH0 K\nHLADKY  HH L AE1 D - K IY0\nHLADKY(2)  HH AH0 - L AE1 D - K IY0\nHLAVAC  HH L AA1 - V AH0 K\nHLAVAC(2)  HH AH0 - L AA1 - V AH0 K\nHLAVACEK  HH L AA1 - V AH0 - CH EH0 K\nHLAVACEK(2)  HH AH0 - L AA1 - V AH0 - CH EH0 K\nHLAVATY  HH L AH0 - V AA1 - T IY0\nHLAVATY(2)  HH AH0 - L AH0 - V AA1 - T IY0\nHMMM  HH M\nHMMM(2)  HH AH1 M\nHMONG  M AO1 NG\nHMONG(2)  HH M AO1 NG\nHMONG(3)  HH AH0 - M AO1 NG\nHNAT  HH N AE1 T\nHNAT(2)  HH AH0 - N AE1 T\nHNAT(3)  EY1 CH - N AE1 T\nHNAT(4)  EY1 - CH EH1 - N EY1 - T IY1\nHO  HH OW1\nHO'S  HH OW1 Z\nHOADLEY  HH OW1 D - L IY0\nHOAG  HH OW1 G\nHOAGIE  HH OW1 - G IY0\nHOAGLAND  HH OW1 G - L AH0 N D\nHOAGLIN  HH OW1 - G L IH0 N\nHOAGLUND  HH OW1 G - L AH0 N D\nHOAGY  HH OW1 - G IY0\nHOAK  HH OW1 K\nHOANG  HH OW1 NG\nHOAR  HH AO1 R\nHOARD  HH AO1 R D\nHOARDED  HH AO1 R - D IH0 D\nHOARDING  HH AO1 R - D IH0 NG\nHOARDS  HH AO1 R D Z\nHOARE  HH AO1 R\nHOARSE  HH AO1 R S\nHOARSENESS  HH AO1 R S - N AH0 S\nHOARY  HH AO1 - R IY0\nHOAX  HH OW1 K S\nHOAXES  HH OW1 K - S IH0 Z\nHOB  HH AA1 B\nHOBACK  HH OW1 - B AE2 K\nHOBAN  HH OW1 - B AH0 N\nHOBART  HH OW1 - B AA2 R T\nHOBAUGH  HH AA1 - B AO0\nHOBBES  HH AA1 - B IY0 Z\nHOBBES(2)  HH AA1 B Z\nHOBBIE  HH AA1 - B IY0\nHOBBIES  HH AA1 - B IY0 Z\nHOBBING  HH AA1 - B IH0 NG\nHOBBINS  HH AA1 - B IH0 N Z\nHOBBLE  HH AA1 - B AH0 L\nHOBBLED  HH AA1 - B AH0 L D\nHOBBLES  HH AA1 - B AH0 L Z\nHOBBLING  HH AA1 - B AH0 L - IH0 NG\nHOBBLING(2)  HH AA1 - B L IH0 NG\nHOBBS  HH AA1 B Z\nHOBBY  HH AA1 - B IY0\nHOBBYIST  HH AA1 - B IY0 - IH0 S T\nHOBBYISTS  HH AA1 - B IY0 - IH0 S T S\nHOBBYISTS(2)  HH AA1 - B IY0 - IH0 S S\nHOBBYISTS(3)  HH AA1 - B IY0 - IH0 S\nHOBDAY  HH AA1 B - D EY2\nHOBDY  HH AA1 B - D IY0\nHOBEN  HH AA1 - B AH0 N\nHOBERG  HH OW1 - B ER0 G\nHOBERMAN  HH OW1 - B ER0 - M AH0 N\nHOBERT  HH AA1 - B ER0 T\nHOBGOOD  HH AA1 B - G UH2 D\nHOBIN  HH OW1 - B IH0 N\nHOBLIT  HH AA1 - B L IH0 T\nHOBNAIL  HH AA1 B - N EY2 L\nHOBNOB  HH AA1 B - N AA2 B\nHOBNOBBING  HH AA1 B - N AA2 - B IH0 NG\nHOBO  HH OW1 - B OW0\nHOBOES  HH OW1 - B OW0 Z\nHOBOKEN  HH OW1 - B OW0 - K AH0 N\nHOBS  HH AA1 B Z\nHOBSBAWM  HH AA0 B - S B AO1 M\nHOBSON  HH AA1 B - S AH0 N\nHOBSON'S  HH AA1 B - S AH0 N Z\nHOC  HH AA1 K\nHOCEVAR  HH OW0 - S EY0 - V AA1 R\nHOCH  HH AA1 K\nHOCHBERG  HH AA1 K - B ER0 G\nHOCHBRUECKNER  HH AA1 K - B R AH2 K - N ER0\nHOCHHALTER  HH AA1 K - HH AH0 L - T ER0\nHOCHHAUSER  HH AA1 K - HH AW2 - Z ER0\nHOCHMAN  HH AA1 K - M AH0 N\nHOCHMUTH  HH AA1 K - M UW2 TH\nHOCHSTATTER  HH AA1 K - S T AH0 - T ER0\nHOCHSTEDLER  HH AA1 K - S T IH0 - D AH0 L - ER0\nHOCHSTEDLER(2)  HH AA1 K - S T EH0 D - L ER0\nHOCHSTEIN  HH AA1 K - S T AY0 N\nHOCHSTEIN(2)  HH AA1 K - S T IY0 N\nHOCHSTETLER  HH AA1 K - S T IH0 - T AH0 L - ER0\nHOCHSTETLER(2)  HH AA1 K - S T EH0 T - L ER0\nHOCHTIEF  HH AA1 K - T IY2 F\nHOCK  HH AA1 K\nHOCKADAY  HH AA1 - K AH0 - D EY2\nHOCKBERG  HH AA1 K - B ER0 G\nHOCKENBERRY  HH AA1 - K AH0 N - B EH2 - R IY0\nHOCKENBURY  HH AA1 - K AH0 N - B EH2 - R IY0\nHOCKENSMITH  HH AA1 - K AH0 N - S M IH2 TH\nHOCKER  HH AA1 - K ER0\nHOCKERSMITH  HH AA1 - K ER0 - S M IH2 TH\nHOCKETT  HH AA1 - K IH0 T\nHOCKEY  HH AA1 - K IY0\nHOCKEY'S  HH AA1 - K IY0 Z\nHOCKIN  HH AA1 - K IH0 N\nHOCKING  HH AA1 - K IH0 NG\nHOCKLEY  HH AA1 K - L IY0\nHOCKMAN  HH AA1 K - M AH0 N\nHOCKNEY  HH AA1 K - N IY0\nHOCKNEY'S  HH AA1 K - N IY0 Z\nHOCTOR  HH AA1 K - T ER0\nHOCUS  HH OW1 - K AH0 S\nHOCUTT  HH AA1 - K AH0 T\nHODAK  HH OW1 - D AH0 K\nHODAPP  HH AA1 - D AH0 P\nHODDE  HH AA1 D\nHODDER  HH AA1 - D ER0\nHODDING  HH AA1 - D IH0 NG\nHODDUR  HH AA1 - D ER0\nHODEL  HH OW1 - D AH0 L\nHODES  HH OW1 D Z\nHODGDON  HH AA1 JH - D AH0 N\nHODGE  HH AA1 JH\nHODGE'S  HH AA1 - JH IH0 Z\nHODGEN  HH AA1 - JH AH0 N\nHODGENS  HH AA1 - JH AH0 N Z\nHODGEPODGE  HH AA1 JH - P AA2 JH\nHODGES  HH AA1 - JH IH0 Z\nHODGIN  HH AA1 - JH IH0 N\nHODGINS  HH AA1 - JH IH0 N Z\nHODGKIN  HH AA1 JH - K IH0 N\nHODGKIN'S  HH AA1 JH - K IH0 N Z\nHODGKINS  HH AA1 JH - K IH0 N Z\nHODGKINSON  HH AA1 JH - K IH0 N - S AH0 N\nHODGKISS  HH AA1 JH - K IH0 S\nHODGMAN  HH AA1 JH - M AH0 N\nHODGMAN'S  HH AA1 JH - M AH0 N Z\nHODGSON  HH AA1 JH - S AH0 N\nHODKINSON  HH AA1 D - K IH0 N - S AH0 N\nHODNETT  HH AA1 D - N IH0 T\nHODO  HH OW1 - D OW0\nHODSDON  HH AA1 D Z - D AH0 N\nHODSON  HH AA1 D - S AH0 N\nHOE  HH OW1\nHOECHST  HH OW1 K S T\nHOECHST'S  HH OW1 K S T S\nHOECHST'S(2)  HH OW1 SH T S\nHOECHST(2)  HH OW1 SH T\nHOECK  HH OW1 K\nHOECKER  HH OW1 - K ER0\nHOEDOWN  HH OW1 - D AW2 N\nHOEFER  HH OW1 - F ER0\nHOEFFNER  HH OW1 F - N ER0\nHOEFLE  HH OW1 - F AH0 L\nHOEFLER  HH OW1 - F AH0 - L ER0\nHOEFLER(2)  HH OW1 F - L ER0\nHOEFLICH  HH OW1 - F L IH0 K\nHOEFLING  HH OW1 - F AH0 L - IH0 NG\nHOEFLING(2)  HH OW1 - F L IH0 NG\nHOEFS  HH OW1 F S\nHOEFT  HH OW1 F T\nHOEG  HH OW1 G\nHOEGER  HH OW1 - G ER0\nHOEHN  HH OW1 N\nHOEHNE  HH OW1 N\nHOEING  HH OW1 - IH0 NG\nHOEK  HH OW1 K\nHOEKSEMA  HH OW1 K - S IH0 - M AH0\nHOEKSTRA  HH OW1 K - S T R AH0\nHOEL  HH OW1 L\nHOELL  HH OW1 L\nHOELLE  HH OW1 L\nHOELSCHER  HH OW1 L - SH ER0\nHOELTERHOFF  HH OW1 L - T ER0 - HH AO2 F\nHOELTERHOFF'S  HH OW1 L - T ER0 - HH AO2 F S\nHOELTING  HH OW1 L - T IH0 NG\nHOELZEL  HH OW1 L - Z AH0 L\nHOELZER  HH OW1 L - Z ER0\nHOEN  HH OW1 N\nHOENE  HH AA1 - IY0 N\nHOENER  HH OW1 - N ER0\nHOENIG  HH OW1 - N IH0 G\nHOEPER  HH OW1 - P ER0\nHOEPFNER  HH OW1 P F - N ER0\nHOEPFNER(2)  HH OW1 P - N ER0\nHOEPNER  HH OW1 P - N ER0\nHOEPPNER  HH OW1 P - N ER0\nHOERIG  HH AO1 - R IH0 G\nHOERNER  HH AO1 R - N ER0\nHOERR  HH AO1 R\nHOES  HH OW1 Z\nHOESCH  HH OW1 SH\nHOESCHEN  HH OW1 - SH AH0 N\nHOESLY  HH OW1 S - L IY0\nHOEVELER  HH OW1 V - L ER0\nHOEVET  HH OW1 - V EH2 T\nHOEVET'S  HH OW1 - V EH2 T S\nHOEY  HH OW1 - IY0\nHOF  HH AA1 F\nHOFACKER  HH AA1 - F AH0 - K ER0\nHOFBAUER  HH AA1 F - B AW0 - ER0\nHOFER  HH OW1 - F ER0\nHOFF  HH AO1 F\nHOFFA  HH AO1 - F AH0\nHOFFA'S  HH AO1 - F AH0 Z\nHOFFACKER  HH AO1 - F AH0 - K ER0\nHOFFART  HH AO1 - F AA0 R T\nHOFFARTH  HH AO1 - F AA0 R TH\nHOFFECKER  HH AO1 - F IH0 - K ER0\nHOFFENBERG  HH AO1 - F AH0 N - B ER0 G\nHOFFENBERG'S  HH AA1 - F AH0 N - B ER0 G Z\nHOFFER  HH AA1 - F ER0\nHOFFERBER  HH AO1 - F ER0 - B ER0\nHOFFERT  HH AO1 - F ER0 T\nHOFFITZ  HH AA1 - F IH0 T S\nHOFFLER  HH AO1 - F AH0 - L ER0\nHOFFLER(2)  HH AO1 F - L ER0\nHOFFMAN  HH AO1 F - M AH0 N\nHOFFMAN'S  HH AO1 F - M AH0 N Z\nHOFFMANN  HH AO1 F - M AH0 N\nHOFFMASTER  HH AO1 F - M AE2 - S T ER0\nHOFFMEIER  HH AO1 F - M AY0 - ER0\nHOFFMEISTER  HH AO1 F - M AY2 - S T ER0\nHOFFMEYER  HH AO1 F - M AY0 - ER0\nHOFFNER  HH AO1 F - N ER0\nHOFFPAUIR  HH AO1 F - P AW0 - ER0\nHOFI  HH OW1 - F IY0\nHOFLAND  HH AA1 F - L AH0 N D\nHOFLER  HH AA1 F - L ER0\nHOFMAN  HH AA1 F - M AH0 N\nHOFMANN  HH AA1 F - M AH0 N\nHOFMEISTER  HH AA1 F - M AY0 - S T ER0\nHOFRICHTER  HH AA1 - F R IH0 K - T ER0\nHOFSTAD  HH AA1 F - S T AE0 D\nHOFSTETTER  HH AA1 F - S T EH0 - T ER0\nHOFSTRA  HH AA1 F - S T R AH0\nHOG  HH AA1 G\nHOGAN  HH OW1 - G AA2 N\nHOGAN'S  HH OW1 - G AA2 N Z\nHOGAN(2)  HH OW1 - G AH0 N\nHOGANS  HH OW1 - G AA2 N Z\nHOGANS(2)  HH OW1 - G AH0 N Z\nHOGANSON  HH AA1 - G AH0 N - S AH0 N\nHOGARTH  HH OW1 - G AA2 R TH\nHOGARTY  HH AA1 - G AA2 R - T IY0\nHOGBERG  HH AA1 G - B ER0 G\nHOGE  HH OW1 JH\nHOGELAND  HH AA1 - G IH0 - L AH0 N D\nHOGELAND(2)  HH OW1 G - L AH0 N D\nHOGEN  HH AA1 - G AH0 N\nHOGENSON  HH AA1 - JH IH0 N - S AH0 N\nHOGER  HH OW1 - G ER0\nHOGG  HH AA1 G\nHOGGAN  HH AA1 - G AH0 N\nHOGGARD  HH AA1 - G ER0 D\nHOGGART  HH AA1 - G ER0 T\nHOGGATT  HH AA1 - G AH0 T\nHOGGE  HH AA1 G\nHOGGING  HH AO1 - G IH0 NG\nHOGLAND  HH AA1 G - L AH0 N D\nHOGLE  HH OW1 - G AH0 L\nHOGLUND  HH AO1 G - L AH0 N D\nHOGLUND'S  HH AO1 G - L AH0 N D Z\nHOGLUNDS  HH AO1 G - L AH0 N D Z\nHOGNOSE  HH AA1 G - N OW2 Z\nHOGREFE  HH AA1 - G R IH0 F\nHOGS  HH AA1 G Z\nHOGSED  HH OW1 G S T\nHOGSETT  HH AA1 G - S IH0 T\nHOGSTON  HH AA1 G - S T AH0 N\nHOGUE  HH OW1 G\nHOGWASH  HH AA1 G - W AA2 SH\nHOGWOOD  HH AO1 G - W UH2 D\nHOH  HH OW1\nHOHEISEL  HH OW1 - AY0 - S AH0 L\nHOHENBERGER  HH OW1 - AH0 N - B ER0 - G ER0\nHOHENSEE  HH AA0 - HH IH0 N - S IY1\nHOHENSTEIN  HH OW1 - AH0 N - S T AY0 N\nHOHENSTEIN(2)  HH OW1 - AH0 N - S T IY0 N\nHOHL  HH OW1 L\nHOHLER  HH OW1 - L ER0\nHOHLT  HH OW1 L T\nHOHMAN  HH OW1 - M AH0 N\nHOHMANN  HH OW1 - M AH0 N\nHOHN  HH AA1 N\nHOHNER  HH OW1 - N ER0\nHOHNSTEIN  HH OW1 N - S T AY0 N\nHOHNSTEIN(2)  HH OW1 N - S T IY0 N\nHOHORST  HH OW1 - HH AO2 R S T\nHOI  HH OY1\nHOILAND  HH OY0 - L AE1 N D\nHOILMAN  HH OY1 L - M AH0 N\nHOISINGTON  HH OY1 - Z IH0 NG - T AH0 N\nHOIST  HH OY1 S T\nHOISTED  HH OY1 - S T AH0 D\nHOISTED(2)  HH OY1 - S T IH0 D\nHOISTING  HH OY1 - S T IH0 NG\nHOISTS  HH OY1 S T S\nHOISTS(2)  HH OY1 S S\nHOISTS(3)  HH OY1 S\nHOIT  HH OY1 T\nHOITY  HH OY1 - T IY0\nHOIUM  HH AA1 - IY0 - AH0 M\nHOJNACKI  HH AH0 Y - N AA1 T S - K IY0\nHOKANSON  HH AA1 - K AH0 N - S AH0 N\nHOKE  HH OW1 K\nHOKENSON  HH AA1 - K IH0 N - S AH0 N\nHOKEY  HH OW1 - K IY0\nHOKKAIDO  HH OW0 - K AY1 - D OW0\nHOKUM  HH OW1 - K AH0 M\nHOKURIKU  HH AA2 - K ER0 - IY1 - K UW2\nHOLADAY  HH OW1 - L AH0 - D EY0\nHOLAHAN  HH AA1 - L AH0 - HH AE0 N\nHOLAN  HH OW1 - L AH0 N\nHOLAWAY  HH OW1 - L AH0 - W EY0\nHOLBEIN  HH OW1 L - B AY0 N\nHOLBEN  HH OW1 L - B AH0 N\nHOLBERG  HH OW1 L - B ER0 G\nHOLBERT  HH OW1 L - B ER0 T\nHOLBROOK  HH OW1 L - B R UH2 K\nHOLBROOKE  HH OW1 L - B R UH0 K\nHOLBROOKE'S  HH OW1 L - B R UH0 K S\nHOLBROOKS  HH OW1 L - B R UH0 K S\nHOLCK  HH OW1 L K\nHOLCOMB  HH OW1 L - K AH0 M\nHOLCOMBE  HH OW1 L - K AH0 M\nHOLD  HH OW1 L D\nHOLDA  HH OW1 L - D AH0\nHOLDAWAY  HH OW1 L D - AH0 - W EY2\nHOLDE  HH OW1 L D\nHOLDEMAN  HH OW1 L D - M AH0 N\nHOLDEN  HH OW1 L - D AH0 N\nHOLDEN'S  HH OW1 L - D AH0 N Z\nHOLDER  HH OW1 L - D ER0\nHOLDER'S  HH OW1 L - D ER0 Z\nHOLDERBANK  HH OW1 L - D ER0 - B AE2 NG K\nHOLDERBAUM  HH OW1 L - D ER0 - B AW0 M\nHOLDERBY  HH OW1 L - D ER0 - B IY0\nHOLDERFIELD  HH OW1 L - D ER0 - F IY2 L D\nHOLDERMAN  HH OW1 L - D ER0 - M AH0 N\nHOLDERNESS  HH OW1 L - D ER0 - N AH0 S\nHOLDERS  HH OW1 L - D ER0 Z\nHOLDERS'  HH OW1 L - D ER0 Z\nHOLDFAST  HH OW1 L - F AE2 S T\nHOLDING  HH OW1 L - D IH0 NG\nHOLDING'S  HH OW1 L - D IH0 NG Z\nHOLDINGS  HH OW1 L - D IH0 NG Z\nHOLDINGS'  HH OW1 L - D IH0 NG Z\nHOLDMAN  HH OW1 L D - M AH0 N\nHOLDORF  HH OW1 L - D AO0 R F\nHOLDOUT  HH OW1 L D - AW2 T\nHOLDOUTS  HH OW1 L D - AW2 T S\nHOLDOVER  HH OW1 L D - OW2 - V ER0\nHOLDOVERS  HH OW1 L D - OW2 - V ER0 Z\nHOLDREN  HH OW1 L - D ER0 - AH0 N\nHOLDRIDGE  HH OW1 L - D R IH0 JH\nHOLDS  HH OW1 L D Z\nHOLDSWORTH  HH OW1 L D Z - W ER2 TH\nHOLDUP  HH OW1 L D - AH2 P\nHOLDUPS  HH OW1 L D - AH2 P S\nHOLE  HH OW1 L\nHOLECEK  HH AA1 - L IH0 - CH EH0 K\nHOLED  HH OW1 L D\nHOLEMAN  HH OW1 L - M AH0 N\nHOLEN  HH OW1 - L AH0 N\nHOLES  HH OW1 L Z\nHOLEWINSKI  HH AH0 - L UW0 - IH1 N - S K IY0\nHOLFORD  HH OW1 L - F ER0 D\nHOLGATE  HH OW1 L - G EY2 T\nHOLGERSON  HH OW1 L - G ER0 - S AH0 N\nHOLGUIN  HH OW1 L - G IH0 N\nHOLIAN  HH OW1 - L IY0 - AH0 N\nHOLICK  HH AA1 - L IH0 K\nHOLIDAY  HH AA1 - L AH0 - D EY2\nHOLIDAY'S  HH AA1 - L AH0 - D EY2 Z\nHOLIDAY(2)  HH AA1 - L IH0 - D EY2\nHOLIDAYS  HH AA1 - L AH0 - D EY2 Z\nHOLIDAYSBURG  HH AA1 - L AH0 - D EY2 Z - B ER0 G\nHOLIEN  HH OW1 - L IY0 - AH0 N\nHOLIER  HH OW1 - L IY0 - ER0\nHOLIEST  HH OW1 - L IY0 - IH0 S T\nHOLIFIELD  HH AA1 - L IH0 - F IY2 L D\nHOLIHAN  HH AA1 - L IH0 - HH AE0 N\nHOLIK  HH OW1 - L IH0 K\nHOLIMAN  HH AA1 - L IH0 - M AH0 N\nHOLINESS  HH OW1 - L IY0 - N AH0 S\nHOLING  HH OW1 - L IH0 NG\nHOLISTIC  HH OW0 - L IH1 - S T IH0 K\nHOLL  HH AA1 L\nHOLLABAUGH  HH AA1 - L AH0 - B AO2\nHOLLADAY  HH AA1 - L AH0 - D EY2\nHOLLAN  HH AA1 - L AH0 N\nHOLLAND  HH AA1 - L AH0 N D\nHOLLAND'S  HH AA1 - L AH0 N D Z\nHOLLANDER  HH AA1 - L AH0 N - D ER0\nHOLLANDERS  HH AA1 - L AH0 N - D ER0 Z\nHOLLANDS  HH AA1 - L AH0 N D Z\nHOLLANDSWORTH  HH AA1 - L AH0 N D Z - W ER2 TH\nHOLLAR  HH AA1 - L ER0\nHOLLARS  HH AA1 - L ER0 Z\nHOLLATZ  HH AA1 - L AH0 T S\nHOLLAWAY  HH AA1 - L AH0 - W EY0\nHOLLE  HH AA1 L\nHOLLEMAN  HH OW1 L - M AH0 N\nHOLLEN  HH AA1 - L AH0 N\nHOLLENBACH  HH AA1 - L IH0 N - B AA0 K\nHOLLENBACK  HH AA1 - L AH0 N - B AE2 K\nHOLLENBAUGH  HH AH0 - L EH1 N - B AO0\nHOLLENBECK  HH AA1 - L AH0 N - B EH2 K\nHOLLENBERG  HH AA1 - L AH0 N - B ER0 G\nHOLLENDER  HH AA1 - L EH0 N - D ER0\nHOLLENKAMP  HH AA1 - L IH0 N - K AE0 M P\nHOLLER  HH AA1 - L ER0\nHOLLERAN  HH AA1 - L ER0 - AH0 N\nHOLLERBACH  HH AA1 - L ER0 - B AA2 K\nHOLLERED  HH AA1 - L ER0 D\nHOLLERING  HH AA1 - L ER0 - IH0 NG\nHOLLERN  HH AA1 - L ER0 N\nHOLLERS  HH AA1 - L ER0 Z\nHOLLETT  HH AA1 - L IH0 T\nHOLLEY  HH AA1 - L IY0\nHOLLIBAUGH  HH AA1 - L IH0 - B AO2\nHOLLICK  HH AA1 - L IH0 K\nHOLLIDAY  HH AA1 - L IH0 - D EY2\nHOLLIDAY'S  HH AA1 - L IH0 - D EY2 Z\nHOLLIE  HH AA1 - L IY0\nHOLLIER  HH AO1 - L IY0 - ER0\nHOLLIES  HH AA1 - L IY0 Z\nHOLLIFIELD  HH AA1 - L IH0 - F IY2 L D\nHOLLIMAN  HH AA1 - L IH0 - M AH0 N\nHOLLIMAN'S  HH AA1 - L IH0 - M AH0 N Z\nHOLLIMON  HH AA1 - L IH0 - M AH0 N\nHOLLIN  HH AA1 - L IH0 N\nHOLLING  HH AA1 - L IH0 NG\nHOLLINGER  HH AA1 - L IH0 - NG ER0\nHOLLINGS  HH AA1 - L IH0 NG Z\nHOLLINGS(2)  HH AA1 - L IH0 NG G Z\nHOLLINGSHEAD  HH AA1 - L IH0 NG Z - HH EH2 D\nHOLLINGSWORTH  HH AA1 - L IH0 NG - Z W ER2 TH\nHOLLINGWORTH  HH AA1 - L IH0 NG - G W ER2 TH\nHOLLINS  HH AA1 - L IH0 N Z\nHOLLINSHEAD  HH AA1 - L IH0 N S - HH EH2 D\nHOLLINSHEAD(2)  HH AA1 - L IH0 N Z - HH EH2 D\nHOLLINSWORTH  HH AA1 - L IH0 N - S W ER2 TH\nHOLLINSWORTH(2)  HH AA1 - L IH0 N Z - W ER2 TH\nHOLLIS  HH AA1 - L IH0 S\nHOLLISTER  HH AA1 - L IH0 - S T ER0\nHOLLISTON  HH AA1 - L IH0 - S T AH0 N\nHOLLMAN  HH AA1 L - M AH0 N\nHOLLMANN  HH AA1 L - M AH0 N\nHOLLO  HH AA1 - L OW2\nHOLLOBAUGH  HH AA1 - L AH0 - B AO0\nHOLLOM  HH AO1 - L AH0 M\nHOLLOMAN  HH AA1 - L OW0 - M AH0 N\nHOLLOMON  HH AA1 - L AH0 - M AA0 N\nHOLLON  HH AA1 - L AH0 N\nHOLLOPETER  HH AA1 - L AH0 - P IY0 - T ER0\nHOLLORAN  HH AA1 - L ER0 - AH0 N\nHOLLOW  HH AA1 - L OW0\nHOLLOW'S  HH AA1 - L OW0 Z\nHOLLOWAY  HH AA1 - L OW0 - W EY2\nHOLLOWED  HH AA1 - L OW0 D\nHOLLOWELL  HH AA1 - L AH0 W - EH0 L\nHOLLOWING  HH AA1 - L OW0 - IH0 NG\nHOLLOWS  HH AA1 - L OW0 Z\nHOLLSTEIN  HH AA1 L - S T AY0 N\nHOLLSTEIN(2)  HH AA1 L - S T IY0 N\nHOLLY  HH AA1 - L IY0\nHOLLY'S  HH AA1 - L IY0 Z\nHOLLYFIELD  HH AA1 - L IH0 - F IY2 L D\nHOLLYFIELD(2)  HH AA1 - L IY0 - F IY2 L D\nHOLLYHEAD  HH AO1 - L IY0 - HH EH2 D\nHOLLYHOCK  HH AA1 - L IY0 - HH AA2 K\nHOLLYHOCKS  HH AA1 - L IY0 - HH AA2 K S\nHOLLYWOOD  HH AA1 - L IY0 - W UH2 D\nHOLLYWOOD'S  HH AA1 - L IY0 - W UH2 D Z\nHOLM  HH OW1 M\nHOLMAN  HH AA1 L - M AH0 N\nHOLMBERG  HH OW1 L M - B ER0 G\nHOLMDALE  HH OW1 L M - D EY2 L\nHOLME  HH OW1 L M\nHOLMEN  HH AA1 L - M EH0 N\nHOLMER  HH OW1 L - M ER0\nHOLMES  HH OW1 M Z\nHOLMES'S  HH OW1 M - Z IH0 Z\nHOLMES'S(2)  HH OW1 L M - Z IH0 Z\nHOLMES(2)  HH OW1 L M Z\nHOLMGREN  HH OW1 L M - G R EH0 N\nHOLMIUM  HH OW1 L - M IY0 - AH0 M\nHOLMLUND  HH OW1 L M - L AH0 N D\nHOLMQUEST  HH OW1 L M - K W EH2 S T\nHOLMQUIST  HH OW1 L M - K W IH2 S T\nHOLMSTROM  HH OW1 L M - S T R AH0 M\nHOLNESS  HH AA1 L - N IH0 S\nHOLOCAUST  HH AA1 - L AH0 - K AO2 S T\nHOLOGRAM  HH AA1 - L AH0 - G R AE2 M\nHOLOGRAMS  HH AA1 - L AH0 - G R AE2 M Z\nHOLOGRAPHIC  HH AA2 - L AH0 - G R AE1 - F IH0 K\nHOLOHAN  HH AA1 - L AH0 - HH AE0 N\nHOLQUIN  HH OW1 L - K W IH0 N\nHOLROYD  HH OW1 L - R OY2 D\nHOLSAPPLE  HH OW1 L - S AH0 - P AH0 L\nHOLSCHER  HH OW1 L - SH ER0\nHOLSCLAW  HH OW1 L - S K L AO0\nHOLSEY  HH OW1 L - S IY0\nHOLSHOUSER  HH OW1 L S - HH AW2 - S ER0\nHOLSINGER  HH OW1 L - S IH0 - NG ER0\nHOLSOMBACK  HH OW1 L - S AH0 M - B AE2 K\nHOLSONBACK  HH OW1 L - S AH0 N - B AE2 K\nHOLSOPPLE  HH OW1 L - S AH0 - P AH0 L\nHOLST  HH OW1 L S T\nHOLSTAD  HH OW1 L - S T AH0 D\nHOLSTE  HH OW1 L S T\nHOLSTEAD  HH OW1 L - S T EH2 D\nHOLSTEIN  HH OW1 L - S T IY2 N\nHOLSTEN  HH OW1 L - S AH0 N\nHOLSTER  HH OW1 L - S T ER0\nHOLSTINE  HH OW1 L - S T AY2 N\nHOLSTON  HH OW1 L - S T AH0 N\nHOLSTROM  HH OW1 L - S T R AH0 M\nHOLSWORTH  HH OW1 L - S W ER0 TH\nHOLT  HH OW1 L T\nHOLT'S  HH OW1 L T S\nHOLTAN  HH OW1 L - T AH0 N\nHOLTE  HH OW1 L T\nHOLTEN  HH OW1 L - T AH0 N\nHOLTER  HH OW1 L - T ER0\nHOLTERMAN  HH OW1 L - T ER0 - M AH0 N\nHOLTHAUS  HH OW1 L T - HH AW2 S\nHOLTHUS  HH OW1 L - TH AH0 S\nHOLTKAMP  HH OW1 L T - K AE2 M P\nHOLTMAN  HH OW1 L T - M AH0 N\nHOLTMANN  HH OW1 L T - M AH0 N\nHOLTON  HH OW1 L - T AH0 N\nHOLTORF  HH OW1 L - T ER0 F\nHOLTROP  HH OW1 L - T R AH0 P\nHOLTRY  HH OW1 L - T R IY0\nHOLTS  HH OW1 L T S\nHOLTSCLAW  HH OW1 L T - S K L AO2\nHOLTZ  HH OW1 L T S\nHOLTZ'S  HH OW1 L T - S IH0 Z\nHOLTZAPPLE  HH OW1 L T - Z AH0 - P AH0 L\nHOLTZCLAW  HH OW1 L T - S K L AO0\nHOLTZER  HH OW1 L T - Z ER0\nHOLTZINGER  HH OW1 L T - Z IH0 - NG ER0\nHOLTZMAN  HH OW1 L T S - M AH0 N\nHOLUB  HH OW1 - L AH0 B\nHOLUM  HH OW1 - L AH0 M\nHOLVEN  HH AO1 L - V EH0 N\nHOLVERSON  HH AA1 L - V ER0 - S AH0 N\nHOLVIS  HH OW1 L - V AH0 S\nHOLVIS'  HH OW1 L - V AH0 S\nHOLVIS'S  HH OW1 L - V AH0 - S IH0 Z\nHOLWAY  HH AA1 L - W EY0\nHOLWEGER  HH OW1 L - W IH0 - G ER0\nHOLWERDA  HH OW0 L - W ER1 - D AH0\nHOLY  HH OW1 - L IY0\nHOLYCROSS  HH OW1 - L IY0 - K R AO2 S\nHOLYFIELD  HH OW1 - L IY0 - F IY2 L D\nHOLYOAK  HH OW1 - L IY0 - OW2 K\nHOLYOKE  HH OW1 - L IY0 - OW2 K\nHOLZ  HH OW1 L Z\nHOLZAPFEL  HH OW1 L - Z AH0 P - F AH0 L\nHOLZER  HH OW1 L - Z ER0\nHOLZHAUER  HH OW1 L Z - HH AW0 - ER0\nHOLZHAUSER  HH OW1 L Z - HH AW0 - Z ER0\nHOLZHEIMER  HH OW1 L Z - HH AY0 - M ER0\nHOLZINGER  HH OW1 L - Z IH0 - NG ER0\nHOLZMAN  HH OW1 L Z - M AH0 N\nHOLZMANN  HH OW1 L Z - M AH0 N\nHOLZSCHUH  HH OW1 L - SH UW0\nHOLZSTOFF  HH OW1 L - S T AO2 F\nHOLZWARTH  HH OW1 L Z - W ER0 TH\nHOLZWORTH  HH OW1 L Z - W ER0 TH\nHOM  HH AA1 M\nHOMA  HH OW1 - M AH0\nHOMAC  HH OW1 - M AE0 K\nHOMAGE  AA1 - M AH0 JH\nHOMAGE(2)  HH AA1 - M AH0 JH\nHOMAN  HH OW1 - M AH0 N\nHOMANN  HH OW1 - M AH0 N\nHOMANS  HH OW1 - M AH0 N Z\nHOMART  HH OW1 - M AA2 R T\nHOMBRE  HH AA1 M - B R AH0\nHOMBURG  HH AA1 M - B ER0 G\nHOME  HH OW1 M\nHOME'S  HH OW1 M Z\nHOME-MADE  HH OW1 M - M EY1 D\nHOME-SCHOOL  HH OW1 M - S K UW1 L\nHOMEBOUND  HH OW1 M - B AW2 N D\nHOMEBOYS  HH OW1 M - B OY2 Z\nHOMEBUILDER  HH OW1 M - B IH2 L - D ER0\nHOMEBUILDER'S  HH OW1 M - B IH2 L - D ER0 Z\nHOMEBUILDERS  HH OW1 M - B IH2 L - D ER0 Z\nHOMEBUILDING  HH OW1 M - B IH2 L - D IH0 NG\nHOMEBUYER  HH OW1 M - B AY2 - ER0\nHOMEBUYERS  HH OW1 M - B AY2 - ER0 Z\nHOMECARE  HH OW1 M - K EH2 R\nHOMECLUB  HH OW1 M - K L AH2 B\nHOMECOMING  HH OW1 M - K AH2 - M IH0 NG\nHOMED  HH OW1 M D\nHOMEDCO  HH OW2 - M EH1 D - K OW2\nHOMEFED  HH OW1 M - F EH2 D\nHOMEFED'S  HH OW1 M - F EH2 D Z\nHOMEFRONT  HH OW1 M - F R AH0 N T\nHOMEGROWN  HH OW1 M - G R OW1 N\nHOMELAND  HH OW1 M - L AE2 N D\nHOMELAND'S  HH OW1 M - L AE2 N D Z\nHOMELANDS  HH OW1 M - L AE2 N D Z\nHOMELESS  HH OW1 M - L AH0 S\nHOMELESSNESS  HH OW1 M - L AH0 S - N AH0 S\nHOMELIKE  HH OW1 M - L AY2 K\nHOMELY  HH OW1 M - L IY0\nHOMEMADE  HH OW1 M - M EY1 D\nHOMEMADE(2)  HH OW1 - M EY1 D\nHOMEMAKER  HH OW1 M - M EY2 - K ER0\nHOMEMAKERS  HH OW1 M - M EY2 - K ER0 Z\nHOMEMAKING  HH OW1 M - M EY2 - K IH0 NG\nHOMEN  HH OW1 - M AH0 N\nHOMEOPATHIC  HH OW2 - M IY0 - OW0 - P AE1 - TH AH0 K\nHOMEOPATHY  HH OW2 - M IY0 - OW0 - P AE1 - TH IY0\nHOMEOSTASIS  HH OW2 - M IY0 - OW0 - S T EY1 - S AH0 S\nHOMEOSTATIC  HH OW2 - M IY0 - OW0 - S T AE1 - T IH0 K\nHOMEOWNER  HH OW1 - M OW2 - N ER0\nHOMEOWNER'S  HH OW1 - M OW2 - N ER0 Z\nHOMEOWNERS  HH OW1 - M OW2 - N ER0 Z\nHOMEOWNERS'  HH OW1 - M OW2 - N ER0 Z\nHOMEOWNERSHIP  HH OW1 - M OW2 - N ER0 - SH IH2 P\nHOMEPORTING  HH OW1 M - P AO1 R - T IH0 NG\nHOMER  HH OW1 - M ER0\nHOMER'S  HH OW1 - M ER0 Z\nHOMERIC  HH OW0 - M EH1 - R IH0 K\nHOMERS  HH OW1 - M ER0 Z\nHOMERUN  HH OW0 - M R AH1 N\nHOMES  HH OW1 M Z\nHOMES'  HH OW1 M Z\nHOMESICK  HH OW1 M - S IH2 K\nHOMESICKNESS  HH OW1 M - S IH2 K - N AH0 S\nHOMESLEY  HH OW1 M Z - L IY0\nHOMESPUN  HH OW1 M - S P AH2 N\nHOMESTAKE  HH OW1 M - S T EY2 K\nHOMESTAKE'S  HH OW1 M - S T EY2 K S\nHOMESTATE  HH OW1 M - S T EY2 T\nHOMESTEAD  HH OW1 M - S T EH2 D\nHOMESTEAD'S  HH OW1 M - S T EH2 D Z\nHOMESTEADED  HH OW1 M - S T EH2 - D IH0 D\nHOMESTEADER  HH OW1 M - S T EH0 - D ER0\nHOMESTEADERS  HH OW1 M - S T EH0 - D ER0 Z\nHOMESTRETCH  HH OW1 M - S T R EH2 CH\nHOMETOWN  HH OW1 M - T AW2 N\nHOMEWARD  HH OW1 M - W ER0 D\nHOMEWOOD  HH OW1 M - W UH2 D\nHOMEWORK  HH OW1 M - W ER2 K\nHOMEWORKER  HH OW1 M - W ER2 - K ER0\nHOMEWORKERS  HH OW1 M - W ER2 - K ER0 Z\nHOMEY  HH OW1 - M IY0\nHOMEYER  HH OW1 - M IY0 - ER0\nHOMICIDAL  HH AA2 - M AH0 - S AY1 - D AH0 L\nHOMICIDE  HH AA1 - M AH0 - S AY2 D\nHOMICIDES  HH AA1 - M AH0 - S AY2 D Z\nHOMILETIC  HH AA2 - M AH0 - L EH1 - T IH0 K\nHOMILIES  HH OW1 - M AH0 - L IY0 Z\nHOMILY  HH AA1 - M AH0 - L IY0\nHOMINEM  HH AA1 - M IH0 - N EH0 M\nHOMING  HH OW1 - M IH0 NG\nHOMINID  HH AA1 - M AH0 - N IH0 D\nHOMINY  HH AA1 - M IH0 - N IY0\nHOMME  HH AA1 M\nHOMMEL  HH AA1 - M AH0 L\nHOMMES  HH AA1 M Z\nHOMO  HH OW1 - M OW0\nHOMO-ERECTUS  HH OW1 - M OW0 - IH0 - R EH1 K - T AH0 S\nHOMOGENEITY  HH AA2 - M AH0 - JH AH0 - N IY1 - AH0 - T IY0\nHOMOGENEOUS  HH OW2 - M AH0 - JH IY1 - N IY0 - AH0 S\nHOMOGENIZATION  HH OW0 - M AA1 - JH AH0 - N IH0 - Z EY2 - SH AH0 N\nHOMOGENIZE  HH OW0 - M AA1 - JH AH0 - N AY2 Z\nHOMOGENIZED  HH OW0 - M AA1 - JH AH0 - N AY2 Z D\nHOMOGENOUS  HH AH0 - M AA1 - JH AH0 - N AH0 S\nHOMOGENY  HH OW0 - M AA1 - JH AH0 - N IY0\nHOMOLA  HH AH0 - M AA1 - L AH0\nHOMOLKA  HH AH0 - M AA1 L - K AH0\nHOMOLOGOUS  HH AH0 - M AA1 - L AH0 - G AH0 S\nHOMOPHOBIA  HH OW2 - M AH0 - F OW1 - B IY0 - AH0\nHOMOPHOBIC  HH OW2 - M AH0 - F OW1 - B IH0 K\nHOMOSEXUAL  HH OW2 - M OW0 - S EH1 K - SH AH0 - W AH0 L\nHOMOSEXUALITY  HH OW2 - M OW0 - S EH2 K - SH AH0 W - AE1 - L AH0 - T IY0\nHOMOSEXUALS  HH OW2 - M OW0 - S EH1 K - SH AH0 - W AH0 L Z\nHOMOSPOROUS  HH AH0 - M AA1 - S P ER0 - AH0 S\nHOMOZYGOTE  HH OW2 - M OW0 - Z AY1 - G OW0 T\nHOMOZYGOUS  HH OW2 - M OW0 - Z AY1 - G AH0 S\nHOMRICH  HH AA1 M - R IH0 K\nHOMS  HH AA1 M Z\nHOMSEY  HH AA1 M - Z IY0\nHOMUTH  HH AA1 - M UW0 TH\nHON  HH AA1 N\nHON(2)  HH AH1 N\nHON(3)  AH1 N - ER0 - AH0 - B AH0 L\nHONAKER  HH AA1 - N AH0 - K ER0\nHONAN  HH OW1 - N AH0 N\nHONASAN  HH AA1 - N AH0 - Z AH0 N\nHONCHO  HH AO1 N - CH OW0\nHONDA  HH AO1 N - D AH0\nHONDA'S  HH AA1 N - D AH0 Z\nHONDAS  HH AA1 N - D AH0 S\nHONDERICH  HH AA1 N - D ER0 - IH0 K\nHONDO  HH AA1 N - D OW0\nHONDURAN  HH AA0 N - D UH1 - R AH0 N\nHONDURANS  HH AA0 N - D UH1 - R AH0 N Z\nHONDURAS  HH AA0 N - D UH1 - R AH0 S\nHONE  HH OW1 N\nHONEA  HH AA1 - N IY0 - AH0\nHONECK  HH OW1 - N EH0 K\nHONECKER  HH OW1 - N EH0 - K ER0\nHONECKER'S  HH OW1 - N EH0 - K ER0 Z\nHONED  HH OW1 N D\nHONER  HH OW1 - N ER0\nHONEST  AA1 - N AH0 S T\nHONESTLY  AA1 - N AH0 S T - L IY0\nHONESTLY(2)  AA1 - N AH0 S - L IY0\nHONESTOK  HH OW1 - N AH0 - S T AO2 K\nHONESTY  AA1 - N AH0 - S T IY0\nHONEY  HH AH1 - N IY0\nHONEYBEE  HH AH1 - N IY0 - B IY2\nHONEYBEES  HH AH1 - N IY0 - B IY2 Z\nHONEYCOMB  HH AH1 - N IY0 - K OW2 M\nHONEYCUTT  HH AH1 - N IY0 - K AH0 T\nHONEYDEW  HH AH1 - N IY0 - D UW2\nHONEYMAN  HH AA1 - N IY0 - M AH0 N\nHONEYMOON  HH AH1 - N IY0 - M UW2 N\nHONEYMOONED  HH AH1 - N IY0 - M UW2 N D\nHONEYMOONER  HH AH1 - N IY0 - M UW2 - N ER0\nHONEYMOONERS  HH AH1 - N IY0 - M UW2 - N ER0 Z\nHONEYMOONS  HH AH1 - N IY0 - M UW2 N Z\nHONEYS  HH AH1 - N IY0 Z\nHONEYSUCKLE  HH AH1 - N IY0 - S AH2 - K AH0 L\nHONEYSUCKLES  HH AH1 - N IY0 - S AH2 - K AH0 L Z\nHONEYWELL  HH AH1 - N IY0 - W EH2 L\nHONEYWELL'S  HH AH1 - N IY0 - W EH2 L Z\nHONG  HH AO1 NG\nHONG-KONG  HH AO1 NG - K AO1 NG\nHONGKONG  HH AO1 NG - K AO0 NG\nHONGWEI  HH AO1 NG - W EY1\nHONIG  HH AA1 - N IH0 G\nHONING  HH OW1 - N IH0 NG\nHONK  HH AA1 NG K\nHONK(2)  HH AO1 NG K\nHONKING  HH AO1 NG - K IH0 NG\nHONKY  HH AO1 NG - K IY0\nHONN  HH AA1 N\nHONNOLD  HH AA1 - N OW2 L D\nHONOLD  HH AA1 - N OW0 L D\nHONOLULU  HH AA2 - N AH0 - L UW1 - L UW0\nHONOLULU'S  HH AA2 - N AH0 - L UW1 - L UW0 Z\nHONOR  AA1 - N ER0\nHONOR'S  AA1 - N ER0 Z\nHONORA  AO0 - N AO1 - R AH0\nHONORABLE  AA1 - N ER0 - AH0 - B AH0 L\nHONORABLY  AA1 - N ER0 - AH0 - B L IY0\nHONORARIA  AA2 - N ER0 - EH1 - R IY0 - AH0\nHONORARIUM  AA2 - N ER0 - EH1 - R IY0 - AH0 M\nHONORARIUMS  AA2 - N ER0 - EH1 - R IY0 - AH0 M Z\nHONORARY  AA1 - N ER0 - EH2 - R IY0\nHONORE  AA1 - N ER0\nHONORED  AA1 - N ER0 D\nHONOREE  AA0 - N ER0 - IY1\nHONOREES  AA0 - N ER0 - IY1 Z\nHONORIA  AA0 - N ER1 - IY0 - AH0\nHONORIFIC  AA2 - N ER0 - IH1 - F IH0 K\nHONORING  AA1 - N ER0 - IH0 NG\nHONORS  AA1 - N ER0 Z\nHONS  HH AA1 N Z\nHONSBERGER  HH AA1 N S - B ER0 - G ER0\nHONSE  HH AA1 N S\nHONSHU  HH AA1 N - SH UW0\nHONSINGER  HH AA1 N - S IH0 - NG ER0\nHONTZ  HH AA1 N T S\nHOO  HH UW1\nHOOBLER  HH UW1 B - L ER0\nHOOCH  HH UW1 CH\nHOOCHIE  HH UW1 - CH IY0\nHOOCK  HH UW1 K\nHOOD  HH UH1 D\nHOODED  HH UH1 - D IH0 D\nHOODLUM  HH UH1 D - L AH0 M\nHOODLUMS  HH UW1 D - L AH0 M Z\nHOODS  HH UH1 D Z\nHOODWINK  HH UH1 D - W IH2 NG K\nHOODWINKED  HH UH1 D - W IH2 NG K T\nHOOEY  HH UW1 - IY0\nHOOF  HH UW1 F\nHOOFED  HH UH1 F T\nHOOFED(2)  HH UW1 F T\nHOOFS  HH UH1 F S\nHOOFS(2)  HH UW1 F S\nHOOG  HH UW1 G\nHOOGE  HH UW1 JH\nHOOGLAND  HH UW1 G - L AH0 N D\nHOOGOVENS  HH UW1 - G AH0 - V IH0 N Z\nHOOK  HH UH1 K\nHOOK'S  HH UH1 K S\nHOOKE  HH UH1 K\nHOOKED  HH UH1 K T\nHOOKER  HH UH1 - K ER0\nHOOKER'S  HH UH1 - K ER0 Z\nHOOKERS  HH UH1 - K ER0 Z\nHOOKING  HH UH1 - K IH0 NG\nHOOKS  HH UH1 K S\nHOOKUP  HH UH1 K - AH2 P\nHOOKUPS  HH UH1 K - AH2 P S\nHOOKWORM  HH UH1 K - W ER0 M\nHOOKY  HH UH1 - K IY0\nHOOLE  HH UW1 L\nHOOLEY  HH UW1 - L IY0\nHOOLIGAN  HH UW1 - L IH0 - G AH0 N\nHOOLIGANISM  HH UW1 - L IH0 - G AH0 - N IH2 - Z AH0 M\nHOOLIGANS  HH UW1 - L IH0 - G AH0 N Z\nHOOLIHAN  HH UW1 - L IH0 - HH AE0 N\nHOON  HH UW1 N\nHOOP  HH UW1 P\nHOOPER  HH UW1 - P ER0\nHOOPERMAN  HH UW1 - P ER0 - M AH0 N\nHOOPES  HH UW1 P S\nHOOPINGARNER  HH UW0 - P IH1 NG - G AA0 R - N ER0\nHOOPLA  HH UW1 - P L AA2\nHOOPOE  HH UW1 - P UW2\nHOOPS  HH UW1 P S\nHOORAY  HH UH0 - R EY1\nHOOS  HH UW1 Z\nHOOSE  HH UW1 S\nHOOSER  HH UW1 - Z ER0\nHOOSIER  HH UW1 - ZH ER0\nHOOSIERS  HH UW1 - Z Y ER0 Z\nHOOT  HH UW1 T\nHOOTED  HH UW1 - T IH0 D\nHOOTEN  HH UW1 - T AH0 N\nHOOTER  HH UW1 - T ER0\nHOOTERS  HH UW1 - T ER0 Z\nHOOTIE  HH UW1 - T IY0\nHOOTMAN  HH UW1 T - M AH0 N\nHOOTON  HH UW1 - T AH0 N\nHOOTS  HH UW1 T S\nHOOVEN  HH UW1 - V AH0 N\nHOOVER  HH UW1 - V ER0\nHOOVER'S  HH UW1 - V ER0 Z\nHOOVES  HH UH1 V Z\nHOOVES(2)  HH UW1 V Z\nHOOVLER  HH UW1 V - L ER0\nHOP  HH AA1 P\nHOPALONG  HH AA1 - P AH0 - L AO0 NG\nHOPBURG  HH AA1 P - B ER0 G\nHOPBURG'S  HH AA1 P - B ER0 G Z\nHOPE  HH OW1 P\nHOPE'S  HH OW1 P S\nHOPED  HH OW1 P T\nHOPEFUL  HH OW1 P - F AH0 L\nHOPEFULLY  HH OW1 P - F AH0 - L IY0\nHOPEFULNESS  HH OW1 P - F AH0 L - N IH0 S\nHOPEFULS  HH OW1 P - F AH0 L Z\nHOPELESS  HH OW1 P - L AH0 S\nHOPELESSLY  HH OW1 P - L AH0 S - L IY0\nHOPELESSNESS  HH OW1 P - L AH0 S - N AH0 S\nHOPES  HH OW1 P S\nHOPEWELL  HH OW1 P - W EH2 L\nHOPF  HH AA1 P F\nHOPFENSPERGER  HH AA1 P - F IH0 N - S P ER0 - G ER0\nHOPFENSPERGER(2)  HH AA1 - F IH0 N - S P ER0 - G ER0\nHOPFER  HH AA1 P - F ER0\nHOPFINGER  HH AA1 P - F IH0 - NG ER0\nHOPGOOD  HH AA1 P - G UH2 D\nHOPI  HH OW1 - P IY0\nHOPING  HH OW1 - P IH0 NG\nHOPKE  HH OW1 P K\nHOPKIN  HH AA1 P - K IH0 N\nHOPKIN'S  HH AA1 P - K IH0 N Z\nHOPKINS  HH AA1 P - K IH0 N Z\nHOPKINS'  HH AA1 P - K IH0 N Z\nHOPKINSON  HH AA1 P - K IH0 N - S AH0 N\nHOPKINTON  HH AA1 P - K IH0 N - T AH0 N\nHOPKYNS  HH AA1 P - K IH0 N Z\nHOPMAN  HH AA1 P - M AH0 N\nHOPP  HH AA1 P\nHOPPA  HH AA1 - P AH0\nHOPPE  HH AA1 P\nHOPPED  HH AA1 P T\nHOPPEL  HH AA1 - P AH0 L\nHOPPER  HH AA1 - P ER0\nHOPPER'S  HH AA1 - P ER0 Z\nHOPPERS  HH AA1 - P ER0 Z\nHOPPERT  HH AA1 - P ER0 T\nHOPPES  HH AA1 P S\nHOPPING  HH AA1 - P IH0 NG\nHOPPLE  HH AA1 - P AH0 L\nHOPPS  HH AA1 P S\nHOPPY  HH AO1 - P IY0\nHOPS  HH AA1 P S\nHOPSCOTCH  HH AA1 P - S K AA2 CH\nHOPSCOTCHED  HH AA1 P - S K AA2 CH T\nHOPSON  HH AA1 P - S AH0 N\nHOPTON  HH AA1 P - T AH0 N\nHOPWOOD  HH AA1 P - W UH2 D\nHORA  HH AO1 - R AH0\nHORACE  HH AO1 - R AH0 S\nHORACE'S  HH AO1 - R AH0 - S AH0 Z\nHORACE(2)  HH AO1 - R IH0 S\nHORACEK  HH AO1 - R AH0 - CH EH0 K\nHORACIA  HH AO0 - R AA1 - S IY0 - AH0\nHORACIO  HH AO0 - R EY1 - S IY0 - OW0\nHORAK  HH AO1 - R AH0 K\nHORAN  HH AO1 - R AH0 N\nHORATIA  HH AO0 - R AA1 - SH AH0\nHORATIAN  HH ER0 - EY1 - SH AH0 N\nHORATIO  HH ER0 - EY1 - SH OW0\nHORATIO'S  HH AO0 - R EY1 - SH IY0 - OW0 Z\nHORATIUS  HH AO0 - R EY1 - SH AH0 S\nHORCH  HH AO1 R K\nHORCHOW  HH AO1 R - CH OW0\nHORD  HH AO1 R D\nHORDE  HH AO1 R D\nHORDES  HH AO1 R D Z\nHOREHOUND  HH AA1 R - HH AW2 N D\nHOREJSI  HH AO0 - R EY1 Y - S IY0\nHORELICK  HH AO1 - R AH0 - L IH0 K\nHOREN  HH AO1 - R AH0 N\nHORENSTEIN  HH AO1 - R AH0 N - S T AY0 N\nHORENSTEIN(2)  HH AO1 - R AH0 N - S T IY0 N\nHORGAN  HH AO1 R - G AH0 N\nHORGER  HH AO1 R - G ER0\nHORI  HH AO1 - R IY0\nHORIGUCHI  HH AO2 - R IH0 - G UW1 - CH IY0\nHORINE  HH AO1 - R IY0 N\nHORIUCHI  HH AO0 - R IY0 - UW1 - CH IY0\nHORIZON  HH ER0 - AY1 - Z AH0 N\nHORIZON'S  HH ER0 - AY1 - Z AH0 N Z\nHORIZONS  HH ER0 - AY1 - Z AH0 N Z\nHORIZONTAL  HH AO2 - R AH0 - Z AA1 N - T AH0 L\nHORIZONTALLY  HH AO2 - R IH0 - Z AA1 N - T AH0 - L IY0\nHORIZONTALLY(2)  HH AO0 - R IH0 - Z AO1 - N AH0 - L IY0\nHORKEY  HH AO1 R - K IY0\nHORKY  HH AO1 R - K IY0\nHORLACHER  HH AO1 R - L AH0 - K ER0\nHORLICK  HH AO1 R - L IH0 K\nHORMAN  HH AO1 R - M AH0 N\nHORMANN  HH AO1 R - M AH0 N\nHORMATS  HH AO1 R - M AE0 T S\nHORMEL  HH AO0 R - M EH1 L\nHORMONAL  HH AO1 R - M OW2 - N AH0 L\nHORMONE  HH AO1 R - M OW2 N\nHORMONES  HH AO1 R - M OW2 N Z\nHORMUZ  HH AO1 R - M UW0 Z\nHORN  HH AO1 R N\nHORN'S  HH AO1 R N Z\nHORNACK  HH AO1 R - N AH0 K\nHORNADAY  HH AO1 R - N AH0 - D EY2\nHORNAK  HH AO1 R - N AH0 K\nHORNBACK  HH AO1 R N - B AE2 K\nHORNBAKER  HH AO1 R N - B AH0 - K ER0\nHORNBEAK  HH AO1 R N - B AH0 K\nHORNBECK  HH AO1 R N - B EH2 K\nHORNBERGER  HH AO1 R N - B ER0 - G ER0\nHORNBILL  HH AO1 R N - B IH2 L\nHORNBILLS  HH AO1 R N - B IH2 L Z\nHORNBLENDE  HH AO1 R N - B L EH2 N D\nHORNBLOWER  HH AO1 R N - B L OW2 - ER0\nHORNBOOK  HH AO1 R N - B UH2 K\nHORNBOSTEL  HH AO1 R N - B AH0 - S T AH0 L\nHORNBOSTEL(2)  HH AO1 R N - B AH0 - S AH0 L\nHORNBROOK  HH AO1 R N - B R UH2 K\nHORNBUCKLE  HH AO1 R N - B AH0 - K AH0 L\nHORNBURG  HH AO1 R N - B ER0 G\nHORNBY  HH AO1 R N - B IY0\nHORNE  HH AO1 R N\nHORNED  HH AO1 R N D\nHORNELL  HH AO2 R - N EH1 L\nHORNER  HH AO1 R - N ER0\nHORNERE  HH AO1 R - N ER0\nHORNET  HH AO1 R - N IH0 T\nHORNET'S  HH AO1 R - N AH0 T S\nHORNETS  HH AO1 R - N AH0 T S\nHORNEY  HH AO1 R - N IY0\nHORNICK  HH AO1 R - N IH0 K\nHORNIG  HH AO1 R - N IH0 G\nHORNIK  HH AO1 R - N IH0 K\nHORNING  HH AO1 R - N IH0 NG\nHORNLESS  HH AO1 R N - L AH0 S\nHORNLIKE  HH AO1 R N - L AY2 K\nHORNOR  HH AO1 R - N ER0\nHORNS  HH AO1 R N Z\nHORNSBY  HH AO1 R N Z - B IY0\nHORNSTEIN  HH AO1 R N - S T AY2 N\nHORNSTEIN(2)  HH AO1 R N - S T IY2 N\nHORNUNG  HH AO1 R - N AH0 NG\nHORNY  HH AO1 R - N IY0\nHORNYAK  HH AO1 R N - Y AE0 K\nHOROSCOPE  HH AO1 - R AH0 - S K OW2 P\nHOROSCOPES  HH AO1 - R AH0 - S K OW2 P S\nHOROVITZ  HH AA1 - R AH0 - V IH0 T S\nHOROWITZ  HH AO1 - R OW0 - IH0 T S\nHORR  HH AO1 R\nHORRELL  HH AO1 - R AH0 L\nHORRENDOUS  HH AO2 - R EH1 N - D AH0 S\nHORRENDOUSLY  HH AO2 - R EH1 N - D AH0 S - L IY0\nHORRIBLE  HH AO1 - R AH0 - B AH0 L\nHORRIBLY  HH AO1 - R AH0 - B L IY0\nHORRID  HH AO1 - R AH0 D\nHORRIFIC  HH AO0 - R IH1 - F IH0 K\nHORRIFIED  HH AO1 - R AH0 - F AY2 D\nHORRIFY  HH AO1 - R AH0 - F AY2\nHORRIFYING  HH AO1 - R AH0 - F AY2 - IH0 NG\nHORRIGAN  HH AO1 - R AH0 - G AH0 N\nHORROCKS  HH AO1 - R AH0 K S\nHORROR  HH AO1 - R ER0\nHORRORS  HH AO1 - R ER0 Z\nHORS  HH AO1 R Z\nHORS(2)  AO2 R\nHORS-D-OEUVRE  AO2 R - D ER1 V\nHORSCH  HH AO1 R SH\nHORSE  HH AO1 R S\nHORSE'S  HH AO1 R - S AH0 Z\nHORSEBACK  HH AO1 R S - B AE2 K\nHORSEFLESH  HH AO1 R S - F L EH2 SH\nHORSEHEAD  HH AO1 R S - HH EH2 D\nHORSELY  HH AO1 R S - L IY0\nHORSEMAN  HH AO1 R S - M AH0 N\nHORSEMANSHIP  HH AO1 R S - M AH0 N - SH IH0 P\nHORSEMEN  HH AO1 R S - M AH0 N\nHORSEPLAY  HH AO1 R S - P L EY2\nHORSEPOWER  HH AO1 R S - P AW2 - ER0\nHORSERADISH  HH AO1 R S - R AE2 - D IH0 SH\nHORSES  HH AO1 R - S AH0 Z\nHORSES'  HH AO1 R - S IH0 Z\nHORSES(2)  HH AO1 R - S IH0 Z\nHORSESHOE  HH AO1 R S - SH UW2\nHORSESHOES  HH AO1 R S - SH UW2 Z\nHORSETAIL  HH AO1 R S - T EY2 L\nHORSETAILS  HH AO1 R S - T EY2 L Z\nHORSEY  HH AO1 R - S IY0\nHORSFALL  HH AO1 R S - F AH0 L\nHORSHAM  HH AO1 R - SH AH0 M\nHORSHAM'S  HH AO1 R - SH AH0 M Z\nHORSING  HH AO1 R - S IH0 NG\nHORSLEY  HH AO1 R S - L IY0\nHORSMAN  HH AO1 R S - M AH0 N\nHORST  HH AO1 R S T\nHORSTMAN  HH AO1 R S T - M AH0 N\nHORSTMANN  HH AO1 R S T - M AH0 N\nHORTA  HH AO1 R - T AH0\nHORTEN  HH AO1 R - T AH0 N\nHORTER  HH AO1 R - T ER0\nHORTICULTURAL  HH AO2 R - T AH0 - K AH1 L - CH ER0 - AH0 L\nHORTICULTURE  HH AO1 R - T IH0 - K AH2 L - CH ER0\nHORTICULTURIST  HH AO2 R - T IH0 - K AH1 L - CH ER0 - IH0 S T\nHORTMAN  HH AO1 R T - M AH0 N\nHORTON  HH AO1 R - T AH0 N\nHORUS  HH AO1 - R AH0 S\nHORVAC  HH AO1 R - V AE0 K\nHORVAC'S  HH AO1 R - V AE0 K S\nHORVAT  HH AO1 R - V AH0 T\nHORVATH  HH AO1 R - V AE0 TH\nHORVATH'S  HH AO1 R - V AE0 TH S\nHORVITZ  HH AO1 R - V IH0 T S\nHORWATH  HH AO1 R - W AO0 TH\nHORWICH  HH AO1 R - W IH0 K\nHORWITZ  HH AO1 R - W IH0 T S\nHOSACK  HH AA1 - S AH0 K\nHOSAKAWA  HH OW0 - S AH0 - K AA1 - W AH0\nHOSCH  HH AO1 SH\nHOSE  HH OW1 Z\nHOSEA  HH OW0 - S IY1 - AH0\nHOSEA'S  HH OW0 - Z IY1 - AH0 Z\nHOSEA'S(2)  HH OW0 - Z EY1 - AH0 Z\nHOSEA(2)  HH OW0 - Z EY1 - AH0\nHOSED  HH OW1 Z D\nHOSEK  HH OW1 - S EH0 K\nHOSELTON  HH AH0 - S EH1 L - T AH0 N\nHOSES  HH OW1 - Z IH0 Z\nHOSEY  HH OW1 - Z IY0\nHOSFORD  HH AA1 S - F ER0 D\nHOSHAW  HH AA1 - SH AO0\nHOSHIMOTO  HH OW0 - SH IY0 - M OW1 - T OW0\nHOSICK  HH AA1 - S IH0 K\nHOSIE  HH OW1 - Z IY0\nHOSIERY  HH OW1 - ZH ER0 - IY0\nHOSING  HH OW1 - Z IH0 NG\nHOSKIN  HH AA1 S - K IH0 N\nHOSKING  HH AA1 - S K IH0 NG\nHOSKINS  HH AA1 S - K IH0 N Z\nHOSKINSON  HH AA1 S - K IH0 N - S AH0 N\nHOSKYNS  HH AO1 - S K IH0 N Z\nHOSLER  HH AA1 - S AH0 - L ER0\nHOSLER(2)  HH AA1 S - L ER0\nHOSLEY  HH AA1 S - L IY0\nHOSMAN  HH AA1 S - M AH0 N\nHOSNER  HH AA1 S - N ER0\nHOSNI  HH OW1 Z - N IY0\nHOSNI(2)  HH AO1 S - N IY0\nHOSOKA  HH OW2 - S AA1 - K AH0\nHOSOKA'S  HH OW2 - S AA1 - K AH0 Z\nHOSOKAWA  HH OW2 - S AH0 - K AA1 - W AH0\nHOSOKAWA'S  HH OW2 - S AH0 - K AA1 - W AH0 Z\nHOSPICE  HH AA1 S - P AH0 S\nHOSPICE'S  HH AA1 S - P AH0 - S IH0 Z\nHOSPICES  HH AA1 S - P AH0 - S IH0 Z\nHOSPITABLE  HH AA1 - S P IH1 - T AH0 - B AH0 L\nHOSPITAL  HH AA1 S - P IH2 - T AH0 L\nHOSPITAL'S  HH AA1 S - P IH2 - T AH0 L Z\nHOSPITALITY  HH AA2 S - P AH0 - T AE1 - L AH0 - T IY0\nHOSPITALIZATION  HH AA2 S - P IH0 - T AH0 L - AH0 - Z EY1 - SH AH0 N\nHOSPITALIZATIONS  HH AA2 S - P IH0 - T AH0 L - AH0 - Z EY1 - SH AH0 N Z\nHOSPITALIZE  HH AO1 S - P IH2 - T AH0 L - AY2 Z\nHOSPITALIZED  HH AA1 S - P IH0 - T AH0 L - AY2 Z D\nHOSPITALS  HH AA1 S - P IH2 - T AH0 L Z\nHOSPITALS'  HH AO1 S - P IH0 - T AH0 L Z\nHOSS  HH AA1 S\nHOSSACK  HH AA1 - S AH0 K\nHOSSAIN  HH AH0 - S EY1 N\nHOSSEIN  HH AO1 - S EY2 N\nHOSSEINI  HH OW0 - S EY0 - IY1 - N IY0\nHOSSLER  HH AA1 - S AH0 - L ER0\nHOSSLER(2)  HH AA1 S - L ER0\nHOST  HH OW1 S T\nHOST'S  HH OW1 S T S\nHOSTAGE  HH AA1 - S T IH0 JH\nHOSTAGES  HH AA1 - S T AH0 - JH AH0 Z\nHOSTAGES'  HH AO1 - S T IH0 - JH IH0 Z\nHOSTED  HH OW1 - S T IH0 D\nHOSTEL  HH AA1 - S T AH0 L\nHOSTELS  HH AA1 - S T AH0 L Z\nHOSTENCH  HH AO1 - S T AH0 N CH\nHOSTER  HH OW1 - S T ER0\nHOSTERMAN  HH OW1 - S T ER0 - M AH0 N\nHOSTESS  HH OW1 - S T AH0 S\nHOSTESSES  HH OW1 - S T AH0 - S AH0 Z\nHOSTESSES(2)  HH OW1 - S T AH0 - S IH0 Z\nHOSTETLER  HH AA1 - S T IH0 - T AH0 L - ER0\nHOSTETTER  HH AA1 - S T IH0 - T ER0\nHOSTETTLER  HH AA1 - S T IH0 - T AH0 L - ER0\nHOSTETTLER(2)  HH AA1 - S T EH0 T - L ER0\nHOSTILE  HH AA1 - S T AH0 L\nHOSTILE(2)  HH AA0 - S T AY1 L\nHOSTILITIES  HH AA0 - S T IH1 - L AH0 - T IY0 Z\nHOSTILITY  HH AA0 - S T IH1 - L AH0 - T IY0\nHOSTING  HH OW1 - S T IH0 NG\nHOSTLER  HH AA1 S - L ER0\nHOSTS  HH OW1 S T S\nHOSTS(2)  HH OW1 S S\nHOSTS(3)  HH OW1 S\nHOSTUTLER  HH AA1 - S T UW0 - T AH0 L - ER0\nHOSTUTLER(2)  HH AA1 - S T UW0 T - L ER0\nHOT  HH AA1 T\nHOT-CROSS  HH AA1 T - K R AO1 S\nHOT-LINE  HH AA1 T - L AY1 N\nHOTALING  HH AA1 - T AH0 L - IH0 NG\nHOTARD  HH AA1 - T ER0 D\nHOTBED  HH AA1 T - B EH2 D\nHOTBEDS  HH AA1 T - B EH2 D Z\nHOTCAKE  HH AA1 T - K EY2 K\nHOTCAKES  HH AA1 T - K EY2 K S\nHOTCHKIN  HH AA1 CH - K IH0 N\nHOTCHKISS  HH AA1 CH - K IH0 S\nHOTDOG  HH AA1 T - D AO2 G\nHOTDOGS  HH AA1 T - D AO2 G Z\nHOTEL  HH OW0 - T EH1 L\nHOTEL'S  HH OW0 - T EH1 L Z\nHOTELIER  HH OW0 - T EH1 - L Y ER0\nHOTELIERS  HH OW0 - T EH1 - L Y ER0 Z\nHOTELS  HH OW0 - T EH1 L Z\nHOTELS'  HH OW0 - T EH1 L Z\nHOTH  HH AA1 TH\nHOTHOUSE  HH AA1 T - HH AW2 S\nHOTLANTA  HH AO0 T - L AE1 N - T AH0\nHOTLINE  HH AA1 T - L AY2 N\nHOTLINES  HH AA1 T - L AY2 N Z\nHOTLY  HH AA1 T - L IY0\nHOTS  HH AA1 T S\nHOTSHOT  HH AA1 - CH AA2 T\nHOTT  HH AA1 T\nHOTTEL  HH AA1 - T AH0 L\nHOTTELET  HH AA1 T - L EH0 T\nHOTTELET'S  HH AA1 T - L EH0 T S\nHOTTENSTEIN  HH AA1 - T AH0 N - S T AY0 N\nHOTTENSTEIN(2)  HH AA1 - T AH0 N - S T IY0 N\nHOTTER  HH AA1 - T ER0\nHOTTEST  HH AA1 - T AH0 S T\nHOTTINGER  HH AA1 - T IH0 - NG ER0\nHOTTLE  HH AA1 - T AH0 L\nHOTTMAN  HH AA1 T - M AH0 N\nHOTWIRE  HH AA1 T - W AY2 - ER0\nHOTWIRED  HH AA1 T - W AY2 - ER0 D\nHOTZ  HH AA1 T S\nHOTZE  HH OW1 T Z\nHOU  HH UW1\nHOUCHEN  HH AW1 - K AH0 N\nHOUCHENS  HH AW1 - K AH0 N Z\nHOUCHIN  HH AW1 - K IH0 N\nHOUCHINS  HH AW1 - K IH0 N Z\nHOUCK  HH AW1 K\nHOUDAILLE  HH UW1 - D EY2 L\nHOUDE  HH AW1 D\nHOUDEK  HH AW1 - D IH0 K\nHOUDESHELL  HH UW1 - D IH0 - SH AH0 L\nHOUDINI  HH UW0 - D IY1 - N IY0\nHOUDINI'S  HH UW0 - D IY1 - N IY0 Z\nHOUFF  HH OW1 F\nHOUG  HH AW1 G\nHOUGE  HH AW1 JH\nHOUGEN  HH AW1 - G AH0 N\nHOUGH  HH AH1 F\nHOUGHAM  HH AW1 - AH0 M\nHOUGHLAND  HH AW1 - L AH0 N D\nHOUGHS  HH AW1 Z\nHOUGHTALING  HH AO1 - T AH0 L - IH0 NG\nHOUGHTON  HH AO1 - T AH0 N\nHOUGHTON'S  HH AO1 - T AH0 N Z\nHOUGLAND  HH AW1 G - L AH0 N D\nHOUK  HH AW1 K\nHOULE  HH AW1 L\nHOULIHAN  HH UW1 - L IH0 - HH AE0 N\nHOULIHAN'S  HH UW1 - L IH0 - HH AE0 N Z\nHOULTON  HH OW1 L - T AH0 N\nHOUND  HH AW1 N D\nHOUNDED  HH AW1 N - D IH0 D\nHOUNDING  HH AW1 N - D IH0 NG\nHOUNDS  HH AW1 N D Z\nHOUNSHELL  HH AW1 N - SH AH0 L\nHOUP  HH UW1 P\nHOUPT  HH UW1 P T\nHOUR  AW1 - ER0\nHOUR'S  AW1 - ER0 Z\nHOUR(2)  AW1 R\nHOURGLASS  AW1 - ER0 - G L AE2 S\nHOURIGAN  AW1 - R IH0 - G AE0 N\nHOURIHAN  AW0 - R IY1 - HH AA0 N\nHOURLONG  AW1 R - L AO2 NG\nHOURLY  AW1 R - L IY0\nHOURS  AW1 - ER0 Z\nHOURS'  AW1 R Z\nHOURS(2)  AW1 R Z\nHOUSAND  HH AW1 - S AH0 N D\nHOUSDEN  HH AW1 S - D AH0 N\nHOUSE  HH AW1 S\nHOUSE'S  HH AW1 - S IH0 Z\nHOUSEAL  HH AW1 - S AH0 L\nHOUSEBOAT  HH AW1 S - B OW2 T\nHOUSEBROKEN  HH AW1 S - B R OW2 - K AH0 N\nHOUSECLEANING  HH AW1 S K - L IY2 - N IH0 NG\nHOUSED  HH AW1 Z D\nHOUSEFUL  HH AW1 S - F AH0 L\nHOUSEGUEST  HH AW1 S - G EH0 S T\nHOUSEHOLD  HH AW1 S - HH OW2 L D\nHOUSEHOLD'S  HH AW1 S - HH OW2 L D Z\nHOUSEHOLDER  HH AW1 S - HH OW2 L - D ER0\nHOUSEHOLDERS  HH AW1 S - HH OW2 L - D ER0 Z\nHOUSEHOLDS  HH AW1 S - HH OW2 L D Z\nHOUSEKEEPER  HH AW1 S - K IY2 - P ER0\nHOUSEKEEPERS  HH AW1 S - K IY2 - P ER0 Z\nHOUSEKEEPING  HH AW1 S - K IY2 - P IH0 NG\nHOUSEKNECHT  HH AW1 S K - N IH0 K T\nHOUSEL  HH AW1 - S AH0 L\nHOUSEMAN  HH AW1 S - M AH0 N\nHOUSEMAN'S  HH AW1 S - M AH0 N Z\nHOUSER  HH AW1 - Z ER0\nHOUSES  HH AW1 - S AH0 Z\nHOUSES'  HH AW1 - S IH0 Z\nHOUSES(2)  HH AW1 - S IH0 Z\nHOUSEWARE  HH AW1 S - W EH2 R\nHOUSEWARES  HH AW1 S - W EH2 R Z\nHOUSEWIFE  HH AW1 S - W AY2 F\nHOUSEWIVES  HH AW1 S - W AY2 V Z\nHOUSEWORK  HH AW1 S - W ER2 K\nHOUSEWORTH  HH AW1 S - W ER2 TH\nHOUSEWRIGHT  HH AW1 S - R AY2 T\nHOUSH  HH AW1 SH\nHOUSHOLDER  HH AW1 SH - OW0 L - D ER0\nHOUSING  HH AW1 - Z IH0 NG\nHOUSINGS  HH AW1 - Z IH0 NG Z\nHOUSKA  HH AW1 S - K AH0\nHOUSLEY  HH AW1 S - L IY0\nHOUSMAN  HH AW1 S - M AH0 N\nHOUSTON  HH Y UW1 - S T AH0 N\nHOUSTON'S  HH Y UW1 - S T AH0 N Z\nHOUSTONIAN  HH UW2 - S T OW1 - N IY0 - AH0 N\nHOUSTONIAN(2)  HH Y UW2 - S T OW1 - N IY0 - AH0 N\nHOUT  HH AW1 T\nHOUTCHENS  HH AW1 - CH AH0 N Z\nHOUTEN  HH AW1 - T EH0 N\nHOUTEN'S  HH AW1 - T EH0 N Z\nHOUTMAN  HH AW1 T - M AH0 N\nHOUTS  HH AW1 T S\nHOUTZ  HH AW1 T S\nHOUX  HH UW1\nHOUY  HH AA1 - AY0\nHOUZE  HH AW1 Z\nHOVAN  HH OW1 - V AH0 N\nHOVANEC  HH AH0 - V AE1 - N IH0 K\nHOVATER  HH OW1 - V AH0 - T ER0\nHOVATTER  HH AA1 - V AH0 - T ER0\nHOVDA  HH AA1 V - D AH0\nHOVDE  HH OW1 V D\nHOVDEN  HH AA1 V - D AH0 N\nHOVE  HH OW1 V\nHOVEL  HH AH1 - V AH0 L\nHOVELS  HH AH1 - V AH0 L Z\nHOVEN  HH OW1 - V AH0 N\nHOVER  HH AH1 - V ER0\nHOVERCRAFT  HH AH1 - V ER0 - K R AE2 F T\nHOVERED  HH AH1 - V ER0 D\nHOVERFLIES  HH AH1 - V ER0 - F L AY2 Z\nHOVERFLY  HH AH1 - V ER0 - F L AY2\nHOVERING  HH AH1 - V ER0 - IH0 NG\nHOVERING(2)  HH AH1 - V R IH0 NG\nHOVERMALE  HH AH1 - V ER0 - M AH0 L\nHOVERS  HH AH1 - V ER0 Z\nHOVERSON  HH AH1 - V ER0 - S AH0 N\nHOVEY  HH OW1 - V IY0\nHOVHANESS  HH AO2 V - HH AE1 - N IH0 S\nHOVING  HH OW1 - V IH0 NG\nHOVIOUS  HH OW1 - V IY0 - AH0 S\nHOVIS  HH OW1 - V IH0 S\nHOVLAND  HH AA1 V - L AH0 N D\nHOVNANIAN  HH AA2 V - N EY1 - N IY0 - AH0 N\nHOVORKA  HH AH0 - V AO1 R - K AH0\nHOVSEPIAN  HH AH0 V - S IY1 - P IY0 - AH0 N\nHOVY  HH OW1 - V IY0\nHOW  HH AW1\nHOW'D  HH AW1 D\nHOW'RE  HH AW1 - ER0\nHOW'S  HH AW1 Z\nHOWALD  HH AW1 - AH0 L D\nHOWARD  HH AW1 - ER0 D\nHOWARD'S  HH AW1 - ER0 D Z\nHOWARTH  HH AW1 - AA0 R TH\nHOWAT  HH AW1 - AH0 T\nHOWATT  HH AW1 - AH0 T\nHOWCROFT  HH AW1 - K R AH0 F T\nHOWDEN  HH AW1 - D AH0 N\nHOWDESHELL  HH AW1 - D IH0 - SH EH0 L\nHOWDY  HH AW1 - D IY0\nHOWDYSHELL  HH AW1 - D IH0 - SH EH0 L\nHOWE  HH AW1\nHOWE'S  HH AW1 Z\nHOWELL  HH AW1 - AH0 L\nHOWELL'S  HH AW1 - AH0 L Z\nHOWELLS  HH AW1 - AH0 L Z\nHOWENSTINE  HH AW1 - IH0 N - S T IY0 N\nHOWER  HH AW1 - ER0\nHOWERTER  HH AW1 - ER0 - T ER0\nHOWERTON  HH AW0 - ER1 - T AH0 N\nHOWERY  HH AW1 - ER0 - IY0\nHOWES  HH AW1 Z\nHOWETH  HH AW1 - IH0 TH\nHOWEVER  HH AW2 - EH1 - V ER0\nHOWEY  HH AW1 - IY0\nHOWIE  HH AW1 - IY0\nHOWIE'S  HH AW1 - IY0 Z\nHOWINGTON  HH AW1 - IH0 NG - T AH0 N\nHOWISON  HH AW1 - IH0 - S AH0 N\nHOWITT  HH AW1 - IH0 T\nHOWITZER  HH AW1 - AH0 T - S ER0\nHOWITZERS  HH AW1 - AH0 T - S ER0 Z\nHOWK  HH AW1 K\nHOWL  HH AW1 L\nHOWLAND  HH AW1 - L AH0 N D\nHOWLE  HH AW1 - AH0 L\nHOWLED  HH AW1 L D\nHOWLER  HH AW1 - L ER0\nHOWLETT  HH AW1 - L IH0 T\nHOWLEY  HH AW1 - L IY0\nHOWLING  HH AW1 - L IH0 NG\nHOWLS  HH AW1 L Z\nHOWMET  HH AW1 - M AH0 T\nHOWORTH  HH AA1 - W ER0 TH\nHOWRY  HH AW1 - R IY0\nHOWSARE  HH AW1 - S ER0\nHOWSE  HH AW1 Z\nHOWSELL  HH AW1 - Z AH0 L\nHOWSER  HH AW1 - Z ER0\nHOWSON  HH AW1 - S AH0 N\nHOWTEK  HH AW1 - T EH2 K\nHOWTON  HH AW1 - T AH0 N\nHOWZE  HH AW1 Z\nHOXIE  HH AA1 K - S IY0\nHOXSEY  HH AA1 K - S IY0\nHOXSIE  HH AA1 K - S IY0\nHOXWORTH  HH AA1 K S - W ER0 TH\nHOY  HH OY1\nHOYE  HH OY1\nHOYER  HH OY1 - ER0\nHOYING  HH OY1 - IH0 NG\nHOYLAKE  HH OY1 - L EY2 K\nHOYLAND  HH OY1 - L AH0 N D\nHOYLE  HH OY1 L\nHOYNE  HH OY1 N\nHOYOS  HH OY1 - OW0 Z\nHOYT  HH OY1 T\nHOYVALD  HH OY1 - V AH0 L D\nHRABAK  HH R AA1 - B AH0 K\nHRABAK(2)  R AA1 - B AH0 K\nHRAWI  HH ER0 - W AA1 - W IY0\nHRAWI(2)  HH R AA1 - W IY0\nHRDLICKA  HH ER0 D - L IH1 - S K AH0\nHREHA  HH R IY1 - HH AH0\nHREHA(2)  R IY1 - HH AH0\nHREN  HH R EH1 N\nHREN(2)  R EH1 N\nHRIBAR  HH R IH0 - B AA1 R\nHRIBAR(2)  R IH0 - B AA1 R\nHRITZ  HH R IH1 T S\nHRITZ(2)  R IH1 T S\nHRIVNAK  HH R IH1 V - N AH0 K\nHRIVNAK(2)  R IH1 V - N AH0 K\nHRNCIR  HH ER1 N - CH ER0\nHRNCIR(2)  HH ER1 N - S IH0 R\nHRON  HH R AA1 N\nHRON(2)  R AA1 N\nHRONEK  HH R OW1 - N IH0 K\nHRONEK(2)  R OW1 - N IH0 K\nHROVAT  HH R OW1 - V AH0 T\nHROVAT(2)  R OW1 - V AH0 T\nHRUBIK  HH IH0 - R UW1 - B IH0 K\nHRUBIK(2)  HH R UW1 - B IH0 K\nHRUBIK(3)  R UW1 - B IH0 K\nHRUBY  HH R UW1 - B IY0\nHRUBY(2)  R UW1 - B IY0\nHRUSKA  HH R AH1 - S K AH0\nHRUSKA(2)  R AH1 - S K AH0\nHRUSKA(3)  R UW1 - S K AH0\nHSIA  SH AA1\nHSIAO  SH AW1\nHSIEH  SH IY0 - EH1\nHSIUNG  SH IY0 - AH1 NG\nHSIUNG'S  SH Y AH1 NG Z\nHSU  SH UW1\nHU  HH UW1\nHUA  HH UW1 - AH0\nHUA(2)  HH W AA1\nHUACHUCA  HH W AA0 - CH UW1 - K AH0\nHUACHUCA(2)  W AA0 - CH UW1 - K AH0\nHUADONG  HH W AA1 - D OW2 NG\nHUAIROU  HH W AY1 - R UW0\nHUALLAGA  HH W AA0 - L AA1 - G AH0\nHUALLAGA(2)  W AA0 - L AA1 - G AH0\nHUAN  HH W AA1 N\nHUANENG  HH W AA1 - N EH1 NG\nHUANG  HH W AE1 NG\nHUARD  HH W AA1 R D\nHUB  HH AH1 B\nHUBBARD  HH AH1 - B ER0 D\nHUBBARD'S  HH AH1 - B ER0 D Z\nHUBBART  HH AH1 - B ER0 T\nHUBBELL  HH AH1 - B AH0 L\nHUBBELL'S  HH AH1 - B AH0 L Z\nHUBBERT  HH AH1 - B ER0 T\nHUBBLE  HH AH1 - B AH0 L\nHUBBLE'S  HH AH1 - B AH0 L Z\nHUBBS  HH AH1 B Z\nHUBBUB  HH AH1 - B AH0 B\nHUBBY  HH AH1 - B IY0\nHUBCAP  HH AH1 B - K AE2 P\nHUBCAPS  HH AH1 B - K AE2 P S\nHUBCO  HH AH1 B - K OW0\nHUBE  HH Y UW1 B\nHUBER  HH Y UW1 - B ER0\nHUBERMAN  HH UW1 - B ER0 - M AH0 N\nHUBERS  HH UW1 - B ER0 Z\nHUBERT  HH Y UW1 - B ER0 T\nHUBERT'S  HH Y UW1 - B ER0 T S\nHUBERTA  HH UW0 - B EH1 R - T AH0\nHUBERTO  HH UW0 - B EH1 R - T OW0\nHUBERTY  HH AH1 - B ER0 - T IY0\nHUBKA  HH AH1 B - K AH0\nHUBLER  HH Y UW1 - B AH0 L - ER0\nHUBLER(2)  HH Y UW1 - B L ER0\nHUBLEY  HH AH1 - B L IY0\nHUBNER  HH AH1 B - N ER0\nHUBOR  HH Y UW1 - B ER0\nHUBRIS  HH Y UW1 - B R AH0 S\nHUBS  HH AH1 B Z\nHUCH  HH AH1 CH\nHUCHISON  HH AH1 - CH AH0 - S IH0 N\nHUCK  HH AH1 K\nHUCKABA  HH AH1 - K AH0 - B AH0\nHUCKABAY  HH AH1 - K AH0 - B EY2\nHUCKABEE  HH AH1 - K AH0 - B IY0\nHUCKABY  HH AH1 - K AH0 - B IY0\nHUCKE  HH AH1 K\nHUCKEBA  HH AH1 - K IH0 - B AH0\nHUCKELBY  HH AH1 - K AH0 L - B IY0\nHUCKELBY'LL  HH AH1 - K AH0 L - B IY0 - AH0 L\nHUCKELBY'S  HH AH1 - K AH0 L - B IY0 Z\nHUCKER  HH AH1 - K ER0\nHUCKINS  HH AH1 - K IH0 N Z\nHUCKLE  HH AH1 - K AH0 L\nHUCKLEBERRY  HH AH1 - K AH0 L - B EH2 - R IY0\nHUCKS  HH AH1 K S\nHUCKSTEP  HH AH1 K - S T IH0 P\nHUCKSTER  HH AH1 K - S T ER0\nHUCKSTERS  HH AH1 K - S T ER0 Z\nHUD  HH AH1 D\nHUD'S  HH AH1 D Z\nHUDAK  HH UW1 - D AH0 K\nHUDDIE  HH AH1 - D IY0\nHUDDLE  HH AH1 - D AH0 L\nHUDDLED  HH AH1 - D AH0 L D\nHUDDLES  HH AH1 - D AH0 L Z\nHUDDLESON  HH AH1 - D AH0 L - S AH0 N\nHUDDLESTON  HH AH1 - D AH0 L - S T AH0 N\nHUDDLING  HH AH1 - D AH0 L - IH0 NG\nHUDDLING(2)  HH AH1 D - L IH0 NG\nHUDDY  HH AH1 - D IY0\nHUDEC  HH UW1 - D IH0 K\nHUDECEK  HH AH1 - D IH0 - CH EH0 K\nHUDEK  HH UW1 - D IH0 K\nHUDELSON  HH AH1 - D IH0 L - S AH0 N\nHUDGENS  HH AH1 - JH AH0 N Z\nHUDGINS  HH AH1 - JH IH0 N Z\nHUDKINS  HH AH1 D - K IH0 N Z\nHUDLER  HH UW1 - D AH0 - L ER0\nHUDLER(2)  HH UW1 D - L ER0\nHUDLOW  HH AH1 D - L OW0\nHUDMAN  HH AH1 D - M AH0 N\nHUDNALL  HH AH1 D - N AH0 L\nHUDNELL  HH AH1 D - N AH0 L\nHUDNUT  HH AH1 D - N AH2 T\nHUDOCK  HH AH1 - D AH0 K\nHUDON  HH UW1 - D AH0 N\nHUDSON  HH AH1 D - S AH0 N\nHUDSON'S  HH AH1 D - S AH0 N Z\nHUDSPETH  HH AH1 D - S P IH0 TH\nHUDSUCKER  HH AH1 D - S AH2 - K ER0\nHUDWON  HH AH1 D - W AH0 N\nHUDY  HH Y UW1 - D IY0\nHUDZIK  HH AH1 D - Z IH0 K\nHUE  HH Y UW1\nHUEBEL  HH UH1 - B AH0 L\nHUEBER  HH UH1 - B ER0\nHUEBERT  HH UH1 - B ER0 T\nHUEBNER  HH Y UW1 B - N ER0\nHUEBSCH  HH UH1 B SH\nHUED  HH Y UW1 D\nHUEGEL  HH UH1 - G AH0 L\nHUEGLIN  HH Y UW1 - G L IH0 N\nHUELSKAMP  HH UH1 L - S K AE0 M P\nHUELSMAN  HH UH1 L S - M AH0 N\nHUELSMANN  HH UH1 L S - M AH0 N\nHUENINK  HH UH1 - N IH0 NG K\nHUERST  HH ER1 S T\nHUERTA  HH W EH1 R - T AH2\nHUERTA(2)  W EH1 R - T AH2\nHUERTER  HH ER1 - T ER0\nHUES  HH Y UW1 Z\nHUESMAN  HH UH1 S - M AH0 N\nHUESTIS  HH UH1 - S T IH0 S\nHUESTON  HH UH1 - S T AH0 N\nHUETHER  HH UH1 - DH ER0\nHUETT  HH UW1 T\nHUETTA  HH UW0 - EH1 - T AH0\nHUETTE  HH UW1 T\nHUETTL  HH UH1 - T AH0 L\nHUETTNER  HH UH1 T - N ER0\nHUEY  HH Y UW1 - IY0\nHUFBAUER  HH AH1 F - B AW2 - ER0\nHUFF  HH AH1 F\nHUFF'S  HH AH1 F S\nHUFFAKER  HH AH1 - F AH0 - K ER0\nHUFFED  HH AH1 F T\nHUFFER  HH AH1 - F ER0\nHUFFINE  HH AH1 - F AY2 N\nHUFFINES  HH AH1 - F AY2 N Z\nHUFFING  HH AH1 - F IH0 NG\nHUFFINGTON  HH AH1 - F IH0 NG - T AH0 N\nHUFFINGTON'S  HH AH1 - F IH0 NG - T AH0 N Z\nHUFFMAN  HH AH1 F - M AH0 N\nHUFFMASTER  HH AH1 F - M AE2 - S T ER0\nHUFFORD  HH AH1 - F ER0 D\nHUFFS  HH AH1 F S\nHUFFSTETLER  HH AH1 F - S T IH0 - T AH0 L - ER0\nHUFFSTETLER(2)  HH AH1 F - S T EH0 T - L ER0\nHUFFSTUTLER  HH AH1 F - S T UW0 - T AH0 L - ER0\nHUFFSTUTLER(2)  HH AH1 F - S T UW0 T - L ER0\nHUFFY  HH AH1 - F IY0\nHUFFY'S  HH AH1 - F IY0 Z\nHUFNAGEL  HH AH1 F - N EY2 - G AH0 L\nHUFNAGLE  HH AH1 F - N EY2 - G AH0 L\nHUFSTEDLER  HH AH1 F - S T IH0 - D AH0 L - ER0\nHUFSTEDLER(2)  HH AH1 F - S T IH0 D - L ER0\nHUFSTETLER  HH AH1 F - S T IH0 - T AH0 L - ER0\nHUFSTETLER(2)  HH AH1 F - S T EH0 T - L ER0\nHUG  HH AH1 G\nHUGE  HH Y UW1 JH\nHUGE(2)  Y UW1 JH\nHUGEL  HH UW1 - G AH0 L\nHUGELY  HH Y UW1 JH - L IY0\nHUGEST  HH Y UW1 - JH AH0 S T\nHUGETTE  HH AH0 - ZH EH1 T\nHUGG  HH AH1 G\nHUGGARD  HH AH1 - G ER0 D\nHUGGED  HH AH1 G D\nHUGGER  HH AH1 - G ER0\nHUGGETT  HH AH1 - G IH0 T\nHUGGIES  HH AH1 - G IY0 Z\nHUGGING  HH AH1 - G IH0 NG\nHUGGINS  HH AH1 - G IH0 N Z\nHUGGLER  HH AH1 G - L ER0\nHUGGY  HH AH1 - G IY0\nHUGH  HH Y UW1\nHUGH(2)  Y UW1\nHUGHART  HH AH1 G - HH AA2 R T\nHUGHART(2)  HH Y UW1 - AA2 R T\nHUGHART(3)  Y UW1 - AA2 R T\nHUGHBANKS  HH AH1 - B AH0 NG K S\nHUGHBANKS(2)  HH Y UW1 - B AH0 NG K S\nHUGHBANKS(3)  Y UW1 - B AH0 NG K S\nHUGHEN  HH Y UW1 - AH0 N\nHUGHEN(2)  Y UW1 - AH0 N\nHUGHES  HH Y UW1 Z\nHUGHES'  HH Y UW1 Z\nHUGHES'(2)  Y UW1 Z\nHUGHES'S  HH Y UW1 - Z IH0 Z\nHUGHES'S(2)  Y UW1 - Z IH0 Z\nHUGHES(2)  Y UW1 Z\nHUGHETT  HH Y UW1 - IH0 T\nHUGHETT(2)  Y UW1 - IH0 T\nHUGHETTE  HH Y UW2 - EH1 T\nHUGHETTE(2)  Y UW2 - EH1 T\nHUGHEY  HH AH1 - G IY0\nHUGHEY(2)  HH Y UW1 - IY0\nHUGHEY(3)  Y UW1 - IY0\nHUGHIE  HH Y UW1 - IY0\nHUGHIE(2)  Y UW1 - IY0\nHUGHLETT  HH Y UW1 - L IH0 T\nHUGHLETT(2)  Y UW1 - L IH0 T\nHUGHLEY  HH AH1 G - L IY0\nHUGHLEY(2)  HH Y UW1 - L IY0\nHUGHLEY(3)  Y UW1 - L IY0\nHUGHS  Y UW1 Z\nHUGHS(2)  HH Y UW1 Z\nHUGHSON  HH AH1 G - S AH0 N\nHUGHSON(2)  HH Y UW1 - S AH0 N\nHUGHSON(3)  Y UW1 - S AH0 N\nHUGHSTON  HH AH1 G - S T AH0 N\nHUGHSTON(2)  HH Y UW1 - S T AH0 N\nHUGHSTON(3)  Y UW1 - S T AH0 N\nHUGHY  HH Y UW1 - IY0\nHUGHY(2)  Y UW1 - IY0\nHUGILL  HH AH1 - JH AH0 L\nHUGLEY  HH AH1 G - L IY0\nHUGO  HH Y UW1 - G OW0\nHUGO'S  HH Y UW1 - G OW0 Z\nHUGO'S(2)  Y UW1 - G OW0 Z\nHUGO(2)  Y UW1 - G OW0\nHUGOTON  HH Y UW1 - G OW0 - T AH0 N\nHUGOTON(2)  Y UW1 - G OW0 - T AH0 N\nHUGS  HH AH1 G Z\nHUGUENIN  HH UW0 - G EY0 - N IY1 N\nHUGUENOT  HH Y UW1 - G AH0 - N AA2 T\nHUGUENOT(2)  Y UW1 - G AH0 - N AA2 T\nHUGUENOTS  HH Y UW1 - G AH0 - N AA2 T S\nHUGUENOTS(2)  Y UW1 - G AH0 - N AA2 T S\nHUGUET  HH UW1 - G EY0 T\nHUGULEY  HH AH1 - G Y UW0 - L IY0\nHUGUS  HH Y UW1 - G AH0 S\nHUGUS(2)  Y UW1 - G AH0 S\nHUH  HH AH1\nHUHN  HH AH1 N\nHUHTA  HH UW1 - T AH0\nHUI  HH UW1 - IH0\nHUIBREGTSE  HH UW1 - B R EH0 K T S\nHUIE  HH Y UW1 - IY0\nHUIE(2)  Y UW1 - IY0\nHUISH  HH Y UW1 - IH0 SH\nHUISH(2)  Y UW1 - IH0 SH\nHUISHMAN  HH UW1 S - M AH0 N\nHUITT  HH UW1 T\nHUIZAR  HH IH0 - Z AA1 R\nHUIZENGA  HH IH0 - Z EY1 NG - G AH0\nHUIZENGA'S  HH IH0 - Z EY1 NG - G AH0 Z\nHUIZINGA  HH IH0 - Z IY1 NG - G AH0\nHUKILL  HH Y UW1 - K IH0 L\nHUKILL(2)  Y UW1 - K IH0 L\nHUKSTRA  HH AH0 K - S T R AH0\nHULA  HH UW1 - L AH0\nHULBARD  HH AH1 L - B ER0 D\nHULBERT  HH AH1 L - B ER0 T\nHULBERT'S  HH AH1 L - B ER0 T S\nHULBURD  HH AH1 L - B ER0 D\nHULBURT  HH AH1 L - B ER0 T\nHULCE  HH AH1 L S\nHULCE'S  HH AH1 L - S AH0 Z\nHULDIE  HH AH1 - D IY0\nHULDY  HH AH1 L - D IY0\nHULEN  HH AH1 - L AH0 N\nHULET  HH UW1 - L IH0 T\nHULETT  HH Y UW1 - L IH0 T\nHULETT(2)  Y UW1 - L IH0 T\nHULETTE  HH Y UW2 - L EH1 T\nHULETTE(2)  Y UW2 - L EH1 T\nHULGAN  HH AH1 L - G AH0 N\nHULICK  HH Y UW1 - L IH0 K\nHULICK(2)  Y UW1 - L IH0 K\nHULIN  HH Y UW1 - L IH0 N\nHULIN(2)  Y UW1 - L IH0 N\nHULING  HH Y UW1 - L IH0 NG\nHULING(2)  Y UW1 - L IH0 NG\nHULINGS  HH Y UW1 - L IH0 NG Z\nHULINGS(2)  Y UW1 - L IH0 NG Z\nHULK  HH AH1 L K\nHULKING  HH AH1 L - K IH0 NG\nHULKS  HH AH1 L K S\nHULL  HH AH1 L\nHULL'S  HH AH1 L Z\nHULLABALOO  HH AH2 - L AH0 - B AH0 - L UW1\nHULLED  HH AH1 L D\nHULLENDER  HH UW1 - L EH0 N - D ER0\nHULLETT  HH UW1 - L IH0 T\nHULLIBER  HH AH1 - L IH0 - B ER0\nHULLINGER  HH AH1 L - IH0 - NG ER0\nHULLINGER(2)  HH AH1 - L IH0 N - JH ER0\nHULLS  HH AH1 L Z\nHULLUM  HH AH1 - L AH0 M\nHULME  HH AH1 L M\nHULON  HH Y UW1 - L AH0 N\nHULON'S  HH Y UW1 - L AH0 N Z\nHULOND  HH Y UW1 - L AH0 N D\nHULOND'S  HH Y UW1 - L AH0 N D Z\nHULS  HH AH1 L Z\nHULSE  HH AH1 L S\nHULSEBUS  HH AH1 L - S IH0 - B IH0 S\nHULSEY  HH AH1 L - S IY0\nHULSIZER  HH AH1 L - S AY2 - Z ER0\nHULSLANDER  HH AH1 L S - L AH0 N - D ER0\nHULSMAN  HH AH1 L S - M AH0 N\nHULST  HH AH1 L S T\nHULT  HH AH1 L T\nHULT'S  HH AH1 L T S\nHULTBERG  HH AH1 L T - B ER0 G\nHULTGREN  HH AH1 L T - G R EH0 N\nHULTMAN  HH AH1 L T - M AH0 N\nHULTON  HH AH1 L - T AH0 N\nHULTQUIST  HH AH1 L T - K W IH0 S T\nHULTS  HH AH1 L T S\nHULTZ  HH AH1 L T S\nHULVEY  HH AH1 L - V IY0\nHUM  HH AH1 M\nHUMAN  HH Y UW1 - M AH0 N\nHUMAN'S  HH Y UW1 - M AH0 N Z\nHUMAN(2)  Y UW1 - M AH0 N\nHUMANA  HH Y UW0 - M AE1 - N AH0\nHUMANA'S  HH Y UW0 - M AE1 - N AH0 Z\nHUMANE  HH Y UW0 - M EY1 N\nHUMANELY  HH Y UW0 - M EY1 N - L IY0\nHUMANISM  HH Y UW1 - M AH0 - N IH2 - Z AH0 M\nHUMANIST  HH Y UW1 - M AH0 - N IH0 S T\nHUMANISTIC  HH Y UW2 - M AH0 - N IH1 - S T IH0 K\nHUMANISTS  HH Y UW1 - M AH0 - N AH0 S T S\nHUMANISTS(2)  HH Y UW1 - M AH0 - N AH0 S S\nHUMANISTS(3)  HH Y UW1 - M AH0 - N AH0 S\nHUMANITARIAN  HH Y UW2 - M AE2 - N AH0 - T EH1 - R IY0 - AH0 N\nHUMANITARIAN(2)  Y UW2 - M AE2 - N AH0 - T EH1 - R IY0 - AH0 N\nHUMANITARIANS  HH Y UW2 - M AE2 - N AH0 - T EH1 - R IY0 - AH0 N Z\nHUMANITARIANS(2)  Y UW2 - M AE2 - N AH0 - T EH1 - R IY0 - AH0 N Z\nHUMANITIES  HH Y UW0 - M AE1 - N IH0 - T IY0 Z\nHUMANITIES(2)  Y UW0 - M AE1 - N IH0 - T IY0 Z\nHUMANITY  HH Y UW0 - M AE1 - N IH0 - T IY0\nHUMANITY'S  HH Y UW0 - M AE1 - N IH0 - T IY0 Z\nHUMANITY'S(2)  Y UW0 - M AE1 - N IH0 - T IY0 Z\nHUMANITY(2)  Y UW0 - M AE1 - N IH0 - T IY0\nHUMANIZE  HH Y UW1 - M AH0 - N AY2 Z\nHUMANIZED  HH Y UW1 - M AH0 - N AY2 Z D\nHUMANIZES  HH Y UW1 - M AH0 - N AY2 - Z IH0 Z\nHUMANIZING  HH Y UW1 - M AH0 - N AY2 - Z IH0 NG\nHUMANKIND  HH Y UW1 - M AH0 N - K AY2 N D\nHUMANKIND'S  HH Y UW1 - M AH0 N - K AY2 N D Z\nHUMANLY  HH Y UW1 - M AH0 N - L IY0\nHUMANN  HH Y UW1 - M AH0 N\nHUMANNESS  HH Y UW1 - M AH0 N - N AH0 S\nHUMANS  HH Y UW1 - M AH0 N Z\nHUMANS(2)  Y UW1 - M AH0 N Z\nHUMBARGER  HH AH1 M - B AA2 R - G ER0\nHUMBER  HH AH1 M - B ER0\nHUMBERT  HH AH1 M - B ER0 T\nHUMBERTO  HH AH0 M - B ER1 - T OW2\nHUMBERTO(2)  UW2 M - B EH1 R - T OW2\nHUMBLE  HH AH1 M - B AH0 L\nHUMBLED  HH AH1 M - B AH0 L D\nHUMBLER  HH AH1 M - B AH0 L - ER0\nHUMBLER(2)  HH AH1 M - B L ER0\nHUMBLES  HH AH1 M - B AH0 L Z\nHUMBLEST  HH AH1 M - B AH0 - L AH0 S T\nHUMBLING  HH AH1 M - B AH0 L - IH0 NG\nHUMBLING(2)  HH AH1 M - B L IH0 NG\nHUMBLY  HH AH1 M - B L IY0\nHUMBOLDT  HH AH1 M - B OW2 L T\nHUMBUG  HH AH1 M - B AH2 G\nHUMBURG  HH AH1 M - B ER0 G\nHUMDINGER  HH AH1 M - D IH0 - NG ER0\nHUMDRUM  HH AH1 M - D R AH2 M\nHUME  HH Y UW1 M\nHUMENIK  HH Y UW1 - M IH0 - N IH0 K\nHUMEROUS  HH Y UW1 - M ER0 - AH0 S\nHUMEROUS(2)  Y UW1 - M ER0 - AH0 S\nHUMERUS  HH Y UW1 - M ER0 - AH0 S\nHUMES  HH Y UW1 M Z\nHUMFREY  HH AH1 M - F R IY0\nHUMFRY  HH AH1 M - F ER0 - IY0\nHUMI  HH Y UW1 - M IY0\nHUMID  HH Y UW1 - M AH0 D\nHUMID(2)  HH Y UW1 - M IH0 D\nHUMID(3)  Y UW1 - M AH0 D\nHUMID(4)  Y UW1 - M IH0 D\nHUMIDIFIER  HH Y UW0 - M IH1 - D AH0 - F AY2 - ER0\nHUMIDIFIERS  HH Y UW0 - M IH1 - D AH0 - F AY2 - ER0 Z\nHUMIDITY  HH Y UW0 - M IH1 - D AH0 - T IY0\nHUMIDITY'S  HH Y UW0 - M IH1 - D AH0 - T IY0 Z\nHUMIDOR  HH Y UW1 - M IH0 - D AO2 R\nHUMILIATE  HH Y UW0 - M IH1 - L IY0 - EY2 T\nHUMILIATED  HH Y UW0 - M IH1 - L IY0 - EY2 - T IH0 D\nHUMILIATING  HH Y UW0 - M IH1 - L IY0 - EY2 - T IH0 NG\nHUMILIATION  HH Y UW0 - M IH2 - L IY0 - EY1 - SH AH0 N\nHUMILIATIONS  HH Y UW2 - M IH2 - L IY0 - EY1 - SH AH0 N Z\nHUMILITY  HH Y UW0 - M IH1 - L IH0 - T IY0\nHUMISTON  HH Y UW1 - M IH0 - S T AA0 N\nHUMKE  HH AH1 M - K IY0\nHUML  HH AH1 - M AH0 L\nHUMM  HH AH1 M\nHUMMEL  HH AH1 - M AH0 L\nHUMMELL  HH AH1 - M AH0 L\nHUMMER  HH AH1 - M ER0\nHUMMING  HH AH1 - M IH0 NG\nHUMMINGBIRD  HH AH1 - M IH0 NG - B ER2 D\nHUMMINGBIRDS  HH AH1 - M IH0 NG - B ER2 D Z\nHUMONGOUS  HH Y UW0 - M AO1 NG - G AH0 S\nHUMOR  HH Y UW1 - M ER0\nHUMORAL  HH Y UW1 - M ER0 - AH0 L\nHUMORED  HH Y UW1 - M ER0 D\nHUMORIST  HH Y UW1 - M ER0 - AH0 S T\nHUMORIST(2)  HH Y UW1 - M ER0 - IH0 S T\nHUMORISTS  HH Y UW1 - M ER0 - IH0 S T S\nHUMORISTS(2)  HH Y UW1 - M ER0 - IH0 S S\nHUMORISTS(3)  HH Y UW1 - M ER0 - IH0 S\nHUMORLESS  HH Y UW1 - M ER0 - L AH0 S\nHUMOROUS  HH Y UW1 - M ER0 - AH0 S\nHUMOROUSLY  HH Y UW1 - M ER0 - AH0 S - L IY0\nHUMP  HH AH1 M P\nHUMPAL  HH AH1 M - P AH0 L\nHUMPBACK  HH AH1 M P - B AE2 K\nHUMPED  HH AH1 M P T\nHUMPERT  HH AH1 M - P ER2 T\nHUMPH  HH AH1 M F\nHUMPHERY  HH AH1 M - F ER0 - IY0\nHUMPHERY(2)  HH AH1 M - F R IY0\nHUMPHERY(3)  HH AH1 M P - F ER0 - IY0\nHUMPHERY(4)  HH AH1 M P - F R IY0\nHUMPHERYS  HH AH1 M - F ER0 - IY0 Z\nHUMPHERYS(2)  HH AH1 M - F R IY0 Z\nHUMPHERYS(3)  HH AH1 M P - F ER0 - IY0 Z\nHUMPHREY'S  HH AH1 M - F R IY0 Z\nHUMPHREY'S(2)  HH AH1 M P - F R IY0 Z\nHUMPHREYS(4)  HH AH1 M P - F R IY0 Z\nHUMPHRIES  HH AH1 M - F ER0 - IY0 Z\nHUMPHRIES(2)  HH AH1 M P - F ER0 - IY0 Z\nHUMPHRY  HH AH1 M - F R IY0\nHUMPHRY(2)  HH AH1 M P - F R IY0\nHUMPTY  HH AH1 M P - T IY0\nHUMS  HH AH1 M Z\nHUMULIN  HH Y UW2 - M Y UW1 - L IH0 N\nHUMUS  HH Y UW1 - M AH0 S\nHUMVEE  HH AH1 M - V IY2\nHUMVEE'S  HH AH1 M - V IY2 Z\nHUMVEES  HH AH1 M - V IY2 Z\nHUN  HH AH1 N\nHUNAN  HH UW1 - N AA0 N\nHUNCH  HH AH1 N CH\nHUNCHBACK  HH AH1 N CH - B AE2 K\nHUNCHED  HH AH1 N CH T\nHUNCHES  HH AH1 N - CH IH0 Z\nHUNCHINE  HH AH0 - CH IY1 N\nHUND  HH AH1 N D\nHUNDAI  HH AH1 N - D EY0\nHUNDERTMARK  HH AH1 N - D ER0 T - M AA2 R K\nHUNDLEY  HH AH1 N D - L IY0\nHUNDRED  HH AH1 N - D R AH0 D\nHUNDRED'S  HH AH1 N - D R IH0 D Z\nHUNDRED(2)  HH AH1 N - D R IH0 D\nHUNDRED(3)  HH AH1 - N ER0 D\nHUNDRED(4)  HH AH1 N - D ER0 D\nHUNDREDS  HH AH1 N - D R AH0 D Z\nHUNDREDS(2)  HH AH1 N - D ER0 D Z\nHUNDREDS(2)  HH AH1 - N ER0 D Z\nHUNDREDTH  HH AH1 N - D R AH0 D TH\nHUNDREDTHS  HH AH1 N - D R AH0 D TH S\nHUNDREDWEIGHT  HH AH1 N - D R AH0 D - W EY2 T\nHUNDT  HH AH1 N T\nHUNEKE  HH AH1 - N IH0 K\nHUNEYCUTT  HH AH1 - N IY0 - K AH0 T\nHUNG  HH AH1 NG\nHUNGARIAN  HH AH0 NG - G EH1 - R IY0 - AH0 N\nHUNGARIANS  HH AH0 NG - G EH1 - R IY0 - AH0 N Z\nHUNGARY  HH AH1 NG - G ER0 - IY0\nHUNGARY'S  HH AH1 NG - G ER0 - IY0 Z\nHUNGATE  HH AH1 - NG EY0 T\nHUNGER  HH AH1 NG - G ER0\nHUNGERFORD  HH AH1 NG - G ER0 - F ER0 D\nHUNGERFORDS  HH AH1 NG - G ER0 - F ER0 D Z\nHUNGERING  HH AH1 NG - G ER0 - IH0 NG\nHUNGRIER  HH AH1 NG - G R IY0 - ER0\nHUNGRILY  HH AH1 NG - G R AH0 - L IY0\nHUNGRY  HH AH1 NG - G R IY0\nHUNK  HH AH1 NG K\nHUNKE  HH AH1 NG K\nHUNKELE  HH AH1 NG - K AH0 L\nHUNKER  HH AH1 NG - K ER0\nHUNKERED  HH AH1 NG - K ER0 D\nHUNKERING  HH AH1 NG - K ER0 - IH0 NG\nHUNKINS  HH AH1 NG - K IH0 N Z\nHUNKS  HH AH1 NG K S\nHUNKY  HH AH1 NG - K IY0\nHUNLEY  HH AH1 N - L IY0\nHUNN  HH AH1 N\nHUNNELL  HH AH1 - N AH0 L\nHUNNEWELL  HH AH1 - N IH0 - W EH0 L\nHUNNICUTT  HH AH1 - N IH0 - K AH0 T\nHUNSAKER  HH AH1 N - S AH0 - K ER0\nHUNSBERGER  HH AH1 N S - B ER0 - G ER0\nHUNSICKER  HH AH1 N - S IH0 - K ER0\nHUNSINGER  HH AH1 N - S IH0 - NG ER0\nHUNSLEY  HH AH1 N S - L IY0\nHUNSUCKER  HH AH1 N - S AH0 - K ER0\nHUNT  HH AH1 N T\nHUNT'S  HH AH1 N T S\nHUNTCO  HH AH1 N T - K OW0\nHUNTE  HH AH1 N T\nHUNTED  HH AH1 N - T AH0 D\nHUNTED(2)  HH AH1 N - T IH0 D\nHUNTED(3)  HH AH1 - N AH0 D\nHUNTED(4)  HH AH1 - N IH0 D\nHUNTER  HH AH1 N - T ER0\nHUNTER'S  HH AH1 N - T ER0 Z\nHUNTERS  HH AH1 N - T ER0 Z\nHUNTING  HH AH1 N - T IH0 NG\nHUNTINGDON  HH AH1 N - T IH0 NG - D IH0 N\nHUNTINGTON  HH AH1 N - T IH0 NG - T AH0 N\nHUNTINGTON'S  HH AH1 N - T IH0 NG - T AH0 N Z\nHUNTLEY  HH AH1 N T - L IY0\nHUNTLY  HH AH1 N T - L IY0\nHUNTON  HH AH1 N - T AH0 N\nHUNTOON  HH AH0 N - T UW1 N\nHUNTRESS  HH AH1 N - T R IH0 S\nHUNTS  HH AH1 N T S\nHUNTS'  HH AH1 N T S\nHUNTSINGER  HH AH1 N T - S IH0 N - JH ER0\nHUNTSMAN  HH AH1 N T S - M AH0 N\nHUNTSVILLE  HH AH1 N T S - V IH0 L\nHUNTWAY  HH AH1 N T - W EY2\nHUNTZINGER  HH AH1 N T - Z IH0 - NG ER0\nHUNZA  HH AH1 N - Z AH0\nHUNZEKER  HH AH1 N - Z IH0 - K ER0\nHUNZIKER  HH AH1 N - Z IH0 - K ER0\nHUOT  HH Y UW1 - AH0 T\nHUPE  HH Y UW1 P\nHUPFER  HH AH1 P - F ER0\nHUPP  HH AH1 P\nHUPPERT  HH AH1 - P ER0 T\nHUR  HH ER1\nHURCO  HH ER1 - K OW2\nHURD  HH ER1 D\nHURDLE  HH ER1 - D AH0 L\nHURDLER  HH ER1 - D AH0 L - ER0\nHURDLER(2)  HH ER1 D - L ER0\nHURDLES  HH ER1 - D AH0 L Z\nHURDLING  HH ER1 - D AH0 L - IH0 NG\nHURDLING(2)  HH ER1 D - L IH0 NG\nHURDMAN  HH ER1 D - M AH0 N\nHURFORD  HH ER1 - F ER0 D\nHURL  HH ER1 L\nHURLBERT  HH ER1 L - B ER0 T\nHURLBURT  HH ER1 L - B ER0 T\nHURLBUT  HH ER1 L - B AH0 T\nHURLBUTT  HH ER1 L - B AH0 T\nHURLED  HH ER1 L D\nHURLESS  HH ER1 - L AH0 S\nHURLEY  HH ER1 - L IY0\nHURLING  HH ER1 - L IH0 NG\nHURLOCK  HH ER1 - L AH0 K\nHURLY  HH ER1 - L IY0\nHURM  HH ER1 M\nHURN  HH ER1 N\nHURNEY  HH ER1 - N IY0\nHURON  HH Y UW1 - R AA2 N\nHURON(2)  HH Y UH1 - R AA2 N\nHURRAH  HH UH0 - R AA1\nHURRAY  HH AH0 - R EY1\nHURRELL  HH AO1 - R AH0 L\nHURRICANE  HH ER1 - AH0 - K EY2 N\nHURRICANE'S  HH ER1 - AH0 - K EY2 N Z\nHURRICANE(2)  HH AH1 - R AH0 - K EY2 N Z\nHURRICANES  HH ER1 - AH0 - K EY2 N Z\nHURRIED  HH ER1 - IY0 D\nHURRIEDLY  HH ER1 - IY0 D - L IY0\nHURRIES  HH ER1 - IY0 Z\nHURRY  HH ER1 - IY0\nHURRYING  HH ER1 - IY0 - IH0 NG\nHURSEY  HH ER1 - S IY0\nHURSH  HH ER1 SH\nHURST  HH ER1 S T\nHURSTON  HH ER1 - S T AH0 N\nHURT  HH ER1 T\nHURTA  HH ER1 - T AH0\nHURTADO  HH ER0 - T AA1 - D OW0\nHURTEAU  HH ER0 - T OW1\nHURTFUL  HH ER1 T - F AH0 L\nHURTIG  HH ER1 - T IH0 G\nHURTING  HH ER1 - T IH0 NG\nHURTLE  HH ER1 - T AH0 L\nHURTLING  HH ER1 T - L IH0 NG\nHURTS  HH ER1 T S\nHURTT  HH ER1 T\nHURTUBISE  HH ER1 - T AH0 - B AY0 Z\nHURVEY  HH ER1 - V IY0\nHURVITZ  HH ER1 - V IH0 T S\nHURWITZ  HH ER1 - W IH0 T S\nHUSAIN  HH AH1 - S AY0 N\nHUSAK  HH UW1 - S AH0 K\nHUSAR  HH UW1 - S ER0\nHUSBAND  HH AH1 Z - B AH0 N D\nHUSBAND'S  HH AH1 Z - B AH0 N D Z\nHUSBANDRY  HH AH1 Z - B AH0 N - D R IY0\nHUSBANDS  HH AH1 Z - B AH0 N D Z\nHUSBANDS'  HH AH1 S - B AH0 N D Z\nHUSBY  HH AH1 S - B IY0\nHUSCHKA  HH AH1 SH - K AH0\nHUSE  HH Y UW1 Z\nHUSEBY  HH AH1 - S IH0 - B IY0\nHUSEMAN  HH UW1 S - M AH0 N\nHUSEN  HH UW1 - S AH0 N\nHUSER  HH Y UW1 - Z ER0\nHUSH  HH AH1 SH\nHUSHED  HH AH1 SH T\nHUSIC  HH Y UW1 - Z IH0 K\nHUSK  HH AH1 S K\nHUSKA  HH AH1 S - K AH0\nHUSKEY  HH AH1 S - K IY0\nHUSKINS  HH AH1 - S K IH0 N Z\nHUSKS  HH AH1 S K S\nHUSKY  HH AH1 S - K IY0\nHUSKY'S  HH AH1 S - K IY0 Z\nHUSMAN  HH AH1 S - M AH0 N\nHUSMANN  HH AH1 S - M AH0 N\nHUSON  HH UW1 - S AH0 N\nHUSS  HH AH1 S\nHUSSAIN  HH UW0 - S EY1 N\nHUSSAR  HH AH1 - S ER0\nHUSSEIN  HH UW0 - S EY1 N\nHUSSEIN'S  HH UW0 - S EY1 N Z\nHUSSEINI  HH Y UW0 - S EY1 - N IY0\nHUSSEINI(2)  HH UW0 - S EY1 - N IY0\nHUSSER  HH AH1 - S ER0\nHUSSEY  HH AH1 - S IY0\nHUSSITE  HH AH1 - S AY2 T\nHUSSMAN  HH AH1 S - M AH0 N\nHUSSON  HH AH1 - S AH0 N\nHUSSONG  HH AH1 - S AO2 NG\nHUSSY  HH AH1 - S IY0\nHUST  HH AH1 S T\nHUSTAD  HH AH1 - S T AH0 D\nHUSTEAD  HH AH1 - S T EH0 D\nHUSTED  HH AH1 - S T IH0 D\nHUSTER  HH AH1 - S T ER0\nHUSTINGS  HH AH1 - S T IH0 NG Z\nHUSTLE  HH AH1 - S AH0 L\nHUSTLED  HH AH1 - S AH0 L D\nHUSTLER  HH AH1 - S AH0 - L ER0\nHUSTLER(2)  HH AH1 S - L ER0\nHUSTLERS  HH AH1 - S AH0 - L ER0 Z\nHUSTLERS(2)  HH AH1 S - L ER0 Z\nHUSTLES  HH AH1 - S AH0 L Z\nHUSTLING  HH AH1 - S AH0 - L IH0 NG\nHUSTLING(2)  HH AH1 - S L IH0 NG\nHUSTON  HH AH1 - S T AH0 N\nHUT  HH AH1 T\nHUT'S  HH AH1 T S\nHUTA  HH UW1 - T AH0\nHUTCH  HH AH1 CH\nHUTCHCRAFT  HH AH1 CH - K R AE2 F T\nHUTCHENS  HH AH1 - CH AH0 N Z\nHUTCHEON  HH AH1 - CH IY0 - AH0 N\nHUTCHERSON  HH AH1 - CH ER0 - S AH0 N\nHUTCHESON  HH AH1 - CH IH0 - S AH0 N\nHUTCHINGS  HH AH1 - CH IH0 NG Z\nHUTCHINS  HH AH1 T - CH IH2 N Z\nHUTCHINSON  HH AH1 - CH IH0 N - S AH0 N\nHUTCHISON  HH AH1 - CH IH0 - S AH0 N\nHUTCHISON'S  HH AH1 - CH IH0 - S AH0 N Z\nHUTH  HH UW1 TH\nHUTMACHER  HH AH1 T - M AH0 - K ER0\nHUTNICK  HH AH1 T - N IH0 K\nHUTO  HH UW1 - T OW2\nHUTS  HH AH1 T S\nHUTSELL  HH AH1 T - S AH0 L\nHUTSON  HH AH1 T - S AH0 N\nHUTT  HH AH1 T\nHUTTER  HH AH1 - T ER0\nHUTTNER  HH AH1 T - N ER0\nHUTTO  HH UW1 - T OW0\nHUTTON  HH AH1 - T AH0 N\nHUTTON'S  HH AH1 - T AH0 N Z\nHUTU  HH UW1 - T UW2\nHUTU'S  HH UW1 - T UW2 Z\nHUTUS  HH UW1 - T UW2 Z\nHUTZEL  HH AH1 T - Z AH0 L\nHUTZELL  HH AH1 T - Z AH0 L\nHUTZELMAN  HH AH1 T - S AH0 L - M AH0 N\nHUTZLER  HH AH1 T S - L ER0\nHUVAL  HH UW0 - V AE1 L\nHUWE  HH UW1 W\nHUX  HH AH1 K S\nHUXFORD  HH AH1 K S - F ER0 D\nHUXLEY  HH AH1 K S - L IY0\nHUXTABLE  HH AH1 K - S T AH0 - B AH0 L\nHUXTABLES  HH AH1 K - S T AH0 - B AH0 L Z\nHUYCK  HH AY1 K\nHUYETT  HH AY1 - IH0 T\nHUYLER  HH AY1 - L ER0\nHUYNH  HH AY1 N\nHUYSER  HH AY1 - S ER0\nHWA  HH W AA1\nHWAN  HH W AA1 N\nHWAN'S  HH W AA1 N Z\nHWANG  HH W AE1 NG\nHWANG(2)  HH W AA1 NG\nHWANG-HO  HH W AE1 NG - HH OW1\nHWANG-HO(2)  HH W AA1 NG - HH OW1\nHWE  HH W EY1\nHY  HH AY1\nHYACINTH  HH AY1 - AH0 - S IH2 N TH\nHYACINTHA  HH AY2 - AH0 - S IH1 N - TH AH0\nHYACINTHE  HH AY1 - AH0 - S IH0 N TH\nHYACINTHIA  HH AY2 - AH0 - S IH1 N - TH IY0 - AH0\nHYACINTHIE  HH AY1 - AH0 - S IH2 N - TH IY0\nHYACINTHS  HH AY1 - AH0 - S IH0 N TH S\nHYADES  HH AY1 - AH0 - D IY2 Z\nHYAKUTAKE  HH AY1 - AH0 - K UW0 - T AA2 - K IY0\nHYAKUTAKE(2)  HH AY1 - AH0 - K Y UW0 - T AA2 - K IY0\nHYALURONIC  HH AY2 - AH0 - L ER0 - AA1 - N IH0 K\nHYAMS  HH AY1 - AH0 M Z\nHYANNIS  HH AY0 - AE1 - N IH0 S\nHYANNISPORT  HH AY0 - AE1 - N IH0 - S P AO0 R T\nHYATT  HH AY1 - AH0 T\nHYATT'S  HH AY1 - AH0 T S\nHYBL  HH IH1 - B AH0 L\nHYBL'S  HH IH1 - B AH0 L Z\nHYBRID  HH AY1 - B R AH0 D\nHYBRID(2)  HH AY1 - B R IH0 D\nHYBRIDIZATION  HH AY2 - B R AH0 - D AH0 - Z EY1 - SH AH0 N\nHYBRIDIZE  HH AY1 - B R AH0 - D AY2 Z\nHYBRIDS  HH AY1 - B R AH0 D Z\nHYBRIENKO  HH AY1 - B R IY0 - EH2 N - K OW0\nHYBRITECH  HH AY1 - B R IH0 - T EH2 K\nHYCHE  HH AY1 CH\nHYCOR  HH AY1 - K AO2 R\nHYCROFT  HH AY1 - K R AO2 F T\nHYDE  HH AY1 D\nHYDE'S  HH AY1 D Z\nHYDEA  HH AY2 - D IY1 - AH0\nHYDEA(2)  HH AY2 - D EY1 - AH0\nHYDEIA  HH AY1 - D EY1 - AH0\nHYDEN  HH AY1 - D AH0 N\nHYDER  HH AY1 - D ER0\nHYDERABAD  HH AY0 - D EH1 - R AH0 - B AE2 D\nHYDERABAD(2)  HH AY1 - D ER0 - AH0 - B AE2 D\nHYDOCK  HH AY1 - D AH0 K\nHYDRA  HH AY1 - D R AH0\nHYDRANT  HH AY1 - D R AH0 N T\nHYDRANTS  HH AY1 - D R AH0 N T S\nHYDRAS  HH AY1 - D R AH0 Z\nHYDRATE  HH AY1 - D R EY2 T\nHYDRATED  HH AY1 - D R EY2 - T AH0 D\nHYDRATION  HH AY0 - D R EY1 - SH AH0 N\nHYDRAULIC  HH AY0 - D R AO1 - L IH0 K\nHYDRAULICS  HH AY0 - D R AO1 - L IH0 K S\nHYDRAZINE  HH AY1 - D R AH0 - Z IY2 N\nHYDRICK  HH IH1 - D R IH0 K\nHYDRIDE  HH AY1 - D R AY2 D\nHYDRO  HH AY1 - D R OW2\nHYDRO'S  HH AY1 - D R OW2 Z\nHYDROCARBON  HH AY2 - D R OW0 - K AA1 R - B AH0 N\nHYDROCARBONS  HH AY2 - D R OW0 - K AA1 R - B AH0 N Z\nHYDROELECTRIC  HH AY2 - D R OW0 - IH0 - L EH1 K - T R IH0 K\nHYDROFOIL  HH AY1 - D R AH0 - F OY2 L\nHYDROGEN  HH AY1 - D R AH0 - JH AH0 N\nHYDROGENATE  HH AY1 - D R AH0 - JH AH0 - N EY2 T\nHYDROGENATED  HH AY1 - D R AH0 - JH AH0 - N EY2 - T IH0 D\nHYDROGENATED(2)  HH AY0 - D R AA1 - JH AH0 - N EY2 - T IH0 D\nHYDROGENATES  HH AY1 - D R AH0 - JH AH0 - N EY2 T S\nHYDROGENATING  HH AY1 - D R AH0 - JH AH0 - N EY2 - T IH0 NG\nHYDROGENATION  HH AY2 - D R AA2 - JH AH0 - N EY1 - SH AH0 N\nHYDROGENS  HH AY1 - D R AH0 - JH AH0 N Z\nHYDROGRAPHIC  HH AY2 - D R AH0 - G R AE1 - F IH0 K\nHYDROLYSIS  HH AY0 - D R AA1 - L AH0 - S AH0 S\nHYDROLYZE  HH AY1 - D R AH0 - L AY2 Z\nHYDROLYZED  HH AY1 - D R AH0 - L AY2 Z D\nHYDROLYZING  HH AY1 - D R AH0 - L AY2 - Z IH0 NG\nHYDROMETER  HH AY0 - D R AA1 - M AH0 - T ER0\nHYDRON  HH AY1 - D R AH0 N\nHYDROPHILIC  HH AY2 - D R AH0 - F IH1 - L IH0 K\nHYDROPONIC  HH AY2 - D R AH0 - P AA1 - N IH0 K\nHYDROPOWER  HH AY1 - D R OW0 - P AW2 R\nHYDROSOL  HH AY1 - D R AH0 - S AA2 L\nHYDROSULFIDE  HH AY2 - D R OW0 - S AH1 L - F AY2 D\nHYDROTHERAPY  HH AY2 - D R OW0 - TH EH1 - R AH0 - P IY0\nHYDROTHERMAL  HH AY2 - D R OW0 - TH ER1 - M AH0 L\nHYDROUS  HH AY1 - D R AH0 S\nHYDROX  HH AY1 - D R AO2 K S\nHYDROXIDE  HH AY0 - D R AA1 K - S AY0 D\nHYDROXIDES  HH AY0 - D R AA1 K - S AY0 D Z\nHYDROXY  HH AY2 - D R AO1 K - S IY0\nHYDSTRA  HH AY1 D - S T R AH0\nHYE  HH AY0\nHYENA  HH AY0 - IY1 - N AH0\nHYENAS  HH AY0 - IY1 - N AH0 Z\nHYER  HH AY1 - ER0\nHYERS  HH AY1 - ER0 Z\nHYGEIA  HH AY2 - JH EY1 - AH0\nHYGIENE  HH AY1 - JH IY2 N\nHYGIENIST  HH AY2 - G IY1 - N IH0 S T\nHYGIENIST(2)  HH AY2 - G EH1 - N IH0 S T\nHYGIENISTS  HH AY2 - G IY1 - N IH0 S T S\nHYGIENISTS(2)  HH AY2 - G IY1 - N IH0 S S\nHYGIENISTS(3)  HH AY2 - G IY1 - N IH0 S\nHYGIENISTS(4)  HH AY2 - G EH1 - N IH0 S T S\nHYGIENISTS(5)  HH AY2 - G EH1 - N IH0 S S\nHYGIENISTS(6)  HH AY2 - G EH1 - N IH0 S\nHYGROMETER  HH AY0 - G R AA1 - M AH0 - T ER0\nHYKES  HH AY1 K S\nHYLAND  HH AY1 - L AH0 N D\nHYLE  HH AY1 L\nHYLER  HH AY1 - L ER0\nHYLSA  HH AY1 L - S AH0\nHYMAN  HH AY1 - M AH0 N\nHYMANS  HH AY1 - M AH0 N Z\nHYMAS  HH AY1 - M AH0 Z\nHYMEL  HH AY1 - M AH0 L\nHYMEN  HH AY1 - M AH0 N\nHYMER  HH AY1 - M ER0\nHYMES  HH AY1 M Z\nHYMIE  HH AY1 - M IY0\nHYMIES  HH AY1 - M IY0 Z\nHYMN  HH IH1 M\nHYMNAL  HH IH1 M - N AH0 L\nHYMNALS  HH IH1 M - N AH0 L Z\nHYMNOLOGY  HH IH0 M - N AA1 - L AH0 - JH IY0\nHYMNS  HH IH1 M Z\nHYMOWITZ  HH IH1 - M AH0 - W IH0 T S\nHYMOWITZ(2)  HH AY1 - M AH0 - W IH0 T S\nHYND  HH IH1 N D\nHYNDMAN  HH IH1 N D - M AH0 N\nHYNDS  HH IH1 N D Z\nHYNEK  HH AY1 - N IH0 K\nHYNES  HH AY1 N Z\nHYNES'S  HH AY1 N - Z IH0 Z\nHYNSON  HH IH1 N - S AH0 N\nHYOGO  HH Y OW1 - G OW0\nHYOTAN  HH Y OW1 - T AE2 N\nHYPE  HH AY1 P\nHYPED  HH AY1 P T\nHYPER  HH AY1 - P ER0\nHYPERACTIVE  HH AY2 - P ER0 - AE1 K - T IH0 V\nHYPERACTIVITY  HH AY2 - P ER0 - AE0 K - T IH1 - V IH0 - T IY0\nHYPERBARIC  HH AY0 - P ER0 - B AA1 - R IH0 K\nHYPERBARIC(2)  HH AY0 - P ER1 - B AE1 - R IH0 K\nHYPERBOLA  HH AY0 - P ER1 - B AH0 - L AH0\nHYPERBOLE  HH AY0 - P ER1 - B AH0 - L IY2\nHYPERBOLIC  HH AY2 - P ER0 - B AA1 - L IH0 K\nHYPERBOREAN  HH AY2 - P ER0 - B AO1 - R IY0 - AH0 N\nHYPERCARD  HH AY2 - P ER0 - K AA1 R D\nHYPERCRITICAL  HH AY2 - P ER0 - K R IH1 - T IH0 - K AH0 L\nHYPERINFLATION  HH AY2 - P ER0 - IH0 N - F L EY1 - SH AH0 N\nHYPERION  HH AY0 - P IH1 - R IY0 - AH0 N\nHYPERKINETIC  HH AY2 - P ER0 - K IH0 - N EH1 - T IH0 K\nHYPERLINK  HH AY1 - P ER0 - L IH0 NG K\nHYPERLINKS  HH AY1 - P ER0 - L IH0 NG K S\nHYPERMARKET  HH AY1 - P ER0 - M AA2 R - K IH0 T\nHYPERMARKETS  HH AY1 - P ER0 - M AA2 R - K IH0 T S\nHYPEROPIA  HH AY2 - P ER0 - OW1 - P IY0 - AH0\nHYPERSENSITIVE  HH AY2 - P ER0 - S EH1 N - S IH0 - T IH0 V\nHYPERSENSITIVITY  HH AY2 - P ER0 - S EH1 N - S IH0 - T IH0 - V IH0 - T IY0\nHYPERSONIC  HH AY2 - P ER0 - S AA1 - N IH0 K\nHYPERTENSION  HH AY2 - P ER0 - T EH1 N - SH AH0 N\nHYPERTENSIVE  HH AY2 - P ER0 - T EH1 N - S IH0 V\nHYPERTEXT  HH AY1 - P ER0 - T EH2 K S T\nHYPERTONIC  HH AY2 - P ER0 - T AA1 - N IH0 K\nHYPES  HH AY1 P S\nHYPHAE  HH AY1 - F IY2\nHYPHEN  HH AY1 - F AH0 N\nHYPHENATE  HH AY1 - F AH0 - N EY2 T\nHYPHENATED  HH AY1 - F AH0 - N EY2 - T IH0 D\nHYPING  HH AY1 - P IH0 NG\nHYPNOSIS  HH IH0 P - N OW1 - S AH0 S\nHYPNOTIC  HH IH0 P - N AA1 - T IH0 K\nHYPNOTICS  HH IH0 P - N AA1 - T IH0 K S\nHYPNOTISM  HH IH1 P - N AH0 - T IH2 - Z AH0 M\nHYPNOTISM'S  HH IH1 P - N AH0 - T IH2 - Z AH0 M Z\nHYPNOTIZE  HH IH1 P - N AH0 - T AY2 Z\nHYPNOTIZED  HH IH1 P - N AH0 - T AY2 Z D\nHYPO  HH AY1 - P OW0\nHYPOCHONDRIA  HH AY2 - P AH0 - K AA1 N - D R IY0 - AH0\nHYPOCHONDRIAC  HH AY2 - P AH0 - K AA1 N - D R IY0 - AE0 K\nHYPOCRISY  HH IH0 - P AA1 - K R AH0 - S IY0\nHYPOCRITE  HH IH1 - P AH0 - K R IH2 T\nHYPOCRITES  HH IH1 - P AH0 - K R IH2 T S\nHYPOCRITICAL  HH IH2 - P AH0 - K R IH1 - T IH0 - K AH0 L\nHYPODERMIC  HH AY2 - P AH0 - D ER1 - M IH0 K\nHYPOGLYCEMIA  HH AY2 - P OW0 - G L AY0 - S IY1 - M IY0 - AH0\nHYPOGLYCEMIC  HH AY2 - P OW0 - G L AY0 - S IY1 - M IH0 K\nHYPOLITE  HH AY1 - P AH0 - L AY0 T\nHYPONEX  HH AY1 - P OW0 - N EH2 K S\nHYPOTENSION  HH AY2 - P OW0 - T EH1 N - SH AH0 N\nHYPOTHALAMIC  HH AY2 - P OW0 - TH AH0 - L AE1 - M IH0 K\nHYPOTHEKEN  HH AY2 - P AA1 - TH AH0 - K AH0 N\nHYPOTHERMIA  HH AY2 - P AH0 - TH ER1 - M IY0 - AH0\nHYPOTHESES  HH AY0 - P AA1 - TH AH0 - S IY2 Z\nHYPOTHESIS  HH AY0 - P AA1 - TH AH0 - S AH0 S\nHYPOTHESIZE  HH AY0 - P AA1 - TH AH0 - S AY2 Z\nHYPOTHESIZED  HH AY0 - P AA1 - TH AH0 - S AY2 Z D\nHYPOTHETICAL  HH AY2 - P AH0 - TH EH1 - T AH0 - K AH0 L\nHYPOTHETICAL(2)  HH AY2 - P AH0 - TH EH1 - T IH0 - K AH0 L\nHYPOTHETICALLY  HH AY2 - P AH0 - TH EH1 - T IH0 K - L IY0\nHYPOTHETICALS  HH AY2 - P AH0 - TH EH1 - T AH0 - K AH0 L Z\nHYPOXIA  HH AY0 - P AA1 K - S IY0 - AH0\nHYRAXES  HH AY1 - R AE0 K - S AH0 Z\nHYRE  HH AY1 R\nHYSELL  HH AY1 - S AH0 L\nHYSER  HH AY1 - Z ER0\nHYSLOP  HH AY1 S - L AH0 P\nHYSON  HH AY1 - S AH0 N\nHYSONG  HH AY1 - S AO2 NG\nHYSSOP  HH IH1 - S AH0 P\nHYSTER  HH IH1 - S T ER0\nHYSTERECTOMIES  HH IH2 - S T ER0 - EH1 K - T AH0 - M IY0\nHYSTERECTOMY  HH IH2 - S T ER0 - EH1 K - T AH0 - M IY0\nHYSTERIA  HH IH0 - S T EH1 - R IY0 - AH0\nHYSTERIC  HH IH2 - S T EH1 - R IH0 K\nHYSTERICAL  HH IH0 - S T EH1 - R IH0 - K AH0 L\nHYSTERICALLY  HH IH2 - S T EH1 - R IH0 K - L IY0\nHYSTERICS  HH IH2 - S T EH1 - R IH0 K S\nHYUN  HH AY1 - AH0 N\nHYUN(2)  HH Y AH1 N\nHYUNDAI  HH Y AH1 N - D EY2\nHYUNDAI'S  HH AH1 N - D EY2 Z\nHYUNDAI(2)  HH AH1 N - D EY2\nHYUNDAIS  HH Y AH1 N - D EY2 Z\nI  AY1\nI'D  AY1 D\nI'ERS  AY1 - ER0 Z\nI'LL  AY1 L\nI'M  AY1 M\nI'S  AY1 Z\nI'VE  AY1 V\nI.  AY1\nI.'S  AY1 Z\nI.S  AY1 Z\nIA  IY1 - AH0\nIACOBELLI  IY0 - AA2 - K OW0 - B EH1 - L IY0\nIACOBELLIS  IY0 - AA2 - K OW0 - B EH1 - L IH0 S\nIACOBUCCI  IY0 - AA0 - K OW0 - B UW1 - CH IY0\nIACOCCA  AY2 - AH0 - K OW1 - K AH0\nIACOCCA'S  AY2 - AH0 - K OW1 - K AH0 Z\nIACONA  AY2 - AH0 - K OW1 - N AH0\nIACONO  AY2 - AH0 - K OW1 - N OW0\nIACOVELLI  IY0 - AA2 K - OW0 - V EH1 - L IY0\nIAFRATE  AY2 - AH0 - F R EY1 - T IY0\nIAGO  IY0 - AA1 - G OW0\nIAIN  IY0 - EY1 N\nIAKOVOS  IY0 - AA1 - K OW0 - V OW0 S\nIALLA  AY1 - AA0 - L AH0\nIALLA(2)  IY1 - AA0 - L AH0\nIAMS  IY1 - AA0 M Z\nIAMS(2)  AY1 - AA0 M Z\nIAN  IY1 - AH0 N\nIANNACCONE  IY0 - AA2 - N AH0 - K OW1 - N IY0\nIANNACONE  IY0 - AA2 - N AH0 - K OW1 - N IY0\nIANNAMICO  IY0 - AA2 - N AH0 - M IY1 - K OW0\nIANNELLI  IY0 - AH0 - N EH1 - L IY0\nIANNELLO  IY0 - AH0 - N EH1 - L OW0\nIANNI  IY0 - AA1 - N IY0\nIANNIELLO  IY0 - AA2 - N IY0 - EH1 - L OW0\nIANNONE  IY0 - AH0 - N OW1 - N IY0\nIANNOTTI  IY0 - AH0 - N OW1 - T IY0\nIANNUCCI  IY0 - AH0 - N UW1 - CH IY0\nIANNUZZI  IY0 - AH0 - N UW1 T - S IY0\nIANNUZZI(2)  IY0 - AH0 - N UW1 - Z IY0\nIANTHA  IY0 - AA1 N - TH AH0\nIANTHE  IY0 - AA1 N - TH EY0\nIANTHINA  IY0 - AH0 N - TH IY1 - N AH0\nIASON  IY1 - AH0 - S AH0 N\nIAVARONE  IY0 - AA2 - V ER0 - OW1 - N IY0\nIB  IH1 B\nIB(2)  AY1 - B IY1\nIBA  IY1 - B AH0\nIBACH  IH1 - B AA0 K\nIBANEZ  IH0 - B AA1 N - EH0 Z\nIBARAKI  AY2 - B ER0 - AA1 - K IY0\nIBARRA  IH0 - B AA1 - R AH0\nIBBOTSON  IH1 - B AH0 T - S AH0 N\nIBERIA  AY0 - B IH1 - R IY0 - AH0\nIBERIA'S  AY0 - B IH1 - R IY0 - AH0 Z\nIBERIAN  AY0 - B IH1 - R IY0 - AH0 N\nIBEX  AY1 - B EH0 K S\nIBIS  AY1 - B AH0 S\nIBMER  IH1 B - M ER0\nIBMERS  IH1 B - M ER0 Z\nIBN  IH1 - B AH0 N\nIBOGAINE  AY1 - B OW0 - G EY0 N\nIBOGAINE(2)  AY1 - B AH0 - G EY0 N\nIBRAHIM  IH2 - B R AA0 - HH IY1 M\nIBSEN  IH1 B - S AH0 N\nIBUPROFEN  AY2 - B Y UW0 - P R OW1 - F AH0 N\nICAHN  AY1 - K AA0 N\nICAHN'S  AY1 - K AA0 N Z\nICARD  IH0 - K AA1 R D\nICARUS  IH1 - K ER2 - AH0 S\nICE  AY1 S\nICE-NINE  AY1 S - N AY1 N\nICEBERG  AY1 S - B ER0 G\nICEBERGS  AY1 S - B ER0 G Z\nICEBOX  AY1 S - B AA2 K S\nICEBREAKER  AY1 S - B R EY2 - K ER0\nICEBREAKERS  AY1 S - B R EY2 - K ER0 Z\nICED  AY1 S T\nICEFISH  AY1 S - F IH2 SH\nICELAND  AY1 S - L AH0 N D\nICELANDAIR  AY2 S - L AE0 N - D EH1 R\nICELANDIC  AY0 S - L AE1 N - D IH0 K\nICEMAN  AY1 S - M AE0 N\nICENHOUR  IH1 - S AH0 - N AW0 R\nICENHOUR(2)  AY1 - S AH0 - N AW0 R\nICENHOWER  IH1 - S AH0 N - HH AW2 - ER0\nICENHOWER(2)  AY1 - S AH0 N - HH AW2 - ER0\nICENOGLE  IH1 - S AH0 - N OW2 - G AH0 L\nICENOGLE(2)  AY1 - S AH0 - N OW2 - G AH0 L\nICES  AY1 - S AH0 Z\nICES(2)  AY1 - S IH0 Z\nICESKATE  AY1 S - S K EY2 T\nICESKATE(2)  AY1 S - K EY2 T\nICESKATING  AY1 S - S K EY2 - T IH0 NG\nICESKATING(2)  AY1 - S K EY2 - T IH0 NG\nICH  IH1 CH\nICHI  IY1 - CH IY0\nICHIKAWA  IH0 - CH IY0 - K AA1 - W AH0\nICHIRO  IY1 - CH IH0 - R OW0\nICICLE  AY1 - S IH0 - K AH0 L\nICICLES  AY1 - S IH0 - K AH0 L Z\nICILY  AY1 - S IH0 - L IY0\nICING  AY1 - S IH0 NG\nICKES  IH1 K S\nICON  AY1 - K AA0 N\nICONOCLASM  AY2 - K AA1 - N AH0 - K L AE2 - Z AH0 M\nICONOCLAST  AY2 - K AA1 - N AH0 - K L AE2 S T\nICONOCLASTIC  AY2 - K AH0 - N AH0 - K L AE1 - S T IH0 K\nICONOGRAPHY  AY2 - K AH0 - N AA1 - G R AH0 - F IY0\nICONS  AY1 - K AA2 N Z\nICY  AY1 - S IY0\nID  IH1 D\nID(2)  AY1 - D IY1\nIDA  AY1 - D AH0\nIDAHO  AY1 - D AH0 - HH OW2\nIDAHO'S  AY1 - D AH0 - HH OW2 Z\nIDALIA  IH0 - D AA1 - L Y AH0\nIDALINA  IH0 - D AA0 - L IY1 - N AH0\nIDALINE  IH1 - D AH0 - L AY0 N\nIDDINGS  IH1 - D IH0 NG Z\nIDE  AY1 D\nIDEA  AY0 - D IY1 - AH0\nIDEA'S  AY0 - D IY1 - AH0 Z\nIDEAL  AY0 - D IY1 L\nIDEAL'S  AY0 - D IY1 L Z\nIDEALISM  AY0 - D IY1 - L IH0 - Z AH0 M\nIDEALIST  AY0 - D IY1 - L IH0 S T\nIDEALISTIC  AY0 - D IY2 - AH0 - L IH1 - S T IH0 K\nIDEALISTS  AY0 - D IY1 - L IH0 S T S\nIDEALISTS(2)  AY0 - D IY1 - L IH0 S S\nIDEALISTS(3)  AY0 - D IY1 - L IH0 S\nIDEALIZE  AY0 - D IY1 - L AY2 Z\nIDEALIZED  AY0 - D IY1 - AH0 - L AY2 Z D\nIDEALLY  AY0 - D IY1 - L IY0\nIDEALS  AY0 - D IY1 L Z\nIDEAS  AY0 - D IY1 - AH0 Z\nIDEC  AY1 - D AH0 K\nIDEN  AY1 - D AH0 N\nIDENTA  AY0 - D EH1 N - T AH0\nIDENTICAL  AY0 - D EH1 N - T IH0 - K AH0 L\nIDENTICAL(2)  AY0 - D EH1 - N IH0 - K AH0 L\nIDENTICS  AY0 - D EH1 N - T IH0 K S\nIDENTICS(2)  AY0 - D EH1 - N IH0 K S\nIDENTIFIABLE  AY0 - D EH1 N - T AH0 - F AY2 - AH0 - B AH0 L\nIDENTIFIABLE(2)  AY0 - D EH1 - N AH0 - F AY2 - AH0 - B AH0 L\nIDENTIFICATION  AY0 - D EH2 N - T AH0 - F AH0 - K EY1 - SH AH0 N\nIDENTIFICATION(2)  AY0 - D EH2 - N AH0 - F AH0 - K EY1 - SH AH0 N\nIDENTIFICATIONS  AY0 - D EH2 N - T AH0 - F AH0 - K EY1 - SH AH0 N Z\nIDENTIFICATIONS(2)  AY0 - D EH2 - N AH0 - F AH0 - K EY1 - SH AH0 N Z\nIDENTIFIED  AY0 - D EH1 N - T AH0 - F AY2 D\nIDENTIFIED(2)  AY0 - D EH1 - N AH0 - F AY2 D\nIDENTIFIER  AY0 - D EH1 N - T AH0 - F AY2 - ER0\nIDENTIFIER(2)  AY0 - D EH1 - N AH0 - F AY2 - ER0\nIDENTIFIES  AY0 - D EH1 N - T AH0 - F AY2 Z\nIDENTIFIES(2)  AY0 - D EH1 - N AH0 - F AY2 Z\nIDENTIFY  AY0 - D EH1 N - T AH0 - F AY2\nIDENTIFY(2)  AY0 - D EH1 - N AH0 - F AY2\nIDENTIFYING  AY0 - D EH1 N - T AH0 - F AY2 - IH0 NG\nIDENTIFYING(2)  AY0 - D EH1 - N AH0 - F AY2 - IH0 NG\nIDENTIKIT  AY0 - D EH1 N - T IH0 - K IH2 T\nIDENTITIES  AY0 - D EH1 N - T IH0 - T IY0 Z\nIDENTITIES(2)  AY0 - D EH1 - N IH0 - T IY0 Z\nIDENTITY  AY0 - D EH1 N - T AH0 - T IY0\nIDENTITY(2)  AY0 - D EH1 N - T IH0 - T IY0\nIDENTITY(3)  AY0 - D EH1 - N IH0 - T IY0\nIDENTITY(4)  AY0 - D EH1 - N AH0 - T IY0\nIDEOLOGICAL  AY2 - D IY0 - AH0 - L AA1 - JH IH0 - K AH0 L\nIDEOLOGICALLY  AY2 - D IY0 - AH0 - L AA1 - JH IH0 K - L IY0\nIDEOLOGIES  AY2 - D IY0 - AA1 - L AH0 - JH IY0 Z\nIDEOLOGIST  AY2 - D IY0 - AA1 - L AH0 - JH AH0 S T\nIDEOLOGISTS  AY2 - D IY0 - AA1 - L AH0 - JH IH0 S T S\nIDEOLOGISTS(2)  AY2 - D IY0 - AA1 - L AH0 - JH IH0 S S\nIDEOLOGISTS(3)  AY2 - D IY0 - AA1 - L AH0 - JH IH0 S\nIDEOLOGUE  AY1 - D IY0 - AH0 - L OW0 G\nIDEOLOGUES  AY1 - D IY0 - AH0 - L AO0 G Z\nIDEOLOGY  AY2 - D IY0 - AA1 - L AH0 - JH IY0\nIDEONOMY  AY2 - D IY0 - AA1 - N AH0 - M IY0\nIDETTE  AY2 - D EH1 T\nIDIDEROD  AY0 - D IH1 - D ER0 - AA0 D\nIDIOCY  IH1 - D IY0 - AH0 - S IY0\nIDIOM  IH1 - D IY0 - AH0 M\nIDIOMATIC  IH2 - D IY0 - AH0 - M AE1 - T IH0 K\nIDIOMS  IH1 - D IY0 - AH0 M Z\nIDIOSYNCRASIES  IH0 - D IY0 - OW0 - S IH1 N - K R AH0 - S IY2 Z\nIDIOSYNCRASY  IH0 - D IY0 - OW0 - S IH1 N - K R AH0 - S IY2\nIDIOSYNCRATIC  IH0 - D IY0 - OW0 - S IH0 N - K R AE1 - T IH0 K\nIDIOT  IH1 - D IY0 - AH0 T\nIDIOTIC  IH2 - D IY0 - AA1 - T IH0 K\nIDIOTICALLY  IH2 - D IY0 - AA1 - T IH0 K - L IY0\nIDIOTS  IH1 - D IY0 - AH0 T S\nIDITAROD  IH0 - D IH1 - T AH0 - R AO0 D\nIDLE  AY1 - D AH0 L\nIDLED  AY1 - D AH0 L D\nIDLEMAN  AY1 - D AH0 L - M AH0 N\nIDLENESS  AY1 - D AH0 L - N AH0 S\nIDLER  AY1 - D AH0 - L ER0\nIDLER(2)  AY1 D - L ER0\nIDLES  AY1 - D AH0 L Z\nIDLEWILD  AY1 - D AH0 L - W AY2 L D\nIDLEWILD(2)  AY1 - D AH0 L - W AY2 L\nIDLING  AY1 - D AH0 L - IH0 NG\nIDLING(2)  AY1 D - L IH0 NG\nIDLY  AY1 D - L IY0\nIDO  IY1 - D OW2\nIDOL  AY1 - D AH0 L\nIDOLA  IH0 - D OW1 - L AH0\nIDOLATROUS  AY0 - D AA1 - L AH0 - T R AH0 S\nIDOLATRY  AY0 - D AA1 - L AH0 - T R IY0\nIDOLIZE  AY1 - D AH0 - L AY2 Z\nIDOLIZED  AY1 - D AH0 - L AY2 Z D\nIDOLIZES  AY1 - D AH0 - L AY2 - Z IH0 Z\nIDOLIZING  AY1 - D AH0 - L AY2 - Z IH0 NG\nIDOLS  AY1 - D AH0 L Z\nIDONA  IH0 - D OW1 - N AH0\nIDONEY  IH0 - D OW1 - N IY0\nIDONIA  IH0 - D OW1 - N IY0 - AH0\nIDROCARBURI  IH0 - D R AA2 - K AA2 R - B UH1 - R IY0\nIDUNA  IH0 - D UW1 - N AH0\nIDYLL  AY1 - D AH0 L\nIDYLLIC  AY0 - D IH1 - L IH0 K\nIERARDI  IY0 - ER0 - AA1 R - D IY0\nIERNE  IH1 R N\nIEZZI  IY0 - EH1 T - S IY0\nIF  IH1 F\nIF(2)  IH0 F\nIFFY  IH1 - F IY0\nIFIL  AY0 - F IY1 L\nIFILL  IH0 - F IY1 L\nIFINT  AY1 - F IH0 N T\nIFOR  AY1 - F AO2 R\nIFS  IH1 F S\nIF_YOU'RE  IH1 - F Y UH2 R\nIGARASHI  IY2 - G AA0 - R AA1 - SH IY0\nIGE  AY1 JH\nIGEL  IH1 - G AH0 L\nIGENE  AY0 - JH IY1 N\nIGER  AY1 - G ER0\nIGLEHART  AY1 - G AH0 L - HH AA0 R T\nIGLESIA  IY2 - G L EY1 - S IY0 - AH0\nIGLESIAS  IH0 - G L EY1 - S IY0 - IH0 S\nIGLOO  IH1 - G L UW0\nIGMAN  IH1 G - M AH0 N\nIGNACE  IH1 G - N AH0 S\nIGNACIO  IH0 G - N AA1 - S IY0 - OW0\nIGNACIO'S  IH0 G - N AA1 - S IY0 - OW0 Z\nIGNASIAK  IH0 G - N AA1 - S IY0 - AE0 K\nIGNATIA  IH0 G - N AA1 - SH AH0\nIGNATIUS  IH0 G - N EY1 - SH AH0 S\nIGNATOWSKI  IH0 G - N AH0 - T AO1 F S - K IY0\nIGNATZ  IH1 G - N AH0 T S\nIGNEOUS  IH1 G - N IY0 - AH0 S\nIGNITE  IH0 G - N AY1 T\nIGNITED  IH0 G - N AY1 - T IH0 D\nIGNITES  IH0 G - N AY1 T S\nIGNITING  IH0 G - N AY1 - T IH0 NG\nIGNITION  IH0 G - N IH1 - SH AH0 N\nIGNOBLE  IH0 G - N OW1 - B AH0 L\nIGNOMINIOUS  IH2 G - N AH0 - M IH1 - N IY0 - AH0 S\nIGNOMINY  IH1 G - N OW0 - M IH2 - N IY0\nIGNORAMUS  IH2 G - N ER0 - EY1 - M AH0 S\nIGNORANCE  IH1 G - N ER0 - AH0 N S\nIGNORANT  IH1 G - N ER0 - AH0 N T\nIGNORE  IH0 G - N AO1 R\nIGNORED  IH0 G - N AO1 R D\nIGNORES  IH0 G - N AO1 R Z\nIGNORING  IH0 G - N AO1 - R IH0 NG\nIGO  IY1 - G OW0\nIGOE  IY1 - G OW0\nIGON  AY1 - G AH0 N\nIGOR  IH0 - G AO1 R\nIGOR(2)  IY1 - G AO2 R\nIGOU  IH0 - G UW1\nIGUANA  AY0 - G W AA1 - N AH0\nIGUANAS  IH0 - G W AA1 - N AH0 Z\nIGUSHI  IH0 - G UW1 - SH IY0\nIHASZ  AY1 - HH AE0 S\nIHDE  IH1 D\nIHLE  AY1 - HH AH0 L\nIHLENFELDT  IH1 - L IH0 N - F IH0 L T\nIHNEN  IH1 - N AH0 N\nIHRIG  IH1 - R IH0 G\nIHRKE  IH1 R K\nIIAMS  IY1 - AH0 M Z\nIIDA  IY1 - D AH0\nIIE  IY1 - IY0\nIJAMES  IH0 - Y AA1 - M EH0 S\nIJAMES(2)  AY1 - JH EY1 M Z\nIJAZ  IH1 - JH AH0 Z\nIJAZ(2)  IY0 - JH AA1 Z\nIKARD  IH1 - K ER0 D\nIKE  AY1 K\nIKE'S  AY1 K S\nIKEA  AY2 - K IY1 - AH0\nIKEDA  IH0 - K EY1 - D AH0\nIKENBERRY  AY1 - K AH0 N - B EH2 - R IY0\nIKERD  IH1 - K ER0 D\nIKEUCHI  IY0 - K UW1 - CH IY0\nIKEY  IH1 - K IY0\nIKIE  IH1 - K IY0\nIKLE  IH1 - K AH0 L\nIKNER  IH1 K - N ER0\nIL  IH1 L\nILA  IY1 - L AH0\nILALIS  IH2 - L AE1 - L AH0 S\nILALIS'  IH2 - L AE1 - L AH0 S\nILALIS'S  IH2 - L AE1 - L AH0 - S IH0 S\nILAN  IY2 - L AA1 N\nILARDI  IH0 - L AA1 R - D IY0\nILBO  IH1 L - B OW0\nILEANA  IH2 - L IY0 - AE1 - N AH0\nILENE  IH1 - L IY0 N\nILER  AY1 - L ER0\nILES  AY1 L Z\nILETO  AY0 - L EY1 - D OW0\nILG  IH1 L G\nILGENFRITZ  IH1 L - G IH0 N - F R IH0 T S\nILHAE  IH0 L - HH EY1\nILIAD  IH1 - L IY0 - AH0 D\nILIANO  IH2 - L IY0 - AA1 - N OW0\nILIDZA  IH0 - L IH1 D - Z AH0\nILIESCU  IH2 - L IY0 - EH1 - S K Y UW2\nILIFF  IH1 - L IH0 F\nILJIN  IH1 L - JH IH0 N\nILK  IH1 L K\nILKA  IH1 L - K AH0\nILL  IH1 L\nILLEGAL  IH0 - L IY1 - G AH0 L\nILLEGALITIES  IH2 - L IY0 - G AE1 - L IH0 - T IY0 Z\nILLEGALITY  IH2 - L IY0 - G AE1 - L IH0 - T IY0\nILLEGALLY  IH0 - L IY1 - G AH0 - L IY0\nILLEGALS  IH0 - L IY1 - G AH0 L Z\nILLEGIBLE  IH0 - L EH1 - JH AH0 - B AH0 L\nILLEGITIMACY  IH2 - L IH0 - JH IH1 - T AH0 - M AH0 - S IY0\nILLEGITIMATE  IH2 - L IH0 - JH IH1 - T AH0 - M IH0 T\nILLES  AY1 L Z\nILLG  IH1 L G\nILLICIT  IH0 - L IH1 - S AH0 T\nILLICITLY  IH1 - L IH0 - S IH0 T - L IY0\nILLIG  IH1 - L IH0 G\nILLINGWORTH  IH1 - L IH0 NG - W ER2 TH\nILLINOIS  IH2 - L AH0 - N OY1\nILLINOIS'  IH1 - L IH0 - N OY0 Z\nILLINOIS'S  IH2 - L IH0 - N OY1 Z\nILLINOIS(2)  IH2 - L AH0 - N OY1 Z\nILLIQUID  IH0 - L IH1 - K W IH0 D\nILLIQUIDITY  IH2 - L IH0 - K W IH1 - D IH0 - T IY0\nILLITERACY  IH0 - L IH1 - T ER0 - AH0 - S IY0\nILLITERATE  IH0 - L IH1 - T ER0 - AH0 T\nILLITERATES  IH2 - L IH1 - T ER0 - AH0 T S\nILLNESS  IH1 L - N AH0 S\nILLNESSES  IH1 L - N AH0 - S IH0 Z\nILLOGIC  IH0 - L AA1 - JH IH0 K\nILLOGICAL  IH0 - L AA1 - JH IH0 - K AH0 L\nILLS  IH1 L Z\nILLUMINATE  IH0 - L UW1 - M IH0 - N IH0 T\nILLUMINATED  IH0 - L UW1 - M AH0 - N EY2 - T AH0 D\nILLUMINATES  IH0 - L UW1 - M AH0 - N EY2 T S\nILLUMINATING  IH0 - L UW1 - M AH0 - N EY2 - T IH0 NG\nILLUMINATION  IH0 - L UW2 - M AH0 - N EY1 - SH AH0 N\nILLUMINATOR  IH0 - L UW1 - M AH0 - N EY2 - T ER0\nILLUMINED  IH0 - L UW1 - M AH0 N D\nILLUSION  IH0 - L UW1 - ZH AH0 N\nILLUSIONARY  IH0 - L UW1 - ZH AH0 - N EH2 - R IY0\nILLUSIONISM  IH0 - L UW1 - ZH AH0 - N IH2 - Z AH0 M\nILLUSIONIST  IH0 - L UW1 - ZH AH0 - N AH0 S T\nILLUSIONIST'S  IH0 - L UW1 - ZH AH0 - N AH0 S T S\nILLUSIONISTS  IH0 - L UW1 - ZH AH0 - N AH0 S T S\nILLUSIONISTS(2)  IH0 - L UW1 - ZH AH0 - N AH0 S S\nILLUSIONISTS(3)  IH0 - L UW1 - ZH AH0 - N AH0 S\nILLUSIONS  IH0 - L UW1 - ZH AH0 N Z\nILLUSIVE  IH0 - L UW1 - S IH0 V\nILLUSORY  IH0 - L UW1 - S ER0 - IY0\nILLUSTRATE  IH1 - L AH0 S - T R EY2 T\nILLUSTRATED  IH1 - L AH0 S - T R EY2 - T AH0 D\nILLUSTRATED(2)  IH1 - L AH0 S - T R EY2 - T IH0 D\nILLUSTRATES  IH1 - L AH0 S - T R EY2 T S\nILLUSTRATING  IH1 - L AH0 S - T R EY2 - T IH0 NG\nILLUSTRATION  IH2 - L AH0 S - T R EY1 - SH AH0 N\nILLUSTRATIONS  IH2 - L AH0 S - T R EY1 - SH AH0 N Z\nILLUSTRATIVE  IH0 - L AH1 S - T R AH0 - T IH0 V\nILLUSTRATOR  IH1 - L AH0 S - T R EY2 - T ER0\nILLUSTRATORS  IH1 - L AH0 S - T R EY2 - T ER0 Z\nILLUSTRIOUS  IH0 - L AH1 S - T R IY0 - AH0 S\nILLYRIAN  IH0 - L IH1 - R IY0 - AH0 N\nILO  AY1 - L OW0\nILONA  IH0 - L OW1 - N AH0\nILOPANGO  IY2 - L OW0 - P AE1 NG - G OW0\nILSA  IH1 L - S AH0\nILSE  IH1 L S\nILSLEY  IH1 L Z - L IY0\nILVA  IH1 L - V AH0\nILYA  IH1 - L Y AH0\nILYARONOFF  IH1 - L Y AA0 - R AO1 - N AO0 F\nIM  IH1 M\nIMAGE  IH1 - M AH0 JH\nIMAGE(2)  IH1 - M IH0 JH\nIMAGERIES  IH1 - M IH0 - JH R IY0 Z\nIMAGERY  IH1 - M AH0 - JH R IY0\nIMAGERY(2)  IH1 - M IH0 - JH R IY0\nIMAGES  IH1 - M AH0 - JH AH0 Z\nIMAGES(2)  IH1 - M IH0 - JH IH0 Z\nIMAGINABLE  IH0 - M AE1 - JH AH0 - N AH0 - B AH0 L\nIMAGINARY  IH0 - M AE1 - JH AH0 - N EH2 - R IY0\nIMAGINATION  IH0 - M AE2 - JH AH0 - N EY1 - SH AH0 N\nIMAGINATIONS  IH0 - M AE2 - JH AH0 - N EY1 - SH AH0 N Z\nIMAGINATIVE  IH0 - M AE1 - JH AH0 - N AH0 - T IH0 V\nIMAGINATIVELY  IH0 - M AE1 - JH AH0 - N AH0 - T IH0 V - L IY0\nIMAGINE  IH0 - M AE1 - JH AH0 N\nIMAGINED  IH0 - M AE1 - JH AH0 N D\nIMAGINEER  IH0 - M AE2 - JH AH0 - N IH1 R\nIMAGINEERING  IH0 - M AE2 - JH AH0 - N IH1 - R IH0 NG\nIMAGINES  IH0 - M AE1 - JH AH0 N Z\nIMAGING  IH1 - M IH0 - JH IH0 NG\nIMAGINING  IH0 - M AE1 - JH AH0 - N IH0 NG\nIMAI  IH0 - M AY1\nIMAM  AY1 - M AE0 M\nIMAMURA  IH0 - M AA0 - M UH1 - R AH0\nIMAN  AY1 - M AH0 N\nIMARI  IY0 - M AA1 - R IY0\nIMASCO  IH0 - M AE1 - S OW0\nIMAX  AY1 - M AE2 K S\nIMAX'  AY1 - M AE2 K S\nIMAX'S  AY1 - M AE2 K - S IH0 Z\nIMBALANCE  IH0 M - B AE1 - L AH0 N S\nIMBALANCES  IH0 M - B AE1 - L AH0 N - S IH0 Z\nIMBECILE  IH1 M - B AH0 - S AH0 L\nIMBECILE(2)  IH1 M - B AH0 - S AY0 L\nIMBED  IH0 M - B EH1 D\nIMBEDDED  IH0 M - B EH1 - D IH0 D\nIMBER  IH1 M - B ER0\nIMBIBE  IH0 M - B AY1 B\nIMBIBED  IH0 M - B AY1 B D\nIMBODEN  IH1 M - B OW0 - D AH0 N\nIMBROGLIO  IH0 M - B R OW1 - L Y OW0\nIMBROGNO  IH0 M - B R OW1 G - N OW0\nIMBUE  IH0 M - B Y UW1\nIMBUED  IH0 M - B Y UW1 D\nIMBURGIA  IH1 M - B ER0 - G IY0 - AH0\nIMCERA  IH2 M - S EH1 - R AH0\nIMEL  IH1 - M AH0 L\nIMELDA  IH0 - M EH1 L - D AH0\nIMES  AY1 M Z\nIMHOF  IH1 M - HH AH0 F\nIMHOFF  IH1 M - HH AO2 F\nIMIG  IH1 - M IH0 G\nIMITABLE  IH1 - M AH0 - T AH0 - B AH0 L\nIMITATE  IH1 - M AH0 - T EY2 T\nIMITATED  IH1 - M AH0 - T EY2 - T IH0 D\nIMITATES  IH1 - M AH0 - T EY2 T S\nIMITATING  IH1 - M AH0 - T EY2 - T IH0 NG\nIMITATION  IH2 - M AH0 - T EY1 - SH AH0 N\nIMITATIONS  IH2 - M IH0 - T EY1 - SH AH0 N Z\nIMITATIVE  IH1 - M AH0 - T EY2 - T IH0 V\nIMITATOR  IH1 - M AH0 - T EY2 - T ER0\nIMITATORS  IH1 - M IH0 - T EY2 - T ER0 Z\nIMLAY  IH0 M - L EY1\nIMLER  IH1 M - L ER0\nIMM  AY1 - EH1 - M EH1 M\nIMM(2)  IH1 M\nIMMACULATE  IH0 - M AE1 - K Y UW0 - L IH0 T S\nIMMACULATELY  IH0 - M AE1 - K Y AH0 - L AH0 T - L IY0\nIMMANENCE  IH1 - M AH0 - N AH0 N S\nIMMANENT  IH1 - M AH0 - N AH0 N T\nIMMANUEL  IH1 - M AH0 - N UH0 L\nIMMATERIAL  IH2 - M AH0 - T IH1 - R IY0 - AH0 L\nIMMATURE  IH2 - M AH0 - T Y UH1 R\nIMMATURITY  IH2 - M AH0 - CH UH1 - R IH0 - T IY0\nIMMEASURABLE  IH0 - M EH1 - ZH ER0 - AE2 - B AH0 L\nIMMEASURABLY  IH0 - M EH1 - ZH ER0 - AE2 - B L IY0\nIMMEDIACY  IH0 - M IY1 - D IY0 - AH0 - S IY0\nIMMEDIATE  IH0 - M IY1 - D IY0 - AH0 T\nIMMEDIATELY  IH0 - M IY1 - D IY0 - AH0 T - L IY0\nIMMEL  IH1 - M AH0 L\nIMMEMORIAL  IH2 - M AH0 - M AO1 - R IY0 - AH0 L\nIMMENSE  IH0 - M EH1 N S\nIMMENSELY  IH0 - M EH1 N S - L IY0\nIMMERMAN  IH1 - M ER0 - M AH0 N\nIMMERSE  IH0 - M ER1 S\nIMMERSED  IH0 - M ER1 S T\nIMMERSION  IH0 - M ER1 - ZH AH0 N\nIMMIGRANT  IH1 - M AH0 - G R AH0 N T\nIMMIGRANT'S  IH1 - M AH0 - G R AH0 N T S\nIMMIGRANTS  IH1 - M AH0 - G R AH0 N T S\nIMMIGRANTS'  IH1 - M IH0 - G R AH0 N T S\nIMMIGRATE  IH1 - M AH0 - G R EY2 T\nIMMIGRATED  IH1 - M AH0 - G R EY2 - T IH0 D\nIMMIGRATION  IH2 - M AH0 - G R EY1 - SH AH0 N\nIMMINENCE  IH1 - M AH0 - N AH0 N S\nIMMINENT  IH1 - M AH0 - N AH0 N T\nIMMINENTLY  IH1 - M AH0 - N AH0 N T - L IY0\nIMMISCIBLE  IH0 - M IH1 - S AH0 - B AH0 L\nIMMOBILE  IH0 - M OW1 - B AH0 L\nIMMOBILE(2)  IH0 - M OW1 - B AY2 L\nIMMOBILE(3)  IH0 - M OW1 - B IY2 L\nIMMOBILITY  IH2 - M OW0 - B IH1 - L IH0 - T IY0\nIMMOBILIZE  IH0 - M OW1 - B AH0 - L AY2 Z\nIMMOBILIZED  IH0 - M OW1 - B AH0 - L AY2 Z D\nIMMOBILIZING  IH0 - M OW1 - B AH0 - L AY2 - Z IH0 NG\nIMMORAL  IH0 - M AO1 - R AH0 L\nIMMORALITY  IH2 - M ER0 - AE1 - L IH0 - T IY0\nIMMORTAL  IH0 - M AO1 R - T AH0 L\nIMMORTALITY  IH2 - M AO0 R - T AE1 - L IH0 - T IY0\nIMMORTALIZE  IH0 - M AO1 R - T AH0 - L AY0 Z\nIMMORTALIZED  IH0 - M AO1 R - T AH0 - L AY0 Z D\nIMMORTALIZES  IH0 - M AO1 R - T AH0 - L AY0 - Z IH0 Z\nIMMORTALIZING  IH0 - M AO1 R - T AH0 - L AY0 - Z IH0 NG\nIMMORTALS  IH0 - M AO1 R - T AH0 L Z\nIMMOTILE  IH0 - M OW1 - T AH0 L\nIMMOVABLE  IH0 - M UW1 - V AH0 - B AH0 L\nIMMULOGIC  IH1 - M Y UW0 - L AA2 - JH IH0 K\nIMMUNE  IH0 - M Y UW1 N\nIMMUNETECH  IH1 - M Y UW0 N - T EH2 K\nIMMUNEX  IH1 - M Y UW0 - N EH0 K S\nIMMUNITIES  IH0 - M Y UW1 - N IH0 - T IY0 Z\nIMMUNITY  IH0 - M Y UW1 - N AH0 - T IY0\nIMMUNITY(2)  IH0 - M Y UW1 - N IH0 - T IY0\nIMMUNIZATION  IH2 - M Y UW0 - N AH0 - Z EY1 - SH AH0 N\nIMMUNIZATIONS  IH2 - M Y UW0 - N AH0 - Z EY1 - SH AH0 N Z\nIMMUNIZE  IH1 - M Y UW0 - N AY2 Z\nIMMUNIZED  IH1 - M Y AH0 - N AY2 Z D\nIMMUNIZES  IH1 - M Y AH0 - N AY2 - Z IH0 Z\nIMMUNIZING  IH1 - M Y AH0 - N AY2 - Z IH0 NG\nIMMUNO  IH0 - M Y UW1 - N OW0\nIMMUNODEFICIENCY  IH2 - M Y UW0 - N OW0 - D IH2 - F IH1 - SH AH0 N - S IY0\nIMMUNOLOGICAL  IH2 - M Y UW0 - N AH0 - L AA1 - JH IH0 - K AH0 L\nIMMUNOLOGIST  IH2 - M Y UW0 - N AA1 - L AH0 - JH IH0 S T\nIMMUNOLOGY  IH2 - M Y UW0 - N AA1 - L AH0 - JH IY0\nIMMUNOMEDIC  IH1 - M Y UW0 - N OW0 - M EH2 - D IH0 K\nIMMUNOMEDICS  IH1 - M Y UW0 - N OW0 - M EH2 - D IH0 K S\nIMMUNOTHERAPY  IH2 - M Y UW0 - N OW0 - TH EH1 - R AH0 - P IY0\nIMMUTABLE  IH0 - M Y UW1 - T AH0 - B AH0 L\nIMNET  IH1 M - N EH2 T\nIMO  AY1 - M OW0\nIMO(2)  AY1 - EH1 - M OW1\nIMOGEN  IH1 - M AH0 - G AH0 N\nIMOGENE  IH1 - M AH0 - JH IY2 N\nIMONDI  IH0 - M OW1 N - D IY0\nIMONDI(2)  IH0 - M AA1 N - D IY0\nIMP  IH1 M P\nIMPACT  IH0 M - P AE1 K T\nIMPACT(2)  IH1 M - P AE0 K T\nIMPACTED  IH1 M - P AE2 K - T IH0 D\nIMPACTED(2)  IH0 M - P AE1 K - T IH0 D\nIMPACTING  IH0 M - P AE1 K - T IH0 NG\nIMPACTS  IH0 M - P AE1 K T S\nIMPACTS(2)  IH1 M - P AE0 K T S\nIMPACTS(3)  IH0 M - P AE1 K S\nIMPACTS(4)  IH1 M - P AE0 K S\nIMPAIR  IH0 M - P EH1 R\nIMPAIRED  IH0 M - P EH1 R D\nIMPAIRING  IH0 M - P EH1 - R IH0 NG\nIMPAIRMENT  IH0 M - P EH1 R - M AH0 N T\nIMPAIRMENTS  IH0 M - P EH1 R - M AH0 N T S\nIMPAIRS  IH0 M - P EH1 R Z\nIMPALA  IH0 M - P AA1 - L AH0\nIMPALED  IH0 M - P EY1 L D\nIMPANEL  IH0 M - P AE1 - N AH0 L\nIMPANELED  IH0 M - P AE1 - N AH0 L D\nIMPART  IH0 M - P AA1 R T\nIMPARTED  IH0 M - P AA1 R - T IH0 D\nIMPARTIAL  IH0 M - P AA1 R - SH AH0 L\nIMPARTIALITY  IH0 M - P AA2 R - SH IY0 - AE1 - L IH0 - T IY0\nIMPARTIALLY  IH0 M - P AA1 R - SH AH0 - L IY0\nIMPARTING  IH0 M - P AA1 R - T IH0 NG\nIMPARTS  IH0 M - P AA1 R T S\nIMPASSABLE  IH0 M - P AE1 - S AH0 - B AH0 L\nIMPASSE  IH0 M - P AE1 S\nIMPASSE(2)  IH1 M - P AE2 S\nIMPASSION  IH0 M - P AE1 - SH AH0 N\nIMPASSIONED  IH0 M - P AE1 - SH AH0 N D\nIMPASSIVE  IH0 M - P AE1 - S IH0 V\nIMPASSIVELY  IH0 M - P AE1 - S IH0 V - L IY0\nIMPASTATO  IH0 M - P AA0 - S T AA1 - T OW0\nIMPATIENCE  IH0 M - P EY1 - SH AH0 N S\nIMPATIENS  IH0 M - P EY1 - SH AH0 N Z\nIMPATIENT  IH0 M - P EY1 - SH AH0 N T\nIMPATIENTLY  IH0 M - P EY1 - SH AH0 N T - L IY0\nIMPEACH  IH0 M - P IY1 CH\nIMPEACHABLE  IH0 M - P IY1 - CH AH0 - B AH0 L\nIMPEACHED  IH0 M - P IY1 CH T\nIMPEACHES  IH0 M - P IY1 - CH AH0 Z\nIMPEACHING  IH0 M - P IY1 - CH IH0 NG\nIMPEACHMENT  IH0 M - P IY1 CH - M AH0 N T\nIMPEACHMENTS  IH0 M - P IY1 CH - M AH0 N T S\nIMPECCABLE  IH0 M - P EH1 - K AH0 - B AH0 L\nIMPECCABLY  IH0 M - P EH1 - K AH0 - B L IY0\nIMPEDANCE  IH0 M - P IY1 - D AH0 N S\nIMPEDE  IH0 M - P IY1 D\nIMPEDED  IH0 M - P IY1 - D IH0 D\nIMPEDES  IH0 M - P IY1 D Z\nIMPEDIMENT  IH0 M - P EH1 - D AH0 - M AH0 N T\nIMPEDIMENTS  IH0 M - P EH1 - D AH0 - M AH0 N T S\nIMPEDING  IH0 M - P IY1 - D IH0 NG\nIMPEL  IH0 M - P EH1 L\nIMPELLED  IH0 M - P EH1 L D\nIMPEND  IH0 M - P EH1 N D\nIMPENDING  IH0 M - P EH1 N - D IH0 NG\nIMPENETRABLE  IH0 M - P EH1 - N AH0 - T R AH0 - B AH0 L\nIMPERATIVE  IH0 M - P EH1 - R AH0 - T IH0 V\nIMPERATIVES  IH0 M - P EH1 - R AH0 - T IH0 V Z\nIMPERATO  IH0 M - P ER0 - AA1 - T OW0\nIMPERCEPTIBLE  IH2 M - P ER0 - S EH1 P - T IH0 - B AH0 L\nIMPERCEPTIBLY  IH2 M - P ER0 - S EH1 P - T IH0 - B L IY0\nIMPERFECT  IH0 M - P ER1 - F IH0 K T\nIMPERFECTION  IH2 M - P ER0 - F EH1 K - SH AH0 N\nIMPERFECTIONS  IH2 M - P ER0 - F EH1 K - SH AH0 N Z\nIMPERFECTLY  IH0 M - P ER1 - F IH0 K T - L IY0\nIMPERIA  IH0 M - P IY1 - R IY0 - AH0\nIMPERIAL  IH0 M - P IH1 - R IY0 - AH0 L\nIMPERIAL'S  IH0 M - P IH1 - R IY0 - AH0 L Z\nIMPERIALE  IH0 M - P ER0 - IY0 - AA1 - L IY0\nIMPERIALISM  IH0 M - P IH1 - R IY0 - AH0 - L IH2 - Z AH0 M\nIMPERIALIST  IH0 M - P IH1 - R IY0 - AH0 - L IH0 S T\nIMPERIALISTIC  IH0 M - P IY2 - R IY0 - AH0 - L IH1 - S T IH0 K\nIMPERIALISTS  IH0 M - P IH1 - R IY0 - AH0 - L IH0 S T S\nIMPERIALISTS(2)  IH0 M - P IH1 - R IY0 - AH0 - L IH0 S S\nIMPERIALISTS(3)  IH0 M - P IH1 - R IY0 - AH0 - L IH0 S\nIMPERIL  IH0 M - P EH1 - R AH0 L\nIMPERILED  IH0 M - P EH1 - R AH0 L D\nIMPERILING  IH0 M - P EH1 - R AH0 - L IH0 NG\nIMPERILS  IH0 M - P EH1 - R AH0 L Z\nIMPERIOUS  IH0 M - P IH1 - R IY0 - AH0 S\nIMPERMISSIBLE  IH2 M - P ER0 - M IH1 - S IH0 - B AH0 L\nIMPERSONAL  IH0 M - P ER1 - S AH0 - N AH0 L\nIMPERSONALITY  IH0 M - P ER2 - S AH0 - N AE1 - L AH0 - T IY0\nIMPERSONATE  IH0 M - P ER1 - S AH0 - N EY2 T\nIMPERSONATED  IH0 M - P ER1 - S AH0 - N EY2 - T IH0 D\nIMPERSONATING  IH0 M - P ER1 - S AH0 - N EY2 - T IH0 NG\nIMPERSONATION  IH2 M - P ER0 - S AH0 - N EY1 - SH AH0 N\nIMPERSONATOR  IH0 M - P ER1 - S AH0 - N EY0 - T ER0\nIMPERSONATORS  IH0 M - P ER1 - S AH0 - N EY2 - T ER0 Z\nIMPERTINENT  IH0 M - P ER1 - T AH0 - N AH0 N T\nIMPERVIOUS  IH0 M - P ER1 - V IY0 - AH0 S\nIMPETUOUS  IH0 M - P EH1 - CH W AH0 S\nIMPETUS  IH1 M - P AH0 - T AH0 S\nIMPINGE  IH0 M - P IH1 N JH\nIMPINGES  IH0 M - P IH1 N - JH IH0 Z\nIMPISH  IH1 M - P IH0 SH\nIMPLACABLE  IH0 M - P L AE1 - K AH0 - B AH0 L\nIMPLANT  IH0 M - P L AE1 N T\nIMPLANT(2)  IH1 M - P L AE2 N T\nIMPLANTABLE  IH1 M - P L AE2 N - T AH0 - B AH0 L\nIMPLANTATION  IH0 M - P L AE0 N - T EY1 - SH AH0 N\nIMPLANTED  IH0 M - P L AE1 N - T IH0 D\nIMPLANTING  IH0 M - P L AE1 N - T IH0 NG\nIMPLANTS  IH0 M - P L AE1 N T S\nIMPLANTS(2)  IH1 M - P L AE2 N T S\nIMPLAUSIBLE  IH0 M - P L AO1 - Z AH0 - B AH0 L\nIMPLAUSIBLY  IH0 M - P L AO1 - Z AH0 - B L IY0\nIMPLEMENT  IH1 M - P L AH0 - M AH0 N T\nIMPLEMENTATION  IH2 M - P L AH0 - M EH0 N - T EY1 - SH AH0 N\nIMPLEMENTED  IH1 M - P L AH0 - M EH2 N - T AH0 D\nIMPLEMENTED(2)  IH1 M - P L AH0 - M EH2 - N AH0 D\nIMPLEMENTING  IH1 M - P L AH0 - M EH2 N - T IH0 NG\nIMPLEMENTING(2)  IH1 M - P L AH0 - M EH2 - N IH0 NG\nIMPLEMENTS  IH1 M - P L AH0 - M AH0 N T S\nIMPLICATE  IH1 M - P L IH0 - K EY2 T\nIMPLICATED  IH1 M - P L IH0 - K EY2 - T IH0 D\nIMPLICATES  IH1 M - P L IH0 - K EY2 T S\nIMPLICATING  IH1 M - P L IH0 - K EY2 - T IH0 NG\nIMPLICATION  IH2 M - P L AH0 - K EY1 - SH AH0 N\nIMPLICATIONS  IH2 M - P L AH0 - K EY1 - SH AH0 N Z\nIMPLICIT  IH0 M - P L IH1 - S AH0 T\nIMPLICITLY  IH0 M - P L IH1 - S AH0 T - L IY0\nIMPLIED  IH0 M - P L AY1 D\nIMPLIES  IH0 M - P L AY1 Z\nIMPLODE  IH0 M - P L OW1 D\nIMPLODED  IH0 M - P L OW1 - D IH0 D\nIMPLODES  IH0 M - P L OW1 D Z\nIMPLODING  IH0 M - P L OW1 - D IH0 NG\nIMPLORE  IH0 M - P L AO1 R\nIMPLORED  IH0 M - P L AO1 R D\nIMPLORES  IH0 M - P L AO1 R Z\nIMPLORING  IH0 M - P L AO1 - R IH0 NG\nIMPLOSION  IH0 M - P L OW1 - ZH AH0 N\nIMPLY  IH0 M - P L AY1\nIMPLYING  IH0 M - P L AY1 - IH0 NG\nIMPOLITE  IH0 M - P AH0 - L AY2 T\nIMPOLITIC  IH0 M - P AO1 - L IH1 - T IH2 K\nIMPONDERABLE  IH0 M - P AA1 N - D ER0 - AH0 - B AH0 L\nIMPONDERABLES  IH0 M - P AA1 N - D ER0 - AH0 - B AH0 L Z\nIMPORT  IH0 M - P AO1 R T\nIMPORT(2)  IH1 M - P AO0 R T\nIMPORTANCE  IH0 M - P AO1 R - T AH0 N S\nIMPORTANT  IH0 M - P AO1 R - T AH0 N T\nIMPORTANTLY  IH0 M - P AO1 R - T AH0 N T - L IY0\nIMPORTATION  IH2 M - P AO0 R - T EY1 - SH AH0 N\nIMPORTED  IH0 M - P AO1 R - T IH0 D\nIMPORTER  IH0 M - P AO1 R - T ER0\nIMPORTERS  IH0 M - P AO1 R - T ER0 Z\nIMPORTERS'  IH0 M - P AO1 R - T ER0 Z\nIMPORTING  IH0 M - P AO1 R - T IH0 NG\nIMPORTS  IH0 M - P AO1 R T S\nIMPORTS'  IH1 M - P AO0 R T S\nIMPORTS(2)  IH1 M - P AO0 R T S\nIMPOSE  IH0 M - P OW1 Z\nIMPOSED  IH0 M - P OW1 Z D\nIMPOSES  IH0 M - P OW1 - Z AH0 Z\nIMPOSES(2)  IH0 M - P OW1 - Z IH0 Z\nIMPOSING  IH0 M - P OW1 - Z IH0 NG\nIMPOSITION  IH2 M - P AH0 - Z IH1 - SH AH0 N\nIMPOSSIBILITY  IH0 M - P AO2 - S IH0 - B IH1 - L IH0 - T IY0\nIMPOSSIBLE  IH0 M - P AA1 - S AH0 - B AH0 L\nIMPOSSIBLE'S  IH0 M - P AA1 - S AH0 - B AH0 L Z\nIMPOSSIBLY  IH0 M - P AA1 - S AH0 - B L IY0\nIMPOSTOR  IH0 M - P AO1 - S T ER0\nIMPOSTORS  IH0 M - P AO1 - S T ER0 Z\nIMPOTENCE  IH1 M - P AH0 - T AH0 N S\nIMPOTENT  IH1 M - P AH0 - T AH0 N T\nIMPOUND  IH0 M - P AW1 N D\nIMPOUNDED  IH0 M - P AW1 N - D IH0 D\nIMPOUNDMENT  IH0 M - P AW1 N D - M AH0 N T\nIMPOUNDMENTS  IH0 M - P AW1 N D - M AH0 N T S\nIMPOVERISH  IH0 M - P AA1 - V R IH0 SH\nIMPOVERISHED  IH0 M - P AA1 - V R IH0 SH T\nIMPOVERISHES  IH0 M - P AA1 - V R IH0 - SH AH0 Z\nIMPOVERISHMENT  IH0 M - P AA1 - V R IH0 SH - M AH0 N T\nIMPRACTICABLE  IH0 M - P R AE1 K - T IH0 - K AH0 - B AH0 L\nIMPRACTICAL  IH0 M - P R AE1 K - T AH0 - K AH0 L\nIMPRACTICAL(2)  IH0 M - P R AE1 K - T IH0 - K AH0 L\nIMPRECISE  IH1 M - P R AH0 - S AY2 S\nIMPREGNABLE  IH0 M - P R EH1 G - N AH0 - B AH0 L\nIMPREGNATED  IH0 M - P R EH1 G - N EY2 - T AH0 D\nIMPREGNATION  IH0 M - P R EH1 G - N EY1 - SH AH0 N\nIMPRESARIO  IH2 M - P R IH0 - S AA1 - R IY0 - OW2\nIMPRESS  IH0 M - P R EH1 S\nIMPRESS(2)  IH1 M - P R EH2 S\nIMPRESSED  IH0 M - P R EH1 S T\nIMPRESSES  IH0 M - P R EH1 - S IH0 Z\nIMPRESSING  IH0 M - P R EH1 - S IH0 NG\nIMPRESSION  IH0 M - P R EH1 - SH AH0 N\nIMPRESSIONABLE  IH0 M - P R EH1 - SH AH0 N - AH0 - B AH0 L\nIMPRESSIONISM  IH0 M - P R EH1 - SH AH0 N - IH2 - Z AH0 M\nIMPRESSIONIST  IH0 M - P R EH1 - SH AH0 N - AH0 S T\nIMPRESSIONIST(2)  IH0 M - P R EH1 - SH AH0 N - IH0 S T\nIMPRESSIONISTIC  IH0 M - P R EH2 - SH AH0 - N IH1 - S T IH0 K\nIMPRESSIONISTS  IH0 M - P R EH1 - SH AH0 N - IH0 S T S\nIMPRESSIONISTS(2)  IH0 M - P R EH1 - SH AH0 N - IH0 S S\nIMPRESSIONISTS(3)  IH0 M - P R EH1 - SH AH0 N - IH0 S\nIMPRESSIONS  IH0 M - P R EH1 - SH AH0 N Z\nIMPRESSIVE  IH0 M - P R EH1 - S IH0 V\nIMPRESSIVELY  IH0 M - P R EH1 - S IH0 V - L IY0\nIMPRESSMENT  IH0 M - P R EH1 S - M AH0 N T\nIMPRIMATUR  IH2 M - P R IH0 - M AA1 - T ER0\nIMPRIMIS  IH0 M - P R IY1 - M IH0 S\nIMPRINT  IH0 M - P R IH1 N T\nIMPRINT(2)  IH1 M - P R IH0 N T\nIMPRINTED  IH0 M - P R IH1 N - T IH0 D\nIMPRINTED(2)  IH0 M - P R IH1 - N IH0 D\nIMPRINTING  IH0 M - P R IH1 N - T IH0 NG\nIMPRINTING(2)  IH0 M - P R IH1 - N IH0 NG\nIMPRINTS  IH0 M - P R IH1 N T S\nIMPRISON  IH0 M - P R IH1 - Z AH0 N\nIMPRISONED  IH0 M - P R IH1 - Z AH0 N D\nIMPRISONING  IH0 M - P R IH1 - Z AH0 N - IH0 NG\nIMPRISONMENT  IH0 M - P R IH1 - Z AH0 N - M AH0 N T\nIMPROBABLE  IH0 M - P R AA1 - B AH0 - B AH0 L\nIMPROBABLY  IH0 M - P R AA1 - B AH0 - B L IY0\nIMPROMPTU  IH0 M - P R AA1 M P - T UW0\nIMPROPER  IH0 M - P R AA1 - P ER0\nIMPROPERLY  IH0 M - P R AA1 - P ER0 - L IY0\nIMPROPRIETIES  IH2 M - P R AH0 - P R AY1 - AH0 - T IY0 Z\nIMPROPRIETY  IH2 M - P R AH0 - P R AY1 - AH0 - T IY0\nIMPROV  IH1 M - P R AA2 V\nIMPROVE  IH0 M - P R UW1 V\nIMPROVED  IH0 M - P R UW1 V D\nIMPROVEMENT  IH0 M - P R UW1 V - M AH0 N T\nIMPROVEMENTS  IH0 M - P R UW1 V - M AH0 N T S\nIMPROVES  IH0 M - P R UW1 V Z\nIMPROVING  IH0 M - P R UW1 - V IH0 NG\nIMPROVISATION  IH2 M - P R AA0 - V IH0 - Z EY1 - SH AH0 N\nIMPROVISATIONAL  IH2 M - P R AA0 - V IH0 - Z EY1 - SH AH0 - N AH0 L\nIMPROVISATIONS  IH2 M - P R AA0 - V IH0 - Z EY1 - SH AH0 N Z\nIMPROVISE  IH1 M - P R AH0 - V AY2 Z\nIMPROVISE(2)  IH2 M - P R AH0 - V AY1 Z\nIMPROVISED  IH1 M - P R AH0 - V AY2 Z D\nIMPROVISING  IH1 M - P R AH0 - V AY2 - Z IH0 NG\nIMPRUDENCE  IH0 M - P R UW1 - D AH0 N S\nIMPRUDENT  IH0 M - P R UW1 - D AH0 N T\nIMPRUDENTLY  IH0 M - P R UW1 - D AH0 N T - L IY0\nIMPSON  IH1 M P - S AH0 N\nIMPUGN  IH0 M - P Y UW1 N\nIMPUGNED  IH0 M - P Y UW1 N D\nIMPUGNING  IH0 M - P Y UW1 - N IH0 NG\nIMPULSE  IH1 M - P AH0 L S\nIMPULSE(2)  IH0 M - P AH1 L S\nIMPULSES  IH1 M - P AH0 L - S IH0 Z\nIMPULSES(2)  IH0 M - P AH1 L - S IH0 Z\nIMPULSIVE  IH0 M - P AH1 L - S IH0 V\nIMPULSIVELY  IH0 M - P AH1 L - S IH0 V - L IY0\nIMPUNITY  IH0 M - P Y UW1 - N IH0 - T IY0\nIMPURE  IH0 M - P Y UH1 R\nIMPURITIES  IH0 M - P Y UH1 - R AH0 - T IY0 Z\nIMPURITY  IH0 M - P Y UH1 - R AH0 - T IY0\nIMPUTATION  IH2 M - P Y AH0 - T EY1 - SH AH0 N\nIMPUTE  IH0 M - P Y UW1 T\nIMPUTED  IH0 M - P Y UW1 - T IH0 D\nIMRE  IH1 - M R AH0\nIMREG  IH2 M - R EH1 G\nIMREG'S  IH2 M - R EH1 G Z\nIMRIE  IH1 - M ER0 - IY0\nIMUS  AY1 - M AH0 S\nIN  IH0 N\nIN(2)  IH1 N\nIN.  IH1 N\nIN.(2)  IH1 N CH\nINA  IY1 - N AH0\nINABILITY  IH2 N - AH0 - B IH1 - L IH0 - T IY0\nINABINET  IH0 N - AH0 - B IH1 - N IH0 T\nINACCESSIBILITY  IH2 N - AH0 K - S EH2 - S AH0 - B IH1 - L AH0 - T IY0\nINACCESSIBLE  IH2 N - AH0 K - S EH1 - S AH0 - B AH0 L\nINACCURACIES  IH0 N - AE1 - K Y ER0 - AE2 - S IY0 Z\nINACCURACY  IH0 N - AE1 - K Y ER0 - AH0 - S IY0\nINACCURATE  IH0 N - AE1 - K Y ER0 - AH0 T\nINACCURATELY  IH0 N - AE1 - K Y ER0 - AH0 T - L IY0\nINACOM  IH1 N - AH0 - K AA2 M\nINACOM(2)  AY1 - N AH0 - K AA2 M\nINACOMP  AY1 - N AH0 - K AA2 M P\nINACOMP(2)  IH1 N - AH0 - K AA2 M P\nINACTION  IH0 N - AE1 K - SH AH0 N\nINACTIVATE  IH0 N - AE1 K - T IH0 - V EY2 T\nINACTIVATED  IH0 N - AE1 K - T IH0 - V EY2 - T IH0 D\nINACTIVATION  IH0 N - AE2 K - T IH0 - V EY1 - SH AH0 N\nINACTIVE  IH0 N - AE1 K - T IH0 V\nINACTIVITY  IH0 N - AE0 K - T IH1 - V IH0 - T IY0\nINADEQUACIES  IH0 N - AE1 - D AH0 - K W AH0 - S IY0 Z\nINADEQUACY  IH0 N - AE1 - D IH0 - K W AH0 - S IY0\nINADEQUATE  IH0 N - AE1 - D AH0 - K W AH0 T\nINADEQUATE(2)  IH0 N - AE1 - D AH0 - K W EY2 T\nINADEQUATELY  IH0 N - AE1 - D AH0 - K W AH0 T - L IY0\nINADMISSIBLE  IH0 N - AH0 D - M IH1 - S AH0 - B AH0 L\nINADMISSIBLE(2)  IH0 N - AE0 D - M IH1 - S AH0 - B AH0 L\nINADVERTENCE  IH2 N - AH0 D - V ER1 - T AH0 N S\nINADVERTENCE(2)  IH2 N - AE0 D - V ER1 - T AH0 N S\nINADVERTENT  IH2 N - AH0 D - V ER1 - T AH0 N T\nINADVERTENT(2)  IH2 N - AE0 D - V ER1 - T AH0 N T\nINADVERTENTLY  IH2 N - AH0 D - V ER1 - T AH0 N T - L IY0\nINADVERTENTLY(2)  IH2 N - AE0 D - V ER1 - T AH0 N T - L IY0\nINADVISABLE  IH0 N - AH0 D - V AY1 - Z AH0 - B AH0 L\nINADVISABLE(2)  IH0 N - AE0 D - V AY1 - Z AH0 - B AH0 L\nINAEZ  IH2 N - AE1 Z\nINAEZ(2)  IH2 - N EY1 Z\nINALIENABLE  IH0 N - EY1 - L Y AH0 - N AH0 - B AH0 L\nINAMURA  IH2 - N AH0 - M UH1 - R AH0\nINANE  IH0 N - EY1 N\nINANIMATE  IH0 N - AE1 - N AH0 - M AH0 T\nINAPPLICABLE  IH0 N - AE1 - P L IH0 - K AH0 - B AH0 L\nINAPPROPRIATE  IH2 N - AH0 - P R OW1 - P R IY0 - IH0 T\nINAPPROPRIATELY  IH0 N - AH0 - P R AA1 - P R IY0 - AH0 T - L IY0\nINARTICULATE  IH0 N - AA0 R - T IH1 - K Y AH0 - L AH0 T\nINASMUCH  IH0 N - AE1 S - M AH0 K\nINATTENTION  IH0 N - AH0 - T EH1 N - CH AH0 N\nINATTENTIVE  IH2 N - AH0 - T EH1 N - T IH0 V\nINAUDIBLE  IH0 N - AO1 - D AH0 - B AH0 L\nINAUGURAL  IH0 - N AO1 - G ER0 - AH0 L\nINAUGURAL(2)  IH0 - N AO1 - G Y ER0 - AH0 L\nINAUGURATE  IH0 - N AO1 - G Y ER0 - IH0 T\nINAUGURATE(2)  IH0 - N AO1 - G Y ER0 - EY0 T\nINAUGURATED  IH0 - N AO1 - G ER0 - EY2 - T IH0 D\nINAUGURATED(2)  IH0 - N AO1 - G Y ER0 - EY2 - T IH0 D\nINAUGURATES  IH0 - N AO1 - G Y ER0 - IH0 T S\nINAUGURATING  IH0 - N AO1 - G Y ER0 - EY2 - T IH0 NG\nINAUGURATION  IH0 - N AO2 - G Y ER0 - EY1 - SH AH0 N\nINAUGURATIONS  IH0 - N AO2 - G Y ER0 - EY1 - SH AH0 N Z\nINAUSPICIOUS  IH0 N - AW2 - S P IH1 - SH IH0 S\nINBIO  IH0 N - B AY1 - OW0\nINBOARD  IH1 N - B AO2 R D\nINBODEN  IH1 N - B OW0 - D AH0 N\nINBODY  IH1 N - B AA0 - D IY0\nINBORN  IH1 N - B AO2 R N\nINBOUND  IH0 N - B AW1 N D\nINBOUND(2)  IH1 N - B AW0 N D\nINBRED  IH1 N - B R EH2 D\nINBREED  IH1 N - B R IY2 D\nINBREEDING  IH2 N - B R IY1 - D IH0 NG\nINC  IH1 NG K\nINC.  IH1 NG K\nINC.'S  IH1 NG K S\nINC.(2)  IH0 NG - K AO1 R - P AO0 - R EY0 - T AH0 D\nINCA  IH1 NG - K AH0\nINCALCULABLE  IH0 N - K AE1 L - K Y AH0 - L AH0 - B AH0 L\nINCANDESCENT  IH2 N - K AH0 N - D EH1 - S AH0 N T\nINCANT  IH0 N - K AE1 N T\nINCANTATION  IH0 N - K AE1 N - T EY1 - SH AH0 N\nINCANTATORY  IH0 N - K AE1 N - T AH0 - T AO2 - R IY0\nINCAPABLE  IH0 N - K EY1 - P AH0 - B AH0 L\nINCAPACITATE  IH0 N - K AH0 - P AE1 - S IH0 - T EY2 T\nINCAPACITATED  IH0 N - K AH0 - P AE1 - S IH0 - T EY2 - T IH0 D\nINCAPACITATING  IH0 N - K AH0 - P AE1 - S IH0 - T EY2 - T IH0 NG\nINCAPACITATION  IH0 N - K AH0 - P AE2 - S IH0 - T EY1 - SH AH0 N\nINCAPACITY  IH0 N - K AH0 - P AE1 - S AH0 - T IY0\nINCARCERATE  IH0 N - K AA1 R - S ER0 - EY2 T\nINCARCERATED  IH0 N - K AA1 R - S ER0 - EY2 - T IH0 D\nINCARCERATING  IH0 N - K AA1 R - S ER0 - EY2 - T IH0 NG\nINCARCERATION  IH0 N - K AA2 R - S ER0 - EY1 - SH AH0 N\nINCARNATE  IH0 N - K AA1 R - N AH0 T\nINCARNATE(2)  IH0 N - K AA1 R - N EY2 T\nINCARNATION  IH0 N - K AA1 R - N EY1 - SH AH0 N\nINCARNATIONS  IH0 N - K AA0 R - N EY1 - SH AH0 N Z\nINCAS  IH1 NG - K AH0 Z\nINCASE  IH0 N - K EY1 S\nINCATA  IH0 NG - K AA1 - T AH0\nINCATA'S  IH0 NG - K AA1 - T AH0 Z\nINCE  IH1 N S\nINCENDIARY  IH0 N - S EH1 N - D IY0 - EH0 - R IY0\nINCENSE  IH0 N - S EH1 N S\nINCENSE(2)  IH1 N - S EH2 N S\nINCENSED  IH1 N - S EH2 N S T\nINCENTIVE  IH0 N - S EH1 N - T IH0 V\nINCENTIVE(2)  IH0 N - S EH1 - N IH0 V\nINCENTIVES  IH0 N - S EH1 N - T IH0 V Z\nINCENTIVES(2)  IH0 N - S IH1 - N IH0 V Z\nINCEPTION  IH0 N - S EH1 P - SH AH0 N\nINCESSANT  IH0 N - S EH1 - S AH0 N T\nINCESSANTLY  IH0 N - S EH1 - S AH0 N T - L IY0\nINCEST  IH1 N - S EH2 S T\nINCESTUOUS  IH0 N - S EH1 - S CH W AH0 S\nINCH  IH1 N CH\nINCHCAPE  IH1 N - CH K EY2 P\nINCHED  IH1 N CH T\nINCHES  IH1 N - CH AH0 Z\nINCHES'  IH1 N - CH AH0 Z\nINCHES'(2)  IH1 N - CH IH0 Z\nINCHES(2)  IH1 N - CH IH0 Z\nINCHING  IH1 N - CH IH0 NG\nINCHON  IH1 N - CH AH0 N\nINCHON(2)  IH1 N - CH AA0 N\nINCIDENCE  IH1 N - S AH0 - D AH0 N S\nINCIDENCE(2)  IH1 N - S IH0 - D AH0 N S\nINCIDENCES  IH1 N - S AH0 - D AH0 N - S IH0 Z\nINCIDENT  IH1 N - S AH0 - D AH0 N T\nINCIDENTAL  IH2 N - S IH0 - D EH1 N - T AH0 L\nINCIDENTALLY  IH2 N - S IH0 - D EH1 N - T AH0 - L IY0\nINCIDENTALLY(2)  IH2 N - S IH0 - D EH1 N T - L IY0\nINCIDENTALS  IH2 N - S IH0 - D EH1 N - T AH0 L Z\nINCIDENTS  IH1 N - S AH0 - D AH0 N T S\nINCINERATE  IH0 N - S IH1 - N ER0 - EY2 T\nINCINERATED  IH0 N - S IH1 - N ER0 - EY2 - T IH0 D\nINCINERATING  IH0 N - S IH1 - N ER0 - EY2 - T IH0 NG\nINCINERATION  IH0 N - S IH1 - N ER0 - EY2 - SH AH0 N\nINCINERATOR  IH0 N - S IH1 - N ER0 - EY2 - T ER0\nINCINERATORS  IH0 N - S IH1 - N ER0 - EY2 - T ER0 Z\nINCIPIENT  IH0 N - S IH1 - P IY0 - AH0 N T\nINCIRLIK  IH0 N - S ER1 - L IH0 K\nINCISE  IH0 N - S AY1 Z\nINCISED  IH0 N - S AY1 Z D\nINCISION  IH0 N - S IH1 - ZH AH0 N\nINCISIONS  IH0 N - S IH1 - ZH AH0 N Z\nINCISIVE  IH0 N - S AY1 - S IH0 V\nINCISOR  IH0 N - S AY1 - Z ER0\nINCISORS  IH0 N - S AY1 - Z ER0 Z\nINCITE  IH0 N - S AY1 T\nINCITED  IH0 N - S AY1 - T IH0 D\nINCITEMENT  IH0 N - S AY1 T - M AH0 N T\nINCITEMENTS  IH0 N - S AY1 T - M AH0 N T S\nINCITES  IH0 N - S AY1 T S\nINCITING  IH0 N - S AY1 - T IH0 NG\nINCIVILITY  IH0 N - S IH0 - V IH1 - L IH0 - T IY0\nINCLEMENT  IH0 N - K L EH1 - M AH0 N T\nINCLEMENT(2)  IH1 N - K L IH0 - M AH0 N T\nINCLINATION  IH2 N - K L AH0 - N EY1 - SH AH0 N\nINCLINATIONS  IH2 N - K L AH0 - N EY1 - SH AH0 N Z\nINCLINE  IH0 N - K L AY1 N\nINCLINE(2)  IH1 N - K L AY0 N\nINCLINED  IH0 N - K L AY1 N D\nINCLINES  IH0 N - K L AY1 N Z\nINCLINES(2)  IH1 N - K L AY0 N Z\nINCLOSURE  IH0 N - K L OW1 - ZH ER0\nINCLUDE  IH0 N - K L UW1 D\nINCLUDED  IH0 N - K L UW1 - D AH0 D\nINCLUDED(2)  IH0 N - K L UW1 - D IH0 D\nINCLUDES  IH0 N - K L UW1 D Z\nINCLUDING  IH0 N - K L UW1 - D IH0 NG\nINCLUSION  IH0 N - K L UW1 - ZH AH0 N\nINCLUSIONS  IH0 N - K L UW1 - ZH AH0 N Z\nINCLUSIVE  IH0 N - K L UW1 - S IH0 V\nINCLUSIVENESS  IH0 N - K L UW1 - S IH0 V - N IH0 S\nINCLUSIVENESS(2)  IH0 N - K L UW1 - S IH0 V - N EH0 S\nINCO  IH2 N - K OW1\nINCO'S  IH1 NG - K OW0 Z\nINCOGNITO  IH0 N - K AO0 G - N IY1 - T OW0\nINCOHERENCE  IH0 N - K OW0 - HH IH1 - R AH0 N S\nINCOHERENT  IH0 N - K OW0 - HH IH1 - R AH0 N T\nINCOHERENTLY  IH0 N - K OW0 - HH IH1 - R AH0 N T - L IY0\nINCOM  IH1 NG - K AA0 M\nINCOME  IH1 N - K AH2 M\nINCOMES  IH1 N - K AH2 M Z\nINCOMING  IH1 N - K AH2 - M IH0 NG\nINCOMMUNICADO  IH2 N - K AH0 - M Y UW2 - N AH0 - K AA1 - D OW0\nINCOMPARABLE  IH0 N - K AA1 M - P ER0 - AH0 - B AH0 L\nINCOMPARABLY  IH0 N - K AA1 M - P ER0 - AH0 - B L IY0\nINCOMPATIBILITY  IH0 N - K AA2 M - P AH0 - T IH0 - B IH1 - L IH0 - T IY0\nINCOMPATIBLE  IH0 N - K AH0 M - P AE1 - T AH0 - B AH0 L\nINCOMPETENCE  IH0 N - K AA1 M - P AH0 - T AH0 N S\nINCOMPETENCY  IH0 N - K AA1 M - P AH0 - T AH0 N - S IY0\nINCOMPETENT  IH0 N - K AA1 M - P AH0 - T AH0 N T\nINCOMPETENTLY  IH0 N - K AA1 M - P AH0 - T AH0 N T - L IY0\nINCOMPETENTS  IH0 NG - K AA1 M - P AH0 - T AH0 N T S\nINCOMPLETE  IH0 N - K AH0 M - P L IY1 T\nINCOMPREHENSIBLE  IH0 NG - K AA2 M - P R AH0 - HH EH1 N - S IH0 - B AH0 L\nINCOMPRESSIBLE  IH0 N - K AH0 M - P R EH1 - S AH0 - B AH0 L\nINCONCEIVABLE  IH2 N - K AH0 N - S IY1 - V AH0 - B AH0 L\nINCONCLUSIVE  IH0 N - K AH0 N - K L UW1 - S IH0 V\nINCONCLUSIVELY  IH0 NG - K AA1 N - K L UW0 - S IH0 V - L IY0\nINCONGRUITY  IH2 NG - K AO0 NG - R UW1 - IH0 - T IY0\nINCONGRUOUS  IH0 NG - K AO1 NG - R UW0 - AH0 S\nINCONGRUOUSLY  IH0 NG - K AO1 NG - R UW0 - AH0 S - L IY0\nINCONSEQUENTIAL  IH0 NG - K AA2 N - S AH0 - K W EH1 N - CH AH0 L\nINCONSISTENCIES  IH0 NG - K AA1 N - S IH0 - S T EH2 N - S IY0 Z\nINCONSISTENCY  IH2 N - K AH0 N - S IH1 - S T AH0 N - S IY0\nINCONSISTENT  IH2 N - K AH0 N - S IH1 - S T AH0 N T\nINCONSPICUOUS  IH0 NG - K AA1 N - S P IH0 - K W AH0 S\nINCONSTANCY  IH0 N - K AA1 N - S T AH0 N - S IY0\nINCONTINENCE  IH0 N - K AA1 N - T AH0 - N AH0 N S\nINCONTINENT  IH0 N - K AA1 N - T AH0 - N AH0 N T\nINCONTROVERTIBLE  IH0 NG - K AA2 N - T R OW0 - V ER1 - T IH0 - B AH0 L\nINCONVENIENCE  IH2 N - K AH0 N - V IY1 - N Y AH0 N S\nINCONVENIENCED  IH2 N - K AH0 N - V IY1 - N Y AH0 N S T\nINCONVENIENCES  IH2 N - K AH0 N - V IY1 - N Y AH0 N - S IH0 Z\nINCONVENIENT  IH2 N - K AH0 N - V IY1 - N Y AH0 N T\nINCOORDINATION  IH0 N - K OW1 - AO1 R - D AH0 N - EY1 - SH AH0 N\nINCORPORATE  IH0 N - K AO1 R - P ER0 - EY2 T\nINCORPORATED  IH0 N - K AO1 R - P ER0 - EY2 - T AH0 D\nINCORPORATED'S  IH0 N - K AO1 R - P ER0 - EY2 - T IH0 D Z\nINCORPORATED(2)  IH0 N - K AO1 R - P ER0 - EY2 - T IH0 D\nINCORPORATES  IH0 N - K AO1 R - P ER0 - EY2 T S\nINCORPORATING  IH0 N - K AO1 R - P ER0 - EY2 - T IH0 NG\nINCORPORATION  IH0 N - K AO2 R - P ER0 - EY1 - SH AH0 N\nINCORPORATION'S  IH0 N - K AO2 R - P ER0 - EY1 - SH AH0 N Z\nINCORPORATIONS  IH0 N - K AO2 R - P ER0 - EY1 - SH AH0 N Z\nINCORRECT  IH0 N - K ER0 - EH1 K T\nINCORRECTLY  IH0 N - K ER0 - EH1 K T - L IY0\nINCORRIGIBLE  IH0 N - K AA1 - R AH0 - JH AH0 - B AH0 L\nINCORVAIA  IH0 N - K AO0 R - V AA1 - Y AH0\nINCREASE  IH0 N - K R IY1 S\nINCREASE(2)  IH1 N - K R IY2 S\nINCREASED  IH0 N - K R IY1 S T\nINCREASED(2)  IH1 N - K R IY2 S T\nINCREASES  IH0 N - K R IY1 - S AH0 Z\nINCREASES(2)  IH0 N - K R IY1 - S IH0 Z\nINCREASES(3)  IH1 N - K R IY0 - S AH0 Z\nINCREASING  IH0 N - K R IY1 - S IH0 NG\nINCREASINGLY  IH0 N - K R IY1 - S IH0 NG - L IY0\nINCREASINGLY(2)  IH0 N - K R IY1 - S IH0 NG - G L IY0\nINCREDIBLE  IH0 N - K R EH1 - D AH0 - B AH0 L\nINCREDIBLY  IH0 N - K R EH1 - D AH0 - B L IY0\nINCREDULITY  IH2 N - K R AH0 - D UW1 - L IH0 - T IY0\nINCREDULOUS  IH0 N - K R EH1 - JH AH0 - L AH0 S\nINCREMENT  IH1 N - K R AH0 - M AH0 N T\nINCREMENTAL  IH2 N - K R AH0 - M EH1 N - T AH0 L\nINCREMENTAL(2)  IH2 N - K R AH0 - M EH1 - N AH0 L\nINCREMENTALISM  IH2 N - K R AH0 - M EH1 N - T AH0 - L IH0 Z M\nINCREMENTALISM(2)  IH2 N - K R AH0 - M EH1 - N AH0 - L IH0 Z M\nINCREMENTALLY  IH0 N - K R AH0 - M EH1 N - T AH0 - L IY0\nINCREMENTALLY(2)  IH0 N - K R AH0 - M EH1 - N AH0 - L IY0\nINCREMENTS  IH1 NG - K R AH0 - M AH0 N T S\nINCRIMINATE  IH0 N - K R IH1 - M AH0 - N EY2 T\nINCRIMINATING  IH0 N - K R IH1 - M AH0 - N EY2 - T IH0 NG\nINCRIMINATION  IH0 N - K R IH2 - M AH0 - N EY1 - SH AH0 N\nINCRUST  IH0 N - K R AH1 S T\nINCRUSTATION  IH2 N - K R AH0 - S T EY1 - SH AH0 N\nINCSTAR  IH1 NG K - S T AA2 R\nINCUBATE  IH1 N - K Y AH0 - B EY2 T\nINCUBATING  IH1 N - K Y AH0 - B EY2 - T IH0 NG\nINCUBATION  IH2 NG - K Y UW0 - B EY1 - SH AH0 N\nINCUBATOR  IH1 NG - K Y AH0 - B EY2 - T ER0\nINCUBATORS  IH1 NG - K Y UW0 - B EY2 - T ER0 Z\nINCULCATE  IH1 NG - K AH0 L - K EY2 T\nINCULCATED  IH1 NG - K AH0 L - K EY2 - T AH0 D\nINCULCATES  IH1 NG - K AH0 L - K EY2 T S\nINCUMBENCY  IH0 N - K AH1 M - B AH0 N - S IY0\nINCUMBENT  IH0 N - K AH1 M - B AH0 N T\nINCUMBENT'S  IH0 N - K AH1 M - B AH0 N T S\nINCUMBENTS  IH0 N - K AH1 M - B AH0 N T S\nINCUR  IH0 N - K ER1\nINCURABLE  IH0 N - K Y UH1 - R AH0 - B AH0 L\nINCURRED  IH0 N - K ER1 D\nINCURRING  IH0 N - K ER1 - IH0 NG\nINCURS  IH0 N - K ER1 Z\nINCURSION  IH0 N - K ER1 - ZH AH0 N\nINCURSIONS  IH0 N - K ER1 - ZH AH0 N Z\nINDA  IY1 N - D AH0\nINDABA  IH0 N - D AA1 - B AH0\nINDAL  IH1 N - D AH0 L\nINDATA  IH0 N - D AA1 - T AH0\nINDEBTED  IH0 N - D EH1 - T AH0 D\nINDEBTED(2)  IH0 N - D EH1 - T IH0 D\nINDEBTEDNESS  IH0 N - D EH1 - T IH0 D - N IH0 S\nINDECENCY  IH0 N - D IY1 - S AH0 N - S IY0\nINDECENT  IH0 N - D IY1 - S AH0 N T\nINDECISION  IH0 N - D IH0 - S IH1 - ZH AH0 N\nINDECISIVE  IH2 N - D IH0 - S AY1 - S IH0 V\nINDECISIVENESS  IH0 N - D EH1 - S IH0 - S IH0 V - N AH0 S\nINDEED  IH0 N - D IY1 D\nINDEFATIGABLE  IH2 N - D IH0 - F AE1 - T IH0 - G AH0 - B AH0 L\nINDEFENSIBLE  IH0 N - D IH0 - F EH1 N - S AH0 - B AH0 L\nINDEFINABLE  IH0 N - D IH0 - F AY1 - N AH0 - B AH0 L\nINDEFINITE  IH0 N - D EH1 - F AH0 - N AH0 T\nINDEFINITELY  IH0 N - D EH1 - F AH0 - N AH0 T - L IY0\nINDELIBLE  IH0 N - D EH1 - L IH0 - B AH0 L\nINDELIBLY  IH0 N - D EH1 - L AH0 - B L IY0\nINDELICATE  IH0 N - D EH1 - L IH0 - K AH0 T\nINDELICATO  IH0 N - D EH0 - L IY0 - K AA1 - T OW0\nINDEMNIFICATION  IH0 N - D EH2 M - N AH0 - F IH0 - K EY1 - SH AH0 N\nINDEMNIFIED  IH0 N - D EH1 M - N AH0 - F AY2 D\nINDEMNIFY  IH0 N - D EH1 M - N AH0 - F AY2\nINDEMNIFYING  IH0 N - D EH2 M - N IH0 - F AY1 - IH0 NG\nINDEMNITIES  IH0 N - D EH1 M - N IH0 - T IY0 Z\nINDEMNITY  IH0 N - D EH1 M - N AH0 - T IY0\nINDEMNITY(2)  IH0 N - D EH1 M - N IH0 - T IY0\nINDENT  IH0 N - D EH1 N T\nINDENTATION  IH0 N - D EH2 N - T EY1 - SH AH0 N\nINDENTURE  IH0 N - D EH1 N - CH ER0\nINDENTURED  IH0 N - D EH1 N - CH ER0 D\nINDENTURES  IH0 N - D EH1 N - CH ER0 Z\nINDEPENDENCE  IH2 N - D IH0 - P EH1 N - D AH0 N S\nINDEPENDENCE'S  IH2 N - D IH0 - P EH1 N - D AH0 N - S IH0 Z\nINDEPENDENT  IH2 N - D IH0 - P EH1 N - D AH0 N T\nINDEPENDENTLY  IH2 N - D IH0 - P EH1 N - D AH0 N T - L IY0\nINDEPENDENTS  IH2 N - D IH0 - P EH1 N - D AH0 N T S\nINDERAL  IH1 N - D ER0 - AH0 L\nINDESCRIBABLE  IH2 N - D IH0 - S K R AY1 - B AH0 - B AH0 L\nINDESTRUCTIBILITY  IH2 N - D AH0 S T - R AH2 K - T IH0 - B IH1 - L IH0 - T IY0\nINDESTRUCTIBLE  IH2 N - D AH0 S T - R AH1 K - T IH0 - B AH0 L\nINDETERMINATE  IH2 N - D IH0 - T ER1 - M IH0 - N IH0 T\nINDEX  IH1 N - D EH0 K S\nINDEX'S  IH1 N - D EH0 K - S IH0 Z\nINDEXATION  IH1 N - D EH2 K - S EY1 - SH AH0 N\nINDEXED  IH1 N - D EH0 K S T\nINDEXER  IH1 N - D EH2 K - S ER0\nINDEXERS  IH1 N - D EH2 K - S ER0 Z\nINDEXES  IH1 N - D EH0 K - S IH0 Z\nINDEXING  IH1 N - D EH0 K - S IH0 NG\nINDIA  IH1 N - D IY0 - AH0\nINDIA'S  IH1 N - D IY0 - AH0 Z\nINDIAN  IH1 N - D IY0 - AH0 N\nINDIAN'S  IH1 N - D IY0 - AH0 N Z\nINDIANA  IH2 N - D IY0 - AE1 - N AH0\nINDIANA'S  IH2 N - D IY0 - AE1 - N AH0 Z\nINDIANAPOLIS  IH2 N - D IY0 - AH0 N - AE1 - P AH0 - L IH0 S\nINDIANAPOLIS'S  IH2 N - D IY0 - AH0 N - AE1 - P AH0 - L IH0 - S IH0 Z\nINDIANIAN  IH2 N - D IY0 - AE1 - N IY0 - AH0 N\nINDIANIANS  IH2 N - D IY0 - AE1 - N IY0 - AH0 N Z\nINDIANOLA  IH1 N - D IY0 - AH0 - N OW1 - L AH0\nINDIANS  IH1 N - D IY0 - AH0 N Z\nINDIANS'  IH1 N - D IY0 - AH0 N Z\nINDIC  IH1 N - D IH0 K\nINDICATE  IH1 N - D AH0 - K EY2 T\nINDICATED  IH1 N - D AH0 - K EY2 - T AH0 D\nINDICATED(2)  IH1 N - D AH0 - K EY2 - T IH0 D\nINDICATES  IH1 N - D IH0 - K EY2 T S\nINDICATING  IH1 N - D AH0 - K EY2 - T IH0 NG\nINDICATION  IH2 N - D AH0 - K EY1 - SH AH0 N\nINDICATIONS  IH2 N - D AH0 - K EY1 - SH AH0 N Z\nINDICATIVE  IH0 N - D IH1 - K AH0 - T IH0 V\nINDICATOR  IH1 N - D AH0 - K EY2 - T ER0\nINDICATORS  IH1 N - D AH0 - K EY2 - T ER0 Z\nINDICES  IH1 N - D IH0 - S IY2 Z\nINDICES(2)  IH1 N - D AH0 - S IH0 Z\nINDICIA  IH0 N - D IH1 S - Y AH0\nINDICT  IH0 N - D AY1 T\nINDICTED  IH0 N - D AY1 - T AH0 D\nINDICTED(2)  IH0 N - D AY1 - T IH0 D\nINDICTING  IH0 N - D AY1 - T IH0 NG\nINDICTMENT  IH0 N - D AY1 T - M AH0 N T\nINDICTMENTS  IH0 N - D AY1 T - M AH0 N T S\nINDIES  IH1 N - D IY0 Z\nINDIFFERENCE  IH0 N - D IH1 - F ER0 - AH0 N S\nINDIFFERENCE(2)  IH0 N - D IH1 - F R AH0 N S\nINDIFFERENT  IH0 N - D IH1 - F R AH0 N T\nINDIFFERENT(2)  IH0 N - D IH1 - F ER0 - AH0 N T\nINDIGENOUS  IH0 N - D IH1 - JH AH0 - N AH0 S\nINDIGENOUSLY  IH0 N - D IH1 - JH AH0 - N AH0 S - L IY0\nINDIGENT  IH1 N - D IH0 - JH AH0 N T\nINDIGENTS  IH1 N - D IH0 - JH AH0 N T S\nINDIGEST  IH0 N - D AY0 - JH EH1 S T\nINDIGEST(2)  IH0 N - D AH0 - JH EH1 S T\nINDIGESTION  IH2 N - D AY0 - JH EH1 S - CH AH0 N\nINDIGNANT  IH0 N - D IH1 G - N AH0 N T\nINDIGNANTLY  IH0 N - D IH1 G - N AH0 N T - L IY0\nINDIGNATION  IH2 N - D IH0 G - N EY1 - SH AH0 N\nINDIGNITIES  IH0 N - D IH1 G - N AH0 - T IY0 Z\nINDIGNITY  IH0 N - D IH1 G - N AH0 - T IY0\nINDIGO  IH1 N - D AH0 - G OW2\nINDIGO(2)  IH1 N - D IH0 - G OW2\nINDIRA  IH0 N - D IH1 - R AH0\nINDIRECT  IH0 N - D ER0 - EH1 K T\nINDIRECTLY  IH0 N - D ER0 - EH1 K T - L IY0\nINDIRECTLY(2)  IH0 N - D ER0 - EH1 K - L IY0\nINDISCREET  IH0 N - D IH0 - S K R IY1 T\nINDISCRETION  IH2 N - D IH0 - S K R EH1 - SH AH0 N\nINDISCRETIONS  IH2 N - D IH0 - S K R EH1 - SH AH0 N Z\nINDISCRIMINATE  IH0 N - D IH0 - S K R IH1 - M AH0 - N AH0 T\nINDISCRIMINATELY  IH2 N - D IH0 - S K R IH1 - M AH0 - N AH0 T - L IY0\nINDISPENSABLE  IH2 N - D IH0 - S P EH1 N - S AH0 - B AH0 L\nINDISPENSIBLE  IH2 N - D IH0 - S P EH1 N - S IH0 - B AH0 L\nINDISPUTABLE  IH2 N - D IH0 S - P Y UW1 - T AH0 - B AH0 L\nINDISPUTABLY  IH0 N - D IH1 - S P Y UW0 - T AE2 - B L IY0\nINDISTINCT  IH0 N - D IH0 - S T IH1 NG K T\nINDISTINGUISHABLE  IH0 N - D IH0 - S T IH1 NG - G W IH0 - SH AH0 - B AH0 L\nINDITE  IH0 N - D AY1 T\nINDITED  IH0 N - D AY1 - T IH0 D\nINDIUM  IH1 N - D IY0 - AH0 M\nINDIVIDUAL  IH2 N - D AH0 - V IH1 - JH AH0 - W AH0 L\nINDIVIDUAL'S  IH2 N - D AH0 - V IH1 - JH AH0 - W AH0 L Z\nINDIVIDUALISM  IH2 N - D IH0 - V IH0 - D UW1 - AH0 - L IH2 - Z AH0 M\nINDIVIDUALIST  IH2 N - D IH0 - V IH0 - D UW1 - AH0 - L IH0 S T\nINDIVIDUALISTIC  IH2 N - D IH0 - V IH2 - JH UW0 - AH0 - L IH1 - S T IH0 K\nINDIVIDUALISTS  IH2 N - D AH0 - V IH1 - JH UW0 - AH0 - L IH0 S T S\nINDIVIDUALISTS(2)  IH2 N - D AH0 - V IH1 - JH UW0 - AH0 - L IH0 S S\nINDIVIDUALISTS(3)  IH2 N - D AH0 - V IH1 - JH UW0 - AH0 - L IH0 S\nINDIVIDUALITY  IH0 N - D IH2 - V IH0 - JH UW0 - AE1 - L IH0 - T IY0\nINDIVIDUALIZE  IH2 N - D IH0 - V IH1 - JH UW0 - AH0 - L AY0 Z\nINDIVIDUALIZE(2)  IH2 N - D IH0 - V IH1 - JH AH0 - L AY0 Z\nINDIVIDUALIZED  IH2 N - D IH0 - V IH1 - JH UW0 - AH0 - L AY0 Z D\nINDIVIDUALIZED(2)  IH2 N - D IH0 - V IH1 - JH AH0 - L AY0 Z D\nINDIVIDUALLY  IH2 N - D IH0 - V IH1 - JH UW0 - AH0 - L IY0\nINDIVIDUALLY(2)  IH2 N - D IH0 - V IH1 - JH AH0 - L IY0\nINDIVIDUALS  IH2 N - D AH0 - V IH1 - JH AH0 - W AH0 L Z\nINDIVIDUALS'  IH2 N - D IH0 - V IH1 - JH AH0 - W AH0 L Z\nINDIVISIBLE  IH2 N - D IH0 - V IH1 - S IH0 - B AH0 L\nINDO  IH1 N - D OW0\nINDO-EUROPEAN  IH2 N - D OW0 - Y UH2 - R AH0 - P IY1 - AH0 N\nINDOCHINA  IH2 N - D OW0 - CH AY1 - N AH0\nINDOCHINESE  IH2 N - D OW0 - CH AY2 - N IY1 Z\nINDOCTRINATED  IH0 N - D AA1 K - T R AH0 - N EY2 - T IH0 D\nINDOCTRINATION  IH0 N - D AA2 K - T R AH0 - N EY1 - SH AH0 N\nINDOLENT  IH1 N - D AH0 - L AH0 N T\nINDOMITABLE  IH0 N - D AA1 - M AH0 - T AH0 - B AH0 L\nINDONESIA  IH2 N - D OW0 - N IY1 - ZH AH0\nINDONESIA'S  IH2 N - D OW0 - N IY1 - ZH AH0 Z\nINDONESIAN  IH2 N - D OW0 - N IY1 - ZH AH0 N\nINDONESIANS  IH2 N - D OW0 - N IY1 - S IY0 - AH0 N Z\nINDONESIANS(2)  IH2 N - D OW0 - N IY1 - ZH AH0 N Z\nINDOOR  IH1 N - D AO2 R\nINDOORS  IH1 N - D AO2 R Z\nINDOSUEZ  IH1 N - D OW0 - S UW0 - EY1 Z\nINDOSUEZ(2)  IH1 N - D OW0 - S UW0 - EH0 Z\nINDOVINA  IH0 N - D OW0 - V IY1 - N AH0\nINDRI  IH2 N - D R IY1\nINDUCE  IH0 N - D UW1 S\nINDUCED  IH0 N - D UW1 S T\nINDUCEMENT  IH0 N - D UW1 S - M AH0 N T\nINDUCEMENTS  IH0 N - D UW1 S - M AH0 N T S\nINDUCES  IH0 N - D UW1 - S IH0 Z\nINDUCING  IH0 N - D UW1 - S IH0 NG\nINDUCT  IH0 N - D AH1 K T\nINDUCTANCE  IH0 N - D AH1 K - T AH0 N S\nINDUCTED  IH0 N - D AH1 K - T AH0 D\nINDUCTED(2)  IH0 N - D AH1 K - T IH0 D\nINDUCTEE  IH0 N - D AH1 K - T IY1\nINDUCTEES  IH0 N - D AH1 K - T IY1 Z\nINDUCTION  IH0 N - D AH1 K - SH AH0 N\nINDUCTOR  IH0 N - D AH1 K - T ER0\nINDULGE  IH0 N - D AH1 L JH\nINDULGED  IH0 N - D AH1 L JH D\nINDULGENCE  IH0 N - D AH1 L - JH AH0 N S\nINDULGENCES  IH0 N - D AH1 L - JH AH0 N - S AH0 Z\nINDULGENCES(2)  IH0 N - D AH1 L - JH AH0 N - S IH0 Z\nINDULGENT  IH0 N - D AH1 L - JH AH0 N T\nINDULGES  IH0 N - D AH1 L - JH IH0 Z\nINDULGING  IH0 N - D AH1 L - JH IH0 NG\nINDUS  IH1 N - D AH0 S\nINDUSTRI  IH0 N - D AH1 S - T R IY0\nINDUSTRIA  IH0 N - D AH1 S - T R IY0 - AH0\nINDUSTRIAL  IH0 N - D AH1 S - T R IY0 - AH0 L\nINDUSTRIAL'S  IH0 N - D AH1 S - T R IY0 - AH0 L Z\nINDUSTRIALE  IH2 N - D AH0 S - T R IY0 - AA1 - L IY0\nINDUSTRIALI  IH0 N - D AH2 S - T R IY0 - AA1 - L IY0\nINDUSTRIALIST  IH0 N - D AH1 S - T R IY0 - AH0 - L IH0 S T\nINDUSTRIALISTS  IH0 N - D AH1 S - T R IY0 - AH0 - L IH0 S T S\nINDUSTRIALISTS(2)  IH0 N - D AH1 S - T R IY0 - AH0 - L IH0 S S\nINDUSTRIALISTS(3)  IH0 N - D AH1 S - T R IY0 - AH0 - L IH0 S\nINDUSTRIALIZATION  IH0 N - D AH2 S - T R IY0 - AH0 - L IH0 - Z EY1 - SH AH0 N\nINDUSTRIALIZE  IH0 N - D AH1 S - T R IY0 - AH0 - L AY2 Z\nINDUSTRIALIZED  IH0 N - D AH1 S - T R IY0 - AH0 - L AY2 Z D\nINDUSTRIALIZING  IH0 N - D AH1 S - T R IY0 - AH0 - L AY2 - Z IH0 NG\nINDUSTRIALLY  IH0 N - D AH1 S - T R IY0 - AH0 - L IY0\nINDUSTRIALS  IH0 N - D AH1 S - T R IY0 - AH0 L Z\nINDUSTRIALS'  IH0 N - D AH1 S - T R IY0 - AH0 L Z\nINDUSTRIE  IH1 N - D AH0 S - T R IY0\nINDUSTRIELLE  IH0 N - D AH2 S - T R IY0 - EH1 L\nINDUSTRIELLE(2)  IH0 N - D AH1 S - T R IY0 - AH0 - L EH2\nINDUSTRIER  IH1 N - D AH0 S - T R IY2 - ER0\nINDUSTRIES  IH1 N - D AH0 S - T R IY0 Z\nINDUSTRIES'  IH1 N - D AH0 S - T R IY0 Z\nINDUSTRIOUS  IH0 N - D AH1 S - T R IY0 - AH0 S\nINDUSTRIVAERDEN  IH1 N - D AH0 S - T R IY0 - V EH2 R - D AH0 N\nINDUSTRY  IH1 N - D AH0 S - T R IY0\nINDUSTRY'S  IH1 N - D AH0 S - T R IY0 Z\nINDUSTRYWIDE  IH1 N - D AH0 S - T R IY0 - W AY2 D\nINDY  IH1 N - D IY0\nINDYK  IH1 N - D IH0 K\nINEDIBLE  IH0 N - EH1 - D AH0 - B AH0 L\nINEFFABLE  IH0 N - EH1 - F AH0 - B AH0 L\nINEFFECTIVE  IH0 N - IH0 - F EH1 K - T IH0 V\nINEFFECTIVENESS  IH2 N - AH0 - F EH1 K - T IH0 V - N AH0 S\nINEFFECTUAL  IH2 N - AH0 - F EH1 K - CH UW0 - AH0 L\nINEFFICIENCIES  IH0 N - IH0 - F IH1 - SH AH0 N - S IY0 Z\nINEFFICIENCY  IH0 N - IH0 - F IH1 - SH AH0 N - S IY0\nINEFFICIENT  IH0 N - IH0 - F IH1 - SH AH0 N T\nINEFFICIENTLY  IH0 N - IH0 - F IH1 - SH AH0 N T - L IY0\nINELASTIC  IH2 N - AH0 - L AE1 - S T IH0 K\nINELIGIBLE  IH0 N - EH1 - L IH0 - JH AH0 - B AH0 L\nINEPT  IH0 N - EH1 P T\nINEPTITUDE  IH0 N - EH1 P - T IH0 - T UW2 D\nINEPTLY  IH0 N - EH1 P T - L IY0\nINEPTNESS  IH0 - N EH1 P T - N IH0 S\nINEQUALITIES  IH2 N - AH0 - K W AA1 - L IH0 - T IY0 Z\nINEQUALITIES(2)  IH2 N - IH0 - K W AA1 - L IH0 - T IY0 Z\nINEQUALITIES(3)  IH1 N - IY0 - K W AA1 - L IH0 - T IY0 Z\nINEQUALITY  IH2 N - IH0 - K W AA1 - L AH0 - T IY0\nINEQUALITY(2)  IH2 N - AH0 - K W AA1 - L AH0 - T IY0\nINEQUALITY(3)  IH1 N - IY0 - K W AA1 - L AH0 - T IY0\nINEQUITABLE  IH0 N - EH1 - K W AH0 - T AH0 - B AH0 L\nINEQUITIES  IH0 N - EH1 - K W AH0 - T IY0 Z\nINEQUITY  IH0 N - EH1 - K W AH0 - T IY0\nINERCO  IH0 - N ER1 - K OW0\nINERT  IH0 - N ER1 T\nINERTIA  IH0 - N ER1 - SH AH0\nINERTIAL  IH0 - N ER1 - SH AH0 L\nINERTNESS  IH0 - N ER1 T - N AH0 S\nINES  IH1 N - IH0 S\nINES(2)  IH0 N - EH1 S\nINESCAPABLE  IH2 N - IH0 S - K EY1 - P AH0 - B AH0 L\nINEVITABILITY  IH0 N - EH2 - V IH0 - T AH0 - B IH1 - L IH0 - T IY0\nINEVITABLE  IH0 N - EH1 - V AH0 - T AH0 - B AH0 L\nINEVITABLY  IH0 N - EH1 - V AH0 - T AH0 - B L IY0\nINEXACT  IH0 N - IH0 G - Z AE1 K T\nINEXCUSABLE  IH0 N - IH0 K - S K Y UW1 - Z AH0 - B AH0 L\nINEXHAUSTIBLE  IH0 N - IH0 G - Z AO1 - S T AH0 - B AH0 L\nINEXORABLE  IH2 N - EH1 K - S ER0 - AH0 - B AH0 L\nINEXORABLY  IH0 N - EH1 K - S ER0 - AH0 - B L IY0\nINEXPENSIVE  IH2 N - IH0 K - S P EH1 N - S IH0 V\nINEXPENSIVELY  IH2 N - AH0 K - S P EH1 N - S IH0 V - L IY0\nINEXPERIENCE  IH2 N - IH0 K - S P IH1 - R IY0 - AH0 N S\nINEXPERIENCED  IH0 N - IH0 K - S P IH1 - R IY0 - AH0 N S T\nINEXPLICABLE  IH2 N - AH0 K - S P L IH1 - S AH0 - B AH0 L\nINEXPLICABLY  IH2 N - IH0 K - S P L IH1 - K AH0 - B L IY0\nINEXTRICABLY  IH0 N - EH1 K - S T R IH0 - K AH0 - B L IY0\nINEZ  IH0 N - EH1 Z\nINFALLIBILITY  IH0 N - F AE2 - L IH0 - B IH1 - L IH0 - T IY0\nINFALLIBLE  IH0 N - F AE1 - L AH0 - B AH0 L\nINFAMOUS  IH1 N - F AH0 - M AH0 S\nINFAMY  IH1 N - F AH0 - M IY0\nINFANCY  IH1 N - F AH0 N - S IY0\nINFANT  IH1 N - F AH0 N T\nINFANT'S  IH1 N - F AH0 N T S\nINFANTE  IH0 N - F AA1 N - T EY2\nINFANTICIDE  IH0 N - F AE1 N - T AH0 - S AY2 D\nINFANTILE  IH1 N - F AH0 N - T IH0 L\nINFANTINO  IH0 N - F AA0 N - T IY1 - N OW0\nINFANTRY  IH1 N - F AH0 N - T R IY0\nINFANTRYMAN  IH1 N - F AE0 N - T R IY0 - M AH0 N\nINFANTRYMEN  IH1 N - F AE0 N - T R IY0 - M AH0 N\nINFANTS  IH1 N - F AH0 N T S\nINFANTS'  IH1 N - F AH0 N T S\nINFARCTION  IH0 N - F AA1 R K - SH AH0 N\nINFATUATE  IH0 N - F AE1 - CH UW0 - EY2 T\nINFATUATED  IH0 N - F AE1 - CH UW0 - EY2 - T IH0 D\nINFATUATING  IH0 N - F AE1 - CH UW0 - EY2 - T IH0 NG\nINFATUATION  IH0 N - F AE2 - CH UW0 - EY1 - SH AH0 N\nINFEASIBLE  IH0 N - F IY1 - Z AH0 - B AH0 L\nINFECT  IH0 N - F EH1 K T\nINFECTED  IH0 N - F EH1 K - T AH0 D\nINFECTED(2)  IH0 N - F EH1 K - T IH0 D\nINFECTING  IH0 N - F EH1 K - T IH0 NG\nINFECTION  IH0 N - F EH1 K - SH AH0 N\nINFECTIONS  IH0 N - F EH1 K - SH AH0 N Z\nINFECTIOUS  IH0 N - F EH1 K - SH AH0 S\nINFECTIVE  IH0 N - F EH1 K - T IH0 V\nINFECTS  IH0 N - F EH1 K T S\nINFER  IH0 N - F ER1\nINFERENCE  IH1 N - F ER0 - AH0 N S\nINFERENCES  IH1 N - F ER0 - EH2 N - S IH0 Z\nINFERIOR  IH0 N - F IH1 - R IY0 - ER0\nINFERIORITY  IH2 N - F IH0 - R IY0 - AO1 - R IH0 - T IY0\nINFERNAL  IH0 N - F ER1 - N AH0 L\nINFERNO  IH0 N - F ER1 - N OW0\nINFERRED  IH0 N - F ER1 D\nINFERRING  IH0 N - F ER1 - IH0 NG\nINFERS  IH0 N - F ER1 Z\nINFERTILE  IH0 N - F ER1 - T AH0 L\nINFERTILITY  IH2 N - F ER0 - T IH1 - L IH0 - T IY0\nINFEST  IH0 N - F EH1 S T\nINFESTATION  IH0 N - F EH1 - S T EY1 - SH AH0 N\nINFESTATIONS  IH2 N - F EH2 - S T EY1 - SH AH0 N Z\nINFESTED  IH0 N - F EH1 - S T AH0 D\nINFESTED(2)  IH0 N - F EH1 - S T IH0 D\nINFESTS  IH0 N - F EH1 S T S\nINFESTS(2)  IH2 N - F EH1 S S\nINFESTS(3)  IH2 N - F EH1 S\nINFIDEL  IH1 N - F IH0 - D EH2 L\nINFIDELITIES  IH2 N - F IH0 - D EH1 - L IH0 - T IY0 Z\nINFIDELITY  IH2 N - F IH0 - D EH1 - L IH0 - T IY0\nINFIDELS  IH1 N - F IH0 - D EH0 L Z\nINFIELD  IH1 N - F IY2 L D\nINFIELDER  IH1 N - F IY2 L - D ER0\nINFIELDERS  IH1 N - F IY2 L - D ER0 Z\nINFIGHTING  IH1 N - F AY2 - T IH0 NG\nINFILTRATE  IH0 N - F IH1 L - T R EY2 T\nINFILTRATE(2)  IH1 N - F IH0 L - T R EY2 T\nINFILTRATED  IH0 N - F IH1 L - T R EY2 - T IH0 D\nINFILTRATED(2)  IH1 N - F IH0 L - T R EY2 - T IH0 D\nINFILTRATING  IH0 N - F IH1 L - T R EY2 - T IH0 NG\nINFILTRATION  IH2 N - F IH0 L - T R EY1 - SH AH0 N\nINFILTRATOR  IH1 N - F IH0 L - T R EY2 - T ER0\nINFILTRATORS  IH1 N - F IH0 L - T R EY2 - T ER0 Z\nINFINGER  IH1 N - F IH0 - NG ER0\nINFINITE  IH1 N - F AH0 - N AH0 T\nINFINITELY  IH1 N - F AH0 - N AH0 T - L IY0\nINFINITESIMAL  IH2 N - F IH0 - N IH0 - T EH1 - S IH0 - M AH0 L\nINFINITI  IH0 N - F IH1 - N IH0 - T IY0\nINFINITIVE  IH0 N - F IH1 - N IH0 - T IH0 V\nINFINITUM  IH0 N - F IH1 - N IH0 - T AH0 M\nINFINITY  IH0 N - F IH1 - N AH0 - T IY0\nINFINITY(2)  IH0 N - F IH1 - N IH0 - T IY0\nINFIRM  IH0 N - F ER1 M\nINFIRMARY  IH0 N - F ER1 - M ER0 - IY0\nINFIRMED  IH0 N - F ER1 M D\nINFIRMITIES  IH0 N - F ER1 - M IH0 - T IY0 Z\nINFIRMITY  IH0 N - F ER1 - M IH0 - T IY0\nINFLAME  IH0 N - F L EY1 M\nINFLAMED  IH0 N - F L EY1 M D\nINFLAMES  IH0 N - F L EY1 M Z\nINFLAMING  IH0 N - F L EY1 - M IH0 NG\nINFLAMMABLE  IH0 N - F L AE1 - M AH0 - B AH0 L\nINFLAMMATION  IH2 N - F L AH0 - M EY1 - SH AH0 N\nINFLAMMATORY  IH0 N - F L AE1 - M AH0 - T AO2 - R IY0\nINFLATABLE  IH0 N - F L EY1 - T AH0 - B AH0 L\nINFLATE  IH0 N - F L EY1 T\nINFLATED  IH0 N - F L EY1 - T AH0 D\nINFLATED(2)  IH0 N - F L EY1 - T IH0 D\nINFLATES  IH0 N - F L EY1 T S\nINFLATING  IH0 N - F L EY1 - T IH0 NG\nINFLATION  IH0 N - F L EY1 - SH AH0 N\nINFLATION'S  IH0 N - F L EY1 - SH AH0 N Z\nINFLATIONARY  IH0 N - F L EY1 - SH AH0 N - EH2 - R IY0\nINFLATOR  IH0 N - F L EY1 - T ER0\nINFLECTED  IH0 N - F L EH1 K - T AH0 D\nINFLECTION  IH0 N - F L EH1 K - SH AH0 N\nINFLECTIONS  IH0 N - F L EH1 K - SH AH0 N Z\nINFLEXIBILITY  IH0 N - F L EH2 K - S IH0 - B IH1 - L IH0 - T IY0\nINFLEXIBLE  IH0 N - F L EH1 K - S AH0 - B AH0 L\nINFLICT  IH0 N - F L IH1 K T\nINFLICTED  IH0 N - F L IH1 K - T IH0 D\nINFLICTING  IH0 N - F L IH1 K - T IH0 NG\nINFLICTION  IH0 N - F L IH1 K - SH AH0 N\nINFLICTS  IH0 N - F L IH1 K T S\nINFLICTS(2)  IH0 N - F L IH1 K S\nINFLIGHT  IH1 N - F L AY2 T\nINFLOW  IH1 N - F L OW2\nINFLOWS  IH1 N - F L OW2 Z\nINFLUENCE  IH1 N - F L UW0 - AH0 N S\nINFLUENCED  IH1 N - F L UW0 - AH0 N S T\nINFLUENCES  IH1 N - F L UW2 - AH0 N - S IH0 Z\nINFLUENCING  IH1 N - F L UW2 - AH0 N - S IH0 NG\nINFLUENTIAL  IH2 N - F L UW0 - EH1 N - CH AH0 L\nINFLUENZA  IH2 N - F L UW0 - EH1 N - Z AH0\nINFLUX  IH1 N - F L AH2 K S\nINFO  IH1 N - F OW0\nINFOCORP  IH1 N - F OW0 - K AO2 R P\nINFOMERCIAL  IH1 N - F OW0 - M ER2 - SH AH0 L\nINFOMERCIAL'S  IH1 N - F OW0 - M ER2 - SH AH0 L Z\nINFOMERCIALS  IH1 N - F OW0 - M ER2 - SH AH0 L Z\nINFORM  IH0 N - F AO1 R M\nINFORMAL  IH0 N - F AO1 R - M AH0 L\nINFORMALITY  IH2 N - F ER0 - M AE1 - L IH0 - T IY0\nINFORMALLY  IH0 N - F AO1 R - M AH0 - L IY0\nINFORMALS  IH0 N - F AO1 R - M AH0 L Z\nINFORMANT  IH0 N - F AO1 R - M AH0 N T\nINFORMANTS  IH0 N - F AO1 R - M AH0 N T S\nINFORMATIC  IH0 N - F ER0 - M AE1 - T IH0 K\nINFORMATIC(2)  IH0 N - F AO1 R - M AE1 - T IH0 K\nINFORMATICS  IH2 N - F ER0 - M AE1 - T IH0 K S\nINFORMATICS(2)  IH0 N - F AO1 R - M AE1 - T IH0 K S\nINFORMATION  IH2 N - F ER0 - M EY1 - SH AH0 N\nINFORMATION'S  IH2 N - F ER0 - M EY1 - SH AH0 N Z\nINFORMATION'S(2)  IH0 N - F AO1 R - M EY1 - SH AH0 N Z\nINFORMATION(2)  IH0 N - F AO1 R - M EY1 - SH AH0 N\nINFORMATIONAL  IH2 N - F ER0 - M EY1 - SH AH0 - N AH0 L\nINFORMATIONAL(2)  IH0 N - F AO1 R - M EY1 - SH AH0 - N AH0 L\nINFORMATIONS  IH2 N - F ER0 - M EY1 - SH AH0 N Z\nINFORMATIONS(2)  IH0 N - F AO1 R - M EY1 - SH AH0 N Z\nINFORMATIVE  IH0 N - F AO1 R - M AH0 - T IH0 V\nINFORMED  IH0 N - F AO1 R M D\nINFORMER  IH0 N - F AO1 R - M ER0\nINFORMERS  IH0 N - F AO1 R - M ER0 Z\nINFORMING  IH0 N - F AO1 R - M IH0 NG\nINFORMIX  IH0 N - F AO1 R - M IH0 K S\nINFORMS  IH0 N - F AO1 R M Z\nINFOSCAN  IH1 N - F OW0 - S K AE2 N\nINFOTAINMENT  IH0 N - F OW0 - T EY1 N - M AH0 N T\nINFOTECH  IH1 N - F OW0 - T EH2 K\nINFOTECHNOLOGY  IH2 N - F OW0 - T EH0 K - N AA1 - L AH0 - JH IY0\nINFOTRON  IH1 N - F OW0 - T R AA2 N\nINFOTRON'S  IH1 N - F OW0 - T R AA2 N Z\nINFOWORLD  IH1 N - F OW0 - W ER2 L D\nINFRA  IH1 N - F R AH0\nINFRACTION  IH0 N - F R AE1 K - SH AH0 N\nINFRACTIONS  IH0 N - F R AE1 K - SH AH0 N Z\nINFRARED  IH2 N - F R ER0 - EH1 D\nINFRASTRUCTURAL  IH2 N - F R AH0 - S T R AH1 K - CH ER0 - AH0 L\nINFRASTRUCTURE  IH2 N - F R AH0 - S T R AH1 K - CH ER0\nINFRASTRUCTURES  IH2 N - F R AH0 - S T R AH1 K - CH ER0 Z\nINFREQUENCY  IH0 N - F R IY1 - K W AH0 N - S IY0\nINFREQUENT  IH0 N - F R IY1 - K W AH0 N T\nINFREQUENTLY  IH0 N - F R IY1 - K W AH0 N T - L IY0\nINFRINGE  IH0 N - F R IH1 N JH\nINFRINGED  IH0 N - F R IH1 N JH D\nINFRINGEMENT  IH0 N - F R IH1 N JH - M AH0 N T\nINFRINGEMENTS  IH0 N - F R IH1 N JH - M AH0 N T S\nINFRINGES  IH0 N - F R IH1 N - JH IH0 Z\nINFRINGING  IH0 N - F R IH1 N - JH IH0 NG\nINFURIATE  IH0 N - F Y UH1 - R IY0 - EY2 T\nINFURIATED  IH0 N - F Y UH1 - R IY0 - EY2 - T AH0 D\nINFURIATED(2)  IH0 N - F Y UH1 - R IY0 - EY2 - T IH0 D\nINFURIATES  IH0 N - F Y UH1 - R IY0 - EY2 T S\nINFURIATING  IH0 N - F Y UH1 - R IY0 - EY2 - T IH0 NG\nINFUSE  IH0 N - F Y UW1 Z\nINFUSED  IH0 N - F Y UW1 Z D\nINFUSES  IH0 N - F Y UW1 - Z IH0 Z\nINFUSING  IH0 N - F Y UW1 - Z IH0 NG\nINFUSION  IH0 N - F Y UW1 - ZH AH0 N\nINFUSIONS  IH0 N - F Y UW1 - ZH AH0 N Z\nING  IH1 NG\nINGA  IY1 NG - G AH0\nINGALLS  IH0 NG - G AO1 L Z\nINGALSBE  IH1 NG - G AH0 L S - B IY0\nINGAR  IH1 NG - G ER0\nINGBER  IH1 NG - B ER0\nINGE  IH1 N JH\nINGELHEIM  IH1 NG - G AH0 L - HH AY2 M\nINGELS  IH1 NG - G AH0 L Z\nINGEMAR  IH1 NG - G IH0 - M ER0\nINGEMAR(2)  IH1 NG - G IH0 - M AA0 R\nINGENIOUS  IH0 N - JH IY1 - N Y AH0 S\nINGENIOUSLY  IH0 N - JH IY1 - N Y AH0 S - L IY0\nINGENITO  IH0 NG - G EH0 - N IY1 - T OW0\nINGENITO(2)  IH0 NG - JH EH0 - N IY1 - T OW0\nINGENUE  IH0 N - JH EH1 - N Y UW0\nINGENUE(2)  AA1 N - JH AH0 - N UW2\nINGENUE(3)  IH0 N - JH EH1 - N UW0\nINGENUE(4)  IH1 N - JH AH0 - N UW0\nINGENUITY  IH0 N - JH AH0 - N UW1 - AH0 - T IY0\nINGENUOUS  IH0 N - JH EH1 - N Y UW0 - AH0 S\nINGER  IH1 - NG ER0\nINGERSOLL  IH1 NG - G ER0 - S AO0 L\nINGERSON  IH1 NG - G ER0 - S AH0 N\nINGEST  IH0 N - JH EH1 S T\nINGESTED  IH0 N - JH EH1 - S T AH0 D\nINGESTING  IH0 N - JH EH1 - S T IH0 NG\nINGESTION  IH0 N - JH EH1 S - CH AH0 N\nINGHAM  IH1 - NG AH0 M\nINGHRAM  IH0 NG - G R AE1 M\nINGIMARSON  IH1 - NG AH0 - M AA2 R - S AH0 N\nINGLE  IH1 NG - G AH0 L\nINGLEBERT  IH1 NG - G AH0 L - B ER0 T\nINGLENOOK  IH1 NG - G AH0 L - N UH2 K\nINGLES  IH1 NG - G AH0 L Z\nINGLESE  IH1 NG - G L IY0 Z\nINGLETT  IH0 NG - G L EH1 T\nINGLEWOOD  IH1 NG - G AH0 L - W UH2 D\nINGLIS  IH1 NG - G L IH0 S\nINGLISH  IH1 NG - G AH0 L - IH0 SH\nINGLORIOUS  IH0 N - G L AO1 - R IY0 - AH0 S\nINGMAN  IH1 NG - M AH0 N\nINGMAR  IH1 NG - M AA0 R\nINGMIRE  IH1 NG - M AY0 R\nINGO  IH1 NG - G OW0\nINGOGLIA  IH0 NG - G OW1 - G L IY0 - AH0\nINGOLD  IH1 NG - G OW0 L D\nINGOT  IH1 NG - G AH0 T\nINGOTS  IH1 NG - G AH0 T S\nINGRAHAM  IH1 NG - G R AH0 - HH AE2 M\nINGRAINED  IH0 N - G R EY1 N D\nINGRAM  IH1 NG - G R AH0 M\nINGRAO  IY1 NG - G R AW0\nINGRASSIA  IH0 NG - G R AA1 - SH AH0\nINGRATIATE  IH0 NG - G R EY1 - SH IY0 - EY2 T\nINGRATIATING  IH0 NG - G R EY1 - SH IY0 - EY2 - T IH0 NG\nINGREDIENT  IH0 N - G R IY1 - D IY0 - AH0 N T\nINGREDIENTS  IH0 N - G R IY1 - D IY0 - AH0 N T S\nINGRIA  IH1 NG - G R IY0 - AH0\nINGRID  IH1 NG - G R IH0 D\nINGRUM  IH1 NG - G R AH0 M\nINGVAR  IH1 NG - V AA0 R\nINGWERSEN  IH1 NG - G W ER0 - S AH0 N\nINHABIT  IH0 N - HH AE1 - B AH0 T\nINHABITANT  IH0 N - HH AE1 - B AH0 - T AH0 N T\nINHABITANT(2)  IH0 N - HH AE1 - B IH0 - T AH0 N T\nINHABITANTS  IH0 N - HH AE1 - B AH0 - T AH0 N T S\nINHABITANTS(2)  IH0 N - HH AE1 - B IH0 - T AH0 N T S\nINHABITATION  IH0 N - HH AE2 - B AH0 - T EY1 - SH AH0 N\nINHABITED  IH0 N - HH AE1 - B AH0 - T AH0 D\nINHABITING  IH0 N - HH AE1 - B AH0 - T IH0 NG\nINHABITS  IH0 N - HH AE1 - B AH0 T S\nINHALABLE  IH0 N - HH EY1 - L AH0 - B AH0 L\nINHALANT  IH0 N - HH EY1 - L AH0 N T\nINHALANTS  IH0 N - HH EY1 - L AH0 N T S\nINHALATION  IH0 N - AH0 - L EY1 - SH AH0 N\nINHALATION(2)  IH2 N - HH AH0 - L EY1 - SH AH0 N\nINHALE  IH0 N - HH EY1 L\nINHALED  IH0 N - HH EY1 L D\nINHALER  IH0 N - HH EY1 - L ER0\nINHALING  IH0 N - HH EY1 - L IH0 NG\nINHERENT  IH0 N - HH IH1 - R AH0 N T\nINHERENT(2)  IH0 N - HH EH1 - R AH0 N T\nINHERENTLY  IH0 N - HH IH1 - R AH0 N T - L IY0\nINHERENTLY(2)  IH0 N - HH EH1 - R AH0 N T - L IY0\nINHERIT  IH0 N - HH EH1 - R AH0 T\nINHERITABLE  IH0 N - HH EH1 - R AH0 - T AH0 - B AH0 L\nINHERITANCE  IH0 N - HH EH1 - R AH0 - T AH0 N S\nINHERITED  IH0 N - HH EH1 - R AH0 - T IH0 D\nINHERITING  IH0 N - HH EH1 - R AH0 - T IH0 NG\nINHERITOR  IH0 N - HH EH1 - R AH0 - T ER0\nINHERITS  IH0 N - HH EH1 - R AH0 T S\nINHIBIT  IH0 N - HH IH1 - B AH0 T\nINHIBITED  IH0 N - HH IH1 - B AH0 - T IH0 D\nINHIBITING  IH0 N - HH IH1 - B AH0 - T IH0 NG\nINHIBITION  IH2 N - HH AH0 - B IH1 - SH AH0 N\nINHIBITION(2)  IH2 N - AH0 - B IH1 - SH AH0 N\nINHIBITIONS  IH2 N - HH AH0 - B IH1 - SH AH0 N Z\nINHIBITIONS(2)  IH2 N - AH0 - B IH1 - SH AH0 N Z\nINHIBITOR  IH0 N - HH IH1 - B AH0 - T ER0\nINHIBITORS  IH0 N - HH IH1 - B AH0 - T ER0 Z\nINHIBITORY  IH0 N - HH IH1 - B AH0 - T AO2 - R IY0\nINHIBITS  IH0 N - HH IH1 - B AH0 T S\nINHOFE  IH1 N - HH OW2 F\nINHOFE'S  IH1 N - HH OW2 F S\nINHOFE'S(2)  IH1 N - HH AA2 F S\nINHOFE(2)  IH1 N - HH AA2 F\nINHOSPITABLE  IH0 N - HH AA1 - S P AH0 - T AH0 - B AH0 L\nINHOSPITABLE(2)  IH0 N - HH AA0 - S P IH1 - T AH0 - B AH0 L\nINHOUSE  IH1 N - HH AW2 S\nINHUMAN  IH0 N - HH Y UW1 - M AH0 N\nINHUMANE  IH0 N - HH Y UW0 - M EY1 N\nINHUMANITY  IH0 N - HH Y UW0 - M AE1 - N AH0 - T IY0\nINIGA  IH0 - N IY1 - G AH0\nINIGUEZ  IH0 - N IY1 - G EH0 Z\nINIKI  IY0 - N IY1 - K IY0\nINIKPRATT  IH0 - N IY1 K - P R AE0 T\nINIMICAL  IH0 - N IH1 - M IH0 - K AH0 L\nINIMITABLE  IH0 - N IH1 - M AH0 - T AH0 - B AH0 L\nINISS  IH1 N - IH0 S\nINITIAL  IH0 - N IH1 - SH AH0 L\nINITIALED  IH0 - N IH1 - SH AH0 L D\nINITIALING  IH - N IH1 - SH AH0 L - IH0 NG\nINITIALLY  IH0 - N IH1 - SH AH0 - L IY0\nINITIALS  IH0 - N IH1 - SH AH0 L Z\nINITIATE  IH0 - N IH1 - SH IY0 - EY2 T\nINITIATED  IH0 - N IH1 - SH IY0 - EY2 - T AH0 D\nINITIATED(2)  IH0 - N IH1 - SH IY0 - EY2 - T IH0 D\nINITIATES  IH0 - N IH1 - SH IY0 - AH0 T S\nINITIATING  IH0 - N IH1 - SH IY0 - EY2 - T IH0 NG\nINITIATION  IH0 - N IH2 - SH IY0 - EY1 - SH AH0 N\nINITIATIVE  IH0 - N IH1 - SH AH0 - T IH0 V\nINITIATIVE(2)  IH0 - N IH1 - SH Y AH0 - T IH0 V\nINITIATIVES  IH0 - N IH1 - SH AH0 - T IH0 V Z\nINITIATIVES(2)  IH0 - N IH1 - SH Y AH0 - T IH0 V Z\nINITIATOR  IH2 - N IH0 - SH IY1 - EY0 - T ER0\nINITIATORS  IH0 - N IH1 - SH IY0 - EY0 - T ER0 Z\nINITIO  IH0 - N IH1 - T IY0 - OW0\nINITIO(2)  IH0 - N IH1 - SH IY0 - OW0\nINIZIATIVA  IH2 - N IH0 - Z IY2 - AH0 - T IY1 - V AH0\nINJECT  IH0 N - JH EH1 K T\nINJECTABLE  IH0 N - JH EH1 K - T AH0 - B AH0 L\nINJECTED  IH0 N - JH EH1 K - T AH0 D\nINJECTED(2)  IH0 N - JH EH1 K - T IH0 D\nINJECTING  IH0 N - JH EH1 K - T IH0 NG\nINJECTION  IH0 N - JH EH1 K - SH AH0 N\nINJECTIONS  IH0 N - JH EH1 K - SH AH0 N Z\nINJECTOR  IH0 N - JH EH1 K - T ER0\nINJECTORS  IH0 N - JH EH1 K - T ER0 Z\nINJECTS  IH0 N - JH EH1 K T S\nINJUDICIOUS  IH0 N - JH AH2 - D IH1 - SH AH0 S\nINJUNCTION  IH0 N - JH AH1 NG K - SH AH0 N\nINJUNCTION(2)  IH0 N - JH AH1 NG - SH AH0 N\nINJUNCTIONS  IH0 N - JH AH1 NG K - SH AH0 N Z\nINJUNCTIONS(2)  IH0 N - JH AH1 NG - SH AH0 N Z\nINJUNCTIVE  IH0 N - JH AH1 NG K - T IH0 V\nINJUNCTIVE(2)  IH0 N - JH AH1 NG - T IH0 V\nINJURE  IH1 N - JH ER0\nINJURED  IH1 N - JH ER0 D\nINJURES  IH1 N - JH ER0 Z\nINJURIES  IH1 N - JH ER0 - IY0 Z\nINJURING  IH1 N - JH ER0 - IH0 NG\nINJURIOUS  IH0 N - JH UH1 - R IY0 - AH0 S\nINJURY  IH1 N - JH ER0 - IY0\nINJUSTICE  IH0 N - JH AH1 - S T IH0 S\nINJUSTICES  IH0 N - JH AH1 - S T AH0 - S IH0 Z\nINK  IH1 NG K\nINKATHA  IH0 NG - K AE1 - TH AH0\nINKATHA'S  IH0 NG - K AE1 - TH AH0 Z\nINKATHA'S(2)  IH0 NG - K AA1 - T AH2 Z\nINKATHA'S(3)  IH0 NG - K AA1 - T AH0 Z\nINKATHA(2)  IH0 NG - K AA1 - T AH2\nINKATHA(3)  IH0 NG - K AA1 - T AH0\nINKBLOT  IH1 NG K - B L AA2 T\nINKJET  IH1 NG K - JH EH2 T\nINKLING  IH1 NG - K L IH0 NG\nINKS  IH1 NG K S\nINKY  IH1 NG - K IY0\nINLAID  IH1 N - L EY2 D\nINLAND  IH1 N - L AE2 N D\nINLAND'S  IH1 N - L AH0 N D Z\nINLAW  IH0 N - L AO1\nINLAW(2)  IH1 N - L AO2\nINLAWS  IH0 N - L AO1 Z\nINLAWS(2)  IH1 N - L AO0 Z\nINLAY  IH1 N - L EY2\nINLET  IH1 N - L EH2 T\nINLETS  IH1 N - L EH2 T S\nINLOW  IH0 N - L OW1\nINMAC  IH1 N - M AE0 K\nINMAN  IH1 N - M AH0 N\nINMAN'S  IH1 N - M AH0 N Z\nINMARSAT  IH0 N - M AA1 R - S AE1 T\nINMATE  IH1 N - M EY2 T\nINMATE'S  IH1 N - M EY2 T S\nINMATES  IH1 N - M EY2 T S\nINMEX  IH1 N - M EH2 K S\nINMOBILIARIA  IH0 N - M OW2 - B AH0 - L IY0 - EH1 - R IY0 - AH0\nINMON  IH1 N - M AH0 N\nINMONT  IH1 N - M AA2 N T\nINN  IH1 N\nINN'S  IH1 N Z\nINNARD  IH1 - N ER0 D\nINNARDS  IH1 - N ER0 D Z\nINNATE  IH0 - N EY1 T\nINNATELY  IH0 - N EY1 T - L IY0\nINNER  IH1 - N ER0\nINNERMOST  IH1 - N ER0 - M OW2 S T\nINNERSPACE  IH1 - N ER0 - S P EY2 S\nINNES  IH1 - N AH0 S\nINNESS  IH1 N - IH0 S\nINNING  IH1 - N IH0 NG\nINNINGS  IH1 - N IH0 NG Z\nINNIS  IH1 N - IH0 S\nINNISS  IH1 N - IH0 S\nINNKEEPER  IH1 N - K IY2 - P ER0\nINNKEEPERS  IH1 N - K IY2 - P ER0 Z\nINNO  IH1 - N OW0\nINNOCENCE  IH1 - N AH0 - S AH0 N S\nINNOCENT  IH1 - N AH0 - S AH0 N T\nINNOCENTI  IH0 N - OW0 - CH EH1 N - T IY0\nINNOCENTLY  IH1 - N AH0 - S AH0 N T - L IY0\nINNOCENTS  IH1 - N AH0 - S AH0 N T S\nINNOCUOUS  IH0 N - AA1 - K Y UW0 - AH0 S\nINNOMINATE  IH0 N - AA1 - M AH0 - N AH0 T\nINNOPAC  IH1 N - AH0 - P AE2 K\nINNOVATE  IH1 - N AH0 - V EY2 T\nINNOVATE(2)  IH1 - N OW0 - V EY2 T\nINNOVATED  IH1 - N AH0 - V EY2 - T IH0 D\nINNOVATED(2)  IH1 - N OW0 - V EY2 - T IH0 D\nINNOVATING  IH2 - N AH0 - V EY1 - T IH0 NG\nINNOVATING(2)  IH2 - N OW0 - V EY1 - T IH0 NG\nINNOVATION  IH2 - N AH0 - V EY1 - SH AH0 N\nINNOVATION(2)  IH2 - N OW0 - V EY1 - SH AH0 N\nINNOVATIONS  IH2 - N AH0 - V EY1 - SH AH0 N Z\nINNOVATIONS(2)  IH2 - N OW0 - V EY1 - SH AH0 N Z\nINNOVATIVE  IH1 - N AH0 - V EY2 - T IH0 V\nINNOVATIVE(2)  IH1 - N OW0 - V EY2 - T IH0 V\nINNOVATOR  IH1 - N AH0 - V EY2 - T ER0\nINNOVATOR(2)  IH1 - N OW0 - V EY2 - T ER0\nINNOVATORS  IH1 - N AH0 - V EY2 - T ER0 Z\nINNOVATORS(2)  IH1 - N OW0 - V EY2 - T ER0 Z\nINNS  IH1 N Z\nINNS'  IH1 N Z\nINNUENDO  IH0 - N Y UW0 - EH1 N - D OW0\nINNUENDOES  IH0 - N Y UW0 - EH1 N - D OW0 Z\nINNUENDOS  IH0 - N Y UW0 - EH1 N - D OW0 Z\nINNUMERABLE  IH0 - N UW1 - M ER0 - AH0 - B AH0 L\nINOCENCIO  IH0 N - OW0 - CH EH1 N - CH IY0 - OW0\nINOCULATE  IH0 N - AA1 - K Y AH0 - L EY2 T\nINOCULATED  IH0 N - AA1 - K Y AH0 - L EY2 - T IH0 D\nINOCULATION  IH0 N - AA2 - K Y AH0 - L EY1 - SH AH0 N\nINOCULATIONS  IH0 N - AA2 - K Y AH0 - L EY1 - SH AH0 N Z\nINOFFENSIVE  IH0 N - AH0 - F EH1 N - S IH0 V\nINOPERABLE  IH0 N - AA1 - P ER0 - AH0 - B AH0 L\nINOPERATIVE  IH0 N - AA1 - P ER0 - AH0 - T IH0 V\nINOPPORTUNE  IH0 N - AA2 - P ER0 - T UW1 N\nINORDINATE  IH0 N - AO1 R - D AH0 - N IH0 T\nINORDINATELY  IH0 N - AO1 R - D AH0 - N AH0 T - L IY0\nINORGANIC  IH0 N - AO0 R - G AE1 - N IH0 K\nINOUE  IH0 N - OW1 - EY0\nINOUYE  IH0 N - UW1 - EY0\nINPATIENT  IH1 N - P EY2 - SH AH0 N T\nINPATIENTS  IH0 N - P EY2 - SH AH0 N T S\nINPUT  IH1 N - P UH2 T\nINPUTS  IH1 N - P UH2 T S\nINQUEST  IH1 N - K W EH2 S T\nINQUIRE  IH0 N - K W AY1 R\nINQUIRED  IH0 N - K W AY1 - ER0 D\nINQUIRER  IH0 N - K W AY1 - R ER0\nINQUIRES  IH0 N - K W AY1 - ER0 Z\nINQUIRIES  IH0 N - K W AY1 - ER0 - IY0 Z\nINQUIRIES(2)  IH1 N - K W ER0 - IY0 Z\nINQUIRING  IH0 N - K W AY1 - ER0 - IH0 NG\nINQUIRY  IH0 N - K W AY1 - R IY0\nINQUIRY(2)  IH0 N - K W ER0 - R IY0\nINQUISITION  IH2 N - K W AH0 - Z IH1 - SH AH0 N\nINQUISITIVE  IH0 N - K W IH1 - Z IH0 - T IH0 V\nINQUISITORS  IH0 N - K W IH1 - Z AH0 - T ER0 Z\nINROAD  IH1 N - R OW2 D\nINROADS  IH1 N - R OW2 D Z\nINS  IH1 N Z\nINS(2)  AY1 - EH1 - N EH1 S\nINSALACO  IH0 N - S AA0 - L AA1 - K OW0\nINSANE  IH0 N - S EY1 N\nINSANITY  IH0 N - S AE1 - N AH0 - T IY0\nINSANITY(2)  IH0 N - S AE1 - N IH0 - T IY0\nINSATIABLE  IH0 N - S EY1 - SH AH0 - B AH0 L\nINSCHO  IH1 N - SH OW0\nINSCO  IY1 N - S K OW0\nINSCOE  IH0 N - S K OW1\nINSCORE  IH0 N - S K AO1 - R IY0\nINSCRIBED  IH0 N - S K R AY1 B D\nINSCRIPTION  IH0 N - S K R IH1 P - SH AH0 N\nINSCRIPTIONS  IH0 N - S K R IH1 P - SH AH0 N Z\nINSCRUTABLE  IH0 N - S K R UW1 - T AH0 - B AH0 L\nINSECT  IH1 N - S EH2 K T\nINSECT'S  IH1 N - S EH2 K T S\nINSECTICIDE  IH0 N - S EH1 K - T AH0 - S AY2 D\nINSECTICIDES  IH0 N - S EH1 K - T AH0 - S AY2 D Z\nINSECTIVOROUS  IH0 N - S EH0 K - T IH1 - V ER0 - AH0 S\nINSECTS  IH1 N - S EH2 K T S\nINSECURE  IH1 N - S AH0 - K Y ER0\nINSECURITIES  IH2 N - S AH0 - K Y UH1 - R IH0 - T IY0 Z\nINSECURITY  IH2 N - S IH0 - K Y UH1 - R IH0 - T IY0\nINSEL  IH1 N - S AH0 L\nINSEMINATE  IH0 N - S EH1 - M AH0 - N EY2 T\nINSEMINATION  IH0 N - S EH2 - M AH0 - N EY1 - SH AH0 N\nINSENSITIVE  IH0 N - S EH1 N - S AH0 - T IH0 V\nINSENSITIVE(2)  IH0 N - S EH1 N - S IH0 - T IH0 V\nINSENSITIVITY  IH0 N - S EH2 N - S AH0 - T IH1 - V AH0 - T IY0\nINSEPARABLE  IH0 N - S EH1 - P ER0 - AH0 - B AH0 L\nINSEPARABLY  IH0 N - S EH1 - P ER0 - AH0 - B L IY0\nINSERRA  IH0 N - S EH1 - R AH0\nINSERT  IH0 N - S ER1 T\nINSERT(2)  IH1 N - S ER2 T\nINSERTED  IH0 N - S ER1 - T AH0 D\nINSERTED(2)  IH0 N - S ER1 - T IH0 D\nINSERTING  IH0 N - S ER1 - T IH0 NG\nINSERTION  IH0 N - S ER1 - SH AH0 N\nINSERTS  IH0 N - S ER1 T S\nINSERTS(2)  IH1 N - S ER2 T S\nINSET  IH1 N - S EH2 T\nINSHORE  IH1 N - SH AO1 R\nINSIDE  IH0 N - S AY1 D\nINSIDE(2)  IH1 N - S AY2 D\nINSIDER  IH0 N - S AY1 - D ER0\nINSIDER'S  IH0 N - S AY1 - D ER0 Z\nINSIDERS  IH0 N - S AY1 - D ER0 Z\nINSIDERS'  IH1 N - S AY2 - D ER0 Z\nINSIDES  IH0 N - S AY1 D Z\nINSIDES(2)  IH1 N - S AY0 D Z\nINSIDIOUS  IH0 N - S IH1 - D IY0 - AH0 S\nINSIGHT  IH1 N - S AY2 T\nINSIGHTFUL  IH1 N - S AY2 T - F AH0 L\nINSIGHTS  IH1 N - S AY2 T S\nINSIGNIA  IH0 N - S IH1 G - N IY0 - AH0\nINSIGNIFICANCE  IH2 N - S IH0 G - N Y IH1 - F IH0 - K AH0 N S\nINSIGNIFICANT  IH2 N - S IH0 G - N Y IH1 - F IH0 - K AH0 N T\nINSILCO  IH0 N - S IH1 L - K OW0\nINSINCERE  IH2 N - S IH0 N - S IH1 R\nINSINUATE  IH0 N - S IH1 - N Y UW0 - EY0 T\nINSINUATED  IH0 N - S IH1 - N Y UW0 - EY0 - T IH0 D\nINSINUATES  IH0 N - S IH1 - N Y UW0 - EY0 T S\nINSINUATING  IH0 N - S IH1 - N Y UW0 - EY0 - T IH0 NG\nINSINUATION  IH0 N - S IH2 - N Y UW0 - EY1 - SH AH0 N\nINSINUATIONS  IH0 N - S IH2 - N Y UW0 - EY1 - SH AH0 N Z\nINSIST  IH0 N - S IH1 S T\nINSISTED  IH0 N - S IH1 - S T AH0 D\nINSISTED(2)  IH0 N - S IH1 - S T IH0 D\nINSISTENCE  IH0 N - S IH1 - S T AH0 N S\nINSISTENT  IH0 N - S IH1 - S T AH0 N T\nINSISTENTLY  IH0 N - S IH1 - S T AH0 N T - L IY0\nINSISTING  IH0 N - S IH1 - S T IH0 NG\nINSISTS  IH0 N - S IH1 S T S\nINSISTS(2)  IH0 N - S IH1 S S\nINSISTS(3)  IH0 N - S IH1 S\nINSITUFORM  IH0 N - S IH1 - T UW2 - F AO0 R M\nINSKEEP  IH1 N Z - K IY2 P\nINSKIP  IH1 N - S K IH0 P\nINSKO  IH1 N - S K OW0\nINSLAW  IH1 N - S L AA0\nINSLEY  IH1 N S - L IY0\nINSOFAR  IH1 N - S AH0 - F AA0 R\nINSOLENCE  IH1 N - S AH0 - L AH0 N S\nINSOLENT  IH1 N - S AH0 - L AH0 N T\nINSOLUBLE  IH0 N - S AA1 - L Y AH0 - B AH0 L\nINSOLVENCIES  IH0 N - S AA1 L - V AH0 N - S IY0 Z\nINSOLVENCY  IH0 N - S AA1 L - V AH0 N - S IY0\nINSOLVENT  IH0 N - S AA1 L - V AH0 N T\nINSOMNIA  IH0 N - S AA1 M - N IY0 - AH0\nINSOMNIAC  IH0 N - S AA1 M - N IY0 - AE2 K\nINSPECT  IH0 N - S P EH1 K T\nINSPECTED  IH0 N - S P EH1 K - T IH0 D\nINSPECTING  IH0 N - S P EH1 K - T IH0 NG\nINSPECTION  IH0 N - S P EH1 K - SH AH0 N\nINSPECTIONS  IH0 N - S P EH1 K - SH AH0 N Z\nINSPECTOR  IH0 N - S P EH1 K - T ER0\nINSPECTOR'S  IH0 N - S P EH1 K - T ER0 Z\nINSPECTORATE  IH0 N - S P EH1 K - T ER0 - AH0 T\nINSPECTORS  IH0 N - S P EH1 K - T ER0 Z\nINSPECTORS'  IH0 N - S P EH1 K - T ER0 Z\nINSPECTS  IH0 N - S P EH1 K T S\nINSPEECH  IH0 N - S P IY1 CH\nINSPIRATION  IH2 N - S P ER0 - EY1 - SH AH0 N\nINSPIRATIONAL  IH2 N - S P ER0 - EY1 - SH AH0 - N AH0 L\nINSPIRATIONS  IH2 N - S P ER0 - EY1 - SH AH0 N Z\nINSPIRE  IH0 N - S P AY1 R\nINSPIRED  IH0 N - S P AY1 - ER0 D\nINSPIRES  IH0 N - S P AY1 R Z\nINSPIRING  IH0 N - S P AY1 - R IH0 NG\nINSPIRING(2)  IH0 N - S P AY1 - ER0 - IH0 NG\nINSTABILITIES  IH2 N - S T AH0 - B IH1 - L IH0 - T IY0 Z\nINSTABILITY  IH2 N - S T AH0 - B IH1 - L IH0 - T IY0\nINSTALL  IH0 N - S T AO1 L\nINSTALLATION  IH2 N - S T AH0 - L EY1 - SH AH0 N\nINSTALLATIONS  IH2 N - S T AH0 - L EY1 - SH AH0 N Z\nINSTALLED  IH0 N - S T AO1 L D\nINSTALLER  IH0 N - S T AO1 - L ER0\nINSTALLERS  IH0 N - S T AO1 - L ER0 Z\nINSTALLING  IH0 N - S T AO1 - L IH0 NG\nINSTALLMENT  IH0 N - S T AO1 L - M AH0 N T\nINSTALLMENTS  IH0 N - S T AO1 L - M AH0 N T S\nINSTALLS  IH0 N - S T AO1 L Z\nINSTANCE  IH1 N - S T AH0 N S\nINSTANCES  IH1 N - S T AH0 N - S AH0 Z\nINSTANCES(2)  IH1 N - S T AH0 N - S IH0 Z\nINSTANT  IH1 N - S T AH0 N T\nINSTANTANEOUS  IH2 N - S T AH0 N - T AE1 - N IY0 - AH0 S\nINSTANTANEOUSLY  IH2 N - S T AH0 N - T AE1 - N IY0 - AH0 S - L IY0\nINSTANTLY  IH1 N - S T AH0 N T - L IY0\nINSTEAD  IH0 N - S T EH1 D\nINSTIGATE  IH1 N - S T AH0 - G EY2 T\nINSTIGATED  IH1 N - S T AH0 - G EY2 - T IH0 D\nINSTIGATING  IH1 N - S T AH0 - G EY2 - T IH0 NG\nINSTIGATION  IH2 N - S T IH0 - G EY1 - SH AH0 N\nINSTIGATOR  IH1 N - S T AH0 - G EY2 - T ER0\nINSTIGATORS  IH1 N - S T AH0 - G EY2 - T ER0 Z\nINSTILL  IH0 N - S T IH1 L\nINSTILLED  IH0 N - S T IH1 L D\nINSTILLING  IH0 N - S T IH1 - L IH0 NG\nINSTILLS  IH0 N - S T IH1 L Z\nINSTINCT  IH1 N - S T IH0 NG K T\nINSTINCTIVE  IH0 N - S T IH1 NG K - T IH0 V\nINSTINCTIVELY  IH0 N - S T IH1 NG K - T IH0 V - L IY0\nINSTINCTS  IH1 N - S T IH0 NG K T S\nINSTINET  IH1 N - S T IH0 - N EH2 T\nINSTITUCIONAL  IH2 N - S T IH0 - T UW2 - S IY0 - AH0 - N AE1 L\nINSTITUT  IH1 N - S T IH0 - T UW0 T\nINSTITUTE  IH1 N - S T AH0 - T UW2 T\nINSTITUTE'S  IH1 N - S T IH0 - T UW0 T S\nINSTITUTED  IH1 N - S T AH0 - T UW2 - T AH0 D\nINSTITUTES  IH1 N - S T AH0 - T UW2 T S\nINSTITUTES'  IH1 N - S T IH0 - T UW2 T S\nINSTITUTING  IH1 N - S T IH0 - T UW2 - T IH0 NG\nINSTITUTION  IH2 N - S T IH0 - T UW1 - SH AH0 N\nINSTITUTION'S  IH0 N - S T IH0 - T UW1 - SH AH0 N Z\nINSTITUTIONAL  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L\nINSTITUTIONALIST  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L - AH0 S T\nINSTITUTIONALISTS  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L - AH0 S T S\nINSTITUTIONALISTS(2)  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L - AH0 S S\nINSTITUTIONALISTS(3)  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L - AH0 S\nINSTITUTIONALIZATION  IH0 N - S T IH0 - T UW2 - SH AH0 - N AH0 L - IH0 - Z EY1 - SH AH0 N\nINSTITUTIONALIZE  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L - AY0 Z\nINSTITUTIONALIZED  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L - AY0 Z D\nINSTITUTIONALIZES  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L - AY0 - Z IH0 Z\nINSTITUTIONALIZING  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L - AY0 - Z IH0 NG\nINSTITUTIONALLY  IH2 N - S T IH0 - T UW1 - SH AH0 - N AH0 L - IY0\nINSTITUTIONALLY(2)  IH2 N - S T IH0 - T UW1 SH - N AH0 - L IY0\nINSTITUTIONS  IH2 N - S T IH0 - T UW1 - SH AH0 N Z\nINSTITUTIONS'  IH2 N - S T IH0 - T UW1 - SH AH0 N Z\nINSTITUTO  IH2 N - S T IH0 - T UW1 - T OW0\nINSTONE  IH1 N - S T OW2 N\nINSTRUCT  IH0 N - S T R AH1 K T\nINSTRUCTED  IH0 N - S T R AH1 K - T AH0 D\nINSTRUCTED(2)  IH0 N - S T R AH1 K - T IH0 D\nINSTRUCTING  IH0 N - S T R AH1 K - T IH0 NG\nINSTRUCTION  IH0 N - S T R AH1 K - SH AH0 N\nINSTRUCTIONAL  IH0 N - S T R AH1 K - SH AH0 - N AH0 L\nINSTRUCTIONS  IH0 N - S T R AH1 K - SH AH0 N Z\nINSTRUCTIVE  IH0 N - S T R AH1 K - T IH0 V\nINSTRUCTOR  IH0 N - S T R AH1 K - T ER0\nINSTRUCTORS  IH0 N - S T R AH1 K - T ER0 Z\nINSTRUCTS  IH0 N - S T R AH1 K T S\nINSTRUMENT  IH1 N - S T R AH0 - M AH0 N T\nINSTRUMENT'S  IH1 N - S T R AH0 - M AH0 N T S\nINSTRUMENTAL  IH2 N S - T R AH0 - M EH1 N - T AH0 L\nINSTRUMENTAL(2)  IH2 N S - T R AH0 - M EH1 - N AH0 L\nINSTRUMENTALIST  IH2 N S - T R AH0 - M EH1 N - T AH0 - L IH0 S T\nINSTRUMENTALIST(2)  IH2 N S - T R AH0 - M EH1 - N AH0 - L IH0 S T\nINSTRUMENTALISTS  IH2 N S - T R AH0 - M EH1 N - T AH0 - L IH0 S T S\nINSTRUMENTALISTS(2)  IH2 N S - T R AH0 - M EH1 N - T AH0 - L IH0 S S\nINSTRUMENTALISTS(3)  IH2 N S - T R AH0 - M EH1 - N AH0 - L IH0 S T S\nINSTRUMENTALISTS(4)  IH2 N S - T R AH0 - M EH1 - N AH0 - L IH0 S S\nINSTRUMENTALISTS(5)  IH2 N S - T R AH0 - M EH1 N - T AH0 - L IH0 S\nINSTRUMENTALISTS(6)  IH2 N S - T R AH0 - M EH1 - N AH0 - L IH0 S\nINSTRUMENTALITY  IH2 N S - T R AH0 - M EH0 N - T AE1 - L IH0 - T IY0\nINSTRUMENTALS  IH2 N S - T R AH0 - M EH1 N - T AH0 L Z\nINSTRUMENTALS(2)  IH2 N S - T R AH0 - M EH1 - N AH0 L Z\nINSTRUMENTATION  IH2 N S - T R AH0 - M EH2 N - T EY1 - SH AH0 N\nINSTRUMENTS  IH1 N - S T R AH0 - M AH0 N T S\nINSTRUMENTS'  IH1 N - S T R AH0 - M AH0 N T S\nINSUBORDINATE  IH0 N - S AH0 - B AO1 R - D AH0 - N EY2 T\nINSUBORDINATE(2)  IH0 N - S AH0 - B AO1 R - D AH0 N - AH0 T\nINSUBORDINATION  IH0 N - S AH0 - B AO2 R - D AH0 - N EY1 - SH AH0 N\nINSUBSTANTIAL  IH0 N - S AH0 B - S T AE1 N - CH AH0 L\nINSUBSTANTIAL(2)  IH0 N - S AH0 B - S T AE1 N - SH AH0 L\nINSUBSTANTIATE  IH0 N - S AH0 B - S T AE1 N - CH IY2 - EY0 T\nINSUBSTANTIATE(2)  IH0 N - S AH0 B - S T AE1 N - SH IY2 - EY0 T\nINSUBSTANTIATED  IH0 N - S AH0 B - S T AE1 N - CH IY2 - EY0 - T AH0 D\nINSUBSTANTIATED(2)  IH0 N - S AH0 B - S T AE1 N - SH IY2 - EY0 - T AH0 D\nINSUFFERABLE  IH0 N - S AH1 - F ER0 - AH0 - B AH0 L\nINSUFFICIENT  IH0 N - S AH0 - F IH1 - SH AH0 N T\nINSUFFICIENTLY  IH2 N - S AH0 - F IH1 - SH AH0 N T - L IY0\nINSULAR  IH1 N - S AH0 - L ER0\nINSULARITY  IH2 N - S AH0 - L EH1 - R IH0 - T IY0\nINSULATE  IH1 N - S AH0 - L EY2 T\nINSULATED  IH1 N - S AH0 - L EY2 - T AH0 D\nINSULATED(2)  IH1 N - S AH0 - L EY2 - T IH0 D\nINSULATING  IH1 N - S AH0 - L EY2 - T IH0 NG\nINSULATION  IH2 N - S AH0 - L EY1 - SH AH0 N\nINSULATOR  IH1 N - S AH0 - L EY2 - T ER0\nINSULATORS  IH1 N - S AH0 - L EY2 - T ER0 Z\nINSULIN  IH1 N - S AH0 - L AH0 N\nINSULT  IH0 N - S AH1 L T\nINSULT(2)  IH1 N - S AH2 L T\nINSULTED  IH0 N - S AH1 L - T IH0 D\nINSULTING  IH0 N - S AH1 L - T IH0 NG\nINSULTS  IH0 N - S AH1 L T S\nINSULTS(2)  IH1 N - S AH2 L T S\nINSUPPORTABLE  IH0 N - S AH0 - P AO1 R - T AH0 - B AH0 L\nINSURANCE  IH0 N - SH UH1 - R AH0 N S\nINSURANCE'S  IH0 N - SH UH1 - R AH0 N - S IH0 Z\nINSURANCES  IH0 N - SH UH1 - R AH0 N - S IH0 Z\nINSURE  IH0 N - SH UH1 R\nINSURED  IH0 N - SH UH1 R D\nINSURER  IH0 N - SH UH1 - R ER0\nINSURER'S  IH0 N - SH UH1 - R ER0 Z\nINSURERS  IH0 N - SH UH1 - R ER0 Z\nINSURERS'  IH0 N - SH UH1 - R ER0 Z\nINSURES  IH0 N - SH UH1 R Z\nINSURGENCIES  IH0 N - S ER1 - JH AH0 N - S IY0 Z\nINSURGENCY  IH0 N - S ER1 - JH AH0 N - S IY0\nINSURGENT  IH0 N - S ER1 - JH AH0 N T\nINSURGENTS  IH0 N - S ER1 - JH AH0 N T S\nINSURGENTS'  IH2 N - S ER1 - JH AH0 N T S\nINSURING  IH0 N - SH UH1 - R IH0 NG\nINSURMOUNTABLE  IH2 N - S ER0 - M AW1 N - T AH0 - B AH0 L\nINSURRECTION  IH2 N - S ER0 - EH1 K - SH AH0 N\nINTACT  IH0 N - T AE1 K T\nINTAGLIO  IH0 N - T AE1 - L Y OW0\nINTAGLIO(2)  IH0 N - T AE1 - G L Y OW0\nINTAKE  IH1 N - T EY2 K\nINTAN  IH1 N - T AH0 N\nINTANGIBLE  IH0 N - T AE1 N - JH AH0 - B AH0 L\nINTANGIBLES  IH0 N - T AE1 N - JH AH0 - B AH0 L Z\nINTEFADEH  IH2 N - T AH0 - F AA1 - D AH0\nINTEFADEH(2)  IH2 N - T IH0 - F AA1 - D AH0\nINTEGER  IH1 N - T AH0 - JH ER0\nINTEGERS  IH1 N - T AH0 - JH ER0 Z\nINTEGON  IH1 N - T AH0 - G AA0 N\nINTEGRA  IH0 N - T EH1 - G R AH0\nINTEGRAL  IH1 N - T AH0 - G R AH0 L\nINTEGRAL(2)  IH1 N - AH0 - G R AH0 L\nINTEGRATE  IH1 N - T AH0 - G R EY2 T\nINTEGRATE(2)  IH1 - N AH0 - G R EY2 T\nINTEGRATED  IH1 N - T AH0 - G R EY2 - T AH0 D\nINTEGRATED'S  IH1 N - T AH0 - G R EY2 - T IH0 D Z\nINTEGRATED'S(2)  IH1 - N AH0 - G R EY2 - T IH0 D Z\nINTEGRATED(2)  IH1 N - T AH0 - G R EY2 - T IH0 D\nINTEGRATED(3)  IH1 - N AH0 - G R EY2 - T AH0 D\nINTEGRATED(4)  IH1 - N AH0 - G R EY2 - T IH0 D\nINTEGRATES  IH1 N - T AH0 - G R EY2 T S\nINTEGRATES(2)  IH1 - N AH0 - G R EY2 T S\nINTEGRATING  IH1 N - T AH0 - G R EY2 - T IH0 NG\nINTEGRATING(2)  IH1 - N AH0 - G R EY2 - T IH0 NG\nINTEGRATION  IH2 N - T AH0 - G R EY1 - SH AH0 N\nINTEGRATION(2)  IH2 - N AH0 - G R EY1 - SH AH0 N\nINTEGRATIONS  IH2 N - T AH0 - G R EY1 - SH AH0 N Z\nINTEGRATIONS(2)  IH2 - N AH0 - G R EY1 - SH AH0 N Z\nINTEGRATOR  IH1 N - T AH0 - G R EY2 - T ER0\nINTEGRATOR(2)  IH1 - N AH0 - G R EY2 - T ER0\nINTEGRATORS  IH1 N - T AH0 - G R EY2 - T ER0 Z\nINTEGRATORS(2)  IH1 - N AH0 - G R EY2 - T ER0 Z\nINTEGRELIN  IH2 N - T AH0 - G R EH1 - L AH0 N\nINTEGRELIN(2)  IH0 N - T EH1 - G R AH0 - L IH0 N\nINTEGRITY  IH0 N - T EH1 - G R AH0 - T IY0\nINTEGRITY(2)  IH0 N - T EH1 - G R IH0 - T IY0\nINTEGUMENT  IH0 N - T EH1 - G Y AH0 - M AH0 N T\nINTEL  IH2 N - T EH1 L\nINTEL'S  IH2 N - T EH1 L Z\nINTELCO  IH0 N - T EH1 L - K OW0\nINTELCOM  IH2 N - T EH1 L - K AA0 M\nINTELLECT  IH1 N - T AH0 - L EH2 K T\nINTELLECT(2)  IH1 N - AH0 - L EH2 K T\nINTELLECTS  IH1 N - T AH0 - L EH2 K T S\nINTELLECTS(2)  IH1 N - AH0 - L EH2 K T S\nINTELLECTS(3)  IH1 N - T AH0 - L EH2 K S\nINTELLECTS(4)  IH1 N - AH0 - L EH2 K S\nINTELLECTUAL  IH2 N - T AH0 - L EH1 K - CH UW0 - AH0 L\nINTELLECTUAL(2)  IH2 N - AH0 - L EH1 K - CH UW0 - AH0 L\nINTELLECTUALISM  IH0 N - T EH2 - L AH0 K - CH UW1 - AH0 - L IH2 - Z AH0 M\nINTELLECTUALISM(2)  IH0 N - EH2 - L AH0 K - CH UW1 - AH0 - L IH2 - Z AH0 M\nINTELLECTUALLY  IH2 N - T AH0 - L EH1 K - CH UW0 - AH0 - L IY0\nINTELLECTUALLY(2)  IH2 N - T AH0 - L EH1 K - CH UW0 - L IY0\nINTELLECTUALLY(3)  IH2 N - AH0 - L EH1 K - CH UW0 - AH0 - L IY0\nINTELLECTUALLY(4)  IH2 N - AH0 - L EH1 K - CH UW0 - L IY0\nINTELLECTUALS  IH2 N - T AH0 - L EH1 K - CH UW0 - AH0 L Z\nINTELLICALL  IH0 N - T EH1 - L IH0 - K AO2 L\nINTELLICORP  IH0 N - T EH1 - L IH0 - K AO2 R P\nINTELLIGENCE  IH0 N - T EH1 - L AH0 - JH AH0 N S\nINTELLIGENT  IH0 N - T EH1 - L AH0 - JH AH0 N T\nINTELLIGENTLY  IH0 N - T EH1 - L IH0 - JH AH0 N T - L IY0\nINTELLIGENTSIA  IH0 N - T EH2 - L AH0 - JH EH1 N T - S IY0 - AH0\nINTELLIGIBLE  IH0 N - T EH1 - L AH0 - JH AH0 - B AH0 L\nINTELOGIC  IH2 N - T AH0 - L AA1 - JH IH0 K\nINTELSAT  IH2 N - T EH1 L - S AE0 T\nINTEMPERATE  IH0 N - T EH1 M - P ER0 - AH0 T\nINTEND  IH0 N - T EH1 N D\nINTENDED  IH0 N - T EH1 N - D AH0 D\nINTENDED(2)  IH0 N - T EH1 N - D IH0 D\nINTENDING  IH0 N - T EH1 N - D IH0 NG\nINTENDS  IH0 N - T EH1 N D Z\nINTENSE  IH0 N - T EH1 N S\nINTENSELY  IH0 N - T EH1 N S - L IY0\nINTENSIFICATION  IH0 N - T EH2 N - S AH0 - F AH0 - K EY1 - SH AH0 N\nINTENSIFIED  IH0 N - T EH1 N - S AH0 - F AY2 D\nINTENSIFIES  IH0 N - T EH1 N - S AH0 - F AY2 Z\nINTENSIFY  IH0 N - T EH1 N - S AH0 - F AY2\nINTENSIFYING  IH0 N - T EH1 N - S AH0 - F AY2 - IH0 NG\nINTENSITY  IH0 N - T EH1 N - S AH0 - T IY0\nINTENSITY(2)  IH0 N - T EH1 N - S IH0 - T IY0\nINTENSIVE  IH0 N - T EH1 N - S IH0 V\nINTENSIVELY  IH0 N - T EH1 N - S IH0 V - L IY0\nINTENT  IH0 N - T EH1 N T\nINTENTION  IH0 N - T EH1 N - CH AH0 N\nINTENTIONAL  IH0 N - T EH1 N - SH AH0 - N AH0 L\nINTENTIONALLY  IH0 N - T EH1 N - SH AH0 N - AH0 - L IY0\nINTENTIONED  IH0 N - T EH1 N - CH AH0 N D\nINTENTIONS  IH0 N - T EH1 N - CH AH0 N Z\nINTENTLY  IH0 N - T EH1 N T - L IY0\nINTENTS  IH0 N - T EH1 N T S\nINTER  IH0 N - T ER1\nINTERACCIONES  IH2 N - T ER0 - AE2 K - S IY0 - OW1 N Z\nINTERACT  IH2 N - T ER0 - AE1 K T\nINTERACT(2)  IH2 - N ER0 - AE1 K T\nINTERACTED  IH2 N - T ER0 - AE1 K - T AH0 D\nINTERACTED(2)  IH2 - N ER0 - AE1 K - T AH0 D\nINTERACTING  IH2 N - T ER0 - AE1 K - T IH0 NG\nINTERACTING(2)  IH2 - N ER0 - AE1 K - T IH0 NG\nINTERACTION  IH2 N - T ER0 - AE1 K - SH AH0 N\nINTERACTION(2)  IH2 - N ER0 - AE1 K - SH AH0 N\nINTERACTIONS  IH2 N - T ER0 - AE1 K - SH AH0 N Z\nINTERACTIONS(2)  IH2 - N ER0 - AE1 K - SH AH0 N Z\nINTERACTIVE  IH2 N - T ER0 - AE1 K - T IH0 V\nINTERACTIVE(2)  IH2 - N ER0 - AE1 K - T IH0 V\nINTERACTIVITY  IH2 N - T ER0 - AE2 K - T IH1 - V IH0 - T IY0\nINTERACTIVITY(2)  IH2 - N ER0 - AE2 K - T IH1 - V IH0 - T IY0\nINTERACTS  IH2 N - T ER0 - AE1 K T S\nINTERACTS(2)  IH2 - N ER0 - AE1 K T S\nINTERAGENCY  IH2 N - T ER0 - EY1 - JH AH0 N - S IY0\nINTERAMERICAN  IH2 N - T ER0 - AH0 - M EH1 - R AH0 - K AH0 N\nINTERAND  IH1 N - T ER0 - AH0 N D\nINTERBANK  IH2 N - T ER0 - B AE1 NG K\nINTERBRED  IH2 N - T ER0 - B R EH1 D\nINTERBREW  IH1 N - T ER2 - B R UW2\nINTERBREW'S  IH1 N - T ER2 - B R UW2 Z\nINTERBREW'S(2)  IH1 N - T ER0 - B R UW2 Z\nINTERBREW(2)  IH1 N - T ER0 - B R UW2\nINTERCABLE  IH2 N - T ER0 - K EY1 - B AH0 L\nINTERCAPITAL  IH2 N - T ER0 - K AE1 - P AH0 - T AH0 L\nINTERCARE  IH1 N - T ER0 - K EH2 R\nINTERCEDE  IH2 N - T ER0 - S IY1 D\nINTERCEDED  IH2 N - T ER0 - S IY1 - D IH0 D\nINTERCEDING  IH2 N - T ER0 - S IY1 - D IH0 NG\nINTERCELLULAR  IH2 N - T ER0 - S EH1 L - Y AH0 - L ER0\nINTERCEPT  IH2 N - T ER0 - S EH1 P T\nINTERCEPT(2)  IH2 - N ER0 - S EH1 P T\nINTERCEPTED  IH2 N - T ER0 - S EH1 P - T AH0 D\nINTERCEPTED(2)  IH2 N - T ER0 - S EH1 P - T IH0 D\nINTERCEPTED(3)  IH2 - N ER0 - S EH1 P - T AH0 D\nINTERCEPTED(4)  IH2 - N ER0 - S EH1 P - T IH0 D\nINTERCEPTING  IH2 N - T ER0 - S EH1 P - T IH0 NG\nINTERCEPTING(2)  IH2 - N ER0 - S EH1 P - T IH0 NG\nINTERCEPTION  IH2 N - T ER0 - S EH1 P - SH AH0 N\nINTERCEPTION(2)  IH2 - N ER0 - S EH1 P - SH AH0 N\nINTERCEPTIONS  IH2 N - T ER0 - S EH1 P - SH AH0 N Z\nINTERCEPTIONS(2)  IH2 - N ER0 - S EH1 P - SH AH0 N Z\nINTERCEPTOR  IH2 N - T ER0 - S EH1 P - T ER0\nINTERCEPTOR(2)  IH2 - N ER0 - S EH1 P - T ER0\nINTERCEPTORS  IH2 N - T ER0 - S EH1 P - T ER0 Z\nINTERCEPTORS(2)  IH2 - N ER0 - S EH1 P - T ER0 Z\nINTERCEPTS  IH2 N - T ER0 - S EH1 P T S\nINTERCEPTS(2)  IH2 - N ER0 - S EH1 P T S\nINTERCESSION  IH2 N - T ER0 - S EH1 - SH AH0 N\nINTERCESSION(2)  IH2 - N ER0 - S EH1 - SH AH0 N\nINTERCHANGE  IH2 N - T ER0 - CH EY1 N JH\nINTERCHANGE(2)  IH2 - N ER0 - CH EY1 N JH\nINTERCHANGEABLE  IH2 N - T ER0 - CH EY1 N - JH AH0 - B AH0 L\nINTERCHANGEABLE(2)  IH2 - N ER0 - CH EY1 N - JH AH0 - B AH0 L\nINTERCHANGEABLY  IH2 N - T ER0 - CH EY1 N JH - AH0 - B L IY0\nINTERCHANGEABLY(2)  IH2 - N ER0 - CH EY1 N JH - AH0 - B L IY0\nINTERCHANGES  IH1 N - T ER0 - CH EY2 N - JH IH0 Z\nINTERCHANGES(2)  IH1 - N ER0 - CH EY2 N - JH IH0 Z\nINTERCITY  IH1 N - T ER0 - S IH2 - T IY0\nINTERCITY(2)  IH1 - N ER0 - S IH2 - T IY0\nINTERCO  IH1 N - T ER0 - K OW2\nINTERCO'S  IH1 N - T ER0 - K OW2 Z\nINTERCOLLEGIATE  IH2 N - T ER0 - K AH0 - L IY1 - JH AH0 T\nINTERCOM  IH1 N - T ER0 - K AA2 M\nINTERCOMPANY  IH2 N - T ER0 - K AH1 M - P AH0 - N IY0\nINTERCONNECT  IH2 N - T ER0 - K AH0 - N EH1 K T\nINTERCONNECTED  IH2 N - T ER0 - K AH0 - N EH1 K - T IH0 D\nINTERCONNECTION  IH2 N - T ER0 - K AH0 - N EH1 K - SH AH0 N\nINTERCONNECTIONS  IH2 N - T ER0 - K AH0 - N EH1 K - SH AH0 N Z\nINTERCONTINENTAL  IH2 N - T ER0 - K AA2 N - T AH0 - N EH1 N - T AH0 L\nINTERCONTINENTALE  IH2 N - T ER0 - K AA0 N - T IH1 - N AH0 N - T AA2 L\nINTERCORP  IH1 N - T ER0 - K AO2 R P\nINTERCORPORATION  IH0 N - T ER0 - K AO2 R - P ER0 - EY1 - SH AH0 N\nINTERCOURSE  IH1 N - T ER0 - K AO2 R S\nINTERCOURSE(2)  IH1 - N ER0 - K AO2 R S\nINTERCULTURAL  IH2 N - T ER0 - K AH1 L - CH ER0 - AH0 L\nINTERCURRENT  IH2 N - T ER0 - K ER1 - AH0 N T\nINTERDEALER  IH1 N - T ER0 - D IY2 - L ER0\nINTERDEPENDENCE  IH2 N - T ER0 - D AH0 - P EH1 N - D AH0 N S\nINTERDEPENDENT  IH2 N - T ER0 - D IH0 - P EH1 N - D AH0 N T\nINTERDICT  IH1 N - T ER0 - D IH2 K T\nINTERDICTED  IH1 N - T ER0 - D IH2 K - T IH0 D\nINTERDICTES  IH1 N - T ER0 - D IH2 K T S\nINTERDICTING  IH2 N - T ER0 - D IH1 K - T IH0 NG\nINTERDICTION  IH2 N - T ER0 - D IH1 K - SH AH0 N\nINTERDIGITAL  IH2 N - T ER0 - D IH1 - JH AH0 - T AH0 L\nINTERDISCIPLINARY  IH2 N - T ER0 - D IH1 - S AH0 - P L AH0 - N EH2 - R IY0\nINTERDYNE  IH1 N - T ER0 - D AY2 N\nINTEREST  IH1 N - T R AH0 S T\nINTEREST(2)  IH1 N - T R IH0 S T\nINTEREST(3)  IH1 N - T ER0 - AH0 S T\nINTEREST(4)  IH1 N - T ER0 - IH0 S T\nINTERESTED  IH1 N - T R AH0 - S T AH0 D\nINTERESTED(2)  IH1 N - T R IH0 - S T IH0 D\nINTERESTED(3)  IH1 N - T ER0 - AH0 - S T AH0 D\nINTERESTED(4)  IH1 N - T ER0 - IH0 - S T IH0 D\nINTERESTING  IH1 N - T R AH0 - S T IH0 NG\nINTERESTING(2)  IH1 N - T R IH0 - S T IH0 NG\nINTERESTING(3)  IH1 N - T ER0 - AH0 - S T IH0 NG\nINTERESTING(4)  IH1 N - T ER0 - IH0 - S T IH0 NG\nINTERESTINGLY  IH1 N - T ER0 - EH2 - S T IH0 NG - L IY0\nINTERESTRATE  IH1 N - T ER0 - AH0 - S T R EY2 T\nINTERESTS  IH1 N - T R AH0 S T S\nINTERESTS(2)  IH1 N - T R IH0 S T S\nINTERESTS(3)  IH1 N - T R IH0 S S\nINTERESTS(4)  IH1 N - T ER0 - AH0 S T S\nINTERESTS(5)  IH1 N - T ER0 - IH0 S T S\nINTERESTS(6)  IH1 N - T ER0 - IH0 S S\nINTERFACE  IH1 N - T ER0 - F EY2 S\nINTERFACE(2)  IH1 - N ER0 - F EY2 S\nINTERFACES  IH1 N - T ER0 - F EY2 - S IH0 Z\nINTERFACES(2)  IH1 N - ER0 - F EY2 - S IH0 Z\nINTERFAITH  IH2 N - T ER0 - F EY1 TH\nINTERFAX  IH1 N - T ER0 - F AE2 K S\nINTERFERE  IH2 N - T ER0 - F IH1 R\nINTERFERE(2)  IH2 - N ER0 - F IH1 R\nINTERFERED  IH2 N - T ER0 - F IH1 R D\nINTERFERED(2)  IH2 - N ER0 - F IH1 R D\nINTERFERENCE  IH2 N - T ER0 - F IH1 - R AH0 N S\nINTERFERENCE(2)  IH2 - N ER0 - F IH1 - R AH0 N S\nINTERFERES  IH2 N - T ER0 - F IH1 R Z\nINTERFERES(2)  IH2 - N ER0 - F IH1 R Z\nINTERFERING  IH2 N - T ER0 - F IH1 - R IH0 NG\nINTERFERING(2)  IH2 - N ER0 - F IH1 - R IH0 NG\nINTERFEROMETER  IH2 N - T ER0 - F ER0 - AA1 - M AH0 - T ER0\nINTERFERON  IH2 N - T ER0 - F EH1 - R AA0 N\nINTERFERON(2)  IH0 N - T ER0 - F IH1 - R AA0 N\nINTERFERONS  IH0 N - T ER0 - F IH1 - R AA0 N Z\nINTERFIRST  IH2 N - T ER0 - F ER1 S T\nINTERFLUG  IH1 N - T ER0 - F L AH0 G\nINTERFUNDING  IH1 N - T ER0 - F AH2 N - D IH0 NG\nINTERGENERATIONAL  IH2 N - T ER0 - JH EH1 - N ER0 - EY1 - SH AH0 - N AH0 L\nINTERGOVERNMENTAL  IH2 N - T ER0 - G AH2 - V ER0 N - M EH1 N - T AH0 L\nINTERGRAPH  IH1 N - T ER0 - G R AE2 F\nINTERGRAPH'S  IH1 N - T ER0 - G R AE2 F S\nINTERGROUP  IH2 N - T ER0 - G R UW1 P\nINTERGROUP'S  IH2 N - T ER0 - G R UW1 P S\nINTERIM  IH1 N - T ER0 - AH0 M\nINTERIM(2)  IH1 N - T R AH0 M\nINTERIM(3)  IH1 - N ER0 - AH0 M\nINTERIOR  IH0 N - T IH1 - R IY0 - ER0\nINTERIORS  IH0 N - T IH1 - R IY0 - ER0 Z\nINTERJECT  IH2 N - T ER0 - JH EH1 K T\nINTERJECTED  IH2 N - T ER0 - JH EH1 K - T IH0 D\nINTERJECTION  IH2 N - T ER0 - JH EH1 K - SH AH0 N\nINTERJECTIONS  IH2 N - T ER0 - JH EH1 K - SH AH0 N Z\nINTERJECTS  IH2 N - T ER0 - JH EH1 K T S\nINTERLACE  IH2 N - T ER0 - L EY1 S\nINTERLACED  IH2 N - T ER0 - L EY1 S T\nINTERLAKE  IH1 N - T ER0 - L EY2 K\nINTERLAKE'S  IH1 N - T ER0 - L EY2 K S\nINTERLEAF  IH1 N - T ER0 - L IY2 F\nINTERLEAVE  IH2 N - T ER0 - L IY1 V\nINTERLEAVING  IH2 N - T ER0 - L IY1 - V IH0 NG\nINTERLEUKIN  IH2 N - T ER0 - L UW1 - K IH0 N\nINTERLINK  IH2 N - T ER0 - L IH1 NG K\nINTERLINKED  IH2 N - T ER0 - L IH1 NG K T\nINTERLOCK  IH2 N - T ER0 - L AA1 K\nINTERLOCKED  IH2 N - T ER0 - L AA1 K D\nINTERLOCKING  IH1 N - T ER0 - L AA2 - K IH0 NG\nINTERLOCUTOR  IH2 N - T ER0 - L AA1 - K Y AH0 - T ER0\nINTERLOCUTORS  IH2 N - T ER0 - L AA1 - K Y AH0 - T ER0 Z\nINTERLOPER  IH1 N - T ER0 - L OW2 - P ER0\nINTERLOPERS  IH1 N - T ER0 - L OW2 - P ER0 Z\nINTERLUDE  IH1 N - T ER0 - L UW2 D\nINTERLUDES  IH1 N - T ER0 - L UW2 D Z\nINTERM  IH1 N - T ER0 M\nINTERMAGNETIC  IH2 N - T ER0 - M AE0 G - N EH1 - T IH0 K\nINTERMAGNETICS  IH2 N - T ER0 - M AE0 G - N EH1 - T IH0 K S\nINTERMARK  IH2 N - T ER0 - M AA1 R K\nINTERMARKET  IH2 N - T ER0 - M AA1 R - K IH0 T\nINTERMARRIAGE  IH2 N - T ER0 - M EH1 - R IH0 JH\nINTERMARRIED  IH2 N - T ER0 - M AE1 - R IY0 D\nINTERMARRY  IH2 N - T ER0 - M AE1 - R IY0\nINTERMEC  IH1 N - T ER0 - M AH0 K\nINTERMEDIA  IH2 N - T ER0 - M IY1 - D IY0 - AH0\nINTERMEDIARIES  IH2 N - T ER0 - M IY1 - D IY0 - EH2 - R IY0 Z\nINTERMEDIARIES(2)  IH2 - N ER0 - M IY1 - D IY0 - EH2 - R IY0 Z\nINTERMEDIARY  IH2 N - T ER0 - M IY1 - D IY0 - EH0 - R IY0\nINTERMEDIARY(2)  IH2 - N ER0 - M IY1 - D IY0 - EH0 - R IY0\nINTERMEDIATE  IH2 N - T ER0 - M IY1 - D IY0 - IH0 T\nINTERMEDIATE(2)  IH2 - N ER0 - M IY1 - D IY0 - IH0 T\nINTERMEDIATES  IH2 N - T ER0 - M IY1 - D IY0 - AH0 T S\nINTERMEDIATES(2)  IH2 N - T ER0 - M IY1 - D IY0 - EY0 T S\nINTERMEDIATES(3)  IH2 - N ER0 - M IY1 - D IY0 - AH0 T S\nINTERMEDIATES(4)  IH2 - N ER0 - M IY1 - D IY0 - EY0 T S\nINTERMEDIC  IH1 N - T ER0 - M EH2 - D IH0 K\nINTERMEDICS  IH1 N - T ER0 - M EH2 - D IH0 K S\nINTERMET  IH2 N - T ER0 - M EH1 T\nINTERMINABLE  IH0 N - T ER1 - M AH0 - N AH0 - B AH0 L\nINTERMINABLY  IH1 N - T ER0 - M IH0 - N AE2 - B L IY0\nINTERMINABLY(2)  IH2 N - T ER1 - M IH0 - N AH0 - B L IY0\nINTERMINGLE  IH2 N - T ER0 - M IH1 NG - G AH0 L\nINTERMINGLED  IH2 N - T ER0 - M IH1 NG - G AH0 L D\nINTERMINGLING  IH2 N - T ER0 - M IH1 NG - G AH0 L - IH0 NG\nINTERMINGLING(2)  IH2 N - T ER0 - M IH1 NG - G L IH0 NG\nINTERMISSION  IH2 N - T ER0 - M IH1 - SH AH0 N\nINTERMISSIONS  IH2 N - T ER0 - M IH1 - SH AH0 N Z\nINTERMITTENT  IH2 N - T ER0 - M IH1 - T AH0 N T\nINTERMITTENTLY  IH2 N - T ER0 - M IH1 - T AH0 N T - L IY0\nINTERMIX  IH2 N - T ER0 - M IH1 K S\nINTERMIXED  IH2 N - T ER0 - M IH1 K S T\nINTERMIXING  IH1 N - T ER0 - M IH1 K - S IH0 NG\nINTERMODAL  IH2 N - T ER0 - M OW1 - D AH0 L\nINTERMOLECULAR  IH2 N - T ER0 - M AH0 - L EH1 - K Y AH0 - L ER0\nINTERMOUNTAIN  IH0 N - T ER0 - M AW1 N - T IH0 N\nINTERN  IH1 N - T ER0 N\nINTERNACIONAL  IH2 N - T ER0 - N AE1 - SH AH0 - N AH0 L\nINTERNACIONAL(2)  IH2 N - T ER0 - N AA2 - S IY0 - OW0 - N AE1 L\nINTERNAL  IH0 N - T ER1 - N AH0 L\nINTERNALIZE  IH0 N - T ER1 - N AH0 - L AY2 Z\nINTERNALIZED  IH0 N - T ER1 - N AH0 - L AY2 Z D\nINTERNALLY  IH0 N - T ER1 - N AH0 - L IY0\nINTERNATIONAL  IH2 N - T ER0 - N AE1 - SH AH0 - N AH0 L\nINTERNATIONAL'S  IH2 N - T ER0 - N AE1 - SH AH0 - N AH0 L Z\nINTERNATIONAL'S(2)  IH2 - N ER0 - N AE1 - SH AH0 - N AH0 L Z\nINTERNATIONAL(2)  IH2 - N ER0 - N AE1 - SH AH0 - N AH0 L\nINTERNATIONALE  IH0 N - T ER0 - N AE2 - SH AH0 - N AA1 - L IY0\nINTERNATIONALE(2)  IH0 - N ER0 - N AE2 - SH AH0 - N AA1 - L IY0\nINTERNATIONALISM  IH0 N - T ER0 - N AE1 - SH AH0 N - AH0 - L IH2 - Z AH0 M\nINTERNATIONALISM(2)  IH0 - N ER0 - N AE1 - SH AH0 N - AH0 - L IH2 - Z AH0 M\nINTERNATIONALIST  IH0 N - T ER0 - N AE1 - SH AH0 N - AH0 - L IH0 S T\nINTERNATIONALIST(2)  IH0 - N ER0 - N AE1 - SH AH0 N - AH0 - L IH0 S T\nINTERNATIONALISTS  IH2 N - T ER0 - N AE1 - SH AH0 N - AH0 - L IH0 S T S\nINTERNATIONALISTS(2)  IH2 N - T ER0 - N AE1 - SH AH0 N - AH0 - L IH0 S S\nINTERNATIONALISTS(3)  IH2 - N ER0 - N AE1 - SH AH0 N - AH0 - L IH0 S T S\nINTERNATIONALISTS(4)  IH2 - N ER0 - N AE1 - SH AH0 N - AH0 - L IH0 S S\nINTERNATIONALISTS(5)  IH2 N - T ER0 - N AE1 - SH AH0 N - AH0 - L IH0 S\nINTERNATIONALISTS(6)  IH2 - N ER0 - N AE1 - SH AH0 N - AH0 - L IH0 S\nINTERNATIONALIZATION  IH2 N - T ER0 - N AE2 - SH AH0 N - AH0 - L IH0 - Z EY1 - SH AH0 N\nINTERNATIONALIZATION(2)  IH2 - N ER0 - N AE2 - SH AH0 N - AH0 - L IH0 - Z EY1 - SH AH0 N\nINTERNATIONALIZE  IH2 N - T ER0 - N AE1 - SH AH0 N - AH0 - L AY2 Z\nINTERNATIONALIZE(2)  IH2 - N ER0 - N AE1 - SH AH0 N - AH0 - L AY2 Z\nINTERNATIONALIZE(3)  IH2 - N ER0 - N AE1 SH - N AH0 - L AY2 Z\nINTERNATIONALIZED  IH0 N - T ER0 - N AE1 - SH AH0 N - AH0 - L AY0 Z D\nINTERNATIONALIZED(2)  IH0 - N ER0 - N AE1 - SH AH0 N - AH0 - L AY0 Z D\nINTERNATIONALIZED(3)  IH0 - N ER0 - N AE1 SH - N AH0 - L AY0 Z D\nINTERNATIONALLY  IH2 N - T ER0 - N AE1 - SH AH0 N - AH0 - L IY0\nINTERNATIONALLY(2)  IH2 N - T ER0 - N AE1 SH - N AH0 - L IY0\nINTERNATIONALLY(3)  IH2 - N ER0 - N AE1 - SH AH0 N - AH0 - L IY0\nINTERNATIONALLY(4)  IH2 - N ER0 - N AE1 SH - N AH0 - L IY0\nINTERNATIONALS  IH2 N - T ER0 - N AE1 - SH AH0 - N AH0 L Z\nINTERNATONAL  IH2 N - T ER0 - N AE1 - SH AH0 - N AH0 L\nINTERNATONAL(2)  IH2 - N ER0 - N AE1 - SH AH0 - N AH0 L\nINTERNECINE  IH0 N - T ER1 - N AH0 - S IY2 N\nINTERNED  IH1 N - T ER2 N D\nINTERNEE  IH0 N - T ER0 - N IY1\nINTERNEES  IH0 N - T ER0 - N IY1 Z\nINTERNET  IH1 N - T ER0 - N EH2 T\nINTERNET'S  IH1 N - T ER0 - N EH2 T S\nINTERNIST  IH0 N - T ER1 - N IH0 S T\nINTERNISTS  IH0 N - T ER1 - N IH0 S T S\nINTERNISTS(2)  IH0 N - T ER1 - N IH0 S S\nINTERNISTS(3)  IH0 N - T ER1 - N IH0 S\nINTERNMENT  IH0 N - T ER1 N - M AH0 N T\nINTERNORTH  IH1 N - T ER0 - N AO0 R TH\nINTERNS  IH1 N - T ER0 N Z\nINTERNSHIP  IH1 N - T ER0 N - SH IH2 P\nINTERNSHIPS  IH1 N - T ER0 N - SH IH2 P S\nINTEROFFICE  IH2 N - T ER0 - AO1 - F AH0 S\nINTERPART  IH1 N - T ER0 - P AA2 R T\nINTERPERSONAL  IH2 N - T ER0 - P ER1 - S AH0 - N AH0 L\nINTERPLANETARY  IH2 N - T ER0 - P L AE1 - N AH0 - T EH2 - R IY0\nINTERPLAY  IH1 N - T ER0 - P L EY2\nINTERPOL  IH1 N - T ER0 - P OW2 L\nINTERPOLATE  IH2 - T ER1 - P AH0 - L EY2 T\nINTERPOLATED  IH2 - T ER1 - P AH0 - L EY2 - T IH0 D\nINTERPOSE  IH2 N - T ER0 - P OW1 Z\nINTERPRET  IH0 N - T ER1 - P R AH0 T\nINTERPRETATION  IH0 N - T ER2 - P R IH0 - T EY1 - SH AH0 N\nINTERPRETATIONS  IH0 N - T ER2 - P R IH0 - T EY1 - SH AH0 N Z\nINTERPRETED  IH0 N - T ER1 - P R AH0 - T AH0 D\nINTERPRETER  IH0 N - T ER1 - P R AH0 - T ER0\nINTERPRETERS  IH0 N - T ER1 - P R AH0 - T ER0 Z\nINTERPRETING  IH1 N - T ER0 - P R EH2 - T IH0 NG\nINTERPRETIVE  IH0 N - T ER1 - P R AH0 - T IH0 V\nINTERPRETS  IH0 N - T ER1 - P R AH0 T S\nINTERPROVINCIAL  IH2 N - T ER0 - P R OW0 - V IH1 N - SH AH0 L\nINTERPUBLIC  IH2 N - T ER0 - P AH1 - B L IH0 K\nINTERPUBLIC'S  IH2 N - T ER0 - P AH1 - B L IH0 K S\nINTERRACIAL  IH2 N - T ER0 - R EY1 - SH AH0 L\nINTERRANTE  IH0 N - T ER0 - R AA1 N - T IY0\nINTERRED  IH2 N - T ER1 D\nINTERREGNUM  IH2 N - T ER0 - R EH1 G - N AH0 M\nINTERRELATE  IH2 N - T ER0 - R IH0 - L EY1 T\nINTERRELATED  IH2 N - T ER0 - R IH0 - L EY1 - T IH0 D\nINTERRELATED(2)  IH2 N - T ER0 - R IY0 - L EY1 - T IH0 D\nINTERRELATIONSHIP  IH1 N - T ER0 - R IY0 - L EY1 - SH AH0 N - SH IH0 P\nINTERRENT  IH1 N - T ER0 - EH2 N T\nINTERRENT(2)  IH1 - N ER0 - EH2 N T\nINTERROGATE  IH0 N - T EH1 - R AH0 - G EY2 T\nINTERROGATED  IH0 N - T EH1 - R AH0 - G EY2 - T IH0 D\nINTERROGATING  IH0 N - T EH1 - R AH0 - G EY2 - T IH0 NG\nINTERROGATION  IH0 N - T EH2 - R AH0 - G EY1 - SH AH0 N\nINTERROGATIONS  IH0 N - T EH2 - R AH0 - G EY1 - SH AH0 N Z\nINTERROGATOR  IH2 N - T EH1 - R AH0 - G EY2 - T ER0\nINTERROGATORIES  IH0 N - T EH0 - R AA1 - G AH0 - T AO2 - R IY0 Z\nINTERROGATORS  IH2 N - T EH1 - R AH0 - G EY2 - T ER0 Z\nINTERROGATORY  IH0 N - T EH0 - R AA1 - G AH0 - T AO2 - R IY0\nINTERRUPT  IH2 N - T ER0 - AH1 P T\nINTERRUPT(2)  IH2 - N ER0 - AH1 P T\nINTERRUPTED  IH2 N - T ER0 - AH1 P - T IH0 D\nINTERRUPTED(2)  IH2 - N ER0 - AH1 P - T IH0 D\nINTERRUPTIBLE  IH2 N - T ER0 - R AH1 P - T IH0 - B AH0 L\nINTERRUPTIBLE(2)  IH2 - N ER0 - R AH1 P - T IH0 - B AH0 L\nINTERRUPTING  IH2 N - T ER0 - AH1 P - T IH0 NG\nINTERRUPTING(2)  IH2 - N ER0 - AH1 P - T IH0 NG\nINTERRUPTION  IH2 N - T ER0 - AH1 P - SH AH0 N\nINTERRUPTION(2)  IH2 - N ER0 - AH1 P - SH AH0 N\nINTERRUPTIONS  IH2 N - T ER0 - AH1 P - SH AH0 N Z\nINTERRUPTIONS(2)  IH2 - N ER0 - AH1 P - SH AH0 N Z\nINTERRUPTS  IH2 N - T ER0 - AH1 P T S\nINTERRUPTS(2)  IH2 - N ER0 - AH1 P T S\nINTERSCHOLASTIC  IH2 N - T ER0 - S K AH0 - L AE1 - S T IH0 K\nINTERSCOPE  IH1 N - T ER0 - S K OW2 P\nINTERSEC  IH1 N - T ER0 - S EH0 K\nINTERSECT  IH2 N - T ER0 - S EH1 K T\nINTERSECT(2)  IH2 - N ER0 - S EH1 K T\nINTERSECTED  IH2 N - T ER0 - S EH1 K - T IH0 D\nINTERSECTED(2)  IH2 - N ER0 - S EH1 K - T IH0 D\nINTERSECTING  IH2 N - T ER0 - S EH1 K - T IH0 NG\nINTERSECTING(2)  IH2 - N ER0 - S EH1 K - T IH0 NG\nINTERSECTION  IH2 N - T ER0 - S EH1 K - SH AH0 N\nINTERSECTION(2)  IH2 - N ER0 - S EH1 K - SH AH0 N\nINTERSECTIONS  IH2 N - T ER0 - S EH1 K - SH AH0 N Z\nINTERSECTIONS(2)  IH2 - N ER0 - S EH1 K - SH AH0 N Z\nINTERSECTS  IH2 N - T ER0 - S EH1 K T S\nINTERSECTS(2)  IH2 - N ER0 - S EH1 K T S\nINTERSECTS(3)  IH2 N - T ER0 - S EH1 K S\nINTERSECTS(4)  IH2 - N ER0 - S EH1 K S\nINTERSEGMENT  IH2 N - T ER0 - S EH1 G - M AH0 N T\nINTERSPEC  IH1 N - T ER0 - S P EH0 K\nINTERSPERSE  IH2 N - T ER0 - S P ER1 S\nINTERSPERSED  IH2 N - T ER0 - S P ER1 S T\nINTERSPERSES  IH2 N - T ER0 - S P ER1 - S AH0 Z\nINTERSTATE  IH2 N - T ER0 - S T EY1 T\nINTERSTATE'S  IH2 N - T ER0 - S T EY1 T S\nINTERSTATE'S(2)  IH2 - N ER0 - S T EY1 T S\nINTERSTATE(2)  IH2 - N ER0 - S T EY1 T\nINTERSTATES  IH1 N - T ER0 - S T EY2 T S\nINTERSTATES(2)  IH1 - N ER0 - S T EY2 T S\nINTERSTELLAR  IH2 N - T ER0 - S T EH1 - L ER0\nINTERTAN  IH2 N - T ER0 - T AE1 N\nINTERTECH  IH1 N - T ER0 - T EH2 K\nINTERTECHNOLOGY  IH2 N - T ER0 - T AH0 K - N AA1 - L AH0 - JH IY0\nINTERTECT  IH1 N - T ER0 - T EH2 K T\nINTERTIDAL  IH2 N - T ER0 - T AY1 - D AH0 L\nINTERTRANS  IH1 N - T ER0 - T R AE2 N Z\nINTERTRIBAL  IH2 N - T ER0 - T R AY1 - B AH0 L\nINTERTWINE  IH0 N - T ER0 - T W AY1 N\nINTERTWINED  IH0 N - T ER0 - T W AY1 N D\nINTERTWINING  IH1 N - T ER0 - T W AY2 - N IH0 NG\nINTERURBAN  IH2 N - T ER0 - ER1 - B AH0 N\nINTERVAL  IH1 N - T ER0 - V AH0 L\nINTERVAL(2)  IH1 - N ER0 - V AH0 L\nINTERVALS  IH1 N - T ER0 - V AH0 L Z\nINTERVALS(2)  IH1 - N ER0 - V AH0 L Z\nINTERVENE  IH2 N - T ER0 - V IY1 N\nINTERVENE(2)  IH2 - N ER0 - V IY1 N\nINTERVENED  IH2 N - T ER0 - V IY1 N D\nINTERVENED(2)  IH2 - N ER0 - V IY1 N D\nINTERVENES  IH2 N - T ER0 - V IY1 N Z\nINTERVENES(2)  IH2 - N ER0 - V IY1 N Z\nINTERVENING  IH2 N - T ER0 - V IY1 - N IH0 NG\nINTERVENING(2)  IH2 - N ER0 - V IY1 - N IH0 NG\nINTERVENOR  IH2 N - T ER0 - V IY1 - N ER0\nINTERVENOR(2)  IH2 - N ER0 - V IY1 - N ER0\nINTERVENORS  IH2 N - T ER0 - V IY1 - N ER0 Z\nINTERVENORS(2)  IH2 - N ER0 - V IY1 - N ER0 Z\nINTERVENTION  IH2 N - T ER0 - V EH1 N - CH AH0 N\nINTERVENTION(2)  IH2 - N ER0 - V EH1 N - CH AH0 N\nINTERVENTIONISM  IH2 N - T ER0 - V EH1 N - CH AH0 - N IH2 - Z AH0 M\nINTERVENTIONISM(2)  IH2 - N ER0 - V EH1 N - CH AH0 - N IH2 - Z AH0 M\nINTERVENTIONIST  IH2 N - T ER0 - V EH1 N - SH AH0 - N IH0 S T\nINTERVENTIONIST(2)  IH2 - N ER0 - V EH1 N - SH AH0 - N IH0 S T\nINTERVENTIONISTS  IH2 N - T ER0 - V EH1 N - CH AH0 - N IH0 S T S\nINTERVENTIONISTS(2)  IH2 N - T ER0 - V EH1 N - CH AH0 - N IH0 S S\nINTERVENTIONISTS(3)  IH2 - N ER0 - V EH1 N - CH AH0 - N IH0 S T S\nINTERVENTIONISTS(4)  IH2 - N ER0 - V EH1 N - CH AH0 - N IH0 S S\nINTERVENTIONISTS(5)  IH2 N - T ER0 - V EH1 N - CH AH0 N - IH0 S\nINTERVENTIONISTS(6)  IH2 - N ER0 - V EH1 N - CH AH0 N - IH0 S\nINTERVENTIONS  IH2 N - T ER0 - V EH1 N - CH AH0 N Z\nINTERVENTIONS(2)  IH2 - N ER0 - V EH1 N - CH AH0 N Z\nINTERVIEW  IH1 N - T ER0 - V Y UW2\nINTERVIEW(2)  IH1 - N ER0 - V Y UW2\nINTERVIEWED  IH1 N - T ER0 - V Y UW2 D\nINTERVIEWED(2)  IH1 - N ER0 - V Y UW2 D\nINTERVIEWEE  IH0 N - T ER0 - V Y UW0 - IY1\nINTERVIEWEE(2)  IH0 - N ER0 - V Y UW0 - IY1\nINTERVIEWEES  IH0 N - T ER0 - V Y UW0 - IY1 Z\nINTERVIEWEES(2)  IH0 - N ER0 - V Y UW0 - IY1 Z\nINTERVIEWER  IH1 N - T ER0 - V Y UW2 - ER0\nINTERVIEWER(2)  IH1 - N ER0 - V Y UW2 - ER0\nINTERVIEWERS  IH1 N - T ER0 - V Y UW2 - ER0 Z\nINTERVIEWERS(2)  IH1 - N ER0 - V Y UW2 - ER0 Z\nINTERVIEWING  IH1 N - T ER0 - V Y UW2 - IH0 NG\nINTERVIEWING(2)  IH1 - N ER0 - V Y UW2 - IH0 NG\nINTERVIEWS  IH1 N - T ER0 - V Y UW2 Z\nINTERVIEWS(2)  IH1 - N ER0 - V Y UW2 Z\nINTERVOICE  IH2 N - T ER0 - V OY1 S\nINTERWEAVE  IH2 N - T ER0 - W IY1 V\nINTERWEAVING  IH2 N - T ER0 - W IY1 - V IH0 NG\nINTERWOVEN  IH2 N - T ER0 - W OW1 - V AH0 N\nINTESTINAL  IH0 N - T EH1 - S T AH0 - N AH0 L\nINTESTINE  IH0 N - T EH1 - S T AH0 N\nINTESTINES  IH0 N - T EH1 - S T AH0 N Z\nINTEX  IH1 N - T EH2 K S\nINTI  IH1 N - T IY0\nINTIFADA  IH2 N - T IH0 - F AA1 - D AH0\nINTIMACY  IH1 N - T AH0 - M AH0 - S IY0\nINTIMATE  IH1 N - T AH0 - M AH0 T\nINTIMATE(2)  IH1 N - T AH0 - M EY2 T\nINTIMATE(3)  IH1 - N AH0 - M AH0 T\nINTIMATED  IH1 N - T AH0 - M EY2 - T IH0 D\nINTIMATELY  IH1 N - T AH0 - M AH0 T - L IY0\nINTIMATES  IH1 N - T AH0 - M AH0 T S\nINTIMATION  IH2 N - T AH0 - M EY1 - SH AH0 N\nINTIMATIONS  IH2 N - T AH0 - M EY1 - SH AH0 N Z\nINTIMIDATE  IH0 N - T IH1 - M IH0 - D EY2 T\nINTIMIDATED  IH0 N - T IH1 - M IH0 - D EY2 - T IH0 D\nINTIMIDATES  IH0 N - T IH1 - M IH0 - D EY2 T S\nINTIMIDATING  IH0 N - T IH1 - M IH0 - D EY2 - T IH0 NG\nINTIMIDATION  IH0 N - T IH2 - M IH0 - D EY1 - SH AH0 N\nINTIS  IH1 N - T IH0 S\nINTO  IH0 N - T UW1\nINTO(2)  IH1 N - T UW0\nINTO(3)  IH0 N - T AH0\nINTOLERABLE  IH0 N - T AA1 - L ER0 - AH0 - B AH0 L\nINTOLERABLY  IH0 N - T AA1 - L ER0 - AH0 - B L IY0\nINTOLERANCE  IH0 N - T AA1 - L ER0 - AH0 N S\nINTOLERANT  IH0 N - T AA1 - L ER0 - AH0 N T\nINTONATION  IH0 N - T AH0 - N EY1 - SH AH0 N\nINTONE  IH0 N - T OW1 N\nINTONED  IH0 N - T OW1 N D\nINTONES  IH0 N - T OW1 N Z\nINTONING  IH0 N - T OW1 - N IH0 NG\nINTOURIST  IH0 N - T UH1 - R IH0 S T\nINTOXICATE  IH0 N - T AA1 K - S AH0 - K EY2 T\nINTOXICATED  IH0 N - T AA1 K - S AH0 - K EY2 - T AH0 D\nINTOXICATED(2)  IH0 N - T AA1 K - S IH0 - K EY2 - T IH0 D\nINTOXICATING  IH0 N - T AA1 K - S IH0 - K EY2 - T IH0 NG\nINTOXICATION  IH0 N - T AA2 K - S AH0 - K EY1 - SH AH0 N\nINTRA  IH1 N - T R AH0\nINTRACOMPANY  IH2 N - T R AH0 - K AA1 M - P AH0 - N IY0\nINTRACRANIAL  IH2 N - T R AH0 - K R EY1 - N IY0 - AH0 L\nINTRACTABLE  IH0 N - T R AE1 K - T AH0 - B AH0 L\nINTRADAY  IH2 N - T R AH0 - D EY1\nINTRAMARGINAL  IH2 N - T R AH0 - M AA1 R - JH IH0 - N AH0 L\nINTRAMURAL  IH2 N - T R AH0 - M Y UH1 - R AH0 L\nINTRANSIGENCE  IH0 N - T R AE1 N - S AH0 - JH AH0 N S\nINTRANSIGENCE(2)  IH0 N - T R AE1 N - S IH0 - JH AH0 N S\nINTRANSIGENT  IH0 N - T R AE1 N - S AH0 - JH AH0 N T\nINTRANSIGENT(2)  IH0 N - T R AE1 N - Z AH0 - JH AH0 N T\nINTRAOCULAR  IH2 N - T R AH0 - OW1 - K Y UW0 - L ER0\nINTRAPARTY  IH1 N - T R AH0 - P AA2 R - T IY0\nINTRASTATE  IH2 N - T R AH0 - S T EY1 T\nINTRAUTERINE  IH2 N - T R AH0 - Y UW1 - T ER0 - IH0 N\nINTRAVENOUS  IH2 N - T R AH0 - V IY1 - N AH0 S\nINTRAVENOUSLY  IH0 N - T R AE1 - V AH0 - N AH0 S - L IY0\nINTRAVENOUSLY(2)  IH0 N - T R AH0 - V IY1 - N AH0 S - L IY0\nINTRAWEST  IH1 N - T R AH0 - W AH0 S T\nINTRAWEST(2)  IH2 N - T R AH0 - W EH1 S T\nINTREPID  IH0 N - T R EH1 - P AH0 D\nINTREX  IH1 N - T R AH0 K S\nINTRICACIES  IH1 N - T R AH0 - K AH0 - S IY0 Z\nINTRICACY  IH1 N - T R AH0 - K AH0 - S IY0\nINTRICATE  IH1 N - T R AH0 - K AH0 T\nINTRICATELY  IH1 N - T R AH0 - K AH0 T - L IY0\nINTRIE  IH1 N - T R IY0\nINTRIERI  IH0 N - T R IH1 - R IY0\nINTRIGUE  IH0 N - T R IY1 G\nINTRIGUE(2)  IH1 N - T R IY0 G\nINTRIGUED  IH1 N - T R IY0 G D\nINTRIGUED(2)  IH0 N - T R IY1 G D\nINTRIGUES  IH0 N - T R IY1 G Z\nINTRIGUES(2)  IH1 N - T R IY0 G Z\nINTRIGUING  IH0 N - T R IY1 - G IH0 NG\nINTRIGUINGLY  IH0 N - T R IY1 - G IH0 NG - L IY0\nINTRINSIC  IH0 N - T R IH1 N - S IH0 K\nINTRINSICALLY  IH0 N - T R IH1 N - S IH0 - K AH0 - L IY0\nINTRINSICALLY(2)  IH0 N - T R IH1 N - S IH0 K - L IY0\nINTRO  IH1 N - T R OW0\nINTRODUCE  IH2 N - T R AH0 - D UW1 S\nINTRODUCE(2)  IH2 N - T R OW0 - D UW1 S\nINTRODUCED  IH2 N - T R AH0 - D UW1 S T\nINTRODUCED(2)  IH2 N - T R OW0 - D UW1 S T\nINTRODUCES  IH2 N - T R AH0 - D UW1 - S IH0 Z\nINTRODUCES(2)  IH2 N - T R OW0 - D UW1 - S IH0 Z\nINTRODUCING  IH2 N - T R AH0 - D UW1 - S IH0 NG\nINTRODUCING(2)  IH2 N - T R OW0 - D UW1 - S IH0 NG\nINTRODUCTION  IH2 N - T R AH0 - D AH1 K - SH AH0 N\nINTRODUCTION(2)  IH2 N - T R OW0 - D AH1 K - SH AH0 N\nINTRODUCTIONS  IH2 N - T R AH0 - D AH1 K - SH AH0 N Z\nINTRODUCTIONS(2)  IH2 N - T R OW0 - D AH1 K - SH AH0 N Z\nINTRODUCTORY  IH2 N - T R AH0 - D AH1 K - T ER0 - IY0\nINTRODUCTORY(2)  IH2 N - T R OW0 - D AH1 K - T ER0 - IY0\nINTRON  IH1 N - T R AH0 N\nINTROS  IH1 N - T R OW0 Z\nINTROSPECT  IH1 N - T R AH0 - S P EH2 K T\nINTROSPECTION  IH2 N - T R AH0 - S P EH1 K - SH AH0 N\nINTROSPECTION(2)  IH2 N - T R OW0 - S P EH1 K - SH AH0 N\nINTROSPECTIVE  IH2 N - T R AH0 - S P EH1 K - T IH0 V\nINTROSPECTIVE(2)  IH2 N - T R OW0 - S P EH1 K - T IH0 V\nINTROVERT  IH1 N - T R OW0 - V ER2 T\nINTROVERTED  IH1 N - T R OW0 - V ER2 - T IH0 D\nINTRUDE  IH0 N - T R UW1 D\nINTRUDED  IH0 N - T R UW1 - D AH0 D\nINTRUDER  IH0 N - T R UW1 - D ER0\nINTRUDERS  IH0 N - T R UW1 - D ER0 Z\nINTRUDES  IH0 N - T R UW1 D Z\nINTRUDING  IH0 N - T R UW1 - D IH0 NG\nINTRUSION  IH0 N - T R UW1 - ZH AH0 N\nINTRUSIONS  IH0 N - T R UW1 - ZH AH0 N Z\nINTRUSIVE  IH0 N - T R UW1 - S IH0 V\nINTRUSIVENESS  IH0 N - T R UW1 - S IH0 V - N EH0 S\nINTUIT  IH0 N - T UW1 - AH0 T\nINTUIT'S  IH0 N - T UW1 - AH0 T S\nINTUITION  IH2 N - T UW0 - IH1 - SH AH0 N\nINTUITIVE  IH0 N - T UW1 - AH0 - T IH0 V\nINTUITIVELY  IH0 N - T UW1 - IH0 - T IH0 V - L IY0\nINUIT  IH1 - N UW0 T\nINUNDATE  IH1 - N AH0 N - D EY2 T\nINUNDATED  IH1 - N AH0 N - D EY2 - T IH0 D\nINUNDATING  IH1 - N AH0 N - D EY2 - T IH0 NG\nINUNDATING(2)  IH0 - N AH1 N - D EY2 - T IH0 NG\nINUNDATION  IH2 - N AH0 N - D EY1 - SH AH0 N\nINUNDATIONS  IH2 - N AH0 N - D EY1 - SH AH0 N Z\nINURE  IH0 - N Y UH1 R\nINURED  IH0 - N Y UH1 R D\nINVACARE  IH1 N - V AH0 - K EH2 R\nINVADE  IH0 N - V EY1 D\nINVADED  IH0 N - V EY1 - D AH0 D\nINVADED(2)  IH0 N - V EY1 - D IH0 D\nINVADER  IH0 N - V EY1 - D ER0\nINVADERS  IH0 N - V EY1 - D ER0 Z\nINVADES  IH0 N - V EY1 D Z\nINVADING  IH0 N - V EY1 - D IH0 NG\nINVALID  IH1 N - V AH0 - L AH0 D\nINVALID(2)  IH1 N - V AH0 - L IH0 D\nINVALID(3)  IH0 N - V AE1 - L AH0 D\nINVALIDATE  IH0 N - V AE1 - L IH0 - D EY2 T\nINVALIDATED  IH0 N - V AE1 - L AH0 - D EY2 - T AH0 D\nINVALIDATED(2)  IH0 N - V AE1 - L IH0 - D EY2 - T IH0 D\nINVALIDATING  IH0 N - V AE1 - L AH0 - D EY2 - T IH0 NG\nINVALIDATION  IH0 N - V AE2 - L AH0 - D EY1 - SH AH0 N\nINVALIDS  IH1 N - V AH0 - L AH0 D Z\nINVALUABLE  IH0 N - V AE1 L - Y AH0 - B AH0 L\nINVARIABLY  IH0 N - V EH1 - R IY0 - AH0 - B L IY0\nINVARIANCE  IH0 N - V EH1 - R IY0 - AH0 N S\nINVARIANT  IH0 N - V EH1 - R IY0 - AH0 N T\nINVASION  IH0 N - V EY1 - ZH AH0 N\nINVASIONS  IH0 N - V EY1 - ZH AH0 N Z\nINVASIVE  IH0 N - V EY1 - S IH0 V\nINVECTIVE  IH0 N - V EH1 K - T IH0 V\nINVENT  IH0 N - V EH1 N T\nINVENTED  IH0 N - V EH1 N - T AH0 D\nINVENTED(2)  IH0 N - V EH1 N - T IH0 D\nINVENTING  IH0 N - V EH1 N - T IH0 NG\nINVENTION  IH0 N - V EH1 N - SH AH0 N\nINVENTIONS  IH0 N - V EH1 N - SH AH0 N Z\nINVENTIVE  IH0 N - V EH1 N - T IH0 V\nINVENTIVENESS  IH0 N - V EH1 N - T IH0 V - N AH0 S\nINVENTOR  IH0 N - V EH1 N - T ER0\nINVENTORIED  IH1 N - V AH0 N - T AO2 - R IY0 D\nINVENTORIES  IH2 N - V AH0 N - T AO1 - R IY0 Z\nINVENTORS  IH0 N - V EH1 N - T ER0 Z\nINVENTORY  IH2 N - V AH0 N - T AO1 - R IY0\nINVENTORY'S  IH2 N - V AH0 N - T AO1 - R IY0 Z\nINVENTS  IH0 N - V EH1 N T S\nINVERLAT  IH1 N - V ER0 - L AE2 T\nINVERNESS  IH1 N - V ER0 - N EH2 S\nINVERSE  IH0 N - V ER1 S\nINVERSELY  IH0 N - V ER1 S - L IY0\nINVERSION  IH0 N - V ER1 - ZH AH0 N\nINVERT  IH0 N - V ER1 T\nINVERTEBRATE  IH2 N - V ER1 - T AH0 - B R AH0 T\nINVERTEBRATE(2)  IH2 N - V ER1 - T AH0 - B R EY2 T\nINVERTEBRATES  IH0 N - V ER1 - T AH0 - B R AH0 T S\nINVERTEBRATES(2)  IH2 N - V ER1 - T AH0 - B R EY2 T S\nINVERTED  IH0 N - V ER1 - T IH0 D\nINVESCO  IH0 N - V EH1 - S K OW0\nINVESCO'S  IH2 N - V EH1 - S OW0 Z\nINVEST  IH0 N - V EH1 S T\nINVESTABLE  IH0 N - V EH1 - S T AH0 - B AH0 L\nINVESTCORP  IH0 N - V EH1 S T - K AO0 R P\nINVESTED  IH0 N - V EH1 - S T AH0 D\nINVESTED(2)  IH0 N - V EH1 - S T IH0 D\nINVESTIGATE  IH0 N - V EH1 - S T AH0 - G EY2 T\nINVESTIGATED  IH0 N - V EH1 - S T AH0 - G EY2 - T AH0 D\nINVESTIGATED(2)  IH0 N - V EH1 - S T AH0 - G EY2 - T IH0 D\nINVESTIGATES  IH0 N - V EH1 - S T AH0 - G EY2 T S\nINVESTIGATING  IH0 N - V EH1 - S T AH0 - G EY2 - T IH0 NG\nINVESTIGATION  IH0 N - V EH2 - S T AH0 - G EY1 - SH AH0 N\nINVESTIGATIONAL  IH0 N - V EH0 - S T IH0 - G EY1 - SH AH0 - N AH0 L\nINVESTIGATIONS  IH0 N - V EH2 - S T AH0 - G EY1 - SH AH0 N Z\nINVESTIGATIVE  IH0 N - V EH1 - S T AH0 - G EY2 - T IH0 V\nINVESTIGATOR  IH0 N - V EH1 - S T AH0 - G EY2 - T ER0\nINVESTIGATOR'S  IH0 N - V EH1 - S T AH0 - G EY2 - T ER0 Z\nINVESTIGATORS  IH0 N - V EH1 - S T AH0 - G EY2 - T ER0 Z\nINVESTIGATORS'  IH0 N - V EH1 - S T AH0 - G EY2 - T ER0 Z\nINVESTIGATORY  IH0 N - V EH1 - S T AH0 - G AH0 - T AO2 - R IY0\nINVESTIMENTO  IH0 N - V EH2 - S T IH0 - M EH1 N - T OW0\nINVESTING  IH0 N - V EH1 - S T IH0 NG\nINVESTISSEMENTS  IH2 N - V EH2 - S T IY1 - Z IH0 - M AA0 N T S\nINVESTITURE  IH0 N - V EH1 - S T AH0 - CH ER0\nINVESTMENT  IH0 N - V EH1 S T - M AH0 N T\nINVESTMENT'S  IH0 N - V EH1 S T - M AH0 N T S\nINVESTMENT'S(2)  IH0 N - V EH1 S - M AH0 N T S\nINVESTMENT(2)  IH0 N - V EH1 S - M AH0 N T\nINVESTMENTS  IH0 N - V EH1 S T - M AH0 N T S\nINVESTMENTS'  IH0 N - V EH1 S T - M AH0 N T S\nINVESTMENTS'(2)  IH0 N - V EH1 S - M AH0 N T S\nINVESTMENTS(2)  IH0 N - V EH1 S - M AH0 N T S\nINVESTNET  IH0 N - V EH1 S T - N EH2 T\nINVESTOR  IH0 N - V EH1 - S T ER0\nINVESTOR'S  IH0 N - V EH1 - S T ER0 Z\nINVESTORS  IH0 N - V EH1 - S T ER0 Z\nINVESTORS'  IH0 N - V EH1 - S T ER0 Z\nINVESTS  IH0 N - V EH1 S T S\nINVESTS(2)  IH0 N - V EH1 S S\nINVESTS(3)  IH0 N - V EH1 S\nINVETERATE  IH0 N - V EH1 - T ER0 - AH0 T\nINVIDIOUS  IH0 N - V IH1 - D IY0 - AH0 S\nINVIGORATE  IH0 N - V IH1 - G ER0 - IH0 T\nINVIGORATED  IH0 N - V IH1 - G ER0 - EY2 - T IH0 D\nINVIGORATING  IH0 N - V IH1 - G ER0 - EY2 - T IH0 NG\nINVINCIBILITY  IH0 N - V IH2 N - S AH0 - B IH1 - L IH0 - T IY0\nINVINCIBLE  IH0 N - V IH1 N - S AH0 - B AH0 L\nINVIOLABLE  IH0 N - V AY1 - AH0 - L AH0 - B AH0 L\nINVIOLATE  IH0 N - V AY1 - AH0 - L IH0 T\nINVIRASE  IH2 N - V AY1 - R EY2 Z\nINVISIBILITY  IH0 N - V IH2 - Z AH0 - B IH1 - L AH0 - T IY0\nINVISIBLE  IH0 N - V IH1 - Z AH0 - B AH0 L\nINVISIBLES  IH2 N - V IH1 - Z AH0 - B AH0 L Z\nINVITATION  IH2 N - V IH0 - T EY1 - SH AH0 N\nINVITATIONAL  IH2 N - V AH0 - T EY1 - SH AH0 - N AH0 L\nINVITATIONS  IH2 N - V IH0 - T EY1 - SH AH0 N Z\nINVITE  IH0 N - V AY1 T\nINVITED  IH0 N - V AY1 - T AH0 D\nINVITED(2)  IH0 N - V AY1 - T IH0 D\nINVITES  IH0 N - V AY1 T S\nINVITING  IH0 N - V AY1 - T IH0 NG\nINVITRON  IH1 N - V IH0 - T R AA0 N\nINVITRON'S  IH1 N - V IH0 - T R AA0 N Z\nINVOCATION  IH2 N - V AH0 - K EY1 - SH AH0 N\nINVOICE  IH1 N - V OY0 S\nINVOICES  IH1 N - V OY0 - S IH0 Z\nINVOICING  IH1 N - V OY2 - S IH0 NG\nINVOKE  IH0 N - V OW1 K\nINVOKED  IH0 N - V OW1 K T\nINVOKES  IH0 N - V OW1 K S\nINVOKING  IH0 N - V OW1 - K IH0 NG\nINVOLUNTARILY  IH2 N - V OW0 - L AH1 N - T ER0 - IH2 - L IY0\nINVOLUNTARILY(2)  IH2 N - V AA2 - L AH0 N - T ER1 - AH0 - L IY0\nINVOLUNTARY  IH0 N - V AA1 - L AH0 N - T EH2 - R IY0\nINVOLVE  IH0 N - V AA1 L V\nINVOLVED  IH0 N - V AA1 L V D\nINVOLVEMENT  IH0 N - V AA1 L V - M AH0 N T\nINVOLVEMENTS  IH0 N - V AA1 L V - M AH0 N T S\nINVOLVES  IH0 N - V AA1 L V Z\nINVOLVING  IH0 N - V AA1 L - V IH0 NG\nINVULNERABILITY  IH0 N - V AH2 L - N ER0 - AH0 - B IH1 - L IH0 - T IY0\nINVULNERABLE  IH0 N - V AH1 L - N ER0 - AH0 - B AH0 L\nINWARD  IH1 N - W ER0 D\nINWARDLY  IH1 N - W ER0 D - L IY0\nINWOOD  IH1 N - W UH2 D\nINY  IH1 - N IY0\nINZER  IH1 N - Z ER0\nIO  AY1 - OW0\nIODICE  AY1 - AH0 - D AY2 S\nIODICE(2)  AY2 - AH0 - D IY1 - S EY0\nIODIDE  AY1 - AH0 - D AY2 D\nIODIDE'S  AY1 - AH0 - D AY2 D Z\nIODIDES  AY1 - AH0 - D AY2 D Z\nIODINE  AY1 - AH0 - D AY2 N\nIOLA  AY0 - OW1 - L AH0\nIOLANDE  IY0 - OW0 - L AA1 N - D IY0\nIOLE  IY0 - OW1 - L IY0\nIOMEGA  AY2 - OW0 - M EY1 - G AH0\nION  AY1 - AH0 N\nION(2)  AY1 - AA2 N\nIONA  AY0 - OW1 - N AH0\nIONE  AY0 - OW1 - N IY0\nIONIC  AY0 - AA1 - N IH0 K\nIONICS  AY0 - AA1 - N IH0 K S\nIONICS'S  AY0 - AA1 - N IH0 K - S IH0 Z\nIONIZATION  AY2 - AH0 - N AH0 - Z EY1 - SH AH0 N\nIONIZE  AY1 - AH0 - N AY2 Z\nIONIZER  AY1 - AH0 - N AY2 - Z ER0\nIONIZERS  AY1 - AH0 - N AY2 - Z ER0 Z\nIONIZING  AY1 - AH0 - N AY2 - Z IH0 NG\nIONOSPHERE  AY0 Y - AA1 - N AH0 S - F IY0 R\nIONOSPHERE(2)  AY0 - AA1 - N AH0 S - F IY0 R\nIONOSPHERIC  AY0 - AA2 - N AH0 S - F EH1 - R IH0 K\nIONS  AY1 - AH0 N Z\nIONS(2)  AY1 - AA2 N Z\nIORIO  IY0 - AO1 - R IY0 - OW0\nIOS  IY1 - OW0 S\nIOS(2)  AY1 - OW0 S\nIOSIF  AY1 - AH0 - S IH0 F\nIOSIF(2)  Y EH1 - S AH0 F\nIOSUE  AY0 - OW1 - S UW0\nIOTA  AY0 - OW1 - T AH0\nIOTT  AY1 - AH0 T\nIOU  AY2 - OW2 - Y UW1\nIOVINE  IY0 - OW0 - V IY1 - N IY0\nIOVINO  IY0 - OW0 - V IY1 - N OW0\nIOWA  AY1 - AH0 - W AH0\nIOWA'S  AY1 - AH0 - W AH0 Z\nIOWA'S(2)  AY1 - OW0 - AH0 Z\nIOWA(2)  AY1 - OW0 - AH0\nIOWAN  AY1 - AH0 - W AH0 N\nIOWAN(2)  AY1 - OW0 - AH0 N\nIOWANS  AY1 - AH0 - W AH0 N Z\nIOWANS(2)  AY1 - OW0 - AH0 N Z\nIP  IH1 P\nIP(2)  AY1 - P IY1\nIPALCO  IY0 - P AE1 L - K OW0\nIPALCO'S  IY0 - P AE1 L - K OW0 Z\nIPCO  IH1 P - K OW0\nIPOCK  IH1 - P AH0 K\nIPPOLITO  IH2 - P OW0 - L IY1 - T OW0\nIPSCO  IH1 P - S K OW0\nIPSEN  IH1 P - S AH0 N\nIPTAY  IH1 P - T EY0\nIQBAL  IH1 K - B AH0 L\nIRA  AY1 - R AH0\nIRA'S  AY1 - R AH0 Z\nIRA'S(2)  AY1 - AA1 - R EY1 Z\nIRA(2)  AY1 - AA1 - R EY1\nIRAN  IH0 - R AA1 N\nIRAN'S  IH0 - R AE1 N Z\nIRAN'S(2)  AY2 - R AE1 N Z\nIRAN(2)  AY2 - R AE1 N\nIRANAMOK  AY2 - R AH0 - N AA1 - M AA0 K\nIRANGATE  IH0 - R AA1 N - G EY2 T\nIRANI  IH0 - R AA1 - N IY0\nIRANIAN  IH0 - R AA1 - N IY0 - AH0 N\nIRANIAN(2)  AY0 - R EY1 - N IY0 - AH0 N\nIRANIANS  AY0 - R EY1 - N IY0 - AH0 N Z\nIRANIANS'  AY0 - R EY1 - N IY0 - AH0 N Z\nIRANIANS(2)  IH0 - R AA1 - N IY0 - AH0 N Z\nIRANSCAM  AY0 - R AE1 N - S K AE0 M\nIRAQ  IH0 - R AA1 K\nIRAQ'S  IH0 - R AA1 K S\nIRAQ'S(2)  IY2 - R AA1 K S\nIRAQ'S(3)  AY2 - R AA1 K S\nIRAQ(2)  IY2 - R AA1 K\nIRAQ(3)  AY2 - R AA1 K\nIRAQGATE  IH0 - R AA1 K - G EY2 T\nIRAQGATE(2)  IY2 - R AA1 K - G EY2 T\nIRAQGATE(3)  AY2 - R AA1 K - G EY2 T\nIRAQI  IH0 - R AE1 - K IY0\nIRAQI'S  IH0 - R AE1 - K IY0 Z\nIRAQI'S(2)  IY2 - R AE1 - K IY0 Z\nIRAQI'S(3)  AY2 - R AE1 - K IY0 Z\nIRAQI(2)  IY2 - R AE1 - K IY0\nIRAQI(3)  AY2 - R AE1 - K IY0\nIRAQIS  IH0 - R AE1 - K IY0 Z\nIRAQIS(2)  IY2 - R AE1 - K IY0 Z\nIRAQIS(3)  AY2 - R AE1 - K IY0 Z\nIRAS  AY1 - R AH0 Z\nIRAS(2)  AY1 - AA1 - R EY1 Z\nIRASCIBLE  IH0 - R AE1 - S IH0 - B AH0 L\nIRATE  AY0 - R EY1 T\nIRBINNA  ER0 - B IH1 - N AH0\nIRBY  ER1 - B IY0\nIRE  AY1 R\nIREENE  AY0 - R IY1 N\nIRELAN  IH0 - R EY0 - L AA1 N\nIRELAND  AY1 - ER0 - L AH0 N D\nIRELAND'S  AY1 R - L AH0 N D Z\nIRELAND(2)  AY1 R - L AH0 N D\nIRELL  AY0 - R EH1 L\nIRENA  IH0 - R EY1 - N AH0\nIRENE  AY0 - R IY1 N\nIRENE'S  AY2 - R IY1 N Z\nIRESON  IH1 - R IH0 - S AH0 N\nIRESON(2)  AY1 - ER0 - S AH0 N\nIRETA  IH0 - R EY1 - T AH0\nIRETON  IH1 - R IH0 - T AA0 N\nIRETON(2)  AY1 - ER0 - T AH0 N\nIRETTA  IH0 - R EH1 - T AH0\nIRETTE  IH0 - R EH1 T\nIREY  AY1 - R IY0\nIRIAN  AY1 - R IY0 - AH0 N\nIRIANESE  AY0 - R IY1 - AH0 - N IY2 S\nIRICK  IH1 - R IH0 K\nIRIDESCENT  IH2 - R AH0 - D EH1 - S AH0 N T\nIRIDIUM  IH0 - R IH1 - D IY0 - AH0 M\nIRIMAJIRI  AY0 - R IY2 - M AH0 - JH IH1 - R IY0\nIRINA  IH0 - R IY1 - N AH0\nIRIS  AY1 - R AH0 S\nIRIS(2)  AY1 - R IH0 S\nIRISES  AY1 - R AH0 - S IH0 Z\nIRISH  AY1 - R IH0 SH\nIRISHMAN  AY1 - R IH0 SH - M AH0 N\nIRIT  IH1 - R IH0 T\nIRIT(2)  AY1 - AA1 - R AY1 - T IY1\nIRIZARRY  IH1 - R IH0 - Z AE0 - R IY0\nIRK  ER1 K\nIRKED  ER1 K T\nIRKS  ER1 K S\nIRKSOME  ER1 K - S AH0 M\nIRKUTSK  ER0 - K UH1 T S K\nIRKUTSK(2)  IH0 R - K UH1 T S K\nIRLBECK  ER1 L - B EH0 K\nIRMA  ER1 - M AH0\nIRMA'S  ER1 - M AH0 Z\nIRON  AY1 - ER0 N\nIRONCLAD  AY1 - ER0 N - K L AE2 D\nIRONED  AY1 - ER0 N D\nIRONIC  AY0 - R AA1 - N IH0 K\nIRONICAL  AY0 - R AA1 - N IH0 - K AH0 L\nIRONICALLY  AY0 - R AA1 - N IH0 K - L IY0\nIRONIES  AY1 - R AH0 - N IY0 Z\nIRONING  AY1 - ER0 - N IH0 NG\nIRONING(2)  AY1 R - N IH0 NG\nIRONIZE  AY1 - ER0 - N AY2 Z\nIRONIZED  AY1 - ER0 - N AY2 Z D\nIRONIZER  AY1 - ER0 - N AY2 - Z ER0\nIRONIZES  AY1 - ER0 - N AY2 - Z IH0 Z\nIRONIZING  AY1 - ER0 - N AY2 - Z IH0 NG\nIRONS  AY1 - ER0 N Z\nIRONSIDE  AY1 - ER0 N - S AY2 D\nIRONSIDES  AY1 - ER0 N - S AY2 D Z\nIRONTON  AY1 R N - T AH0 N\nIRONWOOD  AY1 - ER0 N - W UH2 D\nIRONWOOD'S  AY1 - ER0 N - W UH2 D Z\nIRONY  AY1 - R AH0 - N IY0\nIROQUOIS  IH1 - R AH0 - K W OY2\nIRRADIATE  IH0 - R EY1 - D IY0 - EY2 T\nIRRADIATED  IH0 - R EY1 - D IY0 - EY2 - T IH0 D\nIRRADIATION  IH0 - R EY2 - D IY0 - EY1 - SH AH0 N\nIRRATIONAL  IH0 - R AE1 - SH AH0 - N AH0 L\nIRRATIONALITY  IH0 - R AE2 - SH AH0 - N AE1 - L AH0 - T IY0\nIRRATIONALLY  IH0 - R AE1 - SH AH0 N - AH0 - L IY0\nIRRATIONALLY(2)  IH0 - R AE1 SH - N AH0 - L IY0\nIRRECONCILABLE  IH0 - R EH1 - K AH0 N - S AY2 - L AH0 - B AH0 L\nIRREDENTISM  IH2 - R AH0 - D EH1 N - T IH0 - Z AH0 M\nIRREFUTABLE  IH0 - R AH0 - F Y UW1 - T AH0 - B AH0 L\nIRREGARDLESS  IH0 - R AH0 - G AA1 D - L AH0 S\nIRREGULAR  IH0 - R EH1 - G Y AH0 - L ER0\nIRREGULARITIES  IH0 - R EH0 - G Y AH0 - L EH1 - R AH0 - T IY0 Z\nIRREGULARITY  IH0 - R EH2 - G Y AH0 - L EH1 - R AH0 - T IY0\nIRREGULARLY  IH0 - R EH1 - G Y AH0 - L ER0 - L IY0\nIRREGULARS  IH0 - R EH1 - G Y AH0 - L ER0 Z\nIRRELEVANCE  IH0 - R EH1 - L AH0 - V AH0 N S\nIRRELEVANCY  IH0 - R EH1 - L AH0 - V AH0 N - S IY0\nIRRELEVANT  IH0 - R EH1 - L AH0 - V AH0 N T\nIRREMEDIABLE  IH2 - R IH0 - M IY1 - D IY0 - AH0 - B AH0 L\nIRREPARABLE  IH0 - R EH1 - P ER0 - AH0 - B AH0 L\nIRREPARABLY  IH0 - R EH1 - P ER0 - AH0 - B L IY0\nIRREPLACEABLE  IH0 - R AH0 - P L EY1 - S AH0 - B AH0 L\nIRREPRESSIBLE  IH0 - R AH0 - P R EH1 - S AH0 - B AH0 L\nIRRESISTIBLE  IH2 - R IH0 - Z IH1 - S T AH0 - B AH0 L\nIRRESISTIBLY  IH2 - R IH0 - Z IH1 - S T AH0 - B L IY0\nIRRESPECTIVE  IH0 - R AH0 - S P EH1 K - T IH0 V\nIRRESPONSIBILITY  IH0 - R AH0 - S P AA2 N - S AH0 - B IH1 - L AH0 - T IY0\nIRRESPONSIBLE  IH0 - R AH0 - S P AA1 N - S AH0 - B AH0 L\nIRRESPONSIBLY  IH0 - R AH0 - S P AA1 N - S AH0 - B L IY0\nIRRETRIEVABLY  IH0 - R AH0 - T R IY1 - V AH0 - B L IY0\nIRREVERENCE  IH0 - R EH1 - V ER0 - AH0 N S\nIRREVERENT  IH0 - R EH1 - V ER0 - AH0 N T\nIRREVERSIBLE  IH2 - R IH0 - V ER1 - S AH0 - B AH0 L\nIRREVERSIBLY  IH2 - R IH0 - V ER1 - S AH0 - B L IY0\nIRREVOCABLE  IH0 - R EH1 - V AH0 - K AH0 - B AH0 L\nIRREVOCABLY  IH0 - R EH1 - V AH0 - K AH0 - B L IY0\nIRREVOCABLY(2)  IH0 - R EH2 - V OW1 - K AH0 - B L IY0\nIRRIGATE  IH1 - R AH0 - G EY2 T\nIRRIGATED  IH1 - R AH0 - G EY2 - T IH0 D\nIRRIGATION  IH2 - R AH0 - G EY1 - SH AH0 N\nIRRIGATOR  IH1 - R AH0 - G EY2 - T ER0\nIRRIGATORS  IH1 - R AH0 - G EY2 - T ER0 Z\nIRRITABILITY  IH0 - R IH0 - T AH0 - B IH1 - L AH0 - T IY0\nIRRITABLE  IH1 - R AH0 - T AH0 - B AH0 L\nIRRITANT  IH1 - R AH0 - T AH0 N T\nIRRITANTS  IH1 - R AH0 - T AH0 N T S\nIRRITATE  IH1 - R IH0 - T EY2 T\nIRRITATED  IH1 - R AH0 - T EY2 - T AH0 D\nIRRITATES  IH1 - R IH0 - T EY2 T S\nIRRITATING  IH1 - R AH0 - T EY2 - T IH0 NG\nIRRITATION  IH2 - R IH0 - T EY1 - SH AH0 N\nIRRITATIONS  IH2 - R IH0 - T EY1 - SH AH0 N Z\nIRV  ER1 V\nIRVE  ER1 V\nIRVE(2)  AY1 - AA1 R - V IY1 - IY1\nIRVETTE  ER0 - V EH1 T\nIRVIN  ER1 - V IH0 N\nIRVINE  ER1 - V AY0 N\nIRVING  ER1 - V IH0 NG\nIRVING'S  ER1 - V IH0 NG Z\nIRWIN  ER1 - W AH0 N\nIRWIN(2)  ER1 - W IH0 N\nIRWINDALE  ER1 - W IH0 N - D EY2 L\nIS  IH1 Z\nIS(2)  IH0 Z\nISA  IY1 - S AH0\nISAAC  AY1 - Z AH0 K\nISAAC(2)  AY1 - Z IH0 K\nISAACKS  IH1 - S AA0 K S\nISAACS  AY1 - Z IH0 K S\nISAACSON  AY1 - Z IH0 K - S AH0 N\nISAAK  IH0 - S AA1 K\nISAAK(2)  AY1 - Z AE0 K\nISABEL  IH1 - Z AH0 - B EH2 L\nISABELL  IH0 - S AA0 - B EH1 L\nISABELLA  IH2 - Z AH0 - B EH1 - L AH0\nISABELLE  IH1 - Z AH0 - B EH2 L\nISACKSON  IH1 - S AH0 K - S AH0 N\nISADORE  IH0 - S AA0 - D AO1 - R EY0\nISADORE(2)  IH1 - S AA0 - D AO0 R\nISAIAH  AY2 - Z EY1 - AH0\nISAKSEN  IH1 - S AH0 K - S AH0 N\nISAKSON  IH1 - S AH0 K - S AH0 N\nISALY  AY1 Z - L IY0\nISALY(2)  AY1 S - L IY0\nISAUTIER  AY0 - S AO1 - T Y ER0\nISAY  AY1 - S EY2\nISBELL  IH1 S - B EH0 L\nISBILL  IH0 S - B IH1 L\nISCARIOT  IH0 - S K EH1 - R IY0 - AH0 T\nISCH  IH1 SH\nISCHEMIA  IH0 - S K EH1 - M IY0 - AH0\nISCHO  IY1 - SH OW0\nISE  AY1 Z\nISELIN  IH1 - S IH0 - L IH0 N\nISEMAN  AY1 S - M AH0 N\nISEMINGER  IH1 - S IY0 - M IH0 - NG ER0\nISENBERG  AY1 - Z AH0 N - B ER0 G\nISENHART  AY1 - Z AH0 N - HH AA2 R T\nISENHOUR  IH1 - S IH0 - N AW0 R\nISENHOWER  IH1 - S IH0 N - HH OW0 - ER0\nISENSEE  AY1 - Z AH0 N - S IY2\nISER  AY1 - Z ER0\nISETAN  IH1 - S IH0 - T AH0 N\nISGRIGG  IH0 S - G R IH1 G\nISGRO  IY1 S - G R OW0\nISGUR  IH1 S - G ER0\nISH  IH1 SH\nISHAM  IH1 - SH AH0 M\nISHAQ  IH1 - SH AE0 K\nISHEE  IH1 - SH IY0\nISHERWOOD  IH1 - SH ER0 - W UH2 D\nISHI  IH1 - SH IY0\nISHI'S  IH1 - SH IY0 Z\nISHIBASHI  IH0 - SH IY0 - B AA1 - SH IY0\nISHIDA  IH0 - SH IY1 - D AH0\nISHIHARA  IH0 - SH IY0 - HH AA1 - R AH0\nISHII  IH0 - SH IY1 - IY0\nISHIKAWA  IH0 - SH IY0 - K AA1 - W AH0\nISHIKAWAJIMA  IY2 - SH IH0 - K AA2 - W AH0 - JH IY1 - M AH0\nISHIKURA  IH2 - SH IH0 - K UH1 - R AH0\nISHIMURA  IY2 - SH IH0 - M UW1 - R AH0\nISHLER  IH1 SH - L ER0\nISHMAEL  IH1 SH - M IY0 L\nISHMAEL(2)  IH1 SH - M EY0 L\nISHMAIL  IH1 SH - M EY0 L\nISHMAN  IH1 SH - M AH0 N\nISHTAR  IH1 SH - T AA0 R\nISIDORE  IH1 - Z IH0 - D AO2 R\nISIKOFF  IH1 - Z AH0 K - AO0 F\nISIS  AY1 - S AH0 S\nISKRA  IH1 - S K R AH0\nISLAM  IH0 - S L AA1 M\nISLAM'S  IH0 - S L AA1 M Z\nISLAM'S(2)  IH1 - S L AA2 M Z\nISLAM(2)  IH1 Z - L AH0 M\nISLAM(3)  IH1 - S L AA2 M\nISLAMABAD  IH0 - S L AE1 - M AH0 - B AE0 D\nISLAMABAD'S  IH0 - S L AE1 - M AH0 - B AE0 D Z\nISLAMI  IH0 Z - L AA1 - M IY0\nISLAMIC  IH0 Z - L AA1 - M IH0 K\nISLAMIST  IH1 S - L AH0 - M IH0 S T\nISLAMISTS  IH1 S - L AH0 - M IH0 S T S\nISLAMISTS(2)  IH1 - S L AH0 - M IH0 S S\nISLAMISTS(3)  IH1 - S L AH0 - M IH0 S\nISLAMIYA  IH0 - S L AA1 - M IY0 - AH0\nISLAMIZATION  IH2 Z - L AA0 - M AH0 - Z EY1 - SH AH0 N\nISLAND  AY1 - L AH0 N D\nISLAND'S  AY1 - L AH0 N D Z\nISLANDER  AY1 - L AH0 N - D ER0\nISLANDERS  AY1 - L AH0 N - D ER0 Z\nISLANDIA  AY2 - L AE1 N - D IY0 - AH0\nISLANDS  AY1 - L AH0 N D Z\nISLANDS'  AY1 S - L AH0 N D Z\nISLAS  AY1 - L AH0 Z\nISLE  AY1 L\nISLEEN  AY1 - L IY0 N\nISLER  AY1 - L ER0\nISLES  AY1 L Z\nISLETS  AY1 - L AH0 T S\nISLEY  AY1 - L IY0\nISLIP  AY1 S - L IH0 P\nISM  IH1 - Z AH0 M\nISMAEL  IH1 S - M EY0 L\nISMAIL  IH1 S - M EY0 L\nISMS  IH1 - Z AH0 M Z\nISN'T  IH1 - Z AH0 N T\nISN'T(2)  IH0 - Z AH0 N T\nISN'T(3)  IH1 - Z AH0 N\nISNER  IH1 S - N ER0\nISOCYANATE  AY2 - S AH0 - S AY1 - AH0 - N EY2 T\nISODA  IY2 - S OW1 - D AH0\nISOELECTRONIC  AY2 - S OW0 - IH0 - L EH0 K - T R AA1 - N IH0 K\nISOELECTRONIC(2)  AY2 - S OW0 - IY0 - L EH0 K - T R AA1 - N IH0 K\nISOETEC  AY1 - S OW0 - T EH2 K\nISOLA  AY0 - S AA1 - L AH0\nISOLATE  AY1 - S AH0 - L EY2 T\nISOLATED  AY1 - S AH0 - L EY2 - T AH0 D\nISOLATED(2)  AY1 - S AH0 - L EY2 - T IH0 D\nISOLATES  AY1 - S AH0 - L EY2 T S\nISOLATING  AY1 - S AH0 - L EY2 - T IH0 NG\nISOLATION  AY2 - S AH0 - L EY1 - SH AH0 N\nISOLATIONISM  AY2 - S AH0 - L EY1 - SH AH0 N - IH2 - Z AH0 M\nISOLATIONIST  AY2 - S AH0 - L EY1 - SH AH0 N - AH0 S T\nISOLATIONISTS  AY2 - S AH0 - L EY1 - SH AH0 N - IH0 S T S\nISOLATIONISTS(2)  AY2 - S AH0 - L EY1 - SH AH0 N - IH0 S T S\nISOLATIONISTS(3)  AY2 - S AH0 - L EY1 - SH AH0 N - IH0 S S\nISOLATIONISTS(4)  AY2 - S AH0 - L EY1 - SH AH0 N - IH0 S S\nISOLDE  IH0 - S OW1 L - D AH0\nISOLDE(2)  IH1 - S OW0 L D\nISOM  AY1 - S AH0 M\nISOMEDIX  AY2 - S OW0 - M EH1 - D IH0 K S\nISOMEDIX'S  AY2 - S OW0 - M EH1 - D IH0 K - S IH0 Z\nISOMEDIX'S(2)  AY2 - S OW0 - M EH1 - D IH0 K S\nISOMER  AY1 - S AH0 - M ER0\nISOMERS  AY1 - S AH0 - M ER0 Z\nISOMORPHISM  AY2 - S AH0 - M AO1 R - F IH0 - Z AH0 M\nISON  IH1 - S AH0 N\nISOPRINOSINE  IH2 - S AH0 - P R IH1 - N AH0 - S IY2 N\nISOSCELES  AY0 - S AO1 - S AH0 - L IY2 Z\nISOTHERMAL  AY2 - S AH0 - TH ER1 - M AH0 L\nISOTONER  IH1 - Z OW0 - T AH2 N - ER0\nISOTONER(2)  AY1 - S OW0 - T OW2 - N ER0\nISOTONIC  AY2 - S AH0 - T AA1 - N IH0 K\nISOTOPE  AY1 - S AH0 - T OW2 P\nISOTOPES  AY1 - S AH0 - T OW2 P S\nISOTOPIC  AY2 - S AH0 - T AA1 - P IH0 K\nISOXICAM  IH0 - S AA1 K - S IH0 - K AH0 M\nISPRA  IH1 S - P R AH0\nISRAEL  IH1 Z - R IY0 - AH0 L\nISRAEL'S  IH1 Z - R EY0 L Z\nISRAEL'S(2)  IH1 Z - R IY0 - AH0 L Z\nISRAEL(2)  IH1 Z - R EY0 L\nISRAELI  IH0 Z - R EY1 - L IY0\nISRAELIS  IH0 Z - R EY1 - L IY0 Z\nISRAELIS'  IH0 Z - R EY1 - L IY0 Z\nISRAELITE  IH1 Z - R AH0 - L AY2 T\nISRAELITES  IH1 Z - R AH0 - L AY2 T S\nISRAELOFF  IH0 S - R EY1 L - AO0 F\nISRAELSON  IH1 - S R EH0 L - S AH0 N\nISRAHI  IH2 Z - R AA1 - HH IY0\nISRINGHOUSER  IH1 - S R IH0 NG - HH AW2 - Z ER0\nISSA  IH1 - S AH0\nISSAC  IH1 - S AH0 K\nISSAC(2)  AY1 - Z IH0 K\nISSAM  IH1 - S AH0 M\nISSAR  IY1 - S AA2 R\nISSIE  IH1 - S IY0\nISSING  IH1 - S IH0 NG\nISSUABLE  IH1 - SH UW0 - AH0 - B AH0 L\nISSUANCE  IH1 - SH UW0 - AH0 N S\nISSUANCES  IH1 - SH UW0 - AH0 N - S IH0 Z\nISSUE  IH1 - SH UW0\nISSUE'S  IH1 - SH UW0 Z\nISSUED  IH1 - SH UW0 D\nISSUELESS  IH1 - SH UW0 - L AH0 S\nISSUER  IH1 - SH UW0 - ER0\nISSUER'S  IH1 - SH UW0 - ER0 Z\nISSUERS  IH1 - SH UW0 - ER0 Z\nISSUERS'  IH1 - S UW0 R Z\nISSUES  IH1 - SH UW0 Z\nISSUES'  IH1 - S UW0 Z\nISSUING  IH1 - SH UW0 - IH0 NG\nISSY  IH1 - S IY0\nISTANBUL  IH2 - S T AA0 N - B UW1 L\nISTAT  IH1 - S T AE0 T\nISTEL  IH1 - S T EH0 L\nISTEL'S  IH1 - S T EH0 L Z\nISTHMUS  IH1 S - M AH0 S\nISTITUTO  IH2 - S T IH0 - T UW1 - T OW0\nISTOOK  IH1 - S T UH2 K\nISTRE  IH1 - S T ER0\nISTY  IH1 - S T IY0\nISTY(2)  AY1 - EH1 - S T IY1 - W AY1\nISU  IH1 - S UW2\nISU(2)  AY1 - EH1 - S Y UW1\nISUZU  IH0 - S UW1 - Z UW0\nIT  IH1 T\nIT'D  IH1 - T AH0 D\nIT'LL  IH1 - T AH0 L\nIT'LL(2)  IH1 T L\nIT'S  IH1 T S\nIT'S(2)  IH0 T S\nIT(2)  IH0 T\nIT-WIT  IH1 - T W IH1 T\nITA  AY1 - T AH0\nITA(2)  AY1 - T IY1 - EY1\nITALIA  IY0 - T AE1 - L IY0 - AH0\nITALIA(2)  IH0 - T AE1 - L Y AH0\nITALIAN  IH0 - T AE1 - L Y AH0 N\nITALIANA  IH0 - T AE2 - L IY0 - AE1 - N AH0\nITALIANATE  IH0 - T AE1 - L Y AH0 - N EY2 T\nITALIANO  IH0 - T AA0 - L IY0 - AA1 - N OW0\nITALIANS  IH0 - T AE1 - L Y AH0 N Z\nITALIC  AY0 - T AE1 - L IH0 K\nITALICS  AY0 - T AE1 - L IH0 K S\nITALTEL  IH0 - T AE1 L - T EH2 L\nITALY  IH1 - T AH0 - L IY0\nITALY'S  IH1 - T AH0 - L IY0 Z\nITAMAR  IY1 - T AH0 - M AA2 R\nITAMI  IH0 - T AA1 - M IY0\nITAR  IY1 - T AA2 R\nITASCA  AY0 - T AE1 S - K AH0\nITCH  IH1 CH\nITCHES  IH1 - CH AH0 Z\nITCHES(2)  IH1 - CH IH0 Z\nITCHING  IH1 - CH IH0 NG\nITCHY  IH1 - CH IY0\nITEK  AY1 - T EH2 K\nITEL  AY1 - T EH2 L\nITEM  AY1 - T AH0 M\nITEMIZE  AY1 - T AH0 - M AY2 Z\nITEMIZED  AY1 - T AH0 - M AY2 Z D\nITEMIZER  AY1 - T AH0 - M AY2 - Z ER0\nITEMIZERS  AY1 - T AH0 - M AY2 - Z ER0 Z\nITEMIZING  AY1 - T AH0 - M AY2 - Z IH0 NG\nITEMS  AY1 - T AH0 M Z\nITEN  AY1 - T AH0 N\nITERATIVE  IH1 - T ER0 - EY2 - T IH0 V\nITHACA  IH1 - TH AH0 - K AH0\nITINERANT  AY0 - T IH1 - N ER0 - AH0 N T\nITINERARIES  AY0 - T IH1 - N ER0 - EH2 - R IY0 Z\nITINERARY  AY0 - T IH1 - N ER0 - EH2 - R IY0\nITKIN  IH0 T - K IH1 N\nITO  IY1 - T OW0\nITO'S  IY1 - T OW0 Z\nITO'S(2)  IY1 - T OW2 Z\nITO(2)  IY1 - T OW2\nITOCHU  IY2 - T OW1 - CH UW2\nITOH  IY1 - T OW0\nITS  IH1 T S\nITS(2)  IH0 T S\nITSELF  IH0 T - S EH1 L F\nITSTEE  IH1 T - S T IY0\nITSY  IH1 T - S IY0\nITSY-BITSY  IH2 T - S IY0 - B IH1 T - S IY0\nITTNER  IH1 T - N ER0\nITTY  IH1 - T IY0\nITTY-BITTY  IH2 - T IY0 - B IH1 - T IY0\nITZHAK  IH1 T - S AA0 K\nITZHAK(2)  IH1 T - S AE0 K\nITZHAK(3)  IH1 T S - HH AE0 K\nITZKOWITZ  IH1 T - S K AH0 - W IH0 T S\nIULIANO  IY0 - UW0 - L IY0 - AA1 - N OW0\nIULIANO(2)  Y UW0 - L IY0 - AA1 - N OW0\nIVA  IY1 - V AH0\nIVACO  AY1 - V AH0 - K OW2\nIVAN  AY1 - V AH0 N\nIVANA  IH0 - V AA1 - N AH0\nIVANCIC  IH0 - V AE1 NG - K IH0 K\nIVANE  IH1 - V AH0 N\nIVANHOE  AY1 - V AH0 N - HH OW2\nIVANKO  IY0 - V AA1 N - K OW0\nIVANNA  IH0 - V AA1 - N AH0\nIVANOFF  IH1 - V AH0 N - AO0 F\nIVANOV  IH1 - V AH0 - N AA0 V\nIVANYENKO  AY2 - V AH0 - N Y EH1 N - K OW0\nIVAR  IH1 - V ER0\nIVATANS  AY1 - V AH0 - T AH0 N Z\nIVAX  AY1 - V AE0 K S\nIVEN  AY1 - V AH0 N\nIVENS  AY1 - V AH0 N Z\nIVER  AY1 - V ER0\nIVERN  AY1 - V ER0 N\nIVERS  AY1 - V ER0 Z\nIVERSEN  IH0 - V ER1 - S AH0 N\nIVERSON  AY1 - V ER0 - S AH0 N\nIVERY  AY1 - V ER0 - IY0\nIVES  AY1 V Z\nIVESTER  AY2 - V EH1 - S T ER0\nIVEY  AY1 - V IY0\nIVIE  AY1 - V IY0\nIVINS  IH1 - V IH0 N Z\nIVO  AY1 - V IY1 - OW1\nIVO(2)  AY1 - V OW2\nIVOR  AY1 - V ER0\nIVORIAN  AY0 - V AO1 - R IY0 - AH0 N\nIVORIANS  AY0 - V AO1 - R IY0 - AH0 N Z\nIVORY  AY1 - V ER0 - IY0\nIVORY(2)  AY1 - V R IY0\nIVY  AY1 - V IY0\nIWAI  AY0 - W AY1\nIWAKI  AY0 - W AA1 - K IY0\nIWAMOTO  IH0 - W AA0 - M OW1 - T OW0\nIWAN  IY1 - W AA0 N\nIWANICKI  IH0 - V AH0 - N IH1 T S - K IY0\nIWANSKI  IH0 - V AE1 N S - K IY0\nIWASAKI  IY2 - W AA0 - S AA1 - K IY0\nIWATA  IH0 - W AA1 - T AH0\nIWATE  AY0 - W EY1 T\nIWEN  IH1 - W AH0 N\nIWERKS  AY1 - W ER2 K S\nIWINSKI  IH0 - V IH1 N - S K IY0\nIWO  AY1 - W OW0\nIWOSAKI  AY2 - W AH0 - S AA1 - K IY0\nIXION  IH0 K - S AY1 - AH0 N\nIYER  AY1 - ER0\nIZAGUIRRE  IH0 - Z AH0 G - W IH1 - R EY0\nIZAGUIRRE(2)  IH1 - Z AH0 G - W AY2 R\nIZANSKY  IH0 - Z AE1 N S - K IY0\nIZANSKY'S  IH0 - Z AE1 N - S K IY0 Z\nIZARD  IH1 - Z ER0 D\nIZATT  IY1 - Z AA0 T\nIZETBEGOVIC  IH2 - Z EH0 T - B EH1 - G OW0 - V IH2 CH\nIZETBEGOVIC'S  IH2 - Z EH0 T - B EH1 - G OW0 - V IH2 - CH IH0 Z\nIZOD  AY1 - Z AA0 D\nIZQUIERDO  IH0 Z - K W IH1 R - D OW0\nIZUMI  IH0 - Z UW1 - M IY0\nIZVESTIA  IH0 Z - V EH1 - S T IY0 - AH0\nIZZARD  IH1 - Z ER0 D\nIZZI  IH1 - Z IY0\nIZZO  IH1 - Z OW0\nIZZY  IH1 - Z IY0\nIZZY'S  IH1 - Z IY0 Z\nJ  JH EY1\nJ'S  JH EY1 Z\nJ.  JH EY1\nJ.'S  JH EY1 Z\nJA  Y AA1\nJAAN  Y AA1 N\nJAAN(2)  JH AE1 N\nJAB  JH AE1 B\nJABAH  JH AE1 - B AH0\nJABALIYA  JH AA1 - B AH0 - L IY2 - AH0\nJABAR  JH AH0 - B AA1 R\nJABAR'S  JH AH0 - B AA1 R Z\nJABBAR  JH AH0 - B AA1 R\nJABBED  JH AE1 B D\nJABBING  JH AE1 - B IH0 NG\nJABBOUR  ZH AH0 - B UH1 R\nJABER  JH EY1 - B ER0\nJABLON  JH AE1 - B L AH0 N\nJABLONOWSKI  Y AH0 - B L AH0 - N AO1 F S - K IY0\nJABLONSKI  Y AH0 - B L AA1 N - S K IY0\nJABLONSKY  Y AH0 - B L AA1 N - S K IY0\nJABRIL  JH AH0 - B R IY1 L\nJABRIL(2)  JH AH0 - B R IH1 L\nJABS  JH AE1 B Z\nJAC  JH AE1 K\nJACEK  JH AA1 - CH EH2 K\nJACHIM  JH AE1 - K IH0 M\nJACINDA  JH AH0 - S IH1 N - D AH0\nJACINTA  JH AH0 - S IH1 N - T AH0\nJACINTH  JH AE1 - S IH0 N TH\nJACINTHA  JH AH0 - S IH1 N - TH AH0\nJACINTHE  JH AE1 - S IH0 N TH\nJACINTO  JH AH0 - S IH1 N - T OW0\nJACK  JH AE1 K\nJACK'S  JH AE1 K S\nJACKA  JH AE1 - K AH0\nJACKAL  JH AE1 - K AH0 L\nJACKASS  JH AE1 - K AE2 S\nJACKED  JH AE1 K T\nJACKEL  JH AE1 - K AH0 L\nJACKELYN  JH AE1 - K IH0 - L IH0 N\nJACKET  JH AE1 - K AH0 T\nJACKET(2)  JH AE1 - K IH0 T\nJACKETED  JH AE1 - K AH0 - T IH0 D\nJACKETS  JH AE1 - K IH0 T S\nJACKETT  JH AE1 - K IH0 T\nJACKHAMMER  JH AE1 K - HH AE2 - M ER0\nJACKHAMMERS  JH AE1 K - HH AE2 - M ER0 Z\nJACKI  JH AE1 - K IY0\nJACKI'S  JH AE1 - K IY0 Z\nJACKIE  JH AE1 - K IY0\nJACKIE'S  JH AE1 - K IY0 Z\nJACKING  JH AE1 - K IH0 NG\nJACKLEY  JH AE1 K - L IY0\nJACKLIN  JH AE1 K - L IH0 N\nJACKMAN  JH AE1 K - M AH0 N\nJACKO  JH AE1 - K OW0\nJACKOBY  JH AE1 - K AH0 - B IY0\nJACKOVICH  JH AE1 - K AH0 - V IH0 CH\nJACKOWSKI  Y AH0 - S K AO1 F S - K IY0\nJACKPOT  JH AE1 K - P AA2 T\nJACKPOTS  JH AE1 K - P AA2 T S\nJACKRABBIT  JH AE1 K - R AE2 - B AH0 T\nJACKS  JH AE1 K S\nJACKSDEIT  JH AE1 K - S D IY0 - AH0 T\nJACKSON  JH AE1 K - S AH0 N\nJACKSON'S  JH AE1 K - S AH0 N Z\nJACKSONIAN  JH AE0 K - S OW1 - N IY0 - AH0 N\nJACKSONIANS  JH AE0 K - S OW1 - N IY0 - AH0 N Z\nJACKSONS  JH AE1 K - S AH0 N Z\nJACKSONVILLE  JH AE1 K - S AH0 N - V IH2 L\nJACKSONVILLE'S  JH AE1 K - S AH0 N - V IH2 L Z\nJACKY  JH AE1 - K IY0\nJACKY'S  JH AE1 - K IY0 Z\nJACLYN  JH AE1 K - L IH0 N\nJACO  Y AA1 - K OW0\nJACOB  JH EY1 - K AH0 B\nJACOB'S  JH EY1 - K AH0 B Z\nJACOBA  Y AA0 - K OW1 - B AH0\nJACOBE  JH AE1 - K AH0 B\nJACOBEAN  JH AE2 - K AH0 - B IY1 - AH0 N\nJACOBER  JH EY1 - K AH0 - B ER0\nJACOBI  Y AA0 - K OW1 - B IY0\nJACOBIN  JH AE1 - K AH0 - B AH0 N\nJACOBIN(2)  JH AE1 - K AH0 - B IH0 N\nJACOBINA  Y AH0 - K AH0 - B AY1 - N AH0\nJACOBINE  JH AE1 - K AH0 - B AY2 N\nJACOBITE  JH AE1 - K AH0 - B AY2 T\nJACOBITES  JH AE1 - K AH0 - B AY2 T S\nJACOBO  Y AA0 - K OW1 - B OW0\nJACOBOSKI  JH AE2 K - OW0 - B AO1 S - K IY0\nJACOBOWITZ  Y AH0 - K AA1 - B AH0 - W IH0 T S\nJACOBS  JH EY1 - K AH0 B Z\nJACOBS'  JH EY1 - K AH2 B Z\nJACOBS'S  JH EY1 - K AH0 B - Z IH0 Z\nJACOBSEN  JH EY1 - K AH0 B - S AH0 N\nJACOBSON  JH EY1 - K AH0 B - S AH0 N\nJACOBSON'S  JH EY1 - K AH0 B - S AH0 N Z\nJACOBUS  JH AH0 - K OW1 - B AH0 S\nJACOBY  JH AH0 - K OW1 - B IY0\nJACOME  JH AH0 - K OW1 M\nJACOR  JH EY1 - K AO2 R\nJACOT  JH AE1 - K AH0 T\nJACOX  JH AE1 - K AA0 K S\nJACQUE  ZH EY1 K\nJACQUELINE  JH AE1 - K W AH0 - L IH0 N\nJACQUELINE(2)  JH AE1 K - L IH0 N\nJACQUELINE(3)  JH AE1 - K AH0 - L IH0 N\nJACQUELYN  JH AE1 K - W IH0 - L IH0 N\nJACQUES  ZH AA1 K\nJACQUET  Y AA1 - K EY0 T\nJACQUETTA  JH AA0 - K EH1 - T AH0\nJACQUEZ  Y AA0 - K W EH1 Z\nJACQUIE  JH AE1 K - W IY0\nJACQUIN  JH AE1 K - W IH0 N\nJACQUOT  ZH AH0 - K W OW1\nJACUZZI  JH AH0 - K Y UW1 - Z IY0\nJADE  JH EY1 D\nJADED  JH EY1 - D AH0 D\nJADED(2)  JH EY1 - D IH0 D\nJADEITE  JH EY1 - D AY2 T\nJADES  JH EY1 D Z\nJADWIN  JH AE1 D - W IH0 N\nJAE  JH EY1\nJAE'S  JH EY1 Z\nJAECKEL  Y EH1 - K AH0 L\nJAEGER  Y EH1 - G ER0\nJAEGERS  Y EH1 - G ER0 Z\nJAEKEL  Y EH1 - K AH0 L\nJAENICKE  Y EH1 - N IH0 K\nJAFCO  JH AE1 F - K OW0\nJAFCO'S  JH AE1 F - K OW0 Z\nJAFFA  JH AE1 - F AH0\nJAFFAR  JH AH0 - F AA1 R\nJAFFE  JH AE1 - F IY0\nJAFFEE  JH AE1 - F IY0\nJAFFNA  JH AE1 F - N AH0\nJAFFRAY  JH AE1 - F R EY0\nJAFFRAY'S  JH AE1 - F R EY2 Z\nJAFFREY  JH AE1 - F R IY0\nJAGDISH  JH AE1 G - D IH2 SH\nJAGER  JH EY1 - G ER0\nJAGGED  JH AE1 G D\nJAGGER  JH AE1 - G ER0\nJAGGER'S  JH AE1 - G ER0 Z\nJAGGERS  JH AE1 - G ER0 Z\nJAGIELLO  JH AA0 - JH EH1 - L OW0\nJAGIELSKI  Y AH0 - G IY1 L S - K IY0\nJAGLOM  JH AE1 - G L AH0 M\nJAGLOM'S  JH AE1 - G L AH0 M Z\nJAGO  Y AA1 - G OW0\nJAGODA  JH AA0 - G OW1 - D AH0\nJAGODZINSKI  Y AH0 - G AH0 - JH IH1 N - S K IY0\nJAGOW  Y AA1 - G OW0\nJAGS  JH AE1 G Z\nJAGT  JH AE1 T\nJAGUAR  JH AE1 - G W AA2 R\nJAGUAR'S  JH AE1 - G W AA2 R Z\nJAGUARS  JH AE1 - G W AA2 R Z\nJAHN  JH AE1 N\nJAHNER  JH AA1 - N ER0\nJAHNKE  JH AE1 NG K\nJAHNS  JH AA1 N Z\nJAHR  JH AA1 R\nJAI  JH AY1\nJAI(2)  HH AY1\nJAIL  JH EY1 L\nJAIL'S  JH EY1 L Z\nJAILED  JH EY1 L D\nJAILER  JH EY1 - L ER0\nJAILERS  JH EY1 - L ER0 Z\nJAILHOUSE  JH EY1 L - HH AW2 S\nJAILING  JH EY1 - L IH0 NG\nJAILS  JH EY1 L Z\nJAIME  HH AY1 - M IY0\nJAIME'S  HH AY1 - M IY0 Z\nJAIMES  HH AY1 - M IY0 Z\nJAIMIE  JH EY1 - M IY0\nJAIMIE(2)  HH AY1 - M IY0\nJAIN  JH AY1 N\nJAIN(2)  JH EY1 N\nJAINISM  JH EY1 - N IH0 - Z AH0 M\nJAKAB  JH AE1 - K AH0 B\nJAKARTA  JH AH0 - K AA1 R - T AH0\nJAKARTA'S  JH AH0 - K AA1 R - T AH0 Z\nJAKE  JH EY1 K\nJAKE'S  JH EY1 K S\nJAKEL  JH AE1 - K AH0 L\nJAKES  JH EY1 K S\nJAKEWAY  JH EY1 K - W EY2\nJAKIE  JH AE1 - K IY0\nJAKOB  JH AE1 - K AH0 B\nJAKOBSEN  JH AE1 - K AH0 B - S AH0 N\nJAKUBEK  Y AH0 - K UW1 - B EH0 K\nJAKUBIAK  Y AH0 - K AH1 - B IY0 - AE0 K\nJAKUBIK  Y AH0 - K UW1 - B IH0 K\nJAKUBOWICZ  Y AH0 - K AH1 - B AH0 - V IH0 CH\nJAKUBOWSKI  Y AH0 - K AH0 - B AO1 F S - K IY0\nJALALABAD  JH AH0 - L AE1 - L AH0 - B AE0 D\nJALAPENO  HH AE2 - L AH0 - P IY1 - N Y OW0\nJALAPENO(2)  JH AE2 - L AH0 - P IY1 - N OW0\nJALBERT  JH AE1 L - B ER0 T\nJALOPY  JH AH0 - L AA1 - P IY0\nJAM  JH AE1 M\nJAM'S  JH AE1 M Z\nJAMA  JH AE1 - M AH0\nJAMAICA  JH AH0 - M EY1 - K AH0\nJAMAICA'S  JH AH0 - M EY1 - K AH0 Z\nJAMAICAN  JH AH0 - M EY1 - K AH0 N\nJAMAICANS  JH AH0 - M EY1 - K AH0 N Z\nJAMAIL  JH AH0 - M EY1 L\nJAMAL  JH AH0 - M AA1 L\nJAMAL'S  JH AH0 - M AA1 L Z\nJAMAR  Y AA0 - M AA1 R\nJAMB  JH AE1 M\nJAMBOR  Y AA0 M - B AO1 R\nJAMERSON  JH AE1 - M ER0 - S AH0 N\nJAMERSON'S  JH AE1 - M ER0 - S AH0 N Z\nJAMES  JH EY1 M Z\nJAMES'  JH EY1 M Z\nJAMES'S  JH EY1 M - Z IH0 Z\nJAMESON  JH EY1 M - S AH0 N\nJAMESTOWN  JH EY1 M Z - T AW2 N\nJAMESWAY  JH EY1 M Z - W EY2\nJAMI  JH EY1 - M IY0\nJAMIE  JH EY1 - M IY0\nJAMIE'S  JH EY1 - M IY0 Z\nJAMIESON  JH EY1 - M IH0 - S AH0 N\nJAMILA  JH AH0 - M IH1 - L AH0\nJAMISON  JH EY1 - M IH0 - S AH0 N\nJAMMED  JH AE1 M D\nJAMMER  JH AE1 - M ER0\nJAMMERS  JH AE1 - M ER0 Z\nJAMMING  JH AE1 - M IH0 NG\nJAMMU  JH AH0 - M UW1\nJAMMU'S  JH AH0 - M UW1 Z\nJAMROG  JH AE1 M - R AH0 G\nJAMROZ  Y AA1 M - R OW0 Z\nJAMS  JH AE1 M Z\nJAMSHEDPUR  JH AE2 M - SH EH1 D - P ER0\nJAMU  JH AE0 - M UW1\nJAN  JH AE1 N\nJAN'S  JH AE1 N Z\nJAN.  JH AE1 N\nJAN.(2)  JH AE1 - N Y UW0 - EH0 - R IY0\nJANA  JH AE1 - N AH0\nJANACEK  Y AE1 - N AH0 - CH EH0 K\nJANACHOWSKI  JH AE2 - N AH0 - CH AW1 S - K IY0\nJANAK  Y AE1 - N AH0 K\nJANARDHAN  JH AH0 - N AA1 R - D AH0 N\nJANAS  JH AE1 - N AH0 Z\nJANATA  JH AH0 - N AA1 - T AH0\nJANCA  JH AE1 NG - K AH0\nJANCO  JH AE1 NG - K OW0\nJANCZAK  Y AE1 N - CH AE0 K\nJANDA  JH AE1 N - D AH0\nJANDREAU  ZH AH0 N - D R OW1\nJANDT  JH AE1 N T\nJANE  JH EY1 N\nJANE'S  JH EY1 N Z\nJANEANE  JH EY1 - N AE2 N\nJANECEK  Y AE1 - N IH0 - CH EH0 K\nJANECZKO  Y AH0 - N EH1 CH - K OW0\nJANEIRO  JH AH0 - N EH1 - R OW2\nJANEIRO(2)  ZH AH0 - N EH1 - R OW2\nJANEK  Y AE1 - N EH0 K\nJANEL  JH AE1 - N AH0 L\nJANELLA  JH AH0 - N EH1 - L AH0\nJANELLE  ZH AH0 - N EH1 L\nJANES  JH EY1 N Z\nJANESVILLE  JH EY1 N Z - V IH2 L\nJANET  JH AE1 - N AH0 T\nJANET'S  JH AE1 - N AH0 T S\nJANET'S(2)  JH AE1 - N IH0 T S\nJANET(2)  JH AE1 - N IH0 T\nJANETTE  JH AH0 - N EH1 T\nJANEWAY  JH EY1 N - W EY2\nJANEY  JH EY1 - N IY0\nJANG  JH AE1 NG\nJANGLE  JH AE1 NG - G AH0 L\nJANGLED  JH AE1 NG - G AH0 L D\nJANI  Y AA1 - N IY0\nJANIAK  Y AE1 - N IY0 - AE0 K\nJANICE  JH AE1 - N AH0 S\nJANICE(2)  JH AE1 - N IH0 S\nJANICEK  Y AE1 - N IH0 - CH EH0 K\nJANICK  JH AE1 - N IH0 K\nJANICKE  JH AE1 - N IH0 K\nJANICKI  JH AH0 - N IH1 - K IY0\nJANIE  JH EY1 - N IY0\nJANIERO  JH AH0 - N EH1 - R OW0\nJANIERO(2)  JH AH0 - N Y EH1 - R OW0\nJANIGA  JH AE1 - N IH0 - G AH0\nJANII  JH AH0 - N IY1\nJANIK  Y AE1 - N IH0 K\nJANIKOWSKI  Y AH0 - N IH0 - K AO1 F S - K IY0\nJANINA  JH AH0 - N IY1 - N AH0\nJANINE  JH AH0 - N IY1 N\nJANIS  JH AE1 - N IH0 S\nJANISCH  JH AE1 - N IH0 SH\nJANISH  Y AE1 - N IH0 SH\nJANISZEWSKI  Y AH0 - N IH0 - SH EH1 F S - K IY0\nJANITOR  JH AE1 - N AH0 - T ER0\nJANITORIAL  JH AE2 - N IH0 - T AO1 - R IY0 - AH0 L\nJANITORS  JH AE1 - N AH0 - T ER0 Z\nJANK  JH AE1 NG K\nJANKA  JH AE1 NG - K AH0\nJANKE  JH AE1 NG K\nJANKIEWICZ  Y AE1 N - K AH0 - V IH0 CH\nJANKLOW  JH AE1 NG - K L OW0\nJANKO  JH AE1 NG - K OW0\nJANKOVIC  JH AE1 NG - K AH0 - V IH0 K\nJANKOVICH  JH AE1 NG - K AH0 - V IH0 CH\nJANKOWIAK  Y AH0 NG - K AW1 - IY0 - AE0 K\nJANKOWSKI  Y AH0 NG - K AO1 F S - K IY0\nJANN  JH AE1 N\nJANNA  JH AE1 - N AH0\nJANNEY  JH AE1 - N IY0\nJANNING  JH AE1 - N IH0 NG\nJANNOCK  JH AE1 - N AH0 K\nJANNOTTA  JH AH0 - N AA1 - T AH0\nJANOFF  JH AE1 - N AO0 F\nJANOFSKY  JH AH0 - N AO1 F S - K IY0\nJANOS  JH AE1 - N OW0 S\nJANOSIK  Y AH0 - N OW1 - S IH0 K\nJANOSKI  Y AH0 - N AW1 S - K IY0\nJANOSKO  Y AH0 - N OW1 - S K OW0\nJANOSKY  Y AH0 - N OW1 S - K IY0\nJANOTA  Y AH0 - N OW1 - T AH0\nJANOUSEK  Y AH0 - N UW1 - S EH0 K\nJANOVSKY  JH AH0 - N AA1 V - S K IY0\nJANOW  Y AE1 - N OW0\nJANOWIAK  Y AH0 - N AW1 - IY0 - AE0 K\nJANOWICZ  Y AE1 - N AH0 - V IH0 CH\nJANOWITZ  Y AE1 - N AH0 - W IH0 T S\nJANOWSKI  Y AH0 - N AO1 F S - K IY0\nJANS  JH AE1 N Z\nJANSA  JH AE1 N - S AH0\nJANSEN  JH AE1 N - S AH0 N\nJANSENISM  JH AE1 N - S IH0 - N IH2 - Z AH0 M\nJANSENIST  JH AE1 N - S AH0 - N AH0 S T\nJANSENISTS  JH AE1 N - S AH0 - N AH0 S T S\nJANSENISTS(2)  JH AE1 N - S AH0 - N AH0 S S\nJANSENISTS(3)  JH AE1 N - S AH0 - N AH0 S\nJANSKY  Y AE1 N S - K IY0\nJANSMA  Y AE1 N S - M AH0\nJANSON  JH AE1 N - S AH0 N\nJANSSEN  JH AE1 N - S AH0 N\nJANSSENS  JH AE1 N - S AH0 N Z\nJANSSON  JH AE1 N - S AH0 N\nJANTHINA  Y AA0 N - TH IY1 - N AH0\nJANTZ  JH AE1 N T S\nJANTZEN  JH AE1 N T - Z AH0 N\nJANUARY  JH AE1 - N Y UW0 - EH2 - R IY0\nJANUARY'S  JH AE1 - N Y UW0 - EH2 - R IY0 Z\nJANUS  JH EY1 - N AH0 S\nJANUSZ  Y AA1 - N UH0 SH\nJANUSZEWSKI  Y AH0 - N AH0 - SH EH1 F S - K IY0\nJANVIER  JH AE1 N - V IY0 - ER0\nJANVRIN  JH AE1 N - V R IH0 N\nJANZ  JH AE1 N Z\nJANZEN  JH AE1 N - Z AH0 N\nJAP  JH AE1 P\nJAPAN  JH AH0 - P AE1 N\nJAPAN'S  JH AH0 - P AE1 N Z\nJAPANESE  JH AE2 - P AH0 - N IY1 Z\nJAPANS  JH AH0 - P AE1 N Z\nJAPONICA  JH AH0 - P AA1 - N AH0 - K AH0\nJAPONICA(2)  JH AH0 - P AA1 - N IH0 - K AH0\nJAPS  JH AE1 P S\nJAQUA  Y AE1 - K W AH0\nJAQUAY  ZH AH0 - K EY1\nJAQUES  JH AE1 K S\nJAQUESS  Y AA1 - K W IH0 S\nJAQUEZ  Y AA0 - K W EH1 Z\nJAQUISH  JH AE1 K - W IH0 SH\nJAQUITH  JH AE1 K - W IH0 TH\nJAR  JH AA1 R\nJARA  JH AA1 - R AH0\nJARAMILLO  JH AE2 - R AH0 - M IH1 - L OW0\nJARBOE  JH AA1 R - B OW2\nJARCHOW  JH AA1 R - CH AW2\nJARDIN  JH AA1 R - D IH0 N\nJARDINE  JH AA1 R - D AY2 N\nJARDINE'S  JH AA1 R - D AY2 N Z\nJARECKI  Y ER0 - EH1 T S - K IY0\nJARED  JH EH1 - R IH0 D\nJAREMA  Y ER0 - IY1 - M AH0\nJARES  ZH EH1 R Z\nJARGON  JH AA1 R - G AH0 N\nJARISLOWSKY  JH EH2 - R IH0 S - L AW1 S - K IY0\nJARMAN  JH AA1 R - M AH0 N\nJARMON  Y AA0 R - M AO1 N\nJARNAGIN  JH AA1 R - N AH0 - JH IH0 N\nJARNIGAN  JH AA1 R - N IH0 - G AE0 N\nJAROS  Y AA1 - R OW0 Z\nJAROSZ  Y AA1 - R AH0 SH\nJAROSZEWSKI  Y ER0 - AH0 - SH EH1 F S - K IY0\nJAROSZYNSKI  JH EH2 - R AH0 - Z IH1 N - S K IY0\nJARRARD  ZH ER0 - AA1 R D\nJARRATT  JH AE1 - R AH0 T\nJARREAU  ZH ER0 - OW1\nJARRED  JH AA1 R D\nJARRELL  Y AA0 - R EY1 L\nJARRELLS  JH AE1 - R AH0 L Z\nJARRETT  JH EH1 - R AH0 T\nJARRIEL  ZH ER0 - IY1 L\nJARRIEL'S  ZH ER0 - IY1 L Z\nJARRING  JH AA1 - R IH0 NG\nJARRYD  JH AE1 - R IH0 D\nJARS  JH AA1 R Z\nJARUZELSKI  JH EH2 - R AH0 - Z EH1 L S - K IY0\nJARUZELSKI(2)  Y AE2 - R AH0 - Z EH1 L S - K IY0\nJARVI  JH AA1 R - V IY0\nJARVIA  JH AA1 R - V IY0 - AH0\nJARVIE  JH AA1 R - V IY0\nJARVIK  JH AA1 R - V IH0 K\nJARVINEN  JH AA1 R - V IH0 - N AH0 N\nJARVIS  JH AA1 R - V AH0 S\nJARVIS'S  JH AA1 R - V IH0 - S IH0 Z\nJARVIS(2)  JH AA1 R - V IH0 S\nJARYL  JH AE1 - R AH0 L\nJARZOMBEK  Y ER0 - Z AA1 M - B EH0 K\nJAS  JH EY1 M Z\nJASEK  Y AA1 - S EH0 K\nJASINOWSKI  JH AE2 S - IH0 - N AW1 S - K IY0\nJASINSKI  Y AH0 - S IH1 N - S K IY0\nJASKIEWICZ  Y AA1 - S K AH0 - V IH0 CH\nJASKO  Y AA1 - S K OW0\nJASKOLSKI  Y AH0 - S K OW1 L - S K IY0\nJASKOT  Y AA1 - S K AH0 T\nJASKOWIAK  Y AH0 - S K AW1 - IY0 - AE0 K\nJASKULSKI  Y AH0 - S K AH1 L - S K IY0\nJASMER  JH AE1 - S AH0 - M ER0\nJASMIN  JH AE1 Z - M IH0 N\nJASMINA  Y AH0 S - M AY1 - N AH0\nJASMINE  JH AE1 Z - M AH0 N\nJASMINE(2)  JH AE1 Z - M IH0 N\nJASO  Y AA1 - S OW0\nJASON  JH EY1 - S AH0 N\nJASON'S  JH EY1 - S AH0 N Z\nJASPAL  JH AE1 S - P AA0 L\nJASPER  JH AE1 S - P ER0\nJASPER'S  JH AE1 S - P ER0 Z\nJASPERS  JH AE1 S - P ER0 Z\nJASPERSON  JH AE1 S - P ER0 - S AH0 N\nJASS  JH AE1 S\nJASSO  JH AE1 - S OW0\nJASTER  JH AE1 - S T ER0\nJAUCH  JH AO1 CH\nJAUDON  Y AW0 - D AO1 N\nJAUNDICE  JH AO1 N - D AH0 S\nJAUNDICED  JH AO1 N - D IH0 S T\nJAUNT  JH AO1 N T\nJAUNTILY  JH AO1 N - T AH0 - L IY0\nJAUNTS  JH AO1 N T S\nJAUNTY  JH AO1 N - T IY0\nJAUREGUI  Y AW0 - R EY1 - G W IY0\nJAUREQUI  Y AW0 - R EY1 - K W IY0\nJAVA  JH AA1 - V AH0\nJAVAN  JH AH0 - V AA1 N\nJAVANESE  JH AA2 - V AH0 - N IY1 Z\nJAVELIN  JH AE1 - V AH0 - L AH0 N\nJAVELIN(2)  JH AE1 - V AH0 - L IH0 N\nJAVELIN(3)  JH AE1 V - L AH0 N\nJAVELIN(4)  JH AE1 V - L IH0 N\nJAVETT  JH AE1 - V AH0 T\nJAVIER  HH AA2 - V IY0 - EH1 R\nJAVITS  JH AE1 - V IH0 T S\nJAVORSKY  Y AH0 - V AO1 R S - K IY0\nJAW  JH AO1\nJAWAD  JH AH0 - W AA1 D\nJAWBONE  JH AO1 - B OW2 N\nJAWBONING  JH AO1 - B OW2 - N IH0 NG\nJAWED  JH AO1 D\nJAWOROWSKI  Y AH0 W - ER0 - AO1 F S - K IY0\nJAWORSKI  JH AH0 - W AO1 R S - K IY0\nJAWS  JH AO1 Z\nJAY  JH EY1\nJAY'S  JH EY1 Z\nJAYA  JH AY1 - AH0\nJAYACHANDRA  JH AY2 - AH0 - CH AA1 N - D R AH0\nJAYASHANKAR  JH AY2 - AH0 - SH AA1 NG - K AA0 R\nJAYCEE  JH EY1 - S IY1\nJAYCEES  JH EY1 - S IY1 Z\nJAYCOX  JH EY1 - K AA2 K S\nJAYE  JH EY1\nJAYEWARDENE  JH EY1 - W AO0 R - D IY2 N\nJAYHAWKER  JH EY1 - HH AO0 - K ER0\nJAYME  JH EY1 - M IY0\nJAYMES  JH EY1 - M IY0 Z\nJAYNE  JH EY1 N\nJAYNES  JH EY1 N Z\nJAYROE  JH EY1 - R OW2\nJAYS  JH EY1 Z\nJAYSON  JH EY1 - Z AH0 N\nJAYWALK  JH EY1 - W AO2 K\nJAYWALKING  JH EY1 - W AO2 - K IH0 NG\nJAZMIN  JH AE1 Z - M IH0 N\nJAZZ  JH AE1 Z\nJAZZED  JH AE1 Z D\nJAZZMAN  JH AE1 Z - M AE2 N\nJAZZMEN  JH AE1 Z - M AH0 N\nJAZZY  JH AE1 - Z IY0\nJE  JH IY1\nJE(2)  JH EY1 - IY1\nJEALOUS  JH EH1 - L AH0 S\nJEALOUSIES  JH EH1 - L AH0 - S IY0 Z\nJEALOUSLY  JH EH1 - L AH0 S - L IY0\nJEALOUSY  JH EH1 - L AH0 - S IY0\nJEAN  JH IY1 N\nJEAN'S  JH IY1 N Z\nJEANA  JH IY1 - N AH0\nJEANBAPTISTE  ZH EH1 N - B AH0 P - T IH0 S T\nJEANCOURT  JH IY1 N - K AO2 R T\nJEANCOURT(2)  ZH AA1 NG - K AO1 R T\nJEANE  JH IY1 N\nJEANER  JH IY1 - N ER0\nJEANERETTE  JH IY2 N - R EH1 T\nJEANES  JH IY1 N Z\nJEANETTE  JH AH0 - N EH1 T\nJEANEY  JH IY1 - N IY0\nJEANIE  JH IY1 - N IY0\nJEANINE  JH AH0 - N IY1 N\nJEANLOUIS  ZH AA2 N - L UW0 - IY1 Z\nJEANMICHELE  ZH AA2 N - M AH0 - SH EH1 L\nJEANNE  JH IY1 N\nJEANNETTE  JH AH0 - N EH1 T\nJEANNIE  JH IY1 - N IY0\nJEANNIOT  JH IY1 - N IY0 - AH0 T\nJEANPIERRE  ZH AO0 N - P IY0 - EH1 R\nJEANS  JH IY1 N Z\nJEANSONNE  JH EH1 N - S AH0 N\nJEB  JH EH1 B\nJECH  JH EH1 K\nJED  JH EH1 D\nJEDLICKA  Y IH0 D - L IH1 - S K AH0\nJEE  JH IY1\nJEEP  JH IY1 P\nJEEP'S  JH IY1 P S\nJEEPNEY  JH IY1 P - N IY0\nJEEPS  JH IY1 P S\nJEER  JH IH1 R\nJEERED  JH IH1 R D\nJEERING  JH IY1 - R IH0 NG\nJEERS  JH IY1 R Z\nJEETER  JH IY1 - T ER0\nJEEZ  JH IY1 Z\nJEFCOAT  JH EH1 F - K OW2 T\nJEFF  JH EH1 F\nJEFF'S  JH EH1 F S\nJEFFCOAT  JH EH1 F - K OW0 T\nJEFFE  JH EH1 F\nJEFFE(2)  JH EH1 - F IY0\nJEFFER  JH EH1 - F ER0\nJEFFEREY  JH EH1 - F ER0 - IY0\nJEFFERIES  JH EH1 - F R IY0 Z\nJEFFERIES'  JH EH1 - F ER0 - IY0 Z\nJEFFERIES'S  JH EH1 - F R IY0 - Z IH0 Z\nJEFFERIS  JH EH1 - F ER0 - IH0 S\nJEFFERS  JH EH1 - F ER0 Z\nJEFFERSON  JH EH1 - F ER0 - S AH0 N\nJEFFERSON'S  JH EH1 - F ER0 - S AH0 N Z\nJEFFERSONIAN  JH EH2 - F ER0 - S OW1 - N IY0 - AH0 N\nJEFFERSONIANS  JH EH2 - F ER0 - S OW1 - N IY0 - AH0 N Z\nJEFFERY  JH EH1 - F ER0 - IY0\nJEFFERYS  JH EH1 - F ER0 - IY0 Z\nJEFFEY  JH EH1 - F IY0\nJEFFORDS  JH EH1 - F ER0 D Z\nJEFFRESS  JH EH1 - F R IH0 S\nJEFFREY  JH EH1 - F R IY0\nJEFFREY'S  JH EH1 - F R IY0 Z\nJEFFREYS  JH EH1 - F R IY0 Z\nJEFFRIES  JH EH1 - F R IY0 Z\nJEFFRY  JH EH1 - F R IY0\nJEFFS  JH EH1 F S\nJEFFUS  JH EH1 - F AH0 S\nJEFFY  JH EH1 - F IY0\nJEHLE  JH EH1 - HH AH0 L\nJEHOVAH  JH AH0 - HH OW1 - V AH0\nJEHOVAH'S  JH AH0 - HH OW1 - V AH0 Z\nJEKEL  JH EH1 - K AH0 L\nJEKYLL  JH EH1 - K AH0 L\nJELEN  JH EH1 - L AH0 N\nJELINEK  JH EH1 - L AH0 - N IH0 K\nJELINEK(2)  JH EH1 - L IH0 - N EH0 K\nJELINSKI  Y IH0 - L IH1 N - S K IY0\nJELKS  JH EH1 L K S\nJELL  JH EH1 L\nJELLEY  JH EH1 - L IY0\nJELLIED  JH EH1 - L IY0 D\nJELLIES  JH EH1 - L IY0 Z\nJELLISON  JH EH1 - L IH0 - S AH0 N\nJELLO  JH EH1 - L OW0\nJELLO'S  JH EH1 - L OW0 Z\nJELLY  JH EH1 - L IY0\nJELLY'S  JH EH1 - L IY0 Z\nJELLYFISH  JH EH1 - L IY0 - F IH2 SH\nJELTON  JH EH1 L - T AH0 N\nJEM  JH EH1 M\nJEM'S  JH EH1 M Z\nJEMIE  JH EH1 - M IY0\nJEMIMA  JH EH0 - M IY1 - M AH0\nJEMISON  JH EH1 - M IH0 - S AH0 N\nJEMMIE  JH EH1 - M IY0\nJEMMOTT  JH EH1 - M AH0 T\nJEN  JH EH1 N\nJENA  JH IY1 - N AH0\nJENCKS  JH EH1 NG K S\nJENDRO  JH EH1 N - D R OW0\nJENIN  JH EH1 - N IH0 N\nJENISON  JH EH1 - N IH0 - S AH0 N\nJENKENS  JH EH1 NG - K AH0 N Z\nJENKIN  JH EH1 NG - K IH0 N\nJENKINS  JH EH1 NG - K AH0 N Z\nJENKINS(2)  JH EH1 NG - K IH0 N Z\nJENKINSON  JH EH1 NG - K IH0 N - S AH0 N\nJENKS  JH EH1 NG K S\nJENN  JH EH1 N\nJENN'S  JH EH1 N Z\nJENNE  JH EH1 N\nJENNER  JH EH1 - N ER0\nJENNESS  JH EH1 - N IH0 S\nJENNETT  JH EH1 - N IH0 T\nJENNETTE  ZH IH0 - N EH1 T\nJENNEWEIN  JH EH1 - N UW0 - AY2 N\nJENNEY  JH EH1 - N IY0\nJENNI  JH EH1 - N IY0\nJENNIE  JH EH1 - N IY0\nJENNIFER  JH EH1 - N AH0 - F ER0\nJENNIFER'S  JH EH1 - N AH0 - F ER0 Z\nJENNING  JH EH1 - N IH0 NG\nJENNINGER  JH EH1 - N IH0 - NG ER0\nJENNINGS  JH EH1 - N IH0 NG Z\nJENNISON  JH EH1 - N IH0 - S AH0 N\nJENNY  JH EH1 - N IY0\nJENNY'S  JH EH1 - N IY0 Z\nJENRETTE  JH EH2 N - R EH1 T\nJENRETTE'S  JH EH0 N - R EH1 T S\nJENS  JH EH1 N Z\nJENSEN  JH EH1 N - S AH0 N\nJENSON  JH EH1 N - S AH0 N\nJENSSEN  JH EH1 N - S AH0 N\nJENT  JH EH1 N T\nJENTSCH  JH EH1 N CH\nJENTZ  JH EH1 N T S\nJEONG  JH EH1 NG\nJEOPARDIZE  JH EH1 - P ER0 - D AY2 Z\nJEOPARDIZED  JH EH1 - P ER0 - D AY2 Z D\nJEOPARDIZES  JH EH1 - P ER0 - D AY2 - Z IH0 Z\nJEOPARDIZING  JH EH1 - P ER0 - D AY2 - Z IH0 NG\nJEOPARDY  JH EH1 - P ER0 - D IY0\nJEPPESEN  JH EH1 - P IY0 - Z AH0 N\nJEPPSON  JH EH1 P - S AH0 N\nJEPSEN  JH EH1 P - S AH0 N\nJEPSON  JH EH1 P - S AH0 N\nJEPSON'S  JH EH1 P - S AH0 N Z\nJERABEK  JH EH1 - R AH0 - B IH0 K\nJERALD  JH EH1 - R AH0 L D\nJERBOAS  JH ER0 - B OW1 - AH0 Z\nJERDE  JH ER1 D\nJERDEN  JH ER1 - D AH0 N\nJERE  JH EH1 - R IY0\nJEREB  JH EH1 - R IH0 B\nJEREISSATI  JH EH0 - R EY2 - S AA1 - T IY0\nJEREL  JH EH1 - R AH0 L\nJERELD  JH EH1 - R IH0 L D\nJEREMIA  Y EH0 - R IY1 - M IY0 - AH0\nJEREMIAH  JH EH2 - R AH0 - M AY1 - AH0\nJEREMY  JH EH1 - R AH0 - M IY0\nJEREZ  Y EH0 - R EH1 Z\nJERGENS  JH ER1 - G AH0 N Z\nJERGENSON  JH ER1 - G IH0 N - S AH0 N\nJERGER  JH ER1 - G ER0\nJERI  JH EH1 - R IY0\nJERICHO  JH EH1 - R IH0 - K OW2\nJERK  JH ER1 K\nJERKED  JH ER1 K T\nJERKING  JH ER1 - K IH0 NG\nJERKINS  JH ER1 - K IH0 N Z\nJERKS  JH ER1 K S\nJERKY  JH ER1 - K IY0\nJERMAINE  JH ER0 - M EY1 N\nJERMAN  JH ER1 - M AH0 N\nJERMYN  JH ER1 - M IH0 N\nJERNBERG  JH ER1 N - B ER0 G\nJERNIGAN  JH ER1 - N IH0 - G AE0 N\nJEROBOAM  JH EH2 - R AH0 - B OW1 - AH0 M\nJEROLD  JH EH1 - R OW0 L D\nJEROME  JH ER0 - OW1 M\nJERR  JH ER1\nJERRELL  Y EH0 - R EY1 L\nJERRELL(2)  JH EH1 - R AH0 L\nJERRI  JH EH1 - R IY0\nJERRICO  JH EH1 - R IH0 - K OW2\nJERRIE  JH EH1 - R IY0\nJERRITTS  JH EH1 - R IH0 T S\nJERROLD  JH EH1 - R AH0 L D\nJERROME  Y EH0 - R OW1 - M EY0\nJERROME(2)  JH AH0 - R OW1 M\nJERRY  JH EH1 - R IY0\nJERRY'S  JH EH1 - R IY0 Z\nJERSEY  JH ER1 - Z IY0\nJERSEY'S  JH ER1 - Z IY0 Z\nJERSEYS  JH ER1 - Z IY0 Z\nJERSIAN  JH ER1 - Z IY0 - AH0 N\nJERSIANS  JH ER1 - Z IY0 - AH0 N Z\nJERUSALEM  JH ER0 - UW1 - S AH0 - L AH0 M\nJERUSALEM'S  JH ER0 - UW1 - S AH0 - L AH0 M Z\nJERUSHA  JH EH1 - R AH0 - SH AH0\nJERVIS  JH ER1 - V IH0 S\nJERZAK  Y ER1 - Z AH0 K\nJERZY  JH ER1 - Z IY0\nJESCHKE  JH EH1 SH K\nJESKE  JH EH1 S K\nJESMER  JH EH1 - S AH0 - M ER0\nJESPER  JH EH1 - S P ER0\nJESPERSEN  JH EH1 - S P ER0 - S AH0 N\nJESPERSON  JH EH1 - S P ER0 - S AH0 N\nJESS  JH EH1 S\nJESSALYNN  JH EH1 - S AH0 - L IH0 N\nJESSAMINE  JH EH1 - S AH0 - M IH0 N\nJESSAMYN  JH EH1 - S AH0 - M IH0 N\nJESSE  JH EH1 - S IY0\nJESSE'S  JH EH1 - S IY0 Z\nJESSEE  JH EH1 - S IY1\nJESSELSON  JH EH1 - S AH0 L - S AH0 N\nJESSEN  JH EH1 - S AH0 N\nJESSER  JH EH1 - S ER0\nJESSICA  JH EH1 - S IH0 - K AH0\nJESSICA'S  JH EH1 - S IH0 - K AH0 Z\nJESSIE  JH EH1 - S IY0\nJESSON  JH EH1 - S AH0 N\nJESSOP  JH EH1 - S AH0 P\nJESSUP  JH EH1 - S AH2 P\nJESSY  JH EH1 - S IY0\nJESSYE  JH EH1 - S IY0\nJEST  JH EH1 S T\nJESTER  JH EH1 - S T ER0\nJESTS  JH EH1 S T S\nJESUDASON  JH EH2 - S UW1 - D AH0 - S AH0 N\nJESUIT  JH EH1 - ZH UW0 - IH0 T\nJESUITS  JH EH1 - ZH UW0 - IH0 T S\nJESUP  JH EH1 - S AH0 P\nJESUS  JH IY1 - Z AH0 S\nJESUS'  JH IY1 - Z AH0 S\nJET  JH EH1 T\nJET'S  JH EH1 T S\nJETBORNE  JH EH1 T - B AO2 R N\nJETER  JH IY1 - T ER0\nJETHRO  JH EH1 - TH R OW0\nJETLINER  JH EH1 T - L AY2 - N ER0\nJETLINER'S  JH EH1 T - L AY2 - N ER0 Z\nJETLINERS  JH EH1 T - L AY2 - N ER0 Z\nJETRO  JH EH1 - T R OW0\nJETS  JH EH1 T S\nJETS'  JH EH1 T S\nJETSON  JH EH1 T - S AH0 N\nJETSONS  JH EH1 T - S AH0 N Z\nJETSTREAM  JH EH1 T - S T R IY2 M\nJETSTREAM'S  JH EH1 T - S T R IY2 M Z\nJETSTREAMS  JH EH1 T - S T R IY2 M Z\nJETT  JH EH1 T\nJETT'S  JH EH1 T S\nJETTA  JH EH1 - T AH0\nJETTE  JH EH1 T\nJETTED  JH EH1 - T IH0 D\nJETTER  JH EH1 - T ER0\nJETTING  JH EH1 - T IH0 NG\nJETTISON  JH EH1 - T IH0 - S AH0 N\nJETTISONED  JH EH1 - T IH0 - S AH0 N D\nJETTISONING  JH EH1 - T AH0 - S AH0 N - IH0 NG\nJETTON  JH EH1 - T AH0 N\nJETTY  JH EH1 - T IY0\nJEUMONT  JH UW1 - M AA2 N T\nJEW  JH UW1\nJEWEL  JH UW1 - AH0 L\nJEWEL(2)  JH UW1 L\nJEWELCOR  JH UW1 - AH0 L - K AO0 R\nJEWELER  JH UW1 - AH0 - L ER0\nJEWELER(2)  JH UW1 - L ER0\nJEWELERS  JH UW1 - AH0 - L ER0 Z\nJEWELERS(2)  JH UW1 - L ER0 Z\nJEWELL  JH UW1 - IH0 L\nJEWELLERS  JH UW1 - AH0 - L ER0 Z\nJEWELLERS(2)  JH UW1 - L ER0 Z\nJEWELMASTER  JH UW1 - AH0 L - M AE2 - S T ER0\nJEWELMASTER(2)  JH UW1 L - M AE2 - S T ER0\nJEWELMASTERS  JH UW1 - AH0 L - M AE2 - S T ER0 Z\nJEWELRY  JH UW1 - AH0 L - R IY0\nJEWELRY(2)  JH UW1 - L R IY0\nJEWELRY(3)  JH UW1 - L ER0 - IY0\nJEWELS  JH UW1 - AH0 L Z\nJEWELS(2)  JH UW1 L Z\nJEWELSBURG  JH UW1 - AH0 L Z - B ER0 G\nJEWELSBURG(2)  JH UW1 L Z - B ER0 G\nJEWESS  JH UW1 - AH0 S\nJEWETT  JH UW1 - IH0 T\nJEWFISH  JH UW1 - F IH2 SH\nJEWFISHES  JH UW1 - F IH2 - SH IH0 Z\nJEWISH  JH UW1 - IH0 SH\nJEWISHNESS  JH UW1 - IH0 SH - N AH0 S\nJEWITT  JH UW1 - IH0 T\nJEWKES  JH UW1 K S\nJEWRY  JH UW1 - R IY0\nJEWS  JH UW1 Z\nJEWS'  JH UW1 Z\nJEX  JH EH1 K S\nJEYARETNAM  JH EY2 - ER0 - EH1 T - N AH0 M\nJEZEK  Y EH1 - Z EH0 K\nJEZEWSKI  Y IH0 - Z EH1 F S - K IY0\nJEZIERSKI  Y IH0 - Z IH1 R S - K IY0\nJEZIORSKI  Y IH0 - Z IY0 - AO1 R S - K IY0\nJFET  JH F EH1 T\nJHA  JH AA1\nJHERYL  JH EH1 - R AH0 L\nJHIRMACK  JH ER1 - M AE0 K\nJI  JH IY1\nJIA  JH IY1 - AH0\nJIAN  JH IY1 - AH0 N\nJIANG  JH AA1 NG\nJIANG'S  JH IY0 - AA1 NG Z\nJIANG(2)  JH IY0 - AA1 NG\nJIANGSU  JH Y AA1 NG - S UW0\nJIAR  JH IY0 - AA1 R\nJIAWEN  JH IY1 - W EH1 N\nJIB  JH IH1 B\nJIBE  JH AY1 B\nJIBES  JH AY1 B Z\nJICHA  JH IH1 - CH AH0\nJIE  JH IY1\nJIF  JH IH1 F\nJIFENG  JH IY1 - F EH1 NG\nJIFFI-SNAK  JH IH1 - F IY0 S - N AE2 K\nJIFFY  JH IH1 - F IY0\nJIG  JH IH1 G\nJIGGETTS  JH IH1 - G IH0 T S\nJIGGLE  JH IH1 - G AH0 L\nJIGGLING  JH IH1 - G AH0 L - IH0 NG\nJIGGLING(2)  JH IH1 - G L IH0 NG\nJIGS  JH IH1 G Z\nJIGSAW  JH IH1 G - S AO2\nJIHAD  JH IY1 - HH AE0 D\nJIHAD(2)  JH IY1 - HH AA0 D\nJIL  JH IH1 L\nJILEK  JH IH1 - L IH0 K\nJILES  JH AY1 L Z\nJILL  JH IH1 L\nJILLIAN  JH IH1 - L IY0 - AH0 N\nJILLIAN(2)  JH IH1 - L Y AH0 N\nJILLION  JH IH1 - L Y AH0 N\nJILLIONS  JH IH1 - L Y AH0 N Z\nJILLSON  JH IH1 L - S AH0 N\nJILT  JH IH1 L T\nJILTED  JH IH1 L - T IH0 D\nJIM  JH IH1 M\nJIM'S  JH IH1 M Z\nJIMA  JH IY1 - M AH0\nJIMBO'S  JH IH1 M - B OW0 Z\nJIMENEZ  HH IH2 - M EH1 - N EH2 Z\nJIMERSON  JH IH1 - M ER0 - S AH0 N\nJIMI  JH IH1 - M IY0\nJIMINEZ  HH IH0 - M EH1 - N EH2 Z\nJIMISON  JH IH1 - M IH0 - S AH0 N\nJIMMERSON  JH IH1 - M ER0 - S AH0 N\nJIMMIE  JH IH1 - M IY0\nJIMMIED  JH IH1 - M IY0 D\nJIMMY  JH IH1 - M IY0\nJIMMY'S  JH IH1 - M IY0 Z\nJIN  JH IH1 N\nJINDO  JH IH1 N - D OW0\nJINDRA  JH IH1 N - D R AH0\nJINES  JH AY1 N Z\nJING  JH IH1 NG\nJINGLE  JH IH1 NG - G AH0 L\nJINGLES  JH IH1 NG - G AH0 L Z\nJINGOISM  JH IH1 NG - G OW2 - IH0 - Z AH0 M\nJINGOISTIC  JH IH0 NG - G OW0 - IH1 - S T IH0 K\nJINGSHENG  JH IH1 NG - SH EH0 NG\nJINKINS  JH IH1 NG - K IH0 N Z\nJINKS  JH IH1 NG K S\nJINRIGHT  JH IH1 N - R AY2 T\nJINX  JH IH1 NG K S\nJIPSON  JH IH1 P - S AH0 N\nJIRAK  JH AO1 - R AH0 K\nJIRGA  JH ER1 - G AH0\nJIRI  JH IH1 - R IY0\nJIRIK  JH AO1 - R IH0 K\nJIRON  Y IH0 - R AO1 N\nJIRSA  Y IH1 R - S AH0\nJITNEY  JH IH1 T - N IY0\nJITTERBUG  JH IH1 - T ER0 - B AH2 G\nJITTERBUGGING  JH IH1 - T ER0 - B AH2 - G IH0 NG\nJITTERS  JH IH1 - T ER0 Z\nJITTERY  JH IH1 - T ER0 - IY0\nJIVE  JH AY1 V\nJIVIDEN  Y IY0 - V AY1 - D AH0 N\nJIVING  JH AY1 - V IH0 NG\nJNA  JH EY1 - EH1 - N EY1\nJO  JH OW1\nJOACHIM  Y OW2 - AA1 - K IH0 M\nJOACHIM'S  Y OW2 - AA1 - K IH0 M Z\nJOACHIM'S(2)  W AA2 - K IY1 M Z\nJOACHIM(2)  W AA2 - K IY1 M\nJOACHIMS  Y OW2 - AA1 - K IH0 M Z\nJOACHIMS(2)  W AA2 - K IY1 M Z\nJOAKIMA  JH OW2 - K IY1 - M AH0\nJOAKIMA(2)  W AA2 - K IY1 - M AH0\nJOAN  JH OW1 N\nJOANN  JH OW2 - AE1 N\nJOANNA  JH OW0 - AE1 - N AH0\nJOANNE  JH OW2 - AE1 N\nJOANOU  JH OW1 - N UW2\nJOAO  JH OW1 - OW0\nJOAQUIM  W AA2 - K IY1 M\nJOAQUIN  W AA2 - K IY1 N\nJOB  JH AA1 B\nJOB'S  JH AA1 B Z\nJOB'S(2)  JH OW1 B Z\nJOB(2)  JH OW1 B\nJOBBER  JH AA1 - B ER0\nJOBBERS  JH AA1 - B ER0 Z\nJOBE  JH OW1 B\nJOBES  JH OW1 B Z\nJOBETE  JH OW0 - B IY1 T\nJOBIN  JH OW1 - B IH0 N\nJOBINA  Y OW0 - B IY1 - N AH0\nJOBLESS  JH AA1 B - L AH0 S\nJOBLESSNESS  JH AA1 B - L AH0 S - N AH0 S\nJOBS  JH AA1 B Z\nJOBS'  JH AA1 B Z\nJOBS'S  JH AA1 B - Z IH0 Z\nJOBSON  JH AA1 B - S AH0 N\nJOBST  JH AA1 B S T\nJOBYNA  Y AH0 - B IY1 - N AH0\nJOCELIN  JH AO1 S - L IH2 N\nJOCELINE  JH AO1 S - L IH2 N\nJOCELYN  JH AO1 S - L IH2 N\nJOCELYNE  JH AO1 S - L IH2 N\nJOCHEM  JH AA1 - K IH0 M\nJOCHEN  JH OW1 - K AH0 N\nJOCHIM  JH AA1 - K IH0 M\nJOCHUM  JH AA1 - K AH0 M\nJOCK  JH AA1 K\nJOCKEY  JH AA1 - K IY0\nJOCKEYING  JH AA1 - K IY0 - IH0 NG\nJOCKEYS  JH AA1 - K IY0 Z\nJOCKS  JH AA1 K S\nJOCOSA  Y OW0 - K OW1 - S AH0\nJOCULAR  JH AA1 - K Y AH0 - L ER0\nJOCYLAN  JH AO1 S - L AH0 N\nJOCYLAN'S  JH AO1 S - L AH0 N Z\nJODI  JH OW1 - D IY0\nJODIE  JH OW1 - D IY0\nJODOIN  ZH AH0 - D OY1 N\nJODY  JH OW1 - D IY0\nJOE  JH OW1\nJOE'S  JH OW1 Z\nJOEDICKE  JH OW1 - D IH0 K\nJOEL  JH OW1 - AH0 L\nJOEL'S  JH OW1 - AH0 L Z\nJOELLE  JH OW0 - EH1 L\nJOELSON  JH OW1 L - S AH0 N\nJOENS  JH OW1 N Z\nJOERG  JH AO1 R G\nJOERGER  Y ER1 - G ER0\nJOERS  JH OW1 - ER0 Z\nJOES  JH OW1 Z\nJOETTE  ZH OW0 - EH1 T\nJOETTE(2)  JH OW0 - EH1 T\nJOEY  JH OW1 - IY0\nJOEY'S  JH OW1 - IY0 Z\nJOFFE  JH AA1 F\nJOFFREY  JH AO1 - F R IY0\nJOFFRION  Y OW0 - F R IY0 - AO1 N\nJOG  JH AA1 G\nJOGGED  JH AA1 G D\nJOGGER  JH AA1 - G ER0\nJOGGERS  JH AA1 - G ER0 Z\nJOGGING  JH AA1 - G IH0 NG\nJOGGING(2)  JH AO1 - G IH0 NG\nJOGS  JH AA1 G Z\nJOH  JH OW1\nJOHAN  Y OW0 - HH AA1 N\nJOHANN  Y OW1 - HH AA0 N\nJOHANNA  JH AH0 - HH AE1 - N AH0\nJOHANNES  JH OW0 - HH AE1 - N AH0 S\nJOHANNESBURG  JH OW2 - HH AE1 - N IH0 S - B ER0 G\nJOHANNESBURG'S  JH OW2 - HH AE1 - N IH0 S - B ER0 G Z\nJOHANNESEN  JH OW2 - HH AE1 - N IH0 - S AH0 N\nJOHANNESSEN  JH OW2 - HH AE1 - N IH0 - S AH0 N\nJOHANNING  Y OW2 - HH AE1 - N IH0 NG\nJOHANNING(2)  JH OW2 - HH AE1 - N IH0 NG\nJOHANNS  Y OW1 - HH AA0 N Z\nJOHANNSEN  JH OW2 - HH AE1 N - S AH0 N\nJOHANSEN  JH OW2 - HH AE1 N - S AH0 N\nJOHANSON  JH OW2 - HH AE1 N - S AH0 N\nJOHANSSON  Y OW2 - HH AA1 N - S AH0 N\nJOHANSSON(2)  JH OW2 - HH AA1 N - S AH0 N\nJOHN  JH AA1 N\nJOHN'S  JH AA1 N Z\nJOHNATHON  JH AA1 - N AH0 - TH AH0 N\nJOHNATHON'S  JH AA1 - N AH0 - TH AH0 N Z\nJOHNDROW  JH AA1 N - D R OW0\nJOHNIE  JH AA1 - N IY0\nJOHNNIE  JH AA1 - N IY0\nJOHNNIE'S  JH AA1 - N IY0 Z\nJOHNNY  JH AA1 - N IY0\nJOHNNY'S  JH AA1 - N IY0 Z\nJOHNS  JH AA1 N Z\nJOHNS'S  JH AA1 N - Z IH0 Z\nJOHNSEN  JH AA1 N - S AH0 N\nJOHNSEN'S  JH AA1 N - S AH0 N Z\nJOHNSEY  JH AA1 N - Z IY0\nJOHNSON  JH AA1 N - S AH0 N\nJOHNSON'S  JH AA1 N - S AH0 N Z\nJOHNSONS  JH AA1 N - S AH0 N Z\nJOHNSRUD  JH AA1 N - S R AH0 D\nJOHNSTON  JH AA1 N - S T AH0 N\nJOHNSTON'S  JH AA1 N - S T AH0 N Z\nJOHNSTONE  JH AA1 N - S T OW2 N\nJOHNSTOWN  JH AA1 N Z - T AW2 N\nJOHNTA  JH AA1 N - T AH0\nJOHNY  JH AA1 - N IY0\nJOHSON  JH AA1 - S AH0 N\nJOICE  JH OY1 S\nJOIE  ZH W AA1\nJOIN  JH OY1 N\nJOINED  JH OY1 N D\nJOINER  JH OY1 - N ER0\nJOINERY  JH OY1 - N ER0 - IY0\nJOINES  JH OY1 N Z\nJOINING  JH OY1 - N IH0 NG\nJOINS  JH OY1 N Z\nJOINT  JH OY1 N T\nJOINTED  JH OY1 N - T AH0 D\nJOINTED(2)  JH OY1 N - T IH0 D\nJOINTED(3)  JH OY1 - N IH0 D\nJOINTLY  JH OY1 N T - L IY0\nJOINTNESS  JH OY1 N T - N AH0 S\nJOINTS  JH OY1 N T S\nJOIST  JH OY1 S T\nJOISTS  JH OY1 S T S\nJOJOLA  Y OW0 - Y OW1 - L AH0\nJOKE  JH OW1 K\nJOKEBOOK  JH OW1 K - B UH2 K\nJOKED  JH OW1 K T\nJOKELA  JH AA1 - K IH0 - L AH0\nJOKER  JH OW1 - K ER0\nJOKERS  JH OW1 - K ER0 Z\nJOKERST  JH AA1 - K ER0 S T\nJOKES  JH OW1 K S\nJOKHANG  JH AA1 K - HH AE0 NG\nJOKI  JH OW1 - K IY0\nJOKINEN  JH AH0 - K IH1 - N AH0 N\nJOKING  JH OW1 - K IH0 NG\nJOKINGLY  JH OW1 - K IH0 NG - L IY0\nJOLENE  JH OW0 - L IY1 N\nJOLES  JH OW1 L Z\nJOLETTA  JH OW0 - L EH1 - T AH0\nJOLETTE  JH OW2 - L EH1 T\nJOLICOEUR  ZH AA1 - L IH0 - K ER0\nJOLIET  JH OW1 - L IY0 - EH2 T\nJOLIN  JH OW1 - L IH0 N\nJOLIVETTE  ZH AA1 - L IH0 - V EH0 T\nJOLLA  HH OY1 - Y AH0\nJOLLA(2)  JH OW1 - L AH0\nJOLLEY  JH AA1 - L IY0\nJOLLIE  JH AA1 - L IY0\nJOLLIES  JH AA1 - L IY0 Z\nJOLLIFF  JH AA1 - L IH0 F\nJOLLIFFE  JH AA1 - L IH0 F\nJOLLY  JH AA1 - L IY0\nJOLLYING  JH AA1 - L IY0 - IH0 NG\nJOLSON  JH OW1 L - S AH0 N\nJOLT  JH OW1 L T\nJOLTED  JH OW1 L - T IH0 D\nJOLTING  JH OW1 L - T IH0 NG\nJOLTS  JH OW1 L T S\nJOLY  JH OW1 - L IY0\nJON  JH AA1 N\nJON'S  JH AA1 N Z\nJONAH  JH OW1 - N AH0\nJONAS  JH OW1 - N AH0 S\nJONASSAINT  JH OW2 - N AH0 - S EY1 N T\nJONASSAINT'S  JH OW2 - N AH0 - S EY1 N T S\nJONASSEN  JH AA1 - N AH0 - S AH0 N\nJONATHAN  JH AA1 - N AH0 - TH AH0 N\nJONATHAN'S  JH AA1 - N AH0 - TH AH0 N Z\nJONATHON  JH AA1 - N AH0 - TH AH0 N\nJONBENET  JH AO1 N - B IH0 - N EY1\nJONCAS  JH AA1 NG - K AH0 Z\nJONE  JH OW1 N\nJONES  JH OW1 N Z\nJONES'  JH OW1 N Z\nJONES'S  JH OW1 N - Z IH0 Z\nJONESBORO  JH OW1 N Z - B AH0 - R OW0\nJONESES  JH OW1 N - Z IH0 Z\nJONESTOWN  JH OW1 N Z - T AW0 N\nJONG  JH AO1 NG\nJONI  JH OW1 - N IY0\nJONKER  JH AA1 NG - K ER0\nJONN  JH AA1 N\nJONOTHAN  JH AA1 - N AH0 - TH AH0 N\nJONSMAN  JH AA1 N Z - M AH0 N\nJONSON  JH AA1 N - S AH0 N\nJONSSON  JH AA1 N - S AH0 N\nJOO  JH UW1\nJOON  JH UW1 N\nJOONG  JH UH1 NG\nJOOS  JH UW1 Z\nJOOST  JH UW1 S T\nJOOSTEN  Y UW1 - S AH0 N\nJOPLIN  JH AA1 P - L IH0 N\nJOPLING  JH OW1 - P AH0 L - IH0 NG\nJOPLING(2)  JH OW1 - P L IH0 NG\nJOPP  JH AA1 P\nJORDACHE  JH AO1 R - D AE2 SH\nJORDAHL  JH AO1 R - D AA0 L\nJORDAN  JH AO1 R - D AH0 N\nJORDAN'S  JH AO1 R - D AH0 N Z\nJORDANA  Y AO0 R - D AE1 - N AH0\nJORDANIAN  JH AO2 R - D EY1 - N IY0 - AH0 N\nJORDANIANS  JH AO0 R - D EY1 - N IY0 - AH0 N Z\nJORDANS  JH AO1 R - D AH0 N Z\nJORDE  JH AO1 R D\nJORDEN  JH AO1 R - D AH0 N\nJORDY  JH AO1 R - D IY0\nJORGE  HH AO1 R - HH EY0\nJORGENSEN  JH AO1 R - G AH0 N - S AH0 N\nJORGENSON  JH AO1 R - G IH0 N - S AH0 N\nJORIO  JH AO1 - R IY0 - OW0\nJORNAL  JH AO1 R - N AH0 L\nJORSTAD  JH AO1 R - S T AH0 D\nJORY  JH AO1 - R IY0\nJOS  JH OW1 Z\nJOSCELINE  JH AA1 - S IH0 - L AY2 N\nJOSCELYN  JH AA1 - S IH0 - L IH0 N\nJOSCELYNE  JH AA1 - S IH0 - L AY2 N\nJOSE  HH OW2 - Z EY1\nJOSE'S  HH OW2 - Z EY1 Z\nJOSEF  JH OW1 - S AH0 F\nJOSEPH  JH OW1 - S AH0 F\nJOSEPH'S  JH OW1 - Z AH0 F S\nJOSEPH(2)  JH OW1 - Z AH0 F\nJOSEPHA  JH OW0 - S EH1 - F AH0\nJOSEPHINA  JH AA0 - S IH0 - F AY1 - N AH0\nJOSEPHINA(2)  JH OW0 - Z AH0 - F IY1 - N AH0\nJOSEPHINE  JH OW1 - S AH0 - F IY2 N\nJOSEPHS  JH OW1 - S IH0 F S\nJOSEPHS(2)  JH OW1 - Z IH0 F S\nJOSEPHSON  JH OW1 - S AH0 F - S AH0 N\nJOSEPHTHAL  JH OW1 - S AH0 F - TH AO2 L\nJOSEPHUS  JH OW0 - S IY1 - F AH0 S\nJOSER  JH OW1 - Z ER0\nJOSER'S  JH OW1 - Z ER0 Z\nJOSETTE  ZH AH0 - S EH1 T\nJOSEY  JH OW1 - Z IY0\nJOSH  JH AA1 SH\nJOSHI  JH OW1 - SH IY0\nJOSHUA  JH AA1 - SH UW0 - AH0\nJOSIAH  JH OW0 - S AY1 - AH0\nJOSIE  JH OW1 - Z IY0\nJOSKE'S  JH AO1 S - K IY0 Z\nJOSLEYN  JH AA1 S - L IH2 N\nJOSLIN  JH AA1 S - L IH0 N\nJOSLYN  JH AO1 S - L IH0 N\nJOSPIN  JH AA1 - S P IH0 N\nJOSS  JH AO1 S\nJOSSELYN  JH AA1 - S IH0 - L IH0 N\nJOST  JH AA1 S T\nJOSTEN  JH AA1 - S AH0 N\nJOSTENS  JH AO1 - S T AH0 N Z\nJOSTES  JH OW1 S T S\nJOSTLE  JH AA1 - S AH0 L\nJOSTLED  JH AA1 - S AH0 L D\nJOSTLING  JH AA1 - S AH0 L - IH0 NG\nJOSTLING(2)  JH AA1 - S L IH0 NG\nJOSWICK  JH AA1 S - W IH0 K\nJOT  JH AA1 T\nJOTTED  JH AA1 - T IH0 D\nJOUBERT  Y AW1 - B ER0 T\nJOUETT  JH AA1 - UW0 T\nJOULE  JH UW1 L\nJOULES  JH UW1 L Z\nJOULWAN  JH UW1 L - W AA0 N\nJOULWAN(2)  JH UW1 L HH - W AA0 N\nJOUR  JH AW1 R\nJOURDAN  ZH UH0 R - D AE1 N\nJOURET  ZH W AA0 - R EY1\nJOURET'S  ZH W AA0 - R EY1 Z\nJOURET'S(2)  JH ER0 - EH1 T S\nJOURET(2)  JH ER0 - EH1 T\nJOURNAL  JH ER1 - N AH0 L\nJOURNAL'S  JH ER1 - N AH0 L Z\nJOURNALESE  JH ER2 - N AH0 - L IY1 Z\nJOURNALISM  JH ER1 - N AH0 - L IH2 - Z AH0 M\nJOURNALISM'S  JH ER1 - N AH0 - L IH2 - Z AH0 M Z\nJOURNALIST  JH ER1 - N AH0 - L AH0 S T\nJOURNALIST'S  JH ER1 - N AH0 - L IH0 S T S\nJOURNALIST(2)  JH ER1 - N AH0 - L IH0 S T\nJOURNALISTIC  JH ER2 - N AH0 - L IH1 - S T IH0 K\nJOURNALISTICALLY  JH ER2 - N AH0 - L IH1 - S T IH0 - K AH0 - L IY0\nJOURNALISTICALLY(2)  JH ER2 - N AH0 - L IH1 - S T IH0 K - L IY0\nJOURNALISTS  JH ER1 - N AH0 - L AH0 S T S\nJOURNALISTS'  JH ER1 - N AH0 - L IH0 S T S\nJOURNALISTS(2)  JH ER1 - N AH0 - L IH0 S T S\nJOURNALISTS(3)  JH ER1 - N AH0 - L IH0 S S\nJOURNALISTS(4)  JH ER1 - N AH0 - L IH0 S\nJOURNALS  JH ER1 - N AH0 L Z\nJOURNEY  JH ER1 - N IY0\nJOURNEYED  JH ER1 - N IY0 D\nJOURNEYING  JH ER1 - N IY0 - IH0 NG\nJOURNEYMAN  JH ER1 - N IY0 - M AE2 N\nJOURNEYMAN'S  JH ER1 - N IY0 - M AH0 N Z\nJOURNEYS  JH ER1 - N IY0 Z\nJOUST  JH AW1 S T\nJOUSTING  JH AW1 - S T IH0 NG\nJOVAN  JH OW1 - V AH0 N\nJOVANOVIC  Y AH0 - V AH0 - N AA1 - V IH0 K\nJOVANOVICH  JH OW0 - V AE1 - N AH0 - V IH0 CH\nJOVI  JH OW1 - V IY0\nJOVIAL  JH OW1 - V IY0 - AH0 L\nJOVIAN  JH OW1 - V IY0 - AH0 N\nJOVITA  Y AH0 - V AY1 - T AH0\nJOVITO  JH OW0 - V IY1 - T OW0\nJOWERS  JH AW1 - ER0 Z\nJOWETT  JH AW1 - IH0 T\nJOWL  JH AW1 L\nJOWLEY  JH OW1 - L IY0\nJOWLS  JH AW1 L Z\nJOWLY  JH AW1 - L IY0\nJOY  JH OY1\nJOY'S  JH OY1 Z\nJOYAL  JH OY1 - AH0 L\nJOYCE  JH OY1 S\nJOYCE'S  JH OY1 - S IH0 Z\nJOYCELYN  JH OY1 S - L IH2 N\nJOYCELYN'S  JH OY1 S - L IH2 N Z\nJOYE  JH OY1\nJOYFUL  JH OY1 - F AH0 L\nJOYFULLY  JH OY1 - F AH0 - L IY0\nJOYING  JH OY1 - IH0 NG\nJOYNER  JH OY1 - N ER0\nJOYNES  JH OY1 N Z\nJOYNT  JH OY1 N T\nJOYONI  JH OY0 - OW1 - N IY0\nJOYOUS  JH OY1 - AH0 S\nJOYRIDE  JH OY1 - R AY2 D\nJOYRIDING  JH OY1 - R AY2 - D IH0 NG\nJOYS  JH OY1 Z\nJOYSTICK  JH OY1 - S T IH2 K\nJOZEF  JH OW1 - Z AH0 F\nJOZWIAK  Y AA1 Z - V IY0 - AE0 K\nJR  JH UW1 - N Y ER0\nJR(2)  JH EY1 - AA1 R\nJU  JH UW1\nJUA  JH UW1 - AH0\nJUAN  W AA1 N\nJUAN(2)  HH W AA1 N\nJUANA  W AA1 - N AH0\nJUANA(2)  HH W AA1 - N AH0\nJUANITA  W AA0 - N IY1 - T AH0\nJUANITA(2)  W AA0 - N IY1 - T AH0\nJUAREZ  W AA1 - R EH2 Z\nJUAREZ(2)  HH W AA1 - R EH2 Z\nJUAREZ-ESPIN  W AA2 - R EH1 - Z EH1 - S P IH0 N\nJUAREZ-ESPIN(2)  HH W AA2 - R EH1 - Z EH1 - S P IH0 N\nJUBA  JH UW1 - B AH0\nJUBB  JH AH1 B\nJUBILANT  JH UW1 - B AH0 - L AH0 N T\nJUBILATION  JH UW2 - B AH0 - L EY1 - SH AH0 N\nJUBILEE  JH UW1 - B AH0 - L IY2\nJUBILEE(2)  JH UW2 - B AH0 - L IY1\nJUCKETT  JH AH1 - K IH0 T\nJUDAH  JH UW1 - D AH0\nJUDAISM  JH UW1 - D EY0 - IH2 - Z AH0 M\nJUDAISM'S  JH UW1 - D EY0 - IH2 - Z AH0 M Z\nJUDAISM'S(2)  JH UW1 - D IY0 - IH2 - Z AH0 M Z\nJUDAISM(2)  JH UW1 - D IY0 - IH2 - Z AH0 M\nJUDAS  JH UW1 - D AH0 S\nJUDAY  JH UW1 - D EY2\nJUDD  JH AH1 D\nJUDDS  JH AH1 D Z\nJUDE  JH UW1 D\nJUDE'S  JH UW1 D Z\nJUDEA  JH UW0 - D IY1 - AH0\nJUDEO  JH UW0 - D EY1 - OW0\nJUDGE  JH AH1 JH\nJUDGE'S  JH AH1 - JH IH0 Z\nJUDGED  JH AH1 JH D\nJUDGEMENT  JH AH1 JH - M AH0 N T\nJUDGEMENTAL  JH AH0 JH - M EH1 N - T AH0 L\nJUDGEMENTS  JH AH1 JH - M AH0 N T S\nJUDGES  JH AH1 - JH IH0 Z\nJUDGES'  JH AH1 - JH IH0 Z\nJUDGESHIP  JH AH1 JH - SH IH2 P\nJUDGESHIPS  JH AH1 JH - SH IH2 P S\nJUDGING  JH AH1 - JH IH0 NG\nJUDGMENT  JH AH1 JH - M AH0 N T\nJUDGMENTAL  JH AH0 JH - M EH1 N - T AH0 L\nJUDGMENTAL(2)  JH AH0 JH - M EH1 - N AH0 L\nJUDGMENTS  JH AH1 JH - M AH0 N T S\nJUDICATE  JH UW1 - D IH0 - K EY2 T\nJUDICE  JH UW1 - D IH0 S\nJUDICIAL  JH UW0 - D IH1 - SH AH0 L\nJUDICIALLY  JH UW0 - D IH1 - SH AH0 - L IY0\nJUDICIARY  JH UW0 - D IH1 - SH IY0 - EH2 - R IY0\nJUDICIOUS  JH UW0 - D IH1 - SH AH0 S\nJUDICIOUSLY  JH UW0 - D IH1 - SH IH0 S - L IY0\nJUDIE  JH AH1 - D IY0\nJUDISHE  JH UW2 - D IY1 SH\nJUDITH  JH UW1 - D AH0 TH\nJUDITH(2)  JH UW1 - D IH0 TH\nJUDITHA  JH UW0 - D IH1 - TH AH0\nJUDKINS  JH AH1 D - K IH0 N Z\nJUDO  JH UW1 - D OW2\nJUDSEN  JH AH1 D - S AH0 N\nJUDSON  JH AH1 D - S AH0 N\nJUDY  JH UW1 - D IY0\nJUDY'S  JH UW1 - D IY0 Z\nJUE  JH UW1\nJUEDES  JH W EH1 - D EH0 S\nJUEDES(2)  Y UW0 - EH1 - D EH0 S\nJUEL  JH UW1 L\nJUENEMANN  Y UW1 N - M AH0 N\nJUENGER  Y UW1 NG - G ER0\nJUERGEN  Y ER1 - G AH0 N\nJUERGEN(2)  JH ER1 - G AH0 N\nJUERGENS  Y ER1 - G AH0 N Z\nJUERGENS(2)  JH ER1 - G AH0 N Z\nJUETENG  JH UW1 - T EH2 NG\nJUETT  JH UW1 T\nJUG  JH AH1 G\nJUGE  JH UW1 JH\nJUGGERNAUT  JH AH1 - G ER0 - N AO2 T\nJUGGLE  JH AH1 - G AH0 L\nJUGGLED  JH AH1 - G AH0 L D\nJUGGLER  JH AH1 - G AH0 - L ER0\nJUGGLER(2)  JH AH1 G - L ER0\nJUGGLERS  JH AH1 - G AH0 - L ER0 Z\nJUGGLERS(2)  JH AH1 G - L ER0 Z\nJUGGLES  JH AH1 - G AH0 L Z\nJUGGLING  JH AH1 - G AH0 L - IH0 NG\nJUGGLING(2)  JH AH1 - G L IH0 NG\nJUGS  JH AH1 G Z\nJUGULAR  JH UW1 - G Y AH0 - L ER0\nJUHAS  JH UW1 - AH0 Z\nJUHASZ  Y AH1 - HH AH0 SH\nJUHL  JH AH1 L\nJUHLIN  JH UW1 - L IH0 N\nJUHNKE  JH AH1 NG K\nJUICE  JH UW1 S\nJUICES  JH UW1 - S AH0 Z\nJUICES(2)  JH UW1 - S IH0 Z\nJUICIER  JH UW0 - IH1 - S Y ER0\nJUICIEST  JH UW1 - S IY0 - AH0 S T\nJUICY  JH UW1 - S IY0\nJUILLIARD  JH UW1 - L IY0 - AA0 R D\nJUJITSU  JH UW0 - JH IH1 T - S UW2\nJUJO  JH UW1 - JH OW0\nJUJU  JH UW1 - JH UW0\nJUKE  JH UW1 K\nJUKEBOX  JH UW1 K - B AA2 K S\nJUKEBOXES  JH UW1 K - B AA2 K - S IH0 Z\nJUKES  JH UW1 K S\nJUKI  JH UW1 - K IY0\nJULE  JH UW1 L\nJULEP  JH UW1 - L AH0 P\nJULEPS  JH UW1 - L AH0 P S\nJULES  JH UW1 L Z\nJULI  JH UW1 - L IY0\nJULIA  JH UW1 - L Y AH0\nJULIA'S  JH UW1 - L Y AH0 Z\nJULIAN  JH UW1 - L IY0 - AH0 N\nJULIAN(2)  JH UW1 - L Y AH0 N\nJULIANA  JH UW2 - L IY0 - AE1 - N AH0\nJULIANN  JH UW1 - L IY0 - AE0 N\nJULIANN(2)  JH UW1 - L Y AH0 N\nJULIANNE  JH UW1 - L IY0 - EH2 N\nJULIANO  JH UW2 - L IY0 - AA1 - N OW0\nJULIE  JH UW1 - L IY0\nJULIE'S  JH UW1 - L IY0 Z\nJULIEN  JH UW1 - L IY0 - AH0 N\nJULIET  JH UW1 - L IY0 - EH2 T\nJULIETA  Y UW0 - L IY1 - T AH0\nJULIETTA  JH UW0 - L IY0 - EH1 - T AH0\nJULIETTE  JH UW0 - L IY0 - EH1 T\nJULIN  JH UW1 - L IH0 N\nJULINA  Y UW0 - L IY1 - N AH0\nJULINE  JH UW1 - L AY0 N\nJULIO  JH UW1 - L IY0 - OW0\nJULIO(2)  HH UW1 - L IY0 - OW0\nJULIUS  JH UW1 - L Y AH0 S\nJULIUSZ  JH UW1 - L IY0 - UW0 S\nJULLIARD  JH UW1 - L IY0 - AA2 R D\nJULSON  JH AH1 L - S AH0 N\nJULY  JH UW2 - L AY1\nJULY'S  JH UW2 - L AY1 Z\nJULY'S(2)  JH AH0 - L AY1 Z\nJULY(2)  JH AH0 - L AY1\nJUMANJI  JH UW0 - M AA1 N - JH IY0\nJUMBLE  JH AH1 M - B AH0 L\nJUMBLED  JH AH1 M - B AH0 L D\nJUMBO  JH AH1 M - B OW0\nJUMBOS  JH AH1 M - B OW2 Z\nJUMBOTRON  JH AH1 M - B OW0 - T R AO0 N\nJUMBOTRONS  JH AH1 M - B OW0 - T R AO0 N Z\nJUMONVILLE  ZH AH1 - M AH0 N - V IH0 L\nJUMONVILLE(2)  JH UW1 - M AH0 N - V IH0 L\nJUMP  JH AH1 M P\nJUMPED  JH AH1 M P T\nJUMPER  JH AH1 M - P ER0\nJUMPERS  JH AH1 M - P ER0 Z\nJUMPING  JH AH1 M - P IH0 NG\nJUMPS  JH AH1 M P S\nJUMPSTART  JH AH1 M P - S T AA2 R T\nJUMPSUIT  JH AH1 M P - S UW2 T\nJUMPY  JH AH1 M - P IY0\nJUN  JH AH1 N\nJUNCO  JH AH1 NG - K OW0\nJUNCTION  JH AH1 NG K - SH AH0 N\nJUNCTURE  JH AH1 NG K - CH ER0\nJUNCTURES  JH AH1 NG K - CH ER0 Z\nJUNDA  JH AH1 N - D AH0\nJUNDT  JH AH1 N T\nJUNE  JH UW1 N\nJUNE'S  JH UW1 N Z\nJUNEAU  JH UW1 - N OW0\nJUNEJO  JH UW0 - N EY1 - HH OW0\nJUNEK  JH UW1 - N IH0 K\nJUNELLA  JH UW2 - N EH1 - L AH0\nJUNES  JH UW1 N Z\nJUNETTE  JH UW2 - N EH1 T\nJUNG  Y UH1 NG\nJUNG'S  Y UH1 NG Z\nJUNGBLUTH  JH AH1 NG - B L UW0 TH\nJUNGE  JH AH1 NG\nJUNGELS  JH AH1 NG - G AH0 L Z\nJUNGER  JH AH1 - NG ER0\nJUNGERS  JH AH1 - NG ER0 Z\nJUNGHANS  JH AH1 NG - G AH0 N Z\nJUNGLE  JH AH1 NG - G AH0 L\nJUNGLES  JH AH1 NG - G AH0 L Z\nJUNGMAN  JH AH1 NG - M AH0 N\nJUNGWIRTH  JH AH1 NG - G W ER0 TH\nJUNIA  Y UW1 - N IY0 - AH0\nJUNIATA  Y UW0 - N IY0 - AA1 - T AH0\nJUNINE  JH AH1 - N IH0 N\nJUNIOR  JH UW1 - N Y ER0\nJUNIOR'S  JH UW1 - N Y ER0 Z\nJUNIORS  JH UW1 - N Y ER0 Z\nJUNIPER  JH UW1 - N AH0 - P ER0\nJUNIPERS  JH UW1 - N IH0 - P ER0 Z\nJUNIUS  JH UW1 - N IY0 - IH0 S\nJUNJI  JH AH1 N - JH IY0\nJUNK  JH AH1 NG K\nJUNKBOND  JH AH1 NG K - B AA2 N D\nJUNKED  JH AH1 NG K T\nJUNKER  JH AH1 NG - K ER0\nJUNKET  JH AH1 NG - K IH0 T\nJUNKETS  JH AH1 NG - K IH0 T S\nJUNKHOLDER  JH AH1 NG K - HH OW2 L - D ER0\nJUNKHOLDERS  JH AH1 NG K - HH OW2 L - D ER0 Z\nJUNKIE  JH AH1 NG - K IY0\nJUNKIER  JH AH1 NG - K IY0 - ER0\nJUNKIES  JH AH1 NG - K IY0 Z\nJUNKIEST  JH AH1 NG - K IY0 - AH0 S T\nJUNKIN  JH AH1 NG - K IH0 N\nJUNKING  JH AH1 NG - K IH0 NG\nJUNKINS  JH AH1 NG - K IH2 N Z\nJUNKY  JH AH1 NG - K IY0\nJUNKYARD  JH AH1 NG K - Y AA2 R D\nJUNKYARDS  JH AH1 NG K - Y AA2 R D Z\nJUNO  JH UW1 - N OW0\nJUNO'S  JH UW1 - N OW0 Z\nJUNOD  JH UW1 - N AH0 D\nJUNOT  JH UW1 - N AH0 T\nJUNTA  HH UH1 N - T AH0\nJUNTUNEN  JH AH1 N - T AH0 - N AH0 N\nJUPIN  JH UW1 - P IH0 N\nJUPITER  JH UW1 - P AH0 - T ER0\nJUPITER'S  JH UW1 - P AH0 - T ER0 Z\nJUPITER'S(2)  JH UW1 - P IH0 - T ER0 Z\nJUPITER(2)  JH UW1 - P IH0 - T ER0\nJUPPE  JH UW1 - P IY0\nJURADO  Y UH0 - R AA1 - D OW0\nJURAN  Y UH0 - R AA1 N\nJURANEK  JH UH1 - R AH0 - N IH0 K\nJURAS  JH UH1 - R AH0 Z\nJURASSIC  JH UH0 - R AE1 - S IH0 K\nJURCZAK  Y ER1 - CH AE0 K\nJURCZYK  Y ER1 - CH IH0 K\nJURE  JH UH1 R\nJUREK  JH UH1 - R EH0 K\nJUREK(2)  Y UH1 - R EH0 K\nJUREWICZ  JH UH1 - R AH0 - V IH0 CH\nJUREWICZ(2)  Y UH1 - R AH0 - V IH0 CH\nJURGEN  JH ER1 - G AH0 N\nJURGENS  JH ER1 - G AH0 N Z\nJURGENSEN  JH ER1 - G IH0 N - S AH0 N\nJURGENSMEYER  JH ER1 - G AH0 N Z - M AY2 R\nJURGENSON  JH ER1 - G IH0 N - S AH0 N\nJURICA  JH UH1 - R IH0 - K AH0\nJURICH  JH UH1 - R IH0 K\nJURIES  JH UH1 - R IY0 Z\nJURIS  JH UH1 - R IH0 S\nJURISDICTION  JH UH2 - R AH0 S - D IH1 K - SH AH0 N\nJURISDICTION(2)  JH UH2 - R IH0 S - D IH1 K - SH AH0 N\nJURISDICTIONAL  JH UH2 - R AH0 S - D IH1 K - SH AH0 - N AH0 L\nJURISDICTIONS  JH UH2 - R IH0 S - D IH1 K - SH AH0 N Z\nJURISPRUDENCE  JH UH2 - R AH0 S - P R UW1 - D AH0 N S\nJURISPRUDENTIAL  JH UH2 - R AH0 S - P R UW2 - D EH1 N - SH AH0 L\nJURISPRUDENTIAL(2)  JH UH2 - R AH0 S - P R UW2 - D EH1 N - CH AH0 L\nJURIST  JH UH1 - R AH0 S T\nJURIST(2)  JH UH1 - R IH0 S T\nJURISTS  JH UH1 - R IH0 S T S\nJURISTS(2)  JH UH1 - R IH0 S S\nJURISTS(3)  JH UH1 - R IH0 S\nJURKIEWICZ  Y ER1 - K AH0 - V IH0 CH\nJURKOVICH  Y ER1 - K AH0 - V IH0 CH\nJURKOWSKI  Y ER0 - K AO1 F S - K IY0\nJURNEY  JH ER1 - N IY0\nJUROR  JH UH1 - R ER0\nJUROR'S  JH UH1 - R ER0 Z\nJURORS  JH UH1 - R ER0 Z\nJURORS'  JH UH1 - R ER0 Z\nJURS  JH ER1 Z\nJURY  JH UH1 - R IY0\nJURY'S  JH UH1 - R IY0 Z\nJUSCO  JH AH1 - S K OW0\nJUSINO  Y UW0 - S IY1 - N OW0\nJUST  JH AH1 S T\nJUST(2)  JH IH0 S T\nJUSTA  JH AH1 - S T AH0\nJUSTA(2)  JH IH0 - S T AH0\nJUSTEN  JH AH1 - S T AH0 N\nJUSTER  JH AH1 - S T ER0\nJUSTESEN  JH AH1 - S T IY0 - Z AH0 N\nJUSTICE  JH AH1 - S T AH0 S\nJUSTICE'S  JH AH1 - S T IH0 - S IH0 Z\nJUSTICE(2)  JH AH1 - S T IH0 S\nJUSTICES  JH AH1 - S T AH0 - S AH0 Z\nJUSTICES'  JH AH1 - S T IH0 - S IH0 Z\nJUSTICES(2)  JH AH1 - S T IH0 - S IH0 Z\nJUSTIFIABLE  JH AH1 - S T AH0 - F AY2 - AH0 - B AH0 L\nJUSTIFIABLY  JH AH1 - S T AH0 - F AY2 - AH0 - B L IY0\nJUSTIFICATION  JH AH2 - S T AH0 - F AH0 - K EY1 - SH AH0 N\nJUSTIFICATIONS  JH AH2 - S T IH0 - F IH0 - K EY1 - SH AH0 N Z\nJUSTIFIED  JH AH1 - S T AH0 - F AY2 D\nJUSTIFIES  JH AH1 - S T AH0 - F AY2 Z\nJUSTIFY  JH AH1 - S T AH0 - F AY2\nJUSTIFYING  JH AH1 - S T AH0 - F AY2 - IH0 NG\nJUSTIN  JH AH1 - S T AH0 N\nJUSTIN'S  JH AH1 - S T AH0 N Z\nJUSTIN'S(2)  JH AH1 - S T IH0 N Z\nJUSTIN(2)  JH AH1 - S T IH0 N\nJUSTINA  Y UW0 - S T IY1 - N AH0\nJUSTINE  JH AH0 - S T IY1 N\nJUSTINIANO  JH UW0 - S T IY0 - N IY0 - AA1 - N OW0\nJUSTINO  JH AH0 - S T IY1 - N OW0\nJUSTIS  Y UW1 - S T IH0 S\nJUSTISS  Y UW1 - S T IY0 S\nJUSTLY  JH AH1 S T - L IY0\nJUSTMAN  JH AH1 S T - M AH0 N\nJUSTO  JH AH1 - S T OW0\nJUSTUS  JH AH1 - S T AH0 S\nJUSTY  JH AH1 - S T IY0\nJUT  JH AH1 T\nJUTE  JH UW1 T\nJUTLAND  JH AH1 T - L AH0 N D\nJUTRAS  Y UW1 - T R AA0 Z\nJUTS  JH AH1 T S\nJUTTING  JH AH1 - T IH0 NG\nJUUL  JH UW1 - AH0 L\nJUVE  JH UW1 V\nJUVENILE  JH UW1 - V AH0 - N AH0 L\nJUVENILE'S  JH UW1 - V AH0 - N AH0 L Z\nJUVENILE'S(2)  JH UW1 - V AH0 - N AY2 L Z\nJUVENILE(2)  JH UW1 - V AH0 - N AY2 L\nJUVENILES  JH UW1 - V AH0 - N AH0 L Z\nJUVENILES(2)  JH UW1 - V AH0 - N AY2 L Z\nJUXTAPOSE  JH AH2 K - S T AH0 - P OW1 Z\nJUXTAPOSED  JH AH2 K - S T AH0 - P OW1 Z D\nJUXTAPOSITION  JH AH2 K - S T AH0 - P AH0 - Z IH1 - SH AH0 N\nJUXTAPOSITIONS  JH AH2 K - S T AH0 - P AH0 - Z IH1 - SH AH0 N Z\nJYISHANE  JH IY1 - SH EY1 N\nJYNX  JH IH1 NG K S\nK  K EY1\nK'S  K EY1 Z\nK-MART  K EY1 - M AA1 R T\nK-MART'S  K EY1 - M AA1 R T S\nK.  K EY1\nK.'S  K EY1 Z\nKA  K AA1\nKAAS  K AA1 Z\nKAATZ  K AA1 T S\nKABART  K AH0 - B AA1 R T\nKABAT  K AE1 - B AH0 T\nKABBALAH  K AH0 - B AA1 - L AH0\nKABBANI  K AH0 - B AA1 - N IY0\nKABEL  K AE1 - B AH0 L\nKABI  K AE1 - B IY0\nKABI(2)  K AA1 - B IY0\nKABIVITRUM  K AH0 - B IH1 - V IH0 - T R AH0 M\nKABLE  K EY1 - B AH0 L\nKABLER  K EY1 - B AH0 L - ER0\nKABLER(2)  K EY1 - B L ER0\nKABOOM  K AH0 - B UW1 M\nKABRAL  K AH0 - B R AA1 L\nKABUKI  K AH0 - B UW1 - K IY2\nKABUL  K AA1 - B UH0 L\nKACER  K EY1 - S ER0\nKACH  K AE1 CH\nKACHEL  K AE1 - K AH0 L\nKACHIGIAN  K AH0 - SH IY1 - G IY0 - AH0 N\nKACHIGIAN(2)  K AH0 - SH IH1 - G IY0 - AH0 N\nKACHMAR  K AE1 K - M ER0\nKACHUR  K AE1 - CH ER0\nKACKLEY  K AE1 K - L IY0\nKACZMARCZYK  K AA1 CH - M ER0 - CH IH0 K\nKACZMAREK  K AH0 CH - M AA1 - R EH0 K\nKACZMARSKI  K AH0 CH - M AA1 R S - K IY0\nKACZOR  K AA1 - CH ER0\nKACZOROWSKI  K AH0 - CH ER0 - AO1 F S - K IY0\nKACZYNSKI  K AH0 - CH IH1 N - S K IY0\nKACZYNSKI'S  K AH0 - CH IH1 N - S K IY0 Z\nKACZYNSKI'S(2)  K AH0 - Z IH1 N - S K IY0 Z\nKACZYNSKI(2)  K AH0 - Z IH1 N - S K IY0\nKADAR  K AE1 - D ER0\nKADAR(2)  K AH0 - D AA1 R\nKADE  K EY1 D\nKADEL  K AE1 - D AH0 L\nKADEN  K EY1 - D AH0 N\nKADER  K EY1 - D ER0\nKADING  K EY1 - D IH0 NG\nKADISH  K EY1 - D IH0 SH\nKADLEC  K AA1 D - L IH0 K\nKADOW  K AA1 - D OW0\nKADRESCU  K AH0 - D R EH1 - S K Y UW0\nKADRMAS  K AE1 - D ER0 - M AA2 Z\nKADUMI  K AH0 - D UW1 - M IY0\nKADY  K EY1 - D IY0\nKAEDING  K EH1 - D IH0 NG\nKAEHLER  K EH1 - L ER0\nKAEL  K EY1 L\nKAELIN  K EH1 - L IH0 N\nKAELIN'S  K EH1 - L IH0 N Z\nKAERCHER  K EH1 R - K ER0\nKAESER  K EY1 - Z ER0\nKAESTNER  K EH1 S T - N ER0\nKAETZEL  K EH1 T - Z AH0 L\nKAFELNIKOV  K AH0 - F EH1 L - N IH0 K - AO2 F\nKAFELNIKOV(2)  K AH0 - F EH1 L - N IH0 - K AO2 V\nKAFER  K EY1 - F ER0\nKAFFENBERGER  K AE1 - F AH0 N - B ER0 - G ER0\nKAFKA  K AA1 F - K AH0\nKAFKA'S  K AA1 F - K AH0 Z\nKAFKAESQUE  K AA1 F - K AH0 - EH1 S K\nKAGAMI  K AE1 - G AH0 - M IY0\nKAGAN  K EY1 - G AH0 N\nKAGARLITSKY  K AE2 - G ER0 - L IH1 T S - K IY1\nKAGAWA  K AH0 - G AA1 - W AH0\nKAGE  K EY1 JH\nKAGEL  K EY1 - G AH0 L\nKAGEY  K EY1 - JH IY0\nKAGEYAMA  K AA2 - G IY0 - AA1 - M AH0\nKAGIN  K EY1 - G IH0 N\nKAGINS  K EY1 - G IH0 N Z\nKAGLER  K AE1 - G L ER0\nKAGY  K EY1 - G IY0\nKAH  K AA1\nKAHAN  K AH0 - HH AA1 N\nKAHAN'S  K AH0 - HH AA1 N Z\nKAHANE  K AH0 - HH AA1 - N EY2\nKAHANE(2)  K AH0 - HH EY1 N\nKAHL  K AA1 L\nKAHLE  K AA1 L\nKAHLER  K AA1 - L ER0\nKAHLEY  K AA1 - L IY0\nKAHN  K AA1 N\nKAHN'S  K AA1 N Z\nKAHNG  K AA1 NG\nKAHR  K AA1 R\nKAHR'S  K AA1 R Z\nKAHRE  K EH1 R\nKAHRE(2)  K AA1 R\nKAHRS  K AA1 R Z\nKAHUNA  K AH0 - HH UW1 - N AH0\nKAI  K AY1\nKAIFU  K AY1 - F UW2\nKAIGLER  K EY1 G - L ER0\nKAIL  K EY1 L\nKAILASH  K EY1 - L AH0 SH\nKAIM  K EY1 M\nKAIN  K EY1 N\nKAINE  K EY1 N\nKAINER  K EY1 - N ER0\nKAINZ  K EY1 N Z\nKAIRAMO  K EH2 - R AA1 - M OW0\nKAIREY  K EH1 - R IY0\nKAISER  K AY1 - Z ER0\nKAISER'S  K AY1 - Z ER0 Z\nKAISERAUGST  K AY1 - Z ER0 - AO0 G S T\nKAISERTECH  K AY1 - Z ER0 - T EH2 K\nKAISERTECH'S  K AY1 - Z ER0 - T EH2 K S\nKAISHA  K EY1 - SH AH0\nKAJI  K AA1 - JH IY0\nKAJIMA  K AA2 - JH IY1 - M AH0\nKAJUAHAR  K AH0 - JH UW1 - AH0 - HH AA0 R\nKAKADU  K AA2 - K AA1 - D UW0\nKAKIMOTO  K AA2 - K IH0 - M OW1 - T OW0\nKAKOS  K EY1 - K OW0 Z\nKAKTOVIK  K AE2 K - T OW1 - V IH0 K\nKAKUEI  K AE1 - K Y UW0 - IY0\nKAKUMARU  K AA2 - K UW0 - M AA1 - R UW0\nKAL  K AE1 L\nKAL(2)  K EY1 - EY1 - EH1 L\nKALAFUT  K AE1 - L AH0 - F AH0 T\nKALAL  K EY1 - L AH0 L\nKALAMAZOO  K AE2 - L AH0 - M AH0 - Z UW1\nKALAN  K EY1 - L AH0 N\nKALAS  K AA1 - L AH0 Z\nKALASHNIKOV  K AH0 - L AE1 SH - N IH0 - K AA2 V\nKALATA  K AH0 - L AA1 - T AH0\nKALB  K AE1 L B\nKALBACH  K AE1 L - B AA2 K\nKALBERER  K AE1 L - B ER0 - ER0\nKALBFLEISCH  K AE1 L B - F L AY2 SH\nKALE  K EY1 L\nKALEEL  K AE1 - L IY0 L\nKALEIDA  K AH0 - L AY1 - D AH0\nKALEIDOSCOPE  K AH0 - L AY1 - D AH0 - S K OW2 P\nKALEN  K EY1 - L AH0 N\nKALER  K EY1 - L ER0\nKALETA  K AE1 - L IH0 - T AH0\nKALEY  K EY1 - L IY0\nKALGOORLIE  K AE2 L - G UW1 R - L IY0\nKALIKOW  K AE1 - L IH0 - K OW0\nKALIL  K AE1 - L AH0 L\nKALIN  K AE1 - L IH0 N\nKALINA  K AH0 - L AY1 - N AH0\nKALININGRAD  K AH0 - L IH1 - N IH0 NG - G R AE2 D\nKALINOSKI  K AH0 - L IH0 - N AW1 S - K IY0\nKALINOWSKI  K AH0 - L IH0 - N AO1 F S - K IY0\nKALINSKE  K AH0 - L IH1 N - S K IY0\nKALINSKI  K AH0 - L IH1 N - S K IY0\nKALIS  K AE1 - L IH0 S\nKALISH  K AE1 - L IH0 SH\nKALISZ  K AA1 - L IH0 SH\nKALISZEWSKI  K AH0 - L IH0 - SH EH1 F S - K IY0\nKALIVODA  K AH0 - L IH0 - V OW1 - D AH0\nKALK  K AO1 K\nKALKA  K AE1 L - K AH0\nKALKASKA  K AE0 L - K AA1 - S K AH0\nKALKBRENNER  K AE1 L K - B R IH0 - N ER0\nKALL  K AO1 L\nKALLA  K AE1 - L AH0\nKALLAL  K AE1 - L AH0 L\nKALLAM  K AE1 - L AH0 M\nKALLAS  K AE1 - L AH0 Z\nKALLAY  K AE1 - L EY0\nKALLEN  K AO1 - L AH0 N\nKALLENBACH  K AE1 - L IH0 N - B AA0 K\nKALLENBERGER  K AO1 - L AH0 N - B ER0 - G ER0\nKALLHOFF  K AE1 L - HH AO0 F\nKALLIEL  K AE1 - L IY0 - AH0 L\nKALLINS  K AE1 - L IH0 N Z\nKALLIO  K AE1 - L IY0 - OW0\nKALLIS  K AE1 - L IH0 S\nKALLMAN  K AO1 L - M AH0 N\nKALLMEYER  K AE1 L - M AY0 - ER0\nKALLSTROM  K AE1 L - S T R AH0 M\nKALLUS  K AE1 - L AH0 S\nKALMAN  K AE1 L - M AH0 N\nKALMANOVITZ  K AE2 L - M AE1 - N AH0 - V IH0 T S\nKALMAR  K AE1 L - M ER0\nKALMBACH  K AE1 L M - B AA0 K\nKALMUS  K AE1 L - M IH0 S\nKALNINS  K AE1 L - N IH0 N Z\nKALO  K EY1 - L OW0\nKALOK  K AE1 - L AA2 K\nKALOUS  K AE1 - L AH0 S\nKALP  K AE1 L P\nKALT  K AO1 L T\nKALTENBACH  K AE1 L - T IH0 N - B AA0 K\nKALTENBACHER  K AA1 L - T AH0 N - B AA2 - K ER0\nKALTER  K AO1 L - T ER0\nKALTHOFF  K AE1 L TH\nKALUGIN  K AH0 - L UW1 - G AH0 N\nKALUZA  K AH0 - L UW1 - Z AH0\nKALUZNY  K AH0 - L AH1 Z - N IY0\nKALVAR  K AE1 L - V AA0 R\nKAM  K AE1 M\nKAMA  K AA1 - M AH0\nKAMAKAU  K AA2 - M AH0 - K AA1 - UW0\nKAMAKAU'S  K AA2 - M AH0 - K AA1 - UW0 Z\nKAMAL  K EY1 - M AH0 L\nKAMALI  K AH0 - M AA1 - L IY0\nKAMAN  K EY1 - M AH0 N\nKAMBER  K AE1 M - B ER0\nKAMCHATKA  K AE2 M - CH AE1 T - K AH0\nKAMCHATKA(2)  K AA2 M - CH AA1 T - K AH0\nKAMEHAMEHA  K AH0 - M EY1 - AH0 - M EY1 - AH0\nKAMEHAMEHA'S  K AH0 - M EY1 - AH0 - M EY1 - AH0 Z\nKAMEI  K AE1 - M IY0\nKAMEI(2)  K AA2 - M EY1\nKAMEL  K AA1 - M AH0 L\nKAMEN  K AA1 - M EH0 N\nKAMEN(2)  K EY1 - M EH0 N\nKAMENAR  K AE1 - M AH0 - N ER0\nKAMENS  K AA1 - M EH0 N Z\nKAMENS(2)  K EY1 - M EH0 N Z\nKAMENTSEV  K AH0 - M EH1 N - T S AA2 V\nKAMER  K EY1 - M ER0\nKAMERER  K AE1 - M ER0 - ER0\nKAMIKAZE  K AA2 - M AH0 - K AA1 - Z IY0\nKAMIN  K AA1 - M IY0 N\nKAMIN(2)  K EY1 - M IH2 N\nKAMIN(3)  K AE1 - M IH2 N\nKAMINER  K AE1 - M IH0 - N ER0\nKAMINS  K AE1 - M IH0 N Z\nKAMINS(2)  K EY1 - M IH2 N Z\nKAMINSKI  K AH0 - M IH1 N - S K IY0\nKAMINSKY  K AH0 - M IH1 N - S K IY0\nKAMIR  K AH0 - M IH1 R\nKAMKE  K AE1 M - K IY0\nKAMLER  K AE1 - M AH0 - L ER0\nKAMLER(2)  K AE1 M - L ER0\nKAMM  K AE1 M\nKAMMAN  K AE1 - M AH0 N\nKAMMER  K AE1 - M ER0\nKAMMERER  K AE1 - M ER0 - ER0\nKAMMERZELL  K AE1 - M ER0 - Z AH0 L\nKAMMEYER  K AE1 - M AY0 - ER0\nKAMNEVA  K AE2 M - N EY1 - V AH0\nKAMP  K AE1 M P\nKAMP'S  K AE1 M P S\nKAMPA  K AE1 M - P AH0\nKAMPALA  K AH0 M - P AA1 - L AH0\nKAMPE  K AE1 M P\nKAMPELMAN  K AE1 M - P AH0 L - M AH0 N\nKAMPEN  K AE1 M - P AH0 N\nKAMPER  K AE1 M - P ER0\nKAMPF  K AE1 M P F\nKAMPFER  K AE1 M P - F ER0\nKAMPHAUS  K AE1 M P - HH AW2 S\nKAMPMAN  K AE1 M P - M AH0 N\nKAMPMANN  K AE1 M P - M AH0 N\nKAMPS  K AE1 M P S\nKAMPSCHULTE  K AE1 M P - SH UH2 L - T IY0\nKAMRA  K AE1 - M R AH0\nKAMRADT  K AE1 - M R AH0 T\nKAMRAN  K AE1 - M R AH0 N\nKAMRATH  K AE1 - M R AH0 TH\nKAMSTRA  K AE1 M - S T R AH0\nKAN  K AE1 N\nKANA  K AE1 - N AH0\nKANADE  K AH0 - N AA1 - D EY2\nKANADY  K AE1 - N AH0 - D IY0\nKANAGY  K AE1 - N AH0 - JH IY0\nKANAI  K AH0 - N AY1\nKANAK  K AE1 - N AH0 K\nKANAN  K EY1 - N AH0 N\nKANAREK  K AE1 - N ER0 - IH0 K\nKANAWA  K AA2 - N AA1 - W AH0\nKANAWHA  K AH0 - N AO1 - HH AH0\nKANAZAWA  K AA2 - N AA0 - Z AA1 - W AH0\nKANDA  K AE1 N - D AH0\nKANDAHAR  K AE1 N - D AH0 - HH AA0 R\nKANDEL  K AE1 N - D AH0 L\nKANDLER  K AE1 N D - L ER0\nKANDT  K AE1 N T\nKANE  K EY1 N\nKANE'S  K EY1 N Z\nKANEB  K AE1 - N AH0 B\nKANEGSBERG  K AE1 - N AH0 G Z - B ER0 G\nKANEKO  K AA0 - N EY1 - K OW0\nKANEMARU  K AE2 - N EH0 - M AA1 - R UW0\nKANEMARU'S  K AA2 - N EY0 - M AA1 - R UW0 Z\nKANER  K EY1 - N ER0\nKANESHIRO  K AA0 - N EY0 - SH IH1 - R OW0\nKANEY  K EY1 - N IY0\nKANG  K AE1 NG\nKANG(2)  K AA1 NG\nKANGAROO  K AE2 NG - G ER0 - UW1\nKANGAROOS  K AE2 NG - G ER0 - UW1 Z\nKANGAS  K AE1 NG - G AH0 Z\nKANGHUA  K AE1 NG - HH Y UW0 - AH0\nKANGYO  K AE1 N - JH Y OW0\nKANIA  K AA0 - N IY1 - AH0\nKANIEWSKI  K AA0 - N IY0 - EH1 F S - K IY0\nKANIEWSKI(2)  K AA0 - N IY0 - UW1 S - K IY0\nKANIPE  K AE1 - N IH0 P\nKANIS  K AE1 - N IH0 S\nKANITZ  K AE1 - N IH0 T S\nKANJI  K AE1 N - JH IY0\nKANJORSKI  K AH0 N - JH AO1 R S - K IY0\nKANKA  K AE1 N - K AH0\nKANKA(2)  K AE1 NG - K AH0\nKANKAKEE  K AE1 NG - K IH0 - K IY0\nKANKAKU  K AA2 N - K AA1 - K UW0\nKANN  K AE1 N\nKANNAN  K AA1 - N AH0 N\nKANNE  K AE1 N\nKANNENBERG  K AE1 - N AH0 N - B ER0 G\nKANNER  K AE1 - N ER0\nKANNO  K AE1 - N OW0\nKANO  K AA1 - N OW0\nKANODE  K AH0 - N OW1 D\nKANON  K EY1 - N AH0 N\nKANOUSE  K AA0 - N OW0 - UW1 - S EY0\nKANSAI  K AE0 N - S AY1\nKANSALLIS  K AE2 N - S AE1 - L IH0 S\nKANSAN  K AE1 N - Z AH0 N\nKANSAN'S  K AE1 N - Z AH0 N Z\nKANSANS  K AE1 N - Z AH0 N Z\nKANSANS'  K AE1 N - Z AH0 N Z\nKANSAS  K AE1 N - Z AH0 S\nKANSAS'  K AE1 N - Z AH0 S\nKANSAS'S  K AE1 N - Z AH0 - S IH0 Z\nKANSIAN  K AE1 N - Z IY0 - AH0 N\nKANT  K AE1 N T\nKANTER  K AE1 N - T ER0\nKANTER'S  K AE1 N - T ER0 Z\nKANTIAN  K AE1 N - T IY0 - AH0 N\nKANTNER  K AE1 N T - N ER0\nKANTOLA  K AH0 N - T OW1 - L AH0\nKANTOR  K AE1 N - T ER0\nKANTOR'S  K AE1 N - T ER0 Z\nKANTOR'S(2)  K AE1 N - T AO0 R Z\nKANTROWITZ  K AE1 N - T R AH0 - W IH0 T S\nKANTZ  K AE1 N T S\nKANZ  K AE1 N Z\nKANZI  K AA1 N - Z IY0\nKANZLER  K AE1 N Z - L ER0\nKAO  K AW1\nKAO(2)  K EY1 - OW2\nKAOHSIUNG  K EY2 - OW1 - S IY0 - AH0 NG\nKAOLIN  K AW1 - L IH0 N\nKAOLIN(2)  K EY1 - OW0 - L IH0 N\nKAORI  K AO1 - R IY0\nKAPAUN  K AE1 - P AW0 N\nKAPFER  K AE1 P - F ER0\nKAPINOS  K AE1 - P IH0 - N OW0 Z\nKAPINOS(2)  K AE1 - P IY0 - N OW0 Z\nKAPITAN  K AE1 - P IH0 - T AH0 N\nKAPLAIN  K AE1 P - L AH0 N\nKAPLAIN'S  K AE1 P - L AH0 N Z\nKAPLAN  K AE1 P - L AH0 N\nKAPLAN'S  K AE1 P - L AH0 N Z\nKAPLER  K EY1 - P AH0 - L ER0\nKAPLER(2)  K EY1 P - L ER0\nKAPLIN  K AE1 P - L IH0 N\nKAPLOW  K AE1 - P L OW0\nKAPLOWITZ  K AA1 - P L AH0 - W IH0 T S\nKAPNER  K AE1 P - N ER0\nKAPNICK  K AE1 P - N IH0 K\nKAPOOR  K AH0 - P UW1 R\nKAPOR  K EY1 - P ER0\nKAPOSI  K AH0 - P OW1 - S IY0\nKAPOSI'S  K AH0 - P OW1 - S IY0 Z\nKAPP  K AE1 P\nKAPPA  K AE1 - P AH0\nKAPPEL  K AE1 - P AH0 L\nKAPPELER  K AE1 - P AH0 - L ER0\nKAPPELMAN  K AE1 - P AH0 L - M AH0 N\nKAPPER  K AE1 - P ER0\nKAPPES  K AE1 P S\nKAPPLER  K AE1 P - L ER0\nKAPPUS  K AE1 - P AH0 S\nKAPRAL  K AE1 - P R AH0 L\nKAPRAYOON  K AE1 - P R AH0 - Y UW0 N\nKAPS  K AE1 P S\nKAPTON  K AE1 P - T AH0 N\nKAPTUR  K AE1 P - T ER0\nKAPUR  K AE1 - P ER0\nKAPUSCINSKI  K AH0 - P AH0 S - CH IH1 N - S K IY0\nKAPUSTA  K AH0 - P AH1 - S T AH0\nKARA  K EH1 - R AH0\nKARABAKH  K EH1 - R AH0 - B AE0 K\nKARABIN  K AA0 - R AA1 - B IY0 N\nKARACHI  K AA0 - R AA1 - CH IY0\nKARADZIC  K AA0 - R AA1 - JH IH0 K\nKARADZIC'S  K AA0 - R AA1 - JH IH0 K S\nKARAFFA  K AE1 - R AH0 - F AH0\nKARAJAN  K EH1 - R AH0 - JH AH0 N\nKARAM  K AE1 - R AH0 M\nKARAMI  K ER0 - AA1 - M IY0\nKARAN  K EH1 - R AH0 N\nKARAN'S  K EH1 - R AH0 N Z\nKARANICKI  K EH2 - R AH0 - N IH1 - K IY0\nKARANITSKI  K EH2 - R AH0 - N IH1 T S - K IY0\nKARAOKE  K EH2 - R IY0 - OW1 - K IY0\nKARAS  K AA1 - R AH0 Z\nKARASAWA  K AA2 - R AH0 - S AA1 - W AH0\nKARASEK  K ER0 - AA1 - S EH0 K\nKARASIK  K ER0 - AA1 - S IH0 K\nKARAT  K EH1 - R AH0 T\nKARATE  K ER0 - AA1 - T IY0\nKARATIRM  K ER1 - AH0 - T ER0 M\nKARATSU  K ER0 - AE1 T - S UW1\nKARATZ  K EH1 - R AH0 T S\nKARBAN  K AA1 R - B AH0 N\nKARBASSIOUN  K AA2 R - B AE1 - S IY0 - UW2 N\nKARBER  K AA1 R - B ER0\nKARBOWSKI  K ER0 - B AO1 F S - K IY0\nKARCH  K AA1 R K\nKARCHER  K AA1 R - CH ER0\nKARCZ  K AA1 R CH\nKARCZEWSKI  K ER0 - CH EH1 F S - K IY0\nKARDASHIAN  K AA1 - D AH0 - SH EY2 N\nKARDASHIAN'S  K AA1 - D AH0 - SH EY2 N Z\nKARDELL  K AA1 R - D AH0 L\nKARDOS  K AA1 R - D OW0 Z\nKAREEM  K ER0 - IY1 M\nKAREEM'S  K ER0 - IY1 M Z\nKAREL  K EH1 - R AH0 L\nKARELIAN  K ER0 - IY1 - L IY0 - AH0 N\nKARELS  K EH1 - R AH0 L Z\nKAREN  K EH1 - R AH0 N\nKAREN'S  K EH1 - R AH0 N Z\nKARENINA  K EH2 - R EH0 - N IY1 - N AH0\nKARENINA(2)  K AH0 - R EH1 - N IH0 - N AH0\nKARET  K EH1 - R AH0 T\nKARG  K AA1 R G\nKARGER  K AA1 R - G ER0\nKARGES  K AA1 R - JH IH0 Z\nKARGONAOV  K AA1 R - G AH0 - N AO2 V\nKARI  K EH1 - R IY0\nKARIBU  K EH2 - R IY1 - B UW0\nKARIM  K ER0 - IY1 M\nKARIMI  K AA0 - R IY1 - M IY0\nKARIN  K EH1 - R IH0 N\nKARINO  K EH2 - R IY1 - N OW0\nKARIOTIS  K AA2 - R IY0 - OW1 - T IH0 S\nKARIS  K EH1 - R IY0 Z\nKARL  K AA1 R L\nKARL'S  K AA1 R L Z\nKARLA  K AA1 R - L AH0\nKARLE  K AA1 - R AH0 L\nKARLEN  K AA1 R - L AH0 N\nKARLHEINZ  K AA1 R L - HH AY1 N Z\nKARLIK  K AA1 R - L IH0 K\nKARLIN  K AA1 R - L IH0 N\nKARLINE  K AA1 R - L AY2 N\nKARLOW  K AA1 R - L OW0\nKARLS  K AA1 R L Z\nKARLSEN  K AA1 R L - S AH0 N\nKARLSON  K AA1 R L - S AH0 N\nKARLSRUHE  K AA1 R L - Z R UW2\nKARLSSON  K AA1 R L - S AH0 N\nKARMA  K AA1 R - M AH0\nKARMAN  K AA1 R - M AH0 N\nKARN  K AA1 R N\nKARNAL  K AA1 R - N AH0 L\nKARNER  K AA1 R - N ER0\nKARNES  K AA1 R N Z\nKARNEY  K AA1 R - N IY0\nKARNICKI  K AA0 R - N IH1 - K IY0\nKARNOW  K AA1 R - N OW0\nKARNOW(2)  K AA1 R - N AW0\nKARNS  K AA1 R N Z\nKARNSUND  K AA1 R N - S AH0 N D\nKAROL  K EH1 - R AO0 L\nKAROLINA  K EH2 - R AH0 - L AY1 - N AH0\nKAROLINE  K EH1 - R AH0 - L AY2 N\nKAROLINSKA  K EH2 - R OW0 - L IH1 N - S K AH0\nKAROLY  K ER0 - OW1 - L IY0\nKAROLYI  K ER0 - OW1 - L Y IY0\nKAROLYN  K AE1 - R AH0 - L IH0 N\nKARON  K EH1 - R AH0 N\nKAROS  K AA1 - R OW0 S\nKAROUN  K ER0 - UW1 N\nKAROW  K AA1 - R OW0\nKARP  K AA1 R P\nKARPATKIN  K AA2 R - P AE1 T - K IH0 N\nKARPEL  K AA1 R - P AH0 L\nKARPEN  K AA1 R - P AH0 N\nKARPF  K AA1 R P F\nKARPINSKI  K ER0 - P IH1 N - S K IY0\nKARPOV  K AA1 R - P AA2 V\nKARPOWICZ  K AA1 R - P AH0 - V IH0 CH\nKARR  K AA1 R\nKARRAKER  K AA1 - R AH0 - K ER0\nKARRAS  K AE1 - R AH0 Z\nKARREN  K AE1 - R AH0 N\nKARRER  K AA1 - R ER0\nKARRICK  K AE1 - R IH0 K\nKARRIKER  K AE1 - R IH0 - K ER0\nKARRY  K EH1 - R IY0\nKARSH  K AA1 R SH\nKARSHNER  K AA1 R SH - N ER0\nKARSON  K AA1 R - S AH0 N\nKARST  K AA1 R S T\nKARSTADT  K AA1 R - S T AE2 T\nKARSTEN  K AA1 R - S T AH0 N\nKARSTENS  K AA1 R - S T AH0 N Z\nKARSTETTER  K AA1 R - S T IH0 - T ER0\nKARTASASMITA  K AA0 R - T AE2 - S AH0 S - M IY1 - T AH0\nKARTCHNER  K AA1 R CH - N ER0\nKARTER  K AA1 R - T ER0\nKARTES  K AA1 R T S\nKARUN  K ER0 - UW1 N\nKARVONEN  K AA1 R - V AH0 - N AH0 N\nKARWOSKI  K ER0 - V AW1 S - K IY0\nKARWOWSKI  K ER0 - V AO1 F S - K IY0\nKARY  K EH1 - R IY0\nKARYDAKIS  K EH2 - R IY0 - D AE1 - K IH0 S\nKARYN  K AE1 - R IH0 N\nKASABIAN  K AH0 - S EY1 - B IY0 - AH0 N\nKASAGIC  K AH0 - S AA1 - G IH0 K\nKASAL  K EY1 - S AH0 L\nKASCH  K AE1 SH\nKASCHAK  K AE1 - SH AH0 K\nKASDORF  K AE1 S - D AO0 R F\nKASE  K EY1 Z\nKASEL  K AE1 - S AH0 L\nKASELL  K AE1 - S AH0 L\nKASEMAN  K EY1 S - M AH0 N\nKASER  K EY1 - Z ER0\nKASESE  K AH0 - S IY1 - Z IY0\nKASEY  K AE1 - S IY0\nKASH  K AE1 SH\nKASHIWAGI  K AE2 - SH IH0 - W AE1 - G IY0\nKASHIWAHARA  K AA2 - SH IY0 - W AH0 - HH AA1 - R AH0\nKASHIWAHARA'S  K AA2 - SH IY0 - W AH0 - HH AA1 - R AH0 Z\nKASHIYAMA  K AA2 - SH IY0 - Y AA1 - M AH0\nKASHMIR  K AE1 SH - M IH0 R\nKASHMIR(2)  K AE1 SH - M IY0 R\nKASHMIRI  K AE0 SH - M IY1 - R IY0\nKASHNER  K AE1 SH - N ER0\nKASHOGGI  K AH0 - SH AA1 - JH IY0\nKASHUBA  K AH0 - SH UW1 - B AH0\nKASICH  K AA1 - S IH0 CH\nKASICH'S  K AA1 - S IH0 - CH IH0 Z\nKASICK  K AA1 - S IH0 K\nKASIK  K AA1 - S IH0 K\nKASINGA  K AH0 - S IH1 NG - G AH0\nKASINGA'S  K AH0 - S IH1 NG - G AH0 Z\nKASINGER  K AE1 - S IH0 N - JH ER0\nKASKA  K AA1 S - K AH0\nKASKE  K AE1 S - K IY0\nKASKEL  K AE1 S - K AH0 L\nKASLER  K AE1 - S AH0 - L ER0\nKASLER(2)  K AE1 S - L ER0\nKASMER  K AE1 - S AH0 - M ER0\nKASMIRA  K AH0 S - M AY1 - R AH0\nKASNER  K AE1 S - N ER0\nKASPAR  K AE1 - S P ER0\nKASPAREK  K AE1 - S P ER0 - IH0 K\nKASPARIAN  K AH0 - S P EH1 - R IY0 - AH0 N\nKASPAROV  K AE1 - S P ER0 - AA0 V\nKASPAROV(2)  K AH0 - S P AA1 - R AA2 V\nKASPER  K AE1 - S P ER0\nKASPEREK  K AE1 - S P ER0 - IH0 K\nKASPERSKI  K AH0 - S P ER1 S - K IY0\nKASPROWICZ  K AA1 S - P R AH0 - V IH0 CH\nKASPRZAK  K AA1 - S P ER0 - Z AH0 K\nKASPRZYK  K AA1 - S P ER0 - Z IH0 K\nKASPUTYS  K AE2 - S P Y UW1 - T IH0 S\nKASRIEL  K AE1 S - R IY0 - AH0 L\nKASS  K AE1 S\nKASSA  K AE1 - S AH0\nKASSAB  K AE1 - S AH0 B\nKASSAN  K AE1 - S AH0 N\nKASSAR  K AE1 - S ER0\nKASSEBAUM  K AE1 - S AH0 - B AW2 M\nKASSEBAUM'S  K AE1 - S AH0 - B AW2 M Z\nKASSEBAUM'S(2)  K AE1 - S AH0 - B AA2 M Z\nKASSEBAUM(2)  K AE1 - S AH0 - B AA2 M\nKASSEL  K AE1 - S AH0 L\nKASSEM  K AE1 - S AH0 M\nKASSEN  K AE1 - S AH0 N\nKASSIN  K AE1 - S IH0 N\nKASSING  K AE1 - S IH0 NG\nKASSIS  K AE1 - S IH0 S\nKASSLER  K AE1 S - L ER0\nKASSNER  K AE1 S - N ER0\nKASSON  K AE1 - S AH0 N\nKAST  K AE1 S T\nKASTEL  K EY1 - S T AH0 L\nKASTELIC  K AH0 - S T EH1 - L IH0 K\nKASTEN  K AE1 - S T AH0 N\nKASTENMEIER  K AE1 - S T AH0 N - M AY2 R\nKASTENS  K EY1 - S AH0 N Z\nKASTER  K AE1 - S T ER0\nKASTL  K AE1 - S T AH0 L\nKASTLE  K AE1 - S AH0 L\nKASTLER  K AE1 S T - L ER0\nKASTNER  K AE1 S T - N ER0\nKASUN  K AA1 - S UW0 N\nKASZA  K AA1 - SH AH0\nKASZUBA  K AH0 - SH UW1 - B AH0\nKAT  K AE1 T\nKATAOKA  K AA0 - T AA0 - OW1 - K AH0\nKATARINA  K AA2 - T ER0 - IY1 - N AH0\nKATARINA'S  K AA2 - T ER0 - IY1 - N AH0 Z\nKATASHIBA  K AE2 - T AH0 - SH IY1 - B AH0\nKATAYAMA  K AA0 - T AA0 - Y AA1 - M AH0\nKATAYAN  K AA1 - T AH0 - Y AA0 N\nKATCHER  K AE1 - CH ER0\nKATE  K EY1 T\nKATE'S  K EY1 T S\nKATEN  K EY1 - T AH0 N\nKATER  K EY1 - T ER0\nKATES  K EY1 T S\nKATEY  K EY1 - T IY0\nKATH  K AE1 TH\nKATHA  K AE1 - TH AH0\nKATHALENE  K AE0 - TH AH0 - L IY1 N\nKATHAN  K AE1 - TH AH0 N\nKATHARINA  K AE2 - TH EH0 - R IY1 - N AH0\nKATHARINE  K AE1 TH - R IH0 N\nKATHERINE  K AE1 - TH ER0 - IH0 N\nKATHERINE(2)  K AE1 TH - R IH0 N\nKATHI  K AE1 - TH IY0\nKATHIE  K AE1 - TH IY0\nKATHLEEN  K AE0 TH - L IY1 N\nKATHLEEN'S  K AE0 TH - L IY1 N Z\nKATHLENE  K AE1 TH - L IY2 N\nKATHLINE  K AE1 TH - L AY2 N\nKATHMAN  K AE1 TH - M AH0 N\nKATHRYN  K AE1 TH - R IH0 N\nKATHY  K AE1 - TH IY0\nKATHY'S  K AE1 - TH IY0 Z\nKATI  K EY1 - T IY0\nKATIA  K AA1 - T IY0 - AH0\nKATIE  K EY1 - T IY0\nKATJA  K AA1 - T Y AH0\nKATMANDU  K AE2 T - M AE0 N - D UW1\nKATO  K EY1 - T OW0\nKATO'S  K EY1 - T OW0 Z\nKATONA  K AA0 - T OW1 - N AH0\nKATRAGADDA  K AA2 - T R AH0 - G AA1 - D AH0\nKATRINA  K AH0 - T R IY1 - N AH0\nKATS  K AE1 T S\nKATSANOS  K AE2 T - S AA1 - N OW0 S\nKATSAROS  K AE1 T - S ER0 - OW0 Z\nKATSUHIKO  K AA2 T - S UW0 - HH IY1 - K OW0\nKATSUMI  K AA2 T - S UW1 - M IY0\nKATSUSHI  K AE2 T - S UW1 - SH IY0\nKATT  K AE1 T\nKATTNER  K AE1 T - N ER0\nKATUNI  K AH0 - T UW1 - N IY0\nKATY  K EY1 - T IY0\nKATYA  K AA1 - T Y AH0\nKATYDID  K EY1 - T IY0 - D IH2 D\nKATYN  K EY1 - T IH2 N\nKATYN(2)  K EY1 - T AH0 N\nKATYN(3)  K AH0 - T IY1 N\nKATYUSHA  K AH0 - T Y UW1 - SH AH0\nKATYUSHAS  K AH0 - T Y UW1 - SH AH0 Z\nKATZ  K AE1 T S\nKATZEN  K AE1 T - Z AH0 N\nKATZENBACH  K AE1 T - S AH0 N - B AA2 K\nKATZENBERG  K AE1 T - S AH0 N - B ER0 G\nKATZENBERG'S  K AE1 T - S AH0 N - B ER0 G Z\nKATZENBERGER  K AE1 T - Z AH0 N - B ER0 - G ER0\nKATZENSTEIN  K AE1 T - S AH0 N - S T AY0 N\nKATZENSTEIN(2)  K AE1 T - S AH0 N - S T IY0 N\nKATZER  K AE1 T - S ER0\nKATZIN  K AE1 T - S IH0 N\nKATZMAN  K AE1 T S - M AH0 N\nKAU  K AW1\nKAUAI  K AW1 - AY2\nKAUBLE  K AO1 - B AH0 L\nKAUCHER  K AW1 - K ER0\nKAUER  K AW1 - ER0\nKAUFER  K AO1 - F ER0\nKAUFFMAN  K AO1 F - M AH0 N\nKAUFFMANN  K AO1 F - M AH0 N\nKAUFHOF  K AO1 F - HH AO0 F\nKAUFHOLD  K AW1 F - HH OW0 L D\nKAUFMAN  K AO1 F - M AH0 N\nKAUFMAN'S  K AO1 F - M AH0 N Z\nKAUFMANN  K AO1 F - M AH0 N\nKAUK  K AO1 K\nKAUL  K AO1 L\nKAUNDA  K AO1 N - D AH0\nKAUP  K AO1 P\nKAUPP  K AO1 P\nKAUPPI  K AO1 - P IY0\nKAUS  K AO1 Z\nKAUSCH  K AW1 SH\nKAUTH  K AO1 TH\nKAUTZ  K AO1 T S\nKAUTZMAN  K AW1 T S - M AH0 N\nKAUZLARICH  K AW1 Z - L ER0 - IH0 K\nKAVAN  K EY1 - V AH0 N\nKAVANAGH  K AE1 - V AH0 - N AO2\nKAVANAUGH  K AE1 - V AH0 - N AO2\nKAVENEY  K AE1 - V IH0 - N IY0\nKAVNER  K AE1 V - N ER0\nKAVNER(2)  K AO1 V - N ER0\nKAWA  K AA1 - W AH0\nKAWAGUCHI  K AA2 - W AA0 - G UW1 - CH IY0\nKAWAHARA  K AA2 - W AA0 - HH AA1 - R AH0\nKAWAI  K AA0 - W AA1 - IY0\nKAWAKAMI  K AA2 - W AA0 - K AA1 - M IY0\nKAWAMOTO  K AA0 - W AA0 - M OW1 - T OW0\nKAWAMURA  K AW2 - AA0 - M UH1 - R AH0\nKAWANO  K AA0 - W AA1 - N OW0\nKAWASAKI  K AA2 - W AA0 - S AA1 - K IY0\nKAWASHIMA  K AA2 - W AA0 - SH IY1 - M AH0\nKAWASMI  K AH0 - W AA1 S - M IY0\nKAWATE  K AA2 - W AA1 - T EY2\nKAWECKI  K AA0 - V EH1 T S - K IY0\nKAWESKE  K AA0 - V EH1 S - K IY0\nKAWESKE(2)  K AH0 - W EH1 S - K IY0\nKAY  K EY1\nKAY'S  K EY1 Z\nKAYA  K AA1 - Y AH0\nKAYAK  K AY1 - AE0 K\nKAYAKING  K AY1 - AE2 - K IH0 NG\nKAYAKS  K AY1 - AE0 K S\nKAYAPO  K AY1 - AH0 - P OW2\nKAYDON  K EY1 - D AH0 N\nKAYE  K EY1\nKAYES  K EY1 Z\nKAYLA  K EY1 - L AH0\nKAYLIE  K EY1 - L IY0\nKAYLOR  K EY1 - L ER0\nKAYLYNN  K EY0 - L IH1 N\nKAYNE  K EY1 N\nKAYO  K EY0 - OW1\nKAYPRO  K EY1 - P R OW0\nKAYS  K EY1 Z\nKAYSER  K EY1 - Z ER0\nKAYSERSBERG  K AY1 - Z ER0 Z - B ER0 G\nKAYVON  K EY1 - V AA0 N\nKAZAKH  K AE1 - Z AE0 K\nKAZAKHS  K AE1 - Z AE0 K S\nKAZAKHSTAN  K AA2 - Z AA0 K - S T AA1 N\nKAZAKHSTAN'S  K AA2 - Z AA0 K - S T AA1 N Z\nKAZAKHSTAN'S(2)  K AH0 - Z AE2 K - S T AE1 N Z\nKAZAKHSTAN(2)  K AH0 - Z AE2 K - S T AE1 N\nKAZAN  K EY1 - Z AH0 N\nKAZANJIAN  K AH0 - Z AE1 N - JH IY0 - AH0 N\nKAZARIAN  K AH0 - Z EH1 - R IY0 - AH0 N\nKAZARIAN'S  K AH0 - Z EH1 - R IY0 - AH0 N Z\nKAZDA  K AA1 Z - D AH0\nKAZEE  K AA1 - Z IY0\nKAZEMPOUR  K AH0 - Z EH1 M - P AW0 R\nKAZEN  K AE1 - Z AH0 N\nKAZIKAEV  K AE1 - Z IH0 - K EY2 V\nKAZIN  K EY1 - Z IH0 N\nKAZIS  K AE1 - Z IH0 S\nKAZLAUSKAS  K AE1 Z - L AW0 S - K AH0 Z\nKAZMER  K AE1 Z - M ER0\nKAZMIERCZAK  K AA1 Z - M IH0 R - CH AE0 K\nKAZMIERSKI  K AH0 Z - M IH1 R - S K IY0\nKAZOO  K AH0 - Z UW1\nKAZUHIKO  K AA2 - Z UW0 - HH IY1 - K OW0\nKAZUO  K AA2 - Z UW1 - OW0\nKCAL  K EY1 - K AA0 L\nKCOP  K EY1 - K AO0 P\nKEA  K IY1\nKEACH  K IY1 CH\nKEADLE  K IY1 - D AH0 L\nKEADY  K IY1 - D IY0\nKEAGAN  K IY1 - G AH0 N\nKEAGLE  K IY1 - G AH0 L\nKEAGY  K IY1 - JH IY0\nKEAHEY  K IY1 - HH IY0\nKEAL  K IY1 L\nKEALEY  K IY1 - L IY0\nKEALY  K IY1 - L IY0\nKEAN  K IY1 N\nKEAN'S  K IY1 N Z\nKEANE  K IY1 N\nKEANEY  K IY1 - N IY0\nKEANU  K IY0 - AA1 - N UW0\nKEANU(2)  K EY0 - AA1 - N UW0\nKEAR  K IH1 R\nKEARBY  K ER1 - B IY0\nKEARFOTT  K IH1 R - F AA0 T\nKEARLEY  K ER1 - L IY0\nKEARN  K ER1 N\nKEARNEY  K ER1 - N IY0\nKEARNEY'S  K ER1 - N IY0 Z\nKEARNS  K ER1 N Z\nKEARNY  K ER1 - N IY0\nKEARSARGE  K IY1 R - S AA0 R JH\nKEARSE  K ER1 S\nKEARY  K IH1 - R IY0\nKEAS  K IY1 Z\nKEASLER  K IY1 Z - L ER0\nKEASLING  K IY1 Z - L IH0 NG\nKEAST  K IY1 S T\nKEATH  K IY1 TH\nKEATHLEY  K IY1 TH - L IY0\nKEATHLEY'S  K IY1 TH - L IY0 Z\nKEATING  K IY1 - T IH0 NG\nKEATING'S  K IY1 - T IH0 NG Z\nKEATLEY  K IY1 T - L IY0\nKEATON  K IY1 - T AH0 N\nKEATOR  K IY1 - T ER0\nKEATS  K IY1 T S\nKEATTS  K IY1 T S\nKEAVENEY  K IY1 - V IH0 - N IY0\nKEAVENY  K IY1 - V IH0 - N IY0\nKEAY  K IY1 - IY0\nKEBAB-N-KURRY  K IH0 - B AA1 - B AH0 N - K ER1 - IY0\nKECK  K EH1 K\nKECKLER  K EH1 K - L ER0\nKEDAR  K IY1 - D ER0\nKEDDY  K EH1 - D IY0\nKEDO  K EH1 - D OW0\nKEDROWSKI  K IH0 D - R AO1 F S - K IY0\nKEDS  K EH1 D Z\nKEDZIERSKI  K IH0 - JH IH1 R S - K IY0\nKEE  K IY1\nKEE'S  K IY1 Z\nKEEBLE  K IY1 - B AH0 L\nKEEBLER  K IY1 - B L ER0\nKEECH  K IY1 CH\nKEEDY  K IY1 - D IY0\nKEEF  K IY1 F\nKEEFE  K IY1 F\nKEEFER  K IY1 - F ER0\nKEEFFE  K IY1 F\nKEEGALI  K IY2 - G AA1 - L IY0\nKEEGALI'S  K IY2 - G AA1 - L IY0 Z\nKEEGAN  K IY1 - G AH0 N\nKEEHAN  K IY1 - AH0 N\nKEEHN  K IY1 N\nKEEHNER  K IY1 - N ER0\nKEEL  K IY1 L\nKEELAN  K IY1 - L AH0 N\nKEELE  K IY1 L\nKEELER  K IY1 - L ER0\nKEELEY  K IY1 - L IY0\nKEELIN  K IY1 - L IH0 N\nKEELING  K IY1 - L IH0 NG\nKEELS  K IY1 L Z\nKEELSON  K EH1 L - S AH0 N\nKEELY  K IY1 - L IY0\nKEEN  K IY1 N\nKEENA  K IY1 - N AH0\nKEENAN  K IY1 - N AH0 N\nKEENE  K IY1 N\nKEENELAND  K IY1 - N AH0 - L AH0 N D\nKEENER  K IY1 - N ER0\nKEENEST  K IY1 - N AH0 S T\nKEENEY  K IY1 - N IY0\nKEENLY  K IY1 N - L IY0\nKEENUM  K IY1 - N AH0 M\nKEENY  K IY1 - N IY0\nKEEP  K IY1 P\nKEEPER  K IY1 - P ER0\nKEEPERS  K IY1 - P ER0 Z\nKEEPING  K IY1 - P IH0 NG\nKEEPS  K IY1 P S\nKEEPSAKE  K IY1 P - S EY2 K\nKEEPSAKES  K IY1 P - S EY2 K S\nKEERAN  K IH1 - R AH0 N\nKEES  K IY1 Z\nKEESE  K IY1 Z\nKEESEE  K IY0 - S IY1\nKEESEY  K IY1 - S IY0\nKEESLER  K IY1 Z - L ER0\nKEESLING  K IY1 Z - L IH0 NG\nKEETCH  K IY1 CH\nKEETER  K IY1 - T ER0\nKEETH  K IY1 TH\nKEETON  K IY1 - T AH0 N\nKEEVER  K IY1 - V ER0\nKEEVIL  K IY1 - V AH0 L\nKEEZER  K IY1 - Z ER0\nKEFAUVER  K EH1 - F AW0 - V ER0\nKEFFER  K EH1 - F ER0\nKEG  K EH1 G\nKEGEL  K EH1 - JH AH0 L\nKEGG  K EH1 G\nKEGLER  K EH1 G - L ER0\nKEGLEY  K EH1 G - L IY0\nKEGS  K EH1 G Z\nKEHL  K EH1 L\nKEHLER  K EH1 - L ER0\nKEHM  K EH1 M\nKEHN  K EH1 N\nKEHNE  K EH1 N\nKEHOE  K EH1 - HH OW0\nKEHR  K EH1 R\nKEHRER  K EH1 - R ER0\nKEHRES  K EH1 R Z\nKEICHER  K AY1 - K ER0\nKEIDANREN  K AY2 - D AE1 - N R AH0 N\nKEIDEL  K AY1 - D AH0 L\nKEIFER  K IY1 - F ER0\nKEIFFER  K IY1 - F ER0\nKEIGLEY  K IY1 G - L IY0\nKEIICHI  K EY2 - IY1 - CH IY0\nKEIJI  K IY1 - JH IY0\nKEIKO  K EY1 - K OW0\nKEIL  K IY1 L\nKEILLOR  K IY1 - L ER0\nKEILLOR'S  K IY1 - L ER0 Z\nKEILMAN  K AY1 L - M AH0 N\nKEIM  K IY1 M\nKEIMIG  K IY1 - M IH0 G\nKEINATH  K AY1 - N AH0 TH\nKEINER  K IY1 - N ER0\nKEIO  K EY1 - OW0\nKEIPER  K IY1 - P ER0\nKEIR  K IY1 R\nKEIRETSU  K IH2 - R EH1 T - S UW0\nKEIRN  K IH1 R N\nKEIRNS  K AY1 R N Z\nKEIRSEY  K IH1 R - S IY0\nKEISEI  K AY1 - S EY2\nKEISER  K AY1 - S ER0\nKEISLER  K AY1 - S AH0 - L ER0\nKEISLER(2)  K AY1 S - L ER0\nKEISLING  K AY1 - S AH0 - L IH0 NG\nKEISLING(2)  K AY1 - S L IH0 NG\nKEISTER  K IY1 - IH0 - S T ER0\nKEISUKE  K EY2 - S UW1 - K IY0\nKEITEL  K AY1 - T AH0 L\nKEITER  K IY1 - T ER0\nKEITH  K IY1 TH\nKEITH'S  K IY1 TH S\nKEITHLEY  K IY1 TH - L IY0\nKEITHLY  K IY1 TH - L IY0\nKEITT  K IY1 T\nKEITZ  K IY1 T S\nKEIZAI  K IY1 - Z EY0\nKEIZER  K AY1 - Z ER0\nKEIZER(2)  K IY1 - Z ER0\nKEKST  K EH1 K S T\nKELBAUGH  K EH1 L - B AO2\nKELBER  K EH1 L - B ER0\nKELBERG  K EH1 L - B ER0 G\nKELBERG'S  K EH1 L - B ER0 G Z\nKELBY  K EH1 L - B IY0\nKELCEY  K EH1 L - S IY0\nKELCH  K EH1 L CH\nKELCHNER  K EH1 L K - N ER0\nKELDA  K EH1 L - D AH0\nKELDER  K EH1 L - D ER0\nKELEHER  K EH1 - L IH0 - HH ER0\nKELEMAN  K IY1 L - M AH0 N\nKELEMEN  K IY1 L - M EH0 N\nKELKER  K EH1 L - K ER0\nKELL  K EH1 L\nKELLAM  K EH1 - L AH0 M\nKELLAMS  K EH1 - L AH0 M Z\nKELLAN  K EH1 - L AH0 N\nKELLAR  K EH1 - L ER0\nKELLEHER  K EH1 - L IH0 - HH ER0\nKELLEMS  K EH1 - L IH0 M Z\nKELLEN  K EH1 - L AH0 N\nKELLENBERGER  K EH1 - L AH0 N - B ER0 - G ER0\nKELLENYI  K EH2 - L EH1 - N Y IY0\nKELLER  K EH1 - L ER0\nKELLER'S  K EH1 - L ER0 Z\nKELLERMAN  K EH1 - L ER0 - M AH0 N\nKELLERMANN  K EH1 - L ER0 - M AH0 N\nKELLETT  K EH1 - L IH0 T\nKELLEY  K EH1 - L IY0\nKELLEY'S  K EH1 - L IY0 Z\nKELLEY(2)  OW0 - K EH1 - L IY0\nKELLI  K EH1 - L IY0\nKELLI'S  K EH1 - L IY0 Z\nKELLIHER  K EH1 - L IH0 - HH ER0\nKELLING  K EH1 - L IH0 NG\nKELLIS  K EH1 - L IH0 S\nKELLISON  K EH1 - L IH0 - S AH0 N\nKELLMAN  K EH1 L - M AH0 N\nKELLNER  K EH1 L - N ER0\nKELLOGG  K EH1 - L AO0 G\nKELLOGG'S  K EH1 - L AO0 G Z\nKELLOGGS  K EH1 - L AO0 G Z\nKELLOUGH  K EH1 - L AW0\nKELLOW  K EH1 - L OW0\nKELLS  K EH1 L Z\nKELLUM  K EH1 - L AH0 M\nKELLWOOD  K EH1 L - W UH2 D\nKELLY  K EH1 - L IY0\nKELLY'S  K EH1 - L IY0 Z\nKELLYANNE  K EH1 - L IY0 - AE1 N\nKELLYS  K EH1 - L IY0 Z\nKELM  K EH1 L M\nKELMAN  K EH1 L - M AH0 N\nKELNER  K EH1 L - N ER0\nKELNHOFER  K EH1 L N - HH AH0 - F ER0\nKELP  K EH1 L P\nKELPS  K EH1 L P S\nKELSALL  K EH1 L - S AH0 L\nKELSAY  K EH1 L - S EY0\nKELSCH  K EH1 L SH\nKELSEY  K EH1 L - S IY0\nKELSO  K EH1 L - S OW0\nKELSO'S  K EH1 L - S OW0 Z\nKELSOE  K EH1 L - S OW0\nKELSON  K EH1 L - S AH0 N\nKELTER  K EH1 L - T ER0\nKELTING  K EH1 L - T IH0 NG\nKELTNER  K EH1 L T - N ER0\nKELTON  K EH1 L - T AH0 N\nKELTY  K EH1 L - T IY0\nKELTZ  K EH1 L T S\nKELVAN  K EH1 L - V AH0 N\nKELVEN  K EH1 L - V AH0 N\nKELVIN  K EH1 L - V AH0 N\nKELVIN'S  K EH1 L - V IH0 N Z\nKELVIN(2)  K EH1 L - V IH0 N\nKEM  K EH1 M\nKEMAL  K AH0 - M AA1 L\nKEMBEL  K EH1 M - B AH0 L\nKEMBLE  K EH1 M - B AH0 L\nKEMENY  K EH1 - M IH0 - N IY0\nKEMERER  K EH1 - M ER0 - ER0\nKEMERY  K EH1 - M ER0 - IY0\nKEMLER  K EH1 M - L ER0\nKEMMER  K EH1 - M ER0\nKEMMERER  K EH1 - M ER0 - ER0\nKEMMERLING  K EH1 - M ER0 - L IH0 NG\nKEMMONS  K EH1 - M AH0 N Z\nKEMNER  K EH1 M - N ER0\nKEMNITZ  K EH1 M - N IH0 T S\nKEMP  K EH1 M P\nKEMP'S  K EH1 M P S\nKEMPA  K EH1 M - P AH0\nKEMPE  K EH1 M P\nKEMPEL  K EH1 M - P AH0 L\nKEMPEN  K EH1 M - P AH0 N\nKEMPER  K EH1 M - P ER0\nKEMPER'S  K EH1 M - P ER0 Z\nKEMPF  K EH1 M P F\nKEMPFER  K EH1 M P - F ER0\nKEMPKE  K EH1 M P K\nKEMPKER  K EH1 M P - K ER0\nKEMPLE  K EH1 M - P AH0 L\nKEMPLER  K EH1 M - P L ER0\nKEMPLIN  K EH1 M - P L IH0 N\nKEMPNER  K EH1 M P - N ER0\nKEMPPAINEN  K EH1 M - P AY0 - N AH0 N\nKEMPSKI  K EH1 M P - S K IY0\nKEMPSON  K EH1 M P - S AH0 N\nKEMPSTER  K EH1 M P - S T ER0\nKEMPTHORNE  K EH1 M P - TH AO0 R N\nKEMPTON  K EH1 M P - T AH0 N\nKEMRON  K EH1 M - R AH0 N\nKEN  K EH1 N\nKEN'S  K EH1 N Z\nKENAF  K EH1 - N AE0 F\nKENAGY  K EH1 - N AH0 - JH IY0\nKENAN  K IY1 - N AH0 N\nKENDAL  K EH1 N - D AH0 L\nKENDALL  K EH1 N - D AH0 L\nKENDALL'S  K EH1 N - D AH0 L Z\nKENDAVIS  K EH1 N - D EY1 - V IH0 S\nKENDELL  K EH1 N - D AH0 L\nKENDER  K EH1 N - D ER0\nKENDIG  K EH1 N - D IH0 G\nKENDLE  K EH1 N - D AH0 L\nKENDRA  K EH1 N - D R AH0\nKENDRICK  K EH1 N - D R IH0 K\nKENDRICKS  K EH1 N - D R IH0 K S\nKENDZIERSKI  K IH0 N - JH IH1 R - S K IY0\nKENDZIOR  K IH0 N - JH IY1 - ER0\nKENEALY  K EH1 - N IY0 - AH0 - L IY0\nKENEER  K AH0 - N IY1 R\nKENEFICK  K EH1 - N IH0 - F IH0 K\nKENERSON  K EH1 - N ER0 - S AH0 N\nKENESSET  K EH0 - N EH1 - S EH0 T\nKENESSET(2)  K N EH1 - S EH0 T\nKENETECH  K EH1 - N IH0 - T EH0 K\nKENFIELD  K EH1 N - F IY2 L D\nKENICHI  K EH2 - N IY1 - CH IY0\nKENILWORTH  K EH1 - N AH0 L - W ER2 TH\nKENISON  K EH1 - N IH0 - S AH0 N\nKENISTON  K EH1 - N IH0 - S T AA0 N\nKENJI  K EH1 N - JH IY0\nKENKEL  K EH1 NG - K AH0 L\nKENLEY  K EH1 N - L IY0\nKENMARE  K EH2 N - M EH1 R\nKENMORE  K EH1 N - M AO2 R\nKENN  K EH1 N\nKENNA  K EH1 - N AH0\nKENNAMER  K EH1 - N AH0 - M ER0\nKENNAMETAL  K EH1 - N AH0 - M EH2 - T AH0 L\nKENNAN  K EH1 - N AH0 N\nKENNARD  K EH1 - N ER0 D\nKENNEALLY  K EH1 - N AH0 - L IY0\nKENNEBECK  K EH1 N - B EH0 K\nKENNEBREW  K EH1 - N IH0 - B R UW0\nKENNEBUNKPORT  K EH2 - N AH0 - B AH1 NG K - P AO2 R T\nKENNECOTT  K EH1 - N AH0 - K AA2 T\nKENNEDY  K EH1 - N AH0 - D IY0\nKENNEDY'S  K EH1 - N AH0 - D IY0 Z\nKENNEDYS  K EH1 - N AH0 - D IY0 Z\nKENNEDYS'  K EH1 - N AH0 - D IY0 Z\nKENNEL  K EH1 - N AH0 L\nKENNELL  K EH1 - N AH0 L\nKENNELLY  K EH1 - N AH0 - L IY0\nKENNELS  K EH1 - N AH0 L Z\nKENNEMER  K EH1 - N IY0 - M ER0\nKENNEMORE  K EH1 N - M AO0 R\nKENNER  K EH1 - N ER0\nKENNER'S  K EH1 - N ER0 Z\nKENNERLY  K EH1 - N ER0 - L IY0\nKENNERSON  K EH1 - N ER0 - S AH0 N\nKENNESAW  K EH1 - N AH0 - S AO2\nKENNETH  K EH1 - N IH0 TH\nKENNETT  K EH1 - N AH0 T\nKENNEY  K EH1 - N IY0\nKENNING  K EH1 - N IH0 NG\nKENNINGTON  K EH1 - N IH0 NG - T AH0 N\nKENNISON  K EH1 - N IH0 - S AH0 N\nKENNON  K EH1 - N AH0 N\nKENNY  K EH1 - N IY0\nKENO  K IY1 - N OW0\nKENOSHA  K IH0 - N OW1 - SH AH0\nKENOYER  K EH1 - N OY0 - ER0\nKENRICK  K EH1 N - R IH0 K\nKENSINGER  K EH1 N - S IH0 N - JH ER0\nKENSINGTON  K EH1 N - Z IH0 NG - T AH0 N\nKENSLER  K EH1 N - S AH0 - L ER0\nKENSLER(2)  K EH1 N - S L ER0\nKENT  K EH1 N T\nKENT'S  K EH1 N T S\nKENTE  K EH1 N - T EY0\nKENTNER  K EH1 N T - N ER0\nKENTON  K EH1 N - T AH0 N\nKENTUCKIAN  K EH2 N - T AH1 - K IY0 - AH0 N\nKENTUCKIANS  K EH2 N - T AH1 - K IY0 - AH0 N Z\nKENTUCKY  K AH0 N - T AH1 - K IY0\nKENTUCKY'S  K AH0 N - T AH1 - K IY0 Z\nKENWARD  K EH1 N - W ER0 D\nKENWAY  K EH1 N - W EY2\nKENWOOD  K EH1 N - W UH2 D\nKENWORTH  K EH1 N - W ER2 TH\nKENWORTHY  K EH1 N - W ER2 - DH IY0\nKENYA  K EH1 - N Y AH0\nKENYA'S  K EH1 - N Y AH0 Z\nKENYA'S(2)  K IY1 - N Y AH0 Z\nKENYA(2)  K IY1 - N Y AH0\nKENYAN  K EH1 - N Y AH0 N\nKENYAN(2)  K IY1 - N Y AH0 N\nKENYANS  K EH1 - N Y AH0 N Z\nKENYANS(2)  K IY1 - N Y AH0 N Z\nKENYEN  K EH1 - N Y AH0 N\nKENYON  K EH1 - N Y AH0 N\nKENZIE  K EH1 N - Z IY0\nKENZO  K EH1 N - Z OW0\nKEO  K IY1 - OW0\nKEOGH  K IY1 - OW0\nKEOGH(2)  K IY1 - AW0 G\nKEOHANE  K IY1 - AH0 - HH EY2 N\nKEOKUK  K IY1 - OW0 - K AH0 K\nKEOKUK(2)  K IY1 - OW0 - K UH0 K\nKEOUGH  K IY1 - OW0\nKEOUGH(2)  K IY1 - AW0 G\nKEOWN  K IY1 - OW0 N\nKEPCO  K EH1 P - K OW0\nKEPHART  K EH1 - F AA0 R T\nKEPLER  K EH1 P - L ER0\nKEPLEY  K EH1 P - L IY0\nKEPLINGER  K EH1 - P AH0 L - IH0 - NG ER0\nKEPLINGER(2)  K EH1 P - L IH0 - NG ER0\nKEPNER  K EH1 P - N ER0\nKEPP  K EH1 P\nKEPPEL  K EH1 - P AH0 L\nKEPPLE  K EH1 - P AH0 L\nKEPPLER  K EH1 P - L ER0\nKEPT  K EH1 P T\nKEPT(2)  K AE1 P T\nKER  K ER1\nKERA  K EH1 - R AH0\nKERALA  K EH2 - R AA1 - L AH0\nKERANEN  K EH1 - R AH0 - N AH0 N\nKERATIN  K EH1 - R AH0 - T AH0 N\nKERATIN(2)  K EH1 - R AH0 - T IH0 N\nKERATOTOMY  K EH2 - R AH0 - T AO1 - T AH0 - M IY0\nKERB  K ER1 B\nKERBEL  K ER1 - B AH0 L\nKERBER  K ER1 - B ER0\nKERBOW  K ER1 - B OW0\nKERBS  K ER1 B Z\nKERBY  K ER1 - B IY0\nKERCE  K ER1 S\nKERCHER  K ER1 - K ER0\nKERCHEVAL  K ER1 - CH IH0 - V AH0 L\nKERCHIEF  K ER1 - CH AH0 F\nKERCHIEFS  K ER1 - CH AH0 F S\nKERCHNER  K ER1 K - N ER0\nKEREKES  K EH1 - R IH0 K S\nKERESTES  K EH1 - R IH0 S T S\nKERESZTES  K EH1 - R AH0 - S T IY0 Z\nKERFOOT  K ER1 - F UH0 T\nKERFUFFLE  K ER0 - F AH1 - F AH0 L\nKERIEN  K EH1 - R IY0 - AH0 N\nKERIN  K EH1 - R IH0 N\nKERINS  K EH1 - R IH0 N Z\nKERKER  K ER1 - K ER0\nKERKHOFF  K ER1 K - HH AO0 F\nKERKMAN  K ER1 K - M AH0 N\nKERKORIAN  K ER0 - K AO1 - R IY0 - AH0 N\nKERKORIAN'S  K ER0 - K AO1 - R IY0 - AH0 N Z\nKERL  K ER1 L\nKERLEY  K ER1 - L IY0\nKERLIN  K ER1 - L IH0 N\nKERMAN  K ER1 - M AH0 N\nKERMIT  K ER1 - M IH0 T\nKERN  K ER1 N\nKERN'S  K ER1 N Z\nKERNAGHAN  K ER0 - N AE1 G - HH AH0 N\nKERNAN  K ER1 - N AH0 N\nKERNEL  K ER1 - N AH0 L\nKERNELS  K ER1 - N AH0 L Z\nKERNEN  K ER1 - N AH0 N\nKERNER  K ER1 - N ER0\nKERNES  K ER1 N Z\nKERNEY  K ER1 - N IY0\nKERNIGAN  K ER1 - N AH0 - G AH0 N\nKERNITE  K ER1 - N AY0 T\nKERNODLE  K ER1 - N OW0 - D AH0 L\nKERNS  K ER1 N Z\nKEROSENE  K EH1 - R AH0 - S IY2 N\nKEROUAC  K EH1 - R UW0 - AE0 K\nKERPEDJIEV  K ER0 - P EH1 - JH IY0 - EH2 V\nKERPER  K ER1 - P ER0\nKERR  K ER1\nKERREY  K EH1 - R IY0\nKERREY'S  K EH1 - R IY0 Z\nKERRI  K EH1 - R IY0\nKERRICK  K EH1 - R IH0 K\nKERRIDGE  K EH1 - R IH0 JH\nKERRIGAN  K EH1 - R IH0 - G AH0 N\nKERRIGAN'S  K EH1 - R IH0 - G AH0 N Z\nKERRVILLE  K ER1 - V IH2 L\nKERRY  K EH1 - R IY0\nKERRY'S  K EH1 - R IY0 Z\nKERSCH  K ER1 SH\nKERSCHER  K ER1 - SH ER0\nKERSCHNER  K ER1 SH - N ER0\nKERSEE  K ER1 - S IY0\nKERSEY  K ER1 - S IY0\nKERSH  K ER1 SH\nKERSHAW  K ER1 - SH AA2\nKERSHNER  K ER1 SH - N ER0\nKERST  K ER1 S T\nKERSTEIN  K ER1 - S T AY0 N\nKERSTEIN(2)  K ER1 - S T IY0 N\nKERSTEN  K ER1 - S T AH0 N\nKERSTETTER  K ER1 - S T IH0 - T ER0\nKERSTING  K ER1 - S T IH0 NG\nKERTESZ  K ER1 - T IH0 SH\nKERTH  K ER1 TH\nKERTZ  K ER1 T S\nKERVIN  K ER1 - V IH0 N\nKERVORKIAN  K ER0 - V AO1 R - K IY0 - AH0 N\nKERVORKIAN(2)  K ER0 - V AO1 R - K Y AH0 N\nKERWEN  K ER1 - W AH0 N\nKERWIN  K ER1 - W IH0 N\nKERWOOD  K ER1 - W UH0 D\nKERZNER  K ER1 Z - N ER0\nKESEL  K EH1 - S AH0 L\nKESHISHIAN  K IH0 - SH IH1 - SH IY0 - AH0 N\nKESINGER  K EH1 - S IH0 - NG ER0\nKESKE  K EH1 S K\nKESLAR  K EH1 S - L ER0\nKESLER  K EH1 - S AH0 - L ER0\nKESLER(2)  K EH1 S - L ER0\nKESLING  K EH1 - S AH0 L - IH0 NG\nKESLING(2)  K EH1 - S L IH0 NG\nKESNER  K EH1 S - N ER0\nKESS  K EH1 S\nKESSEL  K EH1 - S AH0 L\nKESSELL  K EH1 - S AH0 L\nKESSELMAN  K EH1 - S AH0 L - M AH0 N\nKESSELRING  K EH1 - S IH0 - L R IH0 NG\nKESSEN  K EH1 - S AH0 N\nKESSENICH  K EH1 - S IH0 - N IH0 K\nKESSINGER  K EH1 - S IH0 - NG ER0\nKESSLE  K EH1 - S AH0 L\nKESSLER  K EH1 S - L ER0\nKESSLER'S  K EH1 S - L ER0 Z\nKESSNER  K EH1 S - N ER0\nKESTEL  K EH1 - S T AH0 L\nKESTEN  K EH1 - S AH0 N\nKESTENBAUM  K EH1 - S AH0 N - B AW0 M\nKESTER  K EH1 - S T ER0\nKESTERSON  K EH1 - S T ER0 - S AH0 N\nKESTING  K EH1 - S T IH0 NG\nKESTLER  K EH1 S T - L ER0\nKESTLER'S  K EH1 S T - L ER0 Z\nKESTNER  K EH1 S T - N ER0\nKESTRELS  K EH1 S - T R AH0 L Z\nKESWICK  K EH1 S - W IH2 K\nKETCH  K EH1 CH\nKETCHAM  K EH1 - CH AH0 M\nKETCHEM  K EH1 - CH IH0 M\nKETCHEN  K EH1 - CH AH0 N\nKETCHER  K EH1 - CH ER0\nKETCHERSIDE  K EH1 - CH ER0 - S AY2 D\nKETCHIE  K EH1 - CH IY0\nKETCHIKAN  K EH1 - CH IH0 - K AE0 N\nKETCHLEDGE  K EH1 CH - L EH2 JH\nKETCHUM  K EH1 - CH AH0 M\nKETCHUP  K EH1 - CH AH0 P\nKETELHUT  K EH1 - T IH0 L - HH AH0 T\nKETELSEN  K EH1 - T IH0 L - S AH0 N\nKETEMA  K EH2 - T EY1 - M AH0\nKETEYIAN  K AH0 - T EY1 - AH0 N\nKETEYIAN'S  K AH0 - T EY1 - AH0 N Z\nKETLER  K EH1 T - L ER0\nKETNER  K EH1 T - N ER0\nKETNEY  K EH1 T - N IY0\nKETO  K EY1 - T OW0\nKETOLA  K EH1 - T AH0 - L AH0\nKETONE  K IY1 - T OW0 N\nKETOU  K AH0 - T UW1\nKETRON  K EH1 - T R AH0 N\nKETT  K EH1 T\nKETTELL  K EH1 - T AH0 L\nKETTER  K EH1 - T ER0\nKETTERER  K EH1 - T ER0 - ER0\nKETTERING  K EH1 - T ER0 - IH0 NG\nKETTERLING  K EH1 - T ER0 - L IH0 NG\nKETTERMAN  K EH1 - T ER0 - M AH0 N\nKETTI  K EH1 - T IY0\nKETTLE  K EH1 - T AH0 L\nKETTLER  K EH1 - T AH0 L - ER0\nKETTLER(2)  K EH1 T - L ER0\nKETTLES  K EH1 - T AH0 L Z\nKETTLEWELL  K EH1 - T AH0 L - W EH2 L\nKETTNER  K EH1 T - N ER0\nKETURA  K EH1 - T UH0 - R AH0\nKETZ  K EH1 T S\nKETZEL  K EH1 T - S AH0 L\nKETZEL'S  K EH1 T - S AH0 L Z\nKEUNE  K Y UW1 N\nKEVAN  K EH1 - V AH0 N\nKEVEN  K IY1 - V AH0 N\nKEVER  K EH1 - V ER0\nKEVEX  K EH1 - V AH0 K S\nKEVILLE  K IY1 - V IH0 L\nKEVIN  K EH1 - V IH0 N\nKEVIN'S  K EH1 - V IH0 N Z\nKEVLAR  K EH1 V - L ER0\nKEVLIN  K EH1 V - L IH0 N\nKEVORKIAN  K AH0 - V AO1 R - K IY0 - AH0 N\nKEVORKIAN'S  K AH0 - V AO1 R - K IY0 - AH0 N Z\nKEW  K Y UW1\nKEWAUNEE  K Y UW0 - AO1 - N IY0\nKEWLEY  K Y UW1 - L IY0\nKEY  K IY1\nKEY'S  K IY1 Z\nKEYBOARD  K IY1 - B AO2 R D\nKEYBOARDS  K IY1 - B AO2 R D Z\nKEYCORP  K IY1 - K AO0 R P\nKEYCORP'S  K IY1 - K AO0 R P S\nKEYE  K AY1\nKEYED  K IY1 D\nKEYES  K IY1 Z\nKEYES'  K IY1 Z\nKEYHOLE  K IY1 - HH OW2 L\nKEYING  K IY1 - IH0 NG\nKEYLESS  K IY1 - L AH0 S\nKEYLON  K EY1 - L AH0 N\nKEYNES  K EY1 N Z\nKEYNESIAN  K EY1 N - Z IY0 - AH0 N\nKEYNESIANS  K EY1 N - Z IY0 - AH0 N Z\nKEYNOTE  K IY1 - N OW2 T\nKEYPAD  K IY1 - P AE2 D\nKEYPAD'S  K IY1 - P AE2 D Z\nKEYPADS  K IY1 - P AE2 D Z\nKEYS  K IY1 Z\nKEYSER  K AY1 - Z ER0\nKEYSOR  K IY1 - S ER0\nKEYSTONE  K IY1 - S T OW2 N\nKEYSTONE'S  K IY1 - S T OW2 N Z\nKEYSTROKE  K IY1 - S T R OW2 K\nKEYSTROKES  K IY1 S - T R OW2 K S\nKEYTON  K IY1 - T AH0 N\nKEYWORD  K IY1 - W ER2 D\nKEYWORDS  K IY1 - W ER2 D Z\nKEYWORTH  K IY1 - W ER2 TH\nKEZIAH  K AH0 - Z IY1 - AH0\nKGANAKGA  K AH0 - G AH0 - N AE1 - G AH0\nKGORI  K AH0 - G AO1 - R IY0\nKHABAROVSK  K AE2 - B ER0 - AA1 F S K\nKHAD  K AE1 D\nKHAKI  K AA1 - K IY0\nKHAKI(2)  K AE1 - K IY0\nKHAKIS  K AE1 - K IY0 Z\nKHALAF  K AE1 - L AH0 F\nKHALID  K AA1 - L IH0 D\nKHALID'S  K AA1 - L IH0 D Z\nKHALIFA  K AH0 - L IY1 - F AH0\nKHALIL  K AE1 - L AH0 L\nKHALSA  K AA1 L - S AH0\nKHAMENEI  K AH0 - M EY1 - N IY2\nKHAN  K AA1 N\nKHAN'S  K AA1 N Z\nKHANATE  K AA1 - N EY0 T\nKHANNA  K AE1 - N AH0\nKHARG  K AA1 R G\nKHARTOUM  K AA2 R - T UW1 M\nKHASBULATOV  K AA2 S - B AH0 - L AA1 - T AA0 F\nKHASBULATOV'S  K AA2 S - B AH0 - L AA1 - T AA0 F S\nKHASHOGGI  K AH0 - SH AA1 - JH IY0\nKHAT  K AA1 T\nKHE  K IY1\nKHE(2)  K EY1\nKHE(3)  K EY1 - EH1 - CH IY1\nKHEEL  K IY1 L\nKHEM  K EH1 M\nKHLEBNIKOV  K L EH1 B - N IH0 - K AA2 V\nKHLEBNIKOV'S  K L EH1 B - N IH0 - K AA2 V Z\nKHMER  K M EH1 R\nKHOMEINI  K OW0 - M EY1 - N IY0\nKHOMEINI'S  HH OW0 - M EY1 - N IY0 Z\nKHOMEINI'S(2)  K OW0 - M EY1 - N IY0 Z\nKHOMEINI(2)  HH OW0 - M EY1 - N IY0\nKHOO  K UW1\nKHOSLA  K AO1 S - L AH0\nKHOST  K OW1 S T\nKHOURI  K AW1 - R IY0\nKHOURY  K AW1 - R IY0\nKHRUSHCHEV  K R UW1 S - CH EH2 V\nKHRUSHCHEV'S  K R UW1 S - CH EH2 V Z\nKHRUSHCHEV'S(2)  K R UW1 S - CH AO2 F S\nKHRUSHCHEV(2)  K R UW1 S - CH AO2 F\nKHUFU  K UW1 - F UW2\nKHUMALO  K Y UW0 - M AA1 - L OW0\nKHUU  K UW1\nKI  K IY1\nKIA  K IY1 - ER0\nKIAM  K IY1 - AH0 M\nKIAWAH  K AY1 - AH0 - W AH0\nKIAWAH(2)  K IY1 - AH0 - W AH2\nKIBBE  K IH1 B\nKIBBEE  K IH1 - B IY2\nKIBBEL  K IH1 - B AH0 L\nKIBBEY  K IH1 - B IY0\nKIBBLE  K IH1 - B AH0 L\nKIBBUTZ  K IH0 - B UH1 T S\nKIBBUTZIM  K IH2 - B UH0 - T S IH1 M\nKIBBUTZNIKS  K IH0 - B UH1 T S - N IH0 K S\nKIBBY  K IH1 - B IY0\nKIBEHO  K IH1 - B AH0 - HH OW0\nKIBELL  K IH1 - B AH0 L\nKIBLER  K AO1 - B AH0 L - ER0\nKIBLER(2)  K IH1 - B L ER0\nKIBODEAUX  K IH1 - B AH0 - D OW0\nKIBUMBA  K IH0 - B AH1 M - B AH0\nKICHLINE  K IH1 - K L AY2 N\nKICK  K IH1 K\nKICKBACK  K IH1 K - B AE2 K\nKICKBACKS  K IH1 K - B AE2 K S\nKICKED  K IH1 K T\nKICKER  K IH1 - K ER0\nKICKERS  K IH1 - K ER0 Z\nKICKING  K IH1 - K IH0 NG\nKICKLIGHTER  K IH1 K - L AY2 - T ER0\nKICKOFF  K IH1 K - AO2 F\nKICKS  K IH1 K S\nKID  K IH1 D\nKID'S  K IH1 D Z\nKIDA  K IY1 - D AH0\nKIDD  K IH1 D\nKIDDE  K IH1 D\nKIDDED  K IH1 - D IH0 D\nKIDDER  K IH1 - D ER0\nKIDDER'S  K IH1 - D ER0 Z\nKIDDIE  K IH1 - D IY0\nKIDDIES  K IH1 - D IY0 Z\nKIDDING  K IH1 - D IH0 NG\nKIDDINGLY  K IH1 - D IH0 NG - L IY0\nKIDDY  K IH1 - D IY0\nKIDMAN  K IH1 D - M AH0 N\nKIDNAP  K IH1 D - N AE2 P\nKIDNAPED  K IH1 D - N AE2 P T\nKIDNAPING  K IH1 D - N AE2 - P IH0 NG\nKIDNAPPED  K IH1 D - N AE2 P T\nKIDNAPPER  K IH1 D - N AE2 - P ER0\nKIDNAPPERS  K IH1 D - N AE2 - P ER0 Z\nKIDNAPPING  K IH1 D - N AE2 - P IH0 NG\nKIDNAPPINGS  K IH1 D - N AE2 - P IH0 NG Z\nKIDNAPS  K IH1 D - N AE2 P S\nKIDNEY  K IH1 D - N IY0\nKIDNEYS  K IH1 D - N IY0 Z\nKIDO  K IY1 - D OW0\nKIDS  K IH1 D Z\nKIDS'  K IH1 D Z\nKIDSTOCK  K IH1 D - S T AA2 K\nKIDWA  K IH1 D - W AH0\nKIDWELL  K IH1 D - W EH2 L\nKIECHL  K IY1 - CH AH0 L\nKIECHL(2)  K AY1 - CH AH0 L\nKIECKER  K IY1 - K ER0\nKIEDROWSKI  K IY0 - D R AO1 F S - K IY0\nKIEF  K IY1 F\nKIEFER  K IY1 - F ER0\nKIEFFER  K IY1 - F ER0\nKIEFT  K IY1 F T\nKIEHL  K IY1 L\nKIEHN  K IY1 N\nKIEHNE  K IY1 N\nKIEL  K IY1 L\nKIELAR  K IY1 - L ER0\nKIELB  K IY1 L B\nKIELBASA  K IY0 L - B AA1 - S AH0\nKIELER  K IY1 - L ER0\nKIELLEY  K IY1 - L IY0\nKIELMAN  K IY1 L - M AH0 N\nKIELTY  K IY1 L - T IY0\nKIELY  K IY1 - L IY0\nKIENAN  K IY1 - N AH0 N\nKIENAST  K IY1 - N AH0 S T\nKIENE  K IY1 N\nKIENER  K IY1 - N ER0\nKIENINGER  K IY1 - N IH0 - NG ER0\nKIENITZ  K IY1 - N IH0 T S\nKIENLE  K IY1 - N AH0 L\nKIENTZ  K IY1 N T S\nKIENZLE  K IY1 N - Z AH0 L\nKIEPER  K IY1 - P ER0\nKIER  K IH1 R\nKIERAN  K IY1 - R AH0 N\nKIERNAN  K IH1 R - N AH0 N\nKIERSCHT  K IH1 R SH T\nKIERSTEAD  K IH1 R - S T EH0 D\nKIERULFF  K IY1 - R AH0 L F\nKIES  K AY1 S\nKIESCHNICK  K IY1 SH - N IH0 K\nKIESEL  K IY1 - S AH0 L\nKIESELMANN  K IY1 - Z AH0 L - M AH0 N\nKIESER  K IY1 - S ER0\nKIESEWETTER  K IY1 - S UW0 - IH0 - T ER0\nKIESLER  K IY1 Z - L ER0\nKIESLING  K IY1 Z - L IH0 NG\nKIESOW  K IY1 - S OW0\nKIESS  K IY1 S\nKIESSLING  K IY1 - S L IH0 NG\nKIESTER  K AY1 - IH0 - S T ER0\nKIETZMAN  K IY1 T S - M AH0 N\nKIEV  K IY2 - EH1 V\nKIEV'S  K IY2 - EH1 V Z\nKIEVAN  K IY1 - V AH0 N\nKIEVIT  K IY1 - V IH0 T\nKIEWIT  K IY1 - W IH0 T\nKIFER  K AY1 - F ER0\nKIFF  K IH1 F\nKIGALE  K IY0 - G AA1 - L IY0\nKIGALE'S  K IY0 - G AA1 - L IY0 Z\nKIGALI  K IY0 - G AA1 - L IY0\nKIGALI'S  K IY0 - G AA1 - L IY0 Z\nKIGER  K AY1 - G ER0\nKIGGINS  K IH1 - G IH0 N Z\nKIGHT  K AY1 T\nKIGHTLINGER  K AY1 - T AH0 L - IH0 - NG ER0\nKIGHTLINGER(2)  K AY1 T - L IH0 - NG ER0\nKIHN  K IH1 N\nKIICHI  K IY0 - IY1 - CH IY0\nKIICHI(2)  K IY1 - CH IY0\nKIJOWSKI  K IH0 Y - AO1 F S - K IY0\nKIKA  K IH1 - K AH0\nKIKATTE  K IH1 - K AE0 T\nKIKER  K AY1 - K ER0\nKIKI  K IY1 - K IY0\nKIKKOMAN  K IY1 - K OW0 - M AA0 N\nKIKTA  K IH1 K - T AH0\nKIKUCHI  K IY0 - K UW1 - CH IY0\nKIKUMURA  K IY2 - K UW2 - M UW1 - R AH0\nKIKWIT  K IH1 - K W IH0 T\nKILA  K IH1 - L AH0\nKILBANE  K IH1 L - B AH0 N\nKILBORN  K IH1 L - B ER0 N\nKILBORNE  K IH1 L - B AO2 R N\nKILBOURN  K IH1 L - B ER0 N\nKILBOURNE  K IH1 L - B ER0 N\nKILBRIDE  K IH1 L - B R AY2 D\nKILBURG  K IH1 L - B ER0 G\nKILBURN  K IH1 L - B ER0 N\nKILBURY  K IH1 L - B EH2 - R IY0\nKILBY  K IH1 L - B IY0\nKILCOIN  K IH1 L - K OY0 N\nKILCOYNE  K IH1 L - K OY0 N\nKILCREASE  K IH0 L - K R IY1 S\nKILCREASE(2)  K IH1 L - K R IY0 S\nKILCULLEN  K IH0 L - K AH1 - L AH0 N\nKILDAY  K IH1 L - D EY2\nKILDEE  K IH1 L - D IY0\nKILDOW  K IH1 L - D OW0\nKILDUFF  K IH1 L - D AH0 F\nKILE  K AY1 L\nKILEN  K IH1 - L AH0 N\nKILEY  K AY1 - L IY0\nKILGO  K IH1 L - G OW0\nKILGORE  K IH1 L - G AO0 R\nKILGOUR  K IH1 L - G ER0\nKILGUS  K IH1 L - G AH0 S\nKILIAN  K IH1 - L IY0 - AH0 N\nKILIMANJARO  K IH0 - L IY2 - M AH0 N - JH AA1 - R OW0\nKILIMANJARO(2)  K IH2 - L AH0 - M AH0 N - JH AA1 - R OW0\nKILKER  K IH1 L - K ER0\nKILL  K IH1 L\nKILLAM  K IH1 - L AH0 M\nKILLE  K IH1 L\nKILLEAGH  K IH0 - L IY1 G\nKILLEBREW  K IH1 - L IH0 - B R UW0\nKILLED  K IH1 L D\nKILLEEN  K IH0 - L IY1 N\nKILLEN  K IH1 - L AH0 N\nKILLER  K IH1 - L ER0\nKILLER'S  K IH1 - L ER0 Z\nKILLERS  K IH1 - L ER0 Z\nKILLEY  K IH1 - L IY0\nKILLGORE  K IH1 L - G AO2 R\nKILLIAN  K IH1 - L Y AH0 N\nKILLIFISH  K IH1 - L IH0 - F IH0 SH\nKILLILEA  K IH0 - L IH0 - L IY1 - AH0\nKILLIN  K IH1 - L IH0 N\nKILLING  K IH1 - L IH0 NG\nKILLINGBECK  K IH1 - L IH0 NG - B EH2 K\nKILLINGER  K IH1 - L IH0 - NG ER0\nKILLINGS  K IH1 - L IH0 NG Z\nKILLINGSWORTH  K IH1 - L IH0 NG - Z W ER2 TH\nKILLINGTON  K IH1 - L IH0 NG - T AH0 N\nKILLION  K IH1 - L Y AH0 N\nKILLJOY  K IH1 L - JH OY0\nKILLMAN  K IH1 L - M AH0 N\nKILLMAN'S  K IH1 L - M AH0 N Z\nKILLMER  K IH1 L - M ER0\nKILLMON  K IH1 L - M AH0 N\nKILLORAN  K IH1 - L ER0 - AH0 N\nKILLORY  K IH1 - L ER0 - IY0\nKILLOUGH  K IH1 - L AW0\nKILLPACK  K IH1 L - P AE2 K\nKILLS  K IH1 L Z\nKILMAN  K IH1 L - M AH0 N\nKILMARNOCK  K IH0 L - M AA1 R - N AA2 K\nKILMARTIN  K IH0 L - M AA1 R - T IH0 N\nKILMER  K IH1 L - M ER0\nKILN  K IH1 L N\nKILNS  K IH1 L N Z\nKILO  K IH1 - L OW2\nKILOBIT  K IH1 - L AH0 - B IH0 T\nKILOBYTE  K IH1 - L OW0 - B AY2 T\nKILOBYTES  K IH1 - L OW0 - B AY2 T S\nKILOGRAM  K IH1 - L AH0 - G R AE2 M\nKILOGRAMS  K IH1 - L AH0 - G R AE2 M Z\nKILOMETER  K AH0 - L AA1 - M AH0 - T ER0\nKILOMETER(2)  K IH1 - L AH0 - M IY2 - T ER0\nKILOMETERS  K AH0 - L AA1 - M AH0 - T ER0 Z\nKILOMETERS(2)  K IH1 - L AH0 - M IY2 - T ER0 Z\nKILOS  K IY1 - L OW2 Z\nKILOWATT  K IH1 - L AH0 - W AA2 T\nKILOWATTS  K IH1 - L AH0 - W AA2 T S\nKILPATRICK  K IH2 L - P AE1 - T R IH0 K\nKILROY  K IH1 L - R OY2\nKILT  K IH1 L T\nKILTER  K IH1 L - T ER0\nKILTON  K IH1 L - T AH0 N\nKILTS  K IH1 L T S\nKILTY  K IH1 L - T IY0\nKILZER  K IH1 L - Z ER0\nKIM  K IH1 M\nKIM'S  K IH1 M Z\nKIMBA  K IH1 M - B AH0\nKIMBALL  K IH1 M - B AH0 L\nKIMBALL'S  K IH1 M - B AH0 L Z\nKIMBEL  K IH1 M - B AH0 L\nKIMBELL  K IH1 M - B EH0 L\nKIMBER  K IH1 M - B ER0\nKIMBERLEY  K IH1 M - B ER0 - L IY0\nKIMBERLIN  K IH1 M - B ER0 - L IH0 N\nKIMBERLING  K IH1 M - B ER0 - L IH0 NG\nKIMBERLY  K IH1 M - B ER0 - L IY0\nKIMBERLY'S  K IH1 M - B ER0 - L IY0 Z\nKIMBLE  K IH1 M - B AH0 L\nKIMBLER  K IH1 M - B L ER0\nKIMBLEY  K IH1 M - B L IY0\nKIMBREL  K IH1 M - B R AH0 L\nKIMBRELL  K IH1 M - B R AH0 L\nKIMBRIEL  K IH1 M - B R IY0 - AH0 L\nKIMBRO  K IH1 M - B R OW0\nKIMBROUGH  K IH1 M - B R AW0\nKIMCHE  K IH1 M - CH IY0\nKIMCHEE  K IH1 M - CH IY0\nKIMCHI  K IH1 M - CH IY0\nKIMCO  K IH1 M - K OW0\nKIME  K AY1 M\nKIMEL  K IH1 - M AH0 L\nKIMERY  K IH1 - M ER0 - IY0\nKIMES  K AY1 M Z\nKIMLER  K IH1 - M AH0 - L ER0\nKIMLER(2)  K IH1 M - L ER0\nKIMM  K IH1 M\nKIMMEL  K IH1 - M AH0 L\nKIMMELL  K IH1 - M AH0 L\nKIMMELMAN  K IH1 - M AH0 L - M AH0 N\nKIMMER  K IH1 - M ER0\nKIMMERLE  K IH1 - M ER0 - AH0 L\nKIMMET  K IH1 - M IH0 T\nKIMMEY  K IH1 - M IY0\nKIMMICH  K IH1 - M IH0 CH\nKIMMINS  K IH1 - M IH0 N Z\nKIMMITT  K IH1 - M IH0 T\nKIMMONS  K IH1 - M AH0 N Z\nKIMONO  K AH0 - M OW1 - N AH0\nKIMONOS  K AH0 - M OW1 - N AH0 Z\nKIMOTO  K IY0 - M OW1 - T OW0\nKIMPEL  K IH1 M - P AH0 L\nKIMPLE  K IH1 M - P AH0 L\nKIMPO  K IH1 M - P OW0\nKIMPTON  K IH1 M P - T AH0 N\nKIMREY  K IH1 M - R IY0\nKIMS  K IH1 M Z\nKIMSEY  K IH1 M - Z IY0\nKIMURA  K IY0 - M UH1 - R AH0\nKIMWIPE  K IH1 M - W AY0 P\nKIMWIPES  K IH1 M - W AY0 P S\nKIMZEY  K IH1 M - Z IY0\nKIN  K IH1 N\nKIN'S  K IH1 N Z\nKINARD  K IH1 - N ER0 D\nKINARK  K IH1 - N AA0 R K\nKINBURN  K IH1 N - B ER2 N\nKINCADE  K IH2 N - K EY1 D\nKINCAID  K IH2 N - K EY1 D\nKINCAID'S  K IH2 N - K EY1 D Z\nKINCANNON  K IH2 N - K AE1 - N AH0 N\nKINCER  K IH1 N - S ER0\nKINCH  K IH1 N CH\nKINCHELOE  K IH1 N - CH IH0 - L OW0\nKINCHEN  K IH1 NG - K AH0 N\nKINCY  K IH1 N - S IY0\nKIND  K AY1 N D\nKINDA  K IH1 N - D AH0\nKINDALL  K IH1 N - D AH0 L\nKINDEL  K IH1 N - D AH0 L\nKINDELL  K IH1 N - D AH0 L\nKINDER  K AY1 N - D ER0\nKINDERGARTEN  K IH1 N - D ER0 - G AA2 R - T AH0 N\nKINDERGARTENS  K IH1 N - D ER0 - G AA2 R - T AH0 N Z\nKINDERGARTNER  K IH1 N - D ER0 - G AA2 R T - N ER0\nKINDERGARTNERS  K IH1 N - D ER0 - G AA2 R T - N ER0 Z\nKINDERMAN  K AY1 N - D ER0 - M AH0 N\nKINDEST  K AY1 N - D AH0 S T\nKINDIG  K IH1 N - D IH0 G\nKINDLE  K IH1 N - D AH0 L\nKINDLEBERGER  K IH1 N - D AH0 L - B ER0 - G ER0\nKINDLED  K IH1 N - D AH0 L D\nKINDLER  K IH1 N - D AH0 L - ER0\nKINDLER(2)  K IH1 N D - L ER0\nKINDLEY  K IH1 N D - L IY0\nKINDLING  K IH1 N - D L IH0 NG\nKINDLY  K AY1 N D - L IY0\nKINDNESS  K AY1 N D - N AH0 S\nKINDRAN  K IH1 N - D R AH0 N\nKINDRED  K IH1 N - D R IH0 D\nKINDRICK  K IH1 N - D R IH0 K\nKINDS  K AY1 N D Z\nKINDS(2)  K AY1 N Z\nKINDT  K IH1 N T\nKINDY  K AY1 N - D IY0\nKINEPOLIS  K IH0 - N EH1 - P AH0 - L IH0 S\nKINER  K AY1 - N ER0\nKINES  K AY1 N Z\nKINESIOLOGY  K IH2 - N IH0 - S IY2 - AA1 - L AH0 - JH IY0\nKINESTHETIC  K IH2 - N AH0 S - TH EH1 - T IH0 K\nKINETA  K IH1 - N IH0 - T AH0\nKINETIC  K AH0 - N EH1 - T IH0 K\nKINETIC(2)  K IH0 - N EH1 - T IH0 K\nKINETICS  K AH0 - N EH1 - T IH0 K S\nKING  K IH1 NG\nKING'S  K IH1 NG Z\nKINGBIRD  K IH1 NG - B ER2 D\nKINGBIRDS  K IH1 NG - B ER2 D Z\nKINGDOM  K IH1 NG - D AH0 M\nKINGDOM'S  K IH1 NG - D AH0 M Z\nKINGDOMS  K IH1 NG - D AH0 M Z\nKINGDON  K IH1 NG - D AH0 N\nKINGEN  K IH1 - NG AH0 N\nKINGERY  K IH1 NG - G ER0 - IY0\nKINGFISHER  K IH1 NG - F IH2 - SH ER0\nKINGFISHERS  K IH1 NG - F IH2 - SH ER0 Z\nKINGHAM  K IH1 NG - HH AE2 M\nKINGHORN  K IH1 NG - HH ER0 N\nKINGLY  K IH1 NG - L IY0\nKINGMA  K IH1 NG - M AH0\nKINGMAKER  K IH1 NG - M EY2 - K ER0\nKINGMAN  K IH1 NG - M AH0 N\nKINGON  K IH1 - NG AO2 N\nKINGPIN  K IH1 NG - P IH2 N\nKINGPINS  K IH1 NG - P IH2 N Z\nKINGREY  K IH1 NG - G R IY0\nKINGRY  K IH1 NG - G ER0 - IY0\nKINGS  K IH1 NG Z\nKINGS'  K IH1 NG Z\nKINGSBOROUGH  K IH1 NG Z - B ER2 - OW0\nKINGSBRIDGE  K IH1 NG Z - B R IH2 JH\nKINGSBURY  K IH1 NG Z - B EH2 - R IY0\nKINGSEY  K IH1 NG - Z IY0\nKINGSFORD  K IH1 NG S - F ER0 D\nKINGSHIP  K IH1 NG - SH IH0 P\nKINGSLAND  K IH1 NG Z - L AE0 N D\nKINGSLEY  K IH1 NG Z - L IY0\nKINGSLEY'S  K IH1 NG - Z L IY0 Z\nKINGSOLVER  K IH1 NG - S AA0 L - V ER0\nKINGSPORT  K IH1 NG - S P AO2 R T\nKINGSTON  K IH1 NG - S T AH0 N\nKINGSUN  K IH1 NG - S AH0 N\nKINGSVILLE  K IH1 NG Z - V IH2 L\nKINGSWAY  K IH1 NG G Z - W EY0\nKINGSWELL  K IH1 NG G Z - W EH0 L\nKINGTON  K IH1 NG - T AH0 N\nKINION  K IH1 - N Y AH0 N\nKINIRY  K IH1 - N AY0 - R IY0\nKINKADE  K IH1 NG - K AH0 D\nKINKEAD  K IH1 NG - K EH0 D\nKINKEL  K IH1 NG - K AH0 L\nKINKER  K IH1 NG - K ER0\nKINKLE  K IH1 NG - K AH0 L\nKINKO  K IH1 NG - K OW2\nKINKO'S  K IH1 NG - K OW2 Z\nKINKS  K IH1 NG K S\nKINKY  K IH1 NG - K IY0\nKINLAW  K IH1 N - L AO2\nKINLEY  K IH1 N - L IY0\nKINLOCH  K IH1 N - L AH0 K\nKINMAN  K IH1 N - M AH0 N\nKINMEN  K IH1 N - M EH0 N\nKINN  K IH1 N\nKINNAIRD  K IH1 - N ER0 D\nKINNAMAN  K IH1 - N AH0 - M AH0 N\nKINNAMON  K IH1 - N AH0 - M AH0 N\nKINNAN  K IH1 - N AH0 N\nKINNARD  K IH1 - N ER0 D\nKINNE  K IH1 N\nKINNEAR  K IH1 - N IH2 R\nKINNEBREW  K IH1 - N IH0 - B R UW0\nKINNELL  K IH1 - N AH0 L\nKINNER  K IH1 - N ER0\nKINNETT  K IH1 - N IH0 T\nKINNEY  K IH1 - N IY0\nKINNICK  K IH1 - N IH0 K\nKINNIE  K IH1 - N IY0\nKINNISON  K IH1 - N IH0 - S AH0 N\nKINNOCK  K IH1 - N AH0 K\nKINNOCK'S  K IH1 - N AH0 K S\nKINNUNEN  K IH0 - N AH1 - N AH0 N\nKINNY  K IH1 - N IY0\nKINOSHITA  K IY0 - N OW0 - SH IY1 - T AH0\nKINSEL  K IH1 N - S AH0 L\nKINSELL  K IH1 N - S AH0 L\nKINSELLA  K IY0 N - S EH1 - L AH0\nKINSER  K IH1 N - S ER0\nKINSEY  K IH1 N - Z IY0\nKINSHASA  K IH0 N - SH AA1 - S AH0\nKINSHASA(2)  K IH0 N - SH AE1 - S AH0\nKINSHIP  K IH1 N - SH IH2 P\nKINSINGER  K IH1 N - S IH0 N - JH ER0\nKINSLER  K IH1 N - S AH0 - L ER0\nKINSLER(2)  K IH1 N - S L ER0\nKINSLEY  K IH1 N Z - L IY0\nKINSLEY'S  K IH1 N - Z L IY0 Z\nKINSLOW  K IH1 N - S L OW2\nKINSMAN  K IH1 N Z - M AE2 N\nKINST  K IH1 N S T\nKINSTLER  K IH1 N - S T L ER0\nKINT  K IH1 N T\nKINTER  K IH1 N - T ER0\nKINTIGH  K IH1 N - T AY0\nKINTNER  K IH1 N T - N ER0\nKINTON  K IH1 N - T AH0 N\nKINTZ  K IH1 N T S\nKINTZEL  K IH1 N T - Z AH0 L\nKINYON  K IH1 - N Y AH0 N\nKINZEL  K IH1 N - Z AH0 L\nKINZER  K IH1 N - Z ER0\nKINZEY  K IH1 N - Z IY0\nKINZIE  K IH1 N - Z IY0\nKINZLER  K IH1 N Z - L ER0\nKINZLMAIER  K IH1 N - Z AH0 L - M AY2 - ER0\nKIOSK  K IY1 - AO2 S K\nKIOSKS  K IY1 - AO2 S K S\nKIOUS  K AY1 - AH0 S\nKIP  K IH1 P\nKIPER  K AY1 - P ER0\nKIPFER  K IH1 P - F ER0\nKIPLING  K IH1 - P L IH0 NG\nKIPLINGER  K IH1 - P AH0 - L IH0 - NG ER0\nKIPLINGER'S  K IH1 P - L IH2 - NG ER0 Z\nKIPLINGER(2)  K IH1 P - L IH0 - NG ER0\nKIPNIS  K IH1 P - N IH0 S\nKIPP  K IH1 P\nKIPPER  K IH1 - P ER0\nKIPPERMAN  K IH1 - P ER0 - M AH0 N\nKIPPERS  K IH1 - P ER0 Z\nKIPPES  K IH1 P S\nKIPPUR  K IH1 - P ER0\nKIR  K IH1 R\nKIRACOFE  K IH1 - R AH0 - K OW2 F\nKIRALY  K IH1 - R AH0 - L IY0\nKIRBY  K ER1 - B IY0\nKIRBY'S  K ER1 - B IY0 Z\nKIRCH  K ER1 K\nKIRCHBERG  K ER1 K - B ER0 G\nKIRCHBERG(2)  K ER1 CH - B ER0 G\nKIRCHBERGER  K ER1 CH - B ER0 - G ER0\nKIRCHEN  K ER1 - K AH0 N\nKIRCHER  K ER1 - K ER0\nKIRCHGESSNER  K ER1 K - G IH0 S - N ER0\nKIRCHHOFER  K ER1 K - HH AH0 - F ER0\nKIRCHHOFF  K ER1 K - HH AO0 F\nKIRCHMAN  K ER1 K - M AH0 N\nKIRCHNER  K ER1 K - N ER0\nKIRCHNERS  K ER1 K - N ER0 Z\nKIRCHOFF  K ER1 K - HH AO0 F\nKIRGAN  K ER1 - G AH0 N\nKIRGIZ  K IH1 R - G IH0 Z\nKIRI  K IH1 - R IY0\nKIRIBATI  K IH2 - R IH1 - B AA1 - T IY0\nKIRIN  K IH1 - R IH0 N\nKIRK  K ER1 K\nKIRK'S  K ER1 K S\nKIRKBRIDE  K ER1 K - B R AY0 D\nKIRKBY  K ER1 K - B IY0\nKIRKEBY  K ER1 - K IH0 - B IY0\nKIRKENDALL  K ER0 - K EH1 N - D AH0 L\nKIRKENDOLL  K ER0 - K EH1 N - D OW0 L\nKIRKER  K ER1 - K ER0\nKIRKEY  K ER1 - K IY0\nKIRKHAM  K ER1 K - HH AH0 M\nKIRKHART  K ER1 K - HH AA0 R T\nKIRKLAND  K ER1 K - L AH0 N D\nKIRKLAND'S  K ER1 K - L AH0 N D Z\nKIRKLEY  K ER1 K - L IY0\nKIRKLIN  K ER1 - K L IH0 N\nKIRKMAN  K ER1 K - M AH0 N\nKIRKNER  K ER1 K - N ER0\nKIRKPATRICK  K ER0 K - P AE1 - T R IH0 K\nKIRKPATRICK(2)  K ER0 - P AE1 - T R IH0 K\nKIRKS  K ER1 K S\nKIRKSEY  K ER1 K - S IY0\nKIRKUK  K IH2 R - K UH1 K\nKIRKUM  K IH1 R - K AH0 M\nKIRKWOOD  K ER1 K - W UH0 D\nKIRLEY  K ER1 - L IY0\nKIRLIN  K ER1 - L IH0 N\nKIRMSE  K ER1 M - S IY0\nKIRN  K ER1 N\nKIRNAN  K ER1 - N AH0 N\nKIRNER  K ER1 - N ER0\nKIROUAC  K AY1 - R AW0 - AE0 K\nKIROV  K IH1 - R AA0 V\nKIRSCH  K ER1 SH\nKIRSCHBAUM  K ER1 SH - B AW0 M\nKIRSCHENBAUM  K ER1 - SH AH0 N - B AW0 M\nKIRSCHENMANN  K ER1 - SH AH0 N - M AH0 N\nKIRSCHMAN  K ER1 SH - M AH0 N\nKIRSCHNER  K ER1 SH - N ER0\nKIRSH  K ER1 SH\nKIRSHBAUM  K ER1 SH - B AW2 M\nKIRSHENBAUM  K ER1 - SH AH0 N - B AW0 M\nKIRSHNER  K ER1 SH - N ER0\nKIRST  K ER1 S T\nKIRSTEIN  K ER1 - S T AY0 N\nKIRSTEIN(2)  K ER1 - S T IY0 N\nKIRSTEN  K ER1 - S T AH0 N\nKIRSTIE  K ER1 - S T IY0\nKIRSTIN  K ER1 - S T IH0 N\nKIRT  K ER1 T\nKIRTLAND  K ER1 T - L AH0 N D\nKIRTLEY  K ER1 T - L IY0\nKIRTON  K ER1 - T AH0 N\nKIRTS  K ER1 T S\nKIRVEN  K ER1 - V AH0 N\nKIRWAN  K ER1 - W AO0 N\nKIRWIN  K ER1 - W IH0 N\nKIRYAS  K IH1 R - Y AH0 S\nKIRYAS(2)  K IH2 R - Y AA1 S\nKIRYAT  K IH1 - R Y AH0 T\nKIRYAT(2)  K IH2 R - Y AA1 T\nKIS  K IH1 S\nKISAMORE  K IY0 - S AA1 - M AO0 R\nKISAN  K IH1 - Z AH0 N\nKISCH  K IH1 SH\nKISCHELL  K IH1 - SH AH0 L\nKISCO  K IH1 - S K OW0\nKISE  K AY1 Z\nKISER  K AY1 - Z ER0\nKISH  K IH1 SH\nKISHA  K IH1 - SH AH0\nKISHBAUGH  K IH1 SH - B AW0\nKISHI  K IY1 - SH IY0\nKISIEL  K IH1 - S IY0 L\nKISKA  K IH1 S - K AH0\nKISKA'S  K IH1 S - K AH0 Z\nKISLER  K IH1 - S AH0 - L ER0\nKISLER(2)  K IH1 S - L ER0\nKISLING  K IH1 - S AH0 - L IH0 NG\nKISLING(2)  K IH1 - S L IH0 NG\nKISMAYU  K IH0 S - M AA1 - Y UW0\nKISMAYU(2)  K IH0 Z - M AA1 - Y UW0\nKISMET  K IH1 Z - M IH0 T\nKISMETS  K IH1 Z - M IH0 T S\nKISNER  K IH1 S - N ER0\nKISOR  K AY1 - Z ER0\nKISS  K IH1 S\nKISSACK  K IH1 - S AH0 K\nKISSAM  K IH1 - S AH0 M\nKISSANE  K IH1 - S AH0 N\nKISSED  K IH1 S T\nKISSEE  K IH1 - S IY1\nKISSEL  K IH1 - S AH0 L\nKISSELL  K IH1 - S AH0 L\nKISSER  K IH1 - S ER0\nKISSES  K IH1 - S AH0 Z\nKISSES(2)  K IH1 - S IH0 Z\nKISSICK  K IH1 - S IH0 K\nKISSIMMEE  K IH0 - S IH1 - M IY0\nKISSING  K IH1 - S IH0 NG\nKISSINGER  K IH1 - S IH0 N - JH ER0\nKISSINGER'S  K IH1 - S IH0 N - JH ER0 Z\nKISSLER  K IH1 S - L ER0\nKISSLING  K IH1 - S L IH0 NG\nKISSNER  K IH1 S - N ER0\nKIST  K IH1 S T\nKISTER  K IH1 - S T ER0\nKISTLER  K IH1 S T - L ER0\nKISTNER  K IH1 S T - N ER0\nKISZCZAK  K IH1 - Z AE0 K\nKISZCZAK(2)  K IH1 - SH AE0 K\nKIT  K IH1 T\nKITA  K IY1 - T AH0\nKITAGAWA  K IY0 - T AA0 - G AA1 - W AH0\nKITAJIMA  K IY2 - T AH0 - JH IY1 - M AH0\nKITAMURA  K IY0 - T AA0 - M UH1 - R AH0\nKITCAT  K IH1 T - K AE2 T\nKITCH  K IH1 CH\nKITCHEL  K IH1 - CH AH0 L\nKITCHELL  K IH1 - CH AH0 L\nKITCHEN  K IH1 - CH AH0 N\nKITCHEN'S  K IH1 - CH AH0 N Z\nKITCHENAID  K IH1 - CH AH0 - N EY2 D\nKITCHENER  K IH1 - CH AH0 - N ER0\nKITCHENER(2)  K IH1 CH - N ER0\nKITCHENETTE  K IH2 - CH AH0 - N EH1 T\nKITCHENS  K IH1 - CH AH0 N Z\nKITCHENWARE  K IH1 - CH AH0 N - W EH2 R\nKITCHIN  K IH1 - CH IH0 N\nKITCHING  K IH1 - CH IH0 NG\nKITCHINGS  K IH1 - CH IH0 NG Z\nKITE  K AY1 T\nKITES  K AY1 T S\nKITHCART  K IH1 TH - K AA2 R T\nKITIMAT  K IH1 - T IH0 - M AE0 T\nKITING  K AY1 - T IH0 NG\nKITNER  K IH1 T - N ER0\nKITOWSKI  K IH0 - T AO1 F S - K IY0\nKITS  K IH1 T S\nKITSCH  K IH1 CH\nKITSON  K IH1 T - S AH0 N\nKITT  K IH1 T\nKITTANEH  K IH0 - T AA1 - N EH2\nKITTEL  K IH1 - T AH0 L\nKITTELL  K IH1 - T AH0 L\nKITTELSON  K IH1 - T IH0 L - S AH0 N\nKITTEN  K IH1 - T AH0 N\nKITTENS  K IH1 - T AH0 N Z\nKITTERMAN  K IH1 - T ER0 - M AH0 N\nKITTINGER  K IH1 - T IH0 - NG ER0\nKITTIWAKE  K IH1 - T IH0 - W EY2 K\nKITTLE  K IH1 - T AH0 L\nKITTLER  K IH1 - T AH0 L - ER0\nKITTLES  K IH1 - T AH0 L Z\nKITTLESON  K IH1 - T AH0 L - S AH0 N\nKITTMAN  K IH1 T - M AH0 N\nKITTNER  K IH1 T - N ER0\nKITTREDGE  K IH1 - T R IH0 JH\nKITTRELL  K IH1 - T R AH0 L\nKITTS  K IH1 T S\nKITTY  K IH1 - T IY0\nKITZ  K IH1 T S\nKITZHABER  K IH1 T S - HH EY2 - B ER0\nKITZHABER(2)  K IH1 T S - HH AA2 - B ER0\nKITZMAN  K IH1 T S - M AH0 N\nKITZMILLER  K IH1 T S - M IH2 - L ER0\nKIVELA  K IH1 - V IH0 - L AH0\nKIVETT  K IH1 - V IH0 T\nKIVI  K IH1 - V IY0\nKIWANI  K IH0 - W AA1 - N IH0\nKIWANIS  K IH0 W - AA1 - N IH0 S\nKIWI  K IY1 - W IY0\nKIWI'S  K IY1 - W IY0 Z\nKIWIS  K IY1 - W IY0 Z\nKIYOHIDA  K IY2 - OW0 - HH IY1 - D AH0\nKIYOSHI  K IY0 - OW1 - SH IY0\nKIYOTAKA  K IY2 - OW0 - T AA1 - K AH0\nKIZER  K AY1 - Z ER0\nKIZZIAH  K IH1 - Z IY0 - AH0\nKJAR  K AH0 - JH AA1 R\nKJAR(2)  K EY1 - JH EY1 - EY1 - AA1 R\nKJELL  K Y EH1 L\nKJELLBERG  JH EH1 L - B ER0 G\nKJELLBERG(2)  K AH0 - JH EH1 L - B ER0 G\nKJENSTAD  K Y EH1 N - S T AE2 D\nKJOS  K AH0 - JH AA1 S\nKJOS(2)  K EY1 - JH EY1 - OW1 - EH1 S\nKKK  K EY1 - K EY1 - K EY1\nKLAAS  K L AA1 S\nKLAASSEN  K L AA1 - S AH0 N\nKLABUNDE  K L AE1 - B AH0 N D\nKLADSTRUP  K L AE1 D - S T R AH0 P\nKLADSTRUP'S  K L AE1 D - S T R AH0 P S\nKLAGES  K L EY1 - JH IH0 Z\nKLAHN  K L AE1 N\nKLAHR  K L AE1 R\nKLAIBER  K L EY1 - B ER0\nKLAMER  K L EY1 - M ER0\nKLAMM  K L AE1 M\nKLAMMER  K L AE1 - M ER0\nKLAMON  K L EY1 - M AH0 N\nKLAN  K L AE1 N\nKLAN'S  K L AE1 N Z\nKLANG  K L AE1 NG\nKLANN  K L AE1 N\nKLANS  K L AE1 N Z\nKLANSMEN  K L AE1 N Z - M AH0 N\nKLAPP  K L AE1 P\nKLAPPER  K L AE1 - P ER0\nKLAPPERICH  K L AE1 - P ER0 - IH0 K\nKLAR  K L AA1 R\nKLARE  K L EH1 R\nKLARICH  K L AE1 - R IH0 K\nKLARMAN  K L AA1 R - M AH0 N\nKLAS  K L AE1 S\nKLASE  K L EY1 Z\nKLASEN  K L EY1 - S AH0 N\nKLASS  K L AE1 S\nKLASSEN  K L AE1 - S AH0 N\nKLATSKY  K L AE1 T S - K IY0\nKLATT  K L AE1 T\nKLAUBER  K L AW1 - B ER0\nKLAUER  K L AW1 - ER0\nKLAUS  K L AW1 S\nKLAUSER  K L AW1 - S ER0\nKLAUSING  K L AW1 - S IH0 NG\nKLAUSNER  K L AW1 S - N ER0\nKLAVER  K L EY1 - V ER0\nKLAWITTER  K L AO1 - IH0 - T ER0\nKLAY  K L EY1\nKLAYMAN  K L EY1 - M AH0 N\nKLEBAN  K L EH1 - B AH0 N\nKLEBBA  K L EH1 - B AH0\nKLEBE  K L IY1 B\nKLEBER  K L IY1 - B ER0\nKLECK  K L EH1 K\nKLECKA  K L EH1 - K AH0\nKLECKER  K L EH1 - K ER0\nKLECKNER  K L EH1 K - N ER0\nKLEE  K L IY1\nKLEE'S  K L IY1 Z\nKLEEMAN  K L IY1 - M AH0 N\nKLEEN  K L IY1 N\nKLEENEX  K L IY1 - N AH0 K S\nKLEER  K L IH1 R\nKLEES  K L IY1 Z\nKLEFFNER  K L EH1 F - N ER0\nKLEIBER  K L AY1 - B ER0\nKLEIER  K L AY1 - ER0\nKLEIMAN  K L AY1 - M AH0 N\nKLEIN  K L AY1 N\nKLEIN'S  K L AY1 N Z\nKLEINBERG  K L AY1 N - B ER0 G\nKLEINDIENST  K L AY1 N - D IY2 N S T\nKLEINE  K L AY1 N\nKLEINER  K L AY1 - N ER0\nKLEINERT  K L AY1 - N ER0 T\nKLEINFELD  K L AY1 N - F EH2 L D\nKLEINFELTER  K L AY1 N - F IH0 L - T ER0\nKLEINHANS  K L AY1 N - HH AH0 N Z\nKLEINHENZ  K L AY1 N - HH IH0 N S\nKLEINKNECHT  K L AY1 NG K - N IH0 K T\nKLEINMAN  K L AY1 N - M AH0 N\nKLEINPASTE  K L AY1 N - P EY2 S T\nKLEINPETER  K L AY1 N - P IY0 - T ER0\nKLEINSASSER  K L AY1 N - S AH0 - S ER0\nKLEINSCHMIDT  K L AY1 N SH - M IH2 T\nKLEINSMITH  K L AY1 N - S M IH0 TH\nKLEINWORT  K L AY1 N - W ER0 T\nKLEIS  K L AY1 Z\nKLEISS  K L AY1 S\nKLEIST  K L AY1 S T\nKLEJNA  K L EY1 - N ER0\nKLEM  K L EH1 M\nKLEMA  K L EH1 - M AH0\nKLEMAN  K L EH1 - M AH0 N\nKLEMANN  K L EH1 - M AH0 N\nKLEMENS  K L EH1 - M AH0 N S\nKLEMENT  K L EH1 - M AH0 N T\nKLEMM  K L EH1 M\nKLEMME  K L EH1 M\nKLEMMER  K L EH1 - M ER0\nKLEMP  K L EH1 M P\nKLEMPNER  K L EH1 M P - N ER0\nKLEMZ  K L EH1 M Z\nKLENGE  K L EH1 N JH\nKLENK  K L EH1 NG K\nKLENKE  K L EH1 NG K\nKLENSCH  K L EH1 N SH\nKLEPAC  K L EH1 - P AH0 K\nKLEPFER  K L EH1 P - F ER0\nKLEPPE  K L EH1 P\nKLEPPER  K L EH1 - P ER0\nKLEPPINGER  K L EH1 - P IH0 NG - G ER0\nKLERK  K L ER1 K\nKLERK'S  K L ER1 K S\nKLESCH  K L EH1 SH\nKLESKEN  K L EH1 S - K AH0 N\nKLESS  K L EH1 S\nKLETT  K L EH1 T\nKLEVE  K L IY1 V\nKLEVEN  K L IY1 - V AH0 N\nKLEVER  K L EH1 - V ER0\nKLEY  K L EY1\nKLEZMER  K L EH1 Z - M ER0\nKLICH  K L IH1 CH\nKLICK  K L IH1 K\nKLIEBERT  K L IY1 - B ER0 T\nKLIEG  K L IY1 G\nKLIEMAN  K L AY1 - M AH0 N\nKLIER  K L AY1 - ER0\nKLIETHERMES  K L IY1 - TH ER0 M Z\nKLIEWER  K L IY1 - W ER0\nKLIGMAN  K L IH1 G - M AH0 N\nKLIM  K L IH1 M\nKLIMA  K L AY1 - M AH0\nKLIMAS  K L AY1 - M AH0 Z\nKLIMASZEWSKI  K L IH0 - M AH0 - SH EH1 F S - K IY0\nKLIMCZAK  K L IH1 M - CH AE0 K\nKLIMEK  K L IH1 - M IH0 K\nKLIMENT  K L AY1 - M AH0 N T\nKLIMER  K L IH1 - M ER0\nKLIMER(2)  K L AY1 - M ER0\nKLIMOWICZ  K L IH1 - M AH0 - V IH0 CH\nKLINCK  K L IH1 NG K\nKLINDT  K L IH1 N T\nKLINDWORTH  K L IH1 N D - W ER0 TH\nKLINE  K L AY1 N\nKLINEDINST  K L IH1 - N IH0 - D IH0 N S T\nKLINEDINST(2)  K L AY1 N - D IH0 N S T\nKLINEFELTER  K L IH1 - N IH0 - F IH0 L - T ER0\nKLINEFELTER(2)  K L AY1 N - F IH0 L - T ER0\nKLING  K L IH1 NG\nKLINGAMAN  K L IH1 NG - G AH0 - M AH0 N\nKLINGBEIL  K L IH1 NG - B AY0 L\nKLINGBERG  K L IH1 NG - B ER0 G\nKLINGE  K L IH1 N JH\nKLINGEL  K L IH1 NG - G AH0 L\nKLINGENBERG  K L IH1 - NG AH0 N - B ER0 G\nKLINGENSMITH  K L IH1 NG - G IH0 N - S M IH0 TH\nKLINGER  K L IH1 - NG ER0\nKLINGER'S  K L IH1 - NG ER0 Z\nKLINGERMAN  K L IH1 - NG ER0 - M AH0 N\nKLINGHOFFER  K L IH1 NG - HH AO2 - F ER0\nKLINGLER  K L IH1 NG - G AH0 - L ER0\nKLINGLER(2)  K L IH1 NG - G L ER0\nKLINGMAN  K L IH1 NG - M AH0 N\nKLINGON  K L IH1 NG - G AH0 N\nKLINK  K L IH1 NG K\nKLINKE  K L IH1 NG K\nKLINKER  K L IH1 NG - K ER0\nKLINKHAMMER  K L IH1 NG K - HH AE0 - M ER0\nKLINKHAMMER'S  K L IH1 NG K - HH AE0 - M ER0 Z\nKLINKNER  K L IH1 NG K - N ER0\nKLINT  K L IH1 N T\nKLINTWORTH  K L IH1 N T - W ER0 TH\nKLINZING  K L IH1 N - Z IH0 NG\nKLIPFEL  K L IH1 P - F AH0 L\nKLIPP  K L IH1 P\nKLIPPEL  K L IH1 - P AH0 L\nKLISH  K L IH1 SH\nKLITZ  K L IH1 T S\nKLITZKE  K L IH1 T S - K IY0\nKLIXSHAVICH  K L IH0 K - S AE1 - V IH0 CH\nKLOBERDANZ  K L AA1 - B ER0 - D AH0 N S\nKLOC  K L AA1 K\nKLOCEK  K L OW1 - S IH0 K\nKLOCK  K L AA1 K\nKLOCKE  K L AA1 K\nKLOECKNER  K L OW1 K - N ER0\nKLOEHN  K L OW1 N\nKLOEPFER  K L OW1 P - F ER0\nKLOEPPEL  K L OW1 - P AH0 L\nKLOEPPER  K L OW1 - P ER0\nKLOIBER  K L OY1 - B ER0\nKLOM  K L AO1 M\nKLOMP  K L AA1 M P\nKLONDIKE  K L AA1 N - D AY2 K\nKLONOWSKI  K L AH0 N - AO1 F S - K IY0\nKLONTZ  K L AA1 N T S\nKLOOS  K L UW1 Z\nKLOOSTER  K L UW1 - S T ER0\nKLOOSTERMAN  K L UW1 - S T ER0 - M AH0 N\nKLOPF  K L AA1 P F\nKLOPFENSTEIN  K L AA1 P - F AH0 N - S T AY0 N\nKLOPFENSTEIN(2)  K L AA1 P - F AH0 N - S T IY0 N\nKLOPFER  K L AA1 P - F ER0\nKLOPP  K L AA1 P\nKLOPPENBURG  K L AA1 - P AH0 N - B ER0 G\nKLOS  K L AA1 S\nKLOSE  K L OW1 Z\nKLOSINSKI  K L AH0 - S IH1 N - S K IY0\nKLOSOWSKI  K L AH0 S - AO1 F S - K IY0\nKLOSS  K L AO1 S\nKLOSSNER  K L AA1 S - N ER0\nKLOSTER  K L AO1 - S T ER0\nKLOSTERMAN  K L AA1 - S T ER0 - M AH0 N\nKLOSTERMANN  K L AA1 - S T ER0 - M AH0 N\nKLOTH  K L AA1 TH\nKLOTZ  K L AA1 T S\nKLOTZBACH  K L AA1 T S - B AA0 K\nKLUCEVSEK  K L UW0 - S EH1 V - S EH0 K\nKLUCK  K L AH1 K\nKLUDT  K L AH1 D T\nKLUENDER  K L UH1 N - D ER0\nKLUESNER  K L UH1 S - N ER0\nKLUEVER  K L UH1 - V ER0\nKLUG  K L AH1 G\nKLUGE  K L UW1 JH\nKLUGE'S  K L UW1 - JH IH0 Z\nKLUGER  K L UW1 - G ER0\nKLUGH  K L AH1\nKLUGMAN  K L AH1 G - M AH0 N\nKLUGT  K L AH1 T\nKLUKAS  K L UW1 - K AH0 Z\nKLUMB  K L AH1 M\nKLUMP  K L AH1 M P\nKLUMPP  K L AH1 M P\nKLUNDER  K L AH1 N - D ER0\nKLUNDT  K L AH1 N T\nKLUNK  K L AH1 NG K\nKLUS  K L AH1 S\nKLUSMAN  K L AH1 S - M AH0 N\nKLUTE  K L UW1 T\nKLUTH  K L UW1 TH\nKLUTTS  K L AH1 T S\nKLUTTZ  K L AH1 T S\nKLUTZ  K L AH1 T S\nKLUTZNICK  K L AH1 T - S N IH0 K\nKLUVER  K L UW1 - V ER0\nKLUWER  K L UW1 - W ER0\nKLUX  K L AH1 K S\nKLYM  K L IH1 M\nKLYNVELD  K L IH1 N - V EH2 L D\nKMART  K EY1 - M AA2 R T\nKMART'S  K EY1 - M AA2 R T S\nKMETZ  K AH0 - M EH1 T S\nKMIEC  K AH0 - M IY1 K\nKMIECIK  K AH0 - M IY1 - CH IH0 K\nKNAACK  N AA1 K\nKNAAK  N AA1 K\nKNAB  N AE1 B\nKNABB  N AE1 B\nKNABE  N EY1 B\nKNABLE  N EY1 - B AH0 L\nKNACK  N AE1 K\nKNACKS  N AE1 K S\nKNACKSTEDT  N AE1 K - S T IH0 T\nKNAGGS  N AE1 G Z\nKNAPE  N EY1 P\nKNAPIK  N AE1 - P IH0 K\nKNAPKE  N EY1 P K\nKNAPP  N AE1 P\nKNAPP'S  N AE1 P S\nKNAPPENBERGER  N AE1 - P AH0 N - B ER0 - G ER0\nKNAPPER  N AE1 - P ER0\nKNAPSACK  N AE1 P - S AE2 K\nKNAPTON  N AE1 P - T AH0 N\nKNARR  N AE1 R\nKNAUB  N AO1 B\nKNAUER  N AW1 - ER0\nKNAUF  N AO1 F\nKNAUFF  N AO1 F\nKNAUP  N AO1 P\nKNAUS  N AO1 Z\nKNAUSS  N AO1 S\nKNAVE  N EY1 V\nKNAVES  N EY1 V Z\nKNBC  K EY1 - EH1 N - B IY1 - S IY1\nKNEAD  N IY1 D\nKNEADING  N IY1 - D IH0 NG\nKNEAFSEY  N IY1 F - S IY0\nKNEALE  N IY1 L\nKNEBEL  N EH1 - B AH0 L\nKNECHT  N EH1 K T\nKNECHTEL  N EH1 K - T AH0 L\nKNEE  N IY1\nKNEEBONE  N IY1 - B OW2 N\nKNEECAP  N IY1 - K AE2 P\nKNEECAPS  N IY1 - K AE2 P S\nKNEECE  N IY1 S\nKNEED  N IY1 D\nKNEEL  N IY1 L\nKNEELAND  N IY1 - L AH0 N D\nKNEELING  N IY1 - L IH0 NG\nKNEER  N IH1 R\nKNEES  N IY1 Z\nKNEIP  N IY1 P\nKNEISEL  N AY1 - S AH0 L\nKNEISLEY  N IY1 S - L IY0\nKNELL  N EH1 L\nKNELLER  N EH1 - L ER0\nKNELT  N EH1 L T\nKNEPP  N EH1 P\nKNEPPER  N EH1 - P ER0\nKNERR  N EH1 R\nKNESS  N EH1 S\nKNESSET  N EH1 - S AH0 T\nKNESSET(2)  K N EH1 - S AH0 T\nKNESSET(3)  K AH0 - N EH1 - S AH0 T\nKNEW  N UW1\nKNEW(2)  N Y UW1\nKNEZEVICH  N EH1 - Z IH0 - V IH0 CH\nKNICELY  N AY1 S - L IY0\nKNICK  N IH1 K\nKNICK-KNACK  N IH1 K - N AE1 K\nKNICK-KNACKS  N IH1 K - N AE1 K S\nKNICKER  N IH1 - K ER0\nKNICKERBOCKER  N IH1 - K ER0 - B AA2 - K ER0\nKNICKERBOCKERED  N IH1 - K ER0 - B AA2 - K ER0 D\nKNICKERBOCKERS  N IH1 - K ER0 - B AA2 - K ER0 Z\nKNICKERS  N IH1 - K ER0 Z\nKNICKKNACK  N IH1 K - N AE2 K\nKNICKKNACKS  N IH1 K - N AE2 K S\nKNICKS  N IH1 K S\nKNIEF  N IY1 F\nKNIEP  N IY1 P\nKNIERIEM  N IY1 - R IY2 M\nKNIERIM  N IH1 - R IH0 M\nKNIES  N AY1 Z\nKNIESS  N IY1 S\nKNIEVEL  K AH0 - N IY1 - V AH0 L\nKNIEVEL(2)  N IY1 - V AH0 L\nKNIFE  N AY1 F\nKNIFED  N AY1 F T\nKNIFELIKE  N AY1 - F L AY2 K\nKNIFEPOINT  N AY1 F - P OY2 N T\nKNIFFEN  N IH1 - F AH0 N\nKNIFFIN  N IH1 - F IH0 N\nKNIFING  N AY1 - F IH0 NG\nKNIFINGS  N AY1 - F IH0 NG Z\nKNIGGE  N IH1 G\nKNIGHT  N AY1 T\nKNIGHT'S  N AY1 T S\nKNIGHTED  N AY1 - T IH0 D\nKNIGHTEN  N AY1 - T AH0 N\nKNIGHTHOOD  N AY1 T - HH UH2 D\nKNIGHTLY  N AY1 T - L IY0\nKNIGHTON  N AY1 - T AH0 N\nKNIGHTS  N AY1 T S\nKNILL  N IH1 L\nKNIN  K EY1 - EH1 - N AY1 - EH1 N\nKNIN(2)  K N IH1 N\nKNIN(3)  N IH1 N\nKNIPE  N AY1 P\nKNIPFER  N IH1 P - F ER0\nKNIPL  N IH1 - P AH0 L\nKNIPP  N IH1 P\nKNIPPA  N IH1 - P AH0\nKNIPPEL  N IH1 - P AH0 L\nKNIPPENBERG  N IH1 - P AH0 N - B ER0 G\nKNIPPER  N IH1 - P ER0\nKNIPPLE  N IH1 - P AH0 L\nKNISELY  N AY1 Z - L IY0\nKNISKERN  N IH1 - S K ER0 N\nKNISLEY  N IH1 S - L IY0\nKNISPEL  N IH1 - S P AH0 L\nKNISS  N IH1 S\nKNIT  N IH1 T\nKNITS  N IH1 T S\nKNITTED  N IH1 - T AH0 D\nKNITTED(2)  N IH1 - T IH0 D\nKNITTEL  N IH1 - T AH0 L\nKNITTER  N IH1 - T ER0\nKNITTING  N IH1 - T IH0 NG\nKNITTLE  N IH1 - T AH0 L\nKNITWEAR  N IH1 T - W EH2 R\nKNIVES  N AY1 V Z\nKNIVETON  N AY1 V - T AH0 N\nKNOB  N AA1 B\nKNOBBE  N AA1 B\nKNOBBY  N AA1 - B IY0\nKNOBEL  N OW1 - B AH0 L\nKNOBLAUCH  N AA1 - B L AW0 K\nKNOBLE  N OW1 - B AH0 L\nKNOBLOCH  N AA1 - B L AH0 K\nKNOBLOCK  N AA1 - B L AA0 K\nKNOBS  N AA1 B Z\nKNOCH  N AA1 K\nKNOCHE  N AA1 CH\nKNOCHEL  N AA1 - K AH0 L\nKNOCK  N AA1 K\nKNOCKDOWN  N AA1 K - D AW2 N\nKNOCKED  N AA1 K T\nKNOCKING  N AA1 - K IH0 NG\nKNOCKOFF  N AA1 K - AO2 F\nKNOCKOFFS  N AA1 K - AO2 F S\nKNOCKOUT  N AA1 K - AW2 T\nKNOCKS  N AA1 K S\nKNODE  N OW1 D\nKNODEL  N OW1 - D AH0 L\nKNODLE  N OW1 - D AH0 L\nKNOEBEL  N OW1 - B AH0 L\nKNOEDLER  N OW1 - D AH0 - L ER0\nKNOEDLER(2)  N OW1 D - L ER0\nKNOELL  N OW1 L\nKNOFF  N AO1 F\nKNOGO  N OW1 - G OW0\nKNOKE  N OW1 K\nKNOLES  N OW1 L Z\nKNOLL  N OW1 L\nKNOLL'S  N OW1 L Z\nKNOOP  N UW1 P\nKNOP  N AA1 P\nKNOPE  N OW1 P\nKNOPF  N AA1 P F\nKNOPF(2)  N AA1 F\nKNOPP  N AA1 P\nKNORR  N AO1 R\nKNOST  N AA1 S T\nKNOT  N AA1 T\nKNOTEK  N OW1 - T IH0 K\nKNOTH  N AA1 TH\nKNOTS  N AA1 T S\nKNOTT  N AA1 T\nKNOTT'S  N AA1 T S\nKNOTTED  N AA1 - T IH0 D\nKNOTTS  N AA1 T S\nKNOTTY  N AA1 - T IY0\nKNOUFF  N OW1 F\nKNOUS  N AO1 S\nKNOUSE  N AW1 S\nKNOW  N OW1\nKNOWED  N OW1 D\nKNOWER  N OW1 - ER0\nKNOWING  N OW1 - IH0 NG\nKNOWINGLY  N OW1 - IH0 NG - L IY0\nKNOWLEDGE  N AA1 - L AH0 JH\nKNOWLEDGE(2)  N AA1 - L IH0 JH\nKNOWLEDGEABLE  N AA1 - L AH0 - JH AH0 - B AH0 L\nKNOWLEDGEABLY  N AA1 - L IH0 - JH AH0 - B L IY0\nKNOWLEDGEWARE  N AA1 - L IH0 JH - W EH2 R\nKNOWLES  N OW1 L Z\nKNOWLTON  N OW1 L - T AH0 N\nKNOWN  N OW1 N\nKNOWNS  N OW1 N Z\nKNOWS  N OW1 Z\nKNOX  N AA1 K S\nKNOX'S  N AA1 K - S IH0 Z\nKNOXVILLE  N AA1 K S - V IH0 L\nKNOY  N OY1\nKNUCKLE  N AH1 - K AH0 L\nKNUCKLED  N AH1 - K AH0 L D\nKNUCKLES  N AH1 - K AH0 L Z\nKNUDSEN  N UW1 D - S AH0 N\nKNUDSEN'S  N UW1 D - S AH0 N Z\nKNUDSON  N UW1 D - S AH0 N\nKNUDTSON  N UW1 T - S AH0 N\nKNUEPPEL  N UW1 - P AH0 L\nKNUPP  N AH1 P\nKNUST  N AH1 S T\nKNUT  N AH1 T\nKNUTE  N UW1 T\nKNUTH  N UW1 TH\nKNUTS  N AH1 T S\nKNUTSEN  N AH1 T - S AH0 N\nKNUTSON  K N UW1 T - S AH0 N\nKNUTZEN  N AH1 T - Z AH0 N\nKO  K OW1\nKOALA  K OW0 - AA1 - L AH0\nKOALAS  K OW0 - AA1 - L AH0 Z\nKOBA  K OW1 - B AH0\nKOBACKER  K OW1 - B AE2 - K ER0\nKOBAK  K OW1 - B AH0 K\nKOBAYASHI  K OW2 - B AA0 - Y AA1 - SH IY0\nKOBE  K OW1 - B EY0\nKOBE'S  K OW1 - B EY0 Z\nKOBEL  K OW1 - B AH0 L\nKOBER  K OW1 - B ER0\nKOBERSTEIN  K OW1 - B ER0 - S T AY0 N\nKOBERSTEIN(2)  K OW1 - B ER0 - S T IY0 N\nKOBES  K OW1 B Z\nKOBLE  K OW1 - B AH0 L\nKOBLER  K OW1 - B AH0 L - ER0\nKOBLER(2)  K OW1 - B L ER0\nKOBREN  K AA1 - B R AH0 N\nKOBRIN  K AA1 - B R IH0 N\nKOBRIN'S  K AA1 - B R IH0 N Z\nKOBS  K AA1 B Z\nKOBUS  K OW1 - B AH0 S\nKOBY  K OW1 - B IY0\nKOBYLARZ  K AH0 - B IH1 - L ER0 Z\nKOBYLINSKI  K AH0 - B IH0 - L IH1 N - S K IY0\nKOBZA  K AA1 B - Z AH0\nKOCAK  K OW1 - K AH0 K\nKOCH  K AO1 CH\nKOCH(2)  K OW1 K\nKOCHAN  K AA1 - K AH0 N\nKOCHANEK  K AA1 - K AH0 - N IH0 K\nKOCHANOWSKI  K AH0 - HH AH0 - N AO1 F S - K IY0\nKOCHANSKI  K AH0 - HH AE1 N S - K IY0\nKOCHEL  K AA1 - K AH0 L\nKOCHENDORFER  K AA1 - K IH0 N - D AO0 R - F ER0\nKOCHER  K AO1 - CH ER0\nKOCHEVAR  K AH0 - HH EH1 - V ER0\nKOCHIS  K AA1 - K IH0 S\nKOCHMAN  K AA1 K - M AH0 N\nKOCI  K OW1 - S IY0\nKOCIAN  K OW1 - SH AH0 N\nKOCIEMBA  K OW2 - S IY0 - EH1 M - B AH0\nKOCINSKI  K AH0 - CH IH1 N - S K IY0\nKOCIOLEK  K OW2 - S IY0 - OW1 - L EH0 K\nKOCIS  K OW1 - S IH0 S\nKOCK  K AA1 K\nKOCOUREK  K AH0 - K UH1 - R EH0 K\nKOCSIS  K AA1 K - S IH0 S\nKOCUR  K OW1 - K ER0\nKOCUR'S  K OW1 - K ER0 Z\nKOCUREK  K AH0 - K Y UW1 - R EH0 K\nKODACOLOR  K OW1 - D AH0 - K AH2 - L ER0\nKODAK  K OW1 - D AE2 K\nKODAK'S  K OW1 - D AE2 K S\nKODAMA  K OW0 - D AA1 - M AH0\nKODIAK  K OW1 - D IY0 - AE2 K\nKODO  K OW1 - D OW0\nKOEBEL  K OW1 - B AH0 L\nKOEDINGER  K OW1 - D IH0 - NG ER0\nKOEGEL  K OW1 - G AH0 L\nKOEGLER  K OW1 - G AH0 - L ER0\nKOEGLER(2)  K OW1 G - L ER0\nKOEHL  K OW1 L\nKOEHLER  K OW1 - L ER0\nKOEHN  K OW1 N\nKOEHNE  K OW1 N\nKOEHNEN  K OW1 - N AH0 N\nKOEKI  K OW1 - K IY0\nKOELLE  K OW1 L\nKOELLER  K OW1 - L ER0\nKOELLING  K OW1 - L IH0 NG\nKOELSCH  K OW1 L SH\nKOELZER  K OW1 L - Z ER0\nKOEN  K OW1 N\nKOENEMAN  K AA1 - IY0 N - M AH0 N\nKOENEN  K OW1 - N AH0 N\nKOENIG  K ER1 - N IH0 G\nKOENIGS  K ER1 - N IH0 G Z\nKOENIGSBERG  K OW1 - N IH0 G Z - B ER0 G\nKOENIGSFELD  K OW1 - N IH0 G Z - F EH2 L D\nKOEP  K OW1 P\nKOEPKE  K OW1 P K\nKOEPP  K OW1 P\nKOEPPE  K OW1 P\nKOEPPEL  K OW1 - P AH0 L\nKOEPPEN  K OW1 - P AH0 N\nKOEPSEL  K OW1 P - S AH0 L\nKOEPSELL  K OW1 P - S AH0 L\nKOERBER  K AO1 R - B ER0\nKOERNER  K AO1 R - N ER0\nKOERNKE  K ER1 - N AH0 - K IY0\nKOERNKE(2)  K ER1 - N IH0 K\nKOESTER  K OW1 - S T ER0\nKOESTERS  K OW1 - S T ER0 Z\nKOESTLER  K OW1 - S AH0 - L ER0\nKOESTLER(2)  K OW1 S - L ER0\nKOESTNER  K OW1 S T - N ER0\nKOETHER  K OW1 - DH ER0\nKOETJE  K OW1 T JH\nKOETTER  K OW1 - T ER0\nKOETTING  K OW1 - T IH0 NG\nKOFF  K AO1 F\nKOFFLER  K AA1 - F AH0 - L ER0\nKOFFLER(2)  K AA1 F - L ER0\nKOFFMAN  K AO1 F - M AH0 N\nKOFI  K OW1 - F IY0\nKOFLER  K OW1 - F AH0 - L ER0\nKOFLER(2)  K OW1 F - L ER0\nKOFOED  K OW1 - F OW0 D\nKOFRON  K AA1 - F R AH0 N\nKOGA  K OW1 - G AH0\nKOGAN  K OW1 - G AH0 N\nKOGEL  K OW1 - G AH0 L\nKOGER  K OW1 - G ER0\nKOGI  K OW1 - G IY0\nKOGLER  K OW1 - G AH0 - L ER0\nKOGLER(2)  K OW1 G - L ER0\nKOGLIN  K AA1 G - L IH0 N\nKOGUT  K OW1 - G AH0 T\nKOGYO  K OW1 JH - Y OW0\nKOH  K OW1\nKOHAN  K OW1 - HH AA0 N\nKOHEN  K OW1 - AH0 N\nKOHL  K OW1 L\nKOHL'S  K OW1 L Z\nKOHLBECK  K OW1 L - B EH2 K\nKOHLBERG  K OW1 L - B ER0 G\nKOHLBERG'S  K OW1 L - B ER0 G Z\nKOHLENBERG  K OW1 - L AH0 N - B ER0 G\nKOHLER  K OW1 - L ER0\nKOHLES  K OW1 - HH AH0 L Z\nKOHLHEPP  K OW1 L - HH IH0 P\nKOHLHOFF  K OW1 L - HH AO2 F\nKOHLI  K OW1 - L IY0\nKOHLMAN  K OW1 L - M AH0 N\nKOHLMANN  K OW1 L - M AH0 N\nKOHLMEIER  K OW1 L - M AY0 - ER0\nKOHLMEYER  K OW1 L - M AY0 - ER0\nKOHLS  K OW1 L Z\nKOHN  K AA1 N\nKOHNE  K OW1 N\nKOHNEN  K OW1 - N AH0 N\nKOHNER  K OW1 - N ER0\nKOHNKE  K AA1 NG K\nKOHOUT  K OW1 - AW0 T\nKOHR  K AO1 R\nKOHRING  K AO1 - R IH0 NG\nKOHRS  K AO1 R Z\nKOHTARO  K OW0 - T AA1 - R OW0\nKOHTORO  K OW0 - T AO1 - R OW0\nKOHUT  K OW1 - AH0 T\nKOICHI  K OW0 - IY1 - CH IY0\nKOIDO  K OY1 - D OW0\nKOIKE  K OY1 K\nKOITO  K OY1 - T OW0\nKOITO(2)  K OY1 - T OW2\nKOITO(3)  K OW2 - IY1 - T OW2\nKOIVISTO  K OY2 - V IH1 - S T OW0\nKOJAK  K OW1 - JH AE2 K\nKOJI  K OW1 - JH IY0\nKOJIMA  K AH0 - Y AY1 - M AH0\nKOK  K AA1 K\nKOKAN  K OW1 - K AH0 N\nKOKAN'S  K OW1 - K AH0 N Z\nKOKATE  K OW2 - K AA1 - T EY2\nKOKATE'S  K OW2 - K AA1 - T EY2 Z\nKOKATE'S(2)  K OW2 - K AA1 - T EY0 Z\nKOKATE(2)  K OW2 - K AA1 - T EY0\nKOKE  K OW1 K\nKOKEN  K OW1 - K AH0 N\nKOKER  K OW1 - K ER0\nKOKES  K OW1 K S\nKOKESH  K AA1 - K IH0 SH\nKOKI  K OW1 - K IY0\nKOKINDA  K AH0 - K IH1 N - D AH0\nKOKO  K OW1 - K OW0\nKOKO'S  K OW1 - K OW0 Z\nKOKOMO  K OW1 - K AH0 - M OW2\nKOKOSCHKA  K AH0 - K AO1 SH - K AH0\nKOKOSZKA  K AH0 - K AA1 SH - K AH0\nKOKUSAI  K AA1 K - Y UW0 - S AY2\nKOL  K OW1 L\nKOLAKOWSKI  K AH0 - L AH0 - K AO1 F S - K IY0\nKOLANDER  K AA1 - L AH0 N - D ER0\nKOLAR  K OW1 - L ER0\nKOLARIK  K AH0 - L AA1 - R IH0 K\nKOLASA  K AH0 - L AA1 - S AH0\nKOLASINSKI  K AH0 - L AH0 - S IH1 N - S K IY0\nKOLB  K OW1 L B\nKOLBE  K OW1 L B\nKOLBECK  K AA1 L - B EH0 K\nKOLBER  K OW1 L - B ER0\nKOLBERG  K OW1 L - B ER0 G\nKOLBERT  K OW1 L - B ER0 T\nKOLBO  K OW1 L - B OW0\nKOLDEN  K OW1 L - D AH0 N\nKOLE  K OW1 L\nKOLEK  K OW1 - L EH0 K\nKOLENDA  K AH0 - L EH1 N - D AH0\nKOLESAR  K AH0 - L EH1 - S ER0\nKOLICH  K AA1 - L IH0 HH\nKOLIN  K OW1 - L IH0 N\nKOLINSKI  K AH0 - L IH1 N - S K IY0\nKOLK  K OW1 K\nKOLKA  K OW1 L - K AH0\nKOLKER  K OW1 - K ER0\nKOLL  K AA1 L\nKOLLAR  K AA1 - L ER0\nKOLLASCH  K AA1 - L AH0 SH\nKOLLATH  K AA1 - L AH0 TH\nKOLLE  K AA1 L\nKOLLEK  K AO1 - L EH0 K\nKOLLEK(2)  K OW1 - L EH0 K\nKOLLER  K AA1 - L ER0\nKOLLI  K AA1 - L IY0\nKOLLING  K AA1 - L IH0 NG\nKOLLMAN  K AA1 L - M AH0 N\nKOLLMANN  K AA1 L - M AH0 N\nKOLLMEYER  K AA1 L - M AY0 - ER0\nKOLLMORGEN  K OW0 L - M AO1 R - G AH0 N\nKOLM  K OW1 M\nKOLMAN  K AA1 L - M AH0 N\nKOLODNY  K AH0 - L AA1 D - N IY0\nKOLODZIEJ  K AH0 - L AA1 D - Z IY0 JH\nKOLODZIEJSKI  K AH0 - L AA2 - JH IY0 - EY1 S - K IY0\nKOLOJEJCHICK  K OW2 - L OW0 - JH EY1 - CH IH0 K\nKOLOKOFF  K AA1 - L AH0 - K AO2 F\nKOLOSKI  K AH0 - L AW1 S - K IY0\nKOLOWICH  K AA1 - L AH0 - W IH0 CH\nKOLP  K OW1 L P\nKOLSKI  K OW1 L - S K IY0\nKOLSKY  K OW1 L - S K IY0\nKOLSTAD  K OW1 L - S T AH0 D\nKOLTER  K OW1 L - T ER0\nKOLTERMAN  K OW1 L - T ER0 - M AH0 N\nKOLTON  K OW1 L - T AH0 N\nKOLTS  K OW1 L T S\nKOLTZ  K OW1 L T S\nKOMABA  K OW0 - M AA1 - B AH0\nKOMAG  K OW1 - M AE0 G\nKOMAN  K OW1 - M AH0 N\nKOMANSKY  K OW0 - M AE1 N - S K IY0\nKOMAR  K OW1 - M ER0\nKOMARA  K OW0 - M AA1 - R AH0\nKOMAREK  K OW0 - M AA1 - R EH0 K\nKOMARIK  K OW0 - M AA1 - R IH0 K\nKOMARIK'S  K OW0 - M AA1 - R IH0 K S\nKOMATSU  K OW0 - M AA1 T - S UW1\nKOMBAT  K AA1 M - B AE0 T\nKOMER  K OW1 - M ER0\nKOMERCNI  K OW2 - M ER1 CH - N IY0\nKOMI  K OW1 - M IY0\nKOMINE  K OW1 - M AY2 N\nKOMINEFT  K AA1 - M IH0 - N EH0 F T\nKOMISAR  K AH0 - M IH1 - S ER0\nKOMISAR(2)  K AA1 - M IH0 - S AA0 R\nKOMMER  K AA1 - M ER0\nKOMODO  K AH0 - M OW1 - D OW0\nKOMODO(2)  K OW0 - M OW1 - D OW0\nKOMORI  K OW0 - M AO1 - R IY0\nKOMORNY  K OW0 - M AO1 R - N IY0\nKOMOROWSKI  K AH0 - M ER0 - AO1 F S - K IY0\nKOMOTO  K OW0 - M OW1 - T OW0\nKOMP  K AA1 M P\nKOMPANEK  K AA2 M - P AA1 - N EH2 K\nKOMSOMOL  K AA1 M - S OW0 - M AH0 L\nKOMSOMOL'S  K AA1 M - S OW0 - M AH0 L Z\nKOMURA  K OW2 - M UH1 - R AH0\nKON  K AA1 N\nKONA  K OW1 - N AH0\nKONAGA  K AH0 - N AA1 - G AH0\nKONARSKI  K AH0 - N AA1 R S - K IY0\nKONCZAL  K AA1 N - CH AH0 L\nKONDAS  K AA1 N - D AH0 Z\nKONDO  K AA1 N - D OW0\nKONDRACKI  K AH0 N - D R AA1 T S - K IY0\nKONDRAT  K AA1 N - D R AH0 T\nKONECNY  K AH0 - N EH1 K - N IY0\nKONEN  K AA1 - N AH0 N\nKONG  K AO1 NG\nKONG'S  K AO1 NG Z\nKONG'S(2)  K AO1 NG G Z\nKONG(2)  K AO1 NG G\nKONGSBERG  K AO1 NG Z - B ER0 G\nKONGSBERG'S  K AO1 NG Z - B ER0 G Z\nKONGSBERG'S(2)  K AO1 NG G Z - B ER0 G Z\nKONGSBERG(2)  K AO1 NG G Z - B ER0 G\nKONICA  K AA1 - N IH0 - K AH0\nKONICEK  K AA1 - N IH0 - CH EH2 K\nKONICKI  K AH0 - N IH1 T S - K IY0\nKONIECZKA  K AH0 - N IY1 CH - K AH0\nKONIECZNY  K AH0 - N IY1 CH - N IY0\nKONIG  K AA1 - N IH0 G\nKONING  K OW1 - N IH0 NG\nKONINKLIJKE  K AA2 - N IH0 NG - K L IY1 - K IY0\nKONISHI  K OW0 - N IY1 - SH IY0\nKONISHIROKU  K AA2 - N IH2 - SH IH0 - R OW1 - K UW2\nKONITZER  K AA1 - N IH0 T - Z ER0\nKONKEL  K AA1 NG - K AH0 L\nKONKLE  K AA1 NG - K AH0 L\nKONKOL  K AA1 NG - K AO0 L\nKONNER  K AA1 - N ER0\nKONO  K OW1 - N OW0\nKONOLD  K AA1 - N OW0 L D\nKONOP  K OW1 - N AH0 P\nKONOPKA  K AH0 - N OW1 P - K AH0\nKONRAD  K AA1 N - R AH0 D\nKONRATH  K AA1 N - R AH0 TH\nKONSTANTIN  K AA1 N - S T IH0 N - T IY2 N\nKONSULTAT  K AA2 N - S AH0 L - T AA1 T\nKONTOS  K AA1 N - T OW0 Z\nKONTRA  K AA1 N - T R AH0\nKONTRAS  K AA1 N - T R AH0 S\nKONTROLLBANK  K AA1 N - T R AH0 L - B AE2 NG K\nKONWINSKI  K AH0 N - V IH1 N - S K IY0\nKONZ  K AA1 N Z\nKONZEN  K AA1 N - Z AH0 N\nKONZI  K AA1 N - Z IY0\nKONZI'S  K AA1 N - Z IY0 Z\nKOO  K UW1\nKOOB  K UW1 B\nKOOGLER  K UW1 G - L ER0\nKOOI  K UW1 - IY0\nKOOIKER  K UW1 - IH0 - K ER0\nKOOIMAN  K UW1 - IH0 - M AH0 N\nKOOISTRA  K UW0 - IH1 Z - T R AH0\nKOOK  K UW1 K\nKOOKEN  K UW1 - K AH0 N\nKOOKER  K UH1 - K ER0\nKOOKS  K UW1 K S\nKOOKY  K UW1 - K IY0\nKOOL  K UW1 L\nKOOLHAAS  K UW1 L - HH AA0 S\nKOON  K UW1 N\nKOON'S  K UW1 N Z\nKOONCE  K UW1 N S\nKOONE  K UW1 N\nKOONING  K UW1 - N IH0 NG\nKOONS  K UW1 N Z\nKOONTS  K UW1 N T S\nKOONTZ  K UW1 N T S\nKOOP  K UW1 P\nKOOP'S  K UW1 P S\nKOOPMAN  K UW1 P - M AH0 N\nKOOPMANN  K UW1 P - M AH0 N\nKOOPS  K UW1 P S\nKOOR  K UW1 R\nKOORS  K UH1 R Z\nKOOS  K UW1 Z\nKOOSER  K UW1 - Z ER0\nKOOTENAY  K UW1 - T AH0 - N EY2\nKOOY  K UW1 - IY0\nKOOYMAN  K AA1 - OY0 - M AH0 N\nKOPACZ  K AA1 - P AH0 CH\nKOPAS  K OW1 - P AH0 Z\nKOPCZYNSKI  K AH0 P - CH IH1 N - S K IY0\nKOPE  K OW1 P\nKOPEC  K OW1 - P IH0 K\nKOPECKY  K AH0 - P EH1 T S - K IY0\nKOPEK  K OW1 - P AH0 K\nKOPEKS  K OW1 - P AH0 K S\nKOPEL  K OW1 - P AH0 L\nKOPELMAN  K OW1 - P AH0 L - M AH0 N\nKOPER  K OW1 - P ER0\nKOPERA  K AH0 - P IH1 - R AH0\nKOPERSKI  K AH0 - P ER1 S - K IY0\nKOPETSKI  K AH0 - P EH1 T S - K IY0\nKOPF  K AO1 P F\nKOPINSKI  K AH0 - P IH1 N - S K IY0\nKOPISCHKE  K AH0 - P IH1 SH - K IY0\nKOPIT  K AA1 - P IH0 T\nKOPKA  K OW1 P - K AH0\nKOPKE  K OW1 P K\nKOPKO  K OW1 P - K OW0\nKOPLAN  K AA1 P - L AH0 N\nKOPLIN  K AA1 P - L IH0 N\nKOPLOVITZ  K AA1 - P L AH0 - V IH0 T S\nKOPP  K AA1 P\nKOPPE  K AA1 P\nKOPPEL  K AA1 - P AH0 L\nKOPPEL'S  K AA1 - P AH0 L Z\nKOPPELL  K AA1 - P AH0 L\nKOPPELMAN  K AA1 - P AH0 L - M AH0 N\nKOPPEN  K AA1 - P AH0 N\nKOPPENHAVER  K AA1 - P IH0 N - HH AH0 - V ER0\nKOPPER  K AA1 - P ER0\nKOPPERS  K AA1 - P ER0 Z\nKOPPERS'  K AA1 - P ER0 Z\nKOPPES  K AA1 P S\nKOPPLE  K AA1 - P AH0 L\nKOPPLIN  K AA1 P - L IH0 N\nKOPRIVA  K AA1 - P R IH0 - V AH0\nKOPROWSKI  K AH0 P - R AO1 F S - K IY0\nKOPS  K AA1 P S\nKOPY  K AA1 - P IY0\nKORA  K AO1 - R AH0\nKORAL  K AO1 - R AH0 L\nKORAN  K AO0 - R AA1 N\nKORANDA  K ER0 - AE1 N - D AH0\nKORANIC  K AO0 - R AE1 - N IH0 K\nKORB  K AO1 R B\nKORBA  K AO1 R - B AH0\nKORBEL  K AO1 R - B AH0 L\nKORBER  K AO1 R - B ER0\nKORBREN  K AO1 R - B R EH0 N\nKORBY  K AO1 R - B IY0\nKORCZAK  K AO1 R - CH AE0 K\nKORDA  K AO1 R - D AH0\nKOREA  K AO0 - R IY1 - AH0\nKOREA'S  K AO0 - R IY1 - AH0 Z\nKOREA'S(2)  K R IY1 - AH0 Z\nKOREA'S(3)  K ER0 - R IY1 - AH0 Z\nKOREA(2)  K R IY1 - AH0\nKOREA(3)  K ER0 - R IY1 - AH0\nKOREAGATE  K AO0 - R IY1 - AH0 - G EY2 T\nKOREAGATE(2)  K ER0 - R IY1 - AH0 - G EY2 T\nKOREAN  K AO0 - R IY1 - AH0 N\nKOREAN'S  K R IY1 - AH0 N Z\nKOREAN'S(2)  K ER0 - IY1 - AH0 N Z\nKOREAN(2)  K R IY1 - AH0 N\nKOREAN(3)  K ER0 - R IY1 - AH0 N\nKOREANS  K AO0 - R IY1 - AH0 N Z\nKOREANS'  K AO0 - R IY1 - AH0 N Z\nKOREANS'(2)  K R IY1 - AH0 N Z\nKOREANS'(3)  K ER0 - R IY1 - AH0 N Z\nKOREANS(2)  K R IY1 - AH0 N Z\nKOREANS(3)  K ER0 - R IY1 - AH0 N Z\nKOREAS  K AO1 - R IY0 - AH0 Z\nKOREAS(2)  K R IY0 - AH0 Z\nKOREAS(3)  K ER0 - R IY0 - AH0 Z\nKOREATOWN  K ER0 - IY1 - AH0 - T AW2 N\nKORELL  K AO1 - R EH0 L\nKOREN  K AO1 - R AH0 N\nKORENEK  K AO1 - R IH0 - N IH0 K\nKORESH  K AO2 - R EH1 SH\nKORESH'S  K AO2 - R EH1 - SH AH0 Z\nKORET  K AO1 - R AH0 T\nKOREY  K AO1 - R IY0\nKORF  K AO1 R F\nKORFF  K AO1 R F\nKORFHAGE  K AO1 R F - HH IH0 JH\nKORHONEN  K AO1 R - HH AH0 - N AH0 N\nKORINEK  K AO1 - R IH0 - N IH0 K\nKORMAN  K AO1 R - M AH0 N\nKORMOS  K AO1 R - M OW0 Z\nKORN  K AO1 R N\nKORNACKI  K ER0 - N AA1 T S - K IY0\nKORNBERG  K AO1 R N - B ER0 G\nKORNBLUM  K AO1 R N - B L AH0 M\nKORNBLUTH  K AO1 R N - B L UW0 TH\nKORNEGAY  K AO1 R - N IH0 - G EY0\nKORNER  K AO1 R - N ER0\nKORNFELD  K AO1 R N - F EH0 L D\nKORNHAUSER  K AO1 R N - HH AW0 - Z ER0\nKORNREICH  K AO1 R N - R AY0 K\nKORNS  K AO1 N Z\nKOROL  K AO1 - R AO0 L\nKOROLOGOS  K AO0 - R AA2 - L OW1 - G OW0 S\nKORONA  K ER0 - OW1 - N AH0\nKOROTICH  K AO1 - R AH0 - T IH0 CH\nKORPELA  K ER0 - P IY1 - L AH0\nKORPI  K AO1 R - P IY0\nKORRY  K AO1 - R IY0\nKORRY'S  K AO1 - R IY0 Z\nKORSON  K AO1 R - S AH0 N\nKORT  K AO1 R T\nKORTE  K AO1 R T\nKORTEN  K AO1 R - T AH0 N\nKORTH  K AO1 R TH\nKORTHALS  K AO1 R - TH AH0 L Z\nKORTMAN  K AO1 R T - M AH0 N\nKORTUM  K AO1 R - T AH0 M\nKORTZ  K AO1 R T S\nKORUNA  K AO0 - R UW1 - N AH0\nKORVER  K AO1 R - V ER0\nKORY  K AO1 - R IY0\nKORYAGIN  K AO2 R - Y AA1 - G IH0 N\nKORZENIEWSKI  K ER0 - Z IH2 - N IY0 - EH1 F S - K IY0\nKORZENIEWSKI(2)  K AO2 R - Z AH0 - N UW1 F S - K IY0\nKOS  K AA1 S\nKOSA  K OW1 - S AH0\nKOSAK  K OW1 - S AH0 K\nKOSAKOWSKI  K AH0 - S AH0 - K AO1 F S - K IY0\nKOSAN  K OW1 - Z AH0 N\nKOSANKE  K AA1 - S AH0 NG K\nKOSANOVICH  K AH0 - S AE1 - N AH0 - V IH0 CH\nKOSAR  K OW1 - S ER0\nKOSBERG  K AO1 Z - B ER0 G\nKOSBIE  K AA1 Z - B IY0\nKOSCH  K AO1 SH\nKOSCHECK  K AO1 S - CH EH0 K\nKOSCHECK'S  K AO1 S - CH EH0 K S\nKOSCIELNIAK  K AH0 S - CH IY1 L - N IY0 - AE0 K\nKOSCINSKI  K AH0 S - CH IH1 N - S K IY0\nKOSCO  K OW1 - S K OW0\nKOSECOFF  K OW1 - S AH0 - K AO0 F\nKOSEK  K OW1 - S EH0 K\nKOSEL  K OW1 - S AH0 L\nKOSER  K OW1 - Z ER0\nKOSH  K AA1 SH\nKOSHER  K OW1 - SH ER0\nKOSIBA  K OW0 - S IY1 - B AH0\nKOSIER  K OW1 - S IY0 - ER0\nKOSIK  K OW1 - S IH0 K\nKOSIN  K OW1 - S IH0 N\nKOSINSKI  K AH0 - S IH1 N - S K IY0\nKOSKA  K OW1 S - K AH0\nKOSKELA  K AH0 - S K IY1 - L AH0\nKOSKEY  K AA1 S - K IY0\nKOSKI  K AW1 S - K IY0\nKOSKINEN  K AA1 - S K IH0 - N AH0 N\nKOSKO  K OW1 - S K OW0\nKOSKOTAS  K AO2 - S K OW1 - T AH0 S\nKOSKY  K AA1 S - K IY0\nKOSLOSKI  K AH0 S - L AW1 S - K IY0\nKOSLOSKY  K AH0 S - L OW1 S - K IY0\nKOSLOW  K AA1 S - L OW0\nKOSLOW'S  K AA1 Z - L OW2 Z\nKOSLOWSKI  K AH0 S - L AO1 F S - K IY0\nKOSMAN  K AA1 S - M AH0 N\nKOSMATKA  K AH0 S - M AA1 T - K AH0\nKOSMETSKY  K AA2 Z - M EH1 T S - K IY0\nKOSMETSKY'S  K AA2 Z - M EH1 T - S K IY0 Z\nKOSMICKI  K AH0 S - M IH1 T S - K IY0\nKOSNOVSKY  K AA2 Z - N AA1 F S - K IY0\nKOSNOVSKY'S  K AA2 Z - N AA1 F - S K IY0 Z\nKOSOVO  K OW1 - S OW0 - V OW2\nKOSOWSKI  K AH0 - S AO1 F S - K IY0\nKOSOWSKY  K AH0 - S AW1 S - K IY0\nKOSS  K AO1 S\nKOSSMAN  K AO1 S - M AH0 N\nKOSSOW  K AA1 - S OW0\nKOSSUTH  K AA1 - S AH0 TH\nKOST  K AA1 S T\nKOSTA  K OW1 - S T AH0\nKOSTAL  K AA1 - S T AH0 L\nKOSTAS  K OW1 - S T AH0 Z\nKOSTECKI  K AH0 - S T EH1 T S - K IY0\nKOSTEK  K AA1 - S T EH0 K\nKOSTELECKY  K AH0 - S T EH0 - L EH1 T S - K IY0\nKOSTELNIK  K AH0 - S T EH1 L - N IH0 K\nKOSTER  K AA1 - S T ER0\nKOSTIC  K AA1 - S T IH0 K\nKOSTICK  K OW1 - S T IH0 K\nKOSTKA  K AA1 - S T K AH0\nKOSTMAYER  K AO1 S T - M EY2 - ER0\nKOSTOFF  K AA1 S T - AO0 F\nKOSTRZEWA  K AH0 S - T R AH0 - Z UW1 - AH0\nKOSTRZEWSKI  K AO2 - S T ER0 - Z EH1 F S - K IY0\nKOSUB  K OW1 - S AH0 B\nKOSY  K OW1 - S IY0\nKOSYAKOV  K OW1 - S Y AH0 - K AA0 V\nKOSYGIN  K OW1 - S IH0 - G IH0 N\nKOSYGIN(2)  K OW1 - S IY0 - G IH0 N\nKOT  K AA1 T\nKOTARA  K OW0 - T AA1 - R AH0\nKOTARSKI  K AH0 - T AA1 R S - K IY0\nKOTAS  K OW1 - T AH0 Z\nKOTCH  K AA1 CH\nKOTE  K OW1 T\nKOTECKI  K AH0 - T EH1 T S - K IY0\nKOTEK  K OW1 - T EH2 K\nKOTELES  K AA1 - T EH0 - L EH0 Z\nKOTH  K AA1 TH\nKOTHARI  K AA1 - TH ER0 - IY0\nKOTHE  K OW1 DH\nKOTILA  K AH0 - T AY1 - L AH0\nKOTLARZ  K AA1 T - L ER0 Z\nKOTLER  K OW1 - T AH0 L - ER0\nKOTLER(2)  K AA1 T - L ER0\nKOTLOWITZ  K AA1 T - L AH0 - W IH0 T S\nKOTO  K OW1 - T OW0\nKOTOWSKI  K AH0 - T AO1 F S - K IY0\nKOTSONIS  K AE2 T - S OW1 - N AH0 S\nKOTSONIS'  K AE2 T - S OW1 - N AH0 S\nKOTSONIS'(2)  K OW0 T - S OW1 - N AH0 S\nKOTSONIS'S  K AE2 T - S OW1 - N AH0 - S IH0 Z\nKOTSONIS'S(2)  K OW0 T - S OW1 - N AH0 - S IH0 Z\nKOTSONIS(2)  K OW0 T - S OW1 - N AH0 S\nKOTT  K AA1 T\nKOTTER  K AA1 - T ER0\nKOTTKE  K AA1 T - K IY0\nKOTTLER  K AA1 T - L ER0\nKOTTWITZ  K AA1 T - W IH0 T S\nKOTULA  K AH0 - T UW1 - L AH0\nKOTZ  K AA1 T S\nKOUBA  K UW1 - B AH0\nKOUDELKA  K AW0 - D EH1 L - K AH0\nKOUGH  K AW1\nKOUNS  K AW1 N Z\nKOUNTZ  K AW1 N T S\nKOURI  K OW0 - UH1 - R IY0\nKOURIL  K UW1 - R AH0 L\nKOUROU  K UW1 - R UW2\nKOURY  K AW1 - R IY0\nKOUYATE  K AW2 - Y AA1 - T EY2\nKOVAC  K OW1 - V AH0 K\nKOVACEVIC  K AH0 - V AH0 - CH EH1 - V IH0 K\nKOVACEVICH  K AH0 - V AA1 - CH IH0 - V IH0 CH\nKOVACH  K OW1 - V AA0 K\nKOVACH'S  K OW1 - V AA0 K S\nKOVACIC  K AH0 - V AA1 - K IH0 K\nKOVACICH  K AH0 - V AA1 - CH IH0 HH\nKOVACIK  K AA1 - V AH0 - CH IH0 K\nKOVACK  K AA1 - V AH0 K\nKOVACS  K OW1 - V AE0 K S\nKOVAKS  K OW1 - V AE0 K S\nKOVAL  K OW1 - V AH0 L\nKOVALCHIK  K AH0 - V AA1 L - HH IH0 K\nKOVALCIK  K AA1 - V AH0 L - CH IH0 K\nKOVALESKI  K AH0 - V AH0 - L EH1 S - K IY0\nKOVALIK  K AH0 - V AA1 - L IH0 K\nKOVALSKY  K AH0 - V AA1 L - S K IY0\nKOVALYOV  K OW1 - V AA0 - L Y AH0 V\nKOVAR  K OW1 - V ER0\nKOVARIK  K AH0 - V AA1 - R IH0 K\nKOVATCH  K AA1 - V AH0 CH\nKOVATS  K OW1 - V AH0 T S\nKOVEN  K OW1 - V AH0 N\nKOVER  K OW1 - V ER0\nKOVERSADA  K AH2 - V ER0 - S AA1 - T AH0\nKOVICH  K AA1 - V IH0 CH\nKOWABUNGA  K AW2 - AH0 - B AH1 NG - G AH0\nKOWAL  K AW1 - AH0 L\nKOWALCHUK  K AW0 - AA1 L - HH AH0 K\nKOWALCZYK  K AW1 - AH0 L - CH IH0 K\nKOWALESKI  K AW0 - AH0 - L EH1 S - K IY0\nKOWALEWSKI  K AW0 - AH0 - L EH1 F S - K IY0\nKOWALIK  K AW0 - AA1 - L IH0 K\nKOWALKE  K AA1 - W AO2 K\nKOWALKOWSKI  K AA1 - W AO0 - K AO2 F S - K IY0\nKOWALL  K AW1 - AH0 L\nKOWALSKI  K AH0 - W AA1 L - S K IY0\nKOWALSKY  K AW0 - AA1 L - S K IY0\nKOWITZ  K AA1 - W IH0 T S\nKOWNACKI  K AW2 - N AA1 - K IY0\nKOWTOW  K AW1 - T AW1\nKOWTOW(2)  K OW1 - T OW1\nKOYAMA  K OW0 - Y AA1 - M AH0\nKOYO  K OY1 - OW0\nKOZA  K OW1 - Z AH0\nKOZAK  K OW1 - Z AH0 K\nKOZAKIEWICZ  K AH0 - Z AA1 - K AH0 - V IH0 CH\nKOZAR  K OW1 - Z ER0\nKOZBERG  K AA1 Z - B ER0 G\nKOZEL  K OW1 - Z AH0 L\nKOZEMCHAK  K OW2 - Z EH1 M - CH AE2 K\nKOZICKI  K AH0 - Z IH1 T S - K IY0\nKOZIEL  K AA1 - Z IY0 L\nKOZIK  K OW1 - Z IH0 K\nKOZIKOWSKI  K AH0 - Z IH0 - K AO1 F S - K IY0\nKOZINSKI  K AH0 - Z IH1 N - S K IY0\nKOZIOL  K AA1 - Z IY0 - AO0 L\nKOZLIK  K AA1 Z - L IH0 K\nKOZLOFF  K AA1 Z - L AO0 F\nKOZLOSKI  K AH0 Z - L AW1 S - K IY0\nKOZLOW  K AA1 Z - L OW0\nKOZLOWSKI  K AH0 Z - L AO1 F S - K IY0\nKOZMA  K OW1 Z - M AH0\nKOZMINSKI  K AH0 Z - M IH1 N - S K IY0\nKOZNOVSKY  K AA2 Z - N AA1 F S - K IY0\nKOZNOVSKY'S  K AA2 Z - N AA1 F - S K IY0 Z\nKOZO  K OW1 - Z OW0\nKOZOL  K OW1 - Z AH0 L\nKOZUB  K OW1 - Z AH0 B\nKOZUCH  K AA1 - Z AH0 HH\nKOZYREV  K AA1 - Z ER0 - EH2 V\nKOZYREV'S  K AA1 - Z ER0 - EH2 V Z\nKRAAI  K R AA1 - IY0\nKRAATZ  K R AA1 T S\nKRABBE  K R AE1 B\nKRABBENHOFT  K R AE1 - B IH0 N - HH AH0 F T\nKRABILL  K R AE1 - B AH0 L\nKRACH  K R AE1 CH\nKRACHT  K R AE1 K T\nKRACK  K R AE1 K\nKRACKE  K R AE1 K\nKRAEGER  K R EH1 - G ER0\nKRAEMER  K R EH1 - M ER0\nKRAEUTLER  K R AW1 T - L ER0\nKRAFFT  K R AE1 F T\nKRAFT  K R AE1 F T\nKRAFT'S  K R AE1 F T S\nKRAFTWERK  K R AE1 F T - W ER0 K\nKRAGE  K R EY1 JH\nKRAGER  K R EY1 - G ER0\nKRAGH  K R AE1 G\nKRAGT  K R AE1 G T\nKRAH  K R AA1\nKRAHENBUHL  K R AA1 - IH0 N - B AH0 L\nKRAHL  K R AA1 L\nKRAHN  K R AE1 N\nKRAIN  K R EY1 N\nKRAJEWSKI  K R AY0 - EH1 F S - K IY0\nKRAJICEK  K R AY1 - IH0 - CH EH0 K\nKRAJINA  K R AY1 - N AH0\nKRAJINA'S  K R AY1 - N AH0 Z\nKRAJINA'S(2)  K R AY0 - IY1 - N AH0 Z\nKRAJINA(2)  K R AY0 - IY1 - N AH0\nKRAKER  K R EY1 - K ER0\nKRAKOW  K R AA1 - K AW0\nKRAKOW(2)  K R AA1 - K AA0 V\nKRAKOW(3)  K R AE1 - K AW0\nKRAKOWER  K R AE1 - K OW0 - ER0\nKRAKOWSKI  K R AH0 - K AO1 F S - K IY0\nKRAL  K R AE1 L\nKRALICEK  K R AA1 - L IH0 - CH EH0 K\nKRALIK  K R AA1 - L IH0 K\nKRALL  K R AO1 L\nKRAM  K R AE1 M\nKRAMAR  K R AE1 - M ER0\nKRAMER  K R EY1 - M ER0\nKRAMER'S  K R EY1 - M ER0 Z\nKRAMLICH  K R AE1 M - L IH0 K\nKRAMM  K R AE1 M\nKRAMME  K R AE1 M\nKRAMMER  K R AE1 - M ER0\nKRAMMES  K R AE1 M Z\nKRAMP  K R AE1 M P\nKRAMPE  K R AE1 M P\nKRANDALL  K R AE1 N - D AH0 L\nKRANE  K R EY1 N\nKRANER  K R EY1 - N ER0\nKRANICH  K R AE1 - N IH0 CH\nKRANS  K R AE1 N Z\nKRANTZ  K R AE1 N T S\nKRANZ  K R AE1 N Z\nKRANZLER  K R AE1 N Z - L ER0\nKRAPELS  K R AE1 - P AH0 L Z\nKRAPF  K R AE1 P F\nKRAPP  K R AE1 P\nKRAPRAYOON  K R AE1 - P R AA0 - Y UW0 N\nKRAS  K R AE1 S\nKRASINSKI  K R AH0 - S IH1 N - S K IY0\nKRASKA  K R AA1 S - K AH0\nKRASNER  K R AE1 S - N ER0\nKRASNOFF  K R AE1 S N - AO0 F\nKRASNOW  K R AA1 S - N OW0\nKRASNOYARSK  K R AE0 - S N OY1 - AA0 R S K\nKRASNY  K R AE1 Z - N IY0\nKRASOWSKI  K R AH0 - S AO1 F S - K IY0\nKRASS  K R AE1 S\nKRASZEWSKI  K R AH0 - SH EH1 F S - K IY0\nKRAT  K R AE1 T\nKRATKY  K R AE1 T - K IY0\nKRATOCHVIL  K R AE1 - T AH0 K - V AH0 L\nKRATT  K R AE1 T\nKRATZ  K R AE1 T S\nKRATZER  K R EY1 T - Z ER0\nKRATZKE  K R AE1 T S - K IY0\nKRAUER  K R AW1 R\nKRAUS  K R AW1 S\nKRAUSE  K R AO1 S\nKRAUSER  K R AW1 - S ER0\nKRAUSHAAR  K R AW1 - SH AA2 R\nKRAUSKOPF  K R AW1 S K - AO0 F\nKRAUSS  K R AW1 S\nKRAUSSE  K R AO1 S\nKRAUSZ  K R AW1 SH\nKRAUT  K R AW1 T\nKRAUTER  K R AW1 - T ER0\nKRAUTH  K R AO1 TH\nKRAUTHAMMER  K R AW1 T - HH AE2 - M ER0\nKRAUZE  K R AW1 Z\nKRAVCHUK  K R AA1 V - CH UH2 K\nKRAVCHUK'S  K R AA1 V - CH UH2 K Z\nKRAVETZ  K R AE1 - V IH0 T S\nKRAVIS  K R AE1 - V IH0 S\nKRAVITZ  K R AE1 - V IH0 T S\nKRAWCCYKIEWI  K R AW2 - CH IH0 - K UW1 - IY0\nKRAWCHUK  K R AO1 - CH AH0 K\nKRAWCZAK  K R AA1 V - CH AE0 K\nKRAWCZYK  K R AA1 V - CH IH0 K\nKRAWIEC  K R AA1 - V IY0 K\nKRAWITZ  K R AA1 - W IH0 T S\nKRAY  K R EY1\nKRAYNAK  K R EY1 - N AH0 K\nKREAGER  K R IY1 - G ER0\nKREAMER  K R IY1 - M ER0\nKREBBS  K R EH1 B Z\nKREBS  K R EH1 B Z\nKREBS'S  K R EH1 B - Z IH0 Z\nKREBSBACH  K R EH1 B Z - B AA0 K\nKRECH  K R EH1 K\nKRECKO  K R EH1 - K OW0\nKREDIETBANK  K R EH0 - D IY0 T - B AE1 NG K\nKREDIT  K R EH1 - T IH0 T\nKREDITANSTALT  K R EH0 - D IH1 - T AH2 N - S T AO2 L T\nKREEGER  K R IY1 - G ER0\nKREFT  K R EH1 F T\nKREG  K R EH1 G\nKREGEL  K R EH1 - G AH0 L\nKREGER  K R IY1 - G ER0\nKREH  K R EH1\nKREHBIEL  K R EH1 - B IY0 L\nKREHER  K R EH1 R\nKREICHER  K R AY1 - K ER0\nKREIDER  K R AY1 - D ER0\nKREIDLER  K R AY1 - D AH0 - L ER0\nKREIDLER(2)  K R AY1 D - L ER0\nKREIFELS  K R AY1 - F AH0 L Z\nKREIG  K R IY1 G\nKREIGER  K R AY1 - G ER0\nKREILING  K R AY1 - L IH0 NG\nKREIMER  K R AY1 - M ER0\nKREIN  K R EY1 N\nKREINER  K R AY1 - N ER0\nKREIS  K R IY1 Z\nKREISBERG  K R AY1 S - B ER0 G\nKREISCHER  K R AY1 - SH ER0\nKREISEL  K R AY1 - S AH0 L\nKREISER  K R AY1 - S ER0\nKREISHER  K R IY1 - IH0 - SH ER0\nKREISLER  K R AY1 S - L ER0\nKREISMAN  K R AY1 S - M AH0 N\nKREISS  K R AY1 S\nKREITER  K R AY1 - T ER0\nKREITMAN  K R AY1 T - M AH0 N\nKREITNER  K R AY1 T - N ER0\nKREITZ  K R IY1 T S\nKREITZBERG  K R AY1 T S - B ER0 G\nKREITZER  K R AY1 T - Z ER0\nKREJCI  K R EH1 JH - S IY0\nKRELL  K R EH1 L\nKREMER  K R IY1 - M ER0\nKREMERS  K R IY1 - M ER0 Z\nKREMLIN  K R EH1 M - L AH0 N\nKREMLIN'S  K R EH1 M - L IH0 N Z\nKREMLIN(2)  K R EH1 M - L IH0 N\nKREMLINOLOGIST  K R EH2 M - L IH0 - N AA1 - L AH0 - JH IH0 S T\nKREMLINOLOGISTS  K R EH2 M - L IH0 - N AA1 - L AH0 - JH IH0 S T S\nKREMLINOLOGISTS(2)  K R EH2 M - L IH0 - N AA1 - L AH0 - JH IH0 S S\nKREMLINOLOGISTS(3)  K R EH2 M - L IH0 - N AA1 - L AH0 - JH IH0 S\nKREMPA  K R EH1 M - P AH0\nKREMPASKY  K R IH0 M - P AA1 S - K IY0\nKREN  K R EH1 N\nKRENEK  K R EH1 - N IH0 K\nKRENGEL  K R EH1 NG - G AH0 L\nKRENIK  K R EH1 - N IH0 K\nKRENKE  K R EH1 NG K\nKRENN  K R EH1 N\nKRENTZ  K R EH1 N T S\nKRENWINKLE  K R EH1 N - W IH2 NG - K AH0 L\nKRENWINKLE'S  K R EH1 N - W IH2 NG - K AH0 L Z\nKRENZ  K R EH1 N Z\nKRENZER  K R EH1 N - Z ER0\nKREPPS  K R EH1 P S\nKREPS  K R EH1 P S\nKRESA  K R IY1 - S ER0\nKRESGE  K R EH1 S - G IY0\nKRESLOVSKY  K R EH0 S - L AO1 V S - K IY0\nKRESS  K R EH1 S\nKRESSE  K R EH1 S\nKRESSER  K R EH1 - S ER0\nKRESSIN  K R EH1 - S IH0 N\nKRESSLER  K R EH1 S - L ER0\nKRETCHMAN  K R EH1 CH - M AH0 N\nKRETCHMER  K R EH1 CH - M ER0\nKRETSCH  K R EH1 CH\nKRETSCHMAR  K R EH1 CH - M ER0\nKRETSCHMER  K R EH1 CH - M ER0\nKRETZ  K R EH1 T S\nKRETZER  K R EH1 T - Z ER0\nKRETZSCHMAR  K R EH1 CH - M ER0\nKREUGER  K R OY1 - G ER0\nKREUL  K R UW1 L\nKREUSER  K R OY1 - S ER0\nKREUTER  K R OY1 - T ER0\nKREUTZ  K R UW1 T S\nKREUZER  K R UW1 - Z ER0\nKREWSON  K R UW1 - S AH0 N\nKREY  K R EY1\nKRIBS  K R IH1 B Z\nKRICHBAUM  K R IH1 K - B AW0 M\nKRICK  K R IH1 K\nKRIDER  K R AY1 - D ER0\nKRIDLER  K R IH1 D - L ER0\nKRIEBEL  K R IY1 - B AH0 L\nKRIEG  K R IY1 G\nKRIEGEL  K R IY1 - G AH0 L\nKRIEGER  K R IY1 - G ER0\nKRIEGER'S  K R IY1 - G ER0 Z\nKRIENKE  K R IY1 NG K\nKRIER  K R AY1 - ER0\nKRIESE  K R IY1 Z\nKRIESEL  K R IY1 - S AH0 L\nKRIETE  K R IY1 T\nKRIGBAUM  K R IH1 G - B AW2 M\nKRIGER  K R AY1 - G ER0\nKRIGSTEN  K R IH1 G - S T IH0 N\nKRIKALEV  K R IH1 - K AH0 - L EH2 V\nKRIKALEV'S  K R IH1 - K AH0 - L EH2 V Z\nKRIKORIAN  K R IH0 - K AO1 - R IY0 - AH0 N\nKRILL  K R IH1 L\nKRIM  K R IH1 M\nKRIMMEL  K R IH1 - M AH0 L\nKRINER  K R AY1 - N ER0\nKRING  K R IH1 NG\nKRINGEN  K R IH1 - NG AH0 N\nKRINGLEY  K R IH1 NG - G L IY0\nKRINGS  K R IH1 NG Z\nKRINKE  K R IH1 NG K\nKRINSKY  K R IH1 N S - K IY0\nKRIS  K R IH1 S\nKRISCH  K R IH1 SH\nKRISCHER  K R IH1 - SH ER0\nKRISE  K R AY1 Z\nKRISHER  K R IH1 - SH ER0\nKRISHNA  K R IH1 SH - N AH0\nKRISHNA(2)  K R IY1 SH - N AH0\nKRISHNAN  K R IH1 SH - N AH0 N\nKRISKO  K R IH1 - S K OW0\nKRISPIES  K R IH1 - S P IY0 Z\nKRISS  K R IH1 S\nKRIST  K R IH1 S T\nKRISTA  K R IH1 - S T AH0\nKRISTALLNACHT  K R IH1 - S T AH0 L - N AA2 K T\nKRISTEN  K R IH1 - S AH0 N\nKRISTENSEN  K R IH1 - S T AH0 N - S AH0 N\nKRISTI  K R IH1 - S T IY0\nKRISTI'S  K R IH1 - S T IY0 Z\nKRISTIANSEN  K R IH1 S - CH AH0 N - S AH0 N\nKRISTIE  K R IH1 - S T IY0\nKRISTIN  K R IH1 - S T IH0 N\nKRISTINE  K R IH0 - S T IY1 N\nKRISTOF  K R IH1 - S T AH0 F\nKRISTOFF  K R IH1 S T - AO0 F\nKRISTOFFE  K R IH1 S T - AO0 F\nKRISTOFFERSON  K R IH2 S T - AO1 - F ER0 - S AH0 N\nKRISTOL  K R IH1 - S T AH0 L\nKRISTOL'S  K R IH1 - S T AH0 L Z\nKRISTY  K R IH1 - S T IY0\nKRITZ  K R IH1 T S\nKRITZER  K R IH1 T - Z ER0\nKRIVANEK  K R IH1 - V AH0 - N IH0 K\nKRIZ  K R IH1 Z\nKRIZAN  K R IH1 - Z AH0 N\nKRIZEK  K R IH1 - Z EH0 K\nKROB  K R AA1 B\nKROBOTH  K R AA1 - B AH0 TH\nKROC  K R AA1 K\nKROC'S  K R AA1 K S\nKROCK  K R AA1 K\nKROEBER  K R OW1 - B ER0\nKROEBER'S  K R OW1 - B ER0 Z\nKROEGER  K R OW1 - G ER0\nKROEGER'S  K R OW1 - G ER0 Z\nKROEGERS  K R OW1 - G ER0 Z\nKROEKER  K R OW1 - K ER0\nKROENER  K R OW1 - N ER0\nKROENING  K R AA1 - AH0 - N IH0 NG\nKROENKE  K R OW1 NG K\nKROES  K R OW1 Z\nKROESE  K R OW1 S\nKROEZE  K R OW1 Z\nKROFT  K R AA1 F T\nKROG  K R AA1 G\nKROGER  K R OW1 - G ER0\nKROGER'S  K R OW1 - G ER0 Z\nKROGH  K R OW1\nKROGMAN  K R AA1 G - M AH0 N\nKROGSTAD  K R AA1 G - S T AH0 D\nKROH  K R OW1\nKROHN  K R OW1 N\nKROK  K R AA1 K\nKROL  K R AO1 L\nKROLAK  K R OW1 - L AH0 K\nKROLCZYK  K R OW1 L - CH IH0 K\nKROLICK  K R AA1 - L IH0 K\nKROLIKOWSKI  K R AH0 - L IH0 - K AO1 F S - K IY0\nKROLL  K R AO1 L\nKROM  K R AA1 M\nKROME  K R OW1 M\nKROMER  K R OW1 - M ER0\nKROMM  K R AA1 M\nKRON  K R AA1 N\nKRONA  K R OW1 - N AH0\nKRONBERG  K R AA1 N - B ER0 G\nKRONE  K R OW1 - N AH0\nKRONEN  K R OW1 - N AH0 N\nKRONENBERG  K R AA1 - N AH0 N - B ER0 G\nKRONENBERGER  K R AA1 - N AH0 N - B ER0 - G ER0\nKRONER  K R OW1 - N ER0\nKRONICK  K R AA1 - N IH0 K\nKRONISH  K R AA1 - N IH0 SH\nKRONK  K R AA1 NG K\nKRONOR  K R OW1 - N ER0\nKRONOS  K R OW1 - N OW0 S\nKRONTZ  K R AA1 N T S\nKROON  K R UW1 N\nKROPF  K R AA1 P F\nKROPP  K R AA1 P\nKROSS  K R AO1 S\nKROSSEL  K R AO1 - S AH0 L\nKROTKOV  K R AO1 T - K AO0 V\nKROTZ  K R AA1 T S\nKROTZER  K R OW1 T - Z ER0\nKROUNER  K R UW1 - N ER0\nKROUPA  K R UW1 - P AH0\nKROUSE  K R AW1 S\nKROUT  K R AW1 T\nKROWE  K R OW1\nKROWITZ  K R AW1 - IH0 T S\nKROY  K R OY1\nKRUCHTEN  K R AH1 K - T AH0 N\nKRUCK  K R AH1 K\nKRUCKEBERG  K R AH1 K - B ER0 G\nKRUCKENBERG  K R AH1 - K AH0 N - B ER0 G\nKRUCZEK  K R AH1 - CH EH0 K\nKRUDMAN  K R AH1 D - M AH0 N\nKRUDMAN'S  K R AH1 D - M AH0 N Z\nKRUEGER  K R UW1 - G ER0\nKRUER  K R UW1 - ER0\nKRUG  K R AH1 G\nKRUGER  K R UW1 - G ER0\nKRUGERRAND  K R UW0 - G EH1 - R AE0 N D\nKRUGH  K R AH1\nKRUGMAN  K R AH1 G - M AH0 N\nKRUK  K R AH1 K\nKRUKOWSKI  K R AH0 - K AO1 F S - K IY0\nKRUL  K R AH1 L\nKRULL  K R AH1 L\nKRULWICH  K R AH1 L - W IH0 CH\nKRUM  K R AH1 M\nKRUMHOLZ  K R AH1 M - HH OW2 L Z\nKRUMM  K R AH1 M\nKRUMME  K R AH1 M\nKRUMMEL  K R AH1 - M AH0 L\nKRUMREY  K R AH1 - M R IY0\nKRUMWIEDE  K R AH1 M - W IY2 D\nKRUPA  K R UW1 - P AH0\nKRUPICKA  K R UW2 - P IH1 - K AH0\nKRUPINSKI  K R AH0 - P IH1 N - S K IY0\nKRUPKA  K R AH1 P - K AH0\nKRUPMAN  K R AH1 P - M AH0 N\nKRUPNICK  K R AH1 P - N IH0 K\nKRUPP  K R AH1 P\nKRUPP'S  K R AH1 P S\nKRUPPA  K R AH1 - P AH0\nKRUPSKI  K R AH1 P S - K IY0\nKRUS  K R AH1 S\nKRUSCHEV  K R UW1 S - CH EH2 V\nKRUSCHKE  K R AH1 SH K\nKRUSE  K R UW1 Z\nKRUSEMARK  K R AH1 - S IH0 - M AA0 R K\nKRUSINSKI  K R AH0 - S IH1 N - S K IY0\nKRUSZEWSKI  K R AH0 - SH EH1 F S - K IY0\nKRUSZKA  K R AH1 SH - K AH0\nKRUSZYNSKI  K R AH0 - SH IH1 N - S K IY0\nKRUTICK  K R UW1 - T IH2 K\nKRUTSINGER  K R AH1 T - S IH0 N - JH ER0\nKRUTTSCHNITT  K R AH1 CH - N IH0 T\nKRUTZ  K R AH1 T S\nKRUZEL  K R UW1 - Z AH0 L\nKRYCH  K R IH1 CH\nKRYDER  K R AY1 - D ER0\nKRYGER  K R AY1 - G ER0\nKRYGIER  K R AY1 - G IY0 - ER0\nKRYPTON  K R IH1 P - T AA0 N\nKRYPTOS  K R IH1 P - T OW0 S\nKRYSIAK  K R IH1 - S IY0 - AE0 K\nKRZEMINSKI  K R IH0 - M IH1 N - S K IY0\nKRZYSZTOF  K R AY1 S T - AO0 F\nKRZYWICKI  K R IH0 - V IH1 T S - K IY0\nKRZYZANOWSKI  K R IH0 - Z AH0 N - AO1 F S - K IY0\nKSIAZEK  K AH0 - S IY0 - AA1 - Z EH0 K\nKU  K UW1\nKUALA  K W AA1 - L AH0\nKUAN  K W AA1 N\nKUBA  K Y UW1 - B AH0\nKUBACKI  K AH0 - B AA1 T S - K IY0\nKUBALA  K AH0 - B AA1 - L AH0\nKUBAN  K Y UW1 - B AH0 N\nKUBAS  K UW1 - B AH0 Z\nKUBAT  K UW1 - B AH0 T\nKUBE  K Y UW1 B\nKUBENA  K AH0 - B IY1 - N AH0\nKUBERSKI  K AH0 - B ER1 S - K IY0\nKUBES  K Y UW1 B Z\nKUBIAK  K UW1 - B IY0 - AE0 K\nKUBIC  K Y UW1 - B IH0 K\nKUBICA  K Y UW1 - B IH0 - K AH0\nKUBICEK  K AH1 - B IH0 - CH EH0 K\nKUBICK  K Y UW1 - B IH0 K\nKUBICKI  K AH0 - B IH1 T S - K IY0\nKUBIK  K Y UW1 - B IH0 K\nKUBIN  K Y UW1 - B IH0 N\nKUBINSKI  K AH0 - B IH1 N - S K IY0\nKUBIS  K UW1 - B IH0 S\nKUBISIAK  K AH0 - B IH1 - S IY0 - AE0 K\nKUBITZ  K Y UW1 - B IH0 T S\nKUBLER  K Y UW1 - B AH0 L - ER0\nKUBLER(2)  K Y UW1 - B L ER0\nKUBLY  K AH1 - B L IY0\nKUBO  K Y UW1 - B OW0\nKUBOTA  K UW0 - B OW1 - T AH0\nKUBRICK  K Y UW1 - B R IH2 K\nKUBRICK'S  K Y UW1 - B R IH2 K S\nKUBY  K Y UW1 - B IY0\nKUC  K AH1 K\nKUCAN  K Y UW1 - K AH0 N\nKUCERA  K AH0 - CH IH1 - R AH0\nKUCEWICZ  K Y UW1 - S IH0 - W IH0 T S\nKUCH  K AH1 CH\nKUCHAR  K AH1 - K ER0\nKUCHARSKI  K AH0 - CH AA1 R S - K IY0\nKUCHENBECKER  K AH1 - K IH0 N - B EH0 - K ER0\nKUCHER  K AH1 - K ER0\nKUCHERA  K AH1 - CH ER0 - AH0\nKUCHERA(2)  K UW2 - CH EH1 - R AH0\nKUCHINSKI  K AH0 - CH IH1 N - S K IY0\nKUCHINSKY  K AH0 - CH IH1 N - S K IY0\nKUCHLER  K AH1 - K AH0 - L ER0\nKUCHLER(2)  K AH1 K - L ER0\nKUCHMA  K UW1 CH - M AH0\nKUCHMA'S  K UW1 CH - M AH0 Z\nKUCHTA  K AH1 CH - T AH0\nKUCINSKI  K AH0 - CH IH1 N - S K IY0\nKUCK  K AH1 K\nKUCZEK  K AH1 - CH EH0 K\nKUCZYNSKI  K AH0 - CH IH1 N - S K IY0\nKUDER  K Y UW1 - D ER0\nKUDLA  K AH1 D - L AH0\nKUDLOW  K AH1 D - L OW0\nKUDNER  K AH1 D - N ER0\nKUDOS  K UW1 - D OW0 S\nKUDRNA  K AH2 - D ER1 - N AH0\nKUDZU  K AH1 D - Z UW0\nKUEBLER  K UH1 - B AH0 L - ER0\nKUEBLER(2)  K UH1 - B L ER0\nKUECHLER  K UH1 - K AH0 - L ER0\nKUECHLER(2)  K UH1 K - L ER0\nKUECK  K UW1 K\nKUECKER  K UH1 - K ER0\nKUEHL  K UH1 L\nKUEHLER  K UH1 - L ER0\nKUEHN  K UW1 N\nKUEHNE  K UW1 N\nKUEHNEL  K UH1 - N AH0 L\nKUEHNER  K UH1 - N ER0\nKUEHNLE  K UH1 - N AH0 L\nKUEKER  K UH1 - K ER0\nKUENHEIM  K Y UW1 - AH0 N - HH AY2 M\nKUENNEN  K UH1 - N AH0 N\nKUENSTLER  K UH1 N - S AH0 - L ER0\nKUENSTLER(2)  K UH1 N - S L ER0\nKUENZEL  K UH1 N - Z AH0 L\nKUENZI  K UW0 - EY1 N - Z IY0\nKUENZLI  K UH1 N Z - L IY0\nKUESTER  K UH1 - S T ER0\nKUETHER  K UH1 - DH ER0\nKUFAHL  K AH1 - F AA0 L\nKUFFEL  K AH1 - F AH0 L\nKUFFNER  K AH1 F - N ER0\nKUGEL  K UW1 - G AH0 L\nKUGELMAN  K AH1 - G AH0 L - M AH0 N\nKUGLER  K UW1 - G AH0 - L ER0\nKUGLER(2)  K UW1 G - L ER0\nKUHAR  K UW1 - ER0\nKUHL  K AH1 L\nKUHLE  K UW1 - AH0 L\nKUHLENSCHMIDT  K Y UW1 - L AH0 N SH - M IH2 T\nKUHLMAN  K UW1 L - M AH0 N\nKUHLMANN  K UW1 L - M AH0 N\nKUHN  K UW1 N\nKUHNE  K AH1 N\nKUHNER  K UW1 - N ER0\nKUHNERT  K UW1 - N ER0 T\nKUHNKE  K AH1 NG K\nKUHNLE  K AH1 - N AH0 L\nKUHNS  K UW1 N Z\nKUHR  K ER1\nKUHRT  K ER1 T\nKUIKEN  K UW1 - K AH0 N\nKUIPER  K UW1 - P ER0\nKUIPERS  K UW1 - P ER0 Z\nKUJALA  K AY0 - AA1 - L AH0\nKUJAWA  K UW0 - JH AA1 - W AH0\nKUJAWSKI  K AH0 - Y AA1 F S - K IY0\nKUK  K AH1 K\nKUKER  K Y UW1 - K ER0\nKUKJE  K UW1 - K Y IH0\nKUKJE(2)  K UW1 K - JH EY2\nKUKJE(3)  K UW1 K - JH IY2\nKUKLA  K AH1 - K L AH0\nKUKLINSKI  K AH0 K - L IH1 N - S K IY0\nKUKOWSKI  K AH0 - K AO1 F S - K IY0\nKUKUK  K UW1 - K AH0 K\nKULA  K UW1 - L AH0\nKULAGA  K UW0 - L AA1 - G AH0\nKULAKOWSKI  K Y UW0 - L AH0 - K AO1 F S - K IY0\nKULAS  K Y UW1 - L AH0 Z\nKULESA  K Y UW0 - L IY1 - S AH0\nKULESZA  K Y UW0 - L EH1 - SH AH0\nKULHANEK  K AH1 L - HH AH0 - N EH0 K\nKULICH  K Y UW1 - L IH0 K\nKULICK  K Y UW1 - L IH0 K\nKULIG  K Y UW1 - L IH0 G\nKULIGOWSKI  K Y UW0 - L IH0 - G AO1 F S - K IY0\nKULIK  K Y UW1 - L IH0 K\nKULIKOWSKI  K Y UW0 - L IH0 - K AO1 F S - K IY0\nKULINSKI  K Y UW0 - L IH1 N - S K IY0\nKULIS  K UW1 - L IH0 S\nKULISH  K Y UW1 - L IH0 SH\nKULKA  K AH1 L - K AH0\nKULKARNI  K AH0 L - K AA1 R - N IY0\nKULL  K AH1 L\nKULLA  K AH1 - L AH0\nKULLBERG  K AH1 L - B ER0 G\nKULLMAN  K AH1 L - M AH0 N\nKULLY  K AH1 - L IY0\nKULON  K UW1 - L AO2 N\nKULOW  K Y UW1 - L OW0\nKULP  K AH1 L P\nKULPA  K AH1 L - P AH0\nKULWICKI  K AH0 L - V IH1 T S - K IY0\nKULZER  K AH1 L - Z ER0\nKUMAGAI  K UW0 - M AA0 - G AA1 - IY0\nKUMAR  K UW0 - M AA1 R\nKUMBLE  K AH1 M - B AH0 L\nKUME  K Y UW1 M\nKUMHO  K AH1 M - HH OW0\nKUMLER  K AH1 M - L ER0\nKUMM  K AH1 M\nKUMMER  K AH1 - M ER0\nKUMOURI  K UW2 - M AO1 - R IY0\nKUMOURI'S  K UW2 - M AO1 - R IY0 Z\nKUMP  K AH1 M P\nKUMPF  K AH1 M P F\nKUMQUAT  K AH1 M - K W AA0 T\nKUN  K AH1 N\nKUNA  K Y UW1 - N AH0\nKUNAEV  K Y UW0 - N EY1 V\nKUNATH  K AH1 - N AH0 TH\nKUNAYEV  K Y UW0 - N EY1 - AH0 V\nKUNCE  K AH1 N S\nKUNDA  K AH1 N - D AH0\nKUNDE  K AH1 N D\nKUNDERA  K AH0 N - D EH1 - R AH0\nKUNDERT  K AH1 N - D ER0 T\nKUNDINGER  K AH1 N - D IH0 - NG ER0\nKUNDRAT  K AH1 N - D R AH0 T\nKUNERT  K Y UW1 - N ER0 T\nKUNES  K Y UW1 N Z\nKUNESH  K AH1 - N IH0 SH\nKUNEY  K Y UW1 - N IY0\nKUNG  K AH1 NG\nKUNIN  K Y UW1 - N IH0 N\nKUNIO  K Y UW1 - N IY0 - OW0\nKUNKA  K AH1 NG - K AH0\nKUNKEL  K AH1 NG - K AH0 L\nKUNKLE  K AH1 NG - K AH0 L\nKUNKLER  K AH1 NG - K L ER0\nKUNS  K AH1 N Z\nKUNSELMAN  K AH1 N - S AH0 L - M AH0 N\nKUNSMAN  K AH1 N - S M AH0 N\nKUNST  K AH1 N S T\nKUNSTLER  K AH1 N - S T L ER0\nKUNSTLER(2)  K AH1 N - S L ER0\nKUNTZ  K AH1 N T S\nKUNTZE  K AH1 N T Z\nKUNTZMAN  K AH1 N T - S M AH0 N\nKUNZ  K AH1 N Z\nKUNZE  K AH1 N Z\nKUNZELMAN  K AH1 N - Z AH0 L - M AH0 N\nKUNZLER  K AH1 N - Z L ER0\nKUNZMAN  K AH1 N Z - M AH0 N\nKUO  K UW1 - OW0\nKUOMINTANG  K W OW1 - M IH2 N - T AE1 NG\nKUOMINTANG'S  K W OW1 - M IH2 N - T AE1 NG Z\nKUOMINTANG'S(2)  G W OW1 - M IH2 N - T AE1 NG Z\nKUOMINTANG(2)  G W OW1 - M IH2 N - T AE1 NG\nKUOW  K Y UW1 - OW0\nKUPEK  K UW1 - P IH0 K\nKUPER  K Y UW1 - P ER0\nKUPERMAN  K UW1 - P ER0 - M AH0 N\nKUPFER  K AH1 P - F ER0\nKUPFERMAN  K AH1 P - F ER0 - M AH0 N\nKUPIEC  K AH1 - P IY0 K\nKUPKA  K AH1 P - K AH0\nKUPOR  K Y UW1 - P ER0\nKUPPER  K AH1 - P ER0\nKUPRES  K UW1 - P R AH0 S\nKURALT  K Y ER0 - AO1 L T\nKURAMOTO  K UH0 - R AA0 - M OW1 - T OW0\nKURANARI  K UH2 - R AH0 - N AA1 - R IY0\nKURAS  K UH1 - R AH0 Z\nKURD  K ER1 D\nKURDISH  K ER1 - D IH0 SH\nKURDISTAN  K ER1 - D IH0 - S T AE2 N\nKURDS  K ER1 D Z\nKURDZIEL  K ER1 D - Z IY0 L\nKUREK  K Y UW1 - R EH0 K\nKURIAN  K Y UH1 - R IY0 - AH0 N\nKURIANSKY  K UH2 - R IY0 - AE1 N S - K IY0\nKURIHARA  K UW2 - R IH0 - HH AA1 - R AH0\nKURIL  K ER0 - AH0 L\nKURILLA  K ER0 - IH1 - L AH0\nKURINSKY  K Y ER2 - IH1 N - S K IY0\nKURIYAMA  K UW0 - R IH0 - Y AA1 - M AH0\nKURK  K ER1 K\nKURKA  K ER1 - K AH0\nKURKJIAN  K ER1 K - JH IY0 - AH0 N\nKURKOWSKI  K ER0 - K AO1 F S - K IY0\nKURLAK  K ER1 - L AE0 K\nKURLAND  K ER1 - L AH0 N D\nKURLANDER  K ER1 - L AH0 N - D ER0\nKURMAN  K ER1 - M AH0 N\nKURMEL  K ER1 - M AH0 L\nKURNIT  K ER1 - N IH0 T\nKURODA  K ER0 - OW1 - D AH0\nKUROKAWA  K UW2 - R OW0 - K AA1 - W AH0\nKUROSAWA  K UH2 - R OW0 - S AA1 - W AH0\nKUROWSKI  K ER0 - AO1 F S - K IY0\nKURSHIKOV  K ER1 SH - N IH0 - K AO0 V\nKURSHIKOV(2)  K ER1 SH - N IH0 K - AO0 F\nKURT  K ER1 T\nKURTENBACH  K ER1 - T IH0 N - B AA0 K\nKURTH  K ER1 TH\nKURTIS  K ER1 - T IH0 S\nKURTZ  K ER1 T S\nKURTZMAN  K ER1 T S - M AH0 N\nKURUMAN  K Y UH1 - R UW0 - M AH0 N\nKURUMIZOWA  K UH2 - R UW0 - M IY0 - Z OW1 - AH0\nKURUMIZOWA'S  K UH2 - R UW0 - M IY0 - Z OW1 - AH0 Z\nKURY  K Y UW1 - R IY0\nKURYLO  K ER0 - IH1 - L OW0\nKURZ  K ER1 Z\nKURZAWA  K UH0 R - Z AA1 - W AH0\nKURZBAN  K ER1 Z - B AE2 N\nKURZWEIL  K ER0 Z - W AY1 L\nKUS  K AH1 S\nKUSA  K UW1 - Z AH0\nKUSA(2)  K UW1 - S AH0\nKUSCH  K AH1 SH\nKUSCHEL  K AH1 - SH AH0 L\nKUSE  K Y UW1 Z\nKUSEK  K UW1 - S EH0 K\nKUSEL  K UW1 - S AH0 L\nKUSH  K UH1 SH\nKUSHNER  K AH1 SH - N ER0\nKUSHNIR  K AH1 SH - N ER0\nKUSIAK  K AH1 - S IY0 - AE0 K\nKUSKE  K AH1 S K\nKUSLER  K AH1 - S AH0 - L ER0\nKUSLER(2)  K AH1 S - L ER0\nKUSS  K AH1 S\nKUSSEROW  K AH1 - S ER0 - OW0\nKUSSMAN  K AH1 S - M AH0 N\nKUSTER  K AH1 - S T ER0\nKUSTRA  K AH1 S - T R AH0\nKUT  K AH1 T\nKUTCH  K AH1 CH\nKUTCHER  K AH1 - CH ER0\nKUTCHNA  K AH1 CH - N AH0\nKUTER  K Y UW1 - T ER0\nKUTNER  K AH1 T - N ER0\nKUTSCH  K AH1 CH\nKUTSCHER  K AH1 - CH ER0\nKUTTAB  K UW1 - T AE2 B\nKUTTER  K AH1 - T ER0\nKUTTNER  K AH1 T - N ER0\nKUTUZOVSKY  K UW2 - T AH0 - Z AA1 V S - K IY0\nKUTZ  K AH1 T S\nKUTZER  K AH1 T - Z ER0\nKUVIN  K UW1 - V IH0 N\nKUWAHARA  K UW2 - W AA0 - HH AA1 - R AH0\nKUWAIT  K UW0 - W EY1 T\nKUWAIT'S  K UW0 - W EY1 T S\nKUWAITI  K UW0 - W EY1 - T IY0\nKUWAITIS  K UW0 - W EY1 - T IY0 Z\nKUWAM  K Y UW1 - W AA0 M\nKUYKENDALL  K AY1 - K EH0 N - D AA2 L\nKUYPER  K AY1 - P ER0\nKUZARA  K Y UW0 - Z AA1 - R AH0\nKUZE  K Y UW1 Z\nKUZEL  K UW1 - Z AH0 L\nKUZMA  K AH1 Z - M AH0\nKUZMINSKI  K AH0 Z - M IH1 N - S K IY0\nKUZNETS  K AH1 Z - N EH2 T S\nKUZNIA  K AH1 Z - N IY0 - AH0\nKUZNIAR  K AH1 Z - N Y ER0\nKUZNICKI  K AH0 Z - N IH1 T S - K IY0\nKVALE  K AH0 - V EY1 L\nKVAM  K AH0 - V AE1 M\nKVAMME  K AH0 - V AE1 M\nKVAMME(2)  K AH0 - V AA1 - M EY0\nKVAMME(3)  K V AA1 - M EY0\nKVASNICKA  K AH0 - V AH0 S - N IH1 - S K AH0\nKVETCH  K AH0 - V EH1 CH\nKVETCH(2)  K V EH1 CH\nKVETON  K AH0 - V EH1 - T AH0 N\nKVISTAD  K AH0 - V IH1 - S T AE2 D\nKVITSINSKY  K AH0 - V IH0 T - S IH1 N - S K IY0\nKVITSINSKY(2)  K V IH0 T - S IH1 N - S K IY0\nKWAI  K W AY1\nKWAK  K W AE1 K\nKWAN  K W AA1 N\nKWANG  K W AA1 NG\nKWANGJU  K W AA0 NG - JH UW1\nKWANGJU(2)  G W AA0 NG - JH UW1\nKWANZA  K W AA1 N - Z AH0\nKWANZAA  K W AA1 N - Z AH0\nKWASNIEWSKI  K W AH0 Z - N EH1 F S - K IY0\nKWASNIEWSKI(2)  K W AH0 Z - N UW1 S - K IY0\nKWASNIK  K W AA1 Z - N IH0 K\nKWASNY  K W AA1 Z - N IY0\nKWAZULU  K W AA0 - Z UW1 - L UW0\nKWEISI  K W AY1 - Z IY0\nKWH  K EY1 - D AH1 - B AH0 L - Y UW0 - EY1 CH\nKWIATEK  K W IY0 - AA1 - T EH0 K\nKWIATKOWSKI  K W IY0 - AH0 T - K AO1 F S - K IY0\nKWIECIEN  K W IY1 - S IY0 N\nKWIECINSKI  K W IY0 - CH IH1 N - S K IY0\nKWIK  K W IH1 K\nKWITNY  K W IH1 T - N IY0\nKWOK  K W AA1 K\nKWOK-SHING  K W AO1 K - SH IH1 NG\nKWOLEK  K W OW1 - L EH0 K\nKWON  K W AA1 N\nKWONG  K W AO1 NG\nKYD  K IH1 D\nKYD'S  K IH1 D Z\nKYER  K AY1 - ER0\nKYES  K AY1 Z\nKYGER  K AY1 - G ER0\nKYI  K IY1\nKYI(2)  K EY1 - W AY1 - AY1\nKYKER  K AY1 - K ER0\nKYL  K AY1 L\nKYLE  K AY1 L\nKYLE'S  K AY1 L Z\nKYLER  K AY1 - L ER0\nKYLES  K AY1 L Z\nKYLLO  K IH1 - L OW0\nKYLLONEN  K IH0 - L AA1 - N AH0 N\nKYM  K IH1 M\nKYNA  K IH1 - N AH0\nKYNARD  K IH1 - N ER0 D\nKYNE  K AY1 N\nKYNIKOS  K IH0 - N IY1 - K OW0 S\nKYO  K Y OW1\nKYO(2)  K IY1 - OW0\nKYOCERA  K Y OW0 - S EH1 - R AH0\nKYOCERA(2)  K IY0 - OW0 - S EH1 - R AH0\nKYODO  K Y OW1 - D OW0\nKYOKUTO  K Y AA0 - K UW1 - T OW0\nKYONG  K Y AO1 NG\nKYONGSANG  K Y AO1 NG - S AE0 NG\nKYOSHI  K IY0 - OW1 - SH IY0\nKYOTO  K Y OW1 - T OW0\nKYOUNG  K Y AO1 NG\nKYOUNG-MIN  K Y AO1 NG - M IH1 N\nKYOWA  K Y OW1 - AH0\nKYRA  K AY1 - R AH0\nKYRGYZSTAN  K IH1 R - G IH0 - S T AE2 N\nKYRGYZSTAN(2)  K IH2 R - G IY1 - S T AA2 N\nKYRON  K AY1 - R AH0 N\nKYSAR  K IH1 - S ER0\nKYSER  K AY1 - S ER0\nKYSOR  K AY1 - S ER0\nKYTE  K AY1 T\nKYTRIL  K IH1 - T R IH0 L\nKYU  K Y UW1\nKYUNG  K Y AH1 NG\nKYUSHU  K Y AH1 - SH UW0\nKYZAR  K IH1 - Z ER0\nKYZER  K AY1 - Z ER0\nL  EH1 L\nL'AMOUR  L AE1 - M AO0 R\nL'EGGS  L EH1 G Z\nL'ENFANT  L EH1 N - F AA2 N T\nL'ENFANT(2)  L AA2 N - F AA1 N T\nL'ESPALIER  L EH0 - S P AE2 - L IY0 - EY1\nL'EXPANSION  L EH2 K - S P AE1 N - SH AH0 N\nL'EXPRESS  L EH2 K - S P R EH1 S\nL'HEUREUX  L HH Y UW2 - R UH1\nL'OREAL  L AO0 - R IY0 - AE1 L\nL'S  EH1 L Z\nL.  EH1 L\nL.'S  EH1 L Z\nL.S  EH1 L Z\nLA  L AA1\nLA-CARRE  L AA1 - K AA2 - R EY1\nLA-PAZ  L AH1 - P AO0 Z\nLAABS  L AA1 B Z\nLAACK  L AA1 K\nLAACO  L AA1 - K OW0\nLAAKE  L AA1 K\nLAAKSO  L AA1 K - S OW0\nLAAS  L AA1 Z\nLAATSCH  L AA1 CH\nLAB  L AE1 B\nLAB'S  L AE1 B Z\nLABA  L AA1 - B AH0\nLABADIE  L AE1 - B AH0 - D IY0\nLABAN  L EY1 - B AH0 N\nLABAND  L AA0 - B AE1 N D\nLABANT  L AH0 - B AE1 N T\nLABAR  L AH0 - B AA1 R\nLABARBERA  L AA0 - B AA0 R - B EH1 - R AH0\nLABARGE  L AE1 - B AA0 R G\nLABARR  L AH0 - B AE1 R\nLABARRE  L AA0 - B AA1 - R EY0\nLABAT  L AA1 - B AA0 T\nLABATE  L AA1 - B EY0 T\nLABATON  L AE1 - B AH0 - T AH0 N\nLABATT  L AH0 - B AE1 T\nLABATT'S  L AH0 - B AE1 T S\nLABATT'S(2)  L AH0 - B AA1 T S\nLABATT(2)  L AH0 - B AA1 T\nLABAUVE  L AH0 - B OW1 V\nLABAY  L AE1 - B EY0\nLABBE  L AE1 B\nLABE  L EY1 B\nLABEAU  L AH0 - B OW1\nLABEL  L EY1 - B AH0 L\nLABEL'S  L EY1 - B AH0 L Z\nLABELED  L EY1 - B AH0 L D\nLABELING  L EY1 - B AH0 L - IH0 NG\nLABELING(2)  L EY1 - B L IH0 NG\nLABELL  L AH0 - B EH1 L\nLABELLA  L AH0 - B EH1 - L AH0\nLABELLE  L AH0 - B EH1 L\nLABELLED  L EY1 - B AH0 L D\nLABELS  L EY1 - B AH0 L Z\nLABENSKI  L AA0 - B EH1 N - S K IY0\nLABER  L EY1 - B ER0\nLABERGE  L AA1 - B ER0 G\nLABIANCA  L AA0 - B IY0 - AA1 NG - K AH0\nLABIANCA'S  L AA0 - B IY0 - AA1 NG - K AH0 Z\nLABINE  L AA0 - B IY1 - N IY0\nLABLANC  L AH0 - B L AE1 NG K\nLABO  L AA1 - B OW0\nLABODA  L AA0 - B OW1 - D AH0\nLABOMBARD  L AE1 - B AH0 M - B ER0 D\nLABONTE  L AH0 - B AA1 N T\nLABONTE(2)  L AH0 - B AA1 N - T IY0\nLABOR  L EY1 - B ER0\nLABOR'S  L EY1 - B ER0 Z\nLABORATOIRES  L AH0 - B AO1 - R AH0 - T W AA2 Z\nLABORATORIES  L AE1 - B R AH0 - T AO2 - R IY0 Z\nLABORATORIES'  L AE1 - B R AH0 - T AO2 - R IY0 Z\nLABORATORY  L AE1 - B R AH0 - T AO2 - R IY0\nLABORATORY'S  L AE1 - B R AH0 - T AO2 - R IY0 Z\nLABORDE  L AH0 - B AO1 R D\nLABORE  L AH0 - B AO1 R\nLABORED  L EY1 - B ER0 D\nLABORER  L EY1 - B ER0 - ER0\nLABORERS  L EY1 - B ER0 - ER0 Z\nLABORING  L EY1 - B ER0 - IH0 NG\nLABORIOUS  L AH0 - B AO1 - R IY0 - AH0 S\nLABORIOUSLY  L AH0 - B AO1 - R IY0 - AH0 S - L IY0\nLABORS  L EY1 - B ER0 Z\nLABOSSIERE  L AE1 - B AH0 - S IY0 - EH0 R\nLABOUISSE  L AA0 - B UW1 S\nLABOUNTY  L AH0 - B AW1 N - T IY0\nLABOUR  L EY1 - B AW2 R\nLABOUR(2)  L EY1 - B ER0\nLABOVE  L AH0 - B AH1 V\nLABOW  L AE1 - B OW0\nLABOY  L AH0 - B OY1\nLABRADOR  L AE1 - B R AH0 - D AO2 R\nLABRAKE  L AE1 - B R AH0 K\nLABRANCHE  L AA0 - B R AA1 N - K IY0\nLABRECK  L AE1 - B R IH0 K\nLABRECQUE  L AH0 - B R EH1 K\nLABREE  L AH0 - B R IY1\nLABRIE  L AE1 - B ER0 - IY0\nLABRIOCHE  L AA2 - B R IY0 - OW1 SH\nLABRIOLA  L AA0 - B R IY0 - OW1 - L AH0\nLABROSSE  L AA0 - B R OW1 - S IY0\nLABS  L AE1 B Z\nLABS'  L AE1 B Z\nLABUDA  L AH0 - B Y UW1 - D AH0\nLABUS  L AE1 - B IH0 S\nLABYRINTH  L AE1 - B ER0 - IH2 N TH\nLABYRINTHINE  L AE2 - B ER0 - IH1 N - TH IY2 N\nLAC  L AE1 K\nLAC'S  L AE1 K S\nLACANA  L AA0 - K AE1 - N AH0\nLACASSE  L AA0 - K AA1 - S IY0\nLACAVA  L AA0 - K AA1 - V AH0\nLACAYO  L AA0 - K EY1 - OW0\nLACAZE  L AA0 - K AA1 - Z IY0\nLACCOLITHS  L AE1 - K AH0 - L IH0 TH S\nLACE  L EY1 S\nLACED  L EY1 S T\nLACEFIELD  L EY1 S - F IY2 L D\nLACER  L EY1 - S ER0\nLACERATE  L AE1 - S ER0 - EY2 T\nLACERATION  L AE2 - S ER0 - EY1 - SH AH0 N\nLACERATIONS  L AE2 - S ER0 - EY1 - SH AH0 N Z\nLACERTE  L AA0 - CH EH1 R - T IY0\nLACES  L EY1 - S AH0 Z\nLACES(2)  L EY1 - S IH0 Z\nLACEWELL  L EY1 S - W EH2 L\nLACEY  L EY1 - S IY0\nLACH  L AE1 CH\nLACHANCE  L AA1 - CH AH0 N S\nLACHAPELLE  L AE1 - SH AH0 - P AH0 L\nLACHARITE  L AE1 - CH ER0 - AY2 T\nLACHE  L AE1 CH\nLACHENBRUCH  L AE1 - K AH0 N - B R UW2 K\nLACHER  L AE1 - K ER0\nLACHICA  L AE1 - CH IH0 - K AH0\nLACHLAN  L AE1 K - L AH0 N\nLACHMAN  L AE1 K - M AH0 N\nLACHMAR  L AE1 K - M AA0 R\nLACHNEY  L AE1 K - N IY0\nLACHOWICZ  L AA1 - HH AH0 - V IH0 CH\nLACINA  L AA0 - CH IY1 - N AH0\nLACIVITA  L AA0 - CH IY0 - V IY1 - T AH0\nLACK  L AE1 K\nLACKADAISICAL  L AE2 - K AH0 - D EY1 - Z IH0 - K AH0 L\nLACKAWANNA  L AE2 - K AH0 W - AA1 - N AH0\nLACKED  L AE1 K T\nLACKEY  L AE1 - K IY0\nLACKEYS  L AE1 - K IY0 Z\nLACKIE  L AE1 - K IY0\nLACKING  L AE1 - K IH0 NG\nLACKLUSTER  L AE1 K - L AH2 - S T ER0\nLACKMAN  L AE1 K - M AH0 N\nLACKNER  L AE1 K - N ER0\nLACKO  L AE1 - K OW0\nLACKOVIC  L AE1 - K AH0 - V IH0 K\nLACKS  L AE1 K S\nLACLAIR  L AE1 K - L ER0\nLACLEDE  L AA0 K - L IY1 D\nLACOCK  L AE1 - K AH0 K\nLACOMB  L AE1 - K AH0 M\nLACOMBE  L AA0 - K OW1 M - B IY0\nLACONIC  L AA0 - K AA1 - N IH0 K\nLACONTE  L AA0 - K OW1 N - T IY0\nLACORTE  L AA0 - K AO1 R - T IY0\nLACOSS  L AH0 - K AA1 S\nLACOSSE  L AA0 - K OW1 - S IY0\nLACOSTE  L AA0 - K AO1 S T\nLACOUNT  L AH0 - K UW1 N T\nLACOUR  L AH0 - K UH1 R\nLACOURSE  L AH0 - K UH1 R S\nLACOURSIERE  L AE1 - K UH0 R - S IY0 - EH0 R\nLACOUTURE  L AE1 - K UW0 - CH ER0\nLACOVARA  L AA0 K - OW0 - V AA1 - R AH0\nLACQUER  L AE1 - K ER0\nLACQUERED  L AE1 - K ER0 D\nLACROIX  L AH0 K - R OY1\nLACROSS  L AH0 - K R AO1 S\nLACROSSE  L AH0 - K R AO1 S\nLACTASE  L AE1 K - T EY2 S\nLACTATE  L AE1 K - T EY0 T\nLACTATING  L AE1 K - T EY0 - T IH0 NG\nLACTATION  L AE0 K - T EY1 - SH AH0 N\nLACTEALS  L AE1 K - T IY2 L Z\nLACTER  L AE1 K - T ER0\nLACTIC  L AE1 K - T IH0 K\nLACTOBACILLUS  L AE2 K - T OW0 - B AH0 - S IH1 - L AH0 S\nLACTONE  L AE1 K - T OW0 N\nLACTOSE  L AE1 K - T OW0 S\nLACY  L EY1 - S IY0\nLAD  L AE1 D\nLADA  L AA1 - D AH0\nLADAKH  L AA1 - D AH0 K\nLADAS  L AA1 - D AH0 Z\nLADBROKE  L AE1 D - B R OW2 K\nLADBROKE'S  L AE1 D - B R OW2 K S\nLADD  L AE1 D\nLADD'S  L AE1 D Z\nLADDER  L AE1 - D ER0\nLADDERS  L AE1 - D ER0 Z\nLADE  L EY1 D\nLADEHOFF  L AE1 - D AH0 - HH AO0 F\nLADEN  L EY1 - D AH0 N\nLADENBURG  L EY1 - D AH0 N - B ER0 G\nLADER  L EY1 - D ER0\nLADEWIG  L AE1 - D UW0 - IH0 G\nLADIES  L EY1 - D IY0 Z\nLADIES'  L EY1 - D IY2 Z\nLADING  L EY1 - D IH0 NG\nLADINO  L AH0 - D IY1 - N OW0\nLADISH  L AA0 - D IH1 SH\nLADLE  L EY1 - D AH0 L\nLADLED  L EY1 - D AH0 L D\nLADLES  L EY1 - D AH0 L Z\nLADLEY  L AE1 D - L IY0\nLADNER  L AE1 D - N ER0\nLADNIER  L AE1 D - N IY0 - ER0\nLADOUCEUR  L AE1 - D UW0 - S ER0\nLADOW  L AE1 - D OW0\nLADS  L AE1 D Z\nLADSON  L AE1 D - S AH0 N\nLADUCA  L AA0 - D UW1 - K AH0\nLADUE  L AA1 D - W EH0\nLADUKE  L AA0 - D UW1 - K EY0\nLADWIG  L AE1 D - W IH0 G\nLADY  L EY1 - D IY0\nLADY'S  L EY1 - D IY0 Z\nLADYBIRD  L EY1 - D IY0 - B ER2 D\nLADYBUG  L EY1 - D IY0 - B AH2 G\nLADYBUGS  L EY1 - D IY0 - B AH2 G Z\nLADYLIKE  L EY1 - D IY0 - L AY2 K\nLAENDERBANK  L AE1 N - D ER0 - B AE2 NG K\nLAEVO  L EY1 - V OW0\nLAFALCE  L AA0 - F AE1 L - S IY0\nLAFALCE(2)  L AH0 - F AA1 L S\nLAFARGE  L AA0 - F AA1 R JH\nLAFATA  L AA0 - F AA1 - T AH0\nLAFAUCI  L AA0 - F AO1 - CH IY0\nLAFAVE  L AH0 - F EY1 V\nLAFAVOR  L AE1 - F AH0 - V ER0\nLAFAVRE  L AH0 - F EY1 - V ER0\nLAFAYETTE  L AA2 - F IY0 - EH1 T\nLAFAYETTE(2)  L AA2 - F EY0 - EH1 T\nLAFER  L EY1 - F ER0\nLAFERRIERE  L AE1 - F ER0 - IY0 - EH0 R\nLAFEVER  L AE1 F - EH0 - V ER0\nLAFEVERS  L AE1 F - EH0 - V ER0 Z\nLAFEYETTE  L AA2 - F IY0 - EH1 T\nLAFF  L AE1 F\nLAFFER  L AE1 - F ER0\nLAFFERTY  L AE1 - F ER0 - T IY0\nLAFFEY  L AE1 - F IY0\nLAFFIN  L AE1 - F IH0 N\nLAFFITTE  L AH0 - F IH1 T\nLAFFOON  L AH0 - F UW1 N\nLAFITE  L AA0 - F AY1 T\nLAFITTE  L AH0 - F IH1 T\nLAFLAM  L AH0 - F L AE1 M\nLAFLAMME  L AE1 F - L IH0 M\nLAFLECHE  L AH0 - F L EH1 SH\nLAFLER  L EY1 - F AH0 L - ER0\nLAFLER(2)  L EY1 F - L ER0\nLAFLEUR  L AH0 F - L ER1\nLAFLIN  L AE1 F - L IH0 N\nLAFOE  L AH0 - F OW1\nLAFOLLETTE  L AE1 - F AH0 - L EH0 T\nLAFON  L AE1 - F AH0 N\nLAFOND  L AH0 - F AA1 N D\nLAFONT  L AH0 - F AA1 N T\nLAFONTAINE  L AE1 - F AH0 N - T EY2 N\nLAFONTANT  L AA0 - F AA1 N - T AH0 N T\nLAFORCE  L AH0 - F AO1 R S\nLAFOREST  L AH0 - F AO1 - R AH0 S T\nLAFORGE  L AH0 - F AO1 R G\nLAFORTE  L AH0 - F AO1 R T\nLAFORTUNE  L AE1 - F ER0 - T UW0 N\nLAFOSSE  L AH0 - F AA1 S\nLAFOUNTAIN  L AA1 - F AA2 N - T EY1 N\nLAFOUNTAINE  L AA1 - F AA2 N - T EY1 N\nLAFOY  L AH0 - F OY1\nLAFRAMBOISE  L AH2 - F R AE2 M - B W AA1\nLAFRANCE  L AH0 - F R AE1 N S\nLAFRENIERE  L AE1 - F R IH0 - N IY0 - EH0 R\nLAFRENZ  L AE1 - F R IH0 N S\nLAFUENTE  L AA0 F - W EH1 N - T EY0\nLAG  L AE1 G\nLAGACE  L AA0 - G AA1 - CH IY0\nLAGAN  L AE1 - G AH0 N\nLAGANA  L AA0 - G AE1 - N AH0\nLAGARDE  L AA0 - G AA1 R - D IY0\nLAGARDERE  L AA0 - G AA0 R - D IH1 R\nLAGASSE  L AA0 - G AA1 - S IY0\nLAGATTUTA  L AA0 - G AA0 - T UW1 - T AH0\nLAGE  L EY1 JH\nLAGER  L AA1 - G ER0\nLAGERFELD  L AA1 - G ER0 - F EH0 L D\nLAGERFELD(2)  L EY1 - G ER0 - F EH0 L D\nLAGERGREN  L EY1 - G ER0 - G R EH0 N\nLAGERQUIST  L EY1 - G ER0 - K W IH0 S T\nLAGERSTROM  L EY1 - G ER0 S - T R AH0 M\nLAGESSE  L AE1 - G EH0 S\nLAGGARD  L AE1 - G ER0 D\nLAGGARDS  L AE1 - G ER0 D Z\nLAGGED  L AE1 G D\nLAGGING  L AE1 - G IH0 NG\nLAGLE  L EY1 - G AH0 L\nLAGNADO  L AA2 G - N AA1 - D OW0\nLAGO  L AA1 - G OW0\nLAGOMARSINO  L AA0 - G OW2 - M AA0 R - S IY1 - N OW0\nLAGOON  L AH0 - G UW1 N\nLAGOONS  L AH0 - G UW1 N Z\nLAGOS  L EY1 - G AO0 S\nLAGOW  L AE1 - G OW0\nLAGRANGE  L AE1 - G R EY2 N JH\nLAGRECA  L AA0 - G R EH1 - K AH0\nLAGROCERIA  L AA0 - G R OW2 - S ER0 - IY1 - AH2\nLAGROCERIA(2)  L AH0 - G R OW2 - S ER0 - IY1 - AH2\nLAGRONE  L AA0 - G R OW1 - N IY0\nLAGROW  L AE1 - G R OW2\nLAGS  L AE1 G Z\nLAGUARDIA  L AH0 G - W AA1 R - D IY0 - AH0\nLAGUE  L AA1 G\nLAGUNA  L AH0 - G UW1 - N AH0\nLAGUNAS  L AH0 - G UW1 - N AH0 Z\nLAHAIE  L AE1 - HH IY0\nLAHAIE(2)  L AH0 - HH AY1\nLAHAM  L AE1 - HH AH0 M\nLAHAYE  L AE1 - HH EY0\nLAHEY  L EY1 - HH IY0\nLAHIFF  L AE1 - HH IH0 F\nLAHM  L AE1 M\nLAHMAN  L AA1 - M AH0 N\nLAHMANN  L AA1 - M AH0 N\nLAHN  L AE1 N\nLAHOOD  L AA1 - HH UH0 D\nLAHORE  L AA0 - HH AO1 R\nLAHR  L AA1 R\nLAHTI  L AA1 - T IY0\nLAHUE  L AE1 - HH Y UW0\nLAI  L AY1\nLAIB  L EY1 B\nLAIBLE  L EY1 - B AH0 L\nLAIBOWITZ  L EY1 - B AH0 - W IH0 T S\nLAIBROOK  L EY1 - B R UH2 K\nLAICHE  L EY1 CH\nLAID  L EY1 D\nLAIDIG  L EY1 - D IH0 G\nLAIDLAW  L EY1 D - L AO2\nLAIDLAW'S  L EY1 D - L AO1 Z\nLAIDLER  L EY1 D - L ER0\nLAIDLEY  L EY1 D - L IY0\nLAIL  L EY1 L\nLAIMBEER  L EY2 M - B IH1 R\nLAIN  L EY1 N\nLAINE  L EY1 N\nLAING  L AA1 - IH0 NG\nLAINHART  L AY1 N - HH AA0 R T\nLAINO  L EY1 - N OW0\nLAIR  L EH1 R\nLAIRD  L EH1 R D\nLAIRMORE  L EH1 R - M AO0 R\nLAIRSON  L EH1 R - S AH0 N\nLAIS  L EY1 Z\nLAISSEZ  L EY1 - Z EY2\nLAISSEZ(2)  L EH1 - Z EY2\nLAIT  L EY1\nLAITINEN  L AY1 - T IH0 - N AH0 N\nLAITY  L EY1 - AH0 - T IY0\nLAJEUNE  L AH0 - JH AH1 N\nLAJEUNESSE  L AH0 - JH AH1 - N EH0 S\nLAJOIE  L AE1 JH - W AA0\nLAJOUS  L AH0 - ZH UW1 S\nLAK  L AE1 K\nLAKATOS  L AE1 - K AH0 - T OW0 Z\nLAKE  L EY1 K\nLAKE'S  L EY1 K S\nLAKEBERG  L EY1 K - B ER0 G\nLAKEFIELD  L EY1 K - F IY2 L D\nLAKEFRONT  L EY1 K - F R AH2 N T\nLAKELAND  L EY1 K - L AH0 N D\nLAKEMAN  L EY1 K - M AH0 N\nLAKER  L EY1 - K ER0\nLAKERS  L EY1 - K ER0 Z\nLAKES  L EY1 K S\nLAKES'  L EY1 K S\nLAKESHORE  L EY1 K - SH AO2 R\nLAKESIDE  L EY1 K - S AY2 D\nLAKEVIEW  L EY1 K - V Y UW2\nLAKEWOOD  L EY1 K - W UH2 D\nLAKEY  L EY1 - K IY0\nLAKIN  L AE1 - K IH0 N\nLAKINS  L AE1 - K IH0 N Z\nLAKOTA  L AH0 - K OW1 - T AH0\nLAKOTAS  L AH0 - K OW1 - T AH0 Z\nLAKOTAS'  L AH0 - K OW1 - T AH0 Z\nLAKSHAMANAN  L AE0 K - SH AH0 - M AA1 - N AH0 N\nLAKSHAMANAN'S  L AE0 K - SH AH0 - M AA1 - N AH0 N Z\nLAL  L AE1 L\nLALA  L AA1 - L AH0\nLALANDE  L AA0 - L AA1 N - D IY0\nLALAS  L AA1 - L AH0 S\nLALIBERTE  L AA0 - L IY0 - B EH1 R - T IY0\nLALIT  L AH0 - L IY1 T\nLALITA  L AH0 - L IY1 - T AH0\nLALITESH  L AA1 - L IH2 - T EH2 SH\nLALL  L AO1 L\nLALLA  L AE1 - L AH0\nLALLEY  L AE1 - L IY0\nLALLI  L AE1 - L IY0\nLALLIE  L AO1 - L IY0\nLALLIER  L AE1 - L IY0 - ER0\nLALLO  L AE1 - L OW0\nLALLY  L AE1 - L IY0\nLALONDE  L AA0 - L OW1 N - D IY0\nLALONE  L AA0 - L OW1 - N IY0\nLALOR  L AE0 - L AO1 R\nLAM  L AE1 M\nLAMA  L AA1 - M AH0\nLAMA'S  L AA1 - M AH0 Z\nLAMACCHIA  L AA0 - M AA1 - K IY0 - AH0\nLAMAGNA  L AA0 - M AA1 G - N AH0\nLAMAGNA(2)  L AH0 - M AA1 - N Y AH0\nLAMAIST  L AA1 - M AY0 - IH0 S T\nLAMAN  L EY1 - M AH0 N\nLAMANNA  L AE1 - M IH0 - N AH0\nLAMANTIA  L AA0 - M AA1 N - SH AH0\nLAMAR  L AH0 - M AA1 R\nLAMAR'S  L AH0 - M AA1 R Z\nLAMARCA  L AA0 - M AA1 R - K AH0\nLAMARCHE  L AA0 - M AA1 R - K IY0\nLAMARR  L AA0 - M AA1 R\nLAMARRE  L AA0 - M AA1 - R IY0\nLAMARTINA  L AA0 - M AA0 R - T IY1 - N AH0\nLAMAS  L AA1 - M AH0 Z\nLAMASTER  L AA1 - M AE0 - S T ER0\nLAMASTUS  L AE1 - M AH0 - S T IH0 S\nLAMATTINA  L AA0 - M AA0 - T IY1 - N AH0\nLAMAUR  L AH0 - M AO1 R\nLAMAY  L AE1 - M EY0\nLAMB  L AE1 M\nLAMB'S  L AE1 M Z\nLAMBASTE  L AE2 M - B AE1 S T\nLAMBASTE(2)  L AE2 M - B EY1 S T\nLAMBASTED  L AE2 M - B AE1 - S T IH0 D\nLAMBASTED(2)  L AE2 M - B EY1 - S T IH0 D\nLAMBASTES  L AE2 M - B AE1 S T S\nLAMBASTES(2)  L AE2 M - B EY1 S T S\nLAMBASTES(3)  L AE2 M - B AE1 S S\nLAMBASTES(4)  L AE2 M - B EY1 S S\nLAMBASTES(5)  L AE2 M - B AE1 S\nLAMBASTES(6)  L AE2 M - B EY1 S\nLAMBASTING  L AE0 M - B EY1 - S T IH0 NG\nLAMBDA  L AE1 M - D AH0\nLAMBDIN  L AE1 M - D IH0 N\nLAMBE  L AE1 M\nLAMBERG  L AE1 M - B ER0 G\nLAMBERSON  L AE1 M - B ER0 - S AH0 N\nLAMBERT  L AE1 M - B ER0 T\nLAMBERT'S  L AE1 M - B ER0 T S\nLAMBERTH  L AE1 M - B ER0 TH\nLAMBERTI  L AA0 M - B EH1 R - T IY0\nLAMBERTO  L AA0 M - B EH1 R - T OW2\nLAMBERTON  L AE1 M - B ER0 - T AH0 N\nLAMBERTSON  L AE1 M - B ER0 T - S AH0 N\nLAMBERTY  L AE1 M - B ER0 - T IY0\nLAMBETH  L AE1 M - B IH0 TH\nLAMBIASE  L AA0 M - B IY0 - AA1 - S IY0\nLAMBIE  L AE1 M - B IY0\nLAMBING  L AE1 - M IH0 NG\nLAMBORGHINI  L AE2 M - B ER0 - G IY1 - N IY0\nLAMBORGHINI'S  L AE2 M - B ER0 - G IY1 - N IY0 Z\nLAMBORGHINIS  L AE2 M - B ER0 - G IY1 - N IY0 Z\nLAMBORN  L AH0 M - B AO1 R N\nLAMBOY  L AE1 M - B OY2\nLAMBREAU  L AE0 M - B R OW1\nLAMBRECHT  L AE1 M - B R IH0 K T\nLAMBRIGHT  L AE1 M - B R AY2 T\nLAMBRO  L AE1 M - B R OW0\nLAMBROS  L AE1 M - B R OW0 Z\nLAMBS  L AE1 M Z\nLAMBS'  L AE1 M Z\nLAMBSDORFF  L AE1 M Z - D AO0 R F\nLAMBSON  L AE1 M - S AH0 N\nLAMBY  L AE1 M - B IY0\nLAME  L EY1 M\nLAMELLAR  L AH0 - M EH1 - L ER0\nLAMELY  L EY1 M - L IY0\nLAMENDOLA  L AA0 - M EH0 N - D OW1 - L AH0\nLAMENT  L AH0 - M EH1 N T\nLAMENTABLE  L AH0 - M EH1 N - T AH0 - B AH0 L\nLAMENTED  L AH0 - M EH1 N - T IH0 D\nLAMENTING  L AH0 - M EH1 N - T IH0 NG\nLAMENTS  L AH0 - M EH1 N T S\nLAMER  L EY1 - M ER0\nLAMERE  L AA0 - M EH1 - R EY0\nLAMERS  L EY1 - M ER0 Z\nLAMETA  L AH0 - M EH1 - T AH0\nLAMEY  L EY1 - M IY0\nLAMIA  L EY1 - M IY0 - AH0\nLAMICA  L AE1 - M IH0 - K AH0\nLAMIE  L EY1 - M IY0\nLAMINA  L AE1 - M AH0 - N AH0\nLAMINACK  L AE1 - M IH0 - N AH0 K\nLAMINAR  L AE1 - M IH0 - N ER0\nLAMINATE  L AE1 - M AH0 - N AH0 T\nLAMINATE(2)  L AE1 - M AH0 - N EY2 T\nLAMINATED  L AE1 - M AH0 - N EY2 - T AH0 D\nLAMINATES  L AE1 - M AH0 - N AH0 T S\nLAMINATING  L AE1 - M AH0 - N EY2 - T IH0 NG\nLAMINE  L AH0 - M IY1 N\nLAMINE'S  L AH0 - M IY1 N Z\nLAMINER  L AE1 - M AH0 - N ER0\nLAMIRANDE  L AA0 - M IH0 - R AA1 N - D IY0\nLAMISON  L AE1 - M IH0 - S AH0 N\nLAMKE  L AE1 M - K IY0\nLAMKIN  L AE1 M - K IH0 N\nLAMLE  L AE1 M - L IY0\nLAMM  L AE1 M\nLAMM'S  L AE1 M Z\nLAMME  L AE1 M\nLAMMERS  L AE1 - M ER0 Z\nLAMMERT  L AE1 - M ER0 T\nLAMMEY  L AE1 - M IY0\nLAMMI  L AE1 - M IY0\nLAMMON  L AE1 - M AH0 N\nLAMMOND  L AE1 - M AH0 N D\nLAMMONS  L AE1 - M AH0 N Z\nLAMON  L AA0 - M AO1 N\nLAMOND  L AH0 - M AA1 N D\nLAMONICA  L AA0 - M OW0 - N IY1 - K AH0\nLAMONS  L AA1 - M OW0 N Z\nLAMONT  L AH0 - M AA1 N T\nLAMONTAGNE  L AA2 - M AA0 N - T EY1 N\nLAMONTE  L AA0 - M AA1 N T\nLAMORA  L AA0 - M AO1 - R AH0\nLAMORE  L AA1 - M AO0 R\nLAMOREAUX  L AE1 - M ER0 - OW0\nLAMOREUX  L AE1 - M ER0 - OW0\nLAMORTE  L AA0 - M AO1 R - T IY0\nLAMOS  L AA1 - M OW0 S\nLAMOTHE  L AE1 - M AH0 DH\nLAMOTT  L AH0 - M AA1 T\nLAMOTTA  L AA0 - M OW1 - T AH0\nLAMOTTE  L AH0 - M AO1 T\nLAMOUNTAIN  L AE1 - M UW0 N - T EY0 N\nLAMOUREAUX  L AE1 - M UH0 - R OW0\nLAMOUREUX  L AE1 - M UH0 - R OW0\nLAMP  L AE1 M P\nLAMPE  L AE1 M P\nLAMPERT  L AE1 M - P ER2 T\nLAMPF  L AE1 M P F\nLAMPHEAR  L AE1 M - F ER0\nLAMPHERE  L AE1 M - F ER0\nLAMPHIER  L AE1 M - F IY0 - ER0\nLAMPI  L AE1 M - P IY0\nLAMPING  L AE1 M - P IH0 NG\nLAMPKIN  L AE1 M P - K IH0 N\nLAMPKINS  L AE1 M P - K IH0 N Z\nLAMPL  L AE1 M - P AH0 L\nLAMPLEY  L AE1 M P - L IY0\nLAMPLIGHTER  L AE1 M P - L AY2 - T ER0\nLAMPLIGHTER'S  L AE1 M P - L AY2 - T ER0 Z\nLAMPLIGHTERS  L AE1 M P - L AY2 - T ER0 Z\nLAMPMAN  L AE1 M P - M AH0 N\nLAMPO  L AE1 M - P OW0\nLAMPOON  L AE0 M - P UW1 N\nLAMPOON'S  L AE0 M - P UW1 N Z\nLAMPOONED  L AE0 M - P UW1 N D\nLAMPORT  L AE1 M - P AO2 R T\nLAMPP  L AE1 M P\nLAMPPOST  L AE1 M P - P OW2 S T\nLAMPPOST(2)  L AE1 M - P OW2 S T\nLAMPPOSTS  L AE1 M P - P OW2 S T S\nLAMPPOSTS(2)  L AE1 M - P OW2 S S\nLAMPPOSTS(3)  L AE1 M - P OW2 S\nLAMPREY  L AE1 M - P R IY0\nLAMPREYS  L AE1 M - P R IY0 Z\nLAMPRON  L AE1 M - P R AH0 N\nLAMPROS  L AE1 M - P R OW0 Z\nLAMPS  L AE1 M P S\nLAMPSON  L AE1 M P - S AH0 N\nLAMPTON  L AE1 M P - T AH0 N\nLAMSON  L AE1 M - S AH0 N\nLAMSTON  L AE1 M - S T AH0 N\nLAMY  L EY1 - M IY0\nLAN  L AE1 N\nLANA  L AE1 - N AH0\nLANAGAN  L AE1 - N AH0 - G AE0 N\nLANAHAN  L AE1 - N AH0 - HH AE0 N\nLANASA  L AA0 - N AA1 - S AH0\nLANCASHIRE  L AE1 NG - K AH0 - SH AY2 R\nLANCASTER  L AE1 N - K AE2 - S T ER0\nLANCASTER(2)  L AE1 NG - K AH0 - S T ER0\nLANCASTRIAN  L AE2 NG - K AE1 S - T R IY0 - AH0 N\nLANCE  L AE1 N S\nLANCE'S  L AE1 N - S IH0 Z\nLANCELET  L AE1 N S - L AH0 T\nLANCELOT  L AE1 N - S AH0 - L AA2 T\nLANCEOLATE  L AE1 N - S IY0 - AH0 - L EY2 T\nLANCER  L AE1 N - S ER0\nLANCERS  L AE1 N - S ER0 Z\nLANCET  L AE1 N - S AH0 T\nLANCET'S  L AE1 N - S AH0 T S\nLANCETS  L AE1 N - S AH0 T S\nLANCIA  L AA1 N - CH AH0\nLANCING  L AE1 N - S IH0 NG\nLANCIT  L AE1 N - S IH0 T\nLANCLOS  L AE1 N - K L OW0 Z\nLANCOME  L AE1 N - K AH0 M\nLANCOME(2)  L AA1 N - K OW2 M\nLANCON  L AE1 NG - K AH0 N\nLANCOUR  L AH0 N - K UH1 R\nLANCTOT  L AE1 NG K - T AH0 T\nLANCZ  L AE1 N CH\nLAND  L AE1 N D\nLAND'S  L AE1 N D Z\nLANDA  L AE1 N - D AH0\nLANDAU  L AE1 N - D AW2\nLANDAUER  L AE1 N - D AW2 - ER0\nLANDAY  L AE1 N - D EY2\nLANDBANK  L AE1 N D - B AE2 NG K\nLANDBERG  L AE1 N D - B ER0 G\nLANDE  L AE1 N D\nLANDECK  L AE1 N - D IH0 K\nLANDED  L AE1 N - D AH0 D\nLANDED(2)  L AE1 N - D IH0 D\nLANDEFELD  L AE1 N - D IH0 - F EH0 L D\nLANDELL  L AE0 N - D EH1 L\nLANDEN  L AE1 N - D AH0 N\nLANDENBERGER  L AE1 N - D AH0 N - B ER0 - G ER0\nLANDER  L AE1 N - D ER0\nLANDEROS  L AE1 N - D ER0 - OW0 Z\nLANDERS  L AE1 N - D ER0 Z\nLANDES  L AE1 N D Z\nLANDESBANK  L AE1 N - D IY0 Z - B AE2 NG K\nLANDESMAN  L AE1 N - D IH0 S - M AH0 N\nLANDESS  L AE1 N - D AH0 S\nLANDFAIR  L AE1 N D - F EH2 R\nLANDFALL  L AE1 N D - F AO2 L\nLANDFILL  L AE1 N D - F IH2 L\nLANDFILLING  L AE1 N D - F IH0 - L IH0 NG\nLANDFILLS  L AE1 N D - F IH2 L Z\nLANDFORM  L AE1 N D - F AO2 R M\nLANDFORMS  L AE1 N D - F AO2 R M Z\nLANDFRIED  L AE1 N D - F ER0 - IY0 D\nLANDGRAF  L AE1 N - JH R AH0 F\nLANDGRAVE  L AE1 N D - G R EY2 V\nLANDGREBE  L AE1 N JH - R IH0 B\nLANDGREN  L AE1 N D - G R EH0 N\nLANDHOLDER  L AE1 N D - HH OW2 L - D ER0\nLANDHOLDERS  L AE1 N D - HH OW2 L - D ER0 Z\nLANDHOLDING  L AE1 N D - HH OW2 L - D IH0 NG\nLANDHOLDINGS  L AE1 N D - HH OW2 L - D IH0 NG Z\nLANDI  L AE1 N - D IY0\nLANDIN  L AE1 N - D IH0 N\nLANDING  L AE1 N - D IH0 NG\nLANDINGHAM  L AE1 N - D IH0 NG - HH AE2 M\nLANDINGS  L AE1 N - D IH0 NG Z\nLANDINI  L AA0 N - D IY1 - N IY0\nLANDINO  L AA0 N - D IY1 - N OW0\nLANDIS  L AE1 N - D IH0 S\nLANDLADY  L AE1 N D - L EY2 - D IY0\nLANDLER  L AE1 N D - L ER0\nLANDLER'S  L AE1 N D - L ER0 Z\nLANDLESS  L AE1 N D - L AH0 S\nLANDLOCK  L AE1 N D - L AA2 K\nLANDLOCKED  L AE1 N D - L AA2 K T\nLANDLORD  L AE1 N D - L AO2 R D\nLANDLORD'S  L AE1 N D - L AO2 R D Z\nLANDLORDS  L AE1 N D - L AO2 R D Z\nLANDMAN  L AE1 N D - M AH0 N\nLANDMARK  L AE1 N D - M AA2 R K\nLANDMARK'S  L AE1 N D - M AA2 R K S\nLANDMARKS  L AE1 N D - M AA2 R K S\nLANDMASS  L AE1 N D - M AE2 S\nLANDMESSER  L AE1 N D - M EH2 - S ER0\nLANDMINE  L AE1 N D - M AY2 N\nLANDMINES  L AE1 N D - M AY2 N Z\nLANDO  L AE1 N - D OW0\nLANDOLFI  L AA0 N - D OW1 L - F IY0\nLANDOLT  L AE1 N - D OW2 L T\nLANDON  L AE1 N - D AH0 N\nLANDOR  L AE1 N - D ER0\nLANDOVER  L AE1 N D - OW2 - V ER0\nLANDOW  L AE1 N - D OW0\nLANDOWNER  L AE1 N D - OW2 - N ER0\nLANDOWNERS  L AE1 N D - OW2 - N ER0 Z\nLANDOWSKI  L AH0 N - D AO1 F S - K IY0\nLANDRENEAU  L AE1 N - D R IH0 - N OW0\nLANDRESS  L AE1 N - D R IH0 S\nLANDRETH  L AE1 N - D R IH0 TH\nLANDRIEU  L AE1 N - D R UW0\nLANDRIEU(2)  L AE0 N - D R IY1 - UW0\nLANDRIGAN  L AE1 N - D R IH0 - G AH0 N\nLANDRITH  L AE1 N - D R IH0 TH\nLANDRUM  L AE1 N - D R AH0 M\nLANDRUS  L AE1 N - D R AH0 S\nLANDRY  L AE1 N - D R IY0\nLANDRY'S  L AE1 N - D R IY0 Z\nLANDS  L AE1 N D Z\nLANDS'  L AE1 N D Z\nLANDSAT  L AE1 N D - S AE1 T\nLANDSBERG  L AE1 N D Z - B ER0 G\nLANDSBERGER  L AE1 N D Z - B ER0 - G ER0\nLANDSBERGIS  L AE1 N D Z - B ER0 - G AH0 S\nLANDSCAPE  L AE1 N D - S K EY2 P\nLANDSCAPE(2)  L AE1 N - S K EY2 P\nLANDSCAPED  L AE1 N D - S K EY2 P T\nLANDSCAPER  L AE1 N D - S K EY2 - P ER0\nLANDSCAPERS  L AE1 N D - S K EY2 - P ER0 Z\nLANDSCAPES  L AE1 N D - S K EY2 P S\nLANDSCAPES(2)  L AE1 N - S K EY2 P S\nLANDSCAPING  L AE1 N D - S K EY2 - P IH0 NG\nLANDSCAPING(2)  L AE1 N - S K EY2 - P IH0 NG\nLANDSLIDE  L AE1 N D - S L AY2 D\nLANDSLIDE(2)  L AE1 N S - L AY2 D\nLANDSLIDES  L AE1 N D - S L AY2 D Z\nLANDSLIDES(2)  L AE1 N S - L AY2 D Z\nLANDSMAN  L AE1 N D Z - M AH0 N\nLANDSNER  L AE1 N D Z - N ER0\nLANDSTON  L AE1 N D - S T AH0 N\nLANDSTROM  L AE1 N D - S T R AH0 M\nLANDT  L AE1 N T\nLANDVIEW  L AE1 N D - V Y UW2\nLANDVIEW'S  L AE1 N D - V Y UW2 Z\nLANDVIEWITE  L AE1 N D - V Y UW0 - AY0 T\nLANDVIEWITES  L AE1 N D - V Y UW0 - AY0 T S\nLANDWARD  L AE1 N D - W ER0 D\nLANDWEHR  L AE1 N D - W IH0 R\nLANDY  L AE1 N - D IY0\nLANE  L EY1 N\nLANE'S  L EY1 N Z\nLANEHART  L EY1 N - HH AA2 R T\nLANES  L EY1 N Z\nLANESE  L AA0 - N EY1 - Z IY0\nLANETE  L AH0 - N IY1 T\nLANEVE  L AH0 - N IY1 V\nLANEY  L EY1 - N IY0\nLANFEAR  L AE1 N - F ER0\nLANFORD  L AE1 N - F ER0 D\nLANG  L AE1 NG\nLANGAN  L AE1 NG - G AH0 N\nLANGBEHN  L AE1 NG - B IH0 N\nLANGBEIN  L AE1 NG - B AY0 N\nLANGBO  L AE1 NG - B OW0\nLANGDALE  L AE1 NG - D EY2 L\nLANGDON  L AE1 NG - D AH0 N\nLANGE  L AE1 NG\nLANGE'S  L AE1 NG Z\nLANGEL  L EY1 NG - G AH0 L\nLANGELAND  L EY1 NG - G IH0 - L AH0 N D\nLANGELAND(2)  L EY1 NG - G L AH0 N D\nLANGELIER  L EY1 N JH - L IY0 - ER0\nLANGELLA  L AE0 N - JH EH1 - L ER0\nLANGEN  L AE1 - NG AH0 N\nLANGENBACH  L EY1 NG - G IH0 N - B AA0 K\nLANGENBERG  L AE1 - NG AH0 N - B ER0 G\nLANGENDERFER  L EY1 NG - G IH0 N - D ER0 - F ER0\nLANGENDORF  L EY1 NG - G IH0 N - D AO0 R F\nLANGENFELD  L EY1 NG - G IH0 N - F EH0 L D\nLANGER  L AE1 - NG ER0\nLANGERMAN  L AE1 - NG ER0 - M AH0 N\nLANGERS  L AE1 - NG ER0 Z\nLANGEVIN  L EY1 NG - G IH0 - V IH0 N\nLANGFELDT  L AE1 NG - F EH0 L T\nLANGFITT  L AE1 NG - F IH0 T\nLANGFORD  L AE1 NG - F ER0 D\nLANGGUTH  L AE1 - NG UW0 TH\nLANGHAM  L AE1 NG - HH AE0 M\nLANGHAM(2)  L AE1 - NG AH0 M\nLANGHANS  L AE1 NG - HH AH0 N Z\nLANGHOFF  L AE1 NG - HH AO0 F\nLANGHORN  L AE1 NG - HH AO0 R N\nLANGHORNE  L AE1 NG - HH AO0 R N\nLANGHORST  L AE1 NG - HH AO0 R S T\nLANGILL  L AE1 NG - G AH0 L\nLANGILLE  L AA0 NG - G IY1 - L IY0\nLANGLAIS  L AH0 NG - G L EY1\nLANGLAND  L AE1 NG - L AH0 N D\nLANGLEY  L AE1 NG - L IY0\nLANGLEY(2)  L AE1 NG - G L IY0\nLANGLINAIS  L AE1 NG - G L IH0 - N EY0\nLANGLOIS  L AH0 NG - L W AA1\nLANGMAN  L AE1 NG - M AH0 N\nLANGNER  L AE1 NG - N ER0\nLANGO  L AA1 NG - G OW0\nLANGONE  L AA0 NG - G OW1 - N IY0\nLANGOWSKI  L AH0 NG - G AO1 F S - K IY0\nLANGREHR  L AE1 NG - G R IH0 R\nLANGRIDGE  L AE1 NG - G R IH0 JH\nLANGSAM  L AE1 NG - S AH0 M\nLANGSDORF  L AE1 NG Z - D AO0 R F\nLANGSETH  L AE1 NG - S EH0 TH\nLANGSFORD  L AE1 NG Z - F ER0 D\nLANGSTAFF  L AE1 NG - S T AE0 F\nLANGSTON  L AE1 NG - S T AH0 N\nLANGTON  L AE1 NG - T AH0 N\nLANGUAGE  L AE1 NG - G W AH0 JH\nLANGUAGE(2)  L AE1 NG - G W IH0 JH\nLANGUAGES  L AE1 NG - G W AH0 - JH AH0 Z\nLANGUAGES(2)  L AE1 NG - G W IH0 - JH IH0 Z\nLANGUID  L AE1 NG - G W AH0 D\nLANGUISH  L AE1 NG - G W IH0 SH\nLANGUISHED  L AE1 NG - G W IH0 SH T\nLANGUISHES  L AE1 NG - G W IH0 - SH IH0 Z\nLANGUISHING  L AE1 NG - G W IH0 - SH IH0 NG\nLANGWELL  L AE1 NG - G W EH0 L\nLANGWORTH  L AE1 NG - G W ER0 TH\nLANGWORTHY  L AE1 NG - W ER0 - DH IY0\nLANHAM  L AE1 - N AH0 M\nLANI  L AA1 - N IY0\nLANIER  L AH0 - N IH1 R\nLANIGAN  L AE1 - N IH0 - G AH0 N\nLANING  L EY1 - N IH0 NG\nLANINGHAM  L AE1 - N IH0 NG - HH AE2 M\nLANIUS  L EY1 - N IY0 - IH0 S\nLANK  L AE1 NG K\nLANKA  L AE1 NG - K AH0\nLANKA'S  L AE1 NG - K AH0 Z\nLANKAN  L AE1 NG - K AH0 N\nLANKANS  L AE1 NG - K AH0 N Z\nLANKFORD  L AE1 NG K - F ER0 D\nLANKTREE  L AE1 NG K - T R IY2\nLANKY  L AE1 NG - K IY0\nLANMAN  L AE1 N - M AH0 N\nLANN  L AE1 N\nLANNA  L AE1 - N AH0\nLANNAN  L AE1 - N AH0 N\nLANNEN  L AE1 - N AH0 N\nLANNERS  L AE1 - N ER0 Z\nLANNI  L AE1 - N IY0\nLANNING  L AE1 - N IH0 NG\nLANNO  L AE1 - N OW0\nLANNO'S  L AE1 - N OW0 Z\nLANNOM  L AE1 - N AH0 M\nLANNON  L AE1 - N AH0 N\nLANNY  L AE1 - N IY0\nLANO  L AA1 - N OW0\nLANOLIN  L AE1 - N AH0 - L AH0 N\nLANOLIN(2)  L AE1 - N AH0 - L IH0 N\nLANOUE  L AE1 - N UW0 - EY2\nLANOUETTE  L AE1 - N UW0 - EH0 T\nLANPHEAR  L AE1 N - F IH2 R\nLANPHER  L AE1 N - F ER0\nLANPHERE  L AE1 N - F IH2 R\nLANPHIER  L AE1 N - F IH0 R\nLANSBERRY  L AE1 N Z - B EH2 - R IY0\nLANSBURY  L AE1 N Z - B ER2 - IY0\nLANSBURY'S  L AE1 N Z - B ER2 - IY0 Z\nLANSDALE  L AE1 N Z - D EY2 L\nLANSDELL  L AE1 N Z - D AH0 L\nLANSDOWN  L AE1 N Z - D AW0 N\nLANSDOWNE  L AE1 N S - D AW2 N\nLANSER  L AE1 N - S ER0\nLANSFORD  L AE1 N S - F ER0 D\nLANSING  L AE1 N - S IH0 NG\nLANSING'S  L AE1 N - S IH0 NG Z\nLANSKY  L AE1 N S - K IY0\nLANSTON  L AE1 N - S T AH0 N\nLANT  L AE1 N T\nLANTANA  L AE0 N - T AE1 - N AH0\nLANTER  L AE1 N - T ER0\nLANTERMAN  L AE1 N - T ER0 - M AH0 N\nLANTERN  L AE1 N - T ER0 N\nLANTERNS  L AE1 N - T ER0 N Z\nLANTHANUM  L AE1 N - TH AH0 - N AH0 M\nLANTHIER  L AE1 N - TH IY0 - ER0\nLANTING  L AE1 N - T IH0 NG\nLANTIS  L AA1 N - T IH0 S\nLANTOS  L AE1 N - T OW0 S\nLANTRIP  L AE1 N - T R IH0 P\nLANTRY  L AE1 N - T R IY0\nLANTZ  L AE1 N T S\nLANTZY  L AE1 N T - Z IY0\nLANUM  L AE1 - N AH0 M\nLANVIN  L AE1 N - V IH0 N\nLANYARD  L AE1 N - Y ER0 D\nLANYI  L AA1 N - Y IY0\nLANYON  L AE1 - N Y AH0 N\nLANZ  L AE1 N Z\nLANZA  L AE1 N - Z AH0\nLANZELOTTI  L AE2 N - Z AH0 - L AA1 - T IY0\nLANZER  L AE1 N - Z ER0\nLANZET  L AE1 N - Z AH0 T\nLANZI  L AE1 N - Z IY0\nLANZILLO  L AE2 N - Z IH1 - L OW0\nLANZO  L AE1 N - Z OW0\nLAO  L AW1\nLAOS  L AA1 - OW0 S\nLAOS(2)  L AW1 S\nLAOS(3)  L EY1 - OW0 S\nLAOTIAN  L EY0 - OW1 - SH AH0 N\nLAOTIAN(2)  L AA0 - OW1 - SH AH0 N\nLAOTIAN(3)  L AW1 - SH AH0 N\nLAP  L AE1 P\nLAPAGE  L AA1 - P IH0 JH\nLAPAGLIA  L AA0 - P AA1 G - L IY0 - AH0\nLAPALME  L AA0 - P AA1 L - M IY0\nLAPAN  L AH0 - P AE1 N\nLAPAROSCOPIC  L AE2 - P ER0 - AA1 - S K AH0 - P IH0 K\nLAPAROSCOPIC(2)  L AE2 - P R AH0 - S K AA1 - P IH0 K\nLAPAROSCOPY  L AE2 - P ER0 - AA1 - S K AH0 - P IY0\nLAPAROSCOPY(2)  L AE1 - P R AH0 - S K AH0 - P IY0\nLAPD  EH1 - L EY1 - P IY1 - D IY1\nLAPD'S  EH1 - L EY1 - P IY1 - D IY1 Z\nLAPDOG  L AE1 P - D AO2 G\nLAPE  L EY1 P\nLAPEL  L AH0 - P EH1 L\nLAPELS  L AH0 - P EH1 L Z\nLAPENNA  L AA0 - P EH1 - N AH0\nLAPENTA  L AA0 - P EH1 N - T AH0\nLAPERLE  L AE1 - P ER0 - AH0 L\nLAPEYROUSE  L AE1 - P IH0 - R UW0 S\nLAPHAM  L AE1 - F AH0 M\nLAPIANA  L AA0 - P IY0 - AE1 - N AH0\nLAPIDARY  L AE1 - P AH0 - D EH2 - R IY0\nLAPIDES  L AH0 - P AY1 D Z\nLAPIDUS  L AE1 - P IH0 - D IH0 S\nLAPIDUS(2)  L AH0 - P IY1 - D AH0 S\nLAPIER  L EY1 - P IY0 - ER0\nLAPIERRE  L AE1 - P IY0 - EH0 R\nLAPIN  L AE1 - P IH0 N\nLAPINE  L AA0 - P IY1 - N IY0\nLAPINSKI  L AH0 - P IH1 N - S K IY0\nLAPINSKY  L AH0 - P IH1 N - S K IY0\nLAPKA  L AA1 P - K AH0\nLAPLACA  L AH0 - P L AA1 - K AH0\nLAPLAND  L AE1 P - L AE2 N D\nLAPLANT  L AH0 - P L AO1 N T\nLAPLANTE  L AH0 - P L AA1 N - T IY0\nLAPLUME  L AH0 - P L UW1 M\nLAPOINT  L AH0 - P OY1 N T\nLAPOINTE  L AH0 - P OY1 N T\nLAPOLLA  L AH0 - P OW1 - L AH0\nLAPORTA  L AH0 - P AO1 R - T AH0\nLAPORTE  L AH0 - P AO1 R T\nLAPP  L AE1 P\nLAPPE  L AE1 P\nLAPPED  L AE1 P T\nLAPPEN  L AE1 - P AH0 N\nLAPPIN  L AH0 - P AE1 N\nLAPPING  L AE1 - P IH0 NG\nLAPPS  L AE1 P S\nLAPRADE  L AA0 - P R AA1 - D IY0\nLAPRAIRIE  L AH0 - P R EH1 - R IY0\nLAPRE  L EY1 - P ER0\nLAPRISE  L AA1 - P R AY0 Z\nLAPS  L AE1 P S\nLAPSE  L AE1 P S\nLAPSED  L AE1 P S T\nLAPSES  L AE1 P - S IH0 Z\nLAPSING  L AE1 P - S IH0 NG\nLAPSLEY  L AE1 P S - L IY0\nLAPTOP  L AE1 P - T AA2 P\nLAPTOPS  L AE1 P - T AA2 P S\nLAR  L AA1 R\nLARA  L AA1 - R AH0\nLARABEE  L AE1 - R AH0 - B IY0\nLARAIA  L AA0 - R AA1 - Y AH0\nLARAINE  L ER0 - EY1 N\nLARAMEE  L AE1 - R AH0 - M IY0\nLARAMIE  L EH1 - R AH0 - M IY0\nLARAMORE  L AE1 - R AH0 - M AO2 R\nLARAWAY  L AE1 - R AH0 - W EY2\nLARCENOUS  L AA1 R - S AH0 - N AH0 S\nLARCENY  L AA1 R - S AH0 - N IY0\nLARCH  L AA1 R CH\nLARCHE  L AA1 R - CH IY0\nLARCHMONT  L AA1 R CH - M AA2 N T\nLARCHMONT'S  L AA1 R CH - M AA2 N T S\nLARCO  L AA1 R - K OW2\nLARCOM  L AA1 R - K AA2 M\nLARCOM(2)  L AA1 R - K AH0 M\nLARD  L AA1 R D\nLARDED  L AA1 R - D IH0 D\nLARDER  L AA1 R - D ER0\nLARDNER  L AA1 R D - N ER0\nLARE  L EH1 R\nLAREAU  L ER0 - OW1\nLAREDO  L ER0 - EY1 - D OW0\nLAREINA  L AA0 - R EY0 - IY1 - N AH0\nLARENA  L AA0 - R EH1 - N AH0\nLAREW  L AE1 - R UW0\nLARGE  L AA1 R JH\nLARGELY  L AA1 R JH - L IY0\nLARGEN  L AA1 R - G AH0 N\nLARGENESS  L AA1 R JH - N IH0 S\nLARGENT  L AA1 R - JH AH0 N T\nLARGER  L AA1 R - JH ER0\nLARGESS  L AA1 R - JH AH0 S\nLARGESSE  L AA0 R - G EH1 S\nLARGEST  L AA1 R - JH AH0 S T\nLARGO  L AA1 R - G OW0\nLARIAT  L EH1 - R IY0 - AH0 T\nLARICCIA  L AA0 - R IY1 - CH AH0\nLARIJANI  L EH2 - R IH0 - JH AA1 - N IY0\nLARIMER  L AE1 - R IH0 - M ER0\nLARIMORE  L AA0 - R IY1 - M AO0 R\nLARINA  L AA0 - R IY1 - N AH0\nLARINE  L AA0 - R IY1 - N IY0\nLARIOS  L AA0 - R IY1 - OW0 Z\nLARISCY  L ER0 - IH1 S - K IY0\nLARISON  L AE1 - R IH0 - S AH0 N\nLARISSA  L AA0 - R IY1 - S AH0\nLARIVEE  L AE1 - R IH0 - V IY0\nLARIVIERE  L AE1 - R IH0 - V IY0 - EH0 R\nLARIZZA  L ER0 - IH1 - Z AH0\nLARK  L AA1 R K\nLARKE  L AA1 R K\nLARKEY  L AA1 R - K IY0\nLARKIN  L AA1 R - K IH0 N\nLARKINS  L AA1 R - K IH0 N Z\nLARKS  L AA1 R K S\nLARKSPUR  L AA1 R K - S P ER2\nLARMER  L AA1 R - M ER0\nLARMON  L AA1 R - M AH0 N\nLARMORE  L AA1 R - M AO0 R\nLARNED  L AA1 R N D\nLARNER  L AA1 R - N ER0\nLAROCCA  L AA0 - R OW1 - K AH0\nLAROCCO  L AA0 - R OW1 - K OW0\nLAROCHE  L AA0 - R OW1 SH\nLAROCHE'S  L AA0 - R OW1 - SH IH0 Z\nLAROCHE(2)  L ER0 - OW1 SH\nLAROCHELLE  L AE1 - R AH0 - SH AH0 L\nLAROCK  L AE1 - R AH0 K\nLAROCQUE  L ER0 - OW1 K\nLAROE  L AE1 - R OW0\nLAROQUE  L ER0 - OW1 K\nLAROSA  L AA0 - R OW1 - S AH0\nLAROSE  L AA0 - R OW1 - S IY0\nLAROSIERE  L AA0 - R OW0 - S Y EH1 R\nLAROUCHE  L AA0 - R UW1 SH\nLAROUX  L ER0 - UW1\nLAROWE  L AE1 - R AW0\nLARRABEE  L AE1 - R AH0 - B IY0\nLARRANCE  L AE1 - R AH0 N S\nLARREA  L AE1 - R IY0 - AH0\nLARRICK  L AE1 - R IH0 K\nLARRIMORE  L AA0 - R IY1 - M AO0 R\nLARRISON  L AE1 - R IH0 - S AH0 N\nLARRIVEE  L AE1 - R IH0 - V IY0\nLARROQUETTE  L AA2 - R OW0 - K EH1 T\nLARROQUETTE'S  L AA2 - R OW0 - K EH1 T S\nLARROW  L AE1 - R OW0\nLARRY  L EH1 - R IY0\nLARRY'S  L EH1 - R IY0 Z\nLARS  L AA1 R Z\nLARSEN  L AA1 R - S AH0 N\nLARSH  L AA1 R SH\nLARSON  L AA1 R - S AH0 N\nLARSSON  L AA1 R - S AH0 N\nLARUE  L ER0 - UW1\nLARUSO  L AA0 - R UW1 - S OW0\nLARUSSA  L AA0 - R UW1 - S AH0\nLARUSSO  L AA0 - R UW1 - S OW0\nLARVA  L AA1 R - V AH0\nLARVAE  L AA1 R - V IY0\nLARVAL  L AA1 R - V AH0 L\nLARY  L EH1 - R IY0\nLARYNGEAL  L ER0 - IH1 N - JH IY0 - AH0 L\nLARYNGITIS  L EH2 - R AH0 N - JH AY1 - T AH0 S\nLARYNX  L EH1 - R IH0 NG K S\nLARZELERE  L ER0 - Z EH1 - L ER0\nLAS  L AA1 S\nLAS(2)  EH1 - L EY1 - EH1 S\nLASAGNA  L AA0 - S AA1 - N Y AH0\nLASAGNA(2)  L AH0 - Z AA1 - N Y AH0\nLASALA  L AA0 - S AA1 - L AH0\nLASALLE  L AH0 - S AE1 L\nLASATER  L AE1 - S EY0 - T ER0\nLASCA  L AA1 S - K AH0\nLASCALA  L AA0 - S K AA1 - L AH0\nLASCH  L AE1 SH\nLASCIVIOUS  L AH0 - S IH1 - V IY0 - AH0 S\nLASCO  L AA1 - S K OW0\nLASCOLA  L AA0 - S K OW1 - L AH0\nLASE  L EY1 Z\nLASECKI  L AH0 - S EH1 T S - K IY0\nLASEK  L AA1 - S EH0 K\nLASER  L EY1 - Z ER0\nLASER'S  L EY1 - Z ER0 Z\nLASERS  L EY1 - Z ER0 Z\nLASERSONIC  L EY0 - Z ER0 - S AA1 - N IH0 K\nLASERSONICS  L EY0 - Z ER0 - S AA1 - N IH0 K S\nLASETER  L AE1 - S IY0 - T ER0\nLASETER(2)  L AE1 - S IH0 - T ER0\nLASH  L AE1 SH\nLASHBROOK  L AE1 SH - B R UH2 K\nLASHED  L AE1 SH T\nLASHER  L AE1 - SH ER0\nLASHES  L AE1 - SH IH0 Z\nLASHING  L AE1 - SH IH0 NG\nLASHINGS  L AE1 - SH IH0 NG Z\nLASHLEE  L AE1 SH - L IY2\nLASHLEY  L AE1 SH - L IY0\nLASHOMB  L AE1 - SH AH0 M\nLASHUA  L AE1 - SH UW0 - AE0\nLASHWAY  L AE1 SH - W EY2\nLASITER  L AE1 - S AY0 - T ER0\nLASK  L AE1 S K\nLASKA  L AA1 S - K AH0\nLASKE  L EY1 S K\nLASKER  L AE1 - S K ER0\nLASKEY  L AE1 S - K IY0\nLASKI  L AA1 S - K IY0\nLASKIN  L AE1 - S K IH0 N\nLASKO  L AE1 S - K OW0\nLASKOWSKI  L AH0 S K - AO1 F S - K IY0\nLASKY  L AE1 S - K IY0\nLASLEY  L AE1 S - L IY0\nLASLO  L AA1 S - L OW0\nLASMO  L AE1 S - M OW0\nLASORDA  L AH0 - S AO1 R - D AH0\nLASORSA  L AA0 - S AO1 R - S AH0\nLASOTA  L AA0 - S OW1 - T AH0\nLASPINA  L AA0 S - P IY1 - N AH0\nLASS  L AE1 S\nLASSA  L AA1 - S AH0\nLASSEIGNE  L AH0 - S EY1 N Y\nLASSEN  L AE1 - S AH0 N\nLASSER  L AE1 - S ER0\nLASSETER  L AE1 - S IY0 - T ER0\nLASSETTER  L AE1 - S IH0 - T ER0\nLASSIE  L AE1 - S IY0\nLASSILA  L AA0 - S IY1 - L AH0\nLASSITER  L AE1 - S AY0 - T ER0\nLASSMAN  L AE1 S - M AH0 N\nLASSNER  L AE1 S - N ER0\nLASSO  L AE1 - S OW0\nLASSWELL  L AE1 S - W EH2 L\nLAST  L AE1 S T\nLAST'S  L AE1 S T S\nLAST(2)  L AO1 S T\nLAST(3)  L AE1 S\nLASTED  L AE1 - S T AH0 D\nLASTED(2)  L AE1 - S T IH0 D\nLASTER  L AE1 - S T ER0\nLASTEST  L AE1 - S T AH0 S T\nLASTING  L AE1 - S T IH0 NG\nLASTINGER  L AE1 - S T IH0 - NG ER0\nLASTLY  L AE1 S T - L IY0\nLASTRA  L AE1 S - T R AH0\nLASTRAPES  L AA0 S - T R AA1 - P EH0 S\nLASTS  L AE1 S T S\nLASUMMA  L AH0 - S UW1 - M AH0\nLASURE  L AA1 - ZH ER0\nLASWELL  L AE1 S - W EH2 L\nLASZLO  L AE1 Z - L OW0\nLAT  L AA1 T\nLAT(2)  L AE1 T\nLAT-LON  L AE1 T - L AA1 N\nLAT-LONS  L AE1 T - L AA1 N Z\nLATA  L AA1 - T AH0\nLATAIF  L AA0 - T EY1 F\nLATANZE  L AH0 - T AA1 N - Z EY2\nLATASHA  L AH0 - T AA1 - SH AH0\nLATCH  L AE1 CH\nLATCHAW  L AE1 - CH AO0\nLATCHED  L AE1 CH T\nLATCHES  L AE1 - CH AH0 Z\nLATCHES(2)  L AE1 - CH IH0 Z\nLATCHFORD  L AE1 CH - F ER0 D\nLATCHING  L AE1 - CH IH0 NG\nLATCHKEY  L AE1 CH - K IY2\nLATE  L EY1 T\nLATECOMER  L EY1 T - K AH0 - M ER0\nLATECOMERS  L EY1 T - K AH0 - M ER0 Z\nLATELIES  L EY1 T - L IY0 Z\nLATELLA  L AA0 - T EH1 - L AH0\nLATELY  L EY1 T - L IY0\nLATENCY  L EY1 - T AH0 N - S IY0\nLATENDRESSE  L AE1 - T IH0 N - D R EH0 S\nLATENESS  L EY1 T - N AH0 S\nLATENT  L EY1 - T AH0 N T\nLATER  L EY1 - T ER0\nLATERAL  L AE1 - T ER0 - AH0 L\nLATERITES  L AE1 - T ER0 - AY2 T S\nLATERRIERE  L AA0 - T EH2 - R Y EH1 R\nLATERZA  L AA0 - T EH1 R - Z AH0\nLATEST  L EY1 - T AH0 S T\nLATEX  L EY1 - T EH2 K S\nLATEXES  L EY1 - T EH0 K - S AH0 Z\nLATH  L AE1 TH\nLATHAM  L AE1 - TH AH0 M\nLATHAM'S  L AE1 - TH AH0 M Z\nLATHAN  L AE1 - TH AH0 N\nLATHE  L EY1 DH\nLATHEM  L AE1 - TH IH0 M\nLATHER  L AE1 - DH ER0\nLATHERS  L AE1 - DH ER0 Z\nLATHES  L EY1 DH Z\nLATHON  L AE1 - TH AH0 N\nLATHOURIS  L AH0 - TH UW1 - R IH0 S\nLATHROP  L AE1 TH - R AH0 P\nLATIGO  L AH0 - T IY1 - G OW0\nLATIMER  L AE1 - T AH0 - M ER0\nLATIMORE  L AA0 - T IY1 - M AO0 R\nLATIN  L AE1 - T AH0 N\nLATINA  L AA0 - T IY1 - N AH0\nLATINA(2)  L AH0 - T IY1 - N AH0\nLATINATE  L AE1 - T AH0 - N EY2 T\nLATINI  L AA0 - T IY1 - N IY0\nLATINO  L AA0 - T IY1 - N OW0\nLATINO(2)  L AH0 - T IY1 - N OW0\nLATINOS  L AA0 - T IY1 - N OW0 S\nLATINS  L AE1 - T AH0 N Z\nLATIOLAIS  L AE1 - T IY0 - AH0 - L EY0\nLATISHA  L AH0 - T IH1 - SH AH0\nLATITUDE  L AE1 - T AH0 - T UW2 D\nLATITUDES  L AE1 - T AH0 - T UW2 D Z\nLATITUDINAL  L AE2 - T AH0 - T UW1 - D AH0 - N AH0 L\nLATKA  L AA1 T - K AH0\nLATKAS  L AA1 T - K AH0 Z\nLATNER  L AE1 T - N ER0\nLATO  L AA1 - T OW0\nLATON  L AE1 - T AH0 N\nLATONA  L AA0 - T OW1 - N AH0\nLATONIA  L AA0 - T OW1 - N IY0 - AH0\nLATORRE  L AA0 - T AO1 - R IY0\nLATOUR  L AH0 - T UH1 R\nLATOURETTE  L AE1 - T UH0 - R EH0 T\nLATOYA  L AH0 - T OY1 - AH0\nLATOYA'S  L AH0 - T OY1 - AH0 Z\nLATRINE  L AH0 - T R IY1 N\nLATRINES  L AH0 - T R IY1 N Z\nLATROBE  L AA0 T - R OW1 B\nLATRONE  L AH0 - T R OW1 N\nLATS  L AA1 T S\nLATS(2)  L AE1 T S\nLATSCH  L AE1 CH\nLATSHAW  L AE1 - CH AO2\nLATSON  L AE1 T - S AH0 N\nLATTA  L AE1 - T AH0\nLATTANZI  L AA0 - T AA1 N - Z IY0\nLATTANZIO  L AA0 - T AA1 N - Z IY0 - OW0\nLATTE  L AA1 - T EY2\nLATTER  L AE1 - T ER0\nLATTER'S  L AE1 - T ER0 Z\nLATTICE  L AE1 - T AH0 S\nLATTICEWORK  L AE1 - T AH0 S - W ER2 K\nLATTIMER  L AE1 - T AH0 - M ER0\nLATTIMORE  L AA0 - T IY1 - M AO0 R\nLATTIN  L AE1 - T IH0 N\nLATTNER  L AE1 T - N ER0\nLATTY  L AE1 - T IY0\nLATULIPPE  L AA0 - T UW0 - L IY1 - P IY0\nLATVALA  L AA0 T - V AA1 - L AH0\nLATVIA  L AE1 T - V IY0 - AH0\nLATVIA'S  L AE1 T - V IY0 - AH0 Z\nLATVIAN  L AE1 T - V IY0 - AH0 N\nLATVIANS  L AE1 T - V IY0 - AH0 N Z\nLATZ  L AE1 T S\nLATZOFF  L AE1 T - Z AO0 F\nLATZOFF(2)  L AE1 T - S AO0 F\nLAU  L AW1\nLAUB  L AO1 B\nLAUBACH  L AW1 - B AA2 K\nLAUBACHER  L AW1 - B AA2 - K ER0\nLAUBE  L AO1 B\nLAUBENSTEIN  L AW1 - B AH0 N - S T AY0 N\nLAUBENSTEIN(2)  L AW1 - B AH0 N - S T IY0 N\nLAUBENTHAL  L AW1 - B IH0 N - TH AH0 L\nLAUBER  L AW1 - B ER0\nLAUBHAN  L AW1 B - HH AH0 N\nLAUBSCHER  L AW1 B - SH ER0\nLAUCH  L AA1 CH\nLAUCK  L AO1 K\nLAUD  L AO1 D\nLAUDABLE  L AO1 - D AH0 - B AH0 L\nLAUDANUM  L AO1 - D AH0 - N AH0 M\nLAUDATORY  L AO1 - D AH0 - T AO2 - R IY0\nLAUDE  L AO1 D\nLAUDED  L AO1 - D IH0 D\nLAUDENSLAGER  L AW1 - D IH0 N - S L EY0 - G ER0\nLAUDER  L AO1 - D ER0\nLAUDER(2)  L AW1 - D ER0\nLAUDERBACK  L AW1 - D ER0 - B AE0 K\nLAUDERBAUGH  L AO0 - D ER1 - B AO0\nLAUDERDALE  L AO1 - D ER0 - D EY2 L\nLAUDICINA  L AO0 - D IY0 - CH IY1 - N AH0\nLAUDING  L AO1 - D IH0 NG\nLAUDISE  L AO1 - D AY2 Z\nLAUDON  L AO1 - D AH0 N\nLAUDS  L AO1 D Z\nLAUE  L AW1 - IY0\nLAUER  L AW1 - ER0\nLAUERMAN  L AW1 - ER0 - M AH0 N\nLAUF  L AO1 F\nLAUFENBERG  L AW1 - F AH0 N - B ER0 G\nLAUFER  L AO1 - F ER0\nLAUFFER  L AO1 - F ER0\nLAUGH  L AE1 F\nLAUGHABLE  L AE1 - F AH0 - B AH0 L\nLAUGHED  L AE1 F T\nLAUGHER  L AA1 - K ER0\nLAUGHERY  L AE1 - F ER0 - IY0\nLAUGHING  L AE1 - F IH0 NG\nLAUGHINGHOUSE  L AE1 - F IH0 NG - HH AW2 S\nLAUGHINGLY  L AE1 - F IH0 NG - L IY0\nLAUGHINGSTOCK  L AE1 - F IH0 NG - S T AA2 K\nLAUGHLER  L AE1 F - L ER0\nLAUGHLIN  L AA1 K - L IH0 N\nLAUGHLIN(2)  L AA1 F - L IH0 N\nLAUGHMAN  L AE1 F - M AH0 N\nLAUGHNER  L AE1 F - N ER0\nLAUGHREY  L AE1 - F R IY0\nLAUGHRIDGE  L AE1 - F R IH2 JH\nLAUGHS  L AE1 F S\nLAUGHTER  L AE1 F - T ER0\nLAUGHTON  L AO1 - T AH0 N\nLAUINGER  L AW1 - IH0 - NG ER0\nLAUMAN  L AW1 - M AH0 N\nLAUMANN  L AW1 - M AH0 N\nLAUN  L AO1 N\nLAUNCELOT  L AO1 N - S IH0 - L AA2 T\nLAUNCH  L AO1 N CH\nLAUNCHED  L AO1 N CH T\nLAUNCHER  L AO1 N - CH ER0\nLAUNCHERS  L AO1 N - CH ER0 Z\nLAUNCHES  L AO1 N - CH AH0 Z\nLAUNCHES(2)  L AO1 N - CH IH0 Z\nLAUNCHING  L AO1 N - CH IH0 NG\nLAUNCHINGS  L AO1 N - CH IH0 NG Z\nLAUNDER  L AO1 N - D ER0\nLAUNDERED  L AO1 N - D ER0 D\nLAUNDERER  L AO1 N - D ER0 - ER0\nLAUNDERERS  L AO1 N - D ER0 - ER0 Z\nLAUNDERING  L AO1 N - D ER0 - IH0 NG\nLAUNDRIES  L AO1 N - D R IY0 Z\nLAUNDROMAT  L AO1 N - D R AH0 - M AE2 T\nLAUNDRY  L AO1 N - D R IY0\nLAUNER  L AO1 - N ER0\nLAUNIUS  L AW1 - N IY0 - IH0 S\nLAUPER  L AW1 - P ER0\nLAUR  L AO1 R\nLAURA  L AO1 - R AH0\nLAURA'S  L AO1 - R AH0 Z\nLAURANCE  L AO1 - R AH0 N S\nLAURDAN  L AO1 R - D AH0 N\nLAURE  L AO1 R\nLAUREANO  L AO0 - R IY1 - N OW0\nLAUREATE  L AO1 - R IY0 - AH0 T\nLAUREATES  L AO1 - R IY0 - AH0 T S\nLAUREEN  L AO0 - R IY1 N\nLAUREL  L AO1 - R AH0 L\nLAUREL'S  L AO1 - R AH0 L Z\nLAURELS  L AO1 - R AH0 L Z\nLAUREN  L AO1 - R AH0 N\nLAURENA  L AO0 - R EH1 - N AH0\nLAURENCE  L AO1 - R AH0 N S\nLAURENE  L AO0 - R IY1 N\nLAURENS  L AO1 - R AH0 N Z\nLAURENT  L AO1 - R AH0 N T\nLAURENTIAN  L AO0 - R EH1 N - SH AH0 N\nLAURENTIIS  L AO1 - R AH0 N - T IY2 Z\nLAURENZ  L AW1 - R EY0 N Z\nLAURETARIAN  L AO2 - R IH0 - T EH1 - R IY0 - AH0 N\nLAURETTA  L ER0 - EH1 - T AH0\nLAURETTE  L AO0 - R EH1 T\nLAUREY  L AO1 - R IY0\nLAURI  L AO1 - R IY0\nLAURI(2)  L AA1 - R IY0\nLAURIA  L AO1 - R IY0 - AH0\nLAURIAT'S  L AA1 - R IY0 - IH0 T S\nLAURIATS  L AA1 - R IY0 - IH0 T S\nLAURICE  L AO1 - R IH0 S\nLAURICELLA  L AO2 - R IH0 - S EH1 - L AH0\nLAURICH  L AW1 - R IH0 K\nLAURIDSEN  L AO0 - R IH1 D - S AH0 N\nLAURIE  L AO1 - R IY0\nLAURIE'S  L AO1 - R IY0 Z\nLAURIE'S(2)  L AA1 - R IY0 Z\nLAURIE(2)  L AA1 - R IY0\nLAURIN  L AO1 - R IH0 N\nLAURINO  L AO0 - R IY1 - N OW0\nLAURITSEN  L AW1 - R IH0 T - S AH0 N\nLAURITSEN(2)  L AA0 - R IY1 T - S AH0 N\nLAURITZEN  L AW1 - R IH0 T - Z AH0 N\nLAURITZEN(2)  L AA0 - R IY1 T - Z AH0 N\nLAURO  L AO1 - R OW0\nLAURSEN  L AW1 R - S AH0 N\nLAURY  L AO1 - R IY0\nLAUSANNE  L AO2 - S AE1 N\nLAUSCH  L AW1 SH\nLAUT  L AO1 T\nLAUTEN  L AW1 - T AH0 N\nLAUTENBACH  L AW1 - T AH0 N - B AA0 K\nLAUTENBERG  L AW1 - T AH0 N - B ER0 G\nLAUTENSCHLAGER  L AW1 - T IH0 N - SH L EY0 - G ER0\nLAUTER  L AW1 - T ER0\nLAUTERBACH  L AW1 - T ER0 - B AA0 K\nLAUTH  L AO1 TH\nLAUTNER  L AW1 T - N ER0\nLAUTZENHEISER  L AW1 T - Z AH0 N - HH AY0 - Z ER0\nLAUVER  L AW1 - V ER0\nLAUX  L AO1 K S\nLAUZON  L AW1 - Z AH0 N\nLAVA  L AA1 - V AH0\nLAVAL  L AH0 - V AA1 L\nLAVALLE  L AA0 - V AA1 - L IY0\nLAVALLEE  L AE1 - V AH0 - L IY0\nLAVALLEY  L AE1 - V AH0 - L IY0\nLAVAN  L EY1 - V AH0 N\nLAVARNWAY  L AH0 - V AA1 R N - W EY0\nLAVATORIES  L AE1 - V AH0 - T AO2 - R IY0 Z\nLAVATORY  L AE1 - V AH0 - T AO2 - R IY0\nLAVE  L EY1 V\nLAVEAU  L AH0 - V OW1\nLAVECCHIA  L AA0 - V EH1 - K IY0 - AH0\nLAVEDA  L AA0 - V EY1 - D AH0\nLAVELL  L AA0 - V EY1 L\nLAVELLE  L AH0 - V EH1 L\nLAVELY  L EY1 V - L IY0\nLAVEN  L EY1 - V AH0 N\nLAVENDER  L AE1 - V AH0 N - D ER0\nLAVENTHOL  L EY1 - V AH0 N - TH AA0 L\nLAVENTURE  L AA0 - V EH1 N - CH ER0\nLAVER  L EY1 - V ER0\nLAVERDIERE  L AA0 - V ER0 - D IH1 - R IY0\nLAVERDURE  L AA0 - V ER0 - D UH1 - R IY0\nLAVERE  L AA0 - V EH1 - R EY0\nLAVERGNE  L AH0 - V ER1 N Y\nLAVERNE  L AH0 - V ER1 N\nLAVERS  L EY1 - V ER0 Z\nLAVERTY  L AE1 - V ER0 - T IY0\nLAVERY  L EY1 - V ER0 - IY0\nLAVETTA  L AA0 - V EH1 - T AH0\nLAVETTE  L AH0 - V EH1 T\nLAVEY  L EY1 - V IY0\nLAVI  L EY1 - V IY0\nLAVIE  L EY1 - V IY0\nLAVIE(2)  L AH0 - V IY1\nLAVIGNE  L AH0 - V IH1 N Y\nLAVIN  L AE1 - V IH0 N\nLAVINA  L AA0 - V IY1 - N AH0\nLAVINDER  L AE1 - V IH0 N - D ER0\nLAVINE  L AA0 - V IY1 - N IY0\nLAVINIA  L AH0 - V IH1 N - Y AH0\nLAVIOLETTE  L AE2 - V IY0 - OW0 - L EH1 T\nLAVIS  L AE1 - V IH0 S\nLAVISH  L AE1 - V IH0 SH\nLAVISHED  L AE1 - V IH0 SH T\nLAVISHES  L AE1 - V IH0 - SH AH0 Z\nLAVISHING  L AE1 - V IH0 - SH IH0 NG\nLAVISHLY  L AE1 - V IH0 SH - L IY0\nLAVOIE  L AH0 V - W AA1\nLAVORGNA  L AH0 - V AO1 R - N AH0\nLAVORO  L AH0 - V AO1 - R OW0\nLAVOY  L AH0 - V OY1\nLAVY  L EY1 - V IY0\nLAW  L AO1\nLAW'S  L AO1 Z\nLAW(2)  L AA1\nLAWALL  L AW1 - AH0 L\nLAWARE  L AH0 - W EH1 R\nLAWBREAKER  L AO1 - B R EY2 - K ER0\nLAWBREAKERS  L AO1 - B R EY2 - K ER0 Z\nLAWBREAKING  L AO1 - B R EY2 - K IH0 NG\nLAWES  L AO1 Z\nLAWFORD  L AO1 - F ER0 D\nLAWFUL  L AO1 - F AH0 L\nLAWFULLY  L AO1 - F AH0 - L IY0\nLAWHEAD  L AO1 - HH EH2 D\nLAWHON  L AO1 - HH AH0 N\nLAWHORN  L AE1 - W ER0 N\nLAWHORNE  L AE1 - W ER0 N\nLAWING  L AO1 - IH0 NG\nLAWLER  L AO1 - L ER0\nLAWLESS  L AO1 - L AH0 S\nLAWLESSNESS  L AO1 - L AH0 S - N AH0 S\nLAWLEY  L AO1 - L IY0\nLAWLIS  L AO1 - L IH0 S\nLAWLOR  L AO1 - L ER0\nLAWMAKER  L AO1 - M EY2 - K ER0\nLAWMAKER'S  L AO1 - M EY2 - K ER0 Z\nLAWMAKERS  L AO1 - M EY2 - K ER0 Z\nLAWMAKERS'  L AO1 - M EY1 - K ER0 Z\nLAWMAKING  L AO1 - M EY2 - K IH0 NG\nLAWMAN  L AO1 - M AH0 N\nLAWMEN  L AO1 - M EH1 N\nLAWN  L AO1 N\nLAWNER  L AO1 - N ER0\nLAWNER(2)  L AW1 - N ER0\nLAWNICZAK  L AA1 V - N IH0 - CH AE0 K\nLAWNMOWER  L AO1 N - M OW0 - ER0\nLAWNMOWERS  L AO1 N - M OW0 - ER0 Z\nLAWNS  L AO1 N Z\nLAWNSDALE  L AO1 N Z - D EY2 L\nLAWNSDALE'S  L AO1 N Z - D EY2 L Z\nLAWPLAN  L AO1 - P L AE2 N\nLAWRANCE  L AO1 - R AH0 N S\nLAWRENCE  L AO1 - R AH0 N S\nLAWRENCE'S  L AO1 - R AH0 N - S IH0 Z\nLAWRENCEBURG  L AO1 - R AH0 N S - B ER0 G\nLAWRENCEVILLE  L AO1 - R AH0 N S - V IH2 L\nLAWRENCIUM  L AO0 - R EH1 N - S IY0 - AH0 M\nLAWRENZ  L AA1 - V R IH0 N Z\nLAWRIE  L AO1 - R IY0\nLAWRY  L AO1 - R IY0\nLAWS  L AO1 Z\nLAWSHE  L AO1 SH\nLAWSON  L AO1 - S AH0 N\nLAWSON'S  L AO1 - S AH0 N Z\nLAWSUIT  L AO1 - S UW2 T\nLAWSUIT'S  L AO1 - S UW2 T S\nLAWSUITS  L AO1 - S UW2 T S\nLAWTER  L AO1 - T ER0\nLAWTHER  L AO1 - DH ER0\nLAWTON  L AO1 - T AH0 N\nLAWVER  L AO1 - V ER0\nLAWYER  L AO1 - Y ER0\nLAWYER'S  L AO1 - Y ER0 Z\nLAWYER(2)  L OY1 - ER0\nLAWYERING  L AO1 - Y ER0 - IH0 NG\nLAWYERLY  L AO1 - Y ER0 - L IY0\nLAWYERS  L AO1 - Y ER0 Z\nLAWYERS'  L AO1 - Y ER0 Z\nLAWYERS(2)  L OY1 - ER0 Z\nLAX  L AE1 K S\nLAXALT  L AE1 K - S AA0 L T\nLAXATIVE  L AE1 K - S AH0 - T IH0 V\nLAXATIVES  L AE1 K - S AH0 - T IH0 V Z\nLAXEY  L AE1 K - S IY0\nLAXITY  L AE1 K - S AH0 - T IY0\nLAXSON  L AE1 K - S AH0 N\nLAXTON  L AE1 K - S T AH0 N\nLAY  L EY1\nLAY'S  L EY1 Z\nLAY-UP  L EY1 - AH1 P\nLAYAH  L EY1 - AH0\nLAYBORNE  L EY1 - B AO2 R N\nLAYBORNE'S  L EY1 - B AO2 R N Z\nLAYCOCK  L EY1 - K AA2 K\nLAYDEN  L EY1 - D AH0 N\nLAYE  L EY1\nLAYER  L EY1 - ER0\nLAYERED  L EY1 - ER0 D\nLAYERING  L EY1 - ER0 - IH0 NG\nLAYERS  L EY1 - ER0 Z\nLAYFIELD  L EY1 - F IY2 L D\nLAYHEE  L EY1 - HH IY0\nLAYING  L EY1 - IH0 NG\nLAYLAND  L EY1 - L AH0 N D\nLAYMAN  L EY1 - M AH0 N\nLAYMAN'S  L EY1 - M AH0 N Z\nLAYMEN  L EY1 - M AH0 N\nLAYMON  L EY1 - M AH0 N\nLAYNE  L EY1 N\nLAYOFF  L EY1 - AO2 F\nLAYOFFS  L EY1 - AO2 F S\nLAYOUT  L EY1 - AW2 T\nLAYOUTS  L EY1 - AW2 T S\nLAYOVER  L EY1 - OW2 - V ER0\nLAYOVERS  L EY1 - OW2 - V ER0 Z\nLAYPEOPLE  L EY0 - P IY1 - P AH0 L\nLAYPERSON  L EY0 - P ER1 - S IH0 N\nLAYS  L EY1 Z\nLAYSON  L EY1 - Z AH0 N\nLAYTHAN  L EY1 - TH AH0 N\nLAYTON  L EY1 - T AH0 N\nLAZAR  L EY1 - Z ER0\nLAZARD  L AH0 - Z AA1 R D\nLAZARE  L AA0 - Z AA1 - R EY0\nLAZARO  L AH0 - Z AA1 - R OW0\nLAZAROFF  L AE1 - Z ER0 - AO0 F\nLAZARSKI  L AH0 - Z AA1 R S - K IY0\nLAZARUS  L AE1 - Z ER0 - AH0 S\nLAZARZ  L AA1 - Z AA0 R Z\nLAZCANO  L AA0 Z - K AA1 - N OW0\nLAZEAR  L AH0 - Z IH1 R\nLAZENBY  L AE1 - Z IH0 N - B IY0\nLAZER  L EY1 - Z ER0\nLAZERE  L AH0 - Z EY1 R\nLAZIER  L EY1 - Z IY0 - ER0\nLAZIEST  L EY1 - Z IY0 - AH0 S T\nLAZILY  L AE1 - Z AH0 - L IY0\nLAZINESS  L EY1 - Z IY0 - N AH0 S\nLAZO  L AA1 - Z OW0\nLAZOR  L AA0 - Z AO1 R\nLAZULI  L AH0 - Z UW1 - L IY0\nLAZULITE  L AE1 - Z AH0 - L AY2 T\nLAZUR  L AE1 - Z ER0\nLAZY  L EY1 - Z IY0\nLAZZARA  L AA0 T - S AA1 - R AH0\nLAZZARI  L AA0 T - S AA1 - R IY0\nLAZZARINI  L AA0 T - S AA0 - R IY1 - N IY0\nLAZZARO  L AA0 T - S AA1 - R OW0\nLAZZELL  L AE1 - Z AH0 L\nLCS  EH1 L - S IY1 - EH1 S\nLE  L AH0\nLEA  L IY1\nLEABO  L IY1 - B OW0\nLEACH  L IY1 CH\nLEACH'S  L IY1 - CH IH0 Z\nLEACHED  L IY1 CH T\nLEACHES  L IY1 - CH IH0 Z\nLEACHING  L IY1 - CH IH0 NG\nLEACHMAN  L IY1 CH - M AH0 N\nLEACHMAN'S  L IY1 CH - M AH0 N Z\nLEACOCK  L IY1 - K AA2 K\nLEAD  L EH1 D\nLEAD(2)  L IY1 D\nLEADBELLY  L EH1 D - B EH0 - L IY0\nLEADBETTER  L IY1 D - B IH0 - T ER0\nLEADBETTER(2)  L EH1 D - B IH0 - T ER0\nLEADED  L EH1 - D IH0 D\nLEADEN  L EH1 - D AH0 N\nLEADER  L IY1 - D ER0\nLEADER'S  L IY1 - D ER0 Z\nLEADERLESS  L IY1 - D ER0 - L AH0 S\nLEADERS  L IY1 - D ER0 Z\nLEADERS'  L IY1 - D ER0 Z\nLEADERSHIP  L IY1 - D ER0 - SH IH2 P\nLEADERSHIP'S  L IY1 - D ER0 - SH IH2 P S\nLEADERSHIPS  L IY1 - D ER0 - SH IH2 P S\nLEADING  L IY1 - D IH0 NG\nLEADINGHAM  L IY1 - D IH0 NG - HH AE2 M\nLEADOFF  L IY1 D - AO2 F\nLEADS  L IY1 D Z\nLEADVILLE  L EH1 D - V IH2 L\nLEADWORK  L EH1 D - W ER2 K\nLEAF  L IY1 F\nLEAFED  L IY1 F T\nLEAFHOPPER  L IY1 F - HH AA2 - P ER0\nLEAFHOPPERS  L IY1 F - HH AA2 - P ER0 Z\nLEAFING  L IY1 - F IH0 NG\nLEAFLESS  L IY1 F - L AH0 S\nLEAFLET  L IY1 F - L AH0 T\nLEAFLETS  L IY1 F - L AH0 T S\nLEAFLIKE  L IY1 F - L AY2 K\nLEAFS  L IY1 F S\nLEAFY  L IY1 - F IY0\nLEAGUE  L IY1 G\nLEAGUE'S  L IY1 G Z\nLEAGUER  L IY1 - G ER0\nLEAGUERS  L IY1 - G ER0 Z\nLEAGUES  L IY1 G Z\nLEAGUES'  L IY1 G Z\nLEAH  L IY1 - AH0\nLEAHEY  L EY1 - HH IY0\nLEAHY  L EY1 - HH IY0\nLEAK  L IY1 K\nLEAKAGE  L IY1 - K AH0 JH\nLEAKAGE(2)  L IY1 - K IH0 JH\nLEAKE  L IY1 K\nLEAKED  L IY1 K T\nLEAKER  L IY1 - K ER0\nLEAKERS  L IY1 - K ER0 Z\nLEAKEY  L IY1 - K IY0\nLEAKING  L IY1 - K IH0 NG\nLEAKS  L IY1 K S\nLEAKY  L IY1 - K IY0\nLEAL  L IY1 L\nLEALA  L IY1 - L AH0\nLEALAN  L IY1 - L AH0 N\nLEALIA  L IY1 - L IY0 - AH0\nLEALIE  L IY1 - L IY0\nLEAMAN  L IY1 - M AH0 N\nLEAMER  L IY1 - M ER0\nLEAMING  L IY1 - M IH0 NG\nLEAMON  L IY1 - M AH0 N\nLEAMY  L IY1 - M IY0\nLEAN  L IY1 N\nLEANA  L IY1 - N AH0\nLEANDER  L IY0 - AE1 N - D ER0\nLEANDRO  L IY0 - AA1 N - D R OW0\nLEANED  L IY1 N D\nLEANER  L IY1 - N ER0\nLEANERS  L IY1 - N ER0 Z\nLEANEST  L IY1 - N AH0 S T\nLEANING  L IY1 - N IH0 NG\nLEANINGS  L IY1 - N IH0 NG Z\nLEANN  L IY0 - AE1 N\nLEANS  L IY1 N Z\nLEANT  L IY1 - AH0 N T\nLEANZA  L IY0 - AE1 N - Z AH0\nLEAP  L IY1 P\nLEAPED  L EH1 P T\nLEAPED(2)  L IY1 P T\nLEAPFROG  L IY1 P - F R AO2 G\nLEAPFROGGED  L IY1 P - F R AO2 G D\nLEAPFROGGING  L IY1 P - F R AO2 - G IH0 NG\nLEAPHART  L IY1 P - HH AA2 R T\nLEAPING  L IY1 - P IH0 NG\nLEAPLEY  L IY1 P - L IY0\nLEAPS  L IY1 P S\nLEAPT  L EH1 P T\nLEAPT(2)  L IY1 P T\nLEAR  L IH1 R\nLEAR'S  L IY1 R Z\nLEARD  L ER1 D\nLEARJET  L IH1 R - JH EH2 T\nLEARN  L ER1 N\nLEARNED  L ER1 N D\nLEARNED(2)  L ER1 - N IH0 D\nLEARNER  L ER1 - N ER0\nLEARNERS  L ER1 - N ER0 Z\nLEARNING  L ER1 - N IH0 NG\nLEARNS  L ER1 N Z\nLEARNT  L ER1 N T\nLEARONAL  L IY1 - R AH0 - N AH0 L\nLEARY  L IH1 - R IY0\nLEARY'S  L IH1 - R IY0 Z\nLEAS  L IY1 Z\nLEASABLE  L IY1 - S AH0 - B AH0 L\nLEASCO  L IY1 - S K OW0\nLEASE  L IY1 S\nLEASE'S  L IY1 - S IH0 Z\nLEASEBACK  L IY1 S - B AE2 K\nLEASEBACKS  L IY1 S - B AE2 K S\nLEASED  L IY1 S T\nLEASEHOLD  L IY1 S - HH OW2 L D\nLEASER  L IY1 - S ER0\nLEASES  L IY1 - S IH0 Z\nLEASEWAY  L IY1 S - W EY2\nLEASEWAY'S  L IY1 S - W EY2 Z\nLEASH  L IY1 SH\nLEASHED  L IY1 SH T\nLEASHES  L IY1 - SH IH0 Z\nLEASING  L IY1 - S IH0 NG\nLEASING'S  L IY1 - S IH0 NG Z\nLEASK  L IY1 S K\nLEASON  L IY1 - S AH0 N\nLEAST  L IY1 S T\nLEASURE  L EH1 - ZH ER0\nLEATH  L IY1 TH\nLEATH'S  L IY1 TH S\nLEATHAM  L IY1 - TH AH0 M\nLEATHEM  L EH1 - TH IH0 M\nLEATHER  L EH1 - DH ER0\nLEATHERBACK  L EH1 - DH ER0 - B AE2 K\nLEATHERBACKS  L EH1 - DH ER0 - B AE2 K S\nLEATHERBERRY  L EH1 - DH ER0 - B EH2 - R IY0\nLEATHERBURY  L EH1 - DH ER0 - B EH2 - R IY0\nLEATHERMAN  L EH1 - DH ER0 - M AH0 N\nLEATHERS  L EH1 - DH ER0 Z\nLEATHERWOOD  L EH1 - DH ER0 - W UH2 D\nLEATHERY  L EH1 - DH ER0 - IY0\nLEATON  L IY1 - T AH0 N\nLEATRICE  L IY1 - T R IH0 S\nLEAVE  L IY1 V\nLEAVELL  L IY1 - V AH0 L\nLEAVELLE  L AH0 - V EH1 L\nLEAVEN  L EH1 - V AH0 N\nLEAVENED  L EH1 - V AH0 N D\nLEAVENING  L EH1 - V AH0 N - IH0 NG\nLEAVENS  L EH1 - V AH0 N Z\nLEAVENWORTH  L EH1 - V AH0 N - W ER2 TH\nLEAVER  L IY1 - V ER0\nLEAVER'S  L IY1 - V ER0 Z\nLEAVERTON  L IY1 - V ER0 - T AH0 N\nLEAVES  L IY1 V Z\nLEAVEY  L IY1 - V IY0\nLEAVING  L IY1 - V IH0 NG\nLEAVINGS  L IY1 - V IH0 NG Z\nLEAVINS  L IY1 - V IH0 N Z\nLEAVITT  L EH1 - V IH0 T\nLEAVY  L IY1 - V IY0\nLEAZER  L IY1 - Z ER0\nLEBANESE  L EH1 - B AH0 - N IY2 Z\nLEBANON  L EH1 - B AH0 - N AH0 N\nLEBANON'S  L EH1 - B AH0 - N AH0 N Z\nLEBAR  L IH0 - B AA1 R\nLEBARON  L AH0 - B EH1 - R AH0 N\nLEBARRON  L AH0 - B EH1 - R AH0 N\nLEBEAU  L IH0 - B OW1\nLEBECK  L IY1 - B EH0 K\nLEBED  L EH1 - B EH0 D\nLEBED'S  L EH1 - B EH0 D Z\nLEBEDA  L EY0 - B EY1 - D AH0\nLEBEGUE  L EH1 - B IH0 G\nLEBEL  L EH1 - B AH0 L\nLEBEN  L EH1 - B AH0 N\nLEBENTHAL  L EH1 - B AH0 N - TH AO2 L\nLEBER  L IY1 - B ER0\nLEBERT  L EH1 - B ER0 T\nLEBLANC  L AH0 - B L AE1 NG K\nLEBLE  L EH1 - B AH0 L\nLEBLEU  L EH1 - B L UW0\nLEBLOND  L IH0 - B L AA1 N D\nLEBO  L EY1 - B OW0\nLEBOEUF  L AH0 - B AH1 F\nLEBOLD  L EH1 - B OW0 L D\nLEBON  L EH1 - B AH0 N\nLEBOUEF  L AH0 - B AH1 F\nLEBOVITZ  L EH1 - B AH0 - V IH0 T S\nLEBOW  L AH0 - B OW1\nLEBOW'S  L AH0 - B OW1 Z\nLEBOWITZ  L EH1 - B AH0 - W IH0 T S\nLEBRECHT  L EH1 - B R IH0 K T\nLEBRETON  L EH1 - B R IH0 - T AA0 N\nLEBRON  L EH1 - B R AH0 N\nLEBRUN  L EH1 - B R AH0 N\nLEBSACK  L EH1 B - S AH0 K\nLEBUDDE  L AH0 - B AH1 D\nLECATES  L IH0 - K EY1 T S\nLECCESE  L EH0 - CH EY1 - Z IY0\nLECH  L EH1 K\nLECHER  L EH1 - CH ER0\nLECHEROUS  L EH1 - CH ER0 - AH0 S\nLECHLER  L EH1 K - L ER0\nLECHMAN  L EH1 K - M AH0 N\nLECHMERE  L EH1 K - M IH2 R\nLECHNER  L EH1 K - N ER0\nLECHTENBERG  L EH1 K - T AH0 N - B ER0 G\nLECHTERS  L EH1 K - T ER0 Z\nLECHUGA  L EH1 - CH UW0 - G AH0\nLECITHIN  L EH1 - S AH0 - TH AH0 N\nLECITHIN(2)  L EH1 - S IH0 - TH IH0 N\nLECK  L EH1 K\nLECKEY  L EH1 - K IY0\nLECKIE  L EH1 - K IY0\nLECKRONE  L EH1 - K R AH0 N\nLECLAIR  L EH1 K - L ER0\nLECLAIRE  L IH0 - K L EH1 R\nLECLERC  L AH0 K - L ER1 K\nLECLERCQ  L EH1 K - L ER0 K\nLECLERE  L EH1 K - L ER0\nLECLI  L EH1 K - L IY0\nLECLI'S  L EH1 - K L IY0 Z\nLECOCQ  L EH1 - K AH0 K\nLECOMBA  L AH0 - K AH1 M - B AH0\nLECOMPTE  L EH1 - K AH0 M P T\nLECOMTE  L IH0 - K AA1 M T\nLECONTE  L EH0 - K OW1 N - T IY0\nLECOUNT  L IH0 - K UW1 N T\nLECRONE  L EH0 - K R OW1 - N IY0\nLECROY  L EH1 K - R OY0\nLECTEC  L EH1 K - T EH2 K\nLECTER  L EH1 K - T ER0\nLECTERN  L EH1 K - T ER0 N\nLECTOR  L EH1 K - T ER0\nLECTURE  L EH1 K - CH ER0\nLECTURED  L EH1 K - CH ER0 D\nLECTURER  L EH1 K - CH ER0 - ER0\nLECTURERS  L EH1 K - CH ER0 - ER0 Z\nLECTURES  L EH1 K - CH ER0 Z\nLECTURING  L EH1 K - CH ER0 - IH0 NG\nLECUYER  L EH1 - K AY0 - ER0\nLECY  L IY1 - S IY0\nLED  L EH1 D\nLEDA  L IY1 - D AH0\nLEDAY  L IY1 - D EY0\nLEDBETTER  L EH1 D - B ER0 - T ER0\nLEDDEN  L EH1 - D AH0 N\nLEDDY  L EH1 - D IY0\nLEDEEN  L AH0 - D IY1 N\nLEDER  L EH1 - D ER0\nLEDERER  L EH1 - D ER0 - ER0\nLEDERLE  L EH1 - D ER0 - L IY0\nLEDERMAN  L IY1 - D ER0 - M AH0 N\nLEDESMA  L EH0 - D EH1 S - M AH0\nLEDET  L EH1 - D IH0 T\nLEDEZMA  L EY0 - D EY1 Z - M AH0\nLEDFORD  L EH1 D - F ER0 D\nLEDGE  L EH1 JH\nLEDGER  L EH1 - JH ER0\nLEDGERS  L EH1 - JH ER0 Z\nLEDGERWOOD  L EH1 - JH ER0 - W UH2 D\nLEDGES  L EH1 - JH IH0 Z\nLEDIN  L EH1 - D IH0 N\nLEDLOW  L EH1 D - L OW1\nLEDO  L EY1 - D OW0\nLEDONNE  L EH1 - D AH0 N\nLEDOUX  L IH0 - D UW1\nLEDVINA  L EH0 D - V IY1 - N AH0\nLEDWELL  L EH1 D - W EH1 L\nLEDWITH  L EH1 D - W IH1 TH\nLEDYARD  L EH1 D - Y ER0 D\nLEE  L IY1\nLEE'S  L IY1 Z\nLEEB  L IY1 B\nLEECE  L IY1 S\nLEECH  L IY1 CH\nLEECHES  L IY1 - CH IH0 Z\nLEECO  L IY1 - K OW0\nLEED  L IY1 D\nLEEDER  L IY1 - D ER0\nLEEDHAM  L IY1 D - HH AH0 M\nLEEDOM  L IY1 - D AH0 M\nLEEDS  L IY1 D Z\nLEEDS'S  L IY1 D - Z IH0 Z\nLEEDY  L IY1 - D IY0\nLEEK  L IY1 K\nLEEKS  L IY1 K S\nLEEMAN  L IY1 - M AH0 N\nLEEMING  L IY1 - M IH0 NG\nLEEMON  L IY1 - M AH0 N\nLEEN  L IY1 N\nLEENA  L IY1 - N AH0\nLEEP  L IY1 P\nLEEPER  L IY1 - P ER0\nLEERY  L IH1 - R IY0\nLEES  L IY1 Z\nLEESBURG  L IY1 Z - B ER0 G\nLEESE  L IY1 S\nLEESER  L IY1 - S ER0\nLEESON  L IY1 - S AH0 N\nLEESON'S  L IY1 - S AH0 N Z\nLEET  L IY1 T\nLEETCH  L IY1 CH\nLEETE  L IY1 T\nLEETH  L IY1 TH\nLEEUWEN  L UW1 - AH0 N\nLEEUWEN(2)  L Y UW1 - AH0 N\nLEEVER  L IY1 - V ER0\nLEEWARD  L IY1 - W ER0 D\nLEEWAY  L IY1 - W EY2\nLEFAUVE  L AH0 - F AA1 V\nLEFAVE  L IH0 - F EY1 V\nLEFCOURT  L EH1 F - K AO2 R T\nLEFEBER  L AH0 - F EY1 - B ER0\nLEFEBRE  L AH0 - F EY1 - B ER0\nLEFEBURE  L EH1 - F IH0 - B Y UW0 R\nLEFEBVRE  L AH0 - F EY1 - B ER0\nLEFEVER  L AH0 - F EY1 - V ER0\nLEFEVERS  L AH0 - F EY1 - V ER0 Z\nLEFEVRE  L AH0 - F EY1 - V ER0\nLEFF  L EH1 F\nLEFF'S  L EH1 F S\nLEFFEL  L EH1 - F AH0 L\nLEFFERT  L EH1 - F ER0 T\nLEFFERTS  L EH1 - F ER0 T S\nLEFFEW  L EH1 - F Y UW0\nLEFFINGWELL  L EH1 - F IH0 NG - G W EH0 L\nLEFFLER  L EH1 F - L ER0\nLEFKOWITZ  L EH1 F - K AH0 - W IH0 T S\nLEFLER  L EH1 F - L ER0\nLEFLORE  L EH1 F - L ER0\nLEFORT  L EH1 - F ER0 T\nLEFRAK  L EH1 - F R AE0 K\nLEFRANCOIS  L EH1 - F R AH0 N - K W AA0\nLEFRERE  L AH0 - F R EH1 R\nLEFT  L EH1 F T\nLEFT'S  L EH1 F T S\nLEFT-BRACE  L EH1 F T - B R EY1 S\nLEFT-WINGER  L EH2 F T - W IH1 - NG ER0\nLEFT-WINGERS  L EH1 F T - W IH1 - NG ER0 Z\nLEFTHAND  L EH0 F T - HH AE1 N D\nLEFTHANDED  L EH0 F T - HH AE1 N - D IH0 D\nLEFTIES  L EH1 F - T IY0 Z\nLEFTISM  L EH1 F - T IH2 - Z AH0 M\nLEFTIST  L EH1 F - T IH0 S T\nLEFTISTS  L EH1 F - T IH0 S T S\nLEFTISTS(2)  L EH1 F - T IH0 S S\nLEFTISTS(3)  L EH1 F - T IH0 S\nLEFTON  L EH1 F - T AH0 N\nLEFTOVER  L EH1 F T - OW2 - V ER0\nLEFTOVERS  L EH1 F T - OW2 - V ER0 Z\nLEFTRIDGE  L EH1 F - T R IH2 JH\nLEFTWARD  L EH1 F T - W ER0 D\nLEFTWICH  L EH1 F T - W IH0 K\nLEFTWING  L EH1 F T - W IH2 NG\nLEFTY  L EH1 F - T IY0\nLEG  L EH1 G\nLEG'S  L EH1 G Z\nLEGACIES  L EH1 - G AH0 - S IY0 Z\nLEGACY  L EH1 - G AH0 - S IY0\nLEGAL  L IY1 - G AH0 L\nLEGALESE  L EH1 - G AH0 - L IY2 S\nLEGALISM  L IY1 - G AH0 - L IH2 - Z AH0 M\nLEGALISTIC  L EH2 - G AH0 - L IH1 - S T IH0 K\nLEGALITIES  L IY0 - G AE1 - L IH0 - T IY0 Z\nLEGALITIES(2)  L IH0 - G AE1 - L IH0 - T IY0 Z\nLEGALITY  L IY0 - G AE1 - L AH0 - T IY0\nLEGALIZATION  L IY2 - G AH0 - L AH0 - Z EY1 - SH AH0 N\nLEGALIZE  L IY1 - G AH0 - L AY2 Z\nLEGALIZED  L IY1 - G AH0 - L AY2 Z D\nLEGALIZING  L IY1 - G AH0 - L AY2 - Z IH0 NG\nLEGALLY  L IY1 - G AH0 - L IY0\nLEGALS  L IY1 - G AH0 L Z\nLEGAN  L EH1 - G AH0 N\nLEGARE  L EH0 - G AA1 - R IY0\nLEGASPI  L EH0 - G AA1 - S P IY0\nLEGATE  L EH1 - G AH0 T\nLEGATES  L EH1 - G AH0 T S\nLEGATO  L AH0 - G AA1 - T OW2\nLEGAULT  L IH0 - G OW1\nLEGE  L IY1 JH\nLEGEND  L EH1 - JH AH0 N D\nLEGENDARY  L EH1 - JH AH0 N - D EH2 - R IY0\nLEGENDRE  L EH1 - G IH0 N - D R EY0\nLEGENDS  L EH1 - JH AH0 N D Z\nLEGENT  L EH1 - JH AH0 N T\nLEGENT'S  L EH1 - JH AH0 N T S\nLEGER  L EH1 - JH ER0\nLEGERDEMAIN  L EH2 - JH ER0 - D AH0 - M EY1 N\nLEGERE  L EH1 - G ER0\nLEGET  L EH1 - G IH0 T\nLEGETTE  L IH0 - ZH EH1 T\nLEGG  L EH1 G\nLEGGE  L EH1 G\nLEGGED  L EH1 - G AH0 D\nLEGGED(2)  L EH1 G D\nLEGGETT  L EH1 - G IH0 T\nLEGGETTE  L EH1 - G EH1 T\nLEGGING  L EH1 - G IH0 NG\nLEGGINGS  L EH1 - G IH0 NG Z\nLEGGIO  L EH1 - JH IY0 - OW0\nLEGGITT  L EH1 - G IH0 T\nLEGGY  L EH1 - G IY0\nLEGHORN  L EH1 G - HH AO0 R N\nLEGHORNS  L EH1 G - HH AO0 R N Z\nLEGIBILITY  L EH2 - JH AH0 - B IH1 - L AH0 - T IY0\nLEGIBLE  L EH1 - JH AH0 - B AH0 L\nLEGION  L IY1 - JH AH0 N\nLEGIONARIES  L IY1 - JH AH0 - N EH2 - R IY0 Z\nLEGIONNAIRE  L IY1 - JH AH0 - N EH2 R\nLEGIONNAIRE'S  L IY1 - JH AH0 - N EH2 R Z\nLEGIONNAIRES  L IY1 - JH AH0 - N EH2 R Z\nLEGIONS  L IY1 - JH AH0 N Z\nLEGISLATE  L EH1 - JH IH0 - S L EY2 T\nLEGISLATED  L EH1 - JH AH0 S - L EY2 - T AH0 D\nLEGISLATES  L EH1 - JH IH0 - S L EY2 T S\nLEGISLATING  L EH1 - JH IH0 - S L EY2 - T IH0 NG\nLEGISLATION  L EH2 - JH AH0 S - L EY1 - SH AH0 N\nLEGISLATION'S  L EH2 - JH AH0 S - L EY1 - SH AH0 N Z\nLEGISLATIVE  L EH1 - JH AH0 S - L EY2 - T IH0 V\nLEGISLATIVELY  L EH1 - JH IH0 - S L EY2 - T IH0 V - L IY0\nLEGISLATOR  L EH1 - JH AH0 S - L EY2 - T ER0\nLEGISLATORS  L EH1 - JH AH0 S - L EY2 - T ER0 Z\nLEGISLATORS'  L EH1 - JH IH0 - S L EY2 - T ER0 Z\nLEGISLATURE  L EH1 - JH AH0 S - L EY2 - CH ER0\nLEGISLATURE'S  L EH1 - JH AH0 S - L EY2 - CH ER0 Z\nLEGISLATURES  L EH1 - JH IH0 S - L EY2 - CH ER0 Z\nLEGIT  L EH1 - JH IH0 T\nLEGIT(2)  L AH0 - JH IH1 T\nLEGITIMACY  L AH0 - JH IH1 - T AH0 - M AH0 - S IY0\nLEGITIMACY(2)  L IH0 - JH IH1 - T AH0 - M AH0 - S IY0\nLEGITIMATE  L AH0 - JH IH1 - T AH0 - M AH0 T\nLEGITIMATELY  L AH0 - JH IH1 - T AH0 - M AH0 T - L IY0\nLEGITIMIZE  L AH0 - JH IH1 - T AH0 - M AY2 Z\nLEGITIMIZE(2)  L IH0 - JH IH1 - T AH0 - M AY2 Z\nLEGITIMIZED  L IH0 - JH IH1 - T AH0 - M AY2 Z D\nLEGITIMIZES  L IH0 - JH IH1 - T AH0 - M AY2 - Z IH0 Z\nLEGITIMIZING  L IH0 - JH IH1 - T AH0 - M AY2 - Z IH0 NG\nLEGLER  L EH1 G - L ER0\nLEGLESS  L EH1 G - L AH0 S\nLEGNER  L EH1 G - N ER0\nLEGO  L EH1 - G OW0\nLEGORE  L EH1 - G AO2 R\nLEGRAND  L EH1 - G R AE0 N D\nLEGRANDE  L EH1 - G R AE0 N D\nLEGREE  L IH0 - G R IY1\nLEGROOM  L AH0 G - R UW1 M\nLEGROS  L EH1 - G R OW0 Z\nLEGS  L EH1 G Z\nLEGUME  L EH1 - G Y UW2 M\nLEGUMES  L EH1 - G Y UW2 M Z\nLEGWORK  L EH1 G - W ER2 K\nLEH  L EH1\nLEHAN  L IY1 - HH AE0 N\nLEHANE  L AH0 - HH EY1 N\nLEHDER  L EH1 - D ER0\nLEHDER'S  L EH1 - D ER0 Z\nLEHENBAUER  L EY1 - AH0 N - B AW0 - ER0\nLEHEW  L EY1 - HH Y UW0\nLEHIGH  L IY1 - HH AY2\nLEHL  L EH1 L\nLEHMAN  L IY1 - M AH0 N\nLEHMAN'S  L IY1 - M AH0 N Z\nLEHMANN  L EY1 - M AH0 N\nLEHMER  L EH1 - M ER0\nLEHMKUHL  L EH1 M - K AH0 L\nLEHN  L EH1 N\nLEHNE  L EH1 N\nLEHNEN  L EH1 - N AH0 N\nLEHNER  L EH1 - N ER0\nLEHNERT  L EH1 - N ER0 T\nLEHNHOFF  L EH1 N - HH AO0 F\nLEHR  L EH1 R\nLEHRER  L EH1 - R ER0\nLEHRKE  L EH1 R K\nLEHRMAN  L EH1 R - M AH0 N\nLEHRMANN  L EH1 R - M AH0 N\nLEHTINEN  L EH1 - T IH0 - N AH0 N\nLEHTONEN  L IH0 - T AA1 - N AH0 N\nLEI  L EY1\nLEIB  L IY1 B\nLEIBEL  L AY1 - B AH0 L\nLEIBENSPERGER  L AY1 - B IH0 N - S P ER0 - G ER0\nLEIBER  L IY1 - B ER0\nLEIBERT  L AY1 - B ER0 T\nLEIBFRIED  L AY1 B - F ER0 - IY0 D\nLEIBLER  L IY1 B - L ER0\nLEIBMAN  L IY1 B - M AH0 N\nLEIBNIZ  L IY1 B - N IH0 Z\nLEIBOLD  L AY1 - B OW2 L D\nLEIBOVIT  L IY1 - B AH0 - V IH0 T\nLEIBOVITZ  L IY1 - B AH0 - V IH0 T S\nLEIBOWITZ  L IY1 - B OW0 - IH0 T S\nLEIBRAND  L AY1 - B R AE2 N D\nLEIBRAND'S  L AY1 - B R AE2 N D Z\nLEIBRAND'S(2)  L IY1 - B R AE2 N D Z\nLEIBRAND(2)  L IY1 - B R AE2 N D\nLEIBROCK  L AY1 - B R AH0 K\nLEIBY  L IY1 - B IY0\nLEICESTER  L EH1 - S T ER0\nLEICHLITER  L AY1 K - L IY0 - T ER0\nLEICHNER  L AY1 K - N ER0\nLEICHT  L AY1 K T\nLEICHTER  L AY1 K - T ER0\nLEICHTMAN  L AY1 K T - M AH0 N\nLEICHTY  L AY1 K - T IY0\nLEICK  L IY1 K\nLEIDER  L AY1 - D ER0\nLEIDERMAN  L AY1 - D ER0 - M AH0 N\nLEIDERMAN'S  L AY1 - D ER0 - M AH0 N Z\nLEIDIG  L AY1 - D IH0 G\nLEIDNER  L AY1 D - N ER0\nLEIDY  L IY1 - D IY0\nLEIER  L AY1 - ER0\nLEIF  L IY1 F\nLEIFER  L AY1 - F ER0\nLEIFESTE  L AY1 - F IH0 S T\nLEIFHEIT  L AY1 F - HH AY0 T\nLEIGH  L IY1\nLEIGHT  L EY1 T\nLEIGHTON  L EY1 - T AH0 N\nLEIGHTY  L EY1 - T IY0\nLEIJA  L IY1 - Y AH0\nLEIKAM  L AY1 - K AH0 M\nLEIKEN  L AY1 - K AH0 N\nLEIKER  L AY1 - K ER0\nLEILA  L IY1 - L AH0\nLEILANI  L AH0 - L AA1 - N IY0\nLEILIA  L IY1 - L IY0 - AH0\nLEIMAN  L AY1 - M AH0 N\nLEIMBACH  L AY1 M - B AA2 K\nLEIMER  L AY1 - M ER0\nLEIMERT  L IY1 - M ER0 T\nLEIMERT(2)  L AY1 - M ER0 T\nLEIN  L IY1 N\nLEINART  L AY1 - N AA0 R T\nLEINBACH  L AY1 N - B AA2 K\nLEINBERGER  L AY1 N - B ER0 - G ER0\nLEINDECKER  L AY1 N - D IH0 - K ER0\nLEINEN  L AY1 - N AH0 N\nLEINER  L AY1 - N ER0\nLEINGANG  L AY1 NG - G AH0 NG\nLEININGER  L AY1 - N IH0 - NG ER0\nLEINO  L EY0 - IY1 - N OW0\nLEINONEN  L AY1 - N AH0 - N AH0 N\nLEINS  L IY1 N Z\nLEINSDORF  L AY1 N Z - D AO2 R F\nLEINWEBER  L AY1 N - W IH0 - B ER0\nLEIPER  L IY1 - P ER0\nLEIPHART  L AY1 P - HH AA0 R T\nLEIPOLD  L AY1 - P OW0 L D\nLEIPZIG  L AY1 P - S IH0 G\nLEIS  L EY1 Z\nLEISCHNER  L AY1 SH - N ER0\nLEISE  L IY1 S\nLEISENRING  L AY1 - S IH0 - N R IH0 NG\nLEISER  L AY1 - S ER0\nLEISEY  L IY1 - S IY0\nLEISHMAN  L IY1 SH - M AH0 N\nLEISING  L AY1 - S IH0 NG\nLEISINGER  L AY1 - S IH0 N - JH ER0\nLEISNER  L AY1 S - N ER0\nLEISS  L AY1 S\nLEIST  L IY1 - IH0 S T\nLEISTER  L IY1 - S T ER0\nLEISTIKOW  L AY0 - S T IH1 - K OW0\nLEISTNER  L AY1 S T - N ER0\nLEISURE  L EH1 - ZH ER0\nLEISURE(2)  L IY1 - ZH ER0\nLEISURELY  L IY1 - Z ER0 - L IY0\nLEISY  L IY1 - S IY0\nLEITCH  L IY1 CH\nLEITE  L IY1 T\nLEITER  L AY1 - T ER0\nLEITERMAN  L AY1 - T ER0 - M AH0 N\nLEITH  L IY1 TH\nLEITHA  L IY1 - DH AH0\nLEITHIA  L IY1 - DH IY0 - AH0\nLEITMAN  L AY1 T - M AH0 N\nLEITMOTIF  L AY1 T - M OW0 - T IY2 F\nLEITNER  L AY1 T - N ER0\nLEITZ  L IY1 T S\nLEITZEL  L AY1 T - Z AH0 L\nLEITZKE  L AY1 T - S K IY0\nLEIVA  L IY1 - V AH0\nLEJA  L EY1 - Y AH0\nLEJEUNE  L EH1 - Y OY0 N\nLEK  L EH1 K\nLEKACHMAN  L EH1 - K AA2 K - M AH0 N\nLEKAS  L IY1 - K AH0 Z\nLEKBERG  L EH1 K - B ER0 G\nLELA  L IY1 - L AH0\nLELAH  L EH1 - L AH0\nLELAND  L IY1 - L AH0 N D\nLELEUX  L IH0 - L OW1\nLELIA  L IY1 - L Y AH0\nLELLOUCHE  L EH0 - L UW1 SH\nLEM  L EH1 M\nLEMA  L IY1 - M AH0\nLEMAIRE  L AH0 - M EH1 R\nLEMAITRE  L IH0 - M EY1 - T ER0\nLEMAITRE(2)  L IH0 - M EY1 - T R AH0\nLEMAN  L IY1 - M AH0 N\nLEMANS  L EH1 - M AH0 N Z\nLEMANSKI  L IH0 - M AE1 N - S K IY0\nLEMAR  L IH0 - M AA1 R\nLEMARR  L EH1 - M ER0\nLEMASTER  L IY1 - M AE0 - S T ER0\nLEMASTERS  L AH0 - M AE1 - S T ER0 Z\nLEMAY  L EH1 - M EY0\nLEMBCKE  L EH1 M B - K IY0\nLEMBERG  L EH1 M - B ER0 G\nLEMBERGER  L EH1 M - B ER0 - G ER0\nLEMBKE  L EH1 M B K\nLEMBO  L EH1 M - B OW0\nLEMBURG  L EH1 M - B ER0 G\nLEMCKE  L EH1 M - K IY0\nLEMELIN  L EH1 - M IH0 - L IH0 N\nLEMELLE  L IH0 - M EH1 L\nLEMEN  L IY1 - M EH0 N\nLEMERCIER  L AH0 - M ER1 - S IY0 - ER0\nLEMERCIER'S  L AH0 - M ER1 - S IY0 - ER0 Z\nLEMERE  L EH1 - M ER0\nLEMERY  L EH1 - M ER0 - IY0\nLEMIEUX  L AH0 - M Y UW1\nLEMING  L IY1 - M IH0 NG\nLEMING(2)  L EH1 - M IH0 NG\nLEMIRE  L EY0 - M IH1 - R EY0\nLEMKE  L EH1 M - K IY0\nLEMLER  L EH1 M - L ER0\nLEMLEY  L EH1 M - L IY0\nLEMM  L EH1 M\nLEMMA  L EH1 - M AH0\nLEMME  L EH1 - M AH0\nLEMMEN  L EH1 - M EH0 N\nLEMMER  L EH1 - M ER0\nLEMMERMAN  L EH1 - M ER0 - M AH0 N\nLEMMIE  L EH1 - M IY0\nLEMMING  L EH1 - M IH0 NG\nLEMMINGS  L EH1 - M IH0 NG Z\nLEMMO  L EH1 - M OW0\nLEMMON  L EH1 - M AH0 N\nLEMMOND  L EH1 - M AH0 N D\nLEMMONS  L EH1 - M AH0 N Z\nLEMOINE  L IH0 - M OY1 N\nLEMON  L EH1 - M AH0 N\nLEMONADE  L EH1 - M AH0 - N EY1 D\nLEMOND  L EH1 - M AH0 N D\nLEMONDS  L EH1 - M AH0 N D Z\nLEMONS  L EH1 - M AH0 N Z\nLEMONT  L AH0 - M AA1 N T\nLEMOS  L IY1 - M OW0 Z\nLEMP  L EH1 M P\nLEMPERT  L EH1 M - P ER0 T\nLEMPKE  L EH1 M P K\nLEMUELA  L EH0 - M UW1 - L AH0\nLEMUR  L IY1 - M ER0\nLEMURS  L IY1 - M ER0 Z\nLEMUS  L IY1 - M AH0 S\nLEN  L EH1 N\nLENA  L IY1 - N AH0\nLENA'S  L IY1 - N AH0 Z\nLENAHAN  L EH1 - N AH0 - HH AE0 N\nLENARD  L EH1 - N ER0 D\nLENART  L EH1 - N ER0 T\nLENARZ  L EY1 - N AA0 R Z\nLENCIONI  L EH0 N - CH OW1 - N IY0\nLEND  L EH1 N D\nLENDER  L EH1 N - D ER0\nLENDER'S  L EH1 N - D ER0 Z\nLENDERMAN  L EH1 N - D ER0 - M AH0 N\nLENDERS  L EH1 N - D ER0 Z\nLENDERS'  L EH1 N - D ER0 Z\nLENDING  L EH1 N - D IH0 NG\nLENDINGS  L EH1 N - D IH0 NG Z\nLENDL  L EH1 N - D AH0 L\nLENDS  L EH1 N D Z\nLENE  L IY1 N\nLENEHAN  L EH1 - N IH0 - HH AE0 N\nLENETA  L EH0 - N EH1 - T AH0\nLENEXA  L EH0 - N EH1 K - S AH0\nLENG  L EH1 NG\nLENGACHER  L EH1 NG - G AH0 - K ER0\nLENGEL  L EH1 NG - G AH0 L\nLENGER  L EH1 - NG ER0\nLENGLE  L IH1 - NG AH0 L\nLENGTH  L EH1 NG K TH\nLENGTH(2)  L EH1 NG TH\nLENGTHEN  L EH1 NG - TH AH0 N\nLENGTHEN(2)  L EH1 NG K - TH AH0 N\nLENGTHENED  L EH1 NG - TH AH0 N D\nLENGTHENED(2)  L EH1 NG K - TH AH0 N D\nLENGTHENING  L EH1 NG - TH AH0 - N IH0 NG\nLENGTHENING(2)  L EH1 NG K - TH AH0 N - IH0 NG\nLENGTHENS  L EH1 NG - TH AH0 N Z\nLENGTHENS(2)  L EH1 NG K - TH AH0 N Z\nLENGTHS  L EH1 NG K TH S\nLENGTHS(2)  L EH1 NG TH S\nLENGTHWAYS  L EH1 NG TH - W EY2 Z\nLENGTHWISE  L EH1 NG TH - W AY2 Z\nLENGTHY  L EH1 NG - TH IY0\nLENGYEL  L EH1 NG - Y EH2 L\nLENHARD  L EH1 - N ER0 D\nLENHARDT  L EH1 N - HH AA2 R T\nLENHART  L EH1 N - HH AA2 R T\nLENHOFF  L EH1 N - HH AO2 F\nLENIENCY  L IY1 - N Y AH0 N - S IY0\nLENIENT  L IY1 - N IY0 - AH0 N T\nLENIENT(2)  L IY1 - N Y AH0 N T\nLENIENTLY  L IY1 - N Y AH0 N T - L IY0\nLENIG  L EH1 - N IH0 G\nLENIHAN  L EH1 - N IH0 - HH AE0 N\nLENIN  L EH1 - N AH0 N\nLENIN'S  L EH1 - N IH0 N Z\nLENIN(2)  L EH1 - N IH0 N\nLENINGRAD  L EH1 - N AH0 N - G R AE2 D\nLENINGRAD(2)  L EH1 - N IH0 N - G R AE2 D\nLENINGTON  L EH1 - N IH0 NG - T AH0 N\nLENINISM  L EH1 - N IH0 - N IH2 - Z AH0 M\nLENINIST  L EH1 - N IH0 - N IH0 S T\nLENIS  L IY1 - N AH0 S\nLENITA  L EH0 - N IY1 - T AH0\nLENIUS  L IY1 - N IY0 - IH0 S\nLENK  L EH1 NG K\nLENKE  L EH1 NG K\nLENKER  L EH1 NG - K ER0\nLENNANE  L EH0 - N EY1 N\nLENNANE(2)  L IY1 - N AE2 N\nLENNAR  L EH1 - N ER0\nLENNARD  L EH1 - N ER0 D\nLENNARTZ  L EH1 - N AA0 R T S\nLENNIE  L EH1 - N IY0\nLENNIG  L EH1 - N IH0 G\nLENNING  L EH1 - N IH0 NG\nLENNON  L EH1 - N AH0 N\nLENNON'S  L EH1 - N AH0 N Z\nLENNOX  L EH1 - N AH0 K S\nLENNY  L EH1 - N IY0\nLENO  L EH1 - N OW0\nLENO'S  L EH1 - N OW0 Z\nLENO'S(2)  L IY1 - N OW0 Z\nLENO(2)  L IY1 - N OW0\nLENON  L EH1 - N AH0 N\nLENORA  L EH1 - N ER0 - AH0\nLENORE  L AH0 - N AO1 R\nLENOS  L IY1 - N OW0 Z\nLENOX  L EH1 - N AH0 K S\nLENS  L EH1 N Z\nLENSCRAFTER  L EH1 N Z - K R AE2 F - T ER0\nLENSCRAFTERS  L EH1 N Z - K R AE2 F - T ER0 Z\nLENSES  L EH1 N - Z AH0 Z\nLENSES(2)  L EH1 N - Z IH0 Z\nLENSING  L EH1 N - S IH0 NG\nLENT  L EH1 N T\nLENTIL  L EH1 N - T AH0 L\nLENTILS  L EH1 N - T AH0 L Z\nLENTINAN  L EH1 N - T IH0 - N AH0 N\nLENTINE  L EH0 N - T IY1 - N IY0\nLENTINI  L EH0 N - T IY1 - N IY0\nLENTNER  L EH1 N T - N ER0\nLENTO  L EH1 N - T OW0\nLENTON  L EH1 N - T AH0 N\nLENTS  L EH1 N T S\nLENTSCH  L EH1 N CH\nLENTZ  L EH1 N T S\nLENTZSCH  L EH1 N T S\nLENY  L EH1 - N IY0\nLENZ  L EH1 N Z\nLENZ'S  L EH1 N - Z IH0 Z\nLENZEN  L EH1 N - Z AH0 N\nLENZI  L EH1 N - Z IY0\nLENZINI  L EH0 N - Z IY1 - N IY0\nLENZO  L EH1 N - Z OW0\nLEO  L IY1 - OW0\nLEO'S  L IY1 - OW0 Z\nLEODA  L EH1 - D AH0\nLEOINE  L IH0 - OY1 N\nLEOLA  L EH1 - L AH0\nLEOMA  L IH0 - OW1 - M AH0\nLEOMINSTER  L IY1 - OW0 - M IH2 N - S T ER0\nLEON  L IY1 - AA0 N\nLEON'S  L IY1 - AA0 N Z\nLEONA  L IY1 - OW0 - N AH0\nLEONARA  L EH0 - N AA1 - R AH0\nLEONARD  L EH1 - N ER0 D\nLEONARD'S  L EH1 - N ER0 D Z\nLEONARDA  L EH0 - N AA1 R - D AH0\nLEONARDI  L EH0 - N AA1 R - D IY0\nLEONARDIS  L EH1 - N AA0 R - D IH0 S\nLEONARDO  L IY2 - AH0 - N AA1 R - D OW0\nLEONE  L IY0 - OW1 N\nLEONEL  L IY1 - OW0 - N AH0 L\nLEONELLE  L EH0 - N EH1 L\nLEONELLI  L EH0 - N EH1 - L IY0\nLEONERD  L IY1 - AH0 - N ER0 D\nLEONES  L IY0 - OW1 N Z\nLEONETTI  L EH0 - N EH1 - T IY0\nLEONG  L EH1 NG\nLEONHARD  L IY1 - AH0 N - HH AA0 R T\nLEONHARDT  L EH1 N - HH AA0 R T\nLEONHART  L EH1 N - HH AA0 R T\nLEONI  L EH0 - OW1 - N IY0\nLEONI(2)  L IY0 - OW1 - N IY0\nLEONID  L IY1 - AH0 - N IH0 D\nLEONIE  L EH1 - N IY0\nLEONORA  L IY2 - AH0 - N AO1 - R AH0\nLEONORE  L IY1 - AH0 - N AO0 R\nLEONTINE  L EH0 N - T IY1 - N IY0\nLEONTINE(2)  L IY1 - AA0 N - T AY1 N\nLEONTYNE  L IY1 - AA0 N - T AY0 N\nLEOPARD  L EH1 - P ER0 D\nLEOPARDS  L EH1 - P ER0 D Z\nLEOPOLD  L IY1 - AH0 - P OW2 L D\nLEOPOLDINA  L EH0 - P OW0 L - D IY1 - N AH0\nLEOPOLDINE  L EH0 - P OW0 L - D IY1 - N IY0\nLEOPOLDO  L IY2 - AH0 - P OW1 L - D OW0\nLEORA  L EH1 - R AH0\nLEOS  L IY1 - OW0 Z\nLEOTA  L EH1 - T AH0\nLEOTARD  L IY1 - AH0 - T AA2 R D\nLEP  L EH1 P\nLEPAGE  L EH1 - P IH0 JH\nLEPAK  L EH1 - P AH0 K\nLEPARD  L EH1 - P ER0 D\nLEPE  L IY1 P\nLEPER  L EH1 - P ER0\nLEPERA  L EH0 - P EH1 - R AH0\nLEPERE  L EY0 - P EH1 - R EY0\nLEPERS  L EH1 - P ER0 Z\nLEPINE  L EH0 - P IY1 - N IY0\nLEPISTO  L EH0 - P IY1 - S T OW0\nLEPKOWSKI  L IH0 P - K AO1 F S - K IY0\nLEPLEY  L EH1 P - L IY0\nLEPORE  L EH0 - P AO1 - R IY0\nLEPP  L EH1 P\nLEPPANEN  L EH1 - P AH0 - N AH0 N\nLEPPARD  L EH1 - P ER0 D\nLEPPEK  L EH1 - P IH0 K\nLEPPER  L EH1 - P ER0\nLEPPERT  L EH1 - P ER0 T\nLEPPLA  L EH1 P - L AH0\nLEPPO  L EH1 - P OW0\nLEPRE  L EH1 - P ER0\nLEPROSY  L EH1 - P R AH0 - S IY0\nLEPTIN  L EH1 P - T IH0 N\nLEPTONIC  L EH0 P - T AA1 - N IH0 K\nLEQUIRE  L EY0 - K W IH1 - R EY0\nLERACH  L EH1 - R AH0 K\nLERCH  L ER1 K\nLERCHE  L ER1 CH\nLEREAH  L EH2 - R EY1 - AH0\nLERETTE  L ER0 - EH1 T\nLEREW  L EH1 - R UW0\nLERHMAN  L ER1 - M AH0 N\nLERMA  L ER1 - M AH0\nLERMAN  L EH1 R - M AH0 N\nLERNER  L ER1 - N ER0\nLERNER'S  L ER1 - N ER0 Z\nLEROUX  L ER0 - UW1\nLEROY  L IY1 - R OY2\nLERRO  L EH1 - R OW0\nLERSCH  L ER1 SH\nLERUM  L EH1 - R AH0 M\nLES  L EH1 S\nLESA  L IY1 - S AH0\nLESABRE  L AH0 S - EY1 - B ER0\nLESABRES  L EH1 - S AH0 - B R AH0 S\nLESAGE  L EH1 - S IH0 JH\nLESANE  L EY0 - S AA1 - N EY0\nLESBIAN  L EH1 Z - B IY0 - AH0 N\nLESBIANISM  L EH1 Z - B IY0 - AH0 - N IH0 Z M\nLESBIANS  L EH1 Z - B IY0 - AH0 N Z\nLESCAZE  L AH0 - S K EY1 Z\nLESCH  L EH1 SH\nLESCHLY  L EH1 SH - L IY0\nLESER  L EH1 - S ER0\nLESESNE  L EH1 - S IH0 N\nLESH  L EH1 SH\nLESHARO  L EH0 - SH AA1 - R OW0\nLESHER  L EH1 - SH ER0\nLESIAK  L EH1 - S IY0 - AE0 K\nLESIEUR  L EH1 - S IY0 - ER0\nLESINSKI  L IH0 - S IH1 N - S K IY0\nLESION  L IY1 - ZH AH0 N\nLESIONS  L IY1 - ZH AH0 N Z\nLESKE  L EH1 S K\nLESKO  L EH1 - S K OW0\nLESLEY  L EH1 S - L IY0\nLESLIE  L EH1 S - L IY0\nLESMEISTER  L EH1 S - M AY2 - S T ER0\nLESNER  L EH1 S - N ER0\nLESNIAK  L EH1 S - N IY0 - AE0 K\nLESNICK  L EH1 S - N IH0 K\nLESNIEWSKI  L EH0 S - N EH1 F S - K IY0\nLESNIEWSKI(2)  L EH0 S - N UW1 S - K IY0\nLESOTHO  L EH0 - S OW1 - TH OW0\nLESPERANCE  L EH0 - S P ER0 - AA1 N S\nLESPINASSE  L EH1 - S P IH0 - N AE0 S\nLESS  L EH1 S\nLESSARD  L EH1 - S ER0 D\nLESSEE  L EH0 - S IY1\nLESSEES  L EH0 - S IY1 Z\nLESSEN  L EH1 - S AH0 N\nLESSENED  L EH1 - S AH0 N D\nLESSENING  L EH1 - S AH0 N - IH0 NG\nLESSENS  L EH1 - S AH0 N Z\nLESSER  L EH1 - S ER0\nLESSIG  L EH1 - S IH0 G\nLESSIN  L EH1 - S IH0 N\nLESSING  L EH1 - S IH0 NG\nLESSLEY  L EH1 S - L IY0\nLESSMAN  L EH1 S - M AH0 N\nLESSNAU  L EH1 S - N OW2\nLESSNAU(2)  L EH1 S - N AW2\nLESSNER  L EH1 S - N ER0\nLESSON  L EH1 - S AH0 N\nLESSONS  L EH1 - S AH0 N Z\nLESSOR  L EH1 - S ER0\nLESSORS  L EH1 - S ER0 Z\nLEST  L EH1 S T\nLESTAT  L EH1 - S T AE2 T\nLESTER  L EH1 - S T ER0\nLESTRANGE  L EH0 - S T R EY1 N JH\nLESUER  L EH0 - S UW1 - ER0\nLESUEUR  L EH0 - S UW1 - ER0\nLESURE  L EH0 - SH UH1 R\nLESZCZYNSKI  L EH0 - SH IH1 N - S K IY0\nLESZEK  L EH1 - S EH0 K\nLET  L EH1 T\nLET'S  L EH1 T S\nLETA  L EH1 - T AH0\nLETARTE  L EH1 - T AA0 R T\nLETCHER  L EH1 - CH ER0\nLETCHWORTH  L EH1 CH - W ER0 TH\nLETDOWN  L EH1 T - D AW2 N\nLETELLIER  L EH1 - T AH0 - L IY0 - ER0\nLETENDRE  L AH0 - T AA1 N - D R AH0\nLETH  L EH1 TH\nLETHA  L EH1 - TH AH0\nLETHAL  L IY1 - TH AH0 L\nLETHALITY  L IY0 - TH AE1 - L AH0 - T IY0\nLETHARGIC  L AH0 - TH AA1 R - JH IH0 K\nLETHARGY  L EH1 - TH ER0 - JH IY0\nLETHCO  L EH1 TH - K OW0\nLETHIA  L EH1 - TH IY0 - AH0\nLETICIA  L AH0 - T IH1 - SH AH0\nLETITIA  L IH0 - T IH1 - SH IY0 - AH0\nLETIZIA  L EH0 - T IY1 - Z IY0 - AH0\nLETNER  L EH1 T - N ER0\nLETO  L IY1 - T OW0\nLETOURNEAU  L EH1 - T UH0 R - N OW0\nLETS  L EH1 T S\nLETSCH  L EH1 CH\nLETSINGER  L EH1 T - S IH0 N - JH ER0\nLETSON  L EH1 T - S AH0 N\nLETT  L EH1 T\nLETTAU  L IH0 - T OW1\nLETTER  L EH1 - T ER0\nLETTERED  L EH1 - T ER0 D\nLETTERHEAD  L EH1 - T ER0 - HH EH2 D\nLETTERING  L EH1 - T ER0 - IH0 NG\nLETTERMAN  L EH1 - T ER0 - M AH0 N\nLETTERMAN'S  L EH1 - T ER0 - M AH0 N Z\nLETTERPRESS  L EH1 - T ER0 - P R EH2 S\nLETTERS  L EH1 - T ER0 Z\nLETTICE  L EH1 - T IH0 S\nLETTIE  L EH1 - T IY0\nLETTIERE  L EH1 - T IY0 - EH0 R\nLETTIERI  L EH0 - T IH1 - R IY0\nLETTING  L EH1 - T IH0 NG\nLETTISH  L EH1 - T IH0 SH\nLETTS  L EH1 T S\nLETTUCE  L EH1 - T AH0 S\nLETTY  L EH1 - T IY0\nLETUP  L EH1 T - AH2 P\nLETZ  L EH1 T S\nLEU  L UW1\nLEU'S  L UW1 Z\nLEUBERT  L UW1 - B ER0 T S\nLEUCADIA  L UW0 - K EY1 - D IY0 - AH0\nLEUCADIA'S  L UW0 - K EY1 - D IY0 - AH0 Z\nLEUCK  L UW1 K\nLEUENBERGER  L UW1 - AH0 N - B ER0 - G ER0\nLEUFFER  L UW1 - F ER0\nLEUGERS  L OY1 - G ER0 Z\nLEUKEMIA  L UW0 - K IY1 - M IY0 - AH0\nLEUKOCYTE  L UW1 - K AH0 - S AY2 T\nLEUMI  L UW1 - M IY0\nLEUNG  L UW1 NG\nLEUPOLD  L OY1 - P OW0 L D\nLEUSCHNER  L OY1 SH - N ER0\nLEUTHOLD  L OY1 - TH OW0 L D\nLEUTWILER  L UW1 T - W AY2 - L ER0\nLEUZZI  L UW1 - Z IY0\nLEV  L EH1 V\nLEVA  L EH1 - V AH0\nLEVAL  L AH0 - V AA1 L\nLEVALLEY  L EH1 - V AH0 L - IY0\nLEVAMISOLE  L AH0 - V AE1 - M IH0 - S OW2 L\nLEVAN  L EH1 - V AH0 N\nLEVANA  L IH0 - V AE1 - N AH0\nLEVANDER  L EH1 - V AH0 N - D ER0\nLEVANDOSKI  L IH0 - V AH0 N - D AW1 S - K IY0\nLEVANDOWSKI  L IH0 - V AH0 N - D AO1 F S - K IY0\nLEVANGIE  L EH1 - V AH0 NG - IY0\nLEVANT  L AH0 - V AE1 N T\nLEVARIO  L EY0 - V AA1 - R IY0 - OW0\nLEVASSEUR  L EH1 - V AH0 - S ER0\nLEVAY  L EH1 - V EY0\nLEVCHENKO  L EH2 V - CH EH1 NG - K OW0\nLEVE  L IY1 V\nLEVECK  L EH1 - V IH0 K\nLEVEE  L EH1 - V IY0\nLEVEES  L EH1 - V IY0 Z\nLEVEILLE  L EH1 - V AY0 L\nLEVEL  L EH1 - V AH0 L\nLEVEL'S  L EH1 - V AH0 L Z\nLEVELED  L EH1 - V AH0 L D\nLEVELER'S  L EH1 - V AH0 L - ER0 Z\nLEVELER'S(2)  L EH1 V - L ER0 Z\nLEVELERS  L EH1 - V AH0 L - ER0 Z\nLEVELERS(2)  L EH1 V - L ER0 Z\nLEVELING  L EH1 - V AH0 L - IH0 NG\nLEVELING(2)  L EH1 V - L IH0 NG\nLEVELL  L EY0 - V EY1 L\nLEVELLED  L EH1 - V AH0 L D\nLEVELS  L EH1 - V AH0 L Z\nLEVEN  L IY1 - V AH0 N\nLEVENBERG  L IY1 - V AH0 N - B ER0 G\nLEVENDUSKY  L IH0 - V IH0 N - D AH1 S - K IY0\nLEVENE  L EH1 - V IY0 N\nLEVENGOOD  L EH1 - V IH0 N - G UH0 D\nLEVENHAGEN  L EH1 - V IH0 N - HH AH0 - G AH0 N\nLEVENS  L IY1 - V AH0 N Z\nLEVENSON  L EH1 - V IH0 N - S AH0 N\nLEVENSTEIN  L IY1 - V AH0 N - S T AY0 N\nLEVENSTEIN(2)  L IY1 - V AH0 N - S T IY0 N\nLEVENTHAL  L EH1 - V AH0 N - TH AO2 L\nLEVEQUE  L AH0 - V IY1 K\nLEVER  L EH1 - V ER0\nLEVER(2)  L IY1 - V ER0\nLEVERAGE  L EH1 - V ER0 - IH0 JH\nLEVERAGE(2)  L EH1 - V R AH0 JH\nLEVERAGE(3)  L IY1 - V ER0 - IH0 JH\nLEVERAGED  L IY1 - V ER0 - IH0 JH D\nLEVERAGED(2)  L EH1 - V ER0 - IH0 JH D\nLEVERAGED(3)  L EH1 - V R IH0 JH D\nLEVERAGING  L EH1 - V R IH0 - JH IH0 NG\nLEVERAGING(2)  L EH1 - V ER0 - IH0 - JH IH0 NG\nLEVERENZ  L EH1 - V ER0 - IH0 N S\nLEVERETT  L EH1 - V ER0 - EH0 T\nLEVERETTE  L EH1 - V ER0 - EH0 T\nLEVERICH  L EH1 - V ER0 - IH0 K\nLEVERING  L EH1 - V ER0 - IH0 NG\nLEVERONE  L EH0 - V ER0 - OW1 - N IY0\nLEVERS  L EH1 - V ER0 Z\nLEVERSON  L EH1 - V ER0 - S AH0 N\nLEVERT  L EH1 - V ER0 T\nLEVERTON  L IH0 - V ER1 - T AH0 N\nLEVESQUE  L IH0 - V EH1 S K\nLEVETT  L EH1 - V IH0 T\nLEVEY  L IH0 - V EY1\nLEVI  L IY1 - V AY0\nLEVI'S  L IY1 - V AY0 Z\nLEVIATHAN  L AH0 - V AY1 - AH0 - TH AH0 N\nLEVICK  L EH1 - V IH0 K\nLEVIE  L IY1 - V IY0\nLEVIED  L EH1 - V IY0 D\nLEVIEN  L EH1 - V IY0 - AH0 N\nLEVIES  L EH1 - V IY0 Z\nLEVIN  L EH1 - V IH0 N\nLEVIN'S  L EH1 - V IH0 N Z\nLEVINA  L EH0 - V IY1 - N AH0\nLEVINE  L AH0 - V IY1 N\nLEVINE'S  L AH0 - V IY1 N Z\nLEVINER  L EH1 - V IH0 - N ER0\nLEVINGS  L EH1 - V IH0 NG Z\nLEVINGSTON  L IH1 - V IH0 NG - S T AH0 N\nLEVINS  L EH1 - V IH0 N Z\nLEVINSKY  L IH0 - V IH1 N - S K IY0\nLEVINSON  L EH1 - V IH0 N - S AH0 N\nLEVINSTONE  L EH1 - V IH0 N - S T OW2 N\nLEVIS  L EH1 - V IH0 S\nLEVIS(2)  L IY1 - V AY2 Z\nLEVISON  L EH1 - V IH0 - S AH0 N\nLEVIT  L EH1 - V IH0 T\nLEVITAN  L EH1 - V IH0 - T AH0 N\nLEVITATE  L EH1 - V IH0 - T EY2 T\nLEVITATED  L EH1 - V IH0 - T EY2 - T IH0 D\nLEVITATING  L EH1 - V AH0 - T EY2 - T IH0 NG\nLEVITATION  L EH2 - V IH0 - T EY1 - SH AH0 N\nLEVITCH  L EH1 - V IH0 CH\nLEVITON  L IH0 - V IH1 - T AH0 N\nLEVITSKY  L IH0 - V IH1 T S - K IY0\nLEVITT  L EH1 - V IH0 T\nLEVITT'S  L EH1 - V IH0 T S\nLEVITTE  L EH1 - V IH0 T\nLEVITTE'S  L EH1 - V IH0 T S\nLEVITTOWN  L EH1 - V IH0 - T AW2 N\nLEVITTOWN'S  L EH1 - V IH0 - T AW2 N Z\nLEVITY  L EH1 - V IH0 - T IY0\nLEVITZ  L EH1 - V IH0 T S\nLEVY  L EH1 - V IY0\nLEVY'S  L EH1 - V IY0 Z\nLEVY'S(2)  L IY1 - V IY0 Z\nLEVY(2)  L IY1 - V IY0\nLEVYING  L EH1 - V IY0 - IH0 NG\nLEW  L UW1\nLEWALLEN  L UW0 - AO1 - L AH0 N\nLEWAN  L UW1 - AH0 N\nLEWANDA  L AH0 W - AA1 N - D AH0\nLEWANDOSKI  L UW0 - AH0 N - D AW1 S - K IY0\nLEWANDOWSKI  L UW0 - AH0 N - D AO1 F S - K IY0\nLEWANNA  L UW1 - IH0 - N AH0\nLEWD  L UW1 D\nLEWELLEN  L UW2 - EH1 - L AH0 N\nLEWELLING  L UW2 - EH1 - L IH0 NG\nLEWELLYN  L UW2 - EH1 - L IH0 N\nLEWENSKY  L UW2 - EH1 N - S K IY0\nLEWENSKY'S  L UW2 - EH1 N - S K IY0 Z\nLEWERS  L UW1 - ER0 Z\nLEWEY  L UW1 - IY0\nLEWICKI  L UW0 - IH1 T S - K IY0\nLEWIN  L UW1 - IH0 N\nLEWING  L UW1 - IH0 NG\nLEWINS  L UW1 - IH0 N Z\nLEWINSKI  L UW0 - IH1 N - S K IY0\nLEWINSKY  L UW0 - IH1 N - S K IY0\nLEWINSOHN  L UW1 - IH0 N - S AH0 N\nLEWINTON  L UW1 - IH0 N - T AH0 N\nLEWIS  L UW1 - IH0 S\nLEWIS'  L UW1 - IH0 S\nLEWIS'S  L UW1 - IH0 - S IH0 Z\nLEWISBURG  L UW1 - IH0 S - B ER0 G\nLEWISTON  L UW1 - AH0 - S T AH0 N\nLEWKOWICZ  L UW1 - K AH0 - V IH0 CH\nLEWMAN  L UW1 - M AH0 N\nLEWTER  L UW1 - T ER0\nLEWTON  L UW1 - T AH0 N\nLEWY  L UW1 - IY0\nLEX  L EH1 K S\nLEXICAL  L EH1 K - S IH0 - K AH0 L\nLEXICOGRAPHER  L EH2 K - S IH0 - K AA1 - G R AH0 - F ER0\nLEXICON  L EH1 K - S IH0 - K AA2 N\nLEXIE  L EH1 K - S IY0\nLEXINE  L EH1 K - S AY0 N\nLEXINGTON  L EH1 K - S IH0 NG - T AH0 N\nLEXIS  L EH1 K - S IH0 S\nLEXMARK  L EH1 K S - M AA2 R K\nLEXUS  L EH1 K - S AH0 S\nLEXUS'S  L EH1 K - S AH0 - S IH0 Z\nLEY  L EY1\nLEYA  L EY1 - AH0\nLEYBA  L EY1 - B AH0\nLEYDA  L EY1 - D AH0\nLEYDEN  L AY1 - D AH0 N\nLEYENDECKER  L AY1 N - D IH0 - K ER0\nLEYH  L EY1\nLEYLAND  L EY1 - L AH0 N D\nLEYRER  L EY1 - R ER0\nLEYS  L EY1 Z\nLEYSEN  L EY1 - S AH0 N\nLEYSEN'S  L EY1 - S AH0 N Z\nLEYVA  L EY1 - V AH0\nLEZOTTE  L IH0 - Z AO1 T\nLHASA  L AA1 - S AH0\nLHEUREUX  L ER0 - OW1\nLHOMMEDIEU  L OW2 - M EH0 - D Y UW1\nLI  L IY1\nLI'S  L IY1 Z\nLI-KANG  L IY1 - K AE1 NG\nLIA  L IY1 - AH0\nLIABILITIES  L AY2 - AH0 - B IH1 - L AH0 - T IY0 Z\nLIABILITIES(2)  L AY2 - AH0 - B IH1 - L IH0 - T IY0 Z\nLIABILITY  L AY2 - AH0 - B IH1 - L IH0 - T IY0\nLIABLE  L AY1 - AH0 - B AH0 L\nLIACOS  L AY0 - AA1 - K OW0 S\nLIAISON  L IY0 - EY1 - Z AA2 N\nLIAISON(2)  L EY1 - Z AA2 N\nLIAISONS  L IY0 - EY1 - S AA2 N Z\nLIAM  L IY1 - AH0 M\nLIAM'S  L IY1 - AH0 M Z\nLIAN  L Y AA1 N\nLIANA  L IY0 - AA1 - N AH0\nLIANE  L IY0 - AE1 N\nLIANG  L Y AE1 NG\nLIANG(2)  L IY0 - AE1 NG\nLIANNA  L IY0 - AA1 - N AH0\nLIANNE  L IY0 - AE1 N\nLIAO  L IY0 - AW1\nLIAR  L AY1 - ER0\nLIARS  L AY1 - ER0 Z\nLIASON  L AY1 - AH0 - S AH0 N\nLIASON(2)  L AY1 - S AH0 N\nLIASSON  L AY1 - AH0 - S AH0 N\nLIB  L IH1 B\nLIBBED  L IH1 B D\nLIBBEY  L IH1 - B IY0\nLIBBING  L IH1 - B IH0 NG\nLIBBY  L IH1 - B IY0\nLIBEL  L AY1 - B AH0 L\nLIBELED  L AY1 - B AH0 L D\nLIBELOUS  L AY1 - B AH0 - L AH0 S\nLIBERACE  L IH2 - B ER0 - AA1 - CH IY0\nLIBERAL  L IH1 - B ER0 - AH0 L\nLIBERAL(2)  L IH1 - B R AH0 L\nLIBERALISM  L IH1 - B ER0 - AH0 - L IH2 - Z AH0 M\nLIBERALISM'S  L IH1 - B ER0 - R AH0 - L IH2 - Z AH0 M Z\nLIBERALISM'S  L IH1 - B R AH0 - L IH2 - Z AH0 M Z\nLIBERALISM(2)  L IH1 - B R AH0 - L IH2 - Z AH0 M\nLIBERALITY  L IH2 - B ER0 - AE1 - L AH0 - T IY0\nLIBERALIZATION  L IH2 - B R AH0 - L IH0 - Z EY1 - SH AH0 N\nLIBERALIZATION(2)  L IH2 - B R AH0 - L IH0 - Z EY1 - SH AH0 N\nLIBERALIZATIONS  L IH0 - B ER0 - AH0 - L IH0 - Z EY1 - SH AH0 N Z\nLIBERALIZATIONS(2)  L IH0 - B R AH0 - L IH0 - Z EY1 - SH AH0 N Z\nLIBERALIZE  L IH1 - B ER0 - AH0 - L AY2 Z\nLIBERALIZE(2)  L IH1 - B R AH0 - L AY2 Z\nLIBERALIZED  L IH1 - B ER0 - AH0 - L AY2 Z D\nLIBERALIZED(2)  L IH1 - B R AH0 - L AY2 Z D\nLIBERALIZING  L IH1 - B ER0 - AH0 - L AY2 - Z IH0 NG\nLIBERALIZING(2)  L IH1 - B R AH0 - L AY2 - Z IH0 NG\nLIBERALLY  L IH1 - B ER0 - AH0 - L IY0\nLIBERALLY(2)  L IH1 - B R AH0 - L IY0\nLIBERALS  L IH1 - B ER0 - AH0 L Z\nLIBERALS'  L IH1 - B ER0 - AH0 L Z\nLIBERALS'(2)  L IH1 - B R AH0 L Z\nLIBERALS(2)  L IH1 - B R AH0 L Z\nLIBERATE  L IH1 - B ER0 - EY2 T\nLIBERATED  L IH1 - B ER0 - EY2 - T IH0 D\nLIBERATI  L IY0 - B ER0 - AA1 - T IY0\nLIBERATING  L IH1 - B ER0 - EY2 - T IH0 NG\nLIBERATION  L IH2 - B ER0 - EY1 - SH AH0 N\nLIBERATO  L IY0 - B ER0 - AA1 - T OW0\nLIBERATOR  L IH1 - B ER0 - EY0 - T AH0 R\nLIBERATORE  L IY0 - B ER0 - AA0 - T AO1 - R IY0\nLIBERATORS  L IH1 - B ER0 - EY0 - T AH0 R Z\nLIBERIA  L AY0 - B IH1 - R IY0 - AH0\nLIBERIA'S  L AY0 - B IH1 - R IY0 - AH0 Z\nLIBERIAN  L AY0 - B IH1 - R IY0 - AH0 N\nLIBERIANS  L AY0 - B IH1 - R IY0 - AH0 N Z\nLIBERMAN  L IH1 - B ER0 - M AH0 N\nLIBERT  L IH1 - B ER0 T\nLIBERTARIAN  L IH2 - B ER0 - T EH1 - R IY0 - AH0 N\nLIBERTARIANS  L IH2 - B ER0 - T EH1 - R IY0 - AH0 N Z\nLIBERTI  L IY0 - B EH1 R - T IY0\nLIBERTIES  L IH1 - B ER0 - T IY0 Z\nLIBERTINE  L IH1 - B ER0 - T IY2 N\nLIBERTINES  L IH1 - B ER0 - T IY2 N Z\nLIBERTO  L IY0 - B EH1 R - T OW0\nLIBERTY  L IH1 - B ER0 - T IY0\nLIBERTY'S  L IH1 - B ER0 - T IY0 Z\nLIBIDO  L AH0 - B IY1 - D OW0\nLIBMAN  L IH1 B - M AH0 N\nLIBOR  L IY1 - B ER0\nLIBRA  L IY1 - B R AH0\nLIBRARIAN  L AY0 - B R EH1 - R IY0 - AH0 N\nLIBRARIANS  L AY0 - B R EH1 - R IY0 - AH0 N Z\nLIBRARIES  L AY1 - B R EH2 - R IY0 Z\nLIBRARY  L AY1 - B R EH2 - R IY0\nLIBRARY'S  L AY1 - B R EH2 - R IY0 Z\nLIBRATION  L AY0 - B R EY1 - SH AH0 N\nLIBRETTIST  L AH0 - B R EH1 - T AH0 S T\nLIBRETTO  L AH0 - B R EH1 - T OW0\nLIBRETTO(2)  L IH0 - B R EH1 - T OW0\nLIBRIZZI  L IY0 - B R IY1 T - S IY0\nLIBY  L AY1 - B IY0\nLIBYA  L IH1 - B IY0 - AH0\nLIBYA'S  L IH1 - B IY0 - AH0 Z\nLIBYAN  L IH1 - B IY0 - AH0 N\nLIBYANS  L IH1 - B IY0 - AH0 N Z\nLICARI  L IY0 - K AA1 - R IY0\nLICATA  L IY0 - K AA1 - T AH0\nLICAUSI  L IY0 - K AO1 - S IY0\nLICAVOLI  L IY0 - K AA0 - V OW1 - L IY0\nLICCIARDI  L IY0 - CH AA1 R - D IY0\nLICE  L AY1 S\nLICEA  L IH1 - S IY0 - AH0\nLICENCE  L AY1 - S AH0 N S\nLICENCES  L AY1 - S AH0 N - S IH0 Z\nLICENSE  L AY1 - S AH0 N S\nLICENSED  L AY1 - S AH0 N S T\nLICENSEE  L AY2 - S AH0 N - S IY1\nLICENSEES  L AY2 - S AH0 N - S IY1 Z\nLICENSER  L AY1 - S AH0 N - S ER0\nLICENSES  L AY1 - S AH0 N - S IH0 Z\nLICENSING  L AY1 - S AH0 N - S IH0 NG\nLICENSOR  L AY1 - S AH0 N - S ER0\nLICENSURE  L AY1 - S AH0 N - CH ER0\nLICENTIOUS  L AY0 - S EH1 N - CH AH0 S\nLICH  L IH1 CH\nLICHEN  L AY1 - K AH0 N\nLICHENS  L AY1 - K AH0 N Z\nLICHLYTER  L IH1 K - L AY0 - T ER0\nLICHT  L IH1 K T\nLICHTBLAU  L IH1 CH T - B L AW2\nLICHTE  L IH1 CH T\nLICHTEN  L IH1 K - T AH0 N\nLICHTENBERG  L IH1 K - T AH0 N - B ER0 G\nLICHTENBERGER  L IH1 K - T AH0 N - B ER0 - G ER0\nLICHTENFELS  L IH1 K - T IH0 N - F AH0 L Z\nLICHTENSTEIN  L IH1 K - T AH0 N - S T IY2 N\nLICHTENSTEIN(2)  L IH1 K - T AH0 N - S T AY2 N\nLICHTENWALNER  L IH1 K - T IH0 - N W AH0 L - N ER0\nLICHTENWALTER  L IH1 K - T IH0 - N W AH0 L - T ER0\nLICHTER  L IH1 K - T ER0\nLICHTERMAN  L IH1 K - T ER0 - M AH0 N\nLICHTMAN  L IH1 K T - M AH0 N\nLICHTY  L IH1 CH - T IY0\nLICIO  L IH1 - S IY0 - OW0\nLICITRA  L IY0 - CH IY1 - T R AH0\nLICK  L IH1 K\nLICKED  L IH1 K T\nLICKER  L IH1 - K ER0\nLICKETY  L IH1 - K AH0 - T IY0\nLICKING  L IH1 - K IH0 NG\nLICKLIDER  L IH1 - K L AY0 - D ER0\nLICKS  L IH1 K S\nLICKTEIG  L IH1 K - T AY2 G\nLICO  L IY1 - K OW0\nLICON  L IH1 - K AH0 N\nLICORICE  L IH1 - K ER0 - IH0 SH\nLID  L IH1 D\nLIDA  L IY1 - D AH0\nLIDDELL  L IH1 - D AH0 L\nLIDDICK  L IH1 - D IH0 K\nLIDDICOAT  L IH1 - D IH0 - K OW2 T\nLIDDLE  L IH1 - D AH0 L\nLIDDY  L IH1 - D IY0\nLIDDY'S  L IH1 - D IY0 Z\nLIDE  L AY1 D\nLIDEN  L AY1 - D AH0 N\nLIDGERWOOD  L IH1 - JH ER0 - W UH2 D\nLIDO  L IY1 - D OW0\nLIDS  L IH1 D Z\nLIE  L AY1\nLIEB  L IY1 B\nLIEBE  L IY1 B\nLIEBEL  L IY1 - B AH0 L\nLIEBELER  L IY1 - B AH0 L - ER0\nLIEBELT  L IY1 - B IH0 L T\nLIEBENOW  L IY1 - B IH0 - N OW0\nLIEBER  L IY1 - B ER0\nLIEBERMAN  L IY1 - B ER0 - M AH0 N\nLIEBERMAN'S  L IY1 - B ER0 - M AH0 N Z\nLIEBERMANN  L IY1 - B ER0 - M AH0 N\nLIEBERT  L IY1 - B ER0 T\nLIEBERTHAL  L IY1 - B ER0 - TH AO2 L\nLIEBIG  L IY1 - B IH0 G\nLIEBL  L IY1 - B AH0 L\nLIEBLER  L IY1 B - L ER0\nLIEBLING  L IY1 - B AH0 L - IH0 NG\nLIEBLING(2)  L IY1 - B L IH0 NG\nLIEBMAN  L IY1 B - M AH0 N\nLIEBMANN  L IY1 B - M AH0 N\nLIEBOWITZ  L IY1 - B AH0 - W IH0 T S\nLIECHTENSTEIN  L IH1 K - T AH0 N - S T AY2 N\nLIECHTY  L IY1 CH - T IY0\nLIED  L AY1 D\nLIEDEL  L IY1 - D AH0 L\nLIEDER  L IY1 - D ER0\nLIEDERMAN  L IY1 - D ER0 - M AH0 N\nLIEDERMAN'S  L IY1 - D ER0 - M AH0 N Z\nLIEDTKE  L IY1 T - K IY0\nLIEDTKE'S  L IY1 T - K IY0 Z\nLIEF  L IY1 F\nLIEFER  L IY1 - F ER0\nLIEGE  L IY1 JH\nLIEM  L IY1 M\nLIEMANDT  L IY1 - M AE0 N T\nLIEN  L IY1 N\nLIENAU  L AH0 - N OW1\nLIENEMANN  L IY1 - N AH0 - M AH0 N\nLIENER  L IY1 - N ER0\nLIENHARD  L IY1 N - HH AA2 R D\nLIENHART  L IY1 N - HH AA2 R T\nLIENS  L IY1 N Z\nLIERMAN  L IH1 R - M AH0 N\nLIERMANN  L IH1 R - M AH0 N\nLIES  L AY1 Z\nLIESCH  L IY1 SH\nLIESE  L IY1 Z\nLIESER  L IY1 - S ER0\nLIESIN  L IY1 - S IH0 N\nLIESKE  L IY1 S - K IY0\nLIESON  L IY1 - S AO0 N\nLIETZ  L IY1 T S\nLIETZKE  L IY1 T S - K IY0\nLIEU  L UW1\nLIEU(2)  L Y UW1\nLIEURANCE  L UW1 - R AH0 N S\nLIEUTENANT  L UW0 - T EH1 - N AH0 N T\nLIEUTENANTS  L UW0 - T EH1 - N AH0 N T S\nLIFE  L AY1 F\nLIFE'S  L AY1 F S\nLIFEBLOOD  L AY1 F - B L AH2 D\nLIFEBOAT  L AY1 F - B OW2 T\nLIFEBOATS  L AY1 F - B OW2 T S\nLIFECO  L IY1 F - K OW2\nLIFEGUARD  L AY1 F - G AA2 R D\nLIFEGUARDS  L AY1 F - G AA2 R D Z\nLIFELESS  L AY1 F - L AH0 S\nLIFELIKE  L AY1 F - L AY2 K\nLIFELINE  L AY1 F - L AY2 N\nLIFELINES  L AY1 F - L AY2 N Z\nLIFELONG  L AY1 F - L AO1 NG\nLIFER  L AY1 - F ER0\nLIFERS  L AY1 - F ER0 Z\nLIFES  L AY1 F S\nLIFESAVER  L AY1 F - S EY2 - V ER0\nLIFESAVERS  L AY1 F - S EY2 - V ER0 Z\nLIFESAVING  L AY1 F - S EY2 - V IH0 NG\nLIFESPAN  L AY1 F - S P AE2 N\nLIFESTYLE  L AY1 F - S T AY2 L\nLIFESTYLES  L AY1 F - S T AY2 L Z\nLIFETIME  L AY1 F - T AY2 M\nLIFETIME'S  L AY1 F - T AY2 M Z\nLIFETIMES  L AY1 F - T AY2 M Z\nLIFF  L IH1 F\nLIFFE  L IH1 F\nLIFFE'S  L IH1 F S\nLIFLAND  L IH1 F - L AH0 N D\nLIFO  L IY1 - F OW0\nLIFORD  L IH1 - F ER0 D\nLIFSEY  L IH1 F - S IY0\nLIFSHITZ  L IH1 F - SH IH0 T S\nLIFSON  L IH1 F - S AA2 N\nLIFSON'S  L IH1 F - S AA2 N Z\nLIFT  L IH1 F T\nLIFTED  L IH1 F - T AH0 D\nLIFTED(2)  L IH1 F - T IH0 D\nLIFTER  L IH1 F - T ER0\nLIFTERS  L IH1 F - T ER0 Z\nLIFTIN  L IH1 F - T IH0 N\nLIFTING  L IH1 F - T IH0 NG\nLIFTOFF  L IH1 F T - AO2 F\nLIFTON  L IH1 F - T AH0 N\nLIFTS  L IH1 F T S\nLIGACHEV  L IH1 - G AH0 - CH EH0 V\nLIGACHEV'S  L IH1 - G AH0 - CH EH0 V Z\nLIGAMENT  L IH1 - G AH0 - M AH0 N T\nLIGAMENTS  L IH1 - G AH0 - M AH0 N T S\nLIGAND  L IH1 - G AH0 N D\nLIGANDS  L IH1 - G AH0 N D Z\nLIGAS  L AY1 - G AH0 Z\nLIGATION  L AY0 - G EY1 - SH AH0 N\nLIGGET  L IH1 - G IH0 T\nLIGGETT  L IH1 - G IH0 T\nLIGGETT'S  L IH1 - G EH2 T S\nLIGGINS  L IH1 - G IH0 N Z\nLIGGIO  L IY1 - JH IY0 - OW0\nLIGHT  L AY1 T\nLIGHT'S  L AY1 T S\nLIGHTBULB  L AY1 T - B AH2 L B\nLIGHTBULBS  L AY1 T - B AH2 L B Z\nLIGHTCAP  L AY1 T - K AE2 P\nLIGHTED  L AY1 - T AH0 D\nLIGHTED(2)  L AY1 - T IH0 D\nLIGHTEN  L AY1 - T AH0 N\nLIGHTENED  L AY1 - T AH0 N D\nLIGHTENING  L AY1 - T AH0 N - IH0 NG\nLIGHTER  L AY1 - T ER0\nLIGHTERS  L AY1 - T ER0 Z\nLIGHTEST  L AY1 - T AH0 S T\nLIGHTFAST  L AY1 T - F AE2 S T\nLIGHTFASTNESS  L AY1 T - F AE2 S T - N AH0 S\nLIGHTFOOT  L AY1 T - F UH2 T\nLIGHTHALL  L AY1 T - HH AO2 L\nLIGHTHEADED  L AY2 T - HH EH1 - D AH0 D\nLIGHTHEADEDNESS  L AY1 T - HH EH2 - D AH0 D - N AH0 S\nLIGHTHEARTED  L AY1 T - HH AA2 R - T IH0 D\nLIGHTHIZER  L AY1 T - HH AY2 - Z ER0\nLIGHTHOUSE  L AY1 T - HH AW2 S\nLIGHTHOUSES  L AY1 T - HH AW2 - S IH0 Z\nLIGHTHOUSES(2)  L AY1 T - HH AW2 - Z AH0 Z\nLIGHTING  L AY1 - T IH0 NG\nLIGHTING'S  L AY1 - T IH0 NG Z\nLIGHTLE  L AY1 - T AH0 L\nLIGHTLY  L AY1 T - L IY0\nLIGHTNER  L AY1 T - N ER0\nLIGHTNESS  L AY1 T - N AH0 S\nLIGHTNING  L AY1 T - N IH0 NG\nLIGHTNINGS  L AY1 T - N IH0 NG Z\nLIGHTS  L AY1 T S\nLIGHTSEY  L AY1 T - S IY0\nLIGHTSHIP  L AY1 T - SH IH2 P\nLIGHTSHIPS  L AY1 T - SH IH2 P S\nLIGHTSTONE  L AY1 T - S T OW2 N\nLIGHTWEIGHT  L AY1 T - W EY1 T\nLIGHTY  L AY1 - T IY0\nLIGMAN  L IH1 G - M AH0 N\nLIGNIN  L IH1 G - N IH0 N\nLIGNITE  L IH1 G - N AY2 T\nLIGON  L IH1 - G AH0 N\nLIGUORI  L IY0 - G AO1 - R IY0\nLIJEWSKI  L IH0 - Y EH1 F S - K IY0\nLIKABLE  L AY1 - K AH0 - B AH0 L\nLIKE  L AY1 K\nLIKEABLE  L AY1 - K AH0 - B AH0 L\nLIKED  L AY1 K T\nLIKELIER  L AY1 K - L IY0 - ER0\nLIKELIEST  L AY1 K - L IY0 - AH0 S T\nLIKELIHOOD  L AY1 K - L IY0 - HH UH2 D\nLIKELY  L AY1 K - L IY0\nLIKEN  L AY1 - K AH0 N\nLIKENED  L AY1 - K AH0 N D\nLIKENESS  L AY1 K - N AH0 S\nLIKENESSES  L AY1 K - N AH0 - S IH0 Z\nLIKENING  L AY1 - K AH0 - N IH0 NG\nLIKENS  L AY1 - K AH0 N Z\nLIKES  L AY1 K S\nLIKEWISE  L AY1 K - W AY2 Z\nLIKHACHOV  L IH1 - K AH0 - CH AA0 V\nLIKHYANI  L IH0 - K Y AA1 - N IY0\nLIKING  L AY1 - K IH0 NG\nLIKINS  L IH1 - K IH0 N Z\nLIKUD  L IH1 - K AH0 D\nLIKUD'S  L IH1 - K AH0 D Z\nLIKUD'S(2)  L IY0 - K UW1 D Z\nLIKUD(2)  L IY0 - K UW1 D\nLIL  L IH1 L\nLILA  L IY1 - L AH0\nLILAC  L AY1 - L AE2 K\nLILACS  L AY1 - L AE2 K S\nLILAH  L IH1 - L AH0\nLILCO  L IH1 L - K OW0\nLILCO'S  L IH1 L - K OW0 Z\nLILE  L AY1 L\nLILES  L AY1 L Z\nLILEY  L IH1 - L IY0\nLILI  L IH1 - L IY0\nLILIA  L IY1 - L IY0 - AH0\nLILIAN  L IH1 - L IY0 - AH0 N\nLILIAN(2)  L IH1 - L Y AH0 N\nLILIANA  L IH2 - L IY0 - AE1 - N AH0\nLILIANE  L IH0 - L IY0 - AE1 N\nLILIANE(2)  L IH1 - L IY0 - AH0 N\nLILIAS  L AY1 - L IY0 - AH0 Z\nLILIEN  L IH1 - L IY0 - AH0 N\nLILIENTHAL  L IH1 - L IY0 N - TH AH0 L\nLILIES  L IH1 - L IY0 Z\nLILITH  L IH1 - L IH0 TH\nLILJA  L IY1 - L Y AH0\nLILJEDAHL  L IH1 L - JH IH0 - D AA0 L\nLILJEGREN  L IH1 L - JH IH0 - G R EH0 N\nLILL  L IH1 L\nLILLA  L IH1 - L AH0\nLILLARD  L IH1 - L ER0 D\nLILLE  L IH1 L\nLILLEHAMER  L IH1 - L IY0 - HH AE2 - M ER0\nLILLEHAMER'S  L IH1 - L IY0 - HH AE2 - M ER0 Z\nLILLEHAMMER  L IH1 - L IY0 - HH AE2 - M ER0\nLILLEHAMMER'S  L IH1 - L IY0 - HH AE2 - M ER0 Z\nLILLER  L IH1 - L ER0\nLILLEY  L IH1 - L IY0\nLILLI  L IH1 - L IY0\nLILLIAN  L IH1 - L IY0 - AH0 N\nLILLIAN'S  L IH1 - L IY0 - AH0 N Z\nLILLIANA  L IH0 - L IY0 - AE1 - N AH0\nLILLIBRIDGE  L IH1 - L IH0 - B R IH2 JH\nLILLICH  L IH1 - L IH0 K\nLILLICROP  L IH1 - L IH0 - K R AA0 P\nLILLIE  L IH1 - L IY0\nLILLIPUTIAN  L IH2 - L AH0 - P Y UW1 - SH AH0 N\nLILLIS  L IH1 - L IH0 S\nLILLO  L IH1 - L OW0\nLILLY  L IH1 - L IY0\nLILLY'S  L IH1 - L IY0 Z\nLILT  L IH1 L T\nLILY  L IH1 - L IY0\nLILY'S  L IH1 - L IY2 Z\nLILYAN  L IH1 - L IY0 - AH0 N\nLILYBELL  L IH1 - L IY0 - B EH2 L\nLIM  L IH1 M\nLIMA  L AY1 - M AH0\nLIMA(2)  L IY1 - M AH0\nLIMAN  L AY1 - M AH0 N\nLIMAS  L AY1 - M AH0 Z\nLIMAS(2)  L IY1 - M AH0 Z\nLIMB  L IH1 M\nLIMBACH  L IH1 M - B AA2 K\nLIMBAUGH  L IH1 M - B AO2\nLIMBAUGH'S  L IH1 M - B AO2 Z\nLIMBED  L IH1 M D\nLIMBER  L IH1 M - B ER0\nLIMBERG  L IH1 M - B ER0 G\nLIMBERS  L IH1 M - B ER0 Z\nLIMBERT  L IH1 M - B ER0 T\nLIMBLESS  L IH1 M - L AH0 S\nLIMBO  L IH1 M - B OW0\nLIMBRICK  L IH1 M - B R IH0 K\nLIMBS  L IH1 M Z\nLIMBURG  L IH1 M - B ER0 G\nLIME  L AY1 M\nLIMEHOUSE  L AY1 M - HH AW2 S\nLIMELIGHT  L AY1 M - L AY2 T\nLIMERICK  L IH1 - M ER0 - IH0 K\nLIMERICK'S  L IH1 - M ER0 - IH0 K S\nLIMERICKS  L IH1 - M ER0 - IH0 K S\nLIMES  L AY1 M Z\nLIMESTONE  L AY1 M - S T OW2 N\nLIMESTONES  L AY1 M - S T OW2 N Z\nLIMINE  L IH0 - M AY1 N\nLIMINE(2)  L IH0 - M IY1 N\nLIMING  L AY1 - M IH0 NG\nLIMIT  L IH1 - M AH0 T\nLIMITATION  L IH2 - M IH0 - T EY1 - SH AH0 N\nLIMITATIONS  L IH2 - M IH0 - T EY1 - SH AH0 N Z\nLIMITED  L IH1 - M AH0 - T AH0 D\nLIMITED'S  L IH1 - M AH0 - T AH0 D Z\nLIMITED'S(2)  L IH1 - M IH0 - T IH0 D Z\nLIMITED(2)  L IH1 - M IH0 - T IH0 D\nLIMITING  L IH1 - M AH0 - T IH0 NG\nLIMITLESS  L IH1 - M AH0 T - L AH0 S\nLIMITS  L IH1 - M AH0 T S\nLIMITS(2)  L IH1 - M IH0 T S\nLIMMER  L IH1 - M ER0\nLIMNOLOGY  L IH0 M - N AA1 - L AH0 - JH IY0\nLIMO  L IH1 - M OW0\nLIMOGES  L IH0 - M OW1 - JH IH0 Z\nLIMOGES(2)  L AH0 - M OW1 ZH\nLIMON  L IH1 - M AH0 N\nLIMONITE  L AY1 - M AH0 - N AY2 T\nLIMOS  L IH1 - M OW0 Z\nLIMOS(2)  L IY1 - M OW0 Z\nLIMOUSINE  L IH1 - M AH0 - Z IY2 N\nLIMOUSINES  L IH1 - M AH0 - Z IY2 N Z\nLIMP  L IH1 M P\nLIMPED  L IH1 M P T\nLIMPERT  L IH1 M - P ER0 T\nLIMPETS  L IH1 M - P AH0 T S\nLIMPING  L IH1 M - P IH0 NG\nLIMPS  L IH1 M P S\nLIN  L IH1 N\nLINA  L IY1 - N AH0\nLINAFELTER  L IH1 - N AH0 - F EH2 L - T ER0\nLINAFELTER(2)  L AY1 N - AH0 - F EH2 L - T ER0\nLINAGE  L AY1 - N IH0 JH\nLINAM  L IH1 - N AH0 M\nLINARES  L IH1 - N ER0 Z\nLINC  L IH1 NG K\nLINCARE  L IH1 N - K EH2 R\nLINCE  L IH1 N S\nLINCECUM  L IH1 N - S IH0 - K AH0 M\nLINCH  L IH1 N CH\nLINCHPIN  L IH1 N CH - P IH2 N\nLINCICOME  L IH1 N - S IH0 - K OW2 M\nLINCK  L IH1 NG K\nLINCKS  L IH1 NG K S\nLINCOLN  L IH1 NG - K AH0 N\nLINCOLN'S  L IH1 NG - K AH0 N Z\nLINCOLNS  L IH1 NG - K AH0 N Z\nLINCOLNSHIRE  L IH1 NG - K AH0 N - SH IH2 R\nLIND  L IH1 N D\nLINDA  L IH1 N - D AH0\nLINDA'S  L IH1 N - D AH0 Z\nLINDAHL  L IH1 N - D AA2 L\nLINDAMAN  L IH1 N - D AH0 - M AH0 N\nLINDAMOOD  L IH1 N - D AH0 - M UW2 D\nLINDANE  L IH1 N - D EY2 N\nLINDAU  L IH1 N - D AW0\nLINDAUER  L IH1 N - D AW0 - ER0\nLINDBECK  L AY1 N D - B EH0 K\nLINDBERG  L AY1 N D - B ER0 G\nLINDBERGH  L IH1 N D - B ER0 G\nLINDBLAD  L IH1 N D - B L AH0 D\nLINDBLOM  L IH1 N D - B L AH0 M\nLINDBLOOM  L IH1 N D - B L UW2 M\nLINDBURG  L AY1 N D - B ER0 G\nLINDE  L IH1 N D\nLINDEEN  L IH1 N - D IY0 N\nLINDELL  L IH1 N - D AH0 L\nLINDEMAN  L IH1 N D - M AH0 N\nLINDEMANN  L IH1 N - D AH0 - M AH0 N\nLINDEMUTH  L IH1 N - D IH0 - M UW0 TH\nLINDEN  L IH1 N - D AH0 N\nLINDEN'S  L IH1 N - D AH0 N Z\nLINDENBAUM  L AY1 N - D AH0 N - B AW0 M\nLINDENBERG  L IH1 N - D AH0 N - B ER0 G\nLINDENBERGER  L IH1 N - D AH0 N - B ER0 - G ER0\nLINDENMUTH  L IH1 N - D IH0 N - M UW0 TH\nLINDER  L IH1 N - D ER0\nLINDERMAN  L AY1 N - D ER0 - M AH0 N\nLINDFORS  L IH1 N D - F ER0 Z\nLINDGREN  L IH1 N D - G R EH0 N\nLINDH  L IH1 N D\nLINDHOLM  L IH1 N D - HH OW2 L M\nLINDHORST  L IH1 N D - HH AO0 R S T\nLINDIG  L IH1 N - D IH0 G\nLINDLER  L IH1 N D - L ER0\nLINDLEY  L IH1 N D - L IY0\nLINDMAN  L IH1 N D - M AH0 N\nLINDMARK  L IH1 N D - M AA2 R K\nLINDNER  L IH1 N D - N ER0\nLINDNER'S  L IH1 N D - N ER0 Z\nLINDO  L IH1 N - D OW0\nLINDON  L IH1 N - D AH0 N\nLINDOW  L IH1 N - D OW0\nLINDQUIST  L IH1 N D - K W IH2 S T\nLINDROTH  L IH1 N - D R AO2 TH\nLINDSAY  L IH1 N D - Z IY0\nLINDSETH  L IH1 N D - S IH0 TH\nLINDSEY  L IH1 N D - Z IY0\nLINDSEY'S  L IH1 N D - Z IY0 Z\nLINDSKOG  L IH1 N D - S K AH0 G\nLINDSLEY  L IH1 N D S - L IY0\nLINDSTEDT  L IH1 N D - S T IH0 T\nLINDSTRAND  L IH1 N D - S T R AH0 N D\nLINDSTROM  L IH1 N D - S T R AH0 M\nLINDVALL  L IH1 N D - V AH0 L\nLINDY  L IH1 N - D IY0\nLINE  L AY1 N\nLINE'S  L AY1 N Z\nLINEAGE  L IH1 - N IY0 - AH0 JH\nLINEAGES  L IH1 - N IY0 - IH0 - JH IH0 Z\nLINEAL  L IH1 - N IY0 - AH0 L\nLINEAR  L IH1 - N IY0 - ER0\nLINEAR'S  L IH1 - N IY0 - ER0 Z\nLINEARLY  L IH1 - N IY0 - ER0 - L IY0\nLINEBACK  L AY1 N - B AE2 K\nLINEBACKER  L AY1 N - B AE2 - K ER0\nLINEBACKERS  L AY1 N - B AE2 - K ER0 Z\nLINEBARGER  L IH1 - N IH0 - B AA0 R - G ER0\nLINEBARGER(2)  L AY1 N - B AA0 R - G ER0\nLINEBAUGH  L IH1 - N IH0 - B AO0\nLINEBERGER  L AY1 N - B ER0 - G ER0\nLINEBERRY  L AY1 N - B EH2 - R IY0\nLINED  L AY1 N D\nLINEHAN  L IH1 - N IH0 - HH AE0 N\nLINEMAN  L AY1 N - M AH0 N\nLINEMEN  L AY1 N - M AH0 N\nLINEN  L IH1 - N AH0 N\nLINENBERGER  L IH1 - N AH0 N - B ER0 - G ER0\nLINENS  L IH1 - N AH0 N Z\nLINER  L AY1 - N ER0\nLINER'S  L AY1 - N ER0 Z\nLINERBOARD  L AY1 - N ER0 - B AO2 R D\nLINERS  L AY1 - N ER0 Z\nLINERS'  L AY1 - N ER0 Z\nLINES  L AY1 N Z\nLINES'  L AY1 N Z\nLINETTE  L IH0 - N EH1 T\nLINEUP  L AY1 N - AH2 P\nLINEUPS  L AY1 N - AH2 P S\nLINEWEAVER  L AY1 N - W IY2 - V ER0\nLINFORD  L IH1 N - F ER0 D\nLING  L IH1 NG\nLINGAFELTER  L IH1 NG - G AH0 - F IH0 L - T ER0\nLINGARD  L IH1 NG - G ER0 D\nLINGELBACH  L IH1 NG - G IH0 L - B AA0 K\nLINGENFELTER  L IH1 NG - G IH0 N - F IH0 L - T ER0\nLINGER  L IH1 NG - G ER0\nLINGER(2)  L IH1 - NG ER0\nLINGERED  L IH1 NG - G ER0 D\nLINGERFELT  L IH1 NG - G ER0 - F EH2 L T\nLINGERIE  L AA1 N - ZH ER0 - EY2\nLINGERING  L IH1 NG - G ER0 - IH0 NG\nLINGERING(2)  L IH1 NG - G R IH0 NG\nLINGERS  L IH1 NG - G ER0 Z\nLINGG  L IH1 NG G\nLINGLE  L IH1 NG - G AH0 L\nLINGNER  L IH1 NG - N ER0\nLINGO  L IH1 NG - G OW0\nLINGUA  L IH1 NG - G W AH0\nLINGUINE  L IH0 NG - G W IY1 - N IY0\nLINGUIST  L IH1 NG - G W IH0 S T\nLINGUISTIC  L IH0 NG - G W IH1 - S T IH0 K\nLINGUISTICALLY  L IH0 NG - G W IH1 - S T IH0 K - L IY0\nLINGUISTICS  L IH0 NG - G W IH1 - S T IH0 K S\nLINGUISTS  L IH1 NG - G W IH0 S T S\nLINGUISTS(2)  L IH1 NG - G W IH0 S S\nLINGUISTS(3)  L IH1 NG - G W IH0 S\nLINGUS  L IH1 NG - G AH0 S\nLINH  L IH1 N\nLINHARDT  L IH1 N - HH AA2 R T\nLINHARES  L IH1 N - HH ER0 Z\nLINHART  L IH1 N - HH AA2 R T\nLINI  L IY1 - N IY0\nLINING  L AY1 - N IH0 NG\nLININGER  L AY1 - N IH0 - NG ER0\nLININGS  L AY1 - N IH0 NG Z\nLINK  L IH1 NG K\nLINK'S  L IH1 NG K S\nLINKAGE  L IH1 NG - K AH0 JH\nLINKAGE(2)  L IH1 NG - K IH0 JH\nLINKAGES  L IH1 NG - K IH0 - JH IH0 Z\nLINKE  L IH1 NG K\nLINKED  L IH1 NG K T\nLINKENHOKER  L IH1 NG - K IH0 N - HH AH0 - K ER0\nLINKER  L IH1 NG - K ER0\nLINKING  L IH1 NG - K IH0 NG\nLINKLETTER  L IH1 NG - K L EH2 - T ER0\nLINKOUS  L IH1 NG - K AH0 S\nLINKS  L IH1 NG K S\nLINKUP  L IH1 NG K - AH2 P\nLINKUPS  L IH1 NG K - AH2 P S\nLINLEY  L IH1 N - L IY0\nLINN  L IH1 N\nLINNANE  L IH1 - N AH0 N\nLINNAS  L IH1 - N AH0 S\nLINNE  L IH1 N\nLINNEA  L IH1 - N IY0 - AH0\nLINNEHAN  L IH1 - N IH0 - HH AE0 N\nLINNELL  L IH1 - N AH0 L\nLINNEMAN  L IH1 N - M AH0 N\nLINNEMANN  L IH1 N - M AH0 N\nLINNET  L IH1 - N IH0 T\nLINNEY  L IH1 - N IY0\nLINNIK  L IH1 - N IH0 K\nLINO  L IY1 - N OW0\nLINOLEUM  L AH0 - N OW1 - L IY0 - AH0 M\nLINOTYPE  L IH1 - N OW0 - T AY2 P\nLINOWES  L IH1 - N OW0 Z\nLINQUIST  L IH1 N - K W IH0 S T\nLINS  L IH1 N Z\nLINSAY  L IH1 N - S EY0\nLINSCOMB  L IH1 N - S K AH0 M\nLINSCOTT  L IH1 N - S K AH0 T\nLINSE  L IH1 N S\nLINSEED  L IH1 N - S IY2 D\nLINSEY  L IH1 N - Z IY0\nLINSEY-WOOLSEY  L IH1 N - Z IY0 - W UH1 L - Z IY0\nLINSKEY  L IH1 N - S K IY0\nLINSKY  L IH1 N - S K IY0\nLINSLEY  L IH1 N S - L IY0\nLINSON  L IH1 N - S AH0 N\nLINSTROM  L IH1 N - S T R AH0 M\nLINT  L IH1 N T\nLINTAS  L IH1 N - T AH0 S\nLINTEL  L IH1 N - T AH0 L\nLINTERS  L IH1 N - T ER0 Z\nLINTHICUM  L IH1 N - TH IH0 - K AH0 M\nLINTNER  L IH1 N T - N ER0\nLINTON  L IH1 N - T AH0 N\nLINTZ  L IH1 N T S\nLINUS  L AY1 - N AH0 S\nLINVILLE  L IY1 N - V IH0 L\nLINWICK  L IH1 N - W IH2 K\nLINWOOD  L IH1 N - W UH2 D\nLINZ  L IH1 N Z\nLINZER  L IH1 N - Z ER0\nLINZEY  L IH1 N - Z IY0\nLINZY  L IH1 N - Z IY0\nLIOMINE  L IY1 - AH0 - M AY0 N\nLION  L AY1 - AH0 N\nLION'S  L AY1 - AH0 N Z\nLIONBERGER  L AY1 - AH0 N - B ER0 - G ER0\nLIONEL  L AY1 - AH0 - N AH0 L\nLIONETTI  L IY0 - AH0 - N EH1 - T IY0\nLIONETTI(2)  L AY0 - AH0 - N EH1 - T IY0\nLIONHEART  L AY1 - AH0 N - HH AA2 R T\nLIONIZE  L AY1 - AH0 - N AY2 Z\nLIONIZED  L AY1 - AH0 - N AY2 Z D\nLIONS  L AY1 - AH0 N Z\nLIOTIER  L IY0 - OW1 - T IY0 - EY2\nLIOTIER(2)  L IY0 - OW1 - T IY0 - ER0\nLIOTTA  L IY0 - OW1 - T AH0\nLIOU  L IY0 - UW1\nLIP  L IH1 P\nLIPA  L IY1 - P AH0\nLIPARI  L IY0 - P AA1 - R IY0\nLIPE  L AY1 P\nLIPFORD  L IH1 P - F ER0 D\nLIPHAM  L IH1 - F AH0 M\nLIPID  L AY1 - P AH0 D\nLIPIDE  L IH0 - P IY1 D\nLIPINSKI  L IH0 - P IH1 N - S K IY0\nLIPKA  L IH1 P - K AH0\nLIPKE  L IH1 P K\nLIPKIN  L IH1 P - K IH0 N\nLIPKIND  L IH1 P - K IH0 N D\nLIPKIND(2)  L IH1 P - K AY0 N D\nLIPMAN  L IH1 P - M AH0 N\nLIPNICK  L IH1 P - N IH2 K\nLIPOPROTEIN  L IH2 - P AH0 - P R OW1 - T IY0 N\nLIPOPROTEINS  L IH2 - P OW0 - P R OW1 - T IY0 N Z\nLIPOSOME  L IH1 - P AH0 - S OW2 M\nLIPOSOMES  L IH1 - P AH0 - S OW2 M Z\nLIPOSUCTION  L IH1 - P OW0 - S AH2 K - SH AH0 N\nLIPOSUCTION(2)  L AY1 - P OW0 - S AH2 K - SH AH0 N\nLIPOVSKY  L IH0 - P AA1 V S - K IY0\nLIPP  L IH1 P\nLIPPA  L IH1 - P AH0\nLIPPARD  L IH1 - P ER0 D\nLIPPE  L IH1 P\nLIPPED  L IH1 P T\nLIPPENS  L IH1 - P AH0 N Z\nLIPPER  L IH1 - P ER0\nLIPPER'S  L IH1 - P ER0 Z\nLIPPERT  L IH1 - P ER0 T\nLIPPI  L IH1 - P IY0\nLIPPINCOTT  L IH1 - P IH0 N - K AH0 T\nLIPPITT  L IH1 - P IH0 T\nLIPPMAN  L IH1 P - M AH0 N\nLIPPMANN  L IH1 P - M AH0 N\nLIPPO  L IH1 - P OW0\nLIPPOLD  L IH1 - P OW2 L D\nLIPPS  L IH1 P S\nLIPPY  L IH1 - P IY0\nLIPS  L IH1 P S\nLIPS'  L IH1 P S\nLIPSCHITZ  L IH1 P - SH IH0 T S\nLIPSCHULTZ  L IH1 P - SH AH0 L T S\nLIPSCHUTZ  L IH1 P - SH AH0 T S\nLIPSCOMB  L IH1 P - S K AH0 M\nLIPSETT  L IH1 P - S IH0 T\nLIPSEY  L IH1 P - S IY0\nLIPSHIE  L IH1 P - SH IY0\nLIPSHUTZ  L IH1 P - SH AH0 T S\nLIPSIG  L IH1 P - S IH0 G\nLIPSITZ  L IH1 P - S IH0 T S\nLIPSKI  L IH1 P S - K IY2\nLIPSKY  L IH1 P - S K AY2\nLIPSON  L IH1 P - S AH0 N\nLIPSTEIN  L IH1 P - S T IY2 N\nLIPSTEIN(2)  L IH1 P - S T AY2 N\nLIPSTICK  L IH1 P - S T IH2 K\nLIPSTICKS  L IH1 P - S T IH2 K S\nLIPTAK  L IH1 P - T AH0 K\nLIPTON  L IH1 P - T AH0 N\nLIPTON'S  L IH1 P - T AH0 N Z\nLIPUMA  L IY0 - P UW1 - M AH0\nLIQUEFACTION  L IH2 - K W AH0 - F AE1 K - SH AH0 N\nLIQUEFIED  L IH1 - K W AH0 - F AY2 D\nLIQUEFY  L IH1 - K W AH0 - F AY2\nLIQUEUR  L IH0 - K ER1\nLIQUEURS  L IH0 - K ER1 Z\nLIQUID  L IH1 - K W AH0 D\nLIQUID(2)  L IH1 - K W IH0 D\nLIQUIDATE  L IH1 - K W IH0 - D EY2 T\nLIQUIDATED  L IH1 - K W IH0 - D EY2 - T IH0 D\nLIQUIDATES  L IH1 - K W IH0 - D EY2 T S\nLIQUIDATING  L IH1 - K W IH0 - D EY2 - T IH0 NG\nLIQUIDATION  L IH2 - K W IH0 - D EY1 - SH AH0 N\nLIQUIDATIONS  L IH2 - K W IH0 - D EY1 - SH AH0 N Z\nLIQUIDATOR  L IH1 - K W IH0 - D EY2 - T ER0\nLIQUIDATORS  L IH1 - K W IH0 - D EY2 - T ER0 Z\nLIQUIDE  L IH0 - K W AY1 D\nLIQUIDITIES  L IH0 - K W IH1 - D AH0 - T IY0 Z\nLIQUIDITY  L IH0 - K W IH1 - D AH0 - T IY0\nLIQUIDITY(2)  L IH0 - K W IH1 - D IH0 - T IY0\nLIQUIDS  L IH1 - K W AH0 D Z\nLIQUIDS(2)  L IH1 - K W IH0 D Z\nLIQUN  L IH0 - K UW1 N\nLIQUOR  L IH1 - K ER0\nLIQUORI  L IY0 - K AO1 - R IY0\nLIQUORS  L IH1 - K ER0 Z\nLIRA  L IH1 - R AH0\nLIRA'S  L IH1 - R AH0 Z\nLIRE  L IH1 - R AH0\nLIRETTE  L ER0 - EH1 T\nLIRO  L IH1 - R OW0\nLIROFF  L IH1 - R AO0 F\nLIS  L IH1 S\nLISA  L IY1 - S AH0\nLISA'S  L IY1 - S AH0 Z\nLISABET  L IH1 - S AH0 - B EH0 T\nLISABETH  L IH1 - S AH0 - B EH0 TH\nLISAK  L IH1 - S AH0 K\nLISANTI  L IH0 - S AE1 N - T IY0\nLISBETH  L IH1 S - B IH0 TH\nLISBON  L IH1 Z - B AH0 N\nLISBY  L IH1 S - B IY0\nLISCO  L IH1 - S K OW0\nLISCOM  L IH1 S - K AH0 M\nLISE  L AY1 Z\nLISEC  L IH1 - Z AH0 K\nLISENBEE  L IH0 - S EH1 N - B IY0\nLISENBEE(2)  L IH1 - S AH0 N - B IY0\nLISENBY  L IH1 - S IH0 N - B IY0\nLISETTE  L IH0 - S EH1 T\nLISH  L IH1 SH\nLISHMAN  L IH1 SH - M AH0 N\nLISI  L IY1 - S IY0\nLISIECKI  L IH0 - S IY1 T S - K IY0\nLISK  L IH1 S K\nLISKA  L IH1 - S K AH0\nLISKE  L IH1 S K\nLISKEY  L IH1 S - K IY0\nLISKO  L IH1 - S K OW0\nLISLE  L AY1 - AH0 L\nLISMAN  L IH1 Z - M AH0 N\nLISOWSKI  L IH0 - S AO1 F S - K IY0\nLISP  L IH1 S P\nLISS  L IH1 S\nLISSA  L IH1 - S AH0\nLISSACK  L IH1 - S AH0 K\nLISSIE  L IH1 - S IY0\nLISSNER  L IH1 S - N ER0\nLISSY  L IH1 - S IY0\nLIST  L IH1 S T\nLIST'S  L IH1 S T S\nLISTED  L IH1 - S T AH0 D\nLISTED(2)  L IH1 - S T IH0 D\nLISTEN  L IH1 - S AH0 N\nLISTENED  L IH1 - S AH0 N D\nLISTENER  L IH1 - S AH0 N - ER0\nLISTENER(2)  L IH1 S - N ER0\nLISTENERS  L IH1 - S AH0 N - ER0 Z\nLISTENERS(2)  L IH1 S - N ER0 Z\nLISTENING  L IH1 - S AH0 N - IH0 NG\nLISTENING(2)  L IH1 S - N IH0 NG\nLISTENS  L IH1 - S AH0 N Z\nLISTER  L IH1 - S T ER0\nLISTERIA  L IH0 - S T IH1 - R IY0 - AH0\nLISTERINE  L IH1 - S T ER0 - IY2 N\nLISTERINES  L IH1 - S T ER0 - IY2 N Z\nLISTING  L IH1 - S T IH0 NG\nLISTINGS  L IH1 - S T IH0 NG Z\nLISTLESS  L IH1 S T - L AH0 S\nLISTLESSLY  L IH1 S T - L AH0 S - L IY0\nLISTON  L IH1 - S T AH0 N\nLISTS  L IH1 S T S\nLISTS(2)  L IH1 S S\nLISTS(3)  L IH1 S\nLISZEWSKI  L IH0 - SH EH1 F S - K IY0\nLISZKA  L IH1 SH - K AH0\nLISZT  L IH1 S T\nLIT  L IH1 T\nLITA  L IY1 - T AH0\nLITAKER  L IH1 - T EY0 - K ER0\nLITALIEN  L IH1 - T AH0 - L IY0 N\nLITAN  L AY1 - T AH0 N\nLITANIES  L IH1 - T AH0 - N IY0 Z\nLITANY  L IH1 - T AH0 - N IY0\nLITARO  L IH0 - T AA1 - R OW0\nLITCHFIELD  L IH1 CH - F IY0 L D\nLITCHFIELD'S  L IH1 CH - F IY0 L D Z\nLITCHFORD  L IH1 CH - F ER0 D\nLITCHFORD'S  L IH1 CH - F ER0 D Z\nLITCO  L IH1 T - K OW2\nLITCO'S  L IH1 T - K OW2 Z\nLITE  L AY1 T\nLITEM  L AY1 - T EH0 M\nLITEM(2)  L IY1 - T EH0 M\nLITER  L IY1 - T ER0\nLITERACY  L IH1 - T ER0 - AH0 - S IY0\nLITERAL  L IH1 - T ER0 - AH0 L\nLITERALLY  L IH1 - T ER0 - AH0 - L IY0\nLITERALLY(2)  L IH1 - T R AH0 - L IY0\nLITERARY  L IH1 - T ER0 - EH2 - R IY0\nLITERATE  L IH1 - T ER0 - AH0 T\nLITERATI  L IH2 - T ER0 - AA1 - T IY0\nLITERATURE  L IH1 - T ER0 - AH0 - CH ER0\nLITERATURNAYA  L IH0 - T EH2 - R AH0 - T ER0 - N AY1 - AH0\nLITERS  L IY1 - T ER0 Z\nLITES  L AY1 T S\nLITHE  L AY1 DH\nLITHERLAND  L IH1 - TH ER0 - L AH0 N D\nLITHGOW  L IH1 TH - G AW0\nLITHIC  L IH1 - TH IH0 K\nLITHIUM  L IH1 - TH IY0 - AH0 M\nLITHOGRAPH  L IH1 - TH AH0 - G R AE2 F\nLITHOGRAPHIC  L IH2 - TH AH0 - G R AE1 - F IH0 K\nLITHOGRAPHS  L IH1 - TH AH0 - G R AE2 F S\nLITHOGRAPHY  L AH0 - TH AA1 - G R AH0 - F IY0\nLITHOTRIPTER  L IH1 - TH AH0 - T R IH2 P - T ER0\nLITHUANIA  L IH2 - TH AH0 - W EY1 - N IY0 - AH0\nLITHUANIA'S  L IH2 - TH AH0 - W EY1 - N IY0 - AH0 Z\nLITHUANIAN  L IH2 - TH AH0 - W EY1 - N IY0 - AH0 N\nLITHUANIANS  L IH2 - TH AH0 - W EY1 - N IY0 - AH0 N Z\nLITIGANT  L IH1 - T IH0 - G AH0 N T\nLITIGANTS  L IH1 - T IH0 - G AH0 N T S\nLITIGATE  L IH1 - T IH0 - G EY2 T\nLITIGATED  L IH1 - T IH0 - G EY2 - T IH0 D\nLITIGATING  L IH1 - T IH0 - G EY2 - T IH0 NG\nLITIGATION  L IH2 - T AH0 - G EY1 - SH AH0 N\nLITIGATIONS  L IH2 - T AH0 - G EY1 - SH AH0 N Z\nLITIGATOR  L IH1 - T AH0 - G EY2 - T ER0\nLITIGATORS  L IH1 - T AH0 - G EY2 - T ER0 Z\nLITIGIOUS  L IH0 - T IH1 - JH AH0 S\nLITIGIOUS(2)  L IH1 - T IH0 - JH AH0 S\nLITKE  L IH1 T - K IY0\nLITLE  L AY1 - T AH0 L\nLITMAN  L IH1 T - M AH0 N\nLITMUS  L IH1 T - M AH0 S\nLITS  L IH1 T S\nLITSEY  L IH1 T - S IY0\nLITT  L IH1 T\nLITTEKEN  L IH1 - T IH0 - K AH0 N\nLITTELL  L IH1 - T AH0 L\nLITTEN  L IH1 - T AH0 N\nLITTER  L IH1 - T ER0\nLITTERAL  L IH1 - T ER0 - AH0 L\nLITTERED  L IH1 - T ER0 D\nLITTERING  L IH1 - T ER0 - IH0 NG\nLITTERS  L IH1 - T ER0 Z\nLITTIG  L IH1 - T IH0 G\nLITTLE  L IH1 - T AH0 L\nLITTLE'S  L IH1 - T AH0 L Z\nLITTLEBOY  L IH1 - T AH0 L - B OY2\nLITTLECHILD  L IH1 - T AH0 L - CH AY2 L D\nLITTLEFIELD  L IH1 - T AH0 L - F IY2 L D\nLITTLEFORD  L IH1 - T AH0 L - F ER0 D\nLITTLEJOHN  L IH1 - T AH0 L - JH AA2 N\nLITTLEPAGE  L IH1 - T AH0 L - P EY2 JH\nLITTLER  L IH1 - T AH0 L - ER0\nLITTLER(2)  L IH1 T - L ER0\nLITTLES  L IH1 - T AH0 L Z\nLITTLEST  L IH1 - T AH0 L - AH0 S T\nLITTLETON  L IH1 - T AH0 L - T AH0 N\nLITTLEWOOD  L IH1 - T AH0 L - W UH2 D\nLITTMAN  L IH1 T - M AH0 N\nLITTMANN  L IH1 T - M AH0 N\nLITTON  L IH1 - T AH0 N\nLITTON'S  L IH1 - T AH0 N Z\nLITTORAL  L IH1 - T ER0 - AH0 L\nLITTRELL  L IH1 - T R AH0 L\nLITTS  L IH1 T S\nLITTY  L IH1 - T IY0\nLITURGICAL  L AH0 - T ER1 - JH IH0 - K AH0 L\nLITURGY  L IH1 - T ER0 - JH IY0\nLITVACK  L IH1 T - V AE0 K\nLITVAK  L IH1 T - V AH0 K\nLITVIN  L IH1 T - V IH0 N\nLITWACK  L IH1 T - W AO0 K\nLITWAK  L IH1 T - W AH0 K\nLITWILLER  L IH0 T - W IH1 - L ER0\nLITWIN  L IH1 T - W IH0 N\nLITZ  L IH1 T S\nLITZENBERG  L IH1 T - Z AH0 N - B ER0 G\nLITZENBERGER  L IH1 T - Z AH0 N - B ER0 - G ER0\nLITZINGER  L IH1 T - Z IH0 - NG ER0\nLIU  L Y UW1\nLIUZZA  L IY0 - UW1 T - S AH0\nLIUZZI  L IY0 - UW1 T - S IY0\nLIV  L IH1 V\nLIVABLE  L IH1 - V AH0 - B AH0 L\nLIVE  L AY1 V\nLIVE(2)  L IH1 V\nLIVED  L AY1 V D\nLIVED(2)  L IH1 V D\nLIVELIER  L AY1 V - L IY0 - ER0\nLIVELIEST  L AY1 V - L IY2 - AH0 S T\nLIVELIHOOD  L AY1 V - L IY0 - HH UH2 D\nLIVELIHOODS  L AY1 V - L IY0 - HH UH2 D Z\nLIVELINESS  L AY1 V - L IY0 - N AH0 S\nLIVELY  L AY1 V - L IY0\nLIVEN  L AY1 - V AH0 N\nLIVENED  L AY1 - V AH0 N D\nLIVENGOOD  L IH1 - V IH0 N - G UH0 D\nLIVER  L IH1 - V ER0\nLIVERGOOD  L IH1 - V ER0 - G UH2 D\nLIVERIED  L IH1 - V R IY0 D\nLIVERMAN  L IH1 - V ER0 - M AH0 N\nLIVERMORE  L IH0 - V ER0 - M AO1 R\nLIVERNOIS  L IH1 - V ER0 N - W AA2\nLIVERPOOL  L IH1 - V ER0 - P UW2 L\nLIVERS  L IH1 - V ER0 Z\nLIVERWORT  L IH1 - V ER0 - W ER0 T\nLIVERWORTS  L IH1 - V ER0 - W ER0 T S\nLIVERY  L IH1 - V ER0 - IY0\nLIVES  L IH1 V Z\nLIVES'  L AY1 V Z\nLIVES(2)  L AY1 V Z\nLIVESAY  L IH1 - V IH0 - S EY0\nLIVESEY  L IH1 - V IH0 - S IY0\nLIVESTOCK  L AY1 V - S T AA2 K\nLIVEZEY  L IH1 - V IH0 - Z IY0\nLIVIA  L IH1 - V IY0 - AH0\nLIVID  L IH1 - V IH0 D\nLIVIDITY  L IH0 - V IH1 - D IH0 - T IY0\nLIVIN'  L IH1 - V IH0 N\nLIVING  L IH1 - V IH0 NG\nLIVINGOOD  L IH1 - V IH0 N - G UH2 D\nLIVINGROOM  L IH1 - V IH0 NG - R UW2 M\nLIVINGROOMS  L IH1 - V IH0 NG - R UW2 M Z\nLIVINGS  L IH1 - V IH0 NG Z\nLIVINGSTON  L IH1 - V IH0 NG - S T AH0 N\nLIVINGSTON'S  L IH1 - V IH0 NG - S T AH0 N Z\nLIVINGSTONE  L IH1 - V IH0 NG - S T OW2 N\nLIVINGSTONE'S  L IH1 - V IH0 NG - S T OW2 N Z\nLIVINGWELL  L IH1 - V IH0 NG - W EH2 L\nLIVINGWELL'S  L IH1 - V IH0 NG - W EH2 L Z\nLIVOLSI  L IY0 - V OW1 L - S IY0\nLIVONIA  L IH0 - V OW1 - N Y AH0\nLIVOR  L IH0 - V AO1 R\nLIVOTI  L IY0 - V OW1 - T IY0\nLIVSEY  L IH1 V - Z IY0\nLIVVIE  L IH1 - V IY0\nLIZ  L IH1 Z\nLIZA  L IY1 - Z AH0\nLIZABETH  L IH1 - Z AH0 - B EH0 TH\nLIZAK  L IH1 - Z AH0 K\nLIZARD  L IH1 - Z ER0 D\nLIZARD'S  L IH1 - Z ER0 D Z\nLIZARDS  L IH1 - Z ER0 D Z\nLIZARRAGA  L IY0 - Z AA0 - R AA1 - G AH0\nLIZHI  L IH1 - Z IY0\nLIZOTTE  L IH0 - Z AO1 T\nLIZZIE  L IH1 - Z IY0\nLIZZY  L IH1 - Z IY0\nLJUBOMIR  L Y UW1 - B OW0 - M IH2 R\nLLAMA  L AA1 - M AH0\nLLAMAS  L AA1 - M AH0 Z\nLLANA  L AE1 - N AH0\nLLANAS  L AE1 - N AH0 Z\nLLANES  L EY1 N Z\nLLANO  L AA1 - N OW0\nLLANOS  L AA1 - N OW0 Z\nLLERENA  L EH0 - R EY1 - N AH0\nLLEWELLYN  L UW2 - EH1 - L IH0 N\nLLEWELYN  L UW1 - IH0 - L IH0 N\nLLORENS  L AO0 - R EY1 - AH0 N Z\nLLORENTE  L AO0 - R EY1 N - T EY0\nLLOSA  L OW1 - S AH0\nLLOSA'S  L OW1 - S AH0 Z\nLLOVIO  L OW1 - V IY0 - OW0\nLLOYD  L OY1 D\nLLOYD'S  L OY1 D Z\nLLOYDS  L OY1 D Z\nLLOYDS'  L OY1 D Z\nLN  L EY1 N\nLO  L OW1\nLO'S  L OW1 Z\nLOAD  L OW1 D\nLOADED  L OW1 - D AH0 D\nLOADED(2)  L OW1 - D IH0 D\nLOADER  L OW1 - D ER0\nLOADERS  L OW1 - D ER0 Z\nLOADHOLT  L OW1 D - HH OW2 L T\nLOADING  L OW1 - D IH0 NG\nLOADINGS  L OW1 - D IH0 NG Z\nLOADMAN  L OW1 D - M AH0 N\nLOADMAN'S  L OW1 D - M AH0 N Z\nLOADS  L OW1 D Z\nLOAF  L OW1 F\nLOAFER  L OW1 - F ER0\nLOAFERS  L OW1 - F ER0 Z\nLOAFS  L OW1 F S\nLOAIZA  L OW0 - AA0 - IY1 - Z AH0\nLOAM  L OW1 M\nLOAMY  L OW1 - M IY0\nLOAN  L OW1 N\nLOAN'S  L OW1 N Z\nLOANED  L OW1 N D\nLOANING  L OW1 - N IH0 NG\nLOANLOSS  L OW1 N - L AO2 S\nLOANS  L OW1 N Z\nLOANS'  L OW1 N Z\nLOAR  L AO1 R\nLOATH  L OW1 TH\nLOATHE  L OW1 DH\nLOATHED  L OW1 DH D\nLOATHING  L OW1 - TH IH0 NG\nLOATHSOME  L OW1 DH - S AH0 M\nLOATHSOME(2)  L OW1 TH - S AH0 M\nLOAVES  L OW1 V Z\nLOB  L AA1 B\nLOBATO  L OW0 - B AA1 - T OW0\nLOBAUGH  L AA1 - B AO0\nLOBB  L AA1 B\nLOBBAN  L AA1 - B AH0 N\nLOBBED  L AA1 B D\nLOBBIA  L AA1 - B IY0 - AH0\nLOBBIED  L AA1 - B IY0 D\nLOBBIES  L AA1 - B IY0 Z\nLOBBING  L AA1 - B IH0 NG\nLOBBY  L AA1 - B IY0\nLOBBY'S  L AA1 - B IY0 Z\nLOBBYING  L AA1 - B IY0 - IH0 NG\nLOBBYIST  L AA1 - B IY0 - AH0 S T\nLOBBYISTS  L AA1 - B IY0 - IH0 S T S\nLOBBYISTS'  L AA1 - B IY0 - IH0 S T S\nLOBBYISTS(2)  L AA1 - B IY0 - IH0 S S\nLOBBYISTS(3)  L AA1 - B IY0 - IH0 S\nLOBDELL  L AA1 B - D AH0 L\nLOBE  L OW1 B\nLOBED  L OW1 B D\nLOBEL  L OW1 - B AH0 L\nLOBELL  L OW0 - B EH1 L\nLOBELLO  L OW0 - B EH1 - L OW0\nLOBER  L OW1 - B ER0\nLOBERG  L OW1 - B ER0 G\nLOBES  L OW1 B Z\nLOBIANCO  L OW0 - B IY0 - AA1 N - K OW0\nLOBLAW  L AA0 - B L AO1\nLOBLOLLY  L AA1 - B L AA2 - L IY0\nLOBO  L OW1 - B OW0\nLOBOS  L OW1 - B OW0 S\nLOBOSCO  L OW0 - B OW1 - S K OW0\nLOBOTOMY  L OW1 - B OW2 - T OW2 - M IY0\nLOBS  L AA1 B Z\nLOBSTER  L AA1 B - S T ER0\nLOBSTER'S  L AA1 B - S T ER0 Z\nLOBSTERMAN  L AA1 B - S T ER0 - M AH0 N\nLOBSTERMEN  L AA1 B - S T ER0 - M IH0 N\nLOBSTERS  L AA1 B - S T ER0 Z\nLOBUE  L OW1 - B W EH0\nLOBULES  L AA1 - B Y UW2 L Z\nLOCA  L OW1 - K AH0\nLOCADIA  L OW0 - K EY1 - D IY0 - AH0\nLOCAL  L OW1 - K AH0 L\nLOCAL'S  L OW1 - K AH0 L Z\nLOCALE  L OW0 - K AE1 L\nLOCALES  L OW0 - K AE1 L Z\nLOCALITIES  L OW0 - K AE1 - L IH0 - T IY0 Z\nLOCALITY  L OW0 - K AE1 - L AH0 - T IY0\nLOCALIZATION  L OW2 - K AH0 - L AH0 - Z EY1 - SH AH0 N\nLOCALIZE  L OW1 - K AH0 - L AY2 Z\nLOCALIZED  L OW1 - K AH0 - L AY2 Z D\nLOCALLY  L OW1 - K AH0 - L IY0\nLOCALS  L OW1 - K AH0 L Z\nLOCASCIO  L AH0 - K AE1 - S IY0 - OW0\nLOCASTRO  L AH0 - K AE1 - S T R OW0\nLOCATE  L OW1 - K EY2 T\nLOCATED  L OW1 - K EY2 - T AH0 D\nLOCATED(2)  L OW1 - K EY2 D\nLOCATELLI  L OW0 - K AA0 - T EH1 - L IY0\nLOCATES  L OW1 - K EY2 T S\nLOCATING  L OW1 - K EY2 - T IH0 NG\nLOCATION  L OW0 - K EY1 - SH AH0 N\nLOCATIONS  L OW0 - K EY1 - SH AH0 N Z\nLOCATOR  L OW1 - K EY2 - T ER0\nLOCEY  L OW1 - S IY0\nLOCH  L AA1 K\nLOCHER  L AA1 - K ER0\nLOCHHEAD  L AA1 K - HH EH2 D\nLOCHNER  L AA1 K - N ER0\nLOCHRIDGE  L AA1 - K R IH0 JH\nLOCI  L OW1 - K IY0\nLOCI(2)  L OW1 - K AY0\nLOCICERO  L OW0 - CH IY0 - CH EH1 - R OW0\nLOCK  L AA1 K\nLOCKA  L AA1 - K AH0\nLOCKABY  L AA1 - K AH0 - B IY0\nLOCKAMY  L AA1 - K AH0 - M IY0\nLOCKARD  L AA1 - K ER0 D\nLOCKART  L AA1 - K AA2 R T\nLOCKDOWN  L AA1 K - D AW2 N\nLOCKE  L AA1 K\nLOCKE-OBER  L AA2 - K OW1 - B ER0\nLOCKED  L AA1 K T\nLOCKEN  L AA1 - K AH0 N\nLOCKER  L AA1 - K ER0\nLOCKERBIE  L AA1 - K ER0 - B IY0\nLOCKERBY  L AA1 - K ER0 - B IY0\nLOCKERMAN  L AA1 - K ER0 - M AH0 N\nLOCKERS  L AA1 - K ER0 Z\nLOCKERT  L AA1 - K ER0 T\nLOCKETT  L AA1 - K IH0 T\nLOCKETT'S  L AA1 - K AH0 T S\nLOCKEY  L AA1 - K IY0\nLOCKHART  L AA1 K - HH AA2 R T\nLOCKHEED  L AA1 K - HH IY2 D\nLOCKHEED'S  L AA1 K - HH IY2 D Z\nLOCKIE  L AA1 - K IY0\nLOCKING  L AA1 - K IH0 NG\nLOCKLAIR  L AA1 K - L ER0\nLOCKLAR  L AA1 K - L ER0\nLOCKLEAR  L AA1 K - L ER0\nLOCKLEY  L AA1 K - L IY0\nLOCKLIN  L AA1 K - L IH0 N\nLOCKMAN  L AA1 K - M AH0 N\nLOCKMILLER  L AA1 K - M IH2 - L ER0\nLOCKNER  L AA1 K - N ER0\nLOCKNEY  L AA1 K - N EY0\nLOCKNEY(2)  L AA1 K - N IY0\nLOCKNEYS  L AA1 K - N EY0 Z\nLOCKNEYS(2)  L AA1 K - N IY0 Z\nLOCKOUT  L AA1 K - AW2 T\nLOCKOUTS  L AA1 K - AW2 T S\nLOCKPORT  L AA1 K - P AO2 R T\nLOCKREM  L AA1 - K R IH0 M\nLOCKRIDGE  L AA1 - K R IH2 JH\nLOCKS  L AA1 K S\nLOCKSMITH  L AA1 K - S M IH2 TH\nLOCKSTEP  L AA1 K - S T EH2 P\nLOCKUP  L AA1 K - AH2 P\nLOCKWOOD  L AA1 K - W UH2 D\nLOCKWOOD'S  L AA1 K - W UH2 D Z\nLOCKYER  L AA1 - K Y ER0\nLOCO  L OW1 - K OW0\nLOCOCO  L OW0 - K OW1 - K OW0\nLOCOMOTION  L OW2 - K AH0 - M OW1 - SH AH0 N\nLOCOMOTIVE  L OW2 - K AH0 - M OW1 - T IH0 V\nLOCOMOTIVES  L OW2 - K AH0 - M OW1 - T IH0 V Z\nLOCOMOTOR  L OW2 - K AH0 - M OW1 - T ER0\nLOCONTE  L OW0 - K OW1 N - T IY0\nLOCSIN  L AA1 K - S IH0 N\nLOCTITE  L AA1 K - T AY2 T\nLOCURTO  L OW0 - K UH1 R - T OW0\nLOCUS  L OW1 - K AH0 S\nLOCUST  L OW1 - K AH0 S T\nLOCUSTS  L OW1 - K AH0 S T S\nLOCUSTS(2)  L OW1 - K AH0 S S\nLOCUSTS(3)  L OW1 - K AH0 S\nLOCY  L OW1 - S IY0\nLODATO  L OW0 - D AA1 - T OW0\nLODE  L OW1 D\nLODEMA  L OW0 - D EH1 - M AH0\nLODEN  L OW1 - D AH0 N\nLODER  L OW1 - D ER0\nLODES  L OW1 D Z\nLODESTAR  L OW1 D - S T AA2 R\nLODESTONE  L OW1 D - S T OW2 N\nLODGE  L AA1 JH\nLODGE'S  L AA1 - JH IH0 Z\nLODGED  L AA1 JH D\nLODGEPOLE  L AA1 JH - P OW2 L\nLODGES  L AA1 - JH AH0 Z\nLODGES(2)  L AA1 - JH IH0 Z\nLODGING  L AA1 - JH IH0 NG\nLODGINGS  L AA1 - JH IH0 NG Z\nLODI  L OW1 - D AY0\nLODICO  L OW0 - D IY1 - K OW0\nLODLEY  L AA1 D - L IY0\nLODWICK  L AA1 D - W IH0 K\nLODWRICK  L AA1 - D R IH0 K\nLOE  L OW1\nLOEB  L OW1 B\nLOEBER  L OW1 - B ER0\nLOEFFEL  L OW1 - F AH0 L\nLOEFFELHOLZ  L OW1 - F IH0 L - HH OW0 L Z\nLOEFFLER  L OW1 F - L ER0\nLOEHMANN  L OW1 - M AH0 N\nLOEHMANN'S  L OW1 - M AH0 N Z\nLOEHR  L AO1 R\nLOELLA  L OW2 - EH1 - L AH0\nLOEPER  L OW1 - P ER0\nLOEPFE  L OW1 P - F IY0\nLOERA  L AO1 - R AH0\nLOESCH  L OW1 SH\nLOESCHE  L OW1 SH\nLOESCHER  L OW1 - SH ER0\nLOESER  L OW1 - Z ER0\nLOESS  L OW1 - AH0 S\nLOESSER  L EH1 - S ER0\nLOESSER(2)  L AA1 - S ER0\nLOEW  L AA1 - UW0\nLOEW(2)  L OW1\nLOEWE  L AA1 - UW0\nLOEWE(2)  L OW1\nLOEWEN  L AA1 - UW0 - AH0 N\nLOEWENSON  L OW1 - W AH0 N - S AH0 N\nLOEWENSTEIN  L OW1 - AH0 N - S T AY0 N\nLOEWENSTEIN(2)  L OW1 - AH0 N - S T IY0 N\nLOEWENTHAL  L OW1 - IH0 N - TH AH0 L\nLOEWI  L OW1 - W IY0\nLOEWS  L OW1 Z\nLOEWY  L OW1 - IY0\nLOFARO  L OW0 - F AA1 - R OW0\nLOFASO  L OW0 - F AA1 - S OW0\nLOFFREDO  L OW0 - F R EY1 - D OW0\nLOFGREN  L AA1 F - G R EH0 N\nLOFLAND  L AA1 F - L AH0 N D\nLOFLIN  L AA1 F - L IH0 N\nLOFQUIST  L AA1 F - K W IH0 S T\nLOFSTROM  L AA1 F - S T R AH0 M\nLOFT  L AO1 F T\nLOFT'S  L AO1 F T S\nLOFTHOUSE  L AO1 F T - HH AW2 S\nLOFTHUS  L AA1 F - TH IH0 S\nLOFTIER  L AO1 F - T IY0 - ER0\nLOFTIN  L AA1 F - T IH0 N\nLOFTIS  L AA1 F - T IH0 S\nLOFTON  L AA1 F - T AH0 N\nLOFTS  L AO1 F T S\nLOFTUS  L AO1 F - T AH0 S\nLOFTY  L AO1 F - T IY0\nLOG  L AO1 G\nLOGAN  L OW1 - G AH0 N\nLOGAR  L OW1 - G ER0\nLOGARITHM  L AA1 - G ER0 - IH2 - DH AH0 M\nLOGARITHMIC  L AA2 - G ER0 - IH1 DH - M IH0 K\nLOGARITHMS  L AA1 - G ER0 - IH2 - DH AH0 M Z\nLOGBOOK  L AO1 G - B UH2 K\nLOGE  L OW1 JH\nLOGES  L OW1 - JH IH0 Z\nLOGGED  L AO1 G D\nLOGGER  L AA1 - G ER0\nLOGGERHEAD  L AA1 - G ER0 - HH EH2 D\nLOGGERHEADS  L AA1 - G ER0 - HH EH2 D Z\nLOGGERS  L AA1 - G ER0 Z\nLOGGIA  L AA1 - G IY0 - AH0\nLOGGING  L AO1 - G IH0 NG\nLOGGINS  L AA1 - G IH0 N Z\nLOGHRY  L AA1 - G R IY0\nLOGIC  L AA1 - JH IH0 K\nLOGICA  L AA1 - JH IH0 - K AH0\nLOGICAL  L AA1 - JH IH0 - K AH0 L\nLOGICALLY  L AA1 - JH IH0 K - L IY0\nLOGICIAN  L OW0 - JH IH1 - SH AH0 N\nLOGICON  L AA1 - JH IH0 - K AA2 N\nLOGIE  L OW1 - JH IY0\nLOGISTIC  L AH0 - JH IH1 - S T IH0 K\nLOGISTICAL  L AH0 - JH IH1 - S T IH0 - K AH0 L\nLOGISTICALLY  L AH0 - JH IH1 - S T IH0 K - L IY0\nLOGISTICS  L AH0 - JH IH1 - S T IH0 K S\nLOGIUDICE  L OW0 - JH UW1 - D AH0 S\nLOGJAM  L AA1 G - JH AE2 M\nLOGJAMS  L AA1 G - JH AE2 M Z\nLOGO  L OW1 - G OW0\nLOGOGRAM  L AO1 - G AH0 - G R AE2 M\nLOGOGRAMS  L AO1 - G AH0 - G R AE2 M Z\nLOGOGRAPHIC  L AO2 - G AH0 - G R AE1 - F IH0 K\nLOGOS  L OW1 - G OW2 Z\nLOGOTHETIS  L OW2 - G OW0 - TH EH1 - T IH0 S\nLOGRASSO  L OW0 - G R AA1 - S OW0\nLOGS  L AO1 G Z\nLOGSDON  L AA1 G Z - D AH0 N\nLOGSTON  L AA1 G - S T AH0 N\nLOGUE  L OW1 G\nLOGUIDICE  L OW0 - G AY1 - D IH0 S\nLOGWOOD  L AA1 G - W UH2 D\nLOH  L OW1\nLOHENGRIN  L OW1 - AH0 N - G R IH0 N\nLOHMAN  L OW1 - M AH0 N\nLOHMANN  L OW1 - M AH0 N\nLOHMEIER  L OW1 - M AY0 - ER0\nLOHMEYER  L OW1 - M AY0 - ER0\nLOHN  L AA1 N\nLOHNER  L OW1 - N ER0\nLOHNES  L OW1 N Z\nLOHR  L AO1 R\nLOHRENZ  L AO1 - R IH0 N S\nLOHREY  L AA1 - R IY0\nLOHRMAN  L AO1 R - M AH0 N\nLOHRMANN  L AO1 R - M AH0 N\nLOHSE  L OW1 S\nLOIACANO  L OW0 - Y AH0 - K AA1 - N OW0\nLOIACONO  L OW0 - Y AH0 - K OW1 - N OW0\nLOIBL  L OY1 - B AH0 L\nLOIN  L OY1 N\nLOINCLOTH  L OY1 N - K L AO2 TH\nLOIRE  L OY1 R\nLOIS  L OW1 - AH0 S\nLOISE  L UW1 - AH0 S\nLOISE(2)  L UW1 - IY0 S\nLOISEAU  L UW1 - AH0 - S OW2\nLOISEL  L OY0 - Z EH1 L\nLOISELLE  L OY0 - Z EH1 L\nLOITER  L OY1 - T ER0\nLOITERING  L OY1 - T ER0 - IH0 NG\nLOK  L AA1 K\nLOKEN  L OW1 - K AH0 N\nLOKER  L OW1 - K ER0\nLOKEY  L OW1 - K IY0\nLOKKEN  L AA1 - K AH0 N\nLOLA  L OW1 - L AH0\nLOLETA  L OW0 - L EH1 - T AH0\nLOLITA  L OW0 - L IY1 - T AH0\nLOLL  L AA1 L\nLOLLAPALOOZA  L AA2 - L AH0 - P AH0 - L UW1 - Z AH0\nLOLLAPALOOZAS  L AA2 - L AH0 - P AH0 - L UW1 - Z AH0 Z\nLOLLAR  L AA1 - L ER0\nLOLLARD  L AA1 - L ER0 D\nLOLLEY  L AA1 - L IY0\nLOLLI  L AA1 - L IY0\nLOLLING  L AA1 - L IH0 NG\nLOLLIPOP  L AA1 - L IY0 - P AA2 P\nLOLLIPOPS  L AA1 - L IY0 - P AA2 P S\nLOLLIS  L AH0 - L IY1 S\nLOLLY  L AA1 - L IY0\nLOMA  L OW1 - M AH0\nLOMAK  L OW1 - M AE0 K\nLOMAN  L OW1 - M AH0 N\nLOMAS  L OW1 - M AH0 Z\nLOMASNEY  L AA1 - M AH0 S - N IY0\nLOMAX  L OW1 - M AE2 K S\nLOMB  L AA1 M\nLOMBA  L AA1 M - B AH0\nLOMBARD  L AA1 M - B AA0 R D\nLOMBARDI  L AA0 M - B AA1 R - D IY0\nLOMBARDO  L AA0 M - B AA1 R - D OW0\nLOMBARDS  L AA1 M - B AA0 R D Z\nLOMELI  L OW0 - M EH1 - L IY0\nLOMMEN  L OW1 - M AH0 N\nLOMONACO  L OW0 - M OW0 - N AA1 - K OW0\nLOMPOC  L AA1 M - P AA0 K\nLON  L AA1 N\nLONA  L OW1 - N AH0\nLONARDO  L OW0 - N AA1 R - D OW0\nLONAS  L OW1 - N AH0 Z\nLONCAR  L AA1 N - K AA0 R\nLONDO  L AA1 N - D OW0\nLONDON  L AH1 N - D AH0 N\nLONDON'S  L AH1 N - D AH0 N Z\nLONDONDERRY  L AH1 N - D AH0 N - D EH2 - R IY0\nLONDONER  L AH1 N - D AH0 - N ER0\nLONDONERS  L AH1 N - D AH0 - N ER0 Z\nLONDONO  L OW0 N - D OW1 - N OW0\nLONE  L OW1 N\nLONELINESS  L OW1 N - L IY0 - N AH0 S\nLONELY  L OW1 N - L IY0\nLONER  L OW1 - N ER0\nLONERGAN  L AA1 - N ER0 - G AH0 N\nLONERO  L OW0 - N EH1 - R OW0\nLONERS  L OW1 - N ER0 Z\nLONES  L OW1 N Z\nLONESOME  L OW1 N - S AH0 M\nLONETREE  L OW1 N - T R IY2\nLONEY  L OW1 - N IY0\nLONG  L AO1 NG\nLONG'S  L AO1 NG Z\nLONG-OVERDUE  L AO1 NG - OW2 - V ER0 - D UW1\nLONG-RANGE  L AO1 NG - R EY1 N JH\nLONG-TERM  L AO1 NG - T ER1 M\nLONG-WINDED  L AO1 NG - W IH1 N - D IH0 D\nLONGACRE  L AO1 - NG EY2 - K ER0\nLONGAKER  L AA1 NG - G AH0 - K ER0\nLONGAN  L AA1 NG - G AH0 N\nLONGANECKER  L AA1 NG - G AH0 - N EH0 - K ER0\nLONGBOW  L AO1 NG - B OW2\nLONGBRAKE  L AO1 NG - B R EY2 K\nLONGCOR  L OW0 NG G - K AO1 R\nLONGDEN  L AO1 NG - D EH2 N\nLONGE  L AA1 N JH\nLONGED  L AO1 NG D\nLONGENECKER  L AA1 N JH - N EH0 - K ER0\nLONGER  L AO1 NG - G ER0\nLONGERBEAM  L AO1 NG - G ER0 - B IY2 M\nLONGEST  L AO1 NG - G AH0 S T\nLONGEST(2)  L AO1 NG - G IH0 S T\nLONGEVITY  L AO0 N - JH EH1 - V AH0 - T IY0\nLONGFELLOW  L AO1 NG - F EH2 - L OW0\nLONGFIELD  L AO1 NG - F IY2 L D\nLONGHAIR  L AO1 NG - HH EH2 R\nLONGHAND  L AO1 NG - HH AE2 N D\nLONGHI  L OW1 N - G IY0\nLONGHORN  L AO1 NG - HH AO2 R N\nLONGHORNS  L AO1 NG - HH AO2 R N Z\nLONGHOUSE  L AO1 NG - HH AW2 S\nLONGHURST  L AA1 NG - HH ER0 S T\nLONGING  L AO1 - NG IH0 NG\nLONGINGLY  L AO1 - NG IH0 NG - L IY0\nLONGINGS  L AO1 - NG IH0 NG Z\nLONGINO  L OW0 NG - G IY1 - N OW0\nLONGISH  L AO1 - NG IH0 SH\nLONGITUDE  L AA1 N - JH AH0 - T UW2 D\nLONGITUDES  L AA1 N - JH AH0 - T UW2 D Z\nLONGITUDINAL  L AA2 N - JH AH0 - T UW1 - D AH0 - N AH0 L\nLONGLEAF  L AO1 NG - L IY2 F\nLONGLEG  L AO1 NG - L EH2 G\nLONGLEGS  L AO1 NG - L EH2 G Z\nLONGLEY  L AA1 NG - G L IY0\nLONGMAN  L AO1 NG - M AH0 N\nLONGMEYER  L AO1 NG - M AY2 - ER0\nLONGMEYER'S  L AO1 NG - M AY2 - ER0 Z\nLONGMIRE  L AA1 NG - M AY0 R\nLONGMONT  L AO1 NG - M AA2 N T\nLONGMORE  L OW1 NG - M AO0 R\nLONGNECKER  L AO1 NG - N EH2 - K ER0\nLONGO  L AO1 NG - G OW0\nLONGOBARDI  L OW0 NG - G OW0 - B AA1 R - D IY0\nLONGORIA  L OW0 NG - G AO1 - R IY0 - AH0\nLONGPRE  L AA1 NG - P ER0\nLONGRANGE  L AO1 NG - R EY2 N JH\nLONGS  L AO1 NG Z\nLONGSHORE  L AO1 NG - SH AO2 R\nLONGSHOREMEN  L AO1 NG - SH AO1 R - M IH0 N\nLONGSHOREMEN'S  L AO1 NG - SH AO1 R - M IH0 N Z\nLONGSHOT  L AO1 NG - SH AA2 T\nLONGSPUR  L AO1 NG - S P ER2\nLONGSPURS  L AO1 NG - S P ER2 Z\nLONGSTAFF  L AO1 NG - S T AE2 F\nLONGSTANDING  L AO1 NG - S T AE2 N - D IH0 NG\nLONGSTREET  L AO1 NG - S T R IY2 T\nLONGSTRETH  L AA1 NG - S T R EH0 TH\nLONGSWORTH  L AO1 NG Z - W ER2 TH\nLONGTERM  L AO1 NG - T ER2 M\nLONGTIME  L AO1 NG - T AY2 M\nLONGTIN  L AO1 NG - T IH0 N\nLONGTON  L AO1 NG - T AH0 N\nLONGUET  L AO1 NG - W EH2 T\nLONGVIEW  L AO1 NG - V Y UW2\nLONGWELL  L AO1 NG - W EH2 L\nLONGWOOD  L AO1 NG - W UH2 D\nLONGWORTH  L AO1 NG - W ER2 TH\nLONI  L AA1 - N IY0\nLONIGRO  L OW0 - N IY1 - G R OW0\nLONNIE  L AO1 - N IY0\nLONNY  L AO1 - N IY0\nLONON  L OW1 - N AH0 N\nLONRHO  L AA1 N - R OW0\nLONRHO'S  L AA1 N - R OW0 Z\nLONS  L AA1 N Z\nLONSDALE  L AA1 N S - D EY2 L\nLONSKI  L AA1 N - S K IY0\nLONSKY  L AA1 N - S K IY0\nLONSKY'S  L AA1 N - S K IY0 Z\nLONSWAY  L AA1 N - S W EY0\nLOO  L UW1\nLOOART  L UW1 - AA0 R T\nLOOBY  L UW1 - B IY0\nLOOK  L UH1 K\nLOOKABAUGH  L UW1 - K AH0 - B AO0\nLOOKABILL  L UH1 - K AH0 - B IH2 L\nLOOKALIKE  L UH1 - K AH0 - L AY2 K\nLOOKED  L UH1 K T\nLOOKER  L UH1 - K ER0\nLOOKERS  L UH1 - K ER0 Z\nLOOKIN'  L UH1 - K IH0 N\nLOOKING  L UH1 - K IH0 NG\nLOOKINGBILL  L UH1 - K IH0 NG - B IH2 L\nLOOKIT  L UH1 - K IH0 T\nLOOKOUT  L UH1 K - AW2 T\nLOOKS  L UH1 K S\nLOOM  L UW1 M\nLOOMAN  L UW1 - M AH0 N\nLOOMED  L UW1 M D\nLOOMER  L UW1 - M ER0\nLOOMING  L UW1 - M IH0 NG\nLOOMIS  L UW1 - M IH0 S\nLOOMS  L UW1 M Z\nLOON  L UW1 N\nLOONEY  L UW1 - N IY0\nLOONG  L UH1 NG\nLOONS  L UW1 N Z\nLOONY  L UW1 - N IY0\nLOOP  L UW1 P\nLOOPED  L UW1 P T\nLOOPER  L UW1 - P ER0\nLOOPERS  L UW1 - P ER0 Z\nLOOPHOLE  L UW1 P - HH OW2 L\nLOOPHOLES  L UW1 P - HH OW2 L Z\nLOOPS  L UW1 P S\nLOOPY  L UW1 - P IY0\nLOOS  L UW1 Z\nLOOSE  L UW1 S\nLOOSED  L UW1 S T\nLOOSELY  L UW1 S - L IY0\nLOOSEN  L UW1 - S AH0 N\nLOOSENED  L UW1 - S AH0 N D\nLOOSENING  L UW1 - S AH0 - N IH0 NG\nLOOSENS  L UW1 - S AH0 N Z\nLOOSER  L UW1 - S ER0\nLOOSES  L UW1 - S IH0 Z\nLOOSESTRIFE  L UW1 S - S T R AY2 F\nLOOSESTRIFE(2)  L UW1 - S T R AY2 F\nLOOSESTRIFES  L UW1 S - S T R AY2 F S\nLOOSESTRIFES(2)  L UW1 - S T R AY2 F S\nLOOSING  L UW1 - S IH0 NG\nLOOT  L UW1 T\nLOOTED  L UW1 - T AH0 D\nLOOTED(2)  L UW1 - T IH0 D\nLOOTENS  L UW1 - T AH0 N Z\nLOOTER  L UW1 - T ER0\nLOOTERS  L UW1 - T ER0 Z\nLOOTING  L UW1 - T IH0 NG\nLOP  L AA1 P\nLOPARDO  L OW0 - P AA1 R - D OW0\nLOPATA  L OW0 - P AA1 - T AH0\nLOPATIN  L OW0 - P AA0 - T IY1 N\nLOPE  L OW1 P\nLOPEMAN  L OW1 P - M AH0 N\nLOPER  L OW1 - P ER0\nLOPES  L OW1 P S\nLOPEZ  L OW1 - P EH0 Z\nLOPEZ'S  L OW1 - P EH0 - Z IH0 Z\nLOPICCOLO  L OW0 - P IY0 - K OW1 - L OW0\nLOPID  L OW1 - P IH0 D\nLOPINTO  L AH0 - P IH1 N - T OW0\nLOPP  L AA1 P\nLOPPED  L AA1 P T\nLOPPERS  L AA1 - P ER0 Z\nLOPPING  L AA1 - P IH0 NG\nLOPPNOW  L AA1 P - N AW0\nLOPRESTI  L OW0 - P R EH1 - S T IY0\nLOPRESTO  L OW0 - P R EH1 - S T OW0\nLOPRETE  L OW1 - P R IY0 T\nLOPSIDED  L AA1 P - S AY1 - D IH0 D\nLOQUACIOUS  L OW0 - K W EY1 - SH AH0 S\nLOQUAT  L OW1 - K W AA2 T\nLOR  L AO1 R\nLORA  L AO1 - R AH0\nLORAH  L AO1 - R AH0\nLORAIN  L ER0 - EY1 N\nLORAINE  L ER0 - EY1 N\nLORAL  L AO1 - R AH0 L\nLORAL'S  L AO1 - R AH0 L Z\nLORAN  L AO1 - R AE2 N\nLORANCE  L AO1 - R AH0 N S\nLORANG  L AO1 - R AH0 NG\nLORANGER  L AO1 - R EY0 N - JH ER0\nLORBER  L AO1 R - B ER0\nLORCH  L AO1 R K\nLORD  L AO1 R D\nLORD'S  L AO1 R D Z\nLORDEN  L AO1 R - D AH0 N\nLORDI  L AO1 R - D IY0\nLORDS  L AO1 R D Z\nLORDSTOWN  L AO1 R D Z - T AW2 N\nLORDY  L AO1 R - D IY2\nLORE  L AO1 R\nLOREAN  L AO1 - R IY0 - AH0 N\nLOREAN'S  L AO0 - R IY1 N Z\nLOREDO  L AO0 - R EY1 - D OW0\nLOREE  L AO1 - R IY1\nLOREK  L AO1 - R IH0 K\nLORELEI  L AO1 - R IH0 - L AY2\nLORELLI  L AO0 - R EH1 - L IY0\nLORELLO  L AO0 - R EH1 - L OW0\nLOREN  L AO1 - R AH0 N\nLORENA  L AO0 - R EH1 - N AH0\nLORENA'S  L AO0 - R EH1 - N AH0 Z\nLORENC  L AO1 - R IH0 NG K\nLORENCE  L AO1 - R AH0 N S\nLORENE  L AO0 - R IY1 N\nLORENSEN  L AO1 - R IH0 N - S AH0 N\nLORENSON  L AO1 - R IH0 N - S AH0 N\nLORENTZ  L AO1 - R IH0 N T S\nLORENTZEN  L AO1 - R IH0 N T - Z AH0 N\nLORENZ  L ER0 - EH1 N T S\nLORENZA  L AO0 - R EH1 N - Z AH0\nLORENZANA  L AO0 - R EH0 N - Z AE1 - N AH0\nLORENZEN  L AO1 - R IH0 N - Z AH0 N\nLORENZETTI  L AO0 - R EH0 N - Z EH1 - T IY0\nLORENZI  L AO0 - R EH1 N - Z IY0\nLORENZINI  L AO0 - R EH0 N - Z IY1 - N IY0\nLORENZO  L ER0 - EH1 N - Z OW0\nLORENZO'S  L AO0 - R EH1 N - Z OW0 Z\nLORENZO'S(2)  L ER0 - EH1 N - Z OW0 Z\nLORENZO(2)  L AO0 - EH1 N - Z OW0\nLORETO  L AO0 - R EH1 - T OW0\nLORETTA  L ER0 - EH1 - T AH0\nLORETTE  L AO0 - R EH1 T\nLORETTO  L AO0 - R EH1 - T OW0\nLOREY  L AO1 - R IY0\nLORGE  L AO1 R JH\nLORI  L AO1 - R IY0\nLORI'S  L AO1 - R IY0 Z\nLORIA  L AO1 - R IY0 - AH0\nLORICK  L AO1 - R IH0 K\nLORIE  L AO1 - R IY0\nLORILLARD  L AO1 - R AH0 - L AA0 R D\nLORIMAR  L AO1 - R AH0 - M AA0 R\nLORIMAR'S  L AO1 - R AH0 - M AA0 R Z\nLORIMER  L AO1 - R IH0 - M ER0\nLORIMOR  L AO1 - R IH0 - M ER0\nLORIN  L AO1 - R IH0 N\nLORINCZ  L AO1 - R IH0 N CH\nLORING  L AO1 - R IH0 NG\nLORINO  L AO0 - R IY1 - N OW0\nLORIO  L AO1 - R IY0 - OW0\nLORIS  L AO1 - R IH0 S\nLORITA  L AO0 - R IY1 - T AH0\nLORMAN  L AO1 R - M AH0 N\nLORMAND  L AO1 R - M AH0 N D\nLORNA  L AO1 R - N AH0\nLORNE  L AO1 R N\nLORO  L AO1 - R OW0\nLORRAINE  L ER0 - EY1 N\nLORRIE  L AO1 - R IY0\nLORRIES  L AO1 - R IY0 Z\nLORRY  L AO1 - R IY0\nLORSON  L AO1 R - S AH0 N\nLORTEL  L AO1 R - T EH2 L\nLORTIE  L AO1 R - T IY0\nLORTON  L AO1 R - T AH0 N\nLORTZ  L AO1 R T S\nLORUSSO  L AO0 - R UW1 - S OW0\nLORY  L AO1 - R IY0\nLOS  L OW1 S\nLOS(2)  L AO1 S\nLOSADA  L OW0 - S AA1 - D AH0\nLOSASSO  L OW0 - S AA1 - S OW0\nLOSCALZO  L OW0 - S K AA1 L - Z OW0\nLOSCH  L AO1 SH\nLOSCHIAVO  L OW0 S - K IY0 - AA1 - V OW0\nLOSE  L UW1 Z\nLOSEC  L OW1 - Z AH0 K\nLOSEE  L AH0 - S IY1\nLOSEKE  L AA1 - S IH0 K\nLOSER  L UW1 - Z ER0\nLOSERS  L UW1 - Z ER0 Z\nLOSERS'  L OW1 - Z ER0 Z\nLOSES  L UW1 - Z AH0 Z\nLOSES(2)  L UW1 - Z IH0 Z\nLOSEY  L AA1 - S IY0\nLOSH  L AA1 SH\nLOSING  L UW1 - Z IH0 NG\nLOSINSKI  L AH0 - S IH1 N - S K IY0\nLOSITO  L OW0 - S IY1 - T OW0\nLOSO  L OW1 - S OW0\nLOSOYA  L AA1 - S OY0 - AE0\nLOSS  L AO1 S\nLOSSES  L AO1 - S AH0 Z\nLOSSES(2)  L AO1 - S IH0 Z\nLOSSING  L AO1 - S IH0 NG\nLOST  L AO1 S T\nLOSURDO  L OW0 - S UH1 R - D OW0\nLOSURE  L OW1 - ZH ER0\nLOT  L AA1 T\nLOT'S  L AA1 T S\nLOT(2)  L AO1 T\nLOTH  L AA1 TH\nLOTHIAN  L AA1 - TH IY0 - AH0 N\nLOTHROP  L AA1 TH - R AH0 P\nLOTHROP(2)  L OW1 - TH R AH0 P\nLOTHSON  L AA1 TH - S AH0 N\nLOTION  L OW1 - SH AH0 N\nLOTION'S  L OW1 - SH AH0 N Z\nLOTIONS  L OW1 - SH AH0 N Z\nLOTITO  L OW0 - T IY1 - T OW0\nLOTON  L OW1 - T AH0 N\nLOTS  L AA1 T S\nLOTSPEICH  L AA1 T - S P AY0 K\nLOTT  L AA1 T\nLOTT'S  L AA1 T Z\nLOTTA  L AA1 - T AH0\nLOTTE  L AA1 T\nLOTTER  L AA1 - T ER0\nLOTTERIES  L AA1 - T ER0 - IY0 Z\nLOTTERY  L AA1 - T ER0 - IY0\nLOTTES  L AA1 T S\nLOTTIE  L AA1 - T IY0\nLOTTMAN  L AA1 T - M AH0 N\nLOTTO  L AA1 - T OW2\nLOTTO(2)  L AA1 - T OW0\nLOTTS  L AA1 T S\nLOTTY  L AA1 - T IY0\nLOTUS  L OW1 - T AH0 S\nLOTUS'  L OW1 - T AH0 S\nLOTUS'S  L OW1 - T AH0 - S IH0 Z\nLOTZ  L AA1 T S\nLOTZE  L OW1 T Z\nLOU  L UW1\nLOU'S  L UW1 Z\nLOUANNA  L AW0 - AA1 - N AH0\nLOUANNA(2)  L UW0 - AE1 - N AH0\nLOUANNE  L UW0 - AE1 N\nLOUART  L UW1 - AA0 R T\nLOUCK  L AW1 K\nLOUCKS  L AW1 K S\nLOUD  L AW1 D\nLOUDEN  L AW1 - D AH0 N\nLOUDENSLAGER  L AW1 - D IH0 N - S L EY0 - G ER0\nLOUDER  L AW1 - D ER0\nLOUDERBACK  L AW1 - D ER0 - B AE2 K\nLOUDERMILK  L AW1 - D ER0 - M IH2 L K\nLOUDEST  L AW1 - D AH0 S T\nLOUDIN  L UW0 - D AE1 N\nLOUDLY  L AW1 D - L IY0\nLOUDON  L AW1 - D AH0 N\nLOUDSPEAKER  L AW1 D - S P IY2 - K ER0\nLOUDSPEAKERS  L AW1 D - S P IY2 - K ER0 Z\nLOUELLA  L AW0 - EH1 - L AH0\nLOUGANIS  L UW2 - G EY1 - N IH0 S\nLOUGANOS  L UW2 - G AE1 - N OW0 Z\nLOUGEE  L AW1 - JH IY0\nLOUGH  L AW1\nLOUGHEED  L AW1 - IY0 D\nLOUGHERY  L AW1 - ER0 - IY0\nLOUGHLIN  L AO1 - F L IH0 N\nLOUGHMAN  L AW1 - M AH0 N\nLOUGHMILLER  L AW1 - M AH0 - L ER0\nLOUGHNER  L AW1 - N ER0\nLOUGHNEY  L AW1 - N IY0\nLOUGHRAN  L AW1 - R AH0 N\nLOUGHREY  L AW1 - R IY0\nLOUGHRIDGE  L AW1 - R IH0 JH\nLOUGHRY  L AW1 - R IY0\nLOUIE  L UW0 - IY1\nLOUIS  L UW1 - IH0 S\nLOUIS(2)  L UW1 - IY0\nLOUISA  L UW0 - IY1 - Z AH0\nLOUISE  L UW0 - IY1 Z\nLOUISETTE  L W IY0 - Z EH1 T\nLOUISIANA  L UW0 - IY2 - Z IY0 - AE1 - N AH0\nLOUISIANA'S  L UW0 - IY2 - Z IY0 - AE1 - N AH0 Z\nLOUISIANIAN  L UW0 - IY2 - Z IY0 - AE1 - N IY0 - AH0 N\nLOUISIANIANS  L UW0 - IY2 - Z IY0 - AE1 - N IY0 - AH0 N Z\nLOUISVILLE  L UW1 - IY0 - V IH2 L\nLOUK  L AW1 K\nLOUKS  L AW1 K S\nLOUNGE  L AW1 N JH\nLOUNGES  L AW1 N - JH IH0 Z\nLOUNGING  L AW1 N - JH IH0 NG\nLOUNSBERRY  L AW1 N S - B EH0 - R IY0\nLOUP  L UW1 P\nLOUPE  L UW1 P\nLOUQUE  L UW1 K\nLOUR  L AW1 R\nLOURDES  L AO1 R D Z\nLOUREIRO  L UH0 - R EH1 - R OW0\nLOURENCO  L AW0 - R EH1 N - K OW0\nLOURIE  L AW1 - R IY0\nLOURY  L UW1 - R IY0\nLOUSE  L AW1 S\nLOUSINESS  L AW1 - Z IY0 - N AH0 S\nLOUSY  L AW1 - Z IY0\nLOUTH  L AW1 TH\nLOUTHAN  L AW1 - TH AH0 N\nLOUTZENHISER  L AW1 T - Z IH0 N - HH AY0 - Z ER0\nLOUVIER  L AW1 - V IY0 - ER0\nLOUVIERE  L UW1 - V IY0 - EH0 R\nLOUVRE  L UW1 - V R AH0\nLOUW  L UW1\nLOUX  L UW1\nLOVAAS  L AA1 - V AA0 Z\nLOVABLE  L AH1 - V AH0 - B AH0 L\nLOVAGE  L AH1 - V AH0 JH\nLOVALLO  L OW0 - V AA1 - L OW0\nLOVAN  L OW1 - V AH0 N\nLOVAS  L OW1 - V AH0 Z\nLOVASTATIN  L OW0 - V AE1 - S T AH0 - T IH0 N\nLOVATO  L OW0 - V AA1 - T OW0\nLOVE  L AH1 V\nLOVE'S  L AH1 V Z\nLOVEALL  L AH1 - V AO2 L\nLOVECCHIO  L AH0 - V EH1 - K IY0 - OW0\nLOVED  L AH1 V D\nLOVEDAY  L AH1 V - D EY2\nLOVEGROVE  L AH1 V - G R OW2 V\nLOVEJOY  L AH1 V - JH OY2\nLOVELACE  L AH1 V - L EY2 S\nLOVELAND  L AH1 V - L AH0 N D\nLOVELESS  L AH1 V - L AH0 S\nLOVELL  L AH1 - V AH0 L\nLOVELY  L AH1 V - L IY0\nLOVEMAKING  L AH1 V - M EY0 - K IH0 NG\nLOVEN  L AH1 - V AH0 N\nLOVER  L AH1 - V ER0\nLOVER'S  L AH1 - V ER0 Z\nLOVERDE  L OW0 - V EH1 R - D IY0\nLOVERIDGE  L AH1 - V R IH2 JH\nLOVERING  L AH1 - V ER0 - IH0 NG\nLOVERN  L AH1 - V ER0 N\nLOVERS  L AH1 - V ER0 Z\nLOVERS'  L AH1 - V ER0 Z\nLOVES  L AH1 V Z\nLOVETT  L AH1 - V IH0 T\nLOVETTE  L AH1 - V EH1 T\nLOVEWELL  L AH1 V - W EH2 L\nLOVGREN  L AA1 V - G R EH0 N\nLOVICK  L AA1 - V IH0 K\nLOVIE  L AH1 - V IY0\nLOVIN  L OW1 - V IH0 N\nLOVING  L AH1 - V IH0 NG\nLOVINGER  L AH1 - V IH0 - NG ER0\nLOVINGLY  L AH1 - V IH0 NG - L IY0\nLOVINGOOD  L AA1 - V IH0 NG - G UH0 D\nLOVINGS  L AH1 - V IH0 NG Z\nLOVINS  L OW1 - V IH0 N Z\nLOVITT  L AA1 - V IH0 T\nLOVITZ  L OW1 - V IH0 T S\nLOVLER  L AH1 V - L ER0\nLOVLER'S  L AH1 V - L ER0 Z\nLOVVORN  L AA1 - V ER0 N\nLOW  L OW1\nLOW-SPIRITED  L OW1 - S P IH1 - R AH0 - T IH0 D\nLOW-SPIRITEDNESS  L OW1 - S P IH1 - R IH0 - T IH0 D - N AH0 S\nLOWBORN  L OW1 - B AO1 R N\nLOWDEN  L OW1 - D AH0 N\nLOWDER  L OW1 - D ER0\nLOWDERMILK  L OW0 - D ER1 - M IH0 L K\nLOWDOWN  L OW1 - D AW2 N\nLOWE  L OW1\nLOWE'S  L OW1 Z\nLOWEKAMP  L OW1 - K AE2 M P\nLOWELL  L OW1 - AH0 L\nLOWEN  L OW1 - AH0 N\nLOWENBERG  L OW1 - AH0 N - B ER0 G\nLOWENSKY  L OW0 - EH1 N - S K IY0\nLOWENSTEIN  L OW1 - AH0 N - S T AY2 N\nLOWENSTEIN(2)  L OW1 - AH0 N - S T IY2 N\nLOWENTHAL  L OW1 - IH0 N - TH AH0 L\nLOWER  L OW1 - ER0\nLOWERED  L OW1 - ER0 D\nLOWERING  L OW1 - ER0 - IH0 NG\nLOWERS  L OW1 - ER0 Z\nLOWERY  L AW1 - ER0 - IY0\nLOWES  L OW1 Z\nLOWEST  L OW1 - AH0 S T\nLOWEY  L OW1 - IY0\nLOWING  L OW1 - IH0 NG\nLOWINSKY  L AH0 W - IH1 N - S K IY0\nLOWLAND  L OW1 - L AE2 N D\nLOWLANDS  L OW1 - L AE2 N D Z\nLOWLY  L OW1 - L IY0\nLOWMAN  L OW1 - M AH0 N\nLOWN  L AW1 N\nLOWNDES  L OW1 N - D IY0 Z\nLOWNDES(2)  L OW1 N D Z\nLOWNEY  L OW1 - N IY0\nLOWRANCE  L AO1 - R AH0 N S\nLOWREY  L AW1 - R IY0\nLOWRIE  L AO1 - R IY0\nLOWRIMORE  L AO1 - R IY0 - M AO0 R\nLOWRY  L AW1 - R IY0\nLOWS  L OW1 Z\nLOWTHER  L OW1 - DH ER0\nLOWY  L OW1 - IY0\nLOX  L AA1 K S\nLOX(2)  L AH1 K S\nLOY  L OY1\nLOYA  L OY1 - AH0\nLOYAL  L OY1 - AH0 L\nLOYALIST  L OY1 - AH0 - L IH0 S T\nLOYALISTS  L OY1 - AH0 - L IH0 S T S\nLOYALISTS(2)  L OY1 - AH0 - L IH0 S S\nLOYALISTS(3)  L OY1 - AH0 - L IH0 S\nLOYALL  L OY1 - AH0 L\nLOYALLY  L OY1 - AH0 - L IY0\nLOYALTIES  L OY1 - AH0 L - T IY0 Z\nLOYALTON  L OY1 - AH0 L - T IH0 N\nLOYALTY  L OY1 - AH0 L - T IY0\nLOYCE  L OY1 S\nLOYD  L OY1 D\nLOYE  L OY1\nLOYER  L OY1 - ER0\nLOYND  L OY1 N D\nLOYOLA  L OY2 - OW1 - L AH0\nLOZA  L OW1 - Z AH0\nLOZADA  L OW0 - Z AA1 - D AH0\nLOZANO  L OW0 - Z AA1 - N OW0\nLOZANO'S  L OW0 - Z AA1 - N OW0 Z\nLOZEAU  L AH0 - Z OW1\nLOZENGE  L AO1 - Z AH0 N JH\nLOZENGES  L AO1 - Z AH0 N - JH AH0 Z\nLOZIER  L OW1 - Z IY0 - ER0\nLOZINSKI  L AH0 - Z IH1 N - S K IY0\nLOZITO  L OW0 - Z IY1 - T OW0\nLOZON  L OW1 - Z AH0 N\nLOZOYA  L OW0 - Z OY1 - AH0\nLP  EH1 L - P IY1\nLPN  EH1 L - P IY1 - EH1 N\nLS  EH1 - L EH1 S\nLSD  EH2 - L EH2 S - D IY1\nLTD  L IH1 - M IH0 - T IH0 D\nLTD(2)  EH1 L - T IY1 - D IY1\nLU  L UW1\nLUA  L UW1 - AH0\nLUALLEN  L UW0 - AE1 - L AH0 N\nLUANA  L UW0 - AE1 - N AH0\nLUANDA  L UW0 - AA1 N - D AH0\nLUANDA'S  L UW0 - AA1 N - D AH0 Z\nLUANE  L UW1 - AH0 N\nLUAU  L UW1 - AW2\nLUBA  L UW1 - B AH0\nLUBAR  L UW1 - B AA0 R\nLUBARSKY  L AH0 - B AA1 R S - K IY0\nLUBAS  L UW1 - B AH0 Z\nLUBAVITCH  L UW1 - B AH0 - V IH2 CH\nLUBAVITCHER  L UW1 - B AH0 - V IH2 - CH ER0\nLUBAVITCHER'S  L UW1 - B AH0 - V IH2 - CH ER0 Z\nLUBAVITCHER'S(2)  L UW0 - B AH1 - V IH0 - CH ER0 Z\nLUBAVITCHER(2)  L UW0 - B AH1 - V IH0 - CH ER0\nLUBAVITCHERS  L UW1 - B AH0 - V IH2 - CH ER0 Z\nLUBAVITCHERS(2)  L UW0 - B AH1 - V IH0 - CH ER0 Z\nLUBBEN  L AH1 - B AH0 N\nLUBBER  L AH1 - B ER0\nLUBBERS  L AH1 - B ER0 Z\nLUBBOCK  L AH1 - B AH0 K\nLUBE  L UW1 B\nLUBE'S  L UW1 B Z\nLUBECK  L UW1 - B EH2 K\nLUBELL  L UW1 - B EH0 L\nLUBENSKY  L UW0 - B EH1 N - S K IY0\nLUBER  L UW1 - B ER0\nLUBICONS  L UW1 - B IH0 - K AA2 N Z\nLUBIN  L UW1 - B IH0 N\nLUBINSKI  L AH0 - B IH1 N - S K IY0\nLUBINSKY  L AH0 - B IH1 N - S K IY0\nLUBITZ  L UW1 - B IH0 T S\nLUBKE  L AH1 B K\nLUBLIN  L AH1 - B L IH0 N\nLUBOW  L UW1 - B OW0\nLUBOWSKI  L UW0 - B AW1 S - K IY0\nLUBRANO  L UW0 - B R AA1 - N OW0\nLUBRICANT  L UW1 - B R AH0 - K AH0 N T\nLUBRICANTS  L UW1 - B R AH0 - K AH0 N T S\nLUBRICANTS(2)  L UW1 - B R IH0 - K AH0 N T S\nLUBRICANTS(3)  L UW1 - B R AH0 - K AH0 N S\nLUBRICANTS(4)  L UW1 - B R IH0 - K AH0 N S\nLUBRICATE  L UW1 - B R IH0 - K EY2 T\nLUBRICATED  L UW1 - B R AH0 - K EY2 - T IH0 D\nLUBRICATING  L UW1 - B R AH0 - K EY2 - T IH0 NG\nLUBRICATION  L UW2 - B R IH0 - K EY1 - SH AH0 N\nLUBRIZOL  L UW1 - B R IH0 - Z AA0 L\nLUBY  L UW1 - B IY0\nLUC  L UW1 K\nLUCA  L UW1 - K AH0\nLUCADO  L UW0 - K AA1 - D OW0\nLUCARELLI  L UW0 - K AA0 - R EH1 - L IY0\nLUCAS  L UW1 - K AH0 S\nLUCAS'  L UW1 - K AH0 S\nLUCAS'S  L UW1 - K AH0 - S IH0 Z\nLUCASFILM  L UW0 - K AE1 S - F IH0 L M\nLUCASFILM(2)  L UW1 - K AH0 S - F IH0 L M\nLUCASVILLE  L UW1 - K AH0 S - V IH2 L\nLUCCA  L UW1 - K AH0\nLUCCHESE  L UW0 - K EY1 - Z IY0\nLUCCHESI  L UW0 - K EH1 - S IY0\nLUCCHETTI  L UW0 - K EH1 - T IY0\nLUCCI  L UW1 - CH IY0\nLUCCO  L UW1 - K OW0\nLUCE  L UW1 S\nLUCE'S  L UW1 - S IH0 Z\nLUCENT  L UW1 - S IH0 N T\nLUCENTE  L UW0 - CH EH1 N - T IY0\nLUCERNE  L UW1 - S ER0 N\nLUCERO  L UW0 - CH EH1 - R OW0\nLUCETTE  L UW1 - S EH1 T\nLUCEY  L UW1 - S IY0\nLUCHINI  L UW0 - K IY1 - N IY0\nLUCHSINGER  L AH1 K - S IH0 N - JH ER0\nLUCHT  L AH1 K T\nLUCIA  L UW1 - SH AH0\nLUCIAN  L UW1 - SH AH0 N\nLUCIANI  L UW1 - CH AH0 - N IY0\nLUCIANNA  L UW1 - CH AH0 - N AH0\nLUCIANO  L UW0 - CH IY0 - AA1 - N OW0\nLUCICH  L AH1 - CH IH0 HH\nLUCID  L UW1 - S AH0 D\nLUCIDA  L UW0 - CH IY1 - D AH0\nLUCIDO  L UW0 - CH IY1 - D OW0\nLUCIE  L UW1 - S IY0\nLUCIEN  L UW1 - S IY0 - AH0 N\nLUCIENNE  L UW0 - CH IY1 - EH0 N\nLUCIER  L UW1 - S IY0 - ER0\nLUCIFER  L UW1 - S AH0 - F ER0\nLUCILE  L UW0 - S IY1 L\nLUCILLE  L UW0 - S IY1 L\nLUCINDA  L UW0 - S IH1 N - D AH0\nLUCIO  L UW1 - S IY0 - OW0\nLUCITE  L UW1 - S AY2 T\nLUCIUS  L UW1 - SH AH0 S\nLUCIW  L UW1 - S IH0\nLUCK  L AH1 K\nLUCKE  L AH1 K\nLUCKEN  L AH1 - K AH0 N\nLUCKENBACH  L AH1 - K IH0 N - B AA0 K\nLUCKENBAUGH  L AH0 - K EH1 N - B AO0\nLUCKENBILL  L AH1 - K IH0 N - B AH0 L\nLUCKER  L AH1 - K ER0\nLUCKETT  L AH1 - K IH0 T\nLUCKEY  L AH1 - K IY0\nLUCKHARDT  L AH1 K - HH AA2 R T\nLUCKIE  L AH1 - K IY0\nLUCKIER  L AH1 - K IY0 - ER0\nLUCKIEST  L AH1 - K IY0 - AH0 S T\nLUCKILY  L AH1 - K AH0 - L IY0\nLUCKING  L AH1 - K IH0 NG\nLUCKLESS  L AH1 K - L AH0 S\nLUCKMAN  L AH1 K - M AH0 N\nLUCKOW  L AH1 - S K OW0\nLUCKS  L AH1 K S\nLUCKY  L AH1 - K IY0\nLUCKY'S  L AH1 - K IY0 Z\nLUCKYN  L AH1 - K IH0 N\nLUCRATIVE  L UW1 - K R AH0 - T IH0 V\nLUCRECIA  L UW0 - K R IY1 - SH AH0\nLUCRETIA  L UW0 - K R IY1 - SH AH0\nLUCUS  L UW1 - K AH0 S\nLUCY  L UW1 - S IY0\nLUCZAK  L AH1 - CH AE0 K\nLUDCKE  L AH1 D - K IY0\nLUDDEN  L AH1 - D AH0 N\nLUDDITE  L AH1 - D AY2 T\nLUDDITES  L AH1 - D AY2 T S\nLUDDY  L AH1 - D IY0\nLUDEKE  L AH1 - D IH0 K\nLUDELLA  L UW2 - D EH1 - L AH0\nLUDEMAN  L UW1 D - M AH0 N\nLUDEMANN  L UW1 D - M AH0 N\nLUDEWIG  L AH1 - D UW0 - IH0 G\nLUDICROUS  L UW1 - D AH0 - K R AH0 S\nLUDICROUSLY  L UW1 - D AH0 - K R AH0 S - L IY0\nLUDINGTON  L AH1 - D IH0 NG - T AH0 N\nLUDITE  L UW1 - D AY0 T\nLUDITES  L UW1 - D AY0 T S\nLUDKE  L AH1 D - K IY0\nLUDLAM  L AH1 D - L AH0 M\nLUDLAM'S  L AH1 D - L AH0 M Z\nLUDLOW  L AH1 D - L OW2\nLUDLUM  L AH1 D - L AH0 M\nLUDLUM'S  L AH1 D - L AH0 M Z\nLUDMER  L AH1 D - M ER0\nLUDMILA  L AH0 D - M AY1 - L AH0\nLUDMILLA  L AH0 D - M IH1 - L AH0\nLUDOLPH  L AH1 - D OW0 L F\nLUDTKE  L AH1 D - K IY0\nLUDVIGSEN  L AH1 D - V IH0 G - S AH0 N\nLUDVIGSON  L AH1 D - V IH0 G - S AH0 N\nLUDVIK  L AH1 D - V IH0 K\nLUDWICK  L AH1 D - W IH0 K\nLUDWIG  L AH1 D - W IH0 G\nLUDWIGA  L AH0 D - V AY1 - G AH0\nLUDWIGSHAFEN  L AH0 D - W IH1 G - SH AH0 - F AH0 N\nLUDWIN  L AH1 D - W IH0 N\nLUDY  L UW1 - D IY0\nLUE  L UW1\nLUEBBE  L UW1 B\nLUEBBERS  L UH1 - B ER0 Z\nLUEBBERT  L UH1 - B ER0 T\nLUEBKE  L UW1 B K\nLUECK  L UW1 - IH0 K\nLUECKE  L UW1 K\nLUEDECKE  L UH1 - D IH0 K\nLUEDER  L UH1 - D ER0\nLUEDERS  L UH1 - D ER0 Z\nLUEDKE  L UW1 D - K IY0\nLUEDTKE  L UH1 D - K IY0\nLUEH  L W EH1\nLUEHRING  L UH1 - R IH0 NG\nLUEHRS  L UH1 R Z\nLUEKEN  L UH1 - K AH0 N\nLUELLA  L UW2 - EH1 - L AH0\nLUELLE  L UW1 L\nLUELLEN  L UH1 - L AH0 N\nLUEPKE  L UW1 P - K IY0\nLUERA  L UW0 - EH1 - R AH0\nLUERAS  L UH1 - R AH0 Z\nLUERAS(2)  L UW0 - EH1 - R AH0 Z\nLUERS  L UW1 - ER0 Z\nLUERSSEN  L UW1 R - S AH0 N\nLUETH  L UW1 TH\nLUETKEMEYER  L UH1 T - K IH0 - M AY0 - ER0\nLUEVANO  L UW0 - EH0 - V AA1 - N OW0\nLUFF  L AH1 F\nLUFFED  L AH1 F T\nLUFFMAN  L AH1 F - M AH0 N\nLUFKIN  L AH1 F - K IH0 N\nLUFT  L AH1 F T\nLUFTHANSA  L AH0 F - T AE1 N - Z AH0\nLUFTHANSA'S  L AH0 F - T AE1 N - Z AH0 Z\nLUFTIG  L AH1 F - T IH0 G\nLUFTKIN  L AH1 F T - K IH0 N\nLUFTTRANSPORT  L AH1 F - T R AE2 N Z - P AO2 R T\nLUG  L AH1 G\nLUGANO  L UW0 - G AA1 - N OW0\nLUGAR  L UW1 - G ER0\nLUGAR'S  L UW1 - G ER0 Z\nLUGARDA  L UW0 - G AA1 R - D AH0\nLUGE  L UW1 JH\nLUGER  L UW1 - G ER0\nLUGERS  L UW1 - G ER0 Z\nLUGGAGE  L AH1 - G AH0 JH\nLUGGAGE(2)  L AH1 - G IH0 JH\nLUGGING  L AH1 - G IH0 NG\nLUGI  L UW1 - G IY0\nLUGINBILL  L AH1 - G IH0 N - B AH0 L\nLUGINBUHL  L AH1 - G IH0 N - B AH0 L\nLUGKOV  L UW1 G - K AO0 V\nLUGO  L UW1 - G OW0\nLUGOSI  L UW0 - G OW1 - S IY0\nLUGOSI(2)  L AH0 - G OW1 - S IY0\nLUGS  L AH1 G Z\nLUGUARDA  L UW1 - G AA0 R - D AH0\nLUGUBRIOUS  L UW0 - G Y UW1 - B R IY0 - AH0 S\nLUGWORM  L AH1 G - W ER0 M\nLUGWORMS  L AH1 G - W ER0 M Z\nLUHMAN  L AH1 - M AH0 N\nLUHMANN  L AH1 - M AH0 N\nLUHN  L AH1 N\nLUHR  L ER1\nLUHR(2)  L UH1 R\nLUHRING  L UH1 - R IH0 NG\nLUHRS  L UH1 R Z\nLUI  L UW1 - IH0\nLUICK  L UW1 K\nLUIGI  L UW0 - IY1 - JH IY0\nLUIGI'S  L UW0 - IY1 - JH IY0 Z\nLUIGI'S(2)  L W IY1 - JH IY0 Z\nLUIKART  L UW1 - K AA0 R T\nLUIS  L UW0 - IY1 S\nLUISA  L UW0 - IY1 - Z AH0\nLUISI  L UW1 - S IY0\nLUIZ  L UW1 Z\nLUJAN  L UW0 - Y AA1 N\nLUK  L AH1 K\nLUKA  L UW1 - K AH0\nLUKACH  L AH1 - K AH0 K\nLUKACS  L AH1 - K AH0 K S\nLUKAS  L UW1 - K AH0 Z\nLUKASH  L UW0 - K AE1 SH\nLUKASIEWICZ  L AH0 - K AA1 - S AH0 - V IH0 CH\nLUKASIK  L AH0 - K AA1 - S IH0 K\nLUKASZEWSKI  L AH0 - K AH0 - SH EH1 F S - K IY0\nLUKAVICA  L UW0 - K AH0 - V IH1 - K AH0\nLUKAVIZTA  L UW0 - K AH0 - V IH1 T - S T AH0\nLUKE  L UW1 K\nLUKE'S  L UW1 K S\nLUKEHART  L UW1 K - HH AA0 R T\nLUKEN  L UW1 - K AH0 N\nLUKENBILL  L UW1 - K IH0 N - B IH0 L\nLUKENS  L UW1 - K AH0 N Z\nLUKER  L UW1 - K ER0\nLUKES  L UW1 K S\nLUKEWARM  L UW1 K - W AO1 R M\nLUKIN  L UW1 - K IH0 N\nLUKINS  L UW1 - K IH0 N Z\nLUKMAN  L AH1 K - M AH0 N\nLUKOIL  L UW1 - K OY1 L\nLUKOWSKI  L AH0 - K AO1 F S - K IY0\nLUKS  L AH1 K S\nLUKYANOV  L UW1 - K Y AH0 - N AA0 V\nLULA  L UW1 - L AH0\nLULA'S  L UW1 - L AH0 Z\nLULIE  L AH1 - L IY0\nLULL  L AH1 L\nLULLABIES  L AH1 - L AH0 - B AY2 Z\nLULLABY  L AH1 - L AH0 - B AY2\nLULLED  L AH1 L D\nLULLING  L AH1 L - IH0 NG\nLULLS  L AH1 L Z\nLULU  L UW1 - L UW2\nLUM  L AH1 M\nLUMA  L UW1 - M AH0\nLUMAN  L UW1 - M AH0 N\nLUMB  L AH1 M\nLUMBAGO  L AH0 M - B EY1 - G OW2\nLUMBAR  L AH1 M - B AA2 R\nLUMBARD  L AH1 M - B ER0 D\nLUMBER  L AH1 M - B ER0\nLUMBERING  L AH1 M - B ER0 - IH0 NG\nLUMBERJACK  L AH1 M - B ER0 - JH AE2 K\nLUMBERMAN  L AH1 M - B ER0 - M AH0 N\nLUMBERMAN'S  L AH1 M - B ER0 - M AE2 N Z\nLUMBERT  L AH1 M - B ER0 T\nLUMBERTON  L AH1 M - B ER0 - T AH0 N\nLUMBERYARD  L AH1 M - B ER0 - Y AA2 R D\nLUMBERYARDS  L AH1 M - B ER0 - Y AA2 R D Z\nLUMBRA  L AH1 M - B R AH0\nLUMEN  L UW1 - M AH0 N\nLUMET  L UW1 - M AH0 T\nLUMEX  L UW1 - M AH0 K S\nLUMIA  L UW1 - M IY0 - AH0\nLUMINA  L UW1 - M IH0 - N AH0\nLUMINAL  L UW1 - M AH0 - N AH0 L\nLUMINANCE  L UW1 - M AH0 - N AH0 N S\nLUMINARIES  L UW1 - M AH0 - N EH2 - R IY0 Z\nLUMINARY  L UW1 - M AH0 - N EH2 - R IY0\nLUMINESCENCE  L UW2 - M AH0 - N EH1 - S AH0 N S\nLUMINESCENT  L UW2 - M AH0 - N EH1 - S AH0 N T\nLUMINOL  L UW2 - M IH0 - N AO1 L\nLUMINOSO  L UW2 - M IH0 - N OW1 - S OW0\nLUMINOUS  L UW1 - M AH0 - N AH0 S\nLUMLEY  L AH1 M - L IY0\nLUMM  L AH1 M\nLUMMUS  L AH1 - M AH0 S\nLUMONICS  L UW0 - M AA1 - N IH0 K S\nLUMP  L AH1 M P\nLUMPECTOMIES  L AH2 M - P EH1 K - T AH0 - M IY0 Z\nLUMPECTOMY  L AH2 M - P EH1 K - T AH0 - M IY0\nLUMPED  L AH1 M P T\nLUMPER  L AH1 M - P ER0\nLUMPER'S  L AH1 M - P ER0 Z\nLUMPING  L AH1 M - P IH0 NG\nLUMPKIN  L AH1 M P - K IH0 N\nLUMPKINS  L AH1 M P - K IH0 N Z\nLUMPP  L AH1 M P\nLUMPS  L AH1 M P S\nLUMPUR  L AH2 M - P UH1 R\nLUMPY  L AH1 M - P IY0\nLUMSDEN  L AH1 M - S D AH0 N\nLUN  L AH1 N\nLUNA  L UW1 - N AH0\nLUNACY  L UW1 - N AH0 - S IY0\nLUNAR  L UW1 - N ER0\nLUNATI  L UW0 - N AA0 - T IY1\nLUNATIC  L UW1 - N AH0 - T IH2 K\nLUNATICS  L UW1 - N AH0 - T IH2 K S\nLUNBERG  L AH1 N - B ER0 G\nLUNCEFORD  L AH1 N - S IH0 - F AO0 R D\nLUNCEFORD(2)  L AH1 N S - F AO0 R D\nLUNCH  L AH1 N CH\nLUNCHED  L AH1 N CH T\nLUNCHEON  L AH1 N - CH AH0 N\nLUNCHEONETTE  L AH2 N - CH IH0 - N EH1 T\nLUNCHEONS  L AH1 N - CH AH0 N Z\nLUNCHES  L AH1 N - CH IH0 Z\nLUNCHING  L AH1 N - CH IH0 NG\nLUNCHROOM  L AH1 N CH - R UW2 M\nLUNCHTIME  L AH1 N CH - T AY2 M\nLUND  L AH1 N D\nLUNDAHL  L AH1 N - D AA2 L\nLUNDAY  L AH1 N - D EY2\nLUNDBERG  L AH1 N D - B ER0 G\nLUNDBLAD  L AH1 N D - B L AH0 D\nLUNDBORG  L AH1 N D - B AO0 R G\nLUNDE  L AH1 N D\nLUNDEEN  L AH1 N - D IY0 N\nLUNDELL  L AH1 N - D AH0 L\nLUNDEN  L AH1 N - D AH0 N\nLUNDER  L AH1 N - D ER0\nLUNDGREN  L AH1 N D - G R EH0 N\nLUNDHOLM  L AH1 N D - HH OW2 L M\nLUNDIN  L AH1 N - D IH0 N\nLUNDMARK  L AH1 N D - M AA2 R K\nLUNDQUIST  L AH1 N D - K W IH2 S T\nLUNDSTEDT  L AH1 N D - S T IH0 T\nLUNDSTEN  L AH1 N D - S AH0 N\nLUNDSTROM  L AH1 N D - S T R AH0 M\nLUNDT  L AH1 N T\nLUNDY  L AH1 N - D IY0\nLUNENBERG  L UW0 - N EH1 N - B ER0 G\nLUNETTA  L UW0 - N EH1 - T AH0\nLUNG  L AH1 NG\nLUNGE  L AH1 N JH\nLUNGED  L AH1 N JH D\nLUNGER  L AH1 - NG ER0\nLUNGES  L AH1 N - JH IH0 Z\nLUNGFISH  L AH1 NG - F IH2 SH\nLUNGING  L AH1 N - JH IH0 NG\nLUNGREN  L AH1 NG - R EH0 N\nLUNGS  L AH1 NG Z\nLUNN  L AH1 N\nLUNNEY  L AH1 - N IY0\nLUNNY  L AH1 - N IY0\nLUNSFORD  L AH1 N S - F ER0 D\nLUNT  L AH1 N T\nLUNTZ  L AH1 N T S\nLUNTZ'  L AH1 N T S\nLUNTZ'S  L AH1 N T - S IH0 Z\nLUNZ  L AH1 N Z\nLUO  L W OW1\nLUOMA  L UW0 - OW1 - M AH0\nLUONG  L UW0 - AO1 NG\nLUONGO  L UW0 - OW1 NG - G OW0\nLUPA  L UW1 - P AH0\nLUPATKIN  L UW2 - P AA1 T - K IH0 N\nLUPE  L UW1 P\nLUPER  L UW1 - P ER0\nLUPFER  L AH1 P - F ER0\nLUPI  L UW1 - P IY0\nLUPICA  L UW0 - P IY1 - K AH0\nLUPIEN  L AH1 - P IY0 N\nLUPIN  L UW1 - P AH0 N\nLUPINACCI  L UW0 - P IY0 - N AA1 - CH IY0\nLUPINE  L UW1 - P AY2 N\nLUPINSKI  L AH0 - P IH1 N - S K IY0\nLUPITA  L UW0 - P IY1 - T AH0\nLUPLOW  L AH1 - P L OW0\nLUPO  L UW1 - P OW0\nLUPONE  L UW2 - P OW1 N\nLUPPINO  L UW0 - P IY1 - N OW0\nLUPTAK  L AH1 P - T AH0 K\nLUPTON  L AH1 P - T AH0 N\nLUPUS  L UW1 - P AH0 S\nLUQUE  L UW1 K\nLUQUETTE  L AH0 - K EH1 T\nLURA  L UH1 - R AH0\nLURCH  L ER1 CH\nLURCHED  L ER1 CH T\nLURCHES  L ER1 - CH IH0 Z\nLURCHING  L ER1 - CH IH0 NG\nLURE  L UH1 R\nLURED  L UH1 R D\nLURES  L UH1 R Z\nLURETTE  L ER0 - EH1 T\nLURGI  L ER1 - JH IY0\nLURIA  L UH1 - R IY0 - AH0\nLURID  L UH1 - R AH0 D\nLURIE  L UH1 - R IY0\nLURING  L UH1 - R IH0 NG\nLURK  L ER1 K\nLURKED  L ER1 K T\nLURKING  L ER1 - K IH0 NG\nLURKS  L ER1 K S\nLURLEEN  L ER0 - L IY1 N\nLURLENE  L ER1 - L IY0 N\nLURLINE  L ER1 - L AY0 N\nLURVEY  L ER0 - V EY1\nLURZ  L ER1 Z\nLUSAKA  L UW0 - S AA1 - K AH0\nLUSARDI  L UW0 - S AA1 R - D IY0\nLUSBY  L AH1 S - B IY0\nLUSCH  L AH1 SH\nLUSCHER  L AH1 - SH ER0\nLUSCIOUS  L AH1 - SH IH0 S\nLUSCOMBE  L UW0 - S K OW1 M - B IY0\nLUSE  L UW1 Z\nLUSH  L AH1 SH\nLUSHER  L AH1 - SH ER0\nLUSHLIFE  L AH1 SH - L AY0 F\nLUSHLY  L AH1 SH - L IY0\nLUSIGNAN  L AH1 - S IH0 G - N AH0 N\nLUSINCHI  L UW0 - S IH1 N - CH IY0\nLUSITANIA  L UW2 - S AH0 - T EY1 - N IY0 - AH0\nLUSITANIA'S  L UW2 - S AH0 - T EY1 - N IY0 - AH0 Z\nLUSITANIAS  L UW2 - S AH0 - T EY1 - N IY0 - AH0 Z\nLUSK  L AH1 S K\nLUSKIN  L AH1 - S K IH0 N\nLUSKY  L AH1 S - K IY0\nLUSSER  L AH1 - S ER0\nLUSSIER  L AH1 - S IY0 - ER0\nLUST  L AH1 S T\nLUSTED  L AH1 - S T IH0 D\nLUSTER  L AH1 - S T ER0\nLUSTFUL  L AH1 S T - F AH0 L\nLUSTGARTEN  L AH1 S T - G AA2 R - D AH0 N\nLUSTIG  L AH1 - S T IH0 G\nLUSTING  L AH1 - S T IH0 NG\nLUSTRE  L AH1 - S T ER0\nLUSTROUS  L AH1 S - T R AH0 S\nLUSTY  L AH1 - S T IY0\nLUTE  L UW1 T\nLUTECE  L UW2 - T EH1 S\nLUTECIA  L UW0 - T IY1 - SH Y AH0\nLUTEN  L UW1 - T AH0 N\nLUTER  L UW1 - T ER0\nLUTES  L UW1 T S\nLUTEY  L UW1 - T IY0\nLUTFALLA  L AH0 T - F AE1 - L AH0\nLUTGEN  L AH1 T - G AH0 N\nLUTH  L UW1 TH\nLUTHER  L UW1 - TH ER0\nLUTHERAN  L UW1 - TH ER0 - AH0 N\nLUTHI  L UW1 - DH IY0\nLUTHY  L AH1 - TH IY0\nLUTMAN  L AH1 T - M AH0 N\nLUTON  L UW1 - T AH0 N\nLUTSKY  L AH1 T S - K IY0\nLUTTER  L AH1 - T ER0\nLUTTERMAN  L AH1 - T ER0 - M AH0 N\nLUTTMAN  L AH1 T - M AH0 N\nLUTTON  L AH1 - T AH0 N\nLUTTRELL  L AH1 - T R AH0 L\nLUTTRULL  L AH1 - T R AH0 L\nLUTTWAK  L AH1 T - W AA0 K\nLUTWEILER  L AH1 T - W AY0 - L ER0\nLUTY  L UW1 - T IY0\nLUTZ  L AH1 T S\nLUTZE  L AH1 T Z\nLUTZKE  L AH1 T S - K IY0\nLUU  L UW1 - UW0\nLUVENA  L AH1 - V IH0 - N AH0\nLUVS  L AH1 V Z\nLUWANA  L AH0 W - AE1 - N AH0\nLUX  L AH1 K S\nLUXEMBOURG  L AH1 K - S AH0 M - B AO2 R G\nLUXEMBOURG(2)  L AH1 K - S AH0 M - B ER1 G\nLUXOR  L AH1 K - S ER0\nLUXOTTICA  L AH2 K - S OW0 - T IY1 - K AH0\nLUXOTTICA'S  L AH2 K - S OW0 - T IY1 - K AH0 Z\nLUXOTTICA'S(2)  L AH2 K - S AA1 - T IH0 - K AH0 Z\nLUXOTTICA(2)  L AH2 K - S AA1 - T IH0 - K AH0\nLUXTON  L AH1 K - S T AH0 N\nLUXURIANT  L AH0 G - ZH ER1 - IY0 - AH0 N T\nLUXURIES  L AH1 G - ZH ER0 - IY0 Z\nLUXURIOUS  L AH0 G - ZH ER1 - IY0 - AH0 S\nLUXURY  L AH1 G - ZH ER0 - IY0\nLUYSTER  L AY1 - S T ER0\nLUZ  L AH1 Z\nLUZADER  L AH1 - Z AH0 - D ER0\nLUZAR  L UW1 - Z ER0\nLUZHKOV  L UW1 ZH - K AO2 V\nLUZIER  L UW1 - Z IY0 - ER0\nLUZON  L UW1 - Z AA0 N\nLUZZI  L UW1 T - S IY0\nLWIN  L W IH1 N\nLWIN(2)  EH1 L - W IH2 N\nLWIN(3)  L UW1 - IH2 N\nLXI  L K S IY1\nLXI(2)  EH1 - L EH1 K - S AY1\nLY  L AY1\nLYALL  L AY1 - AH0 L\nLYANNE  L IY0 - AE1 N\nLYANNE(2)  L AY2 - AE1 N\nLYBARGER  L AY1 - B AA2 R - G ER0\nLYBECK  L AY1 - B EH2 K\nLYBRAND  L AY1 - B R AE2 N D\nLYBRAND'S  L AY1 - B R AH0 N D Z\nLYCAN  L AY1 - K AH0 N\nLYCOMING  L AY1 - K AH0 - M IH0 NG\nLYCOMING(2)  L AY2 - K OW1 - M IH0 NG\nLYCRA  L AY1 - K R AH0\nLYDA  L AY1 - D AH0\nLYDALL  L AY1 - D AH0 L\nLYDAY  L AY1 - D EY2\nLYDE  L AY1 D\nLYDEN  L AY1 - D AH0 N\nLYDIA  L IH1 - D IY0 - AH0\nLYDIC  L IH1 - D IH0 K\nLYDICK  L IH1 - D IH0 K\nLYDIE  L IH1 - D IY0\nLYDON  L IH1 - D AH0 N\nLYE  L AY1\nLYELL  L AY2 - EH1 L\nLYERLA  L AY2 - ER1 - L AH0\nLYERLY  L AY1 - ER0 - L IY0\nLYFORD  L IH1 - F ER0 D\nLYING  L AY1 - IH0 NG\nLYKE  L AY1 K\nLYKENS  L AY1 - K AH0 N Z\nLYKES  L AY1 K S\nLYKIN  L AY1 - K AH0 N\nLYKINS  L IH1 - K AH0 N Z\nLYLE  L AY1 L\nLYLE'S  L AY1 L Z\nLYLES  L AY1 L Z\nLYMAN  L AY1 - M AH0 N\nLYME  L AY1 M\nLYMPH  L IH1 M F\nLYMPHADENOPATHY  L IH2 M - F AH0 - D EH1 - N AH0 - P AE2 - TH IY0\nLYMPHATIC  L IH2 M - F AE1 - T IH0 K\nLYMPHOCYTE  L IH1 M - F AH0 - S AY2 T\nLYMPHOCYTES  L IH1 M - F AH0 - S AY2 T S\nLYMPHOMA  L IH0 M - F OW1 - M AH0\nLYMPHOMAS  L IH0 M - F OW1 - M AH0 Z\nLYN  L IH1 N\nLYNAM  L IH1 - N AH0 M\nLYNCH  L IH1 N CH\nLYNCH'S  L IH1 N - CH IH0 Z\nLYNCHBURG  L IH1 N CH - B ER0 G\nLYNCHED  L IH1 N CH T\nLYNCHING  L IH1 N - CH IH0 NG\nLYNCHINGS  L IH1 N - CH IH0 NG Z\nLYND  L IH1 N D\nLYNDA  L IH1 N - D AH0\nLYNDE  L IH1 N D\nLYNDEN  L IH1 N - D AH0 N\nLYNDHURST  L IH1 N D - HH ER0 S T\nLYNDON  L IH1 N - D AH0 N\nLYNDS  L IH1 N D Z\nLYNE  L AY1 N\nLYNES  L AY1 N Z\nLYNESS  L AY2 - N EH1 S\nLYNETTE  L AY2 - N EH1 T\nLYNFORD  L IH1 N - F ER0 D\nLYNG  L IH1 NG\nLYNK  L IH1 NG K\nLYNN  L IH1 N\nLYNN'S  L IH1 N Z\nLYNNA  L AY1 - N AH0\nLYNNE  L IH1 N\nLYNOTT  L AY1 - N AH0 T\nLYNSKEY  L IH1 N - S K IY0\nLYNTON  L IH1 N - T AH0 N\nLYNX  L IH1 NG K S\nLYNXES  L IH1 NG K - S IH0 Z\nLYON  L AY1 - AH0 N\nLYON'S  L AY1 - AH0 N Z\nLYONDELL  L AY2 - AH0 N - D EH1 L\nLYONNAIS  L IY2 - AH0 - N EY1\nLYONNAIS'S  L AY2 - AH0 - N EY1 - Z IH0 Z\nLYONNAIS(2)  L AY2 - AH0 - N EY1 Z\nLYONNAISE  L AY2 - AH0 - N EY1 Z\nLYONS  L AY1 - AH0 N Z\nLYONS'S  L AY1 - AH0 N - Z IH0 Z\nLYPHOMED  L AY1 - F AH0 - M EH0 D\nLYPHOMED'S  L AY1 - F AH0 - M EH0 D Z\nLYPHOMED'S(2)  L IH1 - F AH0 - M EH0 D Z\nLYPHOMED(2)  L IH1 - F AH0 - M EH0 D\nLYRA  L AY1 - R AH0\nLYRE  L AY1 R\nLYRIC  L IH1 - R IH0 K\nLYRICAL  L IH1 - R IH0 - K AH0 L\nLYRICALLY  L IH1 - R IH0 K - L IY0\nLYRICISM  L IH1 - R IH0 - S IH2 - Z AH0 M\nLYRICIST  L IH1 - R IH0 - S IH0 S T\nLYRICISTS  L IH1 - R IH0 - S IH0 S T S\nLYRICISTS(2)  L IH1 - R IH0 - S IH0 S S\nLYRICISTS(3)  L IH1 - R IH0 - S IH0 S\nLYRICS  L IH1 - R IH0 K S\nLYRIS  L IH1 - R IH0 S\nLYRIST  L IH1 - R IH0 S T\nLYSAGHT  L AY1 - S AA0 T\nLYSANDER  L AY2 - S AE1 N - D ER0\nLYSANDRA  L AY2 - S AE1 N - D R AH0\nLYSINE  L AY1 - S IY0 N\nLYSIS  L AY1 - S IH0 S\nLYSKI  L AY1 S - K IY0\nLYSNE  L AY1 N\nLYSOL  L AY1 - S AO2 L\nLYSSY  L IH1 - S IY0\nLYSTER  L IH1 - S T ER0\nLYTER  L AY1 - T ER0\nLYTHGOE  L IH1 TH - G OW0\nLYTLE  L AY1 - T AH0 L\nLYTTLE  L IH1 - T AH0 L\nLYTTON  L IH1 - T AH0 N\nLYUBIMOV  L Y UW1 - B AH0 - M AA0 V\nLYUBIMOV'S  L Y UW1 - B AH0 - M AA0 V Z\nLYVERS  L AY1 - V ER0 Z\nM  EH1 M\nM'BOW  M B OW1\nM'BOW(2)  EH2 M - B OW1\nM'S  EH1 M Z\nM-8  EH1 - M EY1 T\nM-80  EH1 - M EY1 - T IY0\nM-CODE  EH1 M - K OW1 D\nM-CODES  EH1 M - K OW1 D Z\nM.  EH1 M\nM.'S  EH1 M Z\nM.S  EH1 M Z\nM1  EH1 M - W AH1 N\nM2  EH1 M - T UW1\nM3  EH1 M - TH R IY1\nM4  EH1 M - F AO1 R\nM5  EH1 M - F AY1 V\nMA  M AA1\nMA'AM  M AE1 M\nMAACK  M AA1 K\nMAACO  M EY1 - K OW0\nMAAG  M AA1 G\nMAAHS  M AA1 Z\nMAALOX  M EY1 - L AA0 K S\nMAAM  M AH1 M\nMAAS  M AA1 Z\nMAASS  M AA1 S\nMAASSEN  M AA1 - S AH0 N\nMAASTRICHT  M AA1 - S T R IH2 K T\nMAB  M AE1 B\nMABE  M EY1 B\nMABEE  M AE1 - B IY0\nMABEL  M EY1 - B AH0 L\nMABELLE  M AH0 - B EH1 L\nMABEN  M AE1 - B AH0 N\nMABERRY  M AA1 - B EH0 - R IY0\nMABERY  M AE1 - B ER0 - IY0\nMABEY  M EY1 - B IY0\nMABIE  M AE1 - B IY0\nMABILE  M AA1 - B AH0 L\nMABIN  M AE1 - B IH0 N\nMABIS  M AE1 - B IH0 S\nMABLE  M EY1 - B AH0 L\nMABLEY  M AE1 - B L IY0\nMABON  M EY1 - B AH0 N\nMABREY  M AE1 - B R IY0\nMABRY  M AE1 - B ER0 - IY0\nMABUS  M AE1 - B IH0 S\nMAC  M AE1 K\nMAC'S  M AE1 K S\nMACABRE  M AH0 - K AA1 - B R AH0\nMACABRE(2)  M AH0 - K AA1 - B ER0\nMACADAM  M AH0 - K AE1 - D AH0 M\nMACADAMIA  M AE2 - K AH0 - D EY1 - M IY0 - AH0\nMACALLISTER  M AH0 - K AE1 - L IH0 - S T ER0\nMACALPINE  M AH0 - K AE1 L - P AY1 N\nMACALUSO  M AE2 - K AH0 - L UW1 - S OW0\nMACANDREWS  M AH0 - K AE1 N - D R UW2 Z\nMACAO  M AH0 - K AW1\nMACAQUES  M AH0 - K AA1 K S\nMACARI  M AA0 - K AA1 - R IY0\nMACARONI  M AE2 - K ER0 - OW1 - N IY0\nMACARTHUR  M AH0 - K AA1 R - TH ER0\nMACARTNEY  M AH0 - K AA1 R T - N IY0\nMACAU  M AH0 - K AW1\nMACAULAY  M AH0 - K AO1 - L IY0\nMACAULEY  M AH0 - K AO1 - L IY0\nMACAW  M AH0 - K AO1\nMACAWS  M AH0 - K AO1 Z\nMACBETH  M AH0 K - B EH1 TH\nMACBRIDE  M AH0 K - B R AY1 D\nMACCABEAN  M AE2 - K AH0 - B IY1 - AH0 N\nMACCABEE  M AE1 - K AH0 - B IY2\nMACCABEES  M AE1 - K AH0 - B IY2 Z\nMACCALLUM  M AH0 - K AE1 - L AH0 M\nMACCAQUANO  M AE2 - K AH0 - K W AA1 - N OW0\nMACCARONE  M AE1 - K ER0 - OW2 N\nMACCARTHY  M AH0 - K AA1 R - TH IY0\nMACCHI  M AE1 - K IY0\nMACCHIA  M AE1 - K IY0 - AH0\nMACCHIO  M AE1 - K IY0 - OW0\nMACCONNELL  M AH0 - K AA1 - N AH0 L\nMACCORMACK  M AH0 - K AO1 R - M AH0 K\nMACDERMOTT  M AH0 K - D ER1 - M AH0 T\nMACDIARMID  M AH0 K - D IH1 R - M IH0 D\nMACDILL  M AH0 K - D IH1 L\nMACDILL'S  M AH0 K - D IH1 L Z\nMACDONALD  M AH0 K - D AA1 - N AH0 L D\nMACDONALD'S  M AH0 K - D AA1 - N AH0 L D Z\nMACDONELL  M AH0 K - D AA1 - N AH0 L\nMACDONNELL  M AH0 K - D AA1 - N AH0 L\nMACDONOUGH  M AH0 K - D AA1 - N AH0 F\nMACDOUGAL  M AH0 K - D UW1 - G AH0 L\nMACDOUGALL  M AH0 K - D UW1 - G AH0 L\nMACDOWELL  M AH0 K - D AW1 - AH0 L\nMACDUFF  M AH0 K - D AH1 F\nMACE  M EY1 S\nMACEACHERN  M AH0 - K IY1 - CH ER0 N\nMACEDA  M AH0 - S EY1 - D AH0\nMACEDO  M AH0 - S EY1 - D OW0\nMACEDONIA  M AE2 - S AH0 - D OW1 - N IY0 - AH0\nMACEDONIA'S  M AE2 - S AH0 - D OW1 - N IY0 - AH0 Z\nMACEDONIA'S(2)  M AE2 - S AH0 - D OW1 - N IY0 - AH0 Z\nMACEDONIA(2)  M AE2 - S AH0 - D OW1 - N Y AH0\nMACEDONIAN  M AE2 - S AH0 - D OW1 - N IY0 - AH0 N\nMACEDONIAN(2)  M AE2 - S AH0 - D OW1 - N Y AH0 N\nMACEDONIANS  M AE2 - S IH0 - D OW1 - N IY0 - AH0 N Z\nMACEDONIANS(2)  M AE2 - S IH0 - D OW1 - N Y AH0 N Z\nMACEK  M IH0 - K EH1 K\nMACERA  M AH0 - S EH1 - R AH0\nMACEWAN  M AH0 - CH UW1 - AH0 N\nMACEWAN(2)  M EY1 S - W AA0 N\nMACEWEN  M AH0 - K UW1 - AH0 N\nMACEWEN(2)  M EY1 S - W AA0 N\nMACEY  M EY1 - S IY0\nMACFADDEN  M AH0 K - F AE1 - D AH0 N\nMACFADYEN  M AH0 K - F AE1 - D IY0 - AH0 N\nMACFARLAND  M AH0 K - F AA1 R - L AH0 N D\nMACFARLANE  M AH0 K - F AA1 R - L AH0 N\nMACGOWAN  M AH0 - G AW1 - AH0 N\nMACGRAW  M AH0 - G R AA1\nMACGREGOR  M AH0 - G R EH1 - G ER0\nMACGYVER  M AH0 - G AY1 - V ER0\nMACGYVER'S  M AH0 - G AY1 - V ER0 Z\nMACH  M AA1 K\nMACHA  M AE1 - CH AH0\nMACHACEK  M AE1 - K AH0 - S IH0 K\nMACHADO  M AH0 - CH AA1 - D OW0\nMACHAIN  M AH0 - CH EY2 N\nMACHALA  M AH0 - CH AA1 - L AH0\nMACHAMER  M AE1 - K AH0 - M ER0\nMACHE  M AE1 CH\nMACHEL  M AE1 - CH AH0 L\nMACHEN  M AE1 - K AH0 N\nMACHER  M AE1 - K ER0\nMACHESKI  M AH0 - CH EH1 S - K IY0\nMACHETE  M AH0 - SH EH1 - T IY2\nMACHETE(2)  M AH0 - CH EH1 - T IY2\nMACHETES  M AH0 - SH EH1 - T IY2 Z\nMACHETES(2)  M AH0 - CH EH1 - T IY2 Z\nMACHI  M AA1 - K IY0\nMACHIAVELLI  M AA2 - K IY0 - AH0 - V EH1 - L IY0\nMACHIAVELLI'S  M AA2 - K IY0 - AH0 - V EH1 - L IY0 Z\nMACHIAVELLI'S(2)  M AA2 - K Y AH0 - V EH1 - L IY0 Z\nMACHIAVELLI(2)  M AA2 - K Y AH0 - V EH1 - L IY0\nMACHIAVELLIAN  M AA2 - K IY0 - AH0 - V EH1 - L IY0 - AH0 N\nMACHIAVELLIAN(2)  M AA2 - K Y AH0 - V EH1 - L IY0 - AH0 N\nMACHIDA  M AH0 - CH IY1 - D AH0\nMACHIN  M AE1 - CH IH0 N\nMACHINATION  M AE2 - K AH0 - N EY1 - SH AH0 N\nMACHINATION(2)  M AE2 - SH AH0 - N EY1 - SH AH0 N\nMACHINATIONS  M AE2 - K AH0 - N EY1 - SH AH0 N Z\nMACHINATIONS(2)  M AE2 - SH AH0 - N EY1 - SH AH0 N Z\nMACHINE  M AH0 - SH IY1 N\nMACHINE'S  M AH0 - SH IY1 N Z\nMACHINEA  M AE2 - SH AH0 - N IY1 - AH0\nMACHINED  M AH0 - SH IY1 N D\nMACHINERIES  M AH0 - SH IY1 - N ER0 - IY0 Z\nMACHINERIES(2)  M AH0 - SH IY1 N - R IY0 Z\nMACHINERY  M AH0 - SH IY1 - N ER0 - IY0\nMACHINERY(2)  M AH0 - SH IY1 N - R IY0\nMACHINES  M AH0 - SH IY1 N Z\nMACHINES'  M AH0 - CH IY1 N Z\nMACHINING  M AH0 - SH IY1 - N IH0 NG\nMACHINIST  M AH0 - SH IY1 - N AH0 S T\nMACHINISTS  M AH0 - SH IY1 - N IH0 S T S\nMACHINISTS'  M AH0 - SH IY1 - N IH0 S T S\nMACHINISTS'(2)  M AH0 - SH IY1 - N IH0 S S\nMACHINISTS'(3)  M AH0 - SH IY1 - N IH0 S\nMACHINISTS(2)  M AH0 - SH IY1 - N IH0 S S\nMACHINISTS(3)  M AH0 - SH IY1 - N IH0 S\nMACHISMO  M AH0 - CH IH1 Z - M OW0\nMACHISMO(2)  M AH0 - K IH1 Z - M OW0\nMACHNIK  M AE1 K - N IH0 K\nMACHO  M AA1 - CH OW0\nMACHOLD  M AH0 - HH OW1 L D\nMACHOWSKI  M AH0 - CH AO1 F S - K IY0\nMACHT  M AE1 CH T\nMACHTLEY  M AE1 T CH - L IY0\nMACHUCA  M AH0 - CH UW1 - K AH0\nMACHUGA  M AH0 - CH UW1 - G AH0\nMACIAG  M AH0 - K EY1 G\nMACIAS  M AA0 - S IY1 - AH0 S\nMACIEJEWSKI  M AH0 - CH EH1 F S - K IY0\nMACIEJEWSKI(2)  M AH0 - CH UW1 S - K IY0\nMACIEL  M IH0 - K IY1 L\nMACIK  M AA1 - CH IH0 K\nMACINNES  M AH0 - K IH1 - N AH0 S\nMACINNIS  M AH0 - K IH1 - N AH0 S\nMACINTAX  M AE1 - K AH0 N - T AE2 K S\nMACINTOSH  M AE1 - K AH0 N - T AO2 SH\nMACINTOSH'S  M AE1 - K AH0 N - T AA2 - SH IH0 Z\nMACINTOSHES  M AE1 - K AH0 N - T AO2 - SH IH0 Z\nMACINTYRE  M AE1 - K AH0 N - T AY2 R\nMACIOCE  M AA0 - CH OW1 - CH IY0\nMACIOLEK  M AH0 - CH IY0 - OW1 - L EH0 K\nMACISAAC  M AH0 - CH IH1 - S AE2 K\nMACIVER  M IY1 - K IH0 - V ER0\nMACK  M AE1 K\nMACK'S  M AE1 K S\nMACKALL  M AE1 - K AH0 L\nMACKAY  M AH0 - K EY1\nMACKE  M AE1 K\nMACKEL  M AE1 - K AH0 L\nMACKELLAR  M AH0 - K EH1 - L ER0\nMACKEN  M AE1 - K AH0 N\nMACKENZIE  M AH0 - K EH1 N - Z IY0\nMACKEREL  M AE1 - K ER0 - AH0 L\nMACKERT  M AE1 - K ER0 T\nMACKEY  M AE1 - K IY0\nMACKIE  M AE1 - K IY0\nMACKIE'S  M AE1 - K IY0 Z\nMACKIEWICZ  M AE1 - K IY0 - AH0 - W IH0 T S\nMACKIEWICZ(2)  M AE1 - K Y AH0 - W IH0 T S\nMACKIN  M AE1 - K IH0 N\nMACKINAW  M AE1 - K AH0 - N AO2\nMACKINLEY  M AH0 - K IH1 N - L IY0\nMACKINNEY  M AH0 - K IH1 - N IY0\nMACKINNON  M AH0 - K IH1 - N AH0 N\nMACKINTOSH  M AE1 - K AH0 N - T AA2 SH\nMACKLEM  M AE1 - K L AH0 M\nMACKLER  M AE1 K - L ER0\nMACKLEY  M AE1 K - L IY0\nMACKLIN  M AE1 K - L IH0 N\nMACKLIN'S  M AE1 K - L IH0 N Z\nMACKNAY  M AE0 K - N EY1\nMACKNIGHT  M AH0 K - N AY1 T\nMACKO  M AE1 - K OW0\nMACKOWIAK  M AH0 - S K AW1 - IY0 - AE0 K\nMACKOWSKI  M AH0 S K - AO1 F S - K IY0\nMACKS  M AE1 K S\nMACKTAL  M AE1 K - T AH0 L\nMACLACHLAN  M AH0 K - L AE1 K - L AH0 N\nMACLAINE  M AH0 - K L EY1 N\nMACLAREN  M AH0 - K L EH1 - R AH0 N\nMACLAUGHLIN  M AH0 K - L AO1 - K L IH0 N\nMACLAY  M AH0 K - L EY1\nMACLEAN  M AH0 - K L EY1 N\nMACLEISH  M AH0 K - L IY1 SH\nMACLELLAN  M AH0 - K L EH1 - L AH0 N\nMACLENNAN  M AH0 K - L EH1 - N AH0 N\nMACLEOD  M AH0 K - L AW1 D\nMACLIN  M AE1 K - L AH0 N\nMACMAHON  M AH0 K - M AE1 N\nMACMASTER  M AH0 K - M AE1 - S T ER0\nMACMILLAN  M AH0 K - M IH1 - L AH0 N\nMACMILLAN'S  M AH0 K - M IH1 - L AH0 N Z\nMACMULLEN  M AH0 K - M AH1 - L AH0 N\nMACMURRAY  M AH0 K - M ER1 - IY0\nMACNAB  M AH0 K - N AE1 B\nMACNAIR  M AH0 K - N EH1 R\nMACNAMARA  M AE1 K - N AH0 - M EH2 - R AH0\nMACNAUGHTON  M AH0 K - N AO1 - T AH0 N\nMACNEAL  M AH0 K - N IY1 L\nMACNEIL  M AH0 K - N IY1 L\nMACNEILL  M AH0 K - N IY1 L\nMACOMB  M EY1 - K AH0 M\nMACOMBER  M AH0 - K AA1 M - B ER0\nMACON  M EY1 - K AH0 N\nMACOUTE  M AH0 - K UW1 T\nMACOUTES  M AH0 - K UW1 T S\nMACPHAIL  M AH0 K - F EY1 L\nMACPHEE  M AH0 K - F IY1\nMACPHERSON  M AH0 K - F IH1 R - S AH0 N\nMACQUARRIE  M AH0 - K EH1 - R IY0\nMACQUEEN  M AH0 - K W IY1 N\nMACRAE  M AH0 K - R EY1\nMACRAME  M AE1 - K R AH0 - M EY2\nMACRI  M AE1 - K R IY0\nMACRO  M AE1 - K R OW0\nMACRODANTIN  M AE2 - K R OW0 - D AE1 N - T IH0 N\nMACROECONOMIC  M AE2 - K R OW0 - EH0 - K AH0 - N AA1 - M IH0 K\nMACROECONOMIC(2)  M AE2 - K R OW0 - IY0 - K AH0 - N AA1 - M IH0 K\nMACROECONOMICS  M AE2 - K R OW0 - EH0 - K AH0 - N AA1 - M IH0 K S\nMACROECONOMICS(2)  M AE2 - K R OW0 - IY0 - K AH0 - N AA1 - M IH0 K S\nMACROMEDIA  M AE2 - K R OW0 - M IY1 - D IY0 - AH0\nMACROPHAGE  M AE1 - K R OW0 - F EY2 JH\nMACROPHAGES  M AE1 - K R OW0 - F EY2 - JH IH0 Z\nMACROVISION  M AE1 - K R OW0 - V IH2 - ZH AH0 N\nMACS  M AE1 K S\nMACSHARRY  M AH0 K - SH EH1 - R IY0\nMACTAGGART  M AH0 K - T AE1 - G ER0 T\nMACTAN  M AH0 K - T AE1 N\nMACTAVISH  M AH0 K - T AE1 - V IH0 SH\nMACUMBER  M AH0 - K AH1 M - B ER0\nMACUMOLO  M AH0 - K UW1 - M OW0 - L OW0\nMACUMOLO'S  M AH0 - K UW1 - M OW0 - L OW0 Z\nMACVICAR  M AH0 K - V IH1 - K ER0\nMACVICAR'S  M AH0 K - V IH1 - K ER0 Z\nMACVIE  M AE1 K - V IY0\nMACWILLIAMS  M AH0 - K W IH1 - L Y AH0 M Z\nMACWORLD  M AE1 K - W ER2 L D\nMACY  M EY1 - S IY0\nMACY'S  M EY1 - S IY0 Z\nMACZKO  M AA1 CH - K OW0\nMAD  M AE1 D\nMADA  M AA1 - D AH0\nMADAGASCAR  M AE2 - D AH0 - G AE1 - S K ER0\nMADALENA  M AE2 - D AH0 L - EY1 - N AH0\nMADAM  M AE1 - D AH0 M\nMADAME  M AE1 - D AH0 M\nMADAME(2)  M AH0 - D AE1 M\nMADAN  M EY1 - D AH0 N\nMADAR  M AE1 - D ER0\nMADARA  M AA0 - D AA1 - R AH0\nMADARAS  M AA0 - D AA1 - R AA0 Z\nMADARIS  M AE1 - D ER0 - IH0 S\nMADAY  M AA1 - D EY0\nMADCAP  M AE1 D - K AE2 P\nMADD  M AE1 D\nMADDALENA  M AA0 - D AA0 - L EH1 - N AH0\nMADDAMMA  M AH0 - D AA1 - M AH0\nMADDEN  M AE1 - D AH0 N\nMADDENING  M AE1 - D AH0 N - IH0 NG\nMADDENING(2)  M AE1 D - N IH0 NG\nMADDENINGLY  M AE1 - D AH0 N - IH0 NG - L IY0\nMADDENINGLY(2)  M AE1 D - N IH0 NG - L IY0\nMADDER  M AE1 - D ER0\nMADDIE  M AE1 - D IY0\nMADDING  M AE1 - D IH0 NG\nMADDISON  M AE1 - D IH0 S - AH0 N\nMADDOCK  M AE1 - D AH0 K\nMADDOCKS  M AE1 - D AH0 K S\nMADDOX  M AE1 - D AH0 K S\nMADDUX  M AE1 - D AH0 K S\nMADDY  M AE1 - D IY0\nMADE  M EY1 D\nMADEIRA  M AH0 - D IH1 - R AH0\nMADEJ  M AE1 - D IH0 JH\nMADEL  M AE1 - D AH0 L\nMADELAINE  M AE1 - D IH0 - L EY0 N\nMADELEINE  M AE2 - D AH0 - L EH1 N\nMADELENA  M AA0 - D EH0 - L EH1 - N AH0\nMADELENE  M AE0 - D AH0 - L IY1 N\nMADELIN  M AE1 - D AH0 L - IH0 N\nMADELINE  M AE1 - D AH0 L - IH0 N\nMADELLA  M AH0 - D EH1 - L AH0\nMADELLE  M AH0 - D EH1 L\nMADELON  M AA0 - D EY0 - L AO1 N\nMADELYN  M AE1 - D IH0 - L IH0 N\nMADELYN(2)  M AE1 D - L IH0 N\nMADEMOISELLE  M AE2 - D AH0 M - AH0 - Z EH1 L\nMADEN  M EY1 - D AH0 N\nMADER  M EY1 - D ER0\nMADERA  M AA0 - D EH1 - R AH0\nMADERE  M AE1 - D ER0\nMADERO  M AA0 - D EH1 - R OW0\nMADEWELL  M AE1 - D IH0 - W EH0 L\nMADEWELL(2)  M EY1 D - W EH0 L\nMADEY  M EY1 - D IY0\nMADGE  M AE1 JH\nMADHOUSE  M AE1 D - HH AW2 S\nMADHUSUDAN  M AA2 D - HH UW0 - S UW1 - D AH0 N\nMADIA  M AA1 - D IY0 - AH0\nMADIGAN  M AE1 - D IH0 - G AH0 N\nMADILL  M AA0 - D IY1 L\nMADIS  M AE1 - D AH0 S\nMADISON  M AE1 - D AH0 - S AH0 N\nMADISON'S  M AE1 - D AH0 - S AH0 N Z\nMADISON'S(2)  M AE1 - D IH0 S - AH0 N Z\nMADISON(2)  M AE1 - D IH0 S - AH0 N\nMADKINS  M AE1 D - K IH0 N Z\nMADL  M AE1 - D AH0 L\nMADLEN  M AE1 - D AH0 - L AH0 N\nMADLIN  M AE1 D - L IH0 N\nMADLOCK  M AE1 D - L AA2 K\nMADLY  M AE1 D - L IY0\nMADMAN  M AE1 D - M AE2 N\nMADMEN  M AE1 D - M AH0 N\nMADNESS  M AE1 D - N AH0 S\nMADOC  M AE1 - D AH0 K\nMADOCK  M AE1 - D AH0 K\nMADOFF  M AE1 - D AO2 F\nMADOG  M AE1 - D AH0 G\nMADOLE  M AH0 - D OW1 L\nMADONIA  M AA0 - D OW1 - N IY0 - AH0\nMADONNA  M AH0 - D AA1 - N AH0\nMADONNA'S  M AH0 - D AA1 - N AH0 Z\nMADORA  M AH0 - D AO1 - R AH0\nMADORE  M AH0 - D AO1 - R EY0\nMADRA  M AA1 - D R AH0\nMADRAS  M AE1 - D R AH0 S\nMADRE  M AA1 - D R EY2\nMADRES  M AA1 - D R EY2 Z\nMADRID  M AH0 - D R IH1 D\nMADRIDS  M AH0 - D R IH1 D Z\nMADRIGAL  M AE1 - D R AH0 - G AH0 L\nMADRIGAL(2)  M AE1 - D R IH0 - G AH0 L\nMADRIGALS  M AE1 - D R AH0 - G AH0 L Z\nMADRIGALS(2)  M AE1 - D R IH0 - G AH0 L Z\nMADRIL  M AE1 - D R IH0 L\nMADRON  M AE1 - D R AH0 N\nMADRUGA  M AE1 - D R UW0 - G AH0\nMADRY  M AE1 - D R IY0\nMADSEN  M AE1 D - S AH0 N\nMADSON  M AE1 D - S AH0 N\nMADSTONES  M AE1 D - S T OW2 N Z\nMADY  M EY1 - D IY0\nMADYUN  M AE1 - D IY0 - AH0 N\nMADYUN(2)  M AE1 - D Y AH0 N\nMAE  M EY1\nMAE'S  M EY1 Z\nMAEDA  M EY0 - IY1 - D AH0\nMAEDER  M EH1 - D ER0\nMAEKAWA  M AA2 - IH0 - K AA1 - W AH0\nMAELSTROM  M EY1 L - S T R AH0 M\nMAENZA  M AA0 - EH1 N - Z AH0\nMAERSK  M EH1 R S K\nMAERTENS  M EH1 R - T AH0 N Z\nMAERTZ  M EH1 R T S\nMAERZ  M EH1 R Z\nMAES  M EY1 Z\nMAESE  M IY1 S\nMAESTAS  M EH1 - S T AH0 Z\nMAESTRI  M AA0 - EH1 S - T R IY0\nMAESTRO  M AY1 - S T R OW0\nMAEZ  M AY0 - EH1 Z\nMAFFEI  M AE1 - F AY0\nMAFFEO  M AA1 - F IY0 - OW0\nMAFFETT  M AE1 - F IH0 T\nMAFFIA  M AE1 - F IY0 - AH0\nMAFFUCCI  M AA0 - F UW1 - CH IY0\nMAFIA  M AA1 - F IY0 - AH0\nMAFIA'S  M AA1 - F IY0 - AH0 Z\nMAFIAS  M AA1 - F IY0 - AH0 Z\nMAG  M AE1 G\nMAGADAN  M AE1 - G AH0 - D AE2 N\nMAGALLANES  M AE1 - G AH0 - L EY2 N Z\nMAGALLON  M AE1 - G AH0 - L AA0 N\nMAGAN  M EY1 - G AH0 N\nMAGANA  M AA0 - G AE1 - N AH0\nMAGAR  M AE1 - G ER0\nMAGARIAN  M AH0 - G EH1 - R IY0 - AH0 N\nMAGAW  M AE1 - G AO0\nMAGAZINE  M AE1 - G AH0 - Z IY2 N\nMAGAZINE'S  M AE1 - G AH0 - Z IY2 N Z\nMAGAZINER  M AE2 - G AH0 - Z IY1 - N ER0\nMAGAZINER'S  M AE2 - G AH0 - Z IY1 - N ER0 Z\nMAGAZINES  M AE1 - G AH0 - Z IY2 N Z\nMAGAZINES'  M AE1 - G AH0 - Z IY2 N Z\nMAGBY  M AE1 G - B IY0\nMAGDA  M AE1 G - D AH0\nMAGDALA  M AA0 G - D AA1 - L AH0\nMAGDALEN  M AE1 G - D AH0 - L AH0 N\nMAGDALENA  M AE2 G - D AH0 - L IY1 - N AH0\nMAGDALENE  M AE1 G - D AH0 - L IY2 N\nMAGDALENO  M AA0 G - D AA0 - L EY1 - N OW0\nMAGEE  M AH0 - G IY1\nMAGEL  M AE1 - G AH0 L\nMAGELLAN  M AH0 - JH EH1 - L AH0 N\nMAGELLAN'S  M AH0 - JH EH1 - L AH0 N Z\nMAGELLANIC  M AE2 - JH AH0 - L AE1 - N IH0 K\nMAGENTA  M AH0 - JH EH1 N - T AH0\nMAGER  M AE1 - G ER0\nMAGER(2)  M EY1 - G ER0\nMAGERMAN  M AE1 - G ER0 - M AH0 N\nMAGERS  M AE1 - G ER0 Z\nMAGES  M EY1 - JH IH0 Z\nMAGGARD  M AE1 - G ER0 D\nMAGGART  M AE1 - G ER0 T\nMAGGI  M AE1 - JH IY0\nMAGGIE  M AE1 - G IY0\nMAGGIO  M AA1 - JH IY0 - OW0\nMAGGOT  M AE1 - G AH0 T\nMAGGOTS  M AE1 - G AH0 T S\nMAGGS  M AE1 G Z\nMAGI  M EY1 - JH AY0\nMAGIC  M AE1 - JH IH0 K\nMAGIC'S  M AE1 - JH IH0 K S\nMAGICAL  M AE1 - JH IH0 - K AH0 L\nMAGICALLY  M AE1 - JH IH0 - K AH0 - L IY0\nMAGICALLY(2)  M AE1 - JH IH0 K - L IY0\nMAGICIAN  M AH0 - JH IH1 - SH AH0 N\nMAGICIANS  M AH0 - JH IH1 - SH AH0 N Z\nMAGID  M AE1 - JH IH0 D\nMAGIE  M EY1 - JH IY0\nMAGIERA  M AA0 - JH IH1 - R AH0\nMAGILL  M AE1 - JH AH0 L\nMAGIN  M AE1 - JH IH0 N\nMAGINN  M AE1 - JH IH0 N\nMAGINNIS  M AE1 - JH IH0 - N IH0 S\nMAGINNIS(2)  M AH0 - G IH1 - N IH0 S\nMAGINOT  M AE1 - JH IH0 - N AA0\nMAGINOT(2)  M AE1 - JH IH0 - N AH0 T\nMAGISTAD  M AE1 - JH IH0 - S T AE2 D\nMAGISTERIAL  M AE2 - JH IH0 - S T IY1 - R IY0 - AH0 L\nMAGISTRATE  M AE1 - JH AH0 - S T R EY2 T\nMAGISTRATE(2)  M AE1 - JH IH0 - S T R EY2 T\nMAGISTRATES  M AE1 - JH IH0 - S T R EY2 T S\nMAGISTRO  M AA0 - JH IY1 - S T R OW0\nMAGLAJ  M AA1 - G L AY2\nMAGLAJ'S  M AA1 - G L AY2 Z\nMAGLAJ'S(2)  M AE1 - G L AY2 Z\nMAGLAJ(2)  M AE1 - G L AY2\nMAGLEV  M AE1 - G L EH2 V\nMAGLEY  M AE1 G - L IY0\nMAGLI  M AE1 G - L IY0\nMAGLIANO  M AA0 G - L IY0 - AA1 - N OW0\nMAGLICA  M AE1 - G L IH0 - K AH0\nMAGLIO  M AE1 G - L IY0 - OW0\nMAGLIOCCO  M AA0 G - L IY0 - OW1 - K OW0\nMAGLIONE  M AA0 G - L IY0 - OW1 - N IY0\nMAGLIS  M AE1 - G L IY0 Z\nMAGMA  M AE1 G - M AH0\nMAGMA'S  M AE1 G - M AH0 Z\nMAGNA  M AE1 G - N AH0\nMAGNA'S  M AE1 G - N AH0 Z\nMAGNAN  M AE1 G - N AH0 N\nMAGNANI  M AA0 G - N AA1 - N IY0\nMAGNANIMOUS  M AE0 G - N AE1 - N AH0 - M AH0 S\nMAGNANO  M AA0 G - N AA1 - N OW0\nMAGNANT  M AE1 G - N AH0 N T\nMAGNATE  M AE1 G - N AH0 T\nMAGNATE(2)  M AE1 G - N EY2 T\nMAGNATES  M AE1 G - N EY2 T S\nMAGNAVOX  M AE1 G - N AH0 - V AA0 K S\nMAGNER  M AE1 G - N ER0\nMAGNESIA  M AE0 G - N IY1 - ZH AH0\nMAGNESITE  M AE1 G - N AH0 - S AY2 T\nMAGNESIUM  M AE0 G - N IY1 - Z IY0 - AH0 M\nMAGNESS  M AH0 G - N IY1 S\nMAGNET  M AE1 G - N AH0 T\nMAGNET'S  M AE1 G - N AH0 T S\nMAGNETEK  M AE1 G - N EH0 - T EH2 K\nMAGNETI  M AE0 G - N EH1 - T IY0\nMAGNETIC  M AE0 G - N EH1 - T IH0 K\nMAGNETICALLY  M AE0 G - N EH1 - T IH0 - K AH0 - L IY0\nMAGNETICALLY(2)  M AE0 G - N EH1 - T IH0 K - L IY0\nMAGNETICS  M AE0 G - N EH1 - T IH0 K S\nMAGNETISM  M AE1 G - N AH0 - T IH2 - Z AH0 M\nMAGNETITE  M AE1 G - N AH0 - T AY2 T\nMAGNETIZATION  M AE2 G - N AH0 - T AH0 - Z EY1 - SH AH0 N\nMAGNETIZED  M AE1 G - N IH0 - T AY2 Z D\nMAGNETOMETER  M AE2 G - N AH0 - T AA1 - M AH0 - T ER0\nMAGNETOMETERS  M AE2 G - N AH0 - T AA1 - M AH0 - T ER0 Z\nMAGNETRON  M AE1 G - N AH0 - T R AA2 N\nMAGNETS  M AE1 G - N AH0 T S\nMAGNIFICATION  M AE2 G - N AH0 - F AH0 - K EY1 - SH AH0 N\nMAGNIFICATIONS  M AE2 G - N AH0 - F AH0 - K EY1 - SH AH0 N Z\nMAGNIFICENT  M AE0 G - N IH1 - F AH0 - S AH0 N T\nMAGNIFICENT(2)  M AE0 G - N IH1 - F IH0 - S AH0 N T\nMAGNIFICENTLY  M AE0 G - N IH1 - F AH0 - S AH0 N T - L IY0\nMAGNIFIED  M AE1 G - N AH0 - F AY2 D\nMAGNIFIER  M AE1 G - N AH0 - F AY2 - ER0\nMAGNIFIERS  M AE1 G - N AH0 - F AY2 - ER0 Z\nMAGNIFIES  M AE1 G - N AH0 - F AY2 Z\nMAGNIFY  M AE1 G - N AH0 - F AY2\nMAGNIFYING  M AE1 G - N AH0 - F AY2 - IH0 NG\nMAGNIN  M AE1 G - N IH0 N\nMAGNITOGORSK  M AE0 G - N IH1 - T AH0 - G AO0 R S K\nMAGNITUDE  M AE1 G - N AH0 - T UW2 D\nMAGNITUDES  M AE1 G - N AH0 - T UW2 D Z\nMAGNO  M AE1 G - N OW0\nMAGNOLIA  M AE0 G - N OW1 - L Y AH0\nMAGNOLIAS  M AE0 G - N OW1 - L Y AH0 Z\nMAGNONE  M AA0 G - N OW1 - N IY0\nMAGNUM  M AE1 G - N AH0 M\nMAGNUS  M AE1 G - N AH0 S\nMAGNUSON  M AE1 G - N AH0 - S AH0 N\nMAGNUSSEN  M AE1 G - N AH0 - S AH0 N\nMAGNUSSON  M AE1 G - N AH0 - S AH0 N\nMAGOON  M AH0 - G UW1 N\nMAGOUIRK  M AH0 G - W ER1 K\nMAGOWAN  M AA0 - G OW1 - W AA0 N\nMAGPIE  M AE1 G - P AY2\nMAGPIES  M AE1 G - P AY2 Z\nMAGRANE  M AE1 - G R EY2 N\nMAGRATH  M AH0 - G R AE1 TH\nMAGRI  M AE1 - G R IY0\nMAGRINI  M AA0 - G R IY1 - N IY0\nMAGRO  M AE1 - G R OW0\nMAGRUDER  M AH0 - G R UW1 - D ER0\nMAGS  M AE1 G Z\nMAGTEN  M AE1 G - T EH1 N\nMAGUIRE  M AH0 G - W AY1 R\nMAGWOOD  M AE1 G - W UH2 D\nMAGYAR  M AE1 - G Y AA2 R\nMAGYARS  M AE1 - G Y AA2 R Z\nMAH  M AA1\nMAHABHARATA  M AA0 - HH AA0 - B ER0 - AA1 - T AH0\nMAHADY  M AH0 - HH AA1 - D IY0\nMAHAFFEY  M AH0 - HH AE1 - F IY0\nMAHAFFY  M AE1 - HH AH0 - F IY0\nMAHAL  M AH0 - HH AA1 L\nMAHALA  M AE1 - HH AH0 - L AH0\nMAHALAH  M AE1 - HH AH0 - L AH0\nMAHALIA  M AH0 - HH AE1 - L IY0 - AH0\nMAHAMUD  M AH0 - HH AA1 - M UH2 D\nMAHAN  M EY1 - AH0 N\nMAHANEY  M AH0 - HH EY1 - N IY0\nMAHANNAH  M AH0 - HH AE1 - N AH0\nMAHANY  M AE1 - HH AH0 - N IY0\nMAHAR  M AE1 - HH ER0\nMAHARAJA  M AA2 - HH ER0 - AA1 - ZH AH2\nMAHARAJA'S  M AA0 - HH ER0 - AA1 - ZH AH2 Z\nMAHARAJAHS  M AA0 - HH ER0 - AA1 - JH AH0 Z\nMAHARASHTRA  M AA2 - HH ER0 - AA1 SH - T R AH2\nMAHARIV  M AA2 - HH AA1 - R IY0 V\nMAHARIVE  M AA2 - HH AH0 - R IY1 V\nMAHATHIR  M AE1 - HH AH0 - TH ER0\nMAHATHIR(2)  M AH0 - HH AE1 - TH IH2 R\nMAHATHIR(3)  M AH0 - HH AA1 - TH IH2 R\nMAHATMA  M AH0 - HH AA1 T - M AH0\nMAHAYANA  M AA2 - HH AH0 - Y AA1 - N AH0\nMAHDI  M AA1 - D IY0\nMAHE  M EY1 - HH IY0\nMAHEN  M EY1 - HH EH2 N\nMAHEN(2)  M EY1 - AH0 N\nMAHER  M AA1 R\nMAHESH  M AH0 - HH EH1 SH\nMAHEU  M AE1 - HH Y UW0\nMAHFOUZ  M AA0 - F UW1 Z\nMAHFOUZ'S  M AA0 - F UW1 - Z IH0 Z\nMAHILA  M AH0 - HH IH1 - L AH0\nMAHIN  M AE1 - HH IH0 N\nMAHINDRA  M AH0 - HH IH1 N - D R AH0\nMAHL  M AA1 L\nMAHLE  M EY1 - HH AH0 L\nMAHLER  M AA1 - L ER0\nMAHLER'S  M AA1 - L ER0 Z\nMAHLMAN  M AA1 L - M AH0 N\nMAHLMANN  M AA1 L - M AH0 N\nMAHLSTEDT  M AA1 L - S T IH0 T\nMAHLUM  M AA1 - L AH0 M\nMAHMOOD  M AE1 - M UW0 D\nMAHMOOD(2)  M AA0 - M UW1 D\nMAHMOUD  M AE1 - M UW0 D\nMAHMOUD(2)  M AA0 - M UW1 D\nMAHMUD  M AE1 - M UW0 D\nMAHMUD(2)  M AA0 - M UW1 D\nMAHN  M AE1 N\nMAHNKE  M AE1 NG K\nMAHNKEN  M AA1 NG - K AH0 N\nMAHOGANY  M AH0 - HH AA1 - G AH0 - N IY0\nMAHON  M EY1 - AH0 N\nMAHONE  M AE1 - HH AH0 N\nMAHONEY  M AH0 - HH OW1 - N IY0\nMAHONY  M AE1 - HH AH0 - N IY0\nMAHOOD  M AA1 - HH UH0 D\nMAHOWALD  M AE1 - HH AW0 - AO0 L D\nMAHR  M AA1 R\nMAHRT  M AA1 R T\nMAHTAN  M AA1 - T AA2 N\nMAHTAR  M AA1 - T ER0\nMAHURIN  M AE1 - HH Y ER0 - IH0 N\nMAHVI  M AA1 - V IY0\nMAHWAH  M AA1 - W AH0\nMAI  M AY1\nMAIA  M AY1 - AH0\nMAID  M EY1 D\nMAID'S  M EY1 D Z\nMAIDA  M EY1 - D AH0\nMAIDEL  M EY1 - D AH0 L\nMAIDEN  M EY1 - D AH0 N\nMAIDENFORM  M EY1 - D AH0 N - F AO2 R M\nMAIDENS  M EY1 - D AH0 N Z\nMAIDIE  M EY1 - D IY0\nMAIDS  M EY1 D Z\nMAIELLO  M AY2 - EH1 - L OW0\nMAIER  M EY1 - ER0\nMAIERS  M EY1 - ER0 Z\nMAIETTA  M AY0 - EH1 - T AH0\nMAIL  M EY1 L\nMAIL'S  M EY1 L Z\nMAILBAG  M EY1 L - B AE2 G\nMAILBOX  M EY1 L - B AA2 K S\nMAILBOXES  M EY1 L - B AA2 K - S IH0 Z\nMAILE  M EY1 L\nMAILED  M EY1 L D\nMAILER  M EY1 - L ER0\nMAILER'S  M EY1 - L ER0 Z\nMAILERS  M EY1 - L ER0 Z\nMAILEY  M EY1 - L IY0\nMAILGRAM  M EY1 L - G R AE2 M\nMAILGRAMS  M EY1 L - G R AE2 M Z\nMAILHOT  M AY1 L - HH AH0 T\nMAILING  M EY1 - L IH0 NG\nMAILINGS  M EY1 - L IH0 NG Z\nMAILLARD  M EH0 - L AA1 R D\nMAILLE  M EY1 L\nMAILLET  M EH0 - L EH1 T\nMAILLOUX  M EH0 - L UW1\nMAILMAN  M EY1 L - M AE2 N\nMAILROOM  M EY1 L - R UW2 M\nMAILS  M EY1 L Z\nMAILSON  M EY1 L - S AH0 N\nMAIM  M EY1 M\nMAIMED  M EY1 M D\nMAIMING  M EY1 - M IH0 NG\nMAIMONE  M EY1 - M OW2 N\nMAIMS  M EY1 M Z\nMAIN  M EY1 N\nMAINA  M EY1 - N AH0\nMAINARD  M EY1 - N ER0 D\nMAINE  M EY1 N\nMAINE'S  M EY1 N Z\nMAINER  M EY1 - N ER0\nMAINES  M EY1 N Z\nMAINFRAME  M EY1 N - F R EY2 M\nMAINFRAMES  M EY1 N - F R EY2 M Z\nMAINICHI  M AA2 - IH0 - N IY1 - CH IY0\nMAINLAND  M EY1 N - L AE2 N D\nMAINLAND(2)  M EY1 N - L AH0 N D\nMAINLANDER  M EY1 N - L AE2 N - D ER0\nMAINLANDERS  M EY1 N - L AE2 N - D ER0 Z\nMAINLINE  M EY1 N - L AY2 N\nMAINLY  M EY1 N - L IY0\nMAINO  M EY1 - N OW0\nMAINOR  M EY1 - N ER0\nMAINORD  M EH0 - N AO1 R D\nMAINS  M EY1 N Z\nMAINSTAY  M EY1 N - S T EY2\nMAINSTAYS  M EY1 N - S T EY2 Z\nMAINSTREAM  M EY1 N - S T R IY2 M\nMAINSTREAMING  M EY1 N - S T R IY2 - M IH0 NG\nMAINSTREET  M EY1 N - S T R IY2 T\nMAINTAIN  M EY0 N - T EY1 N\nMAINTAINED  M EY0 N - T EY1 N D\nMAINTAINING  M EY0 N - T EY1 - N IH0 NG\nMAINTAINS  M EY0 N - T EY1 N Z\nMAINTENANCE  M EY1 N - T AH0 - N AH0 N S\nMAINTENANCE(2)  M EY1 N T - N AH0 N S\nMAINVILLE  M EY1 N - V IH2 L\nMAINWARING  M EY1 N - W EH2 - R IH0 NG\nMAINZ  M EY1 N Z\nMAIO  M EY1 - OW0\nMAIOLO  M AY1 - OW0 - L OW0\nMAIONE  M AY1 - OW0 - N IY0\nMAIORANA  M AY0 - AO0 - R AE1 - N AH0\nMAIORANO  M AY1 - AO0 - R AA0 - N OW0\nMAIORINO  M AY0 - AO0 - R IY1 - N OW0\nMAIR  M EH1 R\nMAIRE  M EH1 R\nMAIRS  M EH1 R Z\nMAIS  M EY1 Z\nMAISANO  M AH0 - S AA1 - N OW0\nMAISCH  M AY1 SH\nMAISEL  M AY1 - S AH0 L\nMAISH  M AA1 - IH0 SH\nMAISIE  M EY1 - Z IY0\nMAISON  M EY1 - Z AH0 N\nMAISONET  M EH1 - S AH0 - N IH0 T\nMAITLAND  M EY1 T - L AH0 N D\nMAITRE  M EY1 - T R AH0\nMAIZE  M EY1 Z\nMAIZE'S  M EY1 - Z AH0 Z\nMAIZIERE  M EY1 - Z IH2 R\nMAJ  M AE1 JH\nMAJCHER  M AE1 JH - K ER0\nMAJCHRZAK  M AY1 R - Z AH0 K\nMAJER  M EY1 - JH ER0\nMAJERUS  M AE1 - JH ER0 - IH0 S\nMAJESKE  M AY0 - EH1 S - K IY0\nMAJESKI  M AY0 - EH1 S - K IY0\nMAJESTA  M AA0 - Y EY1 - S T AH0\nMAJESTIC  M AH0 - JH EH1 - S T IH0 K\nMAJESTICALLY  M AH0 - JH EH1 - S T IH0 - K AH0 - L IY0\nMAJESTICALLY(2)  M AH0 - JH EH1 - S T IH0 K - L IY0\nMAJESTY  M AE1 - JH AH0 - S T IY0\nMAJESTY'S  M AE1 - JH AH0 - S T IY0 Z\nMAJETTE  M AH0 - ZH EH1 T\nMAJEURE  M AH0 - JH UW1 R\nMAJEWSKI  M AY0 - EH1 F S - K IY0\nMAJID  M AH0 - JH IH1 D\nMAJIK  M AE1 - JH IH0 K\nMAJKA  M AY1 - K AH0\nMAJKOWSKI  M AY0 - K AO1 F S - K IY0\nMAJNOON  M AE2 JH - N UW1 N\nMAJOR  M EY1 - JH ER0\nMAJOR'S  M EY1 - JH ER0 Z\nMAJORED  M EY1 - JH ER0 D\nMAJORING  M EY1 - JH ER0 - IH0 NG\nMAJORITARIAN  M AE2 - JH ER0 - IH0 - T EH1 - R IY0 - AH0 N\nMAJORITIES  M AH0 - JH AO1 - R IH0 - T IY0 Z\nMAJORITY  M AH0 - JH AO1 - R AH0 - T IY0\nMAJORITY'S  M AH0 - JH AO1 - R AH0 - T IY0 Z\nMAJOROS  M AA0 - Y AO1 - R OW0 Z\nMAJORS  M EY1 - JH ER0 Z\nMAJROOH  M AE1 - JH R UW0\nMAJURE  M AA0 - Y UH1 - R EY0\nMAK  M AE1 K\nMAK-KWAN  M AE1 K - K W AA1 N\nMAKAR  M AE1 - K ER0\nMAKARA  M AA0 - K AA1 - R AH0\nMAKAREWICZ  M AH0 - K AA1 - R IH0 - V IH0 CH\nMAKE  M EY1 K\nMAKEFIELD  M EY1 K - F IY0 L D\nMAKEGOOD  M EY1 K - G UH2 D\nMAKEGOODS  M EY1 K - G UH2 D Z\nMAKELA  M AE1 - K IH0 - L AH0\nMAKEOVER  M AE1 K - OW2 - V ER0\nMAKEPEACE  M AE1 K - P IY0 S\nMAKER  M EY1 - K ER0\nMAKER'S  M EY1 - K ER0 Z\nMAKERS  M EY1 - K ER0 Z\nMAKERS'  M EY1 - K ER0 Z\nMAKES  M EY1 K S\nMAKESHIFT  M EY1 K - SH IH2 F T\nMAKEUP  M EY1 K - AH2 P\nMAKHOUL  M AH0 - K UW1 L\nMAKI  M AA1 - K IY0\nMAKIN  M AE1 - K IH0 N\nMAKIN'  M EY1 - K IH0 N\nMAKINEN  M AE1 - K IH0 - N AH0 N\nMAKING  M EY1 - K IH0 NG\nMAKINGS  M EY1 - K IH0 NG Z\nMAKINSON  M AE1 - K IH0 N - S AH0 N\nMAKITA  M AH0 - K IY1 - T AH0\nMAKO  M AA1 - K OW0\nMAKOS  M EY1 - K OW0 Z\nMAKOTO  M AH0 - K OW1 - T OW0\nMAKOWSKI  M AH0 - K AO1 F S - K IY0\nMAKOWSKY  M AH0 - K AW1 S - K IY0\nMAKRIS  M AE1 - K R IH0 S\nMAKRO  M AE1 - K R OW0\nMAKSOUD  M AE0 K - S UW1 D\nMAKSYMUK  M AE1 K - S IY0 - M UH2 K\nMAKTOUM  M AE0 K - T UW1 M\nMAKTOUMS  M AE0 K - T UW1 M Z\nMAKUCH  M AE1 - K AH0 K\nMAL  M AE1 L\nMAL'S  M AE1 L Z\nMALA  M AA1 - L AH0\nMALABRE  M AE1 - L AH0 - B R AH0\nMALACANANG  M AH0 - L AE1 - K AH0 - N AE0 NG\nMALACCA  M AH0 - L AE1 - K AH0\nMALACHOWSKI  M AH0 - L AH0 - HH AO1 F S - K IY0\nMALADICH  M AE1 - L AH0 - D IH0 K\nMALADICH(2)  M AE1 - L AH0 - D IH0 CH\nMALADIES  M AE1 - L AH0 - D IY0 Z\nMALADJUSTED  M AE2 L - AH0 - JH AH1 - S T IH0 D\nMALADROIT  M AE2 - L AH0 - D R OY1 T\nMALADY  M AE1 - L AH0 - D IY0\nMALAGA  M AE1 - L AH0 - G AH0\nMALAGASY  M AE2 - L AH0 - G AE1 - S IY0\nMALAHIDE  M AE2 - L AH0 - HH AY1 D\nMALAISE  M AE0 - L EY1 Z\nMALAK  M AE1 - L AH0 K\nMALAMUD  M AE1 - L AH0 - M AH0 D\nMALAMUGI  M AE1 - L AH0 - M Y UW2 - JH IY0\nMALAMUTE  M AE1 - L AH0 - M Y UW2 T\nMALAN  M EY1 - L AH0 N\nMALAND  M AE1 - L AH0 N D\nMALANEY  M AH0 - L EY1 - N IY0\nMALANGA  M AA0 - L AA1 NG - G AH0\nMALANOWSKI  M AH0 - L AH0 - N AO1 F S - K IY0\nMALAPROP  M AE1 - L AH0 - P R AA2 P\nMALARA  M AA0 - L AA1 - R AH0\nMALARIA  M AH0 - L EH1 - R IY0 - AH0\nMALARIAL  M AH0 - L EH1 - R IY0 - AH0 L\nMALARKEY  M AH0 - L AA1 R - K IY0\nMALARY  M AE1 - L AH0 - R IY0\nMALASPINA  M AA0 - L AA0 - S P IY1 - N AH0\nMALATESTA  M AA0 - L AA0 - T EH1 - S T AH0\nMALATHION  M AH0 - L AE1 - TH IY0 - AO0 N\nMALATHION(2)  M AH0 - L AE1 - TH IY0 - AH0 N\nMALAVE  M AA0 - L AA1 - V IY0\nMALAWI  M AH0 - L AA1 - W IY0\nMALAWI'S  M AH0 - L AA1 - W IY0 Z\nMALAY  M EY1 - L EY0\nMALAYAN  M AH0 - L EY1 - AH0 N\nMALAYS  M AH0 - L EY1 Z\nMALAYSIA  M AH0 - L EY1 - ZH AH0\nMALAYSIA'S  M AH0 - L EY1 - ZH AH0 Z\nMALAYSIAN  M AH0 - L EY1 - ZH AH0 N\nMALAYSIANS  M AH0 - L EY1 - ZH AH0 N Z\nMALBON  M AE1 L - B AH0 N\nMALBROUGH  M AE1 L - B R AW0\nMALBURG  M AE1 L - B ER0 G\nMALCHOW  M AA1 L - HH AW0\nMALCOLM  M AE1 L - K AH0 M\nMALCOLM'S  M AE1 L - K AH0 M Z\nMALCOLMSON  M AE1 L - K AH0 M - S AH0 N\nMALCOM  M AE1 L - K AH0 M\nMALCOMB  M AE1 L - K AH0 M\nMALCOMSON  M AE1 L - K AH0 M - S AH0 N\nMALCONTENT  M AE2 L - K AH0 N - T EH1 N T\nMALCONTENTS  M AE2 L - K AH0 N - T EH1 N T S\nMALCZEWSKI  M AH0 L - CH EH1 F S - K IY0\nMALDEN  M AO1 L - D AH0 N\nMALDIVES  M AO1 L - D AY2 V Z\nMALDONADO  M AE0 L - D AH0 - N AA1 - D OW0\nMALDUTIS  M AA0 L - D UW1 - T IH0 S\nMALE  M EY1 L\nMALE'S  M EY1 L Z\nMALEC  M AA1 - L IH0 K\nMALECHA  M AH0 - L EH1 - CH AH0\nMALECKI  M AH0 - L EH1 - K IY0\nMALEFACTOR  M AE1 - L AH0 - F AE2 K - T ER0\nMALEFACTOR(2)  M AE1 L - F AE2 K - T ER\nMALEFACTORS(2)  M AE1 L - F AE2 K - T ER0 Z\nMALEK  M AA1 - L EH0 K\nMALENA  M AE1 - L IH0 - N AH0\nMALENFANT  M AA0 - L EY1 N - F AH0 N T\nMALER  M EY1 - L ER0\nMALERBA  M AA0 - L EH1 R - B AH0\nMALES  M EY1 L Z\nMALESKI  M AH0 - L EH1 S - K IY0\nMALESKY  M AH0 - L EH1 S - K IY0\nMALEVOLENT  M AH0 - L EH1 - V AH0 - L AH0 N T\nMALEY  M EY1 - L IY0\nMALFEASANCE  M AE2 L - F IY1 - Z AH0 N S\nMALFITANO  M AE2 L - F IH0 - T AA1 - N OW0\nMALFORMATION  M AE2 L - F AO0 R - M EY1 - SH AH0 N\nMALFORMATIONS  M AE2 L - F AO0 R - M EY1 - SH AH0 N Z\nMALFORMED  M AE2 L - F AO1 R M D\nMALFUNCTION  M AE0 L - F AH1 NG K - SH AH0 N\nMALFUNCTIONED  M AE0 L - F AH1 NG K - SH AH0 N D\nMALFUNCTIONING  M AE0 L - F AH1 NG K - SH AH0 N - IH0 NG\nMALFUNCTIONS  M AE0 L - F AH1 NG K - SH AH0 N Z\nMALHOTRA  M AE2 L - HH AA1 - T R AH0\nMALI  M AA1 - L IY0\nMALIA  M AA1 - L IY0 - AH0\nMALIBU  M AE1 - L AH0 - B UW0\nMALICE  M AE1 - L AH0 S\nMALICE(2)  M AE1 - L IH0 S\nMALICIOUS  M AH0 - L IH1 - SH AH0 S\nMALICIOUSLY  M AH0 - L IH1 - SH IH0 S - L IY0\nMALICK  M AE1 - L IH0 K\nMALICKI  M AH0 - L IH1 - K IY0\nMALICOAT  M AE1 - L IH0 - K OW2 T\nMALIGN  M AH0 - L AY1 N\nMALIGNANCIES  M AH0 - L IH1 G - N AH0 N - S IY0 Z\nMALIGNANCY  M AH0 - L IH1 G - N AH0 N - S IY0\nMALIGNANT  M AH0 - L IH1 G - N AH0 N T\nMALIGNED  M AH0 - L AY1 N D\nMALIK  M AE1 - L IH0 K\nMALIN  M AE1 - L IH0 N\nMALIN(2)  M EY1 - L IH0 N\nMALINA  M AA0 - L IY1 - N AH0\nMALINAK  M AE1 - L IH0 - N AE2 K\nMALINDA  M AA0 - L IY1 N - D AH0\nMALINDE  M AE1 - L IH0 N D\nMALINE  M AA0 - L IY1 - N IY0\nMALINOSKI  M AH0 - L IH0 - N AW1 S - K IY0\nMALINOWSKI  M AH0 - L IH0 - N AO1 F S - K IY0\nMALINSKI  M AH0 - L IH1 N - S K IY0\nMALIS  M AA1 - L IY0 Z\nMALISZEWSKI  M AH0 - L IH0 - SH EH1 F S - K IY0\nMALIZIA  M AH0 - L IH1 - Z IY0 - AH0\nMALKIEL  M AO1 L - K IY0 - AH0 L\nMALKIEWICZ  M AA1 L - K AH0 - V IH0 CH\nMALKIN  M AE1 L - K IH0 N\nMALKOVICH  M AO1 L - K AH0 - V IH0 CH\nMALKOWSKI  M AH0 L - K AO1 F S - K IY0\nMALL  M AO1 L\nMALL'S  M AO1 L Z\nMALLARD  M AE1 - L ER0 D\nMALLARDS  M AE1 - L ER0 D Z\nMALLE  M AE1 L\nMALLEABILITY  M AE2 - L IY0 - AH0 - B IH1 - L AH0 - T IY0\nMALLEABLE  M AE1 - L IY0 - AH0 - B AH0 L\nMALLEK  M AE1 - L IH0 K\nMALLEN  M AO1 - L AH0 N\nMALLER  M AO1 - L ER0\nMALLERY  M AE1 - L ER0 - IY0\nMALLET  M AE1 - L IH0 T\nMALLETON  M AE1 - L AH0 - T AH0 N\nMALLETON'S  M AE1 - L AH0 - T AH0 N Z\nMALLETT  M AE1 - L IH0 T\nMALLETTE  M AH0 - L EH1 T\nMALLEY  M AE1 - L IY0\nMALLIA  M AA1 - L IY0 - AH0\nMALLICK  M AE1 - L IH0 K\nMALLICOAT  M AE1 - L IH0 - K OW0 T\nMALLIE  M AO1 - L IY0\nMALLIGHTCO  M AE2 - L AY1 T - K OW0\nMALLIN  M AE1 - L IH0 N\nMALLINCKRODT  M AE1 - L IH0 NG - K R AA2 T\nMALLINGER  M AO1 - L IH0 - NG ER0\nMALLINSON  M AE1 - L IH0 N - S AH0 N\nMALLIS  M AE1 - L IH0 S\nMALLISON  M AE1 - L IH0 - S AH0 N\nMALLO  M AA1 - L OW0\nMALLOCH  M AE1 - L AH0 K\nMALLON  M AE1 - L AH0 N\nMALLONEE  M AE0 - L AH0 - N IY1\nMALLORY  M AE1 - L ER0 - IY0\nMALLOW  M AE1 - L OW0\nMALLOWS  M AE1 - L OW0 Z\nMALLOY  M AH0 - L OY1\nMALLOZZI  M AE2 - L AA1 - Z IY0\nMALLRAT  M AO1 L - R AE0 T\nMALLRATS  M AO1 L - R AE0 T S\nMALLS  M AO1 L Z\nMALLY  M AE1 - L IY0\nMALM  M AA1 M\nMALMBERG  M AA1 L M - B ER0 G\nMALMGREN  M AE1 L M - G R EH0 N\nMALMQUIST  M AE1 L M - K W IH0 S T\nMALMSTROM  M AE1 L M S - T R AH0 M\nMALNAR  M AE1 L - N ER0\nMALNOURISH  M AE0 L - N ER1 - IH0 SH\nMALNOURISHED  M AE0 L - N ER1 - IH0 SH T\nMALNUTRITION  M AE2 L - N UW0 - T R IH1 - SH AH0 N\nMALO  M AA1 - L OW0\nMALON  M AE1 - L AH0 N\nMALONE  M AH0 - L OW1 N\nMALONE'S  M AH0 - L OW1 N Z\nMALONEY  M AH0 - L OW1 - N IY0\nMALOOF  M AH0 - L UW1 F\nMALOSOVICH  M AH0 - L AO1 - S AH0 - V IH0 CH\nMALOTT  M AH0 - L AA1 T\nMALOUF  M AE1 - L OW0 F\nMALOY  M AE1 - L OY0\nMALPASS  M AE1 L - P AH0 S\nMALPHRUS  M AE1 L - F R AH0 S\nMALPRACTICE  M AE0 L - P R AE1 K - T AH0 S\nMALPRACTICE(2)  M AE0 L - P R AE1 K - T IH0 S\nMALRITE  M AE1 L - R AY2 T\nMALRITE'S  M AE1 L - R AY2 T S\nMALSOM  M AE1 L - S AH0 M\nMALSON  M AE1 L - S AH0 N\nMALSTROM  M AE1 L - S T R AH0 M\nMALT  M AO1 L T\nMALTA  M AO1 L - T AH0\nMALTAIS  M AH0 L - T EY1\nMALTASE  M AO1 L - T EY2 S\nMALTBIE  M AE1 L T - B IY0\nMALTBY  M AE1 L T - B IY0\nMALTED  M AO1 L - T AH0 D\nMALTER  M AO1 L - T ER0\nMALTESE  M AO0 L - T IY1 Z\nMALTING  M AO1 L - T IH0 NG\nMALTOSE  M AO1 L - T OW0 S\nMALTREATED  M AE0 L - T R IY1 - T IH0 D\nMALTREATMENT  M AE0 L - T R IY1 T - M AH0 N T\nMALTS  M AO1 L T S\nMALTZ  M AE1 L T S\nMALUEG  M AE1 - L UH0 G\nMALUKEN  M AE2 - L UW1 - K IH0 N\nMALUSO  M AH0 - L UW1 - S OW0\nMALVA  M AA1 L - V AH0\nMALVAL  M AA1 L - V AA0 L\nMALVEAUX  M AE0 L - V OW1\nMALVERN  M AE1 L - V ER0 N\nMALVIE  M AO1 L - V IY0\nMALVIN  M AE1 L - V IH0 N\nMALVINA  M AA0 L - V IY1 - N AH0\nMALVINAS  M AO0 L - V IY1 - N AH0 S\nMALY  M EY1 - L IY0\nMALZAHN  M AE1 L - Z AH0 N\nMAM  M AA1 M\nMAM(2)  EH1 - M EY1 - EH1 M\nMAMA  M AA1 - M AH0\nMAMA'S  M AA1 - M AH0 Z\nMAMARONECK  M AH0 - M EH1 - R AH0 - N EH0 K\nMAMAS  M AA1 - M AH0 Z\nMAMBA  M AA1 M - B AH0\nMAMBAS  M AA1 M - B AH0 Z\nMAMBO  M AA1 M - B OW0\nMAME  M EY1 M\nMAMELUKE  M AE1 - M AH0 - L UW2 K\nMAMET  M AE1 - M AH0 T\nMAMET'S  M AE1 - M AH0 T S\nMAMIE  M EY1 - M IY0\nMAMIS  M AE1 - M IH0 S\nMAMMA  M AA1 - M AH0\nMAMMAL  M AE1 - M AH0 L\nMAMMALIAN  M AH0 - M EY1 - L IY0 - AH0 N\nMAMMALIAN(2)  M AH0 - M EY1 - L Y AH0 N\nMAMMALLIKE  M AE1 - M AH0 L - L AY2 K\nMAMMALS  M AE1 - M AH0 L Z\nMAMMARY  M AE1 - M ER0 - IY0\nMAMMEN  M AE1 - M AH0 N\nMAMMOGRAM  M AE1 - M OW0 - G R AE2 M\nMAMMOGRAMS  M AE1 - M OW0 - G R AE2 M Z\nMAMMOGRAPHY  M AH0 - M AA1 - G R AH0 - F IY0\nMAMMOTH  M AE1 - M AH0 TH\nMAMMOTHS  M AE1 - M AH0 TH S\nMAMONE  M AH0 - M OW1 N\nMAMSTED  M AE1 M - S T EH0 D\nMAMULA  M AE1 - M Y UW0 - L AH0\nMAN  M AE1 N\nMAN'S  M AE1 N Z\nMANA  M AA1 - N AH0\nMANAC  M AE1 - N AE0 K\nMANAFORT  M AE1 - N AH0 - F AO0 R T\nMANAGE  M AE1 - N AH0 JH\nMANAGE(2)  M AE1 - N IH0 JH\nMANAGEABLE  M AE1 - N IH0 - JH AH0 - B AH0 L\nMANAGED  M AE1 - N AH0 JH D\nMANAGED(2)  M AE1 - N IH0 JH D\nMANAGEMENT  M AE1 - N AH0 JH - M AH0 N T\nMANAGEMENT'S  M AE1 - N IH0 JH - M AH0 N T S\nMANAGEMENT(2)  M AE1 - N IH0 JH - M AH0 N T\nMANAGEMENTS  M AE1 - N IH0 JH - M AH0 N T S\nMANAGEMENTS'  M AE1 - N IH0 JH - M AH0 N T S\nMANAGER  M AE1 - N AH0 - JH ER0\nMANAGER'S  M AE1 - N IH0 - JH ER0 Z\nMANAGER(2)  M AE1 - N IH0 - JH ER0\nMANAGERIAL  M AE2 - N IH0 - JH IH1 - R IY0 - AH0 L\nMANAGERS  M AE1 - N AH0 - JH ER0 Z\nMANAGERS'  M AE1 - N AH0 - JH ER0 Z\nMANAGERS(2)  M AE1 - N IH0 - JH ER0 Z\nMANAGES  M AE1 - N IH0 - JH IH0 Z\nMANAGING  M AE1 - N AH0 - JH IH0 NG\nMANAGUA  M AH0 - N AA1 - G W AH0\nMANAGUA'S  M AH0 - N AA1 - G W AH0 Z\nMANAHAN  M AE1 - N AH0 - HH AE0 N\nMANAK  M AE1 - N AH0 K\nMANALO  M AA0 - N AA1 - L OW0\nMANAMA  M AE1 - N AH0 - M AH0\nMANARD  M AE1 - N ER0 D\nMANAS  M AA1 - N AH0 Z\nMANASCO  M AA0 - N AA1 - S K OW0\nMANASION  M AE2 - N AH0 - SH AH0 N\nMANASION'S  M AE2 - N AH0 - SH AH0 N Z\nMANASSAS  M AH0 - N AA1 - S AH0 S\nMANATEE  M AE1 - N AH0 - T IY2\nMANATEES  M AE1 - N AH0 - T IY2 Z\nMANATT  M AE1 - N AH0 T\nMANBECK  M AE1 N - B EH2 K\nMANCE  M AE1 N S\nMANCEBO  M AA0 N - CH EH1 - B OW0\nMANCERA  M AE0 N - S EH1 - R AH0\nMANCHA  M AA1 N - K AH0\nMANCHESTER  M AE1 N - CH EH2 - S T ER0\nMANCHU  M AE1 N - CH UW0\nMANCHURIA  M AE0 N - CH UH1 - R IY0 - AH0\nMANCIL  M AE1 N - S IH0 L\nMANCILLA  M AE2 N - S IH1 - L AH0\nMANCILLAS  M AH0 N - S IH1 - L AH0 Z\nMANCINELLI  M AA0 N - CH IY0 - N EH1 - L IY0\nMANCINI  M AA0 N - CH IY1 - N IY0\nMANCINO  M AA0 N - CH IY1 - N OW0\nMANCO  M AE1 NG - K OW0\nMANCUSI  M AA0 N - K UW1 - S IY0\nMANCUSO  M AE2 NG - K Y UW1 - S OW0\nMANDA  M AE1 N - D AH0\nMANDALAY  M AE1 N - D AH0 - L EY2\nMANDALIT  M AE1 N - D AH0 - L IH2 T\nMANDALITE  M AE1 N - D AH0 - L AY2 T\nMANDAMUS  M AE0 N - D EY1 - M AH0 S\nMANDARIN  M AE1 N - D ER0 - AH0 N\nMANDARINO  M AA0 N - D AA0 - R IY1 - N OW0\nMANDARINS  M AE1 N - D ER0 - AH0 N Z\nMANDATE  M AE1 N - D EY2 T\nMANDATED  M AE1 N - D EY2 - T IH0 D\nMANDATES  M AE1 N - D EY2 T S\nMANDATING  M AE1 N - D EY2 - T IH0 NG\nMANDATO  M AA0 N - D AA1 - T OW0\nMANDATORY  M AE1 N - D AH0 - T AO2 - R IY0\nMANDEL  M AE1 N - D AH0 L\nMANDELA  M AE2 N - D EH1 - L AH0\nMANDELA'S  M AE2 N - D EH1 - L AH0 Z\nMANDELBAUM  M AE1 N - D AH0 L - B AW2 M\nMANDELL  M AE1 N - D AH0 L\nMANDELLA  M AE2 N - D EH1 - L AH0\nMANDER  M AE1 N - D ER0\nMANDERS  M AE1 N - D ER0 Z\nMANDERSCHEID  M AE1 N - D ER0 - SH AY2 D\nMANDERSON  M AE1 N - D ER0 - S AH0 N\nMANDEVILLE  M AE1 N - D AH0 - V IH2 L\nMANDIBLE  M AE1 N - D AH0 - B AH0 L\nMANDIBLE(2)  M AE1 N - D IH0 - B AH0 L\nMANDICH  M AE1 N - D IH0 K\nMANDIE  M AE1 N - D IY0\nMANDIGO  M AA0 N - D IY1 - G OW0\nMANDL  M AE1 N - D AH0 L\nMANDLE  M AE1 N - D AH0 L\nMANDLER  M AE1 N D - L ER0\nMANDOLIN  M AE1 N - D AH0 - L IH2 N\nMANDRACCHIA  M AE2 N - D R AE1 - K IY0 - AH0\nMANDRAKE  M AE1 N - D R EY2 K\nMANDRELL  M AE1 N - D R AH0 L\nMANDRESH  M AE0 N - D R EH1 SH\nMANDRILL  M AE1 N - D R IH0 L\nMANDT  M AE1 N T\nMANDUJANO  M AA0 N - D UW0 - Y AA1 - N OW0\nMANDY  M AE1 N - D IY0\nMANE  M EY1 N\nMANED  M EY1 N D\nMANELLA  M AH0 - N EH1 - L AH0\nMANER  M EY1 - N ER0\nMANERS  M EY1 - N ER0 Z\nMANES  M EY1 N Z\nMANESS  M AA1 - N IH0 S\nMANET  M AE0 - N EY1\nMANET(2)  M AA0 - N EY1\nMANETTE  M AH0 - N EH1 T\nMANEUVER  M AH0 - N UW1 - V ER0\nMANEUVERABILITY  M AH0 - N UW2 - V ER0 - AH0 - B IH1 - L IH0 - T IY0\nMANEUVERABILITY(2)  M AH0 - N UW2 - V R AH0 - B IH1 - L IH0 - T IY0\nMANEUVERABLE  M AH0 - N UW1 - V ER0 - AH0 - B AH0 L\nMANEUVERED  M AH0 - N UW1 - V ER0 D\nMANEUVERING  M AH0 - N UW1 - V ER0 - IH0 NG\nMANEUVERINGS  M AH0 - N UW1 - V ER0 - IH0 NG Z\nMANEUVERS  M AH0 - N UW1 - V ER0 Z\nMANEVAL  M AA0 - N EY0 - V AE1 L\nMANEY  M EY1 - N IY0\nMANFORD  M AE1 N - F ER0 D\nMANFRA  M AE1 N - F R AH0\nMANFRE  M AE1 N - F ER0\nMANFRED  M AE1 N - F R IH0 D\nMANFREDI  M AA0 N - F R EH1 - D IY0\nMANFREDO  M AA0 N - F R EY1 - D OW0\nMANFULLY  M AE1 N - F AH0 - L IY0\nMANG  M AE1 NG\nMANGA  M AE1 NG - G AH0\nMANGAN  M AE1 NG - G AH0 N\nMANGANARO  M AA0 NG - G AA0 - N AA1 - R OW0\nMANGANELLO  M AA0 NG - G AA0 - N EH1 - L OW0\nMANGANESE  M AE1 NG - G AH0 - N IY2 Z\nMANGANIELLO  M AA0 NG - G AA0 - N IY0 - EH1 - L OW0\nMANGANO  M AA0 NG - G AA1 - N OW0\nMANGAS  M AE1 NG - G AH0 Z\nMANGE  M EY1 N JH\nMANGEL  M EY1 NG - G AH0 L\nMANGELS  M EY1 NG - G AH0 L Z\nMANGEMENT  M EY1 N JH - M AH0 N T\nMANGEN  M AE1 - NG AH0 N\nMANGER  M EY1 N - JH ER0\nMANGES  M EY1 N - JH IH0 Z\nMANGHAM  M AE1 NG - G AH0 M\nMANGIAPANE  M AE1 N - JH IY0 - AH0 - P EY2 N\nMANGIARACINA  M AA1 N - JH ER0 - AA0 - CH IY0 - N AH0\nMANGIERI  M AA0 NG - G IH1 - R IY0\nMANGIN  M AE1 NG - G IH0 N\nMANGINE  M AA0 NG - G IY1 - N IY0\nMANGINI  M AA0 NG - G IY1 - N IY0\nMANGINO  M AA0 NG - G IY1 - N OW0\nMANGIONE  M AA0 N - JH OW1 - N IY0\nMANGLAPUS  M AE1 NG - L AH0 - P AH0 S\nMANGLE  M AE1 NG - G AH0 L\nMANGLED  M AE1 NG - G AH0 L D\nMANGLING  M AE1 NG - G AH0 - L IH0 NG\nMANGLING(2)  M AE1 NG - G L IH0 NG\nMANGO  M AE1 NG - G OW0\nMANGOES  M AE1 NG - G OW0 Z\nMANGOLD  M AE1 N - G OW2 L D\nMANGONE  M AA0 NG - G OW1 - N IY0\nMANGOPE  M AE0 NG - G OW1 - P EY2\nMANGOSTEEN  M AE1 NG - G OW0 - S T IY2 N\nMANGOSTEENS  M AE1 NG - G OW0 - S T IY2 N Z\nMANGOSUTHU  M AE2 NG - G AH0 - S AH1 - TH UW0\nMANGROVE  M AE1 N - G R OW2 V\nMANGROVE(2)  M AE1 NG - G R OW2 V\nMANGRUM  M AE1 NG - G R AH0 M\nMANGUAL  M AE1 N - G AH0 L\nMANGUM  M AE1 NG - G AH0 M\nMANGUS  M AE1 NG - G IH0 S\nMANGY  M EY1 N - JH IY0\nMANHANDLE  M AE1 N - HH AE2 N - D AH0 L\nMANHANDLED  M AE1 N - HH AE2 N - D AH0 L D\nMANHART  M AE1 N - HH AA2 R T\nMANHASSET  M AE0 N - HH AE1 - S EH0 T\nMANHATTAN  M AE0 N - HH AE1 - T AH0 N\nMANHATTAN'S  M AE0 N - HH AE1 - T AH0 N Z\nMANHEIM  M AE1 N - HH AY0 M\nMANHOLE  M AE1 N - HH OW2 L\nMANHOOD  M AE1 N - HH UH2 D\nMANHUNT  M AE1 N - HH AH2 N T\nMANI  M AA1 - N IY0\nMANIA  M EY1 - N IY0 - AH0\nMANIAC  M EY1 - N IY0 - AE2 K\nMANIACAL  M AH0 - N AY1 - AH0 - K AH0 L\nMANIACI  M AA0 - N IY0 - AA1 - CH IY0\nMANIACS  M EY1 - N IY0 - AE2 K S\nMANIATIS  M AE1 - N IY0 - AA1 - T IH0 S\nMANIC  M AE1 - N IH0 K\nMANICURE  M AE1 - N IH0 - K Y ER0\nMANICURED  M AE1 - N IH0 - K Y ER0 D\nMANICURIST  M AE1 - N IH0 - K Y ER2 - IH0 S T\nMANIER  M EH1 - N IY0 - ER0\nMANIFEST  M AE1 - N AH0 - F EH2 S T\nMANIFESTATION  M AE2 - N AH0 - F EH0 - S T EY1 - SH AH0 N\nMANIFESTATIONS  M AE2 - N AH0 - F EH0 - S T EY1 - SH AH0 N Z\nMANIFESTED  M AE1 - N AH0 - F EH2 - S T AH0 D\nMANIFESTING  M AE1 - N AH0 - F EH2 - S T IH0 NG\nMANIFESTLY  M AE1 - N AH0 - F EH0 S T - L IY0\nMANIFESTO  M AE2 - N AH0 - F EH1 - S T OW2\nMANIFESTO(2)  M AE2 - N IH0 - F EH1 - S T OW2\nMANIFESTS  M AE1 - N AH0 - F EH2 S T S\nMANIFESTS(2)  M AE1 - N AH0 - F EH2 S S\nMANIFESTS(3)  M AE1 - N AH0 - F EH2 S\nMANIFOLD  M AE1 - N AH0 - F OW2 L D\nMANIFOLD(2)  M AE1 - N IH0 - F OW2 L D\nMANIGAT  M AE1 - N IH0 - G AE0 T\nMANIGAULT  M AE1 - N IH0 - G AO0 L T\nMANIGO  M AA0 - N IY1 - G OW0\nMANILA  M AH0 - N IH1 - L AH0\nMANILA'S  M AH0 - N IH1 - L AH0 Z\nMANILLA  M AH0 - N IH1 - L AH0\nMANILOW  M AE1 - N IH0 - L OW0\nMANIOC  M AE1 - N IY0 - AA2 K\nMANION  M AA0 - N Y AO1 N\nMANIPLES  M AE1 - N AH0 - P AH0 L Z\nMANIPLES(2)  M AE1 - N IH0 - P AH0 L Z\nMANIPULATE  M AH0 - N IH1 - P Y AH0 - L EY2 T\nMANIPULATED  M AH0 - N IH1 - P Y AH0 - L EY2 - T IH0 D\nMANIPULATES  M AH0 - N IH1 - P Y AH0 - L EY2 T S\nMANIPULATING  M AH0 - N IH1 - P Y AH0 - L EY2 - T IH0 NG\nMANIPULATION  M AH0 - N IH2 - P Y AH0 - L EY1 - SH AH0 N\nMANIPULATIONS  M AH0 - N IH2 - P Y AH0 - L EY1 - SH AH0 N Z\nMANIPULATIVE  M AH0 - N IH1 - P Y AH0 - L EY2 - T IH0 V\nMANIPULATOR  M AH0 - N IH1 - P Y AH0 - L EY2 - T ER0\nMANIPULATORS  M AH0 - N IH1 - P Y AH0 - L EY2 - T ER0 Z\nMANIS  M AE1 - N IH0 S\nMANISCALCO  M AA0 - N IY0 - S K AA1 L - K OW0\nMANISCHEWITZ  M AE2 - N IH0 - SH EH1 - V IH0 T S\nMANISH  M AE1 - N IH0 SH\nMANITOBA  M AE2 - N IH0 - T OW1 - B AH0\nMANITOWOC  M AE1 - N IH0 - T AH0 - W AA0 K\nMANJACA  M AA0 N - JH AA1 - K AH0\nMANJARREZ  M AA0 N - Y AA1 - R EH0 Z\nMANK  M AE1 NG K\nMANKA  M AE1 NG - K AH0\nMANKATO  M AE0 N - K AA1 - T OW0\nMANKE  M AE1 NG K\nMANKER  M AE1 NG - K ER0\nMANKEY  M AE1 N - K IY2\nMANKIEWICZ  M AE1 NG - K IH0 - W IH0 T S\nMANKILLER  M AE1 N - K IH2 - L ER0\nMANKIN  M AE1 NG - K IH0 N\nMANKIND  M AE1 N - K AY1 N D\nMANKIND'S  M AE1 N - K AY1 N D Z\nMANKINDS  M AE1 N - K AY1 N D Z\nMANKINS  M AE1 NG - K IH0 N Z\nMANKO  M AE1 NG - K OW0\nMANKOWSKI  M AH0 NG - K AO1 F S - K IY0\nMANLEY  M AE1 N - L IY0\nMANLOVE  M AE1 N - L AH2 V\nMANLY  M AE1 N - L IY0\nMANMADE  M AE1 N - M EY1 D\nMANN  M AE1 N\nMANN'S  M AE1 N Z\nMANNA  M AE1 - N AH0\nMANNARINO  M AE1 - N ER0 - IY0 - N OW0\nMANNE  M AE1 N\nMANNED  M AE1 N D\nMANNELLA  M AA0 - N EH1 - L AH0\nMANNEN  M AE1 - N AH0 N\nMANNEQUIN  M AE1 - N AH0 - K IH0 N\nMANNEQUINS  M AE1 - N AH0 - K IH0 N Z\nMANNER  M AE1 - N ER0\nMANNERED  M AE1 - N ER0 D\nMANNERING  M AE1 - N ER0 - IH0 NG\nMANNERISM  M AE1 - N ER0 - IH2 - Z AH0 M\nMANNERISMS  M AE1 - N ER0 - IH2 - Z AH0 M Z\nMANNERIST  M AE1 - N ER0 - AH0 S T\nMANNERIST(2)  M AE1 - N ER0 - IH0 S T\nMANNERS  M AE1 - N ER0 Z\nMANNES  M AE1 N Z\nMANNESMANN  M AE1 - N AH0 S - M AH0 N\nMANNEY  M AE1 - N IY0\nMANNHEIM  M AE1 N - HH AY0 M\nMANNI  M AE1 - N IY0\nMANNIE  M AE1 - N IY0\nMANNINA  M AE1 - N IH0 - N AH0\nMANNINEN  M AE1 - N IH0 - N AH0 N\nMANNING  M AE1 - N IH0 NG\nMANNING'S  M AE1 - N IH0 NG Z\nMANNINO  M AE1 - N IY0 - N OW0\nMANNION  M AE1 - N Y AH0 N\nMANNIS  M AE1 - N IH0 S\nMANNIX  M AE1 - N IH0 K S\nMANNO  M AE1 - N OW0\nMANNON  M AE1 - N AH0 N\nMANNS  M AE1 N Z\nMANNY  M AE1 - N IY0\nMANNY'S  M AE1 - N IY0 Z\nMANO  M AA1 - N OW0\nMANOCCHIO  M AA0 - N OW1 - K IY0 - OW0\nMANOFF  M AE1 - N AO0 F\nMANOLIS  M AE1 - N AH0 - L IH0 S\nMANON  M AA0 - N AO1 N\nMANOOGIAN  M AH0 - N UW1 - JH IY0 - AH0 N\nMANOR  M AE1 - N ER0\nMANORS  M AE1 - N ER0 Z\nMANOS  M EY1 - N OW0 Z\nMANPOWER  M AE1 N - P AW2 - ER0\nMANPOWER'S  M AE1 N - P AW2 - ER0 Z\nMANRING  M AE1 N - R IH2 NG\nMANRIQUE  M AH0 N - R IY1 K\nMANRIQUEZ  M AA0 N - R IY1 - K W EH0 Z\nMANRY  M AE1 N - R IY0\nMANS  M AE1 N Z\nMANSEAU  M AH0 N - S OW1\nMANSEL  M AE1 N - S AH0 L\nMANSELL  M AE1 N - S AH0 L\nMANSER  M AE1 N - S ER0\nMANSFIELD  M AE1 N Z - F IY2 L D\nMANSHIP  M AE1 N - SH IH2 P\nMANSION  M AE1 N - SH AH0 N\nMANSIONS  M AE1 N - CH AH0 N Z\nMANSKE  M AE1 N S K\nMANSKER  M AE1 N - S K ER0\nMANSLAUGHTER  M AE1 N - S L AO2 - T ER0\nMANSO  M AE1 N - S OW0\nMANSON  M AE1 N - S AH0 N\nMANSON'S  M AE1 N - S AH0 N Z\nMANSOUR  M AE1 N - S ER0\nMANSUETO  M AE0 N - S W EY1 - T OW0\nMANSUR  M AE1 N - S ER0\nMANTA  M AE1 N - T AH0\nMANTEER  M AE2 N - T IY1 R\nMANTEI  M AE1 N - T AY0\nMANTEL  M AE1 N - T AH0 L\nMANTELL  M AE0 N - T EH1 L\nMANTER  M AE1 N - T ER0\nMANTERNACH  M AE1 N - T ER0 - N AH0 K\nMANTEUFEL  M AE1 N - T OY0 - F AH0 L\nMANTEY  M AE1 N - T IY0\nMANTHE  M AE1 N DH\nMANTHEI  M AE1 N - DH AY0\nMANTHEY  M AE1 N - TH IY0\nMANTIA  M AA1 N - SH AH0\nMANTILLA  M AE0 N - T IH1 - L AH0\nMANTIONE  M AA0 N - T IY0 - OW1 - N IY0\nMANTIS  M AE1 N - T IH0 S\nMANTLE  M AE1 N - T AH0 L\nMANTLE'S  M AE1 N - T AH0 L Z\nMANTLES  M AE1 N - T AH0 L Z\nMANTON  M AE1 N - T AH0 N\nMANTOOTH  M AE1 N - T UW2 TH\nMANTRA  M AE1 N - T R AH0\nMANTUA  M AE1 N - CH UW0 - AH0\nMANTZ  M AE1 N T S\nMANU  M AA1 - N UW2\nMANUAL  M AE1 - N Y UW0 - AH0 L\nMANUALLY  M AE1 - N Y UW0 - AH0 - L IY0\nMANUALS  M AE1 - N Y UW0 - AH0 L Z\nMANUCHER  M AE1 - N UW0 - K ER0\nMANUEL  M AA0 N - W EH1 L\nMANUELA  M AE0 N - W EY1 - L AH0\nMANUELE  M AE1 - N UH0 L\nMANUFACTURE  M AE2 - N Y AH0 - F AE1 K - CH ER0\nMANUFACTURED  M AE2 - N Y AH0 - F AE1 K - CH ER0 D\nMANUFACTURER  M AE2 - N Y AH0 - F AE1 K - CH ER0 - ER0\nMANUFACTURER'S  M AE2 - N Y AH0 - F AE1 K - CH ER0 - ER0 Z\nMANUFACTURERS  M AE2 - N Y AH0 - F AE1 K - CH ER0 - ER0 Z\nMANUFACTURERS'  M AE2 - N AH0 - F AE1 K - CH ER0 - ER0 Z\nMANUFACTURES  M AE2 - N Y AH0 - F AE1 K - CH ER0 Z\nMANUFACTURING  M AE2 - N Y AH0 - F AE1 K - CH ER0 - IH0 NG\nMANUFACTURING'S  M AE2 - N Y AH0 - F AE1 K - CH ER0 - IH0 NG Z\nMANURE  M AH0 - N UH1 R\nMANUS  M EY1 - N IH0 S\nMANUSCRIPT  M AE1 - N Y AH0 - S K R IH2 P T\nMANUSCRIPTS  M AE1 - N Y AH0 - S K R IH2 P T S\nMANVEL  M AE1 N - V AH0 L\nMANVIL  M AE1 N - V IH0 L\nMANVILLE  M AE1 N - V IH0 L\nMANVILLE'S  M AE1 N - V IH0 L Z\nMANWARING  M AE1 N - W EH2 - R IH0 NG\nMANWARREN  M AH0 N - W AO1 - R AH0 N\nMANWEB  M AE1 N - W EH2 B\nMANWELL  M AE1 N - W EH2 L\nMANWILLER  M AE1 N - W IH2 - L ER0\nMANX  M AE1 NG K S\nMANY  M EH1 - N IY0\nMANZ  M AE1 N Z\nMANZA  M AA0 N - Z AH0\nMANZANARES  M AA0 N - Z AA0 - N AA1 - R EH0 S\nMANZANILLA  M AE2 N - Z AH0 - N IH1 - L AH0\nMANZANO  M AA0 N - Z AA1 - N OW0\nMANZELLA  M AE2 N - Z EH1 - L AH0\nMANZER  M AE1 N - Z ER0\nMANZI  M AE1 N - Z IY0\nMANZI'S  M AE1 N - Z IY0 Z\nMANZIONE  M AA0 N - Z IY0 - OW1 - N IY0\nMANZO  M AE1 N - Z OW0\nMAO  M AW1\nMAO'S  M AW1 Z\nMAOIST  M AW1 - IH0 S T\nMAOISTS  M AW1 - IH0 S T S\nMAOISTS(2)  M AW1 - IH0 S S\nMAOISTS(3)  M AW1 - IH0 S\nMAORI  M AW1 - R IY0\nMAORIS  M EY1 - ER0 - IH0 S\nMAORIS(2)  M AW1 - R IY0 Z\nMAP  M AE1 P\nMAPCO  M AE1 P - K OW0\nMAPEL  M AE1 - P AH0 L\nMAPES  M EY1 P S\nMAPI  M AE1 - P IY0\nMAPI'S  M AE1 - P IY0 Z\nMAPLE  M EY1 - P AH0 L\nMAPLES  M EY1 - P AH0 L Z\nMAPLEWOOD  M EY1 - P AH0 L - W UH2 D\nMAPP  M AE1 P\nMAPPED  M AE1 P T\nMAPPING  M AE1 - P IH0 NG\nMAPPLETHORPE  M AE1 - P AH0 L - TH AO0 R P\nMAPS  M AE1 P S\nMAPUTO  M AH0 - P UW1 - T OW0\nMAPUTO'S  M AH0 - P UW1 - T OW0 Z\nMAQUILA  M AH0 K - W IY1 - L AH0\nMAQUILADORA  M AE2 - K W IH0 - L AE1 - D ER0 - AH0\nMAQUILADORAS  M AE0 - K IY2 - Y AH0 - D AO1 - R AH0 S\nMAQUILAS  M AE1 - K W AH0 - L AH0 S\nMAR  M AA1 R\nMARA  M AA1 - R AH0\nMARABELLA  M AE2 - R AH0 - B EH1 - L AH0\nMARABLE  M EH1 - R AH0 - B AH0 L\nMARABOU  M EH1 - R AH0 - B UW2\nMARACLE  M AA1 - R AH0 - K AH0 L\nMARADONA  M AA2 - R AH0 - D OW1 - N AH2\nMARADONA'S  M AA2 - R AH0 - D OW1 - N AH2 Z\nMARADONNA  M AA2 - R AH0 - D OW1 - N AH2\nMARADONNA'S  M AA2 - R AH0 - D OW1 - N AH2 Z\nMARAFAT  M EH1 - R AH0 - F AE0 T\nMARAIS  M EH2 - R EY1\nMARAK  M AE1 - R AH0 K\nMARALINA  M AA0 - R AA0 - L IY1 - N AH0\nMARALINE  M AA0 - R AA0 - L IY1 - N IY0\nMARAN  M AA0 - R AA1 N\nMARANDA  M ER0 - AE1 N - D AH0\nMARANDO  M ER0 - AE1 N - D OW0\nMARANISS  M ER0 - AE1 - N IH0 S\nMARANO  M AA0 - R AA1 - N OW0\nMARANON  M EH1 - R AH0 - N AA0 N\nMARANTETTE  M EH1 - R AH0 N - T EH2 T\nMARANTO  M ER0 - AE1 N - T OW0\nMARANTZ  M AE1 - R AH0 N T S\nMARANVILLE  M AA0 - R AA1 N - V IH0 L\nMARAS  M AA1 - R AH0 Z\nMARASCHINO  M AE2 - R AH0 S - K IY1 - N OW0\nMARASCO  M AA0 - R AA1 - S K OW0\nMARASEK  M ER0 - AA1 - S EH0 K\nMARASH  M AA1 - R AH0 SH\nMARASH'  M AA1 - R AH0 SH\nMARASH'S  M AA1 - R AH0 - SH IH0 S\nMARATHI  M AH0 - R AA1 - T IY0\nMARATHON  M EH1 - R AH0 - TH AA2 N\nMARATHONS  M EH1 - R AH0 - TH AA2 N Z\nMARAUD  M ER0 - AO1 D\nMARAUDER  M ER0 - AO1 - D ER0\nMARAUDERS  M ER0 - AO1 - D ER0 Z\nMARAUDING  M ER0 - AO1 - D IH0 NG\nMARAVILLA  M AA0 - R AA0 - V IH1 - L AH0\nMARBACH  M AA1 R - B AA2 K\nMARBELLA  M AA2 R - B EH1 - L AH0\nMARBERRY  M AA1 R - B EH2 - R IY0\nMARBIL  M AA1 R - B IH0 L\nMARBLE  M AA1 R - B AH0 L\nMARBLE'S  M AA1 R - B AH0 L Z\nMARBLED  M AA1 R - B AH0 L D\nMARBLEHEAD  M AA1 R - B AH0 L - HH EH2 D\nMARBLES  M AA1 R - B AH0 L Z\nMARBOD  M AA1 R - B AA0 D\nMARBRY  M AA1 R - B R IY0\nMARBURGER  M AA1 R - B ER0 - G ER0\nMARBURY  M AA1 R - B EH2 - R IY0\nMARBUT  M AA1 R - B AH0 T\nMARC  M AA1 R K\nMARCADE  M AA1 R - K EY1 D\nMARCANO  M AA0 R - K AA1 - N OW0\nMARCANTEL  M AA0 R - K AA0 N - T EH1 L\nMARCANTONIO  M AA2 R - K AH0 N - T OW1 - N IY0 - OW0\nMARCEAU  M AA0 R - S OW1\nMARCEAUX  M AA0 R - S OW1\nMARCECA  M AA0 R - S EH1 - K AH0\nMARCEL  M AA0 R - S EH1 L\nMARCELA  M AA0 R - CH EH1 - L AH0\nMARCELIA  M AA0 R - CH EH1 - L IY0 - AH0\nMARCELINO  M AA0 R - CH EH0 - L IY1 - N OW0\nMARCELL  M AA0 R - S EY1 L\nMARCELLA  M AA0 R - S EH1 - L AH0\nMARCELLE  M AA0 R - S EH1 L\nMARCELLI  M AA0 R - CH EH1 - L IY0\nMARCELLINA  M AA0 R - CH EH0 - L IY1 - N AH0\nMARCELLINE  M AA0 R - CH EH0 - L IY1 - N IY0\nMARCELLINO  M AA0 R - CH EH0 - L IY1 - N OW0\nMARCELLO  M AA2 R - S EH1 - L OW0\nMARCELLUS  M AA0 R - S EH1 - L AH0 S\nMARCELO  M AA0 R - CH EH1 - L OW0\nMARCESSA  M AA0 R - S EH1 - S AH0\nMARCESSA'S  M AA0 R - S EH1 - S AH0 Z\nMARCH  M AA1 R CH\nMARCH'S  M AA1 R - CH IH0 Z\nMARCHAK  M AA1 R - CH AH0 K\nMARCHAL  M AA1 R - CH AH0 L\nMARCHAND  M AA0 R K - HH AE1 N D\nMARCHAND(2)  M AA0 R - CH AE1 N D\nMARCHANT  M AA1 R - CH AH0 N T\nMARCHBANK  M AA1 R CH - B AE2 NG K\nMARCHBANKS  M AA1 R CH - B AE2 NG K S\nMARCHE  M AA1 R SH\nMARCHED  M AA1 R CH T\nMARCHENKO  M AA2 R - CH EH1 N - K OW0\nMARCHER  M AA1 R - CH ER0\nMARCHERS  M AA1 R - CH ER0 Z\nMARCHES  M AA1 R - CH IH0 Z\nMARCHESANI  M AA0 R - K EH0 - S AA1 - N IY0\nMARCHESANO  M AA0 R - K EH0 - S AA1 - N OW0\nMARCHESCHI  M AA0 R - CH EH1 - SH IY0\nMARCHESE  M AA0 R - K IY1 - Z IY0\nMARCHESI  M AA0 R - K EH1 - S IY0\nMARCHESSAULT  M AA1 R - SH IH0 - S OW0\nMARCHETTA  M AA0 R - K EH1 - T AH0\nMARCHETTI  M AA0 R - K EH1 - T IY0\nMARCHEWKA  M ER0 - CH Y UW1 - K AH0\nMARCHI  M AA1 R - K IY0\nMARCHING  M AA1 R - CH IH0 NG\nMARCHINI  M AA0 R - K IY1 - N IY0\nMARCHINKO  M AA0 R - CH IY1 NG - K OW0\nMARCHIO  M AA1 R - K IY0 - OW0\nMARCHIONE  M AA0 R - K IY0 - OW1 - N IY0\nMARCHITA  M AA0 R - K IY1 - T AH0\nMARCHITTO  M AA0 R - K IY1 - T OW0\nMARCHMAN  M AA1 R K - M AH0 N\nMARCI  M AA1 R - S IY0\nMARCIA  M AA1 R - SH AH0\nMARCIA'S  M AA1 R - SH AH0 Z\nMARCIAL  M AA0 R - S IY0 - AA1 L\nMARCIANO  M AA0 R - CH IY0 - AA1 - N OW0\nMARCIANTE  M AA1 R - CH AH0 N - T IY0\nMARCIE  M AA1 R - K IY0\nMARCIL  M AA1 R - S IH0 L\nMARCILE  M AA1 R - CH AH0 L\nMARCILIO  M AA0 R - S IY1 - L IY0 - OW0\nMARCILLE  M AA1 R - S IH0 L\nMARCIN  M AA0 R - S IY1 N\nMARCINEK  M ER0 - CH IH1 - N EH0 K\nMARCINIAK  M ER0 - CH IH1 - N IY0 - AE0 K\nMARCINKO  M AA2 R - S IH1 NG - K OW0\nMARCINKOWSKI  M ER0 - CH IH0 NG - K AO1 F S - K IY0\nMARCINKUS  M AA2 R - S IH1 NG - K AH0 S\nMARCISSA  M AA2 R - S IH1 - S AH0\nMARCKESANO  M AA2 R - K EH2 - S AA1 - N OW0\nMARCKS  M AA1 R K S\nMARCMANN  M AA1 R K - M AH0 N\nMARCO  M AA1 R - K OW0\nMARCO'S  M AA1 R - K OW2 Z\nMARCOE  M AA1 R - K OW0\nMARCOM  M AA1 R - K AH0 M\nMARCON  M AA1 R - K AH0 N\nMARCONE  M AA0 R - K OW1 - N IY0\nMARCONI  M AA0 R - K OW1 - N IY0\nMARCOR  M AA1 R - K AO2 R\nMARCOS  M AA1 R - K OW0 S\nMARCOS'  M AA1 R - K OW0 S\nMARCOS'(2)  M AA1 R - K OW0 - S IH0 Z\nMARCOS'S  M AA1 R - K AH0 - S IH0 Z\nMARCOSES  M AA0 R - K OW1 - S IH0 Z\nMARCOSES'  M AA0 R - K OW1 - S IH0 Z\nMARCOTT  M AA0 R - K AA1 T\nMARCOTTE  M AA0 R - K AO1 T\nMARCOU  M AA0 R - K UW1\nMARCOUX  M AA0 R - K UW1\nMARCRUM  M AA1 R - K R AH0 M\nMARCUCCI  M AA0 R - K UW1 - CH IY0\nMARCUM  M AA1 R - K AH0 M\nMARCUS  M AA1 R - K AH0 S\nMARCUS'S  M AA1 R - K AH0 - S IH0 Z\nMARCUSSEN  M AA1 R - K AH0 - S AH0 N\nMARCY  M AA1 R - S IY0\nMARCZAK  M AA1 R - CH AE0 K\nMARDEN  M AA1 R - D AH0 N\nMARDER  M AA1 R - D ER0\nMARDI  M AA1 R - D IY0\nMARDIS  M AA1 R - D IH0 S\nMARDIS(2)  M AA1 R - D IY0 S\nMARDON  M AA1 R - D AH0 N\nMARE  M EH1 R\nMARE'S  M EH1 R Z\nMAREADY  M ER0 - EH1 - D IY0\nMAREAN  M AA0 - R IY1 N\nMAREK  M AA1 - R EH0 K\nMARELDA  M AA0 - R EH1 L - D AH0\nMARELLA  M ER0 - EH1 - L AH0\nMARELLI  M EH0 - R EH1 - L IY0\nMARENO  M AA0 - R EH1 - N OW0\nMARES  M EH1 R Z\nMARESCA  M AA0 - R EH1 - S K AH0\nMARESCO  M AA0 - R EH1 - S K OW0\nMARESH  M AE1 - R IH0 SH\nMARET  M AA1 - R EY0 T\nMARETT  M AE1 - R IH0 T\nMARETTA  M AA0 - R EH1 - T AH0\nMARETTE  M ER0 - EH1 T\nMAREZ  M AA0 - R EH1 Z\nMARFA  M AA1 R - F AH0\nMARGA  M AA1 R - G AH0\nMARGALO  M AA0 R - G AA1 - L OW0\nMARGALOV  M AA1 - G AH0 - L AO0 V\nMARGARET  M AA1 R - G ER0 - IH0 T\nMARGARET'S  M AA1 R - G ER0 - IH0 T S\nMARGARET'S(2)  M AA1 R - G R IH0 T S\nMARGARET(2)  M AA1 R - G R AH0 T\nMARGARET(3)  M AA1 R - G R IH0 T\nMARGARETA  M AA0 R - G AA0 - R EH1 - T AH0\nMARGARETE  M AA1 R - G ER0 - IY2 T\nMARGARETHE  M AA0 R - G AA0 - R EH1 - DH IY0\nMARGARETTEN  M AA2 R - G ER0 - EH1 - T AH0 N\nMARGARINE  M AA1 R - JH ER0 - AH0 N\nMARGARITA  M AA2 R - G ER0 - IY1 - T AH0\nMARGARITAS  M AA2 R - G EH0 - R IY1 - T AH0 S\nMARGAUX  M AA0 R - G OW1\nMARGE  M AA1 R JH\nMARGEOTES  M AA1 R - JH IY0 - OW2 - T IY0 Z\nMARGERUM  M AA1 R - G ER0 - AH0 M\nMARGERY  M AA1 R - JH ER0 - IY0\nMARGESON  M AA1 R - G IH0 - S AH0 N\nMARGET  M AA1 R - G IH0 T\nMARGETTE  M AA0 R - ZH EH1 T\nMARGIE  M AA1 R - JH IY0\nMARGIN  M AA1 R - JH AH0 N\nMARGINAL  M AA1 R - JH AH0 - N AH0 L\nMARGINALIZATION  M AA2 R - JH AH0 - N AH0 - L AH0 - Z EY1 - SH AH0 N\nMARGINALIZE  M AA1 R - JH AH0 - N AH0 - L AY2 Z\nMARGINALIZED  M AA1 R - JH AH0 - N AH0 - L AY2 Z D\nMARGINALIZES  M AA1 R - JH AH0 - N AH0 - L AY2 - Z IH0 Z\nMARGINALIZING  M AA1 R - JH AH0 - N AH0 - L AY2 - Z IH0 NG\nMARGINALLY  M AA1 R - JH AH0 - N AH0 - L IY0\nMARGINED  M AA1 R - JH AH0 N D\nMARGINING  M AA1 R - JH AH0 - N IH0 NG\nMARGINS  M AA1 R - JH AH0 N Z\nMARGIOTTA  M AA0 R - JH OW1 - T AH0\nMARGITTAI  M AA1 R - JH IH0 - T AY2\nMARGO  M AA1 R - G OW0\nMARGOLICK  M AA0 R - G OW1 - L IH0 K\nMARGOLIES  M AA0 R - G OW1 - L IY0 Z\nMARGOLIN  M AA1 R - G AH0 - L IH0 N\nMARGOLIN(2)  M AA0 R - G OW1 - L AH0 N\nMARGOLIS  M AA0 R - G OW1 - L IH0 S\nMARGORY  M ER0 - G ER1 - IY0\nMARGOSHES  M AA0 R - G AO1 - SH IH0 Z\nMARGOT  M AA1 R - G OW0\nMARGRAF  M AA1 R - G R AH0 F\nMARGRAVE  M AA1 R - G R EY2 V\nMARGRET  M AA1 R - G R EH0 T\nMARGRET'S  M AA1 R - G R EH0 T S\nMARGUERITE  M AA2 R - G ER0 - IY1 T\nMARGULIES  M AA1 R - G UW0 - L IY0 Z\nMARGULIS  M AA1 R - G AH0 - L IH0 S\nMARGUS  M AA1 R - G AH0 S\nMARGY  M AA1 R - JH IY0\nMARHEFKA  M ER0 - HH EH1 F - K AH0\nMARI  M AA1 - R IY0\nMARIA  M ER0 - IY1 - AH0\nMARIA'S  M ER0 - IY1 - AH0 Z\nMARIACHI  M AA2 - R IY0 - AA1 - CH IY0\nMARIAH  M ER0 - AY1 - AH0\nMARIAM  M EH1 - R IY0 - AE0 M\nMARIAN  M EH1 - R IY0 - AH0 N\nMARIAN'S  M EH1 - R IY0 - AH0 N Z\nMARIANA  M EH2 - R IY0 - AE1 - N AH0\nMARIANAS  M EH2 - R IY0 - AE1 - N AH0 S\nMARIANI  M AA0 - R IY0 - AA1 - N IY0\nMARIANI(2)  M AA0 - R IY0 - AE1 - N IY0\nMARIANNA  M AA0 - R IY0 - AA1 - N AH0\nMARIANNE  M EH2 - R IY0 - AE1 N\nMARIANO  M EH2 - R IY0 - AA1 - N OW0\nMARIBEL  M AE1 - R IH0 - B EH0 L\nMARICE  M AA1 - R IH0 S\nMARICH  M AE1 - R IH0 K\nMARICLE  M AE1 - R IH0 - K AH0 L\nMARICOPA  M EH2 - R IH0 - K OW1 - P AH0\nMARIE  M ER0 - IY1\nMARIE'S  M ER0 - IY1 Z\nMARIEL  M EH1 - R IY0 - AH0 L\nMARIELITO  M EH0 - R IY2 - EH0 - L IY1 - T OW0\nMARIELITOS  M EH0 - R IY2 - EH0 - L IY1 - T OW0 S\nMARIEN  M EH1 - R IY0 N\nMARIENBONN  M EH1 - R IY0 N - B AO2 N\nMARIENBONN'S  M EH1 - R IY0 N - B AO2 N Z\nMARIER  M EH1 - R IY0 - ER0\nMARIETTA  M EH2 - R IY0 - EH1 - T AH0\nMARIETTA'S  M EH2 - R IY0 - EH1 - T AH0 Z\nMARIETTE  M EH2 - R IY0 - EH1 T\nMARIGOLD  M EH1 - R AH0 - G OW2 L D\nMARIGOLDS  M EH1 - R AH0 - G OW2 L D Z\nMARIJUANA  M EH2 - R AH0 W - AA1 - N AH0\nMARIK  M AE1 - R IH0 K\nMARILDA  M AA0 - R IY1 L - D AH0\nMARILIN  M AE1 - R IH0 - L IH0 N\nMARILLA  M AA0 - R IH1 - L AH0\nMARILU  M EH1 - R IY0 - L UW0\nMARILYN  M EH1 - R AH0 - L AH0 N\nMARILYN'S  M EH1 - R AH0 - L AH0 N Z\nMARILYN'S(2)  M EH1 - R AH0 - L IH0 N Z\nMARILYN(2)  M EH1 - R AH0 - L IH0 N\nMARILYNN  M EH1 - R AH0 - L AH0 N\nMARIMBA  M ER0 - IH1 M - B AH0\nMARIN  M EH1 - R IH0 N\nMARINA  M ER0 - IY1 - N AH0\nMARINACCIO  M AA0 - R IH0 - N AA1 - CH IY0 - OW0\nMARINARO  M AA0 - R IH0 - N AA1 - R OW0\nMARINAS  M ER0 - IY1 - N AH0 Z\nMARINATE  M EH1 - R AH0 - N EY2 T\nMARINATED  M EH1 - R AH0 - N EY2 - T IH0 D\nMARINE  M ER0 - IY1 N\nMARINE'S  M ER0 - IY1 N Z\nMARINEAU  M EH1 - R IH0 - N OW0\nMARINELAND  M ER0 - IY1 N - L AH0 N D\nMARINELLI  M AA0 - R IH0 - N EH1 - L IY0\nMARINELLO  M AA0 - R IH0 - N EH1 - L OW0\nMARINER  M EH1 - R AH0 - N ER0\nMARINERS  M EH1 - R AH0 - N ER0 Z\nMARINES  M ER0 - IY1 N Z\nMARINES'  M ER0 - IY1 N Z\nMARINEZ  M AA0 - R IY1 - N EH0 Z\nMARING  M EH1 - R IH0 NG\nMARINI  M AA0 - R IY1 - N IY0\nMARINKOVICH  M ER0 - IH1 NG - K AH0 - V IH0 CH\nMARINO  M ER0 - IY1 - N OW0\nMARINO'S  M ER0 - IY1 - N OW0 Z\nMARINOFF  M AE1 - R IH0 N - AO0 F\nMARINOS  M ER0 - IY1 - N OW0 Z\nMARINUCCI  M AA0 - R IY0 - N UW1 - CH IY0\nMARINVEST  M ER0 - IH1 N - V AH0 S T\nMARIO  M AA1 - R IY0 - OW0\nMARIO'S  M AA1 - R IY0 - OW0 Z\nMARION  M EH1 - R IY0 - AH0 N\nMARION'S  M EH1 - R IY0 - AH0 N Z\nMARIOTTA  M EH2 - R IY0 - AA1 - T AH0\nMARIOTTI  M AA0 - R IY0 - OW1 - T IY0\nMARIS  M EH1 - R IH0 S\nMARISA  M AH0 - R IH1 - S AH0\nMARISCAL  M AA1 - R AH0 S - K AH0 L\nMARISH  M EH1 - R IH0 SH\nMARISSA  M AH0 - R IH1 - S AH0\nMARITAL  M EH1 - R AH0 - T AH0 L\nMARITIME  M EH1 - R AH0 - T AY2 M\nMARITZ  M EH1 - R IH0 T S\nMARIUCCI  M EH2 - R IY0 - UW1 - CH IY0\nMARIUS  M EH1 - R IY0 - AH0 S\nMARJAI  M AA1 R - JH EY0\nMARJE  M AA1 R JH\nMARJIE  M AA1 R - JH IY0\nMARJORIE  M AA1 R - JH ER0 - IY0\nMARJORY  M AA1 R - JH ER0 - IY0\nMARJY  M AA1 R - JH IY0\nMARK  M AA1 R K\nMARK'S  M AA1 R K S\nMARKAIR  M AA1 R - K EH2 R\nMARKAIR'S  M AA1 R - K EH2 R Z\nMARKAN  M AA1 R - K AH0 N\nMARKARIAN  M AA2 R - K EH1 - R IY0 - AH0 N\nMARKDOWN  M AA1 R K - D AW2 N\nMARKDOWNS  M AA1 R K - D AW2 N Z\nMARKE  M AA1 R K\nMARKED  M AA1 R K T\nMARKEDLY  M AA1 R - K AH0 D - L IY0\nMARKEDLY(2)  M AA1 R - K IH0 D - L IY0\nMARKEE  M AA1 R - K IY1\nMARKEL  M AA1 R - K AH0 L\nMARKEL(2)  M AA0 R - K EH1 L\nMARKELL  M AA1 R - K AH0 L\nMARKEN  M AA1 R - K AH0 N\nMARKER  M AA1 R - K ER0\nMARKERS  M AA1 R - K ER0 Z\nMARKERT  M AA1 R - K ER0 T\nMARKESE  M AA0 R - K IY1 S\nMARKET  M AA1 R - K AH0 T\nMARKET'S  M AA1 R - K AH0 T S\nMARKET(2)  M AA1 R - K IH0 T\nMARKETABILITY  M AA2 R - K IH0 - T AH0 - B IH1 - L IH0 - T IY0\nMARKETABLE  M AA1 R - K AH0 - T AH0 - B AH0 L\nMARKETAMERICA  M AA2 R - K AH0 - T AH0 - M EH1 - R IH0 - K AH0\nMARKETED  M AA1 R - K AH0 - T AH0 D\nMARKETED(2)  M AA1 R - K AH0 - T IH0 D\nMARKETEER  M AA2 R - K AH0 - T IH1 R\nMARKETEERS  M AA2 R - K AH0 - T IH1 R Z\nMARKETER  M AA1 R - K AH0 - T ER0\nMARKETER'S  M AA1 R - K AH0 - T ER0 Z\nMARKETERS  M AA2 R - K AH0 - T ER0 Z\nMARKETERS'  M AA1 R - K AH0 - T ER0 Z\nMARKETING  M AA1 R - K AH0 - T IH0 NG\nMARKETING'S  M AA1 R - K AH0 - T IH0 NG Z\nMARKETINGS  M AA1 R - K AH0 - T IH0 NG Z\nMARKETMAKER  M AA1 R - K AH0 T - M EY2 - K ER0\nMARKETMAKERS  M AA1 R - K AH0 T - M EY2 - K ER0 Z\nMARKETPLACE  M AA1 R - K AH0 T - P L EY2 S\nMARKETPLACE'S  M AA1 R - K AH0 T - P L EY2 - S IH0 Z\nMARKETPLACE(2)  M AA1 R - K IH0 T - P L EY2 S\nMARKETPLACES  M AA1 R - K AH0 T - P L EY2 - S IH0 Z\nMARKETS  M AA1 R - K AH0 T S\nMARKETS'  M AA1 R - K IH0 T S\nMARKETS(2)  M AA1 R - K IH0 T S\nMARKETSCOPE  M AA1 R - K AH0 T - S K OW2 P\nMARKETWIDE  M AA1 R - K AH0 T - W AY2 D\nMARKEY  M AA1 R - K IY2\nMARKEY'S  M AA1 R - K IY2 Z\nMARKGRAF  M AA1 R K - G R AH0 F\nMARKHAM  M AA1 R - K AH0 M\nMARKIE  M AA1 R - K IY0\nMARKIEWICZ  M AA1 R - K AH0 - V IH0 CH\nMARKIN  M AA1 R - K IH0 N\nMARKING  M AA1 R - K IH0 NG\nMARKINGS  M AA1 R - K IH0 NG Z\nMARKKA  M AA1 R - K AH0\nMARKKAA  M AA0 R - K AA1\nMARKKAS  M AA1 R - K AH0 S\nMARKLAND  M AA1 R K - L AH0 N D\nMARKLE  M AA1 R - K AH0 L\nMARKLEY  M AA1 R K - L IY0\nMARKMAN  M AA1 R K - M AH0 N\nMARKO  M AA1 R - K OW0\nMARKOFF  M AA1 R K - AO2 F\nMARKOS  M AA1 R - K OW0 Z\nMARKOVIC  M AA1 R - K AH0 - V IH0 K\nMARKOVICH  M AA1 R - K AH0 - V IH0 CH\nMARKOVITZ  M AA1 R - K AH0 - V IH0 T S\nMARKOW  M AA1 R - K OW0\nMARKOWICZ  M AA1 R - K AH0 - V IH0 CH\nMARKOWITZ  M AA1 R - K AH0 - W IH0 T S\nMARKOWSKI  M ER0 - K AO1 F S - K IY0\nMARKS  M AA1 R K S\nMARKS'S  M AA1 R K - S IH0 Z\nMARKSBERRY  M AA1 R K S - B EH2 - R IY0\nMARKSMAN  M AA1 R K S - M AH0 N\nMARKSMANSHIP  M AA1 R K S - M AH0 N - SH IH0 P\nMARKSMEN  M AA1 R K S - M EH0 N\nMARKSON  M AA1 R K - S AH0 N\nMARKUM  M AA1 R - K AH0 M\nMARKUNAS  M AA1 R - K UW0 - N AH0 Z\nMARKUP  M AA1 R K - AH2 P\nMARKUPS  M AA1 R K - AH2 P S\nMARKUS  M AA1 R - K AH0 S\nMARKUSON  M AA1 R - K AH0 - S AH0 N\nMARKWARDT  M AA1 R - K W AO0 R T\nMARKWELL  M AA1 R - K W EH2 L\nMARKWOOD  M AA1 R K - W UH2 D\nMARKY  M AA1 R - K IY0\nMARLA  M AA1 R - L AH0\nMARLAND  M AA1 R - L AH0 N D\nMARLAR  M AA1 R - L ER0\nMARLATT  M AA1 R - L AH0 T\nMARLBORO  M AA1 R L - B ER0 - OW0\nMARLBORO'S  M AA1 R L - B ER0 - R OW0 Z\nMARLBOROS  M AA1 R L - B ER0 - R OW0 Z\nMARLBOROUGH  M AA1 R L - B ER0 - OW0\nMARLEEN  M AA0 R - L IY1 N\nMARLEENE  M AA0 R - L IY1 N\nMARLEN  M AA1 R - L AH0 N\nMARLENA  M AA0 R - L EY1 - N AH0\nMARLENE  M AA1 R - L IY2 N\nMARLENS  M AA1 R - L AH0 N Z\nMARLER  M AA1 R - L ER0\nMARLETT  M AA1 R - L IH0 T\nMARLETTE  M AA2 R - L EH1 T\nMARLEY  M AA1 R - L IY0\nMARLIAVE  M AA2 R - L IY0 - EH1 V\nMARLIN  M AA1 R - L AH0 N\nMARLIN(2)  M AA1 R - L IH0 N\nMARLING  M AA1 R - L IH0 NG\nMARLINS  M AA1 R - L AH0 N Z\nMARLO  M AA1 R - L OW0\nMARLON  M AA1 R - L AH0 N\nMARLOW  M AA1 R - L OW0\nMARLOWE  M AA1 R - L OW2\nMARLTON  M AA1 R L - T AH0 N\nMARLYS  M AA1 R - L IY0 Z\nMARMADUKE  M AA1 R - M AH0 - D UW2 K\nMARMALADE  M AA1 R - M AH0 - L EY2 D\nMARMARA  M AA0 R - M AA1 - R AH0\nMARMER  M AA1 R - M ER0\nMARMION  M AA1 R - M IY0 - AH0 N\nMARMO  M AA1 R - M OW0\nMARMOLEJO  M AA0 R - M OW0 - L EY1 - Y OW0\nMARMON  M AA1 R - M AH0 N\nMARMOR  M AA1 R - M ER0\nMARMOSET  M AA1 R - M AH0 - Z EH2 T\nMARNELL  M AA1 R - N AH0 L\nMARNER  M AA1 R - N ER0\nMARNEY  M AA1 R - N IY0\nMARO  M AA1 - R OW0\nMAROC  M AA2 - R AO1 K\nMAROGEN  M EH1 - R OW0 - G AH0 N\nMAROHL  M AE1 - R OW0 L\nMAROHN  M AA1 - R AH0 N\nMAROIS  M ER0 - W AA1\nMAROLD  M AE1 - R OW0 L D\nMAROLF  M AE1 - R OW0 L F\nMAROLT  M AE1 - R OW0 L T\nMARON  M AA0 - R AO1 N\nMARONE  M ER0 - OW1 N\nMARONEY  M ER0 - OW1 - N IY0\nMARONI  M AA0 - R OW1 - N IY0\nMARONITE  M EH1 - R AH0 - N AY2 T\nMAROON  M ER0 - UW1 N\nMAROONED  M ER0 - UW1 N D\nMAROONEY  M ER0 - UW1 - N IY0\nMAROSE  M ER0 - OW1 S\nMAROTTA  M ER0 - AA1 - T AH0\nMAROTTE  M ER0 - AO1 T\nMAROTTO  M AA0 - R OW1 - T OW0\nMAROTZ  M AE1 - R AH0 T S\nMAROUS  M EH1 - R AH0 S\nMAROVICH  M AA1 - R AH0 - V IH0 CH\nMARPLAN  M AA1 R P - L AE2 N\nMARPLE  M AA1 R - P AH0 L\nMARQUAI  M AA0 R K - W EY1\nMARQUAI(2)  M AA0 R - K EY1\nMARQUAND  M AA1 R - K W AH0 N D\nMARQUARD  M AA0 R K - W AA1 R D\nMARQUARDT  M AA1 R - K W AA0 R T\nMARQUART  M AA1 R - K W AA0 R T\nMARQUE  M AA1 R K\nMARQUEE  M AA0 R - K IY1\nMARQUERITE  M AA0 R - G ER0 - IY1 T\nMARQUERITE(2)  M AA1 R - G R IH0 T\nMARQUES  M AA1 R K S\nMARQUESS  M AA1 R - K W AH0 S\nMARQUEST  M AA1 R - K W EH2 S T\nMARQUETTE  M AA0 R - K EH1 T\nMARQUEZ  M AA0 R - K EH1 Z\nMARQUIS  M AA2 R - K IY1\nMARQUISS  M AA1 R K - W IY0 S\nMARQUITA  M AA0 R K - W IY1 - T AH0\nMARR  M AA1 R\nMARRA  M AA1 - R AH0\nMARRAKECH  M AE1 - R AH0 - K EH2 SH\nMARRAZZO  M AA2 - R AA1 - Z OW0\nMARRED  M AA1 R D\nMARREN  M AA1 - R AH0 N\nMARRERO  M AA2 - R EH1 - R OW0\nMARRETT  M EH1 - R IH0 T\nMARRIAGE  M EH1 - R IH0 JH\nMARRIAGES  M EH1 - R IH0 - JH IH0 Z\nMARRIED  M EH1 - R IY0 D\nMARRIES  M EH1 - R IY0 Z\nMARRIN  M AE1 - R IH0 N\nMARRINER  M EH1 - R IH0 - N ER0\nMARRING  M AA1 - R IH0 NG\nMARRIOTT  M EH1 - R IY0 - AH0 T\nMARRIOTT'S  M EH1 - R IY0 - AH0 T S\nMARRIS  M AE1 - R IH0 S\nMARRO  M AA1 - R OW0\nMARROCCO  M AA0 - R OW1 - K OW0\nMARRON  M EH1 - R AH0 N\nMARRONE  M AA0 - R OW1 - N IY0\nMARROQUIN  M AA0 - R OW0 - K W IY1 N\nMARROU  M AH0 - R UW1\nMARROW  M EH1 - R OW0\nMARRS  M AA1 R Z\nMARRUFO  M AA2 - R UW1 - F OW0\nMARRUJO  M AA0 - R UW1 - Y OW0\nMARRY  M EH1 - R IY0\nMARRYING  M EH1 - R IY0 - IH0 NG\nMARS  M AA1 R Z\nMARS'  M AA1 R Z\nMARS'S  M AA1 R - Z IH0 Z\nMARSAL  M AA1 R - S AH0 L\nMARSAL(2)  M AA0 R - S AA1 L\nMARSALA  M AA0 R - S AA1 - L AH0\nMARSALIS  M AA1 R - S AH0 - L IH0 S\nMARSALIS(2)  M AA0 R - S AA1 - L IH2 S\nMARSAM  M AA1 R - S AE0 M\nMARSCH  M AA1 R SH\nMARSCHALK  M AA1 R - SH AO2 K\nMARSCHALL  M AA1 R - SH AH0 L\nMARSCHKE  M AA1 R SH K\nMARSCHNER  M AA1 R SH - N ER0\nMARSDEN  M AA1 R S - D AH0 N\nMARSDON  M AA1 R S - D AH0 N\nMARSE  M AA1 R S\nMARSECA  M AA0 R - S EH1 - K AH0\nMARSECA'S  M AA0 R - S EH1 - K AH0 Z\nMARSEE  M AA1 R - S IY2\nMARSEILLE  M AA0 R - S AY1 L\nMARSEILLES  M AA0 R - S AY1 - L AH0 S\nMARSEILLES(2)  M AA0 R - S AY1 Z\nMARSEKA  M AA0 R - S EH1 - K AH0\nMARSELLA  M AA2 R - S EH1 - L AH0\nMARSH  M AA1 R SH\nMARSH'S  M AA1 R - SH IH0 Z\nMARSHA  M AA1 R - SH AH0\nMARSHAK  M AA1 R - SH AH0 K\nMARSHAL  M AA1 R - SH AH0 L\nMARSHAL'S  M AA1 R - SH AH0 L Z\nMARSHALED  M AA1 R - SH AH0 L D\nMARSHALING  M AA1 R - SH AH0 L - IH0 NG\nMARSHALL  M AA1 R - SH AH0 L\nMARSHALL'S  M AA1 R - SH AH0 L Z\nMARSHALLED  M AA1 R - SH AH0 L D\nMARSHALLS  M AA1 R - SH AO2 L Z\nMARSHALLTOWN  M AA1 R - SH AH0 L - T AW2 N\nMARSHALS  M AA1 R - SH AH0 L Z\nMARSHBURN  M AA1 R SH - B ER2 N\nMARSHES  M AA1 R - SH AH0 Z\nMARSHES(2)  M AA1 R - SH IH0 Z\nMARSHFIELD  M AA1 R SH - F IY2 L D\nMARSHLAND  M AA1 R SH - L AE2 N D\nMARSHLANDS  M AA1 R SH - L AE2 N D Z\nMARSHMALLOW  M AA1 R SH - M EH2 - L OW0\nMARSHMALLOWS  M AA1 R SH - M EH2 - L OW0 Z\nMARSHMAN  M AA1 R SH - M AH0 N\nMARSHY  M AA1 R - SH IY0\nMARSICANO  M AA0 R - S IY0 - K AA1 - N OW0\nMARSICO  M AA0 R - S IY1 - K OW0\nMARSIGLIA  M AA2 R - S IH1 - G L IY0 - AH0\nMARSILI  M AA0 R - S IY1 - L IY0\nMARSISA  M AA0 R - S IH1 - S AH0\nMARSISA'S  M AA0 R - S IH1 - S AH0 Z\nMARSLAND  M AA1 R S - L AH0 N D\nMARSO  M AA1 R - S OW0\nMARSOLEK  M AA1 R - S AH0 - L EH0 K\nMARSON  M AA1 R - S AH0 N\nMARSTELLER  M AA1 R Z - T EH2 - L ER0\nMARSTERS  M AA1 R - S T ER0 Z\nMARSTON  M AA1 R - S T AH0 N\nMARSUPIAL  M AA0 R - S UW1 - P IY0 - AH0 L\nMARSZALEK  M ER0 - SH AA1 - L EH0 K\nMART  M AA1 R T\nMART'S  M AA1 R T S\nMARTA  M AA1 R - T AH0\nMARTE  M AA1 R T\nMARTECH  M AA1 R - T EH2 K\nMARTEK  M AA1 R - T EH2 K\nMARTEL  M AA1 R - T EH2 L\nMARTELL  M AA1 R - T EH2 L\nMARTELLA  M AA2 R - T EH1 - L AH0\nMARTELLE  M AA0 R - T EH1 L\nMARTELLI  M AA0 R - T EH1 - L IY0\nMARTELLINI  M AA2 R - T EH2 - L IY1 - N IY0\nMARTELLO  M AA0 R - T EH1 - L OW0\nMARTEN  M AA1 R - T AH0 N\nMARTENEY  M AA1 R - T IH0 - N IY0\nMARTENS  M AA1 R - T AH0 N Z\nMARTENS'S  M AA1 R - T AH0 N - Z IH0 Z\nMARTENSEN  M AA1 R - T IH0 N - S AH0 N\nMARTENSON  M AA1 R - T IH0 N - S AH0 N\nMARTER  M AA1 R - T ER0\nMARTH  M AA1 R TH\nMARTHA  M AA1 R - TH AH0\nMARTHA'S  M AA1 R - TH AH0 Z\nMARTHALER  M AA1 R - TH AH0 - L ER0\nMARTHE  M AA1 R DH\nMARTHENA  M AA1 R - TH IH0 - N AH0\nMARTI  M AA1 R - T IY0\nMARTIAL  M AA1 R - SH AH0 L\nMARTIALED  M AA1 R - SH AH0 L D\nMARTIALS  M AA1 R - SH AH0 L Z\nMARTIAN  M AA1 R - SH AH0 N\nMARTIANS  M AA1 R - SH AH0 N Z\nMARTIE  M AA1 R - T IY0\nMARTIN  M AA1 R - T AH0 N\nMARTIN'S  M AA1 R - T AH0 N Z\nMARTIN(2)  M AA1 R - T IH0 N\nMARTINA  M AA0 R - T IY1 - N AH0\nMARTINDALE  M AA1 R - T IH0 N - D EY0 L\nMARTINE  M AA0 R - T IY1 N\nMARTINEAU  M AA1 R - T IH0 - N OW2\nMARTINEC  M AA1 R - T IH0 - N EH0 K\nMARTINEK  M AA1 R - T IH0 - N IH0 K\nMARTINES  M AA0 R - T IY1 N Z\nMARTINEZ  M AA0 R - T IY1 - N EH0 Z\nMARTINEZ'S  M AA0 R - T IY1 - N EH2 - Z IH0 Z\nMARTING  M AA1 R - T IH0 NG\nMARTINGALE  M AA1 R - T IH0 - NG EY2 L\nMARTINI  M AA0 R - T IY1 - N IY0\nMARTINIQUE  M AA0 R - T IH0 - N IY1 K\nMARTINIS  M AA0 R - T IY1 - N IY0 Z\nMARTINKA  M AA2 R - T IH1 NG - K AH0\nMARTINKO  M AA2 R - T IH1 NG - K OW0\nMARTINO  M AA0 R - T IY1 - N OW0\nMARTINOVICH  M AA2 R - T IH1 - N AH0 - V IH0 CH\nMARTINS  M AA1 R - T IH0 N Z\nMARTINS'S  M AA1 R - T IH0 N - Z IH0 Z\nMARTINSEN  M AA0 R - T IH1 N - S AH0 N\nMARTINSON  M AA1 R - T IH0 N - S AH0 N\nMARTINSVILLE  M AA1 R - T IH0 N Z - V IH2 L\nMARTINY  M AA1 R - T IH0 - N IY0\nMARTION  M AA1 R - SH Y AH0 N\nMARTIRE  M AA0 R - T IH1 - R IY0\nMARTIROSOV  M AA0 R - T IH1 - R AH0 - S AA0 V\nMARTIS  M AA1 R - T IH0 S\nMARTITA  M AA0 R - T IY1 - T AH0\nMARTOCCI  M AA0 R - T OW1 - CH IY0\nMARTON  M AA1 R - T AH0 N\nMARTONE  M AA0 R - T OW1 - N IY0\nMARTORANA  M AA0 R - T AO0 - R AE1 - N AH0\nMARTORANO  M AA0 R - T AO0 - R AA1 - N OW0\nMARTORELLI  M AA0 R - T AO0 - R EH1 - L IY0\nMARTS  M AA1 R T S\nMARTUCCI  M AA0 R - T UW1 - CH IY0\nMARTURANO  M AA0 R - T UH0 - R AA1 - N OW0\nMARTUS  M AA1 R - T AH0 S\nMARTY  M AA1 R - T IY0\nMARTY'S  M AA1 R - T IY0 Z\nMARTYN  M AA1 R - T IH0 N\nMARTYR  M AA1 R - T ER0\nMARTYRDOM  M AA1 R - T ER0 - D AH0 M\nMARTYRE  M AA0 R - T AY1 R\nMARTYRED  M AA1 R - T ER0 D\nMARTYRS  M AA1 R - T ER0 Z\nMARTZ  M AA1 R T S\nMARTZ'S  M AA1 R T - S IH0 Z\nMARUBENI  M AA2 - R UW0 - B IY1 - N IY0\nMARUCA  M ER0 - UW1 - K AH0\nMARUCCI  M AA0 - R UW1 - CH IY0\nMARUI  M ER0 - UW1 - IY0\nMARUKIN  M ER0 - UW1 - K IH0 N\nMARULANDA  M AE2 - R UW0 - L AE1 N - D AH0\nMARULLO  M AA0 - R UW1 - L OW0\nMARUSKA  M ER0 - AH1 - S K AH0\nMARUTI  M ER0 - UW1 - T IY0\nMARUYAMA  M AA2 - R UW0 - Y AA1 - M AH0\nMARUYU  M EH1 - R UW0 - Y UW0\nMARV  M AA1 R V\nMARVA  M AA1 R - V AH0\nMARVEL  M AA1 R - V AH0 L\nMARVEL'S  M AA1 R - V AH0 L Z\nMARVELA  M AA0 R - V EY1 - L AH0\nMARVELED  M AA1 R - V AH0 L D\nMARVELL  M AA0 R - V EH1 L\nMARVELLA  M AA2 R - V EH1 - L AH0\nMARVELLE  M AA0 R - V EH1 L\nMARVELOUS  M AA1 R - V AH0 - L AH0 S\nMARVELOUSLY  M AA1 R - V AH0 - L AH0 S - L IY0\nMARVELS  M AA1 R - V AH0 L Z\nMARVER  M AA1 R - V ER0\nMARVIN  M AA1 R - V IH0 N\nMARVIN'S  M AA1 R - V IH0 N\nMARWICK  M AA1 R - W IH2 K\nMARWICK'S  M AA1 R - W IH2 K S\nMARWIN  M AA1 R - W IH0 N\nMARWOOD  M AA1 R - W UH2 D\nMARX  M AA1 R K S\nMARXEN  M AA1 R K - S AH0 N\nMARXISM  M AA1 R K - S IH0 - Z AH0 M\nMARXIST  M AA1 R K - S AH0 S T\nMARXIST(2)  M AA1 R K - S IH0 S T\nMARXISTS  M AA1 R K - S IH0 S T S\nMARXISTS(2)  M AA1 R K - S IH0 S S\nMARXISTS(3)  M AA1 R K - S IH0 S\nMARY  M EH1 - R IY0\nMARY'S  M EH1 - R IY0 Z\nMARYA  M AA1 - R Y AH0\nMARYANN  M EH0 - R IY0 - AE1 N\nMARYANNE  M EH0 - R IY0 - AE1 N\nMARYBETH  M EH1 - R IY0 - B EH1 TH\nMARYLAND  M EH1 - R AH0 - L AH0 N D\nMARYLAND'S  M EH1 - R AH0 - L AH0 N D Z\nMARYLIN  M AE1 - R IH0 - L IH0 N\nMARYLOU  M AE1 - R IY0 - L UW0\nMARYMOUNT  M EH1 - R IY0 - M AW2 N T\nMARYMOUNT'S  M EH1 - R IY0 - M AW2 N T S\nMARYRUTH  M AE1 - R IH0 - R UW0 TH\nMARYSE  M AA0 - R IY1 S\nMARYSVILLE  M EH1 - R IY0 Z - V IH2 L\nMARYVILLE  M EH1 - R IY0 - V IH2 L\nMARZ  M AA1 R Z\nMARZAN  M AA1 R - Z AH0 N\nMARZANO  M AA0 R - Z AA1 - N OW0\nMARZEC  M AA1 R - Z IH0 K\nMARZETTE  M AA2 R - Z EH1 T\nMARZILLI  M AA0 R - Z IY1 - L IY0\nMARZO  M AA1 R - Z OW0\nMARZOLF  M AA1 R - Z OW2 L F\nMARZOTTO  M AA2 R - Z AA1 - T OW0\nMARZULLO  M AA0 R - Z UW1 - L OW0\nMAS  M AA1 Z\nMASA  M AA1 - S AH0\nMASAAKI  M AA2 - S AA0 - AA1 - K IY0\nMASAHIKO  M AA2 - S AA0 - HH IY1 - K OW0\nMASAHIRO  M AA2 - S AA0 - HH IH1 - R OW0\nMASAI  M AA0 - S AA1 - IY0\nMASAKAZU  M AA2 - S AA0 - K AA1 - Z UW0\nMASAKI  M AA0 - S AA1 - K IY0\nMASAKO  M AH0 - S AA1 - K OW0\nMASAMI  M AA0 - S AA1 - M IY0\nMASAMILLA  M AA0 - S AH0 - M IH1 - L AH0\nMASAO  M AA0 - S AA1 - OW0\nMASARU  M AA0 - S AA1 - R UW0\nMASAYA  M AA0 - S AA1 - Y AH0\nMASAYOSHI  M AA2 - S AA0 - Y OW1 - SH IY0\nMASAYUKI  M AA2 - S AA0 - Y UW1 - K IY0\nMASCARA  M AE0 - S K EH1 - R AH0\nMASCARENA  M AE1 - S K ER0 - IH0 - N AH0\nMASCARENA(2)  M AE2 - K AH0 - R IY1 - N AH0\nMASCARENAS  M AE1 - S K ER0 - IH0 - N AH0 Z\nMASCARENAS(2)  M AE2 - K AH0 - R IY1 - N AH0 Z\nMASCARI  M AA0 S - K AA1 - R IY0\nMASCARO  M AA0 S - K AA1 - R OW0\nMASCH  M AE1 SH\nMASCHINO  M AA0 S - K IY1 - N OW0\nMASCHKE  M AE1 SH K\nMASCI  M AE1 - S IY0\nMASCIA  M AA1 S - CH AH0\nMASCIARELLI  M AA0 S - CH ER0 - EH1 - L IY0\nMASCIO  M AE1 - S IY0 - OW0\nMASCIOLI  M AA0 S - CH OW1 - L IY0\nMASCO  M AE1 - S K OW0\nMASCOLA  M AA0 - S K OW1 - L AH0\nMASCOLO  M AA0 - S K OW1 - L OW0\nMASCORRO  M AA0 - S K AO1 - R OW0\nMASCOT  M AE1 - S K AH0 T\nMASCOT(2)  M AE1 - S K AA2 T\nMASCOTS  M AE1 - S K AA2 T S\nMASCULINE  M AE1 S - K Y AH0 - L AH0 N\nMASCULINITY  M AE2 S - K Y AH0 - L IH1 - N AH0 - T IY0\nMASDEN  M AE1 S - D AH0 N\nMASE  M EY1 Z\nMASEFIELD  M EY1 Z - F IY2 L D\nMASEK  M AA1 - S EH0 K\nMASELLA  M AH0 - S EH1 - L AH0\nMASELLI  M AH0 - S EH1 - L IY0\nMASENG  M AE1 - S IH0 NG\nMASER  M EY1 - Z ER0\nMASERATI  M AE2 - S EH0 - R AA1 - T IY0\nMASERI  M AH0 - S EH1 - R IY0\nMASH  M AE1 SH\nMASHALU  M AH0 - SH AE1 - L UW0\nMASHANTUCKET  M AE2 - SH AH0 N - T AH1 - K AH0 T\nMASHAW  M AE1 - SH AO0\nMASHBURN  M AE1 SH - B ER2 N\nMASHED  M AE1 SH T\nMASHEK  M AE1 - SH IH0 K\nMASI  M AA1 - S IY0\nMASIELLO  M AA0 - S IY0 - EH1 - L OW0\nMASIN  M AA1 - S IH0 N\nMASINI  M AA0 - S IY1 - N IY0\nMASINO  M AA0 - S IY1 - N OW0\nMASIUS  M AE1 - S IY0 - AH0 S\nMASK  M AE1 S K\nMASKE  M EY1 S K\nMASKED  M AE1 S K T\nMASKELL  M AE1 S - K AH0 L\nMASKER  M AE1 - S K ER0\nMASKING  M AE1 - S K IH0 NG\nMASKS  M AE1 S K S\nMASLANKA  M AH0 S - L AE1 NG - K AH0\nMASLEN  M AE1 - S AH0 - L AH0 N\nMASLEY  M AE1 S - L IY0\nMASLIN  M AE1 Z - L IH0 N\nMASLOW  M AA1 S - L OW0\nMASLOWSKI  M AH0 S - L AO1 F S - K IY0\nMASLYUKOV  M AE1 S - L Y UW0 - K AA2 V\nMASOCHISM  M AE1 - S AH0 - K IH0 - Z AH0 M\nMASOCHIST  M AE1 - S AH0 - K IH0 S T\nMASOCHISTIC  M AE1 - S AH0 - K IH0 - S T IH0 K\nMASON  M EY1 - S AH0 N\nMASON'S  M EY1 - S AH0 N Z\nMASONE  M AH0 - S OW1 N\nMASONER  M EY1 - S AH0 N - ER0\nMASONIC  M AH0 - S AA1 - N IH0 K\nMASONITE  M AE1 - S AH0 - N AY2 T\nMASONRY  M EY1 - S AH0 N - R IY0\nMASONS  M EY1 - S AH0 N Z\nMASOOD  M AH0 - S UW1 D\nMASOUD  M AH0 - S UW1 D\nMASQUERADE  M AE2 S - K ER0 - EY1 D\nMASQUERADING  M AE2 S - K ER0 - EY1 - D IH0 NG\nMASRI  M AA1 - S R IY0\nMASS  M AE1 S\nMASS.  M AE1 S\nMASS.(2)  M AE2 - S AH0 - CH UW1 - S AH0 T S\nMASSA  M AE1 - S AH0\nMASSACHUSETTS  M AE2 - S AH0 - CH UW1 - S AH0 T S\nMASSACHUSETTS'  M AE2 - S AH0 - CH UW1 - S AH0 T S\nMASSACHUSSETTS  M AE2 - S AH0 - CH UW1 - S AH0 T S\nMASSACRE  M AE1 - S AH0 - K ER0\nMASSACRED  M AE1 - S AH0 - K ER0 D\nMASSACRES  M AE1 - S IH0 - K ER0 Z\nMASSACRING  M AE1 - S AH0 - K ER0 - IH0 NG\nMASSAD  M AE1 - S AH0 D\nMASSAGE  M AH0 - S AA1 ZH\nMASSAGED  M AH0 - S AA1 ZH D\nMASSAGER  M AH0 - S AA1 - ZH ER0\nMASSAGES  M AH0 - S AA1 - ZH IH0 Z\nMASSAGING  M AH0 - S AA1 - ZH IH0 NG\nMASSAR  M AE1 - S ER0\nMASSARI  M AA0 - S AA1 - R IY0\nMASSARO  M AH0 - S AA1 - R OW0\nMASSBAUCH  M AE1 S - B AA2 K\nMASSE  M AE1 S\nMASSED  M AE1 S T\nMASSENBURG  M AE1 - S AH0 N - B ER0 G\nMASSENET  M AE1 - S AH0 - N EH2 T\nMASSENET'S  M AE1 - S AH0 - N EH2 T S\nMASSENGALE  M AE1 - S AH0 N - G EY2 L\nMASSENGILL  M AE1 - S AH0 N - G IH2 L\nMASSER  M AE1 - S ER0\nMASSES  M AE1 - S AH0 Z\nMASSES(2)  M AE1 - S IH0 Z\nMASSETT  M AE1 - S IH0 T\nMASSEY  M AE1 - S IY0\nMASSI  M AE1 - S IY0\nMASSICOTTE  M AE1 - S IH0 - K AO0 T\nMASSIE  M AE1 - S IY0\nMASSIEU  M AE1 - S IY0 - UW0\nMASSIF  M AE0 - S IY1 F\nMASSIF(2)  M AE1 - S IH0 F\nMASSIMINO  M AA0 - S IY0 - M IY1 - N OW0\nMASSIMINO'S  M AE2 - S IH0 - M IY1 - N OW0 Z\nMASSIMO  M AE1 - S IH0 - M OW2\nMASSING  M AE1 - S IH0 NG\nMASSINGALE  M AA0 - S IH0 NG - G AA1 - L IY0\nMASSINGILL  M AE1 - S IH0 NG - G AH0 L\nMASSIVE  M AE1 - S IH0 V\nMASSIVELY  M AE1 - S IH0 V - L IY0\nMASSMAN  M AE1 S - M AH0 N\nMASSMANN  M AE1 S - M AH0 N\nMASSMUTUAL  M AE1 S - M Y UW1 - CH UW0 - AH0 L\nMASSO  M AE1 - S OW0\nMASSON  M AE1 - S AH0 N\nMASSONI  M AA0 - S OW1 - N IY0\nMASSOTH  M AE1 - S AH0 TH\nMASSPORT  M AE1 S - P AO2 R T\nMASSUCCI  M AA0 - S UW1 - CH IY0\nMAST  M AE1 S T\nMASTANDREA  M AA0 - S T AA1 N - D R IY0 - AH0\nMASTECTOMIES  M AE0 - S T EH1 K - T AH0 - M IY0 Z\nMASTECTOMY  M AE0 - S T EH1 K - T AH0 - M IY0\nMASTED  M AE1 - S T AH0 D\nMASTED(2)  M AE1 - S T IH0 D\nMASTEL  M EY1 - S T AH0 L\nMASTELLER  M EY1 - S T AH0 L - ER0\nMASTEN  M AE1 - S T AH0 N\nMASTER  M AE1 - S T ER0\nMASTER'S  M AE1 - S T ER0 Z\nMASTERCARD  M AE1 - S T ER0 - K AA2 R D\nMASTERCARD'S  M AE1 - S T ER0 - K AA2 R D Z\nMASTERCARDS  M AE1 - S T ER0 - K AA2 R D Z\nMASTERED  M AE1 - S T ER0 D\nMASTERFUL  M AE1 - S T ER0 - F AH0 L\nMASTERFULLY  M AE1 - S T ER0 - F AH0 - L IY0\nMASTERGATE  M AE1 - S T ER0 - G EY2 T\nMASTERING  M AE1 - S T ER0 - IH0 NG\nMASTERLY  M AE1 - S T ER0 - L IY0\nMASTERMAN  M AE1 - S T ER0 - M AH0 N\nMASTERMIND  M AE1 - S T ER0 - M AY2 N D\nMASTERMINDED  M AE1 - S T ER0 - M AY2 N - D IH0 D\nMASTERMINDING  M AE1 - S T ER0 - M AY2 N - D IH0 NG\nMASTERMINDS  M AE1 - S T ER0 - M AY2 N D Z\nMASTERPIECE  M AE1 - S T ER0 - P IY2 S\nMASTERPIECES  M AE1 - S T ER0 - P IY2 - S AH0 Z\nMASTERPIECES(2)  M AE1 - S T ER0 - P IY2 - S IH0 Z\nMASTERS  M AE1 - S T ER0 Z\nMASTERS'  M AE1 - S T ER0 Z\nMASTERSON  M AE1 - S T ER0 - S AH0 N\nMASTERSTROKE  M AE1 - S T ER0 - S T R OW2 K\nMASTERWORK  M AE1 - S T ER0 - W ER2 K\nMASTERWORKS  M AE1 - S T ER0 - W ER2 K S\nMASTERY  M AE1 - S T ER0 - IY0\nMASTHEAD  M AE1 S T - HH EH2 D\nMASTIF  M AE1 - S T AH0 F\nMASTIF'S  M AE1 - S T AH0 F S\nMASTIFF  M AE1 - S T AH0 F\nMASTIFS  M AE1 - S T AH0 F S\nMASTIN  M AE1 - S T IH0 N\nMASTODON  M AE1 - S T AH0 - D AO2 N\nMASTOIDITIS  M AE2 - S T OY0 - D AY1 - T AH0 S\nMASTON  M AE1 - S T AH0 N\nMASTRANGELO  M AA0 - S T R AA0 NG - G EH1 - L OW0\nMASTRIANNI  M AA0 S - T R IY0 - AA1 - N IY0\nMASTRIANO  M AA0 S - T R IY0 - AA1 - N OW0\nMASTRICH  M AE1 - S T R IH0 CH\nMASTRICH'S  M AE1 - S T R IH0 - CH IH0 Z\nMASTRICH'S(2)  M AA1 - S T R IH0 K S\nMASTRICH(2)  M AA1 - S T R IH0 K\nMASTRO  M AE1 - S T R OW0\nMASTROCOLA  M AE0 - S T R OW0 - K OW1 - L AH0\nMASTROGIOVANNI  M AE0 - S T R OW0 - JH OW0 - V AA1 - N IY0\nMASTROIANNI  M AE0 - S T R OW0 - Y AA1 - N IY0\nMASTRONARDI  M AE0 - S T R OW0 - N AA1 R - D IY0\nMASTROPIETRO  M AE0 - S T R OW0 - P IY1 - T R OW0\nMASTS  M AE1 S T S\nMASTS(2)  M AE1 S S\nMASTURBATE  M AE1 - S T ER0 - B EY2 T\nMASTURBATED  M AE1 - S T ER0 - B EY2 - T IH0 D\nMASTURBATES  M AE1 - S T ER0 - B EY2 T S\nMASTURBATING  M AE1 - S T ER0 - B EY2 - T IH0 NG\nMASTURBATION  M AE2 - S T ER0 - B EY1 - SH AH0 N\nMASUCCI  M AA0 - S UW1 - CH IY0\nMASUDA  M AH0 - S UW1 - D AH0\nMASULLO  M AA0 - S UW1 - L OW0\nMASUR  M AE1 - S ER0\nMAT  M AE1 T\nMATA  M AA1 - T AH0\nMATABANE  M AE1 - T AH0 - B EY2 N\nMATADOR  M AE1 - T AH0 - D AO2 R\nMATAGORDA  M AE2 - T AH0 - G AO1 R - D AH0\nMATAKSAS  M AH0 - T AE1 K - S AH0 S\nMATALA  M AH0 - T AA1 - L AH0\nMATALA'S  M AH0 - T AA1 - L AH0 Z\nMATALIN  M AE1 - T AH0 - L IH0 N\nMATALIN(2)  M AE1 T - L IH0 N\nMATALON  M AA0 - T AA0 - L AO1 N\nMATAMOROS  M AA0 - T AA0 - M AO1 - R OW0 S\nMATARAZZO  M AA0 - T AA0 - R AA1 - Z OW0\nMATARESE  M AA0 - T AA0 - R EY1 - Z IY0\nMATAS  M AA1 - T AH0 Z\nMATASSA  M AA0 - T AA1 - S AH0\nMATAYA  M AA0 - T AA1 - Y AH0\nMATCH  M AE1 CH\nMATCH'S  M AE1 - CH IH0 Z\nMATCHBOOK  M AE1 CH - B UH2 K\nMATCHBOX  M AE1 CH - B AA2 K S\nMATCHED  M AE1 CH T\nMATCHES  M AE1 - CH AH0 Z\nMATCHES(2)  M AE1 - CH IH0 Z\nMATCHETT  M AE1 - CH IH0 T\nMATCHING  M AE1 - CH IH0 NG\nMATCHLOCK  M AE1 CH - L AA2 K\nMATCHLOCKS  M AE1 CH - L AA2 K S\nMATCHMAKER  M AE1 CH - M EY2 - K ER0\nMATCHMAKERS  M AE1 CH - M EY2 - K ER0 Z\nMATCHMAKING  M AE1 CH - M EY2 - K IH0 NG\nMATCHUP  M AE1 - CH AH0 P\nMATCHUPS  M AE1 - CH AH0 P S\nMATE  M EY1 T\nMATECKI  M AH0 - T EH1 - K IY0\nMATED  M EY1 - T IH0 D\nMATEER  M AH0 - T IH1 R\nMATEJA  M AA0 - T EY1 - Y AH0\nMATEJKA  M AH0 - T EY1 - K AH0\nMATELL  M AH0 - T EH1 L\nMATELSKI  M AH0 - T EH1 L - S K IY0\nMATEO  M AA0 - T EY1 - OW0\nMATER  M AA1 - T ER0\nMATER(2)  M EY1 - T ER0\nMATER(3)  M AE1 - T ER0\nMATERA  M AA0 - T EH1 - R AH0\nMATERIAL  M AH0 - T IH1 - R IY0 - AH0 L\nMATERIALISM  M AH0 - T IH1 - R IY0 - AH0 - L IH2 - Z AH0 M\nMATERIALIST  M AH0 - T IH1 - R IY0 - AH0 - L IH0 S T\nMATERIALISTIC  M AH0 - T IH2 - R IY0 - AH0 - L IH1 - S T IH0 K\nMATERIALITY  M AH0 - T IH2 - R IY0 - AE1 - L IH0 - T IY0\nMATERIALIZE  M AH0 - T IH1 - R IY0 - AH0 - L AY2 Z\nMATERIALIZED  M AH0 - T IH1 - R IY0 - AH0 - L AY2 Z D\nMATERIALIZES  M AH0 - T IH1 - R IY0 - AH0 - L AY2 - Z IH0 Z\nMATERIALIZING  M AH0 - T IH1 - R IY0 - AH0 - L AY2 - Z IH0 NG\nMATERIALLY  M AH0 - T IH1 - R IY0 - AH0 - L IY0\nMATERIALS  M AH0 - T IH1 - R IY0 - AH0 L Z\nMATERIALS'  M AH0 - T IH1 - R IY0 - AH0 L Z\nMATERIEL  M AH0 - T IH2 - R IY0 - EH1 L\nMATERIELS  M AH0 - T IH2 - R IY0 - EH1 L Z\nMATERN  M AE1 - T ER0 N\nMATERNA  M AA0 - T EH1 R - N AH0\nMATERNAL  M AH0 - T ER1 - N AH0 L\nMATERNITY  M AH0 - T ER1 - N IH0 - T IY0\nMATES  M EY1 T S\nMATEWAN  M AE1 - T UW2 - AA0 N\nMATEWAN(2)  M EY1 T - W AA2 N\nMATEY  M EY1 - T IY0\nMATH  M AE1 TH\nMATHAI  M AA0 - DH AA1 - IY0\nMATHAN  M EY1 - TH AH0 N\nMATHE  M EY1 DH\nMATHEA  M AE1 - DH IY0 - AH0\nMATHEIS  M AE1 - DH AY0 Z\nMATHEMATIC  M AE2 - TH AH0 - M AE1 - T IH0 K\nMATHEMATICAL  M AE2 - TH AH0 - M AE1 - T IH0 - K AH0 L\nMATHEMATICALLY  M AE2 - TH AH0 - M AE1 - T IH0 - K AH0 - L IY0\nMATHEMATICALLY(2)  M AE2 - TH AH0 - M AE1 - T IH0 K - L IY0\nMATHEMATICIAN  M AE2 - TH AH0 - M AH0 - T IH1 - SH AH0 N\nMATHEMATICIANS  M AE2 - TH AH0 - M AH0 - T IH1 - SH AH0 N Z\nMATHEMATICS  M AE2 - TH AH0 - M AE1 - T IH0 K S\nMATHENA  M AE1 - TH IH0 - N AH0\nMATHENEY  M AE1 - TH IH0 - N IY0\nMATHENY  M AE1 - TH IH0 - N IY0\nMATHER  M AE1 - DH ER0\nMATHERLY  M AE1 - DH ER0 - L IY0\nMATHERN  M AE1 - DH ER0 N\nMATHERNE  M AE1 - TH ER0 N\nMATHERS  M AE1 - DH ER0 Z\nMATHERSON  M AE1 - TH ER0 - S AH0 N\nMATHES  M AE1 - TH IH0 S\nMATHESON  M AE1 - TH AH0 - S AH0 N\nMATHESON'S  M AE1 - TH AH0 - S AH0 N Z\nMATHEUS  M AE1 - DH OY0 Z\nMATHEW  M AE1 - TH Y UW0\nMATHEWS  M AE1 - TH Y UW0 Z\nMATHEWSON  M AE1 - TH Y UW0 - S AH0 N\nMATHEY  M AE1 - DH IY0\nMATHIA  M AA1 - DH IY0 - AH0\nMATHIAS  M AH0 - TH AY1 - AH0 S\nMATHIASEN  M AH0 - TH AY1 - AH0 - S AH0 N\nMATHIASON  M AH0 - TH AY1 - AH0 - S AH0 N\nMATHIE  M AE1 - TH IY0\nMATHIES  M AE1 - TH IY0 Z\nMATHIESEN  M AE1 - TH IY0 - S AH0 N\nMATHIESON  M AH0 - TH IY1 - Z AH0 N\nMATHIEU  M AE1 - TH Y UW0\nMATHILDA  M AH0 - T IH1 L - D AH0\nMATHILDE  M AE1 - TH IH0 L D\nMATHILDE(2)  M AH0 - T IH1 L D\nMATHIS  M AE1 - TH IH0 S\nMATHISEN  M AE1 - TH AY0 - Z AH0 N\nMATHISON  M AE1 - TH IH0 - S AH0 N\nMATHUR  M AE1 - TH ER0\nMATHWIG  M AE1 TH - W IH0 G\nMATHY  M AE1 - TH IY0\nMATHYS  M EY1 - TH IY0 Z\nMATIAS  M AA1 - SH AH0 Z\nMATIC  M AE1 - T IH0 K\nMATIF  M AA0 - T IY1 F\nMATILDA  M AH0 - T IH1 L - D AH0\nMATINEE  M AE1 - T IH0 - N EY2\nMATING  M EY1 - T IH0 NG\nMATION  M AE1 - T Y AH0 N\nMATION(2)  M EY1 - SH AH0 N\nMATIS  M AA1 - T IH0 S\nMATISSE  M AE1 - T IY0 S\nMATISSE'S  M AE1 - T IY0 - S IH0 Z\nMATKIN  M AE1 T - K IH0 N\nMATKINS  M AE1 T - K IH0 N Z\nMATKOVICH  M AA1 T - K AH0 - V IH0 CH\nMATLACK  M AE1 T - L AE2 K\nMATLICK  M AE1 T - L IH0 K\nMATLIN  M AE1 T - L IH0 N\nMATLOCK  M AE1 T - L AA2 K\nMATNEY  M AE1 T - N IY0\nMATO  M AA1 - T OW0\nMATOLA  M AH0 - T OW1 - L AH0\nMATOS  M AA1 - T OW0 Z\nMATOTT  M AE1 - T AH0 T\nMATOUSEK  M AH0 - T UW1 - S EH0 K\nMATRA  M AE1 - T R AH0\nMATRA'S  M AE1 - T R AH0 Z\nMATRANGA  M AA0 - T R AA1 NG - G AH0\nMATRIARCH  M EY1 - T R IY0 - AA2 R K\nMATRIARCHAL  M EY2 - T R IY0 - AA1 R - K AH0 L\nMATRIARCHY  M EY1 - T R IY0 - AA2 R - K IY0\nMATRILINEAL  M AE2 - T R IH0 - L IH1 - N IY0 - AH0 L\nMATRIMONIAL  M AE2 - T R AH0 - M OW1 - N IY0 - AH0 L\nMATRIMONY  M AE1 - T R AH0 - M OW2 - N IY0\nMATRIX  M EY1 - T R IH0 K S\nMATRIX'S  M EY1 - T R IH0 K - S IH0 Z\nMATRON  M EY1 - T R AH0 N\nMATRONLY  M EY1 - T R AH0 N - L IY0\nMATRONS  M EY1 - T R AH0 N Z\nMATS  M AE1 T S\nMATSAPA  M AE0 T - S AA1 - P AH0\nMATSCH  M AE1 CH\nMATSEN  M AA1 T - S AH0 N\nMATSKO  M AA1 T - S K OW0\nMATSON  M AA1 T - S AH0 N\nMATSU-YA  M AE2 T - S UW1 - Y AH0\nMATSUBARA  M AA2 T - S UW2 - B AA1 - R AH0\nMATSUDA  M AA0 T - S UW1 - D AH0\nMATSUI  M AA0 T - S UW1 - IY0\nMATSUKAWA  M AA2 T - S UW2 - K AA1 - W AH0\nMATSUMOTO  M AA0 T - S UW0 - M OW1 - T OW0\nMATSUMURA  M AA0 T - S UW0 - M UH1 - R AH0\nMATSUNAGA  M AA0 T - S UW0 - N AA1 - G AH0\nMATSUO  M AA0 T - S UW1 - OW0\nMATSUOKA  M AA0 T - S UW0 - OW1 - K AH0\nMATSUSHITA  M AA0 T - S UW0 - SH IY1 - T AH0\nMATSUSHITA'S  M AA2 T - S UW0 - SH IY1 - T AH0 Z\nMATSUSHITA'S(2)  M AA0 T - S UW1 - SH IY0 - T AH0 Z\nMATSUSHITA(2)  M AA0 T - S UW1 - SH IY0 - T AH0\nMATSUURA  M AA0 T - S UW0 - UH1 - R AH0\nMATT  M AE1 T\nMATT'S  M AE1 T Z\nMATTA  M AE1 - T AH0\nMATTE  M AE1 T\nMATTEA  M AE1 - SH AH0\nMATTEI  M AE1 - T AY0\nMATTEIS  M AH0 - T AY1 S\nMATTEL  M AH0 - T EH1 L\nMATTEL'S  M AH0 - T EH1 L Z\nMATTEO  M AA0 - T EY1 - OW0\nMATTER  M AE1 - T ER0\nMATTER'S  M AE1 - T ER0 Z\nMATTERA  M AA0 - T EH1 - R AH0\nMATTEREASE  M AE1 - T ER0 - IY2 Z\nMATTEREASE(2)  M AH0 - T R IY1 - Z IY0\nMATTERED  M AE1 - T ER0 D\nMATTERN  M AE1 - T ER0 N\nMATTERS  M AE1 - T ER0 Z\nMATTES  M AE1 T S\nMATTESON  M AE1 - T IH0 - S AH0 N\nMATTEUCCI  M AA0 - T UW1 - CH IY0\nMATTHAU  M AE1 T - HH AW0\nMATTHAUSEN  M AE1 T - HH AW0 - Z AH0 N\nMATTHEA  M AE1 T - DH IY0 - AH0\nMATTHEIS  M AE1 T - DH AY0 Z\nMATTHES  M AE1 - TH IH0 Z\nMATTHEW  M AE1 - TH Y UW0\nMATTHEW'S  M AE1 - TH Y UW0 Z\nMATTHEWS  M AE1 - TH Y UW0 Z\nMATTHEWS'S  M AE1 - TH Y UW0 - Z IH0 Z\nMATTHEWSON  M AE1 - TH Y UW0 - S AH0 N\nMATTHEY  M AE1 T - DH IY0\nMATTHIA  M AA1 T - DH IY0 - AH0\nMATTHIAS  M AH0 - TH AY1 - AH0 S\nMATTHIES  M AE1 - TH IY0 Z\nMATTHIESEN  M AE1 - TH IY0 - S AH0 N\nMATTHIS  M AE1 - TH IH0 S\nMATTHYS  M AE1 - TH IY0 Z\nMATTIAS  M AE1 - SH AH0 Z\nMATTICE  M AA1 - T IH0 S\nMATTICK  M AE1 - T IH0 K\nMATTIE  M AE1 - T IY0\nMATTIKALLI  M AE2 - T IH2 - K AA1 - L IY0\nMATTILA  M AA0 - T IY1 - L AH0\nMATTINA  M AA0 - T IY1 - N AH0\nMATTING  M AE1 - T IH0 NG\nMATTINGLEY  M AE1 - T IH0 NG - G L IY0\nMATTINGLY  M AE1 - T IH0 NG - L IY0\nMATTIOLI  M AA0 - T IY0 - OW1 - L IY0\nMATTIS  M AE1 - T IH0 S\nMATTISON  M AE1 - T IH0 - S AH0 N\nMATTKE  M AE1 T - K IY0\nMATTOCKS  M AE1 - T AH0 K S\nMATTON  M AE1 - T AH0 N\nMATTOON  M AH0 - T UW1 N\nMATTOS  M AE1 - T OW0 Z\nMATTOX  M AE1 - T AH0 K S\nMATTOX(2)  M AE1 - T AA2 K S\nMATTRESS  M AE1 - T R AH0 S\nMATTRESS'S  M AE1 - T R AH0 - S IH0 Z\nMATTRESSES  M AE1 - T R AH0 - S AH0 Z\nMATTRESSES(2)  M AE1 - T R AH0 - S IH0 Z\nMATTS  M AE1 T S\nMATTSON  M AE1 T - S AH0 N\nMATTUCCI  M AA0 - T UW1 - CH IY0\nMATTY  M AE1 - T IY0\nMATULA  M AA0 - T UW1 - L AH0\nMATULICH  M AH0 - T Y UW1 - L IH0 HH\nMATULIS  M AE1 - T AH0 - L IH0 S\nMATURATION  M AE2 - CH ER0 - EY1 - SH AH0 N\nMATURATION(2)  M AE2 - CH UH0 - R EY1 - SH AH0 N\nMATURE  M AH0 - CH UH1 R\nMATURE(2)  M AH0 - T Y UH1 R\nMATURED  M AH0 - T Y UH1 R D\nMATURES  M AH0 - CH UH1 R Z\nMATURES(2)  M AH0 - T Y UH1 R Z\nMATURING  M AH0 - CH UH1 - R IH0 NG\nMATURING(2)  M AH0 - T Y UH1 - R IH0 NG\nMATURITIES  M AH0 - CH UH1 - R IH0 - T IY0 Z\nMATURITY  M AH0 - CH UH1 - R AH0 - T IY0\nMATURITY(2)  M AH0 - T Y UH1 - R IH0 - T IY0\nMATURO  M AA0 - T UH1 - R OW0\nMATUS  M AE1 - T IH0 S\nMATUSCHKA  M AH0 - T AH1 SH - K AH0\nMATUSEK  M AH0 - T UW1 - S EH0 K\nMATUSI  M AH0 - T UW1 - S IY0\nMATUSIAK  M AH0 - T AH1 - S IY0 - AE0 K\nMATUSIK  M AH0 - T UW1 - S IH0 K\nMATUSKA  M AH0 - T AH1 - S K AH0\nMATUSSI  M AH0 - T UW1 - S IY0\nMATUSZAK  M AH0 - T AH1 - SH AH0 K\nMATUSZEWSKI  M AH0 - T AH0 - SH EH1 F S - K IY0\nMATYAS  M AE1 - T Y AH0 S\nMATZ  M AE1 T S\nMATZA  M AA1 T - Z AH0\nMATZEK  M AE1 T - Z IH0 K\nMATZEN  M AE1 T - Z AH0 N\nMATZINGER  M EY1 T - S IH0 - NG ER0\nMATZKE  M AE1 T - S K IY0\nMATZNER  M AE1 T - S N ER0\nMATZU  M AE1 T - Z UW0\nMAU  M OW1\nMAU(2)  M AW1\nMAUCERI  M AO0 - CH EH1 - R IY0\nMAUCH  M AO1 CH\nMAUCHER  M AW1 - CH ER0\nMAUCHER(2)  M AA1 - K ER0\nMAUCK  M AO1 K\nMAUD  M AO1 D\nMAUDE  M AO1 D\nMAUDLIN  M AO1 D - L IH0 N\nMAUE  M AW1 - IY0\nMAUER  M AW1 - ER0\nMAUGER  M AO1 - G ER0\nMAUGERI  M AO0 - JH EH1 - R IY0\nMAUGHAN  M AO1 - G AH0 N\nMAUI  M AW1 - IY0\nMAUK  M AO1 K\nMAUL  M AO1 L\nMAULDEN  M AW1 L - D AH0 N\nMAULDIN  M AW1 L - D AH0 N\nMAULDING  M AO1 L - D IH0 NG\nMAULE  M AO1 L\nMAULED  M AO1 L D\nMAULER  M AO1 - L ER0\nMAULL  M AO1 L\nMAULSBY  M AO1 L S - B IY0\nMAULT  M AO1 L T\nMAULTASCH  M AO1 L - T AE0 SH\nMAULTSBY  M AO1 L T S - B IY0\nMAUMEE  M AW1 - M IY0\nMAUNA  M AO1 - N AH0\nMAUND  M AO1 N D\nMAUNDERING  M AO1 N - D ER0 - IH0 NG\nMAUNDERINGS  M AO1 N - D ER0 - IH0 NG Z\nMAUNE  M AO1 N\nMAUNEY  M AO1 - N IY0\nMAUNG  M AO1 NG\nMAUPIN  M OW0 - P AE1 N\nMAURA  M AO1 - R AH0\nMAURA'S  M AO1 - R AH0 Z\nMAUREEN  M AO0 - R IY1 N\nMAURER  M AO1 - R ER0\nMAURI  M AO1 - R IY0\nMAURICE  M AO0 - R IY1 S\nMAURICE'S  M AO1 - R AH0 - S AH0 Z\nMAURICE'S(2)  M AO0 - R IY1 - S AH0 Z\nMAURICE(2)  M AA1 - R IH0 S\nMAURICIO  M AW0 - R IY1 - S IY0 - OW0\nMAURIE  M AO1 - R IY0\nMAURIELLO  M AO2 - R IY0 - EH1 - L OW0\nMAURIN  M AO1 - R IH0 N\nMAURINE  M AO0 - R IY1 - N IY0\nMAURITA  M AO0 - R IY1 - T AH0\nMAURITANIA  M AO2 - R IH0 - T EY1 - N IY0 - AH0\nMAURITANIA(2)  M AO2 - R IH0 - T EY1 - N Y AH0\nMAURITIUS  M AO0 - R IH1 - T IY0 - AH0 S\nMAURITZ  M AO1 - R IH0 T S\nMAURIZIO  M AO0 - R IH1 - Z IY0 - OW0\nMAURO  M AO1 - R OW0\nMAURUS  M AO1 - R AH0 S\nMAURY  M AO1 - R IY0\nMAUS  M AO1 Z\nMAUSER  M AW1 - S ER0\nMAUSOLEUM  M AO2 - S AH0 - L IY1 - AH0 M\nMAUSOLF  M AW1 S - OW0 L F\nMAUSS  M AO1 S\nMAUSSER  M AW1 - S ER0\nMAUST  M AO1 S T\nMAUTE  M AO1 T\nMAUTHE  M AO1 DH\nMAUTNER  M AO1 T - N ER0\nMAUTZ  M AO1 T S\nMAUVE  M AO1 V\nMAUZEY  M AO1 - Z IY0\nMAUZY  M AO1 - Z IY0\nMAVARACH  M AH0 - V AA1 - R AH0 CH\nMAVE  M EY1 V\nMAVEN  M EY1 - V AH0 N\nMAVEN'S  M EY1 - V AH0 N Z\nMAVENS  M EY1 - V AH0 N Z\nMAVERICK  M AE1 - V ER0 - IH0 K\nMAVERICK'S  M AE1 - V ER0 - IH0 K S\nMAVERICK'S(2)  M AE1 - V R IH0 K S\nMAVERICK(2)  M AE1 - V R IH0 K\nMAVERICKS  M AE1 - V ER0 - IH0 K S\nMAVERICKS(2)  M AE1 - V R IH0 K S\nMAVERIX  M AE1 - V ER0 - IH0 K S\nMAVES  M EY1 V Z\nMAVIS  M EY1 - V IH0 S\nMAVRODI  M AE0 - V R OW1 - D IY0\nMAVROULES  M AE0 - V R UW1 L Z\nMAW  M AO1\nMAWHINNEY  M AE1 - W IH0 - N IY0\nMAWKISH  M AO1 - K IH0 SH\nMAWR  M AO1 - ER0\nMAWR(2)  M AA1 R\nMAWSON  M AO1 - S AH0 N\nMAWYER  M AO1 - IY0 - ER0\nMAX  M AE1 K S\nMAX'S  M AE1 K - S IH0 Z\nMAXA  M AE1 K - S AH0\nMAXAM  M AE1 K - S AH0 M\nMAXCY  M AE1 K - S IY0\nMAXED  M AE1 K S T\nMAXELL  M AE0 K - S EH1 L\nMAXEY  M AE1 K - S IY0\nMAXFIELD  M AE1 K S - F IY0 L D\nMAXHAM  M AE1 K - S AH0 M\nMAXI  M AE1 K - S IY0\nMAXICARE  M AE1 K - S IY0 - K EH1 R\nMAXIE  M AE1 K - S IY0\nMAXILLA  M AE0 K - S IH1 - L AH0\nMAXIM  M AE1 K - S AH0 M\nMAXIMA  M AE1 K - S AH0 - M AH0\nMAXIMAL  M AE1 K - S AH0 - M AH0 L\nMAXIME  M AE0 K - S IY1 M\nMAXIMILIAN  M AE2 K - S IH0 - M IH1 - L IY0 - AH0 N\nMAXIMIZATION  M AE2 K - S IH0 - M IH0 - Z EY1 - SH AH0 N\nMAXIMIZE  M AE1 K - S AH0 - M AY2 Z\nMAXIMIZED  M AE1 K - S AH0 - M AY2 Z D\nMAXIMIZES  M AE1 K - S AH0 - M AY2 - Z IH0 Z\nMAXIMIZING  M AE1 K - S AH0 - M AY2 - Z IH0 NG\nMAXIMS  M AE1 K - S AH0 M Z\nMAXIMUM  M AE1 K - S AH0 - M AH0 M\nMAXINE  M AE0 K - S IY1 N\nMAXION  M AE1 K - S IY0 - AA0 N\nMAXIS  M AE1 K - S IY0 Z\nMAXON  M AE1 K - S AH0 N\nMAXPHARMA  M AE0 K S - F AA1 R - M AH0\nMAXSAVER  M AE2 K - S EY1 - V ER0\nMAXSAVERS  M AE2 K - S EY1 - V ER0 Z\nMAXSON  M AE1 K - S AH0 N\nMAXTON  M AE1 K - S T AH0 N\nMAXTOR  M AE1 K - S T ER0\nMAXUS  M AE1 K - S AH0 S\nMAXUS'S  M AE1 K - S AH0 - S IH0 Z\nMAXWELL  M AE1 K - S W EH2 L\nMAXWELL'S  M AE1 K - S W EH2 L Z\nMAXX  M AE1 K S\nMAXXAM  M AE1 K - S AH0 M\nMAXXIM  M AE1 K - S IH0 M\nMAXY  M AE1 K - S IY0\nMAXZIDE  M AE0 K - S IY1 - T AH0\nMAY  M EY1\nMAY'S  M EY1 Z\nMAYA  M AY1 - AH0\nMAYALL  M EY1 - AO2 L\nMAYAN  M AY1 - AH0 N\nMAYANS  M AY1 - AH0 N Z\nMAYBE  M EY1 - B IY0\nMAYBEE  M EY1 - B IY2\nMAYBELLE  M EY2 - B EH1 L\nMAYBELLINE  M EY1 - B AH0 - L IY2 N\nMAYBEN  M EY1 - B AH0 N\nMAYBERRY  M EY1 - B EH2 - R IY0\nMAYBIN  M EY1 - B IH0 N\nMAYBURY  M EY1 - B EH2 - R IY0\nMAYCOCK  M EY1 - K AA2 K\nMAYDA  M EY1 - D AH0\nMAYDAY  M EY1 - D EY0\nMAYDE  M EY1 D\nMAYDEN  M EY1 - D AH0 N\nMAYDENA  M EY1 - D IH0 - N AH0\nMAYE  M EY1\nMAYEAUX  M EY1 - OW0\nMAYEDA  M AY0 - IY1 - D AH0\nMAYER  M EY1 - ER0\nMAYER'S  M EY1 - ER0 Z\nMAYERNIK  M EY0 - ER1 - N IH0 K\nMAYERS  M EY1 - ER0 Z\nMAYERSON  M EY1 - ER0 - S AH0 N\nMAYES  M EY1 Z\nMAYEUX  M EY0 - OW1\nMAYFAIR  M EY1 - F EH2 R\nMAYFIELD  M EY1 - F IY2 L D\nMAYFLOWER  M EY1 - F L AW2 - ER0\nMAYHALL  M EY1 - HH AO2 L\nMAYHAN  M EY1 - AH0 N\nMAYHEM  M EY1 - HH EH2 M\nMAYHER  M EY1 - ER0\nMAYHEW  M EY1 - HH Y UW0\nMAYHUE  M EY1 - HH Y UW2\nMAYHUGH  M EY1 - HH AH0\nMAYLAND  M EY1 - L AH0 N D\nMAYLE  M EY1 L\nMAYLE(2)  M EY1 - L IY0\nMAYME  M EY1 M\nMAYNARD  M EY1 - N ER0 D\nMAYNARD'S  M EY1 - N ER0 D Z\nMAYNE  M EY1 N\nMAYNER  M EY1 - N ER0\nMAYNES  M EY1 N Z\nMAYNOR  M EY1 - N ER0\nMAYO  M EY1 - OW0\nMAYON  M EY0 - AO1 N\nMAYONNAISE  M EY1 - AH0 - N EY2 Z\nMAYOR  M EY1 - ER0\nMAYOR'S  M EY1 - ER0 Z\nMAYORAL  M EY1 - ER0 - AH0 L\nMAYORALTY  M EY1 - ER0 - AH0 L - T IY0\nMAYORGA  M EY2 - AO1 R - G AH0\nMAYORS  M EY1 - ER0 Z\nMAYOTTE  M EY0 - AO1 T\nMAYR  M EY1 R\nMAYS  M EY1 Z\nMAYS'  M EY1 Z\nMAYSE  M EY1 Z\nMAYSON  M EY1 - Z AH0 N\nMAYTAG  M EY1 - T AE2 G\nMAYTON  M EY1 - T AH0 N\nMAYVILLE  M EY1 - V IH2 L\nMAYWEATHER  M EY1 - W EH2 - DH ER0\nMAZ  M AA1 Z\nMAZA  M AA1 - Z AH0\nMAZAITIS  M AH0 - Z AY1 - T IH0 S\nMAZANEC  M AH0 - Z AE1 - N IH0 K\nMAZANKOWSKI  M AE2 - Z AH0 NG - K AW1 S - K IY0\nMAZDA  M AA1 Z - D AH0\nMAZDA'S  M AA1 Z - D AH0 Z\nMAZDA'S(2)  M AE1 Z - D AH0 Z\nMAZDA(2)  M AE1 Z - D AH0\nMAZE  M EY1 Z\nMAZEIKA  M AH0 - Z AY1 - K AH0\nMAZELTOV  M AA1 - Z AH0 L - T AA2 F\nMAZER  M EY1 - Z ER0\nMAZES  M EY1 - Z IH0 Z\nMAZIARZ  M AH0 - Z IY1 - ER0 Z\nMAZIE  M EY1 - Z IY0\nMAZO  M AA1 - Z OW0\nMAZOLA  M AH0 - Z OW1 - L AH0\nMAZON  M AA0 - Z AO1 N\nMAZOR  M AA0 - Z AO1 R\nMAZOWIECKI  M AH0 - Z OW2 - IY0 - EH1 - K IY0\nMAZUR  M AE1 - Z ER0\nMAZUREK  M AH0 - Z Y UW1 - R EH0 K\nMAZURKAS  M AH0 - Z ER1 - K AH0 Z\nMAZURKIEWICZ  M AH0 - Z ER1 - K AH0 - V IH0 CH\nMAZUROWSKI  M AH0 - Z ER0 - AO1 F S - K IY0\nMAZYCK  M AE1 - Z IH0 K\nMAZZA  M AE1 - Z AH0\nMAZZAFERRO  M AE2 - Z AH0 - F EH1 - R OW0\nMAZZANTI  M AA0 T - S AA1 N - T IY0\nMAZZARA  M AA0 T - S AA1 - R AH0\nMAZZARELLA  M AA0 T - S AA0 - R EH1 - L AH0\nMAZZEI  M AA0 T - S EY1 - IY0\nMAZZELLA  M AA0 T - S EH1 - L AH0\nMAZZEO  M AE1 - Z IY0 - OW0\nMAZZETTI  M AA0 T - S EH1 - T IY0\nMAZZIE  M AE1 - Z IY0\nMAZZIOTTI  M AA0 T - S IY0 - OW1 - T IY0\nMAZZO  M AE1 - Z OW0\nMAZZOCCHI  M AA0 T - S OW1 - K IY0\nMAZZOCCO  M AA0 T - S OW1 - K OW0\nMAZZOLA  M AA0 T - S OW1 - L AH0\nMAZZOLA'S  M AA0 T - S OW1 - L AH0 Z\nMAZZOLI  M AH0 - Z OW1 - L IY0\nMAZZOLLA  M AH0 - Z OW1 - L AH0\nMAZZONE  M AA0 T - S OW1 - N IY0\nMAZZONI  M AA0 T - S OW1 - N IY0\nMAZZORANA  M AE2 - Z ER0 - AA1 - N AH0\nMAZZOTTA  M AA0 T - S OW1 - T AH0\nMAZZUCA  M AA0 T - S UW1 - K AH0\nMAZZUCCO  M AA0 T - S UW1 - K OW0\nMBANK  EH1 M - B AE1 NG K\nMBEKI  M B EH1 - K IY0\nMBEKI(2)  AH0 M - B EH1 - K IY0\nMBEKI(3)  EH0 M - B EH1 - K IY0\nMC  M IH0 K\nMC(2)  EH1 M - S IY1\nMCABEE  M AH0 - K AE1 - B IY0\nMCABEE(2)  M AE1 - K AH0 - B IY0\nMCADAM  M AH0 - K AE1 - D AH0 M\nMCADAMS  M AH0 - K AE1 - D AH0 M Z\nMCADOO  M AE1 - K AH0 - D UW2\nMCADORY  M AH0 - K AE1 - D ER0 - IY0\nMCADOW  M AH0 - K AE1 - D OW0\nMCAFEE  M AE1 - K AH0 - F IY2\nMCAFEE(2)  M AH0 - K AE1 - F IY2\nMCAFFEE  M AE1 - K AH0 - F IY0\nMCAFFEE(2)  M AH0 - K AE1 - F IY2\nMCAFFERTY  M AH0 - K AE1 - F ER0 - T IY0\nMCALEER  M AE1 - K AH0 - L IH0 R\nMCALEESE  M AE1 - K AH0 - L IY0 Z\nMCALEXANDER  M AH0 - K AE2 - L IH0 G - Z AE1 N - D ER0\nMCALINDEN  M AH0 K - L IH1 N - D AH0 N\nMCALISTER  M AH0 - K AE1 - L AH0 - S T ER0\nMCALLEN  M AH0 - K AO1 - L AH0 N\nMCALLISTER  M AH0 - K AE1 - L AH0 - S T ER0\nMCALOON  M AE1 - K AH0 - L UW2 N\nMCALPIN  M AH0 - K AE1 L - P AH0 N\nMCALPINE  M AH0 - K AE1 L - P AY2 N\nMCAMIS  M AH0 - K AE1 - M AH0 S\nMCAN  M AH0 - K AE1 N\nMCANALLY  M AE1 - K AH0 - N AE2 - L IY0\nMCANANY  M AH0 - K AE1 - N AH0 - N IY0\nMCANDREW  M AH0 - K AE1 N - D R UW2\nMCANDREWS  M AH0 - K AE1 N - D R UW2 Z\nMCANELLY  M AE1 - K AH0 - N AE2 - L IY0\nMCANINCH  M AH0 - K AE1 - N IH0 N CH\nMCANNALLY  M AE1 - K AH0 - N AE2 - L IY0\nMCANULTY  M AE1 - K AH0 - N AH0 L - T IY0\nMCARDLE  M AH0 - K AA1 R - D AH0 L\nMCARTHUR  M AH0 - K AA1 R - TH ER0\nMCARTOR  M AH0 - K AA1 R - T ER0\nMCATEE  M AH0 - K AE1 - T IY0\nMCATEER  M AE1 - K AH0 - T IH2 R\nMCAULAY  M AH0 - K AO1 - L EY0\nMCAULEY  M AH0 - K AO1 - L IY0\nMCAULIFF  M AH0 - K AO1 - L AH0 F\nMCAULIFFE  M AH0 - K AO1 - L AH0 F\nMCAVITY  M AH0 - K AE1 - V AH0 - T IY0\nMCAVOY  M AE1 - K AH0 - V OY2\nMCBAIN  M AH0 K - B EY1 N\nMCBANE  M AH0 K - B EY1 N\nMCBAY  M AH0 K - B EY1\nMCBEAN  M AH0 K - B IY1 N\nMCBEATH  M AH0 K - B EH1 TH\nMCBEE  M AH0 K - B IY1\nMCBETH  M AH0 K - B EH1 TH\nMCBIRNEY  M AH0 K - B ER1 - N IY0\nMCBRAYER  M AH0 K - B R EY1 - ER0\nMCBREARTY  M AH0 K - B R IH1 R - T IY0\nMCBREEN  M AH0 K - B R IY1 N\nMCBRIDE  M AH0 K - B R AY1 D\nMCBRIDGE  M AH0 K - B R IH1 JH\nMCBRIEN  M AH0 K - B R AY1 - AH0 N\nMCBROOM  M AH0 K - B R UW1 M\nMCBRYAR  M AH0 K - B R AY1 - ER0\nMCBRYDE  M AH0 K - B R AY1 D\nMCBURNETT  M AH0 K - B ER1 - N AH0 T\nMCBURNEY  M AH0 K - B ER1 - N IY0\nMCCAA  M AH0 - K AA1\nMCCABE  M AH0 - K EY1 B\nMCCABE(2)  M AE1 - K AH0 - B IY0\nMCCADDEN  M AH0 - K AE1 - D AH0 N\nMCCADE  M AH0 - K EY1 D\nMCCAFFERTY  M AH0 - K AE1 - F ER0 - T IY0\nMCCAFFERY  M AH0 - K AE1 - F R IY0\nMCCAFFREY  M AH0 - K AE1 - F R IY0\nMCCAGHREN  M AH0 - K AE1 - G R AH0 N\nMCCAGUE  M AH0 - K EY1 G\nMCCAHAN  M AH0 - K AE1 N\nMCCAHILL  M AH0 - K AA1 - HH IH2 L\nMCCAIG  M AH0 - K EY1 G\nMCCAIN  M AH0 - K EY1 N\nMCCAIN'S  M AH0 - K EY1 N Z\nMCCALEB  M AH0 - K EY1 - L AH0 B\nMCCALIP  M AH0 - K AE1 - L IH2 P\nMCCALISTER  M AH0 - K AE1 - L AH0 - S T ER0\nMCCALL  M AH0 - K AO1 L\nMCCALL'S  M AH0 - K AO1 L Z\nMCCALLA  M AH0 - K AE1 - L AH0\nMCCALLEN  M AH0 - K AO1 - L AH0 N\nMCCALLEY  M AH0 - K AE1 - L IY0\nMCCALLIE  M AH0 - K AO1 - L IY0\nMCCALLION  M AH0 - K AE1 - L Y AH0 N\nMCCALLISTER  M AH0 - K AE1 - L AH0 - S T ER0\nMCCALLON  M AH0 - K AE1 - L AH0 N\nMCCALLUM  M AH0 - K AE1 - L AH0 M\nMCCALMONT  M AH0 - K AE1 L - M AH0 N T\nMCCAMANT  M AH0 - K AE1 - M AH0 N T\nMCCAMBRIDGE  M AH0 - K AE1 M - B R IH2 JH\nMCCAMBRIDGE(2)  M AH0 - K EY1 M - B R IH2 JH\nMCCAMEY  M AH0 - K AE1 - M IY0\nMCCAMISH  M AH0 - K AE1 - M IH0 SH\nMCCAMMON  M AH0 - K AE1 - M AH0 N\nMCCAMPBELL  M AH0 - K AE1 M P - B AH0 L\nMCCAMY  M AH0 - K EY1 - M IY0\nMCCAN  M AH0 - K AE1 N\nMCCANCE  M AH0 - K AE1 N S\nMCCANDLESS  M AH0 - K AE1 N D - L AH0 S\nMCCANDLISH  M AH0 - K AE1 N D - L IH0 SH\nMCCANE  M AH0 - K EY1 N\nMCCANLESS  M AH0 - K AE1 N - L AH0 S\nMCCANN  M AH0 - K AE1 N\nMCCANN'S  M AH0 - K AE1 N Z\nMCCANNA  M AH0 - K AE1 - N AH0\nMCCANNON  M AH0 - K AE1 - N AH0 N\nMCCANTS  M AH0 - K AE1 N T S\nMCCARD  M AH0 - K AA1 R D\nMCCARDELL  M AH0 - K AA1 R - D AH0 L\nMCCARDLE  M AH0 - K AA1 R - D AH0 L\nMCCAREY  M AH0 - K AE1 - R IY0\nMCCARGAR  M AH0 - K AA1 R - G ER0\nMCCARGO  M AH0 - K AA1 R - G OW0\nMCCARL  M AH0 - K AA1 R L\nMCCARLEY  M AH0 - K AA1 R - L IY0\nMCCARN  M AH0 - K AA1 R N\nMCCARNEY  M AH0 - K AA1 R - N IY0\nMCCARRAN  M AH0 - K EH1 - R AH0 N\nMCCARRELL  M AH0 - K AE1 - R AH0 L\nMCCARREN  M AH0 - K EH1 - R AH0 N\nMCCARRICK  M AH0 - K AE1 - R IH0 K\nMCCARROLL  M AH0 - K AE1 - R AH0 L\nMCCARRON  M AH0 - K AE1 - R AH0 N\nMCCARRY  M AH0 - K AE1 - R IY0\nMCCARSON  M AH0 - K AA1 R - S AH0 N\nMCCART  M AH0 - K AA1 R T\nMCCARTAN  M AH0 - K AA1 R - T AH0 N\nMCCARTEN  M AH0 - K AA1 R - T AH0 N\nMCCARTER  M AH0 - K AA1 R - T ER0\nMCCARTHA  M AH0 - K AA1 R - TH AH0\nMCCARTHY  M AH0 - K AA1 R - TH IY0\nMCCARTHY'S  M AH0 - K AA1 R - TH IY0 Z\nMCCARTHYISM  M AH0 - K AA1 R - TH IY0 - IH0 - Z AH0 M\nMCCARTHYITE  M AH0 - K AA1 R - TH IY0 - AY2 T\nMCCARTIN  M AH0 - K AA1 R - T AH0 N\nMCCARTNEY  M AH0 - K AA1 R T - N IY0\nMCCARTT  M AH0 - K AA1 R T\nMCCARTY  M AH0 - K AA1 R - T IY0\nMCCARVER  M AH0 - K AA1 R - V ER0\nMCCARVILLE  M AH0 - K AA0 R - V AH0 L\nMCCARY  M IY1 - K EH0 - R IY0\nMCCASKEY  M AH0 - K AE1 S - K IY0\nMCCASKILL  M AH0 - K AE1 S - K AH0 L\nMCCASLAND  M AH0 - K AE1 Z - L AH0 N D\nMCCASLIN  M AH0 - K AE1 Z - L AH0 N\nMCCAUGHAN  M AH0 - K AO1 N\nMCCAUGHEY  M AH0 - K AO1 - IY0\nMCCAUL  M AH0 - K AO1 L\nMCCAULEY  M AH0 - K AO1 - L IY0\nMCCAULLEY  M AH0 - K AO1 - L IY0\nMCCAUSLAND  M AH0 - K AO1 Z - L AH0 N D\nMCCAUSLIN  M AH0 - K AO1 Z - L AH0 N\nMCCAUTHY  M AH0 - K AW1 - TH IY0\nMCCAW  M AH0 - K AO1\nMCCAW'S  M AH0 - K AO1 Z\nMCCAWLEY  M AH0 - K AO1 - L IY0\nMCCAY  M AH0 - K EY1\nMCCHESNEY  M AH0 K - CH EH1 Z - N IY0\nMCCHRISTIAN  M AH0 K - R IH1 S - CH AH0 N\nMCCLAFFERTY  M AH0 K - L AE1 - F ER0 - T IY0\nMCCLAFLIN  M AH0 K - L AE1 F - L AH0 N\nMCCLAIN  M AH0 - K L EY1 N\nMCCLAINE  M AH0 - K L EY1 N\nMCCLAM  M AH0 - K L AE1 M\nMCCLANAHAN  M AH0 K - L AE1 - N AH0 - HH AE0 N\nMCCLANE  M AH0 - K L EY1 N\nMCCLARAN  M AH0 K - L AE1 - R AH0 N\nMCCLARD  M IY1 K - L ER0 D\nMCCLAREN  M AH0 - K L EH1 - R AH0 N\nMCCLARNON  M AH0 K - L AA1 R - N AH0 N\nMCCLARTY  M AH0 K - L AA1 R - T IY0\nMCCLARY  M AH0 - K L EH1 - R IY0\nMCCLASKEY  M AH0 K - L AE1 S - K IY0\nMCCLATCHEY  M AH0 K - L AE1 - CH IY0\nMCCLATCHY  M AH0 K - L AE1 - CH IY0\nMCCLAUGHERTY  M AH0 K - L AE1 - F ER0 - T IY0\nMCCLAVE  M AH0 - K L EY1 V\nMCCLAY  M AH0 K - L EY1\nMCCLEAF  M AH0 K - L IY1 F\nMCCLEAN  M AH0 K - L IY1 N\nMCCLEARY  M AH0 K - L IH1 - R IY0\nMCCLEARY'S  M AH0 K - L IH1 - R IY0 Z\nMCCLEAVE  M AH0 K - L IY1 V\nMCCLEERY  M AH0 K - L IH1 - R IY0\nMCCLEES  M AH0 - K L IY1 Z\nMCCLEESE  M AH0 K - L IY1 S\nMCCLELLAN  M AH0 - K L EH1 - L AH0 N\nMCCLELLAND  M AH0 - K L EH1 - L AH0 N D\nMCCLELLEN  M AH0 - K L EH1 - L AH0 N\nMCCLEMENTS  M AH0 - K L EH1 - M AH0 N T S\nMCCLENAGHAN  M AH0 - K L EH1 - N AH0 - G AH0 N\nMCCLENAHAN  M AH0 - K L EH1 - N AH0 - HH AE0 N\nMCCLENATHAN  M AH0 K - L EH1 - N AH0 - TH AH0 N\nMCCLENDON  M AH0 K - L EY1 N - D AH0 N\nMCCLENNY  M AH0 K - L EH1 - N IY0\nMCCLESKEY  M AH0 - K L EH1 S - K IY0\nMCCLIMANS  M AH0 - K L AY1 - M AH0 N Z\nMCCLIMANS(2)  M AH0 K - L IH1 - M AH0 N Z\nMCCLINTIC  M AH0 K - L IH1 N - T IH0 K\nMCCLINTICK  M AH0 K - L IH1 N - T IH0 K\nMCCLINTOCK  M AH0 G - L IH1 N - T AA0 K\nMCCLINTON  M AH0 K - L IH1 N - T AH0 N\nMCCLISH  M AH0 K - L IH1 SH\nMCCLORY  M AH0 K - L AO1 - R IY0\nMCCLOSKEY  M AH0 - K L AO1 S - K IY0\nMCCLOSKY  M AH0 - K L AO1 S - K IY0\nMCCLOUD  M AH0 K - L AW1 D\nMCCLOY  M AH0 K - L OY1\nMCCLUER  M AH0 - K L UW1 R\nMCCLUNE  M AH0 - K L UW1 N\nMCCLUNEY  M AH0 K - L UW1 - N IY0\nMCCLUNG  M AH0 K - L AH1 NG\nMCCLURE  M AH0 - K L UW1 R\nMCCLURG  M AH0 K - L ER1 G\nMCCLURKIN  M AH0 K - L ER1 - K AH0 N\nMCCLUSKEY  M AH0 K - L AH1 S - K IY0\nMCCOIG  M AH0 - K OY1 G\nMCCOIN  M AH0 - K OY1 N\nMCCOLE  M AH0 - K OW1 L\nMCCOLGAN  M AH0 - K OW1 L - G AH0 N\nMCCOLL  M AH0 - K OW1 L\nMCCOLLAM  M AH0 - K AA1 - L AH0 M\nMCCOLLEY  M AH0 - K AA1 - L IY0\nMCCOLLISTER  M AH0 - K AA1 - L AH0 - S T ER0\nMCCOLLOCH  M AH0 - K AA1 - L AH0 K\nMCCOLLOM  M AH0 - K AA1 - L AH0 M\nMCCOLLOUGH  M AH0 - K AA1 - L AH0\nMCCOLLOUGH(2)  M AH0 - K AA1 - L AW0\nMCCOLLUM  M AH0 - K AO1 - L AH0 M\nMCCOLM  M AH0 - K OW1 M\nMCCOMAS  M AH0 - K OW1 - M AH0 S\nMCCOMB  M AH0 - K OW1 M\nMCCOMBER  M AH0 - K OW1 M - B ER0\nMCCOMBER(2)  M AH0 - K OW1 - M ER0\nMCCOMBIE  M AH0 - K OW1 M - B IY0\nMCCOMBIE(2)  M AH0 - K OW1 - M IY0\nMCCOMBS  M AH0 - K AA1 M Z\nMCCOMMON  M AH0 - K AA1 - M AH0 N\nMCCOMMONS  M AH0 - K AA1 - M AH0 N Z\nMCCOMSEY  M AH0 - K AA1 M - S IY0\nMCCONAGHY  M AH0 - K AA1 - N AH0 - G IY0\nMCCONAHA  M AH0 - K AA1 - N AH0 - HH AA0\nMCCONAHAY  M AH0 - K AA1 - N AH0 - HH EY2\nMCCONAHY  M AH0 - K AA1 - N AH0 - HH IY0\nMCCONATHY  M AH0 - K AA1 - N AH0 - TH IY0\nMCCONATHY(2)  M AE1 - K AH0 - N AE2 - TH IY0\nMCCONAUGHEY  M AH0 - K AA1 - N AH0 - G EY0\nMCCONAUGHY  M AH0 - K AA1 - N AH0 - G IY0\nMCCONE  M AH0 - K OW1 N\nMCCONICO  M AH0 - K AA1 - N AH0 - K OW0\nMCCONKEY  M AH0 - K AA1 NG - K IY0\nMCCONN  M AH0 - K AA1 N\nMCCONNAUGHEY  M AH0 - K AA1 - N AH0 - G EY0\nMCCONNEL  M AH0 - K AA1 - N AH0 L\nMCCONNEL'S  M AH0 - K AA1 - N AH0 L Z\nMCCONNELL  M AH0 - K AA1 - N AH0 L\nMCCONNON  M AH0 - K AA1 - N AH0 N\nMCCONVILLE  M AH0 - K AA1 N - V IH2 L\nMCCOOEY  M AH0 - K UW1 - IY0\nMCCOOK  M AH0 - K UH1 K\nMCCOOL  M AH0 - K UW1 L\nMCCORD  M AH0 - K AO1 R D\nMCCORKEL  M AH0 - K AO1 R - K AH0 L\nMCCORKELL  M AH0 - K AO1 R - K AH0 L\nMCCORKINDALE  M AH0 - K AO1 R - K AH0 N - D EY2 L\nMCCORKLE  M AH0 - K AO1 R - K AH0 L\nMCCORMAC  M AH0 - K AO1 R - M AH0 K\nMCCORMACK  M AH0 - K AO1 R - M AH0 K\nMCCORMICK  M AH0 - K AO1 R - M IH0 K\nMCCORMICK'S  M AH0 - K AO1 R - M IH0 K S\nMCCORQUODALE  M AH0 - K AO1 R - K AH0 - D EY2 L\nMCCORRY  M AH0 - K AO1 - R IY0\nMCCORT  M AH0 - K AO1 R T\nMCCORVEY  M AH0 - K AO1 R - V IY0\nMCCOSH  M AH0 - K AA1 SH\nMCCOSKEY  M AH0 - K AA1 S - K IY0\nMCCOTTER  M AH0 - K AA1 - T ER0\nMCCOUN  M AH0 - K AW1 N\nMCCOURT  M AH0 - K AO1 R T\nMCCOWAN  M AH0 - K AW1 - AH0 N\nMCCOWEN  M AH0 - K AW1 - AH0 N\nMCCOWIN  M AH0 - K AW1 - IH0 N\nMCCOWN  M AH0 - K AW1 N\nMCCOY  M AH0 - K OY1\nMCCOYS  M AH0 - K OY1 Z\nMCCRACKEN  M AH0 - K R AE1 - K AH0 N\nMCCRACKIN  M AH0 - K R AE1 - K AH0 N\nMCCRADY  M AH0 K - R EY1 - D IY0\nMCCRAE  M AH0 K - R EY1\nMCCRANEY  M AH0 K - R AE1 - N IY0\nMCCRANIE  M AH0 K - R EY1 - N IY0\nMCCRARY  M AH0 - K R EH1 - R IY0\nMCCRAVY  M AH0 K - R EY1 - V IY0\nMCCRAW  M AH0 K - R AO1\nMCCRAY  M AH0 K - R EY1\nMCCREA  M AH0 K - R EY1\nMCCREADIE  M AH0 K - R IY1 - D IY0\nMCCREADY  M AH0 K - R IY1 - D IY0\nMCCREARY  M AH0 - K R IH1 - R IY0\nMCCREDIE  M AH0 K - R IY1 - D IY0\nMCCREE  M AH0 - K R IY1\nMCCREEDY  M AH0 K - R IY1 - D IY0\nMCCREERY  M AH0 - K R IH1 - R IY0\nMCCREIGHT  M AH0 K - R EY1 T\nMCCRELESS  M AH0 - K R IY1 - L AH0 S\nMCCRICKARD  M AH0 - K R IH1 - K ER0 D\nMCCRIGHT  M AH0 K - R AY1 T\nMCCRILLIS  M AH0 - K R IH1 - L AH0 S\nMCCRIMMON  M AH0 - K R IH1 - M AH0 N\nMCCROCKLIN  M AH0 K - R AA1 K - L AH0 N\nMCCRONE  M AH0 - K R OW1 N\nMCCROREY  M AH0 K - R AO1 - R IY0\nMCCRORY  M AH0 K - R AO1 - R IY0\nMCCROSKEY  M AH0 - K R AA1 S - K IY0\nMCCROSSEN  M AH0 - K R AO1 - S AH0 N\nMCCRUDDEN  M AH0 - K R AH1 - D AH0 N\nMCCRUM  M AH0 - K R AH1 M\nMCCRUMB  M AH0 - K R AH1 M\nMCCRYSTAL  M AH0 K - R IH1 - S T AH0 L\nMCCUAN  M AH0 - K UW1 - AH0 N\nMCCUBBIN  M AH0 - K AH1 - B AH0 N\nMCCUBBINS  M AH0 - K AH1 - B AH0 N Z\nMCCUE  M AH0 - K Y UW1\nMCCUEN  M AH0 - K Y UW1 N\nMCCUIN  M AH0 - K UW1 - AH0 N\nMCCUISTION  M AH0 - K W IH1 - SH AH0 N\nMCCUISTON  M AH0 - K W IH1 - S T AH0 N\nMCCULLA  M AH0 - K AH1 - L AH0\nMCCULLAGH  M AH0 - K AH1 - L AH0 G\nMCCULLAH  M AH0 - K AH1 - L AH0\nMCCULLAR  M AH0 - K AH1 - L ER0\nMCCULLARS  M AH0 - K AH1 - L ER0 Z\nMCCULLEN  M AH0 - K AH1 - L AH0 N\nMCCULLER  M AH0 - K AH1 - L ER0\nMCCULLERS  M AH0 - K AH1 - L ER0 Z\nMCCULLEY  M AH0 - K AH1 - L IY0\nMCCULLOCH  M AH0 - K AH1 - L AH0 K\nMCCULLOH  M AH0 - K AH1 - L AH0\nMCCULLOUGH  M AH0 - K AH1 - L AH0\nMCCULLUM  M AH0 - K AH1 - L AH0 M\nMCCULLY  M AH0 - K AH1 - L IY0\nMCCUMBER  M AH0 - K AH1 M - B ER0\nMCCUNE  M AH0 - K Y UW1 N\nMCCUR  M AH0 - K ER1\nMCCURDY  M AH0 - K ER1 - D IY0\nMCCURLEY  M AH0 - K ER1 - L IY0\nMCCURRY  M AH0 - K ER1 - IY0\nMCCUSKER  M AH0 - K AH1 - S K ER0\nMCCUTCHAN  M AH0 - K AH1 - CH AH0 N\nMCCUTCHEN  M AH0 - K AH1 - CH AH0 N\nMCCUTCHEON  M AH0 - K AH1 - CH AH0 N\nMCCUVEY  M AH0 - K AH1 - V IY0\nMCDADE  M AH0 K - D EY1 D\nMCDADE'S  M AH0 K - D EY1 D Z\nMCDAID  M AH0 K - D EY1 D\nMCDANEL  M AH0 K - D AE1 - N AH0 L\nMCDANIEL  M AH0 K - D AE1 - N Y AH0 L\nMCDANIELS  M AH0 K - D AE1 - N Y AH0 L Z\nMCDANNEL  M AH0 K - D AE1 - N AH0 L\nMCDARIS  M AH0 K - D AE1 - R AH0 S\nMCDAVID  M AH0 K - D EY1 - V AH0 D\nMCDAVITT  M AH0 K - D AE1 - V AH0 T\nMCDEAL  M AH0 K - D IY1 L\nMCDEARMON  M AH0 K - D ER1 - M AH0 N\nMCDERMID  M AH0 K - D ER1 - M AH0 D\nMCDERMITT  M AH0 K - D ER1 - M AH0 T\nMCDERMOT  M AH0 K - D ER1 - M AH0 T\nMCDERMOTT  M AH0 K - D ER1 - M AH0 T\nMCDERMOTT'S  M AH0 K - D ER1 - M AH0 T S\nMCDEVITT  M AH0 K - D EH1 - V AH0 T\nMCDIARMID  M AH0 K - D EH1 R - M AH0 D\nMCDILL  M AH0 K - D IH1 L\nMCDIVETT  M AH0 - D IH1 - V AH0 T\nMCDIVITT  M AH0 K - D IH1 - V AH0 T\nMCDOLE  M AH0 K - D OW1 L\nMCDONAGH  M AH0 K - D AH1 - N AH0\nMCDONALD  M AH0 K - D AA1 - N AH0 L D\nMCDONALD'S  M AH0 K - D AA1 - N AH0 L D Z\nMCDONALDS  M AH0 K - D AA1 - N AH0 L D Z\nMCDONELL  M AH0 K - D AA1 - N AH0 L\nMCDONNEL  M AH0 K - D AA1 - N AH0 L\nMCDONNEL'S  M AH0 K - D AA1 - N AH0 L Z\nMCDONNELL  M AH0 K - D AA1 - N AH0 L\nMCDONOUGH  M AH0 K - D AH1 - N AH0\nMCDORMAN  M AH0 K - D AO1 R - M AH0 N\nMCDOUGAL  M AH0 K - D UW1 - G AH0 L\nMCDOUGAL'S  M AH0 K - D UW1 - G AH0 L Z\nMCDOUGALD  M AH0 K - D UW1 - G AH0 L D\nMCDOUGALL  M AH0 K - D UW1 - G AH0 L\nMCDOUGALS  M AH0 K - D UW1 - G AH0 L Z\nMCDOUGALS'  M AH0 K - D UW1 - G AH0 L Z\nMCDOUGLE  M AH0 K - D UW1 - G AH0 L\nMCDOW  M AH0 K - D AW1\nMCDOWALL  M AH0 K - D AW1 - AH0 L\nMCDOWELL  M AH0 K - D AW1 - AH0 L\nMCDUFF  M AH0 K - D AH1 F\nMCDUFFEE  M AH0 K - D AH1 - F IY0\nMCDUFFIE  M AH0 K - D AH1 - F IY0\nMCDUFFY  M AH0 K - D AH1 - F IY0\nMCDUGAL  M AH0 K - D UW1 - G AH0 L\nMCDURMAN  M AH0 K - D ER1 - M AH0 N\nMCEACHERN  M AH0 - K IY1 - CH ER0 N\nMCEACHIN  M AH0 - K IY1 - CH AH0 N\nMCELDERRY  M AE1 - K AH0 L - D IH2 - R IY0\nMCELDOWNEY  M AE1 - K AH0 L - D AW2 - N IY0\nMCELFRESH  M AE1 - K AH0 L - F R EH2 SH\nMCELHANEY  M AE1 - K AH0 L - HH EY2 - N IY0\nMCELHANNON  M AE1 - K AH0 L - HH AE2 - N AH0 N\nMCELHANY  M AE1 - K AH0 L - HH EY2 - N IY0\nMCELHENEY  M AE1 - K AH0 L - HH EY2 - N IY0\nMCELHENY  M AE1 - K AH0 L - HH IY2 - N IY0\nMCELHINEY  M AE1 - K AH0 L - HH IH2 - N IY0\nMCELHINNEY  M AE1 - K AH0 L - HH IH2 - N IY0\nMCELHINNY  M AE1 - K AH0 L - HH IH2 - N IY0\nMCELHONE  M AE1 - K AH0 L - HH OW2 N\nMCELLIGOTT  M AH0 - K EH1 - L AH0 - G AH0 T\nMCELMURRAY  M AE1 - K AH0 L - M ER2 - IY0\nMCELMURRY  M AE1 - K AH0 L - M ER2 - R IY0\nMCELRATH  M AE1 - K AH0 L - R AE2 TH\nMCELRATH(2)  M AH0 - K EH1 L - R AE2 TH\nMCELRAVY  M AE1 - K AH0 L - R EY2 - V IY0\nMCELREATH  M AE1 - K AH0 L - R AE2 TH\nMCELROY  M AE1 - K AH0 L - R OY2\nMCELVAIN  M AE1 - K AH0 L - V EY2 N\nMCELVAINE  M AE1 - K AH0 L - V EY2 N\nMCELVEEN  M AE1 - K AH0 L - V IY2 N\nMCELWAIN  M AE1 - K AH0 L - W EY2 N\nMCELWAINE  M AE1 - K AH0 L - W EY2 N\nMCELWEE  M AE1 - K AH0 L - W IY0\nMCELYEA  M AE1 - K AH0 L - Y EY2\nMCENANEY  M AE1 - K AH0 - N EY2 - N IY0\nMCENANY  M AE1 - K AH0 - N EY2 - N IY0\nMCENDREE  M AH0 - K EH1 N - D R IY2\nMCENERNEY  M AE1 - K AH0 - N EH0 R - N IY0\nMCENERY  M AH0 - K EH1 - N ER0 - IY0\nMCENROE  M AE1 - K AH0 N - R OW0\nMCENTEE  M AE1 - K AH0 N - T IY0\nMCENTEE(2)  M AH0 - K EH1 N - T IY0\nMCENTIRE  M AE1 - K AH0 N - T AY0 R\nMCENTYRE  M AE1 - K AH0 N - T AY0 R\nMCERLEAN  M AH0 - K ER1 - L IY0 N\nMCEUEN  M AH0 - K Y UW1 - AH0 N\nMCEVER  M AH0 K - EH1 - V ER0\nMCEVERS  M AH0 K - EH1 - V ER0 Z\nMCEVILLY  M AH0 - K EH1 - V AH0 - L IY0\nMCEVOY  M AE1 - K AH0 - V OY2\nMCEWAN  M AE1 - K UW0 - AE0 N\nMCEWEN  M AH0 - K Y UW1 - AH0 N\nMCFADDEN  M AH0 K - F AE1 - D AH0 N\nMCFADDEN'S  M AH0 K - F AE1 - D AH0 N Z\nMCFADDIN  M AH0 K - F AE1 - D AH0 N\nMCFADIN  M AH0 K - F AE1 - D AH0 N\nMCFADYEN  M AH0 K - F AE1 - D IY0 - AH0 N\nMCFALL  M AH0 K - F AO1 L\nMCFALLAND  M AH0 K - F AE1 - L AH0 N D\nMCFALLS  M AH0 K - F AO1 L Z\nMCFANN  M AH0 K - F AE1 N\nMCFARLAN  M AH0 K - F AA1 R - L AH0 N\nMCFARLAND  M AH0 K - F AA1 R - L AH0 N D\nMCFARLANE  M AH0 K - F AA1 R - L AH0 N\nMCFARLANE'S  M AH0 K - F AA1 R - L AH0 N Z\nMCFARLIN  M AH0 K - F AA1 R - L AH0 N\nMCFARLING  M AH0 K - F AA1 R - L IH0 NG\nMCFARREN  M AH0 K - F EH1 - R AH0 N\nMCFATE  M AH0 K - F EY1 T\nMCFATRIDGE  M AH0 K - F AE1 - T R IH0 JH\nMCFATTER  M AH0 K - F AE1 - T ER0\nMCFAUL  M AH0 K - F AO1 L\nMCFAYDEN  M AH0 K - F EY1 - D AH0 N\nMCFEE  M AH0 K - F IY1\nMCFEELY  M AH0 K - F IY1 - L IY0\nMCFEETERS  M AH0 K - F IY1 - T ER0 Z\nMCFERRAN  M AH0 K - F EH1 - R AH0 N\nMCFERREN  M AH0 K - F EH1 - R AH0 N\nMCFERRIN  M AH0 K - F EH1 - R AH0 N\nMCFERRON  M AH0 K - F EH1 - R AH0 N\nMCFETRIDGE  M AH0 K - F EH1 - T R IH0 JH\nMCFLY  M AH0 K - F L AY1\nMCFLY'S  M AH0 K - F L AY1 Z\nMCFUN  M AH0 K - F AH1 N\nMCFUN'S  M AH0 K - F AH1 N Z\nMCGAFFEY  M AH0 - G AE1 - F IY0\nMCGAGH  M AH0 - G AO1\nMCGAHA  M AH0 - G AA1 - HH AH0\nMCGAHAN  M AH0 - G AE1 - HH AH0 N\nMCGAHEE  M AH0 - G AE1 - HH IY0\nMCGAHEY  M AH0 - G AE1 - HH IY0\nMCGALLEY  M AH0 - G AE1 - L IY0\nMCGALLEY'S  M AH0 - G AE1 - L IY0 Z\nMCGALLIARD  M AH0 - G AE1 - L IY0 - AA0 R D\nMCGALLIARD(2)  M AH0 - G AE1 L - Y AA0 R D\nMCGANN  M AH0 - G AE1 N\nMCGANNON  M AH0 - G AE1 - N AH0 N\nMCGARITY  M AH0 - G AE1 - R AH0 - T IY0\nMCGARR  M AH0 - G AA1 R\nMCGARRAH  M AH0 - G AE1 - R AH0\nMCGARRIGLE  M AH0 - G AE1 - R AH0 - G AH0 L\nMCGARRITY  M AH0 - G AE1 - R AH0 - T IY0\nMCGARRY  M AH0 - G EH1 - R IY0\nMCGARVEY  M AH0 - G AA0 R - V EY1\nMCGARY  M AH0 - G EH1 - R IY0\nMCGATH  M AH0 - G AE1 TH\nMCGAUGH  M AH0 - G AO1\nMCGAUGHEY  M AH0 - G AO1 - IY0\nMCGAUGHY  M AH0 - G AO1 - IY0\nMCGAULEY  M AH0 - G AO1 - L IY0\nMCGAVIN  M AH0 - G AE1 - V AH0 N\nMCGAVOCK  M AH0 - G AE1 - V AH0 K\nMCGAW  M AH0 - G AO1\nMCGEACHY  M AH0 - G IY1 - CH IY0\nMCGEARY  M AH0 - G IH1 - R IY0\nMCGEE  M AH0 - G IY1\nMCGEE'S  M AH0 - G IY1 Z\nMCGEEAN  M AH0 - G IY1 - AH0 N\nMCGEEAN'S  M AH0 - G IY1 - AH0 N Z\nMCGEEHAN  M AH0 - G IY1 - HH AH0 N\nMCGEEVER  M AH0 - G IY1 - V ER0\nMCGEGAN  M AH0 - G EH1 - G AH0 N\nMCGEORGE  M AH0 K - JH AO1 R JH\nMCGEOUGH  M AH0 - G AH1 F\nMCGETTIGAN  M AH0 - G EH1 - T AH0 - G AH0 N\nMCGHEE  M AH0 - G IY1\nMCGHIE  M AH0 - G IY1\nMCGIBBON  M AH0 - G IH1 - B AH0 N\nMCGILL  M AH0 - G IH1 L\nMCGILLEN  M AH0 - G IH1 - L AH0 N\nMCGILLICUDDY  M AH0 - G IH1 - L AH0 - K AH0 - D IY0\nMCGILLIS  M AH0 - G IH1 - L AH0 S\nMCGILLIVRAY  M AH0 - G IH1 - L AH0 - V R EY0\nMCGILTON  M AH0 - G IH1 L - T AH0 N\nMCGILVERY  M AH0 - G IH1 L - V ER0 - IY0\nMCGILVRAY  M AH0 - G IH1 L - V R IY0\nMCGINESS  M AH0 - G IH1 - N AH0 S\nMCGINLEY  M AH0 - G IH1 N - L IY0\nMCGINN  M AH0 - G IH1 N\nMCGINNES  M AH0 - G IH1 N Z\nMCGINNESS  M AH0 - G IH1 - N AH0 S\nMCGINNIS  M AH0 - G IH1 - N AH0 S\nMCGINNISS  M AH0 - G IH1 - N AH0 S\nMCGINNITY  M AH0 - G IH1 - N AH0 - T IY0\nMCGINTY  M AH0 - G IH1 N - T IY0\nMCGIRR  M AH0 - G ER1\nMCGIRT  M AH0 - G ER1 T\nMCGIVERN  M AH0 - G IH1 - V ER0 N\nMCGIVNEY  M AH0 - G IH1 V - N IY0\nMCGLADE  M AH0 G - L EY1 D\nMCGLAMERY  M AH0 - G L AE1 - M ER0 - IY0\nMCGLASHAN  M AH0 G - L AE1 - SH AH0 N\nMCGLASSON  M AH0 G - L AE1 - S AH0 N\nMCGLAUGHLIN  M AH0 G - L AO1 - F L AH0 N\nMCGLAUN  M AH0 G - L AO1 N\nMCGLINCHEY  M AH0 - G L IH1 N - CH IY0\nMCGLINN  M AH0 G - L IH1 N\nMCGLOCKLIN  M AH0 G - L AA1 K - L AH0 N\nMCGLOIN  M AH0 - G L OY1 N\nMCGLONE  M AH0 - G L OW1 N\nMCGLORY  M AH0 G - L AO1 - R IY0\nMCGLOTHEN  M AH0 - G L AA1 - TH AH0 N\nMCGLOTHIN  M AH0 - G L AA1 - TH AH0 N\nMCGLOTHLIN  M AH0 G - L AA1 TH - L AH0 N\nMCGLYNN  M AH0 G - L IH1 N\nMCGOEY  M AH0 - G AA1 - IY0\nMCGOFF  M AH0 - G AO1 F\nMCGOLDRICK  M AH0 - G OW1 L - D R AH0 K\nMCGOLS  M AH0 K - G AA1 L Z\nMCGONAGLE  M AH0 - G AA1 - N AH0 - G AH0 L\nMCGONIGAL  M AH0 - G AA1 - N AH0 - G AH0 L\nMCGONIGLE  M AH0 - G AA1 - N AH0 - G AH0 L\nMCGOUGH  M AH0 - G AW1\nMCGOUGH(2)  M AH0 - G AH1 F\nMCGOURTY  M AH0 - G UH1 R - T IY0\nMCGOVERN  M AH0 - G AH1 - V ER0 N\nMCGOVERN'S  M AH0 - G AH1 - V ER0 N Z\nMCGOWAN  M AH0 - G AW1 - AH0 N\nMCGOWAN'S  M AH0 - G AW1 - AH0 N Z\nMCGOWEN  M AH0 - G AW1 - AH0 N\nMCGOWIN  M AH0 K - G AW1 - AH0 N\nMCGOWN  M AH0 - G AW1 N\nMCGRADY  M AH0 - G R EY1 - D IY0\nMCGRAIL  M AH0 - G R EY1 L\nMCGRAIN  M AH0 - G R EY1 N\nMCGRANAHAN  M AH0 - G R AE1 - N AH0 - HH AE2 N\nMCGRANE  M AH0 - G R EY1 N\nMCGRATH  M AH0 - G R AE1 TH\nMCGRAW  M AH0 - G R AO1\nMCGRAY  M AH0 - G R EY1\nMCGREAL  M AH0 - G R IY1 L\nMCGREEVEY  M AH0 - G R IY1 - V IY0\nMCGREEVY  M AH0 - G R IY1 - V IY0\nMCGREGOR  M AH0 - G R EH1 - G ER0\nMCGREGORY  M AH0 - G R EH1 - G ER0 - IY0\nMCGREVIN  M AH0 - G R EH1 - V AH0 N\nMCGREW  M AH0 - G R UW1\nMCGRIFF  M AH0 - G R IH1 F\nMCGROARTY  M AH0 - G R AO1 R - T IY0\nMCGROGAN  M AH0 - G R OW1 - G AH0 N\nMCGRORY  M AH0 - G R AO1 - R IY0\nMCGRUDER  M AH0 - G R UW1 - D ER0\nMCGUANE  M AH0 - G W EY1 N\nMCGUCKIN  M AH0 - G AH1 - K AH0 N\nMCGUE  M AH0 - G Y UW1\nMCGUFFEE  M AH0 - G AH1 - F IY0\nMCGUFFEY  M AH0 - G AH1 - F IY0\nMCGUFFIE  M AH0 - G AH1 - F IY0\nMCGUFFIN  M AH0 - G AH1 - F AH0 N\nMCGUIGAN  M AH0 - G IH1 - G AH0 N\nMCGUINESS  M AH0 - G IH1 - N AH0 S\nMCGUINN  M AH0 - G IH1 N\nMCGUINNESS  M AH0 - G IH1 - N AH0 S\nMCGUIRE  M AH0 G - W AY1 R\nMCGUIRK  M AH0 - G ER1 K\nMCGUIRT  M AH0 - G ER1 T\nMCGURK  M AH0 - G ER1 K\nMCGURN  M AH0 - G ER1 N\nMCGUYER  M AH0 - G AY1 - ER0\nMCGWIRE  M AH0 G - W AY1 R\nMCHAFFIE  M AH0 - K AE1 - F IY0\nMCHALE  M AH0 - K EY1 L\nMCHAM  M AH0 - K AE1 M\nMCHAN  M AH0 - K AE1 N\nMCHANEY  M AH0 - K AE1 - N IY0\nMCHARGUE  M AH0 - K AA1 R G\nMCHARGUE(2)  M AH0 - K AA1 R - G Y UW0\nMCHATTON  M AH0 - K AE1 - T AH0 N\nMCHENRY  M AH0 - K EH1 N - R IY0\nMCHONE  M AH0 - K OW1 N\nMCHUGH  M AH0 - K Y UW1\nMCILHENNY  M AE1 - K IH2 L - HH EH2 - N IY0\nMCILRATH  M AE1 - K AH0 L - R AE2 TH\nMCILRATH(2)  M AH0 - K IH1 L - R AE2 TH\nMCILROY  M AE1 - K AH0 L - R OY2\nMCILROY(2)  M AH0 - K IH1 L - R OY2\nMCILVAIN  M AE1 - K IH2 L - V EY2 N\nMCILVAIN(2)  M AH0 - K IH1 L - V EY2 N\nMCILVAINE  M AE1 - K IH2 L - V EY2 N\nMCILVAINE(2)  M AH0 - K IH1 L - V EY2 N\nMCILVEEN  M AE1 - K IH2 L - V IY2 N\nMCILVEEN(2)  M AH0 - K IH1 L - V IY2 N\nMCILWAIN  M AE1 - K IH2 L - W EY2 N\nMCILWAIN(2)  M AH0 - K IH1 L - W EY2 N\nMCINERNEY  M AE1 - K AH0 - N EH0 R - N IY0\nMCINERNY  M AH0 - K IH1 - N ER0 - N IY0\nMCINGVALE  M AE1 - K IH0 NG - V EY2 L\nMCINNES  M AH0 - G IH1 - N AH0 S\nMCINNIS  M AH0 - G IH1 - N AH0 S\nMCINROY  M AE1 - K IH2 N - R OY2\nMCINTEE  M AE1 - K IH2 N - T IY2\nMCINTIRE  M AE1 - K IH2 N - T AY2 R\nMCINTOSH  M AE1 - K AH0 N - T AO2 SH\nMCINTURF  M AE1 - K IH2 N - T ER2 F\nMCINTURFF  M AE1 - K IH2 N - T ER2 F\nMCINTYRE  M AE1 - K IH2 N - T AY2 R\nMCINVALE  M AE1 - K IH2 N - V EY2 L\nMCISAAC  M AH0 - K AY1 - Z AH0 K\nMCIVER  M AH0 - K IH1 - V ER0\nMCIVOR  M AH0 - K IH1 - V ER0\nMCJUNKIN  M AH0 K - JH AH1 NG - K AH0 N\nMCJUNKINS  M AH0 K - JH AH1 NG - K AH0 N Z\nMCKAIG  M AH0 - K EY1 G\nMCKAIN  M AH0 - K EY1 N\nMCKAMEY  M AH0 - K AE1 - M IY0\nMCKANE  M AH0 - K EY1 N\nMCKANNA  M AH0 - K AE1 - N AH0\nMCKAY  M AH0 - K EY1\nMCKEAG  M AH0 - K IY1 G\nMCKEAGUE  M AH0 - K IY1 G\nMCKEAN  M AH0 - K IY1 N\nMCKEAND  M AH0 - K IY1 N D\nMCKECHNIE  M AH0 - K EH1 K - N IY0\nMCKEE  M AH0 - K IY1\nMCKEE'S  M AH0 - K IY1 Z\nMCKEEGAN  M AH0 - K IY1 - G AH0 N\nMCKEEHAN  M AH0 - K IY1 - HH AH0 N\nMCKEEL  M AH0 - K IY1 L\nMCKEEMAN  M AH0 - K IY1 - M AH0 N\nMCKEEN  M AH0 - K IY1 N\nMCKEESPORT  M AH0 - K IY1 S - P AO2 R T\nMCKEEVER  M AH0 - K IY1 - V ER0\nMCKEITHAN  M AH0 - K IY1 - TH AH0 N\nMCKEITHEN  M AH0 - K IY1 - TH AH0 N\nMCKELL  M AH0 - K EH1 L\nMCKELLAN  M AH0 - K EH1 - L AH0 N\nMCKELLAR  M AH0 - K EH1 - L ER0\nMCKELLER  M AH0 - K EH1 - L ER0\nMCKELLIPS  M AH0 - K EH1 - L IH0 P S\nMCKELVEY  M AE1 - K AH0 L - V EY2\nMCKELVIE  M AE1 - K AH0 L - V IY1\nMCKELVY  M AE1 - K AH0 L - V IY2\nMCKEMIE  M AH0 - K EH1 - M IY0\nMCKENDREE  M AH0 - K EH1 N - D R IY0\nMCKENDRICK  M AH0 - K EH1 N - D R IH0 K\nMCKENDRY  M AH0 - K EH1 N - D R IY0\nMCKENNA  M AH0 - K EH1 - N AH0\nMCKENNEY  M AH0 - K EH1 - N IY0\nMCKENNON  M AH0 - K EH1 - N AH0 N\nMCKENNY  M AH0 - K EH1 - N IY0\nMCKENRICK  M AH0 - K EH1 N - R IH0 K\nMCKENZIE  M AH0 - K EH1 N - Z IY0\nMCKEON  M AH0 - K IY1 - AH0 N\nMCKEONE  M AH0 - K IY1 - AH0 N\nMCKEOUGH  M AH0 - K IY1 - OW0\nMCKEOWN  M AH0 - K Y UW1 - AH0 N\nMCKERCHER  M AH0 - K ER1 - CH ER0\nMCKERN  M AH0 - K ER1 N\nMCKERNAN  M AH0 - K ER1 - N AH0 N\nMCKESSON  M AH0 - K EH1 - S AH0 N\nMCKESSON'S  M AH0 - K EH1 - S AH0 N Z\nMCKETHAN  M AH0 - K EH1 - TH AH0 N\nMCKEVITT  M AH0 - K EH1 - V AH0 T\nMCKEY  M AH0 - K IY1\nMCKIBBEN  M AH0 - K IH1 - B AH0 N\nMCKIBBIN  M AH0 - K IH1 - B AH0 N\nMCKIBBON  M AH0 - K IH1 - B AH0 N\nMCKIDS  M AH0 - K IH1 D Z\nMCKIE  M AH0 - K IY1\nMCKIERNAN  M AH0 - K IH1 R - N AH0 N\nMCKILLIP  M AH0 - K IH1 - L AH0 P\nMCKILLOP  M AH0 - K IH1 - L AH0 P\nMCKIM  M AH0 - K IH1 M\nMCKIMMEY  M AH0 - K IH1 - M IY0\nMCKIMMY  M AH0 - K IH1 - M IY0\nMCKINESS  M AH0 - K IH1 - N AH0 S\nMCKINLAY  M AH0 - K IH1 N - L IY0\nMCKINLEY  M AH0 - K IH1 N - L IY0\nMCKINNEY  M AH0 - K IH1 - N IY0\nMCKINNEY'S  M AH0 - K IH1 - N IY0 Z\nMCKINNIE  M AH0 - K IH1 - N IY0\nMCKINNIS  M AH0 - K IH1 - N AH0 S\nMCKINNON  M AH0 - K IH1 - N AH0 N\nMCKINNY  M AH0 - K IH1 - N IY0\nMCKINNY'S  M AH0 - K IH1 - N IY0 Z\nMCKINSEY  M AH0 - K IH1 N - Z IY0\nMCKINSTRY  M AH0 - K IH1 N - S T R IY0\nMCKINZIE  M AH0 - K IH1 N - Z IY0\nMCKISSACK  M AH0 - K IH1 - S AH0 K\nMCKISSIC  M AH0 - K IH1 - S IH0 K\nMCKISSICK  M AH0 - K IH1 - S IH0 K\nMCKITRICK  M AH0 - K IH1 - T R IH0 K\nMCKITTRICK  M AH0 - K IH1 - T R IH0 K\nMCKLATCHY  M AH0 K - L AE1 - CH IY0\nMCKNEELY  M AH0 K - N IY1 - L IY0\nMCKNEW  M AH0 K - N UW1\nMCKNIGHT  M AH0 K - N AY1 T\nMCKONE  M AH0 - K OW1 N\nMCKOWEN  M AH0 - K AW1 - AH0 N\nMCKOWN  M AH0 - K OW1 N\nMCKOY  M AH0 - K OY1\nMCKREE  M AH0 - K R IY0\nMCKUNE  M AH0 - K Y UW1 N\nMCLACHLAN  M AH0 K - L AA1 K - L AH0 N\nMCLAFFERTY  M AH0 K - L AE1 - F ER0 - T IY0\nMCLAIN  M AH0 - K L EY1 N\nMCLAMB  M AH0 - K L AE1 M\nMCLANAHAN  M AH0 K - L AE1 - N AH0 - HH AE0 N\nMCLANE  M AH0 - K L EY1 N\nMCLAREN  M AH0 - K L EH1 - R AH0 N\nMCLARNEY  M AH0 K - L AA1 R - N IY0\nMCLARTY  M AH0 K - L AA1 R - T IY0\nMCLARTY'S  M AH0 K - L AA1 R - T IY0 Z\nMCLAUCHLIN  M AH0 K - L AO1 - K L AH0 N\nMCLAUGHLIN  M AH0 G - L AA1 K - L AH0 N\nMCLAURIN  M AH0 K - L AO1 - R AH0 N\nMCLAURY  M AH0 K - L AO1 - R IY0\nMCLAWHORN  M AH0 K - L AE1 - W ER0 N\nMCLAWHORN(2)  M AH0 K - L AW1 - HH AO2 R N\nMCLAY  M AH0 K - L EY1\nMCLEAN  M AH0 K - L IY1 N\nMCLEAN'S  M AH0 K - L IY1 N Z\nMCLEAN'S(2)  M AH0 K - L EY1 N Z\nMCLEAN(2)  M AH0 - K L EY1 N\nMCLEAR  M AH0 - K L IH1 R\nMCLEARY  M AH0 K - L IH1 - R IY0\nMCLEES  M AH0 - K L IY1 Z\nMCLEISH  M AH0 K - L IY1 SH\nMCLELAND  M AH0 - K L EH1 - L AH0 N D\nMCLELLAN  M AH0 - K L EH1 - L AH0 N\nMCLELLAND  M AH0 - K L EH1 - L AH0 N D\nMCLENDON  M AH0 K - L EH1 N - D AH0 N\nMCLENNAN  M AH0 K - L EH1 - N AH0 N\nMCLEOD  M AH0 K - L AW1 D\nMCLEROY  M AH0 K - L IY1 - R OY0\nMCLERRAN  M AH0 - K L EH1 - R AH0 N\nMCLESTER  M AH0 K - L EH1 - S T ER0\nMCLIN  M AH0 K - L IH1 N\nMCLINDEN  M AH0 K - L IH1 N - D AH0 N\nMCLINN  M AH0 K - L IH1 N\nMCLISH  M AH0 K - L IH1 SH\nMCLOUD  M AH0 K - L AW1 D\nMCLOUTH  M AH0 - K L AW1 TH\nMCLUCAS  M AH0 - K L UW1 - K AH0 Z\nMCLUCKIE  M AH0 K - L AH1 - K IY0\nMCLURE  M AH0 - K L UW1 R\nMCMACKIN  M AH0 K - M AE1 - K AH0 N\nMCMAHAN  M AH0 K - M EY1 - HH AH0 N\nMCMAHEN  M AH0 K - M EY1 - HH AH0 N\nMCMAHILL  M AH0 K - M EY1 - HH IH2 L\nMCMAHON  M AH0 K - M EY1 - AH0 N\nMCMAHON(2)  M AH0 K - M AE1 N\nMCMAINS  M AH0 K - M EY1 N Z\nMCMAKEN  M AH0 K - M EY1 - K AH0 N\nMCMAKIN  M AH0 K - M AE1 - K AH0 N\nMCMANAMA  M AH0 K - M AE1 - N AH0 - M AH0\nMCMANAMAN  M AH0 K - M AE1 - N AH0 - M AH0 N\nMCMANAMON  M AH0 K - M AE1 - N AH0 - M AH0 N\nMCMANAWAY  M AH0 K - M AE1 N - AH0 - W EY0\nMCMANIGAL  M AH0 K - M AE1 - N AH0 - G AH0 L\nMCMANIS  M AH0 K - M AE1 - N AH0 S\nMCMANN  M AH0 K - M AE1 N\nMCMANNIS  M AH0 K - M AE1 - N AH0 S\nMCMANUS  M AH0 K - M AE1 - N AH0 S\nMCMARTIN  M AH0 K - M AA1 R - T AH0 N\nMCMASTER  M AH0 K - M AE1 - S T ER0\nMCMASTERS  M AH0 K - M AE1 - S T ER0 Z\nMCMATH  M AH0 K - M AE1 TH\nMCMEANS  M AH0 K - M IY1 N Z\nMCMEEKIN  M AH0 K - M IY1 - K AH0 N\nMCMEEN  M AH0 K - M IY1 N\nMCMENAMIN  M AH0 K - M EH1 - N AH0 - M AH0 N\nMCMENAMY  M AH0 K - M EH1 - N AH0 - M IY0\nMCMENEMY  M AH0 K - M EH1 - N AH0 - M IY0\nMCMENNAMIN  M AH0 K - M EH1 - N AH0 - M AH0 N\nMCMICHAEL  M AH0 K - M AY1 - K AH0 L\nMCMICHEN  M AH0 K - M IH1 - CH AH0 N\nMCMICKLE  M AH0 K - M IH1 - K AH0 L\nMCMILLAN  M AH0 K - M IH1 - L AH0 N\nMCMILLEN  M AH0 K - M IH1 - L AH0 N\nMCMILLER  M AH0 K - M IH1 - L ER0\nMCMILLIAN  M AH0 K - M IH1 - L Y AH0 N\nMCMILLIAN(2)  M AH0 K - M IH1 - L AH0 N\nMCMILLIN  M AH0 K - M IH1 - L IH0 N\nMCMILLION  M AH0 K - M IH1 - L Y AH0 N\nMCMILLON  M AH0 K - M IH1 - L AH0 N\nMCMINN  M AH0 K - M IH1 N\nMCMONAGLE  M AH0 K - M AA1 - N AH0 - G AH0 L\nMCMONIGLE  M AH0 K - M AA1 - N AH0 - G AH0 L\nMCMORAN  M AH0 K - M AO1 - R AH0 N\nMCMORRAN  M AH0 K - M AO1 - R AH0 N\nMCMORRIS  M AH0 K - M AO1 - R AH0 S\nMCMORROW  M AH0 K - M AO1 - R OW0\nMCMUFFIN  M AH0 K - M AH1 - F AH0 N\nMCMULLAN  M AH0 K - M AH1 - L AH0 N\nMCMULLEN  M AH0 - K AH1 - L AH0 N\nMCMULLIN  M AH0 K - M AH1 - L AH0 N\nMCMUNN  M AH0 K - M AH1 N\nMCMURDO  M AH0 K - M ER1 - D OW0\nMCMURPHY  M AH0 K - M ER1 - F IY0\nMCMURRAY  M AH0 K - M ER1 - EY0\nMCMURREY  M AH0 K - M ER1 - IY0\nMCMURRY  M AH0 K - M ER1 - IY0\nMCMURTREY  M AH0 K - M ER1 - T R IY0\nMCMURTRIE  M AH0 K - M ER1 - T ER0 - IY0\nMCMURTRY  M AH0 K - M ER1 - T R IY0\nMCNAB  M AH0 K - N AE1 B\nMCNABB  M AH0 K - N AE1 B\nMCNAIR  M AH0 K - N EH1 R\nMCNAIRY  M AH0 K - N EH1 - R IY0\nMCNALL  M AH0 K - N AO1 L\nMCNALLEY  M AH0 K - N AE1 - L IY0\nMCNALLY  M AH0 K - N AE1 - L IY0\nMCNAMARA  M AE1 K - N AH0 - M EH2 - R AH0\nMCNAMARA'S  M AE1 K - N AH0 - M EH2 - R AH0 Z\nMCNAMEE  M AE1 K - N AH0 - M IY0\nMCNAMER  M AH0 K - N EY1 - M ER0\nMCNANEY  M AH0 K - N AE1 - N IY0\nMCNARY  M AH0 K - N EH1 - R IY0\nMCNATT  M AH0 K - N AE1 T\nMCNAUGHT  M AH0 K - N AO1 T\nMCNAUGHTON  M AH0 K - N AO1 - T AH0 N\nMCNAY  M AH0 K - N EY1\nMCNEAL  M AH0 K - N IY1 L\nMCNEALY  M AH0 K - N IY1 - L IY0\nMCNEAR  M AH0 K - N IH1 R\nMCNEARY  M AH0 K - N IH1 - R IY0\nMCNEASE  M AH0 K - N IY1 Z\nMCNEE  M AH0 K - N IY1\nMCNEECE  M AH0 K - N IY1 S\nMCNEEL  M AH0 K - N IY1 L\nMCNEELEY  M AH0 K - N IY1 - L IY0\nMCNEELY  M AH0 K - N IY1 - L IY0\nMCNEER  M AH0 K - N IH1 R\nMCNEES  M AH0 K - N IY1 Z\nMCNEESE  M AH0 K - N IY1 S\nMCNEFF  M AH0 K - N EH1 F\nMCNEICE  M AH0 K - N IY1 S\nMCNEIL  M AH0 K - N IY1 L\nMCNEILL  M AH0 K - N IY1 L\nMCNEILLY  M AH0 K - N IY1 - L IY0\nMCNEISH  M AH0 K - N IY1 SH\nMCNELIS  M AH0 K - N EH1 - L AH0 S\nMCNELLIS  M AH0 K - N EH1 - L AH0 S\nMCNELLY  M AH0 K - N EH1 - L IY0\nMCNEMAR  M AE1 K - N AH0 - M AA2 R\nMCNERNEY  M AH0 K - N ER1 - N IY0\nMCNETT  M AH0 K - N EH1 T\nMCNEVIN  M AH0 K - N EH1 - V AH0 N\nMCNEW  M AH0 K - N UW1\nMCNICHOL  M AH0 K - N IH1 - K AH0 L\nMCNICHOLAS  M AH0 K - N IH1 - L AH0 - L AH0 S\nMCNICHOLS  M AH0 K - N IH1 - K AH0 L Z\nMCNICKLE  M AH0 K - N IH1 - K AH0 L\nMCNICOL  M AH0 K - N IH1 - K AO0 L\nMCNIEL  M AH0 K - N IY1 L\nMCNIFF  M AH0 K - N IH1 F\nMCNINCH  M AH0 K - N IH1 N CH\nMCNISH  M AH0 K - N IH1 SH\nMCNITT  M AH0 K - N IH1 T\nMCNORTON  M AH0 K - N AO1 R - T AH0 N\nMCNUGGETS  M AH0 K - N AH1 - G AH0 T S\nMCNULTY  M AH0 K - N AH1 L - T IY0\nMCNUTT  M AH0 K - N AH1 T\nMCOMBER  M AH0 - K AA1 M - B ER0\nMCORP  EH1 M - K AO2 R P\nMCORP'S  EH1 M - K AO2 R P S\nMCPAPER  M AH0 K - P EY1 - P ER0\nMCPARLAND  M AH0 K - P AA1 R - L AH0 N D\nMCPARTLAND  M AH0 K - P AA1 R T - L AH0 N D\nMCPARTLIN  M AH0 K - P AA1 R T - L AH0 N\nMCPEAK  M AH0 K - P IY1 K\nMCPEAKE  M AH0 K - P IY1 K\nMCPECK  M AH0 K - P EH1 K\nMCPEEK  M AH0 K - P IY1 K\nMCPETERS  M AH0 K - P IY1 - T ER0 Z\nMCPHAIL  M AH0 K - F EY1 L\nMCPHATTER  M AH0 K - F AE1 - T ER0\nMCPHAUL  M AH0 K - F AO1 L\nMCPHEARSON  M AH0 K - F ER1 - S AH0 N\nMCPHEARSON(2)  M AH0 K - F IH1 R - S AH0 N\nMCPHEE  M AH0 K - F IY1\nMCPHEETERS  M AH0 K - F IY1 - T ER0 Z\nMCPHERON  M AH0 K - F EH1 - R AH0 N\nMCPHERSON  M AH0 K - F ER1 - S AH0 N\nMCPHIE  M AH0 K - F IY1\nMCPHILLIPS  M AH0 K - F IH1 - L AH0 P S\nMCPIKE  M AH0 K - P AY1 K\nMCQUADE  M AH0 - K W EY1 D\nMCQUAID  M AH0 - K W EY1 D\nMCQUAIDE  M AH0 - K W EY1 D\nMCQUAIG  M AH0 K - W EY1 G\nMCQUAIN  M AH0 - K W EY1 N\nMCQUARRIE  M AH0 K - W AO1 - R IY0\nMCQUARY  M IY1 - K W EH0 - R IY0\nMCQUAY  M AH0 - K EY1\nMCQUEARY  M AH0 - K W IH1 - R IY0\nMCQUEEN  M AH0 - K W IY1 N\nMCQUEENEY  M AH0 K - W IY1 - N IY0\nMCQUERRY  M AH0 - K W EH1 - R IY0\nMCQUETHY  M AH0 - K W EH1 - TH IY0\nMCQUETHY'S  M AH0 - K W EH1 - TH IY0 Z\nMCQUIGG  M AH0 K - W IH1 G\nMCQUILKIN  M AH0 - K W IH1 L - K AH0 N\nMCQUILLAN  M AH0 - K W IH1 - L AH0 N\nMCQUILLEN  M AH0 - K W IH1 - L AH0 N\nMCQUILLIN  M AH0 - K W IH1 - L AH0 N\nMCQUINN  M AH0 - K W IH1 N\nMCQUIRE  M AH0 K - W AY1 R\nMCQUISTON  M AH0 - K W IH1 - S T AH0 N\nMCQUITTY  M AH0 - K W IH1 - T IY0\nMCQUOWN  M AH0 K - W AW1 N\nMCRAE  M AH0 K - R EY1\nMCRAINEY  M AH0 K - R AE1 - N IY0\nMCRANEY  M AH0 K - R AE1 - N IY0\nMCRAY  M AH0 K - R EY1\nMCREE  M AH0 - K R IY1\nMCREYNOLDS  M AH0 K - R EY1 - N AH0 L D Z\nMCRIGHT  M AH0 K - R AY1 T\nMCROBERTS  M AH0 K - R AA1 - B ER0 T S\nMCRORIE  M AH0 K - R AO1 - R IY0\nMCROY  M AH0 K - R OY1\nMCSHAN  M AH0 K - SH AE1 N\nMCSHANE  M AH0 K - SH EY1 N\nMCSHEA  M AH0 K - SH EY1\nMCSHERRY  M AH0 K - SH EH1 - R IY0\nMCSLEEP  M AH0 K - S L IY1 P\nMCSORLEY  M AH0 K - S AO1 R - L IY0\nMCSPADDEN  M AH0 K - S P AE1 - D AH0 N\nMCSTAY  M AH0 K - S T EY1\nMCSWAIN  M AH0 K - S W EY1 N\nMCSWEEN  M AH0 K - S W IY1 N\nMCSWEENEY  M AH0 K - S W IY1 - N IY0\nMCTAGGART  M AH0 K - T AE1 - G ER0 T\nMCTAGUE  M AH0 K - T EY1 G\nMCTAVISH  M AH0 K - T EY1 - V IH0 SH\nMCTAVISH(2)  M AH0 K - T AE1 - V IH0 SH\nMCTEER  M AH0 K - T IH1 R\nMCTERNAN  M AH0 K - T ER1 - N AH0 N\nMCTIER  M AH0 K - T AY1 - ER0\nMCTIER(2)  M AH0 K - T IH1 R\nMCTIERNAN  M AH0 K - T AY1 R - N AH0 N\nMCTIERNAN(2)  M AH0 K - T IH1 R - N AH0 N\nMCTIGHE  M AH0 K - T AY1 G\nMCTIGUE  M AH0 K - T IY1 G\nMCVAY  M AH0 K - V EY1\nMCVEA  M AH0 K - V IY1\nMCVEIGH  M AH0 K - V EY1\nMCVEIGH'S  M AH0 K - V EY1 Z\nMCVEY  M AH0 K - V EY1\nMCVICAR  M AH0 K - V IH1 - K ER0\nMCVICKER  M AH0 K - V IH1 - K ER0\nMCVOY  M AH0 K - V OY1\nMCWAIN  M AH0 - K W EY1 N\nMCWATERS  M AH0 K - W AO1 - T ER0 Z\nMCWATTERS  M AH0 K - W AO1 - T ER0 Z\nMCWEENEY  M AH0 K - W IY1 - N IY0\nMCWETHY  M AH0 - K W EH1 - TH IY0\nMCWHERTER  M AH0 K - W ER1 - T ER0\nMCWHINNEY  M AH0 - K W IH1 - N IY0\nMCWHIRT  M AH0 K - W ER1 T\nMCWHIRTER  M AH0 K - W ER1 - T ER0\nMCWHITE  M AH0 K - W AY1 T\nMCWHORTER  M AH0 K - W AO1 R - T ER0\nMCWILLIAM  M AH0 - K W IH1 - L Y AH0 M\nMCWILLIAMS  M AH0 - K W IH1 - L Y AH0 M Z\nMCWRIGHT  M AH0 K - R AY1 T\nMCZEAL  M AH0 K - Z IY1 L\nME  M IY1\nMEA  M IY1\nMEACHAM  M IY1 - CH AH0 M\nMEACHUM  M IY1 - CH AH0 M\nMEAD  M IY1 D\nMEAD'S  M IY1 D Z\nMEADE  M IY1 D\nMEADER  M IY1 - D ER0\nMEADERS  M IY1 - D ER0 Z\nMEADOR  M IY1 - D ER0\nMEADORS  M IY1 - D ER0 Z\nMEADOW  M EH1 - D OW2\nMEADOWLAND  M EH1 - D OW0 - L AE1 N D\nMEADOWLANDS  M EH1 - D OW0 - L AE1 N D Z\nMEADOWLARK  M EH1 - D OW0 - L AA2 R K\nMEADOWS  M EH1 - D OW2 Z\nMEADS  M IY1 D Z\nMEAGER  M IY1 - G ER0\nMEAGHER  M AA1 R\nMEAKER  M IY1 - K ER0\nMEAKIN  M IY1 - K IH0 N\nMEAL  M IY1 L\nMEAL'S  M IY1 L Z\nMEALER  M IY1 - L ER0\nMEALEY  M IY1 - L IY0\nMEALING  M IY1 - L IH0 NG\nMEALOR  M IY1 - L ER0\nMEALS  M IY1 L Z\nMEALTIME  M IY1 L - T AY2 M\nMEALY  M IY1 - L IY0\nMEALYNOSE  M IY1 - L IY0 - N OW2 Z\nMEALYNOSED  M IY1 - L IY0 - N OW2 Z D\nMEAN  M IY1 N\nMEANDER  M IY0 - AE1 N - D ER0\nMEANDERED  M IY0 - AE1 N - D ER0 D\nMEANDERING  M IY0 - AE1 N - D ER0 - IH0 NG\nMEANDERS  M IY0 - AE1 N - D ER0 Z\nMEANER  M IY1 - N ER0\nMEANEST  M IY1 - N AH0 S T\nMEANEY  M IY1 - N IY0\nMEANING  M IY1 - N IH0 NG\nMEANINGFUL  M IY1 - N IH0 NG - F AH0 L\nMEANINGFULLY  M IY1 - N IH0 NG - F AH0 - L IY0\nMEANINGLESS  M IY1 - N IH0 NG - L AH0 S\nMEANINGS  M IY1 - N IH0 NG Z\nMEANNESS  M IY1 N - N AH0 S\nMEANOR  M IY1 - N ER0\nMEANS  M IY1 N Z\nMEANS'  M IY1 N Z\nMEANT  M EH1 N T\nMEANTIME  M IY1 N - T AY2 M\nMEANWHILE  M IY1 N - W AY2 L\nMEANY  M IY1 - N IY0\nMEAR  M IH1 R\nMEARA  M IY1 - R AH0\nMEARES  M IY1 R Z\nMEARNS  M ER1 N Z\nMEARS  M IH1 R Z\nMEASE  M IY1 Z\nMEASEL  M IY1 - Z AH0 L\nMEASLES  M IY1 - Z AH0 L Z\nMEASLY  M IY1 Z - L IY0\nMEASURABLE  M EH1 - ZH ER0 - AH0 - B AH0 L\nMEASURABLY  M EH1 - ZH ER0 - AH0 - B L IY0\nMEASURE  M EH1 - ZH ER0\nMEASURE'S  M EH1 - ZH ER0 Z\nMEASURED  M EH1 - ZH ER0 D\nMEASUREMENT  M EH1 - ZH ER0 - M AH0 N T\nMEASUREMENTS  M EH1 - ZH ER0 - M AH0 N T S\nMEASURES  M EH1 - ZH ER0 Z\nMEASUREX  M EH1 - Z ER0 - AH0 K S\nMEASURING  M EH1 - ZH ER0 - IH0 NG\nMEAT  M IY1 T\nMEAT-EATING  M IY1 - T IY2 - T IH0 NG\nMEATBALL  M IY1 T - B AO2 L\nMEATBALLS  M IY1 T - B AO2 L Z\nMEATH  M IY1 TH\nMEATIER  M IY1 - T IY0 - ER0\nMEATLESS  M IY1 T - L AH0 S\nMEATLOAF  M IY1 T - L OW0 F\nMEATPACKER  M IY1 T - P AE2 - K ER0\nMEATPACKERS  M IY1 T - P AE2 - K ER0 Z\nMEATPACKING  M IY1 T - P AE2 - K IH0 NG\nMEATS  M IY1 T S\nMEATY  M IY1 - T IY0\nMEAUX  M OW1\nMEAVE  M IY1 V\nMEBANE  M EH1 - B AH0 N\nMECA  M EH1 - K AH0\nMECCA  M EH1 - K AH0\nMECCA'S  M EH1 - K AH0 Z\nMECH  M EH1 K\nMECHAM  M EH1 - CH AH0 M\nMECHAM'S  M EH1 - CH AH0 M Z\nMECHANIC  M AH0 - K AE1 - N IH0 K\nMECHANIC(2)  M IH0 - K AE1 - N IH0 K\nMECHANICAL  M AH0 - K AE1 - N IH0 - K AH0 L\nMECHANICALLY  M AH0 - K AE1 - N IH0 K - L IY0\nMECHANICS  M AH0 - K AE1 - N IH0 K S\nMECHANICS'  M AH0 - K AE1 - N IH0 K S\nMECHANICSBURG  M AH0 - K AE1 - N IH0 K S - B ER0 G\nMECHANISM  M EH1 - K AH0 - N IH2 - Z AH0 M\nMECHANISMS  M EH1 - K AH0 - N IH2 - Z AH0 M Z\nMECHANISTIC  M EH2 - K AH0 - N IH1 - S T IH0 K\nMECHANIZATION  M EH2 - K AH0 - N AH0 - Z EY1 - SH AH0 N\nMECHANIZE  M EH1 - K AH0 - N AY2 Z\nMECHANIZED  M EH1 - K AH0 - N AY2 Z D\nMECHE  M EH1 CH\nMECHEM  M EH1 - K IH0 M\nMECHEM(2)  M EH1 - CH AH0 M\nMECHLER  M EH1 - K L ER0\nMECHLING  M EH1 - K L IH0 NG\nMECIAR  M EH1 - S IY0 - AA0 R\nMECK  M EH1 K\nMECKEL  M EH1 - K AH0 L\nMECKES  M EH1 K S\nMECKLENBURG  M EH1 K - L AH0 N - B ER0 G\nMECKLER  M EH1 - K L ER0\nMECKLEY  M EH1 K - L IY0\nMECKSTROTH  M EH1 K - S T R AO0 TH\nMECUM  M EH1 - K AH0 M\nMED  M EH1 D\nMEDA  M EY1 - D AH0\nMEDAGLIA  M EH0 - D AA1 G - L IY0 - AH0\nMEDAL  M EH1 - D AH0 L\nMEDALIST  M EH1 - D AH0 - L IH0 S T\nMEDALIST'S  M EH1 - D AH0 - L IH0 S T S\nMEDALISTS  M EH1 - D AH0 - L IH0 S T S\nMEDALISTS(2)  M EH1 - D AH0 - L IH0 S S\nMEDALISTS(3)  M EH1 - D AH0 - L IH0 S\nMEDALLION  M AH0 - D AE1 - L Y AH0 N\nMEDALLIONS  M AH0 - D AE1 - L Y AH0 N Z\nMEDALS  M EH1 - D AH0 L Z\nMEDAPHIS  M EH1 - D AH0 - F IH2 S\nMEDAR  M EH1 - D ER0\nMEDAREX  M EH1 - D ER0 - EH2 K S\nMEDARIS  M EY0 - D AA1 - R IH0 S\nMEDCALF  M EH1 D - K AE0 L F\nMEDCHEM  M EH1 D - K EH2 M\nMEDCHEM'S  M EH1 D - K EH2 M Z\nMEDCO  M EH1 D - K OW0\nMEDCO'S  M EH1 D - K OW0 Z\nMEDDAUGH  M EH1 - D AO0\nMEDDERS  M EH1 - D ER0 Z\nMEDDLE  M EH1 - D AH0 L\nMEDDLESOME  M EH1 - D AH0 L - S AH0 M\nMEDDLING  M EH1 - D AH0 L - IH0 NG\nMEDDLING(2)  M EH1 D - L IH0 NG\nMEDEA  M AH0 - D IY1 - AH0\nMEDEARIS  M EH1 - D ER0 - IH0 S\nMEDEIROS  M EY0 - D IH1 - R OW0 Z\nMEDEL  M EH1 - D AH0 L\nMEDELLIN  M IH0 D - EH1 - L IH0 N\nMEDEMA  M EH0 - D EH1 - M AH0\nMEDENDORP  M EH1 - D EH0 N - D AO0 R P\nMEDER  M IY1 - D ER0\nMEDEROS  M EH1 - D ER0 - OW0 Z\nMEDES  M IY1 D Z\nMEDEVA  M EH2 - D EH1 - V AH0\nMEDEX  M EH1 - D AH0 K S\nMEDFACT  M EH1 D - F AE1 K T\nMEDFACTS  M EH1 D - F AE1 K T S\nMEDFIRST  M EH1 D - F ER1 S T\nMEDFLY  M EH1 D F - L IY0\nMEDFORD  M EH1 D - F ER0 D\nMEDGAR  M EH1 D - G ER0\nMEDGAR'S  M EH1 D - G ER0 Z\nMEDI  M EH1 - D IY0\nMEDIA  M IY1 - D IY0 - AH0\nMEDIA'S  M IY1 - D IY0 - AH0 Z\nMEDIAL  M IY1 - D IY0 - AH0 L\nMEDIAL(2)  M IY1 - D Y AH0 L\nMEDIAMARK  M IY1 - D IY0 - AH0 - M AA1 R K\nMEDIAN  M IY1 - D IY0 - AH0 N\nMEDIANEWS  M IY1 - D IY0 - AH0 - Y UW2 Z\nMEDIASET  M IY1 - D IY0 - AH0 - S EH2 T\nMEDIATE  M IY1 - D IY0 - EY2 T\nMEDIATED  M IY1 - D IY0 - EY2 - T IH0 D\nMEDIATING  M IY1 - D IY0 - EY2 - T IH0 NG\nMEDIATION  M IY2 - D IY0 - EY1 - SH AH0 N\nMEDIATOR  M IY1 - D IY0 - EY2 - T ER0\nMEDIATORS  M IY1 - D IY0 - EY2 - T ER0 Z\nMEDIC  M EH1 - D IH0 K\nMEDIC'S  M EH1 - D IH0 K S\nMEDICAID  M EH1 - D AH0 - K EY2 D\nMEDICAL  M EH1 - D AH0 - K AH0 L\nMEDICAL'S  M EH1 - D AH0 - K AH0 L Z\nMEDICAL'S(2)  M EH1 - D IH0 - K AH0 L Z\nMEDICAL(2)  M EH1 - D IH0 - K AH0 L\nMEDICALLY  M EH1 - D AH0 K - L IY0\nMEDICALLY(2)  M EH1 - D IH0 - K AH0 - L IY0\nMEDICARE  M EH1 - D AH0 - K EH2 R\nMEDICARE'S  M EH1 - D AH0 - K EH2 R Z\nMEDICATE  M EH1 - D IH0 - K EY2 T\nMEDICATED  M EH1 - D IH0 - K EY2 - T IH0 D\nMEDICATION  M EH2 - D AH0 - K EY1 - SH AH0 N\nMEDICATIONS  M EH2 - D AH0 - K EY1 - SH AH0 N Z\nMEDICI  M EH0 - D IY1 - S IY0\nMEDICINAL  M AH0 - D IH1 - S AH0 - N AH0 L\nMEDICINALLY  M AH0 - D IH1 - S AH0 - N AH0 - L IY0\nMEDICINE  M EH1 - D AH0 - S AH0 N\nMEDICINE'S  M EH1 - D AH0 - S AH0 N Z\nMEDICINES  M EH1 - D AH0 - S AH0 N Z\nMEDICO  M EH1 - D IH0 - K OW2\nMEDICS  M EH1 - D IH0 K S\nMEDICUS  M EH1 - D IH0 - K AH0 S\nMEDIEVAL  M IH0 - D IY1 - V AH0 L\nMEDIEVAL(2)  M IY0 - D IY1 - V AH0 L\nMEDIEVAL(3)  M IH0 D - Y IY1 - V AH0 L\nMEDIGAP  M EH1 - D IH0 - G AE0 P\nMEDIMMUNE  M EH1 - D IH0 - M Y UW2 N\nMEDIN  M EY0 - D IY1 N\nMEDINA  M AH0 - D AY1 - N AH0\nMEDINA(2)  M AH0 - D IY1 - N AH0\nMEDINGER  M IY1 - D IH0 - NG ER0\nMEDIO  M IY1 - D IY0 - OW0\nMEDIO(2)  M EH1 - D IY0 - OW0\nMEDIOBANCA  M IH0 - D IY2 - OW0 - B AE1 NG - K AH0\nMEDIOCRE  M IY2 - D IY0 - OW1 - K ER0\nMEDIOCRITY  M IY2 - D IY0 - AA1 - K R AH0 - T IY0\nMEDIPLEX  M EH1 - D IH0 - P L EH2 K S\nMEDIQ  M EH0 - D IY1 K\nMEDISCARE  M EH1 - D IH0 - S K EY2 R\nMEDISGROUP  M EH1 - D IH0 S - G R UW2 P\nMEDISGROUPS  M EH1 - D IH0 S - G R UW2 P S\nMEDITATE  M EH1 - D AH0 - T EY2 T\nMEDITATING  M EH1 - D AH0 - T EY2 - T IH0 NG\nMEDITATION  M EH2 - D AH0 - T EY1 - SH AH0 N\nMEDITATIONS  M EH2 - D IH0 - T EY1 - SH AH0 N Z\nMEDITATIVE  M EH1 - D AH0 - T EY2 - T IH0 V\nMEDITERRANEAN  M EH2 - D AH0 - T ER0 - EY1 - N IY0 - AH0 N\nMEDITRUST  M EH1 - D IH0 - T R AH2 S T\nMEDITZ  M EH1 - D IH0 T S\nMEDIUM  M IY1 - D IY0 - AH0 M\nMEDIUMS  M IY1 - D IY0 - AH0 M Z\nMEDIVAC  M EH1 - D IH0 - V AE2 K\nMEDLAND  M EH1 D - L AH0 N D\nMEDLAR  M EH1 D - L ER0\nMEDLEN  M EH1 - D AH0 - L AH0 N\nMEDLER  M EH1 D - L ER0\nMEDLEY  M EH1 D - L IY0\nMEDLIN  M EH1 D - L IH0 N\nMEDLOCK  M EH1 D - L AH0 K\nMEDNICK  M EH1 D - N IH0 K\nMEDOFF  M EH1 - D AO0 F\nMEDORA  M EY0 - D AO1 - R AH0\nMEDRANO  M EH0 D - R AA1 - N OW0\nMEDSERV  M EH1 D - S ER0 V\nMEDSKER  M EH1 D - S K ER0\nMEDSTONE  M EH1 D - S T OW2 N\nMEDTRONIC  M EH0 D - T R AA1 - N IH0 K\nMEDULLA  M IH0 - D AH1 - L AH0\nMEDULLA(2)  M IH0 - D UW1 - L AH0\nMEDUSA  M AH0 - D UW1 - S AH0\nMEDUSAS  M AH0 - D UW1 - S AH0 Z\nMEDVED  M EH1 D - V AH0 D\nMEDVEDEV  M EH1 D - V AH0 - D EH2 V\nMEDWIN  M EH1 D - W IH0 N\nMEE  M IY1\nMEECE  M IY1 S\nMEECH  M IY1 CH\nMEECHAM  M IY1 - CH AH0 M\nMEEDER  M IY1 - D ER0\nMEEGAN  M IY1 - G AH0 N\nMEEHAN  M IY1 - AH0 N\nMEEHANS  M IY1 - HH AE2 N Z\nMEEHANS(2)  M IY1 - AH0 N Z\nMEEHL  M IY1 L\nMEEK  M IY1 K\nMEEKER  M IY1 - K ER0\nMEEKINS  M IY1 - K IH0 N Z\nMEEKLY  M IY1 K - L IY0\nMEEKS  M IY1 K S\nMEELER  M IY1 - L ER0\nMEENAGHAN  M IY1 - N AH0 - HH AE0 N\nMEENAN  M IY1 - N AH0 N\nMEENTS  M IY1 N T S\nMEER  M IY1 - ER0\nMEERS  M IY1 - ER0 Z\nMEES  M IY1 Z\nMEESE  M IY1 S\nMEESE'S  M IY1 - S IH0 Z\nMEESTER  M IY1 - S T ER0\nMEET  M IY1 T\nMEETING  M IY1 - T IH0 NG\nMEETING'S  M IY1 - T IH0 NG Z\nMEETINGS  M IY1 - T IH0 NG Z\nMEETS  M IY1 T S\nMEETZE  M IY1 T Z\nMEEUWSEN  M IY2 - UW1 - S AH0 N\nMEFFERD  M EH1 - F ER0 D\nMEFFERT  M EH1 - F ER0 T\nMEFFORD  M EH1 - F ER0 D\nMEG  M EH1 G\nMEGA  M EH1 - G AH0\nMEGABIT  M EH1 - G AH0 - B IH0 T\nMEGABUCK  M EH1 - G AH0 - B AH2 K\nMEGABUCKS  M EH1 - G AH0 - B AH2 K S\nMEGABYTE  M EH1 - G AH0 - B AY2 T\nMEGABYTES  M EH1 - G AH0 - B AY2 T S\nMEGACARRIER  M EH1 - G AH0 - K AE2 - R Y ER0\nMEGACARRIERS  M EH2 - G AH0 - K AE1 - R Y ER0 Z\nMEGACE  M IY1 - G AH0 S\nMEGADEAL  M EH1 - G AH0 - D IY2 L\nMEGADEALS  M EH1 - G AH0 - D IY2 L Z\nMEGADEATH  M EH1 - G AH0 - D EH2 TH\nMEGAFOOD  M EH1 - G AH0 - F UW2 D\nMEGAFOODS  M EH1 - G AH0 - F UW2 D Z\nMEGAHERTZ  M EH1 - G AH0 - HH ER0 T S\nMEGAHOUSE  M EH1 - G AH0 - HH AW2 S\nMEGAHOUSES  M EH1 - G AH0 - HH AW2 - S IH0 Z\nMEGALOMANIA  M EH2 - G AH0 - L OW0 - M EY1 - N IY0 - AH0\nMEGALOMANIAC  M EH2 - G AH0 - L OW0 - M EY1 - N IY0 - AE2 K\nMEGALOPOLIS  M EH2 - G AH0 - L AA1 - P AH0 - L AH0 S\nMEGAMERGER  M EH1 - G AH0 - M ER2 - JH ER0\nMEGAMERGERS  M EH1 - G AH0 - M ER2 - JH ER0 Z\nMEGAN  M EY1 - G AH0 N\nMEGAN'S  M EY1 - G AH0 N Z\nMEGAPHONE  M EH1 - G AH0 - F OW2 N\nMEGAPHONES  M EH1 - G AH0 - F OW2 N Z\nMEGAPLEX  M EH1 - G AH0 - P L EH1 K S\nMEGAQUEST  M EH1 - G AH0 - K W EH2 S T\nMEGAQUEST'S  M EH1 - G AH0 - K W EH2 S T S\nMEGARRY  M EH1 - G ER0 - IY0\nMEGASTORE  M EH1 - G AH0 - S T AO2 R\nMEGASTORES  M EH1 - G AH0 - S T AO2 R Z\nMEGATONS  M EH1 - G AH0 - T AH2 N Z\nMEGAWATT  M EH1 - G AH0 - W AA2 T\nMEGAWATTS  M EH1 - G AH0 - W AA2 T S\nMEGEE  M EH1 - JH IY0\nMEGER  M EH1 - G ER0\nMEGGINSON  M EH1 - G IH0 N - S AH0 N\nMEGGISON  M EH1 - G IH0 - S AH0 N\nMEGGS  M EH1 G Z\nMEGHAN  M EH1 - G AH0 N\nMEGHDAR  M EH1 G - D AA0 R\nMEGILL  M EH1 - JH AH0 L\nMEGNA  M EH1 G - N AH0\nMEGNER  M EH1 G - N ER0\nMEHAFFEY  M EH1 - HH AH0 - F IY0\nMEHAFFEY(2)  M AH0 - HH AE1 - F IY0\nMEHALKOFF  M EH0 - HH AE1 L - K AO0 F\nMEHALL  M AH0 - HH AO1 L\nMEHAN  M EY1 - HH AE0 N\nMEHANOVITCH  M AH0 - HH AE1 - N AH0 - V AH0 CH\nMEHARG  M EY2 - HH AA1 R G\nMEHARRY  M EY2 - HH AE1 - R IY0\nMEHDI  M EH1 - D IY0\nMEHETABEL  M IH0 - HH EH1 - T AH0 - B IH0 L\nMEHITABEL  M EH1 - HH IH0 - T AH0 - B AH0 L\nMEHITABEL(2)  M EH0 - HH IH1 - T AH0 - B AH0 L\nMEHITABELLE  M EH1 - HH IH0 - T AH0 - B AH0 L\nMEHL  M EH1 L\nMEHLBERG  M EH1 L - B ER0 G\nMEHLE  M EH1 - HH AH0 L\nMEHLENBACHER  M EH1 - L IH0 N - B AA0 - K ER0\nMEHLER  M EH1 - L ER0\nMEHLHAFF  M EH1 L - HH AH0 F\nMEHLHOFF  M EH1 L - HH AO0 F\nMEHLHORN  M EH1 L - HH ER0 N\nMEHLING  M EH1 - L IH0 NG\nMEHLMAN  M EH1 L - M AH0 N\nMEHMET  M EH1 - M AH0 T\nMEHNER  M EH1 - N ER0\nMEHNERT  M EH1 - N ER0 T\nMEHR  M EH1 R\nMEHRABIAN  M EH2 - R EY1 - B IY0 - AH0 N\nMEHRABIAN(2)  M ER2 - EY1 - B IY0 - AH0 N\nMEHRAN  M EH1 - R AH0 N\nMEHRENS  M EH1 - R AH0 N Z\nMEHRER  M EH1 - R ER0\nMEHRING  M EH1 - R IH0 NG\nMEHRINGER  M EH1 - R IH0 - NG ER0\nMEHRTENS  M EH1 R - T AH0 N Z\nMEHTA  M EH1 - T AH0\nMEHTA'S  M EH1 - T AH0 Z\nMEHUL  M EH1 - HH UH2 L\nMEI  M AY1\nMEI(2)  M EY1\nMEI-LING  M EY1 - L IH1 NG\nMEIDINGER  M AY1 - D IH0 - NG ER0\nMEIDL  M IY1 - D AH0 L\nMEIER  M AY1 - ER0\nMEIER'S  M AY1 - ER0 Z\nMEIERFELD  M AY1 R - F EH2 L D\nMEIGHAN  M EY1 G - HH AH0 N\nMEIGHER  M EY1 - G ER0\nMEIJI  M EY1 - JH IY2\nMEIKLE  M IY1 - K AH0 L\nMEIN  M IY1 N\nMEINCKE  M AY1 NG - K IY0\nMEINDERS  M AY1 N - D ER0 Z\nMEINDL  M AY1 N - D AH0 L\nMEINE  M IY1 N\nMEINECKE  M AY1 - N IH0 - K IY0\nMEINEKE  M AY1 - N IH0 - K IY0\nMEINEN  M AY1 - N AH0 N\nMEINER  M AY1 - N ER0\nMEINERS  M AY1 - N ER0 Z\nMEINERT  M AY1 - N ER0 T\nMEINERTZHAGEN  M AY1 - N ER0 T S - HH AA2 - G AH0 N\nMEINHARDT  M AY1 N - HH AA2 R T\nMEINHART  M AY1 N - HH AA2 R T\nMEINHOLD  M AY1 N - HH OW2 L D\nMEININGER  M AY1 - N IH0 - NG ER0\nMEINKE  M IY1 NG K\nMEINTS  M AY1 N T S\nMEINZER  M AY1 N - Z ER0\nMEIOSIS  M AY0 - OW1 - S AH0 S\nMEIR  M IH1 R\nMEIRING  M AY1 - R IH0 NG\nMEIS  M IY1 Z\nMEISCH  M AY1 SH\nMEISE  M IY1 S\nMEISEL  M AY1 - S AH0 L\nMEISELS  M AY1 - S AH0 L Z\nMEISENHEIMER  M AY1 - S IH0 N - HH AY0 - M ER0\nMEISER  M AY1 - S ER0\nMEISHAN  M AY1 - SH AH0 N\nMEISINGER  M AY1 - S IH0 N - JH ER0\nMEISLER  M AY1 - S AH0 - L ER0\nMEISLER(2)  M AY1 S - L ER0\nMEISNER  M AY1 S - N ER0\nMEISS  M AY1 S\nMEISSNER  M AY1 S - N ER0\nMEISTER  M AY1 - S T ER0\nMEISTERS  M AY1 - S T ER0 Z\nMEITZ  M IY1 T S\nMEITZLER  M AY1 T - S L ER0\nMEIXNER  M IY1 K S - N ER0\nMEIYUH  M EY0 - Y UW1\nMEJIA  M EY1 - Y IY0 - AH0\nMEJIAS  M EY0 - Y IY1 - AH0 Z\nMEKEEL  M EH1 - K IY0 L\nMEKONG  M EY1 - K AA0 NG\nMEL  M EH1 L\nMEL'S  M EH1 L Z\nMELADOR  M EH1 - L AH0 - D AO0 R\nMELAMED  M EH1 - L AH0 - M EH0 D\nMELAMINE  M EH1 - L AH0 - M IY2 N\nMELANBY  M EH1 - L AH0 N - B IY0\nMELANCHOLIC  M EH2 - L AH0 N - K AA1 - L IH0 K\nMELANCHOLY  M EH1 - L AH0 N - K AA2 - L IY0\nMELANCON  M IH0 - L AE1 N - K AH0 N\nMELAND  M EH1 - L AH0 N D\nMELANDER  M EH1 - L AH0 N - D ER0\nMELANESIAN  M EH2 - L AH0 - N IY1 - ZH AH0 N\nMELANESIANS  M EH2 - L AH0 - N IY1 - ZH AH0 N Z\nMELANGE  M EH1 - L AE0 NG\nMELANIE  M EH1 - L AH0 - N IY0\nMELANIN  M EH1 - L AH0 - N AH0 N\nMELANIN(2)  M EH1 - L AH0 - N IH0 N\nMELANOMA  M EH2 - L AH0 - N OW1 - M AH0\nMELANSON  M EH1 - L AH0 N - S AH0 N\nMELANTHA  M IH0 - L AE1 N - DH AH0\nMELANY  M EH1 - L AH0 - N IY0\nMELARAGNO  M EH0 - L AA0 - R AA1 G - N OW0\nMELATONIN  M EH2 - L AH0 - T OW1 - N IH0 N\nMELATONIN'S  M EH2 - L AH0 - T OW1 - N IH0 N Z\nMELBA  M EH1 L - B AH0\nMELBERG  M EH1 L - B ER0 G\nMELBOURNE  M EH1 L - B ER0 N\nMELBURN  M EH1 L - B ER0 N\nMELBY  M EH1 L - B IY0\nMELCHER  M EH1 L - CH ER0\nMELCHERT  M EH1 L - CH ER0 T\nMELCHING  M EH1 L - CH IH0 NG\nMELCHIOR  M EY0 L - CH IY1 - ER0\nMELCHIORRE  M EH0 L - K IY0 - AO1 - R EY0\nMELCHOR  M EH1 L - CH ER0\nMELD  M EH1 L D\nMELDED  M EH1 L - D AH0 D\nMELDED(2)  M EH1 L - D IH0 D\nMELDER  M EH1 L - D ER0\nMELDING  M EH1 L - D IH0 NG\nMELDON  M EH1 L - D AH0 N\nMELDONS  M EH1 L - D AH0 N Z\nMELDRUM  M EH1 L - D R AH0 M\nMELE  M IY1 L\nMELEAR  M EH1 - L ER0\nMELEE  M EY1 - L EY2\nMELEIS  M AH0 - L EY1 - AH0 S\nMELENDEZ  M AH0 - L EH1 N - D EH0 Z\nMELENDREZ  M EY0 - L EY1 N - D R EH0 Z\nMELENDY  M IH0 - L EH1 N - D IY0\nMELERO  M EY0 - L EH1 - R OW0\nMELESKI  M IH0 - L EH1 S - K IY0\nMELESSA  M EH0 - L EH1 - S AH0\nMELFI  M EH1 L - F IY0\nMELGAARD  M EH1 L - G AA2 R D\nMELGAR  M EY0 L - G AA1 R\nMELGOZA  M EH0 L - G OW1 - Z AH0\nMELHEM  M EH1 - L AH0 M\nMELHORN  M EH1 L - HH ER0 N\nMELI  M EH1 - L IY0\nMELIA  M EH1 - L IY0 - AH0\nMELICAN  M EH1 - L IH0 - K AH0 N\nMELICENT  M EH1 - L IH0 - S AH0 N T\nMELICHAR  M EH1 - L IH0 - K ER0\nMELICK  M EH1 - L IH0 K\nMELIKIAN  M IH0 - L IH1 - K IY0 - AH0 N\nMELILLO  M EH0 - L IH1 - L OW0\nMELIN  M EH1 - L IH0 N\nMELINA  M EH0 - L IY1 - N AH0\nMELINDA  M AH0 - L IH1 N - D AH0\nMELINE  M EH1 - L AY0 N\nMELING  M EH1 - L IH0 NG\nMELISENT  M EH1 - L IH0 - S AH0 N T\nMELISSA  M AH0 - L IH1 - S AH0\nMELISSA'S  M AH0 - L IH1 - S AH0 Z\nMELISSE  M EH1 - L IH0 S\nMELITA  M EH0 - L IY1 - T AH0\nMELITO  M EH0 - L IY1 - T OW0\nMELITTA  M EH0 - L IY1 - T AH0\nMELIUS  M IY1 - L IY0 - IH0 S\nMELKA  M EH1 L - K AH0\nMELKAR  M EH1 L - K AA2 R\nMELKAR'S  M EH1 L - K AA2 R Z\nMELKONIAN  M EH2 L - K OW1 - N IY0 - AH0 N\nMELL  M EH1 L\nMELLA  M EH1 - L AH0\nMELLAND  M EH1 - L AH0 N D\nMELLARIL  M EH1 - L ER0 - AH0 L\nMELLE  M EH1 L\nMELLEM  M EH1 - L IH0 M\nMELLEMA  M EH0 - L EH1 - M AH0\nMELLEN  M EH1 - L AH0 N\nMELLER  M EH1 - L ER0\nMELLETT  M EH1 - L IH0 T\nMELLEY  M EH1 - L IY0\nMELLGREN  M EH1 L - G R EH0 N\nMELLI  M EH1 - L IY0\nMELLICENT  M EY0 - L IY1 - S AH0 N T\nMELLICK  M EH1 - L IH0 K\nMELLIE  M EH1 - L IY0\nMELLIN  M EH1 - L IH0 N\nMELLING  M EH1 - L IH0 NG\nMELLINGER  M EH1 - L IH0 - NG ER0\nMELLIS  M EH1 - L IH0 S\nMELLISH  M EH1 - L IH0 SH\nMELLMAN  M EH1 L - M AH0 N\nMELLO  M EH1 - L OW0\nMELLOAN  M EH0 - L OW1 N\nMELLOAN'S  M EH0 - L OW1 N Z\nMELLON  M EH1 - L AH0 N\nMELLON'S  M EH1 - L AH0 N Z\nMELLONBY  M EH1 - L AH0 N - B IY0\nMELLONS  M EH1 - L AH0 N Z\nMELLOR  M EH1 - L ER0\nMELLOTT  M EH1 - L AH0 T\nMELLOW  M EH1 - L OW0\nMELLOWED  M EH1 - L OW0 D\nMELLOWING  M EH1 - L OW0 - IH0 NG\nMELLY  M EH1 - L IY0\nMELMAN  M EH1 L - M AH0 N\nMELNICK  M EH1 L - N IH0 K\nMELNIK  M EH1 L - N IH0 K\nMELNOR  M EH1 L - N ER0\nMELNYK  M EH1 L - N IH0 K\nMELO  M EH1 - L OW0\nMELOCHE  M EH0 - L OW1 - K IY0\nMELODIC  M AH0 - L AA1 - D IH0 K\nMELODIES  M EH1 - L AH0 - D IY0 Z\nMELODIOUS  M AH0 - L OW1 - D IY0 - AH0 S\nMELODRAMA  M EH1 - L AH0 - D R AA2 - M AH0\nMELODRAMAS  M EH1 - L AH0 - D R AA2 - M AH0 Z\nMELODRAMATIC  M EH2 - L AH0 - D R AH0 - M AE1 - T IH0 K\nMELODY  M EH1 - L AH0 - D IY0\nMELON  M EH1 - L AH0 N\nMELONE  M EH0 - L OW1 - N IY0\nMELONI  M EH0 - L OW1 - N IY0\nMELONS  M EH1 - L AH0 N Z\nMELOR  M EH2 - L AO1 R\nMELOR(2)  M AH0 - L AO1 R\nMELOY  M EH1 - L OY0\nMELQUIST  M EH1 L - K W IH2 S T\nMELRIDGE  M EH1 L - R IH2 JH\nMELRIDGE'S  M EH1 L - R IH2 - JH IH0 Z\nMELROD  M EH1 L - R AA2 D\nMELROSE  M EH1 L - R OW2 Z\nMELROY  M EH1 L - R OY2\nMELSON  M EH1 L - S AH0 N\nMELT  M EH1 L T\nMELTDOWN  M EH1 L T - D AW2 N\nMELTED  M EH1 L - T AH0 D\nMELTED(2)  M EH1 L - T IH0 D\nMELTING  M EH1 L - T IH0 NG\nMELTON  M EH1 L - T AH0 N\nMELTS  M EH1 L T S\nMELTWATER  M EH1 L T - W AA2 - T ER0\nMELTWATER(2)  M EH1 L T - W AO2 - T ER0\nMELTZ  M EH1 L T S\nMELTZER  M EH1 L T - S ER0\nMELUCCI  M EH0 - L UW1 - CH IY0\nMELUGIN  M EH1 - L AH0 - G IH0 N\nMELVA  M EH1 L - V AH0\nMELVIE  M EH1 L - V IY0\nMELVILLE  M EH1 L - V IH0 L\nMELVIN  M EH1 L - V IH0 N\nMELVINA  M EH0 L - V IY1 - N AH0\nMELVINE  M EH1 L - V AY2 N\nMELVYN  M EH1 L - V IH0 N\nMELZER  M EH1 L - Z ER0\nMEMBER  M EH1 M - B ER0\nMEMBER'S  M EH1 M - B ER0 Z\nMEMBERED  M EH1 M - B ER0 D\nMEMBERS  M EH1 M - B ER0 Z\nMEMBERS'  M EH1 M - B ER0 Z\nMEMBERSHIP  M EH1 M - B ER0 - SH IH2 P\nMEMBERSHIPS  M EH1 M - B ER0 - SH IH2 P S\nMEMBRANE  M EH1 M - B R EY2 N\nMEMBRANES  M EH1 M - B R EY2 N Z\nMEMBRANOUS  M EH1 M - B R AH0 - N AH0 S\nMEMEL  M EH1 - M AH0 L\nMEMENTO  M IH0 - M EH1 N - T OW0\nMEMENTOS  M IH0 - M EH1 N - T OW0 Z\nMEMMER  M EH1 - M ER0\nMEMMOTT  M EH1 - M AH0 T\nMEMNON  M EH1 M - N AA2 N\nMEMO  M EH1 - M OW2\nMEMO'S  M EH1 - M OW0 Z\nMEMOIR  M EH1 M - W AA2 R\nMEMOIRS  M EH1 M - W AA2 R Z\nMEMOLI  M EH0 - M OW1 - L IY0\nMEMORABILIA  M EH2 - M ER0 - AH0 - B IY1 - L Y AH0\nMEMORABLE  M EH1 - M ER0 - AH0 - B AH0 L\nMEMORABLY  M EH1 - M ER0 - AH0 - B L IY0\nMEMORANDA  M EH2 - M ER0 - AE1 N - D AH0\nMEMORANDUM  M EH2 - M ER0 - AE1 N - D AH0 M\nMEMORANDUMS  M EH2 - M ER0 - AE1 N - D AH0 M Z\nMEMOREX  M EH1 - M AO0 - R EH2 K S\nMEMORIAL  M AH0 - M AO1 - R IY0 - AH0 L\nMEMORIALIZE  M AH0 - M AO1 - R IY0 - AH0 - L AY2 Z\nMEMORIALIZED  M AH0 - M AO1 - R IY0 - AH0 - L AY2 Z D\nMEMORIALS  M AH0 - M AO1 - R IY0 - AH0 L Z\nMEMORIES  M EH1 - M ER0 - IY0 Z\nMEMORIES'  M EH1 - M ER0 - IY2 Z\nMEMORIZE  M EH1 - M ER0 - AY2 Z\nMEMORIZED  M EH1 - M ER0 - AY2 Z D\nMEMORIZING  M EH1 - M ER0 - AY2 - Z IH0 NG\nMEMORY  M EH1 - M ER0 - IY0\nMEMOS  M EH1 - M OW0 Z\nMEMOTEC  M EH1 - M OW0 - T EH2 K\nMEMPHIS  M EH1 M - F AH0 S\nMEMPHIS(2)  M EH1 M - F IH0 S\nMEMPHIS(3)  M EH1 M P - F AH0 S\nMEMPHIS(4)  M EH1 M P - F IH0 S\nMEMTEC  M EH1 M - T EH2 K\nMEMTEC'S  M EH1 M - T EH2 K S\nMEN  M EH1 N\nMEN'S  M EH1 N Z\nMENA  M IY1 - N AH0\nMENACE  M EH1 - N AH0 S\nMENACE(2)  M EH1 - N IH0 S\nMENACHEM  M AH0 - N AA1 - HH AH0 M\nMENACHEM(2)  M EH1 - N AH0 - HH EH0 M\nMENACING  M EH1 - N AH0 - S IH0 NG\nMENACINGLY  M EH1 - N AH0 - S IH0 NG - L IY0\nMENAGERIE  M AH0 - N AE1 - JH ER0 - IY0\nMENAHEM  M AH0 - N AA1 - HH AH0 M\nMENAKER  M EH1 - N AH0 - K ER0\nMENAPACE  M EH0 - N AA0 - P AA1 - CH IY0\nMENARD  M IH0 - N AA1 R D\nMENASCO  M EH0 - N AA1 - S K OW0\nMENASION  M EH0 - N AE1 - S IY0 - AH0 N\nMENASION'S  M EH0 - N AE1 - S IY0 - AH0 N Z\nMENATEP  M EH1 - N AH0 - T EH2 P\nMENCER  M EH1 N - S ER0\nMENCH  M EH1 N CH\nMENCHACA  M EH0 N - K AA1 - K AH0\nMENCHER  M EH1 N - CH ER0\nMENCKEN  M EH1 NG - K AH0 N\nMENCONI  M EH0 N - K OW1 - N IY0\nMEND  M EH1 N D\nMENDACITY  M EH0 N - D AE1 - S IH0 - T IY0\nMENDAN  M EH1 N - D AH0 N\nMENDE  M EH1 N D\nMENDED  M EH1 N - D IH0 D\nMENDEL  M EH1 N - D AH0 L\nMENDEL'S  M EH1 N - D AH0 L Z\nMENDELL  M EH1 N - D EH1 L\nMENDELSOHN  M EH1 N - D AH0 L - S AH0 N\nMENDELSON  M EH1 N - D AH0 L - S AH0 N\nMENDELSSOHN  M EH1 N - D AH0 L - S AH0 N\nMENDENHALL  M EH1 N - D AH0 N - HH AO2 L\nMENDES  M EY1 N - D EH0 S\nMENDEZ  M EH0 N - D EH1 Z\nMENDEZ(2)  M EH1 N - D EH0 Z\nMENDICINO  M EH0 N - D IY0 - CH IY1 - N OW0\nMENDIETA  M EH0 N - D IY1 - T AH0\nMENDILLO  M EH2 N - D IH1 - L OW0\nMENDING  M EH1 N - D IH0 NG\nMENDIOLA  M EH2 N - D IY0 - OW1 - L AH0\nMENDIVIL  M EY0 N - D IY0 - V IY1 L\nMENDLOWITZ  M EH1 N D - L AH0 - W IH0 T S\nMENDOCINO  M EH2 N - D AH0 - S IY1 - N OW0\nMENDOLA  M EH0 N - D OW1 - L AH0\nMENDOLIA  M EH0 N - D OW1 - L IY0 - AH0\nMENDONCA  M EH0 N D - OW1 N - K AH0\nMENDONSA  M EH2 N - D AA1 N - S AH0\nMENDOSA  M EH0 N - D OW1 - S AH0\nMENDOTA  M EH0 N - D OW1 - T AH0\nMENDOTA(2)  M EH0 N - D AA1 - T AH0\nMENDOZA  M EH0 N - D OW1 - Z AH0\nMENDYK  M EH1 N - D IH0 K\nMENEAR  M IH0 - N IH1 R\nMENEELY  M IH0 - N IY1 - L IY0\nMENEES  M EH1 - N IY1 Z\nMENEFEE  M EH1 - N IH0 - F IY0\nMENEM  M EH1 - N AH0 M\nMENEM'S  M EH1 - N AH0 M Z\nMENENDEZ  M EH0 - N EH1 N - D EH0 Z\nMENESES  M EY0 - N EY1 - S EH0 S\nMENEZES  M EY0 - N EY1 - Z EH0 S\nMENG  M EH1 NG\nMENGE  M EH1 N JH\nMENGEL  M EH1 NG - G AH0 L\nMENGELE  M EH1 NG - G AH0 - L AH0\nMENGER  M EH1 N - JH ER0\nMENGERS  M EH1 NG - G ER0 Z\nMENGES  M EH1 N - JH IH0 Z\nMENGHINI  M EH0 N - G IY1 - N IY0\nMENGISTU  M EH2 NG - G IY1 - S T UW0\nMENHADEN  M EH0 N - HH EY1 - D AH0 N\nMENIAL  M IY1 - N IY0 - AH0 L\nMENIFEE  M EH1 - N IH0 - F IY2\nMENIL  M EH0 - N IY1 L\nMENINGITIS  M EH2 - N AH0 N - JH AY1 - T AH0 S\nMENINO  M AH0 - N IY1 - N OW0\nMENJIVAR  M EY0 - N Y IY0 - V AA1 R\nMENK  M EH1 NG K\nMENKA  M EH1 NG - K AH0\nMENKE  M EH1 NG K\nMENKEN  M EH1 NG - K AH0 N\nMENKES  M EH1 NG K S\nMENLO  M EH1 N - L OW0\nMENN  M EH1 N\nMENNA  M EH1 - N AH0\nMENNAN  M EH1 - N AH0 N\nMENNAN'S  M EH1 - N AH0 N Z\nMENNE  M EH1 N\nMENNELLA  M EH2 - N EH1 - L AH0\nMENNEN  M EH1 - N AH0 N\nMENNENGA  M IH0 - N EH1 NG - G AH0\nMENNING  M EH1 - N IH0 NG\nMENNINGER  M EH1 - N IH0 - NG ER0\nMENNINI  M EH0 - N IY1 - N IY0\nMENNONITE  M EH1 - N AH0 - N AY2 T\nMENNONITES  M EH1 - N AH0 - N AY2 T S\nMENO  M EY1 - N OW0\nMENON  M EY0 - N AO1 N\nMENOPAUSAL  M EH2 - N AH0 - P AW1 - Z AH0 L\nMENOPAUSE  M EH1 - N AH0 - P AW2 Z\nMENOR  M EH1 - N ER0\nMENORAH  M AH0 - N AO1 - R AH0\nMENORAH'S  M AH0 - N AO1 - R AH0 Z\nMENORAHS  M AH0 - N AO1 - R AH0 Z\nMENOTOMY  M IH0 - N AA1 - T IH0 - M IY0\nMENS  M EH1 N Z\nMENSAH  M EH1 N - S AH0\nMENSCH  M EH1 N SH\nMENSCHVILLE  M EH1 N SH - V IH0 L\nMENSER  M EH1 N - S ER0\nMENSIK  M EH1 N - S IH0 K\nMENSING  M EH1 N - S IH0 NG\nMENSINGER  M EH1 N - S IH0 N - JH ER0\nMENSTRUAL  M EH1 N S - T R UW0 - AH0 L\nMENSTRUAL(2)  M EH1 N - S T R AH0 L\nMENSTRUATION  M EH2 N S - T R UW0 - EY1 - SH AH0 N\nMENSWEAR  M EH1 N Z - W EY2 R\nMENTAL  M EH1 N - T AH0 L\nMENTALITY  M EH0 N - T AE1 - L AH0 - T IY0\nMENTALITY(2)  M EH0 N - T AE1 - L IH0 - T IY0\nMENTALLY  M EH1 N - T AH0 - L IY0\nMENTALLY(2)  M EH1 - N AH0 - L IY0\nMENTE  M EH1 N T\nMENTEL  M EY0 N - T EH1 L\nMENTER  M EH1 N - T ER0\nMENTHOL  M EH1 N - TH AO0 L\nMENTHOLATUM  M EH2 N - TH AH0 - L EY1 - T AH0 M\nMENTINK  M EH1 N - T IH0 NG K\nMENTION  M EH1 N - SH AH0 N\nMENTIONED  M EH1 N - SH AH0 N D\nMENTIONING  M EH1 N - SH AH0 N - IH0 NG\nMENTIONS  M EH1 N - SH AH0 N Z\nMENTO  M EH1 N - T OW0\nMENTON  M EH1 N - T AH0 N\nMENTOR  M EH1 N - T AO2 R\nMENTOR'S  M EH1 N - T AO2 R Z\nMENTOR(2)  M EH1 N - T ER0\nMENTORED  M EH1 N - T ER0 D\nMENTORING  M EH1 N - T ER0 - IH0 NG\nMENTORS  M EH1 N - T ER0 Z\nMENTORS(2)  M EH1 N - T AO2 R Z\nMENTZ  M EH1 N T S\nMENTZEL  M EH1 N T - Z AH0 L\nMENTZER  M EH1 N T - Z ER0\nMENU  M EH1 - N Y UW0\nMENUHIN  M AH0 - N UW1 - HH IH0 N\nMENUHIN(2)  M IH0 - N Y UW1 - IH0 N\nMENUS  M EH1 - N Y UW0 Z\nMENZ  M EH1 N Z\nMENZE  M EH1 N Z\nMENZEL  M EH1 N - Z AH0 L\nMENZER  M EH1 N - Z ER0\nMENZIE  M EH1 N - Z IY0\nMENZIES  M EH1 N - Z IY0 Z\nMENZIONE  M EH0 N - Z IY0 - OW1 - N IY0\nMENZIONE(2)  M EH0 N Z - Y OW1 - N IY0\nMEO  M IY1 - OW0\nMEOLA  M IY0 - AA1 - L AH0\nMEOW  M IY0 - AW1\nMEQUON  M EH1 - K W AH0 N\nMER  M EH1 R\nMER(2)  M ER1\nMERABANK  M EH1 - R AH0 - B AE2 NG K\nMERANDA  M ER0 - AA1 N - D AH0\nMERAZ  M EH1 - R AA0 Z\nMERC  M ER1 K\nMERC'S  M ER1 K S\nMERC'S(2)  M AA1 R K S\nMERC(2)  M AA1 R K\nMERCADANTE  M ER0 - K AA0 - D AA1 N - T IY0\nMERCADO  M ER0 - K AA1 - D OW0\nMERCANTIL  M ER0 - K AE1 N - T IH0 L\nMERCANTILE  M ER1 - K AH0 N - T AY2 L\nMERCANTILE'S  M ER1 - K AH0 N - T IY2 L Z\nMERCANTILISM  M ER0 - K AE1 N - T AH0 - L IH2 - Z AH0 M\nMERCANTILIST  M ER0 - K AE1 N - T AH0 - L IH0 S T\nMERCATOR  M ER0 - K EY1 - T ER0\nMERCE  M ER1 S\nMERCEDES  M ER0 - S EY1 - D IY0 Z\nMERCEDES'S  M ER0 - S EY1 - D IY0 Z\nMERCEDES'S(2)  M ER0 - S EY1 - D IY0 - Z IH0 Z\nMERCEDESES  M ER2 - S EY1 - D IY2 - Z IH0 Z\nMERCEDESES(2)  M ER2 - S EY1 - D IY2 Z\nMERCENARIES  M ER1 - S AH0 - N EH2 - R IY0 Z\nMERCENARY  M ER1 - S AH0 - N EH2 - R IY0\nMERCER  M ER1 - S ER0\nMERCHANDISE  M ER1 - CH AH0 N - D AY2 Z\nMERCHANDISER  M ER1 - CH AH0 N - D AY2 - Z ER0\nMERCHANDISERS  M ER1 - CH AH0 N - D AY2 - Z ER0 Z\nMERCHANDISING  M ER1 - CH AH0 N - D AY2 - Z IH0 NG\nMERCHANT  M ER1 - CH AH0 N T\nMERCHANT'S  M ER1 - CH AH0 N T S\nMERCHANTMEN  M ER1 - CH AH0 N T - M IH0 N\nMERCHANTS  M ER1 - CH AH0 N T S\nMERCHANTS'  M ER1 - CH AH0 N T S\nMERCHANTSBANK  M ER1 - CH AH0 N T S - B AE2 NG K\nMERCIER  M ER1 - S IY0 - ER0\nMERCIES  M ER1 - S IY0 Z\nMERCIFUL  M ER1 - S IH0 - F AH0 L\nMERCIFULLY  M ER1 - S IH0 - F AH0 - L IY0\nMERCIFULLY(2)  M ER1 - S IH0 F - L IY0\nMERCILESS  M ER1 - S AH0 - L AH0 S\nMERCILESSLY  M ER1 - S AH0 - L AH0 S - L IY0\nMERCK  M ER1 K\nMERCK'S  M ER1 K S\nMERCLAND  M ER1 K - L AE0 N D\nMERCOSUR  M ER1 - K OW2 - S ER2\nMERCURE  M ER0 - K UH1 - R IY0\nMERCURI  M ER0 - K UH1 - R IY0\nMERCURIAL  M ER0 - K Y UH1 - R IY0 - AH0 L\nMERCURIC  M ER0 - K Y UH1 - R IH0 K\nMERCURIO  M ER0 - K UH1 - R IY0 - OW0\nMERCURY  M ER1 - K Y ER0 - IY0\nMERCURY'S  M ER1 - K Y ER0 - IY0 Z\nMERCY  M ER1 - S IY0\nMERDYCE  M ER1 - D AY0 S\nMERE  M IH1 R\nMEREDITH  M EH1 - R IH0 - D IH0 TH\nMERELY  M IH1 R - L IY0\nMERENDA  M EH0 - R EY1 N - D AH0\nMERENDINO  M ER0 - EH0 N - D IY1 - N OW0\nMEREST  M EH1 - R AH0 S T\nMERETZ  M EH1 - R EH0 T S\nMERFELD  M ER1 - F EH0 L D\nMERGE  M ER1 JH\nMERGED  M ER1 JH D\nMERGEN  M ER1 - G AH0 N\nMERGER  M ER1 - JH ER0\nMERGER'S  M ER1 - JH ER0 Z\nMERGERS  M ER1 - JH ER0 Z\nMERGES  M ER1 - JH IH0 Z\nMERGING  M ER1 - JH IH0 NG\nMERHIGE  M ER0 - HH IY1 JH\nMERIAM  M IH1 - R IY0 - IH0 M\nMERICA  M EH1 - R IH0 - K AH0\nMERICANTANTE  M EH0 - R IY2 - K AH0 N - T AA1 N - T EY0\nMERICLE  M EH1 - R IH0 - K AH0 L\nMERICOPA  M EH2 - R AH0 - K OW1 - P AH0\nMERIDA  M ER0 - IY1 - D AH0\nMERIDEN  M EH1 - R IH0 - D AH0 N\nMERIDETH  M EH1 - R IH0 - D IH0 TH\nMERIDIAN  M ER0 - IH1 - D IY0 - AH0 N\nMERIDIAN'S  M ER0 - IH1 - D IY0 - AH0 N Z\nMERIDIEN  M ER0 - IH1 - D IY0 - AH0 N\nMERIDIONALE  M ER0 - IH2 - D IY0 - AH0 - N AA1 - L IY0\nMERIDITH  M EH1 - R IH0 - D IH0 TH\nMERIDOR  M EH1 - R IH0 - D AO0 R\nMERIEL  M IH1 - R IY0 L\nMERIEUX  M EH1 - R IY0 - UW2\nMERILLAT  M EH1 - R IH0 - L AE0 T\nMERINO  M ER0 - IY1 - N OW0\nMERION  M EH1 - R IY0 - AH0 N\nMERIS  M EH1 - R AH0 S\nMERISEL  M EH1 - R IH0 - S EH2 L\nMERIT  M EH1 - R AH0 T\nMERITED  M EH1 - R IH0 - T IH0 D\nMERITHEW  M ER0 - IH1 - TH Y UW0\nMERITLESS  M EH1 - R IH0 T - L AH0 S\nMERITOCRACY  M EH0 - R IH0 - T AO1 - K R AH0 - S IY0\nMERITOR  M EH1 - R AH0 - T ER0\nMERITOR(2)  M EH1 - R AH0 - T AO2 R\nMERITORIOUS  M EH2 - R AH0 - T AO1 - R IY0 - AH0 S\nMERITS  M EH1 - R AH0 T S\nMERITS(2)  M EH1 - R IH0 T S\nMERITT  M EH1 - R IH0 T\nMERIWEATHER  M EH1 - R IH0 - W EH2 - DH ER0\nMERIWETHER  M EH1 - R IH0 - W EH2 - DH ER0\nMERK  M ER1 K\nMERKEL  M ER1 - K AH0 L\nMERKER  M ER1 - K ER0\nMERKEY  M ER1 - K IY0\nMERKIN  M ER1 - K IH0 N\nMERKLAN  M ER1 - K L AH0 N\nMERKLE  M ER1 - K AH0 L\nMERKLEY  M ER1 K - L IY0\nMERKLIN  M ER1 - K L IH0 N\nMERKSAMER  M ER1 K - S AH0 - M ER0\nMERKT  M ER1 K T\nMERKUR  M ER1 - K ER0\nMERL  M ER1 L\nMERLE  M ER1 L\nMERLIN  M ER1 - L IH0 N\nMERLINA  M ER0 - L IY1 - N AH0\nMERLINE  M ER1 - L AY0 N\nMERLINO  M ER0 - L IY1 - N OW0\nMERLINS  M ER1 - L IH0 N Z\nMERLIS  M ER1 - L IY0 Z\nMERLO  M EH1 R - L OW0\nMERLOT  M ER1 - L AH0 T\nMERMAID  M ER1 - M EY2 D\nMERMAIDS  M ER1 - M EY2 D Z\nMERMAN  M ER1 - M AE2 N\nMERMELSTEIN  M ER1 - M AH0 L - S T AY0 N\nMERMELSTEIN(2)  M ER1 - M AH0 L - S T IY0 N\nMERNA  M EH1 R - N AH0\nMERNER  M ER1 - N ER0\nMERNICK  M ER1 - N IH0 K\nMERO  M EH1 - R OW0\nMEROLA  M ER0 - OW1 - L AH0\nMEROLLA  M ER0 - OW1 - L AH0\nMERONEY  M EH1 - R AH0 - N IY0\nMEROW  M EH1 - R OW0\nMERRELL  M EH1 - R AH0 L\nMERRETT  M EH1 - R IH0 T\nMERRIAM  M EH1 - R IY0 - AH0 M\nMERRICK  M EH1 - R IH0 K\nMERRICKS  M EH1 - R IH0 K S\nMERRIE  M EH1 - R IY0\nMERRIER  M EH1 - R IY0 - ER0\nMERRIFIELD  M EH1 - R IH0 - F IY2 L D\nMERRIGAN  M EH1 - R IH0 - G AH0 N\nMERRIHEW  M ER0 - IH1 - HH Y UW0\nMERRILL  M EH1 - R AH0 L\nMERRILL'S  M EH1 - R AH0 L Z\nMERRILY  M EH1 - R AH0 - L IY0\nMERRIMAC  M EH1 - R IH0 - M AE0 K\nMERRIMACK  M EH1 - R IH0 - M AE2 K\nMERRIMAN  M EH1 - R IH0 - M AH0 N\nMERRIN  M EH1 - R IH0 N\nMERRIOTT  M EH1 - R IY0 - AH0 T\nMERRIT  M EH1 - R IH0 T\nMERRITT  M EH1 - R IH0 T\nMERRITTS  M EH1 - R IH0 T S\nMERRIWEATHER  M EH0 - R IH0 - W EH1 - DH ER0\nMERRIWETHER  M EH1 - R IH0 - W EH0 - DH ER0\nMERROW  M EH1 - R OW0\nMERRY  M EH1 - R IY0\nMERRY-GO-ROUND  M EH1 - R IY0 - G OW0 - R AW2 N D\nMERRYFIELD  M EH1 - R IY0 - F IY2 L D\nMERRYMAN  M EH1 - R IY0 - M AH0 N\nMERS  M ER1 Z\nMERSCH  M ER1 SH\nMERSEREAU  M ER1 - S ER0 - OW0\nMERSHON  M ER1 - SH AH0 N\nMERSMAN  M ER1 S - M AH0 N\nMERSON  M ER1 - S AH0 N\nMERTA  M EH1 R - T AH0\nMERTEN  M ER1 - T AH0 N\nMERTENS  M ER1 - T AH0 N Z\nMERTES  M EH1 R - T EH0 S\nMERTICE  M EH1 R - T IH0 S\nMERTINS  M ER1 - T IH0 N Z\nMERTLE  M ER1 - T AH0 L\nMERTON  M ER1 - T AH0 N\nMERTZ  M ER1 T S\nMERV  M ER1 V\nMERVIN  M ER1 - V IH0 N\nMERVINE  M ER1 - V AY0 N\nMERVIS  M ER1 - V IH0 S\nMERVYN  M ER1 - V IH0 N\nMERVYN'S  M ER1 - V IH0 N Z\nMERWE  M ER1 - W IY0\nMERWIN  M ER1 - W IH0 N\nMERWYN  M ER1 - W IH0 N\nMERYL  M EH1 - R AH0 L\nMERYLL  M EH1 - R AH0 L\nMERZ  M ER1 Z\nMESA  M EY1 - S AH0\nMESA'S  M EY1 - S AH0 Z\nMESABA  M EH0 - S AA1 - B AH0\nMESAROS  M EY0 - S AA1 - R OW0 Z\nMESBIC  M EH1 S - B IH0 K\nMESBICS  M EH1 S - B IH0 K S\nMESCALERO  M EH2 - S K AH0 - L EH1 - R OW0\nMESCALINE  M EH1 S - K AH0 - L IY2 N\nMESCH  M EH1 SH\nMESCHED  M EH1 - SH EH0 D\nMESCHER  M EH1 - SH ER0\nMESCHKE  M EH1 SH K\nMESELSOHN  M EH1 - Z AH0 L - S AH0 N\nMESELSON  M EH1 - Z AH0 L - S AH0 N\nMESENBRINK  M EH1 - S IH0 N - B R IH0 NG K\nMESENTERIC  M EH2 - S AH0 N - T EH1 - R IH0 K\nMESEROLE  M EH0 - S ER0 - OW1 - L IY0\nMESERVE  M EH1 - S ER0 V\nMESERVEY  M EH0 - Z ER0 - V EY1\nMESH  M EH1 SH\nMESHED  M EH1 SH T\nMESHELL  M EH1 - SH AH0 L\nMESHES  M EH1 - SH IH0 Z\nMESHING  M EH1 - SH IH0 NG\nMESHULAM  M EH1 - SH UW0 - L AE0 M\nMESICK  M EH1 - S IH0 K\nMESIROW  M EH1 - S IH0 - R OW0\nMESKE  M EH1 S K\nMESKER  M EH1 - S K ER0\nMESKILL  M EH1 - S K IH0 L\nMESKIMEN  M EH1 S - K IY0 - M EH0 N\nMESKO  M EH1 - S K OW0\nMESLER  M EH1 - S AH0 - L ER0\nMESLER(2)  M EH1 S - L ER0\nMESMER  M EH1 Z - M ER0\nMESMERISM  M EH1 S - M ER0 - IH2 - Z AH0 M\nMESMERIZE  M EH1 Z - M ER0 - AY2 Z\nMESMERIZED  M EH1 Z - M ER0 - AY2 Z D\nMESMERIZING  M EH1 Z - M ER0 - AY2 - Z IH0 NG\nMESNER  M EH1 S - N ER0\nMESODERMAL  M EH2 - Z AH0 - D ER1 - M AH0 L\nMESOLITHIC  M EH2 - Z AH0 - L IH1 - TH IH0 K\nMESON  M EY1 - Z AA2 N\nMESONS  M IY1 - Z AA2 N Z\nMESOPOTAMIA  M EH2 - S AH0 - P AH0 - T EY1 - M IY0 - AH0\nMESOPOTAMIAN  M EH2 - S AH0 - P AH0 - T EY1 - M IY0 - AH0 N\nMESOPOTAMIANS  M EH2 - S AH0 - P AH0 - T EY1 - M IY0 - AH0 N Z\nMESOTHELIOMA  M EH2 - S AH0 - TH IY2 - L IY0 - OW1 - M AH0\nMESOTHORAX  M EH2 - Z AH0 - TH AO1 - R AE2 K S\nMESOZOIC  M EH2 - S AH0 - Z OW1 - IH0 K\nMESQUITE  M EH1 - S K IY2 T\nMESS  M EH1 S\nMESSA  M EH1 - S AH0\nMESSAGE  M EH1 - S AH0 JH\nMESSAGE(2)  M EH1 - S IH0 JH\nMESSAGEPAD  M EH1 - S AH0 JH - P AE2 D\nMESSAGES  M EH1 - S AH0 - JH AH0 Z\nMESSAGES(2)  M EH1 - S IH0 - JH IH0 Z\nMESSAGING  M EH1 - S IH0 - JH IH0 NG\nMESSAMORE  M EH0 - S AA1 - M AO0 R\nMESSANA  M EH0 - S AE1 - N AH0\nMESSED  M EH1 S T\nMESSEL  M EH1 - S AH0 L\nMESSENGER  M EH1 - S AH0 N - JH ER0\nMESSENGER(2)  M EH1 - S IH0 N - JH ER0\nMESSENGERS  M EH1 - S AH0 N - JH ER0 Z\nMESSER  M EH1 - S ER0\nMESSERLI  M EH1 - S ER0 - L IY0\nMESSERLY  M EH1 - S ER0 - L IY0\nMESSERSCHMIDT  M EH1 - S ER0 SH - M IH2 T\nMESSERSCHMITT  M EH1 - S ER0 SH - M IH2 T\nMESSERSMITH  M EH1 - S ER0 - S M IH2 TH\nMESSES  M EH1 - S IH0 Z\nMESSIAEN  M EH1 - S IY0 - EY2 N\nMESSIAEN'S  M EH1 - S IY0 - EY2 N Z\nMESSIAH  M AH0 - S AY1 - AH0\nMESSIAHS  M AH0 - S AY1 - AH0 Z\nMESSIANIC  M EH2 - S IY0 - AE1 - N IH0 K\nMESSICK  M EH1 - S IH0 K\nMESSIER  M EH1 - S IY0 - ER0\nMESSIMER  M EH1 - S IH0 - M ER0\nMESSINA  M IH0 - S IY1 - N AH0\nMESSINEO  M EH2 - S IH1 - N IY0 - OW0\nMESSING  M EH1 - S IH0 NG\nMESSINGER  M EH1 - S IH0 - NG ER0\nMESSLER  M EH1 S - L ER0\nMESSMAN  M EH1 S - M AH0 N\nMESSMER  M EH1 S - M ER0\nMESSMORE  M EH1 S - M AO0 R\nMESSNER  M EH1 S - N ER0\nMESSRS  M EH1 - S ER0 Z\nMESSRS.  M EH1 - S ER0 Z\nMESSRS.(2)  M IH0 - S UW1 R Z\nMESSY  M EH1 - S IY0\nMEST  M EH1 S T\nMESTA  M EH1 - S T AH0\nMESTAS  M EH1 - S T AH0 Z\nMESTEK  M EH1 - S T EH2 K\nMESTER  M EH1 - S T ER0\nMESTIZO  M EH0 - S T IY1 - Z OW0\nMESTON  M EH1 - S T AH0 N\nMESTRALLET  M EH1 S - T R AH0 - L EH2 T\nMESTRE  M EH1 - S T ER0\nMESTROVIC  M EH1 S - T R OW0 - V IH0 K\nMESZAROS  M IH0 - SH AA1 - R OW0 Z\nMET  M EH1 T\nMET'S  M EH1 T S\nMETA  M IY1 - T AH0\nMETABOLIC  M EH2 - T AH0 - B AA1 - L IH0 K\nMETABOLISM  M AH0 - T AE1 - B AH0 - L IH2 - Z AH0 M\nMETABOLISMS  M AH0 - T AE1 - B AH0 - L IH2 - Z AH0 M Z\nMETABOLIZE  M AH0 - T AE1 - B AH0 - L AY2 Z\nMETACARPAL  M EH2 - T AH0 - K AA1 R - P AH0 L\nMETACARPALS  M EH2 - T AH0 - K AA1 R - P AH0 L Z\nMETAGOGUE  M EH1 - T AH0 - G AO2 G\nMETAGOGUED  M EH1 - T AH0 - G AO2 G D\nMETAIRIE  M AH0 - T EH1 - R IY0\nMETAL  M EH1 - T AH0 L\nMETAL'S  M EH1 - T AH0 L Z\nMETALL  M EH1 - T AO1 L\nMETALLATZ  M EH1 - T AE1 - L AH0 T S\nMETALLGESELLSCHAFT  M EH2 - T AH0 L - G EH1 - S AH0 L - SH AE2 F T\nMETALLGESELLSCHAFT'S  M EH2 - T AH0 L - G EH1 - S AH0 L - SH AE2 F T S\nMETALLIC  M AH0 - T AE1 - L IH0 K\nMETALLIC'S  M AH0 - T AE1 - L IH0 K S\nMETALLICA  M AH0 - T AE1 - L IH0 - K AH0\nMETALLICA'S  M AH0 - T AE1 - L IH0 - K AH0 Z\nMETALLO  M EH0 - T AA1 - L OW0\nMETALLURGICAL  M EH2 - T AH0 - L ER1 - JH IH0 - K AH0 L\nMETALLURGY  M EH1 - T AH0 - L ER0 - JH IY0\nMETALS  M EH1 - T AH0 L Z\nMETALS'  M EH1 - T AH0 L Z\nMETALWORK  M EH1 - T AH0 L - W ER2 K\nMETALWORKER  M EH1 - T AH0 L - W ER2 - K ER0\nMETALWORKERS  M EH1 - T AH0 L - W ER2 - K ER0 Z\nMETALWORKING  M EH1 - T AH0 L - W ER2 - K IH0 NG\nMETAMORPHIC  M EH2 - T AH0 - M AO1 R - F IH0 K\nMETAMORPHOSE  M EH2 - T AH0 - M AO1 R - F OW0 Z\nMETAMORPHOSIS  M EH2 - T AH0 - M AO1 R - F AH0 - S AH0 S\nMETAMUCIL  M EH2 - T AH0 - M Y UW1 - S AH0 L\nMETAMUCIL'S  M EH2 - T AH0 - M Y UW1 - S AH0 L Z\nMETAPHOR  M EH1 - T AH0 - F AO0 R\nMETAPHORICAL  M EH2 - T AH0 - F AO1 - R IH0 - K AH0 L\nMETAPHORICALLY  M EH2 - T AH0 - F AO1 - R IH0 K - L IY0\nMETAPHORS  M EH1 - T AH0 - F AO0 R Z\nMETAPHYSICAL  M EH2 - T AH0 - F IH1 - Z IH0 - K AH0 L\nMETAPHYSICS  M EH2 - T AH0 - F IH1 - Z IH0 K S\nMETASTASIZE  M AH0 - T AE1 - S T AH0 - S AY2 Z\nMETASTASIZED  M AH0 - T AE1 - S T AH0 - S AY2 Z D\nMETATHORAX  M EH2 - T AH0 - TH AO1 - R AE2 K S\nMETAVSKY  M AH0 - T AE1 V - S K IY0\nMETAXAS  M AH0 - T AE1 K - S AH0 S\nMETCALF  M EH1 T - K AE2 F\nMETCALFE  M EH1 T - K AH0 L F\nMETCOM  M EH1 T - K AA0 M\nMETE  M IY1 T\nMETED  M IY1 - T IH0 D\nMETEOR  M IY1 - T IY0 - ER0\nMETEORIC  M IY2 - T IY0 - AO1 - R IH0 K\nMETEORITE  M IY1 - T IY0 - AO0 - R AY2 T\nMETEOROLOGICAL  M IY2 - T IY0 - AO2 - R AH0 - L AA1 - JH IH0 - K AH0 L\nMETEOROLOGIST  M IY2 - T IY0 - ER0 - AA1 - L AH0 - JH IH0 S T\nMETEOROLOGISTS  M IY2 - T IY0 - ER0 - AA1 - L AH0 - JH IH0 S T S\nMETEOROLOGISTS(2)  M IY2 - T IY0 - ER0 - AA1 - L AH0 - JH IH0 S S\nMETEOROLOGISTS(3)  M IY2 - T IY0 - ER0 - AA1 - L AH0 - JH IH0 S\nMETEOROLOGY  M IY2 - T IY0 - ER0 - AA1 - L AH0 - JH IY0\nMETEORS  M IY1 - T IY0 - ER0 Z\nMETER  M IY1 - T ER0\nMETERED  M IY1 - T ER0 D\nMETERING  M IY1 - T ER0 - IH0 NG\nMETERS  M IY1 - T ER0 Z\nMETEX  M EH1 - T EH2 K S\nMETH  M EH1 TH\nMETHADONE  M EH1 - TH AH0 - D OW2 N\nMETHAMPHETAMINE  M EH2 - TH AE0 M - F EH1 - T AH0 - M IY0 N\nMETHAMPHETAMINE(2)  M EH2 - TH AE0 M - F EH1 - T AH0 - M AY0 N\nMETHANE  M EH1 - TH EY2 N\nMETHANEX  M EH1 - TH AH0 - N EH2 K S\nMETHANOL  M EH1 - TH AH0 - N AA2 L\nMETHAZINE  M EH1 - TH AH0 - Z IY2 N\nMETHENEY  M EH1 - TH IH0 - N IY0\nMETHENY  M EH1 - TH IH0 - N IY0\nMETHNER  M EH1 TH - N ER0\nMETHOD  M EH1 - TH AH0 D\nMETHODE  M AH0 - TH OW1 D\nMETHODICAL  M AH0 - TH AA1 - D AH0 - K AH0 L\nMETHODICAL(2)  M AH0 - TH AA1 - D IH0 - K AH0 L\nMETHODICALLY  M AH0 - TH AA1 - D IH0 - K AH0 - L IY0\nMETHODICALLY(2)  M AH0 - TH AA1 - D IH0 K - L IY0\nMETHODISM  M EH1 - TH AH0 - D IH2 - Z AH0 M\nMETHODISMS  M EH1 - TH AH0 - D IH2 - Z AH0 M Z\nMETHODIST  M EH1 - TH AH0 - D AH0 S T\nMETHODIST(2)  M EH1 - TH AH0 - D IH0 S T\nMETHODOLOGICAL  M EH2 - TH AH0 - D AH0 - L AA1 - JH IH0 - K AH0 L\nMETHODOLOGIES  M EH2 - TH OW0 - D AA1 - L AH0 - JH IY0 Z\nMETHODOLOGY  M EH2 - TH AH0 - D AA1 - L AH0 - JH IY0\nMETHODS  M EH1 - TH AH0 D Z\nMETHOT  M EH1 - TH AH0 T\nMETHOTREXATE  M EH2 - TH OW0 - T R EH1 K - S EY2 T\nMETHUSELAH  M AH0 - TH Y UW1 - Z AH0 - L AH0\nMETHVIN  M EH1 TH - V IH0 N\nMETHYL  M EH1 - TH AH0 L\nMETHYLENE  M EH1 - TH IH0 - L IY2 N\nMETICS  M EH1 - T IH0 K S\nMETICULOUS  M AH0 - T IH1 - K Y AH0 - L AH0 S\nMETICULOUSLY  M AH0 - T IH1 - K Y AH0 - L AH0 S - L IY0\nMETIER  M EH1 - T Y ER0\nMETIS  M EH1 - T IH0 S\nMETIVIER  M EH1 - T IH0 - V IY0 - ER0\nMETLIFE  M EH1 T - L AY2 F\nMETOLACHLOR  M AH0 - T OW1 - L AH0 K - L ER0\nMETONOMY  M AH0 - T AO1 - N AH0 - M IY0\nMETOYER  M EH1 - T OY0 - ER0\nMETPATH  M EH1 T - P AE2 TH\nMETRA  M EH1 - T R AH0\nMETRAHEALTH  M EH1 - T R AH0 - HH EH2 L TH\nMETRIC  M EH1 - T R IH0 K\nMETRICAL  M EH1 - T R IH0 - K AH0 L\nMETRICALLY  M EH1 - T R IH0 - K AH0 - L IY0\nMETRICK  M EH1 - T R IH0 K\nMETRICS  M EH1 - T R IH0 K S\nMETRO  M EH1 - T R OW2\nMETRO'S  M EH1 - T R OW0 Z\nMETROBANC  M EH1 - T R OW0 - B AE2 NG K\nMETROBANK  M EH1 - T R OW0 - B AE2 NG K\nMETROCALL  M EH1 - T R OW2 - K AO2 L\nMETROCOLOR  M EH1 - T R OW0 - K AH1 - L ER0\nMETROCORP  M EH1 - T R OW0 - K AO2 R P\nMETRODADE  M EH2 - T R OW0 - D EY1 D\nMETRODOME  M EH1 - T R OW0 - D OW2 M\nMETRODOME(2)  M EH1 - T R AH0 - D OW2 M\nMETROMAIL  M EH1 - T R OW0 - M EY2 L\nMETROMEDIA  M EH2 - T R OW0 - M IY1 - D IY0 - AH0\nMETROPLEX  M EH1 - T R OW0 - P L EH2 K S\nMETROPOL  M EH1 - T R AH0 - P OW2 L\nMETROPOL'S  M EH1 - T R AH0 - P OW2 L Z\nMETROPOLIS  M AH0 - T R AA1 - P AH0 - L AH0 S\nMETROPOLITAIN  M EH2 - T R AH0 - P AO1 - L AH0 - T AH0 N\nMETROPOLITAN  M EH2 - T R AH0 - P AA1 - L AH0 - T AH0 N\nMETROPOLITAN'S  M EH2 - T R AH0 - P AA1 - L AH0 - T AH0 N Z\nMETROPOLITANS  M EH2 - T R AH0 - P AA1 - L AH0 - T AH0 N Z\nMETS  M EH1 T S\nMETS'  M EH1 T S\nMETSKER  M EH1 T - S K ER0\nMETTE  M EH1 T\nMETTER  M EH1 - T ER0\nMETTERNICH  M EH1 - T ER0 - N IH0 CH\nMETTLE  M EH1 - T AH0 L\nMETTLEN  M EH1 T - L AH0 N\nMETTLER  M EH1 T - L ER0\nMETTS  M EH1 T S\nMETTUR  M EH1 - T ER0\nMETZ  M EH1 T S\nMETZE  M EH1 T Z\nMETZENBAUM  M EH1 T - S AH0 N - B AW2 M\nMETZENBAUM'S  M EH1 T - S AH0 N - B AW2 M Z\nMETZER  M EH1 T - S ER0\nMETZGAR  M EH1 T S - G ER0\nMETZGER  M EH1 T S - G ER0\nMETZGER'S  M EH1 T S - G ER0 Z\nMETZINGER  M EH1 T - Z IH0 - NG ER0\nMETZKER  M EH1 T - S K ER0\nMETZLER  M EH1 T S - L ER0\nMETZNER  M EH1 T S - N ER0\nMEUNIER  M OY1 - N IY0 - ER0\nMEURER  M ER1 - ER0\nMEUSE  M Y UW1 Z\nMEUSER  M OY1 - S ER0\nMEUTH  M Y UW1 TH\nMEVACOR  M EH1 - V AH0 - K AO2 R\nMEVARACH  M AH0 - V AA1 - R AH0 CH\nMEVARACH'S  M AH0 - V AA1 - R AH0 - CH AH0 Z\nMEVARACHS  M AH0 - V AA1 - R AH0 - CH AH0 Z\nMEW  M Y UW1\nMEWAS  M Y UW1 - AH0 S\nMEWAS(2)  M IY1 - W AH0 S\nMEWBORN  M Y UW1 - B ER0 N\nMEWES  M Y UW1 Z\nMEX  M EH1 K S\nMEXICALI  M EH2 K - S IH0 - K AA1 - L IY0\nMEXICAN  M EH1 K - S AH0 - K AH0 N\nMEXICANA  M EH2 K - S IH0 - K AE1 - N AH0\nMEXICANO  M EH2 K - S IH0 - K AA1 - N OW0\nMEXICANOS  M EH2 K - S IH0 - K AA1 - N OW0 Z\nMEXICANS  M EH1 K - S IH0 - K AH0 N Z\nMEXICO  M EH1 K - S AH0 - K OW2\nMEXICO'S  M EH1 K - S AH0 - K OW2 Z\nMEY  M EY1\nMEYER  M AY1 - ER0\nMEYER'S  M AY1 - ER0 Z\nMEYERBEER  M AY1 - ER0 - B IH2 R\nMEYERHOFF  M AY1 - ER0 - HH AO0 F\nMEYERING  M EY1 - ER0 - IH0 NG\nMEYERMAN  M AY1 - ER0 - M AH0 N\nMEYEROWITZ  M AY1 - ER0 - AH0 - W IH0 T S\nMEYERS  M AY1 - ER0 Z\nMEYERSON  M AY1 - ER0 - S AH0 N\nMEYN  M EY1 N\nMEYO  M EY1 - OW0\nMEYOHAS  M EY0 - OW1 - HH AA0 S\nMEZA  M EH1 - Z AH0\nMEZERA  M EY0 - Z EH1 - R AH0\nMEZEY  M EH1 - Z IY0\nMEZGER  M EH1 Z - JH ER0\nMEZO  M EH1 - Z OW0\nMEZVINSKY  M EH2 Z - V IH1 N - S K IY0\nMEZVINSKY'S  M EH2 Z - V IH1 N - S K IY0 Z\nMEZZALUNA  M EH2 T - S AH0 - L UW1 - N AH0\nMEZZALUNA(2)  M EH2 - Z AH0 - L UW1 - N AH0\nMEZZANINE  M EH1 - Z AH0 - N IY2 N\nMEZZO  M EH1 - Z OW0\nMFUME  EH2 M - F UW1 - M EY2\nMGM  EH1 M - G IY1 - EH1 M\nMH  EH1 - M EY1 CH\nMHM  AH0 M - HH AH0 M\nMHOON  M HH UW1 N\nMI  M IY1\nMI-VAMI  M IY0 - V AE1 - M IY0\nMIA  M IY1 - AH0\nMIAMI  M AY0 - AE1 - M IY0\nMIAMI'S  M AY0 - AE1 - M IY0 Z\nMIANO  M IY0 - AA1 - N OW0\nMIARA  M AY0 - AA1 - R AH0\nMIASMA  M IY0 - AE1 Z - M AH0\nMIASMA(2)  M AY0 - AE1 Z - M AH0\nMIATA  M IY0 - AA1 - T AH0\nMIAZGA  M IY0 - AA1 Z - G AH0\nMIB  M IH1 B\nMIC  M IH1 K\nMICA  M AY1 - K AH0\nMICAELA  M IY0 - K EY1 - L AH0\nMICAH  M AY1 - K AH0\nMICALE  M IY0 - K AA1 - L IY0\nMICALLEF  M IH1 - K AH0 - L EH0 F\nMICANOPY  M IH0 - K AE1 - N AH0 - P IY0\nMICATIN  M AY1 - K AH0 - T IH0 N\nMICCICHE  M IY0 - CH IY1 - K IY0\nMICCIO  M IY1 - CH IY0 - OW0\nMICE  M AY1 S\nMICEK  M IH1 - CH EH0 K\nMICELI  M IY0 - CH EH1 - L IY0\nMICH  M IH1 CH\nMICHAEL  M AY1 - K AH0 L\nMICHAEL'S  M AY1 - K AH0 L Z\nMICHAELA  M AY0 - K EH1 - L AH0\nMICHAELINA  M AY2 - K AH0 - L IY1 - N AH0\nMICHAELINE  M AY1 - K AH0 - L AY0 N\nMICHAELINE(2)  M AY1 - K AH0 - L IY0 N\nMICHAELIS  M AY2 - K EH1 - L IH0 S\nMICHAELLA  M AY2 - K EH1 - L AH0\nMICHAELS  M AY1 - K AH0 L Z\nMICHAELSEN  M AY1 - K AH0 L - S AH0 N\nMICHAELSON  M AY1 - K AH0 L - S AH0 N\nMICHAL  M IH1 - CH AH0 L\nMICHALAK  M IH1 - CH AH0 - L AE0 K\nMICHALEC  M IH0 - HH AA1 - L IH0 K\nMICHALEK  M IH0 - HH AA1 - L EH0 K\nMICHALIK  M IH1 - K AH0 - L IH0 K\nMICHALOWSKI  M IH2 - CH AH0 - L AO1 F S - K IY0\nMICHALS  M IH1 - CH AH0 L Z\nMICHALSKI  M IH2 - CH AA1 L S - K IY0\nMICHALSKY  M IH2 - CH AA1 L S - K IY0\nMICHAUD  M IH0 - SH OW1\nMICHAUX  M IH0 - SH OW1\nMICHCON  M IH1 SH - K AA0 N\nMICHCON'S  M IH1 SH - K AA0 N Z\nMICHEAL  M AY1 - K AH0 L\nMICHEAUX  M IH0 - SH OW1\nMICHEAUX'S  M IH0 - SH OW1 Z\nMICHEL  M IH0 - SH EH1 L\nMICHEL'S  M IH2 - SH EH1 L Z\nMICHEL'S(2)  M IH1 - CH AH0 L Z\nMICHEL'S(3)  M AY1 - K AH0 L Z\nMICHEL(2)  M IH1 - CH AH0 L\nMICHEL(3)  M AY1 - K AH0 L\nMICHELA  M IH0 - K EY1 - L AH0\nMICHELA'S  M IH0 - K EY1 - L AH0 Z\nMICHELANGELO  M AY2 - K AH0 - L AE1 N - JH AH0 - L OW2\nMICHELANGELO'S  M AY2 - K AH0 - L AE1 N - JH AH0 - L OW2 Z\nMICHELANGELO'S(2)  M IH2 - K AH0 - L AE1 N - JH AH0 - L OW2 Z\nMICHELANGELO(2)  M IH2 - K AH0 - L AE1 N - JH AH0 - L OW2\nMICHELE  M IH0 - SH EH1 L\nMICHELETTI  M IH0 - K AH0 - L EH1 - T IY0\nMICHELI  M IH0 - K EH1 - L IY0\nMICHELIN  M IH1 - SH AH0 - L AH0 N\nMICHELIN(2)  M IH1 SH - L AH0 N\nMICHELINA  M IH0 - K AH0 - L IY1 - N AH0\nMICHELINE  M IH2 - SH AH0 - L AH0 N\nMICHELINI  M IH0 - K AH0 - L IY1 - N IY0\nMICHELL  M IH1 - CH AH0 L\nMICHELLE  M IH0 - SH EH1 L\nMICHELLE'S  M IH0 - SH EH1 L Z\nMICHELLI  M IH0 - CH EH1 - L IY0\nMICHELMAN  M AY1 - K AH0 L - M AH0 N\nMICHELOB  M IH1 - K AH0 - L OW0 B\nMICHELOTTI  M IH0 - K AH0 - L OW1 - T IY0\nMICHELS  M IH0 - SH EH1 L Z\nMICHELSEN  M AY1 - K AH0 L - S AH0 N\nMICHELSON  M AY1 - K AH0 L - S AH0 N\nMICHENER  M IH1 CH - N ER0\nMICHENER'S  M IH1 CH - N ER0 Z\nMICHIE  M IH1 - CH IY0\nMICHIELS  M AY1 - K AH0 L Z\nMICHIELS(2)  M IH1 - CH IY0 L Z\nMICHIGAN  M IH1 - SH IH0 - G AH0 N\nMICHIGAN'S  M IH1 - SH IH0 - G AH0 N Z\nMICHIHIRO  M IH2 - CH IY0 - HH IY1 - R OW0\nMICHIO  M IH1 - CH IY0 - OW0\nMICHL  M IH1 - CH AH0 L\nMICHLER  M IH1 CH - L ER0\nMICHNA  M IH1 CH - N AH0\nMICHOACAN  M IH0 - CH OW1 - K AH0 N\nMICHON  M IH1 - CH AH0 N\nMICK  M IH1 K\nMICKA  M IH1 - K AH0\nMICKE  M IH1 K\nMICKEL  M IH1 - K AH0 L\nMICKELBERRY  M IH1 - K AH0 L - B EH2 - R IY0\nMICKELS  M IH1 - K AH0 L Z\nMICKELSEN  M IH1 - K AH0 L - S AH0 N\nMICKELSON  M IH1 - K AH0 L - S AH0 N\nMICKENS  M IH1 - K AH0 N Z\nMICKEY  M IH1 - K IY0\nMICKEY'S  M IH1 - K IY0 Z\nMICKI  M IH1 - K IY0\nMICKIE  M IH1 - K IY0\nMICKIEWICZ  M IH1 - K AH0 - V IH0 CH\nMICKISH  M IH1 - K IH0 SH\nMICKLE  M IH1 - K AH0 L\nMICKLER  M IH1 - K L ER0\nMICKLES  M IH1 - K AH0 L Z\nMICKLEY  M IH1 K - L IY0\nMICKUS  M IH1 - K AH0 S\nMICKY  M IH1 - K IY0\nMICOIN  M IH0 - K OY1 N\nMICOM  M AY1 - K AA0 M\nMICOSUKEE  M IH2 - K AH0 - S UW1 - K IY0\nMICRO  M AY1 - K R OW2\nMICRO'S  M AY1 - K R OW0 Z\nMICROAGE  M AY1 - K R OW0 - EY2 JH\nMICROAIRE  M AY1 - K R OW0 - EH2 R\nMICROAMERICA  M AY2 - K R OW0 - AH0 - M EH2 - R IH0 - K AH0\nMICROBE  M AY1 - K R OW2 B\nMICROBES  M AY1 - K R OW2 B Z\nMICROBIAL  M AY0 - K R OW1 - B IY0 - AH0 L\nMICROBILT  M AY1 - K R OW0 - B IH2 L T\nMICROBIOLOGIST  M AY2 - K R OW0 - B IY0 - AA1 - L AH0 - JH IH0 S T\nMICROBIOLOGY  M AY2 - K R OW0 - B AY2 - AA1 - L AH0 - JH IY0\nMICROBIOLOGY(2)  M AY2 - K R AH0 - B AY2 - AA1 - L AH0 - JH IY0\nMICROBREWERIES  M AY1 - K R OW2 - B R UW2 - ER0 - IY0 Z\nMICROBREWERY  M AY1 - K R OW2 - B R UW2 - ER0 - IY0\nMICROCENTRIFUGE  M AY2 - K R OW0 - S EH1 N - T R AH0 - F Y UW2 JH\nMICROCHIP  M AY1 - K R OW2 - CH IH1 P\nMICROCHIPS  M AY1 - K R OW2 - CH IH1 P S\nMICROCIRCUIT  M AY1 - K R OW0 - S ER2 - K AH0 T\nMICROCIRCUITS  M AY1 - K R OW0 - S ER2 - K AH0 T S\nMICROCLIMATE  M AY1 - K R OW0 - K L AY2 - M AH0 T\nMICROCLIMATES  M AY1 - K R OW0 - K L AY2 - M AH0 T S\nMICROCODE  M AY1 - K R OW0 - K OW2 D\nMICROCOM  M AY1 - K R OW0 - K AA2 M\nMICROCOMPUTER  M AY1 - K R OW2 - K AH0 M - P Y UW1 - T ER0\nMICROCOMPUTERS  M AY1 - K R OW2 - K AH0 M - P Y UW1 - T ER0 Z\nMICROCOSM  M AY1 - K R AH0 - K AA2 - Z AH0 M\nMICRODYNE  M AY1 - K R OW0 - D AY2 N\nMICROECONOMIC  M AY2 - K R OW0 - EH2 - K AH0 - N AA1 - M IH0 K\nMICROECONOMICS  M AY2 - K R OW0 - EH2 - K AH0 - N AA1 - M IH0 K S\nMICROELECTRONIC  M AY2 - K R OW0 - IH0 - L EH0 K - T R AA1 - N IH0 K\nMICROELECTRONICS  M AY2 - K R OW0 - IH0 - L EH0 K - T R AA1 - N IH0 K S\nMICROELETTRONICA  M AY2 - K R OW0 - IH0 - L EH0 - T R AA1 - N IH0 - K AH0\nMICROFICHE  M AY1 - K R OW0 - F IY2 CH\nMICROFILM  M AY1 - K R AH0 - F IH2 L M\nMICROFOSSIL  M AY1 - K R OW2 - F AA1 - S AH0 L\nMICROFOSSILS  M AY1 - K R OW2 - F AA1 - S AH0 L Z\nMICROGENESYS  M AY2 - K R OW0 - JH EH1 - N AH0 - S IH0 S\nMICROGRAFX  M AY2 - K R OW0 - G R AE1 - F EH0 K S\nMICROGRAM  M AY1 - K R OW0 - G R AE2 M\nMICROGRAMS  M AY1 - K R OW0 - G R AE2 M Z\nMICROGRAPHIC  M AY2 - K R OW0 - G R AE1 - F IH0 K\nMICROGRAPHICS  M AY2 - K R OW0 - G R AE1 - F IH0 K S\nMICROLITER  M AY1 - K R OW0 - L IY0 - T ER0\nMICROLITERS  M AY1 - K R OW0 - L IY0 - T ER0 Z\nMICROMANAGE  M AY2 - K R OW0 - M AE1 - N IH0 JH\nMICROMANAGEMENT  M AY2 - K R OW0 - M AE1 - N IH0 JH - M AH0 N T\nMICROMANAGING  M AY2 - K R OW0 - M AE1 - N IH0 - JH IH0 NG\nMICROMETER  M AY0 - K R AA1 - M AH0 - T ER0\nMICRON  M AY1 - K R AA2 N\nMICRON'S  M AY1 - K R AA2 N Z\nMICRONESIA  M AY2 - K R OW0 - N IY1 - ZH AH0\nMICRONIC  M AY2 - K R AO1 - N IH2 K\nMICRONICS  M AY2 - K R AO1 - N IH2 K S\nMICRONS  M AY1 - K R AA2 N Z\nMICROORGANISM  M AY2 - K R OW0 - AO1 R - G AH0 - N IH2 - Z AH0 M\nMICROORGANISMS  M AY2 - K R OW0 - AO1 R - G AH0 - N IH2 - Z AH0 M Z\nMICROPALEONTOLOGY  M AY2 - K R OW0 - P EY2 - L IY0 - AH0 N - T AA1 - L AH0 - JH IY0\nMICROPHONE  M AY1 - K R AH0 - F OW2 N\nMICROPHONES  M AY1 - K R OW0 - F OW2 N Z\nMICROPOLIS  M AY2 - K R AO1 - P AH0 - L IH0 S\nMICROPRO  M AY1 - K R OW0 - P R OW2\nMICROPROCESSOR  M AY2 - K R OW0 P - R AA1 - S EH0 - S ER0\nMICROPROCESSORS  M AY2 - K R OW0 P - R AA1 - S EH0 - S ER0 Z\nMICROPROSE  M AY1 - K R OW0 - P R OW2 Z\nMICROS  M AY1 - K R OW0 Z\nMICROSCOPE  M AY1 - K R AH0 S - K OW2 P\nMICROSCOPES  M AY1 - K R AH0 S - K OW2 P S\nMICROSCOPIC  M AY2 - K R AH0 - S K AA1 - P IH0 K\nMICROSCOPICALLY  M AY2 - K R AH0 - S K AA1 - P IH0 K - L IY0\nMICROSCOPY  M AY0 - K R AH1 S - K AH0 - P IY0\nMICROSEMI  M AY2 - K R OW0 - S EH1 - M IY0\nMICROSOFT  M AY1 - K R OW2 - S AO1 F T\nMICROSOFT'S  M AY1 - K R OW2 - S AO1 F T S\nMICROSOFT'S(2)  M AY1 - K R OW2 - S AO1 F S\nMICROSYSTEMS  M AY1 - K R OW2 - S IH1 - S T AH0 M Z\nMICROSYSTEMS'  M AY1 - K R OW0 - S IH2 - S T AH0 M Z\nMICROTEL  M AY1 - K R OW0 - T EH2 L\nMICROTUBULES  M AY1 - K R OW2 - T UW1 - B Y UW0 L Z\nMICROVAX  M AY1 - K R OW0 - V AE2 K S\nMICROWARE  M AY1 - K R OW2 - W EH1 R\nMICROWAVABLE  M AY2 - K R OW0 - W EY1 - V AH0 - B AH0 L\nMICROWAVE  M AY1 - K R AH0 - W EY2 V\nMICROWAVED  M AY1 - K R OW0 - W EY2 V D\nMICROWAVES  M AY1 - K R OW0 - W EY2 V Z\nMICROX  M IH1 - K R AH0 K S\nMICUCCI  M IY0 - K UW1 - CH IY0\nMID  M IH1 D\nMIDAFTERNOON  M IH1 D - AE2 F - T ER0 - N UW2 N\nMIDAIR  M IH1 D - EH1 R\nMIDAMERICA  M IH2 - D AH0 - M EH1 - R IH0 - K AH0\nMIDAS  M AY1 - D AH0 S\nMIDCAP  M IH1 D - K AE2 P\nMIDCENTURY  M IH0 D - S EH1 N - CH ER0 - IY0\nMIDCON  M IH1 D - K AA2 N\nMIDCONTINENT  M IH0 D - K AA1 N - T IH0 - N AH0 N T\nMIDCOURSE  M IH1 D - K AO1 R S\nMIDDAUGH  M IH1 - D AO0\nMIDDAY  M IH1 D - D EY2\nMIDDENDORF  M IH1 - D AH0 N - D AO2 R F\nMIDDENSTANDSBANK  M IH0 D - EH1 N - S T AE0 N D Z - B AE2 NG K\nMIDDLE  M IH1 - D AH0 L\nMIDDLE-CLASS  M IH1 - D AH0 L - K L AE1 S\nMIDDLEBROOK  M IH1 - D AH0 L - B R UH2 K\nMIDDLEBROOKS  M IH1 - D AH0 L - B R UH2 K S\nMIDDLEBURG  M IH1 - D AH0 L - B ER0 G\nMIDDLEBURY  M IH1 - D AH0 L - B EH2 - R IY0\nMIDDLEKAUFF  M IH1 - D AH0 L - K OW0 F\nMIDDLEMAN  M IH1 - D AH0 L - M AE2 N\nMIDDLEMEN  M IH1 - D AH0 L - M EH2 N\nMIDDLEMISS  M IH1 - D AH0 L - M IH2 S\nMIDDLESEX  M IH1 - D AH0 L - S EH2 K S\nMIDDLESWORTH  M IH1 - D AH0 L Z - W ER2 TH\nMIDDLETON  M IH1 - D AH0 L - T AH0 N\nMIDDLETOWN  M IH1 - D AH0 L - T AW2 N\nMIDDLEWEIGHT  M IH1 - D AH0 L - W EY2 T\nMIDDLING  M IH1 - D AH0 L - IH0 NG\nMIDDLING(2)  M IH1 D - L IH0 NG\nMIDEAST  M IH1 - D IY2 S T\nMIDEASTERN  M IH2 - D IY1 - S T ER0 N\nMIDFLIGHT  M IH1 D - F L AY2 T\nMIDGE  M IH1 JH\nMIDGE'S  M IH1 - JH IH0 Z\nMIDGES  M IH1 - JH AH0 Z\nMIDGES(2)  M IH1 - JH IH0 Z\nMIDGET  M IH1 - JH AH0 T\nMIDGETMAN  M IH1 - JH AH0 T - M AE2 N\nMIDGETS  M IH1 - JH AH0 T S\nMIDGETT  M IH1 - JH IH0 T\nMIDGETT'S  M IH1 - JH AH0 T S\nMIDGETTE  M IH0 - JH EH1 T\nMIDGLEY  M IH1 JH - L IY0\nMIDI  M IY1 - D IY0\nMIDI'S  M IY1 - D IY0 Z\nMIDKIFF  M IH1 D - K IH0 F\nMIDLAND  M IH1 D - L AE2 N D\nMIDLAND'S  M IH1 D - L AE2 N D Z\nMIDLANDS  M IH1 D - L AE2 N D Z\nMIDLANTIC  M IH0 D - L AE1 N - T IH0 K\nMIDLANTIC(2)  M IH0 D - L AE1 - N IH0 K\nMIDLER  M IH1 D - L ER0\nMIDLEVEL  M IH1 D - L AH0 - V AH0 L\nMIDLIFE  M IH1 D - L AY2 F\nMIDLINE  M IH1 D - L AY2 N\nMIDMORNING  M IH1 D - M AO2 R - N IH0 NG\nMIDNIGHT  M IH1 D - N AY2 T\nMIDPAC  M IH1 D - P AE2 K\nMIDPAC'S  M IH1 D - P AE2 K S\nMIDPOINT  M IH1 D - P OY2 N T\nMIDPRICE  M IH1 D - P R AY2 S\nMIDPRICED  M IH1 D - P R AY1 S T\nMIDRANGE  M IH1 - D R EY2 N JH\nMIDRIB  M IH1 - D R IH0 B\nMIDSEASON  M IH1 D - S IY1 - Z AH0 N\nMIDSECTION  M IH1 D - S EH2 K - SH AH0 N\nMIDSESSION  M IH1 D - S EH2 - SH AH0 N\nMIDSHIPMAN  M IH1 D - SH IH1 P - M AH0 N\nMIDSHIPMAN'S  M IH1 D - SH IH1 P - M AH0 N Z\nMIDSHIPMEN  M IH1 D - SH IH1 P - M EH0 N\nMIDSHIPMEN'S  M IH1 D - SH IH1 P - M EH0 N Z\nMIDSIZE  M IH1 D - S AY2 Z\nMIDSIZED  M IH1 D - S AY2 Z D\nMIDST  M IH1 D S T\nMIDST(2)  M IH1 S T\nMIDSTREAM  M IH1 D - S T R IY2 M\nMIDSUMMER  M IH1 D - S AH1 - M ER0\nMIDTERM  M IH1 D - T ER2 M\nMIDTERMS  M IH1 D - T ER2 M Z\nMIDTHUN  M IH1 D - TH AH0 N\nMIDTOWN  M IH1 D - T AW2 N\nMIDURA  M IY0 - D UH1 - R AH0\nMIDWAY  M IH1 D - W EY2\nMIDWAY'S  M IH1 D - W EY2 Z\nMIDWEEK  M IH1 D - W IY2 K\nMIDWEST  M IH2 D - W EH1 S T\nMIDWEST'S  M IH2 D - W EH1 S T S\nMIDWESTERN  M IH0 D - W EH1 - S T ER0 N\nMIDWESTERNER  M IH2 D - W EH1 - S T ER0 - N ER0\nMIDWESTERNERS  M IH0 D - W EH1 S - T ER0 - N ER0 Z\nMIDWIFE  M IH1 D - W AY2 F\nMIDWIFERY  M IH1 D - W AY2 - F ER0 - IY0\nMIDWINTER  M IH1 D - W IH1 N - T ER0\nMIDWINTER'S  M IH1 D - W IH1 N - T ER0 Z\nMIDWIVES  M IH1 D - W AY2 V Z\nMIDYEAR  M IH1 - D Y IH2 R\nMIDYETT  M IH2 D - Y EH1 T\nMIDYETTE  M IH2 D - Y EH1 T\nMIEARS  M IY0 - IH1 R Z\nMIECZKOWSKI  M IY0 CH - K AO1 F S - K IY0\nMIECZYSLAW  M IY1 - CH IH0 S - L AO2\nMIEDEMA  M IY0 - D EH1 - M AH0\nMIELCAREK  M IY0 L - K AA1 - R EH0 K\nMIELE  M IY1 L\nMIELKE  M IY1 L - K IY0\nMIEN  M IY1 N\nMIENO  M IY1 - N OW0\nMIER  M AY1 - ER0\nMIERA  M IY1 - R AH0\nMIERAS  M IH0 - R AA1 Z\nMIERS  M AY1 - ER0 Z\nMIERT  M AY1 - ER0 T\nMIERZEJEWSKI  M IH0 R - Z EY0 - EH1 F S - K IY0\nMIERZWA  M IY1 R - Z W AH0\nMIES  M AY1 Z\nMIESKE  M AY1 S - K IY0\nMIESNER  M IY1 Z - N ER0\nMIESSE  M IY1 S\nMIFFED  M IH1 F T\nMIFFLIN  M IH1 F - L IH0 N\nMIFSUD  M IH1 F - S AH0 D\nMIG  M IH1 G\nMIGDAL  M IH1 G - D AH0 L\nMIGENT  M IH1 - JH AH0 N T\nMIGGINS  M IH1 - G IH0 N Z\nMIGHT  M AY1 T\nMIGHT'VE  M AY1 - T AH0 V\nMIGHT-HAVE-BEEN  M AY1 - T AH0 V - B IH2 N\nMIGHT-HAVE-BEENS  M AY1 - T AH0 V - B IH2 N Z\nMIGHTIER  M AY1 - T IY0 - ER0\nMIGHTIEST  M AY1 - T IY0 - AH0 S T\nMIGHTILY  M AY1 - T AH0 - L IY0\nMIGHTN'T  M AY1 - T AH0 N T\nMIGHTY  M AY1 - T IY0\nMIGLIACCIO  M IY0 G - L IY0 - AA1 - CH IY0 - OW0\nMIGLIORE  M IY0 G - L IY0 - AO1 - R IY0\nMIGNANELLI  M IH0 G - N AH0 - N EH1 - L IY0\nMIGNANO  M IY0 G - N AA1 - N OW0\nMIGNEAULT  M IH0 G - N OW1\nMIGNOGNA  M IY0 G - N OW1 G - N AH0\nMIGNON  M IH1 G - N AH0 N\nMIGNONE  M IY0 G - N OW1 - N IY0\nMIGNONS  M IH1 G - N AH0 N Z\nMIGRA  M IH1 - G R AH0\nMIGRAINE  M AY1 - G R EY2 N\nMIGRAINES  M AY1 - G R EY2 N Z\nMIGRANT  M AY1 - G R AH0 N T\nMIGRANTS  M AY1 - G R AH0 N T S\nMIGRATE  M AY1 - G R EY2 T\nMIGRATED  M AY1 - G R EY2 - T IH0 D\nMIGRATING  M AY1 - G R EY2 - T IH0 NG\nMIGRATION  M AY0 - G R EY1 - SH AH0 N\nMIGRATIONS  M AY0 - G R EY1 - SH AH0 N Z\nMIGRATORY  M AY1 - G R AH0 - T AO2 - R IY0\nMIGS  M IH1 G Z\nMIGUEL  M IH0 - G EH1 L\nMIGUES  M IY1 - G EH0 S\nMIGUEZ  M IY0 - G EH1 Z\nMIHAI  M IY2 - HH AY1\nMIHAI'S  M IY2 - HH AY1 Z\nMIHAL  M AY1 - HH AH0 L\nMIHALEK  M IH1 - HH AH0 - L EH0 K\nMIHALIC  M IH0 - HH AE1 - L IH0 K\nMIHALIK  M IH1 - HH AH0 - L IH0 K\nMIHALKO  M IH0 - HH AE1 L - K OW0\nMIHALY  M IH1 - HH AH0 - L IY0\nMIHELICH  M IH1 - HH IH0 - L IH0 K\nMIHM  M IH1 M\nMIHN  M IH1 N\nMIHN'S  M IH1 N Z\nMIHOK  M IH1 - HH AH0 K\nMIJARES  M IY0 - Y AA1 - R EH0 S\nMIKA  M IY1 - K AH0\nMIKADO  M IH0 - K AA1 - D OW0\nMIKAEL  M AH0 - K EY1 L\nMIKAELA  M IY0 - K EY1 - L AH0\nMIKAKO  M IY0 - K AA1 - K OW0\nMIKAL  M IY1 - K AH0 L\nMIKE  M AY1 K\nMIKE'S  M AY1 K S\nMIKEL  M IH1 - K AH0 L\nMIKELL  M IH1 - K AH0 L\nMIKELS  M IH1 - K AH0 L Z\nMIKELSON  M IH1 - K IH0 L - S AH0 N\nMIKES  M AY1 K S\nMIKESELL  M IH1 - K IH0 - S AH0 L\nMIKESH  M IH1 - K IH0 SH\nMIKESKA  M IH0 - K EH1 - S K AH0\nMIKEY  M AY1 - K IY0\nMIKHAIL  M IH0 - K EY1 L\nMIKHAIL(2)  M IH0 - K AY1 L\nMIKIDU  M IH0 - K IY1 - D UW0\nMIKITA  M IH0 - K IY1 - T AH0\nMIKKELSEN  M IH0 - K EH1 L - S AH0 N\nMIKKELSON  M IH1 - K IH0 L - S AH0 N\nMIKKOLA  M IH0 - K OW1 - L AH0\nMIKLAS  M AY1 - K L AH0 Z\nMIKLES  M AY1 - K AH0 L Z\nMIKLOS  M IY1 - K L OW0 S\nMIKO  M AY1 - K OW0\nMIKOL  M IH1 - K AO0 L\nMIKOLAJCZAK  M IH0 - K AA1 - L AY0 - CH AE0 K\nMIKOLAJCZYK  M IH0 - K AA1 - L AY0 - CH IH0 K\nMIKOS  M AY1 - K OW0 Z\nMIKRUT  M IH1 - K R AH0 T\nMIKSCH  M IH1 K SH\nMIKULA  M IH0 - K UW1 - L AH0\nMIKULAK  M IH0 - K UW1 - L AH0 K\nMIKULEC  M IH0 - K UW1 - L IH0 K\nMIKULIC  M IH0 - K UW1 - L IH0 K\nMIKULICH  M IH0 - K Y UW1 - L IH0 HH\nMIKULSKI  M IH0 - K AH1 L - S K IY0\nMIKUS  M AY1 - K AH0 S\nMIKVA  M IH1 K - V AH0\nMIL  M IH1 L\nMILACRON  M IH1 - L AH0 - K R AA0 N\nMILACRON'S  M IH1 - L AH0 - K R AA0 N Z\nMILADIC  M IH0 - L AA1 - D IH0 K\nMILAGRO  M IH0 - L AE1 - G R OW0\nMILAM  M IH1 - L AH0 M\nMILAN  M AH0 - L AA1 N\nMILAN'S  M IH0 - L AA1 N Z\nMILAN(2)  M IH0 - L AA1 N\nMILAN(3)  M AY1 - L AE2 N\nMILANI  M IY0 - L AA1 - N IY0\nMILANO  M IY0 - L AA1 - N OW0\nMILANOWSKI  M IH0 - L AH0 - N AO1 F S - K IY0\nMILARDO  M IY0 - L AA1 R - D OW0\nMILAS  M AY1 - L AH0 Z\nMILAZZO  M IY0 - L AA1 - Z OW0\nMILBANK  M IH1 L - B AE2 NG K\nMILBAUER  M IH1 L - B AW0 - ER0\nMILBERG  M IH1 L - B ER0 G\nMILBERGER  M IH1 L - B ER0 - G ER0\nMILBOURN  M IH0 L - B UH1 R N\nMILBOURNE  M IH0 L - B UH1 R N\nMILBRANDT  M IH1 L - B R AH0 N T\nMILBRATH  M IH1 L - B R AH0 TH\nMILBURN  M IH1 L - B ER2 N\nMILBY  M IH1 L - B IY0\nMILCH  M IH1 L CH\nMILCO  M IH1 L - K OW0\nMILD  M AY1 L D\nMILDENBERGER  M AY1 L - D AH0 N - B ER0 - G ER0\nMILDER  M AY1 L - D ER0\nMILDEST  M AY1 L - D AH0 S T\nMILDEW  M IH1 L - D UW2\nMILDEWS  M IH1 L - D UW2 Z\nMILDLY  M AY1 L D - L IY0\nMILDRED  M IH1 L - D R IH0 D\nMILDRID  M IH1 L - D ER0 - IH0 D\nMILE  M AY1 L\nMILEAGE  M AY1 - L AH0 JH\nMILEAGE(2)  M AY1 - L IH0 JH\nMILEHAM  M IH1 - L IH0 - HH AE0 M\nMILEM  M IH1 - L AH0 M\nMILER  M AY1 - L ER0\nMILES  M AY1 L Z\nMILES(2)  M AY1 - AH0 L Z\nMILESKI  M IH0 - L EH1 S - K IY0\nMILESTONE  M AY1 L - S T OW2 N\nMILESTONES  M AY1 L - S T OW2 N Z\nMILETICH  M IH1 - L IH0 - T IH0 K\nMILEWSKI  M IH0 - L EH1 F S - K IY0\nMILEY  M AY1 - L IY0\nMILFORD  M IH1 L - F ER0 D\nMILGRAM  M IH1 L - G R AE2 M\nMILHAM  M IH1 L - HH AH0 M\nMILHOAN  M IH1 L - HH OW0 N\nMILHOLLAND  M IH1 L - HH AH0 - L AH0 N D\nMILHOLLIN  M IH0 L - HH AA1 - L IH0 N\nMILHORN  M IH1 L - HH ER0 N\nMILHOUS  M IH1 L - HH AW2 S\nMILHOUSE  M IH1 L - HH AW2 S\nMILIAN  M IH1 - L IY0 - AH0 N\nMILICENT  M IH1 - L IH0 - S IH0 N T\nMILICH  M IH1 - L IH0 K\nMILICI  M IY0 - L IY1 - CH IY0\nMILIEU  M IH0 - L Y UH1\nMILILITER  M IH1 - L IH0 - L IY2 - T ER0\nMILISSENT  M IH1 - L IH0 - S AH0 N T\nMILITANCY  M IH1 - L AH0 - T AH0 N - S IY0\nMILITANT  M IH1 - L AH0 - T AH0 N T\nMILITANTLY  M IH1 - L IH0 - T AH0 N T - L IY0\nMILITANTS  M IH1 - L AH0 - T AH0 N T S\nMILITARIES  M IH1 - L AH0 - T EH2 - R IY0 Z\nMILITARILY  M IH2 - L AH0 - T EH1 - R AH0 - L IY0\nMILITARISM  M IH1 - L AH0 - T ER0 - IH2 - Z AH0 M\nMILITARISTIC  M IH2 - L IH0 - T ER0 - IH1 - S T IH0 K\nMILITARISTS  M IH1 - L AH0 - T ER0 - IH0 S T S\nMILITARISTS(2)  M IH1 - L AH0 - T ER0 - IH0 S S\nMILITARISTS(3)  M IH1 - L AH0 - T ER0 - IH0 S\nMILITARIZE  M IH1 - L AH0 - T ER0 - AY2 Z\nMILITARIZED  M IH1 - L AH0 - T ER0 - AY2 Z D\nMILITARY  M IH1 - L AH0 - T EH2 - R IY0\nMILITARY'S  M IH1 - L IH0 - T EH2 - R IY0 Z\nMILITARY(2)  M IH1 - L IH0 - T EH2 - R IY0\nMILITATE  M IH1 - L IH0 - T EY2 T\nMILITELLO  M IY0 - L IY0 - T EH1 - L OW0\nMILITIA  M AH0 - L IH1 - SH AH0\nMILITIA'S  M AH0 - L IH1 - SH AH0 Z\nMILITIA'S(2)  M IH0 - L IH1 - SH AH0 Z\nMILITIA(2)  M IH0 - L IH1 - SH AH0\nMILITIAMEN  M AH0 - L IH1 - SH AH0 - M IH0 N\nMILITIAS  M AH0 - L IH1 - SH AH0 Z\nMILITIAS(2)  M IH0 - L IH1 - SH AH0 Z\nMILITO  M IY0 - L IY1 - T OW0\nMILIUS  M AY1 - L IY0 - IH0 S\nMILK  M IH1 L K\nMILKE  M IH1 L K\nMILKED  M IH1 L K T\nMILKEN  M IH1 L - K AH0 N\nMILKEN'S  M IH1 L - K AH0 N Z\nMILKENS  M IH1 L - K AH0 N Z\nMILKENS'  M IH1 L - K AH0 N Z\nMILKING  M IH1 L - K IH0 NG\nMILKMAN  M IH1 L K - M AE2 N\nMILKO  M IH1 L - K OW0\nMILKOVICH  M IH1 L - K AH0 - V IH0 CH\nMILKOWSKI  M IH0 L - K AO1 F S - K IY0\nMILKS  M IH1 L K S\nMILKSHAKE  M IH1 L K - SH EY2 K\nMILKWEED  M IH1 L K - W IY2 D\nMILKY  M IH1 L - K IY0\nMILL  M IH1 L\nMILL'S  M IH1 L Z\nMILLAGE  M IH1 - L IH0 JH\nMILLAN  M IH1 - L AH0 N\nMILLAR  M IH1 - L ER0\nMILLARD  M IH1 - L ER0 D\nMILLARD'S  M IH1 - L ER0 D Z\nMILLAU  M IH1 - L AW0\nMILLAY  M IH0 - L EY1\nMILLBANK  M IH1 L - B AE2 NG K\nMILLBURN  M IH1 L - B ER0 N\nMILLE  M IH1 L\nMILLED  M IH1 L D\nMILLEDGE  M IH1 - L IH0 JH\nMILLEN  M IH1 - L AH0 N\nMILLENDER  M IH1 - L EH0 N - D ER0\nMILLENNIA  M AH0 - L EH1 - N IY0 - AH0\nMILLENNIAL  M IH0 - L EH1 - N IY0 - AH0 L\nMILLENNIUM  M AH0 - L EH1 - N IY0 - AH0 M\nMILLENNIUMS  M AH0 - L EH1 - N IY0 - AH0 M Z\nMILLER  M IH1 - L ER0\nMILLER'S  M IH1 - L ER0 Z\nMILLERBROOK  M IH1 - L ER0 - B R UH2 K\nMILLERICK  M IH1 - L ER0 - IH0 K\nMILLERS  M IH1 - L ER0 Z\nMILLESON  M IH1 - L IH0 - S AH0 N\nMILLET  M IH1 - L AH0 T\nMILLETS  M IH1 - L AH0 T S\nMILLETT  M IH1 - L IH0 T\nMILLETTE  M IH0 - L EH1 T\nMILLEY  M IH1 - L IY0\nMILLHOUSE  M IH1 L - HH AW2 S\nMILLI  M IH1 - L IY0\nMILLIBAR  M IH1 - L AH0 - B AA2 R\nMILLICAN  M IH1 - L IH0 - K AH0 N\nMILLICENT  M IH1 - L IH0 - S IH0 N T\nMILLICOM  M IH1 - L IH0 - K AA0 M\nMILLICOM'S  M IH1 - L IH0 - K AA0 M Z\nMILLIE  M IH1 - L IY0\nMILLIET  M IH1 - L IY0 - EH2 T\nMILLIGAL  M IH1 - L IH0 - G AH0 L\nMILLIGAN  M IH1 - L IH0 - G AH0 N\nMILLIGAUSS  M IH1 - L IY0 - G AW2 S\nMILLIGRAM  M IH1 - L AH0 - G R AE2 M\nMILLIGRAMS  M IH1 - L AH0 - G R AE2 M Z\nMILLIKAN  M IH1 - L AH0 - K AH0 N\nMILLIKEN  M IH1 - L IH0 - K AH0 N\nMILLIKIN  M IH1 - L IH0 - K IH0 N\nMILLILITER  M IH1 - L AH0 - L IY2 - T ER0\nMILLILITERS  M IH1 - L AH0 - L IY2 - T ER0 Z\nMILLIMAN  M IH1 - L IH0 - M AH0 N\nMILLIMETER  M IH1 - L AH0 - M IY2 - T ER0\nMILLIMETERS  M IH1 - L AH0 - M IY2 - T ER0 Z\nMILLIN  M IH1 - L AH0 N\nMILLINER  M IH1 - L IH0 - N ER0\nMILLING  M IH1 - L IH0 NG\nMILLINGTON  M IH1 - L IH0 NG - T AH0 N\nMILLION  M IH1 - L Y AH0 N\nMILLIONAIRE  M IH2 - L Y AH0 - N EH1 R\nMILLIONAIRE'S  M IH2 - L Y AH0 - N EH1 R Z\nMILLIONAIRES  M IH2 - L Y AH0 - N EH1 R Z\nMILLIONS  M IH1 - L Y AH0 N Z\nMILLIONTH  M IH1 - L Y AH0 N TH\nMILLIONTHS  M IH1 L - Y AH0 N T TH S\nMILLIPORE  M IH1 - L IH0 - P AO2 R\nMILLIRON  M IH1 - L ER0 - AH0 N\nMILLIRONS  M IH1 - L ER0 - OW0 N Z\nMILLIS  M IH1 - L IH0 S\nMILLISECOND  M IH1 - L IH0 - S EH2 - K AH0 N D\nMILLISECONDS  M IH1 - L IH0 - S EH2 - K AH0 N D Z\nMILLISENT  M IH1 - L AH0 - S AH0 N T\nMILLMAN  M IH1 L - M AH0 N\nMILLN  M IH1 L N\nMILLNER  M IH1 L - N ER0\nMILLON  M IH1 - L AH0 N\nMILLOY  M IH1 - L OY0\nMILLS  M IH1 L Z\nMILLS'  M IH1 L Z\nMILLS'S  M IH1 L - Z IH0 Z\nMILLSAP  M IH1 L - S AE2 P\nMILLSAPS  M IH1 L - S AE2 P S\nMILLSPAUGH  M IH1 L - S P AO0\nMILLSTEIN  M IH1 L - S T AY2 N\nMILLSTEIN(2)  M IH1 L - S T IY2 N\nMILLSTONE  M IH1 L - S T OW2 N\nMILLWARD  M IH1 L - W ER0 D\nMILLWOOD  M IH1 L - W UH2 D\nMILLY  M IH1 - L IY0\nMILMAN  M IH1 L - M AH0 N\nMILNE  M IH1 L N\nMILNER  M IH1 L - N ER0\nMILNES  M IH1 L N Z\nMILO  M AY1 - L OW0\nMILODIC  M IH0 - L OW1 - D IH0 K\nMILONAS  M IY0 - L OW1 - N AA0 Z\nMILONE  M IH0 - L OW1 N\nMILOS  M IY1 - L OW0 Z\nMILOSEVIC  M IH0 - L OW1 - S AH0 - V IH0 K\nMILOSEVIC'S  M IH0 - L OW1 - S AH0 - V IH0 - CH IH0 Z\nMILOSEVIC(2)  M IH0 - L OW1 - S AH0 - V IH0 CH\nMILOSEVICH  M IH0 - L AA1 - S IH0 - V IH0 CH\nMILOSH  M IH0 - L AO1 SH\nMILOT  M IH1 - L AH0 T\nMILPITAS  M IH0 L - P IY1 - T AH0 S\nMILROY  M IH1 L - R OY2\nMILS  M IH1 L Z\nMILSAP  M IH1 L - S AE2 P\nMILSON  M IH1 L - S AH0 N\nMILSTEAD  M IH1 L - S T EH2 D\nMILSTEIN  M IH1 L - S T AY2 N\nMILSTEIN(2)  M IH1 L - S T IY2 N\nMILT  M IH1 L T\nMILTENBERGER  M IH1 L - T AH0 N - B ER0 - G ER0\nMILTIE  M IH1 - T IY0\nMILTNER  M IH1 L T - N ER0\nMILTON  M IH1 L - T AH0 N\nMILTONIC  M IH0 L - T AA1 - N IH0 K\nMILUM  M IH1 - L AH0 M\nMILUNOVICH  M IH0 - L UW1 - N AH0 - V IH0 CH\nMILWARD  M IH1 L - W ER0 D\nMILWAUKEE  M IH0 L - W AO1 - K IY0\nMILWAUKEE'S  M IH0 L - W AO1 - K IY0 Z\nMILZ  M IH1 L Z\nMIM  M IH1 M\nMIMBS  M IH1 M Z\nMIME  M AY1 M\nMIMEOGRAPH  M IH1 - M IY0 - AH0 - G R AE2 F\nMIMI  M IY1 - M IY0\nMIMI'S  M IY1 - M IY0 Z\nMIMIC  M IH1 - M IH0 K\nMIMICKED  M IH1 - M IH0 K T\nMIMICKING  M IH1 - M IH0 - K IH0 NG\nMIMICRY  M IH1 - M IH0 - K R IY0\nMIMICS  M IH1 - M IH0 K S\nMIMIS  M IY1 - M IY0 Z\nMIMMS  M IH1 M Z\nMIMNAUGH  M IH1 M - N AW0\nMIMOSA  M IH0 - M OW1 - S AH0\nMIMS  M IH1 M Z\nMIN  M IH1 N\nMINA  M IY1 - N AH0\nMINA(2)  M IH1 - N AH0\nMINAHAN  M IH1 - N AH0 - HH AE0 N\nMINAMI  M IY0 - N AA1 - M IY0\nMINAMIDE  M IH2 - N AH0 - M IY1 - D EY0\nMINAR  M AY1 - N ER0\nMINARD  M IH0 - N AA1 R D\nMINARDOS  M IH0 - N AA1 R - D OW0 S\nMINARET  M IH2 - N ER0 - EH1 T\nMINARETS  M IH2 - N ER0 - EH1 T S\nMINARIK  M IH1 - N ER0 - IH0 K\nMINAS  M IY1 - N AH0 S\nMINASIAN  M IH0 - N AE1 - ZH IH0 N\nMINASIAN(2)  M IH0 - N EY1 - ZH IH0 N\nMINASSIAN  M IH0 - N AE1 - S ZH IH0 N\nMINATOME  M IH1 - N AH0 - T OW2 M\nMINC  M IH1 NG K\nMINCE  M IH1 N S\nMINCED  M IH1 N S T\nMINCEMEAT  M IH1 N S - M IY2 T\nMINCER  M IH1 N - S ER0\nMINCEY  M IH1 N - S IY0\nMINCH  M IH1 N CH\nMINCHER  M IH1 N - CH ER0\nMINCHEW  M IH1 N - CH Y UW0\nMINCHEY  M IH1 N - CH IY0\nMINCHIN  M IH1 N - CH IH0 N\nMINCING  M IH1 N - S IH0 NG\nMINCKLER  M IH1 NG - K L ER0\nMINCKS  M IH1 NG K S\nMINCY  M IH1 N - S IY0\nMIND  M AY1 N D\nMIND'S  M AY1 N D Z\nMINDA  M IH1 N - D AH0\nMINDANAO  M IH2 N - D AH0 - N AW1\nMINDANAO(2)  M IH2 N - D AH0 - N EY1 - OW0\nMINDBOGGLING  M AY1 N D - B AO2 - G L IH0 NG\nMINDED  M AY1 N - D AH0 D\nMINDED(2)  M AY1 N - D IH0 D\nMINDEDLY  M AY1 N - D IH0 D - L IY0\nMINDEDNESS  M AY1 N - D IH0 D - N AH0 S\nMINDEL  M IH1 N - D AH0 L\nMINDEN  M AY1 N - D AH0 N\nMINDER  M AY1 N - D ER0\nMINDFUL  M AY1 N D - F AH0 L\nMINDING  M AY1 N - D IH0 NG\nMINDLESS  M AY1 N D - L AH0 S\nMINDLESSLY  M AY1 N D - L AH0 S - L IY0\nMINDLIN  M IH1 N D - L IH0 N\nMINDS  M AY1 N D Z\nMINDSET  M AY1 N D - S EH2 T\nMINDY  M IH1 N - D IY0\nMINE  M AY1 N\nMINE'S  M AY1 N Z\nMINEA  M IH0 - N IY1 - AH0\nMINEAR  M IH0 - N IH1 R\nMINEAU  M IH0 - N OW1\nMINEBEA  M IH2 - N AH0 - B IY1 - AH0\nMINED  M AY1 N D\nMINEER  M AY1 - N ER0\nMINEFIELD  M AY1 N - F IY2 L D\nMINEFIELDS  M AY1 N - F IY2 L D Z\nMINEHAN  M IH1 - N IH0 - HH AE0 N\nMINEHART  M AY1 N - HH AA2 R T\nMINELLA  M IH0 - N EH1 - L AH0\nMINELLI  M IH0 - N EH1 - L IY0\nMINEO  M IH1 - N IY0 - OW0\nMINEOLA  M IH2 - N IY0 - OW1 - L AH0\nMINEOWNER  M AY1 - N OW2 - N ER0\nMINEOWNERS  M AY1 - N OW2 - N ER0 Z\nMINER  M AY1 - N ER0\nMINER'S  M AY1 - N ER0 Z\nMINERA  M IH0 - N EH1 - R AH0\nMINERAL  M IH1 - N ER0 - AH0 L\nMINERAL'S  M IH1 - N ER0 - AH0 L Z\nMINERAL'S(2)  M IH1 N - R AH0 L Z\nMINERAL(2)  M IH1 N - R AH0 L\nMINERALIZATION  M IH2 - N ER0 - AH0 - L AH0 - Z EY1 - SH AH0 N\nMINERALIZE  M IH1 - N ER0 - AH0 - L AY2 Z\nMINERALOGICALLY  M IH2 - N ER0 - AH0 - L AA1 - JH IH0 - K AH0 - L IY0\nMINERALOGICALLY(2)  M IH2 - N ER0 - AH0 - L AA1 - JH IH0 K - L IY0\nMINERALOGIST  M IH2 - N ER0 - AE1 - L AH0 - JH IH0 S T\nMINERALOGIST(2)  M IH2 - N ER0 - AA1 - L AH0 - JH IH0 S T\nMINERALOGY  M IH2 - N ER0 - AA1 - L AH0 - JH IY0\nMINERALS  M IH1 - N ER0 - AH0 L Z\nMINERALS'  M IH1 - N ER0 - AH0 L Z\nMINERALS'(2)  M IH1 N - R AH0 L Z\nMINERALS(2)  M IH1 N - R AH0 L Z\nMINERD  M IH1 - N ER0 D\nMINERS  M AY1 - N ER0 Z\nMINERS'  M AY1 - N ER0 Z\nMINERVA  M AH0 - N ER1 - V AH0\nMINERVA(2)  M IH0 - N ER1 - V AH0\nMINERVINI  M IY2 - N ER0 - V IY1 - N IY0\nMINES  M AY1 N Z\nMINES'  M AY1 N Z\nMINESWEEPER  M AY1 N - S W IY2 - P ER0\nMINESWEEPERS  M AY1 N - S W IY2 - P ER0 Z\nMINET  M IH1 - N IH0 T\nMINET(2)  M AY1 - N AH0 T\nMINETA  M IH0 - N EY1 - T AH0\nMINETTE  M IH0 - N EH1 T\nMINEWORKER  M AY1 N - W ER2 - K ER0\nMINEWORKERS  M AY1 N - W ER2 - K ER0 Z\nMING  M IH1 NG\nMING-JEN  M IH1 NG - JH EH1 N\nMINGE  M IH1 N JH\nMINGER  M IH1 - NG ER0\nMINGES  M IH1 N - JH IH0 Z\nMINGLE  M IH1 NG - G AH0 L\nMINGLED  M IH1 NG - G AH0 L D\nMINGLES  M IH1 NG - G AH0 L Z\nMINGLING  M IH1 NG - G AH0 L - IH0 NG\nMINGLING(2)  M IH1 NG - G L IH0 NG\nMINGO  M IY1 NG - G OW0\nMINGS  M IH1 NG Z\nMINGUS  M IH1 NG - G IH0 S\nMINH  M IH1 N\nMINI  M IH1 - N IY0\nMINI-COST  M IH1 - N IY0 - K AO2 S T\nMINIARD  M IH1 N - Y ER0 D\nMINIATURE  M IH1 - N IY0 - AH0 - CH UH2 R\nMINIATURE(2)  M IH1 - N IH0 - CH UH2 R\nMINIATURES  M IH1 - N IY0 - AH0 - CH ER0 Z\nMINIATURES(2)  M IH1 - N IH0 - CH ER0 Z\nMINIATURIZATION  M IH2 - N IY0 - AH0 - CH ER0 - IH0 - Z EY1 - SH AH0 N\nMINIATURIZE  M IH1 - N IH0 - CH ER0 - AY2 Z\nMINIATURIZED  M IH1 - N IH0 - CH ER0 - AY2 Z D\nMINIBUS  M IH1 - N IY0 - B AH2 S\nMINIBUSES  M IH1 - N IY0 - B AH2 - S IH0 Z\nMINICAR  M IH1 - N IY0 - K AA2 R\nMINICARS  M IH1 - N IY0 - K AA1 R Z\nMINICH  M IH1 - N IH0 CH\nMINICHIELLO  M IY0 - N IY0 - K IY0 - EH1 - L OW0\nMINICK  M IH1 - N IH0 K\nMINICOMPUTER  M IH1 - N IY0 - K AH0 M - P Y UW1 - T ER0\nMINICOMPUTERS  M IH1 - N IY0 - K AH0 M - P Y UW1 - T ER0 Z\nMINICUCCI  M IY0 - N IY0 - K UW1 - CH IY0\nMINIDISC  M IH1 - N IY0 - D IH2 S K\nMINIER  M IH1 - N IY0 - ER0\nMINIHAN  M IH1 - N IH0 - HH AE0 N\nMINILAB  M IH1 - N IY0 - L AE2 B\nMINILABS  M IH1 - N IY0 - L AE2 B Z\nMINIMAL  M IH1 - N AH0 - M AH0 L\nMINIMALISM  M IH1 - N AH0 - M AH0 - L IH2 - Z AH0 M\nMINIMALIST  M IH1 - N AH0 - M AH0 - L IH0 S T\nMINIMALLY  M IH1 - N AH0 - M AH0 L - IY0\nMINIMILL  M IH1 - N IY0 - M AA2 L\nMINIMILLS  M IH1 - N IY0 - M IH1 L Z\nMINIMIZE  M IH1 - N AH0 - M AY2 Z\nMINIMIZED  M IH1 - N AH0 - M AY2 Z D\nMINIMIZES  M IH1 - N AH0 - M AY2 - Z AH0 Z\nMINIMIZING  M IH1 - N AH0 - M AY2 - Z IH0 NG\nMINIMUM  M IH1 - N AH0 - M AH0 M\nMINIMUMS  M IH1 - N IH0 - M AH0 M Z\nMINING  M AY1 - N IH0 NG\nMINING'S  M AY1 - N IH0 NG Z\nMININGER  M AY1 - N IH0 - NG ER0\nMINION  M IH1 - N Y AH0 N\nMINIONS  M IH1 - N Y AH0 N Z\nMINIS  M IH1 - N IY0 Z\nMINISCRIBE  M IH1 - N IY0 - S K R AY1 B\nMINISCULE  M IH1 - N IH0 - S K Y UW0 L\nMINISERIES  M IH1 - N IH0 - S EH2 - R IY0 Z\nMINISERIES(2)  M IH1 - N IY0 - S EH2 - R IY0 Z\nMINISH  M IH1 - N IH0 SH\nMINISKIRT  M IH1 - N IY0 - S K ER2 T\nMINISKIRTS  M IH1 - N IY0 - S K ER2 T S\nMINISTER  M IH1 - N AH0 - S T ER0\nMINISTER'S  M IH1 - N IH0 - S T ER0 Z\nMINISTER(2)  M IH1 - N IH0 - S T ER0\nMINISTERIAL  M IH2 - N IH0 - S T IY1 - R IY0 - AH0 L\nMINISTERING  M IH1 - N IH0 - S T R IH0 NG\nMINISTERS  M IH1 - N AH0 - S T ER0 Z\nMINISTERS'  M IH1 - N IH0 - S T ER0 Z\nMINISTERS(2)  M IH1 - N IH0 - S T ER0 Z\nMINISTERSHIP  M IH1 - N IH0 - S T ER0 - SH IH0 P\nMINISTRATION  M IH2 - N AH0 S - T R EY1 - SH AH0 N\nMINISTRATIONS  M IH2 - N AH0 S - T R EY1 - SH AH0 N Z\nMINISTRIES  M IH1 - N IH0 - S T R IY0 Z\nMINISTRY  M IH1 - N AH0 S - T R IY0\nMINISTRY'S  M IH1 - N AH0 S - T R IY0 Z\nMINISTRY(2)  M IH1 - N IH0 - S T R IY0\nMINISUPERCOMPUTER  M IH2 - N IY0 - S UW1 - P ER0 - K AH2 M - P Y UW2 - T ER0\nMINISUPERCOMPUTERS  M IH2 - N IY0 - S UW1 - P ER0 - K AH2 M - P Y UW2 - T ER0 Z\nMINIT  M IH1 - N IH0 T\nMINITEL  M IH1 - N AH0 - T EH2 L\nMINIUM  M IH1 - N IY0 - AH0 M\nMINIVAN  M IH1 - N IY0 - V AE1 N\nMINIVANS  M IH1 - N IY0 - V AE1 N Z\nMINIX  M IH1 - N IH0 K S\nMINJARES  M IY0 N - Y AA1 - R EH0 S\nMINJAREZ  M IY0 - N Y AA1 - R EH0 Z\nMINK  M IH1 NG K\nMINKE  M IH1 NG K\nMINKEL  M IH1 NG - K AH0 L\nMINKIN  M IH1 NG - K IH0 N\nMINKLER  M IH1 NG - K L ER0\nMINKOFF  M IH1 NG - K AO2 F\nMINKOW  M IH1 NG - K AW0\nMINKS  M IH1 NG K S\nMINNA  M IH1 - N AH0\nMINNAAR  M IH0 - N AA1 R\nMINNEAPOLIS  M IH2 - N IY0 - AE1 - P AH0 - L IH0 S\nMINNEAPOLIS'S  M IH2 - N IY0 - AE1 - P AH0 - L IH0 - S IH0 Z\nMINNELLI  M IH0 - N EH1 - L IY0\nMINNER  M IH1 - N ER0\nMINNESOTA  M IH2 - N IH0 - S OW1 - T AH0\nMINNESOTA'S  M IH2 - N AH0 - S OW1 - T AH0 Z\nMINNESOTAN  M IH2 - N AH0 - S OW1 - T AH0 N\nMINNESOTANS  M IH2 - N AH0 - S OW1 - T AH0 N Z\nMINNETONKA  M IH2 - N IH0 - T AO1 NG - K AH0\nMINNEY  M IH1 - N IY0\nMINNICH  M IH1 - N IH0 CH\nMINNICK  M IH1 - N IH0 K\nMINNIE  M IH1 - N IY0\nMINNIE'S  M IH1 - N IY0 Z\nMINNIEAR  M IH1 - N IY0 - IH2 R\nMINNIFIELD  M IH1 - N AH0 - F IY2 L D\nMINNIG  M IH1 - N IH0 G\nMINNIS  M IH1 - N IH0 S\nMINNITI  M IY0 - N IY1 - T IY0\nMINNIX  M IH1 - N IH0 K S\nMINNOW  M IH1 - N OW0\nMINNOWS  M IH1 - N OW0 Z\nMINNS  M IH1 N Z\nMINNTECH  M IH1 N - T EH2 K\nMINNY  M IH1 - N IY0\nMINO  M IY1 - N OW0\nMINOAN  M AH0 - N OW1 - AH0 N\nMINOGUE  M IY1 - N AO0 G\nMINOGUE(2)  M AH0 - N OW1 - G IY0\nMINOLI  M IH0 - N OW1 - L IY0\nMINOLTA  M IH0 - N AA1 L - T AH2\nMINOLTA(2)  M IH0 - N OW1 L - T AH0\nMINOR  M AY1 - N ER0\nMINORCA  M AH0 - N AO1 R - K AH0\nMINORCO  M IH0 - N AO1 R - K OW0\nMINORCO'S  M IH0 - N AO1 R - K AH0 Z\nMINORED  M AY1 - N ER0 D\nMINORING  M AY1 - N ER0 - IH0 NG\nMINORITE  M IH1 - N ER0 - AY2 T\nMINORITIES  M AY0 - N AO1 - R AH0 - T IY0 Z\nMINORITIES(2)  M AH0 - N AO1 - R AH0 - T IY0 Z\nMINORITY  M AY0 - N AO1 - R AH0 - T IY0\nMINORITY(2)  M AH0 - N AO1 - R AH0 - T IY0\nMINORS  M AY1 - N ER0 Z\nMINORU  M IH0 - N AO1 - R UW0\nMINOT  M IH1 - N AH0 T\nMINOTT  M IH1 - N AH0 T\nMINOTTI  M IH0 - N AO1 - T IY0\nMINOW  M IH1 - N OW0\nMINOXIDIL  M IH0 - N AA1 K - S IH0 - D IH0 L\nMINPECO  M IH0 N - P EH1 - K OW0\nMINSHALL  M IH1 N - SH AH0 L\nMINSHEW  M IH1 N - SH UW0\nMINSK  M IH1 N S K\nMINSKOFF  M IH1 N - S K AO0 F\nMINSKY  M IH1 N - S K IY0\nMINSON  M IH1 N - S AH0 N\nMINSTAR  M IH1 N - S T AA2 R\nMINSTAR'S  M IH1 N - S T AA2 R Z\nMINSTER  M IH1 N - S T ER0\nMINSTREL  M IH1 N - S T R AH0 L\nMINSTRELS  M IH1 N - S T R AH0 L Z\nMINT  M IH1 N T\nMINT'S  M IH1 N T S\nMINTA  M IH1 N - T AH0\nMINTAGE  M IH1 N - T AH0 JH\nMINTAGE(2)  M IH1 N - T IH0 JH\nMINTED  M IH1 N - T IH0 D\nMINTEER  M IH1 N - T IH1 R\nMINTER  M IH1 N - T ER0\nMINTHA  M IH1 N - TH AH0\nMINTIER  M IH1 N - T IY0 - ER0\nMINTING  M IH1 N - T IH0 NG\nMINTO  M IH1 N - T OW0\nMINTON  M IH1 N - T AH0 N\nMINTS  M IH1 N T S\nMINTURN  M IH1 N - T ER2 N\nMINTZ  M IH1 N T S\nMINTZER  M IH1 N T - Z ER0\nMINUET  M IH2 - N Y AH0 W - EH1 T\nMINUS  M AY1 - N AH0 S\nMINUSCULE  M IH1 - N AH0 - S K Y UW2 L\nMINUSES  M AY1 - N AH0 - S IH0 Z\nMINUTE  M IH1 - N AH0 T\nMINUTE'S  M IH1 - N AH0 T S\nMINUTE(2)  M AY0 - N UW1 T\nMINUTE(3)  M AY0 - N Y UW1 T\nMINUTELY  M IH1 - N AH0 T - L IY0\nMINUTEMAN  M IH1 - N AH0 T - M AE2 N\nMINUTEMEN  M IH1 - N AH0 T - M EH2 N\nMINUTES  M IH1 - N AH0 T S\nMINUTES'  M IH1 - N AH0 T S\nMINUTIA  M IH0 - N UW1 - SH IY0 - AH0\nMINUTIAE  M IH0 - N UW1 - SH IY0 - AH0\nMINYARD  M IH1 N - Y AA0 R D\nMIOCENE  M AY1 - AH0 - S IY2 N\nMION  M AY1 - AH0 N\nMIONE  M AY2 - OW1 N\nMIOT  M AY1 - AH0 T\nMIOTKE  M AY2 - AA1 T - K IY0\nMIOTKE(2)  M Y AA1 T - K IY0\nMIPS  M IH1 P S\nMIR  M IH1 R\nMIRA  M IH1 - R AH0\nMIRABAL  M IH1 - R AH0 - B AH0 L\nMIRABEL  M IH0 - R AA0 - B EH1 L\nMIRABELLA  M IH0 - R AA0 - B EH1 - L AH0\nMIRABELLE  M AO1 - R AH0 - B AH0 L\nMIRABELLI  M IH0 - R AA0 - B EH1 - L IY0\nMIRABILE  M IH0 - R AA1 - B AH0 L\nMIRABITO  M IH0 - R AA0 - B IY1 - T OW0\nMIRACID  M IH2 - R AE1 - S AH0 D\nMIRACID'S  M IH2 - R AE1 - S AH0 D Z\nMIRACLE  M IH1 - R AH0 - K AH0 L\nMIRACLES  M IH1 - R AH0 - K AH0 L Z\nMIRACULOUS  M ER0 - AE1 - K Y AH0 - L AH0 S\nMIRACULOUSLY  M ER0 - AE1 - K Y AH0 - L AH0 S - L IY0\nMIRAD  M AH0 - R AE1 D\nMIRADA  M IH0 - R AA1 - D AH0\nMIRAGE  M ER0 - AA1 ZH\nMIRAGES  M ER0 - AA1 - ZH AH0 Z\nMIRAGLIA  M IH0 - R AE1 - G L IY0 - AH0\nMIRAK  M IH1 - R AE0 K\nMIRAMAR  M IH1 - R AH0 - M AA2 R\nMIRAMAX  M IH1 - R AH0 - M AE2 K S\nMIRAMAX'S  M IH1 - R AH0 - M AE2 K - S IH0 Z\nMIRAMONTES  M IH0 - R AA0 - M OW1 N - T EH0 S\nMIRANDA  M ER0 - AE1 N - D AH0\nMIRANDA'S  M ER0 - AE1 N - D AH0 Z\nMIRANDO  M IH0 - R AE1 N D - OW0\nMIRATEC  M IH1 - R AH0 - T EH2 K\nMIRE  M AY1 R\nMIRE(2)  M AY1 - ER0\nMIRED  M AY1 R D\nMIRELES  M IH0 - R EY1 - L EH0 S\nMIRELEZ  M IH0 - R EY1 - L EH0 Z\nMIRELL  M IH0 - R EH1 L\nMIRELLA  M IH0 - R EH1 - L AH0\nMIRELLE  M ER0 - EH1 L\nMIRENDA  M IH0 - R EH1 N - D AH0\nMIRES  M AY1 R Z\nMIRIAM  M IH1 - R IY0 - AH0 M\nMIRICK  M IH1 - R IH0 K\nMIRILLA  M IH0 - R IH1 - L AH0\nMIRKIN  M ER1 - K IH0 N\nMIRNA  M ER1 - N AH0\nMIRO  M IH1 - R OW0\nMIRO'S  M IH1 - R OW0 Z\nMIRO'S(2)  M IH0 - R OW1 Z\nMIRO(2)  M IH0 - R OW1\nMIRON  M IH0 - R AO1 N\nMIRONENKO  M IH2 - R OW0 - N EH1 NG - K OW0\nMIROSLAV  M IH1 - R AH0 - S L AA0 V\nMIRRA  M IH1 - R AH0\nMIRREN  M IH1 - R AH0 N\nMIRROR  M IH1 - R ER0\nMIRROR'S  M IH1 - R ER0 Z\nMIRRORED  M IH1 - R ER0 D\nMIRRORING  M IH1 - R ER0 - IH0 NG\nMIRRORS  M IH1 - R ER0 Z\nMIRSAD  M IH1 R - S AE2 D\nMIRSKY  M ER1 S - K IY0\nMIRTH  M ER1 TH\nMIRTI  M ER1 - T IY0\nMIRTI(2)  M ER1 - T IY2\nMIRTLE  M ER1 - T AH0 L\nMIRTO  M IH1 R - T OW0\nMIRV  M ER1 V\nMIRZA  M ER1 - Z AH0\nMIS  M IH1 S\nMISA  M IY1 - Z AH0\nMISA'S  M IY1 - Z AH0 Z\nMISADVENTURE  M IH0 S - AH0 D - V EH1 N - CH ER0\nMISADVENTURES  M IH0 S - AH0 D - V EH1 N - CH ER0 Z\nMISALLOCATE  M IH0 S - AE1 - L AH0 - K EY2 T\nMISALLOCATED  M IH0 S - AE1 - L AH0 - K EY2 - T IH0 D\nMISALLOCATION  M IH0 S - AE2 - L AH0 - K EY1 - SH AH0 N\nMISANTHROPE  M IH1 - S AH0 N - TH R OW2 P\nMISAPPLICATION  M IH0 S - AE2 - P L AH0 - K EY1 - SH AH0 N\nMISAPPLIED  M IH2 S - AH0 - P L AY1 D\nMISAPPLY  M IH0 S - AH0 - P L AY1\nMISAPPLYING  M IH0 S - AH0 - P L AY1 - IH0 NG\nMISAPPREHENSION  M IH0 S - AE2 - P R IY0 - HH EH1 N - SH AH0 N\nMISAPPROPRIATE  M IH0 S - AH0 - P R OW1 - P R IY0 - EY2 T\nMISAPPROPRIATED  M IH2 S - AH0 - P R OW1 - P R IY0 - EY2 - T IH0 D\nMISAPPROPRIATING  M IH2 S - AH0 - P R OW1 - P R IY0 - EY2 - T IH0 NG\nMISAPPROPRIATION  M IH2 S - AH0 - P R OW2 - P R IY0 - EY1 - SH AH0 N\nMISATER  M IH0 S - EY1 - T ER0\nMISAWA  M IH0 - S AA1 - W AH0\nMISBEGOTTEN  M IH2 S - B AH0 - G AA1 - T AH0 N\nMISBEHAVE  M IH2 S - B AH0 - HH EY1 V\nMISBEHAVE(2)  M IH2 S - B IY0 - HH EY1 V\nMISBEHAVED  M IH2 S - B AH0 - HH EY1 V D\nMISBEHAVED(2)  M IH2 S - B IY0 - HH EY1 V D\nMISBEHAVING  M IH2 S - B AH0 - HH EY1 - V IH0 NG\nMISBEHAVING(2)  M IH2 S - B IY0 - HH EY1 - V IH0 NG\nMISBEHAVIOR  M IH2 S - B AH0 - HH EY1 - V Y ER0\nMISBEHAVIOR(2)  M IH2 S - B IY0 - HH EY1 - V Y ER0\nMISBRENER  M IH1 S - B R EH2 - N ER0\nMISCALCULATE  M IH0 S - K AE1 L - K Y AH0 - L EY2 T\nMISCALCULATED  M IH0 S - K AE1 L - K Y AH0 - L EY2 - T IH0 D\nMISCALCULATION  M IH0 S - K AE1 L - K Y AH0 - L EY1 - SH AH0 N\nMISCALCULATIONS  M IH0 S - K AE1 L - K Y AH0 - L EY1 - SH AH0 N Z\nMISCARRIAGE  M IH0 S - K EH1 - R AH0 JH\nMISCARRIAGES  M IH0 S - K EH1 - R IH0 - JH IH0 Z\nMISCAST  M IH0 S - K AE1 S T\nMISCAVIGE  M IH0 S - K AE1 - V IH1 JH\nMISCAYUNA  M IH2 S - K AY0 - Y UW1 - N AH0\nMISCAYUNA'S  M IH2 S - K AY0 - Y UW1 - N AH0 Z\nMISCELLANEOUS  M IH2 - S AH0 - L EY1 - N IY0 - AH0 S\nMISCELLANY  M IH1 - S AH0 - L EY2 - N IY0\nMISCH  M IH1 SH\nMISCHA  M IH1 - SH AH0\nMISCHARACTERIZATION  M IH0 S - K AE2 - R AH0 K - T ER0 - AH0 - Z EY1 - SH AH0 N\nMISCHARACTERIZE  M IH0 S - K AE1 - R AH0 K - T ER0 - AY2 Z\nMISCHARACTERIZED  M IH0 S - K AE1 - R AH0 K - T ER0 - AY2 Z D\nMISCHARGE  M IH0 S - CH AA1 R JH\nMISCHARGED  M IH0 S - CH AA1 R JH D\nMISCHARGES  M IH0 S - CH AA1 R - JH IH0 Z\nMISCHARGING  M IH0 S - CH AA1 R - JH IH0 NG\nMISCHEL  M IH1 - SH AH0 L\nMISCHER  M IH1 - SH ER0\nMISCHIEF  M IH1 S - CH AH0 F\nMISCHIEVOUS  M IH1 S - CH AH0 - V AH0 S\nMISCHKE  M IH1 SH K\nMISCHLER  M IH1 - SH AH0 L - ER0\nMISCHLER(2)  M IH1 SH - L ER0\nMISCIBILITY  M IH2 S - IH0 - B IH1 - L IH0 - T IY0\nMISCIBLE  M IH1 - S AH0 - B AH0 L\nMISCIBLE(2)  M IH1 - S IH0 - B AH0 L\nMISCOMMUNICATION  M IH0 S - K AH0 - M Y UW2 - N AH0 - K EY1 - SH AH0 N\nMISCONCEIVE  M IH0 S - K AH0 N - S IY1 V\nMISCONCEIVED  M IH0 S - K AH0 N - S IY1 V D\nMISCONCEPTION  M IH0 S - K AH0 N - S EH1 P - SH AH0 N\nMISCONCEPTIONS  M IH0 S - K AH0 N - S EH1 P - SH AH0 N Z\nMISCONDUCT  M IH0 S - K AA1 N - D AH0 K T\nMISCONSTRUE  M IH0 S - K AH0 N - S T R UW1\nMISCONSTRUED  M IH2 S - K AH0 N - S T R UW1 D\nMISCOUNT  M IH1 S - K AW1 N T\nMISCREANT  M IH1 S - K R IY0 - AH0 N T\nMISCREANTS  M IH1 S - K R IY0 - AH0 N T S\nMISCREATION  M IH0 S - K R IY0 - EY1 - SH AH0 N\nMISCREATIONS  M IH2 S - K R IY0 - EY1 - SH AH0 N Z\nMISCUE  M IH1 S - K Y UW2\nMISCUES  M IH1 S - K Y UW2 Z\nMISDEED  M IH1 S - D IY1 D\nMISDEEDS  M IH0 S - D IY1 D Z\nMISDEMEANOR  M IH2 S - D AH0 - M IY1 - N ER0\nMISDEMEANORS  M IH2 S - D AH0 - M IY1 - N ER0 Z\nMISDIAGNOSE  M IH0 S - D AY2 - IH0 G - N OW1 Z\nMISDIAGNOSED  M IH0 S - D AY2 - IH0 G - N OW1 Z D\nMISDIAGNOSES  M IH0 S - D AY2 - IH0 G - N OW1 - S IY0 Z\nMISDIAGNOSES(2)  M IH0 S - D AY2 - IH0 G - N OW1 - S AH0 Z\nMISDIAGNOSIS  M IH0 S - D AY2 - IH0 G - N OW1 - S AH0 S\nMISDIRECT  M IH0 S - D IH0 - R EH1 K T\nMISDIRECTED  M IH0 S - D IH0 - R EH1 K - T IH0 D\nMISEK  M IH1 - S EH0 K\nMISENER  M IH1 - S IY0 - N ER0\nMISENHEIMER  M IH1 S - IH0 N - HH AY0 - M ER0\nMISER  M AY1 - Z ER0\nMISERABLE  M IH1 - Z ER0 - AH0 - B AH0 L\nMISERABLE(2)  M IH1 Z - R AH0 - B AH0 L\nMISERABLES  M IH1 - Z ER0 - AH0 - B AH0 L Z\nMISERABLES(2)  M IH1 Z - R AH0 - B AH0 L Z\nMISERABLES(3)  M IH2 - Z ER0 - AA1 B\nMISERABLY  M IH1 - Z ER0 - AH0 - B L IY0\nMISERABLY(2)  M IH1 Z - R AH0 - B L IY0\nMISERATION  M IH0 - Z ER0 - EY1 - SH AH0 N\nMISERIES  M IH1 - Z ER0 - IY0 Z\nMISERLY  M AY1 - Z ER0 - L IY0\nMISERY  M IH1 - Z ER0 - IY0\nMISES  M AY1 - Z IH0 Z\nMISFELDT  M IH1 S - F IH0 L T\nMISFIRE  M IH0 S - F AY1 - ER0\nMISFIT  M IH1 S - F IH2 T\nMISFITS  M IH1 S - F IH2 T S\nMISFORTUNE  M IH0 S - F AO1 R - CH AH0 N\nMISFORTUNES  M IH0 S - F AO1 R - CH AH0 N Z\nMISGIVE  M IH0 S - G IH1 V\nMISGIVING  M IH0 S - G IH1 - V IH0 NG\nMISGIVINGS  M IH0 S - G IH1 - V IH0 NG Z\nMISGOVERNMENT  M IH0 S - G AH1 - V ER0 N - M AH0 N T\nMISGUIDE  M IH0 S - G AY1 D\nMISGUIDED  M IH0 S - G AY1 - D IH0 D\nMISH  M IH1 SH\nMISHA  M IH1 - SH AH0\nMISHANDLE  M IH0 S - HH AE1 N - D AH0 L\nMISHANDLED  M IH0 S - HH AE1 N - D AH0 L D\nMISHANDLING  M IH0 S - HH AE1 N D - L IH0 NG\nMISHAP  M IH1 S - HH AE2 P\nMISHAPS  M IH1 S - HH AE2 P S\nMISHAWAKA  M IH2 - SH AH0 W - AO1 - K AH0\nMISHAWAUM  M IH1 - SH AH0 W - AA2 M\nMISHAWUM  M IH1 - SH AH0 W - AH2 M\nMISHEAR  M IH0 S - HH IY1 R\nMISHEARD  M IH2 S - HH ER1 D\nMISHKIN  M IY1 SH - K IY0 N\nMISHLER  M IH1 SH - L ER0\nMISHMASH  M IH1 SH - M AE2 SH\nMISHOE  M IY1 - SH UW0\nMISHRA  M IH1 - SH R AH0\nMISIAK  M IH1 - S IY0 - AE0 K\nMISIASZEK  M IH0 - S IY0 - AA1 - SH EH0 K\nMISIDENTIFICATION  M IH2 - S AY0 - D EH2 N - T IH0 - F IH0 - K EY1 - SH AH0 N\nMISIDENTIFICATION(2)  M IH2 - S AY0 - D EH2 - N IH0 - F IH0 - K EY1 - SH AH0 N\nMISIDENTIFIED  M IH0 - S AY0 - D EH1 N - T IH0 - F AY2 D\nMISIDENTIFIED(2)  M IH0 - S AY0 - D EH1 - N IH0 - F AY2 D\nMISIDENTIFY  M IH0 - S AY0 - D EH1 N - T AH0 - F AY2\nMISIDENTIFY(2)  M IH0 - S AY0 - D EH1 - N AH0 - F AY2\nMISIEWICZ  M IH1 S - AH0 - V IH0 CH\nMISIMPRESSION  M IH0 S - IH0 M - P R EH1 - SH AH0 N\nMISINFORM  M IH0 S - IH2 N - F AO1 R M\nMISINFORMATION  M IH2 S - IH0 N - F ER0 - M EY1 - SH AH0 N\nMISINFORMED  M IH0 S - IH0 N - F AO1 R M D\nMISINFORMING  M IH0 S - IH0 N - F AO1 R - M IH0 NG\nMISINTERPRET  M IH0 S - IH0 N - T ER1 - P R AH0 T\nMISINTERPRETATION  M IH0 S - IH0 N - T ER2 - P R AH0 - T EY1 - SH AH0 N\nMISINTERPRETED  M IH0 S - IH0 N - T ER1 - P R AH0 - T IH0 D\nMISINTERPRETING  M IH0 S - IH0 N - T ER1 - P R AH0 - T IH0 NG\nMISJUDGE  M IH0 S - JH AH1 JH\nMISJUDGED  M IH0 S - JH AH1 JH D\nMISJUDGES  M IH0 S - JH AH1 - JH IH0 Z\nMISJUDGMENT  M IH0 S - JH AH1 JH - M AH0 N T\nMISJUDGMENTS  M IH0 S - JH AH1 JH - M AH0 N T S\nMISKA  M IH1 S - K AH0\nMISKE  M IH1 S K\nMISKELL  M IH1 S - K AH0 L\nMISKITO  M IH0 S - K IY1 - T OW0\nMISKITOS  M IH0 S - K IY1 - T OW0 S\nMISKO  M IH1 S - K OW0\nMISLABEL  M IH0 S - L EY1 - B AH0 L\nMISLABELED  M IH0 S - L EY1 - B AH0 L D\nMISLABELING  M IH0 S - L EY1 - B AH0 L - IH0 NG\nMISLABELING(2)  M IH0 S - L EY1 - B L IH0 NG\nMISLAID  M IH0 S - L EY1 D\nMISLEAD  M IH0 S - L IY1 D\nMISLEADING  M IH0 S - L IY1 - D IH0 NG\nMISLEADINGLY  M IH0 S - L IY1 - D IH0 NG - L IY0\nMISLEADS  M IH0 S - L IY1 D Z\nMISLED  M IH0 S - L EH1 D\nMISMANAGE  M IH0 S - M AE1 - N IH0 JH\nMISMANAGED  M IH0 S - M AE1 - N IH0 JH D\nMISMANAGEMENT  M IH0 S - M AE1 - N IH0 JH - M AH0 N T\nMISMANAGING  M IH0 S - M AE1 - N IH0 - JH IH0 NG\nMISMATCH  M IH0 S - M AE1 CH\nMISMATCH(2)  M IH1 S - M AE2 CH\nMISMATCHED  M IH0 S - M AE1 CH T\nMISMATCHES  M IH0 S - M AE1 - CH IH0 Z\nMISNER  M IH1 Z - N ER0\nMISNOMER  M IH0 S - N OW1 - M ER0\nMISOGYNE  M IH1 - Z AH0 - JH IH0 N\nMISOGYNIST  M IH1 - Z AH0 - JH IH0 - N IH0 S T\nMISOGYNY  M IH1 - Z AH0 - JH IH0 - N IY0\nMISPERCEIVE  M IH0 - S P ER0 - S IY1 V\nMISPERCEIVES  M IH0 - S P ER0 - S IY1 V Z\nMISPERCEPTION  M IH2 S - P ER0 - S EH1 P - SH AH0 N\nMISPERCEPTIONS  M IH0 S - P ER0 - S EH1 P - SH AH0 N Z\nMISPLACE  M IH0 S - P L EY1 S\nMISPLACED  M IH0 S - P L EY1 S T\nMISPRICE  M IH0 S - P R AY1 S\nMISPRICED  M IH0 S - P R AY1 S T\nMISPRINT  M IH1 S - P R IH1 N T\nMISPRISION  M IH0 S - P R IH1 - ZH AH0 N\nMISPRONOUNCE  M IH0 S - P R AH0 - N AW1 N S\nMISPRONOUNCED  M IH0 S - P R AH0 - N AW1 N S T\nMISQUOTE  M IH0 S - K W OW1 T\nMISQUOTED  M IH0 S - K W OW1 - T IH0 D\nMISREAD  M IH0 S - R IY1 D\nMISREADING  M IH0 S - R IY1 - D IH0 NG\nMISREMEMBER  M IH0 S - R IY0 - M EH1 M - B ER0\nMISREMEMBERED  M IH0 S - R IY0 - M EH1 M - B ER0 D\nMISREPORT  M IH0 S - R IH0 - P AO1 R T\nMISREPORTED  M IH0 S - R IH0 - P AO1 R - T IH0 D\nMISREPRESENT  M IH0 S - R EH2 - P R AH0 - Z EH1 N T\nMISREPRESENTATION  M IH0 S - R EH2 - P R IH0 - Z EH0 N - T EY1 - SH AH0 N\nMISREPRESENTATIONS  M IH0 S - R EH2 - P R IH0 - Z EH0 N - T EY1 - SH AH0 N Z\nMISREPRESENTED  M IH2 S - R EH0 - P R IH0 - Z EH1 N - T IH0 D\nMISREPRESENTED(2)  M IH2 S - R EH0 - P R IH0 - Z EH1 - N IH0 D\nMISREPRESENTING  M IH0 S - R EH2 - P R AH0 - Z EH1 N - T IH0 NG\nMISREPRESENTING(2)  M IH0 S - R EH2 - P R AH0 - Z EH1 - N IH0 NG\nMISREPRESENTS  M IH0 S - R EH2 - P R AH0 - Z EH1 N T S\nMISREPRESENTS(2)  M IH0 S - R EH2 - P R AH0 - Z EH1 N S\nMISRULE  M IH0 S - R UW1 L\nMISS  M IH1 S\nMISSAL  M IH1 - S AH0 L\nMISSED  M IH1 S T\nMISSEL  M IH1 - S AH0 L\nMISSES  M IH1 - S AH0 Z\nMISSES(2)  M IH1 - S IH0 Z\nMISSETT  M IH1 - S AH0 T\nMISSEY  M IH1 - S IY0\nMISSHAPEN  M IH0 S - SH EY1 - P AH0 N\nMISSHAPEN(2)  M IH0 S - HH AE1 - P AH0 N\nMISSIE  M IH1 - S IY0\nMISSILDINE  M IH0 - S IY0 L - D IY1 - N IY0\nMISSILDINE(2)  M IH0 S - IH0 L - D AY1 N\nMISSILE  M IH1 - S AH0 L\nMISSILE'S  M IH1 - S AH0 L Z\nMISSILES  M IH1 - S AH0 L Z\nMISSILES'  M IH1 - S AH0 L Z\nMISSIMER  M IH1 - S IH0 - M ER0\nMISSING  M IH1 - S IH0 NG\nMISSION  M IH1 - SH AH0 N\nMISSION'S  M IH1 - SH AH0 N Z\nMISSIONARIES  M IH1 - SH AH0 N - EH2 - R IY0 Z\nMISSIONARY  M IH1 - SH AH0 N - EH2 - R IY0\nMISSIONS  M IH1 - SH AH0 N Z\nMISSISSAUGA  M IH2 - S IH0 - S AO1 - G AH0\nMISSISSIPPI  M IH2 - S IH0 - S IH1 - P IY0\nMISSISSIPPI'S  M IH2 - S IH0 - S IH1 - P IY0 Z\nMISSISSIPPIAN  M IH2 - S IH0 - S IH1 - P IY0 - AH0 N\nMISSISSIPPIANS  M IH2 - S IH0 - S IH1 - P IY0 - AH0 N Z\nMISSISSIPPIS  M IH2 - S IH0 - S IH1 - P IY0 Z\nMISSIVE  M IH1 - S IH0 V\nMISSLER  M IH1 S - L ER0\nMISSOULA  M IH0 - Z UW1 - L AH0\nMISSOURI  M AH0 - Z UH1 - R IY0\nMISSOURI'S  M AH0 - Z UH1 - R IY0 Z\nMISSOURI'S(2)  M AH0 - Z ER1 - AH0 Z\nMISSOURI(2)  M AH0 - Z ER1 - AH0\nMISSPEAK  M IH0 S - S P IY1 K\nMISSPEAK(2)  M IH0 - S P IY1 K\nMISSPELL  M IH0 S - S P EH1 L\nMISSPELL(2)  M IH0 - S P EH1 L\nMISSPELLED  M IH0 S - S P EH1 L D\nMISSPELLED(2)  M IH0 - S P EH1 L D\nMISSPELLING  M IH0 S - S P EH1 - L IH0 NG\nMISSPELLING(2)  M IH0 - S P EH1 - L IH0 NG\nMISSPEND  M IH0 S - S P EH1 N D\nMISSPEND(2)  M IH0 - S P EH1 N D\nMISSPENDING  M IH0 S - S P EH1 N - D IH0 NG\nMISSPENDING(2)  M IH0 - S P EH1 N - D IH0 NG\nMISSPENT  M IH0 S - S P EH1 N T\nMISSPENT(2)  M IH0 - S P EH1 N T\nMISSPOKE  M IH0 S - S P OW1 K\nMISSPOKE(2)  M IH0 - S P OW1 K\nMISSPOKEN  M IH0 S - S P OW1 - K AH0 N\nMISSPOKEN(2)  M IH0 - S P OW1 - K AH0 N\nMISSTATE  M IH0 S - S T EY1 T\nMISSTATE(2)  M IH0 - S T EY1 T\nMISSTATED  M IH0 S - S T EY1 - T IH0 D\nMISSTATED(2)  M IH0 - S T EY1 - T IH0 D\nMISSTATEMENT  M IH0 S - T EY1 T - M AH0 N T\nMISSTATEMENTS  M IH0 S - T EY1 T - M AH0 N T S\nMISSTATEMENTS(2)  M IH0 S - T EY1 T - M AH0 N S\nMISSTATES  M IH0 S - S T EY1 T S\nMISSTATES(2)  M IH0 - S T EY1 T S\nMISSTATING  M IH0 S - S T EY1 - T IH0 NG\nMISSTATING(2)  M IH0 - S T EY1 - T IH0 NG\nMISSTEP  M IH0 S - S T EH1 P\nMISSTEP(2)  M IH0 - S T EH1 P\nMISSTEPS  M IH0 S - S T EH1 P S\nMISSTEPS(2)  M IH0 - S T EH1 P S\nMISSUS  M IH1 - S IH0 Z\nMISSY  M IH1 - S IY0\nMISSY'S  M IH1 - S IY0 Z\nMIST  M IH1 S T\nMISTAKE  M IH0 - S T EY1 K\nMISTAKEN  M IH0 - S T EY1 - K AH0 N\nMISTAKENLY  M IH0 - S T EY1 - K AH0 N - L IY0\nMISTAKES  M IH0 - S T EY1 K S\nMISTAKING  M IH0 - S T EY1 - K IH0 NG\nMISTER  M IH1 - S T ER0\nMISTERS  M IH1 - S T ER0 Z\nMISTIC  M IH1 - S T IH0 K\nMISTLER  M IH1 S T - L ER0\nMISTLETOE  M IH1 - S AH0 L - T OW2\nMISTOOK  M IH0 - S T UH1 K\nMISTRAL  M IH1 S - T R AH0 L\nMISTREAT  M IH0 S - T R IY1 T\nMISTREATED  M IH0 S - T R IY1 - T IH0 D\nMISTREATING  M IH0 S - T R IY1 - T IH0 NG\nMISTREATMENT  M IH0 S - T R IY1 T - M AH0 N T\nMISTREATS  M IH0 S - T R IY1 T S\nMISTRESS  M IH1 S - T R AH0 S\nMISTRESSES  M IH1 - S T R AH0 - S AH0 Z\nMISTRESSES(2)  M IH1 S - T R AH0 - S IH0 Z\nMISTRETTA  M IH0 - S T R EH1 - T AH0\nMISTRIAL  M IH0 S - T R AY1 - AH0 L\nMISTRIAL(2)  M IH1 S - T R AY2 - AH0 L\nMISTRIALS  M IH0 S - T R AY1 - AH0 L Z\nMISTRIALS(2)  M IH1 S - T R AY2 - AH0 L Z\nMISTRUST  M IH0 S - T R AH1 S T\nMISTRUSTED  M IH0 S - T R AH1 - S T IH0 D\nMISTRUSTFUL  M IH0 S - T R AH1 S T - F AH0 L\nMISTRUSTFUL(2)  M IH0 S - T R AH1 S - F AH0 L\nMISTRY  M IH1 S - T R IY0\nMISTRY(2)  M IH0 - S T R AY1\nMISTS  M IH1 S T S\nMISTY  M IH1 - S T IY0\nMISUNDERSTAND  M IH2 S - AH0 N - D ER0 - S T AE1 N D\nMISUNDERSTANDING  M IH2 S - AH0 N - D ER0 - S T AE1 N - D IH0 NG\nMISUNDERSTANDINGS  M IH2 S - AH0 N - D ER0 - S T AE1 N - D IH0 NG Z\nMISUNDERSTANDS  M IH2 S - AH0 N - D ER0 - S T AE1 N D Z\nMISUNDERSTOOD  M IH2 S - AH0 N - D ER0 - S T UH1 D\nMISURACA  M IH0 - S UH0 - R AA1 - K AH0\nMISUSE  M IH0 S - Y UW1 Z\nMISUSE(2)  M IH0 S - Y UW1 S\nMISUSED  M IH0 S - Y UW1 Z D\nMISUSES  M IH0 S - Y UW1 - Z IH0 Z\nMISUSES(2)  M IH0 S - Y UW1 - S IH0 Z\nMISUSING  M IH0 S - Y UW1 - Z IH0 NG\nMIT  EH1 - M AY1 - T IY1\nMIT(2)  M IH1 T\nMITA  M IY1 - T AH0\nMITAMURA  M IY2 - T AH0 - M UH1 - R AH0\nMITCH  M IH1 CH\nMITCHAM  M IH1 - CH AH0 M\nMITCHEL  M IH1 - CH AH0 L\nMITCHELL  M IH1 - CH AH0 L\nMITCHELL'S  M IH1 - CH AH0 L Z\nMITCHELSON  M IH1 - CH AH0 L - S AH0 N\nMITCHELTREE  M IH0 - CH IH0 L - T R IY1\nMITCHEM  M IH1 - CH IH0 M\nMITCHENER  M IH1 - CH IY0 - N ER0\nMITCHNER  M IH1 CH - N ER0\nMITCHUM  M IH1 - CH AH0 M\nMITE  M AY1 T\nMITEK  M AY1 - T EH2 K\nMITEL  M AY1 - T EH2 L\nMITER  M AY1 - T ER0\nMITERING  M AY1 - T ER0 - IH0 NG\nMITES  M AY1 T S\nMITHCELL  M IH1 TH - S AH0 L\nMITHRIDATE  M IH1 - TH R IH0 - D EY2 T\nMITHRIDATES  M IH1 - TH R IH0 - D EY2 T S\nMITHUN  M IH1 - TH AH0 N\nMITI  M IH1 - T IY2\nMITI(2)  M IY1 - T IY2\nMITI(3)  M IY1 - T IY0\nMITIGATE  M IH1 - T AH0 - G EY2 T\nMITIGATED  M IH1 - T AH0 - G EY2 - T IH0 D\nMITIGATES  M IH1 - T AH0 - G EY2 T S\nMITIGATING  M IH1 - T AH0 - G EY2 - T IH0 NG\nMITIGATION  M IH2 - T IH0 - G EY1 - SH AH0 N\nMITMAN  M IH1 T - M AH0 N\nMITNICK  M IH1 T - N IH0 K\nMITOFSKY  M IH0 - T AO1 F S - K IY0\nMITRA  M IH1 - T R AH0\nMITRAL  M AY1 - T R AH0 L\nMITRANO  M IY0 - T R AA1 - N OW0\nMITRE  M IH1 - T R IY0\nMITRE(2)  M AY1 - T ER0\nMITRO  M IH1 - T R OW0\nMITROVICH  M IH1 - T R AH0 - V IH0 CH\nMITSCH  M IH1 CH\nMITSCHKE  M IH1 CH K\nMITSOTAKIS  M IH2 T - S OW0 - T AA1 - K IH0 S\nMITSUBA  M IY0 T - S UW1 - B AH0\nMITSUBISHI  M IH2 T - S UW2 - B IY1 - SH IY0\nMITSUBISHI'S  M IH2 T - S UW2 - B IY1 - SH IY0 Z\nMITSUI  M IY0 T - S UW1 - IY0\nMITSUI'S  M IY0 T - S UW0 - IY0 Z\nMITSUI(2)  M IH0 T - S UW1 - IY0\nMITSUKOSHI  M IY2 T - S UW2 - K OW1 - SH IY0\nMITSURU  M IY0 T - S UW1 - R UW0\nMITT  M IH1 T\nMITTAG  M IH1 - T AH0 G\nMITTAL  M IH2 - T AA1 L\nMITTAN  M IH1 - T AH0 N\nMITTELEUROPA  M IH2 - T EH2 - L UW2 - R OW1 - P AH0\nMITTELMAN  M IH1 - T AH0 L - M AH0 N\nMITTELSTADT  M IH1 - T IH0 L SH - T AE0 T\nMITTELSTAEDT  M IH1 - T IH0 L - S T EH0 T\nMITTELSTEADT  M IH1 - T IH0 L - S T EH0 T\nMITTEN  M IH1 - T AH0 N\nMITTENDORF  M IH1 - T IH0 N - D AO0 R F\nMITTENS  M IH1 - T AH0 N Z\nMITTERAND  M IY1 - T ER0 - AO2 N D\nMITTERAND'S  M IY1 - T ER0 - AO2 N D Z\nMITTERAND'S(2)  M IY1 - T ER0 - AE2 N D Z\nMITTERAND(2)  M IY1 - T ER0 - AE2 N D\nMITTERRAND  M IY1 - T ER0 - AO2 N D\nMITTERRAND'S  M IY1 - T ER0 - AE0 N D Z\nMITTERRAND(2)  M IY1 - T ER0 - AE2 N D\nMITTLEMAN  M IH1 - T AH0 L - M AH0 N\nMITTLER  M IH1 T - L ER0\nMITTMAN  M IH1 T - M AH0 N\nMITTON  M IH1 - T AH0 N\nMITTS  M IH1 T S\nMITYUNOV  M IH1 - T Y UW0 - N AA0 V\nMITZEL  M IH1 T - Z AH0 L\nMITZI  M IH1 T - S IY0\nMITZNER  M IH1 T - S N ER0\nMITZVAH  M IH1 T - S V AH0\nMIURA  M IY0 - UH1 - R AH0\nMIX  M IH1 K S\nMIXED  M IH1 K S T\nMIXER  M IH1 K - S ER0\nMIXERS  M IH1 K - S ER0 Z\nMIXES  M IH1 K - S AH0 Z\nMIXES(2)  M IH1 K - S IH0 Z\nMIXING  M IH1 K - S IH0 NG\nMIXNER  M IH1 K S - N ER0\nMIXON  M IH1 K - S AH0 N\nMIXSON  M IH1 K - S AH0 N\nMIXTE  M IH1 K S T\nMIXTER  M IH1 K - S T ER0\nMIXTURE  M IH1 K S - CH ER0\nMIXTURES  M IH1 K S - CH ER0 Z\nMIXUP  M IH1 K - S AH0 P\nMIYAGAWA  M IY2 - AA0 - G AA1 - W AH0\nMIYAHARA  M IY2 - Y AA0 - HH AA1 - R AH0\nMIYAKE  M IY0 - Y AA1 - K EY0\nMIYAKO  M IY1 - AH2 - K OW2\nMIYAMORI  M IY2 - AA0 - M AO1 - R IY0\nMIYAMOTO  M IY0 - Y AA0 - M OW1 - T OW0\nMIYASAKI  M IY2 - Y AA0 - S AA1 - K IY0\nMIYASATO  M IY0 - Y AA0 - S AA1 - T OW0\nMIYASHIRO  M IY0 - Y AA0 - SH IH1 - R OW0\nMIYAZAKI  M IY2 - Y AA0 - Z AA1 - K IY0\nMIYAZAWA  M IY2 - Y AH0 - Z AA1 W - AH0\nMIYAZAWA'S  M IY2 - AH0 - Z AA1 - W AH0 Z\nMIZAR  M AY1 - Z AA2 R\nMIZAR'S  M AY1 - Z AA2 R Z\nMIZE  M AY1 Z\nMIZE'S  M AY1 - Z IH0 Z\nMIZEL  M AY1 - Z AH0 L\nMIZEL(2)  M AY2 - Z EH1 L\nMIZELL  M IH1 - Z AH0 L\nMIZELLE  M IH0 - Z EH1 L\nMIZEN  M AY1 - Z AH0 N\nMIZER  M AY1 - Z ER0\nMIZNER  M IH1 Z - N ER0\nMIZRAHI  M IY0 Z - R AA1 - HH IY0\nMIZUNO  M IH0 - Z UW1 - N OW0\nMIZZELL  M IH1 - Z AH0 L\nMJ'S  EH1 M - JH EY1 Z\nMKHATSHWA  M AH0 - K AE1 - CH W AH0\nMLADENIC  M L AA2 - D EH1 - N IH0 CH\nMLADIC  M L AA1 - D IH0 CH\nMLADIC'S  M L AA1 - D IH0 - CH IH0 Z\nMLECKO  M L EH1 - K OW0\nMLECKO(2)  M AH0 - L EH1 - K OW0\nMLOTOK  M L OW1 - T AA2 K\nMLOTOK(2)  M AH0 - L AA1 - T AA2 K\nMMABATHO  M AH0 - B AA1 - TH OW0\nMME  M AH0 - D AE1 M\nMME(2)  EH1 - M EH1 - M IY1\nMME(3)  M AE1 - D AH0 M\nMMMM  M M\nMNEMONIC  N IH0 - M AA1 - N IH0 K\nMNEMONIC(2)  N IY0 - M AA1 - N IH0 K\nMNEMONICS  N IH0 - M AA1 - N IH0 K S\nMNEMONICS(2)  N IY0 - M AA1 - N IH0 K S\nMNOOKIN  M N UH1 - K AH0 N\nMNOOKIN(2)  M AH0 - N UH1 - K AH0 N\nMO  M OW1\nMOAB  M OW1 - AE0 B\nMOACQ  M OW1 K\nMOAD  M OW1 D\nMOAK  M OW1 K\nMOAKLEY  M OW1 K - L IY0\nMOAMI  M OW1 - M IY0\nMOAMMAR  M OW1 - AH0 - M AA2 R\nMOAN  M OW1 N\nMOANED  M OW1 N D\nMOANING  M OW1 - N IH0 NG\nMOANS  M OW1 N Z\nMOAT  M OW1 T\nMOATES  M OW1 - EY2 T S\nMOATS  M OW1 T S\nMOB  M AA1 B\nMOB'S  M AA1 B Z\nMOBAY  M OW0 - B EY1\nMOBBED  M AA1 B D\nMOBBS  M AA1 B Z\nMOBE  M OW1 B\nMOBERG  M OW1 - B ER0 G\nMOBERLY  M OW1 - B ER0 - L IY0\nMOBIL  M OW1 - B AH0 L\nMOBIL'S  M OW1 - B AH0 L Z\nMOBILE  M OW1 - B AH0 L\nMOBILE'S  M OW1 - B AH0 L Z\nMOBILES  M OW1 - B AH0 L Z\nMOBILIA  M OW0 - B IY1 - L IY0 - AH0\nMOBILIARE  M OW1 - B AH0 - L EH2 R\nMOBILITY  M OW0 - B IH1 - L AH0 - T IY0\nMOBILITY(2)  M OW0 - B IH1 - L IH0 - T IY0\nMOBILIZATION  M OW2 - B AH0 - L AH0 - Z EY1 - SH AH0 N\nMOBILIZATION(2)  M OW2 - B AH0 - L IH0 - Z EY1 - SH AH0 N\nMOBILIZATIONS  M OW2 - B AH0 - L AH0 - Z EY1 - SH AH0 N Z\nMOBILIZE  M OW1 - B AH0 - L AY2 Z\nMOBILIZED  M OW1 - B AH0 - L AY2 Z D\nMOBILIZER  M OW1 - B AH0 - L AY2 - Z ER0\nMOBILIZERS  M OW1 - B AH0 - L AY2 - Z ER0 Z\nMOBILIZING  M OW1 - B AH0 - L AY2 - Z IH0 NG\nMOBIUS  M OW1 - B IY0 - AH0 S\nMOBLEY  M OW1 - B L IY0\nMOBS  M AA1 B Z\nMOBSTER  M AA1 B - S T ER0\nMOBSTER'S  M AA1 B - S T ER0 Z\nMOBSTERS  M AA1 B - S T ER0 Z\nMOBUTU  M OW0 - B Y UW1 - T UW2\nMOBUTU'S  M OW0 - B Y UW1 - T UW2 Z\nMOBUTU'S(2)  M AH0 - B UW1 - T UW2 Z\nMOBUTU(2)  M AH0 - Y UW1 - T UW2\nMOBY  M OW1 - B IY0\nMOCA  M OW1 - K AH0\nMOCARSKI  M AH0 - K AA1 R S - K IY0\nMOCATTA  M AH0 - K AA1 - T AH0\nMOCCASIN  M AA1 - K AH0 - S IH0 N\nMOCCASINS  M AA1 - K AH0 - S IH0 N Z\nMOCCIA  M OW1 - CH AH0\nMOCCIO  M OW1 - CH IY0 - OW0\nMOCERI  M OW0 - CH EH1 - R IY0\nMOCH  M AA1 K\nMOCHA  M OW1 - K AH0\nMOCHEL  M AA1 - K AH0 L\nMOCHIDA  M AH0 - CH IY1 - D AH0\nMOCHIZUKI  M OW0 - CH IY0 - Z UW1 - K IY0\nMOCK  M AA1 K\nMOCK-HEROICALLY  M AA1 K - HH ER0 - OW1 - IH0 K - L IY0\nMOCKED  M AA1 K T\nMOCKERY  M AA1 - K ER0 - IY0\nMOCKING  M AA1 - K IH0 NG\nMOCKINGBIRD  M AA1 - K IH0 NG - B ER2 D\nMOCKLER  M AA1 K - L ER0\nMOCKS  M AA1 K S\nMOCZYGEMBA  M AH0 - CH IH0 - G EH1 M - B AH0\nMOD  M AO1 D\nMODAL  M OW1 - D AH0 L\nMODALITIES  M AH0 - D AE1 - L AH0 - T IY0 Z\nMODALITY  M AH0 - D AE1 - L AH0 - T IY0\nMODARRESSI  M OW0 - D AA2 - R EH1 - S IY0\nMODE  M OW1 D\nMODED  M OW1 - D IH0 D\nMODEL  M AA1 - D AH0 L\nMODEL'S  M AA1 - D AH0 L Z\nMODELED  M AA1 - D AH0 L D\nMODELING  M AA1 - D AH0 L - IH0 NG\nMODELING(2)  M AA1 D - L IH0 NG\nMODELL  M OW0 - D EY1 L\nMODELO  M OW0 - D EH1 - L OW0\nMODELS  M AA1 - D AH0 L Z\nMODELS'  M AA1 - D AH0 L Z\nMODEM  M OW1 - D AH0 M\nMODEMS  M OW1 - D AH0 M Z\nMODEN  M OW1 - D AH0 N\nMODENA  M OW0 - D EH1 - N AH0\nMODER  M OW1 - D ER0\nMODERATE  M AA1 - D ER0 - AH0 T\nMODERATE(2)  M AA1 - D ER0 - EY2 T\nMODERATED  M AA1 - D ER0 - EY2 - T IH0 D\nMODERATELY  M AA1 - D ER0 - AH0 T - L IY0\nMODERATES  M AA1 - D ER0 - AH0 T S\nMODERATES(2)  M AA1 - D ER0 - EY2 T S\nMODERATING  M AA1 - D ER0 - EY2 - T IH0 NG\nMODERATION  M AA2 - D ER0 - EY1 - SH AH0 N\nMODERATOR  M AA1 - D ER0 - EY2 - T ER0\nMODERATORS  M AA1 - D ER0 - EY2 - T ER0 Z\nMODERN  M AA1 - D ER0 N\nMODERNISM  M AA1 - D ER0 - N IH2 - Z AH0 M\nMODERNIST  M AA1 - D ER0 - N AH0 S T\nMODERNISTS  M AA1 - D ER0 - N AH0 S T S\nMODERNISTS(2)  M AA1 - D ER0 - N AH0 S S\nMODERNISTS(3)  M AA1 - D ER0 - N AH0 S\nMODERNITY  M AA0 - D ER1 - N AH0 - T IY0\nMODERNIZATION  M AA2 - D ER0 - N AH0 - Z EY1 - SH AH0 N\nMODERNIZATION(2)  M AA2 - D ER0 - N AY0 - Z EY1 - SH AH0\nMODERNIZE  M AA1 - D ER0 - N AY2 Z\nMODERNIZED  M AA1 - D ER0 - N AY2 Z D\nMODERNIZING  M AA1 - D ER0 - N AY2 - Z IH0 NG\nMODERNS  M AA1 - D ER0 N Z\nMODES  M OW1 D Z\nMODESITT  M AA1 - D IH0 - S IH0 T\nMODEST  M AA1 - D AH0 S T\nMODESTA  M OW0 - D EH1 - S T AH0\nMODESTIA  M OW0 - D EH1 - S T Y AH0\nMODESTINE  M OW0 - D EH0 - S T IY1 - N IY0\nMODESTLY  M AA1 - D AH0 S T - L IY0\nMODESTO  M OW0 - D EH1 - S T OW0\nMODESTY  M AA1 - D AH0 - S T IY0\nMODGLIN  M AA1 JH - L IH0 N\nMODI  M OW1 - D IY0\nMODIC  M AA1 - D IH0 K\nMODICA  M OW0 - D IY1 - K AH0\nMODICUM  M AA1 - D IH0 - K AH0 M\nMODIFICATION  M AA2 - D AH0 - F AH0 - K EY1 - SH AH0 N\nMODIFICATIONS  M AA2 - D AH0 - F AH0 - K EY1 - SH AH0 N Z\nMODIFIED  M AA1 - D AH0 - F AY2 D\nMODIFIES  M AA1 - D AH0 - F AY2 Z\nMODIFY  M AA1 - D AH0 - F AY2\nMODIFYING  M AA1 - D AH0 - F AY2 - IH0 NG\nMODIGLIANI  M OW0 - D IH2 - G L IY0 - AA1 - N IY0\nMODIGLIANI(2)  M OW0 - D IH2 - G L IY0 - AE1 - N IY0\nMODILIANI  M OW0 - D IH2 - L IY0 - AE1 - N IY0\nMODINE  M OW0 - D IY1 N\nMODISETTE  M AA1 - D IH0 - S EH0 T\nMODJESKI  M AH0 - JH EH1 S - K IY0\nMODLIN  M AA1 D - L IH0 N\nMODRAK  M AA1 - D R AH0 K\nMODROW  M AA1 - D R OW0\nMODUGNO  M OW0 - D UW1 G - N OW0\nMODULAIRE  M AO1 - JH UW0 - L EH2 R\nMODULAR  M AA1 - JH AH0 - L ER0\nMODULATE  M AO1 - JH Y UW0 - L EY0 T\nMODULATE(2)  M AO1 - JH UW0 - L EY0 T\nMODULATED  M AO1 - JH Y UW0 - L EY0 - T IH0 D\nMODULATED(2)  M AO1 - JH UW0 - L EY0 - T IH0 D\nMODULATION  M AA2 - JH AH0 - L EY1 - SH AH0 N\nMODULATOR  M AA1 - JH AH0 - L EY2 - T ER0\nMODULE  M AA1 - JH UW0 L\nMODULES  M AA1 - JH UW0 L Z\nMODUS  M OW1 - D AH0 S\nMODY  M OW1 - D IY0\nMODZELEWSKI  M AH0 - JH IH0 - L EH1 F S - K IY0\nMOE  M OW1\nMOEBIUS  M OW1 - B IY0 - IH0 S\nMOECKEL  M OW1 - K AH0 L\nMOEDE  M OW1 D\nMOEHLE  M OW1 - HH AH0 L\nMOEHLMAN  M OW1 L - M AH0 N\nMOEHRING  M AO1 - R IH0 NG\nMOELLER  M OW1 - L ER0\nMOELLERING  M OW1 - L ER0 - IH0 NG\nMOEN  M OW1 N\nMOENCH  M OW1 NG K\nMOENING  M AA1 - AH0 - N IH0 NG\nMOERBE  M AO1 R B\nMOERKE  M AO1 R K\nMOERMAN  M OW1 - ER0 - M AH0 N\nMOERS  M OW1 - ER0 Z\nMOERTEL  M AO1 R - T EH2 L\nMOES  M OW1 Z\nMOESCH  M OW1 SH\nMOESER  M OW1 - Z ER0\nMOESSNER  M OW1 S - N ER0\nMOET  M OW1 - IH0 T\nMOF  M AA1 F\nMOFFA  M AA1 - F AH0\nMOFFAT  M AA1 - F AH0 T\nMOFFATT  M AA1 - F AH0 T\nMOFFET  M AA1 - F IH0 T\nMOFFETT  M AA1 - F IH0 T\nMOFFIT  M AA1 - F IH0 T\nMOFFITT  M AA1 - F IH0 T\nMOFFORD  M AO1 - F ER0 D\nMOFIELD  M OW1 - F IY2 L D\nMOGA  M OW1 - G AH0\nMOGADISHU  M OW2 - G AH0 - D IY1 - SH UW2\nMOGADISHU'S  M OW2 - G AH0 - D IY1 - SH UW2 Z\nMOGAN  M OW1 - G AH0 N\nMOGAVARO  M OW0 - G AH0 - V AA1 - R OW0\nMOGAVERO  M OW0 - G AA0 - V EH1 - R OW0\nMOGAYON  M OW0 - G AA0 - Y AH0 N\nMOGAYON'S  M OW0 - G AA0 - Y AH0 N Z\nMOGEL  M OW1 - G AH0 L\nMOGENSEN  M AA1 - G IH0 N - S AH0 N\nMOGER  M OW1 - G ER0\nMOGG  M AA1 G\nMOGLE  M OW1 - G AH0 L\nMOGLIA  M AA1 G - L IY0 - AH0\nMOGOPA  M OW0 - G OW1 - P AH0\nMOGUL  M OW1 - G AH0 L\nMOGULS  M OW1 - G AH0 L Z\nMOHAIR  M OW1 - HH EH2 R\nMOHAMAD  M AH0 - HH AA1 - M AH0 D\nMOHAMED  M OW0 - HH AA1 - M EH0 D\nMOHAMMAD  M OW0 - HH AA1 - M EH0 D\nMOHAMMED  M OW0 - HH AE1 - M IH0 D\nMOHAN  M OW1 - HH AA0 N\nMOHAR  M OW1 - HH ER0\nMOHASCO  M OW0 - HH AE1 - S K OW0\nMOHAWK  M OW1 - HH AO2 K\nMOHAWKS  M OW1 - HH AO2 K S\nMOHER  M AA1 - HH ER0\nMOHICAN  M OW2 - HH IY1 - K AH0 N\nMOHICANS  M OW2 - HH IY1 - K AH0 N Z\nMOHL  M OW1 L\nMOHLER  M OW1 - L ER0\nMOHLMAN  M OW1 L - M AH0 N\nMOHN  M AA1 N\nMOHNEY  M AA1 - N IY0\nMOHNKE  M AA1 N K\nMOHNKE(2)  M AA1 N - K IY0\nMOHNKERN  M AA1 N - K ER0 N\nMOHON  M OW1 - HH AH0 N\nMOHR  M AO1 R\nMOHRING  M AO1 - R IH0 NG\nMOHRMAN  M AO1 R - M AH0 N\nMOHRMANN  M AO1 R - M AH0 N\nMOHS  M AA1 S\nMOHTASHEMI  M OW2 - T AH0 - SH EY1 - M IY0\nMOI  M W AA1\nMOILANEN  M OY1 - L AH0 - N AH0 N\nMOINA  M OY1 - N AH0\nMOINES  M OY1 N Z\nMOINES(2)  M OY1 N\nMOIR  M OY1 R\nMOIRA  M OY1 - R AH0\nMOISAN  M OY0 - Z AE1 N\nMOISE  M OY1 Z\nMOISES  M OY1 - Z IH0 Z\nMOISHE  M OW1 - SH EH0\nMOISHE(2)  M OY1 - SH IH0\nMOISI  M OY1 - S IY0\nMOIST  M OY1 S T\nMOISTEN  M OY1 - S AH0 N\nMOISTENED  M OY1 - S AH0 N D\nMOISTURE  M OY1 S - CH ER0\nMOISTURIZER  M OY1 S - CH ER0 - AY2 - Z ER0\nMOJAVE  M OW0 - HH AA1 - V IY0\nMOJICA  M OW0 - Y IY1 - K AH0\nMOJO  M OW1 - JH OW0\nMOK  M AA1 K\nMOKA  M OW1 - K AH0\nMOKE  M OW1 K\nMOKES  M OW1 K S\nMOKHIBER  M AA1 K - HH IH0 - B ER0\nMOKOENA  M AH0 - K OW1 - N AH0\nMOKRY  M AA1 - K R IY0\nMOL  M AO1 L\nMOLA  M OW1 - L AH0\nMOLAISON  M AH0 - L EY1 - Z AH0 N\nMOLAND  M AA1 - L AH0 N D\nMOLANDER  M AA1 - L AH0 N - D ER0\nMOLANO  M OW0 - L AA1 - N OW0\nMOLASSES  M AH0 - L AE1 - S AH0 Z\nMOLCHAN  M OW1 L - CH AH0 N\nMOLD  M OW1 L D\nMOLDABLE  M OW1 L - D AH0 - B AH0 L\nMOLDAVIA  M OW2 L - D EY1 - V IY0 - AH0\nMOLDAVIA(2)  M OW2 L - D AA1 - V IY0 - AH0\nMOLDAVIAN  M OW2 L - D EY1 - V IY0 - AH0 N\nMOLDAVIAN(2)  M OW2 L - D AA1 - V IY0 - AH0 N\nMOLDED  M OW1 L - D AH0 D\nMOLDED(2)  M OW1 L - D IH0 D\nMOLDEN  M OW1 L - D AH0 N\nMOLDENHAUER  M OW1 L - D IH0 N - HH AW0 - ER0\nMOLDER  M OW1 L - D ER0\nMOLDERS  M OW1 L - D ER0 Z\nMOLDING  M OW1 L - D IH0 NG\nMOLDINGS  M OW1 L - D IH0 NG Z\nMOLDOVA  M OW2 L - D OW1 - V AH0\nMOLDOVAN  M OW2 L D - OW0 - V AA1 N\nMOLDS  M OW1 L D Z\nMOLDY  M OW1 L - D IY0\nMOLE  M OW1 L\nMOLECULAR  M AH0 - L EH1 - K Y AH0 - L ER0\nMOLECULE  M AA1 - L AH0 - K Y UW2 L\nMOLECULES  M AA1 - L AH0 - K Y UW2 L Z\nMOLECULON  M OW0 - L EH1 - K Y UW0 - L AA0 N\nMOLEHILL  M OW1 L - HH IH2 L\nMOLELIKE  M OW1 L - L AY2 K\nMOLEN  M OW1 - L AH0 N\nMOLENAAR  M AA1 - L IH0 - N AA0 R\nMOLENDA  M OW0 - L EH1 N - D AH0\nMOLER  M OW1 - L ER0\nMOLES  M OW1 L Z\nMOLESKI  M AH0 - L EH1 S - K IY0\nMOLESKY  M AH0 - L EH1 S - K IY0\nMOLEST  M AH0 - L EH1 S T\nMOLESTATION  M OW2 - L EH0 - S T EY1 - SH AH0 N\nMOLESTED  M AH0 - L EH1 - S T IH0 D\nMOLESTER  M AH0 - L EH1 - S T ER0\nMOLESTERS  M AH0 - L EH1 - S T ER0 Z\nMOLESTING  M AH0 - L EH1 - S T IH0 NG\nMOLESTS  M AH0 - L EH1 S T S\nMOLESTS(2)  M AH0 - L EH1 S S\nMOLESTS(3)  M AH0 - L EH1 S\nMOLESWORTH  M OW1 L Z - W ER2 TH\nMOLEX  M OW1 - L AH0 K S\nMOLIERE  M OW0 - L Y EH1 R\nMOLIERE'S  M OW0 - L Y EH1 R Z\nMOLIN  M OW1 - L IH0 N\nMOLINA  M AH0 - L IY1 - N AH0\nMOLINAR  M AA1 - L IH0 - N ER0\nMOLINARI  M AO2 - L AH0 - N AA1 - R IY0\nMOLINARO  M OW0 - L IY0 - N AA1 - R OW0\nMOLINE  M OW0 - L IY1 N\nMOLINEAUX  M AO1 - L AH0 - N OW2\nMOLINELLI  M OW0 - L IY0 - N EH1 - L IY0\nMOLINO  M OW0 - L IY1 - N OW0\nMOLITOR  M OW0 - L IY1 - T ER0\nMOLL  M AA1 L\nMOLLE  M AA1 L\nMOLLEN  M AA1 - L IH0 N\nMOLLENHAUER  M AA1 - L IH0 N - HH AW0 - ER0\nMOLLENKOPF  M AA1 - L AH0 N - K AO0 P F\nMOLLENKOPF(2)  M AA1 - L AH0 N - K AO0 F\nMOLLER  M AA1 - L ER0\nMOLLERING  M AA1 - L ER0 - IH0 NG\nMOLLET  M AA1 - L IH0 T\nMOLLETT  M AA1 - L IH0 T\nMOLLEY  M AA1 - L IY0\nMOLLICA  M AA1 - L IH0 - K AH0\nMOLLIE  M AA1 - L IY0\nMOLLIFIED  M AA1 - L AH0 - F AY2 D\nMOLLIFY  M AA1 - L AH0 - F AY2\nMOLLISON  M AA1 - L IH0 - S AH0 N\nMOLLNER  M AA1 L - N ER0\nMOLLO  M AA1 - L OW0\nMOLLOHAN  M AA1 - L AH0 - HH AE0 N\nMOLLOY  M AA1 - L OY0\nMOLLUSK  M AA1 - L AH0 S K\nMOLLUSKS  M AA1 - L AH0 S K S\nMOLLY  M AA1 - L IY0\nMOLLY'S  M AA1 - L IY0 Z\nMOLLYCODDLE  M AA1 - L IY0 - K AA2 - D AH0 L\nMOLNAR  M OW1 L - N ER0\nMOLNAR(2)  M OW1 L - N AA0 R\nMOLNER  M OW1 L - N ER0\nMOLOCK  M AA1 - L AH0 K\nMOLOKAI  M AA1 - L AH0 - K AY2\nMOLONEY  M AH0 - L OW1 - N IY0\nMOLONICKS  M AH0 - L AO1 - N IH0 K S\nMOLONY  M AH0 - L AO1 - N IY0\nMOLOTOV  M AO1 - L AH0 - T AA2 F\nMOLPUS  M AO1 L - P AH0 S\nMOLPUS'  M AO1 L - P AH0 S\nMOLPUS'S  M AO1 L - P AH0 - S IH0 S\nMOLSON  M OW1 L - S AH0 N\nMOLSTAD  M OW1 L - S T AH0 D\nMOLT  M OW1 L T\nMOLTEN  M OW1 L - T AH0 N\nMOLTER  M OW1 L - T ER0\nMOLTING  M OW1 L - T IH0 NG\nMOLTON  M OW1 L - T AH0 N\nMOLTZ  M OW1 L T S\nMOLY  M OW1 - L IY0\nMOLYBDENUM  M AH0 - L IH1 B - D IH0 - N AH0 M\nMOLYNEAUX  M AA1 - L IH0 - N OW0\nMOLZAHN  M OW1 L - Z AH0 N\nMOM  M AA1 M\nMOM'S  M AA1 M Z\nMOMA  M OW1 - M AH0\nMOMA'S  M OW1 - M AH0 Z\nMOMAN  M OW1 - M AH0 N\nMOMAYEZ  M OW0 - M EY1 - EH0 Z\nMOMBASA  M AA0 M - B AA1 - S AH0\nMOMENT  M OW1 - M AH0 N T\nMOMENT'S  M OW1 - M AH0 N T S\nMOMENTARILY  M OW2 - M AH0 N - T EH1 - R AH0 - L IY0\nMOMENTARY  M OW1 - M AH0 N - T EH2 - R IY0\nMOMENTOUS  M OW0 - M EH1 N - T AH0 S\nMOMENTS  M OW1 - M AH0 N T S\nMOMENTUM  M OW0 - M EH1 N - T AH0 M\nMOMIGLIANO  M OW0 - M IH1 - G L IY0 - AA1 - N OW0\nMOMMA  M AA1 - M AH0\nMOMMENS  M AA1 - M AH0 N Z\nMOMMIES  M AA1 - M IY0 Z\nMOMMY  M AA1 - M IY0\nMOMMY'S  M AA1 - M IY0 Z\nMOMOKAWA  M OW2 - M OW0 - K AA1 - W AH0\nMOMOKAWA'S  M OW2 - M OW0 - K AA1 - W AH0 Z\nMOMS  M AA1 M Z\nMON  M OW1 N\nMON(2)  M AA1 N\nMONA  M OW1 - N AH0\nMONA'S  M OW1 - N AH0 Z\nMONACELLI  M OW0 - N AA0 - CH EH1 - L IY0\nMONACHINO  M OW0 - N AA0 - K IY1 - N OW0\nMONACO  M AA1 - N AH0 - K OW2\nMONAD  M OW1 - N AE0 D\nMONADNOCK  M AA2 - N AE1 D - N AA0 K\nMONAGENE  M AA1 - N AH0 - JH IY2 N\nMONAGHAN  M AA1 - N AH0 - HH AE0 N\nMONAHAN  M AA1 - N AH0 - HH AE0 N\nMONARCH  M AA1 - N AA2 R K\nMONARCH'S  M AA1 - N AA2 R K S\nMONARCHIES  M AA1 - N AA0 R - K IY0 Z\nMONARCHIST  M AA1 - N AA0 R - K IH0 S T\nMONARCHISTS  M AA1 - N AA0 R - K IH0 S T S\nMONARCHISTS(2)  M AA1 - N AA0 R - K IH0 S S\nMONARCHISTS(3)  M AA1 - N AA0 R - K IH0 S\nMONARCHS  M AA1 - N AA2 R K S\nMONARCHY  M AA1 - N AA0 R - K IY0\nMONARREZ  M OW0 - N AA1 - R EH0 Z\nMONASH  M AA1 - N AE2 SH\nMONASTERIES  M AA1 - N AH0 - S T EH2 - R IY0 Z\nMONASTERY  M AA1 - N AH0 - S T EH2 - R IY0\nMONASTIC  M AH0 - N AE1 - S T IH0 K\nMONASTICISM  M AH0 - N AE1 - S T AH0 - S IH2 - Z AH0 M\nMONATOMIC  M AA2 N - AH0 - T AA1 - M IH0 K\nMONCA  M OW1 N - K AH0\nMONCADA  M OW0 N - K AA1 - D AH0\nMONCAYO  M OW0 N - K EY1 - OW0\nMONCEAUX  M AH0 N - S OW1\nMONCRIEF  M AA1 N - K R IY0 F\nMONCUR  M AA1 N - K ER0\nMONCURE  M OW0 N - K UH1 - R IY0\nMONCUS  M AA1 N - K IH0 S\nMONDA  M AA1 N - D AH0\nMONDADORI  M AA2 N - D AH0 - D AO1 - R IY0\nMONDALE  M AA1 N - D EY2 L\nMONDALE'S  M AA1 N - D EY2 L Z\nMONDALLO  M AA0 N - D AE1 - L OW0\nMONDAVI  M AA0 N - D AA1 - V IY0\nMONDAY  M AH1 N - D IY0\nMONDAY'S  M AH1 N - D IY0 Z\nMONDAY'S(2)  M AH1 N - D EY2 Z\nMONDAY(2)  M AH1 N - D EY2\nMONDAYS  M AH1 N - D IY0 Z\nMONDAYS(2)  M AH1 N - D EY2 Z\nMONDE  M AA1 N D\nMONDELLI  M OW0 N - D EH1 - L IY0\nMONDELLO  M AA2 N - D EH1 - L OW0\nMONDEO  M AA2 N - D EY1 - OW0\nMONDEX  M AA1 N - D EH0 K S\nMONDO  M AA1 N - D OW0\nMONDOR  M AA1 N - D ER0\nMONDRAGON  M OW0 N - D R AA0 - G AO1 N\nMONDRIAN  M AA1 N - D R IY0 - AH0 N\nMONDRIAN(2)  M AA1 N - D R IY0 - AE0 N\nMONDRY  M AA1 N - D R IY0\nMONDS  M AA1 N D Z\nMONDSCHEIN  M AA1 N D - SH AY2 N\nMONDY  M AA1 N - D IY0\nMONE  M OW1 N\nMONELL  M AA1 - N AH0 L\nMONES  M OW1 N Z\nMONESSEN  M OW1 - N AH0 - S AH0 N\nMONESSEN(2)  M AH0 - N EH1 - S AH0 N\nMONET  M OW0 - N EY1\nMONET'S  M OW0 - N EY1 Z\nMONETARILY  M AA0 - N AH0 - T ER1 - IH0 - L IY0\nMONETARISM  M AA1 - N AH0 - T ER0 - IH2 - Z AH0 M\nMONETARIST  M AA1 - N AH0 - T ER0 - IH0 S T\nMONETARISTS  M AA1 - N AH0 - T ER0 - IH2 S T S\nMONETARISTS(2)  M AA1 - N AH0 - T ER0 - IH2 S S\nMONETARISTS(3)  M AA1 - N AH0 - T ER0 - IH2 S\nMONETARY  M AA1 - N AH0 - T EH2 - R IY0\nMONETT  M AA1 - N IH0 T\nMONETTE  M AH0 - N EH1 T\nMONEY  M AH1 - N IY0\nMONEY'S  M AH1 - N IY0 Z\nMONEYCARD  M AH1 - N IY0 - K AA2 R D\nMONEYCENTER  M AH1 - N IY0 - S EH2 N - T ER0\nMONEYED  M AH1 - N IY0 D\nMONEYLESS  M AH1 - N IY0 - L IH0 S\nMONEYLINE  M AH1 - N IY0 - L AY2 N\nMONEYLINE'S  M AH1 - N IY0 - L AY2 N Z\nMONEYMAKER  M AH1 - N IY0 - M EY2 - K ER0\nMONEYMAKERS  M AH1 - N IY0 - M EY2 - K ER0 Z\nMONEYMAKING  M AH1 - N IY0 - M EY2 - K IH0 NG\nMONEYPENNY  M AH1 - N IY0 - P EH2 - N IY0\nMONEYS  M AH1 - N IY0 Z\nMONEYWATCH  M AH1 - N IY0 - W AA2 CH\nMONEYWEEK  M AH1 - N IY0 - W IY2 K\nMONEYWEEK'S  M AH1 - N IY0 - W IY2 K S\nMONFILS  M AA1 N - F IH0 L Z\nMONFORT  M AA1 N - F ER0 T\nMONFORTE  M OW0 N - F AO1 R - T IY0\nMONG  M AO1 NG\nMONGAN  M AA1 NG - G AH0 N\nMONGE  M AA1 N JH\nMONGEAU  M AH0 NG - G OW1\nMONGELLI  M OW0 NG - G EH1 - L IY0\nMONGEON  M AA1 N - JH IH0 N\nMONGER  M AH1 NG - G ER0\nMONGERING  M AH1 NG - G ER0 - IH0 NG\nMONGERS  M AH1 NG - G ER0 Z\nMONGIELLO  M OW0 N - JH EH1 - L OW0\nMONGILLO  M OW0 NG - G IH1 - L OW0\nMONGOL  M AA1 NG - G AH0 L\nMONGOLD  M AA1 N - G OW2 L D\nMONGOLIA  M AA0 NG - G OW1 - L IY0 - AH0\nMONGOLIA(2)  M AA0 NG - G OW1 - L Y AH0\nMONGOLIAN  M AA0 NG - G OW1 - L IY0 - AH0 N\nMONGOLIAN(2)  M AA0 NG - G OW1 - L Y AH0 N\nMONGOLOID  M AA1 NG - G AH0 - L OY2 D\nMONGOLS  M AA1 NG - G AH0 L Z\nMONGOOSE  M AA1 NG - G UW0 S\nMONGOOSES  M AA1 NG - G UW0 - S AH0 Z\nMONGOSUTU  M AA2 NG - G OW0 - S UW1 - T UW0\nMONGOSUTU'S  M AA2 NG - G OW0 - S UW1 - T UW0 Z\nMONGSTAD  M AO1 NG - S T AE2 D\nMONHOLLEN  M AA1 N - HH AH0 - L AH0 N\nMONICA  M AA1 - N IH0 - K AH0\nMONICA'S  M AA1 - N IH0 - K AH0 Z\nMONICAL  M AA1 - N IH0 - K AH0 L\nMONICO  M OW0 - N IY1 - K OW0\nMONIED  M AH1 - N IY0 D\nMONIER  M OW1 - N IY0 - ER0\nMONIES  M AH1 - N IY0 Z\nMONIESON  M OW1 - N IY0 - S AH0 N\nMONIESON'S  M OW1 - N IY0 - S AH0 N Z\nMONIGOLD  M AA1 - N IH0 - G OW2 L D\nMONIKER  M AA1 - N IH0 - K ER0\nMONIKERS  M AA1 - N IH0 - K ER0 Z\nMONINGER  M OW1 - N IH0 - NG ER0\nMONIQUE  M OW2 - N IY1 K\nMONISM  M AA1 - N IH0 - Z AH0 M\nMONISMS  M AA1 - N IH0 - Z AH0 M Z\nMONITOR  M AA1 - N AH0 - T ER0\nMONITORED  M AA1 - N AH0 - T ER0 D\nMONITORING  M AA1 - N AH0 - T ER0 - IH0 NG\nMONITORS  M AA1 - N AH0 - T ER0 Z\nMONIZ  M AA1 - N IH0 Z\nMONJE  M AA1 N JH\nMONK  M AH1 NG K\nMONK'S  M AH1 NG K S\nMONKEE  M AA1 NG - K IY0\nMONKEES  M AA1 NG - K IY0 Z\nMONKEY  M AH1 NG - K IY0\nMONKEYING  M AH1 NG - K IY0 - IH0 NG\nMONKEYLIKE  M AH1 NG - K IY0 - L AY2 K\nMONKEYS  M AH1 NG - K IY0 Z\nMONKS  M AH1 NG K S\nMONMOUTH  M AA1 N - M AH0 TH\nMONMOUTH'S  M AA1 N - M AH0 TH S\nMONN  M AA1 N\nMONNETT  M AA1 - N IH0 T\nMONNIER  M AA1 - N IY0 - ER0\nMONNIG  M AA1 - N IH0 G\nMONNIN  M AA1 - N IH0 N\nMONO  M OW1 - N OW0\nMONOCARPIC  M AA2 - N AH0 - K AA1 R - P IH0 K\nMONOCHROMATIC  M AA2 - N AH0 - K R OW0 - M AE1 - T IH0 K\nMONOCHROME  M AA1 - N AH0 - K R OW2 M\nMONOCLATE  M AA1 - N AH0 - K L EY2 T\nMONOCLE  M AA1 - N AH0 - K AH0 L\nMONOCLINIC  M AA2 - N AH0 - K L IH1 - N IH0 K\nMONOCLONAL  M AA2 - N AH0 - K L OW1 - N AH0 L\nMONOGAMOUS  M AH0 - N AA1 - G AH0 - M AH0 S\nMONOGAMY  M AH0 - N AA1 - G AH0 - M IY0\nMONOGRAM  M AA1 - N AH0 - G R AE2 M\nMONOGRAMMED  M AA1 - N AH0 - G R AE2 M D\nMONOGRAPH  M AA1 - N AH0 - G R AE2 F\nMONOHULL  M AA1 - N AH0 - HH AH0 L\nMONOLINGUAL  M AA2 - N AH0 L - IH1 NG - G W AH0 L\nMONOLITH  M AA1 - N AH0 - L IH2 TH\nMONOLITHIC  M AA2 - N AH0 - L IH1 - TH IH0 K\nMONOLITHS  M AA1 - N AH0 - L IH2 TH S\nMONOLOGUE  M AA1 - N AH0 - L AO2 G\nMONOLOGUES  M AA1 - N AH0 - L AO2 G Z\nMONOMER  M AA1 - N AH0 - M ER0\nMONOMERS  M AA1 - N AH0 - M ER0 Z\nMONONGAHELA  M AH0 - N AO2 NG - G AH0 - HH EY1 - L AH0\nMONONUCLEAR  M AA2 - N AH0 - N UW1 K - L IY0 - ER0\nMONOPHONIC  M AA2 - N AH0 - F AA1 - N IH0 K\nMONOPLANE  M AA1 - N AH0 - P L EY2 N\nMONOPLANES  M AA1 - N AH0 - P L EY2 N Z\nMONOPOLE  M AA1 - N AH0 - P OW2 L\nMONOPOLES  M AA1 - N AH0 - P OW2 L Z\nMONOPOLIES  M AH0 - N AA1 - P AH0 - L IY0 Z\nMONOPOLIST  M AH0 - N AA1 - P AH0 - L AH0 S T\nMONOPOLISTIC  M AH0 - N AA2 - P AH0 - L IH1 - S T IH0 K\nMONOPOLIZATION  M AH0 - N AA2 - P AH0 - L IH0 - Z EY1 - SH AH0 N\nMONOPOLIZE  M AH0 - N AA1 - P AH0 - L AY2 Z\nMONOPOLIZED  M AH0 - N AA1 - P AH0 - L AY2 Z D\nMONOPOLIZES  M AH0 - N AA1 - P AH0 - L AY2 - Z IH0 Z\nMONOPOLIZING  M AH0 - N AA1 - P AH0 - L AY2 - Z IH0 NG\nMONOPOLY  M AH0 - N AA1 - P AH0 - L IY0\nMONORAIL  M AA1 - N ER0 - EY2 L\nMONORAILS  M AA1 - N ER0 - EY2 L Z\nMONOSACCHARIDE  M AA2 - N AH0 - S AE1 - K ER0 - AY2 D\nMONOSZON  M AA1 - N AH0 - Z AA2 N\nMONOTHEISM  M AA1 - N AH0 - TH IY0 - IH0 - Z AH0 M\nMONOTONE  M AA1 - N AH0 - T OW2 N\nMONOTONOUS  M AH0 - N AA1 - T AH0 N - AH0 S\nMONOTONY  M AH0 - N AA1 - T AH0 N - IY0\nMONOTYPE  M AA1 - N AH0 - T AY2 P\nMONOVALENT  M AA2 - N AH0 - V EY1 - L AH0 N T\nMONOXIDE  M AH0 - N AA1 K - S AY0 D\nMONREAL  M AA1 N - R AH0 L\nMONRO  M AA1 N - R OW0\nMONROE  M AH0 N - R OW1\nMONROE'S  M AH0 N - R OW1 Z\nMONROEVILLE  M AA0 N - R OW1 - V IH2 L\nMONROEVILLE(2)  M AH0 N - R OW1 - V IH2 L\nMONROVIA  M AA2 N - R OW1 - V IY0 - AH0\nMONROY  M AA1 N - R OY2\nMONSANTO  M AA2 N - S AE1 N - T OW0\nMONSANTO'S  M AA0 N - S AE1 N - T OW0 Z\nMONSEES  M AA1 N - S IY2 Z\nMONSEN  M AA1 N - S AH0 N\nMONSEY  M AA1 N - Z IY0\nMONSIEUR  M AH0 - S Y ER1\nMONSIEURS  M AH0 - S Y ER1 Z\nMONSIGNOR  M AA0 N - S IY1 - N Y ER0\nMONSIGNORS  M AA0 N - S IY1 - N Y ER0 Z\nMONSKY  M AA1 N S - K IY0\nMONSOD  M AA1 N - S AA0 D\nMONSON  M AA1 N - S AH0 N\nMONSOON  M AA0 N - S UW1 N\nMONSOONAL  M AA0 N - S UW1 - N AH0 L\nMONSOONS  M AA0 N - S UW1 N Z\nMONSOUR  M AA1 N - S ER0\nMONSTER  M AA1 N - S T ER0\nMONSTERS  M AA1 N - S T ER0 Z\nMONSTROSITY  M AA0 N S - T R AA1 - S AH0 - T IY0\nMONSTROUS  M AA1 N S - T R AH0 S\nMONT  M AA1 N T\nMONTAG  M AH0 N - T AE1 G\nMONTAGE  M AA0 N - T AA1 ZH\nMONTAGNA  M OW0 N - T AA1 G - N AH0\nMONTAGNE  M AH0 N - T EY1 N Y\nMONTAGNIER  M AA0 N - T AE1 - N Y ER0\nMONTAGNINO  M OW0 N - T AA0 G - N IY1 - N OW0\nMONTAGU  M AA1 N - T AH0 - G Y UW2\nMONTAGU'S  M AA1 N - T AH0 - G Y UW2 Z\nMONTAGUE  M AA1 N - T AH0 - G Y UW2\nMONTALBAN  M AA0 N - T AE1 L - B AH0 N\nMONTALBANO  M OW0 N - T AA0 L - B AA1 - N OW0\nMONTALBO  M AA2 N - T AE1 L - B OW0\nMONTALTO  M OW0 N - T AA1 L - T OW0\nMONTALVO  M OW0 N - T AA1 L - V OW0\nMONTANA  M AA0 N - T AE1 - N AH0\nMONTANA'S  M AA0 N - T AE1 - N AH0 Z\nMONTANAN  M AA0 N - T AE1 - N AH0 N\nMONTANANS  M AA0 N - T AE1 - N AH0 N Z\nMONTANANS(2)  M AO2 N - T AE1 - N AH0 N Z\nMONTANARI  M OW0 N - T AA0 - N AA1 - R IY0\nMONTANARO  M OW0 N - T AA0 - N AA1 - R OW0\nMONTAND  M AA1 N - T AH0 N D\nMONTANEZ  M OW0 N - T AA1 - N EH0 Z\nMONTANTE  M OW0 N - T AA1 N - T IY0\nMONTANYE  M OW0 N - T AA1 - N Y EY0\nMONTAVON  M OW0 N - T AA0 - V AO1 N\nMONTAZERI  M AA2 N - T AH0 - Z EH1 - R IY0\nMONTBLANC  M AA0 N T - B L AE1 NG K\nMONTBLANC(2)  M OW0 N T - B L AA1 NG K\nMONTCLAIR  M AA2 N T - K L EH1 R\nMONTE  M AA1 N - T IY0\nMONTE'S  M AA1 N - T IY0 Z\nMONTEAGUDO  M OW0 N - T AH0 - G UW1 - D OW0\nMONTEBELLO  M AA2 N - T IH0 - B EH1 - L OW0\nMONTECALVO  M OW0 N - T EH0 - K AA1 L - V OW0\nMONTEDISON  M AA0 N - T EH1 - D IH0 - S AH0 N\nMONTEDISON'S  M AA0 N - T EH1 - D IH0 - S AH0 Z\nMONTEE  M AA1 N - T IY0\nMONTEFIORE  M AA2 N - T AH0 - F IY0 - AO1 - R IY0\nMONTEFIORE(2)  M AA2 N - T AH0 - F Y AO1 R\nMONTEFORTE  M OW0 N - T EH0 - F AO1 R - T IY0\nMONTEFUSCO  M OW0 N - T EH0 - F UW1 - S K OW0\nMONTEGO  M AO2 N - T IY1 - G OW0\nMONTEIL  M AA0 N - T AY1 L\nMONTEIRO  M AA0 N - T EH1 - R OW0\nMONTEJANO  M AA0 N - T EY0 - AA1 - N OW0\nMONTEL  M AA0 N - T EH1 L\nMONTEL'S  M AA0 N - T EH1 L Z\nMONTELEONE  M AA0 N - T EY0 - L EY0 - OW1 - N IY0\nMONTELLA  M AA2 N - T EH1 - L AH0\nMONTELLO  M AA2 N - T EH1 - L OW0\nMONTELONGO  M AA0 N - T EH0 - L OW1 NG - G OW0\nMONTEMARANO  M AA0 N - T EH0 - M AA0 - R AA1 - N OW0\nMONTEMAYOR  M AA0 N - T EY0 - M EY0 - AO1 R\nMONTEMURRO  M AA0 N - T EH0 - M UH1 - R OW0\nMONTENAY  M AA1 N - T AH0 - N EY2\nMONTENEGRAN  M AA2 N - T AH0 - N EY1 - G R AH0 N\nMONTENEGRO  M AA2 N - T AH0 - N EY1 - G R OW0\nMONTENEGRO'S  M AA2 N - T AH0 - N EY1 - G R OW0 Z\nMONTER  M AA1 N - T ER0\nMONTEREY  M AA2 N - T ER0 - EY1\nMONTEREY(2)  M AA2 - N ER0 - EY1\nMONTERO  M AA0 N - T EH1 - R OW0\nMONTEROSSO  M OW0 N - T ER0 - OW1 - S OW0\nMONTERREY  M AA2 N - T ER0 - EY1\nMONTERREY(2)  M AA2 - N ER0 - EY1\nMONTERREY(3)  M AA2 N - T ER0 - R EY1\nMONTERREY(4)  M AA2 - N ER0 - R EY1\nMONTES  M AA1 N - T IY0 Z\nMONTESANO  M OW0 N - T EH0 - S AA1 - N OW0\nMONTESDEOCA  M OW0 N - T EH0 S - D IY0 - AA1 - K AH0\nMONTESI  M OW0 N - T EH1 - S IY0\nMONTESINO  M OW0 N - T EH0 - S IY1 - N OW0\nMONTESSORI  M AA2 N - T AH0 - S AO1 - R IY0\nMONTEVERDE  M OW0 N - T EH0 - V EH1 R - D IY0\nMONTEVIDEO  M AA2 N - T AH0 - V IH1 - D IY0 - OW2\nMONTEZ  M OW0 N - T EH1 Z\nMONTEZUMA  M AA2 N - T IH0 - Z UW1 - M AH0\nMONTFORD  M AH0 N T - F AO1 R D\nMONTFORT  M AA1 N T - F ER0 T\nMONTGOMERY  M AA0 N T - G AH1 M - R IY0\nMONTGOMERY'S  M AA0 N T - G AH1 - M R IY0 Z\nMONTGORIS  M AA0 N T - G AO1 - R IH0 S\nMONTH  M AH1 N TH\nMONTH'S  M AH1 N TH S\nMONTHLONG  M AH1 N - TH L AO2 NG\nMONTHLY  M AH1 N TH - L IY0\nMONTHS  M AH1 N TH S\nMONTHS'  M AA1 N TH S\nMONTI  M AA1 N - T IY0\nMONTICCIOLO  M AA0 N - T IY2 - CH IY0 - OW1 - L OW0\nMONTICELLO  M AA2 N - T AH0 - S EH1 - L OW0\nMONTICELLO(2)  M AA2 N - T IH0 - S EH1 - L OW0\nMONTIE  M AA1 N - T IY0\nMONTIEL  M OW0 N - T IY0 - EH1 L\nMONTIEN  M AA2 N - T IY1 - EH0 N\nMONTIETH  M AA1 N - T IY0 - IH0 TH\nMONTIJO  M OW0 N - T IY1 - Y OW0\nMONTINI  M OW0 N - T IY1 - N IY0\nMONTJOY  M AA1 N T - JH OY2\nMONTMINY  M AA1 N T - M IH0 - N IY0\nMONTONE  M OW0 N - T OW1 - N IY0\nMONTOOTH  M AA1 N - T UW2 TH\nMONTOYA  M AA0 N - T OY1 - AH0\nMONTPELIER  M AA0 N T - P IY1 - L IY0 - ER0\nMONTPELIER'S  M AA0 N T - P IY1 - L IY0 - ER0 Z\nMONTREAL  M AH2 N - T R IY0 - AO1 L\nMONTREAL'S  M AA2 N - T R IY0 - AA1 L Z\nMONTRONE  M AA0 N - T R OW1 N\nMONTROSE  M AA1 N - T R OW2 Z\nMONTROSS  M OW1 N - T R OW0 S\nMONTROY  M AA1 N - T R OY2\nMONTS  M AA1 N T S\nMONTUORI  M OW0 N T - W AO1 - R IY0\nMONTVALE  M AA1 N T - V EY2 L\nMONTVILLE  M OW1 N T - V IH0 L\nMONTY  M AO1 N - T IY0\nMONTZ  M AA1 N T S\nMONUMENT  M AA1 - N Y UW0 - M AH0 N T\nMONUMENT(2)  M AA1 - N Y AH0 - M AH0 N T\nMONUMENTAL  M AA2 - N Y AH0 - M EH1 N - T AH0 L\nMONUMENTAL(2)  M AA2 - N Y AH0 - M EH1 - N AH0 L\nMONUMENTAL(3)  M AA2 - N Y UW0 - M EH1 N - T AH0 L\nMONUMENTALLY  M AA2 - N Y AH0 - M EH1 N - T AH0 - L IY0\nMONUMENTALLY(2)  M AA2 - N Y UW0 - M EH1 N - T AH0 - L IY0\nMONUMENTALLY(3)  M AA2 - N Y AH0 - M EH1 N - AH0 - L IY0\nMONUMENTALLY(4)  M AA2 - N Y UW0 - M EH1 - N AH0 - L IY0\nMONUMENTS  M AA1 - N Y AH0 - M AH0 N T S\nMONUMENTS(2)  M AA1 - N Y UW0 - M AH0 N T S\nMONUS  M OW1 - N AH0 S\nMONY  M OW1 - N IY0\nMONZERT  M AA1 N - Z ER0 T\nMONZINGO  M OW0 N - Z IY1 NG - G OW0\nMONZO  M AA1 N - Z OW0\nMONZON  M OW0 N - Z AO1 N\nMONZONITE  M AA1 N - Z AH0 - N AY2 T\nMOOBERRY  M UW1 - B EH2 - R IY0\nMOOD  M UW1 D\nMOODIE  M UW1 - D IY0\nMOODS  M UW1 D Z\nMOODY  M UW1 - D IY0\nMOODY'S  M UW1 - D IY0 Z\nMOOERS  M UW1 - ER0 Z\nMOOG  M UW1 G\nMOOK  M UH1 K\nMOOMAW  M UW1 - M AO2\nMOOMEY  M UW1 - M IY0\nMOON  M UW1 N\nMOON'S  M UW1 N Z\nMOONBEAM  M UW1 N - B IY2 M\nMOONDREAMER  M UW1 N - D R IY2 - M ER0\nMOONDREAMERS  M UW1 N - D R IY2 - M ER0 Z\nMOONE  M UW1 N\nMOONEY  M UW1 - N IY0\nMOONEYHAM  M UW1 - N IY0 - HH AH0 M\nMOONEYHAN  M UW1 - N IY0 - HH AH0 N\nMOONIE  M UW1 - N IY0\nMOONIES  M UW1 - N IY0 Z\nMOONLIGHT  M UW1 N - L AY2 T\nMOONLIGHTING  M UW1 N - L AY2 - T IH0 NG\nMOONLIKE  M UW1 N - L AY2 K\nMOONLIT  M UW1 N - L IH2 T\nMOONS  M UW1 N Z\nMOONSHINE  M UW1 N - SH AY2 N\nMOONSTONE  M UW1 N - S T OW2 N\nMOONSTRUCK  M UW1 N - S T R AH2 K\nMOONVES  M UW1 N - V EH0 Z\nMOOR  M UH1 R\nMOORADIAN  M UH0 - R EY1 - D IY0 - AH0 N\nMOORCO  M UH1 R - K OW0\nMOORCO(2)  M AO1 R - K OW0\nMOORE  M UH1 R\nMOORE'S  M UH1 R Z\nMOORE'S(2)  M AO1 R Z\nMOORE(2)  M AO1 R\nMOORED  M UH1 R D\nMOOREFIELD  M UH1 - R IH0 - F IY0 L D\nMOOREFIELD(2)  M UH1 R - F IY0 L D\nMOOREHEAD  M UH1 R - HH EH2 D\nMOOREHOUSE  M UH1 R - HH AW2 S\nMOORER  M UH1 - R ER0\nMOORES  M UH1 R Z\nMOORESTOWN  M AO1 R Z - T AW2 N\nMOORHEAD  M UH1 R - HH EH2 D\nMOORHOUSE  M UH1 R - HH AW2 S\nMOORING  M UH1 - R IH0 NG\nMOORINGS  M UW1 - R IH0 NG Z\nMOORINGS(2)  M AO1 - R IH0 NG Z\nMOORISH  M UH1 - R IH0 SH\nMOORLAND  M UH1 R - L AE2 N D\nMOORLAND'S  M UH1 R - L AE2 N D Z\nMOORLANDS  M UH1 R - L AE2 N D Z\nMOORMAN  M UH1 R - M AH0 N\nMOORMANN  M UH1 R - M AH0 N\nMOORS  M UH1 R Z\nMOOS  M UW1 Z\nMOOSA  M UW1 - S AH0\nMOOSE  M UW1 S\nMOOSEHEAD  M UW1 S - HH EH2 D\nMOOSMAN  M UW1 S - M AH0 N\nMOOT  M UW1 T\nMOOTHART  M UW1 - TH AA0 R T\nMOOTS  M UW1 T S\nMOOTY  M UW1 - T IY0\nMOOTZ  M UW1 T S\nMOP  M AA1 P\nMOPBOARD  M AA1 P - B AO2 R D\nMOPE  M OW1 P\nMOPING  M OW1 - P IH0 NG\nMOPPED  M AA1 P T\nMOPPES  M AA1 P S\nMOPPING  M AA1 - P IH0 NG\nMOPS  M AA1 P S\nMOPUS  M OW1 - P AH0 S\nMOQUIN  M OW0 - K W IY1 N\nMOR  M AO1 R\nMOR'S  M AO1 R Z\nMORA  M AO1 - R AH0\nMORABITO  M AO0 - R AA0 - B IY1 - T OW0\nMORACE  M AO0 - R AA1 - CH IY0\nMORACHOV  M AO1 - R AH0 - CH AO2 V\nMORAD  M AO1 - R AH0 D\nMORADO  M AO0 - R AA1 - D OW0\nMORAGA  M AO0 - R AA1 - G AH0\nMORAGNE  M ER0 - EY1 N Y\nMORAHAN  M AO1 - R AH0 - HH AE0 N\nMORAIN  M ER0 - EY1 N\nMORAINAL  M ER0 - EY1 - N AH0 L\nMORAINE  M ER0 - EY1 N\nMORAIS  M ER0 - EY1\nMORAITIS  M AO0 - R AY1 - T IH0 S\nMORAL  M AO1 - R AH0 L\nMORALE  M ER0 - AE1 L\nMORALES  M ER0 - AE1 L Z\nMORALES(2)  M AO0 - R AE1 - L EH0 S\nMORALEZ  M AO0 - R AA1 - L EH0 Z\nMORALISM  M AO1 - R AH0 - L IH2 - Z AH0 M\nMORALIST  M AO1 - R AH0 - L IH0 S T\nMORALISTIC  M AO2 - R AH0 - L IH1 - S T IH0 K\nMORALISTS  M AO1 - R AH0 - L IH0 S T S\nMORALISTS(2)  M AO1 - R AH0 - L IH0 S S\nMORALISTS(3)  M AO1 - R AH0 - L IH0 S\nMORALITY  M ER0 - AE1 - L AH0 - T IY0\nMORALIZE  M AO1 - R AH0 - L AY2 Z\nMORALIZING  M AO1 - R AH0 - L AY2 - Z IH0 NG\nMORALLY  M AO1 - R AH0 - L IY0\nMORALS  M AO1 - R AH0 L Z\nMORAN  M ER0 - AE1 N\nMORAND  M AO1 - R AH0 N D\nMORANDAN  M AH0 - R AE1 N - D AH0 N\nMORANDI  M AO0 - R AA1 N - D IY0\nMORANDO  M AO0 - R AA1 N - D OW0\nMORANG  M AO1 - R AH0 NG\nMORANO  M AO0 - R AA1 - N OW0\nMORANT  M AO1 - R AH0 N T\nMORANTE  M AO0 - R AA1 N - T IY0\nMORASH  M AO1 - R AH0 SH\nMORASKI  M ER0 - AA1 S - K IY0\nMORASS  M ER0 - AE1 S\nMORASSES  M ER0 - AE1 - S IH0 Z\nMORATH  M AO1 - R AH0 TH\nMORATORIA  M AO2 - R AH0 - T AO1 - R IY0 - AH0\nMORATORIUM  M AO2 - R AH0 - T AO1 - R IY0 - AH0 M\nMORATORIUMS  M AO2 - R AH0 - T AO1 - R IY0 - AH0 M Z\nMORAVEC  M ER0 - AA1 - V IH0 K\nMORAVEK  M AO1 - R AH0 - V IH0 K\nMORAVIAN  M ER0 - EY1 - V IY0 - AH0 N\nMORAWSKI  M ER0 - AA1 F S - K IY0\nMORAY  M ER0 - EY1\nMORAY(2)  M AO1 - R EY0\nMORAYS  M ER0 - EY1 Z\nMORAYS(2)  M AO1 - R EY0 Z\nMORBID  M AO1 R - B AH0 D\nMORBIDITY  M AO0 R - B IH1 - D AH0 - T IY0\nMORBY  M AO1 R - B IY0\nMORCOM  M AO1 R - K AH0 M\nMORD  M AO1 R D\nMORDANT  M AO1 R - D AH0 N T\nMORDECAI  M AO1 R - D AH0 - K AY2\nMORDECHAI  M AO1 R - D AH0 - K AY2\nMORDEN  M AO1 R - D AH0 N\nMORE  M AO1 R\nMOREA  M AO1 - R IY0 - AH0\nMOREAU  M ER0 - OW1\nMOREDOCK  M AO1 - R IH0 - D AA0 K\nMOREE  M ER0 - IY1\nMOREEN  M AO0 - R IY1 N\nMOREFIELD  M AO1 - R IH0 - F IY2 L D\nMOREFIELD(2)  M AO1 R - F IY2 L D\nMOREHART  M AO1 - R IH0 - HH AA0 R T\nMOREHART(2)  M AO1 R - HH AA0 R T\nMOREHEAD  M AO1 - R HH EH0 D\nMOREHOUSE  M AO1 R - HH AW2 S\nMOREIRA  M AO0 - R EH1 - R AH0\nMOREJON  M AO1 - R IH0 - JH AA0 N\nMOREL  M ER0 - EH1 L\nMORELAND  M AO1 R - L AH0 N D\nMORELL  M AO1 - R AH0 L\nMORELLA  M AO0 - R EH1 - L AH0\nMORELLI  M AO0 - R EH1 - L IY0\nMORELLO  M ER0 - EH1 - L OW0\nMORELOCK  M AO1 - R IH0 - L AA0 K\nMORELOCK(2)  M AO1 R - L AA0 K\nMOREMAN  M AO1 R - M AH0 N\nMOREN  M AO1 - R AH0 N\nMORENA  M AO0 - R EY1 - N AH0\nMORENCY  M AO0 - R AO1 N - S IY0\nMORENO  M AO0 - R IY1 - N OW0\nMORENO(2)  M AO0 - R EY1 - N OW0\nMOREOVER  M AO0 - R OW1 - V ER0\nMORERA  M AO0 - R EH1 - R AH0\nMORES  M AO1 - R EY2 Z\nMORES(2)  M AO1 - R IY2 Z\nMORESCO  M AO0 - R EH1 - S K OW0\nMORESO  M AO0 - R EH1 - S OW0\nMORET  M AO1 - R IH0 T\nMORETON  M AO1 - R IH0 - T AA0 N\nMORETTI  M AO0 - R EH1 - T IY0\nMORETTO  M AO0 - R EH1 - T OW0\nMORETZ  M AO1 - R IH0 T S\nMOREVER  M AO2 - R EH1 - V ER0\nMOREY  M AO1 - R IY0\nMORFIN  M AO1 R - F IH0 N\nMORFORD  M AO1 R - F ER0 D\nMORGA  M AO1 R - G AH0\nMORGADO  M AO0 R - G AA1 - D OW0\nMORGAN  M AO1 R - G AH0 N\nMORGAN'S  M AO1 R - G AH0 N Z\nMORGANA  M AO0 R - G AE1 - N AH0\nMORGANS  M AO1 R - G AH0 N Z\nMORGANSTERN  M AO1 R - G AH0 N - S T ER0 N\nMORGANTE  M AO0 R - G AA1 N - T IY0\nMORGANTI  M AO0 R - G AA1 N - T IY0\nMORGANTOWN  M AO1 R - G AH0 N - T AW2 N\nMORGART  M AO1 R - G AA0 R T\nMORGEN  M AO1 R - G AH0 N\nMORGENROTH  M AO1 R - G IH0 N - R AO0 TH\nMORGENSTERN  M AO1 R - G IH0 N - S T ER0 N\nMORGENTHALER  M AO1 R - G IH0 N - TH AH0 - L ER0\nMORGENTHAU  M AO1 R - G AH0 N - TH AW2\nMORGUE  M AO1 R G\nMORGUES  M AO1 R G Z\nMORGUN  M AO1 R - G AH0 N\nMORI  M AO1 - R IY0\nMORIA  M AO1 - R IY0 - AH0\nMORIAL  M AO1 - R IY0 - AH0 L\nMORIARITY  M AO2 - R IY0 - AA1 - R AH0 - T IY0\nMORIARTY  M AO2 - R IY0 - AA1 R - T IY0\nMORIBUND  M AO1 - R AH0 - B AH0 N D\nMORIC  M AO1 - R IH0 K\nMORICE  M AO1 - R IH0 S\nMORICI  M AO0 - R IY1 - CH IY0\nMORIHIRO  M AO0 - R IY0 - HH IH1 - R OW0\nMORIHIRO'S  M AO0 - R IY0 - HH IH1 - R OW0 Z\nMORIKAWA  M AO0 - R IY0 - K AA1 - W AH0\nMORILLO  M AO0 - R IH1 - L OW0\nMORILLOM  M AO1 - R IH0 - L AO0 M\nMORILLONO  M AO0 - R IH1 - L AH0 - N OW0\nMORIMOTO  M AO0 - R IY0 - M OW1 - T OW0\nMORIN  M AO1 - R IH0 N\nMORINE  M AO0 - R IY1 - N IY0\nMORING  M AO1 - R IH0 NG\nMORINI  M AO0 - R IY1 - N IY0\nMORINO  M AO0 - R IY1 - N OW0\nMORIOKA  M AO0 - R IY0 - OW1 - K AH0\nMORIS  M AO1 - R IH0 S\nMORISETTE  M AO1 - R IH0 - S EH0 T\nMORISHITA  M AO0 - R IY0 - SH IY1 - T AH0\nMORISON  M AO1 - R IH0 - S AH0 N\nMORISSETTE  M AO1 - R IH0 - S EH0 T\nMORITA  M AO0 - R IY1 - T AH0\nMORITZ  M AO0 - R IH1 T S\nMORIYA  M AO0 - R IY1 - AH0\nMORJERA  M AO0 R - JH EH1 - R AH0\nMORK  M AO1 R K\nMORKEN  M AO1 R - K AH0 N\nMORLAN  M AO1 R - L AH0 N\nMORLAND  M AO1 R - L AH0 N D\nMORLEY  M AO1 R - L IY0\nMORLOCK  M AO1 R - L AH0 K\nMORMAN  M AO1 R - M AH0 N\nMORMILE  M AO1 R - M AY0 L\nMORMINO  M AO0 R - M IY1 - N OW0\nMORMON  M AO1 R - M AH0 N\nMORMONISM  M AO1 R - M AH0 - N IH0 Z M\nMORMONISM(2)  M AO1 R - M AH0 - N IH0 - Z AH0 M\nMORMONS  M AO1 R - M AH0 N Z\nMORNA  M AO1 R - N AH0\nMORNEAU  M ER0 - N OW1\nMORNEAULT  M ER0 - N OW1\nMORNING  M AO1 R - N IH0 NG\nMORNING'S  M AO1 R - N IH0 NG Z\nMORNINGS  M AO1 R - N IH0 NG Z\nMORNINGSTAR  M AO1 R - N IH0 NG - S T AA2 R\nMORNINGSTAR'S  M AO1 R - N IH0 NG - S T AA2 R Z\nMORO  M AO1 - R OW2\nMOROCCAN  M ER0 - AA1 - K AH0 N\nMOROCCANS  M ER0 - AA1 - K AH0 N Z\nMOROCCO  M ER0 - AA1 - K OW0\nMORON  M AO1 - R AA2 N\nMORONES  M AO0 - R OW1 - N EH0 S\nMORONEY  M ER0 - OW1 - N IY0\nMORONI  M ER0 - OW1 - N IY0\nMOROS  M AO1 - R OW0 Z\nMOROSE  M ER0 - OW1 S\nMOROSKY  M AO0 - R AO1 S - K IY0\nMOROVCIC  M AO0 - R AA1 V - CH IH0 K\nMOROVCIC'S  M AO0 - R AA1 V - CH IH0 K S\nMOROWICK  M AO1 - R AH0 - W IH2 K\nMOROZ  M AO1 - R OW0 Z\nMORPH  M AO1 R F\nMORPHEW  M AO1 R - F Y UW0\nMORPHIN  M AO1 R - F AH0 N\nMORPHINE  M AO1 R - F IY0 N\nMORPHING  M AO1 R - F IH0 NG\nMORPHIS  M AO1 R - F IH0 S\nMORPHOGENESIS  M AO2 R - F AH0 - JH EH1 - N AH0 - S AH0 S\nMORPHOLOGICAL  M AO2 R - F AH0 - L AA1 - JH IH0 - K AH0 L\nMORPHOLOGY  M AO0 R - F AA1 - L AH0 - JH IY0\nMORPHONIOS  M AO0 R - F AO1 - N IY0 - AH0 S\nMORPHONIOS(2)  M AO0 R - F AO1 - N IY0 - OW0 S\nMORPHS  M AO1 R F S\nMORR  M AO1 R\nMORRA  M AO1 - R AH0\nMORRALL  M AO0 - R AA1 L\nMORREALE  M AO0 - R IY1 - L IY0\nMORRELL  M AO0 - R EH1 L\nMORREN  M AO1 - R AH0 N\nMORRICAL  M AO1 - R IH0 - K AH0 L\nMORRIE  M AO1 - R IY0\nMORRILL  M AO0 - R IY1 L\nMORRIN  M AO1 - R IH0 N\nMORRIS  M AO1 - R AH0 S\nMORRIS'  M AO1 - R AH0 S\nMORRIS'S  M AO1 - R IH0 - S IH0 Z\nMORRIS(2)  M AO1 - R IH0 S\nMORRISETT  M AO1 - R AH0 - S EH2 T\nMORRISETTE  M AO1 - R IH0 - S EH0 T\nMORRISEY  M AO1 - R IH0 - S IY0\nMORRISH  M AO1 - R IH0 SH\nMORRISON  M AO1 - R IH0 - S AH0 N\nMORRISON'S  M AO1 - R IH0 - S AH0 N Z\nMORRISS  M AO1 - R IH0 - S IH0 Z\nMORRISSETTE  M AO1 - R IH0 - S EH0 T\nMORRISSEY  M AO1 - R IH0 - S IY0\nMORRISTOWN  M AO1 - R AH0 - S T AW2 N\nMORRISVILLE  M AO1 - R AH0 - S V IH2 L\nMORRISVILLE'S  M AO1 - R AH0 - S V IH2 L Z\nMORRO  M AO1 - R OW0\nMORRONE  M AO0 - R OW1 - N IY0\nMORROW  M AA1 - R OW0\nMORROW(2)  M AO1 - R OW0\nMORRY  M AO1 - R IY0\nMORSCH  M AO1 R SH\nMORSE  M AO1 R S\nMORSEL  M AO1 R - S AH0 L\nMORSELS  M AO1 R - S AH0 L Z\nMORSON  M AO1 R - S AH0 N\nMORSS  M AO1 R S\nMORT  M AO1 R T\nMORTAL  M AO1 R - T AH0 L\nMORTALITY  M AO0 R - T AE1 - L AH0 - T IY0\nMORTALLY  M AO1 R - T AH0 - L IY0\nMORTALS  M AO1 R - T AH0 L Z\nMORTAR  M AO1 R - T ER0\nMORTARA  M AO0 R - T AA1 - R AH0\nMORTARS  M AO1 R - T ER0 Z\nMORTEKI  M AO0 R - T EH1 - K IY0\nMORTELL  M AO0 R - T EY1 L\nMORTELLARO  M AO0 R - T EH0 - L AA1 - R OW0\nMORTEM  M AO1 R - T AH0 M\nMORTEMS  M AO1 R - T AH0 M Z\nMORTEN  M AO1 R - T AH0 N\nMORTENSEN  M AO1 R - T IH0 N - S AH0 N\nMORTENSON  M AO1 R - T IH0 N - S AH0 N\nMORTER  M AO1 R - T ER0\nMORTGAGE  M AO1 R - G AH0 JH\nMORTGAGE'S  M AO1 R - G IH0 - JH IH0 Z\nMORTGAGE(2)  M AO1 R - G IH0 JH\nMORTGAGED  M AO1 R - G IH0 JH D\nMORTGAGEPOWER  M AO1 R - G IH0 JH - P AW2 R\nMORTGAGES  M AO1 R - G AH0 - JH AH0 Z\nMORTGAGES(2)  M AO1 R - G IH0 - JH IH0 Z\nMORTGAGING  M AO1 R - G IH0 - JH IH0 NG\nMORTICIAN  M AO0 R - T IH1 - SH AH0 N\nMORTIE  M AO1 R - T IY0\nMORTIER  M AO1 R - T IY0 - ER0\nMORTIFIED  M AO1 R - T AH0 - F AY2 D\nMORTIFY  M AO1 R - T IH0 - F AY2\nMORTIMER  M AO1 R - T IH0 - M ER0\nMORTIMORE  M AO0 R - T IY1 - M AO0 R\nMORTIS  M AO1 R - T IH0 S\nMORTLAND  M AO1 R T - L AH0 N D\nMORTNER  M AO1 R T - N ER0\nMORTON  M AO1 R - T AH0 N\nMORTON'S  M AO1 R - T AH0 N Z\nMORTUARY  M AO1 R - CH UW0 - EH2 - R IY0\nMORTY  M AO1 R - T IY0\nMORUHIRO  M AO2 - R UW0 - HH IH1 - R OW0\nMORUHIRO'S  M AO2 - R UW0 - HH IH1 - R OW0 Z\nMORVANT  M AO1 R - V AH0 N T\nMORVEN  M AO1 R - V AH0 N\nMORVILLO  M AO0 R - V IH1 - L OW0\nMORY  M AO1 - R IY0\nMORZE  M AO1 R Z\nMOSAIC  M OW0 - Z EY1 - IH0 K\nMOSAICAL  M OW0 - Z EY1 - IH0 - K AH0 L\nMOSAICS  M OW0 - Z EY1 - IH0 K S\nMOSBACHER  M AA1 S - B AA0 - K ER0\nMOSBRUCKER  M AA1 S - B R AH0 - K ER0\nMOSCA  M OW1 - S K AH0\nMOSCATO  M OW0 - S K AA1 - T OW0\nMOSCHELLA  M OW0 - S K EH1 - L AH0\nMOSCHETTI  M OW0 - S K EH1 - T IY0\nMOSCO  M OW1 - S K OW0\nMOSCOM  M AO1 S - K AH0 M\nMOSCOSO  M OW0 - S K OW1 - S OW0\nMOSCOW  M AA1 - S K OW2\nMOSCOW'S  M AO1 S - K AW0 Z\nMOSCOW'S(2)  M AA1 - S K OW2 Z\nMOSCOW(2)  M AO1 S - K AW0\nMOSCOWANE  M AA1 S K - OW0 - W EY0 N\nMOSE  M OW1 Z\nMOSEL  M OW1 - S AH0 L\nMOSELEY  M OW1 Z - L IY0\nMOSELEY-BRAUN  M OW1 Z - L IY0 - B R AA1 N\nMOSELLE  M OW0 - Z EH1 L\nMOSELY  M OW1 Z - L IY0\nMOSEMAN  M OW1 S - M AH0 N\nMOSER  M OW1 - Z ER0\nMOSES  M OW1 - Z AH0 S\nMOSES(2)  M OW1 - Z IH0 S\nMOSEY  M OW1 - Z IY0\nMOSH  M AO1 SH\nMOSHE  M OW0 - SH EH1\nMOSHE'S  M OW0 - SH EH1 Z\nMOSHE'S(2)  M OW1 - SH AH0 Z\nMOSHE(2)  M OW1 - SH AH0\nMOSHER  M OW1 - ZH ER0\nMOSHIER  M AA1 - SH IY0 - ER0\nMOSHOOD  M AA1 S - HH UH2 D\nMOSHUS  M OW1 - SH AH0 S\nMOSHUS(2)  M UW1 - SH AH0 S\nMOSIE  M AA1 - S IY0\nMOSIER  M OW1 - ZH ER0\nMOSIER(2)  M OW1 - Z IY0 - ER0\nMOSIMAN  M OW1 - S IY0 - M AH0 N\nMOSK  M AO1 S K\nMOSKAL  M AA1 S - K AH0 L\nMOSKATEL'S  M AO2 - S K AH0 - T EH1 L Z\nMOSKO  M OW1 - S K OW0\nMOSKOLENKO  M AO2 - S K OW0 - L EH1 NG - K OW0\nMOSKOVITZ  M AA1 - S K AH0 - V IH0 T S\nMOSKOW  M AA1 - S K OW0\nMOSKOWITZ  M AO1 - S K AH0 - W IH0 T S\nMOSKWA  M AA1 S K - V AH0\nMOSLE  M OW1 - S AH0 L\nMOSLEM  M AA1 Z - L AH0 M\nMOSLEMS  M AA1 Z - L AH0 M Z\nMOSLER  M AA1 - S AH0 - L ER0\nMOSLER(2)  M AA1 S - L ER0\nMOSLEY  M OW1 Z - L IY0\nMOSMAN  M AA1 S - M AH0 N\nMOSQUE  M AA1 S K\nMOSQUE(2)  M AO1 S K\nMOSQUEDA  M OW0 S - K W EY1 - D AH0\nMOSQUERA  M OW0 S - K W EH1 - R AH0\nMOSQUES  M AA1 S K S\nMOSQUES(2)  M AO1 S K S\nMOSQUITO  M AH0 - S K IY1 - T OW0\nMOSQUITOES  M AH0 - S K IY1 - T OW0 Z\nMOSQUITOS  M AH0 - S K IY1 - T OW0 Z\nMOSS  M AO1 S\nMOSSAD  M OW0 - S AE1 D\nMOSSAD(2)  M OW0 - S AA1 D\nMOSSBACHER  M AA1 S - B AA0 - K ER0\nMOSSBARGER  M AA1 S - B AA0 R - G ER0\nMOSSBERG  M AO1 S - B ER0 G\nMOSSBURG  M AO1 S - B ER0 G\nMOSSER  M AO1 - S ER0\nMOSSES  M AO1 - S AH0 Z\nMOSSES(2)  M AO1 - S IH0 Z\nMOSSEY  M AA1 - S IY0\nMOSSHOLDER  M AO1 S - HH OW2 L - D ER0\nMOSSLIKE  M AO1 S - L AY2 K\nMOSSMAN  M AO1 S - M AH0 N\nMOSSO  M OW1 - S OW0\nMOST  M OW1 S T\nMOST(2)  M OW1 S\nMOSTAR  M OW1 - S T AA0 R\nMOSTAR'S  M OW1 - S T AA0 R Z\nMOSTEK  M AA1 - S T IH0 K\nMOSTELLER  M AA1 - S T AH0 L - ER0\nMOSTER  M OW1 - S T ER0\nMOSTLY  M OW1 S T - L IY0\nMOSTLY(2)  M OW1 S - L IY0\nMOSTOLLER  M AA1 - S T OW0 - L ER0\nMOSTOW  M AA1 - S T AW0\nMOSTROM  M AA1 S - T R AH0 M\nMOSTYN  M AA1 - S T IH0 N\nMOSUL  M OW1 - S AH0 L\nMOSUR  M OW2 - S UH1 R\nMOSZKOWSKI  M AA2 S K - AW1 S - K IY0\nMOTA  M OW1 - T AH0\nMOTE  M OW1 T\nMOTEL  M OW0 - T EH1 L\nMOTELS  M OW0 - T EH1 L Z\nMOTEN  M OW1 - T AH0 N\nMOTES  M OW1 T S\nMOTEURS  M OW0 - T UW1 R Z\nMOTH  M AO1 TH\nMOTHBALL  M AO1 TH - B AO2 L\nMOTHBALLED  M AO1 TH - B AO2 L D\nMOTHBALLING  M AO1 TH - B AO1 - L IH0 NG\nMOTHBALLS  M AO1 TH - B AO2 L Z\nMOTHER  M AH1 - DH ER0\nMOTHER'S  M AH1 - DH ER0 Z\nMOTHERCARE  M AH1 - DH ER0 - K EH2 R\nMOTHERHOOD  M AH1 - DH ER0 - HH UH2 D\nMOTHERING  M AH1 - DH ER0 - IH0 NG\nMOTHERLAND  M AH1 - DH ER0 - L AE2 N D\nMOTHERLESS  M AH1 - DH ER0 - L IH0 S\nMOTHERLY  M AH1 - DH ER0 - L IY0\nMOTHERS  M AH1 - DH ER0 Z\nMOTHERS'  M AH1 - TH ER0 Z\nMOTHERS-IN-LAW  M AH1 - DH ER0 - Z IH0 N - L AO2\nMOTHERSHEAD  M AH1 - DH ER0 Z - HH EH2 D\nMOTHERSHED  M AH1 - DH ER0 - SH EH2 D\nMOTHON  M AA1 - TH AH0 N\nMOTHS  M AO1 TH S\nMOTIF  M OW0 - T IY1 F\nMOTIFS  M OW0 - T IY1 F S\nMOTILE  M OW1 - T AH0 L\nMOTILITY  M OW0 - T IH1 - L IH0 - T IY0\nMOTION  M OW1 - SH AH0 N\nMOTIONED  M OW1 - SH AH0 N D\nMOTIONING  M OW1 - SH AH0 N - IH0 NG\nMOTIONLESS  M OW1 - SH AH0 N - L AH0 S\nMOTIONS  M OW1 - SH AH0 N Z\nMOTIVATE  M OW1 - T AH0 - V EY2 T\nMOTIVATED  M OW1 - T AH0 - V EY2 - T AH0 D\nMOTIVATES  M OW1 - T AH0 - V EY2 T S\nMOTIVATING  M OW1 - T AH0 - V EY2 - T IH0 NG\nMOTIVATION  M OW2 - T AH0 - V EY1 - SH AH0 N\nMOTIVATIONAL  M OW2 - T AH0 - V EY1 - SH AH0 - N AH0 L\nMOTIVATIONS  M OW2 - T AH0 - V EY1 - SH AH0 N Z\nMOTIVATOR  M OW1 - T AH0 - V EY0 - T ER0\nMOTIVE  M OW1 - T IH0 V\nMOTIVES  M OW1 - T IH0 V Z\nMOTL  M AA1 - T AH0 L\nMOTLEY  M AA1 T - L IY0\nMOTO  M OW1 - T OW0\nMOTO(2)  M AA1 - T OW0\nMOTOHASHI  M OW2 - T OW0 - HH AA1 - SH IY0\nMOTOLA  M OW0 - T OW1 - L AH0\nMOTON  M OW1 - T OW0 N\nMOTONORI  M OW2 - T OW0 - N AO1 - R IY0\nMOTOR  M OW1 - T ER0\nMOTOR'S  M OW1 - T ER0 Z\nMOTORBIKE  M OW1 - T ER0 - B AY2 K\nMOTORBIKES  M OW1 - T ER0 - B AY2 K S\nMOTORBOAT  M OW1 - T ER0 - B OW2 T\nMOTORCADE  M OW1 - T ER0 - K EY2 D\nMOTORCADES  M OW1 - T ER0 - K EY2 D Z\nMOTORCAR  M OW1 - T ER0 - K AA2 R\nMOTORCARS  M OW1 - T ER0 - K AA2 R Z\nMOTORCYCLE  M OW1 - T ER0 - S AY2 - K AH0 L\nMOTORCYCLES  M OW1 - T ER0 - S AY2 - K AH0 L Z\nMOTORCYCLIST  M OW1 - T ER0 - S AY2 - K AH0 - L IH0 S T\nMOTORCYCLIST(2)  M OW1 - T ER0 - S AY2 - K L IH0 S T\nMOTORCYCLISTS  M OW1 - T ER0 - S AY2 - K AH0 - L IH0 S T S\nMOTORCYCLISTS(2)  M OW1 - T ER0 - S AY2 - K AH0 - L IH0 S S\nMOTORCYCLISTS(3)  M OW1 - T ER0 - S AY2 - K AH0 - L IH0 S\nMOTORCYCLISTS(4)  M OW1 - T ER0 - S AY2 K - L IH0 S\nMOTOREN  M OW1 - T ER0 - AH0 N\nMOTORING  M OW1 - T ER0 - IH0 NG\nMOTORIST  M OW1 - T ER0 - IH0 S T\nMOTORISTS  M OW1 - T ER0 - AH0 S T S\nMOTORISTS(2)  M OW1 - T ER0 - IH0 S T S\nMOTORISTS(3)  M OW1 - T ER0 - IH0 S S\nMOTORISTS(4)  M OW1 - T ER0 - IH0 S\nMOTORIZE  M OW1 - T ER0 - AY2 Z\nMOTORIZED  M OW1 - T ER0 - AY2 Z D\nMOTOROLA  M OW2 - T ER0 - OW1 - L AH0\nMOTOROLA'S  M OW2 - T ER0 - OW1 - L AH0 Z\nMOTORS  M OW1 - T ER0 Z\nMOTORS'  M OW1 - T ER0 Z\nMOTOWN  M OW1 - T AW2 N\nMOTOWN'S  M OW1 - T AW2 N Z\nMOTRIN  M AA1 - T R IH0 N\nMOTS  M AA1 T S\nMOTSINGER  M AA1 T - S IH0 N - JH ER0\nMOTSOALEDI  M AA0 T - S OW0 - L EY1 - D IY0\nMOTT  M AA1 T\nMOTT'S  M AA1 T S\nMOTTE  M AA1 T\nMOTTER  M AA1 - T ER0\nMOTTERN  M AA1 - T ER0 N\nMOTTL  M AA1 - T AH0 L\nMOTTLED  M AA1 - T AH0 L D\nMOTTLEY  M AA1 T - L IY0\nMOTTLING  M AA1 - T AH0 L - IH0 NG\nMOTTLING(2)  M AA1 T - L IH0 NG\nMOTTO  M AA1 - T OW0\nMOTTOLA  M OW0 - T OW1 - L AH0\nMOTTOS  M AA1 - T OW0 Z\nMOTTRAM  M AA1 - T R AH0 M\nMOTTS  M AA1 T S\nMOTTUS  M AA1 - T AH0 S\nMOTYKA  M AA1 - T AY0 - K AH0\nMOTYL  M OW1 - T AH0 L\nMOTZ  M AA1 T S\nMOTZER  M OW1 T - Z ER0\nMOTZKO  M AA1 T - S K OW0\nMOUA  M AW1 - AH0\nMOUDRY  M OW1 - D R IY0\nMOUDY  M AW1 - D IY0\nMOUEIX  M UW2 - W AY1 K S\nMOUL  M AW1 L\nMOULD  M OW1 L D\nMOULDEN  M OW1 L - D AH0 N\nMOULDER  M OW1 L - D ER0\nMOULDING  M OW1 L - D IH0 NG\nMOULDINGS  M OW1 L - D IH0 NG Z\nMOULDS  M OW1 L D Z\nMOULDY  M OW1 L - D IY0\nMOULIN  M UW0 - L AE1 N\nMOULINEX  M UW1 - L IH0 - N EH0 K S\nMOULTHROP  M AW1 L - TH R AH0 P\nMOULTON  M OW1 L - T AH0 N\nMOULTRIE  M OW1 L - T R IY0\nMOUNCE  M AW1 N S\nMOUND  M AW1 N D\nMOUNDS  M AW1 N D Z\nMOUNGER  M AW1 - NG ER0\nMOUNSEY  M AW1 N - S IY0\nMOUNT  M AW1 N T\nMOUNTAIN  M AW1 N - T AH0 N\nMOUNTAIN'S  M AW1 N - T AH0 N Z\nMOUNTAINEER  M AW1 N - T IH0 - N IH2 R\nMOUNTAINOUS  M AW1 N - T AH0 - N AH0 S\nMOUNTAINS  M AW1 N - T AH0 N Z\nMOUNTAINSIDE  M AW1 N - T AH0 N - S AY2 D\nMOUNTAINSIDES  M AW1 N - T AH0 N - S AY2 D Z\nMOUNTAINTOP  M AW1 N - T AH0 N - T AA2 P\nMOUNTAINTOPS  M AW1 N - T AH0 N - T AA2 P S\nMOUNTCASTLE  M AW1 N T - K AE2 - S AH0 L\nMOUNTED  M AW1 N - T AH0 D\nMOUNTED(2)  M AW1 N - T IH0 D\nMOUNTED(3)  M AW1 - N IH0 D\nMOUNTFORD  M UW0 N T - F AO1 R D\nMOUNTIES  M AW1 N - T IY0 Z\nMOUNTIES(2)  M AW1 - N IY0 Z\nMOUNTING  M AW1 N - T IH0 NG\nMOUNTJOY  M AW1 N T - JH OY2\nMOUNTLEIGH  M AW1 N T - L IY2\nMOUNTLEIGH'S  M AW1 N T - L IY2 Z\nMOUNTS  M AW1 N T S\nMOUNTZ  M AW1 N T S\nMOURA  M UH1 - R AH0\nMOURAD  M UW1 - R AE0 D\nMOURADIAN  M AO0 - R EY1 - D IY0 - AH0 N\nMOURER  M AO1 - R ER0\nMOURN  M AO1 R N\nMOURNED  M AO1 R N D\nMOURNER  M AO1 R - N ER0\nMOURNERS  M AO1 R - N ER0 Z\nMOURNFUL  M AO1 R N - F AH0 L\nMOURNING  M AO1 R - N IH0 NG\nMOURNS  M AO1 R N Z\nMOUSE  M AW1 S\nMOUSEHOLE  M AW1 S - HH OW2 L\nMOUSEL  M UW0 - S EH1 L\nMOUSER  M AW1 - Z ER0\nMOUSERS  M AW1 - Z ER0 Z\nMOUSETRAP  M AW1 S - T R AE2 P\nMOUSLEY  M AW1 S - L IY0\nMOUSSA  M AW1 - S AH0\nMOUSSE  M UW1 S\nMOUSSEAU  M UW2 - S OW1\nMOUSTACHE  M AH1 - S T AE2 SH\nMOUTH  M AW1 TH\nMOUTHED  M AW1 DH D\nMOUTHFUL  M AW1 TH - F UH2 L\nMOUTHING  M AW1 - DH IH0 NG\nMOUTHPART  M AW1 TH - P AA2 R T\nMOUTHPARTS  M AW1 TH - P AA2 R T S\nMOUTHPIECE  M AW1 TH - P IY2 S\nMOUTHPIECES  M AW1 TH - P IY2 - S IH0 Z\nMOUTHS  M AW1 DH Z\nMOUTHWASH  M AW1 TH - W AA2 SH\nMOUTHY  M AW1 - TH IY0\nMOUTRAY  M UW0 - T R EY1\nMOUTSE  M UW1 T - S IY0\nMOUW  M AW1 W\nMOUZON  M UW0 - Z AO1 N\nMOVABLE  M UW1 - V AH0 - B AH0 L\nMOVE  M UW1 V\nMOVED  M UW1 V D\nMOVEMENT  M UW1 V - M AH0 N T\nMOVEMENT'S  M UW1 V - M AH0 N T S\nMOVEMENTS  M UW1 V - M AH0 N T S\nMOVER  M UW1 - V ER0\nMOVERS  M UW1 - V ER0 Z\nMOVES  M UW1 V Z\nMOVIDA  M UW2 - V IY1 - D AH0\nMOVIE  M UW1 - V IY0\nMOVIE'S  M UW1 - V IY0 Z\nMOVIEGOER  M UW1 - V IY2 - G OW2 - ER0\nMOVIEGOERS  M UW1 - V IY2 - G OW2 - ER0 Z\nMOVIEGOING  M UW1 - V IY2 - G OW2 - IH0 NG\nMOVIELAB  M UW1 - V IY0 - L AE2 B\nMOVIEMAKER  M UW1 - V IY2 - M EY2 - K ER0\nMOVIEMAKERS  M UW1 - V IY2 - M EY2 - K ER0 Z\nMOVIEMAKING  M UW1 - V IY2 - M EY2 - K IH0 NG\nMOVIES  M UW1 - V IY0 Z\nMOVIETIME  M UW1 - V IY0 - T AY2 M\nMOVING  M UW1 - V IH0 NG\nMOVINGLY  M UW1 - V IH0 NG - L IY0\nMOW  M OW1\nMOWAT  M OW1 - AH0 T\nMOWATT  M OW1 - AH0 T\nMOWBRAY  M OW1 - B R EY0\nMOWDY  M OW1 - D IY0\nMOWED  M OW1 D\nMOWELL  M AA1 - W EH0 L\nMOWEN  M OW1 - AH0 N\nMOWER  M OW1 - ER0\nMOWERS  M OW1 - ER0 Z\nMOWERY  M AW1 - ER0 - IY0\nMOWING  M AW1 - IH0 NG\nMOWRER  M AO1 - R ER0\nMOWREY  M AO1 - R IY0\nMOWRY  M AO1 - R IY0\nMOWS  M AW1 Z\nMOXIE  M AA1 K - S IY0\nMOXLEY  M AA1 K S - L IY0\nMOXON  M AA1 K - S AH0 N\nMOY  M OY1\nMOYA  M OY1 - AH0\nMOYE  M OY1\nMOYER  M OY1 - ER0\nMOYER'S  M OY1 - ER0 Z\nMOYERS  M OY1 - ER0 Z\nMOYES  M OY1 Z\nMOYL  M OY1 L\nMOYLAN  M OY1 - L AH0 N\nMOYLE  M OY1 L\nMOYNA  M OY1 - N AH0\nMOYNAHAN  M OY1 - N AH0 - HH AE0 N\nMOYNIHAN  M OY1 - N IH0 - HH AE0 N\nMOYNIHAN'S  M OY1 - N IH0 - HH AE0 N Z\nMOYSE  M OY1 S\nMOZAMBICAN  M OW2 - Z AE0 M - B IY0 - K AH0 N\nMOZAMBICANS  M OW2 - Z AE0 M - B IY0 - K AH0 N Z\nMOZAMBIQUE  M OW2 - Z AE0 M - B IY1 K\nMOZAMBIQUE(2)  M OW2 - Z AH0 M - B IY1 K\nMOZART  M OW1 - Z AA0 R T\nMOZART'S  M OW1 - Z AA0 R T S\nMOZART'S(2)  M OW1 T - S AA0 R T S\nMOZART(2)  M OW1 T - S AA0 R T\nMOZARTEAN  M OW2 - Z AA1 R - T IY0 - AH0 N\nMOZARTEAN(2)  M OW2 T - Z AA1 R - T IY0 - AH0 N\nMOZEE  M AA1 - Z IY0\nMOZELLE  M AH0 - Z EH1 L\nMOZENA  M AH0 - Z IY1 - N AH0\nMOZER  M OW1 - Z ER0\nMOZER'S  M OW1 - Z ER0 Z\nMOZINGO  M OW0 - Z IY1 NG - G OW0\nMOZLEY  M AA1 Z - L IY0\nMPEG  EH1 M - P EH2 G\nMPG  EH1 M - P IY1 - JH IY1\nMPG(2)  M AY1 L Z - P ER0 - G AE1 - L AH0 N\nMPH  EH1 M - P IY1 - EY1 CH\nMPH(2)  M AY1 L Z - P ER0 - AW1 - ER0\nMR  M IH1 - S T ER0\nMR.  M IH1 - S T ER0\nMRAZ  M R AE1 Z\nMRAZEK  M R AA1 - Z EH0 K\nMRAZIK  M R AA1 - Z IH0 K\nMROCZEK  M R AA1 - CH EH0 K\nMROCZKA  M R AA1 CH - K AH0\nMROCZKOWSKI  M R AH0 CH - K AO1 F S - K IY0\nMROTEK  M R OW1 - T EH2 K\nMROZ  M R AA1 Z\nMROZEK  M R OW1 - Z EH0 K\nMROZINSKI  M R AH0 - Z IH1 N - S K IY0\nMRS  M IH1 - S IH0 Z\nMRS.  M IH1 - S IH0 Z\nMRUK  M R AH1 K\nMS  M IH1 Z\nMS.  M IH1 Z\nMSGR  M AA0 N - S IY1 - N Y ER0\nMSSRS  M EH1 - S ER0 Z\nMSSRS.  M EH1 - S ER0 Z\nMT  M AW1 N T\nMT(2)  EH1 M - T IY1\nMTEL  EH1 M - T EH2 L\nMU  M UW1\nMUAMMAR  M UW0 - AE1 - M ER0\nMUAVENET  M UW2 - AH0 - V EH1 - N IH0 T\nMUBARAK  M UW0 - B AA1 - R IH0 K\nMUBARAK'S  M UW0 - B AA1 - R IH0 K S\nMUBARAK'S(2)  M Y UW0 - B AA1 - R IH0 K S\nMUBARAK(2)  M Y UW0 - B AA1 - R IH0 K\nMUCCI  M UW1 - CH IY0\nMUCCIO  M UW1 - CH IY0 - OW0\nMUCH  M AH1 CH\nMUCHA  M AH1 - CH AH0\nMUCHMORE  M AH1 K - M AO0 R\nMUCHNICK  M AH1 K - N IH0 K\nMUCHOW  M AH1 - CH OW0\nMUCK  M AH1 K\nMUCKENFUSS  M AH1 - K AH0 N - F AH2 S\nMUCKEY  M AH1 - K IY0\nMUCKING  M AH1 - K IH0 NG\nMUCKLE  M AH1 - K AH0 L\nMUCKLEROY  M AH1 K - L ER0 - OY0\nMUCKLEROY(2)  M AH1 - K AH0 L - R OY0\nMUCKRAKE  M AH1 K - R EY2 K\nMUCKRAKER  M AH1 K - R EY2 - K ER0\nMUCKRAKING  M AH1 K - R EY2 - K IH0 NG\nMUCKY  M AH1 - K IY0\nMUCOSA  M Y UW0 - K OW1 - S AH0\nMUCOSAL  M Y UW0 - K OW1 - S AH0 L\nMUCOUS  M Y UW1 - K AH0 S\nMUCUS  M Y UW1 - K AH0 S\nMUD  M AH1 D\nMUDD  M AH1 D\nMUDDIED  M AH1 - D IY0 D\nMUDDIER  M AH1 - D IY0 - ER0\nMUDDLE  M AH1 - D AH0 L\nMUDDLED  M AH1 - D AH0 L D\nMUDDLEHEADED  M AH1 - D AH0 L - HH EH2 - D AH0 D\nMUDDLEHEADED(2)  M AH1 - D AH0 L - HH EH2 - D IH0 D\nMUDDLES  M AH1 - D AH0 L Z\nMUDDLING  M AH1 - D AH0 L - IH0 NG\nMUDDLING(2)  M AH1 D - L IH0 NG\nMUDDY  M AH1 - D IY0\nMUDDYING  M AH1 - D IY0 - IH0 NG\nMUDGE  M AH1 JH\nMUDGETT  M AH1 - JH IH0 T\nMUDRA  M AH1 - D R AH0\nMUDRICK  M AH1 - D R IH0 K\nMUDRY  M AH1 - D R IY0\nMUDS  M AH1 D Z\nMUDSLIDE  M AH1 D - S L AY0 D\nMUDSLIDES  M AH1 D - S L AY0 D Z\nMUDSLINGING  M AH1 D - S L IH2 - NG IH0 NG\nMUDWAGON  M AH1 D - W AE2 - G AH0 N\nMUECKE  M UW1 K\nMUEGGE  M UW1 G\nMUEHL  M Y UW1 L\nMUEHLBAUER  M Y UW1 L - B AW0 - ER0\nMUEHLEBACH  M Y UW1 L - B AA2 K\nMUELLER  M Y UW1 - L ER0\nMUELLNER  M Y UW1 L - N ER0\nMUENCH  M Y UW1 NG K\nMUENCHEN  M Y UW1 N - CH AH0 N\nMUENCHOW  M UW1 N - CH AW0\nMUENSTER  M Y UW1 N - S T ER0\nMUETZEL  M Y UW1 T - Z AH0 L\nMUFF  M AH1 F\nMUFFIN  M AH1 - F AH0 N\nMUFFINS  M AH1 - F AH0 N Z\nMUFFLE  M AH1 - F AH0 L\nMUFFLED  M AH1 - F AH0 L D\nMUFFLER  M AH1 F - L ER0\nMUFFLERS  M AH1 F - L ER0 Z\nMUFFLEY  M AH1 F - L IY0\nMUFFOLETTO  M UW0 - F OW0 - L EH1 - T OW0\nMUFFS  M AH1 F S\nMUFFY  M AH1 - F IY0\nMUG  M AH1 G\nMUGABE  M UW0 - G AA1 - B EY0\nMUGABE'S  M UW0 - G AA1 - B EY0 Z\nMUGAR  M Y UW1 - G ER0\nMUGAVERO  M UW0 - G AA0 - V EH1 - R OW0\nMUGFORD  M AH1 G - F ER0 D\nMUGGED  M AH1 G D\nMUGGER  M AH1 - G ER0\nMUGGERIDGE  M AH1 - G ER0 - IH2 JH\nMUGGERS  M AH1 - G ER0 Z\nMUGGING  M AH1 - G IH0 NG\nMUGGINGS  M AH1 - G IH0 NG Z\nMUGGSY  M AH1 G - S IY0\nMUGGY  M AH1 - G IY0\nMUGHNIYEH  M AH1 G - N IH0 - Y AH0\nMUGNIYAH  M AH1 G - N IH0 - Y AH0\nMUGS  M AH1 G Z\nMUGU  M UW1 - G UW0\nMUHA  M Y UW1 - HH AH0\nMUHABARA  M UW2 - HH AH0 - B AA1 - R AH0\nMUHAMED  M UH0 - HH AA1 - M EH0 D\nMUHAMED'S  M UH0 - HH AA1 - M EH0 D Z\nMUHAMMAD  M UH0 - HH AA1 - M AH0 D\nMUHAMMAD'S  M UH0 - HH AA1 - M AH0 D Z\nMUHAMMED  M UH0 - HH AA1 - M EH0 D\nMUHAMMED'S  M UH0 - HH AA1 - M EH0 D Z\nMUHARRAM  M AH0 - HH AE1 - R AH0 M\nMUHL  M AH1 L\nMUHLBAUER  M UW1 L - B AW0 - ER0\nMUHLENKAMP  M UW1 - L IH0 N - K AE0 M P\nMUHR  M UH1 R\nMUHS  M AH1 S\nMUI  M UW1 - IH0\nMUILENBURG  M UW1 - L AH0 N - B ER0 G\nMUIR  M Y UH1 R\nMUIRFIELD  M Y UH1 R - F IY0 L D\nMUIRHEAD  M Y UH1 R - HH EH2 D\nMUISE  M UW1 Z\nMUJAHADEEN  M Y UW0 - JH AE1 - HH AH0 - D IY2 N\nMUJAHEDEEN  M UW2 - JH AH0 - HH EH0 - D IY1 N\nMUJAHIDEEN  M UW2 - JH AH0 - HH EH0 - D IY1 N\nMUJICA  M Y UW1 - JH IH0 - K AH0\nMUJZEL  M AH1 JH - Z AH0 L\nMUKAI  M UW0 - K AA1 - IY0\nMUKASEY  M Y UW1 - K IH0 - S IY0\nMUKHERJEE  M AH0 K - HH ER1 - JH IY0\nMUKHOPADHYAY  M UW2 - K OW0 - P AA1 - D Y AY0\nMUKLUK  M AH1 K - L AH0 K\nMUL'S  M UH1 L Z\nMULA  M Y UW1 - L AH0\nMULANAPHY  M Y UW1 - L AH0 - N AE2 - F IY0\nMULANAX  M Y UW1 - L AH0 - N AE0 K S\nMULATTO  M AH0 - L AA1 - T OW0\nMULBERRY  M AH1 L - B EH2 - R IY0\nMULCAHEY  M AH1 L - K AH0 - HH IY0\nMULCAHY  M AH0 L - K EY1 - HH IY0\nMULCARE  M AH1 L - K ER0\nMULCH  M AH1 L CH\nMULCHED  M AH1 L CH T\nMULCHES  M AH1 L - CH IH0 Z\nMULCHING  M AH1 L - CH IH0 NG\nMULDER  M AH1 L - D ER0\nMULDOON  M AH0 L - D UW1 N\nMULDORFER  M AH1 L - D AO2 - F ER0\nMULDOWNEY  M AH1 L - D AW0 - N IY0\nMULDREW  M AH1 L - D R UW0\nMULDROW  M AH1 L - D R AW0\nMULE  M Y UW1 L\nMULES  M Y UW1 L Z\nMULFORD  M AH1 L - F ER0 D\nMULGREW  M AH1 L - G R UW0\nMULHALL  M AH1 L - HH AH0 L\nMULHEARN  M AH1 L - HH ER0 N\nMULHEREN  M AH0 L - HH EH1 - R AH0 N\nMULHEREN'S  M AH0 L - HH EH1 - R AH0 N Z\nMULHERIN  M AH1 L - HH ER0 - IH0 N\nMULHERN  M AH1 L - HH ER0 N\nMULHOLLAND  M AH2 L - HH AA1 - L AH0 N D\nMULHOUSE  M AH1 L - HH AW2 S\nMULKERN  M AH1 L - K ER0 N\nMULKEY  M AH1 L - K IY0\nMULKINS  M AH1 L - K IH0 N Z\nMULL  M AH1 L\nMULLADY  M AH1 - L AH0 - D IY0\nMULLAH  M AH1 - L AH0\nMULLAHS  M AH1 - L AH0 Z\nMULLALLY  M AH1 - L AH0 - L IY0\nMULLALY  M AH1 - L AH0 - L IY0\nMULLAN  M AH1 - L AH0 N\nMULLANE  M AH1 - L AH0 N\nMULLANEY  M AH1 - L AH0 - N IY0\nMULLANY  M AH1 - L AH0 - N IY0\nMULLARKEY  M AH0 - L AA1 R - K IY0\nMULLDORFER  M AH1 L - D AO0 R - F ER0\nMULLED  M AH1 L D\nMULLEN  M AH1 - L AH0 N\nMULLENAX  M AH1 - L AH0 - N AE2 K S\nMULLENDORE  M UW0 - L EH1 N - D AO0 R\nMULLENIX  M UW1 - L IH0 - N IH0 K S\nMULLENIX(2)  M AH1 - L AH0 - N IH0 K S\nMULLENS  M AH1 - L AH0 N Z\nMULLER  M AH1 - L ER0\nMULLER'S  M AH1 - L ER0 Z\nMULLET  M AH1 - L AH0 T\nMULLETT  M UW1 - L IH0 T\nMULLICAN  M AH1 - L IH0 - K AH0 N\nMULLIGAN  M AH1 - L IH0 - G AH0 N\nMULLIKEN  M AH1 - L IH0 - K AH0 N\nMULLIKIN  M AH1 - L IH0 - K IH0 N\nMULLIN  M AH1 - L IH0 N\nMULLINAX  M AH1 - L IH0 - N AE0 K S\nMULLINEAUX  M AH1 - L IH0 - N OW2\nMULLING  M AH1 - L IH0 NG\nMULLINGS  M AH1 - L IH0 NG Z\nMULLINIX  M AH1 - L IH0 - N IH0 K S\nMULLINS  M AH1 - L IH2 N Z\nMULLIS  M AH1 - L IH0 S\nMULLOY  M AH1 - L OY0\nMULLS  M AH1 L Z\nMULNIX  M AH1 L - N IH0 K S\nMULQUEEN  M AH0 L - K W IY1 N\nMULRONEY  M AH0 L - R OW1 - N IY0\nMULRONEY'S  M AH0 L - R OW1 - N IY0 Z\nMULROONEY  M AH1 L - R UW0 - N IY0\nMULROY  M AH1 L - R OY2\nMULRY  M AH1 L - R IY0\nMULTER  M AH1 L - T ER0\nMULTI  M AH1 L - T IY0\nMULTIBANK  M AH1 L - T IY0 - B AE2 NG K\nMULTIBILLION  M AH2 L - T AY2 - B IH1 - L Y AH0 N\nMULTIBILLION(2)  M AH2 L - T IY2 - B IH1 - L Y AH0 N\nMULTICANDIDATE  M AH2 L - T IY0 - K AE1 N - D IH0 - D EY2 T\nMULTICANDIDATE(2)  M AH2 L - T IY0 - K AE1 N - D AH0 - D AH0 T\nMULTICENTER  M AH1 L - T IY0 - S EH2 N - T ER0\nMULTICOLOR  M AH2 L - T IY0 - K AH1 - L ER0\nMULTICOLORED  M AH2 L - T IY0 - K AH1 - L ER0 D\nMULTICULTURAL  M AH2 L - T IY0 - K AH1 L - CH ER0 - AH0 L\nMULTICULTURALISM  M AH2 L - T IY0 - K AH1 L - CH ER0 - AH0 - L IH0 - Z AH0 M\nMULTIEMPLOYER  M AH2 L - T IY0 - IH0 M - P L OY1 - ER0\nMULTIETHNIC  M AH2 L - T IY0 - EH1 TH - N IH0 K\nMULTIFACET  M AH2 L - T IY0 - F AE1 - S AH0 T\nMULTIFACETED  M AH2 L - T IY0 - F AE1 - S AH0 - T IH0 D\nMULTIFAMILY  M AH2 L - T AY0 - F AE1 - M AH0 - L IY0\nMULTIFAMILY(2)  M AH2 L - T IY0 - F AE1 M - L IY0\nMULTIFOODS  M AH1 L - T IY0 - F UW1 D Z\nMULTIFOODS'  M AH1 L - T IY0 - F UW2 D Z\nMULTILATERAL  M AH2 L - T IH0 - L AE1 - T ER0 - AH0 L\nMULTILATERAL(2)  M AH2 L - T IY0 - L AE1 - T ER0 - AH0 L\nMULTILATERALISM  M AH2 L - T IH0 - L AE1 - T ER0 - AH0 - L IH0 - Z AH0 M\nMULTILATERALISM(2)  M AH2 L - T IH0 - L AE1 - T ER0 - AH0 - L IH0 Z M\nMULTILATERALLY  M AH2 L - T IH0 - L AE1 - T ER0 - AH0 - L IY0\nMULTILATERALLY(2)  M AH2 L - T IY0 - L AE1 - T ER0 - AH0 - L IY0\nMULTILAYER  M AH2 L - T IY0 - L EY1 - ER0\nMULTILAYERED  M AH2 L - T IY0 - L EY1 - ER0 D\nMULTILEVEL  M AH2 L - T AY0 - L EH1 - V AH0 L\nMULTILEVEL(2)  M AH2 L - T IY0 - L EH1 - V AH0 L\nMULTILINE  M AH1 L - T IY0 - L AY2 N\nMULTILINGUAL  M AH2 L - T IY0 - L IH1 NG - W AH0 L\nMULTILINGUAL(2)  M AH2 L - T AY0 - L IH1 NG - W AH0 L\nMULTIMARKET  M AH1 L - T IY0 - M AA1 R - K IH0 T\nMULTIMATE  M AH1 L - T IY0 - M EY2 T\nMULTIMEDIA  M AH2 L - T IY0 - M IY1 - D IY0 - AH0\nMULTIMEDIA'S  M AH2 L - T IY0 - M IY1 - D IY0 - AH0 Z\nMULTIMEDIA'S(2)  M AH2 L - T AY0 - M IY1 - D IY0 - AH0 Z\nMULTIMEDIA(2)  M AH2 L - T AY0 - M IY1 - D IY0 - AH0\nMULTIMILLION  M AH2 L - T AY2 - M IH1 - L Y AH0 N\nMULTIMILLION(2)  M AH2 L - T IY2 - M IH1 - L Y AH0 N\nMULTIMILLIONAIRE  M AH2 L - T IY0 - M IH2 - L Y AH0 - N EH1 R\nMULTIMILLIONAIRE(2)  M AH2 L - T AY0 - M IH2 - L Y AH0 - N EH1 R\nMULTIMILLIONAIRES  M AH2 L - T IY0 - M IH2 - L Y AH0 - N EH1 R Z\nMULTIMILLIONAIRES(2)  M AH2 L - T AY0 - M IH2 - L Y AH0 - N EH1 R Z\nMULTINATIONAL  M AH2 L - T AY2 - N AE1 - SH AH0 - N AH0 L\nMULTINATIONAL(2)  M AH2 L - T IY2 - N AE1 - SH AH0 - N AH0 L\nMULTINATIONALS  M AH2 L - T AY2 - N AE1 - SH AH0 - N AH0 L Z\nMULTINATIONALS(2)  M AH2 L - T IY2 - N AE1 - SH AH0 - N AH0 L Z\nMULTIPART  M AH1 L - T IY0 - P AA2 R T\nMULTIPARTY  M AH1 L - T IY0 - P AA2 R - T IY0\nMULTIPLAYER  M AH1 L - T IY0 - P L EY2 - ER0\nMULTIPLE  M AH1 L - T AH0 - P AH0 L\nMULTIPLES  M AH1 L - T AH0 - P AH0 L Z\nMULTIPLEX  M AH1 L - T IY0 - P L EH2 K S\nMULTIPLEXER  M AH1 L - T IY0 - P L EH2 K - S ER0\nMULTIPLEXERS  M AH1 L - T IY0 - P L EH2 K - S ER0 Z\nMULTIPLICATION  M AH2 L - T AH0 - P L AH0 - K EY1 - SH AH0 N\nMULTIPLICITY  M AH2 L - T AH0 - P L IH1 - S IH0 - T IY0\nMULTIPLIED  M AH1 L - T AH0 - P L AY2 D\nMULTIPLIER  M AH1 L - T AH0 - P L AY2 - ER0\nMULTIPLIES  M AH1 L - T AH0 - P L AY2 Z\nMULTIPLY  M AH1 L - T AH0 - P L AY2\nMULTIPLYING  M AH1 L - T AH0 - P L AY2 - IH0 NG\nMULTIPROCESSOR  M AH2 L - T IY0 - P R AA1 - S EH2 - S ER0\nMULTIPURPOSE  M AH2 L - T IY0 - P ER1 - P AH0 S\nMULTIRACIAL  M AH2 L - T AY2 - R EY1 - SH AH0 L\nMULTISTATE  M AH1 L - T IY0 - S T EY1 T\nMULTISTORY  M AH1 L - T IY0 - S T AO2 - R IY0\nMULTITASK  M AH1 L - T IY0 - T AE2 S K\nMULTITASKING  M AH1 L - T IY0 - T AE2 - S K IH0 NG\nMULTITUDE  M AH1 L - T AH0 - T UW2 D\nMULTITUDE(2)  M AH1 L - T AH0 - T Y UW2 D\nMULTITUDES  M AH1 L - T AH0 - T Y UW2 D Z\nMULTIUSER  M AH1 L - T IY0 - Y UW2 - Z ER0\nMULTIVALVE  M AH1 L - T IY0 - V AE0 L V\nMULTIVISION  M AH2 L - T IY0 - V IH1 - ZH AH0 N\nMULTIYEAR  M AH1 L - T IY0 - Y IY1 R\nMULTNOMAH  M AH2 L - N OW1 - M AH0\nMULVANEY  M AH2 L - V EY1 - N IY0\nMULVANY  M AH2 L - V EY1 - N IY0\nMULVEHILL  M AH1 L V - HH IH0 L\nMULVEHILL(2)  M AH1 L - V IH0 - HH IH0 L\nMULVEY  M AH0 L - V EY1\nMULVIHILL  M AH1 L - V IY0 - HH IH0 L\nMULVIHILL(2)  M AH1 L - V IH0 - HH IH0 L\nMUM  M AH1 M\nMUMA  M Y UW1 - M AH0\nMUMAW  M UW1 - M AO0\nMUMBLE  M AH1 M - B AH0 L\nMUMBLED  M AH1 M - B AH0 L D\nMUMBLES  M AH1 M - B AH0 L Z\nMUMBLING  M AH1 M - B AH0 L - IH0 NG\nMUMBLING(2)  M AH1 M - B L IH0 NG\nMUMBO  M AH1 M - B OW0\nMUMBY  M AH1 M - B IY0\nMUMFORD  M AH1 M - F ER0 D\nMUMIA  M AH0 - M IY1 - Y AH0\nMUMM  M AH1 M\nMUMMA  M AH1 - M AH0\nMUMME  M AH1 M\nMUMMERT  M AH1 - M ER0 T\nMUMMEY  M AH1 - M IY0\nMUMMIES  M AH1 - M IY0 Z\nMUMMIFICATION  M AH2 - M IH0 - F IH0 - K EY1 - SH AH0 N\nMUMMIFIED  M AH1 - M IH0 - F AY2 D\nMUMMIFY  M AH1 - M AH0 - F AY2\nMUMMIFYING  M AH1 - M AH0 - F AY2 - IH0 NG\nMUMMY  M AH1 - M IY0\nMUMMY'S  M AH1 - M IY0 Z\nMUMPER  M AH1 M - P ER0\nMUMPHREY  M AH1 M - F R IY0\nMUMPOWER  M AH1 M - P OW0 - ER0\nMUMPS  M AH1 M P S\nMUMS  M AH1 M Z\nMUN  M AH1 N\nMUNAFO  M UW0 - N AA1 - F OW0\nMUNCE  M AH1 N S\nMUNCEE  M AH1 N - S IY0\nMUNCEY  M AH1 N - S IY0\nMUNCH  M AH1 N CH\nMUNCHAUSEN  M AH1 N - CH AW2 - Z IH0 N\nMUNCHED  M AH1 N CH T\nMUNCHIES  M AH1 N - CH IY2 Z\nMUNCHING  M AH1 N - CH IH0 NG\nMUNCIE  M AH1 N - S IY0\nMUNCY  M AH1 N - S IY0\nMUND  M AH1 N D\nMUNDANE  M AH0 N - D EY1 N\nMUNDAY  M AH1 N - D EY2\nMUNDELL  M AH1 N - D AH0 L\nMUNDEN  M AH1 N - D AH0 N\nMUNDI  M AH1 N - D IY0\nMUNDIE  M AH1 N - D IY0\nMUNDINGER  M AH1 N - D IH0 - NG ER0\nMUNDIS  M AH1 N - D IH0 S\nMUNDO  M AH1 N - D OW0\nMUNDORF  M AH1 N - D AO0 R F\nMUNDORFF  M AH1 N - D AO0 R F\nMUNDT  M AH1 N T\nMUNDY  M AH1 N - D IY0\nMUNFORD  M AH1 N - F ER0 D\nMUNFORD'S  M AH1 N - F ER0 D Z\nMUNGER  M AH1 - NG ER0\nMUNGIA  M UW1 N - JH AH0\nMUNGIN  M AH1 NG - G IH0 N\nMUNGLE  M AH1 NG - G AH0 L\nMUNGO  M AH1 NG - G OW0\nMUNGUIA  M UW1 N - G W IY0 - AH0\nMUNI  M Y UW1 - N IY0\nMUNICH  M Y UW1 - N IH0 K\nMUNICH'S  M Y UW1 - N IH0 K S\nMUNICIPAL  M Y UW0 - N IH1 - S AH0 - P AH0 L\nMUNICIPALITIES  M Y UW2 - N IH0 - S AH0 - P AE1 - L IH0 - T IY0 Z\nMUNICIPALITY  M Y UW2 - N IH0 - S AH0 - P AE1 - L AH0 - T IY0\nMUNICIPALLY  M Y UW0 - N IH1 - S IH0 - P AH0 - L IY0\nMUNICIPALLY(2)  M Y UW0 - N IH1 - S IH0 - P L IY0\nMUNICIPALS  M Y UW0 - N IH1 - S IH0 - P AH0 L Z\nMUNIER  M Y UW1 - N IY0 - ER0\nMUNIS  M Y UW1 - N IH0 S\nMUNITION  M Y UW0 - N IH1 - SH AH0 N\nMUNITIONS  M Y UW0 - N IH1 - SH AH0 N Z\nMUNIZ  M Y UW1 - N IH0 Z\nMUNK  M AH1 NG K\nMUNKRES  M AH1 NG - K ER0 Z\nMUNLEY  M AH1 N - L IY0\nMUNN  M AH1 N\nMUNNELL  M AH1 - N AH0 L\nMUNNERLYN  M AH0 - N ER1 - L IH0 N\nMUNNI  M Y UW1 - N IY0\nMUNNI(2)  M AH1 - N IY0\nMUNNS  M AH1 N Z\nMUNOS  M UW1 - N OW0 Z\nMUNOZ  M UW1 - N Y OW0 Z\nMUNRO  M AH0 N - R OW1\nMUNROE  M AH1 N - R OW0\nMUNS  M AH1 N Z\nMUNSCH  M AH1 N SH\nMUNSELL  M AH1 N - S AH0 L\nMUNSEY  M AH1 N - Z IY0\nMUNSINGWEAR  M AH1 N - S IH0 NG - W EH2 R\nMUNSON  M AH1 N - S AH0 N\nMUNSTER  M AH1 N - S T ER0\nMUNSTERMAN  M AH1 N - S T ER0 - M AH0 N\nMUNT  M AH1 N T\nMUNTEAN  M AH0 N - T IY1 N\nMUNTER  M AH1 N - T ER0\nMUNTZ  M AH1 N T S\nMUNYAN  M AH1 - N Y AH0 N\nMUNYON  M AH1 - N Y AH0 N\nMUNZ  M AH1 N Z\nMUNZER  M AH1 N - Z ER0\nMUOIO  M W OW1 - IY0 - OW0\nMUOLO  M W OW1 - L OW0\nMUPPET  M AH1 - P AH0 T\nMUPPETS  M AH1 - P IH0 T S\nMURA  M UH1 - R AH0\nMURAD  M Y UH1 - R AE0 D\nMURAI  M Y ER0 - AY1\nMURAKAMI  M UH0 - R AA0 - K AA1 - M IY0\nMURAL  M Y UH1 - R AH0 L\nMURALI  M ER0 - AA1 - L IY0\nMURALS  M Y UH1 - R AH0 L Z\nMURAMATSU  M UW2 - R AA0 - M AA1 T - S UW2\nMURAMOTO  M UH0 - R AA0 - M OW1 - T OW0\nMURANAGA  M ER0 - R AH0 - N AA1 - G AH0\nMURANO  M UH0 - R AA1 - N OW0\nMURAOKA  M UH0 - R AA0 - OW1 - K AH0\nMURASE  M Y ER1 - EY0 Z\nMURASKI  M ER0 - AA1 S - K IY0\nMURASKY  M ER0 - AE1 S - K IY0\nMURATA  M UH0 - R AA1 - T AH0\nMURATORE  M UH0 - R AA0 - T AO1 - R EY0\nMURAVICH  M ER1 - AH0 - V IH2 CH\nMURAWSKI  M ER0 - AA1 F S - K IY0\nMURAYAMA  M ER2 - AY0 - AA1 - M AH0\nMURAYAMA'S  M ER2 - AY0 - AA1 - M AH0 Z\nMURCH  M ER1 K\nMURCHIE  M ER1 - CH IY0\nMURCHINSON  M ER1 - CH IH0 N - S AH0 N\nMURCHISON  M ER1 - CH IH0 - S AH0 N\nMURDAUGH  M ER1 - D AO0\nMURDEN  M ER1 - D AH0 N\nMURDER  M ER1 - D ER0\nMURDERED  M ER1 - D ER0 D\nMURDERER  M ER1 - D ER0 - ER0\nMURDERER'S  M ER1 - D ER0 - ER0 Z\nMURDERERS  M ER1 - D ER0 - ER0 Z\nMURDERING  M ER1 - D ER0 - IH0 NG\nMURDEROUS  M ER1 - D ER0 - AH0 S\nMURDERS  M ER1 - D ER0 Z\nMURDICK  M ER1 - D IH0 K\nMURDOCH  M ER1 - D AA0 K\nMURDOCH'S  M ER1 - D AA0 K S\nMURDOCK  M ER1 - D AA0 K\nMURDOCK'S  M ER1 - D AA0 K S\nMURDOCKS  M ER1 - D AA0 K S\nMURDY  M ER1 - D IY0\nMURFF  M ER1 F\nMURFIN  M ER1 - F IH0 N\nMURGUIA  M UH1 R - G W IY0 - AH0\nMURI  M UH1 - R IY0\nMURIAL  M Y UH1 - R IY0 - AH0 L\nMURIAS  M Y UH1 - R IY0 - AH0 S\nMURIEL  M Y UH1 - R IY0 - AH0 L\nMURIHURO  M UH2 - R IY0 - HH UH1 - R OW0\nMURIHURO'S  M UH2 - R IY0 - HH UH1 - R OW0 Z\nMURILLO  M AH0 - R IH1 - L OW0\nMURIN  M Y UH1 - R IH0 N\nMURINE  M Y UH1 - R IY2 N\nMURJANI  M ER0 - JH AA1 - N IY0\nMURK  M ER1 K\nMURKIER  M ER1 - K IY0 - ER0\nMURKOWSKI  M ER0 - K AW1 S - K IY0\nMURKY  M ER1 - K IY0\nMURLEY  M ER1 - L IY0\nMURMANSK  M ER0 - M AE0 N S K\nMURMUR  M ER1 - M ER0\nMURMURED  M ER1 - M ER0 D\nMURMURING  M ER1 - M ER0 - IH0 NG\nMURMURS  M ER1 - M ER0 Z\nMURNAN  M ER1 - N AH0 N\nMURNANE  M ER1 - N AH0 N\nMURNIAN  M ER1 - N IY0 - AH0 N\nMURO  M UH1 - R OW0\nMURPH  M ER1 F\nMURPHEY  M ER1 - F IY0\nMURPHREE  M ER0 - F R IY1\nMURPHREY  M ER1 - F R IY0\nMURPHY  M ER1 - F IY0\nMURPHY'S  M ER1 - F IY0 Z\nMURPHYS  M ER1 - F IY0 Z\nMURR  M ER1\nMURRAH  M ER0 - R AA1\nMURRAY  M ER1 - IY0\nMURRAY'S  M ER1 - IY0 Z\nMURRAY(2)  M AH1 - R IY0\nMURREE  M ER1 - IY0\nMURRELET  M ER1 - L IH0 T\nMURRELL  M AO1 - R AH0 L\nMURREN  M ER1 - AH0 N\nMURREY  M ER1 - IY0\nMURRIE  M ER1 - IY0\nMURRIETA  M UH0 - R IY1 - T AH0\nMURRILL  M AO1 - R AH0 L\nMURRIN  M AO1 - R IH0 N\nMURROW  M AH1 - R OW0\nMURRY  M ER1 - IY0\nMURTAGH  M ER1 - T AH0 G\nMURTAUGH  M ER1 - T AO0\nMURTHA  M ER1 - TH AH0\nMURTHY  M ER1 - TH IY0\nMURTO  M ER1 - T OW2\nMURTON  M ER1 - T AH0 N\nMURTY  M ER1 - T IY0\nMURVEIT  M ER0 - V IY1 T\nMURZYN  M ER1 - Z IH0 N\nMUSA  M Y UW1 - S AH0\nMUSACCHIO  M Y UW2 - S AE1 - K IY0 - OW0\nMUSALO  M AH0 - S AA1 - L OW0\nMUSANTE  M UW0 - S AA1 N - T IY0\nMUSARRA  M UW0 - S AA1 - R AH0\nMUSAVI  M Y UW0 - S AA1 - V IY0\nMUSBURGER  M AH1 S - B ER0 - G ER0\nMUSCARELLA  M UW0 S - K AA0 - R EH1 - L AH0\nMUSCARELLO  M UW0 S - K AA0 - R EH1 - L OW0\nMUSCAT  M AH1 S - K AE0 T\nMUSCATINE  M AH1 S - K AH0 - T IY2 N\nMUSCATO  M UW0 - S K AA1 - T OW0\nMUSCH  M AH1 SH\nMUSCLE  M AH1 - S AH0 L\nMUSCLED  M AH1 - S AH0 L D\nMUSCLES  M AH1 - S AH0 L Z\nMUSCLING  M AH1 - S AH0 - L IH0 NG\nMUSCLING(2)  M AH1 - S L IH0 NG\nMUSCO  M UW1 - S K OW0\nMUSCOCHO  M AH0 - S K AA1 - CH OW0\nMUSCOVITE  M AH1 - S K AH0 - V AY2 T\nMUSCOVITES  M AH1 - S K AH0 - V AY2 T S\nMUSCULAR  M AH1 S - K Y AH0 - L ER0\nMUSCULATURE  M AH1 S - K Y AH0 - L AH0 - CH ER0\nMUSE  M Y UW1 Z\nMUSED  M Y UW1 Z D\nMUSEE  M Y UW1 - Z IY1\nMUSES  M Y UW1 - Z AH0 Z\nMUSES(2)  M Y UW1 - Z IH0 Z\nMUSEUM  M Y UW0 - Z IY1 - AH0 M\nMUSEUM'S  M Y UW0 - Z IY1 - AH0 M Z\nMUSEUM(2)  M Y UW1 - Z IY0 - AH0 M\nMUSEUMS  M Y UW0 - Z IY1 - AH0 M Z\nMUSEUMS(2)  M Y UW1 - Z IY0 - AH0 M Z\nMUSGRAVE  M AH1 S - G R AH0 V\nMUSGRAVE'S  M AH1 S - G R AH0 V Z\nMUSGRAVE'S(2)  M AH1 S - G R EY0 V Z\nMUSGRAVE(2)  M AH1 S - G R EY0 V\nMUSGROVE  M AH1 S - G R AH0 V\nMUSH  M AH1 SH\nMUSHA  M Y UW1 - SH AH0\nMUSHA(2)  M UW1 - SH AH0\nMUSHER  M AH1 - SH ER0\nMUSHERS  M AH1 - SH ER0 Z\nMUSHROOM  M AH1 SH - R UW0 M\nMUSHROOMED  M AH1 SH - R UH2 M D\nMUSHROOMING  M AH1 SH - R UH2 - M IH0 NG\nMUSHROOMS  M AH1 SH - R UW0 M Z\nMUSHRUSH  M AH1 SH - R AH0 SH\nMUSHTAQ  M AH1 SH - T AE0 K\nMUSHY  M AH1 - SH IY0\nMUSIAL  M Y UW1 - Z IY0 - AH0 L\nMUSIC  M Y UW1 - Z IH0 K\nMUSIC'S  M Y UW1 - Z IH0 K S\nMUSICA  M Y UW1 - Z IH0 - K AH0\nMUSICA'S  M Y UW1 - Z IH0 - K AH0 Z\nMUSICAL  M Y UW1 - Z IH0 - K AH0 L\nMUSICALITY  M Y UW2 - Z IH0 - K AE1 - L AH0 - T IY0\nMUSICALLY  M Y UW1 - Z IH0 K - L IY0\nMUSICALS  M Y UW1 - Z IH0 - K AH0 L Z\nMUSICH  M Y UW1 - S IH0 K\nMUSICIAN  M Y UW0 - Z IH1 - SH AH0 N\nMUSICIAN'S  M Y UW0 - Z IH1 - SH AH0 N Z\nMUSICIANS  M Y UW0 - Z IH1 - SH AH0 N Z\nMUSICIANS'  M Y UW0 - Z IH1 - SH AH0 N Z\nMUSICIANSHIP  M Y UW0 - Z IH1 - SH AH0 N - SH IH0 P\nMUSICK  M Y UW1 - S IH0 K\nMUSICLAND  M Y UW1 - Z IH0 - K L AE2 N D\nMUSICOLOGIST  M Y UW2 - Z IH0 - K AA1 - L AH0 - JH AH0 S T\nMUSIDORA  M UW0 - S IY0 - D AO1 - R AH0\nMUSIL  M UW1 - Z AH0 L\nMUSING  M Y UW1 - Z IH0 NG\nMUSINGS  M Y UW1 - Z IH0 NG Z\nMUSK  M AH1 S K\nMUSKA  M AH1 S - K AH0\nMUSKE  M AH1 S K\nMUSKEGON  M AH0 S - K IY1 - G IH0 N\nMUSKET  M AH1 S - K AH0 T\nMUSKETEER  M AH2 S - K AH0 - T IY1 R\nMUSKETEERS  M AH2 S - K AH0 - T IY1 R Z\nMUSKIE  M AH1 S - K IY0\nMUSKIE'S  M AH1 S - K IY0 Z\nMUSKMELON  M AH1 S K - M EH2 - L AH0 N\nMUSKOGEE  M AH0 S - K OW1 - G IY0\nMUSKOPF  M AH1 S K - AO0 P F\nMUSKOPF(2)  M AH1 S K - AO0 F\nMUSKRAT  M AH1 S K - R AE2 T\nMUSKRATS  M AH1 S K - R AE2 T Z\nMUSKY  M AH1 S - K IY0\nMUSLIM  M AH1 - Z L AH0 M\nMUSLIM(2)  M AH1 - Z L IH0 M\nMUSLIMS  M AH1 - Z L AH0 M Z\nMUSLIMS(2)  M AH1 - Z L IH0 M Z\nMUSLIN  M AH1 - Z L AH0 N\nMUSMAN  M AH1 S - M AH0 N\nMUSOLF  M Y UW1 - S OW2 L F\nMUSOLINO  M UW0 - S OW0 - L IY1 - N OW0\nMUSSCHENBROEK  M AH0 S - CH EH1 N - B R OW0 K\nMUSSEL  M AH1 - S AH0 L\nMUSSELL  M AH1 - S AH0 L\nMUSSELMAN  M AH1 - S AH0 L - M AH0 N\nMUSSELS  M AH1 - S AH0 L Z\nMUSSELWHITE  M AH1 - S AH0 L - W AY2 T\nMUSSER  M AH1 - S ER0\nMUSSMAN  M AH1 S - M AH0 N\nMUSSO  M UW1 - S OW0\nMUSSOLINI  M UW2 - S OW0 - L IY1 - N IY0\nMUSSOLINI'S  M UW2 - S OW0 - L IY1 - N IY0 Z\nMUSSON  M AH1 - S AH0 N\nMUST  M AH1 S T\nMUST'VE  M AH1 - S T IH0 V\nMUSTACHE  M AH1 - S T AE2 SH\nMUSTACHED  M AH1 - S T AE2 SH T\nMUSTACHES  M AH1 - S T AE2 - SH IH0 Z\nMUSTACHIO  M AH0 - S T AE1 - SH IY0 - OW2\nMUSTACHIOED  M AH0 - S T AE1 - SH IY0 - OW2 D\nMUSTAFA  M UW0 - S T AA1 - F AH0\nMUSTAIN  M AH0 - S T EY1 N\nMUSTANG  M AH1 - S T AE2 NG\nMUSTANGS  M AH1 - S T AE2 NG Z\nMUSTARD  M AH1 - S T ER0 D\nMUSTARDS  M AH1 - S T ER0 D Z\nMUSTER  M AH1 - S T ER0\nMUSTERED  M AH1 - S T ER0 D\nMUSTERING  M AH1 - S T ER0 - IH0 NG\nMUSTERS  M AH1 - S T ER0 Z\nMUSTIN  M AH1 - S T IH0 N\nMUSTN'T  M AH1 - S AH0 N T\nMUSTO  M AH1 - S T OW0\nMUSTOE  M AH1 - S T OW0\nMUSTON  M AH1 - S T AH0 N\nMUSTY  M AH1 - S T IY0\nMUSUMECI  M UW0 - S UW0 - M EH1 - CH IY0\nMUSZYNSKI  M AH0 - SH IH1 N - S K IY0\nMUTAGEN  M Y UW1 - T AH0 - JH EH0 N\nMUTAGENS  M Y UW1 - T AH0 - JH EH0 N Z\nMUTANT  M Y UW1 - T AH0 N T\nMUTANTS  M Y UW1 - T AH0 N T S\nMUTATE  M Y UW1 - T EY2 T\nMUTATED  M Y UW1 - T EY2 - T IH0 D\nMUTATING  M Y UW1 - T EY0 - T IH0 NG\nMUTATION  M Y UW0 - T EY1 - SH AH0 N\nMUTATIONS  M Y UW0 - T EY1 - SH AH0 N Z\nMUTCH  M AH1 CH\nMUTCHLER  M AH1 CH - L ER0\nMUTE  M Y UW1 T\nMUTED  M Y UW1 - T IH0 D\nMUTERT  M Y UW1 - T ER0 T\nMUTH  M UW1 TH\nMUTI  M UW1 - T IY2\nMUTI(2)  M Y UW1 - T IY0\nMUTILATE  M Y UW1 - T AH0 - L EY2 T\nMUTILATED  M Y UW1 - T AH0 - L EY2 - T AH0 D\nMUTILATED(2)  M Y UW1 - T AH0 - L EY2 - T IH0 D\nMUTILATING  M Y UW1 - T AH0 - L EY2 - T IH0 NG\nMUTILATION  M Y UW2 - T AH0 - L EY1 - SH AH0 N\nMUTILATIONS  M Y UW2 - T AH0 - L EY1 - SH AH0 N Z\nMUTINEER  M Y UW2 - T AH0 - N IH1 R\nMUTINEERS  M Y UW2 - T IH0 - N IH1 R Z\nMUTING  M Y UW1 - T IH0 NG\nMUTINIED  M Y UW1 - T AH0 - N IY0 D\nMUTINIES  M Y UW1 - T AH0 - N IY0 Z\nMUTINOUS  M Y UW1 - T AH0 - N AH0 S\nMUTINY  M Y UW1 - T AH0 - N IY0\nMUTLANGEN  M AH0 T - L AE1 NG - G AH0 N\nMUTSCH  M AH1 CH\nMUTSCHLER  M AH1 CH - L ER0\nMUTT  M AH1 T\nMUTTER  M AH1 - T ER0\nMUTTERED  M AH1 - T ER0 D\nMUTTERING  M AH1 - T ER0 - IH0 NG\nMUTTERINGS  M AH1 - T ER0 - IH0 NG Z\nMUTTERS  M AH1 - T ER0 Z\nMUTTON  M AH1 - T AH0 N\nMUTTS  M AH1 T S\nMUTUAL  M Y UW1 - CH AH0 - W AH0 L\nMUTUAL'S  M Y UW1 - CH AH0 - W AH0 L Z\nMUTUALISM  M Y UW1 - CH AH0 W - AH0 - L IH2 - Z AH0 M\nMUTUALITY  M Y UW2 - CH AH0 W - AE1 - L IH0 - T IY0\nMUTUALLY  M Y UW1 - CH UW0 - AH0 - L IY0\nMUTZ  M AH1 T S\nMUTZICH  M Y UW1 T - S IH0 CH\nMUTZMAN  M AH1 T S - M AH0 N\nMUTZMAN'S  M AH1 T S - M AH0 N Z\nMUZAK  M Y UW1 - Z AE0 K\nMUZIK  M Y UW1 - Z IH0 K\nMUZIO  M Y UW1 - Z IY0 - OW0\nMUZYKA  M Y UW0 - Z IH1 - K AH0\nMUZZEY  M AH1 - Z IY0\nMUZZLE  M AH1 - Z AH0 L\nMUZZLED  M AH1 - Z AH0 L D\nMUZZLES  M AH1 - Z AH0 L Z\nMUZZY  M AH1 - Z IY0\nMWANZA  M W AA1 N - Z AH0\nMY  M AY1\nMYANMAR  M Y AA1 N - M AA1 R\nMYANMAR'S  M Y AA1 N - M AA1 R Z\nMYATT  M AY1 - AH0 T\nMYCENAEAN  M AY2 - S AH0 - N IY1 - AH0 N\nMYCOGEN  M AY1 - K OW0 - G AH0 N\nMYCOLOGY  M AY0 - K AA1 - L AH0 - JH IY0\nMYELIN  M AY1 - IH0 - L IH0 N\nMYER  M AY1 - ER0\nMYERS  M AY1 - ER0 Z\nMYERS'S  M AY1 - ER0 - Z IH0 Z\nMYERSON  M AY1 R - S AH0 N\nMYETTE  M AY2 - EH1 T\nMYHAND  M AY1 - HH AE2 N D\nMYHRE  M IH1 R\nMYHREN  M IH1 - R AH0 N\nMYKLEBUST  M IH1 - K AH0 L - B AH0 S T\nMYLAN  M AY1 - L AH0 N\nMYLAR  M AY1 - L AA2 R\nMYLER  M AY1 - L ER0\nMYLES  M AY1 L Z\nMYLOD  M AY1 - L AA0 D\nMYNA  M AY1 - N AH0\nMYNATT  M IH1 - N AH0 T\nMYNATT(2)  M AY1 - N AH0 T\nMYNHIER  M IH1 N - HH IY0 - ER0\nMYOCARDIAL  M AY2 - AH0 - K AA1 R - D IY0 - AH0 L\nMYOCARDIUM  M AY2 - AH0 - K AA1 R - D IY0 - AH0 M\nMYOJIN  M Y OW1 - JH IH2 N\nMYOPIA  M AY0 - OW1 - P IY0 - AH0\nMYOPIC  M AY0 - AA1 - P IH0 K\nMYOSCINT  M Y AO1 - S IH0 N T\nMYOSIN  M AY1 - AH0 - S AH0 N\nMYOTROPHIN  M AY2 - OW0 - T R OW1 - F IH0 N\nMYRA  M AY1 - R AH0\nMYRE  M AY1 R\nMYREN  M AY1 - R AH0 N\nMYREON  M AY1 - R IY0 - AH0 N\nMYRES  M AY1 R Z\nMYRIAD  M IH1 - R IY0 - AH0 D\nMYRIAM  M IH1 - R IY0 - AH0 M\nMYRICK  M AY1 - R IH0 K\nMYRILLA  M IH0 - R IH1 - L AH0\nMYRLENE  M IH0 R - L IY1 N\nMYRLIE  M IH1 R - L IY0\nMYRMIDON  M ER1 - M IH0 - D IH0 N\nMYRMIDONS  M ER1 - M IH0 - D IH0 N Z\nMYRNA  M ER1 - N AH0\nMYRON  M AY1 - R AH0 N\nMYRRH  M ER1\nMYRTA  M ER1 - T AH0\nMYRTIA  M ER1 - SH AH0\nMYRTICE  M IH1 R - T IH0 S\nMYRTIS  M IH1 R - T IH0 S\nMYRTLE  M ER1 - T AH0 L\nMYRTLES  M ER1 - T AH0 L Z\nMYSELF  M AY2 - S EH1 L F\nMYSLINSKI  M IH0 S - L IH1 N - S K IY0\nMYSLIWIEC  M IH0 S - L IH1 - V IY0 K\nMYSTERE  M IH1 - S T IH2 R\nMYSTERIES  M IH1 - S T ER0 - IY0 Z\nMYSTERIOUS  M IH0 - S T IH1 - R IY0 - AH0 S\nMYSTERIOUSLY  M IH2 - S T IH1 - R IY0 - AH0 S - L IY0\nMYSTERIOUSLY(2)  M IH2 - S T IH1 - R Y AH0 S - L IY0\nMYSTERIUM  M IH2 - S T IY1 - R IY0 - AH0 M\nMYSTERY  M IH1 - S T ER0 - IY0\nMYSTIC  M IH1 - S T IH0 K\nMYSTICAL  M IH1 - S T IH0 - K AH0 L\nMYSTICISM  M IH1 - S T IH0 - S IH2 - Z AH0 M\nMYSTICS  M IH1 - S T IH0 K S\nMYSTIFIED  M IH1 - S T AH0 - F AY2 D\nMYSTIFIES  M IH1 - S T AH0 - F AY2 Z\nMYSTIFY  M IH1 - S T AH0 - F AY2\nMYSTIFYING  M IH1 - S T AH0 - F AY2 - IH0 NG\nMYSTIQUE  M IH0 - S T IY1 K\nMYSZKA  M IH1 SH - K AH0\nMYTH  M IH1 TH\nMYTHIC  M IH1 - TH IH0 K\nMYTHICAL  M IH1 - TH AH0 - K AH0 L\nMYTHICAL(2)  M IH1 - TH IH0 - K AH0 L\nMYTHOLOGICAL  M IH2 - TH AH0 - L AA1 - JH IH0 - K AH0 L\nMYTHOLOGY  M AH0 - TH AA1 - L AH0 - JH IY0\nMYTHS  M IH1 TH S\nMYUNG  M Y AH1 NG\nN  EH1 N\nN'DJAMENA  N D Y AH0 - M IY1 - N AH0\nN'DOUR  N D AW1 R\nN'S  EH1 N Z\nN.  EH1 N\nN.'S  EH1 N Z\nN.S  EH1 N Z\nN92762  EH1 N - N AY1 N - T UW1 - S EH1 - V AH0 N - S IH1 K S - T UW1\nNA  N AA1\nNAAB  N AA1 B\nNAAS  N AA1 Z\nNAB  N AE1 B\nNABB  N AE1 B\nNABBED  N AE1 B D\nNABBING  N AE1 - B IH0 NG\nNABER  N EY1 - B ER0\nNABERS  N EY1 - B ER0 Z\nNABI  N AA1 - B IY0\nNABI(2)  N EY1 - B IY0\nNABIL  N AA0 - B IY1\nNABISCO  N AH0 - B IH1 - S K OW0\nNABISCO'S  N AH0 - B IH1 - S K OW0 Z\nNABLUS  N AE1 B - L AH0 S\nNABOB  N AE1 - B AA0 B\nNABOBS  N AE1 - B AA0 B Z\nNABOKOV  N AE1 - B AH0 - K AA2 V\nNABOKOV'S  N AE1 - B AH0 - K AA2 V Z\nNABORS  N EY1 - B ER0 Z\nNABOZNY  N AH0 - B AA1 Z - N IY0\nNACCARATO  N AA0 - K ER0 - AA1 - T OW0\nNACCHIO  N AE1 - K IY0 - OW0\nNACCO  N AE1 - K OW0\nNACE  N EY1 S\nNACHBAR  N AE1 K - B ER0\nNACHMAN  N AE1 K - M AH0 N\nNACHMANY  N AE1 K - M AH0 - N IY0\nNACHO  N AE1 - CH OW0\nNACHO(2)  N AA1 - CH OW0\nNACHOS  N AA1 - CH OW0 Z\nNACHOS(2)  N AE1 - CH OW0 Z\nNACHREINER  N AE1 - K R AY0 - N ER0\nNACHTIGAL  N AE1 CH - T IH0 - G AH0 L\nNACIONAL  N EY2 - S IY1 - AH0 - N AH0 L\nNACK  N AE1 K\nNACKE  N AE1 K\nNACLERIO  N AA0 - K L EH1 - R IY0 - OW0\nNACOBRE  N AE1 - K AH0 - B R AH0\nNACOGDOCHES  N AH0 - K AA1 G - D AH0 - CH IH0 Z\nNAD  N AE1 D\nNADA  N AA1 - D AH0\nNADAL  N AA0 - D EY0 - AE1 L\nNADEAU  N AH0 - D OW1\nNADEIN  N AH0 - D AY1 N\nNADEL  N AA0 - D EH1 L\nNADELL  N AA0 - D EY1 L\nNADER  N EY1 - D ER0\nNADER'S  N EY1 - D ER0 Z\nNADERITE  N EY1 - D ER0 - AY2 T\nNADERITES  N EY1 - D ER0 - AY2 T S\nNADGWICK  N AE1 JH - W IH2 K\nNADIA  N AE1 - D Y AH0\nNADIA(2)  N AA1 - D Y AH0\nNADINE  N AH0 - D IY1 N\nNADING  N EY1 - D IH0 NG\nNADIR  N EY1 - D ER0\nNADJA  N AE1 - D Y AH0\nNADLER  N EY1 - D AH0 L - ER0\nNADLER(2)  N EY1 D - L ER0\nNADOLNY  N AH0 - D OW1 L - N IY0\nNADOLSKI  N AH0 - D OW1 L - S K IY0\nNAEF  N IY1 F\nNAEGELE  N EH1 - G AH0 L\nNAEGELI  N EH1 - G IH0 - L IY0\nNAEGER  N EH1 - G ER0\nNAEVE  N IY1 V\nNAFCO  N AE1 F - K OW0\nNAFF  N AE1 F\nNAFFZIGER  N AE1 F - Z IH0 - G ER0\nNAFTA  N AE1 F - T AH0\nNAFTA'S  N AE1 F - T AH0 Z\nNAFTALIS  N AE0 F - T AA1 - L IH0 S\nNAFZIGER  N AE1 F - Z IH0 - G ER0\nNAG  N AE1 G\nNAGAI  N AA0 - G AA1 - IY0\nNAGANO  N AA0 - G AA1 - N OW0\nNAGAO  N AA0 - G AA1 - OW0\nNAGASAKI  N AA2 - G AA0 - S AA1 - K IY0\nNAGATA  N AA0 - G AA1 - T AH0\nNAGEL  N EY1 - G AH0 L\nNAGELE  N AE1 - G AH0 L\nNAGENGAST  N AE1 - G IH0 NG - G AH0 S T\nNAGER  N EY1 - G ER0\nNAGGED  N AE1 G D\nNAGGING  N AE1 - G IH0 NG\nNAGI  N AA1 - G IY0\nNAGIN  N EY1 - G IH0 N\nNAGLE  N EY1 - G AH0 L\nNAGLER  N EY1 - G L ER0\nNAGORNO  N AH0 - G AO1 R - N OW0\nNAGORSKI  N AH0 - G AO1 R S - K IY0\nNAGOYA  N AH0 - G OY1 - AH0\nNAGS  N AE1 G Z\nNAGY  N EY1 - G IY0\nNAGYMAROS  N AE2 - JH IH0 - M AA1 - R OW0 S\nNAH  N AA1\nNAHAS  N AA1 - HH AH0 Z\nNAHM  N AE1 M\nNAHM(2)  N AA1 M\nNAHMIAS  N AA1 - M IY0 - AH0 Z\nNAHUM  N AE1 - HH AH0 M\nNAIDOO  N EY1 - D UW2\nNAIFY  N EY1 - F AY2\nNAIK  N EY1 K\nNAIL  N EY1 L\nNAILED  N EY1 L D\nNAILING  N EY1 - L IH0 NG\nNAILL  N EY1 L\nNAILOR  N EY1 - L ER0\nNAILS  N EY1 L Z\nNAIM  N AY1 - IH0 M\nNAIMAN  N EY1 - M AH0 N\nNAIR  N EH1 R\nNAIRA  N EH1 - R AH0\nNAIRN  N EH1 R N\nNAIRNE  N EH1 R N\nNAIROBI  N AY2 - R OW1 - B IY0\nNAISBITT  N EY1 S - B IH0 T\nNAISBITT(2)  N EY1 Z - B IH0 T\nNAISH  N AA1 - IH0 SH\nNAISH(2)  N EY1 SH\nNAISMITH  N EY1 Z - M IH0 TH\nNAISMITH(2)  N EY1 S - M IH0 TH\nNAITO  N EY1 - T OW0\nNAIVE  N AY2 - IY1 V\nNAIVELY  N AA0 - IY1 V - L IY0\nNAIVETE  N AA0 - IY2 - V AH0 - T EY1\nNAJAR  N AA0 - Y AA1 R\nNAJARIAN  N AH0 - JH EH1 - R IY0 - AH0 N\nNAJERA  N AA0 - JH EH1 - R AH0\nNAJIB  N AH0 - JH IY1 B\nNAJIB'S  N AH0 - JH IY1 B Z\nNAJIBULLAH  N AE2 - JH IH0 - B UH1 - L AH0\nNAJIBULLAH'S  N AE2 - JH IH0 - B UH1 - L AH0 Z\nNAJJAR  N AA0 - Y AA1 R\nNAKAGAWA  N AA0 - K AA0 - G AA1 - W AH0\nNAKAHARA  N AA0 - K AA0 - HH AA1 - R AH0\nNAKAI  N AA0 - K AA1 - IY0\nNAKAJIMA  N AA0 - K AA0 - JH IY1 - M AH0\nNAKAMA  N AA0 - K AA1 - M AH0\nNAKAMOTO  N AA0 - K AA0 - M OW1 - T OW0\nNAKAMURA  N AA0 - K AA0 - M UH1 - R AH0\nNAKANISHI  N AA0 - K AA0 - N IY1 - SH IY0\nNAKANO  N AA0 - K AA1 - N OW0\nNAKAO  N AA0 - K AA1 - OW0\nNAKASHIMA  N AA0 - K AA0 - SH IY1 - M AH0\nNAKASONE  N AA2 - K AH0 - S OW1 - N IY0\nNAKASONE'S  N AA2 - K AH0 - S OW1 - N IY0 Z\nNAKATA  N AA0 - K AA1 - T AH0\nNAKATANI  N AA0 - K AA0 - T AA1 - N IY0\nNAKAYAMA  N AA0 - K AA0 - Y AA1 - M AH0\nNAKED  N EY1 - K AH0 D\nNAKHAMKIN  N AE1 - K AE2 M - K IH0 N\nNALBANDIAN  N AE2 L - B AE1 N - D IY0 - AH0 N\nNALBONE  N AE1 L - B OW2 N\nNALCAP  N AE1 L - K AE0 P\nNALCO  N AE1 L - K OW0\nNALDO  N AA1 L - D OW0\nNALE  N EY1 L\nNALEPA  N AH0 - L IY1 - P AH0\nNALL  N AO1 L\nNALLEY  N AE1 - L IY0\nNALLS  N AO1 L Z\nNALLY  N AE1 - L IY0\nNAM  N AE1 M\nNAMARA  N AH0 - M AA1 - R AH0\nNAMBI  N AE1 M - B IY0\nNAMBLA  N AE1 M - B L AH0\nNAME  N EY1 M\nNAME'S  N EY1 M Z\nNAMED  N EY1 M D\nNAMELESS  N EY1 M - L AH0 S\nNAMELY  N EY1 M - L IY0\nNAMEPLATE  N EY1 M - P L EY2 T\nNAMEPLATES  N EY1 M - P L EY2 T S\nNAMER  N EY1 - M ER0\nNAMES  N EY1 M Z\nNAMESAKE  N EY1 M - S EY2 K\nNAMIBIA  N AH0 - M IH1 - B IY0 - AH0\nNAMIBIA'S  N AH0 - M IH1 - B IY0 - AH0 Z\nNAMIBIAN  N AH0 - M IH1 - B IY0 - AH0 N\nNAMING  N EY1 - M IH0 NG\nNAMIS  N AE1 - M IH0 S\nNAMPHY  N AE1 M - F IY0\nNAN  N AE1 N\nNAN'S  N AE1 N Z\nNANA  N AE1 - N AH0\nNANCARROW  N AE2 NG - K AE1 - R OW0\nNANCE  N AE1 N S\nNANCHANG  N AE1 N - CH AE1 NG\nNANCY  N AE1 N - S IY0\nNANCY'S  N AE1 N - S IY0 Z\nNANDAIME  N AE1 N - D EY2 M\nNANDI  N AA1 N - D IY0\nNANDITA  N AA0 N - D IY1 - T AH0\nNANDO  N AE1 N - D OW0\nNANDONET  N AE1 N - D OW0 - N EH0 T\nNANETTE  N AH0 - N EH1 T\nNANEZ  N AA0 N - EH1 Z\nNANG  N AE1 NG\nNANGAKU  N AE2 NG - G AA1 - K UW2\nNANGLE  N AE1 NG - G AH0 L\nNANIA  N AA1 - N IY0 - AH0\nNANJING  N AE1 N - JH IH0 NG\nNANKAI  N AE0 NG - K AY1\nNANKERVIS  N AE1 NG - K ER0 - V IH0 S\nNANKING  N AE1 NG - K IH0 NG\nNANNA  N AE1 - N AH0\nNANNEY  N AE1 - N IY0\nNANNI  N AE1 - N IY0\nNANNIES  N AE1 - N IY0 Z\nNANNINGA  N AA0 - N IY1 NG - G AH0\nNANNINI  N AA0 - N IY1 - N IY0\nNANNY  N AE1 - N IY0\nNANO  N AA1 - N OW0\nNANO(2)  N AE1 - N OW0\nNANOBABY  N AE1 - N OW0 - B EY2 - B IY0\nNANOGRAM  N AA1 N - OW0 - G R AE0 M\nNANOGRAM(2)  N AE1 - N OW0 - G R AE0 M\nNANOGRAMS  N AE1 - N OW0 - G R AE0 M Z\nNANOS  N AA1 - N OW0 Z\nNANOS(2)  N AE1 - N OW0 Z\nNANOSECOND  N AE1 - N OW0 - S EH2 - K AH0 N D\nNANOSECONDS  N AE1 - N OW0 - S EH2 - K AH0 N D Z\nNANTES  N AE1 N T S\nNANTUCKET  N AE0 N - T AH1 - K IH0 T\nNANTUCKET'S  N AE2 N - T AH1 - K IH0 T S\nNANTZ  N AE1 N T S\nNAOKI  N EY0 - OW1 - K IY0\nNAOMA  N AA0 - OW1 - M AH0\nNAOMI  N EY0 - OW1 - M IY0\nNAP  N AE1 P\nNAPA  N AE1 - P AH0\nNAPALM  N EY1 - P AA0 M\nNAPCO  N AE1 P - K OW0\nNAPEA  N AA1 - P IY0 - AH0\nNAPERVILLE  N EY1 - P ER0 - V IH2 L\nNAPHTHA  N AE1 F - TH AH0\nNAPHTHALENE  N AE1 F - TH AH0 - L IY2 N\nNAPIER  N EY1 - P IY0 - ER0\nNAPIERALA  N AA0 - P IH0 - R AA1 - L AH0\nNAPKIN  N AE1 P - K IH0 N\nNAPKINS  N AE1 P - K IH0 N Z\nNAPLES  N EY1 - P AH0 L Z\nNAPOLEON  N AH0 - P OW1 - L IY0 - AH0 N\nNAPOLEON'S  N AH0 - P OW1 - L IY0 - AH0 N Z\nNAPOLEON(2)  N AH0 - P OW1 - L Y AH0 N\nNAPOLEONIC  N AH0 - P OW2 - L IY0 - AA1 - N IH0 K\nNAPOLES  N AE1 - P AH0 L Z\nNAPOLETANO  N AA0 P - OW0 - L EH0 - T AA1 - N OW0\nNAPOLI  N AE1 - P AH0 - L IY0\nNAPOLITAN  N AA0 - P OW0 - L IY0 - T AA1 N\nNAPOLITANO  N AA0 - P OW0 - L IY0 - T AA1 - N OW0\nNAPORA  N AA0 - P AO1 - R AH0\nNAPP  N AE1 P\nNAPPA  N AE1 - P AH0\nNAPPED  N AE1 P T\nNAPPER  N AE1 - P ER0\nNAPPI  N AE1 - P IY0\nNAPPIER  N AE1 - P IY0 - ER0\nNAPPING  N AE1 - P IH0 NG\nNAPPO  N AE1 - P OW0\nNAPROSYN  N AE1 - P R AH0 - S IH0 N\nNAPS  N AE1 P S\nNAQUIN  N AE1 - K W IH0 N\nNAQVI  N AE1 K - V IY0\nNAQVI(2)  N AA1 K - V IY0\nNARA  N AA1 - R AH0\nNARAL  N AA1 - R AA0 L\nNARAMORE  N AA0 R - AA1 - M AO0 R\nNARANJA  N AA0 - R AA1 - N Y AH0\nNARANJO  N AA0 - R AA1 - N Y OW0\nNARASIMHA  N AA2 - R AH0 - S IH1 M - HH AA2\nNARASIMHAN  N AA2 - R AH0 - S IH1 M - HH AA2 N\nNARAYAN  N AA0 - R AA1 - Y AA0 N\nNARAYANAN  N AA2 - R AY0 - AA1 - N AH0 N\nNARAZAKI  N AA2 - R AA0 - Z AA1 - K IY0\nNARC  N AA1 R K\nNARCISO  N AA0 R - CH IY1 - S OW0\nNARCISSE  N AA1 R - S IH0 S\nNARCISSISM  N AA1 R - S IH0 - S IH2 - Z AH0 M\nNARCISSISTIC  N AA2 R - S IH0 - S IH1 - S T IH0 K\nNARCISSUS  N AA0 R - S IH1 - S AH0 S\nNARCO  N AA1 R - K OW0\nNARCOLEPSY  N AA1 R - K AH0 - L EH2 P - S IY0\nNARCOS  N AA1 R - K OW0 S\nNARCOTIC  N AA0 R - K AA1 - T IH0 K\nNARCOTICS  N AA0 R - K AA1 - T IH0 K S\nNARD  N AA1 R D\nNARDA  N AA1 R - D AH0\nNARDELLA  N AA2 R - D EH1 - L AH0\nNARDELLI  N AA0 R - D EH1 - L IY0\nNARDI  N AA1 R - D IY0\nNARDIELLO  N AA0 R - D IY0 - EH1 - L OW0\nNARDINI  N AA0 R - D IY1 - N IY0\nNARDO  N AA1 R - D OW0\nNARDONE  N AA0 R - D OW1 - N IY0\nNARDOZZI  N AA0 R - D OW1 T - S IY0\nNARDUCCI  N AA0 R - D UW1 - CH IY0\nNARES  N AE1 R Z\nNARITA  N EH0 - R IY1 - T AH0\nNARJES  N AA1 - R Y AH0 S\nNARLIKAR  N AA1 R - L IH0 - K AA2 R\nNARLOCK  N AA1 R - L AH0 K\nNARLY  N AA1 R - L IY0\nNARO  N AA1 - R OW0\nNARODNY  N ER0 - AA1 D - N IY0\nNARON  N AA0 - R AO1 N\nNARRAGANSETT  N EH2 - R AH0 - G AE1 N - S AH0 T\nNARRAMORE  N AA0 R - AA1 - M AO0 R\nNARRATE  N EH1 - R EY2 T\nNARRATED  N EH1 - R EY2 - T IH0 D\nNARRATES  N EH0 - R EY1 T S\nNARRATES(2)  N EH1 - R EY0 T S\nNARRATION  N EH0 - R EY1 - SH AH0 N\nNARRATIVE  N AE1 - R AH0 - T IH0 V\nNARRATIVE(2)  N EH1 - R AH0 - T IH0 V\nNARRATIVES  N AE1 - R AH0 - T IH0 V Z\nNARRATIVES(2)  N EH1 - R AH0 - T IH0 V Z\nNARRATOR  N EH1 - R EY0 - T ER0\nNARRATORS  N EH1 - R EY2 - T ER0 Z\nNARRON  N AE1 - R AH0 N\nNARROW  N EH1 - R OW0\nNARROW(2)  N AE1 - R OW0\nNARROWED  N EH1 - R OW0 D\nNARROWER  N EH1 - R OW0 - ER0\nNARROWEST  N EH1 - R OW0 - AH0 S T\nNARROWING  N EH1 - R OW0 - IH0 NG\nNARROWLY  N EH1 - R OW0 - L IY0\nNARROWNESS  N EH1 - R OW0 - N AH0 S\nNARROWS  N EH1 - R OW0 Z\nNARS  N AA1 R Z\nNARUHITO  N AA0 - R UW0 - HH IY1 - T OW0\nNARUM  N ER0 - AH1 M\nNARVAEZ  N AA0 R - V AA1 - EH0 Z\nNARVESON  N AA1 R - V IH0 - S AH0 N\nNARY  N EH1 - R IY0\nNASA  N AE1 - S AH0\nNASA'S  N AE1 - S AH0 Z\nNASAL  N EY1 - Z AH0 L\nNASALLY  N EY1 - Z AH0 - L IY0\nNASBY  N AE1 S - B IY0\nNASCA  N AA1 S - K AH0\nNASCAR  N AE1 - S K AA2 R\nNASCENT  N EY1 - S AH0 N T\nNASCIMENTO  N AE2 - S IH0 - M EH1 N - T OW0\nNASCO  N AE1 - S K OW0\nNASDAQ  N AE1 Z - D AE0 K\nNASDAQ'S  N AE1 Z - D AE0 K S\nNASE  N EY1 Z\nNASER  N EY1 - Z ER0\nNASH  N AE1 SH\nNASH'S  N AE1 - SH IH0 Z\nNASHASHIBI  N AE2 - SH AH0 - SH IY1 - B IY0\nNASHBURG  N AE1 SH - B ER0 G\nNASHBURG'S  N AE1 SH - B ER0 G Z\nNASHNAMIE  N AE1 SH - N AH0 - M IY0\nNASHUA  N AE1 - SH UW0 - AH0\nNASHUA'S  N AE1 - SH UW0 - AH0 Z\nNASHVILLE  N AE1 SH - V IH0 L\nNASHVILLE'S  N AE1 SH - V IH2 L Z\nNASIONAL  N AE2 - S IY0 - AH0 - N AE1 L\nNASLUND  N AE1 S - L AH0 N D\nNASO  N AA1 - S OW0\nNASON  N AE1 - S AH0 N\nNASONS  N AE1 - S AH0 N Z\nNASOPHARYNX  N AH0 - S AA1 - F ER0 - IH0 NG K S\nNASR  N AA1 - S ER0\nNASS  N AE1 S\nNASSAR  N AE1 - S ER0\nNASSAU  N AE1 - S AO0\nNASSER  N AE1 - S ER0\nNASSIF  N AE1 - S IH0 F\nNAST  N AE1 S T\nNAST'S  N AE1 S T S\nNASTA  N AE1 - S T AH0\nNASTASI  N AA0 - S T AA1 - S IY0\nNASTIER  N AE1 - S T IY0 - ER0\nNASTIEST  N AE1 - S T IY0 - AH0 S T\nNASTINESS  N AE1 - S T IY0 - N AH0 S\nNASTY  N AE1 - S T IY0\nNASWORTHY  N AE1 S - W ER0 - DH IY0\nNAT  N AE1 T\nNATA  N AA1 - T AH0\nNATAL  N EY1 - T AH0 L\nNATAL(2)  N AH0 - T AA1 L\nNATALA  N AA0 - T AA1 - L AH0\nNATALE  N AA0 - T AA1 - L IY0\nNATALI  N AA0 - T AA1 - L IY0\nNATALIA  N AH0 - T AA1 - L Y AH0\nNATALIE  N AE1 - T AH0 - L IY0\nNATALLE  N AH0 - T AA1 - L EY0\nNATALLE'S  N AH0 - T AA1 - L EY0 Z\nNATAN  N EY1 - T AH0 N\nNATASHA  N AH0 - T AA1 - SH AH0\nNATASHA'S  N AH0 - T AA1 - SH AH0 Z\nNATASHA'S(2)  N AH0 - T AE1 - SH AH0 Z\nNATASHA(2)  N AH0 - T AE1 - SH AH0\nNATCHER  N AE1 - CH ER0\nNATCHEZ  N AE1 - CH EH2 Z\nNATCHEZ'  N AE1 - CH EH2 Z\nNATCHEZ'S  N AE1 - CH EH2 - Z IH0 Z\nNATE  N EY1 T\nNATEC'S  N EY1 - T EH2 K S\nNATH  N AE1 TH\nNATHALIA  N AH0 - TH AE1 - L IY0 - AH0\nNATHALIE  N AE1 - T AH0 - L IY0\nNATHAN  N EY1 - TH AH0 N\nNATHAN'S  N EY1 - TH AH0 N Z\nNATHANAEL  N AE1 - TH AH0 - N EY2 L\nNATHANIA  N AH0 - TH AE1 - N IY0 - AH0\nNATHANIEL  N AH0 - TH AE1 - N Y AH0 L\nNATHANSON  N AE1 - TH AH0 N - S AH0 N\nNATHE  N EY1 DH\nNATHENE  N AH0 - TH IY1 N\nNATICK  N EY1 - T IH0 K\nNATION  N EY1 - SH AH0 N\nNATION'S  N EY1 - SH AH0 N Z\nNATIONAIR  N EY1 - SH AH0 - N EH1 R\nNATIONAL  N AE1 - SH AH0 - N AH0 L\nNATIONAL'S  N AE1 - SH AH0 - N AH0 L Z\nNATIONAL'S(2)  N AE1 SH - N AH0 L Z\nNATIONAL(2)  N AE1 SH - N AH0 L\nNATIONALE  N AE1 - SH AH0 - N AE2 - L EY0\nNATIONALE(2)  N AE1 - SH AH0 - N AH0 L\nNATIONALES  N AE2 - SH AH0 - N AA1 - L EH0 S\nNATIONALISM  N AE1 - SH AH0 N - AH0 - L IH2 - Z AH0 M\nNATIONALIST  N AE1 - SH AH0 N - AH0 - L AH0 S T\nNATIONALIST(2)  N AE1 - SH AH0 N - AH0 - L IH0 S T\nNATIONALIST(3)  N AE1 SH - N AH0 - L AH0 S T\nNATIONALIST(4)  N AE1 SH - N AH0 - L IH0 S T\nNATIONALISTIC  N AE2 - SH AH0 N - AH0 - L IH1 - S T IH0 K\nNATIONALISTIC(2)  N AE2 SH - N AH0 - L IH1 - S T IH0 K\nNATIONALISTS  N AE1 - SH AH0 N - AH0 - L IH0 S T S\nNATIONALISTS(2)  N AE1 - SH AH0 N - AH0 - L IH0 S S\nNATIONALISTS(3)  N AE1 SH - N AH0 - L IH0 S T S\nNATIONALISTS(4)  N AE1 SH - N AH0 - L IH0 S S\nNATIONALISTS(5)  N AE1 - SH AH0 N - AH0 - L IH0 S\nNATIONALISTS(6)  N AE1 SH - N AH0 - L IH0 S\nNATIONALITIES  N AE2 - SH AH0 - N AE1 - L IH0 - T IY0 Z\nNATIONALITY  N AE2 - SH AH0 - N AE1 - L AH0 - T IY0\nNATIONALITY(2)  N AE2 - SH AH0 - N AE1 - L IH0 - T IY0\nNATIONALIZATION  N AE2 - SH AH0 N - AH0 - L AH0 - Z EY1 - SH AH0 N\nNATIONALIZATION(2)  N AE2 SH - N AH0 - L AH0 - Z EY1 - SH AH0 N\nNATIONALIZATIONS  N AE2 - SH AH0 N - AH0 - L AH0 - Z EY1 - SH AH0 N Z\nNATIONALIZATIONS(2)  N AE2 SH - N AH0 - L AH0 - Z EY1 - SH AH0 N Z\nNATIONALIZE  N AE1 - SH AH0 N - AH0 - L AY2 Z\nNATIONALIZE(2)  N AE1 SH - N AH0 - L AY2 Z\nNATIONALIZED  N AE1 - SH AH0 N - AH0 - L AY2 Z D\nNATIONALIZED(2)  N AE1 SH - N AH0 - L AY2 Z D\nNATIONALIZING  N AE1 - SH AH0 N - AH0 - L AY2 - Z IH0 NG\nNATIONALIZING(2)  N AE1 SH - N AH0 - L AY2 - Z IH0 NG\nNATIONALLY  N AE1 - SH AH0 N - AH0 - L IY0\nNATIONALLY(2)  N AE1 SH - N AH0 - L IY0\nNATIONALS  N AE1 - SH AH0 - N AH0 L Z\nNATIONALS(2)  N AE1 SH - N AH0 L Z\nNATIONHOOD  N EY1 - SH AH0 N - HH UH2 D\nNATIONS  N EY1 - SH AH0 N Z\nNATIONS'  N EY1 - SH AH0 N Z\nNATIONSBANC  N EY1 - SH AH0 N Z - B AE2 NG K\nNATIONSBANC'S  N EY1 - SH AH0 N Z - B AE2 NG K\nNATIONSBANC'S(2)  N EY1 - SH AH0 N Z - B AA2 NG K\nNATIONSBANC(2)  N EY1 - SH AH0 N Z - B AA2 NG K\nNATIONSBANK  N EY1 - SH AH0 N Z - B AE2 NG K\nNATIONSBANK'S  N EY1 - SH AH0 N Z - B AE2 NG K S\nNATIONWIDE  N EY1 - SH AH0 N - W AY1 D\nNATIONWIDE'S  N EY1 - SH AH0 N - W AY1 D Z\nNATIVE  N EY1 - T IH0 V\nNATIVES  N EY1 - T IH0 V Z\nNATIVIDAD  N AH0 - T IH0 - V IH0 - D AA1 D\nNATIVISM  N EY1 - T IH0 - V IH2 - Z AH0 M\nNATIVIST  N EY1 - T IH0 - V IH2 S T\nNATIVITY  N AH0 - T IH1 - V AH0 - T IY0\nNATO  N EY1 - T OW0\nNATO'S  N EY1 - T OW0 Z\nNATOLI  N AA0 - T OW1 - L IY0\nNATOMAS  N EY2 - T OW1 - M AH0 Z\nNATS  N AE1 T S\nNATSIOS  N AE1 T - S IY0 - OW0 S\nNATTER  N AE1 - T ER0\nNATTERING  N AE1 - T ER0 - IH0 NG\nNATTIE  N AE1 - T IY0\nNATTILY  N AE1 - T AH0 - L IY0\nNATTY  N AE1 - T IY0\nNATUNA  N AH0 - T UW1 - N AH0\nNATURAL  N AE1 - CH ER0 - AH0 L\nNATURAL'S  N AE1 - CH ER0 - AH0 L Z\nNATURAL'S(2)  N AE1 - CH R AH0 L Z\nNATURAL(2)  N AE1 - CH R AH0 L\nNATURALISM  N AE1 - CH ER0 - AH0 - L IH2 - Z AH0 M\nNATURALISM(2)  N AE1 - CH R AH0 - L IH2 - Z AH0 M\nNATURALIST  N AE1 - CH ER0 - AH0 - L AH0 S T\nNATURALIST(2)  N AE1 - CH R AH0 - L AH0 S T\nNATURALISTIC  N AE2 - CH ER0 - AH0 - L IH1 - S T IH0 K\nNATURALISTIC(2)  N AE2 - CH R AH0 - L IH1 - S T IH0 K\nNATURALISTS  N AE1 - CH ER0 - AH0 - L IH0 S T S\nNATURALISTS(2)  N AE1 - CH ER0 - AH0 - L IH0 S S\nNATURALISTS(3)  N AE1 - CH R AH0 - L IH0 S T S\nNATURALISTS(4)  N AE1 - CH R AH0 - L IH0 S S\nNATURALISTS(5)  N AE1 - CH ER0 - AH0 - L IH0 S\nNATURALISTS(6)  N AE1 - CH R AH0 - L IH0 S\nNATURALIZATION  N AE1 - CH ER0 - AH0 - L AH0 - Z EY1 - SH AH0 N\nNATURALIZATION(2)  N AE1 - CH R AH0 - L AH0 - Z EY1 - SH AH0 N\nNATURALIZE  N AE1 - CH ER0 - AH0 - L AY2 Z\nNATURALIZE(2)  N AE1 - CH R AH0 - L AY2 Z\nNATURALIZED  N AE1 - CH ER0 - AH0 - L AY2 Z D\nNATURALIZED(2)  N AE1 - CH R AH0 - L AY2 Z D\nNATURALLY  N AE1 - CH ER0 - AH0 - L IY0\nNATURALLY(2)  N AE1 - CH R AH0 - L IY0\nNATURE  N EY1 - CH ER0\nNATURE'S  N EY1 - CH ER0 Z\nNATURED  N EY1 - CH ER0 D\nNATUREDLY  N EY1 - CH ER0 D - L IY0\nNATURES  N EY1 - CH ER0 Z\nNATWEST  N AE2 T - W EH1 S T\nNATWEST'S  N AE2 T - W EH1 S T S\nNATZKE  N AE1 T S - K IY0\nNAU  N OW1\nNAUER  N AW1 - ER0\nNAUERT  N AW1 - ER0 T\nNAUGATUCK  N AO1 - G AH0 - T AH2 K\nNAUGHT  N AO1 T\nNAUGHTON  N AO1 - T AH0 N\nNAUGHTY  N AO1 - T IY0\nNAUGLE  N AO1 - G AH0 L\nNAUGLES  N AO1 - G AH0 L Z\nNAULT  N AO1 L T\nNAUMAN  N AW1 - M AH0 N\nNAUMANN  N AW1 - M AH0 N\nNAUS  N AO1 Z\nNAUSEA  N AO1 - Z IY0 - AH0\nNAUSEAM  N AW1 - Z IY2 M\nNAUSEATE  N AO1 - Z IY0 - EY2 T\nNAUSEATED  N AO1 - Z IY0 - EY2 - T AH0 D\nNAUSEATING  N AO1 - ZH IY0 - EY2 - T IH0 NG\nNAUSEOUS  N AO1 - SH AH0 S\nNAUSS  N AO1 S\nNAUTA  N AA0 - UW1 - T AH0\nNAUTICAL  N AO1 - T AH0 - K AH0 L\nNAUTILUS  N AO1 - T AH0 - L AH0 S\nNAUTILUS'S  N AO1 - T AH0 - L AH0 - S IH0 Z\nNAV  N AE1 V\nNAVA  N AA1 - V AH0\nNAVAJO  N AA1 - V AH0 - HH OW2\nNAVAJO(2)  N AE1 - V AH0 - HH OW2\nNAVAJOS  N AA1 - V AH0 - HH OW2 Z\nNAVAJOS(2)  N AE1 - V AH0 - HH OW2 Z\nNAVAL  N EY1 - V AH0 L\nNAVAR  N AA0 - V AA1 R\nNAVARETTE  N AE1 - V ER0 - EH2 T\nNAVARRA  N AA0 - V AA1 - R AH0\nNAVARRE  N AA0 - V AA1 R\nNAVARRETE  N AE1 - V ER0 - IY2 T\nNAVARRETTE  N AE1 - V ER0 - EH2 T\nNAVARRO  N AH0 - V AA1 - R OW0\nNAVAS  N AA1 - V AH0 S\nNAVCOM  N AE1 V - K AA2 M\nNAVE  N EY1 V\nNAVEL  N EY1 - V AH0 L\nNAVELLIER  N AH0 - V EH1 L - Y ER0\nNAVICKAS  N AA0 - V IY1 - K AA0 Z\nNAVIES  N EY1 - V IY0 Z\nNAVIGABLE  N AE1 - V AH0 - G AH0 - B AH0 L\nNAVIGATE  N AE1 - V AH0 - G EY2 T\nNAVIGATED  N AE1 - V AH0 - G EY2 - T IH0 D\nNAVIGATING  N AE1 - V AH0 - G EY2 - T IH0 NG\nNAVIGATION  N AE1 - V AH0 - G EY1 - SH AH0 N\nNAVIGATION(2)  N AE2 - V AH0 - G EY1 - SH AH0 N\nNAVIGATIONAL  N AE2 - V AH0 - G EY1 - SH AH0 - N AH0 L\nNAVIGATOR  N AE1 - V AH0 - G EY2 - T ER0\nNAVIGATORS  N AE1 - V AH0 - G EY2 - T ER0 Z\nNAVIN  N AA0 - V IY1 N\nNAVIN-CHANDR  N AA1 - V IH2 N - CH AA1 N - D ER0\nNAVIN-CHANDRA  N AA1 - V IH2 N - CH AA1 N - D R AH0\nNAVIS  N AA1 - V IH0 S\nNAVISTAR  N AE1 - V IH0 - S T AA2 R\nNAVLAB  N AE1 V - L AE0 B\nNAVRATILOVA  N AE0 - V R AE2 - T IH0 - L OW1 - V AH0\nNAVRATILOVA'S  N AE0 - V R AE2 - T IH0 - L OW1 - V AH0 Z\nNAVSTAR  N AE1 V - S T AA2 R\nNAVY  N EY1 - V IY0\nNAVY'S  N EY1 - V IY0 Z\nNAW  N AA1\nNAWROCKI  N AA0 - V R OW1 T S - K IY0\nNAWROT  N AO1 - R AH0 T\nNAY  N EY1\nNAYDEN  N EY1 - D IH0 N\nNAYLOR  N EY1 - L ER0\nNAYS  N EY1 Z\nNAYSAYER  N EY2 - S EY1 - ER0\nNAYSAYERS  N EY2 - S EY1 - ER0 Z\nNAYYAR  N EY1 - Y AA2 R\nNAZAR  N AA0 - Z AA1 R\nNAZARBAYEV  N AA2 - Z AH0 R - B AY1 - Y EH0 V\nNAZARETH  N AE1 - Z AH0 - R IH0 TH\nNAZARIAN  N AH0 - Z EH1 - R IY0 - AH0 N\nNAZARIO  N AA0 - Z AA1 - R IY0 - OW0\nNAZER  N EY1 - Z ER0\nNAZER'S  N EY1 - Z ER0 Z\nNAZI  N AA1 T - S IY0\nNAZI'S  N AA1 T - S IY0 Z\nNAZIONALE  N AA0 T - S IY0 - OW0 - N AA1 - L IY0\nNAZIS  N AA1 T - S IY0 Z\nNAZISM  N AE1 - Z IH0 - Z AH0 M\nNAZZARO  N AA0 T - S AA1 - R OW0\nNDAU  EH0 N - D AW1\nNE  N IY1\nNE'ER  N EH1 R\nNE(2)  N AO2 R TH - IY1 S T\nNE(3)  EH1 - N IY1\nNE(4)  N EY1\nNEACE  N IY1 S\nNEAD  N IY1 D\nNEAGLE  N IY1 - G AH0 L\nNEAL  N IY1 L\nNEAL'S  N IY1 L Z\nNEALA  N IY1 - L AH0\nNEALE  N IY1 L\nNEALEY  N IY1 - L IY0\nNEALIS  N IY1 - L IH0 S\nNEALL  N IY1 L\nNEALON  N IY1 - L AH0 N\nNEALSON  N IY1 L - S AH0 N\nNEALY  N IY1 - L IY0\nNEANDERTHAL  N IY0 - AE1 N - D ER0 - TH AO2 L\nNEANDERTHALS  N IY0 - AE1 N - D ER0 - TH AO2 L Z\nNEAPOLITAN  N IY2 - AH0 - P AA1 - L AH0 - T AH0 N\nNEAR  N IH1 R\nNEARBY  N IH1 R - B AY1\nNEARED  N IH1 R D\nNEARER  N IH1 - R ER0\nNEAREST  N IH1 - R AH0 S T\nNEARHOOD  N IH1 R - HH UH0 D\nNEARING  N IH1 - R IH0 NG\nNEARLY  N IH1 R - L IY0\nNEARS  N IH1 R Z\nNEARSIGHTED  N IY1 R - S AY2 - T IH0 D\nNEARSIGHTEDNESS  N IY1 R - S AY2 - T IH0 D - N AH0 S\nNEARY  N IH1 - R IY0\nNEAS  N IY1 Z\nNEASE  N IY1 Z\nNEAT  N IY1 T\nNEATER  N IY1 - T ER0\nNEATEST  N IY1 - T AH0 S T\nNEATHERY  N EH1 - TH ER0 - IY0\nNEATLY  N IY1 T - L IY0\nNEATNESS  N IY1 T - N AH0 S\nNEAULT  N OW1\nNEAVE  N IY1 V\nNEAVES  N IY1 V Z\nNEBEKER  N EH1 - B IH0 - K ER0\nNEBEL  N EH1 - B AH0 L\nNEBERGALL  N IY1 - B ER0 - G AH0 L\nNEBLETT  N EH1 - B L IH0 T\nNEBRASKA  N AH0 - B R AE1 S - K AH0\nNEBRASKA'S  N AH0 - B R AE1 S - K AH0 Z\nNEBRASKAN  N AH0 - B R AE1 S - K AH0 N\nNEBRASKANS  N AH0 - B R AE1 S - K AH0 N Z\nNEBULA  N EH1 - B Y AH0 - L AH0\nNEBULOUS  N EH1 - B Y AH0 - L AH0 S\nNEC  N EH1 K\nNECAISE  N EH1 - K AY0 S\nNECCI  N EH1 - CH IY0\nNECESSARILY  N EH2 - S AH0 - S EH1 - R AH0 - L IY0\nNECESSARY  N EH1 - S AH0 - S EH2 - R IY0\nNECESSITATE  N AH0 - S EH1 - S AH0 - T EY2 T\nNECESSITATED  N AH0 - S EH1 - S AH0 - T EY2 - T AH0 D\nNECESSITATES  N AH0 - S EH1 - S AH0 - T EY2 T S\nNECESSITATING  N AH0 - S EH1 - S IH0 - T EY2 - T IH0 NG\nNECESSITIES  N AH0 - S EH1 - S IH0 - T IY0 Z\nNECESSITY  N AH0 - S EH1 - S AH0 - T IY0\nNECESSITY(2)  N AH0 - S EH1 - S IH0 - T IY0\nNECHAYEV  N EH2 - CH AY1 - EH0 V\nNECHYBA  N EH2 - CH IY1 - B AH0\nNECK  N EH1 K\nNECKED  N EH1 K T\nNECKER  N EH1 - K ER0\nNECKLACE  N EH1 K - L AH0 S\nNECKLACES  N EH1 K - L AH0 - S IH0 Z\nNECKLACING  N EH1 K - L AH0 - S IH0 NG\nNECKS  N EH1 K S\nNECKTIE  N EH1 K - T AY2\nNECKTIES  N EH1 K - T AY2 Z\nNECKWEAR  N EH1 K - W EH2 R\nNECO  N IY1 - K OW0\nNECO'S  N IY1 - K OW0 Z\nNECROMANCY  N EH1 - K R AH0 - M AE2 N - S IY0\nNECROPOLIS  N AH0 - K R AA1 - P AH0 - L AH0 S\nNECROSIS  N AH0 - K R OW1 - S AH0 S\nNECTAR  N EH1 K - T ER0\nNECULA  N EH1 - K Y UW0 - L AH0\nNED  N EH1 D\nNED'S  N EH1 D Z\nNEDA  N EY1 - D AH0\nNEDD  N EH1 D\nNEDDA  N EH1 - D AH0\nNEDDICK  N EH1 - D IH0 K\nNEDDO  N EH1 - D OW0\nNEDEAU  N IH0 - D OW1\nNEDERLAND  N EH1 - D ER0 - L AH0 N D\nNEDERLANDEN  N EH1 - D ER0 - L AE2 N - D AH0 N\nNEDERLANDER  N EH1 - D ER0 - L AE2 N - D ER0\nNEDERLANDSCHE  N EH2 - D ER0 - L AE1 N D - SH IY0\nNEDERLANDSE  N EH2 - D ER0 - L AE1 N D - S IY0\nNEDLLOYD  N EH1 - D AH0 - L OY2 D\nNEDLLOYD(2)  N EH1 D - L OY2 D\nNEDROW  N EH1 D - R OW0\nNEDVED  N EH1 D - V AH0 D\nNEDVED(2)  N EH1 D - V EH2 D\nNEE  N IY1\nNEEB  N IY1 B\nNEECE  N IY1 S\nNEECO  N IY1 - K OW0\nNEED  N IY1 D\nNEEDED  N IY1 - D AH0 D\nNEEDED(2)  N IY1 - D IH0 D\nNEEDELMAN  N IY1 - D AH0 L - M AH0 N\nNEEDFUL  N IY1 D - F AH0 L\nNEEDHAM  N IY1 - D AH0 M\nNEEDHAM'S  N IY1 - D AH0 M Z\nNEEDIEST  N IY1 - D IY0 - IH0 S T\nNEEDING  N IY1 - D IH0 NG\nNEEDLE  N IY1 - D AH0 L\nNEEDLED  N IY1 - D AH0 L D\nNEEDLEFISH  N IY1 - D AH0 L - F IH2 SH\nNEEDLELIKE  N IY1 - D AH0 L - L AY2 K\nNEEDLEMAN  N IY1 - D AH0 L - M AH0 N\nNEEDLEPOINT  N IY1 - D AH0 L - P OY2 N T\nNEEDLER  N IY1 - D AH0 - L ER0\nNEEDLER(2)  N IY1 D - L ER0\nNEEDLES  N IY1 - D AH0 L Z\nNEEDLESS  N IY1 D - L AH0 S\nNEEDLESSLY  N IY1 D - L AH0 S - L IY0\nNEEDLEWORK  N IY1 - D AH0 L - W ER2 K\nNEEDLING  N IY1 D - L IH0 NG\nNEEDN'T  N IY1 - D AH0 N T\nNEEDS  N IY1 D Z\nNEEDY  N IY1 - D IY0\nNEEF  N IY1 F\nNEEL  N IY1 L\nNEELD  N IY1 L D\nNEELEY  N IY1 - L IY0\nNEELS  N IY1 L Z\nNEELY  N IY1 - L IY0\nNEEMAN  N IY1 - M AH0 N\nNEENAN  N IY1 - N AH0 N\nNEEPER  N IY1 - P ER0\nNEER  N IH1 R\nNEES  N IY1 Z\nNEESE  N IY1 Z\nNEESON  N IY1 - S AH0 N\nNEET  N IY1 T\nNEFARIOUS  N AH0 - F EH1 - R IY0 - AH0 S\nNEFF  N EH1 F\nNEFT  N EH1 F T\nNEFTEGORSK  N EH1 F - T IH0 - G AO2 R S K\nNEG  N EH1 G\nNEGARA  N EH0 - G AA1 - R AH0\nNEGATE  N IH0 - G EY1 T\nNEGATED  N IY1 - G EY0 - T IH0 D\nNEGATED(2)  N IH0 - G EY1 - T AH0 D\nNEGATES  N IH0 - G EY1 T S\nNEGATING  N IH0 - G EY1 - T IH0 NG\nNEGATION  N AH0 - G EY1 - SH AH0 N\nNEGATIVE  N EH1 - G AH0 - T IH0 V\nNEGATIVELY  N EH1 - G AH0 - T IH0 V - L IY0\nNEGATIVES  N EH1 - G AH0 - T IH0 V Z\nNEGATIVISM  N EH1 - G AH0 - T IH0 - V IH2 - Z AH0 M\nNEGATIVITY  N EH2 - G AH0 - T IH1 - V AH0 - T IY0\nNEGATRON  N EH1 - G AH0 - T R AA0 N\nNEGATRONS  N EH1 - G AH0 - T R AA0 N Z\nNEGENT  N EH1 - G AH0 N T\nNEGENT(2)  N EH1 - JH AH0 N T\nNEGEV  N EH1 - G EH2 V\nNEGLECT  N AH0 - G L EH1 K T\nNEGLECT(2)  N IH0 - G L EH1 K T\nNEGLECTED  N AH0 - G L EH1 K - T AH0 D\nNEGLECTED(2)  N IH0 - G L EH1 K - T IH0 D\nNEGLECTFUL  N IH0 - G L EH1 K T - F AH0 L\nNEGLECTING  N IH0 - G L EH1 K - T IH0 NG\nNEGLECTS  N IH0 - G L EH1 K T S\nNEGLEY  N EH1 G - L IY0\nNEGLIA  N EH1 G - L IY0 - AH0\nNEGLIGENCE  N EH1 G - L AH0 - JH AH0 N S\nNEGLIGENCE(2)  N EH1 G - L IH0 - JH AH0 N S\nNEGLIGENT  N EH1 G - L AH0 - JH AH0 N T\nNEGLIGENT(2)  N EH1 G - L IH0 - JH AH0 N T\nNEGLIGENTLY  N EH1 G - L IH0 - JH AH0 N T - L IY0\nNEGLIGIBLE  N EH1 G - L AH0 - JH AH0 - B AH0 L\nNEGLIGIBLE(2)  N EH1 G - L IH0 - JH AH0 - B AH0 L\nNEGOTIABLE  N AH0 - G OW1 - SH AH0 - B AH0 L\nNEGOTIATE  N AH0 - G OW1 - SH IY0 - EY2 T\nNEGOTIATE(2)  N IH0 - G OW1 - SH IY0 - EY2 T\nNEGOTIATED  N AH0 - G OW1 - SH IY0 - EY2 - T AH0 D\nNEGOTIATED(2)  N IH0 - G OW1 - SH IY0 - EY2 - T IH0 D\nNEGOTIATES  N IH0 - G OW1 - SH IY0 - EY2 T S\nNEGOTIATING  N IH0 - G OW1 - SH IY0 - EY2 - T IH0 NG\nNEGOTIATION  N IH0 - G OW2 - SH IY0 - EY1 - SH AH0 N\nNEGOTIATIONS  N AH0 - G OW2 - SH IY0 - EY1 - SH AH0 N Z\nNEGOTIATIONS(2)  N IH0 - G OW2 - SH IY0 - EY1 - SH AH0 N Z\nNEGOTIATOR  N AH0 - G OW1 - SH IY0 - EY2 - T ER0\nNEGOTIATOR'S  N IH0 - G OW1 - SH IY0 - EY2 - T ER0 Z\nNEGOTIATOR(2)  N IH0 - G OW1 - SH IY0 - EY2 - T ER0\nNEGOTIATORS  N IH0 - G OW1 - SH IY0 - EY2 - T ER0 Z\nNEGOTIATORS'  N AH0 - G OW1 - SH IY0 - EY2 - T ER0 Z\nNEGRETE  N EH1 - G R IY2 T\nNEGRI  N EH1 - G R IY0\nNEGRIN  N EH1 - G R IH0 N\nNEGRO  N IY1 - G R OW0\nNEGROES  N IY1 - G R OW0 Z\nNEGROID  N IY1 - G R OY0 D\nNEGRON  N EH1 - G R AH0 N\nNEGRONI  N EH2 - G R OW1 - N IY0\nNEGROS  N IY1 - G R OW0 Z\nNEGS  N EH1 G Z\nNEGUS  N IY1 - G AH0 S\nNEHEMIAH  N IY2 - AH0 - M AY1 - AH0\nNEHER  N EY1 - ER0\nNEHLS  N EH1 L Z\nNEHRING  N EH1 - R IH0 NG\nNEHRU  N EY1 - R UW2\nNEIBAUER  N AY1 - B AW0 - ER0\nNEIBERT  N IY1 - B ER0 T\nNEICE  N IY1 S\nNEIDER  N IY1 - D ER0\nNEIDHARDT  N AY1 D - HH AA0 R T\nNEIDHART  N AY1 D - HH AA0 R T\nNEIDIGH  N IY1 - D AY2\nNEIDL  N IY1 - D AH0 L\nNEIDLINGER  N AY1 - D AH0 L - IH0 - NG ER0\nNEIDLINGER(2)  N IY1 D - L IH0 - NG ER0\nNEIER  N AY1 - ER0\nNEIFERT  N IY1 - F ER0 T\nNEIGER  N AY1 - G ER0\nNEIGHBOR  N EY1 - B ER0\nNEIGHBOR'S  N EY1 - B ER0 Z\nNEIGHBORHOOD  N EY1 - B ER0 - HH UH2 D\nNEIGHBORHOOD'S  N EY1 - B ER0 - HH UH2 D Z\nNEIGHBORHOODS  N EY1 - B ER0 - HH UH2 D Z\nNEIGHBORING  N EY1 - B ER0 - IH0 NG\nNEIGHBORLY  N EY1 - B ER0 - L IY0\nNEIGHBORS  N EY1 - B ER0 Z\nNEIGHBORS'  N EY1 - B ER0 Z\nNEIGHMOND  N EY1 - M AH0 N D\nNEIGHMOND'S  N EY1 - M AH0 N D Z\nNEIKIRK  N IY1 - K ER0 K\nNEIL  N IY1 L\nNEIL'S  N IY1 L Z\nNEILAN  N IY1 - L AH0 N\nNEILD  N IY1 L D\nNEILE  N IY1 L\nNEILL  N IY1 L\nNEILS  N IY1 L Z\nNEILSEN  N AY1 L - S AH0 N\nNEILSON  N IY1 L - S AH0 N\nNEIMAN  N IY1 - M AH0 N\nNEIMEYER  N AY1 - M AY0 - ER0\nNEIN  N IY1 N\nNEIRA  N EH1 - R AH0\nNEIS  N IY1 Z\nNEISEN  N AY1 - S AH0 N\nNEISES  N IY1 - Z IH0 Z\nNEISLER  N AY1 - S AH0 - L ER0\nNEISLER(2)  N AY1 S - L ER0\nNEISS  N IY1 S\nNEISWENDER  N AY1 - S W EH0 N - D ER0\nNEITHER  N IY1 - DH ER0\nNEITHER(2)  N AY1 - DH ER0\nNEITZ  N IY1 T S\nNEITZEL  N AY1 T - Z AH0 L\nNEITZKE  N AY1 T S - K IY0\nNEJ  N EY1\nNEJAMATIN  N EH0 - JH AH0 - M AE1 - T IH0 N\nNEKOOSA  N IH0 - K UW1 - S AH0\nNEKTON  N EH1 K - T AH0 N\nNEL  N EH1 L\nNELA  N EH1 - L AH0\nNELDA  N EH1 L - D AH0\nNELIA  N EH1 - L IY0 - AH0\nNELINA  N EH0 - L IY1 - N AH0\nNELITA  N EH0 - L IY1 - T AH0\nNELL  N EH1 L\nNELLA  N EH1 - L AH0\nNELLCOR  N EH1 L - K AO2 R\nNELLE  N EH1 L\nNELLER  N EH1 - L ER0\nNELLES  N EH1 L Z\nNELLETTE  N EH2 - L EH1 T\nNELLI  N EH1 - L IY0\nNELLIANA  N EH2 - L IY0 - AE1 - N AH0\nNELLIE  N EH1 - L IY0\nNELLIGAN  N EH1 - L IH0 - G AH0 N\nNELLIS  N EH1 - L IH0 S\nNELLWYN  N EH1 L - W IH0 N\nNELLY  N EH1 - L IY0\nNELMS  N EH1 L M Z\nNELOMS  N EH1 - L AH0 M Z\nNELON  N EH1 - L AH0 N\nNELS  N EH1 L Z\nNELSEN  N EH1 L - S AH0 N\nNELSON  N EH1 L - S AH0 N\nNELSON'S  N EH1 L - S AH0 N Z\nNEMATODE  N EH1 - M AH0 - T OW2 D\nNEMATODES  N EH1 - M AH0 - T OW2 D Z\nNEMEAN  N IY1 - M IY0 - AH0 N\nNEMEC  N EH1 - M IH0 K\nNEMECEK  N EH1 - M IH0 - S IH0 K\nNEMER  N IY1 - M ER0\nNEMEROFF  N EH1 - M ER0 - AO0 F\nNEMES  N IY1 M Z\nNEMESIS  N EH1 - M AH0 - S IH0 S\nNEMETH  N EY1 - M IH0 TH\nNEMETZ  N EH1 - M IH0 T S\nNEMIR  N AH1 - M ER0\nNEMITZ  N EH1 - M IH0 T S\nNEMMERS  N EH1 - M ER0 Z\nNEMO  N EH1 - M OW0\nNEMOS  N IY1 - M OW0 Z\nNEMOURS  N IH0 - M AO1 R Z\nNENDICK  N EH1 N - D IH0 K\nNENE  N IY1 N\nNENI  N EH1 - N IY0\nNENI'S  N EH1 - N IY0 S\nNENNINGER  N EH1 - N IH0 - NG ER0\nNEO  N IY1 - OW0\nNEOAX  N IY2 - OW0 - AE1 K S\nNEOCLASSIC  N IY2 - OW0 - K L AE1 - S IH0 K\nNEOCLASSICAL  N IY2 - OW0 - K L AE1 - S IH0 - K AH0 L\nNEOCONSERVATIVE  N IY2 - OW0 - K AH0 N - S ER1 - V AH0 - T IH0 V\nNEOCONSERVATIVES  N IY2 - OW0 - K AH0 N - S ER1 - V AH0 - T IH0 V Z\nNEOLA  N IY0 - AA1 - L AH0\nNEOLIBERAL  N IY2 - OW0 - L IH1 - B ER0 - AH0 L\nNEOLIBERALS  N IY2 - OW0 - L IH1 - B ER0 - AH0 L Z\nNEOMA  N EY0 - OW1 - M AH0\nNEON  N IY1 - AA0 N\nNEONATAL  N IY2 - OW0 - N EY1 - T AH0 L\nNEONS  N IY1 - AA2 N Z\nNEOPHYTE  N IY1 - AH0 - F AY2 T\nNEOPHYTES  N IY1 - AH0 - F AY2 T S\nNEOPLASM  N IY1 - AH0 - P L AE2 - Z AH0 M\nNEOPLATONIC  N IY2 - OW0 - P L AH0 - T AA1 - N IH0 K\nNEOPLATONIST  N IY2 - OW0 - P L EY1 - T AH0 - N AH0 S T\nNEOPRENE  N IY1 - AH0 - P R IY2 N\nNEOPRENE(2)  N IY1 - OW0 - P R IY2 N\nNEOPROBE  N IY1 - OW0 - P R OW2 B\nNEORX  N IY1 - OW0 - R EH2 K S\nNEOTENIC  N IY2 - AH0 - T IY1 - N IH0 K\nNEOTENY  N IY0 - AA1 - T AH0 - N IY0\nNEPA  N IY1 - P AH0\nNEPAL  N AH0 - P AO1 L\nNEPALESE  N EH2 - P AH0 - L IY1 Z\nNEPALI  N AH0 - P AO1 - L IY0\nNEPHEW  N EH1 - F Y UW0\nNEPHEW'S  N EH1 - F Y UW0 Z\nNEPHEWS  N EH1 - F Y UW0 Z\nNEPHRIDIUM  N AH0 - F R IH1 - D IY0 - AH0 M\nNEPHRITE  N EH1 F - R AY0 T\nNEPHRON  N EH1 - F R AA0 N\nNEPHROSIS  N AH0 - F R OW1 - S AH0 S\nNEPL  N EH1 - P AH0 L\nNEPL(2)  EH1 - N IY1 - P IY1 - EH1 L\nNEPONSET  N AH0 - P AA1 N - S IH0 T\nNEPOOL  N AH0 - P UW1 L\nNEPOTISM  N EH1 - P AH0 - T IH2 - Z AH0 M\nNEPTUNE  N EH1 P - T UW0 N\nNEPTUNIUM  N EH0 P - T UW1 - N IY0 - AH0 M\nNERCO  N ER1 - K OW0\nNERD  N ER1 D\nNERDS  N ER1 D Z\nNERDY  N ER1 - D IY0\nNERENBERG  N IH1 - R AH0 N - B ER0 G\nNERI  N EH1 - R IY0\nNERICE  N EH1 - R IH0 S\nNERINE  N EH1 - R IY0 N\nNERIO  N EH1 - R IY0 - OW0\nNERITIC  N ER0 - IH1 - T IH0 K\nNERLICH  N ER1 - L IH0 K\nNERNEY  N ER1 - N IY0\nNERO  N IH1 - R OW0\nNERO'S  N IH1 - R OW0 Z\nNERONE  N EH1 - R AH0 N\nNERREN  N EH1 - R AH0 N\nNERUDA  N AH0 - R UW1 - D AH0\nNERVANA  N ER0 - V AE1 - N AH0\nNERVE  N ER1 V\nNERVES  N ER1 V Z\nNERVOSA  N ER0 - V OW1 - S AH0\nNERVOUS  N ER1 - V AH0 S\nNERVOUSLY  N ER1 - V AH0 S - L IY0\nNERVOUSNESS  N ER1 - V AH0 S - N AH0 S\nNERVY  N ER1 - V IY0\nNES  N EH1 S\nNESBIT  N EH1 S - B IH0 T\nNESBITT  N EH1 Z - B IH0 T\nNESBY  N EH1 S - B IY0\nNESCI  N EH1 - S IY0\nNESHEIM  N EH1 S - HH AY2 M\nNESI  N EH1 - S IY0\nNESLER  N EH1 - S AH0 - L ER0\nNESLER'S  N EH1 - S AH0 - L ER0 Z\nNESLER'S(2)  N EH1 S - L ER0 Z\nNESLER(2)  N EH1 S - L ER0\nNESMITH  N EH1 Z - M IH0 TH\nNESS  N EH1 S\nNESSA  N EH1 - S AH0\nNESSEL  N EH1 - S AH0 L\nNESSEN  N IY1 - S AH0 N\nNESSER  N EH1 - S ER0\nNESSETH  N EH1 - S IH0 TH\nNESSI  N EH1 - S IY0\nNESSIE  N EH1 - S IY0\nNESSLER  N EH1 S - L ER0\nNEST  N EH1 S T\nNESTA  N EH1 - S T AH0\nNESTE  N EH1 S T\nNESTEA  N EH1 - S T IY0 - AH0\nNESTED  N EH1 - S T AH0 D\nNESTED(2)  N EH1 - S T IH0 D\nNESTER  N EH1 - S T ER0\nNESTERS  N EH1 - S T ER0 Z\nNESTING  N EH1 - S T IH0 NG\nNESTLE  N EH1 - S AH0 L\nNESTLE'S  N EH1 - S AH0 L Z\nNESTLE'S(2)  N EH1 S - L IY1 Z\nNESTLE(2)  N EH1 S - L IY1\nNESTLED  N EH1 - S AH0 L D\nNESTLER  N EH1 - S AH0 - L ER0\nNESTLER(2)  N EH1 S - L ER0\nNESTLES  N EH1 - S AH0 L Z\nNESTLING  N EH1 S T - L IH0 NG\nNESTLING(2)  N EH1 - S L IH0 NG\nNESTLINGS  N EH1 S T - L IH0 NG Z\nNESTLINGS(2)  N EH1 S - L IH0 NG Z\nNESTOR  N EH1 - S T ER0\nNESTORIAN  N EH0 - S T AO1 - R IY0 - AH0 N\nNESTORIANISM  N EH0 - S T AO1 - R IY0 - AH0 - N IH0 - Z AH0 M\nNESTS  N EH1 S T S\nNET  N EH1 T\nNETAN  N EH1 - T AH0 N\nNETANYAHU  N EH2 - T AH0 - N Y AA1 - HH UW2\nNETANYAHU'S  N EH2 - T AH0 - N Y AA1 - HH UW2 Z\nNETBACK  N EH1 T - B AE2 K\nNETCOM  N EH1 T - K AA2 M\nNETH  N EH1 TH\nNETHER  N EH1 - DH ER0\nNETHERCUTT  N EH1 - TH ER0 - K AH0 T\nNETHERLAND  N EH1 - DH ER0 - L AH0 N D\nNETHERLANDIC  N EH1 - DH ER0 - L AE2 N - D IH0 K\nNETHERLANDS  N EH1 - DH ER0 - L AH0 N D Z\nNETHERLANDS'  N EH1 - TH ER0 - L AE0 N D Z\nNETHERS  N EH1 - DH ER0 Z\nNETHERTON  N EH1 - DH ER0 - T AH0 N\nNETHERWORLD  N EH1 - DH ER0 - W ER2 L D\nNETHERY  N EH1 - DH ER0 - IY0\nNETHUVA  N EH2 - TH UW1 - V AH0\nNETHUVA'S  N EH2 - TH UW1 - V AH0 Z\nNETLIKE  N EH1 T - L AY2 K\nNETO  N EH1 - T OW0\nNETS  N EH1 T S\nNETSCAPE  N EH1 T - S K EY2 P\nNETSCAPE'S  N EH1 T - S K EY2 P S\nNETT  N EH1 T\nNETTA  N EH1 - T AH0\nNETTED  N EH1 - T IH0 D\nNETTER  N EH1 - T ER0\nNETTERVILLE  N EH1 - T ER0 - V IH0 L\nNETTESHEIM  N EH1 - T IH0 S - SH AY0 M\nNETTIE  N EH1 - T IY0\nNETTING  N EH1 - T IH0 NG\nNETTLE  N EH1 - T AH0 L\nNETTLED  N EH1 - T AH0 L D\nNETTLES  N EH1 - T AH0 L Z\nNETTLESOME  N EH1 - T AH0 L - S AH0 M\nNETTLETON  N EH1 - T AH0 L - T AH0 N\nNETTLETON'S  N EH1 - T AH0 L - T AH0 N Z\nNETTO  N EH1 - T OW0\nNETTY  N EH1 - T IY0\nNETVIEW  N EH1 T - V Y UW2\nNETWARE  N EH1 T - W EH2 R\nNETWORK  N EH1 T - W ER2 K\nNETWORK'S  N EH1 T - W ER2 K S\nNETWORKED  N EH1 T - W ER2 K T\nNETWORKING  N EH1 T - W ER2 - K IH0 NG\nNETWORKS  N EH1 T - W ER2 K S\nNETWORKS'  N EH1 T - W ER2 K S\nNETWORTH  N EH1 T - W ER2 TH\nNETZ  N EH1 T S\nNETZEL  N EH1 T - Z AH0 L\nNETZER  N EH1 T - Z ER0\nNETZLEY  N EH1 T S - L IY0\nNEU  N OY1\nNEUBAUER  N UW1 - B AW0 - ER0\nNEUBECKER  N UW1 - B EH2 - K ER0\nNEUBER  N UW1 - B ER0\nNEUBERGER  N UW1 - B ER0 - G ER0\nNEUBERT  N UW1 - B ER0 T\nNEUBURG  N UW1 - B ER0 G\nNEUBURGER  N UW1 - B ER0 - G ER0\nNEUDECKER  N UW1 - D IH0 - K ER0\nNEUE  N UW1 - IY0\nNEUENDORF  N UW1 - AH0 N - D AO0 R F\nNEUENDORFFER  N UW1 N - D AO0 R - F ER0\nNEUENFELDT  N UW1 - AH0 N - F EH0 L T\nNEUENSCHWANDER  N UW1 - AH0 N - SH W AO0 N - D ER0\nNEUER  N OY1 - ER0\nNEUFELD  N UW1 - F EH2 L D\nNEUFELD'S  N UW1 - F EH2 L D Z\nNEUGEBAUER  N UW1 - G AH0 - B AW0 - ER0\nNEUGENT  N UW1 - JH AH0 N T\nNEUHART  N UW1 - HH AA2 R T\nNEUHARTH  N UW1 - HH AA2 R TH\nNEUHAUS  N UW1 - HH AW2 S\nNEUHAUSER  N UW1 - HH AW2 - Z ER0\nNEUHOFF  N UW1 - HH AO2 F\nNEUKAM  N UW1 - K AH0 M\nNEUKIRCHEN  N UW1 - K ER0 - CH AH0 N\nNEUKIRCHEN(2)  N UW2 - K IH1 R - CH AH0 N\nNEUKOM  N UW1 - K AA0 M\nNEUMAIER  N UW1 - M AY0 - ER0\nNEUMAN  N UW1 - M AH0 N\nNEUMANN  N UW1 - M AH0 N\nNEUMAYER  N UW1 - M EY2 - ER0\nNEUMEIER  N UW1 - M AY0 - ER0\nNEUMEISTER  N UW1 - M AY2 - S T ER0\nNEUMEYER  N UW1 - M AY0 - ER0\nNEUMILLER  N UW1 - M AH0 - L ER0\nNEUNER  N UW1 - N ER0\nNEUPERT  N UW1 - P ER0 T\nNEUPOGEN  N UW1 - P OW0 - JH EH2 N\nNEURAL  N UH1 - R AH0 L\nNEURAL(2)  N Y UH1 - R AH0 L\nNEURASTHENIA  N UH2 - R AE0 S - TH IY1 - N IY0 - AH0\nNEURO  N UH1 - R OW2\nNEUROFIBROMATOSIS  N UH2 - R OW0 - F AY0 - B R OW2 - M AH0 - T OW1 - S IH0 S\nNEUROHR  N UH1 - R AO0 R\nNEUROLOGIC  N UH2 - R AH0 - L AA1 - JH IH0 K\nNEUROLOGICAL  N UH2 - R AH0 - L AA1 - JH IH0 - K AH0 L\nNEUROLOGIST  N UH0 - R AA1 - L AH0 - JH AH0 S T\nNEUROLOGISTS  N UH0 - R AA1 - L AH0 - JH AH0 S T S\nNEUROLOGISTS(2)  N UH0 - R AA1 - L AH0 - JH AH0 S S\nNEUROLOGISTS(3)  N UH0 - R AA1 - L AH0 - JH AH0 S\nNEUROLOGY  N UH0 - R AA1 - L AH0 - JH IY0\nNEURONS  N UH1 - R AA0 N Z\nNEUROPATHY  N UH1 - R OW0 - P AE2 - TH IY0\nNEUROPATHY(2)  N UH2 - R AO1 - P AH0 - TH IY0\nNEUROPATHY(3)  N Y UH1 - R OW0 - P AE2 - TH IY0\nNEUROSCIENCE  N Y UH1 - R OW0 - S AY2 - AH0 N S\nNEUROSCIENTIST  N Y UH1 - R OW0 - S AY2 - AH0 N - T IH0 S T\nNEUROSCIENTIST(2)  N Y UH1 - R OW0 - S AY2 - AH0 - N IH0 S T\nNEUROSES  N UH0 - R OW1 - S IY0 Z\nNEUROSIS  N UH0 - R OW1 - S AH0 S\nNEUROSURGEON  N UH1 - R OW0 - S ER2 - JH AH0 N\nNEUROSURGEONS  N UH1 - R OW0 - S ER2 - JH AH0 N Z\nNEUROSURGERY  N UH2 - R OW0 - S ER1 - JH ER0 - IY0\nNEUROTH  N UH1 - R AO0 TH\nNEUROTIC  N UH0 - R AA1 - T IH0 K\nNEUSER  N UW1 - S ER0\nNEUSTADT  N UW1 SH - T AE0 T\nNEUSTINE  N UW1 - S T AY2 N\nNEUTER  N UW1 - T ER0\nNEUTERED  N UW1 - T ER0 D\nNEUTERING  N UW1 - T ER0 - IH0 NG\nNEUTRAL  N UW1 - T R AH0 L\nNEUTRALISM  N UW1 - T R AH0 - L IH2 - Z AH0 M\nNEUTRALIST  N UW1 - T R AH0 - L AH0 S T\nNEUTRALITY  N UW0 - T R AE1 - L AH0 - T IY0\nNEUTRALIZATION  N UW2 - T R AH0 - L AH0 - Z EY1 - SH AH0 N\nNEUTRALIZE  N UW1 - T R AH0 - L AY2 Z\nNEUTRALIZED  N UW1 - T R AH0 - L AY2 Z D\nNEUTRALIZES  N UW1 - T R AH0 - L AY2 - Z IH0 Z\nNEUTRALIZING  N UW1 - T R AH0 - L AY2 - Z IH0 NG\nNEUTRALS  N UW1 - T R AH0 L Z\nNEUTRINO  N UW0 - T R IY1 - N OW0\nNEUTRINOS  N UW0 - T R IY1 - N OW0 Z\nNEUTROGENA  N UW2 - T R AH0 - JH IY1 - N AH0\nNEUTRON  N UW1 - T R AA2 N\nNEUTRONS  N UW1 - T R AA2 N Z\nNEUVILLE  N UW1 - V IH2 L\nNEUWIRTH  N UW1 - W ER0 TH\nNEUZIL  N UW1 - Z AH0 L\nNEVA  N EY1 - V AH0\nNEVADA  N AH0 - V AA1 - D AH0\nNEVADA'S  N AH0 - V AE1 - D AH0 Z\nNEVADA'S(2)  N AH0 - V AA1 - D AH0 Z\nNEVADA(2)  N AH0 - V AE1 - D AH0\nNEVADAN  N AH0 - V AE1 - D AH0 N\nNEVADANS  N AH0 - V AE1 - D AH0 N Z\nNEVALA  N EY0 - V AA1 - L AH0\nNEVARACH  N AH0 - V AA1 - R AH0 CH\nNEVARACH'S  N AH0 - V AA1 - R AH0 - CH AH0 Z\nNEVAREZ  N EY0 - V AA1 - R EH0 Z\nNEVE  N IY1 V\nNEVEAU  N IH0 - V OW1\nNEVEL  N EY0 - V EH1 L\nNEVELS  N EH1 - V AH0 L Z\nNEVER  N EH1 - V ER0\nNEVERLAND  N EH1 - V ER0 - L AE0 N D\nNEVERLAND(2)  N EH1 - V ER0 - L AH0 N D\nNEVERMIND  N EH1 - V ER0 - M AY2 N D\nNEVERMORE  N EH1 - V ER0 - M AO2 R\nNEVERS  N EH1 - V ER0 Z\nNEVERTHELESS  N EH2 - V ER0 - DH AH0 - L EH1 S\nNEVES  N IY1 V Z\nNEVEU  N IH0 - V UW1\nNEVIL  N EY0 - V IY1 L\nNEVILE  N EY0 - V AY1 L\nNEVILL  N EH1 - V IH0 L\nNEVILLE  N EH1 - V IH0 L\nNEVILLS  N EH1 - V IH0 L Z\nNEVILS  N EH1 - V AH0 L Z\nNEVIN  N EH1 - V IH0 N\nNEVIN'S  N EH1 - V IH0 N Z\nNEVINS  N EH1 - V IH0 N Z\nNEVIS  N EH1 - V IH0 S\nNEVITT  N EH1 - V IH0 T\nNEVIUS  N IY1 - V IY0 - IH0 S\nNEW  N UW1\nNEW(2)  N Y UW1\nNEW-CALEDONIA  N UW1 - K AE2 - L AH0 - D OW1 - N IY0 - AH0\nNEW-HAMPSHIRE  N UW1 - HH AE1 M P - SH ER0\nNEW-HAMPSHIRE'S  N UW1 - HH AE1 M P - SH ER0 Z\nNEW-HAMPSHIRITE  N UW1 - HH AE1 M P - SH ER0 - AY2 T\nNEW-HAMPSHIRITES  N UW1 - HH AE1 M P - SH ER0 - AY2 T S\nNEW-JERSEY  N UW1 - JH ER1 - Z IY0\nNEW-JERSEY'S  N UW1 - JH ER1 - Z IY0 Z\nNEW-MEXICAN  N UW1 - M EH1 K - S IH0 - K AH0 N\nNEW-MEXICANS  N UW1 - M EH1 K - S IH0 - K AH0 N Z\nNEW-MEXICO  N UW1 - M EH1 K - S AH0 - K OW2\nNEW-MEXICO'S  N UW1 - M EH1 K - S AH0 - K OW2 Z\nNEW-YORK  N UW1 - Y AO1 R K\nNEW-YORK'S  N UW1 - Y AO1 R K S\nNEW-YORKER  N UW1 - Y AO1 R - K ER0\nNEW-YORKERS  N UW1 - Y AO1 R - K ER0 Z\nNEW-ZEALAND  N UW1 - Z IY1 - L AH0 N D\nNEWALL  N UW1 - AO2 L\nNEWARK  N UW1 - ER0 K\nNEWARK'S  N Y UW1 - ER0 K S\nNEWARK(2)  N Y UW1 - ER0 K\nNEWBAUER  N UW1 - B AW0 - ER0\nNEWBERG  N UW1 - B ER0 G\nNEWBERGER  N UW1 - B ER0 - G ER0\nNEWBERN  N UW1 - B ER0 N\nNEWBERRY  N UW1 - B EH2 - R IY0\nNEWBERY  N UW1 - B EH2 - R IY0\nNEWBILL  N UW1 - B IH2 L\nNEWBOLD  N UW1 - B OW2 L D\nNEWBORN  N UW1 - B AO0 R N\nNEWBORNS  N UW1 - B AO2 R N Z\nNEWBRAUDWICK  N UW0 - B R AA1 D - W IH0 K\nNEWBRIDGE  N UW1 - B R IH2 JH\nNEWBROUGH  N UW1 - B R AW0\nNEWBURG  N UW1 - B ER0 G\nNEWBURGER  N UW1 - B ER0 - G ER0\nNEWBURGH  N UW1 - B ER0 G\nNEWBURN  N UW1 - B ER2 N\nNEWBURY  N UW1 - B EH2 - R IY0\nNEWBURY'S  N UW1 - B EH2 - R IY0 Z\nNEWBY  N UW1 - B IY0\nNEWCASTLE  N UW1 - K AE2 - S AH0 L\nNEWCASTLE'S  N UW1 - K AE2 - S AH0 L Z\nNEWCOM  N UW1 - K AH0 M\nNEWCOMB  N UW1 - K AH0 M\nNEWCOMBE  N UW1 - K AH0 M\nNEWCOME  N UW1 - K AH0 M\nNEWCOMER  N UW1 - K AH2 - M ER0\nNEWCOMERS  N UW1 - K AH2 - M ER0 Z\nNEWCOR  N UW1 - K AO2 R\nNEWEDGE  N UW1 - AH0 JH\nNEWELL  N UW1 - AH0 L\nNEWELL'S  N UW1 - AH0 L Z\nNEWER  N UW1 - ER0\nNEWEST  N UW1 - AH0 S T\nNEWEY  N UW1 - IY0\nNEWFANGLE  N UW2 - F AE1 NG - G AH0 L\nNEWFANGLED  N UW2 - F AE1 NG - G AH0 L D\nNEWFIELD  N UW1 - F IY2 L D\nNEWFOUND  N UW1 - F AW1 N D\nNEWFOUNDLAND  N UW1 - F AH0 N D - L AH0 N D\nNEWGARD  N UW1 - G ER0 D\nNEWGATE  N UW1 - G EY0 T\nNEWGATEWAY  N UW1 - G EY2 T - W EY2\nNEWHALL  N UW1 - HH AO2 L\nNEWHALL'S  N UW1 - HH AO2 L Z\nNEWHARD  N UW1 - HH AA2 R D\nNEWHART  N UW1 - HH AA2 R T\nNEWHOUSE  N UW1 - HH AW2 S\nNEWILL  N IY0 - W IH1 L\nNEWINGHAM  N UW1 - IH0 NG - HH AE2 M\nNEWISH  N UW1 - IH0 SH\nNEWKIRK  N UW1 - K ER0 K\nNEWLAN  N UW1 - L AH0 N\nNEWLAND  N UW1 - L AH0 N D\nNEWLEY  N UW1 - L IY0\nNEWLIN  N UW1 - L IH0 N\nNEWLON  N UW1 - L AH0 N\nNEWLUN  N UW1 - L AH0 N\nNEWLY  N UW1 - L IY0\nNEWLYN  N UW1 - L IH0 N\nNEWLYWED  N UW1 - L IY0 - W EH2 D\nNEWLYWEDS  N UW1 - L IY0 - W EH2 D Z\nNEWMAN  N UW1 - M AH0 N\nNEWMAN'S  N UW1 - M AH0 N Z\nNEWMANN  N UW1 - M AH0 N\nNEWMARK  N UW1 - M AA2 R K\nNEWMARKET  N UW1 - M AA2 R - K AH0 T\nNEWMEYER  N UW1 - M AY0 - ER0\nNEWMONT  N UW1 - M AA2 N T\nNEWMONT'S  N UW1 - M AA2 N T S\nNEWMYER  N UW1 - M IY0 - ER0\nNEWNAM  N UW1 - N AH0 M\nNEWNESS  N UW1 - N AH0 S\nNEWORLD  N EH1 - W ER1 L D\nNEWORLD(2)  N UW1 - ER1 L D\nNEWPORT  N UW1 - P AO0 R T\nNEWPORT'S  N UW1 - P AO0 R T S\nNEWQUIST  N UW1 - K W IH2 S T\nNEWS  N UW1 Z\nNEWS'  N UW1 Z\nNEWS'S  N UW1 - Z IH0 Z\nNEWS(2)  N Y UW1 Z\nNEWSCAST  N UW1 Z - K AE2 S T\nNEWSCASTER  N UW1 Z - K AE2 - S T ER0\nNEWSCASTERS  N UW1 Z - K AE2 - S T ER0 Z\nNEWSCASTS  N UW1 Z - K AE2 S T S\nNEWSCASTS(2)  N UW1 Z - K AE2 S S\nNEWSCASTS(3)  N UW1 Z - K AE2 S\nNEWSCORP  N UW1 Z - K AO2 R P\nNEWSCORP'S  N UW1 Z - K AO2 R P S\nNEWSDAY  N UW1 Z - D EY2\nNEWSDAY'S  N UW1 Z - D EY2 Z\nNEWSGROUP  N UW1 Z - G R UW2 P\nNEWSGROUPS  N UW1 Z - G R UW2 P S\nNEWSHAM  N UW1 - SH AH0 M\nNEWSHOUR  N UW1 - Z AW2 R\nNEWSIES  N UW1 - Z IY0 Z\nNEWSLETTER  N UW1 Z - L EH2 - T ER0\nNEWSLETTER'S  N UW1 Z - L EH2 - T ER0 Z\nNEWSLETTERS  N UW1 Z - L EH2 - T ER0 Z\nNEWSLINK  N UW1 Z - L IH0 NG K\nNEWSLINK'S  N UW1 Z - L IH0 NG K S\nNEWSMAGAZINE  N UW1 Z - M AE2 - G AH0 - Z IY2 N\nNEWSMAKER  N UW1 Z - M EY2 - K ER0\nNEWSMAKERS  N UW1 Z - M EY2 - K ER0 Z\nNEWSMAN  N UW1 Z - M AE2 N\nNEWSMAN(2)  N UW1 Z - M AH0 N\nNEWSMEN  N UW1 Z - M IH0 N\nNEWSNIGHT  N UW1 Z - N AY2 T\nNEWSOM  N UW1 - Z AH0 M\nNEWSOME  N UW1 - S AH0 M\nNEWSON  N UW1 - S AH0 N\nNEWSPAPER  N UW1 Z - P EY2 - P ER0\nNEWSPAPER'S  N UW1 Z - P EY2 - P ER0 Z\nNEWSPAPERMAN  N UW1 Z - P EY2 - P ER0 - M AE2 N\nNEWSPAPERMEN  N UW1 Z - P AE2 - P ER0 - M AH0 N\nNEWSPAPERS  N UW1 Z - P EY2 - P ER0 Z\nNEWSPAPERS'  N UW1 Z - P EY2 - P ER0 Z\nNEWSPEAK  N UW1 - S P IY2 K\nNEWSPEOPLE  N UW1 Z - P IY0 - P AH0 L\nNEWSPERSON  N UW1 Z - P ER0 - S AH0 N\nNEWSPERSONS  N UW1 Z - P ER0 - S AH0 N Z\nNEWSPRINT  N UW1 Z - P R IH2 N T\nNEWSREEL  N UW1 Z - R IY2 L\nNEWSREELS  N UW1 Z - R IY2 L Z\nNEWSROOM  N UW1 Z - R UW2 M\nNEWSROOM'S  N UW1 Z - R UW2 M Z\nNEWSROOMS  N UW1 Z - R UW2 M Z\nNEWSSTAND  N UW1 Z - S T AE2 N D\nNEWSSTANDS  N UW1 Z - S T AE2 N D Z\nNEWSTROM  N UW1 Z - T R AH0 M\nNEWSUM  N UW1 - Z AH0 M\nNEWSWANGER  N UW1 Z - W AO0 NG - ER0\nNEWSWEEK  N UW1 Z - W IY2 K\nNEWSWEEK'S  N UW1 Z - W IY2 K S\nNEWSWEEKLY  N UW1 Z - W IY2 K - L IY0\nNEWSWIRE  N UW1 Z - W AY2 R\nNEWSWIRES  N UW1 Z - W AY2 R Z\nNEWSWOMAN  N UW1 Z - W UH0 - M AH0 N\nNEWSWOMEN  N UW1 Z - W IH0 - M AH0 N\nNEWSWORTHY  N UW1 Z - W ER2 - DH IY0\nNEWSY  N UW1 - Z IY0\nNEWT  N UW1 T\nNEWT'S  N UW1 T S\nNEWTON  N UW1 - T AH0 N\nNEWTON'S  N UW1 - T AH0 N Z\nNEWTONCHIK  N UW1 - T AA2 N - CH IH0 K\nNEWTONIAN  N UW0 - T OW1 - N IY0 - AH0 N\nNEWTOWN  N UW1 - T AW2 N\nNEWTOWNE  N UW1 - T AW2 N\nNEWTS  N UW1 T S\nNEWVECTOR  N UW1 - V EH2 K - T ER0\nNEWVILLE  N UW1 - V IH2 L\nNEWWAVE  N UW1 - W EY2 V\nNEXGEN  N EH1 K S - JH EH2 N\nNEXIS  N EH1 K - S IH0 S\nNEXRAD  N EH1 K - S R AE0 D\nNEXT  N EH1 K S T\nNEXT'S  N EH1 K S T S\nNEXT(2)  N EH1 K S\nNEXTEL  N EH1 K - S T EH2 L\nNEXTEL'S  N EH1 K - S T EH2 L Z\nNEXTSTEP  N EH1 K S T - S T EH2 P\nNEXTSTEP(2)  N EH1 K - S T EH2 P\nNEXUS  N EH1 K - S AH0 S\nNEY  N EY1\nNEYENS  N AY1 N Z\nNEYER  N EY1 - ER0\nNEYHART  N EY1 - HH AA2 R T\nNEYLAND  N EY1 - L AH0 N D\nNEYLON  N EY1 - L AH0 N\nNEYMAN  N EY1 - M AH0 N\nNEYSA  N EY1 - S AH0\nNEZ  N EH1 Z\nNG  EH1 NG\nNG(2)  IH1 NG\nNGAI  G AY1\nNGAI(2)  EH0 N - G AY1\nNGEMA  EH0 N - JH EH1 - M AA0\nNGHI  G IY1\nNGHI(2)  EH0 N - G IY1\nNGO  G OW1\nNGO'S  G OW1 Z\nNGOR  EH2 - NG AO1 R\nNGOR(2)  G AO1 R\nNGOS  G OW1 Z\nNGUYEN  N UW0 - Y EH1 N\nNIACIN  N AY1 - AH0 - S AH0 N\nNIACIN(2)  N AY1 - AH0 - S IH0 N\nNIAD  N AY1 - AE0 D\nNIAGARA  N AY0 - AE1 - G R AH0\nNIAGARA'S  N AY0 - AE1 - G R AH0 Z\nNIAID  N AY1 - EY2 D\nNIAL  N AY1 - AH0 L\nNIALL  N AY1 L\nNIB  N IH1 B\nNIBBE  N IH1 B\nNIBBLE  N IH1 - B AH0 L\nNIBBLED  N IH1 - B AH0 L D\nNIBBLES  N IH1 - B AH0 L Z\nNIBBLING  N IH1 - B AH0 L - IH0 NG\nNIBBLING(2)  N IH1 - B L IH0 NG\nNIBERT  N IH1 - B ER0 T\nNIBLACK  N IH1 - B L AE2 K\nNIBLETT  N IH1 - B L IH0 T\nNIBLOCK  N IH1 - B L AA2 K\nNIBS  N IH1 B Z\nNIC  EH1 - N AY1 - S IY1\nNIC(2)  N IH1 K\nNICANDROS  N IH0 - K AE1 N - D R OW0 S\nNICARAGUA  N IH2 - K ER0 - AA1 - G W AH0\nNICARAGUA'S  N IH2 - K ER0 - AA1 - G W AH0 Z\nNICARAGUAN  N IH2 - K ER0 - AA1 - G W AH0 N\nNICARAGUANS  N IH2 - K ER0 - AA1 - G W AH0 N Z\nNICASTRO  N IH0 - K AE1 - S T R OW0\nNICCOLI  N IY0 - K OW1 - L IY0\nNICCOLITE  N IH1 - K AH0 - L AY2 T\nNICCUM  N IH1 - K AH0 M\nNICE  N AY1 S\nNICE(2)  N IY1 S\nNICELY  N AY1 S - L IY0\nNICEN  N AY1 - S AH0 N\nNICENESS  N AY1 S - N AH0 S\nNICER  N AY1 - S ER0\nNICEST  N AY1 - S IH0 S T\nNICETIES  N AY1 - S IH0 - T IY0 Z\nNICHE  N IH1 CH\nNICHELSON  N IH1 - CH IH0 L - S AH0 N\nNICHES  N IH1 - CH IH0 Z\nNICHOL  N IH1 - K AO0 L\nNICHOLA  N IH0 - HH OW1 - L AH0\nNICHOLAS  N IH1 - K AH0 - L AH0 S\nNICHOLAS'  N IH1 - K AH0 - L AH0 S\nNICHOLAS'(2)  N IH1 K - L AH0 S\nNICHOLAS'S  N IH1 - K AH0 - L AH0 - S IH0 Z\nNICHOLAS'S(2)  N IH1 K - L AH0 - S IH0 Z\nNICHOLAS(2)  N IH1 K - L AH0 S\nNICHOLES  N IH1 K - HH OW0 L Z\nNICHOLI  N IH1 - K AH0 - L AY0\nNICHOLL  N IH1 - K AH0 L\nNICHOLLS  N IH1 - K AH0 L Z\nNICHOLS  N IH1 - K AH0 L Z\nNICHOLS'  N IH1 - K AH0 L Z\nNICHOLS'S  N IH1 - K AH0 L - Z IH0 Z\nNICHOLSON  N IH1 - K AH0 L - S AH0 N\nNICHOLSON'S  N IH1 - K AH0 L - S AH0 N Z\nNICHTER  N IH1 K - T ER0\nNICK  N IH1 K\nNICK'S  N IH1 K S\nNICKED  N IH1 K T\nNICKEL  N IH1 - K AH0 L\nNICKEL'S  N IH1 - K AH0 L Z\nNICKELL  N IH1 - K AH0 L\nNICKELODEON  N IH2 - K IH0 - L OW1 - D IY0 - AH0 N\nNICKELS  N IH1 - K AH0 L Z\nNICKELSON  N IH1 - K IH0 L - S AH0 N\nNICKENS  N IH1 - K AH0 N Z\nNICKERSON  N IH1 - K ER0 - S AH0 N\nNICKESON  N IH1 - K IH0 - S AH0 N\nNICKEY  N IH1 - K IY0\nNICKI  N IH1 - K IY0\nNICKLAS  N IH1 - K L AH0 Z\nNICKLAUS  N IH1 K - L AH0 S\nNICKLAUS'S  N IH1 K - L AH0 - S IH0 Z\nNICKLE  N IH1 - K AH0 L\nNICKLEBY  N IH1 - K AH0 L - B IY0\nNICKLES  N IH1 - K AH0 L Z\nNICKLESS  N IH1 K - L AH0 S\nNICKLIN  N IH1 - K L IH0 N\nNICKLOW  N IH1 - K L OW2\nNICKNAME  N IH1 K - N EY2 M\nNICKNAMED  N IH1 K - N EY2 M D\nNICKNAMES  N IH1 K - N EY2 M Z\nNICKOL  N IH1 - K AH0 L\nNICKOLAS  N IH1 - K AH0 - L AH0 Z\nNICKOLOFF  N IH1 - K AH0 - L AO0 F\nNICKOLS  N IH1 - K AH0 L Z\nNICKOLSON  N IH1 - K OW0 L - S AH0 N\nNICKS  N IH1 K S\nNICKSON  N IH1 K - S AH0 N\nNICKUM  N IH1 - K AH0 M\nNICKY  N IH1 - K IY0\nNICKY'S  N IH1 - K IY0 Z\nNICLANESHIA  N IH1 K - L AH0 - N EH2 - SH AH0\nNICLANESHIA'S  N IH1 K - L AH0 - N EH2 - SH AH0 Z\nNICLEY  N IH1 K - L IY0\nNICO  N IY1 - K OW0\nNICODEMO  N IY2 - K OW0 - D EY1 - M OW0\nNICODERM  N IH1 - K AH0 - D ER2 M\nNICOL  N IH1 - K AH0 L\nNICOLA  N IH0 - K OW1 - L AH0\nNICOLAE  N IH1 - K OW0 - L AY2\nNICOLAI  N IY0 - K OW0 - L AA1 - IY0\nNICOLAIDES  N IH1 - K AH0 - L EY0 D Z\nNICOLAISEN  N IH1 - K AH0 - L AY0 - S AH0 N\nNICOLAS  N IH1 - K AH0 - L AH0 S\nNICOLAU  N IH1 - K AH0 - L AW0\nNICOLAUS  N IH1 - K AH0 - L AW0 Z\nNICOLAY  N IH1 - K AH0 - L EY2\nNICOLE  N IH0 - K OW1 L\nNICOLE'S  N IH0 - K OW1 L Z\nNICOLET  N IH2 - K AH0 - L EH1 T\nNICOLETTA  N IH2 - K AH0 - L EH1 - T AH0\nNICOLETTE  N IH2 - K AH0 - L EH1 T\nNICOLETTI  N IY0 - K OW0 - L EH1 - T IY0\nNICOLETTI(2)  N IH2 - K AH0 - L EH1 - T IY0\nNICOLI  N IY0 - K OW1 - L IY0\nNICOLIN  N IH1 - K AH0 - L IH0 N\nNICOLINA  N IY2 - K OW0 - L IY1 - N AH0\nNICOLINE  N IY0 - K OW0 - L IY1 - N IY0\nNICOLINI  N IY2 - K OW0 - L IY1 - N IY0\nNICOLL  N IH1 - K AH0 L\nNICOLLE  N IH0 - K OW1 L\nNICOLLIER  N IH0 - K OW1 - L Y ER0\nNICOLLS  N IH1 - K AH0 L Z\nNICOLO  N IH1 - K AH0 - L OW0\nNICOLOFF  N IH1 - K AH0 - L AO0 F\nNICOLOSI  N IY0 - K OW0 - L OW1 - S IY0\nNICOLS  N IH1 - K AH0 L Z\nNICOLSON  N IH1 - K OW0 L - S AH0 N\nNICOR  N AY1 - K AO2 R\nNICORETTE  N IH1 - K ER0 - EH2 T\nNICOSIA  N IH0 - K AH0 - S IY1 - AH0\nNICOSKI  N IH0 - K AO1 S - K IY0\nNICOSON  N IH1 - K AH0 - S AH0 N\nNICOTERA  N IY2 - K OW0 - T EH1 - R AH0\nNICOTINE  N IH1 - K AH0 - T IY2 N\nNICOTINE'S  N IH1 - K AH0 - T IY2 N Z\nNICOTRA  N IH0 - K AA1 - T R AH0\nNIDA  N IY1 - D AH0\nNIDAL  N IH0 - D AA1 L\nNIDAL'S  N IH0 - D AA1 L Z\nNIDAY  N AY1 - D EY2\nNIDIFFER  N IH1 - D IH0 - F ER0\nNIE  N IY1\nNIE(2)  N AY1\nNIEBAUER  N IY1 - B AW0 - ER0\nNIEBLING  N IY1 - B AH0 L - IH0 NG\nNIEBLING(2)  N IY1 - B L IH0 NG\nNIEBUHR  N IY1 - B UH0 R\nNIEBUR  N IY1 - B ER0\nNIECE  N IY1 S\nNIECE'S  N IY1 - S IH0 Z\nNIECES  N IY1 - S IH0 Z\nNIED  N IY1 D\nNIEDBALA  N IY0 D - B AA1 - L AH0\nNIEDBALSKI  N IY0 D - B AA1 L S - K IY0\nNIEDER  N IY1 - D ER0\nNIEDERER  N IY1 - D ER0 - ER0\nNIEDERHAUSER  N IY1 - D ER0 - HH AW0 - Z ER0\nNIEDERMAN  N AY1 - D ER0 - M AH0 N\nNIEDERMEIER  N IY1 - D ER0 - M AY0 - ER0\nNIEDERMEYER  N IY1 - D ER0 - M AY0 - ER0\nNIEDZIELSKI  N IY0 - JH IY1 L - S K IY0\nNIEDZWIECKI  N IY0 JH - V IY1 T S - K IY0\nNIEHAUS  N IY1 - HH AW2 S\nNIEHAUS(2)  N AY1 - HH AW2 S\nNIEHOFF  N IY1 - HH AO0 F\nNIEKAMP  N IY1 - K AE2 M P\nNIEL  N IY1 L\nNIELAND  N IY1 - L AH0 N D\nNIELD  N IY1 L D\nNIELDS  N IY1 L D Z\nNIELS  N IY1 L Z\nNIELSEN  N IY1 L - S AH0 N\nNIELSEN'S  N IY1 L - S AH0 N Z\nNIELSON  N IY1 L - S AH0 N\nNIEMAN  N IY1 - M AH0 N\nNIEMANN  N IY1 - M AH0 N\nNIEMCZYK  N IY1 M - CH IH0 K\nNIEMEIER  N IY1 - M AY0 - ER0\nNIEMELA  N IY0 - M EH1 - L AH0\nNIEMEYER  N IY1 - M AY0 - ER0\nNIEMI  N IY1 - M IY0\nNIEMIEC  N IY1 - M IY2 K\nNIEMOELLER  N AY1 - M AO0 - L ER0\nNIEMUTH  N IY1 - M AH0 TH\nNIENABER  N IY1 - N AH0 - B ER0\nNIENHAUS  N IY1 N - HH AW2 S\nNIENHUIS  N IY1 N - HH UW0 - IH0 Z\nNIENOW  N IY1 - N OW0\nNIER  N IY1 - ER0\nNIERENBERG  N IH1 - R AH0 N - B ER0 G\nNIERMAN  N IH1 R - M AH0 N\nNIES  N AY1 Z\nNIESE  N IY1 Z\nNIESEN  N IY1 - S AH0 N\nNIESS  N IY1 S\nNIETO  N IY1 - T OW0\nNIETZSCHE  N IY1 - CH IY0\nNIEVES  N IY0 - EH1 - V EH0 S\nNIEZGODA  N IY0 Z - G OW1 - D AH0\nNIFEDIPINE  N AY2 - F EH1 - D AH0 - P IY0 N\nNIFEDIPINE(2)  N AH0 - F EH1 - D AH0 - P IY0 N\nNIFONG  N IH1 - F AO0 NG\nNIFTY  N IH1 F - T IY0\nNIGEL  N AY1 - JH AH0 L\nNIGER  N AY1 - JH ER0\nNIGERIA  N AY0 - JH IH1 - R IY0 - AH0\nNIGERIA'S  N AY0 - JH IH1 - R IY0 - AH0 Z\nNIGERIAN  N AY0 - JH IH1 - R IY0 - AH0 N\nNIGERIANS  N AY0 - JH IH1 - R IY0 - AH0 N Z\nNIGG  N IH1 G\nNIGGARDLINESS  N IH1 - G ER0 D - L IY0 - N AH0 S\nNIGGARDLY  N IH1 - G ER0 D - L IY0\nNIGGER  N IH1 - G ER0\nNIGGER'S  N IH1 - G ER0 Z\nNIGGERS  N IH1 - G ER0 Z\nNIGH  N AY1\nNIGHSWONGER  N AY1 S - W AO0 NG - ER0\nNIGHT  N AY1 T\nNIGHT'S  N AY1 T S\nNIGHTCLUB  N AY1 T - K L AH2 B\nNIGHTCLUBS  N AY1 T - K L AH2 B Z\nNIGHTENGALE  N AY1 - T IH0 NG - G AH0 L\nNIGHTER  N AY1 - T ER0\nNIGHTERS  N AY1 - T ER0 Z\nNIGHTFALL  N AY1 T - F AO2 L\nNIGHTHAWK  N AY1 T - HH AO2 K\nNIGHTHORSE  N AY1 T - HH AO0 R S\nNIGHTINGALE  N AY1 - T IH0 NG - G EY0 L\nNIGHTLIFE  N AY1 T - L AY2 F\nNIGHTLINE  N AY1 T - L AY2 N\nNIGHTLINE'S  N AY1 T - L AY2 N Z\nNIGHTLINES  N AY1 T - L AY2 N Z\nNIGHTLY  N AY1 T - L IY0\nNIGHTMARE  N AY1 T - M EH2 R\nNIGHTMARES  N AY1 T - M EH2 R Z\nNIGHTMARISH  N AY1 T - M EH2 - R IH0 SH\nNIGHTS  N AY1 T S\nNIGHTS'  N AY1 T S\nNIGHTSHADE  N AY1 - CH EY2 D\nNIGHTSHIRT  N AY1 - CH ER2 T\nNIGHTSTAGE  N AY1 T - S T EY2 JH\nNIGHTSTAND  N AY1 T - S T AE2 N D\nNIGHTSTICK  N AY1 T - S T IH2 K\nNIGHTTIME  N AY1 T - T AY2 M\nNIGHTTIMES  N AY1 T - T AY2 M Z\nNIGRELLI  N IY0 - G R EH1 - L IY0\nNIGRIS  N IH1 - G R IH0 S\nNIGRO  N IH1 - G R OW0\nNIGUEL  N IH0 - G EH1 L\nNIHART  N IH1 - HH AA0 R T\nNIHAY  N AY1 - HH EY0\nNIHAY(2)  N IY1 - HH EY0\nNIHEI  N IH0 - HH EY1\nNIHILISM  N AY1 - AH0 - L IH2 - Z AH0 M\nNIHILISTS  N AY1 - AH0 - L AH0 S T S\nNIHILISTS(2)  N AY1 - AH0 - L AH0 S S\nNIHILISTS(3)  N AY1 - AH0 - L AH0 S\nNIHISER  N IH1 - HH AY0 - Z ER0\nNIHON  N IH1 - HH AA0 N\nNIIHAU  N IY1 - HH AW0\nNIK  N IH1 K\nNIKE  N AY1 - K IY0\nNIKE'S  N AY1 - K IY0 Z\nNIKES  N AY1 K S\nNIKES(2)  N AY1 - K IY0 Z\nNIKITA  N IH2 - K IY1 - T AH0\nNIKITA(2)  N AH0 - K IY1 - T AH0\nNIKK'S  N IH1 K S\nNIKKEI  N IH0 - K EY1\nNIKKEI'S  N IY1 - K EY2 Z\nNIKKEI(2)  N IY1 - K EY2\nNIKKEI(3)  N AY1 - K IY2\nNIKKEL  N IH1 - K AH0 L\nNIKKHAH  N IH1 K - HH AA0\nNIKKI  N IH1 - K IY0\nNIKKO  N IY1 - K OW0\nNIKKO'S  N IY1 - K OW0 Z\nNIKO  N IY1 - K OW0\nNIKO'S  N IY1 - K OW0 Z\nNIKOLAI  N IH1 - K OW0 - L AY2\nNIKOLAIVICH  N IH0 - K OW0 - L AY1 - V IH0 CH\nNIKOLAUS  N IH1 - K AH0 - L AW0 Z\nNIKOLIC  N IH0 - K AA1 - L IH0 K\nNIKOLICH  N IH0 - K AA1 - L IH0 HH\nNIKON  N AY1 - K AA2 N\nNIKOU  N IY1 - K UW0\nNIKOVSKI  N IH0 - K AA1 F S - K IY0\nNIL  N IH1 L\nNILA  N IY1 - L AH0\nNILAN  N IY0 - L AA1 N\nNILAND  N AY1 - L AH0 N D\nNILE  N AY1 L\nNILES  N AY1 L Z\nNILGES  N IH1 L - JH IH0 Z\nNILL  N IH1 L\nNILLES  N AY1 L Z\nNILLY  N IH1 - L IY0\nNILS  N IH1 L Z\nNILSEN  N IH1 L - S AH0 N\nNILSON  N IH1 L - S AH0 N\nNILSSON  N IH1 L - S AH0 N\nNIMBLE  N IH1 M - B AH0 L\nNIMBLY  N IH1 M - B L IY0\nNIMBUS  N IH1 M - B AH0 S\nNIMBY  N IH1 M - B IY0\nNIMITZ  N IH1 - M IH0 T S\nNIMMER  N IH1 - M ER0\nNIMMO  N IH1 - M OW0\nNIMMONS  N IH1 - M AH0 N Z\nNIMOY  N IY1 - M OY2\nNIMROD  N IH1 M - R AA0 D\nNIMRODI  N IH0 M - R OW1 - D IY0\nNIMS  N IH1 M Z\nNIMTZ  N IH1 M T S\nNINA  N AY1 - N AH0\nNINA(2)  N IY1 - N AH0\nNINAGAWA  N IY2 - N AA0 - G AA1 - W AH0\nNINCOMPOOP  N IH1 NG - K AH0 M - P UW2 P\nNINCOMPOOPS  N IH1 NG - K AH0 M - P UW2 P S\nNINE  N AY1 N\nNINE'S  N AY1 N Z\nNINEFOLD  N IH1 N - F OW2 L D\nNINER  N AY1 - N ER0\nNINERS  N AY1 - N ER0 Z\nNINES  N AY1 N Z\nNINETEEN  N AY1 N - T IY1 N\nNINETEENTH  N AY1 N - T IY1 N TH\nNINETIES  N AY1 N - T IY0 Z\nNINETIES'  N AY1 N - T IY0 Z\nNINETIETH  N AY1 N - T IY0 - IH0 TH\nNINETTE  N IH0 - N EH1 T\nNINETY  N AY1 N - T IY0\nNINETY'S  N AY1 N - T IY0 Z\nNINEVEH  N IH1 - N AH0 - V AH0\nNING  N IH1 NG\nNINJA  N IH1 N - JH AH0\nNINJAS  N IH1 N - JH AH0 Z\nNINNEMAN  N IH1 N - M AH0 N\nNINO  N IY1 - N OW0\nNINON  N IH1 - N AH0 N\nNINSU  N IH1 N - S UW0\nNINTENDO  N IH0 N - T EH1 N - D OW0\nNINTENDO'S  N IH0 N - T EH1 N - D OW0 Z\nNINTH  N AY1 N TH\nNINTHS  N AY1 N TH S\nNIOBITE  N AY1 - OW0 - B AY2 T\nNIOBIUM  N AY2 - OW1 - B IY0 - AH0 M\nNIP  N IH1 P\nNIPON  N IH1 - P AA2 N\nNIPP  N IH1 P\nNIPPED  N IH1 P T\nNIPPER  N IH1 - P ER0\nNIPPERT  N IH1 - P ER0 T\nNIPPING  N IH1 - P IH0 NG\nNIPPLE  N IH1 - P AH0 L\nNIPPON  N IH2 - P AA1 N\nNIPPONDENSO  N IH2 - P AA2 N - D EH1 N - S OW0\nNIPPY  N IH1 - P IY0\nNIPSCO  N IH1 P - S K OW0\nNIQUETTE  N IH0 - K EH1 T\nNIR  N IH1 R\nNIRENBERG  N AY1 - R AH0 N - B ER0 G\nNIRIKO  N IH1 - R IH0 - K OW0\nNIRO  N IH1 - R OW0\nNIRVANA  N IH0 R - V AA1 - N AH0\nNIRVANA'S  N IH0 R - V AA1 - N AH0 Z\nNIRVANA'S(2)  N ER0 - V AA1 - N AH0 Z\nNIRVANA(2)  N ER0 - V AA1 - N AH0\nNISBET  N IH1 Z - B AH0 T\nNISBETT  N IH1 S - B IH0 T\nNISEI  N IH0 - S EY1\nNISHI  N IY1 - SH IY0\nNISHIDA  N IY0 - SH IY1 - D AH0\nNISHIKAWA  N IY0 - SH IY0 - K AA1 - W AH0\nNISHIMO  N IH0 - SH IY1 - M OW0\nNISHIMOTO  N IY0 - SH IY0 - M OW1 - T OW0\nNISHIMURA  N IY0 - SH IY0 - M UH1 - R AH0\nNISHIOKA  N IY2 - SH IY0 - OW1 - K AH0\nNISHIYAMA  N IY0 - SH IY0 - Y AA1 - M AH0\nNISHIZAWA  N IY2 - SH IH0 - Z AA1 - W AH0\nNISKANEN  N IH1 S - K AH0 - N AH0 N\nNISLEY  N IH1 Z - L IY0\nNISSA  N IH1 - S AH0\nNISSAN  N IY1 - S AA0 N\nNISSAN'S  N IY1 - S AA0 N Z\nNISSANS  N IY1 - S AA0 N Z\nNISSEI  N IH0 - S EY1\nNISSEN  N IH1 - S AH0 N\nNISSENBAUM  N IH1 - S AH0 N - B AW2 M\nNISSHIN  N IH1 - SH IH0 N\nNISSHO  N IH1 - SH OW0\nNISSIM  N IH1 - S IH0 M\nNISSIN  N IH1 - S IH0 N\nNISSLEY  N IH1 S - L IY0\nNIST  N IH1 S T\nNISTLER  N IH1 S T - L ER0\nNISWANDER  N IH1 S - W AO0 N - D ER0\nNISWONGER  N IH1 S - W AO0 NG - ER0\nNIT  N IH1 T\nNITA  N IY1 - T AH0\nNITE  N AY1 T\nNITHUEKAN  N IH2 TH - W AH0 - K AA1 N\nNITHUEKAN'S  N IH2 TH - W AH0 - K AA1 N Z\nNITKA  N IH1 T - K AH0\nNITPICK  N IH1 T - P IH0 K\nNITPICKING  N IH1 T - P IH2 - K IH0 NG\nNITRATE  N AY1 - T R EY2 T\nNITRATES  N AY1 - T R EY2 T S\nNITRATING  N AY1 - T R EY2 - T IH0 NG\nNITRATION  N AY0 - T R EY1 - SH AH0 N\nNITRIC  N AY1 - T R IH0 K\nNITRIDE  N AY1 - T R AY0 D\nNITRILES  N AY1 - T R AH0 L Z\nNITRO  N IH1 - T R OW0\nNITROCELLULOSE  N AY2 - T R OW0 - S EH1 L - Y AH0 - L OW2 S\nNITROGEN  N AY1 - T R AH0 - JH AH0 N\nNITROGENOUS  N AY0 - T R AA1 - JH AH0 - N AH0 S\nNITROGLYCERIN  N AY2 - T R OW0 - G L IH1 - S ER0 - AH0 N\nNITROGLYCERIN(2)  N AY2 - T R AH0 - G L IH1 - S ER0 - AH0 N\nNITROGLYCERIN(3)  N AY2 - CH R AH0 - G L IH1 - S ER0 - AH0 N\nNITROGLYCERINE  N AY2 - T R OW0 - G L IH1 - S ER0 - AH0 N\nNITROGLYCERINE(2)  N AY2 - T R AH0 - G L IH1 - S ER0 - AH0 N\nNITROGLYCERINE(3)  N AY2 - CH R AH0 - G L IH1 - S ER0 - AH0 N\nNITROSAMINES  N IH0 - T R AA2 - S AH0 - M IY1 N Z\nNITROSOMINE  N IH0 - T R AA2 - S AH0 - M IY1 N\nNITROSOMINES  N IH0 - T R AA2 - S AH0 - M IY1 N Z\nNITROUS  N IH1 - T R AH0 S\nNITSA  N IH1 T - S AH0\nNITSCH  N IH1 CH\nNITSCHE  N IH1 CH\nNITSCHKE  N IH1 CH K\nNITTA  N IH1 - T AH0\nNITTA(2)  N IY1 - T AH0\nNITTO  N IH1 - T OW0\nNITTY  N IH1 - T IY0\nNITZ  N IH1 T S\nNITZA  N IH1 T - Z AH0\nNITZA'S  N IH1 T - Z AH0 Z\nNITZBERG  N IH1 T S - B ER0 G\nNITZE  N IH1 T - S IY0\nNITZEL  N IH1 T - Z AH0 L\nNITZSCHE  N IH1 T Z SH\nNITZSCHE(2)  N IH1 T SH\nNIVEN  N AY1 - V AH0 N\nNIVENS  N AY1 - V AH0 N Z\nNIVER  N AY1 - V ER0\nNIVISON  N IH1 - V IH0 - S AH0 N\nNIX  N IH1 K S\nNIXDORF  N IH1 K S - D AO2 R F\nNIXDORF'S  N IH1 K S - D AO2 R F S\nNIXED  N IH1 K S T\nNIXES  N IH1 K - S IH0 Z\nNIXIE  N IH1 K - S IY0\nNIXON  N IH1 K - S AH0 N\nNIXON'S  N IH1 K - S AH0 N Z\nNIXONS  N IH1 K - S AH0 N Z\nNIZAR  N AY1 - Z AA0 R\nNIZHNY  N IH1 ZH - N IY0\nNIZIOLEK  N IH0 - Z IY0 - OW1 - L EH0 K\nNIZNIK  N IH1 Z - N IH0 K\nNJT  EH1 N - JH EY1 - T IY1\nNO  N OW1\nNO'S  N OW1 Z\nNOA  N OW1 - AH0\nNOAA  N OW1 - AH0\nNOAA(2)  EH1 - N OW1 - EY1 - EY1\nNOACK  N OW1 K\nNOAH  N OW1 - AH0\nNOAH'S  N OW1 - AH0 Z\nNOAKES  N OW1 K S\nNOAM  N OW1 M\nNOAMI  N OW1 - M IY0\nNOBBE  N AA1 B\nNOBEC  N OW0 - B EH1 K\nNOBEC'S  N OW0 - B EH1 K S\nNOBEL  N OW0 - B EH1 L\nNOBELIUM  N OW0 - B EH1 - L IY0 - AH0 M\nNOBILE  N AA1 - B AH0 L\nNOBILITY  N OW0 - B IH1 - L AH0 - T IY0\nNOBIS  N OW1 - B IH0 S\nNOBLE  N OW1 - B AH0 L\nNOBLE'S  N OW1 - B AH0 L Z\nNOBLEMAN  N OW1 - B AH0 L - M AH0 N\nNOBLEMAN'S  N OW1 - B AH0 L - M AH0 N Z\nNOBLES  N OW1 - B AH0 L Z\nNOBLESSE  N OW0 - B L EH1 S\nNOBLEST  N OW1 - B L IH0 S T\nNOBLET  N AA1 - B L AH0 T\nNOBLETT  N AA1 - B L IH0 T\nNOBLEWOMAN  N OW1 - B AH0 L - W UH2 - M AH0 N\nNOBLIN  N AA1 - B L IH0 N\nNOBLITT  N AA1 - B L IH0 T\nNOBLY  N AA1 - B L IY0\nNOBODIES  N OW1 - B AA2 - D IY2 Z\nNOBODIES(2)  N OW1 - B AH0 - D IY0 Z\nNOBODY  N OW1 - B AA2 - D IY2\nNOBODY'D  N OW1 - B AA2 - D IY2 D\nNOBODY'D(2)  N OW1 - B AH0 - D IY0 D\nNOBODY'S  N OW1 - B AA2 - D IY2 Z\nNOBODY'S(2)  N OW1 - B AH0 - D IY0 Z\nNOBODY(2)  N OW1 - B AH0 - D IY0\nNOBORU  N OW0 - B AO1 - R UW0\nNOBREGA  N AA1 - B R IH0 - G AH0\nNOBRIGA  N AA1 - B R IH0 - G AH0\nNOBUAKI  N OW2 - B UW0 - AA1 - K IY0\nNOBUO  N OW0 - B UW1 - OW0\nNOBUTO  N OW0 - B UW1 - T OW0\nNOBUYUKI  N OW2 - B UW0 - Y UW1 - K IY0\nNOCE  N OW1 S\nNOCELLA  N OW0 - CH EH1 - L AH0\nNOCERA  N OW0 - CH EH1 - R AH0\nNOCK  N AA1 K\nNOCKARD  N AA1 - K ER0 D\nNOCTURNAL  N AA0 K - T ER1 - N AH0 L\nNOD  N AA1 D\nNODA  N OW1 - D AH0\nNODDED  N AA1 - D AH0 D\nNODDED(2)  N AA1 - D IH0 D\nNODDING  N AA1 - D IH0 NG\nNODE  N OW1 D\nNODES  N OW1 D Z\nNODINE  N OW0 - D IY1 - N IY0\nNODS  N AA1 D Z\nNODULAR  N AA1 - JH AH0 - L ER0\nNODULE  N AA1 - JH UW0 L\nNODULES  N AA1 - JH UW0 L Z\nNOE  N OW1\nNOECKER  N OW1 - K ER0\nNOEL  N OW0 - EH1 L\nNOEL'S  N OW0 - EH1 L Z\nNOELL  N OW1 L\nNOELLE  N OW0 - EH1 L\nNOES  N OW1 Z\nNOETH  N OW1 TH\nNOFFKE  N AA1 F K\nNOFFSINGER  N AA1 F - S IH0 N - JH ER0\nNOFSINGER  N AA1 F - S IH0 N - JH ER0\nNOFTSKER  N AO1 F T - S K ER0\nNOFZIGER  N AO1 F - Z IH0 - G ER0\nNOGA  N OW1 - G AH0\nNOGALES  N OW0 - G AA1 - L EH0 S\nNOGAWA  N OW0 - G AA1 - W AH0\nNOGGLE  N AA1 - G AH0 L\nNOGLE  N OW1 - G AH0 L\nNOGUCHI  N OW0 - G UW1 - CH IY0\nNOGUEIRA  N OW0 - G EH1 - R AH0\nNOGUERA  N OW0 - G EH1 - R AH0\nNOH  N OW1\nNOHL  N OW1 L\nNOHR  N AO1 R\nNOIMAN  N OY1 - M AH0 N\nNOIR  N OY1 R\nNOIRS  N OY1 R Z\nNOISE  N OY1 Z\nNOISES  N OY1 - Z IH0 Z\nNOISIER  N OY1 - Z IY0 - ER0\nNOISIEST  N OY1 - Z IY0 - AH0 S T\nNOISILY  N OY1 - Z AH0 - L IY0\nNOISY  N OY1 - Z IY0\nNOKES  N OW1 K S\nNOKIA  N OW1 - K IY0 - AH0\nNOKIA'S  N OW1 - K IY0 - AH0 Z\nNOKYO  N OW1 - K Y OW0\nNOLA  N OW1 - L AH0\nNOLAN  N OW1 - L AH0 N\nNOLANA  N OW0 - L AE1 - N AH0\nNOLAND  N OW1 - L AH0 N D\nNOLANDA  N AH0 - L AE1 N - D AH0\nNOLASCO  N OW0 - L AA1 - S K OW0\nNOLD  N OW1 L D\nNOLDE  N OW1 L D\nNOLDEN  N OW1 L - D AH0 N\nNOLDER  N OW1 L - D ER0\nNOLE  N OW1 L\nNOLEN  N AA1 - L AH0 N\nNOLES  N OW1 L Z\nNOLET  N OW1 - L IH0 T\nNOLETA  N OW0 - L EH1 - T AH0\nNOLETTE  N OW2 - L EH1 T\nNOLF  N OW1 L F\nNOLIE  N AA1 - L IY0\nNOLIN  N OW1 - L IH0 N\nNOLITA  N OW0 - L IY1 - T AH0\nNOLL  N OW1 L\nNOLLA  N OW1 - L AH0\nNOLLAN  N AA1 - L AH0 N\nNOLLER  N OW1 - L ER0\nNOLLEY  N AA1 - L IY0\nNOLLIE  N OW1 - L IY0\nNOLLS  N OW1 L Z\nNOLO  N OW1 - L OW0\nNOLT  N OW1 L T\nNOLTE  N OW1 L T\nNOLTING  N OW1 L - T IH0 NG\nNOM  N AA1 M\nNOMAD  N OW1 - M AE2 D\nNOMAD'S  N OW1 - M AE2 D Z\nNOMADIC  N OW0 - M AE1 - D IH0 K\nNOMADS  N OW1 - M AE2 D Z\nNOME  N OW1 M\nNOME'S  N OW1 M Z\nNOMENCLATORIAL  N OW2 - M IH0 N - K L AH0 - T AO1 - R IY0 - AH0 L\nNOMENCLATURAL  N OW0 - M AH0 N - K L EY1 - CH ER0 - AH0 L\nNOMENCLATURE  N OW1 - M AH0 N - K L EY2 - CH ER0\nNOMENKLATURA  N OW0 - M EH2 NG - K L AH0 - CH UH1 - R AH0\nNOMI  N OW1 - M IY0\nNOMINAL  N AA1 - M AH0 - N AH0 L\nNOMINALLY  N AA1 - M AH0 - N AH0 - L IY0\nNOMINATE  N AA1 - M AH0 - N AH0 T\nNOMINATE(2)  N AA1 - M AH0 - N EY2 T\nNOMINATED  N AA1 - M AH0 - N EY2 - T AH0 D\nNOMINATES  N AA1 - M AH0 - N EY2 T S\nNOMINATES(2)  N AA1 - M AH0 - N AH0 T S\nNOMINATING  N AA1 - M AH0 - N EY2 - T IH0 NG\nNOMINATION  N AA2 - M AH0 - N EY1 - SH AH0 N\nNOMINATIONS  N AA2 - M AH0 - N EY1 - SH AH0 N Z\nNOMINEE  N AA2 - M AH0 - N IY1\nNOMINEE'S  N AA2 - M AH0 - N IY1 Z\nNOMINEES  N AA2 - M AH0 - N IY1 Z\nNOMO  N OW1 - M OW0\nNOMURA  N OW0 - M UH1 - R AH0\nNOMURA'S  N OW0 - M UH1 - R AH0 Z\nNOMURA'S(2)  N UW1 - M ER0 - AH0 Z\nNON  N AA1 N\nNON-CATHOLIC  N AA0 N - K AE1 TH - L IH0 K\nNON-CATHOLICS  N AA0 N - K AE1 TH - L IH0 K S\nNON-NONSENSE  N AA1 N - N AA1 N - S EH2 N S\nNON-SUPERVISORY  N AA1 N - S UW2 - P ER0 - V AY1 - Z ER0 - IY0\nNONA  N AA1 - N AH0\nNONACADEMIC  N AA0 N - AE2 - K AH0 - D EH1 - M IH0 K\nNONACCRUAL  N AA2 N - AH0 - K R UW1 - AH0 L\nNONACCRUING  N AA2 N - AH0 - K R UW1 - IH0 NG\nNONAGGRESSION  N AA2 N - AH0 - G R EH1 - SH AH0 N\nNONAGRICULTURAL  N AA2 N - AE2 - G R IH0 - K AH1 L - CH ER0 - AH0 L\nNONALCOHOLIC  N AA2 N - AE2 L - K AH0 - HH AA1 - L IH0 K\nNONALIGN  N AA1 N - AH0 - L AY2 N\nNONALIGNED  N AA1 N - AH0 - L AY2 N D\nNONAUTOMOTIVE  N AA2 N - AO2 - T OW0 - M OW1 - T IH0 V\nNONBANK  N AA1 N - B AE1 NG K\nNONBANKING  N AA1 N - B AE1 NG - K IH0 NG\nNONBELIEVER  N AA2 N - B AH0 - L IY1 - V ER0\nNONBELIEVERS  N AA2 N - B AH0 - L IY1 - V ER0 Z\nNONBINDING  N AA1 N - B AY1 N - D IH0 NG\nNONBITING  N AA0 N - B AY1 - T IH0 NG\nNONBUILDING  N AA1 N - B IH1 L - D IH0 NG\nNONBUSINESS  N AA1 N - B IH1 Z - N AH0 S\nNONCALLABLE  N AA0 N - K AO1 - L AH0 - B AH0 L\nNONCASH  N AA1 N - K AE1 SH\nNONCHALANCE  N AA1 N - SH AH0 - L AA1 N S\nNONCHALANT  N AA2 N - SH AH0 - L AA1 N T\nNONCHALANTLY  N AA1 N - SH AH0 - L AA1 N T - L IY0\nNONCOLOR  N AA0 N - K AH1 - L ER0\nNONCOMBATANT  N AA2 N - K AH0 M - B AE1 - T AH0 N T\nNONCOMBATANTS  N AA2 N - K AH0 M - B AE1 - T AH0 N T S\nNONCOMMERCIAL  N AA1 N - K AH0 - M ER1 - SH AH0 L\nNONCOMMITTAL  N AA1 N - K AH0 - M IH1 - T AH0 L\nNONCOMMUNIST  N AA1 N - K AA1 - M Y UW0 - N IH0 S T\nNONCOMPETE  N AA0 N - K AH0 M - P IY1 T\nNONCOMPETITIVE  N AA2 N - K AH0 M - P EH1 - T AH0 - T IH0 V\nNONCOMPLIANCE  N AA2 N - K AH0 M - P L AY1 - AH0 N S\nNONCONFORMIST  N AA2 N - K AH0 N - F AO1 R - M IH0 S T\nNONCONFORMISTS  N AA2 N - K AH0 N - F AO1 R - M AH0 S T S\nNONCONFORMISTS(2)  N AA2 N - K AH0 N - F AO1 R - M AH0 S S\nNONCONFORMISTS(3)  N AA2 N - K AH0 N - F AO1 R - M AH0 S\nNONCONFORMITY  N AA2 N - K AH0 N - F AO1 R - M AH0 - T IY0\nNONCONTRACT  N AA0 N - K AA1 N - T R AE2 K T\nNONCONTROVERSIAL  N AA0 N - K AA2 N - T R AH0 - V ER1 - SH AH0 L\nNONCONVERTIBLE  N AA0 N - K AH0 N - V ER1 - T AH0 - B AH0 L\nNONCORE  N AA1 N - K AO1 R\nNONCORPORATE  N AA0 N - K AO1 R - P R AH0 T\nNONCRIMINAL  N AA0 N - K R IH1 - M IH0 - N AH0 L\nNONCUMULATIVE  N AA0 N - K Y UW1 - M Y AH0 - L AH0 - T IH0 V\nNONDEDUCTIBLE  N AA0 N - D IH0 - D AH1 K - T IH0 - B AH0 L\nNONDEFENSE  N AA0 N - D IH0 - F EH1 N S\nNONDESCRIPT  N AA1 N - D IH0 - S K R IH1 P T\nNONDIRECT  N AA1 N - D ER0 - EH1 K T\nNONDISCRIMINATE  N AA0 N - D IH2 - S K R IH1 - M AH0 - N AH0 T\nNONDISCRIMINATION  N AA0 N - D IH2 - S K R IH0 - M IH0 - N EY1 - SH AH0 N\nNONDISCRIMINATORY  N AA1 N - D IH0 - S K R IH1 - M AH0 - N AH0 - T AO2 - R IY0\nNONDOLLAR  N AA1 N - D AA1 - L ER0\nNONDURABLE  N AA0 N - D UH1 - R AH0 - B AH0 L\nNONDURABLES  N AA0 N - D UH1 - R AH0 - B AH0 L Z\nNONE  N AH1 N\nNONECONOMIC  N AA2 N - EH2 - K AH0 - N AA1 - M IH0 K\nNONELECTRICAL  N AA0 N - IH0 - L EH1 K - T R IH0 - K AH0 L\nNONEMERGENCY  N AA2 - N IH0 - M ER1 - JH AH0 N - S IY0\nNONENTITY  N AA0 N - EH1 N - T AH0 - T IY0\nNONESSENTIAL  N AA2 N - IH0 - S EH1 N - CH AH0 L\nNONESUCH  N AH1 N - S AH1 CH\nNONETHELESS  N AH2 N - DH AH0 - L EH1 S\nNONEVENT  N AA1 N - IH0 - V EH1 N T\nNONEXCLUSIVE  N AA2 N - IH0 K - S K L UW1 - S IH0 V\nNONEXECUTIVE  N AA1 N - IH0 G - Z EH1 - K Y AH0 - T IH0 V\nNONEXISTENT  N AA2 N - AH0 G - Z IH1 - S T AH0 N T\nNONFARM  N AA1 N - F AA1 R M\nNONFAT  N AA1 N - F AE1 T\nNONFATAL  N AA1 N - F EY1 - T AH0 L\nNONFERROUS  N AA0 N - F EH1 - R AH0 S\nNONFICTION  N AA0 N - F IH1 K - SH AH0 N\nNONFINANCIAL  N AA0 N - F AH0 - N AE1 N - SH AH0 L\nNONFINANCIAL(2)  N AA0 N - F AY0 - N AE1 N - SH AH0 L\nNONFOOD  N AA1 N - F UW1 D\nNONGOVERNMENT  N AA0 N - G AH1 - V ER0 N - M AH0 N T\nNONGOVERNMENTAL  N AA0 N - G AH2 - V ER0 N - M EH1 N - T AH0 L\nNONGREEK  N AA2 N - G R IY1 K\nNONHUMAN  N AA0 N - HH Y UW1 - M AH0 N\nNONIE  N AA1 - N IY0\nNONINFLATIONARY  N AA2 N - IH0 N - F L EY1 - SH AH0 N - EH2 - R IY0\nNONINTEREST  N AA0 N - IH1 N - T R AH0 S T\nNONINTERFERENCE  N AA2 N - IH2 N - T ER0 - F IH1 - R AH0 N S\nNONINTERVENTION  N AA2 N - IH2 N - T ER0 - V EH1 N - CH AH0 N\nNONJET  N AA1 N - JH EH1 T\nNONJETS  N AA1 N - JH EH1 T S\nNONLETHAL  N AA0 N - L IY1 - TH AH0 L\nNONLINEAR  N AA0 N - L IH1 - N IY2 - ER0\nNONLITURGICAL  N AA0 N - L AH0 - T ER1 - JH IH0 - K AH0 L\nNONMANAGEMENT  N AA0 N - M AE1 - N IH0 JH - M AH0 N T\nNONMANUFACTURING  N AA2 N - M AE2 - N Y AH0 - F AE1 K - CH ER0 - IH0 NG\nNONMEMBER  N AA0 N - M EH1 M - B ER0\nNONMEMBERS  N AA0 N - M EH1 M - B ER0 Z\nNONMILITARY  N AA0 N - M IH1 - L AH0 - T EH2 - R IY0\nNONNATIVE  N AA1 - N EY1 - T IH0 V\nNONNEMACHER  N AA1 - N IH0 - M AH0 - K ER0\nNONNUCLEAR  N AA1 N - UW1 - K L IY2 - ER0\nNONOPERATING  N AA1 N - AO1 - P ER0 - EY2 - T IH0 NG\nNONPACIFIST  N AA2 N - P AE1 - S IH0 - F IH0 S T\nNONPACIFISTS  N AA2 N - P AE1 - S IH0 - F IH0 S T S\nNONPACIFISTS(2)  N AA2 N - P AE1 - S IH0 - F IH0 S S\nNONPACIFISTS(3)  N AA2 N - P AE1 - S IH0 - F IH0 S\nNONPARTISAN  N AA0 N - P AA1 R - T AH0 - Z AH0 N\nNONPAYING  N AA0 N - P EY1 - IH0 NG\nNONPAYMENT  N AA0 N - P EY1 - M AH0 N T\nNONPERFORMING  N AA0 N - P ER0 - F AO1 R - M IH0 NG\nNONPLANAR  N AA0 N - P L EY1 - N ER0\nNONPLUSS  N AA0 N - P L AH1 S\nNONPLUSSED  N AA0 N - P L AH1 S T\nNONPOISONOUS  N AA0 N - P OY1 - Z AH0 - N AH0 S\nNONPOLITICAL  N AA2 N - P AH0 - L IH1 - T IH0 - K AH0 L\nNONPRESCRIPTION  N AA2 N - P R AH0 - S K R IH1 P - SH AH0 N\nNONPRODUCTIVE  N AA2 N - P R AH0 - D AH1 K - T IH0 V\nNONPROFESSIONAL  N AA2 N - P R AH0 - F EH1 - SH AH0 - N AH0 L\nNONPROFESSIONALS  N AA0 N - P R AH0 - F EH1 - SH AH0 - N AH0 L Z\nNONPROFIT  N AA0 N - P R AA1 - F AH0 T\nNONPROFITS  N AA1 N - P R AA1 - F IH0 T S\nNONPROLIFERATION  N AA0 N - P R AH0 - L IH2 - F ER0 - EY1 - SH AH0 N\nNONPUBLIC  N AA0 N - P AH1 - B L IH0 K\nNONQUALIFIED  N AA0 N - K W AA1 - L AH0 - F AY2 D\nNONRACIAL  N AA0 N - R EY1 - SH AH0 L\nNONRECURRING  N AA0 N - R IH0 - K ER1 - IH0 NG\nNONREFUNDABLE  N AA0 N - R IH0 - F AH1 N - D AH0 - B AH0 L\nNONREGULATED  N AA0 N - R EH1 - G Y AH0 - L EY2 - T IH0 D\nNONRELIGIOUS  N AA2 N - R IH0 - L IH1 - JH AH0 S\nNONRENEWABLE  N AA0 N - R IY0 - N UW1 - AH0 - B AH0 L\nNONRESIDENT  N AA0 N - R EH1 - Z AH0 - D AH0 N T\nNONRESIDENTIAL  N AA2 N - R EH2 - Z AH0 - D EH1 N - SH AH0 L\nNONRESIDENTIAL(2)  N AA2 N - R EH2 - Z AH0 - D EH1 N - CH AH0 L\nNONRESIDENTS  N AA0 N - R EH1 - Z AH0 - D AH0 N T S\nNONRESPONSIVE  N AA0 N - R IH0 - S P AA1 N - S IH0 V\nNONROMAN  N AA0 N - R OW1 - M AH0 N\nNONRULING  N AA0 N - R UW1 - L IH0 NG\nNONSECTARIAN  N AA2 N - S EH0 K - T EH1 - R IY0 - AH0 N\nNONSENSE  N AA1 N - S EH0 N S\nNONSENSICAL  N AA0 N - S EH1 N - S IH0 - K AH0 L\nNONSMOKER  N AA0 N - S M OW1 - K ER0\nNONSMOKERS  N AA0 N - S M OW1 - K ER0 Z\nNONSMOKERS'  N AA1 N - S M OW1 - K ER0 Z\nNONSMOKING  N AA1 N - S M OW1 - K IH0 NG\nNONSPECIFIC  N AA2 N - S P AH0 - S IH1 - F IH0 K\nNONSPORTING  N AA0 N - S P AO1 R - T IH0 NG\nNONSTANDARD  N AA0 N - S T AE1 N - D ER0 D\nNONSTARTER  N AA0 N - S T AA1 R - T ER0\nNONSTICK  N AA0 N - S T IH1 K\nNONSTOP  N AA2 N - S T AA1 P\nNONSTOPS  N AA2 N - S T AA1 P S\nNONSTRATEGIC  N AA0 N - S T R AH0 - T IY1 - JH IH0 K\nNONSURGICAL  N AA0 N - S ER1 - JH IH0 - K AH0 L\nNONTAXABLE  N AA0 N - T AE1 K - S AH0 - B AH0 L\nNONTECHNICAL  N AA0 N - T EH1 K - N IH0 - K AH0 L\nNONTOXIC  N AA0 N - T AA1 K - S IH0 K\nNONTRADITIONAL  N AA2 N - T R AH0 - D IH1 - SH AH0 - N AH0 L\nNONTRANSFERABLE  N AA2 N - T R AE2 N S - F ER1 - AH0 - B AH0 L\nNONTURBO  N AO0 N - T ER1 - B OW0\nNONTURBOS  N AO0 N - T ER1 - B OW0 Z\nNONUNION  N AA0 N - Y UW1 - N Y AH0 N\nNONUNIONIZED  N AA0 N - Y UW1 - N Y AH0 - N AY2 Z D\nNONUTILITY  N AA2 N - Y UW0 - T IH1 - L IH0 - T IY0\nNONVERBAL  N AA0 N - V ER1 - B AH0 L\nNONVIOLENCE  N AA0 N - V AY1 - AH0 - L AH0 N S\nNONVIOLENT  N AA0 N - V AY1 - AH0 - L AH0 N T\nNONVOLATILE  N AA0 N - V AA1 - L AH0 - T AH0 L\nNONVOTING  N AA0 N - V OW1 - T IH0 NG\nNONWHITE  N AA1 N - W AY1 T\nNONWHITE(2)  N AA1 N HH - W AY1 T\nNONWHITES  N AA1 N - W AY1 T S\nNONWHITES(2)  N AA1 N HH - W AY1 T S\nNONWOVEN  N AA1 N - W OW1 - V IH0 N\nNONWOVENS  N AA1 N - W OW1 - V AH0 N Z\nNOODLE  N UW1 - D AH0 L\nNOODLES  N UW1 - D AH0 L Z\nNOOK  N UH1 K\nNOOKS  N UH1 K S\nNOON  N UW1 N\nNOONAN  N UW1 - N AH0 N\nNOONE  N UW1 N\nNOONEY  N UW1 - N IY0\nNOONS  N UW1 N Z\nNOONTIME  N UW1 N - T AY2 M\nNOORDA  N UH1 R - D AH0\nNOOSE  N UW1 S\nNOPE  N OW1 P\nNOR  N AO1 R\nNORA  N AO1 - R AH0\nNORA'S  N AO1 - R AH0 Z\nNORAH  N AO1 - R AH0\nNORAMCO  N AO0 - R AE1 M - K OW0\nNORANDA  N AO0 - R AE1 N - D AH0\nNORANDA'S  N AO0 - R AE1 N - D AH0 Z\nNORBECK  N AO1 R - B EH0 K\nNORBERG  N AO1 R - B ER0 G\nNORBERT  N AO1 R - B ER0 T\nNORBERTA  N AO0 R - B EH1 R - T AH0\nNORBERTO  N AO0 R - B ER1 - T OW2\nNORBURY  N AO1 R - B EH0 - R IY0\nNORBY  N AO1 R - B IY0\nNORCEN  N AO1 R - S AH0 N\nNORCEN'S  N AO1 R - S AH0 N Z\nNORCIA  N AO1 R - CH AH0\nNORCO  N AO1 R - K OW0\nNORCROSS  N AO1 R - K R AO0 S\nNORD  N AO1 R D\nNORDAHL  N AO1 R - D AA0 L\nNORDAN  N AO1 R - D AH0 N\nNORDBANKEN  N AO1 R D - B AE2 NG - K AH0 N\nNORDBERG  N AO1 R D - B ER0 G\nNORDBY  N AO1 R D - B IY0\nNORDEEN  N ER0 - D IY1 N\nNORDELL  N AO1 R - D AH0 L\nNORDEN  N AO1 R - D AH0 N\nNORDER  N AO1 R - D ER0\nNORDGREN  N AO1 R D - G R EH0 N\nNORDIC  N AO1 R - D IH0 K\nNORDICA  N AO1 R - D IH0 - K AH0\nNORDICTRACK  N AO1 R - D IH0 K - T R AE2 K\nNORDIN  N AO1 R - D IH0 N\nNORDINE  N AO0 R - D IY1 - N IY0\nNORDIO  N AO1 R - D IY0 - OW0\nNORDISK  N AO1 R - D IH2 S K\nNORDLING  N AO1 R - D AH0 L - IH0 NG\nNORDLING(2)  N AO1 R D - L IH0 NG\nNORDLUND  N AO1 R D - L AH0 N D\nNORDMAN  N AO1 R D - M AH0 N\nNORDMANN  N AO1 R D - M AH0 N\nNORDMEYER  N AO1 R D - M AY0 - ER0\nNORDQUIST  N AO1 R D - K W IH0 S T\nNORDSON  N AO1 R D - S AH0 N\nNORDSTROM  N AO1 R D - S T R AH0 M\nNORDSTROM'S  N AO1 R D - S T R AH0 M Z\nNORDSTROMS  N AO1 R D - S T R AH0 M Z\nNORDYKE  N AO1 R - D AY2 K\nNORECO  N AO0 - R EH1 - K OW0\nNORED  N AO1 R D\nNOREEN  N ER0 - IY1 N\nNOREIGA  N AO0 - R EY1 - G AH0\nNORELCO  N ER0 - EH1 L - K OW0\nNORELL  N AO1 - R AH0 L\nNOREM  N AO1 - R IH0 M\nNOREN  N AO1 - R AH0 N\nNORENBERG  N AO1 - R AH0 N - B ER0 G\nNORENCO  N AO1 - R AH0 N - K OW0\nNORENKO  N AH0 - R EH1 N - K OW0\nNOREX  N AO1 - R AH0 K S\nNORFLEET  N AO1 R F - L IY2 T\nNORFOLK  N AO1 R - F AH0 K\nNORFOLK'S  N AO1 R - F AH0 K S\nNORGAARD  N AO1 R - G AA0 R D\nNORGARD  N AO1 R - G ER0 D\nNORGE  N AO1 R JH\nNORGREN  N AO1 R - G R AH0 N\nNORICK  N AO1 - R IH0 K\nNORIEGA  N AO2 - R IY0 - EY1 - G AH0\nNORIEGA'S  N AO2 - R IY0 - EY1 - G AH0 Z\nNORIEGAS  N AO2 - R IY0 - EY1 - G AH0 S\nNORILSK  N AO2 - R IH1 L S K\nNORIMATSU  N AO2 - R IY0 - M AA1 T - S UW0\nNORINCHUKIN  N AO2 - R IH0 N - CH UW1 - K IH0 N\nNORINKO  N AO2 - R IH1 NG - K OW0\nNORK  N AO1 R K\nNORKUS  N AO1 R - K IH0 S\nNORLAND  N AO1 R - L AH0 N D\nNORLANDER  N AO1 R - L AH0 N - D ER0\nNORLIN  N AO1 R - L IH0 N\nNORLING  N AO1 R - L IH0 NG\nNORM  N AO1 R M\nNORMA  N AO1 R - M AH0\nNORMAL  N AO1 R - M AH0 L\nNORMALCY  N AO1 R - M AH0 L - S IY0\nNORMALITY  N AO2 R - M AE1 - L AH0 - T IY0\nNORMALIZATION  N AO2 R - M AH0 - L IH0 - Z EY1 - SH AH0 N\nNORMALIZE  N AO1 R - M AH0 - L AY2 Z\nNORMALIZED  N AO1 R - M AH0 - L AY2 Z D\nNORMALIZING  N AO1 R - M AH0 - L AY2 - Z IH0 NG\nNORMALLY  N AO1 R - M AH0 - L IY0\nNORMALLY(2)  N AO1 R M - L IY0\nNORMAN  N AO1 R - M AH0 N\nNORMAN'S  N AO1 R - M AH0 N Z\nNORMAND  N AO1 R - M AH0 N D\nNORMANDIE  N AO1 R - M AH0 N - D IY0\nNORMANDIN  N AO1 R - M AH0 N - D IH0 N\nNORMANDY  N AO1 R - M AH0 N - D IY0\nNORMATIVE  N AO1 R - M AH0 - T IH0 V\nNORMENT  N AO1 R - M AH0 N T\nNORMICK  N AO1 R - M IH0 K\nNORMIE  N AO1 R - M IY0\nNORMILE  N AO1 R - M AY0 L\nNORMING  N AO1 R - M IH0 NG\nNORMINGTON  N AO1 R - M IH0 NG - T AH0 N\nNORMOYLE  N AO1 R - M OY0 L\nNORMS  N AO1 R M Z\nNORMY  N AO1 R - M IY0\nNORNA  N AO1 R - N AH0\nNORODOM  N AO1 - R OW0 - D AH2 M\nNORODOM(2)  N AO1 - R AH0 - D AH2 M\nNORPLANT  N AO1 R - P L AE2 N T\nNORPLANT'S  N AO1 R - P L AE2 N T S\nNORQUIST  N AO1 R - K W IH0 S T\nNORRED  N AO1 R D\nNORRELL  N AO1 - R AH0 L\nNORRIE  N AO1 - R IY0\nNORRINGTON  N AO1 - R IH0 NG - T AH0 N\nNORRIS  N AO1 - R IH0 S\nNORRIS'S  N AO1 - R AH0 - S IH0 Z\nNORROD  N AO1 - R AH0 D\nNORRY  N AO1 - R IY0\nNORSE  N AO1 R S\nNORSEMEN  N AO1 R S - M IH0 N\nNORSK  N AO1 R S K\nNORSKE  N AO1 R S - K IY0\nNORSTAN  N AO1 R - S T AH0 N\nNORSTAR  N AO1 R - S T AA2 R\nNORSTROM  N AO1 R S - T R AH0 M\nNORSWORTHY  N AO1 R S - W ER0 - DH IY0\nNORTE  N AO1 R T\nNORTEK  N AO1 R - T EH2 K\nNORTEL  N AO1 R - T EH0 L\nNORTH  N AO1 R TH\nNORTH'S  N AO1 R TH S\nNORTHAM  N AO1 R - TH AH0 M\nNORTHAMPTON  N AO2 R - TH AE1 M P - T AH0 N\nNORTHBOUND  N AO1 R TH - B AW0 N D\nNORTHBROOK  N AO1 R TH - B R UH2 K\nNORTHCLIFF  N AO1 R TH - K L IH0 F\nNORTHCOTT  N AO1 R TH - K AH0 T\nNORTHCRAFT  N AO1 R TH - K R AE2 F T\nNORTHCUTT  N AO1 R TH - K AH0 T\nNORTHEAST  N AO2 R TH - IY1 S T\nNORTHEAST'S  N AO2 R TH - IY1 S T S\nNORTHEASTERLY  N AO2 R TH - IY1 - S T ER0 - L IY0\nNORTHEASTERN  N AO2 R TH - IY1 - S T ER0 N\nNORTHEASTERNER  N AO0 R TH - IY1 - S T ER0 - N ER0\nNORTHEASTERNERS  N AO0 R TH - IY1 S - T ER0 - N ER0 Z\nNORTHEASTWARD  N AO2 R TH - IY1 S T - W ER0 D\nNORTHER  N AO1 R - DH ER0\nNORTHERLY  N AO1 R - DH ER0 - L IY0\nNORTHERN  N AO1 R - DH ER0 N\nNORTHERN'S  N AO1 R - DH ER0 N Z\nNORTHERNER  N AO1 R - DH ER0 - N ER0\nNORTHERNERS  N AO1 R - DH ER0 - N ER0 Z\nNORTHERNMOST  N AO1 R - DH ER0 N - M OW2 S T\nNORTHEY  N AO1 R - DH IY0\nNORTHFIELD  N AO1 R TH - F IY2 L D\nNORTHGATE  N AO1 R TH - G EY2 T\nNORTHINGTON  N AO1 R - TH IH0 NG - T AH0 N\nNORTHLAND  N AO1 R TH - L AE2 N D\nNORTHRIDGE  N AO1 R - TH R IH2 JH\nNORTHROP  N AO1 R - TH R AH0 P\nNORTHROP'S  N AO1 R - TH R AH0 P S\nNORTHRUP  N AO1 R - TH R AH0 P\nNORTHRUP'S  N AO1 R - TH R AH0 P S\nNORTHSTAR  N AO1 R TH - S T AA2 R\nNORTHUP  N AO1 R TH - AH2 P\nNORTHVALE  N AO1 R TH - V EY2 L\nNORTHVIEW  N AO1 R TH - V Y UW2\nNORTHWARD  N AO1 R TH - W ER0 D\nNORTHWAY  N AO1 R TH - W EY2\nNORTHWEST  N AO2 R TH - W EH1 S T\nNORTHWEST'S  N AO2 R TH - W EH1 S T S\nNORTHWESTERLY  N AO2 R TH - W EH1 - S T ER0 - L IY0\nNORTHWESTERN  N AO2 R TH - W EH1 - S T ER0 N\nNORTHWESTERN'S  N AO2 R TH - W EH1 - S T ER0 N Z\nNORTHWOOD  N AO1 R TH - W UH2 D\nNORTON  N AO1 R - T AH0 N\nNORTON'S  N AO1 R - T AH0 N Z\nNORVEL  N AO1 R - V AH0 L\nNORVELL  N AO1 R - V AH0 L\nNORVIL  N AO1 R - V AH0 L\nNORVILLE  N AO1 R - V IH0 L\nNORVIN  N AO1 R - V IH0 N\nNORWALK  N AO1 R - W AO2 K\nNORWARD  N AO1 R - W ER0 D\nNORWAY  N AO1 R - W EY2\nNORWAY'S  N AO1 R - W EY2 Z\nNORWEB  N AO1 R - W EH2 B\nNORWEGIAN  N AO2 R - W IY1 - JH AH0 N\nNORWEGIANS  N AO0 R - W IY1 - JH AH0 N Z\nNORWELL  N AO1 R - W EH0 L\nNORWEST  N AO2 R - W EH1 S T\nNORWEST'S  N AO2 R - W EH1 S T S\nNORWICH  N AO1 R - W IH0 CH\nNORWIN  N AO1 R - W IH0 N\nNORWITZ  N AO1 R - W IH0 T S\nNORWOOD  N AO1 R - W UH0 D\nNORWYN  N AO1 R - W IH0 N\nNOSAIR  N OW1 - Z EY0 R\nNOSAIR'S  N OW1 - Z EY0 R Z\nNOSAIR'S(2)  N OW1 - S EY0 R Z\nNOSAIR(2)  N OW1 - S EY0 R\nNOSAL  N OW1 - Z AH0 L\nNOSE  N OW1 Z\nNOSEBLEED  N OW1 Z - B L IY2 D\nNOSED  N OW1 Z D\nNOSEDIVE  N OW1 Z - D AY2 V\nNOSEDIVED  N OW1 Z - D AY2 V D\nNOSEK  N OW1 - S EH0 K\nNOSES  N OW1 - Z IH0 Z\nNOSEWORTHY  N OW1 Z - W ER2 - DH IY0\nNOSINESS  N OW1 - Z IY0 - N AH0 S\nNOSING  N OW1 - Z IH0 NG\nNOSKA  N OW1 - S K AH0\nNOSS  N AO1 S\nNOSTALGIA  N AO0 - S T AE1 L - JH AH0\nNOSTALGIC  N AO0 - S T AE1 L - JH IH0 K\nNOSTRA  N AO1 - S T R AH0\nNOSTRADAMUS  N AO2 - S T R AH0 - D AE1 - M AH0 S\nNOSTRAND  N AA1 S - T R AH0 N D\nNOSTRIL  N AA1 S - T R IH0 L\nNOSTRILS  N AA1 S - T R AH0 L Z\nNOSTRUMS  N AA1 S - T R AH0 M Z\nNOSY  N OW1 - Z IY0\nNOT  N AA1 T\nNOTABLE  N OW1 - T AH0 - B AH0 L\nNOTABLES  N OW1 - T AH0 - B AH0 L Z\nNOTABLY  N OW1 - T AH0 - B L IY0\nNOTARIANNI  N OW0 - T AA0 - R IY0 - AA1 - N IY0\nNOTARO  N OW0 - T AA1 - R OW0\nNOTARY  N OW1 - T ER0 - IY0\nNOTATION  N OW0 - T EY1 - SH AH0 N\nNOTATIONS  N OW0 - T EY1 - SH AH0 N Z\nNOTCH  N AA1 CH\nNOTCHED  N AA1 CH T\nNOTCHES  N AA1 - CH AH0 Z\nNOTCHES(2)  N AA1 - CH IH0 Z\nNOTE  N OW1 T\nNOTE'S  N OW1 T S\nNOTEBAERT  N OW1 - T AH0 - B EH2 R T\nNOTEBOOK  N OW1 T - B UH2 K\nNOTEBOOKS  N OW1 T - B UH2 K S\nNOTEBOOM  N AA1 - T IH0 - B UW0 M\nNOTEBOOM(2)  N UW1 - T IH0 - B UW0 M\nNOTED  N OW1 - T AH0 D\nNOTED(2)  N OW1 - T IH0 D\nNOTEHOLDER  N OW1 T - HH OW2 L - D ER0\nNOTEHOLDERS  N OW1 T - HH OW2 L - D ER0 Z\nNOTES  N OW1 T S\nNOTES'  N OW1 T S\nNOTESTINE  N OW0 - T EH0 - S T IY1 - N IY0\nNOTEWARE  N OW1 T - W EH2 R\nNOTEWORTHY  N OW1 T - W ER2 - DH IY0\nNOTH  N AA1 TH\nNOTHDURFT  N AA1 TH - D ER0 F T\nNOTHER  N AH1 - DH ER0\nNOTHIN  N AA1 - TH IH0 N\nNOTHIN'  N AH1 - TH IH0 N\nNOTHING  N AH1 - TH IH0 NG\nNOTHING'S  N AH1 - TH IH0 NG Z\nNOTHINGNESS  N AH1 - TH IH0 NG - N AH0 S\nNOTHINGS  N AH1 - TH IH0 NG Z\nNOTHNAGEL  N AA1 TH - N AH0 - G AH0 L\nNOTHSTEIN  N AA1 TH - S T IY2 N\nNOTHSTEIN(2)  N AA1 TH - S T AY2 N\nNOTICE  N OW1 - T AH0 S\nNOTICE(2)  N OW1 - T IH0 S\nNOTICEABLE  N OW1 - T AH0 - S AH0 - B AH0 L\nNOTICEABLY  N OW1 - T IH0 - S AH0 - B L IY0\nNOTICED  N OW1 - T AH0 S T\nNOTICES  N OW1 - T AH0 - S AH0 Z\nNOTICES(2)  N OW1 - T IH0 - S IH0 Z\nNOTICING  N OW1 - T IH0 - S IH0 NG\nNOTIFICATION  N OW2 - T AH0 - F AH0 - K EY1 - SH AH0 N\nNOTIFICATIONS  N OW2 - T AH0 - F AH0 - K EY1 - SH AH0 N Z\nNOTIFIED  N OW1 - T AH0 - F AY2 D\nNOTIFIES  N OW1 - T AH0 - F AY2 Z\nNOTIFY  N OW1 - T AH0 - F AY2\nNOTIFYING  N OW1 - T AH0 - F AY2 - IH0 NG\nNOTING  N OW1 - T IH0 NG\nNOTION  N OW1 - SH AH0 N\nNOTIONS  N OW1 - SH AH0 N Z\nNOTIS  N OW1 - T IH0 S\nNOTO  N OW1 - T OW0\nNOTOCHORD  N OW1 - T AH0 - K AO2 R D\nNOTORIETY  N OW2 - T ER0 - AY1 - AH0 - T IY0\nNOTORIOUS  N OW0 - T AO1 - R IY0 - AH0 S\nNOTORIOUSLY  N OW0 - T AO1 - R IY0 - AH0 S - L IY0\nNOTRE  N OW1 - T R AH0\nNOTRE(2)  N OW1 - T ER0\nNOTS  N AA1 T S\nNOTT  N AA1 T\nNOTTAGE  N AA1 - T IH0 JH\nNOTTE  N AA1 T\nNOTTER  N AA1 - T ER0\nNOTTINGHAM  N AA1 - T IH0 NG - HH AE2 M\nNOTWITHSTANDING  N AA2 T - W IH0 TH - S T AE1 N - D IH0 NG\nNOTZ  N AA1 T S\nNOUN  N AW1 N\nNOURISH  N ER1 - IH0 SH\nNOURISHED  N ER1 - IH0 SH T\nNOURISHING  N ER1 - IH0 - SH IH0 NG\nNOURISHMENT  N ER1 - IH0 SH - M AH0 N T\nNOURSE  N AO1 R S\nNOUVEAU  N UW2 - V OW1\nNOUVEL  N UW1 - V AH0 L\nNOUVELLE  N UW2 - V EH1 L\nNOV  N OW0 - V EH1 M - B ER0\nNOV(2)  N OW1 V\nNOVA  N OW1 - V AH0\nNOVA'S  N OW1 - V AH0 Z\nNOVACARE  N OW1 - V AH0 - K EH2 R\nNOVACEK  N AA1 - V AH0 - CH EH0 K\nNOVACK  N AA1 - V AH0 K\nNOVACOR  N OW1 - V AH0 - K AO2 R\nNOVAK  N OW1 - V AE0 K\nNOVAK'S  N OW1 - V AE0 K S\nNOVAKOVICH  N AH0 - V AA1 - K AH0 - V IH0 CH\nNOVAKOWSKI  N AH0 - V AH0 - K AO1 F S - K IY0\nNOVAMETRIX  N OW0 - V AE1 - M AH0 - T R IH0 K S\nNOVAS  N OW1 - V AH0 Z\nNOVATO  N OW0 - V AA1 - T OW0\nNOVEL  N AA1 - V AH0 L\nNOVEL'S  N AA1 - V AH0 L Z\nNOVELIST  N AA1 - V AH0 - L AH0 S T\nNOVELISTIC  N AA2 - V AH0 - L IH1 - S T IH0 K\nNOVELISTS  N AA1 - V AH0 - L AH0 S T S\nNOVELISTS(2)  N AA1 - V AH0 - L AH0 S S\nNOVELISTS(3)  N AA1 - V AH0 - L AH0 S\nNOVELL  N OW0 - V EH1 L\nNOVELL'S  N OW0 - V EH1 L Z\nNOVELLA  N OW0 - V EH1 - L AH0\nNOVELLI  N OW0 - V EH1 - L IY0\nNOVELLO  N OW0 - V EH1 - L OW0\nNOVELLUS  N OW0 - V EH1 - L AH0 S\nNOVELLY  N OW1 - V AH0 - L IY0\nNOVELS  N AA1 - V AH0 L Z\nNOVELTIES  N AA1 - V AH0 L - T IY0 Z\nNOVELTY  N AA1 - V AH0 L - T IY0\nNOVEMBER  N OW0 - V EH1 M - B ER0\nNOVEMBER'S  N OW0 - V EH1 M - B ER0 Z\nNOVERCO  N OW0 - V ER1 - K OW0\nNOVEY  N OW1 - V IY0\nNOVGOROD  N AA1 V - G ER0 - AA2 D\nNOVI  N OW1 - V IY0\nNOVI(2)  N OW1 - V AY0\nNOVIA  N OW1 - V IY0 - AH0\nNOVICE  N AA1 - V AH0 S\nNOVICES  N AA1 - V AH0 - S IH0 Z\nNOVICK  N OW1 - V IH0 K\nNOVICK(2)  N AA1 - V IH0 K\nNOVICKI  N AH0 - V IH1 T S - K IY0\nNOVINGER  N OW1 - V IH0 - NG ER0\nNOVITSKI  N AH0 - V IH1 T S - K IY0\nNOVITSKY  N AH0 - V IH1 T S - K IY0\nNOVO  N OW1 - V OW0\nNOVO'S  N OW1 - V OW0 Z\nNOVOA  N OW0 - V OW1 - AH0\nNOVOGROD  N OW1 - V OW0 - G R AE2 D\nNOVOPHARM  N OW1 - V OW0 - F AA2 R M\nNOVOSAD  N AA1 - V AH0 - S AE0 D\nNOVOSEL  N AA1 - V AH0 - S EH0 L\nNOVOSIBIRSK  N OW0 - V AH0 - S IH0 - B ER1 S K\nNOVOSTI  N OW0 - V AO1 - S T IY0\nNOVOTNEY  N AA1 - V AH0 T - N IY0\nNOVOTNY  N AH0 - V OW1 T - N IY0\nNOVUM  N OW1 - V AH0 M\nNOVY  N OW1 - V IY0\nNOW  N AW1\nNOW'S  N AW1 Z\nNOWA  N AW1 - AH0\nNOWACK  N AW1 - AH0 K\nNOWACKI  N AW0 - AA1 T S - K IY0\nNOWACZYK  N AW1 - AH0 - CH IH2 K\nNOWADAY  N AW1 - AH0 - D EY2\nNOWADAYS  N AW1 - AH0 - D EY2 Z\nNOWAK  N OW1 - V AE0 K\nNOWAKOWSKI  N AW0 - AH0 - K AO1 F S - K IY0\nNOWELL  N OW1 - AH0 L\nNOWELS  N AW1 - AH0 L Z\nNOWHERE  N OW1 - W EH2 R\nNOWHERE(2)  N OW1 HH - W EH2 R\nNOWICKI  N AW0 - IH1 T S - K IY0\nNOWINSKI  N AW0 - IH1 N - S K IY0\nNOWLAN  N AW1 - L AH0 N\nNOWLAND  N AW1 - L AH0 N D\nNOWLIN  N AW1 - L IH0 N\nNOWLING  N AW1 - L IH0 NG\nNOWOTNY  N AW0 - OW1 T - N IY0\nNOXELL  N AA0 K - S EH1 L\nNOXEMA  N AA0 K - S IY1 - M AH0\nNOXIOUS  N AA1 K - SH AH0 S\nNOXON  N AA1 K - S AH0 N\nNOXSO  N AA1 K - S OW0\nNOYCE  N OY1 S\nNOYD  N OY1 D\nNOYES  N OY1 Z\nNOYOLA  N OY2 - OW1 - L AH0\nNOZZLE  N AA1 - Z AH0 L\nNOZZLES  N AA1 - Z AH0 L Z\nNPR  EH1 N - P IY1 - AA1 R\nNPR'S  EH1 N - P IY1 - AA1 R Z\nNPR.ORG  EH1 N - P IY1 - AA1 R - D AA1 - T AO1 R G\nNTH  EH1 N TH\nNU  N UW1\nNUALA  N UW0 - AA1 - L AH0\nNUANCE  N UW1 - AA0 N S\nNUANCED  N UW1 - AA0 N S T\nNUANCES  N UW1 - AA0 N - S IH0 Z\nNUB  N AH1 B\nNUBER  N UW1 - B ER0\nNUBIAN  N Y UW1 - B IY0 - AH0 N\nNUCCI  N UW1 - CH IY0\nNUCCIO  N UW1 - CH IY0 - OW0\nNUCKLES  N AH1 - K AH0 L Z\nNUCKOLLS  N AH1 - K AH0 L Z\nNUCKOLS  N AH1 - K AH0 L Z\nNUCLEAR  N UW1 K - L IY0 - ER0\nNUCLEATION  N UW2 K - L IY0 - EY1 - SH AH0 N\nNUCLEI  N UW1 - K L IY0 - AY2\nNUCLEIC  N UW0 - K L EY1 - IH0 K\nNUCLEONIC  N UW2 - K L IY0 - AA1 - N IH0 K\nNUCLEONICS  N UW2 - K L IY0 - AA1 - N IH0 K S\nNUCLEOTIDE  N UW1 - K L IY0 - AH0 - T AY2 D\nNUCLEUS  N UW1 - K L IY0 - AH0 S\nNUCOR  N UW1 - K AO2 R\nNUCOR'S  N UW1 - K AO2 R Z\nNUCORP  N UW1 - K AO2 R P\nNUDD  N AH1 D\nNUDE  N UW1 D\nNUDELMAN  N AH1 - D AH0 L - M AH0 N\nNUDES  N UW1 D Z\nNUDGE  N AH1 JH\nNUDGED  N AH1 JH D\nNUDGES  N AH1 - JH IH0 Z\nNUDGING  N AH1 - JH IH0 NG\nNUDIST  N UW1 - D IH0 S T\nNUDITY  N UW1 - D IH0 - T IY0\nNUDO  N UW1 - D OW0\nNUEVO  N W EY1 - V OW0\nNUEXCO  N W EY1 K - S K OW0\nNUEYUNG  N UW2 - Y AH1 NG\nNUFER  N UW1 - F ER0\nNUFFER  N AH1 - F ER0\nNUGAN  N UW1 - G AH0 N\nNUGENT  N UW1 - JH AH0 N T\nNUGETT  N UW1 - JH AH0 T\nNUGGET  N AH1 - G IH0 T\nNUGGET'S  N AH1 - G IH0 T S\nNUGGETS  N AH1 - G AH0 T S\nNUHFER  N UW1 - F ER0\nNUHN  N AH1 N\nNUISANCE  N UW1 - S AH0 N S\nNUJOMA  N UW0 - JH OW1 - M AH0\nNUKE  N UW1 K\nNUKEM  N UW1 - K AH0 M\nNUKES  N UW1 K S\nNULAND  N UW1 - L AE2 N D\nNULAND(2)  N UW1 - L AH0 N D\nNULL  N AH1 L\nNULLIFICATION  N AH2 - L AH0 - F AH0 - K EY1 - SH AH0 N\nNULLIFIED  N AH1 - L AH0 - F AY2 D\nNULLIFIES  N AH1 - L AH0 - F AY2 Z\nNULLIFY  N AH1 - L AH0 - F AY2\nNULLIFYING  N AH1 - L AH0 - F AY2 - IH0 NG\nNULPH  N AH1 L F\nNULTON  N AH1 L - T AH0 N\nNULTY  N AH1 L - T IY0\nNUMAC  N UW1 - M AE0 K\nNUMB  N AH1 M\nNUMBED  N AH1 M D\nNUMBER  N AH1 M - B ER0\nNUMBER'S  N AH1 M - B ER0 Z\nNUMBERED  N AH1 M - B ER0 D\nNUMBERING  N AH1 M - B ER0 - IH0 NG\nNUMBERS  N AH1 M - B ER0 Z\nNUMBING  N AH1 - M IH0 NG\nNUMBINGLY  N AH1 - M IH0 NG - L IY0\nNUMBNESS  N AH1 M - N AH0 S\nNUMED  N UW0 - M EH1 D\nNUMEIRI  N UW0 - M EY1 - R IY0\nNUMERAL  N UW1 - M ER0 - AH0 L\nNUMERALS  N UW1 - M ER0 - AH0 L Z\nNUMERIC  N UW0 - M EH1 - R IH0 K\nNUMERICA  N UW0 - M EH1 - R IH0 - K AH0\nNUMERICAL  N UW0 - M EH1 - R AH0 - K AH0 L\nNUMERICAL(2)  N UW0 - M EH1 - R IH0 - K AH0 L\nNUMERICALLY  N UW0 - M EH1 - R IH0 K - L IY0\nNUMEROLOGY  N UW0 - M ER0 - AA1 - L AH0 - JH IY0\nNUMEROUS  N UW1 - M ER0 - AH0 S\nNUMIA  N UW1 - M Y AH0\nNUMIDIA  N UW0 - M IH1 - D IY0 - AH0\nNUMISMATIC  N UW2 - M IH0 S - M AE1 - T IH0 K\nNUMISMATICS  N UW2 - M IH0 S - M AE1 - T IH0 K S\nNUMISMATISTS  N UW0 - M IH1 S - M AH0 - T IH2 S T S\nNUMISMATISTS(2)  N UW0 - M IH1 S - M AH0 - T IH2 S S\nNUMISMATISTS(3)  N UW0 - M IH1 S - M AH0 - T IH2 S\nNUMMI  N UW1 - M IY0\nNUN  N AH1 N\nNUN'S  N AH1 N Z\nNUNAMAKER  N UW0 - N AA1 - M EY0 - K ER0\nNUNAN  N UW1 - N AA0 N\nNUNCIO  N AH1 N - S IY0 - OW0\nNUNEMAKER  N UW1 N - M EY2 - K ER0\nNUNES  N UW1 N Z\nNUNEZ  N UW1 - N EH0 Z\nNUNGESSER  N AH1 NG - G IH0 - S ER0\nNUNLEY  N AH1 N - L IY0\nNUNN  N AH1 N\nNUNN'S  N AH1 N Z\nNUNNALLY  N AH1 N - AH0 - L IY0\nNUNNELLEY  N AH1 - N IH0 - L IY0\nNUNNELLY  N AH1 N - AH0 - L IY0\nNUNNERY  N AH1 - N ER0 - IY0\nNUNO  N UW1 - N OW0\nNUNS  N AH1 N Z\nNUNS'  N AH1 N Z\nNUNSENSE  N AH1 N - S EH2 N S\nNUNZIATA  N UW0 N - Z IY0 - AA1 - T AH0\nNUNZIATO  N UW0 N - Z IY0 - AA1 - T OW0\nNUNZIO  N AH1 N - Z IY0 - OW0\nNUOVA  N W OW1 - V AH0\nNUOVO  N W OW1 - V OW0\nNUPENG  N Y UW1 - P EH0 NG\nNUPTIAL  N AH1 P - CH AH0 L\nNUREMBERG  N UH1 - R AH0 M - B ER0 G\nNUREYEV  N ER0 - AY1 - AH0 V\nNURMI  N UH1 R - M IY0\nNURNBERGER  N ER1 N - B ER0 - G ER0\nNUROCK  N UW1 - R AA2 K\nNURRE  N ER1\nNURSE  N ER1 S\nNURSE'S  N ER1 - S IH0 Z\nNURSED  N ER1 S T\nNURSERIES  N ER1 - S ER0 - IY0 Z\nNURSERY  N ER1 - S ER0 - IY0\nNURSERYMAN  N ER1 - S ER0 - IY0 - M AE2 N\nNURSERYMEN  N ER1 - S ER0 - IY0 - M AH0 N\nNURSES  N ER1 - S AH0 Z\nNURSES'  N ER1 - S AH0 Z\nNURSES'(2)  N ER1 - S IH0 Z\nNURSES(2)  N ER1 - S IH0 Z\nNURSING  N ER1 - S IH0 NG\nNURTURE  N ER1 - CH ER0\nNURTURED  N ER1 - CH ER0 D\nNURTURER  N ER1 - T ER0 - ER0\nNURTURES  N ER1 - CH ER0 Z\nNURTURING  N ER1 - CH ER0 - IH0 NG\nNUSBAUM  N AH0 S - B AW0 M\nNUSBAUM(2)  N AH0 S - B AA0 M\nNUSEN  N UW1 - S AH0 N\nNUSS  N AH1 S\nNUSSBAUM  N AH1 S - B AW2 M\nNUSSBAUM'S  N AH1 S - B AW2 M Z\nNUSSBAUM'S(2)  N AH1 S - B AA2 M Z\nNUSSBAUM(2)  N AH1 S - B AA2 M\nNUSSBAUMER  N AH1 S - B AW2 - M ER0\nNUSSER  N AH1 - S ER0\nNUSSLE  N AH1 - S AH0 L\nNUSZ  N AH1 SH\nNUT  N AH1 T\nNUT'S  N AH1 T S\nNUTCRACKER  N AH1 T - K R AE2 - K ER0\nNUTE  N Y UW1 T\nNUTLETS  N AH1 T - L AH0 T S\nNUTLEY  N AH1 T - L IY0\nNUTMEG  N AH1 T - M EH2 G\nNUTONE  N UW1 - T OW2 N\nNUTRASWEET  N UW1 - T R AH0 S - W IY2 T\nNUTRI  N UW1 - T R IY0\nNUTRI(2)  N UW1 - T R IH0\nNUTRIA  N UW1 - T R IY0 - AH0\nNUTRICLEAN  N UW1 - T R IH0 - K L IY2 N\nNUTRIENT  N UW1 - T R IY0 - AH0 N T\nNUTRIENTS  N UW1 - T R IY0 - AH0 N T S\nNUTRITION  N UW0 - T R IH1 - SH AH0 N\nNUTRITIONAL  N UW0 - T R IH1 - SH AH0 - N AH0 L\nNUTRITIONALLY  N UW0 - T R IH1 - SH AH0 N - AH0 - L IY0\nNUTRITIONALLY(2)  N UW0 - T R IH1 SH - N AH0 - L IY0\nNUTRITIONIST  N UW0 - T R IH1 - SH AH0 - N IH0 S T\nNUTRITIONISTS  N UW0 - T R IH1 - SH AH0 - N IH0 S T S\nNUTRITIONISTS(2)  N UW0 - T R IH1 - SH AH0 N - IH0 S S\nNUTRITIONISTS(3)  N UW0 - T R IH1 - SH AH0 N - IH0 S\nNUTRITIOUS  N UW0 - T R IH1 - SH AH0 S\nNUTRITIVE  N UW1 - T R AH0 - T IH0 V\nNUTS  N AH1 T S\nNUTSHELL  N AH1 - CH EH2 L\nNUTT  N AH1 T\nNUTTALL  N AH1 - T AH0 L\nNUTTER  N AH1 - T ER0\nNUTTING  N AH1 - T IH0 NG\nNUTTLE  N AH1 - T AH0 L\nNUTTY  N AH1 - T IY0\nNUVEEN  N UW0 - V IY1 N\nNUXOLL  N AH1 K - S AH0 L\nNUYS  N AY1 Z\nNUZUM  N UW1 - Z AH0 M\nNUZZI  N UW1 T - S IY0\nNUZZLE  N AH1 - Z AH0 L\nNUZZO  N UW1 - Z OW0\nNVHOME  EH1 N - V IY1 - HH OW1 M\nNVHOMES  EH1 N - V IY1 - HH OW1 M Z\nNVRYAN  EH0 N - V R AY1 - AH0 N\nNYACK  N AY1 - AE2 K\nNYBERG  N AY1 - B ER0 G\nNYBORG  N IH1 - B AO0 R G\nNYBORG(2)  N AY1 - B AO0 R G\nNYCE  N AY1 S\nNYCOR  N AY1 - K AO2 R\nNYCUM  N IH1 - K AH0 M\nNYCUM(2)  N AY1 - K AH0 M\nNYCZ  N IH1 CH\nNYDAM  N IH1 - D AH0 M\nNYDEGGER  N IH1 - D IH0 - G ER0\nNYDEGGER(2)  N AY1 - D IH0 - G ER0\nNYDIA  N IH1 - D IY0 - AH0\nNYE  N AY1\nNYENHUIS  N AY1 - AH0 N - HH UW2 S\nNYERERE  N AY1 - ER0 - IH2 R\nNYERI  N AY1 - ER0 - IY0\nNYERS  N AY1 R Z\nNYET  N Y EH1 T\nNYET(2)  EH1 N - W AY1 - IY1 - T IY1\nNYGAARD  N IH1 - G AA0 R D\nNYGAARD(2)  N AY1 - G AA0 R D\nNYGARD  N IH1 - G ER0 D\nNYGARD(2)  N AY1 - G ER0 D\nNYGREN  N IH1 - G R EH0 N\nNYGREN(2)  N AY1 - G R EH0 N\nNYHAN  N AY1 - HH AE0 N\nNYHOLM  N IH1 - HH OW0 L M\nNYHOLM(2)  N AY1 - HH OW0 L M\nNYHUS  N IH1 - HH IH0 S\nNYINA  N AY1 - IY0 - N AH0\nNYLAND  N IH1 - L AH0 N D\nNYLAND(2)  N AY1 - L AH0 N D\nNYLANDER  N IH1 - L AH0 N - D ER0\nNYLANDER(2)  N AY1 - L AH0 N - D ER0\nNYLEN  N IH1 - L AH0 N\nNYLEX  N AY1 - L AH0 K S\nNYLON  N AY1 - L AA2 N\nNYLONS  N AY1 - L AA2 N Z\nNYLUND  N IH1 - L AH0 N D\nNYLUND(2)  N AY1 - L AH0 N D\nNYMAN  N AY1 - M AH0 N\nNYMEX  N AY1 - M EH2 K S\nNYMPH  N IH1 M F\nNYMPHOMANIAC  N IH2 M - F AH0 - M EY1 - N IY0 - AE2 K\nNYMPHOMANIAC(2)  N IH2 M - F OW0 - M EY1 - N IY0 - AE2 K\nNYMPHOMANIACS  N IH2 M - F AH0 - M EY1 - N IY0 - AE2 K S\nNYMPHOMANIACS(2)  N IH2 M - F OW0 - M EY1 - N IY0 - AE2 K S\nNYMPHS  N IH1 M F S\nNYNEX  N AY1 - N EH2 K S\nNYNEX'S  N AY1 - N EH2 K - S IH0 Z\nNYQUIST  N IH1 - K W IH0 S T\nNYQUIST(2)  N AY1 - K W IH0 S T\nNYSSA  N IH1 - S AH0\nNYSTROM  N AY1 S - T R AH0 M\nNYX  N IH1 K S\nO  OW1\nO'  OW1\nO'BEIRNE  OW0 - B ER1 N\nO'BOYLE  OW0 - B OY1 L\nO'BRIAN  OW0 - B R AY1 - AH0 N\nO'BRIEN  OW0 - B R AY1 - IH0 N\nO'BRIEN'S  OW0 - B R AY1 - IH0 N Z\nO'CALLAHAN  OW0 - K AE1 - L AH0 - HH AE2 N\nO'CLOCK  AH0 - K L AA1 K\nO'CONNELL  OW0 - K AA1 - N AH0 L\nO'CONNER  OW0 - K AA1 - N ER0\nO'CONNER'S  OW0 - K AA1 - N ER0 Z\nO'CONNOR  OW0 - K AA1 - N ER0\nO'CONNOR'S  OW0 - K AA1 - N ER0 Z\nO'DEA  OW0 - D EY1\nO'DELI  OW0 - D EH1 - L IY0\nO'DELL  OW0 - D EH1 L\nO'DONNELL  OW0 - D AA1 - N AH0 L\nO'DONNELL'S  OW0 - D AA1 - N AH0 L Z\nO'DONOGHUE  OW2 - D AA1 - N AH0 - G Y UW0\nO'DONOGHUE(2)  OW2 - D AA1 - N AH0 - HH Y UW0\nO'DWYER  OW0 D - W AY1 R\nO'GLOVE  OW0 - G L AH1 V\nO'GORMAN  OW0 - G AO1 R - M AH0 N\nO'GRADY  OW0 - G R EY1 - D IY0\nO'GRADY'S  OW0 - G R EY1 - D IY0 Z\nO'HALLARON  OW0 - HH AE1 - L ER0 - AH0 N\nO'HANLON  OW2 - HH AE1 N - L AH0 N\nO'HARA  OW0 - HH EH1 - R AH0\nO'HARA'S  OW0 - HH EH1 - R AH0 Z\nO'HARE  OW0 - HH EH1 R\nO'KEEFE  OW0 - K IY1 F\nO'KEEFFE  OW0 - K IY1 F\nO'KEEFFE'S  OW0 - K IY1 F S\nO'KICKI  OW0 - K IH1 - K IY0\nO'LEARY  OW0 - L IH1 - R IY0\nO'LEARY'S  OW0 - L IH1 - R IY0 Z\nO'MALLEY  OW0 - M AE1 - L IY0\nO'MARA  OW0 - M AA1 - R AH0\nO'MELVENY  OW0 - M EH1 L - V AH0 - N IY0\nO'NEAL  OW0 - N IY1 L\nO'NEIL  OW0 - N IY1 L\nO'NEILL  OW0 - N IY1 L\nO'NEILL'S  OW0 - N IY1 L Z\nO'NUTS  OW0 - N AH1 T S\nO'NUTS(2)  AH0 N - AH1 T S\nO'QUINN  OW0 - K W IH1 N\nO'REILLY  OW0 - R AY1 - L IY0\nO'ROURKE  OW0 - R AO1 R K\nO'S  OW1 Z\nO'SHAUGHNESSY  OW2 - SH AA1 - N IH0 - S IY0\nO'SHEA  OW2 - SH EY1\nO'SMARTY  OW2 S - M AA1 R - T IY0\nO'STEEN  OW0 - S T IY1 N\nO'SULLIVAN  OW0 - S AH1 - L AH0 - V AH0 N\nO'TOOLE  OW0 - T UW1 L\nO.  OW1\nO.'S  OW1 Z\nO.S  OW1 Z\nO.S'  OW1 Z\nOAD  OW1 - EY1 - D IY1\nOAHU  OW2 - AA1 - HH UW0\nOAK  OW1 K\nOAK'S  OW1 K S\nOAKAR  OW1 - K AA2 R\nOAKBROOK  OW1 K - B R UH2 K\nOAKDALE  OW1 K - D EY2 L\nOAKES  OW1 K S\nOAKEY  OW1 - K IY0\nOAKITE  OW1 - K AY2 T\nOAKLAND  OW1 K - L AH0 N D\nOAKLAND'S  OW1 K - L AH0 N D Z\nOAKLEAF  OW1 K - L IY2 F\nOAKLEY  OW1 K - L IY0\nOAKLEY'S  OW1 - K L IY0 Z\nOAKMAN  OW1 K - M AH0 N\nOAKMARK  OW1 K - M AA2 R K\nOAKMONT  OW1 K - M AA2 N T\nOAKRIDGE  OW1 - K R IH2 JH\nOAKS  OW1 K S\nOAKS'  OW1 K S\nOAKVILLE  OW1 K - V IH2 L\nOAKWOOD  OW1 K - W UH2 D\nOANA  OW1 - N AH0\nOANH  OW1 N\nOAR  AO1 R\nOARED  AO1 R D\nOARLOCK  AO1 R - L AA2 K\nOARS  AO1 R Z\nOARSMAN  AO1 R Z - M AH0 N\nOAS  OW1 - EY1 - EH1 S\nOASES  OW0 - EY1 - S IY0 Z\nOASIS  OW0 - EY1 - S IH0 S\nOAT  OW1 T\nOATES  OW1 T S\nOATH  OW1 TH\nOATHOUT  OW1 - TH AW2 T\nOATHS  OW1 DH Z\nOATHS(2)  OW1 TH S\nOATIS  OW1 - T IH0 S\nOATLEY  OW1 T - L IY0\nOATMAN  OW1 T - M AH0 N\nOATMEAL  OW1 T - M IY2 L\nOATS  OW1 T S\nOAXACA  OW1 K - S AH0 - K AH0\nOBA  OW1 - B AH0\nOBADIAH  OW2 - B AH0 - D AY1 - AH0\nOBANDO  OW0 - B AE1 N - D OW0\nOBANION  OW0 - B AA0 - N Y AO1 N\nOBANNON  AA1 - B AH0 - N AA0 N\nOBAR  AH0 - B AA1 R\nOBARA  OW0 - B AA1 - R AH0\nOBARR  OW0 - B AA1 R\nOBEDIANCE  OW0 - B IY1 - D IY0 - AH0 N S\nOBEDIENCE  OW0 - B IY1 - D IY0 - AH0 N S\nOBEDIENT  OW0 - B IY1 - D IY0 - AH0 N T\nOBEDIENTLY  OW0 - B IY1 - D IY0 - AH0 N T - L IY0\nOBEDIENTLY(2)  OW0 - B IY1 D - Y AH0 N T - L IY0\nOBEID  OW0 - B AY1 D\nOBEIRNE  AA1 - B AY0 R N\nOBELIA  OW0 - B EH1 - L IY0 - AH0\nOBENCHAIN  AA1 - B IH0 N - K AY0 N\nOBENSHAIN  AA1 - B IH0 N - SH AY0 N\nOBER  OW1 - B ER0\nOBERBECK  AA1 - B ER0 - B EH0 K\nOBERDORF  AA1 - B ER0 - D AO0 R F\nOBERG  OW1 - B ER0 G\nOBERHAUS  AA1 - B ER0 - HH AW0 S\nOBERHAUSEN  OW1 - B ER0 - HH AW2 - Z AH0 N\nOBERHELMAN  AA1 - B ER0 - HH AH0 L - M AH0 N\nOBERHOLTZER  AA1 - B ER0 - HH OW0 L T - Z ER0\nOBERLANDER  AA1 - B ER0 - L AH0 N - D ER0\nOBERLE  AA1 - B ER0 - AH0 L\nOBERLIN  OW1 - B ER0 - L IH0 N\nOBERLY  OW1 - B ER0 - L IY0\nOBERMAIER  OW1 - B ER0 - M AY2 R\nOBERMAN  AA1 - B ER0 - M AH0 N\nOBERMEIER  AA1 - B ER0 - M AY0 - ER0\nOBERMEYER  AA1 - B ER0 - M AY0 - ER0\nOBERMILLER  AA1 - B ER0 - M IH0 - L ER0\nOBERON  OW1 - B ER0 - AA2 N\nOBERRY  OW1 - B EH0 - R IY0\nOBERST  AA1 - B ER0 S T\nOBERSTAR  OW1 - B ER0 - S T AA2 R\nOBERT  AA1 - B ER0 T\nOBERWEIS  OW1 - B ER0 - W AY2 S\nOBESE  OW0 - B IY1 S\nOBESITY  OW0 - B IY1 - S AH0 - T IY0\nOBEY  OW0 - B EY1\nOBEYED  OW0 - B EY1 D\nOBEYING  OW0 - B EY1 - IH0 NG\nOBEYS  OW0 - B EY1 Z\nOBFUSCATE  AA1 B - F AH0 S - K EY2 T\nOBFUSCATION  AA2 B - F AH0 - S K EY1 - SH AH0 N\nOBIE  OW1 - B IY0\nOBISPO  OW0 - B IH1 - S P OW0\nOBIT  OW1 - B AH0 T\nOBIT(2)  OW0 - B IH2 T\nOBITS  AA1 - B IH0 T S\nOBITS(2)  OW0 - B IH2 T S\nOBITUARIES  OW0 - B IH1 - CH UW0 - EH2 - R IY0 Z\nOBITUARY  OW0 - B IH1 - CH UW0 - EH2 - R IY0\nOBJECT  AA1 B - JH EH0 K T\nOBJECT(2)  AH0 B - JH EH1 K T\nOBJECTED  AH0 B - JH EH1 K - T AH0 D\nOBJECTING  AH0 B - JH EH1 K - T IH0 NG\nOBJECTION  AH0 B - JH EH1 K - SH AH0 N\nOBJECTION'S  AH0 B - JH EH1 K - SH AH0 N Z\nOBJECTIONABLE  AH0 B - JH EH1 K - SH AH0 N - AH0 - B AH0 L\nOBJECTIONS  AH0 B - JH EH1 K - SH AH0 N Z\nOBJECTIVE  AH0 B - JH EH1 K - T IH0 V\nOBJECTIVELY  AA0 B - JH EH1 K - T IH0 V - L IY0\nOBJECTIVES  AH0 B - JH EH1 K - T IH0 V Z\nOBJECTIVITY  AA2 B - JH EH0 K - T IH1 - V IH0 - T IY0\nOBJECTOR  AH0 B - JH EH1 K - T ER0\nOBJECTORS  AH0 B - JH EH1 K - T ER0 Z\nOBJECTS  AA1 B - JH EH0 K T S\nOBJECTS(2)  AH0 B - JH EH1 K T S\nOBJECTS(3)  AA1 B - JH EH0 K S\nOBJECTS(4)  AH0 B - JH EH1 K S\nOBLAK  AA1 - B L AH0 K\nOBLANDER  AA1 - B L AH0 N - D ER0\nOBLAST  AA1 - B L AE0 S T\nOBLATE  AA0 - B L EY1 T\nOBLATE(2)  AA1 - B L EY0 T\nOBLIGATE  AA1 - B L AH0 - G EY2 T\nOBLIGATED  AA1 - B L AH0 - G EY2 - T IH0 D\nOBLIGATES  AA1 - B L AH0 - G EY2 T S\nOBLIGATION  AA2 - B L AH0 - G EY1 - SH AH0 N\nOBLIGATIONS  AA2 - B L AH0 - G EY1 - SH AH0 N Z\nOBLIGATORY  AH0 - B L IH1 - G AH0 - T AO2 - R IY0\nOBLIGE  AH0 - B L AY1 JH\nOBLIGED  AH0 - B L AY1 JH D\nOBLIGES  AH0 - B L AY1 - JH IH0 Z\nOBLIGING  AH0 - B L AY1 - JH IH0 NG\nOBLIGINGLY  AH0 - B L AY1 - JH IH0 NG - L IY0\nOBLINGER  OW1 - B AH0 L - IH0 - NG ER0\nOBLINGER(2)  OW1 - B L IH0 - NG ER0\nOBLIQUE  AH0 - B L IY1 K\nOBLIQUELY  OW0 - B L IY1 - K L IY0\nOBLITERATE  AH0 - B L IH1 - T ER0 - EY2 T\nOBLITERATED  AH0 - B L IH1 - T ER0 - EY2 - T IH0 D\nOBLITERATING  AH0 - B L IH1 - T ER0 - EY2 - T IH0 NG\nOBLIVION  AH0 - B L IH1 - V IY0 - AH0 N\nOBLIVIOUS  AH0 - B L IH1 - V IY0 - AH0 S\nOBLONG  AA1 - B L AO0 NG\nOBNOXIOUS  AA0 B - N AA1 K - SH AH0 S\nOBOE  OW1 - B OW0\nOBOIST  OW1 - B OW0 - AH0 S T\nOBON  OW1 - B AH0 N\nOBOYLE  AA1 - B OY0 L\nOBRADOVICH  AH0 - B R AA1 - D AH0 - V IH0 CH\nOBRECHT  AA1 - B R IH0 K T\nOBREGON  AA1 - B R IH0 - G AH0 N\nOBREMSKI  AH0 - B R EH1 M S - K IY0\nOBRENOVICH  AH0 - B R EH1 - N AH0 - V IH0 CH\nOBRIAN  AA1 - B R IY0 - AH0 N\nOBRIANT  OW0 - B R IY1 - AH0 N T\nOBRIEN  OW0 - B R AY1 - AH0 N\nOBRINGER  AA1 - B R IH0 - NG ER0\nOBRINSKY  OW0 - B R IH1 N S - K IY0\nOBRYAN  OW0 - B R AY1 - AH0 N\nOBRYANT  OW0 - B R AY1 - AH0 N T\nOBSCENE  AA0 B - S IY1 N\nOBSCENE(2)  AH0 B - S IY1 N\nOBSCENELY  AA0 B - S IY1 - N AH0 - L IY0\nOBSCENELY(2)  AA0 B - S IY1 N - L IY0\nOBSCENITIES  AA0 B - S EH1 - N IH0 - T IY0 Z\nOBSCENITY  AH0 B - S EH1 - N IH0 - T IY0\nOBSCURE  AH0 B - S K Y UH1 R\nOBSCURED  AH0 B - S K Y UH1 R D\nOBSCURES  AH0 B - S K Y UH1 R Z\nOBSCURING  AH0 B - S K Y UH1 - R IH0 NG\nOBSCURITY  AH0 B - S K Y UH1 - R AH0 - T IY0\nOBSEQUIOUS  AH0 B - S IY1 - K W IY0 - AH0 S\nOBSERVABLE  AH0 B - Z ER1 - V AH0 - B AH0 L\nOBSERVABLES  AH0 B - Z ER1 - V AH0 - B AH0 L Z\nOBSERVANCE  AH0 B - Z ER1 - V AH0 N S\nOBSERVANCES  AH0 B - Z ER1 - V AH0 N - S IH0 Z\nOBSERVANT  AH0 B - Z ER1 - V AH0 N T\nOBSERVATEUR  AA0 B - Z ER2 - V AH0 - T UH1 R\nOBSERVATION  AA2 B - Z ER0 - V EY1 - SH AH0 N\nOBSERVATIONS  AA2 B - Z ER0 - V EY1 - SH AH0 N Z\nOBSERVATORIES  AH0 B - Z ER1 - V AH0 - T AO2 - R IY0 Z\nOBSERVATORY  AH0 B - Z ER1 - V AH0 - T AO2 - R IY0\nOBSERVATORY'S  AH0 B - Z ER1 - V AH0 - T AO2 - R IY0 Z\nOBSERVE  AH0 B - Z ER1 V\nOBSERVED  AH0 B - Z ER1 V D\nOBSERVER  AH0 B - Z ER1 - V ER0\nOBSERVERS  AH0 B - Z ER1 - V ER0 Z\nOBSERVES  AH0 B - Z ER1 V Z\nOBSERVING  AH0 B - Z ER1 - V IH0 NG\nOBSESS  AH0 B - S EH1 S\nOBSESSED  AH0 B - S EH1 S T\nOBSESSING  AH0 B - S EH1 - S IH0 NG\nOBSESSION  AH0 B - S EH1 - SH AH0 N\nOBSESSIONAL  AH0 B - S EH1 - SH AH0 - N AH0 L\nOBSESSIONS  AH0 B - S EH1 - SH AH0 N Z\nOBSESSIVE  AH0 B - S EH1 - S IH0 V\nOBSESSIVELY  AA0 B - S EH1 - S IH0 V - L IY0\nOBSIDIAN  AH0 B - S IH1 - D IY0 - AH0 N\nOBSOLESCENCE  AA2 B - S AH0 - L EH1 - S AH0 N S\nOBSOLESCENT  AA2 B - S AH0 - L EH1 - S AH0 N T\nOBSOLETE  AA1 B - S AH0 - L IY2 T\nOBST  AA1 B S T\nOBSTACLE  AA1 B - S T AH0 - K AH0 L\nOBSTACLES  AA1 B - S T AH0 - K AH0 L Z\nOBSTETRIC  AH0 B - S T EH1 - T R IH0 K\nOBSTETRICIAN  AA2 B - S T AH0 - T R IH1 - SH AH0 N\nOBSTETRICIANS  AA2 B - S T AH0 - T R IH1 - SH AH0 N Z\nOBSTETRICS  AH0 B - S T EH1 - T R IH0 K S\nOBSTFELD  AA1 B - S T F EH2 L D\nOBSTINACY  AA1 B - S T AH0 - N AH0 - S IY0\nOBSTINATE  AA1 B - S T AH0 - N AH0 T\nOBSTRUCT  AH0 B - S T R AH1 K T\nOBSTRUCTED  AH0 B - S T R AH1 K - T IH0 D\nOBSTRUCTING  AH0 B - S T R AH1 K - T IH0 NG\nOBSTRUCTION  AH0 B - S T R AH1 K - SH AH0 N\nOBSTRUCTIONISM  AH0 B - S T R AH1 K - SH AH0 - N IH2 - Z AH0 M\nOBSTRUCTIONIST  AH0 B - S T R AH1 K - SH AH0 - N AH0 S T\nOBSTRUCTIONIST(2)  AH0 B - S T R AH1 K - SH AH0 - N IH0 S T\nOBSTRUCTIONISTS  AH0 B - S T R AH1 K - SH AH0 - N AH0 S T S\nOBSTRUCTIONISTS(2)  AH0 B - S T R AH1 K - SH AH0 - N IH0 S T S\nOBSTRUCTIONISTS(3)  AH0 B - S T R AH1 K - SH AH0 - N IH0 S S\nOBSTRUCTIONISTS(4)  AH0 B - S T R AH1 K - SH AH0 - N IH0 S\nOBSTRUCTIONS  AH0 B - S T R AH1 K - SH AH0 N Z\nOBSTRUCTIVE  AH0 B - S T R AH1 K - T IH0 V\nOBTAIN  AH0 B - T EY1 N\nOBTAINABLE  AH0 B - T EY1 - N AH0 - B AH0 L\nOBTAINED  AH0 B - T EY1 N D\nOBTAINING  AH0 B - T EY1 - N IH0 NG\nOBTAINS  AH0 B - T EY1 N Z\nOBTRUDE  AH0 B - T R UW1 D\nOBTRUDES  AH0 B - T R UW1 D Z\nOBTRUSIVE  AH0 B - T R UW1 - S IH0 V\nOBTUSE  AA0 B - T UW1 S\nOBUCHOWSKI  AH0 - B AH0 - HH AO1 F S - K IY0\nOBUCHOWSKI(2)  OW0 - B Y UW0 - K AW1 S - K IY0\nOBUCHOWSKI(3)  OW0 - B UW0 - K AW1 S - K IY0\nOBVERSE  AH0 B - V ER1 S\nOBVIATE  AA1 B - V IY0 - EY2 T\nOBVIATING  AA1 B - V IY0 - EY2 - T IH0 NG\nOBVIOUS  AA1 B - V IY0 - AH0 S\nOBVIOUSLY  AA1 B - V IY0 - AH0 S - L IY0\nOBYRNE  AA1 - B ER1 N\nOCAIN  OW0 - K AA0 - IY1 N\nOCALA  OW0 - K AE1 - L AH0\nOCALLAGHAN  OW0 - K AE1 - L AH0 - G AH0 N\nOCALLAHAN  OW0 - K AE1 - L AH0 - HH AE2 N\nOCAMPO  OW0 - K AE1 M - P OW0\nOCANA  OW0 - K AE1 - N AH0\nOCANAS  OW0 - K AE1 - N AH0 Z\nOCARROLL  OW0 - K AE1 - R AH0 L\nOCARROLL(2)  OW0 - K EH1 - R AH0 L\nOCASIO  OW0 - K AA1 - S IY0 - OW0\nOCAW  OW0 - K AO1\nOCAW'S  OW0 - K AO1 Z\nOCCASION  AH0 - K EY1 - ZH AH0 N\nOCCASIONAL  AH0 - K EY1 - ZH AH0 - N AH0 L\nOCCASIONALLY  AH0 - K EY1 - ZH AH0 N - AH0 - L IY0\nOCCASIONALLY(2)  AH0 - K EY1 ZH - N AH0 - L IY0\nOCCASIONALLY(3)  AH0 - K EY1 - ZH AH0 N - L IY0\nOCCASIONED  AH0 - K EY1 - ZH AH0 N D\nOCCASIONS  AH0 - K EY1 - ZH AH0 N Z\nOCCHINO  OW2 - K IY1 - N OW0\nOCCHIPINTI  OW0 - K IY0 - P IY1 N - T IY0\nOCCHOA  OW2 - CH OW1 - AH0\nOCCHOA'S  OW2 - CH OW1 - AH0 Z\nOCCIDENT  AA1 K - S AH0 - D EH2 N T\nOCCIDENTAL  AA2 K - S AH0 - D EH1 N - T AH0 L\nOCCIDENTAL'S  AA2 K - S AH0 - D EH1 N - T AH0 L Z\nOCCIDENTAL'S(2)  AA2 K - S AH0 - D EH1 - N AH0 L Z\nOCCIDENTAL(2)  AA2 K - S AH0 - D EH1 - N AH0 L\nOCCIDENTALE  AA2 K - S IH0 - D EH1 N - T AH0 L\nOCCIDENTALE'S  AA2 K - S IH0 - D EH1 N - T AH0 L Z\nOCCIPITAL  AA0 K - S IH1 - P AH0 - T AH0 L\nOCCLUSION  AH0 - K L UW1 - ZH AH0 N\nOCCULT  AH0 - K AH1 L T\nOCCUPANCY  AA1 - K Y AH0 - P AH0 N - S IY0\nOCCUPANT  AA1 - K Y AH0 - P AH0 N T\nOCCUPANTS  AA1 - K Y AH0 - P AH0 N T S\nOCCUPATION  AA2 - K Y AH0 - P EY1 - SH AH0 N\nOCCUPATIONAL  AA0 - K Y AH0 - P EY1 - SH AH0 - N AH0 L\nOCCUPATIONS  AA2 - K Y AH0 - P EY1 - SH AH0 N Z\nOCCUPIED  AA1 - K Y AH0 - P AY2 D\nOCCUPIER  AA1 - K Y AH0 - P AY2 - ER0\nOCCUPIERS  AA1 - K Y AH0 - P AY2 - ER0 Z\nOCCUPIES  AA1 - K Y AH0 - P AY2 Z\nOCCUPY  AA1 - K Y AH0 - P AY2\nOCCUPYING  AA1 - K Y AH0 - P AY2 - IH0 NG\nOCCUR  AH0 - K ER1\nOCCURED  AH0 - K ER1 D\nOCCURING  AH0 - K ER1 - IH0 NG\nOCCURRED  AH0 - K ER1 D\nOCCURRENCE  AH0 - K ER1 - AH0 N S\nOCCURRENCES  AH0 - K ER1 - AH0 N - S IH0 Z\nOCCURRING  AH0 - K ER1 - IH0 NG\nOCCURS  AH0 - K ER1 Z\nOCEAN  OW1 - SH AH0 N\nOCEAN'S  OW1 - SH AH0 N Z\nOCEANEERING  OW2 - SH AH0 - N IH1 - R IH0 NG\nOCEANFRONT  OW2 - SH AH0 N - F R AH2 N T\nOCEANGOING  OW1 - SH AH0 N - G OW2 - IH0 NG\nOCEANIC  OW2 - SH IY0 - AE1 - N IH0 K\nOCEANOGRAPHER  OW2 - SH AH0 - N AA1 - G R AH0 - F ER0\nOCEANOGRAPHIC  OW2 - SH AH0 N - AH0 - G R AE1 - F IH0 K\nOCEANOGRAPHY  OW2 - SH AH0 - N AA1 - G R AH0 - F IY0\nOCEANS  OW1 - SH AH0 N Z\nOCEANSIDE  OW1 - SH AH0 N - S AY2 D\nOCEANVIEW  OW1 - SH AH0 N - V Y UW2\nOCELOT  AA1 - S AH0 - L AA2 T\nOCELOT'S  AA1 - S AH0 - L AA2 T S\nOCH  AA1 K\nOCHELTREE  AA0 - CH IH0 L - T R IY1\nOCHOA  AA2 - CH OW1 - AH0\nOCHOA(2)  OW2 - CH OW1 - AH0\nOCHRA  AA1 - K R AH0\nOCHRE  OW1 - K ER0\nOCHS  AA1 K S\nOCHS(2)  OW1 K S\nOCHSENSCHLAGER  AA1 K - S AH0 N - SH L AA2 - G ER0\nOCHSNER  AA1 K S - N ER0\nOCILLA  OW0 - S IH1 - L AH0\nOCKER  AA1 - K ER0\nOCKERBLOOM  AA1 - K ER0 - B L UW0 M\nOCKERMAN  AA1 - K ER0 - M AH0 N\nOCLAIR  AA1 - K L ER0\nOCON  AH0 - K AA1 N\nOCONNELL  OW0 - K AA1 - N AH0 L\nOCONNER  AA1 - K AH0 - N ER0\nOCONNER(2)  OW0 - K AA1 - N ER0\nOCONNOR  OW0 - K AA1 - N ER0\nOCT  AO0 K - T OW1 - B ER0\nOCT(2)  AO1 K T\nOCT.  AO1 K T\nOCT.(2)  AO0 K - T OW1 - B ER0\nOCTAGON  AA1 K - T AH0 - G AA2 N\nOCTAGONAL  AA0 K - T AE1 - G AH0 - N AH0 L\nOCTAHEDRAL  AA2 K - T AH0 - HH IY1 - D R AH0 L\nOCTAHEDRON  AA2 K - T AH0 - HH IY1 - D R AH0 N\nOCTANE  AA1 K - T EY0 N\nOCTAVE  AA1 K - T IH0 V\nOCTAVES  AA1 K - T IH0 V Z\nOCTAVIA  AA0 K - T EY1 - V IY0 - AH0\nOCTAVIO  AA2 K - T EY1 - V IY0 - OW0\nOCTAVIUS  AA0 K - T EY1 - V IY0 - AH0 S\nOCTAVUS  AA1 K - T AH0 - V UW0 S\nOCTEL  AA2 K - T EH1 L\nOCTET  AA0 K - T EH1 T\nOCTILLION  AA0 K - T IH1 - L Y AH0 N\nOCTOBER  AA0 K - T OW1 - B ER0\nOCTOBER'S  AA0 K - T OW1 - B ER0 Z\nOCTOGENARIAN  AA2 K - T AH0 - JH IH0 - N EH1 - R IY0 - AH0 N\nOCTOPI  AA1 K - T AH0 - P AY0\nOCTOPUS  AA1 K - T AH0 - P UH2 S\nODA  OW1 - D AH0\nODAIKO  OW0 - D EY1 - K OW0\nODANIEL  AA1 - D AH0 - N IY0 L\nODAY  OW1 - D EY0\nODD  AA1 D\nODDBALL  AA1 D - B AO2 L\nODDBALLS  AA1 D - B AO2 L Z\nODDEN  AA1 - D AH0 N\nODDER  AA1 - D ER0\nODDEST  AA1 - D AH0 S T\nODDI  AA1 - D IY0\nODDI(2)  OW1 - D IY0\nODDITIES  AA1 - D AH0 - T IY0 Z\nODDITY  AA1 - D AH0 - T IY0\nODDLER  AA1 D - L ER0\nODDLER'S  AA1 D - L ER0 Z\nODDLY  AA1 D - L IY0\nODDS  AA1 D Z\nODDS-ON  AA1 D - Z AA1 N\nODDSMAKER  AA1 D Z - M EY2 - K ER0\nODDSMAKERS  AA1 D Z - M EY2 - K ER0 Z\nODDY  AA1 - D IY0\nODE  OW1 D\nODEA  AA1 - D IY0 - AH0\nODED  OW1 - D EH0 D\nODEGAARD  AA1 - D IH0 - G AA0 R D\nODEGARD  AA1 - D IH0 - G ER0 D\nODEKIRK  AA1 - D IH0 - K ER0 K\nODELE  OW0 - D EH1 - L IY0\nODELET  AA1 - D IH0 - L IH0 T\nODELETTE  AA1 - D IH0 - L EH0 T\nODELIA  OW0 - D EH1 - L IY0 - AH0\nODELINDA  OW0 - D EH0 - L IY1 N - D AH0\nODELL  OW0 - D EH1 L\nODELLA  OW0 - D EH1 - L AH0\nODEM  OW1 - D IH0 M\nODEN  OW1 - D AH0 N\nODENTHAL  AA1 - D IH0 N - TH AH0 L\nODEON  OW1 - D IY0 - AH0 N\nODER  OW1 - D ER0\nODES  OW1 D Z\nODESSA  OW0 - D EH1 - S AH0\nODETICS  OW0 - D EH1 - T IH0 K S\nODETTE  OW2 - D EH1 T\nODGERS  AA1 - JH ER0 Z\nODIAUM  OW1 - D IY0 - AH0 M\nODIAUN  OW1 - D IY0 - AH0 N\nODIER  OW1 - D IY0 - ER0\nODILIA  OW0 - D IY1 - L IY0 - AH0\nODIN  OW1 - D AH0 N\nODIORNE  OW0 - D IY0 - AO1 R - N IY0\nODIOUS  OW1 - D IY0 - AH0 S\nODLAND  AA1 D - L AH0 N D\nODLE  OW1 - D AH0 L\nODNEAL  AA1 D - N AH0 L\nODOHERTY  AA1 - D AH0 - HH ER0 - T IY0\nODOLF  AA1 - D OW0 L F\nODOM  OW1 - D AH0 M\nODOMETER  OW2 - D AA1 - M AH0 - T ER0\nODOMETERS  OW2 - D AA1 - M AH0 - T ER0 Z\nODOMS  OW1 - D AH0 M Z\nODONALD  AA1 - D AH0 - N AO0 L D\nODONNEL  AA1 - D AH0 - N EH0 L\nODONNELL  OW0 - D AA1 - N AH0 L\nODONOGHUE  AA1 - D AH0 - N AA0 G - HH UW0\nODONOHUE  AA1 - D AH0 - N AA0 - HH Y UW0\nODONOVAN  AA0 - D AH0 N - OW1 - V AH0 N\nODOR  OW1 - D ER0\nODORANT  OW1 - D ER0 - AH0 N T\nODORLESS  OW1 - D ER0 - L AH0 S\nODOROUS  OW1 - D ER0 - AH0 S\nODORS  OW1 - D ER0 Z\nODOWD  AA1 - D AW0 D\nODP  OW1 - D IY1 - P IY1\nODRISCOLL  AA1 - D R IH0 - S K AA0 L\nODRISCOLL(2)  OW0 - D R IH1 S - K AA0 L\nODUM  OW1 - D AH0 M\nODWYER  AA1 D - W IY0 - ER0\nODYSSEUS  OW0 - D IH1 - S IY0 - AH0 S\nODYSSEY  AA1 - D AH0 - S IY0\nODYSSEY'S  AA1 - D AH0 - S IY0 Z\nOEDIPAL  EH1 - D AH0 - P AH0 L\nOEDIPUS  OW0 - D IY1 - P AH0 S\nOEHLER  OW1 - L ER0\nOEHLERT  OW1 - L ER0 T\nOEHLKE  OW1 L K\nOEHME  OW1 M\nOEHMEN  OW1 - M AH0 N\nOEHMENS  OW1 - M AH0 N Z\nOEHRLEIN  AO1 R - L AY0 N\nOEIEN  OW1 - IY0 - AH0 N\nOELKE  OW1 L K\nOELKERS  OW1 L - K ER0 Z\nOELMAN  OW1 L - M AH0 N\nOELRICH  OW1 L - R IH0 K\nOELSCHLAGER  OW1 L SH - L EY0 - G ER0\nOERLIKON  AO1 R - L IH0 - K AA2 N\nOERTEL  AO1 R - T AH0 L\nOESCH  OW1 SH\nOESER  OW1 - Z ER0\nOEST  OW1 - IH0 S T\nOESTERLE  OW1 - S T ER0 - AH0 L\nOESTERLING  OW1 - S T ER0 - L IH0 NG\nOESTERREICH  OW1 - S T ER0 - AY0 K\nOESTERREICHISCHE  OW2 - S T ER0 - AY1 - K IH0 - SH IY0\nOESTREICH  OW1 - S T R AY2 K\nOESTREICHER  OW1 - S T R AY2 - K ER0\nOETKEN  OW1 T - K AH0 N\nOETTING  OW1 - T IH0 NG\nOETTINGER  OW1 - T IH0 N - JH ER0\nOETTINGER(2)  OW1 - T IH0 - NG ER0\nOEUVRE  UW1 - V R AH0\nOEUVRE(2)  ER1 V\nOF  AH1 V\nOF(2)  AH0 V\nOFALLON  AA1 - F AH0 - L AA0 N\nOFARRELL  AA1 - F ER0 - EH0 L\nOFC  OW1 - EH1 F - S IY1\nOFELIA  OW0 - F EY1 - L IY0 - AH0\nOFER  OW1 - F ER0\nOFF  AO1 F\nOFF'S  AO1 F S\nOFFBEAT  AO1 F - B IY1 T\nOFFEN  AO1 - F AH0 N\nOFFEND  AH0 - F EH1 N D\nOFFENDED  AH0 - F EH1 N - D AH0 D\nOFFENDED(2)  AH0 - F EH1 N - D IH0 D\nOFFENDER  AH0 - F EH1 N - D ER0\nOFFENDERS  AH0 - F EH1 N - D ER0 Z\nOFFENDING  AH0 - F EH1 N - D IH0 NG\nOFFENDS  AH0 - F EH1 N D Z\nOFFENSE  AH0 - F EH1 N S\nOFFENSES  AH0 - F EH1 N - S IH0 Z\nOFFENSIVE  AH0 - F EH1 N - S IH0 V\nOFFENSIVELY  AH0 - F EH1 N - S IH0 V - L IY0\nOFFENSIVES  AH0 - F EH1 N - S IH0 V Z\nOFFER  AO1 - F ER0\nOFFER'S  AO1 - F ER0 Z\nOFFERDAHL  AA1 - F ER0 - D AA0 L\nOFFERED  AO1 - F ER0 D\nOFFERER  AO1 - F ER0 - ER0\nOFFERING  AO1 - F ER0 - IH0 NG\nOFFERING'S  AO1 - F ER0 - IH0 NG Z\nOFFERING'S(2)  AO1 - F R IH0 NG Z\nOFFERING(2)  AO1 - F R IH0 NG\nOFFERINGS  AO1 - F ER0 - IH0 NG Z\nOFFERINGS(2)  AO1 - F R IH0 NG Z\nOFFERMAN  AO1 - F ER0 - M AH0 N\nOFFERMANN  AO1 - F ER0 - M AH0 N\nOFFERS  AO1 - F ER0 Z\nOFFHAND  AO1 F - HH AE1 N D\nOFFICAL  AH0 - F IH0 - SH AH0 L\nOFFICALS  AO1 - F IH0 - K AH0 L Z\nOFFICE  AO1 - F AH0 S\nOFFICE'S  AO1 - F AH0 - S IH0 Z\nOFFICEHOLDER  AO1 - F AH0 S - HH OW2 L - D ER0\nOFFICEHOLDERS  AO1 - F AH0 S - HH OW2 L - D ER0 Z\nOFFICEMAX  AO1 - F AH0 S - M AE2 K S\nOFFICER  AO1 - F AH0 - S ER0\nOFFICER'S  AO1 - F IH0 - S ER0 Z\nOFFICER(2)  AO1 - F IH0 - S ER0\nOFFICERS  AO1 - F AH0 - S ER0 Z\nOFFICERS'  AO1 - F IH0 - S ER0 Z\nOFFICERS(2)  AO1 - F IH0 - S ER0 Z\nOFFICES  AO1 - F AH0 - S AH0 Z\nOFFICES(2)  AO1 - F AH0 - S IH0 Z\nOFFICIAL  AH0 - F IH1 - SH AH0 L\nOFFICIAL'S  AH0 - F IH1 - SH AH0 L Z\nOFFICIALDOM  AH0 - F IH1 - SH AH0 L - D AH0 M\nOFFICIALLY  AH0 - F IH1 - SH AH0 - L IY0\nOFFICIALS  AH0 - F IH1 - SH AH0 L Z\nOFFICIALS'  AH0 - F IH1 - SH AH0 L Z\nOFFICIATE  AH0 - F IH1 - SH IY0 - EY2 T\nOFFICIATED  AH0 - F IH1 - SH IY0 - EY2 - T AH0 D\nOFFICIATING  AH0 - F IH1 - SH IY0 - EY2 - T IH0 NG\nOFFICIO  AH0 - F IH1 - S IY0 - OW0\nOFFIELD  AA1 - F IY2 L D\nOFFILL  AO1 - F IH2 L\nOFFING  AO1 - F IH0 NG\nOFFNER  AA1 F - N ER0\nOFFORD  AA1 - F ER0 D\nOFFS  AO1 F S\nOFFSET  AO0 F - S EH1 T\nOFFSET(2)  AO1 F - S EH2 T\nOFFSETS  AO1 F - S EH2 T S\nOFFSETTING  AO0 F - S EH1 - T IH0 NG\nOFFSETTING(2)  AO1 F - S EH2 - T IH0 NG\nOFFSHOOT  AO1 F - SH UW2 T\nOFFSHOOTS  AO1 F - SH UW2 T S\nOFFSHORE  AO1 F - SH AO1 R\nOFFSPRING  AO1 F - S P R IH2 NG\nOFFSTAGE  AO1 F - S T EY1 JH\nOFFUTT  AA1 - F AH0 T\nOFILIA  OW0 - F IY1 - L IY0 - AH0\nOFLAHERTY  AA1 - F L AH0 - HH ER0 - T IY0\nOFLYNN  AA1 - F L IH0 N\nOFT  AO1 F T\nOFTEDAHL  AA1 F - T IH0 - D AA0 L\nOFTEL  AA1 F - T EH2 L\nOFTEN  AO1 - F AH0 N\nOFTEN(2)  AO1 F - T AH0 N\nOFTENER  AO1 - F AH0 N - ER0\nOFTENER(2)  AO1 F - T AH0 - N ER0\nOFTENTIMES  AO1 - F AH0 N - T AY2 M Z\nOFTENTIMES(2)  AO1 F - T AH0 N - T AY2 M Z\nOG  AA1 G\nOGAN  OW1 - G AH0 N\nOGARA  OW0 - G AA1 - R AH0\nOGATA  OW0 - G AA1 - T AH0\nOGAWA  OW0 - G AA1 - W AH0\nOGBORN  AA1 G - B ER0 N\nOGBURN  AA1 G - B ER0 N\nOGDEN  AA1 G - D AH0 N\nOGG  AA1 G\nOGIER  OW1 - G IY0 - ER0\nOGILVIE  AA1 - JH IH0 L - V IY0\nOGILVIE(2)  OW2 - G IH1 L - V IY0\nOGILVY  OW1 - G AH0 L - V IY0\nOGILVY'S  OW1 - G AH0 L - V IY0 Z\nOGLALA  OW0 - G L AA1 - L AH0\nOGLE  OW1 - G AH0 L\nOGLEBAY  OW1 - G AH0 L - B EY2\nOGLED  OW1 - G AH0 L D\nOGLES  OW1 - G AH0 L Z\nOGLESBEE  OW1 - G AH0 L Z - B IY2\nOGLESBY  AA1 - G AH0 L S - B IY0\nOGLETHORPE  OW1 - G AH0 L - TH AO2 R P\nOGLETREE  OW1 - G AH0 L - T R IY2\nOGNIBENE  OW0 G - N IY0 - B EH1 - N AH0\nOGONI  OW0 - G OW1 - N IY0\nOGONYOK  OW0 - G OW1 - N Y AA0 K\nOGORMAN  AA1 - G ER0 - M AH0 N\nOGRADY  AH0 - G R AA1 - D IY0\nOGRE  OW1 - G ER0\nOGREN  AA1 - G R EH0 N\nOGRESS  OW1 - G R AH0 S\nOGUIN  OW0 - G UW1 - IY0 N\nOGUINN  AA1 - G IH0 N\nOH  OW1\nOH'S  OW1 Z\nOHAGAN  OW0 - HH AA1 - G AA0 N\nOHAIR  AA1 - HH ER0\nOHALLORAN  AA0 - HH AH0 - L AO1 - R AH0 N\nOHANESIAN  AA0 - HH AH0 - N EH1 - ZH IH0 N\nOHANIAN  AH0 - HH EY1 - N IY0 - AH0 N\nOHANLON  AH0 - HH AE1 N - L AH0 N\nOHARE  OW0 - HH AA1 - R EY0\nOHARRA  AA1 - HH ER0 - AH0\nOHASHI  OW0 - HH AA1 - SH IY0\nOHAVER  AA1 - HH AH0 - V ER0\nOHBA  OW1 - B AH0\nOHBAYASHI  OW2 - B AA0 - Y AA1 - SH IY0\nOHEARN  AA1 - HH ER0 N\nOHERN  AA1 - HH ER0 N\nOHERRON  AA1 - HH ER0 - AA0 N\nOHIO  OW0 - HH AY1 - OW0\nOHIO'S  OW0 - HH AY1 - OW0 Z\nOHIOAN  OW2 - HH AY1 - OW2 - AH0 N\nOHIOANS  OW2 - HH AY1 - OW2 - AH0 N Z\nOHKAWARA  OW2 - K AA2 - W AA1 - R AH0\nOHL  OW1 L\nOHLAND  OW1 - L AH0 N D\nOHLENDORF  OW1 - L IH0 N - D AO0 R F\nOHLER  OW1 - L ER0\nOHLIN  OW1 - L IH0 N\nOHLINGER  OW1 - L IH0 - NG ER0\nOHLMAN  OW1 L - M AH0 N\nOHLMANN  OW1 L - M AH0 N\nOHLMEYER  OW1 L - M AY2 R\nOHLRICH  OW1 L - R IH0 K\nOHLSEN  OW1 L - S AH0 N\nOHLSON  OW1 L - S AH0 N\nOHLSSON  OW1 L - S AH0 N\nOHM  OW1 M\nOHM'S  OW1 M Z\nOHMAE  OW1 - M EY2\nOHMAN  OW1 - M AH0 N\nOHMANN  OW1 - M AH0 N\nOHMER  OW1 - M ER0\nOHMS  OW1 M Z\nOHMURA  OW0 - M UW1 - R AH0\nOHNEMUS  OW1 - N IH0 - M IH0 S\nOHNSTAD  OW1 N - S T AH0 D\nOHR  AO1 R\nOHRT  AO1 R T\nOHS  OW1 Z\nOI  OY1\nOIE  OY1\nOIEN  AA1 - IY0 N\nOIL  OY1 L\nOIL'S  OY1 L Z\nOILED  OY1 L D\nOILER  OY1 - L ER0\nOILERS  OY1 - L ER0 Z\nOILFIELD  OY1 L - F IY2 L D\nOILFIELDS  OY1 L - F IY2 L D Z\nOILING  OY1 - L IH0 NG\nOILMAN  OY1 L - M AE2 N\nOILMEN  OY1 L - M EH1 N\nOILS  OY1 L Z\nOILSEED  OY1 L - S IY2 D\nOILSEEDS  OY1 L - S IY2 D Z\nOILWELL  OY1 L - W EH2 L\nOILY  OY1 - L IY0\nOINTMENT  OY1 N T - M AH0 N T\nOISHI  OW0 - IY1 - SH IY0\nOJ  OW1 - JH EY1\nOJA  OW1 - Y AH0\nOJALA  OW0 - Y AA1 - L AH0\nOJEDA  OW0 - Y EY1 - D AH0\nOJI  OW1 - JH IY0\nOJIBWA  OW0 - JH IH1 - B W AH0\nOK  OW1 - K EY1\nOKA  OW1 - K AH0\nOKABE  OW0 - K AA1 - B EY0\nOKADA  OW0 - K AA1 - D AH0\nOKALOOSA  AO2 - K AH0 - L UW1 - S AH0\nOKALOOSA(2)  OW2 - K AH0 - L UW1 - S AH0\nOKAMOTO  OW2 - K AH0 - M OW1 - T OW0\nOKAMURA  OW2 - K AH0 - M UH1 - R AH0\nOKANE  OW0 - K AA1 - N EY0\nOKANO  OW0 - K AA1 - N OW0\nOKASAKI  OW2 - K AH0 - S AA1 - K IY0\nOKASAN  OW0 - K EY1 - Z AH0 N\nOKAY  OW1 - K EY1\nOKAYED  OW1 - K EY1 D\nOKAYS  OW1 - K EY1 Z\nOKAZ  OW0 - K AA0 Z\nOKAZAKI  OW0 - K AA0 - Z AA1 - K IY0\nOKDO  AO1 K - D OW2\nOKEECHOBEE  OW0 - K IY2 - CH OW1 - B IY0\nOKEEFE  AA1 - K IY0 F\nOKEEFFE  AA1 - K IY0 F\nOKELLEY  AA1 - K IH0 - L IY0\nOKELLY  AA1 - K AH0 - L IY0\nOKELLY(2)  OW0 - K EH1 - L IY0\nOKEN  OW0 - K EY1 - AH0 N\nOKERLUND  AA1 - K ER0 - L AH0 N D\nOKESON  AA1 - K IH0 - S AH0 N\nOKEY  OW1 - K IY0\nOKI  OW1 - K IY0\nOKIE  OW1 - K IY0\nOKIMOTO  OW0 - K IY0 - M OW1 - T OW0\nOKIN  OW1 - K IH0 N\nOKINAWA  OW2 - K IH2 - N AA1 - W AH0\nOKINAWA(2)  OW2 - K IY0 - N AA1 - W AH0\nOKINAWANS  OW2 - K IH2 - N AA1 - W AH0 N Z\nOKINAWANS(2)  OW2 - K IY2 - N AA1 - W AH0 N Z\nOKLAHOMA  OW2 - K L AH0 - HH OW1 - M AH0\nOKLAHOMA'S  OW2 - K L AH0 - HH OW1 - M AH0 Z\nOKLAHOMAN  OW2 - K L AH0 - HH OW1 - M AH0 N\nOKLAHOMANS  OW2 - K L AH0 - HH OW1 - M AH0 N Z\nOKON  OW1 - K OW0 N\nOKONIEWSKI  OW0 - K AA2 - N IY0 - EH1 F S - K IY0\nOKONIEWSKI(2)  OW2 - K AH0 - N UW1 S - K IY0\nOKONSKI  AH0 - K AA1 N - S K IY0\nOKPO  AA1 K - P OW0\nOKRA  OW1 - K R AH0\nOKRAY  AA1 - K R EY0\nOKSANA  AA2 K - S AE1 - N AH0\nOKSANA'S  AA2 K - S AE1 - N AH0 Z\nOKSENBERG  AA1 K - S AH0 N - B ER0 G\nOKUBO  OW0 - K UW1 - B OW0\nOKUDA  OW0 - K UW1 - D AH0\nOKUMA  OW0 - K Y UW1 - M ER0\nOKUMURA  OW0 - K UW0 - M UH1 - R AH0\nOKUN  OW1 - K UW0 N\nOKUNO  OW0 - K Y UW1 - N OW0\nOKURA  OW0 - K UW1 - R AH0\nOKUROWSKI  OW0 - K ER0 - OW1 S - K IY0\nOKWU  AO1 - K W UW0\nOL'  OW1 L\nOLA  OW1 - L AH0\nOLACK  OW1 - L AE0 K\nOLAF  OW1 - L AA0 F\nOLAFSON  AA1 - L AH0 F - S AH0 N\nOLAGUE  OW1 - L AA0 G\nOLAH  AH0 - L AA1\nOLAH(2)  OW1 - L AH0\nOLAJUWON  AH0 - L AY1 - JH UW0 - AA2 N\nOLAJUWON'S  AH0 - L AY1 - JH UW0 - AA2 N Z\nOLAND  AA1 - L AH0 N D\nOLANDER  AA1 - L AH0 N - D ER0\nOLANO  AH0 - L AA1 - N OW0\nOLASKY  OW0 - L AE1 S - K IY0\nOLATHE  OW0 - L AE1 - TH IY0\nOLAUGHLIN  AH0 - L AO1 - K L IH0 N\nOLAY  OW0 - L EY1\nOLAYAN  OW0 - L AY1 - AH0 N\nOLBERDING  OW1 L - B ER0 - D IH0 NG\nOLBRICH  OW1 L - B R IH0 K\nOLCOTT  OW1 L - K AH0 T\nOLCZAK  OW1 L - CH AE0 K\nOLD  OW1 L D\nOLD'S  OW1 L D Z\nOLD-TIMER  OW0 L D - T AY1 - M ER0\nOLD-TIMERS  OW1 L D - T AY1 - M ER0 Z\nOLDAKER  OW1 L - D AH0 - K ER0\nOLDANI  OW0 L - D AA1 - N IY0\nOLDE  OW1 L D\nOLDEN  OW1 L - D AH0 N\nOLDENBURG  OW1 L - D AH0 N - B ER0 G\nOLDENKAMP  OW1 L - D IH0 N - K AE0 M P\nOLDER  OW1 L - D ER0\nOLDEST  OW1 L - D AH0 S T\nOLDFASHIONED  OW2 L D - F AE1 - SH AH0 N D\nOLDFATHER  OW1 L D - F AA2 - DH ER0\nOLDFIELD  OW1 L D - F IY2 L D\nOLDHAM  OW1 L - D AH0 M\nOLDIE  OW1 L - D IY0\nOLDIES  OW1 L - D IY0 Z\nOLDMAN  OW1 L D - M AH0 N\nOLDROYD  OW1 L - D R OY2 D\nOLDS  OW1 L D Z\nOLDSMAR  OW1 L D Z - M AA0 R\nOLDSMOBILE  OW1 L D Z - M OW0 - B IY2 L\nOLDSMOBILE'S  OW1 L D Z - M OW0 - B IY2 L Z\nOLDSMOBILE'S(2)  OW1 L Z - M OW0 - B IY2 L Z\nOLDSMOBILES  OW1 L D Z - M OW0 - B IY2 L Z\nOLDSTER  OW1 L D - S T ER0\nOLDSTERS  OW1 L D - S T ER0 Z\nOLDT  OW1 L T\nOLE  OW1 L\nOLE(2)  OW2 - L EY1\nOLEA  AA1 - L IY0 - AH0\nOLEAN  OW0 - L IY1 N\nOLEANDER  OW1 - L IY0 - AE2 N - D ER0\nOLEANDRIN  OW0 - L IY0 - AE1 N - D R IH0 N\nOLEAR  AA1 - L ER0\nOLEARY  AA1 - L ER0 - IY0\nOLEASTER  OW2 - L IY0 - AE1 - S T ER0\nOLEFIN  OW1 - L AH0 - F IH0 N\nOLEFINS  OW1 - L AH0 - F IH0 N Z\nOLEG  OW1 - L AH0 G\nOLEJNICZAK  AH0 - L EY1 - N IH0 - CH AE0 K\nOLEJNIK  AH0 - L EY1 - N IH0 K\nOLEKSIAK  AH0 - L EH1 K - S IY0 - AE0 K\nOLEKSY  AH0 - L EH1 K - S IY0\nOLEN  AA1 - L AH0 N\nOLENDER  AA1 - L EH0 N - D ER0\nOLENICK  AA1 - L IH0 - N IH0 K\nOLENIK  AA1 - L IH0 - N IH0 K\nOLEO  OW1 - L IY0 - OW2\nOLEOYL  OW2 - L IY0 - OY1 L\nOLEOYLS  OW2 - L IY0 - OY1 L Z\nOLER  OW1 - L ER0\nOLES  OW1 L Z\nOLES(2)  OW2 - L EY1 Z\nOLESEN  AA1 - L IY0 - Z AH0 N\nOLESKE  OW1 - L AH0 S - K IY0\nOLESKY  AH0 - L EH1 S - K IY0\nOLESON  AA1 - L IH0 - S AH0 N\nOLESTRA  OW0 - L EH1 S - T R AH0\nOLEXA  AH0 - L IY1 K - S AH0\nOLEY  OW1 - L IY0\nOLFACTORY  OW0 L - F AE1 K - T ER0 - IY0\nOLGA  OW1 L - G AH0\nOLGUIN  OW1 L - G IH0 N\nOLICK  OW1 - L IH0 K\nOLIFF  AA1 - L IH0 F\nOLIGARCH  OW1 - L IH0 - G AA2 R K\nOLIGARCHS  OW1 - L IH0 - G AA2 R K S\nOLIGARCHY  AA1 - L AH0 - G AA2 R - K IY0\nOLIGER  AA1 - L IH0 - G ER0\nOLIGOCENE  AA1 - L AH0 - G OW0 - S IY2 N\nOLIGOPOLISTIC  OW0 - L IH2 - G AH0 - P OW0 - L IH1 - S T IH0 K\nOLIGOPOLY  AA2 - L IH0 - G AA1 - P AH0 - L IY0\nOLIN  OW1 - L IH0 N\nOLIN'S  OW1 - L IH0 N Z\nOLINDA  OW0 - L IY1 N - D AH0\nOLINDE  AA1 - L IH0 N D\nOLINGER  AA1 - L IH0 - NG ER0\nOLIPHANT  AA1 - L IH0 - F AH0 N T\nOLIVA  OW0 - L IY1 - V AH0\nOLIVARES  OW0 - L IY0 - V AA1 - R EH0 S\nOLIVAREZ  OW0 - L IY0 - V AA1 - R EH0 Z\nOLIVAS  OW0 - L IY1 - V AA0 Z\nOLIVE  AA1 - L AH0 V\nOLIVE(2)  AA1 - L IH0 V\nOLIVEIRA  AA2 - L IH0 - V EY1 - R AH0\nOLIVER  AA1 - L AH0 - V ER0\nOLIVER'S  AA1 - L IH0 - V ER0 Z\nOLIVER(2)  AA1 - L IH0 - V ER0\nOLIVERA  OW0 - L IY0 - V EH1 - R AH0\nOLIVERAS  OW0 - L IY0 - V EH1 - R AA0 Z\nOLIVERI  OW0 - L IY0 - V EH1 - R IY0\nOLIVERIA  AA2 - L IH0 - V IY1 - R IY0 - AH0\nOLIVERIO  AA2 - L IH0 - V IY1 - R IY0 - OW0\nOLIVERO  OW0 - L IY0 - V EH1 - R OW0\nOLIVEROS  OW0 - L IY0 - V EH1 - R OW0 Z\nOLIVES  AA1 - L IH0 V Z\nOLIVETO  OW0 - L IY0 - V EY1 - T OW0\nOLIVETTE  AA1 - L IH0 - V EH1 T\nOLIVETTI  AA2 - L IH0 - V EH1 - T IY0\nOLIVETTI'S  AA2 - L IH0 - V EH1 - T IY0 Z\nOLIVIA  OW0 - L IH1 - V IY0 - AH0\nOLIVIER  OW2 - L IH1 - V IY2 - EY2\nOLIVIERI  OW0 - L IY0 - V IH1 - R IY0\nOLIVINE  AA1 - L AH0 - V IY2 N\nOLIVO  AO0 - L IY1 - V OW0\nOLK  OW1 K\nOLKOWSKI  OW0 L - K AO1 F S - K IY0\nOLLAR  AA1 - L ER0\nOLLER  AA1 - L ER0\nOLLEY  AA1 - L IY0\nOLLIE  AA1 - L IY0\nOLLIE(2)  OW1 - L IY0\nOLLIFF  AA1 - L IH0 F\nOLLILA  AA1 - L IH0 - L AH0\nOLLINGER  AA1 - L IH0 - NG ER0\nOLLIS  AO1 - L IY0 Z\nOLLISON  AA1 - L IH0 - S AH0 N\nOLLY  AA1 - L IY0\nOLMEDA  OW0 L - M EY1 - D AH0\nOLMEDO  OW0 L - M EY1 - D OW0\nOLMERT  OW0 L - M ER0 T\nOLMO  OW1 L - M OW0\nOLMOS  OW1 L - M OW0 Z\nOLMSTEAD  OW1 L M - S T EH2 D\nOLNEY  OW1 L - N IY0\nOLOF  OW1 - L AO0 F\nOLOFSON  AA1 - L AH0 F - S AH0 N\nOLOKUEI  OW2 - L OW0 - K UW1 - IY0\nOLOKUEI'S  OW2 - L OW0 - K UW1 - IY0 Z\nOLOUGHLIN  AH0 - L AW1 K - L IH0 N\nOLOVO  AH0 - L AO1 - V OW0\nOLSEN  OW1 L - S AH0 N\nOLSHAN  OW1 L - SH AH0 N\nOLSHANSKY  OW1 L - SH AH0 N - S K IY0\nOLSHEFSKI  OW0 L - SH EH1 F S - K IY0\nOLSHER  OW1 L - SH ER0\nOLSON  OW1 L - S AH0 N\nOLSON'S  OW1 L - S AH0 N Z\nOLSSON  OW1 L - S AH0 N\nOLSTAD  OW1 L - S T AH0 D\nOLSTEN  OW1 L - S T AH0 N\nOLSZEWSKI  OW0 L - SH EH1 F S - K IY0\nOLT  OW1 L T\nOLTHOFF  OW1 L T - HH AO2 F\nOLTMAN  OW1 L T - M AH0 N\nOLTMANN  OW1 L T - M AH0 N\nOLTMANNS  OW1 L T - M AH0 N Z\nOLUND  AA1 - L AH0 N D\nOLVA  OW1 L - V AH0\nOLVER  OW1 L - V ER0\nOLVERA  OW0 L - V EH1 - R AH0\nOLVEY  OW1 L - V IY0\nOLYMPIA  OW0 - L IH1 M - P IY0 - AH0\nOLYMPIA'S  OW0 - L IH1 M - P IY0 - AH0 Z\nOLYMPIAD  OW0 - L IH1 M - P IY0 - AE2 D\nOLYMPIAN  OW0 - L IH1 M - P IY0 - AH0 N\nOLYMPIANS  OW0 - L IH1 M - P IY0 - AH0 N Z\nOLYMPIAS  OW0 - L IH1 M - P IY0 - AH0 S\nOLYMPIC  OW0 - L IH1 M - P IH0 K\nOLYMPIC'S  OW0 - L IH1 M - P IH0 K S\nOLYMPICS  OW0 - L IH1 M - P IH0 K S\nOLYMPUS  OW0 - L IH1 M - P AH0 S\nOMA  OW1 - M AH0\nOMAAR  OW1 - M AA0 R\nOMAHA  OW1 - M AH0 - HH AA2\nOMAHA'S  OW1 - M AH0 - HH AA2 Z\nOMAHONEY  AA1 - M AH0 - HH AA0 - N IY0\nOMAHONY  AA1 - M AH0 - HH AH0 - N IY0\nOMALLEY  AA1 - M AH0 - L IY0\nOMAN  OW0 - M AA1 N\nOMANI  OW0 - M AA1 - N IY0\nOMANS  OW0 - M AA1 N Z\nOMAR  OW1 - M AA0 R\nOMARA  OW0 - M AA1 - R AH0\nOMARSKA  OW0 - M AA1 R - S K AH0\nOMARY  AH0 - M EH1 - R IY0\nOMBUDSMAN  AA1 M - B AH0 D Z - M AH0 N\nOMDAHL  AA1 M - D AA2 L\nOMEAD  OW0 - M IY1 D\nOMEARA  OW2 - M IY1 - R AH0\nOMEGA  OW0 - M EH1 - G AH0\nOMEGA(2)  OW0 - M EY1 - G AH0\nOMELET  AA1 M - L AH0 T\nOMELETS  AA1 M - L AH0 T S\nOMELIA  OW0 - M EH1 - L IY0 - AH0\nOMEN  OW1 - M AH0 N\nOMENS  OW1 - M AH0 N Z\nOMER  OW1 - M ER0\nOMINOUS  AA1 - M AH0 - N AH0 S\nOMINOUSLY  AA1 - M AH0 - N AH0 S - L IY0\nOMISSION  OW0 - M IH1 - SH AH0 N\nOMISSIONS  OW0 - M IH1 - SH AH0 N Z\nOMIT  OW0 - M IH1 T\nOMITS  OW0 - M IH1 T S\nOMITTED  OW0 - M IH1 - T AH0 D\nOMITTED(2)  OW0 - M IH1 - T IH0 D\nOMITTING  OW0 - M IH1 - T IH0 NG\nOMLOR  AA1 M - L ER0\nOMMEN  AA1 - M AH0 N\nOMMEN(2)  OW1 - M AH0 N\nOMNI  AA1 M - N IY0\nOMNIBANK  AA1 M - N IH0 - B AE2 NG K\nOMNIBOOK  AA1 M - N IH0 - B UH2 K\nOMNIBUS  AA1 M - N AH0 - B AH0 S\nOMNIBUSES  AA1 M - N AH0 - B AH0 - S AH0 Z\nOMNICARE  AA1 M - N IH0 - K EH2 R\nOMNICOM  AA1 M - N IH0 - K AA0 M\nOMNICOM'S  AA1 M - N IH0 - K AA0 M Z\nOMNIPOTENCE  AA0 M - N IH1 - P AH0 - T AH0 N S\nOMNIPOTENT  AA0 M - N IH1 - P AH0 - T AH0 N T\nOMNIPRESENCE  AA2 M - N AH0 - P R EH1 - Z AH0 N S\nOMNIPRESENT  AA2 M - N IH0 - P R EH1 - Z AH0 N T\nOMNISCIENT  AA0 M - N IH1 - SH AH0 N T\nOMNIVOROUS  AA0 M - N IH1 - V ER0 - AH0 S\nOMOHUNDRO  OW0 - M OW0 - HH UW1 N - D R OW0\nOMONIA  AH0 - M OW1 - N IY0 - AH0\nOMONIA(2)  OW1 - M OW0 - N Y AH0\nOMORI  OW0 - M AO1 - R IY0\nOMRON  AA1 M - R AH0 N\nON  AA1 N\nON(2)  AO1 N\nONA  AH0 - N AA1\nONAGERS  AA1 - N AH0 - JH ER0 Z\nONAN  OW1 - N AH0 N\nONASSIS  OW0 - N AE1 - S IH0 S\nONASSIS'  OW0 - N AE1 - S IH0 S\nONASSIS'S  OW0 - N AE1 - S IH0 - S IH0 S\nONATE  OW1 - N EY0 T\nONAWA  OW0 - N AA1 - W AH0\nONBOARD  AA1 N - B AO2 R D\nONCALE  OW0 N - K AA1 - L IY0\nONCE  W AH1 N S\nONCOGEN  AA1 NG - K OW0 - G AH0 N\nONCOGENE  AA1 NG - K OW0 - JH IY2 N\nONCOGENES  AA0 NG - K AA1 - JH EH2 - N IY0 S\nONCOLOGIST  AA0 NG - K AA1 - L AH0 - JH IH0 S T\nONCOLOGISTS  AA0 NG - K AA1 - L AH0 - JH IH0 S T S\nONCOLOGISTS(2)  AA0 NG - K AA1 - L AH0 - JH IH0 S S\nONCOLOGISTS(3)  AA0 NG - K AA1 - L AH0 - JH IH0 S\nONCOLOGY  AA0 NG - K AA1 - L AH0 - JH IY0\nONCOMING  AO1 N - K AH2 - M IH0 NG\nONCOR  AA1 N - K AO2 R\nONDAATJE  AA0 N - D AA1 - T Y AH0\nONDER  AA1 N - D ER0\nONDERDONK  AA1 N - D ER0 - D AH0 NG K\nONDO  AO1 N - D OW0\nONDRACEK  AA1 N - D R AH0 - S EH0 K\nONE  W AH1 N\nONE'S  W AH1 N Z\nONE(2)  HH W AH1 N\nONE-UP-MANSHIP  W AH1 N - AH1 P - M AE1 N - SH IH2 P\nONE-UPMANSHIP  W AH1 N - AH1 P - M AH0 N - SH IH2 P\nONEAL  OW0 - N IY1 L\nONEALL  AA1 - N AH0 L\nONECOMM  W AH1 N - K AA2 M\nONEIDA  OW0 - N AY1 - D AH0\nONEIL  OW0 - N IY1 L\nONEILL  OW0 - N IY1 L\nONENESS  W AH1 N - N AH0 S\nONENESS(2)  W AH1 - N AH0 S\nONEOK  OW1 - N IY0 - AA0 K\nONEROUS  OW1 - N ER0 - AH0 S\nONES  W AH1 N Z\nONES'  W AH1 N Z\nONESELF  W AH2 N - S EH1 L F\nONETIME  W AH1 N - T AY1 M\nONEX  W AH1 - N EH1 K S\nONEX'S  W AH1 - N EH1 K - S IH0 Z\nONEY  OW1 - N IY0\nONEYEAR  W AH1 N - Y IH1 R\nONG  AO1 NG\nONGOING  AA1 N - G OW2 - IH0 NG\nONGOING(2)  AO1 N - G OW2 - IH0 NG\nONGPIN  AO1 NG - P IH0 N\nONION  AH1 - N Y AH0 N\nONIONS  AH1 - N Y AH0 N Z\nONISHI  OW0 - N IY1 - SH IY0\nONKEN  AA1 NG - K AH0 N\nONLEY  AA1 N - L IY0\nONLINE  AO1 N - L AY2 N\nONLINE'S  AO1 N - L AY2 N Z\nONLOOKER  AO1 N - L UH2 - K ER0\nONLOOKERS  AO1 N - L UH2 - K ER0 Z\nONLY  OW1 N - L IY0\nONNEN  AA1 - N AH0 N\nONNI  AA1 - N IY0\nONNO  AA1 - N OW0\nONO  OW1 - N OW0\nONODA  OW0 - N OW1 - D ER0\nONOFRE  OW0 - N AO1 - F R IY0\nONOFRIO  OW0 - N OW1 - F R IY0 - OW0\nONOMASTIC  AA2 - N AH0 - M AE1 - S T IH0 K\nONOMASTICS  AA2 - N AH0 - M AE1 - S T IH0 K S\nONONDAGA  AA2 - N AH0 N - D AO1 - G AH0\nONORATO  OW0 - N AO0 - R AA1 - T OW0\nONRUSHING  AA1 N - R AH2 - SH IH0 NG\nONS  AA1 N Z\nONSCREEN  AA2 N - S K R IY1 N\nONSET  AA1 N - S EH2 T\nONSET(2)  AO1 N - S EH2 T\nONSHORE  AA1 N - SH AO2 R\nONSITE  AA1 N - S AY1 T\nONSLAUGHT  AO1 N - S L AO2 T\nONSLOW  AA1 N - S L OW0\nONSTAD  AA1 N - S T AH0 D\nONSTAGE  AA2 N - S T EY1 JH\nONSTOTT  AA1 N - S T AH0 T\nONTARIO  AA0 N - T EH1 - R IY0 - OW0\nONTARIO'S  AA0 N - T EH1 - R IY0 - OW0 Z\nONTIVEROS  OW0 N - T IY0 - V EH1 - R OW0 Z\nONTKO  AA1 N T - K OW0\nONTO  AA1 N - T UW0\nONTO(2)  AO1 N - T UW0\nONTOGENY  AA0 N - T AA1 - JH AH0 - N IY0\nONTOLOGICAL  AA2 N - T AH0 - L AA1 - JH IH0 - K AH0 L\nONTOLOGY  AA0 N - T AA1 - L AH0 - JH IY0\nONUS  OW1 - N AH0 S\nONWARD  AO1 N - W ER0 D\nONWARDS  AA1 N - W ER0 D Z\nONYX  AA1 - N IH0 K S\nOODLE  UW1 - D AH0 L\nOODLES  UW1 - D AH0 L Z\nOOH  UW1\nOOHS  UW1 Z\nOOLEY  UW1 - L IY0\nOOLONG  UW1 - L AO0 NG\nOOMPH  UW1 M F\nOONA  UW1 - N AH0\nOOOH  UW1\nOOOHS  UW1 Z\nOOOHS(2)  OW1 Z\nOOPS  UW1 P S\nOOTEN  OW0 - OW0 - T EY1 - AH0 N\nOOZE  UW1 Z\nOOZED  UW1 Z D\nOOZES  UW1 - Z IH0 Z\nOOZING  UW1 - Z IH0 NG\nOP  AA1 P\nOP'S  AA1 P S\nOP(2)  AO1 P\nOPACITY  OW0 - P AE1 - S AH0 - T IY0\nOPAL  OW1 - P AH0 L\nOPAL'S  OW1 - P AH0 L Z\nOPALINA  OW0 - P AA0 - L IY1 - N AH0\nOPALINE  OW1 - P AH0 - L IY2 N\nOPALINES  OW1 - P AH0 - L IY2 N Z\nOPALKA  AH0 - P AA1 L - K AH0\nOPAQUE  OW0 - P EY1 K\nOPAX  OW1 - P AE2 K S\nOPCOM  AA1 P - K AA0 M\nOPDAHL  AA1 P - D AA2 L\nOPDYKE  AA1 P - D AY2 K\nOPEC  OW1 - P EH2 K\nOPEC'S  OW1 - P EH2 K S\nOPEL  OW1 - P AH0 L\nOPEL'S  OW1 - P AH0 L Z\nOPEN  OW1 - P AH0 N\nOPENED  OW1 - P AH0 N D\nOPENER  OW1 - P AH0 N - ER0\nOPENERS  OW1 - P AH0 N - ER0 Z\nOPENING  OW1 - P AH0 N - IH0 NG\nOPENINGS  OW1 - P AH0 N - IH0 NG Z\nOPENLY  OW1 - P AH0 N - L IY0\nOPENNESS  OW1 - P AH0 N - N AH0 S\nOPENNESS(2)  OW1 - P AH0 N - AH0 S\nOPENS  OW1 - P AH0 N Z\nOPENSHAW  OW1 - P AH0 N - SH AO2\nOPENWORK  OW1 - P AH0 N - W ER2 K\nOPERA  AA1 - P R AH0\nOPERA'S  AA1 - P R AH0 Z\nOPERABLE  AA1 - P ER0 - AH0 - B AH0 L\nOPERANDI  AA2 - P ER0 - AE1 N - D IY0\nOPERANDI(2)  AA2 - P ER0 - AE1 N - D AY0\nOPERANDI(3)  AA2 - P ER0 - EH1 N - D AY0\nOPERANT  AA1 - P ER0 - AH0 N T\nOPERAS  AA1 - P R AH0 Z\nOPERATE  AA1 - P ER0 - EY2 T\nOPERATE(2)  AO1 - P ER0 - EY2 T\nOPERATED  AA1 - P ER0 - EY2 - T AH0 D\nOPERATES  AA1 - P ER0 - EY2 T S\nOPERATIC  AA2 - P ER0 - AE1 - T IH0 K\nOPERATING  AA1 - P ER0 - EY2 - T IH0 NG\nOPERATING(2)  AO1 - P ER0 - EY2 - T IH0 NG\nOPERATION  AA2 - P ER0 - EY1 - SH AH0 N\nOPERATION'S  AA2 - P ER0 - EY1 - SH AH0 N Z\nOPERATIONAL  AA2 - P ER0 - EY1 - SH AH0 - N AH0 L\nOPERATIONALLY  AA1 - P ER0 - EY1 - SH AH0 N - AH0 - L IY0\nOPERATIONALLY(2)  AA1 - P ER0 - EY1 SH - N AH0 - L IY0\nOPERATIONS  AA2 - P ER0 - EY1 - SH AH0 N Z\nOPERATIONS'  AA2 - P ER0 - EY1 - SH AH0 N Z\nOPERATIVE  AA1 - P ER0 - AH0 - T IH0 V\nOPERATIVES  AA1 - P ER0 - AH0 - T IH0 V Z\nOPERATOR  AA1 - P ER0 - EY2 - T ER0\nOPERATOR'S  AA1 - P ER0 - EY2 - T ER0 Z\nOPERATORS  AA1 - P ER0 - EY2 - T ER0 Z\nOPERATORS'  AO1 - P ER0 - EY2 - T ER0 Z\nOPERATORS(2)  AO1 - P ER0 - EY2 - T ER0 Z\nOPERE  OW0 - P EH1 R\nOPERETTA  AA2 - P ER0 - EH1 - T AH0\nOPERETTAS  AA2 - P ER0 - EH1 - T AH0 Z\nOPFER  AA1 P - F ER0\nOPHEIM  AA1 P - HH AY2 M\nOPHELIA  AH0 - F IY1 - L Y AH0\nOPHTHALMIC  AA0 F - TH AE1 L - M IH0 K\nOPHTHALMOLOGIST  AA2 P - TH AH0 - M AA1 - L AH0 - JH IH0 S T\nOPHTHALMOLOGIST(2)  AA2 F - TH AH0 - M AA1 - L AH0 - JH IH0 S T\nOPHTHALMOLOGISTS  AA2 P - TH AH0 - M AA1 - L AH0 - JH IH0 S T S\nOPHTHALMOLOGISTS(2)  AA2 P - TH AH0 - M AA1 - L AH0 - JH IH0 S S\nOPHTHALMOLOGISTS(3)  AA2 P - TH AH0 - M AA1 - L AH0 - JH IH0 S\nOPHTHALMOLOGISTS(4)  AA2 F - TH AH0 - M AA1 - L AH0 - JH IH0 S T S\nOPHTHALMOLOGISTS(5)  AA2 F - TH AH0 - M AA1 - L AH0 - JH IH0 S S\nOPHTHALMOLOGISTS(6)  AA2 F - TH AH0 - M AA1 - L AH0 - JH IH0 S\nOPHTHALMOLOGY  AA2 P - TH AH0 - M AA1 - L AH0 - JH IY0\nOPHTHALMOLOGY(2)  AA2 F - TH AH0 - M AA1 - L AH0 - JH IY0\nOPHTHALMOSCOPE  AA0 F - TH AE1 L - M AH0 - S K OW2 P\nOPHULS  OW1 - F AH0 L Z\nOPIATE  OW1 - P IY0 - AH0 T\nOPIATES  OW1 - P IY0 - AH0 T S\nOPIC  AA1 - P IH0 K\nOPIC'S  AA1 - P IH0 K S\nOPIE  OW1 - P IY0\nOPIELA  OW2 - P IY1 - L AH0\nOPINE  OW0 - P AY1 N\nOPINED  OW0 - P AY1 N D\nOPINES  OW0 - P AY1 N Z\nOPINING  OW0 - P AY1 - N IH0 NG\nOPINION  AH0 - P IH1 - N Y AH0 N\nOPINIONATE  AH0 - P IH1 - N Y AH0 - N EY2 T\nOPINIONATED  AH0 - P IH1 - N Y AH0 - N EY2 - T IH0 D\nOPINIONS  AH0 - P IH1 - N Y AH0 N Z\nOPITZ  AA1 - P IH0 T S\nOPIUM  OW1 - P IY0 - AH0 M\nOPLAND  AA1 P - L AH0 N D\nOPLE  OW1 - P AH0 L\nOPLINGER  OW1 - P AH0 L - IH0 - NG ER0\nOPLINGER(2)  OW1 P - L IH0 - NG ER0\nOPOSSUM  OW0 - P AA1 - S AH0 M\nOPP  AA1 P\nOPPEDISANO  OW0 - P EH0 - D IY0 - S AA1 - N OW0\nOPPEL  AA1 - P AH0 L\nOPPELT  AA1 - P IH0 L T\nOPPENHEIM  AA1 - P IH0 N - HH AY2 M\nOPPENHEIMER  AA1 - P AH0 N - HH AY2 - M ER0\nOPPENHEIMER'S  AA1 - P AH0 N - HH AY2 - M ER0 Z\nOPPENHEIMERS  AA1 - P AH0 N - HH AY2 - M ER0 Z\nOPPENS  AA1 - P AH0 N Z\nOPPER  AA1 - P ER0\nOPPERMAN  AA1 - P ER0 - M AH0 N\nOPPERMANN  AA1 - P ER0 - M AH0 N\nOPPLER  AO1 P - L ER0\nOPPLIGER  AA1 P - L IH0 - G ER0\nOPPONENT  AH0 - P OW1 - N AH0 N T\nOPPONENT'S  AH0 - P OW1 - N AH0 N T S\nOPPONENTS  AH0 - P OW1 - N AH0 N T S\nOPPONENTS'  AH0 - P OW1 - N AH0 N T S\nOPPORTUNE  AA2 - P ER0 - T UW1 N\nOPPORTUNISM  AA2 - P ER0 - T UW1 - N IH2 - Z AH0 M\nOPPORTUNIST  AA2 - P ER0 - T UW1 - N IH0 S T\nOPPORTUNISTIC  AA2 - P ER0 - T UW2 - N IH1 - S T IH0 K\nOPPORTUNISTS  AA2 - P ER0 - T UW1 - N IH0 S T S\nOPPORTUNISTS(2)  AA2 - P ER0 - T UW1 - N IH0 S S\nOPPORTUNISTS(3)  AA2 - P ER0 - T UW1 - N IH0 S\nOPPORTUNITIES  AA2 - P ER0 - T UW1 - N AH0 - T IY0 Z\nOPPORTUNITY  AA2 - P ER0 - T UW1 - N AH0 - T IY0\nOPPOSE  AH0 - P OW1 Z\nOPPOSED  AH0 - P OW1 Z D\nOPPOSES  AH0 - P OW1 - Z IH0 Z\nOPPOSING  AH0 - P OW1 - Z IH0 NG\nOPPOSITE  AA1 - P AH0 - Z AH0 T\nOPPOSITE(2)  AA1 P - Z AH0 T\nOPPOSITES  AA1 - P AH0 - Z AH0 T S\nOPPOSITION  AA2 - P AH0 - Z IH1 - SH AH0 N\nOPPOSITION'S  AA2 - P AH0 - Z IH1 - SH AH0 N Z\nOPPRESS  AH0 - P R EH1 S\nOPPRESSED  AH0 - P R EH1 S T\nOPPRESSING  AH0 - P R EH1 - S IH0 NG\nOPPRESSION  AH0 - P R EH1 - SH AH0 N\nOPPRESSIONS  AH0 - P R EH1 - SH AH0 N Z\nOPPRESSIVE  AH0 - P R EH1 - S IH0 V\nOPPRESSOR  AH0 - P R EH1 - S ER0\nOPPRESSORS  AH0 - P R EH1 - S ER0 Z\nOPPROBRIUM  AH0 - P R OW1 - B R IY0 - AH0 M\nOPRAH  OW1 - P R AH0\nOPRAH'S  OW1 - P R AH0 Z\nOPRY  AA1 - P R IY0\nOPRYLAND  AA1 - P R IY0 - L AH0 N D\nOPS  AA1 P S\nOPSAHL  AA1 P - S AA0 L\nOPSAL  AA1 P - S AH0 L\nOPT  AA1 P T\nOPTATION  AA1 P - T EY1 - SH AH0 N\nOPTED  AA1 P - T IH0 D\nOPTEK  AA1 P - T EH2 K\nOPTIC  AA1 P - T IH0 K\nOPTICA  AA1 P - T IH0 - K AH0\nOPTICAL  AA1 P - T IH0 - K AH0 L\nOPTICAL'S  AA1 P - T IH0 - K AH0 L Z\nOPTICALLY  AA1 P - T IH0 K - L IY0\nOPTICIAN  AA0 P - T IH1 - SH AH0 N\nOPTICIANS  AA0 P - T IH1 - SH AH0 N Z\nOPTICS  AA1 P - T IH0 K S\nOPTIMA  AA1 P - T AH0 - M AH0\nOPTIMAL  AA1 P - T AH0 - M AH0 L\nOPTIMISM  AA1 P - T AH0 - M IH2 - Z AH0 M\nOPTIMIST  AA1 P - T AH0 - M IH0 S T\nOPTIMISTIC  AA2 P - T AH0 - M IH1 - S T IH0 K\nOPTIMISTICALLY  AA2 P - T IH0 - M IH1 - S T IH0 - K AH0 - L IY0\nOPTIMISTICALLY(2)  AA2 P - T IH0 - M IH1 - S T IH0 K - L IY0\nOPTIMISTS  AA1 P - T AH0 - M IH0 S T S\nOPTIMISTS(2)  AA1 P - T AH0 - M IH0 S S\nOPTIMISTS(3)  AA1 P - T AH0 - M IH0 S\nOPTIMIZATION  AA0 P - T AH0 - M AH0 - Z EY1 - SH AH0 N\nOPTIMIZE  AA1 P - T AH0 - M AY2 Z\nOPTIMUM  AA1 P - T AH0 - M AH0 M\nOPTING  AA1 P - T IH0 NG\nOPTION  AA1 P - SH AH0 N\nOPTION'S  AA1 P - SH AH0 N Z\nOPTION(2)  AO1 P - SH AH0 N\nOPTIONAL  AA1 P - SH AH0 - N AH0 L\nOPTIONAL(2)  AO1 P - SH AH0 - N AH0 L\nOPTIONED  AA1 P - SH AH0 N D\nOPTIONED(2)  AO1 P - SH AH0 N D\nOPTIONS  AA1 P - SH AH0 N Z\nOPTIONS'  AA1 P - SH AH0 N Z\nOPTIONS(2)  AO1 P - SH AH0 N Z\nOPTO  AA1 P - T OW0\nOPTOMETRIC  AA2 P - T OW0 - M EH1 - T R IH0 K\nOPTOMETRIST  AA0 P - T AA1 - M AH0 - T R IH0 S T\nOPTOMETRISTS  AA0 P - T AA1 - M AH0 - T R IH0 S T S\nOPTOMETRISTS(2)  AA0 P - T AA1 - M AH0 - T R IH0 S S\nOPTOMETRISTS(3)  AA0 P - T AA1 - M AH0 - T R IH0 S\nOPTOMETRY  AA0 P - T AA1 - M AH0 - T R IY0\nOPTS  AA1 P T S\nOPTUS  AA1 P - T AH0 S\nOPULENCE  AA1 - P Y AH0 - L AH0 N S\nOPULENT  AA1 - P Y AH0 - L AH0 N T\nOPUS  OW1 - P AH0 S\nOQUENDO  OW0 - K W EH1 N - D OW0\nOQUIN  OW0 - K W IY1 N\nOQUINN  OW0 - K W IY1 N\nOR  AO1 R\nOR(2)  ER0\nORA  AO1 - R AH0\nORABEL  AO0 - R AA0 - B EH1 L\nORABELLE  AO1 - R AH0 - B AH0 L\nORACLE  AO1 - R AH0 - K AH0 L\nORACLE'S  AO1 - R AH0 - K AH0 L Z\nORACLES  AO1 - R AH0 - K AH0 L Z\nORADOUR  AO1 - R AH0 - D AO2 R\nORAFLEX  AO1 - R AH0 - F L EH2 K S\nORAHOOD  AO1 - R AH0 - HH UH2 D\nORAL  AO1 - R AH0 L\nORALIA  AO0 - R AA1 - L IY0 - AH0\nORALIE  AO1 - R AH0 - L IY0\nORALLY  AO1 - R AH0 - L IY0\nORAM  AO1 - R AH0 M\nORAN  AO0 - R AA1 N\nORAND  AO1 - R AH0 N D\nORANGE  AO1 - R AH0 N JH\nORANGE(2)  AO1 - R IH0 N JH\nORANGEBURG  AO1 - R AH0 N JH - B ER0 G\nORANGES  AO1 - R AH0 N - JH AH0 Z\nORANGES(2)  AO1 - R IH0 N - JH IH0 Z\nORANGINA  AO0 - R AE0 N - JH IY1 - N ER0\nORANGINA(2)  AO0 - R AE0 N - JH IY1 - N AH0\nORANGUTAN  AO0 - R AE1 NG - AH0 - T AE0 N\nORANGUTAN'S  AO0 - R AE1 NG - AH0 - T AE0 N Z\nORANGUTAN'S(2)  AO0 - R AE1 NG - AH0 - T AA0 N Z\nORANGUTAN(2)  AO0 - R AE1 NG - AH0 - T AA0 N\nORANGUTANS  AO0 - R AE1 NG - AH0 - T AE0 N Z\nORANGUTANS(2)  AO0 - R AE1 NG - AH0 - T AA0 N Z\nORASURE  AO1 - R AH2 - SH UH2 R\nORATION  AO0 - R EY1 - SH AH0 N\nORATIONS  AO0 - R EY1 - SH AH0 N Z\nORATOR  AO1 - R AH0 - T ER0\nORATORICAL  AO2 - R AH0 - T AO1 - R AH0 - K AH0 L\nORATORIO  AA2 - R AH0 - T AO1 - R IY0 - OW0\nORATORS  AO1 - R AH0 - T ER0 Z\nORATORY  AO1 - R AH0 - T AO2 - R IY0\nORAVEC  AO0 - R AA1 - V IH0 K\nORAVETZ  AO1 - R AH0 - V IH0 T S\nORB  AO1 R B\nORBACH  AO1 R - B AA0 K\nORBAN  AO1 R - B AH0 N\nORBANCO  AO0 R - B AE1 NG - K OW0\nORBEN  AO1 R - B AH0 N\nORBIN  AO1 R - B IH0 N\nORBIS  AO1 R - B IH0 S\nORBIT  AO1 R - B AH0 T\nORBITAL  AO1 R - B AH0 - T AH0 L\nORBITED  AO1 R - B AH0 - T AH0 D\nORBITER  AO1 R - B AH0 - T ER0\nORBITERS  AO1 R - B AH0 - T ER0 Z\nORBITING  AO1 R - B AH0 - T IH0 NG\nORBITS  AO1 R - B AH0 T S\nORCA  AO1 R - K AH0\nORCAS  AO1 R - K AH0 S\nORCHARD  AO1 R - CH ER0 D\nORCHARDS  AO1 R - CH ER0 D Z\nORCHESTRA  AO1 R - K AH0 S - T R AH0\nORCHESTRA'S  AO1 R - K AH0 S - T R AH0 Z\nORCHESTRAL  AO0 R - K EH1 S - T R AH0 L\nORCHESTRALLY  AO0 R - K EH1 S - T R AH0 - L IY0\nORCHESTRAS  AO1 R - K AH0 S - T R AH0 Z\nORCHESTRATE  AO1 R - K IH0 - S T R EY2 T\nORCHESTRATED  AO1 R - K IH0 - S T R EY2 - T IH0 D\nORCHESTRATES  AO1 R - K AH0 - S T R EY2 T S\nORCHESTRATING  AO1 R - K IH0 - S T R EY2 - T IH0 NG\nORCHESTRATION  AO2 R - K AH0 S - T R EY1 - SH AH0 N\nORCHESTRATIONS  AO2 R - K AH0 S - T R EY1 - SH AH0 N Z\nORCHID  AO1 R - K AH0 D\nORCHIDS  AO1 R - K AH0 D Z\nORCUTT  AO1 R - K AH0 T\nORD  AO1 R D\nORDAIN  AO0 R - D EY1 N\nORDAINED  AO0 R - D EY1 N D\nORDAINING  AO0 R - D EY1 - N IH0 NG\nORDAZ  AO1 R - D AA0 Z\nORDEAL  AO0 R - D IY1 L\nORDEALS  AO0 R - D IY1 L Z\nORDELLA  AO2 R - D EH1 - L AH0\nORDER  AO1 R - D ER0\nORDER'S  AO1 R - D ER0 Z\nORDERED  AO1 R - D ER0 D\nORDERING  AO1 R - D ER0 - IH0 NG\nORDERLINESS  AO1 R - D ER0 - L IY0 - N AH0 S\nORDERLY  AO1 R - D ER0 - L IY0\nORDERS  AO1 R - D ER0 Z\nORDINANCE  AO1 R - D AH0 - N AH0 N S\nORDINANCES  AO1 R - D AH0 - N AH0 N - S IH0 Z\nORDINARIES  AO1 R - D AH0 - N EH2 - R IY0 Z\nORDINARILY  AO2 R - D AH0 - N EH1 - R AH0 - L IY0\nORDINARY  AO1 R - D AH0 - N EH2 - R IY0\nORDINATION  AO2 R - D AH0 - N EY1 - SH AH0 N\nORDIWAY  AO1 R - D IY0 - W EY0\nORDNANCE  AO1 R D - N AH0 N S\nORDNANCE'S  AO1 R D - N AH0 N - S IH0 Z\nORDONEZ  AO0 R - D OW1 - N EH0 Z\nORDOYNE  AO1 R - D OY0 N\nORDWAY  AO1 R D - W EY0\nORE  AO1 R\nOREA  ER0 - IY1 - AH0\nOREAR  ER0 - IH1 R\nOREBAUGH  AO0 - R EH1 - B AO0\nOREFFICE  AO0 - R EH1 - F IH0 S\nOREFICE  AO0 - R EH1 - F AY0 S\nOREGAN  AO0 - R EH1 - G AH0 N\nOREGANO  AO2 - R EH1 - G AH0 - N OW2\nOREGANO(2)  ER0 - EH1 - G AH0 - N OW2\nOREGON  AO1 - R AH0 - G AH0 N\nOREGON'S  AO1 - R AH0 - G AH0 N Z\nOREGON'S(2)  AO1 - R AH0 - G AA2 N Z\nOREGON(2)  AO1 - R AH0 - G AA2 N\nOREGONIAN  AO2 - R AH0 - G OW1 - N IY0 - AH0 N\nOREGONIANS  AO2 - R AH0 - G OW1 - N IY0 - AH0 N Z\nOREILLY  AO1 - R AH0 - L IY0\nOREL  AO1 - R AH0 L\nORELA  AO0 - R EH1 - L AH0\nORELIA  AO0 - R EH1 - L IY0 - AH0\nORELLANA  AO0 - R EH0 - L AE1 - N AH0\nOREM  AO1 - R IH0 M\nOREN  AO1 - R AH0 N\nORENDA  AO0 - R EH1 N - D AH0\nORENDORFF  AO1 - R IH0 N - D AO0 R F\nORENS  AO1 - R AH0 N Z\nORENSTEIN  AO1 - R AH0 N - S T AY0 N\nORENSTEIN(2)  AO1 - R AH0 N - S T IY0 N\nORENTHAL  AO1 - R AH0 N - TH AA2 L\nOREO  AO1 - R IY0 - OW0\nORES  AO1 R Z\nORESKOVICH  AO0 - R EH1 - S K AH0 - V IH0 CH\nORESTES  AO0 - R EH1 - S T IY0 Z\nORF  AO1 R F\nORFIELD  AO1 R - F IY0 L D\nORFORD  AO1 R - F ER0 D\nORG  AO1 R G\nORGAN  AO1 R - G AH0 N\nORGANELLES  AO2 R - G AH0 - N EH1 L Z\nORGANIC  AO0 R - G AE1 - N IH0 K\nORGANICALLY  AO0 R - G AE1 - N IH0 K - L IY0\nORGANISATION  AO2 R - G AH0 - N IH0 - Z EY1 - SH AH0 N\nORGANISM  AO1 R - G AH0 - N IH2 - Z AH0 M\nORGANISM'S  AO1 R - G AH0 - N IH2 - Z AH0 M Z\nORGANISMIC  AO2 R - G AH0 - N IH1 Z - M IH0 K\nORGANISMS  AO1 R - G AH0 - N IH2 - Z AH0 M Z\nORGANIST  AO1 R - G AH0 - N AH0 S T\nORGANIZATION  AO2 R - G AH0 - N AH0 - Z EY1 - SH AH0 N\nORGANIZATION'S  AO2 R - G AH0 - N IH0 - Z EY1 - SH AH0 N Z\nORGANIZATIONAL  AO2 R - G AH0 - N AH0 - Z EY1 - SH AH0 - N AH0 L\nORGANIZATIONS  AO2 R - G AH0 - N AH0 - Z EY1 - SH AH0 N Z\nORGANIZE  AO1 R - G AH0 - N AY2 Z\nORGANIZED  AO1 R - G AH0 - N AY2 Z D\nORGANIZER  AO1 R - G AH0 - N AY2 - Z ER0\nORGANIZERS  AO1 R - G AH0 - N AY2 - Z ER0 Z\nORGANIZES  AO1 R - G AH0 - N AY2 - Z IH0 Z\nORGANIZING  AO1 R - G AH0 - N AY2 - Z IH0 NG\nORGANOGENESIS  AO2 R - G AH0 - N OW0 - JH EH1 - N AH0 - S IH0 S\nORGANS  AO1 R - G AH0 N Z\nORGANUM  AO1 R - G AH0 - N AH0 M\nORGASM  AO1 R - G AE0 - Z AH0 M\nORGASMS  AO1 R - G AE0 - Z AH0 M Z\nORGEL  AO1 R - G AH0 L\nORGERON  AO1 R - G ER0 - AH0 N\nORGIES  AO1 R - JH IY0 Z\nORGILL  AO1 R - JH AH0 L\nORGOTEIN  AO1 R - G OW0 - T AY2 N\nORGY  AO1 R - JH IY0\nORI  AO1 - R IY0\nORIANA  AO0 - R IY0 - AE1 - N AH0\nORICK  AO1 - R IH0 K\nORIELDA  AO0 - R IY1 L - D AH0\nORIELLE  AO1 - R IY0 - EH0 L\nORIENT  AO1 - R IY0 - EH2 N T\nORIENTAL  AO2 - R IY0 - EH1 N - T AH0 L\nORIENTAL(2)  AO2 - R IY0 - EH1 - N AH0 L\nORIENTALS  AO2 - R IY0 - EH1 N - T AH0 L Z\nORIENTALS(2)  AO2 - R IY0 - EH1 - N AH0 L Z\nORIENTATED  AO1 - R IY0 - AH0 N - T EY2 - T IH0 D\nORIENTATION  AO2 - R IY0 - EH0 N - T EY1 - SH AH0 N\nORIENTATIONS  AO2 - R IY0 - EH0 N - T EY1 - SH AH0 N Z\nORIENTED  AO1 - R IY0 - EH2 N - T AH0 D\nORIENTED(2)  AO1 - R IY0 - EH2 N - T IH0 D\nORIFICE  AO1 - R AH0 - F AH0 S\nORIFICES  AO1 - R AH0 - F AH0 - S AH0 Z\nORIGIN  AO1 - R AH0 - JH AH0 N\nORIGINAL  ER0 - IH1 - JH AH0 - N AH0 L\nORIGINALITY  ER0 - IH2 - JH AH0 - N AE1 - L IH0 - T IY0\nORIGINALLY  ER0 - IH1 - JH AH0 - N AH0 - L IY0\nORIGINALLY(2)  ER0 - IH1 JH - N AH0 - L IY0\nORIGINALS  ER0 - IH1 - JH AH0 - N AH0 L Z\nORIGINATE  ER0 - IH1 - JH AH0 - N EY2 T\nORIGINATED  ER0 - IH1 - JH AH0 - N EY2 - T AH0 D\nORIGINATED(2)  AO0 - R IH1 - JH AH0 - N EY2 - T IH0 D\nORIGINATES  ER0 - IH1 - JH AH0 - N EY2 T S\nORIGINATING  ER0 - IH1 - JH AH0 - N EY2 - T IH0 NG\nORIGINATION  ER0 - IH2 - JH AH0 - N EY1 - SH AH0 N\nORIGINATIONS  ER0 - IH2 - JH AH0 - N EY1 - SH AH0 N Z\nORIGINATOR  ER0 - IH1 - JH AH0 - N EY2 - T ER0\nORIGINATORS  ER0 - IH1 - JH AH0 - N EY2 - T ER0 Z\nORIGINS  AO1 - R AH0 - JH IH0 N Z\nORILEY  AO1 - R IH0 - L IY0\nORILEY(2)  OW0 - R AY1 - L IY0\nORILLA  AO0 - R IH1 - L AH0\nORIN  AO1 - R IH0 N\nORINDA  ER0 - IH1 N - D AH0\nORINOCO  AO2 - R AH0 - N OW1 - K OW0\nORIOLA  AO0 - R IY0 - OW1 - L AH0\nORIOLE  AO1 - R IY0 - OW2 L\nORIOLES  AO1 - R IY0 - OW2 L Z\nORIOLES'  AO1 - R IY0 - OW2 L Z\nORION  OW0 - R AY1 - AH0 N\nORION'S  OW0 - R AY1 - AH0 N Z\nORION'S(2)  AO0 - R AY1 - AH0 N Z\nORION(2)  AO0 - R AY1 - AH0 N\nORIORDAN  OW0 - R IH1 R - D AH0 N\nORIORDAN(2)  AO0 - R IH1 R - D AH0 N\nORITZ  AO1 - R IH0 T S\nORIX  AO1 - R IH0 K S\nORKEM  AO1 R - K AH0 M\nORKIN  AO1 R - K IH0 N\nORKNEY  AO1 R K - N IY0\nORKY  AO1 R - K IY0\nORLAN  AO1 R - L AH0 N\nORLAND  AO1 R - L AH0 N D\nORLANDA  AO0 R - L AA1 N - D AH0\nORLANDI  AO0 R - L AA1 N - D IY0\nORLANDO  AO0 R - L AE1 N - D OW0\nORLANDO'S  AO0 R - L AE1 N - D OW0 Z\nORLEAN  AO1 R - L IY0 - AH0 N\nORLEAN'S  AO1 R - L IY0 - AH0 N Z\nORLEAN'S(2)  AO1 R - L IY0 N Z\nORLEANIAN  AO2 R - L IY0 - AH1 - N IY0 - AH0 N\nORLEANIANS  AO2 R - L IY0 - AH1 - N IY0 - AH0 N Z\nORLEANS  AO1 R - L IY0 - AH0 N Z\nORLEANS(2)  AO1 R - L IY0 N Z\nORLENA  AO1 R - L IH0 - N AH0\nORLENE  AO1 R - L IY2 N\nORLICH  AO1 R - L IH0 K\nORLICK  AO1 R - L IH0 K\nORLOFF  AO1 R - L AO0 F\nORLOSKI  AO0 R - L AW1 S - K IY0\nORLOSKY  AO0 R - L OW1 S - K IY0\nORLOWSKI  AO0 R - L AO1 F S - K IY0\nORLY  AO1 R - L IY0\nORMAN  AO1 R - M AH0 N\nORMAND  AO1 R - M AH0 N D\nORME  AO1 R M\nORMEROD  AO1 R - M ER0 - AH0 D\nORMES  AO1 R M Z\nORMISTON  AO1 R - M IH0 - S T AA0 N\nORMOND  AO1 R - M AH0 N D\nORMONDE  AO1 R - M AH0 N D\nORMSBEE  AO1 R M Z - B IY0\nORMSBY  AO1 R M Z - B IY0\nORN  AO1 R N\nORNA  AO1 R - N AH0\nORNAMENT  AO1 R - N AH0 - M AH0 N T\nORNAMENTAL  AO2 R - N AH0 - M EH1 N - T AH0 L\nORNAMENTATION  AO2 R - N AH0 - M EH0 N - T EY1 - SH AH0 N\nORNAMENTED  AO1 R - N AH0 - M EH2 N - T IH0 D\nORNAMENTS  AO1 R - N AH0 - M AH0 N T S\nORNATE  AO0 R - N EY1 T\nORNDA  AO1 R N - D AH0\nORNDOFF  AO1 R N - D AO0 F\nORNDORFF  AO1 R N - D AO0 R F\nORNE  AO1 R N\nORNELAS  AO1 R - N IH0 - L AH0 Z\nORNELLA  AO0 R - N EH1 - L AH0\nORNELLAS  AO0 R - N EH1 - L AH0 Z\nORNER  AO1 R - N ER0\nORNERY  AO1 R - N ER0 - IY0\nORNETTE  AO2 R - N EH1 T\nORNISH  AO1 R - N IH0 SH\nORNITHOLOGICAL  AO2 R - N IH0 - TH AH0 - L AO1 - JH IH0 - K AH0 L\nORNITHOLOGY  AO2 R - N IH0 - TH AA1 - L AH0 - JH IY0\nORNSTEIN  AO1 R N - S T AY0 N\nORNSTEIN(2)  AO1 R N - S T IY0 N\nORO  AO1 - R OW0\nOROARK  AO1 - R AO0 R K\nOROGENIC  AO2 - R AH0 - JH EH1 - N IH0 K\nOROGIL  AO1 - R OW0 - G IH2 L\nOROGRAPHIC  AO2 - R AH0 - G R AE1 - F IH0 K\nORONA  AO0 - R OW1 - N AH0\nOROPEZA  AO0 - R OW0 - P EH1 - Z AH0\nOROS  AO1 - R OW0 Z\nOROSCO  AO0 - R OW1 - S K OW0\nOROSZ  AO1 - R AH0 SH\nOROURKE  ER0 - UH1 R K\nOROZCO  AO0 - R OW1 Z - K OW0\nORPAH  AO1 R - P AA0\nORPHAN  AO1 R - F AH0 N\nORPHANAGE  AO1 R - F AH0 - N AH0 JH\nORPHANAGES  AO1 R - F AH0 - N IH0 - JH IH0 Z\nORPHANED  AO1 R - F AH0 N D\nORPHANING  AO1 R - F AH0 - N IH0 NG\nORPHANS  AO1 R - F AH0 N Z\nORPHEE  AO1 R - F IY0\nORPHEUM  AO1 R - F IY0 - UW0 M\nORPHEUS  AO1 R - F IY0 - AH0 S\nORPHIC  AO1 R - F IH0 K\nORPIMENT  AO1 R - P AH0 - M AH0 N T\nORR  AO1 R\nORRAN  AO0 - R AA1 N\nORRELL  AO0 - R EY1 L\nORREN  AO1 - R AH0 N\nORRERY  AO1 - R ER0 - IY0\nORRICK  AO1 - R IH0 K\nORRICO  AO0 - R IY1 - K OW0\nORRIN  AO1 - R IH0 N\nORRIS  AO1 - R IH0 S\nORRISON  AO1 - R IH0 - S AH0 N\nORSA  AO1 R - S AH0\nORSAK  AO1 R - S AH0 K\nORSAY  AO2 R - S EY1\nORSBORN  AO1 R S - B ER0 N\nORSBURN  AO1 R S - B ER0 N\nORSER  AO1 R - S ER0\nORSI  AO1 R - S IY0\nORSINI  AO0 R - S IY1 - N IY0\nORSINO  AO0 R - S IY1 - N OW0\nORSO  AO1 R - S OW0\nORSOLA  AO0 R - S OW1 - L AH0\nORSON  AO1 R - S AH0 N\nORT  AO1 R T\nORTA  AO1 R - T AH0\nORTEGA  AO0 R - T EY1 - G AH0\nORTEGA'S  AO0 R - T EY1 - G AH0 Z\nORTEGAS  AO0 R - T EY1 - G AH0 S\nORTEGO  AO0 R - T EY1 - G OW0\nORTEGON  AO0 R - T EY0 - G AO1 N\nORTEN  AO1 R - T AH0 N\nORTENZIO  AO0 R - T EH1 N - Z IY0 - OW0\nORTEZ  AO0 R - T EH1 Z\nORTH  AO1 R TH\nORTHO  AO1 R - TH OW2\nORTHOCLASE  AO1 R - TH AH0 - K L EY2 S\nORTHODONTIA  AO2 R - TH AH0 - D AA1 N - CH IY0 - AH0\nORTHODONTIC  AO2 R - TH AH0 - D AA1 N - T IH0 K\nORTHODONTICS  AO2 R - TH AH0 - D AA1 N - T IH0 K S\nORTHODONTIST  AO2 R - TH AH0 - D AA1 N - T AH0 S T\nORTHODONTIST'S  AO2 R - TH AH0 - D AA1 N - T AH0 S T S\nORTHODONTISTS  AO2 R - TH AH0 - D AA1 N - T AH0 S T S\nORTHODONTISTS(2)  AO2 R - TH AH0 - D AA1 N - T AH0 S S\nORTHODONTISTS(3)  AO2 R - TH AH0 - D AA1 N - T AH0 S\nORTHODOX  AO1 R - TH AH0 - D AA2 K S\nORTHODOXY  AO1 R - TH AH0 - D AA2 K - S IY0\nORTHOGRAPHY  AO0 R - TH AA1 - G R AH0 - F IY0\nORTHOPEDIC  AO2 R - TH AH0 - P IY1 - D IH0 K\nORTHOPEDIST  AO2 R - TH AH0 - P IY1 - D AH0 S T\nORTHOPEDISTS  AO2 R - TH AH0 - P IY1 - D AH0 S T S\nORTHOPEDISTS(2)  AO2 R - TH AH0 - P IY1 - D AH0 S S\nORTHOPEDISTS(3)  AO2 R - TH AH0 - P IY1 - D AH0 S\nORTIS  AO1 R - T IH0 S\nORTIZ  AO2 R - T IY1 Z\nORTLIEB  AO1 R T - L IY2 B\nORTLOFF  AO1 R T - L AO0 F\nORTMAN  AO1 R T - M AH0 N\nORTMANN  AO1 R T - M AH0 N\nORTNER  AO1 R T - N ER0\nORTOLANO  AO0 R - T OW0 - L AA1 - N OW0\nORTON  AO1 R - T AH0 N\nORTWEIN  AO1 R - T W AY0 N\nORTWIN  AO1 R T - W IH0 N\nORUM  AO1 - R AH0 M\nORVA  AO1 R - V AH0\nORVAL  AO1 R - V AH0 L\nORVILLE  AO1 R - V IH0 L\nORVIN  AO1 R - V IH0 N\nORVIS  AO1 R - V IH0 S\nORWELL  AO1 R - W EH2 L\nORWELL'S  AO1 R - W EH2 L Z\nORWELLIAN  AO2 R - W EH1 - L IY0 - AH0 N\nORWICK  AO1 R - W IH0 K\nORWIG  AO1 R - W IH0 G\nORY  AO1 - R IY0\nORYX  AO1 - R IH0 K S\nORZECH  AO1 R - Z IH0 HH\nORZECHOWSKI  AO0 R - Z IH0 - HH AO1 F S - K IY0\nORZEL  AO1 R - Z AH0 L\nOS  AA1 S\nOSAGE  OW0 - S EY1 JH\nOSAGES  OW0 - S EY1 - JH AH0 Z\nOSAKA  OW0 - S AA1 - K AH0\nOSAKE  OW0 - S AA1 - K IY0\nOSAKI  OW0 - S AA1 - K IY0\nOSAKOWA  OW2 - S AH0 - K OW1 - AH0\nOSAKOWA'S  OW2 - S AH0 - K OW1 - AH0 Z\nOSAMA  OW0 - S AA1 - M AH0\nOSAMU  OW0 - S AA1 - M UW0\nOSBERG  AA1 S - B ER0 G\nOSBERT  AA1 S - B ER0 T\nOSBON  AA1 S - B AH0 N\nOSBORN  AO1 Z - B AO2 R N\nOSBORNE  AO1 Z - B AO2 R N\nOSBORNE'S  AO1 Z - B AO2 R N Z\nOSBOURN  AA1 S - B ER0 N\nOSBOURNE  AA1 S - B ER0 N\nOSBUN  AA1 S - B AH0 N\nOSBURN  AA1 S - B ER2 N\nOSBY  AA1 S - B IY0\nOSCALUS  AO1 - S K AH0 - L AH0 S\nOSCAR  AO1 - S K ER0\nOSCAR'S  AO1 - S K ER0 Z\nOSCARS  AO1 - S K ER0 Z\nOSCARSON  AA1 S - K AA0 R - S AH0 N\nOSCEOLA  AO2 S - K IY0 - OW1 - L AH0\nOSCEOLA(2)  AO2 - S IY0 - OW1 - L AH0\nOSCILLATE  AA1 - S AH0 - L EY2 T\nOSCILLATES  AA1 - S AH0 - L EY2 T S\nOSCILLATING  AA1 - S AH0 - L EY2 - T IH0 NG\nOSCILLATION  AA2 - S AH0 - L EY1 - SH AH0 N\nOSCILLATIONS  AA2 - S AH0 - L EY1 - SH AH0 N Z\nOSCILLATOR  AA1 - S AH0 - L EY2 - T ER0\nOSCILLATORS  AA1 - S AH0 - L EY2 - T ER0 Z\nOSCILLATORY  AA1 - S AH0 - L AH0 - T AO2 - R IY0\nOSCILLOSCOPE  AO2 - S IH1 - L AH0 - S K OW2 P\nOSCILLOSCOPES  AO2 - S IH1 - L AH0 - S K OW2 P S\nOSCO  AA1 - S K OW0\nOSE  OW1 Z\nOSEGUERA  OW0 - S EY0 - G EH1 - R AH0\nOSER  OW1 - S ER0\nOSGOOD  AA1 S - G UH2 D\nOSH  AA1 SH\nOSHA  OW1 - SH AH0\nOSHA'S  OW1 - SH AH0 Z\nOSHAF  OW1 - SH AA0 F\nOSHATZ  OW0 - SH AE1 T S\nOSHAUGHNESSY  OW2 - SH AA1 - N IH0 - S IY0\nOSHAWA  AO2 - SH AA1 W - AH0\nOSHEA  AA1 - SH IY0 - AH0\nOSHEL  AA1 - SH AH0 L\nOSHELL  AA1 - SH AH0 L\nOSHER  AA1 - SH ER0\nOSHIELDS  AA1 - SH IY0 L D Z\nOSHIMA  OW0 - SH IY1 - M AH0\nOSHIRO  OW0 - SH IH1 - R OW0\nOSHITA  OW0 - SH IY1 - T AH0\nOSHKOSH  AO1 SH - K AO2 SH\nOSHMAN  AO1 SH - M AH0 N\nOSHMAN'S  AO1 SH - M AH0 N Z\nOSIECKI  AH0 - S IY1 T - S K IY0\nOSIKA  AH0 - S AY1 - K AH0\nOSINSKI  AH0 - S IH1 N - S K IY0\nOSKAR  AO1 - S K ER0\nOSLAND  AA1 S - L AH0 N D\nOSLER  AA1 Z - L ER0\nOSLEY  AA1 S - L IY0\nOSLIN  AA1 - S L IH0 N\nOSLO  AA1 Z - L OW0\nOSLUND  AA1 S - L AH0 N D\nOSMAN  AA1 S - M AH0 N\nOSMAR  AA1 S - M ER0\nOSMENA  AO2 Z - M IY1 - N AH0\nOSMENT  AA1 S - M AH0 N T\nOSMER  AA1 - S AH0 - M ER0\nOSMIUM  AA1 Z - M IY0 - AH0 M\nOSMON  AA1 S - M AH0 N\nOSMOND  AA1 S - M AH0 N D\nOSMONDS  AO1 Z - M AH0 N D Z\nOSMOSIS  AO2 Z - M OW1 - S IH0 S\nOSMOTIC  AA0 Z - M AA1 - T AH0 K\nOSMUN  AA1 Z - M AH0 N\nOSMUND  AA1 S - M AH0 N D\nOSMUNDSON  AA1 Z - M AH0 N D - S AH0 N\nOSORIO  OW0 - S AO1 - R IY0 - OW0\nOSOWSKI  AH0 - S AO1 F S - K IY0\nOSPINA  OW0 - S P IY1 - N AH0\nOSPREY  AO1 S - P R IY0\nOSRED  AA1 - S ER0 D\nOSRIC  AA1 Z - R IH0 K\nOSS  AO1 S\nOSSA  AA1 - S AH0\nOSSETIA  AA2 - S EH1 - SH Y AH0\nOSSETIA(2)  AA2 - S IY1 - SH Y AH0\nOSSETIAN  AA2 - S EH1 - SH Y IH0 N\nOSSETIAN(2)  AA2 - S IY1 - SH Y IH0 N\nOSSETIANS  AA2 - S EH1 - SH Y IH0 N Z\nOSSETIANS(2)  AA2 - S IY1 - SH Y IH0 N Z\nOSSICLES  AA1 - S AH0 - K AH0 L Z\nOSSIFICATION  AA2 - S AH0 - F AH0 - K EY1 - SH AH0 N\nOSSIFIED  AA1 - S AH0 - F AY2 D\nOSSIFY  AA1 - S AH0 - F AY2\nOSSMAN  AA1 S - M AH0 N\nOSSO  OW1 - S OW0\nOSSWALD  AA1 - S W AH0 L D\nOST  OW1 S T\nOSTANKINO  AA1 - S T AH0 N - K IH1 - N OW0\nOSTBERG  AA1 S T - B ER0 G\nOSTBY  AA1 S T - B IY0\nOSTEEN  AA1 - S T IY2 N\nOSTEN  AA1 - S AH0 N\nOSTENDORF  AA1 - S T AH0 N - D AO0 R F\nOSTENSIBLE  AA0 - S T EH1 N - S AH0 - B AH0 L\nOSTENSIBLY  AA0 - S T EH1 N - S AH0 - B L IY0\nOSTENSON  AA1 - S T IH0 N - S AH0 N\nOSTENTATION  AO2 - S T EH0 N - T EY1 - SH AH0 N\nOSTENTATIOUS  AA2 - S T AH0 N - T EY1 - SH AH0 S\nOSTENTATIOUSLY  AA2 - S T AH0 N - T EY1 - SH AH0 S - L IY0\nOSTEOARTHRITIS  AA2 - S T IY0 - OW2 - AA0 R TH - R AY1 - T AH0 S\nOSTEOPATHIC  AA2 - S T IY0 - AH0 - P AE1 - TH IH0 K\nOSTEOPOROSIS  AO2 - S T IY0 - AA2 - P ER0 - OW1 - S IH0 S\nOSTER  AA1 - S T ER0\nOSTERBERG  AA1 - S T ER0 - B ER0 G\nOSTERGAARD  AA1 - S T ER0 - G AA0 R D\nOSTERGARD  AA1 - S T ER0 - G ER0 D\nOSTERGREN  AA1 - S T ER0 - G R EH0 N\nOSTERHAUS  AA1 - S T ER0 - HH AW0 S\nOSTERHOFF  OW1 - S T ER0 - HH AO2 F\nOSTERHOLT  AA1 - S T ER0 - HH OW0 L T\nOSTERHOUDT  AA1 - S T ER0 - HH AW0 T\nOSTERHOUT  AA1 - S T ER0 - HH AW0 T\nOSTERKAMP  AA1 - S T ER0 - K AE0 M P\nOSTERLING  AA1 - S T ER0 - L IH0 NG\nOSTERLOH  OW0 - S T EH1 R - L OW0\nOSTERLUND  AA1 - S T ER0 - L AH0 N D\nOSTERMAN  AA1 - S T ER0 - M AH0 N\nOSTERMANN  AA1 - S T ER0 - M AH0 N\nOSTERMEIER  AA1 - S T ER0 - M AY0 - ER0\nOSTERMEYER  AA1 - S T ER2 - M AY2 - ER0\nOSTERMILLER  AA1 - S T ER0 - M IH0 - L ER0\nOSTERREICHISCHE  AO1 - S T ER0 - R AY2 - K IH0 - SH IY0\nOSTERTAG  AA1 - S T ER0 - T AH0 G\nOSTHOFF  AA1 S T - HH AO0 F\nOSTIA  AA1 - S T IY0 - AH0\nOSTIN  AA1 - S T AH0 N\nOSTINATO  AA2 - S T AH0 - N AA1 - T OW2\nOSTING  AA1 - S T IH0 NG\nOSTLING  AA1 - S AH0 - L IH0 NG\nOSTLING(2)  AA1 - S T L IH0 NG\nOSTLING(3)  AA1 - S L IH0 NG\nOSTLUND  AA1 S T - L AH0 N D\nOSTMAN  AA1 S T - M AH0 N\nOSTPOLITIK  OW2 S T - P OW2 - L IH0 - T IH1 K\nOSTRACISM  AO1 - S T R AH0 - S IH2 - Z AH0 M\nOSTRACIZE  AO1 - S T R AH0 - S AY2 Z\nOSTRACIZED  AO1 - S T R AH0 - S AY2 Z D\nOSTRAND  AA1 - S T R AH0 N D\nOSTRANDER  AA1 - S T R AH0 N - D ER0\nOSTREM  AA1 - S T R IH0 M\nOSTRICH  AO1 - S T R IH0 CH\nOSTRICHES  AA1 - S T R IH0 - CH IH0 Z\nOSTROFF  AO1 - S T R AO0 F\nOSTROGOTH  AA1 - S T R AH0 - G AA2 TH\nOSTROGOTHS  AA1 - S T R AH0 - G AA2 TH S\nOSTROM  AA1 S - T R AH0 M\nOSTROSKI  AH0 - S T R AW1 S - K IY0\nOSTROSKY  AH0 - S T R OW1 S - K IY0\nOSTROW  AA1 - S T R AW0\nOSTROW(2)  AA1 - S T R OW0\nOSTROWSKI  AH0 - S T R AO1 F S - K IY0\nOSTROWSKY  AH0 - S T R AW1 S - K IY0\nOSTRUM  AA1 S - T R AH0 M\nOSTWALD  AA1 - S T W AH0 L D\nOSUCH  AA1 - S AH0 K\nOSULLIVAN  AA0 - S AH0 - L IH1 - V AH0 N\nOSUNA  OW0 - S UW1 - N AH0\nOSWALD  AO1 Z - W AO0 L D\nOSWALD'S  AO1 Z - W AO0 L D Z\nOSWALT  AA1 - S W AH0 L T\nOSWEGO  AA0 - S W IY1 - G OW0\nOSWELL  AA1 - S W EH2 L\nOT  AO1 T\nOT(2)  OW1 - T IY1\nOTA  OW1 - T AH0\nOTAIBA  OW0 - T EY1 - B AH0\nOTANI  OW0 - T AA1 - N IY0\nOTELLO  OW0 - T EH1 - L OW0\nOTERI  OW0 - T EH1 - R IY0\nOTERO  OW0 - T EH1 - R OW0\nOTEY  OW1 - T IY0\nOTHA  AH0 - DH AA1\nOTHELLO  AH0 - TH EH1 - L OW0\nOTHER  AH1 - DH ER0\nOTHER'S  AH1 - DH ER0 Z\nOTHERNESS  AH1 - DH ER0 - N AH0 S\nOTHERS  AH1 - DH ER0 Z\nOTHERS'  AH1 - DH ER0 Z\nOTHERWISE  AH1 - DH ER0 - W AY2 Z\nOTHERWORLDLY  AH1 - DH ER0 - W ER1 L D - L IY0\nOTHILIA  OW0 - TH IY1 - L IY0 - AH0\nOTHMAN  AA1 TH - M AH0 N\nOTIS  OW1 - T IH0 S\nOTMAR  AA1 T - M AA0 R\nOTOLOGY  OW0 - T AA1 - L AH0 - JH IY0\nOTOMOBIL  OW0 - T OW1 - M OW0 - B AH0 L\nOTOOLE  AA1 - T UW0 L\nOTREMBA  OW0 - T R EH1 M - B AH0\nOTSEGO  AA0 T - S EY1 - G OW0\nOTSUKA  OW0 T - S UW1 - K AH0\nOTT  AA1 T\nOTTAVIANI  OW0 - T AA0 - V IY0 - AA1 - N IY0\nOTTAVIANO  OW0 - T AA0 - V IY0 - AA1 - N OW0\nOTTAWA  AA1 - T AH0 - W AA2\nOTTAWA'S  AA1 - T AH0 - W AH0 Z\nOTTAWAY  AA1 T - AH0 - W EY0\nOTTE  AA1 T\nOTTEN  AA1 - T AH0 N\nOTTENS  AA1 - T AH0 N Z\nOTTER  AA1 - T ER0\nOTTERBEIN  AA1 - T ER0 - B AY0 N\nOTTERLOO  AA1 - T ER0 - L UW2\nOTTERS  AA1 - T ER0 Z\nOTTERSON  AA1 - T ER0 - S AH0 N\nOTTESEN  AA1 - T IY0 - Z AH0 N\nOTTESON  AA1 - T IH0 - S AH0 N\nOTTILIE  AA1 - T AH0 - L IY0\nOTTING  AA1 - T IH0 NG\nOTTLEY  AA1 T - L IY0\nOTTMAN  AA1 T - M AH0 N\nOTTO  AA1 - T OW2\nOTTO'S  AA1 - T OW2 Z\nOTTOMAN  AA1 - T AH0 - M AH0 N\nOTTOSEN  AA1 - T OW0 - S AH0 N\nOTTOSON  AA1 - T AH0 - S AH0 N\nOTTS  AA1 T S\nOTTUM  AA1 - T AH0 M\nOTWELL  AA1 T - W EH2 L\nOU  UW1\nOUBRE  UW1 - B ER0\nOUCH  AW1 CH\nOUDERKIRK  AW1 - D ER0 - K ER0 K\nOUELETTE  AA1 - UW0 - L EH0 T\nOUELLET  AA1 - UW0 - L IH0 T\nOUELLETTE  AA1 - UW0 - L EH0 T\nOUGHT  AO1 T\nOUGHTA  AO1 - T AH0\nOUGHTN'T  AO1 - T AH0 N T\nOUI  W IY1\nOUI(2)  UW0 - W IY1\nOUIMET  W IY0 - M EH1 T\nOUIMETTE  W IY0 - M EH1 T\nOUNCE  AW1 N S\nOUNCES  AW1 N - S AH0 Z\nOUNCES(2)  AW1 N - S IH0 Z\nOUNSTED  AW1 N - S T EH2 D\nOUR  AW1 - ER0\nOUR(2)  AW1 R\nOUR(3)  AA1 R\nOURADA  OW0 - UH0 - R AA1 - D AH0\nOURS  AW1 - ER0 Z\nOURS(2)  AA1 R Z\nOURSELF  AW0 - ER0 - S EH1 L F\nOURSELF(2)  AA0 R - S EH1 L F\nOURSELVES  AW0 - ER0 - S EH1 L V Z\nOURSELVES(2)  AA0 R - S EH1 L V Z\nOURSO  ER1 - S OW0\nOUSLEY  AW1 S - L IY0\nOUST  AW1 S T\nOUSTED  AW1 - S T IH0 D\nOUSTER  AW1 - S T ER0\nOUSTING  AW1 - S T IH0 NG\nOUT  AW1 T\nOUT'S  AW1 T S\nOUT-MODE  AW1 T - M OW1 D\nOUT-MODED  AW1 T - M OW1 - D IH0 D\nOUTAGE  AW1 - T AH0 JH\nOUTAGE(2)  AW1 - T IH0 JH\nOUTAGES  AW1 - T IH0 - JH IH0 Z\nOUTBACK  AW1 T - B AE2 K\nOUTBID  AW1 T - B IH2 D\nOUTBIDDING  AW1 T - B IH2 - D IH0 NG\nOUTBOARD  AW1 T - B AO2 R D\nOUTBOARD'S  AW1 T - B AO2 R D Z\nOUTBOUND  AW1 T - B AW2 N D\nOUTBREAK  AW1 T - B R EY2 K\nOUTBREAKS  AW1 T - B R EY2 K S\nOUTBURST  AW1 T - B ER2 S T\nOUTBURSTS  AW1 T - B ER2 S T S\nOUTBURSTS(2)  AW1 T - B ER2 S S\nOUTBURSTS(3)  AW1 T - B ER2 S\nOUTCALT  AW1 T - K AH0 L T\nOUTCAST  AW1 T - K AE2 S T\nOUTCASTS  AW1 T - K AE2 S T S\nOUTCASTS(2)  AW1 T - K AE2 S S\nOUTCASTS(3)  AW1 T - K AE2 S\nOUTCLASS  AW1 T - K L AE2 S\nOUTCOME  AW1 T - K AH2 M\nOUTCOMES  AW1 T - K AH2 M Z\nOUTCRIES  AW1 T - K R AY2 Z\nOUTCRY  AW1 T - K R AY2\nOUTDATE  AW1 T - D EY2 T\nOUTDATED  AW1 T - D EY2 - T IH0 D\nOUTDID  AW1 T - D IH2 D\nOUTDISTANCING  AW1 T - D IH1 - S T AH0 N - S IH0 NG\nOUTDO  AW2 T - D UW1\nOUTDONE  AW1 T - D AH1 N\nOUTDOOR  AW1 T - D AO2 R\nOUTDOORS  AW1 T - D AO1 R Z\nOUTED  AW1 - T AH0 D\nOUTEN  AW1 - T AH0 N\nOUTER  AW1 - T ER0\nOUTERMOST  AW1 - T ER0 - M OW2 S T\nOUTERWEAR  AW1 - T ER0 - W EH2 R\nOUTFIELD  AW1 T - F IY2 L D\nOUTFIELDER  AW1 T - F IY2 L - D ER0\nOUTFIELDERS  AW1 T - F IY2 L - D ER0 Z\nOUTFIT  AW1 T - F IH2 T\nOUTFITS  AW1 T - F IH2 T S\nOUTFITTED  AW1 T - F IH2 - T IH0 D\nOUTFITTER  AW1 T - F IH2 - T ER0\nOUTFITTING  AW1 T - F IH2 - T IH0 NG\nOUTFLANK  AW1 T - F L AE2 NG K\nOUTFLANKED  AW0 T - F L AE1 NG K T\nOUTFLOW  AW1 T - F L OW2\nOUTFLOWS  AW1 T - F L OW2 Z\nOUTFOX  AW0 T - F AA1 K S\nOUTFOXED  AW0 T - F AA1 K S T\nOUTGAIN  AW1 T - G EY2 N\nOUTGAINED  AW1 T - G EY2 N D\nOUTGO  AW1 T - G OW2\nOUTGOING  AW1 T - G OW2 - IH0 NG\nOUTGREW  AW2 T - G R UW1\nOUTGROW  AW2 T - G R OW1\nOUTGROWING  AW1 T - G R OW2 - IH0 NG\nOUTGROWN  AW2 T - G R OW1 N\nOUTGROWTH  AW1 T - G R OW2 TH\nOUTGUESS  AW1 T - G EH2 S\nOUTGUN  AW1 T - G AH2 N\nOUTGUNNED  AW1 T - G AH2 N D\nOUTHOUSE  AW1 T - HH AW2 S\nOUTHOUSES  AW1 T - HH AW2 - S IH0 Z\nOUTING  AW1 - T IH0 NG\nOUTINGS  AW1 - T IH0 NG Z\nOUTLAND  AW1 T - L AE2 N D\nOUTLAND(2)  AW1 T - L AH0 N D\nOUTLANDISH  AW0 T - L AE1 N - D IH0 SH\nOUTLAST  AW1 T - L AE2 S T\nOUTLAST(2)  AW0 T - L AE1 S T\nOUTLASTED  AW1 T - L AE2 - S T IH0 D\nOUTLASTED(2)  AW0 T - L AE1 - S T IH0 D\nOUTLAW  AW1 T - L AO2\nOUTLAWED  AW1 T - L AO2 D\nOUTLAWING  AW1 T - L AO2 - IH0 NG\nOUTLAWRY  AW1 T - L AO2 - R IY0\nOUTLAWS  AW1 T - L AO2 Z\nOUTLAY  AW1 T - L EY2\nOUTLAYS  AW1 T - L EY2 Z\nOUTLER  AW1 - T AH0 L - ER0\nOUTLER(2)  AW1 T - L ER0\nOUTLET  AW1 T - L EH2 T\nOUTLET'S  AW1 T - L EH2 T S\nOUTLETS  AW1 T - L EH2 T S\nOUTLEY  AW1 T - L IY0\nOUTLIER  AW1 T - L AY0 - ER0\nOUTLINE  AW1 T - L AY2 N\nOUTLINED  AW1 T - L AY2 N D\nOUTLINES  AW1 T - L AY2 N Z\nOUTLINING  AW1 T - L AY2 - N IH0 NG\nOUTLIVE  AW2 T - L IH1 V\nOUTLIVED  AW2 T - L IH1 V D\nOUTLOOK  AW1 T - L UH2 K\nOUTLOOKS  AW1 T - L UH2 K S\nOUTLYING  AW1 T - L AY2 - IH0 NG\nOUTMAN  AW1 T - M AH0 N\nOUTMAN(2)  AW2 T - M AE1 N\nOUTMANEUVER  AW0 T - M AH0 - N UW1 - V ER0\nOUTMANEUVERED  AW0 T - M AH0 - N UW1 - V ER0 D\nOUTMANNED  AW2 T - M AE1 N D\nOUTMODE  AW2 T - M OW1 D\nOUTMODED  AW2 T - M OW1 - D AH0 D\nOUTMODED(2)  AW2 T - M OW1 - D IH0 D\nOUTNUMBER  AW0 T - N AH1 M - B ER0\nOUTNUMBERED  AW2 T - N AH1 M - B ER0 D\nOUTNUMBERING  AW1 T - N AH2 M - B ER0 - IH0 NG\nOUTNUMBERS  AW0 T - N AH1 M - B ER0 Z\nOUTOKUMPU  UW2 - T AH0 - K AH1 M - P UW0\nOUTPACE  AW1 T - P EY2 S\nOUTPACED  AW1 T - P EY2 S T\nOUTPACES  AW1 T - P EY2 - S IH0 Z\nOUTPACING  AW1 T - P EY2 - S IH0 NG\nOUTPATIENT  AW1 T - P EY2 - SH AH0 N T\nOUTPERFORM  AW1 T - P ER0 - F AO2 R M\nOUTPERFORMANCE  AW2 T - P ER0 - F AO1 R - M AH0 N S\nOUTPERFORMED  AW1 T - P ER0 - F AO2 R M D\nOUTPERFORMER  AW2 T - P ER0 - F AO1 R - M ER0\nOUTPERFORMING  AW1 T - P ER0 - F AO2 R - M IH0 NG\nOUTPERFORMS  AW1 T - P ER0 - F AO1 R M Z\nOUTPLACEMENT  AW1 T - P L EY2 S - M AH0 N T\nOUTPOST  AW1 T - P OW2 S T\nOUTPOSTS  AW1 T - P OW2 S T S\nOUTPOSTS(2)  AW1 T - P OW2 S S\nOUTPOSTS(3)  AW1 T - P OW2 S\nOUTPOUCH  AW1 T - P AW2 CH\nOUTPOUCHING  AW1 T - P AW2 - CH IH0 NG\nOUTPOUR  AW2 T - P AO1 R\nOUTPOURING  AW2 T - P AO1 - R IH0 NG\nOUTPUT  AW1 T - P UH2 T\nOUTPUTS  AW1 T - P UH2 T S\nOUTRAGE  AW1 T - R EY2 JH\nOUTRAGED  AW1 T - R EY2 JH D\nOUTRAGEOUS  AW0 T - R EY1 - JH AH0 S\nOUTRAGEOUSLY  AW2 T - R EY1 - JH AH0 S - L IY0\nOUTRAGEOUSNESS  AW0 T - R EY1 - JH AH0 S - N AH0 S\nOUTRAGES  AW1 T - R EY2 - JH IH0 Z\nOUTRAGING  AW1 T - R EY2 - JH IH0 NG\nOUTREACH  AW1 T - R IY2 CH\nOUTRIDER  AW1 T - R AY2 - D ER0\nOUTRIDERS  AW1 T - R AY2 - D ER0 Z\nOUTRIGGER  AW1 T - R IH2 - G ER0\nOUTRIGHT  AW1 T - R AY1 T\nOUTRUN  AW0 T - R AH1 N\nOUTS  AW1 T S\nOUTSCORE  AW0 T - S K AO1 R\nOUTSCORED  AW0 T - S K AO1 R D\nOUTSELL  AW0 T - S EH1 L\nOUTSELLING  AW0 T - S EH1 - L IH0 NG\nOUTSELLS  AW0 T - S EH1 L Z\nOUTSET  AW1 T - S EH2 T\nOUTSHINE  AW1 - CH AY2 N\nOUTSHONE  AW0 T - SH OW1 N\nOUTSIDE  AW1 T - S AY1 D\nOUTSIDER  AW0 T - S AY1 - D ER0\nOUTSIDER'S  AW0 T - S AY1 - D ER0 Z\nOUTSIDERS  AW0 T - S AY1 - D ER0 Z\nOUTSIDERS'  AW0 T - S AY1 - D ER0 Z\nOUTSIDES  AW1 T - S AY1 D Z\nOUTSIZE  AW1 T - S AY2 Z\nOUTSIZED  AW1 T - S AY2 Z D\nOUTSKIRT  AW1 T - S K ER2 T\nOUTSKIRTS  AW1 T - S K ER2 T S\nOUTSMART  AW1 T - S M AA2 R T\nOUTSOLD  AW0 T - S OW1 L D\nOUTSOURCE  AW2 T - S AO1 R S\nOUTSOURCING  AW2 T - S AO1 R - S IH0 NG\nOUTSPEND  AW1 T - S P EH2 N D\nOUTSPENDING  AW1 T - S P EH2 N - D IH0 NG\nOUTSPENT  AW0 T - S P EH1 N T\nOUTSPOKEN  AW1 T - S P OW1 - K AH0 N\nOUTSPOKENNESS  AW0 T - S P OW1 - K AH0 N - AH0 S\nOUTSTANDING  AW2 T - S T AE1 N - D IH0 NG\nOUTSTRETCH  AW0 T - S T R EH1 CH\nOUTSTRETCHED  AW0 T - S T R EH1 CH T\nOUTSTRIP  AW0 T - S T R IH1 P\nOUTSTRIPPED  AW0 T - S T R IH1 P T\nOUTSTRIPPING  AW0 T - S T R IH1 - P IH0 NG\nOUTSTRIPS  AW0 T - S T R IH1 P S\nOUTTA  UW1 - T AH0\nOUTTA(2)  AW1 - T AH0\nOUTTAKE  AW1 T - T EY2 K\nOUTTAKE(2)  AW1 T - EY2 K\nOUTTAKES  AW1 T - T EY2 K S\nOUTTAKES(2)  AW1 T - EY2 K S\nOUTTEN  AW1 - T AH0 N\nOUTVOTE  AW0 T - V OW1 T\nOUTVOTED  AW0 T - V OW1 - T AH0 D\nOUTWARD  AW1 T - W ER0 D\nOUTWARDLY  AW1 T - W ER0 D - L IY0\nOUTWARDS  AW1 T - W ER0 D Z\nOUTWEIGH  AW1 T - W EY2\nOUTWEIGHED  AW0 T - W EY1 D\nOUTWEIGHING  AW1 T - W EY2 - IH0 NG\nOUTWEIGHS  AW1 T - W EY2 Z\nOUTWIT  AW1 T - W IH2 T\nOUTWITTING  AW1 T - W IH2 - T IH0 NG\nOUZTS  AW1 Z T S\nOUZTS(2)  AW1 S T S\nOVAL  OW1 - V AH0 L\nOVALLE  AA1 - V EY0 L\nOVARIAN  OW0 - V EH1 - R IY0 - AH0 N\nOVARIES  OW1 - V ER0 - IY0 Z\nOVARY  OW1 - V ER0 - IY0\nOVATE  OW1 - V EY0 T\nOVATION  OW0 - V EY1 - SH AH0 N\nOVATIONS  OW0 - V EY1 - SH AH0 N Z\nOVEN  AH1 - V AH0 N\nOVENS  AH1 - V AH0 N Z\nOVER  OW1 - V ER0\nOVERABUNDANCE  OW1 - V ER0 - AH0 - B AH1 N - D AH0 N S\nOVERACKER  OW1 - V ER0 - AH0 - K ER0\nOVERACT  OW1 - V ER0 - AE2 K T\nOVERACTED  OW1 - V ER0 - AE2 K - T IH0 D\nOVERACTED(2)  OW2 - V ER0 - AE1 K - T IH0 D\nOVERACTIVE  OW1 - V ER0 - AE1 K - T IH0 V\nOVERALL  OW1 - V ER0 - AO2 L\nOVERALLOTMENT  OW1 - V ER0 - AH0 L - AA1 T - M AH0 N T\nOVERALLOTMENTS  OW1 - V ER0 - AH0 L - AA1 T - M AH0 N T S\nOVERALLS  OW1 - V ER0 - AO2 L Z\nOVERAMBITIOUS  OW1 - V ER0 - AE0 M - B IH2 - SH AH0 S\nOVERARCHING  OW1 - V ER0 - AA2 R - CH IH0 NG\nOVERBAUGH  OW0 - V ER1 - B AO0\nOVERBAY  OW1 - V ER0 - B EY2\nOVERBEARING  OW1 - V ER0 - B EH1 - R IH0 NG\nOVERBECK  OW1 - V ER0 - B EH2 K\nOVERBEY  OW1 - V ER0 - B IY0\nOVERBILLING  OW1 - V ER0 - B IH2 - L IH0 NG\nOVERBLOWN  OW2 - V ER0 - B L OW1 N\nOVERBOARD  OW1 - V ER0 - B AO2 R D\nOVERBOOK  OW1 - V ER0 - B UH2 K\nOVERBOOKED  OW1 - V ER0 - B UH2 K T\nOVERBOOKING  OW1 - V ER0 - B UH2 - K IH0 NG\nOVERBOUGHT  OW1 - V ER0 - B AO1 T\nOVERBUILDING  OW1 - V ER0 - B IH2 L - D IH0 NG\nOVERBUILT  OW1 - V ER0 - B IH1 L T\nOVERBURDEN  OW1 - V ER0 - B ER1 - D AH0 N\nOVERBURDENED  OW1 - V ER0 - B ER1 - D AH0 N D\nOVERBUY  OW1 - V ER0 - B AY2\nOVERBY  OW1 - V ER0 - B IY0\nOVERCAME  OW1 - V ER0 - K EY1 M\nOVERCAPACITY  OW1 - V ER0 - K AH0 - P AE1 - S AH0 - T IY0\nOVERCASH  OW1 - V ER0 - K AE2 SH\nOVERCAST  OW1 - V ER0 - K AE2 S T\nOVERCHARGE  OW1 - V ER0 - CH AA2 R JH\nOVERCHARGED  OW1 - V ER0 - CH AA1 R JH D\nOVERCHARGES  OW1 - V ER0 - CH AA2 R - JH IH0 Z\nOVERCHARGING  OW2 - V ER0 - CH AA1 R - JH IH0 NG\nOVERCOAT  OW1 - V ER0 - K OW2 T\nOVERCOATS  OW1 - V ER0 - K OW2 T S\nOVERCOME  OW1 - V ER0 - K AH2 M\nOVERCOMES  OW1 - V ER0 - K AH2 M Z\nOVERCOMING  OW1 - V ER0 - K AH2 - M IH0 NG\nOVERCONFIDENCE  OW2 - V ER0 - K AA1 N - F IH0 - D AH0 N S\nOVERCONFIDENT  OW2 - V ER0 - K AA1 N - F IH0 - D AH0 N T\nOVERCONSUMPTION  OW1 - V ER0 - K AH0 N - S AH2 M P - SH AH0 N\nOVERCOOK  OW2 - V ER0 - K UH1 K\nOVERCOOKED  OW2 - V ER0 - K UH1 K T\nOVERCROWD  OW2 - V ER0 - K R AW1 D\nOVERCROWDED  OW1 - V ER0 - K R AW2 - D IH0 D\nOVERCROWDING  OW1 - V ER0 - K R AW2 - D IH0 NG\nOVERDAMPING  OW1 - V ER0 - D AE2 M - P IH0 NG\nOVERDEPENDENCE  OW1 - V ER0 - D IH0 - P EH2 N - D AH0 N S\nOVERDID  OW1 - V ER0 - D IH2 D\nOVERDO  OW1 - V ER0 - D UW1\nOVERDOING  OW1 - V ER0 - D UW1 - IH0 NG\nOVERDONE  OW1 - V ER0 - D AH1 N\nOVERDORF  OW1 - V ER0 - D AO0 R F\nOVERDOSE  OW1 - V ER0 - D OW2 S\nOVERDOSED  OW1 - V ER0 - D OW2 S T\nOVERDOSES  OW1 - V ER0 - D OW2 - S IH0 Z\nOVERDRAFT  OW1 - V ER0 - D R AE2 F T\nOVERDRAFTING  OW1 - V ER0 - D R AE2 F - T IH0 NG\nOVERDRAFTS  OW1 - V ER0 - D R AE2 F T S\nOVERDRAW  OW1 - V ER0 - D R AO2\nOVERDRAWN  OW1 - V ER0 - D R AO1 N\nOVERDRESS  OW1 - V ER0 - D R EH2 S\nOVERDREW  OW1 - V ER0 - D R UW2\nOVERDRIVE  OW1 - V ER0 - D R AY2 V\nOVERDUE  OW1 - V ER0 - D UW1\nOVEREAGER  OW1 - V ER0 - IY2 - G ER0\nOVEREAT  OW1 - V ER0 - IY2 T\nOVEREATING  OW1 - V ER0 - IY1 - T IH0 NG\nOVEREMPHASIZE  OW1 - V ER0 - EH1 M - F AH0 - S AY2 Z\nOVERESTIMATE  OW2 - V ER0 - EH1 S - T AH0 - M EY2 T\nOVERESTIMATED  OW2 - V ER0 - EH1 S - T AH0 - M EY2 - T IH0 D\nOVERESTIMATES  OW2 - V ER0 - EH1 S - T AH0 - M EY2 T S\nOVERESTIMATING  OW2 - V ER0 - EH1 S - T AH0 - M EY2 - T IH0 NG\nOVEREXCITE  OW2 - V ER0 - EH0 K - S AY1 T\nOVEREXCITED  OW2 - V ER0 - EH0 K - S AY1 - T IH0 D\nOVEREXPANSION  OW2 - V ER0 - IH0 K - S P AE1 N - SH AH0 N\nOVEREXPOSE  OW2 - V ER0 - IH0 K - S P OW1 Z\nOVEREXPOSED  OW2 - V ER0 - IH0 K - S P OW1 Z D\nOVEREXPOSURE  OW2 - V ER0 - IH0 K - S P OW1 - ZH ER0\nOVEREXTEND  OW2 - V ER0 - IH0 K - S T EH1 N D\nOVEREXTENDED  OW2 - V ER0 - IH0 K - S T EH1 N - D AH0 D\nOVEREXTENDING  OW2 - V ER0 - IH0 K - S T EH1 N - D IH0 NG\nOVERFED  OW2 - V ER0 - F EH1 D\nOVERFEED  OW2 - V ER0 - F IY1 D\nOVERFELT  OW1 - V ER0 - F EH2 L T\nOVERFIELD  OW1 - V ER0 - F IY2 L D\nOVERFILL  OW1 - V ER0 - F IH2 L\nOVERFISHING  OW1 - V ER0 - F IH2 - SH IH0 NG\nOVERFLIGHT  OW1 - V ER0 - F L AY2 T\nOVERFLIGHTS  OW1 - V ER0 - F L AY2 T S\nOVERFLOW  OW1 - V ER0 - F L OW2\nOVERFLOW(2)  OW2 - V ER0 - F L OW1\nOVERFLOWED  OW2 - V ER0 - F L OW1 D\nOVERFLOWING  OW1 - V ER0 - F L OW2 - IH0 NG\nOVERFLOWS  OW1 - V ER0 - F L OW2 Z\nOVERFLY  OW2 - V ER0 - F L AY1\nOVERFLYING  OW2 - V ER0 - F L AY1 - IH0 NG\nOVERFUND  OW1 - V ER0 - F AH2 N D\nOVERFUNDED  OW1 - V ER0 - F AH2 N - D IH0 D\nOVERFUNDING  OW1 - V ER0 - F AH2 N - D IH0 NG\nOVERGAARD  OW1 - V ER0 - G AA2 R D\nOVERGENEROUS  OW1 - V ER0 - JH EH2 - N ER0 - AH0 S\nOVERGRAZING  OW1 - V ER0 - G R EY2 - Z IH0 NG\nOVERGROWN  OW1 - V ER0 - G R OW1 N\nOVERHANG  OW1 - V ER0 - HH AE2 NG\nOVERHANGING  OW1 - V ER0 - HH AE2 - NG IH0 NG\nOVERHANGS  OW1 - V ER0 - HH AE2 NG Z\nOVERHAUL  OW1 - V ER0 - HH AO2 L\nOVERHAULED  OW1 - V ER0 - HH AO2 L D\nOVERHAULING  OW1 - V ER0 - HH AO2 - L IH0 NG\nOVERHAULS  OW1 - V ER0 - HH AO2 L Z\nOVERHEAD  OW1 - V ER0 - HH EH1 D\nOVERHEADS  OW1 - V ER0 - HH EH2 D Z\nOVERHEAR  OW1 - V ER0 - HH IH1 R\nOVERHEARD  OW1 - V ER0 - HH ER1 D\nOVERHEARING  OW2 - V ER0 - HH IH1 - R IH0 NG\nOVERHEAT  OW1 - V ER0 - HH IY2 T\nOVERHEATED  OW1 - V ER0 - HH IY2 - T IH0 D\nOVERHEATING  OW1 - V ER0 - HH IY2 - T IH0 NG\nOVERHOLSER  OW1 - V ER0 - HH OW2 L - S ER0\nOVERHOLT  OW1 - V ER0 - HH OW0 L T\nOVERHOLTZER  OW1 - V ER0 - HH OW0 L T - Z ER0\nOVERJOYED  OW2 - V ER0 - JH OY1 D\nOVERKILL  OW1 - V ER0 - K IH2 L\nOVERKILLING  OW1 - V ER0 - K IH2 - L IH0 NG\nOVERLAID  OW1 - V ER0 - L EY2 D\nOVERLAIN  OW1 - V ER0 - L EY2 N\nOVERLAND  OW1 - V ER0 - L AE2 N D\nOVERLAND(2)  OW1 - V ER0 - L AH0 N D\nOVERLAP  OW1 - V ER0 - L AE2 P\nOVERLAPPED  OW1 - V ER0 - L AE2 P T\nOVERLAPPING  OW1 - V ER0 - L AE2 - P IH0 NG\nOVERLAPS  OW1 - V ER0 - L AE2 P S\nOVERLAY  OW1 - V ER0 - L EY2\nOVERLAYS  OW1 - V ER0 - L EY2 Z\nOVERLEVERAGE  OW2 - V ER0 - L EH1 - V R IH0 JH\nOVERLEVERAGED  OW1 - V ER0 - L EH1 - V R IH0 JH D\nOVERLEY  OW1 - V ER0 - L IY0\nOVERLOAD  OW1 - V ER0 - L OW2 D\nOVERLOADED  OW1 - V ER0 - L OW2 - D IH0 D\nOVERLOADING  OW1 - V ER0 - L OW2 - D IH0 NG\nOVERLOADS  OW1 - V ER0 - L OW2 D Z\nOVERLOCK  OW1 - V ER0 - L AA2 K\nOVERLOOK  OW1 - V ER0 - L UH2 K\nOVERLOOKED  OW1 - V ER0 - L UH2 K T\nOVERLOOKING  OW1 - V ER0 - L UH2 - K IH0 NG\nOVERLOOKS  OW1 - V ER0 - L UH2 K S\nOVERLORD  OW1 - V ER0 - L AO2 R D\nOVERLORDS  OW1 - V ER0 - L AO2 R D Z\nOVERLY  OW1 - V ER0 - L IY0\nOVERLYING  OW2 - V ER0 - L AY1 - IH0 NG\nOVERMAN  OW1 - V ER0 - M AH0 N\nOVERMATCH  OW2 - V ER0 - M AE1 CH\nOVERMATCHED  OW1 - V ER0 - M AE1 CH T\nOVERMYER  OW1 - V ER0 - M IY0 - ER0\nOVERNIGHT  OW1 - V ER0 - N AY1 T\nOVERNIGHTER  OW2 - V ER0 - N AY1 - T ER0\nOVERNIGHTERS  OW2 - V ER0 - N AY1 - T ER0 Z\nOVERNITE  OW1 - V ER0 - N AY1 T\nOVEROPTIMISM  OW2 - V ER0 - AA1 P - T IH0 - M IH2 - Z AH0 M\nOVERPAID  OW1 - V ER0 - P EY1 D\nOVERPASS  OW1 - V ER0 - P AE2 S\nOVERPASSES  OW1 - V ER0 - P AE2 - S IH0 Z\nOVERPAY  OW1 - V ER0 - P EY2\nOVERPAYING  OW1 - V ER0 - P EY2 - IH0 NG\nOVERPAYMENT  OW1 - V ER0 - P EY2 - M AH0 N T\nOVERPAYMENTS  OW1 - V ER0 - P EY2 - M AH0 N T S\nOVERPECK  OW1 - V ER0 - P EH2 K\nOVERPLAY  OW1 - V ER0 - P L EY1\nOVERPLAYED  OW1 - V ER0 - P L EY1 D\nOVERPLAYING  OW1 - V ER0 - P L EY1 - IH0 NG\nOVERPOPULATE  OW2 - V ER0 - P AA1 - P Y AH0 - L EY0 T\nOVERPOPULATED  OW2 - V ER0 - P AA1 - P Y AH0 - L EY0 - T IH0 D\nOVERPOPULATION  OW2 - V ER0 - P AA2 - P Y AH0 - L EY1 - SH AH0 N\nOVERPOWER  OW2 - V ER0 - P AW1 - ER0\nOVERPOWERED  OW2 - V ER0 - P AW1 - ER0 D\nOVERPOWERING  OW1 - V ER0 - P AW1 - R IH0 NG\nOVERPRICE  OW2 - V ER0 - P R AY1 S\nOVERPRICED  OW1 - V ER0 - P R AY2 S T\nOVERPRODUCE  OW1 - V ER0 - P R AH0 - D UW1 S\nOVERPRODUCED  OW1 - V ER0 - P R AH0 - D UW1 S T\nOVERPRODUCER  OW1 - V ER0 - P R AH0 - D UW1 - S ER0\nOVERPRODUCERS  OW1 - V ER0 - P R AH0 - D UW1 - S ER0 Z\nOVERPRODUCING  OW2 - V ER0 - P R AH0 - D Y UW1 - S IH0 NG\nOVERPRODUCTION  OW1 - V ER0 - P R AH0 - D AH1 K - SH AH0 N\nOVERPROTECT  OW2 - V ER0 - P R AH0 - T EH1 K T\nOVERPROTECTION  OW2 - V ER0 - P R AH0 - T EH1 K - SH AH0 N\nOVERPROTECTIVE  OW2 - V ER0 - P R AH0 - T EH1 K - T AH0 V\nOVERQUALIFIED  OW1 - V ER0 - K W AA2 - L AH0 - F AY2 D\nOVERQUALIFY  OW1 - V ER0 - K W AA2 - L IH0 - F AY2\nOVERRAN  OW1 - V ER0 - R AE1 N\nOVERRATE  OW2 - V ER0 - R EY1 T\nOVERRATED  OW2 - V ER0 - R EY1 - T IH0 D\nOVERREACH  OW1 - V ER0 - R IY2 CH\nOVERREACHED  OW1 - V ER0 - R IY2 CH T\nOVERREACHES  OW1 - V ER0 - R IY2 - CH IH0 Z\nOVERREACHING  OW1 - V ER0 - R IY2 - CH IH0 NG\nOVERREACT  OW1 - V ER0 - R IY0 - AE1 K T\nOVERREACTED  OW1 - V ER0 - R IY0 - AE2 K - T IH0 D\nOVERREACTING  OW1 - V ER0 - R IY0 - AE2 K - T IH0 NG\nOVERREACTION  OW1 - V ER0 - R IY0 - AE2 K - SH AH0 N\nOVERREGULATE  OW1 - V ER0 - R EH1 - G Y AH0 - L EY2 T\nOVERREGULATED  OW2 - V ER0 - R EH1 - G Y AH0 - L EY2 - T IH0 D\nOVERREGULATION  OW2 - V ER0 - R EH2 - G Y AH0 - L EY1 - SH AH0 N\nOVERRELIANCE  OW1 - V ER0 - R IH0 - L AY2 - AH0 N S\nOVERREPRESENT  OW1 - V ER0 - R EH2 - P R AH0 - Z EH1 N T\nOVERREPRESENTED  OW1 - V ER0 - R EH2 - P R AH0 - Z EH1 N - T IH0 D\nOVERRIDDEN  OW1 - V ER0 - R IH1 - D AH0 N\nOVERRIDE  OW1 - V ER0 - R AY2 D\nOVERRIDES  OW1 - V ER0 - R AY2 D Z\nOVERRIDING  OW1 - V ER0 - R AY2 - D IH0 NG\nOVERRIPE  OW1 - V ER0 - R AY1 P\nOVERRODE  OW1 - V ER0 - R OW1 D\nOVERRULE  OW1 - V ER0 - R UW2 L\nOVERRULED  OW2 - V ER0 - R UW1 L D\nOVERRULING  OW1 - V ER0 - R UW2 - L IH0 NG\nOVERRUN  OW1 - V ER0 - R AH2 N\nOVERRUNNING  OW1 - V ER0 - R AH2 - N IH0 NG\nOVERRUNS  OW1 - V ER0 - R AH2 N Z\nOVERS  OW1 - V ER0 Z\nOVERSAW  OW1 - V ER0 - S AO2\nOVERSEA  OW2 - V ER0 - S IY1\nOVERSEAS  OW1 - V ER0 - S IY1 Z\nOVERSEE  OW1 - V ER0 - S IY2\nOVERSEEING  OW1 - V ER0 - S IY2 - IH0 NG\nOVERSEEN  OW1 - V ER0 - S IY2 N\nOVERSEER  OW1 - V ER0 - S IY1 - ER0\nOVERSEERS  OW2 - V ER0 - S IY1 - ER0 Z\nOVERSEES  OW1 - V ER0 - S IY2 Z\nOVERSELL  OW1 - V ER0 - S EH2 L\nOVERSELLING  OW1 - V ER0 - S EH2 - L IH0 NG\nOVERSENSITIVE  OW2 - V ER0 - S EH1 N - S AH0 - T IH0 V\nOVERSENSITIVITY  OW2 - V ER0 - S EH0 N - S AH0 - T IH1 - V IH0 - T IY0\nOVERSHADOW  OW1 - V ER0 - SH AE1 - D OW0\nOVERSHADOWED  OW2 - V ER0 - SH AE1 - D OW0 D\nOVERSHADOWING  OW1 - V ER0 - SH AE1 - D OW0 - IH0 NG\nOVERSHADOWS  OW1 - V ER0 - SH AE1 - D OW0 Z\nOVERSHOOT  OW1 - V ER0 - SH UW2 T\nOVERSHOOTING  OW1 - V ER0 - SH UW2 - T IH0 NG\nOVERSHOT  OW1 - V ER0 - SH AA2 T\nOVERSIGHT  OW1 - V ER0 - S AY2 T\nOVERSIMPLIFICATION  OW0 - V ER0 - S IH1 M - P L IH0 - F IH0 - K EY2 - SH AH0 N\nOVERSIMPLIFIED  OW0 - V ER0 - S IH1 M - P L IH0 - F AY2 D\nOVERSIMPLIFY  OW0 - V ER0 - S IH1 M - P L IH0 - F AY2\nOVERSIMPLIFYING  OW0 - V ER0 - S IH1 M - P L IH0 - F AY2 - IH0 NG\nOVERSIZE  OW2 - V ER0 - S AY1 Z\nOVERSIZED  OW1 - V ER0 - S AY1 Z D\nOVERSIZES  OW2 - V ER0 - S AY1 - Z IH0 Z\nOVERSLEPT  OW1 - V ER0 - S L EH1 P T\nOVERSOLD  OW1 - V ER0 - S OW1 L D\nOVERSON  OW1 - V ER0 - S AH0 N\nOVERSPEND  OW1 - V ER0 - S P EH2 N D\nOVERSPENDING  OW1 - V ER0 - S P EH2 N - D IH0 NG\nOVERSPENDS  OW1 - V ER0 - S P EH2 N D Z\nOVERSPENT  OW1 - V ER0 - S P EH1 N T\nOVERSTAFF  OW1 - V ER0 - S T AE2 F\nOVERSTAFFED  OW1 - V ER0 - S T AE2 F T\nOVERSTATE  OW1 - V ER0 - S T EY2 T\nOVERSTATED  OW1 - V ER0 - S T EY2 - T IH0 D\nOVERSTATEMENT  OW1 - V ER0 - S T EY2 T - M AH0 N T\nOVERSTATEMENTS  OW1 - V ER0 - S T EY2 T - M AH0 N T S\nOVERSTATES  OW1 - V ER0 - S T EY2 T S\nOVERSTATING  OW1 - V ER0 - S T EY2 - T IH0 NG\nOVERSTAY  OW2 - V ER0 - S T EY1\nOVERSTAYED  OW2 - V ER0 - S T EY1 D\nOVERSTEP  OW1 - V ER0 - S T EH2 P\nOVERSTEPPED  OW1 - V ER0 - S T EH2 P T\nOVERSTEPPING  OW1 - V ER0 - S T EH2 - P IH0 NG\nOVERSTOCK  OW1 - V ER0 - S T AA1 K\nOVERSTOCKED  OW1 - V ER0 - S T AA1 K T\nOVERSTREET  OW1 - V ER0 - S T R IY2 T\nOVERSTROM  OW1 - V ER0 - S T R AA1 M\nOVERSTUFF  OW1 - V ER0 - S T AH2 F\nOVERSTUFFED  OW1 - V ER0 - S T AH2 F T\nOVERSUBSCRIBE  OW2 - V ER0 - S AH0 B - S K R AY1 B\nOVERSUBSCRIBED  OW2 - V ER0 - S AH0 B - S K R AY1 B D\nOVERSUPPLIED  OW2 - V ER0 - S AH0 - P L AY1 D\nOVERSUPPLY  OW2 - V ER0 - S AH0 - P L AY1\nOVERT  OW0 - V ER1 T\nOVERT(2)  OW1 - V ER0 T\nOVERTAKE  OW1 - V ER0 - T EY2 K\nOVERTAKEN  OW1 - V ER0 - T EY2 - K AH0 N\nOVERTAKING  OW1 - V ER0 - T EY2 - K IH0 NG\nOVERTAX  OW1 - V ER0 - T AE2 K S\nOVERTAXED  OW2 - V ER0 - T AE1 K S T\nOVERTHREW  OW2 - V ER0 - TH R UW1\nOVERTHROW  OW1 - V ER0 - TH R OW2\nOVERTHROWING  OW1 - V ER0 - TH R OW2 - IH0 NG\nOVERTHROWN  OW2 - V ER0 - TH R OW1 N\nOVERTIME  OW1 - V ER0 - T AY2 M\nOVERTLY  OW0 - V ER1 T - L IY0\nOVERTON  OW1 - V ER0 - T AH0 N\nOVERTONE  OW1 - V ER0 - T OW2 N\nOVERTONES  OW1 - V ER0 - T OW2 N Z\nOVERTOOK  OW2 - V ER0 - T UH1 K\nOVERTRAIN  OW0 - V ER0 - T R EY1 N\nOVERTRAINING  OW0 - V ER0 - T R EY1 - N IH0 NG\nOVERTURE  OW1 - V ER0 - CH ER0\nOVERTURES  OW1 - V ER0 - CH UH2 R Z\nOVERTURF  OW1 - V ER0 - T ER2 F\nOVERTURN  OW1 - V ER0 - T ER2 N\nOVERTURNED  OW1 - V ER0 - T ER2 N D\nOVERTURNING  OW1 - V ER0 - T ER2 - N IH0 NG\nOVERTURNS  OW1 - V ER0 - T ER2 N Z\nOVERUSE  OW2 - V ER0 - Y UW1 Z\nOVERUSED  OW2 - V ER0 - Y UW1 Z D\nOVERUSING  OW2 - V ER0 - Y UW1 - Z IH0 NG\nOVERVALUATION  OW2 - V ER0 - V AE2 L - Y UW0 - EY1 - SH AH0 N\nOVERVALUE  OW1 - V ER0 - V AE2 L - Y UW0\nOVERVALUED  OW1 - V ER0 - V AE2 L - Y UW0 D\nOVERVIEW  OW1 - V ER0 - V Y UW2\nOVERWEIGHT  OW2 - V ER0 - W EY1 T\nOVERWEIGHTED  OW2 - V ER0 - W EY1 - T IH0 D\nOVERWHELM  OW2 - V ER0 - W EH1 L M\nOVERWHELM(2)  OW2 - V ER0 - HH W EH1 L M\nOVERWHELMED  OW2 - V ER0 - W EH1 L M D\nOVERWHELMED(2)  OW2 - V ER0 - HH W EH1 L M D\nOVERWHELMING  OW2 - V ER0 - W EH1 L - M IH0 NG\nOVERWHELMING(2)  OW2 - V ER0 - HH W EH1 L - M IH0 NG\nOVERWHELMINGLY  OW2 - V ER0 - W EH1 L - M IH0 NG - L IY0\nOVERWHELMINGLY(2)  OW2 - V ER0 - HH W EH1 L - M IH0 NG - L IY0\nOVERWHELMINGLY(3)  OW2 - V ER0 - HH W EH1 L - M IH0 NG - G L IY0\nOVERWHELMINGLY(4)  OW2 - V ER0 - W EH1 L - M IH0 NG - G L IY0\nOVERWHELMS  OW2 - V ER0 - W EH1 L M Z\nOVERWHELMS(2)  OW2 - V ER0 - HH W EH1 L M Z\nOVERWINTER  OW2 - V ER0 - W IH1 N - T ER0\nOVERWORK  OW2 - V ER0 - W ER1 K\nOVERWORKED  OW2 - V ER0 - W ER1 K T\nOVERWRITE  OW2 - V ER0 - R AY1 T\nOVERWRITTEN  OW2 - V ER0 - R IH1 - T AH0 N\nOVERWROUGHT  OW2 - V ER0 - R AO1 T\nOVERY  OW1 - V ER0 - IY0\nOVERZEALOUS  OW2 - V ER0 - Z EH1 - L AH0 S\nOVESON  AA1 - V AH0 - S AH0 N\nOVETT  OW2 - V EH1 T\nOVETT'S  OW2 - V EH1 T S\nOVEX  OW1 - V EH0 K S\nOVIATT  OW1 - V IY0 - AA2 T\nOVIEDO  OW0 - V IY0 - EY1 - D OW0\nOVIPAROUS  OW0 - V IH1 - P ER0 - AH0 S\nOVITT  OW1 - V IH0 T\nOVITZ  OW0 - V IH1 T S\nOVITZ'S  OW0 - V IH1 T - S IH0 Z\nOVOID  OW1 - V OY2 D\nOVONIC  OW0 - V AA1 - N IH0 K\nOVOVIVIPAROUS  OW2 - V OW2 - V AY2 - V IH1 - P ER0 - AH0 S\nOVSHINSKY  AA0 V - SH IH1 N - S K IY0\nOVULATION  OW2 - V Y AH0 - L EY1 - SH AH0 N\nOVULE  OW1 - V Y UW0 L\nOVUM  OW1 - V AH0 M\nOW  OW1\nOW(2)  AW1\nOWADA  OW0 - AA1 - D AH0\nOWADES  OW0 - AA1 D Z\nOWCZARZAK  AW0 - CH AA1 R - Z AH0 K\nOWE  OW1\nOWED  OW1 D\nOWEN  OW1 - AH0 N\nOWEN'S  OW1 - AH0 N Z\nOWENBY  AW1 - IH0 N - B IY0\nOWENS  OW1 - AH0 N Z\nOWENS'S  OW1 - AH0 N - Z IH0 Z\nOWENSBORO  OW1 - AH0 N Z - B ER0 - OW0\nOWENSBY  AW1 - IH0 N S - B IY0\nOWES  OW1 Z\nOWING  OW1 - IH0 NG\nOWINGS  OW1 - IH0 NG Z\nOWL  AW1 L\nOWLS  AW1 L Z\nOWN  OW1 N\nOWNBEY  AW1 N - B IY0\nOWNBY  AW1 N - B IY0\nOWNED  OW1 N D\nOWNER  OW1 - N ER0\nOWNER'S  OW1 - N ER0 Z\nOWNERS  OW1 - N ER0 Z\nOWNERS'  OW1 - N ER0 Z\nOWNERSHIP  OW1 - N ER0 - SH IH2 P\nOWNING  OW1 - N IH0 NG\nOWNS  OW1 N Z\nOWOSSO  OW0 - AO1 - S OW0\nOWSLEY  AW1 S - L IY0\nOWYHEE  OW1 - IH0 - HH IY0\nOX  AA1 K S\nOXALATES  AA1 K - S AH0 - L EY2 T S\nOXALIS  AA1 K - S AH0 - L AH0 S\nOXBOW  AA1 K S - B OW2\nOXBRIDGE  AA1 K S - B R IH2 JH\nOXCART  AA1 K S - K AA2 R T\nOXDON  AA1 K S - D AA2 N\nOXEN  AA1 K - S AH0 N\nOXENDINE  AA1 K - S IH0 N - D AY0 N\nOXFAM  AA1 K S - F AE2 M\nOXFAM'S  AA1 K S - F AE2 M Z\nOXFORD  AA1 K S - F ER0 D\nOXFORD'S  AA1 K S - F ER0 D Z\nOXFORDS  AA1 K S - F ER0 D Z\nOXIDANT  AA1 K - S AH0 - D AH0 N T\nOXIDANTS  AA1 K - S IH0 - D AH0 N T S\nOXIDATION  AA2 K - S AH0 - D EY1 - SH AH0 N\nOXIDE  AA1 K - S AY2 D\nOXIDES  AA1 K - S AY2 D Z\nOXIDIZE  AA1 K - S AH0 - D AY2 Z\nOXIDIZED  AA1 K - S AH0 - D AY2 Z D\nOXIDIZER  AA1 K - S IH0 - D AY2 - Z ER0\nOXIDIZING  AA1 K - S AH0 - D AY2 - Z IH0 NG\nOXIDYNE  AA1 K - S IH0 - D AY2 N\nOXLEY  AA1 K S - L IY0\nOXMAN  AA1 K S - M AH0 N\nOXNARD  AA1 K S - N ER0 D\nOXNER  AA1 K S - N ER0\nOXOCO  AA0 K - S OW1 - K OW0\nOXTON  AA1 K - S T AH0 N\nOXY  AA1 K - S IY0\nOXYGEN  AA1 K - S AH0 - JH AH0 N\nOXYGEN(2)  AA1 K - S IH0 - JH AH0 N\nOXYGENATE  AA1 K - S AH0 - JH AH0 - N EY2 T\nOXYGENATED  AA1 K - S AH0 - JH AH0 - N EY2 - T AH0 D\nOXYMORON  AA2 K - S IY1 - M AO1 - R AA0 N\nOXYTOCIN  AA2 K - S AH0 - T OW1 - S AH0 N\nOY  OY1\nOYAMA  OW0 - Y AA1 - M AH0\nOYE  OY1\nOYEN  OY1 - IH0 N\nOYER  OY1 - ER0\nOYLER  OY1 - L ER0\nOYOLA  OY2 - OW1 - L AH0\nOYSTER  OY1 - S T ER0\nOYSTERS  OY1 - S T ER0 Z\nOZ  AA1 Z\nOZAKI  OW0 - Z AA1 - K IY0\nOZAL  OW1 - Z AH0 L\nOZAL'S  OW0 - Z AA1 L Z\nOZANICH  AH0 - Z AE1 - N IH0 HH\nOZANNE  OW1 - Z AE0 N\nOZARK  OW1 - Z AA2 R K\nOZARKS  OW1 - Z AA2 R K S\nOZAWA  OW0 - Z AA1 - W AH0\nOZBUN  AA1 Z - B AH0 N\nOZBURN  AA1 Z - B ER0 N\nOZELLE  AH0 - Z EH1 L\nOZGA  OW1 Z - G AH0\nOZICK  OW1 - Z IH0 K\nOZICK'S  OW1 - Z IH0 K S\nOZIER  OW1 - Z IY0 - ER0\nOZIMEK  AH0 - Z IH1 - M EH0 K\nOZMENT  AA1 Z - M AH0 N T\nOZMUN  AA1 Z - M AH0 N\nOZOLINS  OW0 - Z OW1 - L IY0 N Z\nOZOLS  OW1 - Z OW0 L Z\nOZONE  OW1 - Z OW2 N\nOZORA  AH0 - Z AO1 - R AH0\nOZUNA  OW0 - Z UW1 - N AH0\nOZZIE  AA1 - Z IY0\nP  P IY1\nP'S  P IY1 Z\nP.  P IY1\nP.'S  P IY1 Z\nP.M.  P IY1 - EH1 M\nP.S  P IY1 Z\nPA  P AA1\nPAAP  P AA1 P\nPAAPE  P AA1 P\nPAAR  P AA1 R\nPAASCH  P AA1 SH\nPAAVOLA  P AA2 - V OW1 - L AH0\nPABLO  P AA1 - B L OW0\nPABLUM  P AE1 - B L AH0 M\nPABON  P AA0 - B AO1 N\nPABST  P AE1 B S T\nPAC  P AE1 K\nPAC'S  P AE1 K S\nPACA  P AA1 - K AH0\nPACA(2)  P AE1 - K AH0\nPACCAR  P AH0 - K AA1 R\nPACCIONE  P AA0 K - CH OW1 - N IY0\nPACE  P EY1 S\nPACE'S  P EY1 - S IH0 Z\nPACED  P EY1 S T\nPACELLA  P AH0 - S EH1 - L AH0\nPACELLI  P AH0 - S EH1 - L IY0\nPACEMAKER  P EY1 S - M EY2 - K ER0\nPACEMAKERS  P EY1 S - M EY2 - K ER0 Z\nPACER  P EY1 - S ER0\nPACERS  P EY1 - S ER0 Z\nPACES  P EY1 - S IH0 Z\nPACESETTER  P EY1 S - EH2 - T ER0\nPACEWAY  P EY1 S - W EY2\nPACEY  P EY1 - S IY0\nPACHECO  P AH0 - CH EH1 - K OW0\nPACHINKO  P AH0 - CH IH1 NG - K OW0\nPACHOLDER  P AE1 - CH AH0 L - D ER0\nPACHOLSKI  P AH0 - HH OW1 L - S K IY0\nPACHTER  P AE1 K - T ER0\nPACHYSANDRA  P AE2 - CH IH0 - S AE1 N - D R AH0\nPACI  P AA1 - CH IY0\nPACIFIC  P AH0 - S IH1 - F IH0 K\nPACIFIC'S  P AH0 - S IH1 - F IH0 K S\nPACIFICA  P AH0 - S IH1 - F IH0 - K AH0\nPACIFICARE  P AH0 - S IH1 - F IH0 - K EH2 R\nPACIFICATION  P AE2 - S AH0 - F AH0 - K EY1 - SH AH0 N\nPACIFICO  P AA0 - CH IY0 - F IY1 - K OW0\nPACIFICORP  P AH0 - S IH1 - F IH0 - K AO0 R P\nPACIFIED  P AE1 - S AH0 - F AY2 D\nPACIFIER  P AE1 - S AH0 - F AY2 - ER0\nPACIFIERS  P AE1 - S AH0 - F AY2 - ER0 Z\nPACIFISM  P AE1 - S IH0 - F IH2 - Z AH0 M\nPACIFIST  P AE1 - S IH0 - F IH0 S T\nPACIFISTS  P AE1 - S IH0 - F IH0 S T S\nPACIFISTS(2)  P AE1 - S IH0 - F IH0 S S\nPACIFISTS(3)  P AE1 - S IH0 - F IH0 S\nPACIFY  P AE1 - S AH0 - F AY2\nPACING  P EY1 - S IH0 NG\nPACINI  P AA0 - CH IY1 - N IY0\nPACINO  P AH0 - S IY1 - N OW0\nPACK  P AE1 K\nPACKAGE  P AE1 - K AH0 JH\nPACKAGE'S  P AE1 - K IH0 - JH IH0 Z\nPACKAGE(2)  P AE1 - K IH0 JH\nPACKAGED  P AE1 - K IH0 JH D\nPACKAGER  P AE1 - K IH0 - JH ER0\nPACKAGERS  P AE1 - K IH0 - JH ER0 Z\nPACKAGES  P AE1 - K AH0 - JH AH0 Z\nPACKAGES(2)  P AE1 - K IH0 - JH IH0 Z\nPACKAGING  P AE1 - K IH0 - JH IH0 NG\nPACKARD  P AE1 - K ER0 D\nPACKARD'S  P AE1 - K ER0 D Z\nPACKED  P AE1 K T\nPACKER  P AE1 - K ER0\nPACKERS  P AE1 - K ER0 Z\nPACKET  P AE1 - K AH0 T\nPACKET(2)  P AE1 - K IH0 T\nPACKETS  P AE1 - K IH0 T S\nPACKETT  P AE1 - K IH0 T\nPACKHAM  P AE1 K - HH AH0 M\nPACKING  P AE1 - K IH0 NG\nPACKINGHOUSE  P AE1 - K IH0 NG - HH AW2 S\nPACKMAN  P AE1 K - M AH0 N\nPACKS  P AE1 K S\nPACKWOOD  P AE1 K - W UH2 D\nPACKWOOD'S  P AE1 K - W UH2 D Z\nPACMAN  P AE1 K - M AH0 N\nPACO  P EY1 - K OW0\nPACS  P AE1 K S\nPACT  P AE1 K T\nPACT'S  P AE1 K T S\nPACTEL  P AE1 K - T EH2 L\nPACTEL'S  P AE1 K - T EH2 L Z\nPACTO  P AE1 K - T OW0\nPACTS  P AE1 K T S\nPACTS(2)  P AE1 K S\nPACYNA  P AA1 - K IY0 - N AH0\nPACYNA(2)  P AH0 - S IY1 - N AH0\nPACZKOWSKI  P AH0 CH - K AO1 F S - K IY0\nPAD  P AE1 D\nPADDACK  P AE1 - D AH0 K\nPADDED  P AE1 - D AH0 D\nPADDED(2)  P AE1 - D IH0 D\nPADDEN  P AE1 - D AH0 N\nPADDIES  P AE1 - D IY0 Z\nPADDING  P AE1 - D IH0 NG\nPADDINGTON  P AE1 - D IH0 NG - T AH0 N\nPADDLE  P AE1 - D AH0 L\nPADDLED  P AE1 - D AH0 L D\nPADDLES  P AE1 - D AH0 L Z\nPADDLING  P AE1 - D AH0 L - IH0 NG\nPADDLING(2)  P AE1 D - L IH0 NG\nPADDOCK  P AE1 - D AH0 K\nPADDY  P AE1 - D IY0\nPADDY'S  P AE1 - D IY0 Z\nPADEN  P EY1 - D AH0 N\nPADEREWSKI  P AA2 - D ER0 - UW1 S - K IY0\nPADFIELD  P AE1 D - F IY2 L D\nPADGET  P AE1 - JH IH0 T\nPADGETT  P AE1 - JH IH0 T\nPADGITT  P AE1 - JH IH0 T\nPADILLA  P AH0 - D IH1 - L AH0\nPADLEY  P AE1 D - L IY0\nPADLOCK  P AE1 D - L AA2 K\nPADLOCKED  P AE1 D - L AA2 K T\nPADLOCKS  P AE1 D - L AA2 K S\nPADMANABHAN  P AE0 D - M AE1 - N AH0 - B AE2 N\nPADMANABHAN(2)  P AA2 D - M AH0 - N AA1 - B AH0 N\nPADOVANO  P AA0 - D OW0 - V AA1 - N OW0\nPADRE  P AE1 - D R EY2\nPADRES  P AE1 - D R EY2 Z\nPADRICK  P AE1 - D R IH0 K\nPADRO  P AA1 - D R OW0\nPADRON  P AE1 - D R AH0 N\nPADS  P AE1 D Z\nPADUA  P AE1 - D Y UW0 - AH0\nPADUANO  P AA0 - D UW0 - AA1 - N OW0\nPADUCAH  P AH0 - D UW1 - K AH0\nPADULA  P AA0 - D UW1 - L AH0\nPAE  P AY1\nPAEAN  P IY1 - AH0 N\nPAEANS  P IY1 - AH0 N Z\nPAEK  P IY1 K\nPAETH  P IY1 TH\nPAETZ  P IY1 T S\nPAEZ  P AY0 - EH1 Z\nPAFF  P AE1 F\nPAFFORD  P AE1 - F ER0 D\nPAGAN  P EY1 - G AH0 N\nPAGANELLI  P AA0 - G AA0 - N EH1 - L IY0\nPAGANI  P AA0 - G AA1 - N IY0\nPAGANINI  P AE2 - G AH0 - N IY1 - N IY0\nPAGANISM  P EY1 - G AH0 - N IH2 - Z AH0 M\nPAGANO  P AA0 - G AA1 - N OW0\nPAGAR  P AE1 - G ER0\nPAGE  P EY1 JH\nPAGE'S  P EY1 - JH IH0 Z\nPAGEANT  P AE1 - JH AH0 N T\nPAGEANTRY  P AE1 - JH AH0 N - T R IY0\nPAGEANTS  P AE1 - JH AH0 N T S\nPAGED  P EY1 JH D\nPAGEL  P AE1 - G AH0 L\nPAGELS  P AE1 - G AH0 L Z\nPAGEMAKER  P EY1 JH - M EY2 - K ER0\nPAGENKOPF  P AE1 - G AH0 N - K AO0 P F\nPAGENKOPF(2)  P AE1 - G AH0 N - K AO0 F\nPAGER  P EY1 - JH ER0\nPAGERS  P EY1 - JH ER0 Z\nPAGES  P EY1 - JH AH0 Z\nPAGES(2)  P EY1 - JH IH0 Z\nPAGET  P AE1 - JH AH0 T\nPAGETT  P AE1 - JH AH0 T\nPAGETTE  P AE2 - JH EH1 T\nPAGEY  P EY1 - JH IY0\nPAGEZY  P AE2 - JH EH1 - Z IY0\nPAGINATION  P AE2 - JH AH0 - N EY1 - SH AH0 N\nPAGING  P EY1 - JH IH0 NG\nPAGLIA  P AE1 G - L IY0 - AH0\nPAGLIARO  P AE2 G - L IY0 - AA1 - R OW0\nPAGLIARULO  P AE2 G - L IY0 - ER0 - UW1 - L OW0\nPAGLIUCA  P AE2 G - L IY0 - UW1 - K AH0\nPAGLIUCA'S  P AE2 G - L IY0 - UW1 - K AH0 Z\nPAGNI  P AE1 G - N IY0\nPAGNOTTA  P AA0 G - N OW1 - T AH0\nPAGODA  P AH0 - G OW1 - D AH0\nPAGURIAN  P AH0 - G Y UH1 - R IY0 - AH0 N\nPAH  P AE1\nPAHL  P AA1 L\nPAHNOS  P AA1 - N OW0 S\nPAI  P AA1 - IY0\nPAID  P EY1 D\nPAIGE  P EY1 JH\nPAIGHTON  P EY1 - T AH0 N\nPAIGN  P EY1 N\nPAIK  P EY1 K\nPAIL  P EY1 L\nPAILLE  P EY1 L\nPAILS  P EY1 L Z\nPAIN  P EY1 N\nPAINE  P EY1 N\nPAINED  P EY1 N D\nPAINESVILLE  P EY1 N Z - V IH2 L\nPAINEWEBBER  P EY1 N - W EH1 - B ER0\nPAINEWEBBER'S  P EY1 N - W EH1 - B ER0\nPAINFUL  P EY1 N - F AH0 L\nPAINFULLY  P EY1 N - F AH0 - L IY0\nPAINKILLER  P EY1 N - K IH2 - L ER0\nPAINKILLERS  P EY1 N - K IH2 - L ER0 Z\nPAINLESS  P EY1 N - L AH0 S\nPAINLESSLY  P EY1 N - L AH0 S - L IY0\nPAINO  P EY1 - N OW0\nPAINS  P EY1 N Z\nPAINSTAKING  P EY1 N S - T EY2 - K IH0 NG\nPAINSTAKINGLY  P EY1 N S - T EY2 - K IH0 NG - L IY0\nPAINT  P EY1 N T\nPAINTBALL  P EY1 N T - B AA2 L\nPAINTBRUSH  P EY1 N T - B R AH2 SH\nPAINTBRUSHES  P EY1 N T - B R AH2 - SH IH0 S\nPAINTED  P EY1 N - T AH0 D\nPAINTED(2)  P EY1 N - T IH0 D\nPAINTED(3)  P EY1 - N AH0 D\nPAINTED(4)  P EY1 - N IH0 D\nPAINTER  P EY1 N - T ER0\nPAINTER'S  P EY1 N - T ER0 Z\nPAINTER'S(2)  P EY1 - N ER0 Z\nPAINTER(2)  P EY1 - N ER0\nPAINTERLY  P EY1 N - T ER0 - L IY0\nPAINTERLY(2)  P EY1 - N ER0 - L IY0\nPAINTERS  P EY1 N - T ER0 Z\nPAINTERS(2)  P EY1 - N ER0 Z\nPAINTING  P EY1 N - T IH0 NG\nPAINTING(2)  P EY1 - N IH0 NG\nPAINTINGS  P EY1 N - T IH0 NG Z\nPAINTINGS(2)  P EY1 - N IH0 NG Z\nPAINTS  P EY1 N T S\nPAIR  P EH1 R\nPAIRED  P EH1 R D\nPAIRING  P EH1 - R IH0 NG\nPAIRS  P EH1 R Z\nPAIS  P EY1 Z\nPAISLEY  P EY1 Z - L IY0\nPAISLEY'S  P EY1 Z - L IY0 Z\nPAIT  P EY1 T\nPAIUTE  P AY1 - Y UW0 T\nPAIVA  P EY1 - V AH0\nPAIZ  P EY1 Z\nPAJAK  P AY1 - AH0 K\nPAJAMA  P AH0 - JH AA1 - M AH0\nPAJAMA(2)  P AH0 - JH AE1 - M AH0\nPAJAMAS  P AH0 - JH AA1 - M AH0 Z\nPAJAMAS(2)  P AH0 - JH AE1 - M AH0 Z\nPAJOLE  P AH0 - JH OW1 L\nPAJOLI  P AH0 - JH OW1 - L IY0\nPAK  P AE1 K\nPAK'S  P AE1 K S\nPAKE  P EY1 K\nPAKEHA  P AH0 - K EY1 - HH AA0\nPAKISTAN  P AE1 - K IH0 - S T AE2 N\nPAKISTAN'S  P AE1 - K IH0 - S T AE2 N Z\nPAKISTANI  P AE2 - K IH0 - S T AE1 - N IY0\nPAKISTANIAN  P AE2 - K IH0 - S T AE1 - N IY0 - AH0 N\nPAKISTANIS  P AE2 - K IH0 - S T AE1 - N IY0 Z\nPAKULA  P AH0 - K UW1 - L AH0\nPAKULSKI  P AH0 - K AH1 L - S K IY0\nPAL  P AE1 L\nPAL'S  P AE1 L Z\nPALACE  P AE1 - L AH0 S\nPALACES  P AE1 - L AH0 - S AH0 Z\nPALACES(2)  P AE1 - L AH0 - S IH0 Z\nPALACIO  P AH0 - L EY1 - S IY0 - OW0\nPALACIOS  P AA0 - L AA0 - S IY1 - OW0 Z\nPALADINO  P AA0 - L AA0 - D IY1 - N OW0\nPALAFOX  P AE1 - L AH0 - F AA2 K S\nPALAIS  P AH0 - L EY1\nPALANCE  P AE1 - L AH0 N S\nPALANSKY  P AH0 - L AE1 N S - K IY0\nPALARDY  P AH0 - L AA1 R - D IY0\nPALASH  P AH0 - L AE1 SH\nPALATABILITY  P AE2 - L AH0 - T AH0 - B IH1 - L AH0 - T IY0\nPALATABLE  P AE1 - L AH0 - T AH0 - B AH0 L\nPALATE  P AE1 - L AH0 T\nPALATE(2)  P AE1 - L IH0 T\nPALATES  P AE1 - L AH0 T S\nPALATIAL  P AH0 - L EY1 - SH AH0 L\nPALATINE  P AE1 - L AH0 - T AY2 N\nPALAU  P AE1 - L AW0\nPALAU'S  P AH0 - L AW1 - UW0 Z\nPALAUANS  P AH0 - L AW1 - AH0 N Z\nPALAY  P EY1 - L EY2\nPALAZZI  P AA0 - L AA1 T - S IY0\nPALAZZO  P AH0 - L AA1 - Z OW0\nPALAZZOLA  P AA0 - L AA0 T - S OW1 - L AH0\nPALAZZOLO  P AA0 - L AA0 T - S OW1 - L OW0\nPALCA  P AE1 L - K AH0\nPALCA'S  P AE1 L - K AH0 Z\nPALCO  P AE1 L - K OW0\nPALDON  P AA1 L - D AH0 N\nPALE  P EY1 L\nPALECEK  P AA1 - L IH0 - CH EH0 K\nPALED  P EY1 L D\nPALEN  P AE1 - L AH0 N\nPALEOBOTANY  P EY2 - L IY0 - OW0 - B AA1 - T AH0 - N IY0\nPALEOCENE  P EY1 - L IY0 - AH0 - S IY2 N\nPALEONTOLOGIST  P EY2 - L IY0 - AH0 N - T AA1 - L AH0 - JH IH0 S T\nPALEONTOLOGISTS  P EY2 - L IY0 - AH0 N - T AA1 - L AH0 - JH IH0 S T S\nPALEONTOLOGISTS(2)  P EY2 - L IY0 - AH0 N - T AA1 - L AH0 - JH IH0 S S\nPALEONTOLOGISTS(3)  P EY2 - L IY0 - AH0 N - T AA1 - L AH0 - JH IH0 S\nPALEONTOLOGY  P EY2 - L IY0 - AH0 N - T AA1 - L AH0 - JH IY0\nPALEOZOIC  P EY2 - L IY0 - AH0 - Z OW1 - IH0 K\nPALERMO  P AH0 - L EH1 R - M OW0\nPALES  P EY1 L Z\nPALESE  P AA0 - L EY1 - Z IY0\nPALEST  P EY1 - L AH0 S T\nPALESTINE  P AE1 - L AH0 - S T AY2 N\nPALESTINIAN  P AE2 - L IH0 - S T IH1 - N IY0 - AH0 N\nPALESTINIAN'S  P AE2 - L IH0 - S T IH1 - N IY0 - AH0 N Z\nPALESTINIANS  P AE2 - L IH0 - S T IH1 - N IY0 - AH0 N Z\nPALESTINIANS'  P AE2 - L AH0 - S T IH1 - N IY0 - AH0 N Z\nPALETTE  P AE1 - L AH0 T\nPALEY  P EY1 - L IY0\nPALFREY  P AE1 L - F R IY0\nPALIMONY  P AE1 - L IH0 - M OW2 - N IY0\nPALIN  P AE1 - L IH0 N\nPALINKAS  P AE1 - L IH0 NG - K AH0 Z\nPALISADE  P AE2 - L IH0 - S EY1 D\nPALISADES  P AE2 - L IH0 - S EY1 D Z\nPALKA  P AE1 L - K AH0\nPALKAR  P AE1 L - K AA0 R\nPALKO  P AE1 L - K OW0\nPALKOVIC  P AH0 L - K AA1 - V IH0 K\nPALL  P AA1 L\nPALL(2)  P AO1 L\nPALLA  P AE1 - L AH0\nPALLADINO  P AA0 - L AA0 - D IY1 - N OW0\nPALLADIUM  P AH0 - L EY1 - D IY0 - AH0 M\nPALLANTE  P AA0 - L AA1 N - T IY0\nPALLAS  P AE1 - L AH0 S\nPALLER  P AE1 - L ER0\nPALLESCHI  P AA0 - L EH1 S - K IY0\nPALLET  P AE1 - L AH0 T\nPALLETS  P AE1 - L AH0 T S\nPALLETT  P AE1 - L AH0 T\nPALLIATIVE  P AE1 - L IY0 - AH0 - T IH0 V\nPALLIATIVES  P AE1 - L IY0 - AH0 - T IH0 V Z\nPALLID  P AE1 - L AH0 D\nPALLIDOTOMY  P AE2 - L IH0 - D AO1 - T AH0 - M IY0\nPALLO  P AE1 - L OW0\nPALLONE  P AA0 - L OW1 - N IY0\nPALM  P AA1 M\nPALM(2)  P AA1 L M\nPALMA  P AA1 L - M AH0\nPALMA'S  P AA1 L - M AH0 Z\nPALMATEER  P AE1 L - M AH0 - T IH0 R\nPALMATIER  P AE1 L - M AH0 - T IY0 - ER0\nPALMDALE  P AA1 M - D EY2 L\nPALMDALE'S  P AA1 M - D EY2 L Z\nPALME  P AA1 M\nPALME(2)  P AA1 L M\nPALMER  P AA1 - M ER0\nPALMER'S  P AA1 - M ER0 Z\nPALMER'S(2)  P AA1 L - M ER0 Z\nPALMER(2)  P AA1 L - M ER0\nPALMERI  P AA0 L - M EH1 - R IY0\nPALMERINO  P AO2 L - M EH0 - R IY1 - N OW0\nPALMERO  P AA0 L - M EH1 - R OW0\nPALMERTON  P AA1 - M ER0 - T AH0 N\nPALMERTREE  P AA1 - M ER0 - T R IY2\nPALMETTO  P AE0 L - M EH1 - T OW0\nPALMETTO(2)  P AA0 L - M EH1 - T OW0\nPALMGREN  P AE1 L M - G R EH0 N\nPALMIERI  P AO2 L - M IY0 - EH1 - R IY0\nPALMINTERI  P AO2 L - M IH0 N - T EH1 - R IY0\nPALMIRA  P AA0 L - M IH1 - R AH0\nPALMISANO  P AA0 L - M IY0 - S AA1 - N OW0\nPALMISTRY  P AA1 - M IH0 S - T R IY0\nPALMITER  P AE1 L - M AY0 - T ER0\nPALMITIC  P AE0 L - M IH1 - T IH0 K\nPALMOLIVE  P AA0 L - M AA1 - L IH0 V\nPALMORE  P AE1 L - M AO0 R\nPALMQUIST  P AE1 L M - K W IH0 S T\nPALMS  P AA1 M Z\nPALMS(2)  P AA1 L M Z\nPALMSTIERNA  P AO2 L M - S T IY0 - EH1 R - N AH0\nPALO  P AE1 - L OW0\nPALOMA  P AA0 - L OW1 - M AH0\nPALOMAR  P AE1 - L AH0 - M AA0 R\nPALOMARES  P AA0 - L OW0 - M AA1 - R EH0 S\nPALOMBA  P AA0 - L OW1 M - B AH0\nPALOMBI  P AH0 - L AA1 M - B IY0\nPALOMBO  P AH0 - L AA1 M - B OW0\nPALOMETA  P AA0 - L OW0 - M EH1 - T AH0\nPALOMINO  P AE2 - L AH0 - M IY1 - N OW0\nPALOMITA  P AA0 - L OW0 - M IY1 - T AH0\nPALOMO  P AA0 - L OW1 - M OW0\nPALONE  P AH0 - L OW1 N\nPALONIUS  P AH0 - L OW1 - N IY0 - AH0 S\nPALOS  P AA1 - L OW0 Z\nPALPABLE  P AE1 L - P AH0 - B AH0 L\nPALPABLY  P AE1 L - P AH0 - B L IY0\nPALPITATION  P AE2 L - P AH0 - T EY1 - SH AH0 N\nPALPITATIONS  P AE2 L - P IH0 - T EY1 - SH AH0 N Z\nPALS  P AE1 L Z\nPALSY  P AO1 L - Z IY0\nPALTRY  P AO1 L - T R IY0\nPALTZ  P AO1 L T S\nPALUCH  P AE1 - L AH0 K\nPALUCK  P AE1 - L AH0 K\nPALUMBO  P AH0 - L AH1 M - B OW0\nPALUZZI  P AA0 - L UW1 T - S IY0\nPAM  P AE1 M\nPAM'S  P AE1 M Z\nPAMBY  P AE1 M - B IY0\nPAMELA  P AE1 - M AH0 - L AH0\nPAMELA'S  P AE1 - M AH0 - L AH0 Z\nPAMELINA  P AA0 - M EH0 - L IY1 - N AH0\nPAMELLA  P AH0 - M EH1 - L AH0\nPAMER  P EY1 - M ER0\nPAMMY  P AE1 - M IY0\nPAMOUR  P AE1 - M AO0 R\nPAMPAS  P AE1 M - P AH0 Z\nPAMPEL  P AE1 M - P AH0 L\nPAMPER  P AE1 M - P ER0\nPAMPERED  P AE1 M - P ER0 D\nPAMPERIN  P AE1 M - P ER0 - IH0 N\nPAMPERING  P AE1 M - P ER0 - IH0 NG\nPAMPERS  P AE1 M - P ER0 Z\nPAMPHLET  P AE1 M - F L AH0 T\nPAMPHLETEER  P AE2 M - F L AH0 - T IH1 R\nPAMPHLETS  P AE1 M - F L AH0 T S\nPAMPLIN  P AE1 M - P L IH0 N\nPAMPLONA  P AE0 M - P L OW1 - N AH0\nPAN  P AE1 N\nPAN'S  P AE1 N Z\nPANACEA  P AE2 - N AH0 - S IY1 - AH0\nPANACHE  P AH0 - N AA1 SH\nPANACO  P AE1 - N AH0 - K OW0\nPANAGOPOULOS  P AE0 - N AH0 - G AA1 - P AH0 - L IH0 S\nPANAGOS  P AA0 - N AA1 - G OW0 Z\nPANAM  P AE2 - N AE1 M\nPANAMA  P AE1 - N AH0 - M AA2\nPANAMA'S  P AE1 - N AH0 - M AA2 Z\nPANAMANIAN  P AE2 - N AH0 - M EY1 - N IY0 - AH0 N\nPANAMANIANS  P AE2 - N AH0 - M EY1 - N IY0 - AH0 N Z\nPANAMSAT  P AH0 - N AE1 M - S AE0 T\nPANAMSAT(2)  P AE1 - N AE2 M - S AE2 T\nPANARO  P AA0 - N AA1 - R OW0\nPANAS  P AE1 - N AH0 Z\nPANASONIC  P AE2 - N AH0 - S AA1 - N IH0 K\nPANCAKE  P AE1 N - K EY2 K\nPANCAKED  P AE1 N - K EY2 K T\nPANCAKES  P AE1 N - K EY2 K S\nPANCANADIAN  P AE2 NG - K AH0 - N EY1 - D IY0 - AH0 N\nPANCER  P AE1 N - S ER0\nPANCHO  P AE1 N - CH OW0\nPANCIERA  P AA0 N - CH IH1 - R AH0\nPANCOAST  P AE1 N - K OW2 S T\nPANCONTINENTAL  P AE1 N - K AA2 N - T AH0 - N EH1 N - T AH0 L\nPANCREAS  P AE1 N - K R IY0 - AH0 S\nPANCREATIC  P AE2 N - K R IY0 - AE1 - T IH0 K\nPANDA  P AE1 N - D AH0\nPANDANUS  P AE0 N - D EY1 - N AH0 S\nPANDAS  P AE1 N - D AH0 Z\nPANDEMIC  P AE0 N - D EH1 - M IH0 K\nPANDEMONIUM  P AE2 N - D IH0 - M OW1 - N IY0 - AH0 M\nPANDER  P AE1 N - D ER0\nPANDERED  P AE1 N - D ER0 D\nPANDERING  P AE1 N - D ER0 - IH0 NG\nPANDEY  P AA1 N - D EY2\nPANDICK  P AE1 N - D IH2 K\nPANDIT  P AH1 N - D AH0 T\nPANDO  P AA1 N - D OW0\nPANDOLFI  P AA0 N - D OW1 L - F IY0\nPANDOLFO  P AA0 N - D OW1 L - F OW0\nPANDORA  P AE0 N - D AO1 - R AH0\nPANDORA'S  P AE0 N - D AO1 - R AH0 Z\nPANDYA  P AA1 N - D Y AH0\nPANE  P EY1 N\nPANEBIANCO  P AA0 N - EH0 - B IY0 - AA1 N - K OW0\nPANEK  P AE1 - N IH0 K\nPANEL  P AE1 - N AH0 L\nPANEL'S  P AE1 - N AH0 L Z\nPANELED  P AE1 - N AH0 L D\nPANELING  P AE1 - N AH0 - L IH0 NG\nPANELIST  P AE1 - N AH0 - L AH0 S T\nPANELISTS  P AE1 - N AH0 - L IH0 S T S\nPANELISTS(2)  P AE1 - N AH0 - L IH0 S S\nPANELISTS(3)  P AE1 - N AH0 - L IH0 S\nPANELIZATION  P AE1 - N AH0 - L AH0 - Z EY1 - SH AH0 N\nPANELIZE  P AE1 - N AH0 - L AY2 Z\nPANELIZED  P AE1 - N AH0 - L AY2 Z D\nPANELLA  P AH0 - N EH1 - L AH0\nPANELS  P AE1 - N AH0 L Z\nPANELS'  P AE1 - N AH0 L Z\nPANEM  P EY1 - N AH0 M\nPANEPINTO  P AA0 - N EH0 - P IY1 N - T OW0\nPANES  P EY1 N Z\nPANETTA  P AH0 - N EH1 - T AH0\nPANETTA'S  P AH0 - N EH1 - T AH0 Z\nPANFIDA  P AE2 N - F IY1 - D AH0\nPANFIL  P AE1 N - F IH0 L\nPANFILE  P AE1 N - F AY1 L\nPANFUL  P AE1 N - F AH0 L\nPANFULS  P AE1 N - F AH0 L Z\nPANG  P AE1 NG\nPANGALLO  P AA0 NG - G AA1 - L OW0\nPANGBORN  P AE1 NG - B AO2 R N\nPANGBURN  P AE1 NG - B ER2 N\nPANGELS  P AE2 NG - G EH1 L Z\nPANGLE  P AE1 NG - G AH0 L\nPANGLOSS  P AE1 N - G L AA2 S\nPANGLOSS(2)  P AE1 NG - G L AA2 S\nPANGS  P AE1 NG Z\nPANHANDLE  P AE1 N - HH AE2 N - D AH0 L\nPANHANDLE'S  P AE1 N - HH AE2 N - D AH0 L Z\nPANHANDLER  P AE1 N - HH AE2 N D - L ER0\nPANHANDLERS  P AE1 N - HH AE2 N D - L ER0 Z\nPANHANDLING  P AE1 N - HH AE2 N D - L IH0 NG\nPANIAGUA  P AA0 - N IY0 - AA1 - G AH0\nPANIC  P AE1 - N IH0 K\nPANIC'S  P AE1 - N IH0 K S\nPANICCIA  P AA0 - N IY1 - CH AH0\nPANICKED  P AE1 - N IH0 K T\nPANICKING  P AE1 - N IH0 - K IH0 NG\nPANICKY  P AE1 - N IH0 - K IY0\nPANICO  P AA0 - N IY1 - K OW0\nPANICS  P AE1 - N IH0 K S\nPANIK  P AE1 - N IH0 K\nPANKAU  P AE1 NG - K AW0\nPANKEY  P AE1 N - K IY2\nPANKKI  P AE1 NG - K IY0\nPANKO  P AE1 NG - K OW0\nPANKONIN  P AE1 NG - K AH0 - N IH0 N\nPANKOW  P AE1 NG - K OW0\nPANKRATZ  P AE1 NG - K R AH0 T S\nPANKY  P AE1 NG - K IY0\nPANMUNJOM  P AE2 N - M UW0 N - JH AO1 M\nPANMURE  P AE1 N - M UH2 R\nPANNED  P AE1 N D\nPANNELL  P AE1 - N AH0 L\nPANNIER  P AE1 - N IY0 - ER0\nPANNILL  P AE1 - N IH0 L\nPANNILL'S  P AE1 - N IH0 L Z\nPANNING  P AE1 - N IH0 NG\nPANNONE  P AA0 - N OW1 - N IY0\nPANNU  P AA1 - N UW0\nPANNULLO  P AA0 - N UW1 - L OW0\nPANNY  P AE1 - N IY0\nPANOPLY  P AE1 - N AA0 - P L IY0\nPANOPOLYS  P AH0 - N AA1 - P AH0 - L IY0 Z\nPANORA  P AH0 - N AO1 - R AH0\nPANORAMA  P AE2 - N ER0 - AE1 - M AH0\nPANORAMIC  P AE2 - N ER0 - AE1 - M IH0 K\nPANOS  P AA1 - N OW0 S\nPANOZ  P AE1 - N AA0 Z\nPANOZZO  P AH0 - N AA1 - Z OW0\nPANPHILA  P AE1 N - F IH0 - L AH0\nPANS  P AE1 N Z\nPANSIES  P AE1 N - Z IY0 Z\nPANSOPHIC  P AE1 N - S AH0 - F IH0 K\nPANSY  P AE1 N - Z IY0\nPANT  P AE1 N T\nPANTALEO  P AA0 N - T AA1 - L IY0 - OW0\nPANTALONE  P AE1 N - T AH0 - L OW2 N\nPANTALOON  P AE1 N - T AH0 - L UW2 N\nPANTALOONS  P AE1 N - T AH0 - L UW2 N Z\nPANTANO  P AA0 N - T AA1 - N OW0\nPANTED  P AE1 N - T IH0 D\nPANTEL  P AA0 N - T EH1 L\nPANTER  P AE1 N - T ER0\nPANTERA'S  P AA0 N - T EH1 - R AH0 Z\nPANTEX  P AE1 N - T EH0 K S\nPANTHEA  P AE1 N - TH IY0 - AH0\nPANTHEISTIC  P AE2 N - TH IY0 - IH1 - S T IH0 K\nPANTHEON  P AE1 N - TH IY0 - AA2 N\nPANTHER  P AE1 N - TH ER0\nPANTHER'S  P AE1 N - TH ER0 Z\nPANTHERS  P AE1 N - TH ER0 Z\nPANTHERS'  P AE1 N - TH ER0 Z\nPANTIES  P AE1 N - T IY0 Z\nPANTING  P AE1 N - T IH0 NG\nPANTLE  P AE1 N - T AH0 L\nPANTOJA  P AA0 N - T OW1 - Y AH0\nPANTOMIME  P AE1 N - T AH0 - M AY2 M\nPANTON  P AE1 N - T AH0 N\nPANTRY  P AE1 N - T R IY0\nPANTS  P AE1 N T S\nPANTSUIT  P AE1 N T - S UW2 T\nPANTSUIT(2)  P AE1 N - S UW2 T\nPANTSUITS  P AE1 N T - S UW2 T S\nPANTSUITS(2)  P AE1 N - S UW2 T S\nPANTUSO  P AA0 N - T UW1 - S OW0\nPANTY  P AE1 N - T IY0\nPANTYHOSE  P AE1 N - T IY0 - HH OW2 Z\nPANZA  P AE1 N - Z AH0\nPANZARELLA  P AA0 N - Z AA0 - R EH1 - L AH0\nPANZER  P AE1 N - Z ER0\nPANZHIHUA  P AE2 N - Z IH0 - HH Y UW1 - AH0\nPANZICA  P AE1 N - Z IH0 - K AH0\nPAO  P AW1\nPAO'S  P AW1 Z\nPAOLELLA  P AA0 - OW0 - L EH1 - L AH0\nPAOLETTI  P AA0 - OW0 - L EH1 - T IY0\nPAOLI  P AW1 - L IY0\nPAOLI(2)  P EY2 - OW1 - L IY0\nPAOLILLO  P AA0 - OW0 - L IH1 - L OW0\nPAOLINI  P AA0 - OW0 - L IY1 - N IY0\nPAOLINO  P AA0 - OW0 - L IY1 - N OW0\nPAOLO  P AW1 - L OW0\nPAOLUCCI  P AA0 - OW0 - L UW1 - CH IY0\nPAONE  P EY1 - OW2 N\nPAONESSA  P AA0 - OW0 - N EH1 - S AH0\nPAP  P AE1 P\nPAPA  P AA1 - P AH0\nPAPACY  P EY1 - P AH0 - S IY0\nPAPADAKIS  P AA0 - P AA0 - D AA1 - K IH0 S\nPAPADOPOULOS  P AE2 - P AH0 - D AA1 - P AH0 - L AH0 S\nPAPADOPOULOS(2)  P AA2 - P AH0 - D AA1 - P AH0 - L AH0 S\nPAPAGEORGE  P AE2 - P AH0 - JH AO1 R JH\nPAPAGEORGE(2)  P AA2 - P AH0 - JH AO1 R JH\nPAPAGO  P AA1 - P AH0 - G OW2\nPAPAL  P EY1 - P AH0 L\nPAPALE  P AA0 - P AA1 - L IY0\nPAPALEO  P AA0 - P EY0 - L IY1 - AH0\nPAPALIA  P AA0 - P AA1 - L IY0 - AH0\nPAPANDREA  P AA0 - P AA1 N - D R IY0 - AH0\nPAPANDREOU  P AH0 - P AE1 N - D R IY0 - UW2\nPAPANIA  P AA0 - P AA1 - N IY0 - AH0\nPAPARAZZI  P AA0 - P AA0 - R AO1 - Z IY0\nPAPARELLA  P AA0 - P AA0 - R EH1 - L AH0\nPAPAS  P AA1 - P AH0 Z\nPAPAW  P AO1 - P AO0\nPAPAY  P AE1 - P EY0\nPAPAYA  P AH0 - P AY1 - AH0\nPAPAYAS  P AH0 - P AY1 - AH0 Z\nPAPAZIAN  P AH0 - P EY1 - Z IY0 - AH0 N\nPAPE  P EY1 P\nPAPENFUSS  P AE1 - P AH0 N - F AH2 S\nPAPER  P EY1 - P ER0\nPAPER'S  P EY1 - P ER0 Z\nPAPERBACK  P EY1 - P ER0 - B AE2 K\nPAPERBACKS  P EY1 - P ER0 - B AE2 K S\nPAPERBOARD  P EY1 - P ER0 - B AO2 R D\nPAPERBOY  P EY1 - P ER0 - B AO2 Y\nPAPERBOY'S  P EY1 - P ER0 - B AO2 Y Z\nPAPERBOYS  P EY1 - P ER0 - B AO2 Y Z\nPAPERED  P EY1 - P ER0 D\nPAPERING  P EY1 - P ER0 - IH0 NG\nPAPERLESS  P EY1 - P ER0 - L AH0 S\nPAPERMAKING  P AE1 - P ER0 - M EY2 - K IH0 NG\nPAPERMATE  P EY1 - P ER0 - M EY2 T\nPAPERNICK  P EY1 - P ER0 - N IH2 K\nPAPERS  P EY1 - P ER0 Z\nPAPERS'  P EY1 - P ER0 Z\nPAPERWEIGHT  P EY1 - P ER0 - W EY2 T\nPAPERWORK  P EY1 - P ER0 - W ER2 K\nPAPERWORKER  P EY1 - P ER0 - W ER2 - K ER0\nPAPERWORKERS  P EY1 - P ER0 - W ER2 - K ER0 Z\nPAPERY  P EY1 - P ER0 - IY0\nPAPESH  P AE1 - P IH0 SH\nPAPIER  P EY1 - P Y ER0\nPAPILLOMA  P AE2 - P IH0 - L OW1 - M AH0\nPAPIN  P AA0 - P IY1 N\nPAPINEAU  P AE1 - P IH0 - N OW2\nPAPINI  P AA0 - P IY1 - N IY0\nPAPKE  P EY1 P K\nPAPO  P AE0 - P OW1\nPAPP  P AE1 P\nPAPPA  P AE1 - P AH0\nPAPPADIO  P AH0 - P EY1 - D IY0 - OW0\nPAPPALARDO  P AA0 - P AA0 - L AA1 R - D OW0\nPAPPAS  P AE1 - P AH0 S\nPAPPERT  P AE1 - P ER0 T\nPAPRIKA  P AE0 - P R IY1 - K AH0\nPAPRIKA(2)  P AH0 - P R IY1 - K AH0\nPAPROCKI  P AH0 - P R OW1 T S - K IY0\nPAPSON  P AE1 P - S AH0 N\nPAPUA  P AE1 - P Y UW0 - AH0\nPAQUE  P AE1 K\nPAQUET  P AA1 - K EY0 T\nPAQUETTE  P AH0 - K EH1 T\nPAQUIN  P AE1 K - W IH0 N\nPAR  P AA1 R\nPAR'S  P AA1 R Z\nPARA  P EH1 - R AH0\nPARABLE  P EH1 - R AH0 - B AH0 L\nPARABLES  P EH1 - R AH0 - B AH0 L Z\nPARABOLA  P ER0 - AE1 - B AH0 - L AH0\nPARABOLIC  P EH2 - R AH0 - B AA1 - L IH0 K\nPARACHUTE  P EH1 - R AH0 - SH UW2 T\nPARACHUTED  P EH1 - R AH0 - SH UW2 - T IH0 D\nPARACHUTES  P EH1 - R AH0 - SH UW2 T S\nPARACHUTING  P EH1 - R AH0 - SH UW2 - T IH0 NG\nPARADA  P ER0 - AE1 - D AH0\nPARADE  P ER0 - EY1 D\nPARADED  P ER0 - EY1 - D IH0 D\nPARADEE  P EH1 - R AH0 - D IY0\nPARADES  P ER0 - EY1 D Z\nPARADIGM  P EH1 - R AH0 - D AY2 M\nPARADIGMS  P EH1 - R AH0 - D AY2 M Z\nPARADIGMS(2)  P EH1 - R AH0 - D AY2 M Z\nPARADING  P ER0 - EY1 - D IH0 NG\nPARADIS  P ER0 - AE1 - D IH0 S\nPARADISE  P EH1 - R AH0 - D AY2 S\nPARADISO  P ER0 - AH0 - D IY1 - S OW0\nPARADOR  P EH1 - R AH0 - D AO2 R\nPARADOWSKI  P ER0 - AH0 - D AO1 F S - K IY0\nPARADOX  P EH1 - R AH0 - D AA2 K S\nPARADOXES  P EH1 - R AH0 - D AA2 K - S IH0 Z\nPARADOXICAL  P EH2 - R AH0 - D AA1 K - S IH0 - K AH0 L\nPARADOXICALLY  P EH2 - R AH0 - D AA1 K - S AH0 K - L IY0\nPARADOXICALLY(2)  P EH2 - R AH0 - D AA1 K - S AH0 - K AH0 - L IY0\nPARADY  P ER0 - AE1 - D IY0\nPARADYNE  P EH1 - R AH0 - D AY2 N\nPARADYNE'S  P EH1 - R AH0 - D AY2 N Z\nPARAFFIN  P EH1 - R AH0 - F AH0 N\nPARAG  P ER0 - AA1 G\nPARAGON  P EH1 - R AH0 - G AA2 N\nPARAGRAPH  P AE1 - R AH0 - G R AE2 F\nPARAGRAPH(2)  P EH1 - R AH0 - G R AE2 F\nPARAGRAPHS  P AE1 - R AH0 - G R AE2 F S\nPARAGRAPHS(2)  P EH1 - R AH0 - G R AE2 F S\nPARAGUAY  P EH1 - R AH0 - G W EY2\nPARAGUAYAN  P EH2 - R AH0 - G W AY1 - AH0 N\nPARAKEET  P EH1 - R AH0 - K IY2 T\nPARAKEETS  P EH1 - R AH0 - K IY2 T S\nPARALEGAL  P EH2 - R AH0 - L IY1 - G AH0 L\nPARALEGALS  P EH2 - R AH0 - L IY1 - G AH0 L Z\nPARALLAX  P EH1 - R AH0 - L AE2 K S\nPARALLEL  P EH1 - R AH0 - L EH2 L\nPARALLELED  P EH1 - R AH0 - L EH2 L D\nPARALLELING  P EH1 - R AH0 - L EH2 - L IH0 NG\nPARALLELISM  P EH1 - R AH0 - L EH2 - L IH2 - Z AH0 M\nPARALLELS  P EH1 - R AH0 - L EH2 L Z\nPARALYMPIC  P EH2 - R AH0 - L IH1 M - P IH0 K\nPARALYSIS  P ER0 - AE1 - L AH0 - S AH0 S\nPARALYSIS(2)  P ER0 - AE1 - L IH0 - S IH0 S\nPARALYTIC  P EH2 - R AH0 - L IH1 - T IH0 K\nPARALYZE  P EH1 - R AH0 - L AY2 Z\nPARALYZED  P EH1 - R AH0 - L AY2 Z D\nPARALYZES  P EH1 - R AH0 - L AY2 - Z IH0 Z\nPARALYZING  P EH1 - R AH0 - L AY2 - Z IH0 NG\nPARAMAGNETIC  P AE2 - R AH0 - M AE2 G - N EH1 - T IH0 K\nPARAMAX  P EH1 - R AH0 - M AE0 K S\nPARAMECIUM  P EH2 - R AH0 - M IY1 - S IY0 - AH0 M\nPARAMEDIC  P EH2 - R AH0 - M EH1 - D IH0 K\nPARAMEDICS  P EH2 - R AH0 - M EH1 - D IH0 K S\nPARAMETER  P ER0 - AE1 - M AH0 - T ER0\nPARAMETERS  P ER0 - AE1 - M AH0 - T ER0 Z\nPARAMETRIC  P EH2 - R AH0 - M EH1 - T R IH0 K\nPARAMILITARIES  P EH2 - R AH0 - M IH1 - L AH0 - T EH2 - R IY0 Z\nPARAMILITARY  P EH2 - R AH0 - M IH1 - L AH0 - T EH2 - R IY0\nPARAMO  P ER0 - AE1 - M OW0\nPARAMONOVA  P EH2 - R AH0 - M AH0 - N OW1 - V AH0\nPARAMORE  P EH1 - AH0 - M AO1 R\nPARAMOUNT  P EH1 - R AH0 - M AW2 N T\nPARAMOUNT'S  P EH1 - R AH0 - M AW2 N T S\nPARAMUS  P ER0 - AE1 - M AH0 S\nPARANA  P ER0 - AA1 - N AH0\nPARANOIA  P EH2 - R AH0 - N OY1 - AH0\nPARANOIAC  P EH2 - R AH0 - N OY1 - AE2 K\nPARANOID  P EH1 - R AH0 - N OY2 D\nPARANORMAL  P EH0 - R AH0 - N AO1 R - M AH0 L\nPARAPHERNALIA  P EH2 - R AH0 - F AH0 - N EY1 - L Y AH0\nPARAPHRASE  P EH1 - R AH0 - F R EY2 Z\nPARAPHRASING  P EH1 - R AH0 - F R EY2 - Z IH0 NG\nPARAPLEGIA  P EH2 - R AH0 - P L IY1 - JH IY0 - AH0\nPARAPLEGIC  P EH2 - R AH0 - P L EH1 - G IH0 K\nPARAPLEGIC(2)  P EH2 - R AH0 - P L IY1 - JH IH0 K\nPARASITE  P EH1 - R AH0 - S AY2 T\nPARASITES  P EH1 - R AH0 - S AY2 T S\nPARASITIC  P EH2 - R AH0 - S IH1 - T IH0 K\nPARASYMPATHETIC  P EH2 - R AH0 - S IH2 M - P AH0 - TH EH1 - T IH0 K\nPARATORE  P ER0 - AH0 - T AO1 - R IY0\nPARATROOP  P EH1 - R AH0 - T R UW2 P\nPARATROOPER  P EH1 - R AH0 - T R UW2 - P ER0\nPARATROOPERS  P EH1 - R AH0 - T R UW2 - P ER0 Z\nPARATROOPS  P EH1 - R AH0 - T R UW2 P S\nPARAZOA  P EH2 - R AH0 - Z OW1 - AH0\nPARBOIL  P AA1 R - B OY2 L\nPARBOILING  P AA1 R - B OY2 - L IH0 NG\nPARC  P AA1 R K\nPARCEL  P AA1 R - S AH0 L\nPARCELED  P AA1 R - S AH0 L D\nPARCELING  P AA1 R - S AH0 L - IH0 NG\nPARCELING(2)  P AA1 R - S L IH0 NG\nPARCELL  P AA0 R - S EY1 L\nPARCELLS  P AA1 R - S AH0 L Z\nPARCELS  P AA1 R - S AH0 L Z\nPARCH  P AA1 R CH\nPARCHED  P AA1 R CH T\nPARCHER  P AA1 R - CH ER0\nPARCHMAN  P AA1 R K - M AH0 N\nPARCHMENT  P AA1 R CH - M AH0 N T\nPARCHMENTLIKE  P AA1 R CH - M AH0 N T - L AY2 K\nPARCPLACE  P AA1 R K - P L EY2 S\nPARDE  P AA1 R D\nPARDEE  P AA1 R - D IY0\nPARDEN  P AA1 R - D AH0 N\nPARDI  P AA1 R - D IY0\nPARDINI  P AA0 R - D IY1 - N IY0\nPARDO  P AA1 R - D OW0\nPARDOE  P AA1 R - D OW2\nPARDON  P AA1 R - D AH0 N\nPARDONED  P AA1 R - D AH0 N D\nPARDONING  P AA1 R - D AH0 N - IH0 NG\nPARDONS  P AA1 R - D AH0 N Z\nPARDUE  P AA1 R - D UW2\nPARDUS  P AA1 R - D AH0 S\nPARDY  P AA1 R - D IY0\nPARE  P EH1 R\nPARED  P EH1 R D\nPAREDES  P AA0 - R EY1 - D EH0 S\nPAREDEZ  P AA0 - R EY1 - D EH0 Z\nPAREDIS  P EH1 - R AH0 - D IH2 S\nPAREKH  P AA1 - R IH0 K\nPARELLA  P AA0 - R EH1 - L AH0\nPARENT  P EH1 - R AH0 N T\nPARENT'S  P EH1 - R AH0 N T S\nPARENTAGE  P EH1 - R AH0 N - T AH0 JH\nPARENTAL  P ER0 - EH1 N - T AH0 L\nPARENTE  P AA0 - R EH1 N - T IY0\nPARENTEAU  P AA0 - R EH1 N - T OW0\nPARENTHESES  P ER0 - EH1 N - TH AH0 - S IY2 Z\nPARENTHESIS  P ER0 - EH1 N - TH AH0 - S IH0 S\nPARENTHETICALLY  P ER0 - EH0 N - TH EH1 - T IH0 - K AH0 - L IY0\nPARENTHETICALLY(2)  P ER0 - EH0 N - TH EH1 - T IH0 K - L IY0\nPARENTHOOD  P EH1 - R AH0 N T - HH UH2 D\nPARENTI  P AA0 - R EH1 N - T IY0\nPARENTING  P EH1 - R AH0 N - T IH0 NG\nPARENTS  P EH1 - R AH0 N T S\nPARENTS'  P EH1 - R AH0 N T S\nPARES  P EH1 R Z\nPARETI  P EH2 - R EH1 - T IY0\nPARETTI  P EH2 - R EH1 - T IY0\nPARFITT  P AA1 R - F IH0 T\nPARFUMS  P ER0 - F Y UW1 M Z\nPARFUMS(2)  P AA0 R - F Y UW1 M Z\nPARGA  P AA1 R - G AH0\nPARGESA  P AA0 R - JH EH1 - S AH0\nPARHAM  P AA1 R - HH AH0 M\nPARIAGUA  P AA0 - R IY0 - AA1 - G W AH0\nPARIAH  P ER0 - AY1 - AH0\nPARIAHS  P ER0 - AY1 - AH0 Z\nPARIBAS  P EH0 - R IY1 - B AH0 S\nPARIBAS'S  P EH0 - R IY1 - B AH0 - S IH0 Z\nPARIETAL  P ER0 - AY1 - AH0 - T AH0 L\nPARIKH  P AE1 - R IH0 K\nPARILLO  P AA0 - R IH1 - L OW0\nPARIMUTUEL  P EH2 - R IH0 - M Y UW1 - CH UW0 - AH0 L\nPARING  P EH1 - R IH0 NG\nPARIS  P EH1 - R IH0 S\nPARIS'  P EH1 - R IH0 S\nPARIS'(2)  P AE1 - R IH0 S\nPARIS'S  P EH1 - R IH0 - S IH0 Z\nPARIS(2)  P AE1 - R IH0 S\nPARISE  P AA1 - R AY0 Z\nPARISEAU  P AE1 - R IH0 - S OW0\nPARISH  P AE1 - R IH0 SH\nPARISH(2)  P EH1 - R IH0 SH\nPARISHES  P AE1 - R IH0 - SH IH0 Z\nPARISHES(2)  P EH1 - R IH0 - SH IH0 Z\nPARISHIONER  P ER0 - IH1 - SH AH0 - N ER0\nPARISHIONERS  P ER0 - IH1 - SH AH0 - N ER0 Z\nPARISI  P AA0 - R IY1 - S IY0\nPARISIAN  P ER0 - IH1 - ZH AH0 N\nPARISIANS  P ER0 - IH1 - S IY0 - AH0 N Z\nPARISIENNE  P ER0 - IH1 - S IY0 - EH2 N\nPARITIES  P EH1 - R AH0 - T IY0 Z\nPARITY  P EH1 - R AH0 - T IY0\nPARIZEAU  P EH1 - R IH0 - Z OW2\nPARIZEK  P ER0 - IH1 - Z EH0 K\nPARIZO  P AA0 - R IY1 - Z OW0\nPARK  P AA1 R K\nPARK'S  P AA1 R K S\nPARKA  P AA1 R - K AH0\nPARKAS  P AA1 R - K AH0 Z\nPARKE  P AA1 R K\nPARKED  P AA1 R K T\nPARKER  P AA1 R - K ER0\nPARKER'S  P AA1 R - K ER0 Z\nPARKERS  P AA1 R - K ER0 Z\nPARKERSBURG  P AA1 R - K ER0 Z - B ER0 G\nPARKERSON  P AA1 R - K ER0 - S AH0 N\nPARKES  P AA1 R K S\nPARKEY  P AA1 R - K IY2\nPARKFIELD  P AA1 R K - F IY0 L D\nPARKHILL  P AA1 R K - HH IH2 L\nPARKHURST  P AA1 R K - HH ER0 S T\nPARKIN  P AA1 R - K IH0 N\nPARKING  P AA1 R - K IH0 NG\nPARKINS  P AA1 R - K IH0 N Z\nPARKINSON  P AA1 R - K IH0 N - S AH0 N\nPARKINSON'S  P AA1 R - K IH0 N - S AH0 N Z\nPARKINSONISM  P AA1 R - K IH0 N - S AH0 - N IH2 - Z IH0 M\nPARKISON  P AA1 R - K IH0 - S AH0 N\nPARKLAND  P AA1 R K - L AE2 N D\nPARKMAN  P AA1 R K - M AH0 N\nPARKS  P AA1 R K S\nPARKS'  P AA1 R K S\nPARKSIDE  P AA1 R K - S AY2 D\nPARKWAY  P AA1 R K - W EY2\nPARLANCE  P AA1 R - L AH0 N S\nPARLATO  P AA0 R - L AA1 - T OW0\nPARLAY  P AA1 R - L EY0\nPARLAYED  P AA1 R - L EY2 D\nPARLAYING  P AA1 R - L EY0 - IH0 NG\nPARLEE  P AA1 R - L IY2\nPARLER  P AA1 R - L ER0\nPARLETT  P AA1 R - L IH0 T\nPARLETTE  P AA2 R - L EH1 T\nPARLEY  P AA1 R - L IY0\nPARLIAMENT  P AA1 R - L AH0 - M AH0 N T\nPARLIAMENT'S  P AA1 R - L AH0 - M AH0 N T S\nPARLIAMENTARIAN  P AA2 R - L AH0 - M AH0 N - T EH1 - R IY0 - AH0 N\nPARLIAMENTARIANISM  P AA2 R - L AH0 - M AH0 N - T EH1 - R IY0 - AH0 - N IH0 - Z AH0 M\nPARLIAMENTARIANISM(2)  P AA2 R - L AH0 - M AH0 N - T EH1 - R IY0 - AH0 - N IH0 Z M\nPARLIAMENTARIANS  P AA2 R - L AH0 - M EH0 N - T EH1 - R IY0 - AH0 N Z\nPARLIAMENTARY  P AA2 R - L AH0 - M EH1 N - T ER0 - IY0\nPARLIAMENTARY(2)  P AA2 R - L AH0 - M EH1 - N ER0 - IY0\nPARLIAMENTS  P AA1 R - L AH0 - M AH0 N T S\nPARLIER  P AA1 R - L IY0 - ER0\nPARLIN  P AA1 R - L IH0 N\nPARLODEL  P AA1 R - L OW2 - D EH2 L\nPARLOR  P AA1 R - L ER0\nPARLORS  P AA1 R - L ER0 Z\nPARLOUR  P AA1 R - L ER0\nPARLOW  P AA1 R - L OW2\nPARMA  P AA1 R - M AH0\nPARMALAT  P AA1 R - M AH0 - L AE2 T\nPARMAN  P AA1 R - M AH0 N\nPARMAR  P AA1 R - M AA2 R\nPARMELE  P AA0 R - M EH1 - L IY0\nPARMELEE  P AA1 R - M IH0 - L IY0\nPARMENTER  P AA1 R - M AH0 N - T ER0\nPARMENTIER  P AA1 R - M AH0 N - T IY0 - ER0\nPARMER  P AA1 R - M ER0\nPARMESAN  P AA1 R - M AH0 - Z AA2 N\nPARMETER  P AA1 R - M IH0 - T ER0\nPARMLEY  P AA1 R M - L IY0\nPARNASSUS  P AA2 R - N AE1 - S AH0 S\nPARNELL  P AA1 R - N AH0 L\nPARNELLA  P AA0 R - N EH1 - L AH0\nPARNES  P AA1 R N Z\nPARNESS  P AA1 R - N AH0 S\nPARO  P AA1 - R OW0\nPAROCHIAL  P ER0 - OW1 - K IY0 - AH0 L\nPAROCHIALISM  P ER0 - OW1 - K IY0 - AH0 - L IH2 - Z AH0 M\nPARODI  P AA0 - R OW1 - D IY0\nPARODIED  P EH1 - R AH0 - D IY0 D\nPARODIES  P EH1 - R AH0 - D IY0 Z\nPARODIST  P AE1 - R AH0 - D IH0 S T\nPARODY  P EH1 - R AH0 - D IY0\nPAROLE  P ER0 - OW1 L\nPAROLED  P ER0 - OW1 L D\nPAROLEE  P ER0 - OW2 - L IY1\nPAROLEES  P ER0 - OW2 - L IY1 Z\nPAROLES  P ER0 - OW1 L Z\nPAROLING  P ER0 - OW1 - L IH0 NG\nPARPART  P AA1 R - P AA2 R T\nPARQUET  P AA0 R - K EY1\nPARR  P AA1 R\nPARRA  P AA1 - R AH0\nPARRACK  P AE1 - R AH0 K\nPARRAMORE  P AA0 - R AA1 - M AO0 R\nPARRAS  P EH1 - R AH0 Z\nPARRELLA  P AA0 - R EH1 - L AH0\nPARRENT  P AA1 - R AH0 N T\nPARRETT  P AE1 - R IH0 T\nPARRETTI  P ER0 - EH1 - T IY0\nPARRETTI'S  P ER0 - EH1 - T IY0 S\nPARRIED  P EH1 - R IY0 D\nPARRILL  P AE1 - R AH0 L\nPARRILLA  P AA2 - R IH1 - L AH0\nPARRILLO  P AA2 - R IH1 - L OW0\nPARRINELLO  P AA0 - R IY0 - N EH1 - L OW0\nPARRINO  P AA2 - R IY1 - N OW0\nPARRIOTT  P AE1 - R IY0 - AH0 T\nPARRIS  P EH1 - R IH0 S\nPARRISH  P EH1 - R IH0 SH\nPARRISHES  P EH1 - R IH0 - SH IH0 Z\nPARROT  P EH1 - R AH0 T\nPARROTS  P EH1 - R AH0 T S\nPARROTT  P EH1 - R AH0 T\nPARROTTA  P AA0 - R OW1 - T AH0\nPARROW  P AE1 - R OW0\nPARRY  P EH1 - R IY0\nPARS  P AA1 R Z\nPARSE  P AA1 R S\nPARSEC  P AA1 R - S EH2 K\nPARSEFAL  P AA1 R - S IH0 - F AH0 L\nPARSELL  P AA1 R - S AH0 L\nPARSER  P AA1 R - S ER0\nPARSHALL  P AA1 R - SH AH0 L\nPARSHLEY  P AA1 R SH - L IY0\nPARSIFAL  P AA1 R - S IH0 - F AH0 L\nPARSIFAL(2)  P AA1 R - Z AH0 - F AA2 L\nPARSIMONY  P AA1 R - S AH0 - M OW2 - N IY0\nPARSING  P AA1 R - S IH0 NG\nPARSIPPANY  P AA0 R - S IH1 - P AH0 - N IY0\nPARSKY  P AA1 R S - K IY0\nPARSLEY  P AA1 R S - L IY0\nPARSLOW  P AA1 R - S L OW2\nPARSON  P AA1 R - S AH0 N\nPARSONAGE  P AA1 R - S AH0 N - IH0 JH\nPARSONS  P AA1 R - S AH0 N Z\nPARSOW  P AA1 R - S OW0\nPART  P AA1 R T\nPART'S  P AA1 R T S\nPART-TIME  P AA1 R T - T AY1 M\nPARTAIN  P AA0 R - T EY1 N\nPARTAKE  P AA0 R - T EY1 K\nPARTCH  P AA1 R CH\nPARTE  P AA1 R T\nPARTE(2)  P AA1 R - T EY0\nPARTECIPAZIONI  P AA2 R - T EH2 - S IH0 - P AE2 - Z IY0 - OW1 - N IY0\nPARTED  P AA1 R - T AH0 D\nPARTED(2)  P AA1 R - T IH0 D\nPARTEE  P AA1 R - T IY1\nPARTEN  P AA1 R - T AH0 N\nPARTENOPE  P AA1 R - T AH0 - N OW2 P\nPARTHENIA  P AA0 R - TH EH1 - N IY0 - AH0\nPARTHENOGENETIC  P AA2 R - TH AH0 - N OW0 - JH AH0 - N EH1 - T IH0 K\nPARTHENON  P AA1 R - TH AH0 - N AA2 N\nPARTHIAN  P AA1 R - TH IY0 - AH0 N\nPARTI  P AA1 R - T IY0\nPARTIAL  P AA1 R - SH AH0 L\nPARTIALITY  P AA2 R - SH IY0 - AE1 - L AH0 - T IY0\nPARTIALLY  P AA1 R - SH AH0 - L IY0\nPARTIALLY(2)  P AA1 R SH - L IY0\nPARTICIPANT  P AA0 R - T IH1 - S AH0 - P AH0 N T\nPARTICIPANTS  P AA0 R - T IH1 - S AH0 - P AH0 N T S\nPARTICIPANTS'  P AA0 R - T IH1 - S AH0 - P AH0 N T S\nPARTICIPATE  P AA0 R - T IH1 - S AH0 - P EY2 T\nPARTICIPATED  P AA0 R - T IH1 - S AH0 - P EY2 - T AH0 D\nPARTICIPATED(2)  P AA0 R - T IH1 - S AH0 - P EY2 - T IH0 D\nPARTICIPATES  P AA0 R - T IH1 - S AH0 - P EY2 T S\nPARTICIPATING  P AA0 R - T IH1 - S AH0 - P EY2 - T IH0 NG\nPARTICIPATION  P AA0 R - T IH2 - S AH0 - P EY1 - SH AH0 N\nPARTICIPATIONS  P AA0 R - T IH2 - S AH0 - P EY1 - SH AH0 N Z\nPARTICIPATIVE  P AA2 R - T IH1 - S AH0 - P AH0 - T IH0 V\nPARTICIPATORY  P AA2 R - T IH1 - S AH0 - P AH0 - T AO2 - R IY0\nPARTICLE  P AA1 R - T AH0 - K AH0 L\nPARTICLE(2)  P AA1 R - T IH0 - K AH0 L\nPARTICLES  P AA1 R - T AH0 - K AH0 L Z\nPARTICLES(2)  P AA1 R - T IH0 - K AH0 L Z\nPARTICULAR  P ER0 - T IH1 - K Y AH0 - L ER0\nPARTICULAR(2)  P AA2 - T IH1 - K Y AH0 - L ER0\nPARTICULARITY  P ER0 - T IH2 - K Y AH0 - L AE1 - R AH0 - T IY0\nPARTICULARLY  P AA2 R - T IH1 - K Y AH0 - L ER0 - L IY0\nPARTICULARLY(2)  P ER0 - T IH1 - K Y AH0 - L ER0 - L IY0\nPARTICULARS  P ER0 - T IH1 - K Y AH0 - L ER0 Z\nPARTICULATE  P ER0 - T IH1 - K Y AH0 - L AH0 T\nPARTICULATES  P AA2 R - T IH1 - K Y AH0 - L AH0 T S\nPARTIDA  P AA0 R - T IY1 - D AH0\nPARTIDO  P AA0 R - T IY1 - D OW0\nPARTIED  P AA1 R - T IY0 D\nPARTIES  P AA1 R - T IY0 Z\nPARTIES'  P AA1 R - T IY0 Z\nPARTIES'(2)  P AA1 R - T IY2 Z\nPARTIN  P AA1 R - T IH0 N\nPARTING  P AA1 R - T IH0 NG\nPARTINGTON  P AA1 R - T IH0 NG - T AH0 N\nPARTISAN  P AA1 R - T AH0 - Z AH0 N\nPARTISANED  P AA1 R - T AH0 - Z AH0 N D\nPARTISANS  P AA1 R - T AH0 - Z AH0 N Z\nPARTISANSHIP  P AA1 R - T AH0 - Z AH0 N - SH IH2 P\nPARTITION  P AA0 R - T IH1 - SH AH0 N\nPARTITIONED  P AA0 R - T IH1 - SH AH0 N D\nPARTITIONING  P AA0 R - T IH1 - SH AH0 N - IH0 NG\nPARTITIONS  P AA0 R - T IH1 - SH AH0 N Z\nPARTLOW  P AA1 R T - L OW2\nPARTLY  P AA1 R T - L IY0\nPARTNER  P AA1 R T - N ER0\nPARTNER'S  P AA1 R T - N ER0 Z\nPARTNERING  P AA1 R T - N ER0 - IH0 NG\nPARTNERS  P AA1 R T - N ER0 Z\nPARTNERS'  P AA1 R T - N ER0 Z\nPARTNERSHIP  P AA1 R T - N ER0 - SH IH2 P\nPARTNERSHIP'S  P AA1 R T - N ER0 - SH IH2 P S\nPARTNERSHIPS  P AA1 R T - N ER0 - SH IH2 P S\nPARTNERSHIPS'  P AA1 R T - N ER0 - SH IH0 P S\nPARTNEY  P AA1 R T - N IY0\nPARTON  P AA1 R - T AH0 N\nPARTRIDGE  P AA1 R - T R AH0 JH\nPARTRIDGE(2)  P AA1 R - T R IH0 JH\nPARTRIDGES  P AA1 R - T R IH0 - JH IH0 Z\nPARTS  P AA1 R T S\nPARTS'  P AA1 R T S\nPARTTIME  P AA1 R T - T AY2 M\nPARTUM  P AA1 R - T AH0 M\nPARTY  P AA1 R - T IY0\nPARTY'S  P AA1 R - T IY0 Z\nPARTYING  P AA1 R - T IY0 - IH0 NG\nPARTYKA  P ER0 - T IH1 - K AH0\nPARVIN  P AA1 R - V IH0 N\nPARY  P AA1 - R IY0\nPARZIALE  P AA2 R - Z IY0 - AA1 - L IY0\nPARZYCH  P AA1 R - Z IH0 HH\nPAS  P AA1 Z\nPAS-DE-DEUX  P AA1 - D AH0 - D UW1\nPASADENA  P AE2 - S AH0 - D IY1 - N ER0\nPASCAGOULA  P AE2 S - K AH0 - G UW1 - L AH0\nPASCAL  P AE0 S - K AE1 L\nPASCALE  P AE0 S - K AE1 L\nPASCARELLA  P AA0 S - K AA0 - R EH1 - L AH0\nPASCARELLI  P AA0 S - K AA0 - R EH1 - L IY0\nPASCH  P AE1 S K\nPASCHAL  P AE1 - SH AH0 L\nPASCHALL  P AE1 - SH AH0 L\nPASCHEN  P AE1 - SH AH0 N\nPASCHKE  P AE1 SH K\nPASCO  P AA1 - S K OW0\nPASCOE  P AE1 - S K OW0\nPASCUA  P AA0 - S K UW1 - AH0\nPASCUAL  P AE1 S - K UW0 - AH0 L\nPASCUCCI  P AA0 - S K UW1 - CH IY0\nPASCUTTO  P AH0 - S K Y UW1 - T OW0\nPASCUZZI  P AA0 - S K UW1 T - S IY0\nPASEK  P AA1 - S EH0 K\nPASEO  P AA0 - S EY1 - OW2\nPASH  P AE1 SH\nPASHA  P AH0 - SH AA1\nPASHA(2)  P AA1 - SH AH0\nPASHLEY  P AE1 SH - L IY0\nPASILLAS  P AA0 - S IH1 - L AH0 Z\nPASING  P EY1 - S IH0 NG\nPASION  P AA0 - ZH IY1 N\nPASK  P AE1 S K\nPASKE  P EY1 S K\nPASKEY  P AE1 S - K IY0\nPASKO  P AA1 - S K OW0\nPASLAY  P AE1 S - L EY0\nPASLEY  P AE1 S - L IY0\nPASMAN  P AE1 S - M AH0 N\nPASO  P AE1 - S OW0\nPASO'S  P AE1 - S OW0 Z\nPASOK  P AA1 - Z AA0 K\nPASOK(2)  P AE1 - S AO0 K\nPASQUA  P AA1 - S K W AH0\nPASQUALE  P AA0 S - K W AA1 - L EY0\nPASQUARELLA  P AA0 S - K W AA0 - R EH1 - L AH0\nPASQUARELLI  P AA0 S - K W AA0 - R EH1 - L IY0\nPASQUARELLO  P AA0 S - K W AA0 - R EH1 - L OW0\nPASQUARIELLO  P AA0 S K - W AA0 - R IY0 - EH1 - L OW0\nPASQUE  P AE1 S K\nPASQUINELLI  P AA0 S K - W IY0 - N EH1 - L IY0\nPASQUINI  P AA0 S K - W IY1 - N IY0\nPASS  P AE1 S\nPASSABLE  P AE1 - S AH0 - B AH0 L\nPASSABLY  P AE1 - S AH0 - B L IY0\nPASSAFIUME  P AA0 - S AA0 - F IY1 - UW0 M\nPASSAGE  P AE1 - S AH0 JH\nPASSAGE(2)  P AE1 - S IH0 JH\nPASSAGES  P AE1 - S AH0 - JH AH0 Z\nPASSAGES(2)  P AE1 - S IH0 - JH IH0 Z\nPASSAGEWAY  P AE1 - S AH0 JH - W EY2\nPASSAGEWAY(2)  P AE1 - S IH0 JH - W EY2\nPASSAIC  P AH0 - S EY1 - IH0 K\nPASSALACQUA  P AE2 - S AH0 - L AE1 - K W AH0\nPASSANISI  P AA0 - S AA0 - N IY1 - S IY0\nPASSANTE  P AA0 - S AA1 N - T IY0\nPASSANTINO  P AA0 - S AA0 N - T IY1 - N OW0\nPASSARELLA  P AA0 - S AA0 - R EH1 - L AH0\nPASSARELLI  P AA0 - S AA0 - R EH1 - L IY0\nPASSARETTI  P AA0 - S AA0 - R EH1 - T IY0\nPASSARO  P AA0 - S AA1 - R OW0\nPASSAT  P AE1 - S AE0 T\nPASSBOOK  P AE1 S - B UH2 K\nPASSE  P AE2 - S EY1\nPASSED  P AE1 S T\nPASSEL  P AE1 - S IH0 L\nPASSENGER  P AE1 - S AH0 N - JH ER0\nPASSENGER'S  P AE1 - S AH0 N - JH ER0 Z\nPASSENGERS  P AE1 - S AH0 N - JH ER0 Z\nPASSENGERS'  P AE1 - S AH0 N - JH ER0 Z\nPASSER  P AE1 - S ER0\nPASSERBY  P AE1 - S ER0 - B IY0\nPASSERO  P AA0 - S EH1 - R OW0\nPASSERS  P AE1 - S ER0 Z\nPASSERSBY  P AE1 - S ER0 Z - B IY0\nPASSES  P AE1 - S AH0 Z\nPASSES(2)  P AE1 - S IH0 Z\nPASSEY  P AE1 - S IY0\nPASSIM  P AE0 - S IY1 M\nPASSING  P AE1 - S IH0 NG\nPASSINO  P AA0 - S IY1 - N OW0\nPASSION  P AE1 - SH AH0 N\nPASSIONATE  P AE1 - SH AH0 - N AH0 T\nPASSIONATELY  P AE1 - SH AH0 - N AH0 T - L IY0\nPASSIONS  P AE1 - SH AH0 N Z\nPASSIVE  P AE1 - S IH0 V\nPASSIVELY  P AE1 - S IH0 V - L IY0\nPASSIVITY  P AH0 - S IH1 - V IH0 - T IY0\nPASSMAN  P AE1 S - M AH0 N\nPASSMORE  P AA1 S - M AO0 R\nPASSON  P AE1 - S AH0 N\nPASSOVER  P AE1 S - OW2 - V ER0\nPASSOW  P AE1 - S OW0\nPASSPORT  P AE1 S - P AO2 R T\nPASSPORTS  P AE1 S - P AO2 R T S\nPASSWORD  P AE1 S - W ER2 D\nPASSWORDS  P AE1 S - W ER2 D Z\nPAST  P AE1 S T\nPASTA  P AA1 - S T AH0\nPASTAS  P AA1 - S T AH0 Z\nPASTE  P EY1 S T\nPASTED  P EY1 - S T IH0 D\nPASTEL  P AE0 - S T EH1 L\nPASTELS  P AE0 - S T EH1 L Z\nPASTER  P AE1 - S T ER0\nPASTERNACK  P AE1 - S T ER0 - N AE0 K\nPASTERNAK  P AE1 - S T ER0 - N AE0 K\nPASTERNAK'S  P AE1 - S T ER0 - N AE0 K S\nPASTES  P EY1 S T S\nPASTEUR  P AH0 - S T UW1 R\nPASTEURIZATION  P AE2 S - CH ER0 - AH0 - Z EY1 - SH AH0 N\nPASTEURIZE  P AE1 S - CH ER0 - AY2 Z\nPASTEURIZED  P AE1 S - CH ER0 - AY2 Z D\nPASTICHE  P AE2 - S T IY1 SH\nPASTIME  P AE1 - S T AY2 M\nPASTIMES  P AE1 - S T AY2 M Z\nPASTING  P EY1 - S T IH0 NG\nPASTOR  P AE1 - S T ER0\nPASTOR'S  P AE1 - S T ER0 Z\nPASTORA  P AE0 - S T AO1 - R AH0\nPASTORAL  P AE1 - S T ER0 - AH0 L\nPASTORALISM  P AE1 - S T ER0 - AH0 - L IH2 - Z AH0 M\nPASTORE  P AE1 - S T AO2 R\nPASTORINO  P AA0 - S T AO0 - R IY1 - N OW0\nPASTORIUS  P AE1 - S T AO0 - R IY0 - IH0 S\nPASTORS  P AE1 - S T ER0 Z\nPASTRAMI  P AH0 - S T R AA1 - M IY0\nPASTRANA  P AA0 S - T R AE1 - N AH0\nPASTRIES  P EY1 S - T R IY0 Z\nPASTRY  P EY1 S - T R IY0\nPASTS  P AE1 S T S\nPASTS(2)  P AE1 S S\nPASTS(3)  P AE1 S\nPASTULA  P AA0 - S T UW1 - L AH0\nPASTURE  P AE1 S - CH ER0\nPASTURES  P AE1 S - CH ER0 Z\nPASZEK  P AA1 - SH EH0 K\nPASZKIEWICZ  P AA1 SH - K AH0 - V IH0 CH\nPASZTOR  P AE1 - S T ER0\nPAT  P AE1 T\nPAT'S  P AE1 T S\nPATAGONIA  P AE2 - T AH0 - G OW1 - N IY0 - AH0\nPATAGONIAN  P AE2 - T AH0 - G OW1 - N IY0 - AH0 N\nPATAK  P AE1 - T AH0 K\nPATAKI  P AH0 - T AA1 - K IY0\nPATAKI'S  P AH0 - T AA1 - K IY0 Z\nPATAKY  P AE1 - T AH0 - K IY0\nPATALANO  P AA0 - T AA0 - L AA1 - N OW0\nPATANE  P AE1 - T AH0 N\nPATCH  P AE1 CH\nPATCHED  P AE1 CH T\nPATCHELL  P AE1 - CH AH0 L\nPATCHEN  P AE1 - CH AH0 N\nPATCHES  P AE1 - CH AH0 Z\nPATCHES(2)  P AE1 - CH IH0 Z\nPATCHETT  P AE1 - CH IH0 T\nPATCHIN  P AE1 - CH IH0 N\nPATCHING  P AE1 - CH IH0 NG\nPATCHWORK  P AE1 CH - W ER2 K\nPATCHWORKS  P AE1 CH - W ER2 K S\nPATCHY  P AE1 - CH IY0\nPATCO  P AE1 T - K OW0\nPATE  P EY1 T\nPATEK  P AA1 - T EH0 K\nPATEL  P AH0 - T EH1 L\nPATELLA  P AH0 - T EH1 - L AH0\nPATENAUDE  P AE1 - T IH0 - N OW0 D\nPATENT  P AE1 - T AH0 N T\nPATENTABLE  P AE1 - T AH0 N - T AH0 - B AH0 L\nPATENTED  P AE1 - T AH0 N - T AH0 D\nPATENTED(2)  P AE1 - T AH0 N - T IH0 D\nPATENTING  P AE1 - T AH0 N - T IH0 NG\nPATENTLY  P AE1 - T AH0 N T - L IY0\nPATENTS  P AE1 - T AH0 N T S\nPATER  P EY1 - T ER0\nPATERA  P AA0 - T EH1 - R AH0\nPATERNAL  P AH0 - T ER1 - N AH0 L\nPATERNALISM  P AH0 - T ER1 - N AH0 - L IH2 - Z AH0 M\nPATERNALISTIC  P AH0 - T ER2 - N AH0 - L IH1 - S T IH0 K\nPATERNITY  P AH0 - T ER1 - N IH0 - T IY0\nPATERNO  P AA0 - T EH1 R - N OW0\nPATERNOSTRO  P AA0 - T ER0 - N OW1 - S T R OW0\nPATERSON  P AE1 - T ER0 - S AH0 N\nPATES  P EY1 T S\nPATESE  P AH0 - T IY1 - S IY0\nPATESE(2)  P AH0 - T IY1 S\nPATEY  P EY1 - T IY0\nPATH  P AE1 TH\nPATHAK  P AH0 - TH AA1 K\nPATHAK(2)  P AH0 - T AA1 K\nPATHAN  P AE1 - TH AH0 N\nPATHANS  P AE1 - TH AH0 N Z\nPATHE  P AE1 TH\nPATHET-LAO  P AE1 - TH AH0 T - L AW1\nPATHETIC  P AH0 - TH EH1 - T IH0 K\nPATHETICALLY  P AH0 - TH EH1 - T IH0 - K AH0 - L IY0\nPATHETICALLY(2)  P AH0 - TH EH1 - T IH0 K - L IY0\nPATHFINDER  P AE1 TH - F AY2 N - D ER0\nPATHMARK  P AE1 TH - M AA2 R K\nPATHMARK'S  P AE1 TH - M AA2 R K S\nPATHOGEN  P AE1 - TH AH0 - JH AH0 N\nPATHOGENIC  P AE2 - TH AH0 - JH EH1 - N IH0 K\nPATHOGENS  P AE1 - TH AH0 - JH AH0 N Z\nPATHOLOGICAL  P AE2 - TH AH0 - L AA1 - JH IH0 - K AH0 L\nPATHOLOGICALLY  P AE2 - TH AH0 - L AA1 - JH IH0 K - L IY0\nPATHOLOGIES  P AH0 - TH AA1 - L AH0 - JH IY0 Z\nPATHOLOGIST  P AH0 - TH AA1 - L AH0 - JH AH0 S T\nPATHOLOGISTS  P AH0 - TH AA1 - L AH0 - JH AH0 S T S\nPATHOLOGISTS(2)  P AH0 - TH AA1 - L AH0 - JH AH0 S S\nPATHOLOGISTS(3)  P AH0 - TH AA1 - L AH0 - JH AH0 S\nPATHOLOGY  P AH0 - TH AA1 - L AH0 - JH IY0\nPATHOS  P EY1 - TH AA0 S\nPATHS  P AE1 DH Z\nPATHS(2)  P AE1 TH S\nPATHWAY  P AE1 TH - W EY2\nPATHWAYS  P AE1 TH - W EY2 Z\nPATIENCE  P EY1 - SH AH0 N S\nPATIENT  P EY1 - SH AH0 N T\nPATIENT'S  P EY1 - SH AH0 N T S\nPATIENTLY  P EY1 - SH AH0 N T - L IY0\nPATIENTS  P EY1 - SH AH0 N T S\nPATIENTS'  P EY1 - SH AH0 N T S\nPATIENTS(2)  P EY1 - SH AH0 N Z\nPATILLO  P AH0 - T IH1 - L OW0\nPATIN  P AE1 - T IH0 N\nPATINA  P AH0 - T IY1 - N AH0\nPATINKIN  P AH0 - T IH1 NG - K IH0 N\nPATINO  P AA0 - T IY1 - N OW0\nPATIO  P AE1 - T IY0 - OW2\nPATIOS  P AE1 - T IY0 - OW2 Z\nPATLAN  P AE1 T - L AH0 N\nPATLEX  P AE1 T - L EH0 K S\nPATLEX'S  P AE1 T - L EH0 K - S IH0 Z\nPATMAN  P AE1 T - M AH0 N\nPATMORE  P AE1 T - M AO0 R\nPATNAUDE  P AA0 T - N AO1 - D IY0\nPATNODE  P AE1 T - N OW2 D\nPATON  P AE1 - T AH0 N\nPATONS  P AE1 - T AH0 N Z\nPATRIARCA  P AA0 - T R IY0 - AA1 R - K AH0\nPATRIARCH  P EY1 - T R IY0 - AA2 R K\nPATRIARCH'S  P EY1 - T R IY0 - AA2 R K S\nPATRIARCHAL  P EY2 - T R IY0 - AA1 R - K AH0 L\nPATRIARCHATE  P EY1 - T R IY0 - AA2 R - K AH0 T\nPATRIARCHS  P EY1 - T R IY0 - AA2 R K S\nPATRIARCHY  P EY1 - T R IY0 - AA2 R - K IY0\nPATRICE  P AH0 - T R IY1 S\nPATRICELLI  P AA0 - T R IY0 - CH EH1 - L IY0\nPATRICIA  P AH0 - T R IH1 - SH AH0\nPATRICIAN  P AH0 - T R IH1 - SH AH0 N\nPATRICIANS  P AH0 - T R IH1 - SH AH0 N Z\nPATRICIO  P AH0 - T R IH1 - S IY0 - OW0\nPATRICK  P AE1 - T R IH0 K\nPATRICK'S  P AE1 - T R IH0 K S\nPATRICKS  P AE1 - T R IH0 K S\nPATRICOF  P AE1 - T R IH0 - K AO2 F\nPATRIDGE  P AE1 - T R IH2 JH\nPATRIE  P AE1 - T ER0 - IY0\nPATRILINEAL  P AE2 - T R IH0 - L IH1 - N IY0 - AH0 L\nPATRIMONIAL  P AE1 - T R AH0 - M OW2 - N Y AH0 L\nPATRIMONIAL(2)  P AE1 - T R AH0 - M OW2 - N IY0 - AH0 L\nPATRIMONY  P AE1 - T R AH0 - M OW2 - N IY0\nPATRIOT  P EY1 - T R IY0 - AH0 T\nPATRIOT'S  P EY1 - T R IY0 - AH0 T S\nPATRIOTIC  P EY2 - T R IY0 - AA1 - T IH0 K\nPATRIOTISM  P EY1 - T R IY0 - AH0 - T IH2 - Z AH0 M\nPATRIOTS  P EY1 - T R IY0 - AH0 T S\nPATRISTIC  P AH0 - T R IH1 - S T IH0 K\nPATRIZIO  P AA0 - T R IY1 - Z IY0 - OW0\nPATROL  P AH0 - T R OW1 L\nPATROL'S  P AH0 - T R OW1 L Z\nPATROLLED  P AH0 - T R OW1 L D\nPATROLLING  P AH0 - T R OW1 - L IH0 NG\nPATROLMAN  P AH0 - T R OW1 L - M AE2 N\nPATROLMEN  P AH0 - T R OW0 L - M EH1 N\nPATROLS  P AH0 - T R OW1 L Z\nPATRON  P EY1 - T R AH0 N\nPATRONAGE  P AE1 - T R AH0 - N IH0 JH\nPATRONAGE(2)  P EY1 - T R AH0 - N AH0 JH\nPATRONAGE(3)  P EY1 - T R AH0 - N IH0 JH\nPATRONE  P AA0 - T R OW1 - N IY0\nPATRONIZE  P EY1 - T R AH0 - N AY2 Z\nPATRONIZED  P EY1 - T R AH0 - N AY2 Z D\nPATRONIZING  P EY1 - T R AH0 - N AY2 - Z IH0 NG\nPATRONS  P EY1 - T R AH0 N Z\nPATRONYM  P AE2 - T R AH0 - N IH1 M\nPATRONYMIC  P AE2 - T R AH0 - N IH1 - M IH0 K\nPATRY  P AE1 - T R IY0\nPATS  P AE1 T S\nPATSIES  P AE1 T - S IY0 Z\nPATSY  P AE1 T - S IY0\nPATT  P AE1 T\nPATTED  P AE1 - T AH0 D\nPATTED(2)  P AE1 - T IH0 D\nPATTEE  P AE1 - T IY1\nPATTEN  P AE1 - T AH0 N\nPATTEN'S  P AE1 - T AH0 N Z\nPATTER  P AE1 - T ER0\nPATTERED  P AE1 - T ER0 D\nPATTERN  P AE1 - T ER0 N\nPATTERNED  P AE1 - T ER0 N D\nPATTERNS  P AE1 - T ER0 N Z\nPATTERSON  P AE1 - T ER0 - S AH0 N\nPATTERSON'S  P AE1 - T ER0 - S AH0 N Z\nPATTESON  P AE1 - T IH0 - S AH0 N\nPATTI  P AE1 - T IY0\nPATTIE  P AE1 - T IY0\nPATTIES  P AE1 - T IY0 Z\nPATTILLO  P AA0 - T IH1 - L OW0\nPATTIN  P AE1 - T IH0 N\nPATTING  P AE1 - T IH0 NG\nPATTINSON  P AE1 - T IH0 N - S AH0 N\nPATTIS  P AE1 - T IH0 S\nPATTISON  P AE1 - T IH0 - S AH0 N\nPATTIZ  P AE1 - T IH0 Z\nPATTON  P AE1 - T AH0 N\nPATTON'S  P AE1 - T AH0 N Z\nPATTY  P AE1 - T IY0\nPATTY'S  P AE1 - T IY0 Z\nPATY  P EY1 - T IY0\nPATZ  P AE1 T S\nPATZER  P EY1 T - Z ER0\nPATZKE  P AE1 T S - K IY0\nPAUCITY  P AO1 - S AH0 - T IY0\nPAUGH  P AO1\nPAUL  P AO1 L\nPAUL'S  P AO1 L Z\nPAULA  P AO1 - L AH0\nPAULDING  P AO1 L - D IH0 NG\nPAULE  P AO1 L\nPAULES  P AO1 L Z\nPAULETTA  P AA0 - L EH1 - T AH0\nPAULETTE  P AO0 - L EH1 T\nPAULEY  P AO1 - L IY0\nPAULHAMUS  P AO1 L - HH EY2 - M AH0 S\nPAULHUS  P AW1 L - HH IH0 S\nPAULI  P AO1 - L IY0\nPAULICK  P AO1 - L IH0 K\nPAULIK  P AO1 - L IH0 K\nPAULIN  P AO1 - L IH0 N\nPAULINA  P AO2 - L IY1 - N AH0\nPAULINE  P AO0 - L IY1 N\nPAULING  P AO1 - L IH0 NG\nPAULINO  P AO0 - L IY1 - N OW0\nPAULITA  P AO0 - L IY1 - T AH0\nPAULK  P AO1 L K\nPAULL  P AO1 L\nPAULLIN  P AO1 - L IH0 N\nPAULO  P AO1 - L OW0\nPAULOS  P AW1 - L OW0 Z\nPAULS  P AO1 L Z\nPAULSEN  P AW1 L - S AH0 N\nPAULSON  P AO1 L - S AH0 N\nPAULUS  P AO1 - L AH0 S\nPAULY  P AO1 - L IY0\nPAUNCHY  P AO1 N - CH IY0\nPAUP  P AO1 P\nPAUPER  P AO1 - P ER0\nPAUPERS  P AO1 - P ER0 Z\nPAUSE  P AO1 Z\nPAUSED  P AO1 Z D\nPAUSES  P AO1 - Z AH0 Z\nPAUSES(2)  P AO1 - Z IH0 Z\nPAUSING  P AO1 - Z IH0 NG\nPAUSTIAN  P AO1 Z - CH IH0 N\nPAUTLER  P AW1 - T AH0 L - ER0\nPAUTLER(2)  P AW1 T - L ER0\nPAUTSCH  P AW1 CH\nPAUTZ  P AO1 T S\nPAUWELS  P AW1 - W AH0 L Z\nPAVAO  P AA1 - V AW0\nPAVAROTTI  P AE2 - V ER0 - AA1 - T IY0\nPAVE  P EY1 V\nPAVED  P EY1 V D\nPAVEK  P AE1 - V IH0 K\nPAVEL  P AE1 - V AH0 L\nPAVELIC  P AH0 - V EH1 - L IH0 K\nPAVELIC(2)  P AE1 V - L IH0 K\nPAVELKA  P AH0 - V EH1 L - K AH0\nPAVELKO  P AH0 - V EH1 L - K OW0\nPAVEMENT  P EY1 V - M AH0 N T\nPAVEMENTS  P EY1 V - M AH0 N T S\nPAVER  P EY1 - V ER0\nPAVES  P EY1 V Z\nPAVESE  P AA0 - V EY1 - Z IY0\nPAVEY  P EY1 - V IY0\nPAVIA  P EY1 - V IY0 - AH0\nPAVICH  P AE1 - V IH0 CH\nPAVILION  P AH0 - V IH1 L - Y AH0 N\nPAVILIONS  P AH0 - V IH1 L - Y AH0 N Z\nPAVILLION  P AH0 - V IH1 L - Y AH0 N\nPAVING  P EY1 - V IH0 NG\nPAVLAK  P AA1 V - L AH0 K\nPAVLIC  P AE1 V - L IH0 K\nPAVLICA  P AE1 V - L IH0 - K AH0\nPAVLICEK  P AA1 V - L IH0 - CH EH0 K\nPAVLICH  P AA1 V - L IH0 HH\nPAVLICK  P AE1 V - L IH0 K\nPAVLIK  P AE1 V - L IH0 K\nPAVLIS  P AE1 V - L IH0 S\nPAVLOCK  P AE1 V - L AH0 K\nPAVLOV  P AE1 V - L AA0 V\nPAVLOVIAN  P AE2 V - L OW1 - V IY0 - AH0 N\nPAVLOVIC  P AH0 V - L AA1 - V IH0 K\nPAVLOVICH  P AE1 V - L AH0 - V IH0 CH\nPAVO  P AA1 - V OW0\nPAVON  P AA1 - V AH0 N\nPAVONE  P AH0 - V OW1 N\nPAW  P AO1\nPAWELEK  P AA0 - V EH1 - L EH0 K\nPAWELSKI  P AA0 - V EH1 L - S K IY0\nPAWELSKY  P AA0 - V EH1 L - S K IY0\nPAWLAK  P AO1 - L AH0 K\nPAWLEY  P AO1 - L IY0\nPAWLICKI  P AA0 V - L IH1 T S - K IY0\nPAWLIK  P AO1 - L IH0 K\nPAWLIKOWSKI  P AA0 V - L IH0 - K AO1 F S - K IY0\nPAWLING  P AO1 - L IH0 NG\nPAWLOSKI  P AA0 V - L AW1 S - K IY0\nPAWLOWICZ  P AA1 V - L AH0 - V IH0 CH\nPAWLOWSKI  P AA0 V - L AO1 F S - K IY0\nPAWLUK  P AA1 V - L AH0 K\nPAWN  P AO1 N\nPAWNED  P AO1 N D\nPAWNEE  P AO1 - N IY1\nPAWNEES  P AO1 - N IY1 Z\nPAWNS  P AO1 N Z\nPAWNSHOP  P AO1 N - SH AA2 P\nPAWNSHOPS  P AO1 N - SH AA2 P S\nPAWS  P AO1 Z\nPAWSON  P AO1 - S AH0 N\nPAWTUCKET  P AO2 - T AH1 - K IH0 T\nPAWTUXET  P AO2 - T AH1 K - S AH0 T\nPAX  P AE1 K S\nPAXAR  P AE1 K - S ER0\nPAXMAN  P AE1 K S - M AH0 N\nPAXON  P AE1 K - S AH0 N\nPAXSON  P AE1 K - S AH0 N\nPAXTON  P AE1 K - S T AH0 N\nPAY  P EY1\nPAY'N  P EY1 - AH0 N\nPAYABLE  P EY1 - AH0 - B AH0 L\nPAYABLES  P EY1 - AH0 - B AH0 L Z\nPAYAN  P EY1 - AH0 N\nPAYBACK  P EY1 - B AE2 K\nPAYCHECK  P EY1 - CH EH2 K\nPAYCHECKS  P EY1 - CH EH2 K S\nPAYCHEX  P EY1 - CH EH2 K S\nPAYCO  P EY1 - K OW0\nPAYDAY  P EY1 - D EY2\nPAYE  P EY1\nPAYER  P EY1 - ER0\nPAYER'S  P EY1 - ER0 Z\nPAYERS  P EY1 - ER0 Z\nPAYERS'  P EY1 - ER0 Z\nPAYETTE  P EY1 - EH1 T\nPAYEUR  P EY0 - ER1\nPAYIN'  P EY1 - IH0 N\nPAYING  P EY1 - IH0 NG\nPAYLESS  P EY1 - L EH2 S\nPAYLOAD  P EY1 - L OW2 D\nPAYLOAD'S  P EY1 - L OW2 D Z\nPAYLOADS  P EY1 - L OW2 D Z\nPAYLOR  P EY1 - L ER0\nPAYMENT  P EY1 - M AH0 N T\nPAYMENTS  P EY1 - M AH0 N T S\nPAYMER  P EY1 - M ER0\nPAYNA  P EY1 - N AH0\nPAYNE  P EY1 N\nPAYNTER  P EY1 N - T ER0\nPAYOFF  P EY1 - AO2 F\nPAYOFFS  P EY1 - AO2 F S\nPAYOLA  P EY2 - OW1 - L AH0\nPAYOUT  P EY1 - AW2 T\nPAYOUTS  P EY1 - AW2 T S\nPAYROLL  P EY1 - R OW2 L\nPAYROLLS  P EY1 - R OW2 L Z\nPAYS  P EY1 Z\nPAYSINGER  P EY1 - S IH0 NG - G ER0\nPAYSINGER(2)  P EY1 - Z IH0 NG - G ER0\nPAYSON  P EY1 - Z AH0 N\nPAYSOP  P EY1 S - AA2 P\nPAYSOPS  P EY1 - S AA2 P S\nPAYTON  P EY1 - T AH0 N\nPAZ  P AA1 Z\nPAZNER  P AA1 Z - N ER0\nPAZOS  P AA1 - Z OW0 Z\nPEA  P IY1\nPEABODY  P IY1 - B AA2 - D IY0\nPEABODY'S  P IY1 - B AA2 - D IY0 Z\nPEACE  P IY1 S\nPEACEABLE  P IY1 - S AH0 - B AH0 L\nPEACEABLY  P IY1 - S AH0 - B L IY0\nPEACEFUL  P IY1 S - F AH0 L\nPEACEFULLY  P IY1 S - F AH0 - L IY0\nPEACEFULNESS  P IY1 S - F AH0 L - N AH0 S\nPEACEKEEPER  P IY1 S - K IY2 - P ER0\nPEACEKEEPERS  P IY1 S - K IY2 - P ER0 Z\nPEACEKEEPING  P IY1 S - K IY2 - P IH0 NG\nPEACEMAKER  P IY1 S - M EY2 - K ER0\nPEACEMAKER'S  P IY1 S - M EY2 - K ER0 Z\nPEACEMAKERS  P IY1 S - M EY2 - K ER0 Z\nPEACEMAKING  P IY1 S - M EY2 - K IH0 NG\nPEACETIME  P IY1 S - T AY2 M\nPEACH  P IY1 CH\nPEACHER  P IY1 - CH ER0\nPEACHES  P IY1 - CH AH0 Z\nPEACHES(2)  P IY1 - CH IH0 Z\nPEACHEY  P IY1 - CH IY0\nPEACHTREE  P IY1 CH - T R IY2\nPEACHY  P IY1 - CH IY0\nPEACOCK  P IY1 - K AA2 K\nPEACOCKS  P IY1 - K AA2 K S\nPEADEN  P EH1 - D AH0 N\nPEAFOWL  P IY1 - F AW2 L\nPEAGLER  P IY1 G - L ER0\nPEAK  P IY1 K\nPEAKE  P IY1 K\nPEAKED  P IY1 K T\nPEAKES  P IY1 K S\nPEAKES'  P IY1 K S\nPEAKING  P IY1 - K IH0 NG\nPEAKS  P IY1 K S\nPEAKS'  P IY1 K S\nPEAL  P IY1 L\nPEALE  P IY1 L\nPEALER  P IY1 - L ER0\nPEANUT  P IY1 - N AH0 T\nPEANUT(2)  P IY1 - N AH2 T\nPEANUTS  P IY1 - N AH0 T S\nPEANUTS(2)  P IY1 - N AH2 T S\nPEAPACK  P IY1 - P AE2 K\nPEAPOD  P IY1 - P AO2 D\nPEAR  P EH1 R\nPEARCE  P IH1 R S\nPEARCY  P ER1 - K IY0\nPEARL  P ER1 L\nPEARL-HARBOR  P ER1 L - HH AA1 R - B ER0\nPEARLE  P ER1 L\nPEARLINE  P ER1 - L AY0 N\nPEARLING  P ER1 - L IH0 NG\nPEARLMAN  P ER1 L - M AE2 N\nPEARLS  P ER1 L Z\nPEARLSTEIN  P ER1 L - S T AY2 N\nPEARLSTEIN(2)  P ER1 L - S T IY2 N\nPEARLSTINE  P ER1 L - S T AY2 N\nPEARLY  P ER1 - L IY0\nPEARMAN  P EH1 R - M AH0 N\nPEARS  P EH1 R Z\nPEARSE  P ER1 S\nPEARSON  P IH1 R - S AH0 N\nPEARSON'S  P IH1 R - S AH0 N Z\nPEART  P ER1 T\nPEARY  P IY1 - R IY0\nPEAS  P IY1 Z\nPEASANT  P EH1 - Z AH0 N T\nPEASANTRY  P EH1 - Z AH0 N - T R IY0\nPEASANTS  P EH1 - Z AH0 N T S\nPEASANTS'  P EH1 - Z AH0 N T S\nPEASE  P IY1 Z\nPEASE(2)  P IY1 S\nPEASEY  P IY1 - Z IY0\nPEASEY'S  P IY1 - Z IY0 Z\nPEASLEE  P IY1 Z - L IY2\nPEASLEY  P IY1 Z - L IY0\nPEAT  P IY1 T\nPEAT'S  P IY1 T S\nPEATROSS  P IY1 - T R AH0 S\nPEAUDOUCE  P OW1 - D UW2 S\nPEAVEY  P IY1 - V IY0\nPEAVLER  P IY1 V - L ER0\nPEAVY  P IY1 - V IY0\nPEAY  P IY1\nPEBBLE  P EH1 - B AH0 L\nPEBBLES  P EH1 - B AH0 L Z\nPEBEREAU  P EH1 - B ER0 - OW2\nPEBEREAU'S  P EH1 - B ER0 - OW2 Z\nPEBLEY  P EH1 - B L IY0\nPECAN  P AH0 - K AA1 N\nPECAN(2)  P IY1 - K AA2 N\nPECAN(3)  P IH0 - K AE1 N\nPECANS  P IH0 - K AE1 N Z\nPECANS(2)  P IY1 - K AA2 N Z\nPECANS(3)  P AH0 - K AA1 N Z\nPECCI  P EH1 - CH IY0\nPECH  P EH1 K\nPECHA  P EH1 - CH AH0\nPECHACEK  P EH1 - K AH0 - S IH0 K\nPECHIN  P EH1 - CH IH0 N\nPECHINEY  P EH1 - CH IH0 - N IY0\nPECHMAN  P EH1 K - M AH0 N\nPECHORA  P AH0 - K AO1 - R AH0\nPECHORA(2)  P EH1 - K ER0 - AH0\nPECHT  P EH1 K T\nPECINA  P EH0 - CH IY1 - N AH0\nPECK  P EH1 K\nPECK'S  P EH1 K S\nPECKA  P EH1 - K AH0\nPECKENPAUGH  P IH0 - K EH1 N - P AO0\nPECKHAM  P EH1 - K AH0 M\nPECKING  P EH1 - K IH0 NG\nPECKINPAUGH  P IH0 - K IH1 N - P AO0\nPECKMAN  P EH1 K - M AH0 N\nPECO  P EY1 - K OW0\nPECO'S  P EY1 - K OW0 Z\nPECOR  P EH1 - K ER0\nPECORA  P EH0 - K AO1 - R AH0\nPECORARO  P EH0 - K AO0 - R AA1 - R OW0\nPECORE  P EH0 - K AO1 - R IY0\nPECOT  P EH1 - K AH0 T\nPECTIC  P EH1 K - T IH0 K\nPECTIN  P EH1 K - T AH0 N\nPECTIN(2)  P EH1 K - T IH0 N\nPECTORAL  P EH1 K - T ER0 - AH0 L\nPECTORIS  P EH1 K - T AH0 - R IH0 S\nPECULIAR  P AH0 - K Y UW1 - L Y ER0\nPECULIAR(2)  P IH0 - K Y UW1 - L Y ER0\nPECULIARITIES  P IH0 - K Y UW2 - L IY0 - EH1 - R AH0 - T IY0 Z\nPECULIARITY  P IH0 - K Y UW2 - L IY0 - EH1 - R AH0 - T IY0\nPECULIARLY  P IH0 - K Y UW1 - L Y ER0 - L IY0\nPECUNIARY  P EH0 - K Y UW1 - N IY0 - EH2 - R IY0\nPEDAGOGICAL  P EH2 - D AH0 - G AA1 - JH IH0 - K AH0 L\nPEDAGOGY  P EH1 - D AH0 - G OW2 - JH IY0\nPEDAL  P EH1 - D AH0 L\nPEDALED  P EH1 - D AH0 L D\nPEDALING  P EH1 - D AH0 L - IH0 NG\nPEDALING(2)  P EH1 D - L IH0 NG\nPEDALLED  P EH1 - D AH0 L D\nPEDALS  P EH1 - D AH0 L Z\nPEDANTIC  P AH0 - D AE1 N - T IH0 K\nPEDANTRY  P EH1 - D AH0 N - T R IY0\nPEDDICORD  P EH1 - D IH0 - K AO0 R D\nPEDDIE  P EH1 - D IY0\nPEDDLE  P EH1 - D AH0 L\nPEDDLED  P EH1 - D AH0 L D\nPEDDLER  P EH1 D - L ER0\nPEDDLERS  P EH1 D - L ER0 Z\nPEDDLES  P EH1 - D AH0 L Z\nPEDDLING  P EH1 - D AH0 L - IH0 NG\nPEDDLING(2)  P EH1 D - L IH0 NG\nPEDDY  P EH1 - D IY0\nPEDEN  P EH1 - D AH0 N\nPEDERSEN  P EH1 - D ER0 - S AH0 N\nPEDERSON  P EH1 - D ER0 - S AH0 N\nPEDESTAL  P EH1 - D AH0 - S T AH0 L\nPEDESTALS  P EH1 - D AH0 - S T AH0 L Z\nPEDESTRIAN  P AH0 - D EH1 S - T R IY0 - AH0 N\nPEDESTRIANS  P AH0 - D EH1 S - T R IY0 - AH0 N Z\nPEDIATRIC  P IY2 - D IY0 - AE1 - T R IH0 K\nPEDIATRICIAN  P IY2 - D IY0 - AH0 - T R IH1 - SH AH0 N\nPEDIATRICIANS  P IY2 - D IY0 - AH0 - T R IH1 - SH AH0 N Z\nPEDIATRICS  P IY2 - D IY0 - AE1 - T R IH0 K S\nPEDICURE  P EH1 - D IH0 - K Y ER0\nPEDIGO  P EH0 - D IY1 - G OW0\nPEDIGREE  P EH1 - D AH0 - G R IY0\nPEDLEY  P EH1 D - L IY0\nPEDONE  P EY0 - D OW1 - N EY0\nPEDOPHILE  P EH1 - D OW0 - F AY0 L\nPEDOPHILE(2)  P EH1 - D AH0 - F IH0 L\nPEDOPHILES  P EH1 - D OW0 - F AY0 L Z\nPEDOPHILES(2)  P EH1 - D AH0 - F IH0 L Z\nPEDOPHILIA  P EH2 - D AH0 - F IH1 - L Y AH0\nPEDOPHILIAC  P EH2 - D AH0 - F IH1 L - Y AE0 K\nPEDOPHILIACS  P EH2 - D AH0 - F IH1 L - Y AE0 K S\nPEDOPHILIC  P EH0 - D OW0 - F IH1 - L IH0 K\nPEDOWITZ  P EH1 - D OW0 - IH0 T S\nPEDOWITZ(2)  P AH0 - D AW1 - IH0 T S\nPEDRAZA  P EY0 - D R AA1 - Z AH0\nPEDRETTI  P EH0 D - R EH1 - T IY0\nPEDRICK  P EH1 - D R IH0 K\nPEDRO  P EY1 - D R OW0\nPEDROLI  P EH2 D - R OW1 - L IY0\nPEDROS  P EY1 - D R OW0 Z\nPEDROSA  P EY0 - D R OW1 - S AH0\nPEDROSO  P EY0 - D R OW1 - S OW0\nPEDROTTI  P EH0 D - R OW1 - T IY0\nPEDROZA  P EY0 - D R OW1 - Z AH0\nPEE  P IY1\nPEEBLER  P IY1 B - L ER0\nPEEBLES  P IY1 - B AH0 L Z\nPEED  P IY1 D\nPEEDIN  P IY1 - D IH0 N\nPEEK  P IY1 K\nPEEKED  P IY1 K T\nPEEKING  P IY1 - K IH0 NG\nPEEKS  P IY1 K S\nPEEL  P IY1 L\nPEELE  P IY1 L\nPEELED  P IY1 L D\nPEELER  P IY1 - L ER0\nPEELING  P IY1 - L IH0 NG\nPEELS  P IY1 L Z\nPEENS  P IY1 N Z\nPEEP  P IY1 P\nPEEPING  P IY1 - P IH0 NG\nPEEPLES  P IY1 - P AH0 L Z\nPEEPS  P IY1 P S\nPEER  P IH1 R\nPEERAGE  P IH1 - R AH0 JH\nPEERED  P IH1 R D\nPEERING  P IY1 - R IH0 NG\nPEERLESS  P IH1 R - L IH0 S\nPEERS  P IH1 R Z\nPEERSON  P IH1 R - S AH0 N\nPEERY  P IY1 - R IY0\nPEET  P IY1 T\nPEET'S  P IY1 T S\nPEETE  P IY1 T\nPEETERS  P IY1 - T ER0 Z\nPEETS  P IY1 T S\nPEETZ  P IY1 T S\nPEEVE  P IY1 V\nPEEVED  P IY1 V D\nPEEVES  P IY1 V Z\nPEEVEY  P IY1 - V IY0\nPEEVISH  P IY1 - V IH0 SH\nPEEVY  P IY1 - V IY0\nPEEWEE  P IY1 - W IY2\nPEFFER  P EH1 - F ER0\nPEFFLEY  P EH1 F - L IY0\nPEG  P EH1 G\nPEGASUS  P EH1 - G AH0 - S AH0 S\nPEGBOARD  P EH1 G - B AO2 R D\nPEGBOARDS  P EH1 G - B AO2 R D Z\nPEGG  P EH1 G\nPEGGED  P EH1 G D\nPEGGIE  P EH1 - G IY0\nPEGGING  P EH1 - G IH0 NG\nPEGGS  P EH1 G Z\nPEGGY  P EH1 - G IY0\nPEGLOW  P EH1 - G L OW2\nPEGMATITE  P EH1 G - M AH0 - T AY2 T\nPEGRAM  P EH1 - G R AE2 M\nPEGS  P EH1 G Z\nPEGUERO  P EY0 - G EH1 - R OW0\nPEGUES  P EY1 - G EH0 S\nPEHL  P EH1 L\nPEHRSON  P EH1 R - S AH0 N\nPEI  P EY1\nPEI'S  P EY1 Z\nPEIFER  P AY1 - F ER0\nPEIFFER  P AY1 - F ER0\nPEIL  P IY1 L\nPEINADO  P EY0 - IY0 - N AA1 - D OW0\nPEINE  P IY1 N\nPEIPU  P EY1 - P UW2\nPEIRCE  P IH1 R S\nPEIRCE(2)  P IY1 R S\nPEIRSON  P IY1 R - S AH0 N\nPEISER  P AY1 - S ER0\nPEITZ  P IY1 T S\nPEIXOTO  P AH0 K - S OW1 - T OW0\nPEJORATIVE  P AH0 - JH AO1 - R AH0 - T IH0 V\nPEKALA  P IH0 - K AA1 - L AH0\nPEKAR  P EH1 - K ER0\nPEKAREK  P EH1 - K ER0 - IH0 K\nPEKIN  P IY1 - K AH0 N\nPEKING  P IY1 - K IH1 NG\nPEKO  P IY1 - K OW0\nPEKRUL  P EH1 - K R AH0 L\nPELADEAU  P EH1 - L AH0 - D OW2\nPELAEZ  P EY0 - L AA1 - EH0 Z\nPELAGIA  P EH0 - L AA1 - JH AH0\nPELAGIAN  P IH0 - L EY1 - JH IY0 - AH0 N\nPELAGIANS  P IH0 - L EY1 - JH IY0 - AH0 N Z\nPELAGIC  P AH0 - L AE1 - JH IH0 K\nPELAGREENY  P EH0 - L AH0 - G R IY1 - N IY0\nPELAYO  P EY0 - L EY1 - OW0\nPELC  P EH1 L K\nPELCHAT  P EH1 L - CH AH0 T\nPELCZAR  P EH1 L - CH ER0\nPELE  P EH1 - L EY0\nPELEKUNU  P EH2 - L AH0 - K UW1 - N UW0\nPELEKUNU'S  P EH2 - L AH0 - K UW1 - N UW0 Z\nPELERIN  P EH1 - L ER0 - IH0 N\nPELFREY  P EH1 L - F R IY0\nPELHAM  P EH1 - L AH0 M\nPELICAN  P EH1 - L AH0 - K AH0 N\nPELICAN'S  P EH1 - L IH0 - K AH0 N Z\nPELICANS  P EH1 - L IH0 - K AH0 N Z\nPELIKAN  P EH1 - L IH0 - K AE0 N\nPELINO  P EH0 - L IY1 - N OW0\nPELISSIER  P EH1 - L IH0 - S IY0 - ER0\nPELKA  P EH1 L - K AH0\nPELKEY  P EH1 L - K IY0\nPELKY  P EH1 L - K IY0\nPELL  P EH1 L\nPELL'S  P EH1 L Z\nPELLA  P EH1 - L AH0\nPELLAGRA  P AH0 - L AE1 - G R AH0\nPELLAND  P EH1 - L AH0 N D\nPELLE  P EH1 L\nPELLECCHIA  P EH2 - L EH1 - K IY0 - AH0\nPELLEGRIN  P EH1 - L IH0 - G R IH0 N\nPELLEGRINI  P EH2 - L EH0 - G R IY1 - N IY0\nPELLEGRINO  P EH2 - L EH0 - G R IY1 - N OW0\nPELLER  P EH1 - L ER0\nPELLERIN  P EH1 - L ER0 - IH0 N\nPELLERITO  P EH0 - L ER0 - IY1 - T OW0\nPELLET  P EH1 - L AH0 T\nPELLETED  P EH1 - L AH0 - T AH0 D\nPELLETED(2)  P EH1 - L AH0 - T IH0 D\nPELLETIER  P EH0 - L AH0 - T IH1 R\nPELLETS  P EH1 - L AH0 T S\nPELLETT  P EH1 - L IH0 T\nPELLEU  P EH1 - L UW0\nPELLEY  P EH1 - L IY0\nPELLICANE  P EH1 - L IH0 - K EY2 N\nPELLICANO  P EH0 - L IY0 - K AA1 - N OW0\nPELLMAN  P EH1 L - M AH0 N\nPELLOW  P EH1 - L OW0\nPELLUM  P EH1 - L AH0 M\nPELON  P EH1 - L AH0 N\nPELOPONNESIAN  P EH2 - L AH0 - P AH0 - N IY1 - ZH AH0 N\nPELOQUIN  P EY0 - L OW0 - K W IY1 N\nPELOSI  P EH0 - L OW1 - S IY0\nPELOSO  P EH0 - L OW1 - S OW0\nPELOT  P EH1 - L AH0 T\nPELPHREY  P EH1 L - F R IY0\nPELS  P EH1 L Z\nPELSTER  P EH1 L - S T ER0\nPELT  P EH1 L T\nPELTED  P EH1 L - T IH0 D\nPELTIER  P EH1 L - T IY0 - ER0\nPELTO  P EH1 L - T OW0\nPELTON  P EH1 L - T AH0 N\nPELTS  P EH1 L T S\nPELTZ  P EH1 L T S\nPELTZER  P EH1 L T - Z ER0\nPELUSO  P EH0 - L UW1 - S OW0\nPELVIC  P EH1 L - V IH0 K\nPELVIS  P EH1 L - V AH0 S\nPELZ  P EH1 L Z\nPELZEL  P EH1 L - Z AH0 L\nPELZER  P EH1 L - Z ER0\nPEMBER  P EH1 M - B ER0\nPEMBERTON  P EH1 M - B ER0 - T AH0 N\nPEMBINA  P EH1 M - B IH0 - N AH0\nPEMBLE  P EH1 M - B AH0 L\nPEMBLETON  P EH1 M - B AH0 L - T AA0 N\nPEMBRIDGE  P EH1 M - B R IH2 JH\nPEMBROKE  P EH1 M - B R OW2 K\nPEMBROKE(2)  P EH1 M - B R UH0 K\nPEMEX  P EH1 - M EH2 K S\nPEMRICH  P EH1 M - R IH2 CH\nPEN  P EH1 N\nPEN'S  P EH1 N Z\nPENA  P EH1 - N AH0\nPENA'S  P EH1 - N AH0 Z\nPENA'S(2)  P EY1 - N Y AH0 Z\nPENA(2)  P EY1 - N Y AH0\nPENAL  P IY1 - N AH0 L\nPENALIZE  P EH1 - N AH0 - L AY2 Z\nPENALIZE(2)  P IY1 - N AH0 - L AY2 Z\nPENALIZED  P IY1 - N AH0 - L AY2 Z D\nPENALIZES  P EH1 - N AH0 - L AY2 - Z IH0 Z\nPENALIZES(2)  P IY1 - N AH0 - L AY2 - Z IH0 Z\nPENALIZING  P IY1 - N AH0 - L AY2 - Z IH0 NG\nPENALOZA  P EH0 - N AA0 - L OW1 - Z AH0\nPENALTIES  P EH1 - N AH0 L - T IY0 Z\nPENALTY  P EH1 - N AH0 L - T IY0\nPENANCE  P EH1 - N AH0 N S\nPENANG  P EH1 - N AE0 NG\nPENANS  P EH1 - N AH0 N Z\nPENBERTHY  P IH0 N - B ER1 - TH IY0\nPENCE  P EH1 N S\nPENCHANT  P EH1 N - CH AH0 N T\nPENCIL  P EH1 N - S AH0 L\nPENCILED  P EH1 N - S AH0 L D\nPENCILS  P EH1 N - S AH0 L Z\nPENDANT  P EH1 N - D AH0 N T\nPENDARVIS  P EH1 N - D AA0 R - V IH0 S\nPENDELL  P EH1 N - D AH0 L\nPENDELTON  P IH0 N - D EH1 L - T AH0 N\nPENDER  P EH1 N - D ER0\nPENDERGAST  P EH1 N - D ER0 - G AE2 S T\nPENDERGRAFT  P EH1 N - D ER0 - G R AH0 F T\nPENDERGRAPH  P EH1 N - D ER0 - G R AE2 F\nPENDERGRASS  P EH1 N - D ER0 - G R AH0 S\nPENDERGRAST  P EH1 N - D ER0 - G R AH0 S T\nPENDERS  P EH1 N - D ER0 Z\nPENDING  P EH1 N - D IH0 NG\nPENDLETON  P EH1 N - D AH0 L - T AH0 N\nPENDLEY  P EH1 N D - L IY0\nPENDOLA  P EH0 N - D OW1 - L AH0\nPENDRIL  P EH1 N - D R IH0 L\nPENDRIL'S  P EH1 N - D R IH0 L Z\nPENDRY  P EH1 N - D R IY0\nPENDULOUS  P EH1 N - JH AH0 - L AH0 S\nPENDULUM  P EH1 N - JH AH0 - L AH0 M\nPENDYALA  P EH2 - D Y AA1 - L AH0\nPENELOPE  P AH0 - N EH1 - L AH0 - P IY0\nPENETRATE  P EH1 - N AH0 - T R EY2 T\nPENETRATED  P EH1 - N AH0 - T R EY2 - T AH0 D\nPENETRATED(2)  P EH1 - N AH0 - T R EY2 - T IH0 D\nPENETRATES  P EH1 - N AH0 - T R EY2 T S\nPENETRATING  P EH1 - N AH0 - T R EY2 - T IH0 NG\nPENETRATION  P EH2 - N AH0 - T R EY1 - SH AH0 N\nPENFIELD  P EH1 N - F IY2 L D\nPENFIL  P EH1 N - F IH0 L\nPENFOLD  P EH1 N - F OW2 L D\nPENG  P EH1 NG\nPENGASSAN  P EH1 NG - G AE2 - S AH0 N\nPENGELLY  P EH1 NG - G AH0 - L IY0\nPENGO  P EH1 NG - G OW0\nPENGUIN  P EH1 NG - G W AH0 N\nPENGUINS  P EH1 NG - G W AH0 N Z\nPENH  P EH1 N\nPENH'S  P EH1 N Z\nPENICILLIN  P EH2 - N AH0 - S IH1 - L AH0 N\nPENICILLINS  P EH2 - N AH0 - S IH1 - L AH0 N Z\nPENICK  P EH1 - N IH0 K\nPENIKESE  P EH1 - N IH0 - K IY2 Z\nPENILE  P IY1 - N AY0 L\nPENINGER  P EH1 - N IH0 - NG ER0\nPENINSULA  P AH0 - N IH1 N - S AH0 - L AH0\nPENINSULAR  P AH0 - N IH1 N - S AH0 - L ER0\nPENIS  P IY1 - N IH0 S\nPENISES  P IY1 - N IH0 - S IH0 Z\nPENISTON  P EH1 - N IH0 - S T AA0 N\nPENITENT  P EH1 - N IH0 - T IH0 N T\nPENITENTIARIES  P EH2 - N IH0 - T EH1 N - CH ER0 - IY0 Z\nPENITENTIARY  P EH2 - N IH0 - T EH1 N - CH ER0 - IY0\nPENIX  P EH1 - N IH0 K S\nPENJA  P EH1 N - JH AH0\nPENJA'S  P EH1 N - JH AH0 Z\nPENKALA  P IH0 NG - K AA1 - L AH0\nPENKAVA  P EH0 NG - K AA1 - V AH0\nPENLAND  P EH1 N - L AH0 N D\nPENLEY  P EH1 N - L IY0\nPENMAN  P EH1 N - M AH0 N\nPENN  P EH1 N\nPENN'S  P EH1 N Z\nPENNA  P EH1 - N AH0\nPENNA(2)  P EH2 N - S IH0 L - V EY1 - N Y AH0\nPENNACCHIO  P EH0 - N AA1 - K IY0 - OW0\nPENNANT  P EH1 - N AH0 N T\nPENNANTS  P EH1 - N AH0 N T S\nPENNBANCORP  P EH1 N - B AE1 N - K AO2 R P\nPENNCORP  P EH1 N - K AO2 R P\nPENNEBAKER  P EH1 - N IH0 - B AH0 - K ER0\nPENNEBAKER(2)  P EH1 - N IH0 - B EY2 - K ER0\nPENNED  P EH1 N D\nPENNEL  P EH1 - N AH0 L\nPENNELL  P EH1 - N AH0 L\nPENNELLA  P EH2 - N EH1 - L AH0\nPENNER  P EH1 - N ER0\nPENNEX  P EH1 - N AH0 K S\nPENNEY  P EH1 - N IY0\nPENNEY'S  P EH1 - N IY0 Z\nPENNICK  P EH1 - N IH0 K\nPENNIE  P EH1 - N IY0\nPENNIES  P EH1 - N IY0 Z\nPENNILESS  P EH1 - N IY0 - L AH0 S\nPENNIMAN  P EH1 - N IH0 - M AH0 N\nPENNING  P EH1 - N IH0 NG\nPENNINGER  P EH1 - N IH0 - NG ER0\nPENNINGS  P EH1 - N IH0 NG Z\nPENNINGTON  P EH1 - N IH0 NG - T AH0 N\nPENNINO  P EH0 - N IY1 - N OW0\nPENNISI  P EH0 - N IY1 - S IY0\nPENNIX  P EH1 - N IH0 K S\nPENNOCK  P EH1 - N AH0 K\nPENNS  P EH1 N Z\nPENNSAUKEN  P EH2 N - S AO1 - K AH0 N\nPENNSYLVANIA  P EH2 N - S AH0 L - V EY1 - N Y AH0\nPENNSYLVANIA'S  P EH2 N - S AH0 L - V EY1 - N Y AH0 Z\nPENNSYLVANIAN  P EH2 N - S IH0 L - V EY1 - N IY0 - AH0 N\nPENNSYLVANIANS  P EH2 N - S IH0 L - V EY1 - N IY0 - AH0 N Z\nPENNWALT  P EH1 N - W AO2 L T\nPENNY  P EH1 - N IY0\nPENNY'S  P EH1 - N IY0 Z\nPENNYPACKER  P EH1 - N IH0 - P AE0 - K ER0\nPENNYPACKER(2)  P EH1 - N IY0 - P AE0 - K ER0\nPENNYWELL  P EH1 - N IY0 - W EH2 L\nPENNZOIL  P EH1 N - Z OY2 L\nPENNZOIL'S  P EH1 N - Z OY2 L Z\nPENOBSCOT  P AH0 - N AA1 B - S K AA0 T\nPENOLOGY  P IY0 - N AA1 - L AH0 - JH IY0\nPENOYER  P EH1 - N OY0 - ER0\nPENRIL  P EH1 N - R IH0 L\nPENROD  P EH1 N - R AA2 D\nPENROD'S  P EH1 N - R AA2 D Z\nPENROSE  P EH1 N - R OW2 Z\nPENRY  P EH1 N - R IY0\nPENS  P EH1 N Z\nPENSACOLA  P EH2 N - S AH0 - K OW1 - L AH0\nPENSE  P EH1 N S\nPENSINGER  P EH1 N - S IH0 N - JH ER0\nPENSION  P EH1 N - SH AH0 N\nPENSIONER  P EH1 N - SH AH0 - N ER0\nPENSIONERS  P EH1 N - SH AH0 - N ER0 Z\nPENSIONS  P EH1 N - SH AH0 N Z\nPENSIVE  P EH1 N - S IH0 V\nPENSKE  P EH1 N S - K IY0\nPENSON  P EH1 N - S AH0 N\nPENSYL  P EH1 N - S IH0 L\nPENT  P EH1 N T\nPENTA  P EH1 N - T AH0\nPENTAGON  P EH1 N - T IH0 - G AA2 N\nPENTAGON'S  P EH1 N - T IH0 - G AA2 N Z\nPENTAGON'S(2)  P EH1 - N IH0 - G AA2 N Z\nPENTAGON(2)  P EH1 - N IH0 - G AA2 N\nPENTAGONS  P EH1 N - T IH0 - G AA2 N Z\nPENTAGONS(2)  P EH1 - N IH0 - G AA2 N Z\nPENTAIR  P EH2 N - T EH1 R\nPENTAMIDINE  P EH2 N - T AE1 - M IH0 - D IY2 N\nPENTANE  P EH1 N - T EY2 N\nPENTATHLON  P EH0 N - T AE1 TH - L AH0 N\nPENTAX  P EH1 N - T AE2 K S\nPENTECH  P EH1 N - T EH2 K\nPENTECOST  P EH1 N - T AH0 - K AO2 S T\nPENTECOSTAL  P EH2 N - T AH0 - K AO1 - S T AH0 L\nPENTHEA  P EH1 N - TH IY0 - AH0\nPENTHOUSE  P EH1 N T - HH AW2 S\nPENTIMENTO  P EH2 N - T IH0 - M EH1 N - T OW0\nPENTIUM  P EH1 N - T IY0 - AH0 M\nPENTIUMS  P EH1 N - T IY0 - AH0 M Z\nPENTLAND  P EH1 N T - L AH0 N D\nPENTON  P EH1 N - T AH0 N\nPENTOTHAL  P EH1 N - T AH0 - TH AA0 L\nPENTRON  P EH1 N - T R AH0 N\nPENTRUST  P EH1 N - T R AH2 S T\nPENTZ  P EH1 N T S\nPENUEL  P EH1 - N UH0 L\nPENUMBRA  P IH0 - N AH1 M - B R AH0\nPENURIOUS  P EH2 - N Y UW1 - R IY0 - AH0 S\nPENURY  P EH1 - N Y UH0 - R IY0\nPENWELL  P EH1 N - W EH2 L\nPENWEST  P EH2 N - W EH1 S T\nPENZA  P EH1 N - Z AH0\nPENZER  P EH1 N - Z ER0\nPEON  P IY1 - AH0 N\nPEONIES  P IY1 - AH0 - N IY0 Z\nPEONS  P IY1 - AH0 N Z\nPEONY  P IY1 - AH0 - N IY0\nPEOPLE  P IY1 - P AH0 L\nPEOPLE'S  P IY1 - P AH0 L Z\nPEOPLED  P IY1 - P AH0 L D\nPEOPLES  P IY1 - P AH0 L Z\nPEOPLES'  P IY1 - P AH0 L Z\nPEORIA  P IY0 - AO1 - R IY0 - AH0\nPEORIA'S  P IY0 - AO1 - R IY0 - AH0 Z\nPEP  P EH1 P\nPEPCID  P EH1 P - S IH0 D\nPEPE  P EH1 - P IY0\nPEPENADORES  P EH2 - P EH2 - N AH0 - D AO1 - R EH0 Z\nPEPER  P EH1 - P ER0\nPEPI  P EH1 - P IY0\nPEPIN  P EH1 - P IH0 N\nPEPITA  P EH0 - P IY1 - T AH0\nPEPITONE  P EH1 - P IH0 - T OW2 N\nPEPLINSKI  P IH0 P - L IH1 N - S K IY0\nPEPLOW  P EH1 - P L OW2\nPEPPARD  P EH1 - P ER0 D\nPEPPEL  P EH1 - P AH0 L\nPEPPER  P EH1 - P ER0\nPEPPER'S  P EH1 - P ER0 Z\nPEPPERDINE  P EH1 - P ER0 - D AY2 N\nPEPPERED  P EH1 - P ER0 D\nPEPPERELL  P EH1 - P ER0 - AH0 L\nPEPPERIDGE  P EH1 - P ER0 - IH2 JH\nPEPPERING  P EH1 - P ER0 - IH0 NG\nPEPPERMAN  P EH1 - P ER0 - M AH0 N\nPEPPERMINT  P EH1 - P ER0 - M IH2 N T\nPEPPERONI  P EH2 - P ER0 - OW1 - N IY0\nPEPPERS  P EH1 - P ER0 Z\nPEPPI  P EH1 - P IY0\nPEPPIN  P EH1 - P IH0 N\nPEPPLE  P EH1 - P AH0 L\nPEPPLER  P EH1 P - L ER0\nPEPPY  P EH1 - P IY0\nPEPSI  P EH1 P - S IY0\nPEPSI'S  P EH1 P - S IY0 Z\nPEPSICO  P EH1 P - S IH0 - K OW0\nPEPSICO'S  P EH1 P - S IH0 - K OW0 Z\nPEPTIC  P EH1 P - T IH0 K\nPEPTIDE  P EH1 P - T AY2 D\nPEPTIDES  P EH1 P - T AY2 D Z\nPEQUENO  P EY0 - K W EY1 - N OW0\nPEQUIGNOT  P IH0 - K W IH1 G - N AH0 T\nPER  P ER1\nPER-SE  P ER2 - S EY1\nPERA  P ER1 - AH0\nPERAGINE  P ER0 - AA0 - JH IY1 - N IY0\nPERAINO  P ER0 - AA0 - IY1 - N OW0\nPERALA  P ER0 - AA1 - L AH0\nPERALES  P ER0 - AA1 - L EH0 S\nPERALEZ  P ER0 - AA1 - L EH0 Z\nPERALTA  P ER0 - AA1 L - T AH0\nPERAS  P EH1 - R AH0 S\nPERATIS  P ER0 - AA1 - T IH0 S\nPERATIS'  P ER0 - AA1 - T IH0 S\nPERATIS'(2)  P ER0 - AE1 - T IH0 S\nPERATIS(2)  P ER0 - AE1 - T IH0 S\nPERAZA  P ER0 - AA1 - Z AH0\nPERAZZO  P ER0 - AA1 - Z OW0\nPERC  P ER1 K\nPERCE  P ER1 S\nPERCEIVE  P ER0 - S IY1 V\nPERCEIVED  P ER0 - S IY1 V D\nPERCEIVES  P ER0 - S IY1 V Z\nPERCEIVING  P ER0 - S IY1 - V IH0 NG\nPERCELL  P ER0 - S EH1 L\nPERCENT  P ER0 - S EH1 N T\nPERCENTAGE  P ER0 - S EH1 N - T AH0 JH\nPERCENTAGE(2)  P ER0 - S EH1 - N AH0 JH\nPERCENTAGE(2)  P ER0 - S EH1 N - T IH0 JH\nPERCENTAGE(3)  P ER0 - S EH1 - N IH0 JH\nPERCENTAGES  P ER0 - S EH1 N - T IH0 - JH IH0 Z\nPERCENTAGES(2)  P ER0 - S EH1 - N IH0 - JH IH0 Z\nPERCENTILE  P ER0 - S EH1 N - T AY2 L\nPERCENTILES  P ER0 - S EH1 N - T AY2 L Z\nPERCENTS  P ER0 - S EH1 N T S\nPERCEPTIBLE  P ER0 - S EH1 P - T AH0 - B AH0 L\nPERCEPTION  P ER0 - S EH1 P - SH AH0 N\nPERCEPTIONS  P ER0 - S EH1 P - SH AH0 N Z\nPERCEPTIVE  P ER0 - S EH1 P - T IH0 V\nPERCEPTUAL  P ER0 - S EH1 P - CH AH0 - W AH0 L\nPERCEVAL  P ER0 - S EY0 - V AE1 L\nPERCH  P ER1 CH\nPERCHED  P ER1 CH T\nPERCHES  P ER1 - CH IH0 Z\nPERCHLORATE  P ER0 - K L AO1 - R EY0 T\nPERCHLORIC  P ER0 - K L AO1 - R IH0 K\nPERCIFIELD  P ER1 - S IH0 - F IY0 L D\nPERCIPIENT  P ER0 - S IH1 - P IY0 - AH0 N T\nPERCIPIENT(2)  P ER0 - S IH1 - P Y AH0 N T\nPERCIVAL  P ER1 - S IH0 - V AH0 L\nPERCLE  P ER1 - K AH0 L\nPERCOLATE  P ER1 - K AH0 - L EY2 T\nPERCOLATING  P ER1 - K AH0 - L EY2 - T IH0 NG\nPERCOLATOR  P ER1 - K AH0 - L EY2 - T ER0\nPERCS  P ER1 K S\nPERCUSSION  P ER0 - K AH1 - SH AH0 N\nPERCUSSIONIST  P ER0 - K AH1 - SH AH0 - N IH0 S T\nPERCUSSIVE  P ER0 - K AH1 - S AH0 V\nPERCUTANEOUS  P ER0 - K Y UW0 - T EY1 - N IY0 - AH0 S\nPERCY  P ER1 - S IY0\nPERCY'S  P ER1 - S IY0 Z\nPERDEW  P ER1 - D UW0\nPERDITA  P ER0 - D IY1 - T AH0\nPERDOMO  P ER0 - D OW1 - M OW0\nPERDUE  P ER0 - D UW1\nPERE  P ER1\nPEREA  P ER0 - IY1 - AH0\nPEREDA  P ER0 - EY1 - D AH0\nPEREGOY  P ER1 - IH0 - G OY0\nPEREGRINE  P EH1 - R AH0 - G R IY2 N\nPEREGRINES  P EH1 - R AH0 - G R IY2 N Z\nPEREIRA  P ER0 - EH1 - R AH0\nPERELLA  P ER0 - EH1 - L AH0\nPERELMAN  P EH1 - R AH0 L - M AH0 N\nPERELMAN'S  P EH1 - R AH0 L - M AH0 N Z\nPEREMPTORY  P ER0 - EH1 M P - T ER0 - IY0\nPERENNIAL  P ER0 - EH1 - N IY0 - AH0 L\nPERENNIALLY  P ER0 - EH1 - N IY0 - AH0 - L IY0\nPERENNIALS  P ER0 - EH1 - N IY0 - AH0 L Z\nPERERA  P ER0 - EH1 - R AH0\nPERES  P EH1 - R EH0 Z\nPERES'  P EH1 - R EH0 Z\nPERES'S  P EH1 - R EH0 - Z IH0 Z\nPERESTROIKA  P EH2 - R AH0 - S T R OY1 - K AH0\nPERETTI  P ER0 - EH1 - T IY0\nPERETZ  P ER1 - IH0 T S\nPEREYRA  P ER0 - EH1 - R AH0\nPEREZ  P EH1 - R EH0 Z\nPERFECT  P ER0 - F EH1 K T\nPERFECT(2)  P ER1 - F IH2 K T\nPERFECTA  P ER0 - F EH1 K - T AH0\nPERFECTED  P ER0 - F EH1 K - T AH0 D\nPERFECTING  P ER0 - F EH1 K - T IH0 NG\nPERFECTION  P ER0 - F EH1 K - SH AH0 N\nPERFECTIONISM  P ER0 - F EH1 K - SH AH0 - N IH2 - Z AH0 M\nPERFECTIONIST  P ER0 - F EH1 K - SH AH0 N - AH0 S T\nPERFECTIONIST(2)  P ER0 - F EH1 K - SH AH0 N - IH0 S T\nPERFECTLY  P ER1 - F AH0 K T - L IY0\nPERFECTLY(2)  P ER1 - F AH0 K - L IY0\nPERFETTI  P ER0 - F EH1 - T IY0\nPERFETTO  P ER0 - F EH1 - T OW0\nPERFIDY  P ER1 - F IH0 - D IY0\nPERFORATE  P ER1 - F ER0 - EY2 T\nPERFORATED  P ER1 - F ER0 - EY2 - T AH0 D\nPERFORATED(2)  P ER1 - F ER0 - EY2 - T IH0 D\nPERFORATION  P ER2 - F ER0 - EY1 - SH AH0 N\nPERFORATIONS  P ER2 - F ER0 - EY1 - SH AH0 N Z\nPERFORCE  P ER0 - F AO1 R S\nPERFORM  P ER0 - F AO1 R M\nPERFORMA  P ER0 - F AO1 R - M AH0\nPERFORMANCE  P ER0 - F AO1 R - M AH0 N S\nPERFORMANCES  P ER0 - F AO1 R - M AH0 N - S AH0 Z\nPERFORMANCES(2)  P ER0 - F AO1 R - M AH0 N - S IH0 Z\nPERFORMED  P ER0 - F AO1 R M D\nPERFORMER  P ER0 - F AO1 R - M ER0\nPERFORMERS  P ER0 - F AO1 R - M ER0 Z\nPERFORMERS'  P ER0 - F AO1 R - M ER0 Z\nPERFORMING  P ER0 - F AO1 R - M IH0 NG\nPERFORMS  P ER0 - F AO1 R M Z\nPERFUME  P ER0 - F Y UW1 M\nPERFUMED  P ER0 - F Y UW1 M D\nPERFUMES  P ER0 - F Y UW1 M Z\nPERFUNCTORY  P ER0 - F AH1 NG K - T ER0 - IY0\nPERGAMON  P ER1 - G AH0 - M AH0 N\nPERGANDE  P ER1 - G IH0 N D\nPERGOLA  P ER0 - G OW1 - L AH0\nPERHAM  P ER1 - HH AH0 M\nPERHAPS  P ER0 - HH AE1 P S\nPERIA  P EH1 - R IY0 - AH0\nPERIA'S  P EH1 - R IY0 - AH0 Z\nPERICH  P ER1 - IH0 K\nPERIGNON  P ER0 - IH1 - N Y AA0 N\nPERIGNON(2)  P EH2 - R IH0 G - N AA1 N\nPERIGO  P ER0 - IY1 - G OW0\nPERIL  P EH1 - R AH0 L\nPERILLO  P ER0 - IH1 - L OW0\nPERILOUS  P EH1 - R AH0 - L AH0 S\nPERILOUSLY  P EH1 - R AH0 - L AH0 S - L IY0\nPERILS  P EH1 - R AH0 L Z\nPERIMAN  P ER1 - IY0 - M AH0 N\nPERIMETER  P ER0 - IH1 - M AH0 - T ER0\nPERIMETERS  P ER0 - IH1 - M AH0 - T ER0 Z\nPERIN  P ER1 - IH0 N\nPERINE  P ER0 - IY1 - N IY0\nPERINI  P ER0 - IY1 - N IY0\nPERINO  P ER0 - IY1 - N OW0\nPERIOD  P IH1 - R IY0 - AH0 D\nPERIOD'S  P IH1 - R IY0 - AH0 D Z\nPERIODIC  P IH2 - R IY0 - AA1 - D IH0 K\nPERIODICAL  P IH2 - R IY0 - AA1 - D IH0 - K AH0 L\nPERIODICALLY  P IY2 - R IY0 - AA1 - D IH0 - K AH0 - L IY0\nPERIODICALLY(2)  P IY2 - R IY0 - AA1 - D IH0 K - L IY0\nPERIODICALS  P IH2 - R IY0 - AA1 - D IH0 - K AH0 L Z\nPERIODONTAL  P EH2 - R IY0 - AH0 - D AA1 N - T AH0 L\nPERIODONTAL(2)  P EH2 - R IY0 - AH0 - D AA1 - N AH0 L\nPERIODS  P IH1 - R IY0 - AH0 D Z\nPERIPATETIC  P EH2 - R AH0 - P AH0 - T EH1 - T IH0 K\nPERIPHERAL  P ER0 - IH1 - F ER0 - AH0 L\nPERIPHERAL(2)  P ER0 - IH1 - F R AH0 L\nPERIPHERALLY  P ER0 - IH1 - F ER0 - AH0 - L IY0\nPERIPHERALLY(2)  P ER0 - IH1 - F R AH0 - L IY0\nPERIPHERALS  P ER0 - IH1 - F ER0 - AH0 L Z\nPERIPHERALS(2)  P ER0 - IH1 - F R AH0 L Z\nPERIPHERY  P ER0 - IH1 - F ER0 - IY0\nPERISCOPE  P EH1 - R AH0 - S K OW2 P\nPERISH  P EH1 - R IH0 SH\nPERISHABLE  P EH1 - R IH0 - SH AH0 - B AH0 L\nPERISHED  P EH1 - R IH0 SH T\nPERISTYLE  P EH1 - R AH0 - S T AY2 L\nPERITO  P EH2 - R IY1 - T OW0\nPERJURE  P ER1 - JH ER0\nPERJURED  P ER1 - JH ER0 D\nPERJURER  P ER1 - JH ER0 - ER0\nPERJURING  P ER1 - JH ER0 - IH0 NG\nPERJURY  P ER1 - JH ER0 - IY0\nPERK  P ER1 K\nPERKED  P ER1 K T\nPERKEY  P ER1 - K IY0\nPERKIN  P ER1 - K IH0 N\nPERKING  P ER1 - K IH0 NG\nPERKINS  P ER1 - K AH0 N Z\nPERKINS'  P ER1 - K IH0 N Z\nPERKINS'S  P ER1 - K IH0 N - Z IH0 Z\nPERKINS(2)  P ER1 - K IH0 N Z\nPERKINSON  P ER1 - K IH0 N - S AH0 N\nPERKO  P ER1 - K OW0\nPERKOVIC  P ER1 - K AH0 - V IH0 CH\nPERKOVICH  P ER1 - K AH0 - V IH0 CH\nPERKOWSKI  P ER0 - K AO1 F S - K IY0\nPERKS  P ER1 K S\nPERKY  P ER1 - K IY0\nPERL  P ER1 L\nPERLA  P ER1 - L AH0\nPERLBERG  P ER1 L - B ER0 G\nPERLE  P ER1 L\nPERLEY  P ER1 - L IY0\nPERLIN  P ER1 - L IH0 N\nPERLIS  P ER1 - L IH2 S\nPERLITE  P ER1 - L AY0 T\nPERLMAN  P ER1 L - M AH0 N\nPERLMUTTER  P ER1 L - M AH2 - T ER0\nPERLOW  P ER1 - L OW0\nPERLS  P ER1 L Z\nPERLSTEIN  P ER1 L - S T AY0 N\nPERLSTEIN(2)  P ER1 L - S T IY0 N\nPERMA  P ER1 - M AH0\nPERMAN  P ER1 - M AH0 N\nPERMANENCE  P ER1 - M AH0 - N AH0 N S\nPERMANENT  P ER1 - M AH0 - N AH0 N T\nPERMANENTE  P ER2 - M AH0 - N EH1 N - T EY0\nPERMANENTLY  P ER1 - M AH0 - N AH0 N T - L IY0\nPERMEABILITY  P ER0 - M IY0 - AH0 - B IH1 - L IH0 - T IY0\nPERMEABLE  P ER1 - M IY0 - AH0 - B AH0 L\nPERMEATE  P ER1 - M IY0 - EY2 T\nPERMEATED  P ER1 - M IY0 - EY2 - T IH0 D\nPERMEATES  P ER1 - M IY0 - EY2 T S\nPERMEATING  P ER1 - M IY0 - EY2 - T IH0 NG\nPERMENTER  P ER1 - M AH0 N - T ER0\nPERMIAM  P ER0 - M AY1 - AH0 M\nPERMIAM(2)  P ER1 - M IY0 - AH0 M\nPERMIAN  P ER1 - M IY0 - AH0 N\nPERMISSIBLE  P ER0 - M IH1 - S AH0 - B AH0 L\nPERMISSION  P ER0 - M IH1 - SH AH0 N\nPERMISSIONS  P ER0 - M IH1 - SH AH0 N Z\nPERMISSIVE  P ER0 - M IH1 - S IH0 V\nPERMISSIVENESS  P ER0 - M IH1 - S IH0 V - N AH0 S\nPERMIT  P ER0 - M IH1 T\nPERMIT(2)  P ER1 - M IH2 T\nPERMITS  P ER0 - M IH1 T S\nPERMITS(2)  P ER1 - M IH2 T S\nPERMITTED  P ER0 - M IH1 - T AH0 D\nPERMITTED(2)  P ER0 - M IH1 - T IH0 D\nPERMITTING  P ER0 - M IH1 - T IH0 NG\nPERMOUNT  P ER1 - M AW2 N T\nPERMUT  P ER1 - M AH0 T\nPERMUTATION  P ER2 - M Y UW0 - T EY1 - SH AH0 N\nPERMUTATIONS  P ER2 - M Y UW0 - T EY1 - SH AH0 N Z\nPERMUTE  P ER2 - M Y UW1 T\nPERNA  P ER1 - N AH0\nPERNELL  P ER1 - N AH0 L\nPERNELLA  P ER0 - N EH1 - L AH0\nPERNICE  P ER1 - N IH0 S\nPERNICIARO  P ER0 - N IY1 - CH ER0 - OW0\nPERNICIOUS  P ER0 - N IH1 - SH AH0 S\nPERNO  P ER1 - N OW0\nPERNOD  P EH0 R - N OW1\nPERNOD'S  P ER0 - N AA1 D Z\nPERNOD(2)  P ER0 - N AA1 D\nPERO  P ER1 - OW0\nPERON  P ER0 - AO1 N\nPERONA  P ER0 - OW1 - N AH0\nPERONE  P ER0 - OW1 N\nPERONI  P ER0 - OW1 - N IY0\nPERONISM  P EH1 - R AH0 - N IH2 - Z AH0 M\nPERONIST  P EH1 - R AH0 - N IH0 S T\nPERONISTS  P EH1 - R AH0 - N IH0 S T S\nPERONISTS(2)  P EH1 - R AH0 - N IH0 S S\nPERONISTS(3)  P EH1 - R AH0 - N IH0 S\nPEROT  P ER0 - OW1\nPEROT'S  P ER0 - OW1 Z\nPEROTS  P ER0 - OW1 Z\nPEROTTI  P ER0 - OW1 - T IY0\nPEROUTKA  P ER0 - UW1 T - K AH0\nPEROVICH  P ER1 - AH0 - V IH0 CH\nPEROXIDE  P ER0 - AA1 K - S AY2 D\nPERPENDICULAR  P ER2 - P AH0 N - D IH1 - K Y AH0 - L ER0\nPERPETRATE  P ER1 - P AH0 - T R EY2 T\nPERPETRATED  P ER1 - P AH0 - T R EY2 - T IH0 D\nPERPETRATING  P ER1 - P AH0 - T R EY2 - T IH0 NG\nPERPETRATOR  P ER1 - P AH0 - T R EY2 - T ER0\nPERPETRATOR'S  P ER1 - P AH0 - T R EY2 - T ER0 Z\nPERPETRATORS  P ER1 - P AH0 - T R EY2 - T ER0 Z\nPERPETUAL  P ER0 - P EH1 - CH UW0 - AH0 L\nPERPETUALLY  P ER0 - P EH1 - CH UW0 - AH0 - L IY0\nPERPETUALS  P ER0 - P EH1 - CH UW0 - AH0 L Z\nPERPETUATE  P ER0 - P EH1 - CH AH0 W - EY2 T\nPERPETUATED  P ER0 - P EH1 - CH AH0 W - EY2 - T IH0 D\nPERPETUATES  P ER0 - P EH1 - CH AH0 W - EY2 T S\nPERPETUATING  P ER0 - P EH1 - CH AH0 W - EY2 - T IH0 NG\nPERPETUATION  P ER0 - P EH2 - CH AH0 W - EY1 - SH AH0 N\nPERPETUITY  P ER2 - P IH0 - T Y UW1 - IH0 - T IY0\nPERPICH  P ER1 - P IH0 K\nPERPLEX  P ER0 - P L EH1 K S\nPERPLEXED  P ER0 - P L EH1 K S T\nPERPLEXES  P ER0 - P L EH1 K - S IH0 Z\nPERPLEXING  P ER0 - P L EH1 K - S IH0 NG\nPERPLEXITY  P ER0 - P L EH1 K - S AH0 - T IY0\nPERQUISITE  P ER1 - K W AH0 - Z IH0 T\nPERQUISITES  P ER1 - K W AH0 - Z IH0 T S\nPERQUISITES(2)  P ER1 - K W IH0 - Z IH0 T S\nPERRA  P ER1 - R AH0\nPERRAS  P ER1 - R AH0 Z\nPERRAULT  P EH1 - R AO0 L T\nPERRAULT(2)  P ER0 - AO1 L T\nPERREAULT  P ER0 - R OW1\nPERREIRA  P ER0 - R EH1 - R AH0\nPERRELL  P ER0 - R EY1 L\nPERRELLA  P ER0 - R EH1 - L AH0\nPERRELLI  P ER0 - R EH1 - L IY0\nPERREN  P ER1 - R AH0 N\nPERRET  P ER1 - R IH0 T\nPERRETT  P ER1 - R IH0 T\nPERRETTA  P ER0 - R EH1 - T AH0\nPERRETTI  P ER0 - R EH1 - T IY0\nPERRI  P ER1 - R IY0\nPERRICONE  P ER0 - R IY0 - K OW1 - N IY0\nPERRIELLO  P ER0 - R IY0 - EH1 - L OW0\nPERRIER  P EH1 - R IY0 - ER0\nPERRIER(2)  P EH2 - R IY0 - EY1\nPERRIGO  P ER0 - R IY1 - G OW0\nPERRIN  P EH1 - R IH0 N\nPERRINE  P ER0 - R IY1 - N IY0\nPERRINO  P ER0 - R IY1 - N OW0\nPERRINS  P EH1 - R IH0 N Z\nPERRITT  P ER1 - R IH0 T\nPERRO  P ER1 - R OW0\nPERRODIN  P ER1 - R AH0 - D IH0 N\nPERRON  P EH1 - R AH0 N\nPERRONE  P ER0 - R OW1 - N IY0\nPERROT  P ER1 - R AH0 T\nPERROTT  P ER0 - R AA1 T\nPERROTTA  P ER0 - R OW1 - T AH0\nPERROTTI  P ER0 - R OW1 - T IY0\nPERROTTO  P ER0 - R OW1 - T OW0\nPERROW  P ER1 - R OW0\nPERRY  P EH1 - R IY0\nPERRY'S  P EH1 - R IY0 Z\nPERRYMAN  P ER1 - R IY0 - M AH0 N\nPERRYN  P ER1 - R IH0 N\nPERS  P ER1 S\nPERSALL  P ER1 - S AH0 L\nPERSAUD  P ER1 - S AO0 D\nPERSCHBACHER  P ER1 SH - B AA0 - K ER0\nPERSE  P ER1 S\nPERSECUTE  P ER1 - S AH0 - K Y UW2 T\nPERSECUTED  P ER1 - S AH0 - K Y UW2 - T AH0 D\nPERSECUTING  P ER1 - S IH0 - K Y UW2 - T IH0 NG\nPERSECUTION  P ER2 - S AH0 - K Y UW1 - SH AH0 N\nPERSECUTIONS  P ER2 - S AH0 - K Y UW1 - SH AH0 N S\nPERSECUTOR  P ER1 - S AH0 - K Y UW2 - T ER0\nPERSECUTORS  P ER1 - S AH0 - K Y UW2 - T ER0 Z\nPERSEPOLIS  P ER0 - S EH1 - P AH0 - L AH0 S\nPERSES  P ER1 - S IH0 Z\nPERSET  P ER1 - S EH0 T\nPERSEUS  P ER1 - S IY0 - AH0 S\nPERSEVERANCE  P ER2 - S AH0 - V IH1 - R AH0 N S\nPERSEVERE  P ER0 - S AH0 - V IH1 R\nPERSEVERED  P ER2 - S AH0 - V IH1 R D\nPERSHALL  P ER1 - SH AH0 L\nPERSHARE  P ER0 - SH EH1 R\nPERSHING  P ER1 - SH IH0 NG\nPERSHING'S  P ER1 - SH IH0 NG Z\nPERSHINGS  P ER1 - SH IH0 NG Z\nPERSIA  P ER1 - ZH AH0\nPERSIAN  P ER1 - ZH AH0 N\nPERSIANS  P ER1 - ZH AH0 N Z\nPERSICO  P ER0 - S IY1 - K OW0\nPERSING  P ER1 - S IH0 NG\nPERSINGER  P ER1 - S IH0 N - JH ER0\nPERSIS  P ER1 - S IH0 S\nPERSIST  P ER0 - S IH1 S T\nPERSISTED  P ER0 - S IH1 - S T AH0 D\nPERSISTED(2)  P ER0 - S IH1 - S T IH0 D\nPERSISTENCE  P ER0 - S IH1 - S T AH0 N S\nPERSISTENT  P ER0 - S IH1 - S T AH0 N T\nPERSISTENTLY  P ER0 - S IH1 - S T AH0 N T - L IY0\nPERSISTING  P ER0 - S IH1 - S T IH0 NG\nPERSISTS  P ER0 - S IH1 S T S\nPERSISTS(2)  P ER0 - S IH1 S S\nPERSISTS(3)  P ER0 - S IH1 S\nPERSKY  P ER1 S - K IY0\nPERSLEY  P ER1 S - L IY0\nPERSON  P ER1 - S AH0 N\nPERSON'S  P ER1 - S AH0 N Z\nPERSONA  P ER0 - S OW1 - N AH0\nPERSONABLE  P ER1 - S AH0 N - AH0 - B AH0 L\nPERSONABLY  P ER1 - S AH0 N - AH0 - B L IY0\nPERSONAE  P ER0 - S OW1 - N EY0\nPERSONAL  P ER1 - S IH0 - N IH0 L\nPERSONALINK  P ER1 - S AH0 N - AH0 L - IH2 NG K\nPERSONALITIES  P ER2 - S AH0 - N AE1 - L IH0 - T IY0 Z\nPERSONALITY  P ER2 - S AH0 - N AE1 - L IH0 - T IY0\nPERSONALIZATION  P ER2 - S AH0 N - AH0 - L AH0 - Z EY1 - SH AH0 N\nPERSONALIZE  P ER1 - S AH0 N - AH0 - L AY2 Z\nPERSONALIZED  P ER1 - S AH0 N - AH0 - L AY2 Z D\nPERSONALIZES  P ER1 - S AH0 N - AH0 - L AY2 - Z IH0 Z\nPERSONALIZING  P ER1 - S AH0 N - AH0 - L AY2 - Z IH0 NG\nPERSONALLY  P ER1 - S AH0 N - AH0 - L IY0\nPERSONALLY(2)  P ER1 - S AH0 N - L IY0\nPERSONALLY(3)  P ER1 - S N AH0 - L IY0\nPERSONALS  P ER1 - S IH0 - N IH0 L Z\nPERSONIC  P ER0 - S AA1 - N IH0 K\nPERSONICS  P ER0 - S AA1 - N IH0 K S\nPERSONIFICATION  P ER0 - S AA2 - N AH0 - F AH0 - K EY1 - SH AH0 N\nPERSONIFIED  P ER0 - S AA1 - N AH0 - F AY2 D\nPERSONIFIES  P ER0 - S AA1 - N AH0 - F AY2 Z\nPERSONIFY  P ER0 - S AA1 - N AH0 - F AY2\nPERSONNEL  P ER2 - S AH0 - N EH1 L\nPERSONS  P ER1 - S AH0 N Z\nPERSPECTIVE  P ER0 - S P EH1 K - T IH0 V\nPERSPECTIVES  P ER0 - S P EH1 K - T IH0 V Z\nPERSPIRATION  P ER2 - S P ER0 - EY1 - SH AH0 N\nPERSPIRE  P ER0 - S P AY1 R\nPERSPIRING  P ER0 - S P AY1 - R IH0 NG\nPERSSON  P ER1 - S AH0 N\nPERSUADABLE  P ER0 - S W EY1 - D AH0 - B AH0 L\nPERSUADE  P ER0 - S W EY1 D\nPERSUADED  P ER0 - S W EY1 - D AH0 D\nPERSUADED(2)  P ER0 - S W EY1 - D IH0 D\nPERSUADES  P ER0 - S W EY1 D Z\nPERSUADING  P ER0 - S W EY1 - D IH0 NG\nPERSUASION  P ER0 - S W EY1 - ZH AH0 N\nPERSUASIONS  P ER0 - S W EY1 - ZH AH0 N Z\nPERSUASIVE  P ER0 - S W EY1 - S IH0 V\nPERSUASIVELY  P ER0 - S W EY1 - S IH0 V - L IY0\nPERSUASIVENESS  P ER0 - S W EY1 - S IH0 V - N AH0 S\nPERSYN  P ER1 - S IH0 N\nPERT  P ER1 T\nPERTAIN  P ER0 - T EY1 N\nPERTAINED  P ER0 - T EY1 N D\nPERTAINING  P ER0 - T EY1 - N IH0 NG\nPERTAINS  P ER0 - T EY1 N Z\nPERTAMINA  P ER0 - T AH0 - M IY1 - N AH0\nPERTH  P ER1 TH\nPERTINENT  P ER1 - T AH0 - N AH0 N T\nPERTSCHUK  P ER1 T - CH AH0 K\nPERTUIT  P ER1 - T IH0 T\nPERTUIT(2)  P ER1 - T UW0 - AH0 T\nPERTURB  P ER0 - T ER1 B\nPERTURBATION  P ER2 - T ER0 - B EY1 - SH AH0 N\nPERTURBATIONS  P ER2 - T ER0 - B EY1 - SH AH0 N Z\nPERTURBED  P ER0 - T ER1 B D\nPERTURBS  P ER0 - T ER1 B Z\nPERTUSSIS  P ER0 - T AH1 - S IH0 S\nPERU  P ER0 - UW1\nPERU'S  P ER0 - UW1 Z\nPERUGINA  P EH2 - R UW0 - JH IY1 - N AH0\nPERUGINI  P ER0 - UW0 - JH IY1 - N IY0\nPERULAC  P EH1 - R UW0 - L AE0 K\nPERUSAL  P ER0 - UW1 - Z AH0 L\nPERUSE  P ER0 - UW1 Z\nPERUSED  P ER0 - UW1 Z D\nPERUSING  P ER0 - UW1 - Z IH0 NG\nPERUSSE  P ER0 - UW1 - S IY0\nPERUVIAN  P ER0 - UW1 - V IY0 - AH0 N\nPERUVIANS  P ER0 - UW1 - V IY0 - AH0 N Z\nPERUZZI  P ER0 - UW1 T - S IY0\nPERVADE  P ER0 - V EY1 D\nPERVADED  P ER0 - V EY1 - D IH0 D\nPERVADES  P ER0 - V EY1 D Z\nPERVADING  P ER0 - V EY1 - D IH0 NG\nPERVASIVE  P ER0 - V EY1 - S IH0 V\nPERVASIVENESS  P ER0 - V EY1 - S IH0 V - N IH0 S\nPERVERSE  P ER0 - V ER1 S\nPERVERSELY  P ER0 - V ER1 S - L IY0\nPERVERSION  P ER0 - V ER1 - ZH AH0 N\nPERVERSITY  P ER0 - V ER1 - S AH0 - T IY0\nPERVERT  P ER1 - V ER0 T\nPERVERT(2)  P ER0 - V ER1 T\nPERVERTED  P ER0 - V ER1 - T IH0 D\nPERVERTING  P ER0 - V ER1 - T IH0 NG\nPERVERTS  P ER1 - V ER0 T S\nPERVERTS(2)  P ER0 - V ER1 T S\nPERVOMAISKAYA  P ER0 - V OW0 - M EY0 - S K AY1 - AH0\nPERZ  P ER1 Z\nPESATORI  P EH2 - S AH0 - T AO1 - R IY0\nPESAVENTO  P EH2 - S AH0 - V EH1 N - T OW0\nPESCATORE  P EH0 - S K AA0 - T AO1 - R IY0\nPESCE  P EH1 S\nPESCH  P EH1 SH\nPESCHEL  P EH1 - SH AH0 L\nPESCHKE  P EH1 SH K\nPESCI  P EH1 S - K IY0\nPESEK  P EH1 - S EH0 K\nPESETA  P AH0 - S EY1 - T AH0\nPESETAS  P AH0 - S EY1 - T AH0 Z\nPESH  P EH1 SH\nPESHAWAR  P EH1 - SH AH0 - W AO0 R\nPESHEK  P EH1 - SH EH0 K\nPESINA  P EH0 - S IY1 - N AH0\nPESKIN  P EH1 - S K IH0 N\nPESKY  P EH1 S - K IY0\nPESNELL  P IH0 S - N EH1 L\nPESO  P EY1 - S OW0\nPESO'S  P EY1 - S OW0 Z\nPESOLA  P EH0 - S OW1 - L AH0\nPESOS  P EY1 - S OW0 Z\nPESSIMISM  P EH1 - S AH0 - M IH2 - Z AH0 M\nPESSIMIST  P EH1 - S AH0 - M AH0 S T\nPESSIMISTIC  P EH2 - S AH0 - M IH1 - S T IH0 K\nPESSIMISTS  P EH1 - S AH0 - M IH0 S T S\nPESSIMISTS(2)  P EH1 - S AH0 - M IH0 S S\nPESSIMISTS(3)  P EH1 - S AH0 - M IH0 S\nPESSIN  P EH1 - S IH0 N\nPEST  P EH1 S T\nPESTA  P EH1 - S T AH0\nPESTANA  P EH0 - S T AE1 - N AH0\nPESTER  P EH1 - S T ER0\nPESTERED  P EH1 - S T ER0 D\nPESTERING  P EH1 - S T ER0 - IH0 NG\nPESTICIDE  P EH1 - S T AH0 - S AY2 D\nPESTICIDES  P EH1 - S T AH0 - S AY2 D Z\nPESTILENCE  P EH1 - S T AH0 - L AH0 N S\nPESTILLO  P EH2 - S T IH1 - L OW0\nPESTILLO(2)  P EH2 - S T IY1 - OW0\nPESTKA  P EH1 - S T K AH0\nPESTS  P EH1 S T S\nPET  P EH1 T\nPET'S  P EH1 T S\nPETA  P IY1 - T AH0\nPETA'S  P IY1 - T AH0 Z\nPETAK  P EH1 - T AH0 K\nPETAL  P EH1 - T AH0 L\nPETALS  P EH1 - T AH0 L Z\nPETALUMA  P EH2 - T AH0 - L UW1 - M AH0\nPETARD  P EH1 - T ER0 D\nPETARD(2)  P AH0 - T AA1 D\nPETE  P IY1 T\nPETE'S  P IY1 T S\nPETER  P IY1 - T ER0\nPETER'S  P IY1 - T ER0 Z\nPETERBILT  P IY1 - T ER0 - B IH2 L T\nPETERBOROUGH  P IY1 - T ER0 - B ER0 - OW0\nPETERED  P IY1 - T ER0 D\nPETERING  P IY1 - T ER0 - IH0 NG\nPETERKA  P IH0 - T ER1 - K AH0\nPETERKIN  P IH0 - T ER1 - K IH0 N\nPETERMAN  P IY1 - T ER0 - M AH0 N\nPETERMANN  P IY1 - T ER0 - M AH0 N\nPETERPAUL  P IY1 - T ER0 - P AO1 L\nPETERS  P IY1 - T ER0 Z\nPETERSBURG  P IY1 - T ER0 Z - B ER0 G\nPETERSEN  P IY1 - T ER0 - S AH0 N\nPETERSEN'S  P IY1 - T ER0 - S AH0 N Z\nPETERSON  P IY1 - T ER0 - S AH0 N\nPETERSON'S  P IY1 - T ER0 - S AH0 N Z\nPETERY  P IY1 - T ER0 - IY0\nPETEY  P IY1 - T IY0\nPETH  P EH1 TH\nPETHEL  P EH1 - TH AH0 L\nPETHTEL  P EH1 - TH AH0 L\nPETIE  P EH1 - T IY0\nPETILLO  P EH0 - T IH1 - L OW0\nPETINO  P EH0 - T IY1 - N OW0\nPETIPA  P EH2 - T IY1 - P AH0\nPETIPA'S  P EH0 - T IY1 - P AH0 Z\nPETIT  P EH1 - T IY0\nPETITE  P AH0 - T IY1 T\nPETITES  P EH2 - T IY1 T S\nPETITION  P AH0 - T IH1 - SH AH0 N\nPETITIONED  P AH0 - T IH1 - SH AH0 N D\nPETITIONER  P AH0 - T IH1 - SH AH0 N - ER0\nPETITIONERS  P AH0 - T IH1 - SH AH0 N - ER0 Z\nPETITIONING  P AH0 - T IH1 - SH AH0 N - IH0 NG\nPETITIONS  P AH0 - T IH1 - SH AH0 N Z\nPETITJEAN  P IH0 - T IH1 T - JH AH0 N\nPETITO  P EH0 - T IY1 - T OW0\nPETITT  P EH1 - T IH0 T\nPETITTI  P EH0 - T IY1 - T IY0\nPETITTO  P EH0 - T IY1 - T OW0\nPETKO  P EH1 T - K OW0\nPETKOVSEK  P EH2 T - K AA1 V - S EH0 K\nPETKUS  P EH1 T - K IH0 S\nPETO  P IY1 - T OW0\nPETRA  P EH1 - T R AH0\nPETRACCA  P EH0 - T R AA1 - K AH0\nPETRAGLIA  P EH0 - T R AA1 - G L IY0 - AH0\nPETRAITIS  P EH0 - T R AY1 - T IH0 S\nPETRAK  P EH1 - T R AH0 K\nPETRAKIS  P EH1 - T R AH0 - K IH0 S\nPETRALIA  P EH0 - T R AA1 - L IY0 - AH0\nPETRARCA  P EH2 - T R AA1 R - K AH0\nPETRAS  P EH1 - T R AH0 Z\nPETRASEK  P IH0 - T R AA1 - S EH0 K\nPETRASH  P EH1 - T R AH0 SH\nPETRAUSKAS  P EH1 - T R AW0 - S K AH0 Z\nPETRE  P EH1 - T ER0\nPETREA  P EH1 - T R IY0 - AH0\nPETREE  P EH1 - T R IY1\nPETRELLA  P EH2 - T R EH1 - L AH0\nPETRELLI  P EH0 - T R EH1 - L IY0\nPETRELS  P EH1 - T R AH0 L Z\nPETREY  P EH1 - T R IY0\nPETRI  P EH1 - T R IY0\nPETRI(2)  P IY1 - T R IY0\nPETRICH  P EH1 - T R IH0 K\nPETRICIOLI  P EH2 - T R IH0 - S IY0 - OW1 - L IY0\nPETRICK  P EH1 - T R IH0 K\nPETRIDES  P EH1 - T R AY0 D Z\nPETRIE  P EH1 - T R IY0\nPETRIE'S  P EH1 - T R IY0 Z\nPETRIFIED  P EH1 - T R AH0 - F AY2 D\nPETRIFY  P EH1 - T R AH0 - F AY2\nPETRIK  P EH1 - T R IH0 K\nPETRILLA  P EH2 - T R IH1 - L AH0\nPETRILLI  P EH0 - T R IY1 - L IY0\nPETRILLO  P EH2 - T R IH1 - L OW0\nPETRIN  P EH1 - T R IH0 N\nPETRINA  P EH0 - T R IY1 - N AH0\nPETRINI  P EH0 - T R IY1 - N IY0\nPETRINO  P EH0 - T R IY1 - N OW0\nPETRIZZO  P EH0 - T R IY1 - Z OW0\nPETRO  P EH1 - T R OW0\nPETROBRAS  P EH2 - T R AA1 - B R AH0 S\nPETROCELLI  P EH0 - T R OW0 - CH EH1 - L IY0\nPETROCHEMICAL  P EH2 - T R OW0 - K EH1 - M IH0 - K AH0 L\nPETROCHEMICALS  P EH2 - T R OW0 - K EH1 - M IH0 - K AH0 L Z\nPETROCORP  P EH1 - T R OW0 - K AO2 R P\nPETRODOLLAR  P EH1 - T R OW0 - D AA2 - L ER0\nPETRODOLLARS  P EH1 - T R OW0 - D AA2 - L ER0 Z\nPETROFF  P EH1 - T R AO0 F\nPETROFINA  P EH2 - T R AH0 - F IY1 - N AH0\nPETROFINA(2)  P EH2 - T R OW0 - F IY1 - N AH0\nPETROL  P EH1 - T R OW0 L\nPETROLANE  P EH1 - T R OW0 - L EY2 N\nPETROLEAR  P EH1 - T R OW0 - L IH2 R\nPETROLEOS  P AH0 - T R OW1 - L IY0 - OW0 S\nPETROLES  P EH1 - T R OW2 L Z\nPETROLEUM  P AH0 - T R OW1 - L IY0 - AH0 M\nPETROLEUM'S  P AH0 - T R OW1 - L IY0 - AH0 M Z\nPETROLIA  P AH0 - T R OW1 - L IY0 - AH0\nPETROLOGY  P AH0 - T R AA1 - L AH0 - JH IY0\nPETROMIN  P EH1 - T R AH0 - M IH0 N\nPETROMINERAL  P EH2 - T R OW0 - M IH1 - N ER0 - AH0 L\nPETROMINERALS  P EH2 - T R OW0 - M IH1 - N ER0 - AH0 L Z\nPETRONAS  P EH2 - T R OW1 - N AH0 S\nPETRONE  P EH0 - T R OW1 - N IY0\nPETRONELLA  P EH2 - T R OW0 - N EH1 - L AH0\nPETRONI  P EH0 - T R OW1 - N IY0\nPETRONIA  P EH0 - T R OW1 - N IY0 - AH0\nPETRONILLA  P EH2 - T R AH0 - N IH1 - L AH0\nPETRONIO  P EH2 - T R OW1 - N IY0 - OW0\nPETROPOULOS  P IH0 - T R AA1 - P AH0 - L IH0 S\nPETROS  P EH1 - T R OW0 Z\nPETROSA  P EH0 - T R OW1 - Z AH0\nPETROSINO  P EH0 - T R OW0 - S IY1 - N OW0\nPETROSKI  P IH0 - T R AW1 S - K IY0\nPETROSKI(2)  P IH0 - T R AA1 S - K IY0\nPETROSKY  P IH0 - T R OW1 S - K IY0\nPETROSSIAN  P AH0 - T R AO1 - Z AH0 N\nPETROSSIAN(2)  P AH0 - T R OW1 - S Y AH0 N\nPETROSYNTHESE  P AH0 - T R OW1 - S IH0 N - TH IY2 S\nPETROVIC  P IH0 - T R AA1 - V IH0 K\nPETROVICH  P EH1 - T R AH0 - V IH0 CH\nPETROVIETNAM  P EH2 - T R OW0 - V IY2 - EH0 T - N AA1 M\nPETROW  P EH1 - T R OW2\nPETROWSKI  P IH0 T - R AO1 F S - K IY0\nPETROWSKY  P IH0 - T R AW1 S - K IY0\nPETRU  P EH1 - T R UW0\nPETRUCCELLI  P EH2 - T R UW0 - CH EH1 - L IY0\nPETRUCCI  P EH0 - T R UW1 - CH IY0\nPETRUCELLI  P EH0 - T R UW0 - CH EH1 - L IY0\nPETRUS  P EH1 - T R AH0 S\nPETRUSKA  P IH0 - T R AH1 - S K AH0\nPETRUZZELLI  P EH0 - T R UW0 T - S EH1 - L IY0\nPETRUZZI  P EH0 - T R UW1 T - S IY0\nPETRY  P EH1 - T R IY0\nPETS  P EH1 T S\nPETSCH  P EH1 CH\nPETSCHE  P EH1 CH\nPETSMART  P EH1 T - S M AA2 R T\nPETSTUFF  P EH1 T - S T AH2 F\nPETT  P EH1 T\nPETTA  P EH1 - T AH0\nPETTAWAY  P EH1 T - AH0 - W EY0\nPETTED  P EH1 - T AH0 D\nPETTED(2)  P EH1 - T IH0 D\nPETTEE  P EH1 - T IY1\nPETTENGILL  P EH1 - T IH0 NG - G AH0 L\nPETTER  P EH1 - T ER0\nPETTERSEN  P EH1 - T ER0 - S AH0 N\nPETTERSON  P EH1 - T ER0 - S AH0 N\nPETTERSSON  P IY1 - T ER0 - S AH0 N\nPETTERSSON(2)  P EH1 - T ER0 - S AH0 N\nPETTET  P EH1 - T IH0 T\nPETTEWAY  P EH1 T - W EY0\nPETTEY  P EH1 - T IY0\nPETTEYS  P EH1 - T IY0 Z\nPETTI  P EH1 - T IY0\nPETTICOAT  P EH1 - T IY0 - K OW2 T\nPETTICOATS  P EH1 - T IY0 - K OW2 T S\nPETTIE  P EH1 - T IY0\nPETTIES  P EH1 - T IY0 Z\nPETTIGREW  P EH1 - T IH0 - G R UW0\nPETTIJOHN  P EH1 - T IH0 - JH AA0 N\nPETTINATO  P EH0 - T IY0 - N AA1 - T OW0\nPETTINE  P EH0 - T IY1 - N IY0\nPETTINESS  P EH1 - T IY0 - N AH0 S\nPETTING  P EH1 - T IH0 NG\nPETTINGER  P EH1 - T IH0 - NG ER0\nPETTINGILL  P IH0 - T IH1 NG - G AH0 L\nPETTIS  P EH1 - T IH0 S\nPETTIT  P EH1 - T IH0 T\nPETTITT  P EH1 - T IH0 T\nPETTRY  P EH1 - T R IY0\nPETTUS  P EH1 - T AH0 S\nPETTWAY  P EH1 T - W EY2\nPETTY  P EH1 - T IY0\nPETULANCE  P EH1 - CH AH0 - L AH0 N S\nPETULANT  P EH1 - CH AH0 - L AH0 N T\nPETUNIA  P AH0 - T UW1 - N IY0 - AH0\nPETUNIA(2)  P AH0 - T UW1 - N Y AH0\nPETUNIAS  P AH0 - T UW1 - N IY0 - AH0 Z\nPETUNIAS(2)  P AH0 - T UW1 - N Y AH0 Z\nPETWAY  P EH1 T - W EY2\nPETZ  P EH1 T S\nPETZEL  P EH1 T - Z AH0 L\nPETZINGER  P EH1 T - S IH2 - NG ER0\nPETZOLD  P EH1 T - Z OW0 L D\nPETZOLDT  P EH1 T - Z OW0 L T\nPEUGEOT  P Y UW0 - ZH OW1\nPEUGH  P Y UW1\nPEVEHOUSE  P IY1 V - HH AW2 S\nPEVELER  P EH1 - V AH0 - L ER0\nPEVERELL  P EH1 - V ER0 - EH2 L\nPEVETO  P EH0 - V EH1 - T OW0\nPEVEY  P IH0 - V EY1\nPEW  P Y UW1\nPEWABIC  P Y UW2 - AA1 - B IH0 K\nPEWEX  P EH1 - W EH2 K S\nPEWITT  P Y UW1 - IH0 T\nPEWS  P Y UW1 Z\nPEWTER  P Y UW1 - T ER0\nPEYMAN  P EY1 - M AH0 N\nPEYRELEVADE  P EH2 - R EH1 - L AH0 - V EY2 D\nPEYSER  P EY1 - Z ER0\nPEYTON  P EY1 - T AH0 N\nPEZ  P EH1 Z\nPEZESHKAN  P AH0 - Z EH1 SH - K AH0 N\nPEZIM  P EH2 - Z IY1 M\nPEZIM'S  P EH2 - Z IY1 M Z\nPEZZA  P EH1 - Z AH0\nPEZZELLA  P EH0 T - S EH1 - L AH0\nPEZZULLO  P EH0 T - S UW1 - L OW0\nPFAFF  F AE1 F\nPFAHL  F AA1 L\nPFAHLER  F AA1 - L ER0\nPFALZGRAF  F AE1 L Z - G R AE0 F\nPFANNENSTIEL  F AE1 - N AH0 N - S T IY0 L\nPFARR  F AA1 R\nPFAU  F AW1\nPFEFFER  F EH1 - F ER0\nPFEFFERKORN  F EH1 - F ER0 - K AO2 R N\nPFEFFERLE  F EH1 - F ER0 - AH0 L\nPFEIFER  F AY1 - F ER0\nPFEIFF  F AY1 F\nPFEIFFER  F AY1 - F ER0\nPFEIFLE  F AY1 - F AH0 L\nPFEIL  F AY1 L\nPFENNIG  F EH1 - N IH0 G\nPFENNIGS  F EH1 - N IH0 G Z\nPFENNING  F EH1 - N IH0 NG\nPFENNINGER  F EH1 - N IH0 - NG ER0\nPFEUFFER  F Y UW1 - F ER0\nPFIESTER  F AY1 - S T ER0\nPFIFFNER  F IH1 F - N ER0\nPFINGSTEN  F IH1 NG - S T AH0 N\nPFISTER  F IH1 - S T ER0\nPFISTERER  F IH1 - S T ER0 - ER0\nPFIZER  F AY1 - Z ER0\nPFIZER'S  F AY1 - Z ER0 Z\nPFLAUM  F L AW1 M\nPFLEGER  F L IY1 - G ER0\nPFLEIDERER  F L AY1 - D ER0 - ER0\nPFLIEGER  F L IY1 - G ER0\nPFLUEGER  F L UW1 - G ER0\nPFLUG  F L UW1 G\nPFLUGER  F L UW1 - G ER0\nPFLUM  F L AH1 M\nPFOHL  F OW1 L\nPFORZHEIMER  F AO1 R Z - HH AY2 - M ER0\nPFOST  F AA1 S T\nPFUND  F AH1 N D\nPFUNDSTEIN  F AH1 N D - S T IY2 N\nPFUNDSTEIN(2)  F AH1 N D - S T AY2 N\nPGM  P IY1 - JH IY1 - EH1 M\nPH  P IY1 - EY1 CH\nPHAGAN  F EY1 - G AH0 N\nPHAGOCYTE  F AE1 - G AH0 - S AY2 T\nPHAGOCYTES  F AE1 - G AH0 - S AY2 T S\nPHAIR  F EH1 R\nPHALANGE  F AH0 - L AE1 N JH\nPHALANGE(2)  F AH0 - L EY1 N JH\nPHALANGES  F AH0 - L AE1 N - JH IY0 Z\nPHALANGES(2)  F AH0 - L EY1 N - JH IH0 Z\nPHALANX  F EY1 - L AE0 NG K S\nPHALEN  F AE1 - L AH0 N\nPHALLIC  F AE1 - L IH0 K\nPHAM  F AE1 M\nPHAN  F AE1 N\nPHANEUF  F AE1 - N UW0 F\nPHANTASM  F AE2 N - T AE1 - Z AH0 M\nPHANTASMAGORIA  F AE0 N - T AE2 Z - M AH0 - G AO1 - R IY0 - AH0\nPHANTOM  F AE1 N - T AH0 M\nPHANTOM(2)  F AE1 - N AH0 M\nPHANTOMS  F AE1 N - T AH0 M Z\nPHANTOMS(2)  F AE1 - N AH0 M Z\nPHAR  F AA1 R\nPHARAOH  F EH1 - R OW0\nPHARAOH(2)  F EY1 - R OW0\nPHARAOHS  F EH1 - R OW0 Z\nPHARAOHS(2)  F EY1 - R OW0 Z\nPHARAON  F EH1 - R OW0 N\nPHARAONIC  F EH2 - R AH0 - AA1 - N IH0 K\nPHARES  F EH1 R Z\nPHARIS  F AE1 - R AH0 S\nPHARISAISM  F AE1 - R IH0 - S EY2 - IH2 - Z AH0 M\nPHARISS  F ER0 - IH1 S\nPHARMA  F AA1 R - M AH0\nPHARMACEUTICAL  F AA2 R - M AH0 - S UW1 - T IH0 - K AH0 L\nPHARMACEUTICALS  F AA2 R - M AH0 - S UW1 - T IH0 - K AH0 L Z\nPHARMACIA  F AA0 R - M EY1 - S IY0 - AH0\nPHARMACIES  F AA1 R - M AH0 - S IY0 Z\nPHARMACIST  F AA1 R - M AH0 - S IH0 S T\nPHARMACISTS  F AA1 R - M AH0 - S IH0 S T S\nPHARMACISTS(2)  F AA1 R - M AH0 - S IH0 S S\nPHARMACISTS(3)  F AA1 R - M AH0 - S IH0 S\nPHARMACOLOGICAL  F AA2 R - M AH0 - K AH0 - L AA1 - JH IH0 - K AH0 L\nPHARMACOLOGIST  F AA2 R - M AH0 - K AA1 - L AH0 - JH IH0 S T\nPHARMACOLOGISTS  F AA2 R - M AH0 - K AA1 - L AH0 - JH IH0 S T S\nPHARMACOLOGISTS(2)  F AA2 R - M AH0 - K AA1 - L AH0 - JH IH0 S S\nPHARMACOLOGISTS(3)  F AA2 R - M AH0 - K AA1 - L AH0 - JH IH0 S\nPHARMACOLOGY  F AA2 R - M AH0 - K AA1 - L AH0 - JH IY0\nPHARMACY  F AA1 R - M AH0 - S IY0\nPHARMAKINETIC  F AA2 R - M AH0 - K AH0 - N EH1 - T IH0 K\nPHARMAKINETICS  F AA2 R - M AH0 - K AH0 - N EH1 - T IH0 K S\nPHARO  F AA1 - R OW0\nPHAROAH  F EY1 - R OW0\nPHAROAH(2)  F EH1 - R OW0\nPHAROAHS  F EY1 - R OW0 Z\nPHAROAHS(2)  F EH1 - R OW0 Z\nPHAROS  F EH1 - R OW2 Z\nPHARR  F AA1 R\nPHARRIS  F AE1 - R IH0 S\nPHARYNX  F EH1 - R IH0 NG K S\nPHASE  F EY1 Z\nPHASED  F EY1 Z D\nPHASEOUT  F EY1 Z - AW2 T\nPHASES  F EY1 - Z AH0 Z\nPHASES(2)  F EY1 - Z IH0 Z\nPHASING  F EY1 - Z IH0 NG\nPHEASANT  F EH1 - Z AH0 N T\nPHEASANTS  F EH1 - Z AH0 N T S\nPHEBE  F IY1 - B IY0\nPHEBUS  F IY1 - B AH0 S\nPHEDRA  F EH1 - D R AH0\nPHEGLEY  F EH1 G - L IY0\nPHELAN  F EH1 - L AH0 N\nPHELPS  F EH1 L P S\nPHELPS'S  F EH1 L P - S IH0 Z\nPHENICIE  F EH1 - N AH0 - K IY0\nPHENIX  F EH1 - N IH0 K S\nPHENOL  F IY1 - N AA0 L\nPHENOL(2)  F EH1 - N AH0 L\nPHENOLIC  F AH0 - N AA1 - L IH0 K\nPHENOLPHTHALEIN  F IY2 - N AA0 L F - TH EY1 - L AH0 N\nPHENOLPHTHALEIN(2)  F EH2 - N AA0 L F - TH EY1 - L AH0 N\nPHENOM  F EH1 - N AH0 M\nPHENOMENA  F AH0 - N AA1 - M AH0 - N AH0\nPHENOMENAL  F AH0 - N AA1 - M AH0 - N AH0 L\nPHENOMENALLY  F AH0 - N AA1 - M AH0 - N AH0 - L IY0\nPHENOMENON  F AH0 - N AA1 - M AH0 - N AA2 N\nPHENOTYPE  F IY1 - N AH0 - T AY2 P\nPHENOTYPES  F IY1 - N AH0 - T AY2 P S\nPHENOTYPIC  F IY2 - N AH0 - T IH1 - P IH0 K\nPHENYLTHALINE  F IY2 - N AH0 L - TH EY1 - L IY0 N\nPHERIGO  F EH0 - R IY1 - G OW0\nPHEROMONE  F EH1 - R AH0 - M OW2 N\nPHEROMONES  F EH1 - R AH0 - M OW2 N Z\nPHERSON  F ER1 - S AH0 N\nPHETTEPLACE  F EH1 T - P L EY0 S\nPHEW  F Y UW1\nPHI  F AY1\nPHIBBS  F IH1 B Z\nPHIBRO  F IH1 - B R OW0\nPHIFER  F AY1 - F ER0\nPHIL  F IH1 L\nPHIL'S  F IH1 L Z\nPHILADELPHIA  F IH2 - L AH0 - D EH1 L - F IY0 - AH0\nPHILADELPHIA'S  F IH2 - L AH0 - D EH1 L - F IY0 - AH0 Z\nPHILADELPHIAN  F IH2 - L AH0 - D EH1 L - F IY0 - AH0 N\nPHILADELPHIANS  F IH2 - L AH0 - D EH1 L - F IY0 - AH0 N Z\nPHILANA  F IH0 - L AE1 - N AH0\nPHILANDERING  F AY2 - L AE1 N - D ER0 - IH0 NG\nPHILANDERING(2)  F AH0 - L AE1 N - D ER0 - IH0 NG\nPHILANTHA  F IH0 - L AE1 N - TH AH0\nPHILANTHROPIC  F IH2 - L AH0 N - TH R AA1 - P IH0 K\nPHILANTHROPIES  F AH0 - L AE1 N - TH R AH0 - P IY0 Z\nPHILANTHROPIST  F AH0 - L AE1 N - TH R AH0 - P AH0 S T\nPHILANTHROPIST(2)  F IH0 - L AE1 N - TH R AH0 - P IH0 S T\nPHILANTHROPISTS  F IH0 - L AE1 N - TH R AH0 - P IH0 S T S\nPHILANTHROPISTS(2)  F IH0 - L AE1 N - TH R AH0 - P IH0 S S\nPHILANTHROPISTS(3)  F IH0 - L AE1 N - TH R AH0 - P IH0 S\nPHILANTHROPY  F IH0 - L AE1 N - TH R AH0 - P IY0\nPHILBECK  F IH1 L - B EH2 K\nPHILBERT  F IH1 L - B ER0 T\nPHILBERTA  F IH0 L - B ER1 - T AH0\nPHILBIN  F IH1 L - B IH0 N\nPHILBRICK  F IH1 L - B R IH0 K\nPHILBROOK  F IH1 L - B R UH2 K\nPHILBY  F IH1 L - B IY0\nPHILENE  F IH0 - L IY1 N\nPHILEO  F IH1 - L IY0 - OW0\nPHILHARMONIA  F IH2 - L HH AA0 R - M OW1 - N IY0 - AH0\nPHILHARMONIC  F IH2 - L HH AA2 R - M AA1 - N IH0 K\nPHILHARMONIC'S  F IH2 - L HH AA0 R - M AA1 - N IH0 K S\nPHILHOWER  F IH1 - L AW0 - ER0\nPHILIBERT  F IH1 - L IH0 - B ER0 T\nPHILIBOSIAN  F IH2 - L IH0 - B OW1 - Z IY0 - AH0 N\nPHILIDA  F AH0 - L IY1 - D AH0\nPHILINA  F AH0 - L IY1 - N AH0\nPHILIP  F IH1 - L AH0 P\nPHILIP'S  F IH1 - L AH0 P S\nPHILIP'S(2)  F IH1 - L IH0 P S\nPHILIP(2)  F IH1 - L IH0 P\nPHILIPP  F IH1 - L IH0 P\nPHILIPPA  F IH0 - L IH1 - P AH0\nPHILIPPE  F IH0 - L IY1 - P EY0\nPHILIPPI  F IH0 - L IH1 - P IY0\nPHILIPPIC  F IH0 - L IH1 - P IH0 K\nPHILIPPINE  F IH1 - L AH0 - P IY2 N\nPHILIPPINES  F IH1 - L AH0 - P IY2 N Z\nPHILIPPINES'  F IH1 - L AH0 - P IY2 N Z\nPHILIPPINO  F IH2 - L AH0 - P IY1 - N OW0\nPHILIPPS  F IH1 - L IH0 P S\nPHILIPS  F IH1 - L AH0 P S\nPHILIPS'  F IH1 - L IH0 P S\nPHILIPS'S  F IH1 - L IH0 P - S IH0 Z\nPHILIPS(2)  F IH1 - L IH0 P S\nPHILIPSON  F IH1 - L AH0 P - S AH0 N\nPHILISTIA  F IH0 - L IH1 - S T IY0 - AH0\nPHILISTINE  F IH1 - L AH0 - S T IY2 N\nPHILISTINES  F IH1 - L AH0 - S T IY2 N Z\nPHILLABAUM  F IH1 - L AH0 - B AW2 M\nPHILLEY  F IH1 - L IY0\nPHILLIE  F IH1 - L IY0\nPHILLIES  F IH1 - L IY0 Z\nPHILLIP  F IH1 - L IH0 P\nPHILLIP'S  F IH1 - L IH0 P S\nPHILLIPE  F IH0 - L IY1 P\nPHILLIPINE  F IH1 - L AH0 - P IY2 N\nPHILLIPINE(2)  F IH2 - L AH0 - P IY1 N\nPHILLIPINES  F IH2 - L AH0 - P IY1 N Z\nPHILLIPP  F IH1 - L IH0 P\nPHILLIPPE  F IH1 - L AH0 P\nPHILLIPPI  F AH0 - L IY1 - P IY0\nPHILLIPPS  F IH1 - L IH0 P S\nPHILLIPS  F IH1 - L IH0 P S\nPHILLIPS'  F IH1 - L IH0 P S\nPHILLIPS'S  F IH1 - L IH0 P - S IH0 Z\nPHILLIPSON  F IH1 - L AH0 P - S AH0 N\nPHILLIS  F IH1 - L IH0 S\nPHILLY  F IH1 - L IY0\nPHILO  F IY1 - L OW0\nPHILODENDRON  F IH2 - L AH0 - D EH1 N - D R AH0 N\nPHILOMELA  F IH2 - L AH0 - M IY1 - L AH0\nPHILOMENA  F IH0 - L AH0 - M IY1 - N AH0\nPHILON  F IH1 - L AH0 N\nPHILOSOPHER  F AH0 - L AA1 - S AH0 - F ER0\nPHILOSOPHERS  F AH0 - L AA1 - S AH0 - F ER0 Z\nPHILOSOPHIC  F IH2 - L AH0 - S AA1 - F IH0 K\nPHILOSOPHICAL  F IH2 - L AH0 - S AA1 - F IH0 - K AH0 L\nPHILOSOPHICALLY  F IH2 - L AH0 - S AA1 - F IH0 - K AH0 - L IY0\nPHILOSOPHICALLY(2)  F IH2 - L AH0 - S AA1 - F IH0 K - L IY0\nPHILOSOPHIES  F AH0 - L AA1 - S AH0 - F IY0 Z\nPHILOSOPHY  F AH0 - L AA1 - S AH0 - F IY0\nPHILP  F IH1 L P\nPHILPOT  F IH1 L - P AH0 T\nPHILPOTT  F IH1 L - P AH0 T\nPHILSON  F IH1 L - S AH0 N\nPHILYAW  F IH1 - L Y AA2\nPHINEAS  F IH1 - N IY0 - AH0 S\nPHINNEY  F IH1 - N IY0\nPHIPPEN  F IH1 - P AH0 N\nPHIPPS  F IH1 P S\nPHLCORP  P IY1 - EY1 - CH EH1 L - K AO1 R P\nPHLEBITIS  F L AH0 - B AY1 - T IH0 S\nPHLOGOPITE  F L AA1 - G AH0 - P AY2 T\nPHNOM  F N AA1 M\nPHNOM(2)  P AH0 - N AA1 M\nPHOBIA  F OW1 - B IY0 - AH0\nPHOBIAS  F OW1 - B IY0 - AH0 Z\nPHOBIC  F OW1 - B IH0 K\nPHOBOS  F OW1 - B OW0 S\nPHOEBE  F IY1 - B IY0\nPHOEBUS  F IY1 - B AH0 S\nPHOENICIA  F AH0 - N IY1 - SH AH0\nPHOENICIAN  F AH0 - N IY1 - SH AH0 N\nPHOENICIANS  F AH0 - N IY1 - SH AH0 N Z\nPHOENIX  F IY1 - N IH0 K S\nPHOENIX'S  F IY1 - N IH0 K - S IH0 Z\nPHONE  F OW1 N\nPHONE'S  F OW1 N Z\nPHONED  F OW1 N D\nPHONEMATE  F OW1 N - M EY2 T\nPHONES  F OW1 N Z\nPHONETIC  F AH0 - N EH1 - T IH0 K\nPHONETICALLY  F AH0 - N EH1 - T IH0 K - L IY0\nPHONETICS  F AH0 - N EH1 - T IH0 K S\nPHONEY  F OW1 - N IY0\nPHONIC  F AA1 - N IH0 K\nPHONICS  F AA1 - N IH0 K S\nPHONING  F OW1 - N IH0 NG\nPHONOGRAPH  F OW1 - N AH0 - G R AE2 F\nPHONOLOGICAL  F OW2 - N AH0 - L AA1 - JH IH0 - K AH0 L\nPHONY  F OW1 - N IY0\nPHOSPHATE  F AA1 S - F EY0 T\nPHOSPHATES  F AA1 S - F EY0 T S\nPHOSPHATIC  F AA0 S - F AE1 - T IH0 K\nPHOSPHOR  F AA1 S - F AO2 R\nPHOSPHORESCENCE  F AA2 S - F ER0 - EH1 - S AH0 N S\nPHOSPHORIC  F AA1 S - F ER0 - IH0 K\nPHOSPHORITE  F AA1 S - F ER0 - AY2 T\nPHOSPHORITES  F AA1 S - F ER0 - AY2 T S\nPHOSPHOROUS  F AA1 S - F ER0 - AH0 S\nPHOSPHORS  F AA1 S - F AO2 R Z\nPHOSPHORUS  F AA1 S - F ER0 - AH0 S\nPHOTO  F OW1 - T OW2\nPHOTO'S  F OW1 - T OW2 Z\nPHOTOCALL  F OW1 - T OW2 - K AA0 L\nPHOTOCHEMICAL  F OW2 - T OW0 - K EH1 - M AH0 - K AH0 L\nPHOTOCHEMICAL(2)  F OW2 - T OW0 - K EH1 - M IH0 - K AH0 L\nPHOTOCONDUCTIVE  F OW2 - T OW0 - K AH0 N - D AH1 K - T IH0 V\nPHOTOCOPIED  F OW1 - T OW0 - K AA2 - P IY0 D\nPHOTOCOPIER  F OW1 - T OW0 - K AA2 - P IY0 - ER0\nPHOTOCOPIERS  F OW1 - T OW0 - K AA2 - P IY0 - ER0 Z\nPHOTOCOPIES  F OW1 - T OW0 - K AA2 - P IY0 Z\nPHOTOCOPY  F OW1 - T OW0 - K AA2 - P IY0\nPHOTOCOPYING  F OW1 - T OW0 - K AA2 - P IY0 - IH0 NG\nPHOTODYNAMIC  F OW2 - T OW0 - D AY0 - N AE1 - M IH0 K\nPHOTOELECTRIC  F OW2 - T OW0 - IH0 - L EH1 K - T R IH0 K\nPHOTOFINISHER  F OW2 - T OW0 - F IH1 - N IH2 - SH ER0\nPHOTOFINISHERS  F OW2 - T OW0 - F IH1 - N IH2 - SH ER0 Z\nPHOTOFINISHING  F OW1 - T OW0 - F IH1 - N IH0 - SH IH0 NG\nPHOTOGENIC  F OW2 - T AH0 - JH EH1 - N IH0 K\nPHOTOGRAPH  F OW1 - T AH0 - G R AE2 F\nPHOTOGRAPHED  F OW1 - T AH0 - G R AE2 F T\nPHOTOGRAPHER  F AH0 - T AA1 - G R AH0 - F ER0\nPHOTOGRAPHER'S  F AH0 - T AA1 - G R AH0 - F ER0 Z\nPHOTOGRAPHERS  F AH0 - T AA1 - G R AH0 - F ER0 Z\nPHOTOGRAPHIC  F OW2 - T AH0 - G R AE1 - F IH0 K\nPHOTOGRAPHING  F OW1 - T AH0 - G R AE2 - F IH0 NG\nPHOTOGRAPHS  F OW1 - T AH0 - G R AE2 F S\nPHOTOGRAPHY  F AH0 - T AA1 - G R AH0 - F IY0\nPHOTOJOURNALIST  F OW2 - T OW0 - JH ER1 - N AH0 - L AH0 S T\nPHOTOMETER  F AH0 - T AA1 - M IH0 - T ER0\nPHOTON  F OW1 - T AA2 N\nPHOTONS  F OW1 - T AA2 N Z\nPHOTOPHORESIS  F OW2 - T OW0 - F ER0 - IY1 - S IH0 S\nPHOTOREFRACTIVE  F OW2 - T OW0 - R IH0 - F R AE1 K - T IH0 V\nPHOTOS  F OW1 - T OW2 Z\nPHOTOSYNTHESIS  F OW2 - T OW0 - S IH1 N - TH AH0 - S IH0 S\nPHOTOTAXIS  F OW2 - T AH0 - T AE1 K - S IH0 S\nPHOTOTRON  F OW1 - T AH0 - T R AA0 N\nPHOTOVOLTAIC  F OW2 - T AH0 - V OW2 L - T EY1 - IH0 K\nPHOTOVOLTAICS  F OW1 - T OW0 - V OW0 L - T EY1 - IH0 K S\nPHOTRONIC  F OW2 - T R AA1 - N IH0 K\nPHOTRONICS  F OW2 - T R AA1 - N IH0 K S\nPHRASE  F R EY1 Z\nPHRASED  F R EY1 Z D\nPHRASEOLOGY  F R EY2 - Z IY0 - AO1 - L AO0 - JH IY0\nPHRASES  F R EY1 - Z AH0 Z\nPHRASES(2)  F R EY1 - Z IH0 Z\nPHRASING  F R EY1 - Z IH0 NG\nPHRYGIAN  F R IH1 - JH IY0 - AH0 N\nPHU  F UW1\nPHUA  F Y UW1 - AH0\nPHUNG  F AH1 NG\nPHUONG  F UW0 - AO1 NG\nPHUT  F AH1 T\nPHY  F AY1\nPHYLA  F AY1 - L AH0\nPHYLE  F AY1 L\nPHYLIS  F AY1 - L AH0 S\nPHYLLIS  F IH1 - L IH0 S\nPHYLLYS  F IH1 - L IY0 Z\nPHYLOGENY  F AY0 - L AA1 - JH AH0 - N IY0\nPHYLUM  F AY1 - L AH0 M\nPHYSICAL  F IH1 - Z IH0 - K AH0 L\nPHYSICALLY  F IH1 - Z IH0 - K AH0 - L IY0\nPHYSICALLY(2)  F IH1 - Z IH0 K - L IY0\nPHYSICALS  F IH1 - Z IH0 - K AH0 L Z\nPHYSICIAN  F AH0 - Z IH1 - SH AH0 N\nPHYSICIAN'S  F AH0 - Z IH1 - SH AH0 N Z\nPHYSICIANS  F AH0 - Z IH1 - SH AH0 N Z\nPHYSICIANS'  F IH0 - Z IH1 - SH AH0 N Z\nPHYSICIANS(2)  F IH0 - Z IH1 - SH AH0 N Z\nPHYSICIST  F IH1 - Z IH0 - S IH0 S T\nPHYSICISTS  F IH1 - Z IH0 - S IH0 S T S\nPHYSICISTS(2)  F IH1 - Z IH0 - S IH0 S S\nPHYSICISTS(3)  F IH1 - Z IH0 - S IH0 S\nPHYSICS  F IH1 - Z IH0 K S\nPHYSICS'  F IH1 - S IH0 K S\nPHYSIO  F IH1 - Z IY0 - OW0\nPHYSIOLOGICAL  F IH2 - Z IY0 - AH0 - L AA1 - JH IH0 - K AH0 L\nPHYSIOLOGICALLY  F IH2 - Z IY0 - AH0 - L AA1 - JH IH0 K - L IY0\nPHYSIOLOGIST  F IH2 - Z IY0 - AA1 - L AH0 - JH IH0 S T\nPHYSIOLOGY  F IH2 - Z IY0 - AA1 - L AH0 - JH IY0\nPHYSIQUE  F AH0 - Z IY1 K\nPHYTOGEOGRAPHY  F AY0 - T OW0 - JH IY0 - AA1 - G R AH0 - F IY0\nPHYTOPLANKTON  F AY2 - T OW0 - P L AE1 NG - T AH0 N\nPI  P AY1\nPI-MESON  P AY1 - M EY1 - Z AA2 N\nPIA  P IY1 - AH0\nPIACENTE  P IY0 - AA0 - CH EH1 N - T IY0\nPIACENTINI  P IY0 - AA0 - CH EH0 N - T IY1 - N IY0\nPIAGET  P IY2 - AH0 - Z EY1\nPIAGET(2)  P IY2 - AH0 - ZH EY1\nPIANA  P IY0 - AE1 - N AH0\nPIANIST  P IY0 - AE1 - N AH0 S T\nPIANIST'S  P IY0 - AE1 - N AH0 S T S\nPIANIST'S(2)  P IY1 - AH0 - N IH0 S T S\nPIANIST(2)  P IY0 - AA1 - N AH0 S T\nPIANIST(3)  P IY1 - AH0 - N IH0 S T\nPIANISTS  P IY0 - AE1 - N AH0 S T S\nPIANISTS(2)  P IY0 - AE1 - N AH0 S S\nPIANISTS(3)  P IY1 - AH0 - N IH0 S T S\nPIANISTS(4)  P IY1 - AH0 - N IH0 S S\nPIANISTS(5)  P IY0 - AE1 - N AH0 S\nPIANISTS(6)  P IY1 - AH0 - N IH0 S\nPIANKA  P IY0 - AA1 NG - K AH0\nPIANO  P IY0 - AE1 - N OW0\nPIANO'S  P IY0 - AE1 - N OW0 Z\nPIANO'S(2)  P IY0 - AE1 - N AH0 Z\nPIANO(2)  P IY0 - AE1 - N AH0\nPIANOS  P IY0 - AE1 - N OW0 Z\nPIANOS(2)  P IY0 - AE1 - N AH0 Z\nPIASCIK  P IY1 - AH0 S - CH IH0 K\nPIASECKI  P IY0 - AH0 - S EH1 T S - K IY0\nPIASIO  P IY0 - AE1 - S IY0 - OW0\nPIATEK  P IY0 - AA1 - T EH0 K\nPIATKOWSKI  P IY0 - AH0 T - K AO1 F S - K IY0\nPIATT  P AY1 - AH0 T\nPIAZZA  P IY0 - AE1 - Z AH0\nPIAZZOLLA  P IY2 - AH0 - Z AA1 - L AH0\nPIC  P IH1 K\nPIC-A-PASTA  P IH1 - K AH0 - P AA1 - S T AH0\nPICA  P AY1 - K AH0\nPICANTE  P IY0 - K AA1 N - T EY0\nPICARD  P IH0 - K AA1 R D\nPICARIELLO  P IY0 - K AA0 - R IY0 - EH1 - L OW0\nPICARO  P IY1 - K AA0 - R OW2\nPICAS  P AY1 - K AH0 Z\nPICASSO  P IH0 - K AA1 - S OW0\nPICASSO'S  P IH0 - K AA1 - S OW0 Z\nPICASSOS  P IH0 - K AA1 - S OW0 S\nPICAYUNE  P IH2 - K IY0 - Y UW1 N\nPICAZO  P IY0 - K AA1 - Z OW0\nPICCADILLY  P IH1 - K AH0 - D IH2 - L IY0\nPICCHI  P IH1 - K IY0\nPICCIANO  P IY2 - CH IY0 - AA1 - N OW0\nPICCININI  P IY0 - CH IY0 - N IY1 - N IY0\nPICCIONE  P IY0 K - CH OW1 - N IY0\nPICCIRILLI  P IY0 - CH IH0 - R IY1 - L IY0\nPICCIRILLO  P IY0 - CH IH0 - R IH1 - L OW0\nPICCO  P IH1 - K OW0\nPICCOLA  P IY0 - K OW1 - L AH0\nPICCOLI  P IY0 - K OW1 - L IY0\nPICCOLO  P IH1 - K AH0 - L OW2\nPICCONE  P IY0 - K OW1 - N IY0\nPICHA  P IH1 - CH AH0\nPICHE  P IH1 CH\nPICHENY  P AH0 - CH EY1 - N IY0\nPICHER  P IH1 - CH ER0\nPICHETTE  P AH0 - SH EH1 T\nPICHLER  P IH1 - K AH0 - L ER0\nPICHLER(2)  P IH1 K - L ER0\nPICHON  P IH1 - CH AH0 N\nPICHT  P IH1 K T\nPICINICH  P IH1 - S IH0 - N IH0 CH\nPICK  P IH1 K\nPICKANDS  P IH1 - K AH0 N D Z\nPICKAR  P IH0 - K AA1 R\nPICKARD  P IH0 - K AA1 R D\nPICKART  P IH1 - K AA2 R T\nPICKED  P IH1 K T\nPICKEL  P IH1 - K AH0 L\nPICKELL  P IH1 - K AH0 L\nPICKELSIMER  P IH1 - K IH0 L - S IH0 - M ER0\nPICKEN  P IH1 - K AH0 N\nPICKENS  P IH1 - K AH0 N Z\nPICKENS'  P IH1 - K AH0 N Z\nPICKENS'S  P IH1 - K AH0 N - Z IH0 Z\nPICKER  P IH1 - K ER0\nPICKERAL  P IH1 - K ER0 - AH0 L\nPICKEREL  P IH1 - K ER0 - AH0 L\nPICKERELL  P IH1 - K ER0 - AH0 L\nPICKERILL  P IH1 - K ER0 - IH2 L\nPICKERING  P IH1 - K ER0 - IH0 NG\nPICKERS  P IH1 - K ER0 Z\nPICKERT  P IH1 - K ER0 T\nPICKET  P IH1 - K AH0 T\nPICKET(2)  P IH1 - K IH0 T\nPICKETED  P IH1 - K AH0 - T IH0 D\nPICKETER  P IH1 - K AH0 - T ER0\nPICKETERS  P IH1 - K AH0 - T ER0 Z\nPICKETING  P IH1 - K AH0 - T IH0 NG\nPICKETS  P IH1 - K AH0 T S\nPICKETT  P IH1 - K IH0 T\nPICKETT'S  P IH1 - K IH0 T S\nPICKFORD  P IH1 K - F ER0 D\nPICKIER  P IH1 - K IY0 - ER0\nPICKING  P IH1 - K IH0 NG\nPICKINGS  P IH1 - K IH0 NG Z\nPICKINS  P IH1 - K IH0 N Z\nPICKLE  P IH1 - K AH0 L\nPICKLED  P IH1 - K AH0 L D\nPICKLER  P IH1 - K AH0 - L ER0\nPICKLER(2)  P IH1 K - L ER0\nPICKLES  P IH1 - K AH0 L Z\nPICKLESIMER  P IH1 - K AH0 L - S IH0 - M ER0\nPICKLING  P IH1 - K L IH0 NG\nPICKNEY  P IH1 K - N IY0\nPICKPOCKET  P IH1 K - P AA2 - K AH0 T\nPICKPOCKETS  P IH1 K - P AA2 - K AH0 T S\nPICKREL  P IH1 - K R AH0 L\nPICKRELL  P IH1 - K R AH0 L\nPICKREN  P IH1 - K ER0 - AH0 N\nPICKRON  P IH1 - K R AH0 N\nPICKS  P IH1 K S\nPICKUP  P IH1 - K AH2 P\nPICKUPS  P IH1 - K AH2 P S\nPICKUS  P IH1 - K AH0 S\nPICKWICK  P IH1 - K W IH2 K\nPICKWORTH  P IH1 - K W ER2 TH\nPICKY  P IH1 - K IY0\nPICNIC  P IH1 K - N IH2 K\nPICNICS  P IH1 K - N IH2 K S\nPICO  P IY1 - K OW0\nPICON  P IH1 - K AH0 N\nPICONE  P IH0 - K OW1 N\nPICOP  P IH1 - K AA2 P\nPICOTTE  P IH0 - K AO1 T\nPICOU  P IY1 - K UW0\nPICOULT  P IH0 - K OW1 L T\nPICOWER  P IH1 - K AW2 R\nPICTET  P IH1 K - T IH0 T\nPICTON  P IH1 K - T AH0 N\nPICTORIAL  P IH0 K - T AO1 - R IY0 - AH0 L\nPICTS  P IH1 K T S\nPICTURE  P IH1 K - CH ER0\nPICTURE'S  P IH1 K - CH ER0 Z\nPICTURED  P IH1 K - CH ER0 D\nPICTURES  P IH1 K - CH ER0 Z\nPICTURES'  P IH1 K - CH ER0 Z\nPICTURESQUE  P IH1 K - CH ER0 - AH0 S K\nPICTURETEL  P IH1 K - CH ER2 - T EH2 L\nPICTURING  P IH1 K - CH ER0 - IH0 NG\nPIDCOCK  P IH1 D - K AH0 K\nPIDDLE  P IH1 - D AH0 L\nPIDDLES  P IH1 - D AH0 L Z\nPIDDLING  P IH1 - D AH0 L - IH0 NG\nPIDDLING(2)  P IH1 D - L IH0 NG\nPIDDOCK  P IH1 - D AH0 K\nPIDGEON  P IH1 D - JH IH0 N\nPIE  P AY1\nPIEBALD  P AY1 - B AO2 L D\nPIECE  P IY1 S\nPIECED  P IY1 S T\nPIECEMEAL  P IY1 S - M IY2 L\nPIECES  P IY1 - S AH0 Z\nPIECES(2)  P IY1 - S IH0 Z\nPIECEWORK  P IY1 S - W ER2 K\nPIECH  P IY1 CH\nPIECH'S  P IY1 - CH IH0 Z\nPIECHOCKI  P IY0 - HH OW1 T S - K IY0\nPIECHOTA  P IY0 - HH OW1 - T AH0\nPIECHOWSKI  P IY0 - HH AO1 F S - K IY0\nPIECING  P IY1 - S IH0 NG\nPIECUCH  P IY1 - K AH0 K\nPIECZYNSKI  P IY0 - CH IH1 N - S K IY0\nPIED  P AY1 D\nPIEDBOEUF  P IY1 D - B AH2 F\nPIEDMONT  P IY1 D - M AA2 N T\nPIEDMONT'S  P IY1 D - M AA2 N T S\nPIEDRA  P IY1 - D R AH0\nPIEHL  P IY1 L\nPIEKARSKI  P IY0 - K AA1 R S - K IY0\nPIEL  P IY1 L\nPIELA  P IY1 - L AH0\nPIENTA  P IY1 N - T AH0\nPIEPER  P IY1 - P ER0\nPIEPGRAS  P IY1 P - G R AE2 S\nPIEPHO  P IY1 - F OW0\nPIER  P IH1 R\nPIERACCINI  P IH2 - R AH0 - CH IY1 - N IY0\nPIERATT  P IY1 - R AH0 T\nPIERCE  P IH1 R S\nPIERCE'S  P IH1 R - S IH0 Z\nPIERCEALL  P IH0 R - S IY1 L\nPIERCED  P IH1 R S T\nPIERCEY  P IH0 R - S IY1\nPIERCING  P IH1 R - S IH0 NG\nPIERCY  P IH1 R - K IY0\nPIERETTE  P IH0 - R EH1 T\nPIERI  P IY1 - R IY0\nPIERIE  P IY0 - EH1 - R IY0\nPIERIE'S  P IY0 - EH1 - R IY0 Z\nPIERINI  P IH0 - R IY1 - N IY0\nPIERMAN  P IH1 R - M AH0 N\nPIERO  P IY1 - R OW0\nPIERONI  P IH0 - R OW1 - N IY0\nPIEROTTI  P IH0 - R OW1 - T IY0\nPIERPOINT  P IH0 R - P OY1 N T\nPIERPONT  P IH1 R - P AA2 N T\nPIERRE  P IY0 - EH1 R\nPIERRE'S  P IY0 - EH1 R Z\nPIERRELOUIS  P IH1 - R IH0 L - W IY0 Z\nPIERRELOUIS(2)  P Y EH1 R - L W IY0 Z\nPIERREPONT  P IH0 - R EY1 - P OW0 N T\nPIERREPONT(2)  P Y EH1 R - P OW0 N T\nPIERRO  P IH1 - R OW0\nPIERRON  P IH0 - R AO1 N\nPIERS  P IH1 R Z\nPIERSALL  P IH1 R - S AH0 L\nPIERSOL  P IH1 R - S AO0 L\nPIERSON  P IH1 R - S AH0 N\nPIES  P AY1 Z\nPIES'S  P AY1 - Z IH0 Z\nPIET  P AY1 - IH0 T\nPIET(2)  P Y EH1 T\nPIET(3)  P IY1 T\nPIETER  P IY1 - T ER0\nPIETERMARITZBURG  P IY2 - T ER0 - M EH1 - R IH0 T S - B ER0 G\nPIETERS  P IY1 - T ER0 Z\nPIETIES  P AY1 - AH0 - T IY0 Z\nPIETILA  P IY0 - T IY1 - L AH0\nPIETISM  P IY1 - T IH0 - Z AH0 M\nPIETRANGELO  P IY0 - T R AA0 NG - G EH1 - L OW0\nPIETRAS  P IY1 - T R AH0 Z\nPIETRO  P IY0 - EH1 - T R OW0\nPIETROWSKI  P IY0 T - R AO1 F S - K IY0\nPIETRUSKI  P IY2 - EH0 - T R AH1 S - K IY0\nPIETRUSZKA  P IY0 - T R AH1 SH - K AH0\nPIETRZAK  P IY1 - T ER0 - Z AE0 K\nPIETRZYK  P IY1 - T ER0 - Z IH0 K\nPIETSCH  P IY1 CH\nPIETTE  P IY1 T\nPIETY  P AY1 - AH0 - T IY0\nPIETZ  P IY1 T S\nPIFER  P AY1 - F ER0\nPIG  P IH1 G\nPIG'S  P IH1 G Z\nPIGEON  P IH1 - JH AH0 N\nPIGEON'S  P IH1 - JH AH0 N Z\nPIGEON(2)  P IH1 - JH IH0 N\nPIGEONHOLE  P IH1 - JH AH0 N - HH OW2 L\nPIGEONHOLED  P IH1 - JH AH0 N - HH OW2 L D\nPIGEONS  P IH1 - JH AH0 N Z\nPIGFORD  P IH1 G - F ER0 D\nPIGG  P IH1 G\nPIGGEE  P IH1 - G IY1\nPIGGLY  P IH1 G - L IY0\nPIGGOTT  P IH1 - G AH0 T\nPIGGY  P IH1 - G IY0\nPIGGYBACK  P IH1 - G IY0 - B AE2 K\nPIGGYBACKED  P IH1 - G IY0 - B AE2 K T\nPIGGYBACKING  P IH1 - G IY0 - B AE2 - K IH0 NG\nPIGLET  P IH1 G - L IH0 T\nPIGLETS  P IH1 G - L IH0 T S\nPIGMAN  P IH1 G - M AH0 N\nPIGMENT  P IH1 G - M AH0 N T\nPIGMENTATION  P IH2 G - M AH0 N - T EY1 - SH AH0 N\nPIGMENTS  P IH1 G - M AH0 N T S\nPIGMIED  P IH1 G - M IY0 D\nPIGMY  P IH1 G - M IY0\nPIGNATARO  P IY0 G - N AA0 - T AA1 - R OW0\nPIGNATELLI  P IY0 G - N AA0 - T EH1 - L IY0\nPIGNATO  P IY0 G - N AA1 - T OW0\nPIGNONE  P IY0 G - N OW1 - N IY0\nPIGOTT  P IH1 - G AH0 T\nPIGS  P IH1 G Z\nPIGSKIN  P IH1 G - S K IH2 N\nPIGUE  P IY1 G\nPIH  P IH1\nPIH(2)  P IY1 - AY1 - EY1 CH\nPIHL  P IH1 L\nPIK  P IH1 K\nPIKE  P AY1 K\nPIKER  P AY1 - K ER0\nPIKES  P AY1 K S\nPIKUL  P IH1 - K AH0 L\nPIKULA  P IH0 - K UW1 - L AH0\nPIKUS  P AY1 - K AH0 S\nPIL  P IH1 L\nPILAND  P IH1 - L AH0 N D\nPILANT  P IY1 - L AH0 N T\nPILAR  P AY1 - L ER0\nPILARSKI  P IH0 - L AA1 R S - K IY0\nPILASTER  P AH0 - L AE1 - S T ER0\nPILASTERS  P AH0 - L AE1 - S T ER0 Z\nPILAT  P IY1 - L AA0 T\nPILATO  P IY0 - L AA1 - T OW0\nPILATUS  P IY0 - L EY1 - T AH0 S\nPILCH  P IH1 L CH\nPILCHER  P IH1 L - CH ER0\nPILE  P AY1 L\nPILECKI  P IH0 - L EH1 - K IY0\nPILED  P AY1 L D\nPILEGGI  P IH0 - L EH1 - JH IY0\nPILES  P AY1 L Z\nPILEUP  P AY1 - L AH2 P\nPILEVSKY  P IH0 - L EH1 V - S K IY0\nPILFERAGE  P IH1 L - F ER0 - IH0 JH\nPILFERING  P IH1 L - F ER0 - IH0 NG\nPILGER  P IH1 L - G ER0\nPILGRAM  P IH1 L - G R AH0 M\nPILGREEN  P IH0 L - G R IY1 N\nPILGRIM  P IH1 L - G R AH0 M\nPILGRIM'S  P IH1 L - G R AH0 M Z\nPILGRIM(2)  P IH1 L - G R IH0 M\nPILGRIMAGE  P IH1 L - G R AH0 - M AH0 JH\nPILGRIMAGE(2)  P IH1 L - G R AH0 - M IH0 JH\nPILGRIMAGES  P IH1 L - G R AH0 - M IH0 - JH IH0 Z\nPILGRIMS  P IH1 L - G R AH0 M Z\nPILING  P AY1 - L IH0 NG\nPILINGS  P AY1 - L IH0 NG Z\nPILKENTON  P IH0 L - K EH1 N - T AH0 N\nPILKERTON  P IH0 L - K ER1 - T AH0 N\nPILKINGTON  P IH1 L - K IH0 NG - T AH0 N\nPILKINTON  P IH1 L - K IH0 N - T AH0 N\nPILL  P IH1 L\nPILL'S  P IH1 L Z\nPILLA  P IH1 - L AH0\nPILLAGE  P IH1 - L IH0 JH\nPILLAGED  P IH1 - L IH0 JH D\nPILLAGER  P IH1 - L IH0 - JH ER0\nPILLAGER'S  P IH1 - L IH0 - JH ER0 Z\nPILLAGERS  P IH1 - L IH0 - JH ER0 Z\nPILLAGES  P IH1 - L IH0 - JH IH0 Z\nPILLAGING  P IH1 - L IH0 - JH IH0 NG\nPILLAR  P IH1 - L ER0\nPILLARD  P IH1 - L ER0 D\nPILLARED  P IH1 - L ER0 D\nPILLARS  P IH1 - L ER0 Z\nPILLE  P IH1 L\nPILLER  P IH1 - L ER0\nPILLEY  P IH1 - L IY0\nPILLING  P IH1 - L IH0 NG\nPILLION  P IH1 L - Y AH0 N\nPILLORIED  P IH1 - L ER0 - IY0 D\nPILLORY  P IH1 - L ER0 - IY0\nPILLOW  P IH1 - L OW0\nPILLOWS  P IH1 - L OW0 Z\nPILLOWTEX  P IH1 - L OW0 - T EH2 K S\nPILLS  P IH1 L Z\nPILLSBURY  P IH1 L Z - B EH2 - R IY0\nPILLSBURY'S  P IH1 L Z - B EH2 - R IY0 Z\nPILNAK  P IH1 L - N AE0 K\nPILON  P IY0 - L AO1 N\nPILOT  P AY1 - L AH0 T\nPILOT'S  P AY1 - L AH0 T S\nPILOTED  P AY1 - L AH0 - T IH0 D\nPILOTING  P AY1 - L AH0 - T IH0 NG\nPILOTLESS  P AY1 - L AH0 T - L AH0 S\nPILOTS  P AY1 - L AH0 T S\nPILOTS'  P AY1 - L AH0 T S\nPILOTTE  P IH0 - L AO1 T\nPILSON  P IH1 L - S AH0 N\nPILTDOWN  P IH1 L T - D AW2 N\nPILTZ  P IH1 L T S\nPILZ  P IH1 L Z\nPIMA  P IY1 - M AH0\nPIMCO  P IH1 M - K OW0\nPIMENTAL  P IH0 - M EH1 N - T AH0 L\nPIMENTEL  P IH1 - M IH0 N - T AH0 L\nPIMM  P IH1 M\nPIMM'S  P IH1 M Z\nPIMP  P IH1 M P\nPIMPING  P IH1 M - P IH0 NG\nPIMPLAPURE  P IH2 M - P L AH0 - P Y UH1 R\nPIMPLE  P IH1 M - P AH0 L\nPIMPLES  P IH1 M - P AH0 L Z\nPIMPS  P IH1 M P S\nPIN  P IH1 N\nPINA  P IY1 - N AH0\nPINARD  P IH1 - N ER0 D\nPINATUBO  P IH0 - N AH0 - T UW1 - B OW0\nPINAULT  P IH2 - N AO1 L T\nPINBALL  P IH1 N - B AO2 L\nPINCAVAGE  P IH1 NG - K AH0 - V IH0 JH\nPINCERLIKE  P IH1 N - S ER0 - L AY2 K\nPINCERS  P IH1 N - S ER0 Z\nPINCH  P IH1 N CH\nPINCHED  P IH1 N CH T\nPINCHER  P IH1 N - CH ER0\nPINCHERS  P IH1 N - CH ER0 Z\nPINCHING  P IH1 N - CH IH0 NG\nPINCKARD  P IH1 NG - K ER0 D\nPINCKNEY  P IH1 NG K - N IY0\nPINCUS  P IH1 NG - K AH0 S\nPINDARIC  P IH0 N - D AE1 - R IH0 K\nPINDELL  P IH1 N - D AH0 L\nPINDER  P AY1 N - D ER0\nPINDLING  P IH1 N - D L IH0 NG\nPINE  P AY1 N\nPINEAL  P AY2 - N IY1 - AH0 L\nPINEAPPLE  P AY1 N - AE2 - P AH0 L\nPINEAPPLES  P AY1 N - AE2 - P AH0 L Z\nPINEAU  P IH0 - N OW1\nPINEDA  P IY0 - N EH1 - D AH0\nPINEDO  P IY0 - N EY1 - D OW0\nPINEGAR  P IH1 - N IH0 - G ER0\nPINEIRO  P IY0 - N EH1 - R OW0\nPINELLAS  P IH0 - N EH1 - L AH0 S\nPINELLI  P IH0 N - EH1 - L IY0\nPINEO  P IH1 - N IY0 - OW0\nPINER  P AY1 - N ER0\nPINERO  P IH0 - N EH1 - R OW0\nPINES  P AY1 N Z\nPINETTA  P AH0 - N EH1 - T AH0\nPINETTA'S  P AH0 - N EH1 - T AH0 Z\nPINETTE  P IH0 - N EH1 T\nPING  P IH1 NG\nPINGEL  P IH1 NG - G AH0 L\nPINGITORE  P IH0 NG - G IY0 - T AO1 - R IY0\nPINGLETON  P IH1 NG - G AH0 L - T AA0 N\nPINGLEY  P IH1 NG - G L IY0\nPINGPONG  P IH1 NG - P AO0 NG\nPINGREE  P IH0 NG - G R IY1\nPINHEIRO  P IY0 N - HH EH1 - R OW0\nPINHO  P IH1 N - HH OW0\nPINHOLE  P IH1 N - HH OW2 L\nPINHOLES  P IH1 N - HH OW2 L Z\nPINI  P IY1 - N IY0\nPINING  P AY1 - N IH0 NG\nPINION  P IH1 - N Y AH0 N\nPINK  P IH1 NG K\nPINKARD  P IH1 NG - K ER0 D\nPINKELMAN  P IH1 NG - K AH0 L - M AH0 N\nPINKER  P IH1 NG - K ER0\nPINKERMAN  P IH1 NG - K ER0 - M AH0 N\nPINKERTON  P IH1 NG - K ER0 - T AH0 N\nPINKERTON'S  P IH1 NG - K ER0 - T AH0 N Z\nPINKEST  P IH1 NG - K IH0 S T\nPINKETT  P IH1 NG - K IH0 T\nPINKHAM  P IH1 NG K - HH AH0 M\nPINKIE  P IH1 NG - K IY0\nPINKISH  P IH1 NG - K IH0 SH\nPINKLEY  P IH1 NG - K L IY0\nPINKNEY  P IH1 NG K - N IY0\nPINKOS  P IH1 NG - K OW0 Z\nPINKOWSKI  P IH0 NG - K AO1 F S - K IY0\nPINKS  P IH1 NG K S\nPINKSTAFF  P IH1 NG K - S T AE2 F\nPINKSTON  P IH1 NG K - S T AH0 N\nPINKUS  P IH1 NG - K AH0 S\nPINKWATER  P IH1 NG - K W AO2 - T ER0\nPINKWATER'S  P IH1 NG - K W AO2 - T ER0 Z\nPINKY  P IH1 NG - K IY0\nPINN  P IH1 N\nPINNACLE  P IH1 - N AH0 - K AH0 L\nPINNACLE'S  P IH1 - N IH0 - K AH0 L Z\nPINNED  P IH1 N D\nPINNELL  P IH1 - N AH0 L\nPINNEO  P IH1 - N IY0 - OW0\nPINNER  P IH1 - N ER0\nPINNEY  P IH1 - N IY0\nPINNICK  P IH1 - N IH0 K\nPINNING  P IH1 - N IH0 NG\nPINNIX  P IH1 - N IH0 K S\nPINNOCK  P IH1 - N AH0 K\nPINNOW  P IH1 - N OW0\nPINO  P IY1 - N OW0\nPINO'S  P IY1 - N OW0 Z\nPINOCCHIO  P IH0 - N OW1 - K IY0 - OW0\nPINOCHET  P IH2 - N AH0 - SH EY1\nPINOCHET'S  P IH2 - N AH0 - SH EY1 Z\nPINOCHET'S(2)  P IY2 - N AO0 - CH EH1 T S\nPINOCHET'S(3)  P IY2 - N OW0 - SH EY1 Z\nPINOCHET(2)  P IY2 - N AO0 - CH EH1 T\nPINOCHET(3)  P IY2 - N OW0 - SH EY1\nPINOLA  P IH0 - N OW1 - L AH0\nPINOT  P IH1 - N AH0 T\nPINPOINT  P IH1 N - P OY2 N T\nPINPOINTED  P IH1 N - P OY2 N - T IH0 D\nPINPOINTING  P IH1 N - P OY2 N - T IH0 NG\nPINPOINTS  P IH1 N - P OY2 N T S\nPINPRICK  P IH1 N - P R IH0 K\nPINQUATER  P IH1 N - K W AA2 - T ER0\nPINS  P IH1 N Z\nPINSKER  P IH1 N - S K ER0\nPINSKY  P IH1 N - S K IY0\nPINSON  P IH1 N - S AH0 N\nPINSONEAULT  P IH1 N - S AH0 - N AO2 L T\nPINSONEAULT(2)  P IH2 N - S AH0 - N OW1\nPINSTRIPE  P IH1 N - S T R AY2 P\nPINSTRIPED  P IH1 N - S T R AY2 P T\nPINSTRIPES  P IH1 N - S T R AY2 P S\nPINT  P AY1 N T\nPINT-SIZE  P AY1 N T - S AY1 Z\nPINT-SIZED  P AY1 N T - S AY1 Z D\nPINTA  P IH1 N - T AH0\nPINTAR  P IY0 N - T AA1 R\nPINTER  P AY1 N - T ER0\nPINTO  P IH1 N - T OW2\nPINTS  P AY1 N T S\nPINY  P AY1 - N IY0\nPINYAN  P IH1 - N Y AH0 N\nPINZON  P IH2 N - Z AO1 N\nPIO  P AY1 - OW0\nPION  P AY1 - AA2 N\nPIONEER  P AY2 - AH0 - N IH1 R\nPIONEER'S  P AY2 - AH0 - N IH1 R Z\nPIONEERED  P AY2 - AH0 - N IH1 R D\nPIONEERING  P AY2 - AH0 - N IH1 - R IH0 NG\nPIONEERS  P AY2 - AH0 - N IH1 R Z\nPIONTEK  P IY0 - OW1 N - T EH0 K\nPIONTKOWSKI  P IY0 - OW0 N T - K AO1 F S - K IY0\nPIORKOWSKI  P IY0 - AO0 R - K AO1 F S - K IY0\nPIOTROWSKI  P IY0 - OW0 - T R AO1 F S - K IY0\nPIOTTER  P IY0 - AA1 - T ER0\nPIOUS  P AY1 - AH0 S\nPIOUSLY  P AY1 - AH0 S - L IY0\nPIP  P IH1 P\nPIPE  P AY1 P\nPIPED  P AY1 P T\nPIPEFISH  P AY1 P - F IH2 SH\nPIPEFISHES  P AY1 P - F IH2 - SH IH0 Z\nPIPELINE  P AY1 P - L AY2 N\nPIPELINE'S  P AY1 P - L AY2 N Z\nPIPELINES  P AY1 P - L AY2 N Z\nPIPELINES'  P AY1 P - L AY2 N Z\nPIPER  P AY1 - P ER0\nPIPERS  P AY1 - P ER0 Z\nPIPES  P AY1 P S\nPIPETEC  P AY1 P - T EH2 K\nPIPETTE  P AY2 - P EH1 T\nPIPETTER  P AY2 - P EH1 - T ER0\nPIPETTERS  P AY2 - P EH1 - T ER0 Z\nPIPETTES  P AY2 - P EH1 T S\nPIPHER  P IH1 - F ER0\nPIPING  P AY1 - P IH0 NG\nPIPITONE  P IH1 - P IH0 - T OW2 N\nPIPKIN  P IH1 P - K IH0 N\nPIPKINS  P IH1 P - K IH0 N Z\nPIPP  P IH1 P\nPIPPEN  P IH1 - P AH0 N\nPIPPENGER  P IH1 - P IH0 N - JH ER0\nPIPPERT  P IH1 - P ER0 T\nPIPPIN  P IH1 - P IH0 N\nPIPPINS  P IH1 - P IH0 N Z\nPIPS  P IH1 P S\nPIQUANT  P IY1 - K AH0 N T\nPIQUE  P IY1 K\nPIQUED  P IY1 K T\nPIQUETTE  P IH0 - K EH1 T\nPIRACY  P AY1 - R AH0 - S IY0\nPIRAINO  P IH0 - R EY1 - N OW0\nPIRANDELLO  P IH2 - R AH0 N - D EH1 - L OW0\nPIRANHA  P IH0 - R AE1 N HH - AH0\nPIRATE  P AY1 - R AH0 T\nPIRATE'S  P AY1 - R AH0 T S\nPIRATED  P AY1 - R AH0 - T IH0 D\nPIRATES  P AY1 - R AH0 T S\nPIRATING  P AY1 - R AH0 - T IH0 NG\nPIRELLI  P IH0 - R EH1 - L IY0\nPIRELLI'S  P IH0 - R EH1 - L IY0 Z\nPIRES  P AY1 R Z\nPIRESTANI  P IH2 - R EH0 - S T AA1 - N IY0\nPIRIE  P IH1 - R IY0\nPIRKEY  P ER1 - K IY0\nPIRKL  P ER1 - K AH0 L\nPIRKLE  P ER1 - K AH0 L\nPIRKO  P ER1 - K OW0\nPIRO  P IH1 - R OW0\nPIROG  P ER0 - AA1 G\nPIRONE  P IH0 - R OW1 N\nPIROUETTE  P IH2 - R UW0 - EH1\nPIROUETTES  P IH2 - R UW0 - EH1 T S\nPIROZZI  P IH0 - R AA1 - Z IY0\nPIRRELLO  P IH0 - R EH1 - L OW0\nPIRRO  P IH1 - R OW0\nPIRRONE  P IH0 - R OW1 - N IY0\nPIRTLE  P ER1 - T AH0 L\nPISA  P IY1 - S AH0\nPISANI  P IY0 - S AA1 - N IY0\nPISANO  P IY0 - S AA1 - N OW0\nPISAREK  P IH1 - S ER0 - EH0 K\nPISARSKI  P IH0 - S AA1 R S - K IY0\nPISCA  P IH1 S - K AH0\nPISCATAWAY  P IH0 S - K AE1 T - AH0 - W EY2\nPISCES  P AY1 - S IY0 Z\nPISCHEL  P IH1 - SH AH0 L\nPISCHKE  P IH1 SH K\nPISCIOTTA  P IY0 S - CH OW1 - T AH0\nPISCITELLI  P IY0 S - CH IY0 - T EH1 - L IY0\nPISCITELLO  P IH2 - S IH0 - T EH1 - L OW0\nPISCOPO  P IY0 S - K OW1 - P OW0\nPISELLO  P IH0 - S EH1 - L OW0\nPISONI  P IH0 - S OW1 - N IY0\nPISS  P IH1 S\nPISSED  P IH1 S T\nPISTACHIO  P AH0 - S T AE1 - SH IY0 - OW2\nPISTACHIOS  P AH0 - S T AE1 - SH IY0 - OW2 Z\nPISTIL  P IH1 - S T AH0 L\nPISTILLI  P IY0 S - T IY1 - L IY0\nPISTOL  P IH1 - S T AH0 L\nPISTOLE  P IH0 - S T OW1 L\nPISTOLE(2)  P IH0 - S T OW1 - L EY0\nPISTOLS  P IH1 - S T AH0 L Z\nPISTON  P IH1 - S T AH0 N\nPISTONE  P IY1 S - T OW0 N\nPISTONS  P IH1 - S T AH0 N Z\nPISTOR  P IH1 - S T ER0\nPISTORIO  P IH2 - S T AO1 - R IY0 - OW0\nPIT  P IH1 T\nPITA  P IY1 - T AH0\nPITBLADO  P IH0 T - B L AA1 - D OW0\nPITCH  P IH1 CH\nPITCHBLENDE  P IH1 CH - B L EH2 N D\nPITCHED  P IH1 CH T\nPITCHER  P IH1 - CH ER0\nPITCHERS  P IH1 - CH ER0 Z\nPITCHES  P IH1 - CH IH0 Z\nPITCHFORD  P IH1 CH - F ER0 D\nPITCHFORK  P IH1 CH - F AO2 R K\nPITCHFORKS  P IH1 CH - F AO2 R K S\nPITCHING  P IH1 - CH IH0 NG\nPITCHMAN  P IH1 CH - M AH0 N\nPITCHMEN  P IH1 CH - M EH1 N\nPITCOCK  P IH1 T - K AA2 K\nPITFALL  P IH1 T - F AO2 L\nPITFALLS  P IH1 T - F AO2 L Z\nPITH  P IH1 TH\nPITHY  P IH1 - TH IY0\nPITIABLE  P IH1 - T IY0 - AH0 - B AH0 L\nPITIED  P IH1 - T IY2 D\nPITIFUL  P IH1 - T AH0 - F AH0 L\nPITIFULLY  P IH1 - T IH0 - F AH0 - L IY0\nPITIFULLY(2)  P IH1 - T IH0 F - L IY0\nPITILESS  P IH1 - T IY0 - L AH0 S\nPITINO  P AH0 - T IY1 - N OW0\nPITKIN  P IH1 T - K IH0 N\nPITMAN  P IH1 T - M AH0 N\nPITNER  P IH1 T - N ER0\nPITNEY  P IH1 T - N IY0\nPITOFSKY  P AH0 - T AA1 F S - K IY0\nPITRE  P AY1 - T ER0\nPITS  P IH1 T S\nPITSCH  P IH1 CH\nPITSENBARGER  P IH1 T - S IH0 N - B AA0 R - G ER0\nPITSTICK  P IH1 T - S T IH2 K\nPITT  P IH1 T\nPITT'S  P IH1 T S\nPITTANCE  P IH1 - T AH0 N S\nPITTARD  P IH1 - T ER0 D\nPITTED  P IH1 - T AH0 D\nPITTED(2)  P IH1 - T IH0 D\nPITTENCRIEFF  P IH1 - T IH0 N - K R IY2 F\nPITTENGER  P IH1 - T IH0 N - JH ER0\nPITTING  P IH1 - T IH0 NG\nPITTINGER  P IH1 - T IH0 - NG ER0\nPITTLE  P IH1 - T AH0 L\nPITTMAN  P IH1 T - M AH0 N\nPITTNER  P IH1 T - N ER0\nPITTS  P IH1 T S\nPITTS'S  P IH1 T - S IH0 Z\nPITTSBORO  P IH1 T S - B ER0 - OW0\nPITTSBURG  P IH1 T S - B ER0 G\nPITTSBURGH  P IH1 T S - B ER0 G\nPITTSBURGH'S  P IH1 T S - B ER0 G Z\nPITTSBURGHER  P IH1 T S - B ER0 - G ER0\nPITTSBURGHERS  P IH1 T S - B ER0 - G ER0 Z\nPITTSFIELD  P IH1 T S - F IY0 L D\nPITTSFORD  P IH1 T S - F ER0 D\nPITTSLEY  P IH1 T S - L IY0\nPITTSTON  P IH1 T - S T AH0 N\nPITUITARY  P AH0 - T UW1 - AH0 - T EH2 - R IY0\nPITUITARY(2)  P IH0 - T UW1 - IH0 - T EH2 - R IY0\nPITY  P IH1 - T IY0\nPITYING  P IH1 - T IY0 - IH0 NG\nPITZ  P IH1 T S\nPITZEN  P IH1 T - Z AH0 N\nPITZER  P IH1 T - Z ER0\nPIUS  P AY1 - AH0 S\nPIVER  P AY1 - V ER0\nPIVONKA  P IH0 - V AA1 NG - K AH0\nPIVOT  P IH1 - V AH0 T\nPIVOTAL  P IH1 - V AH0 - T AH0 L\nPIVOTED  P IH1 - V AH0 - T AH0 D\nPIVOTED(2)  P IH1 - V AH0 - T IH0 D\nPIX  P IH1 K S\nPIXAR  P IH1 K - S AA0 R\nPIXEL  P IH1 K - S AH0 L\nPIXELS  P IH1 K - S AH0 L Z\nPIXIE  P IH1 K - S IY0\nPIXLER  P IH1 K S - L ER0\nPIXLEY  P IH1 K S - L IY0\nPIZANA  P IY0 - Z AE1 - N AH0\nPIZANO  P IY0 - Z AA1 - N OW0\nPIZARRO  P IH0 - Z AA1 - R OW0\nPIZAZZ  P IH0 - Z AE1 Z\nPIZER  P AY1 - Z ER0\nPIZZA  P IY1 T - S AH0\nPIZZA'S  P IY1 T - S AH0 Z\nPIZZANO  P IY0 T - S AA1 - N OW0\nPIZZAS  P IY1 T - S AH0 Z\nPIZZAZZ  P IH2 - Z AE1 Z\nPIZZERIA  P IY2 T - S ER0 - IY1 - AH0\nPIZZERIAS  P IY2 T - S ER0 - IY1 - AH0 Z\nPIZZI  P IH1 - Z IY0\nPIZZIMENTI  P IY0 T - S IY0 - M EH1 N - T IY0\nPIZZINO  P IY0 T - S IY1 - N OW0\nPIZZITOLA  P IY0 T - S IY0 - T OW1 - L AH0\nPIZZO  P IH1 - Z OW0\nPIZZOLATO  P IY0 T - S OW0 - L AA1 - T OW0\nPIZZUTI  P IY0 T - S UW1 - T IY0\nPIZZUTO  P IY0 T - S UW1 - T OW0\nPJ'S  P IY1 - JH EY2 Z\nPLA  P L AA1\nPLACARD  P L AE1 - K ER0 D\nPLACARDS  P L AE1 - K ER0 D Z\nPLACATE  P L EY1 - K EY0 T\nPLACATING  P L EY1 - K EY2 - T IH0 NG\nPLACE  P L EY1 S\nPLACE'S  P L EY1 - S IH0 Z\nPLACEBO  P L AH0 - S IY1 - B OW0\nPLACEBOS  P L AH0 - S IY1 - B OW0 Z\nPLACED  P L EY1 S T\nPLACEK  P L AA1 - CH EH2 K\nPLACEMENT  P L EY1 S - M AH0 N T\nPLACEMENTS  P L EY1 S - M AH0 N T S\nPLACENCIA  P L AA0 - CH EH1 N - CH AH0\nPLACENTA  P L AH0 - S EH1 N - T AH0\nPLACENTIA  P L AH0 - S EH1 N - SH AH0\nPLACER  P L AE1 - S ER0\nPLACER(2)  P L EY1 - S ER0\nPLACES  P L EY1 - S AH0 Z\nPLACES(2)  P L EY1 - S IH0 Z\nPLACEWAY  P L EY1 S - W EY2\nPLACID  P L AE1 - S AH0 D\nPLACID'S  P L AE1 - S IH0 D Z\nPLACID(2)  P L AE1 - S IH0 D\nPLACIDA  P L AA0 - CH IY1 - D AH0\nPLACIDLY  P L AE1 - S IH0 D - L IY0\nPLACIDO  P L AA1 - CH IH0 - D OW0\nPLACIDO(2)  P L AH0 - S IY1 - D OW0\nPLACING  P L EY1 - S IH0 NG\nPLACK  P L AE1 K\nPLACK'S  P L AE1 K S\nPLACKE  P L AE1 K\nPLACKO  P L AE1 - K OW0\nPLACOID  P L AE1 - K OY0 D\nPLACZEK  P L AA1 - CH EH0 K\nPLAGENS  P L AE1 - G AH0 N Z\nPLAGGE  P L AE1 G\nPLAGIARISM  P L EY1 - JH ER0 - IH2 - Z AH0 M\nPLAGIARIZE  P L EY1 - JH ER0 - AY2 Z\nPLAGIARIZED  P L EY1 - JH ER0 - AY2 Z D\nPLAGIOCLASE  P L EY1 - JH IY0 - AH0 - K L EY2 S\nPLAGUE  P L EY1 G\nPLAGUED  P L EY1 G D\nPLAGUES  P L EY1 G Z\nPLAGUING  P L EY1 - G IH0 NG\nPLAIA  P L AA1 - Y AH0\nPLAID  P L AE1 D\nPLAIN  P L EY1 N\nPLAINCLOTHES  P L EY1 N - K L OW1 Z\nPLAINER  P L EY1 - N ER0\nPLAINES  P L EY1 N Z\nPLAINFIELD  P L EY1 N - F IY2 L D\nPLAINLY  P L EY1 N - L IY0\nPLAINO  P L EY1 - N OW0\nPLAINS  P L EY1 N Z\nPLAINSONG  P L EY1 N - S AO2 NG\nPLAINTIFF  P L EY1 N - T AH0 F\nPLAINTIFF'S  P L EY1 N - T IH0 F S\nPLAINTIFF'S(2)  P L EY1 - N IH0 F S\nPLAINTIFF(2)  P L EY1 - N AH0 F\nPLAINTIFFS  P L EY1 N - T IH0 F S\nPLAINTIFFS'  P L EY1 N - T IH0 F S\nPLAINTIFFS'(2)  P L EY1 - N IH0 F S\nPLAINTIFFS(2)  P L EY1 - N IH0 F S\nPLAINTIVE  P L EY1 N - T IH0 V\nPLAINTIVE(2)  P L EY1 - N IH0 V\nPLAINTIVELY  P L EY1 N - T AY2 V - L IY0\nPLAINTIVELY(2)  P L EY1 - N AY2 V - L IY0\nPLAINVIEW  P L EY1 N - V Y UW2\nPLAIR  P L EH1 R\nPLAISANCE  P L EY1 - S AH0 N S\nPLAISTED  P L AA1 - IH0 - S T IH0 D\nPLAISTED(2)  P L EY1 - S T IH0 D\nPLAKE  P L EY1 K\nPLAM  P L AE1 M\nPLAMANN  P L AA1 - M AH0 N\nPLAMBECK  P L AE1 M - B EH2 K\nPLAMONDON  P L AA0 - M OW0 N - D AO1 N\nPLAN  P L AE1 N\nPLAN'S  P L AE1 N Z\nPLANAR  P L EY1 - N ER0\nPLANARIAN  P L AH0 - N EH1 - R IY0 - AH0 N\nPLANAS  P L AE1 - N AH0 Z\nPLANCK  P L AE1 NG K\nPLANE  P L EY1 N\nPLANE'S  P L EY1 N Z\nPLANECON  P L AE1 - N AH0 - K AA2 N\nPLANECON(2)  P L AE1 N - K AA2 N\nPLANED  P L EY1 N D\nPLANELOAD  P L EY1 N - L OW2 D\nPLANELOADS  P L EY1 N - L OW2 D Z\nPLANER  P L EY1 - N ER0\nPLANERS  P L EY1 - N ER0 Z\nPLANES  P L EY1 N Z\nPLANES'  P L EY1 N Z\nPLANET  P L AE1 - N AH0 T\nPLANET'S  P L AE1 - N AH0 T S\nPLANETARIUM  P L AE2 - N AH0 - T EH1 - R IY0 - AH0 M\nPLANETARY  P L AE1 - N AH0 - T EH2 - R IY0\nPLANETS  P L AE1 - N AH0 T S\nPLANITZER  P L AE1 - N IH0 T - S ER0\nPLANK  P L AE1 NG K\nPLANKING  P L AE1 NG - K IH0 NG\nPLANKS  P L AE1 NG K S\nPLANKTON  P L AE1 NG K - T AH0 N\nPLANKTONIC  P L AE0 NG K - T AA1 - N IH0 K\nPLANNED  P L AE1 N D\nPLANNER  P L AE1 - N ER0\nPLANNER'S  P L AE1 - N ER0 Z\nPLANNERS  P L AE1 - N ER0 Z\nPLANNERS'  P L AE1 - N ER0 Z\nPLANNING  P L AE1 - N IH0 NG\nPLANO  P L EY1 - N OW0\nPLANS  P L AE1 N Z\nPLANS'  P L AE1 N Z\nPLANT  P L AE1 N T\nPLANT'S  P L AE1 N T S\nPLANTAIN  P L AE1 N - T AH0 N\nPLANTAINS  P L AE1 N - T AH0 N Z\nPLANTATION  P L AE2 N - T EY1 - SH AH0 N\nPLANTATIONS  P L AE2 N - T EY1 - SH AH0 N Z\nPLANTE  P L AE1 N T\nPLANTED  P L AE1 N - T AH0 D\nPLANTED(2)  P L AE1 N - T IH0 D\nPLANTED(3)  P L AE1 - N AH0 D\nPLANTED(4)  P L AE1 - N IH0 D\nPLANTER  P L AE1 N - T ER0\nPLANTERS  P L AE1 N - T ER0 Z\nPLANTIFFS  P L AE1 N - T IH0 F S\nPLANTING  P L AE1 N - T IH0 NG\nPLANTINGS  P L AE1 N - T IH0 NG Z\nPLANTLIKE  P L AE1 N T - L AY2 K\nPLANTRONIC  P L AE2 N - T R AA1 - N IH0 K\nPLANTRONICS  P L AE2 N - T R AA1 - N IH0 K S\nPLANTS  P L AE1 N T S\nPLANTS'  P L AE1 N T S\nPLANTZ  P L AE1 N T S\nPLAQUE  P L AE1 K\nPLAQUES  P L AE1 K S\nPLAS  P L AE1 S\nPLASCENCIA  P L AA0 S - CH EH1 N - CH AH0\nPLASENCIA  P L AA0 - S EH1 N - CH AH0\nPLASKETT  P L AE1 - S K IH0 T\nPLASMA  P L AE1 Z - M AH0\nPLASMINOGEN  P L AE2 Z - M IH1 - N AH0 - JH IH0 N\nPLASMODIA  P L AE0 Z - M OW1 - D IY0 - AH0\nPLASMODIUM  P L AE0 Z - M OW1 - D IY0 - AH0 M\nPLASS  P L AE1 S\nPLASSARD  P L AE1 - S ER0 D\nPLASSE  P L AE1 S\nPLASTER  P L AE1 - S T ER0\nPLASTERBOARD  P L AE1 - S T ER0 - B AO2 R D\nPLASTERED  P L AE1 - S T ER0 D\nPLASTERER  P L AE1 - S T ER0 - ER0\nPLASTERING  P L AE1 - S T ER0 - IH0 NG\nPLASTERS  P L AE1 - S T ER0 Z\nPLASTERWORK  P L AE1 - S T ER0 - W ER2 K\nPLASTIC  P L AE1 - S T IH0 K\nPLASTICINE  P L AE1 - S T IH0 - S IY2 N\nPLASTICIZER  P L AE1 - S T AH0 - S AY2 - Z ER0\nPLASTICS  P L AE1 - S T IH0 K S\nPLATA  P L AA1 - T AH0\nPLATE  P L EY1 T\nPLATEAU  P L AE0 - T OW1\nPLATEAUED  P L AE0 - T OW1 D\nPLATEAUING  P L AH0 - T OW1 - IH0 NG\nPLATED  P L EY1 - T AH0 D\nPLATED(2)  P L EY1 - T IH0 D\nPLATEK  P L AA1 - T EH0 K\nPLATELET  P L EY1 T - L AH0 T\nPLATELETS  P L EY1 T - L AH0 T S\nPLATELIKE  P L EY1 T - L AY2 K\nPLATEN  P L AE1 - T AH0 N\nPLATER  P L EY1 - T ER0\nPLATES  P L EY1 T S\nPLATFORM  P L AE1 T - F AO2 R M\nPLATFORM'S  P L AE1 T - F AO2 R M Z\nPLATFORMS  P L AE1 T - F AO2 R M Z\nPLATH  P L AE1 TH\nPLATING  P L EY1 - T IH0 NG\nPLATINUM  P L AE1 T - N AH0 M\nPLATINUM'S  P L AE1 - T AH0 - N AH0 M Z\nPLATINUM'S(2)  P L AE1 T - N AH0 M Z\nPLATINUM(2)  P L AE1 - T AH0 - N AH0 M\nPLATITUDE  P L AE1 - T IH0 - T UW2 D\nPLATITUDES  P L AE1 - T IH0 - T UW2 D Z\nPLATNER  P L AE1 T - N ER0\nPLATO  P L EY1 - T OW0\nPLATO'S  P L EY1 - T OW0 Z\nPLATONA  P L AA0 - T OW1 - N AH0\nPLATONIC  P L AH0 - T AA1 - N IH0 K\nPLATONIST  P L EY1 - T AH0 - N AH0 S T\nPLATONISTS  P L EY1 - T AH0 - N AH0 S T S\nPLATONISTS(2)  P L EY1 - T AH0 - N AH0 S S\nPLATONISTS(3)  P L EY1 - T AH0 - N AH0 S\nPLATOON  P L AH0 - T UW1 N\nPLATOONS  P L AH0 - T UW1 N Z\nPLATT  P L AE1 T\nPLATTE  P L AE1 T\nPLATTEN  P L AE1 - T AH0 N\nPLATTER  P L AE1 - T ER0\nPLATTERS  P L AE1 - T ER0 Z\nPLATTNER  P L AE1 T - N ER0\nPLATTS  P L AE1 T S\nPLATY  P L EY1 - T IY0\nPLATYPUS  P L AE1 - T AH0 - P UH2 S\nPLATZ  P L AE1 T S\nPLATZER  P L EY1 T - Z ER0\nPLAUCHE  P L AO1 CH\nPLAUDIT  P L AO1 - D IH0 T\nPLAUDITS  P L AO1 - D IH0 T S\nPLAUGHER  P L AO1 - ER0\nPLAUSIBILITY  P L AO2 - Z IH0 - B IH1 - L IH0 - T IY0\nPLAUSIBLE  P L AO1 - Z AH0 - B AH0 L\nPLAUSIBLY  P L AO1 - Z AH0 - B L IY0\nPLAUT  P L AO1 T\nPLAUTZ  P L AO1 T S\nPLAX  P L AE1 K S\nPLAY  P L EY1\nPLAY'S  P L EY1 Z\nPLAYA  P L AY1 - AH0\nPLAYBACK  P L EY1 - B AE2 K\nPLAYBOOK  P L EY1 - B UH0 K\nPLAYBOY  P L EY1 - B OY2\nPLAYBOY'S  P L EY1 - B OY2 Z\nPLAYCOUNT  P L EY1 - K AW2 N T\nPLAYED  P L EY1 D\nPLAYER  P L EY1 - ER0\nPLAYER'S  P L EY1 - ER0 Z\nPLAYERS  P L EY1 - ER0 Z\nPLAYERS'  P L EY1 - ER0 Z\nPLAYFORD  P L EY1 - F ER0 D\nPLAYFUL  P L EY1 - F AH0 L\nPLAYFULLY  P L EY1 - F AH0 - L IY0\nPLAYFULNESS  P L EY1 - F AH0 L - N AH0 S\nPLAYGROUND  P L EY1 - G R AW2 N D\nPLAYGROUND(2)  P L EY1 - G R AW2 N\nPLAYGROUNDS  P L EY1 - G R AW2 N D Z\nPLAYGROUNDS(2)  P L EY1 - G R AW2 N Z\nPLAYHOUSE  P L EY1 - HH AW2 S\nPLAYIN'  P L EY1 - IH0 N\nPLAYING  P L EY1 - IH0 NG\nPLAYMATE  P L EY1 - M EY2 T\nPLAYMATES  P L EY1 - M EY2 T S\nPLAYOFF  P L EY1 - AO2 F\nPLAYOFFS  P L EY1 - AO2 F S\nPLAYPEN  P L EY1 - P EH2 N\nPLAYROOM  P L EY1 - R UW2 M\nPLAYS  P L EY1 Z\nPLAYSTATION  P L EY1 - S T EY2 - SH AH0 N\nPLAYTEX  P L EY1 - T EH2 K S\nPLAYTHING  P L EY1 - TH IH2 NG\nPLAYTHINGS  P L EY1 - TH IH2 NG Z\nPLAYWRIGHT  P L EY1 - R AY2 T\nPLAYWRIGHT'S  P L EY1 - R AY2 T S\nPLAYWRIGHTS  P L EY1 - R AY2 T S\nPLAZA  P L AA1 - Z AH0\nPLAZA'S  P L AA1 - Z AH0 Z\nPLAZA'S(2)  P L AE1 - Z AH0 Z\nPLAZA(2)  P L AE1 - Z AH0\nPLAZAS  P L AA1 - Z AH0 Z\nPLAZAS(2)  P L AE1 - Z AH0 Z\nPLAZIC  P L EY1 - Z IH0 K\nPLEA  P L IY1\nPLEAD  P L IY1 D\nPLEADED  P L IY1 - D AH0 D\nPLEADED(2)  P L IY1 - D IH0 D\nPLEADING  P L IY1 - D IH0 NG\nPLEADINGS  P L IY1 - D IH0 NG Z\nPLEADS  P L IY1 D Z\nPLEAS  P L IY1 Z\nPLEASANT  P L EH1 - Z AH0 N T\nPLEASANTLY  P L EH1 - Z AH0 N T - L IY0\nPLEASANTON  P L EH1 - Z AH0 N - T AH0 N\nPLEASANTRIES  P L EH1 - Z AH0 N - T R IY0 Z\nPLEASANTRY  P L EH1 - Z AH0 N - T R IY0\nPLEASANTS  P L EH1 - Z AH0 N T S\nPLEASANTVILLE  P L EH1 - Z AH0 N T - V IH2 L\nPLEASE  P L IY1 Z\nPLEASED  P L IY1 Z D\nPLEASER  P L IY1 - Z ER0\nPLEASES  P L IY1 - Z IH0 Z\nPLEASING  P L IY1 - Z IH0 NG\nPLEASINGLY  P L IY1 - Z IH0 NG - L IY0\nPLEASURABLE  P L EH1 - ZH ER0 - AH0 - B AH0 L\nPLEASURAMA  P L EH2 - ZH UH0 - R AE1 - M AH0\nPLEASURE  P L EH1 - ZH ER0\nPLEASURES  P L EH1 - ZH ER0 Z\nPLEAT  P L IY1 T\nPLEATS  P L IY1 T S\nPLEBEIAN  P L AH0 - B IY1 - AH0 N\nPLEBEIANS  P L AH0 - B IY1 - AH0 N Z\nPLEBISCITE  P L EH1 - B AH0 - S AY2 T\nPLEBISCITE(2)  P L IY1 - B IH0 - S AY2 T\nPLED  P L EH1 D\nPLEDGE  P L EH1 JH\nPLEDGED  P L EH1 JH D\nPLEDGER  P L EH1 - JH ER0\nPLEDGES  P L EH1 - JH IH0 Z\nPLEDGING  P L EH1 - JH IH0 NG\nPLEIAD  P L IY1 - AH0 D\nPLEIADES  P L IY1 - AH0 - D IY2 Z\nPLEIADS  P L IY1 - AH0 D Z\nPLEIN  P L IY1 N\nPLEISTOCENE  P L AY1 - S T AH0 - S IY2 N\nPLEMMONS  P L EH1 - M AH0 N Z\nPLEMONS  P L EH1 - M AH0 N Z\nPLENARY  P L EH1 - N ER0 - IY0\nPLENARY(2)  P L IY1 - N ER0 - IY0\nPLENMEER  P L EH0 N - M IH1 R\nPLENTIFUL  P L EH1 N - T AH0 - F AH0 L\nPLENTIFUL(2)  P L EH1 N - T IH0 - F AH0 L\nPLENTIFUL(3)  P L EH1 - N AH0 - F AH0 L\nPLENTIFUL(4)  P L EH1 - N IH0 - F AH0 L\nPLENTY  P L EH1 N - T IY0\nPLENTY(2)  P L EH1 - N IY0\nPLENUM  P L EH1 - N AH0 M\nPLENUM'S  P L EH1 - N AH0 M Z\nPLESCIA  P L EY1 - S IY0 - AH0\nPLESE  P L IY1 Z\nPLESHAR  P L EH1 - SH AA2 R\nPLESKOW  P L EH1 S - K AW0\nPLESS  P L EH1 S\nPLESSEY  P L EH1 - S IY0\nPLESSEY'S  P L EH1 - S IY0 Z\nPLESSINGER  P L EH1 - S IH0 - NG ER0\nPLESSIS  P L EH1 - S IH0 S\nPLESSY  P L EH1 - S IY0\nPLETCHER  P L EH1 - CH ER0\nPLETHORA  P L EH1 - TH ER0 - AH0\nPLETHORA(2)  P L AH0 - TH AO1 - R AH0\nPLETSCHER  P L EH1 - CH ER0\nPLETT  P L EH1 T\nPLETZ  P L EH1 T S\nPLEURISY  P L UH1 - R AH0 - S IY0\nPLEVA  P L EY1 - V AH0\nPLEW  P L UW1\nPLEWA  P L UW1 - AH0\nPLEX  P L EH1 K S\nPLEXIGLAS  P L EH1 K - S IH0 - G L AE2 S\nPLEXIGLAS(2)  P L EH1 K - S IY0 - G L AE2 S\nPLEXIGLASS  P L EH1 K - S IH0 - G L AE2 S\nPLEXIGLASS(2)  P L EH1 K - S IY0 - G L AE2 S\nPLEXUS  P L EH1 K - S AH0 S\nPLIABLE  P L AY1 - AH0 - B AH0 L\nPLIANT  P L AY1 - AH0 N T\nPLICHTA  P L IH1 CH - T AH0\nPLIED  P L AY1 D\nPLIER  P L AY1 - ER0\nPLIERS  P L AY1 - ER0 Z\nPLIES  P L AY1 Z\nPLIGHT  P L AY1 T\nPLILER  P L AY1 - L ER0\nPLIMPTON  P L IH1 M P - T AH0 N\nPLINIUS  P L IH1 - N IY0 - AH0 S\nPLINK  P L IH1 NG K\nPLINKING  P L IH1 NG - K IH0 NG\nPLINTH  P L IH1 N TH\nPLINY  P L IH1 - N IY0\nPLIOCENE  P L AY1 - AH0 - S IY2 N\nPLISETSKAYA  P L IH2 - S AH0 T - S K AY1 - AH0\nPLISKA  P L IH1 - S K AH0\nPLITT  P L IH1 T\nPLOCAR  P L OW1 - K AA0 R\nPLOCEK  P L OW1 - CH EH2 K\nPLOCH  P L AA1 K\nPLOCHER  P L AA1 - K ER0\nPLOCK  P L AA1 K\nPLOD  P L AA1 D\nPLODDED  P L AA1 - D AH0 D\nPLODDED(2)  P L AA1 - D IH0 D\nPLODDING  P L AA1 - D IH0 NG\nPLOEGER  P L OW1 - G ER0\nPLOETZ  P L OW1 T S\nPLOG  P L AA1 G\nPLOHN  P L OW1 N\nPLONKA  P L OW1 NG - K AH0\nPLONSKI  P L AA1 N - S K IY0\nPLOOF  P L UW1 F\nPLOP  P L AA1 P\nPLOPPED  P L AA1 P T\nPLOSS  P L AO1 S\nPLOT  P L AA1 T\nPLOTKIN  P L AA1 T - K IH0 N\nPLOTNER  P L AA1 T - N ER0\nPLOTNICK  P L AA1 T - N IH0 K\nPLOTS  P L AA1 T S\nPLOTT  P L AA1 T\nPLOTTED  P L AA1 - T AH0 D\nPLOTTED(2)  P L AA1 - T IH0 D\nPLOTTER  P L AA1 - T ER0\nPLOTTERS  P L AA1 - T ER0 Z\nPLOTTING  P L AA1 - T IH0 NG\nPLOTTS  P L AA1 T S\nPLOTZ  P L AA1 T S\nPLOUFF  P L OW1 F\nPLOUFFE  P L OW1 F\nPLOUGH  P L AW1\nPLOUGH(2)  P L OW1\nPLOUGHED  P L AW1 D\nPLOURDE  P L AO1 R D\nPLOVERS  P L AH1 - V ER0 Z\nPLOW  P L AW1\nPLOWDEN  P L AW1 - D AH0 N\nPLOWED  P L AW1 D\nPLOWING  P L AW1 - IH0 NG\nPLOWMAN  P L AW1 - M AH0 N\nPLOWMAN'S  P L AW1 - M AH0 N Z\nPLOWRIGHT  P L AW1 - R AY2 T\nPLOWS  P L AW1 Z\nPLOWSHARE  P L AW1 - SH EY2 R\nPLOWSHARES  P L AW1 - SH EY2 R Z\nPLOY  P L OY1\nPLOYS  P L OY1 Z\nPLUCINSKI  P L AH0 - CH IH1 N - S K IY0\nPLUCK  P L AH1 K\nPLUCK'S  P L AH1 K S\nPLUCKED  P L AH1 K T\nPLUCKER  P L AH1 - K ER0\nPLUCKING  P L AH1 - K IH0 NG\nPLUCKS  P L AH1 K S\nPLUCKY  P L AH1 - K IY0\nPLUDE  P L UW1 D\nPLUE  P L UW1\nPLUFF  P L AH1 F\nPLUG  P L AH1 G\nPLUGGED  P L AH1 G D\nPLUGGING  P L AH1 - G IH0 NG\nPLUGS  P L AH1 G Z\nPLUM  P L AH1 M\nPLUM'S  P L AH1 M Z\nPLUMAGE  P L UW1 - M AH0 JH\nPLUMAGE(2)  P L UW1 - M IH0 JH\nPLUMAGES  P L UW1 - M AH0 - JH AH0 Z\nPLUMAGES(2)  P L UW1 - M IH0 - JH IH0 Z\nPLUMB  P L AH1 M\nPLUMBED  P L AH1 M D\nPLUMBER  P L AH1 - M ER0\nPLUMBERS  P L AH1 - M ER0 Z\nPLUMBING  P L AH1 - M IH0 NG\nPLUME  P L UW1 M\nPLUMER  P L UW1 - M ER0\nPLUMERI  P L UW2 - M EH1 - R IY0\nPLUMES  P L UW1 M Z\nPLUMLEE  P L AH1 M - L IY2\nPLUMLEY  P L AH1 M - L IY0\nPLUMMER  P L AH1 - M ER0\nPLUMMET  P L AH1 - M AH0 T\nPLUMMETED  P L AH1 - M AH0 - T IH0 D\nPLUMMETING  P L AH1 - M AH0 - T IH0 NG\nPLUMMETS  P L AH1 - M AH0 T S\nPLUMP  P L AH1 M P\nPLUMPED  P L AH1 M P T\nPLUMS  P L AH1 M Z\nPLUNDER  P L AH1 N - D ER0\nPLUNDERED  P L AH1 N - D ER0 D\nPLUNDERING  P L AH1 N - D ER0 - IH0 NG\nPLUNGE  P L AH1 N JH\nPLUNGED  P L AH1 N JH D\nPLUNGER  P L AH1 N - JH ER0\nPLUNGER'S  P L AH1 N - JH ER0 Z\nPLUNGES  P L AH1 N - JH IH0 Z\nPLUNGING  P L AH1 N - JH IH0 NG\nPLUNK  P L AH1 NG K\nPLUNKED  P L AH1 NG K T\nPLUNKER  P L AH1 NG - K ER0\nPLUNKERS  P L AH1 NG - K ER0 Z\nPLUNKETT  P L AH1 NG - K IH0 T\nPLUNKING  P L AH1 NG - K IH0 NG\nPLUNKITT  P L AH1 NG - K IH0 T\nPLURAL  P L UH1 - R AH0 L\nPLURALISM  P L UH1 - R AH0 - L IH2 - Z AH0 M\nPLURALISTIC  P L UH2 - R AH0 - L IH1 - S T IH0 K\nPLURALITY  P L ER0 - AE1 - L IH0 - T IY0\nPLURIBUS  P L UH1 - R IH0 - B AH0 S\nPLUS  P L AH1 S\nPLUS'S  P L AH1 - S IH0 Z\nPLUSES  P L AH1 - S IH0 Z\nPLUSH  P L AH1 SH\nPLUTA  P L UW1 - T AH0\nPLUTH  P L UW1 TH\nPLUTO  P L UW1 - T OW0\nPLUTO'S  P L UW1 - T OW0 Z\nPLUTOCRAT  P L UW1 - T AH0 - K R AE2 T\nPLUTOCRATS  P L UW1 - T AH0 - K R AE2 T S\nPLUTONIAN  P L UW0 - T OW1 - N IY0 - AH0 N\nPLUTONIC  P L UW0 - T AA1 - N IH0 K\nPLUTONIUM  P L UW0 - T OW1 - N IY0 - AH0 M\nPLUVIAL  P L UW1 - V IY0 - AH0 L\nPLY  P L AY1\nPLYBON  P L IH1 - B AH0 N\nPLYING  P L AY1 - IH0 NG\nPLYLER  P L AY1 - L ER0\nPLYMALE  P L AY1 - M EY2 L\nPLYMOUTH  P L IH1 - M AH0 TH\nPLYMOUTH'S  P L IH1 - M AH0 TH S\nPLYMPTON  P L IH1 M P - T AH0 N\nPLYWOOD  P L AY1 - W UH2 D\nPM  P IY1 - EH1 M\nPNEUMATIC  N UW0 - M AE1 - T IH0 K\nPNEUMATICS  N UH0 - M AE1 - T IH0 K S\nPNEUMO  N UW1 - M OW0\nPNEUMOCYSTIS  N UW0 - M OW1 - S IH0 - S T IH0 S\nPNEUMONIA  N UW0 - M OW1 - N Y AH0\nPNEUMONIA(2)  N AH0 - M OW1 - N Y AH0\nPNEUMONIC  N UW0 - M AA1 - N IH0 K\nPO  P OW1\nPO-JEN  P OW1 - JH EH1 N\nPOACH  P OW1 CH\nPOACHED  P OW1 CH T\nPOACHER  P OW1 - CH ER0\nPOACHERS  P OW1 - CH ER0 Z\nPOACHING  P OW1 - CH IH0 NG\nPOAG  P OW1 G\nPOAGE  P OW1 - IH0 JH\nPOARCH  P AO1 R HH\nPOBANZ  P OW1 - B AA0 N Z\nPOBLA  P OW1 - B L AH0\nPOBLANO  P OW0 - B L AA1 - N OW0\nPOBST  P AA1 B S T\nPOCAHONTAS  P OW2 - K AH0 - HH AA1 N - T AH0 S\nPOCAHONTAS(2)  P OW2 - K AH0 - HH AA1 - N AH0 S\nPOCH  P AA1 K\nPOCHE  P AA1 CH\nPOCHILUK  P AH0 - CH IY1 - L UW0 K\nPOCIASK  P AH0 - CH IY1 - AH0 S K\nPOCIUS  P OW1 - S IY0 - IH0 S\nPOCK  P AA1 K\nPOCKED  P AA1 K T\nPOCKET  P AA1 - K AH0 T\nPOCKETBOOK  P AA1 - K AH0 T - B UH2 K\nPOCKETBOOKS  P AA1 - K AH0 T - B UH2 K S\nPOCKETED  P AA1 - K AH0 - T IH0 D\nPOCKETFUL  P AA1 - K AH0 T - F UH2 L\nPOCKETING  P AA1 - K AH0 - T IH0 NG\nPOCKETS  P AA1 - K AH0 T S\nPOCKLINGTON  P AA1 K - L IH0 NG - T AH0 N\nPOCKMARK  P AA1 K - M AA2 R K\nPOCKMARKED  P AA1 K - M AA2 R K T\nPOCKS  P AA1 K S\nPOCLAIN  P AA1 K - L IH0 N\nPOCO  P OW1 - K OW0\nPOCOCK  P AA1 - K AH0 K\nPOCONO  P OW1 - K AH0 - N OW2\nPOCONOS  P OW1 - K AH0 - N OW0 Z\nPOCUS  P OW1 - K AH0 S\nPOD  P AA1 D\nPOD'S  P AA1 D Z\nPODANY  P AH0 - D AO1 - N IY0\nPODELL  P OW0 - D EY1 L\nPODESTA  P OW0 - D EH1 - S T AH0\nPODGE  P AA1 JH\nPODGORSKI  P AA0 - JH AO1 R S - K IY0\nPODGURSKI  P AA0 - JH ER1 S - K IY0\nPODHORETZ  P AA1 D - HH ER0 - EH0 T S\nPODHORETZ(2)  P AA1 D - HH AO0 - R EH0 T S\nPODIATRIST  P AH0 - D AY1 - AH0 - T R IH2 S T\nPODIUM  P OW1 - D IY0 - AH0 M\nPODIUMS  P OW1 - D IY0 - AH0 M Z\nPODLESKA  P AA2 D - L EH1 - S K AH0\nPODNAR  P AA1 D - N AA2 R\nPODOLAK  P AH0 - D OW1 - L AH0 K\nPODOLL  P AA1 - D AH0 L\nPODOLSKI  P AH0 - D OW1 L - S K IY0\nPODOLSKY  P AH0 - D OW1 L - S K IY0\nPODRASKY  P AH0 - D R AE1 S - K IY0\nPODRAZA  P OW0 - D R AA1 - Z AH0\nPODS  P AA1 D Z\nPODUNK  P OW1 - T AH0 NG K\nPODUSKA  P OW0 - D AH1 - S K AH0\nPOE  P OW1\nPOE'S  P OW1 Z\nPOEHL  P OW1 L\nPOEHL'S  P OW1 L Z\nPOEHL'S(2)  P AO1 L Z\nPOEHLER  P OW1 - L ER0\nPOEHLMAN  P OW1 L - M AH0 N\nPOEL  P OW1 - AH0 L\nPOELMAN  P OW1 L - M AH0 N\nPOEM  P OW1 - AH0 M\nPOEMS  P OW1 - AH0 M Z\nPOER  P OW1 - ER0\nPOESCHEL  P OW1 - SH AH0 L\nPOESCHL  P OW1 S - K AH0 L\nPOET  P OW1 - AH0 T\nPOET'S  P OW1 - AH0 T S\nPOETIC  P OW0 - EH1 - T IH0 K\nPOETICALLY  P OW0 - EH1 - T IH0 K - L IY0\nPOETRY  P OW1 - AH0 - T R IY0\nPOETS  P OW1 - AH0 T S\nPOFAHL  P AA1 - F AA0 L\nPOFF  P AO1 F\nPOFFENBARGER  P AA1 - F IH0 N - B AA0 R - G ER0\nPOFFENBERGER  P AO1 - F AH0 N - B ER0 - G ER0\nPOG  P AA1 G\nPOGGI  P AA1 - JH IY0\nPOGGIOLI  P OW2 - JH OW1 - L IY0\nPOGO  P OW1 - G OW2\nPOGORZELSKI  P AH0 - G ER0 - Z EH1 L - S K IY0\nPOGROM  P AH0 - G R AA1 M\nPOGROM(2)  P OW1 - G R AH0 M\nPOGROMS  P AH0 - G R AA1 M Z\nPOGROMS(2)  P OW1 - G R AH0 M Z\nPOGS  P AA1 G Z\nPOGUE  P OW1 G\nPOH  P OW1\nPOHANG  P OW1 - HH AE0 NG\nPOHJOLA  P OW2 - JH OW1 - L AH0\nPOHL  P OW1 L\nPOHL'S  P OW1 L Z\nPOHLAD  P OW1 - L AE0 D\nPOHLE  P OW1 - HH AH0 L\nPOHLMAN  P OW1 L - M AH0 N\nPOHLMANN  P OW1 L - M AH0 N\nPOHNPEI  P OW1 N - P EY2\nPOIGNANCY  P OY1 - N Y AH0 N - S IY0\nPOIGNANT  P OY1 - N Y AH0 N T\nPOIGNANTLY  P OY1 - N Y AH0 N T - L IY0\nPOINDEXTER  P OY1 N - D EH2 K - S T ER0\nPOINDEXTER'S  P OY1 N - D EH2 K - S T ER0 Z\nPOINOT  P OY1 - N AA2 T\nPOINSETT  P OY1 N - S IH0 T\nPOINSETTIA  P OY0 N - S EH1 - T IY0 - AH0\nPOINSETTIA(2)  P OY0 N - S EH1 - T AH0\nPOINSETTIAS  P OY0 N - S EH1 - T IY0 - AH0 Z\nPOINSETTIAS(2)  P OY0 N - S EH1 - T AH0 Z\nPOINT  P OY1 N T\nPOINT'S  P OY1 N T S\nPOINTE  P OY1 N T\nPOINTED  P OY1 N - T AH0 D\nPOINTED(2)  P OY1 - N AH0 D\nPOINTED(3)  P OY1 N - T IH0 D\nPOINTEDLY  P OY1 N - T IH0 D - L IY0\nPOINTEDLY(2)  P OY1 - N AH0 D - L IY0\nPOINTER  P OY1 N - T ER0\nPOINTERS  P OY1 N - T ER0 Z\nPOINTING  P OY1 N - T IH0 NG\nPOINTLESS  P OY1 N T - L AH0 S\nPOINTS  P OY1 N T S\nPOINTY  P OY1 N - T IY0\nPOIRIER  P OY1 - R IY0 - ER0\nPOIRRIER  P OY1 - R IY0 - ER0\nPOISE  P OY1 Z\nPOISED  P OY1 Z D\nPOISON  P OY1 - Z AH0 N\nPOISONED  P OY1 - Z AH0 N D\nPOISONING  P OY1 - Z AH0 N - IH0 NG\nPOISONINGS  P OY1 - Z AH0 N - IH0 NG Z\nPOISONOUS  P OY1 - Z AH0 - N AH0 S\nPOISONS  P OY1 - Z AH0 N Z\nPOISSANT  P OY0 Z - S AO1 N T\nPOISSON  P OY1 Z - S AH0 N\nPOITIER  P OY1 - T Y ER0\nPOITIER(2)  P W AA1 - T Y EY2\nPOITRA  P OY1 - T R AH0\nPOITRAS  P OY0 - T R AA1 Z\nPOKAZUKHA  P AA2 - K AH0 - Z UW1 K - HH AH0\nPOKE  P OW1 K\nPOKED  P OW1 K T\nPOKER  P OW1 - K ER0\nPOKES  P OW1 K S\nPOKEWEED  P OW1 K - W IY2 D\nPOKEY  P OW1 - K IY0\nPOKING  P OW1 - K IH0 NG\nPOKORNEY  P AA1 - K ER0 - N IY0\nPOKORNY  P AH0 - K AO1 R - N IY0\nPOKORSKI  P AH0 - K AO1 R S - K IY0\nPOKY  P OW1 - K IY0\nPOL  P AO1 L\nPOLACEK  P AA1 - L AH0 - CH EH0 K\nPOLACHEK  P AA1 - L AH0 - K IH0 K\nPOLACK  P OW1 - L AE0 K\nPOLAK  P OW1 - L AH0 K\nPOLAKOFF  P AA1 - L AH0 - K AO0 F\nPOLAKOWSKI  P AH0 - L AH0 - K AO1 F S - K IY0\nPOLAN  P OW1 - L AH0 N\nPOLANCO  P OW0 - L AA1 N - K OW0\nPOLAND  P OW1 - L AH0 N D\nPOLAND'S  P OW1 - L AH0 N D Z\nPOLANSKI  P AH0 - L AE1 N S - K IY0\nPOLANSKY  P AH0 - L AE1 N S - K IY0\nPOLAR  P OW1 - L ER0\nPOLARIMETER  P OW2 - L ER0 - IH1 - M AH0 - T ER0\nPOLARIS  P OW0 - L EH1 - R AH0 S\nPOLARISCOPE  P OW0 - L EH1 - R AH0 - S K OW2 P\nPOLARITY  P OW0 - L EH1 - R AH0 - T IY0\nPOLARIZATION  P OW2 - L ER0 - AH0 - Z EY1 - SH AH0 N\nPOLARIZATION(2)  P OW2 - L ER0 - IH0 - Z EY1 - SH AH0 N\nPOLARIZE  P OW1 - L ER0 - AY2 Z\nPOLARIZED  P OW1 - L ER0 - AY2 Z D\nPOLARIZER  P OW1 - L ER0 - AY2 - Z ER0\nPOLARIZES  P OW1 - L ER0 - AY2 - Z IH0 Z\nPOLARIZING  P OW1 - L ER0 - AY2 - Z IH0 NG\nPOLAROGRAPHY  P OW2 - L ER0 - AA1 - G R AH0 - F IY0\nPOLAROID  P OW1 - L ER0 - OY2 D\nPOLAROID'S  P OW1 - L ER0 - OY2 D Z\nPOLAROIDS  P OW1 - L ER0 - OY2 D Z\nPOLASEK  P AH0 - L AA1 - S EH0 K\nPOLASKI  P AH0 - L AA1 S - K IY0\nPOLASKY  P AH0 - L AA1 S - K IY0\nPOLCE  P OW1 L S\nPOLCYN  P OW1 L - S IH0 N\nPOLDER  P OW1 L - D ER0\nPOLE  P OW1 L\nPOLECAT  P OW1 L - K AE2 T\nPOLECATS  P OW1 L - K AE2 T S\nPOLEK  P OW1 - L EH0 K\nPOLEMIC  P AH0 - L EH1 - M IH0 K\nPOLEMICAL  P AH0 - L EH1 - M AH0 - K AH0 L\nPOLEMICIST  P AH0 - L EH1 - M AH0 - S AH0 S T\nPOLEMICS  P OW0 - L EH1 - M IH0 K S\nPOLEN  P OW1 - L AH0 N\nPOLES  P OW1 L Z\nPOLETTI  P OW0 - L EH1 - T IY0\nPOLEVANOV  P AH0 - L EH1 - V AH0 - N AA0 V\nPOLEVOI  P OW1 - L AH0 - V OY2\nPOLEWARD  P OW1 L - W ER0 D\nPOLEY  P OW1 - L IY0\nPOLGAR  P OW1 L - G ER0\nPOLHAMUS  P OW1 L - HH AH0 - M IH0 S\nPOLHEMUS  P OW1 L - HH IH0 - M AH0 S\nPOLHILL  P OW1 L - HH IH2 L\nPOLI  P OW1 - L IY0\nPOLI(2)  P OW1 - L AY0\nPOLICASTRO  P OW0 - L IY0 - K AE1 - S T R OW0\nPOLICE  P AH0 - L IY1 S\nPOLICE'S  P AH0 - L IY1 - S IH0 Z\nPOLICED  P AH0 - L IY1 S T\nPOLICEMAN  P AH0 - L IY1 S - M AH0 N\nPOLICEMAN'S  P AH0 - L IY1 S - M AH0 N Z\nPOLICEMEN  P AH0 - L IY1 S - M IH0 N\nPOLICES  P AH0 - L IY1 - S IH0 Z\nPOLICEWOMAN  P AH0 - L IY1 S - W UH2 - M AH0 N\nPOLICEWOMEN  P AH0 - L IY1 S - W IH2 - M EH0 N\nPOLICH  P AA1 - L IH0 K\nPOLICIES  P AA1 - L AH0 - S IY0 Z\nPOLICING  P AH0 - L IY1 - S IH0 NG\nPOLICY  P AA1 - L AH0 - S IY0\nPOLICY'S  P AA1 - L AH0 - S IY0 Z\nPOLICYHOLDER  P AA1 - L AH0 - S IY0 - HH OW2 L - D ER0\nPOLICYHOLDER'S  P AA1 - L AH0 - S IY0 - HH OW2 L - D ER0 Z\nPOLICYHOLDERS  P AA1 - L AH0 - S IY0 - HH OW2 L - D ER0 Z\nPOLICYHOLDERS'  P AA1 - L AH0 - S IY0 - HH OW2 L - D ER0 Z\nPOLICYMAKER  P AA1 - L AH0 - S IY0 - M EY2 - K ER0\nPOLICYMAKERS  P AA1 - L AH0 - S IY0 - M EY2 - K ER0 Z\nPOLICYMAKING  P AA1 - L AH0 - S IY0 - M EY2 - K IH0 NG\nPOLIDORI  P OW0 - L IY0 - D AO1 - R IY0\nPOLIDORO  P OW0 - L IY0 - D AO1 - R OW0\nPOLIFRONI  P AA0 - L AH0 - F R OW1 - N IY0\nPOLIMENI  P OW0 - L IY0 - M EH1 - N IY0\nPOLIN  P OW1 - L IH0 N\nPOLING  P OW1 - L IH0 NG\nPOLINO  P OW0 - L IY1 - N OW0\nPOLINSKI  P AH0 - L IH1 N - S K IY0\nPOLINSKY  P AH0 - L IH1 N - S K IY0\nPOLIO  P OW1 - L IY0 - OW2\nPOLIQUIN  P OW0 - L IY0 - K W IY1 N\nPOLIS  P OW1 - L AH0 S\nPOLIS(2)  P OW1 - L AY0 Z\nPOLISARIO  P OW2 - L IH0 - S EH1 - R IY0 - OW0\nPOLISH  P AA1 - L IH0 SH\nPOLISH(2)  P OW1 - L IH0 SH\nPOLISHED  P AA1 - L IH0 SH T\nPOLISHING  P AA1 - L IH0 - SH IH0 NG\nPOLITANO  P OW0 - L IY0 - T AA1 - N OW0\nPOLITBURO  P AA1 - L AH0 T - B Y UH2 - R OW0\nPOLITBURO'S  P AA1 - L AH0 T - B Y UH2 - R OW0 Z\nPOLITE  P AH0 - L AY1 T\nPOLITELY  P AH0 - L AY1 T - L IY0\nPOLITENESS  P AH0 - L AY1 T - N AH0 S\nPOLITES  P AH0 - L AY1 T S\nPOLITI  P OW0 - L IY1 - T IY0\nPOLITIC  P AA1 - L AH0 - T IH2 K\nPOLITICAL  P AH0 - L IH1 - T AH0 - K AH0 L\nPOLITICAL(2)  P AH0 - L IH1 - T IH0 - K AH0 L\nPOLITICALLY  P AH0 - L IH1 - T IH0 - K AH0 - L IY0\nPOLITICALLY(2)  P L IH1 - T IH0 K - L IY0\nPOLITICIAN  P AA2 - L AH0 - T IH1 - SH AH0 N\nPOLITICIAN'S  P AA2 - L AH0 - T IH1 - SH AH0 N Z\nPOLITICIANS  P AA2 - L AH0 - T IH1 - SH AH0 N Z\nPOLITICIANS'  P AA2 - L AH0 - T IH1 - SH AH0 N Z\nPOLITICIZATION  P AH0 - L IH2 - T AH0 - S AH0 - Z EY1 - SH AH0 N\nPOLITICIZE  P AH0 - L IH1 - T IH0 - S AY2 Z\nPOLITICIZED  P AH0 - L IH1 - T IH0 - S AY2 Z D\nPOLITICIZING  P AH0 - L IH1 - T IH0 - S AY2 - Z IH0 NG\nPOLITICKING  P AA1 - L AH0 - T IH2 - K IH0 NG\nPOLITICO  P AH0 - L IH1 - T IH0 - K OW2\nPOLITICOS  P AH0 - L IH1 - T IH0 - K OW2 Z\nPOLITICS  P AA1 - L AH0 - T IH2 K S\nPOLITICS'  P AA1 - L AH0 - T IH2 K S\nPOLITIS  P AA1 - L AY0 - T IH0 S\nPOLITO  P OW0 - L IY1 - T OW0\nPOLITTE  P AH0 - L IH1 T\nPOLITY  P AA1 - L AH0 - T IY0\nPOLITZ  P AA1 - L IH0 T S\nPOLIVKA  P OW0 - L IY1 V - K AH0\nPOLIZZI  P OW0 - L IY1 T - S IY0\nPOLJE  P OW1 L - JH IY0\nPOLK  P OW1 K\nPOLK'S  P OW1 K S\nPOLK'S(2)  P OW1 L K S\nPOLK(2)  P OW1 L K\nPOLKA  P OW1 L - K AH0\nPOLKA(2)  P OW1 - K AH0\nPOLKAS  P OW1 L - K AH0 Z\nPOLKAS(2)  P OW1 - K AH0 Z\nPOLKINGHORN  P OW1 L - K IH0 NG - HH AO2 R N\nPOLL  P OW1 L\nPOLL'S  P OW1 L Z\nPOLLACK  P AA1 - L AH0 K\nPOLLACK'S  P AA1 - L AH0 K S\nPOLLAK  P AA1 - L AH0 K\nPOLLAN  P AA1 - L AH0 N\nPOLLAND  P AA1 - L AH0 N D\nPOLLARD  P AA1 - L ER0 D\nPOLLARD'S  P AA1 - L ER0 D Z\nPOLLED  P OW1 L D\nPOLLEN  P AA1 - L AH0 N\nPOLLENS  P AA1 - L AH0 N Z\nPOLLET  P AA1 - L IH0 T\nPOLLETT  P AA1 - L IH0 T\nPOLLEY  P AA1 - L IY0\nPOLLICK  P AA1 - L IH0 K\nPOLLINA  P OW0 - L IY1 - N AH0\nPOLLINATE  P AA1 - L AH0 - N EY2 T\nPOLLINATED  P AA1 - L IH0 - N EY2 - T IH0 D\nPOLLINATES  P AA1 - L AH0 - N EY2 T S\nPOLLINATION  P AA2 - L AH0 - N EY1 - SH AH0 N\nPOLLING  P OW1 - L IH0 NG\nPOLLINGER  P OW1 - L IH0 - NG ER0\nPOLLINI  P AH0 - L IY1 - N IY0\nPOLLINIA  P AA0 - L IH1 - N IY0 - AH0\nPOLLINO  P OW0 - L IY1 - N OW0\nPOLLIO  P AA1 - L IY0 - OW0\nPOLLITT  P AA1 - L IH0 T\nPOLLMAN  P OW1 L - M AH0 N\nPOLLNER  P OW1 L - N ER0\nPOLLO  P AA1 - L OW0\nPOLLOCK  P AA1 - L AH0 K\nPOLLOI  P AA2 - L OY1\nPOLLOK  P AA1 - L AH0 K\nPOLLS  P OW1 L Z\nPOLLSTER  P OW1 L - S T ER0\nPOLLSTERS  P OW1 L - S T ER0 Z\nPOLLUTANT  P AH0 - L UW1 - T AH0 N T\nPOLLUTANTS  P AH0 - L UW1 - T AH0 N T S\nPOLLUTE  P AH0 - L UW1 T\nPOLLUTED  P AH0 - L UW1 - T AH0 D\nPOLLUTED(2)  P AH0 - L UW1 - T IH0 D\nPOLLUTER  P AH0 - L UW1 - T ER0\nPOLLUTERS  P AH0 - L UW1 - T ER0 Z\nPOLLUTES  P AH0 - L UW1 T S\nPOLLUTING  P AH0 - L UW1 - T IH0 NG\nPOLLUTION  P AH0 - L UW1 - SH AH0 N\nPOLLUX  P AA1 - L AH0 K S\nPOLLY  P AA1 - L IY0\nPOLLY'S  P AA1 - L IY0 Z\nPOLLYANNA  P AA2 - L IY0 - AE1 - N AH0\nPOLO  P OW1 - L OW0\nPOLO'S  P OW1 - L OW0 Z\nPOLONAISE  P AA2 - L AH0 - N EY1 Z\nPOLONIUM  P AH0 - L OW1 - N IY0 - AH0 M\nPOLONSKY  P AH0 - L AA1 N - S K IY0\nPOLS  P OW1 L Z\nPOLSBY  P OW1 L Z - B IY0\nPOLSINELLI  P OW0 L - S IY0 - N EH1 - L IY0\nPOLSKIN  P AA1 L - S K IH0 N\nPOLSKIN(2)  P OW1 L - S K IH0 N\nPOLSKY  P OW1 L - S K IY0\nPOLSON  P OW1 L - S AH0 N\nPOLSTER  P OW1 L - S T ER0\nPOLSTON  P OW1 L - S T AH0 N\nPOLTERGEIST  P OW1 L - T ER0 - G AY2 S T\nPOLTERGEISTS  P OW1 L - T ER0 - G AY2 S T S\nPOLTERGEISTS(2)  P OW1 L - T ER0 - G AY2 S S\nPOLTERGEISTS(3)  P OW1 L - T ER0 - G AY2 S\nPOLTRACK  P OW1 L - T R AE2 K\nPOLUS  P OW1 - L AH0 S\nPOLY  P AA1 - L IY0\nPOLY'S  P AA1 - L IY0 Z\nPOLYACETYLENE  P AA2 - L IY0 - AH0 - S EH1 - T AH0 - L IY2 N\nPOLYAK  P AA1 - L IY0 - AE0 K\nPOLYAMIDE  P AA2 - L IY0 - AE1 - M AY2 D\nPOLYANDROUS  P AA2 - L IY0 - AE1 N - D R AH0 S\nPOLYANDRY  P AA2 - L IY0 - AE1 N - D R IY0\nPOLYBUTYLENE  P AA2 - L IY0 - B Y UW1 - T AH0 - L IY2 N\nPOLYCARPIC  P AA2 - L IH0 - K AA1 R - P IH0 K\nPOLYCARPIC(2)  P AA2 - L IY0 - K AA1 R - P IH0 K\nPOLYCAST  P AA1 - L IY0 - K AE2 S T\nPOLYCHLORINATE  P AA2 - L IY0 - K L AO1 - R IH0 - N EY2 T\nPOLYCHLORINATED  P AA2 - L IY0 - K L AO1 - R IH0 - N EY2 - T IH0 D\nPOLYCHROME  P AA1 - L IH0 - K R OW2 M\nPOLYCHROME(2)  P AA1 - L IY0 - K R OW2 M\nPOLYCONOMICS  P AA2 - L IH0 - K AH0 - N AA1 - M IH0 K S\nPOLYESTER  P AA2 - L IY0 - EH1 - S T ER0\nPOLYESTERS  P AA1 - L IY0 - EH2 - S T ER0 Z\nPOLYETHYLENE  P AA2 - L IY0 - EH1 - TH AH0 - L IY2 N\nPOLYGAMOUS  P AH0 - L IH1 - G AH0 - M AH0 S\nPOLYGAMY  P AH0 - L IH1 - G AH0 - M IY0\nPOLYGLOT  P AA1 - L IY0 - G L AA0 T\nPOLYGON  P AA1 - L IH0 - G AA2 N\nPOLYGON(2)  P AA1 - L IY0 - G AA2 N\nPOLYGONAL  P AH0 - L IH1 - G AH0 - N AH0 L\nPOLYGRAM  P AA1 - L IY0 - G R AE2 M\nPOLYGRAM'S  P AA1 - L IH0 - G R AE2 M Z\nPOLYGRAPH  P AA1 - L IH0 - G R AE2 F\nPOLYGRAPHS  P AA1 - L IY0 - G R AE2 F S\nPOLYGYNOUS  P AH0 - L IH1 - JH AH0 - N AH0 S\nPOLYGYNY  P AH0 - L IH1 - JH AH0 - N IY0\nPOLYHEDRON  P AA2 - L IH0 - HH IY1 - D R AH0 N\nPOLYHEDRON(2)  P AA2 - L IY0 - HH IY1 - D R AH0 N\nPOLYHEDRONS  P AA2 - L IH0 - HH IY1 - D R AH0 N Z\nPOLYHEDRONS(2)  P AA2 - L IY0 - HH IY1 - D R AH0 N Z\nPOLYHEMOGLOBIN  P AA2 - L IH0 - HH AH0 - M AA1 - G L AH0 - B IH0 N\nPOLYHEMOGLOBIN(2)  P AA2 - L IY0 - HH AH0 - M AA1 - G L AH0 - B IH0 N\nPOLYMARKER  P AA2 - L IY0 - M AA1 R - K ER0\nPOLYMARKERS  P AA2 - L IY0 - M AA1 R - K ER0 Z\nPOLYMER  P AA1 - L AH0 - M ER0\nPOLYMERASE  P AA1 - L IH0 - M ER0 - EY2 S\nPOLYMERIZE  P AA1 - L IH0 - M ER0 - AY2 Z\nPOLYMERIZED  P AA1 - L IH0 - M ER0 - AY2 Z D\nPOLYMERIZES  P AA1 - L IH0 - M ER0 - AY2 - Z AH0 Z\nPOLYMERS  P AA1 - L IH0 - M ER0 Z\nPOLYMORPH  P AA1 - L IY0 - M AO2 R F\nPOLYMORPHIC  P AA2 - L IY0 - M AO1 R - F IH0 K\nPOLYMORPHISM  P AA2 - L IY0 - M AO1 R - F IH0 - Z AH0 M\nPOLYMORPHISM(2)  P AA2 - L IY0 - M AO1 R - F IH0 Z M\nPOLYNESIA  P AA2 - L IH0 - N IY1 - ZH AH0\nPOLYNESIAN  P AA2 - L IH0 - N IY1 - ZH AH0 N\nPOLYNOMIAL  P AA2 - L IH0 - N OW1 - M IY0 - AH0 L\nPOLYP  P AA1 - L AH0 P\nPOLYPHASE  P AA1 - L IH0 - F EY2 Z\nPOLYPHONIC  P AA2 - L IH0 - F AA1 - N IH0 K\nPOLYPHONY  P AH0 - L IH1 - F AH0 - N IY0\nPOLYPROPYLENE  P AA2 - L IY0 - P R OW1 - P AH0 - L IY2 N\nPOLYPS  P AA1 - L IH0 P S\nPOLYSACCHARIDE  P AA2 - L IH0 - S AE1 - K ER0 - AY2 D\nPOLYSACCHARIDE(2)  P AA2 - L IY0 - S AE1 - K ER0 - AY2 D\nPOLYSACCHARIDES  P AA2 - L IH0 - S AE1 - K ER0 - AY2 D Z\nPOLYSACCHARIDES(2)  P AA2 - L IY0 - S AE1 - K ER0 - AY2 D Z\nPOLYSAR  P AA1 - L IH0 - S AA0 R\nPOLYSAR'S  P AA1 - L IH0 - S AA0 R Z\nPOLYSILICON  P AA2 - L IY0 - S IH1 - L IH0 - K AA2 N\nPOLYSTYRENE  P AA2 - L IH0 - S T AY1 - R IY2 N\nPOLYSTYRENE(2)  P AA2 - L IY0 - S T AY1 - R IY2 N\nPOLYTECH  P AA2 - L IH0 - T EH1 K\nPOLYTECH(2)  P AA2 - L IY0 - T EH1 K\nPOLYTECHNIC  P AA2 - L IH0 - T EH1 K - N IH0 K\nPOLYTECHNIC(2)  P AA2 - L IY0 - T EH1 K - N IH0 K\nPOLYTECHNOLOGIES  P AA2 - L IY0 - T EH0 K - N AA1 - L AH0 - JH IY0 Z\nPOLYTECHNOLOGY  P AA2 - L IY0 - T EH0 K - N AA1 - L AH0 - JH IY0\nPOLYTHEISM  P AA1 - L IH0 - TH IY0 - IH0 - Z AH0 M\nPOLYTHEISTIC  P AA2 - L IH0 - TH IY0 - IH1 - S T IH0 K\nPOLYURETHANE  P AA2 - L IY0 - UH1 - R AH0 - TH EY2 N\nPOLYVINYL  P AA2 - L IY0 - V AY1 - N AH0 L\nPOLZER  P OW1 L - Z ER0\nPOLZIN  P OW1 L - Z IH0 N\nPOM  P AO1 M\nPOMA  P OW1 - M AH0\nPOMBO  P AA1 M - B OW0\nPOMERANCE  P AA1 - M ER0 - AE1 N S\nPOMERANIA  P AA2 - M ER0 - EY1 - N IY0 - AH0\nPOMERANIAN  P AA2 - M ER0 - EY1 - N IY0 - AH0 N\nPOMERANTZ  P AA1 - M ER0 - AE2 N T S\nPOMERANZ  P AA1 - M ER0 - AE1 N S\nPOMERLEAU  P AA1 - M ER0 - L OW0\nPOMEROY  P AA1 - M ER0 - OY2\nPOMICINO  P OW2 - M IH0 - S IY1 - N OW0\nPOMMEL  P AA1 - M AH0 L\nPOMMER  P AA1 - M ER0\nPOMMIER  P AA1 - M IY0 - ER0\nPOMODORO  P AA2 - M AH0 - D AO1 - R OW0\nPOMOLOGY  P OW0 - M AA1 - L AH0 - JH IY0\nPOMONA  P OW0 - M OW1 - N AH0\nPOMP  P AA1 M P\nPOMPA  P AA1 M - P AH0\nPOMPADUR  P AA1 M - P AH0 - D ER0\nPOMPANO  P AA1 M - P AH0 - N OW2\nPOMPEO  P OW1 M - P IY0 - OW0\nPOMPER  P AA1 M - P ER0\nPOMPEY  P AA1 M - P IY0\nPOMPIDOU  P AA1 M - P IH0 - D UW2\nPOMPILIO  P OW0 M - P IY1 - L IY0 - OW0\nPOMPLUN  P AA1 M - P L AH0 N\nPOMPON  P AA1 M - P AA2 N\nPOMPONIO  P OW0 M - P OW1 - N IY0 - OW0\nPOMPONS  P AA1 M - P AA2 N Z\nPOMPOSITY  P AA2 M - P AA1 - S IH0 - T IY0\nPOMPOUS  P AA1 M - P AH0 S\nPOMPOUSNESS  P AA1 M - P AH0 S - N AH0 S\nPOMRENZE  P AA1 M - R AH0 N Z\nPOMROY  P AA1 M - R OY2\nPON  P AA1 N\nPONCE  P OW1 N - S EY0\nPONCE(2)  P AA1 N S\nPONCET  P AA1 N - S AH0 T\nPONCHAN  P AA1 N - CH AH0 N\nPONCHO  P AA1 N - CH OW0\nPONCHOS  P AA1 N - CH OW0 Z\nPOND  P AA1 N D\nPOND'S  P AA1 N D Z\nPONDER  P AA1 N - D ER0\nPONDERED  P AA1 N - D ER0 D\nPONDERING  P AA1 N - D ER0 - IH0 NG\nPONDEROSA  P AA2 N - D ER0 - OW1 - S AH0\nPONDEROSA'S  P AA2 N - D ER0 - OW1 - S AH0 Z\nPONDEROUS  P AA1 N - D ER0 - AH0 S\nPONDERS  P AA1 N - D ER0 Z\nPONDS  P AA1 N D Z\nPONG  P AO1 NG\nPONGRATZ  P AA1 NG - G R AH0 T S\nPONIATOWSKI  P AH0 - N IY0 - AH0 - T AO1 F S - K IY0\nPONIED  P OW1 - N IY0 D\nPONIES  P OW1 - N IY0 Z\nPONS  P AA1 N Z\nPONSOLLE  P AA1 N - S OW0 L\nPONT  P AA1 N T\nPONT'S  P AA1 N T S\nPONTARELLI  P OW0 N - T AA0 - R EH1 - L IY0\nPONTBRIAND  P AA1 N T - B R IY0 - AH0 N D\nPONTE  P AA1 N T\nPONTES  P OW1 N - T EH0 S\nPONTI  P AA1 N - T IY0\nPONTIAC  P AA1 N - T IY0 - AE2 K\nPONTIAC'S  P AA1 N - T IY0 - AE2 K S\nPONTIAC'S(2)  P AA1 - N IY0 - AE2 K S\nPONTIAC(2)  P AA1 - N IY0 - AE2 K\nPONTIACS  P AA1 N - T IY0 - AE2 K S\nPONTIACS(2)  P AA1 - N IY0 - AE2 K S\nPONTIFF  P AA1 N - T AH0 F\nPONTIFF'S  P AA1 N - T AH0 F S\nPONTIFF(2)  P AA1 N - T IH0 F\nPONTIFICAL  P AA0 N - T IH1 - F AH0 - K AH0 L\nPONTIFICATE  P AA0 N - T IH1 - F AH0 - K EY2 T\nPONTIFICATED  P AA0 N - T IH1 - F AH0 - K EY2 - T IH0 D\nPONTIFICATER  P AA0 N - T IH1 - F AH0 - K EY2 - T ER0\nPONTIFICATERS  P AA0 N - T IH1 - F AH0 - K EY2 - T ER0 Z\nPONTIFICATES  P AA0 N - T IH1 - F AH0 - K EY2 T S\nPONTIFICATING  P AA0 N - T IH1 - F AH0 - K EY2 - T IH0 NG\nPONTIFICATION  P AA0 N - T IH2 - F AH0 - K EY1 - SH AH0 N\nPONTIFICATIONS  P AA0 N - T IH2 - F AH0 - K EY1 - SH AH0 N Z\nPONTIKES  P AA2 N - T IY1 - K EH2 Z\nPONTILLO  P OW0 N - T IH1 - L OW0\nPONTIOUS  P OW1 N - SH IH0 S\nPONTIUS  P AA1 N - T IY0 - IH0 S\nPONTO  P AA1 N - T OW0\nPONTON  P AA1 N - T AH0 N\nPONTOON  P AA0 N - T UW1 N\nPONTOONS  P AA2 N - T UW1 N Z\nPONTS  P AA1 N T S\nPONY  P OW1 - N IY0\nPONYTAIL  P OW1 - N IY0 - T EY2 L\nPONZETTI  P AA0 N - Z EH1 - T IY0\nPONZI  P AA1 N - Z IY0\nPONZIO  P AA1 N - Z IY0 - OW0\nPONZO  P AA1 N - Z OW0\nPOO  P UW1\nPOOCH  P UW1 CH\nPOOCHES  P UW1 - CH IH0 Z\nPOODLE  P UW1 - D AH0 L\nPOODLES  P UW1 - D AH0 L Z\nPOOF  P UW1 F\nPOOH  P UW1\nPOOHED  P UW1 D\nPOOL  P UW1 L\nPOOL'S  P UW1 L Z\nPOOL-SIDE  P UW1 L - S AY1 D\nPOOLE  P UW1 L\nPOOLED  P UW1 L D\nPOOLER  P UW1 - L ER0\nPOOLEY  P UW1 - L IY0\nPOOLING  P UW1 - L IH0 NG\nPOOLS  P UW1 L Z\nPOOLSIDE  P UW1 L - S AY2 D\nPOON  P UW1 N\nPOOP  P UW1 P\nPOOPED  P UW1 P T\nPOOPER  P UW1 - P ER0\nPOOPERS  P UW1 - P ER0 Z\nPOOPS  P UW1 P S\nPOOR  P UH1 R\nPOOR'S  P UH1 R Z\nPOOR-SPIRITED  P UH1 R - S P IH1 - R IH0 - T IH0 D\nPOOR-SPIRITEDNESS  P UH1 R - S P IH1 - R IH0 - T IH0 D - N AH0 S\nPOORBAUGH  P UH1 R - B AO0\nPOORE  P UH1 R\nPOORER  P UH1 - R ER0\nPOOREST  P UH1 - R IH0 S T\nPOORHOUSE  P UH1 R - HH AW2 S\nPOORLY  P UH1 R - L IY0\nPOORMAN  P UH1 R - M AH0 N\nPOORS  P UH1 R Z\nPOORS(2)  P AO1 R Z\nPOOSER  P UW1 - Z ER0\nPOOVEY  P UW1 - V IY0\nPOP  P AA1 P\nPOP'S  P AA1 P S\nPOPA  P OW1 - P AH0\nPOPCORN  P AA1 P - K AO2 R N\nPOPE  P OW1 P\nPOPE'S  P OW1 P S\nPOPEIL  P OW2 - P IY1 L\nPOPEJOY  P OW1 P - JH OY2\nPOPEJOY'S  P OW1 P - JH OY2 Z\nPOPEK  P OW1 - P IH0 K\nPOPELKA  P AH0 - P EH1 L - K AH0\nPOPES  P OW1 P Z\nPOPEYE  P AA1 - P AY2\nPOPEYE'S  P AA1 - P AY2 Z\nPOPEYES  P AO1 - P AY2 Z\nPOPHAM  P AA1 - F AH0 M\nPOPICK  P AA1 - P IH0 K\nPOPIEL  P AA1 - P IY0 L\nPOPIELUSZKO  P OW0 - P IY2 - EH0 - L AH1 - S K OW0\nPOPIK  P OW1 - P IH0 K\nPOPKEN  P AA1 P - K AH0 N\nPOPKIN  P AA1 P - K IH0 N\nPOPKO  P OW1 P - K OW0\nPOPLAR  P AA1 P - L ER0\nPOPLAWSKI  P AH0 - P L AA1 F - S K IY0\nPOPLIN  P AA1 P - L IH0 N\nPOPOFF  P AA1 P - AO2 F\nPOPOLARE  P AA2 - P OW0 - L AA1 - R IY0\nPOPOV  P OW1 - P AH0 V\nPOPOVIC  P AA1 - P AH0 - V IH0 K\nPOPOVICH  P AA1 - P AH0 - V IH0 CH\nPOPOWSKI  P AH0 - P AO1 F S - K IY0\nPOPP  P AA1 P\nPOPPA  P AA1 - P AH0\nPOPPE  P AA1 P\nPOPPEA  P AA1 - P IY0 - AH0\nPOPPED  P AA1 P T\nPOPPELL  P AA1 - P AH0 L\nPOPPEN  P AA1 - P AH0 N\nPOPPER  P AA1 - P ER0\nPOPPERS  P AA1 - P ER0 Z\nPOPPIES  P AA1 - P IY0 Z\nPOPPING  P AA1 - P IH0 NG\nPOPPINS  P AA1 - P IH0 N Z\nPOPPLE  P AA1 - P AH0 L\nPOPPLETON  P AA1 - P AH0 L - T AA0 N\nPOPPLEWELL  P AA1 - P AH0 L - W EH0 L\nPOPPY  P AA1 - P IY0\nPOPPY'S  P AA1 - P IY0 Z\nPOPPYCOCK  P AA1 - P IY0 - K AO2 K\nPOPS  P AA1 P S\nPOPSICLE  P AA1 P - S IH0 - K AH0 L\nPOPULACE  P AA1 - P Y AH0 - L AH0 S\nPOPULAR  P AA1 - P Y AH0 - L ER0\nPOPULARITY  P AA2 - P Y AH0 - L EH1 - R AH0 - T IY0\nPOPULARIZATION  P AA2 - P Y AH0 - L ER0 - AH0 - Z EY1 - SH AH0 N\nPOPULARIZE  P AA1 - P Y AH0 - L ER0 - AY2 Z\nPOPULARIZED  P AA1 - P Y AH0 - L ER0 - AY2 Z D\nPOPULARIZER  P AA1 - P Y AH0 - L ER0 - AY2 - Z ER0\nPOPULARIZING  P AA1 - P Y AH0 - L ER0 - AY2 - Z IH0 NG\nPOPULARLY  P AA1 - P Y AH0 - L ER0 - L IY0\nPOPULATE  P AA1 - P Y AH0 - L EY2 T\nPOPULATED  P AA1 - P Y AH0 - L EY2 - T AH0 D\nPOPULATING  P AA1 - P Y AH0 - L EY2 - T IH0 NG\nPOPULATION  P AA2 - P Y AH0 - L EY1 - SH AH0 N\nPOPULATIONS  P AA2 - P Y AH0 - L EY1 - SH AH0 N Z\nPOPULISM  P AA1 - P Y AH0 - L IH2 - Z AH0 M\nPOPULIST  P AA1 - P Y AH0 - L AH0 S T\nPOPULISTS  P AA1 - P Y AH0 - L IH0 S T S\nPOPULISTS(2)  P AA1 - P Y AH0 - L IH0 S S\nPOPULISTS(3)  P AA1 - P Y AH0 - L IH0 S\nPOPULOUS  P AA1 - P Y AH0 - L AH0 S\nPOPWELL  P AA1 P - W EH2 L\nPOQUETTE  P AH0 - K EH1 T\nPOR  P AO1 R\nPORADA  P AO0 - R AA1 - D AH0\nPORATH  P AO1 - R AH0 TH\nPORCARO  P AO0 R - K AA1 - R OW0\nPORCELAIN  P AO1 R - S AH0 - L AH0 N\nPORCELAINS  P AO1 R - S AH0 - L AH0 N Z\nPORCELLA  P AO0 R - CH EH1 - L AH0\nPORCELLI  P AO0 R - CH EH1 - L IY0\nPORCELLO  P AO0 R - CH EH1 - L OW0\nPORCH  P AO1 R CH\nPORCHER  P AO1 R - CH ER0\nPORCHER(2)  P AO2 R - SH EY1\nPORCHES  P AO1 R - CH AH0 Z\nPORCHES(2)  P AO1 R - CH IH0 Z\nPORCHIA  P AO1 R - K IY0 - AH0\nPORCO  P AO1 R - K OW0\nPORCUPINE  P AO1 R - K Y AH0 - P AY2 N\nPORCUPINES  P AO1 R - K Y AH0 - P AY2 N Z\nPORDY  P AO1 R - D IY0\nPORE  P AO1 R\nPORED  P AO1 R D\nPOREMBA  P AO0 - R EH1 M - B AH0\nPORES  P AO1 R Z\nPORGES  P AO1 R - JH IH0 Z\nPORGY  P AO1 R - G IY0\nPORING  P AO1 - R IH0 NG\nPORK  P AO1 R K\nPORKY  P AO1 R - K IY0\nPORN  P AO1 R N\nPORNO  P AO1 R - N OW0\nPORNOGRAPHER  P AO2 R - N AA1 - G R AH0 - F ER0\nPORNOGRAPHERS  P AO2 R - N AA1 - G R AH0 - F ER0 Z\nPORNOGRAPHIC  P AO2 R - N AH0 - G R AE1 - F IH0 K\nPORNOGRAPHY  P AO0 R - N AA1 - G R AH0 - F IY0\nPOROUS  P AO1 - R AH0 S\nPORPHYRITIC  P AO2 R - F ER0 - IH1 - T IH0 K\nPORPHYRY  P AO1 R - F ER0 - IY0\nPORPOISE  P AO1 R - P AH0 S\nPORPOISES  P AO1 R - P AH0 - S AH0 Z\nPORR  P AO1 R\nPORRAS  P AO1 - R AA0 Z\nPORRAZZO  P AO0 - R AA1 - Z OW0\nPORRECA  P AO0 - R EH1 - K AH0\nPORRETTA  P AO0 - R EH1 - T AH0\nPORRIDGE  P AO1 - R AH0 JH\nPORRITT  P AO1 - R IH0 T\nPORRO  P AO1 - R OW0\nPORSCHE  P AO1 R - SH AH0\nPORSCHE'S  P AO1 R - SH AH0 Z\nPORSCHE'S(2)  P AO1 R - SH IH0 Z\nPORSCHE(2)  P AO1 R SH\nPORSCHES  P AO1 R - SH IH0 Z\nPORT  P AO1 R T\nPORT'S  P AO1 R T S\nPORT-VICTORIA  P AO1 R T - V IH0 K - T AO1 - R IY0 - AH0\nPORTA  P AO1 R - T AH0\nPORTABILITY  P AO2 R - T AH0 - B IH1 - L IH0 - T IY0\nPORTABLE  P AO1 R - T AH0 - B AH0 L\nPORTABLES  P AO1 R - T AH0 - B AH0 L Z\nPORTAGE  P AO1 R - T AH0 JH\nPORTAGE(2)  P AO1 R - T IH0 JH\nPORTAL  P AO1 R - T AH0 L\nPORTALES  P AO0 R - T AA1 - L EH0 S\nPORTALS  P AO1 R - T AH0 L Z\nPORTANOVA  P AO0 R - T AA0 - N OW1 - V AH0\nPORTE  P AO1 R T\nPORTEC  P AO1 R - T EH2 K\nPORTEC'S  P AO1 R - T EH2 K S\nPORTED  P AO1 R - T IH0 D\nPORTEE  P AO1 R - T IY1\nPORTELA  P AO0 R - T EH1 - L AH0\nPORTELL  P AO0 R - T EY1 L\nPORTELLI  P AO0 R - T EH1 - L IY0\nPORTEND  P AO0 R - T EH1 N D\nPORTENDING  P AO0 R - T EH1 N - D IH0 NG\nPORTENDS  P AO0 R - T EH1 N D Z\nPORTENT  P AO1 R - T EH0 N T\nPORTENTOUS  P AO0 R - T EH1 N - T AH0 S\nPORTENTS  P AO1 R - T EH2 N T S\nPORTEOUS  P AO1 R - T IY0 - IH0 S\nPORTER  P AO1 R - T ER0\nPORTER'S  P AO1 R - T ER0 Z\nPORTERA  P AO0 R - T EH1 - R AH0\nPORTERAGES  P AO1 R - T ER0 - IH0 - JH IH0 Z\nPORTERFIELD  P AO1 R - T ER0 - F IY2 L D\nPORTERS  P AO1 R - T ER0 Z\nPORTFOLIO  P AO0 R T - F OW1 - L IY0 - OW2\nPORTFOLIO'S  P AO0 R T - F OW1 - L IY0 - OW2 Z\nPORTFOLIOS  P AO0 R T - F OW1 - L IY0 - OW2 Z\nPORTH  P AO1 R TH\nPORTIA  P AO1 R - SH AH0\nPORTICO  P AO1 R - T AH0 - K OW2\nPORTIER  P AO1 R - T IY0 - ER0\nPORTILLA  P AO2 R - T IH1 - L AH0\nPORTILLO  P AO2 R - T IH1 - L OW0\nPORTING  P AO1 R - T IH0 NG\nPORTION  P AO1 R - SH AH0 N\nPORTIONS  P AO1 R - SH AH0 N Z\nPORTIS  P AO1 R - T IH0 S\nPORTLAND  P AO1 R T - L AH0 N D\nPORTLAND'S  P AO1 R T - L AH0 N D Z\nPORTLOCK  P AO1 R T - L AA2 K\nPORTLY  P AO1 R T - L IY0\nPORTMAN  P AO1 R T - M AH0 N\nPORTNER  P AO1 R T - N ER0\nPORTNEY  P AO1 R T - N IY0\nPORTNOY  P AO1 R T - N OY0\nPORTO  P AO1 R - T OW0\nPORTRAIT  P AO1 R - T R AH0 T\nPORTRAITS  P AO1 R - T R AH0 T S\nPORTRAY  P AO0 R - T R EY1\nPORTRAYAL  P AO0 R - T R EY1 - AH0 L\nPORTRAYALS  P AO0 R - T R EY1 - AH0 L Z\nPORTRAYED  P AO0 R - T R EY1 D\nPORTRAYING  P AO0 R - T R EY1 - IH0 NG\nPORTRAYS  P AO0 R - T R EY1 Z\nPORTS  P AO1 R T S\nPORTSMOUTH  P AO1 R T S - M AH0 TH\nPORTUGAL  P AO1 R - CH AH0 - G AH0 L\nPORTUGAL'S  P AO1 R - CH AH0 - G AH0 L Z\nPORTUGALIA  P AO2 R - CH UW1 - G EY1 - L IY0 - AH0\nPORTUGUESE  P AO1 R - CH AH0 - G IY2 Z\nPORTWOOD  P AO1 R T - W UH2 D\nPORTZ  P AO1 R T S\nPORZIO  P AO1 R - Z IY0 - OW0\nPOS  P AA1 S\nPOS(2)  P IY1 - OW1 - EH1 S\nPOSA  P OW1 - S AH0\nPOSADA  P OW0 - S AA1 - D AH0\nPOSAVINA  P OW0 - S AH0 - V IY1 - N AH0\nPOSAVINA(2)  P AO0 - S AH0 - V IY1 - N AH0\nPOSCH  P AO1 SH\nPOSCO  P AO1 - S K OW0\nPOSE  P OW1 Z\nPOSED  P OW1 Z D\nPOSEIDON  P AH0 - S AY1 - D AH0 N\nPOSEIDON'S  P AH0 - S AY1 - D AH0 N Z\nPOSEN  P OW1 - Z AH0 N\nPOSER  P OW1 - Z ER0\nPOSES  P OW1 - Z AH0 Z\nPOSES(2)  P OW1 - Z IH0 Z\nPOSEY  P OW1 - Z IY0\nPOSH  P AA1 SH\nPOSHARD  P AA1 - SH ER0 D\nPOSING  P OW1 - Z IH0 NG\nPOSIT  P AA1 - Z AH0 T\nPOSITED  P AA1 - Z AH0 - T AH0 D\nPOSITION  P AH0 - Z IH1 - SH AH0 N\nPOSITIONED  P AH0 - Z IH1 - SH AH0 N D\nPOSITIONING  P AH0 - Z IH1 - SH AH0 N - IH0 NG\nPOSITIONS  P AH0 - Z IH1 - SH AH0 N Z\nPOSITIVE  P AA1 - Z AH0 - T IH0 V\nPOSITIVELY  P AA1 - Z AH0 - T IH0 V - L IY0\nPOSITIVES  P AA1 - Z AH0 - T IH0 V Z\nPOSITIVISM  P AA1 - Z AH0 - T IH0 - V IH2 - Z AH0 M\nPOSITRON  P AA1 - Z AH0 - T R AA2 N\nPOSITRONS  P AA1 - Z AH0 - T R AA2 N Z\nPOSITS  P AA1 - Z AH0 T S\nPOSLUNS  P AO1 Z - L AH0 N Z\nPOSLUSZNY  P AH0 S - L AH1 SH - N IY0\nPOSNER  P OW1 Z - N ER0\nPOSNER'S  P OW1 Z - N ER0 Z\nPOSNER'S(2)  P AO1 Z - N ER0 Z\nPOSNER(2)  P AO1 Z - N ER0\nPOSNERS  P OW1 Z - N ER0 Z\nPOSNERS(2)  P AO1 Z - N ER0 Z\nPOSNICK  P AO1 S - N IH0 K\nPOSPISIL  P OW0 S - P IY0 - S IY1 L\nPOSS  P AO1 S\nPOSSE  P AA1 - S IY0\nPOSSEHL  P AA1 - S AH0 L\nPOSSES  P AA1 - S IY0 Z\nPOSSESS  P AH0 - Z EH1 S\nPOSSESSED  P AH0 - Z EH1 S T\nPOSSESSES  P AH0 - Z EH1 - S AH0 Z\nPOSSESSES(2)  P AH0 - Z EH1 - S IH0 Z\nPOSSESSING  P AH0 - Z EH1 - S IH0 NG\nPOSSESSION  P AH0 - Z EH1 - SH AH0 N\nPOSSESSIONS  P AH0 - Z EH1 - SH AH0 N Z\nPOSSESSIVE  P AH0 - Z EH1 - S IH0 V\nPOSSESSIVENESS  P AH0 - Z EH1 - S IH0 V - N AH0 S\nPOSSESSOR  P AH0 - Z EH1 - S ER0\nPOSSIBILITIES  P AA2 - S AH0 - B IH1 - L AH0 - T IY0 Z\nPOSSIBILITY  P AA2 - S AH0 - B IH1 - L AH0 - T IY0\nPOSSIBLE  P AA1 - S AH0 - B AH0 L\nPOSSIBLY  P AA1 - S AH0 - B L IY0\nPOSSUM  P AA1 - S AH0 M\nPOSSUMS  P AA1 - S AH0 M Z\nPOST  P OW1 S T\nPOST'S  P OW1 S T S\nPOST-ATTACK  P OW1 - S T AH0 - T AE1 K\nPOSTAGE  P OW1 - S T AH0 JH\nPOSTAGE(2)  P OW1 - S T IH0 JH\nPOSTAL  P OW1 - S T AH0 L\nPOSTAL'S  P OW1 - S T AH0 L Z\nPOSTCARD  P OW1 S T - K AA2 R D\nPOSTCARD(2)  P OW1 S - K AA2 R D\nPOSTCARDS  P OW1 S T - K AA2 R D Z\nPOSTCARDS(2)  P OW1 S - K AA2 R D Z\nPOSTCRASH  P OW1 S T - K R AE2 SH\nPOSTDATE  P OW2 S T - D EY1 T\nPOSTDOCTORAL  P OW2 S T - D AA1 K - T ER0 - AH0 L\nPOSTED  P OW1 - S T IH0 D\nPOSTEL  P AA1 - S T AH0 L\nPOSTELL  P AA1 - S T AH0 L\nPOSTEMA  P AA0 - S T EH1 - M AH0\nPOSTEN  P OW1 - S T AH0 N\nPOSTER  P OW1 - S T ER0\nPOSTERARO  P AO2 - S T EH0 - R AA1 - R OW0\nPOSTERIOR  P AO2 - S T IH1 - R IY0 - EH0 R\nPOSTERITY  P AA0 - S T EH1 - R AH0 - T IY0\nPOSTERS  P OW1 - S T ER0 Z\nPOSTGAME  P OW2 S T - G EY1 M\nPOSTHOLE  P OW1 S T - HH OW2 L\nPOSTHOLES  P OW1 S T - HH OW2 L Z\nPOSTHUMOUS  P AA1 - S CH UH0 - M AH0 S\nPOSTHUMOUSLY  P AA1 - S CH UH0 - M AH0 S - L IY0\nPOSTING  P OW1 - S T IH0 NG\nPOSTINGS  P OW1 - S T IH0 NG Z\nPOSTINO  P AO0 - S T IY1 - N OW0\nPOSTIPANKKI  P AO2 - S T IH0 - P AE1 NG - K IY0\nPOSTLE  P AA1 - S AH0 L\nPOSTLETHWAIT  P OW1 - S T AH0 L TH - W EY0 T\nPOSTLEWAIT  P AA1 - S T AH0 L - W EY0 T\nPOSTLEWAITE  P OW1 - S T AH0 L - W EY0 T\nPOSTMA  P OW1 S T - M AH0\nPOSTMAN  P OW1 S T - M AH0 N\nPOSTMAN(2)  P OW1 S - M AH0 N\nPOSTMARK  P OW1 S T - M AA2 R K\nPOSTMARKED  P OW1 S T - M AA2 R K T\nPOSTMARKED(2)  P OW1 S - M AA2 R K T\nPOSTMASTER  P OW1 S T - M AE2 - S T ER0\nPOSTMASTER(2)  P OW1 S - M AE2 - S T ER0\nPOSTMASTERS  P OW1 S T - M AE2 - S T ER0 Z\nPOSTMASTERS(2)  P OW1 S - M AE2 - S T ER0 Z\nPOSTMODERN  P OW0 S T - M AA1 - D ER0 N\nPOSTMORTEM  P OW0 S T - M AO1 R - T EH0 M\nPOSTNATAL  P OW1 S T - N EY1 - T AH0 L\nPOSTON  P OW1 - S T AH0 N\nPOSTPONE  P OW0 S T - P OW1 N\nPOSTPONE(2)  P OW0 - S P OW1 N\nPOSTPONED  P OW0 S T - P OW1 N D\nPOSTPONED(2)  P OW0 - S P OW1 N D\nPOSTPONEMENT  P OW0 S T - P OW1 N - M AH0 N T\nPOSTPONEMENT(2)  P OW0 - S P OW1 N - M AH0 N T\nPOSTPONEMENTS  P OW0 S T - P OW1 N - M AH0 N T S\nPOSTPONEMENTS(2)  P OW0 - S P OW1 N - M AH0 N T S\nPOSTPONES  P OW0 S T - P OW1 N Z\nPOSTPONES(2)  P OW0 - S P OW1 N Z\nPOSTPONING  P OW0 S T - P OW1 - N IH0 NG\nPOSTPONING(2)  P OW0 - S P OW1 - N IH0 NG\nPOSTREL  P AO1 - S T R EH0 L\nPOSTRELLE  P OW2 S - T R EH1 L\nPOSTRETIREMENT  P OW2 S - T R IY0 - T AY1 - ER0 - M AH0 N T\nPOSTS  P OW1 S T S\nPOSTS(2)  P OW1 S S\nPOSTS(3)  P OW1 S\nPOSTSCRIPT  P OW1 S - K R IH2 P T\nPOSTSCRIPT(2)  P OW1 S T - S K R IH2 P T\nPOSTSCRIPTS  P OW1 S - K R IH2 P T S\nPOSTSCRIPTS(2)  P OW1 S T - S K R IH2 P T S\nPOSTSCRIPTS(3)  P OW1 S - K R IH2 P S\nPOSTSCRIPTS(4)  P OW1 S T - S K R IH2 P S\nPOSTTRAUMATIC  P OW2 S T - T R AO0 - M AE1 - T IH0 K\nPOSTTRAUMATIC(2)  P OW2 S T - R AO0 - M AE1 - T IH0 K\nPOSTULATE  P AA1 - S CH AH0 - L EY2 T\nPOSTULATE(2)  P AA1 - S CH AH0 - L AH0 T\nPOSTULATES  P AA1 - S CH AH0 - L EY2 T S\nPOSTULATES(2)  P AA1 - S CH AH0 - L AH0 T S\nPOSTURE  P AA1 S - CH ER0\nPOSTURES  P AA1 S - CH ER0 Z\nPOSTURING  P AA1 S - CH ER0 - IH0 NG\nPOSTURINGS  P AA1 S - CH ER0 - IH0 NG Z\nPOSTWAR  P OW1 S T - W AO1 R\nPOT  P AA1 T\nPOTABLE  P OW1 - T AH0 - B AH0 L\nPOTAMKIN  P OW1 - T AE2 M - K IH0 N\nPOTAPOV  P AA1 T - AH0 - P AA2 V\nPOTASH  P AA1 T - AE2 SH\nPOTASSIUM  P AH0 - T AE1 - S IY0 - AH0 M\nPOTATO  P AH0 - T EY1 - T OW2\nPOTATOES  P AH0 - T EY1 - T OW0 Z\nPOTE  P OW1 T\nPOTEAT  P OW0 - T IY1 T\nPOTEET  P AA1 - T IY0 T\nPOTEETE  P AA1 - T IY0 T\nPOTEMKIN  P AH0 - T EH1 M - K IH0 N\nPOTEMPA  P OW0 - T EH1 M - P AH0\nPOTENCY  P OW1 - T AH0 N - S IY0\nPOTENT  P OW1 - T AH0 N T\nPOTENTATE  P OW1 - T AH0 N - T EY2 T\nPOTENTATES  P OW1 - T AH0 N - T EY2 T S\nPOTENTIAL  P AH0 - T EH1 N - SH AH0 L\nPOTENTIAL(2)  P AH0 - T EH1 N - CH AH0 L\nPOTENTIALLY  P AH0 - T EH1 N - SH AH0 - L IY0\nPOTENTIALLY(2)  P AH0 - T EH1 N - CH AH0 - L IY0\nPOTENTIALS  P AH0 - T EH1 N - CH AH0 L Z\nPOTENTIALS(2)  P AH0 - T EH1 N - SH AH0 L Z\nPOTENZA  P OW0 - T EH1 N - Z AH0\nPOTH  P AA1 TH\nPOTHIER  P OW1 - TH IY0 - ER0\nPOTHITOS  P AH0 - TH IY1 - T OW0 S\nPOTHOLE  P AA1 T - HH OW2 L\nPOTHOLED  P AA1 T - HH OW2 L D\nPOTHOLES  P AA1 T - HH OW2 L Z\nPOTIER  P OW1 - T IY0 - ER0\nPOTIKER  P OW1 - T IH0 - K ER0\nPOTION  P OW1 - SH AH0 N\nPOTIONS  P OW1 - SH AH0 N Z\nPOTLATCH  P AA1 T - L AE2 CH\nPOTLUCK  P AA1 T - L AH2 K\nPOTOCKI  P AH0 - T OW1 T - S K IY0\nPOTOMAC  P AH0 - T OW1 - M AH0 K\nPOTPIE  P AA1 T - P AY2\nPOTPOURRI  P OW2 - P UH0 - R IY1\nPOTRATZ  P AA1 - T R AH0 T S\nPOTS  P AA1 T S\nPOTSDAM  P AA1 T - S D AE2 M\nPOTSHOT  P AA1 - SH AA2 T\nPOTSHOTS  P AA1 - CH AA2 T S\nPOTT  P AA1 T\nPOTTEBAUM  P AA1 T - B AW0 M\nPOTTED  P AA1 - T IH0 D\nPOTTEIGER  P AA1 - T AY0 - G ER0\nPOTTENGER  P AA1 - T IH0 N - JH ER0\nPOTTER  P AA1 - T ER0\nPOTTER'S  P AA1 - T ER0 Z\nPOTTERS  P AA1 - T ER0 Z\nPOTTERY  P AA1 - T ER0 - IY0\nPOTTHAST  P AA1 - TH AH0 S T\nPOTTHOFF  P AA1 T - HH AO2 F\nPOTTHURST  P AA1 T - HH ER0 S T\nPOTTINGER  P AA1 - T IH0 - NG ER0\nPOTTLE  P AA1 - T AH0 L\nPOTTORFF  P AA1 - T ER0 F\nPOTTS  P AA1 T S\nPOTTY  P AA1 - T IY0\nPOTUCEK  P AA1 - T AH0 - CH EH0 K\nPOTVIN  P AA1 T - V IH0 N\nPOU  P UW1\nPOUCH  P AW1 CH\nPOUCHER  P AW1 - CH ER0\nPOUCHES  P AW1 - CH AH0 Z\nPOUDRIER  P AW1 - D ER0 - IY0 - ER0\nPOUGH  P AW1\nPOUGHKEEPSIE  P AH0 - K IH1 P - S IY0\nPOUGHKEEPSIE'S  P AH0 - K IH1 P - S IY0 Z\nPOUL  P UW1 L\nPOULENC  P UW1 - L AH0 NG K\nPOULENC'S  P UW1 - L AH0 NG K S\nPOULIN  P UW0 - L AE1 N\nPOULIOT  P UW1 - L IY0 - OW0\nPOULOS  P AH0 - L IY1 S\nPOULSEN  P AW1 L - S AH0 N\nPOULSON  P AW1 L - S AH0 N\nPOULTER  P OW1 L - T ER0\nPOULTICE  P OW1 L - T AH0 S\nPOULTICES  P OW1 L - T AH0 - S IH0 Z\nPOULTON  P AW1 L - T AH0 N\nPOULTRY  P OW1 L - T R IY0\nPOUNCE  P AW1 N S\nPOUNCED  P AW1 N S T\nPOUNCEY  P AW1 N - S IY0\nPOUNCING  P AW1 N - S IH0 NG\nPOUNCY  P UW0 NG - K IY1\nPOUND  P AW1 N D\nPOUND'S  P AW1 N D Z\nPOUND'S(2)  P AW1 N Z\nPOUNDAGE  P AW1 N - D IH0 JH\nPOUNDED  P AW1 N - D IH0 D\nPOUNDER  P AW1 N - D ER0\nPOUNDERS  P AW1 N - D ER0 Z\nPOUNDING  P AW1 N - D IH0 NG\nPOUNDS  P AW1 N D Z\nPOUNDS(2)  P AW1 N Z\nPOUNDSTONE  P AW1 N D - S T OW2 N\nPOUPARD  P UW1 - P ER0 D\nPOUR  P AO1 R\nPOURCIAU  P AO1 R - S IY0 - OW0\nPOURED  P AO1 R D\nPOURING  P AO1 - R IH0 NG\nPOURS  P AO1 R Z\nPOUSSAINT  P UW2 - S AA1 N T\nPOUSSANT  P UW1 - S AH0 N T\nPOUSSIN  P UW1 - S IH0 N\nPOUSSON  P UW2 - S AA1 N\nPOUST  P AW1 S T\nPOUT  P AW1 T\nPOUTED  P AW1 - T IH0 D\nPOUTER  P AW1 - T ER0\nPOUTING  P AW1 - T IH0 NG\nPOUTRE  P AW1 - T ER0\nPOUTS  P AW1 T S\nPOUTY  P AW1 - T IY0\nPOVEROMO  P OW2 - V EH0 - R OW1 - M OW0\nPOVERTY  P AA1 - V ER0 - T IY0\nPOVICH  P OW1 - V IH0 CH\nPOVICH'S  P OW1 - V IH0 - CH IH0 Z\nPOW  P AW1\nPOWALSKY  P OW0 - AE1 L - S K IY0\nPOWDER  P AW1 - D ER0\nPOWDERED  P AW1 - D ER0 D\nPOWDERING  P AW1 - D ER0 - IH0 NG\nPOWDERLY  P AW1 - D ER0 - L IY0\nPOWDERS  P AW1 - D ER0 Z\nPOWDERY  P AW1 - D ER0 - IY0\nPOWE  P AW1\nPOWELL  P AW1 - AH0 L\nPOWELL'S  P OW1 - IH0 L Z\nPOWELSON  P AW1 - AH0 L - S AH0 N\nPOWER  P AW1 - ER0\nPOWER'S  P AW1 - ER0 Z\nPOWERBALL  P AW1 - ER0 - B AO2 L\nPOWERBOAT  P AW1 - ER0 - B OW2 T\nPOWERBOOK  P AW1 - ER0 - B UH2 K\nPOWERCISE  P AW1 R - S AY2 Z\nPOWERED  P AW1 - ER0 D\nPOWERFUL  P AW1 - ER0 - F AH0 L\nPOWERFULLY  P AW1 - ER0 F - L IY0\nPOWERGEN  P AW1 - ER0 - JH EH2 N\nPOWERHOUSE  P AW1 - ER0 - HH AW2 S\nPOWERHOUSES  P AW1 - ER0 - HH AW2 - S IH0 Z\nPOWERING  P AW1 - ER0 - IH0 NG\nPOWERLESS  P AW1 - ER0 - L AH0 S\nPOWERLESSNESS  P AW1 - ER0 - L AH0 S - N AH0 S\nPOWERPC  P AW1 - ER0 - P IY1 - S IY1\nPOWERPCS  P AW1 - ER0 - P IY1 - S IY1 Z\nPOWERPCS'  P AW1 - ER0 - P IY1 - S IY1 Z\nPOWERS  P AW1 - ER0 Z\nPOWERS'  P AW1 - ER0 Z\nPOWERSOFT  P AW1 - ER0 - S AA2 F T\nPOWERTRAIN  P AW1 R - T R EY2 N\nPOWIS  P AW1 - IH0 S\nPOWLES  P AW1 - AH0 L Z\nPOWLESS  P AW1 - L IH0 S\nPOWLEY  P AW1 - L IY0\nPOWNALL  P AW1 - N AH0 L\nPOWS  P OW1 Z\nPOWTER  P AW1 - T ER0\nPOWWOW  P AW1 - W AW2\nPOX  P AA1 K S\nPOYER  P OY1 - ER0\nPOYNER  P OY1 - N ER0\nPOYNOR  P OY1 - N ER0\nPOYNTER  P OY1 N - T ER0\nPOYNTON  P OY1 N - T AH2 N\nPOYSER  P OY1 - S ER0\nPOYTHRESS  P OY1 TH - R IH0 S\nPOZNAN  P AA1 Z - N AH0 N\nPOZNANSKI  P AH0 Z - N AE1 N S - K IY0\nPOZNER  P AA1 Z - N ER0\nPOZNIAK  P AA1 Z - N IY0 - AE0 K\nPOZNIKOV  P AA1 Z - N IH0 - K AA2 V\nPOZO  P OW1 - Z OW0\nPOZOS  P OW1 - Z OW0 S\nPOZZI  P AA1 - Z IY0\nPPM  P IY1 - P IY1 - EH1 M\nPRAB  P R AE1 B\nPRACHT  P R AE1 K T\nPRACTICABLE  P R AE1 K - T AH0 - K AH0 - B AH0 L\nPRACTICAL  P R AE1 K - T AH0 - K AH0 L\nPRACTICAL(2)  P R AE1 K - T IH0 - K AH0 L\nPRACTICALITY  P R AE2 K - T IH0 - K AE1 - L AH0 - T IY0\nPRACTICALLY  P R AE1 K - T AH0 K - L IY0\nPRACTICALLY(2)  P R AE1 K - T AH0 - K AH0 - L IY0\nPRACTICE  P R AE1 K - T AH0 S\nPRACTICE(2)  P R AE1 K - T IH0 S\nPRACTICED  P R AE1 K - T AH0 S T\nPRACTICED(2)  P R AE1 K - T IH0 S T\nPRACTICES  P R AE1 K - T AH0 - S AH0 Z\nPRACTICES(2)  P R AE1 K - T IH0 - S IH0 Z\nPRACTICING  P R AE1 K - T AH0 - S IH0 NG\nPRACTITIONER  P R AE0 K - T IH1 - SH AH0 N - ER0\nPRACTITIONER(2)  P R AE0 K - T IH1 SH - N ER0\nPRACTITIONERS  P R AE0 K - T IH1 - SH AH0 N - ER0 Z\nPRACTITIONERS(2)  P R AE0 K - T IH1 SH - N ER0 Z\nPRADA  P R AA1 - D AH0\nPRADESH  P R AH0 - D EH1 SH\nPRADETTO  P R AH0 - D EH1 - T OW0\nPRADO  P R AA1 - D OW0\nPRAETOR  P R IY1 - T ER0\nPRAETORIAN  P R IY0 - T AO1 - R IY0 - AH0 N\nPRAGER  P R EY1 - G ER0\nPRAGMATIC  P R AE0 G - M AE1 - T IH0 K\nPRAGMATICALLY  P R AE0 G - M AE1 - T IH0 - K AH0 - L IY0\nPRAGMATICALLY(2)  P R AE0 G - M AE1 - T IH0 K - L IY0\nPRAGMATISM  P R AE1 G - M AH0 - T IH2 - Z AH0 M\nPRAGMATIST  P R AE1 G - M AH0 - T IH0 S T\nPRAGMATISTS  P R AE1 G - M AH0 - T IH0 S T S\nPRAGMATISTS(2)  P R AE1 G - M AH0 - T IH0 S S\nPRAGMATISTS(3)  P R AE1 G - M AH0 - T IH0 S\nPRAGUE  P R AA1 G\nPRAGUE'S  P R AA1 G Z\nPRAHL  P R AA1 L\nPRAIRIE  P R EH1 - R IY0\nPRAIRIE'S  P R EH1 - R IY0 Z\nPRAIRIES  P R EY1 - R IY0 Z\nPRAISE  P R EY1 Z\nPRAISED  P R EY1 Z D\nPRAISES  P R EY1 - Z AH0 Z\nPRAISES(2)  P R EY1 - Z IH0 Z\nPRAISEWORTHY  P R EY1 Z - W ER2 - DH IY0\nPRAISING  P R EY1 - Z IH0 NG\nPRAKASH  P R AA0 - K AA1 SH\nPRALL  P R AO1 L\nPRALLE  P R EY1 L\nPRAN  P R AA1 N\nPRAN(2)  P R AE1 N\nPRANCE  P R AE1 N S\nPRANCES  P R AE1 N - S IH0 Z\nPRANCING  P R AE1 N - S IH0 NG\nPRANGE  P R EY1 N JH\nPRANGER  P R EY1 N - JH ER0\nPRANK  P R AE1 NG K\nPRANKS  P R AE1 NG K S\nPRANKSTER  P R AE1 NG K - S T ER0\nPRAPAS  P R AA1 - P AH0 S\nPRASAD  P R AE1 - S AH0 D\nPRASEK  P R AA1 - S EH0 K\nPRASHANT  P R AA2 - SH AA1 N T\nPRATER  P R EY1 - T ER0\nPRATFALL  P R AE1 T - F AO2 L\nPRATFALLS  P R AE1 T - F AO2 L Z\nPRATHER  P R AE1 - DH ER0\nPRATO  P R AA1 - T OW0\nPRATS  P R AE1 T S\nPRATT  P R AE1 T\nPRATT'S  P R AE1 T S\nPRATTE  P R AE1 T\nPRATTLE  P R AE1 - T AH0 L\nPRATTVILLE  P R AE1 T - V IH0 L\nPRAUN  P R AO1 N\nPRAUSE  P R AO1 Z\nPRAVDA  P R AE1 V - D AH0\nPRAVDA'S  P R AE1 V - D AH0 Z\nPRAWN  P R AO1 N\nPRAWNS  P R AO1 N Z\nPRAXAIR  P R AE1 K - S EH1 R\nPRAXIS  P R AE1 K - S IH0 S\nPRAY  P R EY1\nPRAYED  P R EY1 D\nPRAYER  P R EH1 R\nPRAYER(2)  P R EY1 - ER0\nPRAYERFUL  P R EH1 R - F AH0 L\nPRAYERFUL(2)  P R EY1 - ER0 - F AH0 L\nPRAYERS  P R EH1 R Z\nPRAYERS(2)  P R EY1 - ER0 Z\nPRAYING  P R EY1 - IH0 NG\nPRAYS  P R EY1 Z\nPRAYTOR  P R EY1 - T ER0\nPRAZAK  P R AA1 - Z AH0 K\nPRCHAL  P ER0 - SH AE1 L\nPRE  P R IY1\nPREACH  P R IY1 CH\nPREACHED  P R IY1 CH T\nPREACHER  P R IY1 - CH ER0\nPREACHER'S  P R IY1 - CH ER0 Z\nPREACHERS  P R IY1 - CH ER0 Z\nPREACHES  P R IY1 - CH IH0 Z\nPREACHING  P R IY1 - CH IH0 NG\nPREACHY  P R IY1 - CH IY0\nPREADOLESCENCE  P R IY2 - AE0 - D AH0 - L EH1 - S IH0 S\nPREADOLESCENT  P R IY2 - AE0 - D AH0 - L EH1 - S IH0 N T\nPREAKNESS  P R IY1 K - N AH0 S\nPREAMBLE  P R IY0 - AE1 M - B AH0 L\nPREARRANGE  P R IY2 - ER0 - EY1 N JH\nPREARRANGED  P R IY2 - ER0 - EY1 N JH D\nPREAS  P R IY1 Z\nPREBBLE  P R EH1 - B AH0 L\nPREBE  P R IY1 B\nPREBLE  P R EH1 - B AH0 L\nPREBON  P R IY1 - B AA0 N\nPRECAMBRIAN  P R IY0 - K AE1 M - B R IY0 - AH0 N\nPRECANCEROUS  P R IY0 - K AE1 N - S ER0 - AH0 S\nPRECARIOUS  P R IY0 - K EH1 - R IY0 - AH0 S\nPRECARIOUSLY  P R IH0 - K EH1 - R IY0 - AH0 S - L IY0\nPRECAST  P R IY0 - K AE1 S T\nPRECAUTION  P R IY0 - K AO1 - SH AH0 N\nPRECAUTIONARY  P R IH0 - K AO1 - SH AH0 N - EH0 - R IY0\nPRECAUTIONS  P R IY0 - K AO1 - SH AH0 N Z\nPRECEDE  P R IH0 - S IY1 D\nPRECEDED  P R IH0 - S IY1 - D IH0 D\nPRECEDED(2)  P R IY0 - S IY1 - D AH0 D\nPRECEDED(3)  P R IY0 - S IY1 - D IH0 D\nPRECEDENCE  P R EH1 - S AH0 - D AH0 N S\nPRECEDENT  P R EH1 - S IH0 - D AH0 N T\nPRECEDENTS  P R EH1 - S AH0 - D AH0 N T S\nPRECEDENTS(2)  P R EH1 - S AH0 - D EH2 N T S\nPRECEDES  P R IH0 - S IY1 D Z\nPRECEDING  P R IY0 - S IY1 - D IH0 NG\nPRECEEDING  P R IH0 - S IY1 - D IH0 NG\nPRECEPT  P R IY1 - S EH2 P T\nPRECEPTS  P R IY1 - S EH2 P T S\nPRECESSION  P R IY0 - S EH1 - SH AH0 N\nPRECHT  P R EH1 K T\nPRECHTER  P R EH1 K - T ER0\nPRECHTL  P R EH1 K - T AH0 L\nPRECIADO  P R EH0 - CH AA1 - D OW0\nPRECINCT  P R IY1 - S IH2 NG K T\nPRECINCT(2)  P R IY1 - S IH2 NG K\nPRECINCTS  P R IY1 - S IH2 NG K T S\nPRECINCTS(2)  P R IY1 - S IH2 NG K S\nPRECIOUS  P R EH1 - SH AH0 S\nPRECIPICE  P R EH1 - S AH0 - P AH0 S\nPRECIPITATE  P R IH0 - S IH1 - P IH0 - T EY2 T\nPRECIPITATED  P R IH0 - S IH1 - P IH0 - T EY2 - T IH0 D\nPRECIPITATING  P R IH0 - S IH1 - P AH0 - T EY2 - T IH0 NG\nPRECIPITATION  P R IH0 - S IH2 - P IH0 - T EY1 - SH AH0 N\nPRECIPITOUS  P R IH0 - S IH1 - P IH0 - T AH0 S\nPRECIPITOUSLY  P R IY2 - S IH1 - P IH0 - T AH0 S - L IY0\nPRECIS  P R EY1 - S IY2\nPRECISE  P R IH0 - S AY1 S\nPRECISE(2)  P R IY0 - S AY1 S\nPRECISELY  P R IH0 - S AY1 S - L IY0\nPRECISELY(2)  P R IY0 - S AY1 S - L IY0\nPRECISION  P R IY0 - S IH1 - ZH AH0 N\nPRECLINICAL  P R IY0 K - L IH1 - N IH0 - K AH0 L\nPRECLUDE  P R IH0 - K L UW1 D\nPRECLUDE(2)  P R IY0 - K L UW1 D\nPRECLUDED  P R IH0 - K L UW1 - D IH0 D\nPRECLUDED(2)  P R IY0 - K L UW1 - D IH0 D\nPRECLUDES  P R IH0 - K L UW1 D Z\nPRECLUDES(2)  P R IY0 - K L UW1 D Z\nPRECLUDING  P R IH0 - K L UW1 - D IH0 NG\nPRECLUSION  P R IH0 - K L UW1 - ZH AH0 N\nPRECLUSION(2)  P R IY0 - K L UW1 - ZH AH0 N\nPRECOCIOUS  P R IH0 - K OW1 - SH AH0 S\nPRECOCIOUS(2)  P R IY0 - K OW1 - SH AH0 S\nPRECONCEIVE  P R IY2 - K AH0 N - S IY1 V\nPRECONCEIVED  P R IY2 - K AH0 N - S IY1 V D\nPRECONCEPTION  P R IY0 - K AH0 N - S EH1 P - SH AH0 N\nPRECONCEPTIONS  P R IY0 - K AH0 N - S EH1 P - SH AH0 N Z\nPRECONDITION  P R IY2 - K AH0 N - D IH1 - SH AH0 N\nPRECONDITIONS  P R IY2 - K AH0 N - D IH1 - SH AH0 N Z\nPRECOOK  P R IY1 - K UH1 K\nPRECOOKED  P R IY0 - K UH1 K T\nPRECOURT  P R IH0 - K AO1 R T\nPRECRASH  P R IY0 - K R AE1 SH\nPRECURSOR  P R IY0 - K ER1 - S ER0\nPRECURSORS  P R IY0 - K ER1 - S ER0 Z\nPREDACEOUS  P R IY0 - D EY1 - SH AH0 S\nPREDATE  P R IY0 - D EY1 T\nPREDATE(2)  P R IY1 - D EY1 T\nPREDATED  P R IY0 - D EY1 - T IH0 D\nPREDATED(2)  P R IY1 - D EY1 - T IH0 D\nPREDATES  P R IY1 - D EY1 T S\nPREDATOR  P R EH1 - D AH0 - T ER0\nPREDATORS  P R EH1 - D AH0 - T ER0 Z\nPREDATORY  P R EH1 - D AH0 - T AO2 - R IY0\nPREDAWN  P R IY0 - D AO1 N\nPREDDY  P R EH1 - D IY0\nPREDECESSOR  P R EH1 - D AH0 - S EH2 - S ER0\nPREDECESSOR'S  P R EH1 - D AH0 - S EH2 - S ER0 Z\nPREDECESSORS  P R EH1 - D AH0 - S EH2 - S ER0 Z\nPREDECESSORS'  P R EH2 - D AH0 - S EH1 - S ER0 Z\nPREDESTINATION  P R IY2 - D EH2 - S T AH0 - N EY1 - SH AH0 N\nPREDESTINE  P R IY2 - D EH1 - S T AH0 N\nPREDESTINED  P R IY2 - D EH1 - S T AH0 N D\nPREDETERMINE  P R IY2 - D IH0 - T ER1 - M AH0 N\nPREDETERMINE(2)  P R IY2 - D IY0 - T ER1 - M AH0 N\nPREDETERMINED  P R IY2 - D IY0 - T ER1 - M IH0 N D\nPREDICAMENT  P R IH0 - D IH1 - K AH0 - M AH0 N T\nPREDICAMENT(2)  P R IY0 - D IH1 - K AH0 - M AH0 N T\nPREDICAMENTS  P R IH0 - D IH1 - K AH0 - M AH0 N T S\nPREDICATE  P R EH1 - D AH0 - K EY2 T\nPREDICATE(2)  P R EH1 - D IH0 - K AH0 T\nPREDICATED  P R EH1 - D AH0 - K EY2 - T IH0 D\nPREDICATES  P R EH1 - D AH0 - K EY2 T S\nPREDICATES(2)  P R EH1 - D IH0 - K AH0 T S\nPREDICT  P R IH0 - D IH1 K T\nPREDICT(2)  P R IY0 - D IH1 K T\nPREDICTABILITY  P R IH0 - D IH2 K - T AH0 - B IH1 - L IH0 - T IY0\nPREDICTABLE  P R IH0 - D IH1 K - T AH0 - B AH0 L\nPREDICTABLE(2)  P R IY0 - D IH1 K - T AH0 - B AH0 L\nPREDICTABLY  P R IH0 - D IH1 K - T AH0 - B L IY0\nPREDICTED  P R IH0 - D IH1 K - T IH0 D\nPREDICTED(2)  P R IY0 - D IH1 K - T AH0 D\nPREDICTED(3)  P R IY0 - D IH1 K - T IH0 D\nPREDICTING  P R IH0 - D IH1 K - T IH0 NG\nPREDICTING(2)  P R IY0 - D IH1 K - T IH0 NG\nPREDICTION  P R IY0 - D IH1 K - SH AH0 N\nPREDICTIONS  P R IY0 - D IH1 K - SH AH0 N Z\nPREDICTIVE  P R IH0 - D IH1 K - T IH0 V\nPREDICTIVE(2)  P R IY0 - D IH1 K - T IH0 V\nPREDICTOR  P R IH0 - D IH1 K - T ER0\nPREDICTORS  P R IH0 - D IH1 K - T ER0 Z\nPREDICTORS(2)  P R IY0 - D IH1 K - T ER0 Z\nPREDICTS  P R IH0 - D IH1 K T S\nPREDICTS(2)  P R IY0 - D IH1 K T S\nPREDICTS(3)  P R IH0 - D IH1 K S\nPREDICTS(4)  P R IY0 - D IH1 K S\nPREDILECTION  P R EH2 - D AH0 - L EH1 K - SH AH0 N\nPREDILECTIONS  P R EH2 - D AH0 - L EH1 K - SH AH0 N Z\nPREDISPOSE  P R IY2 - D IH0 - S P OW1 Z\nPREDISPOSED  P R IY2 - D IH0 - S P OW1 Z D\nPREDISPOSING  P R IY2 - D IH0 - S P OW1 - Z IH0 NG\nPREDISPOSITION  P R IY2 - D IH0 S - P AH0 - Z IH1 - SH AH0 N\nPREDISPOSITIONS  P R IY2 - D IH0 S - P AH0 - Z IH1 - SH AH0 N Z\nPREDMORE  P R EH1 D - M AO0 R\nPREDOMINANCE  P R IH0 - D AA1 - M AH0 - N AH0 N S\nPREDOMINANT  P R IH0 - D AA1 - M AH0 - N AH0 N T\nPREDOMINANTLY  P R IH0 - D AA1 - M AH0 - N AH0 N T - L IY0\nPREDOMINATE  P R IH0 - D AA1 - M AH0 - N EY2 T\nPREDOMINATE(2)  P R IH0 - D AA1 - M AH0 - N AH0 T\nPREDOMINATED  P R IH0 - D AA1 - M AH0 - N EY2 - T IH0 D\nPREDOMINATES  P R IH0 - D AA1 - M AH0 - N EY2 T S\nPREDOMINATING  P R IH0 - D AA1 - M AH0 - N EY2 - T IH0 NG\nPREE  P R IY1\nPREECE  P R IY1 S\nPREELECTION  P R IY0 - IH0 - L EH1 K - SH AH0 N\nPREEMINENCE  P R IY0 - EH1 - M AH0 - N AH0 N S\nPREEMINENT  P R IY0 - EH1 - M AH0 - N AH0 N T\nPREEMPT  P R IY1 - EH2 M P T\nPREEMPTED  P R IY0 - EH1 M P - T IH0 D\nPREEMPTING  P R IY0 - EH1 M P - T IH0 NG\nPREEMPTION  P R IY2 - EH1 M P - SH AH0 N\nPREEMPTIVE  P R IY0 - EH1 M P - T IH0 V\nPREEMPTIVELY  P R IY0 - EH1 M P - T IH0 V - L IY0\nPREEN  P R IY1 N\nPREENED  P R IY1 N D\nPREENING  P R IY1 - N IH0 NG\nPREEXIST  P R IY1 - IH0 G - Z IH1 S T\nPREEXISTED  P R IY1 - IH0 G - Z IH1 - S T IH0 D\nPREEXISTING  P R IY1 - IH0 G - Z IH1 - S T IH0 NG\nPREEXISTS  P R IY1 - IH0 G - Z IH1 S T S\nPREEXISTS(2)  P R IY1 - IH0 G - Z IH1 S S\nPREEXISTS(3)  P R IY1 - IH0 G - Z IH1 S\nPREFAB  P R IY1 - F AE1 B\nPREFABRICATE  P R IY0 - F AE1 - B R IH0 - K EY2 T\nPREFABRICATED  P R IY0 - F AE1 - B R IH0 - K EY2 - T IH0 D\nPREFABRICATION  P R IY2 - F AE2 - B R AH0 - K EY1 - SH AH0 N\nPREFABS  P R IY1 - F AE1 B Z\nPREFACE  P R EH1 - F AH0 S\nPREFACED  P R EH1 - F AH0 S T\nPREFECT  P R IY1 - F EH2 K T\nPREFECTURAL  P R IY0 - F EH1 K - CH ER0 - AH0 L\nPREFECTURE  P R IY1 - F EH2 K - CH ER0\nPREFER  P R AH0 - F ER1\nPREFER(2)  P R IH0 - F ER1\nPREFER(3)  P R IY0 - F ER1\nPREFERABLE  P R EH1 - F ER0 - AH0 - B AH0 L\nPREFERABLE(2)  P R EH1 - F R AH0 - B AH0 L\nPREFERABLY  P R EH1 - F ER0 - AH0 - B L IY0\nPREFERABLY(2)  P R EH1 - F R AH0 - B L IY0\nPREFERED  P R IH0 - F ER1 D\nPREFERENCE  P R EH1 - F ER0 - AH0 N S\nPREFERENCE(2)  P R EH1 - F R AH0 N S\nPREFERENCED  P R EH1 - F ER0 - AH0 N S T\nPREFERENCED(2)  P R EH1 - F R AH0 N S T\nPREFERENCES  P R EH1 - F ER0 - AH0 N - S IH0 Z\nPREFERENTIAL  P R EH2 - F ER0 - EH1 N - CH AH0 L\nPREFERENTIAL(2)  P R EH2 - F ER0 - EH1 N - SH AH0 L\nPREFERENTIALLY  P R EH2 - F ER0 - EH1 N - CH AH0 - L IY0\nPREFERENTIALLY(2)  P R EH2 - F ER0 - EH1 N - SH AH0 - L IY0\nPREFERRED  P R AH0 - F ER1 D\nPREFERRED(2)  P R IH0 - F ER1 D\nPREFERRED(3)  P R IY0 - F ER1 D\nPREFERREDS  P R IY0 - F ER1 - AH0 D Z\nPREFERRING  P R IH0 - F ER1 - IH0 NG\nPREFERS  P R AH0 - F ER1 Z\nPREFERS(2)  P R IH0 - F ER1 Z\nPREFERS(3)  P R IY0 - F ER1 Z\nPREFIX  P R IY1 - F IH0 K S\nPREFRONTAL  P R IY0 - F R AH1 N - T AH0 L\nPREGLER  P R EH1 G - L ER0\nPREGNANCIES  P R EH1 G - N AH0 N - S IY0 Z\nPREGNANCY  P R EH1 G - N AH0 N - S IY0\nPREGNANT  P R EH1 G - N AH0 N T\nPREGO  P R EY1 - G OW0\nPREHEIM  P R EH1 - HH AY0 M\nPREHISTORIC  P R IY2 - HH IH0 - S T AO1 - R IH0 K\nPREHN  P R EH1 N\nPREHOLIDAY  P R IY2 - HH AO1 - L IH0 - D EY0\nPREIGNITION  P R IY2 - AH0 G - N IH1 - SH AH0 N\nPREIS  P R IY1 Z\nPREISER  P R AY1 - S ER0\nPREISIG  P R AY1 - Z IH0 G\nPREISLER  P R AY1 - S AH0 - L ER0\nPREISLER(2)  P R AY1 S - L ER0\nPREISS  P R AY1 S\nPREJEAN  P R IY2 - JH IY1 N\nPREJUDGE  P R IY0 - JH AH1 JH\nPREJUDGED  P R IY0 - JH AH1 JH D\nPREJUDGMENT  P R IY0 - JH AH1 JH - M AH0 N T\nPREJUDICE  P R EH1 - JH AH0 - D IH0 S\nPREJUDICED  P R EH1 - JH AH0 - D AH0 S T\nPREJUDICES  P R EH1 - JH AH0 - D IH0 - S IH0 Z\nPREJUDICIAL  P R EH2 - JH AH0 - D IH1 - SH AH0 L\nPREJUDICING  P R EH1 - JH AH0 - D IH0 - S IH0 NG\nPREKINDERGARTEN  P R IY0 - K IH1 N - D ER0 - G AA2 - D AH0 N\nPRELATE  P R EH1 - L IH0 T\nPRELATE(2)  P R IY1 - L EY2 T\nPRELATES  P R EH1 - L IH0 T S\nPRELIM  P R IH0 - L IH1 M\nPRELIM(2)  P R IY0 - L IH1 M\nPRELIMINARIES  P R IH0 - L IH1 - M AH0 - N EH2 - R IY0 Z\nPRELIMINARIES(2)  P R IY0 - L IH1 - M AH0 - N EH2 - R IY0 Z\nPRELIMINARILY  P R IH0 - L IH2 - M AH0 - N EH1 - R IH0 - L IY0\nPRELIMINARY  P R IH0 - L IH1 - M AH0 - N EH2 - R IY0\nPRELIMINARY(2)  P R IY0 - L IH1 - M AH0 - N EH2 - R IY0\nPRELIMS  P R IY1 - L IH2 M Z\nPRELL  P R EH1 L\nPRELLWITZ  P R EH1 L - W IH0 T S\nPRELUDE  P R EY1 - L UW2 D\nPRELUDES  P R EY1 - L UW2 D Z\nPREM  P R EH1 M\nPREMADASA  P R IY2 - M AH0 - D AA1 - S AH0\nPREMARIN  P R EH1 - M ER0 - IH0 N\nPREMARITAL  P R IY0 - M EH1 - R AH0 - T AH0 L\nPREMARK  P R IY0 - M AA1 R K\nPREMARKET  P R IY1 - M AA1 R - K AH0 T\nPREMATURE  P R IY2 - M AH0 - CH UH1 R\nPREMATURELY  P R IY2 - M AH0 - CH UH1 R - L IY0\nPREMEDITATE  P R IY0 - M EH1 - D AH0 - T EY2 T\nPREMEDITATED  P R IY0 - M EH1 - D AH0 - T EY2 - T IH0 D\nPREMEDITATION  P R IY0 - M EH2 - D AH0 - T EY1 - SH AH0 N\nPREMIER  P R EH0 - M IH1 R\nPREMIER'S  P R EH0 - M IH1 R Z\nPREMIER'S(2)  P R IY0 - M IH1 R Z\nPREMIER(2)  P R IY0 - M IH1 R\nPREMIERE  P R EH0 - M IH1 R\nPREMIERED  P R EH0 - M IH1 R D\nPREMIERES  P R EH0 - M IH1 R Z\nPREMIERING  P R EH0 - M IH1 - R IH0 NG\nPREMIERS  P R EH0 - M IH1 R Z\nPREMIERSHIP  P R EH0 - M IH1 R - SH IH2 P\nPREMISE  P R EH1 - M IH0 S\nPREMISED  P R EH1 - M AH0 S T\nPREMISES  P R EH1 - M AH0 - S AH0 Z\nPREMIUM  P R IY1 - M IY0 - AH0 M\nPREMIUMS  P R IY1 - M IY0 - AH0 M Z\nPREMO  P R EH1 - M OW0\nPREMODERN  P R IY0 - M AO1 - D ER0 N\nPREMONITION  P R EH0 - M AH0 - N IH1 - SH AH0 N\nPREMONITORY  P R AH0 - M AH1 - N AH0 - T ER0 - IY0\nPRENATAL  P R IY0 - N EY1 - T AH0 L\nPRENDERGAST  P R EH1 N - D ER0 - G AE2 S T\nPRENGER  P R EH1 N - JH ER0\nPRENN  P R EH1 N\nPRENSA  P R EH1 N - S AH0\nPRENTICE  P R EH1 N - T IH0 S\nPRENTISS  P R EH1 N - T IH0 S\nPRENTNIEKS  P R EH1 N T - N IY0 - EH2 K S\nPRENUPTIAL  P R IY0 - N AH1 P - SH AH0 L\nPREOCCUPATION  P R IY0 - AA2 - K Y AH0 - P EY1 - SH AH0 N\nPREOCCUPATIONS  P R IY0 - AA2 - K Y AH0 - P EY1 - SH AH0 N Z\nPREOCCUPIED  P R IY0 - AA1 - K Y AH0 - P AY2 D\nPREOCCUPIES  P R IY0 - AA1 - K Y AH0 - P AY2 Z\nPREOCCUPY  P R IY0 - AA1 - K Y AH0 - P AY2\nPREORDAIN  P R IY2 - AO0 R - D EY1 N\nPREORDAINED  P R IY2 - AO0 R - D EY1 N D\nPREP  P R EH1 P\nPREPACKAGE  P R IY0 - P AE1 - K AH0 JH\nPREPACKAGED  P R IY0 - P AE1 - K AH0 JH D\nPREPAID  P R IY0 - P EY1 D\nPREPARATION  P R EH2 - P ER0 - EY1 - SH AH0 N\nPREPARATIONS  P R EH2 - P ER0 - EY1 - SH AH0 N Z\nPREPARATORY  P R IH0 - P EH1 - R AH0 - T AO2 - R IY0\nPREPARATORY(2)  P R EH1 - P R AH0 - T AO2 - R IY0\nPREPARE  P R IY0 - P EH1 R\nPREPARED  P R IY0 - P EH1 R D\nPREPAREDNESS  P R IY0 - P EH1 - R AH0 D - N AH0 S\nPREPARER  P R IY0 - P EH1 - R ER0\nPREPARERS  P R IY0 - P EH1 - R ER0 Z\nPREPARES  P R IY0 - P EH1 R Z\nPREPARES(2)  P ER0 - P EH1 R Z\nPREPARING  P R IY0 - P EH1 - R IH0 NG\nPREPARING(2)  P ER0 - P EH1 - R IH0 NG\nPREPAY  P R IY0 - P EY1\nPREPAYING  P R IY0 - P EY1 - IH0 NG\nPREPAYMENT  P R IY0 - P EY1 - M AH0 N T\nPREPAYMENTS  P R IY0 - P EY1 - M AH0 N T S\nPREPLANNING  P R IY0 - P L AE1 - N IH0 NG\nPREPONDERANCE  P R IY0 - P AA1 N - D R AH0 N S\nPREPOSTEROUS  P R IH0 - P AA1 - S T ER0 - AH0 S\nPREPOSTEROUS(2)  P R IH0 - P AA1 S - T R AH0 S\nPREPPED  P R EH1 P T\nPREPPIE  P R EH1 - P IY0\nPREPPING  P R EH1 - P IH0 NG\nPREPPY  P R EH1 - P IY0\nPRERECORD  P R IY2 - R IY0 - K AO1 R D\nPRERECORD(2)  P R IY2 - R IH0 - K AO1 R D\nPRERECORDED  P R IY2 - R IY0 - K AO1 R - D IH0 D\nPREREQUISITE  P R IY0 - R EH1 - K W AH0 - Z AH0 T\nPREREQUISITES  P R IY0 - R EH1 - K W AH0 - Z AH0 T S\nPREROGATIVE  P R IH0 - R AA1 - G AH0 - T IH0 V\nPREROGATIVE(2)  P ER1 - AA1 - G AH0 - T IH0 V\nPREROGATIVES  P R IH0 - R AA1 - G AH0 - T IH0 V Z\nPREROGATIVES(2)  P ER1 - AA1 - G AH0 - T IH0 V Z\nPRES  P R EH1 Z\nPRESAGE  P R EH1 - S IH0 JH\nPRESAGED  P R EH1 - S IH0 JH D\nPRESAGES  P R EH1 - S IH0 - JH IH0 Z\nPRESAGING  P R EH1 - S IH0 - JH IH0 NG\nPRESALE  P R IY1 - S EY2 L\nPRESARIO  P R IH0 - S AA1 - R IY0 - OW2\nPRESBY  P R EH1 S - B IY0\nPRESBY(2)  P R EH1 Z - B IY0\nPRESBYTERIAN  P R EH2 S - B IH0 - T IH1 - R IY0 - AH0 N\nPRESBYTERIAN(2)  P R EH2 Z - B IH0 - T IH1 - R IY0 - AH0 N\nPRESBYTERIANS  P R EH2 S - B IH0 - T IH1 - R IY0 - AH0 N Z\nPRESBYTERIANS(2)  P R EH2 Z - B IH0 - T IH1 - R IY0 - AH0 N Z\nPRESCHEL  P R EH1 - SH AH0 L\nPRESCHER  P R EH1 - SH ER0\nPRESCHOOL  P R IY0 - S K UW1 L\nPRESCHOOL(2)  P R IY1 - S K UW2 L\nPRESCHOOLER  P R IY1 - S K UW2 - L ER0\nPRESCHOOLERS  P R IY1 - S K UW2 - L ER0 Z\nPRESCHOOLS  P R IY0 - S K UW1 L Z\nPRESCHOOLS(2)  P R IY1 - S K UW2 L Z\nPRESCIENCE  P R IY1 - SH IY0 - AH0 N S\nPRESCIENT  P R EH1 - S IY0 - AH0 N T\nPRESCOT  P R EH1 - S K AH0 T\nPRESCOTT  P R EH1 - S K AA0 T\nPRESCRIBE  P R AH0 - S K R AY1 B\nPRESCRIBE(2)  P R IY0 - S K R AY1 B\nPRESCRIBED  P R IY0 - S K R AY1 B D\nPRESCRIBER  P R IY0 - S K R AY1 - B ER0\nPRESCRIBERS  P R IY0 - S K R AY1 - B ER0 Z\nPRESCRIBES  P R IY0 - S K R AY1 B Z\nPRESCRIBING  P R IY0 - S K R AY1 - B IH0 NG\nPRESCRIPTION  P R AH0 - S K R IH1 P - SH AH0 N\nPRESCRIPTIONS  P R AH0 - S K R IH1 P - SH AH0 N Z\nPRESENCE  P R EH1 - Z AH0 N S\nPRESENCES  P R EH1 - Z AH0 N - S IH0 Z\nPRESENT  P R EH1 - Z AH0 N T\nPRESENT(2)  P R IY0 - Z EH1 N T\nPRESENT(3)  P ER0 - Z EH1 N T\nPRESENTABLE  P R AH0 - Z EH1 N - T AH0 - B AH0 L\nPRESENTATION  P R EH2 - Z AH0 N - T EY1 - SH AH0 N\nPRESENTATIONS  P R EH2 - Z AH0 N - T EY1 - SH AH0 N Z\nPRESENTED  P R IY0 - Z EH1 N - T AH0 D\nPRESENTED(2)  P ER0 - Z EH1 N - T AH0 D\nPRESENTED(3)  P R IY0 - Z EH1 - N AH0 D\nPRESENTED(4)  P ER0 - Z EH1 - N AH0 D\nPRESENTER  P R EH1 - Z AH0 N - T ER0\nPRESENTER(2)  P R IY0 - Z EH1 N - T ER0\nPRESENTERS  P R EH1 - Z AH0 N - T ER0 Z\nPRESENTERS(2)  P R IY0 - Z EH1 N - T ER0 Z\nPRESENTING  P R IH0 - Z EH1 N - T IH0 NG\nPRESENTING(2)  P R IY0 - Z EH1 N - T IH0 NG\nPRESENTLY  P R EH1 - Z AH0 N T - L IY0\nPRESENTMENT  P R IY0 - Z EH1 N T - M AH0 N T\nPRESENTS  P R EH1 - Z AH0 N T S\nPRESENTS(2)  P R IY0 - Z EH1 N T S\nPRESERVATION  P R EH2 - Z ER0 - V EY1 - SH AH0 N\nPRESERVATIONIST  P R EH2 - Z ER0 - V EY1 - SH AH0 N - IH0 S T\nPRESERVATIONISTS  P R EH2 - Z ER0 - V EY1 - SH AH0 N - IH0 S T S\nPRESERVATIONISTS(2)  P R EH2 - Z ER0 - V EY1 - SH AH0 N - IH0 S S\nPRESERVATIONISTS(3)  P R EH2 - Z ER0 - V EY1 - SH AH0 N - IH0 S\nPRESERVATIVE  P R IY0 - Z ER1 - V AH0 - T IH0 V\nPRESERVATIVES  P R AH0 - Z ER1 - V AH0 - T IH0 V Z\nPRESERVE  P R AH0 - Z ER1 V\nPRESERVE(2)  P R IH0 - Z ER1 V\nPRESERVE(3)  P R IY0 - Z ER1 V\nPRESERVED  P R AH0 - Z ER1 V D\nPRESERVED(2)  P R IH0 - Z ER1 V D\nPRESERVED(3)  P R IY0 - Z ER1 V D\nPRESERVER  P R IY0 - Z ER1 - V ER0\nPRESERVER(2)  P R IH0 - Z ER1 - V ER0\nPRESERVER(3)  P R AH0 - Z ER1 - V ER0\nPRESERVERS  P R IY0 - Z ER1 - V ER0 Z\nPRESERVERS(2)  P R AH0 - Z ER1 - V ER0 Z\nPRESERVES  P R AH0 - Z ER1 V Z\nPRESERVES(2)  P R IH0 - Z ER1 V Z\nPRESERVES(3)  P R IY0 - Z ER1 V Z\nPRESERVING  P R AH0 - Z ER1 - V IH0 NG\nPRESERVING(2)  P R IH0 - Z ER1 - V IH0 NG\nPRESERVING(3)  P R IY0 - Z ER1 - V IH0 NG\nPRESET  P R IY0 - S EH1 T\nPRESIDE  P R IH0 - Z AY1 D\nPRESIDE(2)  P R IY0 - Z AY1 D\nPRESIDED  P R IH0 - Z AY1 - D IH0 D\nPRESIDED(2)  P R IY0 - Z AY1 - D AH0 D\nPRESIDED(3)  P R IY0 - Z AY1 - D IH0 D\nPRESIDENCIES  P R EH1 - Z AH0 - D AH0 N - S IY0 Z\nPRESIDENCY  P R EH1 - Z AH0 - D AH0 N - S IY0\nPRESIDENCY'S  P R EH1 - Z AH0 - D AH0 N - S IY0 Z\nPRESIDENT  P R EH1 - Z AH0 - D EH2 N T\nPRESIDENT'S  P R EH1 - Z IH0 - D AH0 N T S\nPRESIDENT(2)  P R EH1 - Z IH0 - D AH0 N T\nPRESIDENTIAL  P R EH2 - Z AH0 - D EH1 N - CH AH0 L\nPRESIDENTIAL'S  P R EH2 - Z AH0 - D EH1 N - CH AH0 L Z\nPRESIDENTIAL'S(2)  P R EH2 - Z AH0 - D EH1 N - SH AH0 L Z\nPRESIDENTIAL(2)  P R EH2 - Z AH0 - D EH1 N - SH AH0 L\nPRESIDENTIALIST  P R EH2 - Z AH0 - D EH1 N - CH AH0 - L IH0 S T\nPRESIDENTIALIST(2)  P R EH2 - Z AH0 - D EH1 N - SH AH0 - L IH0 S T\nPRESIDENTIALLY  P R EH2 - S IH0 - D EH1 N - CH AH0 - L IY0\nPRESIDENTIALLY(2)  P R EH2 - S IH0 - D EH1 N - SH AH0 - L IY0\nPRESIDENTS  P R EH1 - Z AH0 - D EH2 N T S\nPRESIDENTS'  P R EH1 - Z IH0 - D AH0 N T S\nPRESIDENTS(2)  P R EH1 - Z IH0 - D AH0 N T S\nPRESIDENTS(3)  P R EH1 - Z IH0 - D AH0 N S\nPRESIDES  P R IH0 - Z AY1 D Z\nPRESIDES(2)  P R IY0 - Z AY1 D Z\nPRESIDING  P R IH0 - Z AY1 - D IH0 NG\nPRESIDING(2)  P R IY0 - Z AY1 - D IH0 NG\nPRESIDIO  P R IH0 - S IH1 - D IY0 - OW2\nPRESIDIUM  P R IH0 - S IH1 - D IY0 - AH0 M\nPRESLAR  P R IH0 S - L AA1 R\nPRESLER  P R EH1 - S AH0 - L ER0\nPRESLER(2)  P R EH1 S - L ER0\nPRESLEY  P R EH1 S - L IY0\nPRESLEY'S  P R EH1 S - L IY0 Z\nPRESNALL  P R EH1 S - N AH0 L\nPRESNELL  P R EH1 S - N AH0 L\nPRESPLIT  P R IY1 - S P L IH1 T\nPRESS  P R EH1 S\nPRESS'  P R EH1 S\nPRESS'S  P R EH1 - S IH0 Z\nPRESSBOARD  P R EH1 S - B AO2 R D\nPRESSBURGER  P R EH1 S - B ER0 - G ER0\nPRESSE  P R EH1 S\nPRESSED  P R EH1 S T\nPRESSEL  P R EH1 - S AH0 L\nPRESSER  P R EH1 - S ER0\nPRESSER'S  P R EH1 - S ER0 Z\nPRESSES  P R EH1 - S AH0 Z\nPRESSES(2)  P R EH1 - S IH0 Z\nPRESSEY  P R EH1 - S IY0\nPRESSING  P R EH1 - S IH0 NG\nPRESSLER  P R EH1 S - L ER0\nPRESSLEY  P R EH1 S - L IY0\nPRESSLY  P R EH1 S - L IY0\nPRESSMAN  P R EH1 S - M AH0 N\nPRESSNELL  P R EH1 S - N AH0 L\nPRESSON  P R EH1 - S AH0 N\nPRESSTEK  P R EH1 - S T EH2 K\nPRESSURE  P R EH1 - SH ER0\nPRESSURE'S  P R EH1 - SH ER0 Z\nPRESSURED  P R EH1 - SH ER0 D\nPRESSURES  P R EH1 - SH ER0 Z\nPRESSURING  P R EH1 - SH ER0 - IH0 NG\nPRESSURIZATION  P R EH2 - SH ER0 - IH0 - Z EY1 - SH AH0 N\nPRESSURIZE  P R EH1 - SH ER0 - AY2 Z\nPRESSURIZED  P R EH1 - SH ER0 - AY2 Z D\nPRESSURIZES  P R EH1 - SH ER0 - AY2 - Z IH0 Z\nPRESSWOOD  P R EH1 S - W UH2 D\nPREST  P R EH1 S T\nPRESTA  P R EH1 - S T AH0\nPRESTAGE  P R EH1 - S T IH0 JH\nPRESTECH  P R EH0 - S T EH1 K\nPRESTI  P R EH1 - S T IY0\nPRESTIA  P R EH1 - S T Y AH0\nPRESTIDGE  P R EH1 - S T IH0 JH\nPRESTIGE  P R EH0 - S T IY1 ZH\nPRESTIGIACOMO  P R EH0 - S T IY1 - JH AH0 - K OW0 - M OW0\nPRESTIGIOUS  P R EH0 - S T IH1 - JH AH0 S\nPRESTIGIOUS(2)  P ER0 - S T IY1 - JH AH0 S\nPRESTO  P R EH1 - S T OW2\nPRESTON  P R EH1 - S T AH0 N\nPRESTON'S  P R EH1 - S T AH0 N Z\nPRESTOWITZ  P R EH1 - S T AH0 - W IH0 T S\nPRESTRIDGE  P R EH1 - S T R IH0 JH\nPRESTWICH  P R EH1 S T - W IH0 CH\nPRESTWOOD  P R EH1 S T - W UH2 D\nPRESUMABLY  P R AH0 - Z UW1 - M AH0 - B L IY0\nPRESUMABLY(2)  P R IH0 - Z UW1 - M AH0 - B L IY0\nPRESUMABLY(3)  P R IY0 - Z UW1 - M AH0 - B L IY0\nPRESUME  P R IH0 - Z UW1 M\nPRESUMED  P R AH0 - Z UW1 M D\nPRESUMED(2)  P R IH0 - Z UW1 M D\nPRESUMED(3)  P R IY0 - Z UW1 M D\nPRESUMES  P R AH0 - Z UW1 M Z\nPRESUMES(2)  P R IY0 - Z UW1 M Z\nPRESUMING  P R IH0 - Z UW1 - M IH0 NG\nPRESUMING(2)  P R IY0 - Z UW1 - M IH0 NG\nPRESUMPTION  P R IH0 - Z AH1 M P - SH AH0 N\nPRESUMPTION(2)  P R IY0 - Z AH1 M P - SH AH0 N\nPRESUMPTIONS  P R IH0 - Z AH1 M P - SH AH0 N Z\nPRESUMPTIONS(2)  P R IY0 - Z AH1 M P - SH AH0 N Z\nPRESUMPTIVE  P R IY0 - Z AH1 M P - T IH0 V\nPRESUMPTUOUS  P R IH0 - Z AH1 M P - CH AH0 W - AH0 S\nPRESUPPOSE  P R IY2 - S AH0 - P OW1 Z\nPRESUPPOSES  P R IY2 - S AH0 - P OW1 - Z IH0 Z\nPRESUPPOSITION  P R IY2 - S AH0 - P AH0 - Z IH1 - SH AH0 N\nPRESUTTI  P R EH0 - S UW1 - T IY0\nPRESZLER  P R EH1 S - L ER0\nPRET  P R EH1 T\nPRETAX  P R IY1 - T AE1 K S\nPRETE  P R IY1 T\nPRETEEN  P R IY2 - T IY1 N\nPRETEENS  P R IY2 - T IY1 N Z\nPRETEND  P R IY0 - T EH1 N D\nPRETENDED  P R IY0 - T EH1 N - D AH0 D\nPRETENDED(2)  P R IY0 - T EH1 N - D IH0 D\nPRETENDER  P R IY0 - T EH1 N - D ER0\nPRETENDERS  P R IY0 - T EH1 N - D ER0 Z\nPRETENDING  P R IY0 - T EH1 N - D IH0 NG\nPRETENDS  P R IY0 - T EH1 N D Z\nPRETENSE  P R IY0 - T EH1 N S\nPRETENSES  P R IY0 - T EH1 N - S IH0 Z\nPRETENSION  P R IY0 - T EH1 N - SH AH0 N\nPRETENSIONS  P R AH0 - T EH1 N - SH AH0 N Z\nPRETENTIOUS  P R IY0 - T EH1 N - SH AH0 S\nPRETERM  P R IY1 - T ER0 M\nPRETEXT  P R IY1 - T EH2 K S T\nPRETORIA  P R IY0 - T AO1 - R IY0 - AH0\nPRETORIA'S  P R IY0 - T AO1 - R IY0 - AH0 Z\nPRETRIAL  P R IY0 - T R AY1 - AH0 L\nPRETTI  P R EH1 - T IY0\nPRETTIER  P R IH1 - T IY0 - ER0\nPRETTIES  P R IH1 - T IY0 Z\nPRETTIEST  P R IH1 - T IY0 - AH0 S T\nPRETTY  P R IH1 - T IY0\nPRETTYMAN  P R EH1 - T IY0 - M AH0 N\nPRETZEL  P R EH1 T - Z AH0 L\nPRETZELS  P R EH1 T - Z AH0 L Z\nPRETZER  P R EH1 T - Z ER0\nPREUSS  P R UW1 S\nPREUSSAG  P R UW1 - S AE0 G\nPREUSSER  P R OY1 - S ER0\nPREVAIL  P R IH0 - V EY1 L\nPREVAIL(2)  P R IY0 - V EY1 L\nPREVAILED  P R IH0 - V EY1 L D\nPREVAILED(2)  P R IY0 - V EY1 L D\nPREVAILING  P R IH0 - V EY1 - L IH0 NG\nPREVAILING(2)  P R IY0 - V EY1 - L IH0 NG\nPREVAILS  P R IH0 - V EY1 L Z\nPREVAILS(2)  P R IY0 - V EY1 L Z\nPREVAL  P R IY1 - V AE0 L\nPREVALENCE  P R EH1 - V AH0 - L AH0 N S\nPREVALENT  P R EH1 - V AH0 - L AH0 N T\nPREVATT  P R IH0 - V AE1 T\nPREVATTE  P R IH0 - V AE1 T\nPREVENT  P R IH0 - V EH1 N T\nPREVENT(2)  P R IY0 - V EH1 N T\nPREVENTABLE  P R IH0 - V EH1 N - T AH0 - B AH0 L\nPREVENTABLE(2)  P R IY0 - V EH1 N - T AH0 - B AH0 L\nPREVENTATIVE  P R IY0 - V EH1 N - T AH0 - T IH0 V\nPREVENTATIVES  P R IY0 - V EH1 N - T AH0 - T IH0 V Z\nPREVENTED  P R IH0 - V EH1 N - T IH0 D\nPREVENTED(2)  P R IY0 - V EH1 N - T AH0 D\nPREVENTED(3)  P R IY0 - V EH1 N - T IH0 D\nPREVENTED(4)  P R IH0 - V EH1 - N IH0 D\nPREVENTED(5)  P R IY0 - V EH1 - N AH0 D\nPREVENTED(6)  P R IY0 - V EH1 - N IH0 D\nPREVENTING  P R IH0 - V EH1 N - T IH0 NG\nPREVENTING(2)  P R IY0 - V EH1 N - T IH0 NG\nPREVENTING(3)  P R IH0 - V EH1 - N IH0 NG\nPREVENTING(4)  P R IY0 - V EH1 - N IH0 NG\nPREVENTION  P R IY0 - V EH1 N - SH AH0 N\nPREVENTIVE  P R IH0 - V EH1 N - T IH0 V\nPREVENTIVE(2)  P R IY0 - V EH1 N - T IH0 V\nPREVENTIVE(3)  P R IH0 - V EH1 - N IH0 V\nPREVENTIVE(4)  P R IY0 - V EH1 - N IH0 V\nPREVENTS  P R IH0 - V EH1 N T S\nPREVENTS(2)  P R IY0 - V EH1 N T S\nPREVETTE  P R IH0 - V EH1 T\nPREVIEW  P R IY1 - V Y UW2\nPREVIEWED  P R IY1 - V Y UW2 D\nPREVIEWING  P R IY1 - V Y UW2 - IH0 NG\nPREVIEWS  P R IY1 - V Y UW2 Z\nPREVIN  P R EH1 - V AH0 N\nPREVIOUS  P R IY1 - V IY0 - AH0 S\nPREVIOUSLY  P R IY1 - V IY0 - AH0 S - L IY0\nPREVITE  P R EH1 - V AY0 T\nPREVITI  P R EH0 - V IY1 - T IY0\nPREVO  P R EH1 - V OW0\nPREVOST  P R EY1 - V OW0 S T\nPREW  P R UW1\nPREWAR  P R IY0 - W AO1 R\nPREWAY  P R IY1 - W EY2\nPREWETT  P R UW1 - IH0 T\nPREWITT  P R UW1 - IH0 T\nPREY  P R EY1\nPREYED  P R EY1 D\nPREYER  P R EY1 - ER0\nPREYING  P R EY1 - IH0 NG\nPREYISTA  P R EY1 - IH2 - S T AH0\nPREYISTAS  P R EY1 - IH2 - S T AH0 Z\nPREYS  P R EY1 Z\nPREZIOSI  P R EH0 - Z IY0 - OW1 - S IY0\nPREZIOSO  P R EH0 - Z IY0 - OW1 - S OW0\nPREZZANO  P R EH0 - Z AA1 - N OW0\nPRI  P R AY1\nPRI(2)  P R IY1\nPRIAM  P R AY1 - AE2 M\nPRIAM'S  P R AY1 - AE2 M Z\nPRIAM'S(2)  P R AY1 - AH0 M Z\nPRIAM(2)  P R AY1 - AH0 M\nPRIBBLE  P R IH1 - B AH0 L\nPRIBULA  P R IY0 - B UW1 - L AH0\nPRIBYL  P R IH1 - B AH0 L\nPRICE  P R AY1 S\nPRICE'S  P R AY1 - S IH0 Z\nPRICED  P R AY1 S T\nPRICELESS  P R AY1 S - L AH0 S\nPRICER  P R AY1 - S ER0\nPRICES  P R AY1 - S AH0 Z\nPRICES(2)  P R AY1 - S IH0 Z\nPRICEY  P R AY1 - S IY0\nPRICHARD  P R IH1 - CH ER0 D\nPRICHETT  P R IH1 - CH IH0 T\nPRICIER  P R AY1 - S IY0 - ER0\nPRICIEST  P R AY2 - S IY0 - IH0 S T\nPRICING  P R AY1 - S IH0 NG\nPRICINGS  P R AY1 - S IH0 NG Z\nPRICK  P R IH1 K\nPRICKED  P R IH1 K T\nPRICKETT  P R IH1 - K IH0 T\nPRICKLEBACK  P R IH1 - K AH0 L - B AE2 K\nPRICKLEBACKS  P R IH1 - K AH0 L - B AE2 K S\nPRICKLY  P R IH1 K - L IY0\nPRICKS  P R IH1 K S\nPRICOR  P R AY1 - K AO2 R\nPRIDDY  P R IH1 - D IY0\nPRIDE  P R AY1 D\nPRIDEAUX  P R IH1 - D OW0\nPRIDED  P R AY1 - D IH0 D\nPRIDEMORE  P R AY1 D - M AO0 R\nPRIDES  P R AY1 D Z\nPRIDGEN  P R IH1 - JH AH0 N\nPRIDGEON  P R IH1 D - JH IH0 N\nPRIDMORE  P R IH1 D - M AO0 R\nPRIEBE  P R IY1 B\nPRIEBKE  P R IY1 B - K IY0\nPRIED  P R AY1 D\nPRIEM  P R IY1 M\nPRIEN  P R IY1 N\nPRIER  P R AY1 - ER0\nPRIES  P R AY1 Z\nPRIESS  P R IY1 S\nPRIEST  P R IY1 S T\nPRIEST'S  P R IY1 S T S\nPRIESTER  P R IY1 - S T ER0\nPRIESTESS  P R IY1 - S T AH0 S\nPRIESTHOOD  P R IY1 S T - HH UH0 D\nPRIESTLEY  P R IY1 S T - L IY0\nPRIESTLY  P R IY1 S T - L IY0\nPRIESTS  P R IY1 S T S\nPRIESTS(2)  P R IY1 S S\nPRIESTS(3)  P R IY1 S\nPRIETA  P R IY1 - T AH0\nPRIETA(2)  P R IY2 - EY1 - T AH0\nPRIETO  P R IY1 - T OW0\nPRIEUR  P R IY1 - ER0\nPRIG  P R IH1 G\nPRIGGE  P R IH1 G\nPRIGMORE  P R IH1 G - M AO0 R\nPRIHODA  P R IY0 - HH OW1 - D AH0\nPRIJEDOR  P R IH0 - JH EH1 - D ER0\nPRILL  P R IH1 L\nPRILLAMAN  P R IH1 - L AH0 - M AH0 N\nPRIM  P R IH1 M\nPRIMA  P R IY1 - M AH0\nPRIMACK  P R IH1 - M AH0 K\nPRIMACY  P R AY1 - M AH0 - S IY0\nPRIMAKOV  P R IY1 - M AH0 - K AA0 V\nPRIMAKOV(2)  P R IY1 - M AH0 - K AA0 F\nPRIMAL  P R AY1 - M AH0 L\nPRIMARIES  P R AY1 - M EH2 - R IY0 Z\nPRIMARIES(2)  P R AY1 - M ER0 - IY0 Z\nPRIMARILY  P R AY0 - M EH1 - R AH0 - L IY0\nPRIMARK  P R IH1 - M AA0 R K\nPRIMARY  P R AY1 - M EH2 - R IY0\nPRIMATE  P R AY1 - M EY2 T\nPRIMATES  P R AY1 - M EY2 T S\nPRIMAVERA  P R IY0 - M AA0 - V EH1 - R AH0\nPRIME  P R AY1 M\nPRIME'S  P R AY1 M Z\nPRIMEAU  P R IH0 - M OW1\nPRIMEAUX  P R IH0 - M OW1\nPRIMEBANK  P R AY1 M - B AE2 NG K\nPRIMECO  P R AY1 M - K OW2\nPRIMED  P R AY1 M D\nPRIMENEWS  P R AY1 M - N UW1 Z\nPRIMER  P R AY1 - M ER0\nPRIMERICA  P R IH0 - M EH1 - R IH0 - K AH0\nPRIMERICA'S  P R IH0 - M EH1 - R IH0 - K AH0 Z\nPRIMERS  P R AY1 - M ER0 Z\nPRIMES  P R AY1 M Z\nPRIMESTAR  P R AY1 M - S T AA2 R\nPRIMETIME  P R AY1 M - T AY2 M\nPRIMEVAL  P R AY0 - M IY1 - V AH0 L\nPRIMIANO  P R IY2 - M IY0 - AA1 - N OW0\nPRIMING  P R AY1 - M IH0 NG\nPRIMITIVE  P R IH1 - M AH0 - T IH0 V\nPRIMITIVE(2)  P R IH1 - M IH0 - T IH0 V\nPRIMITIVISTIC  P R IH2 - M IH0 - T IH0 - V IH1 - S T IH0 K\nPRIMLY  P R IH1 M - L IY0\nPRIMM  P R IH1 M\nPRIMMER  P R IH1 - M ER0\nPRIMO  P R IY1 - M OW2\nPRIMO'S  P R IY1 - M OW2 Z\nPRIMORDIAL  P R IH0 - M AO1 R - D IY0 - AH0 L\nPRIMORDIAL(2)  P R AY0 - M AO1 R - D IY0 - AH0 L\nPRIMP  P R IH1 M P\nPRIMROSE  P R IH1 M - R OW2 Z\nPRIMROSES  P R IH1 M - R OW2 - Z AH0 Z\nPRIMROSES(2)  P R IH1 M - R OW2 - Z IH0 Z\nPRIMUS  P R AY1 - M AH0 S\nPRINCE  P R IH1 N S\nPRINCE'S  P R IH1 N - S IH0 Z\nPRINCELY  P R IH1 N S - L IY0\nPRINCES  P R IH1 N - S AH0 Z\nPRINCES(2)  P R IH1 N - S IH0 Z\nPRINCESS  P R IH1 N - S EH0 S\nPRINCESS'S  P R IH1 N - S EH0 - S IH0 Z\nPRINCESSES  P R IH1 N - S EH0 - S IH0 Z\nPRINCETON  P R IH1 N - S T AH0 N\nPRINCETON'S  P R IH1 N - S T AH0 N Z\nPRINCEVILLE  P R IH1 N S - V IH2 L\nPRINCIPAL  P R IH1 N - S AH0 - P AH0 L\nPRINCIPAL'S  P R IH1 N - S AH0 - P AH0 L Z\nPRINCIPALITIES  P R IH2 N - S IH0 - P AE1 - L IH0 - T IY0 Z\nPRINCIPALITY  P R IH2 N - S IH0 - P AE1 - L IH0 - T IY0\nPRINCIPALLY  P R IH1 N - S IH0 - P L IY0\nPRINCIPALS  P R IH1 N - S AH0 - P AH0 L Z\nPRINCIPATO  P R IY0 N - CH IY0 - P AA1 - T OW0\nPRINCIPE  P R IY0 N - CH IY1 - P IY0\nPRINCIPIA  P R IH0 N - S IH1 - P IY0 - AH0\nPRINCIPLE  P R IH1 N - S AH0 - P AH0 L\nPRINCIPLED  P R IH1 N - S AH0 - P AH0 L D\nPRINCIPLES  P R IH1 N - S AH0 - P AH0 L Z\nPRINDIVILLE  P R IY0 N - D IY1 - V IH0 L\nPRINDL  P R IH1 N - D AH0 L\nPRINDLE  P R IH1 N - D AH0 L\nPRINE  P R AY1 N\nPRING  P R IH1 NG\nPRINGLE  P R IH1 NG - G AH0 L\nPRINKEY  P R IH1 NG - K IY0\nPRINOS  P R IY1 - N OW0 S\nPRINS  P R IH1 N Z\nPRINSEN  P R IH1 N - S AH0 N\nPRINT  P R IH1 N T\nPRINTABLE  P R IH1 N - T AH0 - B AH0 L\nPRINTED  P R IH1 N - T AH0 D\nPRINTED(2)  P R IH1 N - T IH0 D\nPRINTED(3)  P R IH1 - N AH0 D\nPRINTED(4)  P R IH1 - N IH0 D\nPRINTEMPS  P R IH1 N - T EH0 M P S\nPRINTER  P R IH1 N - T ER0\nPRINTER'S  P R IH1 N - T ER0 Z\nPRINTER'S(2)  P R IH1 - N ER0 Z\nPRINTER(2)  P R IH1 - N ER0\nPRINTERS  P R IH1 N - T ER0 Z\nPRINTERS(2)  P R IH1 - N ER0 Z\nPRINTING  P R IH1 N - T IH0 NG\nPRINTING'S  P R IH1 N - T IH0 NG Z\nPRINTING'S(2)  P R IH1 - N IH0 NG Z\nPRINTING(2)  P R IH1 - N IH0 NG\nPRINTINGS  P R IH1 N - T IH0 NG Z\nPRINTINGS(2)  P R IH1 - N IH0 NG Z\nPRINTMAKER  P R IH1 N T - M EY2 - K ER0\nPRINTMAKERS  P R IH1 N T - M EY2 - K ER0 Z\nPRINTON  P R IH1 N - T AH0 N\nPRINTOUT  P R IH1 N T - AW2 T\nPRINTOUTS  P R IH1 N T - AW2 T S\nPRINTS  P R IH1 N T S\nPRINTUP  P R IH1 N T - AH2 P\nPRINTY  P R IH1 N - T IY0\nPRINTZ  P R IH1 N T S\nPRINZ  P R IH1 N Z\nPRIOLA  P R IY0 - OW1 - L AH0\nPRIOLEAU  P R IY0 - OW1 - L OW0\nPRIOLO  P R IY0 - OW1 - L OW0\nPRIOR  P R AY1 - ER0\nPRIORE  P R IY0 - AO1 - R IY0\nPRIORE(2)  P R AY0 - AO1 - R AY0\nPRIORITIES  P R AY0 - AO1 - R AH0 - T IY0 Z\nPRIORITIZE  P R AY0 - AO1 - R AH0 - T AY2 Z\nPRIORITIZED  P R AY0 - AO1 - R AH0 - T AY2 Z D\nPRIORITIZES  P R AY0 - AO1 - R AH0 - T AY2 - Z IH0 Z\nPRIORITIZING  P R AY0 - AO1 - R AH0 - T AY2 - Z IH0 NG\nPRIORITY  P R AY0 - AO1 - R AH0 - T IY0\nPRIORS  P R AY1 - ER0 Z\nPRIORY  P R AY1 - ER0 - IY0\nPRIS  P R IH1 S\nPRISBURG  P R IH1 S - B ER0 G\nPRISCILLA  P R IH0 - S IH1 - L AH0\nPRISCO  P R IY1 - S K OW0\nPRISK  P R IH1 S K\nPRISM  P R IH1 - Z AH0 M\nPRISMATIC  P R IH0 Z - M AE1 - T IH0 K\nPRISON  P R IH1 - Z AH0 N\nPRISON'S  P R IH1 - Z AH0 N Z\nPRISONED  P R IH1 - Z AH0 N D\nPRISONER  P R IH1 - Z AH0 N - ER0\nPRISONER'S  P R IH1 - Z AH0 N - ER0 Z\nPRISONER'S(2)  P R IH1 Z - N ER0 Z\nPRISONER(2)  P R IH1 Z - N ER0\nPRISONERS  P R IH1 - Z AH0 N - ER0 Z\nPRISONERS'  P R IH1 - Z AH0 N - ER0 Z\nPRISONERS'(2)  P R IH1 Z - N ER0 Z\nPRISONERS(2)  P R IH1 Z - N ER0 Z\nPRISONS  P R IH1 - Z AH0 N Z\nPRISSIE  P R IH1 - S IY0\nPRISSY  P R IH1 - S IY0\nPRISTINE  P R IH1 - S T IY0 N\nPRITCHARD  P R IH1 - CH ER0 D\nPRITCHETT  P R IH1 - CH IH0 T\nPRITHVI  P R IH1 TH - V IY0\nPRITT  P R IH1 T\nPRITTS  P R IH1 T S\nPRITZ  P R IH1 T S\nPRITZKER  P R IH1 T - S K ER0\nPRITZKERS  P R IH1 T - S K ER0 Z\nPRITZL  P R IH1 T - Z AH0 L\nPRIVACIES  P R AY1 - V AH0 - S IY0 Z\nPRIVACY  P R AY1 - V AH0 - S IY0\nPRIVATE  P R AY1 - V AH0 T\nPRIVATE-EYE  P R AY1 - V AH0 - T AY1\nPRIVATELY  P R AY1 - V AH0 T - L IY0\nPRIVATES  P R AY1 - V AH0 T S\nPRIVATION  P R AY0 - V EY1 - SH AH0 N\nPRIVATIONS  P R AY0 - V EY1 - SH AH0 N Z\nPRIVATISATION  P R AY1 - V AH0 - T AH0 - Z EY1 - SH AH0 N\nPRIVATIZATION  P R AY1 - V AH0 - T AH0 - Z EY1 - SH AH0 N\nPRIVATIZATIONS  P R AY1 - V AH0 - T AH0 - Z EY1 - SH AH0 N Z\nPRIVATIZE  P R IH1 - V AH0 - T AY2 Z\nPRIVATIZED  P R AY1 - V AH0 - T AY2 Z D\nPRIVATIZING  P R AY1 - V AH0 - T AY2 - Z IH0 NG\nPRIVETT  P R IH1 - V IH0 T\nPRIVETTE  P R IH0 - V EH1 T\nPRIVILEGE  P R IH1 V - L AH0 JH\nPRIVILEGE(2)  P R IH1 V - L IH0 JH\nPRIVILEGE(3)  P R IH1 - V IH0 - L AH0 JH\nPRIVILEGE(4)  P R IH1 - V IH0 - L IH0 JH\nPRIVILEGED  P R IH1 V - L AH0 JH D\nPRIVILEGED(2)  P R IH1 V - L IH0 JH D\nPRIVILEGED(3)  P R IH1 - V IH0 - L AH0 JH D\nPRIVILEGED(4)  P R IH1 - V IH0 - L IH0 JH D\nPRIVILEGES  P R IH1 V - L AH0 - JH AH0 Z\nPRIVILEGES(2)  P R IH1 V - L IH0 - JH IH0 Z\nPRIVILEGES(3)  P R IH1 - V IH0 - L AH0 - JH AH0 Z\nPRIVILEGES(4)  P R IH1 - V IH0 - L IH0 - JH IH0 Z\nPRIVITERA  P R IY0 - V IY0 - T EH1 - R AH0\nPRIVOTT  P R IH1 - V AH0 T\nPRIVY  P R IH1 - V IY0\nPRIX  P R IY1\nPRIYAM  P R IY1 - AH0 M\nPRIZANT  P R IY1 - Z AA0 N T\nPRIZE  P R AY1 Z\nPRIZED  P R AY1 Z D\nPRIZES  P R AY1 - Z AH0 Z\nPRIZES(2)  P R AY1 - Z IH0 Z\nPRIZM  P R IH1 - Z AH0 M\nPRO  P R OW1\nPRO'S  P R OW1 Z\nPROACTIVE  P R OW1 - AE1 K - T IH0 V\nPROACTIVELY  P R OW1 - AE1 K - T IH0 V - L IY0\nPROB  P R AA1 B\nPROB(2)  P R OW1 B\nPROBABILITIES  P R AA2 - B AH0 - B IH1 - L AH0 - T IY0 Z\nPROBABILITY  P R AA2 - B AH0 - B IH1 - L AH0 - T IY0\nPROBABLE  P R AA1 - B AH0 - B AH0 L\nPROBABLY  P R AA1 - B AH0 - B L IY0\nPROBABLY(2)  P R AA1 - B L IY0\nPROBASCO  P R OW0 - B AA1 - S K OW0\nPROBATE  P R OW1 - B EY2 T\nPROBATION  P R OW0 - B EY1 - SH AH0 N\nPROBATIONARY  P R OW0 - B EY1 - SH AH0 N - EH2 - R IY0\nPROBATIONER  P R OW0 - B EY1 - SH AH0 N - ER0\nPROBATIONERS  P R OW0 - B EY1 - SH AH0 N - ER0 Z\nPROBATIVE  P R OW0 - B EY1 - T IH0 V\nPROBE  P R OW1 B\nPROBE'S  P R OW1 B Z\nPROBED  P R OW1 B D\nPROBENECID  P R AA2 - B EH1 - N AH0 - S IH0 D\nPROBERT  P R AA1 - B ER0 T\nPROBES  P R OW1 B Z\nPROBING  P R OW1 - B IH0 NG\nPROBITY  P R OW1 - B AH0 - T IY0\nPROBLEM  P R AA1 - B L AH0 M\nPROBLEM'S  P R AA1 - B L AH0 M Z\nPROBLEMATIC  P R AA2 - B L AH0 - M AE1 - T IH0 K\nPROBLEMATICAL  P R AA2 - B L AH0 - M AE1 - T IH0 - K AH0 L\nPROBLEMS  P R AA1 - B L AH0 M Z\nPROBOSCIS  P R OW0 - B AA1 - S AH0 S\nPROBST  P R AA1 B S T\nPROBURSA  P R OW2 - B ER1 - S AH0\nPROBUS  P R OW1 - B IH0 S\nPROCACCINI  P R OW0 - K AA0 - CH IY1 - N IY0\nPROCAINE  P R OW1 - K EY2 N\nPROCARDIA  P R OW0 - K AA1 R - D IY0 - AH0\nPROCASSINI  P R AA2 - K AH0 - S IY1 - N IY0\nPROCEDURAL  P R AH0 - S IY1 - JH ER0 - AH0 L\nPROCEDURALLY  P R AH0 - S IY1 - JH ER0 - AH0 - L IY0\nPROCEDURALLY(2)  P R AH0 - S IY1 - JH R AH0 - L IY0\nPROCEDURE  P R AH0 - S IY1 - JH ER0\nPROCEDURE(2)  P R OW0 - S IY1 - JH ER0\nPROCEDURES  P R AH0 - S IY1 - JH ER0 Z\nPROCEDURES(2)  P R OW0 - S IY1 - JH ER0 Z\nPROCEED  P R AH0 - S IY1 D\nPROCEED(2)  P R OW0 - S IY1 D\nPROCEED(3)  P ER0 - S IY1 D\nPROCEEDED  P R AH0 - S IY1 - D AH0 D\nPROCEEDED(2)  P R OW0 - S IY1 - D IH0 D\nPROCEEDING  P R AH0 - S IY1 - D IH0 NG\nPROCEEDING(2)  P R OW0 - S IY1 - D IH0 NG\nPROCEEDINGS  P R OW0 - S IY1 - D IH0 NG Z\nPROCEEDINGS(2)  P R AH0 - S IY1 - D IH0 NG Z\nPROCEEDS  P R AH0 - S IY1 D Z\nPROCEEDS(2)  P R OW0 - S IY1 D Z\nPROCELL  P R OW0 - S EH1 L\nPROCESO  P R OW2 - S EH1 - S OW0\nPROCESS  P R AA1 - S EH2 S\nPROCESS(2)  P R AO1 - S EH2 S\nPROCESSED  P R AA1 - S EH0 S T\nPROCESSES  P R AA1 - S EH0 - S AH0 Z\nPROCESSING  P R AA1 - S EH0 - S IH0 NG\nPROCESSION  P R AH0 - S EH1 - SH AH0 N\nPROCESSION(2)  P R OW0 - S EH1 - SH AH0 N\nPROCESSIONAL  P R AH0 - S EH1 - SH AH0 - N AH0 L\nPROCESSIONAL(2)  P R OW0 - S EH1 - SH AH0 - N AH0 L\nPROCESSIONS  P R OW0 - S EH1 - SH AH0 N Z\nPROCESSOR  P R AA1 - S EH2 - S ER0\nPROCESSOR'S  P R AA1 - S EH2 - S ER0 Z\nPROCESSORS  P R AA1 - S EH2 - S ER0 Z\nPROCH  P R AA1 K\nPROCHASKA  P R AH0 - HH AA1 - S K AH0\nPROCHAZKA  P R AH0 - HH AA1 Z - K AH0\nPROCHNOW  P R AA1 - N AW0\nPROCIDA  P R OW0 - CH IY1 - D AH0\nPROCK  P R AA1 K\nPROCKTER  P R AA1 K - T ER0\nPROCLAIM  P R OW0 - K L EY1 M\nPROCLAIMED  P R OW0 - K L EY1 M D\nPROCLAIMING  P R OW0 - K L EY1 - M IH0 NG\nPROCLAIMS  P R OW0 - K L EY1 M Z\nPROCLAMATION  P R AA2 - K L AH0 - M EY1 - SH AH0 N\nPROCLAMATIONS  P R AA2 - K L AH0 - M EY1 - SH AH0 N Z\nPROCLIVITIES  P R OW0 - K L IH1 - V AH0 - T IY0 Z\nPROCLIVITY  P R OW0 - K L IH1 - V AH0 - T IY0\nPROCONSUL  P R OW0 - K AA1 N - S AH0 L\nPROCOPIO  P R OW0 - K OW1 - P IY0 - OW0\nPROCORDIA  P R AA0 - K AO1 R - D IY0 - AH0\nPROCRASTINATE  P R AH0 - K R AE1 - S T AH0 - N EY2 T\nPROCRASTINATING  P R AH0 - K R AE1 - S T AH0 - N EY2 - T IH0 NG\nPROCRASTINATION  P R AH0 - K R AE2 - S T AH0 - N EY1 - SH AH0 N\nPROCREATE  P R OW1 - K R IY0 - EY1 T\nPROCREATES  P R OW1 - K R IY0 - EY1 T S\nPROCREATION  P R OW1 - K R IY0 - EY1 - SH AH0 N\nPROCTER  P R AA1 K - T ER0\nPROCTOR  P R AA1 K - T ER0\nPROCTOR'S  P R AA1 K - T ER0 Z\nPROCTORS  P R AA1 K - T ER0 Z\nPROCTORSILEX  P R AO2 K - T ER0 - S AY1 - L EH0 K S\nPROCURE  P R OW0 - K Y UH1 R\nPROCURED  P R OW0 - K Y UH1 R D\nPROCUREMENT  P R OW0 - K Y UH1 R - M AH0 N T\nPROCUREMENTS  P R OW0 - K Y UH1 R - M AH0 N T S\nPROCURER  P R OW0 - K Y UH1 - R ER0\nPROCURING  P R OW0 - K Y UH1 - R IH0 NG\nPROCYTE  P R OW1 - S AY2 T\nPROD  P R AA1 D\nPRODDED  P R AA1 - D IH0 D\nPRODDING  P R AA1 - D IH0 NG\nPRODI  P R OW1 - D IY0\nPRODIGAL  P R AA1 - D IH0 - G AH0 L\nPRODIGIES  P R AA1 - D AH0 - JH IY0 Z\nPRODIGIOUS  P R AH0 - D IH1 - JH AH0 S\nPRODIGIOUSLY  P R OW0 - D IH1 - JH IH0 S - L IY0\nPRODIGY  P R AA1 - D AH0 - JH IY0\nPRODIGY'S  P R AA1 - D AH0 - JH IY0 Z\nPRODS  P R AA1 D Z\nPRODUCE  P R AH0 - D UW1 S\nPRODUCE(2)  P R OW1 - D UW0 S\nPRODUCED  P R AH0 - D UW1 S T\nPRODUCER  P R AH0 - D UW1 - S ER0\nPRODUCER'S  P R AH0 - D UW1 - S ER0 Z\nPRODUCERS  P R AH0 - D UW1 - S ER0 Z\nPRODUCERS'  P R AH0 - D UW1 - S ER0 Z\nPRODUCES  P R AH0 - D UW1 - S AH0 Z\nPRODUCES(2)  P R AH0 - D UW1 - S IH0 Z\nPRODUCING  P R AH0 - D UW1 - S IH0 NG\nPRODUCT  P R AA1 - D AH0 K T\nPRODUCT'S  P R AA1 - D AH0 K T S\nPRODUCT'S(2)  P R AA1 - D AH0 K S\nPRODUCTION  P R AH0 - D AH1 K - SH AH0 N\nPRODUCTION'S  P R OW0 - D AH1 K - SH AH0 N Z\nPRODUCTION'S(2)  P R AH0 - D AH1 K - SH AH0 N Z\nPRODUCTION'S(3)  P ER0 - D AH1 K - SH AH0 N Z\nPRODUCTION(2)  P R OW0 - D AH1 K - SH AH0 N\nPRODUCTION(3)  P ER0 - D AH1 K - SH AH0 N\nPRODUCTIONS  P R AH0 - D AH1 K - SH AH0 N Z\nPRODUCTIONS'  P R AH0 - D AH1 K - SH AH0 N Z\nPRODUCTIONS'(2)  P R OW0 - D AH1 K - SH AH0 N Z\nPRODUCTIONS'(3)  P ER0 - D AH1 K - SH AH0 N Z\nPRODUCTIONS(2)  P R OW0 - D AH1 K - SH AH0 N Z\nPRODUCTIONS(3)  P ER0 - D AH1 K - SH AH0 N Z\nPRODUCTIVE  P R AH0 - D AH1 K - T IH0 V\nPRODUCTIVE(2)  P R OW0 - D AH1 K - T IH0 V\nPRODUCTIVE(3)  P ER0 - D AH1 K - T IH0 V\nPRODUCTIVELY  P R AH0 - D AH1 K - T IH0 V - L IY0\nPRODUCTIVELY(2)  P R OW0 - D AH1 K - T IH0 V - L IY0\nPRODUCTIVELY(3)  P ER0 - D AH1 K - T IH0 V - L IY0\nPRODUCTIVITY  P R OW2 - D AH0 K - T IH1 - V AH0 - T IY0\nPRODUCTIVITY(2)  P R OW2 - D AH0 K - T IH1 - V IH0 - T IY0\nPRODUCTS  P R AA1 - D AH0 K T S\nPRODUCTS'  P R AO1 - D AH0 K T S\nPRODUCTS'(2)  P R AO1 - D AH0 K S\nPRODUCTS(2)  P R AA1 - D AH0 K S\nPRODY  P OW1 - D IY0\nPROEHL  P R OW1 L\nPROF.  P R AO1 F\nPROF.(2)  P R AH0 - F EH1 - S ER0\nPROFANATION  P R AO2 - F AH0 - N EY1 - SH AH0 N\nPROFANE  P R OW0 - F EY1 N\nPROFANITY  P R OW0 - F AE1 - N AH0 - T IY0\nPROFESS  P R AH0 - F EH1 S\nPROFESSED  P R AH0 - F EH1 S T\nPROFESSES  P R AH0 - F EH1 - S IH0 Z\nPROFESSING  P R AH0 - F EH1 - S IH0 NG\nPROFESSION  P R AH0 - F EH1 - SH AH0 N\nPROFESSION'S  P R AH0 - F EH1 - SH AH0 N Z\nPROFESSIONAL  P R AH0 - F EH1 - SH AH0 - N AH0 L\nPROFESSIONALISM  P R AH0 - F EH1 - SH AH0 N - AH0 - L IH2 - Z AH0 M\nPROFESSIONALIZE  P R AH0 - F EH1 - SH AH0 N - AH0 - L AY2 Z\nPROFESSIONALIZED  P R AH0 - F EH1 - SH AH0 N - AH0 - L AY2 Z D\nPROFESSIONALLY  P R AH0 - F EH1 - SH AH0 N - AH0 - L IY0\nPROFESSIONALLY(2)  P R AH0 - F EH1 SH - N AH0 - L IY0\nPROFESSIONALS  P R AH0 - F EH1 - SH AH0 - N AH0 L Z\nPROFESSIONALS'  P R AH0 - F EH1 - SH AH0 - N AH0 L Z\nPROFESSIONS  P R AH0 - F EH1 - SH AH0 N Z\nPROFESSOR  P R AH0 - F EH1 - S ER0\nPROFESSOR'S  P R AH0 - F EH1 - S ER0 Z\nPROFESSORIAL  P R OW2 - F AH0 - S AO1 - R IY0 - AH0 L\nPROFESSORS  P R AH0 - F EH1 - S ER0 Z\nPROFESSORS'  P R AH0 - F EH1 - S ER0 Z\nPROFESSORSHIP  P R AH0 - F EH1 - S ER0 - SH IH2 P\nPROFETA  P R OW0 - F EH1 - T AH0\nPROFFER  P R AA1 - F ER0\nPROFFERED  P R AA1 - F ER0 D\nPROFFERING  P R AA1 - F ER0 - IH0 NG\nPROFFIT  P R AA1 - F IH0 T\nPROFFITT  P R AA1 - F IH0 T\nPROFICIENCY  P R AH0 - F IH1 - SH AH0 N - S IY0\nPROFICIENT  P R AA0 - F IH1 - SH AH0 N T\nPROFILE  P R OW1 - F AY2 L\nPROFILED  P R OW1 - F AY2 L D\nPROFILES  P R OW1 - F AY2 L Z\nPROFILING  P R OW1 - F AY2 - L IH0 NG\nPROFIT  P R AA1 - F AH0 T\nPROFIT(2)  P R AA1 - F IH0 T\nPROFITABILITY  P R AA2 - F IH0 - T AH0 - B IH1 - L IH0 - T IY0\nPROFITABLE  P R AA1 - F AH0 - T AH0 - B AH0 L\nPROFITABLY  P R AA1 - F AH0 - T AH0 - B L IY0\nPROFITED  P R AA1 - F AH0 - T AH0 D\nPROFITEER  P R AA2 - F AH0 - T IH1 R\nPROFITEERING  P R AA2 - F AH0 - T IH1 - R IH0 NG\nPROFITEERS  P R AA2 - F AH0 - T IH1 R Z\nPROFITING  P R AA1 - F AH0 - T IH0 NG\nPROFITS  P R AA1 - F IH0 T S\nPROFITT  P R AA1 - F IH0 T\nPROFITTAKING  P R AA1 - F IH0 T - T EY2 - K IH0 NG\nPROFLIGACY  P R AO1 - F L IH0 - G AE2 - S IY0\nPROFLIGATE  P R AO1 - F L IH0 - G EY2 T\nPROFOUND  P R OW0 - F AW1 N D\nPROFOUNDLY  P R OW0 - F AW1 N D - L IY0\nPROFS  P R AA1 F S\nPROFUSE  P R AH0 - F Y UW1 S\nPROFUSELY  P R AH0 - F Y UW1 S - L IY0\nPROFUSION  P R AH0 - F Y UW1 - ZH AH0 N\nPROGENITOR  P R OW0 - JH EH1 - N IH0 - T ER0\nPROGENY  P R AA1 - JH AH0 - N IY0\nPROGESTERONE  P R OW0 - JH EH1 - S T ER0 - OW2 N\nPROGESTIN  P R OW0 - JH EH1 - S T IH0 N\nPROGLACIAL  P R OW0 - G L EY1 - SH AH0 L\nPROGNOSES  P R AA0 G - N OW1 - S IY0 Z\nPROGNOSIS  P R AA0 G - N OW1 - S AH0 S\nPROGNOSTICATE  P R AA2 G - N AA1 - S T AH0 - K EY2 T\nPROGNOSTICATED  P R AA2 G - N AA1 - S T AH0 - K EY2 - T IH0 D\nPROGNOSTICATER  P R AA2 G - N AA1 - S T AH0 - K EY2 - T ER0\nPROGNOSTICATES  P R AA2 G - N AA1 - S T AH0 - K EY2 T S\nPROGNOSTICATING  P R AA2 G - N AA1 - S T AH0 - K EY2 - T IH0 NG\nPROGNOSTICATION  P R AA0 G - N AA2 - S T AH0 - K EY1 - SH AH0 N\nPROGNOSTICATIONS  P R AA0 G - N AA2 - S T AH0 - K EY1 - SH AH0 N Z\nPROGNOSTICATIVE  P R AA2 G - N AA1 - S T AH0 - K EY2 - T IH0 V\nPROGRAM  P R OW1 - G R AE2 M\nPROGRAM'S  P R OW1 - G R AE2 M Z\nPROGRAMING  P R OW1 - G R AE2 - M IH0 NG\nPROGRAMMABLE  P R OW1 - G R AE2 - M AH0 - B AH0 L\nPROGRAMMATIC  P R AA2 - G R AH0 - M AE1 - T IH0 K\nPROGRAMME  P R OW1 - G R AE2 M\nPROGRAMMED  P R OW1 - G R AE2 M D\nPROGRAMMER  P R OW1 - G R AE2 - M ER0\nPROGRAMMERS  P R OW1 - G R AE2 - M ER0 Z\nPROGRAMMING  P R OW1 - G R AE2 - M IH0 NG\nPROGRAMS  P R OW1 - G R AE2 M Z\nPROGRAMS'  P R OW1 - G R AE2 M Z\nPROGRESS  P R AA1 - G R EH2 S\nPROGRESS(2)  P R AH0 - G R EH1 S\nPROGRESS(3)  P R OW0 - G R EH1 S\nPROGRESSED  P R AH0 - G R EH1 S T\nPROGRESSES  P R AA1 - G R EH2 - S AH0 Z\nPROGRESSES(2)  P R OW0 - G R EH1 - S AH0 Z\nPROGRESSING  P R AH0 - G R EH1 - S IH0 NG\nPROGRESSION  P R AH0 - G R EH1 - SH AH0 N\nPROGRESSIVE  P R AH0 - G R EH1 - S IH0 V\nPROGRESSIVELY  P R AA0 - G R EH1 - S IH0 V - L IY0\nPROGRESSIVES  P R AA0 - G R EH1 - S IH0 V Z\nPROGRESSIVITY  P R AA2 - G R EH0 - S IH1 - V AH0 - T IY0\nPROHASKA  P R AH0 - HH AA1 - S K AH0\nPROHIBIT  P R OW0 - HH IH1 - B AH0 T\nPROHIBITED  P R OW0 - HH IH1 - B AH0 - T AH0 D\nPROHIBITING  P R OW0 - HH IH1 - B AH0 - T IH0 NG\nPROHIBITION  P R OW2 - AH0 - B IH1 - SH AH0 N\nPROHIBITION'S  P R OW2 - AH0 - B IH1 - SH AH0 N Z\nPROHIBITIONS  P R OW2 - AH0 - B IH1 - SH AH0 N Z\nPROHIBITIVE  P R OW0 - HH IH1 - B AH0 - T IH0 V\nPROHIBITIVELY  P R OW0 - HH IH1 - B AH0 - T IH0 V - L IY0\nPROHIBITORY  P R OW0 - HH IH1 - B AH0 - T AO2 - R IY0\nPROHIBITS  P R OW0 - HH IH1 - B AH0 T S\nPROIA  P R OW1 - Y AH0\nPROIETTI  P R OY0 - EH1 - T IY0\nPROJECT  P R AA1 - JH EH0 K T\nPROJECT'S  P R AA1 - JH EH0 K T S\nPROJECT'S(2)  P R AA1 - JH EH0 K S\nPROJECT(2)  P R AH0 - JH EH1 K T\nPROJECTED  P R AH0 - JH EH1 K - T AH0 D\nPROJECTILE  P R AH0 - JH EH1 K - T AH0 L\nPROJECTILE(2)  P R AH0 - JH EH1 K - T AY0 L\nPROJECTILES  P R AH0 - JH EH1 K - T AH0 L Z\nPROJECTILES(2)  P R AH0 - JH EH1 K - T AY0 L Z\nPROJECTING  P R AH0 - JH EH1 K - T IH0 NG\nPROJECTION  P R AH0 - JH EH1 K - SH AH0 N\nPROJECTIONS  P R AH0 - JH EH1 K - SH AH0 N Z\nPROJECTIVE  P R AH0 - JH EH1 K - T IH0 V\nPROJECTOR  P R AH0 - JH EH1 K - T ER0\nPROJECTORS  P R AH0 - JH EH1 K - T ER0 Z\nPROJECTS  P R AA1 - JH EH0 K T S\nPROJECTS'  P R AO1 - JH EH0 K T S\nPROJECTS'(2)  P R AO1 - JH EH0 K S\nPROJECTS(2)  P R AH0 - JH EH1 K T S\nPROJECTS(3)  P R AA1 - JH EH0 K S\nPROJECTS(4)  P R AH0 - JH EH1 K S\nPROKOFIEV  P R AA1 - K OW0 - F IY2 V\nPROKOP  P R OW1 - K AH0 P\nPROLACTIN  P R OW0 - L AE1 K - T AH0 N\nPROLER  P R OW1 - L ER0\nPROLETARIAN  P R OW2 - L AH0 - T EH1 - R IY0 - AH0 N\nPROLETARIAT  P R OW2 - L AH0 - T EH1 - R IY0 - AH0 T\nPROLEUKIN  P R OW1 - L UW0 - K IH0 N\nPROLIFERATE  P R OW0 - L IH1 - F ER0 - EY2 T\nPROLIFERATED  P R AH0 - L IH1 - F ER0 - EY2 - T IH0 D\nPROLIFERATING  P R OW0 - L IH1 - F ER0 - EY2 - T IH0 NG\nPROLIFERATION  P R OW2 - L IH0 - F ER0 - EY1 - SH AH0 N\nPROLIFIC  P R OW0 - L IH1 - F IH0 K\nPROLIFICALLY  P R OW0 - L IH1 - F IH0 K - L IY0\nPROLINEA  P R OW2 - L IH1 - N IY0 - AH0\nPROLOG  P R OW0 - L AA1 G\nPROLOGUE  P R OW1 - L AA0 G\nPROLONG  P R AH0 - L AO1 NG\nPROLONGED  P R AH0 - L AO1 NG D\nPROLONGING  P R OW0 - L AO1 - NG IH0 NG\nPROLONGS  P R AH0 - L AO1 NG Z\nPROM  P R AA1 M\nPROMENADE  P R AA2 - M AH0 - N EY1 D\nPROMETHIUM  P R AH0 - M IY1 - TH IY0 - AH0 M\nPROMILACIDIC  P R OW0 - M IH0 - L AH0 - S IY1 - D IH0 K\nPROMINENCE  P R AA1 - M AH0 - N AH0 N S\nPROMINENCES  P R AA1 - M AH0 - N AH0 N - S AH0 Z\nPROMINENT  P R AA1 - M AH0 - N AH0 N T\nPROMINENTLY  P R AA1 - M AH0 - N AH0 N T - L IY0\nPROMISCUITY  P R OW2 - M IH0 - S K Y UW1 - AH0 - T IY0\nPROMISCUITY(2)  P R AA2 - M IH0 S - K Y UW1 - AH0 - T IY0\nPROMISCUOUS  P R OW1 - M IH0 - S K W AH0 S\nPROMISCUOUS(2)  P R AA0 - M IH1 S - K Y UW0 - AH0 S\nPROMISE  P R AA1 - M AH0 S\nPROMISED  P R AA1 - M AH0 S T\nPROMISES  P R AA1 - M AH0 - S AH0 Z\nPROMISING  P R AA1 - M AH0 - S IH0 NG\nPROMISSORY  P R AA1 - M AH0 - S AO2 - R IY0\nPROMO  P R OW1 - M OW2\nPROMOS  P R OW1 - M OW2 Z\nPROMOTE  P R AH0 - M OW1 T\nPROMOTED  P R AH0 - M OW1 - T AH0 D\nPROMOTER  P R AH0 - M OW1 - T ER0\nPROMOTERS  P R AH0 - M OW1 - T ER0 Z\nPROMOTES  P R AH0 - M OW1 T S\nPROMOTING  P R AH0 - M OW1 - T IH0 NG\nPROMOTION  P R AH0 - M OW1 - SH AH0 N\nPROMOTION(2)  P ER0 - M OW1 - SH AH0 N\nPROMOTIONAL  P R AH0 - M OW1 - SH AH0 - N AH0 L\nPROMOTIONAL(2)  P ER0 - M OW1 - SH AH0 - N AH0 L\nPROMOTIONS  P R AH0 - M OW1 - SH AH0 N Z\nPROMOTIONS(2)  P ER0 - M OW1 - SH AH0 N Z\nPROMPT  P R AA1 M P T\nPROMPTED  P R AA1 M P - T AH0 D\nPROMPTED(2)  P R AA1 M P - T IH0 D\nPROMPTING  P R AA1 M P - T IH0 NG\nPROMPTLY  P R AA1 M P T - L IY0\nPROMPTLY(2)  P R AA1 M - P L IY0\nPROMPTS  P R AA1 M P T S\nPROMPTS(2)  P R AA1 M P S\nPROMS  P R AA1 M Z\nPROMSTER  P R AA1 M - S T ER0\nPROMSTERS  P R AA1 M - S T ER0 Z\nPROMULGATE  P R OW0 - M AH1 L - G EY0 T\nPROMULGATED  P R AA1 - M AH0 L - G EY2 - T AH0 D\nPROMULGATING  P R AA1 - M AH0 L - G EY2 - T IH0 NG\nPROMUS  P R OW1 - M AH0 S\nPRONE  P R OW1 N\nPRONG  P R AO1 NG\nPRONGED  P R AO1 NG D\nPRONGHORN  P R AO1 NG - HH AO2 R N\nPRONGS  P R AO1 NG Z\nPRONOUN  P R OW1 - N AW0 N\nPRONOUNCE  P R AH0 - N AW1 N S\nPRONOUNCED  P R AH0 - N AW1 N S T\nPRONOUNCEMENT  P R AH0 - N AW1 N - S M AH0 N T\nPRONOUNCEMENTS  P R AH0 - N AW1 N - S M AH0 N T S\nPRONOUNCES  P R AH0 - N AW1 N - S IH0 Z\nPRONOUNCING  P R AH0 - N AW1 N - S IH0 NG\nPRONOUNS  P R OW1 - N AW0 N Z\nPRONOVOST  P R OW0 - N OW1 - V OW0 S T\nPRONTO  P R AA1 N - T OW0\nPRONUNCIATION  P R OW0 - N AH2 N - S IY0 - EY1 - SH AH0 N\nPRONUNCIATION(2)  P R AH0 - N AH2 N - S IY0 - EY1 - SH AH0 N\nPRONUNCIATIONS  P R OW0 - N AH2 N - S IY0 - EY1 - SH AH0 N Z\nPRONUNCIATIONS(2)  P R AH0 - N AH2 N - S IY0 - EY1 - SH AH0 N Z\nPROOF  P R UW1 F\nPROOFED  P R UW1 F T\nPROOFING  P R UW1 - F IH0 NG\nPROOFREAD  P R UW1 F - R IY2 D\nPROOFREADING  P R UW1 F - R IY2 - D IH0 NG\nPROOFS  P R UW1 F S\nPROP  P R AA1 P\nPROPAGANDA  P R AA2 - P AH0 - G AE1 N - D AH0\nPROPAGANDIST  P R AA2 - P AH0 - G AE1 N - D AH0 S T\nPROPAGANDISTIC  P R AA2 - P AH0 - G AH0 N - D IH1 - S T IH0 K\nPROPAGANDISTS  P R AA2 - P AH0 - G AE1 N - D AH0 S T S\nPROPAGANDISTS(2)  P R AA2 - P AH0 - G AE1 N - D AH0 S S\nPROPAGANDISTS(3)  P R AA2 - P AH0 - G AE1 N - D AH0 S\nPROPAGANDIZE  P R AA2 - P AH0 - G AE1 N - D AY2 Z\nPROPAGATE  P R AA1 - P AH0 - G EY2 T\nPROPAGATED  P R AA1 - P AH0 - G EY2 - T IH0 D\nPROPAGATING  P R AA1 - P AH0 - G EY2 - T IH0 NG\nPROPAGATION  P R AA2 - P AH0 - G EY1 - SH AH0 N\nPROPANE  P R OW1 - P EY2 N\nPROPEL  P R AH0 - P EH1 L\nPROPELLANT  P R AH0 - P EH1 - L AH0 N T\nPROPELLANTS  P R OW0 - P EH1 - L AH0 N T S\nPROPELLED  P R AH0 - P EH1 L D\nPROPELLER  P R AH0 - P EH1 - L ER0\nPROPELLERS  P R AH0 - P EH1 - L ER0 Z\nPROPELLING  P R AH0 - P EH1 - L IH0 NG\nPROPELS  P R AH0 - P EH1 L Z\nPROPENSITIES  P R AH0 - P EH1 N - S AH0 - T IY0 Z\nPROPENSITY  P R AH0 - P EH1 N - S IH0 - T IY0\nPROPER  P R AA1 - P ER0\nPROPERLY  P R AA1 - P ER0 - L IY0\nPROPERTIES  P R AA1 - P ER0 - T IY0 Z\nPROPERTIES'  P R OW1 - P ER0 - T IY0 Z\nPROPERTY  P R AA1 - P ER0 - T IY0\nPROPERTY'S  P R AA1 - P ER0 - T IY0 Z\nPROPES  P R OW1 P S\nPROPFAN  P R AA1 P - F AE2 N\nPROPHECIES  P R AA1 - F AH0 - S IY0 Z\nPROPHECY  P R AA1 - F AH0 - S IY0\nPROPHESIED  P R AA1 - F AH0 - S AY2 D\nPROPHESIED(2)  P R AA1 - F AH0 - S IY2 D\nPROPHESIES  P R AA1 - F AH0 - S AY0 Z\nPROPHET  P R AA1 - F AH0 T\nPROPHETESS  P R AA1 - F AH0 - T AH0 S\nPROPHETIC  P R AH0 - F EH1 - T IH0 K\nPROPHETS  P R AA1 - F AH0 T S\nPROPHYLACTIC  P R AA2 - F IH0 - L AE1 K - T IH0 K\nPROPHYLACTIC(2)  P R OW2 - F IH0 - L AE1 K - T IH0 K\nPROPIONIC  P R OW2 - P IY0 - AA1 - N IH0 K\nPROPITIOUS  P R AH0 - P IH1 - SH AH0 S\nPROPONENT  P R AH0 - P OW1 - N AH0 N T\nPROPONENTS  P R AH0 - P OW1 - N AH0 N T S\nPROPORTION  P R AH0 - P AO1 R - SH AH0 N\nPROPORTIONAL  P R AH0 - P AO1 R - SH AH0 - N AH0 L\nPROPORTIONALITY  P R AH0 - P AO2 R - SH AH0 - N AE1 - L IH0 - T IY0\nPROPORTIONALLY  P R AH0 - P AO1 R - SH AH0 N - AH0 - L IY0\nPROPORTIONALLY(2)  P R AH0 - P AO1 R SH - N AH0 - L IY0\nPROPORTIONATE  P R AH0 - P AO1 R - SH AH0 N - AH0 T\nPROPORTIONATELY  P R AH0 - P AO1 R - SH AH0 N - AH0 T - L IY0\nPROPORTIONED  P R AH0 - P AO1 R - SH AH0 N D\nPROPORTIONS  P R AH0 - P AO1 R - SH AH0 N Z\nPROPOSAL  P R AH0 - P OW1 - Z AH0 L\nPROPOSAL'S  P R AH0 - P OW1 - Z AH0 L Z\nPROPOSALS  P R AH0 - P OW1 - Z AH0 L Z\nPROPOSE  P R AH0 - P OW1 Z\nPROPOSED  P R AH0 - P OW1 Z D\nPROPOSES  P R AH0 - P OW1 - Z IH0 Z\nPROPOSING  P R AH0 - P OW1 - Z IH0 NG\nPROPOSITION  P R AA2 - P AH0 - Z IH1 - SH AH0 N\nPROPOSITIONED  P R AA2 - P AH0 - Z IH1 - SH AH0 N D\nPROPOSITIONS  P R AA2 - P AH0 - Z IH1 - SH AH0 N Z\nPROPOUND  P R AH0 - P AW1 N D\nPROPOUNDED  P R AH0 - P AW1 N - D AH0 D\nPROPP  P R AA1 P\nPROPPED  P R AA1 P T\nPROPPER  P R AA1 - P ER0\nPROPPING  P R AA1 - P IH0 NG\nPROPPS  P R AA1 P S\nPROPRIETARIES  P R AH0 - P R AY1 - AH0 - T EH2 - R IY0 Z\nPROPRIETARY  P R AH0 - P R AY1 - AH0 - T EH2 - R IY0\nPROPRIETOR  P R AH0 - P R AY1 - AH0 - T ER0\nPROPRIETOR'S  P R AH0 - P R AY1 - AH0 - T ER0 Z\nPROPRIETORS  P R AH0 - P R AY1 - AH0 - T ER0 Z\nPROPRIETORSHIP  P R AH0 - P R AY1 - AH0 - T ER0 - SH IH2 P\nPROPRIETORSHIPS  P R AH0 - P R AY1 - AH0 - T ER0 - SH IH2 P S\nPROPRIETY  P R AH0 - P R AY1 - AH0 - T IY0\nPROPS  P R AA1 P S\nPROPST  P R AA1 P S T\nPROPULSION  P R AH0 - P AH1 L - SH AH0 N\nPROPYLENE  P R OW0 - P AH0 - L IY1 N\nPRORATE  P R OW1 - R EY1 T\nPRORATED  P R OW1 - R EY2 - T IH0 D\nPRORATION  P R OW2 - R EY1 - SH AH0 N\nPROROK  P R AO1 - R AH0 K\nPROS  P R OW1 Z\nPROS'  P R OW1 Z\nPROSAIC  P R OW0 - Z EY1 - IH0 K\nPROSCAR  P R AO1 S - K AA2 R\nPROSCH  P R AO1 SH\nPROSCIA  P R OW1 - S CH AH0\nPROSCRIBE  P R OW0 - S K R AY1 B\nPROSCRIBED  P R OW0 - S K R AY1 B D\nPROSCRIBES  P R OW0 - S K R AY1 B Z\nPROSCRIPTION  P R OW0 - S K R IH1 P - SH AH0 N\nPROSE  P R OW1 Z\nPROSECUTABLE  P R AA1 - S IH0 - K Y UW2 - T AH0 - B AH0 L\nPROSECUTE  P R AA1 - S AH0 - K Y UW2 T\nPROSECUTED  P R AA1 - S IH0 - K Y UW2 - T IH0 D\nPROSECUTES  P R AA1 - S IH0 - K Y UW2 T S\nPROSECUTING  P R AA1 - S IH0 - K Y UW2 - T IH0 NG\nPROSECUTION  P R AA2 - S AH0 - K Y UW1 - SH AH0 N\nPROSECUTION'S  P R AA2 - S AH0 - K Y UW1 - SH AH0 N Z\nPROSECUTIONS  P R AA2 - S AH0 - K Y UW1 - SH AH0 N Z\nPROSECUTOR  P R AA1 - S IH0 - K Y UW2 - T ER0\nPROSECUTOR'S  P R AA1 - S IH0 - K Y UW2 - T ER0 Z\nPROSECUTORIAL  P R AA2 - S IH0 - K Y UW0 - T AO1 - R IY0 - AH0 L\nPROSECUTORS  P R AA1 - S IH0 - K Y UW2 - T ER0 Z\nPROSECUTORS'  P R AA1 - S AH0 - K Y UW0 - T ER0 Z\nPROSEK  P R OW1 - S EH0 K\nPROSELYTIZE  P R AA1 - S AH0 - L AH0 - T AY2 Z\nPROSELYTIZED  P R AA1 - S AH0 - L AH0 - T AY2 Z D\nPROSELYTIZING  P R AA1 - S AH0 - L AH0 - T AY2 - Z IH0 NG\nPROSERPINA  P R OW0 - S ER1 - P AH0 - N AH0\nPROSERPINA(2)  P R AA0 - S ER0 - P IY1 - N AH0\nPROSERV  P R OW1 - S ER2 V\nPROSHARE  P R OW1 - SH EH2 R\nPROSISE  P R OW1 - S AY0 Z\nPROSKAUER  P R AO1 S - K AW0 R\nPROSKE  P R OW1 S K\nPROSODY  P R AA1 - S AH0 - D IY0\nPROSORBA  P R AA0 - S AO1 R - B AH0\nPROSPECT  P R AA1 - S P EH0 K T\nPROSPECTING  P R AO2 - S P EH1 K - T IH0 NG\nPROSPECTIVE  P R AH0 - S P EH1 K - T IH0 V\nPROSPECTIVELY  P R AH0 - S P EH1 K - T IH0 V - L IY0\nPROSPECTOR  P R AO1 - S P EH2 K - T ER0\nPROSPECTORS  P R AO1 - S P EH2 K - T ER0 Z\nPROSPECTS  P R AA1 - S P EH0 K T S\nPROSPECTS(2)  P R AA1 - S P EH0 K S\nPROSPECTUS  P R AH0 - S P EH1 K - T AH0 S\nPROSPECTUSES  P R AH0 - S P EH1 K - T AH0 - S IH0 Z\nPROSPEKT  P R AA1 - S P EH0 K T\nPROSPER  P R AA1 - S P ER0\nPROSPERA  P R OW0 - S P EH1 - R AH0\nPROSPERED  P R AA1 - S P ER0 D\nPROSPERI  P R OW0 - S P EH1 - R IY0\nPROSPERING  P R AA1 - S P ER0 - IH0 NG\nPROSPERITY  P R AA0 - S P EH1 - R AH0 - T IY0\nPROSPEROUS  P R AA1 - S P ER0 - AH0 S\nPROSPERS  P R AA1 - S P ER0 Z\nPROSS  P R AO1 S\nPROSSER  P R AO1 - S ER0\nPROST  P R AA1 S T\nPROSTAGLANDIN  P R OW0 - S T AE0 - G L AE1 N - D IH0 N\nPROSTAGLANDINS  P R OW0 - S T AE0 - G L AE1 N - D IH0 N Z\nPROSTATE  P R AA1 - S T EY2 T\nPROSTATECTOMY  P R AA2 - S T EY0 - T EH1 K - T AH0 - M IY0\nPROSTATIC  P R OW0 - S T AE1 - T IH0 K\nPROSTHESES  P R AA0 S - TH IY1 - S IY0 Z\nPROSTHESIS  P R AO2 S - TH EH1 - S IH0 S\nPROSTHESIS(2)  P R AO2 S - TH IY1 - S AH0 S\nPROSTHETIC  P R AA0 S - TH EH1 - T IH0 K\nPROSTHETICS  P R AA0 S - TH EH1 - T IH0 K S\nPROSTITUTE  P R AA1 - S T AH0 - T UW2 T\nPROSTITUTES  P R AA1 - S T AH0 - T UW2 T S\nPROSTITUTION  P R AA2 - S T AH0 - T UW1 - SH AH0 N\nPROSTRATE  P R AA1 - S T R EY0 T\nPROSTRATION  P R AA0 S - T R EY1 - SH AH0 N\nPROTAGONIST  P R OW0 - T AE1 - G AH0 - N AH0 S T\nPROTAGONISTS  P R OW0 - T AE1 - G AH0 - N AH0 S T S\nPROTAGONISTS(2)  P R OW0 - T AE1 - G AH0 - N AH0 S S\nPROTAGONISTS(3)  P R OW0 - T AE1 - G AH0 - N AH0 S\nPROTEAN  P R OW0 - T IY1 - AH0 N\nPROTEAN(2)  P R OW1 - T IY0 - AH0 N\nPROTEASE  P R OW1 - T IY0 - EY2 Z\nPROTECT  P R AH0 - T EH1 K T\nPROTECT(2)  P ER0 - T EH1 K T\nPROTECTED  P R AH0 - T EH1 K - T AH0 D\nPROTECTED(2)  P R AH0 - T EH1 K - T IH0 D\nPROTECTED(3)  P ER0 - T EH1 K - T IH0 D\nPROTECTING  P R AH0 - T EH1 K - T IH0 NG\nPROTECTING(2)  P ER0 - T EH1 K - T IH0 NG\nPROTECTION  P R AH0 - T EH1 K - SH AH0 N\nPROTECTION(2)  P ER0 - T EH1 K - SH AH0 N\nPROTECTIONISM  P R AH0 - T EH1 K - SH AH0 - N IH2 - Z AH0 M\nPROTECTIONISM(2)  P ER0 - T EH1 K - SH AH0 - N IH2 - Z AH0 M\nPROTECTIONIST  P R AH0 - T EH1 K - SH AH0 - N IH0 S T\nPROTECTIONIST(2)  P ER0 - T EH1 K - SH AH0 - N IH0 S T\nPROTECTIONISTS  P R AH0 - T EH1 K - SH AH0 - N IH0 S T S\nPROTECTIONISTS(2)  P R AH0 - T EH1 K - SH AH0 - N IH0 S S\nPROTECTIONISTS(3)  P ER0 - T EH1 K - SH AH0 - N IH0 S T S\nPROTECTIONISTS(4)  P ER0 - T EH1 K - SH AH0 - N IH0 S S\nPROTECTIONISTS(5)  P R AH0 - T EH1 K - SH AH0 - N IH0 S\nPROTECTIONISTS(6)  P ER0 - T EH1 K - SH AH0 - N IH0 S\nPROTECTIONS  P R AH0 - T EH1 K - SH AH0 N Z\nPROTECTIONS(2)  P ER0 - T EH1 K - SH AH0 N Z\nPROTECTIVE  P R AH0 - T EH1 K - T IH0 V\nPROTECTIVE(2)  P ER0 - T EH1 K - T IH0 V\nPROTECTIVELY  P R AH0 - T EH1 K - T IH0 V - L IY0\nPROTECTIVELY(2)  P ER0 - T EH1 K - T IH0 V - L IY0\nPROTECTOR  P R AH0 - T EH1 K - T ER0\nPROTECTORATE  P R AH0 - T EH1 K - T ER0 - AH0 T\nPROTECTORS  P R AH0 - T EH1 K - T ER0 Z\nPROTECTS  P R AH0 - T EH1 K T S\nPROTEGE  P R OW1 - T AH0 - ZH EY2\nPROTEGES  P R OW1 - T IH0 - Z EY2 Z\nPROTEIN  P R OW1 - T IY2 N\nPROTEINS  P R OW1 - T IY2 N Z\nPROTEST  P R OW1 - T EH2 S T\nPROTEST(2)  P R AH0 - T EH1 S T\nPROTESTANT  P R AA1 - T AH0 - S T AH0 N T\nPROTESTANTISM  P R AA1 - T AH0 - S T AH0 N - T IH2 - Z AH0 M\nPROTESTANTS  P R AA1 - T AH0 - S T AH0 N T S\nPROTESTATION  P R OW2 - T EH2 - S T EY1 - SH AH0 N\nPROTESTATIONS  P R OW2 - T EH2 - S T EY1 - SH AH0 N Z\nPROTESTED  P R AH0 - T EH1 - S T AH0 D\nPROTESTED(2)  P R OW1 - T EH2 - S T AH0 D\nPROTESTER  P R OW1 - T EH2 - S T ER0\nPROTESTERS  P R OW1 - T EH2 - S T ER0 Z\nPROTESTERS'  P R OW1 - T EH2 - S T ER0 Z\nPROTESTING  P R AH0 - T EH1 - S T IH0 NG\nPROTESTING(2)  P R OW1 - T EH2 - S T IH0 NG\nPROTESTORS  P R OW1 - T EH2 - S T ER0 Z\nPROTESTS  P R OW1 - T EH2 S T S\nPROTESTS(2)  P R OW1 - T EH2 S S\nPROTESTS(3)  P R OW1 - T EH2 S\nPROTESTS(4)  P R AH0 - T EH1 S T S\nPROTESTS(5)  P R AH0 - T EH1 S S\nPROTESTS(6)  P R AH0 - T EH1 S\nPROTHALLUS  P R OW2 - TH AE1 - L AH0 S\nPROTHERO  P R AA1 - DH ER0 - OW2\nPROTHORAX  P R OW0 - TH AO1 - R AE0 K S\nPROTHRO  P R OW1 - TH R OW0\nPROTIGAL  P R AA1 - T IH0 - G AH0 L\nPROTIUM  P R OW1 - T IY0 - AH0 M\nPROTO  P R OW1 - T AH0\nPROTO-STIRRUP  P R OW2 - T OW1 - S T ER1 - AH0 P\nPROTOCOL  P R OW1 - T AH0 - K AA2 L\nPROTOCOL(2)  P R OW1 - T AH0 - K AO2 L\nPROTOCOLS  P R OW1 - T AH0 - K AO2 L Z\nPROTOHISTORY  P R OW2 - T OW0 - HH IH1 - S T ER0 - IY0\nPROTON  P R OW1 - T AA2 N\nPROTON'S  P R OW1 - T AA2 N Z\nPROTONS  P R OW1 - T AA2 N Z\nPROTOTYPE  P R OW1 - T AH0 - T AY2 P\nPROTOTYPES  P R OW1 - T AH0 - T AY2 P S\nPROTOTYPICAL  P R OW2 - T AH0 - T IH1 - P IH0 - K AH0 L\nPROTOZOA  P R OW2 - T AH0 - Z OW1 - AH0\nPROTOZOAN  P R OW2 - T AH0 - Z OW1 - AH0 N\nPROTOZOANS  P R OW2 - T AH0 - Z OW1 - AH0 N Z\nPROTRACT  P R OW0 - T R AE1 K T\nPROTRACT(2)  P R OW1 - T R AE0 K T\nPROTRACTED  P R OW0 - T R AE1 K - T IH0 D\nPROTROPIN  P R AA1 - T R AH0 - P IH0 N\nPROTROPIN(2)  P R OW0 - T R OW1 - P IH0 N\nPROTRUDE  P R OW0 - T R UW1 D\nPROTRUDING  P R OW0 - T R UW1 - D IH0 NG\nPROTUBERANCE  P R OW0 - T UW1 - B ER0 - AH0 N S\nPROTUBERANCE(2)  P R AH0 - T UW1 - B ER0 - AH0 N S\nPROTUBERANCES  P R OW0 - T UW1 - B ER0 - AH0 N - S AH0 Z\nPROTUBERANCES(2)  P R AH0 - T UW1 - B ER0 - AH0 N - S AH0 Z\nPROTZ  P R AA1 T S\nPROTZMAN  P R AA1 T S - M AH0 N\nPROUD  P R AW1 D\nPROUDER  P R AW1 - D ER0\nPROUDEST  P R AW1 - D AH0 S T\nPROUDFIT  P R AW1 D - F IH2 T\nPROUDFOOT  P R AW1 D - F UH2 T\nPROUDFOOT'S  P R AW1 D - F UH2 T S\nPROUDLY  P R AW1 D - L IY0\nPROUGH  P R AW1\nPROULX  P R AW1 L K S\nPROUSE  P R AW1 S\nPROUST  P R AW1 S T\nPROUST(2)  P R UW1 S T\nPROUT  P R AW1 T\nPROUTY  P R AW1 - T IY0\nPROVABLE  P R UW1 - V AH0 - B AH0 L\nPROVANCE  P R OW1 - V AH0 N S\nPROVANT  P R OW1 - V AH0 N T\nPROVE  P R UW1 V\nPROVED  P R UW1 V D\nPROVEN  P R UW1 - V AH0 N\nPROVENANCE  P R AA1 - V AH0 - N AH0 N S\nPROVENCE  P R OW1 - V AH0 N S\nPROVENCHER  P R AA1 - V IH0 N - CH ER0\nPROVENCIO  P R OW2 - V EH1 N - S IY0 - OW0\nPROVENTUS  P R OW2 - V EH1 N - T AH0 S\nPROVENZA  P R OW2 - V EH1 N - Z AH0\nPROVENZANO  P R OW2 - V EH0 N - Z AA1 - N OW0\nPROVERA  P R OW2 - V EH1 - R AH0\nPROVERB  P R AA1 - V ER0 B\nPROVERBIAL  P R AH0 - V ER1 - B IY0 - AH0 L\nPROVERBS  P R AA1 - V ER0 B Z\nPROVES  P R UW1 V Z\nPROVIDE  P R AH0 - V AY1 D\nPROVIDED  P R AH0 - V AY1 - D AH0 D\nPROVIDED(2)  P R AH0 - V AY1 - D IH0 D\nPROVIDENCE  P R AA1 - V AH0 - D AH0 N S\nPROVIDENCE'S  P R AA1 - V AH0 - D AH0 N - S IH0 Z\nPROVIDENIYA  P R OW2 - V IH0 - D EH1 - N IH0 - Y AH0\nPROVIDENT  P R AA1 - V IH0 - D AH0 N T\nPROVIDENTIAL  P R AA2 - V AH0 - D EH1 N - CH AH0 L\nPROVIDER  P R AH0 - V AY1 - D ER0\nPROVIDERS  P R AH0 - V AY1 - D ER0 Z\nPROVIDES  P R AH0 - V AY1 D Z\nPROVIDIAN  P R OW2 - V IH1 - D IY0 - AH0 N\nPROVIDING  P R AH0 - V AY1 - D IH0 NG\nPROVIGO  P R OW2 - V IH1 - G OW0\nPROVIGO'S  P R OW0 - V IY1 - G OW0 Z\nPROVINCE  P R AA1 - V AH0 N S\nPROVINCE'S  P R AA1 - V AH0 N - S IH0 Z\nPROVINCE(2)  P R AA1 - V IH0 N S\nPROVINCES  P R AA1 - V AH0 N - S AH0 Z\nPROVINCETOWN  P R AA1 - V AH0 N - S T AW2 N\nPROVINCIAL  P R AH0 - V IH1 N - SH AH0 L\nPROVINCIALISM  P R AH0 - V IH1 N - CH AH0 - L IH2 - Z AH0 M\nPROVINCIALLY  P R AH0 - V IH1 N - SH AH0 - L IY0\nPROVINE  P R OW0 - V IY1 - N IY0\nPROVING  P R UW1 - V IH0 NG\nPROVISION  P R AH0 - V IH1 - ZH AH0 N\nPROVISIONAL  P R AH0 - V IH1 - ZH AH0 - N AH0 L\nPROVISIONALLY  P R AH0 - V IH1 - ZH AH0 N - AH0 - L IY0\nPROVISIONALLY(2)  P R AH0 - V IH1 ZH - N AH0 - L IY0\nPROVISIONING  P R AH0 - V IH1 - ZH AH0 N - IH0 NG\nPROVISIONS  P R AH0 - V IH1 - ZH AH0 N Z\nPROVISO  P R AH0 - V AY1 - Z OW0\nPROVO  P R OW1 - V OW0\nPROVOCATION  P R AA2 - V AH0 - K EY1 - SH AH0 N\nPROVOCATIONS  P R AA2 - V AH0 - K EY1 - SH AH0 N Z\nPROVOCATIVE  P R OW0 - V AA1 - K AH0 - T IH0 V\nPROVOCATIVELY  P R OW0 - V AA1 - K AH0 - T IH0 V - L IY0\nPROVOKE  P R AH0 - V OW1 K\nPROVOKED  P R AH0 - V OW1 K T\nPROVOKES  P R AH0 - V OW1 K S\nPROVOKING  P R AH0 - V OW1 - K IH0 NG\nPROVOST  P R OW1 - V OW0 S T\nPROVOSTS  P R OW1 - V OW0 S T S\nPROVOSTS(2)  P R OW1 - V OW0 S S\nPROVOSTS(3)  P R OW1 - V OW0 S\nPROVUS  P R OW1 - V AH0 S\nPROW  P R AW1\nPROWANT  P R AW1 - AH0 N T\nPROWELL  P R AA1 - W EH0 L\nPROWESS  P R AW1 - AH0 S\nPROWL  P R AW1 L\nPROWLER  P R AW1 - L ER0\nPROWLING  P R AW1 - L IH0 NG\nPROWS  P R AW1 Z\nPROWSE  P R AW1 Z\nPROXIES  P R AA1 K - S IY0 Z\nPROXIMAL  P R AA1 K - S AH0 - M AH0 L\nPROXIMATE  P R AA1 K - S AH0 - M AH0 T\nPROXIMITY  P R AA0 K - S IH1 - M AH0 - T IY0\nPROXMIRE  P R AA1 K S - M AY2 R\nPROXY  P R AA1 K - S IY0\nPROZAC  P R OW1 - Z AE2 K\nPRU  P R UW1\nPRU'S  P R UW1 Z\nPRUCAPITAL  P R UW2 - K AE1 - P IH0 - T AH0 L\nPRUCHA  P R AH1 - CH AH0\nPRUDE  P R UW1 D\nPRUDEN  P R UW1 - D AH0 N\nPRUDENCE  P R UW1 - D AH0 N S\nPRUDENCY  P R UW1 - D AH0 N - S IY0\nPRUDENT  P R UW1 - D AH0 N T\nPRUDENTE  P R AH1 - D IH0 N T\nPRUDENTIAL  P R UW0 - D EH1 N - CH AH0 L\nPRUDENTIAL'S  P R UW0 - D EH1 N - CH AH0 L Z\nPRUDENTIAL(2)  P R UW0 - D EH1 N - SH AH0 L\nPRUDENTIALBACHE  P R UW0 - D EH2 N - T IY0 - AE1 L - B AE0 CH\nPRUDENTIALBACHE(2)  P R UW0 - D EH1 N - SH AH0 L - B AE0 CH\nPRUDENTLY  P R UW1 - D AH0 N T - L IY0\nPRUDENTRUST  P R UW1 - D AH0 N - T R AH2 S T\nPRUDERY  P R UW1 - D ER0 - IY0\nPRUDHOE  P R AH1 D - HH OW2\nPRUDHOMME  P R AH1 D - HH AH0 M\nPRUDISH  P R UW1 - D IH0 SH\nPRUDIT  P R UW1 - D IH0 T\nPRUE  P R UW1\nPRUER  P R UW1 - ER0\nPRUESS  P R UW1 S\nPRUETER  P R UH1 - T ER0\nPRUETT  P R UW1 T\nPRUETTE  P R UW0 - EH1 T\nPRUGH  P R UW1\nPRUIETT  P R UW1 - IH0 T\nPRUITT  P R UW1 - IH0 T\nPRUNE  P R UW1 N\nPRUNEAU  P R AH0 - N OW1\nPRUNED  P R UW1 N D\nPRUNEDA  P R UW0 - N EH1 - D AH0\nPRUNEDALE  P R UW1 N - D EY2 L\nPRUNELLA  P R UW0 - N EH1 - L AH0\nPRUNER  P R UW1 - N ER0\nPRUNES  P R UW1 N Z\nPRUNIER  P R UW1 - N IY0 - ER0\nPRUNING  P R UW1 - N IH0 NG\nPRUNSKIENE  P R UW1 N - S K IY2 N\nPRUNTY  P R AH1 N - T IY0\nPRURIENT  P R UH1 - R IY0 - AH0 N T\nPRUS  P R AH1 S\nPRUSAK  P R UW1 - S AH0 K\nPRUSHA  P R AH1 - SH AH0\nPRUSINSKI  P R AH0 - S IH1 N - S K IY0\nPRUSKI  P R AH1 S - K IY0\nPRUSS  P R AH1 S\nPRUSSAK  P R AH1 - S AH0 K\nPRUSSIA  P R AH1 - SH AH0\nPRUSSIAN  P R AH1 - SH AH0 N\nPRUST  P R AH1 S T\nPRUTZMAN  P R AH1 T S - M AH0 N\nPRUYN  P R AY1 N\nPRY  P R AY1\nPRYCE  P R AY1 S\nPRYDE  P R AY1 D\nPRYER  P R AY1 - ER0\nPRYING  P R AY1 - IH0 NG\nPRYNNE  P R IH1 N\nPRYOR  P R AY1 - ER0\nPRYOR'S  P R AY1 - ER0 Z\nPRZYBOCKI  P R AH0 Z - B AA1 - K IY0\nPRZYBYL  P ER0 - Z IH1 - B AH0 L\nPRZYBYLA  P ER2 - Z AH0 - B IH1 - L AH0\nPRZYBYLSKI  P ER2 - Z AH0 - B IH1 L - S K IY0\nPRZYBYSZ  P ER0 - Z IH1 - B IH0 SH\nPRZYWARA  P ER0 - Z AH0 - V AA1 - R AH0\nPSALM  S AA1 L M\nPSALM(2)  S AA1 M\nPSALMS  S AA1 L M Z\nPSALMS(2)  S AA1 M Z\nPSALTER  S AO1 L - T ER0\nPSALTERS  S AO1 L - T ER0 Z\nPSAROUTHAKIS  S EH2 - R UW0 - TH AA1 - K IH0 S\nPSENCIK  S EH1 N - S IH0 K\nPSEUDO  S UW1 - D OW0\nPSEUDOMONAS  S UW2 - D AH0 - M OW1 - N AH0 Z\nPSEUDONYM  S UW1 - D AH0 - N IH2 M\nPSEUDONYMS  S UW1 - D AH0 - N IH2 M Z\nPSEUDOPODIAL  S UW2 - D AH0 - P OW1 - D IY0 - AH0 L\nPSEUDOSCIENCE  S UW2 - D OW0 - S AY1 - AH0 N S\nPSEUDOSCIENTIFIC  S UW2 - D OW0 - S AY2 - AH0 N - T IH1 - F IH0 K\nPSI  S AY1\nPSILOCYBIN  S AY2 - L AH0 - S AY1 - B AH0 N\nPSORIASIS  S ER0 - AY1 - AH0 - S AH0 S\nPSYCH  S AY1 K\nPSYCHE  S AY1 - K IY0\nPSYCHED  S AY1 K T\nPSYCHEDELIC  S AY2 - K AH0 - D EH1 - L IH0 K\nPSYCHES  S AY1 - K IY0 Z\nPSYCHIATRIC  S AY2 - K IY0 - AE1 - T R IH0 K\nPSYCHIATRIST  S AH0 - K AY1 - AH0 - T R AH0 S T\nPSYCHIATRIST'S  S AH0 - K AY1 - AH0 - T R AH0 S T S\nPSYCHIATRISTS  S AH0 - K AY1 - AH0 - T R AH0 S T S\nPSYCHIATRISTS(2)  S AH0 - K AY1 - AH0 - T R AH0 S S\nPSYCHIATRISTS(3)  S AH0 - K AY1 - AH0 - T R AH0 S\nPSYCHIATRY  S AY0 - K AY1 - AH0 - T R IY0\nPSYCHIATRY(2)  S IH0 - K AY1 - AH0 - T R IY0\nPSYCHIC  S AY1 - K IH0 K\nPSYCHICAL  S AY1 - K IH0 - K AH0 L\nPSYCHICS  S AY1 - K IH0 K S\nPSYCHO  S AY1 - K OW0\nPSYCHOANALYSIS  S AY2 - K OW0 - AH0 - N AE1 - L AH0 - S AH0 S\nPSYCHOANALYSIS(2)  S AY2 - K OW0 - AH0 - N AE1 - L IH0 - S IH0 S\nPSYCHOANALYST  S AY2 - K OW0 - AE1 - N AH0 - L AH0 S T\nPSYCHOANALYTIC  S AY2 - K OW0 - AE2 - N AH0 - L IH1 - T IH0 K\nPSYCHOBABBLE  S AY2 - K OW0 - B AE1 - B AH0 L\nPSYCHODYNAMIC  S AY2 - K OW0 - D AY0 - N AE1 - M IH0 K\nPSYCHOGENIC  S AY2 - K OW0 - JH EH1 - N IH0 K\nPSYCHOKINESIS  S AY2 - K OW0 - K AH0 - N IY1 - S AH0 S\nPSYCHOLOGICAL  S AY2 - K AH0 - L AA1 - JH IH0 - K AH0 L\nPSYCHOLOGICALLY  S AY2 - K AH0 - L AA1 - JH IH0 K - L IY0\nPSYCHOLOGIST  S AY0 - K AA1 - L AH0 - JH AH0 S T\nPSYCHOLOGISTS  S AY0 - K AA1 - L AH0 - JH AH0 S T S\nPSYCHOLOGISTS(2)  S AY0 - K AA1 - L AH0 - JH AH0 S S\nPSYCHOLOGISTS(3)  S AY0 - K AA1 - L AH0 - JH AH0 S\nPSYCHOLOGY  S AY0 - K AA1 - L AH0 - JH IY0\nPSYCHOPATH  S AY1 - K OW0 - P AE2 TH\nPSYCHOPATHIC  S AY2 - K AH0 - P AE1 - TH IH0 K\nPSYCHOPATHS  S AY1 - K OW0 - P AE2 TH S\nPSYCHOPATHY  S AY0 - K AA1 - P AH0 - TH IY0\nPSYCHOSIS  S AY0 - K OW1 - S AH0 S\nPSYCHOSOMATIC  S AY0 - K OW2 - S AH0 - M AE1 - T IH0 K\nPSYCHOTHERAPEUTIC  S AY2 - K OW0 - TH EH2 - R AH0 - P Y UW1 - T IH0 K\nPSYCHOTHERAPIST  S AY2 - K AH0 - TH EH1 - R AH0 - P IH0 S T\nPSYCHOTHERAPISTS  S AY2 - K AH0 - TH EH1 - R AH0 - P IH0 S T S\nPSYCHOTHERAPISTS(2)  S AY2 - K AH0 - TH EH1 - R AH0 - P IH0 S S\nPSYCHOTHERAPISTS(3)  S AY2 - K AH0 - TH EH1 - R AH0 - P IH0 S\nPSYCHOTHERAPY  S AY2 - K OW0 - TH EH1 - R AH0 - P IY0\nPSYCHOTIC  S AY2 - K AA1 - T IH0 K\nPSYLLIUM  S IH1 - L IY0 - AH0 M\nPTACEK  T AA1 - CH EH2 K\nPTAK  T AE1 K\nPTOLEMAIC  T AA2 - L AH0 - M EY1 - IH0 K\nPTOLEMY  T AA1 - L AH0 - M IY0\nPTOMAINE  T OW1 - M EY0 N\nPTOMAINES  T OW1 - M EY0 N Z\nPTOVSKY  P AH0 - T AO1 V - S K IY0\nPTY  T AY1\nPTYON  T AY1 - AO0 N\nPU  P UW1\nPUAT  P Y UW1 - AE0 T\nPUB  P AH1 B\nPUBCO  P AH1 B - K OW0\nPUBERTY  P Y UW1 - B ER0 - T IY0\nPUBIC  P Y UW1 - B IH0 K\nPUBLIC  P AH1 - B L IH0 K\nPUBLIC'S  P AH1 - B L IH0 K S\nPUBLIC-SPIRIT  P AH1 - B L IH0 K - S P IH1 - R IH0 T\nPUBLIC-SPIRITED  P AH1 - B L IH0 K - S P IH1 - R IH0 - T AH0 D\nPUBLIC-SPIRITEDNESS  P AH1 - B L IH0 K - S P IH1 - R IH0 - T IH0 D - N AH0 S\nPUBLICALLY  P AH1 - B L IH0 K - L IY0\nPUBLICATION  P AH2 - B L IH0 - K EY1 - SH AH0 N\nPUBLICATION'S  P AH2 - B L IH0 - K EY1 - SH AH0 N Z\nPUBLICATIONS  P AH2 - B L IH0 - K EY1 - SH AH0 N Z\nPUBLICATIONS'  P AH2 - B L IH0 - K EY1 - SH AH0 N Z\nPUBLICIS  P AH0 - B L IY1 - S IH0 S\nPUBLICIST  P AH1 - B L IH0 - S IH0 S T\nPUBLICISTS  P AH1 - B L IH0 - S IH0 S T S\nPUBLICISTS(2)  P AH1 - B L IH0 - S IH0 S S\nPUBLICISTS(3)  P AH1 - B L IH0 - S IH0 S\nPUBLICITY  P AH0 - B L IH1 - S AH0 - T IY0\nPUBLICITY(2)  P AH0 - B L IH1 - S IH0 - T IY0\nPUBLICIZE  P AH1 - B L IH0 - S AY2 Z\nPUBLICIZED  P AH1 - B L IH0 - S AY2 Z D\nPUBLICIZING  P AH1 - B L AH0 - S AY2 - Z IH0 NG\nPUBLICKER  P AH1 - B L IH0 - K ER0\nPUBLICLY  P AH1 - B L IH0 K - L IY0\nPUBLICS  P AH1 - B L IH0 K S\nPUBLISH  P AH1 - B L IH0 SH\nPUBLISHED  P AH1 - B L IH0 SH T\nPUBLISHER  P AH1 - B L IH0 - SH ER0\nPUBLISHER'S  P AH1 - B L IH0 - SH ER0 Z\nPUBLISHERS  P AH1 - B L IH0 - SH ER0 Z\nPUBLISHERS'  P AH1 - B L IH0 - SH ER0 Z\nPUBLISHES  P AH1 - B L IH0 - SH AH0 Z\nPUBLISHES(2)  P AH1 - B L IH0 - SH IH0 Z\nPUBLISHING  P AH1 - B L IH0 - SH IH0 NG\nPUBLISHING'S  P AH1 - B L IH0 - SH IH0 NG Z\nPUBLISHINGS  P AH1 - B L IH0 - SH IH0 NG Z\nPUBLITECH  P AH1 - B L IH0 - T EH2 K\nPUBLIX  P AH1 - B L IH0 K S\nPUBS  P AH1 B Z\nPUCCI  P UW1 - CH IY0\nPUCCIARELLI  P UW0 - CH ER0 - EH1 - L IY0\nPUCCINELLI  P UW0 - CH IY0 - N EH1 - L IY0\nPUCCINI  P UW0 - CH IY1 - N IY0\nPUCCIO  P UW1 - CH IY0 - OW0\nPUCHALSKI  P AH0 - HH AA1 L - S K IY0\nPUCHE  P UW1 CH\nPUCILLO  P UW0 - CH IH1 - L OW0\nPUCK  P AH1 K\nPUCKER  P AH1 - K ER0\nPUCKETT  P AH1 - K IH0 T\nPUCKISH  P AH1 - K IH0 SH\nPUDDING  P UH1 - D IH0 NG\nPUDDINGS  P UH1 - D IH0 NG Z\nPUDDLE  P AH1 - D AH0 L\nPUDDLES  P AH1 - D AH0 L Z\nPUDER  P Y UW1 - D ER0\nPUDGIE  P AH1 - JH IY0\nPUDGIE'S  P AH1 - JH IY0 Z\nPUDGIES  P AH1 - JH IY0 Z\nPUDGY  P AH1 - JH IY0\nPUDLO  P AH1 D - L OW0\nPUDONG  P Y UW1 - D AO1 NG\nPUDONG(2)  P UW1 - D AO1 NG\nPUDWILL  P AH0 D - W IH1 L\nPUEBLA  P W EY1 - B L AH0\nPUEBLO  P W EH1 - B L OW0\nPUENTE  P UW1 N T\nPUENTES  P W EH1 N - T EH0 S\nPUERILE  P Y UW0 - R IY1 L\nPUERTO  P W EH1 R - T OW2\nPUERTO(2)  P AO1 R - T AH0\nPUERTO(3)  P AO1 R - T ER0\nPUERTO-RICO  P W EH1 R - T OW2 - R IY1 - K OW0\nPUERTO-RICO(2)  P AO1 R - T AH0 - R IY1 - K OW0\nPUERTO-RICO(3)  P AO1 R - T ER0 - R IY1 - K OW0\nPUERTO_RICAN  P W EH1 R - T OW2 - R IY1 - K AH0 N\nPUERTO_RICAN(2)  P AO1 R - T AH0 - R IY1 - K AH0 N\nPUERTO_RICAN(3)  P AO1 R - T ER0 - R IY1 - K AH0 N\nPUERTO_RICANS  P W EH1 R - T OW2 - R IY1 - K AH0 N Z\nPUERTO_RICANS(2)  P AO1 R - T AH0 - R IY1 - K AH0 N Z\nPUERTO_RICANS(3)  P AO1 R - T ER0 - R IY1 - K AH0 N Z\nPUETT  P UW1 T\nPUETZ  P UW1 T S\nPUFAHL  P Y UW1 - F AA0 L\nPUFF  P AH1 F\nPUFFED  P AH1 F T\nPUFFENBARGER  P AH1 - F IH0 N - B AA0 R - G ER0\nPUFFER  P AH1 - F ER0\nPUFFER'S  P AH1 - F ER0 Z\nPUFFERY  P AH1 - F ER0 - IY0\nPUFFIN  P AH1 - F IH2 N\nPUFFING  P AH1 - F IH0 NG\nPUFFINS  P AH1 - F IH2 N Z\nPUFFS  P AH1 F S\nPUFFY  P AH1 - F IY0\nPUGA  P Y UW1 - G AH0\nPUGET  P Y UW1 - JH IH0 T\nPUGET-1  P Y UW1 - JH IH0 - T W AH1 N\nPUGH  P Y UW1\nPUGHS  P Y UW1 Z\nPUGLIA  P AH1 G - L IY0 - AH0\nPUGLIESE  P UW0 G - L IY0 - EY1 - Z IY0\nPUGLISI  P UW0 G - L IY1 - S IY0\nPUGMIRE  P AH1 G - M AY2 R\nPUGNACIOUS  P AH0 G - N AE1 - SH IH0 S\nPUGSLEY  P AH1 G S - L IY0\nPUGWASH  P AH1 G - W AA2 SH\nPUHL  P AH1 L\nPUIG  P UW1 G\nPUIPOE  P UW1 - IY0 - P OW2\nPUIPOE(2)  P W IY1 - P OW0\nPUJOL  P Y UW1 - JH AH0 L\nPUKE  P Y UW1 K\nPUKES  P Y UW1 K S\nPULASKI  P Y UW0 - L AE1 S - K IY0\nPULCINI  P UW0 L - CH IY1 - N IY0\nPULEO  P UW1 - L IY0 - OW0\nPULFORD  P UH1 L - F ER0 D\nPULICE  P UW1 - L IH0 S\nPULIDO  P UW0 - L IY1 - D OW0\nPULITZER  P UH1 - L AH0 T - S ER0\nPULKRABEK  P AH1 L - K R AH0 - B IH0 K\nPULL  P UH1 L\nPULLAM  P UH1 - L AH0 M\nPULLAN  P UH1 - L AH0 N\nPULLANO  P UW0 - L AA1 - N OW0\nPULLARA  P UW0 - L AA1 - R AH0\nPULLBACK  P UH1 L - B AE2 K\nPULLBACKS  P UH1 L - B AE2 K S\nPULLED  P UH1 L D\nPULLEN  P UH1 - L AH0 N\nPULLER  P UH1 - L ER0\nPULLEY  P UH1 - L IY0\nPULLEYS  P UH1 - L IY0 Z\nPULLIAM  P UH1 - L IY0 - AH0 M\nPULLIN  P UH1 - L IH0 N\nPULLING  P UH1 - L IH0 NG\nPULLINS  P UH1 - L IH0 N Z\nPULLMAN  P UH1 L - M AH0 N\nPULLMAN'S  P UH1 L - M AH0 N Z\nPULLOUT  P UH1 L - AW2 T\nPULLOUTS  P UH1 L - AW2 T S\nPULLS  P UH1 L Z\nPULLUM  P UH1 - L AH0 M\nPULMAZYME  P UH1 L - M AH0 - Z AY2 M\nPULMAZYME'S  P UH1 L - M AH0 - Z AY2 M Z\nPULMONARY  P UH1 L - M AH0 - N EH2 - R IY0\nPULMOZYME  P UH1 L - M OW0 - Z AY2 M\nPULOS  P UW1 - L OW0 Z\nPULP  P AH1 L P\nPULPING  P AH1 L - P IH0 NG\nPULPIT  P UH1 L - P IH0 T\nPULPITS  P UH1 L - P IH0 T S\nPULPWOOD  P AH1 L P - W UH2 D\nPULS  P UH1 L Z\nPULSAR  P UH1 L - S ER0\nPULSAR'S  P UH1 L - S ER0 Z\nPULSATING  P AH1 L - S EY2 - T IH0 NG\nPULSE  P AH1 L S\nPULSES  P AH1 L - S IH0 Z\nPULSIFER  P AH1 L - S IH0 - F ER0\nPULSING  P AH1 L - S IH0 NG\nPULSIPHER  P UH1 L - S IH0 - F ER0\nPULTE  P UH1 L - T IY0\nPULTZ  P UH1 L T S\nPULVER  P UH1 L - V ER0\nPULVERIZE  P AH1 L - V ER0 - AY2 Z\nPULVERIZED  P AH1 L - V ER0 - AY2 Z D\nPULVERMACHER  P AH1 L - V ER0 - M AH0 - K ER0\nPUMA  P UW1 - M AH0\nPUMA'S  P Y UW1 - M AH0 Z\nPUMICE  P AH1 - M AH0 S\nPUMILIA  P UW0 - M IY1 - L IY0 - AH0\nPUMING  P UW1 - M IH0 NG\nPUMMEL  P AH1 - M AH0 L\nPUMMELED  P AH1 - M AH0 L D\nPUMMELING  P AH1 - M AH0 L - IH0 NG\nPUMMILL  P AH1 - M IH0 L\nPUMP  P AH1 M P\nPUMPED  P AH1 M P T\nPUMPERNICKEL  P AH1 M - P ER0 - N IH2 - K AH0 L\nPUMPHREY  P AH1 M - F R IY0\nPUMPING  P AH1 M - P IH0 NG\nPUMPKIN  P AH1 M P - K IH0 N\nPUMPKIN(2)  P AH1 M - K IH0 N\nPUMPKINS  P AH1 M P - K AH0 N Z\nPUMPKINS(2)  P AH1 M - K AH0 N Z\nPUMPS  P AH1 M P S\nPUMSIE  P AH1 M - Z IY0\nPUN  P AH1 N\nPUNCH  P AH1 N CH\nPUNCHED  P AH1 N CH T\nPUNCHES  P AH1 N - CH IH0 Z\nPUNCHING  P AH1 N - CH IH0 NG\nPUNCHLINE  P AH1 N CH - L AY2 N\nPUNCHY  P AH1 N - CH IY0\nPUNCTATE  P AH1 N K - T EY2 T\nPUNCTILIOUS  P AH0 NG K - T IH1 - L IY0 - AH0 S\nPUNCTUALITY  P AH2 NG K - CH UW0 - AE1 - L IH0 - T IY0\nPUNCTUATE  P AH1 NG K - CH UW0 - EY2 T\nPUNCTUATED  P AH1 NG K - CH UW0 - EY2 - T IH0 D\nPUNCTUATING  P AH1 NG K - CH UW0 - EY2 - D IH0 NG\nPUNCTUATION  P AH2 NG K - CH UW0 - EY1 - SH AH0 N\nPUNCTURE  P AH1 NG K - CH ER0\nPUNCTURE(2)  P AH1 NG K - SH ER0\nPUNCTURED  P AH1 NG K - CH ER0 D\nPUNCTURED(2)  P AH1 NG K - SH ER0 D\nPUNCTURES  P AH1 NG K - CH ER0 Z\nPUNCTURES(2)  P AH1 NG K - SH ER0 Z\nPUNCTURING  P AH1 NG K - CH ER0 - IH0 NG\nPUNCTURING(2)  P AH1 NG K - SH ER0 - IH0 NG\nPUNDIT  P AH1 N - D AH0 T\nPUNDITRY  P AH1 N - D AH0 - T R IY0\nPUNDITS  P AH1 N - D IH0 T S\nPUNDT  P AH1 N T\nPUNEET  P UW2 - N IY1 T\nPUNG  P AH1 NG\nPUNGENT  P AH1 N - JH AH0 N T\nPUNGENTLY  P AH1 N - JH AH0 N T - L IY0\nPUNIC  P Y UW1 - N IH0 K\nPUNISH  P AH1 - N IH0 SH\nPUNISHABLE  P AH1 - N IH0 - SH AH0 - B AH0 L\nPUNISHED  P AH1 - N IH0 SH T\nPUNISHES  P AH1 - N IH0 - SH AH0 Z\nPUNISHING  P AH1 - N IH0 - SH IH0 NG\nPUNISHMENT  P AH1 - N IH0 SH - M AH0 N T\nPUNISHMENTS  P AH1 - N IH0 SH - M AH0 N T S\nPUNITIVE  P Y UW1 - N AH0 - T IH0 V\nPUNJAB  P AH0 N - JH AA1 B\nPUNJAB'S  P AH0 N - JH AA1 B Z\nPUNJAB'S(2)  P AH1 N - JH AE2 B Z\nPUNJAB(2)  P AH1 N - JH AE2 B\nPUNK  P AH1 NG K\nPUNKIN  P AH1 NG - K IH0 N\nPUNKS  P AH1 NG K S\nPUNKY  P AH1 NG - K IY0\nPUNS  P AH1 N Z\nPUNT  P AH1 N T\nPUNTA  P UH1 N - T ER0\nPUNTER  P AH1 N - T ER0\nPUNTO  P UW1 N - T OW2\nPUNTS  P AH1 N T S\nPUNXATAUNEY  P AH2 NG K - S AH0 - T AA1 - N IY0\nPUNY  P Y UW1 - N IY0\nPUOPOLO  P W OW0 - P OW1 - L OW0\nPUP  P AH1 P\nPUPA  P Y UW1 - P AH0\nPUPIL  P Y UW1 - P AH0 L\nPUPILS  P Y UW1 - P AH0 L Z\nPUPO  P UW1 - P OW0\nPUPPET  P AH1 - P AH0 T\nPUPPET(2)  P AH1 - P IH0 T\nPUPPETEER  P AH0 - P AH0 - T IY1 R\nPUPPETEERS  P AH0 - P AH0 - T IY1 R Z\nPUPPETRY  P AH1 - P AH0 - T R IY0\nPUPPETS  P AH1 - P AH0 T S\nPUPPETS(2)  P AH1 - P IH0 T S\nPUPPIES  P AH1 - P IY0 Z\nPUPPY  P AH1 - P IY0\nPUPS  P AH1 P S\nPUR  P ER1\nPURA  P UH1 - R AH0\nPURA(2)  P Y UH1 - R AH0\nPURCELL  P ER0 - S EH1 L\nPURCHASE  P ER1 - CH AH0 S\nPURCHASED  P ER1 - CH AH0 S T\nPURCHASER  P ER1 - CH AH0 - S ER0\nPURCHASER'S  P ER1 - CH AH0 - S ER0 Z\nPURCHASERS  P ER1 - CH AH0 - S ER0 Z\nPURCHASERS'  P ER1 - CH AH0 - S ER0 Z\nPURCHASES  P ER1 - CH AH0 - S AH0 Z\nPURCHASES(2)  P ER1 - CH AH0 - S IH0 Z\nPURCHASING  P ER1 - CH AH0 - S IH0 NG\nPURDHAM  P ER1 - D AH0 M\nPURDIE  P ER1 - D IY0\nPURDIN  P ER1 - D IH0 N\nPURDOM  P ER1 - D AH0 M\nPURDON  P ER1 - D AH0 N\nPURDUE  P ER0 - D UW1\nPURDUM  P ER1 - D AH0 M\nPURDY  P ER1 - D IY0\nPURE  P Y UH1 R\nPUREBRED  P Y UH1 R - B R EH1 D\nPUREBREDS  P Y UH1 R - B R EH1 D Z\nPUREE  P Y UH0 - R EY1\nPURELY  P Y UH1 R - L IY0\nPURER  P Y UH1 - R ER0\nPUREST  P Y UH1 - R AH0 S T\nPUREX  P Y UH1 - R EH0 K S\nPURGASON  P ER1 - G AH0 - S AH0 N\nPURGATORY  P ER1 - G AH0 - T AO2 - R IY0\nPURGE  P ER1 JH\nPURGED  P ER1 JH D\nPURGES  P ER1 - JH IH0 Z\nPURGING  P ER1 - JH IH0 NG\nPURI  P UH1 - R IY0\nPURICELLI  P UH0 - R IY0 - CH EH1 - L IY0\nPURIFICATION  P Y UH2 - R AH0 - F AH0 - K EY1 - SH AH0 N\nPURIFIED  P Y UH1 - R AH0 - F AY2 D\nPURIFIER  P Y UH1 - R AH0 - F AY2 - ER0\nPURIFIERS  P Y UH1 - R AH0 - F AY2 - ER0 Z\nPURIFOY  P Y UW1 - R IH0 - F OY0\nPURIFY  P Y UH1 - R AH0 - F AY2\nPURIFYING  P Y UH1 - R AH0 - F AY2 - IH0 NG\nPURIM  P UH1 - R AH0 M\nPURIM(2)  P UH1 - R IY0 M\nPURINA  P Y UH0 - R IH1 - N AH0\nPURINA(2)  P ER0 - IY1 - N AH0\nPURINA(3)  P Y UH0 - R IY1 - N AH0\nPURINGTON  P Y UH1 - R IH0 NG - T AH0 N\nPURINTON  P Y UW1 - R IH0 N - T AH0 N\nPURIS  P Y UH1 - R IH0 S\nPURIST  P Y UH1 - R IH0 S T\nPURISTIC  P Y UH0 - R IH1 - S T IH0 K\nPURISTS  P Y UH1 - R AH0 S T S\nPURISTS(2)  P Y UH1 - R IH0 S T S\nPURISTS(3)  P Y UH1 - R IH0 S S\nPURISTS(4)  P Y UH1 - R IH0 S\nPURITAN  P Y UH1 - R AH0 - T AH0 N\nPURITANICAL  P Y UH2 - R AH0 - T AE1 - N IH0 - K AH0 L\nPURITANISM  P Y UH1 - R AH0 - T AH0 - N IH2 - Z AH0 M\nPURITANISMS  P Y UH1 - R AH0 - T AH0 - N IH2 - Z AH0 M Z\nPURITANS  P Y UH1 - R AH0 - T AH0 N Z\nPURITY  P Y UH1 - R AH0 - T IY0\nPURITY(2)  P Y UH1 - R IH0 - T IY0\nPURK  P ER1 K\nPURKEY  P ER1 - K IY0\nPURLOIN  P ER0 - L OY1 N\nPURLOINED  P ER0 - L OY1 N D\nPURNELL  P ER1 - N AH0 L\nPUROLATOR  P Y UH1 - R AH0 - L EY0 - T ER0\nPUROLATOR'S  P Y UH1 - R AH0 - L EY0 - T ER0 Z\nPURPA  P ER1 - P AH0\nPURPLE  P ER1 - P AH0 L\nPURPLES  P ER1 - P AH0 L Z\nPURPLISH  P ER1 - P L IH0 SH\nPURPORT  P ER1 - P AO2 R T\nPURPORT(2)  P ER0 - P AO1 R T\nPURPORTED  P ER0 - P AO1 R - T IH0 D\nPURPORTEDLY  P ER0 - P AO2 R - T IH0 D - L IY0\nPURPORTING  P ER0 - P AO1 R - T IH0 NG\nPURPORTS  P ER1 - P AO2 R T S\nPURPORTS(2)  P ER0 - P AO1 R T S\nPURPOSE  P ER1 - P AH0 S\nPURPOSEFUL  P ER1 - P AH0 S - F AH0 L\nPURPOSEFULLY  P ER1 - P AH0 S - F AH0 - L IY0\nPURPOSELESS  P ER1 - P AH0 S - L AH0 S\nPURPOSELY  P ER1 - P AH0 S - L IY0\nPURPOSES  P ER1 - P AH0 - S AH0 Z\nPURPOSES(2)  P ER1 - P AH0 - S IH0 Z\nPURR  P ER1\nPURRING  P ER1 - IH0 NG\nPURRINGTON  P ER1 - IH0 NG - T AH0 N\nPURRS  P ER1 Z\nPURSE  P ER1 S\nPURSED  P ER1 S T\nPURSEL  P ER1 - S AH0 L\nPURSELL  P ER1 - S AH0 L\nPURSER  P ER1 - S ER0\nPURSES  P ER1 - S IH0 Z\nPURSIFULL  P ER1 - S IH0 - F AH0 L\nPURSLEY  P ER1 S - L IY0\nPURSUANT  P ER0 - S UW1 - AH0 N T\nPURSUE  P ER0 - S UW1\nPURSUED  P ER0 - S UW1 D\nPURSUER  P ER0 - S UW1 - ER0\nPURSUERS  P ER0 - S UW1 - ER0 Z\nPURSUES  P ER0 - S UW1 Z\nPURSUING  P ER0 - S UW1 - IH0 NG\nPURSUIT  P ER0 - S UW1 T\nPURSUITS  P ER0 - S UW1 T S\nPURT  P ER1 T\nPURTEE  P ER1 - T IY0\nPURTELL  P ER1 - T AH0 L\nPURTLE  P ER1 - T AH0 L\nPURVES  P ER1 V Z\nPURVEY  P ER0 - V EY1\nPURVEYOR  P ER0 - V EY1 - ER0\nPURVEYORS  P ER0 - V EY1 - ER0 Z\nPURVIANCE  P UH0 R - V IY1 - AH0 N S\nPURVIEW  P ER1 - V Y UW2\nPURVIN  P ER1 - V IH0 N\nPURVIS  P ER1 - V IH0 S\nPURYEAR  P ER2 - Y IH1 R\nPUS  P AH1 S\nPUSAN  P UW1 - S AA0 N\nPUSANT  P Y UW1 - S AA0 N T\nPUSATERI  P UW0 - S AA0 - T EH1 - R IY0\nPUSCH  P AH1 SH\nPUSEY  P Y UW1 - Z IY0\nPUSH  P UH1 SH\nPUSH-UP  P UH1 - SH AH2 P\nPUSH-UPS  P UH1 - SH AH2 P S\nPUSHED  P UH1 SH T\nPUSHER  P UH1 - SH ER0\nPUSHERS  P UH1 - SH ER0 Z\nPUSHES  P UH1 - SH AH0 Z\nPUSHES(2)  P UH1 - SH IH0 Z\nPUSHING  P UH1 - SH IH0 NG\nPUSHKIN  P UH1 SH - K IH0 N\nPUSHOVER  P UH1 SH - OW2 - V ER0\nPUSHUP  P UH1 - SH AH2 P\nPUSHUPS  P UH1 - SH AH2 P S\nPUSHY  P UH1 - SH IY0\nPUSKAR  P AH1 - S K ER0\nPUSKARICH  P AH1 - S K ER0 - IH0 K\nPUSKAS  P AH1 - S K AH0 Z\nPUSS  P UH1 S\nPUSS(2)  P AH1 S\nPUSSES  P UH1 - S IH0 Z\nPUSSES(2)  P AH1 - S IH0 Z\nPUSSY  P UH1 - S IY0\nPUSSYCAT  P UH1 - S IY0 - K AE2 T\nPUSTEJOVSKY  P AH0 - S T EY0 - AA1 V S - K IY0\nPUT  P UH1 T\nPUT-ON  P UH1 - T AA1 N\nPUT-ONS  P UH1 - T AA1 N Z\nPUTATIVE  P Y UW1 - T AH0 - T IH0 V\nPUTCO  P AH1 T - K OW0\nPUTCO(2)  P UH1 T - K OW0\nPUTDOWN  P UH1 T - D AW2 N\nPUTERBAUGH  P Y UW0 - T ER1 - B AO0\nPUTH  P UW1 TH\nPUTHOFF  P AH1 T - HH AO2 F\nPUTMAN  P AH1 T - M AH0 N\nPUTNAM  P AH1 T - N AH0 M\nPUTNAM'S  P AH1 T - N AH0 M Z\nPUTNEY  P AH1 T - N IY0\nPUTRID  P Y UW1 - T R IH0 D\nPUTS  P UH1 T S\nPUTSCH  P UH1 CH\nPUTT  P AH1 T\nPUTTABLE  P AH1 - T AH0 - B AH0 L\nPUTTED  P AH1 - T IH0 D\nPUTTENBAY  P AH1 - T IH0 N - B EY2\nPUTTER  P AH1 - T ER0\nPUTTERER  P AH1 - T ER0 - ER0\nPUTTERING  P AH1 - T ER0 - IH0 NG\nPUTTERMAN  P AH1 - T ER0 - M AH0 N\nPUTTERS  P AH1 - T ER0 Z\nPUTTING  P AH1 - T IH0 NG\nPUTTING(2)  P UH1 - T IH0 NG\nPUTTNAM  P AH1 T - N AH0 M\nPUTTNAM'S  P AH1 T - N AH0 M Z\nPUTTS  P AH1 T S\nPUTTY  P AH1 - T IY0\nPUTZ  P AH1 T S\nPUTZIER  P AH1 T - Z IY0 - ER0\nPUUSEPP  P UW1 - Z AH0 P\nPUZA  P UW1 - Z AH0\nPUZIO  P UW1 - Z IY0 - OW0\nPUZO  P UW1 - Z OW0\nPUZZLE  P AH1 - Z AH0 L\nPUZZLED  P AH1 - Z AH0 L D\nPUZZLEMASTER  P AH1 - Z AH0 L - M AE2 - S T ER0\nPUZZLEMENT  P AH1 - Z AH0 L - M AH0 N T\nPUZZLER  P AH1 Z - L ER0\nPUZZLES  P AH1 - Z AH0 L Z\nPUZZLING  P AH1 - Z AH0 L - IH0 NG\nPUZZLING(2)  P AH1 Z - L IH0 NG\nPUZZO  P UW1 - Z OW0\nPYATT  P AY1 - AH0 T\nPYBURN  P IH1 - B ER0 N\nPYE  P AY1\nPYEATT  P AY1 - AH0 T\nPYGMALION  P IH2 G - M EY1 - L Y AH0 N\nPYGMIES  P IH1 G - M IY0 Z\nPYGMY  P IH1 G - M IY0\nPYKA  P IH1 - K AH0\nPYKE  P AY1 K\nPYLAND  P AY1 - L AH0 N D\nPYLANT  P IH0 - L AO1 N T\nPYLANT(2)  P IH0 - L AE1 N T\nPYLE  P AY1 L\nPYLES  P AY1 L Z\nPYLON  P AY1 - L AA2 N\nPYLONS  P AY1 - L AA2 N Z\nPYLORI  P AY2 - L AO1 - R IY0\nPYLOS  P AY1 - L OW0 S\nPYMM  P IH1 M\nPYNE  P AY1 N\nPYNES  P AY1 N Z\nPYONGYANG  P Y AO1 NG - Y AE1 NG\nPYONGYANG'S  P Y AO1 NG - Y AE1 NG Z\nPYPER  P AY1 - P ER0\nPYRAMID  P IH1 - R AH0 - M IH0 D\nPYRAMIDAL  P ER0 - AE1 - M AH0 - D AH0 L\nPYRAMIDS  P IH1 - R AH0 - M IH0 D Z\nPYRENA  P IH0 - R IY1 - N AH0\nPYRENEES  P IH1 - R AH0 - IY0 Z\nPYRENEES'  P IH1 - R AH0 - IY0 Z\nPYRITE  P AY1 - R AY0 T\nPYRO  P AY1 - R OW0\nPYRON  P IH1 - R AH0 N\nPYROTECHNIC  P AY2 - R OW0 - T EH1 K - N IH0 K\nPYROTECHNICS  P AY2 - R OW0 - T EH1 K - N IH0 K S\nPYROXENE  P AY0 - R AA1 K - S IY0 N\nPYROXENE(2)  P AY1 - R AA0 K - S IY2 N\nPYRRHIC  P IH1 - R IH0 K\nPYSHER  P IH1 - SH ER0\nPYTEL  P IH1 - T AH0 L\nPYTHIA  P IH1 - TH IY0 - AH0\nPYTHON  P AY1 - TH AA0 N\nPYTHON'S  P AY1 - TH AA0 N Z\nPYXIS  P IH1 K - S IH0 S\nQ  K Y UW1\nQ'S  K Y UW1 Z\nQ.  K Y UW1\nQ.'S  K Y UW1 Z\nQ.S  K Y UW1 Z\nQANA  K AA1 - N AH0\nQANTAS  K AE1 N - T AH0 S\nQANTAS(2)  K AA1 N - T AH0 S\nQASR  K EY1 - Z ER0\nQASR(2)  K Y UW1 - EY1 - EH1 - S AA1 R\nQATAR  K AH2 - T AA1 R\nQAWI  K AA1 - W IY0\nQI  K IY1\nQIAN  K IY1 - AA2 N\nQIAN(2)  JH IH1 N\nQIAO  K IY0 - AW1\nQIAOTOU  CH AW1 - T UW2\nQICHEN  K IH1 - CH IH0 N\nQIN  K IH1 N\nQING  K IH1 NG\nQINGDAO  CH IH1 NG - D AW1\nQINGMING  K IH1 NG - M IH1 NG\nQINTEX  K IH1 N - T EH2 K S\nQIRYAT  K IH0 R - Y AA1 T\nQMAX  K Y UW1 - M AE2 K S\nQOM  K AA1 M\nQU  K UW1\nQUA  K W AA1\nQUACH  K W AA1 CH\nQUACK  K W AE1 K\nQUACKENBUSH  K W AE1 - K AH0 N - B UH2 SH\nQUACKERY  K W AE1 - K ER0 - IY0\nQUACKS  K W AE1 K S\nQUAD  K W AA1 D\nQUADE  K W EY1 D\nQUADRA  K W AE1 - D R AH0\nQUADRANT  K W AA1 - D R AH0 N T\nQUADRENNIAL  K W AA0 - D R EH1 - N IY0 - AH0 L\nQUADREX  K W AA1 - D R EH0 K S\nQUADRICEPS  K W AA1 - D R AH0 - S EH2 P S\nQUADRIPLEGIC  K W AA2 - D R AH0 - P L IY1 - JH IH0 K\nQUADRUPLE  K W AA0 - D R UW1 - P AH0 L\nQUADRUPLED  K W AA0 - D R UW1 - P AH0 L D\nQUADRUPLING  K W AA0 - D R UW1 - P AH0 - L IH0 NG\nQUADRUPLING(2)  K W AA0 - D R UW1 - P L IH0 NG\nQUADS  K W AA1 D Z\nQUAGLIA  K W AE1 G - L IY0 - AH0\nQUAGMIRE  K W AE1 G - M AY2 - ER0\nQUAI  K IY1\nQUAI(2)  K EY1\nQUAID  K W EY1 D\nQUAIL  K W EY1 L\nQUAILS  K W EY1 L Z\nQUAIN  K W EY1 N\nQUAINT  K W EY1 N T\nQUAINTANCE  K W EY1 N - T AH0 N S\nQUAINTLY  K W EY1 N T - L IY0\nQUAKE  K W EY1 K\nQUAKE'S  K W EY1 K S\nQUAKENBUSH  K W AH0 - K EH1 N - B UH0 SH\nQUAKER  K W EY1 - K ER0\nQUAKER'S  K W EY1 - K ER0 Z\nQUAKERS  K W EY1 - K ER0 Z\nQUAKES  K W EY1 K S\nQUAKING  K W EY1 - K IH0 NG\nQUAL  K W AA1 L\nQUALCAST  K W AA1 L - K AE2 S T\nQUALCOMM  K W AA1 L - K AA2 M\nQUALCOMM'S  K W AA1 L - K AA2 M Z\nQUALE  K W EY1 L\nQUALEX  K W AA1 - L EH0 K S\nQUALEY  K W EY1 - L IY0\nQUALIFICATION  K W AA2 - L AH0 - F AH0 - K EY1 - SH AH0 N\nQUALIFICATIONS  K W AA2 - L AH0 - F AH0 - K EY1 - SH AH0 N Z\nQUALIFIED  K W AA1 - L AH0 - F AY2 D\nQUALIFIER  K W AA1 - L AH0 - F AY2 - ER0\nQUALIFIERS  K W AA1 - L AH0 - F AY2 - ER0 Z\nQUALIFIES  K W AA1 - L AH0 - F AY2 Z\nQUALIFY  K W AA1 - L AH0 - F AY2\nQUALIFYING  K W AA1 - L AH0 - F AY2 - IH0 NG\nQUALITATIVE  K W AA1 - L AH0 - T EY2 - T IH0 V\nQUALITATIVELY  K W AA2 - L AH0 - T EY1 - T IH0 V - L IY0\nQUALITIES  K W AA1 - L AH0 - T IY0 Z\nQUALITY  K W AA1 - L AH0 - T IY0\nQUALLEY  K W AO1 - L IY0\nQUALLS  K W AA1 L Z\nQUALLS(2)  K W EY1 L Z\nQUALMS  K W AA1 M Z\nQUALMS(2)  K W AA1 L M Z\nQUAM  K W AA1 M\nQUAMME  K W AE1 M\nQUAN  K W AO1 N\nQUANDARIES  K W AA1 N - D ER0 - IY0 Z\nQUANDARY  K W AA1 N - D ER0 - IY0\nQUANDT  K W AO1 N D T\nQUANEX  K W AA1 - N EH0 K S\nQUANG  K W AO1 NG\nQUANT  K W AE1 N T\nQUANTICO  K W AA1 N - T IH0 - K OW0\nQUANTIFIABLE  K W AA2 N - T IH0 - F AY1 - AH0 - B EH0 L\nQUANTIFIABLE(2)  K W AA2 - N IH0 - F AY1 - AH0 - B EH0 L\nQUANTIFICATION  K W AA2 N - T IH0 - F AH0 - K EY1 - SH AH0 N\nQUANTIFIED  K W AA1 N - T IH0 - F AY2 D\nQUANTIFIED(2)  K W AA1 - N IH0 - F AY2 D\nQUANTIFY  K W AA1 N - T IH0 - F AY2\nQUANTIFY(2)  K W AA1 - N IH0 - F AY2\nQUANTIFYING  K W AA1 N - T IH0 - F AY2 - IH0 NG\nQUANTIFYING(2)  K W AA1 - N IH0 - F AY2 - IH0 NG\nQUANTITATIVE  K W AA1 N - T IH0 - T EY2 - T IH0 V\nQUANTITATIVE(2)  K W AA1 - N IH0 - T EY2 - T IH0 V\nQUANTITATIVELY  K W AA2 N - T IH0 - T EY1 - T AH0 V - L IY0\nQUANTITATIVELY(2)  K W AA2 - N IH0 - T EY1 - T AH0 V - L IY0\nQUANTITIES  K W AA1 N - T AH0 - T IY0 Z\nQUANTITIES(2)  K W AA1 - N AH0 - T IY0 Z\nQUANTITY  K W AA1 N - T AH0 - T IY0\nQUANTITY(2)  K W AA1 - N AH0 - T IY0\nQUANTUM  K W AA1 N - T AH0 M\nQUANTUM'S  K W AA1 N - T AH0 M Z\nQUANTUM'S(2)  K W AA1 - N AH0 M Z\nQUANTUM(2)  K W AA1 - N AH0 M\nQUAQUIL  K W AE1 K - W IH0 L\nQUARANTA  K W ER0 - AE1 N - T AH0\nQUARANTE  K W ER0 - AA1 N - T EY0\nQUARANTINE  K W AO1 - R AH0 N - T IY2 N\nQUARANTINED  K W AO1 - R AH0 N - T IY2 N D\nQUARANTINED(2)  K W AO1 - R AH0 N - T AY2 N D\nQUARANTINES  K W AO1 - R AH0 N - T IY2 N Z\nQUARANTINES(2)  K W AO1 - R AH0 N - T AY2 N Z\nQUARANTINING  K W AO1 - R AH0 N - T IY2 - N IH0 NG\nQUARANTINING(2)  K W AO1 - R AH0 N - T AY2 - N IH0 NG\nQUARK  K W AA1 R K\nQUARKS  K W AA1 R K S\nQUARLES  K W AO1 R L Z\nQUARNSTROM  K W AO1 R N - S T R AH0 M\nQUARRE  K W AA1 R\nQUARREL  K W AO1 - R AH0 L\nQUARRELED  K W AO1 - R AH0 L D\nQUARRELING  K W AA1 - R AH0 L - IH0 NG\nQUARRELING(2)  K W AA1 R - L IH0 NG\nQUARRELS  K W AO1 - R AH0 L Z\nQUARRELSOME  K W AO1 - R AH0 L - S AH0 M\nQUARRIES  K W AO1 - R IY0 Z\nQUARRY  K W AO1 - R IY0\nQUARRYING  K W AO1 - R IY0 - IH0 NG\nQUART  K W AO1 R T\nQUARTARARO  K W AA0 R - T AA0 - R AA1 - R OW0\nQUARTER  K W AO1 R - T ER0\nQUARTER'S  K W AO1 R - T ER0 Z\nQUARTER'S(2)  K AO1 R - T ER0 Z\nQUARTER(2)  K AO1 R - T ER0\nQUARTERBACK  K W AO1 R - T ER0 - B AE2 K\nQUARTERBACK(2)  K AO1 R - T ER0 - B AE2 K\nQUARTERBACKING  K W AO1 R - T ER0 - B AE2 - K IH0 NG\nQUARTERBACKING(2)  K AO1 R - T ER0 - B AE2 - K IH0 NG\nQUARTERBACKS  K W AO1 R - T ER0 - B AE2 K S\nQUARTERBACKS(2)  K AO1 R - T ER0 - B AE2 K S\nQUARTERDECK  K W AO1 R - T ER0 - D EH2 K\nQUARTERDECK(2)  K AO1 R - T ER0 - D EH2 K\nQUARTERLY  K W AO1 R - T ER0 - L IY0\nQUARTERLY(2)  K AO1 R - T ER0 - L IY0\nQUARTERMAN  K W AO1 R - T ER0 - M AH0 N\nQUARTERMAN(2)  K AO1 R - T ER0 - M AH0 N\nQUARTERMASTER  K W AO1 R - T ER0 - M AE2 - S T ER0\nQUARTERMASTER(2)  K AO1 R - T ER0 - M AE2 - S T ER0\nQUARTERS  K W AO1 R - T ER0 Z\nQUARTERS'  K W AA1 R - T ER0 Z\nQUARTERS'S  K AO1 R - T ER0 Z\nQUARTERS'S(2)  K W AO1 R - T ER0 Z\nQUARTET  K W AO0 R - T EH1 T\nQUARTET'S  K W AO0 R - T EH1 T S\nQUARTETS  K W AO0 R - T EH1 T S\nQUARTILE  K W AO1 R - T IH0 L\nQUARTO  K W AO1 R - T OW0\nQUARTS  K W AO1 R T S\nQUARTZ  K W AO1 R T S\nQUASAR  K W EY1 - Z AA0 R\nQUASH  K W AO1 SH\nQUASHED  K W AO1 SH T\nQUASHING  K W AO1 - SH IH0 NG\nQUASI  K W AA1 - S IY0\nQUASIMODO  K AE0 - Z IY0 - M OW1 - D OW0\nQUASSIA  K W AA1 - SH IY0 - AH0\nQUAST  K W AA1 S T\nQUATERNARY  K W AA1 - T ER0 - N EH2 - R IY0\nQUATTLEBAUM  K W AO1 - T AH0 L - B AW0 M\nQUATTRO  K W AO1 - T R OW0\nQUATTROCCHI  K W AA0 - T R OW1 - K IY0\nQUATTROCHI  K W AA0 - T R OW1 - K IY0\nQUATTRONE  K W AA0 - T R OW1 - N IY0\nQUAVE  K W EY1 V\nQUAY  K IY1\nQUAY(2)  K EY1\nQUAYE  K EY1\nQUAYE(2)  K W EY1\nQUAYLE  K W EY1 L\nQUAYLE'S  K W EY1 L Z\nQUAYLES  K W EY1 L Z\nQUAZULU  K W AA2 - Z UW1 - L UW0\nQUAZULU'S  K W AA2 - Z UW1 - L UW0 Z\nQUBILAH  K UW1 - B IH0 - L AH0\nQUBILAH(2)  K W AH1 - B IH0 - L AH0\nQUDDUS  K UW1 - D UW2 S\nQUE  K Y UW1\nQUEALY  K W IY1 - L IY0\nQUEASINESS  K W IY1 - Z IY0 - N AH0 S\nQUEASY  K W IY1 - Z IY0\nQUEAU  K W OW1\nQUEBEC  K W AH0 - B EH1 K\nQUEBEC'S  K W IH0 - B EH1 K S\nQUEBECKER  K W AH0 - B EH1 - K ER0\nQUEBECKER(2)  K W EH1 - B EH2 - K ER0\nQUEBECKERS  K W EH1 - B EH2 - K ER0 Z\nQUEBECKERS(2)  K W AH0 - B EH1 - K ER0 Z\nQUEBECOIS  K W EH1 - B AH0 S - W AA2\nQUEBECOIS(2)  K W EH1 - B EH0 - K W AA2\nQUEBECOISE  K EH1 - B EH0 - K W AA2\nQUEBECOR  K W EH1 - B IH0 - K AO0 R\nQUEBEDEAUX  K W EH1 - B IH0 - D OW0\nQUECHEE  K W EH1 - CH IY0\nQUEEN  K W IY1 N\nQUEEN'S  K W IY1 N Z\nQUEENA  K W IY1 - N AH0\nQUEENAN  K W IY1 - N AH0 N\nQUEENER  K W IY1 - N ER0\nQUEENFISH  K W IY1 N - F IH2 SH\nQUEENFISH'S  K W IY1 N - F IH2 - SH IH0 Z\nQUEENIE  K W IY1 - N IY0\nQUEENS  K W IY1 N Z\nQUEENSBERRY  K W IY1 N Z - B EH2 - R IY0\nQUEENSLAND  K W IY1 N Z - L AE2 N D\nQUEENSWAY  K W IY1 N Z - W EY2\nQUEER  K W IH1 R\nQUEERER  K W IH1 - R ER0\nQUEERS  K W IH1 R Z\nQUEK  K W EH1 K\nQUELL  K W EH1 L\nQUELLED  K W EH1 L D\nQUELLETTE  K W IH0 - L EH1 T\nQUELLING  K W EH1 - L IH0 NG\nQUELLO  K W EH1 - L OW0\nQUEMOY  K W IH0 - M OY1\nQUEMOY(2)  K W IY1 - M OY0\nQUENBY  K W EH1 N - B IY0\nQUENCH  K W EH1 N CH\nQUENCHER  K W EH1 N - CH ER0\nQUENCHERS  K W EH1 N - CH ER0 Z\nQUENCHING  K W EH1 N - CH IH0 NG\nQUENNEL  K W EH1 - N AH0 L\nQUENNEVILLE  K W EY0 - N EY0 - V IH1 L\nQUENTIN  K W EH1 N - T IH0 N\nQUENZER  K W EH1 N - Z ER0\nQUERIDA  K W EH0 - R IY1 - D AH0\nQUERIED  K W IH1 - R IY0 D\nQUERIES  K W IH1 - R IY0 Z\nQUERNS  K W ER1 N Z\nQUERRY  K W EH1 - R IY0\nQUERULOUS  K W EH1 - R AH0 - L AH0 S\nQUERY  K W IY1 - R IY0\nQUES  K Y UW1 Z\nQUES(2)  K W EH1 S\nQUESADA  K W EY0 - S AA1 - D AH0\nQUESENBERRY  K W IY1 - Z AH0 N - B EH0 - R IY0\nQUESINBERRY  K W EH1 - S IH0 N - B EH0 - R IY0\nQUESNEL  K W EY0 S - N EH1 L\nQUESNELL  K W EY0 S - N EY1 L\nQUEST  K W EH1 S T\nQUESTAR  K W EH1 - S T ER0\nQUESTECH  K W EH1 - S T EH2 K\nQUESTION  K W EH1 S - CH AH0 N\nQUESTION'S  K W EH1 S - CH AH0 N Z\nQUESTION'S(2)  K W EH1 - SH AH0 N Z\nQUESTION(2)  K W EH1 - SH AH0 N\nQUESTION-MARK  K W EH1 S - CH AH0 N - M AA1 R K\nQUESTIONABLE  K W EH1 S - CH AH0 - N AH0 - B AH0 L\nQUESTIONED  K W EH1 S - CH AH0 N D\nQUESTIONER  K W EH1 S - CH AH0 - N ER0\nQUESTIONERS  K W EH1 S - CH AH0 - N ER0 Z\nQUESTIONING  K W EH1 S - CH AH0 - N IH0 NG\nQUESTIONINGS  K W EH1 S - CH AH0 - N IH0 NG Z\nQUESTIONNAIRE  K W EH2 S - CH AH0 - N EH1 R\nQUESTIONNAIRES  K W EH2 S - CH AH0 - N EH1 R Z\nQUESTIONS  K W EH1 S - CH AH0 N Z\nQUESTIONS'  K W EH1 S - CH AH0 N Z\nQUESTRAN  K W EH1 S - T R AE2 N\nQUESTROM  K W EH1 S - T R AH0 M\nQUESTS  K W EH1 S T S\nQUEUE  K Y UW1\nQUEUES  K Y UW1 Z\nQUEUING  K Y UW1 - IH0 NG\nQUEVEDO  K W EY0 - V EY1 - D OW0\nQUEZADA  K W EY0 - Z AA1 - D AH0\nQUI  K W IY1\nQUIBBLE  K W IH1 - B AH0 L\nQUIBBLES  K W IH1 - B AH0 L Z\nQUIBBLING  K W IH1 - B AH0 L - IH0 NG\nQUIBBLING(2)  K W IH1 - B L IH0 NG\nQUICHE  K IY1 SH\nQUICK  K W IH1 K\nQUICKEL  K W IH1 - K AH0 L\nQUICKEN  K W IH1 - K AH0 N\nQUICKENED  K W IH1 - K AH0 N D\nQUICKENING  K W IH1 - K AH0 - N IH0 NG\nQUICKENS  K W IH1 - K AH0 N Z\nQUICKER  K W IH1 - K ER0\nQUICKEST  K W IH1 - K IH0 S T\nQUICKIE  K W IH1 - K IY0\nQUICKLY  K W IH1 K - L IY0\nQUICKNESS  K W IH1 K - N AH0 S\nQUICKSAND  K W IH1 K - S AE2 N D\nQUICKSANDS  K W IH1 K - S AE2 N D Z\nQUICKSILVER  K W IH1 K - S IH1 L - V ER0\nQUICKTIME  K W IH1 K - T AY2 M\nQUID  K W IH1 D\nQUIESCENT  K W AY0 - EH1 - S AH0 N T\nQUIET  K W AY1 - AH0 T\nQUIETED  K W AY1 - AH0 - T AH0 D\nQUIETED(2)  K W AY1 - AH0 - T IH0 D\nQUIETER  K W AY1 - AH0 - T ER0\nQUIETEST  K W AY1 - AH0 - T AH0 S T\nQUIETING  K W AY1 - AH0 - T IH0 NG\nQUIETIST  K W AY1 - AH0 - T AH0 S T\nQUIETLY  K W AY1 - AH0 T - L IY0\nQUIETNESS  K W AY1 - AH0 T - N AH0 S\nQUIETS  K W AY1 - AH0 T S\nQUIETT  K W IY1 T\nQUIEVONI  K W IH0 - V AO1 - N IY0\nQUIGG  K W IH1 G\nQUIGGLE  K W IH1 - G AH0 L\nQUIGLEY  K W IH1 G - L IY0\nQUIJADA  K W IY0 - Y AA1 - D AH0\nQUIJANO  K W IY0 - Y AA1 - N OW0\nQUIK  K W IH1 K\nQUIKSILVER  K W IH1 K - S IH1 L - V ER0\nQUILALI  K W IH0 - L AA1 - L IY0\nQUILES  K W IY1 - L EH0 S\nQUILICI  K W IY0 - L IY1 - CH IY0\nQUILL  K W IH1 L\nQUILLAN  K W IH1 - L AH0 N\nQUILLEN  K W IH1 - L AH0 N\nQUILLIAN  K W IH1 - L Y AH0 N\nQUILLIN  K W IH1 - L IH0 N\nQUILLING  K W IH1 - L IH0 NG\nQUILLMAN  K W IY0 L - M AE1 N\nQUILLON  K W IH1 - L AH0 N\nQUILMES  K W IH1 L M Z\nQUILT  K W IH1 L T\nQUILTED  K W IH1 L - T IH0 D\nQUILTER  K W IH1 L - T ER0\nQUILTERS  K W IH1 L - T ER0 Z\nQUILTING  K W IH1 L - T IH0 NG\nQUILTS  K W IH1 L T S\nQUILTY  K W IH1 L - T IY0\nQUIMBY  K W IH1 M - B IY0\nQUIN  K W IH1 N\nQUINA  K W IY1 - N AH0\nQUINA'S  K W IY1 - N AH0 Z\nQUINBY  K W IH1 N - B IY0\nQUINCE  K W IH1 N S\nQUINCEY  K W IH1 N - S IY0\nQUINCY  K W IH1 N - S IY0\nQUINCY'S  K W IH1 N - S IY0 Z\nQUINDLEN  K W IH1 N D - L AH0 N\nQUINE  K W AY1 N\nQUININE  K W AY1 - N AY2 N\nQUINLAN  K W IH1 N - L AH0 N\nQUINLEY  K W IH1 N - L IY0\nQUINLIN  K W IH1 N - L IH0 N\nQUINLIVAN  K W IH1 N - L IH0 - V AH0 N\nQUINN  K W IH1 N\nQUINN'S  K W IH1 N Z\nQUINNELL  K W IH1 - N AH0 L\nQUINNEY  K W IH1 - N IY0\nQUINOBEQUIN  K W IH2 - N OW1 - B IH0 - K W IH0 N\nQUINOCO  K W IH0 - N OW1 - K OW0\nQUINON  K W IH1 - N AH0 N\nQUINONES  K W IH0 - N OW1 N Z\nQUINONEZ  K W IY0 - N OW1 - N EH0 Z\nQUINT  K W IH1 N T\nQUINTA  K W IH1 N - T AH0\nQUINTAL  K W IH1 N - T AH0 L\nQUINTANA  K W IY0 N - T AE1 - N AH0\nQUINTANAR  K W IH1 N - T AH0 - N ER0\nQUINTANILLA  K W IH2 N - T AH0 - N IH1 - L AH0\nQUINTELA  K W IY0 N - T EY1 - L AH0\nQUINTER  K W IH1 N - T ER0\nQUINTERO  K W IY0 N - T EH1 - R OW0\nQUINTEROS  K W IY0 N - T EH1 - R OW0 Z\nQUINTESSENCE  K W IH0 N - T EH1 - S AH0 N S\nQUINTESSENTIAL  K W IH2 N - T IH0 - S EH1 N - SH AH0 L\nQUINTESSENTIAL(2)  K W IH2 N - T IH0 - S EH1 N - CH AH0 L\nQUINTESSENTIALLY  K W IH2 N - T AH0 - S EH1 N - CH AH0 - L IY0\nQUINTET  K W IH0 N - T EH1 T\nQUINTILE  K W IH1 N - T IH0 L\nQUINTILE(2)  K W IH1 N - T AY2 L\nQUINTIN  K W IH1 N - T IH0 N\nQUINTINA  K W IY0 N - T IY1 - N AH0\nQUINTO  K W IH1 N - T OW0\nQUINTON  K W IH0 N - T AO1 N\nQUINTS  K W IH1 N T S\nQUINTUPLE  K W IH1 N - T UW0 - P AH0 L\nQUINTUPLE(2)  K W IH2 N - T AH1 - P AH0 L\nQUINTUPLED  K W IH0 N - T Y UW1 - P AH0 L D\nQUINTUPLED(2)  K W IH2 N - T AH1 - P AH0 L D\nQUINTUPLET  K W IH1 N - T AH1 - P L AH0 T\nQUINTUPLETS  K W IH1 N - T AH1 - P L AH0 T S\nQUIP  K W IH1 P\nQUIPP  K W IH1 P\nQUIPPED  K W IH1 P T\nQUIPS  K W IH1 P S\nQUIRAM  K W AO1 - R AH0 M\nQUIRE  K W AY1 R\nQUIRIN  K W IH1 - R IH0 N\nQUIRING  K W AY1 - R IH0 NG\nQUIRION  K W IH1 - R IY0 - AH0 N\nQUIRK  K W ER1 K\nQUIRKE  K W ER1 K\nQUIRKS  K W ER1 K S\nQUIRKY  K W ER1 - K IY0\nQUIROGA  K W IH0 - R OW1 - G AH0\nQUIROS  K W IH1 - R OW0 Z\nQUIROZ  K W IH1 - R OW0 Z\nQUISENBERRY  K W AY1 - Z AH0 N - B EH0 - R IY0\nQUISLING  K W IH1 Z - L IH0 NG\nQUIST  K W IH1 S T\nQUIST'S  K W IH1 S T S\nQUIT  K W IH1 T\nQUITE  K W AY1 T\nQUITO  K W IY1 - T OW0\nQUITO'S  K W IY1 - T OW0 Z\nQUITO'S(2)  K IY1 - T OW0 Z\nQUITO'S(3)  K IY1 - T OW2 Z\nQUITO(2)  K IY1 - T OW0\nQUITO(3)  K IY1 - T OW2\nQUITS  K W IH1 T S\nQUITTER  K W IH1 - T ER0\nQUITTERS  K W IH1 - T ER0 Z\nQUITTING  K W IH1 - T IH0 NG\nQUIVER  K W IH1 - V ER0\nQUIVERING  K W IH1 - V ER0 - IH0 NG\nQUIXOTE  K IY0 - HH OW1 - T IY0\nQUIXOTIC  K W IH0 K - S AA1 - T IH0 K\nQUIZ  K W IH1 Z\nQUIZARD  K W IH1 - Z ER0 D\nQUIZZED  K W IH1 Z D\nQUIZZES  K W IH1 - Z IH0 Z\nQUIZZICAL  K W IH1 - Z AH0 - K AH0 L\nQUIZZING  K W IH1 - Z IH0 NG\nQUO  K W OW1\nQUON  K W AA1 N\nQUORUM  K W AO1 - R AH0 M\nQUORUMS  K W AO1 - R AH0 M Z\nQUOTA  K W OW1 - T AH0\nQUOTABLE  K W OW1 - T AH0 - B AH0 L\nQUOTAS  K W OW1 - T AH0 Z\nQUOTATION  K W OW0 - T EY1 - SH AH0 N\nQUOTATIONS  K W OW0 - T EY1 - SH AH0 N Z\nQUOTE  K W OW1 T\nQUOTED  K W OW1 - T AH0 D\nQUOTED(2)  K W OW1 - T IH0 D\nQUOTES  K W OW1 T S\nQUOTIENT  K W OW1 - SH AH0 N T\nQUOTING  K W OW1 - T IH0 NG\nQUOTRON  K W AA1 - T R AH0 N\nQUOTRON'S  K W AA1 - T R AH0 N Z\nQURESHEY  K UH0 - R EY1 - SH EY0\nQURESHI  K UH0 - R EY1 - SH IY0\nR  AA1 R\nR'S  AA1 R Z\nR.  AA1 R\nR.'S  AA1 R Z\nR.S  AA1 R Z\nRA  R AA1\nRAAB  R AA1 B\nRAAB'S  R AA1 B Z\nRAABE  R AA1 B\nRAAD  R AA1 D\nRAAP  R AA1 P\nRAASCH  R AA1 SH\nRAATZ  R AA1 T S\nRAB  R AE1 B\nRABAGO  R AA0 - B AA1 - G OW0\nRABALAIS  R AE1 - B AH0 - L EY2\nRABB  R AE1 B\nRABBANI  R AH0 - B AE1 - N IY0\nRABBANI(2)  R AH0 - B AA1 - N IY0\nRABBI  R AE1 - B AY2\nRABBINICAL  R AH0 - B IH1 - N IH0 - K AH0 L\nRABBIS  R AE1 - B AY2 Z\nRABBIT  R AE1 - B AH0 T\nRABBIT(2)  R AE1 - B IH0 T\nRABBITLIKE  R AE1 - B AH0 T - L AY2 K\nRABBITS  R AE1 - B AH0 T S\nRABBITT  R AE1 - B IH0 T\nRABBLE  R AE1 - B AH0 L\nRABE  R EY1 B\nRABEL  R AE1 - B AH0 L\nRABEN  R AE1 - B AH0 N\nRABENOLD  R AE1 - B IH0 - N OW2 L D\nRABER  R EY1 - B ER0\nRABES  R EY1 - B IY0 Z\nRABEY  R EY1 - B IY0\nRABI  R AA1 - B IY0\nRABID  R AE1 - B IH0 D\nRABID(2)  R EY1 - B IH0 D\nRABIDEAU  R AE1 - B IH0 - D OW2\nRABIES  R EY1 - B IY0 Z\nRABIN  R AA2 - B IY1 N\nRABIN'S  R AA2 - B IY1 N Z\nRABINE  R AH0 - B IY1 N\nRABINER  R AH0 - B IY1 - N ER0\nRABINOVICH  R AH0 - B IH1 - N AH0 - V IH0 CH\nRABINOVITZ  R AH0 - B IH1 - N AH0 - V IH0 T S\nRABINOWITZ  R AH0 - B IH1 - N AH0 - W IH0 T S\nRABKIN  R AE1 B - K IH0 N\nRABOBANK  R AA1 - B OW0 - B AE2 NG K\nRABOIN  R AH0 - B OY1 N\nRABOLD  R AE1 - B OW0 L D\nRABON  R AA0 - B AO1 N\nRABORN  R AE1 - B ER0 N\nRABOURN  R AH0 - B UH1 R N\nRABOY  R AE1 - B OY0\nRABUCK  R AE1 - B AH0 K\nRABUKA  R AH0 - B UW1 - K AH0\nRABUN  R AE1 - B AH0 N\nRABURN  R AE1 - B ER0 N\nRABY  R EY1 - B IY0\nRACAL  R AE1 - K AH0 L\nRACAMIER  R AE1 - K AH0 - M AY2 R\nRACAMIER(2)  R AH0 - K EY1 - M Y ER0\nRACANELLI  R AA0 - K AA0 - N EH1 - L IY0\nRACCA  R AE1 - K AH0\nRACCOON  R AE0 - K UW1 N\nRACCOONS  R AE0 - K UW1 N Z\nRACE  R EY1 S\nRACE'S  R EY1 - S IH0 Z\nRACED  R EY1 S T\nRACEHORSE  R EY1 S - HH AO2 R S\nRACEHORSES  R AE1 S - HH AO2 R - S IH0 Z\nRACEMES  R EY0 - S IY1 M Z\nRACER  R EY1 - S ER0\nRACERS  R EY1 - S ER0 Z\nRACES  R EY1 - S AH0 Z\nRACES(2)  R EY1 - S IH0 Z\nRACETRACK  R EY1 S - T R AE2 K\nRACETRACKS  R EY1 S - T R AE2 K S\nRACETTE  R AH0 - S EH1 T\nRACEWAY  R EY1 S - W EY2\nRACEY  R EY1 - S IY0\nRACH  R AE1 CH\nRACHAD  R AH0 - SH AA1 D\nRACHAL  R AE1 - K AH0 L\nRACHEL  R EY1 - CH AH0 L\nRACHEL'S  R EY1 - CH AH0 L Z\nRACHELLE  R AH0 - SH EH1 L\nRACHELS  R EY1 - CH IH0 L Z\nRACHELVOLT  R AH0 - SH EH1 L - V AO2 L T\nRACHFORD  R AE1 CH - F ER0 D\nRACHI  R AH1 - SH IY0\nRACHLIN  R AE1 K - L IH0 N\nRACHMANINOFF  R AE0 K - M AE1 - N IH0 - N AO0 F\nRACIAL  R EY1 - SH AH0 L\nRACIALISM  R EY1 - SH AH0 - L IH2 - Z AH0 M\nRACIALLY  R EY1 - SH AH0 - L IY0\nRACICOT  R AE1 - S IH0 - K AA0 T\nRACINE  R AH0 - S IY1 N\nRACINESS  R EY1 - S IY0 - N AH0 S\nRACING  R EY1 - S IH0 NG\nRACING'S  R EY1 - S IH0 NG Z\nRACIOPPI  R AA0 - CH OW1 - P IY0\nRACISM  R EY1 - S IH2 - Z AH0 M\nRACIST  R EY1 - S IH0 S T\nRACISTS  R EY1 - S IH0 S T S\nRACISTS(2)  R EY1 - S IH0 S S\nRACISTS(3)  R EY1 - S IH0 S\nRACK  R AE1 K\nRACKED  R AE1 K T\nRACKER  R AE1 - K ER0\nRACKERS  R AE1 - K ER0 Z\nRACKET  R AE1 - K IH0 T\nRACKETEER  R AE2 - K IH0 - T IH1 R\nRACKETEERING  R AE2 - K IH0 - T IH1 - R IH0 NG\nRACKETEERS  R AE2 - K AH0 - T IH1 R Z\nRACKETS  R AE1 - K AH0 T S\nRACKING  R AE1 - K IH0 NG\nRACKLEY  R AE1 K - L IY0\nRACKLIFF  R AE1 K - L IH0 F\nRACKLIFFE  R AE1 K - L IH0 F\nRACKMIL  R AE1 K - M IH0 L\nRACKOW  R AA1 - S K OW0\nRACKS  R AE1 K S\nRACONTEUR  R AE2 - K AA0 N - T UW1 R\nRACQUET  R AE1 - K IH0 T\nRACQUETBALL  R AE1 - K AH0 T - B AO2 L\nRACQUETS  R AE1 - K IH0 T S\nRACY  R EY1 - S IY0\nRACZ  R AA1 CH\nRACZKA  R AA1 CH - K AH0\nRACZKOWSKI  R AH0 CH - K AO1 F S - K IY0\nRACZYNSKI  R AH0 - CH IH1 N - S K IY0\nRAD  R AE1 D\nRADA  R AA1 - D AH0\nRADABAUGH  R AE1 - D AH0 - B AO0\nRADAKOVICH  R AH0 - D AE1 - K AH0 - V IH0 CH\nRADANT  R AA1 - D AH0 N T\nRADAR  R EY1 - D AA2 R\nRADARS  R EY1 - D AA2 R Z\nRADATZ  R AE1 - D AH0 T S\nRADAVAN  R AA1 - D AH0 - V AH0 N\nRADBERT  R AE1 D - B ER0 T\nRADBORNE  R AH0 D - B AO1 R N\nRADBOURN  R AH0 D - B UH1 R N\nRADBOURNE  R AH0 D - B UH1 R N\nRADBURN  R AE1 D - B ER0 N\nRADCLIFF  R AE1 D - K L IH0 F\nRADCLIFFE  R AE1 D - K L IH0 F\nRADDATZ  R AE1 - D AH0 T S\nRADDE  R AE1 D\nRADDER  R AE1 - D ER0\nRADDITZ  R AE1 - D IH0 T S\nRADEBAUGH  R AE1 - D IH0 - B AO0\nRADECKI  R AH0 - D EH1 - K IY0\nRADEL  R AE1 - D AH0 L\nRADELL  R AA0 - D EY1 L\nRADELLA  R AH0 - D EH1 - L AH0\nRADEMACHER  R AE1 - D IH0 - M AH0 - K ER0\nRADEMAKER  R EY1 D - M EY0 - K ER0\nRADEN  R EY1 - D AH0 N\nRADER  R EY1 - D ER0\nRADERMACHER  R AE1 - D ER0 - M AH0 - K ER0\nRADFORD  R AE1 D - F ER0 D\nRADHA  R AA1 - D AH0\nRADI  R AA1 - D IY0\nRADIAL  R EY1 - D IY0 - AH0 L\nRADIALLY  R EY1 - D IY0 - AH0 - L IY0\nRADIALS  R EY1 - D IY0 - AH0 L Z\nRADIANCE  R EY1 - D IY0 - AH0 N S\nRADIANCE(2)  R EY1 - D Y AH0 N S\nRADIANT  R EY1 - D IY0 - AH0 N T\nRADIANT(2)  R EY1 - D Y AH0 N T\nRADIATE  R EY1 - D IY0 - AH0 T\nRADIATE(2)  R EY1 - D IY0 - EY2 T\nRADIATED  R EY1 - D IY0 - EY2 - T AH0 D\nRADIATED(2)  R EY1 - D IY0 - EY2 - T IH0 D\nRADIATES  R EY1 - D IY0 - EY2 T S\nRADIATING  R EY1 - D IY0 - EY2 - T IH0 NG\nRADIATION  R EY2 - D IY0 - EY1 - SH AH0 N\nRADIATION'S  R EY2 - D IY0 - EY1 - SH AH0 N Z\nRADIATOR  R EY1 - D IY0 - EY2 - T ER0\nRADIATORS  R EY1 - D IY0 - EY2 - T ER0 Z\nRADICAL  R AE1 - D AH0 - K AH0 L\nRADICAL(2)  R AE1 - D IH0 - K AH0 L\nRADICALISM  R AE1 - D IH0 - K AH0 - L IH2 - Z AH0 M\nRADICALIZATION  R AE2 - D IH0 - K AH0 - L IH0 - Z EY1 - SH AH0 N\nRADICALIZE  R AE1 - D IH0 - K AH0 - L AY2 Z\nRADICALIZED  R AE1 - D IH0 - K AH0 - L AY2 Z D\nRADICALLY  R AE1 - D IH0 K - L IY0\nRADICALS  R AE1 - D AH0 - K AH0 L Z\nRADICALS(2)  R AE1 - D IH0 - K AH0 L Z\nRADICE  R AE1 - D IH0 S\nRADICH  R AE1 - D IH0 K\nRADICK  R AE1 - D IH0 K\nRADIN  R AE1 - D IH0 N\nRADINKA  R AH0 - D IH1 NG - K AH0\nRADIO  R EY1 - D IY0 - OW2\nRADIO'S  R EY1 - D IY0 - OW2 Z\nRADIOACTIVE  R EY2 - D IY0 - OW0 - AE1 K - T IH0 V\nRADIOACTIVITY  R EY1 - D IY0 - OW0 - AE0 K - T IH1 - V AH0 - T IY0\nRADIOACTIVITY(2)  R EY2 - D IY0 - OW0 - AE0 K - T IH1 - V AH0 - T IY0\nRADIOED  R EY1 - D IY0 - OW2 D\nRADIOGRAPHY  R EY2 - D IY0 - AA1 - G R AH0 - F IY0\nRADIOLOGICAL  R EY2 - D IY0 - AH0 - L AA1 - JH IH0 - K AH0 L\nRADIOLOGIST  R EY2 - D IY0 - AA1 - L AH0 - JH IH0 S T\nRADIOLOGISTS  R EY2 - D IY0 - AA1 - L AH0 - JH IH0 S T S\nRADIOLOGISTS(2)  R EY2 - D IY0 - AA1 - L AH0 - JH IH0 S S\nRADIOLOGISTS(3)  R EY2 - D IY0 - AA1 - L AH0 - JH IH0 S\nRADIOLOGY  R EY2 - D IY0 - AA1 - L AH0 - JH IY0\nRADIOMAN  R EY1 - D IY0 - OW0 - M AE2 N\nRADIOS  R EY1 - D IY0 - OW2 Z\nRADISH  R AE1 - D IH0 SH\nRADISHES  R AE1 - D IH0 - SH IH0 Z\nRADISSON  R AE1 - D AH0 - S AH0 N\nRADITZ  R EY1 - D IH0 T S\nRADIUM  R EY1 - D IY0 - AH0 M\nRADIUS  R EY1 - D IY0 - AH0 S\nRADKE  R EY1 D - K IY0\nRADKE(2)  R AE1 D - K IY0\nRADKO  R AE1 D - K OW0\nRADLE  R EY1 - D AH0 L\nRADLER  R EY1 - D AH0 L - ER0\nRADLER(2)  R AE1 D - L ER0\nRADLEY  R AE1 D - L IY0\nRADLIFF  R AE1 D - L IH0 F\nRADLOFF  R AE1 D - L AO0 F\nRADMAN  R AE1 D - M AH0 N\nRADMILLA  R AE2 D - M IH1 - L AH0\nRADMUND  R AE1 D - M AH0 N D\nRADNER  R AE1 D - N ER0\nRADNEY  R AE1 D - N IY0\nRADNOR  R AE1 D - N ER0\nRADO  R AA1 - D OW0\nRADOLF  R AE1 - D OW0 L F\nRADOMSKI  R AH0 - D AA1 M S - K IY0\nRADON  R EY1 - D AA2 N\nRADOS  R AA1 - D OW0 Z\nRADOSEVICH  R AH0 - D AA1 - S IH0 - V IH0 CH\nRADOSH  R AH0 - D AO1 SH\nRADOVAN  R AA1 - D OW2 - V AA2 N\nRADOWSKI  R AH0 - D OW1 S - K IY0\nRADOWSKI'S  R AH0 - D OW1 - S K IY0 Z\nRADTKE  R AE1 D - K IY0\nRADU  R AA1 - D UW0\nRADWAN  R AE1 D - W AH0 N\nRADY  R EY1 - D IY0\nRADZIEWICZ  R AA1 - JH AH0 - V IH0 CH\nRADZIK  R AE1 D - Z IH0 K\nRAE  R EY1\nRAEBURN  R EY1 - B ER0 N\nRAEDER  R EH1 - D ER0\nRAEDLER  R EH1 D - L ER0\nRAEL  R EY1 L\nRAETHER  R EH1 - DH ER0\nRAETZ  R IY1 T S\nRAF  R AE1 F\nRAFAEL  R AA2 - F AY0 - EH1 L\nRAFALE  R AH0 - F EY1 L\nRAFALSKI  R AH0 - F AA1 L - S K IY0\nRAFE  R EY1 F\nRAFELGHEM  R AH0 - F EH1 L - G AH0 M\nRAFF  R AE1 F\nRAFFA  R AE1 - F AH0\nRAFFAELE  R AA0 - F AY0 - EH1 - L EY0\nRAFFAELLI  R AA0 - F AA0 - EH1 - L IY0\nRAFFEL  R AE1 - F AH0 L\nRAFFENSPERGER  R AE1 - F IH0 N - S P ER0 - G ER0\nRAFFERTY  R AE1 - F ER0 - T IY0\nRAFFETTO  R AA0 - F EH1 - T OW0\nRAFFETY  R AE1 F - T IY0\nRAFFI  R AE1 - F IY0\nRAFFI'S  R AE1 - F IY0 Z\nRAFFIELD  R AE1 - F IY2 L D\nRAFFISH  R AE1 - F IH0 SH\nRAFFLE  R AE1 - F AH0 L\nRAFFLES  R AE1 - F AH0 L Z\nRAFFO  R AE1 - F OW0\nRAFI  R AE1 - F IY0\nRAFI(2)  R AA1 - F IY0\nRAFIK  R AE1 - F IH0 K\nRAFSANJANI  R AE2 F - S AH0 N - JH AA1 - N IY0\nRAFT  R AE1 F T\nRAFTED  R AE1 F - T AH0 D\nRAFTED(2)  R AE1 F - T IH0 D\nRAFTER  R AE1 F - T ER0\nRAFTERS  R AE1 F - T ER0 Z\nRAFTERY  R AE1 F - T ER0 - IY0\nRAFTING  R AE1 F - T IH0 NG\nRAFTS  R AE1 F T S\nRAFUSE  R AA0 - F UW1 - S IY0\nRAG  R AE1 G\nRAGAIN  R AE1 - G AH0 N\nRAGAN  R EY1 - G AH0 N\nRAGAS  R AA1 - G AH0 Z\nRAGAVAN  R AA1 - G AH0 - V AA2 N\nRAGAVAN'S  R AA1 - G AH0 - V AA2 N Z\nRAGE  R EY1 JH\nRAGED  R EY1 JH D\nRAGEL  R EY1 - G AH0 L\nRAGEN  R AE1 - G AH0 N\nRAGER  R EY1 - G ER0\nRAGES  R EY1 - JH IH0 Z\nRAGGED  R AE1 - G AH0 D\nRAGGEDY  R AE1 - G AH0 - D IY0\nRAGGIO  R AA1 - JH IY0 - OW0\nRAGHIDA  R AH0 - G IY1 - D AH0\nRAGIN  R AE1 - JH IH0 N\nRAGING  R EY1 - JH IH0 NG\nRAGLAND  R AE1 G - L AH0 N D\nRAGLE  R EY1 - G AH0 L\nRAGLIN  R AE1 - G L IH0 N\nRAGMEN  R AE1 G - M AH0 N\nRAGO  R AA1 - G OW0\nRAGON  R AA0 - G AO1 N\nRAGONA  R AA0 - G OW1 - N AH0\nRAGONE  R AA0 - G OW1 - N IY0\nRAGONESE  R AA0 - G OW0 - N EY1 - Z IY0\nRAGS  R AE1 G Z\nRAGSDALE  R AE1 G Z - D EY2 L\nRAGTAG  R AE1 G - T AE2 G\nRAGTIME  R AE1 G - T AY2 M\nRAGU  R AE0 - G UW1\nRAGUCCI  R AA0 - G UW1 - CH IY0\nRAGUNATHAN  R AA0 - G UW1 - N AH0 - TH AA0 N\nRAGUSA  R AA0 - G UW1 - S AH0\nRAGWEED  R AE1 G - W IY2 D\nRAH  R AA1\nRAHAL  R AH0 - HH AA1 L\nRAHE  R EY1 - HH IY0\nRAHEEM  R AH0 - HH IY1 M\nRAHILL  R AA1 - HH IH0 L\nRAHILLY  R AE1 - HH AH0 - L IY0\nRAHIM  R AH0 - HH IY1 M\nRAHL  R AA1 L\nRAHM  R AE1 M\nRAHM(2)  R AA1 M\nRAHMAN  R AA1 - M AH0 N\nRAHMAN'S  R AA1 - M AH0 N Z\nRAHMING  R AA1 - M IH0 NG\nRAHN  R AE1 N\nRAHRIG  R AE1 - R IH0 G\nRAHUL  R AH0 - HH UW1 L\nRAHWAY  R AA1 - W EY2\nRAI  R AA1 - IY0\nRAIA  R AA1 - Y AH0\nRAIBLE  R EY1 - B AH0 L\nRAICHE  R EY1 CH\nRAID  R EY1 D\nRAIDED  R EY1 - D IH0 D\nRAIDER  R EY1 - D ER0\nRAIDER'S  R EY1 - D ER0 Z\nRAIDERS  R EY1 - D ER0 Z\nRAIDERS'  R EY1 - D ER0 Z\nRAIDING  R EY1 - D IH0 NG\nRAIDS  R EY1 D Z\nRAIFF  R EY1 F\nRAIFORD  R EY1 - F ER0 D\nRAIKES  R EY1 K S\nRAIKO  R EY1 - K OW0\nRAIL  R EY1 L\nRAIL'S  R EY1 L Z\nRAILBIKE  R EY1 L - B AY2 K\nRAILBIKER  R EY1 L - B AY0 - K ER0\nRAILBIKERS  R EY1 L - B IH0 - K ER0 Z\nRAILCAR  R EY1 L - K AA2 R\nRAILCARS  R EY1 L - K AA2 R Z\nRAILE  R EY1 L\nRAILED  R EY1 L D\nRAILEY  R EY1 - L IY0\nRAILING  R EY1 - L IH0 NG\nRAILINGS  R EY1 - L IH0 NG Z\nRAILROAD  R EY1 L - R OW2 D\nRAILROAD'S  R EY1 L - R OW2 D Z\nRAILROADED  R EY1 L - R OW2 - D IH0 D\nRAILROADING  R EY1 L - R OW2 - D IH0 NG\nRAILROADS  R EY1 L - R OW2 D Z\nRAILROADS'  R EY1 L - R OW2 D Z\nRAILS  R EY1 L Z\nRAILSBACK  R EY1 L Z - B AE2 K\nRAILTEX  R EY1 L - T EH2 K S\nRAILWAY  R EY1 L - W EY2\nRAILWAY'S  R EY1 L - W EY2 Z\nRAILWAYS  R EY1 L - W EY2 Z\nRAIMER  R EY1 - M ER0\nRAIMO  R EY1 - M OW0\nRAIMOND  R EY1 - M AH0 N D\nRAIMONDI  R AH0 - M OW1 N - D IY0\nRAIMONDO  R EY2 - M AA1 N - D OW0\nRAIN  R EY1 N\nRAINA  R EY1 - N AH0\nRAINBOLT  R EY1 N - B OW2 L T\nRAINBOW  R EY1 N - B OW2\nRAINBOWS  R EY1 N - B OW2 Z\nRAINCOAT  R EY1 N - K OW2 T\nRAINCOAT'S  R EY1 N - K OW2 T S\nRAINCOATS  R EY1 N - K OW2 T S\nRAINDANCER  R EY1 N - D AE2 N - S ER0\nRAINDROP  R EY1 N - D R AA2 P\nRAINDROPS  R EY1 N - D R AA2 P S\nRAINE  R EY1 N\nRAINED  R EY1 N D\nRAINER  R EY1 - N ER0\nRAINERI  R AH0 - N EH1 - R IY0\nRAINES  R EY1 N Z\nRAINEY  R EY1 - N IY0\nRAINFALL  R EY1 N - F AO2 L\nRAINFALLS  R EY1 N - F AO2 L Z\nRAINFORD  R AY1 N - F ER0 D\nRAINFOREST  R AY1 N - F AO2 - R AH0 S T\nRAINFORESTS  R AY1 N - F AO2 - R AH0 S T S\nRAINFORESTS(2)  R AY1 N - F AO2 - R AH0 S S\nRAINFORESTS(3)  R AY1 N - F AO2 - R AH0 S\nRAINGER  R AA1 - IH0 - NG ER0\nRAINIE  R EY1 - N IY0\nRAINIER  R EY0 - N IH1 R\nRAINIEST  R EY1 - N IY0 - AH0 S T\nRAINING  R EY1 - N IH0 NG\nRAINLEY  R EY1 N - L IY0\nRAINLEY'S  R EY1 N - L IY0 Z\nRAINMAKER  R EY1 N - M EY2 - K ER0\nRAINMAN  R EY1 N - M AH0 N\nRAINONE  R EY1 - N OW2 N\nRAINS  R EY1 N Z\nRAINSTORM  R EY1 N - S T AO2 R M\nRAINSTORMS  R EY1 N - S T AO2 R M Z\nRAINVILLE  R EY1 N - V IH2 L\nRAINWATER  R EY1 N - W AO2 - T ER0\nRAINY  R EY1 - N IY0\nRAISA  R EY1 - S AH0\nRAISA(2)  R AA2 - IY1 - S AH0\nRAISANEN  R AY1 - S AH0 - N AH0 N\nRAISBECK  R EY1 Z - B EH2 K\nRAISCH  R AY1 SH\nRAISE  R EY1 Z\nRAISED  R EY1 Z D\nRAISER  R EY1 - Z ER0\nRAISERS  R EY1 - Z ER0 Z\nRAISES  R EY1 - Z AH0 Z\nRAISES(2)  R EY1 - Z IH0 Z\nRAISIN  R EY1 - Z IH0 N\nRAISING  R EY1 - Z IH0 NG\nRAISINS  R EY1 - Z AH0 N Z\nRAISINS(2)  R EY1 - Z IH0 N Z\nRAISLER  R EY1 Z - L ER0\nRAISON  R EY1 - S AA0 N\nRAISOR  R EY1 - Z ER0\nRAISSA  R EY1 - S AH0\nRAIT  R EY1 T\nRAITH  R EY1 TH\nRAITHEL  R EY1 - TH AH0 L\nRAITT  R EY1 T\nRAJ  R AA1 ZH\nRAJ(2)  R AA1 JH\nRAJALA  R AA0 - Y AA1 - L AH0\nRAJALA(2)  R AA0 - JH AA1 - L AH0\nRAJARATNAM  R AA0 - JH ER0 - AA1 T - N AA0 M\nRAJEWSKI  R AY0 - EH1 F S - K IY0\nRAJIV  R AA0 - JH IY1 V\nRAJIV(2)  R AA0 - ZH IY1 V\nRAJKO  R AA1 ZH - K OW0\nRAJKUMAR  R AA1 ZH - K UW0 - M AA1 R\nRAJNEESH  R AA0 JH - N IY1 SH\nRAJU  R AA1 - Y UW0\nRAK  R AE1 K\nRAKE  R EY1 K\nRAKED  R EY1 K T\nRAKER  R EY1 - K ER0\nRAKERS  R EY1 - K ER0 Z\nRAKES  R EY1 K S\nRAKESTRAW  R EY1 K - S T R AO2\nRAKICH  R AE1 - K IH0 CH\nRAKING  R EY1 - K IH0 NG\nRAKISH  R EY1 - K IH0 SH\nRAKIYA  R AH0 - K IY1 - AH0\nRAKOCY  R AH0 - K OW1 - CH IY0\nRAKOCZY  R AH0 - K OW1 - CH IY0\nRAKOFF  R AE1 K - AO2 F\nRAKOLTA  R AH0 - K AA1 L - T AH0\nRAKOVICA  R AH0 - K OW1 - V IH0 - K AH0\nRAKOW  R AE1 - K AW0\nRAKOWSKI  R AH0 - K AW1 S - K IY0\nRALEIGH  R AO1 - L IY0\nRALEIGH'S  R AO1 - L IY0 Z\nRALES  R EY1 L Z\nRALES'  R EY1 L Z\nRALES'S  R EY1 L - Z IH0 Z\nRALESES  R AH0 - L IY1 - S IH0 Z\nRALEY  R AE1 - L IY0\nRALF  R AA1 L F\nRALL  R AO1 L\nRALLIED  R AE1 - L IY0 D\nRALLIES  R AE1 - L IY0 Z\nRALLIS  R AE1 - L IH0 S\nRALLO  R AE1 - L OW0\nRALLS  R AO1 L Z\nRALLY  R AE1 - L IY0\nRALLY'S  R AE1 - L IY0 Z\nRALLYING  R AE1 - L IY0 - IH0 NG\nRALPH  R AE1 L F\nRALPH'S  R AE1 L F S\nRALPHS  R AE1 L F S\nRALSTON  R AO1 L - S T AH0 N\nRALSTON'S  R AA1 L - S T AH0 N Z\nRAM  R AE1 M\nRAMA  R AA1 - M AH0\nRAMADA  R AH0 - M AA1 - D AH0\nRAMADA'S  R AH0 - M AA1 - D AH0 Z\nRAMADAN  R AE1 - M AH0 - D AH0 N\nRAMADAN(2)  R AA1 - M AH0 - D AA2 N\nRAMAGE  R AE1 - M IH0 JH\nRAMAKER  R AA1 - M EY0 - K ER0\nRAMALA  R AH0 - M AA1 - L AH0\nRAMALLAH  R AH0 - M AE1 - L AH0\nRAMALLAH(2)  R AH0 - M AA1 - L AH0\nRAMAN  R EY1 - M AH0 N\nRAMAN(2)  R AA1 - M AH0 N\nRAMAPHOSA  R AE2 - M AH0 - F OW1 - S AH0\nRAMASWAMI  R AA2 - M AH0 S - W AA1 - M IY0\nRAMAT  R AE1 - M AE0 T\nRAMAT(2)  R AA1 - M AH0 T\nRAMBEAU  R AH0 M - B OW1\nRAMBEAU(2)  R AE1 M - B OW2\nRAMBERG  R AE1 M - B ER0 G\nRAMBERT  R AE1 M - B ER0 T\nRAMBIN  R AE1 M - B IH0 N\nRAMBLE  R AE1 M - B AH0 L\nRAMBLED  R AE1 M - B AH0 L D\nRAMBLER  R AE1 M - B L ER0\nRAMBLERS  R AE1 M - B L ER0 Z\nRAMBLING  R AE1 M - B L IH0 NG\nRAMBLING(2)  R AE1 M - B AH0 L - IH0 NG\nRAMBO  R AE1 M - B OW0\nRAMBOW  R AE1 M - B OW0\nRAMBUNCTIOUS  R AE0 M - B AH1 NG K - SH AH0 S\nRAMEL  R AE1 - M AH0 L\nRAMELLA  R AH0 - M EH1 - L AH0\nRAMER  R EY1 - M ER0\nRAMERIZ  R AA0 - M EH1 - R IY0 Z\nRAMESES  R AE1 - M AH0 - S IY2 Z\nRAMESH  R AA1 - M EH2 SH\nRAMESSES  R AE1 - M AH0 - S IH0 Z\nRAMESSES(2)  R AE1 M - S IY2 Z\nRAMEY  R AE1 - M IY0\nRAMI  R AA1 - M IY0\nRAMIFICATION  R AE2 - M AH0 - F AH0 - K EY1 - SH AH0 N\nRAMIFICATIONS  R AE2 - M AH0 - F AH0 - K EY1 - SH AH0 N Z\nRAMIFY  R AE1 - M AH0 - F AY2\nRAMIRES  R AA0 - M IH1 - R EH0 S\nRAMIREZ  R AH0 - M IH1 - R EH0 Z\nRAMIRO  R AH0 - M IH1 - R OW0\nRAMLAWI  R AE2 M - L AW1 - IY0\nRAMLER  R AE1 M - L ER0\nRAMLOW  R AE1 M - L OW2\nRAMM  R AE1 M\nRAMMED  R AE1 M D\nRAMMEL  R AE1 - M AH0 L\nRAMMER  R AE1 - M ER0\nRAMMING  R AE1 - M IH0 NG\nRAMO  R EY1 - M OW0\nRAMON  R AH0 - M OW1 N\nRAMONA  R AH0 - M OW1 - N AH0\nRAMONDA  R AH0 - M AA1 N - D AH0\nRAMONE  R AH0 - M OW1 N\nRAMOS  R AA1 - M OW0 S\nRAMOS(2)  R EY1 - M OW0 S\nRAMP  R AE1 M P\nRAMPAGE  R AE1 M - P EY2 JH\nRAMPAGED  R AE0 M - P EY1 JH D\nRAMPAGED(2)  R AE1 M - P EY2 JH D\nRAMPAGES  R AE1 M - P EY2 - JH IH0 Z\nRAMPAGING  R AE1 M - P EY2 - JH IH0 NG\nRAMPAGING(2)  R AE1 M - P AH0 - JH IH0 NG\nRAMPANT  R AE1 M - P AH0 N T\nRAMPARTS  R AE1 M - P AA2 R T S\nRAMPELL  R AE0 M - P EH1 L\nRAMPEY  R AE1 M - P IY0\nRAMPING  R AE1 M - P IH0 NG\nRAMPLEY  R AE1 M - P L IY0\nRAMPS  R AE1 M P S\nRAMPY  R AE1 M - P IY0\nRAMQVIST  R AE1 M K - V IH2 S T\nRAMQVIST(2)  R AE1 M - K W IH2 S T\nRAMROD  R AE1 M - R AA2 D\nRAMS  R AE1 M Z\nRAMSAY  R AE1 M - Z IY0\nRAMSAY(2)  R AE1 M - S EY2\nRAMSBURG  R AE1 M S - B ER0 G\nRAMSDELL  R AE1 M S - D AH0 L\nRAMSDEN  R AE1 M S - D AH0 N\nRAMSER  R AE1 M - Z ER0\nRAMSES  R AE1 M - S IY2 Z\nRAMSEUR  R AH0 M - S ER1\nRAMSEY  R AE1 M - Z IY0\nRAMSEY'S  R AE1 M - Z IY0 Z\nRAMSEYER  R AE1 M - Z IY0 - ER0\nRAMSHACKLE  R AE1 M - SH AE2 - K AH0 L\nRAMSTAD  R AE1 M - S T AH0 D\nRAMSTEIN  R AE1 M - S T AY2 N\nRAMSTEIN(2)  R AE1 M - S T IY2 N\nRAMTEK  R AE1 M - T EH2 K\nRAMTHA  R AE1 M - TH AH0\nRAMTHUN  R AE1 M - TH AH0 N\nRAMU  R AA2 - M UW1\nRAMUNE  R AE1 - M Y UW2 N\nRAMUS  R EY1 - M AH0 S\nRAMZI  R AE1 M - Z IY0\nRAN  R AE1 N\nRANA  R AE1 - N AH0\nRANALLI  R AH0 - N AE1 - L IY0\nRANALLO  R AH0 - N AE1 - L OW0\nRANCE  R AE1 N S\nRANCE'S  R AE1 N - S IH0 Z\nRANCH  R AE1 N CH\nRANCH'S  R AE1 N - CH IH0 Z\nRANCHER  R AE1 N - CH ER0\nRANCHERS  R AE1 N - CH ER0 Z\nRANCHES  R AE1 N - CH AH0 Z\nRANCHING  R AE1 N - CH IH0 NG\nRANCHLAND  R AE1 N CH - L AH0 N D\nRANCHO  R AE1 N - CH OW0\nRANCID  R AE1 N - S IH0 D\nRANCK  R AE1 NG K\nRANCO  R AE1 NG - K OW0\nRANCOR  R AE1 NG - K ER0\nRANCOROUS  R AE1 NG - K ER0 - AH0 S\nRANCOROUSNESS  R AE1 NG - K ER0 - AH0 S - N IH0 S\nRANCOURT  R AH0 N - K AO1 R T\nRAND  R AE1 N D\nRAND'S  R AE1 N D Z\nRANDA  R AA1 N - D AH0\nRANDA'S  R AA1 N - D AH0 Z\nRANDAL  R AE1 N - D AH0 L\nRANDALL  R AE1 N - D AH0 L\nRANDAZZO  R AA0 N - D AA1 - Z OW0\nRANDEL  R AE1 N - D AH0 L\nRANDELL  R AE1 N - D EH1 L\nRANDER  R AE1 N - D ER0\nRANDI  R AE1 N - D IY0\nRANDLE  R AE1 N - D AH0 L\nRANDLEMAN  R AE1 N - D AH0 L - M AH0 N\nRANDLES  R AE1 N - D AH0 L Z\nRANDLETT  R AE1 N D - L IH0 T\nRANDO  R AA1 N - D OW0\nRANDOL  R AE1 N - D AH0 L\nRANDOLF  R AE1 N - D OW2 L F\nRANDOLPH  R AE1 N - D AA0 L F\nRANDOM  R AE1 N - D AH0 M\nRANDOMIZE  R AE1 N - D AH0 - M AY2 Z\nRANDOMIZED  R AE1 N - D AH0 - M AY2 Z D\nRANDOMLY  R AE1 N - D AH0 M - L IY0\nRANDOMNESS  R AE1 N - D AH0 M - N AH0 S\nRANDS  R AE1 N D Z\nRANDY  R AE1 N - D IY0\nRANDY'S  R AE1 N - D IY0 Z\nRANEE  R AE1 - N IY1\nRANERI  R AA0 - N EH1 - R IY0\nRANES  R EY1 N Z\nRANEY  R EY1 - N IY0\nRANFT  R AE1 N F T\nRANG  R AE1 NG\nRANGE  R EY1 N JH\nRANGED  R EY1 N JH D\nRANGEL  R AE1 N - JH EH1 L\nRANGER  R EY1 N - JH ER0\nRANGER'S  R EY1 N - JH ER0 Z\nRANGERS  R EY1 N - JH ER0 Z\nRANGERS'  R EY1 N - JH ER0 Z\nRANGES  R EY1 N - JH AH0 Z\nRANGES(2)  R EY1 N - JH IH0 Z\nRANGING  R EY1 N - JH IH0 NG\nRANGOON  R AE0 NG - G UW1 N\nRANGOON'S  R AE0 NG - G UW1 N Z\nRANGY  R EY1 N - JH IY0\nRANH  R AE1 N\nRANI  R AA1 - N IY0\nRANIA  R AA1 - N IY0 - AH0\nRANIERI  R AE2 - N IY0 - EH1 - R IY0\nRANIERI(2)  R AH0 - N IY0 - EH1 - R IY0\nRANK  R AE1 NG K\nRANKE  R AE1 NG K\nRANKED  R AE1 NG K T\nRANKER  R AE1 NG - K ER0\nRANKERS  R AE1 NG - K ER0 Z\nRANKIN  R AE1 NG - K IH0 N\nRANKINE  R AE1 NG - K AY2 N\nRANKING  R AE1 NG - K IH0 NG\nRANKINGS  R AE1 NG - K IH0 NG Z\nRANKINS  R AE1 NG - K IH0 N Z\nRANKLE  R AE1 NG - K AH0 L\nRANKLED  R AE1 NG - K AH0 L D\nRANKLES  R AE1 NG - K AH0 L Z\nRANKLING  R AE1 NG - K L IH0 NG\nRANKS  R AE1 NG K S\nRANLEY  R AE1 N - L IY0\nRANN  R AE1 N\nRANNEY  R AE1 - N IY0\nRANNOW  R AE1 - N OW0\nRANS  R AE1 N Z\nRANSACK  R AE1 N - S AE2 K\nRANSACKED  R AE1 N - S AE2 K T\nRANSACKING  R AE1 N - S AE2 - K IH0 NG\nRANSBOTTOM  R AE1 N S - B AH0 - T AA0 M\nRANSBURG  R AE1 N Z - B ER0 G\nRANSBURG'S  R AE1 N Z - B ER0 G Z\nRANSDELL  R AE1 N Z - D EH1 L\nRANSFORD  R AE1 N S - F ER0 D\nRANSIER  R AE1 N - S IY0 - ER0\nRANSLEY  R AE1 N S - L IY0\nRANSOM  R AE1 N - S AH0 M\nRANSOM'S  R AE1 N - S AH0 M Z\nRANSOME  R AE1 N - S AH0 M\nRANSOMS  R AE1 N - S AH0 M Z\nRANSON  R AE1 N - S AH0 N\nRANSONE  R AE1 N - S AH0 N\nRANT  R AE1 N T\nRANTA  R AE1 N - T AH0\nRANTALA  R AA0 N - T AA1 - L AH0\nRANTED  R AE1 N - T AH0 D\nRANTED(2)  R AE1 N - T IH0 D\nRANTING  R AE1 N - T IH0 NG\nRANTOUL  R AE2 N - T UW1 L\nRANTZ  R AE1 N T S\nRANUM  R AE1 - N AH0 M\nRANZ  R AE1 N Z\nRAO  R AW1\nRAO'S  R AW1 Z\nRAOUL  R AA0 - UW1 L\nRAP  R AE1 P\nRAPACIOUS  R AH0 - P AE1 - SH IH0 S\nRAPACIOUS(2)  R AH0 - P EY1 - SH IH0 S\nRAPACZ  R AA1 - P AH0 CH\nRAPANELLI  R AE2 - P AH0 - N EH1 - L IY0\nRAPAPORT  R AE1 - P AH0 - P AO2 R T\nRAPE  R EY1 P\nRAPED  R EY1 P T\nRAPER  R EY1 - P ER0\nRAPERS  R EY1 - P ER0 Z\nRAPES  R EY1 P S\nRAPESEED  R EY1 P - S IY2 D\nRAPHAEL  R AA2 - F AY0 - EH1 L\nRAPHAELA  R AE1 - F EY0 - L AH0\nRAPHALIAN  R AH0 - F EY1 - L IY0 - AH0 N\nRAPHEL  R AE1 - F AH0 L\nRAPID  R AE1 - P AH0 D\nRAPID(2)  R AE1 - P IH0 D\nRAPIDITY  R AH0 - P IH1 - D AH0 - T IY0\nRAPIDLY  R AE1 - P AH0 D - L IY0\nRAPIDS  R AE1 - P AH0 D Z\nRAPIDS(2)  R AE1 - P IH0 D Z\nRAPIER  R EY1 - P IY0 - ER0\nRAPING  R EY1 - P IH0 NG\nRAPIST  R EY1 - P IH0 S T\nRAPIST'S  R EY1 - P IH0 S T S\nRAPISTS  R EY1 - P IH0 S T S\nRAPISTS(2)  R EY1 - P IH0 S S\nRAPISTS(3)  R EY1 - P IH0 S\nRAPKIN  R AE1 P - K IH0 N\nRAPLEY  R AE1 P - L IY0\nRAPOCA  R AH0 - P OW1 - K ER0\nRAPOPORT  R AH0 - P AA1 - P AO0 R T\nRAPOPORT(2)  R AE1 - P AH0 - P AO0 R T\nRAPOSA  R AA0 - P OW1 - S AH0\nRAPOSO  R AA0 - P OW1 - S OW0\nRAPOZA  R AA0 - P OW1 - Z AH0\nRAPOZO  R AA0 - P OW1 - Z OW0\nRAPP  R AE1 P\nRAPPA  R AE1 - P AH0\nRAPPAHANNOCK  R AE2 - P AH0 - HH AE1 - N AH0 K\nRAPPAPORT  R AE1 - P AH0 - P AO0 R T\nRAPPE  R AE1 P\nRAPPED  R AE1 P T\nRAPPELLING  R AH0 - P EH1 - L IH0 NG\nRAPPER  R AE1 - P ER0\nRAPPERS  R AE1 - P ER0 Z\nRAPPING  R AE1 - P IH0 NG\nRAPPOLD  R AE1 - P OW2 L D\nRAPPOPORT  R AE1 - P AH0 - P AO0 R T\nRAPPORT  R AE0 - P AO1 R\nRAPPROCHEMENT  R AE2 - P R OW2 SH - M AA1 N\nRAPS  R AE1 P S\nRAPSON  R AE1 P - S AH0 N\nRAPT  R AE1 P T\nRAPTIS  R AH0 P - T IY1 S\nRAPTLY  R AE1 P T - L IY0\nRAPTOPOULOS  R AE0 P - T AA1 - P OW0 - L AH0 S\nRAPTOR  R AE1 P - T ER0\nRAPTORIAL  R AE2 P - T AO1 - R IY0 - AH0 L\nRAPTORS  R AE1 P - T ER0 Z\nRAPTURE  R AE1 P - CH ER0\nRAPTUROUS  R AE1 P - CH ER0 - AH0 S\nRAPUANO  R AA0 - P UW0 - AA1 - N OW0\nRAQUEL  R AH0 - K EH1 L\nRARA  R AA1 - R AH0\nRARDON  R AA1 R - D AH0 N\nRARE  R EH1 R\nRAREFIED  R EH1 - R AH0 - F AY0 D\nRAREFY  R EH1 - R AH0 - F AY0\nRARELY  R EH1 R - L IY0\nRARENESS  R EH1 R - N IH0 S\nRARER  R EH1 - R ER0\nRAREST  R EH1 - R AH0 S T\nRARICK  R AE1 - R IH0 K\nRARITAN  R EH1 - R IH0 - T AH0 N\nRARITIES  R EH1 - R IH0 - T IY0 Z\nRARITY  R EH1 - R AH0 - T IY0\nRARITY(2)  R EH1 - R IH0 - T IY0\nRAS  R AE1 S\nRASBURY  R AE1 S - B EH0 - R IY0\nRASCAL  R AE1 S - K AH0 L\nRASCALS  R AE1 S - K AH0 L Z\nRASCH  R AE1 SH\nRASCHE  R AE1 SH\nRASCHKE  R AE1 SH K\nRASCO  R AA1 - S K OW0\nRASCOE  R AE1 S - K OW0\nRASCON  R AE1 S - K AH0 N\nRASE  R EY1 Z\nRASER  R EY1 - Z ER0\nRASEY  R AE1 - S IY0\nRASH  R AE1 SH\nRASHAD  R AH0 - SH AA1 D\nRASHEED  R AH0 - SH IY1 D\nRASHES  R AE1 - SH IH0 Z\nRASHID  R AH0 - SH IY1 D\nRASHID(2)  R AA0 - SH IY1 D\nRASIA  R AA1 - S IY0 - AH0\nRASK  R AE1 S K\nRASKA  R AA1 S - K AH0\nRASKE  R EY1 S K\nRASKIN  R AE1 - S K IH0 N\nRASKYN  R AE1 - S K IH0 N\nRASMIN  R AE1 S - M AH0 N\nRASMIN(2)  R AE1 Z - M IH0 N\nRASMUS  R AE1 Z - M IH0 S\nRASMUSON  R AE1 Z - M AH0 - S AH0 N\nRASMUSSEN  R AE1 S - M AH0 - S AH0 N\nRASMUSSON  R AE1 Z - M AH0 - S AH0 N\nRASNAKE  R AE1 S - N AH0 K\nRASNER  R AE1 S - N ER0\nRASNICK  R AE1 S - N IH0 K\nRASO  R AA1 - S OW0\nRASOR  R EY1 - Z ER0\nRASORITE  R AE1 - S ER0 - AY2 T\nRASP  R AE1 S P\nRASPBERRIES  R AE1 Z - B EH2 - R IY0 Z\nRASPBERRY  R AE1 Z - B EH2 - R IY0\nRASPED  R AE1 S P T\nRASPS  R AE1 S P S\nRASPUTIN  R AH0 - S P Y UW1 - T IH0 N\nRASPUTIN'S  R AE0 S - P Y UW1 - T AH0 N Z\nRASPY  R AE1 S - P IY0\nRAST  R AE1 S T\nRASTER  R AE1 - S T ER0\nRASTEROP  R AE1 - S T ER0 - AA2 P\nRASTEROPS  R AE1 - S T ER0 - AA2 P S\nRASTETTER  R EY1 - S T IH0 - T ER0\nRASTUS  R AE1 - S T AH0 S\nRAT  R AE1 T\nRAT-A-TAT  R AE1 - T AH0 - T AE1 T\nRATA  R AE1 - T AH0\nRATAJCZAK  R AE1 - T AH0 - CH EH0 K\nRATATISEMENT  R AE1 - T AH0 - T AY2 Z - M AH0 N T\nRATATISEMENTS  R AE1 - T AH0 - T AY2 Z - M AH0 N T S\nRATAY  R AE1 - T EY0\nRATCHET  R AE0 T - CH AH0 T\nRATCHET  R AE1 - CH AH0 T\nRATCHETED  R AE0 T - CH AH0 - T AH0 D\nRATCHETED  R AE1 - CH AH0 - T IH0 D\nRATCHETING  R AE1 - CH AH0 - T IH0 NG\nRATCHFORD  R AE1 CH - F ER0 D\nRATCLIFF  R AE1 T K - L IH0 F\nRATCLIFFE  R AE1 T K - L IH0 F\nRATE  R EY1 T\nRATE'S  R EY1 T S\nRATED  R EY1 - T AH0 D\nRATED(2)  R EY1 - T IH0 D\nRATELIFF  R AE1 T - L IH0 F\nRATEPAYER  R EY1 T - P EY2 - ER0\nRATEPAYERS  R EY1 T - P EY2 - ER0 Z\nRATEPAYERS'  R EY1 T - P EY2 - ER0 Z\nRATER  R EY1 - T ER0\nRATERS  R EY1 - T ER0 Z\nRATES  R EY1 T S\nRATH  R AE1 TH\nRATHBONE  R AE1 TH - B OW2 N\nRATHBUN  R AE1 TH - B AH0 N\nRATHBURN  R AE1 TH - B ER0 N\nRATHBURNE  R AE1 TH - B ER0 N\nRATHBURNE'S  R AE1 TH - B ER0 N Z\nRATHE  R EY1 DH\nRATHEL  R AE1 - TH AH0 L\nRATHER  R AE1 - DH ER0\nRATHER'S  R AE1 - DH ER0 Z\nRATHER(2)  R AH1 - DH ER0\nRATHERT  R AE1 - TH ER0 T\nRATHGEBER  R AE1 TH - G IH0 - B ER0\nRATHJE  R AE1 TH JH\nRATHJEN  R AE1 TH - JH AH0 N\nRATHKE  R AE1 TH K\nRATHMAN  R AE1 TH - M AH0 N\nRATHMANN  R AE1 TH - M AH0 N\nRATHSKELLER  R AE1 TH - S K EH2 - L ER0\nRATICAN  R AE1 - T IH0 - K AH0 N\nRATIENI  R AH0 - T IY1 - N IY0\nRATIER  R EY1 - T Y ER0\nRATIFICATION  R AE2 - T AH0 - F AH0 - K EY1 - SH AH0 N\nRATIFIED  R AE1 - T AH0 - F AY2 D\nRATIFIES  R AE1 - T AH0 - F AY2 Z\nRATIFY  R AE1 - T AH0 - F AY2\nRATIFYING  R AE1 - T AH0 - F AY2 - IH0 NG\nRATING  R EY1 - T IH0 NG\nRATINGS  R EY1 - T IH0 NG Z\nRATIO  R EY1 - SH IY0 - OW2\nRATION  R AE1 - SH AH0 N\nRATION(2)  R EY1 - SH AH0 N\nRATIONAL  R AE1 - SH AH0 - N AH0 L\nRATIONAL(2)  R AE1 SH - N AH0 L\nRATIONALE  R AE2 - SH AH0 - N AE1 L\nRATIONALES  R AE2 - SH AH0 - N AE1 L Z\nRATIONALITY  R AE2 - SH AH0 - N AE1 - L IH0 - T IY0\nRATIONALIZATION  R AE2 - SH AH0 N - AH0 - L IH0 - Z EY1 - SH AH0 N\nRATIONALIZATION(2)  R AE2 SH - N AH0 - L IH0 - Z EY1 - SH AH0 N\nRATIONALIZATIONS  R AE2 - SH AH0 N - AH0 - L IH0 - Z EY1 - SH AH0 N Z\nRATIONALIZATIONS(2)  R AE2 SH - N AH0 - L IH0 - Z EY1 - SH AH0 N Z\nRATIONALIZE  R AE1 - SH AH0 N - AH0 - L AY2 Z\nRATIONALIZED  R AE1 - SH AH0 N - AH0 - L AY2 Z D\nRATIONALIZING  R AE1 - SH AH0 N - AH0 - L AY2 - Z IH0 NG\nRATIONALLY  R AE1 - SH AH0 N - AH0 - L IY0\nRATIONALLY(2)  R AE1 SH - N AH0 - L IY0\nRATIONED  R AE1 - SH AH0 N D\nRATIONED(2)  R EY1 - SH AH0 N D\nRATIONING  R AE1 - SH AH0 N - IH0 NG\nRATIONING(2)  R AE1 SH - N IH0 NG\nRATIONING(3)  R EY1 - SH AH0 N - IH0 NG\nRATIONS  R AE1 - SH AH0 N Z\nRATIOS  R EY1 - SH IY0 - OW2 Z\nRATKO  R AE1 T - K OW0\nRATKOVICH  R AA1 T - K AH0 - V IH0 CH\nRATKOWSKI  R AH0 T - K AO1 F S - K IY0\nRATLEDGE  R AE1 T - L IH0 JH\nRATLEY  R AE1 T - L IY0\nRATLIFF  R AE1 T - L IH0 F\nRATLIFFE  R AE1 T - L IH0 F\nRATLIFFE'S  R AE1 T - L IH0 F S\nRATNER  R AE1 T - N ER0\nRATNERS  R AE1 T - N ER0 Z\nRATON  R AH0 - T OW1 N\nRATS  R AE1 T S\nRATTAN  R AE0 - T AE1 N\nRATTATOUILLE  R AE0 - T AH0 - T UW1 - IY0\nRATTE  R AE1 T\nRATTERMAN  R AE1 - T ER0 - M AH0 N\nRATTERREE  R AE1 - T ER0 - IY1\nRATTIGAN  R AE1 - T IH0 - G AH0 N\nRATTIGAN'S  R AE1 - T IH0 - G AH0 N Z\nRATTLE  R AE1 - T AH0 L\nRATTLED  R AE1 - T AH0 L D\nRATTLER  R AE1 - T AH0 L - ER0\nRATTLER(2)  R AE1 T - L ER0\nRATTLES  R AE1 - T AH0 L Z\nRATTLESNAKE  R AE1 - T AH0 L - S N EY2 K\nRATTLESNAKES  R AE1 - T AH0 L - S N EY2 K S\nRATTLING  R AE1 T - L IH0 NG\nRATTLING(2)  R AE1 - T AH0 L - IH0 NG\nRATTNER  R AE1 T - N ER0\nRATTRAY  R AE1 - T R EY0\nRATTS  R AE1 T S\nRATTY  R AE1 - T IY0\nRATU  R AA0 - T UW1\nRATZ  R AE1 T S\nRATZINGER  R AE1 T - S IH2 - NG ER0\nRATZLAFF  R AE1 T Z - L AH0 F\nRAU  R AW1\nRAUB  R AO1 B\nRAUBER  R AW1 - B ER0\nRAUCCI  R AO1 - CH IY0\nRAUCH  R AO1 CH\nRAUCHER  R AO1 - CH ER0\nRAUCHER'S  R AO1 - CH ER0 Z\nRAUCOUS  R AO1 - K AH0 S\nRAUDABAUGH  R AO1 - D AH0 - B AO0\nRAUDENBUSH  R AW1 - D IH0 N - B UH0 SH\nRAUEN  R AW1 - AH0 N\nRAUER  R AW1 - ER0\nRAUH  R AO1\nRAUL  R AO1 L\nRAUL(2)  R AA0 - UW1 L\nRAUL(3)  R AW1 L\nRAULERSON  R AO1 - L ER0 - S AH0 N\nRAULS  R AA0 - UW1 L Z\nRAULSTON  R AO1 L - S T AH0 N\nRAUM  R AO1 M\nRAUN  R AO1 N\nRAUNCHY  R AO1 N - CH IY0\nRAUP  R AO1 P\nRAUPP  R AO1 P\nRAUSCH  R AW1 SH\nRAUSCHENBERG  R AW1 - SH AH0 N - B ER0 G\nRAUSCHER  R AW1 - SH ER0\nRAUSER  R AW1 - S ER0\nRAUTENBERG  R AW1 - T AH0 N - B ER0 G\nRAUTH  R AO1 TH\nRAUTIO  R AW1 - T IY0 - OW0\nRAVAGE  R AE1 - V IH0 JH\nRAVAGED  R AE1 - V IH0 JH D\nRAVAGES  R AE1 - V IH0 - JH IH0 Z\nRAVAGING  R AE1 - V IH0 - JH IH0 NG\nRAVAN  R EY1 - V AH0 N\nRAVE  R EY1 V\nRAVED  R EY1 V D\nRAVEL  R AE1 - V AH0 L\nRAVEL'S  R AH0 - V EH1 L Z\nRAVEL(2)  R AH0 - V EH1 L\nRAVELED  R AE1 - V AH0 L D\nRAVELING  R AE1 - V AH0 L - IH0 NG\nRAVELING(2)  R AE1 V - L IH0 NG\nRAVELO  R AA0 - V EH1 - L OW0\nRAVEN  R EY1 - V AH0 N\nRAVENEL  R AE1 - V IH0 - N EH0 L\nRAVENELL  R AE1 - V IH0 - N EH0 L\nRAVENNA  R AH0 - V EH1 - N AH0\nRAVENOUS  R AE1 - V AH0 - N AH0 S\nRAVENS  R EY1 - V AH0 N Z\nRAVENSCRAFT  R EY1 - V AH0 N Z - K R AE2 F T\nRAVENSCROFT  R EY1 - V AH0 N Z - K R AO2 F T\nRAVENSWOOD  R EY1 - V AH0 N Z - W UH2 D\nRAVER  R EY1 - V ER0\nRAVES  R EY1 V Z\nRAVI  R AA2 - V IY1\nRAVI'S  R AA2 - V IY1 S\nRAVIN  R AE1 - V IH0 N\nRAVINDRAN  R AA1 - V IH2 N - D R AH0 N\nRAVINE  R AH0 - V IY1 N\nRAVINES  R AH0 - V IY1 N Z\nRAVING  R EY1 - V IH0 NG\nRAVIOLI  R AE2 - V IY0 - OW1 - L IY0\nRAVISHANKAR  R AA2 - V IY0 - SH AA1 NG - K AA2 R\nRAVISHING  R AE1 - V IH0 - SH IH0 NG\nRAVITCH  R AE1 - V IH0 CH\nRAVITZ  R AE1 - V IH0 T S\nRAW  R AA1\nRAWALPINDI  R AE2 - W AO0 L - P IH1 N - D IY0\nRAWDING  R AO1 - D IH0 NG\nRAWDON  R AO1 - D AH0 N\nRAWE  R AO1\nRAWHIDE  R AO1 - HH AY2 D\nRAWL  R AO1 L\nRAWLES  R AO1 L Z\nRAWLEY  R AO1 - L IY0\nRAWLING  R AO1 - L IH0 NG\nRAWLINGS  R AO1 - L IH0 NG Z\nRAWLINS  R AO1 - L IH0 N Z\nRAWLINSON  R AO1 - L IH0 N - S AH0 N\nRAWLS  R AO1 L Z\nRAWNESS  R AO1 - N IH0 S\nRAWSKI  R AO1 S - K IY2\nRAWSON  R AO1 - S AH0 N\nRAX  R AE1 K S\nRAXTER  R AE1 K - S T ER0\nRAY  R EY1\nRAY'S  R EY1 Z\nRAYA  R EY1 - AH0\nRAYBON  R EY1 - B AH0 N\nRAYBORN  R EY1 - B ER0 N\nRAYBOULD  R EY1 - B OW2 L D\nRAYBOURN  R EY0 - B UH1 R N\nRAYBUCK  R EY1 - B AH2 K\nRAYBURN  R EY1 - B ER0 N\nRAYBURN'S  R EY1 - B ER2 N Z\nRAYCHEM  R EY1 - K EH2 M\nRAYCON  R EY1 - K AH0 N\nRAYCRAFT  R EY1 - K R AE2 F T\nRAYE  R EY1\nRAYED  R EY1 D\nRAYFIELD  R EY1 - F IY2 L D\nRAYFORD  R EY1 - F ER0 D\nRAYGOZA  R EY2 - G OW1 - Z AH0\nRAYL  R EY1 L\nRAYLE  R EY1 L\nRAYMAN  R EY1 - M AH0 N\nRAYMARK  R EY1 - M AA2 R K\nRAYMARK'S  R EY1 - M AA2 R K S\nRAYMENT  R EY1 - M AH0 N T\nRAYMER  R EY1 - M ER0\nRAYMO  R EY1 - M OW0\nRAYMOND  R EY1 - M AH0 N D\nRAYMONDA  R EY2 - M AA1 N - D AH0\nRAYMUND  R EY1 - M AH0 N D\nRAYMUNDO  R EY2 - M AH1 N - D OW0\nRAYNARD  R EY1 - N ER0 D\nRAYNE  R EY1 N\nRAYNER  R EY1 - N ER0\nRAYNES  R EY1 N Z\nRAYNET  R EY1 - N EH2 T\nRAYNO  R EY1 - N OW0\nRAYNOR  R EY1 - N ER0\nRAYON  R EY1 - AH0 N\nRAYONIER  R EY2 - OW0 - N IH1 R\nRAYOS  R EY1 - OW0 Z\nRAYOVAC  R EY1 - AH0 - V AE0 K\nRAYROCK  R EY1 - R AA2 K\nRAYS  R EY1 Z\nRAYSON  R EY1 - Z AH0 N\nRAYSOR  R EY1 - S ER0\nRAYTECH  R EY1 - T EH2 K\nRAYTHEON  R EY1 - TH IY0 - AA0 N\nRAYTHEON'S  R EY1 - TH IY0 - AA0 N Z\nRAZ  R AE1 Z\nRAZA  R AE1 - Z AH0\nRAZALEIGH  R AE1 - Z AH0 - L IY2\nRAZE  R EY1 Z\nRAZED  R EY1 Z D\nRAZING  R EY1 - Z IH0 NG\nRAZO  R AA1 - Z OW0\nRAZOR  R EY1 - Z ER0\nRAZOR'S  R EY1 - Z ER0 Z\nRAZORBACK  R EY1 - Z ER0 - B AE2 K\nRAZORBACK'S  R EY1 - Z ER0 - B AE2 K S\nRAZORBACKS  R EY1 - Z ER0 - B AE2 K S\nRAZORS  R EY1 - Z ER0 Z\nRAZZANO  R AA0 T - S AA1 - N OW0\nRAZZLE  R AE1 - Z AH0 L\nRAZZMATAZZ  R AE1 Z - M AH0 - T AE1 Z\nRB  AA1 R - B IY1\nRE  R EY1\nRE'S  R EY1 Z\nRE(2)  R IY1\nREA  R IY1\nREABSORB  R IY2 - AH0 B - Z AO1 R B\nREABSORBED  R IY2 - AH0 B - Z AO1 R B D\nREACH  R IY1 CH\nREACHABLE  R IY1 - CH AH0 - B AH0 L\nREACHED  R IY1 CH T\nREACHES  R IY1 - CH AH0 Z\nREACHES(2)  R IY1 - CH IH0 Z\nREACHING  R IY1 - CH IH0 NG\nREACQUIRE  R IY0 - AH0 - K W AY1 R\nREACQUIRED  R IY0 - AH0 - K W AY1 R D\nREACT  R IY0 - AE1 K T\nREACTED  R IY0 - AE1 K - T AH0 D\nREACTED(2)  R IY0 - AE1 K - T IH0 D\nREACTING  R IY0 - AE1 K - T IH0 NG\nREACTION  R IY0 - AE1 K - SH AH0 N\nREACTIONARIES  R IY0 - AE1 K - SH AH0 N - EH2 - R IY0 Z\nREACTIONARY  R IY0 - AE1 K - SH AH0 N - EH2 - R IY0\nREACTIONS  R IY0 - AE1 K - SH AH0 N Z\nREACTIVATE  R IY1 - AE1 K - T AH0 - V EY2 T\nREACTIVATED  R IY1 - AE1 K - T AH0 - V EY2 - T IH0 D\nREACTIVATING  R IY1 - AE1 K - T IH0 - V EY2 - T IH0 NG\nREACTIVE  R IY0 - AE1 K - T IH0 V\nREACTIVITY  R IY2 - AE2 K - T IH1 - V AH0 - T IY0\nREACTOR  R IY0 - AE1 K - T ER0\nREACTOR'S  R IY0 - AE1 K - T ER0 Z\nREACTORS  R IY0 - AE1 K - T ER0 Z\nREACTS  R IY0 - AE1 K T S\nREAD  R EH1 D\nREAD'S  R IY1 D Z\nREAD(2)  R IY1 D\nREADABILITY  R IY2 - D AH0 - B IH1 - L IH0 - T IY0\nREADABLE  R IY1 - D AH0 - B AH0 L\nREADE  R EH1 D\nREADER  R IY1 - D ER0\nREADER'S  R IY1 - D ER0 Z\nREADERMAN  R IY1 - D ER0 - M AH0 N\nREADERS  R IY1 - D ER0 Z\nREADERS'  R IY1 - D ER0 Z\nREADERSHIP  R IY1 - D ER0 - SH IH2 P\nREADIED  R EH1 - D IY0 D\nREADIER  R EH1 - D IY0 - ER0\nREADIES  R EH1 - D IY0 Z\nREADILY  R EH1 - D AH0 - L IY0\nREADINESS  R EH1 - D IY0 - N AH0 S\nREADING  R EH1 - D IH0 NG\nREADING(2)  R IY1 - D IH0 NG\nREADINGER  R EH1 - D IH0 - NG ER0\nREADINGS  R EH1 - D IH0 NG Z\nREADINGS(2)  R IY1 - D IH0 NG Z\nREADJUST  R IY2 - AH0 - JH AH1 S T\nREADJUSTED  R IY2 - AH0 - JH AH1 - S T IH0 D\nREADJUSTING  R IY2 - AH0 - JH AH1 - S T IH0 NG\nREADJUSTMENT  R IY0 - AH0 - JH AH1 S T - M AH0 N T\nREADJUSTMENTS  R IY0 - AH0 - JH AH1 S T - M AH0 N T S\nREADMIT  R IY2 - AH0 D - M IH1 T\nREADMITTED  R IY2 - AH0 D - M IH1 - T IH0 D\nREADOUT  R IY1 D - AW2 T\nREADS  R IY1 D Z\nREADUS  R EH1 - D IH0 S\nREADY  R EH1 - D IY0\nREADYING  R EH1 - D IY0 - IH0 NG\nREAFFILIATION  R IY0 - AH0 - F IH2 - L IY0 - EY1 - SH AH0 N\nREAFFIRM  R IY2 - AH0 - F ER1 M\nREAFFIRMATION  R IY2 - AE0 - F ER0 - M EY1 - SH AH0 N\nREAFFIRMED  R IY2 - AH0 - F ER1 M D\nREAFFIRMING  R IY2 - AH0 - F ER1 - M IH0 NG\nREAFFIRMS  R IY2 - AH0 - F ER1 M Z\nREAGAN  R EY1 - G AH0 N\nREAGAN'S  R EY1 - G AH0 N Z\nREAGAN'S(2)  R IY1 - G AH0 N Z\nREAGAN(2)  R IY1 - G AH0 N\nREAGANESQUE  R EY1 - G AH0 - N EH1 S K\nREAGANESQUE(2)  R IY1 - G AH0 - N EH1 S K\nREAGANISM  R EY1 - G AH0 - N IH2 - Z AH0 M\nREAGANISM(2)  R IY1 - G AH0 - N IH2 - Z AH0 M\nREAGANITE  R EY1 - G AH0 - N AY2 T\nREAGANITE(2)  R IY1 - G AH0 - N AY2 T\nREAGANITES  R EY1 - G AH0 - N AY2 T S\nREAGANOMICS  R EY2 - G AH0 - N AA1 - M IH0 K S\nREAGANS  R EY1 - G AH0 N Z\nREAGANS'  R EY1 - G AH0 N Z\nREAGANS'(2)  R IY1 - G AH0 N Z\nREAGEN  R IY1 - G AH0 N\nREAGENT  R IY0 - EY1 - JH AH0 N T\nREAGENT(2)  R IY1 - JH AH0 N T\nREAGENTS  R IY0 - EY1 - JH AH0 N T S\nREAGENTS(2)  R IY1 - JH AH0 N T S\nREAGLE  R IY1 - G AH0 L\nREAGOR  R IY1 - G ER0\nREAL  R IY1 L\nREALAMERICA  R IY2 - L AH0 - M EH1 - R IH0 - K AH0\nREALCAP  R IY1 L - K AE2 P\nREALE  R IY1 L\nREALESTATE  R IY1 - L IH0 - S T EY2 T\nREALI  R IY1 - L IY0\nREALIGN  R IY0 - AH0 - L AY1 N\nREALIGNED  R IY0 - AH0 - L AY1 N D\nREALIGNING  R IY0 - AH0 - L AY1 - N IH0 NG\nREALIGNMENT  R IY0 - AH0 - L AY1 N - M AH0 N T\nREALIGNMENTS  R IY0 - AH0 - L AY1 N - M AH0 N T S\nREALISM  R IY1 - L IH0 - Z AH0 M\nREALIST  R IY1 - L IH0 S T\nREALISTIC  R IY2 - AH0 - L IH1 - S T IH0 K\nREALISTICALLY  R IY2 - AH0 - L IH1 - S T IH0 K - L IY0\nREALISTS  R IY1 - L IH0 S T S\nREALISTS(2)  R IY1 - L IH0 S S\nREALISTS(3)  R IY1 - L IH0 S\nREALITIES  R IY0 - AE1 - L AH0 - T IY0 Z\nREALITY  R IY0 - AE1 - L AH0 - T IY0\nREALIZABLE  R IY2 - AH0 - L AY1 - Z AH0 - B AH0 L\nREALIZATION  R IY1 - L AH0 - Z EY1 - SH AH0 N\nREALIZATIONS  R IY1 - L AH0 - Z EY1 - SH AH0 N Z\nREALIZE  R IY1 - L AY2 Z\nREALIZE(2)  R IY1 - AH0 - L AY2 Z\nREALIZED  R IY1 - L AY2 Z D\nREALIZED(2)  R IY1 - AH0 - L AY2 Z D\nREALIZES  R IY1 - AH0 - L AY2 - Z IH0 Z\nREALIZES(2)  R IY1 - L AY2 - Z IH0 Z\nREALIZING  R IY1 - L AY2 - Z IH0 NG\nREALIZING(2)  R IY1 - AH0 - L AY2 - Z IH0 NG\nREALLOCATE  R IY0 - AE1 - L AH0 - K EY0 T\nREALLOCATED  R IY2 - AE1 - L AH0 - K EY2 - T IH0 D\nREALLOCATING  R IY0 - AE1 - L AH0 - K EY2 - T IH0 NG\nREALLOCATION  R IY0 - AE2 - L AH0 - K EY1 - SH AH0 N\nREALLOWANCE  R IY1 - AH0 - L AW1 - AH0 N S\nREALLY  R IH1 - L IY0\nREALLY(2)  R IY1 - L IY0\nREALM  R EH1 L M\nREALMS  R EH1 L M Z\nREALMUTO  R AH0 L - M UW1 - T OW0\nREALPOLITIK  R IY2 L - P AO2 - L IH0 - T IH1 K\nREALTOR  R IY1 - AH0 L - T ER0\nREALTOR'S  R IY1 - AH0 L - T ER0 Z\nREALTOR'S(2)  R IY1 L - T ER0 Z\nREALTOR(2)  R IY1 L - T ER0\nREALTORS  R IY1 - AH0 L - T ER0 Z\nREALTORS(2)  R IY1 L - T ER0 Z\nREALTY  R IY1 - AH0 L - T IY0\nREALTY'S  R IY1 - AH0 L - T IY0 Z\nREALTY'S(2)  R IY1 L - T IY0 Z\nREALTY(2)  R IH1 - L IH0 - T IY2\nREALTY(3)  R IY1 L - T IY0\nREAM  R IY1 M\nREAMER  R IY1 - M ER0\nREAMER'S  R IY1 - M ER0 Z\nREAMERS  R IY1 - M ER0 Z\nREAMES  R IY1 M Z\nREAMS  R IY1 M Z\nREAMY  R IY1 - M IY0\nREANALYSE  R IY0 - AE1 - N AH0 - L AY2 Z\nREANALYSED  R IY0 - AE1 - N AH0 - L AY2 Z D\nREANALYSES  R IY0 - AE1 - N AH0 - L AY2 - Z AH0 Z\nREANALYSING  R IY0 - AE1 - N AH0 - L AY2 - Z IH0 NG\nREANEY  R IY1 - N IY0\nREAP  R IY1 P\nREAPED  R IY1 P T\nREAPER  R IY1 - P ER0\nREAPING  R IY1 - P IH0 NG\nREAPPEAR  R IY2 - AH0 - P IH1 R\nREAPPEARANCE  R IY2 - AH0 - P IH1 - R AH0 N S\nREAPPEARED  R IY2 - AH0 - P IH1 R D\nREAPPEARS  R IY2 - AH0 - P IH1 R Z\nREAPPLY  R IY2 - AH0 P - L IY0\nREAPPOINT  R IY2 - AH0 - P OY1 N T\nREAPPOINTED  R IY2 - AH0 - P OY1 N - T IH0 D\nREAPPOINTED(2)  R IY2 - AH0 - P OY1 - N IH0 D\nREAPPOINTMENT  R IY2 - AH0 - P OY1 N T - M AH0 N T\nREAPPORTIONMENT  R IY2 - AH0 - P AO1 R - SH AH0 N - M AH0 N T\nREAPPRAISAL  R IY2 - AH0 - P R EY1 - Z AH0 L\nREAPPRAISE  R IY2 - AH0 - P R EY1 Z\nREAPPRAISED  R IY0 - AH0 - P R EY1 Z D\nREAPS  R IY1 P S\nREAR  R IH1 R\nREARDEN  R IH1 R - D AH0 N\nREARDON  R IH1 R - D AH0 N\nREARED  R IH1 R D\nREARICK  R IH1 - R IH0 K\nREARING  R IH1 - R IH0 NG\nREARM  R IY1 - AA1 R M\nREARMAMENT  R IY0 - AA1 R - M AH0 - M AH0 N T\nREARMING  R IY1 - AA1 R - M IH0 NG\nREARRANGE  R IY2 - ER0 - EY1 N JH\nREARRANGED  R IY2 - ER0 - EY1 N JH D\nREARRANGEMENT  R IY0 - ER0 - EY1 N JH - M AH0 N T\nREARRANGING  R IY2 - ER0 - EY1 N - JH IH0 NG\nREARREST  R IY0 - ER0 - EH1 S T\nREARRESTED  R IY0 - ER0 - EH1 - S T IH0 D\nREARS  R IH1 R Z\nREARVIEW  R IH1 R - V Y UW0\nREARVIEW(2)  R IY1 R - V Y UW0\nREAS  R IY1 Z\nREASE  R IY1 S\nREASER  R IY1 - S ER0\nREASNER  R IY1 - S N ER0\nREASON  R IY1 - Z AH0 N\nREASONABLE  R IY1 - Z AH0 N - AH0 - B AH0 L\nREASONABLE(2)  R IY1 Z - N AH0 - B AH0 L\nREASONABLENESS  R IY1 - Z AH0 N - AH0 - B AH2 L - N AH0 S\nREASONABLENESS(2)  R IY1 Z - N AH0 - B AH2 L - N AH0 S\nREASONABLY  R IY1 - Z AH0 N - AH0 - B L IY0\nREASONED  R IY1 - Z AH0 N D\nREASONER  R IY1 - Z AH0 N - ER0\nREASONER'S  R IY1 - Z AH0 N - ER0 Z\nREASONING  R IY1 - Z AH0 N - IH0 NG\nREASONOVER  R IY1 - Z AH0 N - OW2 - V ER0\nREASONS  R IY1 - Z AH0 N Z\nREASOR  R IY1 - S ER0\nREASSEMBLE  R IY2 - AH0 - S EH1 M - B AH0 L\nREASSEMBLED  R IY2 - AH0 - S EH1 M - B AH0 L D\nREASSEMBLY  R IY2 - AH0 - S EH1 M - B L IY0\nREASSERT  R IY2 - AH0 - S ER1 T\nREASSERTED  R IY2 - AH0 - S ER1 - T AH0 D\nREASSERTED(2)  R IY2 - AH0 - S ER1 - T IH0 D\nREASSERTING  R IY2 - AH0 - S ER1 - T IH0 NG\nREASSERTION  R IY2 - AH0 - S ER1 - SH AH0 N\nREASSERTS  R IY2 - AH0 - S ER1 T S\nREASSESS  R IY0 - AH0 - S EH1 S\nREASSESSED  R IY0 - AH0 - S EH1 S T\nREASSESSING  R IY0 - AH0 - S EH1 - S IH0 NG\nREASSESSMENT  R IY2 - AH0 - S EH1 S - M AH0 N T\nREASSIGN  R IY2 - AH0 - S AY1 N\nREASSIGNED  R IY2 - AH0 - S AY1 N D\nREASSIGNING  R IY2 - AH0 - S AY1 - N IH0 NG\nREASSIGNMENT  R IY0 - AH0 - S AY1 N - M AH0 N T\nREASSIGNMENTS  R IY2 - AH0 - S AY1 N - M AH0 N T S\nREASSUME  R IY0 - AH0 - S UW1 M\nREASSUMED  R IY0 - AH0 - S UW1 M D\nREASSURANCE  R IY2 - AH0 - SH UH1 - R AH0 N S\nREASSURANCES  R IY2 - AH0 - SH ER1 - AH0 N - S IH0 Z\nREASSURANCES(2)  R IY2 - AH0 - SH UH1 - R AH0 N - S IH0 Z\nREASSURE  R IY2 - AH0 - SH UH1 R\nREASSURED  R IY2 - AH0 - SH UH1 R D\nREASSURES  R IY2 - AH0 - SH UH1 R Z\nREASSURING  R IY2 - AH0 - SH UH1 - R IH0 NG\nREASSURINGLY  R IY0 - AH0 - SH ER1 - IH0 NG - L IY0\nREASSURINGLY(2)  R IY0 - AH0 - SH UH1 - R IH0 NG - L IY0\nREATTA  R IY2 - AA1 - T AH0\nREATTACH  R IY1 - AH0 - T AE1 CH\nREATTACHED  R IY1 - AH0 - T AE1 CH T\nREAUME  R UW1 M\nREAUTHORIZATION  R IY0 - AO2 - TH ER0 - IH0 - Z EY1 - SH AH0 N\nREAUTHORIZE  R IY0 - AO1 - TH ER0 - AY2 Z\nREAUTHORIZED  R IY0 - AO1 - TH ER0 - AY2 Z D\nREAUTHORIZING  R IY0 - AO1 - TH ER0 - AY2 - Z IH0 NG\nREAUX  R OW1\nREAVE  R IY1 V\nREAVER  R IY1 - V ER0\nREAVER'S  R IY1 - V ER0 Z\nREAVES  R IY1 V Z\nREAVIS  R IY1 - V IH0 S\nREAWAKEN  R IY2 - AH0 - W EY1 - K AH0 N\nREAWAKENED  R IY2 - AH0 - W EY1 - K AH0 N D\nREAWAKENING  R IY2 - AH0 - W EY1 - K AH0 - N IH0 NG\nREAY  R EY1\nREBA  R IY1 - B AH0\nREBACK  R IY1 - B AE0 K\nREBALANCING  R IY0 - B AE1 - L AH0 N - S IH0 NG\nREBAR  R IY1 - B AA2 R\nREBATE  R IY1 - B EY2 T\nREBATED  R IY1 - B EY2 - T IH0 D\nREBATES  R IY1 - B EY2 T S\nREBBE  R IY1 - B AH0\nREBBE'S  R IY1 - B AH0 Z\nREBECCA  R AH0 - B EH1 - K AH0\nREBECCA'S  R AH0 - B EH1 - K AH0 Z\nREBECK  R IY1 - B EH0 K\nREBEKA  R IH0 - B IY1 - K AH0\nREBEKKA  R IH0 - B EH1 - K AH0\nREBEL  R EH1 - B AH0 L\nREBEL'S  R EH1 - B AH0 L Z\nREBEL(2)  R IH0 - B EH1 L\nREBELLED  R IH0 - B EH1 L D\nREBELLING  R IH0 - B EH1 - L IH0 NG\nREBELLION  R IH0 - B EH1 L - Y AH0 N\nREBELLION'S  R IH0 - B EH1 L - Y AH0 N Z\nREBELLIONS  R IH0 - B EH1 L - Y AH0 N Z\nREBELLIOUS  R IH0 - B EH1 L - Y AH0 S\nREBELLIOUS(2)  R AH0 - B EH1 L - Y AH0 S\nREBELLIOUSNESS  R AH0 - B EH1 - L IY0 - AH0 S - N AH0 S\nREBELLO  R EH0 - B EH1 - L OW0\nREBELO  R EH0 - B EH1 - L OW0\nREBELS  R EH1 - B AH0 L Z\nREBELS'  R EH1 - B AH0 L Z\nREBELS(2)  R IH0 - B EH1 L Z\nREBER  R EH1 - B ER0\nREBERT  R EH1 - B ER0 T\nREBHOLZ  R EH1 B - HH OW0 L Z\nREBID  R IY0 - B IH1 D\nREBIRTH  R IY0 - B ER1 TH\nREBIRTHS  R IY0 - B ER1 TH S\nREBMAN  R EH1 B - M AH0 N\nREBMANN  R EH1 B - M AH0 N\nREBO  R IY1 - B OW0\nREBOARD  R IY0 - B AO1 R D\nREBOOK  R IY0 - B UH1 K\nREBOOKED  R IY0 - B UH1 K T\nREBORN  R IY1 - B AO1 R N\nREBOUND  R IY0 - B AW1 N D\nREBOUNDED  R IY0 - B AW1 N - D IH0 D\nREBOUNDING  R IY0 - B AW1 N - D IH0 NG\nREBOUNDS  R IY1 - B AW2 N D Z\nREBROADCAST  R IY0 - B R AO1 D - K AE2 S T\nREBSTOCK  R EH1 B - S T AA2 K\nREBUCK  R EH1 - B AH0 K\nREBUFF  R IH0 - B AH1 F\nREBUFF(2)  R IY0 - B AH1 F\nREBUFFED  R IH0 - B AH1 F T\nREBUFFED(2)  R IY0 - B AH1 F T\nREBUFFING  R IY0 - B AH1 - F IH0 NG\nREBUFFS  R IY0 - B AH1 F S\nREBUILD  R IY0 - B IH1 L D\nREBUILDER  R IY0 - B IH1 L - D ER0\nREBUILDERS  R IY0 - B IH1 L - D ER0 Z\nREBUILDING  R IY0 - B IH1 L - D IH0 NG\nREBUILDS  R IY0 - B IH1 L D Z\nREBUILT  R IY0 - B IH1 L T\nREBUKE  R IY0 - B Y UW1 K\nREBUKE(2)  R IH0 - B Y UW1 K\nREBUKED  R IH0 - B Y UW1 K T\nREBUKED(2)  R IY0 - B Y UW1 K T\nREBUKES  R IY0 - B Y UW1 K S\nREBUKING  R IY0 - B Y UW1 - K IH0 NG\nREBUS  R IY1 - B AH0 S\nREBUT  R IH0 - B AH1 T\nREBUT(2)  R IY0 - B AH1 T\nREBUTTAL  R IH0 - B AH1 - T AH0 L\nREBUTTAL(2)  R IY0 - B AH1 - T AH0 L\nREBUTTALS  R IH0 - B AH1 - T AH0 L Z\nREBUTTED  R IH0 - B AH1 - T IH0 D\nREBUTTING  R IH0 - B AH1 - T IH0 NG\nREBUTTING(2)  R IY0 - B AH1 - T IH0 NG\nREC  R EH1 K\nRECADI  R IH0 - K AE1 - D IY0\nRECALCITRANCE  R IH0 - K AE1 L - S AH0 - T R AH0 N S\nRECALCITRANT  R IH0 - K AE1 L - S IH0 - T R AH0 N T\nRECALCULATE  R IY0 - K AE1 L - K Y AH0 - L EY2 T\nRECALCULATED  R IY0 - K AE1 L - K Y AH0 - L EY2 - T IH0 D\nRECALCULATING  R IY0 - K AE1 L - K Y AH0 - L EY2 - T IH0 NG\nRECALCULATION  R IY0 - K AE2 L - K Y AH0 - L EY1 - SH AH0 N\nRECALL  R IY1 - K AO2 L\nRECALL(2)  R IH0 - K AO1 L\nRECALLED  R IH0 - K AO1 L D\nRECALLING  R IH0 - K AO1 - L IH0 NG\nRECALLS  R IY1 - K AO2 L Z\nRECALLS(2)  R IH0 - K AO1 L Z\nRECANT  R IY0 - K AE1 N T\nRECANTATION  R EH2 - K AH0 N - T EY1 - SH AH0 N\nRECANTATION(2)  R IY0 - K AE0 N - T EY1 - SH AH0 N\nRECANTED  R IY0 - K AE1 N - T IH0 D\nRECANTING  R AH0 - K AE1 N - T IH0 NG\nRECAP  R IY1 - K AE2 P\nRECAP(2)  R IH0 - K AE1 P\nRECAPITALIZATION  R IY2 - K AE2 - P IH0 - T AH0 - L IH0 - Z EY1 - SH AH0 N\nRECAPITALIZATIONS  R IY0 - K AE2 - P AH0 - T AH0 - L AH0 - Z EY1 - SH AH0 N Z\nRECAPITALIZE  R IY2 - K AE1 - P IH0 - T AH0 - L AY2 Z\nRECAPITALIZED  R IY2 - K AE1 - P IH0 - T AH0 - L AY2 Z D\nRECAPITALIZING  R IY2 - K AE1 - P IH0 - T AH0 - L AY2 - Z IH0 NG\nRECAPITULATE  R IY2 - K AH0 - P IH1 - CH AH0 - L EY2 T\nRECAPITULATES  R IY2 - K AH0 - P IH1 - CH AH0 - L EY2 T S\nRECAPPED  R IY0 - K AE1 P T\nRECAPPING  R IY0 - K AE1 - P IH0 NG\nRECAPS  R IY1 - K AE2 P S\nRECAPTURE  R IY0 - K AE1 P - CH ER0\nRECAPTURED  R IY0 - K AE1 P - CH ER0 D\nRECAPTURING  R IY0 - K AE1 P - CH ER0 - IH0 NG\nRECAREY  R IY0 - K EH1 - R IY0\nRECAST  R IY0 - K AE1 S T\nRECASTING  R IY0 - K AE1 - S T IH0 NG\nRECCHIA  R EH1 - K IY0 - AH0\nRECEDE  R IH0 - S IY1 D\nRECEDED  R AH0 - S IY1 - D AH0 D\nRECEDED(2)  R IH0 - S IY1 - D IH0 D\nRECEDED(3)  R IY0 - S IY1 - D IH0 D\nRECEDES  R IY0 - S IY1 D Z\nRECEDING  R IH0 - S IY1 - D IH0 NG\nRECEDING(2)  R IY0 - S IY1 - D IH0 NG\nRECEIPT  R IH0 - S IY1 T\nRECEIPT(2)  R IY0 - S IY1 T\nRECEIPTS  R IH0 - S IY1 T S\nRECEIPTS(2)  R IY0 - S IY1 T S\nRECEIVABLE  R IH0 - S IY1 - V AH0 - B AH0 L\nRECEIVABLES  R IH0 - S IY1 - V AH0 - B AH0 L Z\nRECEIVE  R AH0 - S IY1 V\nRECEIVE(2)  R IH0 - S IY1 V\nRECEIVE(3)  R IY0 - S IY1 V\nRECEIVED  R AH0 - S IY1 V D\nRECEIVED(2)  R IH0 - S IY1 V D\nRECEIVED(3)  R IY0 - S IY1 V D\nRECEIVER  R AH0 - S IY1 - V ER0\nRECEIVER(2)  R IH0 - S IY1 - V ER0\nRECEIVER(3)  R IY0 - S IY1 - V ER0\nRECEIVERS  R AH0 - S IY1 - V ER0 Z\nRECEIVERS(2)  R IH0 - S IY1 - V ER0 Z\nRECEIVERS(3)  R IY0 - S IY1 - V ER0 Z\nRECEIVERSHIP  R IH0 - S IY1 - V ER0 - SH IH2 P\nRECEIVERSHIP(2)  R IY0 - S IY1 - V ER0 - SH IH2 P\nRECEIVERSHIPS  R IH0 - S IY1 - V ER0 - SH IH2 P S\nRECEIVES  R AH0 - S IY1 V Z\nRECEIVES(2)  R IH0 - S IY1 V Z\nRECEIVES(3)  R IY0 - S IY1 V Z\nRECEIVING  R AH0 - S IY1 - V IH0 NG\nRECEIVING(2)  R IH0 - S IY1 - V IH0 NG\nRECEIVING(3)  R IY0 - S IY1 - V IH0 NG\nRECENT  R IY1 - S AH0 N T\nRECENTLY  R IY1 - S AH0 N T - L IY0\nRECENTLY(2)  R IY1 - S AH0 N - L IY0\nRECEPTACLE  R AH0 - S EH1 P - T AH0 - K AH0 L\nRECEPTACLES  R IH0 - S EH1 P - T IH0 - K AH0 L Z\nRECEPTECH  R IY1 - S EH2 P - T EH1 K\nRECEPTION  R IH0 - S EH1 P - SH AH0 N\nRECEPTION(2)  R IY0 - S EH1 P - SH AH0 N\nRECEPTIONIST  R IH0 - S EH1 P - SH AH0 - N IH0 S T\nRECEPTIONIST(2)  R IY0 - S EH1 P - SH AH0 - N IH0 S T\nRECEPTIONISTS  R IH0 - S EH1 P - SH AH0 - N IH0 S T S\nRECEPTIONISTS(2)  R IY0 - S EH1 P - SH AH0 - N IH0 S T S\nRECEPTIONISTS(3)  R IH0 - S EH1 P - SH AH0 - N IH0 S S\nRECEPTIONISTS(4)  R IY0 - S EH1 P - SH AH0 - N IH0 S S\nRECEPTIONISTS(5)  R IH0 - S EH1 P - SH AH0 - N IH0 S\nRECEPTIONISTS(6)  R IY0 - S EH1 P - SH AH0 - N IH0 S\nRECEPTIONS  R IH0 - S EH1 P - SH AH0 N Z\nRECEPTIVE  R IH0 - S EH1 P - T IH0 V\nRECEPTIVE(2)  R IY0 - S EH1 P - T IH0 V\nRECEPTIVITY  R IY1 - S EH2 P - T IH1 - V IH0 - T IY0\nRECEPTOR  R IY0 - S EH1 P - T ER0\nRECEPTORS  R AH0 - S EH1 P - T ER0 Z\nRECERTIFICATION  R IY2 - S ER0 - T AH0 - F AH0 - K EY1 - SH AH0 N\nRECERTIFIED  R IY0 - S ER1 - T IH0 - F AY0 D\nRECERTIFY  R IY0 - S ER1 - T AH0 - F AY0\nRECERTIFYING  R IY0 - S ER1 - T AH0 - F AY0 - IH0 NG\nRECESS  R IH0 - S EH1 S\nRECESS(2)  R IY1 - S EH0 S\nRECESSED  R IH0 - S EH1 S T\nRECESSED(2)  R IY1 - S EH1 S T\nRECESSES  R IY1 - S EH0 - S AH0 Z\nRECESSING  R IY2 - S EH1 - S IH0 NG\nRECESSION  R IH0 - S EH1 - SH AH0 N\nRECESSION'S  R IY2 - S EH1 - SH AH0 N Z\nRECESSION(2)  R IY2 - S EH1 - SH AH0 N\nRECESSIONARY  R IY0 - S EH1 - SH AH0 N - EH2 - R IY0\nRECESSIONS  R IH0 - S EH1 - SH AH0 N Z\nRECESSIVE  R AH0 - S EH1 - S IH0 V\nRECH  R EH1 K\nRECHARGE  R IY0 - CH AA1 R JH\nRECHARGEABLE  R IY0 - CH AA1 R - JH AH0 - B AH0 L\nRECHARGED  R IY0 - CH AA1 R JH D\nRECHARGING  R IY0 - CH AA1 R - JH IH0 NG\nRECHECK  R IY1 - CH EH1 K\nRECHECKED  R IY0 - CH EH1 K T\nRECHRISTEN  R IY1 - K R IH1 - S AH0 N\nRECHRISTENED  R IY1 - K R IH1 - S AH0 N D\nRECHT  R EH1 K T\nRECIDIVISM  R AH0 - S IH1 - D IH0 - V IH2 - Z AH0 M\nRECIDIVIST  R AH0 - S IH1 - D IH0 - V IH2 S T\nRECIDIVISTS  R AH0 - S IH1 - D IH0 - V IH2 S T S\nRECIDIVISTS(2)  R AH0 - S IH1 - D IH0 - V IH2 S S\nRECIDIVISTS(3)  R AH0 - S IH1 - D IH0 - V IH2 S\nRECINE  R EH0 - CH IY1 - N IY0\nRECIO  R EH1 - CH IY0 - OW0\nRECIPE  R EH1 - S AH0 - P IY0\nRECIPE'S  R EH1 - S AH0 - P IY0 Z\nRECIPES  R EH1 - S AH0 - P IY0 Z\nRECIPIENT  R AH0 - S IH1 - P IY0 - AH0 N T\nRECIPIENT'S  R IH0 - S IH1 - P IY0 - AH0 N T S\nRECIPIENT(2)  R IH0 - S IH1 - P IY0 - AH0 N T\nRECIPIENTS  R IH0 - S IH1 - P IY0 - AH0 N T S\nRECIPIENTS'  R IH0 - S IH1 - P IY0 - AH0 N T S\nRECIPROCAL  R IH0 - S IH1 - P R AH0 - K AH0 L\nRECIPROCANT  R IY0 - S IH1 - P R AH0 - K AH0 N T\nRECIPROCANTS  R IY0 - S IH1 - P R AH0 - K AH0 N T S\nRECIPROCATE  R IH0 - S IH1 - P R AH0 - K EY2 T\nRECIPROCATED  R IH0 - S IH1 - P R AH0 - K EY2 - T IH0 D\nRECIPROCATING  R IH0 - S IH1 - P R AH0 - K EY2 - T IH0 NG\nRECIPROCITY  R EH2 - S IH0 - P R AA1 - S IH0 - T IY0\nRECISION  R IH0 - S IH1 - ZH AH0 N\nRECISIONS  R IH0 - S IH1 - ZH AH0 N Z\nRECISSION  R AH0 - S IH1 - SH AH0 N\nRECITAL  R AH0 - S AY1 - T AH0 L\nRECITALS  R IH0 - S AY1 - T AH0 L Z\nRECITATION  R EH2 - S AH0 - T EY1 - SH AH0 N\nRECITATIONS  R EH2 - S IH0 - T EY1 - SH AH0 N Z\nRECITATIVES  R EH2 - S AH0 - T AH0 - T IY1 V Z\nRECITE  R AH0 - S AY1 T\nRECITED  R AH0 - S AY1 - T AH0 D\nRECITES  R IY0 - S AY1 T S\nRECITING  R IY0 - S AY1 - T IH0 NG\nRECK  R EH1 K\nRECKARD  R EH1 - K ER0 D\nRECKER  R EH1 - K ER0\nRECKITT  R EH1 - K IH0 T\nRECKLESS  R EH1 K - L AH0 S\nRECKLESSLY  R EH1 K - L AH0 S - L IY0\nRECKLESSNESS  R EH1 K - L AH0 S - N AH0 S\nRECKNER  R EH1 K - N ER0\nRECKON  R EH1 - K AH0 N\nRECKONED  R EH1 - K AH0 N D\nRECKONING  R EH1 - K AH0 - N IH0 NG\nRECKONING(2)  R EH1 K - N IH0 NG\nRECKONS  R EH1 - K AH0 N Z\nRECKTENWALD  R IH0 K - T EH1 - N W AH0 L D\nRECLAIM  R IY0 - K L EY1 M\nRECLAIMED  R IY0 - K L EY1 M D\nRECLAIMER  R IY0 - K L EY1 - M ER0\nRECLAIMER'S  R IY0 - K L EY1 - M ER0 Z\nRECLAIMING  R IY0 - K L EY1 - M IH0 NG\nRECLAMATION  R EH2 - K L AH0 - M EY1 - SH AH0 N\nRECLASSIFICATION  R IY0 - K L AE2 - S AH0 - F AH0 - K EY1 - SH AH0 N\nRECLASSIFIED  R IY0 - K L AE1 - S AH0 - F AY2 D\nRECLASSIFY  R IY0 - K L AE1 - S IH0 - F AY2\nRECLASSIFYING  R IY0 - K L AE1 - S IH0 - F AY2 - IH0 NG\nRECLINER  R IH0 - K L AY1 - N ER0\nRECLINING  R IH0 - K L AY1 - N IH0 NG\nRECLINING(2)  R IY0 - K L AY1 - N IH0 NG\nRECLUSE  R IH0 - K L UW1 S\nRECLUSIVE  R IH0 - K L UW1 - S IH0 V\nRECLUSIVE(2)  R IY0 - K L UW1 - S IH0 V\nRECO  R IY1 - K OW0\nRECO(2)  R EH1 - K OW0\nRECOGNITION  R EH2 - K AH0 G - N IH1 - SH AH0 N\nRECOGNITION'S  R EH2 - K IH0 G - N IH1 - SH AH0 N Z\nRECOGNITION(2)  R EH2 - K IH0 G - N IH1 - SH AH0 N\nRECOGNIZABLE  R EH2 - K AH0 G - N AY1 - Z AH0 - B AH0 L\nRECOGNIZABLY  R EH1 - K AH0 G - N AY2 - Z AH0 - B L IY0\nRECOGNIZANCE  R IH0 - K AA1 - N AH0 - Z AH0 N S\nRECOGNIZE  R EH1 - K AH0 G - N AY2 Z\nRECOGNIZED  R EH1 - K AH0 G - N AY2 Z D\nRECOGNIZES  R EH1 - K AH0 G - N AY2 - Z AH0 Z\nRECOGNIZES(2)  R EH1 - K AH0 G - N AY2 - Z IH0 Z\nRECOGNIZING  R EH1 - K AH0 G - N AY2 - Z IH0 NG\nRECOIL  R IY0 - K OY1 L\nRECOILED  R IY0 - K OY1 L D\nRECOILS  R IY0 - K OY1 L Z\nRECOLLECT  R EH2 - K AH0 - L EH1 K T\nRECOLLECT(2)  R IY2 - K AH0 - L EH1 K T\nRECOLLECTED  R EH2 - K AH0 - L EH1 K - T IH0 D\nRECOLLECTED(2)  R IY2 - K AH0 - L EH1 K - T IH0 D\nRECOLLECTING  R EH2 - K AH0 - L EH1 K - T IH0 NG\nRECOLLECTING(2)  R IY2 - K AH0 - L EH1 K - T IH0 NG\nRECOLLECTION  R EH2 - K AH0 - L EH1 K - SH AH0 N\nRECOLLECTIONS  R EH2 - K AH0 - L EH1 K - SH AH0 N Z\nRECOLLECTS  R EH2 - K AH0 - L EH1 K T S\nRECOLLECTS(2)  R IY2 - K AH0 - L EH1 K T S\nRECOMBINANT  R IH0 - K AA1 M - B IH0 - N AH0 N T\nRECOMBINE  R IY2 - K AH0 M - B AY1 N\nRECOMMEND  R EH2 - K AH0 - M EH1 N D\nRECOMMENDATION  R EH2 - K AH0 - M AH0 N - D EY1 - SH AH0 N\nRECOMMENDATIONS  R EH2 - K AH0 - M AH0 N - D EY1 - SH AH0 N Z\nRECOMMENDED  R EH2 - K AH0 - M EH1 N - D AH0 D\nRECOMMENDED(2)  R EH2 - K AH0 - M EH1 N - D IH0 D\nRECOMMENDING  R EH2 - K AH0 - M EH1 N - D IH0 NG\nRECOMMENDS  R EH2 - K AH0 - M EH1 N D Z\nRECOMMIT  R IH0 - K AA1 - M IH0 T\nRECOMMIT(2)  R IY2 - K AH0 - M IH1 T\nRECOMMITED  R IH0 - K AA1 - M IH2 - T IH0 D\nRECOMMITED(2)  R IY2 - K AH0 - M IH1 - T IH0 D\nRECOMPENSE  R EH1 - K AH0 M - P EH2 N S\nRECON  R IY1 - K AO0 N\nRECONCILE  R EH1 - K AH0 N - S AY2 L\nRECONCILED  R EH1 - K AH0 N - S AY2 L D\nRECONCILES  R EH1 - K AH0 N - S AY2 L Z\nRECONCILIATION  R EH2 - K AH0 N - S IH2 - L IY0 - EY1 - SH AH0 N\nRECONCILIATIONS  R EH2 - K AH0 N - S IH2 - L IY0 - EY1 - SH AH0 N Z\nRECONCILING  R EH1 - K AH0 N - S AY2 - L IH0 NG\nRECONDITE  R EH1 - K AH0 N - D AY2 T\nRECONDITION  R IY2 - K AH0 N - D IH1 - SH AH0 N\nRECONDITIONED  R IY2 - K AH0 N - D IH1 - SH AH0 N D\nRECONDITIONING  R IY2 - K AH0 N - D IH1 - SH AH0 N - IH0 NG\nRECONDITIONING(2)  R IY2 - K AH0 N - D IH1 SH - N IH0 NG\nRECONFIGURATION  R IY0 - K AH0 N - F IH2 - G Y ER0 - EY1 - SH AH0 N\nRECONFIGURE  R IY2 - K AH0 N - F IH1 - G Y ER0\nRECONFIGURED  R IY2 - K AH0 N - F IH1 - G Y ER0 D\nRECONFIRM  R IY2 - K AH0 N - F ER1 M\nRECONFIRMATION  R IY2 - K AA2 N - F ER0 - M EY1 - SH AH0 N\nRECONFIRMED  R IY2 - K AH0 N - F ER1 M D\nRECONNAISSANCE  R IY0 - K AA1 - N AH0 - S AH0 N S\nRECONNECT  R IY0 - K AH0 - N EH1 K T\nRECONNECTED  R IY0 - K AH0 - N EH1 K - T IH0 D\nRECONNECTING  R IY0 - K AH0 - N EH1 K - T IH0 NG\nRECONNECTS  R IY0 - K AH0 - N EH1 K T S\nRECONQUER  R IY0 - K AO1 NG - K ER0\nRECONQUERED  R IY0 - K AO1 NG - K ER0 D\nRECONSIDER  R IY2 - K AH0 N - S IH1 - D ER0\nRECONSIDERATION  R IY0 - K AH0 N - S IH2 - D ER0 - EY1 - SH AH0 N\nRECONSIDERED  R IY2 - K AH0 N - S IH1 - D ER0 D\nRECONSIDERING  R IY2 - K AH0 N - S IH1 - D ER0 - IH0 NG\nRECONSTITUTE  R IY0 - K AA1 N - S T AH0 - T UW2 T\nRECONSTITUTED  R IY0 - K AA1 N - S T AH0 - T UW2 - T IH0 D\nRECONSTITUTING  R IY0 - K AA1 N - S T IH0 - T UW2 - T IH0 NG\nRECONSTRUCT  R IY2 - K AH0 N - S T R AH1 K T\nRECONSTRUCTED  R IY2 - K AH0 N - S T R AH1 K - T IH0 D\nRECONSTRUCTING  R IY2 - K AH0 N - S T R AH1 K - T IH0 NG\nRECONSTRUCTION  R IY2 - K AH0 N - S T R AH1 K - SH AH0 N\nRECONSTRUCTIONS  R IY2 - K AH0 N - S T R AH1 K - SH AH0 N Z\nRECONSTRUCTIVE  R IY2 - K AH0 N - S T R AH1 K - T IH0 V\nRECONVENE  R IY0 - K AH0 N - V IY1 N\nRECONVENED  R IY0 - K AH0 N - V IY1 N D\nRECONVENES  R IY0 - K AH0 N - V IY1 N Z\nRECORD  R AH0 - K AO1 R D\nRECORD'S  R EH1 - K ER0 D Z\nRECORD(2)  R EH1 - K ER0 D\nRECORD(3)  R IH0 - K AO1 R D\nRECORDABLE  R IH0 - K AO1 R - D AH0 - B AH0 L\nRECORDED  R AH0 - K AO1 R - D AH0 D\nRECORDED(2)  R IH0 - K AO1 R - D IH0 D\nRECORDER  R IH0 - K AO1 R - D ER0\nRECORDER(2)  R IY0 - K AO1 R - D ER0\nRECORDERS  R IH0 - K AO1 R - D ER0 Z\nRECORDERS(2)  R IY0 - K AO1 R - D ER0 Z\nRECORDING  R AH0 - K AO1 R - D IH0 NG\nRECORDING(2)  R IH0 - K AO1 R - D IH0 NG\nRECORDINGS  R IH0 - K AO1 R - D IH0 NG Z\nRECORDKEEPING  R EH1 - K ER0 D - K IY2 - P IH0 NG\nRECORDS  R AH0 - K AO1 R D Z\nRECORDS'  R EH1 - K ER0 D Z\nRECORDS(2)  R EH1 - K ER0 D Z\nRECORDS(3)  R IH0 - K AO1 R D Z\nRECORE  R EH0 - K AO1 - R IY0\nRECOTON  R IH0 - K AO1 - T IH0 N\nRECOUNT  R IH0 - K AW1 N T\nRECOUNT(2)  R IY2 - K AW1 N T\nRECOUNTED  R IH0 - K AW1 N - T IH0 D\nRECOUNTED(2)  R IY2 - K AW1 N - T IH0 D\nRECOUNTING  R IH0 - K AW1 N - T IH0 NG\nRECOUNTING(2)  R IY2 - K AW1 N - T IH0 NG\nRECOUNTS  R IY2 - K AW1 N T S\nRECOUNTS(2)  R IH0 - K AW1 N T S\nRECOUP  R IH0 - K UW1 P\nRECOUPED  R IH0 - K UW1 P T\nRECOUPING  R IH0 - K UW1 - P IH0 NG\nRECOUPS  R IH0 - K UW1 P S\nRECOURSE  R IY1 - K AO0 R S\nRECOVER  R IH0 - K AH1 - V ER0\nRECOVERABLE  R IH0 - K AH1 - V ER0 - AH0 - B AH0 L\nRECOVERED  R AH0 - K AH1 - V ER0 D\nRECOVERED(2)  R IH0 - K AH1 - V ER0 D\nRECOVERIES  R IH0 - K AH1 - V ER0 - IY0 Z\nRECOVERING  R AH0 - K AH1 - V ER0 - IH0 NG\nRECOVERING(2)  R IH0 - K AH1 - V ER0 - IH0 NG\nRECOVERS  R IH0 - K AH1 - V ER0 Z\nRECOVERY  R IH0 - K AH1 - V R IY0\nRECOVERY'S  R IH0 - K AH1 - V ER0 - IY0 Z\nRECOVERY'S(2)  R IH0 - K AH1 - V R IY0 Z\nRECOVERY(2)  R IH0 - K AH1 - V ER0 - IY0\nRECREATE  R EH1 - K R IY0 - EY2 T\nRECREATE(2)  R IY0 - K R IY0 - EY1 T\nRECREATED  R EH1 - K R IY0 - EY2 - T IH0 D\nRECREATED(2)  R IY0 - K R IY0 - EY1 - T IH0 D\nRECREATES  R EH1 - K R IY0 - EY2 T S\nRECREATES(2)  R IY0 - K R IY0 - EY1 T S\nRECREATING  R EH1 - K R IY0 - EY2 - T IH0 NG\nRECREATING(2)  R IY0 - K R IY0 - EY1 - T IH0 NG\nRECREATION  R EH2 - K R IY0 - EY1 - SH AH0 N\nRECREATIONAL  R EH2 - K R IY0 - EY1 - SH AH0 N - AH0 L\nRECRIMINATE  R IH0 - K R IH2 - M IH0 - N EY1 T\nRECRIMINATION  R IH0 - K R IH2 - M IH0 - N EY1 - SH AH0 N\nRECRIMINATIONS  R IH0 - K R IH2 - M IH0 - N EY1 - SH AH0 N Z\nRECROSS  R IY0 - K R AO1 S\nRECRUIT  R AH0 - K R UW1 T\nRECRUIT'S  R IY0 - K R UW1 T S\nRECRUIT(2)  R IH0 - K R UW1 T\nRECRUIT(3)  R IY0 - K R UW1 T\nRECRUITED  R IH0 - K R UW1 - T IH0 D\nRECRUITED(2)  R IY0 - K R UW1 - T IH0 D\nRECRUITER  R IH0 - K R UW1 - T ER0\nRECRUITERS  R IH0 - K R UW1 - T ER0 Z\nRECRUITING  R AH0 - K R UW1 - T IH0 NG\nRECRUITING(2)  R IH0 - K R UW1 - T IH0 NG\nRECRUITING(3)  R IY0 - K R UW1 - T IH0 NG\nRECRUITMENT  R AH0 - K R UW1 T - M AH0 N T\nRECRUITMENT(2)  R IH0 - K R UW1 T - M AH0 N T\nRECRUITMENT(3)  R IY0 - K R UW1 T - M AH0 N T\nRECRUITS  R AH0 - K R UW1 T S\nRECRUITS(2)  R IH0 - K R UW1 T S\nRECRUITS(3)  R IY0 - K R UW1 T S\nRECTAL  R EH1 K - T AH0 L\nRECTANGLE  R EH1 K - T AE0 NG - G AH0 L\nRECTANGLES  R EH1 K - T AE2 NG - G AH0 L Z\nRECTANGULAR  R EH0 K - T AE1 NG - G Y AH0 - L ER0\nRECTENWALD  R EH1 K - T IH0 N - W AO0 L D\nRECTIFICATION  R EH2 K - T AH0 - F AH0 - K EY1 - SH AH0 N\nRECTIFIED  R EH1 K - T AH0 - F AY2 D\nRECTIFIER  R EH1 K - T AH0 - F AY2 - ER0\nRECTIFIERS  R EH1 K - T AH0 - F AY2 - ER0 Z\nRECTIFY  R EH1 K - T AH0 - F AY2\nRECTIFYING  R EH1 K - T AH0 - F AY2 - IH0 NG\nRECTITUDE  R EH1 K - T IH0 - T UW2 D\nRECTOR  R EH1 K - T ER0\nRECTORY  R EH1 K - T ER0 - IY0\nRECTUM  R EH1 K - T AH0 M\nRECUPERATE  R IH0 - K UW1 - P ER0 - EY2 T\nRECUPERATING  R IH0 - K UW1 - P ER0 - EY2 - T IH0 NG\nRECUPERATING(2)  R IY0 - K UW1 - P ER0 - EY2 - T IH0 NG\nRECUPERATION  R IH0 - K UW2 - P ER0 - EY1 - SH AH0 N\nRECUPERATIVE  R IH0 - K UW1 - P ER0 - AH0 - T IH0 V\nRECUPERO  R EY0 - K UW0 - P EH1 - R OW0\nRECUR  R IH0 - K ER1\nRECUR(2)  R IY0 - K ER1\nRECURRED  R IY0 - K ER1 D\nRECURRENCE  R IH0 - K ER1 - AH0 N S\nRECURRENCE(2)  R IY0 - K ER1 - AH0 N S\nRECURRENT  R IH0 - K ER1 - AH0 N T\nRECURRENT(2)  R IY0 - K ER1 - AH0 N T\nRECURRING  R IH0 - K ER1 - IH0 NG\nRECURRING(2)  R IY0 - K ER1 - IH0 NG\nRECUSAL  R IH0 - K Y UW1 - Z AH0 L\nRECUSE  R IH2 - K Y UW1 Z\nRECUSED  R IH0 - K Y UW1 Z D\nRECUSING  R IH2 - K Y UW1 - Z IH0 NG\nRECYCLABLE  R IY0 - S AY1 - K L AH0 - B AH0 L\nRECYCLABLES  R IY0 - S AY1 - K L AH0 - B AH0 L Z\nRECYCLE  R IY0 - S AY1 - K AH0 L\nRECYCLED  R IY0 - S AY1 - K AH0 L D\nRECYCLER  R IY0 - S AY1 - K L ER0\nRECYCLERS  R IY0 - S AY1 - K L ER0 Z\nRECYCLES  R IY0 - S AY1 - K AH0 L Z\nRECYCLING  R IY0 - S AY1 - K AH0 L - IH0 NG\nRECYCLING(2)  R IY0 - S AY1 - K L IH0 NG\nRECZEK  R EH1 - CH EH0 K\nRED  R EH1 D\nRED-HANDED  R EH1 D - HH AE1 N - D AH0 D\nRED-HANDED(2)  R EH1 D - HH AE1 N - D IH0 D\nREDA  R EY1 - D AH0\nREDACT  R IH0 - D AE1 K T\nREDACTED  R IH0 - D AE1 K - T IH0 D\nREDACTES  R IH0 - D AE1 K T S\nREDACTING  R IH0 - D AE1 K - T IH0 NG\nREDBIRD  R EH1 D - B ER2 D\nREDBOOK  R EH1 D - B UH2 K\nREDBUD  R EH1 D - B AH2 D\nREDBURN  R EH1 D - B ER2 N\nREDCAY  R EH1 D - K EY0\nREDCO  R EH1 D - K OW0\nREDCOAT  R EH1 D - K OW2 T\nREDCOATS  R EH1 D - K OW2 T S\nREDD  R EH1 D\nREDDELL  R EH1 - D AH0 L\nREDDEN  R EH1 - D AH0 N\nREDDER  R EH1 - D ER0\nREDDEST  R EH1 - D IH0 S T\nREDDICK  R EH1 - D IH0 K\nREDDIG  R EH1 - D IH0 G\nREDDIN  R EH1 - D IH0 N\nREDDING  R EH1 - D IH0 NG\nREDDINGER  R EH1 - D IH0 - NG ER0\nREDDINGTON  R EH1 - D IH0 NG - T AH0 N\nREDDISH  R EH1 - D IH0 SH\nREDDITT  R EH1 - D IH0 T\nREDDOCH  R EH1 - D AH0 K\nREDDY  R EH1 - D IY0\nREDECORATE  R IY0 - D EH1 - K ER0 - EY2 T\nREDECORATED  R IY0 - D EH1 - K ER0 - EY2 - T IH0 D\nREDECORATING  R IY0 - D EH1 - K ER0 - EY2 - T IH0 NG\nREDECORATION  R IY2 - D EH0 - K ER0 - EY1 - SH AH0 N\nREDEDICATE  R IY2 - D EH1 - D AH0 - K EY2 T\nREDEDICATION  R IY0 - D EH2 - D AH0 - K EY1 - SH AH0 N\nREDEEM  R IH0 - D IY1 M\nREDEEMABLE  R IH0 - D IY1 - M AH0 - B AH0 L\nREDEEMED  R IH0 - D IY1 M D\nREDEEMING  R IH0 - D IY1 - M IH0 NG\nREDEEMS  R AH0 - D IY1 M Z\nREDEFINE  R IY0 - D IH0 - F AY1 N\nREDEFINED  R IY0 - D IH0 - F AY1 N D\nREDEFINES  R IY0 - D IH0 - F AY1 N Z\nREDEFINING  R IY0 - D IH0 - F AY1 - N IH0 NG\nREDEFINITION  R IY0 - D EH2 - F AH0 - N IH1 - SH AH0 N\nREDEKER  R EH1 - D IH0 - K ER0\nREDEL  R EH1 - D AH0 L\nREDELL  R EH1 - D AH0 L\nREDEMPTION  R IH0 - D EH1 M P - SH AH0 N\nREDEMPTION(2)  R IH0 - D EH1 M - SH AH0 N\nREDEMPTIONS  R IH0 - D EH1 M P - SH AH0 N Z\nREDEMPTIONS(2)  R IH0 - D EH1 M - SH AH0 N Z\nREDEMPTIVE  R IH0 - D EH1 M P - T IH0 V\nREDEMPTIVE(2)  R IH0 - D EH1 M - T IH0 V\nREDENBAUGH  R EH1 - D IH0 N - B AW0\nREDENIUS  R EH1 - D IY0 - N IY0 - IH0 S\nREDEPLOY  R IY2 - D IH0 - P L OY1\nREDEPLOYED  R IY2 - D IH0 - P L OY1 D\nREDEPLOYING  R IY2 - D IH0 - P L OY1 - IH0 NG\nREDEPLOYMENT  R IY2 - D IH0 - P L OY1 - M AH0 N T\nREDEPLOYMENTS  R IY2 - D IH0 - P L OY1 - M AH0 N T S\nREDEPOSITION  R IY0 - D EH2 - P AH0 - Z IH1 - SH AH0 N\nREDER  R EH1 - D ER0\nREDESIGN  R IY2 - D IH0 Z - AY1 N\nREDESIGNED  R IY2 - D IH0 Z - AY1 N D\nREDESIGNING  R IY2 - D IH0 - Z AY1 - N IH0 NG\nREDEVELOP  R IY0 - D IH0 V - EH1 - L AH0 P\nREDEVELOPMENT  R IY2 - D IH0 V - EH1 - L AH0 P - M AH0 N T\nREDFEARN  R EH1 D - F ER0 N\nREDFERN  R EH1 D - F ER2 N\nREDFIELD  R EH1 D - F IY2 L D\nREDFISH  R EH1 D - F IH2 SH\nREDFORD  R EH1 D - F ER0 D\nREDFORD'S  R EH1 D - F ER0 D Z\nREDGRAVE  R EH1 D - G R EY2 V\nREDHANDED  R EH1 D - HH AE2 N - D IH0 D\nREDHEAD  R EH1 D - HH EH2 D\nREDHEADED  R EH1 D - HH EH2 - D IH0 D\nREDHEADS  R EH1 D - HH EH1 D Z\nREDI  R EH1 - D IY0\nREDIAL  R IY0 - D AY1 - AH0 L\nREDIC  R EH1 - D IH0 K\nREDICK  R EH1 - D IH0 K\nREDICKER  R IY0 - D IH1 - K ER0\nREDID  R IY0 - D IH1 D\nREDIFER  R EH1 - D IH0 - F ER0\nREDIFER(2)  R IY0 - D AH0 - F ER1\nREDIFFUSION  R IY0 - D IH0 - F Y UW1 - ZH AH0 N\nREDIGER  R EH1 - D IH0 - G ER0\nREDIKER  R EH1 - D IH0 - K ER0\nREDING  R IY1 - D IH0 NG\nREDINGER  R EH1 - D IH0 - NG ER0\nREDINGTON  R EH1 - D IH0 NG - T AH0 N\nREDIRECT  R IY2 - D ER0 - EH1 K T\nREDIRECTED  R IY2 - D ER0 - EH1 K - T IH0 D\nREDIRECTING  R IY2 - D ER0 - EH1 K - T IH0 NG\nREDIRECTION  R IY2 - D ER0 - EH1 K - SH AH0 N\nREDISCOVER  R IY0 - D IH0 S - K AH1 - V ER0\nREDISCOVERED  R IY0 - D IH0 S - K AH1 - V ER0 D\nREDISCOVERING  R IY0 - D IH0 S - K AH1 - V ER0 - IH0 NG\nREDISCOVERY  R IY0 - D IH0 S - K AH1 - V R IY0\nREDISH  R EH1 - D IH0 SH\nREDISPLAY  R IY0 - D IH0 S - P L EY1\nREDISTRIBUTE  R IY2 - D IH0 S - T R IH1 - B Y UW0 T\nREDISTRIBUTED  R IY2 - D IH0 S - T R IH1 - B Y UW0 - T IH0 D\nREDISTRIBUTED(2)  R IY2 - D IH0 S - T R IH1 - B Y AH0 - T IH0 D\nREDISTRIBUTING  R IY2 - D IH0 S - T R IH1 - B Y UW0 - T IH0 NG\nREDISTRIBUTING(2)  R IY2 - D IH0 S - T R IH1 - B Y AH0 - T IH0 NG\nREDISTRIBUTION  R IY2 - D IH0 S - T R AH0 - B Y UW1 - SH AH0 N\nREDISTRIBUTIVE  R IY0 - D IH0 S - T R IH1 - B Y UW0 - T IH0 V\nREDISTRIBUTIVE(2)  R IY0 - D IH0 S - T R IH1 - B Y AH0 - T IH0 V\nREDISTRICTING  R IY0 - D IH1 S - T R IH0 K - T IH0 NG\nREDKEN  R EH1 D - K AH0 N\nREDLAND  R EH1 D - L AH0 N D\nREDLER  R EH1 D - L ER0\nREDLEY  R EH1 D - L IY0\nREDLICH  R EH1 D - L IH0 K\nREDLIN  R EH1 D - L IH0 N\nREDLINGER  R EH1 - D AH0 L - IH0 - NG ER0\nREDLINGER(2)  R EH1 D - L IH0 - NG ER0\nREDLINING  R EH1 D - L AY2 - N IH0 NG\nREDMAN  R EH1 D - M AE2 N\nREDMANN  R EH1 D - M AH0 N\nREDMON  R EH1 D - M AH0 N\nREDMOND  R EH1 D - M AH0 N D\nREDMUND  R EH1 D - M AH0 N D\nREDNECK  R EH1 D - N EH2 K\nREDNECKS  R EH1 D - N EH2 K S\nREDNER  R EH1 D - N ER0\nREDNESS  R EH1 D - N AH0 S\nREDNOUR  R EH0 D - N UH1 R\nREDO  R IY0 - D UW1\nREDOGLIA  R AH0 - D AA1 G - L IY0 - AH0\nREDOING  R IY0 - D UW1 - IH0 NG\nREDONDO  R IH0 - D AA1 N - D OW0\nREDONE  R IY0 - D AH1 N\nREDOUBLE  R IY0 - D AH1 - B AH0 L\nREDOUBLED  R IY0 - D AH1 - B AH0 L D\nREDOUBLING  R IY0 - D AH1 - B AH0 L - IH0 NG\nREDOUBLING(2)  R IY0 - D AH1 - B L IH0 NG\nREDOUBT  R AH0 - D AW1 T\nREDOUBTABLE  R AH0 - D AW1 - T AH0 - B AH0 L\nREDOUND  R IH0 - D AW1 N D\nREDPATH  R EH1 D - P AE2 TH\nREDPOLL  R EH1 D - P OW2 L\nREDPOLLS  R EH1 D - P OW2 L Z\nREDRAFT  R IY0 - D R AE1 F T\nREDRAFTED  R IY0 - D R AE1 F - T IH0 D\nREDRAW  R IY0 - D R AO1\nREDRAWING  R IY0 - D R AO1 - IH0 NG\nREDRAWN  R IY0 - D R AO1 N\nREDRESS  R IH0 - D R EH1 S\nREDRESS(2)  R IY1 - D R EH0 S\nREDRESSING  R IY0 - D R EH1 - S IH0 NG\nREDS  R EH1 D Z\nREDS'  R EH1 D Z\nREDSHAW  R EH1 D - SH AO2\nREDSKIN  R EH1 D - S K IH2 N\nREDSKINS  R EH1 D - S K IH2 N Z\nREDSKINS'  R EH1 D - S K IH2 N Z\nREDSTONE  R EH1 D - S T OW2 N\nREDSTONE'S  R EH1 D - S T OW2 N Z\nREDUCE  R AH0 - D UW1 S\nREDUCE(2)  R IH0 - D UW1 S\nREDUCE(3)  R IY0 - D UW1 S\nREDUCED  R AH0 - D UW1 S T\nREDUCED(2)  R IH0 - D UW1 S T\nREDUCED(3)  R IY0 - D UW1 S T\nREDUCES  R AH0 - D UW1 - S AH0 Z\nREDUCES(2)  R IH0 - D UW1 - S IH0 Z\nREDUCES(3)  R IY0 - D UW1 - S IH0 Z\nREDUCIBLE  R AH0 - D UW1 - S AH0 - B AH0 L\nREDUCING  R AH0 - D UW1 - S IH0 NG\nREDUCING(2)  R IH0 - D UW1 - S IH0 NG\nREDUCING(3)  R IY0 - D UW1 - S IH0 NG\nREDUCTION  R AH0 - D AH1 K - SH AH0 N\nREDUCTION(2)  R IY0 - D AH1 K - SH AH0 N\nREDUCTIONS  R IY0 - D AH1 K - SH AH0 N Z\nREDUNDANCIES  R IH0 - D AH1 N - D AH0 N - S IY0 Z\nREDUNDANCY  R IH0 - D AH1 N - D AH0 N - S IY0\nREDUNDANT  R IH0 - D AH1 N - D AH0 N T\nREDUS  R IY1 - D AH0 S\nREDWALD  R EH1 - D W AH0 L D\nREDWINE  R EH1 D - W AY2 N\nREDWOOD  R EH1 D - W UH2 D\nREDWOODS  R EH1 D - W UH2 D Z\nREE  R IY1\nREEB  R IY1 B\nREEB'S  R IY1 B Z\nREEBOK  R IY1 - B AA0 K\nREEBOK'S  R IY1 - B AA0 K S\nREEBOKS  R IY1 - B AA0 K S\nREEBS  R IY1 B Z\nREEBS'  R IY1 B Z\nREECE  R IY1 S\nREECHE  R IY1 CH\nREECK  R IY1 K\nREED  R IY1 D\nREED'S  R IY1 D Z\nREEDER  R IY1 - D ER0\nREEDERS  R IY1 - D ER0 Z\nREEDS  R IY1 D Z\nREEDUCATE  R IY0 - EH1 - JH AH0 - K EY2 T\nREEDUCATION  R IY0 - EH2 - D Y AH0 - K EY2 - SH AH0 N\nREEDUCATION(2)  R IY0 - EH2 - JH AH0 - K EY2 - SH AH0 N\nREEDY  R IY1 - D IY0\nREEF  R IY1 F\nREEFS  R IY1 F S\nREEG  R IY1 G\nREEH  R IY1\nREEK  R IY1 K\nREEKING  R IY1 - K IH0 NG\nREEKS  R IY1 K S\nREEL  R IY1 L\nREELECT  R IY0 - IH0 - L EH1 K T\nREELECTED  R IY0 - IH0 - L EH1 K - T AH0 D\nREELECTED(2)  R IY0 - IH0 - L EH1 K - T IH0 D\nREELECTING  R IY0 - IH0 - L EH1 K - T IH0 NG\nREELECTION  R IY0 - IH0 - L EH1 K - SH AH0 N\nREELED  R IY1 L D\nREELING  R IY1 - L IH0 NG\nREELS  R IY1 L Z\nREEMERGE  R IY0 - IH0 - M ER1 JH\nREEMERGED  R IY0 - IH0 - M ER1 JH D\nREEMERGENCE  R IY0 - IH0 - M ER1 - JH AH0 N S\nREEMPHASIZE  R IY0 - EH1 M - F AH0 - S AY2 Z\nREEMPLOYMENT  R IY0 - IH0 M - P L OY1 - M AH0 N T\nREEN  R IY1 N\nREENACT  R IY0 - IH0 - N AE1 K T\nREENACTED  R IY0 - IH0 - N AE1 K - T IH0 D\nREENACTMENT  R IY0 - IH0 - N AE1 K T - M AH0 N T\nREENACTMENTS  R IY0 - IH0 - N AE1 K T - M AH0 N T S\nREENACTS  R IY0 - IH0 - N AE1 K T S\nREENGINEER  R IY0 - EH2 N - JH AH0 - N IH1 R\nREENGINEERING  R IY0 - EH2 N - JH AH0 - N IH1 - R IH0 NG\nREENTER  R IY0 - IH1 N - T ER0\nREENTERED  R IY0 - IH1 N - T ER0 D\nREENTERING  R IY0 - IH1 N - T ER0 - IH0 NG\nREENTRY  R IY0 - IH1 N - T R IY0\nREENTS  R IY1 N T S\nREEP  R IY1 P\nREES  R IY1 Z\nREESE  R IY1 S\nREESE'S  R IY1 - S IH0 Z\nREESER  R IY1 - S ER0\nREESMAN  R IY1 S - M AH0 N\nREESOR  R IY1 - S ER0\nREESTABLISH  R IY0 - IH0 - S T AE1 - B L IH0 SH\nREESTABLISHED  R IY2 - IH0 - S T AE1 - B L IH0 SH T\nREESTABLISHING  R IY0 - IH0 - S T AE1 - B L IH0 - SH IH0 NG\nREETZ  R IY1 T S\nREEVALUATE  R IY2 - IH0 - V AE1 - L UW0 - EY2 T\nREEVALUATED  R IY0 - IH0 - V AE1 L - Y UW0 - EY2 - T IH0 D\nREEVALUATING  R IY0 - IH0 - V AE1 L - Y UW0 - EY2 - T IH0 NG\nREEVALUATION  R IY0 - IH0 - V AE2 L - Y UW0 - EY1 - SH AH0 N\nREEVE  R IY1 V\nREEVER  R IY1 - V ER0\nREEVES  R IY1 V Z\nREEVES'  R IY1 V Z\nREEVES'S  R IY1 V - Z IH0 Z\nREEXAMINATION  R IY0 - IH0 G - Z AE2 - M AH0 - N EY1 - SH AH0 N\nREEXAMINE  R IY0 - EH0 G - Z AE1 - M AH0 N\nREEXAMINED  R IY0 - IH0 G - Z AE1 - M AH0 N D\nREEXAMINING  R IY0 - IH0 G - Z AE1 - M AH0 - N IH0 NG\nREEXPORT  R IY0 - EH1 K - S P AO2 R T\nREEXPORTS  R IY0 - EH1 K - S P AO2 R T S\nREF  R EH1 F\nREFAAT  R AH0 - F AA1 T\nREFAH  R AH0 - F AA1\nREFCO  R EH1 - F K OW0\nREFCORP  R EH1 F - K AO0 R P\nREFENES  R EH1 - F IH0 - N EH2 S\nREFENES(2)  R IH0 - F IY1 N Z\nREFER  R AH0 - F ER1\nREFER(2)  R IH0 - F ER1\nREFEREE  R EH2 - F ER0 - IY1\nREFEREE'S  R EH2 - F ER0 - IY1 Z\nREFEREES  R EH2 - F ER0 - IY1 Z\nREFERENCE  R EH1 - F ER0 - AH0 N S\nREFERENCE(2)  R EH1 - F R AH0 N S\nREFERENCED  R EH1 - F ER0 - AH0 N S T\nREFERENCED(2)  R EH1 - F R AH0 N S T\nREFERENCES  R EH1 - F ER0 - AH0 N - S IH0 Z\nREFERENCES(2)  R EH1 - F R AH0 N - S IH0 Z\nREFERENCING  R EH1 - F ER0 - AH0 N - S IH0 NG\nREFERENCING(2)  R EH1 - F R AH0 N - S IH0 NG\nREFERENDA  R EH2 - F ER0 - EH1 N - D AH0\nREFERENDUM  R EH2 - F ER0 - EH1 N - D AH0 M\nREFERENDUMS  R EH2 - F ER0 - EH1 N - D AH0 M Z\nREFERING  R IH0 - F ER1 - IH0 NG\nREFERRAL  R IH0 - F ER1 - AH0 L\nREFERRALS  R IH0 - F ER1 - AH0 L Z\nREFERRED  R AH0 - F ER1 D\nREFERRED(2)  R IH0 - F ER1 D\nREFERRING  R IH0 - F ER1 - IH0 NG\nREFERS  R AH0 - F ER1 Z\nREFERS(2)  R IH0 - F ER1 Z\nREFF  R EH1 F\nREFFETT  R EH1 - F IH0 T\nREFFITT  R EH1 - F IH0 T\nREFFNER  R EH1 F - N ER0\nREFILE  R IY0 - F AY1 L\nREFILED  R IY0 - F AY1 L D\nREFILL  R IY1 - F IH0 L\nREFILL(2)  R IY0 - F IH1 L\nREFILLED  R IY0 - F IH1 L D\nREFILLS  R IY0 - F IH1 L Z\nREFILLS(2)  R IY1 - F IH0 L Z\nREFINANCE  R IY2 - F AH0 - N AE1 N S\nREFINANCE(2)  R IY1 - F AY1 - N AE2 N S\nREFINANCED  R IY2 - F AH0 - N AE1 N S T\nREFINANCED(2)  R IY1 - F AY1 - N AE2 N S T\nREFINANCES  R IY2 - F AH0 - N AE1 N - S IH0 Z\nREFINANCES(2)  R IY1 - F AY1 - N AE2 N - S IH0 Z\nREFINANCING  R IY2 - F AH0 - N AE1 N - S IH0 NG\nREFINANCING(2)  R IY1 - F AY1 - N AE2 N - S IH0 NG\nREFINANCINGS  R IY2 - F AH0 - N AE1 N - S IH0 NG Z\nREFINANCINGS(2)  R IY1 - F AY1 - N AE2 N - S IH0 NG Z\nREFINE  R AH0 - F AY1 N\nREFINE(2)  R IH0 - F AY1 N\nREFINED  R AH0 - F AY1 N D\nREFINED(2)  R IH0 - F AY1 N D\nREFINEMENT  R AH0 - F AY1 N - M AH0 N T\nREFINEMENTS  R IH0 - F AY1 N - M AH0 N T S\nREFINER  R IH0 - F AY1 - N ER0\nREFINER'S  R IH0 - F AY1 - N ER0 Z\nREFINERIES  R IH0 - F AY1 - N ER0 - IY0 Z\nREFINERS  R IH0 - F AY1 - N ER0 Z\nREFINERS'  R IH0 - F AY1 - N ER0 Z\nREFINERY  R IH0 - F AY1 - N ER0 - IY0\nREFINERY'S  R IH0 - F AY1 - N ER0 - IY0 Z\nREFINES  R IH0 - F AY1 N Z\nREFINING  R AH0 - F AY1 - N IH0 NG\nREFINING(2)  R IH0 - F AY1 - N IH0 NG\nREFINISH  R IY0 - F IH1 - N IH0 SH\nREFINISHED  R IY0 - F IH1 - N IH0 SH T\nREFINISHING  R IY0 - F IH1 - N IH0 - SH IH0 NG\nREFIT  R IY0 - F IH1 T\nREFITTED  R IY0 - F IH1 - T IH0 D\nREFITTING  R IY0 - F IH1 - T IH0 NG\nREFLAG  R IY0 - F L AE1 G\nREFLAGGED  R IY0 - F L AE1 G D\nREFLAGGING  R IY0 - F L AE1 - G IH0 NG\nREFLATE  R IY0 - F L EY1 T\nREFLATION  R IY0 - F L EY1 - SH AH0 N\nREFLECT  R AH0 - F L EH1 K T\nREFLECT(2)  R IH0 - F L EH1 K T\nREFLECTED  R AH0 - F L EH1 K - T AH0 D\nREFLECTED(2)  R IH0 - F L EH1 K - T IH0 D\nREFLECTING  R AH0 - F L EH1 K - T IH0 NG\nREFLECTING(2)  R IH0 - F L EH1 K - T IH0 NG\nREFLECTION  R AH0 - F L EH1 K - SH AH0 N\nREFLECTION(2)  R IH0 - F L EH1 K - SH AH0 N\nREFLECTIONS  R IH0 - F L EH1 K - SH AH0 N Z\nREFLECTIVE  R IH0 - F L EH1 K - T IH0 V\nREFLECTONE  R IY0 - F L EH1 K - T OW2 N\nREFLECTONE'S  R IY0 - F L EH1 K - T OW2 N Z\nREFLECTS  R IH0 - F L EH1 K T S\nREFLECTS(2)  R IH0 - F L EH1 K S\nREFLEX  R IY1 - F L EH0 K S\nREFLEXES  R IY1 - F L EH0 K - S AH0 Z\nREFLEXIVE  R AH0 - F L EH1 K - S IH0 V\nREFLEXIVELY  R IY0 - F L EH1 K - S IH0 V - L IY0\nREFLEXIVITY  R IY2 - F L EH2 K - S IH1 - V IH0 - T IY0\nREFOCUS  R IY0 - F OW1 - K AH0 S\nREFOCUSED  R IY0 - F OW1 - K AH0 S T\nREFOCUSES  R IY0 - F OW1 - K AH0 - S IH0 Z\nREFOCUSING  R IY0 - F OW1 - K AH0 - S IH0 NG\nREFOREST  R IY0 - F AO1 - R AH0 S T\nREFORESTATION  R IY2 - F AO0 - R AH0 - S T EY1 - SH AH0 N\nREFORM  R AH0 - F AO1 R M\nREFORM(2)  R IH0 - F AO1 R M\nREFORMA  R IH0 - F AO1 R - M AH0\nREFORMATION  R EH2 - F ER0 - M EY1 - SH AH0 N\nREFORMATORIES  R IH0 - F AO1 R - M AH0 - T AO2 - R IY0 Z\nREFORMATORY  R IH0 - F AO1 R - M AH0 - T AO2 - R IY0\nREFORMED  R IH0 - F AO1 R M D\nREFORMER  R IH0 - F AO1 R - M ER0\nREFORMERS  R IH0 - F AO1 R - M ER0 Z\nREFORMERS'  R IH0 - F AO1 R - M ER0 Z\nREFORMING  R IH0 - F AO1 R - M IH0 NG\nREFORMIST  R IH0 - F AO1 R - M IH0 S T\nREFORMISTS  R IH0 - F AO1 R - M IH0 S T S\nREFORMISTS(2)  R IH0 - F AO1 R - M IH0 S S\nREFORMS  R AH0 - F AO1 R M Z\nREFORMS(2)  R IH0 - F AO1 R M Z\nREFORMULATE  R IY0 - F AO1 R - M Y AH0 - L EY2 T\nREFORMULATED  R IY0 - F AO1 R - M Y AH0 - L EY2 - T IH0 D\nREFRACTIVE  R AH0 - F R AE1 K - T IH0 V\nREFRACTOR  R AH0 - F R AE1 K - T ER0\nREFRACTORIES  R IH0 - F R AE1 K - T ER0 - IY0 Z\nREFRACTORS  R AH0 - F R AE1 K - T ER0 Z\nREFRACTORY  R AH0 - F R AE1 K - T ER0 - IY0\nREFRAIN  R IH0 - F R EY1 N\nREFRAINED  R IH0 - F R EY1 N D\nREFRAINING  R IH0 - F R EY1 - N IH0 NG\nREFRAINS  R IH0 - F R EY1 N Z\nREFRESH  R IH0 - F R EH1 SH\nREFRESHED  R IY0 - F R EH1 SH T\nREFRESHER  R IH0 - F R EH1 - SH ER0\nREFRESHES  R IH0 - F R EH1 - SH IH0 Z\nREFRESHING  R IH0 - F R EH1 - SH IH0 NG\nREFRESHINGLY  R IY0 - F R EH1 - SH IH0 NG - L IY0\nREFRESHMENT  R AH0 - F R EH1 SH - M AH0 N T\nREFRESHMENTS  R AH0 - F R EH1 SH - M AH0 N T S\nREFRIGERANT  R IH0 - F R IH1 - JH ER0 - AH0 N T\nREFRIGERANTS  R IH0 - F R IH1 - JH ER0 - AH0 N T S\nREFRIGERATE  R IH0 - F R IH1 - JH ER0 - EY2 T\nREFRIGERATED  R IH0 - F R IH1 - JH ER0 - EY2 - T IH0 D\nREFRIGERATION  R IH0 - F R IH2 - JH ER0 - EY1 - SH AH0 N\nREFRIGERATOR  R AH0 - F R IH1 - JH ER0 - EY2 - T ER0\nREFRIGERATOR(2)  R IH0 - F R IH1 - JH ER0 - EY2 - T ER0\nREFRIGERATORS  R IH0 - F R IH1 - JH ER0 - EY2 - T ER0 Z\nREFSNES  R EH1 F S - N IY0 Z\nREFUEL  R IY0 - F Y UW1 - AH0 L\nREFUELED  R IY0 - F Y UW1 - AH0 L D\nREFUELING  R IY0 - F Y UW1 - AH0 L - IH0 NG\nREFUELING(2)  R IY0 - F Y UW1 - L IH0 NG\nREFUGE  R EH1 - F Y UW0 JH\nREFUGE'S  R EH1 - F Y UW0 - JH IH0 Z\nREFUGEE  R EH1 - F Y UW0 - JH IY0\nREFUGEES  R EH1 - F Y UW2 - JH IY0 Z\nREFUGEES'  R EH1 - F Y UW2 - JH IY0 Z\nREFUGES  R EH1 - F Y UW0 - JH IH0 Z\nREFUND  R IH0 - F AH1 N D\nREFUND(2)  R IY1 - F AH2 N D\nREFUNDABLE  R IH0 - F AH1 N - D AH0 - B AH0 L\nREFUNDED  R IH0 - F AH1 N - D IH0 D\nREFUNDING  R IH0 - F AH1 N - D IH0 NG\nREFUNDINGS  R IY1 - F AH2 N - D IH0 NG Z\nREFUNDS  R IH0 - F AH1 N D Z\nREFUNDS(2)  R IY1 - F AH2 N D Z\nREFURBISH  R IY0 - F ER1 - B IH0 SH\nREFURBISHED  R IY0 - F ER1 - B IH0 SH T\nREFURBISHING  R IY0 - F ER1 - B IH0 - SH IH0 NG\nREFURBISHMENT  R IY0 - F ER1 - B IH0 SH - M AH0 N T\nREFUSAL  R AH0 - F Y UW1 - Z AH0 L\nREFUSAL(2)  R IH0 - F Y UW1 - Z AH0 L\nREFUSALS  R IH0 - F Y UW1 - Z AH0 L Z\nREFUSE  R AH0 - F Y UW1 Z\nREFUSE(2)  R EH1 - F Y UW2 Z\nREFUSE(3)  R IH0 - F Y UW1 Z\nREFUSED  R AH0 - F Y UW1 Z D\nREFUSED(2)  R IH0 - F Y UW1 Z D\nREFUSENIK  R IH0 - F Y UW1 Z - N IH0 K\nREFUSENIKS  R IH0 - F Y UW1 Z - N IH0 K S\nREFUSES  R AH0 - F Y UW1 - Z AH0 Z\nREFUSES(2)  R IH0 - F Y UW1 - Z IH0 Z\nREFUSING  R AH0 - F Y UW1 - Z IH0 NG\nREFUSING(2)  R IH0 - F Y UW1 - Z IH0 NG\nREFUTATION  R EH2 - F Y UW0 - T EY1 - SH AH0 N\nREFUTE  R IH0 - F Y UW1 T\nREFUTED  R IH0 - F Y UW1 - T IH0 D\nREFUTES  R IH0 - F Y UW1 T S\nREFUTING  R IH0 - F Y UW1 - T IH0 NG\nREG  R EH1 G\nREGA  R IY1 - G AH0\nREGAIN  R IH0 - G EY1 N\nREGAINED  R IY0 - G EY1 N D\nREGAINING  R IH0 - G EY1 - N IH0 NG\nREGAINS  R IY0 - G EY1 N Z\nREGAL  R IY1 - G AH0 L\nREGALADO  R EY0 - G AA0 - L AA1 - D OW0\nREGALED  R IH0 - G EY1 L D\nREGALIA  R IH0 - G EY1 - L Y AH0\nREGALING  R IH0 - G EY1 - L IH0 NG\nREGALLY  R IY1 - G AH0 - L IY0\nREGAN  R IY1 - G AH0 N\nREGAN'S  R IY1 - G AH0 N Z\nREGARD  R AH0 - G AA1 R D\nREGARD(2)  R IH0 - G AA1 R D\nREGARDED  R AH0 - G AA1 R - D AH0 D\nREGARDED(2)  R IH0 - G AA1 R - D IH0 D\nREGARDING  R AH0 - G AA1 R - D IH0 NG\nREGARDING(2)  R IH0 - G AA1 R - D IH0 NG\nREGARDLESS  R AH0 - G AA1 R D - L AH0 S\nREGARDS  R IH0 - G AA1 R D Z\nREGAS  R IY1 - G AH0 Z\nREGATTA  R IH0 - G AA1 - T AH0\nREGATTAS  R AH0 - G AA1 - T AH0 Z\nREGEHR  R EH1 - G IH0 R\nREGEL  R EH1 - G AH0 L\nREGEN  R EH1 - G AH0 N\nREGENCY  R IY1 - JH AH0 N - S IY0\nREGENCY'S  R IY1 - JH AH0 N - S IY0 Z\nREGENERATE  R IY0 - JH EH1 - N ER0 - EY2 T\nREGENERATED  R IY0 - JH EH1 - N ER0 - EY2 - T IH0 D\nREGENERATING  R IY0 - JH EH1 - N ER0 - EY2 - T IH0 NG\nREGENERATION  R IY0 - JH EH1 - N ER0 - EY1 - SH AH0 N\nREGENERON  R IY0 - JH EH1 - N ER0 - AO2 N\nREGENSBURG  R IY1 - G AH0 N Z - B ER0 G\nREGENSTEINER  R EH1 - G AH0 N - S T AY2 - N ER0\nREGENT  R IY1 - JH AH0 N T\nREGENTS  R IY1 - JH AH0 N T S\nREGER  R IY1 - G ER0\nREGESTER  R EH1 - JH IH0 - S T ER0\nREGGAE  R EH1 - G EY2\nREGGIE  R EH1 - JH IY0\nREGGIO  R EH1 - JH IY0 - OW0\nREGGY  R EH1 - G IY0\nREGIE  R EH1 - G IY0\nREGIER  R IY1 - G IY0 - ER0\nREGIME  R AH0 - ZH IY1 M\nREGIME'S  R EY0 - ZH IY1 M Z\nREGIME(2)  R EY0 - ZH IY1 M\nREGIMEN  R EH1 - JH AH0 - M AH0 N\nREGIMENS  R EH1 - JH AH0 - M AH0 N Z\nREGIMENT  R EH1 - JH AH0 - M AH0 N T\nREGIMENTAL  R EH2 - JH AH0 - M EH1 N - T AH0 L\nREGIMENTATION  R EH2 - JH AH0 - M EH0 N - T EY1 - SH AH0 N\nREGIMENTED  R EH1 - JH AH0 - M EH2 N - T IH0 D\nREGIMENTS  R EH1 - JH AH0 - M AH0 N T S\nREGIMES  R AH0 - ZH IY1 M Z\nREGIMES(2)  R EY0 - ZH IY1 M Z\nREGINA  R IH0 - JH IY1 - N AH0\nREGINALD  R EH1 - JH AH0 - N AH0 L D\nREGINALD'S  R EH1 - JH AH0 - N AH0 L D Z\nREGION  R IY1 - JH AH0 N\nREGION'S  R IY1 - JH AH0 N Z\nREGIONAL  R IY1 - JH AH0 - N AH0 L\nREGIONALIZE  R IY1 - JH AH0 N - AH0 - L AY2 Z\nREGIONALIZED  R IY1 - JH AH0 N - AH0 - L AY2 Z D\nREGIONALLY  R IY1 - JH AH0 N - AH0 - L IY0\nREGIONALS  R IY1 - JH AH0 - N AH0 L Z\nREGIONS  R IY1 - JH AH0 N Z\nREGIS  R IY1 - JH IH0 S\nREGISTER  R EH1 - JH IH0 - S T ER0\nREGISTER'S  R EH1 - JH IH0 - S T ER0 Z\nREGISTERED  R EH1 - JH IH0 - S T ER0 D\nREGISTERING  R EH1 - JH IH0 - S T ER0 - IH0 NG\nREGISTERING(2)  R EH1 - JH IH0 - S T R IH0 NG\nREGISTERS  R EH1 - JH AH0 - S T ER0 Z\nREGISTERS(2)  R EH1 - JH IH0 - S T ER0 Z\nREGISTRANT  R EH1 - JH AH0 S - T R AH0 N T\nREGISTRANTS  R EH1 - JH AH0 S - T R AH0 N T S\nREGISTRAR  R EH1 - JH IH0 - S T R AA2 R\nREGISTRARS  R EH1 - JH IH0 - S T R AA2 R Z\nREGISTRATION  R EH2 - JH IH0 S - T R EY1 - SH AH0 N\nREGISTRATION(2)  R EH2 - JH IH0 S - T R EY1 - SH AH0 N\nREGISTRATIONS  R EH2 - JH IH0 S - T R EY1 - SH AH0 N Z\nREGISTRIES  R EH1 - JH IH0 S - T R IY0 Z\nREGISTRY  R EH1 - JH IH0 S - T R IY0\nREGNER  R EH1 G - N ER0\nREGNERY  R EH1 G - N ER0 - IY0\nREGNIER  R EH1 G - N IY0 - ER0\nREGO  R EH1 - G OW0\nREGRESS  R IY1 - G R EH0 S\nREGRESS(2)  R IH0 - G R EH1 S\nREGRESSION  R AH0 - G R EH1 - SH AH0 N\nREGRESSIONS  R AH0 - G R EH1 - SH AH0 N Z\nREGRESSIVE  R AH0 - G R EH1 - S IH0 V\nREGRET  R AH0 - G R EH1 T\nREGRET(2)  R IH0 - G R EH1 T\nREGRETFUL  R IH0 - G R EH1 T - F AH0 L\nREGRETFULLY  R IH0 - G R EH1 T - F AH0 - L IY0\nREGRETS  R IH0 - G R EH1 T S\nREGRETTABLE  R IH0 - G R EH1 - T AH0 - B AH0 L\nREGRETTABLY  R IH0 - G R EH1 - T AH0 - B L IY0\nREGRETTED  R IH0 - G R EH1 - T IH0 D\nREGRETTING  R IH0 - G R EH1 - T IH0 NG\nREGROUP  R IY0 - G R UW1 P\nREGROUPED  R IY0 - G R UW1 P T\nREGROUPING  R IY0 - G R UW1 - P IH0 NG\nREGS  R EH1 G Z\nREGULA  R EH0 - G UW1 - L AH0\nREGULAR  R EH1 - G Y AH0 - L ER0\nREGULAR(2)  R EY1 - G Y AH0 - L ER0\nREGULARITY  R EH2 - G Y AH0 - L EH1 - R AH0 - T IY0\nREGULARLY  R EH1 - G Y AH0 - L ER0 - L IY0\nREGULARS  R EH1 - G Y AH0 - L ER0 Z\nREGULATE  R EH1 - G Y AH0 - L EY2 T\nREGULATED  R EH1 - G Y AH0 - L EY2 - T AH0 D\nREGULATED(2)  R EH1 - G Y AH0 - L EY2 - T IH0 D\nREGULATES  R EH1 - G Y AH0 - L EY2 T S\nREGULATING  R EH1 - G Y AH0 - L EY2 - T IH0 NG\nREGULATION  R EH2 - G Y AH0 - L EY1 - SH AH0 N\nREGULATIONS  R EH2 - G Y AH0 - L EY1 - SH AH0 N Z\nREGULATIVE  R EH1 - G Y AH0 - L EY2 - T IH0 V\nREGULATOR  R EH1 - G Y AH0 - L EY2 - T ER0\nREGULATOR'S  R EH1 - G Y AH0 - L EY2 - T ER0 Z\nREGULATORS  R EH1 - G Y AH0 - L EY2 - T ER0 Z\nREGULATORS'  R EH1 - G Y AH0 - L EY2 - T ER0 Z\nREGULATORY  R EH1 - G Y AH0 - L AH0 - T AO2 - R IY0\nREGWAN  R EH1 - G W AA0 N\nREH  R EH1\nREHA  R IY1 - HH AH0\nREHAB  R IY0 - HH AE0 B\nREHABILITATE  R IY2 HH - AH0 - B IH1 - L AH0 - T EY2 T\nREHABILITATE(2)  R IY2 - AH0 - B IH1 - L AH0 - T EY2 T\nREHABILITATED  R IY2 HH - AH0 - B IH1 - L AH0 - T EY2 - T IH0 D\nREHABILITATED(2)  R IY2 - AH0 - B IH1 - L AH0 - T EY2 - T IH0 D\nREHABILITATING  R IY2 HH - AH0 - B IH1 - L AH0 - T EY2 - T IH0 NG\nREHABILITATING(2)  R IY2 - AH0 - B IH1 - L AH0 - T EY2 - T IH0 NG\nREHABILITATION  R IY2 HH - AH0 - B IH2 - L AH0 - T EY1 - SH AH0 N\nREHABILITATION(2)  R IY2 - AH0 - B IH2 - L AH0 - T EY1 - SH AH0 N\nREHABILITATIONS  R IY2 HH - AH0 - B IH2 - L AH0 - T EY1 - SH AH0 N Z\nREHABILITATIONS(2)  R IY2 - AH0 - B IH2 - L AH0 - T EY1 - SH AH0 N Z\nREHABILITATIVE  R IY2 HH - AH0 - B IH1 - L AH0 - T EY2 - T IH0 V\nREHABILITATIVE(2)  R IY2 - AH0 - B IH1 - L AH0 - T EY2 - T IH0 V\nREHABILITATOR  R IY2 HH - AH0 - B IH1 - L AH0 - T EY0 - T ER0\nREHABILITATORS  R IY2 HH - AH0 - B IH1 - L AH0 - T EY0 - T ER0 Z\nREHABILITY  R IY2 HH - AH0 - B IH1 - L AH0 - T IY0\nREHABILITY(2)  R IY2 - AH0 - B IH1 - L AH0 - T IY0\nREHAK  R EH1 - HH AH0 K\nREHASH  R IY0 - HH AE1 SH\nREHASHING  R IY0 - HH AE1 - SH IH0 NG\nREHBEIN  R EH1 - B AY0 N\nREHBEIN(2)  R EH1 - B IY0 N\nREHBERG  R EH1 - B ER0 G\nREHBERGER  R EH1 - B ER0 - G ER0\nREHDER  R EH1 - D ER0\nREHEAR  R IY0 - HH IH1 R\nREHEARING  R IY0 - HH IH1 - R IH0 NG\nREHEARINGS  R IY0 - HH IH1 - R IH0 NG Z\nREHEARSAL  R IH0 - HH ER1 - S AH0 L\nREHEARSAL(2)  R IY0 - HH ER1 - S AH0 L\nREHEARSALS  R IH0 - HH ER1 - S AH0 L Z\nREHEARSE  R IY0 - HH ER1 S\nREHEARSED  R IY0 - HH ER1 S T\nREHEARSES  R IY0 - HH ER1 - S IH0 Z\nREHEARSING  R IH0 - HH ER1 - S IH0 NG\nREHER  R EH1 R\nREHFELD  R EH1 - F EH2 L D\nREHFELDT  R EH1 - F EH2 L T\nREHG  R EH1 JH\nREHIRE  R IY0 - HH AY1 R\nREHIRED  R IY0 - HH AY1 - ER0 D\nREHIRING  R IY0 - HH AY1 - R IH0 NG\nREHKOPF  R EH1 - K AO0 P F\nREHKOPF(2)  R EH1 - K AO0 F\nREHLING  R EH1 - L IH0 NG\nREHM  R EH1 M\nREHMAN  R EH1 - M AH0 N\nREHMANN  R EH1 - M AH0 N\nREHMER  R EH1 - M ER0\nREHN  R EH1 N\nREHNQUIST  R EH1 N - K W IH2 S T\nREHOR  R EH1 - HH ER0\nREHRIG  R EH1 - R IH0 G\nREHYDRATE  R IY0 - HH AY1 - D R EY0 T\nREHYDRATION  R IY2 - HH AY0 - D R EY1 - SH AH0 N\nREIBEL  R AY1 - B AH0 L\nREIBER  R AY1 - B ER0\nREICH  R AY1 K\nREICH'S  R AY1 K S\nREICHARD  R AY1 - K ER0 D\nREICHARDT  R AY1 - K AA0 R T\nREICHART  R IY1 - IH0 K - HH AA0 R T\nREICHE  R AY1 K\nREICHEL  R AY1 - K AH0 L\nREICHELDERFER  R AY1 - K IH0 L - D ER0 - F ER0\nREICHELT  R AY1 - K IH0 L T\nREICHENBACH  R AY1 - K AH0 N - B AA2 K\nREICHENBERG  R AY1 - K AH0 N - B ER0 G\nREICHENBERGER  R AY1 - K AH0 N - B ER0 - G ER0\nREICHER  R AY1 - K ER0\nREICHERT  R AY1 - K ER0 T\nREICHHOLD  R AY1 K - HH OW2 L D\nREICHHOLD'S  R AY1 K - HH OW2 L D Z\nREICHHOLD'S(2)  R AY1 - K OW2 L D Z\nREICHHOLD(2)  R AY1 - K OW2 L D\nREICHL  R AY1 - K AH0 L\nREICHLE  R AY1 - K AH0 L\nREICHLER  R AY1 - K L ER0\nREICHLEY  R AY1 K - L IY0\nREICHLIN  R AY1 - K L IH0 N\nREICHLING  R AY1 - K AH0 L - IH0 NG\nREICHLING(2)  R AY1 - K L IH0 NG\nREICHMAN  R AY1 K - M AH0 N\nREICHMANN  R AY1 K - M AH0 N\nREICHMANNS  R AY1 K - M AH0 N Z\nREICHMUTH  R AY1 K - M UW2 TH\nREICHOW  R AY1 - K OW0\nREICHSTUHL  R AY1 K - S T UW0 L\nREICHWEIN  R AY1 - K W AY2 N\nREICK  R IY1 K\nREICKS  R AY1 K S\nREID  R IY1 D\nREID'S  R IY1 D Z\nREID-MILLER  R IY1 D - M IH1 - L ER0\nREIDEL  R AY1 - D AH0 L\nREIDENBACH  R AY1 - D IH0 N - B AA0 K\nREIDER  R IY1 - D ER0\nREIDERS  R IY1 - D ER0 Z\nREIDERS'  R IY1 - D ER0 Z\nREIDINGER  R AY1 - D IH0 - NG ER0\nREIDT  R IY1 D T\nREIDY  R IY1 - D IY0\nREIER  R EY1 - ER0\nREIERSON  R AY1 - ER0 - S AH0 N\nREIF  R IY1 F\nREIFEL  R AY1 - F AH0 L\nREIFF  R IY1 F\nREIFSCHNEIDER  R AY1 F SH - N AY0 - D ER0\nREIFSNYDER  R AY1 F S - N AY0 - D ER0\nREIFSTECK  R AY1 F - S T IH0 K\nREIGEL  R AY1 - G AH0 L\nREIGER  R AY1 - G ER0\nREIGHARD  R AY1 G - HH ER0 D\nREIGLE  R IY1 - G AH0 L\nREIGN  R EY1 N\nREIGNED  R EY1 N D\nREIGNING  R EY1 - N IH0 NG\nREIGNITE  R IY0 - IH0 G - N AY1 T\nREIGNITED  R IY0 - IH0 G - N AY1 - T IH0 D\nREIGNITING  R IY0 - IH0 G - N AY1 - T IH0 NG\nREIGNS  R EY1 N Z\nREIHER  R AY1 - HH ER0\nREIHL  R AY1 L\nREIKI  R EY1 - K IY0\nREIL  R EY1 L\nREILAND  R AY1 - L AH0 N D\nREILEY  R EY1 - L IY0\nREILING  R AY1 - L IH0 NG\nREILLEY  R EY1 - L IY0\nREILLY  R AY1 - L IY0\nREILLY'S  R AY1 - L IY0 Z\nREILY  R IY1 - L IY0\nREIM  R IY1 M\nREIMAN  R AY1 - M AH0 N\nREIMANN  R AY1 - M AH0 N\nREIMBURSE  R IY2 - IH0 M - B ER1 S\nREIMBURSED  R IY2 - IH0 M - B ER1 S T\nREIMBURSEMENT  R IY2 - IH0 M - B ER1 S - M AH0 N T\nREIMBURSEMENTS  R IY2 - IH0 M - B ER1 S - M AH0 N T S\nREIMBURSES  R IY2 - IH0 M - B ER1 - S IH0 Z\nREIMBURSING  R IY2 - IH0 M - B ER1 - S IH0 NG\nREIMER  R AY1 - M ER0\nREIMERS  R AY1 - M ER0 Z\nREIMPOSE  R IY0 - IH0 M - P OW1 Z\nREIMPOSED  R IY0 - IH0 M - P OW1 Z D\nREIMPOSING  R IY0 - IH0 M - P OW1 - Z IH0 NG\nREIMPOSITION  R IY0 - IH0 M - P AH0 - Z IH1 - SH AH0 N\nREIN  R EY1 N\nREINA  R EY0 - IY1 - N AH0\nREINALDO  R EY2 - N AA1 L - D OW0\nREINARD  R AY1 - N ER0 D\nREINBOLD  R AY1 N - B OW2 L D\nREINBOLT  R AY1 N - B OW2 L T\nREINCARNATE  R IY2 - IH0 N - K AA1 R - N EY2 T\nREINCARNATED  R IY2 - IH0 N - K AA1 R - N EY2 - T IH0 D\nREINCARNATION  R IY0 - IH0 N - K AA0 R - N EY1 - SH AH0 N\nREINCKE  R AY1 NG - K IY0\nREINCORPORATE  R IY0 - IH0 N - K AO1 R - P ER0 - EY2 T\nREINCORPORATING  R IY0 - IH0 N - K AO1 R - P ER0 - EY2 - T IH0 NG\nREINCORPORATION  R IY0 - IH0 N - K AO2 R - P ER0 - EY1 - SH AH0 N\nREINDEER  R EY1 N - D IH2 R\nREINDEL  R AY1 N - D AH0 L\nREINDERS  R AY1 N - D ER0 Z\nREINDL  R AY1 N - D AH0 L\nREINDUSTRIALIZE  R IY0 - IH0 N - D AH1 S - T R IY0 - AH0 - L AY0 Z\nREINE  R EY1 N\nREINECK  R AY1 - N EH0 K\nREINECKE  R AY1 - N IH0 - K IY0\nREINED  R EY1 N D\nREINEKE  R AY1 - N IH0 K\nREINER  R AY1 - N ER0\nREINER'S  R AY1 - N ER0 Z\nREINERS  R AY1 - N ER0 Z\nREINERT  R AY1 - N ER0 T\nREINERTSEN  R AY1 - N ER0 T - S AH0 N\nREINERTSON  R AY1 - N ER0 T - S AH0 N\nREINES  R EY1 N Z\nREINEY  R EY1 - N IY0\nREINFORCE  R IY2 - IH0 N - F AO1 R S\nREINFORCED  R IY2 - IH0 N - F AO1 R S T\nREINFORCEMENT  R IY2 - IH0 N - F AO1 R S - M AH0 N T\nREINFORCEMENTS  R IY2 - IH0 N - F AO1 R S - M AH0 N T S\nREINFORCES  R IY2 - IH0 N - F AO1 R - S IH0 Z\nREINFORCING  R IY2 - IH0 N - F AO1 R - S IH0 NG\nREINGOLD  R AY1 NG - G OW0 L D\nREINHARD  R AY1 N - HH AA2 R D\nREINHARDT  R AY1 N - HH AA2 R T\nREINHART  R AY1 N - HH AA2 R T\nREINHART'S  R AY1 N - HH AA0 R T S\nREINHEIMER  R AY1 N - HH AY2 - M ER0\nREINHOLD  R AY1 N - HH OW0 L T\nREINHOLZ  R AY1 N - HH OW0 L Z\nREINIG  R AY1 - N IH0 G\nREINING  R EY1 - N IH0 NG\nREININGER  R AY1 - N IH0 - NG ER0\nREINITZ  R AY1 - N IH0 T S\nREINKE  R EY1 NG K\nREINKING  R AY1 NG - K IH0 NG\nREINOEHL  R AY1 - N OW0 L\nREINS  R EY1 N Z\nREINSCH  R AY1 N SH\nREINSDORF  R AY1 N Z - D AO2 R F\nREINSEL  R AY1 N - S AH0 L\nREINSPECT  R IY0 - IH0 N - S P EH1 K T\nREINSPECTION  R IY0 - IH0 N - S P EH1 K - SH AH0 N\nREINSPECTIONS  R IY0 - IH0 N - S P EH1 K - SH AH0 N S\nREINSTALL  R IY2 - IH0 N - S T AA1 L\nREINSTALLED  R IY2 - IH0 N - S T AA1 L D\nREINSTALLS  R IY2 - IH0 N - S T AA1 L Z\nREINSTATE  R IY2 - IH0 N - S T EY1 T\nREINSTATED  R IY2 - IH0 N - S T EY1 - T IH0 D\nREINSTATEMENT  R IY2 - IH0 N - S T EY1 T - M AH0 N T\nREINSTATING  R IY2 - IH0 N - S T EY1 - T IH0 NG\nREINSTEIN  R AY1 N - S T AY2 N\nREINSTITUTE  R IY0 - IH1 N - S T IH0 - T UW0 T\nREINSTITUTED  R IY0 - IH1 N - S T IH0 - T UW0 - T IH0 D\nREINSTITUTING  R IY0 - IH1 N - S T AH0 - T UW2 - T IH0 NG\nREINSURANCE  R IY2 - IH0 N - SH UH1 - R AH0 N S\nREINSURE  R IY2 - IH0 N - SH UH1 R\nREINSURED  R IY2 - IH0 N - SH UH1 R D\nREINSURER  R IY2 - IH0 N - SH UH1 - R ER0\nREINSURERS  R IY2 - IH0 N - SH UH1 - R ER0 Z\nREINTEGRATE  R IY0 - IH1 N - T AH0 - G R EY2 T\nREINTEGRATED  R IY0 - IH1 N - T AH0 - G R EY2 - T IH0 D\nREINTEGRATION  R IY0 - IH1 N - T AH0 - G R EY2 - SH AH0 N\nREINTERPRET  R IY2 - IH0 N - T ER1 - P R AH0 T\nREINTERPRETATION  R IY0 - IH0 N - T ER2 - P R AH0 - T EY1 - SH AH0 N\nREINTERPRETED  R IY0 - IH0 N - T ER1 - P R AH0 - T IH0 D\nREINTERPRETING  R IY0 - IH0 N - T ER1 - P R AH0 - T IH0 NG\nREINTRODUCE  R IY0 - IH0 N - T R AH0 - D UW1 S\nREINTRODUCED  R IY0 - IH0 N - T R AH0 - D UW1 S T\nREINTRODUCES  R IY0 - IH0 N - T R AH0 - D UW1 - S IH0 Z\nREINTRODUCING  R IY0 - IH0 N - T R AH0 - D UW1 - S IH0 NG\nREINTRODUCTION  R IY0 - IH0 N - T R AH0 - D AH1 K - SH AH0 N\nREINTS  R AY1 N T S\nREINVENT  R IY0 - IH0 N - V EH1 N T\nREINVENTED  R IY0 - IH0 N - V EH1 N - T IH0 D\nREINVENTING  R IY0 - IH0 N - V EH1 N - T IH0 NG\nREINVENTION  R IY0 - IH0 N - V EH1 N - SH AH0 N\nREINVEST  R IY2 - IH0 N - V EH1 S T\nREINVESTED  R IY2 - IH0 N - V EH1 - S T IH0 D\nREINVESTING  R IY2 - IH0 N - V EH1 - S T IH0 NG\nREINVESTMENT  R IY2 - IH0 N - V EH1 S T - M AH0 N T\nREINVESTMENT(2)  R IY2 - IH0 N - V EH1 S - M AH0 N T\nREINVESTS  R IY2 - IH0 N - V EH1 S T S\nREINVESTS(2)  R IY2 - IH0 N - V EH1 S S\nREINVESTS(3)  R IY2 - IH0 N - V EH1 S\nREINVIGORATE  R IY2 - IH0 N - V IH1 - G ER0 - EY2 T\nREINVIGORATED  R IY2 - IH0 N - V IH1 - G ER0 - EY2 - T IH0 D\nREINVIGORATING  R IY2 - IH0 N - V IH1 - G ER0 - EY2 - T IH0 NG\nREINVIGORATION  R IY0 - IH0 N - V IH2 - G ER0 - EY1 - SH AH0 N\nREINVITE  R IY2 - IH0 N - V AY1 T\nREINVITED  R IY2 - IH0 N - V AY1 - T IH0 D\nREINWALD  R AY1 N - W AO2 L D\nREIS  R IY1 Z\nREISCH  R AY1 SH\nREISCHAUER  R AY1 - SH AW0 R\nREISCHMAN  R AY1 SH - M AH0 N\nREISDORF  R AY1 S - D AO0 R F\nREISE  R IY1 S\nREISEN  R AY1 - S AH0 N\nREISENAUER  R AY1 - S IH0 - N AW0 - ER0\nREISER  R AY1 - S ER0\nREISERT  R AY1 - S ER0 T\nREISH  R IY1 - IH0 SH\nREISIG  R AY1 - S IH0 G\nREISING  R AY1 - S IH0 NG\nREISINGER  R AY1 - S IH0 N - JH ER0\nREISMAN  R AY1 S - M AH0 N\nREISNER  R AY1 S - N ER0\nREISS  R AY1 S\nREISSIG  R AY1 - S IH0 G\nREISSMAN  R AY1 S - M AH0 N\nREISSUE  R IY0 - IH1 - SH UW0\nREISSUED  R IY0 - IH1 - SH UW0 D\nREISSUING  R IY0 - IH1 - SH UW0 - IH0 NG\nREIST  R IY1 - IH0 S T\nREISTER  R IY1 - IH0 - S T ER0\nREISWIG  R AY1 S - W IH0 G\nREISZ  R AY1 SH\nREIT  R AY1 T\nREITAN  R AY1 - T AH0 N\nREITANO  R EY0 - IY0 - T AA1 - N OW0\nREITEN  R AY1 - T AH0 N\nREITER  R AY1 - T ER0\nREITERATE  R IY0 - IH1 - T ER0 - EY2 T\nREITERATED  R IY0 - IH1 - T ER0 - EY2 - T IH0 D\nREITERATES  R IY0 - IH1 - T ER0 - EY2 S\nREITERATING  R IY0 - IH1 - T ER0 - EY2 - T IH0 NG\nREITERATION  R IY0 - IH2 - T ER0 - EY1 - SH AH0 N\nREITH  R IY1 TH\nREITHER  R AY1 - DH ER0\nREITMAN  R AY1 T - M AH0 N\nREITMEIER  R AY1 T - M AY0 - ER0\nREITMEYER  R AY1 T - M AY0 - ER0\nREITS  R AY1 T S\nREITSMA  R AY1 T S - M AH0\nREITTER  R AY1 - T ER0\nREITZ  R AY1 T S\nREITZEL  R AY1 T - S AH0 L\nREITZES  R AY1 T - S IH0 Z\nREITZFELD  R IY2 T S - F EH0 L D\nREITZFELD(2)  R AY2 T S - F EH0 L D\nREJECT  R IH0 - JH EH1 K T\nREJECT(2)  R IY1 - JH EH0 K T\nREJECTED  R IH0 - JH EH1 K - T IH0 D\nREJECTED(2)  R IY0 - JH EH1 K - T AH0 D\nREJECTED(3)  R IY0 - JH EH1 K - T IH0 D\nREJECTING  R IH0 - JH EH1 K - T IH0 NG\nREJECTING(2)  R IY0 - JH EH1 K - T IH0 NG\nREJECTION  R IH0 - JH EH1 K - SH AH0 N\nREJECTION(2)  R IY0 - JH EH1 K - SH AH0 N\nREJECTIONIST  R IH0 - JH EH1 K - SH AH0 - N IH0 S T\nREJECTIONIST(2)  R IY0 - JH EH1 K - SH AH0 - N IH0 S T\nREJECTIONISTS  R IH0 - JH EH1 K - SH AH0 - N IH0 S T S\nREJECTIONISTS(2)  R IY0 - JH EH1 K - SH AH0 - N IH0 S T S\nREJECTIONS  R IH0 - JH EH1 K - SH AH0 N Z\nREJECTIONS(2)  R IY0 - JH EH1 K - SH AH0 N Z\nREJECTS  R IH0 - JH EH1 K T S\nREJECTS(2)  R IY1 - JH EH0 K T S\nREJECTS(3)  R IH0 - JH EH1 K S\nREJECTS(4)  R IY1 - JH EH0 K S\nREJIGGERING  R IY0 - JH IH1 - G ER0 - IH0 NG\nREJOICE  R IH0 - JH OY1 S\nREJOICED  R IH0 - JH OY1 S T\nREJOICING  R IH0 - JH OY1 - S IH0 NG\nREJOIN  R IY0 - JH OY1 N\nREJOINDER  R IH0 - JH OY1 N - D ER0\nREJOINDER(2)  R IY0 - JH OY1 N - D ER0\nREJOINED  R IY0 - JH OY1 N D\nREJOINING  R IY0 - JH OY1 - N IH0 NG\nREJOINS  R IY0 - JH OY1 N Z\nREJUVENATE  R IH0 - JH UW1 - V AH0 - N EY2 T\nREJUVENATED  R IH0 - JH UW1 - V AH0 - N EY2 - T IH0 D\nREJUVENATES  R IH0 - JH UW1 - V IH0 - N EY2 T S\nREJUVENATING  R IY0 - JH UW1 - V AH0 - N EY2 - T IH0 NG\nREJUVENATION  R IH0 - JH UW2 - V AH0 - N EY1 - SH AH0 N\nREKENTHALER  R EH1 - K AH0 N - T AA2 - L ER0\nREKENTHALER(2)  R EH1 - K AH0 N - TH AA2 - L ER0\nREKER  R IY1 - K ER0\nREKINDLE  R IY0 - K IH1 N - D AH0 L\nREKINDLED  R IY0 - K IH1 N - D AH0 L D\nREKINDLING  R IY0 - K IH1 N D - L IH0 NG\nRELABEL  R IY0 - L EY1 - B AH0 L\nRELAPSE  R IY0 - L AE1 P S\nRELAPSED  R IY0 - L AE1 P S T\nRELAPSES  R IY0 - L AE1 P - S IH0 Z\nRELAPSES(2)  R IH0 - L AE1 P - S IH0 Z\nRELAPSING  R IH0 - L AE1 P - S IH0 NG\nRELATE  R IH0 - L EY1 T\nRELATE(2)  R IY0 - L EY1 T\nRELATED  R IH0 - L EY1 - T IH0 D\nRELATED(2)  R IY0 - L EY1 - T AH0 D\nRELATED(3)  R IY0 - L EY1 - T IH0 D\nRELATES  R IH0 - L EY1 T S\nRELATES(2)  R IY0 - L EY1 T S\nRELATING  R IH0 - L EY1 - T IH0 NG\nRELATING(2)  R IY0 - L EY1 - T IH0 NG\nRELATION  R IY0 - L EY1 - SH AH0 N\nRELATIONAL  R IY0 - L EY1 - SH AH0 - N AH0 L\nRELATIONS  R IY0 - L EY1 - SH AH0 N Z\nRELATIONSHIP  R IY0 - L EY1 - SH AH0 N - SH IH2 P\nRELATIONSHIPS  R IY0 - L EY1 - SH AH0 N - SH IH2 P S\nRELATIVE  R EH1 - L AH0 - T IH0 V\nRELATIVE'S  R EH1 - L AH0 - T IH0 V Z\nRELATIVELY  R EH1 - L AH0 - T IH0 V - L IY0\nRELATIVES  R EH1 - L AH0 - T IH0 V Z\nRELATIVISM  R EH1 - L AH0 - T IH0 - V IH2 - Z AH0 M\nRELATIVISTIC  R EH2 - L AH0 - T IH0 - V IH1 - S T IH0 K\nRELATIVITY  R EH2 - L AH0 - T IH1 - V AH0 - T IY0\nRELAUNCH  R IY0 - L AO1 N CH\nRELAUNCHED  R IY0 - L AO1 N CH T\nRELAX  R IH0 - L AE1 K S\nRELAX(2)  R IY0 - L AE1 K S\nRELAXATION  R IY2 - L AE0 K - S EY1 - SH AH0 N\nRELAXED  R IH0 - L AE1 K S T\nRELAXED(2)  R IY0 - L AE1 K S T\nRELAXES  R IH0 - L AE1 K - S IH0 Z\nRELAXING  R IH0 - L AE1 K - S IH0 NG\nRELAXING(2)  R IY0 - L AE1 K - S IH0 NG\nRELAY  R IY1 - L EY2\nRELAYED  R IY1 - L EY2 D\nRELAYING  R IY1 - L EY2 - IH0 NG\nRELAYS  R IY1 - L EY2 Z\nRELEARN  R IY0 - L EH1 R N\nRELEARNING  R IY0 - L EH1 R - N IH0 NG\nRELEASE  R IY0 - L IY1 S\nRELEASED  R IY0 - L IY1 S T\nRELEASES  R IH0 - L IY1 - S IH0 Z\nRELEASING  R IY0 - L IY1 - S IH0 NG\nRELEFORD  R EH1 - L IH0 - F ER0 D\nRELEGATE  R EH1 - L AH0 - G EY2 T\nRELEGATED  R EH1 - L AH0 - G EY2 - T IH0 D\nRELEGATING  R EH1 - L AH0 - G EY2 - T IH0 NG\nRELEND  R IY0 - L EH1 N D\nRELENDING  R IY0 - L EH1 N - D IH0 NG\nRELENT  R IH0 - L EH1 N T\nRELENTED  R IH0 - L EH1 N - T IH0 D\nRELENTED(2)  R IY0 - L EH1 N - T IH0 D\nRELENTED(3)  R AH0 - L EH1 - N AH0 D\nRELENTED(4)  R IY0 - L EH1 - N AH0 D\nRELENTING  R IH0 - L EH1 N - T IH0 NG\nRELENTLESS  R IH0 - L EH1 N T - L IH0 S\nRELENTLESSLY  R IH0 - L EH1 N T - L AH0 S - L IY0\nRELEVANCE  R EH1 - L AH0 - V AH0 N S\nRELEVANCY  R EH1 - L AH0 - V AH0 N - S IY0\nRELEVANT  R EH1 - L AH0 - V AH0 N T\nRELF  R EH1 L F\nRELFORD  R EH1 L - F ER0 D\nRELIABILITY  R IY0 - L AY2 - AH0 - B IH1 - L AH0 - T IY0\nRELIABLE  R IH0 - L AY1 - AH0 - B AH0 L\nRELIABLE(2)  R IY0 - L AY1 - AH0 - B AH0 L\nRELIABLY  R IH0 - L AY1 - AH0 - B L IY0\nRELIABLY(2)  R IY0 - L AY1 - AH0 - B L IY0\nRELIANCE  R IH0 - L AY1 - AH0 N S\nRELIANCE'S  R IH0 - L AY1 - AH0 N - S IH0 Z\nRELIANCE'S(2)  R IY0 - L AY1 - AH0 N - S IH0 Z\nRELIANCE(2)  R IY0 - L AY1 - AH0 N S\nRELIANT  R IH0 - L AY1 - AH0 N T\nRELIANT(2)  R IY0 - L AY1 - AH0 N T\nRELIC  R EH1 - L IH0 K\nRELICS  R EH1 - L IH0 K S\nRELIED  R IH0 - L AY1 D\nRELIED(2)  R IY0 - L AY1 D\nRELIEF  R IH0 - L IY1 F\nRELIEF(2)  R IY0 - L IY1 F\nRELIEFS  R IY0 - L IY1 F S\nRELIES  R IH0 - L AY1 Z\nRELIES(2)  R IY0 - L AY1 Z\nRELIEVE  R IH0 - L IY1 V\nRELIEVE(2)  R IY0 - L IY1 V\nRELIEVED  R IH0 - L IY1 V D\nRELIEVED(2)  R IY0 - L IY1 V D\nRELIEVER  R IY0 - L IY1 - V ER0\nRELIEVERS  R IY0 - L IY1 - V ER0 Z\nRELIEVES  R IY0 - L IY1 V Z\nRELIEVING  R IH0 - L IY1 - V IH0 NG\nRELIEVING(2)  R IY0 - L IY1 - V IH0 NG\nRELIFORD  R EH1 - L IH0 - F AO0 R D\nRELIGION  R IH0 - L IH1 - JH AH0 N\nRELIGION'S  R IH0 - L IH1 - JH AH0 N Z\nRELIGION(2)  R IY0 - L IH1 - JH AH0 N\nRELIGIONE  R IH0 - L IH2 - JH IY0 - OW1 - N IY0\nRELIGIONIST  R IY0 - L IH1 - JH AH0 - N IH0 S T\nRELIGIONS  R IY0 - L IH1 - JH AH0 N Z\nRELIGIOSITY  R IH0 - L IH2 - JH IY0 - AA1 - S AH0 - T IY0\nRELIGIOUS  R IH0 - L IH1 - JH AH0 S\nRELIGIOUS(2)  R IY0 - L IH1 - JH AH0 S\nRELIGIOUSLY  R IH0 - L IH1 - JH AH0 S - L IY0\nRELINQUISH  R IH0 - L IH1 NG - K W IH0 SH\nRELINQUISH(2)  R IY0 - L IH1 NG - K W IH0 SH\nRELINQUISHED  R IH0 - L IH1 NG - K W IH0 SH T\nRELINQUISHED(2)  R IY0 - L IH1 NG - K W IH0 SH T\nRELINQUISHES  R IH0 - L IH1 NG - K W IH0 - SH IH0 Z\nRELINQUISHING  R IY0 - L IH1 NG - K W IH0 - SH IH0 NG\nRELISH  R EH1 - L IH0 SH\nRELISHED  R EH1 - L IH0 SH T\nRELISHES  R EH1 - L IH0 - SH AH0 Z\nRELISHES(2)  R EH1 - L IH0 - SH IH0 Z\nRELISHING  R EH1 - L IH0 - SH IH0 NG\nRELIVE  R IY0 - L IH1 V\nRELIVED  R IY0 - L IH1 V D\nRELIVING  R IY0 - L IH1 - V IH0 NG\nRELLA  R EH1 - L AH0\nRELLER  R EH1 - L ER0\nRELMAN  R EH1 L - M AH0 N\nRELOAD  R IY0 - L OW1 D\nRELOADABLE  R IY0 - L OW1 - D AH0 - B AH0 L\nRELOADED  R IY0 - L OW1 - D IH0 D\nRELOADS  R IY0 - L OW1 D Z\nRELOCATE  R IY0 - L OW1 - K EY0 T\nRELOCATED  R IY0 - L OW1 - K EY0 - T IH0 D\nRELOCATING  R IY0 - L OW1 - K EY0 - T IH0 NG\nRELOCATION  R IY0 - L OW1 - K EY1 - SH AH0 N\nRELOCATIONS  R IY0 - L OW1 - K EY1 - SH AH0 N Z\nRELONDO  R IH0 - L AO1 N - D OW0\nRELORAL  R IY0 - L AO1 - R AH0 L\nRELPH  R EH1 L F\nRELUCTANCE  R IH0 - L AH1 K - T AH0 N S\nRELUCTANCE(2)  R IY0 - L AH1 K - T AH0 N S\nRELUCTANT  R IH0 - L AH1 K - T AH0 N T\nRELUCTANT(2)  R IY0 - L AH1 K - T AH0 N T\nRELUCTANTLY  R IH0 - L AH1 K - T AH0 N T - L IY0\nRELY  R IH0 - L AY1\nRELY(2)  R IY0 - L AY1\nRELYEA  R EH1 L - Y EY2\nRELYING  R IY0 - L AY1 - IH0 NG\nREM  R EH1 M\nREMADE  R IY0 - M EY1 D\nREMAIN  R IH0 - M EY1 N\nREMAIN(2)  R IY0 - M EY1 N\nREMAINDER  R IH0 - M EY1 N - D ER0\nREMAINDER(2)  R IY0 - M EY1 N - D ER0\nREMAINED  R IH0 - M EY1 N D\nREMAINED(2)  R IY0 - M EY1 N D\nREMAINING  R IH0 - M EY1 - N IH0 NG\nREMAINING(2)  R IY0 - M EY1 - N IH0 NG\nREMAINS  R IH0 - M EY1 N Z\nREMAINS(2)  R IY0 - M EY1 N Z\nREMAKE  R IY1 - M EY1 K\nREMAKES  R IY1 - M EY1 K S\nREMAKING  R IY1 - M EY1 - K IH0 NG\nREMALEY  R EH1 - M AH0 - L IY0\nREMALY  R IY1 - M AH0 - L IY0\nREMAND  R IH0 - M AE1 N D\nREMANDED  R IH0 - M AE1 N - D IH0 D\nREMANUFACTURE  R IY2 - M AE2 - N Y UW0 - F AE1 K - CH ER0\nREMANUFACTURE(2)  R IY2 - M AE2 - N Y AH0 - F AE1 K - CH ER0\nREMANUFACTURED  R IY2 - M AE2 - N Y UW0 - F AE1 K - CH ER0 D\nREMANUFACTURED(2)  R IY2 - M AE2 - N Y AH0 - F AE1 K - CH ER0 D\nREMARK  R IH0 - M AA1 R K\nREMARK(2)  R IY0 - M AA1 R K\nREMARKABLE  R IH0 - M AA1 R - K AH0 - B AH0 L\nREMARKABLE(2)  R IY0 - M AA1 R - K AH0 - B AH0 L\nREMARKABLY  R IH0 - M AA1 R - K AH0 - B L IY0\nREMARKABLY(2)  R IY0 - M AA1 R - K AH0 - B L IY0\nREMARKED  R IH0 - M AA1 R K T\nREMARKED(2)  R IY0 - M AA1 R K T\nREMARKET  R IY0 - M AA1 R - K AH0 T\nREMARKETED  R IY0 - M AA1 R - K AH0 - T IH0 D\nREMARKETING  R IY0 - M AA1 R - K AH0 - T IH0 NG\nREMARKING  R IH0 - M AA1 R - K IH0 NG\nREMARKS  R IH0 - M AA1 R K S\nREMARKS(2)  R IY0 - M AA1 R K S\nREMARRIAGE  R IY0 - M EH1 - R IH0 JH\nREMARRIED  R IY0 - M EH1 - R IY0 D\nREMARRY  R IY0 - M EH1 - R IY0\nREMARRYING  R IY0 - M EH1 - R IY0 - IH0 NG\nREMATCH  R IY1 - M AE1 CH\nREMBERT  R EH1 M - B ER0 T\nREMBOLD  R EH1 M - B OW2 L D\nREMBRANDT  R EH1 M - B R AE2 N T\nREMBRANDT'S  R EH1 M - B R AE2 N T S\nREMBRANDTS  R EH1 M - B R AE2 N T S\nREMCO  R EH1 M - K OW0\nREMEDIAL  R IH0 - M IY1 - D IY0 - AH0 L\nREMEDIATE  R IY0 - M IY1 - D IY0 - AH0 T\nREMEDIATE(2)  R IY0 - M IY1 - D IY0 - EY2 T\nREMEDIATION  R IH0 - M IY2 - D IY0 - EY1 - SH AH0 N\nREMEDIED  R EH1 - M AH0 - D IY0 D\nREMEDIES  R EH1 - M AH0 - D IY0 Z\nREMEDY  R EH1 - M AH0 - D IY0\nREMEDYING  R EH1 - M AH0 - D IY0 - IH0 NG\nREMEMBER  R IH0 - M EH1 M - B ER0\nREMEMBER(2)  R IY0 - M EH1 M - B ER0\nREMEMBERED  R IH0 - M EH1 M - B ER0 D\nREMEMBERED(2)  R IY0 - M EH1 M - B ER0 D\nREMEMBERING  R IH0 - M EH1 M - B ER0 - IH0 NG\nREMEMBERING(2)  R IY0 - M EH1 M - B ER0 - IH0 NG\nREMEMBERING(3)  R IH0 - M EH1 M - B R IH0 NG\nREMEMBERING(4)  R IY0 - M EH1 M - B R IH0 NG\nREMEMBERS  R IH0 - M EH1 M - B ER0 Z\nREMEMBERS(2)  R IY0 - M EH1 M - B ER0 Z\nREMEMBRANCE  R IY0 - M EH1 M - B R AH0 N S\nREMEMBRANCES  R IH0 - M EH1 M - B R AH0 N - S IH0 Z\nREMER  R IY1 - M ER0\nREMERCHANDISE  R IY0 - M ER1 - CH AH0 N - D AY2 Z\nREMERCHANDISED  R IY0 - M ER1 - CH AH0 N - D AY2 Z D\nREMI  R EH1 - M IY0\nREMIC  R EH1 - M IH0 K\nREMICK  R EH1 - M IH0 K\nREMICS  R EH1 - M IH0 K S\nREMIGIO  R IH0 - M IH1 - JH IY0 - OW0\nREMILLARD  R EH1 - M IH0 - L ER0 D\nREMIND  R IY0 - M AY1 N D\nREMINDED  R IY0 - M AY1 N - D AH0 D\nREMINDED(2)  R IY0 - M AY1 N - D IH0 D\nREMINDER  R IY0 - M AY1 N - D ER0\nREMINDERS  R IY0 - M AY1 N - D ER0 Z\nREMINDING  R IY0 - M AY1 N - D IH0 NG\nREMINDS  R IY0 - M AY1 N D Z\nREMINGTON  R EH1 - M IH0 NG - T AH0 N\nREMINGTONS  R EH1 - M IH0 NG - T AH0 N Z\nREMINISCE  R EH2 - M AH0 - N IH1 S\nREMINISCED  R EH2 - M AH0 - N IH1 S T\nREMINISCENCE  R EH2 - M AH0 - N IH1 - S AH0 N S\nREMINISCENCES  R EH2 - M AH0 - N IH1 - S AH0 N - S IH0 Z\nREMINISCENT  R EH2 - M AH0 - N IH1 - S AH0 N T\nREMINISCES  R EH2 - M AH0 - N IH1 - S IH0 Z\nREMINISCING  R EH2 - M AH0 - N IH1 - S IH0 NG\nREMIS  R EY1 - M IY0 Z\nREMISS  R IY0 - M IH1 S\nREMISSES  R IY0 - M IH1 - S IH0 Z\nREMISSION  R IY0 - M IH1 - SH AH0 N\nREMISSIONS  R IY0 - M IH1 - SH AH0 N Z\nREMIT  R IY0 - M IH1 T\nREMITTANCE  R IY0 - M IH1 - T AH0 N S\nREMITTANCE(2)  R AH0 - M IH1 - T AH0 N S\nREMITTANCES  R IY0 - M IH1 - T AH0 N - S IH0 Z\nREMITTANCES(2)  R AH0 - M IH1 - T AH0 N - S IH0 Z\nREMITTED  R IY0 - M IH1 - T IH0 D\nREMLEY  R EH1 M - L IY0\nREMLINGER  R EH1 - M AH0 - L IH0 - NG ER0\nREMLINGER(2)  R EH1 M - L IH0 - NG ER0\nREMME  R EH1 M\nREMMEL  R EH1 - M AH0 L\nREMMERS  R EH1 - M ER0 Z\nREMMERT  R EH1 - M ER0 T\nREMMINGTON  R EH1 - M IH0 NG - T IH0 N\nREMNANT  R EH1 M - N AH0 N T\nREMNANTS  R EH1 M - N AH0 N T S\nREMNICK  R EH1 M - N IH0 K\nREMO  R EH1 - M OW0\nREMODEL  R IY0 - M AA1 - D AH0 L\nREMODELED  R IY0 - M AA1 - D AH0 L D\nREMODELING  R IH0 - M AA1 - D AH0 L - IH0 NG\nREMODELING(2)  R IH0 - M AA1 D - L IH0 NG\nREMOLD  R IY0 - M OW1 L D\nREMOLDED  R IY0 - M OW1 L - D IH0 D\nREMORSE  R IH0 - M AO1 R S\nREMORSEFUL  R IH0 - M AO1 R S - F AH0 L\nREMORSELESS  R IH0 - M AO1 R S - L AH0 S\nREMOTE  R IH0 - M OW1 T\nREMOTE(2)  R IY0 - M OW1 T\nREMOTELY  R IY0 - M OW1 T - L IY0\nREMOTENESS  R IY0 - M OW1 T - N AH0 S\nREMOTEST  R IH0 - M OW1 - T AH0 S T\nREMOULDED  R IY0 - M OW1 L - D IH0 D\nREMOVABLE  R IH0 - M UW1 - V AH0 - B AH0 L\nREMOVAL  R IH0 - M UW1 - V AH0 L\nREMOVALS  R IH0 - M UW1 - V AH0 L Z\nREMOVE  R IY0 - M UW1 V\nREMOVED  R IY0 - M UW1 V D\nREMOVER  R IH0 - M UW1 - V ER0\nREMOVES  R IY0 - M UW1 V Z\nREMOVING  R IY0 - M UW1 - V IH0 NG\nREMPAC  R EH1 M - P AE2 K\nREMPE  R EH1 M P\nREMPEL  R EH1 M - P AH0 L\nREMPFER  R EH1 M P - F ER0\nREMSBERG  R EH1 M S - B ER0 G\nREMSBURG  R EH1 M S - B ER0 G\nREMSEN  R EH1 M - S AH0 N\nREMSON  R EH1 M - S AH0 N\nREMUNERATE  R IH0 - M Y UW2 - N ER0 - EY1 T\nREMUNERATION  R IH0 - M Y UW2 - N ER0 - EY1 - SH AH0 N\nREMUNERATIVE  R IY0 - M Y UW1 - N ER0 - AH0 - T IH0 V\nREMUS  R IY1 - M AH0 S\nREMY  R EH1 - M IY0\nREN  R EH1 N\nRENA  R IY1 - N AH0\nRENAISSANCE  R EH2 - N AH0 - S AA1 N S\nRENAISSANCE'S  R EH2 - N AH0 - S AA1 N - S IH0 Z\nRENAL  R IY1 - N AH0 L\nRENALDO  R EH0 - N AA1 L - D OW0\nRENAME  R IY0 - N EY1 M\nRENAMED  R IY0 - N EY1 M D\nRENAMING  R IY0 - N EY1 - M IH0 NG\nRENAMO  R EH0 - N AA1 - M OW0\nRENARD  R IH0 - N AA1 R D\nRENATA  R AH0 - N AA1 - T AH0\nRENATE  R AH0 - N AA1 - T AH0\nRENATIONALIZATION  R IY0 - N AE2 - SH AH0 N - AH0 - L IH0 - Z EY1 - SH AH0 N\nRENATIONALIZE  R IY0 - N AE1 - SH AH0 N - AH0 - L AY2 Z\nRENATO  R EH0 - N AA1 - T OW0\nRENAUD  R IH0 - N OW1\nRENAULT  R AH0 - N OW1\nRENAULT'S  R IH0 - N AO1 L T S\nRENAULT'S(2)  R AH0 - N OW1 Z\nRENAULT(2)  R IH0 - N AO1 L T\nRENBARGER  R EH1 N - B AA2 R - G ER0\nRENCEN  R EH1 N - S AH0 N\nRENCH  R EH1 N CH\nRENCHER  R EH1 N - CH ER0\nRENCO  R EH1 N - K OW0\nRENDA  R EH1 N - D AH0\nRENDALL  R EH1 N - D AH0 L\nRENDE  R EH1 N D\nRENDELL  R EH1 N - D AH0 L\nRENDELL'S  R EH1 N - D AH0 L Z\nRENDER  R EH1 N - D ER0\nRENDERED  R EH1 N - D ER0 D\nRENDERING  R EH1 N - D ER0 - IH0 NG\nRENDERINGS  R EH1 N - D ER0 - IH0 NG Z\nRENDERS  R EH1 N - D ER0 Z\nRENDEZVOUS  R AA1 N - D IH0 - V UW2\nRENDINA  R EH0 N - D IY1 - N AH0\nRENDING  R EH1 N - D IH0 NG\nRENDITION  R EH0 N - D IH1 - SH AH0 N\nRENDITIONS  R EH0 N - D IH1 - SH AH0 N Z\nRENDLEMAN  R EH1 N - D AH0 L - M AH0 N\nRENDON  R EH1 N - D OW0 N\nRENE  R AH0 - N EY1\nRENEAU  R IH0 - N OW1\nRENEE  R AH0 - N EY1\nRENEGADE  R EH1 - N AH0 - G EY2 D\nRENEGADES  R EH1 - N AH0 - G EY2 D Z\nRENEGAR  R EH1 - N IH0 - G ER0\nRENEGE  R IH0 - N IH1 G\nRENEGED  R IH0 - N IH1 G D\nRENEGING  R IH0 - N IH1 - G IH0 NG\nRENEGOTIATE  R IY2 - N IH0 - G OW1 - SH IY0 - EY2 T\nRENEGOTIATED  R IY2 - N IH0 - G OW1 - SH IY0 - EY2 - T IH0 D\nRENEGOTIATING  R IY2 - N IH0 - G OW1 - SH IY0 - EY2 - T IH0 NG\nRENEGOTIATION  R IY2 - N IH0 - G OW2 - SH IY0 - EY1 - SH AH0 N\nRENEGOTIATIONS  R IY2 - N IH0 - G OW2 - SH IY0 - EY1 - SH AH0 N Z\nRENEHAN  R EH1 - N IH0 - HH AE0 N\nRENEW  R IH0 - N UW1\nRENEWABLE  R IY0 - N UW1 - AH0 - B AH0 L\nRENEWAL  R IH0 - N UW1 - AH0 L\nRENEWALS  R IH0 - N UW1 - AH0 L Z\nRENEWED  R IH0 - N UW1 D\nRENEWED(2)  R IY0 - N UW1 D\nRENEWING  R IH0 - N UW1 - IH0 NG\nRENEWS  R IH0 - N UW1 Z\nRENFRED  R EH1 N - F ER0 D\nRENFREW  R EH1 N - F R UW0\nRENFRO  R EH1 N - F R OW0\nRENFROE  R EH1 N - F R OW0\nRENFROW  R EH1 N - F R AW0\nRENGEL  R EH1 NG - G AH0 L\nRENGO  R EH1 NG - G OW0\nRENGO'S  R EH1 NG - G OW0 Z\nRENICK  R EH1 - N IH0 K\nRENIER  R IY1 - N IY0 - ER0\nRENIN  R IY1 - N AH0 N\nRENISON  R EH1 - N IH0 - S AH0 N\nRENITA  R EH0 - N IY1 - T AH0\nRENK  R EH1 NG K\nRENKEN  R EH1 NG - K AH0 N\nRENKO  R EH1 NG - K OW0\nRENMINBI  R EH0 N - M IH1 N - B IY0\nRENN  R EH1 N\nRENNA  R EH1 - N AH0\nRENNARD  R IH0 - N AA1 R D\nRENNE  R EH1 N\nRENNELS  R EH1 - N AH0 L Z\nRENNER  R EH1 - N ER0\nRENNERT  R EH1 - N ER0 T\nRENNET  R EH1 - N AH0 T\nRENNICK  R EH1 - N IH0 K\nRENNIE  R EH1 - N IY0\nRENNINGER  R EH1 - N IH0 - NG ER0\nRENNO  R EH1 - N OW0\nRENNY  R EH1 - N IY0\nRENO  R IY1 - N OW0\nRENO'S  R IY1 - N OW0 Z\nRENOIR  R EH0 N - W AA1 R\nRENOIRS  R EH0 N - W AA1 R Z\nRENOMINATE  R IY0 - N AO1 - M IH0 - N EY2 T\nRENOMINATED  R IY0 - N AA1 - M AH0 - N EY2 - T IH0 D\nRENOMINATION  R IY1 - N AA2 - M AH0 - N EY1 - SH AH0 N\nRENOUF  R AH0 - N UW1 F\nRENOUNCE  R IH0 - N AW1 N S\nRENOUNCED  R IH0 - N AW1 N S T\nRENOUNCES  R IH0 - N AW1 N - S IH0 Z\nRENOUNCING  R IH0 - N AW1 N - S IH0 NG\nRENOVATABLE  R EH1 - N AH0 - V EY2 - T AH0 - B AH0 L\nRENOVATE  R EH1 - N AH0 - V EY2 T\nRENOVATED  R EH1 - N AH0 - V EY2 - T IH0 D\nRENOVATING  R EH1 - N AH0 - V EY2 - T IH0 NG\nRENOVATION  R EH2 - N AH0 - V EY1 - SH AH0 N\nRENOVATIONS  R EH1 - N AH0 - V EY2 - SH AH0 N Z\nRENOVATOR  R EH1 - N AH0 - V EY2 - T ER0\nRENOVATORS  R EH1 - N AH0 - V EY2 - T ER0 Z\nRENOWN  R IH0 - N AW1 N\nRENOWNED  R IH0 - N AW1 N D\nRENQUIST  R EH1 N - K W IH0 S T\nRENS  R EH1 N Z\nRENSBERGER  R EH1 N S - B ER0 - G ER0\nRENSCH  R EH1 N SH\nRENSCHLER  R EH1 N - SH AH0 - L ER0\nRENSCHLER(2)  R EH1 N SH - L ER0\nRENSHAW  R EH1 N - SH AO2\nRENSING  R EH1 N - S IH0 NG\nRENSSELAER  R EH2 N - S AH0 - L IH1 R\nRENSTROM  R EH1 N S - T R AH0 M\nRENT  R EH1 N T\nRENTA  R EH1 N - T AH0\nRENTABLE  R EH1 N - T AH0 - B AH0 L\nRENTAL  R EH1 N - T AH0 L\nRENTALS  R EH1 N - T AH0 L Z\nRENTAS  R EH1 N - T AH0 Z\nRENTED  R EH1 N - T AH0 D\nRENTED(2)  R EH1 N - T IH0 D\nRENTER  R EH1 N - T ER0\nRENTERIA  R EH0 N - T EH1 - R IY0 - AH0\nRENTERS  R EH1 N - T ER0 Z\nRENTFRO  R EH1 N T - F R OW0\nRENTFROW  R EH1 N T - F R AW0\nRENTING  R EH1 N - T IH0 NG\nRENTMEESTER  R EH1 N T - M IY2 - S T ER0\nRENTON  R EH1 N - T AH0 N\nRENTS  R EH1 N T S\nRENTSCH  R EH1 N CH\nRENTSCHLER  R EH1 N CH - L ER0\nRENTZ  R EH1 N T S\nRENUNCIATE  R IH0 - N AH1 N - S IY0 - EY2 T\nRENUNCIATION  R IH0 - N AH2 N - S IY0 - EY1 - SH AH0 N\nRENUZIT  R IY0 - N UW1 - Z IH0 T\nRENWICK  R EH1 N - W IH0 K\nRENY  R IY1 - N IY0\nRENZ  R EH1 N Z\nRENZI  R EH1 N - Z IY0\nRENZULLI  R EH0 N - Z UW1 - L IY0\nREO  R IY1 - OW0\nREOCCUPY  R IY0 - AO1 - K Y UW2 - P AY0\nREOCCUR  R IY0 - AH0 - K ER1\nREOFFEND  R IY0 - AO0 - F EH1 N D\nREOFFENDED  R IY0 - AO0 - F EH1 N - D IH0 D\nREOFFER  R IY0 - AO1 - F ER0\nREOFFERED  R IY0 - AO1 - F ER0 D\nREOFFERING  R IY0 - AO1 - F ER0 - IH0 NG\nREOPEN  R IY0 - OW1 - P AH0 N\nREOPENED  R IY0 - OW1 - P AH0 N D\nREOPENING  R IY0 - OW1 - P AH0 - N IH0 NG\nREOPENS  R IY0 - OW1 - P AH0 N Z\nREORDER  R IY0 - AO1 R - D ER0\nREORDERING  R IY0 - AO1 R - D ER0 - IH0 NG\nREORGANIZATION  R IY2 - AO0 R - G AH0 - N AH0 - Z EY1 - SH AH0 N\nREORGANIZATIONS  R IY0 - AO2 R - G AH0 - N IH0 - Z EY1 - SH AH0 N Z\nREORGANIZE  R IY0 - AO1 R - G AH0 - N AY2 Z\nREORGANIZED  R IY0 - AO1 R - G AH0 - N AY2 Z D\nREORGANIZES  R IY0 - AO1 R - G AH0 - N AY2 - Z IH0 Z\nREORGANIZING  R IY0 - AO1 R - G AH0 - N AY2 - Z IH0 NG\nREORIENT  R IY0 - AO1 - R IY0 - EH0 N T\nREP  R EH1 P\nREP'S  R EH1 P S\nREP(2)  R EH0 - P R IY0 - Z EH1 - T AH0 - T IH0 V\nREP.(2)  R EH0 - P R IY0 - Z EH1 - T AH0 - T IH0 V\nREPACK  R IY0 - P AE1 K\nREPACKAGE  R IY2 - P AE1 - K IH0 JH\nREPACKAGED  R IY1 - P AE0 - K IH0 JH D\nREPACKAGES  R IY2 - P AE1 - K IH0 - JH IH0 Z\nREPACKAGING  R IY1 - P AE0 - K IH0 - JH IH0 NG\nREPACKED  R IY0 - P AE1 K T\nREPAID  R IY0 - P EY1 D\nREPAINT  R IY0 - P EY1 N T\nREPAINTED  R IY0 - P EY1 N - T AH0 D\nREPAINTING  R IY0 - P EY1 N - T IH0 NG\nREPAIR  R IH0 - P EH1 R\nREPAIRABLE  R IH0 - P EH1 - R AH0 - B AH0 L\nREPAIRED  R IH0 - P EH1 R D\nREPAIRED(2)  R IY0 - P EH1 R D\nREPAIRING  R IH0 - P EH1 - R IH0 NG\nREPAIRING(2)  R IY0 - P EH1 - R IH0 NG\nREPAIRMAN  R IH0 - P EH1 R - M AE2 N\nREPAIRMAN(2)  R IY0 - P EH1 R - M AE2 N\nREPAIRMEN  R IH0 - P EH1 R - M EH2 N\nREPAIRS  R IH0 - P EH1 R Z\nREPAIRS(2)  R IY0 - P EH1 R Z\nREPAP  R IY1 - P AE0 P\nREPARATION  R EH2 - P ER0 - EY1 - SH AH0 N\nREPARATIONS  R EH2 - P ER0 - EY1 - SH AH0 N Z\nREPARTEE  R EH2 - P ER0 - T IY1\nREPASKY  R IH0 - P AA1 S - K IY0\nREPASS  R IY0 - P AE1 S\nREPATRIATE  R IY0 - P EY1 - T R IY0 - EY2 T\nREPATRIATED  R IY0 - P EY1 - T R IY0 - EY2 - T IH0 D\nREPATRIATING  R IY0 - P EY1 - T R IY0 - EY2 - T IH0 NG\nREPATRIATION  R IY0 - P EY2 - T R IY0 - EY1 - SH AH0 N\nREPAY  R IY0 - P EY1\nREPAYABLE  R IY0 - P EY1 - AH0 - B AH0 L\nREPAYING  R IY0 - P EY1 - IH0 NG\nREPAYMENT  R IY0 - P EY1 - M AH0 N T\nREPAYMENTS  R IY0 - P EY1 - M AH0 N T S\nREPAYS  R IY2 - P EY1 Z\nREPEAL  R IH0 - P IY1 L\nREPEAL(2)  R IY0 - P IY1 L\nREPEALED  R IH0 - P IY1 L D\nREPEALED(2)  R IY0 - P IY1 L D\nREPEALING  R IY0 - P IY1 - L IH0 NG\nREPEALS  R IY0 - P IY1 L Z\nREPEAT  R IH0 - P IY1 T\nREPEAT(2)  R IY0 - P IY1 T\nREPEATABLE  R IH0 - P IY1 - T AH0 - B AH0 L\nREPEATED  R IH0 - P IY1 - T IH0 D\nREPEATED(2)  R IY0 - P IY1 - T AH0 D\nREPEATED(3)  R IY0 - P IY1 - T IH0 D\nREPEATEDLY  R IH0 - P IY1 - T IH0 D - L IY0\nREPEATER  R IH0 - P IY1 - T ER0\nREPEATERS  R IH0 - P IY1 - T ER0 Z\nREPEATING  R IH0 - P IY1 - T IH0 NG\nREPEATING(2)  R IY0 - P IY1 - T IH0 NG\nREPEATS  R IH0 - P IY1 T S\nREPEATS(2)  R IY0 - P IY1 T S\nREPEL  R IH0 - P EH1 L\nREPELLED  R AH0 - P EH1 L D\nREPELLED(2)  R IH0 - P EH1 L D\nREPELLENT  R IH0 - P EH1 - L AH0 N T\nREPELLING  R AH0 - P EH1 - L IH0 NG\nREPELS  R IH0 - P EH1 L Z\nREPENT  R IH0 - P EH1 N T\nREPENTANCE  R IH0 - P EH1 N - T AH0 N S\nREPENTANT  R IH0 - P EH1 N - T AH0 N T\nREPENTED  R IH0 - P EH1 N - T IH0 D\nREPERCUSSION  R IY2 - P ER0 - K AH1 - SH AH0 N\nREPERCUSSION(2)  R IY2 - P R AH0 - K AH1 - SH AH0 N\nREPERCUSSIONS  R IY2 - P ER0 - K AH1 - SH AH0 N Z\nREPERCUSSIONS(2)  R IY2 - P R AH0 - K AH1 - SH AH0 N Z\nREPERFUSION  R EH2 - P ER0 - F Y UW1 - ZH AH0 N\nREPERTOIRE  R EH1 - P ER0 - T W AA2 R\nREPERTORY  R EH1 - P ER0 - T AO2 - R IY0\nREPETITION  R EH2 - P AH0 - T IH1 - SH AH0 N\nREPETITIONS  R EH2 - P AH0 - T IH1 - SH AH0 N Z\nREPETITIOUS  R EH2 - P AH0 - T IH1 - SH AH0 S\nREPETITIVE  R IH0 - P EH1 - T IH0 - T IH0 V\nREPETTI  R EH0 - P EH1 - T IY0\nREPETTO  R EH0 - P EH1 - T OW0\nREPH  R EH1 F\nREPHRASE  R IY0 - F R EY1 Z\nREPINSKI  R IH0 - P IH1 N - S K IY0\nREPKA  R EH1 P - K AH0\nREPKO  R EH1 P - K OW0\nREPLACE  R IY2 - P L EY1 S\nREPLACE(2)  ER0 - P L EY1 S\nREPLACEABLE  R IY2 - P L EY1 - S AH0 - B AH0 L\nREPLACED  R IY2 - P L EY1 S T\nREPLACEMENT  R IH0 - P L EY1 S - M AH0 N T\nREPLACEMENTS  R IY0 - P L EY1 S - M AH0 N T S\nREPLACES  R IH0 - P L EY1 - S IH0 Z\nREPLACING  R IH0 - P L EY1 - S IH0 NG\nREPLANT  R IY0 - P L AE1 N T\nREPLANTED  R IY0 - P L AE1 N - T IH0 D\nREPLANTED(2)  R IY0 - P L AE1 - N IH0 D\nREPLANTING  R IY0 - P L AE1 N - T IH0 NG\nREPLAY  R IY0 - P L EY1\nREPLAYED  R IY0 - P L EY1 D\nREPLAYING  R IY0 - P L EY1 - IH0 NG\nREPLAYS  R IY0 - P L EY1 Z\nREPLENISH  R IY0 - P L EH1 - N IH0 SH\nREPLENISHED  R IY0 - P L EH1 - N IH0 SH T\nREPLENISHING  R IY0 - P L EH1 - N IH0 - SH IH0 NG\nREPLENISHMENT  R IH0 - P L EH1 - N IH0 SH - M AH0 N T\nREPLETE  R IY0 - P L IY1 T\nREPLICA  R EH1 - P L IH0 - K AH0\nREPLICAS  R EH1 - P L AH0 - K AH0 Z\nREPLICASE  R EH1 - P L IH0 - K EY2 Z\nREPLICATE  R EH1 - P L AH0 - K EY2 T\nREPLICATED  R EH1 - P L IH0 - K EY2 - T IH0 D\nREPLICATES  R EH1 - P L IH0 - K EY2 T S\nREPLICATING  R EH1 - P L IH0 - K EY2 - T IH0 NG\nREPLICATION  R EH2 - P L AH0 - K EY1 - SH AH0 N\nREPLIED  R IH0 - P L AY1 D\nREPLIED(2)  R IY0 - P L AY1 D\nREPLIES  R IH0 - P L AY1 Z\nREPLIES(2)  R IY0 - P L AY1 Z\nREPLIGEN  R IH2 - P L AY1 - JH IH0 N\nREPLIGEN'S  R IH2 - P L AY1 - JH IH0 N Z\nREPLOGLE  R EH1 - P L OW0 - G AH0 L\nREPLY  R IH0 - P L AY1\nREPLY(2)  R IY0 - P L AY1\nREPLYING  R IH0 - P L AY1 - IH0 NG\nREPLYING(2)  R IY0 - P L AY1 - IH0 NG\nREPO  R IY1 - P OW0\nREPONSE  R IH0 - P AA1 N S\nREPORT  R IY0 - P AO1 R T\nREPORT'S  R IY0 - P AO1 R T S\nREPORT'S(2)  R IH0 - P AO1 R T S\nREPORT(2)  R IH0 - P AO1 R T\nREPORTABLE  R IH0 - P AO1 R - T AH0 - B AH0 L\nREPORTAGE  R IH0 - P AO1 R - T IH0 JH\nREPORTED  R IY2 - P AO1 R - T AH0 D\nREPORTED(2)  R IH0 - P AO1 R - T AH0 D\nREPORTEDLY  R IH0 - P AO1 R - T AH0 D - L IY0\nREPORTEDLY(2)  R IY0 - P AO1 R - T AH0 D - L IY0\nREPORTER  R IH0 - P AO1 R - T ER0\nREPORTER'S  R IH0 - P AO1 R - T ER0 Z\nREPORTERS  R IH0 - P AO1 R - T ER0 Z\nREPORTERS'  R IH0 - P AO1 R - T ER0 Z\nREPORTING  R IY0 - P AO1 R - T IH0 NG\nREPORTING(2)  R IH0 - P AO1 R - T IH0 NG\nREPORTORIAL  R EH2 - P ER0 - T AO1 - R IY0 - AH0 L\nREPORTS  R IH0 - P AO1 R T S\nREPORTS'  R IH0 - P AO1 R T S\nREPORTS'(2)  R IY0 - P AO1 R T S\nREPORTS(2)  R IY0 - P AO1 R T S\nREPOS  R IY1 - P OW2 Z\nREPOSA  R EH0 - P OW1 - S AH0\nREPOSE  R IY0 - P OW1 Z\nREPOSITION  R IY2 - P AH0 - Z IH1 - SH AH0 N\nREPOSITIONED  R IY2 - P AH0 - Z IH1 - SH AH0 N D\nREPOSITIONING  R IY2 - P AH0 - Z IH1 - SH AH0 N - IH0 NG\nREPOSITORIES  R IY0 - P AA1 - Z AH0 - T AO2 - R IY0 Z\nREPOSITORY  R IY0 - P AA1 - Z AH0 - T AO2 - R IY0\nREPOSSESS  R IY2 - P AH0 - Z EH1 S\nREPOSSESSED  R IY2 - P AH0 - Z EH1 S T\nREPOSSESSION  R IY2 - P AH0 - Z EH1 - SH AH0 N\nREPOSSESSIONS  R IY2 - P AH0 - Z EH1 - SH AH0 N Z\nREPP  R EH1 P\nREPPERT  R EH1 - P ER0 T\nREPPOND  R EH1 - P AH0 N D\nREPPUCCI  R EH0 - P UW1 - CH IY0\nREPR  EH1 P\nREPREHENSIBLE  R EH2 - P R IH0 - HH EH1 N - S AH0 - B AH0 L\nREPRESENT  R EH2 - P R AH0 - Z EH1 N T\nREPRESENT(2)  R EH2 - P R IH0 - Z EH1 N T\nREPRESENTATION  R EH2 - P R AH0 - Z EH0 N - T EY1 - SH AH0 N\nREPRESENTATIONAL  R EH2 - P R AH0 - Z AH0 N - T EY1 - SH AH0 - N AH0 L\nREPRESENTATIONS  R EH2 - P R AH0 - Z AH0 N - T EY1 - SH AH0 N Z\nREPRESENTATIVE  R EH2 - P R AH0 - Z EH1 N - T AH0 - T IH0 V\nREPRESENTATIVE'S  R EH2 - P R IH0 - Z EH1 N - T AH0 - T IH0 V Z\nREPRESENTATIVE'S(2)  R EH2 - P R IH0 - Z EH1 - N AH0 - T IH0 V Z\nREPRESENTATIVE(2)  R EH2 - P R IH0 - Z EH1 N - T AH0 - T IH0 V\nREPRESENTATIVE(3)  R EH2 - P R AH0 - Z EH1 - N AH0 - T IH0 V\nREPRESENTATIVE(4)  R EH2 - P R IH0 - Z EH1 - N AH0 - T IH0 V\nREPRESENTATIVES  R EH2 - P R AH0 - Z EH1 N - T AH0 - T IH0 V Z\nREPRESENTATIVES'  R EH2 - P R AH0 - S EH1 N - T AH0 - T IH0 V Z\nREPRESENTATIVES'(2)  R EH2 - P R AH0 - S EH1 - N AH0 - T IH0 V Z\nREPRESENTATIVES(2)  R EH2 - P R IH0 - Z EH1 N - T AH0 - T IH0 V Z\nREPRESENTATIVES(3)  R EH2 - P R AH0 - Z EH1 - N AH0 - T IH0 V Z\nREPRESENTATIVES(4)  R EH2 - P R IH0 - Z EH1 - N AH0 - T IH0 V Z\nREPRESENTED  R EH2 - P R AH0 - Z EH1 N - T AH0 D\nREPRESENTED(2)  R EH2 - P R IH0 - Z EH1 N - T IH0 D\nREPRESENTED(3)  R EH2 - P R AH0 - Z EH1 - N AH0 D\nREPRESENTED(4)  R EH2 - P R IH0 - Z EH1 - N IH0 D\nREPRESENTING  R EH2 - P R IH0 - Z EH1 N - T IH0 NG\nREPRESENTING(2)  R EH2 - P R IH0 - Z EH1 - N IH0 NG\nREPRESENTS  R EH2 - P R AH0 - Z EH1 N T S\nREPRESENTS(2)  R EH2 - P R IH0 - Z EH1 N T S\nREPRESS  R IY0 - P R EH1 S\nREPRESSED  R IY0 - P R EH1 S T\nREPRESSING  R IY0 - P R EH1 - S IH0 NG\nREPRESSION  R IY0 - P R EH1 - SH AH0 N\nREPRESSIONS  R IY0 - P R EH1 - SH AH0 N Z\nREPRESSIVE  R IY0 - P R EH1 - S IH0 V\nREPRICE  R IY0 - P R AY1 S\nREPRICED  R IY0 - P R AY1 S T\nREPRICING  R IY0 - P R AY1 - S IH0 NG\nREPRIEVE  R IY0 - P R IY1 V\nREPRIMAND  R EH1 - P R AH0 - M AE2 N D\nREPRIMANDED  R EH1 - P R AH0 - M AE2 N - D IH0 D\nREPRIMANDS  R EH1 - P R AH0 - M AE2 N D Z\nREPRINT  R IY0 - P R IH1 N T\nREPRINTED  R IY0 - P R IH1 N - T IH0 D\nREPRINTING  R IY0 - P R IH1 N - T IH0 NG\nREPRINTS  R IY0 - P R IH1 N T S\nREPRISAL  R IY0 - P R AY1 - Z AH0 L\nREPRISALS  R IH0 - P R AY1 - Z AH0 L Z\nREPRISALS(2)  R IY0 - P R AY1 - Z AH0 L Z\nREPRISE  R IH0 - P R AY1 Z\nREPRISE(2)  R IH0 - P R IY1 Z\nREPROACH  R IY0 - P R OW1 CH\nREPROBATE  R EH1 - P R AO0 - B EY0 T\nREPROCESS  R IY0 - P R AO1 - S EH0 S\nREPROCESSED  R IY0 - P R AO1 - S EH0 S T\nREPROCESSING  R IY0 - P R AO1 - S EH0 - S IH0 NG\nREPRODUCE  R IY2 - P R AH0 - D UW1 S\nREPRODUCED  R IY2 - P R AH0 - D UW1 S T\nREPRODUCES  R IY2 - P R AH0 - D UW1 - S IH0 Z\nREPRODUCING  R IY2 - P R AH0 - D UW1 - S IH0 NG\nREPRODUCTION  R IY2 - P R AH0 - D AH1 K - SH AH0 N\nREPRODUCTIONS  R IY2 - P R AH0 - D AH1 K - SH AH0 N Z\nREPRODUCTIVE  R IY2 - P R AH0 - D AH1 K - T IH0 V\nREPROGRAM  R IY0 - P R OW1 - G R AE2 M\nREPROGRAMMED  R IY0 - P R OW1 - G R AE2 M D\nREPROGRAMMING  R IY0 - P R OW1 - G R AE2 - M IH0 NG\nREPROGRAMS  R IY0 - P R OW1 - G R AE2 M Z\nREPROGRAPH  R EH1 - P R OW0 - G R AE2 F\nREPROGRAPHIC  R EH2 - P R OW0 - G R AE1 - F IH0 K\nREPROGRAPHICS  R EH2 - P R OW0 - G R AE1 - F IH0 K S\nREPS  R EH1 P S\nREPSHER  R EH1 P - SH ER0\nREPSOL  R EH1 P - S AA0 L\nREPTILE  R EH1 P - T AY0 L\nREPTILES  R EH1 P - T AY0 L Z\nREPUBLIC  R IY0 - P AH1 - B L AH0 K\nREPUBLIC'S  R IY0 - P AH1 - B L IH0 K S\nREPUBLIC(2)  R IY0 - P AH1 - B L IH0 K\nREPUBLICAN  R IH0 - P AH1 - B L IH0 - K AH0 N\nREPUBLICAN'S  R IY0 - P AH1 - B L IH0 - K AH0 N Z\nREPUBLICAN(2)  R IY0 - P AH1 - B L AH0 - K AH0 N\nREPUBLICAN(3)  R IY0 - P AH1 - B L IH0 - K AH0 N\nREPUBLICANISM  R IH0 - P AH1 - B L IH0 - K AH0 - N IH2 - Z AH0 M\nREPUBLICANS  R IH0 - P AH1 - B L IH0 - K AH0 N Z\nREPUBLICANS'  R IH0 - P AH1 - B L IH0 - K AH0 N Z\nREPUBLICANS'(2)  R IY0 - P AH1 - B L IH0 - K AH0 N Z\nREPUBLICANS(2)  R IY0 - P AH1 - B L AH0 - K AH0 N Z\nREPUBLICANS(3)  R IY0 - P AH1 - B L IH0 - K AH0 N Z\nREPUBLICBANK  R IY0 - P AH1 - B L IH0 K - B AE2 NG K\nREPUBLICBANK'S  R IY0 - P AH1 - B L IH0 K - B AE2 NG K S\nREPUBLICS  R IY0 - P AH1 - B L IH0 K S\nREPUDIATE  R IY0 - P Y UW1 - D IY0 - EY2 T\nREPUDIATED  R IY0 - P Y UW1 - D IY0 - EY2 - T AH0 D\nREPUDIATES  R IY0 - P Y UW1 - D IY0 - EY2 T S\nREPUDIATING  R IY0 - P Y UW1 - D IY0 - EY2 - T IH0 NG\nREPUDIATION  R IH0 - P Y UW2 - D IY0 - EY1 - SH AH0 N\nREPUGNANT  R IH0 - P AH1 G - N AH0 N T\nREPUGNANT(2)  R IY0 - P AH1 G - N AH0 N T\nREPULSE  R IY0 - P AH1 L S\nREPULSED  R IY0 - P AH1 L S T\nREPULSING  R IY0 - P AH1 L - S IH0 NG\nREPULSIVE  R IY0 - P AH1 L - S IH0 V\nREPURCHASE  R IY0 - P ER1 - CH AH0 S\nREPURCHASED  R IY0 - P ER1 - CH AH0 S T\nREPURCHASES  R IY0 - P ER1 - CH AH0 - S IH0 Z\nREPURCHASING  R IY0 - P ER1 - CH AH0 - S IH0 NG\nREPUTABLE  R EH1 - P Y AH0 - T AH0 - B AH0 L\nREPUTATION  R EH2 - P Y AH0 - T EY1 - SH AH0 N\nREPUTATIONS  R EH2 - P Y AH0 - T EY1 - SH AH0 N Z\nREPUTE  R IY0 - P Y UW1 T\nREPUTED  R IH0 - P Y UW1 - T IH0 D\nREPUTED(2)  R IY0 - P Y UW1 - T AH0 D\nREPUTED(3)  R IY0 - P Y UW1 - T IH0 D\nREPUTEDLY  R IH0 - P Y UW1 - T IH0 D - L IY0\nREQUA  R EY1 - K W AH0\nREQUALIFY  R IY2 - K W AA1 - L AH0 - F AY2\nREQUEST  R IH0 - K W EH1 S T\nREQUEST(2)  R IY0 - K W EH1 S T\nREQUESTED  R IH0 - K W EH1 - S T IH0 D\nREQUESTED(2)  R IY0 - K W EH1 - S T AH0 D\nREQUESTED(3)  R IY0 - K W EH1 - S T IH0 D\nREQUESTER  R IH0 - K W EH1 - S T ER0\nREQUESTING  R IH0 - K W EH1 - S T IH0 NG\nREQUESTING(2)  R IY0 - K W EH1 - S T IH0 NG\nREQUESTS  R IH0 - K W EH1 S T S\nREQUESTS(2)  R IY0 - K W EH1 S T S\nREQUESTS(3)  R IH0 - K W EH1 S S\nREQUESTS(4)  R IY0 - K W EH1 S S\nREQUESTS(5)  R IH0 - K W EH1 S\nREQUESTS(6)  R IY0 - K W EH1 S\nREQUIEM  R EH1 - K W IY0 - AH0 M\nREQUIRE  R IY2 - K W AY1 - ER0\nREQUIRE(2)  R IY0 - K W AY1 R\nREQUIRE(3)  R IH0 - K W AY1 - ER0\nREQUIRED  R IY0 - K W AY1 - ER0 D\nREQUIRED(2)  R IY0 - K W AY1 R D\nREQUIREMENT  R IH0 - K W AY1 R - M AH0 N T\nREQUIREMENTS  R IH0 - K W AY1 R - M AH0 N T S\nREQUIRES  R IY0 - K W AY1 - ER0 Z\nREQUIRES(2)  R IY0 - K W AY1 R Z\nREQUIRING  R IY0 - K W AY1 - ER0 - IH0 NG\nREQUIRING(2)  R IY0 - K W AY1 - R IH0 NG\nREQUISITE  R EH1 - K W AH0 - Z AH0 T\nREQUISITES  R EH1 - K W AH0 - Z AH0 T S\nREQUISITION  R EH2 - K W AH0 - Z IH1 - SH AH0 N\nREQUISITIONED  R EH2 - K W AH0 - Z IH1 - SH AH0 N D\nREREAD  R IY1 - R IY1 D\nREREADING  R IY1 - R IY1 - D IH0 NG\nREREGULATE  R IY0 - R EH1 - G Y AH0 - L EY2 T\nREREGULATION  R IY0 - R EH0 - G Y AH0 - L EY1 - SH AH0 N\nREROUTE  R IY0 - R UW1 T\nREROUTE(2)  R IY0 R - AW1 T\nREROUTED  R IY0 - R UW1 - T IH0 D\nREROUTED(2)  R IY0 - R AW1 - T IH0 D\nREROUTING  R IY0 - R UW1 - T IH0 NG\nREROUTING(2)  R IY0 - R AW1 - T IH0 NG\nRERUN  R IY1 - R AH1 N\nRERUNNING  R IY1 - R AH1 - N IH0 NG\nRERUNS  R IY1 - R AH1 N Z\nRES  R EY1 Z\nRESALE  R IY1 - S EY2 L\nRESALES  R IY1 - S EY2 L Z\nRESCH  R EH1 SH\nRESCHEDULE  R IY0 - S K EH1 - JH UW0 L\nRESCHEDULED  R IY0 - S K EH1 - JH UW0 L D\nRESCHEDULING  R IY0 - S K EH1 - JH UW0 - L IH0 NG\nRESCHEDULINGS  R IY0 SH - K EH1 - JH UW0 - L IH0 NG Z\nRESCHKE  R EH1 SH K\nRESCIGNO  R EH0 - S CH IY1 G - N OW0\nRESCIND  R IH0 - S IH1 N D\nRESCIND(2)  R IY0 - S IH1 N D\nRESCINDED  R IH0 - S IH1 N - D IH0 D\nRESCINDED(2)  R IY0 - S IH1 N - D AH0 D\nRESCINDED(3)  R IY0 - S IH1 N - D IH0 D\nRESCINDING  R IH0 - S IH1 N - D IH0 NG\nRESCISSION  R IH0 - S IH1 - ZH AH0 N\nRESCISSIONS  R IH0 - S IH1 - ZH AH0 N Z\nRESCUE  R EH1 - S K Y UW0\nRESCUED  R EH1 - S K Y UW0 D\nRESCUER  R EH1 - S K Y UW2 - ER0\nRESCUERS  R EH1 - S K Y UW2 - ER0 Z\nRESCUES  R EH1 - S K Y UW2 Z\nRESCUING  R EH1 - S K Y UW0 - IH0 NG\nRESDEL  R EH1 Z - D EH2 L\nRESEACHERS  R IY0 - S ER1 - CH ER0 Z\nRESEAL  R IY0 - S IY1 L\nRESEALABLE  R IY0 - S IY1 - L AH0 - B AH0 L\nRESEALED  R IY0 - S IY1 L D\nRESEALS  R IY0 - S IY1 L Z\nRESEARCH  R IY0 - S ER1 CH\nRESEARCH'S  R IY0 - S ER1 - CH IH0 Z\nRESEARCH(2)  R IY1 - S ER0 CH\nRESEARCHED  R IY0 - S ER1 CH T\nRESEARCHER  R IY1 - S ER0 - CH ER0\nRESEARCHERS  R IY1 - S ER0 - CH ER0 Z\nRESEARCHERS'  R IY1 - S ER0 - CH ER0 Z\nRESEARCHES  R IY0 - S ER1 - CH IH0 Z\nRESEARCHING  R IY0 - S ER1 - CH IH0 NG\nRESEDA  R EH0 - S EY1 - D AH0\nRESEED  R IY0 - S IY1 D\nRESELL  R IY0 - S EH1 L\nRESELLER  R IY0 - S EH1 - L ER0\nRESELLERS  R IY0 - S EH1 - L ER0 Z\nRESELLING  R IY0 - S EH1 - L IH0 NG\nRESELLS  R IY0 - S EH1 L Z\nRESEMBLANCE  R IH0 - Z EH1 M - B L AH0 N S\nRESEMBLANCE(2)  R IY0 - Z EH1 M - B L AH0 N S\nRESEMBLANCES  R IY0 - Z EH1 M - B L AH0 N - S AH0 Z\nRESEMBLE  R IH0 - Z EH1 M - B AH0 L\nRESEMBLE(2)  R IY0 - Z EH1 M - B AH0 L\nRESEMBLED  R IH0 - Z EH1 M - B AH0 L D\nRESEMBLED(2)  R IY0 - Z EH1 M - B AH0 L D\nRESEMBLES  R IH0 - Z EH1 M - B AH0 L Z\nRESEMBLES(2)  R IY0 - Z EH1 M - B AH0 L Z\nRESEMBLING  R IH0 - Z EH1 M - B AH0 L - IH0 NG\nRESEMBLING(2)  R IY0 - Z EH1 M - B AH0 L - IH0 NG\nRESEMBLING(3)  R IY0 - Z EH1 M - B L IH0 NG\nRESENDE  R IH0 - S EH1 N - D EY0\nRESENDES  R EH1 - S IH0 N D Z\nRESENDEZ  R EY0 - S EY1 N - D EH0 Z\nRESENDIZ  R IH0 - S EH1 N - D IH0 Z\nRESENT  R IH0 - Z EH1 N T\nRESENT(2)  R IY0 - Z EH1 N T\nRESENTED  R IY0 - Z EH1 N - T AH0 D\nRESENTED(2)  R IY0 - Z EH1 - N AH0 D\nRESENTFUL  R IH0 - Z EH1 N T - F AH0 L\nRESENTING  R IH0 - Z EH1 N - T IH0 NG\nRESENTING(2)  R IY0 - Z EH1 N - T IH0 NG\nRESENTING(3)  R IH0 - Z EH1 - N IH0 NG\nRESENTING(4)  R IY0 - Z EH1 - N IH0 NG\nRESENTMENT  R IH0 - Z EH1 N T - M AH0 N T\nRESENTMENT(2)  R IH0 - Z EH1 N - M AH0 N T\nRESENTMENTS  R IH0 - Z EH1 N T - M AH0 N T S\nRESENTMENTS(2)  R IH0 - Z EH1 N - M AH0 N T S\nRESENTS  R IH0 - Z EH1 N T S\nRESER  R IY1 - Z ER0\nRESERVATION  R EH2 - Z ER0 - V EY1 - SH AH0 N\nRESERVATIONIST  R EH2 - Z ER0 - V EY1 - SH AH0 N - IH0 S T\nRESERVATIONISTS  R EH2 - Z ER0 - V EY1 - SH AH0 N - IH0 S T S\nRESERVATIONISTS(2)  R EH2 - Z ER0 - V EY1 - SH AH0 N - IH0 S S\nRESERVATIONISTS(3)  R EH2 - Z ER0 - V EY1 - SH AH0 N - IH0 S\nRESERVATIONS  R EH2 - Z ER0 - V EY1 - SH AH0 N Z\nRESERVE  R IH0 - Z ER1 V\nRESERVE'S  R IH0 - Z ER1 V Z\nRESERVE'S(2)  R IY0 - Z ER1 V Z\nRESERVE(2)  R IY0 - Z ER1 V\nRESERVED  R IH0 - Z ER1 V D\nRESERVED(2)  R IY0 - Z ER1 V D\nRESERVEESE  R EH2 - Z ER0 - V IY1 S\nRESERVES  R IH0 - Z ER1 V Z\nRESERVES(2)  R IY0 - Z ER1 V Z\nRESERVING  R IH0 - Z ER1 - V IH0 NG\nRESERVING(2)  R IY0 - Z ER1 - V IH0 NG\nRESERVIST  R IH0 - Z ER1 - V IH0 S T\nRESERVISTS  R IH0 - Z ER1 - V IH0 S T S\nRESERVISTS(2)  R IH0 - Z ER1 - V IH0 S S\nRESERVISTS(3)  R IH0 - Z ER1 - V IH0 S\nRESERVOIR  R EH1 - Z AH0 - V W AA2 R\nRESERVOIR(2)  R EH1 - Z ER0 - V W AA2 R\nRESERVOIRS  R EH1 - Z ER0 - V W AA2 R Z\nRESET  R IY0 - S EH1 T\nRESET(2)  R IY1 - S EH0 T\nRESETAR  R EH1 - S IH0 - T ER0\nRESETING  R IY0 - S EH1 - T IH0 NG\nRESETING(2)  R IY1 - S EH0 - T IH0 NG\nRESETS  R IY0 - S EH1 T S\nRESETS(2)  R IY1 - S EH0 T S\nRESETTABLE  R IY0 - S EH1 - T AH0 - B AH0 L\nRESETTLE  R IY0 - S EH1 - T AH0 L\nRESETTLED  R IY0 - S EH1 - T AH0 L D\nRESETTLEMENT  R IY0 - S EH1 - T AH0 L - M AH0 N T\nRESH  R EH1 SH\nRESHAPE  R IY0 - SH EY1 P\nRESHAPED  R IY0 - SH EY1 P T\nRESHAPING  R IY0 - SH EY1 - P IH0 NG\nRESHOT  R IY0 - SH AO1 T\nRESHUFFLE  R IY0 - SH AH1 - F AH0 L\nRESHUFFLED  R IY0 - SH AH1 - F AH0 L D\nRESHUFFLING  R IY0 - SH AH1 - F AH0 L - IH0 NG\nRESHUFFLING(2)  R IY0 - SH AH1 - F L IH0 NG\nRESIDE  R IH0 - Z AY1 D\nRESIDE(2)  R IY0 - Z AY1 D\nRESIDED  R IH0 - Z AY1 - D IH0 D\nRESIDENCE  R EH1 - Z IH0 - D AH0 N S\nRESIDENCES  R EH1 - Z IH0 - D AH0 N - S IH0 Z\nRESIDENCIES  R EH1 - Z IH0 - D EH2 N - S IY0 Z\nRESIDENCY  R EH1 - Z IH0 - D AH0 N - S IY0\nRESIDENT  R EH1 - Z IH0 - D AH0 N T\nRESIDENT'S  R EH1 - Z IH0 - D AH0 N T S\nRESIDENTIAL  R EH2 - Z IH0 - D EH1 N - CH AH0 L\nRESIDENTS  R EH1 - Z IH0 - D AH0 N T S\nRESIDENTS'  R EH1 - Z IH0 - D AH0 N T S\nRESIDES  R IH0 - Z AY1 D Z\nRESIDES(2)  R IY0 - Z AY1 D Z\nRESIDING  R IH0 - Z AY1 - D IH0 NG\nRESIDING(2)  R IY0 - Z AY1 - D IH0 NG\nRESIDUAL  R IH0 - Z IH1 - JH UW0 - AH0 L\nRESIDUALS  R IH0 - Z IH1 - JH UW0 - AH0 L Z\nRESIDUE  R EH1 - Z AH0 - D UW2\nRESIDUES  R EH1 - Z AH0 - D UW2 Z\nRESIGN  R IH0 - Z AY1 N\nRESIGN(2)  R IY0 - Z AY1 N\nRESIGN(3)  R IY0 - S AY1 N\nRESIGNATION  R EH2 - Z AH0 G - N EY1 - SH AH0 N\nRESIGNATION(2)  R EH2 - Z IH0 G - N EY1 - SH AH0 N\nRESIGNATIONS  R EH2 - Z IH0 G - N EY1 - SH AH0 N Z\nRESIGNED  R IH0 - Z AY1 N D\nRESIGNED(2)  R IY0 - Z AY1 N D\nRESIGNED(3)  R IY0 - S AY1 N D\nRESIGNEE  R EH2 - Z IH0 G - N IY1\nRESIGNEES  R EH2 - Z IH0 G - N IY1 Z\nRESIGNING  R IH0 - Z AY1 - N IH0 NG\nRESIGNING(2)  R IY0 - Z AY1 - N IH0 NG\nRESIGNING(3)  R IY0 - S AY1 - N IH0 NG\nRESIGNS  R IH0 - Z AY1 N Z\nRESIGNS(2)  R IY0 - Z AY1 N Z\nRESIGNS(3)  R IY0 - S AY1 N Z\nRESILIENCE  R IH0 - Z IH1 - L IY0 - AH0 N S\nRESILIENCE(2)  R IH0 - Z IH1 - L Y AH0 N S\nRESILIENCY  R IH0 - Z IH1 - L Y AH0 N - S IY0\nRESILIENT  R IH0 - Z IH1 - L Y AH0 N T\nRESIN  R EH1 - Z AH0 N\nRESIN(2)  R EH1 - Z IH0 N\nRESINS  R EH1 - Z AH0 N Z\nRESINS(2)  R EH1 - Z IH0 N Z\nRESIST  R IH0 - Z IH1 S T\nRESIST(2)  R IY0 - Z IH1 S T\nRESISTANCE  R IH0 - Z IH1 - S T AH0 N S\nRESISTANCE(2)  R IY0 - Z IH1 - S T AH0 N S\nRESISTANT  R IH0 - Z IH1 - S T AH0 N T\nRESISTANT(2)  R IY0 - Z IH1 - S T AH0 N T\nRESISTED  R IH0 - Z IH1 - S T IH0 D\nRESISTED(2)  R IY0 - Z IH1 - S T AH0 D\nRESISTED(3)  R IY0 - Z IH1 - S T IH0 D\nRESISTENCE  R IH0 - Z IH1 - S T AH0 N S\nRESISTING  R IH0 - Z IH1 - S T IH0 NG\nRESISTING(2)  R IY0 - Z IH1 - S T IH0 NG\nRESISTIVENESS  R IH2 - Z IH1 - S T IH2 V - N AH0 S\nRESISTORS  R IH0 - Z IH1 - S T ER0 Z\nRESISTS  R IH0 - Z IH1 S T S\nRESISTS(2)  R IY0 - Z IH1 S T S\nRESISTS(3)  R IH0 - Z IH1 S S\nRESISTS(4)  R IY0 - Z IH1 S S\nRESISTS(5)  R IH0 - Z IH1 S\nRESISTS(6)  R IY0 - Z IH1 S\nRESKE  R EH1 S K\nRESLER  R EH1 Z - L ER0\nRESNAIS  R EH0 S - N EY1\nRESNER  R EH1 S - N ER0\nRESNICK  R EH1 Z - N IH0 K\nRESNICK'S  R EH1 Z - N IH0 K S\nRESNIK  R EH1 S - N IH0 K\nRESO  R IH1 - Z OW0\nRESO'S  R IY1 - S OW0 Z\nRESO'S(2)  R IY1 - Z OW0 Z\nRESO'S(3)  R IH1 - S OW0 Z\nRESO'S(4)  R IH1 - Z OW0 Z\nRESO(2)  R IY1 - Z OW0\nRESO(3)  R IH1 - S OW0\nRESO(4)  R IY1 - S OW0\nRESOLD  R IY0 - S OW1 L D\nRESOLUTE  R EH1 - Z AH0 - L UW2 T\nRESOLUTELY  R EH1 - S AH0 - L UW2 T - L IY0\nRESOLUTELY(2)  R EH1 - Z AH0 - L UW2 T - L IY0\nRESOLUTION  R EH2 - Z AH0 - L UW1 - SH AH0 N\nRESOLUTION'S  R EH2 - Z AH0 - L UW1 - SH AH0 N Z\nRESOLUTIONS  R EH2 - Z AH0 - L UW1 - SH AH0 N Z\nRESOLVE  R IY0 - Z AA1 L V\nRESOLVED  R IY0 - Z AA1 L V D\nRESOLVES  R IY0 - Z AA1 L V Z\nRESOLVING  R IY0 - Z AA1 L - V IH0 NG\nRESONANCE  R EH1 - Z AH0 - N AH0 N S\nRESONANT  R EH1 - Z AH0 - N AH0 N T\nRESONATE  R EH1 - Z AH0 - N EY2 T\nRESONATED  R EH1 - Z AH0 - N EY2 - T IH0 D\nRESONATES  R EH1 - Z AH0 - N EY2 T S\nRESONATING  R EH1 - Z AH0 - N EY2 - T IH0 NG\nRESORT  R IH0 - Z AO1 R T\nRESORT'S  R IH0 - Z AO1 R T S\nRESORT(2)  R IY0 - Z AO1 R T\nRESORT(3)  R IY0 - S AO1 R T\nRESORTED  R IH0 - Z AO1 R - T IH0 D\nRESORTED(2)  R IY0 - Z AO1 R - T IH0 D\nRESORTED(3)  R IY0 - S AO1 R - T IH0 D\nRESORTING  R IH0 - Z AO1 R - T IH0 NG\nRESORTING(2)  R IY0 - Z AO1 R - T IH0 NG\nRESORTING(3)  R IY0 - S AO1 R - T IH0 NG\nRESORTS  R IH0 - Z AO1 R T S\nRESORTS'  R IH0 - Z AO1 R T S\nRESORTS(2)  R IY0 - Z AO1 R T S\nRESORTS(3)  R IY0 - S AO1 R T S\nRESOUND  R IY2 - S AW1 N D\nRESOUND(2)  R IY2 - Z AW1 N D\nRESOUNDING  R IY0 - S AW1 N - D IH0 NG\nRESOUNDINGLY  R IH0 - Z AW1 N - D IH0 NG - L IY0\nRESOURCE  R IY1 - S AO0 R S\nRESOURCEFUL  R IY0 - S AO1 R S - F AH0 L\nRESOURCEFULNESS  R IY0 - S AO1 R S - F AH0 L - N AH0 S\nRESOURCES  R IY1 - S AO0 R - S IH0 Z\nRESOURCES'  R IY1 - S AO0 R - S IH0 Z\nRESPEAK  R IY0 - S P IY1 K\nRESPECT  R IH0 - S P EH1 K T\nRESPECT(2)  R IY0 - S P EH1 K T\nRESPECTABILITY  R IY0 - S P EH2 K - T AH0 - B IH1 - L IH0 - T IY0\nRESPECTABLE  R IH0 - S P EH1 K - T AH0 - B AH0 L\nRESPECTABLE(2)  R IY0 - S P EH1 K - T AH0 - B AH0 L\nRESPECTABLY  R IY0 - S P EH1 K - T AH0 - B L IY0\nRESPECTED  R IH0 - S P EH1 K - T IH0 D\nRESPECTED(2)  R IY0 - S P EH1 K - T AH0 D\nRESPECTED(3)  R IY0 - S P EH1 K - T IH0 D\nRESPECTFUL  R IH0 - S P EH1 K T - F AH0 L\nRESPECTFULLY  R IH0 - S P EH1 K T - F AH0 - L IY0\nRESPECTING  R IY0 - S P EH1 K - T IH0 NG\nRESPECTIVE  R IH0 - S P EH1 K - T IH0 V\nRESPECTIVE(2)  R IY0 - S P EH1 K - T IH0 V\nRESPECTIVELY  R IH0 - S P EH1 K - T IH0 V - L IY0\nRESPECTS  R IH0 - S P EH1 K T S\nRESPECTS(2)  R IY0 - S P EH1 K T S\nRESPECTS(3)  R AH0 - S P EH1 K S\nRESPECTS(4)  R IY0 - S P EH1 K S\nRESPESS  R EY1 S - P IH0 S\nRESPIRATION  R EH2 - S P ER0 - EY1 - SH AH0 N\nRESPIRATOR  R EH1 - S P ER0 - EY2 - T ER0\nRESPIRATORS  R EH1 - S P ER0 - EY2 - T ER0 Z\nRESPIRATORY  R EH1 - S P ER0 - AH0 - T AO2 - R IY0\nRESPIRONIC  R EH2 - S P ER0 - AA1 - N IH0 K\nRESPIRONICS  R EH2 - S ER0 - AA1 - N IH0 K S\nRESPITE  R EH1 - S P IH0 T\nRESPLENDENT  R IY0 - S P L EH1 N - D AH0 N T\nRESPOND  R IH0 - S P AA1 N D\nRESPOND(2)  R IY0 - S P AA1 N D\nRESPONDED  R IH0 - S P AA1 N - D IH0 D\nRESPONDED(2)  R IY0 - S P AA1 N - D AH0 D\nRESPONDED(3)  R IY0 - S P AA1 N - D IH0 D\nRESPONDENT  R IH0 - S P AA1 N - D AH0 N T\nRESPONDENTS  R IH0 - S P AA1 N - D AH0 N T S\nRESPONDENTS'  R IH0 - S P AA1 N - D AH0 N T S\nRESPONDER  R IH0 - S P AA1 N - D ER0\nRESPONDERS  R IH0 - S P AA1 N - D ER0 Z\nRESPONDING  R IH0 - S P AA1 N - D IH0 NG\nRESPONDING(2)  R IY0 - S P AA1 N - D IH0 NG\nRESPONDS  R IH0 - S P AA1 N D Z\nRESPONDS(2)  R IY0 - S P AA1 N D Z\nRESPONSE  R IH0 - S P AA1 N S\nRESPONSE(2)  R IY0 - S P AA1 N S\nRESPONSES  R IH0 - S P AA1 N - S IH0 Z\nRESPONSES(2)  R IY0 - S P AA1 N - S AH0 Z\nRESPONSES(3)  R IY0 - S P AA1 N - S IH0 Z\nRESPONSIBILITIES  R IY0 - S P AA2 N - S AH0 - B IH1 - L AH0 - T IY0 Z\nRESPONSIBILITY  R IY0 - S P AA2 N - S AH0 - B IH1 - L AH0 - T IY0\nRESPONSIBLE  R IY0 - S P AA1 N - S AH0 - B AH0 L\nRESPONSIBLY  R IH0 - S P AA1 N - S AH0 - B L IY0\nRESPONSIVE  R IH0 - S P AA1 N - S IH0 V\nRESPONSIVENESS  R IH0 - S P AA1 N - S IH0 V - N AH0 S\nRESPRESS  R EH1 - S P R IH0 S\nRESS  R EH1 S\nRESSA  R EH1 - S AH0\nRESSA'S  R EH1 - S AH0 Z\nRESSEGUIE  R EH1 - S IH0 - G W IY0\nRESSEL  R EH1 - S AH0 L\nRESSLER  R EH1 S - L ER0\nREST  R EH1 S T\nRESTAGE  R IY0 - S T EY1 JH\nRESTAGED  R IY0 - S T EY1 JH D\nRESTAINO  R EH0 - S T AA0 - IY1 - N OW0\nRESTART  R IY0 - S T AA1 R T\nRESTARTED  R IY0 - S T AA1 R - T IH0 D\nRESTARTING  R IY0 - S T AA1 R - T IH0 NG\nRESTATE  R IY0 - S T EY1 T\nRESTATED  R IY0 - S T EY1 - T IH0 D\nRESTATEMENT  R IY0 - S T EY1 T - M AH0 N T\nRESTATEMENTS  R IY0 - S T EY1 T - M AH0 N T S\nRESTATES  R IY0 - S T EY1 T S\nRESTATING  R IY0 - S T EY1 - T IH0 NG\nRESTAURANT  R EH1 - S T ER0 - AA2 N T\nRESTAURANT'S  R EH1 - S T ER0 - AA2 N T S\nRESTAURANT'S(2)  R EH1 - S T R AA2 N T S\nRESTAURANT(2)  R EH1 - S T R AA2 N T\nRESTAURANTS  R EH1 - S T ER0 - AA2 N T S\nRESTAURANTS'  R EH1 - S T ER0 - AA2 N T S\nRESTAURANTS'(2)  R EH1 - S T R AA2 N T S\nRESTAURANTS(2)  R EH1 - S T R AA2 N T S\nRESTAURATEUR  R EH2 - S T ER0 - AH0 - T ER1\nRESTAURATEUR(2)  R EH2 - S T R AH0 - T ER1\nRESTAURATEURS  R EH2 - S T ER0 - AH0 - T ER1 Z\nRESTAURATEURS(2)  R EH2 - S T R AH0 - T ER1 Z\nRESTED  R EH1 - S T AH0 D\nRESTED(2)  R EH1 - S T IH0 D\nRESTER  R EH1 - S T ER0\nRESTFUL  R EH1 S T - F AH0 L\nRESTING  R EH1 - S T IH0 NG\nRESTITUTE  R EH1 - S T IH0 - T UW2 T\nRESTITUTION  R EH2 - S T IH0 - T UW1 - SH AH0 N\nRESTIVE  R EH1 - S T IH0 V\nRESTIVENESS  R EH1 - S T IH0 V - N AH0 S\nRESTIVO  R EH0 - S T IY1 - V OW0\nRESTLESS  R EH1 S T - L AH0 S\nRESTLESSLY  R EH1 S T - L AH0 S - L IY0\nRESTLESSNESS  R EH1 S T - L AH0 S - N AH0 S\nRESTO  R EH1 - S T OW0\nRESTOCK  R IY0 - S T AA1 K\nRESTOCKED  R IY0 - S T AA1 K T\nRESTOCKING  R IY0 - S T AA1 - K IH0 NG\nRESTON  R EH1 - S T AH0 N\nRESTORATION  R EH2 - S T ER0 - EY1 - SH AH0 N\nRESTORATIONS  R EH2 - S T ER0 - EY1 - SH AH0 N Z\nRESTORATIVE  R AH0 - S T AO1 - R AH0 - T IH0 V\nRESTORE  R IH0 - S T AO1 R\nRESTORED  R IH0 - S T AO1 R D\nRESTORER  R IH0 - S T AO1 - R ER0\nRESTORES  R IH0 - S T AO1 R Z\nRESTORING  R IH0 - S T AO1 - R IH0 NG\nRESTRAIN  R IY0 - S T R EY1 N\nRESTRAINED  R IY0 - S T R EY1 N D\nRESTRAINING  R IY0 - S T R EY1 - N IH0 NG\nRESTRAINS  R IY0 - S T R EY1 N Z\nRESTRAINT  R IH0 - S T R EY1 N T\nRESTRAINT(2)  R IY0 - S T R EY1 N T\nRESTRAINTS  R IH0 - S T R EY1 N T S\nRESTRAINTS(2)  R IY0 - S T R EY1 N T S\nRESTREPO  R EH0 - S T R EH1 - P OW0\nRESTRICT  R IY0 - S T R IH1 K T\nRESTRICTED  R IY0 - S T R IH1 K - T AH0 D\nRESTRICTED(2)  R IY0 - S T R IH1 K - T IH0 D\nRESTRICTING  R IY0 - S T R IH1 K - T IH0 NG\nRESTRICTION  R IY0 S - T R IH1 K - SH AH0 N\nRESTRICTIONS  R IY0 S - T R IH1 K - SH AH0 N Z\nRESTRICTIVE  R IY0 - S T R IH1 K - T IH0 V\nRESTRICTIVENESS  R AH0 - S T R IH1 K - T IH0 V - N AH0 S\nRESTRICTS  R IY0 - S T R IH1 K T S\nRESTROOM  R EH1 S T - R UW2 M\nRESTROOMS  R EH1 S T - R UW2 M Z\nRESTRUCTURE  R IY0 - S T R AH1 K - CH ER0\nRESTRUCTURED  R IY0 - S T R AH1 K - CH ER0 D\nRESTRUCTURES  R IY0 - S T R AH1 K - CH ER0 Z\nRESTRUCTURING  R IY0 - S T R AH1 K - CH ER0 - IH0 NG\nRESTRUCTURINGS  R IY0 - S T R AH1 K - CH ER0 - IH0 NG Z\nRESTS  R EH1 S T S\nRESTYLE  R IY0 - S T AY1 L\nRESTYLED  R IY0 - S T AY1 L D\nRESUBMIT  R IY2 - S AH0 B - M IH1 T\nRESUBMITTED  R IY2 - S AH0 B - M IH1 - T IH0 D\nRESUBMITTING  R IY2 - S AH0 B - M IH1 - T IH0 NG\nRESULT  R IH0 - Z AH1 L T\nRESULT(2)  R IY0 - Z AH1 L T\nRESULTANT  R IY0 - Z AH1 L - T AH0 N T\nRESULTED  R IH0 - Z AH1 L - T IH0 D\nRESULTED(2)  R IY0 - Z AH1 L - T AH0 D\nRESULTED(3)  R IY0 - Z AH1 L - T IH0 D\nRESULTING  R IH0 - Z AH1 L - T IH0 NG\nRESULTING(2)  R IY0 - Z AH1 L - T IH0 NG\nRESULTS  R IH0 - Z AH1 L T S\nRESULTS(2)  R IY0 - Z AH1 L T S\nRESUME  R IH0 - Z UW1 M\nRESUME(2)  R IY0 - Z UW1 M\nRESUME(3)  R EH1 - Z AH0 - M EY2\nRESUMED  R IH0 - Z UW1 M D\nRESUMED(2)  R IY0 - Z UW1 M D\nRESUMES  R IH0 - Z UW1 M Z\nRESUMES(2)  R IY0 - Z UW1 M Z\nRESUMES(3)  R EH1 - Z AH0 - M EY2 Z\nRESUMING  R IH0 - Z UW1 - M IH0 NG\nRESUMING(2)  R IY0 - Z UW1 - M IH0 NG\nRESUMPTION  R IH0 - Z AH1 M P - SH AH0 N\nRESUMPTION(2)  R IY0 - Z AH1 M P - SH AH0 N\nRESUMPTION(3)  R IH0 - Z AH1 M - SH AH0 N\nRESUMPTION(4)  R IY0 - Z AH1 M - SH AH0 N\nRESUPPLY  R IY0 - S AH0 - P L AY1\nRESURFACE  R IY0 - S ER1 - F AH0 S\nRESURFACED  R IY0 - S ER1 - F AH0 S T\nRESURFACING  R IY0 - S ER1 - F AH0 - S IH0 NG\nRESURGENCE  R IY0 - S ER1 - JH AH0 N S\nRESURGENCY  R IH0 - S ER1 - JH AH0 N - S IY0\nRESURGENCY(2)  R IY0 - S ER1 - JH AH0 N - S IY0\nRESURGENT  R IH0 - S ER1 - JH AH0 N T\nRESURGENT(2)  R IY0 - S ER1 - JH AH0 N T\nRESURGING  R IY0 - S ER1 - JH IH0 NG\nRESURRECT  R EH2 - Z ER0 - EH1 K T\nRESURRECTED  R EH2 - Z ER0 - EH1 K - T IH0 D\nRESURRECTING  R EH2 - Z ER0 - EH1 K - T IH0 NG\nRESURRECTION  R EH2 - Z ER0 - EH1 K - SH AH0 N\nRESUSCITATE  R IH0 - S AH1 - S IH0 - T EY2 T\nRESUSCITATE(2)  R IY0 - S AH1 - S IH0 - T EY2 T\nRESUSCITATED  R IH0 - S AH1 - S IH0 - T EY2 - T IH0 D\nRESUSCITATING  R IH0 - S AH1 - S IH0 - T EY2 - T IH0 NG\nRESUSCITATION  R IH0 - S AH2 - S IH0 - T EY1 - SH AH0 N\nRET  R EH1 T\nRETA  R EH1 - T AH0\nRETABLOS  R IY0 - T AE1 - B L OW0 S\nRETAIL  R IY1 - T EY2 L\nRETAILED  R IY1 - T EY2 L D\nRETAILER  R IY1 - T EY2 - L ER0\nRETAILER'S  R IY1 - T EY2 - L ER0 Z\nRETAILERS  R IY1 - T EY2 - L ER0 Z\nRETAILERS'  R IY1 - T EY2 - L ER0 Z\nRETAILING  R IY1 - T EY2 - L IH0 NG\nRETAILING'S  R IY1 - T EY2 - L IH0 NG Z\nRETAILS  R IY1 - T EY2 L Z\nRETAIN  R IH0 - T EY1 N\nRETAIN(2)  R IY0 - T EY1 N\nRETAINED  R IH0 - T EY1 N D\nRETAINED(2)  R IY0 - T EY1 N D\nRETAINER  R IH0 - T EY1 - N ER0\nRETAINER(2)  R IY0 - T EY1 - N ER0\nRETAINERS  R IH0 - T EY1 - N ER0 Z\nRETAINING  R IH0 - T EY1 - N IH0 NG\nRETAINING(2)  R IY0 - T EY1 - N IH0 NG\nRETAINS  R IH0 - T EY1 N Z\nRETAINS(2)  R IY0 - T EY1 N Z\nRETAKE  R IY1 - T EY1 K\nRETAKE(2)  R IY0 - T EY1 K\nRETAKEN  R IY0 - T EY1 - K AH0 N\nRETAKING  R IY0 - T EY1 - K IH0 NG\nRETALIATE  R IH0 - T AE1 - L IY0 - EY2 T\nRETALIATE(2)  R IY0 - T AE1 - L IY0 - EY2 T\nRETALIATED  R IH0 - T AE1 - L IY0 - EY2 - T IH0 D\nRETALIATED(2)  R IY0 - T AE1 - L IY0 - EY2 - T IH0 D\nRETALIATING  R IH0 - T AE1 - L IY0 - EY2 - T IH0 NG\nRETALIATION  R IY0 - T AE2 - L IY0 - EY1 - SH AH0 N\nRETALIATORY  R IY0 - T AE1 - L Y AH0 - T AO2 - R IY0\nRETANA  R EH0 - T AE1 - N AH0\nRETARD  R IH0 - T AA1 R D\nRETARD(2)  R IY0 - T AA1 R D\nRETARDANT  R IY0 - T AA1 R - D AH0 N T\nRETARDATION  R IY0 - T AA0 R - D EY1 - SH AH0 N\nRETARDED  R IH0 - T AA1 R - D IH0 D\nRETARDED(2)  R IY0 - T AA1 R - D AH0 D\nRETARDED(3)  R IY0 - T AA1 R - D IH0 D\nRETARDING  R IH0 - T AA1 R - D IH0 NG\nRETARDING(2)  R IY0 - T AA1 R - D IH0 NG\nRETARDS  R IH0 - T AA1 R D Z\nRETARDS(2)  R IY0 - T AA1 R D Z\nRETELL  R IY0 - T EH1 L\nRETELLING  R IY0 - T EH1 - L IH0 NG\nRETEMEYER  R EH1 - T AH0 - M AY2 R\nRETENTION  R IY0 - T EH1 N - SH AH0 N\nRETEST  R IY1 - T EH1 S T\nRETESTED  R IY0 - T EH1 - S T IH0 D\nRETESTING  R IY0 - T EH1 - S T IH0 NG\nRETESTS  R IY1 - T EH1 S T S\nRETESTS(2)  R IY1 - T EH1 S S\nRETESTS(3)  R IY1 - T EH1 S\nRETHERFORD  R IH0 - TH ER1 - F ER0 D\nRETHINK  R IY0 - TH IH1 NG K\nRETHINKING  R IY0 - TH IH1 NG - K IH0 NG\nRETHOUGHT  R IY0 - TH AO1 T\nRETICENCE  R EH1 - T IH0 - S AH0 N S\nRETICENT  R EH1 - T IH0 - S AH0 N T\nRETIN  R EH1 - T IH0 N\nRETINA  R EH1 - T AH0 - N AH0\nRETINAL  R EH1 - T AH0 - N AH0 L\nRETINOBLASTOMA  R EH2 - T IH0 - N OW2 - B L AE2 - S T OW1 - M AH0\nRETINOID  R EH1 - T IH0 - N OY0 D\nRETINOIDS  R EH1 - T IH0 - N OY0 D Z\nRETINUE  R EH1 - T AH0 - N UW2\nRETINYL  R EH1 - T IH0 - N AH0 L\nRETIRE  R IH0 - T AY1 R\nRETIRE(2)  R IY0 - T AY1 R\nRETIRE(3)  R IY2 - T AY1 - ER0\nRETIRED  R IH0 - T AY1 R D\nRETIRED(2)  R IY0 - T AY1 - ER0 D\nRETIRED(3)  R IY0 - T AY1 R D\nRETIREE  R IY0 - T AY1 - R IY1\nRETIREE'S  R IH0 - T AY2 - R IY1 Z\nRETIREES  R IY0 - T AY1 - R IY1 Z\nRETIREES'  R IH0 - T AY2 - R IY1 Z\nRETIREMENT  R IY0 - T AY1 - ER0 - M AH0 N T\nRETIREMENT(2)  R IH0 - T AY1 - ER0 - M AH0 N T\nRETIREMENTS  R IH0 - T AY1 R - M AH0 N T S\nRETIREMENTS(2)  R IY0 - T AY1 R - M AH0 N T S\nRETIRES  R IH0 - T AY1 R Z\nRETIRES(2)  R IY0 - T AY1 - ER0 Z\nRETIRES(3)  R IY0 - T AY1 R Z\nRETIRING  R IH0 - T AY1 - R IH0 NG\nRETIRING(2)  R IY0 - T AY1 - ER0 - IH0 NG\nRETIRING(3)  R IY0 - T AY1 - R IH0 NG\nRETLIN  R EH1 T - L IH0 N\nRETO  R IY1 - T UW1\nRETOOK  R IY0 - T UH1 K\nRETOOL  R IY0 - T UW1 L\nRETOOLED  R IY0 - T UW1 L D\nRETOOLING  R IY0 - T UW1 - L IH0 NG\nRETORT  R IY1 - T AO2 R T\nRETORTED  R IY0 - T AO1 R - T IH0 D\nRETORTS  R IH0 - T AO1 R T S\nRETORTS(2)  R IY0 - T AO1 R T S\nRETOUCHING  R IY0 - T AH1 - CH IH0 NG\nRETRACE  R IY0 - T R EY1 S\nRETRACED  R IY0 - T R EY1 S T\nRETRACEMENT  R IY0 - T R EY1 S - M AH0 N T\nRETRACING  R IY0 - T R EY1 - S IH0 NG\nRETRACT  R IY0 - T R AE1 K T\nRETRACTABLE  R IY0 - T R AE1 K - T AH0 - B AH0 L\nRETRACTED  R IY0 - T R AE1 K - T AH0 D\nRETRACTING  R IY0 - T R AE1 K - T IH0 NG\nRETRACTION  R IY0 - T R AE1 K - SH AH0 N\nRETRACTS  R IY0 - T R AE1 K T S\nRETRAIN  R IY0 - T R EY1 N\nRETRAINED  R IY0 - T R EY1 N D\nRETRAINING  R IY0 - T R EY1 - N IH0 NG\nRETRANSMISSION  R IY2 - T R AE0 N Z - M IH1 - SH AH0 N\nRETREAD  R IY0 - T R EH1 D\nRETREADING  R IY0 - T R EH1 - D IH0 NG\nRETREADS  R IY0 - T R EH1 D Z\nRETREAT  R IY0 - T R IY1 T\nRETREATED  R IY0 - T R IY1 - T AH0 D\nRETREATED(2)  R IY0 - T R IY1 - T IH0 D\nRETREATING  R IY0 - T R IY1 - T IH0 NG\nRETREATS  R IY0 - T R IY1 T S\nRETRENCH  R IY0 - T R EH1 N CH\nRETRENCHED  R IY0 - T R EH1 N CH T\nRETRENCHING  R IY0 - T R EH1 N - CH IH0 NG\nRETRENCHMENT  R IY0 - T R EH1 N CH - M AH0 N T\nRETRENCHMENTS  R IY0 - T R EH1 N CH - M AH0 N T S\nRETRIAL  R IY0 - T R AY1 - AH0 L\nRETRIBUTION  R EH2 - T R AH0 - B Y UW1 - SH AH0 N\nRETRIED  R IY0 - T R AY1 D\nRETRIEVAL  R IH0 - T R IY1 - V AH0 L\nRETRIEVAL(2)  R IY0 - T R IY1 - V AH0 L\nRETRIEVE  R IH0 - T R IY1 V\nRETRIEVE(2)  R IY0 - T R IY1 V\nRETRIEVED  R IY0 - T R IY1 V D\nRETRIEVER  R IY0 - T R IY1 - V ER0\nRETRIEVERS  R IY0 - T R IY1 - V ER0 Z\nRETRIEVES  R IH0 - T R IY1 V Z\nRETRIEVES(2)  R IY0 - T R IY1 V Z\nRETRIEVING  R IY0 - T R IY1 - V IH0 NG\nRETRO  R EH1 - T R OW0\nRETROACTIVE  R EH2 - T R OW0 - AE1 K - T IH0 V\nRETROACTIVELY  R EH2 - T R OW0 - AE1 K - T IH0 V - L IY0\nRETROACTIVITY  R EH2 - T R OW0 - AE0 K - T IH1 - V IH0 - T IY0\nRETROFIT  R EH1 - T R OW0 - F IH2 T\nRETROFITS  R EH1 - T R OW0 - F IH2 T S\nRETROFITTED  R EH1 - T R OW2 - F IH2 - T IH0 D\nRETROFITTER  R EH1 - T R OW2 - F IH2 - T ER0\nRETROFITTING  R EH1 - T R OW0 - F IH2 - T IH0 NG\nRETROGRADE  R EH1 - T R AH0 - G R EY2 D\nRETROSPECT  R EH1 - T R AH0 - S P EH2 K T\nRETROSPECTIVE  R EH2 - T R AH0 - S P EH1 K - T IH0 V\nRETROSPECTIVELY  R EH2 - T R OW0 - S P EH1 K - T IH0 V - L IY0\nRETROVIR  R EH1 - T R OW0 - V IH2 R\nRETROVIRUS  R EH2 - T R OW0 - V AY1 - R AH0 S\nRETROVIRUSES  R EH2 - T R OW0 - V AY1 - R AH0 - S IH0 Z\nRETRY  R IY0 - T R AY1\nRETRYING  R IY0 - T R AY1 - IH0 NG\nRETTBERG  R EH1 T - B ER0 G\nRETTER  R EH1 - T ER0\nRETTEW  R EH1 - CH UW0\nRETTIG  R EH1 - T IH0 G\nRETTINGER  R EH1 - T IH0 N - JH ER0\nRETTINGER(2)  R EH1 - T IH0 - NG ER0\nRETTKE  R EH1 T - K IY0\nRETTON  R EH1 - T AH0 N\nRETURN  R IH0 - T ER1 N\nRETURN(2)  R IY0 - T ER1 N\nRETURNABLE  R IY0 - T ER1 - N AH0 - B AH0 L\nRETURNED  R IH0 - T ER1 N D\nRETURNED(2)  R IY0 - T ER1 N D\nRETURNEE  R IH0 - T ER0 - N IY1\nRETURNEES  R IH0 - T ER0 - N IY1 Z\nRETURNING  R IH0 - T ER1 - N IH0 NG\nRETURNING(2)  R IY0 - T ER1 - N IH0 NG\nRETURNS  R IH0 - T ER1 N Z\nRETURNS'  R AH0 - T ER1 N Z\nRETURNS'(2)  R IY0 - T ER1 N Z\nRETURNS(2)  R IY0 - T ER1 N Z\nRETZ  R EH1 T S\nRETZER  R EH1 T - Z ER0\nRETZLAFF  R EH1 T Z - L AH0 F\nRETZLOFF  R EH1 T Z - L AO0 F\nREUBEN  R UW1 - B AH0 N\nREUBER  R OY1 - B ER0\nREUL  R UW1 L\nREULAND  R OY1 - L AH0 N D\nREULE  R UW1 L\nREUM  R IY1 - AH0 M\nREUNIFICATION  R IY0 - UW2 - N AH0 - F AH0 - K EY1 - SH AH0 N\nREUNIFIED  R IY0 - UW1 - N AH0 - F AY2 D\nREUNIFY  R IY0 - UW1 - N AH0 - F AY2\nREUNION  R IY0 - UW1 - N Y AH0 N\nREUNIONS  R IY0 - UW1 - N Y AH0 N Z\nREUNITE  R IY2 - UW0 - N AY1 T\nREUNITED  R IY2 - UW0 - N AY1 - T IH0 D\nREUNITES  R IY2 - UW0 - N AY1 T S\nREUNITING  R IY2 - UW0 - N AY1 - T IH0 NG\nREUSABLE  R IY0 - UW1 - Z AH0 - B AH0 L\nREUSCH  R OY1 SH\nREUSE  R IY0 - Y UW1 S\nREUSE(2)  R IY0 - Y UW1 Z\nREUSED  R IY0 - UW1 Z D\nREUSING  R IY0 - Y UW1 - Z IH0 NG\nREUSS  R UW1 S\nREUSSER  R OY1 - S ER0\nREUST  R UW1 S T\nREUTER  R OY1 - T ER0\nREUTER'S  R OY1 - T ER0 Z\nREUTERS  R OY1 - T ER0 Z\nREUTERS'  R OY1 - T ER0 Z\nREUTERS'S  R OY1 - T ER0 - Z IH0 Z\nREUTERS'S(2)  R OY1 - T ER0 Z\nREUTGERS  R OY1 T - G ER0 Z\nREUTHER  R OY1 - DH ER0\nREUTTER  R OY1 - T ER0\nREUTZEL  R OY1 T - Z AH0 L\nREV  R EH1 V\nREVA  R EY1 - V AH0\nREVAK  R EH1 - V AH0 K\nREVALUATION  R IY0 - V AE1 L - Y UW0 - EY1 - SH AH0 N\nREVALUATIONS  R IY0 - IH0 - V AE2 L - Y UW0 - EY1 - SH AH0 N Z\nREVALUE  R IY0 - V AE1 L - Y UW2\nREVALUED  R IY0 - V AE1 L - Y UW0 D\nREVALUING  R IY0 - V AE1 L - Y UW0 - IH0 NG\nREVAMP  R IY0 - V AE1 M P\nREVAMPED  R IY0 - V AE1 M P T\nREVAMPING  R IY0 - V AE1 M - P IH0 NG\nREVAMPS  R IY0 - V AE1 M P S\nREVARD  R IH0 - V AA1 R D\nREVCO  R EH1 V - K OW0\nREVCO'S  R EH1 V - K OW0 Z\nREVEAL  R IH0 - V IY1 L\nREVEAL(2)  R IY0 - V IY1 L\nREVEALED  R IH0 - V IY1 L D\nREVEALED(2)  R IY0 - V IY1 L D\nREVEALING  R IH0 - V IY1 - L IH0 NG\nREVEALING(2)  R IY0 - V IY1 - L IH0 NG\nREVEALS  R IH0 - V IY1 L Z\nREVEALS(2)  R IY0 - V IY1 L Z\nREVEL  R EH1 - V AH0 L\nREVELATION  R EH2 - V AH0 - L EY1 - SH AH0 N\nREVELATIONS  R EH2 - V AH0 - L EY1 - SH AH0 N Z\nREVELATORY  R IH0 - V EH1 - L AH0 - T AO2 - R IY0\nREVELED  R EH1 - V AH0 L D\nREVELER  R EH1 - V AH0 - L ER0\nREVELERS  R EH1 - V AH0 - L ER0 Z\nREVELES  R EY0 - V EY1 - L EH0 S\nREVELING  R EH1 - V AH0 L - IH0 NG\nREVELL  R EY0 - V EY1 L\nREVELLE  R IH0 - V EH1 L\nREVELLO  R EH0 - V EH1 - L OW0\nREVELRY  R EH1 - V AH0 L - R IY0\nREVELS  R EH1 - V AH0 L Z\nREVENGE  R IY0 - V EH1 N JH\nREVENUE  R EH1 - V AH0 - N UW2\nREVENUE(2)  R EH1 - V AH0 - N Y UW2\nREVENUES  R EH1 - V AH0 - N UW2 Z\nREVENUES(2)  R EH1 - V AH0 - N Y UW2 Z\nREVERB  R IY0 - V ER1 B\nREVERBED  R IY0 - V ER1 B D\nREVERBERATE  R IH0 - V ER1 - B ER0 - AH0 T\nREVERBERATE(2)  R IH0 - V ER1 - B ER0 - EY0 T\nREVERBERATED  R IH0 - V ER1 - B ER0 - EY2 - T IH0 D\nREVERBERATED(2)  R IY0 - V ER1 - B ER0 - EY2 - T AH0 D\nREVERBERATED(3)  R IY0 - V ER1 - B ER0 - EY2 - T IH0 D\nREVERBERATES  R IH0 - V ER1 - B ER0 - EY2 T S\nREVERBERATING  R IH0 - V ER1 - B ER0 - EY2 - T IH0 NG\nREVERBERATING(2)  R IY0 - V ER1 - B ER0 - EY2 - T IH0 NG\nREVERBERATION  R IY0 - V ER2 - B ER0 - EY1 - SH AH0 N\nREVERBERATIONS  R IH0 - V ER2 - B ER0 - EY1 - SH AH0 N Z\nREVERCOMB  R EH1 - V ER0 - K AH0 M\nREVERE  R IH0 - V IH1 R\nREVERED  R IH0 - V IH1 R D\nREVERENCE  R EH1 - V ER0 - AH0 N S\nREVEREND  R EH1 - V ER0 - AH0 N D\nREVEREND(2)  R EH1 - V R AH0 N D\nREVERENT  R EH1 - V ER0 - AH0 N T\nREVERENTIAL  R EH2 - V ER0 - EH1 N - CH AH0 L\nREVERENTIAL(2)  R EH2 - V ER0 - EH1 N - SH AH0 L\nREVERENTLY  R EH1 - V ER0 - AH0 N T - L IY0\nREVERIE  R EH1 - V ER0 - IY0\nREVERIES  R EH1 - V ER0 - IY0 Z\nREVERON  R EH1 - V ER0 - AA2 N\nREVERON'S  R EH1 - V ER0 - AA2 N Z\nREVERSAL  R IH0 - V ER1 - S AH0 L\nREVERSAL(2)  R IY0 - V ER1 - S AH0 L\nREVERSALS  R IH0 - V ER1 - S AH0 L Z\nREVERSALS(2)  R IY0 - V ER1 - S AH0 L Z\nREVERSE  R IH0 - V ER1 S\nREVERSE(2)  R IY0 - V ER1 S\nREVERSED  R IH0 - V ER1 S T\nREVERSED(2)  R IY0 - V ER1 S T\nREVERSER  R IH0 - V ER1 - S ER0\nREVERSERS  R IH0 - V ER1 - S ER0 Z\nREVERSES  R IH0 - V ER1 - S IH0 Z\nREVERSES(2)  R IY0 - V ER1 - S AH0 Z\nREVERSES(3)  R IY0 - V ER1 - S IH0 Z\nREVERSIBLE  R IH0 - V ER1 - S AH0 - B AH0 L\nREVERSIBLE(2)  R IY0 - V ER1 - S AH0 - B AH0 L\nREVERSING  R IH0 - V ER1 - S IH0 NG\nREVERSING(2)  R IY0 - V ER1 - S IH0 NG\nREVERSION  R IH0 - V ER1 - ZH AH0 N\nREVERT  R IH0 - V ER1 T\nREVERT(2)  R IY0 - V ER1 T\nREVERTED  R IH0 - V ER1 - T IH0 D\nREVERTED(2)  R IY0 - V ER1 - T IH0 D\nREVERTING  R IH0 - V ER1 - T IH0 NG\nREVERTS  R IH0 - V ER1 T S\nREVES  R IY1 V Z\nREVETTE  R IH0 - V EH1 T\nREVIER  R IY1 - V IY0 - ER0\nREVIEW  R IY2 - V Y UW1\nREVIEW'S  R IY0 - V Y UW1 Z\nREVIEWED  R IY0 - V Y UW1 D\nREVIEWER  R IY0 - V Y UW1 - ER0\nREVIEWER'S  R IY0 - V Y UW1 - ER0 Z\nREVIEWERS  R IY0 - V Y UW1 - ER0 Z\nREVIEWING  R IY0 - V Y UW1 - IH0 NG\nREVIEWS  R IY0 - V Y UW1 Z\nREVIEWS(2)  R AH0 - V Y UW1 Z\nREVIGLIO  R AH0 - V IH1 G - L IY0 - OW0\nREVILE  R IY0 - V AY1 L\nREVILED  R IY0 - V AY1 L D\nREVILLA  R EH0 - V IH1 - L AH0\nREVILLE  R EH1 - V IH2 L\nREVIS  R EH1 - V IH0 S\nREVISE  R IH0 - V AY1 Z\nREVISE(2)  R IY0 - V AY1 Z\nREVISED  R IH0 - V AY1 Z D\nREVISED(2)  R IY0 - V AY1 Z D\nREVISES  R IH0 - V AY1 - Z IH0 Z\nREVISES(2)  R IY0 - V AY1 - Z IH0 Z\nREVISING  R IH0 - V AY1 - Z IH0 NG\nREVISING(2)  R IY0 - V AY1 - Z IH0 NG\nREVISION  R IY0 - V IH1 - ZH AH0 N\nREVISIONISM  R IY0 - V IH1 - ZH AH0 N - IH2 - Z AH0 M\nREVISIONIST  R IY0 - V IH1 - ZH AH0 N - IH0 S T\nREVISIONISTS  R IY0 - V IH1 - ZH AH0 N - IH0 S T S\nREVISIONISTS(2)  R IY0 - V IH1 - ZH AH0 N - IH0 S S\nREVISIONISTS(3)  R IY0 - V IH1 - ZH AH0 N - IH0 S\nREVISIONS  R IY0 - V IH1 - ZH AH0 N Z\nREVISIT  R IY0 - V IH1 - Z IH0 T\nREVISITED  R IY0 - V IH1 - Z AH0 - T IH0 D\nREVISITING  R IY0 - V IH1 - Z IH0 - T IH0 NG\nREVISITS  R IY0 - V IH1 - Z IH0 T S\nREVITALIZATION  R IY2 - V AY2 - T AH0 - L AH0 - Z EY1 - SH AH0 N\nREVITALIZE  R IY0 - V AY1 - T AH0 - L AY2 Z\nREVITALIZED  R IY0 - V AY1 - T AH0 - L AY2 Z D\nREVITALIZING  R IY0 - V AY1 - T AH0 - L AY2 - Z IH0 NG\nREVIVAL  R IH0 - V AY1 - V AH0 L\nREVIVAL(2)  R IY0 - V AY1 - V AH0 L\nREVIVALIST  R IY0 - V AY1 - V AH0 - L IH0 S T\nREVIVALS  R IY0 - V AY1 - V AH0 L Z\nREVIVE  R IH0 - V AY1 V\nREVIVE(2)  R IY0 - V AY1 V\nREVIVED  R IH0 - V AY1 V D\nREVIVED(2)  R IY0 - V AY1 V D\nREVIVES  R IY0 - V AY1 V Z\nREVIVING  R IH0 - V AY1 - V IH0 NG\nREVIVING(2)  R IY0 - V AY1 - V IH0 NG\nREVLON  R EH1 - V L AA0 N\nREVLON'S  R EH1 - V L AA0 N Z\nREVOCABLE  R EH1 - V AH0 - K AH0 - B AH0 L\nREVOCATION  R EH2 - V AH0 - K EY1 - SH AH0 N\nREVOCATIONS  R EH2 - V AH0 - K EY1 - SH AH0 N Z\nREVOIR  R IH0 - V W AA1 R\nREVOKE  R IH0 - V OW1 K\nREVOKE(2)  R IY0 - V OW1 K\nREVOKED  R IH0 - V OW1 K T\nREVOKED(2)  R IY0 - V OW1 K T\nREVOKING  R IH0 - V OW1 - K IH0 NG\nREVOKING(2)  R IY0 - V OW1 - K IH0 NG\nREVOLT  R IH0 - V OW1 L T\nREVOLT(2)  R IY0 - V OW1 L T\nREVOLTED  R IH0 - V OW1 L - T IH0 D\nREVOLTED(2)  R IY0 - V OW1 L - T AH0 D\nREVOLTED(3)  R IY0 - V OW1 L - T IH0 D\nREVOLTING  R IY0 - V OW1 L - T IH0 NG\nREVOLTS  R IY0 - V OW1 L T S\nREVOLUCIONARIO  R EH2 - V OW0 - L UW2 - S IY0 - AH0 - N EH1 - R IY0 - OW0\nREVOLUTION  R EH2 - V AH0 - L UW1 - SH AH0 N\nREVOLUTION'S  R EH2 - V AH0 - L UW1 - SH AH0 N Z\nREVOLUTIONARIES  R EH2 - V AH0 - L UW1 - SH AH0 N - EH2 - R IY0 Z\nREVOLUTIONARY  R EH2 - V AH0 - L UW1 - SH AH0 N - EH2 - R IY0\nREVOLUTIONIST  R EH2 - V AH0 - L UW1 - SH AH0 N - IH0 S T\nREVOLUTIONISTS  R EH2 - V AH0 - L UW1 - SH AH0 N - IH0 S T S\nREVOLUTIONISTS(2)  R EH2 - V AH0 - L UW1 - SH AH0 N - IH0 S S\nREVOLUTIONISTS(3)  R EH2 - V AH0 - L UW1 - SH AH0 N - IH0 S\nREVOLUTIONIZE  R EH2 - V AH0 - L UW1 - SH AH0 N - AY2 Z\nREVOLUTIONIZED  R EH2 - V AH0 - L UW1 - SH AH0 N - AY2 Z D\nREVOLUTIONIZING  R EH2 - V AH0 - L UW1 - SH AH0 N - AY2 - Z IH0 NG\nREVOLUTIONS  R EH2 - V AH0 - L UW1 - SH AH0 N Z\nREVOLVE  R IY0 - V AA1 L V\nREVOLVED  R IY0 - V AA1 L V D\nREVOLVER  R IH0 - V AA1 L - V ER0\nREVOLVERS  R IH0 - V AA1 L - V ER0 Z\nREVOLVES  R IY0 - V AA1 L V Z\nREVOLVING  R IY0 - V AA1 L - V IH0 NG\nREVORD  R IH0 - V AO1 R D\nREVS  R EH1 V Z\nREVSON  R EH1 V - S AH0 N\nREVUE  R IH0 - V Y UW1\nREVUELTA  R AH0 V - W EH1 L - T AH0\nREVUES  R IH0 - V Y UW1 Z\nREVULSION  R IH0 - V AH1 L - SH AH0 N\nREVULSION(2)  R IY0 - V AH1 L - SH AH0 N\nREVVED  R EH1 V D\nREVVING  R EH1 - V IH0 NG\nREVZIN  R EH1 V - Z IH0 N\nREW  R UW1\nREWARD  R IH0 - W AO1 R D\nREWARD(2)  R IY0 - W AO1 R D\nREWARDED  R IH0 - W AO1 R - D IH0 D\nREWARDED(2)  R IY0 - W AO1 R - D AH0 D\nREWARDED(3)  R IY0 - W AO1 R - D IH0 D\nREWARDING  R IH0 - W AO1 R - D IH0 NG\nREWARDING(2)  R IY0 - W AO1 R - D IH0 NG\nREWARDS  R IH0 - W AO1 R D Z\nREWARDS(2)  R IY0 - W AO1 R D Z\nREWATCHING  R IY0 - W AA1 - CH IH0 NG\nREWERTS  R UW1 - ER0 T S\nREWEY  R UW1 - IY0\nREWIND  R IY1 - W AY0 N D\nREWIRE  R IY0 - W AY1 - ER0\nREWIRED  R IY0 - W AY1 - ER0 D\nREWIRING  R IY0 - W AY1 - ER0 - IH0 NG\nREWIS  R UW1 - IH0 S\nREWORD  R IY0 - W ER1 D\nREWORK  R IY0 - W ER1 K\nREWORKED  R IY0 - W ER1 K T\nREWORKING  R IY0 - W ER1 - K IH0 NG\nREWRITE  R IY0 - R AY1 T\nREWRITE(2)  R IY1 - R AY2 T\nREWRITES  R IY0 - R AY1 T S\nREWRITING  R IY0 - R AY1 - T IH0 NG\nREWRITTEN  R IY0 - R IH1 - T AH0 N\nREWROTE  R IY0 - R OW1 T\nREX  R EH1 K S\nREXALL  R EH1 K - S AO2 L\nREXANA  R IH0 G - Z AE1 - N AH0\nREXENE  R EH1 K - S IY0 N\nREXFORD  R EH1 K S - F ER0 D\nREXHAM  R EH1 K - S AH0 M\nREXNORD  R EH1 K S - N AO0 R D\nREXON  R EH1 K - S AH0 N\nREXROAD  R EH1 K S - R OW2 D\nREXROAT  R EH1 K S - R OW0 T\nREXRODE  R EH1 K S - R OW0 D\nREXRODT  R EH1 K S - R OW0 D\nREXROTH  R EH1 K - S R AA0 TH\nREY  R EY1\nREYBURN  R EY1 - B ER0 N\nREYCRAFT  R EY1 - K R AE2 F T\nREYER  R EY1 - ER0\nREYES  R EY1 - IH0 S\nREYKJAVIK  R EH1 - K Y AH0 - V IH0 K\nREYKJAVIK(2)  R EY1 - K AH0 - V IH0 K\nREYMAN  R EY1 - M AH0 N\nREYNA  R EY1 - N AH0\nREYNAGA  R IY0 - N AA1 - G AH0\nREYNALDO  R EY2 - N AA1 L - D OW0\nREYNARD  R EY1 - N ER0 D\nREYNAUD  R EY1 - N AO0 D\nREYNOLD  R EH1 - N AH0 L D\nREYNOLDS  R EH1 - N AH0 L D Z\nREYNOLDS'  R EH1 - N AH0 L D Z\nREYNOLDS'S  R EH1 - N AH0 L D - Z IH0 Z\nREYNOLDSON  R EY1 - N OW0 L D - S AH0 N\nREYNOSA  R IY0 - N OW1 - S AH0\nREYNOSO  R IY0 - N OW1 - S OW0\nREZA  R EH1 - Z AH0\nREZABEK  R IH0 - Z AA1 - B EH0 K\nREZAC  R EH1 - Z AH0 K\nREZEK  R EH1 - Z EH0 K\nREZENDES  R EY0 - Z EY1 N - D EH0 S\nREZNICEK  R EH1 Z - N IH0 - CH EH2 K\nREZNICK  R EH1 Z - N IH0 K\nREZNIK  R EH1 Z - N IH0 K\nREZONING  R IY0 - Z OW1 - N IH0 NG\nRHA  R AA1\nRHAME  R EY1 M\nRHAMES  R EY1 M Z\nRHAPSODIC  R AE0 P - S AA1 - D IH0 K\nRHAPSODIZE  R AE1 P - S AH0 - D AY2 Z\nRHAPSODIZES  R AE1 P - S AH0 - D AY2 - Z IH0 Z\nRHAPSODY  R AE1 P - S AH0 - D IY0\nRHEA  R IY1 - AH0\nRHEAULT  R OW1\nRHEAUME  R UW1 M\nRHEE  R IY1\nRHEEM  R IY1 M\nRHEIN  R AY1 N\nRHEINGOLD  R AY1 N - G OW2 L D\nRHEINISCH  R AY1 - N IH0 SH\nRHEINSTEIN  R AY1 N - S T AY2 N\nRHEM  R EH1 M\nRHESUS  R IY1 - S AH0 S\nRHETA  R IY1 - T AH0\nRHETORIC  R EH1 - T ER0 - IH0 K\nRHETORICAL  R IH0 - T AO1 - R IH0 - K AH0 L\nRHETORICALLY  R AH0 - T AO1 - R IH0 K - L IY0\nRHETORICIAN  R EH2 - T ER0 - IH1 - SH AH0 N\nRHETORICIANS  R EH2 - T ER0 - IH1 - SH AH0 N Z\nRHETT  R EH1 T\nRHEUMATIC  R UW0 - M AE1 - T IH0 K\nRHEUMATISM  R UW1 - M AH0 - T IH2 - Z AH0 M\nRHEUMATOID  R UW1 - M AH0 - T OY2 D\nRHEUMATOLOGIST  R UW2 - M AH0 - T AA1 - L AH0 - JH AH0 S T\nRHEUMATOLOGY  R UW2 - M AH0 - T AA1 - L AH0 - JH IY0\nRHEW  R UW1\nRHIN  R IH1 N\nRHINE  R AY1 N\nRHINEHARDT  R AY1 N - HH AA2 R T\nRHINEHART  R AY1 N - HH AA2 R T\nRHINELAND  R AY1 N - L AE2 N D\nRHINEMAN  R AY1 N - M AH0 N\nRHINEMAN'S  R AY1 N - M AH0 N Z\nRHINES  R AY1 N Z\nRHINESMITH  R AY1 N - S M IH2 TH\nRHINESTONE  R AY1 N - S T OW2 N\nRHINESTONES  R AY1 N - S T OW2 N Z\nRHINO  R AY1 - N OW2\nRHINOCEROS  R AY0 - N AA1 - S ER0 - AH0 S\nRHINOS  R AY1 - N OW2 Z\nRHIZOID  R AY1 - Z OY2 D\nRHIZOIDAL  R AY2 - Z OY1 - D AH0 L\nRHIZOME  R AY1 - Z OW2 M\nRHIZOMES  R AY1 - Z OW2 M Z\nRHO  R OW1\nRHOAD  R OW1 D\nRHOADES  R OW1 D Z\nRHOADS  R OW1 D Z\nRHODA  R OW1 - D AH0\nRHODANTHE  R OW2 - D AE1 N TH\nRHODE  R OW1 D\nRHODE-ISLAND  R OW1 - D AY1 - L AH0 N D\nRHODE-ISLAND'S  R OW1 - D AY1 - L AH0 N D Z\nRHODE-ISLANDER  R OW1 - D AY1 - L AH0 N - D ER0\nRHODE-ISLANDERS  R OW1 - D AY1 - L AH0 N - D ER0 Z\nRHODEN  R OW1 - D AH0 N\nRHODES  R OW1 D Z\nRHODESIA  R OW0 - D IY1 - ZH AH0\nRHODESIAN  R OW0 - D IY1 - ZH AH0 N\nRHODIA  R OW1 - D IY0 - AH0\nRHODIES  R OW1 - D IY0 Z\nRHODIUM  R OW1 - D IY0 - AH0 M\nRHODODENDRON  R OW2 - D AH0 - D EH1 N - D R AH0 N\nRHODOPSIN  R OW0 - D AA1 P - S AH0 N\nRHODUS  R OW1 - D AH0 S\nRHODY  R OW1 - D IY0\nRHOME  R OW1 M\nRHONDA  R AA1 N - D AH0\nRHONE  R OW1 N\nRHONEY  R OW1 - N IY0\nRHORER  R AO1 - R ER0\nRHOTEN  R OW1 - T AH0 N\nRHOTO  R OW1 - T OW0\nRHOTON  R OW1 - T AH0 N\nRHUBARB  R UW1 - B AA2 R B\nRHUDE  R UW1 D\nRHUDY  R UW1 - D IY0\nRHUE  R UW1\nRHULE  R UW1 L\nRHYME  R AY1 M\nRHYMED  R AY1 M D\nRHYMER  R AY1 - M ER0\nRHYMES  R AY1 M Z\nRHYMING  R AY1 - M IH0 NG\nRHYNE  R AY1 N\nRHYNER  R AY1 - N ER0\nRHYNES  R AY1 N Z\nRHYTHM  R IH1 - DH AH0 M\nRHYTHMIC  R IH1 DH - M IH0 K\nRHYTHMICALLY  R IH1 DH - M IH0 K - L IY0\nRHYTHMS  R IH1 - DH AH0 M Z\nRIA  R IY1 - AH0\nRIAD  R IY0 - AA1 D\nRIADY  R IY0 - AA1 - D IY0\nRIADYS  R IY0 - AA1 - D IY0 Z\nRIAL  R AY1 - AH0 L\nRIALS  R AY1 L Z\nRIB  R IH1 B\nRIBA  R IY1 - B AH0\nRIBALD  R AY1 - B AA0 L D\nRIBALDRY  R AY1 - B AA0 L - D R IY0\nRIBAR  R IH0 - B AA1 R\nRIBAS  R AY1 - B AH0 Z\nRIBAUDO  R IY0 - B AO1 - D OW0\nRIBAVIRIN  R IH0 - B AE1 - V IH0 - R IH0 N\nRIBBED  R IH1 B D\nRIBBING  R IH1 - B IH0 NG\nRIBBIT  R IH1 - B IH0 T\nRIBBLE  R IH1 - B AH0 L\nRIBBON  R IH1 - B AH0 N\nRIBBONS  R IH1 - B AH0 N Z\nRIBEIRO  R IY0 - B EH1 - R OW0\nRIBERA  R IY0 - B EH1 - R AH0\nRIBI  R IY1 - B IY0\nRIBICOFF  R IH1 - B IH0 K - AO2 F\nRIBKA  R IH1 - B K AH0\nRIBS  R IH1 B Z\nRIC  R IH1 K\nRICA  R IY1 - K AH0\nRICA'S  R IY1 - K AH0 Z\nRICADONNA  R IY0 - K AA0 - D OW1 - N AH0\nRICAN  R IY1 - K AH0 N\nRICANS  R IH1 - K AH0 N Z\nRICARD  R IH0 - K AA1 R D\nRICARDO  R IH0 - K AA1 R - D OW0\nRICAURTE  R AH0 - K AA1 R - T EY2\nRICCA  R IY1 - K AH0\nRICCARDI  R IY0 - K AA1 R - D IY0\nRICCARDO  R IH0 - K AA1 R - D OW0\nRICCI  R IY1 - CH IY0\nRICCIARDELLI  R IY0 - CH ER0 - D EH1 - L IY0\nRICCIARDI  R IY0 - CH AA1 R - D IY0\nRICCIO  R IY1 - CH IY0 - OW0\nRICCITELLI  R IY0 - CH IY0 - T EH1 - L IY0\nRICCIUTI  R IY0 K - CH UW1 - T IY0\nRICCO  R IH1 - K OW0\nRICCOBONO  R IY0 - K OW0 - B OW1 - N OW0\nRICE  R AY1 S\nRICE'S  R AY1 - S IH0 Z\nRICEVILLE  R AY1 S - V IH0 L\nRICH  R IH1 CH\nRICH'S  R IH1 - CH IH0 Z\nRICHA  R IH1 - CH AH0\nRICHARD  R IH1 - CH ER0 D\nRICHARD'S  R IH1 - CH ER0 D Z\nRICHARDS  R IH1 - CH ER0 D Z\nRICHARDS'  R IH1 - CH ER0 D Z\nRICHARDS'S  R IH1 - CH ER0 D - Z IH0 Z\nRICHARDSON  R IH1 - CH ER0 D - S AH0 N\nRICHARDSON'S  R IH1 - CH ER0 D - S AH0 N Z\nRICHARDSONSMITH  R IH1 - CH ER0 D - S AH0 N - S M IH1 TH\nRICHARDT  R IH1 - K AA0 R T\nRICHARSON  R IH1 - CH AA2 R - S AH0 N\nRICHART  R IH1 K - HH AA0 R T\nRICHAUD  R IH0 - SH OW2 D\nRICHBOURG  R IH1 CH - B AO2 R G\nRICHBURG  R IH1 CH - B ER0 G\nRICHCO  R IH1 - K OW0\nRICHCREEK  R IH1 CH - K R IY2 K\nRICHE  R IH1 CH\nRICHELIEU  R IH1 - SH AH0 - L UW2\nRICHELSON  R IH1 - CH AH0 L - S AH0 N\nRICHEMONT  R IH1 - CH AH0 - M AA2 N T\nRICHENTHAL  R IH1 - K AH0 N - TH AO2 L\nRICHER  R IH1 - CH ER0\nRICHERD  R IH1 - CH ER0 D\nRICHERSON  R IH1 - CH ER0 - S AH0 N\nRICHERT  R IH1 - K ER0 T\nRICHES  R IH1 - CH AH0 Z\nRICHES(2)  R IH1 - CH IH0 Z\nRICHESIN  R IH1 - K IH0 - S IH0 N\nRICHESON  R IH1 - K IH0 - S AH0 N\nRICHEST  R IH1 - CH AH0 S T\nRICHEY  R IH1 - CH IY0\nRICHFIELD  R IH1 CH - F IY2 L D\nRICHFIELD'S  R IH1 CH - F IY2 L D Z\nRICHFORD  R IH1 CH - F ER0 D\nRICHIE  R IH1 - CH IY0\nRICHINS  R IH1 - K IH0 N Z\nRICHISON  R IH1 - CH IH0 - S AH0 N\nRICHLAND  R IH1 CH - L AH0 N D\nRICHLAND(2)  R IH1 CH - L AE0 N\nRICHLY  R IH1 CH - L IY0\nRICHMAN  R IH1 CH - M AE2 N\nRICHMOND  R IH1 CH - M AH0 N D\nRICHMOND'S  R IH1 CH - M AH0 N D Z\nRICHNER  R IH1 K - N ER0\nRICHNESS  R IH1 CH - N AH0 S\nRICHOUX  R IH0 - SH UW1\nRICHSTONE  R IH1 CH - S T OW2 N\nRICHTER  R IH1 K - T ER0\nRICHTON  R IH1 CH - T AH0 N\nRICHTS  R IH1 K T S\nRICHWHITE  R IH1 CH - W AY2 T\nRICHWINE  R IH1 CH - W AY2 N\nRICIGLIANO  R IH0 - S IH2 - G L IY0 - AA1 - N OW0\nRICK  R IH1 K\nRICK'S  R IH1 K S\nRICKABAUGH  R IH1 - K AH0 - B AO2\nRICKARD  R IH1 - K ER0 D\nRICKARDS  R IH1 - K ER0 D Z\nRICKE  R IH1 K\nRICKEL  R IH1 - K AH0 L\nRICKELS  R IH1 - K AH0 L Z\nRICKEN  R IH1 - K AH0 N\nRICKENBACH  R IH1 - K IH0 N - B AA0 K\nRICKENBAKER  R IH1 - K IH0 N - B AH0 - K ER0\nRICKER  R IH1 - K ER0\nRICKERS  R IH1 - K ER0 Z\nRICKERSON  R IH1 - K ER0 - S AH0 N\nRICKERT  R IH1 - K ER0 T\nRICKETS  R IH1 - K IH0 T S\nRICKETSON  R IH1 - K IH0 T - S AH0 N\nRICKETT  R IH1 - K IH0 T\nRICKETTS  R IH1 - K IH0 T S\nRICKETY  R IH1 - K AH0 - T IY0\nRICKEY  R IH1 - K IY0\nRICKI  R IH1 - K IY0\nRICKIE  R IH1 - K IY0\nRICKLEFS  R IH1 - K L IH0 F S\nRICKLES  R IH1 - K AH0 L Z\nRICKMAN  R IH1 K - M AH0 N\nRICKNER  R IH1 K - N ER0\nRICKS  R IH1 K S\nRICKSON  R IH1 K - S AH0 N\nRICKWARD  R IH1 - K W ER0 D\nRICKWOOD  R IH1 - K W UH2 D\nRICKY  R IH1 - K IY0\nRICO  R IY1 - K OW0\nRICO'S  R IY1 - K OW0 Z\nRICOCHET  R IH1 - K AH0 - SH EY2\nRICOCHETED  R IH1 - K AH0 - SH EY2 D\nRICOCHETING  R IH1 - K AH0 - SH EY2 - IH0 NG\nRICOH  R IY1 - K OW0\nRICOH'S  R IY1 - K OW0 Z\nRICOSTRUZIONE  R IY0 - K OW0 S T - R UW0 - Z IY0 - OW1 - N IY0\nRID  R IH1 D\nRIDABLE  R AY1 - D AH0 - B AH0 L\nRIDDANCE  R IH1 - D AH0 N S\nRIDDELL  R IH1 - D AH0 L\nRIDDEN  R IH1 - D AH0 N\nRIDDER  R IH1 - D ER0\nRIDDER'S  R IH1 - D ER0 Z\nRIDDICK  R IH1 - D IH0 K\nRIDDING  R IH1 - D IH0 NG\nRIDDLE  R IH1 - D AH0 L\nRIDDLED  R IH1 - D AH0 L D\nRIDDLER  R IH1 D - L ER0\nRIDDLES  R IH1 - D AH0 L Z\nRIDDOCK  R IH1 - D AH0 K\nRIDE  R AY1 D\nRIDEAU  R IH0 - D OW1\nRIDEAUX  R IH0 - D OW1\nRIDEN  R AY1 - D AH0 N\nRIDENER  R IH1 - D IY0 - N ER0\nRIDENHOUR  R IH1 - D IH0 - N AW0 R\nRIDENOUR  R IH1 - D IH0 - N UH0 R\nRIDEOUT  R AY1 D - AW2 T\nRIDER  R AY1 - D ER0\nRIDER'S  R AY1 - D ER0 Z\nRIDERS  R AY1 - D ER0 Z\nRIDERSHIP  R AY1 - D ER0 - SH IH2 P\nRIDES  R AY1 D Z\nRIDGE  R IH1 JH\nRIDGE'S  R IH1 - JH IH0 S\nRIDGECREST  R IH1 JH - K R EH2 S T\nRIDGED  R IH1 JH D\nRIDGEFIELD  R IH1 JH - F IY2 L D\nRIDGELL  R IH1 - JH AH0 L\nRIDGELY  R IH1 JH - L IY0\nRIDGES  R IH1 - JH AH0 Z\nRIDGES(2)  R IH1 - JH IH0 Z\nRIDGEWAY  R IH1 JH - W EY2\nRIDGEWOOD  R IH1 JH - W UH2 D\nRIDGLEY  R IH1 JH - L IY0\nRIDGWAY  R IH1 JH - W EY2\nRIDICULE  R IH1 - D AH0 - K Y UW2 L\nRIDICULED  R IH1 - D AH0 - K Y UW2 L D\nRIDICULES  R IH1 - D AH0 - K Y UW2 L Z\nRIDICULING  R IH1 - D AH0 - K Y UW2 - L IH0 NG\nRIDICULOUS  R IH0 - D IH1 - K Y AH0 - L AH0 S\nRIDICULOUSLY  R AH0 - D IH1 - K Y AH0 - L AH0 S - L IY0\nRIDING  R AY1 - D IH0 NG\nRIDINGER  R AY1 - D IH0 - NG ER0\nRIDINGS  R AY1 - D IH0 NG Z\nRIDLEY  R IH1 D - L IY0\nRIDLING  R IH1 D - L IH0 NG\nRIDLON  R IH1 D - L AH0 N\nRIDNER  R IH1 D - N ER0\nRIDOLFI  R IY0 - D OW1 L - F IY0\nRIDOUT  R IH1 D - AW2 T\nRIDPATH  R IH1 D - P AE2 TH\nRIDS  R IH1 D Z\nRIEBE  R IY1 B\nRIEBEL  R IY1 - B AH0 L\nRIEBEN  R IY1 - B AH0 N\nRIEBER  R IY1 - B ER0\nRIEBMAN  R IY1 B - M AH0 N\nRIECHERS  R IY1 - K ER0 Z\nRIECK  R IY1 K\nRIECKE  R IY1 K\nRIED  R IY1 D\nRIEDE  R IY1 D\nRIEDEL  R IY1 - D AH0 L\nRIEDER  R IY1 - D ER0\nRIEDERER  R IY1 - D ER0 - ER0\nRIEDERS  R IY1 - D ER0 Z\nRIEDERS'  R IY1 - D ER0 Z\nRIEDESEL  R IY1 - D IH0 S - AH0 L\nRIEDL  R IY1 - D AH0 L\nRIEDLINGER  R IY1 - D AH0 L - IH0 - NG ER0\nRIEDLINGER(2)  R IY1 D - L IH0 - NG ER0\nRIEDY  R IY1 - D IY0\nRIEF  R IY1 F\nRIEG  R IY1 G\nRIEGE  R IY1 JH\nRIEGEL  R IY1 - G AH0 L\nRIEGER  R IY1 - G ER0\nRIEGERT  R IY1 - G ER0 T\nRIEGLE  R IY1 - G AH0 L\nRIEGLER  R IY1 - G L ER0\nRIEHL  R IY1 L\nRIEHLE  R IY1 - HH AH0 L\nRIEHM  R IY1 M\nRIEK  R IY1 K\nRIEKE  R IY1 K\nRIEKEN  R IY1 - K AH0 N\nRIEKER  R IY1 - K ER0\nRIEL  R IY1 L\nRIELLY  R IY1 - L IY0\nRIELY  R IY1 - L IY0\nRIEMAN  R IY1 - M AH0 N\nRIEMANN  R IY1 - M AH0 N\nRIEMENSCHNEIDER  R IY1 - M IH0 N SH - N AY0 - D ER0\nRIEMER  R IY1 - M ER0\nRIEMERSMA  R IY0 - M EH1 R S - M AH0\nRIENDEAU  R AH0 N - D OW1\nRIENSTRA  R IY1 N - S T R AH0\nRIEPE  R IY1 P\nRIERA  R IY1 - R AH0\nRIERSON  R IY1 R - S AH0 N\nRIES  R AY1 Z\nRIESBERG  R IY1 S - B ER0 G\nRIESE  R IY1 Z\nRIESEN  R IY1 - S AH0 N\nRIESENBERG  R IY1 - S AH0 N - B ER0 G\nRIESER  R IY1 - S ER0\nRIESH  R AY1 SH\nRIESH(2)  R IY1 SH\nRIESLING  R IY1 Z - L IH0 NG\nRIESS  R IY1 S\nRIESTER  R AY1 - IH0 - S T ER0\nRIESTERER  R IY1 - S T ER0 - ER0\nRIETH  R AY1 - IH0 TH\nRIETVELD  R IY1 T - V IH0 L D\nRIETZ  R IY1 T S\nRIEVES  R IY1 V Z\nRIFE  R AY1 F\nRIFENBURGH  R IH1 - F AH0 N - B ER0 G\nRIFF  R IH1 F\nRIFFE  R IH1 F\nRIFFEL  R IH1 - F AH0 L\nRIFFEY  R IH1 - F IY0\nRIFFLE  R IH1 - F AH0 L\nRIFFRAFF  R IH1 F - R AE2 F\nRIFFS  R IH1 F S\nRIFKIN  R IH1 F - K IH0 N\nRIFKIN'S  R IH1 F - K IH0 N Z\nRIFKIND  R IH1 F - K IH0 N D\nRIFLE  R AY1 - F AH0 L\nRIFLED  R AY1 - F AH0 L D\nRIFLEMAN  R AY1 - F AH0 L - M AH0 N\nRIFLERY  R AY1 - F AH0 L - R IY0\nRIFLES  R AY1 - F AH0 L Z\nRIFLING  R AY1 - F L IH0 NG\nRIFT  R IH1 F T\nRIFTS  R IH1 F T S\nRIG  R IH1 G\nRIGA  R IY1 - G AH0\nRIGAS  R AY1 - G AH0 Z\nRIGATONI  R IH0 - G AH0 - T OW1 - N IY0\nRIGBY  R IH1 G - B IY0\nRIGDON  R IH1 G - D AH0 N\nRIGEL  R AY1 - JH AH0 L\nRIGG  R IH1 G\nRIGGAN  R IH1 - G AH0 N\nRIGGED  R IH1 G D\nRIGGEN  R IH1 - G AH0 N\nRIGGENBACH  R IH1 - G IH0 N - B AA0 K\nRIGGI  R IH1 - JH IY0\nRIGGIN  R IH1 - G IH0 N\nRIGGING  R IH1 - G IH0 NG\nRIGGINGS  R IH1 - G IH0 NG Z\nRIGGINS  R IH1 - G IH0 N Z\nRIGGIO  R IY1 - JH IY0 - OW0\nRIGGLE  R IH1 - G AH0 L\nRIGGLEMAN  R IH1 - G AH0 L - M AH0 N\nRIGGS  R IH1 G Z\nRIGGSBEE  R IH1 G Z - B IY0\nRIGHETTI  R IY0 - G EH1 - T IY0\nRIGHI  R IY1 - G IY0\nRIGHT  R AY1 T\nRIGHT'S  R AY1 T S\nRIGHT-BRACE  R AY1 T - B R EY1 S\nRIGHT-WINGER  R AY2 T - W IH1 - NG ER0\nRIGHT-WINGERS  R AY2 T - W IH1 - NG ER0 Z\nRIGHTED  R AY1 - T IH0 D\nRIGHTEOUS  R AY1 - CH AH0 S\nRIGHTEOUSLY  R AY1 - CH AH0 S - L IY0\nRIGHTEOUSNESS  R AY1 - CH AH0 S - N AH0 S\nRIGHTER  R AY1 - T ER0\nRIGHTFUL  R AY1 T - F AH0 L\nRIGHTFULLY  R AY1 T - F AH0 - L IY0\nRIGHTHAND  R AY0 T - HH AE1 N D\nRIGHTHANDED  R AY0 T - HH AE1 N - D IH0 D\nRIGHTISH  R AY1 - T IH0 SH\nRIGHTIST  R AY1 - T IH0 S T\nRIGHTISTS  R AY1 - T IH0 S T S\nRIGHTLY  R AY1 T - L IY0\nRIGHTMIRE  R AY1 T - M AY2 R\nRIGHTMYER  R AY1 T - M IY0 - ER0\nRIGHTNESS  R AY1 T - N AH0 S\nRIGHTS  R AY1 T S\nRIGHTS'  R AY1 T S\nRIGHTWARD  R AY1 T - W ER0 D\nRIGHTWING  R AY1 T - W IH2 NG\nRIGHTY  R AY1 - T IY0\nRIGID  R IH1 - JH AH0 D\nRIGID(2)  R IH1 - JH IH0 D\nRIGIDITIES  R IH0 - JH IH1 - D IH0 - T IY0 Z\nRIGIDITY  R IH0 - JH IH1 - D AH0 - T IY0\nRIGIDLY  R IH1 - JH IH0 D - L IY0\nRIGLER  R AY1 - G AH0 - L ER0\nRIGLER(2)  R IH1 - G L ER0\nRIGNEY  R IH1 G - N IY0\nRIGO  R IY1 - G OW0\nRIGOLETTO  R IH2 - G AH0 - L EH1 - T OW0\nRIGONI  R IY0 - G OW1 - N IY0\nRIGOR  R IH1 - G ER0\nRIGOROUS  R IH1 - G ER0 - AH0 S\nRIGOROUSLY  R IH1 - G ER0 - AH0 S - L IY0\nRIGORS  R IH1 - G ER0 Z\nRIGS  R IH1 G Z\nRIGSBEE  R IH1 G Z - B IY2\nRIGSBY  R IH1 G Z - B IY0\nRIGUEUR  R IH0 - G Y UW1 R\nRIGUEUR(2)  R IH1 - G ER0\nRIHA  R AY1 - HH AH0\nRIHN  R IH1 N\nRIJN  R IY1 - AH0 N\nRIKARD  R IH1 - K ER0 D\nRIKE  R AY1 K\nRIKELD  R AY1 - K EH0 L D\nRIKELD(2)  R IH1 - K EH0 L D\nRIKER  R AY1 - K ER0\nRIKER'S  R AY1 - K ER0 Z\nRIKERS  R AY1 - K ER0 Z\nRIKKI  R IH1 - K IY0\nRIKLIS  R IH1 - K L IH0 S\nRIKSBANK  R IH1 K S - B AE2 NG K\nRIKSDAG  R IH1 K S - D AE0 G\nRILE  R AY1 L\nRILED  R AY1 L D\nRILES  R AY1 L Z\nRILEY  R AY1 - L IY0\nRILEY'S  R AY1 - L IY0 Z\nRILL  R IH1 L\nRILL'S  R IH1 L Z\nRILLA  R IH1 - L AH0\nRILLETTE  R IH0 - L EH1 T\nRILLING  R IH1 - L IH0 NG\nRILWANU  R IH0 L - W AA1 - N UW0\nRIM  R IH1 M\nRIMA  R IY1 - M AH0\nRIMBEY  R IH1 M - B IY0\nRIMEL  R IH1 - M AH0 L\nRIMER  R AY1 - M ER0\nRIMES  R AY1 M Z\nRIMKUS  R IH1 M - K AH0 S\nRIMMED  R IH1 M D\nRIMMER  R IH1 - M ER0\nRIMPOCHET  R IH0 - P OW1 - CH IH0 T\nRIMPOCHET(2)  R IH2 M - P OW1 - CH AH0 T\nRIMPOCHETS  R IH2 - P OW1 - CH IH0 T S\nRIMPOCHETS(2)  R IH2 M - P OW1 - CH IH0 T S\nRIMS  R IH1 M Z\nRIMSON  R IH1 M - S AH0 N\nRINA  R IY1 - N AH0\nRINALDI  R IY0 - N AA1 L - D IY0\nRINALDO  R IH0 - N AA1 L - D OW0\nRINARD  R IH1 - N ER0 D\nRINAS  R AY1 - N AH0 Z\nRINAUDO  R IY0 - N AO1 - D OW0\nRINCK  R IH1 NG K\nRINCON  R IH1 NG - K AH0 N\nRIND  R AY1 N D\nRINDAHL  R IH1 N - D AA2 L\nRINDERER  R IH1 N - D ER0 - ER0\nRINDERKNECHT  R IH1 N - D ER0 K - N IH0 K T\nRINDFLEISCH  R IH1 N D - F L AY2 SH\nRINDS  R AY1 N D Z\nRINDT  R IH1 N T\nRINE  R AY1 N\nRINEER  R IH1 - N IH0 R\nRINEHARDT  R AY1 N - HH AA2 R T\nRINEHART  R AY1 N - HH AA2 R T\nRINEHIMER  R AY1 N - HH AY2 - M ER0\nRINELLA  R IH0 - N EH1 - L AH0\nRINER  R AY1 - N ER0\nRINES  R AY1 N Z\nRINEY  R AY1 - N IY0\nRING  R IH1 NG\nRING'S  R IH1 NG Z\nRING-AROUND-THE-ROSY  R IH1 - NG ER0 - AW1 N - DH ER0 - OW1 - Z IY0\nRINGBERG  R IH1 NG - B ER0 G\nRINGDAHL  R IH1 NG - D AA0 L\nRINGE  R IH1 NG\nRINGED  R IH1 NG D\nRINGEISEN  R IH1 NG - G AY0 - S AH0 N\nRINGEL  R IH1 NG - G AH0 L\nRINGEN  R IH1 - NG AH0 N\nRINGENBERG  R IH1 - NG AH0 N - B ER0 G\nRINGER  R IH1 - NG ER0\nRINGERS  R IH1 - NG ER0 Z\nRINGGENBERG  R IH1 NG - G AH0 N - B ER0 G\nRINGGIT  R IH1 - NG IH0 T\nRINGGOLD  R IH1 NG - G OW2 L D\nRINGING  R IH1 - NG IH0 NG\nRINGLAND  R IH1 NG - G L AH0 N D\nRINGLE  R IH1 NG - G AH0 L\nRINGLEADER  R IH1 NG - L IY2 - D ER0\nRINGLEADERS  R IH1 NG - L IY2 - D ER0 Z\nRINGLER  R IH1 NG - G AH0 - L ER0\nRINGLER(2)  R IH1 NG - G L ER0\nRINGLEY  R IH1 NG - G L IY0\nRINGLING  R IH1 NG - L IH0 NG\nRINGMASTER  R IH1 NG - M AE2 - S T ER0\nRINGNECK  R IH1 NG - N EH2 K\nRINGO  R IY1 NG - G OW0\nRINGOLD  R IH1 NG - G OW0 L D\nRINGQUIST  R IH1 NG - K W IH0 S T\nRINGS  R IH1 NG Z\nRINGSIDE  R IH1 NG - S AY2 D\nRINGSTAD  R IH1 NG - S T AH0 D\nRINGUETTE  R IH0 - NG EH1 T\nRINGWALD  R IH1 NG - W AO0 L D\nRINGWOOD  R IH1 NG - W UH2 D\nRINI  R IY1 - N IY0\nRININGER  R IH1 - N IH0 - NG ER0\nRINK  R IH1 NG K\nRINKE  R IH1 NG K\nRINKENBERGER  R IH1 NG - K AH0 N - B ER0 - G ER0\nRINKER  R IH1 NG - K ER0\nRINKO  R IH1 NG - K OW0\nRINKS  R IH1 NG K S\nRINN  R IH1 N\nRINNE  R IH1 N\nRINSE  R IH1 N S\nRINSING  R IH1 N - S IH0 NG\nRINTALA  R IY0 N - T AA1 - L AH0\nRINTEL  R IH0 N - T EH1 L\nRINTEL'S  R IH0 N - T EH1 L Z\nRINTELS  R IH0 N - T EH1 L Z\nRINTELS'  R IH0 N - T EH1 L Z\nRIO  R IY1 - OW0\nRIO'S  R IY1 - OW0 Z\nRIO-DE-JANEIRO  R IY1 - OW0 - D IY1 - JH AH0 - N EH1 - R OW2\nRIOJAS  R IY0 - OW1 - Y AA0 Z\nRIOLO  R IY0 - OW1 - L OW0\nRION  R AY1 - AH0 N\nRIOPEL  R IY0 - AH0 - P EH1 L\nRIOPELLE  R IY0 - AH0 - P EH1 - L IY0\nRIORDAN  R IH1 R - D AH0 N\nRIORDAN'S  R IH1 R - D AH0 N Z\nRIOS  R IY1 - OW0 S\nRIOT  R AY1 - AH0 T\nRIOTED  R AY1 - AH0 - T IH0 D\nRIOTER  R AY1 - AH0 - T ER0\nRIOTERS  R AY1 - AH0 - T ER0 Z\nRIOTING  R AY1 - AH0 - T IH0 NG\nRIOTOUS  R AY1 - AH0 - T AH0 S\nRIOTS  R AY1 - AH0 T S\nRIOTS'  R AY1 - AH0 T S\nRIOUX  R UW1\nRIP  R IH1 P\nRIPA  R IY1 - P AH0\nRIPE  R AY1 P\nRIPEN  R AY1 - P AH0 N\nRIPENED  R AY1 - P AH0 N D\nRIPENING  R AY1 - P AH0 - N IH0 NG\nRIPENING(2)  R AY1 P - N IH0 NG\nRIPHAGEN  R IH1 - P AA2 - G AH0 N\nRIPKA  R IY1 P - K AH0\nRIPKE  R IH1 P K\nRIPKEN  R IH1 P - K AH0 N\nRIPKEN'S  R IH1 P - K AH0 N Z\nRIPKIN  R IH1 P - K IH0 N\nRIPLEY  R IH1 - P L IY0\nRIPOFF  R IH1 - P AO2 F\nRIPOFFS  R IH1 - P AO2 F S\nRIPOSTE  R IH0 - P OW1 S T\nRIPOSTES  R IH0 - P AO1 S T S\nRIPP  R IH1 P\nRIPPE  R IH1 P\nRIPPED  R IH1 P T\nRIPPEE  R IH1 - P IY1\nRIPPEL  R IH1 - P AH0 L\nRIPPEON  R IH1 - P IY0 - AH0 N\nRIPPER  R IH1 - P ER0\nRIPPERGER  R IH1 - P ER0 - G ER0\nRIPPETOE  R IH1 - P IH0 - T OW0\nRIPPEY  R IH1 - P IY0\nRIPPING  R IH1 - P IH0 NG\nRIPPLE  R IH1 - P AH0 L\nRIPPLED  R IH1 - P AH0 L D\nRIPPLES  R IH1 - P AH0 L Z\nRIPPLING  R IH1 - P AH0 L - IH0 NG\nRIPPLING(2)  R IH1 - P L IH0 NG\nRIPPLINGER  R IH1 - P AH0 L - IH0 - NG ER0\nRIPPLINGER(2)  R IH1 - P L IH0 - NG ER0\nRIPPON  R IH1 - P AH0 N\nRIPPY  R IH1 - P IY0\nRIPS  R IH1 P S\nRISA  R IY1 - S AH0\nRISBERG  R IH1 S - B ER0 G\nRISC  R IH1 S K\nRISCH  R IH1 SH\nRISDEN  R IH1 S - D AH0 N\nRISDON  R IH1 S - D AH0 N\nRISE  R AY1 Z\nRISEN  R IH1 - Z AH0 N\nRISENHOOVER  R IH1 - S IH0 N - HH UW0 - V ER0\nRISENHOOVER(2)  R AY1 - Z IH0 N - HH UW0 - V ER0\nRISER  R AY1 - Z ER0\nRISES  R AY1 - Z AH0 Z\nRISES(2)  R AY1 - Z IH0 Z\nRISH  R IH1 SH\nRISHEL  R IH1 - SH AH0 L\nRISHELL  R IH1 - SH AH0 L\nRISHER  R IH1 - SH ER0\nRISI  R IY1 - S IY0\nRISIN  R AY1 - Z IH0 N\nRISING  R AY1 - Z IH0 NG\nRISINGER  R AY1 - Z IH0 - NG ER0\nRISK  R IH1 S K\nRISKE  R IH1 S K\nRISKE'S  R IH1 S K S\nRISKED  R IH1 S K T\nRISKIER  R IH1 S K - IY0 - ER0\nRISKIEST  R IH1 S - K IY0 - AH0 S T\nRISKIN  R IH1 - S K IH0 N\nRISKINESS  R IH1 S K - IY0 - N AH0 S\nRISKING  R IH1 - S K IH0 NG\nRISKLESS  R IH1 S K - L AH0 S\nRISKO  R IH1 - S K OW0\nRISKS  R IH1 S K S\nRISKY  R IH1 S - K IY0\nRISLEY  R IH1 Z - L IY0\nRISNER  R IH1 S - N ER0\nRISO  R IY1 - S OW0\nRISON  R IH1 - S AH0 N\nRISPOLI  R IY0 - S P OW1 - L IY0\nRISQUE  R IH2 - S K EY1\nRISS  R IH1 S\nRISSE  R IH1 S\nRISSER  R IH1 - S ER0\nRISSLER  R IH1 S - L ER0\nRISSMAN  R IH1 S - M AH0 N\nRISSMILLER  R IH1 S - M IH0 - L ER0\nRISSO  R IH1 - S OW0\nRISSOLI  R IH0 - S OW1 - L IY0\nRIST  R IH1 S T\nRISTAU  R IH1 - S T AW0\nRISTER  R IH1 - S T ER0\nRISTON  R IH1 - S T AH0 N\nRISTORANTE  R IH0 - S T ER0 - AA1 N - T EY0\nRISTOW  R IH1 - S T OW0\nRITA  R IY1 - T AH0\nRITA'S  R IY1 - T AH0 Z\nRITACCO  R IY0 - T AA1 - K OW0\nRITALIN  R IH1 - T AH0 - L IH0 N\nRITCEY  R IH1 T - S IY0\nRITCEY'S  R IH1 T - S IY0 Z\nRITCH  R IH1 CH\nRITCHEY  R IH1 - CH IY0\nRITCHIE  R IH1 - CH IY0\nRITE  R AY1 T\nRITE'S  R AY1 T S\nRITENOUR  R IH1 - T AH0 - N AW0 R\nRITENOUR(2)  R AY1 - T AH0 - N AW0 R\nRITER  R AY1 - T ER0\nRITES  R AY1 T S\nRITESH  R IH2 - T EH1 SH\nRITGER  R IH1 T - G ER0\nRITNER  R IH1 T - N ER0\nRITSEMA  R IH0 T - S IY1 - M AH0\nRITSON  R IH1 T - S AH0 N\nRITT  R IH1 T\nRITTENBERG  R IH1 - T AH0 N - B ER0 G\nRITTENBERRY  R IH1 - T AH0 N - B EH0 - R IY0\nRITTENHOUSE  R IH1 - T AH0 N - HH AW2 S\nRITTENOUR  R IH1 - T AH0 - N AW0 R\nRITTER  R IH1 - T ER0\nRITTERBUSCH  R IH1 - T ER0 - B UH2 SH\nRITTEREISER  R IH1 - T ER0 - AY2 - Z ER0\nRITTEREISER'S  R IH1 - T ER0 - AY2 - Z ER0 Z\nRITTGERS  R IH1 T - G ER0 Z\nRITTHALER  R IH1 - TH AH0 - L ER0\nRITTLE  R IH1 - T AH0 L\nRITTMAN  R IH1 T - M AH0 N\nRITTNER  R IH1 T - N ER0\nRITTS  R IH1 T S\nRITUAL  R IH1 - CH UW0 - AH0 L\nRITUALISTIC  R IH2 - CH UW0 - AH0 - L IH1 - S T IH0 K\nRITUALISTICALLY  R IH2 - CH UW0 - AH0 - L IH1 - S T IH0 - K AH0 - L IY0\nRITUALISTICALLY(2)  R IH2 - CH UW0 - AH0 - L IH1 - S T IH0 K - L IY0\nRITUALS  R IH1 - CH UW0 - AH0 L Z\nRITZ  R IH1 T S\nRITZEL  R IH1 T - Z AH0 L\nRITZENTHALER  R IH1 T - Z IH0 N - TH AH0 - L ER0\nRITZENTHALER(2)  R IH1 T - S IH0 N - TH AA2 - L ER0\nRITZER  R IH1 T - Z ER0\nRITZERT  R IH1 T - Z ER0 T\nRITZIEST  R IH1 T - S IY0 - AH0 S T\nRITZMAN  R IH1 T S - M AH0 N\nRITZY  R IH1 T - S IY0\nRIUNITE  R IY0 - UW0 - N AY1 T\nRIUNITE(2)  R IY0 - UW0 - N AY1 - T IY0\nRIVA  R IY1 - V AH0\nRIVAL  R AY1 - V AH0 L\nRIVAL'S  R AY1 - V AH0 L Z\nRIVALED  R AY1 - V AH0 L D\nRIVALING  R AY1 - V AH0 L - IH0 NG\nRIVALING(2)  R AY1 V - L IH0 NG\nRIVALRIES  R AY1 - V AH0 L - R IY0 Z\nRIVALRY  R AY1 - V AH0 L - R IY0\nRIVALS  R AY1 - V AH0 L Z\nRIVALS'  R AY1 - V AH0 L Z\nRIVARD  R IH1 - V ER0 D\nRIVAS  R IY1 - V AA0 Z\nRIVEN  R IH1 - V AH0 N\nRIVENBARK  R IH1 - V IH0 N - B AA0 R K\nRIVENBURG  R IH1 - V AH0 N - B ER0 G\nRIVENBURGH  R IH1 - V IH0 N - B ER0 G\nRIVER  R IH1 - V ER0\nRIVER'S  R IH1 - V ER0 Z\nRIVERA  R IH0 - V EH1 - R AH0\nRIVERBANK  R IH1 - V ER0 - B AE2 NG K\nRIVERBED  R IH1 - V ER0 - B EH2 D\nRIVERBEND  R IH1 - V ER0 - B EH2 N D\nRIVERBOAT  R IH1 - V ER0 - B OW2 T\nRIVERBOAT'S  R IH1 - V ER0 - B OW2 T S\nRIVERBOATS  R IH1 - V ER0 - B OW2 T S\nRIVERDALE  R IH1 - V ER0 - D EY2 L\nRIVERFRONT  R IH1 - V ER0 - F R AH2 N T\nRIVERHEAD  R IH1 - V ER0 - HH EH2 D\nRIVERO  R IY0 - V EH1 - R OW0\nRIVERS  R IH1 - V ER0 Z\nRIVERSIDE  R IH1 - V ER0 - S AY2 D\nRIVERSO  R IH1 - V ER0 - S OW0\nRIVERWAY  R IH1 - V ER0 - W EY2\nRIVERWOOD  R IH1 - V ER0 - W UH2 D\nRIVES  R AY1 V Z\nRIVEST  R IH1 - V IH0 S T\nRIVET  R IH1 - V AH0 T\nRIVETED  R IH1 - V AH0 - T IH0 D\nRIVETING  R IH1 - V AH0 - T IH0 NG\nRIVETS  R IH1 - V AH0 T S\nRIVETT  R IH1 - V IH0 T\nRIVETTE  R IH0 - V EH1 T\nRIVIELLO  R IY2 - V IY0 - EH1 - L OW0\nRIVIERA  R IH2 - V IY0 - EH1 - R AH0\nRIVIERE  R IH1 - V IY0 - EH0 R\nRIVIERES  R IH0 - V Y IH1 - R EH0 Z\nRIVKIN  R IH1 V - K IH0 N\nRIVKIND  R IH1 V - K IH0 N D\nRIVLIN  R IH1 V - L IH0 N\nRIX  R IH1 K S\nRIYAD  R IY0 - AA1 D\nRIYAD(2)  R IY0 - AE1 D\nRIYADH  R IY0 - AE1 D\nRIYADH(2)  R IY0 - AA1 D\nRIYALS  R IY0 - Y AA1 L Z\nRIZ  R IH1 Z\nRIZER  R AY1 - Z ER0\nRIZK  R IH1 Z K\nRIZO  R IY1 - Z OW0\nRIZOR  R AY1 - Z ER0\nRIZZA  R IH1 - Z AH0\nRIZZI  R IH1 - Z IY0\nRIZZO  R IH1 - Z OW0\nRIZZOLI  R IH0 - Z OW1 - L IY0\nRIZZOLO  R IY0 T - S OW1 - L OW0\nRIZZUTI  R IY0 T - S UW1 - T IY0\nRIZZUTO  R IY0 - T S UW1 - T OW0\nRO  R OW1\nROA  R OW1 - AH0\nROACH  R OW1 CH\nROACHE  R OW1 CH\nROACHES  R OW1 - CH IH0 Z\nROAD  R OW1 D\nROAD'S  R OW1 D Z\nROADBLOCK  R OW1 D - B L AA2 K\nROADBLOCKS  R OW1 D - B L AA2 K S\nROADCAP  R OW1 D - K AE2 P\nROADES  R OW1 D Z\nROADHOUSE  R OW1 D - HH AW2 S\nROADIE  R OW1 - D IY0\nROADMASTER  R OW1 D - M AE2 - S T ER0\nROADRAILER  R OW1 - D R EY2 - L ER0\nROADRUNNER  R OW1 - D R AH2 - N ER0\nROADS  R OW1 D Z\nROADSHOW  R OW1 D - SH OW2\nROADSIDE  R OW1 D - S AY2 D\nROADSIDES  R OW1 D - S AY2 D Z\nROADSTER  R OW1 D - S T ER0\nROADWAY  R OW1 D - W EY2\nROADWAYS  R OW1 D - W EY2 Z\nROADWORK  R OW1 D - W ER2 K\nROADY  R OW1 - D IY0\nROALD  R OW1 L D\nROAM  R OW1 M\nROAMED  R OW1 M D\nROAMING  R OW1 - M IH0 NG\nROAMS  R OW1 M Z\nROAN  R OW1 N\nROANE  R OW1 N\nROANNA  R OW1 - N AH0\nROANOKE  R OW1 - AH0 - N OW2 K\nROAR  R AO1 R\nROARED  R AO1 R D\nROARING  R AO1 - R IH0 NG\nROARK  R AO1 R K\nROARKE  R AO1 R K\nROARS  R AO1 R Z\nROARTY  R AO1 R - T IY0\nROAST  R OW1 S T\nROASTED  R OW1 - S T AH0 D\nROASTED(2)  R OW1 - S T IH0 D\nROASTER  R OW1 - S T ER0\nROASTERS  R OW1 - S T ER0 Z\nROASTING  R OW1 - S T IH0 NG\nROASTS  R OW1 S T S\nROAT  R OW1 T\nROATH  R OW1 TH\nROB  R AA1 B\nROB'S  R AA1 B Z\nROBACK  R OW1 - B AE2 K\nROBAINA  R OW0 - B EY1 - N AH0\nROBAK  R OW1 - B AH0 K\nROBAR  R AH0 - B AA1 R\nROBARDS  R AA1 - B ER0 D Z\nROBARE  R OW0 - B AA1 - R EY0\nROBARGE  R AA1 - B AA0 R G\nROBART  R AA1 - B AA2 R T\nROBARTS  R AA1 - B AA2 R T S\nROBB  R AA1 B\nROBB'S  R AA1 B Z\nROBBE  R AA1 B\nROBBED  R AA1 B D\nROBBEN  R AA1 - B AH0 N\nROBBER  R AA1 - B ER0\nROBBERIES  R AA1 - B ER0 - IY0 Z\nROBBERS  R AA1 - B ER0 Z\nROBBERSON  R AA1 - B ER0 - S AH0 N\nROBBERY  R AA1 - B ER0 - IY0\nROBBIE  R AA1 - B IY0\nROBBIE'S  R AA1 - B IY0 Z\nROBBIN  R AA1 - B IH0 N\nROBBING  R AA1 - B IH0 NG\nROBBINS  R AA1 - B IH0 N Z\nROBBS  R AA1 B Z\nROBBY  R AA1 - B IY0\nROBBY'S  R AA1 - B IY0 Z\nROBE  R OW1 B\nROBECK  R OW1 - B EH2 K\nROBED  R OW1 B D\nROBEL  R OW1 - B AH0 L\nROBELLO  R OW0 - B EH1 - L OW0\nROBELO  R AA2 - B EH1 - L OW0\nROBER  R OW1 - B ER0\nROBERDS  R AA1 - B ER0 D Z\nROBERG  R OW1 - B ER0 G\nROBERGE  R AA1 - B ER0 JH\nROBERS  R OW1 - B ER0 Z\nROBERSON  R AA1 - B ER0 - S AH0 N\nROBERT  R AA1 - B ER0 T\nROBERT'S  R AA1 - B ER0 T S\nROBERTA  R AH0 - B ER1 - T AH0\nROBERTI  R AH0 - B ER1 - T IY0\nROBERTO  R AH0 - B EH1 R - T OW0\nROBERTO(2)  R OW0 - B EH1 R - T OW0\nROBERTS  R AA1 - B ER0 T S\nROBERTS'  R AA1 - B ER0 T S\nROBERTS'S  R AA1 - B ER0 T - S IH0 Z\nROBERTSHAW  R AA1 - B ER1 T - SH AO1\nROBERTSON  R AA1 - B ER0 T - S AH0 N\nROBERTSON'S  R AA1 - B ER0 T - S AH0 N Z\nROBES  R OW1 B Z\nROBESON  R OW1 - B IH0 - S AH0 N\nROBEY  R OW1 - B IY0\nROBIA  R OW1 - B IY0 - AH0\nROBICHAUD  R AA1 - B IH0 - SH OW2\nROBICHAUX  R AA1 - B IH0 - SH OW2\nROBICHEAUX  R AA1 - B IH0 - SH OW2\nROBIDEAU  R AA1 - B IH0 - D OW2\nROBIDOUX  R AA1 - B IH0 - D UW0\nROBIE  R OW1 - B IY0\nROBILLARD  R AA1 - B IH0 - L ER0 D\nROBIN  R AA1 - B AH0 N\nROBIN'S  R AA1 - B AH0 N Z\nROBIN'S(2)  R AA1 - B IH0 N Z\nROBIN(2)  R AA1 - B IH0 N\nROBINA  R AH0 - B IY1 - N AH0\nROBINETT  R AA1 - B IH0 - N EH0 T\nROBINETTE  R AA1 - B IH0 - N EH2 T\nROBINHOOD  R AA1 - B IH0 N - HH UH2 D\nROBINIA  R OW0 - B IY1 - N IY0 - AH0\nROBINS  R AA1 - B AH0 N Z\nROBINS'  R AA1 - B AH0 N Z\nROBINS'S  R AA1 - B AH0 N - Z IH0 Z\nROBINSON  R AA1 - B AH0 N - S AH0 N\nROBINSON'S  R AA1 - B AH0 N - S AH0 N Z\nROBINSONS  R AA1 - B AH0 N - S AH0 N Z\nROBINSONS'  R AA1 - B AH0 N - S AH0 N Z\nROBISHAW  R AA1 - B IH0 - SH AO2\nROBISON  R AA1 - B IH0 - S AH0 N\nROBITAILLE  R AA1 - B IH0 - T EY2 L\nROBITUSSIN  R AA2 - B IH0 - T AH1 - S IH0 N\nROBITUSSIN(2)  R OW2 - B AH0 - T AH1 - S IH0 N\nROBL  R AA1 - B AH0 L\nROBLE  R OW1 - B AH0 L\nROBLEDO  R OW0 - B L EY1 - D OW0\nROBLEE  R AA1 - B L IY2\nROBLES  R OW1 - B AH0 L Z\nROBLEY  R AA1 - B L IY0\nROBLIN  R AA1 - B L IH0 N\nROBLING  R OW1 - B AH0 L - IH0 NG\nROBLING(2)  R OW1 - B L IH0 NG\nROBNETT  R AA1 B - N IH0 T\nROBOCOP  R OW1 - B OW0 - K AA2 P\nROBOT  R OW1 - B AA2 T\nROBOT'S  R OW1 - B AA2 T S\nROBOT'S(2)  R OW1 - B AH2 T S\nROBOT(2)  R OW1 - B AH2 T\nROBOTIC  R OW2 - B AA1 - T IH0 K\nROBOTICS  R OW2 - B AA1 - T IH0 K S\nROBOTS  R OW1 - B AA2 T S\nROBOTS(2)  R OW1 - B AH2 T S\nROBS  R AA1 B Z\nROBSON  R AA1 B - S AH0 N\nROBUCK  R AA1 - B AH0 K\nROBUST  R OW0 - B AH1 S T\nROBUSTA  R AA2 - B AH1 - S T AH0\nROBUSTAS  R AA2 - B AH1 - S T AH0 S\nROBUSTELLI  R OW2 - B AH0 - S T EH1 - L IY0\nROBUSTELLI'S  R OW2 - B AH0 - S T EH1 - L IY0 Z\nROBUSTLY  R OW2 - B AH1 S T - L IY0\nROBUSTNESS  R OW0 - B AH1 S T - N AH0 S\nROBY  R OW1 - B IY0\nROBYN  R AA1 - B IH0 N\nROC  R AA1 K\nROCA  R OW1 - K AH0\nROCAP  R OW1 - K AE2 P\nROCARD  R OW1 - K ER0 D\nROCARD(2)  R OW1 - K AA2 R D\nROCARD(3)  R OW2 - SH AA1 R D\nROCARD(4)  R AH0 - K AA1 R D\nROCCA  R AA1 - K AH0\nROCCAFORTE  R OW0 - K AH0 - F AO1 R - T IY0\nROCCAS  R AA1 - K AH0 S\nROCCHI  R OW1 - K IY0\nROCCHIO  R OW1 - K IY0 - OW0\nROCCO  R AA1 - K OW0\nROCCO'S  R AA1 - K OW0 Z\nROCH  R AA1 K\nROCHA  R OW1 - K AH0\nROCHAT  R AA1 - CH AH0 T\nROCHBERG  R OW1 CH - B ER0 G\nROCHE  R OW1 CH\nROCHE'S  R OW1 - SH IH0 Z\nROCHE(2)  R OW1 SH\nROCHEFORT  R AA1 - K IH0 - F ER0 T\nROCHEFORT(2)  R AA1 SH - F ER0 T\nROCHEFORT(3)  R AA1 K - F ER0 T\nROCHELEAU  R AA1 - SH IH0 - L OW0\nROCHELLA  R AH0 - CH EH1 - L AH0\nROCHELLE  R OW0 - SH EH1 L\nROCHELLE'S  R OW0 - SH EH1 L Z\nROCHELLE'S(2)  R AH2 - SH EH1 L Z\nROCHELLE(2)  R AH2 - SH EH1 L\nROCHER  R OW1 - CH ER0\nROCHER(2)  R OW1 - SH ER0\nROCHESTER  R AA1 - CH EH2 - S T ER0\nROCHESTER'S  R AA1 - CH EH2 - S T ER0 Z\nROCHETTE  R AH0 - SH EH1 T\nROCHFORD  R AA1 CH - F ER0 D\nROCHLIN  R AA1 K - L IH0 N\nROCHON  R AA1 - CH AH0 N\nROCK  R AA1 K\nROCK'N'ROLL  R AA1 - K AH0 N - R OW1 L\nROCK'S  R AA1 K S\nROCK-AND-ROLL  R AA1 - K AE1 N - D R OW1 L\nROCKABILLY  R AA1 - K AH0 - B IH2 - L IY0\nROCKAFELLOW  R AA1 - K AH0 - F EH2 - L OW0\nROCKAWAY  R AA1 K - AH0 - W EY2\nROCKE  R AA1 K\nROCKED  R AA1 K T\nROCKEFELLER  R AA1 - K AH0 - F EH2 - L ER0\nROCKEFELLER'S  R AA1 - K AH0 - F EH2 - L ER0 Z\nROCKEFELLERS  R AA1 - K AH0 - F EH2 - L ER0 Z\nROCKEL  R AA1 - K AH0 L\nROCKENBACH  R AA1 - K IH0 N - B AA0 K\nROCKER  R AA1 - K ER0\nROCKERS  R AA1 - K ER0 Z\nROCKET  R AA1 - K AH0 T\nROCKET'S  R AA1 - K AH0 T S\nROCKETDYNE  R AA1 - K IH0 T - D AY2 N\nROCKETED  R AA1 - K AH0 - T IH0 D\nROCKETING  R AA1 - K AH0 - T IH0 NG\nROCKETRY  R AA1 - K AH0 - T R IY0\nROCKETS  R AA1 - K AH0 T S\nROCKETT  R AA1 - K IH0 T\nROCKETTE  R AA0 - K EH1 T\nROCKETTES  R AA0 - K EH1 T S\nROCKEY  R AA1 - K IY0\nROCKFORD  R AA1 K - F ER0 D\nROCKHILL  R AA1 K - HH IH2 L\nROCKHOLD  R AA1 K - HH OW2 L D\nROCKHOLT  R AA1 K - HH OW2 L T\nROCKIES  R AA1 - K IY0 Z\nROCKIN'  R AA1 - K IH0 N\nROCKING  R AA1 - K IH0 NG\nROCKINGHAM  R AA1 - K IH0 NG - HH AE2 M\nROCKLAND  R AA1 K - L AH0 N D\nROCKLEY  R AA1 K - L IY0\nROCKLIN  R AA1 K - L IH0 N\nROCKMAN  R AA1 K - M AH0 N\nROCKMORE  R AA1 K - M AO0 R\nROCKNE  R AA1 K - N IY0\nROCKOFF  R AA1 K - AO2 F\nROCKOW  R AA1 - S K OW0\nROCKPORT  R AA1 K - P AO2 R T\nROCKRESORT  R AA1 - K R IH0 - Z AO2 R T\nROCKRESORTS  R AA1 - K R IH0 - Z AO2 R T S\nROCKROSE  R AA1 - K R OW2 Z\nROCKS  R AA1 K S\nROCKVILLE  R AA1 K - V IH2 L\nROCKWELL  R AA1 - K W EH2 L\nROCKWELL'S  R AA1 - K W EH2 L Z\nROCKWOOD  R AA1 K - W UH2 D\nROCKY  R AA1 - K IY0\nROCOCO  R AH0 - K OW1 - K OW2\nROCQUE  R AA1 K\nROD  R AA1 D\nRODA  R OW1 - D AH0\nRODABAUGH  R AA1 - D AH0 - B AO0\nRODAK  R OW1 - D AH0 K\nRODALE  R OW1 - D EY2 L\nRODARTE  R AA1 - D AA0 R T\nRODAS  R OW1 - D AH0 Z\nRODD  R AA1 D\nRODDEN  R AA1 - D AH0 N\nRODDENBERRY  R AA1 - D AH0 N - B EH0 - R IY0\nRODDEY  R AA1 - D IY0\nRODDICK  R AA1 - D IH2 K\nRODDIE  R AA1 - D IY0\nRODDING  R AA1 - D IH0 NG\nRODDY  R AA1 - D IY0\nRODE  R OW1 D\nRODEBAUGH  R AA1 - D IH0 - B AO0\nRODEFER  R AA1 - D IH0 - F ER0\nRODEFFER  R AA1 - D IH0 - F ER0\nRODEHEAVER  R AA1 - D IH0 - HH IY0 - V ER0\nRODELA  R OW0 - D EH1 - L AH0\nRODELL  R AA1 - D AH0 L\nRODEN  R OW1 - D AH0 N\nRODENBAUGH  R AA1 - D IH0 N - B AW0\nRODENBECK  R OW1 - D AH0 N - B EH0 K\nRODENBERG  R OW1 - D AH0 N - B ER0 G\nRODENBERGER  R OW1 - D AH0 N - B ER0 - G ER0\nRODENBURG  R OW1 - D AH0 N - B ER0 G\nRODENT  R OW1 - D AH0 N T\nRODENTS  R OW1 - D AH0 N T S\nRODEO  R OW1 - D IY0 - OW2\nRODEOS  R OW1 - D IY0 - OW2 Z\nRODER  R OW1 - D ER0\nRODERICA  R OW0 - D ER0 - IY1 - K AH0\nRODERICK  R AA1 - D R IH0 K\nRODERICK'S  R AA1 - D R IH0 K S\nRODES  R OW1 D Z\nRODEWALD  R AA1 - D UW0 - AO0 L D\nRODEWAY  R OW1 D - W EY2\nRODGE  R AA1 JH\nRODGER  R AA1 - JH ER0\nRODGERS  R AA1 - JH ER0 Z\nRODGIN  R AA1 - JH IH0 N\nRODHAM  R AO1 - D AH0 M\nRODI  R OW1 - D IY0\nRODICK  R AA1 - D IH0 K\nRODIER  R OW1 - D IY0 - ER0\nRODIME  R OW0 - D IY1 M\nRODIN  R OW1 - D IH0 N\nRODIN(2)  R OW2 - D AE1 N\nRODINE  R OW0 - D IY1 - N IY0\nRODINO  R OW0 - D IY1 - N OW0\nRODKEY  R AA1 D - K IY2\nRODMAN  R AA1 D - M AH0 N\nRODMAN'S  R AA1 D - M AH0 N Z\nRODMOND  R AA1 D - M AH0 N D\nRODMUND  R AA1 D - M AH0 N D\nRODNEY  R AA1 D - N IY0\nRODOCKER  R AA1 - D AH0 - K ER0\nRODOLF  R AA1 - D OW0 L F\nRODOLFO  R OW0 - D AA1 L - F OW0\nRODOLPH  R OW1 - D AA2 L F\nRODRICK  R AA1 - D R IH0 K\nRODRIGEUZ  R OW0 - D R IY1 - JH UW0 Z\nRODRIGO  R AH0 - D R IY1 - G OW0\nRODRIGUE  R OW1 - D R IY0 G\nRODRIGUES  R AA0 - D R IY1 - G IH0 S\nRODRIGUEZ  R AA0 - D R IY1 - G EH0 Z\nRODRIGUEZ'S  R AA0 - D R IY1 - G EH0 - Z IH0 Z\nRODRIQUES  R AA0 - D R IY1 - G EH0 S\nRODRIQUEZ  R AA0 - D R IY1 - K EH0 Z\nRODS  R AA1 D Z\nRODWELL  R AA1 D - W EH2 L\nRODY  R OW1 - D IY0\nROE  R OW1\nROEBER  R OW1 - B ER0\nROEBKE  R OW1 B K\nROEBLING  R OW1 - B L IH0 NG\nROEBUCK  R OW1 - B AH2 K\nROEBUCK'S  R OW1 - B AH2 K S\nROECKER  R OW1 - K ER0\nROED  R OW1 D\nROEDEL  R OW1 - D AH0 L\nROEDER  R OW1 - D ER0\nROEDERER  R OW1 - D ER0 - ER0\nROEDIGER  R OW1 - D IH0 - G ER0\nROEDL  R OW1 - D AH0 L\nROEGNER  R OW1 G - N ER0\nROEHI  R OW1 - IY0\nROEHL  R OW1 L\nROEHLING  R OW1 - L IH0 NG\nROEHM  R OW1 M\nROEHR  R AO1 R\nROEHRICH  R AO1 - R IH0 K\nROEHRIG  R AO1 - R IH0 G\nROEHRS  R AO1 R Z\nROELAND  R OW1 - L AH0 N D\nROELKE  R OW1 L K\nROELL  R OW1 L\nROELLE  R OW1 L\nROELLER  R OW1 - L ER0\nROELOFS  R OW1 - L AH0 F S\nROEMER  R OW1 - M ER0\nROEMMICH  R OW1 - M IH0 K\nROEN  R OW1 N\nROEPER  R OW1 - P ER0\nROEPKE  R OW1 P K\nROES  R OW1 Z\nROESCH  R OW1 SH\nROESE  R OW1 S\nROESEL  R OW1 - S AH0 L\nROESER  R OW1 - Z ER0\nROESKE  R OW1 S K\nROESLER  R OW1 - S AH0 - L ER0\nROESLER(2)  R OW1 S - L ER0\nROESNER  R OW1 S - N ER0\nROESSLER  R OW1 - S AH0 - L ER0\nROESSLER(2)  R OW1 S - L ER0\nROESSNER  R OW1 S - N ER0\nROETHER  R OW1 - DH ER0\nROETHLER  R OW1 - TH AH0 - L ER0\nROETHLER(2)  R OW1 TH - L ER0\nROETTGER  R OW1 T - G ER0\nROEVER  R AA1 - EH0 - V ER0\nROFF  R AO1 F\nROFFE  R AA1 F\nROFFMAN  R AO1 F - M AH0 N\nROFIN  R OW1 - F IH0 N\nROG  R AA1 G\nROGACHEV  R OW1 - G AH0 - CH AH0 V\nROGACKI  R AH0 - G AA1 T S - K IY0\nROGAINE  R OW0 - G EY1 N\nROGAL  R OW1 - G AH0 L\nROGALA  R OW0 - G AA1 - L AH0\nROGALLA  R OW0 - G AA1 - L AH0\nROGALSKI  R AH0 - G AA1 L S - K IY0\nROGAN  R OW1 - G AH0 N\nROGEL  R OW1 - G AH0 L\nROGELIO  R OW0 - G IY1 - L IY0 - OW0\nROGER  R AA1 - JH ER0\nROGER'S  R AA1 - JH ER0 Z\nROGERNOMICS  R OW2 - G ER0 - N AA1 - M IH0 K S\nROGERS  R AA1 - JH ER0 Z\nROGERS'  R AA1 - JH ER0 Z\nROGERS'S  R AA1 - JH ER0 - Z IH0 Z\nROGERSON  R AA1 - G ER0 - S AH0 N\nROGGE  R AA1 G\nROGGENBUCK  R AA1 - G IH0 N - B AH0 K\nROGGENKAMP  R AA1 - G IH0 N - K AE0 M P\nROGGIO  R AA1 - Z IY0 - OW0\nROGGOW  R AA1 - G OW0\nROGIER  R OW1 - G IY0 - ER0\nROGIN  R OW1 - G IH0 N\nROGINSKI  R AH0 - G IH1 N - S K IY0\nROGNESS  R AA1 G - N IH0 S\nROGOFF  R AA1 - G AO0 F\nROGOWSKI  R AH0 - G AO1 F S - K IY0\nROGOZINSKI  R AH0 - G AH0 - Z IH1 N - S K IY0\nROGSTAD  R AA1 G - S T AH0 D\nROGUE  R OW1 G\nROGUES  R OW1 G Z\nROGUS  R OW1 - G AH0 S\nROH  R OW1\nROH'S  R OW1 Z\nROHAN  R OW1 - AH0 N\nROHANA  R AH0 - HH AE1 - N AH0\nROHATYN  R AA1 - HH AH0 - T IH0 N\nROHATYN'S  R AA1 - HH AH0 - T IH0 N Z\nROHATYN'S(2)  R OW0 - HH AE1 - T AH0 N Z\nROHATYN(2)  R OW0 - HH AE1 - T AH0 N\nROHDE  R OW1 D\nROHDE(2)  R OW1 - D AH0\nROHE  R OW1\nROHER  R OW1 - ER0\nROHL  R OW1 L\nROHLAND  R OW1 - L AH0 N D\nROHLEDER  R OW1 - L IH0 - D ER0\nROHLF  R OW1 L F\nROHLFING  R OW1 L - F IH0 NG\nROHLFS  R OW1 L F S\nROHLICEK  R AA1 - L AH0 - CH EH0 K\nROHLING  R OW1 - L IH0 NG\nROHLMAN  R OW1 L - M AH0 N\nROHLOFF  R OW1 - L AO0 F\nROHM  R OW1 M\nROHMAN  R OW1 - M AH0 N\nROHMER  R OW1 - M ER0\nROHN  R AA1 N\nROHNER  R OW1 - N ER0\nROHR  R AO1 R\nROHRBACH  R AO1 R - B AA0 K\nROHRBACHER  R AO1 R - B AA0 - K ER0\nROHRBACK  R AO1 R - B AE0 K\nROHRBAUGH  R AO1 R - B AW0\nROHRBOUGH  R AO1 R - B AW0\nROHRER  R AO1 - R ER0\nROHRICH  R AO1 - R IH0 K\nROHRIG  R AO1 - R IH0 G\nROHRMAN  R AO1 R - M AH0 N\nROHRS  R AO1 R Z\nROHS  R OW1 Z\nROHSTOFF  R OW1 S T - AO0 F\nROHWEDDER  R OW1 - W IH0 - D ER0\nROHWEDER  R OW1 - W IH0 - D ER0\nROHWER  R OW1 - W ER0\nROHYPNOL  R OW2 - HH AY1 P - N AO2 L\nROI  R OY1\nROIG  R OY1 G\nROIL  R OY1 L\nROILED  R OY1 L D\nROILING  R OY1 - L IH0 NG\nROISTER  R OY1 - S T ER0\nROISTER'S  R OY1 - S T ER0 Z\nROJAS  R OW1 - HH AA0 S\nROJEK  R OW1 - Y EH0 K\nROJO  R OW1 - JH OW0\nROKA  R OW1 - K AH0\nROKAHR  R OW1 - K AA2 R\nROKAR  R OW1 - K AA2 R\nROKICKI  R AH0 - K IH1 - K IY0\nROKOS  R OW1 - K OW0 Z\nROKOSZ  R AA1 - K AH0 SH\nROL  R OW1 L\nROLAN  R OW1 - L AH0 N\nROLAND  R OW1 - L AH0 N D\nROLANDA  R OW0 - L AA1 N - D AH0\nROLANDO  R OW0 - L AA1 N - D OW0\nROLDAN  R OW1 L - D AH0 N\nROLE  R OW1 L\nROLEMODEL  R OW1 L - M AA2 - D AH0 L\nROLEMODELS  R OW1 L - M AA2 - D AH0 L Z\nROLEN  R OW1 - L AH0 N\nROLEPLAYING  R OW1 L - P L EY2 - IH0 NG\nROLES  R OW1 L Z\nROLETTE  R OW0 - L EH1 T\nROLEX  R OW1 - L EH0 K S\nROLEY  R OW1 - L IY0\nROLF  R OW1 L F\nROLFE  R OW1 L F\nROLFES  R OW1 L F S\nROLFS  R OW1 L F S\nROLFSON  R OW1 L F - S AH0 N\nROLIN  R OW1 - L IH0 N\nROLING  R OW1 - L IH0 NG\nROLISON  R AA1 - L IH0 - S AH0 N\nROLL  R OW1 L\nROLL'S  R OW1 L Z\nROLLA  R AA1 - L AH0\nROLLAND  R AA1 - L AH0 N D\nROLLAND'S  R OW1 - L AH0 N D Z\nROLLBACK  R OW1 L - B AE2 K\nROLLBACKS  R OW1 L - B AE2 K S\nROLLE  R OW1 L\nROLLED  R OW1 L D\nROLLEN  R AO1 - L AH0 N\nROLLER  R OW1 - L ER0\nROLLERBLADE  R OW1 - L ER0 - B L EY2 D\nROLLERBLADES  R OW1 - L ER0 - B L EY2 D Z\nROLLERBLADING  R OW1 - L ER0 - B L EY2 - D IH0 NG\nROLLERCOASTER  R OW1 - L ER0 - K OW2 - S T ER0\nROLLERS  R OW1 - L ER0 Z\nROLLET  R OW0 - L EH1 T\nROLLEY  R AA1 - L IY0\nROLLI  R AA1 - L IY0\nROLLICKING  R AA1 - L IH0 - K IH0 NG\nROLLIE  R OW1 - L IY0\nROLLIE(2)  R AO1 - L IY0\nROLLIN  R AA1 - L IH0 N\nROLLIN'  R OW1 - L IH0 N\nROLLING  R OW1 - L IH0 NG\nROLLINGER  R OW1 - L IH0 - NG ER0\nROLLINGS  R OW1 - L IH0 NG Z\nROLLINS  R AA1 - L IH0 N Z\nROLLINS'  R AA1 - L IH0 N Z\nROLLINS'S  R AA1 - L IH0 N - Z IH0 Z\nROLLINSON  R AA1 - L IH0 N - S AH0 N\nROLLISON  R AA1 - L IH0 - S AH0 N\nROLLMAN  R OW1 L - M AH0 N\nROLLO  R AA1 - L OW0\nROLLOUT  R OW1 L - AW2 T\nROLLOVER  R OW1 - L OW2 - V ER0\nROLLOVERS  R OW1 L - OW2 - V ER0 Z\nROLLS  R OW1 L Z\nROLLS'S  R OW1 L - Z IH0 Z\nROLLTOP  R OW1 L - T AA2 P\nROLLWAGEN  R OW1 L - W AE2 - G AH0 N\nROLLY  R OW1 - L IY0\nROLLYSON  R AA1 - L IH0 - S AH0 N\nROLM  R OW1 M\nROLNICK  R OW1 L - N IH0 K\nROLODEX  R OW1 - L AH0 - D EH2 K S\nROLOFF  R AA1 - L AO0 F\nROLON  R OW1 - L AH0 N\nROLPH  R OW1 L F\nROLSTON  R OW1 L - S T AH0 N\nROLT  R OW1 L T\nROM  R AA1 M\nROM'S  R AA1 M Z\nROMA  R OW1 - M AH0\nROMACK  R AA1 - M AH0 K\nROMAGNOLI  R OW0 - M AA0 G - N OW1 - L IY0\nROMAGNOLO  R OW2 - M AA0 - N Y OW1 - L OW0\nROMAIN  R OW0 - M EY1 N\nROMAINE  R OW0 - M EY1 N\nROMAN  R OW1 - M AH0 N\nROMAN'S  R OW1 - M AH0 N Z\nROMANCE  R OW0 - M AE1 N S\nROMANCE(2)  R OW1 - M AE0 N S\nROMANCES  R OW0 - M AE1 N - S IH0 Z\nROMANCING  R OW0 - M AE1 N - S IH0 NG\nROMANEK  R AA1 - M AH0 - N IH0 K\nROMANELLI  R OW0 - M AA0 - N EH1 - L IY0\nROMANELLO  R OW0 - M AA0 - N EH1 - L OW0\nROMANESQUE  R OW2 - M AH0 - N EH1 S K\nROMANI  R OW0 - M AA1 - N IY0\nROMANIA  R OW0 - M EY1 - N IY0 - AH0\nROMANIA'S  R OW0 - M EY1 - N IY0 - AH0 Z\nROMANIAN  R OW0 - M EY1 - N IY0 - AH0 N\nROMANIANS  R OW0 - M EY1 - N IY0 - AH0 N Z\nROMANIELLO  R OW0 - M AA0 - N IY0 - EH1 - L OW0\nROMANIK  R AH0 - M AE1 - N IH0 K\nROMANN  R OW1 - M AH0 N\nROMANO  R OW0 - M AA1 - N OW2\nROMANO'S  R OW0 - M AA1 - N OW2 Z\nROMANOFF  R OW1 - M AH0 - N AO2 F\nROMANONE  R OW0 - M AA0 - N OW1 N\nROMANONES  R OW0 - M AA0 - N OW1 N Z\nROMANOSKI  R AH0 - M AH0 - N AW1 S - K IY0\nROMANOV  R OW1 - M AH0 - N AO2 V\nROMANOV(2)  R OW1 - M AH0 - N AO2 F\nROMANOW  R AH0 - M AE1 - N OW0\nROMANOWSKI  R AH0 - M AH0 - N AO1 F S - K IY0\nROMANS  R OW1 - M AH0 N Z\nROMANSKI  R AH0 - M AE1 N - S K IY0\nROMANTIC  R OW0 - M AE1 N - T IH0 K\nROMANTICALLY  R OW0 - M AE1 N - T IH0 - K AH0 - L IY0\nROMANTICALLY(2)  R OW0 - M AE1 N - T IH0 K - L IY0\nROMANTICISM  R OW0 - M AE1 N - T AH0 - S IH2 - Z AH0 M\nROMANTICIZE  R OW0 - M AE1 N - T AH0 - S AY2 Z\nROMANTICIZED  R OW0 - M AE1 N - T AH0 - S AY2 Z D\nROMANTICIZING  R OW0 - M AE1 N - T AH0 - S AY2 - Z IH0 NG\nROMANTICS  R OW0 - M AE1 N - T IH0 K S\nROMANY  R AA1 - M AH0 - N IY0\nROMANY(2)  R OW1 - M AH0 - N IY0\nROMAS  R OW1 - M AH0 Z\nROMBACH  R AA1 M - B AA2 K\nROMBERG  R AA1 M - B ER0 G\nROMBERGER  R AA1 M - B ER0 - G ER0\nROME  R OW1 M\nROME'S  R OW1 M Z\nROMELLA  R OW0 - M EH1 - L AH0\nROMELLE  R AH0 - M EH1 L\nROMEO  R OW1 - M IY0 - OW2\nROMER  R OW1 - M ER0\nROMERO  R OW0 - M EH1 - R OW0\nROMESBURG  R OW1 M Z - B ER0 G\nROMEY  R OW1 - M IY0\nROMICK  R AA1 - M IH0 K\nROMIG  R OW1 - M IH0 G\nROMILDA  R AH0 - M IY1 L - D AH0\nROMINA  R AH0 - M IY1 - N AH0\nROMINE  R AH0 - M IY1 - N IY0\nROMINE(2)  R AA1 - M IH0 N\nROMINES  R AA1 - M IH0 N Z\nROMINES(2)  R AH0 - M IY1 - N IY0 Z\nROMINGER  R OW1 - M IH0 - NG ER0\nROMITO  R OW0 - M IY1 - T OW0\nROMLEY  R AA1 M - L IY0\nROMM  R AA1 M\nROMMEL  R AA1 - M AH0 L\nROMNEY  R AA1 M - N IY0\nROMNEY'S  R AA1 M - N IY0 Z\nROMO  R OW1 - M OW0\nROMOLA  R AA1 - M AH0 - L AH0\nROMP  R AA1 M P\nROMPING  R AA1 M - P IH0 NG\nROMS  R AA1 M Z\nROMULUS  R AA1 - M Y AH0 - L AH0 S\nRON  R AA1 N\nRON'S  R AA1 N Z\nRONA  R OW1 - N AH0\nRONALD  R AA1 - N AH0 L D\nRONALDA  R OW0 - N AA1 L - D AH0\nRONAN  R OW1 - N AH0 N\nRONAN'S  R OW1 - N AH0 N Z\nRONAYNE  R AA1 - N EY2 N\nRONCA  R OW1 N - K AH0\nRONCO  R OW1 N - K OW0\nRONDA  R AA1 N - D AH0\nRONDEAU  R AA0 N - D OW1\nRONDINELLI  R OW0 N - D IY0 - N EH1 - L IY0\nRONDON  R AA1 N - D AH0 N\nRONDONIA  R AA0 N - D OW1 - N IY0 - AH0\nRONE  R OW1 N\nRONEN  R OW1 - N AH0 N\nRONEY  R OW1 - N IY0\nRONG  R AO1 NG\nRONGJI  R AO1 NG - JH IY0\nRONI  R OW1 - N IY0\nRONIN  R OW1 - N IH0 N\nRONK  R AA1 NG K\nRONKO  R AA1 NG - K OW0\nRONNA  R AA1 - N AH0\nRONNE  R AA1 N\nRONNIE  R AA1 - N IY0\nRONNING  R AA1 - N IH0 NG\nRONNY  R AA1 - N IY0\nRONQUILLO  R OW0 N - K W IH1 - L OW0\nRONSON  R AA1 N - S AH0 N\nRONSTADT  R AA1 N - S T AE2 T\nROOD  R UW1 D\nROODE  R UW1 D\nROOF  R UW1 F\nROOFED  R UW1 F T\nROOFER  R UW1 - F ER0\nROOFERS  R UW1 - F ER0 Z\nROOFING  R UW1 - F IH0 NG\nROOFS  R UW1 F S\nROOFTOP  R UW1 F - T AA2 P\nROOFTOPS  R UW1 F - T AA2 P S\nROOFTREE  R UW1 F - T R IY2\nROOK  R UH1 K\nROOKARD  R UH1 - K ER0 D\nROOKE  R UH1 K\nROOKER  R UH1 - K ER0\nROOKIE  R UH1 - K IY0\nROOKIES  R UH1 - K IY0 Z\nROOKS  R UH1 K S\nROOKSTOOL  R UH1 K - S T UW2 L\nROOM  R UW1 M\nROOM'S  R UW1 M Z\nROOME  R UW1 M\nROOMFUL  R UW1 M - F UH2 L\nROOMIER  R UW1 - M IY0 - ER0\nROOMINESS  R UW1 - M IY0 - N AH0 S\nROOMING  R UW1 - M IH0 NG\nROOMMATE  R UW1 M - EY2 T\nROOMMATES  R UW1 M - EY2 T S\nROOMS  R UW1 M Z\nROOMY  R UW1 - M IY0\nROONE  R UW1 N\nROONEY  R UW1 - N IY0\nROONEY'S  R UW1 - N IY0 Z\nROOP  R UW1 P\nROOPE  R UW1 P\nROORDA  R UH1 R - D AH0\nROOS  R UW1 Z\nROOSA  R UW1 - S AH0\nROOSE  R UW1 Z\nROOSEVELT  R OW1 - Z AH0 - V EH2 L T\nROOSEVELT'S  R OW1 - Z AH0 - V EH2 L T S\nROOSEVELT'S(2)  R UW1 - Z AH0 - V EH2 L T S\nROOSEVELT(2)  R UW1 - Z AH0 - V EH2 L T\nROOSEVELTS  R OW1 - Z AH0 - V EH2 L T S\nROOSEVELTS(2)  R UW1 - Z AH0 - V EH2 L T S\nROOST  R UW1 S T\nROOSTED  R UW1 - S T IH0 D\nROOSTER  R UW1 - S T ER0\nROOSTERS  R UW1 - S T ER0 Z\nROOT  R UW1 T\nROOTED  R UW1 - T AH0 D\nROOTED(2)  R UW1 - T IH0 D\nROOTER  R UW1 - T ER0\nROOTERS  R UW1 - T ER0 Z\nROOTING  R UW1 - T IH0 NG\nROOTLESS  R UW1 T - L AH0 S\nROOTS  R UW1 T S\nROOTSTEIN  R UW1 T - S T AY2 N\nROPAK  R OW1 - P AE0 K\nROPE  R OW1 P\nROPED  R OW1 P T\nROPER  R OW1 - P ER0\nROPER'S  R OW1 - P ER0 Z\nROPERS  R OW1 - P ER0 Z\nROPES  R OW1 P S\nROPING  R OW1 - P IH0 NG\nROPP  R AA1 P\nROPPOLO  R OW0 - P OW1 - L OW0\nROPS  R AA1 P S\nROQUE  R OW1 K\nROQUEMORE  R OW0 K - M AO1 R\nRORABAUGH  R AO1 - R AH0 - B AO0\nRORER  R AO1 - R ER0\nRORER'S  R AO1 - R ER0 Z\nROREX  R AO1 - R EH0 K S\nRORICK  R AO1 - R IH0 K\nRORIE  R AO1 - R IY0\nRORK  R AO1 R K\nRORKE  R AO1 R K\nRORRER  R AO1 - ER0 R\nRORSCHACH  R AO1 R - SH AA2\nRORSCHACH(2)  R AO1 R - SH AA2 CH\nRORY  R AO1 - R IY0\nROS  R AO1 S\nROSA  R OW1 - Z AH0\nROSA'S  R OW1 - Z AH0 Z\nROSABEL  R OW1 - Z AH0 - B EH2 L\nROSABELLE  R AA1 - S AH0 - B AH0 L\nROSADO  R AH0 - S AA1 - D OW0\nROSALEE  R OW2 - S AH0 - L IY1\nROSALEE(2)  R OW2 - Z AH0 - L IY1\nROSALES  R OW1 - S EY0 L Z\nROSALEZ  R OW0 - S AA1 - L EH0 Z\nROSALIA  R OW0 - Z AH0 - L IY1 - AH0\nROSALIE  R OW1 - Z AH0 - L IY0\nROSALIND  R AA1 - Z AH0 - L IH0 N D\nROSALINDA  R OW0 - S AA0 - L IY1 N - D AH0\nROSALYN  R AA1 - Z AH0 - L IH0 N\nROSALYN'S  R AA1 - Z AH0 - L IH0 N Z\nROSALYND  R AA1 - Z AH0 - L IH0 N D\nROSALYNN  R OW1 - Z AH0 - L IH2 N\nROSAMILIA  R OW0 - Z AA0 - M IY1 - L IY0 - AH0\nROSAMOND  R OW1 - Z AH0 - M AH0 N D\nROSAMUND  R OW0 - Z AH0 - M UH1 N D\nROSAN  R OW1 - Z AH0 N\nROSANDER  R OW0 - Z AE1 N - D ER0\nROSANNA  R OW0 - Z AE1 - N AH0\nROSANNE  R OW0 - Z AE1 N\nROSANO  R OW0 - Z AA1 - N OW0\nROSARIA  R OW0 - Z AA1 - R IY0 - AH0\nROSARIA'S  R OW0 - Z AA1 - R IY0 - AH0 Z\nROSARIES  R OW1 - Z ER0 - IY0 Z\nROSARIO  R OW0 - Z AA1 - R IY0 - OW0\nROSARY  R OW1 - Z ER0 - IY0\nROSAS  R OW1 - Z AH0 Z\nROSASCO  R OW0 - Z AA1 - S K OW0\nROSATI  R OW0 - Z AA1 - T IY0\nROSATO  R OW0 - Z AA1 - T OW0\nROSBERG  R AA1 S - B ER0 G\nROSBOROUGH  R AA1 S - B ER0 - OW0\nROSCH  R AO1 SH\nROSCHER  R AO1 - SH ER0\nROSCOE  R AA1 - S K OW0\nROSE  R OW1 Z\nROSE'S  R OW1 - Z IH0 Z\nROSEANNE  R OW2 - Z AE1 N\nROSEANNE'S  R OW2 - Z AE1 N Z\nROSEBERRY  R OW1 Z - B EH2 - R IY0\nROSEBOOM  R OW1 Z - B UW2 M\nROSEBORO  R OW0 Z - B ER1 - OW0\nROSEBOROUGH  R OW1 Z - B ER2 - OW0\nROSEBROCK  R OW1 Z - B R AH0 K\nROSEBROOK  R OW1 Z - B R UH2 K\nROSEBROUGH  R OW1 Z - B R AW0\nROSEBUD  R OW1 Z - B AH0 D\nROSEBUSH  R OW1 Z - B UH2 SH\nROSECRANS  R OW1 Z - K R AE2 N Z\nROSEKRANS  R OW1 Z - K R AH0 N Z\nROSEL  R OW1 - Z AH0 L\nROSELAND  R OW1 Z - L AH0 N D\nROSELAWN  R OW1 Z - L AO2 N\nROSELAWN'S  R OW1 Z - L AO2 N Z\nROSELINE  R OW1 Z - L AY2 N\nROSELL  R OW1 - Z AH0 L\nROSELLA  R OW0 - Z EH1 - L AH0\nROSELLEN  R OW1 - Z AH0 - L AH0 N\nROSELLI  R OW0 - S EH1 - L IY0\nROSELLO  R OW0 - S EH1 - L OW0\nROSEMAN  R OW1 Z - M AH0 N\nROSEMARIE  R OW2 Z - M ER0 - IY1\nROSEMARY  R OW1 Z - M EH2 - R IY0\nROSEMEAD  R OW1 Z - M IY2 D\nROSEMEYER  R OW1 Z - M AY0 - ER0\nROSEMOND  R OW1 Z - M AH0 N D\nROSEMONT  R OW1 Z - M AA2 N T\nROSEN  R OW1 - Z AH0 N\nROSEN'S  R OW1 - Z AH0 N Z\nROSENAU  R OW1 Z - N AW0\nROSENBACH  R OW1 - Z AH0 N - B AA2 K\nROSENBALM  R OW1 - Z AH0 N - B AA2 M\nROSENBAUM  R OW1 - Z AH0 N - B AW2 M\nROSENBECK  R OW1 - Z AH0 N - B EH2 K\nROSENBERG  R OW1 - Z AH0 N - B ER0 G\nROSENBERG'S  R OW1 - Z AH0 N - B ER0 G Z\nROSENBERGER  R OW1 - Z AH0 N - B ER0 - G ER0\nROSENBERGS  R OW1 - Z AH0 N - B ER0 G Z\nROSENBERRY  R OW1 - Z AH0 N - B EH2 - R IY0\nROSENBLATT  R OW1 - Z AH0 N - B L AE2 T\nROSENBLOOM  R OW1 - Z AH0 N - B L UW2 M\nROSENBLUM  R OW1 - Z AH0 N - B L UW2 M\nROSENBLUTH  R OW1 - Z AH0 N - B L UW0 TH\nROSENBOOM  R OW1 - Z AH0 N - B UW2 M\nROSENBURG  R OW1 - Z AH0 N - B ER0 G\nROSENCRANS  R OW1 - Z AH0 N - K R AE0 N Z\nROSENDAHL  R OW1 - Z AH0 N - D AA2 L\nROSENDALE  R OW1 - Z AH0 N - D EY2 L\nROSENE  R AA1 - S IY0 N\nROSENER  R OW1 - Z AH0 N - ER0\nROSENFELD  R OW1 - Z AH0 N - F EH2 L D\nROSENFIELD  R OW1 - Z AH0 N - F IY2 L D\nROSENGARTEN  R OW1 - Z AH0 N - G AA2 R - T AH0 N\nROSENGRANT  R OW1 - Z AH0 N - G R AE2 N T\nROSENGREN  R OW1 - Z AH0 N - G R EH0 N\nROSENHAUS  R OW1 - Z AH0 N - HH AW2 S\nROSENKRANS  R OW1 - Z AH0 N - K R AE2 N Z\nROSENKRANTZ  R OW1 - Z AH0 N - K R AE2 N T S\nROSENKRANZ  R OW1 - Z AH0 N - K R AE2 N T S\nROSENLUND  R OW1 - Z AH0 N - L AH0 N D\nROSENMAN  R OW1 - Z AH0 N - M AH0 N\nROSENOW  R OW1 - Z AH0 - N AW0\nROSENQUIST  R OW1 - Z AH0 N - K W IH0 S T\nROSENSHINE  R OW1 - Z AH0 N - SH AY2 N\nROSENSTEEL  R OW1 - Z AH0 N - S T IY2 L\nROSENSTEIN  R OW1 - Z AH0 N - S T AY2 N\nROSENSTEIN(2)  R OW1 - Z AH0 N - S T IY2 N\nROSENSTOCK  R OW1 - Z AH0 N - S T AA2 K\nROSENSWEIG  R OW1 - Z AH0 N - S W AY0 G\nROSENTHAL  R OW1 - Z AH0 N - TH AO2 L\nROSENTRETER  R OW1 - Z AH0 N - T R EH2 - T ER0\nROSENWALD  R OW1 - Z AH0 N - W AO2 L D\nROSENWASSER  R OW1 - Z AH0 N - W AO0 - S ER0\nROSENZWEIG  R OW1 - Z AH0 N Z - W AY0 G\nROSER  R OW1 - Z ER0\nROSES  R OW1 - Z IH0 Z\nROSETE  R AA1 - S IY0 T\nROSETT  R OW1 - Z AH0 T\nROSETTA  R OW0 - Z EH1 - T AH0\nROSETTE  R AH0 - S EH1 T\nROSETTES  R OW1 - Z EH1 T S\nROSETTI  R OW0 - S EH1 - T IY0\nROSEVEAR  R OW0 Z - V IH1 R\nROSEVILLE  R OW1 Z - V IH2 L\nROSEWICZ  R OW1 Z - W IH2 T S\nROSEWOOD  R OW1 Z - W UH2 D\nROSEWOOD'S  R OW1 Z - W UH2 D Z\nROSEY  R OW1 - Z IY0\nROSH  R AO1 SH\nROSHIER  R OW1 - SH Y ER0\nROSIAK  R AA1 - S IY0 - AE0 K\nROSIE  R OW1 - Z IY0\nROSIE'S  R OW1 - Z IY0 Z\nROSIER  R OW1 - Z IY0 - ER0\nROSIN  R AA1 - Z AH0 N\nROSINA  R OW0 - Z IY1 - N AH0\nROSINE  R OW0 - S IY1 - N IY0\nROSING  R OW1 - Z IH0 NG\nROSINSKI  R AH0 - S IH1 N - S K IY0\nROSINSKY  R AH0 - S IH1 N - S K IY0\nROSITA  R OW0 - Z IY1 - T AH0\nROSKAM  R AA1 S - K AH0 M\nROSKE  R OW1 S K\nROSKO  R OW1 - S K OW0\nROSKOS  R OW1 - S K OW0 Z\nROSLIN  R AA1 S - L IH0 N\nROSLUND  R AO1 Z - L AH0 N D\nROSLYN  R AA1 Z - L IH0 N\nROSMAN  R AA1 S - M AH0 N\nROSMUNDA  R OW0 S - M UW1 N - D AH0\nROSNEFT  R AA1 Z - N IH0 F T\nROSNER  R AA1 S - N ER0\nROSOFF  R AA1 - S AO0 F\nROSOL  R OW1 - S AO0 L\nROSPATCH  R AO1 S - P AE0 CH\nROSS  R AA1 S\nROSS'  R AA1 S\nROSS'S  R AA1 - S IH0 Z\nROSS(2)  R AO1 S\nROSSA  R OW1 - S AH0\nROSSANO  R OW0 - S AA1 - N OW0\nROSSBACH  R AA1 S - B AA0 K\nROSSBOROUGH  R AO1 S - B ER0 - OW0\nROSSE  R AA1 S\nROSSELIN  R AA1 - S IH0 - L IH0 N\nROSSELL  R AA1 - S AH0 L\nROSSELLI  R OW0 - S EH1 - L IY0\nROSSELOT  R AA1 - S IH0 - L AH0 T\nROSSEN  R AO1 - S AH0 N\nROSSER  R AO1 - S ER0\nROSSETTI  R OW0 - S EH1 - T IY0\nROSSETTO  R OW0 - S EH1 - T OW0\nROSSI  R AO1 - S IY0\nROSSIE  R AO1 - S IY0\nROSSIGNOL  R AA1 - S IH0 G - N AO0 L\nROSSIN  R AA1 - S IH0 N\nROSSING  R AO1 - S IH0 NG\nROSSINI  R OW0 - S IY1 - N IY0\nROSSITER  R AO1 - S IH0 - T ER0\nROSSIYA  R AO1 - S IY0 - AH0\nROSSLER  R AA1 - S AH0 - L ER0\nROSSLER(2)  R AA1 S - L ER0\nROSSLYN  R AA1 S - L IH0 N\nROSSMAN  R AO1 S - M AH0 N\nROSSMANN  R AO1 S - M AH0 N\nROSSMILLER  R AA1 S - M IH0 - L ER0\nROSSMORE  R AA1 S - M AO2 R\nROSSNER  R AA1 S - N ER0\nROSSO  R OW1 - S OW0\nROSSON  R AA1 - S AH0 N\nROSSOW  R AA1 - S OW0\nROST  R AA1 S T\nROSTAD  R AA1 - S T AH0 D\nROSTEN  R AA1 - S AH0 N\nROSTENKOWSKI  R AO2 - S T EH0 NG - K AW1 S - K IY0\nROSTENKOWSKI'S  R AO2 - S T EH0 NG - K AW1 S - K IY0 Z\nROSTER  R AA1 - S T ER0\nROSTERS  R AA1 - S T ER0 Z\nROSTON  R AA1 - S T AH0 N\nROSTOV  R AA1 - S T AA0 V\nROSTRON  R AA1 S - T R AH0 N\nROSTROPOVICH  R AO2 - S T R AH0 - P OW1 - V IH0 CH\nROSTROPOVICH(2)  R AH0 - S T R AA1 - P AH0 - V IH0 CH\nROSTRUM  R AA1 S - T R AH0 M\nROSTUCA  R AO2 - S T UW1 - K AH0\nROSTY  R AO1 - S T IY0\nROSWALD  R AA1 - S W AH0 L D\nROSWELL  R AA1 S - W EH0 L\nROSY  R OW1 - Z IY0\nROSZAK  R AA1 - SH AH0 K\nROSZELL  R AA1 - SH AH0 L\nROSZKOWSKI  R AH0 SH - K AO1 F S - K IY0\nROT  R AA1 T\nROTA  R OW1 - T AH0\nROTAN  R OW1 - T AH0 N\nROTARY  R OW1 - T ER0 - IY0\nROTATE  R OW1 - T EY2 T\nROTATED  R OW1 - T EY2 - T IH0 D\nROTATES  R OW1 - T EY2 T S\nROTATING  R OW1 - T EY2 - T IH0 NG\nROTATION  R OW0 - T EY1 - SH AH0 N\nROTATIONAL  R OW0 - T EY1 - SH AH0 - N AH0 L\nROTATIONS  R OW0 - T EY1 - SH AH0 N Z\nROTBERG  R AA1 T - B ER0 G\nROTBLAT  R AA1 T - B L AE0 T\nROTE  R OW1 T\nROTELLA  R OW0 - T EH1 - L AH0\nROTEN  R OW1 - T AH0 N\nROTENBERG  R OW1 - T AH0 N - B ER0 G\nROTENBERRY  R OW1 - T AH0 N - B EH2 - R IY0\nROTERT  R AA1 - T ER0 T\nROTH  R AO1 TH\nROTH'S  R AA1 TH S\nROTHACKER  R AO1 - TH AH0 - K ER0\nROTHBARD  R AO1 TH - B ER0 D\nROTHBART  R AO1 TH - B AA2 R T\nROTHBAUER  R AO1 TH - B AW0 - ER0\nROTHBERG  R AO1 TH - B ER0 G\nROTHCHILD  R AO1 TH - CH AY2 L D\nROTHE  R OW1 DH\nROTHENBERG  R AO1 - TH AH0 N - B ER0 G\nROTHENBERGER  R AO1 - TH AH0 N - B ER0 - G ER0\nROTHER  R AO1 - TH ER0\nROTHERMEL  R AA1 - TH ER0 - M AH0 L\nROTHERT  R AA1 - TH ER0 T\nROTHERY  R AA1 - TH ER0 - IY0\nROTHFUSS  R AO1 TH - F AH0 S\nROTHGEB  R AO1 TH - G IH0 B\nROTHKOPF  R AO1 TH - K AO0 P F\nROTHKOPF(2)  R AO1 TH - K AO0 F\nROTHLISBERGER  R AO1 TH - L IH0 S - B ER0 - G ER0\nROTHMAN  R AO1 TH - M AH0 N\nROTHMANS  R AO1 TH - M AH0 N Z\nROTHMANS'S  R AO1 TH - M AH0 N - Z IH0 Z\nROTHMEIER  R AO1 TH - M AY2 R\nROTHROCK  R AO1 - TH R AH0 K\nROTHS  R AO1 TH S\nROTHSCHILD  R AO1 TH S - CH AY2 L D\nROTHSCHILD'S  R AO1 TH - CH AY2 L D Z\nROTHSCHILDS  R AO1 TH - CH AY2 L D Z\nROTHSTEIN  R AO1 TH - S T AY0 N\nROTHSTEIN(2)  R AO1 TH - S T IY0 N\nROTHWAX  R AO1 TH - W AE2 K S\nROTHWEILER  R AO1 TH - W AY2 - L ER0\nROTHWELL  R AO1 TH - W EH2 L\nROTHWELLS  R AO1 TH - W EH2 L Z\nROTI  R OW1 - T IY0\nROTISSERIE  R OW2 - T IH1 - S ER0 - IY0\nROTMAN  R AA1 T - M AH0 N\nROTO  R OW1 - T OW0\nROTOLO  R OW0 - T OW1 - L OW0\nROTONDI  R OW0 - T OW1 N - D IY0\nROTONDO  R OW0 - T OW1 N - D OW0\nROTOR  R OW1 - T ER0\nROTORS  R OW1 - T ER0 Z\nROTOTILL  R OW1 - T AH0 - T IH2 L\nROTOTILL(2)  R OW1 - T OW0 - T IH2 L\nROTOTILLED  R OW1 - T AH0 - T IH2 L D\nROTOTILLED(2)  R OW1 - T OW0 - T IH2 L D\nROTOTILLER  R OW1 - T AH0 - T IH2 - L ER0\nROTOTILLER(2)  R OW1 - T OW0 - T IH2 - L ER0\nROTOTILLES  R OW1 - T AH0 - T IH2 L Z\nROTOTILLES(2)  R OW1 - T OW0 - T IH2 L Z\nROTOTILLING  R OW1 - T AH0 - T IH2 - L IH0 NG\nROTOTILLING(2)  R OW1 - T OW0 - T IH2 - L IH0 NG\nROTRAMEL  R AA1 - T R AH0 - M AH0 L\nROTRUCK  R AA1 - T R AH0 K\nROTS  R AA1 T S\nROTT  R AA1 T\nROTTED  R AA1 - T IH0 D\nROTTEN  R AA1 - T AH0 N\nROTTENBERG  R AA1 - T AH0 N - B ER0 G\nROTTER  R AA1 - T ER0\nROTTERDAM  R AA1 - T ER0 - D AE2 M\nROTTING  R AA1 - T IH0 NG\nROTTINGHAUS  R AA1 - T IH0 NG - HH AW2 S\nROTTLER  R AA1 T - L ER0\nROTTMAN  R AA1 T - M AH0 N\nROTTMANN  R AA1 T - M AH0 N\nROTUND  R OW0 - T AH1 N D\nROTUNDA  R OW0 - T AH1 N - D AH0\nROTUNDO  R OW0 - T UW1 N - D OW0\nROTUNNO  R OW0 - T UW1 - N OW0\nROTZ  R AA1 T S\nROUBAL  R UW0 - B AE1 L\nROUBLE  R UW1 - B AH0 L\nROUCH  R AW1 CH\nROUDABUSH  R AW1 - D AH0 - B UH0 SH\nROUDEBUSH  R AW1 - D IH0 - B UH0 SH\nROUGE  R UW1 ZH\nROUGEAU  R UW0 - ZH OW1\nROUGH  R AH1 F\nROUGH'S  R AH1 F S\nROUGHED  R AH1 F T\nROUGHER  R AH1 - F ER0\nROUGHEST  R AH1 - F AH0 S T\nROUGHING  R AH1 - F IH0 NG\nROUGHLY  R AH1 F - L IY0\nROUGHNECK  R AH1 F - N EH2 K\nROUGHNECKS  R AH1 F - N EH2 K S\nROUGHNESS  R AH1 F - N AH0 S\nROUGHSHOD  R AH1 F - SH AA1 D\nROUGHT  R AO1 T\nROUGHTON  R AH1 F - T AH0 N\nROUILLARD  R W IY0 - L AA1 R D\nROUKEMA  R UW1 K - M AA0\nROUKOS  R UW1 - K OW0 S\nROULAC  R UW1 - L AE0 K\nROULEAU  R UW0 - L OW1\nROULETTE  R UW0 - L EH1 T\nROULETTE'S  R UW0 - L EH1 T S\nROULETTES  R UW0 - L EH1 T S\nROULHAC  R UW1 L - HH AH0 K\nROULSTON  R AW1 L - S T AH0 N\nROUND  R AW1 N D\nROUND'S  R AW1 N D Z\nROUNDABOUT  R AW1 N D - AH0 - B AW2 T\nROUNDED  R AW1 N - D AH0 D\nROUNDED(2)  R AW1 N - D IH0 D\nROUNDER  R AW1 N - D ER0\nROUNDHEAD  R AW1 N D - HH EH2 D\nROUNDHOUSE  R AW1 N D - HH AW2 S\nROUNDING  R AW1 N - D IH0 NG\nROUNDLY  R AW1 N D - L IY0\nROUNDS  R AW1 N D Z\nROUNDS(2)  R AW1 N Z\nROUNDTABLE  R AW1 N D - T EY2 - B AH0 L\nROUNDTREE  R AW1 N D - T R IY2\nROUNDTRIP  R AW2 N D - T R IH1 P\nROUNDUP  R AW1 N D - AH2 P\nROUNDWORM  R AW1 N D - W ER0 M\nROUNDWORMS  R AW1 N D - W ER0 M Z\nROUNDY  R AW1 N - D IY0\nROUNSAVILLE  R UW1 N - S AH0 - V IH0 L\nROUNTREE  R AW0 N - T R IY1\nROUPE  R UW1 P\nROURK  R AO1 R K\nROURKE  R AO1 R K\nROUSE  R AW1 S\nROUSE'S  R AW1 - Z IH0 Z\nROUSE(2)  R AW1 Z\nROUSED  R AW1 Z D\nROUSER  R AW1 - Z ER0\nROUSEY  R AW1 - S IY0\nROUSH  R AW1 SH\nROUSING  R AW1 - Z IH0 NG\nROUSSE  R AW1 S\nROUSSEAU  R UW0 - S OW1\nROUSSEL  R UW0 - S EH1 L\nROUSSELET  R UW1 - S AH0 - L EH0 T\nROUSSELL  R UW0 - S EH1 L\nROUSSELLE  R UW2 - S EH1 L\nROUSSIN  R UW0 - S AE1 N\nROUSSOS  R UW0 - S OW1 Z\nROUT  R AW1 T\nROUTE  R UW1 T\nROUTE(2)  R AW1 T\nROUTED  R UW1 - T AH0 D\nROUTED(2)  R UW1 - T IH0 D\nROUTERS  R UW1 - T ER0 Z\nROUTERS(2)  R AW1 - T ER0 Z\nROUTES  R UW1 T S\nROUTES(2)  R AW1 T S\nROUTES(3)  R UH1 T S\nROUTH  R AW1 TH\nROUTHIER  R AW1 - TH IY0 - ER0\nROUTINE  R UW0 - T IY1 N\nROUTINELY  R UW0 - T IY1 N - L IY0\nROUTINES  R UW0 - T IY1 N Z\nROUTING  R AW1 - T IH0 NG\nROUTING(2)  R UW1 - T IH0 NG\nROUTLEDGE  R AW1 T - L IH0 JH\nROUTON  R AW1 - T AH0 N\nROUTSON  R AW1 T - S AH0 N\nROUTT  R AW1 T\nROUTZAHN  R AW1 T - Z AH0 N\nROUX  R UW1\nROUYN  R UW1 - IH0 N\nROUZER  R AW1 - Z ER0\nROVANIEMI  R OW0 - V AE2 - N IY0 - EH1 - M IY0\nROVE  R OW1 V\nROVEN  R OW1 - V AH0 N\nROVER  R OW1 - V ER0\nROVER'S  R OW1 - V ER0 Z\nROVERS  R OW1 - V ER0 Z\nROVING  R OW1 - V IH0 NG\nROVIRA  R OW0 - V IH1 - R AH0\nROVITO  R OW0 - V IY1 - T OW0\nROVNER  R AA1 V - N ER0\nROW  R OW1\nROW'S  R OW1 Z\nROWAN  R OW1 - AH0 N\nROWAN'S  R OW1 - AH0 N Z\nROWAND  R OW1 - AH0 N D\nROWBOAT  R OW1 - B OW2 T\nROWBOTHAM  R OW1 - B AH0 - TH AE0 M\nROWDEN  R OW1 - D AH0 N\nROWDIES  R AW1 - D IY0 Z\nROWDINESS  R AW1 - D IY0 - N AH0 S\nROWDY  R AW1 - D IY0\nROWE  R OW1\nROWE'S  R OW1 Z\nROWED  R OW1 D\nROWELL  R OW1 - IH0 L\nROWEN  R OW1 - AH0 N\nROWENA  R OW0 - IY1 - N AH0\nROWENTA  R OW2 - EH1 N - T AH0\nROWER  R OW1 - ER0\nROWES  R OW1 Z\nROWIN  R OW1 - IH0 N\nROWING  R OW1 - IH0 NG\nROWINSKI  R OW0 - IH1 N - S K IY0\nROWLAND  R OW1 - L AH0 N D\nROWLAND'S  R OW1 - L AH0 N D Z\nROWLANDS  R OW1 - L AH0 N D Z\nROWLES  R OW1 L Z\nROWLETT  R OW1 - L IH0 T\nROWLETTE  R OW2 - L EH1 T\nROWLEY  R OW1 - L IY0\nROWLIE  R OW1 - L IY0\nROWLY  R OW1 - L IY0\nROWNEY  R OW1 - N IY0\nROWNTREE  R OW1 N - T R IY2\nROWNTREE'S  R OW1 N - T R IY2 Z\nROWNY  R OW1 - N IY0\nROWS  R OW1 Z\nROWSE  R OW1 S\nROWSER  R OW1 - Z ER0\nROWSEY  R OW1 - S IY0\nROWSON  R OW1 - S AH0 N\nROWTON  R OW1 - T AH0 N\nROX  R AA1 K S\nROX'S  R AA1 K - S IH0 S\nROXANA  R AA0 K - S AE1 - N AH0\nROXANI  R AA0 K - S AA1 - N IY0\nROXANNA  R AA2 K - S AE1 - N AH0\nROXANNE  R AA1 K - S IH0 N\nROXANNE(2)  R AA2 K - S AE1 N\nROXBOROUGH  R AA1 K S - B AH0 - R OW0\nROXBURY  R AA1 K S - B EH2 - R IY0\nROXIE  R AA1 K - S IY0\nROXINE  R AA1 K - S AY0 N\nROXY  R AA1 K - S IY0\nROY  R OY1\nROY'S  R OY1 Z\nROYAL  R OY1 - AH0 L\nROYAL'S  R OY1 - AH0 L Z\nROYALE  R OY0 - AE1 L\nROYALIST  R OY1 - AH0 - L IH0 S T\nROYALL  R OY1 - AH0 L\nROYALLY  R OY1 - AH0 - L IY0\nROYALS  R OY1 - AH0 L Z\nROYALS'  R OY1 - AH0 L Z\nROYALTIES  R OY1 - AH0 L - T IY0 Z\nROYALTY  R OY1 - AH0 L - T IY0\nROYBAL  R OY1 - B AH0 L\nROYCE  R OY1 S\nROYCE'S  R OY1 - S IH0 Z\nROYCES  R OY1 - S IH0 Z\nROYCROFT  R OY1 - K R AH0 F T\nROYD  R OY1 D\nROYDEN  R OY1 - D AH0 N\nROYDON  R OY1 - D AH0 N\nROYE  R OY1\nROYER  R OY1 - ER0\nROYEX  R OY1 - EH0 K S\nROYEX'S  R OY1 - EH0 K - S IH0 Z\nROYKO  R OY1 - K OW0\nROYLANCE  R OY1 - L AH0 N S\nROYLE  R OY1 L\nROYS  R OY1 Z\nROYSE  R OY1 S\nROYSTER  R OY1 - S T ER0\nROYSTER'S  R OY1 - S T ER0 Z\nROYSTON  R OY1 - S T AH0 N\nROZ  R AA1 Z\nROZA  R OW1 - Z AH0\nROZAK  R OW1 - Z AH0 K\nROZANSKI  R AH0 - Z AE1 N S - K IY0\nROZAR  R OW1 - Z ER0\nROZAS  R OW1 - Z AA0 Z\nROZEBOOM  R AA1 - Z IH0 - B UW2 M\nROZEK  R OW1 - Z EH0 K\nROZELL  R AA1 - Z AH0 L\nROZELLA  R OW0 - Z EH1 - L AH0\nROZELLE  R AH0 - Z EH1 L\nROZEMA  R AH0 - Z IY1 - M AH0\nROZEN  R AA1 - Z AH0 N\nROZIER  R OW1 - Z IY0 - ER0\nROZMAN  R AA1 Z - M AH0 N\nROZNOWSKI  R AH0 Z - N AO1 F S - K IY0\nROZSA  R OW1 Z - S AH0\nROZYCKI  R AH0 - Z IH1 T S - K IY0\nROZZELL  R AA1 - Z AH0 L\nROZZI  R AA1 - Z IY0\nRPF  AA1 R - P IY1 - EH1 F\nRPM  AA1 R - P IY1 - EH1 M\nRRROT  AA1 - R AA1 - R AA1 - R OW1 - T IY1\nRRROT(2)  AA1 - R OW1 - T IY1\nRRROT(3)  R R AA1 T\nRU  R UW1\nRU(2)  AA1 - R Y UW1\nRUA  R UW1 - AH0\nRUAM  R UW1 - AH0 M\nRUANE  R UW0 - EY1 N\nRUANO  R UW0 - AA1 - N OW0\nRUARK  R UW1 - AA0 R K\nRUB  R AH1 B\nRUBACK  R UW1 - B AE2 K\nRUBALCABA  R UW0 - B AA0 L - K AA1 - B AH0\nRUBALCAVA  R UW0 - B AA0 L - K AA1 - V AH0\nRUBANO  R UW0 - B AA1 - N OW0\nRUBBED  R AH1 B D\nRUBBER  R AH1 - B ER0\nRUBBERIZE  R AH1 - B ER0 - AY2 Z\nRUBBERIZED  R AH1 - B ER0 - AY2 Z D\nRUBBERMAID  R AH1 - B ER0 - M EY2 D\nRUBBERMAID'S  R AH1 - B ER0 - M EY2 D Z\nRUBBERS  R AH1 - B ER0 Z\nRUBBERY  R AH1 - B ER0 - IY0\nRUBBIA  R AH1 - B IY0 - AH0\nRUBBING  R AH1 - B IH0 NG\nRUBBISH  R AH1 - B IH0 SH\nRUBBLE  R AH1 - B AH0 L\nRUBBO  R UW1 - B OW0\nRUBE  R UW1 B\nRUBECK  R UW1 - B EH2 K\nRUBEL  R UW1 - B AH0 L\nRUBELL  R UW1 - B AH0 L\nRUBELLA  R UW0 - B EH1 - L AH0\nRUBEN  R UW1 - B AH0 N\nRUBENDALL  R AH1 - B IH0 N - D AH0 L\nRUBENFELD  R AH1 - B IH0 N - F EH0 L D\nRUBENS  R UW1 - B AH0 N Z\nRUBENSTEIN  R UW1 - B AH0 N - S T AY0 N\nRUBENSTEIN(2)  R UW1 - B AH0 N - S T IY0 N\nRUBERG  R UW1 - B ER0 G\nRUBERT  R UW1 - B ER0 T\nRUBERTO  R UW0 - B EH1 R - T OW0\nRUBEY  R UW1 - B IY0\nRUBI  R UW1 - B IY0\nRUBIA  R UW1 - B IY0 - AH0\nRUBICAM  R UW1 - B IH0 - K AH0 M\nRUBICAM'S  R UW1 - B IH0 - K AH0 M Z\nRUBICON  R UW1 - B IH0 - K AO0 N\nRUBIE  R UW1 - B IY0\nRUBIES  R UW1 - B IY0 Z\nRUBIK  R UW1 - B IH0 K\nRUBIK'S  R UW1 - B IH0 K S\nRUBIN  R UW1 - B IH0 N\nRUBIN'S  R UW1 - B IH0 N Z\nRUBINA  R UW0 - B IY1 - N AH0\nRUBINO  R UW0 - B IY1 - N OW0\nRUBINSON  R AH1 - B IH0 N - S AH0 N\nRUBINSTEIN  R UW1 - B IH0 N - S T IY2 N\nRUBINSTEIN(2)  R UW1 - B IH0 N - S T AY2 N\nRUBIO  R UW1 - B IY0 - OW0\nRUBIOS  R UW1 - B IY0 - OW0 Z\nRUBIS  R UW1 - B IH0 S\nRUBLE  R UW1 - B AH0 L\nRUBLE'S  R UW1 - B AH0 L Z\nRUBLES  R UW1 - B AH0 L Z\nRUBLEY  R AH1 - B L IY0\nRUBLOFF  R AH1 - B L AO0 F\nRUBOTTOM  R AH1 - B AH0 - T AA0 M\nRUBOUT  R AH1 - B AW2 T\nRUBRIC  R UW1 - B R IH0 K\nRUBRIGHT  R AH1 - B R AY2 T\nRUBS  R AH1 B Z\nRUBY  R UW1 - B IY0\nRUBY'S  R UW1 - B IY0 Z\nRUCCI  R UW1 - CH IY0\nRUCH  R AH1 CH\nRUCHLAMER  R UW1 - K L AH0 - M ER0\nRUCHTI  R UW1 K - T IY0\nRUCINSKI  R AH0 - CH IH1 N - S K IY0\nRUCK  R AH1 K\nRUCKEL  R AH1 - K AH0 L\nRUCKELSHAUS  R AH1 - K AH0 L Z - HH AW2 S\nRUCKER  R AH1 - K ER0\nRUCKERT  R AH1 - K ER0 T\nRUCKI  R AH1 - K IY0\nRUCKLE  R AH1 - K AH0 L\nRUCKMAN  R AH1 K - M AH0 N\nRUCKS  R AH1 K S\nRUCKUS  R AH1 - K AH0 S\nRUD  R AH1 D\nRUDA  R UW1 - D AH0\nRUDANI  R UW0 - D AA1 - N IY0\nRUDASILL  R AH1 - D AH0 - S IH0 L\nRUDD  R AH1 D\nRUDDELL  R AH1 - D AH0 L\nRUDDEN  R AH1 - D AH0 N\nRUDDER  R AH1 - D ER0\nRUDDERLESS  R AH1 - D ER0 - L AH0 S\nRUDDICK  R AH1 - D IH0 K\nRUDDLE  R AH1 - D AH0 L\nRUDDOCK  R AH1 - D AH0 K\nRUDDY  R AH1 - D IY0\nRUDE  R UW1 D\nRUDEEN  R AH1 - D IY0 N\nRUDEL  R UW1 - D AH0 L\nRUDELL  R AH1 - D AH0 L\nRUDELLE  R AH0 - D EH1 L\nRUDELY  R UW1 D - L IY0\nRUDEN  R UW1 - D AH0 N\nRUDENESS  R UW1 D - N AH0 S\nRUDENSTEIN  R UW1 - D IH0 N - S T IY0 N\nRUDENSTEIN(2)  R UW1 - D IH0 N - S T AY0 N\nRUDENSTINE  R UW1 - D AH0 N Z - T AY2 N\nRUDER  R UW1 - D ER0\nRUDER'S  R UW1 - D ER0 Z\nRUDERMAN  R UW1 - D ER0 - M AH0 N\nRUDESILL  R AH1 - D IH0 - S AH0 L\nRUDEST  R UW1 - D AH0 S T\nRUDGE  R AH1 JH\nRUDI  R UW1 - D IY0\nRUDI'S  R UW1 - D IY0 Z\nRUDICH  R AH1 - D IH0 K\nRUDICH(2)  R UW1 - D IH0 K\nRUDICKER  R AH1 - D IH0 - K ER0\nRUDIE  R UW1 - D IY0\nRUDIGER  R AH1 - D IH0 - G ER0\nRUDIMENT  R UW1 - D IH0 - M AH0 N T\nRUDIMENTARY  R UW2 - D AH0 - M EH1 N - T ER0 - IY0\nRUDIMENTS  R UW1 - D IH0 - M AH0 N T S\nRUDIN  R UW1 - D IH0 N\nRUDING  R UW1 - D IH0 NG\nRUDIS  R UW1 - D IY0 Z\nRUDISILL  R AH1 - D IH0 - S IH0 L\nRUDKIN  R AH1 D - K IH0 N\nRUDLOFF  R AH1 D - L AO0 F\nRUDMAN  R AH1 D - M AH0 N\nRUDMAN'S  R AH1 D - M AH0 N Z\nRUDNER  R AH1 D - N ER0\nRUDNET  R AH1 D - N EH2 T\nRUDNICK  R AH1 D - N IH0 K\nRUDNICKI  R AH0 D - N IH1 - K IY0\nRUDNICKY  R AH0 D - N IH1 - K IY0\nRUDNIK  R AH1 D - N IH0 K\nRUDOLF  R UW1 - D AA2 L F\nRUDOLF(2)  R UW1 - D AA2 F\nRUDOLPH  R UW1 - D AO0 L F\nRUDOLPH(2)  R UW1 - D AO0 F\nRUDOW  R UW1 - D OW0\nRUDY  R UW1 - D IY0\nRUDY'S  R UW1 - D IY0 Z\nRUDYARD  R AH1 - D Y ER0 D\nRUDZINSKI  R AH0 - JH IH1 N - S K IY0\nRUE  R UW1\nRUEB  R UW1 B\nRUEBEL  R UW1 - B AH0 L\nRUECKERT  R UW1 - K ER0 T\nRUEDA  R UW0 - EH1 - D AH0\nRUEDIGER  R UW1 - D IH0 - G ER0\nRUEDLINGER  R UW1 D - L IH0 - NG ER0\nRUEDY  R UW1 - D IY0\nRUEF  R UW1 F\nRUEFF  R UW1 F\nRUEFUL  R UW1 - F AH0 L\nRUEFULLY  R UW1 - F AH0 - L IY0\nRUEGER  R UH1 - G ER0\nRUEGG  R UW1 G\nRUEGSEGGER  R UH1 G - S IH0 - G ER0\nRUEHL  R UH1 L\nRUEHLE  R UW1 - HH AH0 L\nRUEL  R UW1 L\nRUELAS  R UW1 - L AH0 Z\nRUELLA  R UW2 - EH1 - L AH0\nRUELLE  R UW2 - EH1 L\nRUESCH  R UW1 SH\nRUESS  R UW1 S\nRUEST  R UW1 S T\nRUETER  R UW1 - T ER0\nRUETH  R UW1 TH\nRUETHER  R UW1 - TH ER0\nRUETZ  R UW1 T S\nRUF  R AH1 F\nRUFE  R UW1 F\nRUFENACHT  R UW1 - F AH0 - N AA0 K T\nRUFENER  R AH1 - F IY0 - N ER0\nRUFER  R UW1 - F ER0\nRUFF  R AH1 F\nRUFFALO  R UW0 - F AA1 - L OW0\nRUFFCORN  R AH1 F - K ER0 N\nRUFFER  R AH1 - F ER0\nRUFFIN  R AH1 - F IH0 N\nRUFFING  R AH1 - F IH0 NG\nRUFFINI  R UW0 - F IY1 - N IY0\nRUFFINO  R UW0 - F IY1 - N OW0\nRUFFLE  R AH1 - F AH0 L\nRUFFLED  R AH1 - F AH0 L D\nRUFFLES  R AH1 - F AH0 L Z\nRUFFLING  R AH1 - F AH0 L - IH0 NG\nRUFFLING(2)  R AH1 - F L IH0 NG\nRUFFNER  R AH1 F - N ER0\nRUFFO  R AH1 - F OW0\nRUFFOLO  R UW0 - F OW1 - L OW0\nRUFFORD  R AH1 - F ER0 D\nRUFINA  R UW0 - F IY1 - N AH0\nRUFO  R UW1 - F OW0\nRUFORD  R UW1 - F ER0 D\nRUFOW  R UW1 - F OW0\nRUFTY  R AH1 F - T IY0\nRUFUS  R UW1 - F AH0 S\nRUG  R AH1 G\nRUGBY  R AH1 G - B IY0\nRUGE  R UW1 JH\nRUGEN  R AH1 - G AH0 N\nRUGER  R UW1 - G ER0\nRUGERONI  R UW2 - JH EH0 - R OW1 - N IY0\nRUGG  R AH1 G\nRUGGED  R AH1 - G AH0 D\nRUGGEDLY  R AH1 - G AH0 D - L IY0\nRUGGERI  R UW0 - JH EH1 - R IY0\nRUGGERIO  R UW0 - JH EH1 - R IY0 - OW0\nRUGGIERI  R UW0 - JH IH1 - R IY0\nRUGGIERO  R UW0 - JH IH1 - R OW0\nRUGGIRELLO  R UW0 - JH IH0 - R EH1 - L OW0\nRUGGLES  R AH1 - G AH0 L Z\nRUGH  R AH1\nRUGS  R AH1 G Z\nRUH  R AH1\nRUHE  R UW1 HH\nRUHL  R AH1 L\nRUHLAND  R AH1 - L AH0 N D\nRUHLE  R UW1 - AH0 L\nRUHLMAN  R UW1 L - M AH0 N\nRUHNAU  R UW1 - N AW0\nRUHNKE  R AH1 NG K\nRUHOLLAH  R UW0 - HH AA1 - L AH0\nRUHR  R UH1 R\nRUHRGAS  R UH1 R - G AH0 S\nRUHUL  R UW2 - HH UW1 L\nRUIN  R UW1 - AH0 N\nRUIN(2)  R UW1 - IH0 N\nRUINED  R UW1 - AH0 N D\nRUINED(2)  R UW1 - IH0 N D\nRUINING  R UW1 - IH0 - N IH0 NG\nRUINOUS  R UW1 - AH0 - N AH0 S\nRUINS  R UW1 - AH0 N Z\nRUINS(2)  R UW1 - IH0 N Z\nRUIS  R UW1 - IH0 Z\nRUITER  R UW1 - T ER0\nRUIZ  R UW0 - W IY1 Z\nRUJITH  R UW2 - JH IY1 TH\nRUKAVINA  R AH0 - K AH0 - V AY1 - N AH0\nRUKEYSER  R UW2 - K EY1 - Z ER0\nRULA  R UW1 - L AH0\nRULAND  R UW1 - L AH0 N D\nRULE  R UW1 L\nRULE'S  R UW1 L Z\nRULEBOOK  R UW1 L - B UH2 K\nRULED  R UW1 L D\nRULEMAKING  R UW1 L - M EY2 - K IH0 NG\nRULER  R UW1 - L ER0\nRULERS  R UW1 - L ER0 Z\nRULES  R UW1 L Z\nRULEY  R UW1 - L IY0\nRULING  R UW1 - L IH0 NG\nRULING'S  R UW1 - L IH0 NG Z\nRULINGS  R UW1 - L IH0 NG Z\nRULISON  R AH1 - L IH0 - S AH0 N\nRULLI  R UW1 - L IY0\nRULLMAN  R AH1 L - M AH0 N\nRULLO  R UW1 - L OW0\nRULON  R UW1 - L AH0 N\nRUM  R AH1 M\nRUMACK  R UW1 - M AE0 K\nRUMAGE  R AH1 - M IH0 JH\nRUMAN  R UW1 - M AH0 N\nRUMANIA  R UW0 - M EY1 - N IY0 - AH0\nRUMANIAN  R UW0 M - EY1 - N IY0 - AH0 N\nRUMANIAN(2)  R UW0 M - EY1 - N Y AH0 N\nRUMBAUGH  R AH1 M - B AO2\nRUMBERGER  R AH1 M - B ER0 - G ER0\nRUMBLE  R AH1 M - B AH0 L\nRUMBLED  R AH1 M - B AH0 L D\nRUMBLES  R AH1 M - B AH0 L Z\nRUMBLEY  R AH1 M - B L IY0\nRUMBLING  R AH1 M - B AH0 L - IH0 NG\nRUMBLING'S  R AH1 M - B AH0 - L IH0 NG Z\nRUMBLING'S(2)  R AH1 M - B L IH0 NG Z\nRUMBLING(2)  R AH1 M - B L IH0 NG\nRUMBLINGS  R AH1 M - B AH0 - L IH0 NG Z\nRUMBLINGS(2)  R AH1 M - B L IH0 NG Z\nRUMBOLD  R AH1 M - B OW2 L D\nRUMEN  R UW1 - M AH0 N\nRUMER  R UW1 - M ER0\nRUMERY  R AH1 - M ER0 - IY0\nRUMFELT  R AH1 M - F EH2 L T\nRUMFORD  R AH1 M - F ER0 D\nRUMINA  R UW1 - M IH0 - N AH0\nRUMINANT  R UW1 - M AH0 - N AH0 N T\nRUMINATE  R UW1 - M IH0 - N EY2 T\nRUMINATED  R UW1 - M IH0 - N EY2 - T IH0 D\nRUMINATION  R UW2 - M IH0 - N EY1 - SH AH0 N\nRUMINATIONS  R UW2 - M IH0 - N EY1 - SH AH0 N Z\nRUMINSKI  R AH0 - M IH1 N - S K IY0\nRUMLER  R AH1 M - L ER0\nRUMLEY  R AH1 M - L IY0\nRUMMAGE  R AH1 - M IH0 JH\nRUMMAGING  R AH1 - M IH0 - JH IH0 NG\nRUMMEL  R AH1 - M AH0 L\nRUMMELL  R AH1 - M AH0 L\nRUMMY  R AH1 - M IY0\nRUMNEY  R AH1 M - N IY0\nRUMOR  R UW1 - M ER0\nRUMORE  R UW0 - M AO1 R\nRUMORED  R UW1 - M ER0 D\nRUMORS  R UW1 - M ER0 Z\nRUMOUR  R UW2 - M ER0\nRUMOURS  R UW2 - M ER0 Z\nRUMP  R AH1 M P\nRUMPEL  R AH1 M - P AH0 L\nRUMPF  R AH1 M P F\nRUMPH  R AH1 M F\nRUMPLE  R AH1 M - P AH0 L\nRUMPLED  R AH1 M - P AH0 L D\nRUMRILL  R AH1 - M R IH0 L\nRUMS  R AH1 M Z\nRUMSEY  R AH1 M - Z IY0\nRUMSFELD  R AH1 M Z - F EH2 L D\nRUMSON  R AH1 M - S AH0 N\nRUN  R AH1 N\nRUN'S  R AH1 N Z\nRUN-DOWN  R AH1 N - D AW1 N\nRUN-ON  R AH1 - N AA1 N\nRUN-ONS  R AH1 - N AA1 N Z\nRUNABOUT  R AH1 N - AH0 - B AW2 T\nRUNAROUND  R AH1 - N AH0 - R AW2 N D\nRUNAROUND(2)  R AH1 - N AH0 - R AW2 N\nRUNAWAY  R AH1 N - AH0 - W EY2\nRUNAWAYS  R AH1 N - AH0 - W EY2 Z\nRUNCIE  R AH1 N - S IY0\nRUNCK  R AH1 NG K\nRUNCKEL  R AH1 NG - K AH0 L\nRUNCO  R AH1 NG - K OW0\nRUND  R AH1 N D\nRUNDALL  R AH1 N - D AH0 L\nRUNDE  R AH1 N D\nRUNDELL  R AH1 N - D AH0 L\nRUNDLE  R AH1 N - D AH0 L\nRUNDOWN  R AH1 N - D AW2 N\nRUNDQUIST  R AH1 N D - K W IH2 S T\nRUNG  R AH1 NG\nRUNGE  R AH1 N JH\nRUNGS  R AH1 NG Z\nRUNION  R UW1 - N Y AH0 N\nRUNIONS  R UW1 - N Y AH0 N Z\nRUNK  R AH1 NG K\nRUNKEL  R AH1 NG - K AH0 L\nRUNKLE  R AH1 NG - K AH0 L\nRUNKLES  R AH1 NG - K AH0 L Z\nRUNKO  R AH1 N - K OW0\nRUNNELLS  R AH1 - N AH0 L Z\nRUNNELS  R AH1 - N AH0 L Z\nRUNNER  R AH1 - N ER0\nRUNNER'S  R AH1 - N ER0 Z\nRUNNERS  R AH1 - N ER0 Z\nRUNNIN'  R AH1 - N IH0 N\nRUNNING  R AH1 - N IH0 NG\nRUNNINGS  R AH1 - N IH0 NG Z\nRUNNION  R AH1 - N Y AH0 N\nRUNNY  R AH1 - N IY0\nRUNOFF  R AH1 - N AO2 F\nRUNQUIST  R AH1 N - K W IH2 S T\nRUNS  R AH1 N Z\nRUNTE  R AH1 N T\nRUNUP  R AH1 - N AH2 P\nRUNUPS  R AH1 - N AH2 P S\nRUNWAY  R AH1 N - W EY2\nRUNWAYS  R AH1 N - W EY2 Z\nRUNYAN  R AH1 - N Y AH0 N\nRUNYON  R AH1 - N Y AH0 N\nRUNZHEIMER  R AH1 N Z - HH AY2 - M ER0\nRUOCCO  R UW0 - OW1 - K OW0\nRUOFF  R UW1 - AO0 F\nRUOTOLO  R UW0 - OW0 - T OW1 - L OW0\nRUPARD  R UW1 - P ER0 D\nRUPAUL  R UW0 - P AA1 L\nRUPE  R UW1 P\nRUPEE  R UW0 - P IY1\nRUPEES  R UW0 - P IY1 Z\nRUPEES(2)  R UW1 - P IY0 Z\nRUPERT  R UW1 - P ER0 T\nRUPERTA  R UW0 - P EH1 R - T AH0\nRUPHY  R UW1 - F IY0\nRUPIAH  R UW0 - P AY1 - AH0\nRUPLE  R UW1 - P AH0 L\nRUPLEY  R AH1 P - L IY0\nRUPNOW  R AH1 P - N OW0\nRUPP  R AH1 P\nRUPPE  R AH1 P\nRUPPEL  R AH1 - P AH0 L\nRUPPENTHAL  R AH1 - P IH0 N - TH AH0 L\nRUPPERT  R AH1 - P ER0 T\nRUPPRECHT  R UW1 - P R EH2 K T\nRUPRECHT  R AH1 - P R IH0 K T\nRUPTURE  R AH1 P - CH ER0\nRUPTURED  R AH1 P - CH ER0 D\nRUPTURES  R AH1 P - CH ER0 Z\nRUPTURING  R AH1 P - CH ER0 - IH0 NG\nRURAL  R UH1 - R AH0 L\nRURIK  R UH1 - R IH0 K\nRURITANIA  R UH2 - R AH0 - T EY1 - N IY0 - AH0\nRUS  R AH1 S\nRUSALKA  R UW2 - S AE1 L - K AH0\nRUSCH  R AH1 SH\nRUSCHE  R AH1 SH\nRUSCITTI  R UW0 S - CH IY1 - T IY0\nRUSCONI  R UW0 - S K OW1 - N IY0\nRUSE  R UW1 Z\nRUSED  R UW1 Z D\nRUSELER  R UW1 - S IH0 - L ER0\nRUSES  R UW1 - Z IH0 Z\nRUSH  R AH1 SH\nRUSH'S  R AH1 - SH IH0 Z\nRUSHDIE  R AH1 SH - D IY0\nRUSHDIE'S  R AH1 SH - D IY0 Z\nRUSHED  R AH1 SH T\nRUSHER  R AH1 - SH ER0\nRUSHES  R AH1 - SH AH0 Z\nRUSHES(2)  R AH1 - SH IH0 Z\nRUSHFORD  R AH1 SH - F ER0 D\nRUSHIN  R AH1 - SH IH0 N\nRUSHING  R AH1 - SH IH0 NG\nRUSHLOW  R AH1 SH - L OW2\nRUSHMORE  R AH1 SH - M AO0 R\nRUSHTON  R AH1 SH - T AH0 N\nRUSIN  R UW1 - S IH0 N\nRUSINKO  R UW2 - S IH1 NG - K OW0\nRUSK  R AH1 S K\nRUSK'S  R AH1 S K S\nRUSKIN  R AH1 - S K IH0 N\nRUSLAN  R AH1 S - L AH0 N\nRUSNAK  R AH1 S - N AH0 K\nRUSNOCK  R AH1 S - N AH0 K\nRUSS  R AH1 S\nRUSSA  R UW1 - S AH0\nRUSSAK  R AH1 - S AH0 K\nRUSSE  R AH1 S\nRUSSEL  R AH1 - S AH0 L\nRUSSEL'S  R AH1 - S AH0 L Z\nRUSSELL  R AH1 - S AH0 L\nRUSSELL'S  R AH1 - S AH0 L Z\nRUSSELLVILLE  R AH1 - S AH0 L - V IH2 L\nRUSSERT  R AH1 - S ER0 T\nRUSSET  R AH1 - S IH0 T\nRUSSETS  R AH1 - S IH0 T S\nRUSSETT  R AH1 - S IH0 T\nRUSSEY  R AH1 - S IY0\nRUSSI  R UW1 - S IY0\nRUSSIA  R AH1 - SH AH0\nRUSSIA'S  R AH1 - SH AH0 Z\nRUSSIAN  R AH1 - SH AH0 N\nRUSSIAN'S  R AH1 - SH AH0 N Z\nRUSSIANS  R AH1 - SH AH0 N Z\nRUSSIANS'  R AH1 - SH AH0 N Z\nRUSSIFICATION  R AH2 - S AH0 - F AH0 - K EY1 - SH AH0 N\nRUSSIFICATION(2)  R UW2 - S AH0 - F AH0 - K EY1 - SH AH0 N\nRUSSIFIED  R AH1 - S AH0 - F AY0 D\nRUSSIN  R AH1 - S IH0 N\nRUSSLER  R AH1 S - L ER0\nRUSSMAN  R AH1 S - M AH0 N\nRUSSO  R UW1 - S OW0\nRUSSOLILLO  R UW2 - S OW0 - L IH1 - L OW0\nRUSSOLILLO(2)  R UW2 - S OW0 - L IY1 - OW0\nRUSSOM  R AH1 - S AH0 M\nRUSSOMANNO  R AH1 - S AH0 - M IH0 - N OW0\nRUSSOW  R AH1 - S OW0\nRUSSUM  R AH1 - S AH0 M\nRUST  R AH1 S T\nRUST'S  R AH1 S T S\nRUSTAD  R AH1 - S T AH0 D\nRUSTED  R AH1 - S T AH0 D\nRUSTED(2)  R AH1 - S T IH0 D\nRUSTIC  R AH1 - S T IH0 K\nRUSTIGAN  R AH1 - S T IH0 - G AH0 N\nRUSTIN  R AH1 - S T IH0 N\nRUSTING  R AH1 - S T IH0 NG\nRUSTLE  R AH1 - S AH0 L\nRUSTLER  R AH1 S - L ER0\nRUSTLERS  R AH1 - S AH0 - L ER0 Z\nRUSTLERS(2)  R AH1 S - L ER0 Z\nRUSTLING  R AH1 - S L IH0 NG\nRUSTON  R AH1 - S T AH0 N\nRUSTPROOF  R AH1 S T - P R UW1 F\nRUSTPROOFING  R AH1 S T - P R UW1 - F IH0 NG\nRUSTS  R AH1 S T S\nRUSTS(2)  R AH1 S S\nRUSTS(3)  R AH1 S\nRUSTY  R AH1 - S T IY0\nRUSZKOWSKI  R AH0 SH - K AO1 F S - K IY0\nRUT  R AH1 T\nRUTA  R UW1 - T AH0\nRUTAN  R UW1 - T AH0 N\nRUTER  R UW1 - T ER0\nRUTGARD  R AH1 T - G AA2 R D\nRUTGER  R AH1 T - G ER0\nRUTGER'S  R AH1 T - G ER0 Z\nRUTGERS  R AH1 T - G ER0 Z\nRUTH  R UW1 TH\nRUTH'S  R UW1 TH S\nRUTHANN  R UW2 - TH AE1 N\nRUTHENBERG  R AH1 - TH AH0 N - B ER0 G\nRUTHER  R UW1 - TH ER0\nRUTHERFORD  R AH1 - TH ER0 - F ER0 D\nRUTHIE  R UW1 - TH IY0\nRUTHLESS  R UW1 TH - L AH0 S\nRUTHLESSLY  R UW1 TH - L AH0 S - L IY0\nRUTHLESSNESS  R UW1 TH - L AH0 S - N AH0 S\nRUTHVEN  R AH1 TH - V AH0 N\nRUTIGLIANO  R UW0 - T IY0 - G L IY0 - AA1 - N OW0\nRUTILE  R UW1 - T IY0 L\nRUTKOSKI  R AH0 T - K AW1 S - K IY0\nRUTKOWSKI  R AH0 T - K AO1 F S - K IY0\nRUTLAND  R AH1 T - L AH0 N D\nRUTLEDGE  R AH1 T - L IH0 JH\nRUTLEY  R AH1 T - L IY0\nRUTMAN  R AH1 T - M AH0 N\nRUTS  R AH1 T S\nRUTSKOI  R UW1 T - S K OY0\nRUTSKOI'S  R UW1 T - S K OY0 Z\nRUTSTEIN  R AH1 T - S T AY2 N\nRUTSTEIN(2)  R AH1 T - S T IY2 N\nRUTT  R AH1 T\nRUTTAN  R AH1 - T AH0 N\nRUTTED  R AH1 - T IH0 D\nRUTTEN  R AH1 - T AH0 N\nRUTTENBERG  R AH1 - T AH0 N - B ER0 G\nRUTTER  R AH1 - T ER0\nRUTTLE  R AH1 - T AH0 L\nRUTTLES  R AH1 - T AH0 L Z\nRUTTS  R AH1 T S\nRUTZ  R AH1 T S\nRUTZEN  R AH1 T - Z AH0 N\nRUUD  R UW1 D\nRUVALCABA  R UW0 - V AA0 L - K AA1 - B AH0\nRUVOLO  R UW0 - V OW1 - L OW0\nRUWE  R UW1 W\nRUX  R AH1 K S\nRUXPIN  R AH1 K - S P IH0 N\nRUYBAL  R AY1 - B AH0 L\nRUYLE  R AY1 L\nRUZEK  R UW1 - Z EH0 K\nRUZICH  R AH1 - Z IH0 HH\nRUZICKA  R UW2 - Z IH1 - K AH0\nRUZZO  R UW1 - Z OW0\nRWANDA  R AH0 W - AA1 N - D AH0\nRWANDA'S  R AH0 W - AA1 N - D AH0 Z\nRWANDA'S(2)  R UW2 - AA1 N - D AH0 Z\nRWANDA(2)  R UW2 - AA1 N - D AH0\nRWANDAN  R AH0 W - AA1 N - D AH0 N\nRWANDAN'S  R AH0 W - AA1 N - D AH0 N Z\nRWANDAN'S(2)  R UW2 - AA1 N - D AH0 N Z\nRWANDAN(2)  R UW2 - AA1 N - D AH0 N\nRWANDANS  R AH0 W - AA1 N - D AH0 N Z\nRWANDANS(2)  R UW2 - AA1 N - D AH0 N Z\nRWANDESE  R AH0 - W AA2 - D IY1 Z\nRWANDESE(2)  R UW0 - AA2 - D IY1 Z\nRYAL  R IY0 - AA1 L\nRYALL  R IY0 - AA1 L\nRYALS  R IY0 - AA1 L Z\nRYAN  R AY1 - AH0 N\nRYAN'S  R AY1 - AH0 N Z\nRYANAIR  R AY1 - AH0 - N EH2 R\nRYANS  R AY1 - AH0 N Z\nRYBA  R IH1 - B AH0\nRYBACK  R AY1 - B AE2 K\nRYBACKI  R IH0 - B AA1 T S - K IY0\nRYBACKI(2)  R IH2 - B AA1 - K IY0\nRYBAK  R IH1 - B AH0 K\nRYBAKOV  R AY1 - B AH0 - K AA2 V\nRYBAKOV'S  R AY1 - B AH0 - K AA2 V Z\nRYBARCZYK  R IH1 - B ER0 - CH IH0 K\nRYBERG  R AY1 - B ER0 G\nRYBICKI  R IH0 - B IH1 T S - K IY0\nRYBINSKI  R IH0 - B IH1 N - S K IY0\nRYBKA  R IH1 - B K AH0\nRYBOLT  R IH1 - B OW0 L T\nRYBURN  R IH1 - B ER0 N\nRYCHLIK  R IH1 CH - L IH0 K\nRYCHLIK(2)  R IH1 - K L IH0 K\nRYCKMAN  R IH1 K - M AH0 N\nRYCROFT  R IH1 - K R AH0 F T\nRYCZEK  R IH1 - CH EH0 K\nRYDBERG  R IH1 D - B ER0 G\nRYDELL  R IH1 - D AH0 L\nRYDEN  R AY1 - D AH0 N\nRYDER  R AY1 - D ER0\nRYDER'S  R AY1 - D ER0 Z\nRYDMAN  R IH1 D - M AH0 N\nRYDZEWSKI  R IH0 - JH EH1 F S - K IY0\nRYE  R AY1\nRYEN  R AY1 - AH0 N\nRYER  R AY1 - ER0\nRYERSON  R AY1 R - S AH0 N\nRYGIEL  R IH1 - G IY0 L\nRYKA  R AY1 - K AH0\nRYKER  R AY1 - K ER0\nRYKIEL  R IY1 - K Y EH0 L\nRYKIEL(2)  R IH1 - K Y EH0 L\nRYKOFF  R AY1 - K AO2 F\nRYKOWSKI  R IH0 - K AO1 F S - K IY0\nRYLAN  R AY1 - L AH0 N\nRYLAND  R IH1 - L AH0 N D\nRYLANDER  R IH1 - L AH0 N - D ER0\nRYLE  R AY1 L\nRYLEE  R IH1 - L IY0\nRYLES  R AY1 L Z\nRYLEY  R AY1 - L IY0\nRYMAN  R AY1 - M AH0 N\nRYMER  R AY1 - M ER0\nRYNDERS  R IH1 N - D ER0 Z\nRYNEARSON  R IH1 - N ER0 - S AH0 N\nRYNER  R AY1 - N ER0\nRYNES  R AY1 N Z\nRYNO  R IH1 - N OW0\nRYOBI  R AY2 - OW1 - B IY0\nRYOHEI  R AY1 - OW0 - HH EY2\nRYON  R AY1 - AH0 N\nRYRIE  R AY1 - R IY0\nRYS  R IH1 S\nRYSAVY  R IH0 - S AA1 - V IY0\nRYSER  R AY1 - S ER0\nRYSKAMP  R AY1 - S K AE2 M P\nRYTHER  R IH1 - DH ER0\nRYTON  R IH1 - T AH0 N\nRYUTARO  R Y UW0 - T AA1 - R OW0\nRYUZO  R AY2 - UW1 - Z OW0\nRYZHKOV  R AY1 Z - K AA0 V\nRZASA  ER0 - Z AA1 - S AH0\nRZEPKA  ER0 - Z EH1 P - K AH0\nS  EH1 S\nS'S  EH1 - S IH0 Z\nS.  EH1 S\nS.'S  EH1 - S IH0 Z\nSA  S AA1\nSAAB  S AA1 B\nSAAB'S  S AA1 B Z\nSAAD  S AA1 D\nSAAL  S AA1 L\nSAAM  S AA1 M\nSAAMSTAAN  S AA1 M - S T AA2 N\nSAAR  S AA1 R\nSAARI  S AA1 - R IY0\nSAARINEN  S AA1 - R IH0 - N AH0 N\nSAARINEN(2)  S AH0 - R IY1 - N AH0 N\nSAATCHI  S AA1 - CH IY0\nSAATCHI'S  S AA1 - CH IY0 Z\nSAATHOFF  S AA1 T - HH AO2 F\nSAAVEDRA  S AA0 - V EY1 - D R AH0\nSAB'S  S AE1 B Z\nSABA  S AA1 - B AH0\nSABAH  S AA1 - B AH0\nSABALA  S AA0 - B AA1 - L AH0\nSABALAN  S AE1 - B AH0 - L AH0 N\nSABAN  S EY1 - B AH0 N\nSABAT  S AA1 - B AA0 T\nSABATINE  S AA0 - B AA0 - T IY1 - N IY0\nSABATINI  S AE2 - B AH0 - T IY1 - N IY0\nSABATINO  S AA0 - B AA0 - T IY1 - N OW0\nSABATISTA  S AA2 - B AH0 - T IY1 - S T AH0\nSABATISTA'S  S AA2 - B AH0 - T IY1 - S T AH0 Z\nSABATISTAS  S AA2 - B AH0 - T IY1 - S T AH0 Z\nSABATISTAS'  S AA2 - B AH0 - T IY1 - S T AH0 Z\nSABATKA  S AA0 - B AA1 T - K AH0\nSABATO  S AA0 - B AA1 - T OW0\nSABAUDIA  S AH0 - B AO1 - D IY0 - AH0\nSABB  S AE1 B\nSABBAGH  S AE1 - B AH0 G\nSABBATH  S AE1 - B AH0 TH\nSABBATICAL  S AH0 - B AE1 - T IH0 - K AH0 L\nSABEDRA  S AH0 - B EH1 - D R AH0\nSABEL  S AA0 - B EH1 L\nSABELLA  S AH0 - B EH1 - L AH0\nSABENA  S AH0 - B IY1 - N AH0\nSABER  S EY1 - B ER0\nSABERBEIN  S EY1 - B ER0 - B AY2 N\nSABERS  S EY1 - B ER0 Z\nSABERTECH  S EY1 - B ER0 - T EH2 K\nSABEY  S EY1 - B IY0\nSABIA  S AA1 - B IY0 - AH0\nSABIN  S EY1 - B IH0 N\nSABINA  S AH0 - B IY1 - N AH0\nSABINE  S AH0 - B IY1 N\nSABINO  S AA0 - B IY1 - N OW0\nSABINS  S EY1 - B IH0 N Z\nSABLAN  S AE1 - B L AH0 N\nSABLE  S EY1 - B AH0 L\nSABLES  S EY1 - B AH0 L Z\nSABO  S AA1 - B OW0\nSABOL  S AA0 - B AO1 L\nSABORTECH  S EY1 - B ER0 - T EH2 K\nSABOTAGE  S AE1 - B AH0 - T AA2 ZH\nSABOTAGED  S AE1 - B AH0 - T AA2 ZH D\nSABOTAGING  S AE1 - B AH0 - T AA2 - ZH IH0 NG\nSABOTEUR  S AE2 - B AH0 - T ER1\nSABOTEURS  S AE2 - B AH0 - T ER1 Z\nSABOTEURS(2)  S AE2 - B IH0 - T AO1 R Z\nSABOURIN  S AE1 - B UH0 - R AE0 N\nSABRA  S AA1 - B R AH0\nSABRE  S EY1 - B ER0\nSABRES  S EY1 - B ER0 Z\nSABRETECH  S EY1 - B ER0 - T EH2 K\nSABRINA  S AH0 - B R IY1 - N AH0\nSABRY  S AA1 - B R IY0\nSABTA  S AE1 B - T AH0\nSABUNUMA  S AE0 - B UW1 - N AH0 - M AH0\nSAC  S AE1 K\nSACCA  S AE1 - K AH0\nSACCHARIN  S AE1 - K ER0 - AH0 N\nSACCHARINE  S AE1 - K ER0 - AY2 N\nSACCO  S AE1 - K OW0\nSACCO'S  S AE1 - K OW0 Z\nSACCOCCIO  S AA0 - K OW1 - CH IY0 - OW0\nSACCOMANNO  S AE1 - K AH0 - M AE2 - N OW0\nSACCONE  S AA0 - K OW1 - N IY0\nSACCULE  S AE1 - K Y UW2 L\nSACHA  S AE1 - CH AH0\nSACHDEV  S AE1 CH - D EH2 V\nSACHER  S AE1 - K ER0\nSACHI  S AE1 - CH IY0\nSACHS  S AE1 K S\nSACHS'  S AE1 K S\nSACHS'S  S AE1 K - S IH0 Z\nSACHS(2)  S AA1 K S\nSACHSE  S AE1 CH S\nSACILOR  S AE1 - S AH0 - L ER0\nSACIRBEY  S AA1 - K ER0 - B IY0\nSACIRBEY'S  S AA1 - K ER0 - B IY0 Z\nSACK  S AE1 K\nSACKED  S AE1 K T\nSACKETT  S AE1 - K IH0 T\nSACKING  S AE1 - K IH0 NG\nSACKLER  S AE1 K - L ER0\nSACKMAN  S AE1 K - M AH0 N\nSACKMANN  S AE1 K - M AH0 N\nSACKRIDER  S AE1 - K R AY2 - D ER0\nSACKS  S AE1 K S\nSACKSTEDER  S AE1 K - S T EH2 - D ER0\nSACKVILLE  S AE1 K - V IH2 L\nSACO  S EY1 - K OW0\nSACRA  S AE1 - K R AH0\nSACRAMENT  S AE1 - K R AH0 - M AH0 N T\nSACRAMENTO  S AE2 - K R AH0 - M EH1 N - T OW0\nSACRAMENTO'S  S AE2 - K R AH0 - M EH1 N - T OW0 Z\nSACRAMENTS  S AE1 - K R AH0 - M AH0 N T S\nSACRED  S EY1 - K R AH0 D\nSACRED(2)  S EY1 - K R IH0 D\nSACREDNESS  S EY1 - K R IH0 D - N IH0 S\nSACRIFICE  S AE1 - K R AH0 - F AY2 S\nSACRIFICED  S AE1 - K R AH0 - F AY2 S T\nSACRIFICES  S AE1 - K R AH0 - F AY2 - S IH0 Z\nSACRIFICIAL  S AE2 - K R AH0 - F IH1 - SH AH0 L\nSACRIFICING  S AE1 - K R AH0 - F AY2 - S IH0 NG\nSACRILEGE  S AE1 - K R AH0 - L AH0 JH\nSACRILEGIOUS  S AE2 - K R AH0 - L EH1 - JH IH0 S\nSACROSANCT  S AE1 - K R OW0 - S AE0 NG K T\nSACS  S AE1 K S\nSAD  S AE1 D\nSADA  S AA1 - D AH0\nSADAKA  S AH0 - D AA1 - K AH0\nSADAKO  S AA0 - D AA1 - K OW0\nSADAO  S AH0 - D AW1\nSADAT  S AA0 - D AA1 T\nSADAT'S  S AA0 - D AA1 T S\nSADAT'S(2)  S AH0 - D AE1 T S\nSADAT(2)  S AH0 - D AE1 T\nSADDAM  S AA1 - D AH0 M\nSADDAM'S  S AA1 - D AH0 M Z\nSADDAM'S(2)  S AH0 - D AA1 M Z\nSADDAM(2)  S AH0 - D AA1 M\nSADDEN  S AE1 - D AH0 N\nSADDENED  S AE1 - D AH0 N D\nSADDENING  S AE1 - D AH0 N - IH0 NG\nSADDENING(2)  S AE1 D - N IH0 NG\nSADDENS  S AE1 - D AH0 N Z\nSADDER  S AE1 - D ER0\nSADDEST  S AE1 - D AH0 S T\nSADDLE  S AE1 - D AH0 L\nSADDLEBAG  S AE1 - D AH0 L - B AE2 G\nSADDLEBAGS  S AE1 - D AH0 L - B AE2 G Z\nSADDLED  S AE1 - D AH0 L D\nSADDLER  S AE1 - D AH0 L - ER0\nSADDLER(2)  S AE1 D - L ER0\nSADDLES  S AE1 - D AH0 L Z\nSADDLING  S AE1 - D AH0 L - IH0 NG\nSADDLING(2)  S AE1 D - L IH0 NG\nSADDORIS  S AE1 - D ER0 - IH0 S\nSADEGHI  S AA0 - D EH1 - G IY0\nSADEH  S AA1 - D EH2\nSADEH-KONIECPOL  S AA1 - D EH2 - K OW2 - N IY0 - EH1 K - P AO2 L\nSADEK  S AE1 - D IH0 K\nSADELLA  S AH0 - D EH1 - L AH0\nSADER  S EY1 - D ER0\nSADIE  S AE1 - D IY0\nSADIE'S  S EY1 - D IY0 Z\nSADIRA  S AA0 - D IH1 - R AH0\nSADISM  S EY1 - D IH0 - Z AH0 M\nSADIST  S EY1 - D AH0 S T\nSADISTIC  S AH0 - D IH1 - S T IH0 K\nSADLER  S AE1 D - L ER0\nSADLIER  S AE1 D - L IY0 - ER0\nSADLON  S AE1 D - L AH0 N\nSADLOWSKI  S AE0 D - L AW1 S - K IY0\nSADLY  S AE1 D - L IY0\nSADNESS  S AE1 D - N AH0 S\nSADO  S EY1 - D OW0\nSADOFF  S AE1 - D AO2 F\nSADOWSKI  S AH0 - D AO1 F S - K IY0\nSADOWSKY  S AH0 - D AW1 S - K IY0\nSADYE  S AE1 - D AY0\nSAECHAO  S IY1 - CH AW0\nSAEED  S AA0 - IY1 D\nSAEGER  S EH1 - G ER0\nSAEHAN  S EY1 - AH0 N\nSAELENS  S EH1 - L AH0 N Z\nSAEMAUL  S EY1 - M AO0 L\nSAENGER  S EH1 N - JH ER0\nSAENS'S  S EY1 N - Z IH0 Z\nSAENZ  S IY1 N Z\nSAEZ  S IY1 Z\nSAFARI  S AH0 - F AA1 - R IY0\nSAFARIK  S AE1 - F ER0 - IH0 K\nSAFARIS  S AH0 - F AA1 - R IY0 Z\nSAFDIE  S AE1 F - D IY0\nSAFE  S EY1 F\nSAFECARD  S EY1 F - K AA2 R D\nSAFECARD'S  S EY1 F - K AA2 R D Z\nSAFECO  S EY1 F - K OW0\nSAFEGUARD  S EY1 F - G AA2 R D\nSAFEGUARDED  S EY1 F - G AA2 R - D IH0 D\nSAFEGUARDING  S EY1 F - G AA2 R - D IH0 NG\nSAFEGUARDS  S EY1 F - G AA2 R D Z\nSAFEHOUSE  S EY1 F - HH AW2 S\nSAFEKEEPING  S EY1 F - K IY1 - P IH0 NG\nSAFELY  S EY1 F - L IY0\nSAFER  S EY1 - F ER0\nSAFES  S EY1 F S\nSAFEST  S EY1 - F AH0 S T\nSAFETY  S EY1 F - T IY0\nSAFETY'S  S EY1 F - T IY0 Z\nSAFEWAY  S EY1 F - W EY2\nSAFEWAY'S  S EY1 F - W EY2 Z\nSAFFELL  S AE1 - F AH0 L\nSAFFER  S AE1 - F ER0\nSAFFERSTEIN  S AE1 - F ER0 - S T IY2 N\nSAFFERSTEIN(2)  S AE1 - F ER0 - S T AY2 N\nSAFFLE  S AE1 - F AH0 L\nSAFFLOWER  S AE1 - F L AW2 - ER0\nSAFFOLD  S AE1 - F OW2 L D\nSAFFORD  S AE1 - F ER0 D\nSAFFRAN  S AE1 - F R AH0 N\nSAFFRON  S AE1 - F R AH0 N\nSAFIAN  S EY1 - F IY0 - AH0 N\nSAFIER  S AH0 - F IH1 R\nSAFING  S EY1 - F IH0 NG\nSAFIR  S AE1 - F ER0\nSAFIRE  S AH0 - F AY1 R\nSAFIRE'S  S AH0 - F AY1 R Z\nSAFKO  S AA1 F - K OW0\nSAFLEY  S AE1 F - L IY0\nSAFRA  S AE1 - F R AH0\nSAFRA'S  S AE1 - F R AH0 Z\nSAFRAN  S AE1 - F R AH0 N\nSAFRANEK  S AE1 - F R AH0 - N IH0 K\nSAFRIT  S AE1 - F R IH0 T\nSAG  S AE1 G\nSAGA  S AA1 - G AH0\nSAGAN  S EY1 - G AH0 N\nSAGANSKY  S AH0 - G AE1 N S - K IY0\nSAGAR  S AA0 - G AA1 R\nSAGAS  S AA1 - G AH0 Z\nSAGE  S EY1 JH\nSAGE'S  S EY1 - JH AH0 Z\nSAGEBRUSH  S EY1 JH - B R AH2 SH\nSAGEN  S AE1 - G AH0 N\nSAGER  S EY1 - G ER0\nSAGERS  S EY1 - G ER0 Z\nSAGES  S EY1 - JH IH0 Z\nSAGGED  S AE1 G D\nSAGGESE  S AE1 - G IY0 Z\nSAGGING  S AE1 - G IH0 NG\nSAGINAW  S AE1 - G IH0 - N AO2\nSAGO  S EY1 - G OW0\nSAGONA  S AA0 - G OW1 - N AH0\nSAGRAVES  S AA0 - G R AA1 - V EH0 S\nSAGS  S AE1 G Z\nSAGUARO  S AH0 G - W AO1 - R OW0\nSAHA  S AA1 - HH AH0\nSAHAGIAN  S AH0 - HH IY1 - JH IY0 - AH0 N\nSAHAGUN  S AE1 - HH AH0 - G AH0 N\nSAHARA  S AH0 - HH EH1 - R AH0\nSAHARAN  S AE1 - HH ER0 - AH0 N\nSAHGAL  S AA1 - G AH0 L\nSAHL  S AA1 L\nSAHLEN  S AA1 - L AH0 N\nSAHLI  S AA1 - L IY0\nSAHLIN  S AA1 - L IH0 N\nSAHLMAN  S AA1 L - M AH0 N\nSAHM  S AE1 M\nSAHR  S AE1 R\nSAI  S AY1\nSAI(2)  EH1 - S EY1 - AY1\nSAIA  S AA1 - Y AH0\nSAID  S EH1 D\nSAIDAN  S EY1 - D AH0 N\nSAIDINER  S EY1 - D IH0 - N ER0\nSAIF  S AA2 - IY1 F\nSAIF(2)  S AY1 F\nSAIGON  S AY2 - G AA1 N\nSAIKI  S EY1 - K IY0\nSAIL  S EY1 L\nSAILBOAT  S EY1 L - B OW2 T\nSAILBOATS  S EY1 L - B OW2 T S\nSAILED  S EY1 L D\nSAILER  S EY1 - L ER0\nSAILFISH  S EY1 L - F IH2 SH\nSAILING  S EY1 - L IH0 NG\nSAILOR  S EY1 - L ER0\nSAILOR'S  S EY1 - L ER0 Z\nSAILORS  S EY1 - L ER0 Z\nSAILORS'  S EY1 - L ER0 Z\nSAILS  S EY1 L Z\nSAIN  S EY1 N\nSAINATO  S AH0 - N AA1 - T OW0\nSAINDON  S EY1 N - D AH0 N\nSAINE  S EY1 N\nSAINSBURY  S EY1 N S - B EH0 - R IY0\nSAINT  S EY1 N T\nSAINT'S  S EY1 N T S\nSAINTED  S EY1 N - T IH0 D\nSAINTHOOD  S EY1 N T - HH UH2 D\nSAINTLY  S EY1 N T - L IY0\nSAINTS  S EY1 N T S\nSAINTS'  S EY1 N T S\nSAINZ  S EY1 N Z\nSAIPAN  S EY1 - P AH0 N\nSAIPAN'S  S EY1 - P AH0 N Z\nSAIS  S EY1 Z\nSAISON  S EY1 - S AA0 N\nSAITAMA  S AA2 - IH0 - T AA1 - M AH0\nSAITO  S EY1 - T OW2\nSAITTA  S EY1 - T AH0\nSAIZ  S EY1 Z\nSAJAK  S AE1 - JH AE0 K\nSAJDAK  S AY1 - D AH0 K\nSAK  S AE1 K\nSAKAGUCHI  S AA0 - K AA0 - G UW1 - CH IY0\nSAKAI  S AA0 - K AA1 - IY0\nSAKAL  S EY1 - K AH0 L\nSAKAMOTO  S AA0 - K AA0 - M OW1 - T OW0\nSAKATA  S AA0 - K AA1 - T AH0\nSAKAU  S AA0 - K AA1 - UW0\nSAKE  S EY1 K\nSAKER  S EY1 - K ER0\nSAKES  S EY1 K S\nSAKHALIN  S AE1 K - HH AH0 - L IH0 N\nSAKHAROV  S AA1 - K ER0 - AA0 V\nSAKI  S AA1 - K IY0\nSAKIGAKE  S AA2 - K IY0 - G AA1 - K IY0\nSAKINA  S AH0 - K IY1 - N AH0\nSAKO  S AA1 - K OW0\nSAKOWITZ  S AE1 - K AH0 - W IH0 T S\nSAKOWSKI  S AH0 - K AO1 F S - K IY0\nSAKS  S AE1 K S\nSAKS'S  S AE1 K - S IH0 Z\nSAKSA  S AE1 K - S AH0\nSAKSIDA  S AA2 K - S IY1 - D AH0\nSAKUMA  S AA0 - K UW1 - M AH0\nSAKURA  S AE0 - K UH1 - R AH0\nSAKURAI  S AA0 - K UH0 - R AA1 - IY0\nSAL  S AE1 L\nSAL'S  S AE1 L Z\nSALA  S AA1 - L AH0\nSALAAM  S AH0 - L AA1 M\nSALABLE  S EY1 - L AH0 - B AH0 L\nSALABLES  S EY1 - L AH0 - B AH0 L Z\nSALACIOUS  S AH0 - L EY1 - SH AH0 S\nSALAD  S AE1 - L AH0 D\nSALADA  S AH0 - L AA1 - D AH0\nSALADIN  S AE1 - L AH0 - D IH0 N\nSALADINO  S AA0 - L AA0 - D IY1 - N OW0\nSALADS  S AE1 - L AH0 D Z\nSALAFIA  S AH0 - L EY1 - F IY0 - AH0\nSALAH  S AE1 - L AH0\nSALAK  S AE1 - L AH0 K\nSALAM  S AA0 - L AA1 M\nSALAMA  S AA0 - L AA1 - M AH0\nSALAMANCA  S AE2 - L AH0 - M AE1 NG - K AH0\nSALAMANDER  S AE2 - L AH0 - M AE1 N - D ER0\nSALAMANDERS  S AE2 - L AH0 - M AE1 N - D ER0 Z\nSALAMEH  S AA1 - L AA0 - M EH0\nSALAMEH'S  S AA1 - L AA0 - M EH0 Z\nSALAMI  S AH0 - L AA1 - M IY0\nSALAMIS  S AH0 - L AA1 - M IY0 Z\nSALAMON  S AE1 - L AH0 - M AH0 N\nSALAMONE  S AE1 - L AH0 - M OW2 N\nSALANT  S AE1 - L AH0 N T\nSALARIED  S AE1 - L ER0 - IY0 D\nSALARIES  S AE1 - L ER0 - IY0 Z\nSALARY  S AE1 - L ER0 - IY0\nSALARYMEN  S AE1 - L ER0 - IY0 - M AH0 N\nSALAS  S AA1 - L AA0 Z\nSALATA  S AA0 - L AA1 - T AH0\nSALATINO  S AA0 - L AA0 - T IY1 - N OW0\nSALAY  S AE1 - L EY0\nSALAZ  S AA1 - L AA0 Z\nSALAZAR  S AE1 - L AH0 - Z AA0 R\nSALBERG  S AE1 L - B ER0 G\nSALCE  S EY1 L S\nSALCEDO  S AA0 L - CH EY1 - D OW0\nSALCIDO  S AA0 L - CH IY1 - D OW0\nSALDANA  S AA0 L - D AE1 - N AH0\nSALDIVAR  S AA0 L - D IY0 - V AA1 R\nSALDOVAR  S AA0 L - D AH0 - V AA1 R\nSALE  S EY1 L\nSALE'S  S EY1 L Z\nSALEABLE  S EY1 - L AH0 - B AH0 L\nSALEEBY  S AE1 - L IY0 - B IY0\nSALEEM  S AE1 - L IY0 M\nSALEH  S AA1 - L EH0 HH\nSALEK  S AA1 - L EH0 K\nSALEM  S EY1 - L AH0 M\nSALEM'S  S EY1 - L AH0 M Z\nSALEMA  S AH0 - L IY1 - M AH0\nSALEMI  S AA0 - L EH1 - M IY0\nSALEMME  S AE1 - L IH0 M\nSALERNO  S AH0 - L EH1 R - N OW0\nSALES  S EY1 L Z\nSALES'  S EY1 L Z\nSALESMAN  S EY1 L Z - M AH0 N\nSALESMAN'S  S EY1 L Z - M AH0 N Z\nSALESMANSHIP  S EY1 L Z - M AH0 N - SH IH2 P\nSALESMEN  S EY1 L Z - M IH0 N\nSALESMEN'S  S EY1 L Z - M IH0 N Z\nSALESPEOPLE  S EY1 L Z - P IY2 - P AH0 L\nSALESPERSON  S EY1 L Z - P ER2 - S AH0 N\nSALESWOMAN  S EY1 L Z - W UH2 - M AH0 N\nSALESWOMEN  S EY1 L Z - W IH2 - M AH0 N\nSALGADO  S AA0 L - G AA1 - D OW0\nSALGUERO  S AA0 L - G EH1 - R OW0\nSALHANY  S AE2 L - HH EY1 - N IY0\nSALIBA  S AA0 - L IY1 - B AH0\nSALICK  S AE1 - L IH0 K\nSALIENT  S EY1 - L IY0 - AH0 N T\nSALIENT(2)  S EY1 - L Y AH0 N T\nSALIGMAN  S AE1 - L IH0 G - M AH0 N\nSALIM  S AE1 - L IH0 M\nSALIM(2)  S AA0 - L IY0 M\nSALIN  S AA0 - L IY1 N\nSALINA  S AH0 - L IY1 - N AH0\nSALINAS  S AH0 - L IY1 - N AH0 S\nSALINAS'  S AH0 - L IY1 - N AH0 S\nSALINAS'(2)  S AH0 - L IY1 - N AH0 Z\nSALINAS'S  S AH0 - L IY1 - N AH0 - S IH0 Z\nSALINAS(2)  S AH0 - L IY1 - N AH0 Z\nSALINE  S AH0 - L IY1 N\nSALING  S EY1 - L IH0 NG\nSALINGER  S EY1 - L IH0 - NG ER0\nSALINGER'S  S EY1 - L IH0 - NG ER0 Z\nSALINGER'S(2)  S AE1 - L IH0 N - JH ER0 Z\nSALINGER(2)  S AE1 - L IH0 N - JH ER0\nSALINGERS  S AE1 - L IH0 - NG ER0 Z\nSALINGERS(2)  S AE1 - L IH0 N - JH ER0 Z\nSALINITY  S AH0 - L IH1 - N AH0 - T IY0\nSALIS  S AA1 - L IH0 S\nSALISBURY  S AE1 L Z - B ER0 - IY0\nSALIVA  S AH0 - L AY1 - V AH0\nSALIVATE  S AE1 - L AH0 - V EY2 T\nSALIVATED  S AE1 - L AH0 - V EY2 - T AH0 D\nSALIVATING  S AE1 - L AH0 - V EY2 - T IH0 NG\nSALIZZONI  S AE2 - L IH0 - Z OW1 - N IY0\nSALK  S AO1 K\nSALK'S  S AO1 K S\nSALKELD  S AE1 L - K IH0 L D\nSALKIN  S AE1 L - K IH0 N\nSALL  S AO1 L\nSALLADE  S AE1 - L EY2 D\nSALLAS  S AA1 - L AA0 Z\nSALLE  S EY1 L\nSALLEE  S AE1 - L IY0\nSALLEH  S AA1 - L EH0\nSALLER  S AO1 - L ER0\nSALLES  S AA1 - L EH0 S\nSALLEY  S AE1 - L IY0\nSALLIE  S AE1 - L IY0\nSALLIES  S AE1 - L IY0 Z\nSALLING  S AO1 - L IH0 NG\nSALLIS  S AE1 - L IH0 S\nSALLS  S AO1 L Z\nSALLY  S AE1 - L IY0\nSALLY'S  S AE1 - L IY0 Z\nSALM  S AA1 M\nSALMAN  S AE1 - M AH0 N\nSALMANS  S AE1 - M AH0 N Z\nSALMELA  S AA0 L - M EY1 - L AH0\nSALMEN  S AE0 L - M EH1 N\nSALMERON  S AA0 L - M EH0 - R AO1 N\nSALMI  S AA1 L - M IY0\nSALMINEN  S AE1 L - M IH0 - N AH0 N\nSALMON  S AE1 - M AH0 N\nSALMOND  S AE1 L - M AH0 N D\nSALMONELLA  S AE2 L - M AH0 - N EH1 - L AH0\nSALMONS  S AE1 - M AH0 N Z\nSALMONSON  S AA0 L - M OW1 N - S AH0 N\nSALO  S AA1 - L OW0\nSALOIS  S AH0 L - W AA1\nSALOMA  S AA0 - L OW1 - M AH0\nSALOME  S AH0 - L OW1 - M IY0\nSALOMI  S AA0 - L OW1 - M IY0\nSALOMON  S AE1 - L AH0 - M AH0 N\nSALOMON'S  S AE1 - L AH0 - M AH0 N Z\nSALOMONE  S AA0 - L OW0 - M OW1 - N IY0\nSALON  S AH0 - L AA1 N\nSALONE  S AH0 - L OW1 N\nSALONGA  S AH0 - L AO1 NG - G AH0\nSALONS  S AH0 - L AA1 N Z\nSALOOJEE  S AH0 - L UW1 - JH IY0\nSALOON  S AH0 - L UW1 N\nSALOONS  S AH0 - L UW1 N Z\nSALOPEK  S AE1 - L AH0 - P IH0 K\nSALOW  S AE1 - L OW0\nSALSA  S AO1 L - S AH0\nSALSBERRY  S AO1 L S - B EH0 - R IY0\nSALSBERY  S AE1 L S - B ER0 - IY0\nSALSBURY  S AE1 L Z - B ER0 - IY0\nSALSER  S EY1 L - S ER0\nSALSGIVER  S AE1 L - S G IH0 - V ER0\nSALSMAN  S AO1 L S - M AH0 N\nSALT  S AO1 L T\nSALTARELLI  S AO0 L - T AA0 R - EH1 - L IY0\nSALTBOX  S AO1 L T - B AA2 K S\nSALTED  S AO1 L - T AH0 D\nSALTED(2)  S AO1 L - T IH0 D\nSALTER  S AO1 L - T ER0\nSALTER'S  S AO1 L - T ER0 Z\nSALTERS  S AO1 L - T ER0 Z\nSALTIER  S AO1 L - T IY0 - ER0\nSALTING  S AO1 L - T IH0 NG\nSALTLIKE  S AO1 L T - L AY2 K\nSALTMARSH  S AO1 L T - M AA2 R SH\nSALTON  S AO1 L - T AH0 N\nSALTS  S AO1 L T S\nSALTSMAN  S AO1 L T S - M AH0 N\nSALTWATER  S AO2 L T - W AA1 - T ER0\nSALTY  S AO1 L - T IY0\nSALTZ  S AE1 L T S\nSALTZBURG  S AO1 L T S - B ER0 G\nSALTZMAN  S AO1 L T S - M AH0 N\nSALUS  S AE1 - L IH0 S\nSALUTARY  S AE1 - L Y AH0 - T EH2 - R IY0\nSALUTATORIAN  S AH0 - L UW2 - T AH0 - T AO1 - R IY0 - AH0 N\nSALUTE  S AH0 - L UW1 T\nSALUTED  S AH0 - L UW1 - T AH0 D\nSALUTES  S AH0 - L UW1 T S\nSALUTING  S AH0 - L UW1 - T IH0 NG\nSALVA  S AA1 L - V AH0\nSALVADOR  S AE1 L - V AH0 - D AO2 R\nSALVADOR'S  S AE1 L - V AH0 - D AO2 R Z\nSALVADORAN  S AE1 L - V AH0 - D AO2 - R AH0 N\nSALVADORANS  S AE0 L - V AH0 - D AO1 - R AH0 N Z\nSALVADORE  S AA0 L - V AA0 - D AO1 - R EY0\nSALVAGE  S AE1 L - V AH0 JH\nSALVAGE(2)  S AE1 L - V IH0 JH\nSALVAGEABLE  S AE1 L - V IH0 - JH AH0 - B AH0 L\nSALVAGED  S AE1 L - V IH0 JH D\nSALVAGER  S AE1 L - V IH0 - JH ER0\nSALVAGERS  S AE1 L - V IH0 - JH ER0 Z\nSALVAGGIO  S AA0 L - V AA1 - JH IY0 - OW0\nSALVAGING  S AE1 L - V IH0 - JH IH0 NG\nSALVAS  S AA1 L - V AA0 Z\nSALVATI  S AA0 L - V AA1 - T IY0\nSALVATIERRA  S AA0 L - V AA0 - T IH1 - R AH0\nSALVATION  S AE0 L - V EY1 - SH AH0 N\nSALVATO  S AA0 L - V AA1 - T OW0\nSALVATORE  S AE0 L - V AH0 - T AO1 - R IY0\nSALVATORE(2)  S AE1 L - V AH0 - D AO2 R\nSALVATORI  S AA0 L - V AA0 - T AO1 - R IY0\nSALVE  S AA1 V\nSALVES  S AA1 V Z\nSALVESEN  S AA0 L - V IY1 - Z AH0 N\nSALVESON  S AA0 L - V EY1 - S AH0 N\nSALVETTI  S AA0 L - V EH1 - T IY0\nSALVI  S AA1 L - V IY0\nSALVI'S  S AA1 L - V IY0 Z\nSALVIA  S AE1 L - V IY0 - AH0\nSALVIGSEN  S AE1 L - V IH0 G - S AH0 N\nSALVIGSTEN  S AE1 L - V IH0 G - S T AH0 N\nSALVINA  S AA0 L - V IY1 - N AH0\nSALVINO  S AE0 L - V IY1 - N OW0\nSALVO  S AE1 L - V OW0\nSALVOS  S AE1 L - V OW0 Z\nSALVUCCI  S AA0 L - V UW1 - CH IY0\nSALWAY  S AE1 L - W EY0\nSALWEN  S AE1 L - W AH0 N\nSALYARD  S AO1 L - Y ER0 D\nSALYARDS  S AE1 L - Y AA0 R D Z\nSALYER  S AA1 - L IY0 - ER0\nSALYERS  S AA1 - L IY0 - ER0 Z\nSALZ  S AO1 L Z\nSALZANO  S AA0 L - Z AA1 - N OW0\nSALZBERG  S AO1 L Z - B ER0 G\nSALZBERG(2)  S AO1 L T S - B ER0 G\nSALZBURG  S AO1 L Z - B ER0 G\nSALZBURG(2)  S AO1 L T S - B ER0 G\nSALZER  S EY1 L - Z ER0\nSALZGITTER  S AO1 L T S - G IH2 - T ER0\nSALZHAUER  S AO1 L T S - HH AW2 R\nSALZHAUER(2)  S AO1 L T - S AW2 R\nSALZMAN  S AO1 L Z - M AH0 N\nSALZMANN  S AO1 L Z - M AH0 N\nSALZWEDEL  S AE1 L Z - W IH0 - D AH0 L\nSAM  S AE1 M\nSAM'S  S AE1 M Z\nSAM-JOO  S AA1 M - JH UW2\nSAMA  S AA1 - M AH0\nSAMAHA  S AE1 - M AH0 - HH AH0\nSAMANIEGO  S AA0 - M AA0 - N IY1 - G OW0\nSAMANO  S AA0 - M AA1 - N OW0\nSAMANTHA  S AH0 - M AE1 N - TH AH0\nSAMAR  S AE1 - M AA0 R\nSAMARA  S AE1 - M ER0 - AH0\nSAMARANCH  S AE1 - M ER0 - AE0 N CH\nSAMARAS  S AE1 - M ER0 - AH0 Z\nSAMARIA  S EY2 - M ER0 - IY1 - AH0\nSAMARIN  S AA0 - M AA1 - R IY0 N\nSAMARITAN  S AH0 - M EH1 - R IH0 - T AH0 N\nSAMARITANS  S AH0 - M EH1 - R IH0 - T AH0 N Z\nSAMARKAND  S AE1 - M AA0 R - K AE2 N D\nSAMATAR  S AE1 - M AH0 - T AA2 R\nSAMBA  S AA1 M - B AH0\nSAMBERG  S AE1 M - B ER0 G\nSAMBO  S AE1 M - B OW0\nSAMBORSKI  S AH0 M - B AO1 R S - K IY0\nSAMBRANO  S AA0 M - B R AA1 - N OW0\nSAMBRE  S AE1 M - B R AH0\nSAMBUCA  S AE2 M - B Y UW1 - K AH0\nSAMCOR  S AE1 M - K AO2 R\nSAME  S EY1 M\nSAMEDAN  S AE1 - M AH0 - D AH0 N\nSAMEER  S AA2 - M IH1 R\nSAMEK  S AE1 - M IH0 K\nSAMELLA  S AH0 - M EH1 - L AH0\nSAMELLE  S AH0 - M EH1 L\nSAMELSON  S AE1 - M IH0 L - S AH0 N\nSAMENESS  S EY1 M - N AH0 S\nSAMEROL  S AE1 - M ER0 - AO2 L\nSAMES  S EY1 M Z\nSAMET  S AE1 - M IH0 T\nSAMFORD  S AE1 M - F ER0 D\nSAMI  S AE1 - M IY0\nSAMI'S  S AE1 - M IY0 Z\nSAMINA  S AH0 - M IH1 - N AH0\nSAMIR  S AH0 - M IH1 R\nSAMIR(2)  S AA0 - M IH1 R\nSAMMARCO  S AA0 - M AA1 R - K OW0\nSAMMARTINO  S AA0 - M AA0 R - T IY1 - N OW0\nSAMMET  S AE1 - M IH0 T\nSAMMIE  S AE1 - M IY0\nSAMMIS  S AE1 - M IH0 S\nSAMMON  S AE1 - M AH0 N\nSAMMONS  S AE1 - M AH0 N Z\nSAMMS  S AE1 M Z\nSAMMUT  S AE1 - M AH0 T\nSAMMY  S AE1 - M IY0\nSAMOA  S AH0 - M OW1 - AH0\nSAMOAN  S AH0 - M OW1 - AH0 N\nSAMOJLIK  S AH0 - M OY1 - L IH0 K\nSAMONS  S AA1 - M OW0 N Z\nSAMORA  S AA0 - M AO1 - R AH0\nSAMOS  S EY1 - M AA0 S\nSAMOTH  S AE1 - M AH0 TH\nSAMP  S AE1 M P\nSAMPAN  S AE1 M - P AE0 N\nSAMPANS  S AE1 M - P AE0 N Z\nSAMPER  S AE1 M - P ER0\nSAMPER'S  S AE1 M - P ER0 Z\nSAMPERE  S AE0 M - P IY1 R\nSAMPEY  S AE1 M - P IY0\nSAMPLE  S AE1 M - P AH0 L\nSAMPLE'S  S AE1 M - P AH0 L Z\nSAMPLED  S AE1 M - P AH0 L D\nSAMPLER  S AE1 M - P L ER0\nSAMPLERS  S AE1 M - P L ER0 Z\nSAMPLES  S AE1 M - P AH0 L Z\nSAMPLEY  S AE1 M - P L IY0\nSAMPLING  S AE1 M - P L IH0 NG\nSAMPLINGS  S AE1 M - P L IH0 NG Z\nSAMPRAS  S AE1 M - P R AH0 S\nSAMPRAS'  S AE1 M - P R AH0 S\nSAMPRAS'S  S AE1 M - P R AH0 - S IH0 Z\nSAMPRE  S AE1 M - P R IY0\nSAMPRE(2)  S AE1 M - P ER0\nSAMPSEL  S AE1 M P - S AH0 L\nSAMPSELL  S AE1 M P - S AH0 L\nSAMPSON  S AE1 M P - S AH0 N\nSAMRA  S AE1 - M R AH0\nSAMS  S AE1 M Z\nSAMSARA  S AH0 M - S AA1 - R AH0\nSAMSEL  S AE1 M - S AH0 L\nSAMSOM  S AE1 M - S AH0 M\nSAMSON  S AE1 M - S AH0 N\nSAMSONITE  S AE1 M - S AH0 - N AY2 T\nSAMSUNG  S AE1 M - S AH2 NG\nSAMSUNG'S  S AE1 M - S AH2 NG Z\nSAMUDIO  S AA0 - M UW1 - D IY0 - OW0\nSAMUEL  S AE1 - M Y UW0 L\nSAMUEL'S  S AE1 - M Y UW0 L Z\nSAMUELA  S AE2 - M Y UW0 - EH1 - L AH0\nSAMUELLE  S AE1 - M Y UW0 - EH2 L\nSAMUELS  S AE1 - M Y UW0 - AH0 L Z\nSAMUELSEN  S AE1 - M UH0 L - S AH0 N\nSAMUELSON  S AE1 - M Y UW0 - AH0 L - S AH0 N\nSAMURAI  S AE1 - M UH0 - R AY2\nSAMURAI'S  S AE1 - M ER0 - AY2 Z\nSAMURAI(2)  S AE1 - M ER0 - AY2\nSAMURAIS  S AE1 - M ER0 - AY2 Z\nSAMURAIS(2)  S AE1 - M ER0 - IH0 Z\nSAN  S AE1 N\nSAN-ANDREAS  S AE1 - N AA2 N - D R EY1 - AH0 S\nSAN-DIEGO  S AE1 N - D IY0 - EY1 - G OW0\nSAN-FRAN  S AE1 N - F R AE1 N\nSAN-FRANCISCO  S AE1 N - F R AE0 N - S IH1 - S K OW0\nSAN-JUAN  S AE1 N - W AA1 N\nSAN-SALVADOR  S AE1 N - S AE1 L - V AH0 - D AO2 R\nSANA  S AA1 - N AH0\nSANAA  S AH0 - N AA1\nSANABRIA  S AH0 - N AE1 - B R IY0 - AH0\nSANADA  S AA0 - N AA1 - D AH0\nSANBORN  S AE1 N - B AO2 R N\nSANCHES  S AA1 N - CH EH0 S\nSANCHEZ  S AE1 N - CH EH0 Z\nSANCHEZ'S  S AE1 N - CH EH0 - Z IH0 Z\nSANCHO  S AA1 N - K OW0\nSANCIA  S AA1 N - CH AH0\nSANCTIFICATION  S AE2 NG K - T AH0 - F AH0 - K EY1 - SH AH0 N\nSANCTIFY  S AE1 NG K - T AH0 - F AY0\nSANCTIMONIOUS  S AE2 NG K - T AH0 - M OW1 - N IY0 - AH0 S\nSANCTIMONY  S AE1 NG K - T IH0 - M OW2 - N IY0\nSANCTION  S AE1 NG K - SH AH0 N\nSANCTION(2)  S AE1 NG - SH AH0 N\nSANCTIONED  S AE1 NG K - SH AH0 N D\nSANCTIONED(2)  S AE1 NG - SH AH0 N D\nSANCTIONING  S AE1 NG K - SH AH0 N - IH0 NG\nSANCTIONING(2)  S AE1 NG - SH AH0 N - IH0 NG\nSANCTIONS  S AE1 NG K - SH AH0 N Z\nSANCTIONS(2)  S AE1 NG - SH AH0 N Z\nSANCTITY  S AE1 NG K - T IH0 - T IY0\nSANCTUARIES  S AE1 NG K - CH UW0 - EH2 - R IY0 Z\nSANCTUARY  S AE1 NG K - CH UW0 - EH2 - R IY0\nSANCTUM  S AE1 NG K - T AH0 M\nSAND  S AE1 N D\nSAND'S  S AE1 N D Z\nSANDA  S AE1 N - D AH0\nSANDAGE  S AE1 N - D IH0 JH\nSANDAHL  S AE1 N - D AA2 L\nSANDAL  S AE1 N - D AH0 L\nSANDALL  S AE1 N - D AA0 L\nSANDALO  S AE2 N - D AE1 - L OW0\nSANDALS  S AE1 N - D AH0 L Z\nSANDAU  S AE1 N - D AW0\nSANDBAG  S AE1 N D - B AE2 G\nSANDBAGGED  S AE1 N D - B AE2 G D\nSANDBAGGER  S AE1 N D - B AE2 - G ER0\nSANDBAGGERS  S AE1 N D - B AE2 - G ER0 Z\nSANDBAGGING  S AE1 N D - B AE2 - G IH0 NG\nSANDBAGS  S AE1 N D - B AE2 G Z\nSANDBAR  S AE1 N D - B AA2 R\nSANDBERG  S AE1 N D - B ER0 G\nSANDBLAST  S AE1 N D - B L AE2 S T\nSANDBLASTED  S AE1 N D - B L AE2 S - T IH0 D\nSANDBOX  S AE1 N D - B AA2 K S\nSANDBURG  S AE1 N D - B ER0 G\nSANDE  S AE1 N D\nSANDED  S AE1 N - D IH0 D\nSANDEEN  S AE1 N - D IY0 N\nSANDEFER  S AE1 N - D IY0 - F ER0\nSANDEFUR  S AE1 N - D EH0 - F ER0\nSANDEL  S AE1 N - D EH0 L\nSANDELL  S AE1 N - D EH0 L\nSANDEN  S AE1 N - D AH0 N\nSANDER  S AE1 N - D ER0\nSANDERFER  S AE1 N - D ER0 - F ER0\nSANDERFORD  S AE1 N - D ER0 - F AO0 R D\nSANDERLIN  S AE1 N - D ER0 - L IH0 N\nSANDERS  S AE1 N - D ER0 Z\nSANDERS'S  S AE1 N - D ER0 - Z IH0 Z\nSANDERSON  S AE1 N - D ER0 - S AH0 N\nSANDFORD  S AE1 N D - F ER0 D\nSANDGREN  S AE1 N D - G R EH0 N\nSANDHILL  S AE1 N D - HH IH2 L\nSANDHOG  S AE1 N D - HH AO2 G\nSANDHOGS  S AE1 N D - HH AO2 G Z\nSANDHU  S AE1 N D - HH UW0\nSANDI  S AE1 N - D IY0\nSANDIA  S AE1 N - D IY0 - AH0\nSANDIDGE  S AE1 N - D IH0 JH\nSANDIE  S AE1 N - D IY0\nSANDIFER  S AE1 N - D AY0 - F ER0\nSANDIFORD  S AE1 N - D IH0 - F ER0 D\nSANDIN  S AE1 N - D IH2 N\nSANDING  S AE1 N - D IH0 NG\nSANDINISTA  S AE2 N - D IH0 - N IH1 - S T AH0\nSANDINISTA(2)  S AE2 N - D IH0 - N IY1 - S T AH0\nSANDINISTAS  S AE2 N - D IH0 - N IY1 - S T AH0 Z\nSANDINISTAS'  S AE2 N - D IH0 - N IY1 - S T AH0 Z\nSANDINO  S AE0 N - D IY1 - N OW0\nSANDINO'S  S AE0 N - D IY1 - N OW0 Z\nSANDLER  S AE1 N D - L ER0\nSANDLIN  S AE1 N D - L IH0 N\nSANDLING  S AE1 D - L IH0 NG\nSANDMAN  S AE1 N D - M AE2 N\nSANDMANN  S AE1 N D - M AH0 N\nSANDMEYER  S AE1 N D - M AY0 - ER0\nSANDNER  S AE1 N D - N ER0\nSANDNESS  S AE1 N D - N AH0 S\nSANDO  S AE1 N - D OW0\nSANDOM  S AE1 N - D AH0 M\nSANDON  S AE1 N - D AO2 N\nSANDOR  S AE1 N - D ER0\nSANDOS  S AE1 N - D OW0 Z\nSANDOS(2)  S AE1 N - D OW0 S\nSANDOSE  S AE1 N - D OW0 Z\nSANDOVAL  S AE1 N - D OW2 - V AH0 L\nSANDOW  S AE1 N - D OW0\nSANDOZ  S AE1 N - D OW0 Z\nSANDOZ'S  S AE1 N - D AH0 - Z IH0 Z\nSANDPAPER  S AE1 N D - P EY2 - P ER0\nSANDPOINT  S AE1 N D - P OY2 N T\nSANDQUIST  S AE1 N D - K W IH2 S T\nSANDRA  S AE1 N - D R AH0\nSANDRIDGE  S AE1 N - D R IH2 JH\nSANDRO  S AE1 N - D R OW0\nSANDROCK  S AE1 N - D R AA2 K\nSANDS  S AE1 N D Z\nSANDSTONE  S AE1 N D - S T OW2 N\nSANDSTONE(2)  S AE1 N - S T OW2 N\nSANDSTORM  S AE1 N D - S T AO2 R M\nSANDSTORMS  S AE1 N D - S T AO2 R M Z\nSANDSTROM  S AE1 N D - S T R AH0 M\nSANDT  S AE1 N T\nSANDTOWN  S AE1 N D - T AW2 N\nSANDTOWN(2)  S AE1 N - T AW2 N\nSANDUSKY  S AE0 N - D AH1 S - K IY0\nSANDVIG  S AE1 N D - V IH2 G\nSANDVIK  S AE1 N D - V IH0 K\nSANDWICH  S AE1 N D - W IH0 CH\nSANDWICH(2)  S AE1 N - W IH0 CH\nSANDWICH(3)  S AE1 M - W IH0 CH\nSANDWICHED  S AE1 N D - W IH2 CH T\nSANDWICHED(2)  S AE1 N - W IH2 CH T\nSANDWICHED(3)  S AE1 M - W IH2 CH T\nSANDWICHES  S AE1 N D - W IH0 - CH IH0 Z\nSANDWICHES(2)  S AE1 N - W IH0 - CH IH0 Z\nSANDWICHES(3)  S AE1 M - W IH0 - CH IH0 Z\nSANDWICK  S AE1 N D - W IH2 K\nSANDY  S AE1 N - D IY0\nSANDY'S  S AE1 N - D IY0 Z\nSANE  S EY1 N\nSANER  S EY1 - N ER0\nSANFILIPPO  S AE2 N - F IH0 - L IH1 - P OW0\nSANFORD  S AE1 N - F ER0 D\nSANFORD'S  S AE1 N - F ER0 D Z\nSANG  S AE1 NG\nSANG-GON  S AA1 NG - G AO1 N\nSANGER  S AE1 - NG ER0\nSANGIOVESE  S AE2 N - JH IY1 - OW0 - V IY2 S\nSANGSTER  S AE1 NG - S T ER0\nSANGUINE  S AE1 NG - G W IH0 N\nSANGUINETTI  S AA0 - NG IY0 - N EH1 - T IY0\nSANGYO  S AE1 N - JH Y OW0\nSANI  S AE1 - N IY0\nSANI(2)  S AE1 - N IH0\nSANITARY  S AE1 - N IH0 - T EH2 - R IY0\nSANITATION  S AE2 - N AH0 - T EY1 - SH AH0 N\nSANITATION(2)  S AE2 - N IH0 - T EY1 - SH AH0 N\nSANITIZE  S AE1 - N IH0 - T AY2 Z\nSANITIZED  S AE1 - N IH0 - T AY2 Z D\nSANITIZING  S AE1 - N AH0 - T AY2 - Z IH0 NG\nSANITY  S AE1 - N AH0 - T IY0\nSANJAY  S AE1 N - JH EY0\nSANJIV  S AA2 N - JH IY1 V\nSANJUAN  S AA0 - N Y UW0 - AA1 N\nSANK  S AE1 NG K\nSANKA  S AE1 NG - K AH0\nSANKEI  S AE1 NG - K IY0\nSANKER  S AE1 NG - K ER0\nSANKEY  S AE1 NG - K IY0\nSANKO  S AE1 NG - K OW0\nSANKS  S AE1 NG K S\nSANKYO  S AE1 NG - K Y OW0\nSANMARK  S AE1 N - M AA2 R K\nSANMARTIN  S AE1 N - M AA0 R - T IH0 N\nSANMIGUEL  S AA0 N - M IY0 - G EH1 L\nSANNA  S AE1 - N AH0\nSANNER  S AE1 - N ER0\nSANNES  S AE1 N Z\nSANO  S AA1 - N OW0\nSANOFI  S AH0 - N OW1 - F IY0\nSANRIO  S AE1 N - R IY0 - OW0\nSANS  S AE1 N Z\nSANSBURY  S AE1 N S - B EH0 - R IY0\nSANSEVERINO  S AA0 N - S EH0 - V ER0 - IY1 - N OW0\nSANSING  S AE1 N - S IH0 NG\nSANSKRIT  S AE1 N - S K R IH0 T\nSANSO  S AE1 N - S OW0\nSANSOM  S AE1 N - S AH0 M\nSANSON  S AE1 N - S AH0 N\nSANSONE  S AE1 N - S AH0 N\nSANSOUCIE  S AE1 N - S OW0 - K IY0\nSANSUI  S AE0 N - S UW1 - IY0\nSANSUI'S  S AE0 N - S UW1 - IY0 Z\nSANT  S AE1 N T\nSANTA  S AE1 N - T AH0\nSANTA'S  S AE1 N - T AH0\nSANTA'S(2)  S AE1 - N AH0\nSANTA(2)  S AE1 - N AH0\nSANTA-CROCE  S AE1 N - T AH0 - K R OW1 - CH IY0\nSANTA-CROCE(2)  S AE1 - N AH0 - K R OW1 - CH IY0\nSANTA-CRUZ  S AE1 N - T AH0 - K R UW1 Z\nSANTA-CRUZ(2)  S AE1 - N AH0 - K R UW1 Z\nSANTA-FE  S AE1 N - T AH0 - F EY1\nSANTA-FE'S  S AE1 N - T AH0 - F EY1 Z\nSANTA-FE'S(2)  S AE1 - N AH0 - F EY1 Z\nSANTA-FE(2)  S AE1 - N AH0 - F EY1\nSANTA-MARIA  S AE1 N - T AH0 - M ER0 - IY1 - AH0\nSANTA-MARIA(2)  S AE1 - N AH0 - M ER0 - IY1 - AH0\nSANTAGATA  S AA0 N - T AA0 - G AA1 - T AH0\nSANTALA  S AE0 N - T AA1 - L AH0\nSANTANA  S AE0 N - T AE1 - N AH0\nSANTANDER  S AE2 N - T AE1 N - D ER0\nSANTANGELO  S AA0 N - T AA0 NG - G EH1 - L OW0\nSANTANIELLO  S AA0 N - T AA0 - N IY0 - EH1 - L OW0\nSANTARELLI  S AA0 N - T AA0 - R EH1 - L IY0\nSANTARSIERO  S AA0 N - T AA0 R - S IH1 - R OW0\nSANTAS  S AE1 N - T AH0 S\nSANTAYANA  S AE0 N - T AY2 - AA1 - N AH0\nSANTE  S AE1 N - T AH0\nSANTELLA  S AA0 N - T EH1 - L AH0\nSANTELLI  S AA0 N - T EH1 - L IY0\nSANTER  S AE1 N - T ER0\nSANTERIA  S AE2 N - T EH1 - R IY0 - AH0\nSANTERRE  S AE0 N - T EH1 R\nSANTI  S AE1 N - T IY0\nSANTIAGO  S AE2 N - T IY0 - AA1 - G OW0\nSANTIESTEBAN  S AE1 N - T IY0 - S T IH0 - B AH0 N\nSANTILLAN  S AE2 N - T IH1 - L AH0 N\nSANTILLANES  S AE1 N - T IH0 - L EY2 N Z\nSANTILLI  S AA0 N - T IY1 - L IY0\nSANTILLO  S AE2 N - T IH1 - L OW0\nSANTIN  S AE1 N - T IH0 N\nSANTINI  S AE0 N - T IY1 - N IY0\nSANTINO  S AA0 N - T IY1 - N OW0\nSANTISTEVAN  S AA0 N - T IY0 - S T EY0 - V AA1 N\nSANTO  S AE1 N - T OW0\nSANTON  S AE1 N - T AH0 N\nSANTONE  S AA0 N - T OW1 - N IY0\nSANTONI  S AA0 N - T OW1 - N IY0\nSANTOPIETRO  S AA0 N - T OW0 - P IY1 - T R OW0\nSANTOR  S AE1 N - T ER0\nSANTORA  S AA0 N - T AO1 - R AH0\nSANTORE  S AA0 N - T AO1 - R IY0\nSANTORELLI  S AA0 N - T AO0 - R EH1 - L IY0\nSANTORO  S AE0 N - T AO1 - R OW0\nSANTORUM  S AE0 N - T AO1 - R AH0 M\nSANTORUM'S  S AE0 N - T AO1 - R AH0 M Z\nSANTOS  S AE1 N - T OW0 S\nSANTOSH  S AA1 N - T AA2 SH\nSANTOSUOSSO  S AA0 N - T OW0 - S W OW1 - S OW0\nSANTOW  S AE1 N - T OW0\nSANTOYO  S AA0 N - T OW1 - Y OW0\nSANTRY  S AE1 N - T R IY0\nSANTUCCI  S AA0 N - T UW1 - CH IY0\nSANTULLI  S AA0 N - T UW1 - L IY0\nSANTY  S AE1 N - T IY0\nSANVILLE  S AA1 N - V IH0 L\nSANWA  S AE1 - N W AH0\nSANWA'S  S AE1 - N W AH0 Z\nSANYO  S AA1 - N Y OW0\nSANZ  S AE1 N Z\nSANZO  S AE1 N - Z OW0\nSANZONE  S AA0 N - Z OW1 - N IY0\nSAO  S AW1\nSAONE  S EY1 - OW2 N\nSAOUMA  S AW2 - Y UW1 - M AH0\nSAP  S AE1 P\nSAPANSKI  S AH0 - P AE1 N S - K IY0\nSAPERSTEIN  S EY1 - P ER0 - S T AY0 N\nSAPERSTEIN(2)  S EY1 - P ER0 - S T IY0 N\nSAPHIRA  S AA0 - F IH1 - R AH0\nSAPIA  S AA1 - P IY0 - AH0\nSAPIEN  S AE1 - P IY0 N\nSAPIENS  S EY1 - P IY0 - AH0 N Z\nSAPIENZA  S AA0 - P IY1 N - Z AH0\nSAPIRO  S AH0 - P IH1 - R OW0\nSAPLING  S AE1 P - L IH0 NG\nSAPLINGS  S AE1 P - L IH0 NG Z\nSAPOA  S AH0 - P OW1 - AH0\nSAPONE  S AA0 - P OW1 - N IY0\nSAPONIFICATION  S AH0 - P AA2 - N AH0 - F AH0 - K EY1 - SH AH0 N\nSAPORITO  S AA0 - P AO0 - R IY1 - T OW0\nSAPP  S AE1 P\nSAPPED  S AE1 P T\nSAPPENFIELD  S AH0 - P EH1 N - F IY0 L D\nSAPPER  S AE1 - P ER0\nSAPPHIRE  S AE1 - F AY0 - ER0\nSAPPING  S AE1 - P IH0 NG\nSAPPINGTON  S AE1 - P IH0 NG - T AH0 N\nSAPPORO  S AH0 - P AO1 - R OW0\nSAPS  S AE1 P S\nSAPUTO  S AA0 - P UW1 - T OW0\nSAR  S AA1 R\nSARA  S EH1 - R AH0\nSARA'S  S EH1 - R AH0 Z\nSARABIA  S ER0 - EY1 - B IY0 - AH0\nSARACCO  S AA0 - R AA1 - K OW0\nSARACENI  S AA0 - R AA0 - CH EH1 - N IY0\nSARACENO  S AA0 - R AA0 - CH EH1 - N OW0\nSARACENS  S EH1 - R AH0 - S AH0 N Z\nSARACINO  S AA0 - R AA0 - CH IY1 - N OW0\nSARAFIAN  S ER0 - EY1 - F IY0 - AH0 N\nSARAFIN  S AE1 - R AH0 - F IH0 N\nSARAFINA  S AE2 - R AH0 - F IY1 - N AH0\nSARAGE  S AE1 - R AH0 JH\nSARAGE'S  S AE1 - R AH0 - JH IH0 Z\nSARAH  S EH1 - R AH0\nSARAH'S  S EH1 - R AH0 Z\nSARAJEVAN  S AA2 - R AH0 - Y EY1 - V AH0 N\nSARAJEVAN'S  S AA2 - R AH0 - Y EY1 - V AH0 N Z\nSARAJEVANS  S AA2 - R AH0 - Y EY1 - V AH0 N Z\nSARAJEVO  S AA2 - R AH0 - Y EY1 - V OW0\nSARAJEVO'S  S AA2 - R AH0 - Y EY1 - V OW0 Z\nSARAN  S ER0 - AE1 N\nSARANDON  S EH1 - R AH0 N - D IH0 N\nSARANDON(2)  S EH2 - R AE1 N - D IH0 N\nSARANT  S AE1 - R AH0 N T\nSARASIN  S EH1 - R IH0 - S IH0 N\nSARASOTA  S EH2 - R AH0 - S OW1 - T AH0\nSARATOGA  S EH2 - R AH0 - T OW1 - G AH0\nSARATOV  S EH1 - R AH0 - T AO2 V\nSARATOV(2)  S EH1 - R AH0 - T AO2 F\nSARAVIA  S ER0 - EY1 - V IY0 - AH0\nSARAWAK  S EH1 - R AH0 - W AA0 K\nSARAZEN  S EH1 - R AH0 - Z AH0 N\nSARAZIN  S AA0 - R AA0 - Z IY1 N\nSARBANE  S AA1 R - B EY2 N\nSARBANES  S AA1 R - B EY2 N Z\nSARBER  S AA1 R - B ER0\nSARCASM  S AA1 R - K AE2 - Z AH0 M\nSARCASTIC  S AA0 R - K AE1 - S T IH0 K\nSARCASTICALLY  S AA0 R - K AE1 - S T IH0 K - L IY0\nSARCHET  S AA0 R - SH EH1 T\nSARCOMA  S AA0 R - K OW1 - M ER0\nSARCOPHAGUS  S AA0 R - K AA1 - F AH0 - G AH0 S\nSARDAS  S AA1 R - D AH0 S\nSARDELLA  S AA2 R - D EH1 - L AH0\nSARDINA  S AA0 R - D IY1 - N AH0\nSARDINAS  S AA1 R - D IH0 - N AH0 Z\nSARDINE  S AA0 R - D IY1 N\nSARDINES  S AA0 R - D IY1 N Z\nSARDINHA  S AA2 R - D IH1 N - HH AH0\nSARDINIA  S AA0 R - D IY1 - N IY0 - AH0\nSARDO  S AA1 R - D OW0\nSARDONIC  S AA0 R - D AA1 - N IH0 K\nSARDONICALLY  S AA0 R - D AA1 - N IH0 - K AH0 - L IY0\nSARDONICALLY(2)  S AA0 R - D AA1 - N IH0 K - L IY0\nSARE  S EH1 R\nSAREJEVO  S AA2 - R AH0 - Y EY1 - V OW0\nSAREJEVO'S  S AA2 - R AH0 - Y EY1 - V OW0 Z\nSARENE  S ER0 - IY1 N\nSARETTE  S ER0 - EH1 T\nSARFF  S AA1 R F\nSARGASSO  S AA0 R - G AE1 - S OW0\nSARGE  S AA1 R JH\nSARGEANT  S AA1 R - JH AH0 N T\nSARGEN  S AA1 R - G AH0 N\nSARGENT  S AA1 R - JH AH0 N T\nSARGIS  S AA1 R - G IH0 S\nSARI  S AA1 - R IY0\nSARI'S  S AA1 - R IY0 Z\nSARICH  S AE1 - R IH0 K\nSARIN  S AA0 - R IH0 N\nSARINE  S AA0 - R IY1 - N IY0\nSARIS  S AA1 - R IY0 Z\nSARISI  S AH0 - R IY1 - S IY0\nSARK  S AA1 R K\nSARKA  S AA1 R - K AH0\nSARKAR  S AA1 R - K AA2 R\nSARKIS  S AA1 R - K IH0 S\nSARKISIAN  S AA0 R - K IH1 - ZH IH0 N\nSARKISSIAN  S AA0 R - K IH1 S - ZH IH0 N\nSARLES  S AA1 R L Z\nSARLI  S AA1 R - L IY0\nSARLO  S AA1 R - L OW0\nSARLOS  S AA1 R - L OW0 S\nSARMATIAN  S AA0 R - M EY1 - SH AH0 N\nSARMENTO  S AA0 R - M EH1 N - T OW0\nSARMIENTO  S AA0 R - M IY1 N - T OW0\nSARNA  S AA1 R - N AH0\nSARNEY  S AA1 R - N IY0\nSARNEY'S  S AA1 R - N IY0 Z\nSARNI  S AA1 R - N IY0\nSARNO  S AA1 R - N OW0\nSARNOFF  S AA1 R - N AO0 F\nSARNOWSKI  S ER0 - N AO1 F S - K IY0\nSAROFIM  S EH2 - R AH0 - F IY1 M\nSAROKIN  S EH1 - R AH0 - K IH0 N\nSARONG  S ER0 - AO1 NG\nSARONGS  S ER0 - AO1 NG Z\nSAROS  S AA1 - R OW0 S\nSARRA  S AA1 - R AH0\nSARRATT  S ER0 - AE1 T\nSARRAZIN  S AA1 - R AH0 - Z IH0 N\nSARRETT  S AE1 - R IH0 T\nSARRIS  S AE1 - R IH0 S\nSARRO  S AA1 - R OW0\nSARS  S AA1 R Z\nSARSFIELD  S AA1 R S - F IY0 L D\nSARTAIN  S AA0 R - T EY1 N\nSARTI  S AA1 R - T IY0\nSARTIN  S AA1 R - T IH0 N\nSARTOR  S AA1 R - T ER0\nSARTORI  S AA0 R - T AO1 - R IY0\nSARTORIAL  S AA0 R - T AO1 - R IY0 - AH0 L\nSARTORIUS  S AA0 R - T AO1 - R IY0 - IH0 S\nSARTRAIN  S AA1 R - T R EY2 N\nSARTRE  S AA1 R - T R AH0\nSARTWELL  S AA1 R T - W EH2 L\nSARUM  S AE1 - R AH0 M\nSARVER  S AA1 R - V ER0\nSARVIS  S AA1 R - V IH0 S\nSAS  S AE1 S\nSASAKI  S AA0 - S AA1 - K IY0\nSASAYAMA  S AE2 - S AH0 - Y AA1 - M AH0\nSASEK  S AE1 - S IH0 K\nSASH  S AE1 SH\nSASHA  S AE1 - SH AH0\nSASHES  S AE1 - SH IH0 Z\nSASKATCHEWAN  S AE0 - S K AE1 - CH AH0 - W AO2 N\nSASKATOON  S AE1 S - K AH0 - T UW2 N\nSASLOW  S AE1 - S L OW0\nSASNETT  S AE1 S - N IH0 T\nSASS  S AE1 S\nSASSAFRAS  S AE1 - S AH0 - F R AE2 S\nSASSAFRAS'S  S AE1 - S AH0 - F R AE2 - S AH0 Z\nSASSAFRAS'S(2)  S AE1 - S AH0 - F R AE2 - S IH0 Z\nSASSAMAN  S AE1 - S AH0 - M AH0 N\nSASSANO  S AA0 - S AA1 - N OW0\nSASSE  S AE1 S\nSASSEEN  S AE1 - S IY0 N\nSASSER  S AE1 - S ER0\nSASSER'S  S AE1 - S ER0 Z\nSASSI  S AE1 - S IY0\nSASSMAN  S AE1 S - M AH0 N\nSASSNET  S AE1 S - N EH2 T\nSASSNET'S  S AE1 S - N EH2 T S\nSASSNETS  S AE1 S - N EH2 T S\nSASSO  S AE1 - S OW0\nSASSON  S AE1 - S AH0 N\nSASSONE  S AA0 - S OW1 - N IY0\nSASSOON  S AH0 - S UW1 N\nSASSULO  S AH0 - S UW1 - L OW0\nSASSY  S AE1 - S IY0\nSASSY'S  S AE1 - S IY0 Z\nSAT  S AE1 T\nSATAGAJ  S AE1 - T AH0 - G AY2\nSATAN  S EY1 - T AH0 N\nSATANIC  S AH0 - T AE1 - N IH0 K\nSATANISM  S EY1 - T AH0 - N IH2 - Z AH0 M\nSATANIST  S EY1 - T AH0 - N IH0 S T\nSATCHELL  S AE1 - CH AH0 L\nSATCHER  S AE1 - CH ER0\nSATE  S EY1 T\nSATED  S EY1 - T IH0 D\nSATELLITE  S AE1 - T AH0 - L AY2 T\nSATELLITE'S  S AE1 - T AH0 - L AY2 T S\nSATELLITES  S AE1 - T AH0 - L AY2 T S\nSATER  S AE1 - T ER0\nSATES  S EY1 T S\nSATHER  S AE1 - DH ER0\nSATHRE  S AE1 - TH ER0\nSATHYAVAGISWARAN  S AE0 - TH Y AH0 - V AA2 - G IH0 - S W AA2 - R AH0 N\nSATIN  S AE1 - T AH0 N\nSATIRE  S AE1 - T AY2 - ER0\nSATIRES  S AE1 - T AY2 - ER0 Z\nSATIRIC  S AH0 - T IH1 - R IH0 K\nSATIRICAL  S AH0 - T IH1 - R AH0 - K AH0 L\nSATIRICAL(2)  S AH0 - T IH1 - R IH0 - K AH0 L\nSATIRIST  S AE1 - T ER0 - AH0 S T\nSATIRISTS  S AE1 - T ER0 - AH0 S T S\nSATIRISTS(2)  S AE1 - T ER0 - AH0 S S\nSATIRISTS(3)  S AE1 - T ER0 - AH0 S\nSATIRIZE  S AE1 - T ER0 - AY2 Z\nSATIRIZES  S AE1 - T ER0 - AY2 - Z IH0 Z\nSATIRIZING  S AE1 - T ER0 - AY2 - Z IH0 NG\nSATISFACTION  S AE2 - T AH0 S - F AE1 K - SH AH0 N\nSATISFACTION(2)  S AE2 - T IH0 S - F AE1 K - SH AH0 N\nSATISFACTIONS  S AE2 - T AH0 S - F AE1 K - SH AH0 N Z\nSATISFACTORILY  S AE2 - T IH0 S - F AE1 K - T R AH0 - L IY0\nSATISFACTORY  S AE2 - T AH0 S - F AE1 K - T R IY0\nSATISFACTORY(2)  S AE2 - T IH0 S - F AE1 K - T ER0 - IY0\nSATISFIED  S AE1 - T AH0 S - F AY2 D\nSATISFIED(2)  S AE1 - T IH0 S - F AY2 D\nSATISFIES  S AE1 - T IH0 S - F AY2 Z\nSATISFY  S AE1 - T AH0 S - F AY2\nSATISFY(2)  S AE1 - T IH0 S - F AY2\nSATISFYING  S AE1 - T IH0 S - F AY2 - IH0 NG\nSATLOFF  S AE1 T - L AO2 F\nSATO  S AA1 - T OW0\nSATOH  S AA1 - T OW0\nSATOSHI  S AA0 - T OW1 - SH IY0\nSATRE  S EY1 - T ER0\nSATRIANI  S AE2 - T R IY0 - AA1 - N IY0\nSATTER  S AE1 - T ER0\nSATTERFIELD  S AE1 - T ER0 - F IY1 L D\nSATTERLEE  S AE1 - T ER0 - L IY1\nSATTERLY  S AE1 - T ER0 - L IY0\nSATTERWHITE  S AE1 - T ER0 - W AY1 T\nSATTLER  S AE1 T - L ER0\nSATURATE  S AE1 - CH ER0 - EY2 T\nSATURATED  S AE1 - CH ER0 - EY2 - T AH0 D\nSATURATED(2)  S AE1 - CH ER0 - EY2 - T IH0 D\nSATURATING  S AE1 - CH ER0 - EY2 - T IH0 NG\nSATURATION  S AE2 - CH ER0 - EY1 - SH AH0 N\nSATURDAY  S AE1 - T ER0 - D IY0\nSATURDAY'S  S AE1 - T ER0 - D IY0 Z\nSATURDAY'S(2)  S AE1 - T ER0 - D EY0 Z\nSATURDAY(2)  S AE1 - T IH2 - D EY2\nSATURDAYS  S AE1 - T ER0 - D IY0 Z\nSATURDAYS(2)  S AE1 - T ER0 - D EY0 Z\nSATURN  S AE1 - T ER0 N\nSATURN'S  S AE1 - T ER0 N Z\nSATURNS  S AE1 - T ER0 N Z\nSATYA  S AA1 - T Y AH0\nSATYANDRA  S AA2 - T Y AA1 N - D R AH0\nSATZ  S AE1 T S\nSAUBER  S AO1 - B ER0\nSAUCE  S AO1 S\nSAUCEDA  S AW0 - S EY1 - D AH0\nSAUCEDO  S AW0 - S EY1 - D OW0\nSAUCEPAN  S AO1 S - P AE2 N\nSAUCER  S AO1 - S ER0\nSAUCERS  S AO1 - S ER0 Z\nSAUCES  S AO1 - S AH0 Z\nSAUCES(2)  S AO1 - S IH0 Z\nSAUCIER  S AO1 - S IY0 - ER0\nSAUCY  S AO1 - S IY0\nSAUD  S AO1 D\nSAUDER  S AO1 - D ER0\nSAUDI  S AO1 - D IY0\nSAUDI(2)  S AW1 - D IY0\nSAUDIA  S AO1 - D IY0 - AH0\nSAUDIA(2)  S AW1 - D IY0 - AH0\nSAUDIS  S AO1 - D IY0 Z\nSAUDIS'  S AO1 - D IY0 Z\nSAUDIS'(2)  S AW1 - D IY0 Z\nSAUDIS(2)  S AW1 - D IY0 Z\nSAUER  S AW1 - ER0\nSAUERKRAUT  S AW1 - ER0 - K R AW2 T\nSAUERS  S AW1 - ER0 Z\nSAUERTEIG  S AW1 - ER0 - T EY2 G\nSAUERWEIN  S AW1 - ER0 - W AY0 N\nSAUEY  S AO1 - IY0\nSAUGERTIES  S AO1 - G ER0 - T IY0 Z\nSAUK  S AO1 K\nSAUL  S AO1 L\nSAULNIER  S AW1 L - N IY0 - ER0\nSAULS  S AO1 L Z\nSAULSBERRY  S AO1 L S - B EH2 - R IY0\nSAULSBURY  S AO1 L S - B EH0 - R IY0\nSAULT  S AO1 L T\nSAULTER  S AO1 L - T ER0\nSAULTERS  S AW1 L - T ER0 Z\nSAUM  S AO1 M\nSAUNA  S AO1 - N AH0\nSAUNAS  S AO1 - N AH0 Z\nSAUNDERS  S AO1 N - D ER0 Z\nSAUNDERS'  S AO1 N - D ER0 Z\nSAUNDERS'S  S AO1 N - D ER0 - Z IH0 Z\nSAUNDERSON  S AO1 N - D ER0 - S AH0 N\nSAUNDRA  S AO1 N - D R AH0\nSAUNDRA'S  S AO1 N - D R AH0 Z\nSAUNIER  S AO1 - N IY0 - ER0\nSAUNTER  S AO1 N - T ER0\nSAUR  S AO1 R\nSAURER  S AW1 - ER0 R\nSAURO  S AO1 - R OW0\nSAUS  S AO1 Z\nSAUSAGE  S AO1 - S AH0 JH\nSAUSAGE(2)  S AO1 - S IH0 JH\nSAUSAGES  S AO1 - S IH0 - JH IH0 Z\nSAUSALITO  S AO2 - S AH0 - L IY1 - T OW0\nSAUSE  S AO1 Z\nSAUSEDA  S AW0 - S EY1 - D AH0\nSAUSER  S AW1 - S ER0\nSAUSSER  S AO1 - S ER0\nSAUTE  S AO0 - T EY1\nSAUTEED  S AO0 - T EY1 D\nSAUTER  S AO0 - T EY1 - ER0\nSAUTERNE  S OW0 - T ER1 N\nSAUTERNES  S OW0 - T ER1 N Z\nSAUTTER  S AO1 - T ER0\nSAUVAGE  S AO1 - V IH0 JH\nSAUVAGEAU  S OW1 - V AH0 - ZH OW0\nSAUVE  S AO1 V\nSAUVIGNON  S AO2 - V IH1 N - Y AA0 N\nSAVA  S AA1 - V AH0\nSAVAGE  S AE1 - V AH0 JH\nSAVAGE(2)  S AE1 - V IH0 JH\nSAVAGED  S AE1 - V IH0 JH D\nSAVAGELY  S AE1 - V IH0 JH - L IY0\nSAVAGERY  S AE1 - V IH0 JH - EH2 - R IY0\nSAVAGES  S AE1 - V AH0 - JH AH0 Z\nSAVAGES(2)  S AE1 - V IH0 - JH IH0 Z\nSAVAGING  S AE1 - V IH0 - JH IH0 NG\nSAVAIKO  S AH0 - V EY1 - K OW0\nSAVALA  S AA0 - V AA1 - L AH0\nSAVALAS  S AH0 - V AA1 - L AH0 S\nSAVANNA  S AH0 - V AE1 - N AH0\nSAVANNAH  S AH0 - V AE1 - N AH0\nSAVANNAS  S AH0 - V AE1 - N AH0 Z\nSAVANT  S AH0 - V AA1 N T\nSAVANTS  S AE1 - V AH0 N T S\nSAVARD  S AE1 - V ER0 D\nSAVARESE  S AA0 - V AA0 - R EY1 - Z IY0\nSAVARINO  S AA0 - V AA0 - R IY1 - N OW0\nSAVARY  S AE1 - V EH0 - R IY0\nSAVAS  S AA1 - V AA0 Z\nSAVASTA  S AH0 - V AE1 - S T AH0\nSAVASTANO  S AA0 - V AA0 - S T AA1 - N OW0\nSAVE  S EY1 V\nSAVE'S  S EY1 V Z\nSAVED  S EY1 V D\nSAVEDRA  S AH0 - V EH1 - D R AH0\nSAVEL  S AA0 - V EH1 L\nSAVELL  S AA0 - V EY1 L\nSAVELY  S EY1 V - L IY0\nSAVER  S EY1 - V ER0\nSAVERS  S EY1 - V ER0 Z\nSAVERY  S EY1 - V ER0 - IY0\nSAVES  S EY1 V Z\nSAVIANO  S AA0 - V IY0 - AA1 - N OW0\nSAVICH  S AE1 - V IH0 CH\nSAVICKAS  S AE1 - V IH0 - K AH0 Z\nSAVIDGE  S AE1 - V IH0 JH\nSAVIER  S EY1 - V Y ER0\nSAVIKAS  S AH0 - V IY1 - K AH0 S\nSAVILL  S AA0 - V IY1 L\nSAVILLE  S AA1 - V IH0 L\nSAVIMBI  S AH0 - V IH1 M - B IY0\nSAVIN  S AE1 - V IH0 N\nSAVIN'S  S AE1 - V IH0 N Z\nSAVINA  S AH0 - V IY1 - N AH0\nSAVING  S EY1 - V IH0 NG\nSAVINGS  S EY1 - V IH0 NG Z\nSAVINGS'  S EY1 - V IH0 NG Z\nSAVINGS'S  S EY1 - V IH0 NG Z\nSAVINGS'S(2)  S EY1 - V IH0 NG - Z IH0 Z\nSAVINI  S AA0 - V IY1 - N IY0\nSAVINO  S AA0 - V IY1 - N OW0\nSAVIO  S AA1 - V IY0 - OW0\nSAVION  S AE1 - V IY0 - AO0 N\nSAVION(2)  S AE1 - V Y AO0 N\nSAVIOR  S EY1 - V Y ER0\nSAVIOR'S  S EY1 - V Y ER0 Z\nSAVIORS  S EY1 - V Y ER0 Z\nSAVIR  S EY1 - V ER0\nSAVIR(2)  S AH0 - V IY1 R\nSAVITCH  S AE1 - V IH0 CH\nSAVITSKY  S AH0 - V IH1 T S - K IY0\nSAVITT  S AH0 - V IH1 T\nSAVITZ  S AE1 - V IH0 T S\nSAVKO  S AE1 V - K OW0\nSAVO  S AA1 - V OW0\nSAVOCA  S AA0 - V OW1 - K AH0\nSAVOIA  S AA0 - V OW1 - Y AH0\nSAVOIE  S AA1 V - W AA0\nSAVON  S EY1 - V AO0 N\nSAVONA  S AA0 - V OW1 - N AH0\nSAVOR  S EY1 - V ER0\nSAVORED  S EY1 - V ER0 D\nSAVORING  S EY1 - V ER0 - IH0 NG\nSAVORS  S EY1 - V ER0 Z\nSAVORY  S EY1 - V ER0 - IY0\nSAVOY  S AH0 - V OY1\nSAVR  S EY1 - V ER0\nSAVVIEST  S AE1 - V IY0 - IH0 S T\nSAVVY  S AE1 - V IY0\nSAW  S AO1\nSAWA  S AO1 - W AH0\nSAWALL  S AO1 - W AO0 L\nSAWASDEE  S AH0 - W AA1 Z - D IY0\nSAWATZKY  S AH0 - W AA1 T S - K IY0\nSAWAYA  S AO0 - W AA1 - Y AH0\nSAWCHUK  S AO1 - CH AH0 K\nSAWDEY  S AO1 - D IY0\nSAWDON  S AO1 - D AH0 N\nSAWDUST  S AO1 - D AH2 S T\nSAWDY  S AO1 - D IY0\nSAWED  S AO1 D\nSAWHILL  S AO1 - HH IH2 L\nSAWICKI  S AO0 - IH1 T - S K IY0\nSAWICZ  S AW1 - IH0 T S\nSAWIN  S AO1 - IY0 N\nSAWING  S AO1 - IH0 NG\nSAWKA  S AO1 - K AH0\nSAWMILL  S AO1 - M IH2 L\nSAWMILLS  S AO1 - M IH2 L Z\nSAWS  S AO1 Z\nSAWSHANK  S AO1 - SH AE2 N K\nSAWTELL  S AO1 - T EH2 L\nSAWTELLE  S AO2 - T EH1 L\nSAWYER  S AO1 - Y ER0\nSAWYER'S  S AO1 - Y ER0 Z\nSAWYER(2)  S OY1 - ER0\nSAWYERS  S AO1 - Y ER0 Z\nSAX  S AE1 K S\nSAXBY  S AE1 K S - B IY0\nSAXE  S AE1 K S\nSAXENA  S AE1 K - S IH0 - N AH0\nSAXER  S AE1 K - S ER0\nSAXMAN  S AE1 K S - M AH0 N\nSAXON  S AE1 K - S AH0 N\nSAXON'S  S AE1 K - S AH0 N Z\nSAXONA  S AE1 K - S AH0 - N AH0\nSAXONS  S AE1 K - S AH0 N Z\nSAXONY  S AE1 K - S AH0 - N IY0\nSAXOPHONE  S AE1 K - S AH0 - F OW2 N\nSAXOPHONES  S AE1 K - S AH0 - F OW2 N Z\nSAXOPHONIST  S AE1 K - S AH0 - F OW2 - N IH0 S T\nSAXTON  S AE1 K - S T AH0 N\nSAY  S EY1\nSAYAD  S AY1 - AE0 D\nSAYAD'S  S AY1 - AE0 D Z\nSAYBROOK  S EY1 - B R UH2 K\nSAYE  S EY1\nSAYED  S AA2 - Y EH1 D\nSAYED(2)  S EY2 - Y IH1 D\nSAYED(3)  S EY1 D\nSAYEGH  S EY1 - IH0 G\nSAYER  S EY1 - ER0\nSAYERS  S EY1 - ER0 Z\nSAYIN'  S EY1 - IH0 N\nSAYING  S EY1 - IH0 NG\nSAYINGS  S EY1 - IH0 NG Z\nSAYITO  S AY0 - IY1 - T OW0\nSAYLE  S EY1 L\nSAYLER  S EY1 - L ER0\nSAYLES  S EY1 L Z\nSAYLOR  S EY1 - L ER0\nSAYLORS  S EY1 - L ER0 Z\nSAYRE  S EH1 R\nSAYRES  S EH1 R Z\nSAYS  S EH1 Z\nSAYS(2)  S IH1 Z\nSAYYID  S AY1 - IH0 D\nSAZAMA  S AA0 - Z AA1 - M AH0\nSBARRO  S B AA1 - R OW0\nSBF  EH1 S - B IY1 - EH1 F\nSCAB  S K AE1 B\nSCABBARD  S K AE1 - B ER0 D\nSCABS  S K AE1 B Z\nSCACCIA  S K AA1 - CH AH0\nSCAD  S K AE1 D\nSCADDEN  S K AE1 - D AH0 N\nSCADS  S K AE1 D Z\nSCADUTO  S K AA0 - D UW1 - T OW0\nSCAFF  S K AE1 F\nSCAFFIDI  S K AA0 - F IY1 - D IY0\nSCAFFOLD  S K AE1 - F AH0 L D\nSCAFFOLDING  S K AE1 - F AH0 L - D IH0 NG\nSCAFFOLDS  S K AE1 - F AH0 L D Z\nSCAFIDI  S K AA0 - F IY1 - D IY0\nSCAGGS  S K AE1 G Z\nSCAGLIONE  S K AE2 G - L IY0 - OW1 - N IY0\nSCAGS  S K AE1 G Z\nSCAHILL  S K EY1 - HH IH2 L\nSCAIFE  S K EY1 F\nSCALA  S K AA1 - L AH0\nSCALAMANDRE  S K AA1 - L AH0 - M AA2 N - D ER0\nSCALAMANDRE(2)  S K AE1 - L AH0 - M AE2 N - D ER0\nSCALAR  S K EY1 - L ER0\nSCALD  S K AO1 L D\nSCALDED  S K AO1 L - D IH0 D\nSCALDING  S K AO1 L - D IH0 NG\nSCALDS  S K AO1 L D Z\nSCALE  S K EY1 L\nSCALEATRON  S K EY1 - L IY0 - AH0 - T R AO0 N\nSCALED  S K EY1 L D\nSCALERA  S K AA0 - L EH1 - R AH0\nSCALES  S K EY1 L Z\nSCALESE  S K AA0 - L EY1 - Z IY0\nSCALF  S K AE1 L F\nSCALFARO  S K AE2 L - F AA1 - R OW0\nSCALI  S K AA1 - L IY0\nSCALI(2)  S K EY1 - L IY0\nSCALIA  S K AA1 - L IY0 - AH0\nSCALIA'S  S K AA1 - L IY0 - AH0 Z\nSCALIA'S(2)  S K AA1 - L Y AH0 Z\nSCALIA(2)  S K AA1 - L Y AH0\nSCALING  S K EY1 - L IH0 NG\nSCALISE  S K AA1 - L AY0 Z\nSCALISI  S K AA0 - L IY1 - S IY0\nSCALLAN  S K AE1 - L AH0 N\nSCALLION  S K AE1 - L Y AH0 N\nSCALLIONS  S K AE1 - L Y AH0 N Z\nSCALLON  S K AE1 - L AH0 N\nSCALLOP  S K AE1 - L AH0 P\nSCALLOPED  S K AA1 - L AH0 P T\nSCALLOPS  S K AE1 - L AH0 P S\nSCALLY  S K AE1 - L IY0\nSCALP  S K AE1 L P\nSCALPED  S K AE1 L P T\nSCALPEL  S K AE1 L - P AH0 L\nSCALPELS  S K AE1 L - P AH0 L Z\nSCALPER  S K AE1 L - P ER0\nSCALPERS  S K AE1 L - P ER0 Z\nSCALPING  S K AE1 L - P IH0 NG\nSCALPS  S K AE1 L P S\nSCALZI  S K AA1 L - Z IY0\nSCALZITTI  S K AA0 L - Z IY1 - T IY0\nSCALZO  S K AA1 L - Z OW0\nSCAM  S K AE1 M\nSCAMMED  S K AE1 M D\nSCAMMELL  S K AE1 - M AH0 L\nSCAMMER  S K AE1 - M ER0\nSCAMMERS  S K AE1 - M ER0 Z\nSCAMMON  S K AE1 - M AH0 N\nSCAMPER  S K AE1 M - P ER0\nSCAMPERED  S K AE1 M - P ER0 D\nSCAMPERING  S K AE1 M - P ER0 - IH0 NG\nSCAMS  S K AE1 M Z\nSCAN  S K AE1 N\nSCANDAL  S K AE1 N - D AH0 L\nSCANDAL'S  S K AE1 N - D AH0 L Z\nSCANDALIZE  S K AE1 N - D AH0 - L AY2 Z\nSCANDALIZED  S K AE1 N - D AH0 - L AY2 Z D\nSCANDALOUS  S K AE1 N - D AH0 - L AH0 S\nSCANDALS  S K AE1 N - D AH0 L Z\nSCANDIA  S K AE1 N - D IY0 - AH0\nSCANDINAVIA  S K AE2 N - D IH0 - N EY1 - V IY0 - AH0\nSCANDINAVIA'S  S K AE2 N - D IH0 - N EY1 - V IY0 - AH0 Z\nSCANDINAVIAN  S K AE2 N - D IH0 - N EY1 - V IY0 - AH0 N\nSCANDINAVIANS  S K AE2 N - D IH0 - N EY1 - V IY0 - AH0 N Z\nSCANIA  S K AA1 - N IY0 - AH0\nSCANLAN  S K AE1 N - L AH0 N\nSCANLAND  S K AE1 N - L AH0 N D\nSCANLIN  S K AE1 N - L IH0 N\nSCANLON  S K AE1 N - L AH0 N\nSCANLON'S  S K AE1 N - L AH0 N Z\nSCANNED  S K AE1 N D\nSCANNELL  S K AE1 - N AH0 L\nSCANNER  S K AE1 - N ER0\nSCANNERS  S K AE1 - N ER0 Z\nSCANNING  S K AE1 - N IH0 NG\nSCANS  S K AE1 N Z\nSCANT  S K AE1 N T\nSCANTILY  S K AE1 N - T AH0 - L IY0\nSCANTINESS  S K AE1 N - T IY0 - N AH0 S\nSCANTLIN  S K AE1 N T - L IH0 N\nSCANTY  S K AE1 N - T IY0\nSCAPA  S K AA1 - P AH0\nSCAPE  S K EY1 P\nSCAPEGOAT  S K EY1 P - G OW2 T\nSCAPEGOATED  S K EY1 P - G OW2 - T IH0 D\nSCAPEGOATING  S K EY1 P - G OW2 - T IH0 NG\nSCAPEGOATS  S K EY1 P - G OW2 T S\nSCAPULA  S K AE1 - P Y AH0 - L AH0\nSCAR  S K AA1 R\nSCARAMOUCH  S K AE1 - R AH0 - M AW2 CH\nSCARANO  S K AA0 - R AA1 - N OW0\nSCARBERRY  S K AA1 R - B EH2 - R IY0\nSCARBOROUGH  S K AA1 R - B ER2 - OW0\nSCARBRO  S K AA1 R - B R OW0\nSCARBROUGH  S K AA1 R - B R AW0\nSCARCE  S K EH1 R S\nSCARCELLA  S K AA2 R - S EH1 - L AH0\nSCARCELY  S K EH1 R S - L IY0\nSCARCER  S K EH1 R - S ER0\nSCARCITY  S K EH1 R - S IH0 - T IY0\nSCARDINA  S K AA0 R - D IY1 - N AH0\nSCARDINO  S K AA0 R - D IY1 - N OW0\nSCARE  S K EH1 R\nSCARECROW  S K AE1 R - K R OW0\nSCARED  S K EH1 R D\nSCARES  S K EH1 R Z\nSCARF  S K AA1 R F\nSCARFACE  S K AA1 R - F EY2 S\nSCARFF  S K AA1 R F\nSCARFO  S K AA1 R - F OW0\nSCARFS  S K AA1 R F S\nSCARGILL  S K AA1 R - G IH2 L\nSCARIER  S K EH1 - R IY0 - ER0\nSCARIEST  S K EH1 - R IY0 - AH0 S T\nSCARING  S K EH1 - R IH0 NG\nSCARLATA  S K AA0 R - L AA1 - T AH0\nSCARLET  S K AA1 R - L AH0 T\nSCARLETT  S K AA1 R - L IH0 T\nSCAROLA  S K AA0 - R OW1 - L AH0\nSCARP  S K AA1 R P\nSCARPA  S K AA1 R - P AH0\nSCARPATI  S K AA0 R - P AA1 - T IY0\nSCARPELLI  S K AA0 R - P EH1 - L IY0\nSCARPELLO  S K AA2 R - P EH1 - L OW0\nSCARPINATTO  S K AA2 R - P IH0 - N AA1 - T OW0\nSCARPINO  S K AA0 R - P IY1 - N OW0\nSCARPONE  S K AA0 R - P OW1 - N IY0\nSCARPULLA  S K AA2 R - P UH1 - L AH0\nSCARRED  S K AA1 R D\nSCARRING  S K AA1 - R IH0 NG\nSCARRY  S K AE1 - R IY0\nSCARS  S K AA1 R Z\nSCARSDALE  S K AA1 R Z - D EY2 L\nSCARSELLA  S K AA2 R - S EH1 - L AH0\nSCARVES  S K AA1 R V Z\nSCARY  S K EH1 - R IY0\nSCAT  S K AE1 T\nSCATENA  S K AA0 - T EH1 - N AH0\nSCATES  S K EY1 T S\nSCATHING  S K EY1 - DH IH0 NG\nSCATTER  S K AE1 - T ER0\nSCATTERED  S K AE1 - T ER0 D\nSCATTERGOOD  S K AE1 - T ER0 - G UH2 D\nSCATTERGORIES  S K AE1 - T ER0 - G AO2 - R IY0 Z\nSCATTERGORY  S K AE1 - T ER0 - G AO2 - R IY0\nSCATTERING  S K AE1 - T ER0 - IH0 NG\nSCATTERSHOT  S K AE1 - T ER0 - SH AA2 T\nSCATURRO  S K AA0 - T UH1 - R OW0\nSCAVENGE  S K AE1 - V AH0 N JH\nSCAVENGER  S K AE1 - V AH0 N - JH ER0\nSCAVENGERS  S K AE1 - V AH0 N - JH ER0 Z\nSCAVENGING  S K AE1 - V AH0 N - JH IH0 NG\nSCAVO  S K AA1 - V OW0\nSCAVONE  S K AH0 - V OW1 N\nSCAVUZZO  S K AA0 - V UW1 - Z OW0\nSCEARCE  S ER1 S\nSCENARIO  S IH0 - N EH1 - R IY0 - OW0\nSCENARIOS  S IH0 - N EH1 - R IY0 - OW0 Z\nSCENE  S IY1 N\nSCENERIES  S IY1 - N ER0 - IY0 Z\nSCENERY  S IY1 - N ER0 - IY0\nSCENES  S IY1 N Z\nSCENIC  S IY1 - N IH0 K\nSCENT  S EH1 N T\nSCENTED  S EH1 N - T IH0 D\nSCENTS  S EH1 N T S\nSCEPTRE  S EH1 P - T ER0\nSCEPTRE(2)  S K EH1 P - T ER0\nSCERBO  S K EH1 R - B OW0\nSCHAAB  SH AA1 B\nSCHAACK  SH AA1 K\nSCHAAD  SH AA1 D\nSCHAADT  SH AA1 T\nSCHAAF  SH AA1 F\nSCHAAFSMA  SH AA1 F S - M AH0\nSCHAAL  SH AA1 L\nSCHAAP  SH AA1 P\nSCHAAR  SH AA1 R\nSCHAB  SH AE1 B\nSCHABACKER  SH AA1 - B AE2 - K ER0\nSCHABEL  SH AE1 - B AH0 L\nSCHABEN  SH AE1 - B AH0 N\nSCHABER  SH EY1 - B ER0\nSCHABERG  SH AA1 - B ER0 G\nSCHABES  SH EY1 B Z\nSCHACHER  SH AE1 - K ER0\nSCHACHNER  SH AE1 K - N ER0\nSCHACHT  SH AE1 K T\nSCHACHTER  SH AE1 K - T ER0\nSCHACK  SH AE1 K\nSCHAD  SH AE1 D\nSCHADE  SH EY1 D\nSCHADEL  SH AE1 - D AH0 L\nSCHADEN  SH AE1 - D AH0 N\nSCHADER  SH EY1 - D ER0\nSCHADLER  SH EY1 - D AH0 L - ER0\nSCHADLER(2)  SH EY1 D - L ER0\nSCHADT  SH AE1 T\nSCHAECHER  SH EH1 - K ER0\nSCHAEDEL  SH EH1 - D AH0 L\nSCHAEDLER  SH EH1 - D AH0 - L ER0\nSCHAEDLER(2)  SH EH1 D - L ER0\nSCHAEFER  SH EY1 - F ER0\nSCHAEFERS  SH EY1 - F ER0 Z\nSCHAEFFER  SH EH1 - F ER0\nSCHAEFFLER  SH AE1 F - L ER0\nSCHAER  SH AA1 - ER0\nSCHAFER  SH EY1 - F ER0\nSCHAFF  SH AE1 F\nSCHAFFER  SH EY1 - F ER0\nSCHAFFERT  SH AE1 - F ER0 T\nSCHAFFLER  SH AE1 F - L ER0\nSCHAFFNER  SH AE1 F - N ER0\nSCHAIBLE  S K EY1 - B AH0 L\nSCHAIRER  SH AY1 - ER0 R\nSCHAJA  SH AA1 - JH AH0\nSCHAKE  SH EY1 K\nSCHALK  SH AO1 K\nSCHALL  SH AO1 L\nSCHALLER  SH AO1 - L ER0\nSCHALLOCK  SH AE1 - L AH0 K\nSCHALOW  SH AE1 - L OW0\nSCHAMA  SH AA1 - M AH0\nSCHAMBER  SH AE1 M - B ER0\nSCHAMBERGER  SH AE1 M - B ER0 - G ER0\nSCHAMEL  SH AE1 - M AH0 L\nSCHAMP  SH AE1 M P\nSCHANBACHER  SH AE1 N - B AA2 - K ER0\nSCHANCK  SH AE1 NG K\nSCHANER  SH EY1 - N ER0\nSCHANK  SH AE1 NG K\nSCHANTZ  SH AE1 N T S\nSCHANZ  SH AE1 N S\nSCHAPER  SH EY1 - P ER0\nSCHAPIRO  SH AE1 - P AY0 - R OW0\nSCHAPP  SH AE1 P\nSCHAPPELL  SH AE1 - P AH0 L\nSCHAPPERT  SH AE1 - P ER0 T\nSCHAR  SH AA1 R\nSCHARA  S K AE1 - R AH0\nSCHARDT  SH AA1 R T\nSCHARENBERG  SH EH1 - R AH0 N - B ER0 G\nSCHARER  SH EH1 - R ER0\nSCHARF  SH AA1 R F\nSCHARFE  S K AA1 R F\nSCHARFENBERG  SH AA1 R - F AH0 N - B ER0 G\nSCHARFF  SH AA1 R F\nSCHARFFENBERGER  SH AA1 R - F AH0 N - B ER0 - G ER0\nSCHARLAU  SH AA1 R - L AW0\nSCHARNHORST  SH AA1 R N - HH AO0 R S T\nSCHARP  SH AA1 R P\nSCHARPF  SH AA1 R P F\nSCHARR  SH AA1 R\nSCHARRER  SH AA1 - R ER0\nSCHARTZ  SH AA1 R T S\nSCHATTNER  SH AE1 T - N ER0\nSCHATZ  SH AE1 T S\nSCHATZBERG  SH AE1 T S - B ER0 G\nSCHATZEL  SH AE1 T - Z AH0 L\nSCHATZMAN  SH AE1 T Z - M AH0 N\nSCHAU  SH OW1\nSCHAUB  SH AO1 B\nSCHAUBLE  SH OW1 - B AH0 L\nSCHAUER  SH AW1 - ER0\nSCHAUF  SH AW1 F\nSCHAUFLER  SH AW1 - F AH0 L - ER0\nSCHAUFLER(2)  SH AW1 F - L ER0\nSCHAUL  SH OW1 L\nSCHAUM  SH OW1 M\nSCHAUMBERG  SH OW1 M - B ER0 G\nSCHAUMBURG  SH AW1 M - B ER0 G\nSCHAUS  S K HH AW1 S\nSCHAUT  SH OW1 T\nSCHAVE  SH EY1 V\nSCHEAR  SH IH1 R\nSCHECHTER  SH EH1 K - T ER0\nSCHECHTMAN  SH EH1 K T - M AH0 N\nSCHECK  SH EH1 K\nSCHECKEL  SH EH1 - K AH0 L\nSCHECTER  SH EH1 K - T ER0\nSCHEDLER  SH EH1 - D AH0 - L ER0\nSCHEDLER(2)  SH EH1 D - L ER0\nSCHEDULE  S K EH1 - JH UH0 L\nSCHEDULE(2)  S K EH1 - JH UW0 L\nSCHEDULED  S K EH1 - JH UH0 L D\nSCHEDULED(2)  S K EH1 - JH UW0 L D\nSCHEDULER  S K EH1 - JH UH0 - L ER0\nSCHEDULER(2)  S K EH1 - JH UW0 - L ER0\nSCHEDULERS  S K EH1 - JH UH0 - L ER0 Z\nSCHEDULERS(2)  S K EH1 - JH UW0 - L ER0 Z\nSCHEDULES  S K EH1 - JH UH0 L Z\nSCHEDULES(2)  S K EH1 - JH UW0 L Z\nSCHEDULING  S K EH1 - JH UH0 - L IH0 NG\nSCHEDULING(2)  S K EH1 - JH UW0 - L IH0 NG\nSCHEEL  SH IY1 L\nSCHEELE  SH IY1 L\nSCHEELER  SH IY1 - L ER0\nSCHEER  SH IH1 R\nSCHEERER  SH IH1 - R ER0\nSCHEETS  SH IY1 T S\nSCHEETZ  SH IY1 T S\nSCHEFF  SH EH1 F\nSCHEFFEL  SH EH1 - F AH0 L\nSCHEFFER  SH EH1 - F ER0\nSCHEFFLER  SH EH1 - F AH0 - L ER0\nSCHEFFLER(2)  SH EH1 F - L ER0\nSCHEHR  SH EH1 R\nSCHEIB  SH AY1 B\nSCHEIBE  SH AY1 B\nSCHEIBEL  SH AY1 - B AH0 L\nSCHEIBER  SH AY1 - B ER0\nSCHEIBLE  S K AY1 - B AH0 L\nSCHEIBNER  SH AY1 B - N ER0\nSCHEID  SH AY1 D\nSCHEIDECKER  SH AY1 - D IH0 - K ER0\nSCHEIDEGGER  SH AY1 - D IH0 - G ER0\nSCHEIDEL  SH AY1 - D AH0 L\nSCHEIDER  SH AY1 - D ER0\nSCHEIDERER  SH AY1 - D ER0 - ER0\nSCHEIDLER  SH AY1 - D AH0 - L ER0\nSCHEIDLER(2)  SH AY1 D - L ER0\nSCHEIDT  SH AY1 T\nSCHEIER  SH AY1 - ER0\nSCHEIMAN  SH AY1 - M AH0 N\nSCHEIN  SH AY1 N\nSCHEINBERG  SH AY1 N - B ER0 G\nSCHEINER  SH AY1 - N ER0\nSCHEIRER  SH AY1 - ER0 R\nSCHELER  SH IY1 - L ER0\nSCHELIN  SH EH1 - L IH0 N\nSCHELL  S K EH1 L\nSCHELLENBERG  SH EH1 - L AH0 N - B ER0 G\nSCHELLENBERGER  SH EH1 - L AH0 N - B ER0 - G ER0\nSCHELLENGER  SH EH1 - L IH0 N - JH ER0\nSCHELLER  S K EH1 - L ER0\nSCHELLHAMMER  SH EH1 L - HH AH0 - M ER0\nSCHELLHASE  SH EH1 L - HH AH0 S\nSCHELLHORN  SH EH1 L - HH ER0 N\nSCHELLING  S K EH1 - L IH0 NG\nSCHELLINGER  SH EH1 - L IH0 - NG ER0\nSCHEMATA  S K IH0 - M AE1 - T AH0\nSCHEMATIC  S K IH0 - M AE1 - T IH0 K\nSCHEMBRI  SH EH1 M - B R IY0\nSCHEME  S K IY1 M\nSCHEMED  S K IY1 M D\nSCHEMEL  SH EH1 - M AH0 L\nSCHEMER  S K IY1 - M ER0\nSCHEMES  S K IY1 M Z\nSCHEMING  S K IY1 - M IH0 NG\nSCHEMM  SH EH1 M\nSCHEMMEL  SH EH1 - M AH0 L\nSCHEMPF  SH EH1 M F\nSCHEMPP  SH EH1 M P\nSCHENA  SH IY1 - N AH0\nSCHENCK  SH EH1 NG K\nSCHENDEL  SH EH1 N - D AH0 L\nSCHENECTADY  S K AH0 - N EH1 K - T AH0 - D IY0\nSCHENECTADY'S  S K AH0 - N EH1 K - T AH0 - D IY0 Z\nSCHENK  SH EH1 NG K\nSCHENKEL  SH EH1 NG - K AH0 L\nSCHENKEN  SH EH1 NG - K AH0 N\nSCHENKER  SH EH1 NG - K ER0\nSCHENLEY  SH EH1 N - L IY0\nSCHEPER  SH IY1 - P ER0\nSCHEPERS  SH IY1 - P ER0 Z\nSCHEPIS  SH EH1 - P IH0 S\nSCHEPP  SH EH1 P\nSCHER  SH ER1\nSCHERB  SH ER1 B\nSCHERBARTH  SH ER1 - B AA0 R TH\nSCHERER  SH IH1 - R ER0\nSCHERER'S  SH EH1 - R ER0 Z\nSCHERF  SH ER1 F\nSCHERFF  SH ER1 F\nSCHERGER  SH ER1 - G ER0\nSCHERING  SH ER1 - IH0 NG\nSCHERING'S  SH EH1 - R IH0 NG Z\nSCHERING(2)  SH EH1 - R IH0 NG\nSCHERLIS  SH ER1 - L IH0 S\nSCHERMAN  SH ER1 - M AH0 N\nSCHERMER  SH ER1 - M ER0\nSCHERMERHORN  SH ER1 - M ER0 - HH ER0 N\nSCHERR  SH EH1 R\nSCHERRER  SH EH1 - R ER0\nSCHERTZ  SH ER1 T S\nSCHERTZER  SH ER1 T - S ER0\nSCHERZ  SH ER1 Z\nSCHERZER  SH ER1 - Z ER0\nSCHERZINGER  SH ER1 - Z IH0 - NG ER0\nSCHETTER  SH EH1 - T ER0\nSCHETTINO  SH EH1 - T IY0 - N OW0\nSCHETTLER  SH EH1 - T AH0 L - ER0\nSCHETTLER(2)  SH EH1 T - L ER0\nSCHEU  SH OY1\nSCHEUER  SH OY1 - ER0\nSCHEUERMAN  SH OY1 - ER0 - M AH0 N\nSCHEUERMANN  SH OY1 - ER0 - M AH0 N\nSCHEUFLER  SH OY1 - F AH0 L - ER0\nSCHEUFLER(2)  SH OY1 F - L ER0\nSCHEUNEMANN  SH OY1 N - M AH0 N\nSCHEURER  SH ER1 - ER0\nSCHEURICH  SH OY1 - R IH0 K\nSCHEURING  SH ER1 - IH0 NG\nSCHEVE  SH IY1 V\nSCHEWE  SH Y UW1\nSCHEXNAYDER  SH EH1 K S - N EY0 - D ER0\nSCHEXNIDER  SH EH1 K S - N AY0 - D ER0\nSCHEY  SH EY1\nSCHIANO  S K IY0 - AA1 - N OW0\nSCHIAPPA  S K IY0 - AA1 - P AH0\nSCHIAVI  S K IY0 - AA1 - V IY0\nSCHIAVO  S K IY0 - AA1 - V OW0\nSCHIAVO'S  S K IY0 - AA1 - V OW0 Z\nSCHIAVONE  S K IY0 - AA0 - V OW1 - N IY0\nSCHIAVONI  S K IY0 - AA0 - V OW1 - N IY0\nSCHICK  SH IH1 K\nSCHICKER  SH IH1 - K ER0\nSCHICKLER  SH IH1 - K AH0 - L ER0\nSCHICKLER(2)  SH IH1 K - L ER0\nSCHICKLING  SH IH1 - K AH0 L - IH0 NG\nSCHICKLING(2)  SH IH1 - K L IH0 NG\nSCHIEBEL  SH IY1 - B AH0 L\nSCHIEBER  SH IY1 - B ER0\nSCHIEFELBEIN  SH IY1 - F IH0 L - B AY0 N\nSCHIEFER  SH IY1 - F ER0\nSCHIEFFELIN  SH IY1 - F AH0 - L IH0 N\nSCHIEFFER  SH IY1 - F ER0\nSCHIEL  SH IY1 L\nSCHIELD  SH IY1 L D\nSCHIELE  SH IY1 L\nSCHIELKE  SH IY1 L K\nSCHIEMANN  SH IY1 - M AH0 N\nSCHIER  SH AY1 - ER0\nSCHIEREN  SH IH1 - R AH0 N\nSCHIERL  SH IH1 R L\nSCHIESS  SH IY1 S\nSCHIESSER  SH IY1 - S ER0\nSCHIEWE  SH IY1 - W IY0\nSCHIFANO  S K IY0 - F AA1 - N OW0\nSCHIFERON  SH IH1 - F ER0 - AO2 N\nSCHIFERON'S  SH IH1 - F ER0 - AO2 N Z\nSCHIFERON'S(2)  SH IH1 F - R AO2 N Z\nSCHIFERON(2)  SH IH1 F - R AO2 N\nSCHIFF  SH IH1 F\nSCHIFFBAUER  SH IH1 F - B AW0 - ER0\nSCHIFFER  SH IH1 - F ER0\nSCHIFFLER  SH IH1 - F AH0 - L ER0\nSCHIFFLER(2)  SH IH1 F - L ER0\nSCHIFFMAN  SH IH1 F - M AH0 N\nSCHIFFNER  SH IH1 F - N ER0\nSCHILD  SH AY1 L D\nSCHILDER  SH AY1 L - D ER0\nSCHILDKNECHT  SH AY1 L D - K AH0 - N EH2 K T\nSCHILDT  SH IH1 L T\nSCHILKE  SH IH1 L K\nSCHILL  SH IH1 L\nSCHILLACI  S K IY0 - L AA1 - CH IY0\nSCHILLER  SH IH1 - L ER0\nSCHILLER'S  SH IH1 - L ER0 Z\nSCHILLING  SH IH1 - L IH0 NG\nSCHILLING'S  SH IH1 - L IH0 NG Z\nSCHILLINGER  SH IH1 - L IH0 - NG ER0\nSCHILLINGS  SH IH1 - L IH0 NG Z\nSCHILLO  S K IH1 - L OW0\nSCHILT  SH IH1 L T\nSCHILTKNECHT  SH IH1 L T - N EH2 K T\nSCHILTZ  SH IH1 L T S\nSCHILZ  SH IH1 L Z\nSCHIMBERNI  SH IH0 M - B ER1 - N IY0\nSCHIMEK  SH IH1 - M IH0 K\nSCHIMKE  S K IH1 M K\nSCHIMMEL  SH IH1 - M AH0 L\nSCHIMMELBUSCH  SH IH1 - M AH0 L - B UH2 SH\nSCHIMMING  SH IH1 - M IH0 NG\nSCHIMPF  SH IH1 M P F\nSCHINDEL  SH IH1 N - D AH0 L\nSCHINDLER  SH IH1 N D - L ER0\nSCHINDLER'S  SH IH1 N D - L ER0 Z\nSCHINKE  S K IH1 NG K\nSCHINKEL  SH IH1 NG - K AH0 L\nSCHIPANI  S K IY0 - P AA1 - N IY0\nSCHIPKE  SH IH1 P - K IY0\nSCHIPPER  SH IH1 - P ER0\nSCHIPPERS  SH IH1 - P ER0 Z\nSCHIRALDI  S K IH0 - R AA1 L - D IY0\nSCHIRM  SH ER1 M\nSCHIRMER  SH ER1 - M ER0\nSCHIRO  S K IH1 - R OW0\nSCHIRTZINGER  SH ER1 T - Z IH0 - NG ER0\nSCHISLER  SH IH1 - S AH0 - L ER0\nSCHISLER(2)  SH IH1 S - L ER0\nSCHISM  S K IH1 - Z AH0 M\nSCHISMS  S K IH1 - Z AH0 M Z\nSCHISSEL  SH IH1 - S AH0 L\nSCHISSLER  SH IH1 - S AH0 - L ER0\nSCHISSLER(2)  SH IH1 S - L ER0\nSCHIST  SH IH1 S T\nSCHISTS  SH IH1 S T S\nSCHIZOPHRENIA  S K IH2 T - S AH0 - F R IY1 - N IY0 - AH0\nSCHIZOPHRENIC  SH IH2 - Z AH0 - F R EH1 - N IH0 K\nSCHLABACH  SH L AE1 - B AA0 K\nSCHLACHTER  SH L AE1 K - T ER0\nSCHLACK  SH L AE1 K\nSCHLAFER  SH L EY1 - F ER0\nSCHLAFLY  SH L AE1 F - L IY0\nSCHLAG  SH L AE1 G\nSCHLAGEL  SH L AE1 - G AH0 L\nSCHLAGER  SH L EY1 - G ER0\nSCHLAGETER  SH L AE1 - G IY0 - T ER0\nSCHLAKE  SH L EY1 K\nSCHLANG  SH L AE1 NG\nSCHLANGEN  SH L AE1 - NG AH0 N\nSCHLANGER  SH L AE1 - NG ER0\nSCHLARB  SH L AA1 R B\nSCHLATER  SH L EY1 - T ER0\nSCHLATTER  SH L AE1 - T ER0\nSCHLAUCH  SH L AW1 K\nSCHLECHT  SH L EH1 K T\nSCHLECHTER  SH L EH1 K - T ER0\nSCHLEE  SH L IY1\nSCHLEETER  SH L IY1 - T ER0\nSCHLEGEL  SH L EY1 - G AH0 L\nSCHLEGELMILCH  SH L EH1 - G IH0 L - M IH0 L K\nSCHLEICH  SH L AY1 K\nSCHLEICHER  SH L AY1 - K ER0\nSCHLEIF  SH L AY1 F\nSCHLEIFER  SH L AY1 - F ER0\nSCHLEIGER  SH L AY1 - G ER0\nSCHLEIMER  SH L AY1 - M ER0\nSCHLEIN  SH L AY1 N\nSCHLEIS  SH L AY1 Z\nSCHLEMMER  SH L EH1 - M ER0\nSCHLENDER  SH L EH1 N - D ER0\nSCHLENKER  SH L EH1 NG - K ER0\nSCHLEPP  SH L EH1 P\nSCHLERETH  SH L EH1 - R IH0 TH\nSCHLESINGER  SH L EH1 - S IH0 N - JH ER0\nSCHLESSER  SH L EH1 - S ER0\nSCHLESSINGER  SH L EH1 - S IH0 N - JH ER0\nSCHLESWIG  SH L EH1 S - W IH0 G\nSCHLEY  SH L EY1\nSCHLEYER  SH L EY1 - ER0\nSCHLICHER  SH L IH1 - K ER0\nSCHLICHT  SH L IH1 K T\nSCHLICHTER  SH L IH1 K - T ER0\nSCHLICHTING  SH L IH1 K - T IH0 NG\nSCHLICK  SH L IH1 K\nSCHLICKER  SH L IH1 - K ER0\nSCHLICT  SH L IH1 K T\nSCHLIE  SH L IY1\nSCHLIEP  SH L IY1 P\nSCHLIEPER  SH L IY1 - P ER0\nSCHLINK  SH L IH1 NG K\nSCHLITT  SH L IH1 T\nSCHLITTER  SH L IH1 - T ER0\nSCHLITZ  SH L IH1 T S\nSCHLOBOHM  SH L AA1 - B OW0 M\nSCHLOCK  SH L AA1 K\nSCHLOEMER  SH L OW1 - M ER0\nSCHLOESSER  SH L AA1 - IH0 - S ER0\nSCHLOESSER(2)  SH L AA1 - S ER0\nSCHLOSBERG  SH L AA1 S - B ER0 G\nSCHLOSS  SH L AO1 S\nSCHLOSSBERG  SH L AO1 S - B ER0 G\nSCHLOSSER  SH L AO1 - S ER0\nSCHLOSSMAN  SH L AO1 S - M AH0 N\nSCHLOTT  SH L AA1 T\nSCHLOTTER  SH L AA1 - T ER0\nSCHLOTTERBECK  SH L AA1 - T ER0 - B EH0 K\nSCHLOTTMAN  SH L AA1 T - M AH0 N\nSCHLOTZHAUER  SH L AA1 T S - HH AW0 - ER0\nSCHLOUGH  SH L AW1\nSCHLUETER  SH L UH1 - T ER0\nSCHLUMBERGER  SH L AH1 M - B ER0 - ZH EY2\nSCHLUMBERGER(2)  SH L AH1 M - B ER0 - G ER0\nSCHLUND  SH L AH1 N D\nSCHLUP  SH L AH1 P\nSCHLUTER  SH L UW1 - T ER0\nSCHMADER  SH M EY1 - D ER0\nSCHMAHL  SH M AA1 L\nSCHMAL  SH M AE1 L\nSCHMALE  SH M EY1 L\nSCHMALL  SH M AO1 L\nSCHMALTZ  SH M AA1 L T S\nSCHMALZ  SH M AO1 L Z\nSCHMANCY  SH M AE1 N - S IY0\nSCHMAUS  SH M AW1 Z\nSCHMEAD  SH M IY1 D\nSCHMECHEL  SH M EH1 - K AH0 L\nSCHMECK  SH M EH1 K\nSCHMEHL  SH M EH1 L\nSCHMEICHEL  SH M AY1 - K AH0 L\nSCHMEISER  SH M AY1 - S ER0\nSCHMELING  SH M EH1 - L IH0 NG\nSCHMELTER  SH M EH1 L - T ER0\nSCHMELTZ  SH M EH1 L T S\nSCHMELTZER  SH M EH1 L T - Z ER0\nSCHMELZ  SH M EH1 L Z\nSCHMELZER  SH M EH1 L - Z ER0\nSCHMELZLE  SH M EH1 L - Z AH0 L\nSCHMERGEL  SH M ER1 - G AH0 L\nSCHMERTZ  SH M ER1 T S\nSCHMETTERER  SH M EH1 - T ER0 - ER0\nSCHMICK  SH M IH1 K\nSCHMID  SH M IH1 D\nSCHMIDDY  SH M IH1 - D IY0\nSCHMIDGALL  SH M IH1 - JH AH0 L\nSCHMIDL  SH M IH1 - D AH0 L\nSCHMIDLIN  SH M IH1 D - L IH0 N\nSCHMIDT  SH M IH1 T\nSCHMIDT'S  SH M IH1 T S\nSCHMIDTKE  SH M IH1 T - K IY0\nSCHMIED  SH M AY1 D\nSCHMIEDER  SH M AY1 - D ER0\nSCHMIEG  SH M IY1 G\nSCHMIERER  SH M AY1 - ER0 - ER0\nSCHMIESING  SH M IY1 - S IH0 NG\nSCHMIT  SH M IH1 T\nSCHMITT  SH M IH1 T\nSCHMITTER  SH M IH1 - T ER0\nSCHMITTOU  SH M IH1 - CH UW0\nSCHMITZ  SH M IH1 T S\nSCHMITZER  SH M IH1 T - S ER0\nSCHMOKE  SH M OW1 K\nSCHMOKER  SH M OW1 - K ER0\nSCHMOLDT  SH M OW1 L T\nSCHMOLL  SH M AA1 L\nSCHMOOZE  SH M UW1 Z\nSCHMOOZING  SH M UW1 - Z IH0 NG\nSCHMOTZER  SH M OW1 T - Z ER0\nSCHMOYER  SH M OY1 - ER0\nSCHMUCK  SH M AH1 K\nSCHMUCKER  SH M AH1 - K ER0\nSCHMUCKLER  SH M AH1 - K L ER0\nSCHMUHL  SH M AH1 L\nSCHMULTS  SH M AH1 L T S\nSCHMUNK  SH M AH1 NG K\nSCHMUTZ  SH M AH1 T S\nSCHMUTZLER  SH M AH1 T - Z AH0 L - ER0\nSCHMUTZLER(2)  SH M AH1 T Z - L ER0\nSCHNABEL  SH N AE1 - B AH0 L\nSCHNACK  SH N AE1 K\nSCHNACKENBERG  SH N AE1 - K AH0 N - B ER0 G\nSCHNAKE  SH N EY1 K\nSCHNAKENBERG  SH N EY1 - K AH0 N - B ER0 G\nSCHNALL  SH N AO1 L\nSCHNAPP  SH N AE1 P\nSCHNAPPS  SH N AE1 P S\nSCHNARR  SH N AE1 R\nSCHNAUZER  SH N AW1 - Z ER0\nSCHNEBERGER  SH N IY1 - B ER0 - G ER0\nSCHNEBLY  SH N EH1 - B L IY0\nSCHNECK  SH N EH1 K\nSCHNECKLOTH  SH N EH1 - K L AH0 TH\nSCHNEE  SH N IY1\nSCHNEEBERGER  SH N IY1 - B ER0 - G ER0\nSCHNEEMAN  SH N IY1 - M AH0 N\nSCHNEERSON  SH N IH1 R - S AH0 N\nSCHNEERSON'S  SH N IH1 R - S AH0 N Z\nSCHNEID  SH N AY1 D\nSCHNEIDER  SH N AY1 - D ER0\nSCHNEIDER'S  SH N AY1 - D ER0 Z\nSCHNEIDERMAN  SH N AY1 - D ER0 - M AH0 N\nSCHNEIDERMAN'S  SH N AY1 - D ER0 - M AH0 N Z\nSCHNEIDERS  SH N AY1 - D ER0 Z\nSCHNEIDERS'  SH N AY1 - D ER0 Z\nSCHNEIDEWIND  SH N AY1 - D AH0 - W IH2 N D\nSCHNEIDEWIND'S  SH N AY1 - D AH0 - W IH2 N D Z\nSCHNEIER  SH N AY1 - ER0\nSCHNEITER  SH N AY1 - T ER0\nSCHNELL  SH N EH1 L\nSCHNELLE  SH N EH1 L\nSCHNELLER  SH N EH1 - L ER0\nSCHNEPF  SH N EH1 P F\nSCHNEPP  SH N EH1 P\nSCHNETTLER  SH N EH1 - T AH0 L - ER0\nSCHNETTLER(2)  SH N EH1 T - L ER0\nSCHNETZER  SH N EH1 T - Z ER0\nSCHNICK  SH N IH1 K\nSCHNIDER  SH N AY1 - D ER0\nSCHNIEDER  SH N AY1 - D ER0\nSCHNIEDERS  SH N AY1 - D ER0 Z\nSCHNIER  SH N AY1 - ER0\nSCHNITKER  SH N IH1 T - K ER0\nSCHNITTKE  SH N IH1 T - K IY0\nSCHNITZ  SH N IH1 T S\nSCHNITZER  SH N IH1 T - Z ER0\nSCHNITZLER  SH N IH1 T - S L ER0\nSCHNOEBELEN  SH N OW1 - B AH0 - L AH0 N\nSCHNOOK  SH N UH1 K\nSCHNOOKS  SH N UH1 K S\nSCHNOOR  SH N UH1 R\nSCHNORR  SH N AO1 R\nSCHNUR  SH N ER1\nSCHNURR  SH N ER1\nSCHNYDER  SH N AY1 - D ER0\nSCHNYDER'S  SH N AY1 - D ER0 Z\nSCHOBEL  SH OW1 - B AH0 L\nSCHOBER  SH OW1 - B ER0\nSCHOBERT  SH AA1 - B ER0 T\nSCHOCH  SH AA1 K\nSCHOCK  SH AA1 K\nSCHOECK  SH OW1 K\nSCHOEFFLER  SH OW1 - F AH0 L - ER0\nSCHOEFFLER(2)  SH OW1 F - L ER0\nSCHOELLER  SH OW1 - L ER0\nSCHOELLHORN  SH OW1 L - HH AO2 R N\nSCHOEMAKER  SH OW1 - M EY2 - K ER0\nSCHOEN  SH OW1 N\nSCHOENBAUM  SH OW1 N - B AW2 M\nSCHOENBECK  SH OW1 N - B EH2 K\nSCHOENBERG  SH OW1 N - B ER0 G\nSCHOENBERGER  SH OW1 N - B ER0 - G ER0\nSCHOENBORN  SH OW1 N - B ER0 N\nSCHOENDORF  SH OW1 N - D AO0 R F\nSCHOENE  SH AA1 - IY0 N\nSCHOENECK  SH OW1 - N EH0 K\nSCHOENECKER  SH OW1 - N EH0 - K ER0\nSCHOENEMAN  SH AA1 - IY0 N - M AH0 N\nSCHOENEMANN  SH AA1 - IY0 N - M AH0 N\nSCHOENER  SH OW1 - N ER0\nSCHOENFELD  SH OW1 N - F EH2 L D\nSCHOENFELDER  SH OW1 N - F EH0 L - D ER0\nSCHOENFELDT  SH OW1 N - F IH0 L T\nSCHOENHALS  SH OW1 N - HH AH0 L Z\nSCHOENHERR  SH OW1 N - HH ER0\nSCHOENHOF  SH OW1 N - HH AA2 F\nSCHOENHOF'S  SH OW1 N - HH AA2 F S\nSCHOENHOLTZ  SH OW1 N - HH OW2 L T S\nSCHOENIG  SH OW1 - N IH0 G\nSCHOENING  SH AA1 - AH0 - N IH0 NG\nSCHOENROCK  SH OW1 N - R AH0 K\nSCHOENTHAL  SH OW1 N - TH AO2 L\nSCHOENWALD  SH OW1 N - W AO2 L D\nSCHOEPE  SH OW1 P\nSCHOEPF  SH OW1 P\nSCHOEPKE  SH OW1 P - K IY0\nSCHOEPP  SH OW1 P\nSCHOEPPNER  SH OW1 P - N ER0\nSCHOETTLE  SH OW1 - T AH0 L\nSCHOFF  SH AO1 F\nSCHOFFSTALL  SH AO1 F - S T AH0 L\nSCHOFIELD  S K OW1 - F IY0 L D\nSCHOLAR  S K AA1 - L ER0\nSCHOLAR'S  S K AA1 - L ER0 Z\nSCHOLARLY  S K AA1 - L ER0 - L IY0\nSCHOLARS  S K AA1 - L ER0 Z\nSCHOLARSHIP  S K AA1 - L ER0 - SH IH2 P\nSCHOLARSHIPS  S K AA1 - L ER0 - SH IH2 P S\nSCHOLASTIC  S K AH0 - L AE1 - S T IH0 K\nSCHOLBERG  SH OW1 L - B ER0 G\nSCHOLER  SH OW1 - L ER0\nSCHOLES  S K OW1 L Z\nSCHOLEY  SH OW1 - L IY0\nSCHOLFIELD  S K OW1 L - F IY2 L D\nSCHOLL  SH AA1 L\nSCHOLLE  SH OW1 L\nSCHOLLER  SH AA1 - L ER0\nSCHOLLMEYER  SH AA1 L - M AY0 - ER0\nSCHOLTEN  SH OW1 L - T AH0 N\nSCHOLTES  SH OW1 L T S\nSCHOLTZ  SH OW1 L T S\nSCHOLZ  SH OW1 L Z\nSCHOLZE  SH OW1 L Z\nSCHOMAKER  SH OW1 - M EY2 - K ER0\nSCHOMBERG  SH AA1 M - B ER0 G\nSCHOMBURG  SH AA1 M - B ER0 G\nSCHOMER  SH OW1 - M ER0\nSCHOMMER  SH AA1 - M ER0\nSCHON  SH AA1 N\nSCHONBERG  SH AA1 N - B ER0 G\nSCHONBERGER  SH AA1 N - B ER0 - G ER0\nSCHONE  SH OW1 N\nSCHONEMAN  SH OW1 N - M AH0 N\nSCHONFELD  SH AA1 N - F EH2 L D\nSCHONS  SH AA1 N Z\nSCHOO  SH UW1\nSCHOOF  SH UH1 F\nSCHOOK  SH UH1 K\nSCHOOL  S K UW1 L\nSCHOOL'S  S K UW1 L Z\nSCHOOLBOOK  S K UW1 L - B UH2 K\nSCHOOLBOOKS  S K UW1 L - B UH2 K S\nSCHOOLBOY  S K UW1 L - B OY2\nSCHOOLBOYS  S K UW1 L - B OY2 Z\nSCHOOLBUS  S K UW1 L - B AH2 S\nSCHOOLCHILD  S K UW1 L - CH AY2 L D\nSCHOOLCHILDREN  S K UW1 L - CH IH2 L - D R AH0 N\nSCHOOLCRAFT  S K UW1 L - K R AE2 F T\nSCHOOLED  S K UW1 L D\nSCHOOLER  S K UW1 - L ER0\nSCHOOLERS  S K UW1 - L ER0 Z\nSCHOOLEY  S K UW1 - L IY0\nSCHOOLFIELD  S K UW1 L - F IY2 L D\nSCHOOLHOUSE  S K UW1 L - HH AW2 S\nSCHOOLING  S K UW1 - L IH0 NG\nSCHOOLMASTER  S K UW1 L - M AE2 - S T ER0\nSCHOOLMATE  S K UW1 L - M EY2 T\nSCHOOLMATES  S K UW1 L - M EY2 T S\nSCHOOLROOM  S K UW1 L - R UW2 M\nSCHOOLS  S K UW1 L Z\nSCHOOLS'  S K UW1 L Z\nSCHOOLTEACHER  S K UW1 L - T IY2 - CH ER0\nSCHOOLTEACHERS  S K UW1 L - T IY2 - CH ER0 Z\nSCHOOLTIME  S K UW1 L - T AY2 M\nSCHOOLWORK  S K UW1 L - W ER2 K\nSCHOOLYARD  S K UW1 L - Y AA2 R D\nSCHOON  S K UW1 N\nSCHOONER  S K UW1 - N ER0\nSCHOONERS  S K UW1 - N ER0 Z\nSCHOONMAKER  SH UW1 N - M EY0 - K ER0\nSCHOONOVER  SH UW1 - N AH0 - V ER0\nSCHOPF  SH AA1 P F\nSCHOPFER  SH AA1 P - F ER0\nSCHOPP  SH AA1 P\nSCHOPPE  SH AA1 P\nSCHOR  SH AO1 R\nSCHORK  SH AO1 R K\nSCHORN  SH AO1 R N\nSCHORR  SH AO1 R\nSCHORR'S  SH AO1 R Z\nSCHORSCH  SH AO1 R SH\nSCHOTT  SH AA1 T\nSCHOTT'S  SH AA1 T S\nSCHOTTENSTEIN  SH AA1 - T AH0 N - S T IY2 N\nSCHOTTENSTEIN(2)  SH AA1 - T AH0 N - S T AY2 N\nSCHOU  SH UW1\nSCHOUTEN  SH AA1 - UW0 - T AH0 N\nSCHOW  SH AW1\nSCHOWALTER  SH AW1 - AH0 L - T ER0\nSCHRACK  SH R AE1 K\nSCHRADE  SH R EY1 D\nSCHRADER  SH R EY1 - D ER0\nSCHRAEDER  SH R EH1 - D ER0\nSCHRAG  SH R AE1 G\nSCHRAGE  SH R EY1 JH\nSCHRAGER  SH R EY1 - G ER0\nSCHRAM  SH R AE1 M\nSCHRAMM  SH R AE1 M\nSCHRANDT  SH R AE1 N T\nSCHRANK  SH R AE1 NG K\nSCHRANTZ  SH R AE1 N T S\nSCHRANZ  SH R AE1 N S\nSCHRAUFNAGEL  SH R AW1 F - N AH0 - G AH0 L\nSCHRECENGOST  SH R EH1 - S IH0 NG - G AH0 S T\nSCHRECK  SH R EH1 K\nSCHRECKENGOST  SH R EH1 - K IH0 NG - G AH0 S T\nSCHRECONGOST  SH R EH1 - K AH0 NG - G AH0 S T\nSCHREDER  SH R IY1 - D ER0\nSCHREFFLER  SH R EH1 - F AH0 - L ER0\nSCHREFFLER(2)  SH R EH1 F - L ER0\nSCHREGER  SH R EH1 - G ER0\nSCHREIBER  SH R AY1 - B ER0\nSCHREIBMAN  SH R AY1 B - M AH0 N\nSCHREIER  SH R AY1 - ER0\nSCHREIFELS  SH R AY1 - F AH0 L Z\nSCHREINER  SH R AY1 - N ER0\nSCHREITER  SH R AY1 - T ER0\nSCHREMP  SH R EH1 M P\nSCHREMPF  SH R EH1 M P F\nSCHREMPP  SH R EH1 M P\nSCHRENK  SH R EH1 NG K\nSCHREUR  SH R ER1\nSCHREURS  SH R ER1 Z\nSCHREYER  SH R AY1 R\nSCHRIBER  SH R AY1 - B ER0\nSCHRICK  SH R IH1 K\nSCHRICKER  SH R IH1 - K ER0\nSCHRIEBER  SH R IY1 - B ER0\nSCHRIEFER  SH R IY1 - F ER0\nSCHRIER  SH R AY1 - ER0\nSCHRIEVER  SH R IY1 - V ER0\nSCHRIMPF  SH R IH1 M P F\nSCHRIMSHER  SH R IH1 M - SH ER0\nSCHRINER  SH R AY1 - N ER0\nSCHRIVER  SH R AY1 - V ER0\nSCHROADER  SH R OW1 - D ER0\nSCHROCK  SH R AA1 K\nSCHRODER  SH R OW1 - D ER0\nSCHRODERS  SH R OW1 - D ER0 Z\nSCHRODT  SH R AA1 T\nSCHROECK  SH R OW1 K\nSCHROEDER  SH R OW1 - D ER0\nSCHROEDER'S  SH R OW1 - D ER0 Z\nSCHROEDL  SH R OW1 - D AH0 L\nSCHROEPFER  SH R OW1 P - F ER0\nSCHROER  SH R OW1 - ER0\nSCHROETER  SH R OW1 - T ER0\nSCHROFF  SH R AO1 F\nSCHROLL  SH R OW1 L\nSCHROM  SH R AA1 M\nSCHRONCE  SH R AA1 N S\nSCHROPP  SH R AA1 P\nSCHROTH  SH R AO1 TH\nSCHROYER  SH R OY1 - ER0\nSCHRUM  SH R AH1 M\nSCHRUMPF  SH R AH1 M P F\nSCHRUPP  SH R AH1 P\nSCHRYER  SH R AY1 - ER0\nSCHRYVER  SH R AY1 - V ER0\nSCHTICK  SH T IH1 K\nSCHUBACH  SH AH1 - B AA0 K\nSCHUBEL  SH UW1 - B AH0 L\nSCHUBERT  SH UW1 - B ER0 T\nSCHUBERT'S  SH UW1 - B ER0 T S\nSCHUBRING  SH AH1 - B ER0 - IH0 NG\nSCHUCH  SH AH1 K\nSCHUCHARD  SH AH1 - K ER0 D\nSCHUCHARDT  SH AH1 - K AA0 R T\nSCHUCHART  SH AH1 K - HH AA0 R T\nSCHUCHERT  S K AH1 - CH ER0 T\nSCHUCHMAN  SH AH1 K - M AH0 N\nSCHUCHMANN  SH AH1 K - M AH0 N\nSCHUCK  SH AH1 K\nSCHUCKER  SH AH1 - K ER0\nSCHUCKMAN  SH AH1 K - M AH0 N\nSCHUE  SH UW1\nSCHUELE  SH UW1 L\nSCHUELER  SH UW1 - L ER0\nSCHUELKE  SH UW1 L K\nSCHUELLER  SH UW1 - L ER0\nSCHUENEMAN  SH UW1 - N AH0 - M AH0 N\nSCHUENEMANN  SH UW1 - N AH0 - M AH0 N\nSCHUERMAN  SH UW1 - ER0 - M AH0 N\nSCHUERMANN  SH UW1 - ER0 - M AH0 N\nSCHUESSLER  SH UW1 S - L ER0\nSCHUETT  S K UW1 T\nSCHUETTE  S K UW1 T\nSCHUETZ  SH UW1 T S\nSCHUETZE  SH UW1 T S\nSCHUFF  SH AH1 F\nSCHUG  SH AH1 G\nSCHUH  SH UW1\nSCHUHMACHER  SH UW1 - M AA0 - K ER0\nSCHUHMANN  SH UW1 - M AH0 N\nSCHUITEMA  SH UW1 - T IH0 - M AH0\nSCHUKNECHT  SH AH1 K - N IH0 K T\nSCHUL  SH UH1 L\nSCHULD  SH UH1 D\nSCHULDENER  SH UW1 L - D AH0 - N ER0\nSCHULDENER'S  SH UW1 L - D AH0 - N ER0 Z\nSCHULDER  SH UW1 L - D ER0\nSCHULDT  SH UH1 L T\nSCHULENBERG  SH UW1 - L AH0 N - B ER0 G\nSCHULENBURG  SH UW1 - L AH0 N - B ER0 G\nSCHULER  SH UW1 - L ER0\nSCHULHOF  SH UW1 L - HH AO0 F\nSCHULKE  SH UH1 L - K IY0\nSCHULL  SH UH1 L\nSCHULLER  SH UW1 - L ER0\nSCHULMAN  SH UW1 L - M AH0 N\nSCHULOF  SH UW1 - L AO0 F\nSCHULT  SH AH1 L T\nSCHULTE  SH AH1 L T\nSCHULTEN  SH AH1 L - T AH0 N\nSCHULTES  SH AH1 L T S\nSCHULTHEIS  SH AH1 L - DH AY0 Z\nSCHULTHEISS  SH AH1 L - TH AY0 S\nSCHULTZ  SH UH1 L T S\nSCHULTZE  SH AH1 L T Z\nSCHULZ  SH UH1 L T S\nSCHULZE  SH UH1 L T S\nSCHUM  SH AH1 M\nSCHUMACHER  SH UW1 - M AA2 - K ER0\nSCHUMACKER  SH UW1 - M AA2 - K ER0\nSCHUMAKER  SH UW1 - M EY2 - K ER0\nSCHUMAN  SH UW1 - M AH0 N\nSCHUMANN  SH UW1 - M AH0 N\nSCHUMANN'S  SH UW1 - M AH0 N Z\nSCHUMER  SH UW1 - M ER0\nSCHUMER'S  SH UW1 - M ER0 Z\nSCHUMM  SH AH1 M\nSCHUMPERT  SH AH1 M - P ER0 T\nSCHUNDLER  SH AH1 N D - L ER0\nSCHUNEMAN  SH UW1 N - M AH0 N\nSCHUNK  SH AH1 NG K\nSCHUPAK  SH UW1 - P AE2 K\nSCHUPBACH  SH AH1 P - B AA2 K\nSCHUPP  SH AH1 P\nSCHUR  SH ER1\nSCHURING  SH ER1 - IH0 NG\nSCHURMAN  SH ER1 - M AH0 N\nSCHURR  SH ER1\nSCHURRENBERG  SH ER1 - AH0 N - B ER0 G\nSCHUSSLER  SH AH1 S - L ER0\nSCHUSTER  SH UW1 - S T ER0\nSCHUT  SH AH1 T\nSCHUTH  SH UW1 TH\nSCHUTT  SH AH1 T\nSCHUTTE  S K AH1 T\nSCHUTTER  SH AH1 - T ER0\nSCHUTTLER  SH AH1 T - L ER0\nSCHUTZ  SH AH1 T S\nSCHUTZ'S  SH AH1 T - S IH0 Z\nSCHUTZMAN  SH AH1 T Z - M AH0 N\nSCHUUR  SH UH1 R\nSCHUYLER  S K AY1 - L ER0\nSCHUYLKILL  S K Y UW1 L - K IH2 L\nSCHWAB  SH W AA1 B\nSCHWAB'S  SH W AA1 B Z\nSCHWABE  SH W AO1 B\nSCHWADERER  SH W AO1 - D ER0 - ER0\nSCHWAGER  SH W EY1 - G ER0\nSCHWAHN  SH W AO1 N\nSCHWAIGER  SH W AY1 - G ER0\nSCHWAKE  SH W EY1 K\nSCHWALB  SH W AO1 L B\nSCHWALBACH  SH W AO1 L - B AA2 K\nSCHWALBE  SH W AO1 L B\nSCHWALL  SH W AO1 L\nSCHWALLER  SH W AO1 - L ER0\nSCHWALM  SH W AA1 L M\nSCHWAM  SH W AO1 M\nSCHWAN  SH W AO1 N\nSCHWANDT  SH W AO1 N T\nSCHWANKE  SH W AO1 NG K\nSCHWANTES  SH W AO1 N T S\nSCHWANZ  SH W AO1 N S\nSCHWARK  SH W AO1 R K\nSCHWARM  SH W AO1 R M\nSCHWARTZ  SH W AO1 R T S\nSCHWARTZBERG  SH W AO1 R T S - B ER0 G\nSCHWARTZBERG'S  SH W AO1 R T S - B ER0 G Z\nSCHWARTZCHILD  SH W AO1 R T S - CH AY2 L D\nSCHWARTZKOPF  SH W AO1 R T - S K AO0 P F\nSCHWARTZKOPF(2)  SH W AO1 R T - S K AO0 F\nSCHWARTZMAN  SH W AO1 R T S - M AH0 N\nSCHWARZ  SH W AO1 R T S\nSCHWARZE  SH W AO1 R T S\nSCHWARZENEGGER  SH W AO1 R - Z AH0 - N EY2 - G ER0\nSCHWARZENEGGER'S  SH W AO1 R - Z AH0 - N EY2 - G ER0 Z\nSCHWARZER  SH W AO1 R T - S ER0\nSCHWARZKOPF  SH W AO1 R T - S K AO0 P F\nSCHWARZKOPF'S  SH W AO1 R T - S K AO0 P F S\nSCHWARZKOPF'S(2)  SH W AO1 R T - S K AO0 F S\nSCHWARZKOPF(2)  SH W AO1 R T - S K AO0 F\nSCHWARZMAN  SH W AO1 R T S - M AH0 N\nSCHWEBACH  SH W EH1 - B AA2 K\nSCHWEBEL  SH W EH1 - B AH0 L\nSCHWEBKE  SH W EH1 B K\nSCHWED  SH W EH1 D\nSCHWEDA  SH W IY1 - D AH0\nSCHWEDE  SH W IY1 D\nSCHWEDER  SH W IY1 - D ER0\nSCHWEER  SH W IH1 R\nSCHWEERS  SH W IH1 R Z\nSCHWEGEL  SH W EH1 - G AH0 L\nSCHWEGLER  SH W EH1 - G AH0 - L ER0\nSCHWEGLER(2)  SH W EH1 G - L ER0\nSCHWEGMAN  SH W EH1 G - M AH0 N\nSCHWEICH  SH W AY1 K\nSCHWEICKERT  SH W AY1 - K ER0 T\nSCHWEIGER  SH W AY1 - G ER0\nSCHWEIGERT  SH W AY1 - G ER0 T\nSCHWEIGHARDT  SH W AY1 G - HH AA2 R T\nSCHWEIKERT  SH W AY1 - K ER0 T\nSCHWEINSBERG  SH W AY1 N S - B ER0 G\nSCHWEISS  SH W AY1 S\nSCHWEITZER  SH W AY1 T - S ER0\nSCHWEITZER'S  SH W AY1 T - S ER0 Z\nSCHWEIZER  SH W AY1 - Z ER0\nSCHWEIZERISCHE  SH W AY1 - Z ER0 - IH0 SH\nSCHWEMM  SH W EH1 M\nSCHWEMMER  SH W EH1 - M ER0\nSCHWENDEMAN  SH W EH1 N D - M AH0 N\nSCHWENK  SH W EH1 NG K\nSCHWENKE  SH W EH1 NG K\nSCHWENKER  SH W EH1 NG - K ER0\nSCHWENN  SH W EH1 N\nSCHWENT  SH W EH1 N T\nSCHWEPPE  SH W EH1 P\nSCHWEPPES  SH W EH1 P S\nSCHWER  SH W ER1\nSCHWERDLOFF  SH W ER1 D - L AO0 F\nSCHWERDT  SH W ER1 T\nSCHWERDTFEGER  SH W ER1 T - F EY2 - G ER0\nSCHWERIN  SH W EH1 - R IH0 N\nSCHWERING  SH W IH1 - R IH0 NG\nSCHWERNER  SH W ER1 - N ER0\nSCHWERNER'S  SH W ER1 - N ER0 Z\nSCHWERTFEGER  SH W ER1 T - F IH0 - G ER0\nSCHWERTNER  SH W ER1 T - N ER0\nSCHWICHTENBERG  SH W IH1 K - T AH0 N - B ER0 G\nSCHWIEGER  SH W IY1 - G ER0\nSCHWIER  SH W AY1 - ER0\nSCHWIESOW  SH W IY1 - S OW0\nSCHWIETERMAN  SH W IY1 - T ER0 - M AH0 N\nSCHWIMMER  SH W IH1 - M ER0\nSCHWIND  SH W IH1 N D\nSCHWINDT  SH W IH1 N T\nSCHWING  SH W IH1 NG\nSCHWINGER  SH W IH1 - NG ER0\nSCHWINN  SH W IH1 N\nSCHWISOW  SH W IH1 - S OW0\nSCHWOERER  SH W OW1 - ER0 - ER0\nSCI  S IY1\nSCI(2)  EH1 S - S IY1 - AY1\nSCIACCA  S K AO1 - K AA0\nSCIALABBA  S K AO1 - L AA0 - B AH0\nSCIALDONE  SH AO1 L - D OW0 - N IY0\nSCIANDRA  SH AO1 N - D R AH0\nSCIANNA  SH AO1 - N AH0\nSCIARA  SH AA1 - R AH0\nSCIARONI  S IY2 - ER0 - OW1 - N IY0\nSCIARRA  S IY0 - AA1 - R AH0\nSCIARRINO  SH ER0 - IY1 - N OW0\nSCIASCIA  SH AO1 S - CH AH0\nSCIBELLI  S IH0 - B EH1 - L IY0\nSCIBILIA  S IH0 - B IY1 - L IY0 - AH0\nSCICCHITANO  S IH0 - K IH0 - T AA1 - N OW0\nSCICLONE  S IH2 - K L OW1 - N IY0\nSCICOM  S IH1 - K AA2 M\nSCIENCE  S AY1 - AH0 N S\nSCIENCE'S  S AY1 - AH0 N - S IH0 Z\nSCIENCES  S AY1 - AH0 N - S AH0 Z\nSCIENCES'  S AY1 - AH0 N - S IH0 Z\nSCIENCES(2)  S AY1 - AH0 N - S IH0 Z\nSCIENTIFIC  S AY2 - AH0 N - T IH1 - F IH0 K\nSCIENTIFIC'S  S AY2 - AH0 N - T IH1 - F IH0 K S\nSCIENTIFICALLY  S AY2 - AH0 N - T IH1 - F IH0 - K AH0 - L IY0\nSCIENTIFICALLY(2)  S AY2 - AH0 N - T IH1 - F IH0 K - L IY0\nSCIENTIFICS  S AY2 - AH0 N - T IH1 - F IH0 K S\nSCIENTIST  S AY1 - AH0 N - T IH0 S T\nSCIENTIST'S  S AY1 - AH0 N - T IH0 S T S\nSCIENTISTS  S AY1 - AH0 N - T IH0 S T S\nSCIENTISTS'  S AY1 - AH0 N - T IH0 S T S\nSCIENTISTS(2)  S AY1 N - T IH0 S T S\nSCIENTISTS(3)  S AY1 N - T IH0 S S\nSCIENTISTS(4)  S AY1 - AH0 N - T IH0 S S\nSCIENTISTS(5)  S AY1 N - T IH0 S\nSCIENTISTS(6)  S AY1 - AH0 N - T IH0 S\nSCIENTOLOGIST  S AY2 - AH0 N - T AA1 - L AH0 - JH AH0 S T\nSCIENTOLOGISTS  S AY2 - AH0 N - T AA1 - L AH0 - JH AH0 S T S\nSCIENTOLOGY  S AY2 - AH0 N - T AA1 - L AH0 - JH IY0\nSCIFRES  S AY1 - F ER0 Z\nSCILLA  S IH1 - L AH0\nSCILLAS  S IH1 - L AH0 Z\nSCIMECA  S IH0 - M EH1 - K AH0\nSCIMECA(2)  S AY2 - M EH1 - K AH0\nSCIMED  S AY1 - M EH2 D\nSCIMONE  S IH0 - M OW1 N\nSCINTA  S IH1 N - T AH0\nSCINTILLA  S IH0 N - T IH1 - L AH0\nSCINTILORE  S IH1 N - T AH0 - L AO2 - R IY0\nSCINTO  S IH1 N - T OW0\nSCIOLI  S IY0 - OW1 - L IY0\nSCION  S AY1 - AH0 N\nSCIORTINO  S IY0 - AO0 R - T IY1 - N OW0\nSCIOS  S K AY1 - OW0 S\nSCIPIO  S IH1 - P IY0 - OW0\nSCIPIONE  S IH0 - P IY0 - OW1 - N IY0\nSCIRE  S AY1 R\nSCISM  S K IH1 - Z AH0 M\nSCISSOR  S IH1 - Z ER0\nSCISSORS  S IH1 - Z ER0 Z\nSCITEX  S IY1 - T EH2 K S\nSCIULLI  S IY0 - UW1 - L IY0\nSCIULLO  S IY0 - UW1 - L OW0\nSCIUTO  S IY0 - UW1 - T OW0\nSCLAFANI  S K L AA0 - F AA1 - N IY0\nSCLERODERMA  S K L IH2 - R AH0 - D ER1 - M AH0\nSCLEROSIS  S K L ER0 - OW1 - S AH0 S\nSCOBEE  S K AA1 - B IY0\nSCOBEY  S K OW1 - B IY0\nSCOBIE  S K AA1 - B IY0\nSCOBY  S K OW1 - B IY0\nSCOCOZZA  S K AA0 - K AA1 - Z AH0\nSCOFF  S K AO1 F\nSCOFFED  S K AO1 F T\nSCOFFIELD  S K AO1 - F IY2 L D\nSCOFFLAWS  S K AA1 - F L AO2 Z\nSCOFFS  S K AO1 F S\nSCOFIELD  S K OW1 - F IY2 L D\nSCOGGIN  S K AA1 - G IH0 N\nSCOGGINS  S K AA1 - G IH0 N Z\nSCOGIN  S K OW1 - G IH0 N\nSCOHIER  S K OW1 - Y ER0\nSCOLA  S K OW1 - L AH0\nSCOLARI  S K OW0 - L AA1 - R IY0\nSCOLARO  S K OW0 - L AA1 - R OW0\nSCOLD  S K OW1 L D\nSCOLDED  S K OW1 L - D AH0 D\nSCOLDED(2)  S K OW1 L - D IH0 D\nSCOLDING  S K OW1 L - D IH0 NG\nSCOLDS  S K OW1 L D Z\nSCOLES  S K OW1 L Z\nSCOLIA  S K OW1 - L Y AH0\nSCOMA  S K OW1 - M AH0\nSCONC  S K AA1 N S\nSCONCE  S K AA1 N S\nSCONCES  S K AA1 N - S IH0 Z\nSCONE  S K OW1 N\nSCONES  S K OW1 N Z\nSCONIERS  S K AO1 - N IY0 - ER0 Z\nSCONNIX  S K AA1 - N IH0 K S\nSCONYERS  S K AO1 - N IY0 - ER0 Z\nSCOOP  S K UW1 P\nSCOOPED  S K UW1 P T\nSCOOPER  S K UW1 - P ER0\nSCOOPING  S K UW1 - P IH0 NG\nSCOOPS  S K UW1 P S\nSCOOT  S K UW1 T\nSCOOTER  S K UW1 - T ER0\nSCOOTERS  S K UW1 - T ER0 Z\nSCOOTS  S K UW1 T S\nSCOPE  S K OW1 P\nSCOPES  S K OW1 P S\nSCOPING  S K OW1 - P IH0 NG\nSCOPOLAMINE  S K AO1 - P AH0 - L AH0 - M IY2 N\nSCOPOLAMINE(2)  S K OW1 - P L AH0 - M IY2 N\nSCOR  S K AO1 R\nSCORCH  S K AO1 R CH\nSCORCHED  S K AO1 R CH T\nSCORCHER  S K AO1 R - CH ER0\nSCORCHING  S K AO1 R - CH IH0 NG\nSCORE  S K AO1 R\nSCOREBOARD  S K AO1 R - B AO2 R D\nSCORECARD  S K AO1 R - K AA2 R D\nSCORECARDS  S K AO1 R - K AA2 R D Z\nSCORED  S K AO1 R D\nSCOREKEEPER  S K AO1 R - K IY2 - P ER0\nSCOREKEEPERS  S K AO1 R - K IY2 - P ER0 Z\nSCOREKEEPING  S K AO1 R - K IY2 - P IH0 NG\nSCORELESS  S K AO1 R - L AH0 S\nSCORER  S K AO1 - R ER0\nSCORERS  S K AO1 - R ER0 Z\nSCORES  S K AO1 R Z\nSCORING  S K AO1 - R IH0 NG\nSCORN  S K AO1 R N\nSCORNED  S K AO1 R N D\nSCORNFUL  S K AO1 R N - F AH0 L\nSCORNS  S K AO1 R N Z\nSCORPIO  S K AO1 R - P IY0 - OW2\nSCORPION  S K AO1 R - P IY0 - AH0 N\nSCORPIONS  S K AO1 R - P IY0 - AH0 N Z\nSCORSESE  S K AO2 R - S IY1 Z\nSCORSESE'S  S K AO2 R - S IY1 - Z IH0 Z\nSCORSESE'S(2)  S K AO2 R - S EY1 - Z IY0 Z\nSCORSESE(2)  S K AO2 R - S EY1 - Z IY0\nSCORSONE  S K AO1 R - S AH0 N\nSCORZA  S K AO1 R - Z AH0\nSCOT  S K AA1 T\nSCOTCH  S K AA1 CH\nSCOTCHED  S K AA1 CH T\nSCOTCHES  S K AA1 - CH IH0 Z\nSCOTCHGARD  S K AA1 CH - G AA2 R D\nSCOTIA  S K OW1 - SH AH0\nSCOTIA'S  S K OW1 - SH AH0 Z\nSCOTLAND  S K AA1 T - L AH0 N D\nSCOTLAND'S  S K AA1 T - L AH0 N D Z\nSCOTS  S K AA1 T S\nSCOTSMAN  S K AA1 T S - M AH0 N\nSCOTT  S K AA1 T\nSCOTT'S  S K AA1 T S\nSCOTTEN  S K AA1 - T AH0 N\nSCOTTIE  S K AA1 - T IY0\nSCOTTISH  S K AA1 - T IH0 SH\nSCOTTO  S K OW1 - T OW0\nSCOTTO(2)  S K AA1 - T OW0\nSCOTTON  S K AA1 - T AH0 N\nSCOTTS  S K AA1 T S\nSCOTTSBLUFF  S K AA1 T S - B L AH2 F\nSCOTTSDALE  S K AA1 T S - D EY2 L\nSCOTTY  S K AA1 - T IY0\nSCOTTY'S  S K AA1 - T IY0 Z\nSCOUNDREL  S K AW1 N - D R AH0 L\nSCOUNDRELS  S K AW1 N - D R AH0 L Z\nSCOUR  S K AW1 - ER0\nSCOUR(2)  S K AW1 R\nSCOURED  S K AW1 - ER0 D\nSCOURGE  S K ER1 JH\nSCOURGES  S K ER1 - JH IH0 Z\nSCOURING  S K AW1 - ER0 - IH0 NG\nSCOURS  S K AW1 - ER0 Z\nSCOUT  S K AW1 T\nSCOUT'S  S K AW1 T S\nSCOUTED  S K AW1 - T AH0 D\nSCOUTEN  S K AW1 - T AH0 N\nSCOUTER  S K AW1 - T ER0\nSCOUTERS  S K AW1 - T ER0 Z\nSCOUTING  S K AW1 - T IH0 NG\nSCOUTMASTER  S K AW1 T - M AE2 - S T ER0\nSCOUTS  S K AW1 T S\nSCOVEL  S K OW1 - V AH0 L\nSCOVELL  S K AA1 - V AH0 L\nSCOVIL  S K OW1 - V AH0 L\nSCOVILL  S K AA1 - V AH0 L\nSCOVILLE  S K OW1 - V IH2 L\nSCOW  S K AW1\nSCOWCROFT  S K OW1 - K R AO2 F T\nSCOWDEN  S K AW1 - D AH0 N\nSCOWL  S K AW1 L\nSCOWLED  S K AW1 L D\nSCOWLING  S K AW1 - L IH0 NG\nSCOZZAFAVA  S K OW0 T - S AA0 - F AA1 - V AH0\nSCRABBLE  S K R AE1 - B AH0 L\nSCRAGG  S K R AE1 G\nSCRAGGLE  S K R AE1 - G AH0 L\nSCRAGGLY  S K R AE1 G - L IY0\nSCRAMBLE  S K R AE1 M - B AH0 L\nSCRAMBLED  S K R AE1 M - B AH0 L D\nSCRAMBLES  S K R AE1 M - B AH0 L Z\nSCRAMBLING  S K R AE1 M - B AH0 L - IH0 NG\nSCRAMBLING(2)  S K R AE1 M - B L IH0 NG\nSCRANTON  S K R AE1 N - T AH0 N\nSCRAP  S K R AE1 P\nSCRAPBOOK  S K R AE1 P - B UH2 K\nSCRAPBOOKS  S K R AE1 P - B UH2 K S\nSCRAPE  S K R EY1 P\nSCRAPED  S K R EY1 P T\nSCRAPER  S K R EY1 - P ER0\nSCRAPERS  S K R EY1 - P ER0 Z\nSCRAPES  S K R EY1 P S\nSCRAPING  S K R EY1 - P IH0 NG\nSCRAPINGS  S K R EY1 - P IH0 NG Z\nSCRAPIRON  S K R AE1 - P AY2 - ER0 N\nSCRAPPED  S K R AE1 P T\nSCRAPPING  S K R AE1 - P IH0 NG\nSCRAPPY  S K R AE1 - P IY0\nSCRAPS  S K R AE1 P S\nSCRATCH  S K R AE1 CH\nSCRATCHED  S K R AE1 CH T\nSCRATCHES  S K R AE1 - CH AH0 Z\nSCRATCHES(2)  S K R AE1 - CH IH0 Z\nSCRATCHING  S K R AE1 - CH IH0 NG\nSCRATCHY  S K R AE1 - CH IY0\nSCRAWL  S K R AO1 L\nSCRAWLED  S K R AO1 L D\nSCRAWNY  S K R AO1 - N IY0\nSCREAM  S K R IY1 M\nSCREAMED  S K R IY1 M D\nSCREAMER  S K R IY1 - M ER0\nSCREAMERS  S K R IY1 - M ER0 Z\nSCREAMING  S K R IY1 - M IH0 NG\nSCREAMINGLY  S K R IY1 - M IH0 NG - L IY0\nSCREAMS  S K R IY1 M Z\nSCREECH  S K R IY1 CH\nSCREECHED  S K R IY1 CH T\nSCREECHES  S K R IY1 - CH IH0 Z\nSCREECHING  S K R IY1 - CH IH0 NG\nSCREED  S K R IY1 D\nSCREEN  S K R IY1 N\nSCREENED  S K R IY1 N D\nSCREENER  S K R IY1 - N ER0\nSCREENERS  S K R IY1 - N ER0 Z\nSCREENING  S K R IY1 - N IH0 NG\nSCREENINGS  S K R IY1 - N IH0 NG Z\nSCREENPLAY  S K R IY1 N - P L EY2\nSCREENPLAYS  S K R IY1 N - P L EY2 Z\nSCREENS  S K R IY1 N Z\nSCREENWRITER  S K R IY1 N - R AY2 - T ER0\nSCREENWRITERS  S K R IY1 N - R AY2 - T ER0 Z\nSCREENWRITING  S K R IY1 N - R AY2 - T IH0 NG\nSCREW  S K R UW1\nSCREWBALL  S K R UW1 - B AO2 L\nSCREWDRIVER  S K R UW1 - D R AY2 - V ER0\nSCREWDRIVERS  S K R UW1 - D R AY2 - V ER0 Z\nSCREWED  S K R UW1 D\nSCREWING  S K R UW1 - IH0 NG\nSCREWS  S K R UW1 Z\nSCREWY  S K R UW1 - IY0\nSCRIBBLE  S K R IH1 - B AH0 L\nSCRIBBLED  S K R IH1 - B AH0 L D\nSCRIBBLER  S K R IH1 - B L ER0\nSCRIBBLERS  S K R IH1 - B L ER0 Z\nSCRIBBLES  S K R IH1 - B AH0 L Z\nSCRIBBLING  S K R IH1 - B AH0 L - IH0 NG\nSCRIBBLING(2)  S K R IH1 - B L IH0 NG\nSCRIBE  S K R AY1 B\nSCRIBER  S K R AY1 - B ER0\nSCRIBES  S K R AY1 B Z\nSCRIBNER  S K R IH1 B - N ER0\nSCRIBNER'S  S K R IH1 B - N ER0 Z\nSCRIBNERS  S K R IH1 B - N ER0 Z\nSCRIMGEOUR  S K R IH1 M - G AO0 R\nSCRIMMAGE  S K R IH1 - M IH0 JH\nSCRIMP  S K R IH1 M P\nSCRIMPING  S K R IH1 M - P IH0 NG\nSCRIMSHAW  S K R IH1 M - SH AO2\nSCRIP  S K R IH1 P\nSCRIPP  S K R IH1 P\nSCRIPP'S  S K R IH1 P S\nSCRIPPS  S K R IH1 P S\nSCRIPT  S K R IH1 P T\nSCRIPTED  S K R IH1 P - T IH0 D\nSCRIPTS  S K R IH1 P T S\nSCRIPTS(2)  S K R IH1 P S\nSCRIPTURAL  S K R IH1 P - CH ER0 - AH0 L\nSCRIPTURE  S K R IH1 P - CH ER0\nSCRIPTURES  S K R IH1 P - CH ER0 Z\nSCRIPTWRITER  S K R IH1 P T - R AY2 - T ER0\nSCRIPTWRITERS  S K R IH1 P T - R AY2 - T ER0 Z\nSCRIPTWRITING  S K R IH1 P T - R AY2 - T IH0 NG\nSCRITCHFIELD  S K R IH1 CH - F IY0 L D\nSCRIVEN  S K R IH1 - V IH0 N\nSCRIVENER  S K R IH1 V - N ER0\nSCRIVENS  S K R AY1 - V AH0 N Z\nSCRIVER  S K R AY1 - V ER0\nSCRIVNER  S K R IH1 V - N ER0\nSCROD  S K R AA1 D\nSCROGGIN  S K R AA1 - G IH0 N\nSCROGGINS  S K R AA1 - G IH0 N Z\nSCROGGS  S K R AA1 G Z\nSCROGHAM  S K R AA1 G - HH AH0 M\nSCROLL  S K R OW1 L\nSCROLLS  S K R OW1 L Z\nSCRONCE  S K R AA1 N S\nSCROOGE  S K R UW1 JH\nSCROTTEN  S K R AO1 - T IH0 N\nSCROUNGE  S K R AW1 N JH\nSCROUNGED  S K R AW1 N JH D\nSCROUNGING  S K R AW1 N - JH IH0 NG\nSCRUB  S K R AH1 B\nSCRUBBED  S K R AH1 B D\nSCRUBBER  S K R AH1 - B ER0\nSCRUBBERS  S K R AH1 - B ER0 Z\nSCRUBBING  S K R AH1 - B IH0 NG\nSCRUBBY  S K R AH1 - B IY0\nSCRUFFY  S K R AH1 - F IY0\nSCRUGGS  S K R AH1 G Z\nSCRUNCH  S K R AH1 N CH\nSCRUNCHED  S K R AH1 N CH T\nSCRUPLE  S K R UW1 - P AH0 L\nSCRUPLES  S K R UW1 - P AH0 L Z\nSCRUPULOUS  S K R UW1 - P Y AH0 - L AH0 S\nSCRUPULOUSLY  S K R UW1 - P Y AH0 - L AH0 S - L IY0\nSCRUTINIZE  S K R UW1 - T AH0 - N AY2 Z\nSCRUTINIZED  S K R UW1 - T AH0 - N AY2 Z D\nSCRUTINIZES  S K R UW1 - T AH0 - N AY2 - Z IH0 Z\nSCRUTINIZING  S K R UW1 - T AH0 - N AY2 - Z IH0 NG\nSCRUTINY  S K R UW1 - T AH0 - N IY0\nSCRUTON  S K R UW1 - T AH0 N\nSCRUTTON  S K R AH1 - T AH0 N\nSCRUTTON'S  S K R AH1 - T AH0 N Z\nSCUBA  S K UW1 - B AH0\nSCUD  S K AH1 D\nSCUDDER  S K AH1 - D ER0\nSCUDDER'S  S K AH1 - D ER0 Z\nSCUDERI  S K UW0 - D EH1 - R IY0\nSCUDS  S K AH1 D Z\nSCUFF  S K AH1 F\nSCUFFED  S K AH1 F T\nSCUFFLE  S K AH1 - F AH0 L\nSCUFFLED  S K AH1 - F AH0 L D\nSCUFFLES  S K AH1 - F AH0 L Z\nSCULL  S K AH1 L\nSCULLEY  S K AH1 - L IY0\nSCULLEY'S  S K AH1 - L IY0 Z\nSCULLIN  S K AH1 - L IH0 N\nSCULLION  S K AH1 L - Y AH0 N\nSCULLY  S K AH1 - L IY0\nSCULPT  S K AH1 L P T\nSCULPTED  S K AH1 L P - T IH0 D\nSCULPTING  S K AH1 L P - T IH0 NG\nSCULPTOR  S K AH1 L P - T ER0\nSCULPTORS  S K AH1 L P - T ER0 Z\nSCULPTS  S K AH1 L P T S\nSCULPTURAL  S K AH1 L P - CH ER0 - AH0 L\nSCULPTURE  S K AH1 L P - CH ER0\nSCULPTURED  S K AH1 L P - CH ER0 D\nSCULPTURES  S K AH1 L P - CH ER0 Z\nSCULPTURING  S K AH1 L P - T ER0 - IH0 NG\nSCULPTURING(2)  S K AH1 L P - CH ER0 - IH0 NG\nSCUM  S K AH1 M\nSCUPPER  S K AH1 - P ER0\nSCURDALL  S K ER1 - D AA0 L\nSCURDELL  S K ER1 - D EH0 L\nSCURDELL(2)  S K ER0 - D EH1 L\nSCURLOCK  S K ER1 - L AH0 K\nSCURRIED  S K ER1 - IY0 D\nSCURRILOUS  S K ER1 - AH0 - L AH0 S\nSCURRY  S K ER1 - IY0\nSCURRYING  S K ER1 - IY0 - IH0 NG\nSCUTT  S K AH1 T\nSCUTTLE  S K AH1 - T AH0 L\nSCUTTLEBUTT  S K AH1 - T AH0 L - B AH2 T\nSCUTTLED  S K AH1 - T AH0 L D\nSCUTTLING  S K AH1 - T AH0 L - IH0 NG\nSCUTTLING(2)  S K AH1 T - L IH0 NG\nSCYTHIAN  S IH1 - TH IY0 - AH0 N\nSCZEPANSKI  S IH0 - P AE1 N S - K IY0\nSDN  EH1 S - D IY1 - EH1 N\nSE  S AW2 TH - IY1 S T\nSE(2)  S EY1\nSE(3)  EH1 - S IY1\nSEA  S IY1\nSEA'S  S IY1 Z\nSEABAUGH  S IY1 - B AO2\nSEABEACH  S IY1 - B IY2 CH\nSEABED  S IY1 - B EH2 D\nSEABEE  S IY1 - B IY0\nSEABEES  S IY1 - B IY0 Z\nSEABERG  S IY1 - B ER0 G\nSEABERRY  S IY1 - B EH2 - R IY0\nSEABERT  S IY1 - B ER0 T\nSEABOARD  S IY1 - B AO2 R D\nSEABOLD  S IY1 - B OW2 L D\nSEABOLT  S IY1 - B OW2 L T\nSEABORN  S IY1 - B ER0 N\nSEABORNE  S IY1 - B AO2 R N\nSEABRIGHT  S IY1 - B R AY2 T\nSEABROOK  S IY1 - B R UH2 K\nSEABROOK'S  S IY1 - B R UH2 K S\nSEABROOKS  S IY1 - B R UH2 K S\nSEABURG  S IY1 - B ER0 G\nSEABURY  S IY1 - B EH2 - R IY0\nSEACO  S IY1 - K OW0\nSEACOAST  S IY1 - K OW2 S T\nSEADER  S IY1 - D ER0\nSEADRIFT  S IY1 - D R IH2 F T\nSEAFARER  S IY1 - F EH2 - R ER0\nSEAFARERS  S IY1 - F EH2 - R ER0 Z\nSEAFIRST  S IY1 - F ER2 S T\nSEAFOOD  S IY1 - F UW2 D\nSEAFOODS  S IY1 - F UW2 D Z\nSEAFORD  S IY1 - F ER0 D\nSEAFRONT  S IY1 - F R AH0 N T\nSEAGA  S IY1 - G AH0\nSEAGAL  S IH0 - G AA1 L\nSEAGATE  S IY1 - G EY2 T\nSEAGATE'S  S IY1 - G EY2 T S\nSEAGER  S IY1 - G ER0\nSEAGLE  S IY1 - G AH0 L\nSEAGO  S IY1 - G OW2\nSEAGOING  S IY1 - G OW2 - IH0 NG\nSEAGRAM  S IY1 - G R AH0 M\nSEAGRAM'S  S IY1 - G R AH0 M Z\nSEAGRAMS  S IY1 - G R AH0 M Z\nSEAGRAMS'  S IY1 - G R AH0 M Z\nSEAGRAVE  S IY1 - G R EY2 V\nSEAGRAVES  S IY1 - G R EY2 V Z\nSEAGREN  S IY1 - G R EH0 N\nSEAGROVE  S IY1 - G R OW2 V\nSEAGROVES  S IY1 - G R OW2 V Z\nSEAGULL  S IY1 - G AH2 L\nSEAGULL'S  S IY1 - G AH2 L Z\nSEAGULLS  S IY1 - G AH2 L Z\nSEAHAWK  S IY1 - HH AO2 K\nSEAHAWKS  S IY1 - HH AO2 K S\nSEAHOLM  S IY1 - HH OW2 M\nSEAL  S IY1 L\nSEAL'S  S IY1 L Z\nSEALAND  S IY1 - L AE2 N D\nSEALAND'S  S IY1 - L AE2 N D Z\nSEALANT  S IY1 - L AH0 N T\nSEALANTS  S IY1 - L AH0 N T S\nSEALE  S IY1 L\nSEALED  S IY1 L D\nSEALER  S IY1 - L ER0\nSEALES  S IY1 L Z\nSEALEY  S IY1 - L IY0\nSEALEY'S  S IY1 - L IY0 Z\nSEALIFT  S IY1 - L IH2 F T\nSEALING  S IY1 - L IH0 NG\nSEALOCK  S IY1 - L AA2 K\nSEALS  S IY1 L Z\nSEALTEST  S IY1 L - T EH2 S T\nSEALY  S IY1 - L IY0\nSEAM  S IY1 M\nSEAMAN  S IY1 - M AH0 N\nSEAMAN'S  S IY1 - M AH0 N Z\nSEAMANS  S IY1 - M AH0 N Z\nSEAMEN  S IY1 - M AH0 N\nSEAMEN'S  S IY1 - M AH0 N Z\nSEAMLESS  S IY1 M - L AH0 S\nSEAMLESSLY  S IY1 M - L AH0 S - L IY0\nSEAMON  S IY1 - M AH0 N\nSEAMONS  S IY1 - M AH0 N Z\nSEAMS  S IY1 M Z\nSEAMSTER  S IY1 M - S T ER0\nSEAMSTRESS  S IY1 M - S T R IH0 S\nSEAMSTRESSES  S IY1 M - S T R AH0 - S AH0 Z\nSEAMUS  SH EY1 - M AH0 S\nSEAMY  S IY1 - M IY0\nSEAN  SH AO1 N\nSEAN'S  SH AO1 N Z\nSEANCE  S EY1 - AA0 N S\nSEANOR  S IY1 - N ER0\nSEAPORT  S IY1 - P AO2 R T\nSEAPORTS  S IY1 - P AO2 R T S\nSEAPOWER  S IY1 - P AW2 - ER0\nSEAQ  S IY1 K\nSEAQUEST  S IY1 - K W EH2 S T\nSEAQUIST  S IY1 - K W IH2 S T\nSEAR  S IH1 R\nSEARCH  S ER1 CH\nSEARCHED  S ER1 CH T\nSEARCHER  S ER1 - CH ER0\nSEARCHERS  S ER1 - CH ER0 Z\nSEARCHES  S ER1 - CH IH0 Z\nSEARCHING  S ER1 - CH IH0 NG\nSEARCHLIGHT  S ER1 CH - L AY2 T\nSEARCHLIGHTS  S ER1 CH - L AY2 T S\nSEARED  S IH1 R D\nSEARFOSS  S ER1 - F AH0 S\nSEARIGHT  S IH1 - R AY0 T\nSEARING  S IH1 - R IH0 NG\nSEARL  S ER1 L\nSEARLE  S ER1 L\nSEARLE'S  S ER1 L Z\nSEARLES  S ER1 L Z\nSEARLS  S ER1 L Z\nSEARS  S IH1 R Z\nSEARS'  S IH1 R Z\nSEARS'S  S IH1 R - Z IH0 Z\nSEARS'S(2)  S IH1 R Z\nSEARSON  S ER1 - S AH0 N\nSEAS  S IY1 Z\nSEASE  S IY1 Z\nSEASHELL  S IY1 - SH EH2 L\nSEASHELLS  S IY1 - SH EH2 L Z\nSEASHORE  S IY1 - SH AO2 R\nSEASICK  S IY1 - S IH2 K\nSEASIDE  S IY1 - S AY2 D\nSEASON  S IY1 - Z AH0 N\nSEASON'S  S IY1 - Z AH0 N Z\nSEASONABLE  S IY1 - Z AH0 N - AH0 - B AH0 L\nSEASONAL  S IY1 - Z AH0 - N AH0 L\nSEASONALITY  S IY1 - Z AH0 - N AE2 - L IH0 - T IY0\nSEASONALITY(2)  S IY0 - Z AH0 - N AE1 - L IH0 - T IY0\nSEASONALLY  S IY1 - Z AH0 N - AH0 - L IY0\nSEASONALLY(2)  S IY1 Z - N AH0 - L IY0\nSEASONED  S IY1 - Z AH0 N D\nSEASONING  S IY1 - Z AH0 N - IH0 NG\nSEASONINGS  S IY1 - Z AH0 N - IH0 NG Z\nSEASONS  S IY1 - Z AH0 N Z\nSEASTRAND  S IY1 S T - R AE2 N D\nSEASTROM  S IY1 S - T R AH0 M\nSEAT  S IY1 T\nSEAT'S  S IY1 T S\nSEATBELT  S IY1 T - B EH2 L T\nSEATBELTS  S IY1 T - B EH2 L T S\nSEATED  S IY1 - T AH0 D\nSEATED(2)  S IY1 - T IH0 D\nSEATER  S IY1 - T ER0\nSEATING  S IY1 - T IH0 NG\nSEATINGS  S IY1 - T IH0 NG Z\nSEATO  S IY1 - T OW0\nSEATON  S IY1 - T AH0 N\nSEATRAIN  S IY1 - T R EY2 N\nSEATS  S IY1 T S\nSEATTLE  S IY0 - AE1 - T AH0 L\nSEATTLE'S  S IY0 - AE1 - T AH0 L Z\nSEAVER  S IY1 - V ER0\nSEAVERS  S IY1 - V ER0 Z\nSEAVEY  S IY1 - V IY0\nSEAWARD  S IY1 - W ER0 D\nSEAWATER  S IY1 - W AA2 - T ER0\nSEAWATER(2)  S IY1 - W AO2 - T ER0\nSEAWAY  S IY1 - W EY2\nSEAWEED  S IY1 - W IY2 D\nSEAWEEDS  S IY1 - W IY2 D Z\nSEAWELL  S IY1 - W EH2 L\nSEAWOLF  S IY1 - W UH2 L F\nSEAWOLF'S  S IY1 - W UH2 L F S\nSEAWORTHY  S IY1 - W AO2 R - DH IY0\nSEAWRIGHT  S IY1 - R AY2 T\nSEAY  S EY1\nSEBACEOUS  S AH0 - B EY1 - SH AH0 S\nSEBALD  S IY1 - B AO0 L D\nSEBASTIAN  S AH0 - B AE1 - S CH AH0 N\nSEBASTIAN'S  S AH0 - B AE1 - S CH AH0 N Z\nSEBASTIANA  S AH0 - B AE2 - S T IY0 - AA1 - N AH0\nSEBASTIANE  S AH0 - B AE2 - S T IY0 - EH1 N\nSEBASTIANI  S AH0 - B AE2 - S T IY0 - AA1 - N IY0\nSEBBY  S EH1 - B IY0\nSEBEK  S EH1 - B IH0 K\nSEBER  S IY1 - B ER0\nSEBERT  S EH1 - B ER0 T\nSEBESTA  S EH0 - B EH1 - S T AH0\nSEBI  S EH1 - B IY0\nSEBO  S EH1 - B OW0\nSEBOLD  S EH1 - B OW0 L D\nSEBREE  S IH0 - B R IY1\nSEBRING  S IY1 - B R IH0 NG\nSEC  S EH1 K\nSECADA  S AH0 - K AA1 - D AH0\nSECAUCUS  S IH0 - K AO1 - K AH0 S\nSECCHIA  S EH1 - K IY0 - AH0\nSECEDE  S IH0 - S IY1 D\nSECEDED  S IH0 - S IY1 - D IH0 D\nSECEDING  S IH0 - S IY1 - D IH0 NG\nSECESSION  S IH0 - S EH1 - SH AH0 N\nSECESSIONIST  S IH0 - S EH1 - SH AH0 N - IH0 S T\nSECESSIONISTS  S IH0 - S EH1 - SH AH0 N - IH0 S T S\nSECESSIONISTS(2)  S IH0 - S EH1 - SH AH0 N - IH0 S S\nSECESSIONISTS(3)  S IH0 - S EH1 - SH AH0 N - IH0 S\nSECHLER  S EH1 K - L ER0\nSECHREST  S EH1 - K ER0 - IH0 S T\nSECHRIST  S EH1 - K ER0 - IH0 S T\nSECHRIST(2)  S IY1 - K R IH2 S T\nSECK  S EH1 K\nSECKEL  S EH1 - K AH0 L\nSECKINGER  S EH1 - K IH0 - NG ER0\nSECKLER  S EH1 K - L ER0\nSECKMAN  S EH1 K - M AH0 N\nSECLUDE  S AH0 - K L UW1 D\nSECLUDED  S IH0 - K L UW1 - D IH0 D\nSECLUSION  S IH0 - K L UW1 - ZH AH0 N\nSECO  S EH1 - K OW0\nSECOM  S EH1 - K AA0 M\nSECOMERICA  S EH2 - K OW0 - M EH1 - R IH0 - K AH0\nSECOND  S EH1 - K AH0 N D\nSECOND'S  S EH1 - K AH0 N D Z\nSECOND(2)  S EH1 - K AH0 N\nSECONDARIES  S EH1 - K AH0 N - D EH2 - R IY0 Z\nSECONDARILY  S EH2 - K AH0 N - D EH1 - R AH0 - L IY0\nSECONDARY  S EH1 - K AH0 N - D EH2 - R IY0\nSECONDED  S EH1 - K AH0 N - D IH0 D\nSECONDED(2)  S EH1 - K AH0 - N AH0 D\nSECONDHAND  S EH1 - K AH0 N D - HH AE2 N D\nSECONDHAND(2)  S EH1 - K AH0 N - HH AE2 N D\nSECONDLY  S EH1 - K AH0 N D - L IY0\nSECONDLY(2)  S EH1 - K AH0 N - L IY0\nSECONDS  S EH1 - K AH0 N D Z\nSECONDS(2)  S EH1 - K AH0 N Z\nSECOR  S EH1 - K ER0\nSECORD  S IY1 - K AO0 R D\nSECORD'S  S IY1 - K AO0 R D Z\nSECOY  S EH1 - K OY0\nSECRECY  S IY1 - K R AH0 - S IY0\nSECREST  S EH1 - K ER0 - IH0 S T\nSECRET  S IY1 - K R AH0 T\nSECRET(2)  S IY1 - K R IH0 T\nSECRETARIAL  S EH2 - K R AH0 - T EH1 - R IY0 - AH0 L\nSECRETARIAT  S EH2 - K R IH0 - T EH1 - R IY0 - AH0 T\nSECRETARIES  S EH1 - K R AH0 - T EH2 - R IY0 Z\nSECRETARIES'  S EH1 - K R IH0 - T EH2 - R IY0 Z\nSECRETARY  S EH1 - K R AH0 - T EH2 - R IY0\nSECRETARY'S  S EH1 - K R AH0 - T EH2 - R IY0 Z\nSECRETE  S IH0 - K R IY1 T\nSECRETED  S AH0 - K R IY1 - T AH0 D\nSECRETION  S AH0 - K R IY1 - SH AH0 N\nSECRETIONS  S AH0 - K R IY1 - SH AH0 N Z\nSECRETIVE  S IY1 - K R AH0 - T IH0 V\nSECRETIVENESS  S IY1 - K R AH0 - T IH0 V - N AH0 S\nSECRETLY  S IY1 - K R IH0 T - L IY0\nSECRETS  S IY1 - K R AH0 T S\nSECRETS(2)  S IY1 - K R IH0 T S\nSECRIST  S EH1 - K ER0 - IH0 S T\nSECT  S EH1 K T\nSECT'S  S EH1 K T S\nSECTARIAN  S EH0 K - T EH1 - R IY0 - AH0 N\nSECTARIANISM  S EH0 K - T EH1 - R IY0 - AH0 - N IH2 - Z AH0 M\nSECTEUR  S EH0 K - T UW1 R\nSECTION  S EH1 K - SH AH0 N\nSECTION'S  S EH1 K - SH AH0 N Z\nSECTIONAL  S EH1 K - SH AH0 - N AH0 L\nSECTIONED  S EH1 K - SH AH0 N D\nSECTIONING  S EH1 K - SH AH0 N - IH0 NG\nSECTIONS  S EH1 K - SH AH0 N Z\nSECTOR  S EH1 K - T ER0\nSECTOR'S  S EH1 K - T ER0 Z\nSECTORAL  S EH1 K - T ER0 - AH0 L\nSECTORS  S EH1 K - T ER0 Z\nSECTS  S EH1 K T S\nSECULAR  S EH1 - K Y AH0 - L ER0\nSECULARISM  S EH1 - K Y AH0 - L ER0 - IH2 - Z AH0 M\nSECULARIST  S EH1 - K Y AH0 - L ER0 - IH0 S T\nSECULARISTS  S EH1 - K Y AH0 - L ER0 - IH0 S T S\nSECULARISTS(2)  S EH1 - K Y AH0 - L ER0 - IH0 S S\nSECULARISTS(3)  S EH1 - K Y AH0 - L ER0 - IH0 S\nSECULARIZED  S EH1 - K Y AH0 - L ER0 - AY0 Z D\nSECULOW  S EH1 - K Y AH0 - L OW0\nSECUNDA  S IH0 - K AH1 N - D AH0\nSECURE  S IH0 - K Y UH1 R\nSECURED  S IH0 - K Y UH1 R D\nSECURELY  S IH0 - K Y UH1 R - L IY0\nSECURES  S IH0 - K Y UH1 R Z\nSECURING  S IH0 - K Y UH1 - R IH0 NG\nSECURITIES  S IH0 - K Y UH1 - R AH0 - T IY0 Z\nSECURITIES'  S IH0 - K Y UH1 - R AH0 - T IY0 Z\nSECURITIZATION  S IH0 - K Y UH2 - R AH0 - T AH0 - Z EY1 - SH AH0 N\nSECURITIZE  S IH0 - K Y UH1 - R AH0 - T AY2 Z\nSECURITIZED  S IH0 - K Y UH1 - R AH0 - T AY2 Z D\nSECURITIZING  S IH0 - K Y UH1 - R AH0 - T AY2 - Z IH0 NG\nSECURITY  S IH0 - K Y UH1 - R AH0 - T IY0\nSECURITY'S  S IH0 - K Y UH1 - R AH0 - T IY0 Z\nSEDA  S EY1 - D AH0\nSEDAM  S EH1 - D AH0 M\nSEDAN  S AH0 - D AE1 N\nSEDANO  S EY0 - D AA1 - N OW0\nSEDANS  S IH0 - D AE1 N Z\nSEDATE  S IH0 - D EY1 T\nSEDATED  S IH0 - D EY1 - T IH0 D\nSEDATING  S AH0 - D EY1 - T IH0 NG\nSEDATION  S AH0 - D EY1 - SH AH0 N\nSEDATIVE  S EH1 - D AH0 - T IH0 V\nSEDBERRY  S EH1 D - B EH2 - R IY0\nSEDCO  S EH1 D - K OW0\nSEDDON  S EH1 - D AH0 N\nSEDENTARY  S EH1 - D AH0 N - T EH2 - R IY0\nSEDER  S EY1 - D ER0\nSEDGE  S EH1 JH\nSEDGEWICK  S EH1 JH - W IH0 K\nSEDGLEY  S EH1 JH - L IY0\nSEDGWICK  S EH1 JH - W IH0 K\nSEDILLO  S EH0 - D IH1 - L OW0\nSEDIMENT  S EH1 - D AH0 - M AH0 N T\nSEDIMENTARY  S EH2 - D AH0 - M EH1 N - T ER0 - IY0\nSEDIMENTATION  S EH2 - D AH0 - M AH0 N - T EY1 - SH AH0 N\nSEDIMENTS  S EH1 - D AH0 - M AH0 N T S\nSEDITA  S EH0 - D IY1 - T AH0\nSEDITION  S IH0 - D IH1 - SH AH0 N\nSEDITIOUS  S IH0 - D IH1 - SH AH0 S\nSEDIVY  S EH1 - D IH0 - V IY0\nSEDLACEK  S EH1 D - L AH0 - S IH0 K\nSEDLACK  S EH1 D - L AH0 K\nSEDLAK  S EH1 D - L AH0 K\nSEDLAR  S EH1 D - L ER0\nSEDLER  S EH1 D - L ER0\nSEDLOCK  S EH1 D - L AH0 K\nSEDONA  S AH0 - D OW1 - N AH0\nSEDOR  S EH0 - D AO1 R\nSEDORE  S EH0 - D AO1 - R IY0\nSEDUCE  S IH0 - D UW1 S\nSEDUCED  S IH0 - D UW1 S T\nSEDUCER  S IH0 - D UW1 - S ER0\nSEDUCING  S IH0 - D UW1 - S IH0 NG\nSEDUCTION  S IH0 - D AH1 K - SH AH0 N\nSEDUCTIVE  S IH0 - D AH1 K - T IH0 V\nSEDUCTIVELY  S AH0 - D AH1 K - T IH0 V - L IY0\nSEDUM  S EH1 - D AH0 M\nSEDUMS  S EH1 - D AH0 M Z\nSEDWICK  S EH1 D - W IH0 K\nSEE  S IY1\nSEE-KIONG  S IY1 - K Y AO1 NG\nSEEBACH  S IY1 - B AA2 K\nSEEBECK  S IY1 - B EH2 K\nSEEBER  S IY1 - B ER0\nSEEBERGER  S IY1 - B ER0 - G ER0\nSEEBOLD  S IY1 - B OW2 L D\nSEEBURGER  S IY1 - B ER0 - G ER0\nSEED  S IY1 D\nSEEDEATER  S IY1 - D IY2 - T ER0\nSEEDEATERS  S IY1 - D IY2 - T ER0 Z\nSEEDED  S IY1 - D AH0 D\nSEEDED(2)  S IY1 - D IH0 D\nSEEDING  S IY1 - D IH0 NG\nSEEDLING  S IY1 D - L IH0 NG\nSEEDLINGS  S IY1 D - L IH0 NG Z\nSEEDORF  S IY1 - D AO0 R F\nSEEDPOD  S IY1 D - P AA2 D\nSEEDS  S IY1 D Z\nSEEDSMAN  S IY1 D Z - M AH0 N\nSEEDY  S IY1 - D IY0\nSEEFELD  S IY1 - F EH2 L D\nSEEFELDT  S IY1 - F IH0 L T\nSEEGARS  S IY1 - G ER0 Z\nSEEGER  S IY1 - G ER0\nSEEGERS  S IY1 - G ER0 Z\nSEEGERT  S IY1 - G ER0 T\nSEEGMILLER  S IY1 G - M IH0 - L ER0\nSEEHAFER  S IY1 - HH AH0 - F ER0\nSEEHUSEN  S IY1 - HH UW0 - S AH0 N\nSEEING  S IY1 - IH0 NG\nSEEK  S IY1 K\nSEEKAMP  S IY1 - K AE2 M P\nSEEKER  S IY1 - K ER0\nSEEKER'S  S IY1 - K ER0 Z\nSEEKERS  S IY1 - K ER0 Z\nSEEKING  S IY1 - K IH0 NG\nSEEKINS  S IY1 - K IH0 N Z\nSEEKONK  S IY1 - K AA0 NG K\nSEEKS  S IY1 K S\nSEEL  S IY1 L\nSEELBACH  S IY1 L - B AA2 K\nSEELERT  S IY1 - L ER0 T\nSEELEY  S IY1 - L IY0\nSEELIG  S IY1 - L IH0 G\nSEELIG'S  S IY1 - L IH0 G Z\nSEELING  S IY1 - L IH0 NG\nSEELINGER  S IY1 - L IH0 - NG ER0\nSEELMAN  S IY1 L - M AH0 N\nSEELY  S IY1 - L IY0\nSEELYE  S IY1 - L AY2\nSEEM  S IY1 M\nSEEMA  S IY1 - M AA0\nSEEMALA  S IY1 - M AH0 - L AH0\nSEEMAN  S IY1 - M AH0 N\nSEEMANN  S IY1 - M AH0 N\nSEEMED  S IY1 M D\nSEEMING  S IY1 - M IH0 NG\nSEEMINGLY  S IY1 - M IH0 NG - L IY0\nSEEMS  S IY1 M Z\nSEEN  S IY1 N\nSEEP  S IY1 P\nSEEPAGE  S IY1 - P IH0 JH\nSEEPED  S IY1 P T\nSEEPING  S IY1 - P IH0 NG\nSEEPS  S IY1 P S\nSEER  S IY1 R\nSEERS  S IY1 R Z\nSEERY  S IY1 - R IY0\nSEES  S IY1 Z\nSEESAW  S IY1 - S AO2\nSEESAWED  S IY1 - S AO2 D\nSEESAWING  S IY1 - S AO2 - IH0 NG\nSEESE  S IY1 Z\nSEETHE  S IY1 DH\nSEETHING  S IY1 - TH IH0 NG\nSEETIN  S IY1 - T IH0 N\nSEETON  S IY1 - T AH0 N\nSEEVER  S IY1 - V ER0\nSEEVERS  S IY1 - V ER0 Z\nSEEWALD  S IY1 - W AO2 L D\nSEFCIK  S EH1 F - S IH0 K\nSEFF  S EH1 F\nSEFTON  S EH1 F - T AH0 N\nSEGA  S IY1 - G AH0\nSEGA'S  S EY1 - G AH0 Z\nSEGA(2)  S EY1 - G AH0\nSEGAL  S IY1 - G AH0 L\nSEGALAS  S EH1 - G AH0 - L AH0 S\nSEGALL  S EY0 - G AA1 L\nSEGAR  S IY1 - G ER0\nSEGARRA  S EH0 - G AA1 - R AH0\nSEGARS  S EH1 - G ER0 Z\nSEGE  S EH1 JH\nSEGEL  S IY1 - G AH0 L\nSEGER  S IY1 - G ER0\nSEGERS  S IY1 - G ER0 Z\nSEGERSTROM  S EH1 - G ER0 - S T R AH0 M\nSEGLER  S EH1 G - L ER0\nSEGMENT  S EH1 G - M AH0 N T\nSEGMENT'S  S EH1 G - M AH0 N T S\nSEGMENT(2)  S EH2 G - M EH1 N T\nSEGMENTATION  S EH2 G - M AH0 N - T EY1 - SH AH0 N\nSEGMENTED  S EH1 G - M EH2 N - T IH0 D\nSEGMENTED(2)  S EH2 G - M EH1 N - T IH0 D\nSEGMENTED(3)  S EH1 G - M EH2 - N IH0 D\nSEGMENTED(4)  S EH2 G - M EH1 - N IH0 D\nSEGMENTS  S EH1 G - M AH0 N T S\nSEGMENTS(2)  S EH2 G - M EH1 N T S\nSEGNER  S EH1 G - N ER0\nSEGO  S IY1 - G OW2\nSEGOVIA  S EH0 - G OW1 - V IY0 - AH0\nSEGRAVES  S EY0 - G R AA1 - V EH0 S\nSEGREGATE  S EH1 - G R AH0 - G EY2 T\nSEGREGATED  S EH1 - G R AH0 - G EY2 - T IH0 D\nSEGREGATING  S EH1 - G R IH0 - G EY2 - T IH0 NG\nSEGREGATION  S EH2 - G R AH0 - G EY1 - SH AH0 N\nSEGREGATIONIST  S EH2 - G R AH0 - G EY1 - SH AH0 N - IH0 S T\nSEGREGATIONISTS  S EH2 - G R AH0 - G EY1 - SH AH0 N - IH0 S T S\nSEGREGATIONISTS(2)  S EH2 - G R AH0 - G EY1 - SH AH0 N - IH0 S S\nSEGREGATIONISTS(3)  S EH2 - G R AH0 - G EY1 - SH AH0 N - IH0 S\nSEGREST  S EH1 - G ER0 - IH0 S T\nSEGREST(2)  S IY1 - G R EH2 S T\nSEGRETO  S EH0 - G R EH1 - T OW0\nSEGUE  S EH1 G\nSEGUIN  S AH0 - G IY1 N\nSEGUIN(2)  S IY1 - G AH0 N\nSEGUNDO  S EH2 - G UH1 N - D OW2\nSEGUR  S EY0 - G UH1 R\nSEGURA  S EY0 - G UH1 - R AH0\nSEGUROS  S EY2 - G Y ER1 - OW0 Z\nSEHER  S EH1 - HH ER0\nSEHNERT  S EH1 - N ER0 T\nSEHORN  S EH1 - HH ER0 N\nSEHR  S EH1 R\nSEIB  S IY1 B\nSEIBEL  S AY1 - B AH0 L\nSEIBER  S AY1 - B ER0\nSEIBERLICH  S AY1 - B ER0 - L IH0 K\nSEIBERLING  S AY1 - B ER0 - L IH0 NG\nSEIBERT  S AY1 - B ER0 T\nSEIBOLD  S AY1 - B OW2 L D\nSEIBU  S AY1 - B UW0\nSEID  S AY1 D\nSEIDE  S AY1 D\nSEIDEL  S AY1 - D AH0 L\nSEIDELL  S AY1 - D AH0 L\nSEIDELMAN  S AY1 - D AH0 L - M AH0 N\nSEIDEN  S AY1 - D AH0 N\nSEIDENBERG  S AY1 - D AH0 N - B ER0 G\nSEIDER  S AY1 - D ER0\nSEIDERS  S AY1 - D ER0 Z\nSEIDL  S AY1 - D AH0 L\nSEIDLER  S AY1 D - L ER0\nSEIDMAN  S AY1 D - M AH0 N\nSEIDMAN'S  S AY1 D - M AH0 N Z\nSEIDNER  S AY1 D - N ER0\nSEIER  S AY1 - ER0\nSEIF  S IY1 F\nSEIFE  S IY1 F\nSEIFER  S AY1 - F ER0\nSEIFERT  S AY1 - F ER0 T\nSEIFFERT  S AY1 - F ER0 T\nSEIFRIED  S AY1 - F ER0 - IY0 D\nSEIGAL  S IY1 - G AH0 L\nSEIGE  S IY1 JH\nSEIGEL  S AY1 - G AH0 L\nSEIGEL(2)  S IY1 - G AH0 L\nSEIGER  S AY1 - G ER0\nSEIGLE  S IY1 - G AH0 L\nSEIGLER  S AY1 - G AH0 - L ER0\nSEIGLER(2)  S IY1 - G AH0 - L ER0\nSEIGLER(3)  S IY1 G - L ER0\nSEIGNIORAGE  S IY2 G - N IY1 - ER0 - IH0 JH\nSEIJI  S EY1 - JH IY0\nSEIKI  S EY1 - K IY0\nSEIKO  S EY1 - K OW0\nSEIL  S AY1 L\nSEILER  S AY1 - L ER0\nSEILS  S AY1 L Z\nSEIM  S AY1 M\nSEIN  S AY1 N\nSEINE  S EY1 - N IY0\nSEINFELD  S AY1 N - F EH0 L D\nSEINFELD'S  S AY1 N - F EH0 L D Z\nSEIP  S IY1 P\nSEIPEL  S AY1 - P AH0 L\nSEIPLE  S IY1 - P AH0 L\nSEIPP  S IY1 P\nSEIS  S IY1 S\nSEISER  S AY1 - S ER0\nSEISMIC  S AY1 Z - M IH0 K\nSEISMOLOGIST  S AY2 Z - M AA1 - L AH0 - JH AH0 S T\nSEISMOLOGISTS  S AY2 Z - M AA1 - L AH0 - JH AH0 S T S\nSEISMOLOGISTS(2)  S AY2 Z - M AA1 - L AH0 - JH AH0 S S\nSEISMOLOGISTS(3)  S AY2 Z - M AA1 - L AH0 - JH AH0 S\nSEISMOLOGY  S AY2 Z - M AA1 - L AH0 - JH IY0\nSEITA  S EY1 - T AH0\nSEITEL  S IY1 - T EH2 L\nSEITER  S AY1 - T ER0\nSEITH  S IY1 TH\nSEITHER  S AY1 - DH ER0\nSEITMAN  S IY1 T - M AH0 N\nSEITTER  S AY1 - T ER0\nSEITZ  S AY1 T S\nSEITZINGER  S AY1 T - Z IH0 - NG ER0\nSEIVERT  S AY1 - V ER0 T\nSEIWERT  S AY1 - W ER0 T\nSEIX  S IY1 K S\nSEIXAS  S IY1 K - S AH0 S\nSEIYAKU  S EY2 - Y AA1 - K UW2\nSEIYU  S IY1 - Y UW0\nSEIZE  S IY1 Z\nSEIZED  S IY1 Z D\nSEIZES  S IY1 - Z IH0 Z\nSEIZING  S IY1 - Z IH0 NG\nSEIZURE  S IY1 - ZH ER0\nSEIZURES  S IY1 - ZH ER0 Z\nSEJM  S EY1 M\nSEKERAK  S EH1 - K ER0 - AH0 K\nSEKI  S EY1 - K IY0\nSEKISUI  S EY2 - K IH0 - S UW1 - IY0\nSEKULA  S IH0 - K UW1 - L AH0\nSEKULOW  S EH1 - K UW0 - L OW0\nSELA  S EH1 - L AH0\nSELANDER  S EH1 - L AH0 N - D ER0\nSELAS  S EH1 - L AH0 S\nSELASSIE  S AH0 - L AE1 - S IY0\nSELBE  S EH1 L B\nSELBERG  S EH1 L - B ER0 G\nSELBY  S EH1 L - B IY0\nSELCHOW  S EH1 L - CH AW0\nSELDA  S EH1 L - D AH0\nSELDANE  S EH1 L - D EY2 N\nSELDEN  S EH1 L - D AH0 N\nSELDERS  S EH1 L - D ER0 Z\nSELDIN  S EH1 L - D IH0 N\nSELDOM  S EH1 L - D AH0 M\nSELDON  S EH1 L - D AH0 N\nSELECT  S AH0 - L EH1 K T\nSELECTED  S AH0 - L EH1 K - T AH0 D\nSELECTED(2)  S AH0 - L EH1 K - T IH0 D\nSELECTING  S AH0 - L EH1 K - T IH0 NG\nSELECTION  S AH0 - L EH1 K - SH AH0 N\nSELECTIONS  S AH0 - L EH1 K - SH AH0 N Z\nSELECTIVE  S AH0 - L EH1 K - T IH0 V\nSELECTIVELY  S AH0 - L EH1 K - T IH0 V - L IY0\nSELECTIVITY  S IH0 - L EH2 K - T IH1 - V AH0 - T IY0\nSELECTNET  S AH0 - L EH1 K T - N EH2 T\nSELECTS  S AH0 - L EH1 K T S\nSELENA  S AH0 - L IY1 - N AH0\nSELENA'S  S AH0 - L IY1 - N AH0 Z\nSELENE  S AH0 - L IY1 N\nSELENITE  S EH1 - L IH0 - N AY2 T\nSELENIUM  S AH0 - L IY1 - N IY0 - AH0 M\nSELES  S EH1 - L EH0 S\nSELES'  S EH1 - L EH0 S\nSELEY  S IY1 - L IY0\nSELF  S EH1 L F\nSELF'S  S EH1 L F S\nSELF-AGGRANDIZEMENT  S EH1 L - F AE1 - G R AH0 N - D AY2 Z - M AH0 N T\nSELF-AGGRANDIZING  S EH1 L - F AH0 - G R AE1 N - D AY2 - Z IH0 NG\nSELF-CONFIDENCE  S EH1 L F - K AA1 N - F AH0 - D AH0 N S\nSELF-CONFIDENT  S EH1 L F - K AA1 N - F AH0 - D AH0 N T\nSELF-CONGRATULATION  S EH1 L F - K AH0 N - G R AE2 - CH AH0 - L EY1 - SH AH0 N\nSELF-CONSISTENT  S EH2 L F - K AH0 N - S IH1 - S T AH0 N T\nSELF-CONTAINED  S EH1 L F - K AH0 N - T EY1 N D\nSELF-CONTROL  S EH1 L F - K AH0 N - T R OW1 L\nSELF-DECEIVING  S EH2 L F - D IY0 - S IY1 - V IH0 NG\nSELF-DECEPTION  S EH1 L F - D AH0 - S EH1 P - SH AH0 N\nSELF-DELIVERANCE  S EH1 L F - D IH0 - L IH1 - V ER0 - AH0 N S\nSELF-DEPRECATING  S EH1 L F - D EH1 - P R AH0 - K EY2 - T IH0 NG\nSELF-DETERMINATION  S EH1 L F - D IH0 - T ER2 - M AH0 - N EY1 - SH AH0 N\nSELF-DORMANT  S EH1 L F - D AO1 R - M AH0 N T\nSELF-ENERGIZING  S EH1 L - F EH1 - N ER0 - JH AY2 - Z IH0 NG\nSELF-ENRICHMENT  S EH2 L - F AH0 N - R IH1 CH - M AH0 N T\nSELF-FERTILIZING  S EH1 L F - F ER1 - T AH0 - L AY2 - Z IH0 NG\nSELF-FRUITFUL  S EH1 L F - F R UW1 T - F AH0 L\nSELF-GOVERN  S EH1 L F - G AH1 - V ER0 N\nSELF-GOVERNING  S EH1 L F - G AH1 - V ER0 - N IH0 NG\nSELF-GOVERNMENT  S EH1 L F - G AH1 - V ER0 N - M AH0 N T\nSELF-HELP  S EH1 L F - HH EH1 L P\nSELF-IMPROVEMENT  S EH1 L - F IH0 M - P R UW1 V - M AH0 N T\nSELF-PERPETUATE  S EH2 L F - P ER0 - P EH1 - CH UW0 - EY2 T\nSELF-PERPETUATING  S EH2 L F - P ER0 - P EH1 - CH UW0 - EY2 - T IH0 NG\nSELF-PERPETUATION  S EH1 L F - P ER0 - P EH2 - CH UW0 - EY1 - SH AH0 N\nSELF-POLLINATE  S EH1 L - F P AA1 - L AH0 - N EY2 T\nSELF-PORTRAIT  S EH1 L F - P AO1 R - T R AH0 T\nSELF-PROFESSED  S EH1 L F - P R AH0 - F EH1 S T\nSELF-SUBSISTENCE  S EH1 L F - S AH0 B - S IH1 - S T AH0 N S\nSELF-SUFFICIENCY  S EH1 L F - S AH0 - F IH1 - SH AH0 N - S IY0\nSELF-SUFFICIENT  S EH1 L F - S AH0 - F IH1 - SH AH0 N T\nSELF-SUFFICIENT(2)  S EH1 L F - S AH0 - F IH1 - SH IH0 N T\nSELF-TORMENT  S EH1 L F - T AO1 R - M EH2 N T\nSELF-TORMENTS  S EH1 L F - T AO1 R - M EH2 N T S\nSELFISH  S EH1 L - F IH0 SH\nSELFISHNESS  S EH1 L - F IH0 SH - N AH0 S\nSELFLESS  S EH1 L F - L AH0 S\nSELFLESSNESS  S EH1 L F - L AH0 S - N IH0 S\nSELFRIDGE  S EH1 L - F R IH0 JH\nSELFS  S EH1 L F S\nSELIA  S EH1 - L IY0 - AH0\nSELIE  S EH1 - L IY0\nSELIES  S EH1 - L IY0 Z\nSELIES'  S EH1 - L IY0 Z\nSELIG  S EH1 - L IH0 G\nSELIGA  S EH1 - L IH0 - G AH0\nSELIGER  S EH1 - L IH0 - G ER0\nSELIGMAN  S EH1 - L IH0 G - M AH0 N\nSELIGMANN  S EH1 - L IH0 G - M AH0 N\nSELIGSON  S EH1 - L IH0 G - S AH0 N\nSELIKOFF  S EH1 - L IH0 - K AO2 F\nSELIN  S EH1 - L IH0 N\nSELINA  S AH0 - L IY1 - N AH0\nSELINAS  S AH0 - L IY1 - N AH0 Z\nSELINAS'S  S AH0 - L IY1 - N AH0 - S IH0 Z\nSELINAS(2)  S AH0 - L IY1 - N AH0 S\nSELINDA  S EH0 - L IY1 N - D AH0\nSELINGER  S EH1 - L IH0 - NG ER0\nSELK  S EH1 L K\nSELKE  S EH1 L K\nSELKIN  S EH1 L - K IH0 N\nSELKIRK  S EH1 L - K ER0 K\nSELKIRK'S  S EH1 L - K ER0 K S\nSELL  S EH1 L\nSELLA  S EH1 - L AH0\nSELLAND  S EH1 - L AH0 N D\nSELLARDS  S EH1 - L ER0 D Z\nSELLARS  S EH1 - L ER0 Z\nSELLARS'S  S EH1 - L ER0 - Z IH0 Z\nSELLE  S EH1 L\nSELLECK  S EH1 - L IH0 K\nSELLEN  S EH1 - L AH0 N\nSELLER  S EH1 - L ER0\nSELLER'S  S EH1 - L ER0 Z\nSELLERS  S EH1 - L ER0 Z\nSELLERS'  S EH1 - L ER0 Z\nSELLEY  S EH1 - L IY0\nSELLICK  S EH1 - L IH0 K\nSELLIER  S EH1 L - Y ER0\nSELLIN  S EH1 - L IH0 N\nSELLING  S EH1 - L IH0 NG\nSELLINGER  S EH1 - L IH0 - NG ER0\nSELLINGS  S EH1 - L IH0 NG Z\nSELLMAN  S EH1 L - M AH0 N\nSELLMEYER  S EH1 L - M AY0 - ER0\nSELLNER  S EH1 L - N ER0\nSELLOFF  S EH1 L - AO2 F\nSELLOFFS  S EH1 - L AO2 F S\nSELLON  S EH1 - L AH0 N\nSELLOUT  S EH1 L - AW2 T\nSELLOUTS  S EH1 L - AW2 T S\nSELLS  S EH1 L Z\nSELMA  S EH1 L - M AH0\nSELMAN  S EH1 L - M AH0 N\nSELMER  S EH1 L - M ER0\nSELMON  S EH1 L - M AH0 N\nSELNER  S EH1 L - N ER0\nSELOVER  S EH1 - L AH0 - V ER0\nSELOWSKY  S EH0 - L AW1 S - K IY0\nSELPH  S EH1 L F\nSELSOR  S EH1 L - S ER0\nSELTZ  S EH1 L T S\nSELTZER  S EH1 L T - S ER0\nSELVA  S EY1 L - V AH0\nSELVAGE  S EH1 L - V IH0 JH\nSELVAGGIO  S EH0 L - V AA1 - JH IY0 - OW0\nSELVES  S EH1 L V Z\nSELVEY  S EH1 L - V IY0\nSELVIDGE  S EH1 L - V IH0 JH\nSELVIG  S EH1 L - V IH0 G\nSELWAY  S EH1 L - W EY2\nSELWIN  S EH1 L - W IH0 N\nSELWITZ  S EH1 L - W IH0 T S\nSELWYN  S EH1 L - W IH0 N\nSELZ  S EH1 L Z\nSELZER  S EH1 L - Z ER0\nSELZER'S  S EH1 L - Z ER0 Z\nSEMA  S IY1 - M AH0\nSEMAN  S IY1 - M AH0 N\nSEMANS  S IY1 - M AH0 N Z\nSEMANTIC  S IH0 - M AE1 N - T IH0 K\nSEMANTICS  S IH0 - M AE1 N - T IH0 K S\nSEMATECH  S EH1 - M AH0 - T EH2 K\nSEMBER  S EH1 M - B ER0\nSEMBLANCE  S EH1 M - B L AH0 N S\nSEMEGRAN  S EH1 - M AH0 - G R AH0 N\nSEMEL  S EH1 - M AH0 L\nSEMELE  S EH1 - M AH0 - L IY2\nSEMEN  S IY1 - M AH0 N\nSEMENZA  S EH0 - M EH1 N - Z AH0\nSEMERAD  S EH1 - M ER0 - AE0 D\nSEMESTER  S AH0 - M EH1 - S T ER0\nSEMESTERS  S AH0 - M EH1 - S T ER0 Z\nSEMI  S EH1 - M IY0\nSEMI(2)  S EH1 - M AY0\nSEMI-COLON  S EH1 - M IY0 - K OW1 - L AH0 N\nSEMI-COLON(2)  S EH1 - M AH0 - K OW1 - L AH0 N\nSEMI-HEIGHT  S EH1 - M IY0 - HH AY1 T\nSEMI-HEIGHT(2)  S EH1 - M IH0 - HH AY1 T\nSEMI-HEIGHT(3)  S EH1 - M AY0 - HH AY1 T\nSEMI-HEIGHTS  S EH1 - M IY0 - HH AY1 T S\nSEMI-HEIGHTS(2)  S EH1 - M AY0 - HH AY1 T S\nSEMI-HEIGHTS(3)  S EH1 - M IH0 - HH AY1 T S\nSEMIANNUAL  S EH2 - M IY0 - AE1 - N Y AH0 - W AH0 L\nSEMIANNUAL(2)  S EH2 - M AY0 - AE1 - N Y AH0 - W AH0 L\nSEMIANNUAL(3)  S EH2 - M AH0 - AE1 - N Y AH0 - W AH0 L\nSEMIANNUALLY  S EH2 - M IY0 - AE1 - N UW0 - AH0 - L IY0\nSEMIANNUALLY(2)  S EH2 - M AY0 - AE1 - N UW0 - AH0 - L IY0\nSEMIANNUALLY(3)  S EH2 - M IY0 - AE1 - N UW0 - L IY0\nSEMIANNUALLY(4)  S EH2 - M AY0 - AE1 - N UW0 - L IY0\nSEMIANNUALLY(5)  S EH2 - M IH0 - AE1 - N UW0 - L IY0\nSEMIANNUALLY(6)  S EH2 - M IH0 - AE1 - N UW0 - AH0 - L IY0\nSEMIAUTOMATIC  S EH2 - M IY0 - AO2 - T AH0 - M AE1 - T IH0 K\nSEMIAUTOMATIC(2)  S EH2 - M AY0 - AO2 - T AH0 - M AE1 - T IH0 K\nSEMIAUTOMATIC(3)  S EH2 - M IH0 - AO2 - T AH0 - M AE1 - T IH0 K\nSEMICIRCULAR  S EH2 - M IY0 - S ER1 - K Y AH0 - L ER0\nSEMICIRCULAR(2)  S EH2 - M AY0 - S ER1 - K Y AH0 - L ER0\nSEMICIRCULAR(3)  S EH2 - M AH0 - S ER1 - K Y AH0 - L ER0\nSEMICLAD  S EH1 - M IY0 - K L AE2 D\nSEMICLAD(2)  S EH1 - M AY0 - K L AE2 D\nSEMICLAD(3)  S EH1 - M AH0 - K L AE2 D\nSEMICLASSICAL  S EH2 - M IY0 - K L AE1 - S IH0 - K AH0 L\nSEMICLASSICAL(2)  S EH2 - M IH0 - K L AE1 - S IH0 - K AH0 L\nSEMICLASSICAL(3)  S EH2 - M AY0 - K L AE1 - S IH0 - K AH0 L\nSEMICON  S EH1 - M IH0 - K AA2 N\nSEMICONDUCTOR  S EH2 - M IY0 - K AH0 N - D AH1 K - T ER0\nSEMICONDUCTOR'S  S EH2 - M IY0 - K AH0 N - D AH1 K - T ER0 Z\nSEMICONDUCTOR'S(2)  S EH2 - M IH0 - K AH0 N - D AH1 K - T ER0 Z\nSEMICONDUCTOR'S(3)  S EH2 - M AY0 - K AH0 N - D AH1 K - T ER0 Z\nSEMICONDUCTOR(2)  S EH2 - M IH0 - K AH0 N - D AH1 K - T ER0\nSEMICONDUCTOR(3)  S EH2 - M AY0 - K AH0 N - D AH1 K - T ER0\nSEMICONDUCTORS  S EH2 - M IY0 - K AH0 N - D AH1 K - T ER0 Z\nSEMICONDUCTORS(2)  S EH2 - M IH0 - K AH0 N - D AH1 K - T ER0 Z\nSEMICONDUCTORS(3)  S EH2 - M AY0 - K AH0 N - D AH1 K - T ER0 Z\nSEMICYLINDRICAL  S EH2 - M IY0 - S AH0 - L IH1 N - D R IH0 - K AH0 L\nSEMICYLINDRICAL(2)  S EH2 - M IH0 - S AH0 - L IH1 N - D R IH0 - K AH0 L\nSEMICYLINDRICAL(3)  S EH2 - M AY0 - S AH0 - L IH1 N - D R IH0 - K AH0 L\nSEMIDRY  S EH2 - M IY0 - D R AY1\nSEMIDRY(2)  S EH2 - M IH0 - D R AY1\nSEMIDRY(3)  S EH2 - M AY0 - D R AY1\nSEMIDRYING  S EH2 - M IY0 - D R AY1 - IH0 NG\nSEMIDRYING(2)  S EH2 - M IH0 - D R AY1 - IH0 NG\nSEMIDRYING(3)  S EH2 - M AY0 - D R AY1 - IH0 NG\nSEMIEN  S EH1 - M IY0 N\nSEMIFINAL  S EH2 - M IY0 - F AY1 - N AH0 L\nSEMIFINAL(2)  S EH2 - M IH0 - F AY1 - N AH0 L\nSEMIFINAL(3)  S EH2 - M AY0 - F AY1 - N AH0 L\nSEMIFINALIST  S EH2 - M IY0 - F AY1 - N AH0 L - IH0 S T\nSEMIFINALIST(2)  S EH2 - M IH0 - F AY1 - N AH0 - L IH0 S T\nSEMIFINALIST(3)  S EH2 - M AY0 - F AY1 - N AH0 - L IH0 S T\nSEMIFINALISTS  S EH2 - M IY0 - F AY1 - N AH0 L - IH0 S T S\nSEMIFINALISTS(2)  S EH2 - M IY0 - F AY1 - N AH0 L - IH0 S S\nSEMIFINALISTS(3)  S EH2 - M IY0 - F AY1 - N AH0 L - IH0 S\nSEMIFINALISTS(4)  S EH2 - M AY0 - F AY1 - N AH0 - L IH0 S T S\nSEMIFINALISTS(5)  S EH2 - M AY0 - F AY1 - N AH0 L - IH0 S S\nSEMIFINALISTS(6)  S EH2 - M AY0 - F AY1 - N AH0 L - IH0 S\nSEMIFINALISTS(7)  S EH2 - M IH0 - F AY1 - N AH0 - L IH0 S T S\nSEMIFINALISTS(8)  S EH2 - M IH0 - F AY1 - N AH0 L - IH0 S S\nSEMIFINALISTS(9)  S EH2 - M IH0 - F AY1 - N AH0 L - IH0 S\nSEMIFINALS  S EH2 - M IY0 - F AY1 - N AH0 L Z\nSEMIFINALS(2)  S EH2 - M IH0 - F AY1 - N AH0 L Z\nSEMIFINALS(3)  S EH2 - M AY0 - F AY1 - N AH0 L Z\nSEMIFINISH  S EH2 - M IY0 - F IH1 - N IH0 SH\nSEMIFINISH(2)  S EH2 - M AY0 - F IH1 - N IH0 SH\nSEMIFINISH(3)  S EH2 - M IH0 - F IH1 - N IH0 SH\nSEMIFINISHED  S EH2 - M IY0 - F IH1 - N IH0 SH T\nSEMIFINISHED(2)  S EH2 - M AY0 - F IH1 - N IH0 SH T\nSEMIFINISHED(3)  S EH2 - M IH0 - F IH1 - N IH0 SH T\nSEMIGLOSS  S EH2 - M IY0 - G L AA1 S\nSEMIGLOSS(2)  S EH2 - M IH0 - G L AA1 S\nSEMILEGENDARY  S EH2 - M IY0 - L EH1 - JH AH0 N - D EH2 - R IY0\nSEMILEGENDARY(2)  S EH2 - M IH0 - L EH1 - JH AH0 N - D EH2 - R IY0\nSEMINAL  S EH1 - M AH0 - N AH0 L\nSEMINAR  S EH1 - M AH0 - N AA2 R\nSEMINARA  S EH2 - M IH0 - N AA1 - R AH0\nSEMINARIAN  S EH2 - M AH0 - N EH1 - R IY0 - AH0 N\nSEMINARIANS  S EH2 - M AH0 - N EH1 - R IY0 - AH0 N Z\nSEMINARIES  S EH1 - M AH0 - N EH2 - R IY0 Z\nSEMINARIO  S EH2 - M IH0 - N EH1 - R IY0 - OW0\nSEMINARS  S EH1 - M AH0 - N AA2 R Z\nSEMINARY  S EH1 - M AH0 - N EH2 - R IY0\nSEMINOLE  S EH1 - M IH0 - N OW2 L\nSEMINOLES  S EH1 - M IH0 - N OW2 L Z\nSEMIONENKOV  S EH2 - M IY0 - OW0 - N EH1 NG - K AA0 V\nSEMIOTIC  S EH2 - M IY0 - AA1 - T IH0 K\nSEMIOTICS  S EH2 - M IY0 - AA1 - T IH0 K S\nSEMIPERMANENT  S EH2 - M IY0 - P ER1 - M AH0 - N AH0 N T\nSEMIPERMANENT(2)  S EH2 - M IH0 - P ER1 - M AH0 - N AH0 N T\nSEMIPERMANENT(3)  S EH2 - M AY0 - P ER1 - M AH0 - N AH0 N T\nSEMIPRECIOUS  S EH2 - M IY0 - P R EH1 - SH AH0 S\nSEMIPRECIOUS(2)  S EH2 - M IH0 - P R EH1 - SH AH0 S\nSEMIPRECIOUS(3)  S EH2 - M AY0 - P R EH1 - SH AH0 S\nSEMIRA  S EH0 - M IH1 - R AH0\nSEMIRELIGIOUS  S EH2 - M IY0 - R IH0 - L IH1 - JH AH0 S\nSEMIRELIGIOUS(2)  S EH2 - M IH0 - R IH0 - L IH1 - JH AH0 S\nSEMIRELIGIOUS(3)  S EH2 - M AY0 - R IH0 - L IH1 - JH AH0 S\nSEMIS  S EH1 - M AY0 Z\nSEMISECRECY  S EH2 - M IY0 - S IY1 - K R AH0 - S IY0\nSEMISECRECY(2)  S EH2 - M IH0 - S IY1 - K R AH0 - S IY0\nSEMITE  S EH1 - M AY0 T\nSEMITIC  S AH0 - M IH1 - T IH0 K\nSEMITISM  S EH1 - M IH0 - T IH2 - Z AH0 M\nSEMITRAILER  S EH2 - M IY0 - T R EY1 - L ER0\nSEMITRAILER(2)  S EH2 - M IH0 - T R EY1 - L ER0\nSEMITROPICAL  S EH2 - M IY0 - T R AA1 - P IH0 - K AH0 L\nSEMITROPICAL(2)  S EH2 - M IH0 - T R AA1 - P IH0 - K AH0 L\nSEMITROPICAL(3)  S EH2 - M AY0 - T R AA1 - P IH0 - K AH0 L\nSEMLER  S EH1 M - L ER0\nSEMMEL  S EH1 - M AH0 L\nSEMMENS  S EH1 - M AH0 N Z\nSEMMES  S EH1 M Z\nSEMMLER  S EH1 M - L ER0\nSEMON  S EH1 - M AH0 N\nSEMONES  S EY0 - M OW1 - N EH0 S\nSEMPLE  S EH1 M - P AH0 L\nSEMRAD  S EH1 M - R AH0 D\nSEMRAU  S EH1 M - R AW0\nSEMROW  S EH1 M - R OW0\nSEMTEX  S EH1 M - T EH0 K S\nSEN  S EH1 N\nSEN(2)  S EH1 - N AH0 - T ER0\nSENA  S EH1 - N AH0\nSENATE  S EH1 - N AH0 T\nSENATE'S  S EH1 - N IH0 T S\nSENATE(2)  S EH1 - N IH0 T\nSENATOR  S EH1 - N AH0 - T ER0\nSENATOR'S  S EH1 - N AH0 - T ER0 Z\nSENATORE  S EH0 - N AA0 - T AO1 - R IY0\nSENATORIAL  S EH2 - N AH0 - T AO1 - R IY0 - AH0 L\nSENATORS  S EH1 - N AH0 - T ER0 Z\nSENATORS'  S EH1 - N AH0 - T ER0 Z\nSEND  S EH1 N D\nSENDAK  S EH1 N - D AE0 K\nSENDELBACH  S EH1 N - D IH0 L - B AA0 K\nSENDER  S EH1 N - D ER0\nSENDERO  S EH0 N - D EH1 - R OW0\nSENDERS  S EH1 N - D ER0 Z\nSENDING  S EH1 N - D IH0 NG\nSENDO  S EH1 N - D OW0\nSENDS  S EH1 N D Z\nSENECA  S EH1 - N AH0 - K AH0\nSENECAL  S EH1 - N IH0 - K AH0 L\nSENECHAL  S EH1 - N IH0 - K AH0 L\nSENEFF  S EH1 - N AH0 F\nSENEGAL  S EH2 - N AH0 - G AO1 L\nSENEKER  S EH1 - N AH0 - K ER0\nSENESAC  S EH1 - N IH0 - S AE0 K\nSENESCENCE  S AH0 - N EH1 - S AH0 N S\nSENESE  S EH1 - N IY0 Z\nSENEY  S EH1 - N IY0\nSENF  S EH1 N F\nSENFF  S EH1 N F\nSENFT  S EH1 N F T\nSENG  S EH1 NG\nSENGER  S EH1 - NG ER0\nSENGERS  S EH1 - NG ER0 Z\nSENILE  S IY1 - N AY2 L\nSENILITY  S AH0 - N IH1 - L AH0 - T IY0\nSENIOR  S IY1 - N Y ER0\nSENIORITY  S IY0 - N Y AO1 - R IH0 - T IY0\nSENIORNET  S IY1 - N Y ER0 - N EH2 T\nSENIORS  S IY1 - N Y ER0 Z\nSENK  S EH1 NG K\nSENKBEIL  S EH1 NG K - B AY2 L\nSENKO  S EH1 NG - K OW0\nSENN  S EH1 N\nSENNA  S EH1 - N AH0\nSENNE  S EH1 N\nSENNER  S EH1 - N ER0\nSENNET  S EH1 - N AH0 T\nSENNETT  S EH1 - N IH0 T\nSENNOTT  S EH1 - N AH0 T\nSENOR  S IY2 - N Y AO1 R\nSENORA  S IY2 - N Y AO1 - R AH0\nSENS  S EH1 N Z\nSENSABAUGH  S EH1 N - S AH0 - B AO2\nSENSATION  S EH0 N - S EY1 - SH AH0 N\nSENSATIONAL  S EH0 N - S EY1 - SH AH0 - N AH0 L\nSENSATIONALISM  S EH0 N - S EY1 - SH AH0 N - AH0 - L IH2 - Z AH0 M\nSENSATIONALIST  S EH0 N - S EY1 - SH AH0 N - AH0 - L IH0 S T\nSENSATIONALISTIC  S EH0 N - S EY2 - SH AH0 N - AH0 - L IH1 - S T IH0 K\nSENSATIONALIZE  S EH0 N - S EY2 - SH AH0 N - AH0 - L AY1 Z\nSENSATIONALIZED  S EH0 N - S EY2 - SH AH0 N - AH0 - L AY1 Z D\nSENSATIONALIZES  S EH0 N - S EY2 - SH AH0 N - AH0 - L AY1 - Z IH0 Z\nSENSATIONALIZING  S EH0 N - S EY2 - SH AH0 N - AH0 - L AY1 - Z IH0 NG\nSENSATIONS  S EH0 N - S EY1 - SH AH0 N Z\nSENSE  S EH1 N S\nSENSE-DATA  S EH1 N S - D EY2 - T AH0\nSENSE-DATA(2)  S EH1 N S - D AE2 - T AH0\nSENSE-DATAS  S EH1 N S - D EY1 - T AH0 Z\nSENSE-DATAS(2)  S EH1 N S - D AE1 - T AH0 Z\nSENSE-DATUM  S EH1 N S - D AE1 - T AH0 M\nSENSE-DATUM(2)  S EH1 N S - D EY1 - T AH0 M\nSENSED  S EH1 N S T\nSENSELESS  S EH1 N S - L AH0 S\nSENSENBRENNER  S EH1 N - S AH0 N - B R EH2 - N ER0\nSENSENEY  S EH1 N - S IH0 - N IY0\nSENSENIG  S EH1 N - S IH0 - N IH0 G\nSENSES  S EH1 N - S IH0 Z\nSENSIBILITIES  S EH2 N - S IH0 - B IH1 - L IH0 - T IY0 Z\nSENSIBILITY  S EH2 N - S IH0 - B IH1 - L IH0 - T IY0\nSENSIBLE  S EH1 N - S AH0 - B AH0 L\nSENSIBLY  S EH1 N - S AH0 - B L IY0\nSENSING  S EH1 N - S IH0 NG\nSENSITIVE  S EH1 N - S AH0 - T IH0 V\nSENSITIVE(2)  S EH1 N - S IH0 - T IH0 V\nSENSITIVELY  S EH1 N - S IH0 - T IH0 V - L IY0\nSENSITIVENESS  S EH1 N - S AH0 - T IH0 V - N AH0 S\nSENSITIVITIES  S EH2 N - S IH0 - T IH1 - V IH0 - T IY0 Z\nSENSITIVITY  S EH2 N - S IH0 - T IH1 - V IH0 - T IY0\nSENSITIZE  S EH1 N - S AH0 - T AY2 Z\nSENSITIZED  S EH1 N - S AH0 - T AY2 Z D\nSENSKE  S EH1 N S K\nSENSOR  S EH1 N - S ER0\nSENSOR'S  S EH1 N - S ER0 Z\nSENSORMATIC  S EH2 N - S ER0 - M AE1 - T IH0 K\nSENSORS  S EH1 N - S ER0 Z\nSENSORY  S EH1 N - S ER0 - IY0\nSENSUAL  S EH1 N - CH AH0 - W AH0 L\nSENSUALITY  S EH2 N - CH AH0 W - AE1 - L AH0 - T IY0\nSENSUOUS  S EH1 N - CH AH0 W - AH0 S\nSENT  S EH1 N T\nSENTELL  S EH1 N - T AH0 L\nSENTELLE  S EH0 N - T EH1 L\nSENTENCE  S EH1 N - T AH0 N S\nSENTENCED  S EH1 N - T AH0 N S T\nSENTENCES  S EH1 N - T AH0 N - S AH0 Z\nSENTENCES(2)  S EH1 N - T AH0 N - S IH0 Z\nSENTENCING  S EH1 N - T AH0 N - S IH0 NG\nSENTER  S EH1 N - T ER0\nSENTERS  S EH1 N - T ER0 Z\nSENTIMENT  S EH1 N - T AH0 - M AH0 N T\nSENTIMENT(2)  S EH1 - N AH0 - M AH0 N T\nSENTIMENTAL  S EH2 N - T AH0 - M EH1 N - T AH0 L\nSENTIMENTAL(2)  S EH2 - N AH0 - M EH1 N - T AH0 L\nSENTIMENTAL(3)  S EH2 N - T AH0 - M EH1 - N AH0 L\nSENTIMENTAL(4)  S EH2 - N AH0 - M EH1 - N AH0 L\nSENTIMENTALITY  S EH2 N - T AH0 - M EH0 N - T AE1 - L IH0 - T IY0\nSENTIMENTALITY(2)  S EH2 - N AH0 - M EH0 N - T AE1 - L IH0 - T IY0\nSENTIMENTS  S EH1 N - T AH0 - M AH0 N T S\nSENTIMENTS(2)  S EH1 - N AH0 - M AH0 N T S\nSENTINEL  S EH1 N - T AH0 - N AH0 L\nSENTINELS  S EH1 N - T AH0 - N AH0 L Z\nSENTMAN  S EH1 N T - M AH0 N\nSENTRA  S EH1 N - T R AH0\nSENTRAS  S EH1 N - T R AH0 S\nSENTRIES  S EH1 N - T R IY0 Z\nSENTRY  S EH1 N - T R IY0\nSENTZ  S EH1 N T S\nSENZAKI  S EY0 N - Z AA1 - K IY0\nSEO  S IY1 - OW0\nSEO(2)  S EY1 - OW0\nSEOUL  S OW1 L\nSEOUL'S  S OW1 L Z\nSEOW  S IY1 - OW0\nSEOW'S  S IY1 - OW2 Z\nSEOW(2)  S IY1 - AW0\nSEP  S EH1 P\nSEP(2)  EH1 - S IY1 - P IY1\nSEPARATE  S EH1 - P ER0 - EY2 T\nSEPARATE(2)  S EH1 - P ER0 - IH0 T\nSEPARATE(3)  S EH1 - P R AH0 T\nSEPARATED  S EH1 - P ER0 - EY2 - T AH0 D\nSEPARATED(2)  S EH1 - P ER0 - EY2 - T IH0 D\nSEPARATELY  S EH1 - P ER0 - AH0 T - L IY0\nSEPARATELY(2)  S EH1 - P R AH0 T - L IY0\nSEPARATENESS  S EH1 - P ER0 - AH0 T - N AH0 S\nSEPARATES  S EH1 - P ER0 - EY2 T S\nSEPARATES(2)  S EH1 - P ER0 - IH0 T S\nSEPARATING  S EH1 - P ER0 - EY2 - T IH0 NG\nSEPARATION  S EH2 - P ER0 - EY1 - SH AH0 N\nSEPARATIONS  S EH2 - P ER0 - EY1 - SH AH0 N Z\nSEPARATISM  S EH1 - P ER0 - AH0 - T IH2 - Z AH0 M\nSEPARATIST  S EH1 - P ER0 - AH0 - T IH0 S T\nSEPARATISTS  S EH1 - P ER0 - AH0 - T IH0 S T S\nSEPARATISTS(2)  S EH1 - P R AH0 - T IH0 S T S\nSEPARATISTS(3)  S EH1 - P R AH0 - T IH0 S S\nSEPARATISTS(4)  S EH1 - P R AH0 - T IH0 S\nSEPE  S IY1 P\nSEPEDA  S EY0 - P EY1 - D AH0\nSEPHARDIC  S AH0 - F AA1 R - D IH0 K\nSEPHARDIM  S IH0 - F AA1 R - D IH0 M\nSEPHARDIM(2)  S EH0 - F AA2 R - D IY1 M\nSEPHLON  S EH1 - F L AO0 N\nSEPHLON'S  S EH1 - F L AO0 N Z\nSEPIA  S IY1 - P IY0 - AH0\nSEPICH  S EH1 - P IH0 CH\nSEPIK  S EH1 - P IH0 K\nSEPP  S EH1 P\nSEPPALA  S EH0 - P AA1 - L AH0\nSEPPI  S EH1 - P IY0\nSEPSIS  S EH1 P - S IH0 S\nSEPT  S EH1 P T\nSEPTA  S EH1 P - T AH0\nSEPTEMBER  S EH0 P - T EH1 M - B ER0\nSEPTEMBER'S  S EH0 P - T EH1 M - B ER0 Z\nSEPTER  S EH1 P - T ER0\nSEPTIC  S EH1 P - T IH0 K\nSEPTIMA  S EH0 P - T IY1 - M AH0\nSEPTIMUS  S EH1 P - T IH0 - M IH0 S\nSEPTUAGENARIAN  S EH0 P - CH UW2 - AH0 - JH AH0 - N EH1 - R IY0 - AH0 N\nSEPULVADO  S EY0 - P UW0 L - V AA1 - D OW0\nSEPULVEDA  S EY0 - P UW0 L - V EY1 - D AH0\nSEQUA  S EH1 - K W AH0\nSEQUA'S  S EH1 - K W AH0 Z\nSEQUEIRA  S EY0 - K W EH1 - R AH0\nSEQUEL  S IY1 - K W AH0 L\nSEQUELS  S IY1 - K W AH0 L Z\nSEQUENCE  S IY1 - K W AH0 N S\nSEQUENCES  S IY1 - K W AH0 N - S AH0 Z\nSEQUENCES(2)  S IY1 - K W AH0 N - S IH0 Z\nSEQUENCING  S IY1 - K W AH0 N - S IH0 NG\nSEQUENT  S IY1 - K W AH0 N T\nSEQUENTIAL  S AH0 - K W EH1 N - CH AH0 L\nSEQUENTIALLY  S AH0 - K W EH1 N - CH AH0 - L IY0\nSEQUESTER  S IH0 - K W EH1 - S T ER0\nSEQUESTERED  S IH0 - K W EH1 - S T ER0 D\nSEQUESTERING  S IH0 - K W EH1 - S T ER0 - IH0 NG\nSEQUESTERS  S IH0 - K W EH1 - S T ER0 Z\nSEQUESTRATION  S EH2 - K W AH0 S - T R EY1 - SH AH0 N\nSEQUIN  S IY1 - K W AH0 N\nSEQUIN(2)  S IY1 - K W IH0 N\nSEQUINED  S IY1 - K W AH0 N D\nSEQUINS  S IY1 - K W AH0 N Z\nSEQUINS(2)  S IY1 - K W IH0 N Z\nSEQUITUR  S EH1 - K W IH0 - T ER0\nSEQUITURS  S EH1 K - W IH0 - T ER0 Z\nSEQUOIA  S IH0 - K W OY1 - AH0\nSEQUOIAS  S IH0 - K W OY1 - AH0 Z\nSEQUOYAH  S AH0 - K W OY1 - AH0\nSERA  S IH1 - R AH0\nSERAFIN  S EH1 - R AH0 - F IH0 N\nSERAFINA  S ER0 - AA0 - F IY1 - N AH0\nSERAFINE  S ER0 - AA0 - F IY1 - N IY0\nSERAFINI  S ER0 - AA0 - F IY1 - N IY0\nSERAFINO  S ER0 - AA0 - F IY1 - N OW0\nSERAGUT  S EH1 - R AH0 - G AH2 T\nSERAPHINA  S ER0 - AA0 - F IY1 - N AH0\nSERAPHINE  S ER0 - AA0 - F IY1 - N IY0\nSERATONIN  S ER0 - AA0 - T OW1 - N IH0 N\nSERATTI  S EH0 - R AA1 - T IY0\nSERAW  S ER0 - AA1\nSERB  S ER1 B\nSERB'S  S ER1 B Z\nSERBAINE  S ER0 - B EY1 N\nSERBIA  S ER1 - B IY0 - AH0\nSERBIA'S  S ER1 - B IY0 - AH0 Z\nSERBIAN  S ER1 - B IY0 - AH0 N\nSERBIAN'S  S ER1 - B IY0 - AH0 N Z\nSERBIANS  S ER1 - B IY0 - AH0 N Z\nSERBIAS  S ER1 - B IY0 - AH0 Z\nSERBIN  S ER1 - B IH0 N\nSERBO-CROATIA  S ER1 - B OW0 - K R OW2 - EY0 - SH AH0\nSERBO-CROATIAN  S ER1 - B OW0 - K R OW2 - EY0 - SH AH0 N\nSERBS  S ER1 B Z\nSERBS'  S ER1 B Z\nSERBSKA  S ER1 B - S K AH0\nSERCO  S ER1 - K OW0\nSERDA  S EH1 R - D AH0\nSERE  S IH1 R\nSERENADE  S EH2 - R AH0 - N EY1 D\nSERENADED  S EH2 - R AH0 - N EY1 - D IH0 D\nSERENADING  S EH2 - R AH0 - N EY1 - D IH0 NG\nSERENDIPITOUS  S EH2 - R AH0 N - D IH1 - P IH0 - T AH0 S\nSERENDIPITY  S EH2 - R AH0 N - D IH1 - P IH0 - T IY0\nSERENE  S ER0 - IY1 N\nSERENELY  S ER0 - IY1 - N AH0 - L IY0\nSERENELY(2)  S ER0 - IY1 N - L IY0\nSERENGETI  S EH2 - R AH0 N - G EH1 - T IY0\nSERENITY  S ER0 - EH1 - N AH0 - T IY0\nSERENO  S EH0 - R EY1 - N OW0\nSERES  S IY1 R Z\nSEREX  S EH1 - R AH0 K S\nSERF  S ER1 F\nSERFASS  S ER1 - F AE2 S\nSERFIN  S ER1 - F IH0 N\nSERFIN(2)  S EH1 R - F IH0 N\nSERFLING  S ER1 - F L IH0 NG\nSERFS  S ER1 F S\nSERGE  S ER1 JH\nSERGEANT  S AA1 R - JH AH0 N T\nSERGEANTS  S AA1 R - JH AH0 N T S\nSERGEI  S ER0 - G EY1\nSERGEI(2)  S EH1 R - G EY2\nSERGENT  S ER1 - JH AH0 N T\nSERGEY  S EH1 R - JH IY0\nSERGEY(2)  S EH1 R - G EY0\nSERGI  S EH1 R - JH IY0\nSERGIO  S ER1 - JH IY0 - OW0\nSERGIUS  S ER1 - JH IY0 - AH0 S\nSERIA  S IY1 - R IY0 - AH0\nSERIAL  S IH1 - R IY0 - AH0 L\nSERIALIZE  S IH1 - R IY0 - AH0 - L AY2 Z\nSERIALIZED  S IH1 - R IY0 - AH0 - L AY2 Z D\nSERIALS  S IH1 - R IY0 - AH0 L Z\nSERIES  S IH1 - R IY0 Z\nSERIES'  S IH1 - R IY0 Z\nSERILDA  S ER0 - IY1 L - D AH0\nSERINO  S ER0 - IY1 - N OW0\nSERIO  S IY1 - R IY0 - OW0\nSERIOUS  S IH1 - R IY0 - AH0 S\nSERIOUSLY  S IH1 - R IY0 - AH0 S - L IY0\nSERIOUSNESS  S IH1 - R IY0 - AH0 S - N AH0 S\nSERLE  S AO1 - R AH0 L\nSERLIN  S ER1 - L IH0 N\nSERLING  S ER1 - L IH0 N NG\nSERLO  S EH1 R - L OW0\nSERMERSHEIM  S ER1 - M ER0 S - HH AY0 M\nSERMON  S ER1 - M AH0 N\nSERMONS  S ER1 - M AH0 N Z\nSERNA  S EH1 R - N AH0\nSEROKA  S EH0 - R OW1 - K AH0\nSEROLOGICAL  S EH0 - R AH0 - L AO1 - JH IH0 - K AH0 L\nSEROLOGIST  S EH0 - R AA1 - L AH0 - JH IH0 S T\nSEROLOGY  S EH0 - R AA1 - L AH0 - JH IY0\nSERONO  S EH2 - R AA1 - N OW0\nSEROTA  S ER0 - OW1 - T AH0\nSEROTONIN  S ER0 - AH0 - T OW1 - N IH0 N\nSEROWSKI  S ER0 - AW1 S - K IY0\nSERPA  S EH1 R - P AH0\nSERPAS  S ER1 - P AH0 Z\nSERPE  S ER1 P\nSERPENT  S ER1 - P AH0 N T\nSERPENT'S  S ER1 - P AH0 N T S\nSERPENTINE  S ER1 - P AH0 N - T AY2 N\nSERPENTS  S ER1 - P AH0 N T S\nSERPICO  S ER0 - P IY1 - K OW0\nSERR  S EH1 R\nSERRA  S EH1 - R AH0\nSERRA'S  S EH1 - R AH0 Z\nSERRANO  S ER0 - AA1 - N OW0\nSERRANO'S  S ER0 - AA1 - N OW0 Z\nSERRANO'S(2)  S ER0 - AE1 - N OW0 Z\nSERRANO(2)  S ER0 - AE1 - N OW0\nSERRANTO  S ER0 - AA1 N - T OW0\nSERRAO  S EH1 - R AW0\nSERRATE  S EH1 - R EY2 T\nSERRATED  S EH1 - R EY2 - T IH0 D\nSERRATO  S ER0 - AA1 - T OW0\nSERRATORE  S ER0 - AA0 - T AO1 - R IY0\nSERRES  S EH1 - R EH0 S\nSERRITELLA  S EH2 - R IH0 - T EH1 - L AH0\nSERTICH  S ER1 - T IH0 K\nSERUM  S IH1 - R AH0 M\nSERV  S ER1 V\nSERVAAS  S ER1 - V AA0 S\nSERVAIS  S ER0 - V EY1\nSERVAM  S ER1 - V AH0 M\nSERVAN  S ER1 - V AH0 N\nSERVANT  S ER1 - V AH0 N T\nSERVANTS  S ER1 - V AH0 N T S\nSERVANTS'  S ER1 - V AH0 N T S\nSERVE  S ER1 V\nSERVED  S ER1 V D\nSERVELLO  S ER0 - V EH1 - L OW0\nSERVER  S ER1 - V ER0\nSERVERS  S ER1 - V ER0 Z\nSERVES  S ER1 V Z\nSERVICE  S ER1 - V AH0 S\nSERVICE'S  S ER1 - V IH0 - S IH0 Z\nSERVICE(2)  S ER1 - V IH0 S\nSERVICEABLE  S ER1 - V AH0 - S AH0 - B AH0 L\nSERVICED  S ER1 - V IH0 S T\nSERVICEMAN  S ER1 - V AH0 S - M AE2 N\nSERVICEMASTER  S ER1 - V IH0 S - M AE2 - S T ER0\nSERVICEMEN  S ER1 - V AH0 S - M EH0 N\nSERVICEMEN'S  S ER1 - V IH0 S - M EH0 N Z\nSERVICER  S ER1 - V IH0 - S ER0\nSERVICES  S ER1 - V AH0 - S AH0 Z\nSERVICES'  S ER1 - V IH0 - S IH0 Z\nSERVICES'(2)  S ER1 - V AH0 - S AH0 Z\nSERVICES(2)  S ER1 - V IH0 - S IH0 Z\nSERVICING  S ER1 - V IH0 - S IH0 NG\nSERVICO  S ER1 - V IH0 - K OW2\nSERVIDIO  S ER0 - V IY1 - D IY0 - OW0\nSERVILE  S ER1 - V AH0 L\nSERVIN  S ER1 - V IH0 N\nSERVING  S ER1 - V IH0 NG\nSERVINGS  S ER1 - V IH0 NG Z\nSERVIOU  S ER1 - V IY0 - UW0\nSERVIS  S ER1 - V IH0 S\nSERVISS  S ER1 - V IH0 S\nSERVITUDE  S ER1 - V AH0 - T UW2 D\nSERVO  S ER1 - V OW0\nSESAME  S EH1 - S AH0 - M IY0\nSESDAQ  S EH1 S - D AE0 K\nSESHADRI  S EH0 - SH AA1 - D R IY0\nSESIT  S EH1 - Z IH0 T\nSESKAR  S EH1 S - K AA2 R\nSESKAR'S  S EH1 S - K AA2 R Z\nSESLER  S EH1 - S AH0 - L ER0\nSESLER(2)  S EH1 S - L ER0\nSESNO  S EH1 S - N OW2\nSESNO'S  S EH1 S - N OW2 Z\nSESSA  S EH1 - S AH0\nSESSION  S EH1 - SH AH0 N\nSESSION'S  S EH1 - SH AH0 N Z\nSESSIONS  S EH1 - SH AH0 N Z\nSESSIONS'  S EH1 - SH AH0 N Z\nSESSLER  S EH1 S - L ER0\nSESSOMS  S EH1 - S AH0 M Z\nSESSUMS  S EH1 - S AH0 M Z\nSESTAK  S EH1 - S T AH0 K\nSESTANOVICH  S EH0 - S T AE1 - N AH0 - V IH0 CH\nSESTITO  S EH0 - S T IY1 - T OW0\nSET  S EH1 T\nSETARO  S EH0 - T AA1 - R OW0\nSETBACK  S EH1 T - B AE2 K\nSETBACKS  S EH1 T - B AE2 K S\nSETH  S EH1 TH\nSETH'S  S EH1 TH S\nSETHER  S EH1 - DH ER0\nSETHI  S EH1 - TH IY0\nSETHNESS  S EH1 TH - N AH0 S\nSETHURAMAN  S EH2 - TH ER0 - AA1 - M AA0 N\nSETI  S EH1 - T IY2\nSETLIFF  S EH1 T - L IH0 F\nSETO  S EH1 - T OW0\nSETON  S IY1 - T AH0 N\nSETS  S EH1 T S\nSETSER  S EH1 T - S ER0\nSETTANNI  S EH0 - T AA1 - N IY0\nSETTE  S EH1 T\nSETTER  S EH1 - T ER0\nSETTERLUND  S EH1 - T ER0 - L AH0 N D\nSETTERS  S EH1 - T ER0 Z\nSETTING  S EH1 - T IH0 NG\nSETTINGS  S EH1 - T IH0 NG Z\nSETTLE  S EH1 - T AH0 L\nSETTLED  S EH1 - T AH0 L D\nSETTLEMENT  S EH1 - T AH0 L - M AH0 N T\nSETTLEMENT'S  S EH1 - T AH0 L - M AH0 N T S\nSETTLEMENTS  S EH1 - T AH0 L - M AH0 N T S\nSETTLEMIRE  S EH1 - T AH0 L - M AY2 R\nSETTLEMYRE  S EH1 - T AH0 L - M AY2 R\nSETTLER  S EH1 - T AH0 L - ER0\nSETTLER(2)  S EH1 T - L ER0\nSETTLERS  S EH1 T - L ER0 Z\nSETTLERS'  S EH1 T - L ER0 Z\nSETTLERS(2)  S EH1 - T AH0 L - ER0 Z\nSETTLES  S EH1 - T AH0 L Z\nSETTLING  S EH1 - T AH0 L - IH0 NG\nSETTLING(2)  S EH1 T - L IH0 NG\nSETTSU  S EH1 T - S UW0\nSETTY  S EH1 - T IY0\nSETUP  S EH1 T - AH2 P\nSETUPS  S EH1 T - AH2 P S\nSETZER  S EH1 T - Z ER0\nSETZLER  S EH1 T S - L ER0\nSEUBERT  S UW1 - B ER0 T\nSEUFERT  S UW1 - F ER0 T\nSEUSS  S UW1 S\nSEVAREID  S EH1 - V AH0 - R AY2 D\nSEVCIK  S EH1 V - S IH0 K\nSEVE  S EH1 - V EY0\nSEVEN  S EH1 - V AH0 N\nSEVEN'S  S EH1 - V AH0 N Z\nSEVENFOLD  S EH1 - V AH0 N - F OW2 L D\nSEVENS  S EH1 - V AH0 N Z\nSEVENTEEN  S EH1 - V AH0 N - T IY1 N\nSEVENTEENS  S EH1 - V AH0 N - T IY2 N Z\nSEVENTEENTH  S EH1 - V AH0 N - T IY1 N TH\nSEVENTH  S EH1 - V AH0 N TH\nSEVENTHS  S EH1 - V AH0 N TH S\nSEVENTIES  S EH1 - V AH0 N - T IY0 Z\nSEVENTIES(2)  S EH1 - V AH0 - N IY0 Z\nSEVENTIETH  S EH1 - V AH0 N - T IY0 - IH0 TH\nSEVENTIETH(2)  S EH1 - V AH0 - N IY0 - IH0 TH\nSEVENTY  S EH1 - V AH0 N - T IY0\nSEVENTY'S  S EH1 - V AH0 N - T IY0 Z\nSEVENTY(2)  S EH1 - V AH0 - N IY0\nSEVER  S EH1 - V ER0\nSEVERA  S EY0 - V EH1 - R AH0\nSEVERAL  S EH1 - V R AH0 L\nSEVERAL(2)  S EH1 - V ER0 - AH0 L\nSEVERALLY  S EH1 - V R AH0 - L IY0\nSEVERANCE  S EH1 - V ER0 - AH0 N S\nSEVERANCE(2)  S EH1 - V R AH0 N S\nSEVERE  S AH0 - V IH1 R\nSEVERED  S EH1 - V ER0 D\nSEVERELY  S AH0 - V IH1 R - L IY0\nSEVEREST  S AH0 - V IH1 - R AH0 S T\nSEVEREVILLE  S AH0 - V IH1 R - V IH2 L\nSEVERIN  S EH1 - V ER0 - IH0 N\nSEVERING  S EH1 - V ER0 - IH0 NG\nSEVERINI  S EH0 - V ER0 - IY1 - N IY0\nSEVERINO  S EH0 - V ER0 - IY1 - N OW0\nSEVERITY  S IH0 - V EH1 - R IH0 - T IY0\nSEVERN  S EH1 - V ER0 N\nSEVERNS  S EH1 - V ER0 N Z\nSEVEROVIC  S EH0 - V ER1 - OW0 - V IH0 K\nSEVERS  S EH1 - V ER0 Z\nSEVERSON  S EH1 - V ER0 - S AH0 N\nSEVERT  S EH1 - V ER0 T\nSEVERTSON  S EH1 - V ER0 T - S AH0 N\nSEVEY  S IH0 - V EY1\nSEVICK  S EH1 - V IH0 K\nSEVIER  S EH1 - V Y ER0\nSEVIGNY  S IH0 - V IH1 G - N IY0\nSEVILLA  S EH0 - V IH1 - L AH0\nSEVILLE  S AH0 - V IH1 L\nSEVIN  S EH1 - V IH0 N\nSEVRUGA  S EH2 - V R UW1 - G AH0\nSEVY  S IY1 - V IY0\nSEW  S OW1\nSEWAGE  S UW1 - AH0 JH\nSEWAGE(2)  S UW1 - IH0 JH\nSEWALD  S UW1 - AH0 L D\nSEWALL  S UW1 - AH0 L\nSEWARD  S UW1 - ER0 D\nSEWED  S OW1 D\nSEWELL  S UW1 - AH0 L\nSEWELL(2)  S UW1 - IH0 L\nSEWER  S UW1 - ER0\nSEWERAGE  S UW1 - ER0 - IH0 JH\nSEWERS  S UW1 - ER0 Z\nSEWING  S OW1 - IH0 NG\nSEWN  S OW1 N\nSEX  S EH1 K S\nSEXAUER  S EH1 K - S AW0 - ER0\nSEXED  S EH1 K S T\nSEXES  S EH1 K - S AH0 Z\nSEXES(2)  S EH1 K - S IH0 Z\nSEXIER  S EH1 K - S IY0 - ER0\nSEXIEST  S EH1 K - S IY0 - AH0 S T\nSEXISM  S EH1 K - S IH0 - Z AH0 M\nSEXIST  S EH1 K - S IH0 S T\nSEXLESS  S EH1 K S - L IH0 S\nSEXSON  S EH1 K - S AH0 N\nSEXTET  S EH0 K - S T EH1 T\nSEXTON  S EH1 K - S T AH0 N\nSEXTUPLET  S EH0 K S - T AH1 - P L IH0 T\nSEXTUPLETS  S EH0 K S - T AH1 - P L IH0 T S\nSEXTUS  S EH1 K - S T AH0 S\nSEXUAL  S EH1 K - SH UW0 - AH0 L\nSEXUALITY  S EH2 K - SH UW0 - AE1 - L AH0 - T IY0\nSEXUALLY  S EH1 K - SH UW0 - AH0 - L IY0\nSEXY  S EH1 K - S IY0\nSEYBERT  S EY1 - B ER0 T\nSEYBOLD  S EY1 - B OW2 L D\nSEYDEL  S EY1 - D AH0 L\nSEYDOUX  S EY2 - D UW1\nSEYER  S EY1 - ER0\nSEYFARTH  S EY1 - F AA2 R TH\nSEYFERT  S EY1 - F ER0 T\nSEYFRIED  S EY1 - F ER0 - IY0 D\nSEYI  S EY1 - IY0\nSEYLER  S EY1 - L ER0\nSEYLLER  S EY1 - L ER0\nSEYMORE  S IY1 - M AO0 R\nSEYMOUR  S IY1 - M AO0 R\nSEYMOUR'S  S IY1 - M AO0 R Z\nSFERNICE  S F ER1 - N IH0 S\nSFERNICE(2)  S AH0 - F ER1 - N IH0 S\nSFERRA  S F EH1 - R AH0\nSFERRAZZA  S F ER0 - AA1 T - S AH0\nSFFED  S F EH1 D\nSFFED(2)  EH1 - S EH2 - F EH1 D\nSFFED(3)  EH1 - S EH1 - F EH1 - F IY1 - D IY1\nSFORZA  S F AO1 R - Z AH0\nSFUZZI  S F UW1 T - Z IY0\nSGAMBATI  S K AA0 M - B AA1 - T IY0\nSGRO  S K R OW1\nSGROI  S K R OY1\nSH  EH1 - S EY1 CH\nSHA  SH AA1\nSHA'ATH  SH AA1 TH\nSHAAK  SH AA1 K\nSHAANXI  SH AA1 NG K - S IY0\nSHAATH  SH AA1 TH\nSHAATH'S  SH AA1 TH S\nSHABAD  SH AH0 - B AE1 D\nSHABAZZ  SH AA1 - B AA0 Z\nSHABBY  SH AE1 - B IY0\nSHABER  SH EY1 - B ER0\nSHACK  SH AE1 K\nSHACKELFORD  SH AE1 - K IH0 L - F ER0 D\nSHACKELTON  SH AH0 - K EH1 L - T AH0 N\nSHACKETT  SH AE1 - K IH0 T\nSHACKLE  SH AE1 - K AH0 L\nSHACKLED  SH AE1 - K AH0 L D\nSHACKLEFORD  SH AE1 - K AH0 L - F ER0 D\nSHACKLES  SH AE1 - K AH0 L Z\nSHACKLETON  SH AE1 - K AH0 L - T AH0 N\nSHACKLETT  SH AE1 K - L IH0 T\nSHACKS  SH AE1 K S\nSHAD  SH AE1 D\nSHAD'S  SH AE1 D Z\nSHADBUSH  SH AE1 D - B UH2 SH\nSHADD  SH AE1 D\nSHADDEN  SH AE1 - D AH0 N\nSHADDIX  SH AE1 - D IH0 K S\nSHADDOCK  SH AE1 - D AH0 K\nSHADDUCK  SH AE1 - D AH0 K\nSHADE  SH EY1 D\nSHADED  SH EY1 - D IH0 D\nSHADEGG  SH AE1 - D EH0 G\nSHADEL  SH AE1 - D AH0 L\nSHADER  SH EY1 - D ER0\nSHADES  SH EY1 D Z\nSHADID  SH AE1 - D IH0 D\nSHADING  SH EY1 - D IH0 NG\nSHADINGS  SH EY1 - D IH0 NG Z\nSHADLE  SH EY1 - D AH0 L\nSHADLEY  SH AE1 D - L IY0\nSHADOAN  SH AE1 - D OW0 N\nSHADOW  SH AE1 - D OW2\nSHADOWED  SH AE1 - D OW0 D\nSHADOWENS  SH AE1 - D OW0 - AH0 N Z\nSHADOWING  SH AE1 - D OW0 - IH0 NG\nSHADOWLAND  SH AE1 - D OW0 - L AE2 N D\nSHADOWLANDS  SH AE1 - D OW0 - L AE2 N D Z\nSHADOWS  SH AE1 - D OW2 Z\nSHADOWY  SH AE1 - D OW0 - IY0\nSHADRICK  SH AE1 - D R IH0 K\nSHADUR  SH AE1 - D ER0\nSHADWELL  SH AE1 D - W EH0 L\nSHADWICK  SH AE1 D - W IH0 K\nSHADY  SH EY1 - D IY0\nSHAEFER  SH EY1 - F ER0\nSHAEFFER  SH EH1 - F ER0\nSHAER  SH EY1 - ER0\nSHAFER  SH EY1 - F ER0\nSHAFF  SH AE1 F\nSHAFFER  SH EY1 - F ER0\nSHAFFNER  SH AE1 F - N ER0\nSHAFRAN  SH AE1 - F R AH0 N\nSHAFT  SH AE1 F T\nSHAFTED  SH AE1 F - T IH0 D\nSHAFTING  SH AE1 F - T IH0 NG\nSHAFTS  SH AE1 F T S\nSHAG  SH AE1 G\nSHAGGY  SH AE1 - G IY0\nSHAH  SH AA1\nSHAH'S  SH AA1 Z\nSHAHAN  SH AE1 - HH AH0 N\nSHAHEED  SH AH0 - HH IY1 D\nSHAHEEN  SH AH0 - HH IY1 N\nSHAHIAN  SH AH0 - HH IY1 - AH0 N\nSHAHIN  SH AE1 - HH IH0 N\nSHAHINIAN  SH AH0 - HH IH1 - N IY0 - AH0 N\nSHAHROKH  SH AA1 - R AA0 K\nSHAHRZAD  SH AA2 R - Z AE1 D\nSHAI  SH AY1\nSHAIK  SH EY1 K\nSHAIKEN  SH EY1 - K AH0 N\nSHAIKH  SH EY1 K\nSHAIN  SH EY1 N\nSHAINE  SH EY1 N\nSHAKA  SH AA1 - K AH0\nSHAKE  SH EY1 K\nSHAKEDOWN  SH EY1 K - D AW2 N\nSHAKEDOWNS  SH EY1 K - D AW2 N Z\nSHAKEN  SH EY1 - K AH0 N\nSHAKEOUT  SH EY1 K - AW2 T\nSHAKER  SH EY1 - K ER0\nSHAKERS  SH EY1 - K ER0 Z\nSHAKES  SH EY1 K S\nSHAKESPEARE  SH EY1 K - S P IY2 R\nSHAKESPEARE'S  SH EY1 K - S P IY2 R Z\nSHAKESPEAREAN  SH EY2 K - S P IH1 - R IY0 - AH0 N\nSHAKEUP  SH EY1 K - AH2 P\nSHAKEUPS  SH EY1 K - AH2 P S\nSHAKIER  SH EY1 - K IY0 - ER0\nSHAKIEST  SH EY1 - K IY0 - IH0 S T\nSHAKINESS  SH EY1 - K IY0 - N AH0 S\nSHAKING  SH EY1 - K IH0 NG\nSHAKIR  SH AE1 - K IH0 R\nSHAKLEE  SH AE1 K - L IY0\nSHAKUNAGA  SH AA2 - K UW0 - N AA1 - G AH0\nSHAKUR  SH AA1 - K ER0\nSHAKY  SH EY1 - K IY0\nSHALALA  SH AH0 - L EY1 - L AH0\nSHALALA'S  SH AH0 - L EY1 - L AH0 Z\nSHALE  SH EY1 L\nSHALER  SH EY1 - L ER0\nSHALES  SH EY1 L Z\nSHALI  SH AE1 - L IY0\nSHALIKASHVILI  SH AE2 - L IY0 - K AA0 SH - V IY1 - L IY0\nSHALIKASHVILI'S  SH AE2 - L IY0 - K AA0 SH - V IY1 - L IY0 Z\nSHALL  SH AE1 L\nSHALLCROSS  SH AE1 L - K R AA2 S\nSHALLENBERGER  SH AO1 - L AH0 N - B ER0 - G ER0\nSHALLOW  SH AE1 - L OW0\nSHALLOWER  SH AE1 - L OW0 - ER0\nSHALLOWNESS  SH AE1 - L OW0 - N AH0 S\nSHALNEV  SH AA1 L - N EH0 V\nSHALNEV(2)  SH AA1 L - N EH0 F\nSHALOM  SH AH0 - L OW1 M\nSHALT  SH AE1 L T\nSHAM  SH AE1 M\nSHAMAN  SH EY1 - M AH0 N\nSHAMANS  SH EY1 - M AH0 N Z\nSHAMAS  SH AE1 - M AH0 S\nSHAMBAUGH  SH AE1 M - B AO2\nSHAMBERGER  SH AE1 M - B ER0 - G ER0\nSHAMBLE  SH AE1 M - B AH0 L\nSHAMBLES  SH AE1 M - B AH0 L Z\nSHAMBLEY  SH AE1 M - B L IY0\nSHAMBLIN  SH AE1 M - B L IH0 N\nSHAMBO  SH AE1 M - B OW0\nSHAMBURG  SH AE1 M - B ER0 G\nSHAMBURGER  SH AE1 M - B ER0 - G ER0\nSHAME  SH EY1 M\nSHAMED  SH EY1 M D\nSHAMEFUL  SH EY1 M - F AH0 L\nSHAMEL  SH AE1 - M AH0 L\nSHAMELESS  SH EY1 M - L AH0 S\nSHAMELESSLY  SH EY1 M - L AH0 S - L IY0\nSHAMES  SH EY1 M Z\nSHAMING  SH EY1 - M IH0 NG\nSHAMIR  SH AH0 - M IH1 R\nSHAMIR'S  SH AH0 - M IH1 R Z\nSHAMP  SH AE1 M P\nSHAMPINE  SH AE1 M - P AY2 N\nSHAMPOO  SH AE0 M - P UW1\nSHAMPOOED  SH AE0 M - P UW1 D\nSHAMPOOS  SH AE0 M - P UW1 Z\nSHAMROCK  SH AE1 M - R AA2 K\nSHAMROCK'S  SH AE1 M - R AA2 K S\nSHAMU  SH AA0 - M UW1\nSHAMUS  SH EY1 - M AH0 S\nSHAN  SH AE1 N\nSHANA  SH AE1 - N AH0\nSHANA(2)  SH EY1 - N AH0\nSHANAFELT  SH AE1 - N AH0 - F EH2 L T\nSHANAHAN  SH AE1 - N AH0 - HH AE0 N\nSHANANSKY  SH AH0 - N AE1 N S - K IY0\nSHAND  SH AE1 N D\nSHANDLING  SH AE1 N D - L IH0 NG\nSHANDONG  SH AA2 N - D OW1 NG\nSHANDS  SH AE1 N D Z\nSHANDWICK  SH AE1 N D - W IH2 K\nSHANDWICK'S  SH AE1 N D - W IH2 K S\nSHANDY  SH AE1 N - D IY0\nSHANE  SH EY1 N\nSHANER  SH EY1 - N ER0\nSHANEYFELT  SH AE1 - N IY0 - F EH0 L T\nSHANGHAI  SH AE1 NG - HH AY1\nSHANGHAI'S  SH AE1 NG - HH AY1 Z\nSHANGKUN  SH AE1 NG - K AH0 N\nSHANGRI  SH AE1 NG - G R IY0\nSHANHOLTZ  SH AE1 N - HH OW2 L T S\nSHANHOLTZER  SH AE1 N - HH OW0 L T - Z ER0\nSHANK  SH AE1 NG K\nSHANKEL  SH AE1 NG - K AH0 L\nSHANKEN  SH AE1 NG - K AH0 N\nSHANKER  SH AE1 NG - K ER0\nSHANKLAND  SH AE1 NG - K L AH0 N D\nSHANKLE  SH AE1 NG - K AH0 L\nSHANKLES  SH AE1 NG - K AH0 L Z\nSHANKLIN  SH AE1 NG - K L IH0 N\nSHANKMAN  SH AE1 NG K - M AH0 N\nSHANKS  SH AE1 NG K S\nSHANLEY  SH AE1 N - L IY0\nSHANNAHAN  SH AE1 - N AH0 - HH AE0 N\nSHANNON  SH AE1 - N AH0 N\nSHANNON'S  SH AE1 - N AH0 N Z\nSHANSEV  SH AE1 N - S EH0 V\nSHANSEV(2)  SH AE1 N - S EH0 F\nSHANTI  SH AE1 N - T IY0\nSHANTIES  SH AE1 N - T IY0 Z\nSHANTY  SH AE1 N - T IY0\nSHANTYTOWN  SH AE1 N - T IY0 - T AW2 N\nSHANTYTOWNS  SH AE1 N - T IY0 - T AW2 N Z\nSHANTZ  SH AE1 N T S\nSHAO  SH AW1\nSHAP  SH AE1 P\nSHAPE  SH EY1 P\nSHAPED  SH EY1 P T\nSHAPELESS  SH EY1 P - L AH0 S\nSHAPELY  SH EY1 P - L IY0\nSHAPERO  SH AH0 - P IH1 - R OW0\nSHAPES  SH EY1 P S\nSHAPING  SH EY1 - P IH0 NG\nSHAPIRA  SH AH0 - P IH1 - R AH0\nSHAPIRO  SH AH0 - P IH1 - R OW0\nSHAPIRO'S  SH AH0 - P IH1 - R OW0 Z\nSHAPIROS  SH AH0 - P IH1 - R OW0 Z\nSHAPLEY  SH AE1 P - L IY0\nSHAPP  SH AE1 P\nSHAPPELL  SH AE1 - P AH0 L\nSHAQ  SH AE1 K\nSHAQUILLE  SH AH0 - K IY1 L\nSHARA  SH AA1 - R AH0\nSHARAA  SH AA1 - R AH0\nSHARANSKY  SH ER0 - AE1 N S - K IY0\nSHARAR  SH ER0 - AA1 R\nSHARBER  SH AA1 R - B ER0\nSHARBONO  SH AA0 R - B OW1 - N OW0\nSHARD  SH AA1 R D\nSHARDS  SH AA1 R D Z\nSHARE  SH EH1 R\nSHARE'S  SH EH1 R Z\nSHARECROPPER  SH EH1 R - K R AA2 - P ER0\nSHARECROPPERS  SH EH1 R - K R AA2 - P ER0 Z\nSHARED  SH EH1 R D\nSHAREHOLDER  SH EH1 R - HH OW2 L - D ER0\nSHAREHOLDER'S  SH EH1 R - HH OW2 L - D ER0 Z\nSHAREHOLDERS  SH EH1 R - HH OW2 L - D ER0 Z\nSHAREHOLDERS'  SH EH1 R - HH OW2 L - D ER0 Z\nSHAREHOLDING  SH EH1 R - HH OW2 L - D IH0 NG\nSHAREHOLDINGS  SH EH1 R - HH OW2 L - D IH0 NG Z\nSHARELL  SH AH0 - R EH1 L\nSHAREOWNER  SH EH1 - R OW2 - N ER0\nSHAREOWNERS  SH EH1 - R OW2 - N ER0 Z\nSHARER  SH EH1 - R ER0\nSHARES  SH EH1 R Z\nSHARES'  SH EH1 R Z\nSHAREWARE  SH EH1 R - W EH2 R\nSHARF  SH AA1 R F\nSHARFMAN  SH AA1 R F - M AH0 N\nSHARI  SH AA1 - R IY0\nSHARIA  SH EH1 - R IY0 - AH0\nSHARIF  SH ER0 - IY1 F\nSHARING  SH EH1 - R IH0 NG\nSHARK  SH AA1 R K\nSHARKEY  SH AA1 R - K IY0\nSHARKING  SH AA1 R - K IH0 NG\nSHARKLIKE  SH AA1 R K - L AY2 K\nSHARKS  SH AA1 R K S\nSHARLA  SH AA1 R - L AH0\nSHARLEEN  SH AA0 R - L IY1 N\nSHARLENE  SH AA1 R - L IY2 N\nSHARLINE  SH AA1 R - L AY2 N\nSHARLOW  SH AA1 R - L OW0\nSHARM  SH AA1 R M\nSHARMA  SH AA1 R - M AH0\nSHARMA'S  SH AA1 R - M AH0 Z\nSHARMAN  SH AA1 R - M AH0 N\nSHARON  SH AE1 - R AH0 N\nSHARON'S  SH EH1 - R AH0 N Z\nSHARON'S(2)  SH AE1 - R AH0 N Z\nSHARON'S(3)  SH AH0 - R OW1 N Z\nSHARON(2)  SH EH1 - R AH0 N\nSHARON(3)  SH AH0 - R OW1 N\nSHARP  SH AA1 R P\nSHARP'S  SH AA1 R P S\nSHARP-SIGN  SH AA1 R P - S AY1 N\nSHARPE  SH AA1 R P\nSHARPEN  SH AA1 R - P AH0 N\nSHARPENED  SH AA1 R - P AH0 N D\nSHARPENING  SH AA1 R - P AH0 - N IH0 NG\nSHARPENING(2)  SH AA1 R P - N IH0 NG\nSHARPENS  SH AA1 R - P AH0 N Z\nSHARPER  SH AA1 R - P ER0\nSHARPEST  SH AA1 R - P AH0 S T\nSHARPEVILLE  SH AA1 R - P AH0 - V IH2 L\nSHARPIE  SH AA1 R - P IY0\nSHARPLES  SH AA1 R - P AH0 L Z\nSHARPLESS  SH AA1 R P - L AH0 S\nSHARPLEY  SH AA1 R P - L IY0\nSHARPLY  SH AA1 R P - L IY0\nSHARPNACK  SH AA1 R P - N AH0 K\nSHARPNESS  SH AA1 R P - N AH0 S\nSHARPS  SH AA1 R P S\nSHARPSHOOTER  SH AA1 R P - SH UW0 - T ER0\nSHARPSHOOTER  SH AA1 R P - SH UW2 - T ER0\nSHARPSHOOTERS  SH AA1 R P - SH UW0 - T ER0 Z\nSHARPTON  SH AA1 R P - T AH0 N\nSHARPY  SH AA1 R - P IY0\nSHARPY'S  SH AA1 R - P IY0 Z\nSHARRAR  SH ER0 - AA1 R\nSHARRER  SH AA1 - R ER0\nSHARRETT  SH AE1 - R IH0 T\nSHARROCK  SH AE1 - R AH0 K\nSHARRON  SH AE1 - R AH0 N\nSHARROW  SH AE1 - R OW0\nSHARRY  SH AA1 - R IY0\nSHARTZER  SH AA1 R T - Z ER0\nSHARUM  SH ER0 - AH1 M\nSHARYL  SH EH1 - R AH0 L\nSHAS  SH AH1 S\nSHASHLIK  SH AE1 SH - L IH0 K\nSHASHOUA  SH AH0 - SH UW1 - AH0\nSHASTA  SH AE1 - S T AH0\nSHASTA'S  SH AE1 - S T AH0 Z\nSHASTEEN  SH AH0 - S T IY1 N\nSHATKIN  SH AE1 T - K IH0 N\nSHATLEY  SH AE1 T - L IY0\nSHATNER  SH AE1 T - N ER0\nSHATROV  SH AE1 - T R AA0 V\nSHATT  SH AE1 T\nSHATTER  SH AE1 - T ER0\nSHATTERED  SH AE1 - T ER0 D\nSHATTERING  SH AE1 - T ER0 - IH0 NG\nSHATTERPROOF  SH AE1 - T ER0 - P R UW2 F\nSHATTERS  SH AE1 - T ER0 Z\nSHATTUCK  SH AE1 - T AH0 K\nSHATZ  SH AE1 T S\nSHATZ(2)  SH AA1 T S\nSHATZER  SH EY1 T - Z ER0\nSHAUB  SH AO1 B\nSHAUGER  SH AW1 - G ER0\nSHAUGHNESSY  SH AO1 - N IH0 - S IY0\nSHAUL  SH AO1 L\nSHAULIS  SH AW1 - L IH0 S\nSHAULL  SH AO1 L\nSHAUN  SH AO1 N\nSHAUNA  SH AO1 - N AH0\nSHAVE  SH EY1 V\nSHAVED  SH EY1 V D\nSHAVELSON  SH EY1 - V AH0 L - S IH0 N\nSHAVELSON(2)  SH AE1 - V AH0 L - S IH0 N\nSHAVEN  SH EY1 - V AH0 N\nSHAVER  SH EY1 - V ER0\nSHAVERS  SH EY1 - V ER0 Z\nSHAVES  SH EY1 V Z\nSHAVING  SH EY1 - V IH0 NG\nSHAVINGS  SH EY1 - V IH0 NG Z\nSHAVORD  SH AH0 - V AO1 R D\nSHAW  SH AO1\nSHAW'S  SH AO1 Z\nSHAWCROSS  SH AO1 - K R AO2 S\nSHAWGO  SH AO1 - G OW2\nSHAWHAN  SH AE1 - W AH0 N\nSHAWINIGAN  SH AH0 - W IH1 - N IH0 - G AH0 N\nSHAWL  SH AO1 L\nSHAWLER  SH AO1 - L ER0\nSHAWLEY  SH AO1 - L IY0\nSHAWLS  SH AO1 L Z\nSHAWMUT  SH AO1 - M AH0 T\nSHAWMUT'S  SH AO1 - M AH0 T S\nSHAWN  SH AO1 N\nSHAWN'S  SH AO1 N Z\nSHAWNA  SH AO1 - N AH0\nSHAWNEE  SH AO1 - N IY0\nSHAWNUT  SH AO1 - N AH0 T\nSHAWSHANK  SH AO1 - SH AE2 N K\nSHAWVER  SH AO1 - V ER0\nSHAY  SH EY1\nSHAYKIN  SH EY1 - K IH0 N\nSHAYKIN'S  SH EY1 - K IH0 N Z\nSHAYNE  SH EY1 N\nSHAYS  SH EY1 Z\nSHCHARANSKY  SH ER0 - AE1 N S - K IY0\nSHCHEDRIN  SH EH1 D - R IH0 N\nSHCHERBITSKY  SH ER0 - B IH1 T S - K IY0\nSHE  SH IY1\nSHE'D  SH IY1 D\nSHE'LL  SH IY1 L\nSHE'S  SH IY1 Z\nSHEA  SH EY1\nSHEA'S  SH EY1 Z\nSHEAD  S HH EH1 D\nSHEAF  SH IY1 F\nSHEAFFER  SH IY1 - F ER0\nSHEAHAN  SH IY1 - AH0 N\nSHEALEY  SH IY1 - L IY0\nSHEALY  SH IY1 - L IY0\nSHEAN  SH IY1 N\nSHEAR  SH IH1 R\nSHEAR'S  SH IY1 R Z\nSHEARD  SH IH1 R D\nSHEARED  SH IH1 R D\nSHEARER  SH IH1 - R ER0\nSHEARIN  SH IH1 - R IH0 N\nSHEARING  SH IH1 - R IH0 NG\nSHEARMAN  SH IY1 R - M AH0 N\nSHEARN  SH IH1 R N\nSHEARON  SH IH1 - R AH0 N\nSHEAROUSE  SH IH1 - R AW0 S\nSHEARS  SH IY1 R Z\nSHEARSON  SH IH1 R - S AH0 N\nSHEARSON'S  SH IH1 R - S AH0 N Z\nSHEATH  SH IY1 TH\nSHEATHBILL  SH IY1 TH - B IH0 L\nSHEATHBILLS  SH IY1 TH - B IH0 L Z\nSHEATHE  SH IY1 DH\nSHEATHED  SH IY1 DH D\nSHEATHING  SH IY1 - DH IH0 NG\nSHEATS  SH IY1 T S\nSHEAVES  SH IY1 V Z\nSHEBA  SH IY1 - B AH0\nSHEBOYGAN  SH AH0 - B OY1 - G AH0 N\nSHECK  SH EH1 K\nSHECK'S  SH EH1 K S\nSHECKLER  SH EH1 K - L ER0\nSHED  SH EH1 D\nSHEDD  SH EH1 D\nSHEDDEN  SH EH1 - D AH0 N\nSHEDDING  SH EH1 - D IH0 NG\nSHEDLOCK  SH EH1 D - L AA2 K\nSHEDRICK  SH EH1 D - R IH0 K\nSHEDS  SH EH1 D Z\nSHEEDER  SH IY1 - D ER0\nSHEEDY  SH IY1 - D IY0\nSHEEHAN  SH IY1 - AH0 N\nSHEEHAN'S  SH IY1 - AH0 N Z\nSHEEHAN'S(2)  SH IY1 - HH AH0 N Z\nSHEEHAN(2)  SH IY1 - HH AH0 N\nSHEEHY  SH IY1 - HH IY0\nSHEEHY(2)  SH IY1 - IY0\nSHEEK  SH IY1 K\nSHEEKS  SH IY1 K S\nSHEELA  SH IY1 - L AH0\nSHEELAH  SH IY1 - L AH0\nSHEELEN  SH IY1 - L AH0 N\nSHEELER  SH IY1 - L ER0\nSHEELEY  SH IY1 - L IY0\nSHEELY  SH IY1 - L IY0\nSHEEN  SH IY1 N\nSHEENA  SH IY1 - N AH0\nSHEEP  SH IY1 P\nSHEEP'S  SH IY1 P S\nSHEEPISH  SH IY1 - P IH0 SH\nSHEEPISHLY  SH IY1 - P IH0 SH - L IY0\nSHEEPS  SH IY1 P S\nSHEEPSKIN  SH IY1 P - S K IH2 N\nSHEER  SH IH1 R\nSHEERAN  SH IH1 - R AH0 N\nSHEERER  SH IY1 - R ER0\nSHEERIN  SH IH1 - R IH0 N\nSHEESH  SH IY1 SH\nSHEESLEY  SH IY1 Z - L IY0\nSHEET  SH IY1 T\nSHEETING  SH IY1 - T IH0 NG\nSHEETS  SH IY1 T S\nSHEETZ  SH IY1 T S\nSHEFF  SH EH1 F\nSHEFFER  SH EH1 - F ER0\nSHEFFEY  SH EH1 - F IY0\nSHEFFIELD  SH EH1 - F IY0 L D\nSHEFFLER  SH EH1 F - L ER0\nSHEFTEL  SH EH2 F - T EH1 L\nSHEFTEL'S  SH EH2 F - T EH1 L Z\nSHEGOG  SH EH1 - G AA0 G\nSHEHAN  SH EH1 - HH AH0 N\nSHEHANE  SH EH1 - HH AH0 N\nSHEHORN  SH EH1 - HH ER0 N\nSHEIK  SH IY1 K\nSHEIK'S  SH IY1 K S\nSHEIKDOM  SH IY1 K - D AH0 M\nSHEIKDOMS  SH IY1 K - D AH0 M Z\nSHEIKH  SH IY1 K\nSHEIKS  SH IY1 K S\nSHEIL  SH AY1 L\nSHEILA  SH IY1 - L AH0\nSHEILA'S  SH IY1 - L AH0 Z\nSHEILAH  SH IY1 - L AH0\nSHEILDS  SH AY1 L D Z\nSHEILS  SH AY1 L Z\nSHEIN  SH AY1 N\nSHEINBERG  SH AY1 N - B ER0 G\nSHEK  SH EH1 K\nSHEK'S  SH EH1 K S\nSHEKEL  SH EH1 - K AH0 L\nSHEKELS  SH EH1 - K AH0 L Z\nSHELBURNE  SH EH1 L - B ER0 N\nSHELBY  SH EH1 L - B IY0\nSHELBY'S  SH EH1 L - B IY0 Z\nSHELBYVILLE  SH EH1 L - B IY0 - V IH2 L\nSHELDAHL  SH EH1 L - D AA2 L\nSHELDEN  SH EH1 L - D AH0 N\nSHELDON  SH EH1 L - D AH0 N\nSHELEV  SH EH1 - L IH0 V\nSHELEY  SH IY1 - L IY0\nSHELF  SH EH1 L F\nSHELHAMER  SH EH1 L - HH AH0 - M ER0\nSHELINE  SH EH1 - L AY0 N\nSHELL  SH EH1 L\nSHELL'S  SH EH1 L Z\nSHELLABARGER  SH EH1 - L AH0 - B AA2 R - G ER0\nSHELLED  SH EH1 L D\nSHELLENBARGER  SH EH1 - L IH0 N - B AA0 R - G ER0\nSHELLENBERGER  SH EH1 - L AH0 N - B ER0 - G ER0\nSHELLER  SH EH1 - L ER0\nSHELLEY  SH EH1 - L IY0\nSHELLEY'S  SH EH1 - L IY0 Z\nSHELLFISH  SH EH1 L - F IH2 SH\nSHELLHAMMER  SH EH1 L - HH AE2 - M ER0\nSHELLHORN  SH EH1 L - HH ER0 N\nSHELLING  SH EH1 - L IH0 NG\nSHELLINGS  SH EH1 - L IH0 NG Z\nSHELLITO  SH EY0 - L IY1 - T OW0\nSHELLMAN  SH EH1 L - M AH0 N\nSHELLS  SH EH1 L Z\nSHELLSHOCK  SH EH1 L - SH AA2 K\nSHELLSHOCKED  SH EH1 L - SH AA2 K T\nSHELLY  SH EH1 - L IY0\nSHELMAN  SH EH1 L - M AH0 N\nSHELNUTT  SH EH1 L - N AH0 T\nSHELOR  SH EH1 - L ER0\nSHELP  SH EH1 L P\nSHELSTAD  SH EH1 L - S T AH0 D\nSHELTER  SH EH1 L - T ER0\nSHELTERED  SH EH1 L - T ER0 D\nSHELTERING  SH EH1 L - T ER0 - IH0 NG\nSHELTERS  SH EH1 L - T ER0 Z\nSHELTON  SH EH1 L - T AH0 N\nSHELTON'S  SH EH1 L - T AH0 N Z\nSHELVE  SH EH1 L V\nSHELVED  SH EH1 L V D\nSHELVES  SH EH1 L V Z\nSHELVING  SH EH1 L - V IH0 NG\nSHEMANSKI  SH IH0 - M AE1 N - S K IY0\nSHEMONA  SH IH0 - M OW1 - N AH0\nSHEMWELL  SH EH1 M - W EH2 L\nSHEN  SH EH1 N\nSHENA  SH IY1 - N AH0\nSHENANDOAH  SH EH2 - N AH0 N - D OW1 - AH0\nSHENANIGAN  SH AH0 - N AE1 - N IH0 - G AH0 N\nSHENANIGANS  SH AH0 - N AE1 - N IH0 - G AH0 N Z\nSHENBERGER  SH EH1 N - B ER0 - G ER0\nSHENEFIELD  SH EH1 - N IH0 - F IY2 L D\nSHENEMAN  SH IY1 N - M AH0 N\nSHENG  SH EH1 NG\nSHENG-FEN  SH EH1 NG - F EH1 N\nSHENICE  SH AH0 - N IY1 S\nSHENK  SH EH1 NG K\nSHENKER  SH EH1 NG - K ER0\nSHENKMAN  SH EH1 NG K - M AH0 N\nSHENTON  SH EH1 N - T AH0 N\nSHENYANG  SH EH0 - N Y AE1 NG\nSHENZHEN  SH EH1 N - ZH EH2 N\nSHEP  SH EH1 P\nSHEPARD  SH EH1 - P ER0 D\nSHEPARD'S  SH EH1 - P ER0 D Z\nSHEPARDSON  SH EH1 - P AA0 R D - S AH0 N\nSHEPERD  SH EH1 - P ER0 D\nSHEPHARD  SH EH1 - F ER0 D\nSHEPHEARD  SH EH1 - F ER0 D\nSHEPHERD  SH EH1 - P ER0 D\nSHEPHERD'S  SH EH1 - P ER0 D Z\nSHEPHERDED  SH EH1 - P ER0 - D IH0 D\nSHEPHERDING  SH EH1 - P ER0 - D IH0 NG\nSHEPHERDS  SH EH1 - P ER0 D Z\nSHEPLER  SH EH1 P - L ER0\nSHEPLEY  SH EH1 P - L IY0\nSHEPP  SH EH1 P\nSHEPPARD  SH EH1 - P ER0 D\nSHEPPARDS  SH EH1 - P ER0 D Z\nSHEPPER  SH EH1 - P ER0\nSHEPPERD  SH EH1 - P ER0 D\nSHEPPERSON  SH EH1 - P ER0 - S AH0 N\nSHEPPY  SH EH1 - P IY0\nSHER  SH ER1\nSHERAK  SH EH1 - R AE0 K\nSHERARD  SH EH1 - R ER0 D\nSHERATON  SH EH1 - R AH0 - T AH0 N\nSHERATON'S  SH EH1 - R AH0 - T AH0 N Z\nSHERBERT  SH ER1 - B ER0 T\nSHERBET  SH ER1 - B AH0 T\nSHERBONDY  SH ER0 - B AA1 N - D IY0\nSHERBORNE  SH ER1 - B ER0 N\nSHERBOURN  SH ER0 - B UH1 R N\nSHERBOURNE  SH ER0 - B UH1 R N\nSHERBURN  SH ER1 - B ER0 N\nSHERBURNE  SH ER1 - B ER0 N\nSHERE  SH IH1 R\nSHEREE  SH ER0 - IY1\nSHERER  SH IH1 - R ER0\nSHERFEY  SH ER1 - F IY0\nSHERFIELD  SH ER1 - F IY0 L D\nSHERI  SH EH1 - R IY0\nSHERICK  SH EH1 - R IH0 K\nSHERIDAN  SH EH1 - R IH0 - D AH0 N\nSHERIFF  SH EH1 - R AH0 F\nSHERIFF'S  SH EH1 - R AH0 F S\nSHERIFF'S(2)  SH EH1 - R IH0 F S\nSHERIFF(2)  SH EH1 - R IH0 F\nSHERIFFS  SH EH1 - R AH0 F S\nSHERIN  SH EH1 - R IH0 N\nSHERK  SH ER1 K\nSHERLEY  SH ER1 - L IY0\nSHERLIN  SH ER1 - L IH0 N\nSHERLOCK  SH ER1 - L AA2 K\nSHERLOCK'S  SH ER1 - L AA2 K S\nSHERLUND  SH ER1 - L AH0 N D\nSHERMAN  SH ER1 - M AH0 N\nSHERMAN'S  SH ER1 - M AH0 N Z\nSHERMER  SH ER1 - M ER0\nSHERNOFF  SH ER1 - N AO2 F\nSHEROD  SH EH1 - R AH0 D\nSHERR  SH EH1 R\nSHERR'S  SH EH1 R Z\nSHERRARD  SH EH1 - R ER0 D\nSHERRELL  SH EH1 - R AH0 L\nSHERRER  SH EH1 - R ER0\nSHERRGOLD  SH EH1 R - G OW2 L D\nSHERRI  SH EH1 - R IY0\nSHERRI'S  SH EH1 - R IY0 Z\nSHERRICK  SH EH1 - R IH0 K\nSHERRIE  SH EH1 - R IY0\nSHERRIFF  SH EH1 - R IH0 F\nSHERRILL  SH EH1 - R IH0 L\nSHERRIN  SH EH1 - R IH0 N\nSHERRIT  SH EH1 - R IH0 T\nSHERRITT  SH EH1 - R IH0 T\nSHERROD  SH EH1 - R AH0 D\nSHERRON  SH EH1 - R AH0 N\nSHERROW  SH EH1 - R OW0\nSHERRY  SH EH1 - R IY0\nSHERRY'S  SH EH1 - R IY0 Z\nSHERTZER  SH ER1 T - Z ER0\nSHERVA  SH ER1 - V AH0\nSHERWIN  SH ER1 - W IH0 N\nSHERWOOD  SH ER1 - W UH2 D\nSHERWOOD'S  SH ER1 - W UH2 D Z\nSHERYL  SH EH1 - R AH0 L\nSHESHUNOFF  SH EH1 - SH UW0 - N AO0 F\nSHETH  SH EH1 TH\nSHETLAND  SH EH1 T - L AH0 N D\nSHETLER  SH EH1 T - L ER0\nSHETLEY  SH EH1 T - L IY0\nSHETTER  SH EH1 - T ER0\nSHETTERLY  SH EH1 - T ER0 - L IY0\nSHEVARDNADZE  SH EH2 - V ER0 D - N AA1 D - Z IY0\nSHEVARDNADZE'S  SH EH2 - V ER0 D - N AA1 D - Z IY0 Z\nSHEVLIN  SH EH1 V - L IH0 N\nSHEVTL  SH EH1 - V IH0 L\nSHEVTL(2)  SH IY1 - V IH0 L\nSHEW  SH UW1\nSHEWARD  SH UW1 - ER0 D\nSHEWCHUK  SH UW1 - CH AH0 K\nSHEWELL  SH EH1 - W EH0 L\nSHEWMAKE  SH UW1 - M EY2 K\nSHEWMAKER  SH UW1 - M EY0 - K ER0\nSHH  SH\nSHI  SH IY1\nSHIA  SH IY1 - AH0\nSHIAS  SH IY1 - AH0 Z\nSHIBANNA  SH IH0 - B AE1 - N AH0\nSHIBATA  SH IY0 - B AA1 - T AH0\nSHIBBOLETH  SH IH1 - B AH0 - L EH2 TH\nSHIBLEY  SH IH1 - B L IY0\nSHICK  SH IH1 K\nSHICOFF  SH IH1 K - AO2 F\nSHIDELER  SH IH1 - D AH0 L - ER0\nSHIDLER  SH AY1 - D AH0 - L ER0\nSHIDLER(2)  SH AY1 D - L ER0\nSHIED  SH AY1 D\nSHIEH  SH IY1\nSHIEL  SH IY1 L\nSHIELA  SH AY1 - L AH0\nSHIELD  SH IY1 L D\nSHIELD'S  SH IY1 L D Z\nSHIELDED  SH IY1 L - D IH0 D\nSHIELDING  SH IY1 L - D IH0 NG\nSHIELDS  SH IY1 L D Z\nSHIELS  SH IY1 L Z\nSHIER  SH AY1 - ER0\nSHIES  SH AY1 Z\nSHIFF  SH IH1 F\nSHIFFER  SH IH1 - F ER0\nSHIFFLER  SH IH1 F - L ER0\nSHIFFLET  SH IH1 F - L IH0 T\nSHIFFLETT  SH IH1 F - L IH0 T\nSHIFFMAN  SH IH1 F - M AH0 N\nSHIFLET  SH IH1 F - L IH0 T\nSHIFLETT  SH IH1 F - L IH0 T\nSHIFRIN  SH IH1 - F R IH0 N\nSHIFT  SH IH1 F T\nSHIFTED  SH IH1 F - T AH0 D\nSHIFTED(2)  SH IH1 F - T IH0 D\nSHIFTER  SH IH1 F - T ER0\nSHIFTING  SH IH1 F - T IH0 NG\nSHIFTLESS  SH IH1 F T - L IH0 S\nSHIFTS  SH IH1 F T S\nSHIFTY  SH IH1 F - T IY0\nSHIGEKI  SH IH0 - G EY1 - K IY0\nSHIGEKUNI  SH IY2 - G IH0 - K UW1 - N IY0\nSHIGEO  SH IH0 - G EY1 - OW0\nSHIGERU  SH IH0 - G EY1 - R UW0\nSHIGLEY  SH IH1 G - L IY0\nSHIH  SH IY1\nSHIHAN  SH IY1 - HH AA2 N\nSHIINA  SH IY1 - N AH0\nSHIITE  SH IY1 - AY2 T\nSHIITES  SH IY1 - AY2 T S\nSHILEY  SH IH1 - L IY0\nSHILL  SH IH1 L\nSHILLER  SH IH1 - L ER0\nSHILLING  SH IH1 - L IH0 NG\nSHILLINGBURG  SH IH1 - L IH0 NG - B ER0 G\nSHILLINGER  SH IH1 - L IH0 N - JH ER0\nSHILLINGLAW  SH IH1 - L IH0 NG - L AO2\nSHILLINGS  SH IH1 - L IH0 NG Z\nSHILLINGTON  SH IH1 - L IH0 NG - T AH0 N\nSHILOH  SH AY1 - L OW0\nSHILTS  SH IH1 L T S\nSHIM  SH IH1 M\nSHIMA  SH IY1 - M AH0\nSHIMABUKURO  SH IY0 - M AA0 - B UW0 - K UH1 - R OW0\nSHIMADA  SH IY0 - M AA1 - D AH0\nSHIMBUN  SH IH1 M - B AH2 N\nSHIMBUN(2)  SH IH1 M - B UW2 N\nSHIMEK  SH IH1 - M IH0 K\nSHIMEL  SH IH1 - M AH0 L\nSHIMER  SH AY1 - M ER0\nSHIMIZU  SH IH0 - M IY1 - Z UW0\nSHIMKO  SH IH1 M - K OW0\nSHIMKUS  SH IH1 M - K AH0 S\nSHIMMEL  SH IH1 - M AH0 L\nSHIMMER  SH IH1 - M ER0\nSHIMMERED  SH IH1 - M ER0 D\nSHIMMERING  SH IH1 - M ER0 - IH0 NG\nSHIMMERLIK  SH IH1 - M ER0 - L IH0 K\nSHIMMERS  SH IH1 - M ER0 Z\nSHIMMIN  SH IH1 - M IH0 N\nSHIMMY  SH IH1 - M IY0\nSHIMODA  SH IH0 - M OW1 - D AH0\nSHIMOGA  SH IH0 - M OW1 - G AH0\nSHIMOKAWA  SH IH2 - M OW0 - K AA1 - W AH0\nSHIMON  SH IY1 - M OW0 N\nSHIMON(2)  SH IY1 - M AH0 N\nSHIMONE  SH IY1 - M OW0 N\nSHIMP  SH IH1 M P\nSHIN  SH IH1 N\nSHINALL  SH IH1 - N AH0 L\nSHINAULT  SH IH1 - N AW0 L T\nSHINBEIN  SH IH1 N - B AY2 N\nSHINBONE  SH IH1 N - B OW2 N\nSHINDIG  SH IH1 N - D IH0 G\nSHINDLE  SH IH1 N - D AH0 L\nSHINDLEDECKER  SH IH1 N - D AH0 L - D IH0 - K ER0\nSHINDLER  SH IH1 N D - L ER0\nSHINDLER'S  SH IH1 N D - L ER0 Z\nSHINDOU  SH IH1 N - D OW2\nSHINE  SH AY1 N\nSHINED  SH AY1 N D\nSHINER  SH AY1 - N ER0\nSHINES  SH AY1 N Z\nSHING  SH IH1 NG\nSHINGLE  SH IH1 NG - G AH0 L\nSHINGLEDECKER  SH IH1 NG - G AH0 L - D IH0 - K ER0\nSHINGLER  SH IH1 NG - L ER0\nSHINGLES  SH IH1 NG - G AH0 L Z\nSHINGLETON  SH IH1 NG - G AH0 L - T AH0 N\nSHINICHI  SH IH0 - N IY1 - CH IY0\nSHINING  SH AY1 - N IH0 NG\nSHINKLE  SH IH1 NG - K AH0 L\nSHINKO  SH IH1 NG - K OW0\nSHINN  SH IH1 N\nSHINNERS  SH IH1 - N ER0 Z\nSHINNICK  SH IH1 - N IH0 K\nSHINRI  SH IH1 N - R IY0\nSHINRIKYO  SH IH0 N - R IY1 - K Y OW0\nSHINSEI  SH IH0 N - S EY1\nSHINSKY  SH IH1 N - S K IY0\nSHINTARO  SH IH0 N - T AA1 - R OW0\nSHINTO  SH IH1 N - T OW2\nSHINWA  SH IH1 N - W AH0\nSHINXIAKU  SH IH2 N - CH Y AA1 - K UW0\nSHINY  SH AY1 - N IY0\nSHINYUKA  SH IH2 - N Y UW1 - K AH0\nSHIONOGI  SH IY2 - AH0 - N OW1 - G IY0\nSHIP  SH IH1 P\nSHIP'S  SH IH1 P S\nSHIPBOARD  SH IH1 P - B AO2 R D\nSHIPBUILDER  SH IH1 P - B IH2 L - D ER0\nSHIPBUILDERS  SH IH1 P - B IH2 L - D ER0 Z\nSHIPBUILDING  SH IH1 P - B IH2 L - D IH0 NG\nSHIPBUILDINGS  SH IH1 P - B IH2 L - D IH0 NG Z\nSHIPE  SH AY1 P\nSHIPES  SH AY1 P S\nSHIPHOLDING  SH IH1 P - HH OW2 L - D IH0 NG\nSHIPLETT  SH IH1 P - L IH0 T\nSHIPLEY  SH IH1 P - L IY0\nSHIPLOAD  SH IH1 P - L OW2 D\nSHIPLOADS  SH IH1 P - L OW2 D Z\nSHIPMAN  SH IH1 P - M AH0 N\nSHIPMATE  SH IH1 P - M EY2 T\nSHIPMATES  SH IH1 P - M EY2 T S\nSHIPMENT  SH IH1 P - M AH0 N T\nSHIPMENTS  SH IH1 P - M AH0 N T S\nSHIPOWNER  SH IH1 P - OW2 - N ER0\nSHIPOWNERS  SH IH1 P - OW2 - N ER0 Z\nSHIPP  SH IH1 P\nSHIPP'S  SH IH1 P S\nSHIPPED  SH IH1 P T\nSHIPPEE  SH IH1 - P IY1\nSHIPPER  SH IH1 - P ER0\nSHIPPER'S  SH IH1 - P ER0 Z\nSHIPPERS  SH IH1 - P ER0 Z\nSHIPPEY  SH IH1 - P IY0\nSHIPPING  SH IH1 - P IH0 NG\nSHIPPINGPORT  SH IH1 - P IH0 NG - P AO2 R T\nSHIPPS  SH IH1 P S\nSHIPPY  SH IH1 - P IY0\nSHIPS  SH IH1 P S\nSHIPS'  SH IH1 P S\nSHIPSHAPE  SH IH1 P - SH EY2 P\nSHIPTON  SH IH1 P - T AH0 N\nSHIPWASH  SH IH1 P - W AA2 SH\nSHIPWRECK  SH IH1 P - R EH0 K\nSHIPWRIGHT  SH IH1 P - R AY2 T\nSHIPWRIGHTS  SH IH1 P - R AY2 T S\nSHIPYARD  SH IH1 P - Y AA2 R D\nSHIPYARD'S  SH IH1 P - Y AA2 R D Z\nSHIPYARDS  SH IH1 P - Y AA2 R D Z\nSHIR  SH ER1\nSHIRA  SH IH1 - R AH0\nSHIRAH  SH IH1 - R AH0\nSHIRAISHI  SH IH0 - R AA0 - IY1 - SH IY0\nSHIRAZI  SH IH0 - R AA1 - Z IY0\nSHIRE  SH AY1 R\nSHIRELL  SH IH0 - R EH1 L\nSHIRELLE  SH IH0 - R EH1 L\nSHIREMAN  SH IH0 - R EY1 - M AH0 N\nSHIREMANSTOWN  SH AY1 R - M AH0 N Z - T AW2 N\nSHIRER  SH AY1 - ER0 R\nSHIRES  SH AY1 R Z\nSHIREY  SH AY1 - R IY0\nSHIRIN  SH IH1 - R AH0 N\nSHIRK  SH ER1 K\nSHIRKED  SH ER1 K T\nSHIRKEY  SH ER1 - K IY0\nSHIRKING  SH ER1 - K IH0 NG\nSHIRL  SH ER1 L\nSHIRLEE  SH ER1 - L IY0\nSHIRLEEN  SH ER0 - L IY1 N\nSHIRLENE  SH ER1 - L IY0 N\nSHIRLEY  SH ER1 - L IY0\nSHIRLEY'S  SH ER1 - L IY0 Z\nSHIRLIE  SH ER1 - L IY0\nSHIROMA  SH IH0 - R OW1 - M AH0\nSHIRONE  SH IH0 - R OW1 N\nSHIRR  SH ER1\nSHIRRELL  SH AO1 - R AH0 L\nSHIRT  SH ER1 T\nSHIRTS  SH ER1 T S\nSHIRTSLEEVE  SH ER1 T - S L IY2 V\nSHISEIDO  SH IH0 - S EY1 - D OW0\nSHISHIDO  SH IY0 - SH IY1 - D OW0\nSHISLER  SH IH1 - S AH0 - L ER0\nSHISLER(2)  SH IH1 S - L ER0\nSHISSLER  SH IH1 S - L ER0\nSHIT  SH IH1 T\nSHITILA  SH AH0 - T IH1 - L AH0\nSHIU  SH UW1\nSHIVA  SH IY1 - V AH0\nSHIVE  SH AY1 V\nSHIVELEY  SH IH1 - V IH0 - L IY0\nSHIVELEY(2)  SH IH1 V - L IY0\nSHIVELY  SH AY1 V - L IY0\nSHIVER  SH IH1 - V ER0\nSHIVERDECKER  SH IH1 - V ER0 - D IH0 - K ER0\nSHIVERED  SH IH1 - V ER0 D\nSHIVERING  SH IH1 - V ER0 - IH0 NG\nSHIVERS  SH IH1 - V ER0 Z\nSHIVES  SH AY1 V Z\nSHIVLEY  SH IH1 V - L IY0\nSHIYUAN  SH IY1 - UW0 - AA0 N\nSHIZUKA  SH IH0 - Z UW1 - K AH0\nSHIZUOKA  SH IY0 Z - W OW1 - K AH0\nSHLAES  SH L EY1 Z\nSHLENKER  SH L EH1 NG - K ER0\nSHLOBIDAN  SH L OW0 - B IH1 - D AH0 N\nSHOAF  SH OW1 F\nSHOAFF  SH OW1 F\nSHOALS  SH OW1 L Z\nSHOBANA  SH OW2 - B AA1 - N AH0\nSHOBANA'S  SH OW2 - B AA1 - N AH0 Z\nSHOBANNA  SH OW2 - B AA1 - N AH0\nSHOBANNA'S  SH OW2 - B AA1 - N AH0 Z\nSHOBE  SH OW1 B\nSHOBER  SH OW1 - B ER0\nSHOBERG  SH OW1 - B ER0 G\nSHOBERT  SH AA1 - B ER0 T\nSHOCK  SH AA1 K\nSHOCKED  SH AA1 K T\nSHOCKER  SH AA1 - K ER0\nSHOCKEY  SH AA1 - K IY0\nSHOCKING  SH AA1 - K IH0 NG\nSHOCKINGLY  SH AA1 - K IH0 NG - L IY0\nSHOCKLEY  SH AA1 K - L IY0\nSHOCKS  SH AA1 K S\nSHOCKWAVE  SH AA1 - K W EY2 V\nSHOCKWAVES  SH AA1 - K W EY2 V Z\nSHOD  SH AA1 D\nSHODDY  SH AA1 - D IY0\nSHOE  SH UW1\nSHOE'S  SH UW1 Z\nSHOEBOX  SH OW1 - B AA0 K S\nSHOEHORN  SH UW1 - HH AO2 R N\nSHOEHORNED  SH UW1 - HH AO0 R N D\nSHOELACE  SH UW1 - L EY2 S\nSHOELACES  SH UW1 - L EY2 - S AH0 Z\nSHOEMAKE  SH UW1 - M EY2 K\nSHOEMAKER  SH UW1 - M EY2 - K ER0\nSHOEMAKERS  SH UW1 - M EY2 - K ER0 Z\nSHOEMATE  SH UW1 - M EY2 T\nSHOEN  SH UW1 N\nSHOEPRINT  SH UW1 - P R IH2 N T\nSHOEPRINTS  SH UW1 - P R IH2 N T S\nSHOES  SH UW1 Z\nSHOESHINE  SH UW1 - SH AY2 N\nSHOESTRING  SH UW1 - S T R IH2 NG\nSHOFF  SH AO1 F\nSHOFFNER  SH AO1 F - N ER0\nSHOFNER  SH AA1 F - N ER0\nSHOGREN  SH AA1 - G R EH0 N\nSHOGUN  SH OW1 - G AH0 N\nSHOHAT  SH OW1 - HH AE0 T\nSHOICHI  SH OW0 - IY1 - CH IY0\nSHOICHIRO  SH OW2 - IH0 - CH IH1 - R OW0\nSHOJI  SH OW1 - JH IY0\nSHOKHIN  SH OW1 - K IH2 N\nSHOKO  SH OW1 - K OW0\nSHOLAR  SH OW1 - L ER0\nSHOLEM  SH OW1 - L AH0 M\nSHOLES  SH OW1 L Z\nSHOLL  SH AA1 L\nSHOLLENBERGER  SH AA1 - L AH0 N - B ER0 - G ER0\nSHOLLY  SH AA1 - L IY0\nSHOLTIS  SH OW1 L - T IH0 S\nSHOLTO  SH OW1 L - T OW0\nSHOMAKER  SH OW1 - M EY2 - K ER0\nSHOMO  SH OW1 - M OW0\nSHON  SH AA1 N\nSHONE  SH OW1 N\nSHONEY  SH OW1 - N IY0\nSHONEY'S  SH OW1 - N IY0 Z\nSHONK  SH AA1 NG K\nSHONKA  SH AA1 NG - K AH0\nSHONKWILER  SH AA1 NG - K W AY2 - L ER0\nSHONTZ  SH AA1 N T S\nSHOO  SH UW1\nSHOOB  SH UW1 B\nSHOOED  SH UW1 D\nSHOOFLY  SH UW1 - F L AY2\nSHOOK  SH UH1 K\nSHOOP  SH UW1 P\nSHOOPMAN  SH UW1 P - M AH0 N\nSHOOSHAN  SH UW1 - SH AH0 N\nSHOOT  SH UW1 T\nSHOOTDOWN  SH UW1 T - D AW2 N\nSHOOTER  SH UW1 - T ER0\nSHOOTERS  SH UW1 - T ER0 Z\nSHOOTIN'  SH UW1 - T IH0 N\nSHOOTING  SH UW1 - T IH0 NG\nSHOOTINGS  SH UW1 - T IH0 NG Z\nSHOOTOUT  SH UW1 T - AW0 T\nSHOOTOUTS  SH UW1 T - AW0 T S\nSHOOTS  SH UW1 T S\nSHOP  SH AA1 P\nSHOP'S  SH AA1 P S\nSHOPE  SH OW1 P\nSHOPKEEPER  SH AA1 P - K IY2 - P ER0\nSHOPKEEPERS  SH AA1 P - K IY2 - P ER0 Z\nSHOPKO  SH AA1 P - K OW0\nSHOPKORN  SH AA1 P - K AO2 R N\nSHOPLIFT  SH AA1 P - L IH2 F T\nSHOPLIFTER  SH AA1 P - L IH2 F - T ER0\nSHOPLIFTERS  SH AA1 P - L IH2 F - T ER0 Z\nSHOPLIFTING  SH AA1 P - L IH2 F - T IH0 NG\nSHOPPE  SH AA1 P\nSHOPPED  SH AA1 P T\nSHOPPER  SH AA1 - P ER0\nSHOPPER'S  SH AA1 - P ER0 Z\nSHOPPERS  SH AA1 - P ER0 Z\nSHOPPERS'  SH AA1 - P ER0 Z\nSHOPPES  SH AA1 P S\nSHOPPING  SH AA1 - P IH0 NG\nSHOPPING'S  SH AA1 - P IH0 NG Z\nSHOPS  SH AA1 P S\nSHOPTAW  SH AA1 P - T AO0\nSHOPWELL  SH AA1 P - W EH2 L\nSHOPWORN  SH AA1 P - W AO2 R N\nSHOR  SH IY0 - ER1\nSHORB  SH AO1 R B\nSHORE  SH AO1 R\nSHORE'S  SH AO1 R Z\nSHOREBIRD  SH AO1 R - B ER2 D\nSHORED  SH AO1 R D\nSHOREHAM  SH AO1 - R AH0 M\nSHOREHAM(2)  SH AO1 R - HH AE2 M\nSHORELINE  SH AO1 R - L AY2 N\nSHORENSTEIN  SH AO1 - R AH0 N - S T IY0 N\nSHORENSTEIN(2)  SH AO1 - R AH0 N - S T AY0 N\nSHORES  SH AO1 R Z\nSHOREWARD  SH AO1 R - W ER0 D\nSHOREY  SH AO1 - R IY0\nSHORIN  SH AO1 - R IH0 N\nSHORING  SH AO1 - R IH0 NG\nSHORKEY  SH AO1 R - K IY0\nSHORN  SH AO1 R N\nSHORR  SH AO1 R\nSHORT  SH AO1 R T\nSHORT-WINDED  SH AO1 R T - W IH1 N - D IH0 D\nSHORTAGE  SH AO1 R - T AH0 JH\nSHORTAGE(2)  SH AO1 R - T IH0 JH\nSHORTAGES  SH AO1 R - T AH0 - JH AH0 Z\nSHORTAGES(2)  SH AO1 R - T IH0 - JH IH0 Z\nSHORTALL  SH AO1 R - T AH0 L\nSHORTCAKE  SH AO1 R T - K EY2 K\nSHORTCHANGE  SH AO2 R T - CH EY1 N JH\nSHORTCHANGED  SH AO2 R T - CH EY1 N JH D\nSHORTCHANGING  SH AO2 R T - CH EY1 N - JH IH0 NG\nSHORTCOMING  SH AO1 R T - K AH2 - M IH0 NG\nSHORTCOMINGS  SH AO1 R T - K AH2 - M IH0 NG Z\nSHORTCUT  SH AO1 R T - K AH2 T\nSHORTCUTS  SH AO1 R T - K AH2 T S\nSHORTED  SH AO1 R - T IH0 D\nSHORTELL  SH AO0 R - T EH1 L\nSHORTEN  SH AO1 R - T AH0 N\nSHORTENED  SH AO1 R - T AH0 N D\nSHORTENING  SH AO1 R - T AH0 N - IH0 NG\nSHORTENING(2)  SH AO1 R T - N IH0 NG\nSHORTENS  SH AO1 R - T AH0 N Z\nSHORTER  SH AO1 R - T ER0\nSHORTER'S  SH AO1 R - T ER0 Z\nSHORTEST  SH AO1 R - T IH0 S T\nSHORTFALL  SH AO1 R T - F AO2 L\nSHORTFALLS  SH AO1 R T - F AO2 L Z\nSHORTGRASS  SH AO1 R T - G R AE2 S\nSHORTHAIR  SH AO1 R T - HH EH2 R\nSHORTHAIRED  SH AO1 R T - HH EH2 R D\nSHORTHAND  SH AO1 R T - HH AE2 N D\nSHORTING  SH AO1 R - T IH0 NG\nSHORTLIVED  SH AO1 R T - L IH1 V D\nSHORTLIVED(2)  SH AO1 R T - L AY1 V D\nSHORTLY  SH AO1 R T - L IY0\nSHORTNESS  SH AO1 R T - N AH0 S\nSHORTRIDGE  SH AO1 R - T R IH0 JH\nSHORTS  SH AO1 R T S\nSHORTS'  SH AO1 R T S\nSHORTSIGHTED  SH AO1 R T - S AY1 - T IH0 D\nSHORTSIGHTEDNESS  SH AO1 R T - S AY1 - T IH0 D - N IH0 S\nSHORTSTOP  SH AO1 R T - S T AA2 P\nSHORTT  SH AO1 R T\nSHORTTERM  SH AO1 R T - T ER2 M\nSHORTWAVE  SH AO1 R T - W EY1 V\nSHORTY  SH AO1 R - T IY0\nSHORTZ  SH AO1 R T S\nSHORTZ'  SH AO1 R T S\nSHORTZ'S  SH AO1 R T - S IH0 Z\nSHOSHONE  SH OW0 - SH OW1 - N IY0\nSHOSTAK  SH AA1 - S T AH0 K\nSHOSTAKOVICH  SH AO2 - S T AH0 - K OW1 - V IH0 CH\nSHOT  SH AA1 T\nSHOTGUN  SH AA1 T - G AH2 N\nSHOTGUNS  SH AA1 T - G AH2 N Z\nSHOTS  SH AA1 T S\nSHOTT  SH AA1 T\nSHOTTS  SH AA1 T S\nSHOTWELL  SH AA1 T - W EH2 L\nSHOUGANG  SH AW1 - G AA1 NG\nSHOUGH  SH AW1\nSHOULD  SH UH1 D\nSHOULD'VE  SH UH1 - D AH0 V\nSHOULDER  SH OW1 L - D ER0\nSHOULDERED  SH OW1 L - D ER0 D\nSHOULDERING  SH OW1 L - D ER0 - IH0 NG\nSHOULDERS  SH OW1 L - D ER0 Z\nSHOULDN'T  SH UH1 - D AH0 N T\nSHOULTS  SH OW1 L T S\nSHOULTZ  SH OW1 L T S\nSHOUMAKER  SH UW1 - M EY2 - K ER0\nSHOUN  SH AW1 N\nSHOUP  SH UW1 P\nSHOUPE  SH UW1 P\nSHOUSE  S HH AW1 S\nSHOUT  SH AW1 T\nSHOUTED  SH AW1 - T AH0 D\nSHOUTED(2)  SH AW1 - T IH0 D\nSHOUTING  SH AW1 - T IH0 NG\nSHOUTS  SH AW1 T S\nSHOVAL  SH OW1 - V AE0 L\nSHOVE  SH AH1 V\nSHOVED  SH AH1 V D\nSHOVEL  SH AH1 - V AH0 L\nSHOVELED  SH AH1 - V AH0 L D\nSHOVELING  SH AH1 - V L IH0 NG\nSHOVELS  SH AH1 - V AH0 L Z\nSHOVER  SH AH1 - V ER0\nSHOVES  SH AH1 V Z\nSHOVING  SH AH1 - V IH0 NG\nSHOVLIN  SH AA1 V - L IH0 N\nSHOW  SH OW1\nSHOW'S  SH OW1 Z\nSHOWA  SH OW1 - AH0\nSHOWALTER  SH OW1 - AH0 L - T ER0\nSHOWBIZ  SH OW1 - B IH0 Z\nSHOWBOAT  SH OW1 - B OW2 T\nSHOWBOAT'S  SH OW1 - B OW2 T S\nSHOWBUZZ  SH OW1 - B AH2 Z\nSHOWCASE  SH OW1 - K EY2 S\nSHOWCASED  SH OW1 - K EY2 S T\nSHOWCASES  SH OW1 - K EY2 - S IH0 Z\nSHOWCASING  SH OW1 - K EY0 - S IH0 NG\nSHOWDOWN  SH OW1 - D AW2 N\nSHOWDOWNS  SH OW1 - D AW2 N Z\nSHOWED  SH OW1 D\nSHOWELL  SH AA1 - W EH0 L\nSHOWER  SH AW1 - ER0\nSHOWERED  SH AW1 - ER0 D\nSHOWERING  SH AW1 - ER0 - IH0 NG\nSHOWERS  SH AW1 - ER0 Z\nSHOWGIRL  SH OW1 - G ER2 L\nSHOWGIRLS  SH OW1 - G ER2 L Z\nSHOWIEST  SH OW1 - IY0 - AH0 S T\nSHOWING  SH OW1 - IH0 NG\nSHOWINGS  SH OW1 - IH0 NG Z\nSHOWMAN  SH OW1 - M AH0 N\nSHOWMANSHIP  SH OW1 - M AH0 N - SH IH2 P\nSHOWN  SH OW1 N\nSHOWPIECE  SH OW1 - P IY2 S\nSHOWPLACE  SH OW1 - P L EY2 S\nSHOWROOM  SH OW1 - R UH2 M\nSHOWROOM(2)  SH OW1 - R UW2 M\nSHOWROOMS  SH OW1 - R UW2 M Z\nSHOWS  SH OW1 Z\nSHOWS'  SH OW1 Z\nSHOWSCAN  SH OW1 - S K AE2 N\nSHOWTIME  SH OW1 - T AY2 M\nSHOWTIME'S  SH OW1 - T AY2 M Z\nSHOWY  SH OW1 - IY0\nSHRADER  SH R EY1 - D ER0\nSHRAKE  SH R EY1 K\nSHRAMEK  SH R AE1 - M IH0 K\nSHRANK  SH R AE1 NG K\nSHRAPNEL  SH R AE1 P - N AH0 L\nSHRECK  SH R EH1 K\nSHRED  SH R EH1 D\nSHREDDED  SH R EH1 - D AH0 D\nSHREDDED(2)  SH R EH1 - D IH0 D\nSHREDDER  SH R EH1 - D ER0\nSHREDDERS  SH R EH1 - D ER0 Z\nSHREDDING  SH R EH1 - D IH0 NG\nSHREDS  SH R EH1 D Z\nSHREEVE  SH R IY1 V\nSHREFFLER  SH R EH1 F - L ER0\nSHREIBER  SH R AY1 - B ER0\nSHREINER  SH R AY1 - N ER0\nSHREVE  SH R IY1 V\nSHREVEPORT  SH R IY1 V - P AO2 R T\nSHREVES  SH R IY1 V Z\nSHREWD  SH R UW1 D\nSHREWDEST  SH R UW1 - D AH0 S T\nSHREWDLY  SH R UW1 D - L IY0\nSHREWDNESS  SH R UW1 D - N AH0 S\nSHREWSBERRY  SH R UW1 Z - B EH2 - R IY0\nSHREWSBURY  SH R UW1 Z - B EH2 - R IY0\nSHRI  SH R IY1\nSHRIBER  SH R AY1 - B ER0\nSHRIBMAN  SH R IH1 B - M AH0 N\nSHRIDER  SH R AY1 - D ER0\nSHRIEK  SH R IY1 K\nSHRIEKED  SH R IY1 K T\nSHRIEKING  SH R IY1 - K IH0 NG\nSHRIEKS  SH R IY1 K S\nSHRIFT  SH R IH1 F T\nSHRIKANT  SH R IY2 - K AA1 N T\nSHRIKELIKE  SH R AY1 - K L AY2 K\nSHRILL  SH R IH1 L\nSHRIMP  SH R IH1 M P\nSHRIMPER  SH R IH1 M - P ER0\nSHRIMPERS  SH R IH1 M - P ER0 Z\nSHRINE  SH R AY1 N\nSHRINER  SH R AY1 - N ER0\nSHRINERS  SH R AY1 - N ER0 Z\nSHRINES  SH R AY1 N Z\nSHRINK  SH R IH1 NG K\nSHRINKAGE  SH R IH1 NG - K IH0 JH\nSHRINKING  SH R IH1 NG - K IH0 NG\nSHRINKS  SH R IH1 NG K S\nSHRIVEL  SH R IH1 - V AH0 L\nSHRIVELED  SH R IH1 - V AH0 L D\nSHRIVELING  SH R IH1 - V AH0 L - IH0 NG\nSHRIVELING(2)  SH R IH1 V - L IH0 NG\nSHRIVER  SH R AY1 - V ER0\nSHROCK  SH R AA1 K\nSHRODE  SH R OW1 D\nSHROFF  SH R AO1 F\nSHRONTZ  SH R AA1 N T S\nSHROPSHIRE  SH R AA1 P - SH AY2 R\nSHROUD  SH R AW1 D\nSHROUDED  SH R AW1 - D IH0 D\nSHROUDING  SH R AW1 - D IH0 NG\nSHROUDS  SH R AW1 D Z\nSHROUT  SH R AW1 T\nSHROYER  SH R OY1 - ER0\nSHRUB  SH R AH1 B\nSHRUBBERY  SH R AH1 - B ER0 - IY0\nSHRUBBY  SH R AH1 - B IY0\nSHRUBLIKE  SH R AH1 - B L AY2 K\nSHRUBS  SH R AH1 B Z\nSHRUG  SH R AH1 G\nSHRUGGED  SH R AH1 G D\nSHRUGGING  SH R AH1 - G IH0 NG\nSHRUGS  SH R AH1 G Z\nSHRUM  SH R AH1 M\nSHRUNK  SH R AH1 NG K\nSHRUNKEN  SH R AH1 NG - K AH0 N\nSHRYOCK  SH R AY1 - AA0 K\nSHTICK  SH T IH1 K\nSHU  SH UW1\nSHUART  SH UW1 - ER0 T\nSHUBERT  SH UW1 - B ER0 T\nSHUBIN  SH UW1 - B IH0 N\nSHUCHMAN  SH AH1 K - M AH0 N\nSHUCHMAN'S  SH AH1 K - M AH0 N Z\nSHUCK  SH AH1 K\nSHUCKED  SH AH1 K T\nSHUCKING  SH AH1 - K IH0 NG\nSHUCKS  SH AH1 K S\nSHUDA  SH UW1 - D AH0\nSHUDDER  SH AH1 - D ER0\nSHUDDERED  SH AH1 - D ER0 D\nSHUDDERING  SH AH1 - D ER0 - IH0 NG\nSHUDDERS  SH AH1 - D ER0 Z\nSHUE  SH UW1\nSHUEY  SH UW1 - IY0\nSHUFELT  SH UW1 - F EH0 L T\nSHUFF  SH AH1 F\nSHUFFIELD  SH AH1 - F IY2 L D\nSHUFFLE  SH AH1 - F AH0 L\nSHUFFLED  SH AH1 - F AH0 L D\nSHUFFLER  SH AH1 - F AH0 L - ER0\nSHUFFLER(2)  SH AH1 F - L ER0\nSHUFFLERS  SH AH1 - F AH0 L - ER0 Z\nSHUFFLERS(2)  SH AH1 F - L ER0 Z\nSHUFFLES  SH AH1 - F AH0 L Z\nSHUFFLING  SH AH1 - F L IH0 NG\nSHUFFLING(2)  SH AH1 - F UH1 - L IH0 NG\nSHUFORD  SH UW1 - F ER0 D\nSHUFRO  SH AH1 - F R OW0\nSHUGARS  SH UW1 - G ER0 Z\nSHUGART  SH AH1 - G AA0 R T\nSHUGHART  SH AH1 G - HH AA2 R T\nSHUGRUE  SH AH1 - G R UW0\nSHUI  SH UW1 - IY0\nSHUKLA  SH AH1 - K L AH0\nSHUKRI  SH UW1 - K R IY0\nSHULA  SH UW1 - L AH0\nSHULAR  SH UW1 - L ER0\nSHULER  SH UW1 - L ER0\nSHULL  SH AH1 L\nSHULMAN  SH UH1 L - M AH0 N\nSHULTIS  SH AH1 L - T IH0 S\nSHULTS  SH AH1 L T S\nSHULTZ  SH UH1 L T S\nSHULTZ'S  SH UH1 L T - S IH1 Z\nSHUM  SH AH1 M\nSHUMAKE  SH UW1 - M EY2 K\nSHUMAKER  SH UW1 - M EY2 - K ER0\nSHUMAN  SH UW1 - M AH0 N\nSHUMARD  SH UW1 - M ER0 D\nSHUMATE  SH UW1 - M EY2 T\nSHUMEET  SH UW0 - M IY1 T\nSHUMER  SH UW1 - M ER0\nSHUMPERT  SH AH1 M - P ER0 T\nSHUMSKY  SH AH1 M - S K IY0\nSHUMWAY  SH AH1 M - W EY2\nSHUN  SH AH1 N\nSHUNK  SH AH1 NG K\nSHUNNED  SH AH1 N D\nSHUNNING  SH AH1 - N IH0 NG\nSHUNS  SH AH1 N Z\nSHUNT  SH AH1 N T\nSHUNTED  SH AH1 N - T IH0 D\nSHUNTING  SH AH1 N - T IH0 NG\nSHUNTO  SH AH1 N - T OW0\nSHUPE  SH UW1 P\nSHUPERT  SH UW1 - P ER0 T\nSHUPING  SH UW1 - P IH0 NG\nSHUPP  SH AH1 P\nSHUR  SH ER1\nSHURE  SH UH1 R\nSHURGARD  SH UH1 R - G AA2 R D\nSHURLEY  SH ER1 - L IY0\nSHURR  SH ER1\nSHURTLEFF  SH ER1 T - L IH0 F\nSHURTLIFF  SH ER1 T - L IH0 F\nSHURTZ  SH ER1 T S\nSHUSTER  SH AH1 - S T ER0\nSHUSTERMAN  SH AH1 - S T ER0 - M AH0 N\nSHUT  SH AH1 T\nSHUTDOWN  SH AH1 T - D AW2 N\nSHUTDOWNS  SH AH1 T - D AW2 N Z\nSHUTE  SH UW1 T\nSHUTES  SH UW1 T S\nSHUTOUT  SH AH1 T - AW2 T\nSHUTS  SH AH1 T S\nSHUTT  SH AH1 T\nSHUTTER  SH AH1 - T ER0\nSHUTTERED  SH AH1 - T ER0 D\nSHUTTERING  SH AH1 - T ER0 - IH0 NG\nSHUTTERS  SH AH1 - T ER0 Z\nSHUTTING  SH AH1 - T IH0 NG\nSHUTTLE  SH AH1 - T AH0 L\nSHUTTLE'S  SH AH1 - T AH0 L Z\nSHUTTLED  SH AH1 - T AH0 L D\nSHUTTLES  SH AH1 - T AH0 L Z\nSHUTTLESWORTH  SH AH1 - T AH0 L Z - W ER2 TH\nSHUTTLEWORTH  SH AH1 - T AH0 L - W ER2 TH\nSHUTTLING  SH AH1 - T AH0 L - IH0 NG\nSHUTTLING(2)  SH AH1 T - L IH0 NG\nSHUTTS  SH AH1 T S\nSHUWA  SH UW1 - W AH0\nSHUWA'S  SH UW1 - W AH0 Z\nSHY  SH AY1\nSHYING  SH AY1 - IH0 NG\nSHYJAN  SH AY1 - JH AE2 N\nSHYLOCK  SH AY1 - L AA2 K\nSHYLY  SH AY1 - L IY0\nSHYMANSKI  SH AH0 - M AE1 N - S K IY0\nSHYNE  SH AY1 N\nSHYNESS  SH AY1 - N AH0 S\nSHYSTER  SH AY1 - S T ER0\nSHYSTERS  SH AY1 - S T ER0 Z\nSI  S IY1\nSIAD  S AY1 - AE0 D\nSIAM  S AY0 - AE1 M\nSIAM(2)  S AY1 - AE0 M\nSIAMESE  S AY2 - AH0 - M IY1 Z\nSIANG  S Y AE1 NG\nSIANG(2)  SH AE1 NG\nSIANO  S IY0 - AA1 - N OW0\nSIAS  ZH AO1 Z\nSIB  S IH1 B\nSIBBIE  S IH1 - B IY0\nSIBBY  S IH1 - B IY0\nSIBELLE  S IH0 - B EH1 L\nSIBERIA  S AY0 - B IH1 - R IY0 - AH0\nSIBERIAN  S AY0 - B IH1 - R IY0 - AH0 N\nSIBERT  S IH1 - B ER0 T\nSIBIL  S IH1 - B AH0 L\nSIBILIA  S IY0 - B IY1 - L IY0 - AH0\nSIBILLA  S IH0 - B IH1 - L AH0\nSIBILLE  S IH1 - B IH0 L\nSIBLE  S AY1 - B AH0 L\nSIBLEY  S IH1 - B L IY0\nSIBLING  S IH1 - B L IH0 NG\nSIBLINGS  S IH1 B - L IH0 NG Z\nSIBSON  S IH1 B - S AH0 N\nSIBYL  S IH1 - B AH0 L\nSIBYLL  S IH1 - B IH0 L\nSIC  S IH1 K\nSICA  S IY1 - K AH0\nSICARD  S IH1 - K ER0 D\nSICHEL  S IH1 - K AH0 L\nSICHUAN  S IH2 CH - W AA1 N\nSICILIA  S IH0 - S IH1 - L Y AH0\nSICILIAN  S IH0 - S IH1 - L IY0 - AH0 N\nSICILIANO  S IY0 - CH IY0 - L IY0 - AA1 - N OW0\nSICILY  S IH1 - S AH0 - L IY0\nSICK  S IH1 K\nSICKEL  S IH1 - K AH0 L\nSICKELS  S IH1 - K AH0 L Z\nSICKEN  S IH1 - K AH0 N\nSICKENED  S IH1 - K AH0 N D\nSICKENING  S IH1 - K AH0 - N IH0 NG\nSICKENING(2)  S IH1 K - N IH0 NG\nSICKER  S IH1 - K ER0\nSICKEST  S IH1 - K AH0 S T\nSICKINGER  S IH1 - K IH0 - NG ER0\nSICKLE  S IH1 - K AH0 L\nSICKLER  S IH1 K - L ER0\nSICKLES  S IH1 - K AH0 L Z\nSICKLY  S IH1 K - L IY0\nSICKMAN  S IH1 K - M AH0 N\nSICKNESS  S IH1 K - N AH0 S\nSICONOLFI  S IY0 - K OW0 - N OW1 L - F IY0\nSICOTTE  S IH0 - K AO1 T\nSID  S IH1 D\nSID'S  S IH1 D Z\nSIDAK  S IH1 - D AE0 K\nSIDDALL  S IH1 - D AH0 L\nSIDDELEY  S IH1 - D AH0 - L IY0\nSIDDELL  S IH1 - D AH0 L\nSIDDEN  S IH1 - D AH0 N\nSIDDENS  S IH1 - D AH0 N Z\nSIDDHARTHA  S IH0 - D AA1 R - T AH2\nSIDDIG  S IH1 - D IH0 G\nSIDDIQI  S IY0 - D IY1 - K IY0\nSIDDIQUI  S IY0 - D IY1 - K W IY0\nSIDDLE  S IH1 - D AH0 L\nSIDDONS  S IH1 - D AH0 N Z\nSIDE  S AY1 D\nSIDE'S  S AY1 D Z\nSIDEARM  S AY1 - D AA0 R M\nSIDEARMS  S AY1 - D AA0 R M Z\nSIDEBAR  S AY1 D - B AA2 R\nSIDEBARS  S AY1 D - B AA2 R Z\nSIDED  S AY1 - D AH0 D\nSIDED(2)  S AY1 - D IH0 D\nSIDEK  S AY1 - D EH2 K\nSIDEKICK  S AY1 D - K IH2 K\nSIDELINE  S AY1 D - L AY2 N\nSIDELINED  S AY1 D - L AY2 N D\nSIDELINES  S AY1 D - L AY2 N Z\nSIDELL  S AY1 - D AH0 L\nSIDEMAN  S AY1 D - M AE2 N\nSIDENER  S IH1 - D IY0 - N ER0\nSIDER  S AY1 - D ER0\nSIDERCA  S IH0 - D ER1 - K AH0\nSIDERIS  S IH1 - D ER0 - IH0 S\nSIDEROGRAPHER  S AY2 - D ER0 - AO1 - G R AH0 - F ER0\nSIDEROGRAPHERS  S AY2 - D ER0 - AO1 - G R AH0 - F ER0 Z\nSIDERS  S AY1 - D ER0 Z\nSIDERS'  S AY1 - D ER0 Z\nSIDES  S AY1 D Z\nSIDES'  S AY1 D Z\nSIDESHOW  S AY1 D - SH OW2\nSIDESHOWS  S AY1 D - SH OW2 Z\nSIDESTEP  S AY1 D - S T EH2 P\nSIDESTEPPED  S AY1 D - S T EH2 P T\nSIDESTEPPING  S AY1 D - S T EH2 - P IH0 NG\nSIDESTEPS  S AY1 D - S T EH2 P S\nSIDESTREAM  S AY1 D - S T R IY2 M\nSIDETRACK  S AY1 D - T R AE2 K\nSIDETRACKED  S AY1 D - T R AE2 K T\nSIDEWALK  S AY1 D - W AO2 K\nSIDEWALKS  S AY1 D - W AO2 K S\nSIDEWATER  S AY1 D - W AO2 - T ER0\nSIDEWAYS  S AY1 D - W EY2 Z\nSIDEWINDER  S AY1 D - W AY2 N - D ER0\nSIDEWISE  S AY1 D - W AY2 Z\nSIDEY  S AY1 - D IY0\nSIDHU  S IH1 D - HH UW0\nSIDING  S AY1 - D IH0 NG\nSIDLE  S AY1 - D AH0 L\nSIDLER  S AY1 - D AH0 - L ER0\nSIDLER(2)  S AY1 D - L ER0\nSIDLEY  S IH1 D - L IY0\nSIDMAN  S IH1 D - M AH0 N\nSIDNEY  S IH1 D - N IY0\nSIDON  S AY1 - D AH0 N\nSIDONIA  S IY0 - D OW1 - N IY0 - AH0\nSIDOR  S IH1 - D ER0\nSIDOTI  S IY0 - D OW1 - T IY0\nSIDRA  S IH1 - D R AH0\nSIDS  S IH1 D Z\nSIDWELL  S IH1 D - W EH2 L\nSIE  S IY1\nSIE(2)  EH1 - S AY1 - IY1\nSIEBE  S IY1 B\nSIEBEL  S IY1 - B AH0 L\nSIEBELS  S IY1 - B AH0 L Z\nSIEBEN  S IY1 - B AH0 N\nSIEBENALER  S IY1 - B IH0 - N AH0 - L ER0\nSIEBENALER(2)  S IY1 - B IH0 - N AA2 - L ER0\nSIEBER  S IY1 - B ER0\nSIEBERS  S IY1 - B ER0 Z\nSIEBERT  S IY1 - B ER0 T\nSIEBOLD  S IY1 - B OW2 L D\nSIEBRECHT  S IY1 - B R IH0 K T\nSIECK  S IY1 K\nSIECLE  S IY1 - K AH0 L\nSIEDENBURG  S IY1 - D AH0 N - B ER0 G\nSIEDLECKI  S IY0 D - L EH1 T S - K IY0\nSIEDSCHLAG  S IY1 D - SH L AH0 G\nSIEFERT  S IY1 - F ER0 T\nSIEFERT'S  S IY1 - F ER0 T S\nSIEFKEN  S IY1 F - K AH0 N\nSIEFKER  S IY1 F - K ER0\nSIEG  S IY1 G\nSIEGAL  S IY1 - G AH0 L\nSIEGAN  S IY1 - G AH0 N\nSIEGAN'S  S IY1 - G AH0 N Z\nSIEGE  S IY1 JH\nSIEGECRAFT  S IY1 JH - K R AE2 F T\nSIEGEL  S IY1 - G AH0 L\nSIEGEL'S  S IY1 - G AH0 L Z\nSIEGELL  S IY1 - G AH0 L\nSIEGELMAN  S IY1 - G AH0 L - M AH0 N\nSIEGENTHALER  S IY1 - G IH0 N - TH AH0 - L ER0\nSIEGER  S IY1 - G ER0\nSIEGERT  S IY1 - G ER0 T\nSIEGES  S IY1 - JH IH0 Z\nSIEGFRIED  S IY1 G - F R IY2 D\nSIEGLE  S IY1 - G AH0 L\nSIEGLER  S IY1 G - L ER0\nSIEGMAN  S IY1 G - M AH0 N\nSIEGMANN  S IY1 G - M AH0 N\nSIEGMUND  S IY1 G - M AH0 N D\nSIEGRIST  S IY1 - G R IH0 S T\nSIEH  S IY1\nSIEJA  S EY1 - AH0\nSIEJA(2)  S EY1 - JH AH0\nSIEK  S IY1 K\nSIEKIERSKI  S IY0 - K IH1 R S - K IY0\nSIEKMAN  S IY1 K - M AH0 N\nSIELAFF  S IY0 - L AE1 F\nSIELER  S IY1 - L ER0\nSIELING  S IY1 - L IH0 NG\nSIELOFF  S IY1 - L AO0 F\nSIELSKI  S IY1 L S - K IY0\nSIEM  S IY1 M\nSIEMEL  S IY1 - M AH0 L\nSIEMENS  S IY1 - M AH0 N Z\nSIEMENS'S  S IY1 - M AH0 N Z\nSIEMENS'S(2)  S IY1 - M AH0 N - Z IH0 Z\nSIEMER  S IY1 - M ER0\nSIEMERS  S IY1 - M ER0 Z\nSIEMINSKI  S IY0 - M IH1 N - S K IY0\nSIEMON  S IY1 - M AH0 N\nSIEMS  S IY1 M Z\nSIEMSEN  S IY1 M - S AH0 N\nSIENKO  S IY0 - EH1 NG - K OW0\nSIENNA  S IY0 - EH1 - N AH0\nSIENNA'S  S IY0 - EH1 - N AH0 Z\nSIERACKI  S IH0 - R AA1 T S - K IY0\nSIERCHIO  S IY1 R - CH IY0 - OW0\nSIERRA  S IY0 - EH1 - R AH0\nSIERRA'S  S IY0 - EH1 - R AH0 Z\nSIERRACIN  S IY0 - EH1 - R AH0 - S IH0 N\nSIERRAS  S IY0 - EH1 - R AH0 Z\nSIERS  S IY1 R Z\nSIES  S IY1 Z\nSIESE  S IY0 - EH1 S\nSIESS  S IY1 S\nSIETSEMA  S IY0 - T S IY1 - M AH0\nSIEVE  S IH1 V\nSIEVER  S IY1 - V ER0\nSIEVERS  S IY1 - V ER0 Z\nSIEVERT  S IY1 - V ER0 T\nSIEVES  S IH1 V Z\nSIEVING  S IH1 - V IH0 NG\nSIEW  S UW1\nSIEWERT  S IY1 - W ER0 T\nSIEWIOREK  S AH0 - W AO1 - R IH0 K\nSIFCO  S IH1 F - K OW0\nSIFERS  S AY1 - F ER0 Z\nSIFFORD  S IH1 - F ER0 D\nSIFT  S IH1 F T\nSIFTED  S IH1 F - T IH0 D\nSIFTING  S IH1 F - T IH0 NG\nSIFTS  S IH1 F T S\nSIFUENTES  S IY0 F - W EH1 N - T EH0 S\nSIG  S IH1 G\nSIGAFOOS  S IH1 - G AH0 - F UW2 Z\nSIGAL  S AY1 - JH AH0 L\nSIGALA  S IY0 - G AA1 - L AH0\nSIGEL  S IH1 - G AH0 L\nSIGFREDA  S IY0 G - F R EH1 - D AH0\nSIGG  S IH1 G\nSIGGERS  S IH1 - G ER0 Z\nSIGGINS  S IH1 - G IH0 N Z\nSIGH  S AY1\nSIGHED  S AY1 D\nSIGHING  S AY1 - IH0 NG\nSIGHS  S AY1 Z\nSIGHT  S AY1 T\nSIGHT-SEER  S AY1 T - S IY1 R\nSIGHTED  S AY1 - T AH0 D\nSIGHTED(2)  S AY1 - T IH0 D\nSIGHTING  S AY1 - T IH0 NG\nSIGHTINGS  S AY1 - T IH0 NG Z\nSIGHTS  S AY1 T S\nSIGHTSEE  S AY1 T - S IY1\nSIGHTSEEING  S AY1 T - S IY1 - IH0 NG\nSIGHTSEER  S AY1 T - S IY1 - ER0\nSIGHTSEER(2)  S AY1 T - S IY1 R\nSIGHTSEERS  S AY1 T - S IY1 - ER0 Z\nSIGHTSEERS(2)  S AY1 T - S IY1 R Z\nSIGL  S IH1 - G AH0 L\nSIGLE  S AY1 - G AH0 L\nSIGLER  S AY1 - G AH0 - L ER0\nSIGLER(2)  S AY1 - G L ER0\nSIGLER(3)  S IH1 G - L ER0\nSIGLEY  S IH1 G - L IY0\nSIGLIN  S IH1 G - L IH0 N\nSIGMA  S IH1 G - M AH0\nSIGMAFORM  S IH1 G - M AH0 - F AO0 R M\nSIGMAN  S IH1 G - M AH0 N\nSIGMON  S IH1 G - M AH0 N\nSIGMUND  S IH1 G - M AH0 N D\nSIGN  S AY1 N\nSIGN'S  S AY1 N Z\nSIGNA  S IH1 G - N AH0\nSIGNAGE  S AY1 - N IH0 JH\nSIGNAL  S IH1 G - N AH0 L\nSIGNAL'S  S IH1 G - N AH0 L Z\nSIGNALED  S IH1 G - N AH0 L D\nSIGNALING  S IH1 G - N AH0 L - IH0 NG\nSIGNALLED  S IH1 G - N AH0 L D\nSIGNALLING  S IH1 G - N AH0 L - IH0 NG\nSIGNALS  S IH1 G - N AH0 L Z\nSIGNATORIES  S IH1 G - N AH0 - T AO2 - R IY0 Z\nSIGNATORY  S IH1 G - N AH0 - T AO2 - R IY0\nSIGNATURE  S IH1 G - N AH0 - CH ER0\nSIGNATURES  S IH1 G - N AH0 - CH ER0 Z\nSIGNED  S AY1 N D\nSIGNER  S AY1 - N ER0\nSIGNERS  S AY1 - N ER0 Z\nSIGNET  S IH1 G - N IH0 T\nSIGNIFICANCE  S AH0 G - N IH1 - F IH0 - K AH0 N S\nSIGNIFICANCE(2)  S IH0 G - N IH1 - F IH0 - K AH0 N S\nSIGNIFICANT  S AH0 G - N IH1 - F IH0 - K AH0 N T\nSIGNIFICANT(2)  S IH0 G - N IH1 - F IH0 - K AH0 N T\nSIGNIFICANTLY  S IH0 G - N IH1 - F IH0 - K AH0 N T - L IY0\nSIGNIFIED  S IH1 G - N AH0 - F AY2 D\nSIGNIFIES  S IH1 G - N AH0 - F AY2 Z\nSIGNIFY  S IH1 G - N AH0 - F AY2\nSIGNIFYING  S IH1 G - N AH0 - F AY2 - IH0 NG\nSIGNING  S AY1 - N IH0 NG\nSIGNINGS  S AY1 - N IH0 NG Z\nSIGNOR  S IY1 - N Y AO0 R\nSIGNORE  S IY0 - N Y AO1 - R EY0\nSIGNORELLI  S IY0 G - N AO0 - R EH1 - L IY0\nSIGNORI  S IH0 G - N AO1 - R IY0\nSIGNORI(2)  S IY0 - N Y AO1 - R IY1\nSIGNPOST  S AY1 N - P OW2 S T\nSIGNPOSTS  S AY1 N - P OW2 S T S\nSIGNPOSTS(2)  S AY1 N - P OW2 S S\nSIGNPOSTS(3)  S AY1 N - P OW2 S\nSIGNS  S AY1 N Z\nSIGOLOFF  S IH1 - G AH0 - L AO0 F\nSIGOURNEY  S IH0 - G AO1 R - N IY0\nSIGRID  S IH1 - G R IH0 D\nSIGRIST  S IH1 - G R IH0 S T\nSIGUR  S IH1 - G ER0\nSIGURD  S IH1 - G ER0 D\nSIGURDSON  S IH1 - G ER0 D - S AH0 N\nSIGWALD  S IH1 - G W AH0 L D\nSIHANOUK  S IY1 - AH0 - N UH2 K\nSIKES  S AY1 K S\nSIKH  S IY1 K\nSIKHS  S IY1 K S\nSIKKEMA  S IH0 - K IY1 - M AH0\nSIKORA  S IH0 - K AO1 - R AH0\nSIKORSKI  S IH0 - K AO1 R S - K IY0\nSIKORSKY  S IH0 - K AO1 R S - K IY0\nSIL  S IH1 L\nSILAJDZIC  S IH2 - L AA1 - JH IH0 K\nSILAJDZIC'S  S IH2 - L AA1 - JH IH0 K S\nSILAS  S AY1 - L AH0 S\nSILBAUGH  S IH1 L - B AO2\nSILBER  S IH1 L - B ER0\nSILBERBERG  S IH1 L - B ER0 - B ER0 G\nSILBERG  S IH1 L - B ER0 G\nSILBERGELD  S IH1 L - B ER0 - G EH2 L D\nSILBERMAN  S IH1 L - B ER0 - M AH0 N\nSILBERNAGEL  S IH1 L - B ER0 - N AH0 - G AH0 L\nSILBERNER  S IH0 L - B ER1 - N ER0\nSILBERNER'S  S IH0 L - B ER1 - N ER0 Z\nSILBERSTEIN  S IH1 L - B ER0 - S T IY2 N\nSILBERSTEIN(2)  S IH1 L - B ER0 - S T AY2 N\nSILBERT  S IH1 L - B ER0 T\nSILCOTT  S IH1 L - K AH0 T\nSILCOX  S IH1 L - K AA0 K S\nSILENCE  S AY1 - L AH0 N S\nSILENCED  S AY1 - L AH0 N S T\nSILENCES  S AY1 - L AH0 N - S IH0 Z\nSILENCING  S AY1 - L AH0 N - S IH0 NG\nSILENT  S AY1 - L AH0 N T\nSILENTLY  S AY1 - L AH0 N T - L IY0\nSILEO  S IH1 - L IY0 - OW0\nSILER  S AY1 - L ER0\nSILESIA  S IH0 - L IY1 - Z AH0\nSILEX  S IH1 - L AH0 K S\nSILEX(2)  S AY1 - L EH0 K S\nSILFIES  S IH1 L - F IY0 Z\nSILGA  S IH1 L - G AH0\nSILGUERO  S IY0 L - G EH1 - R OW0\nSILHOUETTE  S IH2 - L AH0 W - EH1 T\nSILHOUETTED  S IH2 - L AH0 W - EH1 - T IH0 D\nSILHOUETTES  S IH2 - L AH0 W - EH1 T S\nSILICA  S IH1 - L AH0 - K AH0\nSILICA(2)  S IH1 - L IH0 - K AH0\nSILICATE  S IH1 - L AH0 - K AH0 T\nSILICATE(2)  S IH1 - L AH0 - K EY2 T\nSILICATES  S IH1 - L AH0 - K AH0 T S\nSILICATES(2)  S IH1 - L AH0 - K EY2 T S\nSILICON  S IH1 - L AH0 - K AH0 N\nSILICONE  S IH1 - L AH0 - K OW2 N\nSILICONES  S IH1 - L AH0 - K OW2 N Z\nSILICONIX  S IH2 - L IH0 - K AA1 - N IH0 K S\nSILK  S IH1 L K\nSILKEY  S IH1 L - K IY0\nSILKS  S IH1 L K S\nSILKWOOD  S IH1 L K - W UH2 D\nSILKWORM  S IH1 L K - W ER0 M\nSILKWORMS  S IH1 L K - W ER2 M Z\nSILKY  S IH1 L - K IY0\nSILL  S IH1 L\nSILLER  S IH1 - L ER0\nSILLERMAN  S IH1 - L ER0 - M AH0 N\nSILLIER  S IH1 - L IY0 - ER0\nSILLIEST  S IH1 - L IY0 - AH0 S T\nSILLIMAN  S IH1 - L IH0 - M AH0 N\nSILLINESS  S IH1 - L IY0 - N AH0 S\nSILLMAN  S IH1 L - M AH0 N\nSILLS  S IH1 L Z\nSILLY  S IH1 - L IY0\nSILMAN  S IH1 L - M AH0 N\nSILMON  S IY0 L - M AO1 N\nSILO  S AY1 - L OW0\nSILOS  S AY1 - L OW2 Z\nSILSBY  S IH1 L S - B IY0\nSILT  S IH1 L T\nSILTEC  S IH1 L - T EH2 K\nSILVA  S IH1 L - V AH0\nSILVA'S  S IH1 L - V AH0 Z\nSILVA(2)  S EH1 L - V AH0\nSILVADIO  S IH0 L - V AA1 - D IY0 - OW0\nSILVADIO'S  S IH0 L - V AA1 - D IY0 - OW0 Z\nSILVANA  S IH0 L - V AA1 - N AH0\nSILVAR  S IH1 L - V AA0 R\nSILVAS  S IH1 L - V AH0 Z\nSILVEIRA  S IY0 L - V EH1 - R AH0\nSILVER  S IH1 L - V ER0\nSILVER'S  S IH1 L - V ER0 Z\nSILVERA  S IY0 L - V EH1 - R AH0\nSILVERADO  S IH2 L - V ER0 - AA1 - D OW0\nSILVERBERG  S IH1 L - V ER0 - B ER0 G\nSILVERCREST  S IH1 L - V ER0 - K R EH2 S T\nSILVERDOME  S IH1 L - V ER0 - D OW2 M\nSILVERI  S IY0 L - V EH1 - R IY0\nSILVERIA  S IY0 L - V EH1 - R IY0 - AH0\nSILVERIO  S IY0 L - V EH1 - R IY0 - OW0\nSILVERLAKE  S IH1 L - V ER0 - L EY2 K\nSILVERMAN  S IH1 L - V ER0 - M AE2 N\nSILVERNAIL  S IH1 L - V ER0 - N EY2 L\nSILVERPLATE  S IH1 L - V ER0 - P L EY1 T\nSILVERS  S IH1 L - V ER0 Z\nSILVERSHOE  S IH1 L - V ER0 - SH UW2\nSILVERSIDE  S IH1 L - V ER0 - S AY2 D\nSILVERSIDES  S IH1 L - V ER0 - S AY2 D Z\nSILVERSTEIN  S IH1 L - V ER0 - S T IY2 N\nSILVERSTEIN(2)  S IH1 L - V ER0 - S T AY2 N\nSILVERSTONE  S IH1 L - V ER0 - S T OW2 N\nSILVERTHORN  S IH1 L - V ER0 - TH AO0 R N\nSILVERTHORNE  S IH1 L - V ER0 - TH AO0 R N\nSILVERWARE  S IH1 L - V ER0 - W EH2 R\nSILVERY  S IH1 L - V ER0 - IY0\nSILVESTER  S IH0 L - V EH1 - S T ER0\nSILVESTRE  S IY0 L - V EY1 - S T R EY0\nSILVESTRI  S IY0 L - V EH1 S - T R IY0\nSILVESTRO  S IY0 L - V EY1 S - T R OW0\nSILVEY  S IH1 L - V IY0\nSILVI  S IH1 L - V IY0\nSILVIA  S IH1 L - V IY0 - AH0\nSILVIE  S IH1 L - V IY0\nSILVIO  S IH1 L - V IY0 - OW0\nSILVIS  S IH1 L - V IH0 S\nSILVIUS  S IH1 L - V IY0 - IH0 S\nSIM  S IH1 M\nSIMA  S IY1 - M AH0\nSIMARD  S IH1 - M ER0 D\nSIMAS  S AY1 - M AH0 Z\nSIMBA  S IH1 M - B AH0\nSIMBA'S  S IH1 M - B AH0 Z\nSIMCHA  S IH1 M - HH AH0\nSIMCO  S IH1 M - K OW0\nSIMCOE  S IH1 M - K OW2\nSIMCOX  S IH1 M - K AA2 K S\nSIME  S AY1 M\nSIMEK  S IH1 - M IH0 K\nSIMENSON  S IH1 - M IH0 N - S AH0 N\nSIMENTAL  S IH0 - M EH1 N - T AH0 L\nSIMEON  S IH1 - M IY0 - AH0 N\nSIMEONE  S IH1 - M IY0 - AH1 N\nSIMER  S AY1 - M ER0\nSIMERLY  S AY1 - M ER0 - L IY0\nSIMERSON  S IH1 - M ER0 - S AH0 N\nSIMES  S AY1 M Z\nSIMEX  S IH1 - M EH0 K S\nSIMEX(2)  S AY1 - M EH0 K S\nSIMI  S IY1 - M IY0\nSIMIAN  S IH1 - M IY0 - AH0 N\nSIMICH  S IH1 - M IH0 CH\nSIMIEN  S IH1 - M IY0 N\nSIMILACK  S IH1 - M AH0 - L AE2 K\nSIMILAR  S IH1 - M AH0 - L ER0\nSIMILARITIES  S IH2 - M AH0 - L EH1 - R AH0 - T IY0 Z\nSIMILARITY  S IH2 - M AH0 - L EH1 - R AH0 - T IY0\nSIMILARLY  S IH1 - M AH0 - L ER0 - L IY0\nSIMILIAR  S IH0 - M IH1 - L AA0 R\nSIMINGTON  S IH1 - M IH0 NG - T AH0 N\nSIMINSKI  S IH0 - M IH1 N - S K IY0\nSIMION  S IH1 - M IY0 - AA2 N\nSIMIONE  S IY2 - M IY0 - OW1 - N IY0\nSIMISON  S IH1 - M IH0 - S AH0 N\nSIMKIN  S IH1 M - K IH0 N\nSIMKINS  S IH1 M - K IH0 N Z\nSIMKO  S IH1 M - K OW0\nSIMLER  S IH1 - M AH0 - L ER0\nSIMLER(2)  S IH1 M - L ER0\nSIMM  S IH1 M\nSIMMER  S IH1 - M ER0\nSIMMERED  S IH1 - M ER0 D\nSIMMERING  S IH1 - M ER0 - IH0 NG\nSIMMERMAN  S IH1 - M ER0 - M AH0 N\nSIMMERS  S IH1 - M ER0 Z\nSIMMERT  S IH1 - M ER0 T\nSIMMON  S IH1 - M AH0 N\nSIMMON'S  S IH1 - M AH0 N Z\nSIMMONDS  S IH1 - M AH0 N D Z\nSIMMONS  S IH1 - M AH0 N Z\nSIMMONS'  S IH1 - M AH0 N Z\nSIMMONS'S  S IH1 - M AH0 N - Z IH0 Z\nSIMMS  S IH1 M Z\nSIMO  S IY1 - M OW0\nSIMOES  S AY1 - M OW0 Z\nSIMON  S AY1 - M AH0 N\nSIMON'S  S AY1 - M AH0 N Z\nSIMONA  S IH0 - M OW1 - N AH0\nSIMONDS  S AY1 - M AH0 N D Z\nSIMONE  S IH0 - M OW1 N\nSIMONEAU  S IH1 - M AH0 - N OW0\nSIMONEAUX  S IH1 - M AH0 - N OW0\nSIMONELLI  S IY2 - M OW0 - N EH1 - L IY0\nSIMONET  S IH1 - M AH0 - N EH0 T\nSIMONETTA  S IY0 - M AH0 - N EH1 - T AH0\nSIMONETTE  S IH1 - M AH0 - N EH0 T\nSIMONETTI  S IY0 - M OW0 - N EH1 - T IY0\nSIMONI  S IY0 - M OW1 - N IY0\nSIMONIAN  S IH0 - M OW1 - N IY0 - AH0 N\nSIMONICH  S IH1 - M AH0 - N IH0 K\nSIMONIN  S IH1 - M AH0 - N IH0 N\nSIMONIS  S IH1 - M AH0 - N IH0 S\nSIMONS  S AY1 - M AH0 N Z\nSIMONSEN  S IH1 - M AH0 N - S AH0 N\nSIMONSON  S IH1 - M AH0 N - S AH0 N\nSIMONSSON  S AY1 - M AH0 N - S AH0 N\nSIMONTON  S AY1 - M AH0 N - T AH0 N\nSIMONTON(2)  S IH0 - M AA1 N - T AH0 N\nSIMONY  S AY1 - M AH0 - N IY0\nSIMPER  S IH1 M - P ER0\nSIMPKINS  S IH1 M P - K IH0 N Z\nSIMPLE  S IH1 M - P AH0 L\nSIMPLER  S IH1 M - P AH0 - L ER0\nSIMPLER(2)  S IH1 M - P L ER0\nSIMPLESSE  S IH0 M - P L EH1 S\nSIMPLEST  S IH1 M - P L AH0 S T\nSIMPLEX  S IH1 M - P L EH2 K S\nSIMPLICITY  S IH0 M - P L IH1 - S AH0 - T IY0\nSIMPLICITY(2)  S IH0 M - P L IH1 - S IH0 - T IY0\nSIMPLIFICATION  S IH2 M - P L AH0 - F IH0 - K EY1 - SH AH0 N\nSIMPLIFIED  S IH1 M - P L AH0 - F AY2 D\nSIMPLIFIES  S IH1 M - P L AH0 - F AY2 Z\nSIMPLIFY  S IH1 M - P L AH0 - F AY2\nSIMPLIFYING  S IH1 M - P L AH0 - F AY2 - IH0 NG\nSIMPLISTIC  S IH0 M - P L IH1 - S T IH0 K\nSIMPLOT  S IH1 M - P L AA0 T\nSIMPLY  S IH1 M - P L IY0\nSIMPSON  S IH1 M P - S AH0 N\nSIMPSON'S  S IH1 M P - S AH0 N Z\nSIMPSONS  S IH1 M P - S AH0 N Z\nSIMPSONS'  S IH1 M P - S AH0 N Z\nSIMS  S IH1 M Z\nSIMS'  S IH1 M Z\nSIMSBURY  S IH1 M Z - B EH2 - R IY0\nSIMSON  S IH1 M - S AH0 N\nSIMULAC  S IH1 - M Y AH0 - L AE2 K\nSIMULATE  S IH1 - M Y AH0 - L AH0 T\nSIMULATE(2)  S IH1 - M Y AH0 - L EY2 T\nSIMULATED  S IH1 - M Y AH0 - L EY2 - T IH0 D\nSIMULATES  S IH1 - M Y AH0 - L EY2 T S\nSIMULATING  S IH1 - M Y AH0 - L EY2 - T IH0 NG\nSIMULATION  S IH2 - M Y AH0 - L EY1 - SH AH0 N\nSIMULATIONS  S IH2 - M Y UW0 - L EY1 - SH AH0 N Z\nSIMULATIONS(2)  S IH2 - M Y AH0 - L EY1 - SH AH0 N Z\nSIMULATOR  S IH1 - M Y AH0 - L EY2 - T ER0\nSIMULATORS  S IH1 - M Y AH0 - L EY2 - T ER0 Z\nSIMULCAST  S AY1 - M Y AH0 L - K AE2 S T\nSIMULCAST(2)  S IH1 - M Y AH0 L - K AE2 S T\nSIMULTANEOUS  S AY2 - M AH0 L - T EY1 - N IY0 - AH0 S\nSIMULTANEOUSLY  S AY2 - M AH0 L - T EY1 - N IY0 - AH0 S - L IY0\nSIN  S IH1 N\nSINAGRA  S IH0 - N AE1 - G R AH0\nSINAI  S AY1 - N AY2\nSINAR  S AY1 - N ER0\nSINATRA  S AH0 - N AA1 - T R AH0\nSINATRA'S  S AH0 - N AA1 - T R AH0 Z\nSINAY  S IH0 - N EY1\nSINBAD  S IH1 N - B AE2 D\nSINCAVAGE  S IY0 N - K AA1 - V IH0 JH\nSINCE  S IH1 N S\nSINCERE  S IH0 N - S IH1 R\nSINCERELY  S IH0 N - S IH1 R - L IY0\nSINCERITY  S IH0 N - S EH1 - R AH0 - T IY0\nSINCLAIR  S IH0 N - K L EH1 R\nSINCLAIR(2)  S IH1 N - K L EH0 R\nSIND  S IH1 N D\nSINDELAR  S IH1 N - D IH0 - L ER0\nSINDLINGER  S IH1 N D - L IH2 - NG ER0\nSINDONA  S IH0 N - D OW1 - N AH0\nSINDONI  S IY0 N - D OW1 - N IY0\nSINDT  S IH1 N T\nSINE  S AY1 N\nSINEAD  S IH0 - N EY1 - AE0 D\nSINEAD(2)  SH IH0 - N IY1 D\nSINEATH  S IH1 - N EH0 TH\nSINEGAL  S IH1 - N IH0 - G AH0 L\nSINER  S AY1 - N ER0\nSINES  S AY1 N Z\nSINEWY  S IH1 - N Y UW0 - IY0\nSINFONIA  S IH0 N - F OW1 - N IY0 - AH0\nSINFUL  S IH1 N - F AH0 L\nSING  S IH1 NG\nSINGAPORE  S IH1 NG - AH0 - P AO2 R\nSINGAPORE'S  S IH1 NG - AH0 - P AO0 R Z\nSINGAPOREAN  S IH0 NG - G AH0 - P AO1 - R IY0 - AH0 N\nSINGAPOREANS  S IH0 NG - G AH0 - P AO1 - R IY0 - AH0 N Z\nSINGE  S IH1 N JH\nSINGED  S IH1 N JH D\nSINGEL  S IH1 NG - G AH0 L\nSINGER  S IH1 - NG ER0\nSINGER'S  S IH1 - NG ER0 Z\nSINGERMAN  S IH1 N - JH ER2 - M AH0 N\nSINGERS  S IH1 - NG ER0 Z\nSINGH  S IH1 NG\nSINGH'S  S IH1 NG Z\nSINGIN'  S IH1 - NG IH0 N\nSINGING  S IH1 - NG IH0 NG\nSINGLAUB  S IH1 NG - L AW2 B\nSINGLE  S IH1 NG - G AH0 L\nSINGLE-HANDED  S IH1 NG - G AH0 L - HH AE1 N - D IH0 D\nSINGLED  S IH1 NG - G AH0 L D\nSINGLEHANDEDLY  S IH2 NG - G AH0 L - HH AE1 N - D IH0 D - L IY0\nSINGLER  S IH1 NG - G AH0 - L ER0\nSINGLER(2)  S IH1 NG - G L ER0\nSINGLES  S IH1 NG - G AH0 L Z\nSINGLETARY  S IH1 NG - G AH0 L - T EH0 - R IY0\nSINGLETERRY  S IH1 NG - G AH0 L - T EH0 - R IY0\nSINGLETON  S IH1 NG - G AH0 L - T AH0 N\nSINGLETON'S  S IH1 NG - G AH0 L - T AH0 N Z\nSINGLEY  S IH1 NG - G L IY0\nSINGLING  S IH1 NG - G AH0 L - IH0 NG\nSINGLING(2)  S IH1 NG - G L IH0 NG\nSINGLY  S IH1 NG - G L IY0\nSINGS  S IH1 NG Z\nSINGULAR  S IH1 NG - G Y AH0 - L ER0\nSINGULARIZATION  S IH2 NG - G Y AH0 - L ER0 - IH0 - Z EY1 - SH AH0 N\nSINGULARLY  S IH1 NG - G Y AH0 - L ER0 - L IY0\nSINHA  S IH1 N - HH AH0\nSINHALESE  S IH2 N - AH0 - L IY1 Z\nSINIARD  S IH1 - N IY0 - ER0 D\nSINIBALDI  S IH0 - N IH0 - B AA1 L - D IY0\nSINISCALCHI  S IH0 - N IH0 - S K AA1 L - K IY0\nSINISE  S IH0 - N IY1 Z\nSINISI  S IH0 - N IY1 - S IY0\nSINISTER  S IH1 - N IH0 - S T ER0\nSINK  S IH1 NG K\nSINKER  S IH1 NG - K ER0\nSINKFIELD  S IH1 NG K - F IY2 L D\nSINKHOLE  S IH1 NG K - HH OW2 L\nSINKHORN  S IH1 NG K - HH ER0 N\nSINKING  S IH1 NG - K IH0 NG\nSINKLER  S IH1 NG - K L ER0\nSINKO  S IH1 NG - K OW0\nSINKS  S IH1 NG K S\nSINN  S IH1 N\nSINNED  S IH1 N D\nSINNER  S IH1 - N ER0\nSINNERS  S IH1 - N ER0 Z\nSINNETT  S IH1 - N IH0 T\nSINNING  S IH1 - N IH0 NG\nSINNOTT  S IH1 - N AH0 T\nSINO  S AY1 - N OW0\nSINOPEC  S AY1 - N OW0 - P EH2 K\nSINOPOLI  S IY0 - N OW0 - P OW1 - L IY0\nSINOPOLI(2)  S IY0 - N AA1 - P OW0 - L IY0\nSINOR  S AY1 - N ER0\nSINQUEFIELD  S IH1 N - K W IH0 - F IY0 L D\nSINS  S IH1 N Z\nSINSABAUGH  S IH1 N - S AH0 - B AO2\nSINSEL  S IH1 N - S AH0 L\nSINTON  S IH1 N - T AH0 N\nSINUOUS  S IH1 - N W AH0 S\nSINUS  S AY1 - N AH0 S\nSINUSES  S AY1 - N AH0 - S AH0 Z\nSINYARD  S IH1 N - Y AA2 R D\nSIOBHAN  SH AW1 - B AA2 N\nSIOUX  S UW1\nSIP  S IH1 P\nSIPE  S AY1 P\nSIPELSTEIN  S IH1 - P AH0 L - S T AY0 N\nSIPELSTEIN(2)  S IH1 - P AH0 L - S T IY0 N\nSIPES  S AY1 P S\nSIPHON  S AY1 - F AH0 N\nSIPHONED  S AY1 - F AH0 N D\nSIPHONING  S AY1 - F AH0 N - IH0 NG\nSIPHONS  S AY1 - F AH0 N Z\nSIPLE  S AY1 - P AH0 L\nSIPOS  S AY1 - P OW0 Z\nSIPP  S IH1 P\nSIPPED  S IH1 P T\nSIPPEL  S IH1 - P AH0 L\nSIPPICAN  S IH1 - P IH0 - K AH0 N\nSIPPING  S IH1 - P IH0 NG\nSIPPLE  S IH1 - P AH0 L\nSIPS  S IH1 P S\nSIR  S ER1\nSIRACUSA  S IH0 - R AA0 - K UW1 - S AH0\nSIRACUSE  S IH0 - R AA0 - K UW1 - S IY0\nSIRAGUSA  S IH0 - R AA0 - G UW1 - S AH0\nSIRAVO  S IH0 - R AA1 - V OW0\nSIRCY  S ER1 - K IY0\nSIRE  S AY1 - ER0\nSIREK  S AO1 - R IH0 K\nSIREN  S AY1 - R AH0 N\nSIRENA  S IH0 - R EH1 - N AH0\nSIRENS  S AY1 - R AH0 N Z\nSIRES  S AY1 R Z\nSIRHAN  S IH1 R - HH AA2 N\nSIRHAN(2)  S IH1 R - HH AE2 N\nSIRI  S IH1 - R IY0\nSIRIANNI  S IH0 - R IY0 - AA1 - N IY0\nSIRIGNANO  S IH2 - R IY0 - N Y AA1 - N OW0\nSIRIS  S AY1 - R IH0 S\nSIRIS(2)  S IH1 - R IH0 S\nSIRK  S ER1 K\nSIRKIN  S ER1 - K IH0 N\nSIRKO  S ER1 - K OW0\nSIRLES  S ER1 L Z\nSIRMAN  S ER1 - M AH0 N\nSIRMANS  S ER1 - M AH0 N Z\nSIRMON  S ER1 - M AH0 N\nSIRMONS  S ER1 - M AH0 N Z\nSIRNA  S ER1 - N AH0\nSIROHI  S ER0 - OW1 - HH IY0\nSIROIS  S AY0 R - W AA1\nSIROKY  S IH1 - R AH0 - K IY0\nSIRON  S AO1 - R AH0 N\nSIROTA  S IH0 - R OW1 - T AH0\nSIROWITZ  S IH1 - R AH0 - W IH0 T S\nSIRRI  S IH1 - R IY0\nSIRRINE  S IH0 - R IY1 - N IY0\nSIS  S IH1 S\nSISCO  S IY1 - S K OW0\nSISCOE  S IH1 - S K OW0\nSISEMORE  S AY1 Z - M AO0 R\nSISK  S IH1 S K\nSISKA  S IY1 - S K AH0\nSISKEL  S IH1 S - K AH0 L\nSISKEL'S  S IH1 S - K AH0 L Z\nSISKIN  S IH1 - S K IH0 N\nSISKIND  S IH1 - S K IH0 N D\nSISKO  S IH1 - S K OW0\nSISLER  S IH1 - S AH0 - L ER0\nSISLER(2)  S IH1 S - L ER0\nSISLEY  S IH1 Z - L IY0\nSISNEROS  S IH1 S - N ER0 - OW0 Z\nSISNEY  S IH1 Z - N IY0\nSISON  S IH1 - S AH0 N\nSISSEL  S IH1 - S AH0 L\nSISSIE  S IH1 - S IY0\nSISSOM  S IH1 - S AH0 M\nSISSON  S IH1 - S AH0 N\nSISSY  S IH1 - S IY0\nSISTARE  S IY0 - S T AA1 - R IY0\nSISTEK  S IH1 - S T IH0 K\nSISTER  S IH1 - S T ER0\nSISTER'S  S IH1 - S T ER0 Z\nSISTERHOOD  S IH1 - S T ER0 - HH UH0 D\nSISTERS  S IH1 - S T ER0 Z\nSISTI  S IH1 - S T IY0\nSISTINE  S IH0 - S T IY1 N\nSISTINE(2)  S IH1 - S T IY0 N\nSISTO  S IH1 - S T OW0\nSISTRUNK  S IH1 - S T R AH0 NG K\nSISULU  S IH0 - S UW1 - L UW0\nSIT  S IH1 T\nSITAR  S IH1 - T ER0\nSITCOM  S IH1 T - K AA2 M\nSITCOMS  S IH1 T - K AA0 M Z\nSITE  S AY1 T\nSITE'S  S AY1 T S\nSITED  S AY1 - T IH0 D\nSITEK  S IH1 - T EH0 K\nSITES  S AY1 T S\nSITHE  S AY1 DH\nSITING  S AY1 - T IH0 NG\nSITIVENI  S IY2 - T IH0 - V IY1 - N IY0\nSITKA  S IH1 T - K AH0\nSITKO  S IH1 T - K OW0\nSITLER  S AY1 - T AH0 L - ER0\nSITLER(2)  S AY1 T - L ER0\nSITLER(3)  S IH1 T - L ER0\nSITMAR  S IH1 T - M AA2 R\nSITO  S IY1 - T OW0\nSITO'S  S IY1 - T OW0 Z\nSITRICK  S IH1 - T R IH0 K\nSITS  S IH1 T S\nSITTER  S IH1 - T ER0\nSITTERLY  S IH1 - T ER0 - L IY0\nSITTERS  S IH1 - T ER0 Z\nSITTIG  S IH1 - T IH0 G\nSITTIN'  S IH1 - T AH0 N\nSITTING  S IH1 - T IH0 NG\nSITTLER  S IH1 T - L ER0\nSITTNER  S IH1 T - N ER0\nSITTON  S IH1 - T AH0 N\nSITTS  S IH1 T S\nSITUATE  S IH1 - CH UW0 - EY2 T\nSITUATED  S IH1 - CH UW0 - EY2 - T IH0 D\nSITUATION  S IH2 - CH UW0 - EY1 - SH AH0 N\nSITUATION'S  S IH2 - CH UW0 - EY1 - SH AH0 N Z\nSITUATIONAL  S IH2 - CH UW0 - EY1 - SH AH0 - N AH0 L\nSITUATIONS  S IH2 - CH UW0 - EY1 - SH AH0 N Z\nSITUS  S AY1 - T AH0 S\nSITZ  S IH1 T S\nSITZE  S IH1 T Z\nSITZER  S IH1 T - Z ER0\nSITZES  S IH1 T - S IH0 Z\nSITZMAN  S IH1 T S - M AH0 N\nSITZMANN  S IH1 T S - M AH0 N\nSIU  S IY1 - UW0\nSIUDA  S IY0 - UW1 - D AH0\nSIVAK  S IH1 - V AH0 K\nSIVER  S AY1 - V ER0\nSIVERLING  S IH1 - V ER0 - L IH0 NG\nSIVERSON  S IH1 - V ER0 - S AH0 N\nSIVERTSEN  S IH1 - V ER0 T - S AH0 N\nSIVERTSON  S IH1 - V ER0 T - S AH0 N\nSIVILS  S IH1 - V AH0 L Z\nSIVLEY  S IH1 V - L IY0\nSIVY  S IH1 - V IY0\nSIWEK  S IH1 - W IH0 K\nSIX  S IH1 K S\nSIX'S  S IH1 K - S IH0 Z\nSIXED  S IH1 K S T\nSIXES  S IH1 K - S IH0 Z\nSIXFOLD  S IH1 K S - F OW2 L D\nSIXTEEN  S IH0 K S - T IY1 N\nSIXTEEN'S  S IH2 K S - T IY1 N Z\nSIXTEEN(2)  S IH1 K S - T IY1 N\nSIXTEENS  S IH1 K S - T IY1 N Z\nSIXTEENTH  S IH0 K S - T IY1 N TH\nSIXTEENTH(2)  S IH1 K S - T IY1 N TH\nSIXTEENTHS  S IH1 K S - T IY1 N TH S\nSIXTH  S IH1 K S TH\nSIXTHS  S IH1 K S TH S\nSIXTIES  S IH1 K S - T IY0 Z\nSIXTIETH  S IH1 K S - T IY0 - IH0 TH\nSIXTY  S IH1 K S - T IY0\nSIXTY'S  S IH1 K S - T IY0 Z\nSIZABLE  S AY1 - Z AH0 - B AH0 L\nSIZE  S AY1 Z\nSIZEABLE  S AY1 - Z AH0 - B AH0 L\nSIZED  S AY1 Z D\nSIZELER  S AY1 Z - L ER0\nSIZELOVE  S AY1 Z - L AH2 V\nSIZEMORE  S AY1 Z - M AO0 R\nSIZER  S AY1 - Z ER0\nSIZES  S AY1 - Z AH0 Z\nSIZES(2)  S AY1 - Z IH0 Z\nSIZING  S AY1 - Z IH0 NG\nSIZZLE  S IH1 - Z AH0 L\nSIZZLED  S IH1 - Z AH0 L D\nSIZZLER  S IH1 Z - L ER0\nSIZZLIN  S IH1 Z - L IH0 N\nSIZZLING  S IH1 - Z AH0 L - IH0 NG\nSIZZLING(2)  S IH1 Z - L IH0 NG\nSJOBERG  SH OW1 - B ER0 G\nSJOBLOM  SH OW1 - B L AA0 M\nSJODIN  SH OW1 - D IH0 N\nSJOGREN  SH OW1 - G R AH0 N\nSJOLANDER  SH OW1 - L AE2 N - D ER0\nSJOQUIST  SH OW1 - K W IH0 S T\nSJOSTROM  SH OW1 S - T R AH0 M\nSKAAR  S K AA1 R\nSKADDEN  S K AE1 - D IH0 N\nSKAFF  S K AE1 F\nSKAGGS  S K AE1 G Z\nSKAINS  S K EY1 N Z\nSKALA  S K AA1 - L AH0\nSKALICKY  S K AH0 - L IH1 - K IY0\nSKALLA  S K AE1 - L AH0\nSKALSKI  S K AA1 L S - K IY0\nSKALSKY  S K AA1 L S - K IY0\nSKANDIA  S K AE1 N - D IY0 - ER0\nSKANDIA(2)  S K AE1 N - D IY0 - AH0\nSKANDIA(3)  S K AE1 N - D Y AH0\nSKANDINAVISKA  S K AE2 N - D IH0 - N AH0 - V IH1 S - K AH0\nSKANSKA  S K AE1 N - S K AH0\nSKARDA  S K AA1 R - D AH0\nSKARE  S K EH1 R\nSKASE  S K EY1 Z\nSKATE  S K EY1 T\nSKATEBOARD  S K EY1 T - B AO2 R D\nSKATEBOARDING  S K EY1 T - B AO2 R - D IH0 NG\nSKATED  S K EY1 - T IH0 D\nSKATER  S K EY1 - T ER0\nSKATERS  S K EY1 - T ER0 Z\nSKATES  S K EY1 T S\nSKATING  S K EY1 - T IH0 NG\nSKEAT  S K IY1 T\nSKEEL  S K IY1 L\nSKEELS  S K IY1 L Z\nSKEEN  S K IY1 N\nSKEENS  S K IY1 N Z\nSKEES  S K IY1 Z\nSKEET  S K IY1 T\nSKEETE  S K IY1 T\nSKEETER  S K IY1 - T ER0\nSKEETERS  S K IY1 - T ER0 Z\nSKEETS  S K IY1 T S\nSKEFFINGTON  S K EH1 - F IH0 NG - T AH0 N\nSKEHAN  S K EY1 - AH0 N\nSKELETAL  S K EH1 - L AH0 - T AH0 L\nSKELETON  S K EH1 - L AH0 - T AH0 N\nSKELETONS  S K EH1 - L AH0 - T AH0 N Z\nSKELLENGER  S K EH1 - L IH0 N - JH ER0\nSKELLEY  S K EH1 - L IY0\nSKELLY  S K EH1 - L IY0\nSKELTER  S K EH1 L - T ER0\nSKELTON  S K EH1 L - T AH0 N\nSKENANDORE  S K IH0 - N AE1 N - D ER0\nSKENDER  S K EH1 N - D ER0\nSKENDERIAN  S K EH2 N - D EH1 - R IY0 - AH0 N\nSKENE  S K IY1 N\nSKEOCH  S K IY1 - AA0 CH\nSKEPTIC  S K EH1 P - T IH0 K\nSKEPTICAL  S K EH1 P - T AH0 - K AH0 L\nSKEPTICAL(2)  S K EH1 P - T IH0 - K AH0 L\nSKEPTICALLY  S K EH1 P - T IH0 - K AH0 - L IY0\nSKEPTICALLY(2)  S K EH1 P - T IH0 K - L IY0\nSKEPTICISM  S K EH1 P - T IH0 - S IH2 - Z AH0 M\nSKEPTICS  S K EH1 P - T IH0 K S\nSKERDAL  S K EH1 R - D AA2 L\nSKERRY  S K EH1 - R IY0\nSKETCH  S K EH1 CH\nSKETCHBOOK  S K EH1 CH - B UH2 K\nSKETCHBOOKS  S K EH1 CH - B UH2 K S\nSKETCHED  S K EH1 CH T\nSKETCHES  S K EH1 - CH AH0 Z\nSKETCHES(2)  S K EH1 - CH IH0 Z\nSKETCHING  S K EH1 - CH IH0 NG\nSKETCHY  S K EH1 - CH IY0\nSKEW  S K Y UW1\nSKEWED  S K Y UW1 D\nSKEWER  S K Y UW1 - ER0\nSKEWERED  S K Y UW1 - ER0 D\nSKEWERS  S K Y UW1 - ER0 Z\nSKEWES  S K Y UW1 Z\nSKEWING  S K Y UW1 - IH0 NG\nSKEWS  S K Y UW1 Z\nSKI  S K IY1\nSKIBA  S K AY1 - B AH0\nSKIBBE  S K IH1 B\nSKIBICKI  S K IH0 - B IH1 - K IY0\nSKIBINSKI  S K IH0 - B IH1 N - S K IY0\nSKIBO  S K AY1 - B OW0\nSKIBO(2)  S K IY1 - B OW0\nSKID  S K IH1 D\nSKIDDED  S K IH1 - D AH0 D\nSKIDDED(2)  S K IH1 - D IH0 D\nSKIDDING  S K IH1 - D IH0 NG\nSKIDGEL  S K IH1 - JH AH0 L\nSKIDMORE  S K IH1 D - M AO0 R\nSKIDS  S K IH1 D Z\nSKIED  S K IY1 D\nSKIER  S K AY1 R\nSKIER(2)  S K IY1 - ER0\nSKIERS  S K IY1 - ER0 Z\nSKIES  S K AY1 Z\nSKIFF  S K IH1 F\nSKIFFINGTON  S K IH1 - F IH0 NG - T AH0 N\nSKIFFS  S K IH1 F S\nSKIING  S K IY1 - IH0 NG\nSKILES  S K AY1 L Z\nSKILL  S K IH1 L\nSKILLED  S K IH1 L D\nSKILLEN  S K IH1 - L AH0 N\nSKILLERN  S K IH1 - L ER0 N\nSKILLET  S K IH1 - L AH0 T\nSKILLFUL  S K IH1 L - F AH0 L\nSKILLFULLY  S K IH1 L - F AH0 - L IY0\nSKILLIN  S K IH1 - L IH0 N\nSKILLING  S K IH1 - L IH0 NG\nSKILLINGS  S K IH1 - L IH0 NG Z\nSKILLMAN  S K IH1 L - M AH0 N\nSKILLS  S K IH1 L Z\nSKILTON  S K IH1 L - T AH0 N\nSKIM  S K IH1 M\nSKIMMED  S K IH1 M D\nSKIMMER  S K IH1 - M ER0\nSKIMMERS  S K IH1 - M ER0 Z\nSKIMMING  S K IH1 - M IH0 NG\nSKIMP  S K IH1 M P\nSKIMPIER  S K IH1 M - P IY0 - ER0\nSKIMPIEST  S K IH1 M - P IY0 - AH0 S T\nSKIMPING  S K IH1 M - P IH0 NG\nSKIMPY  S K IH1 M - P IY0\nSKIN  S K IH1 N\nSKIN'S  S K IH1 N Z\nSKINHEAD  S K IH1 N - HH EH2 D\nSKINHEADS  S K IH1 N - HH EH2 D Z\nSKINKS  S K IH1 NG K S\nSKINLESS  S K IH1 N - L AH0 S\nSKINNED  S K IH1 N D\nSKINNER  S K IH1 - N ER0\nSKINNER'S  S K IH1 - N ER0 Z\nSKINNIER  S K IH1 - N IY0 - ER0\nSKINNIEST  S K IH1 - N IY0 - AH0 S T\nSKINNY  S K IH1 - N IY0\nSKINS  S K IH1 N Z\nSKINS'  S K IH1 N Z\nSKIP  S K IH1 P\nSKIPJACK  S K IH1 P - JH AE2 K\nSKIPJACK'S  S K IH1 P - JH AE2 K S\nSKIPJACKS  S K IH1 P - JH AE2 K S\nSKIPP  S K IH1 P\nSKIPPA  S K IH1 - P AH0\nSKIPPA'S  S K IH1 - P AH0 Z\nSKIPPED  S K IH1 P T\nSKIPPER  S K IH1 - P ER0\nSKIPPER'S  S K IH1 - P ER0 Z\nSKIPPERS  S K IH1 - P ER0 Z\nSKIPPING  S K IH1 - P IH0 NG\nSKIPPY  S K IH1 - P IY0\nSKIPS  S K IH1 P S\nSKIPTON  S K IH1 P - T AH0 N\nSKIPWITH  S K IH1 P - W IH2 TH\nSKIPWORTH  S K IH1 P - W ER2 TH\nSKIRDALL  S K ER1 - D AA2 L\nSKIRMISH  S K ER1 - M IH0 SH\nSKIRMISHES  S K ER1 - M IH0 - SH IH0 Z\nSKIRMISHING  S K ER1 - M IH0 - SH IH0 NG\nSKIRT  S K ER1 T\nSKIRTED  S K ER1 - T IH0 D\nSKIRTING  S K ER1 - T IH0 NG\nSKIRTS  S K ER1 T S\nSKIRVIN  S K ER1 - V IH0 N\nSKIS  S K IY1 Z\nSKIT  S K IH1 T\nSKITS  S K IH1 T S\nSKITTISH  S K IH1 - T IH0 SH\nSKITTISHNESS  S K IH1 - T IH0 SH - N AH0 S\nSKITTLE  S K IH1 - T AH0 L\nSKITTLES  S K IH1 - T AH0 L Z\nSKIVER  S K AY1 - V ER0\nSKLAR  S K L AA1 R\nSKLENAR  S K L EH1 - N ER0\nSKOAL  S K OW1 L\nSKOCZYLAS  S K AH0 - CH IH1 - L AH0 Z\nSKODA  S K OW1 - D AH0\nSKOFF  S K AO1 F\nSKOG  S K AA1 G\nSKOGEN  S K AA1 - G AH0 N\nSKOGLUND  S K AA1 G - L AH0 N D\nSKOK  S K AA1 K\nSKOKIE  S K OW1 - K IY0\nSKOLER  S K OW1 - L ER0\nSKOLNICK  S K OW1 L - N IH0 K\nSKOLNIK  S K OW1 L - N IH0 K\nSKOLNIKS  S K OW1 L - N IH0 K S\nSKONIECZNY  S K AH0 - N IY1 CH - N IY0\nSKOOG  S K UW1 G\nSKOP  S K AA1 P\nSKORA  S K AO1 - R AH0\nSKORUPA  S K ER0 - UW1 - P AH0\nSKORUPSKI  S K ER0 - AH1 P - S K IY0\nSKOUSEN  S K UW1 - S AH0 N\nSKOV  S K AA1 V\nSKOW  S K AW1\nSKOWHEGAN  S K OW1 - HH IY2 - G AH0 N\nSKOWRON  S K AW1 - R AH0 N\nSKOWRONEK  S K AW0 - R OW1 - N EH0 K\nSKOWRONSKI  S K AW0 - R AA1 N S - K IY0\nSKRAMSTAD  S K R AE1 M - S T AE0 D\nSKROCH  S K R AA1 K\nSKROCKI  S K R AA1 - K IY0\nSKRZYPEK  S K ER0 - Z IH1 - P EH0 K\nSKUFCA  S K AH1 F - K AH0\nSKULK  S K AH1 L K\nSKULL  S K AH1 L\nSKULLS  S K AH1 L Z\nSKUNK  S K AH1 NG K\nSKUNKS  S K AH1 NG K S\nSKURA  S K UH1 - R AH0\nSKURDAL  S K ER1 - D AH0 L\nSKURKA  S K ER1 - K AH0\nSKUTT  S K AH1 T\nSKY  S K AY1\nSKY'S  S K AY1 Z\nSKYBOX  S K AY1 - B AA2 K S\nSKYBOXES  S K AY1 - B AA2 K - S IH0 Z\nSKYCAP  S K AY1 - K AE2 P\nSKYDIVE  S K AY1 - D AY0 V\nSKYDIVING  S K AY1 - D AY0 - V IH0 NG\nSKYDOME  S K AY1 - D OW2 M\nSKYHAWK  S K AY1 - HH AO2 K\nSKYHIGH  S K AY1 - HH AY2\nSKYLARK  S K AY1 - L AA2 R K\nSKYLAWN  S K AY1 - L AO2 N\nSKYLES  S K AY1 L Z\nSKYLIGHT  S K AY1 - L AY2 T\nSKYLIGHTS  S K AY1 - L AY2 T S\nSKYLINE  S K AY1 - L AY2 N\nSKYLITE  S K AY1 - L AY2 T\nSKYROCKET  S K AY1 - R AA2 - K AH0 T\nSKYROCKETED  S K AY1 - R AA2 - K AH0 - T IH0 D\nSKYROCKETING  S K AY1 - R AA2 - K AH0 - T IH0 NG\nSKYSCRAPER  S K AY1 - S K R EY2 - P ER0\nSKYSCRAPERS  S K AY1 - S K R EY2 - P ER0 Z\nSKYTEL  S K AY1 - T EH2 L\nSKYWARD  S K AY1 - W ER0 D\nSKYWAVE  S K AY1 - W EY2 V\nSKYWAY  S K AY1 - W EY2\nSKYWEST  S K AY1 - W EH2 S T\nSKYWRITER  S K AY1 - R AY2 - T ER0\nSKYWRITERS  S K AY1 - R AY2 - T ER0 Z\nSKYWRITING  S K AY1 - R AY2 - T IH0 NG\nSLAB  S L AE1 B\nSLABAUGH  S L AE1 - B AO0\nSLABS  S L AE1 B Z\nSLABY  S L EY1 - B IY0\nSLACK  S L AE1 K\nSLACKED  S L AE1 K T\nSLACKEN  S L AE1 - K AH0 N\nSLACKENED  S L AE1 - K AH0 N D\nSLACKENING  S L AE1 - K AH0 - N IH0 NG\nSLACKENS  S L AE1 - K AH0 N Z\nSLACKER  S L AE1 - K ER0\nSLACKERS  S L AE1 - K ER0 Z\nSLACKNESS  S L AE1 K - N AH0 S\nSLACKS  S L AE1 K S\nSLADE  S L EY1 D\nSLADEK  S L AE1 - D IH0 K\nSLADKY  S L AE1 D - K IY0\nSLAG  S L AE1 G\nSLAGEL  S L AE1 - G AH0 L\nSLAGER  S L EY1 - G ER0\nSLAGHT  S L AE1 T\nSLAGLE  S L EY1 - G AH0 L\nSLAGTER  S L AE1 G - T ER0\nSLAIN  S L EY1 N\nSLAINE  S L EY1 N\nSLALOM  S L AA1 - L AH0 M\nSLAM  S L AE1 M\nSLAMA  S L AA1 - M AH0\nSLAMMED  S L AE1 M D\nSLAMMER  S L AE1 - M ER0\nSLAMMING  S L AE1 - M IH0 NG\nSLAMS  S L AE1 M Z\nSLANDER  S L AE1 N - D ER0\nSLANDERED  S L AE1 N - D ER0 D\nSLANDEROUS  S L AE1 N - D ER0 - AH0 S\nSLANE  S L EY1 N\nSLANEY  S L EY1 - N IY0\nSLANG  S L AE1 NG\nSLANINA  S L AA0 - N IY1 - N AH0\nSLANKARD  S L AE1 NG - K ER0 D\nSLANT  S L AE1 N T\nSLANTED  S L AE1 N - T AH0 D\nSLANTED(2)  S L AE1 N - T IH0 D\nSLANTED(3)  S L AE1 - N AH0 D\nSLANTED(4)  S L AE1 - N IH0 D\nSLANTING  S L AE1 N - T IH0 NG\nSLAP  S L AE1 P\nSLAPDASH  S L AE1 P - D AE2 SH\nSLAPE  S L EY1 P\nSLAPPED  S L AE1 P T\nSLAPPEY  S L AE1 - P IY0\nSLAPPING  S L AE1 - P IH0 NG\nSLAPS  S L AE1 P S\nSLAPSTICK  S L AE1 P - S T IH2 K\nSLASH  S L AE1 SH\nSLASHED  S L AE1 SH T\nSLASHER  S L AE1 - SH ER0\nSLASHES  S L AE1 - SH IH0 Z\nSLASHING  S L AE1 - SH IH0 NG\nSLAT  S L AE1 T\nSLATE  S L EY1 T\nSLATED  S L EY1 - T IH0 D\nSLATEN  S L EY1 - T AH0 N\nSLATER  S L EY1 - T ER0\nSLATES  S L EY1 T S\nSLATKIN  S L AE1 T - K IH0 N\nSLATON  S L AE1 - T AH0 N\nSLATS  S L AE1 T S\nSLATTEN  S L AE1 - T AH0 N\nSLATTER  S L AE1 - T ER0\nSLATTERY  S L AE1 - T ER0 - IY0\nSLATTON  S L AE1 - T AH0 N\nSLAUGH  S L AO1\nSLAUGHTER  S L AO1 - T ER0\nSLAUGHTERED  S L AO1 - T ER0 D\nSLAUGHTERHOUSE  S L AO1 - T ER0 - HH AW2 S\nSLAUGHTERHOUSES  S L AO1 - T ER0 - HH AW2 - S IH0 Z\nSLAUGHTERING  S L AO1 - T ER0 - IH0 NG\nSLAUGHTERINGS  S L AO1 - T ER0 - IH0 NG Z\nSLAUGHTERS  S L AO1 - T ER0 Z\nSLAUSON  S L AW1 - Z AH0 N\nSLAV  S L AA1 V\nSLAVE  S L EY1 V\nSLAVEN  S L EY1 - V AH0 N\nSLAVENS  S L EY1 - V AH0 N Z\nSLAVERY  S L EY1 - V ER0 - IY0\nSLAVES  S L EY1 V Z\nSLAVIC  S L AA1 - V IH0 K\nSLAVICK  S L AE1 - V IH0 K\nSLAVIK  S L AA1 - V IH0 K\nSLAVIN  S L AE1 - V IH0 N\nSLAVINSKI  S L AH0 - V IH1 N - S K IY0\nSLAVISH  S L EY1 - V IH0 SH\nSLAVISHLY  S L AE1 - V IH0 SH - L IY0\nSLAVONIA  S L AH0 - V OW1 - N IY0 - AH0\nSLAVONIA(2)  S L AH0 - V OW1 - N Y AH0\nSLAVS  S L AA1 V Z\nSLAW  S L AO1\nSLAWINSKI  S L AA0 - V IH1 N - S K IY0\nSLAWSON  S L AO1 - S AH0 N\nSLAY  S L EY1\nSLAYBACK  S L EY1 - B AE2 K\nSLAYBAUGH  S L EY1 - B AO2\nSLAYDEN  S L EY1 - D AH0 N\nSLAYDON  S L EY1 - D AH0 N\nSLAYER  S L EY1 - ER0\nSLAYING  S L EY1 - IH0 NG\nSLAYINGS  S L EY1 - IH0 NG Z\nSLAYMAKER  S L EY1 - M EY2 - K ER0\nSLAYTER  S L EY1 - T ER0\nSLAYTON  S L EY1 - T AH0 N\nSLEASMAN  S L IY1 Z - M AH0 N\nSLEATOR  S L EY1 - T ER0\nSLEAZE  S L IY1 Z\nSLEAZY  S L IY1 - Z IY0\nSLECHTA  S L EH1 CH - T AH0\nSLED  S L EH1 D\nSLEDD  S L EH1 D\nSLEDDING  S L EH1 - D IH0 NG\nSLEDGE  S L EH1 JH\nSLEDGEHAMMER  S L EH1 JH - HH AE2 - M ER0\nSLEDS  S L EH1 D Z\nSLEDZ  S L EH1 D Z\nSLEE  S L IY1\nSLEEK  S L IY1 K\nSLEEKER  S L IY1 - K ER0\nSLEEKEST  S L IY1 - K AH0 S T\nSLEEKLY  S L IY1 K - L IY0\nSLEEMAN  S L IY1 - M AH0 N\nSLEEP  S L IY1 P\nSLEEPER  S L IY1 - P ER0\nSLEEPERS  S L IY1 - P ER0 Z\nSLEEPILY  S L IY1 - P AH0 - L IY0\nSLEEPINESS  S L IY1 - P IY0 - N AH0 S\nSLEEPING  S L IY1 - P IH0 NG\nSLEEPLESS  S L IY1 P - L AH0 S\nSLEEPS  S L IY1 P S\nSLEEPWALK  S L IY1 P - W AO2 K\nSLEEPWALKER  S L IY1 P - W AO2 - K ER0\nSLEEPWALKERS  S L IY1 P - W AO2 - K ER0 Z\nSLEEPWALKING  S L IY1 P - W AO2 - K IH0 NG\nSLEEPWEAR  S L IY1 P - W EH2 R\nSLEEPY  S L IY1 - P IY0\nSLEET  S L IY1 T\nSLEETER  S L IY1 - T ER0\nSLEETH  S L IY1 TH\nSLEEVE  S L IY1 V\nSLEEVED  S L IY1 V D\nSLEEVELESS  S L IY1 V - L IH0 S\nSLEEVES  S L IY1 V Z\nSLEIGH  S L EY1\nSLEIGHT  S L AY1 T\nSLEIPNER  S L AY1 P - N ER0\nSLEMMER  S L EH1 - M ER0\nSLEMP  S L EH1 M P\nSLENDER  S L EH1 N - D ER0\nSLENTZ  S L EH1 N T S\nSLEPIAN  S L IY1 - P IY0 - AH0 N\nSLEPIAN(2)  S L IY1 - P Y AH0 N\nSLEPT  S L EH1 P T\nSLESSENGER  S L EH1 - S EH0 N - G ER0\nSLETTEN  S L EH1 - T AH0 N\nSLEUTH  S L UW1 TH\nSLEUTHING  S L UW1 - TH IH0 NG\nSLEUTHS  S L UW1 TH S\nSLEVEN  S L IY1 - V AH0 N\nSLEVIN  S L EH1 - V IH0 N\nSLEW  S L UW1\nSLEZAK  S L EH1 - Z AH0 K\nSLICE  S L AY1 S\nSLICED  S L AY1 S T\nSLICER  S L AY1 - S ER0\nSLICES  S L AY1 - S AH0 Z\nSLICES(2)  S L AY1 - S IH0 Z\nSLICING  S L AY1 - S IH0 NG\nSLICK  S L IH1 K\nSLICKED  S L IH1 K T\nSLICKER  S L IH1 - K ER0\nSLICKERS  S L IH1 - K ER0 Z\nSLICKEST  S L IH1 - K AH0 S T\nSLICKLY  S L IH1 K - L IY0\nSLICKS  S L IH1 K S\nSLID  S L IH1 D\nSLIDE  S L AY1 D\nSLIDER  S L AY1 - D ER0\nSLIDES  S L AY1 D Z\nSLIDING  S L AY1 - D IH0 NG\nSLIFE  S L AY1 F\nSLIFER  S L AY1 - F ER0\nSLIFKA  S L IH1 F - K AH0\nSLIFKO  S L IH1 F - K OW0\nSLIGAR  S L IH1 - G ER0\nSLIGER  S L AY1 - G ER0\nSLIGH  S L AY1\nSLIGHT  S L AY1 T\nSLIGHTED  S L AY1 - T IH0 D\nSLIGHTEST  S L AY1 - T AH0 S T\nSLIGHTING  S L AY1 - T IH0 NG\nSLIGHTLY  S L AY1 T - L IY0\nSLIGHTS  S L AY1 T S\nSLIKER  S L AY1 - K ER0\nSLIM  S L IH1 M\nSLIMAK  S L IH1 - M AH0 K\nSLIME  S L AY1 M\nSLIMMED  S L IH1 M D\nSLIMMER  S L IH1 - M ER0\nSLIMMEST  S L IH1 - M AH0 S T\nSLIMMING  S L IH1 - M IH0 NG\nSLIMP  S L IH1 M P\nSLIMS  S L IH1 M Z\nSLIMY  S L AY1 - M IY0\nSLINEY  S L IH1 - N IY0\nSLING  S L IH1 NG\nSLINGER  S L IH1 - NG ER0\nSLINGERLAND  S L IH1 NG - G ER0 - L AH0 N D\nSLINGING  S L IH1 - NG IH0 NG\nSLINGS  S L IH1 NG Z\nSLINGSHOT  S L IH1 NG - SH AA2 T\nSLINGSHOTS  S L IH1 NG - SH AA2 T S\nSLINKARD  S L IH1 NG - K ER0 D\nSLINKER  S L IH1 NG - K ER0\nSLINKY  S L IH1 NG - K IY0\nSLIP  S L IH1 P\nSLIP-ON  S L IH1 - P AA2 N\nSLIP-ONS  S L IH1 - P AA2 N Z\nSLIPPAGE  S L IH1 - P IH0 JH\nSLIPPED  S L IH1 P T\nSLIPPER  S L IH1 - P ER0\nSLIPPERS  S L IH1 - P ER0 Z\nSLIPPERY  S L IH1 - P ER0 - IY0\nSLIPPERY(2)  S L IH1 - P R IY0\nSLIPPING  S L IH1 - P IH0 NG\nSLIPS  S L IH1 P S\nSLIPSHOD  S L IH1 P - SH AA2 D\nSLIT  S L IH1 T\nSLITER  S L IY1 - T ER0\nSLITHER  S L IH1 - DH ER0\nSLITHERING  S L IH1 - DH ER0 - IH0 NG\nSLITS  S L IH1 T S\nSLITTING  S L IH1 - T IH0 NG\nSLIVA  S L IY1 - V AH0\nSLIVER  S L IH1 - V ER0\nSLIVERS  S L IH1 - V ER0 Z\nSLIVINSKI  S L IH0 - V IH1 N - S K IY0\nSLIVKA  S L IH1 V - K AH0\nSLIVOVITZ  S L IH1 - V AH0 - V IH0 T S\nSLIWA  S L AY1 - V AH0\nSLIWINSKI  S L IH0 - V IH1 N - S K IY0\nSLOAN  S L OW1 N\nSLOAN'S  S L OW1 N Z\nSLOANE  S L OW1 N\nSLOAT  S L OW1 T\nSLOATE  S L OW1 T\nSLOB  S L AA1 B\nSLOBBER  S L AA1 - B ER0\nSLOBBERING  S L AA1 - B ER0 - IH0 NG\nSLOBODA  S L AH0 - B OW1 - D AH0\nSLOBODAN  S L OW1 - B OW0 - D AA2 N\nSLOBOGIN  S L AH0 - B OW1 - G AH0 N\nSLOBOGIN'S  S L AH0 - B OW1 - G AH0 N Z\nSLOBS  S L AA1 B Z\nSLOCAN  S L OW1 - K AH0 N\nSLOCAN'S  S L OW1 - K AH0 N Z\nSLOCOMB  S L OW1 - K AH0 M\nSLOCUM  S L OW1 - K AH0 M\nSLOCUMB  S L OW1 - K AH0 M\nSLOE  S L OW1\nSLOG  S L AA1 G\nSLOGAN  S L OW1 - G AH0 N\nSLOGANS  S L OW1 - G AH0 N Z\nSLOGGED  S L AA1 G D\nSLOGGING  S L AA1 - G IH0 NG\nSLOKUM  S L OW1 - K AH0 M\nSLOMA  S L OW1 - M AH0\nSLOMAN  S L OW1 - M AH0 N\nSLOMINSKI  S L AH0 - M IH1 N - S K IY0\nSLOMSKI  S L AA1 M - S K IY0\nSLONAKER  S L AA1 - N AH0 - K ER0\nSLONE  S L OW1 N\nSLONIKER  S L AA1 - N IH0 - K ER0\nSLOOP  S L UW1 P\nSLOP  S L AA1 P\nSLOPE  S L OW1 P\nSLOPER  S L OW1 - P ER0\nSLOPES  S L OW1 P S\nSLOPING  S L OW1 - P IH0 NG\nSLOPPIER  S L AA1 - P IY0 - ER0\nSLOPPIEST  S L AA1 - P IY0 - AH0 S T\nSLOPPILY  S L AA1 - P AH0 - L IY0\nSLOPPINESS  S L AA1 - P IY0 - N AH0 S\nSLOPPY  S L AA1 - P IY0\nSLORC  S L AO1 R K\nSLOSH  S L AA1 SH\nSLOSHING  S L AA1 - SH IH0 NG\nSLOSS  S L AO1 S\nSLOT  S L AA1 T\nSLOTA  S L OW1 - T AH0\nSLOTH  S L OW1 TH\nSLOTHOWER  S L AA1 - TH OW0 - ER0\nSLOTNICK  S L AA1 T - N IH0 K\nSLOTS  S L AA1 T S\nSLOTT  S L AA1 T\nSLOTTED  S L AA1 - T IH0 D\nSLOTTING  S L AA1 - T IH0 NG\nSLOUCH  S L AW1 CH\nSLOUCHES  S L AW1 - CH IH0 Z\nSLOUCHING  S L AW1 - CH IH0 NG\nSLOUGH  S L AH1 F\nSLOUGHS  S L AH1 F S\nSLOVACEK  S L AA1 - V AH0 - CH EH0 K\nSLOVAK  S L OW1 - V AE0 K\nSLOVAK(2)  S L OW1 - V AA0 K\nSLOVAKIA  S L OW2 - V AA1 - K IY0 - AH0\nSLOVAKIA'S  S L OW0 - V AA1 - K IY0 - AH0 Z\nSLOVAKIA'S(2)  S L OW0 - V AE1 - K IY0 - AH0 Z\nSLOVAKS  S L OW1 - V AE0 K S\nSLOVAKS(2)  S L OW1 - V AA0 K S\nSLOVENE  S L OW2 - V IY1 N\nSLOVENES  S L OW2 - V IY1 N Z\nSLOVENIA  S L OW2 - V IY1 - N IY0 - AH0\nSLOVENIAN  S L OW2 - V IY1 - N IY0 - AH0 N\nSLOVENLINESS  S L AH1 - V AH0 N - L IY0 - N AH0 S\nSLOVENLY  S L AH1 - V AH0 N - L IY0\nSLOVER  S L OW1 - V ER0\nSLOVES  S L OW1 V Z\nSLOVO  S L OW1 - V OW0\nSLOVONIA  S L AH0 - V OW1 - N IY0 - AH0\nSLOVONIA(2)  S L AH0 - V OW1 - N Y AH0\nSLOW  S L OW1\nSLOWDOWN  S L OW1 - D AW2 N\nSLOWDOWNS  S L OW1 - D AW2 N Z\nSLOWED  S L OW1 D\nSLOWER  S L OW1 - ER0\nSLOWEST  S L OW1 - AH0 S T\nSLOWEY  S L OW1 - IY0\nSLOWIK  S L OW1 - IH0 K\nSLOWING  S L OW1 - IH0 NG\nSLOWINSKI  S L OW0 - IH1 N - S K IY0\nSLOWLY  S L OW1 - L IY0\nSLOWNESS  S L OW1 - N AH0 S\nSLOWPOKE  S L OW1 - P OW2 K\nSLOWS  S L OW1 Z\nSLUDER  S L UW1 - D ER0\nSLUDGE  S L AH1 JH\nSLUDGY  S L AH1 - JH IY0\nSLUG  S L AH1 G\nSLUGA  S L UW1 - G AH0\nSLUGFEST  S L AH1 G - F EH2 S T\nSLUGGED  S L AH1 G D\nSLUGGER  S L AH1 - G ER0\nSLUGGERS  S L AH1 - G ER0 Z\nSLUGGING  S L AH1 - G IH0 NG\nSLUGGISH  S L AH1 - G IH0 SH\nSLUGGISHLY  S L AH1 - G IH0 SH - L IY0\nSLUGGISHNESS  S L AH1 - G IH0 SH - N AH0 S\nSLUGS  S L AH1 G Z\nSLUICE  S L UW1 S\nSLUICING  S L UW1 - S IH0 NG\nSLUITER  S L UW1 - T ER0\nSLUKA  S L UW1 - K AH0\nSLUM  S L AH1 M\nSLUMBER  S L AH1 M - B ER0\nSLUMBERING  S L AH1 M - B ER0 - IH0 NG\nSLUMP  S L AH1 M P\nSLUMPED  S L AH1 M P T\nSLUMPING  S L AH1 M - P IH0 NG\nSLUMPS  S L AH1 M P S\nSLUMS  S L AH1 M Z\nSLUNG  S L AH1 NG\nSLUR  S L ER1\nSLURP  S L ER1 P\nSLURRED  S L ER1 D\nSLURRING  S L ER1 - IH0 NG\nSLURRY  S L ER1 - IY0\nSLURS  S L ER1 Z\nSLUSH  S L AH1 SH\nSLUSHER  S L AH1 - SH ER0\nSLUSS  S L AH1 S\nSLUSSER  S L AH1 - S ER0\nSLUT  S L AH1 T\nSLUTSKY  S L AH1 T - S K IY0\nSLUTZ  S L AH1 T S\nSLUTZKY  S L AH1 T - S K IY0\nSLUYTER  S L AY1 - T ER0\nSLY  S L AY1\nSLYE  S L AY1\nSLYLY  S L AY1 - L IY0\nSLYNESS  S L AY1 - N AH0 S\nSLYTER  S L AY1 - T ER0\nSMABY  S M EY1 - B IY0\nSMACK  S M AE1 K\nSMACKED  S M AE1 K T\nSMACKING  S M AE1 - K IH0 NG\nSMACKS  S M AE1 K S\nSMAIL  S M EY1 L\nSMALDONE  S M AE1 L - D AH0 N\nSMALE  S M EY1 L\nSMALL  S M AO1 L\nSMALLCAP  S M AO1 L - K AE2 P\nSMALLEN  S M AO1 - L AH0 N\nSMALLER  S M AO1 - L ER0\nSMALLEST  S M AO1 - L AH0 S T\nSMALLEY  S M AA1 - L IY0\nSMALLING  S M AO1 - L IH0 NG\nSMALLISH  S M AO1 - L IH0 SH\nSMALLMAN  S M AO1 L - M AH0 N\nSMALLNESS  S M AO1 L - N AH0 S\nSMALLPOX  S M AO1 L - P AA2 K S\nSMALLRIDGE  S M AO1 L - R IH2 JH\nSMALLS  S M AO1 L Z\nSMALLTALK  S M AO1 L - T AO2 K\nSMALLTOWN  S M AO1 L - T AW2 N\nSMALLWOOD  S M AO1 L - W UH2 D\nSMALTZ  S M AE1 L T S\nSMARMY  S M AA1 R - M IY0\nSMARR  S M AE1 R\nSMART  S M AA1 R T\nSMARTCARD  S M AA1 R T - K AA2 R D\nSMARTER  S M AA1 R - T ER0\nSMARTEST  S M AA1 R - T AH0 S T\nSMARTING  S M AA1 R - T IH0 NG\nSMARTLY  S M AA1 R T - L IY0\nSMARTMONEY  S M AA1 R T - M AH2 - N IY0\nSMARTS  S M AA1 R T S\nSMARTT  S M AA1 R T\nSMASH  S M AE1 SH\nSMASHED  S M AE1 SH T\nSMASHER  S M AE1 - SH ER0\nSMASHES  S M AE1 - SH IH0 Z\nSMASHING  S M AE1 - SH IH0 NG\nSMATHER  S M AE1 - DH ER0\nSMATHERS  S M AE1 - DH ER0 Z\nSMATTER  S M AE1 - T ER0\nSMATTERING  S M AE1 - T ER0 - IH0 NG\nSMAY  S M EY1\nSMEAD  S M IY1 D\nSMEAL  S M IY1 L\nSMEAR  S M IH1 R\nSMEARED  S M IH1 R D\nSMEARING  S M IH1 - R IH0 NG\nSMEARS  S M IH1 R Z\nSMEBY  S M IY1 - B IY0\nSMEDBERG  S M EH1 D - B ER0 G\nSMEDLEY  S M EH1 D - L IY0\nSMEE  S M IY1\nSMEETING  S M IY1 - T IH0 NG\nSMEJKAL  S M EH1 JH - K AH0 L\nSMELCER  S M EH1 L - S ER0\nSMELL  S M EH1 L\nSMELLED  S M EH1 L D\nSMELLEY  S M EH1 - L IY0\nSMELLING  S M EH1 - L IH0 NG\nSMELLS  S M EH1 L Z\nSMELLY  S M EH1 - L IY0\nSMELSER  S M EH1 L - S ER0\nSMELT  S M EH1 L T\nSMELTER  S M EH1 L - T ER0\nSMELTER'S  S M EH1 L - T ER0 Z\nSMELTERS  S M EH1 L - T ER0 Z\nSMELTING  S M EH1 L - T IH0 NG\nSMELTZ  S M EH1 L T S\nSMELTZER  S M EH1 L T - Z ER0\nSMESTAD  S M EH1 - S T AH0 D\nSMET  S M EH1 T\nSMETANA  S M EH1 - T AH0 - N AH0\nSMETHERS  S M EH1 - DH ER0 Z\nSMETHURST  S M EH1 - TH ER0 S T\nSMETZER  S M EH1 T - Z ER0\nSMICK  S M IH1 K\nSMID  S M IH1 D\nSMIDDY  S M IH1 - D IY0\nSMIDGEN  S M IH1 - JH AH0 N\nSMIDT  S M IH1 D T\nSMIGEL  S M IH1 - JH AH0 L\nSMIGELSKI  S M IH0 - G EH1 L S - K IY0\nSMIGIEL  S M IH1 - JH IY0 L\nSMIGIELSKI  S M IH0 - G IY1 L S - K IY0\nSMILE  S M AY1 L\nSMILED  S M AY1 L D\nSMILES  S M AY1 L Z\nSMILEY  S M AY1 - L IY0\nSMILGIS  S M IH1 L - G IH0 Z\nSMILGIS(2)  S M IH1 L - JH IH0 Z\nSMILIE  S M IH1 - L IY0\nSMILING  S M AY1 - L IH0 NG\nSMILINGLY  S M AY1 - L IH0 NG - L IY0\nSMILLIE  S M IH1 - L IY0\nSMILOW  S M IH1 - L OW0\nSMINK  S M IH1 NG K\nSMIRK  S M ER1 K\nSMIRKING  S M ER1 - K IH0 NG\nSMIRKS  S M ER1 K S\nSMIRNOFF  S M ER1 - N AO0 F\nSMIRNOV  S M ER1 - N AA0 F\nSMIRNOVA  S M ER2 - N OW1 - V AH0\nSMISEK  S M IH1 - S EH0 K\nSMIT  S M IH1 T\nSMITH  S M IH1 TH\nSMITH'S  S M IH1 TH S\nSMITHBURG  S M IH1 TH - B ER0 G\nSMITHEE  S M IH1 - TH IY1\nSMITHER  S M IH1 - DH ER0\nSMITHEREEN  S M IH2 - DH ER0 - IY1 N\nSMITHEREENS  S M IH2 - DH ER0 - IY1 N Z\nSMITHERMAN  S M IH1 - DH ER0 - M AH0 N\nSMITHERS  S M IH1 - DH ER0 Z\nSMITHEY  S M IH1 - TH IY0\nSMITHFIELD  S M IH1 TH - F IY0 L D\nSMITHHART  S M IH1 TH - HH AA2 R T\nSMITHKLINE  S M IH1 TH - K L AY2 N\nSMITHKLINE'S  S M IH1 TH - K L AY2 N Z\nSMITHS  S M IH1 TH S\nSMITHSON  S M IH1 TH - S AH0 N\nSMITHSON'S  S M IH1 TH - S AH0 N Z\nSMITHSONIAN  S M IH0 TH - S OW1 - N IY0 - AH0 N\nSMITHSONIAN'S  S M IH2 TH - S OW1 - N IY0 - AH0 N Z\nSMITHSONIAN'S(2)  S M IH2 S - OW1 - N IY0 - AH0 N Z\nSMITHSONIAN(2)  S M IH0 S - OW1 - N IY0 - AH0 N\nSMITHTOWN  S M IH1 TH - T AW2 N\nSMITHWICK  S M IH1 TH - W IH2 K\nSMITLEY  S M IH1 T - L IY0\nSMITS  S M IH1 T S\nSMITTEN  S M IH1 - T AH0 N\nSMITTLE  S M IH1 - T AH0 L\nSMITTY  S M IH1 - T IY0\nSMOAK  S M OW1 K\nSMOCK  S M AA1 K\nSMOG  S M AA1 G\nSMOGGIEST  S M AA1 - G IY0 - AH0 S T\nSMOGGY  S M AO1 - G IY0\nSMOKE  S M OW1 K\nSMOKED  S M OW1 K T\nSMOKEJUMPER  S M OW1 K - JH AH2 M - P ER0\nSMOKEJUMPERS  S M OW1 K - JH AH2 M - P ER0 Z\nSMOKELESS  S M OW1 K - L AH0 S\nSMOKER  S M OW1 - K ER0\nSMOKER'S  S M OW1 - K ER0 Z\nSMOKERS  S M OW1 - K ER0 Z\nSMOKERS'  S M OW1 - K ER0 Z\nSMOKES  S M OW1 K S\nSMOKESCREEN  S M OW1 K - S K R IY2 N\nSMOKESTACK  S M OW1 K - S T AE2 K\nSMOKESTACKS  S M OW1 K - S T AE2 K S\nSMOKEY  S M OW1 - K IY0\nSMOKING  S M OW1 - K IH0 NG\nSMOKING'S  S M OW1 - K IH0 NG Z\nSMOKY  S M OW1 - K IY0\nSMOLA  S M OW1 - L AH0\nSMOLAK  S M OW1 - L AH0 K\nSMOLDER  S M OW1 L - D ER0\nSMOLDERING  S M OW1 L - D ER0 - IH0 NG\nSMOLEN  S M AA1 - L AH0 N\nSMOLENSK  S M OW0 - L EH1 N S K\nSMOLENSKI  S M AH0 - L EH1 N - S K IY0\nSMOLEY  S M OW1 - L IY0\nSMOLIK  S M OW1 - L IH0 K\nSMOLIN  S M OW1 - L IH0 N\nSMOLINSKI  S M AH0 - L IH1 N - S K IY0\nSMOLINSKY  S M AH0 - L IH1 N - S K IY0\nSMOLKA  S M OW1 L - K AH0\nSMOOT  S M UW1 T\nSMOOTH  S M UW1 DH\nSMOOTHED  S M UW1 DH D\nSMOOTHEN  S M UW1 - DH IH0 N\nSMOOTHENS  S M UW1 - DH IH0 N Z\nSMOOTHER  S M UW1 - DH ER0\nSMOOTHEST  S M UW1 - DH AH0 S T\nSMOOTHING  S M UW1 - DH IH0 NG\nSMOOTHLY  S M UW1 DH - L IY0\nSMOOTHNESS  S M UW1 DH - N AH0 S\nSMOOTHS  S M UW1 DH Z\nSMOOTS  S M UW1 T S\nSMORGASBORD  S M AO1 R - G AH0 S - B AO2 R D\nSMOTHER  S M AH1 - DH ER0\nSMOTHERED  S M AH1 - DH ER0 D\nSMOTHERING  S M AH1 - DH ER0 - IH0 NG\nSMOTHERMAN  S M AH1 - DH ER0 - M AH0 N\nSMOTHERMON  S M AA1 - TH ER0 - M OW0 N\nSMOTHERS  S M AH1 - DH ER0 Z\nSMOTRICH  S M AA1 - T R IH0 K\nSMOUSE  S M AW1 S\nSMOYER  S M OY1 - ER0\nSMREKAR  S M R EH1 - K ER0\nSMREKAR(2)  S M ER1 - IH0 - K ER0\nSMUCK  S M AH1 K\nSMUCKER  S M AH1 - K ER0\nSMUDGE  S M AH1 JH\nSMUDGED  S M AH1 JH D\nSMUG  S M AH1 G\nSMUGGLE  S M AH1 - G AH0 L\nSMUGGLED  S M AH1 - G AH0 L D\nSMUGGLER  S M AH1 G - L ER0\nSMUGGLER'S  S M AH1 G - L ER0 Z\nSMUGGLER(2)  S M AH1 - G AH0 - L ER0\nSMUGGLERS  S M AH1 G - L ER0 Z\nSMUGGLERS'  S M AH1 G - L ER0 Z\nSMUGGLERS'(2)  S M AH1 - G AH0 - L ER0 Z\nSMUGGLERS(2)  S M AH1 - G AH0 - L ER0 Z\nSMUGGLING  S M AH1 - G L IH0 NG\nSMUGGLING(2)  S M AH1 - G AH0 L - IH0 NG\nSMUGLY  S M AH1 G - L IY0\nSMUGNESS  S M AH1 G - N AH0 S\nSMULL  S M AH1 L\nSMULLEN  S M AH1 - L AH0 N\nSMURF  S M ER1 F\nSMURFIT  S M ER1 - F IH0 T\nSMURFS  S M ER1 F S\nSMUT  S M AH1 T\nSMYERS  S M AY1 - ER0 Z\nSMYLIE  S M IH1 - L IY0\nSMYLY  S M IH1 - L IY0\nSMYRE  S M AY1 R\nSMYRNA  S M ER1 - N AH0\nSMYSER  S M AY1 - S ER0\nSMYTH  S M AY1 TH\nSMYTH(2)  S M IH1 TH\nSMYTHE  S M AY1 DH\nSNACK  S N AE1 K\nSNACKS  S N AE1 K S\nSNACKWELL  S N AE1 - K W EH2 L\nSNACKWELL'S  S N AE1 - K W EH2 L Z\nSNACKWELLS  S N AE1 - K W EH2 L Z\nSNADER  S N EY1 - D ER0\nSNAFU  S N AE1 - F UW0\nSNAFUS  S N AE1 - F AH0 S\nSNAG  S N AE1 G\nSNAGGED  S N AE1 G D\nSNAGGER  S N AE1 - G ER0\nSNAGGERS  S N AE1 - G ER0 Z\nSNAGGING  S N AE1 - G IH0 NG\nSNAGS  S N AE1 G Z\nSNAIL  S N EY1 L\nSNAIL'S  S N EY1 L Z\nSNAILS  S N EY1 L Z\nSNAKE  S N EY1 K\nSNAKE'S  S N EY1 K S\nSNAKEBITE  S N EY1 K - B AY2 T\nSNAKEBITES  S N EY1 K - B AY2 T S\nSNAKELIKE  S N EY1 - K L AY2 K\nSNAKES  S N EY1 K S\nSNAKING  S N EY1 - K IH0 NG\nSNAP  S N AE1 P\nSNAPDRAGON  S N AE1 P - D R AE2 - G AH0 N\nSNAPDRAGONS  S N AE1 P - D R AE2 - G AH0 N Z\nSNAPE  S N EY1 P\nSNAPP  S N AE1 P\nSNAPPED  S N AE1 P T\nSNAPPER  S N AE1 - P ER0\nSNAPPING  S N AE1 - P IH0 NG\nSNAPPLE  S N AE1 - P AH0 L\nSNAPPLE'S  S N AE1 - P AH0 L Z\nSNAPPLES  S N AE1 - P AH0 L Z\nSNAPPY  S N AE1 - P IY0\nSNAPS  S N AE1 P S\nSNAPSHOT  S N AE1 P - SH AA2 T\nSNAPSHOTS  S N AE1 P - SH AA2 T S\nSNARE  S N EH1 R\nSNARED  S N EH1 R D\nSNARES  S N EH1 R Z\nSNARING  S N EH1 - R IH0 NG\nSNARL  S N AA1 R L\nSNARLED  S N AA1 - R AH0 L D\nSNARLING  S N AA1 R - L IH0 NG\nSNARLS  S N AA1 R L Z\nSNARR  S N AE1 R\nSNARSKI  S N AA1 R S - K IY0\nSNATCH  S N AE1 CH\nSNATCHED  S N AE1 CH T\nSNATCHER  S N AE1 - CH ER0\nSNATCHERS  S N AE1 - CH ER0 Z\nSNATCHES  S N AE1 - CH IH0 Z\nSNATCHING  S N AE1 - CH IH0 NG\nSNAVELY  S N EY1 V - L IY0\nSNAY  S N EY1\nSNAZZIER  S N AE1 - Z IY0 - ER0\nSNAZZY  S N AE1 - Z IY0\nSNEAD  S N IY1 D\nSNEAK  S N IY1 K\nSNEAKED  S N IY1 K T\nSNEAKER  S N IY1 - K ER0\nSNEAKERS  S N IY1 - K ER0 Z\nSNEAKING  S N IY1 - K IH0 NG\nSNEAKS  S N IY1 K S\nSNEAKY  S N IY1 - K IY0\nSNEARY  S N IH1 - R IY0\nSNEATH  S N EH1 TH\nSNECMA  S N EH1 K - M AA0\nSNEDAKER  S N EH1 - D AH0 - K ER0\nSNEDDEN  S N EH1 - D AH0 N\nSNEDDON  S N EH1 - D AH0 N\nSNEDEGAR  S N EH1 - D IH0 - G ER0\nSNEDEKER  S N EH1 - D IH0 - K ER0\nSNEE  S N IY1\nSNEED  S N IY1 D\nSNEER  S N IH1 R\nSNEERED  S N IH1 R D\nSNEERING  S N IH1 - R IH0 NG\nSNEERINGER  S N IH1 - R IH0 N - JH ER0\nSNEERS  S N IH1 R Z\nSNEEZE  S N IY1 Z\nSNEEZED  S N IY1 Z D\nSNEEZES  S N IY1 - Z IH0 Z\nSNEEZING  S N IY1 - Z IH0 NG\nSNEH  S N EH1\nSNEIDER  S N AY1 - D ER0\nSNELGROVE  S N EH1 L - G R OW2 V\nSNELL  S N EH1 L\nSNELLEN  S N EH1 - L AH0 N\nSNELLENBERGER  S N EH1 - L AH0 N - B ER0 - G ER0\nSNELLER  S N EH1 - L ER0\nSNELLGROVE  S N EH1 L - G R OW2 V\nSNELLING  S N EH1 - L IH0 NG\nSNELLINGS  S N EH1 - L IH0 NG Z\nSNELSON  S N EH1 L - S AH0 N\nSNETHEN  S N EH1 - TH AH0 N\nSNIA  S N IY1 - AH0\nSNICKER  S N IH1 - K ER0\nSNICKERED  S N IH1 - K ER0 D\nSNICKERING  S N IH1 - K ER0 - IH0 NG\nSNICKERS  S N IH1 - K ER0 Z\nSNIDE  S N AY1 D\nSNIDER  S N AY1 - D ER0\nSNIDOW  S N IH1 - D OW0\nSNIEGOWSKI  S N IY0 - G AO1 F S - K IY0\nSNIFF  S N IH1 F\nSNIFFED  S N IH1 F T\nSNIFFEN  S N IH1 - F AH0 N\nSNIFFER  S N IH1 - F ER0\nSNIFFING  S N IH1 - F IH0 NG\nSNIFFS  S N IH1 F S\nSNIFFY  S N IH1 - F IY0\nSNIP  S N IH1 P\nSNIPE  S N AY1 P\nSNIPED  S N AY1 P T\nSNIPER  S N AY1 - P ER0\nSNIPER'S  S N AY1 - P ER0 Z\nSNIPERS  S N AY1 - P ER0 Z\nSNIPERS'  S N AY1 - P ER0 Z\nSNIPES  S N AY1 P S\nSNIPING  S N AY1 - P IH0 NG\nSNIPPET  S N IH1 - P AH0 T\nSNIPPETS  S N IH1 - P AH0 T S\nSNIPS  S N IH1 P S\nSNITCH  S N IH1 CH\nSNITCHING  S N IH1 - CH IH0 NG\nSNITKER  S N IH1 T - K ER0\nSNITZER  S N IH1 T - Z ER0\nSNIVELY  S N AY1 V - L IY0\nSNOB  S N AA1 B\nSNOBBERY  S N AA1 - B ER0 - IY0\nSNOBBISH  S N AA1 - B IH0 SH\nSNOBBY  S N AA1 - B IY0\nSNOBS  S N AA1 B Z\nSNODDERLY  S N AA1 - D ER0 - L IY0\nSNODDY  S N AA1 - D IY0\nSNODGRASS  S N AA1 D - G R AE2 S\nSNOHOMISH  S N AA1 - HH AH0 - M IH0 SH\nSNOKE  S N OW1 K\nSNOOK  S N UH1 K\nSNOOKER  S N UH1 - K ER0\nSNOOKERED  S N UH1 - K ER0 D\nSNOOKS  S N UH1 K S\nSNOOP  S N UW1 P\nSNOOPING  S N UW1 - P IH0 NG\nSNOOPY  S N UW1 - P IY0\nSNOOTY  S N UW1 - T IY0\nSNOOZE  S N UW1 Z\nSNOOZING  S N UW1 - Z IH0 NG\nSNORE  S N AO1 R\nSNORING  S N AO1 - R IH0 NG\nSNORT  S N AO1 R T\nSNORTED  S N AO1 R - T IH0 D\nSNORTING  S N AO1 R - T IH0 NG\nSNORTS  S N AO1 R T S\nSNOT  S N AO1 T\nSNOUFFER  S N OW1 - F ER0\nSNOUT  S N AW1 T\nSNOVER  S N OW1 - V ER0\nSNOW  S N OW1\nSNOWBALL  S N OW1 - B AO2 L\nSNOWBALL'S  S N OW1 - B AO2 L Z\nSNOWBALLED  S N OW1 - B AO2 L D\nSNOWBALLING  S N OW1 - B AO2 - L IH0 NG\nSNOWBALLS  S N OW1 - B AO2 L Z\nSNOWBERGER  S N OW1 - B ER0 - G ER0\nSNOWBIRD  S N OW1 - B ER2 D\nSNOWBIRDS  S N OW1 - B ER2 D Z\nSNOWBOARD  S N OW1 - B AO2 R D\nSNOWBOARDER  S N OW1 - B AO2 R - D ER0\nSNOWBOARDERS  S N OW1 - B AO2 R - D ER0 Z\nSNOWBOARDS  S N OW1 - B AO2 R D Z\nSNOWBOUND  S N OW1 - B AW2 N D\nSNOWDEN  S N OW1 - D AH0 N\nSNOWDON  S N OW1 - D AH0 N\nSNOWE  S N OW1\nSNOWED  S N OW1 D\nSNOWFALL  S N OW1 - F AA0 L\nSNOWFALLS  S N OW1 - F AA0 L Z\nSNOWFLAKE  S N OW1 - F L EY2 K\nSNOWFLAKES  S N OW1 - F L EY2 K S\nSNOWING  S N OW1 - IH0 NG\nSNOWMAN  S N OW1 - M AE2 N\nSNOWMOBILE  S N OW1 - M OW0 - B IY2 L\nSNOWMOBILES  S N OW1 - M OW0 - B IY2 L Z\nSNOWPLOW  S N OW1 - P L AW2\nSNOWPLOWS  S N OW1 - P L AW2 Z\nSNOWS  S N OW1 Z\nSNOWSHOE  S N OW1 - SH UW2\nSNOWSTORM  S N OW1 - S T AO2 R M\nSNOWSTORMS  S N OW1 - S T AO2 R M Z\nSNOWY  S N OW1 - IY0\nSNUB  S N AH1 B\nSNUBBED  S N AH1 B D\nSNUBBING  S N AH1 - B IH0 NG\nSNUCK  S N AH1 K\nSNUFF  S N AH1 F\nSNUFFED  S N AH1 F T\nSNUFFER  S N AH1 - F ER0\nSNUFFING  S N AH1 - F IH0 NG\nSNUFFS  S N AH1 F S\nSNUG  S N AH1 G\nSNUGGING  S N AH1 - G IH0 NG\nSNUGGLE  S N AH1 - G AH0 L\nSNUGGS  S N AH1 G Z\nSNUGLY  S N AH1 G - L IY0\nSNYDER  S N AY1 - D ER0\nSNYDER'S  S N AY1 - D ER0 Z\nSNYDERGENERAL  S N AY2 - D ER0 - JH EH1 - N ER0 - AH0 L\nSO  S OW1\nSO'S  S OW1 Z\nSO-CALLED  S OW1 - K AO1 L D\nSO-SO  S OW1 - S OW1\nSOADY  S OW1 - D IY0\nSOAK  S OW1 K\nSOAKED  S OW1 K T\nSOAKING  S OW1 - K IH0 NG\nSOAKS  S OW1 K S\nSOAP  S OW1 P\nSOAPBOX  S OW1 P - B AA2 K S\nSOAPS  S OW1 P S\nSOAPY  S OW1 - P IY0\nSOAR  S AO1 R\nSOARD  S AO1 R D\nSOARED  S AO1 R D\nSOARES  S AO1 - R EH0 S\nSOARING  S AO1 - R IH0 NG\nSOARS  S AO1 R Z\nSOAVE  S OW1 V\nSOB  S AA1 B\nSOBBED  S AA1 B D\nSOBBING  S AA1 - B IH0 NG\nSOBBINGLY  S AA1 - B IH0 NG - L IY0\nSOBCZAK  S AA1 B - CH AE0 K\nSOBCZYK  S AA1 B - CH IH0 K\nSOBECK  S OW1 - B EH2 K\nSOBECKI  S AH0 - B EH1 T S - K IY0\nSOBEK  S OW1 - B IH0 K\nSOBEL  S OW1 - B AH0 L\nSOBELMAN  S OW1 - B AH0 L - M AH0 N\nSOBER  S OW1 - B ER0\nSOBERED  S OW1 - B ER0 D\nSOBERING  S OW1 - B ER0 - IH0 NG\nSOBERLY  S OW1 - B ER0 - L IY0\nSOBERS  S OW1 - B ER0 Z\nSOBEY  S OW1 - B IY0\nSOBIBOR  S OW0 - B IY1 - B AO0 R\nSOBIBOR(2)  S OW0 - B IH1 - B AO0 R\nSOBIECH  S AA1 - B IY0 HH\nSOBIESKI  S OW2 - B IY0 - EH1 S - K IY0\nSOBIN  S OW1 - B IH0 N\nSOBKOWIAK  S AH0 B - K AW1 - IY0 - AE0 K\nSOBLE  S OW1 - B AH0 L\nSOBOCINSKI  S AH0 - B AH0 - CH IH1 N - S K IY0\nSOBOL  S OW1 - B AH0 L\nSOBOLESKI  S AH0 - B AH0 - L EH1 S - K IY0\nSOBOLEWSKI  S AH0 - B AH0 - L EH1 F S - K IY0\nSOBOLIK  S AH0 - B OW1 - L IH0 K\nSOBON  S OW0 - B AO1 N\nSOBOTA  S AH0 - B OW1 - T AH0\nSOBOTKA  S AH0 - B OW1 T - K AH0\nSOBOTTA  S OW0 - B OW1 - T AH0\nSOBRIETY  S AH0 - B R AY1 - AH0 - T IY0\nSOBRIQUET  S OW1 - B R AH0 - K EY2\nSOBRIQUET(2)  S AH2 - B R AH0 - K EH1 T\nSOBS  S AA1 B Z\nSOCALLED  S OW1 - K AA1 L D\nSOCANAV  S AA1 - K AH0 - N AA0 V\nSOCARRAS  S OW0 - K AA1 - R AA0 Z\nSOCCER  S AA1 - K ER0\nSOCCER'S  S AA1 - K ER0 Z\nSOCCI  S OW1 - CH IY0\nSOCHA  S OW1 - CH AH0\nSOCHACKI  S AH0 - CH AE1 - K IY0\nSOCHET  S OW0 - SH EY1\nSOCHI  S OW1 - CH IY0\nSOCHOR  S AA1 - K ER0\nSOCIA  S OW1 - CH AH0\nSOCIABLE  S OW1 - SH AH0 - B AH0 L\nSOCIAL  S OW1 - SH AH0 L\nSOCIALISM  S OW1 - SH AH0 - L IH2 - Z AH0 M\nSOCIALIST  S OW1 - SH AH0 - L AH0 S T\nSOCIALIST(2)  S OW1 - SH AH0 - L IH0 S T\nSOCIALISTIC  S OW2 - SH AH0 - L IH1 - S T IH0 K\nSOCIALISTS  S OW1 - SH AH0 - L AH0 S T S\nSOCIALISTS'  S OW2 - SH AH0 - L IH0 S T S\nSOCIALISTS'(2)  S OW2 - SH AH0 - L IH0 S S\nSOCIALISTS'(3)  S OW2 - SH AH0 - L IH0 S\nSOCIALISTS(2)  S OW1 - SH AH0 - L IH0 S T S\nSOCIALISTS(3)  S OW1 - SH AH0 - L IH0 S S\nSOCIALISTS(4)  S OW1 - SH AH0 - L IH0 S\nSOCIALITE  S OW1 - SH AH0 - L AY2 T\nSOCIALITES  S OW1 - SH AH0 - L AY2 T S\nSOCIALIZATION  S OW2 - SH AH0 - L IH0 - Z EY1 - SH AH0 N\nSOCIALIZE  S OW1 - SH AH0 - L AY2 Z\nSOCIALIZED  S OW1 - SH AH0 - L AY2 Z D\nSOCIALIZING  S OW1 - SH AH0 - L AY2 - Z IH0 NG\nSOCIALLY  S OW1 - SH AH0 - L IY0\nSOCIEDAD  S OW2 - S IY0 - D AE1 D\nSOCIETA  S OW2 - S IY0 - EH1 - T AH0\nSOCIETAL  S AH0 - S AY1 - IH0 - T AH0 L\nSOCIETE  S OW2 - S IY0 - EH0 - T EY1\nSOCIETIES  S AH0 - S AY1 - AH0 - T IY0 Z\nSOCIETY  S AH0 - S AY1 - AH0 - T IY0\nSOCIETY'S  S AH0 - S AY1 - AH0 - T IY0 Z\nSOCIO  S OW1 - S IY0 - OW0\nSOCIOECONOMIC  S OW0 - S IY2 - OW2 - EH2 - K AH0 - N AA1 - M IH0 K\nSOCIOLOGICAL  S OW2 - S IY0 - AH0 - L AA1 - JH IH0 - K AH0 L\nSOCIOLOGIST  S OW2 - S IY0 - AA1 - L AH0 - JH IH0 S T\nSOCIOLOGISTS  S OW2 - S IY0 - AA1 - L AH0 - JH IH0 S T S\nSOCIOLOGISTS(2)  S OW2 - S IY0 - AA1 - L AH0 - JH IH0 S S\nSOCIOLOGISTS(3)  S OW2 - S IY0 - AA1 - L AH0 - JH IH0 S\nSOCIOLOGY  S OW2 - S IY0 - AA1 - L AH0 - JH IY0\nSOCIOPATH  S OW1 - S IY0 - OW0 - P AE2 TH\nSOCK  S AA1 K\nSOCKED  S AA1 K T\nSOCKET  S AA1 - K AH0 T\nSOCKETS  S AA1 - K AH0 T S\nSOCKING  S AA1 - K IH0 NG\nSOCKS  S AA1 K S\nSOCKWELL  S AA1 - K W EH2 L\nSOCOL  S OW1 - K AA2 L\nSOCRATES  S AA1 - K R AH0 - T IY2 Z\nSOCRATIC  S AH0 - K R AE1 - T IH0 K\nSOD  S AA1 D\nSODA  S OW1 - D AH0\nSODA'S  S OW1 - D AH0 Z\nSODANO  S OW0 - D AA1 - N OW0\nSODARO  S OW0 - D AA1 - R OW0\nSODAS  S OW1 - D AH0 Z\nSODDEN  S AA1 - D AH0 N\nSODDERS  S AA1 - D ER0 Z\nSODECOM  S OW1 - D AH0 - K AA0 M\nSODEN  S OW1 - D AH0 N\nSODER  S OW1 - D ER0\nSODERBERG  S OW1 - D ER0 - B ER0 G\nSODERBERGH  S OW1 - D ER0 - B ER0 G\nSODERBLOM  S OW1 - D ER0 - B L AA2 M\nSODERGREN  S AA1 - D ER0 - G R EH0 N\nSODERHOLM  S OW1 - D ER0 - HH OW0 L M\nSODERLUND  S AA1 - D ER0 - L AH0 N D\nSODERMAN  S OW1 - D ER0 - M AH0 N\nSODERQUIST  S AA1 - D ER0 - K W IH0 S T\nSODERSTROM  S AA1 - D ER0 S - T R AH0 M\nSODITIC  S OW0 - D IH1 - T IH0 K\nSODIUM  S OW1 - D IY0 - AH0 M\nSODOM  S AA1 - D AH0 M\nSODOMIZE  S AH1 - D AH0 - M AY0 Z\nSODOMIZED  S AA1 - D AH0 - M AY0 Z D\nSODOMIZED(2)  S AH1 - D AH0 - M AY0 Z D\nSODOMY  S AA1 - D AH0 - M IY0\nSODUS  S OW1 - D AH0 S\nSOEDER  S OW1 - D ER0\nSOENS  S OW1 N Z\nSOERENSEN  S AO1 - R AH0 N - S AH0 N\nSOFA  S OW1 - F AH0\nSOFAER  S OW0 - F EY1 R\nSOFAMOR  S OW1 - F AH0 - M AO2 R\nSOFAS  S OW1 - F AH0 Z\nSOFER  S OW1 - F ER0\nSOFER'S  S OW1 - F ER0 Z\nSOFFEL  S AO1 - F AH0 L\nSOFFER  S AO1 - F ER0\nSOFIA  S OW0 - F IY1 - AH0\nSOFIA'S  S OW0 - F IY1 - AH0 Z\nSOFIAN  S OW0 - F IY1 - AH0 N\nSOFIANS  S OW0 - F IY1 - AH0 N Z\nSOFIE  S AA1 - F IY0\nSOFRANKO  S AH0 - F R AE1 NG - K OW0\nSOFT  S AA1 F T\nSOFT(2)  S AO1 F T\nSOFTBALL  S AO1 F T - B AO2 L\nSOFTBALL(2)  S AO1 F - B AO2 L\nSOFTBALLS  S AO1 F T - B AO2 L Z\nSOFTBALLS(2)  S AO1 F - B AO2 L Z\nSOFTBANK  S AO1 F T - B AE2 NG K\nSOFTDRINK  S AO1 F T - D R IH2 NG K\nSOFTECH  S AO1 F - T EH2 K\nSOFTEN  S AA1 - F AH0 N\nSOFTEN(2)  S AO1 - F AH0 N\nSOFTENED  S AO1 - F AH0 N D\nSOFTENER  S AO1 - F AH0 N - ER0\nSOFTENING  S AO1 - F AH0 N - IH0 NG\nSOFTENING(2)  S AO1 F - N IH0 NG\nSOFTENS  S AO1 - F AH0 N Z\nSOFTER  S AA1 F - T ER0\nSOFTER(2)  S AO1 F - T ER0\nSOFTEST  S AO1 F - T AH0 S T\nSOFTIMAGE  S AO1 F - T IH2 - M IH0 JH\nSOFTKEY  S AA1 F T - K EY2\nSOFTLETTER  S AO1 F T - L EH2 - T ER0\nSOFTLY  S AO1 F T - L IY0\nSOFTLY(2)  S AO1 F - L IY0\nSOFTNESS  S AO1 F T - N AH0 S\nSOFTNESS(2)  S AO1 F - N AH0 S\nSOFTSOAP  S AO1 F T - S OW2 P\nSOFTSOAP(2)  S AO1 F - S OW2 P\nSOFTSPOKEN  S AO1 F T - S P OW1 - K AH0 N\nSOFTSPOKEN(2)  S AO1 F - S P OW1 - K AH0 N\nSOFTWARE  S AO1 F T - W EH2 R\nSOFTWARE'S  S AO1 F T - W EH2 R Z\nSOFTWARE'S(2)  S AO1 F - W EH2 R Z\nSOFTWARE(2)  S AO1 F - W EH2 R\nSOFTWOOD  S AO1 F T - W UH2 D\nSOGANG  S OW1 - G AE0 NG\nSOGGY  S AA1 - G IY0\nSOGO  S OW1 - G OW0\nSOHIO  S OW0 - HH AY1 - OW0\nSOHL  S OW1 L\nSOHM  S OW1 M\nSOHMER  S OW1 - M ER0\nSOHN  S AA1 N\nSOHNS  S AA1 N Z\nSOHO  S OW1 - HH OW0\nSOIFER  S OY1 - F ER0\nSOIFFER  S OY1 - F ER0\nSOIL  S OY1 L\nSOIL'S  S OY1 L Z\nSOILEAU  S OY2 - L OW1\nSOILED  S OY1 L D\nSOILS  S OY1 L Z\nSOIR  S OY1 R\nSOIREE  S W AA0 - R EY1\nSOISSON  S OY1 Z - S AH0 N\nSOJA  S OW1 - JH AH0\nSOJKA  S OY1 - K AH0\nSOJOURN  S OW1 - JH ER0 N\nSOK  S AA1 K\nSOKAIYA  S AH0 - K AY1 - Y AH0\nSOKOL  S OW1 - K AH0 L\nSOKOLIK  S AH0 - K OW1 - L IH0 K\nSOKOLIN  S AA1 - K AH0 - L IH0 N\nSOKOLOFF  S AA1 - K AH0 - L AO0 F\nSOKOLOSKI  S AH0 - K AH0 - L AW1 S - K IY0\nSOKOLOV  S AA1 - K AH0 - L AA0 V\nSOKOLOW  S AA1 - K AH0 - L OW0\nSOKOLOW'S  S AA1 - K AH0 - L OW2 Z\nSOKOLOWSKI  S AH0 - K AH0 - L AO1 F S - K IY0\nSOL  S AA1 L\nSOL(2)  S OW1 L\nSOLA  S OW1 - L AH0\nSOLACE  S AA1 - L AH0 S\nSOLACE(2)  S OW1 - L IH0 S\nSOLAK  S OW1 - L AH0 K\nSOLAMAN  S AA1 - L AH0 - M AH0 N\nSOLAN  S OW1 - L AH0 N\nSOLANA  S OW0 - L AE1 - N AH0\nSOLAND  S AA1 - L AH0 N D\nSOLANGI  S OW0 - L AA1 N - JH IY0\nSOLANO  S OW0 - L AA1 - N OW0\nSOLAR  S OW1 - L ER0\nSOLARES  S OW0 - L AA1 - R EH0 S\nSOLARI  S OW0 - L AA1 - R IY0\nSOLARIS  S OW0 - L EH1 - R IH0 S\nSOLARZ  S OW1 - L AA0 R Z\nSOLAZZO  S OW0 - L AA1 - Z OW0\nSOLBERG  S OW1 L - B ER0 G\nSOLCHAGA  S OW0 L - CH AA1 - G AH0\nSOLD  S OW1 L D\nSOLDAN  S OW1 L - D AH0 N\nSOLDANO  S OW0 L - D AA1 - N OW0\nSOLDER  S AA1 - D ER0\nSOLDERING  S AA1 - D ER0 - IH0 NG\nSOLDIER  S OW1 L - JH ER0\nSOLDIER'S  S OW1 L - JH ER0 Z\nSOLDIERING  S OW1 L - JH ER0 - IH0 NG\nSOLDIERS  S OW1 L - JH ER0 Z\nSOLDIERS'  S OW1 L - JH ER0 Z\nSOLDNER  S OW1 L D - N ER0\nSOLDO  S OW1 L - D OW0\nSOLE  S OW1 L\nSOLECKI  S AH0 - L EH1 T S - K IY0\nSOLEDAD  S OW1 L - D AE2 D\nSOLEIL  S OW0 - L AY1 L\nSOLELY  S OW1 L - L IY0\nSOLEM  S OW1 - L IH0 M\nSOLEMN  S AA1 - L AH0 M\nSOLEMNITY  S AH0 - L EH1 M - N AH0 - T IY0\nSOLEMNLY  S AO1 - L AH0 M - L IY0\nSOLER  S OW1 - L ER0\nSOLERI  S OW0 - L EH1 - R IY0\nSOLES  S OW1 L Z\nSOLESBEE  S OW1 L Z - B IY2\nSOLEY  S OW1 - L IY0\nSOLHEIM  S OW1 L - HH AY2 M\nSOLI  S OW1 - L IY2\nSOLICIT  S AH0 - L IH1 - S IH0 T\nSOLICITATION  S AH0 - L IH2 - S IH0 - T EY1 - SH AH0 N\nSOLICITATIONS  S AH0 - L IH2 - S IH0 - T EY1 - SH AH0 N Z\nSOLICITED  S AH0 - L IH1 - S IH0 - T IH0 D\nSOLICITING  S AH0 - L IH1 - S AH0 - T IH0 NG\nSOLICITOR  S AH0 - L IH1 - S AH0 - T ER0\nSOLICITORS  S AH0 - L IH1 - S AH0 - T ER0 Z\nSOLICITOUS  S AH0 - L IH1 - S AH0 - T AH0 S\nSOLICITS  S AH0 - L IH1 - S AH0 T S\nSOLICITUDE  S AH0 - L IH1 - S IH0 - T UW2 D\nSOLID  S AA1 - L AH0 D\nSOLID-STATE  S AA1 - L AH0 D - S T EY1 T\nSOLIDARITY  S AA2 - L AH0 - D EH1 - R AH0 - T IY0\nSOLIDARITY'S  S AA2 - L AH0 - D EH1 - R AH0 - T IY0 Z\nSOLIDAY  S OW1 - L IY0 - D EY0\nSOLIDERS  S AA1 - L IH0 - D ER0 Z\nSOLIDIFIED  S AH0 - L IH1 - D AH0 - F AY2 D\nSOLIDIFIES  S AH0 - L IH1 - D AH0 - F AY2 Z\nSOLIDIFY  S AH0 - L IH1 - D AH0 - F AY2\nSOLIDIFYING  S AH0 - L IH1 - D AH0 - F AY2 - IH0 NG\nSOLIDITY  S AH0 - L IH1 - D AH0 - T IY0\nSOLIDLY  S AA1 - L AH0 D - L IY0\nSOLIDS  S AA1 - L AH0 D Z\nSOLIE  S OW1 - L IY0\nSOLILOQUIZE  S AH0 - L IH1 - L AH0 - K W AY2 Z\nSOLILOQUY  S AH0 - L IH1 - L AH0 - K W IY0\nSOLIMAN  S AA1 - L IH0 - M AH0 N\nSOLIMAN'S  S AA1 - L IH0 - M AH0 N Z\nSOLIMINE  S OW0 - L IY0 - M IY1 - N IY0\nSOLIMON  S OW1 - L IH0 - M AH0 N\nSOLIN  S OW1 - L IH0 N\nSOLINGEN  S OW1 - L IH0 NG - G EH0 N\nSOLINGEN(2)  S AA1 - L IH0 NG - G EH0 N\nSOLINGER  S OW1 - L IH0 - NG ER0\nSOLIS  S OW1 - L IH0 S\nSOLITA  S OW0 - L IY1 - T AH0\nSOLITAIRE  S AA2 - L AH0 - T EH1 R\nSOLITARINESS  S AA0 - L AH0 - T EH1 - R IY0 - N IH0 S\nSOLITARY  S AA1 - L AH0 - T EH2 - R IY0\nSOLITEC  S AA1 - L IH0 - T EH2 K\nSOLITRON  S OW1 - L IH0 - T R AA0 N\nSOLITUDE  S AA1 - L AH0 - T UW2 D\nSOLIZ  S OW1 - L IY0 Z\nSOLL  S AA1 L\nSOLLARS  S AA1 - L ER0 Z\nSOLLENBERGER  S AA1 - L AH0 N - B ER0 - G ER0\nSOLLER  S AA1 - L ER0\nSOLLERS  S AA1 - L ER0 Z\nSOLLEY  S AA1 - L IY0\nSOLLIDAY  S AA1 - L IY0 - D EY0\nSOLLIE  S AA1 - L IY0\nSOLLINGER  S AA1 - L IH0 - NG ER0\nSOLLISH  S AA1 - L IH0 SH\nSOLLOWAY  S AA1 - L OW0 - W EY2\nSOLLY  S AA1 - L IY0\nSOLO  S OW1 - L OW2\nSOLODAR  S AA1 - L AH0 - D ER0\nSOLOFF  S AA1 - L AO0 F\nSOLOIST  S OW1 - L OW2 - AH0 S T\nSOLOIST(2)  S OW1 - L OW2 - IH0 S T\nSOLOISTS  S OW1 - L OW2 - AH0 S T S\nSOLOISTS(2)  S OW1 - L OW2 - AH0 S S\nSOLOISTS(3)  S OW1 - L OW2 - AH0 S\nSOLOMAN  S OW0 - L OW0 - M AE1 N\nSOLOMON  S AA1 - L AH0 - M AH0 N\nSOLOMON'S  S AA1 - L AH0 - M AH0 N Z\nSOLOMOS  S AA1 - L AH0 - M OW0 S\nSOLON  S OW1 - L AH0 N\nSOLORIO  S OW0 - L AO1 - R IY0 - OW0\nSOLORZANO  S OW0 - L AO0 R - Z AA1 - N OW0\nSOLOS  S OW1 - L OW0 Z\nSOLOVIEV  S AA1 - L OW0 - V IY2 V\nSOLOW  S AA1 - L OW0\nSOLOWAY  S OW1 - L OW0 - W EY2\nSOLSTICE  S AO1 L - S T IH0 S\nSOLSTICES  S AO1 L - S T IH0 - S IH0 S\nSOLT  S OW1 L T\nSOLTAU  S OW1 L - T AW0\nSOLTERO  S OW0 L - T EH1 - R OW0\nSOLTES  S OW1 L T S\nSOLTESZ  S OW1 L - T IH0 SH\nSOLTI  S OW1 L - T IY0\nSOLTIS  S OW1 L - T IH0 S\nSOLTYS  S OW1 L - T IY0 Z\nSOLTYSIAK  S OW0 L - T IH1 - S IY0 - AE0 K\nSOLUBLE  S AA1 - L Y AH0 - B AH0 L\nSOLUM  S OW1 - L AH0 M\nSOLUTION  S AH0 - L UW1 - SH AH0 N\nSOLUTIONS  S AH0 - L UW1 - SH AH0 N Z\nSOLVABLE  S AA1 L - V AH0 - B AH0 L\nSOLVAY  S OW1 L - V EY0\nSOLVE  S AA1 L V\nSOLVED  S AA1 L V D\nSOLVENCY  S AO1 L - V AH0 N - S IY0\nSOLVENT  S AA1 L - V AH0 N T\nSOLVENTS  S AO1 L - V AH0 N T S\nSOLVER  S AA1 L - V ER0\nSOLVERS  S AA1 L - V ER0 Z\nSOLVES  S AA1 L V Z\nSOLVIG  S OW1 L - V IH0 G\nSOLVING  S AA1 L - V IH0 NG\nSOLWIN  S OW1 L - W IH2 N\nSOLWIN'S  S OW1 L - W IH2 N Z\nSOLZHENITSYN  S OW2 L - Z AH0 - N IH1 T - S IH2 N\nSOM  S AA1 M\nSOMA  S OW1 - M AH0\nSOMALI  S AH0 - M AA1 - L IY0\nSOMALIA  S AH0 - M AA1 - L IY0 - AH0\nSOMALIA'S  S AH0 - M AA1 - L IY0 - AH0 Z\nSOMALIA'S(2)  S AH0 - M AA1 - L Y AH0 Z\nSOMALIA(2)  S AH0 - M AA1 - L Y AH0\nSOMALIAN  S AH0 - M AA1 - L Y AH0 N\nSOMALIANS  S AH0 - M AA1 - L Y AH0 N Z\nSOMALIAS  S AH0 - M AA1 - L IY0 - AH0 Z\nSOMALIAS(2)  S AH0 - M AA1 - L Y AH0 Z\nSOMALILAND  S AH0 - M AA1 - L IY0 - L AE2 N D\nSOMALIS  S AH0 - M AA1 - L IY0 Z\nSOMATOGEN  S OW2 - M AE1 - T AH0 - JH EH0 N\nSOMATOTROPIN  S OW2 - M AH0 - T AA1 - T R AH0 - P IH0 N\nSOMBER  S AA1 M - B ER0\nSOMBERLY  S AA1 M - B ER0 - L IY0\nSOMBRERO  S AA0 M - B R EH1 - R OW0\nSOME  S AH1 M\nSOMEBODY  S AH1 M - B AA2 - D IY0\nSOMEBODY'S  S AH1 M - B AA2 - D IY0\nSOMEBODY'S(2)  S AH1 M - B AH0 - D IY0\nSOMEBODY(2)  S AH1 M - B AH0 - D IY0\nSOMEDAY  S AH1 M - D EY2\nSOMEHOW  S AH1 M - HH AW2\nSOMEONE  S AH1 M - W AH2 N\nSOMEONE'S  S AH1 M - W AH2 N Z\nSOMEPLACE  S AH1 M - P L EY2 S\nSOMER  S AH1 - M ER0\nSOMERS  S AH1 - M ER0 Z\nSOMERSAULT  S AH1 - M ER0 - S AO2 L T\nSOMERSAULTING  S AH1 - M ER0 - S AO2 L - T IH0 NG\nSOMERSAULTS  S AH1 - M ER0 - S AO2 L T S\nSOMERSET  S AH1 - M ER0 - S EH2 T\nSOMERTON  S AH1 - M ER0 - T AH0 N\nSOMERVILLE  S AH1 - M ER0 - V IH2 L\nSOMES  S AH1 M Z\nSOMESH  S OW2 - M EH1 SH\nSOMETHIN'  S AH1 M - TH IH0 N\nSOMETHING  S AH1 M - TH IH0 NG\nSOMETHING'S  S AH1 M - TH IH0 NG Z\nSOMETHINGS  S AH1 M - TH IH2 NG Z\nSOMETIME  S AH1 M - T AY2 M\nSOMETIMES  S AH0 M - T AY1 M Z\nSOMETIMES(2)  S AH1 M - T AY2 M Z\nSOMEWHAT  S AH1 M - W AH1 T\nSOMEWHAT(2)  S AH1 M - HH W AH1 T\nSOMEWHERE  S AH1 M - W EH2 R\nSOMEWHERE(2)  S AH1 M - HH W EH2 R\nSOMEWHERES  S AH1 M - W EH2 R Z\nSOMEWHERES(2)  S AH1 M - W EH2 R Z\nSOMMA  S AA1 - M AH0\nSOMMER  S AH1 - M ER0\nSOMMERFELD  S AA1 - M ER0 - F EH0 L D\nSOMMERFELDT  S AA1 - M ER0 - F IH0 L T\nSOMMERFIELD  S AH0 - M ER1 - F IY0 L D\nSOMMERS  S AH1 - M ER0 R Z\nSOMMERSBY  S AH1 - M ER0 R Z - B IY0\nSOMMERVILLE  S AA1 - M ER0 - V IH0 L\nSOMNOLENT  S AA1 M - N AH0 - L AH0 N T\nSOMOGYI  S OW0 - M OW1 - G Y IY0\nSOMOZA  S AH0 - M OW1 - Z AH0\nSON  S AH1 N\nSON'S  S AH1 N Z\nSONAR  S OW1 - N AA0 R\nSONAT  S AA1 - N AH0 T\nSONATA  S AH0 - N AA1 - T AH0\nSONATAS  S AA2 - N AA1 - T AH0 Z\nSONATRACH  S AA1 - N AH0 - T R AE0 K\nSONCHEZ  S AA1 N - CH EH0 Z\nSONDAG  S AA1 N - D AH0 G\nSONDERMAN  S AA1 N - D ER0 - M AH0 N\nSONDGEROTH  S AA1 N - JH ER0 - AA0 TH\nSONDHEIM  S AA1 N D - HH AY2 M\nSONDHEIM'S  S AA1 N D - HH AY2 M Z\nSONDHEIMER  S AA1 N D - HH AY2 - M ER0\nSONDRA  S AA1 N - D R AH0\nSONES  S OW1 N Z\nSONESTA  S AH0 - N EH1 - S T AH0\nSONET  S OW1 - N AH0 T\nSONEX  S OW1 - N AH0 K S\nSONG  S AO1 NG\nSONG'S  S AO1 NG Z\nSONGBIRD  S AO1 NG - B ER2 D\nSONGBIRDS  S AO1 NG - B ER2 D Z\nSONGER  S AO1 NG - ER0\nSONGS  S AO1 NG Z\nSONGWRITER  S AO1 NG - R AY2 - T ER0\nSONGWRITERS  S AO1 NG - R AY2 - T ER0 Z\nSONGWRITING  S AO1 NG - R AY2 - T IH0 NG\nSONGY  S AA1 N - JH IY0\nSONI  S OW1 - N IY0\nSONIA  S OW1 - N Y AH0\nSONIC  S AA1 - N IH0 K\nSONICS  S AA1 - N IH0 K S\nSONIER  S OW1 - N IY0 - ER0\nSONJA  S OW1 - N Y AH0\nSONJI  S AO1 N - JH IY0\nSONN  S AA1 N\nSONNE  S AA1 N\nSONNEBORN  S AA1 - N IH0 - B AO0 R N\nSONNEN  S AA1 - N AH0 N\nSONNENBERG  S AA1 - N AH0 N - B ER0 G\nSONNENBLICK  S AH0 - N EH1 N - B L IH0 K\nSONNENBURG  S AA1 - N AH0 N - B ER0 G\nSONNENFELD  S AA1 - N IH0 N - F EH0 L D\nSONNENSCHEIN  S AA1 - N IH0 N - SH AY0 N\nSONNER  S AA1 - N ER0\nSONNET  S AA1 - N IH0 T\nSONNETS  S AA1 - N IH0 T S\nSONNETT  S AA1 - N AH0 T\nSONNIER  S AH1 - N IY0 - ER0\nSONNTAG  S AA1 N - T AH0 G\nSONNY  S AH1 - N IY0\nSONNY'S  S AH1 - N IY0 Z\nSONOCO  S AH0 - N OW1 - K OW0\nSONODA  S OW0 - N OW1 - D AH0\nSONOGRAM  S AO1 - N AH0 - G R AE2 M\nSONOGRAMS  S AO1 - N AH0 - G R AE2 M Z\nSONOMA  S AH0 - N OW1 - M AH0\nSONORA  S AH0 - N AO1 - R AH0\nSONOROUS  S AA1 - N ER0 - AH0 S\nSONRISE  S AH1 N - R AY2 Z\nSONS  S AH1 N Z\nSONS'  S AA1 N Z\nSONTAG  S AA1 N - T AE2 G\nSONUM  S AA1 - N AH0 M\nSONY  S OW1 - N IY0\nSONY'S  S OW1 - N IY0 Z\nSONYA  S OW1 - N Y AH0\nSOO  S UW1\nSOOD  S UW1 D\nSOOHOO  S UW1 - HH UW2\nSOON  S UW1 N\nSOONER  S UW1 - N ER0\nSOONER'S  S UW1 - N ER0 Z\nSOONERS  S UW1 - N ER0 Z\nSOONEST  S UW1 - N AH0 S T\nSOONG  S UW1 NG\nSOOS  S UW1 Z\nSOOT  S UH1 T\nSOOTER  S UH1 - T ER0\nSOOTHE  S UW1 DH\nSOOTHED  S UW1 DH D\nSOOTHES  S UW1 DH Z\nSOOTHING  S UW1 - DH IH0 NG\nSOOTHINGLY  S UW1 - DH IH0 NG - L IY0\nSOOTHSAYER  S UW2 TH - S EY1 - ER0\nSOOTHSAYERS  S UW2 TH - S EY1 - ER0 Z\nSOOTS  S UH1 T S\nSOOTY  S UW1 - T IY0\nSOOY  S UW1 - IY0\nSOP  S AA1 P\nSOPE  S OW1 P\nSOPER  S OW1 - P ER0\nSOPHER  S AA1 - F ER0\nSOPHIA  S OW0 - F IY1 - AH0\nSOPHIA(2)  S OW1 - F IY0 - AH0\nSOPHIE  S OW1 - F IY0\nSOPHIE'S  S OW1 - F IY0 Z\nSOPHISTICATE  S AH0 - F IH1 - S T AH0 - K EY2 T\nSOPHISTICATE(2)  S AH0 - F IH1 - S T AH0 - K AH0 T\nSOPHISTICATED  S AH0 - F IH1 - S T AH0 - K EY2 - T IH0 D\nSOPHISTICATED(2)  S AH0 - F IH1 - S T IH0 - K EY2 - T AH0 D\nSOPHISTICATES  S AH0 - F IH1 - S T AH0 - K IH2 T S\nSOPHISTICATION  S AH0 - F IH2 - S T AH0 - K EY1 - SH AH0 N\nSOPHOCLES  S AA1 - F AH0 - K L IY0 Z\nSOPHOMORE  S AA1 F - M AO2 R\nSOPHOMORES  S AA1 F - M AO2 R Z\nSOPHOMORIC  S AA2 - F OW0 - M AA1 - R IH0 K\nSOPHRONIA  S OW0 - F R OW1 - N IY0 - AH0\nSOPHY  S OW1 - F IY0\nSOPKO  S OW1 P - K OW0\nSOPP  S AA1 P\nSOPPING  S AA1 - P IH0 NG\nSOPRANO  S AH0 - P R AA1 - N OW0\nSOPRANO(2)  S AH0 - P R AE1 - N OW0\nSOPRANOS  S AH0 - P R AE1 - N OW0 Z\nSOPS  S AA1 P S\nSOQUIP  S OW1 - K W IH0 P\nSOR  S AO1 R\nSORANNO  S AO0 - R AA1 - N OW0\nSORBELLO  S AO2 R - B EH1 - L OW0\nSORBER  S AO1 R - B ER0\nSORBET  S AO2 R - B EY1\nSORBET(2)  S AO1 R - B EH0 T\nSORBO  S AO1 R - B OW0\nSORBONNE  S AO0 R - B AA1 N\nSORBUS  S AO1 R - B AH0 S\nSORCE  S AO1 R S\nSORCERER  S AO1 R - S ER0 - ER0\nSORCERERS  S AO1 R - S ER0 - ER0 Z\nSORCERY  S AO1 R - S ER0 - IY0\nSORCHA  S AO1 R - K AH0\nSORCI  S AO1 R - CH IY0\nSORDID  S AO1 R - D AH0 D\nSORDONI  S AO0 R - D OW1 - N IY0\nSORE  S AO1 R\nSOREL  S AO1 - R AH0 L\nSORELL  S AO1 - R AH0 L\nSORELY  S AO1 R - L IY0\nSORENSEN  S AO1 - R IH0 N - S AH0 N\nSORENSON  S AO1 - R AH0 N - S AH0 N\nSORENTO  S ER0 - EH1 N - T OW0\nSORENTO'S  S ER0 - EH1 N - T OW0 Z\nSORES  S AO1 R Z\nSOREY  S AO1 - R IY0\nSORG  S AO1 R G\nSORGE  S AO1 R JH\nSORGEN  S AO1 R - G AH0 N\nSORGHUM  S AO1 R - G AH0 M\nSORIA  S AO1 - R IY0 - AH0\nSORIANO  S AO0 - R IY0 - AA1 - N OW0\nSORICE  S AO1 - R IH0 S\nSORKIN  S AO1 R - K IH0 N\nSORKOW  S AO1 R - K AW2\nSORLIE  S AO1 R - L IY0\nSOROKA  S AO0 - R OW1 - K AH0\nSORORITIES  S ER0 - AO1 - R AH0 - T IY0 Z\nSORORITY  S ER0 - AO1 - R AH0 - T IY0\nSOROS  S AO1 - R OW0 S\nSOROS'S  S AO1 - R OW0 - S IH0 Z\nSOROVSKI  S AO0 - R AO1 V S - K IY0\nSOROVSKI'S  S AO0 - R AO1 V - S K IY0 Z\nSORPASSO  S AO0 R - P AA1 - S OW0\nSORREL  S AO1 - R AH0 L\nSORRELL  S AO1 - R AH0 L\nSORRELL'S  S AO1 - R AH0 L Z\nSORRELLS  S AO1 - R AH0 L Z\nSORRELS  S AO1 - R AH0 L Z\nSORRENTI  S AO0 - R EH1 N - T IY0\nSORROW  S AA1 - R OW0\nSORROWFUL  S AA1 - R OW0 - F AH0 L\nSORROWS  S AA1 - R OW0 Z\nSORRY  S AA1 - R IY0\nSORT  S AO1 R T\nSORTED  S AO1 R - T IH0 D\nSORTER  S AO1 R - T ER0\nSORTERS  S AO1 R - T ER0 Z\nSORTIE  S AO1 R - T IY0\nSORTIES  S AO1 R - T IY0 Z\nSORTING  S AO1 R - T IH0 NG\nSORTINO  S AO0 R - T IY1 - N OW0\nSORTOR  S AO1 R - T ER0\nSORTS  S AO1 R T S\nSORUM  S AO1 - R AH0 M\nSORUS  S AO1 - R AH0 S\nSORVINO  S AO0 R - V IY1 - N OW0\nSOSA  S OW1 - S AH0\nSOSEBEE  S AA1 - S IH0 - B IY0\nSOSHI  S OW1 - SH IY0\nSOSIN  S OW1 - S IH2 N\nSOSINSKI  S AH0 - S IH1 N - S K IY0\nSOSKIN  S AA1 - S K IH0 N\nSOSNA  S OW1 S - N AH0\nSOSNOFF  S AO1 S - N AO0 F\nSOSNOFF'S  S AO1 S - N AO0 F S\nSOSNOWSKI  S AH0 S - N AO1 F S - K IY0\nSOSS  S AO1 S\nSOSSAMON  S OW0 - S AA0 - M AO1 N\nSOSUKE  S OW0 - S UW1 - K EY2\nSOTAK  S OW1 - T AH0 K\nSOTELLO  S OW0 - T EH1 - L OW0\nSOTELO  S OW0 - T EH1 - L OW0\nSOTER  S OW1 - T ER0\nSOTHEBY  S AA1 - TH AH0 - B IY0\nSOTHEBY'S  S AA1 - TH AH0 - B IY0 Z\nSOTO  S OW1 - T OW0\nSOTOLONGO  S OW0 - T OW0 - L OW1 NG - G OW0\nSOTOMAYOR  S OW0 - T OW0 - M EY0 - AO1 R\nSOTTI  S OW1 - T IY0\nSOTTILE  S OW1 - T AH0 L\nSOUCCAR  S UW1 - K AA2 R\nSOUCEK  S OW1 - S IH0 K\nSOUCIE  S OW1 - K IY0\nSOUCY  S OW1 - S IY0\nSOUDER  S AW1 - D ER0\nSOUDERS  S AW1 - D ER0 Z\nSOUERS  S AW1 - ER0 Z\nSOUFFLE  S UW0 F - L EY1\nSOUGHT  S AO1 T\nSOUK  S UW1 K\nSOUKUP  S AW1 K - AH0 P\nSOUL  S OW1 L\nSOULE  S AW1 L\nSOULES  S UW1 L Z\nSOULFUL  S OW1 L - F AH0 L\nSOULIER  S UW1 - L IY0 - ER0\nSOULJAH  S UW1 L - JH AH0\nSOULLESS  S OW1 L - L AH0 S\nSOULLIERE  S UW1 - L IY0 - EH0 R\nSOULS  S OW1 L Z\nSOUND  S AW1 N D\nSOUND'S  S AW1 N D Z\nSOUNDBITE  S AW1 N D - B AY2 T\nSOUNDBITES  S AW1 N D - B AY2 T S\nSOUNDED  S AW1 N - D AH0 D\nSOUNDED(2)  S AW1 N - D IH0 D\nSOUNDER  S AW1 N - D ER0\nSOUNDEST  S AW1 N - D AH0 S T\nSOUNDING  S AW1 N - D IH0 NG\nSOUNDINGS  S AW1 N - D IH0 NG Z\nSOUNDLY  S AW1 N D - L IY0\nSOUNDNESS  S AW1 N D - N AH0 S\nSOUNDS  S AW1 N D Z\nSOUNDS(2)  S AW1 N Z\nSOUNDSCAN  S AW1 N D - S K AE2 N\nSOUNDTRACK  S AW1 N D - T R AE2 K\nSOUNDTRACK(2)  S AW1 N - T R AE2 K\nSOUNDTRACKS  S AW1 N D - T R AE2 K S\nSOUNDTRACKS(2)  S AW1 N - T R AE2 K S\nSOUNDVIEW  S AW1 N D - V Y UW2\nSOUP  S UW1 P\nSOUP'S  S UW1 P S\nSOUPED  S UW1 P T\nSOUPS  S UW1 P S\nSOUPY  S UW1 - P IY0\nSOUR  S AW1 - ER0\nSOUR(2)  S AW1 R\nSOURBY  S AW1 R - B IY0\nSOURCE  S AO1 R S\nSOURCEBOOK  S AO1 R S - B UH2 K\nSOURCES  S AO1 R - S AH0 Z\nSOURCES'  S AO1 R - S AH0 Z\nSOURCING  S AO1 R - S IH0 NG\nSOURED  S AW1 - ER0 D\nSOURING  S AW1 - ER0 - IH0 NG\nSOURIS  S UW1 - R IH0 S\nSOURROUILLE  S AO0 - R UW1 - IY0\nSOURS  S AW1 - ER0 Z\nSOURS(2)  S AW1 R Z\nSOUS  S UW1 Z\nSOUSA  S UW1 - Z AH0\nSOUSA'S  S UW1 - Z AH0 Z\nSOUSAPHONE  S UW1 - Z AH0 - F OW2 N\nSOUSLEY  S AW1 S - L IY0\nSOUTAR  S UW0 - T AA1 R\nSOUTER  S UW1 - T ER0\nSOUTER(2)  S AW1 - T ER0\nSOUTH  S AW1 TH\nSOUTH'S  S AW1 TH S\nSOUTHALL  S AW1 - TH AH0 L\nSOUTHAM  S AW1 - TH AH0 M\nSOUTHAMPTON  S AW0 TH - HH AE1 M P - T AH0 N\nSOUTHARD  S AW1 - TH ER0 D\nSOUTHBOUND  S AW1 TH - B AW2 N D\nSOUTHDOWN  S AW1 TH - D AW2 N\nSOUTHDOWN'S  S AW1 TH - D AW2 N Z\nSOUTHEAST  S AW2 TH - IY1 S T\nSOUTHEAST'S  S AW2 TH - IY1 S T S\nSOUTHEASTERN  S AW2 TH - IY1 - S T ER0 N\nSOUTHEASTERN'S  S AW2 TH - IY1 - S T ER0 N Z\nSOUTHER  S AH1 - DH ER0\nSOUTHERLAND  S AH1 - DH ER0 - L AH0 N D\nSOUTHERLY  S AH1 - DH ER0 - L IY0\nSOUTHERN  S AH1 - DH ER0 N\nSOUTHERN'S  S AH1 - DH ER0 N Z\nSOUTHERNER  S AH1 - DH ER0 - N ER0\nSOUTHERNERS  S AH1 - DH ER0 - N ER0 Z\nSOUTHERNMOST  S AH1 - DH ER0 N - M OW2 S T\nSOUTHERNNET  S AH1 - DH ER0 - N EH0 T\nSOUTHERNNET'S  S AH1 - DH ER0 - N EH0 T S\nSOUTHERS  S AH1 - DH ER0 Z\nSOUTHFIELD  S AW1 TH - F IY2 L D\nSOUTHGATE  S AW1 TH - G EY2 T\nSOUTHIN  S AW1 - TH IH2 N\nSOUTHLAND  S AW1 TH - L AE2 N D\nSOUTHLAND'S  S AW1 TH - L AE2 N D Z\nSOUTHLIFE  S AW1 TH - L AY2 F\nSOUTHMARK  S AW1 TH - M AA2 R K\nSOUTHMARK'S  S AW1 TH - M AA2 R K S\nSOUTHOLD  S AW1 TH - OW2 L D\nSOUTHPORT  S AW1 TH - P AO2 R T\nSOUTHS  S AW1 TH S\nSOUTHSIDE  S AW1 TH - S AY2 D\nSOUTHSTATE  S AW1 TH - S T EY2 T\nSOUTHWALL  S AW1 TH - W AO2 L\nSOUTHWARD  S AW1 TH - W ER0 D\nSOUTHWAY  S AW1 TH - W EY2\nSOUTHWELL  S AW1 TH - W EH2 L\nSOUTHWEST  S AW2 TH - W EH1 S T\nSOUTHWEST'S  S AW2 TH - W EH1 S T S\nSOUTHWESTERN  S AW2 TH - W EH1 - S T ER0 N\nSOUTHWICK  S AW1 TH - W IH0 K\nSOUTHWOOD  S AW1 TH - W UH2 D\nSOUTHWORTH  S AW1 TH - W ER0 TH\nSOUTO  S UW1 - T OW0\nSOUVENIR  S UW2 - V AH0 - N IH1 R\nSOUVENIRS  S UW2 - V AH0 - N IH1 R Z\nSOUVEROFF  S UW1 - V ER0 - AO0 F\nSOUZA  S UW1 - Z AH0\nSOUZAS  S UW1 - Z AH0 Z\nSOVA  S OW1 - V AH0\nSOVEREIGN  S AA1 - V R AH0 N\nSOVEREIGNS  S AA1 - V R AH0 N Z\nSOVEREIGNTY  S AA1 - V R AH0 N - T IY0\nSOVETSKAYA  S OW2 - V EH0 T - S K AY1 - AH0\nSOVEXPORTFILM  S OW2 - V EH2 K - S P AO0 R T - F IH1 L M\nSOVEY  S OW1 - V IY0\nSOVIET  S OW1 - V IY0 - AH0 T\nSOVIET'S  S OW1 - V IY0 - EH2 T S\nSOVIET(2)  S OW1 - V IY0 - EH2 T\nSOVIET-UNION  S OW1 - V IY0 - EH2 T - Y UW1 - N Y AH0 N\nSOVIETOLOGIST  S OW2 - V IY0 - AH0 - T AA1 - L AH0 - JH IH0 S T\nSOVIETOLOGISTS  S OW2 - V IY0 - AH0 - T AA1 - L AH0 - JH IH0 S T S\nSOVIETOLOGISTS(2)  S OW2 - V IY0 - AH0 - T AA1 - L AH0 - JH IH0 S S\nSOVIETOLOGISTS(3)  S OW2 - V IY0 - AH0 - T AA1 - L AH0 - JH IH0 S\nSOVIETS  S OW1 - V IY0 - EH2 T S\nSOVIETS'  S OW1 - V IY0 - EH2 T S\nSOVINE  S AA1 - V AY0 N\nSOVRAN  S AA1 - V R AH0 N\nSOVRAN'S  S AA1 - V R AH0 N Z\nSOVRANS  S AA1 - V R AH0 N Z\nSOW  S AW1\nSOW(2)  S OW1\nSOWA  S OW1 - AH0\nSOWARD  S OW1 - ER0 D\nSOWARDS  S OW1 - ER0 D Z\nSOWASH  S OW1 - AH0 SH\nSOWATA  S OW2 - AA1 - T AH0\nSOWATA'S  S OW2 - AA1 - T AH0 Z\nSOWDEN  S OW1 - D AH0 N\nSOWDER  S OW1 - D ER0\nSOWDERS  S OW1 - D ER0 Z\nSOWED  S AW1 D\nSOWED(2)  S OW1 D\nSOWELL  S AA1 - W EH0 L\nSOWER  S OW1 - ER0\nSOWERS  S OW1 - ER0 Z\nSOWETO  S OW0 - EY1 - T OW0\nSOWING  S OW1 - IH0 NG\nSOWINSKI  S OW0 - IH1 N - S K IY0\nSOWLE  S OW1 L\nSOWLES  S OW1 L Z\nSOWN  S OW1 N\nSOWS  S OW1 Z\nSOX  S AA1 K S\nSOX'S  S AA1 K - S IH0 Z\nSOY  S OY1\nSOYA  S OY1 - AH0\nSOYARS  S OY1 - ER0 Z\nSOYBEAN  S OY1 - B IY2 N\nSOYBEANS  S OY1 - B IY2 N Z\nSOYKA  S OY1 - K AH0\nSOYSAUCE  S OY1 - S AO2 S\nSOYUZ  S OY1 - AH0 Z\nSOYUZ(2)  S OY1 - UW2 Z\nSOZA  S OW1 - Z AH0\nSOZIO  S OW1 - Z IY0 - OW0\nSPA  S P AA1\nSPACE  S P EY1 S\nSPACEBALL  S P EY1 S - B AO2 L\nSPACEBALLS  S P EY1 S - B AO2 L Z\nSPACEBAND  S P EY1 S - B AE2 N D\nSPACEBANDS  S P EY1 S - B AE2 N D Z\nSPACECRAFT  S P EY1 S - K R AE2 F T\nSPACECRAFT'S  S P EY1 S - K R AE2 F T S\nSPACED  S P EY1 S T\nSPACEHAB  S P EY1 S - HH AE2 B\nSPACEK  S P AA1 - CH EH0 K\nSPACEK(2)  S P AA1 - S EH0 K\nSPACELINK  S P EY1 S - L IH2 NG K\nSPACENET  S P EY1 S - N EH2 T\nSPACEPORT  S P EY1 S - P AO2 R T\nSPACER  S P EY1 - S ER0\nSPACERS  S P EY1 - S ER0 Z\nSPACES  S P EY1 - S AH0 Z\nSPACES(2)  S P EY1 - S IH0 Z\nSPACESHIP  S P EY1 S - SH IH2 P\nSPACESHIPS  S P EY1 S - SH IH2 P S\nSPACESUIT  S P EY1 S - UW2 T\nSPACESUITS  S P EY1 S - UW2 T S\nSPACEWALK  S P EY1 S - W AA2 K\nSPACEWALKING  S P EY1 S - W AA2 - K IH0 NG\nSPACEWALKS  S P EY1 S - W AA2 K S\nSPACEY  S P EY1 - S IY0\nSPACING  S P EY1 - S IH0 NG\nSPACIOUS  S P EY1 - SH AH0 S\nSPACK  S P AE1 K\nSPACKMAN  S P AE1 K - M AH0 N\nSPADA  S P AA1 - D AH0\nSPADACCINI  S P AA0 - D AA0 - CH IY1 - N IY0\nSPADAFORA  S P AA0 - D AA0 - F AO1 - R AH0\nSPADAFORE  S P AA0 - D AO1 - F AO0 R\nSPADARO  S P AA0 - D AA1 - R OW0\nSPADE  S P EY1 D\nSPADER  S P EY1 - D ER0\nSPADES  S P EY1 D Z\nSPADEWORK  S P EY1 D - W ER2 K\nSPADONI  S P AA0 - D OW1 - N IY0\nSPADY  S P EY1 - D IY0\nSPAETH  S P IY1 TH\nSPAFFORD  S P AE1 - F ER0 D\nSPAGHETTI  S P AH0 - G EH1 - T IY0\nSPAGNA  S P AE1 G - N AH0\nSPAGNOLA  S P AA0 G - N OW1 - L AH0\nSPAGNOLI  S P AA0 G - N OW1 - L IY0\nSPAGNOLO  S P AA0 G - N OW1 - L OW0\nSPAGNUOLO  S P AA0 G - N Y UW0 - OW1 - L OW0\nSPAGO  S P EY1 - G OW0\nSPAHN  S P AA1 N\nSPAHR  S P AA1 R\nSPAID  S P EY1 D\nSPAIN  S P EY1 N\nSPAIN'S  S P EY1 N Z\nSPAINHOUR  S P AY1 - N AW0 R\nSPAINHOWER  S P AY1 N - HH OW0 - ER0\nSPAK  S P AE1 K\nSPAKE  S P EY1 K\nSPALDING  S P AO1 L - D IH0 NG\nSPALINK  S P EY1 - L IH2 NG K\nSPALINK(2)  S P AA1 - L IH2 NG K\nSPALL  S P AO1 L\nSPALLA  S P AE1 - L AH0\nSPALLONE  S P AE1 - L OW2 N\nSPALVINS  S P AE1 L - V IH0 N Z\nSPAM  S P AE1 M\nSPAMPINATO  S P AA0 M - P IY0 - N AA1 - T OW0\nSPAN  S P AE1 N\nSPAN'S  S P AE1 N Z\nSPANBAUER  S P AE1 N - B AW0 - ER0\nSPANDEX  S P AE1 N - D AH0 K S\nSPANG  S P AE1 NG\nSPANGENBERG  S P AE1 - NG AH0 N - B ER0 G\nSPANGLE  S P AE1 NG - G AH0 L\nSPANGLED  S P AE1 NG - G AH0 L D\nSPANGLER  S P AE1 NG - G AH0 - L ER0\nSPANGLER(2)  S P AE1 NG - G L ER0\nSPANIARD  S P AE1 - N Y ER0 D\nSPANIARDS  S P AE1 - N Y ER0 D Z\nSPANIEL  S P AE1 - N Y AH0 L\nSPANIER  S P AE1 - N Y ER0\nSPANIOL  S P AE1 - N Y AH0 L\nSPANISH  S P AE1 - N IH0 SH\nSPANK  S P AE1 NG K\nSPANKED  S P AE1 NG K T\nSPANKING  S P AE1 NG - K IH0 NG\nSPANKY  S P AE1 N - K IY0\nSPANN  S P AE1 N\nSPANNED  S P AE1 N D\nSPANNER  S P AE1 - N ER0\nSPANNING  S P AE1 - N IH0 NG\nSPANNINGER  S P AE1 - N IH0 - NG ER0\nSPANO  S P AA1 - N OW0\nSPANOS  S P EY1 - N OW0 Z\nSPANS  S P AE1 N Z\nSPANTON  S P AE1 N - T AH0 N\nSPAR  S P AA1 R\nSPARACINO  S P ER0 - AH0 - CH IY1 - N OW0\nSPARACIO  S P ER0 - EY1 - S IY0 - OW0\nSPARACO  S P ER0 - AE1 - K OW0\nSPARANO  S P ER0 - AE1 - N OW0\nSPARC  S P AA1 R K\nSPARE  S P EH1 R\nSPARED  S P EH1 R D\nSPARES  S P EH1 R Z\nSPARGER  S P AA1 R - JH ER0\nSPARGO  S P AA1 R - G OW0\nSPARGUR  S P AA1 R - G ER0\nSPARING  S P EH1 - R IH0 NG\nSPARINGLY  S P EH1 - R IH0 NG - L IY0\nSPARK  S P AA1 R K\nSPARKED  S P AA1 R K T\nSPARKES  S P AA1 R K S\nSPARKING  S P AA1 R - K IH0 NG\nSPARKLE  S P AA1 R - K AH0 L\nSPARKLED  S P AA1 R - K AH0 L D\nSPARKLES  S P AA1 R - K AH0 L Z\nSPARKLING  S P AA1 R - K L IH0 NG\nSPARKLING(2)  S P AA1 R - K AH0 L - IH0 NG\nSPARKLY  S P AA1 R K - L IY0\nSPARKMAN  S P AA1 R K - M AH0 N\nSPARKS  S P AA1 R K S\nSPARKY  S P AA1 R - K IY0\nSPARLIN  S P AA1 R - L IH0 N\nSPARLING  S P AA1 R - L IH0 NG\nSPARR  S P AE1 R\nSPARRED  S P AA1 R D\nSPARRING  S P AA1 - R IH0 NG\nSPARROW  S P EH1 - R OW0\nSPARROWS  S P EH1 - R OW0 Z\nSPARSE  S P AA1 R S\nSPARSELY  S P AA1 R S - L IY0\nSPARTA  S P AA1 R - T AH0\nSPARTACUS  S P AA1 R - T AH0 - K AH0 S\nSPARTAN  S P AA1 R - T AH0 N\nSPARTANBURG  S P AA1 R - T AH0 N - B ER0 G\nSPARTECH  S P AA1 R - T EH2 K\nSPARTZ  S P AA1 R T S\nSPAS  S P AA1 Z\nSPASM  S P AE1 - Z AH0 M\nSPASMS  S P AE1 - Z AH0 M Z\nSPASSO  S P AE1 - S OW0\nSPAT  S P AE1 T\nSPATAFORA  S P AA0 - T AA0 - F AO1 - R AH0\nSPATAFORE  S P AE1 - T AH0 - F AO2 R\nSPATARO  S P AA0 - T AA1 - R OW0\nSPATE  S P EY1 T\nSPATES  S P EY1 T S\nSPATH  S P AE1 TH\nSPATIAL  S P EY1 - SH AH0 L\nSPATOLA  S P AA0 - T OW1 - L AH0\nSPATS  S P AE1 T S\nSPATTER  S P AE1 - T ER0\nSPATTERED  S P AE1 - T ER0 D\nSPATTERING  S P AE1 - T ER0 - IH0 NG\nSPATTERS  S P AE1 - T ER0 Z\nSPATULA  S P AE1 - CH UH0 - L AH0\nSPATZ  S P AE1 T S\nSPAUGH  S P AO1\nSPAULDING  S P AO1 L - D IH0 NG\nSPAUR  S P AO1 R\nSPAVO  S P AA1 - V OW0\nSPAW  S P AO1\nSPAWN  S P AA1 N\nSPAWN(2)  S P AO1 N\nSPAWNED  S P AO1 N D\nSPAWNING  S P AA1 - N IH0 NG\nSPAWNING(2)  S P AO1 - N IH0 NG\nSPAWNS  S P AA1 N Z\nSPAWNS(2)  S P AO1 N Z\nSPAYD  S P EY1 D\nSPAYDE  S P EY1 D\nSPAZIANI  S P AA0 - Z IY0 - AA1 - N IY0\nSPEAGLE  S P IY1 - G AH0 L\nSPEAK  S P IY1 K\nSPEAKE  S P IY1 K\nSPEAKER  S P IY1 - K ER0\nSPEAKER'S  S P IY1 - K ER0 Z\nSPEAKERS  S P IY1 - K ER0 Z\nSPEAKERSHIP  S P IY1 - K ER0 - SH IH2 P\nSPEAKES  S P IY1 K S\nSPEAKES'S  S P IY1 K - S IH0 Z\nSPEAKING  S P IY1 - K IH0 NG\nSPEAKMAN  S P IY1 K - M AH0 N\nSPEAKS  S P IY1 K S\nSPEAR  S P IH1 R\nSPEARE  S P IY1 R\nSPEARHEAD  S P IH1 R - HH EH2 D\nSPEARHEADED  S P IH1 R - HH EH2 - D IH0 D\nSPEARHEADING  S P IH1 R - HH EH2 - D IH0 NG\nSPEARING  S P IH1 - R IH0 NG\nSPEARMAN  S P IH1 R - M AH0 N\nSPEARS  S P IH1 R Z\nSPEAS  S P IY1 Z\nSPEASE  S P IY1 Z\nSPEC  S P EH1 K\nSPECHT  S P EH1 K T\nSPECIAL  S P EH1 - SH AH0 L\nSPECIAL'S  S P EH1 - SH AH0 L Z\nSPECIALE  S P EH1 - CH AH0 - L IY0\nSPECIALIST  S P EH1 - SH AH0 - L AH0 S T\nSPECIALIST(2)  S P EH1 - SH AH0 - L IH0 S T\nSPECIALISTS  S P EH1 - SH AH0 - L AH0 S T S\nSPECIALISTS'  S P EH1 - SH AH0 - L IH0 S T S\nSPECIALISTS'(2)  S P EH1 - SH AH0 - L IH0 S S\nSPECIALISTS'(3)  S P EH1 - SH AH0 - L IH0 S\nSPECIALISTS(2)  S P EH1 - SH AH0 - L IH0 S T S\nSPECIALISTS(3)  S P EH1 - SH AH0 - L IH0 S S\nSPECIALISTS(4)  S P EH1 - SH AH0 - L IH0 S\nSPECIALITIES  S P EH1 - SH AH0 L - T IY0 Z\nSPECIALITY  S P EH2 - SH IY0 - AE1 - L IH0 - T IY0\nSPECIALIZATION  S P EH2 - SH AH0 - L AH0 - Z EY1 - SH AH0 N\nSPECIALIZE  S P EH1 - SH AH0 - L AY2 Z\nSPECIALIZED  S P EH1 - SH AH0 - L AY2 Z D\nSPECIALIZES  S P EH1 - SH AH0 - L AY2 - Z AH0 Z\nSPECIALIZES(2)  S P EH1 - SH AH0 - L AY2 - Z IH0 Z\nSPECIALIZING  S P EH1 - SH AH0 - L AY2 - Z IH0 NG\nSPECIALLY  S P EH1 - SH AH0 - L IY0\nSPECIALLY(2)  S P EH1 SH - L IY0\nSPECIALS  S P EH1 - SH AH0 L Z\nSPECIALTIES  S P EH1 - SH AH0 L - T IY0 Z\nSPECIALTY  S P EH1 - SH AH0 L - T IY0\nSPECIALTY(2)  S P EY1 - SH AH0 L - T IY0\nSPECIES  S P IY1 - SH IY0 Z\nSPECIES'  S P IY1 - SH IY0 Z\nSPECIFIC  S P AH0 - S IH1 - F IH0 K\nSPECIFIC(2)  S P IH0 - S IH1 - F IH0 K\nSPECIFICALLY  S P AH0 - S IH1 - F IH0 K - L IY0\nSPECIFICATION  S P EH2 - S IH0 - F IH0 - K EY1 - SH AH0 N\nSPECIFICATIONS  S P EH2 - S AH0 - F AH0 - K EY1 - SH AH0 N Z\nSPECIFICITY  S P EH2 - S AH0 - F IH1 - S AH0 - T IY0\nSPECIFICS  S P IH0 - S IH1 - F IH0 K S\nSPECIFIED  S P EH1 - S AH0 - F AY2 D\nSPECIFIES  S P EH1 - S AH0 - F AY2 Z\nSPECIFY  S P EH1 - S AH0 - F AY2\nSPECIFYING  S P EH1 - S AH0 - F AY2 - IH0 NG\nSPECIMEN  S P EH1 - S AH0 - M AH0 N\nSPECIMENS  S P EH1 - S AH0 - M AH0 N Z\nSPECIOUS  S P IY1 - SH AH0 S\nSPECK  S P EH1 K\nSPECKER  S P EH1 - K ER0\nSPECKLE  S P EH1 - K AH0 L\nSPECKLED  S P EH1 - K AH0 L D\nSPECKMAN  S P EH1 K - M AH0 N\nSPECKS  S P EH1 K S\nSPECS  S P EH1 K S\nSPECTACLE  S P EH1 K - T AH0 - K AH0 L\nSPECTACLES  S P EH1 K - T AH0 - K AH0 L Z\nSPECTACULAR  S P EH0 K - T AE1 - K Y AH0 - L ER0\nSPECTACULARLY  S P EH0 K - T AE1 - K Y AH0 - L ER0 - L IY0\nSPECTATOR  S P EH1 K - T EY0 - T ER0\nSPECTATORS  S P EH1 K - T EY0 - T ER0 Z\nSPECTER  S P EH1 K - T ER0\nSPECTER'S  S P EH1 K - T ER0 Z\nSPECTHRIE  S P EH1 K - TH R IY0\nSPECTOR  S P EH1 K - T ER0\nSPECTRA  S P EH1 K - T R AH0\nSPECTRA'S  S P EH1 K - T R AH0 Z\nSPECTRADYNE  S P EH1 K - T R AH0 - D AY2 N\nSPECTRAMED  S P EH1 K - T R AH0 M D\nSPECTRAMED(2)  S P EH1 K - T R AH0 - M EH2 D\nSPECTRAN  S P EH1 K - T R AE2 N\nSPECTRAVISION  S P EH1 K - T R AH0 - V IH2 - ZH AH0 N\nSPECTRE  S P EH1 K - T ER0\nSPECTROGRAPH  S P EH1 K - T R AH0 - G R AE2 F\nSPECTROMETER  S P EH0 K - T R AA1 - M AH0 - T ER0\nSPECTROMETRY  S P EH0 K - T R AA1 - M AH0 - T R IY0\nSPECTROSCOPY  S P EH0 K - T R AA1 - S K AH0 - P IY0\nSPECTRUM  S P EH1 K - T R AH0 M\nSPECTRUM'S  S P EH1 K - T R AH0 M Z\nSPECTRUMS  S P EH1 K - T R AH0 M Z\nSPECULATE  S P EH1 - K Y AH0 - L EY2 T\nSPECULATED  S P EH1 - K Y AH0 - L EY2 - T AH0 D\nSPECULATED(2)  S P EH1 - K Y AH0 - L EY2 - T IH0 D\nSPECULATES  S P EH1 - K Y AH0 - L EY2 T S\nSPECULATING  S P EH1 - K Y AH0 - L EY2 - T IH0 NG\nSPECULATION  S P EH2 - K Y AH0 - L EY1 - SH AH0 N\nSPECULATIONS  S P EH2 - K Y AH0 - L EY1 - SH AH0 N Z\nSPECULATIVE  S P EH1 - K Y AH0 - L AH0 - T IH0 V\nSPECULATOR  S P EH1 - K Y AH0 - L EY2 - T ER0\nSPECULATORS  S P EH1 - K Y AH0 - L EY2 - T ER0 Z\nSPECULATORS'  S P EH1 - K Y AH0 - L ER0 - T EY2 Z\nSPED  S P EH1 D\nSPEECE  S P IY1 S\nSPEECH  S P IY1 CH\nSPEECHES  S P IY1 - CH AH0 Z\nSPEECHES(2)  S P IY1 - CH IH0 Z\nSPEECHLESS  S P IY1 CH - L AH0 S\nSPEECHWRITER  S P IY1 CH - R AY2 - T ER0\nSPEECHWRITERS  S P IY1 CH - R AY2 - T ER0 Z\nSPEED  S P IY1 D\nSPEEDBOAT  S P IY1 D - B OW2 T\nSPEEDBOATS  S P IY1 D - B OW2 T S\nSPEEDED  S P IY1 - D IH0 D\nSPEEDER  S P IY1 - D ER0\nSPEEDERS  S P IY1 - D ER0 Z\nSPEEDIER  S P IY1 - D IY0 - ER0\nSPEEDILY  S P IY1 - D AH0 - L IY0\nSPEEDING  S P IY1 - D IH0 NG\nSPEEDOMETER  S P IY0 - D AA1 - M AH0 - T ER0\nSPEEDRING  S P IY1 - D R IH2 NG\nSPEEDS  S P IY1 D Z\nSPEEDSKATE  S P IY1 D - S K EY2 T\nSPEEDSKATING  S P IY1 D - S K EY2 - T IH0 NG\nSPEEDUP  S P IY1 - D AH2 P\nSPEEDWAY  S P IY1 D - W EY2\nSPEEDY  S P IY1 - D IY0\nSPEEGLE  S P IY1 - G AH0 L\nSPEELMAN  S P IY1 L - M AH0 N\nSPEER  S P IH1 R\nSPEES  S P IY1 Z\nSPEGAL  S P IY1 - G AH0 L\nSPEHAR  S P EH1 - HH ER0\nSPEICH  S P AY1 K\nSPEICHER  S P AY1 - K ER0\nSPEIDEL  S P AY1 - D AH0 L\nSPEIER  S P AY1 - ER0\nSPEIGHT  S P EY1 T\nSPEIGHTS  S P EY1 T S\nSPEIGNER  S P AY1 G - N ER0\nSPEIR  S P IH1 R\nSPEIRS  S P IH1 R Z\nSPEISER  S P AY1 - Z ER0\nSPELL  S P EH1 L\nSPELLACY  S P EH1 - L AH0 - S IY0\nSPELLBINDING  S P EH1 L - B AY2 N - D IH0 NG\nSPELLBOUND  S P EH1 L - B AW2 N D\nSPELLED  S P EH1 L D\nSPELLER  S P EH1 - L ER0\nSPELLERS  S P EH1 - L ER0 Z\nSPELLING  S P EH1 - L IH0 NG\nSPELLING'S  S P EH1 - L IH0 NG Z\nSPELLINGS  S P EH1 - L IH0 NG Z\nSPELLMAN  S P EH1 L - M AH0 N\nSPELLMEYER  S P EH1 L - M AY0 - ER0\nSPELLS  S P EH1 L Z\nSPELMAN  S P EH1 L - M AH0 N\nSPELTZ  S P EH1 L T S\nSPENCE  S P EH1 N S\nSPENCER  S P EH1 N - S ER0\nSPENCER'S  S P EH1 N - S ER0 Z\nSPEND  S P EH1 N D\nSPENDABLE  S P EH1 N - D AH0 - B AH0 L\nSPENDER  S P EH1 N - D ER0\nSPENDERS  S P EH1 N - D ER0 Z\nSPENDING  S P EH1 N - D IH0 NG\nSPENDLEY  S P EH1 N D - L IY0\nSPENDLOVE  S P EH1 N D - L AH2 V\nSPENDS  S P EH1 N D Z\nSPENDS(2)  S P EH1 N Z\nSPENDTHRIFT  S P EH1 N D - TH R IH2 F T\nSPENGLER  S P IH1 - NG AH0 L - ER0\nSPENGLER(2)  S P IH1 NG - L ER0\nSPENNER  S P EH1 - N ER0\nSPENO  S P EH1 - N OW0\nSPENS  S P EH1 N S\nSPENSER  S P EH1 N - S ER0\nSPENSER'S  S P EH1 N - S ER0 Z\nSPENSERS  S P EH1 N - S ER0 Z\nSPENT  S P EH1 N T\nSPERA  S P EH1 - R AH0\nSPERANZA  S P ER0 - AA1 N - Z AH0\nSPERBECK  S P ER1 - B EH0 K\nSPERBER  S P ER1 - B ER0\nSPERDUTO  S P ER0 - D UW1 - T OW0\nSPERL  S P ER1 L\nSPERLE  S P AO1 - R AH0 L\nSPERLICH  S P ER1 - L IH0 K\nSPERLING  S P ER1 - L IH0 NG\nSPERM  S P ER1 M\nSPERMS  S P ER1 M Z\nSPERO  S P EH1 - R OW0\nSPEROS  S P EH1 - R OW0 Z\nSPERRAZZA  S P ER0 - AA1 T - S AH0\nSPERRFRIST  S P EH1 R - F R IH0 S T\nSPERRY  S P EH1 - R IY0\nSPESSARD  S P EH1 - S ER0 D\nSPETH  S P EH1 TH\nSPETHMANN  S P EH1 TH - M AH0 N\nSPETSNAZ  S P EH1 T S - N AE0 Z\nSPEVAK  S P EH1 - V AH0 K\nSPEW  S P Y UW1\nSPEWED  S P Y UW1 D\nSPEWING  S P Y UW1 - IH0 NG\nSPEWS  S P Y UW1 Z\nSPEY  S P EY1\nSPEYER  S P EY1 - ER0\nSPEZIALE  S P EH0 - Z IY0 - AA1 - L IY0\nSPEZZANO  S P EH0 T - S AA1 - N OW0\nSPHAR  S F AA1 R\nSPHERE  S F IH1 R\nSPHERES  S F IH1 R Z\nSPHERICAL  S F EH1 - R IH0 - K AH0 L\nSPHEROID  S F IH1 - R OY2 D\nSPHINX  S F IH1 NG K S\nSPIC  S P IH1 K\nSPICE  S P AY1 S\nSPICED  S P AY1 S T\nSPICELAND  S P AY1 S - L AE2 N D\nSPICER  S P AY1 - S ER0\nSPICES  S P AY1 - S AH0 Z\nSPICES(2)  S P AY1 - S IH0 Z\nSPICEY  S P AY1 - S IY0\nSPICHER  S P IH1 - CH ER0\nSPICING  S P AY1 - S IH0 NG\nSPICKARD  S P IH1 - K ER0 D\nSPICKLER  S P IH1 - K L ER0\nSPICUZZA  S P IY0 - K UW1 T - S AH0\nSPICY  S P AY1 - S IY0\nSPIDEL  S P IH1 - D AH0 L\nSPIDELL  S P IH1 - D AH0 L\nSPIDER  S P AY1 - D ER0\nSPIDERMAN  S P AY1 - D ER0 - M AE0 N\nSPIDERS  S P AY1 - D ER0 Z\nSPIDLE  S P AY1 - D AH0 L\nSPIE  S P IY1\nSPIED  S P AY1 D\nSPIEGEL  S P IY1 - G AH0 L\nSPIEGELBERG  S P IY1 - G AH0 L - B ER0 G\nSPIEGELMAN  S P IY1 - G AH0 L - M AH0 N\nSPIEGLER  S P IY1 G - L ER0\nSPIEKER  S P IY1 - K ER0\nSPIEL  S P IY1 L\nSPIELBERG  S P IY1 L - B ER0 G\nSPIELBERG'S  S P IY1 L - B ER0 G Z\nSPIELBERGER  S P IY1 L - B ER0 - G ER0\nSPIELER  S P IY1 - L ER0\nSPIELMAN  S P IY1 L - M AH0 N\nSPIELMANN  S P IY1 L - M AH0 N\nSPIELVOGEL  S P IY1 L - V OW2 - G AH0 L\nSPIER  S P AY1 - ER0\nSPIERING  S P AY1 - ER0 - IH0 NG\nSPIERS  S P AY1 - ER0 Z\nSPIES  S P AY1 Z\nSPIESS  S P IY1 Z\nSPIETH  S P AY1 - AH0 TH\nSPIEWAK  S P IY1 - W AE2 K\nSPIFFING  S P IH1 - F IH0 NG\nSPIFFY  S P IH1 - F IY0\nSPIGHT  S P AY1 T\nSPIGNER  S P AY1 G - N ER0\nSPIGOT  S P IH1 - G AH0 T\nSPIGOTS  S P IH1 - G AH0 T S\nSPIKE  S P AY1 K\nSPIKED  S P AY1 K T\nSPIKER  S P AY1 - K ER0\nSPIKES  S P AY1 K S\nSPIKING  S P AY1 - K IH0 NG\nSPIKY  S P AY1 - K IY0\nSPILDE  S P IH1 L D\nSPILKER  S P IH1 L - K ER0\nSPILL  S P IH1 L\nSPILL'S  S P IH1 L Z\nSPILLAGE  S P IH1 - L IH0 JH\nSPILLANE  S P IH1 - L AH0 N\nSPILLED  S P IH1 L D\nSPILLER  S P IH1 - L ER0\nSPILLERS  S P IH1 - L ER0 Z\nSPILLING  S P IH1 - L IH0 NG\nSPILLMAN  S P IH1 L - M AH0 N\nSPILLOVER  S P IH1 L - OW2 - V ER0\nSPILLS  S P IH1 L Z\nSPILLWAY  S P IH1 L - W EY2\nSPILMAN  S P IH1 L - M AH0 N\nSPILOTRO  S P IH0 - L AA1 - T R OW0\nSPILT  S P IH1 L T\nSPIN  S P IH1 N\nSPINA  S P IY1 - N AH0\nSPINACH  S P IH1 - N AH0 CH\nSPINAL  S P AY1 - N AH0 L\nSPINALE  S P IY0 - N AA1 - L IY0\nSPINDEL  S P IH1 N - D AH0 L\nSPINDLE  S P IH1 N - D AH0 L\nSPINDLER  S P IH1 N - D AH0 L - ER0\nSPINDLER(2)  S P IH1 N D - L ER0\nSPINE  S P AY1 N\nSPINELESS  S P AY1 N - L AH0 S\nSPINELLA  S P IH0 - N EH1 - L AH0\nSPINELLI  S P IH0 - N EH1 - L IY0\nSPINELLO  S P IH0 - N EH1 - L OW0\nSPINES  S P AY1 N Z\nSPINFIZZ  S P IH1 N - F IH0 Z\nSPINK  S P IH1 NG K\nSPINKS  S P IH1 NG K S\nSPINKS'S  S P IH1 NG K - S IH0 Z\nSPINNER  S P IH1 - N ER0\nSPINNER'S  S P IH1 - N ER0 Z\nSPINNERS  S P IH1 - N ER0 Z\nSPINNEY  S P IH1 - N IY0\nSPINNING  S P IH1 - N IH0 NG\nSPINO  S P IY1 - N OW0\nSPINOFF  S P IH1 N - AO2 F\nSPINOFFS  S P IH1 - N AO2 F S\nSPINOLA  S P IY0 - N OW1 - L AH0\nSPINOSA  S P IY0 - N OW1 - S AH0\nSPINOZA  S P IH0 - N OW1 - Z AH0\nSPINS  S P IH1 N Z\nSPINSTER  S P IH1 N - S T ER0\nSPINY  S P AY1 - N IY0\nSPIRA  S P IH1 - R AH0\nSPIRAL  S P AY1 - R AH0 L\nSPIRALED  S P AY1 - R AH0 L D\nSPIRALING  S P AY1 - R AH0 L - IH0 NG\nSPIRALLING  S P AY1 - R AH0 L - IH0 NG\nSPIRALS  S P AY1 - R AH0 L Z\nSPIRE  S P AY1 R\nSPIRES  S P AY1 R Z\nSPIRIT  S P IH1 - R AH0 T\nSPIRIT(2)  S P IH1 - R IH0 T\nSPIRITED  S P IH1 - R AH0 - T AH0 D\nSPIRITED(2)  S P IH1 - R IH0 - T IH0 D\nSPIRITEDNESS  S P IH1 - R IH0 - T IH0 D - N AH0 S\nSPIRITO  S P IH0 - R IY1 - T OW0\nSPIRITS  S P IH1 - R AH0 T S\nSPIRITS(2)  S P IH1 - R IH0 T S\nSPIRITUAL  S P IH1 - R IH0 - CH AH0 - W AH0 L\nSPIRITUAL(2)  S P IH1 - R IH0 - CH W AH0 L\nSPIRITUALISM  S P IH1 - R IH0 - CH AH0 W - AH0 - L IH0 Z M\nSPIRITUALISM(2)  S P IH1 - R IH0 - CH W AH0 - L IH2 Z M\nSPIRITUALIST  S P IH1 - R IH0 - CH AH0 W - AH0 - L IH0 S T\nSPIRITUALISTS  S P IH1 - R IH0 - CH AH0 W - AH0 - L IH0 S T S\nSPIRITUALISTS(2)  S P IH1 - R IH0 - CH AH0 W - AH0 - L IH0 S S\nSPIRITUALISTS(3)  S P IH1 - R IH0 - CH AH0 W - AH0 - L IH0 S\nSPIRITUALISTS(4)  S P IH1 - R IH0 - CH W AH0 - L IH0 S S\nSPIRITUALISTS(5)  S P IH1 - R IH0 - CH W AH0 - L IH0 S\nSPIRITUALITY  S P IH2 - R IH0 - CH AH0 W - AE1 - L AH0 - T IY0\nSPIRITUALLY  S P IH1 - R IH0 - CH AH0 W - AH0 - L IY0\nSPIRITUALS  S P IH1 - R IH0 - CH AH0 - W AH0 L Z\nSPIRITUALS(2)  S P IH1 - R IH0 - CH W AH0 L Z\nSPIRO  S P IH1 - R OW0\nSPISAK  S P IH1 - S AH0 K\nSPIT  S P IH1 T\nSPITALE  S P IY0 - T AA1 - L IY0\nSPITBALL  S P IH1 T - B AO2 L\nSPITBALL'S  S P IH1 T - B AO2 L Z\nSPITE  S P AY1 T\nSPITEFUL  S P AY1 T - F AH0 L\nSPITERI  S P IY0 - T EH1 - R IY0\nSPITLER  S P IH1 T - L ER0\nSPITS  S P IH1 T S\nSPITTING  S P IH1 - T IH0 NG\nSPITTLE  S P IH1 - T AH0 L\nSPITTLER  S P IH1 T - L ER0\nSPITZ  S P IH1 T S\nSPITZER  S P IH1 T - Z ER0\nSPITZLEY  S P IH1 T S - L IY0\nSPITZNAGEL  S P IH1 T - S N EY2 - G AH0 L\nSPIVA  S P IY1 - V AH0\nSPIVACK  S P IH1 - V AH0 K\nSPIVAK  S P IH1 - V AH0 K\nSPIVEY  S P IH1 - V IY0\nSPIWAK  S P IH1 - V AH0 K\nSPIZZIRRI  S P IY0 T - S IH1 - R IY0\nSPLAIN  S P L EY1 N\nSPLAINE  S P L EY1 N\nSPLASH  S P L AE1 SH\nSPLASHED  S P L AE1 SH T\nSPLASHES  S P L AE1 - SH AH0 Z\nSPLASHES(2)  S P L AE1 - SH IH0 Z\nSPLASHING  S P L AE1 - SH IH0 NG\nSPLASHY  S P L AE1 - SH IY0\nSPLAT  S P L AE1 T\nSPLATTER  S P L AE1 - T ER0\nSPLATTERED  S P L AE1 - T ER0 D\nSPLAWN  S P L AO1 N\nSPLEEN  S P L IY1 N\nSPLEISSON  S P EY1 - S AH0 N\nSPLENDID  S P L EH1 N - D AH0 D\nSPLENDID(2)  S P L EH1 N - D IH0 D\nSPLENDIDLY  S P L EH1 N - D AH0 D - L IY0\nSPLENDOR  S P L EH1 N - D ER0\nSPLENIC  S P L EH1 - N IH0 K\nSPLENIC(2)  S P L IY1 - N IH0 K\nSPLICE  S P L AY1 S\nSPLICED  S P L AY1 S T\nSPLICES  S P L AY1 - S IH0 Z\nSPLICHAL  S P L IH1 - CH AH0 L\nSPLICING  S P L AY1 - S IH0 NG\nSPLINT  S P L IH1 N T\nSPLINTER  S P L IH1 N - T ER0\nSPLINTERED  S P L IH1 N - T ER0 D\nSPLINTERING  S P L IH1 N - T ER0 - IH0 NG\nSPLINTERY  S P L IH1 N - T ER0 - IY0\nSPLINTS  S P L IH1 N T S\nSPLIT  S P L IH1 T\nSPLITS  S P L IH1 T S\nSPLITT  S P L IH1 T\nSPLITTING  S P L IH1 - T IH0 NG\nSPLURGE  S P L ER1 JH\nSPLURGED  S P L ER1 JH D\nSPLURGING  S P L ER1 - JH IH0 NG\nSPOCK  S P AA1 K\nSPODEN  S P OW1 - D AH0 N\nSPOELSTRA  S P OW1 L - S T R AH0\nSPOERL  S P AO1 R L\nSPOFFORD  S P AA1 - F ER0 D\nSPOGLI  S P AA1 G - L IY0\nSPOHN  S P AA1 N\nSPOHR  S P AA1 R\nSPOIL  S P OY1 L\nSPOILAGE  S P OY1 - L AH0 JH\nSPOILAGE(2)  S P OY1 - L IH0 JH\nSPOILED  S P OY1 L D\nSPOILER  S P OY1 - L ER0\nSPOILERS  S P OY1 - L ER0 Z\nSPOILING  S P OY1 - L IH0 NG\nSPOILS  S P OY1 L Z\nSPOKANE  S P OW0 - K AE1 N\nSPOKANE(2)  S P OW0 - K EY1 N\nSPOKE  S P OW1 K\nSPOKEN  S P OW1 - K AH0 N\nSPOKES  S P OW1 K S\nSPOKESMAN  S P OW1 K S - M AH0 N\nSPOKESMEN  S P OW1 K S - M IH0 N\nSPOKESPEOPLE  S P OW1 K S - P IY2 - P AH0 L\nSPOKESPERSON  S P OW1 K - S P ER0 - S AH0 N\nSPOKESPERSONS  S P OW1 K - S P ER0 - S AH0 N Z\nSPOKESWOMAN  S P OW1 K S - W UH2 - M AH0 N\nSPOKESWOMEN  S P OW1 K S - W IH2 - M AH0 N\nSPOLETO  S P OW0 - L EY1 - T OW0\nSPOLETTO  S P OW0 - L EY1 - T OW0\nSPOLETTO'S  S P OW0 - L EY1 - T OW0 Z\nSPOMER  S P OW1 - M ER0\nSPONAUGLE  S P AA1 - N AO0 - G AH0 L\nSPONG  S P AO1 NG\nSPONGE  S P AH1 N JH\nSPONGED  S P AH1 N JH D\nSPONGEFORM  S P AH1 N JH - F AO0 R M\nSPONGES  S P AH1 N - JH AH0 Z\nSPONGY  S P AH1 N - JH IY0\nSPONSEL  S P AA1 N - S AH0 L\nSPONSELLER  S P AA1 N - S AH0 - L ER0\nSPONSLER  S P AA1 N - S AH0 - L ER0\nSPONSLER(2)  S P AA1 N - S L ER0\nSPONSOR  S P AA1 N - S ER0\nSPONSOR'S  S P AA1 N - S ER0 Z\nSPONSORED  S P AA1 N - S ER0 D\nSPONSORING  S P AA1 N - S ER0 - IH0 NG\nSPONSORS  S P AA1 N - S ER0 Z\nSPONSORSHIP  S P AA1 N - S ER0 - SH IH2 P\nSPONSORSHIPS  S P AA1 N - S ER0 - SH IH2 P S\nSPONTANEITY  S P AA2 N - T AH0 - N IY1 - AH0 - T IY0\nSPONTANEOUS  S P AA0 N - T EY1 - N IY0 - AH0 S\nSPONTANEOUSLY  S P AA0 N - T EY1 - N IY0 - AH0 S - L IY0\nSPOOF  S P UW1 F\nSPOOFED  S P UW1 F T\nSPOOFING  S P UW1 - F IH0 NG\nSPOOFS  S P UW1 F S\nSPOOK  S P UW1 K\nSPOOKED  S P UW1 K T\nSPOOKS  S P UW1 K S\nSPOOKY  S P UW1 - K IY0\nSPOOL  S P UW1 L\nSPOON  S P UW1 N\nSPOONEMORE  S P UW1 N - M AO0 R\nSPOONER  S P UW1 - N ER0\nSPOONFUL  S P UW1 N - F UH2 L\nSPOONS  S P UW1 N Z\nSPOOR  S P UH1 R\nSPOOR'S  S P UH1 R Z\nSPORADIC  S P ER0 - AE1 - D IH0 K\nSPORADICALLY  S P ER0 - AE1 - D IH0 K - L IY0\nSPORCK  S P AO1 R K\nSPORE  S P AO1 R\nSPORER  S P AO1 - R ER0\nSPORES  S P AO1 R Z\nSPORKIN  S P AO1 R - K IH0 N\nSPORKIN'S  S P AO1 R - K IH0 N Z\nSPORLEDER  S P AO1 R - L IH0 - D ER0\nSPORN  S P AO1 R N\nSPOROPHYTE  S P AO1 R - F AY2 T\nSPOROPHYTES  S P AO1 R - F AY2 T S\nSPORRER  S P AO1 - ER0 R\nSPORT  S P AO1 R T\nSPORT'S  S P AO1 R T S\nSPORTED  S P AO1 R - T IH0 D\nSPORTIER  S P AO1 R - T IY0 - ER0\nSPORTING  S P AO1 R - T IH0 NG\nSPORTINGLY  S P AO1 R - T IH0 NG - L IY0\nSPORTS  S P AO1 R T S\nSPORTS'  S P AO1 R T S\nSPORTSBAR  S P AO1 R T S - B AA2 R\nSPORTSCASTER  S P AO1 R T - S K AE2 - S T ER0\nSPORTSCASTERS  S P AO1 R T - S K AE2 - S T ER0 Z\nSPORTSCHANNEL  S P AO1 R T S - CH AE1 - N AH0 L\nSPORTSCLUB  S P AO1 R T - S K L AH2 B\nSPORTSMAN  S P AO1 R T S - M AH0 N\nSPORTSMANSHIP  S P AO1 R T S - M AH0 N - SH IH2 P\nSPORTSMEN  S P AO1 R T S - M IH0 N\nSPORTSTER  S P AO1 R T - S T ER0\nSPORTSWEAR  S P AO1 R T - S W EH2 R\nSPORTSWRITER  S P AO1 R T S - R AY2 - T ER0\nSPORTSWRITERS  S P AO1 R T S - R AY2 - T ER0 Z\nSPORTY  S P AO1 R - T IY0\nSPOSATO  S P OW0 - S AA1 - T OW0\nSPOSITO  S P OW0 - S IY1 - T OW0\nSPOT  S P AA1 T\nSPOTLESS  S P AA1 T - L AH0 S\nSPOTLIGHT  S P AA1 T - L AY2 T\nSPOTLIGHTED  S P AA1 T - L AY2 - T IH0 D\nSPOTLIGHTING  S P AA1 T - L AY2 - T IH0 NG\nSPOTLIGHTS  S P AA1 T - L AY2 T S\nSPOTO  S P OW1 - T OW0\nSPOTS  S P AA1 T S\nSPOTTED  S P AA1 - T AH0 D\nSPOTTED(2)  S P AA1 - T IH0 D\nSPOTTER  S P AA1 - T ER0\nSPOTTERS  S P AA1 - T ER0 Z\nSPOTTING  S P AA1 - T IH0 NG\nSPOTTS  S P AA1 T S\nSPOTTY  S P AA1 - T IY0\nSPOUSAL  S P AW1 - Z AH0 L\nSPOUSE  S P AW1 S\nSPOUSE'S  S P AW1 - S IH0 Z\nSPOUSES  S P AW1 - S AH0 Z\nSPOUSES(2)  S P AW1 - S IH0 Z\nSPOUT  S P AW1 T\nSPOUTED  S P AW1 - T AH0 D\nSPOUTING  S P AW1 - T IH0 NG\nSPRACKLEN  S P R AE1 - K AH0 - L AH0 N\nSPRADLEY  S P R AE1 D - L IY0\nSPRADLIN  S P R AE1 D - L IH0 N\nSPRADLING  S P R AE1 D - L IH0 NG\nSPRAGG  S P R AE1 G\nSPRAGGINS  S P R AE1 - G IH0 N Z\nSPRAGUE  S P R EY1 G\nSPRAGUE'S  S P R EY1 G Z\nSPRAIN  S P R EY1 N\nSPRAINED  S P R EY1 N D\nSPRAINS  S P R EY1 N Z\nSPRAKER  S P R EY1 - K ER0\nSPRANG  S P R AE1 NG\nSPRANGER  S P R AE1 - NG ER0\nSPRANKLE  S P R AE1 NG - K AH0 L\nSPRATLEY  S P R AE1 T - L IY0\nSPRATLIN  S P R AE1 T - L IH0 N\nSPRATLING  S P R AE1 T - L IH0 NG\nSPRATT  S P R AE1 T\nSPRAWL  S P R AO1 L\nSPRAWLED  S P R AO1 L D\nSPRAWLING  S P R AO1 - L IH0 NG\nSPRAWLS  S P R AO1 L Z\nSPRAY  S P R EY1\nSPRAYBERRY  S P R EY1 - B EH2 - R IY0\nSPRAYED  S P R EY1 D\nSPRAYER  S P R EY1 - ER0\nSPRAYERS  S P R EY1 - ER0 Z\nSPRAYING  S P R EY1 - IH0 NG\nSPRAYS  S P R EY1 Z\nSPREAD  S P R EH1 D\nSPREADER  S P R EH1 - D ER0\nSPREADING  S P R EH1 - D IH0 NG\nSPREADS  S P R EH1 D Z\nSPREADSHEET  S P R EH1 D - SH IY2 T\nSPREADSHEETS  S P R EH1 D - SH IY2 T S\nSPRECHER  S P R EH1 - K ER0\nSPRECKELS  S P R EH1 - K AH0 L Z\nSPREE  S P R IY1\nSPREEMAN  S P R IY1 - M AH0 N\nSPREEN  S P R IY1 N\nSPREES  S P R IY1 Z\nSPREHE  S P R IY1 HH\nSPREITZER  S P R AY1 T - Z ER0\nSPRENG  S P R EH1 NG\nSPRENGER  S P R EH1 N - JH ER0\nSPRENKLE  S P R EH1 NG - K AH0 L\nSPRICK  S P R IH1 K\nSPRIGG  S P R IH1 G\nSPRIGGED  S P R IH1 G D\nSPRIGGS  S P R IH1 G Z\nSPRIGHTLY  S P R AY1 T - L IY0\nSPRING  S P R IH1 NG\nSPRING'S  S P R IH1 NG Z\nSPRING(2)  S P ER0 - IH1 NG\nSPRINGBOARD  S P R IH1 NG - B AO2 R D\nSPRINGBORN  S P R IH1 NG - G B ER0 N\nSPRINGDALE  S P R IH1 NG - D EY2 L\nSPRINGER  S P R IH1 - NG ER0\nSPRINGERVILLE  S P R IH1 - NG ER0 - V IH2 L\nSPRINGFIELD  S P R IH1 NG - F IY2 L D\nSPRINGFIELD'S  S P R IH1 NG - F IY2 L D Z\nSPRINGING  S P R IH1 - NG IH0 NG\nSPRINGMAN  S P R IH1 NG - M AH0 N\nSPRINGS  S P R IH1 NG Z\nSPRINGS(2)  S P ER0 - IH1 NG Z\nSPRINGSTEAD  S P R IH1 NG - S T EH2 D\nSPRINGSTEEN  S P R IH1 NG - S T IY2 N\nSPRINGSTEEN'S  S P R IH1 NG - S T IY2 N Z\nSPRINGSTON  S P R IH1 NG - S T AH0 N\nSPRINGTIME  S P R IH1 NG - T AY2 M\nSPRINKEL  S P R IH1 NG - K AH0 L\nSPRINKLE  S P R IH1 NG - K AH0 L\nSPRINKLED  S P R IH1 NG - K AH0 L D\nSPRINKLER  S P R IH1 NG - K L ER0\nSPRINKLER(2)  S P R IH1 NG - K AH0 - L ER0\nSPRINKLERS  S P R IH1 NG - K L ER0 Z\nSPRINKLERS(2)  S P R IH1 NG - K AH0 - L ER0 Z\nSPRINKLES  S P R IH1 NG - K AH0 L Z\nSPRINKLING  S P R IH1 NG - K L IH0 NG\nSPRINKLING(2)  S P R IH1 NG - K AH0 L - IH0 NG\nSPRINT  S P R IH1 N T\nSPRINT'S  S P R IH1 N T S\nSPRINTED  S P R IH1 N - T IH0 D\nSPRINTER  S P R IH1 N - T ER0\nSPRINTERS  S P R IH1 N - T ER0 Z\nSPRINTING  S P R IH1 N - T IH0 NG\nSPRINTS  S P R IH1 N T S\nSPRITE  S P R AY1 T\nSPRIZZO  S P R IH1 - Z OW0\nSPROAT  S P R OW1 T\nSPROCK  S P R AA1 K\nSPROCKET  S P R AA1 - K AH0 T\nSPROGUS  S P R OW1 - G AH0 S\nSPROGUS'S  S P R OW1 - G AH0 - S IH0 Z\nSPROLES  S P R OW1 L Z\nSPRONG  S P R AO1 NG\nSPROTT  S P R AA1 T\nSPROUL  S P R AW1 L\nSPROULE  S P R UW1 L\nSPROULL  S P R UW1 L\nSPROULS  S P R AW1 L Z\nSPROUSE  S P R AW1 S\nSPROUT  S P R AW1 T\nSPROUTED  S P R AW1 - T AH0 D\nSPROUTED(2)  S P R AW1 - T IH0 D\nSPROUTING  S P R AW1 - T IH0 NG\nSPROUTS  S P R AW1 T S\nSPROW  S P R AW1\nSPROWL  S P R AW1 L\nSPROWLE  S P R AW1 - AH0 L\nSPROWLS  S P R AW1 L Z\nSPRUCE  S P R UW1 S\nSPRUCED  S P R UW1 S T\nSPRUCING  S P R UW1 - S IH0 NG\nSPRUELL  S P R UW1 L\nSPRUIELL  S P R UW1 L\nSPRUILL  S P R UW1 L\nSPRUNG  S P R AH1 NG\nSPRUNGER  S P R AH1 - NG ER0\nSPRY  S P R AY1\nSPUD  S P AH1 D\nSPUD'S  S P AH1 D Z\nSPUDS  S P AH1 D Z\nSPUHLER  S P UW1 - L ER0\nSPUN  S P AH1 N\nSPUNK  S P AH1 NG K\nSPUNKY  S P AH1 NG - K IY0\nSPUR  S P ER1\nSPURDLE  S P ER1 - D AH0 L\nSPURGE  S P ER1 JH\nSPURGEON  S P ER1 - JH IH0 N\nSPURGIN  S P ER1 - JH IH0 N\nSPURIOUS  S P Y UH1 - R IY0 - AH0 S\nSPURIOUS(2)  S P ER1 - IY0 - AH0 S\nSPURLIN  S P ER1 - L IH0 N\nSPURLING  S P ER1 - L IH0 NG\nSPURLOCK  S P ER1 - L AA2 K\nSPURN  S P ER1 N\nSPURNED  S P ER1 N D\nSPURNING  S P ER1 - N IH0 NG\nSPURNS  S P ER1 N Z\nSPURR  S P ER1\nSPURRED  S P ER1 D\nSPURRIER  S P ER1 - IY0 - ER0\nSPURRING  S P ER1 - IH0 NG\nSPURS  S P ER1 Z\nSPURT  S P ER1 T\nSPURTED  S P ER1 - T IH0 D\nSPURTING  S P ER1 - T IH0 NG\nSPURTS  S P ER1 T S\nSPUTNIK  S P AH1 T - N IH0 K\nSPUTNIKS  S P AH1 T - N IH0 K S\nSPUTTER  S P AH1 - T ER0\nSPUTTERED  S P AH1 - T ER0 D\nSPUTTERING  S P AH1 - T ER0 - IH0 NG\nSPUTTERS  S P AH1 - T ER0 Z\nSPY  S P AY1\nSPYCATCHER  S P AY1 - K AE2 - CH ER0\nSPYCHALSKI  S P IH0 - HH AA1 L S - K IY0\nSPYGLASS  S P AY1 - G L AE2 S\nSPYING  S P AY1 - IH0 NG\nSPYKER  S P AY1 - K ER0\nSQUABBLE  S K W AA1 - B AH0 L\nSQUABBLED  S K W AA1 - B AH0 L D\nSQUABBLES  S K W AA1 - B AH0 L Z\nSQUABBLING  S K W AA1 - B AH0 L - IH0 NG\nSQUABBLING(2)  S K W AA1 - B L IH0 NG\nSQUAD  S K W AA1 D\nSQUAD'S  S K W AA1 D Z\nSQUADRON  S K W AA1 - D R AH0 N\nSQUADRONS  S K W AA1 - D R AH0 N Z\nSQUADS  S K W AA1 D Z\nSQUALID  S K W AA1 - L AH0 D\nSQUALL  S K W AO1 L\nSQUALLS  S K W AO1 L Z\nSQUALOR  S K W AA1 - L ER0\nSQUANDER  S K W AA1 N - D ER0\nSQUANDERED  S K W AA1 N - D ER0 D\nSQUANDERING  S K W AA1 N - D ER0 - IH0 NG\nSQUARE  S K W EH1 R\nSQUARED  S K W EH1 R D\nSQUARELY  S K W EH1 R - L IY0\nSQUARES  S K W EH1 R Z\nSQUARING  S K W EH1 - R IH0 NG\nSQUASH  S K W AA1 SH\nSQUASHED  S K W AA1 SH T\nSQUASHING  S K W AA1 - SH IH0 NG\nSQUASHY  S K W AA1 - SH IY0\nSQUAT  S K W AA1 T\nSQUATS  S K W AA1 T S\nSQUATTER  S K W AA1 - T ER0\nSQUATTERS  S K W AA1 - T ER0 Z\nSQUATTING  S K W AA1 - T IH0 NG\nSQUAWK  S K W AO1 K\nSQUAWKING  S K W AO1 - K IH0 NG\nSQUAWKS  S K W AO1 K S\nSQUEAK  S K W IY1 K\nSQUEAKED  S K W IY1 K T\nSQUEAKER  S K W IY1 - K ER0\nSQUEAKERS  S K W IY1 - K ER0 Z\nSQUEAKING  S K W IY1 - K IH0 NG\nSQUEAKS  S K W IY1 K S\nSQUEAKY  S K W IY1 - K IY0\nSQUEAL  S K W IY1 L\nSQUEALING  S K W IY1 - L IH0 NG\nSQUEALS  S K W IY1 L Z\nSQUEAMISH  S K W IY1 - M IH0 SH\nSQUEAMISHNESS  S K W IY1 - M IH0 SH - N AH0 S\nSQUEEGEE  S K W IY1 - JH IY0\nSQUEEZE  S K W IY1 Z\nSQUEEZED  S K W IY1 Z D\nSQUEEZES  S K W IY1 - Z IH0 Z\nSQUEEZING  S K W IY1 - Z IH0 NG\nSQUELCH  S K W EH1 L CH\nSQUELCHED  S K W EH1 L CH T\nSQUELCHING  S K W EH1 L - CH IH0 NG\nSQUIBB  S K W IH1 B\nSQUIBB'S  S K W IH1 B Z\nSQUID  S K W IH1 D\nSQUIER  S K W AY1 - ER0\nSQUIERS  S K W AY1 - ER0 Z\nSQUIGGLE  S K W IH1 - G AH0 L\nSQUIGGLES  S K W IH1 - G AH0 L Z\nSQUILLACE  S K W IH1 - L AH0 S\nSQUILLANTE  S K W IY0 - L AA1 N - T EY0\nSQUINT  S K W IH1 N T\nSQUINTING  S K W IH1 N - T IH0 NG\nSQUIRE  S K W AY1 R\nSQUIRES  S K W AY1 - ER0 Z\nSQUIRM  S K W ER1 M\nSQUIRMING  S K W ER1 - M IH0 NG\nSQUIRMS  S K W ER1 M Z\nSQUIRREL  S K W ER1 - AH0 L\nSQUIRRELED  S K W ER1 - AH0 L D\nSQUIRRELS  S K W ER1 - AH0 L Z\nSQUIRT  S K W ER1 T\nSQUIRTED  S K W ER1 - T AH0 D\nSQUIRTED(2)  S K W ER1 - T IH0 D\nSQUIRTING  S K W ER1 - T IH0 NG\nSQUIRTS  S K W ER1 T S\nSQUISHY  S K W IH1 - SH IY0\nSQUITIERI  S K W IY0 - T IH1 - R IY0\nSQUYRES  S K W AY1 R Z\nSR  S IY1 - N Y ER0\nSR(2)  S IH1 - S T ER0\nSRADER  SH R EY1 - D ER0\nSRAM  SH R AE1 M\nSRAM(2)  EH1 - S R AE1 M\nSRAMEK  SH R AE1 - M IH0 K\nSRDAN  S ER1 - D AE2 N\nSREBRENICA  S R EY2 - B R EH0 - N IY1 T - S AH0\nSREBRENICA'S  S R EY2 - B R EH0 - N IY1 T - S AH0 Z\nSREBRENICA'S(2)  SH R EY2 - B R AH0 - N IY1 T - S AH0 Z\nSREBRENICA(2)  SH R EY2 - B R AH0 - N IY1 T - S AH0\nSREMAC  S R IY1 - M AE2 K\nSRI  SH R IY1\nSRI(2)  EH1 - S AA1 - R AY1\nSRI(3)  S R IY1\nSRI-LANKA  S R IY1 - L AE1 NG - K AH0\nSRI-LANKA(2)  SH R IY1 - L AE1 NG - K AH0\nSRINAGAR  S R IY1 - N AH0 - G AA2 R\nSRINAGAR(2)  SH R IY1 - N AH0 - G AA2 R\nSRINAGARB  S R IY1 - N AH0 - G AA2 R B\nSRINAGARB(2)  SH R IY1 - N AH0 - G AA2 R B\nSRINIVAS  S R IY1 - N IH0 - V AA2 S\nSRINIVASAN  S R IY0 - N IY0 - V AA0 - S AA1 N\nSRINIVASAN(2)  SH R IY0 - N IY0 - V AA0 - S AA1 N\nSRIRAM  S R IY1 - R AA2 M\nSRIRAM(2)  SH R IY1 - R AA2 M\nSRIVASTAVA  S R IY0 - V AA0 - S T AA1 - V AH0\nSRIVASTAVA(2)  SH R IY0 - V AA0 - S T AA1 - V AH0\nSROCK  SH R AA1 K\nSROGE  SH R OW1 G\nSROKA  SH R OW1 - K AH0\nSROUFE  SH R OW1 F\nSSANGYONG  S AE1 NG - Y AO2 NG\nST  S T R IY1 T\nST(2)  S EY1 N T\nST-JAMES  S EY1 N T - JH EY1 M Z\nST-JOHNS  S EY1 N T - JH AA1 N Z\nSTA  S T AH1\nSTA(2)  EH1 - S T IY1 - EY1\nSTAAB  S T AA1 B\nSTAACK  S T AA1 K\nSTAAL  S T AA1 L\nSTAAR  S T AA1 R\nSTAAR'S  S T AA1 R Z\nSTAAS  S T AA1 Z\nSTAAT  S T AA1 T\nSTAATS  S T AA1 T S\nSTAB  S T AE1 B\nSTABBED  S T AE1 B D\nSTABBING  S T AE1 - B IH0 NG\nSTABBINGS  S T AE1 - B IH0 NG Z\nSTABENOW  S T AE1 - B IH0 - N OW0\nSTABILE  S T EY1 - B IH0 L\nSTABILITY  S T AH0 - B IH1 - L IH0 - T IY0\nSTABILIZATION  S T EY2 - B AH0 - L AH0 - Z EY1 - SH AH0 N\nSTABILIZE  S T EY1 - B AH0 - L AY2 Z\nSTABILIZED  S T EY1 - B AH0 - L AY2 Z D\nSTABILIZER  S T EY1 - B AH0 - L AY2 - Z ER0\nSTABILIZERS  S T EY1 - B AH0 - L AY2 - Z ER0 Z\nSTABILIZES  S T EY1 - B AH0 - L AY2 - Z AH0 Z\nSTABILIZES(2)  S T EY1 - B AH0 - L AY2 - Z IH0 Z\nSTABILIZING  S T EY1 - B AH0 - L AY2 - Z IH0 NG\nSTABLE  S T EY1 - B AH0 L\nSTABLER  S T EY1 - B AH0 L - ER0\nSTABLER(2)  S T EY1 - B L ER0\nSTABLES  S T EY1 - B AH0 L Z\nSTABLEST  S T EY1 - B AH0 - L AH0 S T\nSTABLEY  S T AE1 - B L IY0\nSTABS  S T AE1 B Z\nSTAC  S T AE1 K\nSTAC'S  S T AE1 K S\nSTACCATO  S T AH0 - K AA1 - T OW2\nSTACEY  S T EY1 - S IY0\nSTACH  S T AE1 CH\nSTACHNIK  S T AE1 K - N IH0 K\nSTACHOWIAK  S T AH0 - HH AW1 - IY0 - AE0 K\nSTACHOWICZ  S T AA1 - HH AH0 - V IH0 CH\nSTACHOWSKI  S T AH0 - HH AO1 F S - K IY0\nSTACHURA  S T AA0 - K UH1 - R AH0\nSTACHURSKI  S T AH0 - HH ER1 S - K IY0\nSTACIA  S T AA1 - CH AH0\nSTACIE  S T AE1 - K IY0\nSTACK  S T AE1 K\nSTACKED  S T AE1 K T\nSTACKER  S T AE1 - K ER0\nSTACKHOUSE  S T AE1 K - HH AW2 S\nSTACKING  S T AE1 - K IH0 NG\nSTACKPOLE  S T AE1 K - P OW2 L\nSTACKS  S T AE1 K S\nSTACY  S T EY1 - S IY0\nSTADE  S T EY1 D\nSTADEL  S T AE1 - D AH0 L\nSTADELMAN  S T AE1 - D AH0 L - M AH0 N\nSTADER  S T EY1 - D ER0\nSTADIA  S T EY1 - D IY0 - AH0\nSTADIUM  S T EY1 - D IY0 - AH0 M\nSTADIUM'S  S T EY1 - D IY0 - AH0 M Z\nSTADIUMS  S T EY1 - D IY0 - AH0 M Z\nSTADLER  S T AE1 D - L ER0\nSTADNIK  S T AE1 D - N IH0 K\nSTADT  S T AE1 D T\nSTADTLANDER  SH T AE1 T - L AE2 N - D ER0\nSTADTMILLER  SH T AE1 T - M IH1 - L ER0\nSTAEBELL  S T EH1 - B EH0 L\nSTAEBLER  S T EY1 - L ER0\nSTAEHLE  S T EY1 L\nSTAFF  S T AE1 F\nSTAFF'S  S T AE1 F S\nSTAFFA  S T AA1 - F AH0\nSTAFFED  S T AE1 F T\nSTAFFER  S T AE1 - F ER0\nSTAFFERS  S T AE1 - F ER0 Z\nSTAFFIERI  S T AA0 - F IH1 - R IY0\nSTAFFING  S T AE1 - F IH0 NG\nSTAFFORD  S T AE1 - F ER0 D\nSTAFFORD'S  S T AE1 - F ER0 D Z\nSTAFFORDSHIRE  S T AE1 - F ER0 D - SH ER0\nSTAFFORDSHIRE'S  S T AE1 - F ER0 D - SH ER0 Z\nSTAFFORDSHIRE'S(2)  S T AE1 - F ER0 D - SH AY2 - ER0 Z\nSTAFFORDSHIRE(2)  S T AE1 - F ER0 D - SH AY2 - ER0\nSTAFFS  S T AE1 F S\nSTAG  S T AE1 G\nSTAGE  S T EY1 JH\nSTAGECOACH  S T EY1 JH - K OW2 CH\nSTAGECRAFT  S T EY1 JH - K R AE2 F T\nSTAGED  S T EY1 JH D\nSTAGEHAND  S T EY1 JH - HH AE2 N D\nSTAGEHANDS  S T EY1 JH - HH AE2 N D Z\nSTAGER  S T EY1 - JH ER0\nSTAGES  S T EY1 - JH AH0 Z\nSTAGES(2)  S T EY1 - JH IH0 Z\nSTAGFLATE  S T AE2 G - F L EY1 T\nSTAGFLATION  S T AE0 G - F L EY1 - SH AH0 N\nSTAGG  S T AE1 G\nSTAGGER  S T AE1 - G ER0\nSTAGGERED  S T AE1 - G ER0 D\nSTAGGERING  S T AE1 - G ER0 - IH0 NG\nSTAGGERS  S T AE1 - G ER0 Z\nSTAGGS  S T AE1 G Z\nSTAGING  S T EY1 - JH IH0 NG\nSTAGLIANO  S T AA0 G - L IY0 - AA1 - N OW0\nSTAGNANT  S T AE1 G - N AH0 N T\nSTAGNARO  S T AA0 G - N AA1 - R OW0\nSTAGNATE  S T AE1 G - N EY2 T\nSTAGNATED  S T AE1 G - N EY2 - T IH0 D\nSTAGNATING  S T AE1 G - N EY2 - T IH0 NG\nSTAGNATION  S T AE0 G - N EY1 - SH AH0 N\nSTAGNER  S T AE1 G - N ER0\nSTAHL  S T AA1 L\nSTAHLBERG  S T AA1 L - B ER0 G\nSTAHLE  S T EY1 - HH AH0 L\nSTAHLECKER  S T AA1 - L IH0 - K ER0\nSTAHLER  S T AA1 - L ER0\nSTAHLEY  S T AE1 - L IY0\nSTAHLHUT  S T AA1 L - HH AH0 T\nSTAHLMAN  S T AA1 L - M AH0 N\nSTAHLY  S T AE1 - L IY0\nSTAHMER  S T AA1 - M ER0\nSTAHNKE  S T AE1 NG K\nSTAHR  S T AE1 R\nSTAI  S T AA1 - IY0\nSTAIB  S T EY1 B\nSTAID  S T EY1 D\nSTAIGER  S T AY1 - G ER0\nSTAILEY  S T EY1 - L IY0\nSTAIN  S T EY1 N\nSTAINBACK  S T EY1 N - B AE2 K\nSTAINBROOK  S T EY1 N - B R UH2 K\nSTAINED  S T EY1 N D\nSTAINES  S T EY1 N Z\nSTAINING  S T EY1 - N IH0 NG\nSTAINLESS  S T EY1 N - L AH0 S\nSTAINMASTER  S T EY1 N - M AE2 - S T ER0\nSTAINS  S T EY1 N Z\nSTAIR  S T EH1 R\nSTAIRCASE  S T EH1 R - K EY2 S\nSTAIRCASES  S T EH1 R - K EY2 - S IH0 Z\nSTAIRS  S T EH1 R Z\nSTAIRWAY  S T EH1 R - W EY2\nSTAIRWAYS  S T EH1 R - W EY2 Z\nSTAIRWELL  S T EH1 R - W EH2 L\nSTAIRWELLS  S T EH1 R - W EH2 L Z\nSTAKE  S T EY1 K\nSTAKE'S  S T EY1 K S\nSTAKE-OUT  S T EY1 K - AW1 T\nSTAKED  S T EY1 K T\nSTAKEHOLDER  S T EY1 K - HH OW2 L - D ER0\nSTAKEHOLDERS  S T EY1 K - HH OW2 L - D ER0 Z\nSTAKEOUT  S T EY1 K - AW2 T\nSTAKEOUTS  S T EY1 K - AW2 T S\nSTAKER  S T EY1 - K ER0\nSTAKES  S T EY1 K S\nSTAKING  S T EY1 - K IH0 NG\nSTALCUP  S T AO1 L K - AH2 P\nSTALDER  S T AO1 L - D ER0\nSTALE  S T EY1 L\nSTALEMATE  S T EY1 L - M EY2 T\nSTALEMATED  S T EY1 L - M EY2 - T IH0 D\nSTALEY  S T EY1 - L IY0\nSTALEY'S  S T EY1 - L IY0 Z\nSTALIN  S T AA1 - L AH0 N\nSTALIN'S  S T AA1 - L IH0 N Z\nSTALINGRAD  S T AE1 - L IH0 N - G R AE2 D\nSTALINISM  S T AE1 - L IH0 - N IH2 - Z AH0 M\nSTALINIST  S T AA1 - L IH0 - N IH0 S T\nSTALINISTIC  S T AA2 - L IH0 - N IH1 - S T IH0 K\nSTALINISTS  S T AE1 - L IH0 - N IH0 S T S\nSTALINISTS(2)  S T AE1 - L IH0 - N IH0 S S\nSTALINISTS(3)  S T AE1 - L IH0 - N IH0 S\nSTALINIZATION  S T AE2 - L IH0 - N IH0 - Z EY1 - SH AH0 N\nSTALINIZE  S T AE1 - L IH0 - N AY2 Z\nSTALK  S T AO1 K\nSTALKED  S T AO1 K T\nSTALKER  S T AO1 - K ER0\nSTALKERS  S T AO1 - K ER0 Z\nSTALKING  S T AO1 - K IH0 NG\nSTALKS  S T AO1 K S\nSTALKY  S T AO1 - K IY0\nSTALL  S T AO1 L\nSTALLARD  S T AE1 - L ER0 D\nSTALLCUP  S T AO1 L K - AH2 P\nSTALLED  S T AO1 L D\nSTALLER  S T AO1 - L ER0\nSTALLIBRASS  S T AE1 - L IH0 - B R AE0 S\nSTALLING  S T AO1 - L IH0 NG\nSTALLINGS  S T AO1 - L IH0 NG Z\nSTALLION  S T AE1 - L Y AH0 N\nSTALLIONS  S T AE1 - L Y AH0 N Z\nSTALLKAMP  S T AO1 L - K AE2 M P\nSTALLMAN  S T AO1 L - M AH0 N\nSTALLONE  S T AH0 - L OW1 N\nSTALLONE'S  S T AH0 - L OW1 N Z\nSTALLS  S T AO1 L Z\nSTALLSMITH  S T AO1 L - S M IH2 TH\nSTALLWORTH  S T AO1 L - W ER2 TH\nSTALNAKER  S T AE1 L - N AH0 - K ER0\nSTALOFF  S T AE1 - L AO0 F\nSTALON  S T EY1 - L AH0 N\nSTALOWA  S T AH0 - L OW1 - AH0\nSTALTER  S T AO1 L - T ER0\nSTALVEY  S T AE1 L - V IY0\nSTALWART  S T AO1 L - W ER0 T\nSTALWARTS  S T AO1 L - W ER0 T S\nSTALZER  S T EY1 L - Z ER0\nSTAM  S T AE1 M\nSTAMAND  S T AE1 - M AH0 N D\nSTAMANT  S T AE1 - M AH0 N T\nSTAMAS  S T AA1 - M AH0 Z\nSTAMATY  S T AE1 - M AH0 - T IY0\nSTAMBAUGH  S T AE1 M - B AO0\nSTAMBERG  S T AE1 M - B ER0 G\nSTAMENSON  S T EY1 - M AH0 N - S AH0 N\nSTAMER  S T EY1 - M ER0\nSTAMEY  S T EY1 - M IY0\nSTAMFORD  S T AE1 M - F ER0 D\nSTAMINA  S T AE1 - M AH0 - N AH0\nSTAMLER  S T AE1 M - L ER0\nSTAMM  S T AE1 M\nSTAMMEN  S T AE1 - M AH0 N\nSTAMMER  S T AE1 - M ER0\nSTAMOS  S T EY1 - M OW0 Z\nSTAMOUR  S T AH0 - M UH1 R\nSTAMP  S T AE1 M P\nSTAMPED  S T AE1 M P T\nSTAMPEDE  S T AE0 M - P IY1 D\nSTAMPEDED  S T AE0 M - P IY1 - D AH0 D\nSTAMPEDED(2)  S T AE0 M - P IY1 - D IH0 D\nSTAMPEDING  S T AE0 M - P IY1 - D IH0 NG\nSTAMPER  S T AE1 M - P ER0\nSTAMPFLI  S T AE1 M P F - L IY0\nSTAMPING  S T AE1 M - P IH0 NG\nSTAMPINGS  S T AE1 M - P IH0 NG Z\nSTAMPLEY  S T AE1 M - P L IY0\nSTAMPS  S T AE1 M P S\nSTAN  S T AE1 N\nSTAN'S  S T AE1 N Z\nSTANADYNE  S T AE1 - N AH0 - D AY2 N\nSTANALAND  S T AE1 - N AH0 - L AH0 N D\nSTANARD  S T AE1 - N ER0 D\nSTANAWAY  S T AE1 N - AH0 - W EY0\nSTANBACK  S T AE1 N - B AE2 K\nSTANBERRY  S T AE1 N - B EH2 - R IY0\nSTANBERY  S T AE1 N - B ER0 - IY0\nSTANBIC  S T AE1 N - B IH0 K\nSTANBROUGH  S T AE1 N - B R AW0\nSTANBURY  S T AE1 N - B EH2 - R IY0\nSTANCE  S T AE1 N S\nSTANCES  S T AE1 N - S IH0 Z\nSTANCH  S T AE1 N CH\nSTANCHED  S T AE1 N CH T\nSTANCHFIELD  S T AE1 N CH - F IY0 L D\nSTANCHING  S T AE1 N - CH IH0 NG\nSTANCIK  S T AE1 N - S IH0 K\nSTANCIL  S T AE1 N - S IH0 L\nSTANCILL  S T AE1 N - S IH0 L\nSTANCLIFF  S T AE1 N - K L IH0 F\nSTANCO  S T AE1 NG - K OW0\nSTANCZAK  S T AE1 N - CH AE0 K\nSTANCZYK  S T AE1 N - CH IH0 K\nSTAND  S T AE1 N D\nSTANDA  S T AE1 N - D AH0\nSTANDARD  S T AE1 N - D ER0 D\nSTANDARD'S  S T AE1 N - D ER0 D Z\nSTANDARD-BEARER  S T AE1 N - D ER0 D - B EH1 - R ER0\nSTANDARD-BEARERS  S T AE1 N - D ER0 D - B EH1 - R ER0 Z\nSTANDARDIZATION  S T AE0 N - D ER0 - D IH0 - Z EY1 - SH AH0 N\nSTANDARDIZE  S T AE1 N - D ER0 - D AY2 Z\nSTANDARDIZED  S T AE1 N - D ER0 - D AY2 Z D\nSTANDARDIZING  S T AE1 N - D ER0 - D AY2 - Z IH0 NG\nSTANDARDS  S T AE1 N - D ER0 D Z\nSTANDBY  S T AE1 N D - B AY1\nSTANDBYS  S T AE1 N D - B AY2 Z\nSTANDEFER  S T AE1 N - D IH0 - F ER0\nSTANDEN  S T AE1 N - D AH0 N\nSTANDER  S T AE1 N - D ER0\nSTANDERFER  S T AE1 N - D ER0 - F ER0\nSTANDERFORD  S T AE1 N - D ER0 - F ER0 D\nSTANDEX  S T AE1 N - D AH0 K S\nSTANDFIELD  S T AE1 N D - F IY2 L D\nSTANDIFER  S T AE1 N - D IH0 - F ER0\nSTANDIFORD  S T AE1 N - D IH0 - F ER0 D\nSTANDIN'  S T AE1 N - D IH0 N\nSTANDING  S T AE1 N - D IH0 NG\nSTANDINGS  S T AE1 N - D IH0 NG Z\nSTANDISH  S T AE1 N - D IH0 SH\nSTANDLEE  S T AE1 N D - L IY2\nSTANDLEY  S T AE1 N D - L IY0\nSTANDOFF  S T AE1 N - D AO2 F\nSTANDOFFS  S T AE1 N - D AO2 F S\nSTANDOUT  S T AE1 N D - AW2 T\nSTANDOUTS  S T AE1 N D - AW2 T S\nSTANDPOINT  S T AE1 N D - P OY2 N T\nSTANDPOINTS  S T AE1 N D - P OY2 N T S\nSTANDRE  S T AE1 N - D ER0\nSTANDRIDGE  S T AE1 N - D R IH0 JH\nSTANDS  S T AE1 N D Z\nSTANDSTILL  S T AE1 N D - S T IH2 L\nSTANDUP  S T AE1 N D - AH2 P\nSTANEK  S T AE1 - N IH0 K\nSTANFIELD  S T AE1 N - F IY2 L D\nSTANFILL  S T AE1 N - F AH0 L\nSTANFORD  S T AE1 N - F ER0 D\nSTANFORD'S  S T AE1 N - F ER0 D Z\nSTANFORTH  S T AE1 N - F ER0 TH\nSTANG  S T AE1 NG\nSTANGA  S T AA1 NG - G AH0\nSTANGE  S T AE1 N JH\nSTANGEL  S T EY1 NG - G AH0 L\nSTANGELAND  S T EY1 NG - G IH0 - L AH0 N D\nSTANGELAND(2)  S T EY1 NG - G L AH0 N D\nSTANGELO  S T AA0 NG - G EH1 - L OW0\nSTANGER  S T AE1 - NG ER0\nSTANGL  S T AE1 NG - G AH0 L\nSTANGLAND  S T AE1 NG - G L AH0 N D\nSTANGLE  S T AE1 NG - G AH0 L\nSTANGLER  S T AE1 NG - G AH0 - L ER0\nSTANGLER(2)  S T AE1 NG - G L ER0\nSTANGO  S T AA1 NG - G OW0\nSTANHOPE  S T AE1 - N AH0 P\nSTANIAR  S T EY1 - N IY0 - AA0 R\nSTANICH  S T AE1 - N IH0 CH\nSTANIFER  S T AE1 - N IH0 - F ER0\nSTANIS  S T AE1 - N IH0 S\nSTANISH  S T AE1 - N IH0 SH\nSTANISLAS  S T AH0 - N IH1 S - L AH0 S\nSTANISLAV  S T AE1 - N IH0 - S L AA0 V\nSTANISLAW  S T AE1 - N IH0 S - L AO2\nSTANISLAWSKI  S T AH0 - N IH0 S - L AA1 F S - K IY0\nSTANISZEWSKI  S T AH0 - N IH0 - SH EH1 F S - K IY0\nSTANK  S T AE1 NG K\nSTANKE  S T AE1 NG K\nSTANKEVICH  S T AE1 NG - K AH0 - V IH2 CH\nSTANKEY  S T AE1 NG - K IY0\nSTANKIEWICZ  S T AE1 N - K AH0 - V IH0 CH\nSTANKO  S T AE1 NG - K OW0\nSTANKOVICH  S T AE1 NG - K AH0 - V IH0 CH\nSTANKOWSKI  S T AH0 NG - K AO1 F S - K IY0\nSTANKUS  S T AE1 NG - K AH0 S\nSTANLEIGH  S T AE1 N - L AH0\nSTANLEY  S T AE1 N - L IY0\nSTANLEY'S  S T AE1 N - L IY0 Z\nSTANLEYTOWN  S T AE1 N - L IY0 - T AW2 N\nSTANLINE  S T AE1 N - L AY2 N\nSTANLY  S T AE1 N - L IY0\nSTANMORE  S T AE1 N - M AO0 R\nSTANN  S T AE1 N\nSTANNARD  S T AE1 - N ER0 D\nSTANNIE  S T AE1 - N IY0\nSTANO  S T AA1 - N OW0\nSTANPHILL  S T AE1 N P - HH IH2 L\nSTANPHILL(2)  S T AE1 M P - HH IH2 L\nSTANSBERRY  S T AE1 N S - B EH2 - R IY0\nSTANSBURY  S T AE1 N S - B EH0 - R IY0\nSTANSEL  S T AE1 N - S AH0 L\nSTANSELL  S T AE1 N - S AH0 L\nSTANSFIELD  S T AE1 N S - F IY0 L D\nSTANSKY  S T AE1 N S - K IY0\nSTANT  S T AE1 N T\nSTANTON  S T AE1 N - T AH0 N\nSTANWAY  S T AE1 N - W EY2\nSTANWICK  S T AE1 N - W IH0 K\nSTANWOOD  S T AE1 N - W UH2 D\nSTANZA  S T AE1 N - Z AH0\nSTANZAS  S T AE1 N - Z AH0 Z\nSTANZIONE  S T AA0 N - Z IY0 - OW1 - N IY0\nSTAPEL  S T AE1 - P AH0 L\nSTAPF  S T AE1 P F\nSTAPLE  S T EY1 - P AH0 L\nSTAPLED  S T EY1 - P AH0 L D\nSTAPLER  S T EY1 - P AH0 - L ER0\nSTAPLER(2)  S T EY1 P - L ER0\nSTAPLERS  S T EY1 - P AH0 - L ER0 Z\nSTAPLERS(2)  S T EY1 P - L ER0 Z\nSTAPLES  S T EY1 - P AH0 L Z\nSTAPLETON  S T EY1 - P AH0 L - T AH0 N\nSTAPLEY  S T AE1 P - L IY0\nSTAPLING  S T EY1 - P AH0 L - IH0 NG\nSTAPLING(2)  S T EY1 - P L IH0 NG\nSTAPP  S T AE1 P\nSTAR  S T AA1 R\nSTAR'S  S T AA1 R Z\nSTARACE  S T AA0 - R AA1 - CH IY0\nSTARBIRD  S T AA1 R - B ER2 D\nSTARBOARD  S T AA1 R - B ER0 D\nSTARBOARDS  S T AA1 R - B ER0 R D Z\nSTARBOARDS(2)  S T AA1 R - B AO2 R D Z\nSTARBUCK  S T AA1 R - B AH2 K\nSTARBUCK'S  S T AA1 R - B AH2 K S\nSTARBUCKS  S T AA1 R - B AH2 K S\nSTARCEVICH  S T AA1 R - S IH0 - V IH0 CH\nSTARCH  S T AA1 R CH\nSTARCHED  S T AA1 R CH T\nSTARCHER  S T AA1 R - CH ER0\nSTARCHES  S T AA1 R - CH IH0 Z\nSTARCHLIKE  S T AA1 R CH - L AY2 K\nSTARCHY  S T AA1 R - CH IY0\nSTARCK  S T AA1 R K\nSTARCKMANN  S T AA1 R K - M AH0 N\nSTARCRAFT  S T AA1 R - K R AE2 F T\nSTARCROSS  S T AA1 R - K R AO2 S\nSTARDEL  S T AA1 R - D EH2 L\nSTARDENT  S T AA1 R - D EH2 N T\nSTARDOM  S T AA1 R - D AH0 M\nSTARDUST  S T AA1 R - D AH2 S T\nSTARE  S T EH1 R\nSTARED  S T EH1 R D\nSTARER  S T EH1 - R ER0\nSTARES  S T EH1 R Z\nSTARFISH  S T AA1 R - F IH2 SH\nSTARGATE  S T AA1 R - G EY2 T\nSTARGATES  S T AA1 R - G EY2 T S\nSTARGAZER  S T AA1 R - G EY2 - Z ER0\nSTARGAZERS  S T AA1 R - G EY2 - Z ER0 Z\nSTARIN  S T AE1 - R IH0 N\nSTARING  S T EH1 - R IH0 NG\nSTARK  S T AA1 R K\nSTARK'S  S T AA1 R K S\nSTARKE  S T AA1 R K\nSTARKEL  S T AA1 R - K AH0 L\nSTARKER  S T AA1 R - K ER0\nSTARKES  S T AA1 R K S\nSTARKEY  S T AA1 R - K IY2\nSTARKIST  S T AA1 R - K IH0 S T\nSTARKLY  S T AA1 R K - L IY0\nSTARKMAN  S T AA1 R K - M AH0 N\nSTARKNESS  S T AA1 R K - N IH0 S\nSTARKOVICH  S T AA1 R - K AH0 - V IH0 CH\nSTARKS  S T AA1 R K S\nSTARKWEATHER  S T AA1 R K - W EH2 - DH ER0\nSTARLET  S T AA1 R - L AH0 T\nSTARLETS  S T AA1 R - L AH0 T S\nSTARLIGHT  S T AA1 R - L AY2 T\nSTARLIKE  S T AA1 R - L AY2 K\nSTARLIN  S T AA1 R - L IH0 N\nSTARLING  S T AA1 R - L IH0 NG\nSTARLIPER  S T AA1 R - L IH0 - P ER0\nSTARLIT  S T AA1 R - L IH0 T\nSTARMAN  S T AA1 R - M AH0 N\nSTARMER  S T AA1 R - M ER0\nSTARN  S T AA1 R N\nSTARNER  S T AA1 R - N ER0\nSTARNES  S T AA1 R N Z\nSTARNS  S T AA1 R N Z\nSTARODUBSTEV  S T AA2 - R OW0 - D AH1 B - S T EH0 V\nSTARON  S T AE1 - R AH0 N\nSTARPLEX  S T AA1 R - P L EH2 K S\nSTARPOINTE  S T AA1 R - P OY2 N T\nSTARR  S T AA1 R\nSTARR'S  S T AA1 R Z\nSTARRED  S T AA1 R D\nSTARRETT  S T AE1 - R IH0 T\nSTARRING  S T AA1 - R IH0 NG\nSTARRS  S T AA1 R Z\nSTARRY  S T AA1 - R IY0\nSTARS  S T AA1 R Z\nSTARS'  S T AA1 R Z\nSTARSHIP  S T AA1 R - SH IH2 P\nSTARSIGHT  S T AA1 R - S AY2 T\nSTARSTREAM  S T AA1 R - S T R IY2 M\nSTARSTRUCK  S T AA1 R - S T R AH2 K\nSTART  S T AA1 R T\nSTART-UP  S T AA1 R T - AH2 P\nSTART-UPS  S T AA1 R T - AH1 P S\nSTARTED  S T AA1 R - T AH0 D\nSTARTED(2)  S T AA1 R - T IH0 D\nSTARTER  S T AA1 R - T ER0\nSTARTERS  S T AA1 R - T ER0 Z\nSTARTING  S T AA1 R - T IH0 NG\nSTARTLE  S T AA1 R - T AH0 L\nSTARTLED  S T AA1 R - T AH0 L D\nSTARTLES  S T AA1 R - T AH0 L Z\nSTARTLING  S T AA1 R T - L IH0 NG\nSTARTLINGLY  S T AA1 R T - L IH0 NG - L IY0\nSTARTS  S T AA1 R T S\nSTARTUP  S T AA1 R T - AH2 P\nSTARTUPS  S T AA1 R T - AH2 P S\nSTARVATION  S T AA0 R - V EY1 - SH AH0 N\nSTARVE  S T AA1 R V\nSTARVED  S T AA1 R V D\nSTARVING  S T AA1 R - V IH0 NG\nSTARWALT  S T AA1 R - W AH0 L T\nSTARWAVE  S T AA1 R - W EY2 V\nSTARY  S T EH1 - R IY0\nSTARZYK  S T AA1 R - Z IH0 K\nSTASH  S T AE1 SH\nSTASHED  S T AE1 SH T\nSTASHING  S T AE1 - SH IH0 NG\nSTASI  S T AA1 - S IY0\nSTASIAK  S T AA1 - S IY0 - AE0 K\nSTASIK  S T AA1 - S IH0 K\nSTASIO  S T AA1 - S IY0 - OW0\nSTASKO  S T AA1 - S K OW0\nSTASNEY  S T AE1 S - N IY0\nSTASNY  S T AE1 S - N IY0\nSTASSEN  S T AE1 - S AH0 N\nSTASSI  S T AE1 - S IY0\nSTASTNY  S T AE1 S T - N IY0\nSTASZAK  S T AA1 - SH AH0 K\nSTASZEWSKI  S T AH0 - SH EH1 F S - K IY0\nSTAT  S T AE1 T\nSTATE  S T EY1 T\nSTATE'S  S T EY1 T S\nSTATECRAFT  S T EY1 T - K R AE2 F T\nSTATED  S T EY1 - T AH0 D\nSTATED(2)  S T EY1 - T IH0 D\nSTATEHOOD  S T EY1 T - HH UH2 D\nSTATEHOUSE  S T EY1 T - HH AW2 S\nSTATEHOUSES  S T EY1 T - HH AW2 - S IH0 Z\nSTATELESS  S T EY1 T - L IH0 S\nSTATELY  S T EY1 T - L IY0\nSTATEMENT  S T EY1 T - M AH0 N T\nSTATEMENT'S  S T EY1 T - M AH0 N T S\nSTATEMENTS  S T EY1 T - M AH0 N T S\nSTATEN  S T AE1 - T AH0 N\nSTATER  S T EY1 - T ER0\nSTATER'S  S T EY1 - T ER0 Z\nSTATERS  S T EY1 - T ER0 Z\nSTATES  S T EY1 T S\nSTATES'  S T EY1 T S\nSTATESBOROUGH  S T EY1 T S - B AH0 - R OW0\nSTATESIDE  S T EY1 T - S AY1 D\nSTATESMAN  S T EY1 T S - M AH0 N\nSTATESMAN'S  S T EY1 T S - M AH0 N Z\nSTATESMANLIKE  S T AH0 - T EH1 S - M AH0 N - L AY2 K\nSTATESMANSHIP  S T EY1 T S - M AH0 N - SH IH2 P\nSTATESMEN  S T EY1 T S - M IH0 N\nSTATESWEST  S T EY2 T - S W EH1 S T\nSTATEWIDE  S T EY1 T - W AY2 D\nSTATHAM  S T AE1 - TH AH0 M\nSTATHIS  S T AE1 - TH IH0 S\nSTATHOPOULOS  S T AH0 - TH AA1 - P AH0 - L IH0 S\nSTATIC  S T AE1 - T IH0 K\nSTATING  S T EY1 - T IH0 NG\nSTATION  S T EY1 - SH AH0 N\nSTATION'S  S T EY1 - SH AH0 N Z\nSTATIONARY  S T EY1 - SH AH0 N - EH2 - R IY0\nSTATIONED  S T EY1 - SH AH0 N D\nSTATIONER  S T EY1 - SH AH0 N - ER0\nSTATIONERS  S T EY1 - SH AH0 N - ER0 Z\nSTATIONERY  S T EY1 - SH AH0 N - EH2 - R IY0\nSTATIONING  S T EY1 - SH AH0 N - IH0 NG\nSTATIONS  S T EY1 - SH AH0 N Z\nSTATIONS'  S T EY1 - SH AH0 N Z\nSTATISM  S T EY1 - T IH2 - Z AH0 M\nSTATIST  S T EY1 - T IH0 S T\nSTATISTIC  S T AH0 - T IH1 - S T IH0 K\nSTATISTICAL  S T AH0 - T IH1 - S T IH0 - K AH0 L\nSTATISTICALLY  S T AH0 - T IH1 - S T IH0 - K AH0 - L IY0\nSTATISTICALLY(2)  S T AH0 - T IH1 - S T IH0 K - L IY0\nSTATISTICIAN  S T AE2 - T AH0 - S T IH1 - SH AH0 N\nSTATISTICIANS  S T AE2 - T IH0 - S T IH1 - SH AH0 N Z\nSTATISTICS  S T AH0 - T IH1 - S T IH0 K S\nSTATISTICS'  S T AH0 - T IH1 - S T IH0 K S\nSTATISTS  S T EY1 - T IH0 S T S\nSTATISTS(2)  S T EY1 - T IH0 S S\nSTATISTS(3)  S T EY1 - T IH0 S\nSTATLER  S T AE1 T - L ER0\nSTATOIL  S T AH0 - T OY1 L\nSTATON  S T AE1 - T AH0 N\nSTATS  S T AE1 T S\nSTATTIN  S T AE1 - T IH0 N\nSTATTON  S T AE1 - T AH0 N\nSTATUARY  S T AE1 - CH UW0 - EH2 - R IY0\nSTATUE  S T AE1 - CH UW2\nSTATUES  S T AE1 - CH UW2 Z\nSTATUESQUE  S T AE2 - CH UW0 - EH1 S K\nSTATUETTE  S T AE2 - CH UW0 - EH1 T\nSTATUETTES  S T AE2 - CH UW0 - EH1 T S\nSTATUM  S T AE1 - T AH0 M\nSTATURE  S T AE1 - CH ER0\nSTATUS  S T AE1 - T AH0 S\nSTATUS(2)  S T EY1 - T AH0 S\nSTATUTE  S T AE1 - CH UW0 T\nSTATUTE'S  S T AE1 - CH UW0 T S\nSTATUTES  S T AE1 - CH UW0 T S\nSTATUTORILY  S T AE1 - CH AH0 - T AO2 - R AH0 - L IY0\nSTATUTORILY(2)  S T AE1 - CH Y UW0 - T AO2 - R AH0 - L IY0\nSTATUTORY  S T AE1 - CH AH0 - T AO2 - R IY0\nSTATZ  S T AE1 T S\nSTATZER  S T AE1 T - Z ER0\nSTATZER(2)  S T EY1 T - Z ER0\nSTAUB  S T AO1 B\nSTAUBER  S T AW1 - B ER0\nSTAUBIN  S T AW1 - B IH0 N\nSTAUBS  S T AO1 B Z\nSTAUCH  S T AO1 CH\nSTAUDACHER  S T AW1 - D AH0 - K ER0\nSTAUDE  S T AO1 D\nSTAUDER  S T AW1 - D ER0\nSTAUDINGER  S T AW1 - D IH0 - NG ER0\nSTAUDT  S T AO1 D T\nSTAUFF  S T AO1 F\nSTAUFFACHER  S T AW1 - F AH0 - K ER0\nSTAUFFER  S T AO1 - F ER0\nSTAUFFER'S  S T AO1 - F ER0 Z\nSTAUNCH  S T AO1 N CH\nSTAUNCHEST  S T AO1 N - CH AH0 S T\nSTAUNCHLY  S T AO1 N CH - L IY0\nSTAUNTON  S T AO1 N - T AH0 N\nSTAUP  S T AO1 P\nSTAUSS  S T AO1 S\nSTAUTER  S T AW1 - T ER0\nSTAVE  S T EY1 V\nSTAVED  S T EY1 V D\nSTAVELY  S T EY1 V - L IY0\nSTAVER  S T EY1 - V ER0\nSTAVES  S T EY1 V Z\nSTAVING  S T EY1 - V IH0 NG\nSTAVINOHA  S T AE0 - V IH0 - N OW1 - HH AH0\nSTAVOLA  S T AA0 - V OW1 - L AH0\nSTAVROPOULOS  S T AH0 - V R AA1 - P AH0 - L IH0 S\nSTAVROS  S T AH0 - V R OW1 Z\nSTAWICKI  S T AA0 - V IH1 T S - K IY0\nSTAWSKI  S T AA1 F S - K IY0\nSTAY  S T EY1\nSTAYED  S T EY1 D\nSTAYER  S T EY1 - ER0\nSTAYING  S T EY1 - IH0 NG\nSTAYNER  S T EY1 - N ER0\nSTAYOVER  S T EY1 - OW2 - V ER0\nSTAYOVERS  S T EY1 - OW2 - V ER0 Z\nSTAYS  S T EY1 Z\nSTAYTON  S T EY1 - T AH0 N\nSTDS  EH1 - S T IY1 - D IY1 Z\nSTDS(2)  EH1 - S T IY1 - D IY1 - EH1 S\nSTEAD  S T EH1 D\nSTEADFAST  S T EH1 D - F AE2 S T\nSTEADFASTLY  S T EH1 D - F AE2 S T - L IY0\nSTEADFASTNESS  S T EH1 D - F AE2 S T - N AH0 S\nSTEADHAM  S T EH1 D - HH AH0 M\nSTEADIED  S T EH1 - D IY0 D\nSTEADIER  S T EH1 - D IY0 - ER0\nSTEADILY  S T EH1 - D AH0 - L IY0\nSTEADINESS  S T EH1 - D IY0 - N IH0 S\nSTEADMAN  S T EH1 D - M AH0 N\nSTEADY  S T EH1 - D IY0\nSTEAGALL  S T IY1 - G AH0 L\nSTEAGLE  S T IY1 - G AH0 L\nSTEAK  S T EY1 K\nSTEAKHOUSE  S T EY1 K - HH AW2 S\nSTEAKHOUSES  S T EY1 K - HH AW2 - S IH0 Z\nSTEAKLEY  S T IY1 K - L IY0\nSTEAKS  S T EY1 K S\nSTEAL  S T IY1 L\nSTEALER  S T IY1 - L ER0\nSTEALEY  S T IY1 - L IY0\nSTEALING  S T IY1 - L IH0 NG\nSTEALS  S T IY1 L Z\nSTEALTH  S T EH1 L TH\nSTEALTHIES  S T EH1 L - TH IY0 Z\nSTEAM  S T IY1 M\nSTEAMBOAT  S T IY1 M - B OW2 T\nSTEAMBOATS  S T IY1 M - B OW2 T S\nSTEAMED  S T IY1 M D\nSTEAMER  S T IY1 - M ER0\nSTEAMERS  S T IY1 - M ER0 Z\nSTEAMILY  S T IY1 - M AH0 - L IY0\nSTEAMING  S T IY1 - M IH0 NG\nSTEAMROLLER  S T IY1 M - R OW2 - L ER0\nSTEAMROLLERED  S T IY1 M - R OW2 - L ER0 D\nSTEAMS  S T IY1 M Z\nSTEAMSHIP  S T IY1 M - SH IH2 P\nSTEAMY  S T IY1 - M IY0\nSTEAR  S T IH1 R\nSTEARIC  S T IY1 - R IH0 K\nSTEARMAN  S T IH1 R - M AH0 N\nSTEARN  S T ER1 N\nSTEARNE  S T ER1 N\nSTEARNS  S T ER1 N Z\nSTEARNS'S  S T ER1 N - Z IH0 Z\nSTEARS  S T IY1 R Z\nSTEBBINS  S T EH1 - B IH0 N Z\nSTEBER  S T IY1 - B ER0\nSTEBNER  S T EH1 B - N ER0\nSTEC  S T EH1 K\nSTECH  S T EH1 K\nSTECHER  S T EH1 - K ER0\nSTECHLER  S T EH1 K - L ER0\nSTECHSCHULTE  S T EH1 K - SH AH0 L T\nSTECK  S T EH1 K\nSTECKEL  S T EH1 - K AH0 L\nSTECKELBERG  S T EH1 - K AH0 L - B ER0 G\nSTECKER  S T EH1 - K ER0\nSTECKLEIN  S T EH1 K - L AY2 N\nSTECKLER  S T EH1 K - L ER0\nSTECKLEY  S T EH1 K - L IY0\nSTECKMAN  S T EH1 K - M AH0 N\nSTEDMAN  S T EH1 D - M AH0 N\nSTEEB  S T IY1 B\nSTEEBER  S T IY1 - B ER0\nSTEED  S T IY1 D\nSTEED'S  S T IY1 D Z\nSTEEDLEY  S T IY1 D - L IY0\nSTEEDMAN  S T IY1 D - M AH0 N\nSTEEG  S T IY1 G\nSTEEGE  S T IY1 JH\nSTEEGO  S T IY1 - G OW0\nSTEEL  S T IY1 L\nSTEEL'S  S T IY1 L Z\nSTEELCASE  S T IY1 L - K EY2 S\nSTEELE  S T IY1 L\nSTEELER  S T IY1 - L ER0\nSTEELERS  S T IY1 - L ER0 Z\nSTEELEY  S T IY1 - L IY0\nSTEELHEAD  S T IY1 L - HH EH2 D\nSTEELMAKER  S T IY1 L - M EY2 - K ER0\nSTEELMAKER'S  S T IY1 L - M EY2 - K ER0 Z\nSTEELMAKERS  S T IY1 L - M EY2 - K ER0 Z\nSTEELMAKERS'  S T IY1 L - M AH0 - K ER0 Z\nSTEELMAKING  S T IY1 L - M EY2 - K IH0 NG\nSTEELMAN  S T IY1 L - M AH0 N\nSTEELS  S T IY1 L Z\nSTEELWORKER  S T IY1 L - W ER2 - K ER0\nSTEELWORKERS  S T IY1 L - W ER2 - K ER0 Z\nSTEELWORKERS'  S T IY1 L - W ER0 - K ER0 Z\nSTEELWORKS  S T IY1 L - W ER2 K S\nSTEELY  S T IY1 - L IY0\nSTEEN  S T IY1 N\nSTEENBERGEN  S T IY1 N - B ER0 - G AH0 N\nSTEENBURGEN  S T IY1 N - B ER0 - G AH0 N\nSTEENKAMP  S T IY1 N - K AE2 M P\nSTEENKISTE  S T IY1 N - K IH2 S T\nSTEENROD  S T IY1 N - R AH0 D\nSTEENSMA  S T IY1 N Z - M AH0\nSTEENSON  S T IY1 N - S AH0 N\nSTEEP  S T IY1 P\nSTEEPED  S T IY1 P T\nSTEEPENED  S T IY1 - P AH0 N D\nSTEEPER  S T IY1 - P ER0\nSTEEPEST  S T IY1 - P AH0 S T\nSTEEPLE  S T IY1 - P AH0 L\nSTEEPLECHASE  S T IY1 - P AH0 L - CH EY2 S\nSTEEPLY  S T IY1 P - L IY0\nSTEEPNESS  S T IY1 P - N AH0 S\nSTEER  S T IH1 R\nSTEERE  S T IH1 R\nSTEERED  S T IH1 R D\nSTEERING  S T IH1 - R IH0 NG\nSTEERS  S T IH1 R Z\nSTEES  S T IY1 Z\nSTEEVER  S T IY1 - V ER0\nSTEEVES  S T IY1 V Z\nSTEFA  S T EH1 - F AH0\nSTEFAN  S T EH1 - F AA0 N\nSTEFANELLI  S T EH0 - F AA0 N - EH1 - L IY0\nSTEFANI  S T EH1 - F AH0 - N IY0\nSTEFANI'S  S T EH1 - F AH0 - N IY0 Z\nSTEFANIAK  S T IH0 - F AE1 - N IY0 - AE0 K\nSTEFANIC  S T IH0 - F AE1 - N IH0 K\nSTEFANICH  S T EH1 - F AH0 - N IH0 CH\nSTEFANICK  S T EH1 - F AH0 N - IH0 K\nSTEFANIE  S T EH1 - F AH0 - N IY0\nSTEFANIK  S T IH0 - F AE1 - N IH0 K\nSTEFANKO  S T IH0 - F AE1 NG - K OW0\nSTEFANO  S T EH1 - F AH0 - N OW0\nSTEFANOPOLIS  S T EH2 - F AH0 - N AO1 - P AH0 - L AH0 S\nSTEFANOWICZ  S T IH0 - F AE1 - N AH0 - V IH0 CH\nSTEFANSKI  S T IH0 - F AE1 N S - K IY0\nSTEFFAN  S T EH1 - F AH0 N\nSTEFFANCI  S T EH2 - F AA1 N - S IY0\nSTEFFE  S T EH1 F\nSTEFFEK  S T EH1 - F IH0 K\nSTEFFEL  S T EH1 - F AH0 L\nSTEFFEN  S T EH1 - F AH0 N\nSTEFFENHAGEN  S T EH1 - F IH0 N - HH AH0 - G AH0 N\nSTEFFENS  S T EH1 - F AH0 N Z\nSTEFFENSEN  S T EH1 - F IH0 N - S AH0 N\nSTEFFENSMEIER  S T EH1 - F IH0 N - S M AY0 - ER0\nSTEFFENSON  S T EH1 - F IH0 N - S AH0 N\nSTEFFES  S T EH1 F S\nSTEFFEY  S T EH1 - F IY0\nSTEFFI  S T EH1 - F IY0\nSTEFFIE  S T EH1 - F IY0\nSTEFFLER  S T EH1 F - L ER0\nSTEFFY  S T EH1 - F IY0\nSTEFKO  S T EH1 F - K OW0\nSTEFL  S T EH1 - F AH0 L\nSTEGALL  S T EH1 - G AH0 L\nSTEGE  S T IY1 JH\nSTEGEMAN  S T IY1 G - M AH0 N\nSTEGEMANN  S T IY1 G - M AH0 N\nSTEGEMEIER  S T EH1 G - M AY2 R\nSTEGENGA  S T EH0 - JH EH1 NG - G AH0\nSTEGER  S T IY1 - G ER0\nSTEGMAIER  S T EH1 G - M AY0 - ER0\nSTEGMAN  S T EH1 G - M AH0 N\nSTEGMANN  S T EH1 G - M AH0 N\nSTEGNER  S T EH1 G - N ER0\nSTEGOSAURUS  S T EH2 - G AH0 - S AO1 - R AH0 S\nSTEHLE  S T EH1 - HH AH0 L\nSTEHLIK  S T EH1 - L IH0 K\nSTEHLIN  S T EH1 - L IH0 N\nSTEHLING  S T EH1 - L IH0 NG\nSTEHMAN  S T EH1 - M AH0 N\nSTEHR  S T EH1 R\nSTEIB  S T IY1 B\nSTEICHEN  S T AY1 - K AH0 N\nSTEIDEL  S T AY1 - D AH0 L\nSTEIDINGER  S T AY1 - D IH0 - NG ER0\nSTEIDL  S T IY1 - D AH0 L\nSTEIDLE  S T IY1 - D AH0 L\nSTEIDTMANN  S T AY1 T - M AH0 N\nSTEIER  S T AY1 - ER0\nSTEIG  S T IY1 G\nSTEIGER  S T AY1 - G ER0\nSTEIGERWALD  S T AY1 - G ER0 - W AO2 L D\nSTEIGERWALT  S T AY1 - G ER0 - W AH0 L T\nSTEIL  S T IY1 L\nSTEIMAN  S T AY1 - M AH0 N\nSTEIMEL  S T AY1 - M AH0 L\nSTEIMER  S T AY1 - M ER0\nSTEIMLE  S T IY1 - M AH0 L\nSTEIN  S T AY1 N\nSTEIN'S  S T AY1 N Z\nSTEINACKER  S T AY1 - N AE0 - K ER0\nSTEINBACH  S T AY1 N - B AA2 K\nSTEINBACHER  S T AY1 N - B AA2 - K ER0\nSTEINBACK  S T AY1 N - B AE2 K\nSTEINBAUER  S T AY1 N - B AW0 - ER0\nSTEINBAUGH  S T AY1 N - B AW0\nSTEINBECK  S T AY1 N - B EH2 K\nSTEINBECK'S  S T AY1 N - B EH2 K S\nSTEINBERG  S T AY1 N - B ER0 G\nSTEINBERG'S  S T AY1 N - B ER0 G Z\nSTEINBERGEN  S T AY1 N - B AH0 R - G AH0 N\nSTEINBERGER  S T AY1 N - B ER0 - G ER0\nSTEINBOCK  S T AY1 N - B AA2 K\nSTEINBORN  S T AY1 N - B AO1 R N\nSTEINBRECHER  S T AY1 N - B R EH2 - K ER0\nSTEINBRENNER  S T AY1 N - B R EH2 - N ER0\nSTEINBRINK  S T AY1 N - B R IH2 NG K\nSTEINEM  S T AY1 - N AH0 M\nSTEINER  S T AY1 - N ER0\nSTEINER'S  S T AY1 - N ER0 Z\nSTEINERT  S T AY1 - N ER0 T\nSTEINES  S T AY1 N Z\nSTEINFELD  S T AY1 N - F EH2 L D\nSTEINFELDT  S T AY1 N - F EH2 L T\nSTEINGUT  S T AY1 N - G AH2 T\nSTEINHAGEN  S T AY1 N - HH AE0 - G AH0 N\nSTEINHARDT  S T AY1 N - HH AA2 R T\nSTEINHARDT'S  S T AY1 N - HH AA0 R T S\nSTEINHART  S T AY1 N - HH AA2 R T\nSTEINHAUER  S T AY1 N - HH AW0 - ER0\nSTEINHAUS  S T AY1 N - HH AW2 S\nSTEINHAUSER  S T AY1 N - HH AW2 - Z ER0\nSTEINHILBER  S T AY1 N - HH IH2 L - B ER0\nSTEINHOFF  S T AY1 N - HH AO2 F\nSTEINHORST  S T AY1 N - HH AO0 R S T\nSTEININGER  S T AY1 - N IH0 - NG ER0\nSTEINKAMP  S T AY1 NG - K AE0 M P\nSTEINKE  S T AY1 NG K\nSTEINKRAUS  S T AY1 NG - K R AW0 Z\nSTEINKRAUSS  S T AY1 N - K R AW2 S\nSTEINKUEHLER  S T AY1 N - K Y UW2 - L ER0\nSTEINLE  S T AY1 - N AH0 L\nSTEINMAN  S T AY1 N - M AH0 N\nSTEINMANN  S T AY1 N - M AH0 N\nSTEINMETZ  S T AY1 N - M EH0 T S\nSTEINMEYER  S T AY1 N - M AY0 - ER0\nSTEINMILLER  S T AY1 N - M IH2 - L ER0\nSTEINROE  S T AY1 N - R OW2\nSTEINWAY  S T AY1 N - W EY2\nSTEINWAY'S  S T AY1 N - W EY2 Z\nSTEITZ  S T IY1 T S\nSTEJSKAL  S T EH1 JH - S K AH0 L\nSTEKETEE  S T EH1 - K IH0 - T IY0\nSTEKLY  S T EH1 K - L IY0\nSTELCO  S T EH1 L - K OW0\nSTELIAN  S T IY1 - L IY0 - AH0 N\nSTELL  S T EH1 L\nSTELLA  S T EH1 - L AH0\nSTELLA'S  S T EH1 - L AH0 Z\nSTELLAR  S T EH1 - L ER0\nSTELLARTON  S T EH1 - L ER0 - T AH0 N\nSTELLATO  S T EH0 - L AA1 - T OW0\nSTELLE  S T EH1 L\nSTELLENBOSCH  S T EH1 - L AH0 N - B AO2 SH\nSTELLER  S T EH1 - L ER0\nSTELLHORN  S T EH1 L - HH ER0 N\nSTELLING  S T EH1 - L IH0 NG\nSTELLJES  S T EY1 - L Y EH0 S\nSTELLMACH  S T EH1 L - M AH0 K\nSTELLMACHER  S T EH1 L - M AH0 - K ER0\nSTELLMAN  S T EH1 L - M AH0 N\nSTELLO  S T EH1 - L OW0\nSTELLY  S T EH1 - L IY0\nSTELMACH  S T EH1 L - M AH0 K\nSTELMACK  S T EH1 L - M AH0 K\nSTELOFF  S T EH1 - L AO0 F\nSTELTER  S T EH1 L - T ER0\nSTELTZ  S T EH1 L T S\nSTELZER  S T EH1 L - Z ER0\nSTELZNER  S T EH1 L Z - N ER0\nSTEM  S T EH1 M\nSTEMBERG  S T EH1 M - B ER0 G\nSTEMBRIDGE  S T EH1 M - B R IH2 JH\nSTEMEN  S T EH1 - M AH0 N\nSTEMLER  S T EH1 M - L ER0\nSTEMLIKE  S T EH1 M - L AY2 K\nSTEMM  S T EH1 M\nSTEMMED  S T EH1 M D\nSTEMMER  S T EH1 - M ER0\nSTEMMING  S T EH1 - M IH0 NG\nSTEMMLER  S T EH1 M - L ER0\nSTEMPEL  S T EH1 M - P AH0 L\nSTEMPEL'S  S T EH1 M - P AH0 L Z\nSTEMPER  S T EH1 M - P ER0\nSTEMPIEN  S T EH1 M - P IY0 N\nSTEMPLE  S T EH1 M - P AH0 L\nSTEMPLER  S T EH1 M - P L ER0\nSTEMPLER'S  S T EH1 M - P L ER0 Z\nSTEMPOSTS  S T EH1 M - P OW2 S T S\nSTEMPOSTS(2)  S T EH1 M - P OW2 S S\nSTEMPOSTS(3)  S T EH1 M - P OW2 S\nSTEMS  S T EH1 M Z\nSTEN  S T EH1 N\nSTENA  S T IY1 - N AH0\nSTENA(2)  S T EH1 - N AH0\nSTENA(3)  S T EY1 - N AH0\nSTENBERG  S T EH1 N - B ER0 G\nSTENCEL  S T EH1 N - S AH0 L\nSTENCH  S T EH1 N CH\nSTENCIL  S T EH1 N - S IH0 L\nSTENCILED  S T EH1 N - S IH0 L D\nSTENCILING  S T EH1 N - S IH0 - L IH0 NG\nSTENCILING(2)  S T EH1 N - S L IH0 NG\nSTENDAL  S T EH1 N - D AH0 L\nSTENDER  S T EH1 N - D ER0\nSTENDIG  S T EH1 N - D IH0 G\nSTENE  S T IY1 N\nSTENERSON  S T EH1 - N ER0 - S AH0 N\nSTENGEL  S T EH1 NG - G AH0 L\nSTENGER  S T EH1 N - JH ER0\nSTENGLEIN  S T IH1 NG - L AY0 N\nSTENHOLM  S T EH1 N - HH OW2 L M\nSTENHOUSE  S T EH1 N - HH AW2 S\nSTENNER  S T EH1 - N ER0\nSTENNETT  S T EH1 - N IH0 T\nSTENNIS  S T EH1 - N IH0 S\nSTENO  S T EH1 - N OW0\nSTENOGRAPHER  S T EH0 - N AH1 - G R AH0 - F ER0\nSTENOGRAPHIC  S T EH2 - N AH0 - G R AE1 - F IH0 K\nSTENQUIST  S T EH1 N - K W IH2 S T\nSTENSETH  S T EH1 N - S IH0 TH\nSTENSLAND  S T EH1 N S - L AH0 N D\nSTENSON  S T EH1 N - S AH0 N\nSTENSRUD  S T EH1 N - S R AH0 D\nSTENSTROM  S T EH1 N - S T R AH0 M\nSTENT  S T EH1 N T\nSTENTOR  S T EH1 N - T ER0\nSTENTORS  S T EH1 N - T ER0 Z\nSTENTZ  S T EH1 N T S\nSTENY  S T EH1 - N IY0\nSTENZ  S T EH1 N Z\nSTENZEL  S T EH1 N - Z AH0 L\nSTEP  S T EH1 P\nSTEPAN  S T EH1 - P AH0 N\nSTEPANAKERT  S T AH0 - P AE1 - N AH0 - K ER0 T\nSTEPANEK  S T EH1 - P AH0 - N IH0 K\nSTEPANIAN  S T IH0 - P EY1 - N IY0 - AH0 N\nSTEPANIAN'S  S T IH0 - P EY1 - N IY0 - AH0 N Z\nSTEPANSKI  S T IH0 - P AE1 N S - K IY0\nSTEPCHILD  S T EH1 P - CH AY2 L D\nSTEPCHILDREN  S T EH1 P - CH IH1 L - D R AH0 N\nSTEPDAUGHTER  S T EH1 P - D AO2 - T ER0\nSTEPDAUGHTERS  S T EH1 P - D AO2 - T ER0 Z\nSTEPFATHER  S T EH1 P - F AA2 - DH ER0\nSTEPH  S T EH1 F\nSTEPHA  S T EH1 - F AH0\nSTEPHAN  S T EH1 - F AH0 N\nSTEPHANA  S T EH0 - F AA1 - N AH0\nSTEPHANE  S T EH0 - F AA1 N\nSTEPHANI  S T EH1 - F AH0 - N IY0\nSTEPHANIA  S T IH0 - F AE1 - N IY0 - AH0\nSTEPHANIE  S T EH1 - F AH0 - N IY0\nSTEPHANOPOULOS  S T EH2 - F AH0 - N AA1 - P AH0 - L AH0 S\nSTEPHANOPOULOS'  S T EH2 - F AH0 - N AA1 - P AH0 - L AH0 S\nSTEPHANOPOULOS'S  S T EH2 - F AH0 - N AA1 - P AH0 - L AH0 - S IH0 S\nSTEPHANS  S T EH1 - F AH0 N Z\nSTEPHANY  S T EH1 - F AH0 - N IY0\nSTEPHEN  S T IY1 - V AH0 N\nSTEPHEN'S  S T IY1 - V AH0 N Z\nSTEPHEN'S(2)  S T EH1 - F AH0 N Z\nSTEPHEN(2)  S T EH1 - F AH0 N\nSTEPHENS  S T IY1 - V AH0 N Z\nSTEPHENS'S  S T IY1 - V IH0 N - Z IH0 Z\nSTEPHENS(2)  S T EH1 - F AH0 N Z\nSTEPHENSON  S T IY1 - V AH0 N - S AH0 N\nSTEPHENVILLE  S T IY1 - V IH0 N - V IH2 L\nSTEPIEN  S T EH1 - P IY0 - AH0 N\nSTEPKA  S T EH1 P - K AH0\nSTEPLADDER  S T EH1 P - L AE2 - D ER0\nSTEPLADDERS  S T EH1 P - L AE2 - D ER0 Z\nSTEPMOTHER  S T EH1 P - M AH2 - DH ER0\nSTEPNEY  S T EH1 P - N IY0\nSTEPP  S T EH1 P\nSTEPPE  S T EH1 P\nSTEPPED  S T EH1 P T\nSTEPPEL  S T EH1 - P AH0 L\nSTEPPENWOLF  S T EH1 - P AH0 N - W UH2 L F\nSTEPPER  S T EH1 - P ER0\nSTEPPERS  S T EH1 - P ER0 Z\nSTEPPES  S T EH1 P S\nSTEPPIN'  S T EH1 - P IH0 N\nSTEPPING  S T EH1 - P IH0 NG\nSTEPPINGSTONE  S T EH1 - P IH0 NG - S T OW2 N\nSTEPS  S T EH1 P S\nSTEPSISTER  S T EH1 P - S IH2 - S T ER0\nSTEPSISTERS  S T EH1 P - S IH2 - S T ER0 Z\nSTEPSON  S T EH1 P - S AH2 N\nSTEPTOE  S T EH1 P - T OW2\nSTERBA  S T EH1 R - B AH0\nSTERBENZ  S T ER1 - B IH0 N S\nSTERCHI  S T EH1 R - K IY0\nSTEREO  S T EH1 - R IY0 - OW2\nSTEREOGRAPHIC  S T EH2 - R IY0 - AH0 - G R AE1 - F IH0 K\nSTEREOLAB  S T EH1 - IY0 - OW0 - L AE2 B\nSTEREOMICROSCOPE  S T EH2 - R IY0 - OW0 - M AY1 - K R AH0 S - K OW0 P\nSTEREOS  S T EH1 - R IY0 - OW2 Z\nSTEREOTYPE  S T EH1 - R IY0 - AH0 - T AY2 P\nSTEREOTYPE(2)  S T EH1 - R IY0 - OW0 - T AY2 P\nSTEREOTYPED  S T EH1 - R IY0 - AH0 - T AY2 P T\nSTEREOTYPED(2)  S T EH1 - R IY0 - OW0 - T AY2 P T\nSTEREOTYPES  S T EH1 - R IY0 - AH0 - T AY2 P S\nSTEREOTYPES(2)  S T EH1 - R IY0 - OW0 - T AY2 P S\nSTEREOTYPICAL  S T EH2 - R IY0 - OW0 - T IH1 - P IH0 - K AH0 L\nSTEREOTYPICAL(2)  S T EH2 - R IY0 - AH0 - T IH1 - P IH0 - K AH0 L\nSTEREOTYPING  S T EH1 - R IY0 - AH0 - T AY2 - P IH0 NG\nSTEREOTYPING(2)  S T EH1 - R IY0 - OW0 - T AY2 - P IH0 NG\nSTERETT  S T EH1 - R IH0 T\nSTERETT'S  S T EH1 - R AH0 T S\nSTERILE  S T EH1 - R AH0 L\nSTERILITY  S T ER0 - IH1 - L IH0 - T IY0\nSTERILIZATION  S T EH2 - R AH0 - L AH0 - Z EY1 - SH AH0 N\nSTERILIZATION(2)  S T EH2 - R AH0 - L IH0 - Z EY1 - SH AH0 N\nSTERILIZATIONS  S T EH2 - R AH0 - L AH0 - Z EY1 - SH AH0 N Z\nSTERILIZATIONS(2)  S T EH2 - R AH0 - L IH0 - Z EY1 - SH AH0 N Z\nSTERILIZE  S T EH1 - R AH0 - L AY2 Z\nSTERILIZED  S T EH1 - R AH0 - L AY2 Z D\nSTERILIZER  S T EH1 - R AH0 - L AY2 - Z ER0\nSTERILIZERS  S T EH1 - R AH0 - L AY2 - Z ER0 Z\nSTERILIZES  S T EH1 - R AH0 - L AY2 - Z IH0 Z\nSTERILIZING  S T EH1 - R AH0 - L AY2 - Z IH0 NG\nSTERK  S T ER1 K\nSTERKEL  S T ER1 - K AH0 L\nSTERLE  S T AO1 - R AH0 L\nSTERLING  S T ER1 - L IH0 NG\nSTERLING'S  S T ER1 - L IH0 NG Z\nSTERMAN  S T ER1 - M AH0 N\nSTERMER  S T ER1 - M ER0\nSTERN  S T ER1 N\nSTERN'S  S T ER1 N Z\nSTERNBACH  S T ER1 N - B AA0 K\nSTERNBERG  S T ER1 N - B ER0 G\nSTERNBERGER  S T ER1 N - B ER0 - G ER0\nSTERNE  S T ER1 N\nSTERNEM  S T ER1 - N EH0 M\nSTERNER  S T ER1 - N ER0\nSTERNEST  S T ER1 - N AH0 S T\nSTERNFELD  S T ER1 N - F EH0 L D\nSTERNHAGEN  S T ER1 N - HH AH0 - G AH0 N\nSTERNLY  S T ER1 N - L IY0\nSTERNNESS  S T ER1 N - N AH0 S\nSTERNNESS(2)  S T ER1 - N AH0 S\nSTERNPOST  S T ER1 N - P OW2 S T\nSTERNPOSTS  S T ER1 N - P OW2 S T S\nSTERNPOSTS(2)  S T ER1 N - P OW2 S S\nSTERNPOSTS(3)  S T ER1 N - P OW2 S\nSTERNS  S T ER1 N Z\nSTEROID  S T ER0 - OY1 D\nSTEROIDS  S T EH1 - R OY0 D Z\nSTERR  S T EH1 R\nSTERRETT  S T EH1 - R IH0 T\nSTERRY  S T EH1 - R IY0\nSTET  S T EH1 T\nSTETHEM  S T EH1 - TH AH0 M\nSTETHEM(2)  S T EH1 - T AH0 M\nSTETHOSCOPE  S T EH1 - TH AH0 S - K OW2 P\nSTETHOSCOPES  S T EH1 - TH AH0 S - K OW2 P S\nSTETLER  S T EH1 T - L ER0\nSTETSON  S T EH1 T - S AH0 N\nSTETTER  S T EH1 - T ER0\nSTETTLER  S T EH1 T - L ER0\nSTETTNER  S T EH1 T - N ER0\nSTETZ  S T EH1 T S\nSTETZEL  S T EH1 T - Z AH0 L\nSTETZER  S T EH1 T - Z ER0\nSTEUART  S T OY1 - AA0 R T\nSTEUBEN  S T Y UW1 - B IH0 N\nSTEUBEN(2)  S T UW1 - B IH0 N\nSTEUBENVILLE  S T UW1 - B AH0 N - V IH2 L\nSTEUBER  S T OY1 - B ER0\nSTEUCK  S T UW1 K\nSTEUER  S T OY1 - ER0\nSTEUERWALD  S T OY1 - ER0 - W AO0 L D\nSTEURER  S T ER1 - ER0\nSTEUVER  S T UW1 - V ER0\nSTEVANA  S T IH0 - V AE1 - N AH0\nSTEVE  S T IY1 V\nSTEVE'S  S T IY1 V Z\nSTEVEDORE  S T IY1 - V AH0 - D AO2 R\nSTEVEDORING  S T IY1 - V AH0 - D AO2 - R IH0 NG\nSTEVEN  S T IY1 - V AH0 N\nSTEVEN'S  S T IY1 - V AH0 N Z\nSTEVENA  S T EH1 - V IH0 - N AH0\nSTEVENS  S T IY1 - V AH0 N Z\nSTEVENS'  S T IY1 - V AH0 N Z\nSTEVENS'S  S T IY1 - V AH0 N - Z AH0 Z\nSTEVENS'S(2)  S T IY1 - V AH0 N - Z IH0 Z\nSTEVENSON  S T IY1 - V AH0 N - S AH0 N\nSTEVER  S T IY1 - V ER0\nSTEVERSON  S T EH1 - V ER0 - S AH0 N\nSTEVES  S T IY1 V Z\nSTEVESON  S T EH1 - V IH0 - S AH0 N\nSTEVICK  S T EH1 - V IH0 K\nSTEVIE  S T IY1 - V IY0\nSTEVISON  S T EH1 - V IH0 - S AH0 N\nSTEW  S T UW1\nSTEW'S  S T UW1 Z\nSTEWARD  S T UW1 - ER0 D\nSTEWARDESS  S T UW1 - ER0 - D AH0 S\nSTEWARDESSES  S T UW1 - ER0 - D AH0 - S IH0 Z\nSTEWARDS  S T UW1 - ER0 D Z\nSTEWARDSHIP  S T UW1 - ER0 D - SH IH2 P\nSTEWART  S T UW1 - ER0 T\nSTEWART'S  S T UW1 - ER0 T S\nSTEWED  S T UW1 D\nSTEWING  S T UW1 - IH0 NG\nSTEWS  S T UW1 Z\nSTEYER  S T EY1 - ER0\nSTIBEL  S T IH1 - B AH0 L\nSTICE  S T AY1 S\nSTICH  S T IH1 CH\nSTICHA  S T IH1 - CH AH0\nSTICHNOTH  S T IH1 K - N AA2 TH\nSTICHT  S T IH1 K T\nSTICHTER  S T IH1 K - T ER0\nSTICK  S T IH1 K\nSTICKA  S T IH1 - K AH0\nSTICKBALL  S T IH1 K - B AO2 L\nSTICKEL  S T IH1 - K AH0 L\nSTICKELS  S T IH1 - K AH0 L Z\nSTICKER  S T IH1 - K ER0\nSTICKERS  S T IH1 - K ER0 Z\nSTICKIER  S T IH1 - K IY0 - ER0\nSTICKIEST  S T IH1 - K IY0 - AH0 S T\nSTICKING  S T IH1 - K IH0 NG\nSTICKLAND  S T IH1 K - L AH0 N D\nSTICKLE  S T IH1 - K AH0 L\nSTICKLER  S T IH1 - K AH0 - L ER0\nSTICKLER(2)  S T IH1 - K L ER0\nSTICKLES  S T IH1 - K AH0 L Z\nSTICKLEY  S T IH1 K - L IY0\nSTICKNEY  S T IH1 K - N IY0\nSTICKS  S T IH1 K S\nSTICKTIGHT  S T IH1 K - T AY2 T\nSTICKTIGHTS  S T IH1 K - T AY2 T S\nSTICKY  S T IH1 - K IY0\nSTIDD  S T IH1 D\nSTIDHAM  S T IH1 D - HH AH0 M\nSTIEBEL  S T IY1 - B AH0 L\nSTIEBER  S T IY1 - B ER0\nSTIEF  S T IY1 F\nSTIEFEL  S T IY1 - F AH0 L\nSTIEFELHAGEN  S T IY1 - F AH0 L - HH EY2 - G AH0 N\nSTIEFELHAGEN(2)  S T AY1 - F AH0 L - HH EY2 - G AH0 N\nSTIEFVATER  S T IY1 F - V AH0 - T ER0\nSTIEG  S T IY1 G\nSTIEGEMEIER  S T IY1 - JH AH0 - M AY2 R\nSTIEGLER  S T IY1 G - L ER0\nSTIEGLITZ  S T IY1 - G L IH0 T S\nSTIEHL  S T IY1 L\nSTIENS  S T IY1 N Z\nSTIER  S T AY1 - ER0\nSTIERS  S T AY1 - ER0 Z\nSTIERWALT  S T IH1 R - W AH0 L T\nSTIEVE  S T IY1 V\nSTIFEL  S T IH1 - F AH0 L\nSTIFF  S T IH1 F\nSTIFFED  S T IH1 F T\nSTIFFEL  S T IH1 - F AH0 L\nSTIFFEN  S T IH1 - F AH0 N\nSTIFFENED  S T IH1 - F AH0 N D\nSTIFFENER  S T IH1 - F AH0 - N ER0\nSTIFFENING  S T IH1 - F AH0 N - IH0 NG\nSTIFFENING(2)  S T IH1 F - N IH0 NG\nSTIFFENS  S T IH1 - F AH0 N Z\nSTIFFER  S T IH1 - F ER0\nSTIFFEST  S T IH1 - F AH0 S T\nSTIFFLER  S T IH1 F - L ER0\nSTIFFLY  S T IH1 F - L IY0\nSTIFFNESS  S T IH1 F - N AH0 S\nSTIFFS  S T IH1 F S\nSTIFLE  S T AY1 - F AH0 L\nSTIFLED  S T AY1 - F AH0 L D\nSTIFLES  S T AY1 - F AH0 L Z\nSTIFLING  S T AY1 - F L IH0 NG\nSTIFLING(2)  S T AY1 - F AH0 L - IH0 NG\nSTIFTER  S T IH1 F - T ER0\nSTIG  S T IH1 G\nSTIGALL  S T IH1 - G AH0 L\nSTIGER  S T AY1 - G ER0\nSTIGERS  S T AY1 - G ER0 Z\nSTIGLER  S T IH1 G - L ER0\nSTIGLITZ  S T IH1 G - L IH0 T S\nSTIGMA  S T IH1 G - M AH0\nSTIGMATISM  S T IH1 G - M AH0 - T IH2 - Z AH0 M\nSTIGMATIZE  S T IH1 G - M AH0 - T AY2 Z\nSTIGMATIZED  S T IH1 G - M AH0 - T AY2 Z D\nSTIGMATIZING  S T IH1 G - M AH0 - T AY2 - Z IH0 NG\nSTIHL  S T IH1 L\nSTIKA  S T IH1 - K AH0\nSTIKELEATHER  S T IH1 - K IH0 - L EH0 - DH ER0\nSTIKELEATHER(2)  S T IH1 - K L EH0 - DH ER0\nSTIKELEATHER(3)  S T AY1 - K L EH0 - DH ER0\nSTIL  S T IH1 L\nSTILE  S T AY1 L\nSTILES  S T AY1 L Z\nSTILETTO  S T AH0 - L EH1 - T OW0\nSTILETTOS  S T AH0 - L EH1 - T OW0 Z\nSTILL  S T IH1 L\nSTILLBORN  S T IH1 L - B AO1 R N\nSTILLE  S T IH1 L\nSTILLED  S T IH1 L D\nSTILLER  S T IH1 - L ER0\nSTILLER'S  S T IH1 - L ER0 Z\nSTILLEY  S T IH1 - L IY0\nSTILLINGER  S T IH1 - L IH0 - NG ER0\nSTILLINGS  S T IH1 - L IH0 NG Z\nSTILLION  S T IH1 - L Y AH0 N\nSTILLMAN  S T IH1 L - M AH0 N\nSTILLNESS  S T IH1 L - N AH0 S\nSTILLS  S T IH1 L Z\nSTILLSON  S T IH1 L - S AH0 N\nSTILLWAGON  S T IH1 L - W AE2 - G AH0 N\nSTILLWATER  S T IH1 L - W AO2 - T ER0\nSTILLWELL  S T IH1 L - W EH2 L\nSTILLWELL'S  S T IH1 L - W EH2 L Z\nSTILSON  S T IH1 L - S AH0 N\nSTILT  S T IH1 L T\nSTILTED  S T IH1 L - T IH0 D\nSTILTNER  S T IH1 L T - N ER0\nSTILTS  S T IH1 L T S\nSTILWELL  S T IH1 L - W EH2 L\nSTIMAC  S T IH1 - M AH0 K\nSTIMMEL  S T IH1 - M AH0 L\nSTIMPERT  S T IH1 M - P ER0 T\nSTIMPSON  S T IH1 M P - S AH0 N\nSTIMPY  S T IH1 M - P IY0\nSTIMSON  S T IH1 M - S AH0 N\nSTIMULANT  S T IH1 - M Y AH0 - L AH0 N T\nSTIMULANTS  S T IH1 - M Y AH0 - L AH0 N T S\nSTIMULATE  S T IH1 - M Y AH0 - L EY2 T\nSTIMULATED  S T IH1 - M Y AH0 - L EY2 - T AH0 D\nSTIMULATED(2)  S T IH1 - M Y AH0 - L EY2 - T IH0 D\nSTIMULATES  S T IH1 - M Y AH0 - L EY2 T S\nSTIMULATING  S T IH1 - M Y AH0 - L EY2 - T IH0 NG\nSTIMULATION  S T IH2 - M Y AH0 - L EY1 - SH AH0 N\nSTIMULATIVE  S T IH1 - M Y AH0 - L EY2 - T IH0 V\nSTIMULATOR  S T IH1 - M Y AH0 - L EY2 - T ER0\nSTIMULATORS  S T IH1 - M Y AH0 - L EY2 - T ER0 Z\nSTIMULI  S T IH1 - M Y AH0 - L AY2\nSTIMULUS  S T IH1 - M Y AH0 - L AH0 S\nSTINAR  S T AY1 - N AA0 R\nSTINCHCOMB  S T IH1 N CH - K AH0 M\nSTINCHFIELD  S T IH1 N CH - F IY0 L D\nSTINE  S T AY1 N\nSTINEBAUGH  S T IH1 - N IH0 - B AO0\nSTINEL  S T IH1 - N AH0 L\nSTINEL'S  S T IH1 - N AH0 L Z\nSTINEL'S(2)  S T IH2 - N EH1 L Z\nSTINEL(2)  S T IH2 - N EH1 L\nSTINEMAN  S T AY1 N - M AH0 N\nSTINER  S T AY1 - N ER0\nSTINES  S T AY1 N Z\nSTING  S T IH1 NG\nSTING'S  S T IH1 NG Z\nSTINGER  S T IH1 - NG ER0\nSTINGERS  S T IH1 - NG ER0 Z\nSTINGIER  S T IH1 N - JH IY0 - ER0\nSTINGINESS  S T IH1 N - JH IY0 - N IH0 S\nSTINGING  S T IH1 - NG IH0 NG\nSTINGLEY  S T IH1 NG - G L IY0\nSTINGS  S T IH1 NG Z\nSTINGY  S T IH1 N - JH IY0\nSTINK  S T IH1 NG K\nSTINKBUG  S T IH1 NG K - B AH0 G\nSTINKBUGS  S T IH1 NG K - B AH0 G Z\nSTINKERS  S T IH1 NG - K ER0 Z\nSTINKING  S T IH1 NG - K IH0 NG\nSTINKS  S T IH1 NG K S\nSTINKY  S T IH1 NG - K IY0\nSTINNETT  S T IH1 - N IH0 T\nSTINNETTE  S T IH0 - N EH1 T\nSTINSON  S T IH1 N - S AH0 N\nSTINT  S T IH1 N T\nSTINTS  S T IH1 N T S\nSTIPANOVICH  S T IH0 - P AE1 - N AH0 - V IH0 CH\nSTIPE  S T AY1 P\nSTIPEND  S T AY1 - P AH0 N D\nSTIPENDS  S T AY1 - P AH0 N D Z\nSTIPES  S T AY1 P S\nSTIPP  S T IH1 P\nSTIPULATE  S T IH1 - P Y AH0 - L EY2 T\nSTIPULATED  S T IH1 - P Y AH0 - L EY2 - T IH0 D\nSTIPULATES  S T IH1 - P Y AH0 - L EY2 T S\nSTIPULATING  S T IH1 - P Y AH0 - L EY2 - T IH0 NG\nSTIPULATION  S T IH2 - P Y AH0 - L EY1 - SH AH0 N\nSTIPULATIONS  S T IH2 - P Y AH0 - L EY1 - SH AH0 N Z\nSTIR  S T ER1\nSTIRES  S T AY1 R Z\nSTIREWALT  S T AO1 - R UW0 - AH0 L T\nSTIRLING  S T ER1 - L IH0 NG\nSTIRLING'S  S T ER1 - L IH0 NG Z\nSTIRN  S T ER1 N\nSTIRRED  S T ER1 D\nSTIRRING  S T ER1 - IH0 NG\nSTIRRINGS  S T ER1 - IH0 NG Z\nSTIRRUP  S T ER1 - AH0 P\nSTIRRUPS  S T ER1 - AH0 P S\nSTIRS  S T ER1 Z\nSTITCH  S T IH1 CH\nSTITCHED  S T IH1 CH T\nSTITCHES  S T IH1 - CH IH0 Z\nSTITCHING  S T IH1 - CH IH0 NG\nSTITELER  S T AY1 T - L ER0\nSTITELY  S T AY1 T - L IY0\nSTITES  S T AY1 T S\nSTITH  S T IH1 TH\nSTITT  S T IH1 T\nSTITZ  S T IH1 T S\nSTITZEL  S T IH1 T - Z AH0 L\nSTITZER  S T IH1 T - Z ER0\nSTIVER  S T AY1 - V ER0\nSTIVERS  S T AY1 - V ER0 Z\nSTIVERSON  S T IH1 - V ER0 - S AH0 N\nSTIVORIC  S T IH0 - V AO1 - R IH0 K\nSTOBAUGH  S T AA1 - B AO0\nSTOBBE  S T AA1 B\nSTOBER  S T OW1 - B ER0\nSTOBIE  S T AA1 - B IY0\nSTOCK  S T AA1 K\nSTOCK'S  S T AA1 K S\nSTOCKARD  S T AA1 - K ER0 D\nSTOCKBRIDGE  S T AA1 K - B R IH0 JH\nSTOCKBROKER  S T AA1 K - B R OW2 - K ER0\nSTOCKBROKER'S  S T AA1 K - B R OW2 - K ER0 Z\nSTOCKBROKERAGE  S T AA1 K - B R OW2 - K ER0 - IH0 JH\nSTOCKBROKERAGES  S T AA1 K - B R OW2 - K ER0 - IH0 - JH IH0 Z\nSTOCKBROKERS  S T AA1 K - B R OW2 - K ER0 Z\nSTOCKBROKERS'  S T AA1 K - B R OW2 - K ER0 Z\nSTOCKBROKING  S T AA1 K - B R OW2 - K IH0 NG\nSTOCKBURGER  S T AA1 K - B ER0 - G ER0\nSTOCKDALE  S T AA1 K - D EY2 L\nSTOCKDALE'S  S T AA1 K - D EY2 L Z\nSTOCKE  S T AA1 K\nSTOCKED  S T AA1 K T\nSTOCKEL  S T AA1 - K AH0 L\nSTOCKER  S T AA1 - K ER0\nSTOCKERT  S T AA1 - K ER0 T\nSTOCKETT  S T AA1 - K IH0 T\nSTOCKFORD  S T AA1 K - F ER0 D\nSTOCKHAM  S T AA1 K - HH AH0 M\nSTOCKHAUSEN  S T AA1 K - HH AW2 - Z AH0 N\nSTOCKHOLDER  S T AA1 K - HH OW2 L - D ER0\nSTOCKHOLDERS  S T AA1 K - HH OW2 L - D ER0 Z\nSTOCKHOLDERS'  S T AA1 K - HH OW2 L - D ER0 Z\nSTOCKHOLDING  S T AA1 K - HH OW2 L - D IH0 NG\nSTOCKHOLDINGS  S T AA1 K - HH OW2 L - D IH0 NG Z\nSTOCKHOLM  S T AA1 K - HH OW2 L M\nSTOCKHOLM'S  S T AA1 K - HH OW2 L M Z\nSTOCKING  S T AA1 - K IH0 NG\nSTOCKINGER  S T AA1 - K IH0 - NG ER0\nSTOCKINGS  S T AA1 - K IH0 NG Z\nSTOCKLEY  S T AA1 K - L IY0\nSTOCKMAN  S T AA1 K - M AH0 N\nSTOCKMAN'S  S T AA1 K - M AE2 N Z\nSTOCKMARKET  S T AA1 K - M AA2 R - K IH0 T\nSTOCKPILE  S T AA1 K - P AY2 L\nSTOCKPILED  S T AA1 K - P AY2 L D\nSTOCKPILES  S T AA1 K - P AY2 L Z\nSTOCKPILING  S T AA1 K - P AY2 - L IH0 NG\nSTOCKROOM  S T AA1 K - R UW2 M\nSTOCKS  S T AA1 K S\nSTOCKS'  S T AA1 K S\nSTOCKSDALE  S T AA1 K S - D EY2 L\nSTOCKSLAGER  S T AA1 K S - L EY0 - G ER0\nSTOCKSTILL  S T AA1 K - S T IH2 L\nSTOCKTON  S T AA1 K - T AH0 N\nSTOCKWELL  S T AA1 K - W EH2 L\nSTOCKY  S T AA1 - K IY0\nSTOCKYARD  S T AA1 K - Y AA2 R D\nSTOCKYARDS  S T AA1 K - Y AA2 R D Z\nSTOCUM  S T OW1 - K AH0 M\nSTODDARD  S T AA1 - D ER0 D\nSTODDARD'S  S T AA1 - D ER0 D Z\nSTODGHILL  S T AA1 JH - HH IH2 L\nSTODGY  S T AA1 - JH IY0\nSTODOLA  S T OW0 - D OW1 - L AH0\nSTODOLSKY  S T AH0 - D AO1 L S - K IY0\nSTOEBER  S T OW1 - B ER0\nSTOECKEL  S T OW1 - K AH0 L\nSTOECKER  S T OW1 - K ER0\nSTOECKLE  S T OW1 - K AH0 L\nSTOECKLEIN  S T OW1 - K L AY2 N\nSTOEGER  S T OW1 - G ER0\nSTOEHR  S T AO1 R\nSTOELTING  S T OW1 L - T IH0 NG\nSTOELTZE  S T OW1 L T S\nSTOERMER  S T AO1 R - M ER0\nSTOESSEL  S T OW1 - S AH0 L\nSTOEVER  S T AA1 - EH0 - V ER0\nSTOFER  S T OW1 - F ER0\nSTOFF  S T AO1 F\nSTOFFEL  S T AA1 - F AH0 L\nSTOFFELS  S T AA1 - F AH0 L Z\nSTOFFER  S T AO1 - F ER0\nSTOFFERS  S T AO1 - F ER0 Z\nSTOFFREGEN  S T AA1 - F R IH0 - G AH0 N\nSTOFKO  S T OW1 F - K OW0\nSTOGA  S T OW1 - G AH0\nSTOGDILL  S T AA1 G - D IH0 L\nSTOGNER  S T AA1 G - N ER0\nSTOGSDILL  S T AA1 G Z - D IH0 L\nSTOHL  S T OW1 L\nSTOHLER  S T OW1 - L ER0\nSTOHR  S T AO1 R\nSTOIA  S T OW1 - Y AH0\nSTOIBER  S T OY1 - B ER0\nSTOIC  S T OW1 - IH0 K\nSTOICALLY  S T OW1 - IH0 K - L IY0\nSTOICISM  S T OW1 - AH0 - S IH2 - Z AH0 M\nSTOICS  S T OW1 - IH0 K S\nSTOKE  S T OW1 K\nSTOKED  S T OW1 K T\nSTOKELY  S T OW1 K - L IY0\nSTOKER  S T OW1 - K ER0\nSTOKES  S T OW1 K S\nSTOKING  S T OW1 - K IH0 NG\nSTOKKE  S T AA1 K\nSTOKLEY  S T AA1 K - L IY0\nSTOKLOSA  S T AH0 - K L OW1 - S AH0\nSTOL  S T OW1 L\nSTOLAR  S T OW1 - L ER0\nSTOLARSKI  S T AH0 - L AA1 R S - K IY0\nSTOLARZ  S T OW1 - L AA0 R Z\nSTOLBERG  S T OW1 L - B ER0 G\nSTOLDT  S T OW1 L T\nSTOLE  S T OW1 L\nSTOLEN  S T OW1 - L AH0 N\nSTOLER  S T OW1 - L ER0\nSTOLFI  S T OW1 L - F IY0\nSTOLICHNAYA  S T OW2 - L IH0 K - N AY1 - AH0\nSTOLID  S T AA1 - L AH0 D\nSTOLL  S T OW1 L\nSTOLLAR  S T AA1 - L ER0\nSTOLLE  S T AA1 L\nSTOLLEN  S T AA1 - L AH0 N\nSTOLLER  S T OW1 - L ER0\nSTOLLEY  S T AA1 - L IY0\nSTOLLINGS  S T OW1 - L IH0 NG Z\nSTOLP  S T OW1 L P\nSTOLPE  S T OW1 L P\nSTOLPER  S T OW1 L - P ER0\nSTOLT  S T OW1 L T\nSTOLTE  S T OW1 L T\nSTOLTENBERG  S T OW1 L - T AH0 N - B ER0 G\nSTOLTMAN  S T OW1 L T - M AH0 N\nSTOLTZ  S T OW1 L T S\nSTOLTZFUS  S T OW1 L T S - F AH0 S\nSTOLTZMAN  S T OW1 L T S - M AH0 N\nSTOLZ  S T OW1 L Z\nSTOLZE  S T OW1 L Z\nSTOMACH  S T AH1 - M AH0 K\nSTOMACHS  S T AH1 - M AH0 K S\nSTOMATA  S T OW1 - M AH0 - T AH0\nSTOMBAUGH  S T AA1 M - B AO2\nSTOMP  S T AA1 M P\nSTOMPED  S T AA1 M P T\nSTOMPING  S T AA1 M - P IH0 NG\nSTONE  S T OW1 N\nSTONE'S  S T OW1 N Z\nSTONEBACK  S T OW1 N - B AE2 K\nSTONEBERG  S T OW1 N - B ER0 G\nSTONEBERGER  S T OW1 N - B ER0 - G ER0\nSTONEBRAKER  S T AA1 - N IH0 - B R AH0 - K ER0\nSTONEBRAKER(2)  S T OW1 N - B R EY0 - K ER0\nSTONEBURNER  S T OW1 N - B ER2 - N ER0\nSTONECIPHER  S T OW1 N - S AY2 - F ER0\nSTONECUTTER  S T OW1 N - K AH2 - T ER0\nSTONECUTTERS  S T OW1 N - K AH2 - T ER0 Z\nSTONECYPHER  S T AA1 - N IH0 - S IH0 - F ER0\nSTONECYPHER(2)  S T OW1 N - S AY0 - F ER0\nSTONED  S T OW1 N D\nSTONEHAM  S T OW1 - N AH0 M\nSTONEHENGE  S T OW1 N - HH EH2 N JH\nSTONEHILL  S T OW1 N - HH IH2 L\nSTONEHOCKER  S T OW1 N - HH AA2 - K ER0\nSTONEHOUSE  S T OW1 N - HH AW2 S\nSTONEKING  S T OW1 N - K IH2 NG\nSTONEMAN  S T OW1 N - M AH0 N\nSTONER  S T OW1 - N ER0\nSTONERIDGE  S T OW1 N - R IH2 JH\nSTONEROCK  S T OW1 N - R AA2 K\nSTONES  S T OW1 N Z\nSTONES'  S T OW1 N Z\nSTONESIFER  S T OW1 N - S AY2 - F ER0\nSTONESTREET  S T OW1 N - S T R IY2 T\nSTONEWALL  S T OW1 N - W AO2 L\nSTONEWALLED  S T OW1 N - W AO2 L D\nSTONEWALLING  S T OW1 N - W AO2 - L IH0 NG\nSTONEWARE  S T OW1 N - W EH2 R\nSTONEY  S T OW1 - N IY0\nSTONG  S T AO1 NG\nSTONGE  S T AA1 N JH\nSTONING  S T OW1 - N IH0 NG\nSTONY  S T OW1 - N IY0\nSTONYFIELD  S T OW1 - N IY0 - F IY2 L D\nSTOOD  S T UH1 D\nSTOOGE  S T UW1 JH\nSTOOGES  S T UW1 - JH IH0 Z\nSTOOKEY  S T UW1 - K IY0\nSTOOKSBURY  S T UW1 K S - B EH0 - R IY0\nSTOOL  S T UW1 L\nSTOOLS  S T UW1 L Z\nSTOOP  S T UW1 P\nSTOOPED  S T UW1 P T\nSTOOPING  S T UW1 - P IH0 NG\nSTOOPS  S T UW1 P S\nSTOOTS  S T UW1 T S\nSTOP  S T AA1 P\nSTOPA  S T OW1 - P AH0\nSTOPGAP  S T AA1 P - G AE2 P\nSTOPHER  S T AA1 - F ER0\nSTOPKA  S T OW1 P - K AH0\nSTOPLIGHT  S T AA1 P - L AY2 T\nSTOPLIGHTS  S T AA1 P - L AY2 T S\nSTOPOVER  S T AA1 P - OW2 - V ER0\nSTOPOVERS  S T AA1 P - OW2 - V ER0 Z\nSTOPPAGE  S T AA1 - P IH0 JH\nSTOPPAGES  S T AA1 - P IH0 - JH IH0 Z\nSTOPPED  S T AA1 P T\nSTOPPEL  S T AA1 - P AH0 L\nSTOPPER  S T AA1 - P ER0\nSTOPPERS  S T AA1 - P ER0 Z\nSTOPPING  S T AA1 - P IH0 NG\nSTOPS  S T AA1 P S\nSTOPWATCH  S T AA1 P - W AA2 CH\nSTOPWATCHES  S T AA1 P - W AA2 - CH IH0 Z\nSTORA  S T AO1 - R AH0\nSTORA'S  S T AO1 - R AH0 Z\nSTORAGE  S T AO1 - R AH0 JH\nSTORAGE(2)  S T AO1 - R IH0 JH\nSTORAGETEK  S T AO2 - R AH0 JH - T EH2 K\nSTORASKA  S T AO2 - R AE1 - S AH0\nSTORBECK  S T AO1 R - B EH0 K\nSTORCH  S T AO1 R K\nSTORCK  S T AO1 R K\nSTORDAHL  S T AO1 R - D AA0 L\nSTORE  S T AO1 R\nSTORE'S  S T AO1 R Z\nSTORED  S T AO1 R D\nSTOREFRONT  S T AO1 R - F R AA2 N T\nSTOREFRONTS  S T AO1 R - F R AA2 N T S\nSTOREHOUSE  S T AO1 R - HH AW2 S\nSTOREHOUSE'S  S T AO1 R - HH AW2 - S IH0 Z\nSTOREHOUSES  S T AO1 R - HH AW2 - Z AH0 Z\nSTOREKEEPER  S T AO1 R - K IY2 - P ER0\nSTOREKEEPERS  S T AO1 R - K IY2 - P ER0 Z\nSTORER  S T AO1 - R ER0\nSTORER'S  S T AO1 - R ER0 Z\nSTOREROOM  S T AO1 - R R UW2 M\nSTORES  S T AO1 R Z\nSTORES'  S T AO1 R Z\nSTOREY  S T AO1 - R IY0\nSTORFER  S T AO1 R - F ER0\nSTORIE  S T AO1 - R IY0\nSTORIED  S T AO1 - R IY0 D\nSTORIES  S T AO1 - R IY0 Z\nSTORING  S T AO1 - R IH0 NG\nSTORK  S T AO1 R K\nSTORLIE  S T AO1 R - L IY0\nSTORM  S T AO1 R M\nSTORM'S  S T AO1 R M Z\nSTORMED  S T AO1 R M D\nSTORMENT  S T AO1 R - M AH0 N T\nSTORMER  S T AO1 R - M ER0\nSTORMES  S T AO1 R M Z\nSTORMIEST  S T AO1 R - M IY0 - IH0 S T\nSTORMING  S T AO1 R - M IH0 NG\nSTORMONT  S T AO1 R - M OW0 N T\nSTORMS  S T AO1 R M Z\nSTORMY  S T AO1 R - M IY0\nSTORR  S T AO1 R\nSTORROW  S T AA1 - R OW0\nSTORRS  S T AO1 R Z\nSTORTI  S T AO1 R - T IY0\nSTORTING  S T AO1 R - T IH0 NG\nSTORTS  S T AO1 R T S\nSTORTZ  S T AO1 R T S\nSTORY  S T AO1 - R IY0\nSTORY'S  S T AO1 - R IY0 Z\nSTORYBOARD  S T AO1 - R IY0 - B AO2 R D\nSTORYBOOK  S T AO1 - R IY0 - B UH2 K\nSTORYBOOKS  S T AO1 - R IY0 - B UH2 K S\nSTORYLINE  S T AO1 - R IY0 - L AY2 N\nSTORYLINES  S T AO1 - R IY0 - L AY2 N Z\nSTORYTELLER  S T AO1 - R IY0 - T EH2 - L ER0\nSTORYTELLERS  S T AO1 - R IY0 - T EH2 - L ER0 Z\nSTORYTELLING  S T AO1 - R IY0 - T EH2 - L IH0 NG\nSTORZ  S T AO1 R Z\nSTOSSEL  S T AA1 - S AH0 L\nSTOSSEL'S  S T AA1 - S AH0 L Z\nSTOTLER  S T AA1 T - L ER0\nSTOTT  S T AA1 T\nSTOTTLEMYER  S T AA1 - T AH0 L - M AY0 - ER0\nSTOTTS  S T AA1 T S\nSTOTZ  S T AA1 T S\nSTOUDEMIRE  S T UW1 - D AH0 - M AY2 R\nSTOUDENMIRE  S T UW1 - D AH0 N - M AY2 R\nSTOUDER  S T AH1 - D ER0\nSTOUDT  S T AH1 D T\nSTOUFFER  S T AH1 - F ER0\nSTOUFFER(2)  S T OW1 - F ER0\nSTOUFFS  S T AH1 F S\nSTOUFFS(2)  S T OW1 F S\nSTOUGH  S T AH1 F\nSTOUGHTON  S T OW1 - T AH0 N\nSTOUP  S T UW1 P\nSTOUT  S T AW1 T\nSTOUTE  S T AW1 T\nSTOUTENBURG  S T AW1 - T AH0 N - B ER0 G\nSTOUTLY  S T AW1 T - L IY0\nSTOUTNESS  S T AW1 T - N AH0 S\nSTOVALL  S T OW1 - V AA0 L\nSTOVE  S T OW1 V\nSTOVER  S T OW1 - V ER0\nSTOVES  S T OW1 V Z\nSTOW  S T OW1\nSTOWE  S T OW1\nSTOWED  S T OW1 D\nSTOWELL  S T AA1 - W EH0 L\nSTOWER  S T OW1 - ER0\nSTOWERS  S T OW1 - ER0 Z\nSTOY  S T OY1\nSTOYER  S T OY1 - ER0\nSTRACENER  S T R AE1 - S IY0 - N ER0\nSTRACHAN  S T R AE1 - CH AH0 N\nSTRACK  S T R AE1 K\nSTRACKE  S T R AE1 K\nSTRADA  S T R AA1 - D AH0\nSTRADDLE  S T R AE1 - D AH0 L\nSTRADDLED  S T R AE1 - D AH0 L D\nSTRADDLES  S T R AE1 - D AH0 L Z\nSTRADDLING  S T R AE1 D - L IH0 NG\nSTRADER  S T R EY1 - D ER0\nSTRADFORD  S T R AE1 D - F ER0 D\nSTRADIVARIUS  S T R AE2 - D IH0 - V EH1 - R IY0 - AH0 S\nSTRADLEY  S T R AE1 D - L IY0\nSTRADLING  S T R AE1 D - L IH0 NG\nSTRAFE  S T R EY1 F\nSTRAFING  S T R EY1 - F IH0 NG\nSTRAGGLE  S T R AE1 - G AH0 L\nSTRAGGLED  S T R AE1 - G AH0 L D\nSTRAGGLER  S T R AE1 - G L ER0\nSTRAGGLERS  S T R AE1 - G L ER0 Z\nSTRAHAN  S T R AE1 - HH AH0 N\nSTRAHL  S T R AA1 L\nSTRAHLE  S T R EY1 - HH AH0 L\nSTRAHLER  S T R AA1 - L ER0\nSTRAHM  S T R AA1 M\nSTRAIGHT  S T R EY1 T\nSTRAIGHTAWAY  S T R EY1 T - AH0 - W EY2\nSTRAIGHTEDGE  S T R EY1 - T EH2 JH\nSTRAIGHTEN  S T R EY1 - T AH0 N\nSTRAIGHTENED  S T R EY1 - T AH0 N D\nSTRAIGHTENING  S T R EY1 - T AH0 N - IH0 NG\nSTRAIGHTENING(2)  S T R EY1 T - N IH0 NG\nSTRAIGHTENS  S T R EY1 - T AH0 N Z\nSTRAIGHTER  S T R EY1 - T ER0\nSTRAIGHTFORWARD  S T R EY1 T - F AO1 R - W ER0 D\nSTRAIGHTFORWARDLY  S T R EY2 T - F AO1 R - W ER0 D - L IY0\nSTRAIGHTS  S T R EY1 T S\nSTRAIN  S T R EY1 N\nSTRAINED  S T R EY1 N D\nSTRAINING  S T R EY1 - N IH0 NG\nSTRAINS  S T R EY1 N Z\nSTRAIT  S T R EY1 T\nSTRAITJACKET  S T R EY1 T - JH AE2 - K AH0 T\nSTRAITS  S T R EY1 T S\nSTRAKA  S T R AA1 - K AH0\nSTRAKER  S T R EY1 - K ER0\nSTRALEY  S T R AE1 - L IY0\nSTRAM  S T R AE1 M\nSTRANAHAN  S T R AE1 - N AH0 - HH AE0 N\nSTRAND  S T R AE1 N D\nSTRANDBERG  S T R AE1 N D - B ER0 G\nSTRANDE  S T R AE1 N D\nSTRANDED  S T R AE1 N - D AH0 D\nSTRANDED(2)  S T R AE1 N - D IH0 D\nSTRANDING  S T R AE1 N - D IH0 NG\nSTRANDLINE  S T R AE1 N D - L AY2 N\nSTRANDLINE(2)  S T R AE1 N - L AY2 N\nSTRANDLINES  S T R AE1 N D - L AY2 N Z\nSTRANDLINES(2)  S T R AE1 N - L AY2 N Z\nSTRANDS  S T R AE1 N D Z\nSTRANG  S T R AE1 NG\nSTRANGE  S T R EY1 N JH\nSTRANGELOVE  S T R EY1 N - JH L AH2 V\nSTRANGELY  S T R EY1 N JH - L IY0\nSTRANGENESS  S T R EY1 N JH - N AH0 S\nSTRANGER  S T R EY1 N - JH ER0\nSTRANGER'S  S T R EY1 N - JH ER0 Z\nSTRANGERS  S T R EY1 N - JH ER0 Z\nSTRANGEST  S T R EY1 N - JH IH0 S T\nSTRANGIS  S T R AE1 N - JH IH0 S\nSTRANGLE  S T R AE1 NG - G AH0 L\nSTRANGLED  S T R AE1 NG - G AH0 L D\nSTRANGLEHOLD  S T R AE1 NG - G AH0 L - HH OW2 L D\nSTRANGLER  S T R AE1 NG - G L ER0\nSTRANGLING  S T R AE1 NG - G AH0 - L IH0 NG\nSTRANGLING(2)  S T R AE1 NG - G L IH0 NG\nSTRANGULATE  S T R AE1 NG - G Y AH0 - L EY2 T\nSTRANGULATION  S T R AE2 NG - G Y AH0 - L EY1 - SH AH0 N\nSTRANGULATIONS  S T R AE2 NG - G Y AH0 - L EY1 - SH AH0 N Z\nSTRANGWAYES  S T R AE1 NG - W EY2 Z\nSTRANO  S T R AA1 - N OW0\nSTRANSKY  S T R AE1 N S - K IY0\nSTRAP  S T R AE1 P\nSTRAPPED  S T R AE1 P T\nSTRAPPING  S T R AE1 - P IH0 NG\nSTRAPS  S T R AE1 P S\nSTRASBERG  S T R AE1 S - B ER0 G\nSTRASBOURG  S T R AE1 S - B AO2 R G\nSTRASBURG  S T R AE1 S - B ER0 G\nSTRASBURGER  S T R AE1 S - B ER0 - G ER0\nSTRASSBURG  S T R AE1 S - B ER0 G\nSTRASSBURGER  S T R AE1 S - B ER0 - G ER0\nSTRASSER  S T R AE1 - S ER0\nSTRASSMAN  S T R AE1 S - M AH0 N\nSTRASSNER  S T R AE1 S - N ER0\nSTRASZHEIM  S T R AE1 S - HH AY2 M\nSTRATA  S T R AE1 - T AH0\nSTRATACOM  S T R AE1 - T AH0 - K AA0 M\nSTRATAGEMS  S T R AE1 - T AH0 - JH AH0 M Z\nSTRATAS  S T R AE1 - T AH0 Z\nSTRATE  S T R EY1 T\nSTRATEGEM  S T R AE1 - T IH0 - JH EH0 M\nSTRATEGIC  S T R AH0 - T IY1 - JH IH0 K\nSTRATEGICAL  S T R AH0 - T IY1 - JH IH0 - K AH0 L\nSTRATEGICALLY  S T R AH0 - T IY1 - JH IH0 K - L IY0\nSTRATEGIES  S T R AE1 - T AH0 - JH IY0 Z\nSTRATEGIST  S T R AE1 - T IH0 - JH IH0 S T\nSTRATEGISTS  S T R AE1 - T IH0 - JH IH0 S T S\nSTRATEGISTS(2)  S T R AE1 - T IH0 - JH IH0 S S\nSTRATEGISTS(3)  S T R AE1 - T IH0 - JH IH0 S\nSTRATEGIZE  S T R AE1 - T AH0 - JH AY0 Z\nSTRATEGIZING  S T R AE1 - T AH0 - JH AY0 - Z IH0 NG\nSTRATEGY  S T R AE1 - T AH0 - JH IY0\nSTRATEGY'S  S T R AE1 - T AH0 - JH IY0 Z\nSTRATER  S T R EY1 - T ER0\nSTRATFORD  S T R AE1 T - F ER0 D\nSTRATHMAN  S T R AE1 TH - M AH0 N\nSTRATIFIED  S T R AE1 - T AH0 - F AY2 D\nSTRATIFY  S T R AE1 - T AH0 - F AY2\nSTRATIGRAPHIC  S T R AE2 - T AH0 - G R AE1 - F IH0 K\nSTRATMAN  S T R AE1 T - M AH0 N\nSTRATMANN  S T R AE1 T - M AH0 N\nSTRATOCASTER  S T R AE1 - T OW0 - K AE2 - S T ER0\nSTRATOFLEX  S T R AE1 - T OW0 - F L EH2 K S\nSTRATOSPHERE  S T R AE1 - T AH0 - S F IH2 R\nSTRATOSPHERIC  S T R AE2 - T AH0 - S F IH1 - R IH0 K\nSTRATTON  S T R AE1 - T AH0 N\nSTRATUM  S T R AE1 - T AH0 M\nSTRATUS  S T R AE1 - T AH0 S\nSTRATUS'S  S T R AE1 - T AH0 - S IH0 Z\nSTRAUB  S T R AW1 B\nSTRAUBE  S T R AW1 B\nSTRAUCH  S T R AW1 K\nSTRAUGHAN  S T R AO1 - AH0 N\nSTRAUGHN  S T R AO1 N\nSTRAUGHTER  S T R AO1 - T ER0\nSTRAUM  S T R AW1 M\nSTRAUM(2)  S T R AA1 M\nSTRAUS  S T R AW1 S\nSTRAUSBAUGH  S T R AW1 S - B AW0\nSTRAUSE  S T R AW1 S\nSTRAUSER  S T R AW1 - S ER0\nSTRAUSS  S T R AW1 S\nSTRAUSS'S  S T R AW1 - S IH0 Z\nSTRAUSSER  S T R AW1 - S ER0\nSTRAVINSKY  S T R AH0 - V IH1 N - S K IY0\nSTRAVINSKY'S  S T R AH0 - V IH1 N - S K IY0 Z\nSTRAW  S T R AO1\nSTRAWBERRIES  S T R AO1 - B EH2 - R IY0 Z\nSTRAWBERRY  S T R AO1 - B EH2 - R IY0\nSTRAWBRIDGE  S T R AO1 - B R IH2 JH\nSTRAWDER  S T R AO1 - D ER0\nSTRAWDERMAN  S T R AO1 - D ER0 - M AH0 N\nSTRAWN  S T R AO1 N\nSTRAWS  S T R AO1 Z\nSTRAWSER  S T R AO1 - Z ER0\nSTRAY  S T R EY1\nSTRAYED  S T R EY1 D\nSTRAYER  S T R EY1 - ER0\nSTRAYHORN  S T R EY1 - HH ER0 N\nSTRAYING  S T R EY1 - IH0 NG\nSTRAYS  S T R EY1 Z\nSTREAK  S T R IY1 K\nSTREAKED  S T R IY1 K T\nSTREAKER  S T R IY1 - K ER0\nSTREAKING  S T R IY1 - K IH0 NG\nSTREAKS  S T R IY1 K S\nSTREAM  S T R IY1 M\nSTREAMED  S T R IY1 M D\nSTREAMER  S T R IY1 - M ER0\nSTREAMERS  S T R IY1 - M ER0 Z\nSTREAMING  S T R IY1 - M IH0 NG\nSTREAMLINE  S T R IY1 M - L AY2 N\nSTREAMLINED  S T R IY1 M - L AY2 N D\nSTREAMLINING  S T R IY1 M - L AY2 - N IH0 NG\nSTREAMS  S T R IY1 M Z\nSTREATER  S T R IY1 - T ER0\nSTREB  S T R EH1 B\nSTREBE  S T R IY1 B\nSTREBECK  S T R IY1 - B EH0 K\nSTREBEL  S T R EH1 - B AH0 L\nSTRECK  S T R EH1 K\nSTRECKER  S T R EH1 - K ER0\nSTREED  S T R IY1 D\nSTREEP  S T R IY1 P\nSTREEPER  S T R IY1 - P ER0\nSTREET  S T R IY1 T\nSTREET'S  S T R IY1 T S\nSTREETCAR  S T R IY1 T - K AA2 R\nSTREETER  S T R IY1 - T ER0\nSTREETERS  S T R IY1 - T ER0 Z\nSTREETMAN  S T R IY1 T - M AH0 N\nSTREETS  S T R IY1 T S\nSTREETT  S T R IY1 T\nSTREETWISE  S T R IY1 T - W AY2 Z\nSTREETY  S T R IY1 - T IY0\nSTREFF  S T R EH1 F\nSTREGE  S T R IY1 JH\nSTREHL  S T R EH1 L\nSTREHLE  S T R EH1 L\nSTREHLOW  S T R EH1 - L OW0\nSTREIB  S T R AY1 B\nSTREIBER  S T R AY1 - B ER0\nSTREICH  S T R AY1 K\nSTREICHER  S T R AY1 - K ER0\nSTREIFF  S T R AY1 F\nSTREIGHT  S T R EY1 T\nSTREIKER  S T R AY1 - K ER0\nSTREISAND  S T R AY1 - Z AH0 N D\nSTREISAND'S  S T R AY1 - Z AH0 N D Z\nSTREISAND'S(2)  S T R AY1 - S AE2 N D Z\nSTREISAND(2)  S T R AY1 - S AE2 N D\nSTREIT  S T R AY1 T\nSTREITMATTER  S T R AY1 T - M AH0 - T ER0\nSTRELOW  S T R EH1 - L OW0\nSTRENG  S T R EH1 NG\nSTRENGER  S T R EH1 NG - G ER0\nSTRENGTH  S T R EH1 NG K TH\nSTRENGTH(2)  S T R EH1 NG TH\nSTRENGTHEN  S T R EH1 NG - TH AH0 N\nSTRENGTHENED  S T R EH1 NG - TH AH0 N D\nSTRENGTHENING  S T R EH1 NG - TH AH0 N - IH0 NG\nSTRENGTHENS  S T R EH1 NG - TH AH0 N Z\nSTRENGTHS  S T R EH1 NG K TH S\nSTRENGTHS(2)  S T R EH1 NG TH S\nSTRENIO  S T R IY1 - N IY0 - OW0\nSTRENUOUS  S T R EH1 - N Y UW0 - AH0 S\nSTRENUOUSLY  S T R EH1 - N Y UW0 - AH0 S - L IY0\nSTREP  S T R EH1 P\nSTREPS  S T R EH1 P S\nSTREPTOCOCCUS  S T R EH2 P - T AH0 - K AO1 - K AH0 S\nSTREPTOKINASE  S T R EH2 P - T AH0 - K AY1 - N EY2 S\nSTREPTOKINASE(2)  S T R EH2 P - T OW0 - K AY1 - N EY2 Z\nSTRESS  S T R EH1 S\nSTRESSED  S T R EH1 S T\nSTRESSES  S T R EH1 - S AH0 Z\nSTRESSES(2)  S T R EH1 - S IH0 Z\nSTRESSFUL  S T R EH1 S - F AH0 L\nSTRESSING  S T R EH1 - S IH0 NG\nSTRESSOR  S T R EH1 - S ER0\nSTRESSORS  S T R EH1 - S ER0 Z\nSTRETCH  S T R EH1 CH\nSTRETCHED  S T R EH1 CH T\nSTRETCHER  S T R EH1 - CH ER0\nSTRETCHER-BEARER  S T R EH1 - CH ER0 - B EH1 - R ER0\nSTRETCHER-BEARERS  S T R EH1 - CH ER0 - B EH1 - R ER0 Z\nSTRETCHERS  S T R EH1 - CH ER0 Z\nSTRETCHES  S T R EH1 - CH AH0 Z\nSTRETCHES(2)  S T R EH1 - CH IH0 Z\nSTRETCHING  S T R EH1 - CH IH0 NG\nSTRETTO  S T R EH1 - T OW2\nSTREVIG  S T R EH1 - V IH0 G\nSTREW  S T R UW1\nSTREWN  S T R UW1 N\nSTREY  S T R EY1\nSTRIAR  S T R AY1 R\nSTRIBLING  S T ER1 - AH0 - B AH0 L - IH0 NG\nSTRIBLING(2)  S T R IH1 - B L IH0 NG\nSTRICK  S T R IH1 K\nSTRICKEN  S T R IH1 - K AH0 N\nSTRICKER  S T R IH1 - K ER0\nSTRICKLAND  S T R IH1 - K L AH0 N D\nSTRICKLEN  S T R IH1 - K AH0 - L AH0 N\nSTRICKLER  S T R IH1 - K L ER0\nSTRICKLIN  S T R IH1 - K L IH0 N\nSTRICKLING  S T R IH1 - K L IH0 NG\nSTRICT  S T R IH1 K T\nSTRICTER  S T R IH1 K - T ER0\nSTRICTEST  S T R IH1 K - T AH0 S T\nSTRICTLY  S T R IH1 K T - L IY0\nSTRICTURE  S T R IH1 K - CH ER0\nSTRICTURES  S T R IH1 K - CH ER0 Z\nSTRIDE  S T R AY1 D\nSTRIDENCY  S T R AY1 - D AH0 N - S IY0\nSTRIDENT  S T R AY1 - D AH0 N T\nSTRIDENTLY  S T R AY1 - D AH0 N T - L IY0\nSTRIDER  S T R AY1 - D ER0\nSTRIDES  S T R AY1 D Z\nSTRIDING  S T R AY1 - D IH0 NG\nSTRIEBER  S T R AY1 - B ER0\nSTRIEGEL  S T R IY1 - G AH0 L\nSTRIEKER  S T R IY1 - K ER0\nSTRIEKER'S  S T R IY1 - K ER0 Z\nSTRIETER  S T R IY1 - T ER0\nSTRIFE  S T R AY1 F\nSTRIFES  S T R AY1 F S\nSTRIKE  S T R AY1 K\nSTRIKE'S  S T R AY1 K S\nSTRIKEBREAKER  S T R AY1 K - B R EY2 - K ER0\nSTRIKEBREAKERS  S T R AY1 K - B R EY2 - K ER0 Z\nSTRIKEOUT  S T R AY1 K - AW2 T\nSTRIKEOUTS  S T R AY1 K - AW2 T S\nSTRIKER  S T R AY1 - K ER0\nSTRIKERS  S T R AY1 - K ER0 Z\nSTRIKERS'  S T R AY1 - K ER0 Z\nSTRIKES  S T R AY1 K S\nSTRIKES'  S T R AY1 K S\nSTRIKING  S T R AY1 - K IH0 NG\nSTRIKINGLY  S T R AY1 - K IH0 NG - L IY0\nSTRIMPLE  S T R IH1 M - P AH0 L\nSTRINDEN  S T R IH1 N - D AH0 N\nSTRINE  S T R AY1 N\nSTRING  S T R IH1 NG\nSTRINGED  S T R IH1 NG D\nSTRINGENCY  S T R IH1 N - JH AH0 N - S IY0\nSTRINGENT  S T R IH1 N - JH AH0 N T\nSTRINGENTLY  S T R IH1 N - JH AH0 N T - L IY0\nSTRINGER  S T R IH1 - NG ER0\nSTRINGERS  S T R IH1 - NG ER0 Z\nSTRINGFELLOW  S T R IH1 NG - F EH2 - L OW0\nSTRINGFIELD  S T R IH1 NG - F IY2 L D\nSTRINGHAM  S T R IH1 NG - HH AE2 M\nSTRINGING  S T R IH1 - NG IH0 NG\nSTRINGS  S T R IH1 NG Z\nSTRINGY  S T R IH1 - NG IY0\nSTRIP  S T R IH1 P\nSTRIP'S  S T R IH1 P S\nSTRIPE  S T R AY1 P\nSTRIPED  S T R AY1 P T\nSTRIPER  S T R AY1 - P ER0\nSTRIPERS  S T R AY1 - P ER0 Z\nSTRIPES  S T R AY1 P S\nSTRIPLIN  S T R IH1 - P L IH0 N\nSTRIPLING  S T R IH1 - P L IH0 NG\nSTRIPPED  S T R IH1 P T\nSTRIPPER  S T R IH1 - P ER0\nSTRIPPERS  S T R IH1 - P ER0 Z\nSTRIPPING  S T R IH1 - P IH0 NG\nSTRIPS  S T R IH1 P S\nSTRIPTEASE  S T R IH1 P - T IY2 Z\nSTRITE  S T R AY1 T\nSTRITTMATTER  S T R IH1 T - M AH0 - T ER0\nSTRIVE  S T R AY1 V\nSTRIVEN  S T R IH1 - V AH0 N\nSTRIVES  S T R AY1 V Z\nSTRIVING  S T R AY1 - V IH0 NG\nSTRIVINGS  S T R AY1 - V IH0 NG Z\nSTRNAD  S T ER1 - N AE0 D\nSTROBE  S T R OW1 B\nSTROBEL  S T R OW1 - B AH0 L\nSTROBEL'S  S T R OW1 - B AH0 L Z\nSTROBER  S T R OW1 - B ER0\nSTROBL  S T R AA1 - B AH0 L\nSTROBLE  S T R OW1 - B AH0 L\nSTROBRIDGE  S T R AA1 - B R IH0 JH\nSTROCK  S T R AA1 K\nSTRODE  S T R OW1 D\nSTRODER  S T R OW1 - D ER0\nSTROEBEL  S T R OW1 - B AH0 L\nSTROESSNER  S T R OW1 S - N ER0\nSTROGANOFF  S T R OW1 - G AH0 - N AO2 F\nSTROH  S T R OW1\nSTROHECKER  S T R OW1 - IH0 - K ER0\nSTROHL  S T R OW1 L\nSTROHM  S T R OW1 M\nSTROHMAIER  S T R OW1 - M AY0 - ER0\nSTROHMAN  S T R OW1 - M AH0 N\nSTROHMEIER  S T R OW1 - M AY0 - ER0\nSTROHMEYER  S T R OW1 - M AY0 - ER0\nSTROIK  S T R OY1 K\nSTROJNY  S T R OW1 Y - N IY0\nSTROKE  S T R OW1 K\nSTROKED  S T R OW1 K T\nSTROKES  S T R OW1 K S\nSTROKING  S T R OW1 - K IH0 NG\nSTROLE  S T R OW1 L\nSTROLL  S T R OW1 L\nSTROLLED  S T R OW1 L D\nSTROLLER  S T R OW1 - L ER0\nSTROLLERS  S T R OW1 - L ER0 Z\nSTROLLING  S T R OW1 - L IH0 NG\nSTROLLO  S T R AA1 - L OW0\nSTROLLS  S T R OW1 L Z\nSTROM  S T R AA1 M\nSTROMA  S T R OW1 - M AH0\nSTROMAIN  S T R AA1 - M AY0 N\nSTROMAN  S T R OW1 - M AH0 N\nSTROMBECK  S T R AA1 M - B EH2 K\nSTROMBERG  S T R AA1 M - B ER0 G\nSTROMBOLI  S T R AA2 M - B OW1 - L IY0\nSTROMBOLI'S  S T R AA2 M - B OW1 - L IY0 Z\nSTROME  S T R OW1 M\nSTROMER  S T R OW1 - M ER0\nSTROMGREN  S T R AA1 M - G R EH0 N\nSTROMME  S T R AA1 M\nSTROMMEN  S T R AA1 - M AH0 N\nSTROMQUIST  S T R AA1 M - K W IH2 S T\nSTRONACH  S T R AA1 - N AH0 K\nSTRONG  S T R AO1 NG\nSTRONGER  S T R AO1 NG - ER0\nSTRONGER(2)  S T R AO1 NG - G ER0\nSTRONGEST  S T R AO1 NG - G AH0 S T\nSTRONGHOLD  S T R AO1 NG - HH OW2 L D\nSTRONGHOLDS  S T R AO1 NG - HH OW2 L D Z\nSTRONGLY  S T R AO1 NG - L IY0\nSTRONGMAN  S T R AO1 NG - M AE2 N\nSTRONTIUM  S T R AA1 N - T IY0 - AH0 M\nSTROOCK  S T R UH1 K\nSTROOP  S T R UW1 P\nSTROOPE  S T R UW1 P\nSTROOT  S T R UW1 T\nSTROPE  S T R OW1 P\nSTROSCHEIN  S T R AO1 - SH AY0 N\nSTROSNIDER  S T R AA1 S - N AY0 - D ER0\nSTROSSEN  S T R AO1 - S EH0 N\nSTROSSEN(2)  S T R AO1 - S IH0 N\nSTROTHER  S T R AA1 - DH ER0\nSTROTHERS  S T R AH1 - DH ER0 Z\nSTROTHMAN  S T R AA1 TH - M AH0 N\nSTROUD  S T R AW1 D\nSTROUGH  S T R AW1\nSTROUP  S T R UW1 P\nSTROUPE  S T R UW1 P\nSTROUSE  S T R AW1 S\nSTROUT  S T R AW1 T\nSTROUTH  S T R AW1 TH\nSTROVE  S T R OW1 V\nSTROW  S T R OW1\nSTROZIER  S T R OW1 - Z IY0 - ER0\nSTRUB  S T R AH1 B\nSTRUBBE  S T R AH1 B\nSTRUBE  S T R UW1 B\nSTRUBEL  S T R UW1 - B AH0 L\nSTRUBLE  S T R UW1 - B AH0 L\nSTRUCHEN  S T R AH1 - K AH0 N\nSTRUCK  S T R AH1 K\nSTRUCKMAN  S T R AH1 K - M AH0 N\nSTRUCTURAL  S T R AH1 K - CH ER0 - AH0 L\nSTRUCTURALLY  S T R AH1 K - CH ER0 - AH0 - L IY0\nSTRUCTURE  S T R AH1 K - CH ER0\nSTRUCTURE'S  S T R AH1 K - CH ER0 Z\nSTRUCTURED  S T R AH1 K - CH ER0 D\nSTRUCTURES  S T R AH1 K - CH ER0 Z\nSTRUCTURING  S T R AH1 K - CH ER0 - IH0 NG\nSTRUEBING  S T R UH1 - B IH0 NG\nSTRUGGLE  S T R AH1 - G AH0 L\nSTRUGGLED  S T R AH1 - G AH0 L D\nSTRUGGLES  S T R AH1 - G AH0 L Z\nSTRUGGLING  S T R AH1 - G AH0 - L IH0 NG\nSTRUGGLING(2)  S T R AH1 - G L IH0 NG\nSTRUM  S T R AH1 M\nSTRUMMING  S T R AH1 - M IH0 NG\nSTRUMS  S T R AH1 M Z\nSTRUNG  S T R AH1 NG\nSTRUNK  S T R AH1 NG K\nSTRUNK'S  S T R AH1 NG K S\nSTRUPP  S T R AH1 P\nSTRUSS  S T R AH1 S\nSTRUT  S T R AH1 T\nSTRUTHERS  S T R AH1 - DH ER0 Z\nSTRUTS  S T R AH1 T S\nSTRUTTING  S T R AH1 - T IH0 NG\nSTRUTTON  S T R AH1 - T AH0 N\nSTRUTZ  S T R AH1 T S\nSTRUVE  S T R UW1 V\nSTRYCHARZ  S T R IH1 - HH ER0 Z\nSTRYCHNINE  S T R IH1 K - N AY2 N\nSTRYKER  S T R AY1 - K ER0\nSTRZELECKI  S T R EH2 - Z IH0 - L EH1 T S - K IY0\nSTRZELECKI(2)  S T ER2 - Z IH0 - L EH1 T S - K IY0\nSTU  S T UW1\nSTUARD  S T UW1 - ER0 D\nSTUART  S T UW1 - ER0 T\nSTUART'S  S T UW1 - ER0 T S\nSTUART'S(2)  S T Y UW1 - ER0 T S\nSTUART'S(3)  S T AO1 R T S\nSTUART(2)  S T Y UW1 - ER0 T\nSTUART(3)  S T AO1 R T\nSTUARTS  S T UW1 - ER0 T S\nSTUB  S T AH1 B\nSTUBBE  S T AH1 B\nSTUBBED  S T AH1 B D\nSTUBBINS  S T AH1 - B IH0 N Z\nSTUBBLE  S T AH1 - B AH0 L\nSTUBBLEFIELD  S T AH1 - B AH0 L - F IY2 L D\nSTUBBORN  S T AH1 - B ER0 N\nSTUBBORNLY  S T AH1 - B ER0 N - L IY0\nSTUBBORNNESS  S T AH1 - B ER0 N - N AH0 S\nSTUBBORNNESS(2)  S T AH1 - B ER0 - N AH0 S\nSTUBBS  S T AH1 B Z\nSTUBBY  S T AH1 - B IY0\nSTUBER  S T UW1 - B ER0\nSTUBS  S T AH1 B Z\nSTUCCO  S T AH1 - K OW0\nSTUCHELL  S T AH1 - K AH0 L\nSTUCK  S T AH1 K\nSTUCKE  S T AH1 K\nSTUCKER  S T AH1 - K ER0\nSTUCKERT  S T AH1 - K ER0 T\nSTUCKEY  S T AH1 - K IY0\nSTUCKI  S T AH1 - K IY0\nSTUCKMAN  S T AH1 K - M AH0 N\nSTUCKY  S T AH1 - K IY0\nSTUD  S T AH1 D\nSTUDDARD  S T AH1 - D ER0 D\nSTUDDED  S T AH1 - D IH0 D\nSTUDDS  S T AH1 D Z\nSTUDE  S T UW1 D\nSTUDEBAKER  S T UW1 - D AH0 - B EY2 - K ER0\nSTUDEMAN  S T UW1 D - M AH0 N\nSTUDEMAN(2)  S T UW1 - D AH0 - M AH0 N\nSTUDENT  S T UW1 - D AH0 N T\nSTUDENT'S  S T UW1 - D AH0 N T S\nSTUDENTS  S T UW1 - D AH0 N T S\nSTUDENTS'  S T UW1 - D AH0 N T S\nSTUDER  S T UW1 - D ER0\nSTUDIED  S T AH1 - D IY0 D\nSTUDIES  S T AH1 - D IY0 Z\nSTUDIO  S T UW1 - D IY0 - OW2\nSTUDIO'S  S T UW1 - D IY0 - OW2 Z\nSTUDIOS  S T UW1 - D IY0 - OW2 Z\nSTUDIOS'  S T UW1 - D IY0 - OW2 Z\nSTUDIOUS  S T UW1 - D IY0 - AH0 S\nSTUDIOUSLY  S T UW1 - D IY0 - AH0 S - L IY0\nSTUDLEY  S T AH1 D - L IY0\nSTUDNICKA  S T AH0 D - N IH1 - S K AH0\nSTUDS  S T AH1 D Z\nSTUDSTILL  S T AH1 D - S T IH2 L\nSTUDT  S T AH1 D T\nSTUDTGARD  S T AH1 T - G AA2 R D\nSTUDY  S T AH1 - D IY0\nSTUDY'S  S T AH1 - D IY0 Z\nSTUDYING  S T AH1 - D IY0 - IH0 NG\nSTUDZINSKI  S T AH0 - JH IH1 N - S K IY0\nSTUEBE  S T UW1 B\nSTUEBER  S T UH1 - B ER0\nSTUECK  S T UW1 K\nSTUEVE  S T UW1 V\nSTUEWE  S T UW1\nSTUFF  S T AH1 F\nSTUFF'S  S T AH1 F S\nSTUFF-IT  S T AH1 - F IH0 T\nSTUFF-IT'S  S T AH1 - F IH0 T S\nSTUFFED  S T AH1 F T\nSTUFFER  S T AH1 - F ER0\nSTUFFING  S T AH1 - F IH0 NG\nSTUFFLEBEAM  S T AH1 - F AH0 L - B IY2 M\nSTUFFLEBEAN  S T AH1 - F AH0 L - B IY2 N\nSTUFFS  S T AH1 F S\nSTUFFY  S T AH1 - F IY0\nSTUHLER  S T UW1 - L ER0\nSTUHR  S T ER1\nSTUHR(2)  S T UH1 R\nSTUKA  S T UW1 - K AH0\nSTUKEL  S T UW1 - K AH0 L\nSTUKES  S T UW1 K S\nSTUKEY  S T AH1 - K IY0\nSTULL  S T AH1 L\nSTULLER  S T AH1 - L ER0\nSTULTIFY  S T AH1 L - T AH0 - F AY2\nSTULTIFYING  S T AH1 L - T AH0 - F AY2 - IH0 NG\nSTULTS  S T AH1 L T S\nSTULTZ  S T AH1 L T S\nSTUM  S T AH1 M\nSTUMBAUGH  S T AH1 M - B AO2\nSTUMBLE  S T AH1 M - B AH0 L\nSTUMBLED  S T AH1 M - B AH0 L D\nSTUMBLES  S T AH1 M - B AH0 L Z\nSTUMBLING  S T AH1 M - B AH0 L - IH0 NG\nSTUMBLING(2)  S T AH1 M - B L IH0 NG\nSTUMBO  S T AH1 M - B OW0\nSTUMM  S T AH1 M\nSTUMP  S T AH1 M P\nSTUMPAGE  S T AH1 M - P IH0 JH\nSTUMPE  S T AH1 M P\nSTUMPED  S T AH1 M P T\nSTUMPF  S T AH1 M P F\nSTUMPFF  S T AH1 M P F\nSTUMPH  S T AH1 M F\nSTUMPING  S T AH1 M - P IH0 NG\nSTUMPO  S T AH1 M - P OW0\nSTUMPP  S T AH1 M P\nSTUMPS  S T AH1 M P S\nSTUN  S T AH1 N\nSTUNG  S T AH1 NG\nSTUNK  S T AH1 NG K\nSTUNNED  S T AH1 N D\nSTUNNING  S T AH1 - N IH0 NG\nSTUNNINGLY  S T AH1 - N IH0 NG - L IY0\nSTUNT  S T AH1 N T\nSTUNTED  S T AH1 N - T IH0 D\nSTUNTS  S T AH1 N T S\nSTUNTZ  S T AH1 N T S\nSTUPA  S T UW1 - P AH0\nSTUPAK  S T UW1 - P AH0 K\nSTUPAR  S T UW1 - P ER0\nSTUPAY  S T UW0 - P EY1\nSTUPENDOUS  S T UW0 - P EH1 N - D AH0 S\nSTUPID  S T UW1 - P AH0 D\nSTUPID(2)  S T UW1 - P IH0 D\nSTUPIDEST  S T UW1 - P IH0 - D AH0 S T\nSTUPIDITY  S T UW0 - P IH1 - D IH0 - T IY0\nSTUPIDLY  S T UW1 - P AH0 D - L IY0\nSTUPKA  S T AH1 P - K AH0\nSTUPOR  S T UW1 - P ER0\nSTUPP  S T AH1 P\nSTUPSKI  S T AH1 P - S K IY0\nSTURBRIDGE  S T ER1 - B R IH2 JH\nSTURC  S T ER1 K\nSTURDEVANT  S T ER1 - D IH0 - V AH0 N T\nSTURDHAL  S T ER1 - D AA0 L\nSTURDIER  S T ER1 - D IY0 - ER0\nSTURDINESS  S T ER1 - D IY0 - N AH0 S\nSTURDIVANT  S T ER1 - D IH0 - V AH0 N T\nSTURDY  S T ER1 - D IY0\nSTURGELL  S T ER1 - G AH0 L\nSTURGEON  S T ER1 - JH AH0 N\nSTURGEON(2)  S T ER1 - JH IH0 N\nSTURGEONS  S T ER1 - JH AH0 N Z\nSTURGES  S T ER1 - JH IH0 Z\nSTURGESS  S T ER1 - G IH0 S\nSTURGILL  S T ER1 - G AH0 L\nSTURGIS  S T ER1 - JH IH0 S\nSTURKIE  S T ER1 - K IY0\nSTURM  S T ER1 M\nSTURMAN  S T ER1 - M AH0 N\nSTURMANS  S T ER1 - M AH0 N Z\nSTURMER  S T ER1 - M ER0\nSTURN  S T ER1 N\nSTURROCK  S T AO1 - R AH0 K\nSTURTEVANT  S T ER1 - T AH0 - V AH0 N T\nSTURTZ  S T ER1 T S\nSTURZA  S T ER1 - Z AH0\nSTUTES  S T UW1 T S\nSTUTESMAN  S T UW1 T S - M AH0 N\nSTUTEVILLE  S T UW1 T - V IH2 L\nSTUTHEIT  S T AH1 - TH AY0 T\nSTUTLER  S T AH1 T - L ER0\nSTUTNER  S T AH1 T - N ER0\nSTUTSMAN  S T AH1 T S - M AH0 N\nSTUTTER  S T AH1 - T ER0\nSTUTTERING  S T AH1 - T ER0 - IH0 NG\nSTUTTERS  S T AH1 - T ER0 Z\nSTUTTGART  S T AH1 T - G ER0 T\nSTUTTGART(2)  S T UW1 T - G AA2 R T\nSTUTTGART(3)  SH T UW1 T - G AA2 R T\nSTUTTS  S T AH1 T S\nSTUTZ  S T AH1 T S\nSTUTZMAN  S T AH1 T S - M AH0 N\nSTUVE  S T UW1 V\nSTUVER  S T UW1 - V ER0\nSTUYVESANT  S T AY1 - V AH0 - S AH0 N T\nSTY  S T AY1\nSTYER  S T AY1 - ER0\nSTYERS  S T AY1 - ER0 Z\nSTYLE  S T AY1 L\nSTYLED  S T AY1 L D\nSTYLES  S T AY1 L Z\nSTYLING  S T AY1 - L IH0 NG\nSTYLISH  S T AY1 - L IH0 SH\nSTYLISHLY  S T AY1 - L IH0 SH - L IY0\nSTYLIST  S T AY1 - L IH0 S T\nSTYLISTIC  S T AY0 - L IH1 - S T IH0 K\nSTYLISTICALLY  S T AY0 - L IH1 - S T IH0 K - L IY0\nSTYLISTS  S T AY1 - L IH0 S T S\nSTYLISTS(2)  S T AY1 - L IH0 S S\nSTYLISTS(3)  S T AY1 - L IH0 S\nSTYLITES  S T IH0 - L AY1 T S\nSTYLIZE  S T AY1 - L AY2 Z\nSTYLIZE(2)  S T AY1 - AH0 - L AY2 Z\nSTYLIZED  S T AY1 - L AY2 Z D\nSTYLUS  S T AY1 - L AH0 S\nSTYMIE  S T AY1 - M IY0\nSTYMIED  S T AY1 - M IY0 D\nSTYMIES  S T AY1 - M IY0 Z\nSTYNE  S T AY1 N\nSTYRENE  S T AY1 - R IY2 N\nSTYROFOAM  S T AY1 - R AH0 - F OW2 M\nSTYRON  S T AY1 - R AO0 N\nSTYS  S T IH1 S\nSTYX  S T IH1 K S\nST_CHARLES  S EY1 N T - CH AA1 - R AH0 L Z\nST_CLAIR  S EY1 N T - K L EH1 R\nST_CLAIRE  S EY1 N T - K L EH1 R\nST_CYR  S EY1 N T - K IH1 R\nST_CYR(2)  S EY1 N T - S IH1 R\nST_DENIS  S EY1 N T - D EH1 - N IH0 S\nST_DENNIS  S EY1 N T - D EH1 - N IH0 S\nST_GEORGE  S EY1 N T - JH AO1 R JH\nST_GERMAIN  S EY1 N T - JH ER2 - M EY1 N\nST_GERMAINE  S EY1 N T - JH ER2 - M EY1 N\nST_GERMAINE(2)  S AA1 N - ZH ER2 - M EY1 N\nST_HILAIRE  S EY1 N T - HH IH0 - L EY1 R\nST_JACQUES  S EY1 N T - JH AA1 K S\nST_JACQUES(2)  S AA1 N - ZH AA1 K S\nST_JAMES  S EY1 N T - JH EY1 M Z\nST_JEAN  S EY1 N T - JH IY1 N\nST_JOHN  S EY1 N T - JH AA1 N\nST_JULIEN  S EY1 N T - JH UW1 - L IY0 - AH0 N\nST_LAURENT  S EY1 N T - L AO1 - R AH0 N T\nST_LAURENT(2)  S AA1 N - L AO2 - R AO1 N T\nST_LAWRENCE  S EY1 N T - L AO1 - R AH0 N S\nST_LOUIS  S EY1 N T - L UW1 - AH0 S\nST_LOUIS(2)  S EY1 N T - L UW1 - IY0\nST_LUCIA  S EY1 N T - L UW1 - SH AH0\nST_LUCIA(2)  S EY1 N T - L UW2 - S IY1 - AH0\nST_MARIE  S EY1 N T - M ER0 - IY1\nST_MARTIN  S EY1 N T - M AA1 R - T IH0 N\nST_MARY  S EY1 N T - M EH1 - R IY0\nST_PETER  S EY1 N T - P IY1 - T ER0\nST_PETERSBURG  S EY1 N T - P IY1 - T ER0 Z - B ER0 G\nST_PIERRE  S EY1 N T - P IY0 - EH1 R\nST_THOMAS  S EY1 N T - T AA1 - M AH0 S\nST_THOMAS(2)  S EY1 N - T AA1 - M AH0 S\nSU  S UW1\nSU(2)  EH1 - S Y UW1\nSUARD  S UW1 - AA0 R D\nSUARD(2)  S W AA1 R D\nSUAREZ  S W AA0 - R EH1 Z\nSUASION  S W EY1 - ZH AH0 N\nSUATA  S UW0 - AA1 - T AH0\nSUATA'S  S UW0 - AA1 - T AH0 Z\nSUAVE  S W AA1 V\nSUAZO  S W AA1 - Z OW0\nSUB  S AH1 B\nSUB'S  S AH1 B Z\nSUB-WAY  S AH1 B - W EY2\nSUBA  S UW1 - B AH0\nSUBACUTE  S AH1 - B AH0 - K Y UW1 T\nSUBANDRIO  S AH0 - B AE1 N - D R IY0 - OW0\nSUBARU  S UW1 - B ER0 - UW0\nSUBASSEMBLIES  S AH2 - B AH0 - S EH1 M - B L IY0 Z\nSUBASSEMBLY  S AH2 - B AH0 - S EH1 M - B L IY0\nSUBATOMIC  S AH2 B - AH0 - T AA1 - M IH0 K\nSUBBED  S AH1 B D\nSUBBING  S AH1 - B IH0 NG\nSUBCHAPTER  S AH1 B - CH AE1 P - T ER0\nSUBCOMMANDER  S AH1 B - K AH0 - M AE2 N - D ER0\nSUBCOMMANDER'S  S AH1 B - K AH0 - M AE2 N - D ER0 Z\nSUBCOMMANDERS  S AH1 B - K AH0 - M AE2 N - D ER0 Z\nSUBCOMMITTEE  S AH1 B - K AH0 - M IH1 - T IY0\nSUBCOMMITTEE'S  S AH1 B - K AH0 - M IH1 - T IY0 Z\nSUBCOMMITTEES  S AH1 B - K AH0 - M IH1 - T IY0 Z\nSUBCOMPACT  S AH0 B - K AA1 M - P AE0 K T\nSUBCOMPACTS  S AH0 B - K AA1 M - P AE0 K T S\nSUBCONSCIOUS  S AH0 B - K AA1 N - SH AH0 S\nSUBCONSCIOUSLY  S AH0 B - K AA1 N - SH AH0 S - L IY0\nSUBCONTINENT  S AH0 B - K AA1 N - T IH0 - N AH0 N T\nSUBCONTINENTS  S AH0 B - K AA1 N - T IH0 - N AH0 N T S\nSUBCONTRACT  S AH0 B - K AA1 N - T R AE2 K T\nSUBCONTRACTED  S AH0 B - K AA1 N - T R AE0 K - T IH0 D\nSUBCONTRACTING  S AH2 B - K AH0 N - T R AE1 K - T IH0 NG\nSUBCONTRACTOR  S AH0 B - K AA1 N - T R AE2 K - T ER0\nSUBCONTRACTORS  S AH0 B - K AA1 N - T R AE0 K - T ER0 Z\nSUBCONTRACTS  S AH0 B - K AA1 N - T R AE2 K T S\nSUBCULTURE  S AH1 B - K AH2 L - CH ER0\nSUBCULTURES  S AH1 B - K AH2 L - CH ER0 Z\nSUBDIVIDE  S AH2 B - D AH0 - V AY1 D\nSUBDIVIDED  S AH2 B - D IH0 - V AY1 - D IH0 D\nSUBDIVISION  S AH1 B - D IH0 - V IH2 - ZH AH0 N\nSUBDIVISIONS  S AH1 B - D IH0 - V IH2 - ZH AH0 N Z\nSUBDUE  S AH0 B - D UW1\nSUBDUED  S AH0 B - D UW1 D\nSUBDUING  S AH0 B - D UW1 - IH0 NG\nSUBER  S UW1 - B ER0\nSUBFAMILIES  S AH1 B - F AE2 - M AH0 - L IY0 Z\nSUBFAMILY  S AH1 B - F AE2 - M AH0 - L IY0\nSUBGROUP  S AH1 B - G R UW2 P\nSUBGROUPS  S AH1 B - G R UW2 P S\nSUBHLOK  S AH1 B - L AA2 K\nSUBHUMAN  S AH2 B - HH Y UW1 - M AH0 N\nSUBIA  S UW0 - B IY1 - AH0\nSUBIC  S UW1 - B IH0 K\nSUBJECT  S AH0 B - JH EH1 K T\nSUBJECT'S  S AH1 B - JH IH0 K T S\nSUBJECT(2)  S AH1 B - JH IH0 K T\nSUBJECTED  S AH0 B - JH EH1 K - T IH0 D\nSUBJECTING  S AH0 B - JH EH1 K - T IH0 NG\nSUBJECTIVE  S AH0 B - JH EH1 K - T IH0 V\nSUBJECTIVITY  S AH0 B - JH EH0 K - T IH1 - V IH0 - T IY0\nSUBJECTS  S AH1 B - JH IH0 K T S\nSUBJECTS'  S AH1 B - JH EH0 K T S\nSUBJECTS'(2)  S AH1 B - JH EH0 K S\nSUBJECTS(2)  S AH0 B - JH EH1 K T S\nSUBJECTS(3)  S AH0 B - JH EH1 K S\nSUBJUGATE  S AH1 B - JH AH0 - G EY2 T\nSUBJUGATED  S AH1 B - JH AH0 - G EY2 - T IH0 D\nSUBKINGDOM  S AH0 B - K IH1 NG - D AH0 M\nSUBLEASE  S AH1 B - L IY2 S\nSUBLEASING  S AH0 B - L IY1 - S IH0 NG\nSUBLET  S AH1 - B L EH2 T\nSUBLETT  S UW1 - B L IH0 T\nSUBLIME  S AH0 - B L AY1 M\nSUBLIMINAL  S AH0 B - L IH1 - M IH0 - N AH0 L\nSUBLIMINALLY  S AH0 B - L IH1 - M IH0 - N AH0 - L IY0\nSUBLUXATION  S AH0 - B L AH0 K - S EY1 - SH AH0 N\nSUBLUXATIONS  S AH0 - B L AH0 K - S EY1 - SH AH0 N Z\nSUBMACHINE  S AH2 B - M AH0 - SH IY1 N\nSUBMARINE  S AH1 B - M ER0 - IY2 N\nSUBMARINE'S  S AH1 B - M ER0 - IY2 N Z\nSUBMARINE'S(2)  S AH0 B - M ER0 - IY1 N Z\nSUBMARINE(2)  S AH2 B - M ER0 - IY1 N\nSUBMARINES  S AH1 B - M ER0 - IY2 N Z\nSUBMARINES'S  S AH1 B - M ER0 - IY2 N - Z IH0 Z\nSUBMARINES(2)  S AH0 B - M ER0 - IY1 N Z\nSUBMERGE  S AH0 B - M ER1 JH\nSUBMERGED  S AH0 B - M ER1 JH D\nSUBMERGENCE  S AH0 B - M ER1 - JH AH0 N S\nSUBMERSE  S AH0 B - M ER1 S\nSUBMERSED  S AH0 B - M ER1 S T\nSUBMERSIBLE  S AH0 B - M ER1 - S IH0 - B AH0 L\nSUBMERSION  S AH0 B - M ER1 - ZH AH0 N\nSUBMINIMUM  S AH0 B - M IH1 - N IH0 - M AH0 M\nSUBMISSION  S AH0 B - M IH1 - SH AH0 N\nSUBMISSIONS  S AH0 B - M IH1 - SH AH0 N Z\nSUBMISSIVE  S AH0 B - M IH1 - S IH0 V\nSUBMIT  S AH0 B - M IH1 T\nSUBMITS  S AH2 B - M IH1 T S\nSUBMITTED  S AH0 B - M IH1 - T AH0 D\nSUBMITTING  S AH0 B - M IH1 - T IH0 NG\nSUBNOTEBOOK  S AH1 B - N OW1 T - B UH2 K\nSUBORDINATE  S AH0 - B AO1 R - D AH0 - N EY2 T\nSUBORDINATE(2)  S AH0 - B AO1 R - D AH0 N - AH0 T\nSUBORDINATED  S AH0 - B AO1 R - D AH0 - N EY2 - T IH0 D\nSUBORDINATES  S AH0 - B AO1 R - D AH0 - N EY2 T S\nSUBORDINATES(2)  S AH0 - B AO1 R - D AH0 N - AH0 T S\nSUBORDINATING  S AH0 - B AO1 R - D AH0 - N EY2 - T IH0 NG\nSUBORDINATION  S AH0 - B AO2 R - D AH0 - N EY1 - SH AH0 N\nSUBOTNICK  S AH0 - B AA1 T - N IH0 K\nSUBPAR  S AH0 B - P AA1 R\nSUBPLOT  S AH1 B - P L AA0 T\nSUBPLOTS  S AH1 B - P L AA0 T S\nSUBPOENA  S AH0 - P IY1 - N AH0\nSUBPOENAED  S AH0 - P IY1 - N AH0 D\nSUBPOENAING  S AH0 - P IY1 - N AH0 - IH0 NG\nSUBPOENAS  S AH0 - P IY1 - N AH0 Z\nSUBPRINCIPAL  S AH0 B - P R IH1 N - S AH0 - P AH0 L\nSUBPRINCIPALS  S AH0 B - P R IH1 N - S AH0 - P AH0 L Z\nSUBRAMANIAN  S UW2 - B R AH0 - M AA1 - N IY0 - AH0 N\nSUBROTO  S UW0 - B R OW1 - T OW0\nSUBS  S AH1 B Z\nSUBS'S  S AH1 B - Z IH0 Z\nSUBSAHARAN  S AH2 B - S AH0 - HH EH1 - R AH0 N\nSUBSCRIBE  S AH0 B - S K R AY1 B\nSUBSCRIBED  S AH0 B - S K R AY1 B D\nSUBSCRIBER  S AH0 B - S K R AY1 - B ER0\nSUBSCRIBER'S  S AH0 B - S K R AY1 - B ER0 Z\nSUBSCRIBERS  S AH0 B - S K R AY1 - B ER0 Z\nSUBSCRIBERS'  S AH0 B - S K R AY1 - B ER0 Z\nSUBSCRIBES  S AH0 B - S K R AY1 B Z\nSUBSCRIBING  S AH0 B - S K R AY1 - B IH0 NG\nSUBSCRIPTION  S AH0 B - S K R IH1 P - SH AH0 N\nSUBSCRIPTIONS  S AH0 B - S K R IH1 P - SH AH0 N Z\nSUBSECTION  S AH1 B - S EH0 K - SH AH0 N\nSUBSEQUENT  S AH1 B - S AH0 - K W AH0 N T\nSUBSEQUENTLY  S AH1 B - S AH0 - K W AH0 N T - L IY0\nSUBSERVIENCE  S AH0 B - S ER1 - V IY0 - AH0 N S\nSUBSERVIENT  S AH0 B - S ER1 - V IY0 - AH0 N T\nSUBSET  S AH1 B - S EH2 T\nSUBSIDE  S AH0 B - S AY1 D\nSUBSIDED  S AH0 B - S AY1 - D IH0 D\nSUBSIDENCE  S AH0 B - S AY1 - D AH0 N S\nSUBSIDES  S AH0 B - S AY1 D Z\nSUBSIDIARIES  S AH0 B - S IH1 - D IY0 - EH2 - R IY0 Z\nSUBSIDIARIES'  S AH0 B - S IH1 - D IY0 - EH2 - R IY0 Z\nSUBSIDIARY  S AH0 B - S IH1 - D IY0 - EH2 - R IY0\nSUBSIDIARY'S  S AH0 B - S IH1 - D IY0 - EH2 - R IY0 Z\nSUBSIDIES  S AH1 B - S AH0 - D IY0 Z\nSUBSIDIES(2)  S AH1 B - S IH0 - D IY0 Z\nSUBSIDING  S AH0 B - S AY1 - D IH0 NG\nSUBSIDIZATION  S AH2 B - S IH0 - D IH0 - Z EY1 - SH AH0 N\nSUBSIDIZE  S AH1 B - S IH0 - D AY2 Z\nSUBSIDIZED  S AH1 B - S IH0 - D AY2 Z D\nSUBSIDIZES  S AH1 B - S IH0 - D AY2 - Z IH0 Z\nSUBSIDIZING  S AH1 B - S IH0 - D AY2 - Z IH0 NG\nSUBSIDY  S AH1 B - S IH0 - D IY0\nSUBSIST  S AH0 B - S IH1 S T\nSUBSISTENCE  S AH0 B - S IH1 - S T AH0 N S\nSUBSOIL  S AH1 B - S OY2 L\nSUBSTANCE  S AH1 B - S T AH0 N S\nSUBSTANCES  S AH1 B - S T AH0 N - S AH0 Z\nSUBSTANCES(2)  S AH1 B - S T AH0 N - S IH0 Z\nSUBSTANDARD  S AH0 B - S T AE1 N - D ER0 D\nSUBSTANTIAL  S AH0 B - S T AE1 N - CH AH0 L\nSUBSTANTIAL(2)  S AH0 B - S T AE1 N - SH AH0 L\nSUBSTANTIALLY  S AH0 B - S T AE1 N - SH AH0 - L IY0\nSUBSTANTIALLY(2)  S AH0 B - S T AE1 N - CH AH0 - L IY0\nSUBSTANTIATE  S AH0 B - S T AE1 N - CH IY0 - EY2 T\nSUBSTANTIATE(2)  S AH0 B - S T AE1 N - SH IY0 - EY2 T\nSUBSTANTIATED  S AH0 B - S T AE1 N - SH IY0 - EY2 - T IH0 D\nSUBSTANTIATED(2)  S AH0 B - S T AE1 N - CH IY0 - EY2 - T IH0 D\nSUBSTANTIATES  S AH0 B - S T AE1 N - CH IY0 - EY2 T S\nSUBSTANTIATES(2)  S AH0 B - S T AE1 N - SH IY0 - EY2 T S\nSUBSTANTIATION  S AH0 B - S T AE2 N - CH IY0 - EY1 - SH AH0 N\nSUBSTANTIATION(2)  S AH0 B - S T AE2 N - SH IY0 - EY1 - SH AH0 N\nSUBSTANTIVE  S AH1 B - S T AH0 N - T IH0 V\nSUBSTANTIVELY  S AH1 B - S T AH0 N - T IH0 V - L IY0\nSUBSTATION  S AH1 B - S T EY2 - SH AH0 N\nSUBSTITUTE  S AH1 B - S T AH0 - T UW2 T\nSUBSTITUTED  S AH1 B - S T AH0 - T UW2 - T AH0 D\nSUBSTITUTES  S AH1 B - S T AH0 - T UW2 T S\nSUBSTITUTING  S AH1 B - S T IH0 - T UW2 - T IH0 NG\nSUBSTITUTION  S AH2 B - S T IH0 - T UW1 - SH AH0 N\nSUBSTITUTIONS  S AH2 B - S T IH0 - T Y UW1 - SH AH0 N Z\nSUBSTRATE  S AH1 B - S T R EY2 T\nSUBSTRATES  S AH1 B - S T R EY2 T S\nSUBSURFACE  S AH1 B - S ER2 - F AH0 S\nSUBSYSTEM  S AH1 B - S IH2 - S T AH0 M\nSUBSYSTEMS  S AH1 B - S IH2 - S T AH0 M Z\nSUBTERFUGE  S AH1 B - T ER0 - F Y UW2 JH\nSUBTERRANEAN  S AH0 B - T ER0 - EY1 - N IY0 - AH0 N\nSUBTEXT  S AH1 B - T EH2 K S T\nSUBTITLE  S AH1 B - T AY2 - T AH0 L\nSUBTITLED  S AH1 B - T AY2 - T AH0 L D\nSUBTITLES  S AH1 B - T AY2 - T AH0 L Z\nSUBTLE  S AH1 - T AH0 L\nSUBTLER  S AH1 - T AH0 L - ER0\nSUBTLER(2)  S AH1 T - L ER0\nSUBTLETIES  S AH1 - T AH0 L - T IY0 Z\nSUBTLETY  S AH1 - T AH0 L - T IY0\nSUBTLY  S AH1 - T AH0 - L IY0\nSUBTRACT  S AH0 B - T R AE1 K T\nSUBTRACTED  S AH0 B - T R AE1 K - T IH0 D\nSUBTRACTING  S AH0 B - T R AE1 K - T IH0 NG\nSUBTRACTION  S AH0 B - T R AE1 K - SH AH0 N\nSUBTYPE  S AH1 B - T AY2 P\nSUBTYPING  S AH1 B - T AY2 - P IH0 NG\nSUBURB  S AH1 - B ER0 B\nSUBURB'S  S AH1 - B ER0 B Z\nSUBURBAN  S AH0 - B ER1 - B AH0 N\nSUBURBANITE  S AH0 - B ER1 - B AH0 - N AY2 T\nSUBURBANITES  S AH0 - B ER1 - B AH0 - N AY2 T S\nSUBURBANIZATION  S AH0 - B ER2 - B AH0 - N IH0 - Z EY1 - SH AH0 N\nSUBURBANIZE  S AH0 - B ER1 - B AH0 - N AY2 Z\nSUBURBANS  S AH0 - B ER1 - B AH0 N Z\nSUBURBIA  S AH0 - B ER1 - B IY0 - AH0\nSUBURBS  S AH1 - B ER0 B Z\nSUBVERSION  S AH0 B - V ER1 - ZH AH0 N\nSUBVERSIVE  S AH0 B - V ER1 - S IH0 V\nSUBVERSIVES  S AH0 B - V ER1 - S IH0 V Z\nSUBVERT  S AH0 B - V ER1 T\nSUBVERTED  S AH0 B - V ER1 - T IH0 D\nSUBVERTING  S AH0 B - V ER1 - T IH0 NG\nSUBVERTS  S AH0 B - V ER1 T S\nSUBVOLCANIC  S AH2 B - V AA0 L - K AE1 - N IH0 K\nSUBWAY  S AH1 B - W EY2\nSUBWAYS  S AH1 B - W EY2 Z\nSUBZERO  S AH2 B - Z IH1 - R OW0\nSUBZERO(2)  S AH2 B - Z IY1 - R OW0\nSUCCEED  S AH0 K - S IY1 D\nSUCCEEDED  S AH0 K - S IY1 - D AH0 D\nSUCCEEDED(2)  S AH0 K - S IY1 - D IH0 D\nSUCCEEDING  S AH0 K - S IY1 - D IH0 NG\nSUCCEEDS  S AH0 K - S IY1 D Z\nSUCCESS  S AH0 K - S EH1 S\nSUCCESSES  S AH0 K - S EH1 - S AH0 Z\nSUCCESSES(2)  S AH0 K - S EH1 - S IH0 Z\nSUCCESSFUL  S AH0 K - S EH1 S - F AH0 L\nSUCCESSFULLY  S AH0 K - S EH1 S - F AH0 - L IY0\nSUCCESSION  S AH0 K - S EH1 - SH AH0 N\nSUCCESSIVE  S AH0 K - S EH1 - S IH0 V\nSUCCESSIVELY  S AH0 K - S EH1 - S IH0 V - L IY0\nSUCCESSOR  S AH0 K - S EH1 - S ER0\nSUCCESSORS  S AH0 K - S EH1 - S ER0 Z\nSUCCINCT  S AH0 K - S IH1 NG K T\nSUCCINCTLY  S AH0 K - S IH1 NG K T - L IY0\nSUCCOR  S AH1 - K ER0\nSUCCULENT  S AH1 - K Y AH0 - L IH0 N T\nSUCCULENTS  S AH1 - K Y AH0 - L AH0 N T S\nSUCCUMB  S AH0 - K AH1 M\nSUCCUMBED  S AH0 - K AH1 M D\nSUCCUMBING  S AH0 - K AH1 - M IH0 NG\nSUCCUMBS  S AH0 - K AH1 M Z\nSUCH  S AH1 CH\nSUCHAN  S AH1 - CH AH0 N\nSUCHANEK  S AH1 - K AH0 - N IH0 K\nSUCHARD  S UW0 - SH AA1 R D\nSUCHARSKI  S AH0 - K AA1 R S - K IY0\nSUCHECKI  S AH0 - K EH1 - K IY0\nSUCHER  S AH1 - CH ER0\nSUCHINDA  S UW2 - CH IH1 N - D AH0\nSUCHOCKI  S AH0 - K AA1 - K IY0\nSUCHOMEL  S AH1 - K OW0 - M EH2 L\nSUCHY  S AH1 - CH IY0\nSUCK  S AH1 K\nSUCKED  S AH1 K T\nSUCKER  S AH1 - K ER0\nSUCKERED  S AH1 - K ER0 D\nSUCKERS  S AH1 - K ER0 Z\nSUCKING  S AH1 - K IH0 NG\nSUCKLE  S AH1 - K AH0 L\nSUCKLING  S AH1 - K L IH0 NG\nSUCKOW  S AH1 - K AW0\nSUCKROW  S AH1 - K R OW0\nSUCKS  S AH1 K S\nSUCRALOSE  S UW1 - K R AH0 - L OW2 S\nSUCRE  S UW1 - K ER0\nSUCROSE  S UW1 - K R OW0 S\nSUCTION  S AH1 K - SH AH0 N\nSUDA  S UW1 - D AH0\nSUDAFED  S UW1 - D AH0 - F EH2 D\nSUDAN  S UW0 - D AE1 N\nSUDAN'S  S UW0 - D AE1 N Z\nSUDANESE  S UW2 - D AH0 - N IY1 Z\nSUDANO  S UW0 - D AA1 - N OW0\nSUDBECK  S AH1 D - B EH2 K\nSUDBERRY  S AH1 D - B EH2 - R IY0\nSUDBURY  S AH1 D - B EH2 - R IY0\nSUDBURY'S  S AH1 D - B EH2 - R IY0 Z\nSUDD  S AH1 D\nSUDDAM  S AH2 - D AA1 M\nSUDDAM'S  S AH2 - D AA1 M Z\nSUDDARTH  S AH1 - D AA0 R TH\nSUDDATH  S AH1 - D AH0 TH\nSUDDEN  S AH1 - D AH0 N\nSUDDENLY  S AH1 - D AH0 N - L IY0\nSUDDENNESS  S AH1 - D AH0 N - N AH0 S\nSUDDERTH  S AH1 - D ER0 TH\nSUDDETH  S AH1 - D IH0 TH\nSUDDRETH  S AH1 - D R IH0 TH\nSUDDUTH  S AH1 - D AH0 TH\nSUDER  S UW1 - D ER0\nSUDERMAN  S UW1 - D ER0 - M AH0 N\nSUDLER  S UW1 - D AH0 - L ER0\nSUDLER(2)  S UW1 D - L ER0\nSUDOL  S UW1 - D AH0 L\nSUDS  S AH1 D Z\nSUE  S UW1\nSUED  S UW1 D\nSUEDE  S W EY1 D\nSUEDES  S W EY1 D Z\nSUEKER  S UW1 - K ER0\nSUEN  S UW1 N\nSUES  S UW1 Z\nSUESS  S W IH1 S\nSUEY  S UW1 - IY0\nSUEZ  S UW1 - EH0 Z\nSUEZ'S  S UW1 - EH0 - Z IH0 Z\nSUFFER  S AH1 - F ER0\nSUFFERED  S AH1 - F ER0 D\nSUFFERER  S AH1 - F ER0 - ER0\nSUFFERERS  S AH1 - F ER0 - ER0 Z\nSUFFERING  S AH1 - F ER0 - IH0 NG\nSUFFERING(2)  S AH1 - F R IH0 NG\nSUFFERINGS  S AH1 - F ER0 - IH0 NG Z\nSUFFERINGS(2)  S AH1 - F R IH0 NG Z\nSUFFERN  S AH1 - F ER0 N\nSUFFERS  S AH1 - F ER0 Z\nSUFFICE  S AH0 - F AY1 S\nSUFFICED  S AH0 - F AY1 S T\nSUFFICES  S AH0 - F AY1 - S IH0 Z\nSUFFICIENCY  S AH0 - F IH1 - SH AH0 N - S IY0\nSUFFICIENT  S AH0 - F IH1 - SH AH0 N T\nSUFFICIENTLY  S AH0 - F IH1 - SH AH0 N T - L IY0\nSUFFIELD  S AH1 - F IY0 L D\nSUFFIELD'S  S AH1 - F IY0 L D Z\nSUFFIX  S AH1 - F IH0 K S\nSUFFOCATE  S AH1 - F AH0 - K EY2 T\nSUFFOCATED  S AH1 - F AH0 - K EY2 - T IH0 D\nSUFFOCATING  S AH1 - F AH0 - K EY2 - T IH0 NG\nSUFFOCATION  S AH2 - F AH0 - K EY1 - SH AH0 N\nSUFFOLK  S AH1 - F AH0 K\nSUFFRAGE  S AH1 - F R IH0 JH\nSUFFRAGETTE  S AH2 - F R AH0 - JH EH1 T\nSUFFRAGETTES  S AH2 - F R AH0 - JH EH1 T S\nSUFFRAGIST  S AH1 - F R AH0 - JH IH0 S T\nSUFFRAGISTS  S AH1 - F R AH0 - JH IH0 S T S\nSUFFRAGISTS(2)  S AH1 - F R AH0 - JH IH0 S S\nSUFFRAGISTS(3)  S AH1 - F R AH0 - JH IH0 S\nSUFFUSE  S AH0 - F Y UW1 Z\nSUFFUSED  S AH0 - F Y UW1 Z D\nSUGAR  SH UH1 - G ER0\nSUGAR'S  SH UH1 - G ER0 Z\nSUGARED  SH UH1 - G ER0 D\nSUGARMAN  SH UH1 - G ER0 - M AH0 N\nSUGARS  SH UH1 - G ER0 Z\nSUGARY  SH UH1 - G ER0 - IY0\nSUGDEN  S AH1 G - D AH0 N\nSUGERMAN  S UW1 - G ER0 - M AH0 N\nSUGG  S AH1 G\nSUGGEST  S AH0 G - JH EH1 S T\nSUGGESTED  S AH0 G - JH EH1 - S T AH0 D\nSUGGESTED(2)  S AH0 G - JH EH1 - S T IH0 D\nSUGGESTIBLE  S AH0 G - JH EH1 - S T AH0 - B AH0 L\nSUGGESTING  S AH0 G - JH EH1 - S T IH0 NG\nSUGGESTION  S AH0 G - JH EH1 S - CH AH0 N\nSUGGESTIONS  S AH0 G - JH EH1 S - CH AH0 N Z\nSUGGESTIVE  S AH0 G - JH EH1 - S T IH0 V\nSUGGESTIVENESS  S AH0 G - JH EH1 - S T IH0 V - N AH0 S\nSUGGESTS  S AH0 G - JH EH1 S T S\nSUGGESTS(2)  S AH0 G - JH EH1 S S\nSUGGESTS(3)  S AH0 G - JH EH1 S\nSUGGS  S AH1 G Z\nSUGIHARA  S UW0 - G IY0 - HH AA1 - R AH0\nSUGIMOTO  S UW0 - G IY0 - M OW1 - T OW0\nSUGIYAMA  S UW0 - G IY0 - Y AA1 - M AH0\nSUGRUE  S AH1 - G R UW0\nSUH  S AH1\nSUHARTO  S UW0 - HH AA1 R - T OW0\nSUHARTO'S  S UW0 - HH AA1 R - T OW0 Z\nSUHLER  S UW1 - L ER0\nSUHM  S UW1 M\nSUHR  S UH1 R\nSUHRE  S UH1 R\nSUHUA  S UW1 HH - W AA1\nSUHUD  S UW0 - HH UH1 D\nSUI  S UW1 - IY0\nSUI(2)  S W IY0\nSUICIDAL  S UW2 - AH0 - S AY1 - D AH0 L\nSUICIDE  S UW1 - AH0 - S AY2 D\nSUICIDE(2)  S UW1 - IH0 - S AY2 D\nSUICIDES  S UW1 - AH0 - S AY2 D Z\nSUING  S UW1 - IH0 NG\nSUIRE  S UH1 R\nSUISSE  S W IH1 S\nSUISSE'S  S W IH1 - S IH0 Z\nSUISSE'S(2)  S W IY1 - S IH0 Z\nSUISSE(2)  S W IY1 S\nSUIT  S UW1 T\nSUIT'S  S UW1 T S\nSUITABILITY  S UW2 - T AH0 - B IH1 - L IH0 - T IY0\nSUITABLE  S UW1 - T AH0 - B AH0 L\nSUITABLY  S UW1 - T AH0 - B L IY0\nSUITCASE  S UW1 T - K EY2 S\nSUITCASES  S UW1 T - K EY2 - S IH0 Z\nSUITE  S W IY1 T\nSUITED  S UW1 - T AH0 D\nSUITED(2)  S UW1 - T IH0 D\nSUITER  S UW1 - T ER0\nSUITES  S W IY1 T S\nSUITOR  S UW1 - T ER0\nSUITOR'S  S UW1 - T ER0 Z\nSUITORS  S UW1 - T ER0 Z\nSUITS  S UW1 T S\nSUITT  S UW1 T\nSUK  S AH1 K\nSUKARNO  S UW0 - K AA1 R - N OW0\nSUKARNO'S  S UW0 - K AA1 R - N OW0 Z\nSUKEY  S UW1 - K IY0\nSUKHAREV  S AH1 K - HH ER0 - AH0 V\nSUKHUMI  S UW2 K - HH UW1 - M IY0\nSUKI  S UW1 - K IY0\nSUKIYAKI  S UW0 - K IY0 - AA1 - K IY0\nSUKRU  S UH1 - K R UW0\nSUKRU(2)  S UW1 - K R UW0\nSUKTHANKAR  S UW0 K - T AA1 NG - K AA2 R\nSUKUP  S UW1 K - AH0 P\nSUL  S AH1 L\nSULAK  S UW1 - L AH0 K\nSULAWESI  S UW2 - L AH0 - W EH1 - S IY0\nSULCER  S AH1 L - S ER0\nSULEK  S UW1 - L IH0 K\nSULESKI  S Y UW0 - L EH1 S - K IY0\nSULEWSKI  S Y UW0 - L EH1 F S - K IY0\nSULEYMAN  S UW1 - L IY0 - M AH0 N\nSULFA  S AH1 L - F AH0\nSULFATE  S AH1 L - F EY2 T\nSULFIDE  S AH1 L - F AY2 D\nSULFITE  S AH1 L - F AY2 T\nSULFITES  S AH1 L - F AY2 T S\nSULFUR  S AH1 L - F ER0\nSULFURIC  S AH0 L - F Y UH1 - R IH0 K\nSULGRAVE  S AH1 L - G R EY2 V\nSULIK  S UW1 - L IH0 K\nSULK  S AH1 L K\nSULKED  S AH1 L K T\nSULKING  S AH1 L - K IH0 NG\nSULKOWSKI  S AH0 L - K AO1 F S - K IY0\nSULLEN  S AH1 - L AH0 N\nSULLENBERGER  S AH1 - L AH0 N - B ER0 - G ER0\nSULLENGER  S UW1 - L IH0 N - JH ER0\nSULLENS  S AH1 - L AH0 N Z\nSULLIE  S AH1 - L IY0\nSULLIED  S AH1 - L IY0 D\nSULLINGER  S AH1 L - IH0 - NG ER0\nSULLINS  S AH1 - L IH0 N Z\nSULLIVAN  S AH1 - L AH0 - V AH0 N\nSULLIVAN'S  S AH1 - L IH0 - V AH0 N Z\nSULLIVAN(2)  S AH1 - L IH0 - V AH0 N\nSULLIVANS  S AH1 - L IH0 - V AH0 N Z\nSULLIVANT  S AH1 - L IH0 - V AH0 N T\nSULLO  S UW1 - L OW0\nSULLY  S AH1 - L IY0\nSULPETRO  S UW0 L - P EH1 - T R OW0\nSULPHATE  S AH1 L - F EY2 T\nSULPHATES  S AH1 L - F EY2 T S\nSULPHUR  S AH1 L - F ER0\nSULSER  S AH1 L - S ER0\nSULT  S AH1 L T\nSULTAN  S AH1 L - T AH0 N\nSULTAN'S  S AH1 L - T AH0 N Z\nSULTANATE  S AH1 L - T AH0 - N AH0 T\nSULTANS  S AH1 L - T AH0 N Z\nSULTON  S AH1 L - T AH0 N\nSULTRY  S AH1 L - T R IY0\nSULYA  S UW1 - L Y AH0\nSULZBACH  S AH1 L Z - B AA0 K\nSULZBERGER  S AH1 L T S - B ER0 - G ER0\nSULZER  S AH1 L - Z ER0\nSUM  S AH1 M\nSUMA  S UW1 - M AH0\nSUMAC  S UW1 - M AE0 K\nSUMAN  S UW1 - M AH0 N\nSUMARLIN  S UW2 - M AA1 R - L IH0 N\nSUMATOMA  S UW2 - M AH0 - T OW1 - M AH0\nSUMATOMO  S UW2 - M AH0 - T OW1 - M OW0\nSUMATRA  S UW2 - M AA1 - T R AH0\nSUMATRAN  S UW2 - M AA1 - T R AH0 N\nSUMERIA  S AH0 - M ER1 - IY0 - AH0\nSUMERLIN  S AH1 - M ER0 - L IH0 N\nSUMGAIT  S AH0 M - G EY1 T\nSUMIDA  S UW0 - M IY1 - D AH0\nSUMINSKI  S AH0 - M IH1 N - S K IY0\nSUMITA  S UW0 - M IY1 - T AH0\nSUMITA'S  S UW0 - M IY1 - T AH0 Z\nSUMITOMO  S UW2 - M IH0 - T OW1 - M OW0\nSUMITOMO'S  S UW2 - M IH0 - T OW1 - M OW0 Z\nSUMLER  S AH1 M - L ER0\nSUMLIN  S AH1 M - L IH0 N\nSUMMA  S UW1 - M AH0\nSUMMAGRAPHIC  S AH2 - M AH0 - G R AE1 - F IH0 K\nSUMMAGRAPHICS  S AH2 - M AH0 - G R AE1 - F IH0 K S\nSUMMAR  S AH1 - M ER0\nSUMMARIES  S AH1 - M ER0 - IY0 Z\nSUMMARILY  S AH0 - M EH1 - R IH0 - L IY0\nSUMMARIZE  S AH1 - M ER0 - AY2 Z\nSUMMARIZED  S AH1 - M ER0 - AY2 Z D\nSUMMARIZES  S AH1 - M ER0 - AY2 - Z IH0 Z\nSUMMARIZING  S AH1 - M ER0 - AY2 - Z IH0 NG\nSUMMARY  S AH1 - M ER0 - IY0\nSUMMATION  S AH0 - M EY1 - SH AH0 N\nSUMMATIONS  S AH0 - M EY1 - SH AH0 N Z\nSUMMCORP  S AH1 M - K AO0 R P\nSUMMED  S AH1 M D\nSUMMER  S AH1 - M ER0\nSUMMER'S  S AH1 - M ER0 Z\nSUMMERALL  S AH1 - M ER0 - AO2 L\nSUMMERFIELD  S AH1 - M ER0 - F IY2 L D\nSUMMERFORD  S AH1 - M ER0 - F ER0 D\nSUMMERHILL  S AH1 - M ER0 - HH IH2 L\nSUMMERLIN  S AH1 - M ER0 - L IH0 N\nSUMMEROUR  S AH1 - M ER0 - ER0\nSUMMERS  S AH1 - M ER0 Z\nSUMMERS'S  S AH1 - M ER0 - Z IH0 Z\nSUMMERSON  S AH1 - M ER0 - S AH0 N\nSUMMERTIME  S AH1 - M ER0 - T AY2 M\nSUMMERVILLE  S AH1 - M ER0 - V IH2 L\nSUMMEY  S AH1 - M IY0\nSUMMING  S AH1 - M IH0 NG\nSUMMIT  S AH1 - M AH0 T\nSUMMIT'S  S AH1 - M AH0 T S\nSUMMIT(2)  S AH1 - M IH0 T\nSUMMITEER  S AH2 - M IH0 - T IH1 R\nSUMMITEERS  S AH2 - M IH0 - T IH1 R Z\nSUMMITRY  S AH1 - M IH0 - T R IY0\nSUMMITS  S AH1 - M IH0 T S\nSUMMITT  S AH1 - M IH0 T\nSUMMITVILLE  S AH1 - M IH0 T - V IH0 L\nSUMMON  S AH1 - M AH0 N\nSUMMONED  S AH1 - M AH0 N D\nSUMMONING  S AH1 - M AH0 - N IH0 NG\nSUMMONS  S AH1 - M AH0 N Z\nSUMMONSED  S AH1 - M AH0 N Z D\nSUMMONSES  S AH1 - M AH0 N - Z IH0 Z\nSUMMOR'S  S AH1 - M ER0 Z\nSUMMUM  S AH1 - M AH0 M\nSUMMY  S AH1 - M IY0\nSUMNER  S AH1 M - N ER0\nSUMNERS  S AH1 M - N ER0 Z\nSUMO  S UW1 - M OW0\nSUMP  S AH1 M P\nSUMPTER  S AH1 M P - T ER0\nSUMPTUOUS  S AH1 M P - CH W AH0 S\nSUMPTUOUS(2)  S AH1 M P - CH UW0 - AH0 S\nSUMRALL  S AH1 - M R AH0 L\nSUMRELL  S UW0 M - R EY1 L\nSUMROW  S AH1 M - R OW2\nSUMS  S AH1 M Z\nSUMTER  S AH1 M - T ER0\nSUN  S AH1 N\nSUN'S  S AH1 N Z\nSUNAMERICA  S AH1 - N AH0 - M EH1 - R AH0 - K AH0\nSUNAU  S UW1 - N AW0\nSUNBATH  S AH1 N - B AE2 TH\nSUNBATHE  S AH1 N - B EY2 DH\nSUNBATHING  S AH1 N - B EY2 - DH IH0 NG\nSUNBEAM  S AH1 N - B IY2 M\nSUNBEAM'S  S AH1 N - B IY2 M Z\nSUNBELT  S AH1 N - B EH2 L T\nSUNBELT'S  S AH1 N - B EH2 L T S\nSUNBIRD  S AH1 N - B ER2 D\nSUNBIRDS  S AH1 N - B ER2 D Z\nSUNBURN  S AH1 N - B ER2 N\nSUNBURNED  S AH1 N - B ER2 N D\nSUNCOAST  S AH1 N - K OW2 S T\nSUNCOOK  S AH1 N - K UH2 K\nSUNCOR  S AH1 N - K AO2 R\nSUND  S AH1 N D\nSUNDAE  S AH1 N - D EY0\nSUNDAE'S  S AH1 N - D EY2 Z\nSUNDAHL  S AH1 N - D AA2 L\nSUNDAI  S AH0 N - D AY1\nSUNDANCE  S AH1 N - D AE2 N S\nSUNDAR  S UW1 N - D AA0 R\nSUNDARARAJAN  S UW0 N - D AA2 - R AH0 - R AA1 - JH AH0 N\nSUNDAY  S AH1 N - D EY2\nSUNDAY'S  S AH1 N - D EY2 Z\nSUNDAY'S(2)  S AH1 N - D IY2 Z\nSUNDAY(2)  S AH1 N - D IY2\nSUNDAYS  S AH1 N - D EY2 Z\nSUNDAYS(2)  S AH1 N - D IY2 Z\nSUNDBERG  S AH1 N D - B ER0 G\nSUNDBY  S AH1 N D - B IY0\nSUNDE  S AH1 N D\nSUNDEEN  S AH1 N - D IY0 N\nSUNDELL  S AH1 N - D AH0 L\nSUNDER  S AH1 N - D ER0\nSUNDERLAND  S AH1 N - D ER0 - L AH0 N D\nSUNDERLIN  S AH1 N - D ER0 - L IH0 N\nSUNDERMAN  S AH1 N - D ER0 - M AH0 N\nSUNDERMEYER  S AH1 N - D ER0 - M AY0 - ER0\nSUNDEWS  S AH1 N - D UW2 Z\nSUNDHEIM  S AH1 N D - HH AY2 M\nSUNDIAL  S AH1 N - D AY2 L\nSUNDIN  S AH1 N - D AH0 N\nSUNDLUN  S AH1 N D - L AH0 N\nSUNDOWN  S AH1 N - D AW2 N\nSUNDQUIST  S AH1 N D - K W IH2 S T\nSUNDRY  S AH1 N - D R IY0\nSUNDSTRAND  S AH1 N D - S T R AE2 N D\nSUNDSTROM  S AH1 N D - S T R AH0 M\nSUNDT  S AH1 N T\nSUNDY  S AH1 N - D IY0\nSUNFIRE  S AH1 N - F AY2 R\nSUNFISH  S AH1 N - F IH2 SH\nSUNFLOWER  S AH1 N - F L AW2 - ER0\nSUNFLOWERS  S AH1 N - F L AW2 - ER0 Z\nSUNG  S AH1 NG\nSUNG'S  S AH1 NG Z\nSUNGARD  S AH1 N - G AA2 R D\nSUNGARD'S  S AH1 N - G AA2 R D Z\nSUNGLASS  S AH1 N - G L AE2 S\nSUNGLASSES  S AH1 N - G L AE2 - S IH0 Z\nSUNGROUP  S AH1 N - G R UW2 P\nSUNIA  S UW1 - N IY0 - AH0\nSUNIGA  S UW0 - N IY1 - G AH0\nSUNIL  S UW0 - N IH1 L\nSUNK  S AH1 NG K\nSUNKEN  S AH1 NG - K AH0 N\nSUNKIST  S AH1 N - K IH2 S T\nSUNLAND  S AH1 N - L AE2 N D\nSUNLIGHT  S AH1 N - L AY2 T\nSUNLIT  S AH1 N - L IH2 T\nSUNLITE  S AH1 N - L AY2 T\nSUNNI  S UW1 - N IY0\nSUNNING  S AH1 - N IH0 NG\nSUNNIS  S UH1 - N IY2 Z\nSUNNY  S AH1 - N IY0\nSUNNYSIDE  S AH1 - N IY0 - S AY2 D\nSUNNYVALE  S AH1 - N IY0 - V EY2 L\nSUNOBE  S UW0 - N OW1 - B IY0\nSUNOBE'S  S UW0 - N OW1 - B IY0 Z\nSUNOCO  S IH0 - N OW1 - K OW0\nSUNPOINT  S AH1 N - P OY2 N T\nSUNRISE  S AH1 N - R AY2 Z\nSUNRISE'S  S AH1 N - R AY2 - Z IH0 Z\nSUNROOF  S AH1 N - R UW2 F\nSUNROOM  S AH1 N - R UW2 M\nSUNS  S AH1 N Z\nSUNSCREEN  S AH0 N - S K R IY1 N\nSUNSCREEN(2)  S AH1 N - S K R IY0 N\nSUNSCREENS  S AH0 N - S K R IY1 N Z\nSUNSCREENS(2)  S AH1 N - S K R IY0 N Z\nSUNSERI  S AH0 N - S EH1 - R IY0\nSUNSET  S AH1 N - S EH2 T\nSUNSETS  S AH1 N - S EH2 T S\nSUNSHINE  S AH1 N - SH AY2 N\nSUNSHINE'S  S AH1 N - SH AY2 N Z\nSUNSHINY  S AH1 N - SH AY2 - N IY0\nSUNSPOT  S AH1 N - S P AA2 T\nSUNSPOTS  S AH1 N - S P AA2 T S\nSUNSTAR  S AH1 N - S T AA2 R\nSUNSTATE  S AH1 N - S T EY2 T\nSUNSTATES  S AH1 N - S T EY2 T S\nSUNSWEET  S AH1 N - S W IY2 T\nSUNSWEET'S  S AH1 N - S W IY2 T S\nSUNTAN  S AH1 N - T AE2 N\nSUNTER  S AH1 N - T ER0\nSUNTORY  S AH1 N - T AO1 - R IY0\nSUNTRUST  S AH1 N - T R AH2 S T\nSUNTRUST'S  S AH1 N - T R AH2 S T S\nSUNUNU  S AH0 - N UW1 - N UW0\nSUNUNU'S  S AH0 - N UW1 - N UW0 Z\nSUNUP  S AH1 N - AH0 P\nSUNWARD  S AH1 N - W ER0 D\nSUNWORLD  S AH1 N - W ER2 L D\nSUNWORLD'S  S AH1 N - W ER2 L D Z\nSUNY  S UW1 - N IY2\nSUON  S UW1 - AO0 N\nSUP  S AH1 P\nSUPAK  S UW1 - P AH0 K\nSUPAN  S UW1 - P AH0 N\nSUPER  S UW1 - P ER0\nSUPERABRASIVE  S UW2 - P ER0 - AH0 - B R EY1 - S IH0 V\nSUPERABRASIVES  S UW2 - P ER0 - AH0 - B R EY1 - S IH0 V Z\nSUPERAMERICA  S UW2 - P ER0 - AH0 - M EH1 - R IH0 - K AH0\nSUPERB  S UH0 - P ER1 B\nSUPERBAR  S UW1 - P ER0 - B AA2 R\nSUPERBLY  S UW1 - P ER0 - B L IY0\nSUPERBOWL  S UW1 - P ER0 - B OW2 L\nSUPERBOWL'S  S UW1 - P ER0 - B OW2 L Z\nSUPERBOWLS  S UW1 - P ER0 - B OW2 L Z\nSUPERCENTER  S UW1 - P ER0 - S EH2 N - T ER0\nSUPERCENTERS  S UW1 - P ER0 - S EH2 N - T ER0 S\nSUPERCHARGE  S UW2 - P ER0 - CH AA1 R JH\nSUPERCHARGED  S UW2 - P ER0 - CH AA1 R JH D\nSUPERCILIOUS  S UW2 - P ER0 - S IH1 - L IY0 - AH0 S\nSUPERCOLLIDER  S UW0 - P ER0 - K AH0 - L AY1 - D ER0\nSUPERCOMPUTER  S UW2 - P ER0 - K AH0 M - P Y UW1 - T ER0\nSUPERCOMPUTERS  S UW2 - P ER0 - K AH0 M - P Y UW1 - T ER0 Z\nSUPERCOMPUTING  S UW0 - P ER0 - K AH0 M - P Y UW1 - T IH0 NG\nSUPERCONDUCTING  S UW1 - P ER0 - K AH0 N - D AH2 K - T IH0 NG\nSUPERCONDUCTIVE  S UW0 - P ER0 - K AH0 N - D AH1 K - T IH0 V\nSUPERCONDUCTIVITY  S UW2 - P ER0 - K AA2 N - D AH2 K - T IH1 - V AH0 - T IY0\nSUPERCONDUCTOR  S UW1 - P ER0 - K AH0 N - D AH2 K - T ER0\nSUPERCONDUCTORS  S UW1 - P ER0 - K AH0 N - D AH2 K - T ER0 Z\nSUPERCOOL  S UW2 - P ER0 - K UW1 L\nSUPERCOOLED  S UW2 - P ER0 - K UW1 L D\nSUPERCUT  S UW1 - P ER0 - K AH2 T\nSUPERCUTS  S UW1 - P ER0 - K AH2 T S\nSUPERDELEGATE  S UW0 - P ER0 - D EH1 - L AH0 - G AH0 T\nSUPERDELEGATES  S UW0 - P ER0 - D EH1 - L AH0 - G AH0 T S\nSUPERDOME  S UW2 - P ER0 - D OW1 M\nSUPERDOT  S UW1 - P ER0 - D AA2 T\nSUPERDRUG  S UW1 - P ER0 - D R AH2 G\nSUPERFAMILY  S UW1 - P ER0 - F AE2 M - L IY0\nSUPERFAN  S UW1 - P ER0 - F AE2 N\nSUPERFAST  S UW1 - P ER0 - F AE2 S T\nSUPERFICIAL  S UW2 - P ER0 - F IH1 - SH AH0 L\nSUPERFICIALLY  S UW1 - P ER0 - F IH2 - SH AH0 L - L IY0\nSUPERFICIALLY(2)  S UW1 - P ER0 - F IH2 - SH AH0 - L IY0\nSUPERFLUIDITY  S UW2 - P ER0 - F L UW2 - IH1 - D AH0 - T IY0\nSUPERFLUOUS  S UW1 - P ER0 - F L W AH2 S\nSUPERFON  S UW1 - P ER0 - F IH0 N\nSUPERFREIGHTER  S UW1 - P ER0 - F R EY2 - T ER0\nSUPERFREIGHTERS  S UW1 - P ER0 - F R EY2 - T ER0 Z\nSUPERFUND  S UW2 - P ER0 - F AH1 N D\nSUPERGIANT  S UW1 - P ER0 - JH AY1 - AH0 N T\nSUPERGIANTS  S UW2 - P ER0 - JH AY1 - AH0 N T S\nSUPERHEATED  S UW2 - P ER0 - HH IY1 - T IH0 D\nSUPERHERO  S UW2 - P ER0 - HH IY1 - R OW0\nSUPERHEROES  S UW2 - P ER0 - HH IY1 - R OW0 Z\nSUPERHETERODYNE  S UW2 - P ER0 - HH EH1 - T ER0 - AH0 - D AY2 N\nSUPERHIGHWAY  S UW2 - P ER0 - HH AY1 - W EY2\nSUPERHIGHWAYS  S UW2 - P ER0 - HH AY1 - W EY2 Z\nSUPERHUMAN  S UW2 - P ER0 - HH Y UW1 - M AH0 N\nSUPERIMPOSE  S UW2 - P ER0 - AH0 M - P OW1 Z\nSUPERIMPOSED  S UW2 - P ER0 - AH0 M - P OW1 Z D\nSUPERINTENDANT  S UW2 - P ER0 - AH0 N - T EH1 N - D AH0 N T\nSUPERINTENDANT(2)  S UW2 - P ER0 - IH0 N - T EH1 N - D AH0 N T\nSUPERINTENDENT  S UW2 - P ER0 - AH0 N - T EH1 N - D AH0 N T\nSUPERINTENDENT'S  S UW2 - P ER0 - IH0 N - T EH1 N - D AH0 N T S\nSUPERINTENDENT(2)  S UW2 - P ER0 - IH0 N - T EH1 N - D AH0 N T\nSUPERINTENDENTS  S UW2 - P ER0 - AH0 N - T EH1 N - D AH0 N T S\nSUPERINTENDENTS(2)  S UW2 - P ER0 - IH0 N - T EH1 N - D AH0 N T S\nSUPERIOR  S UW0 - P IH1 - R IY0 - ER0\nSUPERIOR'S  S UW0 - P IY1 - R IY0 - ER0 Z\nSUPERIORITY  S UW2 - P IH0 - R IY0 - AO1 - R IH0 - T IY0\nSUPERIORS  S UW0 - P IH1 - R IY0 - ER0 Z\nSUPERLATIVE  S UH0 - P ER1 - L AH0 - T IH0 V\nSUPERLATIVES  S UH0 - P ER1 - L AH0 - T IH0 V Z\nSUPERMAC  S UW1 - P ER0 - M AE2 K\nSUPERMAJORITY  S UW1 - P ER0 - M AH0 - JH AO2 - R IH0 - T IY0\nSUPERMAN  S UW1 - P ER0 - M AH0 N\nSUPERMAN'S  S UW1 - P ER0 - M AE0 N Z\nSUPERMAN(2)  S UW1 - P ER0 - M AE2 N\nSUPERMARKET  S UW1 - P ER0 - M AA2 R - K IH0 T\nSUPERMARKET'S  S UW1 - P ER0 - M AA2 R - K AH0 T S\nSUPERMARKETS  S UW1 - P ER0 - M AA2 R - K IH0 T S\nSUPERMINICOMPUTER  S UW1 - P ER0 - M IH2 - N IY0 - K AH0 M - P Y UW2 - T ER0\nSUPERMINICOMPUTERS  S UW1 - P ER0 - M IH2 - N IY0 - K AH0 M - P Y UW2 - T ER0 Z\nSUPERMODEL  S UW1 - P ER0 - M AA2 - D AH0 L\nSUPERMODELS  S UW1 - P ER0 - M AA2 - D AH0 L Z\nSUPERNATURAL  S UW2 - P ER0 - N AE1 - CH ER0 - AH0 L\nSUPERNATURALISM  S UW2 - P ER0 - N AE1 - CH ER0 - AH0 - L IH2 - Z AH0 M\nSUPERNOVA  S UW2 - P ER0 - N OW1 - V AH0\nSUPEROXIDE  S UW2 - P ER0 - AA1 K - S AY2 D\nSUPERPOWER  S UW2 - P ER0 - P AW1 - ER0\nSUPERPOWERS  S UW2 - P ER0 - P AW1 - ER0 Z\nSUPERPOWERS'  S UW1 - P ER0 - P AW2 R Z\nSUPERPREMIUM  S UW2 - P ER0 - P R IY1 - M IY0 - AH0 M\nSUPERPREMIUM(2)  S UW2 - P ER0 - P R IY1 - M Y AH0 M\nSUPERREGIONAL  S UW2 - P ER0 - R IY1 - JH AH0 - N AH0 L\nSUPERREGIONALS  S UW2 - P ER0 - R IY1 - JH AH0 - N AH0 L Z\nSUPERREGIONALS'  S UW0 - P ER0 - R IY1 - JH AH0 - N AH0 L Z\nSUPERS  S UW1 - P ER0 Z\nSUPERSAVER  S UW1 - P ER0 - S EY2 - V ER0\nSUPERSECRET  S UW1 - P ER0 - S IY2 - K R IH0 T\nSUPERSEDE  S UW2 - P ER0 - S IY1 D\nSUPERSEDED  S UW2 - P ER0 - S IY1 - D AH0 D\nSUPERSEDES  S UW2 - P ER0 - S IY1 D Z\nSUPERSEDING  S UW2 - P ER0 - S IY1 - D IH0 NG\nSUPERSONIC  S UW2 - P ER0 - S AA1 - N IH0 K\nSUPERSTAR  S UW2 - P ER0 - S T AA1 R\nSUPERSTARS  S UW2 - P ER0 - S T AA1 R Z\nSUPERSTATION  S UW2 - P ER0 - S T EY1 - SH AH0 N\nSUPERSTITION  S UW2 - P ER0 - S T IH1 - SH AH0 N\nSUPERSTITIONS  S UW2 - P ER0 - S T IH1 - SH AH0 N Z\nSUPERSTITIOUS  S UW2 - P ER0 - S T IH1 - SH AH0 S\nSUPERSTORE  S UW1 - P ER0 - S T AO2 R\nSUPERSTORES  S UW1 - P ER0 - S T AO2 R Z\nSUPERSTRUCTURE  S UW1 - P ER0 - S T R AH2 K - CH ER0\nSUPERSTRUCTURES  S UW1 - P ER0 - S T R AH2 K - CH ER0 Z\nSUPERTANKER  S UW1 - P ER0 - T AE2 NG - K ER0\nSUPERVALU  S UW2 - P ER0 - V AE1 L - Y UW0\nSUPERVISE  S UW1 - P ER0 - V AY2 Z\nSUPERVISED  S UW1 - P ER0 - V AY2 Z D\nSUPERVISES  S UW1 - P ER0 - V AY2 - Z IH0 Z\nSUPERVISING  S UW1 - P ER0 - V AY2 - Z IH0 NG\nSUPERVISION  S UW2 - P ER0 - V IH1 - ZH AH0 N\nSUPERVISOR  S UW1 - P ER0 - V AY2 - Z ER0\nSUPERVISORS  S UW2 - P ER0 - V AY1 - Z ER0 Z\nSUPERVISORS'  S UW1 - P ER0 - V AY2 - Z ER0 Z\nSUPERVISORY  S UW2 - P ER0 - V AY1 - Z ER0 - IY0\nSUPERVOTING  S UW2 - P ER0 - V OW1 - T IH0 NG\nSUPERWOMAN  S UW1 - P ER0 - W UH2 - M AH0 N\nSUPERWOMEN  S UW1 - P ER0 - W IH2 - M IH0 N\nSUPERX  S UW1 - P ER0 - EH2 K S\nSUPINE  S AH0 - P AY1 N\nSUPINE(2)  S UW1 - P AY0 N\nSUPINSKI  S AH0 - P IH1 N - S K IY0\nSUPPA  S UW1 - P AH0\nSUPPER  S AH1 - P ER0\nSUPPERS  S AH1 - P ER0 Z\nSUPPES  S AH1 P S\nSUPPLANT  S AH0 - P L AE1 N T\nSUPPLANTED  S AH0 - P L AE1 N - T AH0 D\nSUPPLANTING  S AH0 - P L AE1 N - T IH0 NG\nSUPPLE  S AH1 - P AH0 L\nSUPPLEE  S AH1 - P L IY0\nSUPPLEMENT  S AH1 - P L AH0 - M AH0 N T\nSUPPLEMENT(2)  S AH1 - P L AH0 - M EH1 N T\nSUPPLEMENTAL  S AH2 - P L AH0 - M EH1 N - T AH0 L\nSUPPLEMENTAL(2)  S AH2 - P L AH0 - M EH1 - N AH0 L\nSUPPLEMENTARY  S AH2 - P L AH0 - M EH1 N - T ER0 - IY0\nSUPPLEMENTARY(2)  S AH2 - P L AH0 - M EH1 - N ER0 - IY0\nSUPPLEMENTARY(3)  S AH2 - P L AH0 - M EH1 N - T R IY0\nSUPPLEMENTARY(4)  S AH2 - P L AH0 - M EH1 N - CH R IY0\nSUPPLEMENTED  S AH1 - P L AH0 - M EH2 N - T AH0 D\nSUPPLEMENTING  S AH1 - P L AH0 - M AH0 N - T IH0 NG\nSUPPLEMENTING(2)  S AH1 - P L AH0 - M EH1 N - T IH0 NG\nSUPPLEMENTS  S AH1 - P L AH0 - M AH0 N T S\nSUPPLEMENTS(2)  S AH1 - P L AH0 - M EH1 N T S\nSUPPLICANT  S AH1 - P L AH0 - K AH0 N T\nSUPPLIED  S AH0 - P L AY1 D\nSUPPLIER  S AH0 - P L AY1 - ER0\nSUPPLIER'S  S AH0 - P L AY1 - ER0 Z\nSUPPLIERS  S AH0 - P L AY1 - ER0 Z\nSUPPLIERS'  S AH0 - P L AY1 - ER0 Z\nSUPPLIES  S AH0 - P L AY1 Z\nSUPPLY  S AH0 - P L AY1\nSUPPLY'S  S AH0 - P L AY1 Z\nSUPPLYING  S AH0 - P L AY1 - IH0 NG\nSUPPORT  S AH0 - P AO1 R T\nSUPPORTABLE  S AH0 - P AO1 R - T AH0 - B AH0 L\nSUPPORTED  S AH0 - P AO1 R - T AH0 D\nSUPPORTED(2)  S AH0 - P AO1 R - T IH0 D\nSUPPORTER  S AH0 - P AO1 R - T ER0\nSUPPORTERS  S AH0 - P AO1 R - T ER0 Z\nSUPPORTING  S AH0 - P AO1 R - T IH0 NG\nSUPPORTIVE  S AH0 - P AO1 R - T IH0 V\nSUPPORTS  S AH0 - P AO1 R T S\nSUPPOSE  S AH0 - P OW1 Z\nSUPPOSED  S AH0 - P OW1 Z D\nSUPPOSEDLY  S AH0 - P OW1 - Z AH0 D - L IY0\nSUPPOSES  S AH0 - P OW1 - Z IH0 Z\nSUPPOSING  S AH0 - P OW1 - Z IH0 NG\nSUPPOSITION  S AH2 - P AH0 - Z IH1 - SH AH0 N\nSUPPOSITIONS  S AH2 - P AH0 - Z IH1 - SH AH0 N Z\nSUPPRESS  S AH0 - P R EH1 S\nSUPPRESSANT  S AH0 - P R EH1 - S AH0 N T\nSUPPRESSED  S AH0 - P R EH1 S T\nSUPPRESSES  S AH0 - P R EH1 - S IH0 Z\nSUPPRESSING  S AH0 - P R EH1 - S IH0 NG\nSUPPRESSION  S AH0 - P R EH1 - SH AH0 N\nSUPPRESSOR  S AH0 - P R EH1 - S ER0\nSUPRA  S UW1 - P R AH0\nSUPRANATIONAL  S UW2 - P R AH0 - N AE1 - SH AH0 - N AH0 L\nSUPREMACIST  S UW0 - P R EH1 - M AH0 - S IH0 S T\nSUPREMACISTS  S UW0 - P R EH1 - M AH0 - S IH0 S T S\nSUPREMACISTS(2)  S UW0 - P R EH1 - M AH0 - S IH0 S S\nSUPREMACISTS(3)  S UW0 - P R EH1 - M AH0 - S IH0 S\nSUPREMACY  S AH0 - P R EH1 - M AH0 - S IY0\nSUPREME  S AH0 - P R IY1 M\nSUPREME(2)  S ER0 - P R IY1 M\nSUPREMELY  S UW0 - P R IY1 - M AH0 - L IY0\nSUPREMES  S UW0 - P R IY1 M Z\nSUPRENANT  S UW0 - P R EY1 - N AH0 N T\nSUPRISINGLY  S UW2 - P R AY1 - Z IH0 NG - L IY0\nSUPRISINGLY(2)  S ER2 - P R AY1 - Z IH0 NG - L IY0\nSUR  S ER1\nSURA  S UH1 - R AH0\nSURACE  S UH0 - R AA1 - S EY0\nSURAT  S ER0 - AA1 T\nSURAT'S  S ER0 - AA1 T S\nSURBAUGH  S ER1 - B AO0\nSURBER  S ER1 - B ER0\nSURCHARGE  S ER0 - CH AA1 R JH\nSURCHARGE(2)  S ER1 - CH AA2 R JH\nSURCHARGES  S ER1 - CH AA2 R - JH IH0 Z\nSURE  SH UH1 R\nSURELY  SH UH1 R - L IY0\nSUREN  S UH1 - R AH0 N\nSURER  SH UH1 - R ER0\nSURES  SH UH1 R Z\nSURESH  S ER0 - EH1 SH\nSUREST  SH UH1 - R IH0 S T\nSURETTE  S ER0 - EH1 T\nSURETY  SH UH1 - R AH0 - T IY0\nSURF  S ER1 F\nSURF'S  S ER1 F S\nSURFACE  S ER1 - F AH0 S\nSURFACED  S ER1 - F IH0 S T\nSURFACENESS  S ER1 - F AH0 S - N AH0 S\nSURFACES  S ER1 - F AH0 - S AH0 Z\nSURFACES(2)  S ER1 - F AH0 - S IH0 Z\nSURFACING  S ER1 - F AH0 - S IH0 NG\nSURFACTANT  S ER0 - F AE1 K - T AH0 N T\nSURFBOARD  S ER1 F - B AO2 R D\nSURFBOARDS  S ER1 F - B AO2 R D Z\nSURFED  S ER1 F T\nSURFEIT  S ER1 - F AH0 T\nSURFER  S ER1 - F ER0\nSURFERS  S ER1 - F ER0 Z\nSURFING  S ER1 - F IH0 NG\nSURGE  S ER1 JH\nSURGED  S ER1 JH D\nSURGEON  S ER1 - JH AH0 N\nSURGEON'S  S ER1 - JH AH0 N Z\nSURGEON(2)  S ER1 - JH IH0 N\nSURGEONS  S ER1 - JH AH0 N Z\nSURGEONS'  S ER1 - JH IH0 N Z\nSURGERIES  S ER1 - JH ER0 - IY0 Z\nSURGERY  S ER1 - JH ER0 - IY0\nSURGES  S ER1 - JH AH0 Z\nSURGES(2)  S ER1 - JH IH0 Z\nSURGICAL  S ER1 - JH IH0 - K AH0 L\nSURGICAL'S  S ER1 - JH IH0 - K AH0 L Z\nSURGICALLY  S ER1 - JH IH0 - K AH0 - L IY0\nSURGICALLY(2)  S ER1 - JH IH0 K - L IY0\nSURGING  S ER1 - JH IH0 NG\nSURIANO  S UH2 - R IY0 - AA1 - N OW0\nSURINAM  S UH2 - R AH0 - N AA1 M\nSURINAME  S ER1 - IH0 - N AA0 M\nSURLES  S AO1 - R AH0 L Z\nSURLY  S ER1 - L IY0\nSURMA  S ER1 - M AH0\nSURMAN  S ER1 - M AH0 N\nSURMISE  S ER0 - M AY1 Z\nSURMISED  S ER0 - M AY1 Z D\nSURMISES  S ER0 - M AY1 - Z IH0 Z\nSURMOUNT  S ER0 - M AW1 N T\nSURMOUNTED  S ER0 - M AW1 N - T IH0 D\nSURMOUNTING  S ER0 - M AW1 N - T IH0 NG\nSURNAME  S ER1 - N EY2 M\nSURNAMES  S ER1 - N EY2 M Z\nSUROWIEC  S ER0 - AW1 - IY0 K\nSURPASS  S ER0 - P AE1 S\nSURPASSED  S ER0 - P AE1 S T\nSURPASSES  S ER0 - P AE1 - S IH0 Z\nSURPASSING  S ER0 - P AE1 - S IH0 NG\nSURPLUS  S ER1 P - L AH0 S\nSURPLUSES  S ER1 P - L AH0 - S IH0 Z\nSURPRENANT  S ER1 - P R IH0 - N AH0 N T\nSURPRISE  S ER0 - P R AY1 Z\nSURPRISE(2)  S AH0 - P R AY1 Z\nSURPRISED  S ER0 - P R AY1 Z D\nSURPRISED(2)  S AH0 - P R AY1 Z D\nSURPRISES  S ER0 - P R AY1 - Z IH0 Z\nSURPRISES(2)  S AH0 - P R AY1 - Z IH0 Z\nSURPRISING  S ER0 - P R AY1 - Z IH0 NG\nSURPRISING(2)  S AH0 - P R AY1 - Z IH0 NG\nSURPRISINGLY  S ER0 - P R AY1 - Z IH0 NG - L IY0\nSURPRISINGLY(2)  S AH0 - P R AY1 - Z IH0 NG - L IY0\nSURRATT  S AO1 - R AH0 T\nSURREAL  S ER0 - IY1 L\nSURREALISM  S ER0 - IY1 - L IH0 - Z AH0 M\nSURREALISM'S  S ER0 - IY1 - L IH0 - Z AH0 M Z\nSURREALISM'S(2)  S ER0 - IY1 - AH0 - L IH2 - Z AH0 M Z\nSURREALISM(2)  S ER0 - IY1 - AH0 - L IH2 - Z AH0 M\nSURREALISMS  S ER0 - IY1 - L IH0 - Z AH0 M Z\nSURREALISMS(2)  S ER0 - IY1 - AH0 - L IH2 - Z AH0 M Z\nSURREALISTIC  S ER0 - IY2 - L IH1 - S T IH0 K\nSURREALISTIC(2)  S ER0 - IY2 - AH0 - L IH1 - S T IH0 K\nSURREBUTTAL  S ER1 - IH0 - B AH0 - T AH0 L\nSURREBUTTAL(2)  S ER1 - IY0 - B AH0 - T AH0 L\nSURRELL  S AO1 - R AH0 L\nSURRENCY  S AO1 - R AH0 N - S IY0\nSURRENDER  S ER0 - EH1 N - D ER0\nSURRENDERED  S ER0 - EH1 N - D ER0 D\nSURRENDERING  S ER0 - EH1 N - D ER0 - IH0 NG\nSURRENDERS  S ER0 - EH1 N - D ER0 Z\nSURREPTITIOUS  S ER2 - AH0 P - T IH1 - SH AH0 S\nSURREPTITIOUSLY  S ER2 - AH0 P - T IH1 - SH AH0 S - L IY0\nSURRETT  S AO1 - R IH0 T\nSURRETTE  S ER0 - EH1 T\nSURREY  S ER1 - IY0\nSURROGACY  S ER1 - AH0 - G AH0 - S IY0\nSURROGATE  S ER1 - AH0 - G AH0 T\nSURROGATE(2)  S ER1 - AH0 - G EY2 T\nSURROGATES  S ER1 - AH0 - G AH0 T S\nSURROGATES(2)  S ER1 - AH0 - G EY2 T S\nSURROUND  S ER0 - AW1 N D\nSURROUNDED  S ER0 - AW1 N - D AH0 D\nSURROUNDED(2)  S ER0 - AW1 N - D IH0 D\nSURROUNDING  S ER0 - AW1 N - D IH0 NG\nSURROUNDINGS  S ER0 - AW1 N - D IH0 NG Z\nSURROUNDS  S ER0 - AW1 N D Z\nSURRY  S ER1 - IY0\nSURTAX  S ER1 - T AE2 K S\nSURTAXES  S ER1 - T AE2 K - S IH0 Z\nSURVEIL  S ER0 - V EY1 L\nSURVEILLANCE  S ER0 - V EY1 - L AH0 N S\nSURVEILLING  S ER0 - V EY1 - L IH0 NG\nSURVEY  S ER0 - V EY1\nSURVEY'S  S ER0 - V EY1 Z\nSURVEY'S(2)  S ER1 - V EY2 Z\nSURVEY(2)  S ER1 - V EY2\nSURVEYED  S ER0 - V EY1 D\nSURVEYED(2)  S ER1 - V EY2 D\nSURVEYING  S ER0 - V EY1 - IH0 NG\nSURVEYING(2)  S ER1 - V EY2 - IH0 NG\nSURVEYOR  S ER0 - V EY1 - ER0\nSURVEYOR(2)  S ER1 - V EY2 - ER0\nSURVEYORS  S ER0 - V EY1 - ER0 Z\nSURVEYORS(2)  S ER2 - V EY2 - ER0 Z\nSURVEYS  S ER0 - V EY1 Z\nSURVEYS(2)  S ER1 - V EY2 Z\nSURVIVABILITY  S ER0 - V AY2 - V AH0 - B IH1 - L IH0 - T IY0\nSURVIVABLE  S ER0 - V AY1 - V AH0 - B AH0 L\nSURVIVAL  S ER0 - V AY1 - V AH0 L\nSURVIVALIST  S ER0 - V AY1 - V AH0 - L IH0 S T\nSURVIVALISTS  S ER0 - V AY1 - V AH0 - L IH0 S T S\nSURVIVALISTS(2)  S ER0 - V AY1 - V AH0 - L IH0 S S\nSURVIVALISTS(3)  S ER0 - V AY1 - V AH0 - L IH0 S\nSURVIVE  S ER0 - V AY1 V\nSURVIVED  S ER0 - V AY1 V D\nSURVIVES  S ER0 - V AY1 V Z\nSURVIVING  S ER0 - V AY1 - V IH0 NG\nSURVIVOR  S ER0 - V AY1 - V ER0\nSURVIVOR'S  S ER0 - V AY1 - V ER0 Z\nSURVIVORS  S ER0 - V AY1 - V ER0 Z\nSUS  S AH1 S\nSUSA  S UW1 - S AH0\nSUSAN  S UW1 - Z AH0 N\nSUSAN'S  S UW1 - Z AH0 N Z\nSUSANA  S UW0 - S AA1 - N AH0\nSUSANN  S UW2 - Z AE1 N\nSUSANNA  S UW0 - Z AE1 - N AH0\nSUSANNAH  S UW2 - S AE1 - N AH0\nSUSANNE  S UW2 - Z AE1 N\nSUSCEPTIBILITY  S AH0 - S EH2 P - T AH0 - B IH1 - L AH0 - T IY0\nSUSCEPTIBLE  S AH0 - S EH1 P - T AH0 - B AH0 L\nSUSETTE  S UW2 - Z EH1 T\nSUSHI  S UW1 - SH IY0\nSUSI  S UW1 - S IY0\nSUSIE  S UW1 - Z IY0\nSUSIE'S  S UW1 - Z IY0 Z\nSUSKI  S AH1 S - K IY0\nSUSKIND  S AH1 - S K IH0 N D\nSUSKO  S AH1 - S K OW0\nSUSMAN  S AH1 S - M AH0 N\nSUSONG  S AH1 - S AO0 NG\nSUSPECT  S AH0 - S P EH1 K T\nSUSPECT'S  S AH0 - S P EH1 K T S\nSUSPECT(2)  S AH1 - S P EH2 K T\nSUSPECTED  S AH0 - S P EH1 K - T AH0 D\nSUSPECTED(2)  S AH0 - S P EH1 K - T IH0 D\nSUSPECTING  S AH0 - S P EH1 K - T IH0 NG\nSUSPECTS  S AH0 - S P EH1 K T S\nSUSPECTS'  S AH1 - S P EH2 K T S\nSUSPECTS(2)  S AH1 - S P EH2 K T S\nSUSPECTS(3)  S AH0 - S P EH1 K S\nSUSPECTS(4)  S AH1 - S P EH2 K S\nSUSPEND  S AH0 - S P EH1 N D\nSUSPENDED  S AH0 - S P EH1 N - D AH0 D\nSUSPENDED(2)  S AH0 - S P EH1 N - D IH0 D\nSUSPENDER  S AH0 - S P EH1 N - D ER0\nSUSPENDERS  S AH0 - S P EH1 N - D ER0 Z\nSUSPENDING  S AH0 - S P EH1 N - D IH0 NG\nSUSPENDS  S AH0 - S P EH1 N D Z\nSUSPENSE  S AH0 - S P EH1 N S\nSUSPENSEFUL  S AH0 - S P EH1 N S - F AH0 L\nSUSPENSION  S AH0 - S P EH1 N - SH AH0 N\nSUSPENSIONS  S AH0 - S P EH1 N - SH AH0 N Z\nSUSPICION  S AH0 - S P IH1 - SH AH0 N\nSUSPICIONS  S AH0 - S P IH1 - SH AH0 N Z\nSUSPICIOUS  S AH0 - S P IH1 - SH AH0 S\nSUSPICIOUSLY  S AH0 - S P IH1 - SH AH0 S - L IY0\nSUSQUEHANNA  S UW2 S K - W EH0 - HH AE1 - N AH0\nSUSQUEHANNA'S  S UW2 S K - W EH0 - HH AE1 - N AH0 Z\nSUSS  S AH1 S\nSUSSER  S AH1 - S ER0\nSUSSEX  S AH1 - S IH0 K S\nSUSSKIND  S AH1 - S K IH0 N D\nSUSSMAN  S AH1 S - M AH0 N\nSUSSWEIN  S AH1 - S W IY2 N\nSUSSWEIN(2)  S AH1 - S W AY2 N\nSUSTAIN  S AH0 - S T EY1 N\nSUSTAINABILITY  S AH0 - S T EY2 - N AH0 - B IH1 - L IH0 - T IY0\nSUSTAINABLE  S AH0 - S T EY1 - N AH0 - B AH0 L\nSUSTAINED  S AH0 - S T EY1 N D\nSUSTAINING  S AH0 - S T EY1 - N IH0 NG\nSUSTAINS  S AH0 - S T EY1 N Z\nSUSTAITA  S UW0 - S T EY1 - T AH0\nSUSTENANCE  S AH1 - S T AH0 - N AH0 N S\nSUSTEREN  S AH0 - S T EH1 - R AH0 N\nSUSUMU  S UW2 - S UW1 - M UW0\nSUSY  S UW1 - Z IY0\nSUTCH  S AH1 CH\nSUTCLIFF  S AH1 T K - L IH0 F\nSUTCLIFFE  S AH1 T K - L IH0 F\nSUTER  S UW1 - T ER0\nSUTERA  S UW0 - T EH1 - R AH0\nSUTFIN  S AH1 T - F IH0 N\nSUTHARD  S AH1 - TH ER0 D\nSUTHER  S AH1 - DH ER0\nSUTHERLAND  S AH1 - DH ER0 - L AH0 N D\nSUTHERLIN  S AH1 - TH ER0 - L IH0 N\nSUTHERLIN(2)  S AH1 - DH ER0 - L IH0 N\nSUTHERS  S AH1 - DH ER0 Z\nSUTLEY  S AH1 T - L IY0\nSUTLIFF  S AH1 T - L IH0 F\nSUTNER  S AH1 T - N ER0\nSUTNICK  S AH1 T - N IH0 K\nSUTO  S UW1 - T OW0\nSUTOR  S UW1 - T ER0\nSUTPHEN  S AH1 T - F AH0 N\nSUTPHIN  S AH1 T - F IH0 N\nSUTRO  S UW1 - T R OW0\nSUTRO'S  S UW1 - T R OW0 Z\nSUTTER  S AH1 - T ER0\nSUTTLE  S AH1 - T AH0 L\nSUTTLES  S AH1 - T AH0 L Z\nSUTTMEIER  S AH1 T - M AY2 R\nSUTTON  S AH1 - T AH0 N\nSUTTON'S  S AH1 - T AH0 N Z\nSUTURE  S UW1 - CH ER0\nSUTURES  S UW1 - CH ER0 Z\nSUU  EH1 - S Y UW1 - Y UW1\nSUU(2)  S UW1\nSUVA  S UW1 - V AH0\nSUYDAM  S AY1 - D AH0 M\nSUZANNA  S UW2 - Z AE1 - N AH0\nSUZANNE  S UW0 - Z AE1 N\nSUZETTE  S UW2 - Z EH1 T\nSUZHOU  S UW1 Z - HH OW2\nSUZIE  S AH1 - Z IY0\nSUZMAN  S UW1 Z - M AH0 N\nSUZUANA  S UW0 - Z UW0 - AA1 - N AH0\nSUZUKI  S AH0 - Z UW1 - K IY0\nSUZY  S UW1 - Z IY0\nSUZY'S  S UW1 - Z IY0 Z\nSVEC  S V EH1 K\nSVEHLA  S V EH1 - L AH0\nSVELTE  S V EH1 L T\nSVEN  S V EH1 N\nSVENDSEN  S V EH1 N D - S AH0 N\nSVENSKA  S V EH1 N - S K AH0\nSVENSON  S V EH1 N - S AH0 N\nSVENSSON  S V EH1 N - S AH0 N\nSVERDLOVSK  S V ER1 D - L AA0 V S K\nSVERIGE  S V EH1 - R IH0 JH\nSVETLANA  S V EH2 T - L AA1 - N AH0\nSVETLIK  S V EH1 T - L IH0 K\nSVITAK  S V IH1 - T AH0 K\nSVIZZERA  S V IH0 - Z EH1 - R AH0\nSVOBODA  S V OW0 - B OW1 - D AH0\nSVORAY  S V AO1 - R EY2\nSWAB  S W AA1 B\nSWABS  S W AA1 B Z\nSWABY  S W AA1 - B IY0\nSWACKHAMER  S W AO1 - K AE2 - M ER0\nSWADER  S W EY1 - D ER0\nSWADLEY  S W AA1 D - L IY0\nSWAFFORD  S W AA1 - F ER0 D\nSWAGER  S W EY1 - G ER0\nSWAGERTY  S W AE1 - JH ER0 - T IY0\nSWAGGART  S W AE1 - G ER0 T\nSWAGGER  S W AE1 - G ER0\nSWAGGERING  S W AE1 - G ER0 - IH0 NG\nSWAGGERTY  S W AE1 - G ER0 - T IY0\nSWAHILI  S W AA0 - HH IY1 - L IY0\nSWAILES  S W EY1 L Z\nSWAILS  S W EY1 L Z\nSWAIM  S W EY1 M\nSWAIN  S W EY1 N\nSWAINE  S W EY1 N\nSWAINSTON  S W EY1 N - S T AH0 N\nSWALES  S W EY1 L Z\nSWALLEY  S W AO1 - L IY0\nSWALLOW  S W AA1 - L OW0\nSWALLOW(2)  S W AO1 - L OW0\nSWALLOWED  S W AA1 - L OW0 D\nSWALLOWING  S W AA1 - L OW0 - IH0 NG\nSWALLOWS  S W AA1 - L OW0 Z\nSWAM  S W AE1 M\nSWAMI  S W AA1 - M IY0\nSWAMINATHAN  S W AA2 - M IH0 - N AA1 - TH AH0 N\nSWAMP  S W AA1 M P\nSWAMP(2)  S W AO1 M P\nSWAMPBUSTER  S W AA1 M P - B AH2 - S T ER0\nSWAMPED  S W AO1 M P T\nSWAMPER  S W AA1 M - P ER0\nSWAMPERS  S W AA1 M - P ER0 Z\nSWAMPING  S W AA1 M - P IH0 NG\nSWAMPS  S W AA1 M P S\nSWAMPS(2)  S W AO1 M P S\nSWAMPY  S W AA1 M - P IY0\nSWAN  S W AA1 N\nSWAN(2)  S W AO1 N\nSWANBERG  S W AA1 N - B ER0 G\nSWANDA  S W AA1 N - D AH0\nSWANDER  S W AA1 N - D ER0\nSWANEE  S W AA1 - N IY1\nSWANER  S W AO1 - N ER0\nSWANEY  S W AO1 - N IY0\nSWANGER  S W AO1 NG - ER0\nSWANGO  S W AA1 NG - G OW0\nSWANIGAN  S W AA1 - N IH0 - G AH0 N\nSWANK  S W AE1 NG K\nSWANKE  S W AO1 NG K\nSWANKY  S W AA1 NG - K IY0\nSWANN  S W AA1 N\nSWANN'S  S W AA1 N Z\nSWANNER  S W AA1 - N ER0\nSWANS  S W AA1 N Z\nSWANS(2)  S W AO1 N Z\nSWANSON  S W AA1 N - S AH0 N\nSWANSTROM  S W AA1 N - S T R AH0 M\nSWANTEK  S W AO1 N - T IH0 K\nSWANTON  S W AA1 N - T AH0 N\nSWANZY  S W AA1 N - Z IY0\nSWAP  S W AA1 P\nSWAPE  S W EY1 P\nSWAPES  S W EY1 P S\nSWAPO  S W AA1 - P OW0\nSWAPO'S  S W AA1 - P OW0 Z\nSWAPP  S W AA1 P\nSWAPPED  S W AA1 P T\nSWAPPED(2)  S W AO1 P T\nSWAPPING  S W AA1 - P IH0 NG\nSWAPS  S W AA1 P S\nSWARD  S W AO1 R D\nSWARINGEN  S W EH1 - R IH0 - NG AH0 N\nSWARM  S W AO1 R M\nSWARMED  S W AO1 R M D\nSWARMING  S W AO1 R - M IH0 NG\nSWARMS  S W AO1 R M Z\nSWARNER  S W AO1 R - N ER0\nSWAROVSKI  S W AA0 - R AA1 V S - K IY0\nSWART  S W AO1 R T\nSWARTHMORE  S W AO1 R TH - M AO2 R\nSWARTHOUT  S W AO1 R TH - AW2 T\nSWARTHY  S W AO1 R - DH IY0\nSWARTHY(2)  S W AO1 R - TH IY0\nSWARTLEY  S W AO1 R T - L IY0\nSWARTOUT  S W AO1 R - T AH0 T\nSWARTS  S W AO1 R T S\nSWARTWOOD  S W AO1 R T - W UH2 D\nSWARTWOUT  S W AO1 R T - W AW0 T\nSWARTZ  S W AO1 R T S\nSWARTZ(2)  SH W AO1 R T S\nSWARTZBAUGH  S W AO1 R T S - B AA0\nSWARTZENDRUBER  S W AO1 R T - S AH0 N - D R UW0 - B ER0\nSWARTZENTRUBER  S W AO1 R T - S AH0 N - T R UW0 - B ER0\nSWARTZLANDER  S W AO1 R T S - L AE2 N - D ER0\nSWARTZWELDER  S W AO1 R T S - W EH2 L - D ER0\nSWASEY  S W AA1 - Z IY0\nSWASHBUCKLING  S W AA1 SH - B AH2 - K L IH0 NG\nSWASTIKA  S W AA1 - S T IH0 - K AH0\nSWASTIKAS  S W AA1 - S T IH0 - K AH0 Z\nSWAT  S W AA1 T\nSWATCH  S W AA1 CH\nSWATCHED  S W AA1 CH T\nSWATCHES  S W AA1 - CH AH0 Z\nSWATCHES(2)  S W AA1 - CH IH0 Z\nSWATCHING  S W AA1 - CH IH0 NG\nSWATEK  S W AO1 - T IH0 K\nSWATH  S W AA1 TH\nSWATHE  S W AA1 DH\nSWATHE(2)  S W EY1 DH\nSWATHED  S W AA1 DH D\nSWATOW  S W AA1 - T OW2\nSWATTED  S W AA1 - T IH0 D\nSWATZELL  S W AO1 T - Z AH0 L\nSWAUGER  S W AW1 - G ER0\nSWAVELY  S W EY1 V - L IY0\nSWAY  S W EY1\nSWAYED  S W EY1 D\nSWAYING  S W EY1 - IH0 NG\nSWAYNE  S W EY1 N\nSWAYS  S W EY1 Z\nSWAYZE  S W EY1 Z\nSWAYZE(2)  S W EY1 - Z IY0\nSWAZI  S W AA1 - Z IY0\nSWAZILAND  S W AA1 - Z IH0 - L AH0 N D\nSWEANEY  S W IY1 - N IY0\nSWEANY  S W IY1 - N IY0\nSWEAR  S W EH1 R\nSWEARENGEN  S W IH1 - R IH0 - NG AH0 N\nSWEARENGIN  S W EH1 - R IH0 - NG AH0 N\nSWEARING  S W EH1 - R IH0 NG\nSWEARINGEN  S W EH1 - R IH0 - NG AH0 N\nSWEARINGIN  S W EH1 - R IH0 - NG AH0 N\nSWEARS  S W EH1 R Z\nSWEAT  S W EH1 T\nSWEATED  S W EH1 - T IH0 D\nSWEATER  S W EH1 - T ER0\nSWEATERS  S W EH1 - T ER0 Z\nSWEATIN'  S W EH1 - T IH0 N\nSWEATING  S W EH1 - T IH0 NG\nSWEATMAN  S W IY1 T - M AH0 N\nSWEATPANTS  S W EH1 T - P AE2 N T S\nSWEATS  S W EH1 T S\nSWEATSHIRT  S W EH1 T - SH ER2 T\nSWEATSHIRTS  S W EH1 T - SH ER2 T S\nSWEATSHOP  S W EH1 T - SH AA2 P\nSWEATSHOPS  S W EH1 T - SH AA2 P S\nSWEATSUIT  S W EH1 T - S UW2 T\nSWEATT  S W IY1 T\nSWEATY  S W EH1 - T IY0\nSWEAZY  S W IY1 - Z IY0\nSWECKER  S W EH1 - K ER0\nSWED  S W EH1 D\nSWEDA  S W IY1 - D AH0\nSWEDBERG  S W EH1 D - B ER0 G\nSWEDE  S W IY1 D\nSWEDEN  S W IY1 - D AH0 N\nSWEDEN'S  S W IY1 - D AH0 N Z\nSWEDES  S W IY1 D Z\nSWEDISH  S W IY1 - D IH0 SH\nSWEDLUND  S W EH1 D - L AH0 N D\nSWEEDEN  S W IY1 - D AH0 N\nSWEEN  S W IY1 N\nSWEENEY  S W IY1 - N IY0\nSWEENY  S W IY1 - N IY0\nSWEEP  S W IY1 P\nSWEEPER  S W IY1 - P ER0\nSWEEPERS  S W IY1 - P ER0 Z\nSWEEPING  S W IY1 - P IH0 NG\nSWEEPS  S W IY1 P S\nSWEEPSTAKE  S W IY1 P - S T EY2 K\nSWEEPSTAKES  S W IY1 P - S T EY2 K S\nSWEERS  S W IH1 R Z\nSWEET  S W IY1 T\nSWEETEN  S W IY1 - T AH0 N\nSWEETENED  S W IY1 - T AH0 N D\nSWEETENER  S W IY1 - T AH0 N - ER0\nSWEETENER(2)  S W IY1 T - N ER0\nSWEETENERS  S W IY1 - T AH0 N - ER0 Z\nSWEETENERS(2)  S W IY1 T - N ER0 Z\nSWEETENING  S W IY1 - T AH0 N - IH0 NG\nSWEETENING(2)  S W IY1 T - N IH0 NG\nSWEETENS  S W IY1 - T AH0 N Z\nSWEETER  S W IY1 - T ER0\nSWEETEST  S W IY1 - T AH0 S T\nSWEETHEART  S W IY1 T - HH AA2 R T\nSWEETHEARTS  S W IY1 T - HH AA2 R T S\nSWEETIE  S W IY1 - T IY0\nSWEETING  S W IY1 - T IH0 NG\nSWEETLAND  S W IY1 T - L AH0 N D\nSWEETLY  S W IY1 T - L IY0\nSWEETMAN  S W IY1 T - M AH0 N\nSWEETNESS  S W IY1 T - N AH0 S\nSWEETON  S W IY1 - T AH0 N\nSWEETS  S W IY1 T S\nSWEETSER  S W IY1 T - S ER0\nSWEETWATER  S W IY1 T - W AA2 - T ER0\nSWEEZEY  S W IY1 - Z IY0\nSWEEZY  S W IY1 - Z IY0\nSWEGER  S W IY1 - G ER0\nSWEHLA  S W EH1 - L AH0\nSWEIG  S W AY1 G\nSWEIGARD  S W AY1 - G ER0 D\nSWEIGART  S W IY1 - G AA0 R T\nSWEIGERT  S W AY1 - G ER0 T\nSWEITZER  S W AY1 T - Z ER0\nSWELL  S W EH1 L\nSWELLED  S W EH1 L D\nSWELLING  S W EH1 - L IH0 NG\nSWELLS  S W EH1 L Z\nSWELTER  S W EH1 L - T ER0\nSWELTERING  S W EH1 L - T ER0 - IH0 NG\nSWEM  S W EH1 M\nSWENDSEN  S W EH1 N D - S AH0 N\nSWENET  S W EH1 - N AH0 T\nSWENEY  S W EH1 - N IY0\nSWENSEN  S W EH1 N - S AH0 N\nSWENSEN'S  S W EH1 N - S AH0 N Z\nSWENSON  S W EH1 N - S AH0 N\nSWEPT  S W EH1 P T\nSWERDLOW  S W ER1 D - L AW0\nSWERGOLD  S W ER1 - G OW2 L D\nSWERLING  S W ER1 - L IH0 NG\nSWERVE  S W ER1 V\nSWERVED  S W ER1 V D\nSWETE  S W IY1 T\nSWETLAND  S W EH1 T - L AH0 N D\nSWETNAM  S W EH1 T - N AH0 M\nSWETT  S W EH1 T\nSWETZ  S W EH1 T S\nSWEZEY  S W EH1 - Z IY0\nSWIATEK  S V IY0 - AA1 - T EH0 K\nSWIATKOWSKI  S V IY0 - AH0 T - K AO1 F S - K IY0\nSWICEGOOD  S W IH1 - S IH0 - G UH0 D\nSWICK  S W IH1 K\nSWICKARD  S W IH1 - K ER0 D\nSWIDER  S W AY1 - D ER0\nSWIDERSKI  S V IH0 - D ER1 S - K IY0\nSWIDERSKI(2)  S W IH0 - D ER1 S - K IY0\nSWIECH  S W IY1 CH\nSWIER  S W AY1 - ER0\nSWIFT  S W IH1 F T\nSWIFT'S  S W IH1 F T S\nSWIFTER  S W IH1 F - T ER0\nSWIFTEST  S W IH1 F - T AH0 S T\nSWIFTLY  S W IH1 F T - L IY0\nSWIFTNESS  S W IH1 F T - N AH0 S\nSWIFTS  S W IH1 F T S\nSWIG  S W IH1 G\nSWIGART  S W IH1 - G AA2 R T\nSWIGER  S W AY1 - G ER0\nSWIGERT  S W IH1 - G ER0 T\nSWIGGUM  S W IH1 - G AH0 M\nSWIHART  S W IH1 - HH AA0 R T\nSWILL  S W IH1 L\nSWILLEY  S W IH1 - L IY0\nSWILLING  S W IH1 - L IH0 NG\nSWILLINGER  S W IH1 - L IH0 - NG ER0\nSWIM  S W IH1 M\nSWIMMER  S W IH1 - M ER0\nSWIMMERS  S W IH1 - M ER0 Z\nSWIMMING  S W IH1 - M IH0 NG\nSWIMS  S W IH1 M Z\nSWIMSUIT  S W IH1 M - S UW2 T\nSWIMSUITS  S W IH1 M - S UW2 T S\nSWIMWEAR  S W IH1 M - W EH2 R\nSWINBURNE'S  S W IH1 N - B ER0 N Z\nSWINBURNES  S W IH1 N - B ER0 N Z\nSWINDALL  S W IH1 N - D AH0 L\nSWINDELL  S W IH1 N - D AH0 L\nSWINDLE  S W IH1 N - D AH0 L\nSWINDLED  S W IH1 N - D AH0 L D\nSWINDLEHURST  S W IH1 N - D AH0 L - HH ER0 S T\nSWINDLER  S W IH1 N - D AH0 L - ER0\nSWINDLER(2)  S W IH1 N D - L ER0\nSWINDLERS  S W IH1 N D - L ER0 Z\nSWINDLES  S W IH1 N - D AH0 L Z\nSWINDLING  S W IH1 N D - L IH0 NG\nSWINE  S W AY1 N\nSWINEFORD  S W IH1 - N IH0 - F ER0 D\nSWINEFORD(2)  S W AY1 - N IH0 - F ER0 D\nSWINEHART  S W AY1 N - HH AA2 R T\nSWINEY  S W AY1 - N IY0\nSWINFORD  S W IH1 N - F ER0 D\nSWING  S W IH1 NG\nSWINGER  S W IH1 - NG ER0\nSWINGERS  S W IH1 - NG ER0 Z\nSWINGING  S W IH1 - NG IH0 NG\nSWINGLE  S W IH1 NG - G AH0 L\nSWINGLER  S W IH1 NG - G AH0 - L ER0\nSWINGLER(2)  S W IH1 NG - G L ER0\nSWINGLEY  S W IH1 NG - G L IY0\nSWINGS  S W IH1 NG Z\nSWINK  S W IH1 NG K\nSWINNEY  S W IH1 - N IY0\nSWINSON  S W IH1 N - S AH0 N\nSWINT  S W IH1 N T\nSWINTON  S W IH1 N - T AH0 N\nSWIPE  S W AY1 P\nSWIPED  S W AY1 P T\nSWIPES  S W AY1 P S\nSWIPING  S W AY1 - P IH0 NG\nSWIRE  S W AY1 R\nSWIRL  S W ER1 L\nSWIRLED  S W ER1 L D\nSWIRLING  S W ER1 - L IH0 NG\nSWIRLS  S W ER1 L Z\nSWIRSKY  S W ER1 S - K IY0\nSWISH  S W IH1 SH\nSWISHED  S W IH1 SH T\nSWISHER  S W IH1 - SH ER0\nSWISHES  S W IH1 - SH IH0 Z\nSWISS  S W IH1 S\nSWISSAIR  S W IH0 - S EH1 R\nSWISSHELM  S W IH1 - SH IH0 L M\nSWISSHELM(2)  S W IH1 S - HH EH0 L M\nSWISTAK  S W IH1 - S T AH0 K\nSWITAJ  S W IH0 - T AY1\nSWITALA  S W IH0 - T AA1 - L AH0\nSWITALSKI  S W IH0 - T AA1 L S - K IY0\nSWITCH  S W IH1 CH\nSWITCHBLADE  S W IH1 CH - B L EY2 D\nSWITCHBLADES  S W IH1 CH - B L EY2 D Z\nSWITCHBOARD  S W IH1 CH - B AO2 R D\nSWITCHBOARDS  S W IH1 CH - B AO2 R D Z\nSWITCHED  S W IH1 CH T\nSWITCHER  S W IH1 - CH ER0\nSWITCHERS  S W IH1 - CH ER0 Z\nSWITCHES  S W IH1 - CH AH0 Z\nSWITCHES(2)  S W IH1 - CH IH0 Z\nSWITCHING  S W IH1 - CH IH0 NG\nSWITZER  S W IH1 T - S ER0\nSWITZERLAND  S W IH1 T - S ER0 - L AH0 N D\nSWITZERLAND'S  S W IH1 T - S ER0 - L AH0 N D Z\nSWIVEL  S W IH1 - V AH0 L\nSWIVELING  S W IH1 - V AH0 L - IH0 NG\nSWIVELING(2)  S W IH1 V - L IH0 NG\nSWIVELS  S W IH1 - V AH0 L Z\nSWOBODA  S W OW0 - B OW1 - D AH0\nSWOFFORD  S W AA1 - F ER0 D\nSWOGGER  S W AA1 - G ER0\nSWOLLEN  S W OW1 - L AH0 N\nSWONGER  S W AO1 NG - ER0\nSWOON  S W UW1 N\nSWOONED  S W UW1 N D\nSWOONING  S W UW1 - N IH0 NG\nSWOOP  S W UW1 P\nSWOOPE  S W UW1 P\nSWOOPED  S W UW1 P T\nSWOOPING  S W UW1 - P IH0 NG\nSWOOPS  S W UW1 P S\nSWOOSH  S W UW1 SH\nSWOOSHED  S W UW1 SH T\nSWOPE  S W OW1 P\nSWOPES  S W OW1 P S\nSWOR  S W ER1\nSWORD  S AO1 R D\nSWORDFISH  S AO1 R D - F IH2 SH\nSWORDFISH'S  S AO1 R D - F IH2 - SH IH0 Z\nSWORDLIKE  S AO1 R D - L AY2 K\nSWORDPLAY  S AO1 R D - P L EY2\nSWORDPLAYS  S AO1 R D - P L EY2 Z\nSWORDS  S AO1 R D Z\nSWORE  S W AO1 R\nSWORN  S W AO1 R N\nSWOVELAND  S W OW1 V - L AH0 N D\nSWOYER  S W OY1 - ER0\nSWUM  S W AH1 M\nSWUNG  S W AH1 NG\nSWYERS  S W AY1 - ER0 Z\nSWYGERT  S W IH1 - G ER0 T\nSY  S AY1\nSYBASE  S AY1 - B EY2 S\nSYBASE'S  S AY1 - B EY1 - S IH0 Z\nSYBERT  S IH1 - B ER0 T\nSYBIL  S IH1 - B IH0 L\nSYBILLA  S IH0 - B IH1 - L AH0\nSYBILLE  S IH1 - B IH0 L\nSYBRON  S IH1 - B R AH0 N\nSYCAMORE  S IH1 - K AH0 - M AO2 R\nSYCARA  S IH0 - K AA1 - R AH0\nSYCOPHANTIC  S IH2 - K AH0 - F AE1 N - T IH0 K\nSYD  S IH1 D\nSYDELL  S AY2 - D EH1 L\nSYDERS  S AY1 - D ER0 Z\nSYDERS'  S AY1 - D ER0 Z\nSYDNEY  S IH1 D - N IY0\nSYDNEY'S  S IH1 D - N IY0 Z\nSYDNOR  S IH1 D - N ER0\nSYDOW  S IH1 - D OW0\nSYED  S AY1 D\nSYERS  S AY1 - ER0 Z\nSYFERT  S IH1 - F ER0 T\nSYKES  S AY1 K S\nSYKORA  S IH0 - K AO1 - R AH0\nSYLER  S AY1 - L ER0\nSYLLA  S IH1 - L AH0\nSYLLABIC  S AH0 - L AE1 - B IH0 K\nSYLLABLE  S IH1 - L AH0 - B AH0 L\nSYLLABLES  S IH1 - L AH0 - B AH0 L Z\nSYLLABUS  S IH1 - L AH0 - B AH0 S\nSYLMAR  S IH1 L - M AA0 R\nSYLVA  S IH1 L - V AH0\nSYLVAIN  S IH0 L - V EY1 N\nSYLVAN  S IH1 L - V AH0 N\nSYLVANA  S IH0 L - V AE1 - N AH0\nSYLVANIA  S IH0 L - V EY1 - N IY0 - AH0\nSYLVANUS  S IH1 L - V AH0 - N IH0 S\nSYLVEST  S Y L V EY1 - IH0 S T\nSYLVEST(2)  S Y L V EH1 S T\nSYLVESTER  S IH0 L - V EH1 - S T ER0\nSYLVESTRE  S IH0 L - V EH1 - S T ER0\nSYLVIA  S IH1 L - V IY0 - AH0\nSYLVIA'S  S IH1 L - V IY0 - AH0 Z\nSYLVIE  S IH1 L - V IY0\nSYLVIO  S IH1 L - V IY0 - OW0\nSYLVIO'S  S IH1 L - V IY0 - OW0 Z\nSYLVITE  S IH1 L - V AY2 T\nSYM  S IH1 M\nSYMANSKI  S IH0 - M AE1 N - S K IY0\nSYMANTEC  S IH0 - M AE1 N - T EH2 K\nSYMANTEC'S  S IH0 - M AE1 N - T EH2 K S\nSYMBION  S IH1 M - B IY0 - AH0 N\nSYMBION'S  S IH1 M - B IY0 - AH0 N Z\nSYMBIOSIS  S IH2 M - B AY0 - OW1 - S AH0 S\nSYMBIOTIC  S IH2 M - B IY0 - AA1 - T IH0 K\nSYMBOL  S IH1 M - B AH0 L\nSYMBOL'S  S IH1 M - B AH0 L Z\nSYMBOLIC  S IH0 M - B AA1 - L IH0 K\nSYMBOLICALLY  S IH0 M - B AA1 - L IH0 - K AH0 - L IY0\nSYMBOLICALLY(2)  S IH0 M - B AA1 - L IH0 K - L IY0\nSYMBOLICS  S IH0 M - B AA1 - L IH0 K S\nSYMBOLISM  S IH1 M - B AH0 - L IH2 - Z AH0 M\nSYMBOLISTS  S IH1 M - B AH0 - L AH0 S T S\nSYMBOLISTS(2)  S IH1 M - B AH0 - L IH0 S T S\nSYMBOLISTS(3)  S IH1 M - B AH0 - L IH0 S S\nSYMBOLISTS(4)  S IH1 M - B AH0 - L IH0 S\nSYMBOLIZE  S IH1 M - B AH0 - L AY2 Z\nSYMBOLIZED  S IH1 M - B AH0 - L AY2 Z D\nSYMBOLIZES  S IH1 M - B AH0 - L AY2 - Z AH0 Z\nSYMBOLIZES(2)  S IH1 M - B AH0 - L AY2 - Z IH0 Z\nSYMBOLIZING  S IH1 M - B AH0 - L AY2 - Z IH0 NG\nSYMBOLS  S IH1 M - B AH0 L Z\nSYME  S AY1 M\nSYMES  S AY1 M Z\nSYMINGTON  S IH1 - M IH0 NG - T AH0 N\nSYMMES  S IH1 M Z\nSYMMETRICAL  S AH0 - M EH1 - T R IH0 - K AH0 L\nSYMMETRICALLY  S AH0 - M EH1 - T R IH0 K - L IY0\nSYMMETRY  S IH1 - M AH0 - T R IY0\nSYMMONDS  S IH1 - M AH0 N D Z\nSYMMS  S IH1 M Z\nSYMON  S IH1 - M AH0 N\nSYMONDS  S IH1 - M AH0 N D Z\nSYMONS  S IH1 - M AH0 N Z\nSYMPATHETIC  S IH2 M - P AH0 - TH EH1 - T IH0 K\nSYMPATHETICALLY  S IH2 M - P AH0 - TH EH1 - T IH0 - K AH0 - L IY0\nSYMPATHETICALLY(2)  S IH2 M - P AH0 - TH EH1 - T IH0 K - L IY0\nSYMPATHIES  S IH1 M - P AH0 - TH IY0 Z\nSYMPATHIZE  S IH1 M - P AH0 - TH AY2 Z\nSYMPATHIZED  S IH1 M - P AH0 - TH AY2 Z D\nSYMPATHIZER  S IH1 M - P AH0 - TH AY2 - Z ER0\nSYMPATHIZERS  S IH1 M - P AH0 - TH AY2 - Z ER0 Z\nSYMPATHIZES  S IH1 M - P AH0 - TH AY2 - Z IH0 Z\nSYMPATHIZING  S IH1 M - P AH0 - TH AY2 - Z IH0 NG\nSYMPATHY  S IH1 M - P AH0 - TH IY0\nSYMPHONIC  S IH0 M - F AA1 - N IH0 K\nSYMPHONIES  S IH1 M - F AH0 - N IY0 Z\nSYMPHONY  S IH1 M - F AH0 - N IY0\nSYMPHONY'S  S IH1 M - F AH0 - N IY0 Z\nSYMPOSIUM  S IH0 M - P OW1 - Z IY0 - AH0 M\nSYMPOSIUMS  S IH0 M - P OW1 - Z IY0 - AH0 M Z\nSYMPSON  S IH1 M P - S AH0 N\nSYMPTOM  S IH1 M P - T AH0 M\nSYMPTOMATIC  S IH2 M P - T AH0 - M AE1 - T IH0 K\nSYMPTOMS  S IH1 M P - T AH0 M Z\nSYMS  S IH1 M Z\nSYMTRON  S IH1 M - T R AA2 N\nSYN  S IH1 N\nSYNA  S IH1 - N AH0\nSYNAGOGUE  S IH1 - N AH0 - G AO2 G\nSYNAGOGUES  S IH1 - N AH0 - G AO2 G Z\nSYNALLOY  S IH0 - N AE1 - L OY0\nSYNALLOY'S  S IH0 - N AE1 - L OY0 Z\nSYNAN  S AY1 - N AH0 N\nSYNAR  S IH1 - N AA0 R\nSYNAR(2)  S AY1 - N AA0 R\nSYNBIOTICS  S IH2 N - B IY0 - AA1 - T IH0 K S\nSYNBIOTICS(2)  S IH2 M - B IY0 - AA1 - T IH0 K S\nSYNC  S IH1 NG K\nSYNCH  S IH1 N CH\nSYNCHRO  S IH1 NG - K R OW0\nSYNCHRONIC  S IH0 NG - K R AA1 - N IH0 K\nSYNCHRONIZE  S IH1 NG - K R AH0 - N AY2 Z\nSYNCHRONIZED  S IH1 NG - K R AH0 - N AY2 Z D\nSYNCOM  S IH1 NG - K AA0 M\nSYNCOPATE  S IH1 NG - K AH0 - P EY2 T\nSYNCOPATED  S IH1 NG - K AH0 - P EY2 - T IH0 D\nSYNCOPATION  S IH1 NG - K AH0 - P EY2 - SH AH0 N\nSYNCOR  S IH1 N - K AO2 R\nSYNDER  S IH1 N - D ER0\nSYNDICATE  S IH1 N - D IH0 - K AH0 T\nSYNDICATE'S  S IH1 N - D IH0 - K AH0 T S\nSYNDICATE(2)  S IH1 N - D AH0 - K EY2 T\nSYNDICATED  S IH1 N - D IH0 - K EY2 - T IH0 D\nSYNDICATES  S IH1 N - D IH0 - K EY2 T S\nSYNDICATES(2)  S IH1 N - D IH0 - K AH0 T S\nSYNDICATING  S IH1 N - D IH0 - K EY2 - T IH0 NG\nSYNDICATION  S IH2 N - D IH0 - K EY1 - SH AH0 N\nSYNDICATIONS  S IH2 N - D IH0 - K EY1 - SH AH0 N Z\nSYNDICATOR  S IH1 N - D IH0 - K EY2 - T ER0\nSYNDICATORS  S IH1 N - D IH0 - K EY2 - T ER0 Z\nSYNDICATS  S IH1 N - D IH0 - K IH2 T S\nSYNDROME  S IH1 N - D R OW2 M\nSYNDROMES  S IH1 N - D R OW2 M Z\nSYNERGEN  S IH1 - N ER0 - JH EH2 N\nSYNERGEN'S  S IH1 - N ER0 - JH EH2 N Z\nSYNERGIES  S IH1 - N ER0 - JH IY0 Z\nSYNERGISM  S IH1 - N ER0 - JH IH2 - Z AH0 M\nSYNERGISTIC  S IH2 - N ER0 - JH IH1 - S T IH0 K\nSYNERGY  S IH1 - N ER0 - JH IY0\nSYNERGY'S  S IH1 - N ER0 - JH IY0 Z\nSYNGMAN  S IH1 NG - M AH0 N\nSYNHORST  S IH1 N - HH AO2 R S T\nSYNNOTT  S IH1 - N AH0 T\nSYNOD  S IH1 - N AH0 D\nSYNOD'S  S IH1 - N AH0 D Z\nSYNONYM  S IH1 - N AH0 - N IH2 M\nSYNONYMOUS  S AH0 - N AA1 - N AH0 - M AH0 S\nSYNONYMOUSLY  S AH0 - N AA1 - N AH0 - M AH0 S - L IY0\nSYNOPSIS  S IH0 - N AA1 P - S IH0 S\nSYNOPTICS  S IH0 - N AA1 P - T IH0 K S\nSYNOVUS  S AH0 - N OW1 - V AH0 S\nSYNOVUS(2)  S AY2 - N OW1 - V AH0 S\nSYNTAX  S IH1 N - T AE2 K S\nSYNTECH  S IH1 N - T EH2 K\nSYNTEX  S IH1 N - T EH2 K S\nSYNTEX'S  S IH1 N - T EH0 K - S IH0 Z\nSYNTHESIS  S IH1 N - TH AH0 - S AH0 S\nSYNTHESIZE  S IH1 N - TH AH0 - S AY2 Z\nSYNTHESIZED  S IH1 N - TH IH0 - S AY2 Z D\nSYNTHESIZER  S IH1 N - TH AH0 - S AY2 - Z ER0\nSYNTHESIZERS  S IH1 N - TH AH0 - S AY2 - Z ER0 Z\nSYNTHESIZING  S IH1 N - TH AH0 - S AY2 - Z IH0 NG\nSYNTHETIC  S IH0 N - TH EH1 - T IH0 K\nSYNTHETICALLY  S IH0 N - TH EH1 - T IH0 K - L IY0\nSYNTHETICS  S IH0 N - TH EH1 - T IH0 K S\nSYNTREX  S IH1 N - T R AH0 K S\nSYP  S AY1 P\nSYP(2)  EH1 - S W AY1 - P IY1\nSYPHER  S IH1 - F ER0\nSYPHERS  S IH1 - F ER0 Z\nSYPHILIS  S IH1 - F AH0 - L IH0 S\nSYPHON  S AY1 - F AH0 N\nSYPNIEWSKI  S IH0 P - N IY0 - EH1 F S - K IY0\nSYPNIEWSKI(2)  S IH0 P - N UW1 S - K IY0\nSYPOLT  S IH1 - P OW0 L T\nSYRACUSE  S IH1 - R AH0 - K Y UW2 Z\nSYREK  S IH1 - R IH0 K\nSYRIA  S IH1 - R IY0 - AH0\nSYRIA'S  S IH1 - R IY0 - AH0 Z\nSYRIAN  S IH1 - R IY0 - AH0 N\nSYRIANS  S IH1 - R IY0 - AH0 N Z\nSYRING  S AY1 - R IH0 NG\nSYRINGE  S ER0 - IH1 N JH\nSYRINGE(2)  S IH1 - R IH0 N JH\nSYRINGES  S ER0 - IH1 N - JH AH0 Z\nSYRON  S AY1 - R AH0 N\nSYRUP  S ER1 - AH0 P\nSYRUP(2)  S IH1 - R AH0 P\nSYRUPS  S ER1 - AH0 P S\nSYSCO  S IH1 - S K OW0\nSYSCON  S AY1 S - K AH0 N\nSYSCON'S  S AY1 S - K AH0 N Z\nSYSTEM  S IH1 - S T AH0 M\nSYSTEM'S  S IH1 - S T AH0 M Z\nSYSTEMATIC  S IH2 - S T AH0 - M AE1 - T IH0 K\nSYSTEMATICALLY  S IH2 - S T AH0 - M AE1 - T IH0 K - L IY0\nSYSTEMATICS  S IH2 - S T AH0 - M AE1 - T IH0 K S\nSYSTEMHOUSE  S IH1 - S T AH0 M - HH AW2 S\nSYSTEMHOUSE'S  S IH1 - S T AH0 M - HH AW2 - S IH0 Z\nSYSTEMIC  S IH0 S - T EH1 - M IH0 K\nSYSTEMICALLY  S AH0 S - T EH1 - M IH0 K - L IY0\nSYSTEMIX  S IH1 - S T IH0 - M IH0 K S\nSYSTEMIX(2)  S IH2 S - T EH1 - M IH0 K S\nSYSTEMONE  S IH1 - S T AH0 - M OW2 N\nSYSTEMS  S IH1 - S T AH0 M Z\nSYSTEMS'  S IH1 - S T AH0 M Z\nSYSTEMWIDE  S IH1 - S T AH0 M - W AY2 D\nSYSTRAN  S AY1 - S T R AE2 N\nSYSTRAN(2)  S IH1 - S T R AE2 N\nSYTSMA  S IH1 T S - M AH0\nSYVERSON  S IH1 - V ER0 - S AH0 N\nSYVERTSEN  S IH1 - V ER0 T - S AH0 N\nSZABO  SH AA1 - B OW0\nSZAFRAN  SH AA1 - F R AH0 N\nSZAFRANSKI  SH AH0 - F R AE1 N S - K IY0\nSZALAY  SH AA1 - L AY0\nSZALKOWSKI  SH AH0 L - K AO1 F S - K IY0\nSZANTO  SH AE1 N - T OW0\nSZAREK  SH AA1 - R EH0 K\nSZATKOWSKI  SH AH0 T - K AO1 F S - K IY0\nSZCZECH  SH EH1 K\nSZCZEPANIAK  SH IH0 - P AE1 - N IY0 - AE0 K\nSZCZEPANIK  SH IH0 - P AE1 - N IH0 K\nSZCZEPANSKI  SH IH0 - P AE1 N S - K IY0\nSZCZERBA  SH ER1 - B AH0\nSZCZESNIAK  SH EH1 Z - N IY0 - AE0 K\nSZCZESNY  SH EH1 Z - N IY0\nSZCZYGIEL  SH IH0 - G IY1 L\nSZE  SH IY1\nSZE(2)  SH EY1\nSZE-DI  SH EY1 - D IY1\nSZEKELY  SH IY1 K - L IY0\nSZELIGA  SH IH0 - L AY1 - G AH0\nSZETO  SH IY1 - T OW0\nSZEWCZYK  SH UW1 - CH IH0 K\nSZILAGYI  SH IH0 - L AA1 - G IY0\nSZILARD  S IH1 - L ER0 D\nSZILARD(2)  Z IH1 - L ER0 D\nSZOKE  SH OW1 K\nSZOSTAK  SH AA1 - S T AH0 K\nSZOSTEK  SH AA1 - S T EH0 K\nSZOT  SH AA1 T\nSZOTT  SH AA1 T\nSZUBA  SH UW1 - B AH0\nSZUCH  SH AH1 CH\nSZUCS  SH AH1 K S\nSZUMSKI  SH AH1 M - S K IY0\nSZWED  SH V EH1 D\nSZYDLOWSKI  SH IH0 D - L AO1 F S - K IY0\nSZYMANOWSKI  SH IH0 - M AH0 - N AO1 F S - K IY0\nSZYMANSKI  SH IH0 - M AE1 N - S K IY0\nSZYMBORSKI  SH IH0 M - B AO1 R S - K IY0\nSZYMCZAK  SH IH1 M - CH AE0 K\nT  T IY1\nT'ANG  T AE1 NG\nT'S  T IY1 Z\nT-BONE  T IY1 - B OW2 N\nT-LAM  T IY1 - L AE1 M\nT.  T IY1\nT.'S  T IY1 Z\nT.S  T IY1 Z\nTA  T AA1\nTAAFFE  T AA1 F\nTAB  T AE1 B\nTABACALERA  T AH0 - B AE2 - K AH0 - L EH1 - R AH0\nTABACHNECK  T AH0 - B AA1 CH - N EH2 K\nTABAK  T AE1 - B AE0 K\nTABAK(2)  T AH0 - B AE1 K\nTABAKA  T AA0 - B AA1 - K AH0\nTABAR  T AA0 - B AA1 R\nTABARES  T AA0 - B AA1 R - EH0 S\nTABASCO  T AH0 - B AE1 - S K OW0\nTABB  T AE1 B\nTABBERT  T AE1 - B ER0 T\nTABBING  T AE1 - B IH0 NG\nTABBY  T AE1 - B IY0\nTABER  T EY1 - B ER0\nTABERNACLE  T AE1 - B ER0 - N AE2 - K AH0 L\nTABITHA  T AE1 - B IH0 - TH AH0\nTABLATURE  T AE1 - B L AH0 - CH ER0\nTABLE  T EY1 - B AH0 L\nTABLE'S  T EY1 - B AH0 L Z\nTABLEAU  T AH0 - B L OW1\nTABLEAUX  T AH0 - B L OW1\nTABLECLOTH  T EY1 - B AH0 L - K L AO2 TH\nTABLECLOTHS  T EY1 - B AH0 L - K L AO2 TH S\nTABLED  T EY1 - B AH0 L D\nTABLER  T EY1 - B AH0 L - ER0\nTABLER(2)  T EY1 - B L ER0\nTABLES  T EY1 - B AH0 L Z\nTABLESPOON  T EY1 - B AH0 L - S P UW2 N\nTABLESPOONS  T EY1 - B AH0 L - S P UW2 N Z\nTABLET  T AE1 - B L AH0 T\nTABLETOP  T EY1 - B AH0 L - T AA2 P\nTABLETS  T AE1 - B L AH0 T S\nTABLEWARE  T EY1 - B AH0 L - W EH2 R\nTABLING  T EY1 - B AH0 L - IH0 NG\nTABLING(2)  T EY1 - B L IH0 NG\nTABLOID  T AE1 - B L OY0 D\nTABLOIDIZATION  T AE2 - B L OY0 - D AH0 - Z EY1 - SH AH0 N\nTABLOIDS  T AE1 - B L OY0 D Z\nTABONE  T AA1 - B OW0 N\nTABOO  T AE0 - B UW1\nTABOOS  T AE0 - B UW1 Z\nTABOR  T EY1 - B ER0\nTABOR'S  T EY1 - B ER0 Z\nTABORN  T AE1 - B ER0 N\nTABRON  T AE1 - B R AH0 N\nTABS  T AE1 B Z\nTABUCHI  T AA2 - B UW1 - CH IY0\nTABULATE  T AE1 - B Y AH0 - L EY2 T\nTABULATED  T AE1 - B Y AH0 - L EY2 - T IH0 D\nTABULATING  T AE1 - B Y AH0 - L EY2 - T IH0 NG\nTABULATION  T AE2 - B Y AH0 - L EY1 - SH AH0 N\nTABULATIONS  T AE2 - B Y AH0 - L EY1 - SH AH0 N Z\nTABULATURE  T AE1 - B Y AH0 - L AH0 - CH ER0\nTAC  T AE1 K\nTACEY  T EY1 - S IY0\nTACIT  T AE1 - S IH0 T\nTACITA  T AA0 - CH IY1 - T AH0\nTACITLY  T AE1 - S IH0 T - L IY0\nTACITURN  T AE1 - S IH0 - T ER2 N\nTACK  T AE1 K\nTACKE  T AE1 K\nTACKED  T AE1 K T\nTACKER  T AE1 - K ER0\nTACKETT  T AE1 - K IH0 T\nTACKING  T AE1 - K IH0 NG\nTACKITT  T AE1 - K IH0 T\nTACKLE  T AE1 - K AH0 L\nTACKLED  T AE1 - K AH0 L D\nTACKLES  T AE1 - K AH0 L Z\nTACKLING  T AE1 - K L IH0 NG\nTACKLING(2)  T AE1 - K AH0 L - IH0 NG\nTACKS  T AE1 K S\nTACKY  T AE1 - K IY0\nTACO  T AA1 - K OW0\nTACOMA  T AH0 - K OW1 - M AH0\nTACOMA'S  T AH0 - K OW1 - M AH0 Z\nTACOS  T AA1 - K OW0 Z\nTACT  T AE1 K T\nTACTFUL  T AE1 K T - F AH0 L\nTACTFULLY  T AE1 K T - F AH0 - L IY0\nTACTIC  T AE1 K - T IH0 K\nTACTICAL  T AE1 K - T IH0 - K AH0 L\nTACTICALLY  T AE1 K - T IH0 - K AH0 - L IY0\nTACTICIAN  T AE0 K - T IH1 - SH AH0 N\nTACTICIANS  T AE0 K - T IH1 - SH AH0 N Z\nTACTICS  T AE1 K - T IH0 K S\nTACTILE  T AE1 K - T IH0 L\nTACTILE(2)  T AE1 K - T AY2 L\nTACY  T EY1 - S IY0\nTAD  T AE1 D\nTADA  T AA1 - D AH0\nTADASHI  T AA2 - D AA1 - SH IY0\nTADD  T AE1 D\nTADDEI  T AE1 - D AY0\nTADDEO  T AA1 - D IY0 - OW0\nTADDY  T AE1 - D IY0\nTADEUSZ  T AE1 - D IY0 - UW0 Z\nTADIC  T AE1 - D IH0 K\nTADLOCK  T AE1 D - L AH0 K\nTADPOLE  T AE1 D - P OW2 L\nTADPOLES  T AE1 D - P OW2 L Z\nTADROS  T EY1 - D R OW0 Z\nTADYCH  T AA1 - D IH0 HH\nTAE  T EY1\nTAE(2)  T AY1\nTAEGU  T EY1 - G UW0\nTAEKWONDO  T AE1 - K W AA2 N - D OW1\nTAEKWONDO(2)  T AY0 - K W AA1 N - D OW0\nTAFARO  T AH0 - F AA1 - R OW0\nTAFEL  T AE1 - F AH0 L\nTAFF  T AE1 F\nTAFFE  T AE1 F\nTAFFEL  T AE1 - F AH0 L\nTAFFETA  T AE1 - F AH0 - T AH0\nTAFFY  T AE1 - F IY0\nTAFLINGER  T EY1 - F AH0 L - IH0 - NG ER0\nTAFLINGER(2)  T EY1 - F L IH0 - NG ER0\nTAFOLLA  T AH0 - F AA1 - L AH0\nTAFOYA  T AA0 - F OY1 - AH0\nTAFT  T AE1 F T\nTAFT'S  T AE1 F T S\nTAG  T AE1 G\nTAGALOG  T AE1 - G AH0 - L AA2 G\nTAGAMET  T AE1 - G AH0 - M EH1 T\nTAGANKA  T AH0 - G AA1 NG - K AH0\nTAGER  T EY1 - G ER0\nTAGG  T AE1 G\nTAGGART  T AE1 - G ER0 T\nTAGGART'S  T AE1 - G ER0 T S\nTAGGE  T AE1 G\nTAGGED  T AE1 G D\nTAGGERT  T AE1 - G ER0 T\nTAGGING  T AE1 - G IH0 NG\nTAGLE  T EY1 - G AH0 L\nTAGLIAFERRI  T AA0 G - L Y AA0 - F EH1 - R IY0\nTAGLIERI  T AA0 - G L IH1 - R IY0\nTAGLINE  T AE1 - G L AY2 N\nTAGOUT  T AE1 G - AW2 T\nTAGS  T AE1 G Z\nTAGUE  T AA1 G\nTAHER  T EY1 - ER0\nTAHITI  T AH0 - HH IY1 - T IY0\nTAHMASSEBI  T AA2 - M AH0 - S IY1 - B IY0\nTAHOE  T AE1 - HH OW0\nTAI  T AY1\nTAIBI  T EY1 - B IY0\nTAIKO  T EY1 - K OW0\nTAIL  T EY1 L\nTAILED  T EY1 L D\nTAILGATE  T EY1 L - G EY2 T\nTAILHOOK  T EY1 L - HH UH2 K\nTAILING  T EY1 - L IH0 NG\nTAILINGS  T EY1 - L IH0 NG Z\nTAILLON  T EY1 - L AH0 N\nTAILOR  T EY1 - L ER0\nTAILORED  T EY1 - L ER0 D\nTAILORING  T EY1 - L ER0 - IH0 NG\nTAILORS  T EY1 - L ER0 Z\nTAILPIPE  T EY1 L - P AY2 P\nTAILS  T EY1 L Z\nTAILSPIN  T EY1 L - S P IH2 N\nTAIMA  T AY1 - M AH0\nTAINER  T EY1 - N ER0\nTAING  T AA1 - IH0 NG\nTAINT  T EY1 N T\nTAINTED  T EY1 N - T IH0 D\nTAINTER  T EY1 N - T ER0\nTAINTING  T EY1 N - T IH0 NG\nTAINTS  T EY1 N T S\nTAIPEI  T AY1 - P EY2\nTAIPEI'S  T AY1 - P EY2 Z\nTAIRA  T AA0 - IH1 - R AH0\nTAISEI  T EY1 - S EY2\nTAISHO  T EY1 - SH OW0\nTAIT  T EY1 T\nTAITE  T EY1 T\nTAITT  T EY1 T\nTAIWAN  T AY1 - W AA1 N\nTAIWAN'S  T AY1 - W AA1 N Z\nTAIWANESE  T AY1 - W AA0 - N IY1 Z\nTAIYO  T AY1 - Y OW0\nTAJ  T AA1 ZH\nTAJIK  T AA1 - JH IH0 K\nTAJIKISTAN  T AA2 - JH IY1 - K IH0 - S T AE2 N\nTAJIKISTAN'S  T AA2 - JH IY1 - K IH0 - S T AE2 N Z\nTAJIMA  T AA2 - JH IY1 - M AH0\nTAK  T AE1 K\nTAKACH  T AE1 - K AH0 K\nTAKACS  T AE1 - K AH0 K S\nTAKAGI  T AA0 - K AA1 - G IY0\nTAKAHASHI  T AA0 - K AA0 - HH AA1 - SH IY0\nTAKAKI  T AA0 - K AA1 - K IY0\nTAKAKO  T AA2 - K AA1 - K OW0\nTAKANASHI  T AA2 - K AA2 - N AA1 - SH IY0\nTAKAO  T AA2 - K AA1 - OW0\nTAKARA  T AA0 - K AA1 - R AH0\nTAKASAGO  T AA2 - K AA0 - S AA1 - G OW0\nTAKASHI  T AA2 - K AA1 - SH IY0\nTAKASHIMA  T AA2 - K AA0 - SH IY1 - M AH0\nTAKASHIMAYA  T AA2 - K AA2 - SH IH0 - M AA1 - Y AH0\nTAKATA  T AA0 - K AA1 - T AH0\nTAKAYAMA  T AA0 - K AA0 - Y AA1 - M AH0\nTAKE  T EY1 K\nTAKECARE  T EY1 - K EH1 R\nTAKEDA  T AA0 - K EY1 - D AH0\nTAKEI  T AA1 - K EY2\nTAKEMOTO  T AA0 - K EY0 - M OW1 - T OW0\nTAKEMURA  T AA2 - K EY0 - M UH1 - R AH0\nTAKEN  T EY1 - K AH0 N\nTAKEO  T AA2 - K EY1 - OW0\nTAKEOFF  T EY1 K - AO2 F\nTAKEOFFS  T EY1 K - AO2 F S\nTAKEOUT  T EY1 K - AW2 T\nTAKEOVER  T EY1 K - OW2 - V ER0\nTAKEOVERS  T EY1 K - OW2 - V ER0 Z\nTAKER  T EY1 - K ER0\nTAKERS  T EY1 - K ER0 Z\nTAKES  T EY1 K S\nTAKESHI  T AH0 - K EH1 - SH IY0\nTAKESHIMA  T AE2 - K IH0 - SH IY1 - M AH0\nTAKESHITA  T AA2 - K AH0 - SH IY1 - T AH0\nTAKESHITA'S  T AA2 - K AH0 - SH IY1 - T AH0 Z\nTAKETA  T AA0 - K EY1 - T AH0\nTAKETH  T EY1 - K AH0 TH\nTAKETOMI  T AA2 - K IH0 - T OW1 - M IY0\nTAKEUCHI  T AA2 - K EY0 - UW1 - CH IY0\nTAKI  T AE1 - K IY0\nTAKI'S  T AE1 - K IY0 Z\nTAKIHYO  T AH0 - K IY1 - Y OW0\nTAKIN'  T EY1 - K IH0 N\nTAKING  T EY1 - K IH0 NG\nTAKINGS  T EY1 - K IH0 NG Z\nTAKLA-MAKAN  T AE1 - K L AH0 - M EY1 - K AH0 N\nTAKU  T AA1 - K UW2\nTAKUSHOKU  T AA2 - K AH0 - SH OW1 - K UW0\nTAL  T AA1 L\nTALAGA  T AA0 - L AA1 - G AH0\nTALAL  T AH0 - L AA1 L\nTALAMANTES  T AA0 - L AA0 - M AA1 N - T EH0 S\nTALAMANTEZ  T AA0 - L AA0 - M AA1 N - T EH0 Z\nTALAMO  T AA0 - L AA1 - M OW0\nTALARICO  T AA0 - L AA0 - R IY1 - K OW0\nTALAVERA  T AA0 - L AA0 - V EH1 - R AH0\nTALBERT  T AE1 L - B ER0 T\nTALBOT  T AE1 L - B AH0 T\nTALBOT'S  T AE1 L - B AH0 T S\nTALBOTS  T AE1 L - B AH0 T S\nTALBOTT  T AE1 L - B AH0 T\nTALBOTT'S  T AE1 L - B AH0 T S\nTALC  T AE1 L K\nTALCOTT  T AE1 L - K AH0 T\nTALCS  T AE1 L K S\nTALCUM  T AE1 L - K AH0 M\nTALE  T EY1 L\nTALENT  T AE1 - L AH0 N T\nTALENTED  T AE1 - L AH0 N - T AH0 D\nTALENTED(2)  T AE1 - L AH0 N - T IH0 D\nTALENTS  T AE1 - L AH0 N T S\nTALERICO  T AA0 - L ER0 - IY1 - K OW0\nTALES  T EY1 L Z\nTALESE  T AH0 - L IY1 Z\nTALESE(2)  T AH0 - L IY1 - Z IY0\nTALFORD  T AE1 L - F ER0 D\nTALIBAN  T AE1 - L IH0 - B AE2 N\nTALIGENT  T AE1 - L IH0 - JH EH0 N T\nTALISMAN  T AE1 - L IH0 S - M AH0 N\nTALITHA  T AE1 - L IH0 - DH AH0\nTALK  T AO1 K\nTALK'S  T AO1 K S\nTALKABLE  T AO1 - K AH0 - B AH0 L\nTALKATIVE  T AO1 - K AH0 - T IH0 V\nTALKBACK  T AO1 K - B AE2 K\nTALKED  T AO1 K T\nTALKER  T AO1 - K ER0\nTALKERS  T AO1 - K ER0 Z\nTALKIE  T AO1 - K IY0\nTALKIES  T AO1 - K IY0 Z\nTALKIN  T AA1 - K AH0 N\nTALKIN'  T AO1 - K IH0 N\nTALKING  T AO1 - K IH0 NG\nTALKINGTON  T AO1 - K IH0 NG - T AH0 N\nTALKS  T AO1 K S\nTALKY  T AO1 - K IY0\nTALL  T AO1 L\nTALLADEGA  T AE2 - L AH0 - D EY1 - G AH0\nTALLAHASSEAN  T AE2 - L AH0 - HH AE1 - S IY0 - AH0 N\nTALLAHASSEANS  T AE2 - L AH0 - HH AE1 - S IY0 - AH0 N Z\nTALLAHASSEE  T AE2 - L AH0 - HH AE1 - S IY0\nTALLAHASSEE'S  T AE2 - L AH0 - HH AE1 - S IY0 Z\nTALLANT  T AA1 - L AH0 N T\nTALLARICO  T AA0 - L AA0 - R IY1 - K OW0\nTALLENT  T AA1 - L AH0 N T\nTALLER  T AO1 - L ER0\nTALLERICO  T AA0 - L ER0 - IY1 - K OW0\nTALLEST  T AO1 - L IH0 S T\nTALLEY  T AE1 - L IY0\nTALLGRASS  T AA1 L - G R AE2 S\nTALLIE  T AO1 - L IY0\nTALLIED  T AE1 - L IY0 D\nTALLIES  T AE1 - L IY0 Z\nTALLIL  T AH0 - L IH1 L\nTALLMADGE  T AE1 L - M AE0 JH\nTALLMAN  T AO1 L - M AH0 N\nTALLO  T AE1 - L OW0\nTALLON  T AE1 - L AH0 N\nTALLOW  T AE1 - L OW0\nTALLULA  T AA0 - L UW1 - L AH0\nTALLULAH  T AE2 - L UW1 - L AH0\nTALLY  T AE1 - L IY0\nTALLYHO  T AE2 - L IY0 - HH OW1\nTALLYING  T AE1 - L IY0 - IH0 NG\nTALMADGE  T AE1 L - M AE0 JH\nTALMAGE  T AE1 L - M IH0 JH\nTALMAN  T AE1 L - M AH0 N\nTALMOR  T AE1 L - M AO2 R\nTALMUD  T AE1 L - M AH0 D\nTALON  T AE1 - L AH0 N\nTALONS  T AE1 - L AH0 N Z\nTALSMA  T AA1 L S - M AH0\nTALTON  T AE1 L - T AH0 N\nTALTOS  T AA1 L - T OW0 Z\nTALTY  T AO1 L - T IY0\nTAM  T AE1 M\nTAMA  T AA1 - M AH0\nTAMALES  T AH0 - M AA1 - L IY0 Z\nTAMANAHA  T AA0 - M AA0 - N AA1 - HH AH0\nTAMARA  T AH0 - M AA1 - R AH0\nTAMARAC  T AE1 - M ER0 - AE0 K\nTAMARGO  T AA0 - M AA1 R - G OW0\nTAMARIN  T AE1 - M ER0 - AH0 N\nTAMARINS  T AE1 - M ER0 - AH0 N Z\nTAMARISK  T AE1 - M ER0 - IH0 S K\nTAMARISKS  T AE1 - M ER0 - IH0 S K S\nTAMAS  T AA1 - M AH0 Z\nTAMASHIRO  T AA0 - M AA0 - SH IH1 - R OW0\nTAMAYO  T AA0 - M AA1 - Y OW0\nTAMBLYN  T AE1 M - B L IH0 N\nTAMBO  T AE1 M - B OW0\nTAMBOCOR  T AE1 M - B OW0 - K AO2 R\nTAMBOURINE  T AE2 M - B ER0 - IY1 N\nTAMBRANDS  T AE1 M - B R AE2 N D Z\nTAMBS  T AE1 M Z\nTAMBURELLO  T AA0 M - B UH0 - R EH1 - L OW0\nTAMBURO  T AA0 M - B UH1 - R OW0\nTAMBURRI  T AA0 M - B UH1 - R IY0\nTAMBURRINO  T AA0 M - B UH0 - R IY1 - N OW0\nTAMBURRO  T AA0 M - B UH1 - R OW0\nTAME  T EY1 M\nTAMED  T EY1 M D\nTAMER  T EY1 - M ER0\nTAMES  T EY1 M Z\nTAMEZ  T AA0 - M EH1 Z\nTAMIAMI  T AE2 - M IY0 - AE1 - M IY0\nTAMIL  T AH0 - M IH0 L\nTAMIL(2)  T AE1 - M IH0 L\nTAMILS  T AH0 - M IH0 L Z\nTAMILS(2)  T AE1 - M IH0 L Z\nTAMING  T EY1 - M IH0 NG\nTAMKE  T AE1 M - K IY0\nTAMM  T AE1 M\nTAMMANY  T AE1 - M AH0 - N IY0\nTAMMARO  T AA0 - M AA1 - R OW0\nTAMMEN  T AE1 - M AH0 N\nTAMMIE  T AE1 - M IY0\nTAMMINGA  T AA0 - M IY1 NG - G AH0\nTAMMO  T AE1 - M OW0\nTAMMY  T AE1 - M IY0\nTAMOXIFEN  T AE2 - M AA1 K - S AH0 - F AH0 N\nTAMP  T AE1 M P\nTAMPA  T AE1 M - P AH0\nTAMPA'S  T AE1 M - P AH0 Z\nTAMPAX  T AE1 M - P AE2 K S\nTAMPER  T AE1 M - P ER0\nTAMPERED  T AE1 M - P ER0 D\nTAMPERING  T AE1 M - P ER0 - IH0 NG\nTAMPING  T AE1 M - P IH0 NG\nTAMPLIN  T AE1 M - P L IH0 N\nTAMPON  T AE1 M - P AA0 N\nTAMPONS  T AE1 M - P AA0 N Z\nTAMPOPO  T AE2 M - P OW1 - P OW0\nTAMPOSI  T AE2 M - P OW1 - S IY0\nTAMPS  T AE1 M P S\nTAMURA  T AA0 - M UH1 - R AH0\nTAN  T AE1 N\nTANABE  T AA0 - N AA1 - B EY0\nTANAKA  T AA0 - N AA1 - K AH0\nTANARTKIT  T AE2 - N AA1 R T - K IH2 T\nTANCREDI  T AA0 N - K R EH1 - D IY0\nTANCREDO  T AE2 N - K R EY1 - D OW0\nTANDEM  T AE1 N - D AH0 M\nTANDEM'S  T AE1 N - D AH0 M Z\nTANDON  T AE1 N - D AH0 N\nTANDY  T AE1 N - D IY0\nTANDY'S  T AE1 N - D IY0 Z\nTANDYCRAFT  T AE1 N - D IY0 - K R AE2 F T\nTANDYCRAFTS  T AE1 N - D IY0 - K R AE2 F T S\nTANEJA  T AH0 - N EY1 - HH AH0\nTANEN  T AE1 - N AH0 N\nTANENBAUM  T AE1 - N AH0 N - B AW2 M\nTANEY  T EY1 - N IY0\nTANG  T AE1 NG\nTANG(2)  T AA1 NG\nTANGE  T AE1 N JH\nTANGEMAN  T EY1 N JH - M AH0 N\nTANGEN  T AE1 - NG AH0 N\nTANGENT  T AE1 N - JH AH0 N T\nTANGENTIAL  T AE0 N - JH EH1 N - CH AH0 L\nTANGENTIALLY  T AE0 N - JH EH1 N - CH AH0 - L IY0\nTANGER  T AE1 - NG ER0\nTANGERINE  T AE2 N - JH ER0 - IY1 N\nTANGERINES  T AE1 N - JH ER0 - IY2 N Z\nTANGIBLE  T AE1 N - JH AH0 - B AH0 L\nTANGIBLES  T AE1 N - JH AH0 - B AH0 L Z\nTANGIERS  T AE2 N - JH IH1 R Z\nTANGLE  T AE1 NG - G AH0 L\nTANGLED  T AE1 NG - G AH0 L D\nTANGLES  T AE1 NG - G AH0 L Z\nTANGLEWOOD  T AE1 NG - G AH0 L - W UH2 D\nTANGLING  T AE1 NG - G L IH0 NG\nTANGNEY  T AE1 NG G - N IY0\nTANGO  T AE1 NG - G OW0\nTANGOS  T AE1 NG - G OW0 Z\nTANGQUI  T AE1 NG - K W IY1\nTANGREDI  T AA0 NG - G R EH1 - D IY0\nTANGS  T AE1 NG Z\nTANGUAY  T AE1 N - G EY0\nTANGUMA  T AA0 NG - G UW1 - M AH0\nTANI  T AA1 - N IY0\nTANIA  T AA1 - N Y AH0\nTANIGUCHI  T AA2 - N IH0 - G UW1 - CH IY0\nTANIMOTO  T AA0 - N IY0 - M OW1 - T OW0\nTANIMURA  T AA2 - N IH0 - M UW1 - R AH0\nTANIS  T AE1 - N IH0 S\nTANJUG  T AE1 N - JH AH2 G\nTANK  T AE1 NG K\nTANK'S  T AE1 NG K S\nTANKAN  T AE1 NG - K AH0 N\nTANKARD  T AE1 NG - K ER0 D\nTANKE  T AE1 NG K\nTANKED  T AE1 NG K T\nTANKER  T AE1 NG - K ER0\nTANKERS  T AE1 NG - K ER0 Z\nTANKERSLEY  T AE1 NG - K ER0 S - L IY0\nTANKING  T AE1 NG - K IH0 NG\nTANKS  T AE1 NG K S\nTANKSLEY  T AE1 NG K S - L IY0\nTANN  T AE1 N\nTANNAHILL  T AE1 - N AH0 - HH IH2 L\nTANNED  T AE1 N D\nTANNEHILL  T AE1 - N IH0 - HH IH0 L\nTANNEN  T AE1 - N AH0 N\nTANNENBAUM  T AE1 - N AH0 N - B AW2 M\nTANNER  T AE1 - N ER0\nTANNEST  T AE1 - N IH0 S T\nTANNEY  T AE1 - N IY0\nTANNHAUSER  T AE1 N - HH AW2 - Z ER0\nTANNING  T AE1 - N IH0 NG\nTANQUERAY  T AE1 NG - K W ER0 - EY2\nTANS  T AE1 N Z\nTANSEY  T AE1 N - Z IY0\nTANSKI  T AE1 N - S K IY2\nTANSY  T AE1 N - Z IY0\nTANT  T AE1 N T\nTANTALIZE  T AE1 N - T AH0 - L AY2 Z\nTANTALIZE(2)  T AE1 - N AH0 - L AY2 Z\nTANTALIZED  T AE1 N - T AH0 - L AY2 Z D\nTANTALIZED(2)  T AE1 - N AH0 - L AY2 Z D\nTANTALIZES  T AE1 N - T AH0 - L AY2 - Z IH0 Z\nTANTALIZES(2)  T AE1 - N AH0 - L AY2 - Z AH0 Z\nTANTALIZING  T AE1 N - T AH0 - L AY2 - Z IH0 NG\nTANTALIZING(2)  T AE1 - N AH0 - L AY2 - Z IH0 NG\nTANTALIZINGLY  T AE1 N - T AH0 - L AY2 - Z IH0 NG - L IY0\nTANTALIZINGLY(2)  T AE1 - N AH0 - L AY2 - Z IH0 NG - L IY0\nTANTALUM  T AE1 N - T AH0 - L AH0 M\nTANTALUS  T AE1 N - T AH0 - L AH0 S\nTANTAMOUNT  T AE1 N - T AH0 - M AW2 N T\nTANTILLO  T AA0 N - T IH1 - L OW0\nTANTON  T AE1 N - T AH0 N\nTANTRIC  T AE1 N - T R IH0 K\nTANTRUM  T AE1 N - T R AH0 M\nTANTRUMS  T AE1 N - T R AH0 M Z\nTANU  T AA1 - N UW0\nTANYA  T AA1 - N Y AH0\nTANZANIA  T AE0 N - Z EY1 - N IY0 - AH0\nTANZANIA'S  T AE0 N - Z EY1 - N IY0 - AH0 Z\nTANZANIA'S(2)  T AE2 N - Z AH0 - N IY1 - AH0 Z\nTANZANIA'S(3)  T AE2 N - Z EY1 - N Y AH0 Z\nTANZANIA(2)  T AE2 N - Z AH0 - N IY1 - AH0\nTANZANIA(3)  T AE2 N - Z EY1 - N Y AH0\nTANZANIAN  T AE2 N - Z EY1 - N IY0 - AH0 N\nTANZANIAN(2)  T AE2 N - Z EY1 - N Y AH0 N\nTANZER  T AE1 N - Z ER0\nTANZI  T AE1 N - Z IY0\nTAO  T AW1\nTAO(2)  D AW1\nTAOISM  D AW1 - IH0 - Z AH0 M\nTAOIST  D AW1 - IH0 S T\nTAOISTS  D AW1 - AH0 S T S\nTAOISTS(2)  D AW1 - AH0 S S\nTAOISTS(3)  D AW1 - AH0 S\nTAORMINA  T AA0 - AO0 R - M IY1 - N AH0\nTAOS  T AW1 Z\nTAP  T AE1 P\nTAPAS  T AH1 - P AH0 S\nTAPE  T EY1 P\nTAPE'S  T EY1 P S\nTAPED  T EY1 P T\nTAPEIE  T EY1 - P IY0 - EY0\nTAPEIE'S  T EY1 - P IY0 - EY0 Z\nTAPER  T EY1 - P ER0\nTAPERED  T EY1 - P ER0 D\nTAPERING  T EY1 - P ER0 - IH0 NG\nTAPERS  T EY1 - P ER0 Z\nTAPES  T EY1 P S\nTAPESTRIES  T AE1 - P AH0 S - T R IY0 Z\nTAPESTRY  T AE1 - P AH0 S - T R IY0\nTAPIA  T AA1 - P IY0 - AH0\nTAPIAS  T AH0 - P IY1 - AH0 S\nTAPIE  T AE1 - P IY0\nTAPING  T EY1 - P IH0 NG\nTAPINGS  T EY1 - P IH0 NG Z\nTAPLEY  T AE1 P - L IY0\nTAPLIN  T AE1 P - L IH0 N\nTAPP  T AE1 P\nTAPPAN  T AE1 - P AH0 N\nTAPPE  T AE1 P\nTAPPED  T AE1 P T\nTAPPEN  T AE1 - P AH0 N\nTAPPER  T AE1 - P ER0\nTAPPET  T AE1 - P AH0 T\nTAPPIN  T AE1 - P IH0 N\nTAPPING  T AE1 - P IH0 NG\nTAPS  T AE1 P S\nTAPSCOTT  T AE1 P - S K AH0 T\nTAR  T AA1 R\nTARA  T EH1 - R AH0\nTARAHUMARA  T AA0 - R AH0 - HH UW1 - M AA0 - R AH0\nTARALLO  T ER0 - AE1 - L OW0\nTARANGO  T AA0 - R AA1 NG - G OW0\nTARANTINO  T AA0 - R AA0 N - T IY1 - N OW0\nTARANTO  T ER0 - AE1 N - T OW0\nTARANTO'S  T ER0 - AE1 N - T OW0 Z\nTARANTULA  T AH0 - R AE1 N - CH UW0 - L AH0\nTARANTULA(2)  T AH0 - R AE1 N - CH AH0 - L AH0\nTARANTULAS  T AH0 - R AE1 N - CH UW0 - L AH0 Z\nTARANTULAS(2)  T AH0 - R AE1 N - CH AH0 - L AH0 Z\nTARAS  T AA1 - R AH0 Z\nTARASOFF  T EH1 - R IH0 S - AO0 F\nTARAVELLA  T AE2 - R AH0 - V EH1 - L AH0\nTARBELL  T AA1 R - B EH2 L\nTARBERT  T AA1 R - B ER0 T\nTARBET  T AA1 R - B IH0 T\nTARBOX  T AA1 R - B AA2 K S\nTARBUTTON  T AA1 R - B AH2 - T AH0 N\nTARDIF  T AA1 R - D IH0 F\nTARDIFF  T AA1 R - D IH0 F\nTARDINESS  T AA1 R - D IY0 - N AH0 S\nTARDITI  T AA2 R - D IH1 - T IY0\nTARDY  T AA1 R - D IY0\nTARGET  T AA1 R - G AH0 T\nTARGET'S  T AA1 R - G AH0 T S\nTARGET(2)  T ER1 - G AH0 T\nTARGETED  T AA1 R - G AH0 - T IH0 D\nTARGETING  T AA1 R - G AH0 - T IH0 NG\nTARGETS  T AA1 R - G AH0 T S\nTARHEEL  T AA1 R - HH IY2 L\nTARHEELS  T AA1 R - HH IY2 L Z\nTARIFF  T EH1 - R AH0 F\nTARIFFS  T EH1 - R AH0 F S\nTARIN  T AA1 - R IY0 N\nTARIQ  T AA2 - R IY1 K\nTARKINGTON  T AA1 R - K IH0 NG - T AH0 N\nTARKOWSKI  T ER0 - K AO1 F S - K IY0\nTARLETON  T AA1 R L - T AH0 N\nTARLOW  T AA1 R - L OW2\nTARLTON  T AA1 R L - T AH0 N\nTARMAC  T AA1 R - M AE2 K\nTARMACS  T AA1 R - M AE2 K S\nTARMAN  T AA1 R - M AH0 N\nTARNISH  T AA1 R - N IH0 SH\nTARNISHED  T AA1 R - N IH0 SH T\nTARNISHING  T AA1 R - N IH0 - SH IH0 NG\nTARNOFF  T AA1 R - N AO2 F\nTARNOFF'S  T AA1 R - N AO2 F S\nTARNOW  T AA1 R - N OW0\nTARNOWER  T AA1 R - N AW0 - ER0\nTARNOWSKI  T ER0 - N AO1 F S - K IY0\nTARO  T EH1 - R OW0\nTAROM  T EH1 - R AH0 M\nTAROT  T AE2 - R OW1\nTAROTS  T AE2 - R OW1 Z\nTARP  T AA1 R P\nTARPEY  T AA1 R - P IY0\nTARPLEY  T AA1 R P - L IY0\nTARPON  T AA1 R - P AH0 N\nTARPS  T AA1 R P S\nTARPY  T AA1 R - P IY0\nTARQUINIO  T AA0 R K - W IY1 - N IY0 - OW0\nTARR  T AA1 R\nTARRANCE  T AA1 - R AH0 N S\nTARRANT  T AA1 - R AH0 N T\nTARRED  T AA1 R D\nTARRING  T AA1 - R IH0 NG\nTARRY  T EH1 - R IY0\nTARRYTOWN  T EH1 - R IY0 - T AW2 N\nTARSES  T AA1 R - S IH0 S\nTARSUS  T AA1 R - S AH0 S\nTART  T AA1 R T\nTARTAGLIA  T AA0 R - T AE1 G - L IY0 - AH0\nTARTAGLIONE  T AA0 R - T AE0 G - L IY0 - OW1 - N IY0\nTARTAN  T AA1 R - T AH0 N\nTARTAR  T AA1 R - T ER0\nTARTARS  T AA1 R - T ER0 Z\nTARTE  T AA1 R T\nTARTER  T AA1 R - T ER0\nTARTIKOFF  T AA1 R - T IH0 K - AO2 F\nTARTNESS  T AA1 R T - N AH0 S\nTARTS  T AA1 R T S\nTARTT  T AA1 R T\nTARVER  T AA1 R - V ER0\nTARVIN  T AA1 R - V IH0 N\nTARZAN  T AA1 R - Z AE2 N\nTARZAN'S  T AA1 R - Z AE2 N Z\nTARZAN'S(2)  T AA1 R - Z AH0 N Z\nTARZAN(2)  T AA1 R - Z AH0 N\nTASADAY  T AE1 - S AH0 - D EY0\nTASCA  T AA1 S - K AH0\nTASCH  T AE1 SH\nTASCHNER  T AE1 SH - N ER0\nTASER  T EY1 - Z ER0\nTASH  T AE1 SH\nTASHIRO  T AA0 - SH IH1 - R OW0\nTASHJIAN  T AE1 SH - JH IY0 - AH0 N\nTASHKENT  T AE2 SH - K EH1 N T\nTASK  T AE1 S K\nTASKED  T AE1 S K T\nTASKER  T AE1 - S K ER0\nTASKFORCE  T AE1 S K - F AO2 R S\nTASKING  T AE1 - S K IH0 NG\nTASKMASTER  T AE1 S K - M AE2 - S T ER0\nTASKS  T AE1 S K S\nTASM  T AE1 - S AH0 M\nTASMAN  T AE1 Z - M AH0 N\nTASMANIA  T AE2 Z - M EY1 - N IY0 - AH0\nTASMANIAN  T AE2 Z - M EY1 - N IY0 - AH0 N\nTASS  T AE1 S\nTASSEL  T AE1 - S AH0 L\nTASSELED  T AE1 - S AH0 L D\nTASSI  T AE1 - S IY0\nTASSIN  T AE1 - S IH0 N\nTASSINARI  T AA0 - S IY0 - N AA1 - R IY0\nTASSO  T AE1 - S OW2\nTASSONE  T AA0 - S OW1 - N IY0\nTASTE  T EY1 S T\nTASTED  T EY1 - S T AH0 D\nTASTED(2)  T EY1 - S T IH0 D\nTASTEFUL  T EY1 S T - F AH0 L\nTASTEFULLY  T EY1 S T - F AH0 - L IY0\nTASTELESS  T EY1 S T - L AH0 S\nTASTER  T EY1 - S T ER0\nTASTER'S  T EY1 - S T ER0 Z\nTASTERS  T EY1 - S T ER0 Z\nTASTES  T EY1 S T S\nTASTIER  T EY1 - S T IY0 - ER0\nTASTINESS  T EY1 - S T IY0 - N AH0 S\nTASTING  T EY1 - S T IH0 NG\nTASTINGS  T EY1 - S T IH0 NG Z\nTASTY  T EY1 - S T IY0\nTAT  T AE1 T\nTATA  T AA1 - T AH0\nTATAR  T AE1 - T ER0\nTATARS  T AE1 - T ER0 Z\nTATARSTAN  T AA1 - T ER0 - S T AE2 N\nTATARSTAN(2)  T AA1 - T AA2 R - S T AE2 N\nTATE  T EY1 T\nTATE'S  T EY1 T S\nTATEHO  T AH0 - T EY1 - HH OW0\nTATEHO'S  T AH0 - T EY1 - HH OW0 Z\nTATEM  T AE1 - T IH0 M\nTATGE  T EY1 T JH\nTATHAM  T AE1 - TH AH0 M\nTATIANA  T AE2 - T IY2 - AE1 - N AH0\nTATIANA(2)  T AE2 - T Y AA1 - N AH0\nTATLOCK  T AE1 T - L AA2 K\nTATMAN  T AE1 T - M AH0 N\nTATOM  T AE1 - T AH0 M\nTATRA  T AE1 - T R AH0\nTATRO  T AE1 - T R OW0\nTATSCH  T AE1 CH\nTATSUKICHI  T AH0 T - S UW0 - K IY1 - CH IY0\nTATSUNO  T AE2 T - S UW1 - N OW0\nTATTER  T AE1 - T ER0\nTATTERED  T AE1 - T ER0 D\nTATTERS  T AE1 - T ER0 Z\nTATTERSALL  T AE1 - T ER0 - S AH0 L\nTATTLE  T AE1 - T AH0 L\nTATTLED  T AE1 - T AH0 L D\nTATTLER  T AE1 T - L ER0\nTATTOO  T AE0 - T UW1\nTATTOOED  T AE0 - T UW1 D\nTATTOOING  T AE0 - T UW1 - IH0 NG\nTATTOOS  T AE0 - T UW1 Z\nTATTY  T AE1 - T IY0\nTATU  T AA0 - T UW1\nTATUM  T EY1 - T AH0 M\nTATYANA  T AA0 - T Y AA1 - N AH0\nTAUB  T AW1 B\nTAUBE  T AO1 B\nTAUBER  T AW1 - B ER0\nTAUBERT  T AW1 - B ER0 T\nTAUBES  T AW1 B Z\nTAUBMAN  T AW1 B - M AH0 N\nTAUCHER  T AW1 - K ER0\nTAUER  T AW1 - ER0\nTAUGHT  T AO1 T\nTAUKE  T AW1 K\nTAUL  T AO1 L\nTAULBEE  T AO1 L - B IY2\nTAUNT  T AO1 N T\nTAUNTED  T AO1 N - T IH0 D\nTAUNTING  T AO1 N - T IH0 NG\nTAUNTON  T AO1 N - T AH0 N\nTAUNTS  T AO1 N T S\nTAURUS  T AO1 - R AH0 S\nTAURUSES  T AO1 - R AH0 - S AH0 Z\nTAUSCH  T AW1 SH\nTAUSCHER  T AW1 - SH ER0\nTAUSSIG  T AW1 - S IH0 G\nTAUT  T AO1 T\nTAUZIN  T AW1 - Z IH0 N\nTAVANO  T AA0 - V AA1 - N OW0\nTAVARES  T AA0 - V AA1 - R EH0 S\nTAVAREZ  T AA0 - V AA1 - R EH0 Z\nTAVEL  T AA0 - V EH1 L\nTAVENNER  T AE1 - V IH0 - N ER0\nTAVERA  T AA0 - V EH1 - R AH0\nTAVERAS  T AA0 - V EH1 - R AA0 Z\nTAVERN  T AE1 - V ER0 N\nTAVERNA  T AA0 - V EH1 R - N AH0\nTAVERNIER  T AE1 - V ER0 - N IY0 - ER0\nTAVERNS  T AE1 - V ER0 N Z\nTAVES  T EY1 V Z\nTAVIE  T EY1 - V IY0\nTAVIS  T AA1 - V IH0 S\nTAVISH  T EY1 - V IH0 SH\nTAVIST  T AE1 - V IH0 S T\nTAVLIN  T AE1 V - L IH0 N\nTAVOULAREAS  T AA0 - V UW0 - L EH1 - R IY0 - AH0 S\nTAVY  T EY1 - V IY0\nTAWANA  T AA2 W - AA1 - N AH0\nTAWDRY  T AO1 - D R IY0\nTAWES  T AO1 Z\nTAWIL  T AO1 - AH0 L\nTAWNEY  T AO1 - N IY0\nTAWNY  T AA1 - N IY0\nTAX  T AE1 K S\nTAX'S  T AE1 K - S IH0 Z\nTAXABILITY  T AE2 K - S AH0 - B IH1 - L IH0 - T IY0\nTAXABLE  T AE1 K - S AH0 - B AH0 L\nTAXABLES  T AE1 K - S AH0 - B AH0 L Z\nTAXATION  T AE0 K - S EY1 - SH AH0 N\nTAXCUT  T AE1 K - S K AH2 T\nTAXED  T AE1 K S T\nTAXER  T AE1 K - S ER0\nTAXERS  T AE1 K - S ER0 Z\nTAXES  T AE1 K - S AH0 Z\nTAXES'  T AE1 K - S IH0 Z\nTAXES(2)  T AE1 K - S IH0 Z\nTAXI  T AE1 K - S IY0\nTAXI'S  T AE1 K - S IY0 Z\nTAXICAB  T AE1 K - S IY0 - K AE2 B\nTAXICABS  T AE1 K - S IY0 - K AE2 B Z\nTAXIED  T AE1 K - S IY0 D\nTAXIING  T AE1 K - S IY0 - IH0 NG\nTAXING  T AE1 K - S IH0 NG\nTAXIS  T AE1 K - S IY0 Z\nTAXOL  T AE1 K - S AA2 L\nTAXPAYER  T AE1 K - S P EY2 - ER0\nTAXPAYER'S  T AE1 K - S P EY2 - ER0 Z\nTAXPAYERS  T AE1 K - S P EY2 - ER0 Z\nTAXPAYERS'  T AE1 K - S P EY2 - ER0 Z\nTAXPAYING  T AE1 K - S P EY2 - IH0 NG\nTAY  T EY1\nTAYLER  T EY1 - L ER0\nTAYLOE  T EY1 - L OW0\nTAYLOR  T EY1 - L ER0\nTAYLOR'S  T EY1 - L ER0 Z\nTAYLORS  T EY1 - L ER0 Z\nTAYMAN  T EY1 - M AH0 N\nTAYS  T EY1 Z\nTB  T IY1 - B IY1\nTBILISI  T AH0 - B IH0 - L IY1 - S IY0\nTBILISI(2)  T AH0 - B L IY1 - S IY0\nTCAS  T IY1 - S IY1 - EY1 - EH1 S\nTCHAIKOVSKY  CH EY2 - K AA1 V S - K IY0\nTCHAIKOVSKY'S  CH EY2 - K AA1 V - S K IY0 Z\nTCHAIKOVSKY'S(2)  CH AY2 - K AA1 V - S K IY0 Z\nTCHAIKOVSKY'S(3)  CH AY2 - K AA1 F - S K IY0 Z\nTCHAIKOVSKY(2)  CH AY2 - K AA1 V S - K IY0\nTCHAIKOVSKY(3)  CH AY2 - K AA1 F S - K IY0\nTCHURUK  CH UH1 - R IH0 K\nTE  T IY1\nTEA  T IY1\nTEAC  T IY1 K\nTEAC(2)  T IY1 - AE0 K\nTEACH  T IY1 CH\nTEACHABLE  T IY1 - CH AH0 - B AH0 L\nTEACHER  T IY1 - CH ER0\nTEACHER'S  T IY1 - CH ER0 Z\nTEACHERS  T IY1 - CH ER0 Z\nTEACHERS'  T IY1 - CH ER0 Z\nTEACHES  T IY1 - CH AH0 Z\nTEACHES(2)  T IY1 - CH IH0 Z\nTEACHEY  T IY1 - CH IY0\nTEACHING  T IY1 - CH IH0 NG\nTEACHINGS  T IY1 - CH IH0 NG Z\nTEACHOUT  T IY1 CH - AW2 T\nTEACUP  T IY1 - K AH2 P\nTEAFORD  T IY1 - F AO2 R D\nTEAFORD(2)  T IY1 - F ER0 D\nTEAGARDEN  T IY1 - G AA2 R - D AH0 N\nTEAGLE  T IY1 - G AH0 L\nTEAGUE  T IY1 G\nTEAHAN  T IY1 - AH0 N\nTEAK  T IY1 K\nTEAKWOOD  T IY1 K - W UH2 D\nTEAL  T IY1 L\nTEALE  T IY1 L\nTEALL  T IY1 L\nTEAM  T IY1 M\nTEAM'S  T IY1 M Z\nTEAMED  T IY1 M D\nTEAMER  T IY1 - M ER0\nTEAMING  T IY1 - M IH0 NG\nTEAMMATE  T IY1 - M EY2 T\nTEAMMATES  T IY1 M - M EY2 T S\nTEAMS  T IY1 M Z\nTEAMS'  T IY1 M Z\nTEAMSTER  T IY1 M - S T ER0\nTEAMSTER'S  T IY1 M - S T ER0 Z\nTEAMSTERS  T IY1 M - S T ER0 Z\nTEAMSTERS'  T IY1 M - S T ER0 Z\nTEAMWORK  T IY1 M - W ER2 K\nTEANECK  T IY1 - N EH2 K\nTEANEY  T IY1 - N IY0\nTEAPOT  T IY1 - P AA2 T\nTEAR  T EH1 R\nTEAR(2)  T IH1 R\nTEARE  T IY1 R\nTEARFUL  T IH1 R - F AH0 L\nTEARFULLY  T IH1 R - F AH0 - L IY0\nTEARING  T EH1 - R IH0 NG\nTEARING(2)  T IH1 - R IH0 NG\nTEARLE  T AO1 - R AH0 L\nTEARS  T EH1 R Z\nTEARS(2)  T IH1 R Z\nTEARY  T IH1 - R IY0\nTEAS  T IY1 Z\nTEASDALE  T IY1 Z - D EY2 L\nTEASE  T IY1 Z\nTEASED  T IY1 Z D\nTEASER  T IY1 - Z ER0\nTEASES  T IY1 - Z IH0 Z\nTEASING  T IY1 - Z IH0 NG\nTEASLEY  T IY1 Z - L IY0\nTEASON  T IY1 - S AO0 N\nTEASPOON  T IY1 - S P UW2 N\nTEASPOONS  T IY1 - S P UW2 N Z\nTEASTER  T IY1 - S T ER0\nTEAT  T IY1 T\nTEATE  T IY1 - EY2 T\nTEATER  T IY1 - T ER0\nTEATRO  T IY1 - T R OW0\nTEATS  T IY1 T S\nTEBBE  T EH1 B\nTEBBEN  T EH1 - B AH0 N\nTEBBETTS  T EH1 - B IH0 T S\nTEBBIT  T EH1 - B IH0 T\nTEBBS  T EH1 B Z\nTEBEAU  T IH0 - B OW1\nTEBELSKIS  T AH0 - B EH1 L - S K IY0 S\nTEBO  T EH1 - B OW0\nTEBUTHIURON  T EH2 - B AH0 - TH Y UW1 - R AA0 N\nTEC  T EH1 K\nTECH  T EH1 K\nTECH'S  T EH1 K S\nTECHIE  T EH1 - K IY0\nTECHIES  T EH1 - K IY0 Z\nTECHINT  T EH1 - CH IH0 N T\nTECHINT(2)  T EH1 - K IH2 N T\nTECHNIC  T EH1 K - N IH0 K\nTECHNICAL  T EH1 K - N IH0 - K AH0 L\nTECHNICAL'S  T EH1 K - N IH0 - K AH0 L Z\nTECHNICALITIES  T EH2 K - N IH0 - K AE1 - L AH0 - T IY0 Z\nTECHNICALITY  T EH2 K - N IH0 - K AE1 - L IH0 - T IY0\nTECHNICALLY  T EH1 K - N IH0 - K AH0 - L IY0\nTECHNICALLY(2)  T EH1 K - N IH0 K - L IY0\nTECHNICALS  T EH1 K - N IH0 - K AH0 L Z\nTECHNICIAN  T EH0 K - N IH1 - SH AH0 N\nTECHNICIAN'S  T EH0 K - N IH1 - SH AH0 N Z\nTECHNICIANS  T EH0 K - N IH1 - SH AH0 N Z\nTECHNICOLOR  T EH1 K - N IH0 - K AH2 - L ER0\nTECHNICON  T EH1 K - N IH0 - K AA2 N\nTECHNICS  T EH1 K - N IH0 K S\nTECHNIQUE  T EH0 K - N IY1 K\nTECHNIQUES  T EH0 K - N IY1 K S\nTECHNITROL  T EH1 K - N IH0 - T R OW2 L\nTECHNO  T EH1 K - N OW0\nTECHNOCRAT  T EH1 K - N AH0 - K R AE2 T\nTECHNOCRATIC  T EH2 K - N AH0 - K R AE1 - T IH0 K\nTECHNOCRATS  T EH1 K - N AH0 - K R AE2 T S\nTECHNODYNE  T EH1 K - N OW0 - D AY2 N\nTECHNOLOGIC  T EH2 K - N AH0 - L AA1 - JH IH0 K\nTECHNOLOGICAL  T EH2 K - N AH0 - L AA1 - JH IH0 - K AH0 L\nTECHNOLOGICALLY  T EH2 K - N AH0 - L AA1 - JH IH0 - K AH0 - L IY0\nTECHNOLOGICALLY(2)  T EH2 K - N AH0 - L AA1 - JH IH0 K - L IY0\nTECHNOLOGIES  T EH0 K - N AA1 - L AH0 - JH IY0 Z\nTECHNOLOGIES'  T EH2 K - N AA1 - L AH0 - JH IY0 Z\nTECHNOLOGIST  T EH2 K - N AA1 - L AH0 - JH IH0 S T\nTECHNOLOGISTS  T EH2 K - N AA1 - L AH0 - JH IH0 S T S\nTECHNOLOGISTS(2)  T EH2 K - N AA1 - L AH0 - JH IH0 S S\nTECHNOLOGISTS(3)  T EH2 K - N AA1 - L AH0 - JH IH0 S\nTECHNOLOGY  T EH0 K - N AA1 - L AH0 - JH IY0\nTECHNOLOGY'S  T EH0 K - N AA1 - L AH0 - JH IY0 Z\nTECHNOMIC  T EH2 K - N AA1 - M IH0 K\nTECHNOPHOBE  T EH1 K - N OW0 - F OW2 B\nTECHNOPHOBE'S  T EH1 K - N OW0 - F OW2 B Z\nTECHNOPHOBES  T EH1 K - N OW0 - F OW2 B Z\nTECHS  T EH1 K S\nTECHSYSTEM  T EH1 K - S IH2 - S T AH0 M\nTECHSYSTEMS  T EH1 K - S IH2 - S T AH0 M Z\nTECHY  T EH1 - CH IY0\nTECK  T EH1 K\nTECK'S  T EH1 K S\nTECLA  T EH1 K - L AH0\nTECO  T IY1 - K OW0\nTECOGEN  T EH1 - K OW0 - G AH0 N\nTECOGEN(2)  T EH1 - K OW0 - JH EH0 N\nTECOS  T IY1 - K OW0 S\nTECTONIC  T EH0 K - T AA1 - N IH0 K\nTECTONICS  T EH0 K - T AA1 - N IH0 K S\nTECUMSEH  T AH0 - K AH1 M - S AH0\nTED  T EH1 D\nTED'S  T EH1 D Z\nTEDDER  T EH1 - D ER0\nTEDDIE  T EH1 - D IY0\nTEDDY  T EH1 - D IY0\nTEDDY'S  T EH1 - D IY0 Z\nTEDESCHI  T EH0 - D EH1 S - K IY0\nTEDESCO  T EH0 - D EH1 - S K OW0\nTEDFORD  T EH1 D - F ER0 D\nTEDIOUS  T IY1 - D IY0 - AH0 S\nTEDIOUSLY  T IY1 - D IY0 - AH0 S - L IY0\nTEDIUM  T IY1 - D IY0 - AH0 M\nTEDMAN  T EH1 D - M AH0 N\nTEDMOND  T EH1 D - M AH0 N D\nTEDMUND  T EH1 D - M AH0 N D\nTEDRICK  T EH1 - D R IH0 K\nTEDROW  T EH1 - D R OW2\nTEE  T IY1\nTEED  T IY1 D\nTEEGARDEN  T IY1 - G AA2 R - D AH0 N\nTEEGARDIN  T IY0 - G AA1 R - D IH0 N\nTEEHAN  T IY1 - AH0 N\nTEEING  T IY1 - IH0 NG\nTEEL  T IY1 L\nTEELE  T IY1 L\nTEELEY  T IY1 - L IY0\nTEELING  T IY1 - L IH0 NG\nTEEM  T IY1 M\nTEEMING  T IY1 - M IH0 NG\nTEEMS  T IY1 M Z\nTEEN  T IY1 N\nTEENA  T IY1 - N AH0\nTEENAGE  T IY1 - N EY2 JH\nTEENAGED  T IY1 N - EY2 JH D\nTEENAGER  T IY1 N - EY2 - JH ER0\nTEENAGER'S  T IY1 N - EY2 - JH ER0 Z\nTEENAGERS  T IY1 N - EY2 - JH ER0 Z\nTEENIE  T IY1 - N IY0\nTEENS  T IY1 N Z\nTEENSY  T IY1 N - S IY0\nTEENY  T IY1 - N IY0\nTEEPLE  T IY1 - P AH0 L\nTEEPLES  T IY1 - P AH0 L Z\nTEER  T IH1 R\nTEES  T IY1 Z\nTEET  T IY1 T\nTEETER  T IY1 - T ER0\nTEETER'S  T IY1 - T ER0 Z\nTEETERED  T IY1 - T ER0 D\nTEETERING  T IY1 - T ER0 - IH0 NG\nTEETERS  T IY1 - T ER0 Z\nTEETH  T IY1 TH\nTEETHE  T IY1 DH\nTEETHING  T IY1 - DH IH0 NG\nTEETS  T IY1 T S\nTEFFETELLER  T EH1 - F IH0 - T EH2 - L ER0\nTEFFT  T EH1 F T\nTEFLON  T EH1 - F L AH0 N\nTEFRA  T EH1 - F R AH0\nTEGELER  T EH1 - G AH0 - L ER0\nTEGETHOFF  T EH1 - G IH0 - T AO2 F\nTEGGE  T EH1 G\nTEGTMEIER  T EH1 T - M AY0 - ER0\nTEGTMEYER  T EH1 T - M AY0 - ER0\nTEGUCIGALPA  T EH0 - G UW0 - S IY0 - G AE1 L - P AH0\nTEGUCIGALPA(2)  T EH0 - G UW0 - CH IY0 - G AA1 L - P AH0\nTEHAN  T EY1 - AH0 N\nTEHERAN  T EH2 - HH ER0 - AA1 N\nTEHERAN'S  T EH2 - HH ER0 - AA1 N Z\nTEHERANI  T EH2 - HH ER0 - AA1 - N IY0\nTEHERANI'S  T EH2 - HH ER0 - AA1 - N IY0 Z\nTEHERANIS  T EH2 - HH ER0 - AA1 - N IY0 Z\nTEHERANS  T EH2 - HH ER0 - AA1 N Z\nTEHRAN  T EY2 - R AA1 N\nTEHRAN'S  T EY2 - R AA1 N Z\nTEHRANI  T EY2 - R AA1 - N IY0\nTEHRANI'S  T EY2 - R AA1 - N IY0 Z\nTEHRANIS  T EY2 - R AA1 - N IY0 Z\nTEHRANS  T EY2 - R AA1 N Z\nTEICH  T AY1 K\nTEICHER  T AY1 - K ER0\nTEICHERT  T AY1 - K ER0 T\nTEICHMAN  T AY1 K - M AH0 N\nTEICHMANN  T AY1 K - M AH0 N\nTEICHOLZ  T AY1 K - HH AO2 L T S\nTEIG  T IY1 G\nTEIGE  T AY1 JH\nTEIGEN  T AY1 - G AH0 N\nTEIKOKU  T EY2 - K OW1 - K UW2\nTEITEL  T AY1 - T AH0 L\nTEITELBAUM  T AY1 - T AH0 L - B AW0 M\nTEITELL  T AY1 - T EH2 L\nTEIXEIRA  T AH0 K - S EH1 - R AH0\nTEJADA  T EY0 - Y AA1 - D AH0\nTEJANO  T EY0 - Y AA1 - N OW0\nTEJAS  T IY1 - JH AH0 S\nTEJEDA  T EY0 - Y EY1 - D AH0\nTEJERA  T EY0 - IH1 - R AH0\nTEJON  T EH1 - JH AA0 N\nTEK  T EH1 K\nTEKNOWLEDGE  T EH2 K - N AA1 - L EH0 JH\nTEKTRONIX  T EH2 K - T R AA1 - N IH0 K S\nTEL  T EH1 L\nTEL-AVIV  T EH1 - L AA0 - V IY1 V\nTELACTION  T EH0 - L AE1 K - SH AH0 N\nTELAMON  T EH1 - L AH0 - M AH0 N\nTELANDER  T IY1 - L AE0 N - D ER0\nTELANDER(2)  T IH0 - L AE1 N - D ER0\nTELCO  T EH1 L - K OW0\nTELE  T EH1 - L IY0\nTELE(2)  T EH1 - L AH0\nTELECABLE  T EH1 - L AH0 - K EY2 - B AH0 L\nTELECARD  T EH1 - L AH0 - K AA2 R D\nTELECAST  T EH1 - L AH0 - K AE2 S T\nTELECASTS  T EH1 - L AH0 - K AE2 S T S\nTELECASTS(2)  T EH1 - L AH0 - K AE2 S S\nTELECASTS(3)  T EH1 - L AH0 - K AE2 S\nTELECHARGE  T EH1 - L AH0 - CH AA1 R JH\nTELECHECK  T EH1 - L AH0 - CH EH2 K\nTELECOM  T EH1 - L AH0 - K AA0 M\nTELECOM'S  T EH1 - L AH0 - K AA0 M Z\nTELECOMMUNICATION  T EH2 - L AH0 - K AH0 - M Y UW2 - N IH0 - K EY1 - SH AH0 N\nTELECOMMUNICATIONS  T EH2 - L AH0 - K AH0 - M Y UW2 - N AH0 - K EY1 - SH AH0 N Z\nTELECOMMUNICATIONS'  T EH2 - L AH0 - K AH0 - M Y UW2 - N AH0 - K EY1 - SH AH0 N Z\nTELECOMMUTE  T EH1 - L AH0 - K AH0 - M Y UW2 T\nTELECOMMUTER  T EH1 - L AH0 - K AH0 - M Y UW2 - T ER0\nTELECOMMUTER'S  T EH1 - L AH0 - K AH0 - M Y UW2 - T ER0 Z\nTELECOMMUTERS  T EH1 - L AH0 - K AH0 - M Y UW2 - T ER0 Z\nTELECOMMUTING  T EH0 - L AH0 - K AH0 - M Y UW1 - T IH0 NG\nTELECOMS  T EH1 - L AH0 - K AA0 M Z\nTELECONFERENCE  T EH0 - L AH0 - K AA1 N - F R AH0 N S\nTELECONFERENCING  T EH2 - L AH0 - K AA1 N - F R AH0 N - S IH0 NG\nTELECONNECT  T EH0 - L AH0 - K AH0 - N EH1 K T\nTELECRAFTER  T EH1 - L AH0 - K R AE2 F - T ER0\nTELECREDIT  T EH1 - L AH0 - K R EH2 - D IH0 T\nTELECTRON  T EH1 - L AH0 K - T R AA0 N\nTELECTRONIC  T EH2 - L AH0 K - T R AA1 - N IH0 K\nTELECTRONICS  T EH2 - L AH0 K - T R AA1 - N IH0 K S\nTELEDESIC  T EH2 - L AH0 - D EH1 - S IH0 K\nTELEDYNE  T EH1 - L AH0 - D AY2 N\nTELEDYNE'S  T EH1 - L AH0 - D AY2 N Z\nTELEFLEX  T EH1 - L AH0 - F L EH2 K S\nTELEFON  T EH1 - L AH0 - F AA2 N\nTELEFONICA  T EH2 - L AH0 - F AA1 - N IH0 - K AH0\nTELEFONOS  T EH2 - L EH0 - F OW1 - N OW0 S\nTELEFUNKEN  T EH2 - L AH0 - F AH1 NG - K AH0 N\nTELEGENIC  T EH2 - L AH0 - JH EH1 - N IH0 K\nTELEGLOBE  T EH1 - L AH0 - G L OW2 B\nTELEGRAM  T EH1 - L AH0 - G R AE2 M\nTELEGRAMS  T EH1 - L AH0 - G R AE2 M Z\nTELEGRAPH  T EH1 - L AH0 - G R AE2 F\nTELEGRAPH'S  T EH1 - L AH0 - G R AE2 F S\nTELEGRAPHED  T EH1 - L AH0 - G R AE2 F T\nTELEKOM  T EH1 - L AH0 - K AA0 M\nTELEKOM'S  T EH1 - L AH0 - K AA0 M Z\nTELEMACHO  T EH1 - L AH0 - M AA2 - CH OW0\nTELEMANAGEMENT  T EH1 - L AH0 - M AE2 - N IH0 JH - M AH0 N T\nTELEMARKET  T EH2 - L AH0 - M AA1 R - K IH0 T\nTELEMARKETER  T EH2 - L AH0 - M AA1 R - K IH0 - T ER0\nTELEMARKETERS  T EH2 - L AH0 - M AA1 R - K IH0 - T ER0 Z\nTELEMARKETING  T EH2 - L AH0 - M AA1 R - K AH0 - T IH0 NG\nTELEMATIC  T EH2 - L AH0 - M AE1 - T IH0 K\nTELEMATICS  T EH2 - L AH0 - M AE1 - T IH0 K S\nTELEMECANIQUE  T EH2 - L AH0 - M AH0 - K AE1 - N IH0 K\nTELEMEDIA  T EH2 - L AH0 - M IY1 - D IY0 - AH0\nTELEMEDICINE  T EH2 - L IH0 - M EH1 - D IH0 - S AH0 N\nTELEMETRY  T AH0 - L EH1 - M AH0 - T R IY0\nTELEMUNDO  T EH2 - L AH0 - M UW1 N - D OW0\nTELENET  T EH1 - L AH0 - N EH2 T\nTELEOLOGICAL  T IY2 - L IY0 - AH0 - L AO1 - JH IH0 - K AH0 L\nTELEPATHIC  T EH2 - L AH0 - P AE1 - TH AH0 K\nTELEPATHY  T AH0 - L EH1 - P AH0 - TH IY0\nTELEPHONE  T EH1 - L AH0 - F OW2 N\nTELEPHONE'S  T EH1 - L AH0 - F OW2 N Z\nTELEPHONED  T EH1 - L AH0 - F OW2 N D\nTELEPHONES  T EH1 - L AH0 - F OW2 N Z\nTELEPHONIC  T EH2 - L AH0 - F AA1 - N IH0 K\nTELEPHONICS  T EH2 - L AH0 - F AA1 - N IH0 K S\nTELEPHONING  T EH1 - L AH0 - F OW2 - N IH0 NG\nTELEPHONIQUES  T EH2 - L AH0 - F AA0 - N IY1 K S\nTELEPHONY  T EH1 - L AH0 - F OW2 - N IY0\nTELEPHOTO  T EH1 - L AH0 - F OW2 - T OW0\nTELEPICTURE  T EH1 - L AH0 - P IH1 K - CH ER0\nTELEPICTURES  T EH1 - L AH0 - P IH1 K - CH ER0 Z\nTELEPORT  T EH1 - L AH0 - P AO1 R T\nTELEPORT'S  T EH1 - L AH0 - P AO1 R T S\nTELEPROBE  T EH1 - L AH0 - P R OW1 B\nTELEPROMPTER  T EH1 - L AH0 - P R AA2 M P - T ER0\nTELEQUEST  T EH1 - L AH0 - K W EH1 S T\nTELERATE  T EH1 - L ER0 - EY1 T\nTELESAT  T EH1 - L AH0 - S AE0 T\nTELESCIENCE  T EH1 - L AH0 - S AY2 - AH0 N S\nTELESCIENCES  T EH1 - L AH0 - S AY2 - AH0 N - S IH0 Z\nTELESCO  T EH0 - L EH1 - S K OW0\nTELESCOPE  T EH1 - L AH0 - S K OW2 P\nTELESCOPE'S  T EH1 - L AH0 - S K OW2 P S\nTELESCOPES  T EH1 - L AH0 - S K OW2 P S\nTELESCOPIC  T EH2 - L AH0 - S K AO1 - P IH0 K\nTELESCRIPT  T EH1 - L AH0 - S K R IH2 P T\nTELESIS  T EH1 - L AH0 - S IH0 S\nTELESIS'  T EH1 - L AH0 - S IH2 S\nTELESIS'S  T EH1 - L AH0 - S IH0 - S IH0 Z\nTELESPHERE  T EH1 - L AH0 - S F IH2 R\nTELESTRATOR  T EH1 - L AH0 - S T R EY2 - T ER0\nTELESYSTEM  T EH1 - L AH0 - S IH2 - S T AH0 M\nTELETEXT  T EH1 - L AH0 - T EH1 K S T\nTELETHON  T EH1 - L AH0 - TH AA0 N\nTELETRON  T EH1 - L AH0 - T R AA2 N\nTELETTRA  T EH1 - L EH0 - T R AH0\nTELETYPE  T EH1 - L AH0 - T AY2 P\nTELETYPES  T EH1 - L AH0 - T AY2 P S\nTELEVANGELIST  T EH2 - L AH0 - V AE1 N - JH AH0 - L AH0 S T\nTELEVANGELISTS  T EH2 - L AH0 - V AE1 N - JH AH0 - L AH0 S T S\nTELEVANGELISTS(2)  T EH2 - L AH0 - V AE1 N - JH AH0 - L AH0 S S\nTELEVANGELISTS(3)  T EH2 - L AH0 - V AE1 N - JH AH0 - L AH0 S\nTELEVIDEO  T EH2 - L AH0 - V IH1 - D IY0 - OW0\nTELEVISA  T EH1 - L AH0 - V IY1 - Z AH0\nTELEVISA'S  T EH2 - L AH0 - V IY1 - Z AH0 Z\nTELEVISE  T EH1 - L AH0 - V AY2 Z\nTELEVISED  T EH1 - L AH0 - V AY2 Z D\nTELEVISING  T EH1 - L AH0 - V AY2 - Z IH0 NG\nTELEVISION  T EH1 - L AH0 - V IH2 - ZH AH0 N\nTELEVISION'S  T EH1 - L AH0 - V IH2 - ZH AH0 N Z\nTELEVISIONS  T EH1 - L AH0 - V IH2 - ZH AH0 N Z\nTELEVISON  T EH1 - L IH0 - V IH0 - ZH AH0 N\nTELEWEST  T EH1 - L AH0 - W EH1 S T\nTELEX  T EH1 - L EH2 K S\nTELEX'S  T EH1 - L EH2 K - S IH0 Z\nTELEXED  T EH1 - L EH2 S K T\nTELEXES  T EH1 - L EH2 K - S IH0 S\nTELFAIR  T EH1 L - F AY0 R\nTELFER  T EH1 L - F ER0\nTELFOR  T EH1 L - F ER0\nTELFORD  T EH1 L - F ER0 D\nTELFOUR  T EH1 L - F ER0\nTELIT  T EH1 - L IH2 T\nTELL  T EH1 L\nTELLABS  T EH1 - L AE2 B Z\nTELLEFSEN  T EH1 - L IH0 F - S AH0 N\nTELLEP  T EH1 - L AH0 P\nTELLER  T EH1 - L ER0\nTELLER'S  T EH1 - L ER0 Z\nTELLERS  T EH1 - L ER0 Z\nTELLES  T EH1 L Z\nTELLEZ  T EY0 - L EH1 Z\nTELLIER  T EH1 - L IY0 - ER0\nTELLIN'  T EH1 - L IH0 N\nTELLING  T EH1 - L IH0 NG\nTELLINGLY  T EH1 - L IH0 NG - L IY0\nTELLIS  T EH1 - L IH0 S\nTELLO  T EH1 - L OW0\nTELLS  T EH1 L Z\nTELLTALE  T EH1 L - T EY2 L\nTELLTALES  T EH1 L - T EY2 L Z\nTELLURIDE  T EH1 - L Y ER0 - AY2 D\nTELLURIDES  T EH1 L - Y ER0 - AY2 D Z\nTELLURIUM  T EH0 - L UH1 - R IY0 - AH0 M\nTELLY  T EH1 - L IY0\nTELMEX  T EH1 L - M EH2 K S\nTELMEX'S  T EH1 L - M EH2 K - S IH0 Z\nTELOS  T EH1 - L OW0 S\nTELSOURCE  T EH1 L - S AO2 R S\nTELSTAR  T EH1 L - S T AA2 R\nTELSTRA  T EH1 L - S T R AH0\nTELTSCHIK  T EH1 L - CH IH0 K\nTELUGU  T EH1 - L UH0 - G UW0\nTELXON  T EH1 L - Z AA0 N\nTELXON'S  T EH1 L - Z AH0 N Z\nTELZROW  T EH1 L - Z R OW0\nTEMBLOR  T EH1 M - B L ER0\nTEMBLORS  T EH1 M - B L ER0 Z\nTEMCO  T EH1 M - K OW0\nTEMECULA  T AH0 - M EH1 - K Y AH0 - L AH0\nTEMERITY  T AH0 - M EH1 - R AH0 - T IY0\nTEMERLIN  T EH1 - M ER0 - L IH0 N\nTEMKIN  T EH1 M - K IH0 N\nTEMME  T EH1 M\nTEMP  T EH1 M P\nTEMPE  T EH1 M - P IY0\nTEMPEL  T EH1 M - P AH0 L\nTEMPELSMAN  T EH1 M - P AH0 L Z - M AH0 N\nTEMPER  T EH1 M - P ER0\nTEMPERA  T EH1 M - P ER0 - AH0\nTEMPERAMENT  T EH1 M - P R AH0 - M AH0 N T\nTEMPERAMENT(2)  T EH1 M - P ER0 - M AH0 N T\nTEMPERAMENTAL  T EH2 M - P R AH0 - M EH1 N - T AH0 L\nTEMPERAMENTAL(2)  T EH2 M - P ER0 - M EH1 N - T AH0 L\nTEMPERAMENTALLY  T EH2 M - P R AH0 - M EH1 N - T AH0 - L IY0\nTEMPERAMENTALLY(2)  T EH2 M - P ER0 - M EH1 N - T AH0 - L IY0\nTEMPERAMENTALLY(3)  T EH2 M - P R AH0 - M EH1 - N AH0 - L IY0\nTEMPERAMENTALLY(4)  T EH2 M - P ER0 - M EH1 - N AH0 - L IY0\nTEMPERAMENTS  T EH1 M - P R AH0 - M AH0 N T S\nTEMPERAMENTS(2)  T EH1 M - P ER0 - M AH0 N T S\nTEMPERANCE  T EH1 M - P ER0 - AH0 N S\nTEMPERANCE(2)  T EH1 M - P R AH0 N S\nTEMPERATE  T EH1 M - P R AH0 T\nTEMPERATE(2)  T EH1 M - P ER0 - AH0 T\nTEMPERATURE  T EH1 M - P R AH0 - CH ER0\nTEMPERATURE(2)  T EH1 M - P ER0 - AH0 - CH ER0\nTEMPERATURES  T EH1 M - P R AH0 - CH ER0 Z\nTEMPERATURES(2)  T EH1 M - P ER0 - AH0 - CH ER0 Z\nTEMPERED  T EH1 M - P ER0 D\nTEMPERING  T EH1 M - P ER0 - IH0 NG\nTEMPERS  T EH1 M - P ER0 Z\nTEMPEST  T EH1 M - P AH0 S T\nTEMPESTA  T EH2 M - P EH1 - S T AH0\nTEMPESTUOUS  T EH2 M - P EH1 S - CH UW0 - AH0 S\nTEMPLAR  T EH1 M - P L ER0\nTEMPLARS  T EH1 M - P L ER0 Z\nTEMPLATE  T EH1 M - P L AH0 T\nTEMPLATE(2)  T EH1 M - P L EY0 T\nTEMPLE  T EH1 M - P AH0 L\nTEMPLE'S  T EH1 M - P AH0 L Z\nTEMPLEMAN  T EH1 M - P AH0 L - M AH0 N\nTEMPLER  T EH1 M - P AH0 - L ER0\nTEMPLER(2)  T EH1 M - P L ER0\nTEMPLES  T EH1 M - P AH0 L Z\nTEMPLET  T EH1 M - P L IH0 T\nTEMPLETON  T EH1 M - P AH0 L - T AH0 N\nTEMPLETON'S  T EH1 M - P AH0 L - T AH0 N Z\nTEMPLIN  T EH1 M - P L IH0 N\nTEMPO  T EH1 M - P OW2\nTEMPORAL  T EH1 M - P ER0 - AH0 L\nTEMPORALLY  T EH1 M - P ER0 - AH0 - L IY0\nTEMPORARIES  T EH1 M - P ER0 - EH2 - R IY0 Z\nTEMPORARILY  T EH2 M - P ER0 - EH1 - R AH0 - L IY0\nTEMPORARY  T EH1 M - P ER0 - EH2 - R IY0\nTEMPORE  T EH1 M - P AO0 R\nTEMPORE(2)  T EH2 M - P AO1 - R IY0\nTEMPORIZE  T EH1 M - P ER0 - AY2 Z\nTEMPORIZING  T EH1 M - P ER0 - AY2 - Z IH0 NG\nTEMPOS  T EH1 M - P OW2 Z\nTEMPS  T EH1 M P S\nTEMPT  T EH1 M P T\nTEMPTATION  T EH0 M - T EY1 - SH AH0 N\nTEMPTATIONS  T EH0 M - T EY1 - SH AH0 N Z\nTEMPTED  T EH1 M P - T AH0 D\nTEMPTED(2)  T EH1 M P - T IH0 D\nTEMPTING  T EH1 M P - T IH0 NG\nTEMPTRESS  T EH1 M P - T R IH0 S\nTEMPTS  T EH1 M P T S\nTEN  T EH1 N\nTEN'S  T EH1 N Z\nTENA  T EH1 - N AH0\nTENABLE  T EH1 - N AH0 - B AH0 L\nTENACIOUS  T AH0 - N EY1 - SH AH0 S\nTENACIOUSLY  T AH0 - N EY1 - SH AH0 S - L IY0\nTENACITY  T AH0 - N AE1 - S IH0 - T IY0\nTENAGLIA  T EH0 - N AA1 - G L IY0 - AH0\nTENANCY  T EH1 - N AH0 N - S IY0\nTENANT  T EH1 - N AH0 N T\nTENANT'S  T EH1 - N AH0 N T S\nTENANTS  T EH1 - N AH0 N T S\nTENANTS'  T EH1 - N AH0 N T S\nTENBRINK  T EH1 N - B R IH2 NG K\nTENCH  T EH1 N CH\nTENCZA  T EH1 N - CH AH0\nTEND  T EH1 N D\nTENDED  T EH1 N - D AH0 D\nTENDED(2)  T EH1 N - D IH0 D\nTENDENCIES  T EH1 N - D AH0 N - S IY0 Z\nTENDENCY  T EH1 N - D AH0 N - S IY0\nTENDENTIOUS  T EH2 N - D EH1 N - SH AH0 S\nTENDER  T EH1 N - D ER0\nTENDERED  T EH1 N - D ER0 D\nTENDERING  T EH1 N - D ER0 - IH0 NG\nTENDERLOIN  T EH1 N - D ER0 - L OY2 N\nTENDERLY  T EH1 N - D ER0 - L IY0\nTENDERNESS  T EH1 N - D ER0 - N AH0 S\nTENDERS  T EH1 N - D ER0 Z\nTENDING  T EH1 N - D IH0 NG\nTENDLER  T EH1 N D - L ER0\nTENDON  T EH1 N - D AH0 N\nTENDONS  T EH1 N - D AH0 N Z\nTENDS  T EH1 N D Z\nTENEMENT  T EH1 - N AH0 - M AH0 N T\nTENEMENTS  T EH1 - N AH0 - M AH0 N T S\nTENENBAUM  T EH1 - N AH0 N - B AW2 M\nTENER  T EH1 - N ER0\nTENERA  T EH2 - N EH1 - R AH0\nTENET  T EH1 - N AH0 T\nTENETS  T EH1 - N AH0 T S\nTENEYCK  T EH1 - N IY0 K\nTENFOLD  T EH1 N - F OW2 L D\nTENG  T EH1 NG\nTENG-WEN  T EH1 NG - W EH1 N\nTENGELMANN  T EH1 NG - G AH0 L - M AH0 N\nTENGIZ  T EH1 NG - G IH0 Z\nTENGLEMANN  T EH1 NG - G AH0 L - M AH0 N\nTENN  T EH2 - N AH0 - S IY1\nTENN(2)  T EH1 N\nTENNANT  T EH1 - N AH0 N T\nTENNCARE  T EH1 N - K EH2 R\nTENNCARE'S  T EH1 N - K EH2 R Z\nTENNECO  T EH1 - N AH0 - K OW0\nTENNECO'S  T EH1 - N AH0 - K OW0 Z\nTENNELL  T EH1 - N AH0 L\nTENNENBAUM  T EH1 - N AH0 N - B AW2 M\nTENNENT  T EH1 - N AH0 N T\nTENNER  T EH1 - N ER0\nTENNESSEAN  T EH2 - N IH0 - S IY1 - AH0 N\nTENNESSEANS  T EH2 - N IH0 - S IY1 - AH0 N Z\nTENNESSEE  T EH2 - N AH0 - S IY1\nTENNESSEE'S  T EH2 - N AH0 - S IY1 Z\nTENNEY  T EH1 - N IY0\nTENNIS  T EH1 - N AH0 S\nTENNIS'S  T EH1 - N AH0 - S IH0 Z\nTENNIS(2)  T EH1 - N IH0 S\nTENNISON  T EH1 - N IH0 - S AH0 N\nTENNY  T EH1 - N IY0\nTENNYSON  T EH1 - N IH0 - S AH0 N\nTENOR  T EH1 - N ER0\nTENORE  T EH1 - N AO2 R\nTENORIO  T EH0 - N AO1 - R IY0 - OW0\nTENORS  T EH1 - N ER0 Z\nTENPAS  T EH1 N - P AH0 Z\nTENPENNY  T EH1 N - P EH2 - N IY0\nTENRECS  T EH1 N - R EH2 K S\nTENS  T EH1 N Z\nTENSE  T EH1 N S\nTENSELY  T EH1 N S - L IY0\nTENSILE  T EH1 N - S AH0 L\nTENSIOMETER  T EH2 N - S IY0 - AA1 - M IH0 - T ER0\nTENSION  T EH1 N - SH AH0 N\nTENSIONS  T EH1 N - CH AH0 N Z\nTENT  T EH1 N T\nTENTACLE  T EH1 N - T AH0 - K AH0 L\nTENTACLES  T EH1 N - T AH0 - K AH0 L Z\nTENTATIVE  T EH1 N - T AH0 - T IH0 V\nTENTATIVE(2)  T EH1 - N AH0 - T IH0 V\nTENTATIVELY  T EH1 N - T AH0 - T IH0 V - L IY0\nTENTATIVELY(2)  T EH1 N - T AH0 V - L IY0\nTENTH  T EH1 N TH\nTENTHS  T EH1 N TH S\nTENTING  T EH1 N - T IH0 NG\nTENTS  T EH1 N T S\nTENUOUS  T EH1 - N Y AH0 W - AH0 S\nTENURE  T EH1 - N Y ER0\nTENURED  T EH1 - N Y ER0 D\nTENURES  T EH1 - N Y ER0 Z\nTENUTA  T EH0 - N UW1 - T AH0\nTENZER  T EH1 N - Z ER0\nTEO  T EY1 - OW0\nTEODORO  T IY2 - OW0 - D AO1 - R OW0\nTEPE  T IY1 P\nTEPER  T IY1 - P ER0\nTEPID  T EH1 - P IH0 D\nTEPLY  T EH1 P - L IY0\nTEPOZTLAN  T IH0 - P AO1 S T - L AH0 N\nTEPPER  T EH1 - P ER0\nTEPPERMAN  T EH1 - P ER0 - M AH0 N\nTEQUILA  T AH0 - K IY1 - L AH0\nTEQUILIU  T AH0 - K IY1 - L Y UW0\nTER  T ER1\nTERADA  T ER0 - AA1 - D AH0\nTERADATA  T EH2 - R AH0 - D AA1 - T AH0\nTERADYNE  T EH1 - R AH0 - D AY2 N\nTERADYNE'S  T EH1 - R AH0 - D AY2 N Z\nTERAN  T EH1 - R AH0 N\nTERASAWA  T EH2 - R AH0 - S AA1 - W AH0\nTERBUSH  T ER1 - B AH0 SH\nTERBUSH(2)  T ER1 - B UH0 SH\nTERCEL  T ER1 - S AH0 L\nTERCERO  T ER0 - CH EH1 - R OW0\nTERENCE  T EH1 - R AH0 N S\nTERENCE'S  T EH1 - R AH0 N - S IH0 Z\nTERENTIA  T ER0 - EH1 N - SH AH0\nTERESA  T ER0 - IY1 - S AH0\nTERESA'S  T ER0 - IY1 - S AH0 Z\nTERESA'S(2)  T ER0 - EY1 - S AH0 Z\nTERESA(2)  T ER0 - EY1 - S AH0\nTERESE  T EH1 - R IY0 Z\nTERESI  T ER0 - EH1 - S IY0\nTERESITA  T ER0 - EH0 - S IY1 - T AH0\nTERESSA  T ER0 - EH1 - S AH0\nTEREX  T EH1 - R AH0 K S\nTEREZA  T ER0 - EY1 - Z AH0\nTEREZA'S  T ER0 - EY1 - Z AH0 Z\nTERHAAR  T ER1 - HH AA0 R\nTERHORST  T ER1 - HH AO0 R S T\nTERHUNE  T ER0 - HH Y UW1 N\nTERI  T EH1 - R IY0\nTERIYAKI  T EH2 - R IH0 - Y AA1 - K IY0\nTERKEL  T ER1 - K AH0 L\nTERKHORN  T ER1 - K AO2 R N\nTERLECKI  T ER0 - L EH1 T S - K IY0\nTERLIZZI  T ER0 - L IY1 T - S IY0\nTERM  T ER1 M\nTERM'S  T ER1 M Z\nTERMAN  T ER1 - M AH0 N\nTERMED  T ER1 M D\nTERMEER  T ER0 - M IH1 R\nTERMER  T ER1 - M ER0\nTERMERS  T ER1 - M ER0 Z\nTERMINAL  T ER1 - M AH0 - N AH0 L\nTERMINALLY  T ER1 - M AH0 - N AH0 - L IY0\nTERMINALS  T ER1 - M AH0 - N AH0 L Z\nTERMINATE  T ER1 - M AH0 - N EY2 T\nTERMINATED  T ER1 - M AH0 - N EY2 - T AH0 D\nTERMINATED(2)  T ER1 - M AH0 - N EY2 - T IH0 D\nTERMINATES  T ER1 - M IH0 - N EY2 T S\nTERMINATING  T ER1 - M AH0 - N EY2 - T IH0 NG\nTERMINATION  T ER0 - M AH0 - N EY1 - SH AH0 N\nTERMINATIONS  T ER2 - M AH0 - N EY1 - SH AH0 N Z\nTERMINATOR  T ER1 - M AH0 - N EY2 - T ER0\nTERMINE  T ER1 - M IH0 N\nTERMING  T ER1 - M IH0 NG\nTERMINI  T ER1 - M IH0 - N AY2\nTERMINOLOGY  T ER2 - M IH0 - N AA1 - L AH0 - JH IY0\nTERMITE  T ER1 - M AY0 T\nTERMITES  T ER1 - M AY0 T S\nTERMS  T ER1 M Z\nTERNES  T ER1 N Z\nTERNS  T ER1 N Z\nTERPENING  T ER1 - P AH0 - N IH0 NG\nTERPSTRA  T EH1 R P - S T R AH0\nTERRA  T EH1 - R AH0\nTERRA'S  T EH1 - R AH0 Z\nTERRACCIANO  T ER0 - AA0 - CH IY0 - AA1 - N OW0\nTERRACE  T EH1 - R AH0 S\nTERRACED  T EH1 - R AH0 S T\nTERRACES  T EH1 - R AH0 - S AH0 Z\nTERRACES(2)  T EH1 - R AH0 - S IH0 Z\nTERRAIN  T ER0 - EY1 N\nTERRAINS  T ER0 - EY1 N Z\nTERRAL  T EH1 - R AH0 L\nTERRANA  T ER0 - AE1 - N AH0\nTERRANCE  T EH1 - R AH0 N S\nTERRANO  T ER0 - AA1 - N OW0\nTERRANOVA  T ER0 - AA0 - N OW1 - V AH0\nTERRASI  T ER0 - AA1 - S IY0\nTERRAZAS  T EH0 - R AA1 - Z AA0 Z\nTERRE  T EH1 - R AH0\nTERRE(2)  T EH1 R\nTERRE-HAUTE  T EH1 - R AH0 - HH OW1 T\nTERRE-HAUTE(2)  T EH1 - R AH0 - HH AH1 T\nTERREBONNE  T ER0 - EH0 - B OW1 - N IY0\nTERREBONNE(2)  T ER0 - AH0 - B AH1 N\nTERREL  T EH1 - R AH0 L\nTERRELL  T EH1 - R AH0 L\nTERRENCE  T EH1 - R AH0 N S\nTERRESTRIAL  T ER0 - EH1 S - T R IY0 - AH0 L\nTERRI  T EH1 - R IY0\nTERRIBLE  T EH1 - R AH0 - B AH0 L\nTERRIBLY  T EH1 - R AH0 - B L IY0\nTERRIE  T EH1 - R IY0\nTERRIEN  T EH1 - R IY0 - AH0 N\nTERRIER  T EH1 - R IY0 - ER0\nTERRIERS  T EH1 - R IY0 - ER0 Z\nTERRIFIC  T ER0 - IH1 - F IH0 K\nTERRIFICALLY  T ER0 - IH1 - F IH0 K - L IY0\nTERRIFIED  T EH1 - R AH0 - F AY2 D\nTERRIFIES  T EH1 - R AH0 - F AY2 Z\nTERRIFY  T EH1 - R AH0 - F AY2\nTERRIFYING  T EH1 - R AH0 - F AY2 - IH0 NG\nTERRILE  T EH2 - R IY1 L\nTERRILL  T EH1 - R AH0 L\nTERRINGTON  T EH1 - R IH0 NG - T AH0 N\nTERRIO  T EH1 - R IY0 - OW0\nTERRIS  T EH1 - R IH0 S\nTERRITO  T ER0 - IY1 - T OW0\nTERRITORIAL  T EH2 - R IH0 - T AO1 - R IY0 - AH0 L\nTERRITORIALISM  T EH2 - R AH0 - T AO1 - R IY0 - AH0 - L IH2 - Z AH0 M\nTERRITORIALLY  T EH2 - R IH0 - T AO1 - R IY0 - AH0 - L IY0\nTERRITORIES  T EH1 - R AH0 - T AO2 - R IY0 Z\nTERRITORY  T EH1 - R IH0 - T AO2 - R IY0\nTERRITORY'S  T EH1 - R IH0 - T AO2 - R IY0 Z\nTERRIZZI  T EH2 - R IH1 T - S IY0\nTERRONES  T EH1 - R AH0 N Z\nTERROR  T EH1 - R ER0\nTERRORISM  T EH1 - R ER0 - IH2 - Z AH0 M\nTERRORIST  T EH1 - R ER0 - IH0 S T\nTERRORISTIC  T EH2 - R ER0 - IH1 - S T IH0 K\nTERRORISTS  T EH1 - R ER0 - AH0 S T S\nTERRORISTS'  T EH1 - R ER0 - IH0 S T S\nTERRORISTS'(2)  T EH1 - R ER0 - IH0 S S\nTERRORISTS'(3)  T EH1 - R ER0 - IH0 S\nTERRORISTS(2)  T EH1 - R ER0 - IH0 S T S\nTERRORISTS(3)  T EH1 - R ER0 - IH0 S S\nTERRORISTS(4)  T EH1 - R ER0 - IH0 S\nTERRORIZE  T EH1 - R ER0 - AY2 Z\nTERRORIZED  T EH1 - R ER0 - AY2 Z D\nTERRORIZES  T EH1 - R ER0 - AY2 - Z IH0 Z\nTERRORIZING  T EH1 - R ER0 - AY2 - Z IH0 NG\nTERRORS  T EH1 - R ER0 Z\nTERRY  T EH1 - R IY0\nTERRY'S  T EH1 - R IY0 Z\nTERSE  T ER1 S\nTERSELY  T ER1 S - L IY0\nTERTIA  T EH1 R - SH AH0\nTERTIARY  T ER1 - SH ER0 - IY0\nTERTIARY(2)  T ER1 - SH IY0 - EH2 - R IY0\nTERTIUS  T ER1 - T IY0 - IH0 S\nTERTIUS(2)  T ER1 - SH Y IH0 S\nTERUKO  T EH1 - R UW0 - K OW0\nTERUYA  T EH0 - R UW1 - Y AH0\nTERVO  T EH1 R - V OW0\nTERWILLIGER  T ER1 - W IH0 - L IH0 - G ER0\nTERZIAN  T ER1 - Z IY0 - AH0 N\nTESAR  T IH0 - S AA1 R\nTESCH  T EH1 SH\nTESCHNER  T EH1 SH - N ER0\nTESCO  T EH1 - S K OW0\nTESE  T IY1 S\nTESH  T EH1 SH\nTESKA  T EH1 - S K AH0\nTESKE  T EH1 S K\nTESLA  T EH1 S - L AH0\nTESLA(2)  T EH1 Z - L AH0\nTESLER  T EH1 - S AH0 - L ER0\nTESLER(2)  T EH1 S - L ER0\nTESLIK  T EH1 S - L IH0 K\nTESMER  T EH1 - S AH0 - M ER0\nTESOBONO  T EH2 - S AH0 - B OW1 - N OW0\nTESOBONOS  T EH2 - S AH0 - B OW1 - N OW0 S\nTESOBONOS(2)  T EH2 - S AH0 - B OW1 - N OW0 Z\nTESORIERO  T EH0 - S AO0 - R IH1 - R OW0\nTESORO  T EH0 - S AO1 - R OW0\nTESORO'S  T EH0 - S AO1 - R OW0 Z\nTESS  T EH1 S\nTESSA  T EH1 - S AH0\nTESSELATE  T EH1 - S AH0 - L EY2 T\nTESSELATED  T EH1 - S AH0 - L EY2 - T IH0 D\nTESSIE  T EH1 - S IY0\nTESSIER  T EH1 - S IY0 - ER0\nTESSITORE  T EH0 - S IY0 - T AO1 - R IY0\nTESSLER  T EH1 S - L ER0\nTESSMAN  T EH1 S - M AH0 N\nTESSMER  T EH1 S - M ER0\nTESSY  T EH1 - S IY0\nTEST  T EH1 S T\nTEST'S  T EH1 S T S\nTESTA  T EH1 - S T AH0\nTESTAMENT  T EH1 - S T AH0 - M AH0 N T\nTESTAMENTARY  T EH2 - S T AH0 - M EH1 N - T ER0 - IY0\nTESTED  T EH1 - S T AH0 D\nTESTED(2)  T EH1 - S T IH0 D\nTESTER  T EH1 - S T ER0\nTESTERMAN  T EH1 - S T ER0 - M AH0 N\nTESTERS  T EH1 - S T ER0 Z\nTESTERS(2)  T EH1 - S T AH0 Z\nTESTES  T EH1 - S T IY2 Z\nTESTES(2)  T EH1 S T S\nTESTICLE  T EH1 - S T IH0 - K AH0 L\nTESTICLES  T EH1 - S T IH0 - K AH0 L Z\nTESTICULAR  T EH2 - S T IH1 - K Y AH0 - L ER0\nTESTIFIED  T EH1 - S T AH0 - F AY2 D\nTESTIFIES  T EH1 - S T AH0 - F AY2 Z\nTESTIFY  T EH1 - S T AH0 - F AY2\nTESTIFYING  T EH1 - S T AH0 - F AY2 - IH0 NG\nTESTILY  T EH1 - S T AH0 - L IY0\nTESTIMONIAL  T EH2 - S T AH0 - M OW1 - N IY0 - AH0 L\nTESTIMONIALS  T EH2 - S T AH0 - M OW1 - N IY0 - AH0 L Z\nTESTIMONIES  T EH1 - S T AH0 - M OW2 - N IY0 Z\nTESTIMONY  T EH1 - S T AH0 - M OW2 - N IY0\nTESTING  T EH1 - S T IH0 NG\nTESTON  T EH1 - S T AH0 N\nTESTOR  T EH1 - S T ER0\nTESTOSTERONE  T EH2 - S T AA1 - S T ER0 - OW2 N\nTESTRAKE  T EH1 - S T R EY2 K\nTESTS  T EH1 S T S\nTESTS'  T EH1 S T S\nTESTURO  T EH2 - S T UH1 - R OW0\nTESTY  T EH1 - S T IY0\nTET  T EH1 T\nTETA  T EH1 - T AH0\nTETANUS  T EH1 - T AH0 - N AH0 S\nTETE  T EH1 T\nTETER  T IY1 - T ER0\nTETERS  T IY1 - T ER0 Z\nTETHER  T EH1 - DH ER0\nTETHERED  T EH1 - DH ER0 D\nTETHERS  T EH1 - DH ER0 Z\nTETI  T EH1 - T IY0\nTETLEY  T EH1 T - L IY0\nTETLOW  T EH1 T - L OW0\nTETON  T IY1 - T AH0 N\nTETRA  T EH1 - T R AH0\nTETRADS  T EH1 - T R AE2 D Z\nTETRAHEDRAL  T EH2 - T R AH0 - HH IY1 - D R AH0 L\nTETRAHEDRON  T EH2 - T R AH0 - HH IY1 - D R AH0 N\nTETRAMEROUS  T EH2 - T R AE1 - M ER0 - AH0 S\nTETRAULT  T EH1 - T R AW0 L T\nTETRAVALENT  T EH2 - T R AH0 - V EY1 - L AH0 N T\nTETREAULT  T IH0 - T R OW1\nTETRICK  T EH1 - T R IH0 K\nTETRO  T EH1 - T R OW0\nTETSUJI  T EH2 T - S UW1 - JH IY0\nTETSUO  T EH1 T - S UW2 - OW0\nTETTAMANTI  T EH2 - T AH0 - M AE1 N - T IY0\nTETTERTON  T EH1 - T ER0 - T AH0 N\nTETZLAFF  T EH1 T Z - L AH0 F\nTETZLOFF  T EH1 T Z - L AO0 F\nTEUBER  T OY1 - B ER0\nTEUBNER  T OY1 B - N ER0\nTEUFEL  T OY1 - F AH0 L\nTEUSCHER  T OY1 - SH ER0\nTEUTSCH  T OY1 CH\nTEVA  T EY1 - V AH0\nTEVATRON  T EH1 - V AH0 - T R AA0 N\nTEVES  T IY1 V Z\nTEVIS  T EH1 - V IH0 S\nTEVLIN  T EH1 V - L IH0 N\nTEVYE  T EH1 - V IY0\nTEW  CH UW1\nTEW(2)  T UW1\nTEW(3)  T IY1 - IY1 - D AH1 - B AH0 L - Y UW2\nTEWELL  T EH1 - W EH0 L\nTEWES  CH UW1 Z\nTEWKSBURY  T UW1 K S - B ER0 - IY0\nTEWS  CH UW1 Z\nTEX  T EH1 K S\nTEXACO  T EH1 K - S AH0 - K OW0\nTEXACO'S  T EH1 K - S AH0 - K OW0 Z\nTEXAN  T EH1 K - S AH0 N\nTEXAN'S  T EH1 K - S AH0 N Z\nTEXANS  T EH1 K - S AH0 N Z\nTEXARKANA  T EH2 K - S AA0 R - K AE1 - N AH0\nTEXAS  T EH1 K - S AH0 S\nTEXAS'  T EH1 K - S AH0 - S IH0 Z\nTEXAS'(2)  T EH1 K - S AH0 S\nTEXAS'S  T EH1 K - S AH0 - S AH0 Z\nTEXAS'S(2)  T EH1 K - S AH0 - S IH0 Z\nTEXASGULF  T EH1 K - S AH0 - S G AH2 L F\nTEXEIRA  T EY0 K - S EH1 - R AH0\nTEXFI  T EH1 K S - F IY0\nTEXPOOL  T EH1 K - S P UW2 L\nTEXSCAN  T EH1 K - S K AE2 N\nTEXSTAR  T EH1 K - S T AA2 R\nTEXSTYRENE  T EH1 K - S T AY1 - R IY2 N\nTEXT  T EH1 K S T\nTEXTBOOK  T EH1 K S T - B UH2 K\nTEXTBOOKS  T EH1 K S T - B UH2 K S\nTEXTER  T EH1 K - S T ER0\nTEXTILE  T EH1 K - S T AY2 L\nTEXTILES  T EH1 K - S T AY2 L Z\nTEXTOR  T EH1 K - S T ER0\nTEXTRON  T EH1 K - S T R AA0 N\nTEXTRON'S  T EH1 K - S T R AA0 N Z\nTEXTS  T EH1 K S T S\nTEXTUAL  T EH1 K S - CH AH0 - W AH0 L\nTEXTURE  T EH1 K S - CH ER0\nTEXTURED  T EH1 K S - CH ER0 D\nTEXTURES  T EH1 K S - CH ER0 Z\nTEZAK  T EH1 - Z AH0 K\nTEZENO  T EY0 - Z EY1 - N OW0\nTH  T IY1 - EY1 CH\nTHABO  TH EY1 - B OW0\nTHACH  TH AE1 CH\nTHACHER  TH AE1 - K ER0\nTHACKER  TH AE1 - K ER0\nTHACKERAY  TH AE1 - K ER0 - IY0\nTHACKERY'S  TH AE1 - K ER0 - IY0 Z\nTHACKSTON  TH AE1 K - S T AH0 N\nTHAD  TH AE1 D\nTHADA  TH AA1 - D AH0\nTHADDA  TH AE1 - D AH0\nTHADDEA  TH AE1 - D IY0 - AH0\nTHADDEUS  TH AE1 - D IY0 - AH0 S\nTHADEN  TH EY1 - D AH0 N\nTHAGARD  TH AE1 - G ER0 D\nTHAGGARD  TH AE1 - G ER0 D\nTHAI  T AY1\nTHAI'S  T AY1 Z\nTHAILAND  T AY1 - L AE2 N D\nTHAILAND'S  T AY1 - L AE2 N D Z\nTHAIN  TH EY1 N\nTHAINE  TH EY1 N\nTHAIS  T AY1 Z\nTHAKKAR  TH AE1 - K ER0\nTHAL  TH AE1 L\nTHALACKER  TH AE1 - L AH0 - K ER0\nTHALAMUS  TH AE1 - L AH0 - M AH0 S\nTHALASSA  TH AA0 - L AA1 - S AH0\nTHALER  TH EY1 - L ER0\nTHALHEIMER  TH AE1 L - HH AY0 - M ER0\nTHALIA  TH EY1 - L Y AH0\nTHALIA'S  TH EY1 - L Y AH0 Z\nTHALIDOMIDE  TH AH0 - L IH1 - D AH0 - M AY2 D\nTHALL  TH AO1 L\nTHALLIUM  TH AE1 - L IY0 - AH0 M\nTHALMAN  TH AE1 L - M AH0 N\nTHALMANN  TH AO1 L - M AH0 N\nTHAM  TH AE1 M\nTHAMES  T EH1 M Z\nTHAN  DH AE1 N\nTHAN(2)  DH AH0 N\nTHANE  TH EY1 N\nTHANH  TH AE1 N\nTHANK  TH AE1 NG K\nTHANK'S  TH AE1 NG K S\nTHANKED  TH AE1 NG K T\nTHANKFUL  TH AE1 NG K - F AH0 L\nTHANKFULLY  TH AE1 NG K - F AH0 - L IY0\nTHANKING  TH AE1 NG - K IH0 NG\nTHANKLESS  TH AE1 NG K - L AH0 S\nTHANKS  TH AE1 NG K S\nTHANKSGIVING  TH AE2 NG K S - G IH1 - V IH0 NG\nTHANO  TH AA1 - N OW0\nTHANOS  TH AA1 - N OW0 S\nTHAO  DH AW1\nTHAR  TH AA1 R\nTHARP  TH AA1 R P\nTHARPE  TH AA1 R P\nTHARRINGTON  TH AE1 - R IH0 NG - T AH0 N\nTHASSOS  TH AE1 - S OW0 S\nTHAT  DH AE1 T\nTHAT'D  DH AE1 - T IH0 D\nTHAT'LL  DH AE1 - T AH0 L\nTHAT'S  DH AE1 T S\nTHAT'VE  DH AE1 - T AH0 V\nTHAT(2)  DH AH0 T\nTHATCH  TH AE1 CH\nTHATCHED  TH AE1 CH T\nTHATCHER  TH AE1 - CH ER0\nTHATCHER'S  TH AE1 - CH ER0 Z\nTHATCHERISM  TH AE1 - CH ER0 - IH2 - Z AH0 M\nTHATCHERITE  TH AE1 - CH ER0 - AY2 T\nTHATCHES  TH AE1 - CH IH0 Z\nTHAU  DH AW1\nTHAW  TH AO1\nTHAWED  TH AO1 D\nTHAWING  TH AO1 - IH0 NG\nTHAWS  TH AO1 Z\nTHAXTER  TH AE1 K - S T ER0\nTHAXTON  TH AE1 K - S T AH0 N\nTHAYER  TH EY1 - ER0\nTHAYNE  TH EY1 N\nTHE  DH AH0\nTHE(2)  DH AH1\nTHE(3)  DH IY0\nTHEA  TH IY1 - AH0\nTHEALL  TH IY1 L\nTHEANO  TH IY1 - N OW0\nTHEATER  TH IY1 - AH0 - T ER0\nTHEATER'S  TH IY1 - AH0 - T ER0 Z\nTHEATERGOER  TH IY1 - T ER0 - G OW0 - ER0\nTHEATERGOER(2)  TH IY1 - IH0 - T ER0 - G OW0 - ER0\nTHEATERGOERS  TH IY1 - T ER0 - G OW0 - ER0 Z\nTHEATERGOERS(2)  TH IY1 - IH0 - T ER0 - G OW0 - ER0 Z\nTHEATERS  TH IY1 - AH0 - T ER0 Z\nTHEATRE  TH IY1 - AH0 - T ER0\nTHEATRE'S  TH IY1 - AH0 - T ER0 Z\nTHEATRES  TH IY1 - AH0 - T ER0 Z\nTHEATRICAL  TH IY0 - AE1 - T R IH0 - K AH0 L\nTHEATRICALITY  TH IY0 - AE2 - T R AH0 - K AE1 - L AH0 - T IY0\nTHEATRICALLY  TH IY0 - AE1 - T R IH0 - K AH0 - L IY0\nTHEATRICALLY(2)  TH IY0 - AE1 - T R IH0 K - L IY0\nTHEATRICS  TH IY1 - T R IH0 K S\nTHEBEAU  TH IH0 - B OW1\nTHEBERGE  TH EH1 - B ER0 JH\nTHEBES  TH IY1 B Z\nTHECLA  TH EH1 K - L AH0\nTHEDA  TH IY1 - D AH0\nTHEDE  TH IY1 D\nTHEDFORD  TH EH1 D - F ER0 D\nTHEE  DH IY1\nTHEEL  TH IY1 L\nTHEFT  TH EH1 F T\nTHEFTS  TH EH1 F T S\nTHEIL  TH AY1 L\nTHEILE  TH AY1 L\nTHEILEN  TH AY1 - L AH0 N\nTHEILER  TH AY1 - L ER0\nTHEIN  TH AY1 N\nTHEIR  DH EH1 R\nTHEIRS  DH EH1 R Z\nTHEIRSELF  DH EH2 R - S EH1 L F\nTHEIS  DH AY1 Z\nTHEISEN  TH AY1 - S AH0 N\nTHEISM  TH IY1 - IH0 - Z AH0 M\nTHEISS  TH AY1 S\nTHEISSEN  TH AY1 - S AH0 N\nTHEKLA  TH EH1 K - L AH0\nTHELANDER  TH EH1 - L AH0 N - D ER0\nTHELEN  TH EH1 - L AH0 N\nTHELIN  TH EH1 - L IH0 N\nTHELMA  TH EH1 L - M AH0\nTHELMA'S  TH EH1 L - M AH0 Z\nTHELONIUS  TH IH0 - L OW1 - N IY0 - AH0 S\nTHEM  DH EH1 M\nTHEM(2)  DH AH0 M\nTHEMATIC  TH IY0 - M AE1 - T IH0 K\nTHEMATICALLY  TH AH0 - M AE1 - T IH0 K - L IY0\nTHEME  TH IY1 M\nTHEMED  TH IY1 M D\nTHEMES  TH IY1 M Z\nTHEMSELF  DH EH0 M - S EH1 L F\nTHEMSELF(2)  DH AH0 M - S EH1 L F\nTHEMSELVES  DH EH0 M - S EH1 L V Z\nTHEMSELVES(2)  DH AH0 M - S EH1 L V Z\nTHEN  DH EH1 N\nTHENCE  DH EH1 N S\nTHENCEFORTH  DH EH2 N S - F AO1 R TH\nTHEO  TH IY1 - OW0\nTHEO'S  TH IY1 - OW0 Z\nTHEOBALD  TH IY1 - AH0 - B AH0 L D\nTHEOCRACY  TH IY0 - AA1 - K R AH0 - S IY0\nTHEOCRATIC  TH IY2 - AH0 - K R AE1 - T IH0 K\nTHEODOR  TH IY1 - AH0 - D ER0\nTHEODORA  TH IY2 - AH0 - D AO1 - R AH0\nTHEODORE  TH IY1 - AH0 - D AO2 R\nTHEODOROU  TH IY1 - AH0 - D ER0 - UW0\nTHEODRIC  TH IY1 - AH0 - D R IH0 K\nTHEOLA  TH IY1 - AH0 - L AH0\nTHEOLOGIAN  TH IY2 - AH0 - L OW1 - JH IY0 - AH0 N\nTHEOLOGIANS  TH IY2 - AH0 - L OW1 - JH AH0 N Z\nTHEOLOGICAL  TH IY2 - AH0 - L AA1 - JH IH0 - K AH0 L\nTHEOLOGICALLY  TH IY2 - AH0 - L AA1 - JH IH0 K - L IY0\nTHEOLOGY  TH IY0 - AA1 - L AH0 - JH IY0\nTHEON  TH IY1 - AH0 N\nTHEONE  TH IY1 - AA0 N\nTHEOPHANIA  TH IY0 - AH0 - F AE1 - N IY0 - AH0\nTHEOPHILA  TH EY0 - AH0 - F IY1 - L AH0\nTHEORA  TH IY1 - ER0 - AH0\nTHEOREM  TH IH1 - R AH0 M\nTHEORETICAL  TH IY2 - ER0 - EH1 - T IH0 - K AH0 L\nTHEORETICALLY  TH IY2 - ER0 - EH1 - T IH0 - K AH0 - L IY0\nTHEORETICALLY(2)  TH IY2 - ER0 - EH1 - T IH0 K - L IY0\nTHEORETICIAN  TH IY2 - ER0 - AH0 - T IH1 - SH AH0 N\nTHEORETICIANS  TH IY2 - ER0 - AH0 - T IH1 - SH AH0 N Z\nTHEORIES  TH IH1 - R IY0 Z\nTHEORIES(2)  TH IY1 - ER0 - IY0 Z\nTHEORIST  TH IY1 - ER0 - IH0 S T\nTHEORISTS  TH IY1 - ER0 - IH0 S T S\nTHEORISTS(2)  TH IY1 - ER0 - IH0 S S\nTHEORISTS(3)  TH IY1 - ER0 - IH0 S\nTHEORIZE  TH IY1 - ER0 - AY2 Z\nTHEORIZED  TH IY1 - ER0 - AY2 Z D\nTHEORIZES  TH IY1 - ER0 - AY2 - Z IH0 Z\nTHEORIZING  TH IY1 - ER0 - AY2 - Z IH0 NG\nTHEORY  TH IH1 - R IY0\nTHEORY'S  TH IH1 - R IY0 Z\nTHEORY'S(2)  TH IY1 - ER0 - IY0 Z\nTHEORY(2)  TH IY1 - ER0 - IY0\nTHERA  TH EH1 - R AH0\nTHERAFECTIN  TH EH2 - R AH0 - F EH1 K - T IH0 N\nTHERANI  T EH2 - R AA1 - N IY0\nTHERAPEUTIC  TH EH2 - R AH0 - P Y UW1 - T IH0 K\nTHERAPEUTICALLY  TH EH2 - R AH0 - P Y UW1 - T IH0 - K AH0 - L IY0\nTHERAPEUTICALLY(2)  TH EH2 - R AH0 - P Y UW1 - T IH0 K - L IY0\nTHERAPEUTICS  TH EH2 - R AH0 - P Y UW1 - T IH0 K S\nTHERAPIES  TH EH1 - R AH0 - P IY0 Z\nTHERAPIST  TH EH1 - R AH0 - P AH0 S T\nTHERAPIST'S  TH EH1 - R AH0 - P AH0 S T S\nTHERAPIST'S(2)  TH EH1 - R AH0 - P IH0 S T S\nTHERAPIST(2)  TH EH1 - R AH0 - P IH0 S T\nTHERAPISTS  TH EH1 - R AH0 - P IH0 S T S\nTHERAPISTS'S  TH EH1 - R AH0 - P IH0 S T S\nTHERAPISTS'S(2)  TH EH1 - R AH0 - P IH0 S S\nTHERAPISTS(2)  TH EH1 - R AH0 - P IH0 S S\nTHERAPISTS(3)  TH EH1 - R AH0 - P IH0 S\nTHERAPY  TH EH1 - R AH0 - P IY0\nTHERE  DH EH1 R\nTHERE'D  DH EH1 R D\nTHERE'LL  DH EH1 - R AH0 L\nTHERE'RE  DH EH1 - R ER0\nTHERE'S  DH EH1 R Z\nTHERE'VE  DH EH1 R V\nTHEREABOUTS  DH EH2 - R AH0 - B AW1 T S\nTHEREAFTER  DH EH0 - R AE1 F - T ER0\nTHEREBY  DH EH1 R - B AY1\nTHEREFORE  DH EH1 R - F AO2 R\nTHEREIN  DH EH0 - R IH1 N\nTHEREOF  TH EH2 - R AH1 V\nTHERESA  T ER0 - IY1 - S AH0\nTHERESA(2)  T ER0 - EY1 - S AH0\nTHERESE  TH EH1 - R IY0 S\nTHEREUPON  DH EH2 - R AH0 - P AA1 N\nTHERIAULT  TH EH2 - R IY0 - OW1\nTHERIEN  TH IH1 - R IY0 N\nTHERIOT  TH IH1 - R IY0 - AA0 T\nTHERM  TH ER1 M\nTHERMAE  TH ER1 - M IY2\nTHERMAL  TH ER1 - M AH0 L\nTHERMCO  TH ER1 M - K OW0\nTHERMEDICS  TH ER0 - M EH1 - D IH0 K S\nTHERMITS  TH ER1 - M IH0 T S\nTHERMO  TH ER1 - M OW0\nTHERMOMETER  TH ER0 - M AA1 - M AH0 - T ER0\nTHERMOMETERS  TH ER0 - M AA1 - M AH0 - T ER0 Z\nTHERMONUCLEAR  TH ER2 - M OW0 - N UW1 - K L IY0 - ER0\nTHERMOPATCH  TH ER1 - M OW0 - P AE2 CH\nTHERMOPLASTIC  TH ER2 - M AH0 - P L AE1 - S T IH0 K\nTHERMOPLASTICS  TH ER2 - M AH0 - P L AE1 - S T IH0 K S\nTHERMOS  TH ER1 - M AH0 S\nTHERMOSETTING  TH ER1 - M OW0 - S EH2 - T IH0 NG\nTHERMOSTAT  TH ER1 - M AH0 - S T AE2 T\nTHERMOSTATS  TH ER1 - M AH0 - S T AE2 T S\nTHERON  TH EH1 - R AH0 N\nTHEROUX  TH ER0 - UW1\nTHERRELL  TH EH1 - R AH0 L\nTHERRIAULT  TH EH1 - R IY0 - OW1\nTHERRIEN  TH EH1 - R IY0 N\nTHESAURUS  TH AH0 - S AO1 - R AH0 S\nTHESE  DH IY1 Z\nTHESES  TH IY1 - S IY0 Z\nTHESING  DH IY1 - Z IH0 NG\nTHESING(2)  TH IY1 - S IH0 NG\nTHESIS  TH IY1 - S AH0 S\nTHESPIAN  TH EH1 - S P IY0 - AH0 N\nTHETA  TH EY1 - T AH0\nTHETFORD  TH EH1 T - F ER0 D\nTHETIS  TH IY1 - T AH0 S\nTHEURER  TH ER1 - ER0\nTHEUS  DH Y UW1 Z\nTHEW  TH UW1\nTHEWLIS  TH Y UW1 - L IH0 S\nTHEY  DH EY1\nTHEY'D  DH EY1 D\nTHEY'LL  DH EY1 L\nTHEY'RE  DH EH1 R\nTHEY'VE  DH EY1 V\nTHI  TH IY1\nTHIAMIN  TH AY1 - AH0 - M AH0 N\nTHIBADEAU  T IH1 - B AH0 - D OW0\nTHIBAULT  TH IH0 - B OW1\nTHIBEAU  TH IH0 - B OW1\nTHIBEAULT  T IY1 - B OW0\nTHIBEAUX  TH IH0 - B OW1\nTHIBEDEAU  TH IH1 - B IH0 - D OW0\nTHIBERT  TH IH0 - B ER1 T\nTHIBERT(2)  TH IH1 - B ER0 T\nTHIBODEAU  TH IH1 - B AH0 - D OW0\nTHIBODEAUX  TH IH1 - B AH0 - D OW0\nTHICK  TH IH1 K\nTHICKEN  TH IH1 - K AH0 N\nTHICKENED  TH IH1 - K AH0 N D\nTHICKENER  TH IH1 - K AH0 - N ER0\nTHICKENING  TH IH1 - K AH0 - N IH0 NG\nTHICKENING(2)  TH IH1 K - N IH0 NG\nTHICKENS  TH IH1 - K AH0 N Z\nTHICKER  TH IH1 - K ER0\nTHICKEST  TH IH1 - K IH0 S T\nTHICKET  TH IH1 - K IH0 T\nTHICKETS  TH IH1 - K AH0 T S\nTHICKHEAD  TH IH1 K - HH EH2 D\nTHICKLY  TH IH1 K - L IY0\nTHICKNESS  TH IH1 K - N AH0 S\nTHIEBAUD  TH IY2 - B OW1\nTHIEDE  TH IY1 D\nTHIEF  TH IY1 F\nTHIEF'S  TH IY1 F S\nTHIEL  TH IY1 L\nTHIELE  TH IY1 L\nTHIELEMANN  TH IY1 L - M AH0 N\nTHIELEN  TH IY1 - L AH0 N\nTHIELKE  TH IY1 L K\nTHIELMAN  TH IY1 L - M AH0 N\nTHIELSCH  TH IY1 L SH\nTHIEM  TH IY1 M\nTHIEMAN  TH IY1 - M AH0 N\nTHIEMANN  TH IY1 - M AH0 N\nTHIEME  TH IY1 M\nTHIEN  TH IY1 N\nTHIER  TH IY1 - ER0\nTHIERRY  TH IH0 - R IY1\nTHIERY  TH IH1 - R IY0\nTHIES  TH IY1 Z\nTHIESEN  TH IY1 - S AH0 N\nTHIESSEN  TH IY1 - S AH0 N\nTHIEVERY  TH IY1 - V ER0 - IY0\nTHIEVES  TH IY1 V Z\nTHIEVES'  TH IY1 V Z\nTHIEVING  TH IY1 - V IH0 NG\nTHIGH  TH AY1\nTHIGHS  TH AY1 Z\nTHIGPEN  TH IH1 G - P AH0 N\nTHILL  TH IH1 L\nTHIMA  TH IY1 - M AH0\nTHIMBLE  TH IH1 M - B AH0 L\nTHIN  TH IH1 N\nTHINE  DH AY1 N\nTHING  TH IH1 NG\nTHING'S  TH IH1 NG Z\nTHINGS  TH IH1 NG Z\nTHINGS'  TH IH1 NG Z\nTHINGY  TH IH1 - NG IY0\nTHINK  TH IH1 NG K\nTHINK'S  TH IH1 NG K S\nTHINKER  TH IH1 NG - K ER0\nTHINKERS  TH IH1 NG - K ER0 Z\nTHINKIN  TH IH1 NG - K IH0 N\nTHINKIN'  TH IH1 NG - K IH0 N\nTHINKING  TH IH1 NG - K IH0 NG\nTHINKPAD  TH IH1 NG K - P AE2 D\nTHINKS  TH IH1 NG K S\nTHINLY  TH IH1 N - L IY0\nTHINNED  TH IH1 N D\nTHINNER  TH IH1 - N ER0\nTHINNES  TH IH1 N Z\nTHINNES(2)  TH IH1 - N IH0 Z\nTHINNESS  TH IH1 N - N IH0 S\nTHINNESS(2)  TH IH1 - N IH0 S\nTHINNEST  TH IH1 - N IH0 S T\nTHINNING  TH IH1 - N IH0 NG\nTHINS  TH IH1 N Z\nTHIODIGLYCOL  TH AY2 - OW0 - D IH1 - G L IH0 - K AA2 L\nTHIODIGLYCOL(2)  TH AY2 - OW0 - D IH1 - G L AY0 - K AA2 L\nTHIOKOL  TH AY1 - AH0 - K AO2 L\nTHIOKOL'S  TH AY1 - AH0 - K AO2 L Z\nTHIRD  TH ER1 D\nTHIRD'S  TH ER1 D Z\nTHIRDLY  TH ER1 D - L IY0\nTHIRDQUARTER  TH ER2 D - K W AO1 R - T ER0\nTHIRDQUARTER(2)  TH ER2 D - K AO1 R - T ER0\nTHIRDS  TH ER1 D Z\nTHIRST  TH ER1 S T\nTHIRSTY  TH ER1 - S T IY0\nTHIRTEEN  TH ER1 - T IY1 N\nTHIRTEEN'S  TH ER1 - T IY2 N Z\nTHIRTEENTH  TH ER1 - T IY1 N TH\nTHIRTEENTHS  TH ER1 - T IY1 N TH S\nTHIRTIES  TH ER1 - T IY0 Z\nTHIRTIETH  TH ER1 - T IY0 - AH0 TH\nTHIRTIETH(2)  TH ER1 - T IY0 - IH0 TH\nTHIRTY  TH ER1 - D IY0\nTHIRTY'S  TH ER1 - D IY0 Z\nTHIRTY'S(2)  TH ER1 - T IY2 Z\nTHIRTY(2)  TH ER1 - T IY2\nTHIRTYSOMETHING  TH ER1 - T IY0 - S AH2 M - TH IH0 NG\nTHIRY  TH IH1 - R IY0\nTHIRZA  TH ER1 - Z AH0\nTHIS  DH IH1 S\nTHIS'  DH IH1 S\nTHIS'(2)  DH IH0 S\nTHIS'LL  DH IH1 - S AH0 L\nTHIS'LL(2)  DH IH0 - S AH0 L\nTHIS(2)  DH IH0 S\nTHISSEN  TH IH1 - S AH0 N\nTHISTLE  TH IH1 - S AH0 L\nTHISTLES  TH IH1 - S AH0 L Z\nTHIVIERGE  TH IH0 - V IY1 R JH\nTHO  DH OW1\nTHOBE  TH OW1 B\nTHODE  TH OW1 D\nTHOELE  TH OW1 L\nTHOEN  TH OW1 N\nTHOENE  TH AA1 - IY0 N\nTHOENNES  TH OW1 N Z\nTHOLE  TH OW1 L\nTHOLEN  TH AA1 - L AH0 N\nTHOLL  TH AA1 L\nTHOM  T AA1 M\nTHOMA  TH OW1 - M AH0\nTHOMA(2)  T OW1 - M AH0\nTHOMAN  TH OW1 - M AH0 N\nTHOMANN  DH OW1 - M AH0 N\nTHOMAS  T AA1 - M AH0 S\nTHOMAS'  T AA1 - M AH0 - S IH0 Z\nTHOMAS'(2)  T AA1 - M AH0 S\nTHOMAS'S  T AA1 - M AH0 - S IH0 Z\nTHOMASAS  T AA1 - M AH0 - S AH0 S\nTHOMASES  T AA1 - M AH0 - S IH0 Z\nTHOMASINA  TH OW0 - M AA0 - S IY1 - N AH0\nTHOMASINA(2)  T AA0 - M AA0 - S IY1 - N AH0\nTHOMASINE  TH OW0 - M AA0 - S IY1 - N IY0\nTHOMASINE(2)  T AA0 - M AA0 - S IY1 - N IY0\nTHOMASINE(3)  T AA0 - M AA0 - S IY1 N\nTHOMASON  TH AA1 - M AH0 - S AH0 N\nTHOMASON(2)  T AA1 - M AH0 - S AH0 N\nTHOMASSEN  TH AA1 - M AH0 - S AH0 N\nTHOMASSEN(2)  T AA1 - M AH0 - S AH0 N\nTHOMASSON  TH AA1 - M AH0 - S AH0 N\nTHOMASSON(2)  T AA1 - M AH0 - S AH0 N\nTHOMASVILLE  T AA1 - M AH0 S - V IH2 L\nTHOME  TH OW1 M\nTHOMES  TH OW1 M Z\nTHOMETZ  TH OW1 - M EH0 T S\nTHOMISON  TH AA1 - M IH0 - S AH0 N\nTHOMLEY  TH AA1 M - L IY0\nTHOMMEN  TH AA1 - M AH0 N\nTHOMP  TH AA1 M P\nTHOMPKINS  T AA1 M P - K IH0 N Z\nTHOMPKINS(2)  T AA1 M - K IH0 N Z\nTHOMPSEN  T AA1 M P - S AH0 N\nTHOMPSEN(2)  T AA1 M - S AH0 N\nTHOMPSON  T AA1 M P - S AH0 N\nTHOMPSON'S  T AA1 M P - S AH0 N Z\nTHOMPSON'S(2)  T AA1 M - S AH0 N Z\nTHOMPSON(2)  T AA1 M - S AH0 N\nTHOMPSONS  T AA1 M P - S AH0 N Z\nTHOMPSONS(2)  T AA1 M - S AH0 N Z\nTHOMS  TH AA1 M Z\nTHOMSEN  TH AA1 M - S AH0 N\nTHOMSON  T AA1 M - S AH0 N\nTHOMSON'S  T AA1 M - S AH0 N Z\nTHOMSPON  TH AA1 M - S P AH0 N\nTHOMURE  TH AA1 - M Y UW0 R\nTHON  TH AA1 N\nTHONE  TH OW1 N\nTHONG  TH AO1 NG\nTHOR  TH AO1 R\nTHORA  TH AO1 - R AH0\nTHORACIC  TH AO0 - R AE1 - S IH0 K\nTHORALD  TH AO1 - R AH0 L D\nTHORAX  TH AO1 - R AE0 K S\nTHORBERT  TH AO1 R - B ER0 T\nTHORBERTA  TH AO0 R - B EH1 R - T AH0\nTHORBURN  TH AO1 R - B ER0 N\nTHORDIA  TH AO1 R - D IY0 - AH0\nTHORDIS  TH AO1 R - D IH0 S\nTHOREAU  TH ER0 - OW1\nTHORELL  TH AO1 - R AH0 L\nTHOREN  TH AO1 - R AH0 N\nTHORESEN  TH AO1 - R IY0 - Z AH0 N\nTHORESON  TH AO1 - R IH0 - S AH0 N\nTHORINGTON  TH AO1 - R IH0 NG - T AH0 N\nTHORIUM  TH AA1 - R IY0 - AH0 M\nTHORLEY  TH AO1 R - L IY0\nTHORMAN  TH AO1 R - M AH0 N\nTHORMOND  TH AO1 R - M AH0 N D\nTHORMUND  TH AO1 R - M AH0 N D\nTHORN  TH AO1 R N\nTHORN'S  TH AO1 R N Z\nTHORNBERG  TH AO1 R N - B ER0 G\nTHORNBERRY  TH AO1 R N - B EH2 - R IY0\nTHORNBURG  TH AO1 R N - B ER0 G\nTHORNBURGH  TH AO1 R N - B ER0 G\nTHORNBURGH'S  TH AO1 R N - B ER0 G Z\nTHORNBURY  TH AO1 R N - B EH2 - R IY0\nTHORNDIKE  TH AO1 R N - D IH0 K\nTHORNDYKE  TH AO1 R N - D AY2 K\nTHORNE  TH AO1 R N\nTHORNELL  TH AO1 R - N AH0 L\nTHORNER  TH AO1 R - N ER0\nTHORNHILL  TH AO1 R N - HH IH2 L\nTHORNIEST  TH AO1 R - N IY0 - AH0 S T\nTHORNLEY  TH AO1 R N - L IY0\nTHORNOCK  TH AO1 R - N AH0 K\nTHORNS  TH AO1 R N Z\nTHORNSBERRY  TH AO1 R N Z - B EH0 - R IY0\nTHORNSBURY  TH AO1 R N Z - B EH0 - R IY0\nTHORNTON  TH AO1 R N - T AH0 N\nTHORNY  TH AO1 R - N IY0\nTHOROUGH  TH ER1 - OW0\nTHOROUGHBRED  TH ER1 - OW0 - B R EH1 D\nTHOROUGHBREDS  TH ER1 - OW0 - B R EH1 D Z\nTHOROUGHFARE  TH ER1 - OW0 - F EH2 R\nTHOROUGHFARES  TH ER1 - OW0 - F EH2 R Z\nTHOROUGHLY  TH ER1 - OW0 - L IY0\nTHOROUGHNESS  TH ER1 - OW0 - N AH0 S\nTHORP  TH AO1 R P\nTHORPE  TH AO1 R P\nTHORSELL  TH AO1 R - S AH0 L\nTHORSEN  TH AO1 R - S AH0 N\nTHORSON  TH AO1 R - S AH0 N\nTHORSTAD  TH AO1 R - S T AH0 D\nTHORSTEN  T AO1 R - S T AH0 N\nTHORSTENSON  TH AO1 R - S T AH0 N - S AH0 N\nTHORTEC  TH AO1 R - T EH2 K\nTHORTON  TH AO1 R - T AH0 N\nTHORTON'S  TH AO1 R - T AH0 N Z\nTHORUP  TH AO1 - R AH0 P\nTHORVALD  TH AO1 R - V AA1 L D\nTHOSE  DH OW1 Z\nTHOU  DH AW1\nTHOUGH  DH OW1\nTHOUGHT  TH AO1 T\nTHOUGHTFUL  TH AO1 T - F AH0 L\nTHOUGHTFULLY  TH AO1 T - F AH0 - L IY0\nTHOUGHTFULNESS  TH AO1 T - F AH0 L - N IH0 S\nTHOUGHTLESS  TH AO1 T - L AH0 S\nTHOUGHTS  TH AO1 T S\nTHOUS  DH AW1 Z\nTHOUSAND  TH AW1 - Z AH0 N D\nTHOUSAND(2)  TH AW1 - Z AH0 N\nTHOUSANDS  TH AW1 - Z AH0 N D Z\nTHOUSANDS(2)  TH AW1 - Z AH0 N Z\nTHOUSANDTH  TH AW1 - Z AH0 N D TH\nTHOUSANDTH(2)  TH AW1 - Z AH0 N TH\nTHOUSANDTHS  TH AW1 - Z AH0 N D TH S\nTHOUSANDTHS(2)  TH AW1 - Z AH0 N TH S\nTHRACO-ILLYRIAN  TH R EY2 - K OW2 - IH0 - L IH1 - R IY0 - AH0 N\nTHRAILKILL  TH R EY1 L - K IH2 L\nTHRALL  TH R AO1 L\nTHRASH  TH R AE1 SH\nTHRASHED  TH R AE1 SH T\nTHRASHER  TH R AE1 - SH ER0\nTHRASHES  TH R AE1 - SH IH0 Z\nTHRASHING  TH R AE1 - SH IH0 NG\nTHREAD  TH R EH1 D\nTHREADBARE  TH R EH1 D - B EH2 R\nTHREADED  TH R EH1 - D AH0 D\nTHREADED(2)  TH R EH1 - D IH0 D\nTHREADFIN  TH R EH1 D - F IH0 N\nTHREADGILL  TH R EH1 D - G IH2 L\nTHREADING  TH R EH1 - D IH0 NG\nTHREADS  TH R EH1 D Z\nTHREAT  TH R EH1 T\nTHREATEN  TH R EH1 - T AH0 N\nTHREATENED  TH R EH1 - T AH0 N D\nTHREATENING  TH R EH1 - T AH0 N - IH0 NG\nTHREATENING(2)  TH R EH1 T - N IH0 NG\nTHREATENINGLY  TH R EH1 - T AH0 N - IH0 NG - L IY0\nTHREATENINGLY(2)  TH R EH1 T - N IH0 NG - L IY0\nTHREATENS  TH R EH1 - T AH0 N Z\nTHREATS  TH R EH1 T S\nTHREATT  TH R IY1 T\nTHREE  TH R IY1\nTHREE'S  TH R IY1 Z\nTHREEFOLD  TH R IY1 - F OW2 L D\nTHREEMONTH  TH R IY1 - M AH0 N TH\nTHREES  TH R IY1 Z\nTHREESOME  TH R IY1 - S AH0 M\nTHREET  TH R IY1 T\nTHRELKELD  TH R EH1 L - K EH2 L D\nTHRESH  TH R EH1 SH\nTHRESHER  TH R EH1 - SH ER0\nTHRESHOLD  TH R EH1 SH - OW2 L D\nTHRESHOLDS  TH R EH1 SH - HH OW2 L D Z\nTHREW  TH R UW1\nTHRICE  TH R AY1 S\nTHRIFT  TH R IH1 F T\nTHRIFT'S  TH R IH1 F T S\nTHRIFTIER  TH R IH1 F - T IY0 - ER0\nTHRIFTS  TH R IH1 F T S\nTHRIFTS'  TH R IH1 F T S\nTHRIFTS'(2)  TH R IH1 F S\nTHRIFTS(2)  TH R IH1 F S\nTHRIFTY  TH R IH1 F - T IY0\nTHRILL  TH R IH1 L\nTHRILLED  TH R IH1 L D\nTHRILLER  TH R IH1 - L ER0\nTHRILLERS  TH R IH1 - L ER0 Z\nTHRILLING  TH R IH1 - L IH0 NG\nTHRILLS  TH R IH1 L Z\nTHRIPS  TH R IH1 P S\nTHRISTING  TH R IH1 - S T IH0 NG\nTHRIVE  TH R AY1 V\nTHRIVED  TH R AY1 V D\nTHRIVES  TH R AY1 V Z\nTHRIVING  TH R AY1 - V IH0 NG\nTHROAT  TH R OW1 T\nTHROATED  TH R OW1 - T IH0 D\nTHROATS  TH R OW1 T S\nTHROB  TH R AA1 B\nTHROBBING  TH R AA1 - B IH0 NG\nTHROES  TH R OW1 Z\nTHROGMORTON  TH R AH0 G - M AO1 R - T AH0 N\nTHROM  TH R AA1 M\nTHROMBOLYSIS  TH R AA0 M - B OW1 - L IH0 - S IH0 S\nTHROMBOLYSIS(2)  TH R AA0 M - B AA1 - L IH0 - S IH0 S\nTHROMBOLYTIC  TH R AA2 M - B OW0 - L IH1 - T IH0 K\nTHROMBOSIS  TH R AA0 M - B OW1 - S AH0 S\nTHRONE  TH R OW1 N\nTHRONEBERRY  TH R OW1 N - B EH2 - R IY0\nTHRONG  TH R AO1 NG\nTHRONGED  TH R AO1 NG D\nTHRONGS  TH R AO1 NG Z\nTHRONSON  TH R AA1 N - S AH0 N\nTHROOP  TH R UW1 P\nTHROTTLE  TH R AA1 - T AH0 L\nTHROTTLED  TH R AA1 - T AH0 L D\nTHROTTLES  TH R AA1 - T AH0 L Z\nTHROTTLING  TH R AA1 - T AH0 L - IH0 NG\nTHROTTLING(2)  TH R AA1 T - L IH0 NG\nTHROUGH  TH R UW1\nTHROUGHOUT  TH R UW0 - AW1 T\nTHROUGHPUT  TH R UW1 - P UH2 T\nTHROUGHS  TH R UW1 Z\nTHROUGHWAY  TH R UW1 - W EY2\nTHROVE  TH R OW1 V\nTHROW  TH R OW1\nTHROWAWAY  TH R OW1 - AH0 - W EY2\nTHROWBACK  TH R OW1 - B AE2 K\nTHROWER  TH R OW1 - ER0\nTHROWERS  TH R OW1 - ER0 Z\nTHROWING  TH R OW1 - IH0 NG\nTHROWN  TH R OW1 N\nTHROWS  TH R OW1 Z\nTHRU  TH R UW1\nTHRUN  TH R AH1 N\nTHRUSH  TH R AH1 SH\nTHRUSHES  TH R AH1 - SH AH0 Z\nTHRUSHES(2)  TH R AH1 - SH IH0 Z\nTHRUST  TH R AH1 S T\nTHRUSTER  TH R AH1 - S T ER0\nTHRUSTERS  TH R AH1 - S T ER0 Z\nTHRUSTING  TH R AH1 - S T IH0 NG\nTHRUSTS  TH R AH1 S T S\nTHRUSTS(2)  TH R AH1 S S\nTHRUSTS(3)  TH R AH1 S\nTHRUWAY  TH R UW1 - W EY2\nTHS  TH S\nTHUD  TH AH1 D\nTHUG  TH AH1 G\nTHUGGERY  TH AH1 - G ER0 - IY0\nTHUGS  TH AH1 G Z\nTHUL  TH AH1 L\nTHULIN  TH UW1 - L IH0 N\nTHULL  TH AH1 L\nTHUM  TH AH1 M\nTHUMA  TH UW1 - M AH0\nTHUMAN  TH UW1 - M AH0 N\nTHUMANN  TH UW1 - M AH0 N\nTHUMB  TH AH1 M\nTHUMBED  TH AH1 M D\nTHUMBING  TH AH1 - M IH0 NG\nTHUMBNAIL  TH AH1 M - N EY2 L\nTHUMBS  TH AH1 M Z\nTHUMM  TH AH1 M\nTHUMMA  TH AH1 - M AH0\nTHUMP  TH AH1 M P\nTHUMPED  TH AH1 M P T\nTHUMPER  TH AH1 M - P ER0\nTHUMPING  TH AH1 M - P IH0 NG\nTHUMPS  TH AH1 M P S\nTHUN  TH AH1 N\nTHUNBERG  TH AH1 N - B ER0 G\nTHUNDER  TH AH1 N - D ER0\nTHUNDERBIRD  TH AH1 N - D ER0 - B ER2 D\nTHUNDERBIRDS  TH AH1 N - D ER0 - B ER2 D Z\nTHUNDERBOLT  TH AH1 N - D ER0 - B AO2 L T\nTHUNDERCAT  TH AH1 N - D ER0 - K AE2 T\nTHUNDERCATS  TH AH1 N - D ER0 - K AE2 T S\nTHUNDERED  TH AH1 N - D ER0 D\nTHUNDERING  TH AH1 N - D ER0 - IH0 NG\nTHUNDEROUS  TH AH1 N - D ER0 - AH0 S\nTHUNDERS  TH AH1 N - D ER0 Z\nTHUNDERSHOWER  TH AH1 N - D ER0 - SH AW2 - W ER0\nTHUNDERSHOWERS  TH AH1 N - D ER0 - SH AW2 - W ER0 Z\nTHUNDERSTORM  TH AH1 N - D ER0 - S T AO2 R M\nTHUNDERSTORMS  TH AH1 N - D ER0 - S T AO2 R M Z\nTHUNDERSTRUCK  TH AH1 N - D ER0 - S T R AH2 K\nTHUNE  TH UW1 N\nTHUNK  TH AH1 N K\nTHUOT  TH AW1 T\nTHUOT(2)  TH UW1 T\nTHUR  DH ER1\nTHURBER  TH ER1 - B ER0\nTHURGOOD  TH ER1 - G UH0 D\nTHURLOW  TH ER1 - L OW0\nTHURM  TH ER1 M\nTHURMAN  TH ER1 - M AH0 N\nTHURMON  TH ER1 - M AH0 N\nTHURMOND  TH ER1 - M AH0 N D\nTHURMOND'S  TH ER1 - M AH0 N D Z\nTHURN  TH ER1 N\nTHURNAU  TH ER0 - N OW1\nTHURNER  TH ER1 - N ER0\nTHURNHER  TH ER1 - N ER0\nTHUROW  TH UH1 - R OW0\nTHURSBY  TH ER1 S - B IY0\nTHURSDAY  TH ER1 Z - D EY2\nTHURSDAY'S  TH ER1 Z - D IY0 Z\nTHURSDAY'S(2)  TH ER1 Z - D EY2 Z\nTHURSDAY(2)  TH ER1 Z - D IY0\nTHURSDAYS  TH ER1 Z - D EY0 Z\nTHURSDAYS(2)  TH ER1 Z - D IY0 Z\nTHURSTAN  TH ER1 - S T AH0 N\nTHURSTON  TH ER1 - S T AH0 N\nTHUS  DH AH1 S\nTHUSFAR  DH AH1 S - F AA2 R\nTHUSLY  DH AH1 S - L IY0\nTHUY  T UW1\nTHWART  TH W AO1 R T\nTHWARTED  TH W AO1 R - T AH0 D\nTHWARTED(2)  TH W AO1 R - T IH0 D\nTHWARTING  TH W AO1 R - T IH0 NG\nTHWARTS  TH W AO1 R T S\nTHWEATT  TH W IY1 T\nTHWING  TH W IH1 NG\nTHY  DH AY1\nTHYGERSON  TH AY1 - G ER0 - S AH0 N\nTHYME  TH AY1 M\nTHYMIDINE  TH IH1 - M IH0 - D IY2 N\nTHYRA  TH AY1 - R AH0\nTHYROID  TH AY1 - R OY0 D\nTHYSSEN  T AY1 - S AH0 N\nTHYSSEN'S  T AY1 - S AH0 N Z\nTI  T IY1\nTIA  T IY1 - AH0\nTIAACREF  T IY1 - AH0 - K R EH2 F\nTIAACREF'S  T IY1 - AH0 - K R EH2 F S\nTIAN  T Y AA1 N\nTIANANMEN  T IY0 - EH1 - N AE0 N - M EH2 N\nTIANJIN  T IY0 - AE1 N - JH IH0 N\nTIANO  T IY0 - AA1 - N OW0\nTIARA  T IY0 - AA1 - R AH0\nTIBBALS  T IH1 - B AH0 L Z\nTIBBETS  T IH1 - B IH0 T S\nTIBBETT  T IH1 - B IH0 T\nTIBBETTS  T IH1 - B IH0 T S\nTIBBIE  T IH1 - B IY0\nTIBBITS  T IH1 - B IH0 T S\nTIBBITTS  T IH1 - B IH0 T S\nTIBBS  T IH1 B Z\nTIBBY  T IH1 - B IY0\nTIBER  T AY1 - B ER0\nTIBERI  T IY0 - B EH1 - R IY0\nTIBERIA  T IH0 - B IY1 - R IY0 - AH0\nTIBERIO  T IH0 - B IY1 - R IY0 - OW0\nTIBET  T AH0 - B EH1 T\nTIBETAN  T IH0 - B EH1 - T AH0 N\nTIBETANS  T AH0 - B EH1 - T AH0 N Z\nTIBIA  T IH1 - B IY0 - AH0\nTIBIDOW  T IH1 - B IY0 - D OW0\nTIC  T IH1 K\nTICE  T AY1 S\nTICER  T AY1 - S ER0\nTICHENOR  T IH1 - K AH0 - N ER0\nTICHY  T IH1 - CH IY0\nTICINUS  T IH0 - S IY1 - N AH0 S\nTICK  T IH1 K\nTICKED  T IH1 K T\nTICKER  T IH1 - K ER0\nTICKET  T IH1 - K AH0 T\nTICKET'S  T IH1 - K AH0 T S\nTICKET(2)  T IH1 - K IH0 T\nTICKETED  T IH1 - K AH0 - T IH0 D\nTICKETING  T IH1 - K AH0 - T IH0 NG\nTICKETLESS  T IH1 - K AH0 T - L AH0 S\nTICKETMASTER  T IH1 - K IH0 T - M AE2 - S T ER0\nTICKETMASTER'S  T IH1 - K AH0 T - M AE2 - S T ER0 Z\nTICKETRON  T IH1 - K AH0 - T R AA0 N\nTICKETS  T IH1 - K AH0 T S\nTICKETS(2)  T IH1 - K IH0 T S\nTICKING  T IH1 - K IH0 NG\nTICKLE  T IH1 - K AH0 L\nTICKLED  T IH1 - K AH0 L D\nTICKLES  T IH1 - K AH0 L Z\nTICKLISH  T IH1 - K AH0 L - IH0 SH\nTICKNER  T IH1 K - N ER0\nTICKNOR  T IH1 K - N ER0\nTICKS  T IH1 K S\nTICONDEROGA  T AY0 - K AA2 N - D ER0 - OW1 - G AH0\nTICONDEROGA'S  T AY0 - K AA2 N - D ER0 - OW1 - G AH0 Z\nTICOR  T AY1 - K AO2 R\nTICS  T IH1 K S\nTIDAL  T AY1 - D AH0 L\nTIDBALL  T IH1 D - B AO2 L\nTIDBIT  T IH1 D - B IH2 T\nTIDBITS  T IH1 D - B IH0 T S\nTIDD  T IH1 D\nTIDDLYWINKS  T IH1 D - L IH0 - W IH0 NG K S\nTIDDLYWINKS(2)  T IH1 D - L IY0 - W IH0 NG K S\nTIDE  T AY1 D\nTIDES  T AY1 D Z\nTIDEWATER  T AY1 D - W AO2 - T ER0\nTIDING  T AY1 - D IH0 NG\nTIDINGS  T AY1 - D IH0 NG Z\nTIDMORE  T IH1 D - M AO0 R\nTIDRICK  T IH1 - D R IH0 K\nTIDWELL  T IH1 - D W AH0 L\nTIDY  T AY1 - D IY0\nTIE  T AY1\nTIED  T AY1 D\nTIEDE  T IY1 D\nTIEDEMAN  T IY1 D - M AH0 N\nTIEDEMANN  T IY1 D - M AH0 N\nTIEDT  T IY1 D T\nTIEGS  T IY1 G Z\nTIEING  T AY1 - IH0 NG\nTIEKEN  T IY1 - K AH0 N\nTIELESS  T AY1 - L AH0 S\nTIEMAN  T IY1 - M AH0 N\nTIEMANN  T IY1 - M AH0 N\nTIEMEYER  T IY1 - M AY0 - ER0\nTIEN  T Y EH1 N\nTIEN-FU  T Y EH1 N - F UW1\nTIENANMEN  T Y EH0 - N AH0 N - M EH1 N\nTIER  T IY1 R\nTIERCE  T IY1 R S\nTIERCO  T IY1 R - K OW0\nTIERED  T IY1 R D\nTIERNAN  T IH1 R - N AH0 N\nTIERNEY  T IH1 R - N IY0\nTIERNO  T IH1 R - N OW0\nTIERS  T IY1 R Z\nTIES  T AY1 Z\nTIESZEN  T IY1 - SH AH0 N\nTIETJE  T IY1 T JH\nTIETJEN  T IY1 T - JH AH0 N\nTIETMEYER  T IY1 T - M AY2 R\nTIETMEYER(2)  T AY1 T - M AY2 R\nTIETZ  T IY1 T S\nTIETZE  T IY1 T Z\nTIETZE(2)  T IY1 T - Z IY0\nTIEU  T IY0 - UW1\nTIFF  T IH1 F\nTIFFANY  T IH1 - F AH0 - N IY0\nTIFFANY'S  T IH1 - F AH0 - N IY0 Z\nTIFFIN  T IH1 - F IH0 N\nTIFFT  T IH1 F T\nTIFT  T IH1 F T\nTIFTON  T IH1 F - T AH0 N\nTIG  T IH1 G\nTIGAR  T AY1 - G AA2 R\nTIGAR(2)  T AY1 - G ER0\nTIGER  T AY1 - G ER0\nTIGER'S  T AY1 - G ER0 Z\nTIGERA  T IH0 - JH EH1 - R AH0\nTIGERS  T AY1 - G ER0 Z\nTIGERS'  T AY1 - G ER0 Z\nTIGERT  T AY1 - G ER0 T\nTIGGES  T IH1 G Z\nTIGGS  T IH1 G Z\nTIGHE  T AY1 G\nTIGHT  T AY1 T\nTIGHTEN  T AY1 - T AH0 N\nTIGHTENED  T AY1 - T AH0 N D\nTIGHTENING  T AY1 - T AH0 N - IH0 NG\nTIGHTENING(2)  T AY1 T - N IH0 NG\nTIGHTENINGS  T AY1 - T AH0 N - IH0 NG Z\nTIGHTENINGS(2)  T AY1 T - N IH0 NG Z\nTIGHTENS  T AY1 - T AH0 N Z\nTIGHTER  T AY1 - T ER0\nTIGHTEST  T AY1 - T AH0 S T\nTIGHTFISTED  T AY1 T - F IH1 - S T IH0 D\nTIGHTLY  T AY1 T - L IY0\nTIGHTNESS  T AY1 T - N AH0 S\nTIGHTROPE  T AY1 T - R OW2 P\nTIGHTS  T AY1 T S\nTIGHTWAD  T AY1 T - W AA2 D\nTIGNER  T AY1 G - N ER0\nTIGNOR  T IH1 G - N ER0\nTIGON  T IH1 - G AH0 N\nTIGREAN  T IH0 - G R IY1 N\nTIGRIS  T AY1 - G R AH0 S\nTIGUE  T IY1 G\nTIJERINA  T IY0 - Y EH0 - R IY1 - N AH0\nTIJUANA  T IH0 - W AA1 - N AH0\nTIKE  T AY1 K\nTIKES  T AY1 K S\nTIL  T IH1 L\nTILBURY  T IH1 L - B EH2 - R IY0\nTILDA  T IH1 L - D AH0\nTILDEN  T IH1 L - D AH0 N\nTILE  T AY1 L\nTILED  T AY1 L D\nTILES  T AY1 L Z\nTILEY  T AY1 - L IY0\nTILFORD  T IH1 L - F ER0 D\nTILGHMAN  T IH1 L - M AH0 N\nTILL  T IH1 L\nTILLER  T IH1 - L ER0\nTILLERY  T IH1 - L ER0 - IY0\nTILLES  T AY1 L Z\nTILLETT  T IH1 - L IH0 T\nTILLEY  T IH1 - L IY0\nTILLIE  T IH1 - L IY0\nTILLING  T IH1 - L IH0 NG\nTILLINGHAST  T IH1 - L IH0 NG - HH AE2 S T\nTILLIS  T IH1 - L IH0 S\nTILLISON  T IH1 - L IH0 - S AH0 N\nTILLMAN  T IH1 L - M AH0 N\nTILLMON  T IH1 L - M AH0 N\nTILLOTSON  T IH1 - L AH0 T - S AH0 N\nTILLSON  T IH1 L - S AH0 N\nTILLY  T IH1 - L IY0\nTILMAN  T IH1 L - M AH0 N\nTILNEY  T IH1 L - N IY0\nTILSON  T IH1 L - S AH0 N\nTILT  T IH1 L T\nTILTED  T IH1 L - T AH0 D\nTILTED(2)  T IH1 L - T IH0 D\nTILTH  T IH1 L TH\nTILTING  T IH1 L - T IH0 NG\nTILTON  T IH1 L - T AH0 N\nTILTS  T IH1 L T S\nTIM  T IH1 M\nTIM'S  T IH1 M Z\nTIMAN  T AY1 - M AH0 N\nTIMBER  T IH1 M - B ER0\nTIMBERLAKE  T IH1 M - B ER0 - L EY2 K\nTIMBERLAND  T IH1 M - B ER0 - L AE2 N D\nTIMBERLANDS  T IH1 M - B ER0 - L AE2 N D Z\nTIMBERLINE  T IH1 M - B ER0 - L AY2 N\nTIMBERMAN  T IH1 M - B ER0 - M AH0 N\nTIMBERS  T IH1 M - B ER0 Z\nTIMBLIN  T IH1 M - B L IH0 N\nTIMBRE  T IH1 M - B ER0\nTIMBROOK  T IH1 M - B R UH2 K\nTIMBS  T IH1 M Z\nTIMBUKTU  T IH2 M - B AH0 K - T UW1\nTIME  T AY1 M\nTIME'S  T AY1 M Z\nTIMED  T AY1 M D\nTIMEFRAME  T AY1 M - F R EY2 M\nTIMELESS  T AY1 M - L AH0 S\nTIMELINE  T AY1 M - L AY0 N\nTIMELINES  T AY1 M - L AY0 N Z\nTIMELINESS  T AY1 M - L IY0 - N AH0 S\nTIMELY  T AY1 M - L IY0\nTIMEOUT  T AY1 M - AW2 T\nTIMEPIECE  T AY1 M - P IY2 S\nTIMEPLEX  T AY1 M - P L EH2 K S\nTIMER  T AY1 - M ER0\nTIMERS  T AY1 - M ER0 Z\nTIMES  T AY1 M Z\nTIMES'  T AY1 M Z\nTIMES'S  T AY1 M - Z IH0 Z\nTIMESHARE  T AY1 M - SH EH2 R\nTIMETABLE  T AY1 M - T EY2 - B AH0 L\nTIMETABLES  T AY1 M - T EY2 - B AH0 L Z\nTIMEWISE  T AY1 M - W AY2 Z\nTIMEX  T AY1 - M EH0 K S\nTIMID  T IH1 - M IH0 D\nTIMIDITY  T AH0 - M IH1 - D AH0 - T IY0\nTIMIDLY  T IH1 - M AH0 D - L IY0\nTIMING  T AY1 - M IH0 NG\nTIMISOARA  T IH2 - M AH0 - S OW0 - AA1 - R AH0\nTIMISOARA(2)  T IH2 - M AH0 - S W AA1 - R AH0\nTIMKEN  T IH1 M - K AH0 N\nTIMKO  T IH1 M - K OW0\nTIMLEN  T IH1 M - L AH0 N\nTIMLIN  T IH1 M - L IH0 N\nTIMM  T IH1 M\nTIMME  T IH1 M\nTIMMENY  T IH1 - M AH0 - N IY0\nTIMMER  T IH1 - M ER0\nTIMMERMAN  T IH1 - M ER0 - M AH0 N\nTIMMERMANN  T IH1 - M ER0 - M AH0 N\nTIMMERS  T IH1 - M ER0 Z\nTIMMIE  T IH1 - M IY0\nTIMMINS  T IH1 - M IH0 N Z\nTIMMONS  T IH1 - M AH0 N Z\nTIMMS  T IH1 M Z\nTIMMY  T IH1 - M IY0\nTIMON  T AY1 - M AH0 N\nTIMONEY  T IH1 - M AH0 - N IY0\nTIMOR  T IY0 - M AO1 R\nTIMOR'S  T IY0 - M AO1 R Z\nTIMORESE  T IY2 - M AO0 - R IY1 Z\nTIMOROUS  T IH1 - M ER0 - AH0 S\nTIMOTHEA  T IH0 - M AH0 - DH IY1 - AH0\nTIMOTHY  T IH1 - M AH0 - TH IY0\nTIMPANI  T IH1 M - P AH0 - N IY2\nTIMPE  T IH1 M P\nTIMPONE  T IY0 M - P OW1 - N IY0\nTIMPSON  T IH1 M P - S AH0 N\nTIMS  T IH1 M Z\nTIMSON  T IH1 M - S AH0 N\nTIN  T IH1 N\nTINA  T IY1 - N AH0\nTINA'S  T IY1 - N AH0 Z\nTINAJERO  T IY0 - N AA0 - Y EH1 - R OW0\nTINCH  T IH1 N CH\nTINCHER  T IH1 N - CH ER0\nTINCTURE  T IH1 NG K - CH ER0\nTINCTURES  T IH1 NG K - CH ER0 Z\nTINDAL  T IH1 N - D AH0 L\nTINDALL  T IH1 N - D AH0 L\nTINDEL  T IH1 N - D AH0 L\nTINDELL  T IH1 N - D AH0 L\nTINDER  T IH1 N - D ER0\nTINDERBOX  T IH1 N - D ER0 - B AA2 K S\nTINDLE  T IH1 N - D AH0 L\nTINDOL  T IH1 N - D AH0 L\nTINE  T AY1 N\nTINER  T AY1 - N ER0\nTINES  T AY1 N Z\nTING  T IH1 NG\nTINGE  T IH1 N JH\nTINGED  T IH1 NG D\nTINGEN  T IH1 - NG AH0 N\nTINGEY  T IH1 NG - G IY0\nTINGLE  T IH1 NG - G AH0 L\nTINGLER  T IH1 NG - G AH0 - L ER0\nTINGLER(2)  T IH1 NG - G L ER0\nTINGLEY  T IH1 NG - G L IY0\nTINGLING  T IH1 NG - G AH0 L - IH0 NG\nTINGLING(2)  T IH1 NG - G L IH0 NG\nTINIER  T AY1 - N IY0 - ER0\nTINIEST  T AY1 - N IY0 - AH0 S T\nTINKER  T IH1 NG - K ER0\nTINKER'S  T IH1 NG - K ER0 Z\nTINKERED  T IH1 NG - K ER0 D\nTINKERER  T IH1 NG - K ER0 - ER0\nTINKERERS  T IH1 NG - K ER0 - ER0 Z\nTINKERING  T IH1 NG - K ER0 - IH0 NG\nTINKERING(2)  T IH1 NG - K R IH0 NG\nTINKEY  T IH1 N - K IY2\nTINKHAM  T IH1 NG - K AH0 M\nTINKLE  T IH1 NG - K AH0 L\nTINKLED  T IH1 NG - K AH0 L D\nTINKLER  T IH1 NG - K AH0 - L ER0\nTINKLER(2)  T IH1 NG - K L ER0\nTINKLING  T IH1 NG - K AH0 L - IH0 NG\nTINKLING(2)  T IH1 NG - K L IH0 NG\nTINLEY  T IH1 N - L IY0\nTINMAN  T IH1 N - M AE2 N\nTINNELL  T IH1 - N AH0 L\nTINNEY  T IH1 - N IY0\nTINNIN  T IH1 - N IH0 N\nTINNON  T IH1 - N AH0 N\nTINNY  T IH1 - N IY0\nTINO  T IY1 - N OW0\nTINOCO  T IY0 - N OW1 - K OW0\nTINS  T IH1 N Z\nTINSEL  T IH1 N - S AH0 L\nTINSELTOWN  T IH1 N - S AH0 L - T AW2 N\nTINSLEY  T IH1 N S - L IY0\nTINSMAN  T IH1 N S - M AH0 N\nTINT  T IH1 N T\nTINTED  T IH1 N - T IH0 D\nTINTO  T IH1 N - T OW0\nTINTON  T IH1 N - T AH0 N\nTINTS  T IH1 N T S\nTINTYPE  T IH1 N - T AY2 P\nTINY  T AY1 - N IY0\nTIP  T IH1 P\nTIPA  T IH1 - P AH0\nTIPHOOK  T IH1 P - HH UH2 K\nTIPLER  T AY1 - P AH0 - L ER0\nTIPLER(2)  T AY1 P - L ER0\nTIPO  T IY1 - P OW0\nTIPOFF  T IH1 - P AO2 F\nTIPP  T IH1 P\nTIPPED  T IH1 P T\nTIPPEN  T IH1 - P AH0 N\nTIPPENS  T IH1 - P AH0 N Z\nTIPPER  T IH1 - P ER0\nTIPPERARY  T IH1 - P ER0 - EH2 - R IY0\nTIPPERS  T IH1 - P ER0 Z\nTIPPET  T IH1 - P AH0 T\nTIPPETS  T IH1 - P IH0 T S\nTIPPETT  T IH1 - P IH0 T\nTIPPETTS  T IH1 - P IH0 T S\nTIPPIE  T IH1 - P IY0\nTIPPIN  T IH1 - P IH0 N\nTIPPING  T IH1 - P IH0 NG\nTIPPINS  T IH1 - P IH0 N Z\nTIPPIT  T IH1 - P IH0 T\nTIPPITT  T IH1 - P IH0 T\nTIPPLE  T IH1 - P AH0 L\nTIPPS  T IH1 P S\nTIPPY  T IH1 - P IY0\nTIPPY'S  T IH1 - P IY0 Z\nTIPS  T IH1 P S\nTIPSTER  T IH1 P - S T ER0\nTIPSWORD  T IH1 P - S AO2 R D\nTIPSY  T IH1 P - S IY0\nTIPTOE  T IH1 P - T OW2\nTIPTOED  T IH1 P - T OW2 D\nTIPTOEING  T IH1 P - T OW2 - IH0 NG\nTIPTON  T IH1 P - T AH0 N\nTIRADE  T AY0 - R EY1 D\nTIRADES  T AY0 - R EY1 D Z\nTIRADO  T IH0 - R AA1 - D OW0\nTIRAMISU  T IH2 - R AH0 - M IH1 - S UW2\nTIRANA  T IH1 - R AA0 - N AH0\nTIRANE  T IH0 - R EY1 N\nTIRE  T AY1 - ER0\nTIRED  T AY1 - ER0 D\nTIREDNESS  T AY1 - ER0 D - N IH0 S\nTIRELESS  T AY1 - ER0 - L AH0 S\nTIRELESSLY  T AY1 R - L AH0 S - L IY0\nTIRELLO  T IH0 - R EH1 - L OW0\nTIREMAKER  T AY1 R - M EY2 - K ER0\nTIRES  T AY1 - ER0 Z\nTIRESOME  T AY1 - ER0 - S AH0 M\nTIREY  T AY1 - R IY0\nTIRING  T AY1 - R IH0 NG\nTIRONE  T IH0 - R OW1 N\nTIROS  T AY1 - R OW0 Z\nTIRPAK  T ER1 - P AH0 K\nTIRRELL  T IH0 - R EY1 L\nTIS  T IH1 Z\nTISCH  T IH1 SH\nTISCH'S  T IH1 - SH IH0 Z\nTISCHER  T IH1 - SH ER0\nTISCHLER  T IH1 - SH AH0 L - ER0\nTISCHLER(2)  T IH1 SH - L ER0\nTISDALE  T IH1 S - D EY0 L\nTISDEL  T IH1 S - D AH0 L\nTISDELL  T IH1 S - D AH0 L\nTISH  T IH1 SH\nTISH'S  T IH1 - SH IH0 Z\nTISHER  T IH1 - SH ER0\nTISHLER  T IH1 SH - L ER0\nTISHMAN  T IH1 SH - M AH0 N\nTISON  T IH1 - S AH0 N\nTISSUE  T IH1 - S Y UW2\nTISSUE(2)  T IH1 - SH UW0\nTISSUES  T IH1 - S Y UW2 Z\nTISSUES(2)  T IH1 - SH UW0 Z\nTIT  T IH1 T\nTIT-FOR-TAT  T IH1 T - F AO2 R - T AE1 T\nTITA  T IY1 - T AH0\nTITAN  T AY1 - T AH0 N\nTITANATE  T AY1 - T AH0 - N EY2 T\nTITANIA  T AH0 - T AA1 - N Y AH0\nTITANIC  T AY0 - T AE1 - N IH0 K\nTITANIUM  T AY0 - T EY1 - N IY0 - AH0 M\nTITANS  T AY1 - T AH0 N Z\nTITCOMB  T IH1 T - K AH0 M\nTITHE  T AY1 DH\nTITHING  T AY1 - DH IH0 NG\nTITIAN  T IH1 - SH AH0 N\nTITILLATE  T IH1 - T AH0 - L EY2 T\nTITILLATED  T IH1 - T AH0 - L EY2 - T IH0 D\nTITILLATING  T IH1 - T AH0 - L EY2 - T IH0 NG\nTITILLATION  T IH2 - T IH0 - L EY1 - SH AH0 N\nTITLE  T AY1 - T AH0 L\nTITLED  T AY1 - T AH0 L D\nTITLEHOLDER  T AY1 - T AH0 L - HH OW2 L - D ER0\nTITLES  T AY1 - T AH0 L Z\nTITLOW  T IH1 T - L OW2\nTITMAN  T IH1 T - M AH0 N\nTITO  T IY1 - T OW0\nTITO'S  T IY1 - T OW0 Z\nTITONE  T IH1 - T AH0 N\nTITSWORTH  T IH1 T - S W ER2 TH\nTITTEL  T IH1 - T AH0 L\nTITTER  T IH1 - T ER0\nTITTERINGTON  T IH1 - T ER0 - IH0 NG - T AH0 N\nTITTLE  T IH1 - T AH0 L\nTITTSWORTH  T IH1 T - S W ER0 TH\nTITULAR  T IH1 - CH AH0 - L ER0\nTITUS  T AY1 - T AH0 S\nTITUSVILLE  T AY1 - T AH0 S - V IH2 L\nTITZER  T IH1 T - Z ER0\nTIVOLI  T IH1 - V AH0 - L IY0\nTIZZY  T IH1 - Z IY0\nTJADEN  JH EY1 - D AH0 N\nTJARKS  JH AA1 R K S\nTKACH  K AE1 CH\nTKACZ  K AA1 CH\nTLINGIT  T L IY1 NG - G IH0 T\nTO  T UW1\nTO(2)  T IH0\nTO(3)  T AH0\nTOA  T OW1 - AH0\nTOAD  T OW1 D\nTOADS  T OW1 D Z\nTOAL  T OW1 L\nTOALSON  T OW1 L - S AH0 N\nTOALSTER  T OW1 L - S T ER0\nTOAST  T OW1 S T\nTOASTED  T OW1 - S T IH0 D\nTOASTER  T OW1 - S T ER0\nTOASTERS  T OW1 - S T ER0 Z\nTOASTING  T OW1 - S T IH0 NG\nTOASTMASTER  T OW1 S T - M AE2 - S T ER0\nTOASTS  T OW1 S T S\nTOASTS(2)  T OW1 S S\nTOASTS(3)  T OW1 S\nTOBACCO  T AH0 - B AE1 - K OW2\nTOBACCO'S  T AH0 - B AE1 - K OW2 Z\nTOBACCOS  T AH0 - B AE1 - K OW2 Z\nTOBACK  CH UW1 - B AE0 K\nTOBAGO  T AH0 - B EY1 - G OW0\nTOBAR  T OW1 - B ER0\nTOBE  T OW1 B\nTOBEN  T OW1 - B AH0 N\nTOBER  T OW1 - B ER0\nTOBEY  T OW1 - B IY0\nTOBIA  T OW1 - B IY0 - AH0\nTOBIAS  T AH0 - B AY1 - AH0 S\nTOBIASON  T AH0 - B AY1 - AH0 - S AH0 N\nTOBIE  T OW1 - B IY0\nTOBIN  T OW1 - B IH0 N\nTOBLER  T OW1 - B AH0 L - ER0\nTOBLER(2)  T OW1 - B L ER0\nTOBOGGAN  T AH0 - B AA1 - G AH0 N\nTOBOGGANS  T AH0 - B AA1 - G AH0 N Z\nTOBOLSKI  T AH0 - B OW1 L - S K IY0\nTOBU  T OW0 - B UW1\nTOBY  T OW1 - B IY0\nTOCCI  T OW1 - CH IY0\nTOCCO  T AA1 - K OW0\nTOCK  T AA1 K\nTOCQUEVILLE  T OW1 K - V IH0 L\nTOCZEK  T AA1 - CH EH0 K\nTOD  T AA1 D\nTODA  T OW1 - D AH0\nTODARO  T OW0 - D AA1 - R OW0\nTODAY  T AH0 - D EY1\nTODAY'LL  T AH0 - D EY1 L\nTODAY'LL(2)  T UW0 - D EY1 L\nTODAY'S  T AH0 - D EY1 Z\nTODAY'S(2)  T UW1 - D EY0 Z\nTODAY(2)  T UW0 - D EY1\nTODAYS  T AH0 - D EY1 Z\nTODAYS(2)  T UW1 - D EY0 Z\nTODD  T AA1 D\nTODD'S  T AA1 D Z\nTODDLE  T AA1 - D AH0 L\nTODDLER  T AA1 D - L ER0\nTODDLERS  T AA1 D - L ER0 Z\nTODDLING  T AA1 D - L IH0 NG\nTODHUNTER  T AA1 D - HH AH2 N - T ER0\nTODI'S  T OW1 - D IY0 S\nTODISCO  T OW0 - D IY1 - S K OW0\nTODMAN  T AA1 D - M AH0 N\nTODOROFF  T AA1 - D ER0 - AO0 F\nTODT  T AA1 D T\nTOE  T OW1\nTOED  T OW1 D\nTOEHOLD  T OW1 - HH OW2 L D\nTOEING  T OW1 - IH0 NG\nTOELLE  T OW1 L\nTOENAIL  T OW1 - N EY2 L\nTOENAILS  T OW1 - N EY2 L Z\nTOENJES  T OW1 N - JH IH0 Z\nTOENSING  T OW1 N - S IH0 NG\nTOEPFER  T OW1 P - F ER0\nTOES  T OW1 Z\nTOEWS  T AA1 - UW0 Z\nTOFFEE  T AA1 - F IY0\nTOFFLER  T AO1 F - L ER0\nTOFT  T AA1 F T\nTOFTE  T OW1 F T\nTOFU  T OW1 - F UW0\nTOGA  T OW1 - G AH0\nTOGETHER  T AH0 - G EH1 - DH ER0\nTOGETHERNESS  T AH0 - G EH1 - DH ER0 - N AH0 S\nTOGETHERS  T AH0 - G EH1 - DH ER0 Z\nTOGGLE  T AA1 - G AH0 L\nTOGGLED  T AA1 - G AH0 L D\nTOGGLING  T AA1 - G L IH0 NG\nTOGNINO  T AA2 G - N IY1 - N OW0\nTOGO  T OW1 - G OW0\nTOGS  T AA1 G Z\nTOIL  T OY1 L\nTOILED  T OY1 L D\nTOILET  T OY1 - L AH0 T\nTOILETRIES  T OY1 - L AH0 - T R IY0 Z\nTOILETRY  T OY1 - L AH0 - T R IY0\nTOILETS  T OY1 - L AH0 T S\nTOILING  T OY1 - L IH0 NG\nTOILS  T OY1 L Z\nTOITY  T OY1 - T IY0\nTOIVONEN  T OY1 - V AH0 - N AH0 N\nTOKAI  T OW0 - K AY1\nTOKAR  T OW0 - K AA1 R\nTOKARCZYK  T AA1 - K ER0 - CH IH0 K\nTOKARS  T OW0 - K AA1 R Z\nTOKARSKI  T AH0 - K AA1 R S - K IY0\nTOKARZ  T OW1 - K AA0 R Z\nTOKEN  T OW1 - K AH0 N\nTOKENISM  T OW1 - K AH0 - N IH2 - Z AH0 M\nTOKENS  T OW1 - K AH0 N Z\nTOKIO  T OW0 - K IY1 - OW0\nTOKKIN  T AA1 - K IH0 N\nTOKOS  T OW1 - K OW0 S\nTOKUNAGA  T OW0 - K UW0 - N AA1 - G AH0\nTOKUO  T AA1 - K Y UW0 - OW0\nTOKUYAMA  T OW2 - K UW2 - Y AA1 - M AH0\nTOKYO  T OW1 - K IY0 - OW2\nTOKYO'S  T OW1 - K IY0 - OW2 Z\nTOKYU  T OW1 - K Y UW0\nTOLAN  T OW1 - L AH0 N\nTOLAND  T OW1 - L AH0 N D\nTOLANTHE  T OW0 - L AA1 N - DH IY0\nTOLAR  T OW1 - L ER0\nTOLBERT  T OW1 L - B ER0 T\nTOLD  T OW1 L D\nTOLDRIAN  T OW1 L - D R IY0 - AH0 N\nTOLE  T OW1 L\nTOLEDO  T AH0 - L IY1 - D OW0\nTOLEN  T OW1 - L AH0 N\nTOLENTINO  T OW2 - L EH0 N - T IY1 - N OW0\nTOLER  T OW1 - L ER0\nTOLERABLE  T AA1 - L ER0 - AH0 - B AH0 L\nTOLERANCE  T AA1 - L ER0 - AH0 N S\nTOLERANCES  T AA1 - L ER0 - AH0 N - S IH0 Z\nTOLERANT  T AA1 - L ER0 - AH0 N T\nTOLERATE  T AA1 - L ER0 - EY2 T\nTOLERATED  T AA1 - L ER0 - EY2 - T AH0 D\nTOLERATES  T AO1 - L ER0 - EY2 T S\nTOLERATING  T AA1 - L ER0 - EY2 - T IH0 NG\nTOLERATION  T AA2 - L ER0 - EY1 - SH AH0 N\nTOLES  T OW1 L Z\nTOLHURST  T OW1 L - HH ER0 S T\nTOLIN  T OW1 - L IH0 N\nTOLIVER  T OW1 - L IH0 - V ER0\nTOLL  T OW1 L\nTOLLAND  T AA1 - L AH0 N D\nTOLLAND'S  T AA1 - L AH0 N D Z\nTOLLBOOTH  T OW1 L - B UW2 TH\nTOLLE  T AA1 L\nTOLLED  T OW1 L D\nTOLLEFSEN  T AA1 - L IH0 F - S AH0 N\nTOLLEFSON  T AA1 - L IH0 F - S AH0 N\nTOLLER  T OW1 - L ER0\nTOLLES  T OW1 L Z\nTOLLESON  T AA1 - L IH0 - S AH0 N\nTOLLETT  T AA1 - L IH0 T\nTOLLEY  T AA1 - L IY0\nTOLLING  T OW1 - L IH0 NG\nTOLLISON  T AA1 - L IH0 - S AH0 N\nTOLLIVER  T OW1 - L IH0 - V ER0\nTOLLS  T OW1 L Z\nTOLLY  T OW1 - L IY0\nTOLMAN  T AA1 L - M AH0 N\nTOLSMA  T OW1 L - S M AH0\nTOLSON  T OW1 L - S AH0 N\nTOLSTOY  T OW1 L - S T OY2\nTOLSTOY'S  T OW1 L - S T OY2 Z\nTOM  T AA1 M\nTOM'S  T AA1 M Z\nTOMA  T OW1 - M AH0\nTOMAHAWK  T AA1 - M AH0 - HH AO2 K\nTOMAHAWKS  T AA1 - M AH0 - HH AO2 K S\nTOMAINO  T OW0 - M AA0 - IY1 - N OW0\nTOMAKO  T OW0 - M AA1 - K OW0\nTOMAKO'S  T OW0 - M AA1 - K OW0 Z\nTOMAN  T OW1 - M AH0 N\nTOMANEK  T AA1 - M AH0 - N IH0 K\nTOMARO  T OW0 - M AA1 - R OW0\nTOMAS  T OW0 - M AA1 S\nTOMASEK  T AH0 - M AA1 - S EH0 K\nTOMASELLI  T OW0 - M AA0 - S EH1 - L IY0\nTOMASELLO  T OW0 - M AA0 - S EH1 - L OW0\nTOMASETTI  T OW0 - M AA0 - S EH1 - T IY0\nTOMASI  T OW0 - M AA1 - S IY0\nTOMASIC  T AH0 - M AA1 - S IH0 K\nTOMASIK  T AH0 - M AA1 - S IH0 K\nTOMASINA  T AO2 - M AH0 - S IY1 - N AH0\nTOMASINE  T OW0 - M AA0 - S IY1 - N IY0\nTOMASINI  T OW0 - M AA0 - S IY1 - N IY0\nTOMASINO  T OW0 - M AA0 - S IY1 - N OW0\nTOMASKO  T AH0 - M AA1 - S K OW0\nTOMASO  T OW0 - M AA1 - S OW0\nTOMASSETTI  T OW0 - M AA0 - S EH1 - T IY0\nTOMASSI  T OW0 - M AA1 - S IY0\nTOMASSO  T OW0 - M AA1 - S OW0\nTOMASULO  T OW0 - M AA0 - S UW1 - L OW0\nTOMASZEWSKI  T AH0 - M AH0 - SH EH1 F S - K IY0\nTOMATO  T AH0 - M EY1 - T OW2\nTOMATO(2)  T AH0 - M AA1 - T OW2\nTOMATOES  T AH0 - M EY1 - T OW0 Z\nTOMATOES(2)  T AH0 - M AA1 - T OW0 Z\nTOMATOS  T AH0 - M EY1 - T OW2 Z\nTOMATOS(2)  T AH0 - M AA1 - T OW2 Z\nTOMAYKO  T AH0 - M AY1 - K OW0\nTOMB  T UW1 M\nTOMBERLIN  T AA1 M - B ER0 - L IH0 N\nTOMBLIKE  T UW1 M - L AY2 K\nTOMBLIN  T AA1 M - B L IH0 N\nTOMBOY  T AA1 M - B OY2\nTOMBS  T UW1 M Z\nTOMBSTONE  T UW1 M - S T OW2 N\nTOMBSTONES  T UW1 M - S T OW2 N Z\nTOMCAT  T AA1 M - K AE2 T\nTOMCZAK  T AA1 M - CH AE0 K\nTOMCZYK  T AA1 M - CH IH0 K\nTOME  T OW1 M\nTOMEI  T AA1 - M AY0\nTOMEK  T OW1 - M EH0 K\nTOMEO  T OW1 - M IY0 - OW0\nTOMER  T OW1 - M ER0\nTOMERLIN  T AA1 - M ER0 - L IH0 N\nTOMES  T OW1 M Z\nTOMEY  T OW1 - M IY0\nTOMICH  T AA1 - M IH0 K\nTOMIICHI  T OW2 - M IY0 - IY1 - CH IY0\nTOMILSON  T AA1 - M AH0 L - S AH0 N\nTOMITA  T OW0 - M IY1 - T AH0\nTOMKIEWICZ  T AA1 M - K AH0 - V IH0 CH\nTOMKIN  T AA1 M - K IH0 N\nTOMKINS  T AA1 M - K IH0 N Z\nTOMKINSON  T AA1 M - K IH0 N - S AH0 N\nTOMKO  T AA1 M - K OW0\nTOMLIN  T AA1 M - L IH0 N\nTOMLINSON  T AA1 M - L IH0 N - S AH0 N\nTOMMIE  T AA1 - M IY0\nTOMMY  T AA1 - M IY0\nTOMMY'S  T AA1 - M IY0 Z\nTOMORROW  T AH0 - M AA1 - R OW2\nTOMORROW'S  T AH0 - M AA1 - R OW2 Z\nTOMORROW'S(2)  T UW0 - M AA1 - R OW2 Z\nTOMORROW(2)  T UW0 - M AA1 - R OW2\nTOMORROWS  T AH0 - M AA1 - R OW2 Z\nTOMORROWS(2)  T UW0 - M AA1 - R OW2 Z\nTOMPANE  T AA1 M - P EY2 N\nTOMPKINS  T AA1 M P - K IH0 N Z\nTOMPKINSES  T AA1 M P - K IH0 N - S IH0 Z\nTOMPSON  T AA1 M P - S AH0 N\nTOMS  T AA1 M Z\nTOMSIC  T AA1 M - S IH0 K\nTOMSON  T AA1 M - S AH0 N\nTON  T AH1 N\nTONAL  T OW1 - N AH0 L\nTONALITIES  T OW0 - N AE1 - L AH0 - T IY0 Z\nTONALITY  T OW0 - N AE1 - L AH0 - T IY0\nTONAWANDA  T AA2 - N AH0 W - AA1 N - D AH0\nTONDA  T AA1 N - D AH0\nTONDREAU  T AH0 N - D R OW1\nTONE  T OW1 N\nTONED  T OW1 N D\nTONEGAWA  T OW2 - N IH0 - G AA1 - W AH0\nTONELLI  T OW0 - N EH1 - L IY0\nTONER  T OW1 - N ER0\nTONES  T OW1 N Z\nTONEY  T OW1 - N IY0\nTONG  T AO1 NG\nTONGE  T AA1 N JH\nTONGS  T AA1 NG Z\nTONGS(2)  T AO1 NG Z\nTONGUE  T AH1 NG\nTONGUED  T AH1 NG D\nTONGUES  T AH1 NG Z\nTONI  T OW1 - N IY0\nTONIA  T OW1 - N IY0 - AH0\nTONIC  T AA1 - N IH0 K\nTONICS  T AA1 - N IH0 K S\nTONIE  T OW1 - N IY0\nTONIEST  T OW0 - N IY1 S T\nTONIGHT  T AH0 - N AY1 T\nTONIGHT'S  T AH0 - N AY1 T S\nTONIGHT'S(2)  T UW0 - N AY1 T S\nTONIGHT(2)  T UW0 - N AY1 T\nTONING  T OW1 - N IH0 NG\nTONINI  T OW0 - N IY1 - N IY0\nTONITE  T AH0 - N AY1 T\nTONJES  T OW1 - N Y EH0 S\nTONK  T AO1 NG K\nTONKA  T AA1 NG - K AH0\nTONKA'S  T AA1 NG - K AH0 Z\nTONKIN  T AA1 NG - K IH0 N\nTONKOVICH  T AA1 NG - K AH0 - V IH0 CH\nTONKS  T AA1 NG K S\nTONN  T AA1 N\nTONNAGE  T AH1 - N AH0 JH\nTONNAGE(2)  T AH1 - N IH0 JH\nTONNAGES  T AH1 - N AH0 - JH AH0 Z\nTONNE  T AH1 N\nTONNER  T AH1 - N ER0\nTONNES  T AH1 N Z\nTONNESEN  T AH1 N - S AH0 N\nTONS  T AH1 N Z\nTONSIL  T AA2 N - S AH0 L\nTONSILLECTOMIES  T AA2 N - S IH0 - L EH1 K - T AH0 - M IY0 Z\nTONSILLECTOMY  T AA2 N - S IH0 - L EH1 K - T AH0 - M IY0\nTONSILS  T AA1 N - S AH0 L Z\nTONTI  T AA1 N - T IY0\nTONTON  T AA1 N - T AH0 N\nTONTONS  T AA1 N - T AH0 N Z\nTONY  T OW1 - N IY0\nTONY'S  T OW1 - N IY0 Z\nTONYA  T AA1 - N Y AH0\nTONYA'S  T AA1 - N Y AH0 Z\nTONYES  T OW1 - N Y AH0 Z\nTONYS  T OW1 - N IY0 Z\nTOO  T UW1\nTOOBIN  T UW1 - B AH0 N\nTOOBIN'S  T UW1 - B AH0 N Z\nTOOGOOD  T UW1 - G UH2 D\nTOOHEY  T UW1 - IY0\nTOOK  T UH1 K\nTOOKE  T UH1 K\nTOOKER  T UH1 - K ER0\nTOOKES  T UH1 K S\nTOOL  T UW1 L\nTOOLAN  T UW1 - L AH0 N\nTOOLBOX  T UW1 L - B AO2 K S\nTOOLE  T UW1 L\nTOOLED  T UW1 L D\nTOOLEY  T UW1 - L IY0\nTOOLING  T UW1 - L IH0 NG\nTOOLMAKER  T UW1 L - M EY2 - K ER0\nTOOLMAKERS  T UW1 L - M EY2 - K ER0 Z\nTOOLROOM  T UW1 L - R UW2 M\nTOOLS  T UW1 L Z\nTOOLWORKS  T UW1 L - W ER2 K S\nTOOMAN  T UW1 - M AH0 N\nTOOMBS  T UW1 M Z\nTOOMER  T UW1 - M ER0\nTOOMEY  T UW1 - M IY0\nTOON  T UW1 N\nTOONE  T UW1 N\nTOOPS  T UW1 P S\nTOOT  T UW1 T\nTOOTAL  T UW1 - T AH0 L\nTOOTE  T UW1 T\nTOOTH  T UW1 TH\nTOOTHAKER  T UW1 - TH AH0 - K ER0\nTOOTHBRUSH  T UW1 TH - B R AH0 SH\nTOOTHBRUSHES  T UW1 TH - B R AH2 - SH IH0 Z\nTOOTHED  T UW1 TH T\nTOOTHED(2)  T UW1 DH D\nTOOTHLESS  T UW1 TH - L AH0 S\nTOOTHLIKE  T UW1 TH - L AY2 K\nTOOTHMAN  T UW1 TH - M AH0 N\nTOOTHPASTE  T UW1 TH - P EY2 S T\nTOOTHPASTES  T UW1 TH - P EY2 S T S\nTOOTHPICK  T UW1 TH - P IH2 K\nTOOTHPICKS  T UW1 TH - P IH2 K S\nTOOTHY  T UW1 - TH IY0\nTOOTLE  T UW1 - T AH0 L\nTOOTS  T UW1 T S\nTOOTS(2)  T UH1 T S\nTOOTSIE  T UW1 T - S IY1\nTOOTSIE(2)  T UH1 T - S IY1\nTOP  T AA1 P\nTOP(2)  T AO1 P\nTOPALIAN  T AH0 - P EY1 - L IY0 - AH0 N\nTOPANGA  T OW0 - P AE1 NG - G AH0\nTOPANGA(2)  T AH0 - P AE1 NG - G AH0\nTOPAZ  T OW1 - P AE2 Z\nTOPE  T OW1 P\nTOPEKA  T AH0 - P IY1 - K AH0\nTOPEKA'S  T AH0 - P IY1 - K AH0 Z\nTOPEKA(2)  T OW0 - P IY1 - K AH0\nTOPEKAN  T AH0 - P IY1 - K AH0 N\nTOPEKANS  T AH0 - P IY1 - K AH0 N Z\nTOPEL  T OW1 - P AH0 L\nTOPETE  T AA1 - P IY0 T\nTOPHAM  T AA1 - F AH0 M\nTOPIARY  T OW1 - P IY0 - EH2 - R IY0\nTOPIC  T AA1 - P IH0 K\nTOPICAL  T AA1 - P AH0 - K AH0 L\nTOPICAL(2)  T AA1 - P IH0 - K AH0 L\nTOPICS  T AA1 - P IH0 K S\nTOPIX  T OW1 - P IH2 K S\nTOPIX(2)  T AA1 - P IH2 K S\nTOPKAPI  T AA2 P - K AA1 - P IY0\nTOPKNOT  T AA1 P - N AA2 T\nTOPLESS  T AA1 P - L AH0 S\nTOPLIFF  T AA1 P - L IH0 F\nTOPOGRAPHIC  T AA2 - P AH0 - G R AE1 - F IH0 K\nTOPOGRAPHY  T AH0 - P AA1 - G R AH0 - F IY0\nTOPOL  T OW1 - P AA0 L\nTOPOLSKI  T AH0 - P OW1 L - S K IY0\nTOPOR  T AA1 - P ER0\nTOPP  T AA1 P\nTOPPED  T AA1 P T\nTOPPER  T AA1 - P ER0\nTOPPERS  T AA1 - P ER0 Z\nTOPPIN  T AA1 - P IH0 N\nTOPPING  T AA1 - P IH0 NG\nTOPPINGS  T AA1 - P IH0 NG Z\nTOPPINS  T AA1 - P IH0 N Z\nTOPPLE  T AA1 - P AH0 L\nTOPPLED  T AA1 - P AH0 L D\nTOPPLES  T AA1 - P AH0 L Z\nTOPPLING  T AA1 - P AH0 L - IH0 NG\nTOPPLING(2)  T AA1 - P L IH0 NG\nTOPPS  T AA1 P S\nTOPS  T AA1 P S\nTOPSOIL  T AA1 P - S OY2 L\nTOPSY  T AA1 P - S IY0\nTOPSY-TURVY  T AA1 P - S IY0 - T ER1 - V IY0\nTOQUEPALA  T AA2 K - W EH0 - P AA1 - L AH0\nTOR  T AO1 R\nTORAH  T AO1 - R AH0\nTORAIN  T ER0 - EY1 N\nTORALD  T AO1 - R AH0 L D\nTORAN  T AO0 - R AA1 N\nTORAY  T AO0 - R EY1\nTORBECK  T AO1 R - B EH0 K\nTORBERT  T AO1 R - B ER0 T\nTORBETT  T AO1 R - B IH0 T\nTORCH  T AO1 R CH\nTORCHED  T AO1 R CH T\nTORCHES  T AO1 R - CH IH0 Z\nTORCHIA  T AO1 R - K IY0 - AH0\nTORCHING  T AO1 R - CH IH0 NG\nTORCHMARK  T AO1 R CH - M AA2 R K\nTORDELLA  T AO2 R - D EH1 - L AH0\nTORE  T AO1 R\nTORELL  T AO0 - R EH1 L\nTORELLI  T AO0 - R EH1 - L IY0\nTORELLO  T AO0 - R EH1 - L OW0\nTOREN  T AO1 - R AH0 N\nTOREY  T AO1 - R IY0\nTORGERSEN  T AO1 R - G ER0 - S AH0 N\nTORGERSON  T AO1 R - G ER0 - S AH0 N\nTORGESON  T AO1 R - G IH0 - S AH0 N\nTORI  T AO1 - R IY0\nTORIAN  T AO1 - R IY0 - AH0 N\nTORIBIO  T AO0 - R IY1 - B IY0 - OW0\nTORIE  T AO1 - R IY0\nTORIES  T AO1 - R IY0 Z\nTORIES'  T AO1 - R IY0 Z\nTORINO  T AO0 - R IY1 - N OW0\nTORKELSON  T AO1 R - K IH0 L - S AH0 N\nTORLEY  T AO1 R - L IY0\nTORMA  T AO1 R - M AH0\nTORME  T AO1 R M\nTORME(2)  T AO2 R - M EY1\nTORMENT  T AO1 R - M EH2 N T\nTORMENT(2)  T AO0 R - M EH1 N T\nTORMENTA  T AO2 R - M EH1 N - T AH0\nTORMENTED  T AO1 R - M EH2 N - T IH0 D\nTORMENTING  T AO1 R - M EH2 N - T IH0 NG\nTORMENTOR  T AO1 R - M EH2 N - T ER0\nTORMENTORS  T AO1 R - M EH2 N - T ER0 Z\nTORMENTS  T AO1 R - M EH2 N T S\nTORMEY  T AO1 R - M IY0\nTORN  T AO1 R N\nTORNABENE  T AO0 R - N AA0 - B EH1 - N AH0\nTORNADIC  T AO0 R - N EY1 - D IH0 K\nTORNADO  T AO0 R - N EY1 - D OW2\nTORNADO'S  T AO0 R - N EY1 - D OW2 Z\nTORNADOES  T AO0 R - N EY1 - D OW0 Z\nTORNADOS  T AO0 R - N EY1 - D OW2 Z\nTORNATORE  T AO0 R - N AA0 - T AO1 - R IY0\nTORNEY  T AO1 R - N IY0\nTORNO  T AO1 R - N OW0\nTORNOW  T AO1 R - N OW0\nTORNQUIST  T AO1 R N - K W IH0 S T\nTORO  T AO1 - R OW0\nTOROK  T AO1 - R AH0 K\nTORONADO  T AO2 - R AH0 - N AA1 - D OW0\nTORONTO  T ER0 - AA1 N - T OW0\nTORONTO'S  T ER0 - AA1 N - T OW0 Z\nTORONTO'S(2)  T AO0 - R AA1 N - T OW0 Z\nTORONTO(2)  T AO0 - R AA1 N - T OW0\nTOROSIAN  T ER0 - AA1 - ZH IH0 N\nTORP  T AO1 R P\nTORPEDO  T AO0 R - P IY1 - D OW2\nTORPEDOED  T AO0 R - P IY1 - D OW2 D\nTORPEDOES  T AO0 R - P IY1 - D OW0 Z\nTORPEDOING  T AO0 R - P IY1 - D OW2 - IH0 NG\nTORPEDOS  T AO0 R - P IY1 - D OW2 Z\nTORPEY  T AO1 R - P IY0\nTORPID  T AO1 R - P AH0 D\nTORPOR  T AO1 R - P ER0\nTORQUE  T AO1 R K\nTORR  T AO1 R\nTORRANCE  T AO1 - R AH0 N S\nTORRAS  T AO1 - R AH0 S\nTORRAY  T AO1 - R EY0\nTORRE  T AO1 R\nTORREGROSSA  T AO0 - R EH0 - G R OW1 - S AH0\nTORREJON  T AO1 - R AH0 - JH AA0 N\nTORRENCE  T AO1 - R AH0 N S\nTORRENS  T AO1 - R AH0 N Z\nTORRENT  T AO1 - R AH0 N T\nTORRENTIAL  T AO0 - R EH1 N - CH AH0 L\nTORRENTIAL(2)  T AO0 - R EH1 N - SH AH0 L\nTORRENTS  T AO1 - R AH0 N T S\nTORRENZANO  T AO2 - R EH0 N - Z AA1 - N OW0\nTORREON  T AO1 - R IY0 - AH0 N\nTORRES  T AO1 - R EH2 Z\nTORREY  T AO1 - R IY0\nTORREZ  T AO0 - R EH1 Z\nTORRICELLI  T AO2 - R IH0 - S EH1 - L IY0\nTORRID  T AO1 - R AH0 D\nTORRIJOS  T AO0 - R IY1 - OW0 S\nTORRINGTON  T AO1 - R IH0 NG - T AH0 N\nTORRISI  T AO0 - R IY1 - S IY0\nTORRY  T AO1 - R IY0\nTORSIELLO  T AO0 R - S IY0 - EH1 - L OW0\nTORSO  T AO1 R - S OW2\nTORSOS  T AO1 R - S OW2 Z\nTORSTAR  T AO1 R - S T AA2 R\nTORSTEN  T AO1 R - S T AH0 N\nTORT  T AO1 R T\nTORTE  T AO1 R T\nTORTI  T AO1 R - T IY0\nTORTILLA  T AO0 R - T IY1 - AH0\nTORTILLAS  T AO2 R - T IY1 - AH0 Z\nTORTOISE  T AO1 R - T AH0 S\nTORTOISES  T AO1 R - T AH0 - S AH0 Z\nTORTORA  T AO0 R - T AO1 - R AH0\nTORTORELLA  T AO0 R - T AO0 - R EH1 - L AH0\nTORTORELLI  T AO0 R - T AO0 - R EH1 - L IY0\nTORTORELLO  T AO0 R - T AO0 - R EH1 - L OW0\nTORTORICE  T AO0 R - T AO1 - R IH0 S\nTORTORICI  T AO0 R - T AO0 - R IY1 - CH IY0\nTORTORIELLO  T AO0 R - T AO0 - R IY0 - EH1 - L OW0\nTORTS  T AO1 R T S\nTORTUOUS  T AO1 R - CH AH0 W - AH0 S\nTORTURE  T AO1 R - CH ER0\nTORTURED  T AO1 R - CH ER0 D\nTORTURES  T AO1 R - CH ER0 Z\nTORTURING  T AO1 R - CH ER0 - IH0 NG\nTORTUROUS  T AO1 R - CH UW2 - AH0 S\nTORU  T AO1 - R UW0\nTORUMI  T AO2 - R UW1 - M IY0\nTORUMI'S  T AO2 - R UW1 - M IY0 Z\nTORY  T AO1 - R IY0\nTOSCA  T AO1 - S K AH0\nTOSCANINI  T AO2 S - K AH0 - N IY1 - N IY0\nTOSCANINI'S  T AH2 S - K AH0 - N IY1 - N IY0 Z\nTOSCANO  T OW0 - S K AA1 - N OW0\nTOSCH  T AO1 SH\nTOSCO  T AO1 - S K OW0\nTOSH  T AA1 SH\nTOSHIBA  T OW0 - SH IY1 - B AH0\nTOSHIBA'S  T OW0 - SH IY1 - B AH0 Z\nTOSHIHARU  T OW2 - SH IH0 HH - AA1 - R UW0\nTOSHIHIKO  T OW2 - SH IH0 - HH IY1 - K OW0\nTOSHIKI  T OW0 - SH IY1 - K IY0\nTOSHIMITSU  T OW0 - SH IY0 - M IY1 T - S UW0\nTOSHIO  T OW0 - SH IY1 - OW0\nTOSHIYUKI  T OW2 - SH IH0 Y - UW1 - K IY0\nTOSI  T OW1 - S IY0\nTOSO  T OW1 - S OW0\nTOSS  T AO1 S\nTOSSED  T AO1 S T\nTOSSES  T AO1 - S IH0 Z\nTOSSING  T AO1 - S IH0 NG\nTOSTADO  T OW0 - S T AA1 - D OW0\nTOSTE  T OW1 S T\nTOSTENSON  T AA1 - S T IH0 N - S AH0 N\nTOSTI  T AO1 - S T IY0\nTOSTO  T OW1 - S T OW0\nTOT  T AA1 T\nTOTA  T OW1 - T AH0\nTOTAL  T OW1 - T AH0 L\nTOTAL'S  T OW1 - T AH0 L Z\nTOTALED  T OW1 - T AH0 L D\nTOTALING  T OW1 - T AH0 L - IH0 NG\nTOTALITARIAN  T OW2 - T AE2 - L IH0 - T EH1 - R IY0 - AH0 N\nTOTALITARIANISM  T OW2 - T AE2 - L AH0 - T EH1 - R IY0 - AH0 - N IH2 - Z AH0 M\nTOTALITARIANS  T OW0 - T AE2 - L AH0 - T EH1 - R IY0 - AH0 N Z\nTOTALITY  T OW0 - T AE1 - L AH0 - T IY0\nTOTALLED  T OW1 - T AH0 L D\nTOTALLING  T OW1 - T AH0 L - IH0 NG\nTOTALLY  T OW1 - T AH0 L - IY0\nTOTALS  T OW1 - T AH0 L Z\nTOTARO  T OW0 - T AA1 R - OW0\nTOTE  T OW1 T\nTOTED  T OW1 - T IH0 D\nTOTEM  T OW1 - T AH0 M\nTOTEMS  T OW1 - T AH0 M Z\nTOTENBERG  T OW1 - T AH0 N - B ER0 G\nTOTES  T OW1 T S\nTOTH  T AA1 TH\nTOTHEROW  T AH1 - DH ER0 - OW0\nTOTI  T OW1 - T IY0\nTOTING  T OW1 - T IH0 NG\nTOTINO'S  T AH0 - T IY1 - N OW0 Z\nTOTMAN  T AA1 T - M AH0 N\nTOTO  T OW1 - T OW0\nTOTS  T AA1 T S\nTOTTEN  T AA1 - T AH0 N\nTOTTENBERG  T AA1 - T AH0 N - B ER0 G\nTOTTER  T AA1 - T ER0\nTOTTERING  T AA1 - T ER0 - IH0 NG\nTOTTON  T AA1 - T AH0 N\nTOTTY  T AA1 - T IY0\nTOTZKE  T AA1 T S - K IY0\nTOUAREG  T UW1 - ER0 - AH0 G\nTOUCH  T AH1 CH\nTOUCHDOWN  T AH1 CH - D AW2 N\nTOUCHDOWNS  T AH1 CH - D AW2 N Z\nTOUCHE  T UW1 SH\nTOUCHED  T AH1 CH T\nTOUCHES  T AH1 - CH AH0 Z\nTOUCHES(2)  T AH1 - CH IH0 Z\nTOUCHET  T UW0 - SH EH1 T\nTOUCHETTE  T UW2 - SH EH1 T\nTOUCHING  T AH1 - CH IH0 NG\nTOUCHSTONE  T AH1 CH - S T OW2 N\nTOUCHTON  T AH1 CH - T AH0 N\nTOUCHY  T AH1 - CH IY0\nTOUFEXIS  T UW2 - F EH1 K - S IH0 S\nTOUGALOO  T UW1 - G AH0 - L UW2\nTOUGAS  T AH1 - G AH0 Z\nTOUGH  T AH1 F\nTOUGHED  T AH1 F T\nTOUGHEN  T AH1 - F AH0 N\nTOUGHENED  T AH1 - F AH0 N D\nTOUGHENING  T AH1 - F AH0 N - IH0 NG\nTOUGHENS  T AH1 - F AH0 N Z\nTOUGHER  T AH1 - F ER0\nTOUGHEST  T AH1 - F AH0 S T\nTOUGHNESS  T AH1 F - N AH0 S\nTOUGHS  T AH1 F S\nTOUHEY  T AH1 - HH IY0\nTOULOUSE  T UW0 - L UW1 Z\nTOUPEE  T UW2 - P EY1\nTOUPIN  T UW1 - P IH0 N\nTOUPS  T UW1 P S\nTOUR  T UH1 R\nTOUR'S  T UH1 R Z\nTOURANGEAU  T UH1 - R EY0 NG - G OW0\nTOURED  T UH1 R D\nTOURETTE  T ER0 - EH1 T\nTOURETTE'S  T ER0 - EH1 T S\nTOURETZKY  T ER0 - EH1 T S - K IY0\nTOURIGNY  T UH1 - R AY0 - N IY0\nTOURING  T UH1 - R IH0 NG\nTOURISM  T UH1 - R IH2 - Z AH0 M\nTOURIST  T UH1 - R AH0 S T\nTOURIST(2)  T UH1 - R IH0 S T\nTOURISTS  T UH1 - R AH0 S T S\nTOURISTS(2)  T UH1 - R IH0 S T S\nTOURISTS(3)  T UH1 - R IH0 S S\nTOURISTS(4)  T UH1 - R IH0 S\nTOURMALINE  T UH1 R - M AH0 - L IY2 N\nTOURNAMENT  T UH1 R - N AH0 - M AH0 N T\nTOURNAMENT'S  T UH1 R - N AH0 - M AH0 N T S\nTOURNAMENTS  T ER1 - N AH0 - M AH0 N T S\nTOURNEY  T ER1 - N IY0\nTOURNEYS  T UW1 R - N IY0 Z\nTOURNIQUET  T ER0 - N IH0 - K IH0 T\nTOURNQUIST  T UW1 R N - K W IH0 S T\nTOURO  T UW1 - R OW0\nTOURS  T UH1 R Z\nTOURS(2)  T AO1 R Z\nTOURTELOT  T UH1 R - T AH0 - L AA0 T\nTOURTELOT(2)  T UH2 R - T AH0 - L OW1\nTOURVILLE  T UH1 R - V IH0 L\nTOUSEY  T AH1 - S IY0\nTOUSIGNANT  T UW1 - S IH0 G - N AH0 N T\nTOUSLEY  T AH1 S - L IY0\nTOUSSAINT  T UW0 - S AE1 N\nTOUSSAUD  T UW1 - S AA2 D\nTOUSSAUD'S  T UW1 - S AA2 D Z\nTOUSSIE  T UW1 - S IY0\nTOUT  T AW1 T\nTOUTANT  T UW0 - T AO1 N T\nTOUTED  T AW1 - T IH0 D\nTOUTING  T AW1 - T IH0 NG\nTOUTS  T AW1 T S\nTOUVIER  T UW2 - V IY0 - EY1\nTOUVIER'S  T UW2 - V IY0 - EY1 Z\nTOVAR  T OW0 - V AA1 R\nTOVAZ  T OW1 - V AA2 Z\nTOVEY  T OW1 - V IY0\nTOVIA  T OW1 - V IY0 - AH0\nTOVIA(2)  T OW1 - V Y AH0\nTOW  T OW1\nTOWARD  T AH0 - W AO1 R D\nTOWARD(2)  T AO1 R D\nTOWARDS  T AH0 - W AO1 R D Z\nTOWARDS(2)  T AO1 R D Z\nTOWBIN  T OW1 - B IH2 N\nTOWBOAT  T OW1 - B OW2 T\nTOWE  T OW1\nTOWED  T OW1 D\nTOWEL  T AW1 - AH0 L\nTOWEL(2)  T AW1 L\nTOWELING  T AW1 - AH0 L - IH0 NG\nTOWELING(2)  T AW1 - L IH0 NG\nTOWELL  T AA1 - W EH0 L\nTOWELS  T AW1 - AH0 L Z\nTOWELS(2)  T AW1 L Z\nTOWER  T AW1 - ER0\nTOWER'S  T AW1 - ER0 Z\nTOWERED  T AW1 - ER0 D\nTOWERING  T AW1 - ER0 - IH0 NG\nTOWERING(2)  T AW1 - R IH0 NG\nTOWERS  T AW1 - ER0 Z\nTOWERS'  T AW1 - ER0 Z\nTOWERY  T OW0 - ER1 - IY0\nTOWEY  T OW1 - IY0\nTOWING  T OW1 - IH0 NG\nTOWLE  T AW1 L\nTOWLE'S  T AW1 L Z\nTOWLER  T OW1 - L ER0\nTOWLES  T OW1 - AH0 L Z\nTOWN  T AW1 N\nTOWN'S  T AW1 N Z\nTOWNE  T AW1 N\nTOWNER  T AW1 - N ER0\nTOWNERS  T AW1 - N ER0 Z\nTOWNES  T AW1 N Z\nTOWNHOUSE  T AW1 N - HH AW2 S\nTOWNHOUSES  T AW1 N - HH AW2 - S IH0 Z\nTOWNIE  T AW1 - N IY0\nTOWNLEY  T AW1 N - L IY0\nTOWNS  T AW1 N Z\nTOWNSEL  T AW1 N - S AH0 L\nTOWNSELL  T AW1 N - S AH0 L\nTOWNSEND  T AW1 N - Z AH0 N D\nTOWNSEND'S  T AW1 N - Z AH0 N D Z\nTOWNSFOLK  T AW1 N Z - F OW2 K\nTOWNSHEND  T AW1 N - SH EH2 N D\nTOWNSHIP  T AW1 N - SH IH0 P\nTOWNSHIP'S  T AW1 N - SH IH2 P S\nTOWNSHIPS  T AW1 N - SH IH0 P S\nTOWNSLEY  T AW1 N S - L IY0\nTOWNSMAN  T AW1 N Z - M AH0 N\nTOWNSON  T AW1 N - S AH0 N\nTOWNSPEOPLE  T AW1 N Z - P IY2 - P AH0 L\nTOWRY  T AO1 - R IY0\nTOWS  T OW1 Z\nTOWSLEY  T OW1 S - L IY0\nTOWSON  T OW1 - S AH0 N\nTOXIC  T AA1 K - S IH0 K\nTOXICITY  T AA0 K - S IH1 - S AH0 - T IY0\nTOXICOLOGICAL  T AA2 K - S AH0 - K AH0 - L AA1 - JH IH0 - K AH0 L\nTOXICOLOGIST  T AA2 K - S IH0 - K AA1 - L AH0 - JH IH0 S T\nTOXICOLOGISTS  T AA2 K - S IH0 - K AA1 - L AH0 - JH IH0 S T S\nTOXICOLOGISTS(2)  T AA2 K - S IH0 - K AA1 - L AH0 - JH IH0 S S\nTOXICOLOGISTS(3)  T AA2 K - S IH0 - K AA1 - L AH0 - JH IH0 S\nTOXICOLOGY  T AA2 K - S IH0 - K AA1 - L AH0 - JH IY0\nTOXICS  T AA1 K - S IH0 K S\nTOXIN  T AA1 K - S AH0 N\nTOXINS  T AA1 K - S AH0 N Z\nTOY  T OY1\nTOY'S  T OY1 Z\nTOYA  T OY1 - AH0\nTOYAMA  T OW0 - Y AA1 - M AH0\nTOYE  T OY1\nTOYED  T OY1 D\nTOYING  T OY1 - IH0 NG\nTOYKO  T OY1 - K OW0\nTOYMAKER  T OY1 - M EY2 - K ER0\nTOYMAKERS  T OY1 - M EY2 - K ER0 Z\nTOYO  T OW1 - Y OW0\nTOYOBO  T OW0 - Y OW1 - B OW0\nTOYODA  T OW0 - Y OW1 - D AH0\nTOYOO  T OY0 - UW1\nTOYOTA  T OW0 - Y OW1 - T AH0\nTOYOTA'S  T OW0 - Y OW1 - T AH0 Z\nTOYOTAS  T OY2 - OW1 - T AH0 Z\nTOYS  T OY1 Z\nTOYS'  T OY1 Z\nTOYSTORE  T OY1 - S T AO2 R\nTOYSTORES  T OY1 - S T AO2 R Z\nTOZER  T OW1 - Z ER0\nTOZIER  T OW1 - Z IY0 - ER0\nTOZZI  T AA1 - Z IY0\nTRABER  T R EY1 - B ER0\nTRABERT  T R AE1 - B ER0 T\nTRABUCCO  T R AA0 - B UW1 - K OW0\nTRABUE  T R AA1 B - W EH0\nTRAC  T R AE1 K\nTRACE  T R EY1 S\nTRACEABLE  T R EY1 - S AH0 - B AH0 L\nTRACED  T R EY1 S T\nTRACER  T R EY1 - S ER0\nTRACERS  T R EY1 - S ER0 Z\nTRACES  T R EY1 - S AH0 Z\nTRACES(2)  T R EY1 - S IH0 Z\nTRACEY  T R EY1 - S IY0\nTRACHEA  T R EY1 - K IY0 - AH0\nTRACHEAL  T R EY1 - K IY0 - AH0 L\nTRACHEOPHYTE  T R EY1 - K IY0 - AH0 - F AY0 T\nTRACHEOPHYTES  T R EY1 - K IY0 - AH0 - F AY0 T S\nTRACHSEL  T R AE1 K - S AH0 L\nTRACHT  T R AE1 K T\nTRACHTENBERG  T R AE1 K - T AH0 N - B ER0 G\nTRACIE  T R EY1 - S IY0\nTRACINDA  T R AH0 - S IH1 N - D AH0\nTRACINDA'S  T R AH0 - S IH1 N - D AH0 Z\nTRACING  T R EY1 - S IH0 NG\nTRACK  T R AE1 K\nTRACK'S  T R AE1 K S\nTRACKAGE  T R AE1 - K IH0 JH\nTRACKBALL  T R AE1 K - B AO2 L\nTRACKBALLS  T R AE1 K - B AO2 L Z\nTRACKED  T R AE1 K T\nTRACKER  T R AE1 - K ER0\nTRACKERS  T R AE1 - K ER0 Z\nTRACKING  T R AE1 - K IH0 NG\nTRACKS  T R AE1 K S\nTRACOR  T R EY1 - S ER0\nTRACOR(2)  T R EH1 - K ER0\nTRACOR(3)  T R EY1 - K AO2 R\nTRACOR(4)  T R AE1 - K AO2 R\nTRACT  T R AE1 K T\nTRACTABLE  T R AE1 K - T AH0 - B AH0 L\nTRACTEBEL  T R AE1 K - T AH0 - B AH0 L\nTRACTION  T R AE1 K - SH AH0 N\nTRACTOR  T R AE1 K - T ER0\nTRACTORS  T R AE1 K - T ER0 Z\nTRACTS  T R AE1 K T S\nTRACY  T R EY1 - S IY0\nTRACY'S  T R EY1 - S IY0 Z\nTRACZ  T R AA1 CH\nTRACZYK  T R AA1 - CH IH2 K\nTRADABLE  T R EY1 - D AH0 - B AH0 L\nTRADE  T R EY1 D\nTRADE'S  T R EY1 D Z\nTRADEABLE  T R EY1 - D AH0 - B AH0 L\nTRADED  T R EY1 - D IH0 D\nTRADEMARK  T R EY1 D - M AA2 R K\nTRADEMARKED  T R EY1 D - M AA2 R K T\nTRADEMARKS  T R EY1 D - M AA2 R K S\nTRADEOFF  T R EY1 - D AO2 F\nTRADEOFFS  T R EY1 - D AO2 F S\nTRADER  T R EY1 - D ER0\nTRADER'S  T R EY1 - D ER0 Z\nTRADERS  T R EY1 - D ER0 Z\nTRADERS'  T R EY1 - D ER0 Z\nTRADES  T R EY1 D Z\nTRADESMEN  T R EY1 D Z - M AH0 N\nTRADING  T R EY1 - D IH0 NG\nTRADING'S  T R EY1 - D IH0 NG Z\nTRADINGS  T R EY1 - D IH0 NG Z\nTRADITION  T R AH0 - D IH1 - SH AH0 N\nTRADITIONAL  T R AH0 - D IH1 - SH AH0 - N AH0 L\nTRADITIONALIST  T R AH0 - D IH1 - SH AH0 N - AH0 - L IH0 S T\nTRADITIONALISTS  T R AH0 - D IH1 SH - N AH0 - L AH0 S T S\nTRADITIONALLY  T R AH0 - D IH1 - SH AH0 N - AH0 - L IY0\nTRADITIONALLY(2)  T R AH0 - D IH1 SH - N AH0 - L IY0\nTRADITIONS  T R AH0 - D IH1 - SH AH0 N Z\nTRAEGER  T R EH1 - G ER0\nTRAER  T R EH1 R\nTRAFALGAR  T R AH0 - F AE1 L - G ER0\nTRAFFIC  T R AE1 - F IH0 K\nTRAFFIC'S  T R AE1 - F IH0 K S\nTRAFFICKER  T R AE1 - F IH0 - K ER0\nTRAFFICKERS  T R AE1 - F IH0 - K ER0 Z\nTRAFFICKING  T R AE1 - F IH0 - K IH0 NG\nTRAFFORD  T R AE1 - F ER0 D\nTRAFICANT  T R AE1 - F IH0 - K AH0 N T\nTRAFICANTE  T R AA0 - F IY0 - K AA1 N - T IY0\nTRAFILLIO  T R AH0 - F IY1 - L IY0 - OW0\nTRAFILLIO'S  T R AH0 - F IY1 - L IY0 - OW0 Z\nTRAFTON  T R AE1 F - T AH0 N\nTRAGEDIES  T R AE1 - JH AH0 - D IY0 Z\nTRAGEDY  T R AE1 - JH AH0 - D IY0\nTRAGER  T R EY1 - G ER0\nTRAGESER  T R AE1 - G IY0 - Z ER0\nTRAGIC  T R AE1 - JH IH0 K\nTRAGICALLY  T R AE1 - JH IH0 K - L IY0\nTRAGICOMIC  T R AE2 - JH IH0 - K AA1 - M IH0 K\nTRAGOS  T R AE1 - G OW0 Z\nTRAHAN  T R AE1 - HH AH0 N\nTRAHERN  T R AE1 - HH ER0 N\nTRAIL  T R EY1 L\nTRAILBLAZER  T R EY1 L - B L EY2 - Z ER0\nTRAILBLAZERS  T R EY1 L - B L EY2 - Z ER0 Z\nTRAILED  T R EY1 L D\nTRAILER  T R EY1 - L ER0\nTRAILERS  T R EY1 - L ER0 Z\nTRAILHEAD  T R EY1 L - HH EH2 D\nTRAILING  T R EY1 - L IH0 NG\nTRAILS  T R EY1 L Z\nTRAILS'  T R EY1 L Z\nTRAILWAYS  T R EY1 L - W EY2 Z\nTRAILWAYS'  T R EY1 L - W EY2 Z\nTRAIN  T R EY1 N\nTRAIN'S  T R EY1 N Z\nTRAINA  T R EY1 - N AH0\nTRAINABLE  T R EY1 - N AH0 - B AH0 L\nTRAINED  T R EY1 N D\nTRAINEE  T R EY1 - N IY1\nTRAINEES  T R EY1 - N IY1 Z\nTRAINER  T R EY1 - N ER0\nTRAINERS  T R EY1 - N ER0 Z\nTRAINING  T R EY1 - N IH0 NG\nTRAINMEN  T R EY1 N - M AH0 N\nTRAINOR  T R EY1 - N ER0\nTRAINS  T R EY1 N Z\nTRAIPSE  T R EY1 P S\nTRAIPSING  T R EY1 P - S IH0 NG\nTRAISTER  T R EY1 - S T ER0\nTRAIT  T R EY1 T\nTRAITOR  T R EY1 - T ER0\nTRAITOROUS  T R EY1 - T ER0 - AH0 S\nTRAITORS  T R EY1 - T ER0 Z\nTRAITS  T R EY1 T S\nTRAJAN  T R EY1 - JH AH0 N\nTRAJAN'S  T R EY1 - JH AH0 N Z\nTRAJECTORY  T R AH0 - JH EH1 K - T ER0 - IY0\nTRAK  T R AE1 K\nTRAKAS  T R AA1 - K AH0 Z\nTRAM  T R AE1 M\nTRAMBLE  T R AE1 M - B AH0 L\nTRAMCO  T R AE1 M - K OW0\nTRAMEL  T R AE1 - M AH0 L\nTRAMELL  T R AA0 - M EY1 L\nTRAMIEL  T R AE1 - M IY0 - AH0 L\nTRAMMEL  T R AE1 - M AH0 L\nTRAMMELL  T R AE1 - M AH0 L\nTRAMONTANA  T R AA0 - M OW0 N - T AE1 - N AH0\nTRAMONTANO  T R AA0 - M OW0 N - T AA1 - N OW0\nTRAMONTE  T R AA0 - M OW1 N - T IY0\nTRAMONTIN  T R AH0 - M AA1 N - T IH0 N\nTRAMP  T R AE1 M P\nTRAMPE  T R AE1 M P\nTRAMPING  T R AE1 M - P IH0 NG\nTRAMPLE  T R AE1 M - P AH0 L\nTRAMPLED  T R AE1 M - P AH0 L D\nTRAMPLES  T R AE1 M - P AH0 L Z\nTRAMPLING  T R AE1 M - P L IH0 NG\nTRAMPOLINE  T R AE2 M - P AH0 - L IY1 N\nTRAMPS  T R AE1 M P Z\nTRAMS  T R AE1 M Z\nTRAN  T R AE1 N\nTRANBERG  T R AE1 N - B ER0 G\nTRANCE  T R AE1 N S\nTRANCHE  T R AE1 N CH\nTRANCHES  T R AE1 N - CH EH0 Z\nTRANCHINA  T R AA0 N - K IY1 - N AH0\nTRANE  T R EY1 N\nTRANG  T R AE1 NG\nTRANI  T R AA1 - N IY0\nTRANQUIL  T R AE1 NG - K W AH0 L\nTRANQUIL(2)  T R AE1 NG - K W IH0 L\nTRANQUILITY  T R AE0 NG - K W IH1 - L IH0 - T IY0\nTRANQUILIZE  T R AE1 NG - K W AH0 - L AY2 Z\nTRANQUILIZE(2)  T R AE1 NG - K W AH0 - L AY2 Z\nTRANQUILIZER  T R AE1 NG - K W AH0 - L AY2 - Z ER0\nTRANQUILIZERS  T R AE1 NG - K W AH0 - L AY2 - Z ER0 Z\nTRANQUILIZING  T R AE1 NG - K W AH0 - L AY2 - Z IH0 NG\nTRANS  T R AE1 N Z\nTRANSACT  T R AE0 N - Z AE1 K T\nTRANSACTED  T R AE0 N - S AE1 K - T IH0 D\nTRANSACTED(2)  T R AE0 N - Z AE1 K - T IH0 D\nTRANSACTION  T R AE0 N - Z AE1 K - SH AH0 N\nTRANSACTION'S  T R AE0 N - Z AE1 K - SH AH0 N Z\nTRANSACTIONS  T R AE0 N - Z AE1 K - SH AH0 N Z\nTRANSAFRICA  T R AE2 N - Z AE1 - F R IH0 - K AH0\nTRANSALASKA  T R AE2 N - Z AH0 - L AE1 S - K AH0\nTRANSALTA  T R AE2 N - Z AO1 L - T AH0\nTRANSAMERICA  T R AE2 N - S AH0 - M EH1 - R IH0 - K AH0\nTRANSAMERICA'S  T R AE2 N - Z AH0 - M EH1 - R IH0 - K AH0 Z\nTRANSAMERICAN  T R AE2 N - Z AH0 - M EH1 - R IH0 - K AH0 N\nTRANSAMERICAN'S  T R AE2 N - Z AH0 - M EH1 - R IH0 - K AH0 N Z\nTRANSATLANTIC  T R AE2 N Z - AH0 T - L AE1 N - T IH0 K\nTRANSATLANTIC(2)  T R AE2 N Z - AH0 T - L AE1 - N IH0 K\nTRANSCANADA  T R AE2 N Z - K AE1 - N AH0 - T AH0\nTRANSCANADA'S  T R AE2 N Z - K AE1 - N AH0 - D AH0 Z\nTRANSCAPITAL  T R AE2 N Z - K AE1 - P IH0 - T AH0 L\nTRANSCEND  T R AE0 N - S EH1 N D\nTRANSCENDED  T R AE0 N - S EH1 N - D IH0 D\nTRANSCENDENCE  T R AE0 N - S EH1 N - D AH0 N S\nTRANSCENDENT  T R AE0 N - S EH1 N - D AH0 N T\nTRANSCENDENTAL  T R AE2 N - S AH0 N - D EH1 N - T AH0 L\nTRANSCENDENTAL(2)  T R AE2 N - S AH0 N - D EH1 - N AH0 L\nTRANSCENDING  T R AE0 N - S EH1 N - D IH0 NG\nTRANSCENDS  T R AE0 N - S EH1 N D Z\nTRANSCHANNEL  T R AH1 N S - CH AE1 - N AH0 L\nTRANSCHANNEL'S  T R AH1 N S - CH AE1 - N AH0 L Z\nTRANSCISCO  T R AE2 N - S IH1 - S K OW0\nTRANSCO  T R AE1 N - S K OW0\nTRANSCON  T R AE1 N Z - K AA0 N\nTRANSCONTINENTAL  T R AE2 N Z - K AA2 N - T IH0 - N EH1 N - T AH0 L\nTRANSCONTINENTAL'S  T R AE2 N Z - K AA2 N - T IH0 - N EH1 N - T AH0 L Z\nTRANSCONTINENTAL'S(2)  T R AE2 N Z - K AA2 - N IH0 - N EH1 N - T AH0 L Z\nTRANSCONTINENTAL'S(3)  T R AE2 N Z - K AA2 N - T IH0 - N EH1 - N AH0 L Z\nTRANSCONTINENTAL'S(4)  T R AE2 N Z - K AA2 - N IH0 - N EH1 - N AH0 L Z\nTRANSCONTINENTAL(2)  T R AE2 N Z - K AA2 - N IH0 - N EH1 N - T AH0 L\nTRANSCONTINENTAL(3)  T R AE2 N Z - K AA2 N - T IH0 - N EH1 - N AH0 L\nTRANSCONTINENTAL(4)  T R AE2 N Z - K AA2 - N IH0 - N EH1 - N AH0 L\nTRANSCRIBE  T R AE0 N - S K R AY1 B\nTRANSCRIBED  T R AE0 N - S K R AY1 B D\nTRANSCRIBER  T R AE0 N - S K R AY1 - B ER0\nTRANSCRIBERS  T R AE0 N - S K R AY1 - B ER0 Z\nTRANSCRIBES  T R AE0 N - S K R AY1 B Z\nTRANSCRIBING  T R AE0 N - S K R AY1 - B IH0 NG\nTRANSCRIPT  T R AE1 N - S K R IH2 P T\nTRANSCRIPTION  T R AE2 N - S K R IH1 P - SH AH0 N\nTRANSCRIPTIONS  T R AE2 N - S K R IH1 P - SH AH0 N Z\nTRANSCRIPTS  T R AE1 N - S K R IH2 P T S\nTRANSDUCER  T R AE0 N S - D UW1 - S ER0\nTRANSDUCERS  T R AE0 N S - D UW1 - S ER0 Z\nTRANSECT  T R AE1 N - S EH2 K T\nTRANSECTED  T R AE1 N - S EH2 K - T IH0 D\nTRANSECTION  T R AE1 N - S EH2 K - SH AH0 N\nTRANSFER  T R AE0 N S - F ER1\nTRANSFER(2)  T R AE1 N S - F ER0\nTRANSFERABILITY  T R AE2 N S - F ER0 - AH0 - B IH1 - L IH0 - T IY0\nTRANSFERABLE  T R AE0 N S - F ER1 - AH0 - B AH0 L\nTRANSFERED  T R AE0 N S - F ER1 D\nTRANSFERENCE  T R AE0 N S - F ER1 - AH0 N S\nTRANSFERING  T R AE0 N S - F ER1 - IH0 NG\nTRANSFERRABLE  T R AE2 N S - F ER1 - AH0 - B AH0 L\nTRANSFERRED  T R AE0 N S - F ER1 D\nTRANSFERRED(2)  T R AE1 N S - F ER0 D\nTRANSFERRING  T R AE0 N S - F ER1 - IH0 NG\nTRANSFERS  T R AE0 N S - F ER1 Z\nTRANSFERS(2)  T R AE1 N S - F ER0 Z\nTRANSFIX  T R AE0 N S - F IH1 K S\nTRANSFIXED  T R AE0 N S - F IH1 K S T\nTRANSFORM  T R AE0 N S - F AO1 R M\nTRANSFORM(2)  T R AE1 N S - F AO0 R M\nTRANSFORMATION  T R AE2 N S - F ER0 - M EY1 - SH AH0 N\nTRANSFORMATIONAL  T R AE2 N S - F ER0 - M EY1 - SH AH0 - N AH0 L\nTRANSFORMATIONS  T R AE2 N S - F ER0 - M EY1 - SH AH0 N Z\nTRANSFORMED  T R AE0 N S - F AO1 R M D\nTRANSFORMER  T R AE0 N S - F AO1 R - M ER0\nTRANSFORMERS  T R AE0 N S - F AO1 R - M ER0 Z\nTRANSFORMING  T R AE0 N S - F AO1 R - M IH0 NG\nTRANSFORMS  T R AE0 N S - F AO1 R M Z\nTRANSFUSE  T R AE0 N S - F Y UW1 Z\nTRANSFUSED  T R AE0 N S - F Y UW1 Z D\nTRANSFUSION  T R AE0 N S - F Y UW1 - ZH AH0 N\nTRANSFUSIONS  T R AE0 N S - F Y UW1 - ZH AH0 N Z\nTRANSGENIC  T R AE2 N Z - JH EH1 - N IH0 K\nTRANSGRESS  T R AE0 N Z - G R EH1 S\nTRANSGRESSED  T R AE0 N Z - G R EH1 S T\nTRANSGRESSION  T R AE0 N Z - G R EH1 - SH AH0 N\nTRANSGRESSIONS  T R AE0 N Z - G R EH1 - SH AH0 N Z\nTRANSGRESSOR  T R AE0 N Z - G R EH1 - S ER0\nTRANSIENCE  T R AE1 N - Z IY0 - AH0 N S\nTRANSIENT  T R AE1 N - ZH AH0 N T\nTRANSIENTS  T R AE1 N - Z IY0 - AH0 N T S\nTRANSILLUMINATION  T R AE2 N - Z AH0 - L UW2 - M AH0 - N EY1 - SH AH0 N\nTRANSIMAGE  T R AE2 N - Z IH1 - M IH0 JH\nTRANSISTOR  T R AE0 N - Z IH1 - S T ER0\nTRANSISTORS  T R AE0 N - Z IH1 - S T ER0 Z\nTRANSIT  T R AE1 N - Z AH0 T\nTRANSITION  T R AE0 N - Z IH1 - SH AH0 N\nTRANSITIONAL  T R AE0 N - S IH1 - SH AH0 - N AH0 L\nTRANSITIONAL(2)  T R AE0 N - Z IH1 - SH AH0 - N AH0 L\nTRANSITIONING  T R AE0 N - Z IH1 - SH AH0 N - IH0 NG\nTRANSITIONS  T R AE0 N - Z IH1 - SH AH0 N Z\nTRANSITORY  T R AE1 N - Z AH0 - T AO2 - R IY0\nTRANSKEI  T R AE1 N Z - K EY2\nTRANSLATE  T R AE0 N Z - L EY1 T\nTRANSLATE(2)  T R AE0 N S - L EY1 T\nTRANSLATED  T R AE0 N Z - L EY1 - T AH0 D\nTRANSLATED(2)  T R AE0 N S - L EY1 - T IH0 D\nTRANSLATES  T R AE0 N Z - L EY1 T S\nTRANSLATES(2)  T R AE1 N S - L EY2 T S\nTRANSLATING  T R AE0 N Z - L EY1 - T IH0 NG\nTRANSLATING(2)  T R AE1 N S - L EY2 - T IH0 NG\nTRANSLATION  T R AE0 N Z - L EY1 - SH AH0 N\nTRANSLATION(2)  T R AE0 N S - L EY1 - SH AH0 N\nTRANSLATIONS  T R AE0 N Z - L EY1 - SH AH0 N Z\nTRANSLATIONS(2)  T R AE0 N S - L EY1 - SH AH0 N Z\nTRANSLATOR  T R AE0 N S - L EY1 - T ER0\nTRANSLATOR(2)  T R AE0 N Z - L EY1 - T ER0\nTRANSLATORS  T R AE0 N S - L EY1 - T ER0 Z\nTRANSLATORS(2)  T R AE0 N Z - L EY1 - T ER0 Z\nTRANSLOGIC  T R AE2 N Z - L AA1 - JH IH0 K\nTRANSLUCENT  T R AE0 N S - L UW1 - S AH0 N T\nTRANSMARK  T R AE1 N Z - M AA2 R K\nTRANSMEDIA  T R AE2 N Z - M IY1 - D IY0 - AH0\nTRANSMISSION  T R AE0 N S - M IH1 - SH AH0 N\nTRANSMISSION(2)  T R AE0 N Z - M IH1 - SH AH0 N\nTRANSMISSIONS  T R AE0 N Z - M IH1 - SH AH0 N Z\nTRANSMIT  T R AE0 N Z - M IH1 T\nTRANSMITS  T R AE0 N Z - M IH1 T S\nTRANSMITTABLE  T R AE0 N Z - M IH1 - T AH0 - B AH0 L\nTRANSMITTAL  T R AE0 N S - M IH1 - T AH0 L\nTRANSMITTED  T R AE0 N S - M IH1 - T IH0 D\nTRANSMITTED(2)  T R AE0 N Z - M IH1 - T AH0 D\nTRANSMITTER  T R AE0 N S - M IH1 - T ER0\nTRANSMITTERS  T R AE0 N S - M IH1 - T ER0 Z\nTRANSMITTING  T R AE0 N S - M IH1 - T IH0 NG\nTRANSNATIONAL  T R AE0 N S - N AE1 - SH AH0 - N AH0 L\nTRANSOCEANIC  T R AE2 N Z - OW0 - SH IY0 - AE1 - N IH0 K\nTRANSOHIO  T R AE2 N Z - OW0 - HH AY1 - OW0\nTRANSOM  T R AE1 N - S AH0 M\nTRANSOMS  T R AE1 N - S AH0 M Z\nTRANSOU  T R AE1 N - Z UW2\nTRANSPAC  T R AE1 N Z - P AE2 K\nTRANSPACIFIC  T R AE2 N S - P AH0 - S IH1 - F IH0 K\nTRANSPARENCIES  T R AE0 N - S P EH1 - R AH0 N - S IY0 Z\nTRANSPARENCY  T R AE0 N - S P EH1 - R AH0 N - S IY0\nTRANSPARENT  T R AE0 N - S P EH1 - R AH0 N T\nTRANSPARENTLY  T R AE0 N - S P EH1 - R AH0 N T - L IY0\nTRANSPARK  T R AE1 N S - P AA1 R K\nTRANSPIRE  T R AE0 N - S P AY1 - ER0\nTRANSPIRED  T R AE0 N - S P AY1 - ER0 D\nTRANSPIRES  T R AE0 N - S P AY1 - ER0 Z\nTRANSPIRING  T R AE0 N - S P AY1 - ER0 - IH0 NG\nTRANSPLANT  T R AE0 N S - P L AE1 N T\nTRANSPLANTATION  T R AE2 N Z - P L AE0 N - T EY1 - SH AH0 N\nTRANSPLANTED  T R AE0 N S - P L AE1 N - T IH0 D\nTRANSPLANTING  T R AE0 N S - P L AE1 N - T IH0 NG\nTRANSPLANTS  T R AE0 N S - P L AE1 N T S\nTRANSPONDER  T R AE0 N S - P AA1 N - D ER0\nTRANSPONDERS  T R AE0 N S - P AA1 N - D ER0 Z\nTRANSPORT  T R AE0 N S - P AO1 R T\nTRANSPORT(2)  T R AE1 N S - P AO0 R T\nTRANSPORTABLE  T R AE0 N S - P AO1 R - T AH0 - B AH0 L\nTRANSPORTATION  T R AE2 N S - P ER0 - T EY1 - SH AH0 N\nTRANSPORTATION'S  T R AE2 N S - P ER0 - T EY1 - SH AH0 N Z\nTRANSPORTED  T R AE0 N S - P AO1 R - T AH0 D\nTRANSPORTER  T R AE0 N S - P AO1 R - T ER0\nTRANSPORTERS  T R AE0 N S - P AO1 R - T ER0 Z\nTRANSPORTING  T R AE0 N S - P AO1 R - T IH0 NG\nTRANSPORTS  T R AE0 N S - P AO1 R T S\nTRANSPORTS(2)  T R AE1 N S - P AO0 R T S\nTRANSPOSE  T R AE0 N S - P OW1 Z\nTRANSPOSED  T R AE0 N S - P OW1 Z D\nTRANSRACIAL  T R AE2 N Z - R EY1 - SH AH0 L\nTRANSRAPID  T R AE1 N Z - R AE1 - P IH0 D\nTRANSSEXUAL  T R AE0 N - S EH1 K - SH Y UW0 - AH0 L\nTRANSSEXUALS  T R AE0 N - S EH1 K - SH Y UW0 - AH0 L Z\nTRANSTAR  T R AE0 N S - T AA1 R\nTRANSTECHNOLOGY  T R AE2 N Z - T AH0 K - N AA1 - L AH0 - JH IY0\nTRANSTECTOR  T R AE2 N Z - T EH1 K - T ER0\nTRANSUE  T R AE1 N - Z UW0\nTRANSVAAL  T R AE0 N Z - V AA1 L\nTRANSVERSE  T R AE0 N Z - V ER1 S\nTRANSVESTITE  T R AE0 N Z - V EH1 - S T AY0 T\nTRANSVESTITES  T R AE0 N Z - V EH1 - S T AY0 T S\nTRANSWAY  T R AE1 N Z - W EY2\nTRANSWESTERN  T R AE2 N Z - W EH1 - S T ER0 N\nTRANSWORLD  T R AE0 N S - W ER1 L D\nTRANSYLVANIA  T R AE2 N - Z IY0 L - V EY1 - N IY0 - AH0\nTRANSYLVANIA(2)  T R AE2 N - S IH0 L - V EY1 - N Y AH0\nTRANT  T R AE1 N T\nTRANTER  T R AE1 N - T ER0\nTRANTHAM  T R AE1 N - TH AH0 M\nTRANUM  T R AE1 - N AH0 M\nTRANZONIC  T R AE0 N - Z AA1 - N IH0 K\nTRAP  T R AE1 P\nTRAPANI  T R AA0 - P AA1 - N IY0\nTRAPASSO  T R AA0 - P AA1 - S OW0\nTRAPELO  T R AH0 - P EH1 - L OW0\nTRAPEZE  T R AH0 - P IY1 Z\nTRAPHAGEN  T R AE1 - F AH0 - G AH0 N\nTRAPNELL  T R AE1 P - N AH0 L\nTRAPP  T R AE1 P\nTRAPPE  T R AE1 P\nTRAPPED  T R AE1 P T\nTRAPPERS  T R AE1 - P ER0 Z\nTRAPPING  T R AE1 - P IH0 NG\nTRAPPINGS  T R AE1 - P IH0 NG Z\nTRAPPIST  T R AE1 - P IH0 S T\nTRAPS  T R AE1 P S\nTRASH  T R AE1 SH\nTRASHED  T R AE1 SH T\nTRASHES  T R AE1 - SH IH0 Z\nTRASHING  T R AE1 - SH IH0 NG\nTRASHY  T R AE1 - SH IY0\nTRASK  T R AE1 S K\nTRAUB  T R AO1 B\nTRAUDT  T R AO1 D T\nTRAUGER  T R AW1 - G ER0\nTRAUGH  T R AO1\nTRAUGHBER  T R AO1 - B ER0\nTRAUGOTT  T R AW1 - G AH0 T\nTRAUM  T R AO1 M\nTRAUMA  T R AO1 - M AH0\nTRAUMAS  T R AO1 - M AH0 Z\nTRAUMATIC  T R AO0 - M AE1 - T IH0 K\nTRAUMATIZE  T R AO1 - M AH0 - T AY2 Z\nTRAUMATIZED  T R AO1 - M AH0 - T AY2 Z D\nTRAUSCH  T R AW1 SH\nTRAUT  T R AO1 T\nTRAUTH  T R AO1 TH\nTRAUTMAN  T R AW1 T - M AH0 N\nTRAUTMANN  T R AW1 T - M AH0 N\nTRAUTNER  T R AW1 T - N ER0\nTRAUTWEIN  T R AW1 T - W AY2 N\nTRAVAGLINI  T R AA0 - V AA0 G - L IY1 - N IY0\nTRAVAIL  T R AH0 - V EY1 L\nTRAVAILS  T R AH0 - V EY1 L Z\nTRAVEL  T R AE1 - V AH0 L\nTRAVELDAY  T R AE1 - V AH0 L - D EY2\nTRAVELDAYS  T R AE1 - V AH0 L - D EY2 Z\nTRAVELED  T R AE1 - V AH0 L D\nTRAVELER  T R AE1 - V AH0 - L ER0\nTRAVELER'S  T R AE1 - V AH0 - L ER0 Z\nTRAVELER(2)  T R AE1 V - L ER0\nTRAVELERS  T R AE1 - V AH0 - L ER0 Z\nTRAVELERS'  T R AE1 - V AH0 - L ER0 Z\nTRAVELERS(2)  T R AE1 V - L ER0 Z\nTRAVELGATE  T R AE1 - V AH0 L - G EY2 T\nTRAVELING  T R AE1 - V AH0 L - IH0 NG\nTRAVELING(2)  T R AE1 - V L IH0 NG\nTRAVELLED  T R AE1 - V AH0 L D\nTRAVELLER  T R AE1 - V AH0 - L ER0\nTRAVELLERS  T R AE1 - V AH0 - L ER0 Z\nTRAVELLING  T R AE1 - V AH0 L - IH0 NG\nTRAVELLING(2)  T R AE1 - V L IH0 NG\nTRAVELODGE  T R AE1 - V AH0 - L AA1 JH\nTRAVELOGUE  T R AE1 - V AH0 - L AO2 G\nTRAVELS  T R AE1 - V AH0 L Z\nTRAVELSTEAD  T R AE1 - V AH0 L - S T EH2 D\nTRAVENOL  T R AE1 - V AH0 - N AH0 L\nTRAVER  T R EY1 - V ER0\nTRAVERS  T R AE1 - V ER0 Z\nTRAVERSE  T R AE1 - V ER0 S\nTRAVERSE(2)  T R AH0 - V ER1 S\nTRAVERSED  T R AE1 - V ER0 S T\nTRAVERSED(2)  T R AH0 - V ER1 S T\nTRAVERSING  T R AH0 - V ER1 - S IH0 NG\nTRAVERSO  T R AA0 - V EH1 R - S OW0\nTRAVESTIES  T R AE1 - V AH0 - S T IY0 Z\nTRAVESTY  T R AE1 - V AH0 - S T IY0\nTRAVIATA  T R AA0 - V IY0 - AA1 - T AH0\nTRAVIESO  T R AA0 - V IY1 - S OW0\nTRAVIS  T R AE1 - V IH0 S\nTRAVISANO  T R AE2 - V IH0 - S AA1 - N OW0\nTRAVNIK  T R AE1 V - N IH0 K\nTRAVOLTA  T R AH0 - V OW1 L - T AH0\nTRAVOLTA'S  T R AH0 - V OW1 L - T AH0 Z\nTRAVOLTAS  T R AH0 - V OW1 L - T AH0 Z\nTRAWEEK  T R AO1 - IY2 K\nTRAWICK  T R AO1 - IH0 K\nTRAWLER  T R AO1 - L ER0\nTRAWLERS  T R AO1 - L ER0 Z\nTRAX  T R AE1 K S\nTRAXLER  T R AE1 K S - L ER0\nTRAY  T R EY1\nTRAYER  T R EY1 - ER0\nTRAYLOR  T R EY1 - L ER0\nTRAYNHAM  T R EY1 N - HH AH0 M\nTRAYNOR  T R EY1 - N ER0\nTRAYS  T R EY1 Z\nTRAYWICK  T R EY1 - W IH2 K\nTRBOVICH  T ER0 - B AA1 - V IH0 CH\nTREACHEROUS  T R EH1 - CH ER0 - AH0 S\nTREACHERY  T R EH1 - CH ER0 - IY0\nTREACY  T R EY1 - S IY0\nTREAD  T R EH1 D\nTREADAWAY  T R EH1 D - AH0 - W EY2\nTREADING  T R EH1 - D IH0 NG\nTREADMILL  T R EH1 D - M IH2 L\nTREADMILLS  T R EH1 D - M IH2 L Z\nTREADS  T R EH1 D Z\nTREADWAY  T R EH1 D - W EY2\nTREADWELL  T R EH1 D - W EH2 L\nTREADWHEEL  T R EH1 D - W IY2 L\nTREANOR  T R IY1 - N ER0\nTREASE  T R IY1 Z\nTREASON  T R IY1 - Z AH0 N\nTREASTER  T R IY1 - S T ER0\nTREASURE  T R EH1 - ZH ER0\nTREASURED  T R EH1 - ZH ER0 D\nTREASURER  T R EH1 - ZH ER0 - ER0\nTREASURER'S  T R EH1 - ZH ER0 - ER0 Z\nTREASURERS  T R EH1 - ZH ER0 - ER0 Z\nTREASURES  T R EH1 - ZH ER0 Z\nTREASURIES  T R EH1 - ZH ER0 - IY0 Z\nTREASURY  T R EH1 - ZH ER0 - IY0\nTREASURY'S  T R EH1 - ZH ER0 - IY0 Z\nTREASURYS  T R EH1 - ZH ER0 - IY0 Z\nTREAT  T R IY1 T\nTREATABLE  T R IY1 - T AH0 - B AH0 L\nTREATED  T R IY1 - T AH0 D\nTREATED(2)  T R IY1 - T IH0 D\nTREATER  T R IY1 - T ER0\nTREATERS  T R IY1 - T ER0 Z\nTREATIES  T R IY1 - T IY0 Z\nTREATING  T R IY1 - T IH0 NG\nTREATISE  T R IY1 - T AH0 S\nTREATISES  T R IY1 - T AH0 - S AH0 Z\nTREATMENT  T R IY1 T - M AH0 N T\nTREATMENTS  T R IY1 T - M AH0 N T S\nTREATS  T R IY1 T S\nTREATY  T R IY1 - T IY0\nTREATY'S  T R IY1 - T IY0 Z\nTREBILCOCK  T R IH0 - B IH1 L - K AH0 K\nTREBLE  T R EH1 - B AH0 L\nTREBLED  T R EH1 - B AH0 L D\nTREBLINKA  T R EH0 B - L IH1 NG - K ER0\nTREBLINKA(2)  T R EH0 B - L IH1 NG - K AH0\nTRECKER  T R EH1 - K ER0\nTREDER  T R IY1 - D ER0\nTREDWAY  T R EH1 D - W EY2\nTREE  T R IY1\nTREECE  T R IY1 S\nTREELESS  T R IY1 - L AH0 S\nTREEN  T R IY1 N\nTREES  T R IY1 Z\nTREESE  T R IY1 Z\nTREESH  T R IY1 SH\nTREESWEET  T R IY1 S - W IY2 T\nTREETOP  T R IY1 - T AO2 P\nTREETOPS  T R IY1 - T AO2 P S\nTREFETHEN  T R EH1 - F IH0 - TH AH0 N\nTREFGARNE  T R EH1 F - G AA0 R N\nTREFRY  T R EH1 - F R IY0\nTREFZ  T R EH1 F Z\nTREGLIA  T R EH1 G - L IY0 - AH0\nTREGO  T R EH1 - G OW0\nTREGONING  T R EH1 - G AH0 - N IH0 NG\nTREGRE  T R EH1 - G ER0\nTREGURTHA  T R EH0 - G ER1 - TH AH0\nTREHARNE  T R EH1 - HH AA0 R N\nTREIBER  T R AY1 - B ER0\nTREICHEL  T R AY1 - K AH0\nTREICHLER  T R AY1 - K AH0 - L ER0\nTREICHLER(2)  T R AY1 - K L ER0\nTREINEN  T R AY1 - N AH0 N\nTREJO  T R EY1 - Y OW0\nTREK  T R EH1 K\nTREKKED  T R EH1 K T\nTREKKING  T R EH1 - K IH0 NG\nTREKS  T R EH1 K S\nTRELA  T R EH1 - L AH0\nTRELLA  T R EH1 - L AH0\nTRELLEBORG  T R EH1 - L AH0 - B AO0 R G\nTRELLEBORG'S  T R EH1 - L AH0 - B AO0 R G Z\nTRELLIS  T R EH1 - L AH0 S\nTRELOAR  T R EH1 - L AO0 R\nTREMAIN  T R EH1 - M AY0 N\nTREMAINE  T R IH0 - M EY1 N\nTREMAYNE  T R EH1 - M EY0 N\nTREMBATH  T R EH1 M - B AH0 TH\nTREMBLAY  T R EH1 M - B L EY0\nTREMBLE  T R EH1 M - B AH0 L\nTREMBLED  T R EH1 M - B AH0 L D\nTREMBLEY  T R EH1 M - B L IY0\nTREMBLING  T R EH1 M - B AH0 L - IH0 NG\nTREMBLING(2)  T R EH1 M - B L IH0 NG\nTREMBLY  T R EH1 M - B L IY0\nTREMEL  T R EH1 - M AH0 L\nTREMENDOUS  T R AH0 - M EH1 N - D AH0 S\nTREMENDOUS(2)  T R IH0 - M EH1 N - D AH0 S\nTREMENDOUSLY  T R AH0 - M EH1 N - D AH0 S - L IY0\nTREMENDOUSLY(2)  T R IH0 - M EH1 N - D AH0 S - L IY0\nTREMENS  T R EH1 - M AH0 N Z\nTREML  T R EH1 - M AH0 L\nTREMMEL  T R EH1 - M AH0 L\nTREMONT  T R EH1 - M AH0 N T\nTREMOR  T R EH1 - M ER0\nTREMORS  T R EH1 - M ER0 Z\nTREMPER  T R EH1 M - P ER0\nTREMULOUS  T R EH1 - M Y AH0 - L AH0 S\nTREMULOUSLY  T R EH1 - M Y AH0 - L AH0 S - L IY0\nTRENARY  T R EH1 - N EH0 - R IY0\nTRENCH  T R EH1 N CH\nTRENCHANT  T R EH1 N - CH AH0 N T\nTRENCHARD  T R EH1 NG - K ER0 D\nTRENCHER  T R EH1 N - CH ER0\nTRENCHES  T R EH1 N - CH IH0 Z\nTREND  T R EH1 N D\nTRENDED  T R EH1 N - D IH0 D\nTRENDIER  T R EH1 N - D Y ER0\nTRENDIER(2)  T R EH1 N - D IY0 - ER0\nTRENDIEST  T R EH0 N - D IY1 S T\nTRENDIEST(2)  T R EH1 N - D IY0 - AH0 S T\nTRENDING  T R EH1 N - D IH0 NG\nTRENDLESS  T R EH1 N D - L AH0 S\nTRENDLINE  T R EH1 N D - L AY2 N\nTRENDS  T R EH1 N D Z\nTRENDS(2)  T R EH1 N Z\nTRENDSETTER  T R EH1 N D - S EH2 - T ER0\nTRENDY  T R EH1 N - D IY0\nTRENHOLM  T R EH1 N - HH OW2 L M\nTRENKAMP  T R EH1 N - K AE2 M P\nTRENKLE  T R EH1 NG - K AH0 L\nTRENT  T R EH1 N T\nTRENT'S  T R EH1 N T S\nTRENTE-ET-QUARANTE  T R EY1 N - T EY0 - K W AA2 - R EH1 N - T EY0\nTRENTHAM  T R EH1 N - TH AH0 M\nTRENTMAN  T R EH1 N T - M AH0 N\nTRENTON  T R EH1 N - T AH0 N\nTRENTON'S  T R EH1 N - T AH0 N Z\nTREON  T R IY1 - AH0 N\nTREPAGNIER  T R EH1 - P AH0 G - N IY0 - ER0\nTREPANIER  T R EH1 - P AH0 - N IY0 - ER0\nTREPIDATION  T R EH2 - P IH0 - D EY1 - SH AH0 N\nTREPPEL  T R EH1 - P AH0 L\nTREPTOW  T R EH1 P - T OW0\nTRESCH  T R EH1 SH\nTRESCOTT  T R EH1 S - K AH0 T\nTRESPASS  T R EH1 S - P AE2 S\nTRESPASS(2)  T R EH1 S - P AH0 S\nTRESPASSING  T R EH1 S - P AE2 - S IH0 NG\nTRESPASSING(2)  T R EH1 S - P AH0 - S IH0 NG\nTRESS  T R EH1 S\nTRESSEL  T R EH1 - S AH0 L\nTRESSES  T R EH1 - S IH0 Z\nTRESSLER  T R EH1 S - L ER0\nTREST  T R EH1 S T\nTRESTER  T R EH1 - S T ER0\nTRESTLE  T R EH1 - S AH0 L\nTRETHEWEY  T R EH1 - TH Y UW0 - IY0\nTRETINOIN  T R EH1 - T IH0 - N OY2 N\nTRETTEL  T R EH1 - T AH0 L\nTRETTER  T R EH1 - T ER0\nTRETTIN  T R EH1 - T IH0 N\nTREU  T R UW1\nTREUHAND  T R UW1 - HH AE2 N D\nTREUHANDANSTALT  T R UW2 - HH AE1 N - D AH0 N - S T AA2 L T\nTREURNICHT  T R UW1 R - N IH0 K T\nTREVATHAN  T R EH1 - V AH0 - TH AH0 N\nTREVELYAN  T R AH0 - V EH1 L - Y AH0 N\nTREVINO  T R AH0 - V IY1 - N OW0\nTREVISO  T R EH0 - V IY1 - S OW0\nTREVIZO  T R EH0 - V IY1 - Z OW0\nTREVOR  T R EH1 - V ER0\nTREW  T R UW1\nTREXLER  T R EH1 K S - L ER0\nTREY  T R EY1\nTREYBIG  T R EY1 - B IH0 G\nTREZISE  T R EH1 - Z AY0 Z\nTREZZA  T R EH1 - Z AH0\nTRI  T R AY1\nTRI-STATE  T R AY1 - S T EY1 T\nTRIAD  T R AY1 - AE2 D\nTRIAD'S  T R AY1 - AE2 D Z\nTRIADS  T R AY1 - AE2 D Z\nTRIAGE  T R AY1 - IH0 JH\nTRIAL  T R AY1 - AH0 L\nTRIAL'S  T R AY1 - AH0 L Z\nTRIAL(2)  T R AY1 L\nTRIALS  T R AY1 - AH0 L Z\nTRIALS(2)  T R AY1 L Z\nTRIANA  T R IY0 - AE1 - N AH0\nTRIANGLE  T R AY1 - AE2 NG - G AH0 L\nTRIANGLE'S  T R AY1 - AE2 NG - G AH0 L Z\nTRIANGLES  T R AY1 - AE2 NG - G AH0 L Z\nTRIANGULAR  T R AY0 - AE1 NG - G Y AH0 - L ER0\nTRIANGULATION  T R AY0 - AE2 NG - G Y UW0 - L EY1 - SH AH0 N\nTRIANO  T R IY0 - AA1 - N OW0\nTRIARC  T R AY1 - AA2 R K\nTRIATHLON  T R AY2 - AE1 TH - L AH0 N\nTRIB  T R IH1 B\nTRIBAL  T R AY1 - B AH0 L\nTRIBALISM  T R AY1 - B AH0 - L IH0 Z M\nTRIBALISM(2)  T R AY1 - B AH0 - L IH0 - Z AH0 M\nTRIBASA  T R AY1 - B AE1 - S AH0\nTRIBBETT  T R IH1 - B IH0 T\nTRIBBEY  T R IH1 - B IY0\nTRIBBLE  T R IH1 - B AH0 L\nTRIBBLES  T R IH1 - B AH0 L Z\nTRIBBY  T R IH1 - B IY0\nTRIBE  T R AY1 B\nTRIBE'S  T R AY1 B Z\nTRIBECA  T R IH0 - B EH1 - K AH0\nTRIBES  T R AY1 B Z\nTRIBESMAN  T R AY1 B Z - M AE0 N\nTRIBESMEN  T R AY1 B Z - M IH0 N\nTRIBLE  T R IH1 - B AH0 L\nTRIBOROUGH  T R AY1 - B ER0 - OW0\nTRIBULATION  T R IH2 - B Y AH0 - L EY1 - SH AH0 N\nTRIBULATIONS  T R IH2 - B Y AH0 - L EY1 - SH AH0 N Z\nTRIBULL  T R IH1 - B AH0 L\nTRIBUNAL  T R AH0 - B Y UW1 - N AH0 L\nTRIBUNALS  T R AY2 - B Y UW1 - N AH0 L Z\nTRIBUNE  T R IH1 - B Y UW0 N\nTRIBUNE'S  T R IH1 - B Y UW0 N Z\nTRIBUTARIES  T R IH1 - B Y AH0 - T EH2 - R IY0 Z\nTRIBUTARY  T R IH1 - B Y AH0 - T EH2 - R IY0\nTRIBUTE  T R IH1 - B Y UW0 T\nTRIBUTES  T R IH1 - B Y UW0 T S\nTRICARICO  T R IY0 - K AA0 - R IY1 - K OW0\nTRICE  T R AY1 S\nTRICENTROL  T R AY2 - S EH1 N - T R AA0 L\nTRICENTROL'S  T R AY2 - S EH1 N - T R AA0 L Z\nTRICEPS  T R AY1 - S EH2 P S\nTRICERATOPS  T R AY2 - S EH1 - R AH0 - T AO2 P S\nTRICHE  T R IH1 CH\nTRICHET  T R IH1 - CH IH0 T\nTRICIA  T R IH1 - SH AH0\nTRICIA'S  T R IH1 - SH AH0 Z\nTRICIL  T R IH1 - S IH0 L\nTRICK  T R IH1 K\nTRICKED  T R IH1 K T\nTRICKEL  T R IH1 - K AH0 L\nTRICKERY  T R IH1 - K ER0 - IY0\nTRICKETT  T R IH1 - K IH0 T\nTRICKEY  T R IH1 - K IY0\nTRICKIER  T R IH1 - K IY0 - ER0\nTRICKIEST  T R IH1 - K IY0 - AH0 S T\nTRICKING  T R IH1 - K IH0 NG\nTRICKLE  T R IH1 - K AH0 L\nTRICKLED  T R IH1 - K AH0 L D\nTRICKLES  T R IH1 - K AH0 L Z\nTRICKLING  T R IH1 - K L IH0 NG\nTRICKS  T R IH1 K S\nTRICKSTER  T R IH1 K - S T ER0\nTRICKSTERS  T R IH1 K - S T ER0 Z\nTRICKY  T R IH1 - K IY0\nTRICO  T R IY1 - K OW0\nTRICUSPID  T R AY0 - K AH1 - S P AH0 D\nTRICYCLE  T R IH1 - S IH0 - K AH0 L\nTRIDENT  T R AY1 - D AH0 N T\nTRIDEX  T R IH1 - D EH2 K S\nTRIED  T R AY1 D\nTRIENNIAL  T R AY0 - EH1 - N IY0 - AH0 L\nTRIER  T R AY1 - ER0\nTRIERWEILER  T R IH1 R - W AY0 - L ER0\nTRIES  T R AY1 Z\nTRIESTE  T R IY1 S T\nTRIEU  T R UW1\nTRIFARI  T R IH0 - F AA1 - R IY0\nTRIFLE  T R AY1 - F AH0 L\nTRIFLES  T R AY1 - F AH0 L Z\nTRIFLING  T R AY1 - F L IH0 NG\nTRIG  T R IH1 G\nTRIGG  T R IH1 G\nTRIGGER  T R IH1 - G ER0\nTRIGGERED  T R IH1 - G ER0 D\nTRIGGERING  T R IH1 - G ER0 - IH0 NG\nTRIGGERS  T R IH1 - G ER0 Z\nTRIGGS  T R IH1 G Z\nTRIGLYCERIDE  T R AY0 - G L IH1 - S ER0 - AY2 D\nTRIGLYCERIDES  T R AY0 - G L IH1 - S ER0 - AY2 D Z\nTRIGO  T R IY1 - G OW0\nTRILATERAL  T R AY0 - L AE1 - T ER0 - AH0 L\nTRILBY  T R IH1 L - B IY0\nTRILL  T R IH1 L\nTRILLIN  T R IH1 - L IH0 N\nTRILLING  T R IH1 - L IH0 NG\nTRILLION  T R IH1 - L Y AH0 N\nTRILLIONS  T R IH1 - L Y AH0 N Z\nTRILLO  T R IH1 - L OW0\nTRILOGY  T R IH1 - L AH0 - JH IY0\nTRILON  T R IH1 - L AH0 N\nTRIM  T R IH1 M\nTRIMAC  T R IH1 - M AE0 K\nTRIMARCHI  T R IY0 - M AA1 R - K IY0\nTRIMARCO  T R IH0 - M AA1 R - K OW0\nTRIMAS  T R IY1 - M AH0 S\nTRIMBLE  T R IH1 M - B AH0 L\nTRIMBOLI  T R IY0 M - B OW1 - L IY0\nTRIMEDYNE  T R AY1 M - D AY2 N\nTRIMESTER  T R AY0 - M EH1 - S T ER0\nTRIMETREXATE  T R IH0 - M EH1 - T R AH0 K - S EY2 T\nTRIMM  T R IH1 M\nTRIMMED  T R IH1 M D\nTRIMMER  T R IH1 - M ER0\nTRIMMERS  T R IH1 - M ER0 Z\nTRIMMING  T R IH1 - M IH0 NG\nTRIMMINGS  T R IH1 - M IH0 NG Z\nTRIMPE  T R IH1 M P\nTRIMS  T R IH1 M Z\nTRINCOMALEE  T R IH0 NG - K OW1 - M AH0 - L IY0\nTRINE  T R AY1 N\nTRINGALI  T R IH0 NG - G AA1 - L IY0\nTRINH  T R IH1 N\nTRINIDAD  T R IH1 - N IH0 - D AE2 D\nTRINITY  T R IH1 - N AH0 - T IY0\nTRINITY'S  T R IH1 - N IH0 - T IY0 Z\nTRINITY(2)  T R IH1 - N IH0 - T IY0\nTRINKA  T R IH1 NG - K AH0\nTRINKET  T R IH1 NG - K AH0 T\nTRINKETS  T R IH1 NG - K AH0 T S\nTRINKLE  T R IH1 NG - K AH0 L\nTRINOVA  T R AY2 - N OW1 - V AH0\nTRINTEX  T R IH1 N - T EH2 K S\nTRIO  T R IY1 - OW2\nTRIO'S  T R IY1 - OW2 Z\nTRIOLA  T R IY0 - OW1 - L AH0\nTRIOLO  T R IY0 - OW1 - L OW0\nTRIOMPHE  T R IY0 - OW1 M F\nTRIP  T R IH1 P\nTRIP'S  T R IH1 P S\nTRIPARTITE  T R AY0 - P AA1 R - T AY2 T\nTRIPE  T R AY1 P\nTRIPI  T R IY1 - P IY0\nTRIPLE  T R IH1 - P AH0 L\nTRIPLECAST  T R IH1 - P AH0 L - K AE2 S T\nTRIPLED  T R IH1 - P AH0 L D\nTRIPLES  T R IH1 - P AH0 L Z\nTRIPLET  T R IH1 - P L AH0 T\nTRIPLETS  T R IH1 - P L AH0 T S\nTRIPLETT  T R IH1 - P L IH0 T\nTRIPLICATE  T R IH1 - P L IH0 - K AH0 T\nTRIPLING  T R IH1 - P AH0 L - IH0 NG\nTRIPLING(2)  T R IH1 - P L IH0 NG\nTRIPOD  T R AY1 - P AA2 D\nTRIPODI  T R IY0 - P OW1 - D IY0\nTRIPODS  T R AY1 - P AA2 D Z\nTRIPOLI  T R IH1 - P AH0 - L IY0\nTRIPOLI'S  T R IH1 - P AH0 - L IY0 Z\nTRIPP  T R IH1 P\nTRIPPE  T R IH1 P\nTRIPPED  T R IH1 P T\nTRIPPEL  T R IH1 - P AH0 L\nTRIPPER  T R IH1 - P ER0\nTRIPPERS  T R IH1 - P ER0 Z\nTRIPPETT  T R IH1 - P IH0 T\nTRIPPING  T R IH1 - P IH0 NG\nTRIPPLE  T R IH1 - P AH0 L\nTRIPS  T R IH1 P S\nTRIPTYCH  T R IH1 P - T IH0 K\nTRIREMES  T R AY1 - R IY2 M Z\nTRISH  T R IH1 SH\nTRISHA  T R IH1 - SH AH0\nTRISHA'S  T R IH1 - SH AH0 Z\nTRISKA  T R IH1 - S K AH0\nTRISLER  T R IH1 - S AH0 - L ER0\nTRISLER(2)  T R IH1 S - L ER0\nTRISM  T R IH1 - Z AH0 M\nTRISTA  T R IH1 - S T AH0\nTRISTAN  T R IH1 - S T AE2 N\nTRISTAR  T R AY1 - S T AA2 R\nTRISTATE  T R AY1 - S T EY2 T\nTRISTRAM  T R IH1 S - T R AH0 M\nTRITCH  T R IH1 CH\nTRITE  T R AY1 T\nTRITES  T R AY1 T S\nTRITIUM  T R IH1 - T IY0 - AH0 M\nTRITON  T R AY1 - T AH0 N\nTRITON'S  T R AY1 - T AH0 N Z\nTRITSCH  T R IH1 CH\nTRITSCHLER  T R IH1 CH - L ER0\nTRITT  T R IH1 T\nTRITZ  T R IH1 T S\nTRIUMPH  T R AY1 - AH0 M F\nTRIUMPHAL  T R AY0 - AH1 M - F AH0 L\nTRIUMPHANT  T R AY0 - AH1 M - F AH0 N T\nTRIUMPHANTLY  T R AY0 - AH1 M - F AH0 N T - L IY0\nTRIUMPHED  T R AY1 - AH0 M F T\nTRIUMPHS  T R AY1 - AH0 M F S\nTRIUMVIRATE  T R AY0 - AH1 M - V ER0 - AH0 T\nTRIVEDI  T R IY0 - V EH1 - D IY0\nTRIVEST  T R IH1 - V AH0 S T\nTRIVEST(2)  T R AY1 - V EH2 S T\nTRIVETT  T R IH1 - V IH0 T\nTRIVETTE  T R IH0 - V EH1 T\nTRIVIA  T R IH1 - V IY0 - AH0\nTRIVIAL  T R IH1 - V IY0 - AH0 L\nTRIVIALITY  T R IH2 - V IY0 - AE1 - L AH0 - T IY0\nTRIVIALIZE  T R IH1 - V IY0 - AH0 - L AY2 Z\nTRIVIALIZE(2)  T R IH1 - V Y AH0 - L AY2 Z\nTRIVIALIZED  T R IH1 - V IY0 - AH0 - L AY2 Z D\nTRIVIALIZED(2)  T R IH1 - V Y AH0 - L AY2 Z D\nTRIVIALIZES  T R IH1 - V IY0 - AH0 - L AY2 - Z IH0 Z\nTRIVIALIZES(2)  T R IH1 - V Y AH0 - L AY2 - Z IH0 Z\nTRIVIALIZING  T R IH1 - V IY0 - AH0 - L AY2 - Z IH0 NG\nTRIVIALIZING(2)  T R IH1 - V Y AH0 - L AY2 - Z IH0 NG\nTRIXIE  T R IH1 K - S IY0\nTRIXY  T R IH1 K - S IY0\nTRIZEC  T R IH1 - Z AH0 K\nTRIZEC'S  T R IH1 - Z EH0 K S\nTRNKA  T R IH1 NG - K AH0\nTRNKA  T R NG K AA1\nTRNOPOLJE  T R AH0 - N AO1 - P AO0 - L IY0\nTRNOPOLJE(2)  T R AH0 - N AO1 - P AO0 L - Y IY0\nTROBAUGH  T R AA1 - B AO0\nTROCHE  T R AA1 CH\nTROCHMANN  T R AA1 CH - M AE0 N\nTROCHMANN(2)  T R AA1 K - M AE0 N\nTROCKI  T R AA1 - K IY0\nTROD  T R AA1 D\nTROEGER  T R OW1 - G ER0\nTROENDLE  T R OW1 N - D AH0 L\nTROESTER  T R OW1 - S T ER0\nTROGDON  T R AA1 G - D AH0 N\nTROHA  T R OW1 - HH AH0\nTROIA  T R OW1 - Y AH0\nTROIANI  T R OW0 - Y AA1 - N IY0\nTROIANO  T R OW0 - IY0 - AA1 - N OW0\nTROIKA  T R OY1 - K AH0\nTROIS  T W AA1\nTROISE  T R OY1 Z\nTROISI  T R OY1 - S IY0\nTROJAN  T R OW1 - JH AH0 N\nTROJANOWSKI  T R AH0 - Y AH0 - N AO1 F S - K IY0\nTROJANS  T R OW1 - JH AH0 N Z\nTROKEL  T R OW1 - K AH0 L\nTROLINGER  T R OW1 - L IH0 - NG ER0\nTROLL  T R OW1 L\nTROLLEY  T R AA1 - L IY0\nTROLLEYS  T R AA1 - L IY0 Z\nTROLLING  T R OW1 - L IH0 NG\nTROLLINGER  T R OW1 - L IH0 - NG ER0\nTROMA  T R OW1 - M AH0\nTROMBINO  T R OW0 M - B IY1 - N OW0\nTROMBLEY  T R AA1 M - B L IY0\nTROMBLY  T R AA1 M - B L IY0\nTROMBONE  T R AA0 M - B OW1 N\nTROMBONES  T R AA0 M - B OW1 N Z\nTROMBONIST  T R AA2 M - B OW1 - N IH0 S T\nTROMP  T R AA1 M P\nTROMPETER  T R AA1 M P - IY0 - T ER0\nTRON  T R AA1 N\nTRONCOSO  T R OW0 N - K OW1 - S OW0\nTRONE  T R OW1 N\nTRONIC  T R AA1 - N IH0 K\nTROON  T R UW1 N\nTROOP  T R UW1 P\nTROOP'S  T R UW1 P S\nTROOPED  T R UW1 P T\nTROOPER  T R UW1 - P ER0\nTROOPER'S  T R UW1 - P ER0 Z\nTROOPERS  T R UW1 - P ER0 Z\nTROOPERS'  T R UW1 - P ER0 Z\nTROOPING  T R UW1 - P IH0 NG\nTROOPS  T R UW1 P S\nTROOPS'  T R UW1 P S\nTROOST  T R UW1 S T\nTROPEA  T R OW1 - P IY0 - AH0\nTROPEANO  T R OW2 - P IY1 - N OW0\nTROPHIES  T R OW1 - F IY0 Z\nTROPHY  T R OW1 - F IY0\nTROPIC  T R AA1 - P IH0 K\nTROPICAL  T R AA1 - P IH0 - K AH0 L\nTROPICANA  T R AA2 - P IH0 - K AE1 - N AH0\nTROPICANA'S  T R AA2 - P IH0 - K AE1 - N AH0 Z\nTROPICS  T R AA1 - P IH0 K S\nTROPOPAUSE  T R AA1 - P AH0 - P AO2 Z\nTROPP  T R AA1 P\nTROPWORLD  T R AA1 P - W ER0 L D\nTROSCH  T R AA1 SH\nTROSCLAIR  T R AH0 S - K L EH1 R\nTROSPER  T R AA1 - S P ER0\nTROST  T R AA1 S T\nTROSTEL  T R AA1 - S T AH0 L\nTROSTLE  T R AA1 - S AH0 L\nTROT  T R AA1 T\nTROTH  T R OW1 TH\nTROTH(2)  T R AO1 TH\nTROTMAN  T R AA1 T - M AH0 N\nTROTS  T R AA1 T S\nTROTSKY  T R AA1 T S - K IY2\nTROTT  T R AA1 T\nTROTTED  T R AA1 - T AH0 D\nTROTTED(2)  T R AA1 - T IH0 D\nTROTTEN  T R AA1 - T AH0 N\nTROTTER  T R AA1 - T ER0\nTROTTIER  T R AA1 - T IY0 - ER0\nTROTTING  T R AA1 - T IH0 NG\nTROUBADOUR  T R UW1 - B AH0 - D AO2 R\nTROUBH  T R UW1 B\nTROUBLE  T R AH1 - B AH0 L\nTROUBLED  T R AH1 - B AH0 L D\nTROUBLEFIELD  T R AH1 - B AH0 L - F IY2 L D\nTROUBLEMAKER  T R AH1 - B AH0 L - M EY2 - K ER0\nTROUBLEMAKERS  T R AH1 - B AH0 L - M EY2 - K ER0 Z\nTROUBLES  T R AH1 - B AH0 L Z\nTROUBLESHOOTER  T R AH1 - B AH0 L - SH UW2 - T ER0\nTROUBLESOME  T R AH1 - B AH0 L - S AH0 M\nTROUBLING  T R AH1 - B AH0 L - IH0 NG\nTROUBLING(2)  T R AH1 - B L IH0 NG\nTROUDT  T R AW1 D T\nTROUGH  T R AO1 F\nTROUGHS  T R AO1 F S\nTROUNCE  T R AW1 N S\nTROUNCED  T R AW1 N S T\nTROUNCING  T R AW1 N - S IH0 NG\nTROUNG  T R AW1 NG\nTROUP  T R UW1 P\nTROUPE  T R UW1 P\nTROUPE'S  T R UW1 P S\nTROUPES  T R UW1 P S\nTROUSDALE  T ER1 - AH0 S - D EY0 L\nTROUSER  T R AW1 - Z ER0\nTROUSERS  T R AW1 - Z ER0 Z\nTROUT  T R AW1 T\nTROUT'S  T R AW1 T S\nTROUTMAN  T R AW1 T - M AH0 N\nTROUTNER  T R AW1 T - N ER0\nTROUTT  T R AW1 T\nTROUTWINE  T R AW1 T - W AY2 N\nTROVATO  T R OW0 - V AA1 - T OW0\nTROVATORE  T R OW1 - V AH0 - T AO2 R\nTROVE  T R OW1 V\nTROW  T R OW1\nTROWBRIDGE  T R OW1 - B R IH0 JH\nTROWEL  T R AW1 W - EH0 L\nTROWELL  T R AA1 - W EH0 L\nTROWER  T R AW1 - ER0\nTROXEL  T R AA1 K - S AH0 L\nTROXELL  T R AA1 K - S AH0 L\nTROXLER  T R AA1 K S - L ER0\nTROY  T R OY1\nTROYAN  T R OY1 - AH0 N\nTROYANOS  T R OY2 - AA1 - N OW0 S\nTROYAT  T R OY1 - AE0 T\nTROYER  T R OY1 - ER0\nTROYKA  T R OY1 - K AH0\nTROYU  T R OY0 - UW1\nTRUANCY  T R UW1 - AH0 N - S IY0\nTRUANT  T R UW1 - AH0 N T\nTRUAX  T R UW1 - AE0 K S\nTRUBEY  T R UW1 - B IY0\nTRUBY  T R UW1 - B IY0\nTRUCCO  T R UW1 - K OW0\nTRUCE  T R UW1 S\nTRUCHAN  T R AH1 - CH AH0 N\nTRUCK  T R AH1 K\nTRUCK'S  T R AH1 K S\nTRUCKED  T R AH1 K T\nTRUCKEE  T R AH1 - K IY0\nTRUCKER  T R AH1 - K ER0\nTRUCKERS  T R AH1 - K ER0 Z\nTRUCKERS'  T R AH1 - K ER0 Z\nTRUCKING  T R AH1 - K IH0 NG\nTRUCKLOAD  T R AH1 - K L OW2 D\nTRUCKLOADS  T R AH1 - K L OW2 D Z\nTRUCKS  T R AH1 K S\nTRUCKS'  T R AH1 K S\nTRUCULENT  T R AH1 - K Y AH0 - L AH0 N T\nTRUDA  T R UW1 - D AH0\nTRUDE  T R UW1 D\nTRUDEAU  T R UW0 - D OW1\nTRUDEL  T R UW1 - D AH0 L\nTRUDELL  T R AH1 - D AH0 L\nTRUDGE  T R AH1 JH\nTRUDGED  T R AH1 JH D\nTRUDGEN  T R AH1 - JH AH0 N\nTRUDGES  T R AH1 - JH IH0 Z\nTRUDGING  T R AH1 - JH IH0 NG\nTRUDIA  T R UW1 - D IY0 - AH0\nTRUDIE  T R UW1 - D IY0\nTRUDO  T R UW1 - D OW0\nTRUDY  T R UW1 - D IY0\nTRUE  T R UW1\nTRUE-VIEW  T R UW1 - V Y UW1\nTRUEBLOOD  T R UW1 - B L AH2 D\nTRUELL  T R UW1 - AH0 L\nTRUELOVE  T R UW1 - L AH2 V\nTRUEMAN  T R UH1 - M AH0 N\nTRUER  T R UW1 - ER0\nTRUESDALE  T R UW1 Z - D EY2 L\nTRUESDELL  T R UW1 Z - D EH2 L\nTRUEST  T R UW1 - IH0 S T\nTRUETT  T R UW1 T\nTRUEX  T R UW1 - EH2 K S\nTRUFFAUT  T R UW0 - F OW1\nTRUFFAUT'S  T R UW0 - F OW1 Z\nTRUFFLE  T R AH1 - F AH0 L\nTRUFFLES  T R AH1 - F AH0 L Z\nTRUGLIO  T R AH1 G - L IY0 - OW0\nTRUICKO  T R UW1 - K OW0\nTRUICKO(2)  T R UW2 - IY1 - K OW0\nTRUISM  T R UW1 - IH0 - Z AH0 M\nTRUITT  T R UW1 T\nTRUJILLO  T R UW0 - HH IY1 - OW0\nTRULL  T R AH1 L\nTRULLINGER  T R AH1 L - IH0 - NG ER0\nTRULOCK  T R AH1 - L AH0 K\nTRULOVE  T R UW0 - L OW1 - V IY0\nTRULSON  T R AH1 L - S AH0 N\nTRULUCK  T R AH1 - L AH0 K\nTRULY  T R UW1 - L IY0\nTRUMAN  T R UW1 - M AH0 N\nTRUMAN'S  T R UW1 - M AH0 N Z\nTRUMBLE  T R AH1 M - B AH0 L\nTRUMBO  T R AH1 M - B OW0\nTRUMBULL  T R AH1 M - B AH0 L\nTRUMKA  T R AH1 M - K AH0\nTRUMP  T R AH1 M P\nTRUMP'S  T R AH1 M P S\nTRUMPED  T R AH1 M P T\nTRUMPET  T R AH1 M - P AH0 T\nTRUMPETED  T R AH1 M - P AH0 - T IH0 D\nTRUMPETER  T R AH1 M - P AH0 - T ER0\nTRUMPETING  T R AH1 M - P AH0 - T IH0 NG\nTRUMPETS  T R AH1 M - P AH0 T S\nTRUMPOWER  T R AH1 M - P OW2 - ER0\nTRUMPS  T R AH1 M P S\nTRUNCATE  T R AH1 NG - K EY2 T\nTRUNCATED  T R AH1 NG - K EY2 - T IH0 D\nTRUNCHEON  T R AH1 N - CH IH0 N\nTRUNCHEONS  T R AH1 N - CH IH0 N Z\nTRUNDLE  T R AH1 N - D AH0 L\nTRUNDLED  T R AH1 N - D AH0 L D\nTRUNK  T R AH1 NG K\nTRUNKLINE  T R AH1 NG - K L AY2 N\nTRUNKS  T R AH1 NG K S\nTRUNNELL  T R AH1 - N AH0 L\nTRUNZO  T R AH1 N - Z OW0\nTRUONG  T R AO1 NG\nTRUPIANO  T R UW0 - P IY0 - AA1 - N OW0\nTRUPIN  T R UW1 - P IH0 N\nTRUPIN'S  T R UW1 - P IH0 N Z\nTRUPP  T R AH1 P\nTRURO  T R UW1 - R OW0\nTRUS  T R AH1 S\nTRUSCOTT  T R AH1 - S K AH0 T\nTRUSKOWSKI  T R AH0 S K - AO1 F S - K IY0\nTRUSLER  T R AH1 - S AH0 - L ER0\nTRUSLER(2)  T R AH1 S - L ER0\nTRUSLOW  T R AH1 - S L OW0\nTRUSS  T R AH1 S\nTRUSSELL  T R AH1 - S AH0 L\nTRUSSES  T R AH1 - S IH0 Z\nTRUST  T R AH1 S T\nTRUST'S  T R AH1 S T S\nTRUSTCO  T R AH1 S T - K OW0\nTRUSTCORP  T R AH1 S T - K AO0 R P\nTRUSTED  T R AH1 - S T IH0 D\nTRUSTEE  T R AH2 - S T IY1\nTRUSTEE'S  T R AH2 - S T IY1 Z\nTRUSTEES  T R AH2 - S T IY1 Z\nTRUSTEES'  T R AH2 - S T IY1 Z\nTRUSTEESHIP  T R AH2 - S T IY1 - SH IH2 P\nTRUSTHOUSE  T R AH1 S T - HH AW2 S\nTRUSTING  T R AH1 - S T IH0 NG\nTRUSTS  T R AH1 S T S\nTRUSTS'  T R AH1 S T S\nTRUSTWORTHINESS  T R AH1 S T - W ER2 - DH IY0 - N AH0 S\nTRUSTWORTHY  T R AH1 S T - W ER2 - DH IY0\nTRUSTY  T R AH1 - S T IY0\nTRUSZKOWSKI  T R AH0 SH - K AO1 F S - K IY0\nTRUTH  T R UW1 TH\nTRUTHFUL  T R UW1 TH - F AH0 L\nTRUTHFULLY  T R UW1 TH - F AH0 - L IY0\nTRUTHFULNESS  T R UW1 TH - F AH0 L - N AH0 S\nTRUTHS  T R UW1 TH S\nTRUXAL  T R AH1 K - S AH0 L\nTRUXILLO  T R AH2 K - S IH1 - L OW0\nTRY  T R AY1\nTRY-ON  T R AY1 - AA1 N\nTRY-ONS  T R AY1 - AA1 N Z\nTRYART  T R AY1 - AA2 R T\nTRYBA  T R IH1 - B AH0\nTRYBUS  T R IH1 - B IH0 S\nTRYGG  T R IH1 G\nTRYGSTAD  T R IH1 G - S T AH0 D\nTRYGVE  T R IH1 G - V IY0\nTRYIN'  T R AY1 - IH0 N\nTRYING  T R AY1 - IH0 NG\nTRYING(2)  T R AY1 NG\nTRYON  T R AY1 - AH0 N\nTRYOUT  T R AY1 - AW2 T\nTRYOUTS  T R AY1 - AW2 T S\nTRYPHENA  T R IH1 - F IH0 - N AH0\nTRYST  T R AY1 S T\nTRZASKA  T ER0 - Z AA1 - S K AH0\nTRZCINSKI  T ER0 - ZH IH1 N - S K IY0\nTRZECIAK  T ER0 - Z EH1 - CH IY0 - AE0 K\nTS  T IY1 - EH1 S\nTSAI  T S AY1\nTSAI'S  T S AY1 Z\nTSAI'S(2)  S AY1 Z\nTSAI(2)  S AY1\nTSAKOS  T S AA1 - K OW0 S\nTSANG  T S AE1 NG\nTSANG(2)  S AE1 NG\nTSAO  T S AW1\nTSAO(2)  S AW1\nTSAR  Z AA1 R\nTSAR(2)  T S AA1 R\nTSCHANTZ  CH AE1 N T S\nTSCHETTER  CH EH1 - T ER0\nTSCHIDA  CH AY1 - D AH0\nTSCHIRHART  CH ER1 - HH AA0 R T\nTSCHOPP  CH AA1 P\nTSCHUDY  CH UW1 - D IY0\nTSCHUMI  CH UW1 - M IY0\nTSE  T S IY1\nTSE(2)  S IY1\nTSEMEL  T S EH1 - M AH0 L\nTSENG  T S EH1 NG\nTSENG(2)  S EH1 NG\nTSETSE  T S IY1 - T S IY0\nTSETSE(2)  T IY1 T - S IY0\nTSIANG  T S Y AE1 NG\nTSINGTAO  S IH1 NG - T AW2\nTSINGTAO(2)  T S IH1 NG - D AW2\nTSO  T S OW1\nTSO(2)  S OW1\nTSONGAS  T S AO1 NG - G AH0 S\nTSONGAS'  T S AO1 NG - G AH0 S\nTSONGAS'(2)  S AO1 NG - G AH0 S\nTSONGAS'S  T S AO1 NG - G AH0 - S AH0 Z\nTSONGAS'S(2)  S AO1 NG - G AH0 - S AH0 Z\nTSONGAS(2)  S AO1 NG - G AH0 S\nTSUDA  T S UW1 - D AH0\nTSUDA(2)  S UW1 - D AH0\nTSUI  T S UW1 - IY0\nTSUI(2)  S UW1 - IY0\nTSUJI  T S UW1 - JH IY0\nTSUJI(2)  S UW1 - JH IY0\nTSUKAMOTO  T S UW0 - K AA0 - M OW1 - T OW0\nTSUKAMOTO(2)  S UW0 - K AA0 - M OW1 - T OW0\nTSUKUBA  T S UW2 - K Y UW1 - B AH0\nTSUKUBA(2)  S UW2 - K Y UW1 - B AH0\nTSUNAMI  T S UW0 - N AA1 - M IY0\nTSUNAMI(2)  S UW0 - N AA1 - M IY0\nTSUNEO  T S UW1 - N IY0 - OW0\nTSUNEO(2)  S UW1 - N IY0 - OW0\nTSURUMI  T S UW0 - R UW1 - M IY0\nTSURUMI(2)  S UW0 - R UW1 - M IY0\nTSUTOMU  T S UW0 - T OW1 - M UW0\nTT'S  T IY1 - T IY1 Z\nTU  T UW1\nTUB  T AH1 B\nTUBA  T UW1 - B AH0\nTUBAL  T UW1 - B AH0 L\nTUBB  T AH1 B\nTUBBS  T AH1 B Z\nTUBBY  T AH1 - B IY0\nTUBE  T UW1 B\nTUBE(2)  T Y UW1 B\nTUBERCULOSIS  T AH0 - B ER2 - K Y AH0 - L OW1 - S IH0 S\nTUBERCULOSIS(2)  T UW0 - B ER2 - K Y AH0 - L OW1 - S AH0 S\nTUBERCULOSIS(3)  T UW0 - B ER2 - K Y UW0 - L OW1 - S AH0 S\nTUBERVILLE  T UW1 - B ER0 - V IH2 L\nTUBES  T UW1 B Z\nTUBING  T UW1 - B IH0 NG\nTUBMAN  T AH1 B - M AH0 N\nTUBS  T AH1 B Z\nTUBULAR  T UW1 - B Y AH0 - L ER0\nTUBULE  T UW1 - B Y UW0 L\nTUCCI  T UW1 - CH IY0\nTUCCI'S  T UW1 - CH IY0 S\nTUCCIARONE  T UW0 - CH ER0 - OW1 - N IY0\nTUCCILLO  T UW0 - CH IH1 - L OW0\nTUCEK  T UW1 - CH EH2 K\nTUCH  T AH1 CH\nTUCHMAN  T AH1 K - M AH0 N\nTUCHOLSKI  T AH0 - HH OW1 L - S K IY0\nTUCK  T AH1 K\nTUCKED  T AH1 K T\nTUCKER  T AH1 - K ER0\nTUCKER'S  T AH1 - K ER0 Z\nTUCKERMAN  T AH1 - K ER0 - M AH0 N\nTUCKETT  T AH1 - K IH0 T\nTUCKEY  T AH1 - K IY0\nTUCKING  T AH1 - K IH0 NG\nTUCKMAN  T AH1 K - M AH0 N\nTUCKS  T AH1 K S\nTUCSON  T UW1 - S AA2 N\nTUCUMAN  T UW1 - K Y UW0 - M AH0 N\nTUDISCO  T UW0 - D IY1 - S K OW0\nTUDJMAN  T UH1 JH - M AH0 N\nTUDJMAN'S  T UH1 JH - M AH0 N Z\nTUDOR  T UW1 - D ER0\nTUDOR'S  T Y UW1 - D ER0 Z\nTUDOR(2)  T Y UW1 - D ER0\nTUE  T UW1\nTUEL  T UW1 L\nTUELL  T UW1 L\nTUESDAY  T UW1 Z - D IY0\nTUESDAY'S  T UW1 Z - D IY0 Z\nTUESDAY'S(2)  T UW1 Z - D EY2 Z\nTUESDAY'S(3)  T Y UW1 Z - D EY2 Z\nTUESDAY(2)  T UW1 Z - D EY2\nTUESDAY(3)  T Y UW1 Z - D EY2\nTUESDAYS  T UW1 Z - D EY2 Z\nTUESDAYS(2)  T UW1 Z - D IY0 Z\nTUESDAYS(3)  T Y UW1 Z - D EY2 Z\nTUFA  T UW1 - F AH0\nTUFANO  T UW0 - F AA1 - N OW0\nTUFF  T AH1 F\nTUFNEL  T AH1 F - N IH0 L\nTUFO  T UW1 - F OW0\nTUFT  T AH1 F T\nTUFTE  T AH1 F T\nTUFTED  T AH1 F - T AH0 D\nTUFTED(2)  T AH1 F - T IH0 D\nTUFTLIKE  T AH1 F T - L AY2 K\nTUFTS  T AH1 F T S\nTUG  T AH1 G\nTUGBOAT  T AH1 G - B OW2 T\nTUGBOATS  T AH1 G - B OW2 T S\nTUGGED  T AH1 G D\nTUGGING  T AH1 - G IH0 NG\nTUGGLE  T AH1 - G AH0 L\nTUGMAN  T AH1 G - M AH0 N\nTUGS  T AH1 G Z\nTUGWELL  T AH1 - G W EH2 L\nTUHAN  T UW0 - HH AH0 N\nTUINSTRA  T UW0 - IH1 N - S T R AH0\nTUITE  T UW1 T\nTUITION  T Y UW0 - IH1 - SH AH0 N\nTUITIONS  T UW0 - IH1 - SH AH0 N Z\nTUK  T UW1 K\nTUKS  T AH1 K S\nTULA  T UW1 - L AH0\nTULANE  T UW0 - L EY1 N\nTULEY  T Y UW1 - L IY0\nTULIP  T UW1 - L AH0 P\nTULIPS  T UW1 - L AH0 P S\nTULL  T AH1 L\nTULLAR  T AH1 L - ER0\nTULLER  T AH1 L - ER0\nTULLEY  T UW1 - L IY0\nTULLIA  T AH1 - L IY0 - AH0\nTULLIER  T AH1 - L IY0 - ER0\nTULLIO  T UW1 - L IY0 - OW0\nTULLIS  T AH1 - L IH0 S\nTULLIUS  T AH1 - L IY0 - IH0 S\nTULLO  T UW1 - L OW0\nTULLOCH  T AH1 - L AH0 K\nTULLOCK  T AH1 - L AH0 K\nTULLOS  T AH1 - L OW0 Z\nTULLY  T AH1 - L IY0\nTULSA  T AH1 L - S AH0\nTUMA  T UW1 - M AH0\nTUMACOCERI  T UW2 - M AH0 - K OW1 - CH ER0 - IY0\nTUMAN  CH UW1 - M AH0 N\nTUMAZOS  T UW0 - M AA1 - Z OW0 S\nTUMBLE  T AH1 M - B AH0 L\nTUMBLED  T AH1 M - B AH0 L D\nTUMBLER  T AH1 M - B L ER0\nTUMBLER'S  T AH1 M - B L ER0 Z\nTUMBLERS  T AH1 M - B L ER0 Z\nTUMBLES  T AH1 M - B AH0 L Z\nTUMBLESON  T AH1 M - B AH0 L - S AH0 N\nTUMBLIN  T AH1 M - B L IH0 N\nTUMBLING  T AH1 M - B AH0 L - IH0 NG\nTUMBLING(2)  T AH1 M - B L IH0 NG\nTUMESCENT  T UW0 - M EH1 - S IH0 N T\nTUMEY  T AH1 - M IY0\nTUMINELLO  T UW0 - M IY0 - N EH1 - L OW0\nTUMLIN  T AH1 M - L IH0 N\nTUMLINSON  T AH1 M - L IH0 N - S AH0 N\nTUMMIES  T AH1 - M IY0 Z\nTUMMINELLO  T UW0 - M IY0 - N EH1 - L OW0\nTUMMOND  T AH1 - M AH0 N D\nTUMMY  T AH1 - M IY0\nTUMOLO  T UW0 - M OW1 - L OW0\nTUMOR  T UW1 - M ER0\nTUMORS  T UW1 - M ER0 Z\nTUMS  T AH1 M Z\nTUMS'  T AH1 M Z\nTUMULT  T UW1 - M AH0 L T\nTUMULTUOUS  T UW2 - M AH1 L - CH UW0 - AH0 S\nTUMULTY  T UW1 - M AH0 L - T IY0\nTUNA  T UW1 - N AH0\nTUNA(2)  T Y UW1 - N AH0\nTUNABLE  T UW1 - N AH0 - B AH0 L\nTUNAFISH  T UW1 - N AH0 - F IH0 SH\nTUNAS  T UW1 - N AH0 Z\nTUNDE  T AH1 N D\nTUNDRA  T AH1 N - D R AH0\nTUNE  T UW1 N\nTUNED  T UW1 N D\nTUNEFUL  T UW1 N - F AH0 L\nTUNER  T UW1 - N ER0\nTUNES  T UW1 N Z\nTUNEUP  T UW1 - N AH2 P\nTUNG  T AH1 NG\nTUNG'S  T AH1 NG Z\nTUNGATE  T UW1 - NG EY0 T\nTUNGSRAM  T AH1 NG - Z R AE2 M\nTUNGSROM  T AH1 NG - Z R AH0 M\nTUNGSROM'S  T AH1 NG - Z R AH0 M Z\nTUNGSTEN  T AH1 NG - S T AH0 N\nTUNIC  T UW1 - N IH0 K\nTUNICA  T UW1 - N IH0 - K AH0\nTUNICA'S  T UW1 - N IH0 - K AH0 Z\nTUNICATE  T UW1 - N IH0 - K AH0 T\nTUNICK  T AH1 - N IH0 K\nTUNING  T UW1 - N IH0 NG\nTUNIS  T UW1 - N IH0 S\nTUNIS(2)  T UW2 - N IY1 S\nTUNISIA  T UW2 - N IY1 - ZH AH0\nTUNISIAN  T UW2 - N IY1 - ZH AH0 N\nTUNISON  T AH1 - N IH0 - S AH0 N\nTUNISON(2)  T UW1 - N IH0 - S AH0 N\nTUNKELANG  T AH2 NG - K L AE1 NG\nTUNKS  T AH1 NG K S\nTUNKU  T AH1 NG - K UW0\nTUNNEL  T AH1 - N AH0 L\nTUNNELING  T AH1 - N AH0 L - IH0 NG\nTUNNELL  T AH1 - N AH0 L\nTUNNELS  T AH1 - N AH0 L Z\nTUNNEY  T AH1 - N IY0\nTUNNY  T AH1 - N IY0\nTUNSTALL  T AH1 N - S T AH0 L\nTUOHEY  T UW1 - HH EY0\nTUOHY  T UW1 - IY0\nTUOMI  T W OW1 - M IY0\nTUPA  T UW1 - P AH0\nTUPAC  T UW1 - P AO0 K\nTUPELO  T Y UW1 - P AH0 - L OW2\nTUPELO(2)  T UW1 - P AH0 - L OW2\nTUPELOV  T UW1 - P AH0 - L AA0 V\nTUPPER  T AH1 - P ER0\nTUPPERWARE  T AH1 - P ER0 - W EH2 R\nTUPY  T UW1 - P IY0\nTURANDOT  T ER0 - AE1 N - D AH0 T\nTURANO  T UH0 - R AA1 - N OW0\nTURBAN  T ER1 - B AH0 N\nTURBANS  T ER1 - B AH0 N Z\nTURBAS  T ER1 - B AH0 S\nTURBEN  T ER1 - B AH0 N\nTURBERVILLE  T ER1 - B ER0 - V IH2 L\nTURBETT  T ER1 - B IH0 T\nTURBEVILLE  T ER1 B - V IH0 L\nTURBIDITY  T ER0 - B IH1 - D AH0 - T IY0\nTURBIN  T ER1 - B IH0 N\nTURBINE  T ER1 - B AY0 N\nTURBINEN  T ER1 - B IH0 - N AH0 N\nTURBINES  T ER1 - B AY0 N Z\nTURBO  T ER1 - B OW0\nTURBOCHARGE  T ER1 - B OW0 - CH AA2 R JH\nTURBOCHARGED  T ER1 - B OW0 - CH AA2 R JH D\nTURBOCHARGES  T ER1 - B OW0 - CH AA2 R - JH IH0 Z\nTURBOCHARGING  T ER1 - B OW0 - CH AA2 R - JH IH0 NG\nTURBOFAN  T ER1 - B OW0 - F AE2 N\nTURBOJET  T ER1 - B OW0 - JH EH2 T\nTURBOPROP  T ER1 - B OW0 - P R AA2 P\nTURBOPROPS  T ER1 - B OW0 - P R AA2 P S\nTURBOS  T ER1 - B OW0 Z\nTURBOT  T ER2 - B OW1\nTURBOT(2)  T ER1 - B AH2 T\nTURBOTAX  T ER1 - B OW0 - T AE2 K S\nTURBULENCE  T ER1 - B Y AH0 - L AH0 N S\nTURBULENT  T ER1 - B Y AH0 - L AH0 N T\nTURBYFILL  T ER1 - B IH0 - F IH0 L\nTURCHI  T UH1 R - K IY0\nTURCHIN  T ER1 - CH IH0 N\nTURCHYN  T ER1 - CH IH0 N\nTURCK  T ER1 K\nTURCO  T ER1 - K OW0\nTURCOTT  T ER1 - K AH0 T\nTURCOTTE  T ER0 - K AO1 T\nTURE  T UH1 R\nTUREK  T Y UW1 - R IH0 K\nTURENNE  T Y UW1 - R IH0 N\nTURF  T ER1 F\nTURGEON  T ER1 - JH IH0 N\nTURGID  T ER1 - JH IH0 D\nTURGUT  T ER1 - G AH0 T\nTURI  T UH1 - R IY0\nTURIN  T Y UH1 - R IH0 N\nTURIN(2)  T UH1 - R IH0 N\nTURING  T UH1 - R IH0 NG\nTURISMO  T UH1 - R IH0 S - M OW0\nTURK  T ER1 K\nTURKEL  T ER1 - K AH0 L\nTURKEY  T ER1 - K IY0\nTURKEY'S  T ER1 - K IY0 Z\nTURKEYS  T ER1 - K IY0 Z\nTURKIC  T ER1 - K IH0 K\nTURKINGTON  T ER1 - K IH0 NG - T AH0 N\nTURKISH  T ER1 - K IH0 SH\nTURKMEN  T ER1 K - M EH2 N\nTURKMENISTAN  T ER2 K - M EH1 - N IH0 - S T AE2 N\nTURKO  T ER1 - K OW0\nTURKOVICH  T ER1 - K AH0 - V IH0 CH\nTURKS  T ER1 K S\nTURLEY  T ER1 - L IY0\nTURLINGTON  T ER1 - L IH0 NG - T AH0 N\nTURMAN  T ER1 - M AH0 N\nTURMEL  T ER1 - M AH0 L\nTURMOIL  T ER1 - M OY2 L\nTURN  T ER1 N\nTURNABOUT  T ER1 N - AH0 - B AW2 T\nTURNAGE  T ER1 - N IH0 JH\nTURNAROUND  T ER1 - N ER0 - AW2 N D\nTURNAROUNDS  T ER1 - N ER0 - AW2 N D Z\nTURNBAUGH  T ER1 N - B AO0\nTURNBO  T UH1 R N - B OW0\nTURNBOUGH  T ER1 N - B AW2\nTURNBOW  T ER1 N - B OW0\nTURNBRIDGE  T ER1 N - B R IH2 JH\nTURNBULL  T ER1 N - B UH2 L\nTURNCOAT  T ER1 N - K OW2 T\nTURNDOWN  T ER1 N - D AW2 N\nTURNED  T ER1 N D\nTURNER  T ER1 - N ER0\nTURNER'S  T ER1 - N ER0 Z\nTURNEY  T ER1 - N IY0\nTURNHAM  T ER1 N - HH AH0 M\nTURNING  T ER1 - N IH0 NG\nTURNIP  T ER1 - N AH0 P\nTURNIPS  T ER1 - N AH0 P S\nTURNIPSEED  T ER0 - N IH1 P - S IY0 D\nTURNKEY  T ER1 N - K IY2\nTURNLEY  T ER1 N - L IY0\nTURNMIRE  T ER1 N - M AY0 R\nTURNOFF  T ER1 - N AO2 F\nTURNOUT  T ER1 N - AW2 T\nTURNOUTS  T ER1 N - AW2 T S\nTURNOVER  T ER1 N - OW2 - V ER0\nTURNOVERS  T ER1 N - OW2 - V ER0 Z\nTURNPIKE  T ER1 N - P AY2 K\nTURNPIKES  T ER1 N - P AY2 K S\nTURNQUEST  T ER1 N - K W EH0 S T\nTURNQUIST  T ER1 N - K W IH0 S T\nTURNS  T ER1 N Z\nTURNSTILE  T ER1 N - S T AY2 L\nTURNSTILES  T ER1 N - S T AY2 L Z\nTURNTABLE  T ER1 N - T EY2 - B AH0 L\nTURNTABLES  T ER1 N - T EY2 - B AH0 L Z\nTURO  T UH1 - R OW0\nTUROW  T UH1 - R OW0\nTUROWSKI  T ER0 - AO1 F S - K IY0\nTURPEN  T ER1 - P AH0 N\nTURPENTINE  T ER1 - P AH0 N - T AY2 N\nTURPIN  T ER1 - P IH0 N\nTURPITUDE  T ER1 - P IH0 - T UW2 D\nTURQUOISE  T ER1 - K W OY0 Z\nTURRELL  T AO1 - R AH0 L\nTURRENTINE  T UH0 - R EH0 N - T IY1 - N IY0\nTURRET  T ER1 - AH0 T\nTURRET(2)  T ER1 T\nTURRETS  T ER1 - AH0 T S\nTURRI  T UH1 - R IY0\nTURRILL  T AO1 - R AH0 L\nTURSI  T UH1 R - S IY0\nTURSKI  T ER1 S - K IY0\nTURTLE  T ER1 - T AH0 L\nTURTLE'S  T ER1 - T AH0 L Z\nTURTLENECK  T ER1 - T AH0 L - N EH2 K\nTURTLENECKS  T ER1 - T AH0 L - N EH2 K S\nTURTLES  T ER1 - T AH0 L Z\nTURTON  T ER1 - T AH0 N\nTURVEY  T ER0 - V EY1\nTURVILLE  T ER1 - V IH2 L\nTURVY  T ER1 - V IY0\nTUSA  T UW1 - S AH0\nTUSCALOOSA  T AH2 S - K AH0 - L UW1 - S AH0\nTUSCALOOSA'S  T AH2 S - K AH0 - L UW1 - S AH0 Z\nTUSCAN  T AH1 S - K AH0 N\nTUSCANY  T AH1 S - K AH0 - N IY0\nTUSH  T UH1 SH\nTUSHES  T UH1 - SH IH0 Z\nTUSING  T UW1 - S IH0 NG\nTUSK  T AH1 S K\nTUSKEGEE  T AH1 - S K AH0 - G IY2\nTUSKEGEE(2)  T AH0 S - K IY1 - G IY2\nTUSKS  T AH1 S K S\nTUSLA  T UW1 Z - L AH0\nTUSSAUD'S  T UW0 - S OW1 Z\nTUSSAUD'S(2)  T AH0 - S OW1 Z\nTUSSEY  T AH1 - S IY0\nTUSSING  T AH1 - S IH0 NG\nTUSSLE  T AH1 - S AH0 L\nTUSSLED  T AH1 - S AH0 L D\nTUSSLES  T AH1 - S AH0 L Z\nTUSTIN  T AH1 - S T IH0 N\nTUT  T AH1 T\nTUTELAGE  T Y UW1 - T IH0 - L IH0 JH\nTUTEN  T Y UW1 - T AH0 N\nTUTHILL  T AH1 T - HH IH2 L\nTUTINO  T UW0 - T IY1 - N OW0\nTUTKO  T AH1 T - K OW0\nTUTOR  T UW1 - T ER0\nTUTORED  T UW1 - T ER0 D\nTUTORIAL  T UW0 - T AO1 - R IY0 - AH0 L\nTUTORIALS  T UW0 - T AO1 - R IY0 - AH0 L Z\nTUTORING  T UW1 - T ER0 - IH0 NG\nTUTORS  T UW1 - T ER0 Z\nTUTSI  T UW1 T - S IY0\nTUTSI'S  T UW1 T - S IY0 Z\nTUTSIS  T UW1 T - S IY0 Z\nTUTT  T AH1 T\nTUTTEROW  T AH1 - T ER0 - OW0\nTUTTI  T UW1 - T IY0\nTUTTLE  T AH1 - T AH0 L\nTUTTON  T AH1 - T AH0 N\nTUTU  T UW1 - T UW2\nTUTWILER  T AH1 T - W AY2 - L ER0\nTUX  T AH1 K S\nTUXEDO  T AH2 K - S IY1 - D OW0\nTUXEDOS  T AH0 K - S IY1 - D OW2 Z\nTUXFORD  T AH1 K S - F ER0 D\nTUXHORN  T AH1 K S - HH ER0 N\nTUYLE  T UW1 L\nTUZLA  T UW1 Z - L AH0\nTUZLA'S  T UW1 Z - L AH0 Z\nTUZZOLINO  T UW0 T - S OW0 - L IY1 - N OW0\nTV  T IY1 - V IY1\nTV(2)  T EH2 - L AH0 - V IH1 - ZH AH0 N\nTVEDT  T V EH1 D T\nTVEIT  T V IY1 T\nTVSAT  T AH0 V - S AE1 T\nTWADDELL  T W AA0 - D EH1 L\nTWADDLE  T W AA1 - D AH0 L\nTWAIN  T W EY1 N\nTWAIN'S  T W EY1 N Z\nTWANG  T W AA1 NG\nTWANGY  T W AA1 N - JH IY0\nTWARDOWSKI  T W ER0 - D AW1 S - K IY0\nTWARDY  T W AO1 R - D IY0\nTWAROG  T W AO1 - R AO0 G\nTWAS  T W AH1 Z\nTWEAK  T W IY1 K\nTWEAKED  T W IY1 K T\nTWEAKING  T W IY1 - K IH0 NG\nTWEAKS  T W IY1 K S\nTWEDT  T W EH1 D T\nTWEED  T W IY1 D\nTWEEDIE  T W IY1 - D IY0\nTWEEDLE  T W IY1 - D AH0 L\nTWEEDY  T W IY1 - D IY0\nTWEET  T W IY1 T\nTWEEZER  T W IY1 - Z ER0\nTWEEZERMAN  T W IY1 - Z ER0 - M AE2 N\nTWEEZERS  T W IY1 - Z ER0 Z\nTWELFTH  T W EH1 L F TH\nTWELVE  T W EH1 L V\nTWELVTH  T W EH1 L V TH\nTWENTIES  T W EH1 N - T IY0 Z\nTWENTIES(2)  T W EH1 - N IY0 Z\nTWENTIETH  T W EH1 N - T IY0 - AH0 TH\nTWENTIETH(2)  T W EH1 N - T IY0 - IH0 TH\nTWENTIETH(3)  T W EH1 - N IY0 - AH0 TH\nTWENTIETH(4)  T W EH1 - N IY0 - IH0 TH\nTWENTY  T W EH1 N - T IY0\nTWENTY'S  T W EH1 N - T IY0 Z\nTWENTY'S(2)  T W EH1 - N IY0 Z\nTWENTY(2)  T W EH1 - N IY0\nTWENTYSOMETHING  T W EH2 N - T IY0 - S AH1 M - TH IH0 NG\nTWENTYSOMETHING(2)  T W EH2 - N IY0 - S AH1 M - TH IH0 NG\nTWENTYSOMETHINGS  T W EH2 N - T IY0 - S AH1 M - TH IH0 NG Z\nTWENTYSOMETHINGS(2)  T W EH2 - N IY0 - S AH1 M - TH IH0 NG Z\nTWERSKY  T W ER1 S - K IY0\nTWETEN  T W IY1 - T AH0 N\nTWICE  T W AY1 S\nTWICHELL  T W IH1 - CH AH0 L\nTWIDDLE  T W IH1 - D AH0 L\nTWIDDLING  T W IH1 D - L IH0 NG\nTWIDDY  T W IH1 - D IY0\nTWIFORD  T W IH1 - F ER0 D\nTWIG  T W IH1 G\nTWIGG  T W IH1 G\nTWIGGED  T W IH1 G D\nTWIGGS  T W IH1 G Z\nTWIGGY  T W IH1 - G IY0\nTWIGS  T W IH1 G Z\nTWILIGHT  T W AY1 - L AY2 T\nTWILL  T W IH1 L\nTWILLEY  T W IH1 - L IY0\nTWIN  T W IH1 N\nTWINE  T W AY1 N\nTWINED  T W AY1 N D\nTWINGE  T W IH1 N JH\nTWINING  T W AY1 - N IH0 NG\nTWINJET  T W IH1 N - JH EH2 T\nTWINJETS  T W IH1 N - JH EH2 T S\nTWINKIE  T W IH1 NG - K IY0\nTWINKIES  T W IH1 NG - K IY0 Z\nTWINKLE  T W IH1 NG - K AH0 L\nTWINKLES  T W IH1 NG - K AH0 L Z\nTWINKLING  T W IH1 NG - K AH0 L - IH0 NG\nTWINKLING(2)  T W IH1 NG - K L IH0 NG\nTWINS  T W IH1 N Z\nTWINS'  T W IH1 N Z\nTWINSBURG  T W IH1 N Z - B ER0 G\nTWIRL  T W ER1 L\nTWIRLED  T W ER1 L D\nTWIRLER  T W ER1 - L ER0\nTWIRLING  T W ER1 - L IH0 NG\nTWIRLS  T W ER1 L Z\nTWISS  T W IH1 S\nTWIST  T W IH1 S T\nTWISTED  T W IH1 - S T AH0 D\nTWISTED(2)  T W IH1 - S T IH0 D\nTWISTER  T W IH1 - S T ER0\nTWISTERS  T W IH1 - S T ER0 Z\nTWISTING  T W IH1 - S T IH0 NG\nTWISTS  T W IH1 S T S\nTWISTY  T W IH1 - S T IY0\nTWITCH  T W IH1 CH\nTWITCHED  T W IH1 CH T\nTWITCHELL  T W IH1 - CH AH0 L\nTWITCHES  T W IH1 - CH IH0 Z\nTWITCHING  T W IH1 - CH IH0 NG\nTWITE  T W AY1 T\nTWITTY  T W IH1 - T IY0\nTWO  T UW1\nTWO'S  T UW1 Z\nTWOFOLD  T UW1 - F OW1 L D\nTWOHIG  T W OW1 - HH IH0 G\nTWOMBLY  T W UW1 M - B L IY0\nTWOMEY  T W AA1 - M IY0\nTWONSHEIN  T W AA1 N - SH AY2 N\nTWONSHEIN'S  T W AA1 N - SH AY2 N Z\nTWOREK  T W ER1 - IH0 K\nTWOS  T UW1 Z\nTWOSOME  T UW1 - S AH0 M\nTWOTHIRDS  T UW1 - TH ER1 D Z\nTWYFORD  T W AY1 - F ER0 D\nTWYLA  T W AY1 - L AH0\nTWYMAN  T W AY1 - M AH0 N\nTY  T AY1\nTYBALT  T IH1 - B AH0 L T\nTYBURSKI  T AY0 - B ER1 S - K IY0\nTYCE  T AY1 S\nTYCO  T AY1 - K OW0\nTYCO'S  T AY1 - K OW0 Z\nTYCOON  T AY0 - K UW1 N\nTYCOON'S  T AY0 - K UW1 N Z\nTYCOONS  T AY0 - K UW1 N Z\nTYDINGS  T AY1 - D IH0 NG Z\nTYE  T AY1\nTYER  T AY1 - ER0\nTYGAR  T AY1 - G AA2 R\nTYGART  T AY1 - G AA2 R T\nTYGER  T AY1 - G ER0\nTYING  T AY1 - IH0 NG\nTYKE  T AY1 K\nTYLAN  T AY1 - L AH0 N\nTYLEE  T AY1 - L IY0\nTYLENOL  T AY1 - L AH0 - N AO0 L\nTYLENOL'S  T AY1 - L AH0 - N AO0 L Z\nTYLER  T AY1 - L ER0\nTYLER'S  T AY1 - L ER0 Z\nTYLKA  T IH1 L - K AH0\nTYMINSKI  T IH0 - M IH1 N - S K IY0\nTYMNET  T AY1 M - N EH2 T\nTYMPANIC  T IH0 M - P AE1 - N IH0 K\nTYMPANUM  T IH1 M - P AH0 - N AH0 M\nTYNAN  T AY1 - N AH0 N\nTYNDALL  T IH1 N - D AH0 L\nTYNE  T AY1 N\nTYNER  T AY1 - N ER0\nTYNES  T AY1 N Z\nTYO  T AY1 - OW0\nTYO(2)  T IY1 - W AY1 - OW1\nTYPE  T AY1 P\nTYPEABLE  T AY1 - P AH0 - B AH0 L\nTYPECAST  T AY1 P - K AE2 S T\nTYPECASTING  T AY1 P - K AE2 - S T IH0 NG\nTYPED  T AY1 P T\nTYPEFACE  T AY1 P - F EY2 S\nTYPEFACES  T AY1 P - F EY2 - S AH0 Z\nTYPES  T AY1 P S\nTYPESET  T AY1 P - S EH2 T\nTYPESETTING  T AY1 P - S EH2 - T IH0 NG\nTYPEWRITER  T AY1 P - R AY2 - T ER0\nTYPEWRITERS  T AY1 P - R AY2 - T ER0 Z\nTYPEWRITING  T AY1 P - R AY2 - T IH0 NG\nTYPEWRITTEN  T AY1 P - R IH2 - T AH0 N\nTYPHOID  T AY1 - F OY0 D\nTYPHOON  T AY2 - F UW1 N\nTYPHOONS  T AY2 - F UW1 N Z\nTYPHUS  T AY1 - F AH0 S\nTYPICAL  T IH1 - P AH0 - K AH0 L\nTYPICAL(2)  T IH1 - P IH0 - K AH0 L\nTYPICALLY  T IH1 - P IH0 K - L IY0\nTYPICALLY(2)  T IH1 - P IH0 - K AH0 - L IY0\nTYPIFIED  T IH1 - P AH0 - F AY2 D\nTYPIFIES  T IH1 - P AH0 - F AY2 Z\nTYPIFY  T IH1 - P AH0 - F AY2\nTYPING  T AY1 - P IH0 NG\nTYPINGS  T AY1 - P IH0 NG Z\nTYPIST  T AY1 - P IH0 S T\nTYPISTS  T AY1 - P IH0 S T S\nTYPISTS(2)  T AY1 - P IH0 S S\nTYPISTS(3)  T AY1 - P IH0 S\nTYPO  T AY1 - P OW0\nTYPOGRAPHICAL  T AY2 - P AH0 - G R AE1 - F IH0 - K AH0 L\nTYPOGRAPHY  T AH0 - P AA1 - G R AH0 - F IY0\nTYRA  T AY1 - R AH0\nTYRANNICAL  T ER0 - AE1 - N IH0 - K AH0 L\nTYRANNIES  T IH1 - R AH0 - N IY0 Z\nTYRANNOSAURUS  T IH0 - R AE0 - N AH0 - S AO1 - R AH0 S\nTYRANNY  T IH1 - R AH0 - N IY0\nTYRANT  T AY1 - R AH0 N T\nTYRANTS  T AY1 - R AH0 N T S\nTYRE  T AY1 R\nTYREE  T AY0 - R IY1\nTYRELL  T AY1 - R AH0 L\nTYRONE  T AY2 - R OW1 N\nTYRRELL  T AY2 - R EH1 L\nTYRRHENIAN  T ER0 - IY1 - N IY0 - AH0 N\nTYSINGER  T AY1 - S IH0 N - JH ER0\nTYSON  T AY1 - S AH0 N\nTYSON'S  T AY1 - S AH0 N Z\nTYSONS  T AY1 - S AH0 N Z\nTYUS  T Y UW1 S\nT_A_C  T IY1 - EY1 - S IY1\nT_A_C(2)  T AE1 K\nU  Y UW1\nU'S  Y UW1 Z\nU.  Y UW1\nU.'S  Y UW1 Z\nU.S  Y UW1 Z\nUARCO  Y UW2 - AA1 R - K OW0\nUART  Y UW1 - AA0 R T\nUBBEN  AH1 - B AH0 N\nUBER  Y UW1 - B ER0\nUBIQUITOUS  Y UW0 - B IH1 - K W IH0 - T AH0 S\nUBIQUITY  Y UW0 - B IH1 - K W IH0 - T IY0\nUCCEL  UW1 - CH AH0 L\nUCCEL'S  UW1 - CH AH0 L Z\nUCCI  UW1 - CH IY0\nUCHIDA  UW0 - K IY1 - D AH0\nUCLAF  AH1 - K L AE0 F\nUCLAF(2)  Y UW1 - K L AE0 F\nUDAGAWA  UW2 - D AA0 - G AA1 - W AH0\nUDALE  Y UW1 - D EY2 L\nUDALL  Y UW1 - D AH0 L\nUDAY  UW1 - D EY0\nUDDIN  AH1 - D IH0 N\nUDE  UW1 D\nUDELL  AH1 - D AH0 L\nUDELLE  AH0 - D EH1 L\nUDEN  UW1 - D AH0 N\nUDO  UW1 - D OW2\nUDOLF  AH1 - D OW0 L F\nUDVAR  AH1 D - V AA0 R\nUDVERHYE  UW2 D - V EH1 R - HH IY0\nUDVERHYE'S  UW2 D - V EH1 R - HH IY0 Z\nUDVERHYE'S(2)  Y UW2 D - V EH1 R - HH IY0 Z\nUDVERHYE(2)  Y UW2 D - V EH1 R - HH IY0\nUDY  Y UW1 - D IY0\nUEBEL  UH1 - B AH0 L\nUEBERROTH  Y UW1 - B ER0 - R AO2 TH\nUECKER  UH1 - K ER0\nUECKERT  UH1 - K ER0 T\nUEDA  W EH1 - D AH0\nUEDA(2)  UW0 - EY1 - D AH0\nUEHARA  UW0 - EY0 - HH AA1 - R AH0\nUEHLING  UH1 - L IH0 NG\nUEKI  Y UW2 - EH1 - K IY0\nUELAND  UH1 - L AH0 N D\nUELMAN  UH1 L - M AH0 N\nUELMEN  UH1 L - M EH0 N\nUELMEN'S  UH1 L - M EH0 N Z\nUEMURA  UW2 - IH0 - M UW1 - R AH0\nUENO  W EH1 - N OW0\nUENO(2)  UW0 - EY1 - N OW0\nUENOHARA  W EH2 - N OW0 - HH AA1 - R AH0\nUENOHARA(2)  UW0 - EY2 - N OW0 - HH AA1 - R AH0\nUFFELMAN  AH1 - F AH0 L - M AH0 N\nUGALDE  UW0 - G AA1 L - D IY0\nUGANDA  Y UW0 - G AE1 N - D AH0\nUGANDA'S  Y UW0 - G AE1 N - D AH0 Z\nUGANDA(2)  Y UW2 - G AA1 N - D AH0\nUGANDAN  Y UW2 - G AE1 N - D AH0 N\nUGANDAN(2)  Y UW2 - G AA1 N - D AH0 N\nUGARTE  UW0 - G AA1 R - T IY0\nUGH  AH1 G\nUGITY  AH1 - G IH0 - T IY0\nUGLIER  AH1 G - L IY0 - ER0\nUGLIEST  AH1 G - L IY0 - AH0 S T\nUGLINESS  AH1 G - L IY0 - N AH0 S\nUGLY  AH1 G - L IY0\nUGOLIN  Y UW1 - G AH0 - L IH0 N\nUGOLINI  UW0 - G OW0 - L IY1 - N IY0\nUGRIC  Y UW1 - G R IH0 K\nUH  AH1\nUH-HUH  AH1 - HH AH1\nUHDE  AH1 D\nUHDE(2)  UW1 - D AH0\nUHER  UW1 - ER0\nUHH  AH1\nUHL  AH1 L\nUHLAND  UW1 - L AH0 N D\nUHLE  UW1 - AH0 L\nUHLER  UW1 - L ER0\nUHLICH  UW1 - L IH0 K\nUHLIG  UW1 - L IH0 G\nUHLIR  UW1 - L ER0\nUHLMAN  UW1 L - M AH0 N\nUHLMANN  UW1 L - M AH0 N\nUHLS  UW1 L Z\nUHR  UH1 R\nUHRICH  UH1 - R IH0 K\nUHRIG  UH1 - R IH0 G\nUHRIN  UH1 - R IH0 N\nUKASE  Y UW1 - K EY2 Z\nUKMAN  AH1 K - M AH0 N\nUKRAINE  Y UW0 - K R EY1 N\nUKRAINE'S  Y UW0 - K R EY1 N Z\nUKRAINIAN  Y UW0 - K R EY1 - N IY0 - AH0 N\nUKRAINIAN'S  Y UW0 - K R EY1 - N IY0 - AH0 N Z\nUKRAINIANS  Y UW0 - K R EY1 - N IY0 - AH0 N Z\nUKULELE  Y UW2 - K AH0 - L EY1 - L IY0\nUL  AH1 L\nUL(2)  Y UW1 - EH1 L\nULA  Y UW1 - L AH0\nULAM  Y UW1 - L AE0 M\nULAND  Y UW1 - L AH0 N D\nULATOWSKI  AH0 - L AH0 - T AO1 F S - K IY0\nULBRICH  AH1 L - B R IH0 K\nULBRICHT  AH1 L - B R IH0 K T\nULCER  AH1 L - S ER0\nULCERS  AH1 L - S ER0 Z\nULCH  AH1 L CH\nULERY  AH0 - L ER1 - IY0\nULF  AH1 L F\nULFRED  AH1 L - F ER0 D\nULGER  AH1 L - G ER0\nULI  Y UW1 - L IY0\nULIANO  UW0 - L IY0 - AA1 - N OW0\nULIBARRI  UW0 - L IY0 - B AA1 - R IY0\nULICNY  AH0 - L IH1 K - N IY0\nULIMA  UW0 - L IY1 - M AH0\nULIN  Y UW1 - L IH0 N\nULITSA  Y UW0 - L IH1 T - S AH0\nULLAND  AH1 - L AH0 N D\nULLENBERG  Y UW1 - L AH0 N - B ER0 G\nULLERY  UW1 - L ER0 - IY0\nULLMAN  AH1 L - M AH0 N\nULLMANN  AH1 L - M AH0 N\nULLMER  AH1 L - M ER0\nULLOA  UW0 - L OW1 - AH0\nULLOCK  AH1 - L AH0 K\nULLOM  AH1 - L AH0 M\nULLRICH  UH1 L - R IH0 K\nULLYSES  Y UW0 - L IH1 - S IY0 Z\nULM  AH1 L M\nULMAN  AH1 L - M AH0 N\nULMAR  AH1 L - M ER0\nULMER  AH1 L - M ER0\nULMUS  AH1 L - M AH0 S\nULREY  AH1 L - R IY0\nULRIC  AH1 L - R IH0 K\nULRICA  AH1 - L R IH0 - K AH0\nULRICH  AH1 L - R IH0 CH\nULRICK  AH1 L - R IH0 K\nULSAN  AH1 L - S AH0 N\nULSH  AH1 L SH\nULSHAFER  AH1 L - SH AH0 - F ER0\nULSTER  AH1 L - S T ER0\nULTERIOR  AH0 L - T IH1 - R IY0 - ER0\nULTIMA  AH1 L - T IH0 - M AH0\nULTIMATE  AH1 L - T AH0 - M AH0 T\nULTIMATELY  AH1 L - T AH0 - M AH0 T - L IY0\nULTIMATUM  AH2 L - T AH0 - M EY1 - T AH0 M\nULTIMATUMS  AH2 L - T AH0 - M EY1 - T AH0 M Z\nULTRA  AH1 L - T R AH0\nULTRA'S  AH1 L - T R AH0 Z\nULTRACONSERVATIVE  AH2 L - T R AH0 - K AH0 N - S ER1 - V AH0 - T IH0 V\nULTRAIR  AH1 L - T R EH2 R\nULTRAMAR  AH1 L - T R AH0 - M AA0 R\nULTRAMODERN  AH2 L - T R AH0 - M AA1 - D ER0 N\nULTRANATIONALIST  AH2 L - T R AH0 - N AE1 - SH AH0 N - AH0 - L AH0 S T\nULTRANATIONALIST'S  AH2 L - T R AH0 - N AE1 - SH AH0 N - AH0 - L AH0 S T S\nULTRANATIONALISTS  AH2 L - T R AH0 - N AE1 - SH AH0 N - AH0 - L AH0 S T S\nULTRASONIC  AH2 L - T R AH0 - S AA1 - N IH0 K\nULTRASOUND  AH2 L - T R AH0 - S AW1 N D\nULTRASYSTEM  AH1 L - T R AH0 - S IH2 - S T AH0 M\nULTRASYSTEMS  AH1 L - T R AH0 - S IH2 - S T AH0 M Z\nULTRAVIOLET  AH2 L - T R AH0 - V AY1 - AH0 - L IH0 T\nULUNDI  Y UW0 - L AH1 N - D IY0\nULVA  UW1 L - V AH0\nULVERT  AH1 L - V ER0 T\nULYSSES  Y UW0 - L IH1 - S IY0 Z\nUM  AH1 M\nUMA  Y UW1 - M AH0\nUMANA  UW0 - M AA1 - N AH0\nUMANSKY  AH0 - M AE1 N - S K IY0\nUMASS  Y UW1 - M AE1 S\nUMBACH  AH1 M - B AA2 K\nUMBARGER  AH1 M - B AA2 R - G ER0\nUMBAUGH  AH1 M - B AW0\nUMBEL  AH1 M - B AH0 L\nUMBERGER  AH1 M - B ER0 - G ER0\nUMBERTO  AH0 M - B EH1 R - T OW2\nUMBILICAL  AH0 M - B IH1 - L IH0 - K AH0 L\nUMBLE  AH1 M - B AH0 L\nUMBRA  AH1 M - B R AH0\nUMBRAGE  AH1 M - B R IH0 JH\nUMBRELLA  AH0 M - B R EH1 - L AH0\nUMBRELLA(2)  AH1 M - B R EH2 - L AH0\nUMBRELLAS  AH0 M - B R EH1 - L AH0 Z\nUMETSU  Y UW2 - M EH1 T - S UW0\nUMFLEET  AH1 M - F L IY2 T\nUMHOLTZ  AH1 M - HH OW2 L T S\nUMLAND  AH1 M - L AH0 N D\nUMLASI  UW2 M - L AA1 - S IY0\nUMLAUF  AH1 M - L AW0 F\nUMM  AH1 M\nUMMEL  AH1 - M AH0 L\nUMPHLETT  AH0 M - F L EH1 T\nUMPHRESS  AH1 M - F R IH0 S\nUMPHREY  AH1 M - F R IY0\nUMPIRE  AH1 M - P AY2 - ER0\nUMPIRES  AH1 M - P AY2 - ER0 Z\nUMPTEEN  AH1 M P - T IY1 N\nUMPTEENTH  AH1 M P - T IY2 N TH\nUMSCHEID  AH1 M - SH AY2 D\nUMSTEAD  AH1 M - S T EH2 D\nUN  AH1 N\nUN(2)  Y UW1 - EH1 N\nUNA  UW1 - N AH0\nUNABASHED  AH2 N - AH0 - B AE1 SH T\nUNABASHEDLY  AH2 N - AH0 - B AE1 - SH IH0 D - L IY0\nUNABATED  AH2 N - AH0 - B EY1 - T IH0 D\nUNABLE  AH0 N - EY1 - B AH0 L\nUNABOM  Y UW1 - N AH0 - B AO2 M\nUNABOMB  Y UW1 - N AH0 - B AO2 M\nUNABOMB'S  Y UW1 - N AH0 - B AO2 M Z\nUNABOMBER  Y UW1 - N AH0 - B AO2 - M ER0\nUNABOMBER'S  Y UW1 - N AH0 - B AO2 - M ER0 Z\nUNABOMBERS  Y UW1 - N AH0 - B AO2 - M ER0 Z\nUNABOMBING  Y UW1 - N AH0 - B AO2 - M IH0 NG\nUNABOMBINGS  Y UW1 - N AH0 - B AO2 - M IH0 NG Z\nUNABRIDGED  AH2 N - AH0 - B R IH1 JH D\nUNACCEPTABLE  AH2 N - AE0 K - S EH1 P - T AH0 - B AH0 L\nUNACCEPTABLY  AH2 N - AE0 K - S EH1 P - T AH0 - B L IY0\nUNACCOMPANIED  AH2 N - AH0 - K AH1 M - P AH0 - N IY0 D\nUNACCOUNTABLE  AH2 N - AH0 - K AW1 N - T AH0 - B AH0 L\nUNACCOUNTABLY  AH2 N - AH0 - K AW1 N - T AH0 - B L IY0\nUNACCOUNTED  AH2 N - AH0 - K AW1 N - T IH0 D\nUNACCREDITED  AH2 N - AH0 - K R EH1 - D IH2 - T IH0 D\nUNACCUSTOMED  AH2 N - AH0 - K AH1 - S T AH0 M D\nUNADDRESSED  AH2 N - AH0 - D R EH1 S T\nUNADJUST  AH2 N - AH0 - JH AH1 S T\nUNADJUSTED  AH2 N - AH0 - JH AH1 - S T IH0 D\nUNADORN  AH2 N - AH0 - D AO1 R N\nUNADORNED  AH2 N - AH0 - D AO1 R N D\nUNADULTERATED  AH2 N - AH0 - D AH1 L - T ER0 - EY2 - T IH0 D\nUNAFFECTED  AH2 N - AH0 - F EH1 K - T IH0 D\nUNAFFILIATE  AH0 N - AH0 - F IH1 - L IY0 - EY2 T\nUNAFFILIATED  AH0 N - AH0 - F IH1 - L IY0 - EY2 - T IH0 D\nUNAFFORDABLE  AH0 N - AH0 - F AO1 R - D AH0 - B AH0 L\nUNAFRAID  AH2 N - AH0 - F R EY1 D\nUNAIDED  AH0 N - EY1 - D IH0 D\nUNALIENABLE  AH0 N - EY1 - L IY0 - EH0 - N AH0 - B AH0 L\nUNALIENABLE(2)  AH0 N - EY1 - L Y EH0 - N AH0 - B AH0 L\nUNALLOCATE  AH0 - N AE1 - L AH0 - K EY2 T\nUNALLOCATED  AH0 - N AE1 - L AH0 - K EY2 - T IH0 D\nUNALLOWABLE  AH2 N - AH0 - L AW1 - AH0 - B AH0 L\nUNALLOYED  AH0 N - AE1 - L OY2 D\nUNALTERABLE  AH0 N - AO1 L - T ER0 - AH0 - B AH0 L\nUNALTERABLY  AH0 N - AO1 L - T ER0 - AH0 - B L IY0\nUNALTERED  AH0 N - AO1 L - T ER0 D\nUNAMBIGUOUS  AH2 - N AE0 M - B IH1 - G Y AH0 W - AH0 S\nUNAMBIGUOUSLY  AH0 - N AE0 M - B IH1 - G Y UW0 - AH0 S - L IY0\nUNAMENDED  AH0 N - AH0 - M EH1 N - D IH0 D\nUNAMERICAN  AH0 N - AH0 - M EH1 - R IH0 - K AH0 N\nUNAMORTIZED  AH0 - N AE1 - M ER0 - T AY2 Z D\nUNANGST  AO1 - N AH0 NG S T\nUNANIMITY  Y UW2 - N AH0 - N IH1 - M AH0 - T IY0\nUNANIMITY(2)  Y UW2 - N AH0 - N IH1 - M IH0 - T IY0\nUNANIMOUS  Y UW0 - N AE1 - N AH0 - M AH0 S\nUNANIMOUSLY  Y UW0 - N AE1 - N AH0 - M AH0 S - L IY0\nUNANNOUNCED  AH2 N - AH0 - N AW1 N S T\nUNANSWERABLE  AH2 N - AE2 N - S ER0 - AH0 - B AH0 L\nUNANSWERED  AH2 N - AE1 N - S ER0 D\nUNANTICIPATED  AH2 N - AE0 N - T IH1 - S AH0 - P EY2 - T IH0 D\nUNAPOLOGETIC  AH2 N - AH0 - P AA2 - L AH0 - JH EH1 - T IH0 K\nUNAPPEALING  AH2 N - AH0 - P IY1 - L IH0 NG\nUNAPPETIZING  AH2 N - AE1 - P AH0 - T AY2 - Z IH0 NG\nUNAPPRECIATED  AH2 N - AH0 - P R IY1 - SH IY0 - EY2 - T IH0 D\nUNAPPROVED  AH2 N - AH0 - P R UW1 V D\nUNARM  AH0 N - AA1 R M\nUNARMED  AH0 N - AA1 R M D\nUNASHAMED  AH2 N - AH0 - SH EY1 M D\nUNASHAMEDLY  AH2 N - AH0 - SH EY1 - M AH0 D - L IY0\nUNASSAILABLE  AH2 N - AH0 - S EY1 - L AH0 - B AH0 L\nUNASSISTED  AH2 N - AH0 - S IH1 - S T IH0 D\nUNASSUMING  AH2 N - AH0 - S UW1 - M IH0 NG\nUNATTACH  AH2 N - AH0 - T AE1 CH\nUNATTACHED  AH2 N - AH0 - T AE1 CH T\nUNATTAINABLE  AH2 N - AH0 - T EY1 - N AH0 - B AH0 L\nUNATTENDED  AH0 N - AH0 - T EH1 N - D IH0 D\nUNATTRACTIVE  AH2 N - AH0 - T R AE1 K - T IH0 V\nUNAUDITED  AH0 - N AO1 - D AH0 - T IH0 D\nUNAUTHENTIC  AH2 N - AO0 - TH EH1 N - T IH0 K\nUNAUTHORIZED  AH0 N - AO1 - TH ER0 - AY2 Z D\nUNAVAILABILITY  AH0 N - AH0 - V EY2 - L AH0 - B IH1 - L IH0 - T IY0\nUNAVAILABLE  AH2 N - AH0 - V EY1 - L AH0 - B AH0 L\nUNAVAILING  AH2 N - AH0 - V EY1 - L IH0 NG\nUNAVOIDABLE  AH2 N - AH0 - V OY1 - D AH0 - B AH0 L\nUNAVOIDABLY  AH2 N - AH0 - V OY1 - D AH0 - B L IY0\nUNAWARE  AH2 N - AH0 - W EH1 R\nUNAWARES  AH2 N - AH0 - W EH1 R Z\nUNBALANCE  AH0 N - B AE1 - L AH0 N S\nUNBALANCED  AH0 N - B AE1 - L AH0 N S T\nUNBEARABLE  AH0 N - B EH1 - R AH0 - B AH0 L\nUNBEARABLY  AH0 N - B EH1 - R AH0 - B L IY0\nUNBEATABLE  AH2 N - B IY1 - T AH0 - B AH0 L\nUNBEATEN  AH0 N - B IY1 - T AH0 N\nUNBECOMING  AH2 N - B IH0 - K AH1 - M IH0 NG\nUNBECOMING(2)  AH2 N - B IY0 - K AH1 - M IH0 NG\nUNBEKNOWN  AH2 N - B IH0 - N OW1 N\nUNBEKNOWN(2)  AH2 N - B IY0 - N OW1 N\nUNBEKNOWNST  AH0 N - B IY0 - N OW1 N S T\nUNBELIEVABLE  AH2 N - B AH0 - L IY1 - V AH0 - B AH0 L\nUNBELIEVABLY  AH2 N - B AH0 - L IY1 - V AH0 - B L IY0\nUNBELIEVING  AH2 N - B AH0 - L IY1 - V IH0 NG\nUNBEND  AH2 N - B EH1 N D\nUNBENDING  AH2 N - B EH1 N - D IH0 NG\nUNBIASED  AH2 N - B AY1 - AH0 S T\nUNBLEMISHED  AH0 N - B L EH1 - M IH0 SH T\nUNBOLT  AH1 N - B OW2 L T\nUNBOLTED  AH1 N - B OW2 L - T IH0 D\nUNBOOK  AH0 N - B UH1 K\nUNBORN  AH1 N - B AO1 R N\nUNBOUND  AH0 N - B AW1 N D\nUNBOUNDED  AH0 N - B AW1 N - D IH0 D\nUNBOWED  AH0 N - B OW1 D\nUNBOWED(2)  AH0 N - B AW1 D\nUNBRANDED  AH0 N - B R AE1 N - D IH0 D\nUNBRIDLED  AH0 N - B R AY1 - D AH0 L D\nUNBROKEN  AH0 N - B R OW1 - K AH0 N\nUNBUILDABLE  AH0 N - B IH1 L - D AH0 - B AH0 L\nUNBUILT  AH2 N - B IH1 L T\nUNBUNDLE  AH0 N - B AH1 N - D AH0 L\nUNBUNDLING  AH0 N - B AH1 N D - L IH0 NG\nUNBURDEN  AH0 N - B ER1 - D AH0 N\nUNBURDENED  AH0 N - B ER1 - D AH0 N D\nUNBURNED  AH0 N - B ER1 N D\nUNBUTTON  AH0 N - B AH1 - T AH0 N\nUNBUTTONED  AH0 N - B AH1 - T AH0 N D\nUNCALLED  AH0 N - K AO1 L D\nUNCANNILY  AH0 N - K AE1 - N AH0 - L IY0\nUNCANNY  AH0 N - K AE1 - N IY0\nUNCAPHER  AH1 N - K AH0 - F ER0\nUNCAPITALIZED  AH0 N - K AE1 - P IH0 - T AH0 - L AY0 Z D\nUNCARING  AH0 N - K EH1 - R IH0 NG\nUNCEASING  AH0 N - S IY1 - S IH0 NG\nUNCENSORED  AH0 N - S EH1 N - S ER0 D\nUNCEREMONIOUS  AH2 N - S EH2 - R AH0 - M OW1 - N IY0 - AH0 S\nUNCEREMONIOUSLY  AH2 N - S EH2 - R AH0 - M OW1 - N IY0 - AH0 S - L IY0\nUNCERTAIN  AH0 N - S ER1 - T AH0 N\nUNCERTAINLY  AH0 N - S ER1 - T AH0 N - L IY0\nUNCERTAINTIES  AH0 N - S ER1 - T AH0 N - T IY0 Z\nUNCERTAINTY  AH0 N - S ER1 - T AH0 N - T IY0\nUNCHALLENGED  AH0 N - CH AE1 - L IH0 N JH D\nUNCHANGED  AH0 N - CH EY1 N JH D\nUNCHANGING  AH0 N - CH EY1 N - JH IH0 NG\nUNCHARACTERISTIC  AH2 N - K EH2 - R IH0 K - T ER0 - IH1 - S T IH0 K\nUNCHARACTERISTICALLY  AH2 N - K EH2 - R IH0 K - T ER0 - IH1 - S T IH0 K - L IY0\nUNCHARTED  AH0 N - CH AA1 R - T IH0 D\nUNCHARTERED  AH0 N - CH AA1 R - T ER0 D\nUNCHECKED  AH0 N - CH EH1 K T\nUNCIVIL  AH0 N - S IH1 - V AH0 L\nUNCIVILIZED  AH0 N - S IH1 - V AH0 - L AY0 Z D\nUNCLAIMED  AH0 N - K L EY1 M D\nUNCLAMP  AH0 N - K L AE1 M P\nUNCLAMPS  AH0 N - K L AE1 M P S\nUNCLASSIFIED  AH0 N - K L AE1 - S IH0 - F AY2 D\nUNCLASSIFY  AH0 N - K L AE1 - S IH0 - F AY2\nUNCLE  AH1 NG - K AH0 L\nUNCLE'S  AH1 NG - K AH0 L Z\nUNCLEAN  AH0 N - K L IY1 N\nUNCLEAR  AH0 N - K L IH1 R\nUNCLES  AH1 NG - K AH0 L Z\nUNCLUTTERED  AH0 N - K L AH1 - T ER0 D\nUNCOAT  AH0 N - K OW1 T\nUNCOATED  AH0 N - K OW1 - T IH0 D\nUNCOIL  AH2 N - K OY1 L\nUNCOILED  AH2 N - K OY1 L D\nUNCOLLECTABLE  AH0 N - K AH0 - L EH1 K - T AH0 - B AH0 L\nUNCOLLECTED  AH0 N - K AH0 - L EH1 K - T IH0 D\nUNCOLLECTIBLE  AH0 N - K AH0 - L EH1 K - T IH0 - B AH0 L\nUNCOMFORTABLE  AH0 N - K AH1 M - F ER0 - T AH0 - B AH0 L\nUNCOMFORTABLY  AH0 N - K AH1 M F - T AH0 - B L IY0\nUNCOMMITTED  AH2 N - K AH0 - M IH1 - T IH0 D\nUNCOMMON  AH0 N - K AA1 - M AH0 N\nUNCOMMONLY  AH2 N - K AA1 - M AH0 N - L IY0\nUNCOMPENSATE  AH0 N - K AA1 M - P AH0 N - S EY2 T\nUNCOMPENSATED  AH0 N - K AA1 M - P AH0 N - S EY2 - T IH0 D\nUNCOMPETITIVE  AH0 N - K AH0 M - P EH1 - T AH0 - T IH0 V\nUNCOMPLETE  AH2 N - K AH0 M - P L IY1 T\nUNCOMPLETED  AH2 N - K AH0 M - P L IY1 - T IH0 D\nUNCOMPLICATE  AH0 N - K AA1 M - P L AH0 - K EY2 T\nUNCOMPLICATED  AH0 N - K AA1 M - P L AH0 - K EY2 - T IH0 D\nUNCOMPROMISING  AH0 N - K AA1 M - P R AH0 - M AY0 - Z IH0 NG\nUNCONCEALED  AH2 N - K AH0 N - S IY1 L D\nUNCONCERN  AH2 N - K AH0 N - S ER1 N\nUNCONCERNED  AH2 N - K AH0 N - S ER1 N D\nUNCONDITIONAL  AH2 N - K AH0 N - D IH1 - SH AH0 - N AH0 L\nUNCONDITIONALLY  AH2 N - K AH0 N - D IH1 - SH AH0 N - AH0 - L IY0\nUNCONDITIONALLY(2)  AH2 N - K AH0 N - D IH1 SH - N AH0 - L IY0\nUNCONFINED  AH2 N - K AH0 N - F AY1 N D\nUNCONFIRMED  AH2 N - K AH0 N - F ER1 M D\nUNCONNECTED  AH2 N - K AH0 - N EH1 K - T IH0 D\nUNCONSCIONABLE  AH0 N - K AA1 N - SH AH0 N - AH0 - B AH0 L\nUNCONSCIOUS  AH2 N - K AA1 N - SH AH0 S\nUNCONSCIOUSLY  AH2 N - K AA1 N - SH AH0 S - L IY0\nUNCONSCIOUSNESS  AH2 N - K AA1 N - SH AH0 S - N IH0 S\nUNCONSOLIDATED  AH0 N - K AH0 N - S AA1 - L AH0 - D EY2 - T IH0 D\nUNCONSTITUTIONAL  AH2 N - K AA2 N - S T AH0 - T UW1 - SH AH0 - N AH0 L\nUNCONSTITUTIONALLY  AH2 N - K AA2 N - S T AH0 - T UW1 - SH AH0 N - AH0 L - IY0\nUNCONSTITUTIONALLY(2)  AH2 N - K AA2 N - S T AH0 - T UW1 SH - N AH0 - L IY0\nUNCONSTRAINED  AH2 N - K AH0 N - S T R EY1 N D\nUNCONTAMINATED  AH2 N - K AH0 N - T AE1 - M AH0 - N EY2 - T AH0 D\nUNCONTESTED  AH2 N - K AH0 N - T EH1 - S T IH0 D\nUNCONTRADICTED  AH2 N - K AO0 N - T R AH0 - D IH1 K - T IH0 D\nUNCONTROLLABLE  AH2 N - K AH0 N - T R OW1 - L AH0 - B AH0 L\nUNCONTROLLABLY  AH2 N - K AH0 N - T R OW1 - L AH0 - B L IY0\nUNCONTROLLED  AH2 N - K AH0 N - T R OW1 L D\nUNCONTROVERSIAL  AH2 N - K AA2 N - T R AH0 - V ER1 - SH AH0 L\nUNCONVENTIONAL  AH2 N - K AH0 N - V EH1 N - SH AH0 - N AH0 L\nUNCONVERTED  AH2 N - K AH0 N - V ER1 - T IH0 D\nUNCONVINCED  AH2 N - K AH0 N - V IH1 N S T\nUNCONVINCING  AH2 N - K AH0 N - V IH1 N - S IH0 NG\nUNCOOL  AH2 N - K UW1 L\nUNCOOPERATIVE  AH0 N - K OW0 - AA1 - P ER0 - AH0 - T IH0 V\nUNCOORDINATED  AH0 N - K OW0 - AO1 R - D AH0 - N EY0 - T IH0 D\nUNCORK  AH0 N - K AO1 R K\nUNCORKED  AH0 N - K AO1 R K T\nUNCORKS  AH0 N - K AO1 R K S\nUNCORRECTED  AH2 N - K ER0 - EH1 K - T IH0 D\nUNCORROBORATED  AH2 N - K ER0 - AA1 - B ER0 - EY0 - T IH0 D\nUNCOUNTED  AH2 N - K AW1 N - T IH0 D\nUNCOUPLE  AH0 N - K AH1 - P AH0 L\nUNCOUTH  AH1 N - K UW1 TH\nUNCOVER  AH0 N - K AH1 - V ER0\nUNCOVERED  AH0 N - K AH1 - V ER0 D\nUNCOVERING  AH0 N - K AH1 - V ER0 - IH0 NG\nUNCOVERS  AH2 N - K AH1 - V ER0 Z\nUNCRITICAL  AH0 N - K R IH1 - T IH0 - K AH0 L\nUNCRITICALLY  AH0 N - K R IH1 - T IH0 - K AH0 - L IY0\nUNCRITICALLY(2)  AH0 N - K R IH1 - T IH0 K - L IY0\nUNCTAD  AH1 N K - T AE2 D\nUNCTUOUS  AH1 NG - CH W AH0 S\nUNCURED  AH2 N - K Y ER1 D\nUNCUT  AH2 N - K AH1 T\nUND  AH1 N D\nUNDAMAGED  AH2 N - D AE1 - M AH0 JH D\nUNDATED  AH2 N - D EY1 - T IH0 D\nUNDAUNTED  AH0 N - D AO1 N - T IH0 D\nUNDECIDED  AH2 N - D IH0 - S AY1 - D IH0 D\nUNDECIDEDS  AH2 N - D IH0 - S AY1 - D IH0 D Z\nUNDECLARED  AH0 N - D IH0 - K L EH1 R D\nUNDEFEATED  AH2 N - D IH0 - F IY1 - T IH0 D\nUNDEFINED  AH2 N - D IH0 - F AY1 N D\nUNDELIVERED  AH2 N - D IH0 - L IH1 - V ER0 D\nUNDEMOCRATIC  AH2 N - D EH0 - M AH0 - K R AE1 - T IH0 K\nUNDENIABLE  AH2 N - D IH0 - N AY1 - AH0 - B AH0 L\nUNDENIABLY  AH2 N - D IH0 - N AY1 - AH0 - B L IY0\nUNDER  AH1 N - D ER0\nUNDER-AGE  AH1 N - D ER0 - EY1 JH\nUNDERACHIEVER  AH1 N - D ER0 - AH0 - CH IY2 - V ER0\nUNDERACHIEVERS  AH1 N - D ER0 - AH0 - CH IY2 - V ER0 Z\nUNDERAGE  AH1 N - D ER0 - IH0 JH\nUNDERARM  AH2 N - D ER0 - AA1 R M\nUNDERBELLY  AH1 N - D ER0 - B EH2 - L IY0\nUNDERBERG  AH1 N - D ER0 - B ER0 G\nUNDERBID  AH1 N - D ER0 - B IH2 D\nUNDERBRUSH  AH1 N - D ER0 - B R AH2 SH\nUNDERCAPITALIZE  AH0 N - D ER0 - K AE1 - P AH0 - T AH0 - L AY2 Z\nUNDERCAPITALIZED  AH0 N - D ER0 - K AE1 - P AH0 - T AH0 - L AY2 Z D\nUNDERCARRIAGE  AH1 N - D ER0 - K AE2 - R IH0 JH\nUNDERCLASS  AH1 N - D ER0 - K L AE2 S\nUNDERCLASSMEN  AH2 N - D ER0 - K L AE1 S - M EH0 N\nUNDERCOAT  AH1 N - D ER0 - K OW2 T\nUNDERCOOK  AH0 N - D ER0 - K UH1 K\nUNDERCOOKED  AH0 N - D ER0 - K UH1 K T\nUNDERCOUNT  AH1 N - D ER0 - K AW2 N T\nUNDERCOUNTED  AH1 N - D ER0 - K AW2 N - T IH0 D\nUNDERCOVER  AH2 N - D ER0 - K AH1 - V ER0\nUNDERCURRENT  AH1 N - D ER0 - K ER2 - AH0 N T\nUNDERCURRENTS  AH1 N - D ER0 - K ER2 - AH0 N T S\nUNDERCUT  AH1 N - D ER0 - K AH2 T\nUNDERCUTS  AH1 N - D ER0 - K AH2 T S\nUNDERCUTTING  AH1 N - D ER0 - K AH2 - T IH0 NG\nUNDERDAHL  AH1 N - D ER0 - D AA2 L\nUNDERDEVELOP  AH2 N - D ER0 - D IH0 - V EH1 - L AH0 P\nUNDERDEVELOPED  AH2 N - D ER0 - D IH0 - V EH1 - L AH0 P T\nUNDERDEVELOPMENT  AH0 N - D ER0 - D AH0 - V EH1 - L AH0 P - M AH0 N T\nUNDERDOG  AH1 N - D ER0 - D AO2 G\nUNDERDOGS  AH1 N - D ER0 - D AO2 G Z\nUNDERDOWN  AH1 N - D ER0 - D AW2 N\nUNDEREMPLOY  AH1 N - D ER0 - IH0 M - P L OY1\nUNDEREMPLOYED  AH1 N - D ER0 - IH0 M - P L OY1 D\nUNDEREMPLOYMENT  AH0 N - D ER0 - IH0 M - P L OY1 - M AH0 N T\nUNDERESTIMATE  AH1 N - D ER0 - EH1 - S T AH0 - M EY2 T\nUNDERESTIMATE(2)  AH1 N - D ER0 - EH1 - S T AH0 - M AH0 T\nUNDERESTIMATED  AH1 N - D ER0 - EH1 - S T AH0 - M EY2 - T IH0 D\nUNDERESTIMATES  AH2 N - D ER0 - EH1 - S T IH0 - M IH0 T S\nUNDERESTIMATES(2)  AH2 N - D ER0 - EH1 - S T IH0 - M EY0 T S\nUNDERESTIMATING  AH2 N - D ER0 - EH1 - S T IH0 - M EY2 - T IH0 NG\nUNDERFINANCE  AH0 N - D ER0 - F IH0 - N AE1 N S\nUNDERFINANCED  AH0 N - D ER0 - F IH0 - N AE1 N S T\nUNDERFOOT  AH2 N - D ER0 - F UH1 T\nUNDERFUND  AH1 N - D ER0 - F AH2 N D\nUNDERFUNDED  AH1 N - D ER0 - F AH2 N - D IH0 D\nUNDERFUNDING  AH1 N - D ER0 - F AH2 N - D IH0 NG\nUNDERGARMENT  AH1 N - D ER0 - G AA2 R - M AH0 N T\nUNDERGARMENTS  AH1 N - D ER0 - G AA2 R - M AH0 N T S\nUNDERGO  AH2 N - D ER0 - G OW1\nUNDERGOES  AH1 N - D ER0 - G OW2 Z\nUNDERGOING  AH2 N - D ER0 - G OW1 - IH0 NG\nUNDERGONE  AH2 N - D ER0 - G AO1 N\nUNDERGRAD  AH1 N - D ER0 - G R AE2 D\nUNDERGRADUATE  AH2 N - D ER0 - G R AE1 - JH AH0 W - AH0 T\nUNDERGRADUATES  AH2 N - D ER0 - G R AE1 - JH AH0 W - AH0 T S\nUNDERGROUND  AH1 N - D ER0 - G R AW2 N D\nUNDERGROWTH  AH1 N - D ER0 - G R OW2 TH\nUNDERHANDED  AH1 N - D ER0 - HH AE1 N - D IH0 D\nUNDERHILL  AH1 N - D ER0 - HH IH2 L\nUNDERINSURE  AH0 N - D ER0 - IH0 N - SH AO2 R\nUNDERINSURED  AH0 N - D ER0 - IH0 N - SH AO2 R D\nUNDERKOFFLER  AH1 N - D ER0 - K AH0 - F AH0 - L ER0\nUNDERLIE  AH2 N - D ER0 - L AY1\nUNDERLIES  AH2 N - D ER0 - L AY1 Z\nUNDERLINE  AH1 N - D ER0 - L AY2 N\nUNDERLINED  AH1 N - D ER0 - L AY2 N D\nUNDERLINES  AH1 N - D ER0 - L AY2 N Z\nUNDERLING  AH1 N - D ER0 - L IH0 NG\nUNDERLINGS  AH1 N - D ER0 - L IH0 NG Z\nUNDERLINING  AH1 N - D ER0 - L AY2 - N IH0 NG\nUNDERLY  AH2 N - D ER0 - L AY1\nUNDERLYING  AH2 N - D ER0 - L AY1 - IH0 NG\nUNDERMAN  AH1 N - D ER0 - M AE2 N\nUNDERMANNED  AH1 N - D ER0 - M AE2 N D\nUNDERMINE  AH1 N - D ER0 - M AY2 N\nUNDERMINED  AH2 N - D ER0 - M AY1 N D\nUNDERMINES  AH2 N - D ER0 - M AY1 N Z\nUNDERMINING  AH1 N - D ER0 - M AY2 - N IH0 NG\nUNDERNEATH  AH2 N - D ER0 - N IY1 TH\nUNDERNOURISH  AH2 N - D ER0 - N ER1 - IH0 SH\nUNDERNOURISHED  AH2 N - D ER0 - N ER1 - IH0 SH T\nUNDERPAID  AH1 N - D ER0 - P EY1 D\nUNDERPANTS  AH1 N - D ER0 - P AE2 N T S\nUNDERPASS  AH1 N - D ER0 - P AE2 S\nUNDERPAY  AH2 N - D ER0 - P EY1\nUNDERPAYING  AH1 N - D ER0 - P EY2 - IH0 NG\nUNDERPAYMENT  AH1 N - D ER0 - P EY2 - M AH0 N T\nUNDERPAYMENTS  AH1 N - D ER0 - P EY2 - M AH0 N T S\nUNDERPERFORM  AH1 N - D ER0 - P ER0 - F AO2 R M\nUNDERPERFORMANCE  AH0 N - D ER0 - P ER0 - F AO1 R - M AH0 N S\nUNDERPERFORMED  AH1 N - D ER0 - P ER0 - F AO2 R M D\nUNDERPERFORMER  AH1 N - D ER0 - P ER0 - F AO2 R - M ER0\nUNDERPERFORMING  AH1 N - D ER0 - P ER0 - F AO2 R - M IH0 NG\nUNDERPIN  AH1 N - D ER0 - P IH2 N\nUNDERPINNED  AH1 N - D ER0 - P IH2 N D\nUNDERPINNING  AH1 N - D ER0 - P IH2 - N IH0 NG\nUNDERPINNINGS  AH1 N - D ER0 - P IH2 - N IH0 NG Z\nUNDERPLAY  AH0 N - D ER0 - P L EY1\nUNDERPLAYED  AH0 N - D ER0 - P L EY1 D\nUNDERPOWER  AH0 N - D ER0 - P AW1 - ER0\nUNDERPOWERED  AH0 N - D ER0 - P AW1 - ER0 D\nUNDERPRICE  AH1 N - D ER0 - P R AY2 S\nUNDERPRICED  AH1 N - D ER0 - P R AY2 S T\nUNDERPRICING  AH1 N - D ER0 - P R AY2 - S IH0 NG\nUNDERPRIVILEDGED  AH0 N - D ER0 - P R IH1 V - L IH0 JH D\nUNDERRATE  AH0 N - D ER0 - R EY1 T\nUNDERRATED  AH0 N - D ER0 - R EY1 - T IH0 D\nUNDERREPORT  AH0 N - D ER0 - R IH0 - P AO1 R T\nUNDERREPORTED  AH0 N - D ER0 - R IH0 - P AO1 R - T IH0 D\nUNDERREPORTING  AH1 N - D ER0 - R IH0 - P AO1 R - T IH0 NG\nUNDERREPRESENT  AH0 N - D ER0 - R EH2 - P R IH0 - Z EH1 N T\nUNDERREPRESENTED  AH0 N - D ER0 - R EH2 - P R IH0 - Z EH1 N - T IH0 D\nUNDERSCORE  AH2 N - D ER0 - S K AO1 R\nUNDERSCORED  AH2 N - D ER0 - S K AO1 R D\nUNDERSCORES  AH2 N - D ER0 - S K AO1 R Z\nUNDERSCORING  AH2 N - D ER0 - S K AO1 - R IH0 NG\nUNDERSEA  AH2 N - D ER0 - S IY1\nUNDERSEAS  AH0 N - D ER0 - S IY1 Z\nUNDERSECRETARY  AH2 N - D ER0 - S EH1 - K R IH0 - T EH2 - R IY0\nUNDERSELL  AH1 N - D ER0 - S EH2 L\nUNDERSELLING  AH1 N - D ER0 - S EH2 - L IH0 NG\nUNDERSERVE  AH0 N - D ER0 - S ER1 V\nUNDERSERVED  AH0 N - D ER0 - S ER1 V D\nUNDERSHIRT  AH1 N - D ER0 - SH ER2 T\nUNDERSHIRTS  AH1 N - D ER0 - SH ER2 T S\nUNDERSIDE  AH1 N - D ER0 - S AY2 D\nUNDERSIZED  AH1 N - D ER0 - S AY2 Z D\nUNDERSOLD  AH0 N - D ER0 - S OW1 L D\nUNDERSPIN  AH1 N - D ER0 - S P IH2 N\nUNDERSTAFF  AH1 N - D ER0 - S T AE2 F\nUNDERSTAFFED  AH1 N - D ER0 - S T AE2 F T\nUNDERSTAND  AH2 N - D ER0 - S T AE1 N D\nUNDERSTANDABLE  AH2 N - D ER0 - S T AE1 N - D AH0 - B AH0 L\nUNDERSTANDABLY  AH2 N - D ER0 - S T AE1 N - D AH0 - B L IY0\nUNDERSTANDING  AH2 N - D ER0 - S T AE1 N - D IH0 NG\nUNDERSTANDINGS  AH0 N - D ER0 - S T AE1 N - D IH0 NG Z\nUNDERSTANDS  AH2 N - D ER0 - S T AE1 N D Z\nUNDERSTATE  AH1 N - D ER0 - S T EY2 T\nUNDERSTATED  AH1 N - D ER0 - S T EY2 - T IH0 D\nUNDERSTATEMENT  AH1 N - D ER0 - S T EY2 T - M AH0 N T\nUNDERSTATES  AH1 N - D ER0 - S T EY2 T S\nUNDERSTATING  AH1 N - D ER0 - S T EY2 - T IH0 NG\nUNDERSTOOD  AH2 N - D ER0 - S T UH1 D\nUNDERSTORY  AH1 N - D ER0 - S T AO2 - R IY0\nUNDERSTUDY  AH1 N - D ER0 - S T AH2 - D IY0\nUNDERSUBSCRIBED  AH0 N - D ER0 - S AH0 B - S K R AY1 B D\nUNDERTAKE  AH1 N - D ER0 - T EY2 K\nUNDERTAKEN  AH1 N - D ER0 - T EY2 - K AH0 N\nUNDERTAKER  AH1 N - D ER0 - T EY2 - K ER0\nUNDERTAKES  AH1 N - D ER0 - T EY2 K S\nUNDERTAKING  AH1 N - D ER0 - T EY2 - K IH0 NG\nUNDERTAKINGS  AH1 N - D ER0 - T EY2 - K IH0 NG Z\nUNDERTONE  AH1 N - D ER0 - T OW2 N\nUNDERTONES  AH1 N - D ER0 - T OW2 N Z\nUNDERTOOK  AH2 N - D ER0 - T UH1 K\nUNDERTOW  AH1 N - D ER0 - T OW2\nUNDERTOWS  AH1 N - D ER0 - T OW2 Z\nUNDERUSE  AH2 N - D ER0 - Y UW1 Z\nUNDERUSED  AH2 N - D ER0 - Y UW1 Z D\nUNDERUTILIZE  AH1 N - D ER0 - Y UW2 - T AH0 - L AY2 Z\nUNDERUTILIZED  AH1 N - D ER0 - Y UW2 - T AH0 - L AY2 Z D\nUNDERVALUATION  AH1 N - D ER0 - V AE2 L - Y UW0 - EY1 - SH AH0 N\nUNDERVALUE  AH1 N - D ER0 - V AE2 L - Y UW0\nUNDERVALUED  AH1 N - D ER0 - V AE2 L - Y UW0 D\nUNDERVALUES  AH1 N - D ER0 - V AE2 L - Y UW0 Z\nUNDERVALUING  AH0 N - D ER0 - V AE1 L - Y UW0 - IH0 NG\nUNDERWATER  AH1 N - D ER0 - W AO2 - T ER0\nUNDERWAY  AH2 N - D ER0 - W EY1\nUNDERWEAR  AH1 N - D ER0 - W EH2 R\nUNDERWEIGHT  AH1 N - D ER0 - W EY2 T\nUNDERWEIGHTED  AH0 N - D ER0 - W EY1 - T IH0 D\nUNDERWENT  AH2 N - D ER0 - W EH1 N T\nUNDERWITHHELD  AH1 N - D ER0 - W IH2 TH - HH EH1 L D\nUNDERWITHHOLD  AH1 N - D ER0 - W IH2 TH - HH OW2 L D\nUNDERWITHHOLDING  AH1 N - D ER0 - W IH2 TH - HH OW2 L - D IH0 NG\nUNDERWOOD  AH1 N - D ER0 - W UH2 D\nUNDERWOODS  AH1 N - D ER0 - W UH2 D Z\nUNDERWORLD  AH1 N - D ER0 - W ER2 L D\nUNDERWRITE  AH1 N - D ER0 - R AY2 T\nUNDERWRITER  AH1 N - D ER0 - R AY2 - T ER0\nUNDERWRITER'S  AH1 N - D ER0 - R AY2 - T ER0 Z\nUNDERWRITERS  AH1 N - D ER0 - R AY2 - T ER0 Z\nUNDERWRITERS'  AH1 N - D ER0 - R AY2 - T ER0 Z\nUNDERWRITES  AH1 N - D ER0 - R AY2 T S\nUNDERWRITING  AH1 N - D ER0 - R AY1 - T IH0 NG\nUNDERWRITINGS  AH1 N - D ER0 - R AY2 - T IH0 NG Z\nUNDERWRITTEN  AH1 N - D ER0 - R IH2 - T AH0 N\nUNDERWROTE  AH2 N - D ER0 - R OW1 T\nUNDESERVED  AH2 N - D IH0 - Z ER1 V D\nUNDESERVING  AH2 N - D IH0 - Z ER1 - V IH0 NG\nUNDESIRABLE  AH2 N - D IH0 - Z AY1 - R AH0 - B AH0 L\nUNDETECTABLE  AH0 N - D IH0 - T EH1 K - T AH0 - B AH0 L\nUNDETECTED  AH2 N - D IH0 - T EH1 K - T IH0 D\nUNDETERMINED  AH2 N - D IH0 - T ER1 - M IH0 N D\nUNDETERMINED(2)  AH2 N - D IY0 - T ER1 - M AH0 N D\nUNDETERMINING  AH2 N - D IH0 - T ER1 - M IH0 - N IH0 NG\nUNDETERMINING(2)  AH2 N - D IY0 - T ER1 - M AH0 - N IH0 NG\nUNDETERRED  AH2 N - D IH0 - T ER1 D\nUNDEVELOPED  AH2 N - D IH0 - V EH1 - L AH0 P T\nUNDIAGNOSED  AH0 N - D AY1 - AE0 G - N OW0 S T\nUNDID  AH0 N - D IH1 D\nUNDIFFERENTIATED  AH0 N - D IH0 - F ER0 - EH1 N - SH IY0 - EY2 - T IH0 D\nUNDIGNIFIED  AH0 N - D IH1 G - N IH0 - F AY2 D\nUNDILUTE  AH2 N - D AH0 - L UW1 T\nUNDILUTED  AH2 N - D AH0 - L UW1 - T IH0 D\nUNDIMINISHED  AH2 N - D AH0 - M IH1 - N IH0 SH T\nUNDINE  AH1 N - D IY2 N\nUNDIPLOMATIC  AH0 N - D IH2 - P L AH0 - M AE1 - T IH0 K\nUNDIPLOMATICALLY  AH0 N - D IH2 - P L AH0 - M AE1 - T IH0 K - L IY0\nUNDISCIPLINED  AH0 N - D IH1 - S IH0 - P L IH0 N D\nUNDISCLOSED  AH2 N - D IH0 S - K L OW1 Z D\nUNDISCOVERED  AH2 N - D IH0 - S K AH1 - V ER0 D\nUNDISGUISED  AH2 N - D IH0 S - G AY1 Z D\nUNDISPUTED  AH2 N - D IH0 - S P Y UW1 - T IH0 D\nUNDISTINGUISHED  AH2 N - D IH0 - S T IH1 NG - G W IH0 SH T\nUNDISTRIBUTED  AH2 N - D IH0 - S T R IH1 - B Y UW0 - T IH0 D\nUNDISTURBED  AH2 N - D IH0 - S T ER1 B D\nUNDIVERSIFIED  AH2 N - D IH0 - V ER1 - S IH0 - F AY2 D\nUNDIVIDED  AH2 N - D AH0 - V AY1 - D IH0 D\nUNDO  AH0 N - D UW1\nUNDOCK  AH0 N - D AA1 K\nUNDOCKING  AH0 N - D AA1 - K IH0 NG\nUNDOCUMENTED  AH0 N - D AA1 - K Y AH0 - M EH0 N - T IH0 D\nUNDOCUMENTED(2)  AH0 N - D AA1 - K Y AH0 - M EH0 - N IH0 D\nUNDOING  AH0 N - D UW1 - IH0 NG\nUNDONE  AH0 N - D AH1 N\nUNDOUBTED  AH0 N - D AW1 - T IH0 D\nUNDOUBTEDLY  AH0 N - D AW1 - T IH0 D - L IY0\nUNDREAMED  AH0 N - D R IY1 M D\nUNDRESS  AH0 N - D R EH1 S\nUNDRESSED  AH0 N - D R EH1 S T\nUNDUE  AH0 N - D UW1\nUNDULATE  AH1 N - JH AH0 - L EY2 T\nUNDULATING  AH1 N - JH AH0 - L EY2 - T IH0 NG\nUNDULY  AH0 N - D UW1 - L IY0\nUNDYING  AH0 N - D AY1 - IH0 NG\nUNEARNED  AH0 N - ER1 N D\nUNEARTH  AH0 N - ER1 TH\nUNEARTHED  AH0 N - ER1 TH T\nUNEARTHING  AH0 N - ER1 - TH IH0 NG\nUNEARTHLY  AH0 N - ER1 TH - L IY0\nUNEASE  AH0 N - IY1 Z\nUNEASILY  AH0 N - IY1 - Z AH0 - L IY0\nUNEASINESS  AH2 N - IY1 - Z IY0 - N AH0 S\nUNEASY  AH0 N - IY1 - Z IY0\nUNECONOMIC  AH0 N - EH2 - K AH0 - N AA1 - M IH0 K\nUNECONOMICAL  AH0 N - EH2 - K AH0 - N AA1 - M IH0 - K AH0 L\nUNEDITED  AH0 - N EH1 - D AH0 - T IH0 D\nUNEDUCATED  AH0 N - EH1 - JH UH0 - K EY2 - T IH0 D\nUNELECTABLE  AH2 N - IH0 - L EH1 K - T AH0 - B AH0 L\nUNELECTED  AH2 N - IH0 - L EH1 K - T IH0 D\nUNEMOTIONAL  AH2 N - IY0 - M OW1 - SH AH0 - N AH0 L\nUNEMOTIONAL(2)  AH2 N - AH0 - M OW1 - SH AH0 - N AH0 L\nUNEMPLOY  AH0 N - IH0 M - P L OY1\nUNEMPLOYABLE  AH0 N - IH0 M - P L OY1 - AH0 - B AH0 L\nUNEMPLOYED  AH2 N - EH0 M - P L OY1 D\nUNEMPLOYMENT  AH2 N - IH0 M - P L OY1 - M AH0 N T\nUNENCUMBER  AH2 N - EH0 N - K AH1 M - B ER0\nUNENCUMBERED  AH2 N - EH0 N - K AH1 M - B ER0 D\nUNENDING  AH0 N - EH1 N - D IH0 NG\nUNENFORCEABLE  AH2 N - EH0 N - F AO1 R - S AH0 - B AH0 L\nUNENFORCED  AH2 N - EH0 N - F AO1 R S T\nUNENLIGHTENED  AH2 N - EH0 N - L AY1 - T AH0 N D\nUNENTHUSIASTIC  AH0 N - IH0 N - TH UW0 - Z IY0 - AE1 - S T IH0 K\nUNENUMERATED  AH0 N - IH0 - N UW1 - M ER0 - EY2 - T IH0 D\nUNENVIABLE  AH0 N - EH1 N - V IY2 - AH0 - B AH0 L\nUNEQUAL  AH0 N - IY1 - K W AH0 L\nUNEQUALED  AH0 N - IY1 - K W AH2 L D\nUNEQUIVOCABLY  AH0 N - IH0 - K W IH1 - V AH0 - K AH0 - B L IY0\nUNEQUIVOCAL  AH2 N - IH0 - K W IH1 - V AH0 - K AH0 L\nUNEQUIVOCAL(2)  AH2 N - IY0 - K W IH1 - V AH0 - K AH0 L\nUNEQUIVOCALLY  AH2 N - IY0 - K W IH1 - V AH0 - K AH0 - L IY0\nUNEQUIVOCALLY(2)  AH2 N - IY0 - K W IH1 - V AH0 K - L IY0\nUNESCO  Y UW0 - N EH1 - S K OW2\nUNETHICAL  AH0 N - EH1 - TH IH0 - K AH0 L\nUNETHICALLY  AH0 N - EH1 - TH IH0 K - L IY0\nUNEVEN  AH0 N - IY1 - V AH0 N\nUNEVENLY  AH0 N - IY1 - V AH0 N - L IY0\nUNEVENTFUL  AH2 N - IY0 - V EH1 N T - F AH0 L\nUNEXCITING  AH0 N - IH0 K - S AY1 - T IH0 NG\nUNEXERCISED  AH0 N - EH1 K - S ER0 - S AY2 Z D\nUNEXPECTED  AH2 N - IH0 K - S P EH1 K - T IH0 D\nUNEXPECTEDLY  AH2 N - IH0 K - S P EH1 K - T IH0 D - L IY0\nUNEXPIRED  AH2 N - IH0 K - S P AY1 - ER0 D\nUNEXPLAINABLE  AH2 N - IH0 K - S P L EY1 - N AH0 - B AH0 L\nUNEXPLAINED  AH2 N - IH0 K - S P L EY1 N D\nUNEXPLODED  AH2 N - IH0 K - S P L OW1 - D IH0 D\nUNEXPLOITED  AH0 N - IH0 K - S P L OY1 - T IH0 D\nUNEXPLORED  AH2 N - IH0 K - S P L AO1 R D\nUNFAILING  AH0 N - F EY1 - L IH0 NG\nUNFAILINGLY  AH0 N - F EY1 - L IH0 NG - L IY0\nUNFAIR  AH0 N - F EH1 R\nUNFAIR(2)  AH1 N - F EH1 R\nUNFAIR(3)  AO2 N - F EH1 R\nUNFAIRLY  AH0 N - F EH1 R - L IY0\nUNFAIRNESS  AH0 N - F EH1 R - N AH0 S\nUNFAITHFUL  AH0 N - F EY1 TH - F AH0 L\nUNFAMILIAR  AH2 N - F AH0 - M IH1 - L Y ER0\nUNFAMILIARITIES  AH2 N - F AH0 - M IH2 - L Y EH1 - R AH0 - T IY0 Z\nUNFAMILIARITY  AH2 N - F AH0 - M IH2 - L Y EH1 - R AH0 - T IY0\nUNFASHIONABLE  AH0 N - F AE1 - SH AH0 N - AH0 - B AH0 L\nUNFATHOMABLE  AH0 N - F AE1 - DH AH0 - M AH0 - B AH0 L\nUNFAVORABLE  AH2 N - F EY1 - V ER0 - AH0 - B AH0 L\nUNFAVORABLY  AH0 N - F EY1 - V ER0 - AH0 - B L IY0\nUNFAZED  AH0 N - F EY1 Z D\nUNFEASIBLE  AH0 N - F IY1 - Z AH0 - B AH0 L\nUNFEELING  AH0 N - F IY1 - L IH0 NG\nUNFENCED  AH0 N - F EH1 N S T\nUNFETTERED  AH0 N - F EH1 - T ER0 D\nUNFILLED  AH0 N - F IH1 L D\nUNFILTERED  AH0 N - F IH1 L - T ER0 D\nUNFINISHED  AH0 N - F IH1 - N IH0 SH T\nUNFIT  AH0 N - F IH1 T\nUNFLAGGING  AH0 N - F L AE1 - G IH0 NG\nUNFLAPPABLE  AH0 N - F L AE1 - P AH0 - B AH0 L\nUNFLATTERING  AH0 N - F L AE1 - T ER0 - IH0 NG\nUNFLINCHING  AH0 N - F L IH1 N - CH IH0 NG\nUNFOCUSED  AH0 N - F OW1 - K AH0 S T\nUNFOLD  AH0 N - F OW1 L D\nUNFOLDED  AH0 N - F OW1 L - D AH0 D\nUNFOLDING  AH0 N - F OW1 L - D IH0 NG\nUNFOLDS  AH0 N - F OW1 L D Z\nUNFORESEEABLE  AH2 N - F AO0 R - S IY1 - AH0 - B AH0 L\nUNFORESEEN  AH2 N - F AO0 R - S IY1 N\nUNFORGETTABLE  AH2 N - F ER0 - G EH1 - T AH0 - B AH0 L\nUNFORGIVABLE  AH2 N - F AO0 R - G IH1 - V AH0 - B AH0 L\nUNFORGIVEN  AH2 N - F AO0 R - G IH1 - V AH0 N\nUNFORGIVEN(2)  AH2 N - F ER0 - G IH1 - V AH0 N\nUNFORGIVING  AH0 N - F ER0 - G IH1 - V IH0 NG\nUNFORMED  AH0 N - F AO1 R M D\nUNFORTUNATE  AH0 N - F AO1 R - CH AH0 - N AH0 T\nUNFORTUNATE(2)  AH0 N - F AO1 R - CH UW0 - N AH0 T\nUNFORTUNATELY  AH0 N - F AO1 R - CH AH0 - N AH0 T - L IY0\nUNFORTUNATELY(2)  AH0 N - F AO1 R - CH UW0 - N AH0 T - L IY0\nUNFORTUNATES  AH0 N - F AO1 R - CH AH0 - N AH0 T S\nUNFORTUNATES(2)  AH0 N - F AO1 R - CH UW0 - N AH0 T S\nUNFOUNDED  AH0 N - F AW1 N - D IH0 D\nUNFRIENDLY  AH0 N - F R EH1 N D - L IY0\nUNFROZEN  AH0 N - F R OW1 - Z IH0 N\nUNFULFILLED  AH2 N - F UH0 L - F IH1 L D\nUNFUNDED  AH0 N - F AH1 N - D IH0 D\nUNFUNNILY  AH0 N - F AH1 - N AH0 - L IY0\nUNFURL  AH0 N - F ER1 L\nUNFURLED  AH0 N - F ER1 L D\nUNFURLING  AH0 N - F ER1 - L IH0 NG\nUNG  AH1 NG\nUNGAINLY  AH0 N - G EY1 N - L IY0\nUNGAR  AH1 NG - G ER0\nUNGARO  UW0 NG - G AA1 - R OW0\nUNGER  AH1 NG - G ER0\nUNGERER  AH1 - NG ER0 - ER0\nUNGERMANN  AH0 N - JH ER1 - M AH0 N\nUNGLAMOROUS  AH0 N - G L AE1 - M ER0 - AH0 S\nUNGLUE  AH0 N - G L UW1\nUNGLUED  AH0 N - G L UW1 D\nUNGO  AH0 N - G OW1\nUNGODLY  AH0 N - G AO1 D - L IY0\nUNGOVERNABLE  AH0 N - G AH1 - V ER0 - N AH0 - B AH0 L\nUNGRATEFUL  AH0 N - G R EY1 T - F AH0 L\nUNGUARDED  AH0 N - G AA1 R - D IH0 D\nUNHAMPERED  AH0 N - HH AE1 M - P ER0 D\nUNHAPPILY  AH0 N - HH AE1 - P AH0 - L IY0\nUNHAPPINESS  AH0 N - HH AE1 - P IY0 - N IH0 S\nUNHAPPY  AH0 N - HH AE1 - P IY0\nUNHARMED  AH0 N - HH AA1 R M D\nUNHEALTHFUL  AH0 N - HH EH1 L TH - F AH0 L\nUNHEALTHY  AH0 N - HH EH1 L - TH IY0\nUNHEARD  AH0 N - HH ER1 D\nUNHEDGED  AH0 N - HH EH1 JH D\nUNHEEDED  AH0 N - HH IY1 - D IH0 D\nUNHELPFUL  AH0 N - HH EH1 L P - F AH0 L\nUNHERALDED  AH0 N - HH EH1 - R AH0 L - D IH0 D\nUNHESITATINGLY  AH0 N - HH EH1 - Z IH0 - T EY2 - T IH0 NG - L IY0\nUNHINDERED  AH0 N - HH IH1 N - D ER0 D\nUNHINGE  AH0 N - HH IH1 N JH\nUNHINGED  AH0 N - HH IH1 N JH D\nUNHITCH  AH0 N - HH IH1 CH\nUNHOLY  AH0 N - HH OW1 - L IY0\nUNHOOK  AH0 N - HH UH1 K\nUNHORSED  AH0 N - HH AO1 R S T\nUNHURRIED  AH0 N - HH ER1 - IY0 D\nUNHURT  AH0 N - HH ER1 T\nUNI  Y UW1 - N IY0\nUNIBANCORP  Y UW1 - N IH0 - B AE2 N - K AO2 R P\nUNICEF  Y UW1 - N AH0 - S EH2 F\nUNICELLULAR  Y UW2 - N IH0 - S EH1 L - Y AH0 - L ER0\nUNICENTER  Y UW2 - N IH0 - S EH1 N - T ER0\nUNICOM  Y UW1 - N IH0 - K AO0 M\nUNICORN  Y UW1 - N IH0 - K AO2 R N\nUNICORP  Y UW1 - N IH0 - K AO2 R P\nUNICORP'S  Y UW1 - N IH0 - K AO2 R P S\nUNICYCLE  Y UW1 - N AH0 - S AY2 - K AH0 L\nUNICYCLES  Y UW1 - N AH0 - S AY2 - K AH0 L Z\nUNIDEN  Y UW1 - N IH0 - D EH2 N\nUNIDEN'S  Y UW1 - N IH0 - D EH2 N Z\nUNIDENTIFIED  AH2 N - AY0 - D EH1 N - T AH0 - F AY2 D\nUNIFICATION  Y UW2 - N AH0 - F AH0 - K EY1 - SH AH0 N\nUNIFIED  Y UW1 - N AH0 - F AY2 D\nUNIFIL  Y UW1 - N IH0 - F IH0 L\nUNIFORCE  Y UW1 - N IH0 - F AO2 R S\nUNIFORM  Y UW1 - N AH0 - F AO2 R M\nUNIFORMED  Y UW1 - N AH0 - F AO2 R M D\nUNIFORMITY  Y UW2 - N AH0 - F AO1 R - M AH0 - T IY0\nUNIFORMLY  Y UW1 - N AH0 - F AO2 R M - L IY0\nUNIFORMS  Y UW1 - N AH0 - F AO2 R M Z\nUNIFY  Y UW1 - N AH0 - F AY2\nUNIFYING  Y UW1 - N AH0 - F AY2 - IH0 NG\nUNIGESCO  Y UW1 - N IH0 - G EH2 - S K OW0\nUNIKOM  Y UW1 - N IH0 - K AO0 M\nUNILAB  Y UW1 - N IH0 - L AE2 B\nUNILATERAL  Y UW2 - N AH0 - L AE1 - T ER0 - AH0 L\nUNILATERALISM  Y UW2 - N IH0 - L AE1 - T ER0 - AH0 - L IH2 - Z AH0 M\nUNILATERALLY  Y UW2 - N AH0 - L AE1 - T ER0 - AH0 - L IY0\nUNILATERALLY(2)  Y UW2 - N AH0 - L AE1 - T R AH0 - L IY0\nUNILEVER  Y UW2 - N IH0 - L IY1 - V ER0\nUNILEVER'S  Y UW2 - N IH0 - L IY1 - V ER0 Z\nUNIMAGINABLE  AH2 N - IH0 - M AE1 - JH IH0 - N AH0 - B AH0 L\nUNIMAGINATIVE  AH0 N - IH0 - M AE1 - JH IH2 - N AH0 - T IH0 V\nUNIMAGINED  AH2 N - IH0 - M AE1 - JH AH0 N D\nUNIMATE  Y UW1 - N IH0 - M EY2 T\nUNIMATION  Y UW2 - N IH0 - M EY1 - SH AH0 N\nUNIMEDIA  Y UW2 - N IH0 - M IY1 - D IY0 - AH0\nUNIMPAIRED  AH2 N - IH0 M - P EH1 R D\nUNIMPEACHABLE  AH2 N - IH0 M - P IY1 - CH AH0 - B AH0 L\nUNIMPEDED  AH2 N - IH0 M - P IY1 - D IH0 D\nUNIMPORTANT  AH0 N - IH0 M - P AO1 R - T AH0 N T\nUNIMPRESSED  AH2 N - IH0 M - P R EH1 S T\nUNIMPRESSIVE  AH2 N - IH0 M - P R EH1 - S IH0 V\nUNIMPROVED  AH2 N - IH0 M - P R UW1 V D\nUNINCORPORATED  AH2 N - IH0 N - K AO1 R - P ER0 - EY2 - T IH0 D\nUNINDICTED  AH2 N - IH0 N - D AY1 - T IH0 D\nUNINFECTED  AH2 N - IH0 N - F EH1 K - T IH0 D\nUNINFORMATIVE  AH0 N - IH0 N - F AO1 R - M AH0 - T IH0 V\nUNINFORMED  AH2 N - IH0 N - F AO1 R M D\nUNINHABITABLE  AH2 N - IH0 N - HH AE1 - B AH0 - T AH0 - B AH0 L\nUNINHABITED  AH2 N - IH0 N - HH AE1 - B AH0 - T IH0 D\nUNINHIBITED  AH2 N - IH0 N - HH IH1 - B IH0 - T IH0 D\nUNINITIATED  AH2 N - IH0 - N IH1 - SH IY0 - EY2 - T IH0 D\nUNINITIATED(2)  AH2 N - IY0 - N IH1 - SH IY0 - EY2 - T IH0 D\nUNINJURED  AH0 N - IH1 N - JH ER0 D\nUNINSPIRED  AH2 N - IH0 N - S P AY1 - ER0 D\nUNINSPIRING  AH0 N - IH0 N - S P AY1 - R IH0 NG\nUNINSURABLE  AH0 N - IH0 N - SH UH1 - R AH0 - B AH0 L\nUNINSURED  AH2 N - IH0 N - SH UH1 R D\nUNINTELLIGIBLE  AH2 N - IH0 N - T EH1 - L AH0 - JH AH0 - B AH0 L\nUNINTENDED  AH2 N - IH0 N - T EH1 N - D IH0 D\nUNINTENTIONAL  AH2 N - IH0 N - T EH1 N - SH AH0 - N AH0 L\nUNINTENTIONALLY  AH2 N - IH0 N - T EH1 N - SH AH0 N - AH0 - L IY0\nUNINTENTIONALLY(2)  AH2 N - IH0 N - T EH1 N SH - N AH0 - L IY0\nUNINTERESTED  AH0 N - IH1 N - T R AH0 - S T AH0 D\nUNINTERESTING  AH0 N - IH1 N - T R AH0 - S T IH0 NG\nUNINTERRUPTED  AH2 N - IH0 N - T ER0 - AH1 P - T IH0 D\nUNINTERRUPTED(2)  AH2 N - IH0 - N ER0 - AH1 P - T IH0 D\nUNINTERRUPTIBLE  AH0 N - IH0 N - T ER0 - AH1 P - T AH0 - B AH0 L\nUNINTERRUPTIBLE(2)  AH0 N - IH0 - N ER0 - AH1 P - T AH0 - B AH0 L\nUNINVITED  AH2 N - IH0 N - V AY1 - T IH0 D\nUNINVITING  AH2 N - IH0 N - V AY1 - T IH0 NG\nUNINVOLVED  AH0 N - IH0 N - V AO1 L V D\nUNION  Y UW1 - N Y AH0 N\nUNION'S  Y UW1 - N Y AH0 N Z\nUNIONDALE  Y UW1 - N Y AH0 N - D EY2 L\nUNIONFED  Y UW1 - N Y AH0 N - F EH2 D\nUNIONISM  Y UW1 - N Y AH0 - N IH2 - Z AH0 M\nUNIONIST  Y UW1 - N Y AH0 - N AH0 S T\nUNIONISTS  Y UW1 - N Y AH0 - N IH0 S T S\nUNIONIZATION  Y UW2 - N Y AH0 - N AH0 - Z EY1 - SH AH0 N\nUNIONIZE  Y UW1 - N Y AH0 - N AY2 Z\nUNIONIZED  Y UW1 - N Y AH0 - N AY2 Z D\nUNIONIZING  Y UW1 - N Y AH0 - N AY2 - Z IH0 NG\nUNIONS  Y UW1 - N Y AH0 N Z\nUNIONS'  Y UW1 - N Y AH0 N Z\nUNIQUE  Y UW0 - N IY1 K\nUNIQUELY  Y UW0 - N IY1 K - L IY0\nUNIQUENESS  Y UW0 - N IY1 K - N AH0 S\nUNIROYAL  Y UW1 - N IH0 - R OY2 - AH0 L\nUNISEX  Y UW1 - N IH0 - S EH2 K S\nUNISOM  Y UW1 - N AH0 - S AA2 M\nUNISON  Y UW1 - N AH0 - S AH0 N\nUNISON(2)  Y UW1 - N IH0 - S AH0 N\nUNISONS  Y UW1 - N AH0 - S AH0 N Z\nUNISONS(2)  Y UW1 - N IH0 - S AH0 N Z\nUNISOURCE  Y UW1 - N IH0 - S AO2 R S\nUNISSUED  AH0 N - IH1 - SH UW2 D\nUNISYS  Y UW1 - N IH0 - S IH2 S\nUNISYS'  Y UW1 - N IH0 - S IH2 S\nUNISYS'S  Y UW1 - N IH0 - S IH2 - S IH0 Z\nUNIT  Y UW1 - N AH0 T\nUNIT'S  Y UW1 - N IH0 T S\nUNIT(2)  Y UW1 - N IH0 T\nUNITA  Y UW2 - N IY1 - T AH0\nUNITAF  Y UW2 - N IH0 - T AE1 F\nUNITARIAN  Y UW2 - N AH0 - T EH1 - R IY0 - AH0 N\nUNITARY  Y UW1 - N IH0 - T EH2 - R IY0\nUNITAS  Y UW0 - N AY1 - T AH0 S\nUNITE  Y UW1 - N AY2 T\nUNITED  Y UW0 - N AY1 - T AH0 D\nUNITED'S  Y UW0 - N AY1 - T AH0 D Z\nUNITED(2)  Y UW0 - N AY1 - T IH0 D\nUNITEDBANK  Y UW2 - N AY1 - T IH0 D - B AE1 NG K\nUNITEK  Y UW1 - N IH0 - T EH2 K\nUNITEL  Y UW1 - N IH0 - T EH2 L\nUNITES  Y UW0 - N AY1 T S\nUNITHOLDER  Y UW1 - N IH0 T - HH OW2 L - D ER0\nUNITHOLDERS  Y UW1 - N IH0 T - HH OW2 L - D ER0 Z\nUNITING  Y UW0 - N AY1 - T IH0 NG\nUNITRIN  Y UW1 - N IH0 - T R IH2 N\nUNITRIN'S  Y UW1 - N IH0 - T R IH2 N Z\nUNITRODE  Y UW1 - N IH0 - T R OW2 D\nUNITRODE'S  Y UW1 - N IH0 - T R OW2 D Z\nUNITS  Y UW1 - N AH0 T S\nUNITS'  Y UW1 - N IH0 T S\nUNITS(2)  Y UW1 - N IH0 T S\nUNITY  Y UW1 - N AH0 - T IY0\nUNITY(2)  Y UW1 - N IH0 - T IY0\nUNIVA  Y UW1 - N IH0 - V AH0\nUNIVAR  Y UW1 - N IH0 - V AA0 R\nUNIVATION  Y UW2 - N IH0 - V EY1 - SH AH0 N\nUNIVERSAL  Y UW2 - N AH0 - V ER1 - S AH0 L\nUNIVERSAL'S  Y UW2 - N AH0 - V ER1 - S AH0 L Z\nUNIVERSALITY  Y UW2 - N AH0 - V ER0 - S AE1 - L AH0 - T IY0\nUNIVERSALLY  Y UW2 - N AH0 - V ER1 - S AH0 - L IY0\nUNIVERSE  Y UW1 - N AH0 - V ER2 S\nUNIVERSES  Y UW1 - N AH0 - V ER2 - S IH0 Z\nUNIVERSITIES  Y UW2 - N AH0 - V ER1 - S AH0 - T IY0 Z\nUNIVERSITIES'  Y UW2 - N IH0 - V ER1 - S IH0 - T IY0 Z\nUNIVERSITY  Y UW2 - N AH0 - V ER1 - S AH0 - T IY0\nUNIVERSITY'S  Y UW2 - N AH0 - V ER1 - S AH0 - T IY0 Z\nUNIVISA  Y UW2 - N IH0 - V IY1 - S AH0\nUNIVISION  Y UW2 - N IH0 - V IH1 - ZH AH0 N\nUNIX  Y UW1 - N IH0 K S\nUNJUST  AH0 N - JH AH1 S T\nUNJUSTIFIABLE  AH2 N - JH AH2 - S T IH0 - F AY1 - AH0 - B AH0 L\nUNJUSTIFIABLY  AH2 N - JH AH2 - S T IH0 - F AY1 - AH0 - B L IY0\nUNJUSTIFIED  AH0 N - JH AH1 - S T AH0 - F AY2 D\nUNJUSTLY  AH0 N - JH AH1 S T - L IY0\nUNKEFER  AH1 NG - K IH0 - F ER0\nUNKEMPT  AH0 N - K EH1 M P T\nUNKIND  AH0 N - K AY1 N D\nUNKINDEST  AH0 N - K AY1 N - D IH0 S T\nUNKNOWABLE  AH0 N - N OW1 - AH0 - B AH0 L\nUNKNOWING  AH0 N - N OW1 - IH0 NG\nUNKNOWINGLY  AH0 N - N OW1 - IH0 NG - L IY0\nUNKNOWN  AH0 N - N OW1 N\nUNKNOWNS  AH0 N - OW1 N Z\nUNLABELED  AH0 N - L EY1 - B AH0 L D\nUNLAND  AH1 N - L AH0 N D\nUNLAWFUL  AH0 N - L AO1 - F AH0 L\nUNLAWFULLY  AH0 N - L AO1 - F AH0 - L IY0\nUNLEADED  AH0 N - L EH1 - D AH0 D\nUNLEASH  AH0 N - L IY1 SH\nUNLEASHED  AH0 N - L IY1 SH T\nUNLEASHES  AH0 N - L IY1 - SH IH0 Z\nUNLEASHING  AH0 N - L IY1 - SH IH0 NG\nUNLESS  AH0 N - L EH1 S\nUNLEVERAGED  AH0 N - L EH1 - V R IH0 JH D\nUNLICENSED  AH0 N - L AY1 - S AH0 N S T\nUNLIKE  AH0 N - L AY1 K\nUNLIKELY  AH0 N - L AY1 K - L IY0\nUNLIMITED  AH0 N - L IH1 - M AH0 - T AH0 D\nUNLIMITED(2)  AH0 N - L IH1 - M IH0 - T IH0 D\nUNLINED  AH0 N - L AY1 N D\nUNLISTED  AH0 N - L IH1 - S T IH0 D\nUNLIVABLE  AH0 N - L IH1 - V AH0 - B AH0 L\nUNLOAD  AH0 N - L OW1 D\nUNLOADED  AH0 N - L OW1 - D AH0 D\nUNLOADED(2)  AH0 N - L OW1 - D IH0 D\nUNLOADING  AH0 N - L OW1 - D IH0 NG\nUNLOADS  AH0 N - L OW1 D Z\nUNLOCK  AH0 N - L AA1 K\nUNLOCKED  AH0 N - L AA1 K T\nUNLOCKING  AH0 N - L AA1 - K IH0 NG\nUNLOVED  AH0 N - L AH1 V D\nUNLUCKY  AH0 N - L AH1 - K IY0\nUNMADE  AH0 N - M EY1 D\nUNMANAGE  AH0 N - M AE1 - N IH0 JH\nUNMANAGEABLE  AH0 N - M AE1 - N IH0 - JH AH0 - B AH0 L\nUNMANAGED  AH0 N - M AE1 - N IH0 JH D\nUNMANNED  AH0 N - M AE1 N D\nUNMARKED  AH0 N - M AA1 R K T\nUNMARRIED  AH0 N - M EH1 - R IY0 D\nUNMASK  AH0 N - M AE1 S K\nUNMASKED  AH0 N - M AE1 S K T\nUNMATCHED  AH0 N - M AE1 CH T\nUNMENTIONABLE  AH0 N - M EH1 N - SH AH0 N - AH0 - B AH0 L\nUNMENTIONED  AH0 N - M EH1 N - CH AH0 N D\nUNMET  AH0 N - M EH1 T\nUNMISTAKABLE  AH2 N - M IH0 - S T EY1 - K AH0 - B AH0 L\nUNMISTAKABLY  AH2 N - M IH0 - S T EY1 - K AH0 - B L IY0\nUNMITIGATED  AH0 N - M IH1 - T AH0 - G EY2 - T IH0 D\nUNMIXED  AH0 N - M IH1 K S T\nUNMOLESTED  AH2 N - M AH0 - L EH1 - S T IH0 D\nUNMOVED  AH0 N - M UW1 V D\nUNNAMED  AH0 N - N EY1 M D\nUNNATURAL  AH0 N - N AE1 - CH ER0 - AH0 L\nUNNATURALLY  AH0 N - N AE1 - CH ER0 - AH0 - L IY0\nUNNATURALLY(2)  AH0 N - N AE1 - CH ER0 - L IY0\nUNNATURALLY(3)  AH0 N - AE1 - CH ER0 - L IY0\nUNNATURALLY(4)  AH0 N - N AE1 - CH R AH0 - L IY0\nUNNECESSARILY  AH0 N - N EH1 - S AH0 - S EH2 - R AH0 - L IY0\nUNNECESSARY  AH0 N - N EH1 - S AH0 - S EH2 - R IY0\nUNNEEDED  AH0 N - N IY1 - D IH0 D\nUNNERVE  AH0 N - ER1 V\nUNNERVED  AH0 N - N ER1 V D\nUNNERVING  AH0 N - ER1 - V IH0 NG\nUNNOTICED  AH0 N - N OW1 - T IH0 S T\nUNO  AH0 N - OW1\nUNO(2)  UW1 - N OW2\nUNOBSTRUCTED  AH2 N - AH0 B - S T R AH1 K - T IH0 D\nUNOBTAINABLE  AH2 N - AH0 B - T EY1 - N AH0 - B AH0 L\nUNOBTRUSIVE  AH2 N - AH0 B - T R UW1 - S IH0 V\nUNOCAL  Y UW1 - N AH0 - K AE2 L\nUNOCAL'S  Y UW1 - N AH0 - K AE2 L Z\nUNOCAL'S(2)  Y UW1 - N AH0 - K AO2 L Z\nUNOCAL(2)  Y UW1 - N AH0 - K AO2 L\nUNOCCUPIED  AH0 N - AA1 - K Y AH0 - P AY2 D\nUNOFFICIAL  AH2 N - AH0 - F IH1 - SH AH0 L\nUNOFFICIALLY  AH0 N - AH0 - F IH1 - SH AH0 - L IY0\nUNOPENED  AH0 N - OW1 - P AH0 N D\nUNOPPOSED  AH2 N - AH0 - P OW1 Z D\nUNORGANIZED  AH0 N - AO1 R - G AH0 - N AY2 Z D\nUNORTHODOX  AH0 - N AO1 R - TH AH0 - D AA2 K S\nUNOS  UW1 - N OW0 Z\nUNOSOM  Y UW1 - N OW0 - S AO2 M\nUNOSOM(2)  Y UW1 - N OW0 - S AH0 M\nUNPACK  AH0 N - P AE1 K\nUNPACKED  AH0 N - P AE1 K T\nUNPACKING  AH0 N - P AE1 - K IH0 NG\nUNPAID  AH0 N - P EY1 D\nUNPAINTED  AH0 N - P EY1 N - T IH0 D\nUNPALATABLE  AH0 N - P AE1 - L AH0 - T AH0 - B AH0 L\nUNPARALLELED  AH0 N - P EH1 - R AH0 - L EH2 L D\nUNPATRIOTIC  AH0 N - P EY2 - T R IY0 - AA1 - T IH0 K\nUNPAYABLE  AH0 N - P EY1 - AH0 - B AH0 L\nUNPERTURBED  AH2 N - P ER0 - T ER1 B D\nUNPLACED  AH0 N - P L EY1 S T\nUNPLANNED  AH0 N - P L AE1 N D\nUNPLEASANT  AH0 N - P L EH1 - Z AH0 N T\nUNPLEASANTLY  AH0 N - P L EH1 - Z AH0 N T - L IY0\nUNPLEASANTNESS  AH0 N - P L EH1 - Z AH0 N T - N AH0 S\nUNPLUG  AH0 N - P L AH1 G\nUNPLUGGED  AH0 N - P L AH1 G D\nUNPLUGGED(2)  AH1 N - P L AH1 G D\nUNPOPULAR  AH2 N - P AA1 - P Y AH0 - L ER0\nUNPOPULARITY  AH0 N - P AA2 - P Y AH0 - L EH1 - R IH0 - T IY0\nUNPRECEDENTED  AH0 N - P R EH1 - S IH0 - D EH2 N - T IH0 D\nUNPRECEDENTEDLY  AH0 N - P R EH1 - S AH0 - D EH2 N - T IH0 D - L IY0\nUNPREDICTABILITY  AH2 N - P R AH0 - D IH2 K - T AH0 - B IH1 - L IH0 - T IY0\nUNPREDICTABLE  AH2 N - P R IH0 - D IH1 K - T AH0 - B AH0 L\nUNPREDICTABLY  AH2 N - P R IH0 - D IH1 K - T AH0 - B L IY0\nUNPREPARED  AH2 N - P R IY0 - P EH1 R D\nUNPRESERVED  AH0 N - P R AH0 - Z ER1 V D\nUNPRESERVED(2)  AH0 N - P R IH0 - Z ER1 V D\nUNPRESERVED(3)  AH0 N - P R IY0 - Z ER1 V D\nUNPRESSURIZED  AH0 N - P R EH1 - SH ER0 - AY0 Z D\nUNPRETENTIOUS  AH2 N - P R IY0 - T EH1 N - SH AH0 S\nUNPRINCIPLED  AH0 N - P R IH1 N - S AH0 - P AH0 L D\nUNPRINTABLE  AH0 N - P R IH1 N - T AH0 - B AH0 L\nUNPROCESSED  AH0 N - P R AO1 - S EH2 S T\nUNPRODUCTIVE  AH2 N - P R AH0 - D AH1 K - T IH0 V\nUNPROFESSIONAL  AH2 N - P R AH0 - F EH1 - SH AH0 - N AH0 L\nUNPROFITABILITY  AH0 N - P R AA2 - F IH0 - T AH0 - B IH1 - L IH0 - T IY0\nUNPROFITABLE  AH0 N - P R AA1 - F IH0 - T AH0 - B AH0 L\nUNPROFOR  AH1 - P R OW0 - F AO2 R\nUNPROFOR'S  AH1 - P R OW0 - F AO2 R Z\nUNPROMISING  AH0 N - P R AO1 - M IH0 - S IH0 NG\nUNPROTECTED  AH2 N - P R AH0 - T EH1 K - T IH0 D\nUNPROVED  AH0 N - P R UW1 V D\nUNPROVEN  AH0 N - P R UW1 - V AH0 N\nUNPROVOKED  AH2 N - P R AH0 - V OW1 K T\nUNPUBLICIZED  AH0 N - P AH1 - B L IH0 - S AY0 Z D\nUNPUBLISHED  AH0 N - P AH1 - B L IH0 SH T\nUNPUNISHED  AH0 N - P AH1 - N IH0 SH T\nUNQUALIFIED  AH0 N - K W AA1 - L IH0 - F AY2 D\nUNQUESTIONABLE  AH0 N - K W EH1 S - CH AH0 - N AH0 - B AH0 L\nUNQUESTIONABLY  AH0 N - K W EH1 S - CH AH0 - N AH0 - B L IY0\nUNQUESTIONED  AH0 N - K W EH1 S - CH AH0 N D\nUNQUESTIONING  AH0 N - K W EH1 S - CH AH0 - N IH0 NG\nUNQUOTE  AH1 N - K W OW1 T\nUNRATED  AH0 N - R EY1 - T IH0 D\nUNRATH  AH1 N - R AH0 TH\nUNRATIFIED  AH0 N - R AE1 - T IH0 - F AY2 D\nUNRAVEL  AH0 N - R AE1 - V AH0 L\nUNRAVELED  AH0 N - R AE1 - V AH0 L D\nUNRAVELING  AH0 N - R AE1 - V AH0 L - IH0 NG\nUNRAVELING(2)  AH0 N - R AE1 - V L IH0 NG\nUNRAVELS  AH0 N - R AE1 - V AH0 L Z\nUNREACHABLE  AH0 N - R IY1 - CH AH0 - B AH0 L\nUNREAD  AH0 N - R EH1 D\nUNREADABLE  AH0 N - R IY1 - D AH0 - B AH0 L\nUNREADABLE(2)  AH1 N - R IY1 - D AH0 - B AH0 L\nUNREAL  AH0 N - R IY1 L\nUNREALISTIC  AH0 N - R IY2 - L IH1 - S T IH0 K\nUNREALISTICALLY  AH0 N - R IY2 - AH0 - L IH1 - S T IH0 K - L IY0\nUNREALITY  AH2 N - R IY0 - AE1 - L AH0 - T IY0\nUNREALIZED  AH0 N - R IY1 - AH0 - L AY2 Z D\nUNREASONABLE  AH0 N - R IY1 Z - N AH0 - B AH0 L\nUNREASONABLY  AH0 N - R IY1 - Z AH0 N - AH0 - B L IY0\nUNREASONING  AH0 N - R IY1 Z - N IH0 NG\nUNRECEPTIVE  AH0 N - R IH0 - S EH1 P - T IH0 V\nUNRECOGNIZABLE  AH0 N - R EH2 - K AH0 G - N AY1 - Z AH0 - B AH0 L\nUNRECOGNIZED  AH0 N - R EH1 - K AH0 G - N AY2 Z D\nUNRECONCILED  AH0 N - R EH1 - K AH0 N - S AY2 L D\nUNRECONSTRUCTED  AH2 N - R IY0 - K AH0 N - S T R AH1 K - T IH0 D\nUNRECORDED  AH2 N - R IH0 - K AO1 R - D IH0 D\nUNREDEEMED  AH2 N - R IY0 - D IY1 M D\nUNREFINED  AH2 N - R IY0 - F AY1 N D\nUNREFUTED  AH2 N - R IY0 - F Y UW1 - T IH0 D\nUNREGISTERED  AH0 N - R EH1 - JH IH0 - S T ER0 D\nUNREGULATED  AH0 N - R EH1 - G Y AH0 - L EY2 - T IH0 D\nUNREHEARSED  AH0 N - R IY0 - HH ER1 S T\nUNREIMBURSED  AH0 N - R IY0 - IH0 M - B ER1 S T\nUNREIN  AO1 N - R AY0 N\nUNRELATED  AH2 N - R IH0 - L EY1 - T IH0 D\nUNRELATED(2)  AH2 N - R IY0 - L EY1 - T IH0 D\nUNRELEASED  AH0 N - R IH0 - L IY1 S T\nUNRELENTING  AH2 N - R IY0 - L EH1 N - T IH0 NG\nUNRELIABILITY  AH2 N - R IY0 - L AY2 - AH0 - B IH1 - L IH0 - T IY0\nUNRELIABLE  AH2 N - R IH0 - L AY1 - AH0 - B AH0 L\nUNRELIABLE(2)  AH2 N - R IY0 - L AY1 - AH0 - B AH0 L\nUNRELIEVED  AH2 N - R IY0 - L IY1 V D\nUNREMARKABLE  AH0 N - R IH0 - M AA1 R - K AH0 - B AH0 L\nUNREMARKED  AH0 N - R IH0 - M AA1 R K T\nUNREMITTED  AH0 N - R IH0 - M IH1 - T IH0 D\nUNREMITTING  AH2 N - R IH0 - M IH1 - T IH0 NG\nUNREMITTING(2)  AH2 N - R IY0 - M IH1 - T IH0 NG\nUNREPENTANT  AH2 N - R IH0 - P EH1 N - T AH0 N T\nUNREPENTANT(2)  AH2 N - R IY0 - P EH1 N - T AH0 N T\nUNREPORTED  AH2 N - R IY0 - P AO1 R - T IH0 D\nUNREPRESENTATIVE  AH0 N - R EH2 - P R IH0 - Z EH1 N - T AH0 - T IH0 V\nUNREPRESENTED  AH0 N - R EH2 - P R IH0 - Z EH1 N - T IH0 D\nUNREQUITED  AH2 N - R IY0 - K W AY1 - T IH0 D\nUNRESOLVED  AH0 N - R IH0 - Z AA1 L V D\nUNRESPONSIVE  AH2 N - R IY0 - S P AA1 N - S IH0 V\nUNREST  AH0 N - R EH1 S T\nUNRESTRAINED  AH2 N - R IY0 - S T R EY1 N D\nUNRESTRICTED  AH2 N - R IY0 - S T R IH1 K - T IH0 D\nUNREVISED  AH0 N - R IY0 - V AY1 Z D\nUNRING  AH0 N - R IH1 NG\nUNRIVALED  AH0 N - R AY1 - V AH0 L D\nUNRUE  AH1 N - R UW0\nUNRUFFLED  AH0 N - R AH1 - F AH0 L D\nUNRUH  AH1 N - R UW0\nUNRULY  AH0 N - R UW1 - L IY0\nUNSAFE  AH0 N - S EY1 F\nUNSAID  AH0 N - S EH1 D\nUNSALABLE  AH0 N - S EY1 - L AH0 - B AH0 L\nUNSALEABLE  AH0 N - S EY1 - L AH0 - B AH0 L\nUNSANCTIONED  AH0 N - S AE1 NG K - SH AH0 N D\nUNSANITARY  AH0 N - S AE1 - N AH0 - T EH2 - R IY0\nUNSATISFACTORY  AH2 N - S AH0 - T IH0 S - F AE1 K - T ER0 - IY0\nUNSATISFIED  AH0 N - S AE1 - T IH0 S - F AY2 D\nUNSATISFYING  AH0 N - S AE1 - T IH0 S - F AY2 - IH0 NG\nUNSATURATED  AH0 N - S AE1 - CH ER0 - EY2 - T IH0 D\nUNSAVORY  AH0 N - S EY1 - V ER0 - IY0\nUNSCATHED  AH0 N - S K EY1 DH D\nUNSCHEDULED  AH0 N - S K EH1 - JH UW0 L D\nUNSCIENTIFIC  AH0 N - S AY2 - AH0 N - T IH1 - F IH0 K\nUNSCOM  AH1 N - S K AO2 M\nUNSCRAMBLE  AH0 N - S K R AE1 M - B AH0 L\nUNSCRIPTED  AH0 N - S K R IH1 P - T IH0 D\nUNSCRUPULOUS  AH0 N - S K R UW1 - P Y AH0 - L AH0 S\nUNSEAL  AH0 N - S IY1 L\nUNSEALED  AH0 N - S IY1 L D\nUNSEASONABLY  AH0 N - S IY1 - Z AH0 N - AH0 - B L IY0\nUNSEAT  AH0 N - S IY1 T\nUNSEATED  AH0 N - S IY1 - T IH0 D\nUNSEATING  AH0 N - S IY1 - T IH0 NG\nUNSECURED  AH2 N - S IH0 - K Y UH1 R D\nUNSECURED(2)  AH2 N - S IY0 - K Y UH1 R D\nUNSEEMLY  AH0 N - S IY1 M - L IY0\nUNSEEN  AH0 N - S IY1 N\nUNSELL  AH0 N - S EH1 L\nUNSENTIMENTAL  AH0 N - S EH2 N - T IH0 - M EH1 N - T AH0 L\nUNSER  AH1 N - S ER0\nUNSERVICEABLE  AH0 N - S ER1 - V AH0 - S AH0 - B AH0 L\nUNSERVICEABLE(2)  AH1 N - S ER1 - V AH0 - S AH0 - B AH0 L\nUNSET  AH0 N - S EH1 T\nUNSET(2)  AH1 N - S EH1 T\nUNSETTLE  AH0 N - S EH1 - T AH0 L\nUNSETTLED  AH0 N - S EH1 - T AH0 L D\nUNSETTLING  AH0 N - S EH1 - T AH0 L - IH0 NG\nUNSETTLING(2)  AH0 N - S EH1 T - L IH0 NG\nUNSHACKLE  AH0 N - SH AE1 - K AH0 L\nUNSHACKLED  AH0 N - SH AE1 - K AH0 L D\nUNSHAKABLE  AH0 N - SH EY1 - K AH0 - B AH0 L\nUNSHAKEABLE  AH0 N - SH EY1 - K AH0 - B AH0 L\nUNSHAKEN  AH0 N - SH EY1 - K AH0 N\nUNSHARPENED  AH0 N - SH AA1 R - P AH0 N D\nUNSHAVEN  AH0 N - SH EY1 - V AH0 N\nUNSIGHTLY  AH0 N - S AY1 T - L IY0\nUNSIGNED  AH0 N - S AY1 N D\nUNSINKABLE  AH0 N - S IH1 NG - K AH0 - B AH0 L\nUNSKILLED  AH0 N - S K IH1 L D\nUNSMILING  AH0 N - S M AY1 - L IH0 NG\nUNSOLD  AH0 N - S OW1 L D\nUNSOLICITED  AH2 N - S AH0 - L IH1 - S IH0 - T IH0 D\nUNSOLVABLE  AH0 N - S AA1 L - V AH0 - B AH0 L\nUNSOLVED  AH0 N - S AA1 L V D\nUNSOPHISTICATED  AH2 N - S AH0 - F IH1 - S T IH0 - K EY2 - T IH0 D\nUNSOUND  AH0 N - S AW1 N D\nUNSPARING  AH0 N - S P EH1 - R IH0 NG\nUNSPEAKABLE  AH0 N - S P IY1 - K AH0 - B AH0 L\nUNSPECIFIED  AH0 N - S P EH1 - S AH0 - F AY2 D\nUNSPECTACULAR  AH2 N - S P EH0 K - T AE1 - K Y AH0 - L ER0\nUNSPENT  AH0 N - S P EH1 N T\nUNSPOILED  AH0 N - S P OY1 L D\nUNSPOKEN  AH0 N - S P OW1 - K AH0 N\nUNSPORTSMANLIKE  AH0 N - S P AO1 R T S - M AH0 N - L AY2 K\nUNSTABLE  AH0 N - S T EY1 - B AH0 L\nUNSTAINED  AH0 N - S T EY1 N D\nUNSTATED  AH0 N - S T EY1 - T IH0 D\nUNSTEADY  AH0 N - S T EH1 - D IY0\nUNSTINTING  AH0 N - S T IH1 N - T IH0 NG\nUNSTOPPABLE  AH0 N - S T AA1 - P AH0 - B AH0 L\nUNSTRUCTURED  AH0 N - S T R AH1 K - SH ER0 D\nUNSTUCK  AH0 N - S T AH1 K\nUNSUBSCRIBE  AH0 N - S AH0 B - S K R AY1 B\nUNSUBSCRIBED  AH0 N - S AH0 B - S K R AY1 B D\nUNSUBSIDIZED  AH0 N - S AH1 B - S AH0 - D AY2 Z D\nUNSUBSTANTIATED  AH2 N - S AH0 B - S T AE1 N - SH IY0 - EY2 - T IH0 D\nUNSUBTLE  AH0 N - S AH1 - T AH0 L\nUNSUCCESSFUL  AH2 N - S AH0 K - S EH1 S - F AH0 L\nUNSUCCESSFULLY  AH2 N - S AH0 K - S EH1 S - F AH0 - L IY0\nUNSUITABLE  AH0 N - S UW1 - T AH0 - B AH0 L\nUNSUITED  AH0 N - S UW1 - T IH0 D\nUNSULLIED  AH0 N - S AH1 - L IY0 D\nUNSUNG  AH0 N - S AH1 NG\nUNSUPERVISED  AH0 N - S UW1 - P ER0 - V AY2 Z D\nUNSUPPORTABLE  AH2 N - S AH0 - P AO1 R - T AH0 - B AH0 L\nUNSUPPORTED  AH0 N - S AH0 - P AO1 R - T IH0 D\nUNSURE  AH0 N - SH UH1 R\nUNSURPASSED  AH2 N - S ER0 - P AE1 S T\nUNSURPRISING  AH0 N - S ER0 - P R AY1 - Z IH0 NG\nUNSURPRISINGLY  AH2 N - S ER0 - P R AY1 - Z IH0 NG - L IY0\nUNSUSPECTED  AH2 N - S AH0 - S P EH1 K - T IH0 D\nUNSUSPECTING  AH2 N - S AH0 - S P EH1 K - T IH0 NG\nUNSUSTAINABLE  AH2 N - S AH0 - S T EY1 - N AH0 - B AH0 L\nUNSUSTAINABLY  AH2 N - S AH0 - S T EY1 - N AH0 - B L IY0\nUNSWAYED  AH0 N - S W EY1 D\nUNSWERVING  AH0 N - S W ER1 - V IH0 NG\nUNSWORTH  AH1 N - S W ER0 TH\nUNSYMPATHETIC  AH0 N - S IH2 M - P AH0 - TH EH1 - T IH0 K\nUNTAINTED  AH0 N - T EY1 N - T IH0 D\nUNTANGLE  AH0 N - T AE1 NG - G AH0 L\nUNTANGLING  AH0 N - T AE1 NG - L IH0 NG\nUNTAPPED  AH0 N - T AE1 P T\nUNTAXED  AH0 N - T AE1 K S T\nUNTED  AH0 N - T EH1 D\nUNTENABLE  AH0 N - T EH1 - N AH0 - B AH0 L\nUNTENDERED  AH0 N - T EH1 N - D ER0 D\nUNTERBERG  AH1 N - T ER0 - B ER0 G\nUNTERMAN  AH1 N - T ER0 - M AH0 N\nUNTERMEYER  AH1 N - T ER0 - M AY2 R\nUNTERREINER  AO1 N - T ER0 - AY0 - N ER0\nUNTESTED  AH0 N - T EH1 - S T IH0 D\nUNTHINKABLE  AH0 N - TH IH1 NG - K AH0 - B AH0 L\nUNTHINKING  AH0 N - TH IH1 NG - K IH0 NG\nUNTHINKINGLY  AH0 N - TH IH1 NG - K IH0 NG - L IY0\nUNTIDY  AH0 N - T AY1 - D IY0\nUNTIE  AH0 N - T AY1\nUNTIED  AH0 N - T AY1 D\nUNTIEDT  AO1 N - T IY0 T\nUNTIL  AH0 N - T IH1 L\nUNTIMELY  AH0 N - T AY1 M - L IY0\nUNTO  AH1 N - T UW0\nUNTOLD  AH0 N - T OW1 L D\nUNTOUCHABLE  AH0 N - T AH1 - CH AH0 - B AH0 L\nUNTOUCHABLES  AH0 N - T AH1 - CH AH0 - B AH0 L Z\nUNTOUCHED  AH0 N - T AH1 CH T\nUNTOWARD  AH0 N - T UW0 - AO1 R D\nUNTOWARD(2)  AH0 N - T AH0 - W AO1 R D\nUNTRACEABLE  AH0 N - T R EY1 - S AH0 - B AH0 L\nUNTRADITIONAL  AH2 N - T R AH0 - D IH1 - SH AH0 - N AH0 L\nUNTRAINED  AH0 N - T R EY1 N D\nUNTRAMMELED  AH0 N - T R AE1 - M AH0 L D\nUNTREATABLE  AH0 N - T R IY1 - T AH0 - B AH0 L\nUNTREATED  AH0 N - T R IY1 - T IH0 D\nUNTRIED  AH0 N - T R AY1 D\nUNTROUBLED  AH0 N - T R AH1 - B AH0 L D\nUNTRUE  AH0 N - T R UW1\nUNTRUSTWORTHY  AH0 N - T R AH1 S T - W ER2 - DH IY0\nUNTRUTH  AH0 N - T R UW1 TH\nUNTRUTHFUL  AH0 N - T R UW1 TH - F AH0 L\nUNTRUTHS  AH0 N - T R UW1 TH S\nUNTRUTHS(2)  AH0 N - T R UW1 DH S\nUNTURNED  AH0 N - T ER1 N D\nUNTYPICAL  AH0 N - T IH1 - P IH0 - K AH0 L\nUNUM  Y UW1 - N AH0 M\nUNUM(2)  UW1 - N AH0 M\nUNUSABLE  AH0 N - Y UW1 - Z AH0 - B AH0 L\nUNUSED  AH0 N - Y UW1 Z D\nUNUSUAL  AH0 - N Y UW1 - ZH AH0 - W AH0 L\nUNUSUAL(2)  AH0 - N Y UW1 - ZH UW0 - AH0 L\nUNUSUAL(3)  AH0 - N Y UW1 - ZH W AH0 L\nUNUSUALLY  AH0 - N Y UW1 - ZH AH0 W - AH0 - L IY0\nUNUSUALLY(2)  AH0 - N Y UW1 - ZH UW0 - AH0 - L IY0\nUNUSUALLY(3)  AH0 - N Y UW1 - ZH W AH0 - L IY0\nUNVARNISHED  AH0 N - V AA1 R - N IH0 SH T\nUNVEIL  AH0 N - V EY1 L\nUNVEILED  AH0 N - V EY1 L D\nUNVEILING  AH0 N - V EY1 - L IH0 NG\nUNVEILS  AH0 N - V EY1 L Z\nUNVERIFIABLE  AH0 N - V EH2 - R IH0 - F AY1 - AH0 - B AH0 L\nUNVERIFIED  AH0 N - V EH1 - R IH0 - F AY2 D\nUNVERZAGT  AO1 N - V ER0 - Z AO0 G T\nUNWANTED  AH0 N - W AO1 N - T IH0 D\nUNWARRANTED  AH0 N - W AO1 - R AH0 N - T IH0 D\nUNWARY  AH0 N - W EH1 - R IY0\nUNWASHED  AH0 N - W AA1 SH T\nUNWAVERING  AH0 N - W EY1 - V ER0 - IH0 NG\nUNWED  AH0 N - W EH1 D\nUNWELCOME  AH0 N - W EH1 L - K AH0 M\nUNWELCOMED  AH0 N - W EH1 L - K AH0 M D\nUNWIELDINESS  AH0 N - W IY1 L - D IY0 - N AH0 S\nUNWIELDING  AH0 N - W IY1 L - D IH0 NG\nUNWIELDY  AH0 N - W IY1 L - D IY0\nUNWILLING  AH0 N - W IH1 - L IH0 NG\nUNWILLINGLY  AH0 N - W IH1 - L IH0 NG - L IY0\nUNWILLINGNESS  AH0 N - W IH1 - L IH0 NG - N IH0 S\nUNWIN  AO1 N - W IH0 N\nUNWIND  AH0 N - W AY1 N D\nUNWINDING  AH0 N - W AY1 N - D IH0 NG\nUNWINNABLE  AH0 N - W IH1 - N AH0 - B AH0 L\nUNWISE  AH0 N - W AY1 Z\nUNWISELY  AH0 N - W AY1 Z - L IY0\nUNWITTING  AH0 N - W IH1 - T IH0 NG\nUNWITTINGLY  AH0 N - W IH1 - T IH0 NG - L IY0\nUNWORKABLE  AH0 N - W ER1 - K AH0 - B AH0 L\nUNWORRIED  AH0 N - W ER1 - IY0 D\nUNWORTHY  AH0 N - W ER1 - DH IY0\nUNWOUND  AH0 N - W AW1 N D\nUNWRAP  AH0 N - R AE1 P\nUNWRAPPED  AH0 N - R AE1 P T\nUNWRAPPING  AH0 N - R AE1 - P IH0 NG\nUNWRITTEN  AH0 N - R IH1 - T AH0 N\nUNYIELDING  AH0 N - Y IY1 L - D IH0 NG\nUNZ  AH1 N Z\nUNZICKER  AO1 N - Z IH0 - K ER0\nUNZIP  AH0 N - Z IH1 P\nUNZIPPED  AH0 N - Z IH1 P T\nUP  AH1 P\nUP'S  AH1 P S\nUPBEAT  AH1 P - B IY2 T\nUPBRAID  AH1 P - B R EY2 D\nUPBRAIDED  AH0 P - B R EY1 - D IH0 D\nUPBRINGING  AH1 P - B R IH2 - NG IH0 NG\nUPCHURCH  AH1 P - CH ER2 CH\nUPCOMING  AH1 P - K AH2 - M IH0 NG\nUPDATE  AH0 P - D EY1 T\nUPDATE(2)  AH1 P - D EY2 T\nUPDATED  AH0 P - D EY1 - T AH0 D\nUPDATED(2)  AH1 P - D EY2 - T AH0 D\nUPDATED(3)  AH1 P - D EY2 - T IH0 D\nUPDATES  AH0 P - D EY1 T S\nUPDATES(2)  AH1 P - D EY2 T S\nUPDATING  AH0 P - D EY1 - T IH0 NG\nUPDATING(2)  AH1 P - D EY2 - T IH0 NG\nUPDEGRAFF  AH1 P - D IH0 - G R AH0 F\nUPDEGROVE  UW0 P - D EH0 - G R OW1 - V IY0\nUPDIKE  AH1 P - D AY2 K\nUPDRAFT  AH1 P - D R AE2 F T\nUPDRAFTS  AH1 P - D R AE2 F T S\nUPDYKE  AH1 P - D AY2 K\nUPFRONT  AH1 P - F R AH2 N T\nUPGRADE  AH0 P - G R EY1 D\nUPGRADE(2)  AH1 P - G R EY1 D\nUPGRADED  AH0 P - G R EY1 - D AH0 D\nUPGRADED(2)  AH1 P - G R EY2 - D AH0 D\nUPGRADED(3)  AH1 P - G R EY2 - D IH0 D\nUPGRADER  AH1 P - G R EY2 - D ER0\nUPGRADES  AH0 P - G R EY1 D Z\nUPGRADES(2)  AH1 P - G R EY2 D Z\nUPGRADING  AH0 P - G R EY1 - D IH0 NG\nUPGRADING(2)  AH1 P - G R EY2 - D IH0 NG\nUPHAM  AH1 - P AH0 M\nUPHEAVAL  AH0 P - HH IY1 - V AH0 L\nUPHEAVALS  AH0 P - HH IY1 - V AH0 L Z\nUPHELD  AH0 P - HH EH1 L D\nUPHILL  AH1 P - HH IH1 L\nUPHOFF  AH1 P - HH AO2 F\nUPHOLD  AH0 P - HH OW1 L D\nUPHOLDING  AH0 P - HH OW1 L - D IH0 NG\nUPHOLDS  AH0 P - HH OW1 L D Z\nUPHOLSTER  AH0 P - OW1 L - S T ER0\nUPHOLSTERED  AH0 P - OW1 L - S T ER0 D\nUPHOLSTERY  AH0 P - OW1 L - S T ER0 - IY0\nUPJOHN  AH1 P - JH AA2 N\nUPJOHN'S  AH1 P - JH AA2 N Z\nUPKEEP  AH1 P - K IY2 P\nUPLAND  AH1 P - L AH0 N D\nUPLANDS  AH1 P - L AH0 N D Z\nUPLIFT  AH1 P - L IH0 F T\nUPLIFTED  AH1 P - L IH0 F - T IH0 D\nUPLIFTING  AH1 P - L IH2 F - T IH0 NG\nUPLINGER  UW1 - P AH0 - L IH0 - NG ER0\nUPLINGER(2)  UW1 P - L IH0 - NG ER0\nUPMANSHIP  AH1 P - M AH0 N - SH IH2 P\nUPMARKET  AH1 P - M AA2 R - K AH0 T\nUPON  AH0 - P AA1 N\nUPP  AH1 P\nUPPED  AH1 P T\nUPPER  AH1 - P ER0\nUPPERCLASS  AH1 - P ER0 - K L AE2 S\nUPPERMAN  AH1 - P ER0 - M AH0 N\nUPPERMOST  AH1 - P ER0 - M OW2 S T\nUPPERS  AH1 - P ER0 Z\nUPPING  AH1 - P IH0 NG\nUPPITY  AH1 - P AH0 - T IY0\nUPRIGHT  AH0 P - R AY1 T\nUPRIGHT(2)  AH1 P - R AY2 T\nUPRIGHTS  AH1 P - R AY2 T S\nUPRISE  AH1 - P R AY0 Z\nUPRISING  AH0 - P R AY1 - Z IH0 NG\nUPRISING(2)  AH1 - P R AY2 - Z IH0 NG\nUPRISINGS  AH1 - P R AY2 - Z IH0 NG Z\nUPRIVER  AH2 - P R IH1 - V ER0\nUPROAR  AH1 P - R AO2 R\nUPROOT  AH0 P - R UW1 T\nUPROOTED  AH0 P - R UW1 - T IH0 D\nUPROOTING  AH0 P - R UW1 - T IH0 NG\nUPS  AH1 P S\nUPSCALE  AH1 P - S K EY2 L\nUPSET  AH0 P - S EH1 T\nUPSET(2)  AH1 P - S EH2 T\nUPSETS  AH0 P - S EH1 T S\nUPSETS(2)  AH1 P - S EH2 T S\nUPSETTING  AH0 P - S EH1 - T IH0 NG\nUPSHAW  AH1 P - SH AO2\nUPSHOT  AH1 P - SH AA2 T\nUPSHUR  AH1 P - SH ER0\nUPSIDE  AH1 P - S AY1 D\nUPSIZE  AH1 P - S AY1 Z\nUPSIZING  AH1 P - S AY1 - Z IH0 NG\nUPSON  AH1 P - S AH0 N\nUPSTAGE  AH0 P - S T EY1 JH\nUPSTAGED  AH1 P - S T EY1 JH D\nUPSTAIRS  AH0 P - S T EH1 R Z\nUPSTANDING  AH1 P - S T AE2 N - D IH0 NG\nUPSTART  AH1 P - S T AA2 R T\nUPSTARTS  AH0 P - S T AA1 R T S\nUPSTATE  AH1 P - S T EY1 T\nUPSTREAM  AH1 P - S T R IY1 M\nUPSURGE  AH1 P - S ER2 JH\nUPSWING  AH0 P - S W IH1 NG\nUPSWING(2)  AH1 P - S W IH2 NG\nUPSWINGS  AH1 P - S W IH2 NG Z\nUPTAIN  AH0 P - T EY1 N\nUPTAKE  AH1 P - T EY2 K\nUPTEGROVE  AH1 P - T IH0 - G R AH0 V\nUPTICK  AH1 P - T IH2 K\nUPTICKS  AH1 P - T IH2 K S\nUPTIGHT  AH0 P - T AY1 T\nUPTON  AH1 P - T AH0 N\nUPTOWN  AH1 P - T AW1 N\nUPTREND  AH1 P - T R EH2 N D\nUPTURN  AH0 P - T ER1 N\nUPTURN(2)  AH1 P - T ER2 N\nUPTURNS  AH1 P - T ER2 N Z\nUPWARD  AH1 P - W ER0 D\nUPWARDLY  AH1 P - W ER0 D - L IY0\nUPWARDS  AH1 P - W ER0 D Z\nUPWOOD  AH1 P - W UH2 D\nUR  ER1\nUR(2)  UH1 R\nURAL  Y UH1 - R AH0 L\nURALS  Y UH1 - R AH0 L Z\nURAM  Y UW1 - R AH0 M\nURANGA  ER0 - AA1 NG - G AH0\nURANIUM  Y ER0 - EY1 - N IY0 - AH0 M\nURANUS  Y UW1 - R AH0 - N AH0 S\nURANUS(2)  Y ER1 - AH0 - N AH0 S\nURBACH  ER1 - B AA0 K\nURBAIN  ER0 - B EY1 N\nURBAN  ER1 - B AH0 N\nURBAN'S  ER1 - B AH0 N Z\nURBANA  ER0 - B AE1 - N AH0\nURBANCHUK  ER0 - B AH1 N - CH AH0 K\nURBANCZYK  ER0 - B AH1 N - CH IH0 K\nURBANE  ER0 - B EY1 N\nURBANEK  ER0 - B AE1 - N EH0 K\nURBANI  ER0 - B AA1 - N IY0\nURBANIAK  ER0 - B AE1 - N IY0 - AE0 K\nURBANIK  ER0 - B AE1 - N IH0 K\nURBANISM  ER1 - B AH0 - N IH0 Z M\nURBANITE  ER1 - B AH0 - N AY2 T\nURBANITES  ER1 - B AH0 - N AY2 T S\nURBANIZATION  ER2 - B AH0 - N AH0 - Z EY1 - SH AH0 N\nURBANIZATION(2)  ER2 - B AH0 - N IH0 - Z EY1 - SH AH0 N\nURBANIZE  ER1 - B AH0 - N AY2 Z\nURBANIZED  ER1 - B AH0 - N AY2 Z D\nURBANO  ER0 - B AA1 - N OW0\nURBANOWICZ  ER0 - B AE1 - N AH0 - V IH0 CH\nURBANSKI  ER0 - B AE1 N S - K IY0\nURBAS  ER1 - B AH0 Z\nURBASZEWSKI  ER2 - B AH0 - S UW1 S - K IY0\nURBINA  ER0 - B IY1 - N AH0\nURCHIN  ER1 - CH AH0 N\nURCHINS  ER1 - CH AH0 N Z\nURDA  ER1 - D AH0\nURDIALES  ER1 - D IY0 - EY0 L Z\nURDU  ER0 - D UW1\nURE  Y UW1 R\nUREA  Y ER0 - IY1 - AH0\nUREMIA  Y ER0 - IY1 - M IY0 - AH0\nUREN  ER0 - EH1 N\nURENA  ER0 - EY1 - N AH0\nURESTI  ER0 - EH1 - S T IY0\nURETHANE  Y ER1 - AH0 - TH EY2 N\nURETHRA  Y ER2 - IY1 - TH R AH0\nUREY  Y ER1 - IY0\nURFER  ER1 - F ER0\nURGE  ER1 JH\nURGED  ER1 JH D\nURGEN  ER1 - JH EH2 N\nURGEN'S  ER1 - JH EH2 N Z\nURGENCY  ER1 - JH AH0 N - S IY0\nURGENT  ER1 - JH AH0 N T\nURGENTLY  ER1 - JH AH0 N T - L IY0\nURGES  ER1 - JH AH0 Z\nURGES(2)  ER1 - JH IH0 Z\nURGING  ER1 - JH IH0 NG\nURGINGS  ER1 - JH IH0 NG Z\nURGO  ER1 - G OW0\nURI  Y ER1 - IY0\nURI'S  Y ER1 - IY0 Z\nURIAN  Y ER1 - IY0 - AH0 N\nURIARTE  Y ER1 - IY0 - AA1 R - T IY0\nURIAS  Y ER0 - IY1 - AH0 Z\nURIBE  Y ER0 - IY1 - B IY0\nURIC  Y ER1 - IH0 K\nURICH  Y ER1 - IH0 K\nURICK  Y ER1 - R IH0 K\nURIE  Y ER1 - IY0\nURIEGAS  Y ER0 - IY1 - G AH0 Z\nURINALYSIS  Y ER2 - AH0 - N AE1 - L AH0 - S IH0 S\nURINARY  Y ER1 - AH0 - N EH2 - R IY0\nURINATE  Y ER1 - AH0 - N EY2 T\nURINATING  Y ER1 - AH0 - N EY2 - T IH0 NG\nURINE  Y ER1 - AH0 N\nURINE(2)  Y UH1 - R AH0 N\nURIOSTE  Y ER0 - IY0 - OW1 - S T IY0\nURKEL  ER1 - K AH0 L\nURMAN  ER1 - M AH0 N\nURN  ER1 N\nURNESS  ER1 - N AH0 S\nUROKINASE  Y ER2 - AH0 - K AH0 - N EY1 Z\nUROLOGIST  Y ER0 - AA1 - L AH0 - JH AH0 S T\nUROLOGISTS  Y ER0 - AA1 - L AH0 - JH AH0 S T S\nUROLOGY  Y ER0 - AA1 - L AH0 - JH IY0\nURQUHART  ER1 - K AA2 R T\nURQUIDEZ  ER0 K - W IY1 - D EH0 Z\nURQUIDI  ER0 K - W IY1 - D IY0\nURQUIZA  ER0 - K W IY1 - Z AH0\nURREA  ER0 - IY1 - AH0\nURRUTIA  ER0 - UW1 - SH AH0\nURSA  ER1 - S AH0\nURSCHEL  ER1 - SH AH0 L\nURSERY  ER1 - S ER0 - IY0\nURSIE  ER1 - S IY0\nURSIN  ER1 - S IH0 N\nURSINI  ER0 - S IY1 - N IY0\nURSO  ER1 - S OW0\nURSOLA  ER0 - S OW1 - L AH0\nURSON  ER1 - S AH0 N\nURSTADT  ER1 - S T AE2 T\nURSULA  ER1 - S AH0 - L AH0\nURSUS  ER1 - S AH0 S\nURSY  ER1 - S IY0\nURTON  ER1 - T AH0 N\nURUGUAY  Y ER1 - AH0 - G W EY2\nURUGUAY'S  Y ER1 - AH0 - G W EY2 Z\nURUGUAY'S(2)  Y ER1 - AH0 - G W AY2 Z\nURUGUAY(2)  Y ER1 - AH0 - G W AY2\nURUGUAYAN  Y ER2 - AH0 - G W EY1 - AH0 N\nURUGUAYAN(2)  Y ER2 - AH0 - G W AY1 - AH0 N\nURWIN  ER1 - W AH0 N\nURY  Y UW1 - R IY0\nURY(2)  Y ER1 - IY0\nUS  AH1 S\nUS(2)  Y UW1 - EH1 S\nUSA  Y UW1 - EH1 - S EY1\nUSABLE  Y UW1 - Z AH0 - B AH0 L\nUSAFE  Y UW1 - S EY0 F\nUSAGE  Y UW1 - S AH0 JH\nUSAGE(2)  Y UW1 - S IH0 JH\nUSAGES  Y UW1 - S AH0 - JH AH0 Z\nUSAGES(2)  Y UW1 - S IH0 - JH IH0 Z\nUSAID  Y UW1 - EH1 - S EY1 D\nUSAIR  Y UW1 - EH1 - S EH1 R\nUSAIRWAYS  Y UW1 - EH1 - S EH1 R - W EY2 Z\nUSAMERIBANCS  Y UW1 - EH1 - S AH0 - M EH1 - R IH0 - B AE2 N K S\nUSBANCORP  Y UW1 - EH1 S - B AE1 NG - K AO2 R P\nUSE  Y UW1 S\nUSE(2)  Y UW1 Z\nUSEC  Y UW1 - S EH0 K\nUSED  Y UW1 Z D\nUSEFUL  Y UW1 S - F AH0 L\nUSEFUL'S  Y UW1 S - F AH0 L Z\nUSEFULLY  Y UW1 S - F AH0 - L IY0\nUSEFULNESS  Y UW1 S - F AH0 L - N AH0 S\nUSELESS  Y UW1 S - L AH0 S\nUSELMAN  Y UW1 - S AH0 L - M AH0 N\nUSELTON  Y UW1 - S AH0 L - T AH0 N\nUSENET  Y UW1 Z - N EH2 T\nUSER  Y UW1 - Z ER0\nUSER'S  Y UW1 - Z ER0 Z\nUSERS  Y UW1 - Z ER0 Z\nUSERS'  Y UW1 - Z ER0 Z\nUSERY  Y UW1 - Z ER0 - IY0\nUSES  Y UW1 - S AH0 Z\nUSES(2)  Y UW1 - S IH0 Z\nUSES(3)  Y UW1 - Z AH0 Z\nUSES(4)  Y UW1 - Z IH0 Z\nUSHER  AH1 - SH ER0\nUSHERED  AH1 - SH ER0 D\nUSHERING  AH1 - SH ER0 - IH0 NG\nUSHERS  AH1 - SH ER0 Z\nUSINES  Y UW2 - Z IY1 N Z\nUSING  Y UW1 - Z IH0 NG\nUSINOR  Y UW1 - S AH0 - N ER0\nUSREY  AH1 - S R IY0\nUSRY  AH1 - S R IY0\nUSS  Y UW1 - EH1 - S EH1 S\nUSSERY  AH1 - S ER0 - IY0\nUSTINOV  UW1 - S T IH0 - N AA0 V\nUSTINOV(2)  Y UW1 - S T IH0 - N AA0 V\nUSTRUST  Y UW1 - EH1 S - T R AH1 S T\nUSUAL  Y UW1 - ZH AH0 - W AH0 L\nUSUAL(2)  Y UW1 - ZH UW0 - AH0 L\nUSUALLY  Y UW1 - ZH AH0 W - AH0 - L IY0\nUSUALLY(2)  Y UW1 - ZH AH0 - L IY0\nUSURP  Y UW2 - S ER1 P\nUSURPATION  Y UW2 - S ER0 - P EY1 - SH AH0 N\nUSURPED  Y UW2 - S ER1 P T\nUSURPING  Y UW2 - S ER1 - P IH0 NG\nUSURPS  Y UW2 - S ER1 P S\nUSURY  Y UW1 - ZH ER0 - IY0\nUSURY(2)  Y UW1 - Z ER0 - IY0\nUTAH  Y UW1 - T AO2\nUTAH'S  Y UW1 - T AA0 Z\nUTAMARO  Y UW2 - T AH0 - M AA1 - R OW0\nUTECH  Y UW1 - T EH2 K\nUTECHT  Y UW1 - T EH2 K T\nUTENSILS  Y UW0 - T EH1 N - S AH0 L Z\nUTERINE  Y UW1 - T ER0 - AH0 N\nUTERO  Y UW1 - T ER0 - OW0\nUTERUS  Y UW1 - T ER0 - AH0 S\nUTGOFF  AH1 T - G AO0 F\nUTHE  AH1 DH\nUTHE(2)  AH1 TH\nUTHER  Y UW1 - TH ER0\nUTHER(2)  AH1 - DH ER0\nUTICA  Y UW1 - T AH0 - K AH0\nUTICA(2)  Y UW1 - T IY0 - K AH0\nUTILICORP  Y UW0 - T IH1 - L AH0 - K AO0 R P\nUTILICORP(2)  Y UW0 - T IH1 - L AH0 - K AO0 R\nUTILITARIAN  Y UW0 - T IH2 - L AH0 - T EH1 - R IY0 - AH0 N\nUTILITIES  Y UW0 - T IH1 - L AH0 - T IY0 Z\nUTILITIES'  Y UW0 - T IH1 - L AH0 - T IY0 Z\nUTILITY  Y UW0 - T IH1 - L AH0 - T IY0\nUTILITY'S  Y UW0 - T IH1 - L AH0 - T IY0 Z\nUTILIZATION  Y UW2 - T AH0 - L AH0 - Z EY1 - SH AH0 N\nUTILIZE  Y UW1 - T AH0 - L AY2 Z\nUTILIZED  Y UW1 - T AH0 - L AY2 Z D\nUTILIZES  Y UW1 - T AH0 - L AY2 - Z IH0 Z\nUTILIZING  Y UW1 - T AH0 - L AY2 - Z IH0 NG\nUTKE  AH1 T - K IY0\nUTLEY  AH1 T - L IY0\nUTMOST  AH1 T - M OW2 S T\nUTOPIA  Y UW0 - T OW1 - P IY0 - AH0\nUTOPIAN  Y UW0 - T OW1 - P IY0 - AH0 N\nUTOPIANS  Y UW0 - T OW1 - P IY0 - AH0 N Z\nUTOPIAS  Y UW0 - T OW1 - P IY0 - AH0 Z\nUTSEY  AH1 T - S IY0\nUTSUMI  UW0 T - S UW1 - M IY0\nUTT  AH1 T\nUTTECH  AH1 - T EH2 K\nUTTER  AH1 - T ER0\nUTTERANCE  AH1 - T ER0 - AH0 N S\nUTTERANCES  AH1 - T ER0 - AH0 N - S IH0 Z\nUTTERED  AH1 - T ER0 D\nUTTERING  AH1 - T ER0 - IH0 NG\nUTTERLY  AH1 - T ER0 - L IY0\nUTTERS  AH1 - T ER0 Z\nUTZ  AH1 T S\nUTZINGER  AH1 T - Z IH0 - NG ER0\nUVA  Y UW1 - V AH0\nUVA(2)  Y UW1 - V IY1 - EY1\nUWE  Y UW1\nUY  UW1 - IY0\nUY(2)  Y UW1 - W AY1\nUYEDA  AY0 - IY1 - D AH0\nUYEHARA  UW0 - Y EY0 - HH AA1 - R AH0\nUYENO  AY0 - EY1 - N OW0\nUYS  Y UW1 - IY0 Z\nUYS(2)  Y UW1 - W AY1 - EH1 S\nUZBEK  UW1 Z - B EH0 K\nUZBEKISTAN  UW0 Z - B EH1 - K IH0 - S T AE2 N\nUZBEKS  UW1 Z - B EH0 K S\nUZELAC  AH0 - Z EH1 - L AH0 K\nUZI  UW1 - Z IY0\nUZIS  UW1 - Z IY0 Z\nUZMACK  UW1 Z - M AE2 K\nUZZELL  UW0 - Z EH1 L\nUZZLE  AH1 - Z AH0 L\nU_S_M_C  Y UW1 - EH1 - S EH1 M - S IY1\nV  V IY1\nV'S  V IY1 Z\nV.  V IY1\nV.'S  V IY1 Z\nV.S  V IY1 Z\nVAAL  V AA1 L\nVAAPENFABRIKK  V AA2 - P EH1 N - F AH0 - B R IH0 K\nVAAPENFABRIKK(2)  V AA1 - P AH0 N - F AA2 - B R IH0 K\nVACA  V AE1 - K AH0\nVACANCIES  V EY1 - K AH0 N - S IY0 Z\nVACANCY  V EY1 - K AH0 N - S IY0\nVACANT  V EY1 - K AH0 N T\nVACANTI  V AH0 - K AE1 N - T IY0\nVACATE  V EY1 - K EY0 T\nVACATED  V EY0 - K EY1 - T AH0 D\nVACATED(2)  V EY1 - K EY0 - T AH0 D\nVACATING  V EY1 - K EY0 - T IH0 NG\nVACATION  V EY0 - K EY1 - SH AH0 N\nVACATIONED  V EY0 - K EY1 - SH AH0 N D\nVACATIONER  V EY0 - K EY1 - SH AH0 N - ER0\nVACATIONERS  V EY0 - K EY1 - SH AH0 N - ER0 Z\nVACATIONERS'  V EY0 - K EY1 - SH AH0 N - ER0 Z\nVACATIONING  V EY0 - K EY1 - SH AH0 N - IH0 NG\nVACATIONING(2)  V EY0 - K EY1 SH - N IH0 NG\nVACATIONS  V EY0 - K EY1 - SH AH0 N Z\nVACAVILLE  V AE1 - K AH0 - V IH2 L\nVACCA  V AE1 - K AH0\nVACCARELLA  V AA0 - K ER0 - EH1 - L AH0\nVACCARO  V AH0 - K AA1 - R OW0\nVACCINATE  V AE1 K - S AH0 - N EY0 T\nVACCINATED  V AE1 K - S AH0 - N EY0 - T IH0 D\nVACCINATION  V AE0 K - S AH0 - N EY1 - SH AH0 N\nVACCINATIONS  V AE2 K - S AH0 - N EY1 - SH AH0 N Z\nVACCINE  V AE2 K - S IY1 N\nVACCINE'S  V AE2 K - S IY1 N Z\nVACCINES  V AE2 K - S IY1 N Z\nVACCINIA  V AH0 - CH IY1 - N IY0 - AH0\nVACCO  V AE1 - K OW0\nVACEK  V AA1 - CH EH2 K\nVACHA  V AE1 - CH AH0\nVACHON  V AE1 - CH AH0 N\nVACILLATE  V AE1 - S AH0 - L EY2 T\nVACILLATED  V AE1 - S AH0 - L EY0 - T IH0 D\nVACILLATING  V AE1 - S AH0 - L EY2 - T IH0 NG\nVACILLATION  V AE2 - S AH0 - L EY1 - SH AH0 N\nVACLAV  V AE1 K - L AA2 V\nVACLAV(2)  V AA1 - K L AA2 V\nVACLAVIK  V AE1 K - L AH0 - V IH0 K\nVACUOUS  V AE1 - K Y UW0 - AH0 S\nVACUTAINER  V AE1 - K Y UW0 - T EY2 - N ER0\nVACUUM  V AE1 - K Y UW0 M\nVACUUMING  V AE1 - K Y UW0 - M IH0 NG\nVACUUMS  V AE1 - K Y UW0 M Z\nVADALA  V AA0 - D AA1 - L AH0\nVADAS  V AA1 - D AA0 Z\nVADEHRA  V AH0 - D EY1 - R AH0\nVADEN  V EY1 - D AH0 N\nVADER  V EY1 - D ER0\nVADIM  V AA0 - D IY1 M\nVADNAIS  V AH0 D - N EY1\nVADNEY  V AE1 D - N IY0\nVAETH  V IY1 TH\nVAGABOND  V AE1 - G AH0 - B AA0 N D\nVAGABONDS  V AE1 - G AH0 - B AA0 N D Z\nVAGARIES  V EY1 - G ER0 - IY0 Z\nVAGARY  V EY1 - G ER0 - IY0\nVAGELOS  V AH0 - JH EH1 - L OW0 S\nVAGINA  V AH0 - JH AY1 - N AH0\nVAGINAL  V AH0 - JH AY1 - N AH0 L\nVAGRANCY  V EY1 - G R AH0 N - S IY0\nVAGRANT  V EY1 - G R AH0 N T\nVAGRANTS  V EY1 - G R AH0 N T S\nVAGUE  V EY1 G\nVAGUELY  V EY1 G - L IY0\nVAGUENESS  V EY1 G - N IH0 S\nVAGUER  V EY1 - G ER0\nVAGUEST  V EY1 - G IH0 S T\nVAGUINE  V AH0 - G W IY1 N\nVAHEY  V AE1 - HH IY0\nVAHID  V AA0 - HH IY1 D\nVAHL  V AA1 L\nVAHLE  V EY1 - HH AH0 L\nVAIL  V EY1 L\nVAILE  V EY1 L\nVAILLANCOURT  V EY1 - L AH0 N - K AO2 R T\nVAIN  V EY1 N\nVAINLY  V EY1 N - L IY0\nVAJDA  V AY1 - D AH0\nVAJNA  V AY1 - N AH0\nVAKUF  V AE1 - K AH2 F\nVAL  V AE1 L\nVALA  V AA1 - L AH0\nVALABLE  V AE1 - L AH0 - B AH0 L\nVALADE  V AA0 - L AA1 - D EY0\nVALADEZ  V AA0 - L AA1 - D EH0 Z\nVALASEK  V AH0 - L AA1 - S EH0 K\nVALBORGA  V AA0 L - B AO1 R - G AH0\nVALCOURT  V AH0 L - K AO1 R T\nVALDA  V AA1 L - D AH0\nVALDEMAR  V AA0 L - D EY0 - M AA1 R\nVALDERRAMA  V AA0 L - D EH0 - R AA1 - M AH0\nVALDES  V AE0 L - D EH1 Z\nVALDES-PEREZ  V AE2 L - D EH1 Z - P ER0 - EH1 Z\nVALDESHARI  V AE2 L - D EH0 - SH AA1 - R IY0\nVALDEZ  V AE0 L - D EH1 Z\nVALDIS  V AE1 L - D IH0 S\nVALDIVIA  V AA0 L - D IY1 - V IY0 - AH0\nVALDOSTA  V AE2 L - D AO1 - S T AH0\nVALDOVINOS  V AA0 L - D OW0 - V IY1 - N OW0 Z\nVALE  V EY1 L\nVALEDA  V AA0 - L EY1 - D AH0\nVALEDICTORIAN  V AE2 - L AH0 - D IH2 K - T AO1 - R IY0 - AH0 N\nVALEDICTORY  V AE2 - L AH0 - D IH1 K - T ER0 - IY0\nVALEK  V AA1 - L EH0 K\nVALENCE  V EY1 - L AH0 N S\nVALENCIA  V AH0 - L EH1 N - S IY0 - AH0\nVALENCIA'S  V AH0 - L EH1 N - S IY0 - AH0 Z\nVALENCIENNE  V AH0 - L EH1 N - S IY0 - EH2 N\nVALENS  V AE1 - L AH0 N Z\nVALENSUELA  V AE2 - L AH0 N - Z W EY1 - L AH0\nVALENSUELA'S  V AE2 - L AH0 N - Z W EY1 - L AH0 Z\nVALENT  V AA0 - L EY1 - AH0 N T\nVALENTA  V AH0 - L EH1 N - T AH0\nVALENTE  V AA0 - L EH1 N - T IY0\nVALENTI  V AH0 - L EH1 N - T IY0\nVALENTIA  V AA0 - L EH1 N - SH AH0\nVALENTIN  V AA0 - L EY0 N - T IY1 N\nVALENTINA  V AE0 - L IH0 N - T IY1 - N AH0\nVALENTINE  V AE1 - L AH0 N - T AY2 N\nVALENTINE'S  V AE1 - L AH0 N - T AY2 N Z\nVALENTINES  V AE1 - L AH0 N - T AY2 N Z\nVALENTINI  V AE2 - L AH0 N - T IY1 - N IY0\nVALENTINO  V AE2 - L AH0 N - T IY1 - N OW0\nVALENTINO'S  V AE2 - L AH0 N - T IY1 - N OW0 Z\nVALENZA  V AH0 - L EH1 N - Z AH0\nVALENZANO  V AE2 - L EH0 N - Z AA1 - N OW0\nVALENZUELA  V AA0 - L EH0 N - Z UW1 - L AH0\nVALEO  V AE1 - L IY0 - OW0\nVALERA  V AH0 - L EH1 - R AH0\nVALERI  V AA0 - L EH1 - R IY0\nVALERIA  V AH0 - L IY1 - R IY0 - AH0\nVALERIAN  V AH0 - L IH1 - R IY0 - AH0 N\nVALERIANO  V AA0 - L ER0 - IY0 - AA1 - N OW0\nVALERIE  V AE1 - L ER0 - IY0\nVALERIO  V AH0 - L IY1 - R IY0 - OW0\nVALERO  V AH0 - L EH1 - R OW0\nVALERY  V AE1 - L ER0 - IY0\nVALES  V EY1 L Z\nVALESKA  V AA0 - L EY1 - S K AH0\nVALET  V AE0 - L EY1\nVALHALLA  V AE2 L - HH AE1 - L AH0\nVALHI  V AE1 L - HH IY0\nVALIA  V AE1 L - Y AH0\nVALIANT  V AE1 L - Y AH0 N T\nVALIANTLY  V AE1 L - Y AH0 N T - L IY0\nVALID  V AE1 - L AH0 D\nVALID(2)  V AE1 - L IH0 D\nVALIDA  V AA0 - L IY1 - D AH0\nVALIDATE  V AE1 - L AH0 - D EY0 T\nVALIDATED  V AE1 - L AH0 - D EY0 - T AH0 D\nVALIDATES  V AE1 - L AH0 - D EY2 T S\nVALIDATING  V AE1 - L AH0 - D EY2 - T IH0 NG\nVALIDATION  V AE2 - L AH0 - D EY1 - SH AH0 N\nVALIDITY  V AH0 - L IH1 - D AH0 - T IY0\nVALIDITY(2)  V AH0 - L IH1 - D IH0 - T IY0\nVALIDLY  V AE1 - L IH0 D - L IY0\nVALIENTE  V AA0 - L IY1 N - T IY0\nVALIN  V AE1 - L IH0 N\nVALIQUETTE  V AE1 - L IH0 - K EH2 T\nVALIS  V AE1 - L IH0 S\nVALIUM  V EY1 - L IY0 - AH0 M\nVALK  V AO1 K\nVALKO  V AE1 L - K OW0\nVALLA  V AE1 - L AH0\nVALLADARES  V AA0 - L AA0 - D AA1 - R EH0 S\nVALLANCE  V AE1 - L AH0 N S\nVALLANDINGHAM  V AE0 - L AH1 N - D IH0 NG - HH AE2 M\nVALLARIO  V AA0 - L AA1 - R IY0 - OW0\nVALLARTA  V AE2 - L AA1 R - T AH0\nVALLAS  V AE1 - L AH0 Z\nVALLE  V EY1 L\nVALLEAU  V AH0 - L OW1\nVALLEE  V AE1 - L IY0\nVALLEJO  V AA0 - L EY1 - Y OW0\nVALLEJOS  V AA0 - L EY1 - Y OW0 Z\nVALLELY  V EY1 - L IY0\nVALLELY(2)  V AE1 - L IY0\nVALLERY  V AE1 - L ER0 - IY0\nVALLES  V EY1 L Z\nVALLETTE  V AE2 - L EH1 T\nVALLEY  V AE1 - L IY0\nVALLEY'S  V AE1 - L IY0 Z\nVALLEYS  V AE1 - L IY0 Z\nVALLEZ  V AA0 - L EH1 Z\nVALLI  V AE1 - L IY0\nVALLIANT  V AA0 - L IY1 - AH0 N T\nVALLIE  V AO1 - L IY0\nVALLIER  V AE1 - L IY0 - ER0\nVALLIERE  V AE1 - L IY0 - EH0 R\nVALLIS  V AE1 - L IH0 S\nVALLO  V AE1 - L OW0\nVALLONE  V AA0 - L OW1 - N IY0\nVALLOT  V AE1 - L AH0 T\nVALLS  V AO1 L Z\nVALMEYER  V AE1 L - M AY0 - ER0\nVALMONT  V AO1 L - M AA2 N T\nVALOIS  V AE0 L - W AA1\nVALONE  V AH0 - L OW1 N\nVALONIA  V AH0 - L OW1 - N Y AH0\nVALOR  V AE1 - L ER0\nVALOREE  V AE1 - L ER0 - IY1\nVALORES  V AH0 - L AO1 - R EH0 Z\nVALPARAISO  V AE2 L - P ER0 - EY1 - S OW0\nVALSELLA  V AO0 L - S EH1 - L AH0\nVALSPAR  V AE1 L Z - P AA0 R\nVALTEK  V AO1 L - T EH2 K\nVALTIERRA  V AA0 L - T IH1 - R AH0\nVALU  V AE1 L - Y UW0\nVALUABLE  V AE1 L - Y AH0 - B AH0 L\nVALUABLE(2)  V AE1 L - Y UW0 - B AH0 L\nVALUABLES  V AE1 L - Y AH0 - B AH0 L Z\nVALUABLES(2)  V AE1 L - Y UW0 - B AH0 L Z\nVALUATION  V AE0 L - Y UW0 - EY1 - SH AH0 N\nVALUATIONS  V AE0 L - Y UW0 - EY1 - SH AH0 N Z\nVALUE  V AE1 L - Y UW0\nVALUED  V AE1 L - Y UW0 D\nVALUELESS  V AE1 L - Y UW0 - L AH0 S\nVALUEPOINT  V AE1 L - Y UW0 - P OY2 N T\nVALUES  V AE1 L - Y UW0 Z\nVALUES'  V AE1 L - Y UW0 Z\nVALUEVISION  V AE1 L - Y UW0 - V IH2 - ZH AH0 N\nVALUING  V AE1 L - Y UW0 - IH0 NG\nVALUJET  V AE1 L - Y UW0 - JH EH2 T\nVALUJET'S  V AE1 L - Y UW0 - JH EH2 T S\nVALUKAS  V AH0 - L UW1 - K AH0 S\nVALVANO  V AA0 L - V AA1 - N OW0\nVALVE  V AE1 L V\nVALVERDE  V AA0 L - V EH1 R - D EY0\nVALVES  V AE1 L V Z\nVALVO  V AA1 L - V OW0\nVALVOLINE  V AE1 L - V AH0 - L IY2 N\nVAMOS  V AA1 - M OW0 Z\nVAMP  V AE1 M P\nVAMPIRE  V AE1 M - P AY0 R\nVAMPIRE'S  V AE1 M - P AY0 R Z\nVAMPIRES  V AE1 M - P AY0 R Z\nVAMPIRIC  V AE0 M - P IH1 - R IH0 K\nVAN  V AE1 N\nVAN-GOGH  V AE1 N - G OW1\nVANA  V AE1 - N AH0\nVANACKER  V AE0 - N AE1 - K ER0\nVANACORE  V AA0 - N AA0 - K AO1 - R IY0\nVANADIUM  V AH0 - N EY1 - D IY0 - AH0 M\nVANAKEN  V AE1 - N AH0 - K AH0 N\nVANALLEN  V AH0 - N AO1 - L AH0 N\nVANALSTINE  V AE0 - N AE1 L - S T IY0 N\nVANALSTYNE  V AE1 - N AH0 L - S T AY2 N\nVANAMAN  V AE0 - N AO1 - M AH0 N\nVANAMBURG  V AE0 - N AE1 M - B ER0 G\nVANAMBURGH  V AE0 - N AE1 M - B ER0 G\nVANANTWERP  V AH0 - N AE1 N T - W ER0 P\nVANARSDALE  V AE1 - N ER0 Z - D EY2 L\nVANARSDALL  V AH0 - N AA1 R S - D AH0 L\nVANASSE  V AE0 - N AE1 S\nVANATTA  V AA0 - N AA1 - T AH0\nVANATTER  V AA0 - N AE1 - T ER0\nVANAUKEN  V AE0 - N AW1 - K AH0 N\nVANAUSDALL  V AE0 - N AW1 S - D AH0 L\nVANBEBBER  V AE2 N - B EH1 - B ER0\nVANBEEK  V AE2 N - B IY1 K\nVANBENSCHOTEN  V AE0 N - B EH1 N - SH AH0 - T AH0 N\nVANBERGEN  V AE0 N - B ER1 - G AH0 N\nVANBIBBER  V AE2 N - B IH1 - B ER0\nVANBLARCOM  V AE2 N - B L AA1 R - K AH0 M\nVANBLARICOM  V AE2 N - B L AE1 - R IH0 - K AH0 M\nVANBROCKLIN  V AE2 N - B R AA1 - K L IH0 N\nVANBRUNT  V AE2 N - B R AH1 N T\nVANBUREN  V AE0 N - B Y UW1 - R AH0 N\nVANBUSKIRK  V AE2 N - B AH1 - S K ER0 K\nVANCAMP  V AE2 N - K AE1 M P\nVANCAMPEN  V AE2 N - K AE1 M - P AH0 N\nVANCE  V AE1 N S\nVANCIL  V AE1 N - S AH0 L\nVANCISE  V AA1 N - CH AY0 S\nVANCLEAVE  V AE1 N - K L AH0 V\nVANCLEEF  V AE2 N - K L IY1 F\nVANCLEVE  V AE2 N - K L IY1 V\nVANCOMYCIN  V AE2 N - K OW0 - M AY1 - S IH0 N\nVANCOTT  V AH0 N - K AA1 T\nVANCOURT  V AH0 N - K AO1 R T\nVANCOUVER  V AE0 N - K UW1 - V ER0\nVANCOUVER'S  V AE0 N - K UW1 - V ER0 Z\nVANCURA  V AA0 N - K UH1 - R AH0\nVANCUREN  V AE0 N - K Y UW1 - R AH0 N\nVANDAELE  V AE0 N - D EH1 L\nVANDAGRIFF  V AE2 N - D AE1 - G R IH0 F\nVANDAGRIFF(2)  V AE1 N - D AH0 - G R IH0 F\nVANDAL  V AE1 N - D AH0 L\nVANDALEN  V AE2 N - D AE1 - L AH0 N\nVANDALISM  V AE1 N - D AH0 - L IH0 - Z AH0 M\nVANDALIZE  V AE1 N - D AH0 - L AY2 Z\nVANDALIZED  V AE1 N - D AH0 - L AY2 Z D\nVANDALIZING  V AE1 N - D AH0 - L AY2 - Z IH0 NG\nVANDALL  V AE2 N - D AO1 L\nVANDALS  V AE1 N - D AH0 L Z\nVANDAM  V AE2 N - D AE1 M\nVANDAMME  V AE2 N - D AE1 M\nVANDE  V AE1 N D\nVANDEBERG  V AE1 N - D AH0 - B ER0 G\nVANDECAR  V AE1 N - D AH0 - K AA2 R\nVANDEGRIFT  V AE1 N - D AH0 - G R IH0 F T\nVANDEHEI  V AE1 N - D AH0 - HH AY0\nVANDEHEY  V AE1 N - D IH0 - HH IY0\nVANDELLA  V AE2 N - D EH1 - L AH0\nVANDELLAS  V AE2 N - D EH1 - L AH0 Z\nVANDEMAN  V AE1 N - D AH0 - M AH0 N\nVANDEMARK  V AE1 N - D AH0 - M AA2 R K\nVANDEN  V AE1 N - D AH0 N\nVANDENBERG  V AE1 N - D AH0 N - B ER0 G\nVANDENBERGH  V AE1 N - D AH0 N - B ER0 G\nVANDENBERGHE  V AE1 N - D AH0 N - B ER0 G\nVANDENBOOM  V AE1 N - D AH0 N - B UW2 M\nVANDENBOS  V AE1 N - D AH0 N - B OW0 Z\nVANDENBOSCH  V AE1 N - D AH0 N - B AO2 SH\nVANDENBRINK  V AE1 N - D AH0 N - B R IH0 NG K\nVANDENBURG  V AE1 N - D AH0 N - B ER0 G\nVANDENBURGH  V AE1 N - D AH0 N - B ER0 G\nVANDENHEUVEL  V AE1 N - D AH0 N - HH OY0 - V AH0 L\nVANDER  V AE1 N - D ER0\nVANDERBECK  V AE1 N - D ER0 - B EH2 K\nVANDERBEEK  V AE1 N - D ER0 - B IY2 K\nVANDERBERG  V AE1 N - D ER0 - B ER0 G\nVANDERBILT  V AE1 N - D ER0 - B IH0 L T\nVANDERBURG  V AE1 N - D ER0 - B ER0 G\nVANDERBUSH  V AE1 N - D ER0 - B UH0 SH\nVANDERCOOK  V AE1 N - D ER0 - K UH2 K\nVANDERFORD  V AE1 N - D ER0 - F ER0 D\nVANDERGRIFF  V AE1 N - D ER0 - G R IH0 F\nVANDERGRIFT  V AE1 N - D ER0 - G R IH0 F T\nVANDERGRIFT'S  V AE1 N - D ER0 - G R IH2 F T S\nVANDERHEIDE  V AE1 N - D ER0 - HH AY2 D\nVANDERHEIDEN  V AE1 N - D ER0 - HH AY0 - D AH0 N\nVANDERHEYDEN  V AE1 N - D ER0 - HH EY0 - D AH0 N\nVANDERHOEF  V AE1 N - D ER0 - HH OW2 F\nVANDERHOFF  V AE1 N - D ER0 - HH AO2 F\nVANDERHOOF  V AE1 N - D ER0 - HH UH2 F\nVANDERHORST  V AE1 N - D ER0 - HH AO2 R S T\nVANDERKOLK  V AE1 N - D ER0 - K OW2 K\nVANDERKOOI  V AE1 N - D ER0 - K UW2 - IY0\nVANDERLAAN  V AE1 N - D ER0 - L AA2 N\nVANDERLEEST  V AE1 N - D ER0 - AH0 - L IY2 S T\nVANDERLINDE  V AE1 N - D ER0 - L IH2 N D\nVANDERLINDEN  V AE1 N - D ER0 - L IH2 N - D AH0 N\nVANDERLIP  V AE1 N - D ER0 - L IH2 P\nVANDERMARK  V AE1 N - D ER0 - M AA2 R K\nVANDERMEER  V AE1 N - D ER0 - M IH2 R\nVANDERMEULEN  V AE1 N - D ER0 - M OY2 - L AH0 N\nVANDERMOLEN  V AE1 N - D ER0 - M AA2 - L AH0 N\nVANDERPLOEG  V AE1 N - D ER0 - P L OW2 G\nVANDERPOEL  V AE1 N - D ER0 - P OW2 L\nVANDERPOL  V AE1 N - D ER0 - P AO2 L\nVANDERPOOL  V AE1 N - D ER0 - P UW2 L\nVANDERSCHAAF  V AE1 N - D ER0 - SH AA2 F\nVANDERSLICE  V AE1 N - D ER0 - S L AY2 S\nVANDERSLUIS  V AE1 N - D ER0 - S L UW2 - IH0 S\nVANDERSLUIS(2)  V AE1 N - D ER0 - S L UW2 S\nVANDERVEEN  V AE1 N - D ER0 - V IY2 N\nVANDERVEER  V AE1 N - D ER0 - V IH2 R\nVANDERVELDE  V AE1 N - D ER0 - V EH2 L D\nVANDERVELDEN  V AE1 N - D ER0 - V EH2 L - D AH0 N\nVANDERVLIET  V AE1 N - D ER0 V - L IY2 T\nVANDERVOORT  V AE1 N - D ER0 - V UH2 R T\nVANDERVORT  V AE1 N - D ER0 - V AO2 R T\nVANDERWAL  V AE1 N - D ER0 - W AA2 L\nVANDERWALL  V AE1 N - D ER0 - W AA2 L\nVANDERWEELE  V AE1 N - D ER0 - W IY2 L\nVANDERWEIDE  V AE1 N - D ER0 - W AY2 D\nVANDERWERF  V AE1 N - D ER0 - W ER2 F\nVANDERWERFF  V AE1 N - D ER0 - W ER2 F\nVANDERWILT  V AE1 N - D ER0 - W IH2 L T\nVANDERWOUDE  V AE1 N - D ER0 - W AW2 D\nVANDERZANDEN  V AE1 N - D ER0 - Z AE2 N - D AH0 N\nVANDERZEE  V AE1 N - D ER0 - Z IY2\nVANDEUSEN  V AE0 N - D OY1 - S AH0 N\nVANDEVANDER  V AE1 N - D AH0 - V AE2 N - D ER0\nVANDEVEER  V AE1 N - D AH0 - V IH2 R\nVANDEVELDE  V AE1 N - D AH0 - V EH2 L D\nVANDEVEN  V AE1 N - D AH0 - V AH0 N\nVANDEVENDER  V AE1 N - D AH0 - V EH2 N - D ER0\nVANDEVENTER  V AE1 N - D AH0 - V AH0 N - T ER0\nVANDEVER  V AE2 N - D IY1 - V ER0\nVANDEVOORDE  V AE1 N - D AH0 - V UH0 R D\nVANDEVOORT  V AE1 N - D AH0 - V UH0 R T\nVANDEWALKER  V AE1 N - D AH0 - W AO2 - K ER0\nVANDEWALLE  V AE0 N - D UW1 - EY0 L\nVANDEWATER  V AE1 N - D AH0 - W AO0 - T ER0\nVANDEZANDE  V AE1 N - D AH0 - Z IH0 N D\nVANDINE  V AE2 N - D AY1 N\nVANDIVER  V AE1 N - D AY2 - V ER0\nVANDIVIER  V AE0 N - D AY1 - V IY0 - ER0\nVANDOREN  V AE0 N - D AO1 - R AH0 N\nVANDORN  V AE0 N - D AO1 R N\nVANDRIEL  V AE2 N - D R IY1 L\nVANDROSS  V AE2 N - D R AO1 S\nVANDUNK  V AE2 N - D AH1 NG K\nVANDUSEN  V AE0 N - D UW1 - S AH0 N\nVANDUYN  V AE2 N - D AY1 N\nVANDUYNE  V AE2 N - D AY1 N\nVANDUZER  V AE2 N - D UW1 - Z ER0\nVANDYCK  V AE0 N - D IH1 K\nVANDYK  V AE1 N - D IH0 K\nVANDYKE  V AE2 N - D AY1 K\nVANDYKEN  V AE2 N - D AY1 - K AH0 N\nVANDYNE  V AE1 N - D AY2 N\nVANE  V EY1 N\nVANEATON  V AE1 - N AH0 - T AA0 N\nVANECEK  V AE0 - N EH1 - S IH0 K\nVANECK  V AA1 - N EH0 K\nVANEGAS  V AE0 - N IY1 - G AH0 Z\nVANEK  V AE0 - N EH1 K\nVANELLA  V AH0 - N EH1 - L AH0\nVANENGEN  V AE0 - N EH1 - NG AH0 N\nVANEPPS  V AE0 - N EH1 P S\nVANES  V EY1 N Z\nVANESS  V AE1 - N AH0 S\nVANESSA  V AH0 - N EH1 - S AH0\nVANESSEN  V AA1 - N IH0 - S AH0 N\nVANETTEN  V AE1 - N EH1 - T AH0 N\nVANEVERY  V AH0 - N EH1 - V R IY0\nVANFLEET  V AE2 N - F L IY1 T\nVANFOSSAN  V AE0 N - F AA1 - S AH0 N\nVANFOSSEN  V AE0 N - F AA1 - S AH0 N\nVANG  V AE1 NG\nVANGEL  V EY1 NG - G AH0 L\nVANGELDER  V EY1 NG - G IH0 L - D ER0\nVANGIE  V AE1 - NG IY0\nVANGIESON  V AE1 NG - G IY0 - Z AH0 N\nVANGILDER  V AE1 NG - G IH0 L - D ER0\nVANGORDEN  V AE1 NG - G ER0 - D AH0 N\nVANGORDER  V AE1 NG - G ER0 - D ER0\nVANGORP  V AE1 NG - G ER0 P\nVANGUARD  V AE1 N - G AA2 R D\nVANGUARD'S  V AE1 N - G AA2 R D Z\nVANGUILDER  V AE0 N - G AY1 L - D ER0\nVANGUNDY  V AH0 NG - G AH1 N - D IY0\nVANGY  V AE1 N - JH IY0\nVANHALL  V AE2 N - HH AO1 L\nVANHANDEL  V AE2 N - HH AE1 N - D AH0 L\nVANHECKE  V AE2 N - HH EH1 K\nVANHEEL  V AE2 N - HH IY1 L\nVANHISE  V AE0 N - HH AY1 Z\nVANHOESEN  V AE2 N - HH OW1 - S AH0 N\nVANHOOK  V AE2 N - HH UH1 K\nVANHOOSE  V AE2 N - HH UW1 S\nVANHOOSER  V AE2 N - HH UW1 - Z ER0\nVANHOOZER  V AE2 N - HH UW1 - Z ER0\nVANHORN  V AE0 N - HH AO1 R N\nVANHORNE  V AE0 N - HH AO1 R N\nVANHOUSEN  V AE1 N - HH AW2 - S AH0 N\nVANHOUTEN  V AE0 N - HH AA1 - UW0 - T AH0 N\nVANHOVE  V AE0 N - HH AH1 V\nVANHOY  V AE1 N - HH OY0\nVANHUSS  V AE2 N - HH AH1 S\nVANHYNING  V AE2 N - HH AY1 - N IH0 NG\nVANIA  V AA1 - N IY0 - AH0\nVANIER  V AE0 - N IY1 - ER0\nVANIK  V AA1 - N IH0 K\nVANILLA  V AH0 - N IH1 - L AH0\nVANILLI  V AH0 - N IH1 - L IY0\nVANILLIN  V AH0 - N IH1 - L IH0 N\nVANISH  V AE1 - N IH0 SH\nVANISHED  V AE1 - N IH0 SH T\nVANISHES  V AE1 - N IH0 - SH IH0 Z\nVANISHING  V AE1 - N IH0 - SH IH0 NG\nVANITIES  V AE1 - N AH0 - T IY0 Z\nVANITY  V AE1 - N AH0 - T IY0\nVANITY(2)  V AE1 - N IH0 - T IY0\nVANKAMPEN  V AE2 N - K AE1 M - P AH0 N\nVANKEUREN  V AE1 NG - K OY0 - R AH0 N\nVANKIRK  V AE1 NG - K ER0 K\nVANKLEECK  V AE1 NG - K L IY2 K\nVANKUREN  V AE1 NG - K Y UW0 - R AH0 N\nVANLANDINGHAM  V AE2 N - L AE1 N - D IH0 NG - HH AE2 M\nVANLANEN  V AE2 N - L AE1 - N AH0 N\nVANLANINGHAM  V AE2 N - L AE1 - N IH0 NG - HH AE2 M\nVANLEER  V AE0 N - L IH1 R\nVANLEEUWEN  V AE0 N - L UW1 - AH0 N\nVANLEUVEN  V AE0 N - L OY1 - V AH0 N\nVANLIERE  V AE0 N - L IH1 R\nVANLIEW  V AE1 N - L IY0 - UW0\nVANLOAN  V AE1 N - L OW2 N\nVANLOO  V AE1 N - L UW2\nVANLUE  V AE2 N - L UW1\nVANLUVEN  V AE2 N - L UW1 - V AH0 N\nVANMAANEN  V AE2 N - M AA1 - N AH0 N\nVANMARTER  V AE0 N - M AA1 R - T ER0\nVANMATRE  V AE0 N - M EY1 - T ER0\nVANMETER  V AE0 N - M IY1 - T ER0\nVANMETRE  V AE0 N - M IY1 - T ER0\nVANN  V AE1 N\nVANNA  V AE1 - N AH0\nVANNAME  V AE1 - N AH0 M\nVANNATER  V AE0 - N AE1 - T ER0\nVANNATTA  V AA0 - N AA1 - T AH0\nVANNATTER  V AE0 - N AE1 - T ER0\nVANNATTER'S  V AE0 - N AE1 - T ER0 Z\nVANNELLI  V AA0 - N EH1 - L IY0\nVANNESS  V AE0 - N IY1 S\nVANNEST  V AE0 - N IY1 S T\nVANNGUYEN  V AE0 N - G IY1 - AH0 N\nVANNGUYEN(2)  V AE2 - N UW0 - Y EH1 N\nVANNI  V AE1 - N IY0\nVANNICE  V AE1 - N IH0 S\nVANNIE  V AE1 - N IY0\nVANNORMAN  V AE0 - N AO1 R - M AH0 N\nVANNORTWICK  V AH0 - N AO1 R T - W IH0 K\nVANNOSTRAND  V AE0 - N AA1 - S T R AH0 N D\nVANNOTE  V AE0 - N OW1 T\nVANNOY  V AE1 - N OY0\nVANNUCCI  V AA0 - N UW1 - CH IY0\nVANNY  V AE1 - N IY0\nVANO  V AA1 - N OW0\nVANORA  V AE1 - N ER0 - AH0\nVANORDEN  V AE0 - N AO1 R - D AH0 N\nVANORDER  V AE0 - N AO1 R - D ER0\nVANORMAN  V AE0 - N AO1 R - M AH0 N\nVANORNUM  V AE0 - N AO1 R - N AH0 M\nVANOSDOL  V AE0 - N AA1 S - D AH0 L\nVANOSS  V AE0 - N AA1 S\nVANOSTRAND  V AE0 - N AA1 - S T R AH0 N D\nVANOUS  V AE1 - N AH0 S\nVANOVER  V AE1 - N OW2 - V ER0\nVANPATTEN  V AE0 N - P AE1 - T AH0 N\nVANPELT  V AE2 N - P EH1 L T\nVANPUTTEN  V AE0 N - P AH1 - T AH0 N\nVANQUISH  V AE1 NG - K W IH0 SH\nVANQUISHED  V AE1 NG - K W IH0 SH T\nVANRIPER  V AE2 N - R AY1 - P ER0\nVANROEKEL  V AE2 N - R OW1 - K AH0 L\nVANROSSUM  V AE2 N - R AA1 - S AH0 M\nVANRYN  V AE2 N - R IH1 N\nVANS  V AE1 N Z\nVANSANDT  V AE2 N - S AE1 N T\nVANSANT  V AA1 N - S AH0 N T\nVANSCHAICK  V AE0 N - SH AY1 K\nVANSCHOICK  V AE2 N - SH OY1 K\nVANSCIVER  V AE0 N - S K AY1 - V ER0\nVANSCOY  V AE1 N - S K OY2\nVANSCOYOC  V AE2 N - S K OY1 - AA0 K\nVANSCYOC  V AE1 N - S IY0 - AA2 K\nVANSELOW  V AE1 N - S IH0 - L OW0\nVANSICKEL  V AE2 N - S IH1 - K AH0 L\nVANSICKLE  V AE2 N - S IH1 - K AH0 L\nVANSKIKE  V AE2 N - S K AY1 K\nVANSKIVER  V AE2 N - S K AY1 - V ER0\nVANSLOOTEN  V AE2 N S - L UW1 - T AH0 N\nVANSLYKE  V AE2 N S - L AY1 K\nVANSTONE  V AE2 N - S T OW1 N\nVANSTORY  V AE2 N - S T AO1 - R IY0\nVANSTRATEN  V AE2 N - S T R EY1 - T AH0 N\nVANSYCKLE  V AE1 N - S AY0 - K AH0 L\nVANTAGE  V AE1 N - T AH0 JH\nVANTAGE'S  V AE1 N - T IH0 - JH IH0 Z\nVANTAGE(2)  V AE1 N - T IH0 JH\nVANTAGES  V AE1 N - T IH0 - JH IH0 Z\nVANTAGES(2)  V AE1 - N IH0 - JH IH0 Z\nVANTASSEL  V AE2 N - T AE1 - S AH0 L\nVANTASSELL  V AE2 N - T AE1 - S AH0 L\nVANTIL  V AA0 N - T IY1 L\nVANTILBURG  V AE2 N - T IH1 L - B ER0 G\nVANTINE  V AA0 N - T IY1 - N IY0\nVANTOL  V AE0 N - T AO1 L\nVANTRAN  V AE2 N - T R AE1 N\nVANTREASE  V AH0 N - T R IY1 S\nVANTREESE  V AE2 N - T R IY1 S\nVANTUYL  V AE0 N - T AY1 L\nVANUAAKU  V AE2 N - W AH0 - AA1 - K UW2\nVANUATU  V AE0 - N UW0 - AA1 - T UW0\nVANUNU  V AH0 - N UW1 - N UW0\nVANVALKENBURG  V AE0 N - V AO1 - K AH0 N - B ER0 G\nVANVALKENBURGH  V AE0 N - V AE1 L - K IH0 N - B ER0 G\nVANVEEN  V AH0 N - V IY1 N\nVANVLACK  V AE2 N V - L AE1 K\nVANVLECK  V AE2 N - V L EH1 K\nVANVLEET  V AE1 N V - L IY2 T\nVANVLIET  V AE2 N V - L IY1 T\nVANVOOREN  V AE0 N - V UH1 - R AH0 N\nVANVOORHIS  V AE0 N - V UH1 R - HH IH0 S\nVANVOORST  V AE0 N - V UH1 R S T\nVANVORST  V AE0 N - V AO1 R S T\nVANVRANKEN  V AE2 N - V R AE1 NG - K AH0 N\nVANWAGENEN  V AE0 N - W AE1 - G AH0 - N AH0 N\nVANWAGNER  V AE2 N - W AE1 G - N ER0\nVANWAGONER  V AE2 N - W AE1 - G AH0 - N ER0\nVANWART  V AE2 N - W AO1 R T\nVANWERT  V AE0 N - W ER1 T\nVANWEY  V AE1 N - W IY0\nVANWHY  V AE1 N - W IY0\nVANWIE  V AE1 N - W IY0\nVANWIEREN  V AE0 N - W IH1 - R AH0 N\nVANWINKLE  V AE2 N - W IH1 NG - K AH0 L\nVANWORMER  V AE0 N - W ER1 - M ER0\nVANWYCK  V AE0 N - W IH1 K\nVANWYHE  V AE1 N - W AY0 HH\nVANWYK  V AE0 N - W IH1 K\nVANYA  V AA1 - N Y AH0\nVANYA'S  V AA1 - N Y AH0 Z\nVANYO  V AA1 - N Y OW0\nVANZANDT  V AE2 N - Z AE1 N T\nVANZANT  V AA1 N - Z AH0 N T\nVANZANTEN  V AE2 N - Z AE1 N - T AH0 N\nVANZEE  V AA1 N - Z IY0\nVANZILE  V AA1 N - Z AY0 L\nVAPID  V AE1 - P IH0 D\nVAPOR  V EY1 - P ER0\nVAPORIZATION  V EY0 - P ER0 - AH0 - Z EY1 - SH AH0 N\nVAPORIZE  V EY1 - P ER0 - AY2 Z\nVAPORIZED  V EY1 - P ER0 - AY2 Z D\nVAPORS  V EY1 - P ER0 Z\nVAPORWARE  V EY1 - P ER0 - W EH2 R\nVAQUERA  V AA0 - K W EH1 - R AH0\nVARA  V AA1 - R AH0\nVARADY  V ER0 - AA1 - D IY0\nVARANI  V ER0 - AA1 - N IY0\nVARANO  V AA0 - R AA1 - N OW0\nVARBLE  V AA1 R - B AH0 L\nVARCO  V AA1 R - K OW0\nVARDEMAN  V AA1 R D - M AH0 N\nVARDEN  V AA1 R - D AH0 N\nVARDON  V AA0 R - D AO1 N\nVARELA  V AA0 - R EY1 - L AH0\nVARES  V AA1 - R EH0 S\nVARES(2)  V EY1 R Z\nVARGA  V AA1 R - G AH0\nVARGAS  V AA1 R - G AH0 S\nVARGASON  V AA1 R - G AH0 - S AH0 N\nVARGHESE  V AA1 R G - HH IY0 Z\nVARGO  V AA1 R - G OW0\nVARI  V AA1 - R IY0\nVARIABILITY  V EH0 - R IY0 - AH0 - B IH1 - L IH0 - T IY0\nVARIABLE  V EH1 - R IY0 - AH0 - B AH0 L\nVARIABLES  V EH1 - R IY0 - AH0 - B AH0 L Z\nVARIAN  V EH1 - R IY0 - AH0 N\nVARIANCE  V EH1 - R IY0 - AH0 N S\nVARIANCES  V EH1 - R IY0 - AH0 N - S IH0 Z\nVARIANT  V EH1 - R IY0 - AH0 N T\nVARIANTS  V EH1 - R IY0 - AH0 N T S\nVARIATION  V EH2 - R IY0 - EY1 - SH AH0 N\nVARIATIONS  V EH2 - R IY0 - EY1 - SH AH0 N Z\nVARICK  V EH1 - R IH0 K\nVARIED  V EH1 - R IY0 D\nVARIES  V EH1 - R IY0 Z\nVARIETAL  V ER0 - IY1 - T AH0 L\nVARIETALS  V ER0 - AY1 - AH0 - T AH0 L Z\nVARIETIES  V ER0 - AY1 - AH0 - T IY0 Z\nVARIETY  V ER0 - AY1 - AH0 - T IY0\nVARIG  V EH1 - R IH0 G\nVARIN  V AA0 - R IY1 N\nVARINA  V AA0 - R IY1 - N AH0\nVARIOUS  V EH1 - R IY0 - AH0 S\nVARIOUSLY  V EH1 - R IY0 - AH0 S - L IY0\nVARISCO  V AA0 - R IY1 - S K OW0\nVARITRONIC  V EH2 - R IH0 - T R AA1 - N IH0 K\nVARITY  V EH1 - R IH0 - T IY0\nVARITY'S  V EH1 - R IH0 - T IY0 Z\nVARITYPER  V EH1 - R IH0 - T AY2 - P ER0\nVARLAM  V AA1 R - L AE0 M\nVARLEN  V AA1 R - L AH0 N\nVARLEY  V AA1 R - L IY0\nVARMA  V AA1 R - M AH0\nVARMINT  V AA1 R - M IH0 N T\nVARMUS  V AA1 R - M AH0 S\nVARN  V AA1 R N\nVARNADO  V AA0 R - N AA1 - D OW0\nVARNADOE  V AA0 R - N AA1 - D OW0\nVARNADORE  V AA0 R - N AA0 - D AO1 - R EY0\nVARNELL  V AA1 R - N AH0 L\nVARNER  V AA1 R - N ER0\nVARNES  V AA1 R N Z\nVARNEY  V AA1 R - N IY0\nVARNI  V AA1 R - N IY0\nVARNISH  V AA1 R - N IH0 SH\nVARNISHED  V AA1 R - N IH0 SH T\nVARNISHES  V AA1 R - N IH0 - SH AH0 Z\nVARNISHES(2)  V AA1 R - N IH0 - SH IH0 Z\nVARNON  V AA0 R - N AO1 N\nVARNUM  V AA1 R - N AH0 M\nVARO  V EH1 - R OW0\nVARO(2)  V AA1 - R OW0\nVARON  V AA0 - R AO1 N\nVARONA  V AA0 - R OW1 - N AH0\nVARONE  V ER0 - OW1 N\nVARRICCHIO  V AA0 - R IY1 - K IY0 - OW0\nVARRONE  V AA0 - R OW1 - N EY0\nVARS  V AA1 R Z\nVARSITY  V AA1 R - S IH0 - T IY0\nVARTANIAN  V AA0 R - T EY1 - N IY0 - AH0 N\nVARVARO  V AA0 R - V AA1 - R OW0\nVARVEL  V AA0 R - V EH1 L\nVARVES  V AA1 R V Z\nVARY  V EH1 - R IY0\nVARYING  V EH1 - R IY0 - IH0 NG\nVARZI  V AA1 R - Z IY0\nVASBINDER  V AE1 S - B IH0 N - D ER0\nVASBINDER(2)  V AE1 S - B AY0 N - D ER0\nVASCO  V AE1 - S K OW0\nVASCONCELLOS  V AE0 S - K AH0 N - S EH1 - L OW0 Z\nVASCONCELOS  V AA0 - S K OW0 N - S EY1 - L OW0 Z\nVASCULAR  V AE1 - S K Y AH0 - L ER0\nVASE  V EY1 S\nVASE(2)  V AA1 Z\nVASECTOMIES  V AE0 - Z EH1 K - T AH0 - M IY0 Z\nVASECTOMIES(2)  V AE0 - S EH1 K - T AH0 - M IY0 Z\nVASECTOMY  V AE0 - Z EH1 K - T AH0 - M IY0\nVASECTOMY(2)  V AE0 - S EH1 K - T AH0 - M IY0\nVASEK  V AA1 - S EH0 K\nVASELINE  V AE1 - S AH0 - L IY2 N\nVASES  V EY1 - S AH0 Z\nVASES(2)  V AA1 - Z IH0 Z\nVASEY  V AE1 - S IY0\nVASHTI  V AE1 SH - T IY0\nVASICEK  V AA1 - S IH0 - CH EH0 K\nVASIL  V AA0 - S IY1 L\nVASILE  V AA1 - S AH0 L\nVASILY  V AE1 - S AH0 - L IY0\nVASKE  V EY1 S K\nVASKEVITCH  V AE1 - S K AH0 - V IH0 CH\nVASKO  V AA1 - S K OW0\nVASLEV  V AA1 S - L IH0 V\nVASLOV  V AE1 - S L AA2 V\nVASLOV'S  V AE1 S - L AA2 V Z\nVASOTEC  V EY1 - Z OW0 - T EH2 K\nVASQUES  V AA1 - S K W EH0 S\nVASQUEZ  V AE0 - S K EH1 Z\nVASS  V AE1 S\nVASSAL  V AE1 - S AH0 L\nVASSALLO  V AA0 - S AA1 - L OW0\nVASSALS  V AE1 - S AH0 L Z\nVASSAR  V AE1 - S ER0\nVASSEL  V AE1 - S AH0 L\nVASSER  V AE1 - S ER0\nVASSEUR  V AE1 - S ER0\nVASSEY  V AE1 - S IY0\nVASSILIOS  V AH0 - S IH1 - L Y AH0 S\nVASSILIOU  V AE2 - S IH1 - L IY0 - UW0\nVAST  V AE1 S T\nVASTA  V AE1 - S T AH0\nVASTINE  V AA0 - S T IY1 - N IY0\nVASTLY  V AE1 S T - L IY0\nVASTNESS  V AE1 S T - N AH0 S\nVASTOLA  V AA0 - S T OW1 - L AH0\nVAT  V AE1 T\nVATER  V EY1 - T ER0\nVATH  V AE1 TH\nVATICAN  V AE1 - T IH0 - K AH0 N\nVATICAN'S  V AE1 - T IH0 - K AH0 N Z\nVATS  V AE1 T S\nVATTED  V AE1 - T IH0 D\nVATTER  V AE1 - T ER0\nVAUDEVILLE  V AA1 D - V IH0 L\nVAUDEVILLIAN  V AA0 D - V IH1 - L Y AH0 N\nVAUGH  V AO1\nVAUGHAN  V AO1 N\nVAUGHAN'S  V AO1 N Z\nVAUGHN  V AO1 N\nVAUGHN'S  V AO1 N Z\nVAUGHNS  V AO1 N Z\nVAUGHT  V AO1 T\nVAULT  V AO1 L T\nVAULTED  V AO1 L - T AH0 D\nVAULTED(2)  V AO1 L - T IH0 D\nVAULTING  V AO1 L - T IH0 NG\nVAULTS  V AO1 L T S\nVAUNTED  V AO1 N - T IH0 D\nVAUPEL  V AW0 - P EH1 L\nVAUSE  V AO1 S\nVAUX  V AO1 K S\nVAUXHALL  V AA1 K S - HH AO2 L\nVAVRA  V AE1 - V R AH0\nVAVREK  V AA1 V - R EH0 K\nVAWTER  V AO1 - T ER0\nVAX  V AE1 K S\nVAXES  V AE1 K - S IH0 Z\nVAXSTATION  V AE2 K - S T EY1 - SH AH0 N\nVAYDA  V EY1 - D AH0\nVAZ  V AE1 Z\nVAZQUEZ  V AE0 - S K EH1 Z\nVE  V IY1\nVE(2)  V IY1 - IY1\nVEACH  V IY1 CH\nVEAL  V IY1 L\nVEALE  V IY1 L\nVEALS  V IY1 L Z\nVEASEY  V IY1 - Z IY0\nVEASLEY  V IY1 Z - L IY0\nVEATCH  V IY1 CH\nVEAZEY  V IY1 - Z IY0\nVEAZIE  V IY1 - Z IY0\nVEBA  V IY1 - B AH0\nVECCHIARELLI  V EH0 - K IY0 - AA0 - R EH1 - L IY0\nVECCHIO  V EH1 - K IY0 - OW0\nVECCHIONE  V EH2 - K IY0 - OW1 - N IY0\nVECCI  V EH1 - CH IY0\nVECELLIO  V EH0 - CH EH1 - L IY0 - OW0\nVECTOR  V EH1 K - T ER0\nVECTORS  V EH1 K - T ER0 Z\nVECTRA  V EH1 K - T R ER0\nVEDA  V EY1 - D AH0\nVEDDER  V EH1 - D ER0\nVEDETTE  V IH0 - D EH1 T\nVEDIS  V EY1 - D IH0 S\nVEDULA  V EH2 - D UW1 - L AH0\nVEE  V IY1\nVEECH  V IY1 CH\nVEECO  V IY1 - K OW0\nVEEDER  V IY1 - D ER0\nVEEGENAN  V IY1 - G AH0 - N AH0 N\nVEEN  V IY1 N\nVEENSTRA  V IY1 N - S T R AH0\nVEEP  V IY1 P\nVEER  V IH1 R\nVEERED  V IH1 R D\nVEERING  V IH1 - R IH0 NG\nVEERS  V IH1 R Z\nVEES  V IY1 Z\nVEGA  V EY1 - G AH0\nVEGAS  V EY1 - G AH0 S\nVEGESNA  V EH0 - G EH1 S - N AH0\nVEGETABLE  V EH1 JH - T AH0 - B AH0 L\nVEGETABLES  V EH1 JH - T AH0 - B AH0 L Z\nVEGETAL  V EH1 - JH AH0 - T AH0 L\nVEGETARIAN  V EH2 - JH AH0 - T EH1 - R IY0 - AH0 N\nVEGETARIANISM  V EH2 - JH AH0 - T EH1 - R IY0 - AH0 - N IH0 - Z AH0 M\nVEGETARIANS  V EH2 - JH AH0 - T EH1 - R IY0 - AH0 N Z\nVEGETATE  V EH1 - JH AH0 - T EY2 T\nVEGETATION  V EH2 - JH AH0 - T EY1 - SH AH0 N\nVEGETATIVE  V EH2 - JH AH0 - T EY1 - T IH0 V\nVEGGIE  V EH1 - JH IY0\nVEGGIES  V EH1 - JH IY0 Z\nVEGH  V EH1 G\nVEGISNAX  V AH0 - G IH1 S - N AE0 K S\nVEHEMENCE  V IY1 - AH0 - M AH0 N S\nVEHEMENCE(2)  V AH0 - HH IY1 - M AH0 N S\nVEHEMENT  V IY1 - AH0 - M AH0 N T\nVEHEMENT(2)  V AH0 - HH IY1 - M AH0 N T\nVEHEMENTLY  V IY1 - AH0 - M AH0 N T - L IY0\nVEHEMENTLY(2)  V AH0 - HH IY1 - M AH0 N T - L IY0\nVEHICLE  V IY1 - HH IH0 - K AH0 L\nVEHICLE'S  V IY1 - HH IH0 - K AH0 L Z\nVEHICLE(2)  V IY1 - IH0 - K AH0 L\nVEHICLES  V IY1 - HH IH0 - K AH0 L Z\nVEHICLES'  V EH1 - HH IH0 - K AH0 L Z\nVEHICLES(2)  V IY1 - IH0 - K AH0 L Z\nVEHICULAR  V IY0 - HH IH1 - K Y AH0 - L ER0\nVEIGA  V EY1 - G AH0\nVEIGEL  V AY1 - G AH0 L\nVEIL  V EY1 L\nVEILED  V EY1 L D\nVEILING  V EY1 - L IH0 NG\nVEILLETTE  V AH0 - L EH1 T\nVEILLEUX  V AH0 - L OW1\nVEILLEUX(2)  V EY1 - L OW0\nVEILLON  V EY1 - L AH0 N\nVEILS  V EY1 L Z\nVEIN  V EY1 N\nVEINS  V EY1 N Z\nVEIRA  V EY1 - R AH0\nVEIT  V IY1 T\nVEITCH  V AY1 CH\nVEITH  V IY1 TH\nVELA  V EH1 - L AH0\nVELAGRANDE  V EH2 - L AH0 - G R AA1 N - D EY2\nVELAGRANDE'S  V EH2 - L AH0 - G R AA1 N - D EY2 Z\nVELARDE  V EH0 - L AA1 R - D IY0\nVELARDI  V EH0 - L AA1 R - D IY0\nVELARDO  V EY0 - L AA1 R - D OW0\nVELASCO  V EH0 - L AA1 - S K OW0\nVELASQUEZ  V EH0 - L AE1 - S K EH0 Z\nVELAYATI  V EH0 - L AY2 - AA1 - T IY0\nVELAZCO  V AH0 - L AE1 - S K OW0\nVELAZQUEZ  V EH0 - L AE1 - S K EH0 Z\nVELCRO  V EH1 L - K R OW0\nVELDA  V EH1 L - D AH0\nVELDHUIZEN  V EH1 L D - HH IH0 - Z AH0 N\nVELDMAN  V EH1 L D - M AH0 N\nVELEY  V EH1 - L IY0\nVELEZ  V EH0 - L EH1 Z\nVELIE  V EH1 - L IY0\nVELIKA  V EH1 - L IH0 - K AH0\nVELIOTIS  V EH0 - L IY0 - OW1 - T IH0 S\nVELIZ  V EH1 - L IH0 Z\nVELLA  V EH1 - L AH0\nVELLUCCI  V EH0 - L UW1 - CH IY0\nVELMA  V EH1 L - M AH0\nVELO  V EH1 - L OW0\nVELOBIND  V EH1 - L AH0 - B IH0 N D\nVELOBIND(2)  V EH1 - L OW0 - B AY2 N D\nVELOCIRAPTOR  V AH0 - L AO1 - S AH0 - R AE2 P - T ER0\nVELOCITIES  V AH0 - L AA1 - S AH0 - T IY0 Z\nVELOCITY  V AH0 - L AA1 - S AH0 - T IY0\nVELOSO  V EH2 - L OW1 - S OW0\nVELOTTA  V EH0 - L OW1 - T AH0\nVELOZ  V EY1 - L OW0 Z\nVELSICOL  V EH1 L - S IH0 - K AA2 L\nVELTE  V EH1 L T\nVELTEN  V EH1 L - T AH0 N\nVELTMAN  V EH1 L T - M AH0 N\nVELTRE  V EH1 L - T ER0\nVELTRI  V EH1 L - T R IY0\nVELVEETA  V EH0 L - V IY1 - T AH0\nVELVET  V EH1 L - V AH0 T\nVELVETY  V EH1 L - V AH0 - T IY0\nVEMICH  V EH1 - M IH0 CH\nVEMPALA  V EH2 M - P AA1 - L AH0\nVENA  V IY1 - N AH0\nVENABLE  V EH1 - N AH0 - B AH0 L\nVENABLES  V EH1 - N AH0 - B AH0 L Z\nVENAL  V IY1 - N AH0 L\nVENALITY  V IH0 - N AE1 - L IH0 - T IY0\nVENALUM  V EH1 - N AH0 - L AH0 M\nVENANGO  V EH0 - N AE1 NG - G OW0\nVENARD  V EH1 - N ER0 D\nVENCILL  V EH1 N - S IH0 L\nVENCOR  V EH1 N - K AO2 R\nVENDEE  V EH1 N - D IY1\nVENDELA  V EH0 N - D EH1 - L AH0\nVENDETTA  V EH0 N - D EH1 - T AH0\nVENDETTI  V EH0 N - D EH1 - T IY0\nVENDING  V EH1 N - D IH0 NG\nVENDITTI  V EH0 N - D IY1 - T IY0\nVENDO  V EH1 N - D OW0\nVENDOME  V EH0 N - D OW1 M\nVENDOME(2)  V AA1 N - D OW2 M\nVENDOR  V EH1 N - D ER0\nVENDOR'S  V EH1 N - D ER0 Z\nVENDORS  V EH1 N - D ER0 Z\nVENDORS'  V EH1 N - D ER0 Z\nVENEER  V AH0 - N IH1 R\nVENEGAS  V EH1 - N IH0 - G AH0 Z\nVENEMA  V EH1 - N IH0 - M AH0\nVENERABLE  V EH1 - N ER0 - AH0 - B AH0 L\nVENERATE  V EH1 - N ER0 - EY2 T\nVENERATED  V EH1 - N ER0 - EY2 - T IH0 D\nVENEREAL  V AH0 - N IH1 - R IY0 - AH0 L\nVENETIAN  V AH0 - N IY1 - SH AH0 N\nVENEY  V EH1 - N IY0\nVENEZIA  V EH0 - N EH1 - Z IY0 - AH0\nVENEZIANO  V EH0 - N EH0 - Z IY0 - AA1 - N OW0\nVENEZUELA  V EH2 - N IH0 - Z W EY1 - L AH0\nVENEZUELA'S  V EH2 - N IH0 - Z W EY1 - L AH0 Z\nVENEZUELAN  V EH2 - N IH0 - Z W EY1 - L AH0 N\nVENEZUELANS  V EH2 - N IH0 - Z W EY1 - L AH0 N Z\nVENGEANCE  V EH1 N - JH AH0 N S\nVENGEFUL  V EH1 N JH - F AH0 L\nVENICE  V EH1 - N AH0 S\nVENICE'S  V EH1 - N IH0 - S IH0 Z\nVENICE(2)  V EH1 - N IH0 S\nVENIER  V IY1 - N IY0 - ER0\nVENISON  V EH1 - N AH0 - S AH0 N\nVENITA  V EH0 - N IY1 - T AH0\nVENKATESH  V EH2 N - K AA0 - T EH1 SH\nVENN  V EH1 N\nVENNARD  V EH1 - N ER0 D\nVENNE  V EH1 N\nVENNEMAN  V EH1 N - M AH0 N\nVENNER  V EH1 - N ER0\nVENNICK  V EH1 - N IH0 K\nVENNING  V EH1 - N IH0 NG\nVENO  V EY1 - N OW0\nVENOM  V EH1 - N AH0 M\nVENOMOUS  V EH1 - N AH0 - M AH0 S\nVENOUS  V IY1 - N AH0 S\nVENSEL  V EH1 N - S AH0 L\nVENSON  V EH1 N - S AH0 N\nVENT  V EH1 N T\nVENTECH  V EH1 N - T EH2 K\nVENTED  V EH1 N - T IH0 D\nVENTER  V EH1 N - T ER0\nVENTERS  V EH1 N - T ER0 Z\nVENTI  V EH1 N - T IY0\nVENTILATE  V EH1 N - T AH0 - L EY2 T\nVENTILATE(2)  V EH1 - N AH0 - L EY2 T\nVENTILATED  V EH1 N - T AH0 - L EY2 - T IH0 D\nVENTILATED(2)  V EH1 - N AH0 - L EY2 - T IH0 D\nVENTILATING  V EH1 N - T AH0 - L EY2 - T IH0 NG\nVENTILATING(2)  V EH1 - N AH0 - L EY2 - T IH0 NG\nVENTILATION  V EH2 N - T AH0 - L EY1 - SH AH0 N\nVENTILATION(2)  V EH2 - N AH0 - L EY1 - SH AH0 N\nVENTILATOR  V EH1 N - T AH0 - L EY2 - T ER0\nVENTILATOR(2)  V EH1 - N AH0 - L EY2 - T ER0\nVENTIMIGLIA  V EH2 N - T IH0 - M IH1 G - L IY0 - AH0\nVENTING  V EH1 N - T IH0 NG\nVENTNER  V EH1 N T - N ER0\nVENTO  V EH1 N - T OW0\nVENTOLA  V EH0 N - T OW1 - L AH0\nVENTRAL  V EH1 N - T R AH0 L\nVENTRE  V EH1 N - T ER0\nVENTRELLA  V EH2 N - T R EH1 - L AH0\nVENTRES  V EH1 N - T ER0 Z\nVENTRESCA  V EH0 N - T R EH1 - S K AH0\nVENTRESS  V EH1 N - T R IH0 S\nVENTRICULAR  V EH0 N - T R IH1 - K Y UW0 - L ER0\nVENTRITEX  V EH1 N - T R IH0 - T EH2 K S\nVENTS  V EH1 N T S\nVENTURA  V EH0 N - CH ER1 - AH0\nVENTURA(2)  V EH0 N - T UH1 - R AH0\nVENTURE  V EH1 N - CH ER0\nVENTURE'S  V EH1 N - CH ER0 Z\nVENTURED  V EH1 N - CH ER0 D\nVENTURELLA  V EH0 N - T UH0 - R EH1 - L AH0\nVENTURES  V EH1 N - CH ER0 Z\nVENTURES'  V EH1 N - CH ER0 Z\nVENTURESOME  V EH1 N - CH ER0 - S AH0 M\nVENTURI  V EH0 N - T UH1 - R IY0\nVENTURIAN  V EH0 N - T UH1 - R IY0 - AH0 N\nVENTURING  V EH1 N - CH ER0 - IH0 NG\nVENTURINI  V EH0 N - T UH0 - R IY1 - N IY0\nVENTURINO  V EH0 N - T UH0 - R IY1 - N OW0\nVENUE  V EH1 - N Y UW0\nVENUES  V EH1 - N UW0 Z\nVENUS  V IY1 - N AH0 S\nVENUTI  V EH0 - N UW1 - T IY0\nVENUTO  V EH0 - N UW1 - T OW0\nVENZKE  V EH1 N Z K\nVERA  V EH1 - R AH0\nVERACITY  V ER0 - AE1 - S IH0 - T IY0\nVERANDA  V ER0 - AE1 N - D AH0\nVERANDAS  V ER0 - AE1 N - D AH0 Z\nVERAS  V EH1 - R AH0 Z\nVERB  V ER1 B\nVERBA  V EH1 R - B AH0\nVERBAL  V ER1 - B AH0 L\nVERBALIZE  V ER1 - B AH0 - L AY2 Z\nVERBALIZING  V ER1 - B AH0 - L AY2 - Z IH0 NG\nVERBALLY  V ER0 - B AE1 - L IY0\nVERBATIM  V ER0 - B EY1 - T AH0 M\nVERBECK  V ER1 - B EH0 K\nVERBEEK  V ER1 - B IY0 K\nVERBEKE  V ER1 - B IH0 K\nVERBENA  V ER0 - B IY1 - N AH0\nVERBIAGE  V ER1 - B IY0 - IH0 JH\nVERBLE  V ER1 - B AH0 L\nVERBOON  V ER0 - B UW1 N\nVERBOONS  V ER0 - B UW1 N Z\nVERBOTEN  V ER0 - B OW1 - T AH0 N\nVERBRUGGE  V ER1 - B R AH0 G\nVERBS  V ER1 B Z\nVERBURG  V ER1 - B ER0 G\nVERCAMMEN  V ER2 - K AE1 - M AH0 N\nVERCHER  V ER1 - K ER0\nVERDA  V EH1 R - D AH0\nVERDANT  V ER1 - D AH0 N T\nVERDE  V ER1 - D IY0\nVERDERAME  V ER1 - D ER0 - AH0 M\nVERDERBER  V ER1 - D ER0 - B ER0\nVERDEROSA  V ER0 - D ER0 - OW1 - S AH0\nVERDES  V ER1 - D IY0\nVERDI  V EH1 R - D IY0\nVERDI'S  V ER1 - D IY0 Z\nVERDICT  V ER1 - D IH0 K T\nVERDICTS  V ER1 - D IH0 K T S\nVERDIER  V ER1 - D IY0 - ER0\nVERDIN  V ER1 - D IH0 N\nVERDON  V EH0 R - D AO1 N\nVERDON(2)  V ER1 - D AH0 N\nVERDONE  V EH0 R - D OW1 - N EY0\nVERDUGO  V ER0 - D UW1 - G OW0\nVERDUIN  V EH0 R - D UW0 - IH1 N\nVERDUN  V ER1 - D AH0 N\nVERDUZCO  V ER0 - D UW1 Z - K OW0\nVERE  V IH1 R\nVEREB  V EH1 - R IH0 B\nVEREEN  V IH1 - R IY0 N\nVEREINSBANK  V ER0 - AY1 N Z - B AE2 NG K\nVERENA  V ER0 - EY1 - N AH0\nVERENE  V EH1 - R IY0 N\nVERES  V IY1 R Z\nVEREX  V EH1 - R AH0 K S\nVERGA  V EH1 R - G AH0\nVERGARA  V ER0 - G AA1 - R AH0\nVERGE  V ER1 JH\nVERGES  V ER1 - JH IH0 Z\nVERGES'S  V ER1 - JH IH0 - Z IH0 Z\nVERGES'S(2)  V ER1 - JH IY0 - Z IH0 Z\nVERGES(2)  V ER1 - JH IY0 Z\nVERGESH  V ER2 - G EH1 SH\nVERGESH'S  V ER2 - G EH1 - SH IH0 S\nVERGIL  V ER1 - JH AH0 L\nVERGING  V ER1 - JH IH0 NG\nVERGRESH  V ER2 - G R EH1 SH\nVERGRESH'S  V ER2 - G R EH1 - SH IH0 S\nVERHAGE  V ER1 - HH IH0 JH\nVERHAGEN  V ER1 - HH AH0 - G AH0 N\nVERHEY  V ER1 - HH IY0\nVERHOEF  V ER1 - HH OW0 F\nVERHOEVEN  V ER1 - HH OW0 - V AH0 N\nVERHOFF  V ER1 - HH AO0 F\nVERHOFSTADT  V ER0 - HH AO1 F - S T AE2 T\nVERHULST  V ER1 - HH AH0 L S T\nVERIBANC  V EH1 - R IH0 - B AE2 NG K\nVERIFIABLE  V EH1 - R AH0 - F AY2 - AH0 - B AH0 L\nVERIFICATION  V EH2 - R AH0 - F AH0 - K EY1 - SH AH0 N\nVERIFIED  V EH1 - R AH0 - F AY2 D\nVERIFIES  V EH1 - R AH0 - F AY2 Z\nVERIFY  V EH1 - R AH0 - F AY2\nVERIFYING  V EH1 - R AH0 - F AY2 - IH0 NG\nVERINA  V ER0 - IY1 - N AH0\nVERINE  V ER0 - IY1 - N IY0\nVERISIMILITUDE  V EH2 - R AH0 - S AH0 - M IH1 - L AH0 - T UW2 D\nVERIT  V EH1 - R IH0 T\nVERITABLE  V EH1 - R IH0 - T AH0 - B AH0 L\nVERITIES  V EH1 - R AH0 - T IY0 Z\nVERITY  V EH1 - R AH0 - T IY0\nVERITY'S  V EH1 - R AH0 - T IY0 Z\nVERITY(2)  V EH1 - R IH0 - T IY0\nVERKUILEN  V ER1 - K AH0 - L AH0 N\nVERLA  V EH1 R - L AH0\nVERLAG  V ER1 - L AE0 G\nVERLEGER  V ER1 - L AH0 - G ER0\nVERLEY  V ER1 - L IY0\nVERMA  V EH1 R - M AH0\nVERMEER  V ER1 - M IH0 R\nVERMETTE  V ER0 - M EH1 T\nVERMEULEN  V ER0 - M OY1 - L AH0 N\nVERMILION  V ER0 - M IH1 - L Y AH0 N\nVERMILLION  V ER0 - M IH1 - L Y AH0 N\nVERMILYA  V ER0 - M IY1 - L Y AH0\nVERMILYEA  V ER0 - M IY1 - L Y AH0\nVERMIN  V ER1 - M IH0 N\nVERMONT  V ER0 - M AA1 N T\nVERMONT'S  V ER0 - M AA1 N T S\nVERMONTER  V ER0 - M AA1 N - T ER0\nVERMONTERS  V ER0 - M AA1 N - T ER0 Z\nVERMOUTH  V ER0 - M UW1 TH\nVERN  V ER1 N\nVERNA  V ER1 - N AH0\nVERNACULAR  V ER0 - N AE1 - K Y AH0 - L ER0\nVERNAL  V ER1 - N AH0 L\nVERNE  V ER1 N\nVERNER  V ER1 - N ER0\nVERNES  V ER1 N Z\nVERNETA  V ER0 - N EH1 - T AH0\nVERNEY  V ER1 - N IY0\nVERNICK  V ER1 - N IH0 K\nVERNIER  V ER1 - N IY0 - ER0\nVERNIS  V ER1 - N IH0 S\nVERNITA  V ER0 - N IY1 - T AH0\nVERNITRON  V ER1 - N IH0 - T R AA0 N\nVERNO  V EH1 R - N OW0\nVERNON  V ER1 - N AH0 N\nVERNON'S  V ER1 - N AH0 N Z\nVERNONIA  V ER0 - N OW1 - N IY0 - AH0\nVERNOR  V ER1 - N ER0\nVERO  V EH1 - R OW0\nVEROA  V ER0 - OW1 - AH0\nVERON  V EH1 - R AH0 N\nVERONA  V ER0 - OW1 - N AH0\nVERONDA  V EH0 - R AA1 N - D AH0\nVERONICA  V ER0 - AA1 - N IH0 - K AH0\nVERONIQUE  V EH2 - R AA0 - N IY1 K\nVERONIS  V EH0 - R OW1 - N IH0 S\nVERRALL  V EH1 - R AH0 L\nVERRASTRO  V EH2 - R AE1 - S T R OW0\nVERRELL  V EH0 - R EY1 L\nVERRET  V EH1 - R EY0 T\nVERRETT  V EH1 - R IH0 T\nVERRETTE  V ER0 - EH1 T\nVERRI  V EH1 - R IY0\nVERRIER  V EH1 - R IY0 - ER0\nVERRILL  V EH0 - R IY1 L\nVERRILLI  V ER0 - IY1 - L IY0\nVERRY  V EH1 - R IY0\nVERSA  V ER1 - S AH0\nVERSACE  V ER0 - S AA1 - CH EY0\nVERSACE(2)  V ER0 - S AA1 - CH IY0\nVERSAILLES  V EH0 R - S AY1\nVERSAILLES(2)  V EH0 R - S EY1 L Z\nVERSATILE  V ER1 - S AH0 - T AH0 L\nVERSATILE(2)  V ER0 - S AH0 - T AY1 L\nVERSATILITY  V ER2 - S AH0 - T IH1 - L AH0 - T IY0\nVERSE  V ER1 S\nVERSED  V ER1 S T\nVERSER  V ER1 - S ER0\nVERSES  V ER1 - S AH0 Z\nVERSES(2)  V ER1 - S IH0 Z\nVERSICHERUNG  V ER0 - S IH1 - CH ER0 - AH0 NG\nVERSICHERUNGS  V ER0 - S IH1 - CH ER0 - AH0 NG Z\nVERSION  V ER1 - ZH AH0 N\nVERSIONS  V ER1 - ZH AH0 N Z\nVERSLUIS  V ER1 - S L UW0 - IH0 Z\nVERSTEEG  V ER1 - S T IY0 G\nVERSTRAETE  V ER1 - S T R EH0 T\nVERSUS  V ER1 - S AH0 S\nVERSUS(2)  V ER1 - S AH0 Z\nVERT  V ER1 T\nVERTEBRA  V ER1 - T AH0 - B R AH0\nVERTEBRAE  V ER1 - T AH0 - B R EY2\nVERTEBRAL  V ER1 - T AH0 - B R AH0 L\nVERTEBRATE  V ER1 - T AH0 - B R EY2 T\nVERTEBRATES  V ER1 - T AH0 - B R EY2 T S\nVERTEL  V ER2 - T EH1 L\nVERTEL'S  V ER2 - T EH1 L Z\nVERTEX  V ER1 - T EH2 K S\nVERTICAL  V ER1 - T IH0 - K AH0 L\nVERTICALLY  V ER1 - T IH0 K - L IY0\nVERTICOM  V ER1 - T IH0 - K AA0 M\nVERTIGO  V ER1 - T IH0 - G OW2\nVERTOL  V ER1 - T AA0 L\nVERTREES  V ER0 - T R IY1 Z\nVERTUCCI  V ER0 - T UW1 - CH IY0\nVERTZ  V ER1 T S\nVERVE  V ER1 V\nVERVILLE  V ER1 - V IH0 L\nVERWEY  V ER1 - W IY0\nVERWOERD  V ER0 - W AO1 R D\nVERY  V EH1 - R IY0\nVESCINOID  V EH1 - S IH0 - N OY2 D\nVESCIO  V EH1 - S IY0 - OW0\nVESCO  V EH1 - S K OW0\nVESEL  V EH1 - S AH0 L\nVESELKA  V EY0 - S EY1 L - K AH0\nVESELY  V IY1 Z - L IY0\nVESEY  V EH1 - S IY0\nVESMEN  V EH1 S - M AH0 N\nVESPA  V EY1 - S P AH0\nVESPER  V EH1 - S P ER0\nVESPERA  V EY0 - S P EH1 - R AH0\nVESS  V EH1 S\nVESSEL  V EH1 - S AH0 L\nVESSEL'S  V EH1 - S AH0 L Z\nVESSELL  V EH1 - S AH0 L\nVESSELS  V EH1 - S AH0 L Z\nVESSELS'S  V EH1 - S AH0 L - Z IH0 Z\nVESSER  V EH1 - S ER0\nVESSEY  V EH1 - S IY0\nVEST  V EH1 S T\nVESTA  V EH1 - S T AH0\nVESTAL  V EH1 - S T AH0 L\nVESTAR  V EH1 - S T ER0\nVESTED  V EH1 - S T AH0 D\nVESTED(2)  V EH1 - S T IH0 D\nVESTER  V EH1 - S T ER0\nVESTIBULE  V EH1 - S T IH0 - B Y UW2 L\nVESTIGE  V EH1 - S T IH0 JH\nVESTIGES  V EH1 - S T IH0 - JH IH0 Z\nVESTIGIAL  V AH0 - S T IH1 - JH IY0 - AH0 L\nVESTING  V EH1 - S T IH0 NG\nVESTRON  V EH1 - S T R AH0 N\nVESTRON'S  V EH1 - S T R AH0 N Z\nVESTS  V EH1 S T S\nVESUVIUS  V AH0 - S UW1 - V IY0 - AH0 S\nVET  V EH1 T\nVETA  V EH1 - T AH0\nVETCO  V EH1 T - K OW0\nVETERAN  V EH1 - T ER0 - AH0 N\nVETERAN'S  V EH1 - T ER0 - AH0 N Z\nVETERAN(2)  V EH1 - T R AH0 N\nVETERANS  V EH1 - T ER0 - AH0 N Z\nVETERANS'  V EH1 - T ER0 - AH0 N Z\nVETERANS'(2)  V EH1 - T R AH0 N Z\nVETERANS(2)  V EH1 - T R AH0 N Z\nVETERE  V EH1 - T ER0\nVETERINARIAN  V EH2 - T R AH0 - N EH1 - R IY0 - AH0 N\nVETERINARIAN(2)  V EH2 - T ER0 - AH0 - N EH1 - R IY0 - AH0 N\nVETERINARIANS  V EH2 - T R AH0 - N EH1 - R IY0 - AH0 N Z\nVETERINARIANS(2)  V EH2 - T ER0 - AH0 - N EH1 - R IY0 - AH0 N Z\nVETERINARY  V EH1 - T R AH0 - N EH2 - R IY0\nVETETO  V EH0 - T EH1 - T OW0\nVETO  V IY1 - T OW0\nVETO(2)  V IY1 - T OW2\nVETOED  V IY1 - T OW0 D\nVETOES  V IY1 - T OW0 Z\nVETOING  V IY1 - T OW0 - IH0 NG\nVETOS  V IY1 - T OW0 Z\nVETRANO  V EH0 - T R AA1 - N OW0\nVETS  V EH1 T S\nVETSCH  V EH1 CH\nVETTE  V EH1 T\nVETTED  V EH1 - T IH0 D\nVETTER  V EH1 - T ER0\nVETTING  V EH1 - T IH0 NG\nVEUVE  V Y UW1 V\nVEVAY  V EH1 - V EY0\nVEVERKA  V EY0 - V EH1 R - K AH0\nVEVEY  V EH1 - V IY0\nVEVILA  V EY0 - V IY1 - L AH0\nVEX  V EH1 K S\nVEXATIOUS  V EH0 K - S EY1 - SH AH0 S\nVEXED  V EH1 K S T\nVEXING  V EH1 K - S IH0 NG\nVEY  V EY1\nVEYNE  V EY1 N\nVEZINA  V EH0 - Z IY1 - N AH0\nVI  V AY1\nVI(2)  V IY1\nVI(3)  V IY1 - AY1\nVIA  V AY1 - AH0\nVIA(2)  V IY1 - AH0\nVIABILITY  V AY0 - AH0 - B IH1 - L AH0 - T IY0\nVIABLE  V AY1 - AH0 - B AH0 L\nVIACOM  V AY1 - AH0 - K AA0 M\nVIACOM'S  V AY1 - AH0 - K AA0 M Z\nVIADUCT  V AY1 - AH0 - D AH0 K T\nVIADUCTS  V AY1 - AH0 - D AH0 K T S\nVIAG  V AY1 - AE0 G\nVIAG'S  V AY1 - AE0 G Z\nVIAGENE  V AY1 - AH0 - JH IY2 N\nVIAL  V AY1 - AH0 L\nVIALL  V AY1 - AH0 L\nVIALPANDO  V IY0 - AA0 L - P AA1 N - D OW0\nVIALS  V AY1 - AH0 L Z\nVIAN  V IY1 - AH0 N\nVIANA  V IY0 - AE1 - N AH0\nVIANI  V IY0 - AA1 - N IY0\nVIANO  V IY0 - AA1 - N OW0\nVIAR  V AY1 - ER0\nVIARS  V AY1 - ER0 Z\nVIATICAL  V AY2 - AE1 - T IH0 - K AH0 L\nVIATOR  V AY0 - EY1 - T ER0\nVIAU  V IY0 - OW1\nVIBBERT  V IH1 - B ER0 T\nVIBE  V AY1 B\nVIBES  V AY1 B Z\nVIBHU  V IY1 - B UW0\nVIBRANCY  V AY1 - B R AH0 N - S IY0\nVIBRANT  V AY1 - B R AH0 N T\nVIBRATE  V AY1 - B R EY0 T\nVIBRATES  V AY1 - B R EY0 T S\nVIBRATING  V AY1 - B R EY0 - T IH0 NG\nVIBRATION  V AY0 - B R EY1 - SH AH0 N\nVIBRATIONS  V AY0 - B R EY1 - SH AH0 N Z\nVIBRATO  V IY0 - B R AA1 - T OW0\nVIBRATOR  V AY1 - B R EY0 - T ER0\nVIC  V IH1 K\nVIC'S  V IH1 K S\nVICAR  V IH1 - K ER0\nVICARI  V IY0 - K AA1 - R IY0\nVICARIO  V IY0 - K AA1 - R IY0 - OW0\nVICARIOUS  V AY0 - K EH1 - R IY0 - AH0 S\nVICARIOUSLY  V AY0 - K EH1 - R IY0 - AH0 S - L IY0\nVICARS  V IH1 - K ER0 Z\nVICARY  V IH1 - K ER0 - IY0\nVICE  V AY1 S\nVICE-PRESIDENT  V AY1 S - P R EH1 - Z AH0 - D AH0 N T\nVICE-PRESIDENTIAL  V AY1 S - P R EH2 - Z AH0 - D EH1 N - CH AH0 L\nVICE-PRESIDENTIAL(2)  V AY1 S - P R EH2 - Z AH0 - D EH1 N - SH AH0 L\nVICE-PRESIDENTS  V AY1 S - P R EH1 - Z AH0 - D AH0 N T S\nVICENCIO  V IH0 - S EH1 N - S IY0 - OW0\nVICENTE  V IY0 - CH EH1 N - T IY0\nVICENZI  V IH0 - S EH1 N - Z IY0\nVICEROY  V AY1 S - R OY0\nVICES  V AY1 - S AH0 Z\nVICES(2)  V AY1 - S IH0 Z\nVICHY  V IY1 - SH IY0\nVICINITY  V AH0 - S IH1 - N AH0 - T IY0\nVICINITY(2)  V IH0 - S IH1 - N IH0 - T IY0\nVICINO  V IY0 - CH IY1 - N OW0\nVICIOUS  V IH1 - SH AH0 S\nVICIOUSLY  V IH1 - SH AH0 S - L IY0\nVICIOUSNESS  V IH1 - SH AH0 S - N IH0 S\nVICISSITUDE  V IH2 - S IH1 - S IH0 - T UW0 D\nVICISSITUDES  V IH0 - S IH1 - S IH0 - T UW0 D Z\nVICK  V IH1 K\nVICKER  V IH1 - K ER0\nVICKERMAN  V IH1 - K ER0 - M AH0 N\nVICKERS  V IH1 - K ER0 Z\nVICKERY  V IH0 S - K ER1 - IY0\nVICKERY(2)  V IH0 - K ER1 - IY0\nVICKEY  V IH1 - K IY0\nVICKI  V IH1 - K IY0\nVICKIE  V IH1 - K IY0\nVICKNAIR  V IH1 K - N ER0\nVICKREY  V IH1 - K R IY0\nVICKROY  V IH1 - K R OY2\nVICKS  V IH1 K S\nVICKSBURG  V IH1 K S - B ER0 G\nVICKY  V IH1 - K IY0\nVICKY'S  V IH1 - K IY0 Z\nVICOMTE  V IH0 - K AA1 M - T IY0\nVICOMTE(2)  V IH0 - K AA1 M T\nVICON  V IH1 - K AH0 N\nVICON'S  V IH1 - K AH0 N Z\nVICORP  V AY1 - K AO0 R P\nVICTIM  V IH1 K - T AH0 M\nVICTIM'S  V IH1 K - T AH0 M Z\nVICTIM'S(2)  V IH1 K - T IH0 M Z\nVICTIM(2)  V IH1 K - T IH0 M\nVICTIMHOOD  V IH1 K - T AH0 M - HH UH2 D\nVICTIMIZATION  V IH2 K - T AH0 - M AH0 - Z EY1 - SH AH0 N\nVICTIMIZE  V IH1 K - T AH0 - M AY0 Z\nVICTIMIZED  V IH1 K - T AH0 - M AY0 Z D\nVICTIMIZING  V IH1 K - T AH0 - M AY0 - Z IH0 NG\nVICTIMLESS  V IH1 K - T AH0 M - L AH0 S\nVICTIMS  V IH1 K - T AH0 M Z\nVICTIMS'  V IH1 K - T IH0 M Z\nVICTIMS(2)  V IH1 K - T IH0 M Z\nVICTOIRE  V IH0 K T - W AA1 R\nVICTOR  V IH1 K - T ER0\nVICTOR'S  V IH1 K - T ER0 Z\nVICTORIA  V IH0 K - T AO1 - R IY0 - AH0\nVICTORIA'S  V IH0 K - T AO1 - R IY0 - AH0 Z\nVICTORIAN  V IH0 K - T AO1 - R IY0 - AH0 N\nVICTORIANS  V IH0 K - T AO1 - R IY0 - AH0 N Z\nVICTORIAS  V IH0 K - T AO1 - R IY0 - AH0 Z\nVICTORIES  V IH1 K - T ER0 - IY0 Z\nVICTORIES(2)  V IH1 K - T R IY0 Z\nVICTORINE  V IY0 K - T AO0 - R IY1 - N IY0\nVICTORINO  V IY0 K - T AO0 - R IY1 - N OW0\nVICTORIOUS  V IH0 K - T AO1 - R IY0 - AH0 S\nVICTORS  V IH1 K - T ER0 Z\nVICTORY  V IH1 K - T ER0 - IY0\nVICTORY(2)  V IH1 K - T R IY0\nVICUNA  V IH0 - K Y UW1 - N AH0\nVIDA  V AY1 - D AH0\nVIDAL  V AY0 - D AE1 L\nVIDALES  V IY0 - D AA1 - L EH0 S\nVIDALIA  V IH0 - D EY1 - L Y AH0\nVIDALIA(2)  V AY0 - D EY1 - L Y AH0\nVIDAURRI  V IH0 - D AO1 - R IY0\nVIDE  V AY1 D\nVIDEO  V IH1 - D IY0 - OW0\nVIDEO'S  V IH1 - D IY0 - OW0 Z\nVIDEOCASSETTE  V IH1 - D IY0 - OW0 - K AE0 - S EH2 T\nVIDEOCASSETTES  V IH1 - D IY0 - OW0 - K AE0 - S EH2 T S\nVIDEOCONFERENCE  V IY1 - D IY0 - OW0 - K AA2 N - F R AH0 N S\nVIDEOCONFERENCING  V IY2 - D IY0 - OW0 - K AA1 N - F R AH0 N - S IH0 NG\nVIDEODISK  V IH1 - D IY0 - OW0 - D IH2 S K\nVIDEODISKS  V IH1 - D IY0 - OW0 - D IH2 S K S\nVIDEOGAME  V IH1 - D IY0 - OW0 - G EY2 M\nVIDEOGRAPHER  V IH0 - D IY0 - AO1 - G R AH0 - F ER0\nVIDEOPHONE  V IH1 - D IY0 - OW0 - F OW2 N\nVIDEOS  V IH1 - D IY0 - OW0 Z\nVIDEOTAPE  V IH1 - D IY0 - OW0 - T EY1 P\nVIDEOTAPED  V IH1 - D IY0 - OW0 - T EY1 P T\nVIDEOTAPES  V IH1 - D IY0 - OW0 - T EY1 P S\nVIDEOTAPING  V IH1 - D IY0 - OW0 - T EY2 - P IH0 NG\nVIDEOTEX  V IH1 - D IY0 - OW0 - T EH2 K S\nVIDEOTEXT  V IH1 - D IY0 - OW0 - T EH2 K S T\nVIDEOTRON  V IH1 - D IY0 - OW0 - T R AA2 N\nVIDIGO  V IH1 - D IY0 - G OW2\nVIDMAR  V IH1 D - M ER0\nVIDONIA  V IY0 - D OW1 - N IY0 - AH0\nVIDOR  V IY1 - D AO0 R\nVIDOR(2)  V IH1 - D AO0 R\nVIDRINE  V IY0 - D R IY1 N\nVIE  V AY1\nVIEAU  V IY0 - OW1\nVIEBROCK  V IY1 - B R AH0 K\nVIED  V AY1 D\nVIEDMA  V IY1 D - M AH0\nVIEGAS  V IY1 - G AH0 Z\nVIEIRA  V IY0 - EH1 - R AH0\nVIEJO  V IY0 - EH1 - JH OW0\nVIEL  V IY1 L\nVIELE  V IY1 L\nVIELMA  V IY1 L - M AH0\nVIEN  V IY1 N\nVIENNA  V IY0 - EH1 - N AH0\nVIENNA'S  V IY0 - EH1 - N AH0 Z\nVIENNEAU  V AH0 - N OW1\nVIENNESE  V IY0 - EH1 - N IY2 S\nVIENOT  V IY1 - N AA0 T\nVIENS  V IY1 N Z\nVIERA  V IY1 - R AH0\nVIERECK  V IH1 - R IH0 K\nVIERLING  V IH1 R - L IH0 NG\nVIERRA  V IH1 - R AH0\nVIERS  V IH1 R Z\nVIERTEL  V IH1 R - T EH0 L\nVIERTEL'S  V IH1 R - T EH0 L Z\nVIERTELS  V IH1 R - T EH0 L Z\nVIES  V AY1 Z\nVIET  V IY0 - EH1 T\nVIETCONG  V IY0 - EH1 T - K AO1 NG\nVIETCONG(2)  V Y EH1 T - K AO1 NG\nVIETH  V AY1 - IH0 TH\nVIETNAM  V IY0 - EH2 T - N AA1 M\nVIETNAM'S  V IY0 - EH2 T - N AA1 M Z\nVIETNAMESE  V IY0 - EH0 T - N AA0 - M IY1 S\nVIETOR  V IY1 - T ER0\nVIETS  V IY1 T S\nVIETTI  V IY0 - EH1 - T IY0\nVIEW  V Y UW1\nVIEWED  V Y UW1 D\nVIEWER  V Y UW1 - ER0\nVIEWER'S  V Y UW1 - ER0 Z\nVIEWERS  V Y UW1 - ER0 Z\nVIEWERS'  V Y UW1 - ER0 Z\nVIEWERSHIP  V Y UW1 - ER0 - SH IH2 P\nVIEWFINDER  V Y UW1 - F AY2 N - D ER0\nVIEWING  V Y UW1 - IH0 NG\nVIEWPOINT  V Y UW1 - P OY2 N T\nVIEWPOINTS  V Y UW1 - P OY2 N T S\nVIEWS  V Y UW1 Z\nVIEYRA  V IY0 - EH1 - R AH0\nVIG  V IH1 G\nVIGDOR  V IH1 G - D ER0\nVIGEANT  V IH1 - JH AH0 N T\nVIGELAND  V AY1 G - L AH0 N D\nVIGELAND'S  V AY1 G - L AH0 N D Z\nVIGEN  V IH1 - G AH0 N\nVIGER  V AY1 - G ER0\nVIGER(2)  V IH1 - G ER0\nVIGGIANO  V IH0 - JH IY0 - AA1 - N OW0\nVIGIL  V IH1 - JH AH0 L\nVIGILANCE  V IH1 - JH AH0 - L AH0 N S\nVIGILANT  V IH1 - JH AH0 - L AH0 N T\nVIGILANTE  V IH2 - JH AH0 - L AE1 N - T IY0\nVIGILANTES  V IH2 - JH AH0 - L AE1 N - T IY0 Z\nVIGILANTISM  V IH2 - JH AH0 - L AE1 N - T IH0 - Z AH0 M\nVIGILIA  V IY0 - JH IY1 - L IY0 - AH0\nVIGILS  V IH1 - JH AH0 L Z\nVIGLIONE  V IH0 G - L IY0 - OW1 - N IY0\nVIGLIOTTI  V IH0 G - L IY0 - AO1 - T IY0\nVIGLUND  V IH1 G - L AH0 N D\nVIGLUND'S  V IH1 G - L AH0 N D Z\nVIGNA  V IH1 G - N AH0\nVIGNEAU  V IH0 G - N OW1\nVIGNEAULT  V IH0 G - N OW1\nVIGNETTE  V IH0 N - Y EH1 T\nVIGNETTE(2)  V IY0 - N Y EH1 T\nVIGNETTES  V IH0 N - Y EH1 T S\nVIGNOLA  V IY0 G - N OW1 - L AH0\nVIGO  V IY1 - G OW0\nVIGOR  V IH1 - G ER0\nVIGORITO  V IY0 - G AO0 - R IY1 - T OW0\nVIGOROUS  V IH1 - G ER0 - AH0 S\nVIGOROUSLY  V IH1 - G ER0 - AH0 S - L IY0\nVIGUE  V IY1 G\nVIGUERIE  V IH1 - G ER0 - IY0\nVIGUERIE(2)  V IY2 - G EH1 - R IY0\nVIGUS  V AY1 - G AH0 S\nVIK  V IH1 K\nVIKING  V AY1 - K IH0 NG\nVIKING'S  V AY1 - K IH0 NG Z\nVIKINGS  V AY1 - K IH0 NG Z\nVIKTOR  V IH1 K - T ER0\nVILA  V IY1 - L AH0\nVILARDO  V IY0 - L AA1 R - D OW0\nVILAS  V IY1 - L AA0 Z\nVILE  V AY1 L\nVILES  V AY1 L Z\nVILHAUER  V IH1 L - HH AW0 - ER0\nVILIFICATION  V IH2 - L AH0 - F AH0 - K EY1 - SH AH0 N\nVILIFIED  V IH1 - L AH0 - F AY0 D\nVILIFY  V IH1 - L IH0 - F AY2\nVILLA  V IH1 - L AH0\nVILLA'S  V IH1 - L AH0 Z\nVILLAFANA  V IY0 - L AA0 - F AE1 - N AH0\nVILLAFANE  V IY0 - L AA0 - F AA1 - N EY0\nVILLAFRANCA  V IH2 - L AH0 - F R AE1 NG - K AH0\nVILLAFUERTE  V IY0 - L AA0 F - W EH1 R - T EY0\nVILLAGE  V IH1 - L AH0 JH\nVILLAGE'S  V IH1 - L IH0 - JH IH0 Z\nVILLAGE(2)  V IH1 - L IH0 JH\nVILLAGER  V IH1 - L IH0 - JH ER0\nVILLAGERS  V IH1 - L IH0 - JH ER0 Z\nVILLAGES  V IH1 - L AH0 - JH AH0 Z\nVILLAGES(2)  V IH1 - L IH0 - JH IH0 Z\nVILLAGOMEZ  V IY0 - L AA0 - G OW1 - M EH0 Z\nVILLAGRAN  V IY0 - L AA0 - G R AA1 N\nVILLAGRANA  V IY0 - L AA0 - G R AE1 - N AH0\nVILLAIN  V IH1 - L AH0 N\nVILLAINOUS  V IH1 - L AH0 - N AH0 S\nVILLAINS  V IH1 - L AH0 N Z\nVILLALBA  V IY0 - L AA1 L - B AH0\nVILLALOBOS  V IY0 - L AA0 - L OW1 - B OW0 Z\nVILLALON  V IY0 - L AA0 - L AO1 N\nVILLALOVOS  V IY0 - L AA0 - L OW1 - V OW0 Z\nVILLALPANDO  V IY0 - L AA0 L - P AA1 N - D OW0\nVILLALVA  V IY0 - L AA1 L - V AH0\nVILLAMIL  V IY0 - L AA0 - M IY1 L\nVILLANI  V IY0 - L AA1 - N IY0\nVILLANO  V IY0 - L AA1 - N OW0\nVILLANOVA  V IH2 - L AH0 - N OW1 - V AH0\nVILLANOVAN  V IH2 - L AH0 - N OW1 - V AH0 N\nVILLANUEVA  V IY0 - L AA0 N - W EH1 - V AH0\nVILLAR  V IH1 - L ER0\nVILLARD  V IH1 - L ER0 D\nVILLAREAL  V IH0 - L ER0 - IY0 - AA1 L\nVILLARI  V IY0 - L AA1 - R IY0\nVILLARREAL  V IY0 - L AA0 - R IY1 L\nVILLARS  V IH1 - L ER0 Z\nVILLAS  V IH1 - L AH0 Z\nVILLASANA  V IY0 - L AA0 - S AE1 - N AH0\nVILLASENOR  V IY0 - L AA0 - S EY0 - AH0 - N AO1 R\nVILLAVERDE  V IY0 - L AA0 - V EH1 R - D IY0\nVILLAVICENCIO  V IH2 - L AH0 - V IH0 - S EH1 N - S IY0 - OW0\nVILLE  V IH1 L\nVILLEGAS  V IH1 - L IH0 - G AH0 Z\nVILLELA  V IH1 - L IH0 - L AH0\nVILLELLA  V IY0 - L EH1 - L AH0\nVILLENEUVE  V IH1 - L IH0 - N UW0 V\nVILLENEUVE(2)  V IH1 L - N UW0 V\nVILLERS  V IH1 - L ER0 Z\nVILLETTE  V IH0 - L EH1 T\nVILLI  V IH1 - L IY0\nVILLIERS  V IH1 - L Y ER0 Z\nVILLINES  V IH1 - L AY2 N Z\nVILLWOCK  V IH1 L - W AH0 K\nVILMA  V IH1 L - M AH0\nVILNIUS  V IH1 L - N IY0 - AH0 S\nVILORIA  V IY0 - L AO1 - R IY0 - AH0\nVIM  V IH1 M\nVIN  V IH1 N\nVINA  V IY1 - N AH0\nVINAL  V AY1 - N AH0 L\nVINCA  V IH1 NG - K AH0\nVINCE  V IH1 N S\nVINCE'S  V IH1 N - S IH0 S\nVINCELETTE  V IH1 N - S IH0 - L EH0 T\nVINCENNES  V IH2 N - S EH1 - N AH0 S\nVINCENT  V IH1 N - S AH0 N T\nVINCENT'S  V IH1 N - S IH0 N T S\nVINCENT(2)  V IH1 N - S IH0 N T\nVINCENTE  V IH0 N - CH EH1 N - T IY0\nVINCENTI  V IY0 N - CH EH1 N - T IY0\nVINCENTIA  V IY0 N - CH EH1 N - SH AH0\nVINCENZO  V IH0 N - S EH1 N - Z OW0\nVINCI  V IH1 N - S IY0\nVINCI'S  V IH1 N - S IY0 Z\nVINCI'S(2)  V IH1 N - CH IY0 Z\nVINCI(2)  V IH1 N - CH IY0\nVINCIGUERRA  V IY0 N - CH IY0 - G EH1 - R AH0\nVINDICATE  V IH1 N - D AH0 - K EY0 T\nVINDICATED  V IH1 N - D AH0 - K EY0 - T IH0 D\nVINDICATES  V IH1 N - D IH0 - K EY2 T S\nVINDICATION  V IH0 N - D AH0 - K EY1 - SH AH0 N\nVINDICATOR  V IH0 N - D AH0 - K EY1 - T ER0\nVINDICTIVE  V IH0 N - D IH1 K - T IH0 V\nVINDICTIVENESS  V IH0 N - D IH1 K - T IH0 V - N AH0 S\nVINE  V AY1 N\nVINEGAR  V IH1 - N AH0 - G ER0\nVINEGARS  V IH1 - N IH0 - G ER0 Z\nVINELAND  V AY1 N - L AH0 N D\nVINER  V AY1 - N ER0\nVINES  V AY1 N Z\nVINET  V IH1 - N IH0 T\nVINEY  V AY1 - N IY0\nVINEYARD  V IH1 N - Y ER0 D\nVINEYARDS  V IH1 N - Y ER0 D Z\nVINGMED  V IH1 NG - M EH0 D\nVINGO  V IH1 NG - G OW0\nVINI  V IY1 - N IY0\nVINICIO  V IH0 - N IH1 - S IY0 - OW0\nVINICK  V IH1 - N IH0 K\nVINICK'S  V IH1 - N IH0 K S\nVINIK  V IH1 - N IH0 K\nVINING  V AY1 - N IH0 NG\nVINING'S  V AY1 - N IH0 NG Z\nVINITA  V IY0 - N IY1 - T AH0\nVINJE  V IH1 N JH\nVINK  V IH1 NG K\nVINNICK  V IH1 - N IH0 K\nVINNICK'S  V IH1 - N IH0 K S\nVINNIE  V IH1 - N IY0\nVINNY  V IH1 - N IY0\nVINOCUR  V IH1 - N AH0 - K ER0\nVINSANT  V IY1 N - S AH0 N T\nVINSO  V IH1 N - S OW0\nVINSON  V IH1 N - S AH0 N\nVINT  V IH1 N T\nVINTAGE  V IH1 N - T IH0 JH\nVINTAGES  V IH1 N - T IH0 - JH IH0 Z\nVINTNER  V IH1 N T - N ER0\nVINTNERS  V IH1 N T - N ER0 Z\nVINTON  V IH1 N - T AH0 N\nVINYARD  V IH1 N - Y ER0 D\nVINYL  V AY1 - N AH0 L\nVINZANT  V IH1 N - Z AH0 N T\nVIOLA  V AY0 - OW1 - L AH0\nVIOLA(2)  V IY0 - OW1 - L AH0\nVIOLANTE  V IY0 - OW0 - L AA1 N - T IY0\nVIOLAS  V IY0 - OW1 - L AH0 Z\nVIOLATE  V AY1 - AH0 - L EY0 T\nVIOLATED  V AY1 - AH0 - L EY0 - T IH0 D\nVIOLATES  V AY1 - AH0 - L EY0 T S\nVIOLATING  V AY1 - AH0 - L EY0 - T IH0 NG\nVIOLATION  V AY0 - AH0 - L EY1 - SH AH0 N\nVIOLATIONS  V AY0 - AH0 - L EY1 - SH AH0 N Z\nVIOLATOR  V AY1 - AH0 - L EY2 - T ER0\nVIOLATORS  V AY1 - AH0 - L EY0 - T ER0 Z\nVIOLE  V AY2 - OW1 L\nVIOLENCE  V AY1 - AH0 - L AH0 N S\nVIOLENT  V AY1 - AH0 - L AH0 N T\nVIOLENT(2)  V AY1 - L AH0 N T\nVIOLENTLY  V AY1 - AH0 - L AH0 N T - L IY0\nVIOLENTLY(2)  V AY1 - L AH0 N T - L IY0\nVIOLET  V AY1 - AH0 - L IH0 T\nVIOLET(2)  V AY1 - L IH0 T\nVIOLETA  V IY2 - OW0 - L EH1 - T AH0\nVIOLETA(2)  V AY2 - OW0 - L EH1 - T AH0\nVIOLETS  V AY1 - AH0 - L AH0 T S\nVIOLETS(2)  V AY1 - L AH0 T S\nVIOLETT  V AY1 - AH0 - L AH0 T\nVIOLETT(2)  V AY1 - L AH0 T\nVIOLETT(2)  V IY2 - OW0 - L EH1 T\nVIOLETTA  V IY0 - OW0 - L EH1 - T AH0\nVIOLETTE  V IY2 - OW0 - L EH1 T\nVIOLIN  V AY0 - AH0 - L IH1 N\nVIOLINIST  V AY0 - AH0 - L IH1 - N AH0 S T\nVIOLINISTS  V AY0 - AH0 - L IH1 - N AH0 S T S\nVIOLINISTS(2)  V AY0 - AH0 - L IH1 - N AH0 S S\nVIOLINISTS(3)  V AY0 - AH0 - L IH1 - N AH0 S\nVIOLINS  V AY0 - AH0 - L IH1 N Z\nVIOLIST  V IY2 - OW1 - L AH0 S T\nVIPER  V AY1 - P ER0\nVIPERS  V AY1 - P ER0 Z\nVIPIN  V IH1 - P IH0 N\nVIPOND  V IH1 - P AH0 N D\nVIPONT  V IH1 - P AA2 N T\nVIPONT'S  V IH1 - P AA2 N T S\nVIPPERMAN  V IH1 - P ER0 - M AH0 N\nVIPUL  V IY2 - P UW1 L\nVIRAG  V AO1 - R AH0 G\nVIRAGO  V IH1 - R AH0 - G OW0\nVIRAL  V AY1 - R AH0 L\nVIRAMONTES  V IH0 - R AA0 - M OW1 N - T EH0 S\nVIRATEK  V IH1 - R AH0 - T EH2 K\nVIRAY  V AY1 - R EY0\nVIRAZOLE  V IH1 - R AH0 - Z OW2 L\nVIRAZOLE(2)  V AY1 - R AH0 - Z OW2 L\nVIRCO  V ER1 - K OW0\nVIRDEN  V ER1 - D AH0 N\nVIREN  V IH1 - R AH0 N\nVIRES  V AY1 R Z\nVIRGA  V ER1 - G AH0\nVIRGE  V ER1 JH\nVIRGEN  V ER1 - JH AH0 N\nVIRGIE  V ER1 - G IY0\nVIRGIL  V ER1 - JH AH0 L\nVIRGILIO  V ER0 - JH IH1 - L IY0 - OW0\nVIRGIN  V ER1 - JH IH0 N\nVIRGIN'S  V ER1 - JH AH0 N Z\nVIRGINAL  V ER1 - JH AH0 - N AH0 L\nVIRGINIA  V ER0 - JH IH1 - N Y AH0\nVIRGINIA'S  V ER0 - JH IH1 - N Y AH0 Z\nVIRGINIAN  V ER0 - JH IH1 - N Y AH0 N\nVIRGINIANS  V ER0 - JH IH1 - N Y AH0 N Z\nVIRGINITY  V ER0 - JH IH1 - N IH0 - T IY0\nVIRGINS  V ER1 - JH AH0 N Z\nVIRGO  V ER1 - G OW0\nVIRGY  V ER1 - JH IY0\nVIRIDIS  V AO1 - R IH0 - D IH0 S\nVIRIDIS(2)  V IH1 - R IH0 - D IH0 S\nVIRILE  V IH1 - R AH0 L\nVIRILITY  V ER0 - IH1 - L AH0 - T IY0\nVIRINA  V IH0 - R IY1 - N AH0\nVIRKLER  V ER1 - K AH0 - L ER0\nVIRKLER(2)  V ER1 - K L ER0\nVIRNA  V ER1 - N AH0\nVIRNIG  V ER1 - N IH0 G\nVIROLOGICAL  V AY0 - R AH0 - L AA1 - JH IH0 - K AH0 L\nVIROLOGIST  V IH0 - R AA1 - L AH0 - JH IH0 S T\nVIROLOGISTS  V IH0 - R AA1 - L AH0 - JH IH0 S T S\nVIROLOGISTS(2)  V IH0 - R AA1 - L AH0 - JH IH0 S S\nVIROLOGISTS(3)  V IH0 - R AA1 - L AH0 - JH IH0 S\nVIROLOGY  V IH0 - R AA1 - L AH0 - JH IY0\nVIROMUNE  V AY2 - R OW0 - M Y UW1 N\nVIRTS  V ER1 T S\nVIRTUAL  V ER1 - CH UW0 - AH0 L\nVIRTUALLY  V ER1 - CH UW0 - AH0 - L IY0\nVIRTUALLY(2)  V ER1 - CH UW0 - L IY0\nVIRTUE  V ER1 - CH UW0\nVIRTUES  V ER1 - CH UW0 Z\nVIRTUOSITY  V ER0 - CH UW0 - AA1 - S IH0 - T IY0\nVIRTUOSO  V ER0 - CH UW0 - OW1 - S OW0\nVIRTUOUS  V ER1 - CH UW0 - AH0 S\nVIRULENCE  V IH1 - R AH0 - L AH0 N S\nVIRULENT  V IH1 - R AH0 - L AH0 N T\nVIRULENTLY  V IH1 - R AH0 - L AH0 N T - L IY0\nVIRUS  V AY1 - R AH0 S\nVIRUS'S  V AY1 - R AH0 - S IH0 Z\nVIRUSES  V AY1 - R AH0 - S AH0 Z\nVIRUSES(2)  V AY1 - R AH0 - S IH0 Z\nVIRZI  V IH1 R - Z IY0\nVIS  V IH1 S\nVISA  V IY1 - Z AH0\nVISA'S  V IY1 - Z AH0 Z\nVISAGE  V IH1 - Z AH0 JH\nVISAS  V IY1 - Z AH0 Z\nVISCARDI  V IY0 S - K AA1 R - D IY0\nVISCERAL  V IH1 - S ER0 - AH0 L\nVISCERALLY  V IH1 - S ER0 - AH0 - L IY0\nVISCLOSKY  V IH0 S - K L AO1 S - K IY0\nVISCO  V IY1 - S K OW0\nVISCOMI  V IY0 - S K OW1 - M IY0\nVISCONTI  V IY0 - S K OW1 N - T IY0\nVISCOSITY  V IH0 S - K AA1 - S AH0 - T IY0\nVISCOUS  V IH1 S - K AH0 S\nVISCUSI  V IY0 - S K UW1 - S IY0\nVISCUSO  V IY0 - S K UW1 - S OW0\nVISE  V AY1 S\nVISEGRAD  V IH1 S - AH0 - G R AE2 D\nVISHAY  V IH1 - SH EY0\nVISIBILITY  V IH2 - Z AH0 - B IH1 - L IH0 - T IY0\nVISIBLE  V IH1 - Z AH0 - B AH0 L\nVISIBLY  V IH1 - Z AH0 - B L IY0\nVISICALC  V IH1 - Z IH0 - K AE2 L K\nVISIGOTH  V IH1 - Z AH0 - G AA0 TH\nVISIGOTHS  V IH1 - Z AH0 - G AA0 TH S\nVISION  V IH1 - ZH AH0 N\nVISION'S  V IH1 - ZH AH0 N Z\nVISIONARIES  V IH1 - ZH AH0 N - EH0 - R IY0 Z\nVISIONARY  V IH1 - ZH AH0 N - EH2 - R IY0\nVISIONS  V IH1 - ZH AH0 N Z\nVISIT  V IH1 - Z AH0 T\nVISIT(2)  V IH1 - Z IH0 T\nVISITATION  V IH2 - Z AH0 - T EY1 - SH AH0 N\nVISITATION(2)  V IH2 - Z IH0 - T EY1 - SH AH0 N\nVISITATIONS  V IH2 - Z AH0 - T EY1 - SH AH0 N Z\nVISITATIONS(2)  V IH2 - Z IH0 - T EY1 - SH AH0 N Z\nVISITED  V IH1 - Z AH0 - T AH0 D\nVISITED(2)  V IH1 - Z IH0 - T IH0 D\nVISITING  V IH1 - Z AH0 - T IH0 NG\nVISITING(2)  V IH1 - Z IH0 - T IH0 NG\nVISITOR  V IH1 - Z AH0 - T ER0\nVISITOR'S  V IH1 - Z AH0 - T ER0 Z\nVISITOR'S(2)  V IH1 - Z IH0 - T ER0 Z\nVISITOR(2)  V IH1 - Z IH0 - T ER0\nVISITORS  V IH1 - Z AH0 - T ER0 Z\nVISITORS'  V IH1 - S AH0 - T ER0 Z\nVISITORS'(2)  V IH1 - S IH0 - T ER0 Z\nVISITORS(2)  V IH1 - Z IH0 - T ER0 Z\nVISITS  V IH1 - Z AH0 T S\nVISITS(2)  V IH1 - Z IH0 T S\nVISNIC  V IH1 S - N IH0 CH\nVISOR  V AY1 - Z ER0\nVISORS  V AY1 - Z ER0 Z\nVISSCHER  V IH1 - SH ER0\nVISSER  V IH1 - S ER0\nVISTA  V IH1 - S T AH0\nVISTA'S  V IH1 - S T AH0 Z\nVISTAS  V IH1 - S T AH0 Z\nVISTON  V IH1 - S T AH0 N\nVISUAL  V IH1 - ZH AH0 - W AH0 L\nVISUALIZATION  V IH2 - ZH W AH0 - L AH0 - Z EY1 - SH AH0 N\nVISUALIZE  V IH1 - ZH W AH0 - L AY2 Z\nVISUALIZED  V IH1 - ZH W AH0 - L AY2 Z D\nVISUALIZING  V IH1 - ZH W AH0 - L AY2 - Z IH0 NG\nVISUALLY  V IH1 - ZH W AH0 - L IY0\nVISUALS  V IH1 - ZH W AH0 L Z\nVISX  V IH1 - S EH2 K S\nVITA  V AY1 - T AH0\nVITAE  V AY1 - T AH0\nVITAGLIANO  V IY0 - T AA0 - G L IY0 - AA1 - N OW0\nVITAL  V AY1 - T AH0 L\nVITALE  V IH0 - T AE1 - L IY0\nVITALE(2)  V AY2 - T AE1 L\nVITALI  V IY0 - T AA1 - L IY0\nVITALINK  V AY1 - T AH0 L - IH2 NG K\nVITALITY  V AY0 - T AE1 - L AH0 - T IY0\nVITALLY  V AY1 - T AH0 - L IY0\nVITALY  V AH0 - T AE1 - L IY0\nVITALY(2)  V IY0 - T AA1 - L IY0\nVITAMIN  V AY1 - T AH0 - M AH0 N\nVITAMINS  V AY1 - T AH0 - M AH0 N Z\nVITANZA  V IH0 - T AE1 N - Z AH0\nVITARINE  V IH1 - T ER0 - IY2 N\nVITARINE'S  V IH1 - T ER0 - IY2 N Z\nVITEK  V IH1 - T EH0 K\nVITELLI  V IH0 - T EH1 - L IY0\nVITELLO  V IH0 - T EH1 - L OW0\nVITEZ  V IH1 - T EH0 Z\nVITEZ(2)  V AY1 - T EH0 Z\nVITI  V IY1 - T IY0\nVITIA  V IY1 - SH AH0\nVITIELLO  V IY0 - T IY0 - EH1 - L OW0\nVITILIGO  V IY0 - T IH1 - L IH0 - G OW0\nVITNER  V IH1 T - N ER0\nVITO  V IY1 - T OW0\nVITOLO  V IY0 - T OW1 - L OW0\nVITRAMON  V IH1 - T R AH0 - M AA0 N\nVITRANO  V IY0 - T R AA1 - N OW0\nVITREOUS  V IH1 - T R IY0 - AH0 S\nVITRIC  V IH1 - T R IH0 K\nVITRIOL  V IH1 - T R IY0 - AH0 L\nVITRIOLIC  V IH2 - T R IY0 - AA1 - L IH0 K\nVITRO  V IH1 - T R OW0\nVITRO(2)  V IY1 - T R OW0\nVITRONICS  V AY2 - T R AA1 - N IH0 K S\nVITRUVIUS  V IH0 - T R UW1 - V IY0 - AH0 S\nVITRY  V IH1 - T R IY0\nVITT  V IH1 T\nVITTETOE  V IH1 - T IH0 - T OW0\nVITTITOW  V IH1 - T IH0 - T OW0\nVITTLE  V IH1 - T AH0 L\nVITTLES  V IH1 - T AH0 L Z\nVITTORIA  V IH0 - T AO1 - R IY0 - AH0\nVITTORIO  V IY0 - T AO1 - R IY0 - OW0\nVITUCCI  V IY0 - T UW1 - CH IY0\nVITULLI  V IY0 - T UW1 - L IY0\nVITULLO  V IY0 - T UW1 - L OW0\nVITUPERATIVE  V AY2 - T UW1 - P ER0 - AH0 - T IH0 V\nVITUPERATIVE(2)  V AH0 - T UW1 - P ER0 - AH0 - T IH0 V\nVIV  V IH1 V\nVIVA  V IY1 - V AH0\nVIVACIOUS  V AH0 - V EY1 - SH AH0 S\nVIVALDI  V IH0 - V AA1 L - D IY0\nVIVAS  V IY1 - V AH0 Z\nVIVE  V IY1 V\nVIVE(2)  V AY1 V\nVIVEIROS  V IY0 - V IH1 - R OW0 Z\nVIVENDI  V IH0 - V EH1 N - D IY0\nVIVERETTE  V IH1 - V ER0 - EH1 T\nVIVEROS  V IY0 - V EH1 - R OW0 Z\nVIVES  V AY1 V Z\nVIVIAN  V IH1 - V IY0 - AH0 N\nVIVIANA  V IH0 - V IY0 - AE1 - N AH0\nVIVIANI  V IY2 - V IY0 - AA1 - N IY0\nVIVIANO  V IY2 - V IY0 - AA1 - N OW0\nVIVID  V IH1 - V AH0 D\nVIVID(2)  V IH1 - V IH0 D\nVIVIDLY  V IH1 - V AH0 D - L IY0\nVIVIDNESS  V IH1 - V AH0 D - N AH0 S\nVIVIE  V IH1 - V IY0\nVIVIEN  V IH1 - V IY0 - AH0 N\nVIVIENNE  V IH1 - V IY0 - AH0 N\nVIVIER  V AY1 - V IY0 - ER0\nVIVIPAROUS  V AY0 - V IH1 - P ER0 - AH0 S\nVIVISEPULTURE  V IH1 - V IY0 - S EH1 - P AH0 L - CH ER0\nVIVO  V IY1 - V OW0\nVIVONA  V IY0 - V OW1 - N AH0\nVIVRA  V IY1 - V R AH0\nVIVYAN  V IY0 - V Y AA1 N\nVIXEN  V IH1 K - S IH0 N\nVIYELLA  V IH0 - Y EH1 - L AH0\nVIZCAINO  V IY0 Z - K AA0 - IY1 - N OW0\nVIZCARRA  V IY0 Z - K AA1 - R AH0\nVIZCAYA  V IH0 Z - K AY1 - AH0\nVIZZINI  V IY0 T - S IY1 - N IY0\nVLACH  V L AE1 CH\nVLACHOS  V L EY1 - K OW0 S\nVLAD  V L AE1 D\nVLAD'S  V L AE1 D Z\nVLADECK  V L AE1 - D EH0 K\nVLADIMIR  V L AE1 - D AH0 - M IH0 R\nVLADISLAV  V L AE1 - D AH0 S - L AA0 V\nVLADIVOSTOK  V L AE2 - D IH0 - V AO1 - S T AA0 K\nVLADIVOSTOK(2)  V L AE2 - D IH0 - V OW1 - S T AA0 K\nVLAHAKIS  V L AH2 - HH AO1 - K IH0 S\nVLAHOS  V L AA1 - HH OW0 S\nVLASAK  V L AA1 - S AH0 K\nVLASIC  V L AE1 - Z IH0 K\nVLCEK  V L EH1 - S IH0 K\nVLIET  V L IY1 T\nVLOK  V L AA1 K\nVNESHECONOMBANK  V AH0 - N EH2 - SH AH0 - K AA1 - N AH0 M - B AE2 NG K\nVO  V OW1\nVO(2)  V IY1 - OW1\nVOBIS  V OW1 - B AH0 S\nVOCABULARY  V OW0 - K AE1 - B Y AH0 - L EH2 - R IY0\nVOCAL  V OW1 - K AH0 L\nVOCALIST  V OW1 - K AH0 - L IH0 S T\nVOCALLY  V OW1 - K AH0 - L IY0\nVOCALS  V OW1 - K AH0 L Z\nVOCALTEC  V OW1 - K AH0 L - T EH2 K\nVOCATION  V OW0 - K EY1 - SH AH0 N\nVOCATIONAL  V OW0 - K EY1 - SH AH0 - N AH0 L\nVOCATIONS  V OW0 - K EY1 - SH AH0 N Z\nVOCIFEROUS  V OW0 - S IH1 - F ER0 - AH0 S\nVOCIFEROUSLY  V AH0 - S IH1 - F ER0 - AH0 S - L IY0\nVOCKE  V AA1 K\nVOCS  V AA1 K S\nVODAFONE  V OW1 - D AH0 - F OW2 N\nVODAVI  V OW0 - D AA1 - V IY0\nVODICKA  V AA1 - D IH0 - K AH0\nVODKA  V AA1 D - K AH0\nVODKAS  V AA1 D - K AH0 Z\nVOEGELE  V OW1 - G AH0 L\nVOEGELI  V OW1 - G IH0 - L IY0\nVOELKEL  V OW1 L - K AH0 L\nVOELKER  V OW1 L - K ER0\nVOELL  V OW1 L\nVOELLER  V OW1 - L ER0\nVOELTZ  V OW1 L T S\nVOELZ  V OW1 L Z\nVOEST  V OW1 S T\nVOGAN  V OW1 - G AH0 N\nVOGE  V OW1 JH\nVOGEL  V OW1 - G AH0 L\nVOGELER  V OW1 - G AH0 - L ER0\nVOGELGESANG  V AA1 - G IH0 L - G IH0 - S AH0 NG\nVOGELPOHL  V AA1 - G IH0 L - P OW0 L\nVOGELS  V OW1 - G AH0 L Z\nVOGELSANG  V AA1 - G IH0 L - S AH0 NG\nVOGELSONG  V AA1 - G IH0 L - S AO0 NG\nVOGELSTEIN  V OW1 - G AH0 L - S T IY2 N\nVOGELSTEIN(2)  V OW1 - G AH0 L - S T AY2 N\nVOGES  V OW1 - JH IH0 Z\nVOGHT  V AA1 T\nVOGL  V AA1 - G AH0 L\nVOGLER  V OW1 - G L ER0\nVOGOSCA  V OW0 - G OW1 - S K AH0\nVOGOSCA(2)  V AH0 - G OW1 - S K AH0\nVOGT  V OW1 T\nVOGTLE  V AA1 G - T AH0 L\nVOGUE  V OW1 G\nVOHS  V AA1 S\nVOICE  V OY1 S\nVOICE'S  V OY1 - S IH0 Z\nVOICED  V OY1 S T\nVOICELESS  V OY1 S - L AH0 S\nVOICEMAIL  V OY1 S - M EY2 L\nVOICEOVER  V OY1 S - OW2 - V ER0\nVOICES  V OY1 - S AH0 Z\nVOICES(2)  V OY1 - S IH0 Z\nVOICEWORK  V OY1 S - W ER2 K\nVOICEWORKS  V OY1 S - W ER2 K S\nVOICING  V OY1 - S IH0 NG\nVOID  V OY1 D\nVOIDED  V OY1 - D IH0 D\nVOIDING  V OY1 - D IH0 NG\nVOIDS  V OY1 D Z\nVOIGHT  V OY1 T\nVOIGT  V OY1 G T\nVOIGT(2)  V OY1 T\nVOIGTS  V OY1 G T S\nVOIGTS(2)  V OY1 T S\nVOILA  V W AA2 - L AA1\nVOILES  V OY1 L Z\nVOINOVICH  V OY1 - N AH0 - V IH0 CH\nVOIR  V W AA1 R\nVOISEY  V W AA2 - S EY1\nVOISEY(2)  V OY2 - S EY1\nVOISIN  V OY0 - Z AE1 N\nVOISINE  V OY0 - Z IY1 N\nVOIT  V OY1 T\nVOJTA  V OY1 - T AH2\nVOJTA(2)  V OY1 - T AH0\nVOKES  V OW1 K S\nVOLAND  V AA1 - L AH0 N D\nVOLANTE  V OW0 - L AA1 N - T EY0\nVOLATILE  V AA1 - L AH0 - T AH0 L\nVOLATILITY  V AA2 - L AH0 - T IH1 - L AH0 - T IY0\nVOLBERDING  V OW1 L - B ER0 - D IH0 NG\nVOLCANIC  V AA0 L - K AE1 - N IH0 K\nVOLCANICALLY  V AA0 L - K AE1 - N IH0 K - L IY0\nVOLCANO  V AA0 L - K EY1 - N OW0\nVOLCANO'S  V AA0 L - K EY1 - N OW0 Z\nVOLCANOES  V AA0 L - K EY1 - N OW0 Z\nVOLCANOS  V AA0 L - K EY1 - N OW0 Z\nVOLCKER  V OW1 L - K ER0\nVOLCKER'S  V OW1 L - K ER0 Z\nVOLD  V OW1 L D\nVOLDEN  V OW1 L - D AH0 N\nVOLENTINE  V OW0 - L EH0 N - T IY1 - N IY0\nVOLES  V OW1 L Z\nVOLETA  V OW0 - L EH1 - T AH0\nVOLGA  V AA1 L - G AH0\nVOLGOGRAD  V OW1 L - G OW0 - G R AE2 D\nVOLIN  V OW1 - L IH0 N\nVOLIO  V OW1 - L IY0 - OW0\nVOLITION  V OW0 - L IH1 - SH AH0 N\nVOLK  V OW1 L K\nVOLKER  V OW1 L - K ER0\nVOLKERS  V OW1 L - K ER0 Z\nVOLKERT  V OW1 L - K ER0 T\nVOLKMAN  V OW1 L K - M AH0 N\nVOLKMANN  V OW1 L K - M AH0 N\nVOLKMAR  V OW1 L K - M ER0\nVOLKMER  V OW1 L K - M ER0\nVOLKOGONOV  V OW0 L - K AO1 - G AH0 - N AO2 V\nVOLKSBANK  V OW1 L K S - B AE2 NG K\nVOLKSFUERSORGE  V OW0 L K S - F Y UW1 R - S AO0 R JH\nVOLKSWAGEN  V OW1 L K - S W AE2 - G AH0 N\nVOLKSWAGEN'S  V OW1 L K - S W AE2 - G AH0 N Z\nVOLKSWAGENS  V OW1 L K - S W AE2 - G AH0 N Z\nVOLL  V AA1 L\nVOLLAND  V AA1 - L AH0 N D\nVOLLBRECHT  V AA1 L - B R IH0 K T\nVOLLE  V AA1 L\nVOLLENWEIDER  V AA1 - L IH0 N - W AY0 - D ER0\nVOLLER  V AA1 - L ER0\nVOLLEY  V AA1 - L IY0\nVOLLEYBALL  V AA1 - L IY0 - B AO2 L\nVOLLEYS  V AA1 - L IY0 Z\nVOLLMAN  V AA1 L - M AH0 N\nVOLLMAR  V AA1 L - M ER0\nVOLLMER  V AA1 L - M ER0\nVOLLRATH  V AA1 - L R AH0 TH\nVOLMER  V OW1 L - M ER0\nVOLNER  V OW1 L - N ER0\nVOLNEY  V OW1 L - N IY0\nVOLOKH  V AA1 - L AA0 K\nVOLPE  V OW1 L P\nVOLPI  V OW1 L - P IY0\nVOLPICELLA  V OW2 L - P IH0 - S EH1 - L AH0\nVOLT  V OW1 L T\nVOLTA  V OW1 L - T AH0\nVOLTAGE  V OW1 L - T AH0 JH\nVOLTAGE'S  V OW1 L - T IH0 - JH IH0 Z\nVOLTAGE(2)  V OW1 L - T IH0 JH\nVOLTAGES  V OW1 L - T AH0 - JH AH0 Z\nVOLTAGES(2)  V OW1 L - T IH0 - JH IH0 Z\nVOLTAIRE  V OW0 L - T EH1 R\nVOLTAREN  V OW1 L - T ER0 - AH0 N\nVOLTS  V OW1 L T S\nVOLTZ  V OW1 L T S\nVOLUBLE  V AA1 - L Y AH0 - B AH0 L\nVOLUME  V AA1 - L Y UW0 M\nVOLUME'S  V AA1 - L Y AH0 M Z\nVOLUMES  V AA1 - L Y UW0 M Z\nVOLUMINOUS  V AH0 - L UW1 - M AH0 - N AH0 S\nVOLUNTARILY  V AA2 - L AH0 N - T EH1 - R AH0 - L IY0\nVOLUNTARISM  V OW0 - L AH1 N - T ER0 - IH2 - Z AH0 M\nVOLUNTARY  V AA1 - L AH0 N - T EH0 - R IY0\nVOLUNTEER  V AA2 - L AH0 N - T IH1 R\nVOLUNTEERED  V AA2 - L AH0 N - T IH1 R D\nVOLUNTEERING  V AO2 - L AH0 N - T IH1 - R IH0 NG\nVOLUNTEERISM  V AO2 - L AH0 N - T IH1 - R IH2 - Z AH0 M\nVOLUNTEERS  V AA2 - L AH0 N - T IH1 R Z\nVOLUPTUOUS  V AH0 - L AH1 P - CH AH0 W - AH0 S\nVOLVO  V OW1 L - V OW0\nVOLVO'S  V OW1 L - V OW0 Z\nVOLVOS  V AO1 L - V OW0 Z\nVOLVOVITZ  V OW1 L - V AH0 - V IH0 T S\nVOLVOX  V AA1 L - V AA0 K S\nVOLZ  V OW1 L Z\nVOMIT  V AA1 - M AH0 T\nVOMITING  V AA1 - M AH0 - T IH0 NG\nVON  V AO1 N\nVON-BRAUN  V AA1 N - B R AO1 N\nVONA  V OW1 - N AH0\nVONADA  V OW0 - N AA1 - D AH0\nVONALLMEN  V AA1 - N AH0 L - M EH0 N\nVONARX  V AH0 - N AA1 R K S\nVONBARGEN  V AA2 N - B AA1 R - G AH0 N\nVONBEHREN  V AA2 N - B IH1 - R AH0 N\nVONBERGEN  V AA2 N - B ER1 - G AH0 N\nVONCANNON  V AA2 N - K AE1 - N AH0 N\nVONDER  V AA1 N - D ER0\nVONDERHAAR  V AA1 N - D ER0 - HH AA2 R\nVONDERHEIDE  V AA1 N - D ER0 - HH AY2 D\nVONDRA  V AA1 N - D R AH0\nVONDRACEK  V AA1 N - D R AH0 - S IH0 K\nVONDRAK  V AA1 N - D R AH0 K\nVONDRASEK  V AH0 N - D R AA1 - S EH0 K\nVONFELDT  V AA1 N - F IH0 L T\nVONG  V AO1 NG\nVONGUNTEN  V AA1 NG - G AH0 N - T AH0 N\nVONK  V AA1 NG K\nVONNEGUT  V AA1 - N AH0 - G AH0 T\nVONNIE  V AA1 - N IY0\nVONNY  V AA1 - N IY0\nVONRUDEN  V AA1 N - R UW0 - D AH0 N\nVONS  V AA1 N Z\nVONS'S  V AA1 N - Z IH0 Z\nVONSEGGERN  V AA1 N - S IH0 - G ER0 N\nVONSTEIN  V AA1 N - S T AY0 N\nVONSTEIN(2)  V AA1 N - S T IY0 N\nVONTOBEL  V AA2 N - T OW1 - B AH0 L\nVOODOO  V UW1 - D UW2\nVOORHEES  V UH1 R - HH IY0 Z\nVOORHEIS  V UH1 R - HH AY0 Z\nVOORHIES  V UH1 R - HH IY0 Z\nVOORHIS  V UH1 R - HH IH0 S\nVORA  V AO1 - R AH0\nVORACIOUS  V AO0 - R EY1 - SH AH0 S\nVORACITY  V ER0 - AE1 - S AH0 - T IY0\nVORACITY(2)  V AO0 - R AE1 - S AH0 - T IY0\nVORCE  V AO1 R S\nVORE  V AO1 R\nVORHAUER  V AO1 R - HH AW2 R\nVORHEES  V AO1 R - HH IY0 Z\nVORHIES  V AO1 R - HH IY0 Z\nVORIS  V AO1 - R IH0 S\nVORNADO  V AO2 R - N AA1 - D OW0\nVORNADO(2)  V AO2 R - N EY1 - D OW0\nVORNDRAN  V AO1 R N - D R AH0 N\nVORONTSOV  V AO0 - R AA1 N T - S AA2 V\nVOROS  V AO1 - R OW0 Z\nVORPAHL  V AO1 R - P AA0 L\nVORTEC  V AO1 R - T EH2 K\nVORTEX  V AO1 R - T EH0 K S\nVORWALD  V AO1 R - W AO0 L D\nVORWERK  V AO1 R - W ER0 K\nVOS  V AA1 S\nVOSBERG  V AA1 S - B ER0 G\nVOSBURG  V AA1 S - B ER0 G\nVOSBURGH  V AA1 S - B ER0 G\nVOSE  V OW1 Z\nVOSHELL  V AA1 - SH AH0 L\nVOSLER  V AA1 - S AH0 - L ER0\nVOSLER(2)  V AA1 S - L ER0\nVOSS  V AO1 S\nVOSSEN  V AO1 - S AH0 N\nVOSSLER  V AA1 - S AH0 - L ER0\nVOSSLER(2)  V AA1 S - L ER0\nVOTAVA  V OW0 - T AA1 - V AH0\nVOTAW  V OW1 - T AO0\nVOTE  V OW1 T\nVOTE'S  V OW1 T S\nVOTED  V OW1 - T AH0 D\nVOTED(2)  V OW1 - T IH0 D\nVOTER  V OW1 - T ER0\nVOTER'S  V OW1 - T ER0 Z\nVOTERS  V OW1 - T ER0 Z\nVOTERS'  V OW1 - T ER0 Z\nVOTES  V OW1 T S\nVOTH  V AA1 TH\nVOTING  V OW1 - T IH0 NG\nVOTRAX  V AA1 - T R AE0 K S\nVOTRUBA  V AH0 - T R UW1 - B AH0\nVOUCH  V AW1 CH\nVOUCHED  V AW1 CH T\nVOUCHER  V AW1 - CH ER0\nVOUCHERS  V AW1 - CH ER0 Z\nVOUCHING  V AW1 - CH IH0 NG\nVOUGHT  V AO1 T\nVOUTE  V UW1 T\nVOW  V AW1\nVOWED  V AW1 D\nVOWEL  V AW1 - AH0 L\nVOWELL  V AA1 - W EH0 L\nVOWELS  V AW1 - AH0 L Z\nVOWELS(2)  V AW1 L Z\nVOWING  V AW1 - IH0 NG\nVOWLES  V AW1 - AH0 L Z\nVOWS  V AW1 Z\nVOX  V AA1 K S\nVOYAGE  V OY1 - AH0 JH\nVOYAGE(2)  V OY1 - IH0 JH\nVOYAGED  V OY1 - AH0 JH D\nVOYAGED(2)  V OY1 - IH0 JH D\nVOYAGER  V OY1 - AH0 - JH ER0\nVOYAGER'S  V OY1 - IH0 - JH ER0 Z\nVOYAGER(2)  V OY1 - IH0 - JH ER0\nVOYAGERS  V OY1 - IH0 - JH ER0 Z\nVOYAGES  V OY1 - AH0 - JH AH0 Z\nVOYAGES(2)  V OY1 - IH0 - JH IH0 Z\nVOYER  V OY1 - ER0\nVOYEUR  V OY2 - Y UW1 R\nVOYEURISM  V OY2 - Y UW1 - R IH0 - Z AH0 M\nVOYEURISTIC  V OY2 Y - AH0 - R IH1 - S T IH0 K\nVOYLES  V OY1 L Z\nVOYNAVICH  V OY1 - N AH0 - V IH0 CH\nVOYTEK  V OY1 - T IH0 K\nVOYTKO  V OY1 T - K OW0\nVRABEL  V R AE1 - B AH0 L\nVRADENBURG  V R EY1 - D AH0 N - B ER0 G\nVRAIN  V R EY1 N\nVRANA  V R AE1 - N AH0\nVRANESEVIC  V R AA2 - N AH0 - S EH1 - V IH0 CH\nVRANITZKY  V R AH0 - N IH1 T S - K IY2\nVRANOS  V R AA1 - N OW0 S\nVRBA  V ER1 - B AA1\nVRDOLYAK  V ER0 - D OW1 - L IY0 - AE0 K\nVREDENBURG  V R IY1 - D AH0 N - B ER0 G\nVREELAND  V R IY1 - L AH0 N D\nVREMYA  V R EH1 - M IY0 - AH0\nVRIES  V R IY1 Z\nVROMAN  V R OW1 - M AH0 N\nVROOM  V R UW1 M\nVROOMAN  V R UW1 - M AH0 N\nVS  V ER1 - S AH0 Z\nVS(2)  V IY1 - EH1 S\nVSEL  V IY1 - S EH2 L\nVU  V UW1\nVU(2)  V IY1 - Y UW1\nVUE  V Y UW1\nVUITTON  V UW1 - T AH0 N\nVUKELICH  V AH0 - K EH1 - L IH0 HH\nVUKOVAR  V UW1 - K AH0 - V AA2 R\nVUKOVICH  V Y UW1 - K AH0 - V IH0 CH\nVUKOVICH(2)  V UW1 - K AH0 - V IH0 CH\nVULCAN  V AH1 L - K AH0 N\nVULCAN'S  V AH1 L - K AH0 N Z\nVULCANS  V AH1 L - K AH0 N Z\nVULGAMORE  V AH1 L - G AH0 - M AO0 R\nVULGAR  V AH1 L - G ER0\nVULGARITY  V AH0 L - G EH1 - R IH0 - T IY0\nVULGARIZATION  V AH2 L - G ER0 - IH0 - Z EY1 - SH AH0 N\nVULLO  V UW1 - L OW0\nVULNERABILITIES  V AH2 L - N ER0 - AH0 - B IH1 - L IH0 - T IY0 Z\nVULNERABILITY  V AH2 L - N ER0 - AH0 - B IH1 - L IH0 - T IY0\nVULNERABLE  V AH1 L - N ER0 - AH0 - B AH0 L\nVULTAGGIO  V UW0 L - T AA1 - JH IY0 - OW0\nVULTURE  V AH1 L - CH ER0\nVULTURES  V AH1 L - CH ER0 Z\nVUNCANNON  V AH1 N - K AH0 - N AA0 N\nVUNCANNON(2)  V AH0 N - K AE1 - N AH0 N\nVUOLO  V UW0 - OW1 - L OW0\nVUONG  V UW0 - AO1 NG\nVY  V AY1\nVYACHESLAV  V Y AA1 - CH AH0 S - L AA0 V\nVYAS  V Y AA1 S\nVYAS(2)  V AY1 - AH0 S\nVYING  V AY1 - IH0 NG\nW  D AH1 - B AH0 L - Y UW0\nW'S  D AH1 - B AH0 L - Y UW0 Z\nW.  D AH1 - B AH0 L - Y UW0\nW.'S  D AH1 - B AH0 L - Y UW0 Z\nW.S  D AH1 - B AH0 L - Y UW0 Z\nWA  W AA1\nWAACK  W AA1 K\nWAAG  W AA1 G\nWAAGE  W AA1 - IH0 JH\nWAAH  W AA1\nWAAL  W AA1 L\nWAARA  W AA1 - R AH0\nWAAS  W AA1 Z\nWABASH  W AO1 - B AE0 SH\nWABASH'S  W AO1 - B AE0 - SH AH0 Z\nWACE  W EY1 S\nWACH  W AO1 CH\nWACHA  W AA1 - CH AH0\nWACHHOLZ  W AO1 K - HH OW0 L Z\nWACHNER  W AE1 K - N ER0\nWACHO  W AA1 - CH OW0\nWACHOB  W AO1 - K AH0 B\nWACHOVIA  W AA0 - CH OW1 - V IY0 - AH0\nWACHOWIAK  V AH0 - HH AW1 - IY0 - AE0 K\nWACHOWSKI  V AH0 - HH AO1 F S - K IY0\nWACHS  W AO1 K S\nWACHSMAN  W AO1 K S - M AH0 N\nWACHSMUTH  W AO1 K S - M UH0 TH\nWACHTEL  W AO1 - CH AH0 L\nWACHTELL  W AA0 K - T EH1 L\nWACHTER  W AO1 K - T ER0\nWACHTLER  W AE1 K T - L ER0\nWACK  W AE1 K\nWACKENHUT  W AA1 - K AH0 N - HH AH2 T\nWACKER  W AE1 - K ER0\nWACKERLE  W AE1 - K ER0 - AH0 L\nWACKERLE(2)  W AE1 - K ER0 - L IY0\nWACKO  W AE1 - K OW0\nWACKOS  W AE1 - K OW0 Z\nWACKS  W AE1 K S\nWACKSMAN  W AE1 K S - M AH0 N\nWACKSMAN'S  W AE1 K S - M AH0 N Z\nWACKY  W AE1 - K IY0\nWACO  W EY1 - K OW0\nWACTLAR  W AA1 K T - L ER0\nWAD  W AA1 D\nWADA  W AA1 - D AH0\nWADAS  W AA1 - D AH0 Z\nWADDED  W AA1 - D AH0 D\nWADDED(2)  W AA1 - D IH0 D\nWADDELL  W AA0 - D EH1 L\nWADDIE  W AA1 - D IY0\nWADDILL  W AO1 - D IH1 L\nWADDINGTON  W AA1 - D IH0 NG - T AH0 N\nWADDLE  W AA1 - D AH0 L\nWADDY  W AA1 - D IY0\nWADE  W EY1 D\nWADE'S  W EY1 D Z\nWADED  W EY1 - D IH0 D\nWADEL  W EY1 - D AH0 L\nWADER  W EY1 - D ER0\nWADERS  W EY1 - D ER0 Z\nWADES  W EY1 D Z\nWADFORD  W AO1 D - F ER0 D\nWADHAMS  W AO1 - D AH0 M Z\nWADING  W EY1 - D IH0 NG\nWADKINS  W AO1 D - K IH0 N Z\nWADLE  W AO1 - D AH0 L\nWADLEIGH  W AO1 D - L IY0\nWADLEY  W AA1 D - L IY0\nWADLINGTON  W AA1 D - L IH0 NG - T AH0 N\nWADLOW  W AA1 D - L OW2\nWADMAN  W AO1 D - M AH0 N\nWADS  W AA1 D Z\nWADSWORTH  W AA1 D Z - W ER0 TH\nWADSWORTH'S  W AA1 D Z - W ER0 TH S\nWAECHTER  W EH1 K - T ER0\nWAELTERMANN  W AA1 L - T ER0 - M AH0 N\nWAELTERMANN(2)  V AE1 L - T ER0 - M AH0 N\nWAERTSILAE  W EH1 R T - S AH0 - L EY2\nWAFER  W EY1 - F ER0\nWAFERS  W EY1 - F ER0 Z\nWAFFENSCHMIDT  W AA1 - F AH0 N SH - M IH2 T\nWAFFLE  W AA1 - F AH0 L\nWAFFLED  W AA1 - F AH0 L D\nWAFFLES  W AA1 - F AH0 L Z\nWAFFLING  W AA1 - F L IH0 NG\nWAFFORD  W AA1 - F ER0 D\nWAFT  W AA1 F T\nWAFTED  W AA1 F - T IH0 D\nWAFTING  W AA1 F - T IH0 NG\nWAG  W AE1 G\nWAG'S  W AE1 G Z\nWAGA  W AA1 - G AH0\nWAGA(2)  D AH1 - B AH0 L - Y UW2 - EY1 - JH IY1 - EY1\nWAGA(3)  D AH1 - B AH0 - Y UW2 - EY1 - JH IY1 - EY1\nWAGAMAN  W AE1 - G AH1 - M AH0 N\nWAGAR  W AE1 - G ER0\nWAGE  W EY1 JH\nWAGED  W EY1 JH D\nWAGEMAN  W EY1 JH - M AH0 N\nWAGENAAR  W AE1 - G AH0 - N AA0 R\nWAGENER  W AE1 - G AH0 - N ER0\nWAGENKNECHT  W AE1 - G AH0 - N IH0 K T\nWAGER  W EY1 - JH ER0\nWAGERED  W EY1 - JH ER0 D\nWAGERING  W EY1 - JH ER0 - IH0 NG\nWAGERS  W EY1 - JH ER0 Z\nWAGES  W EY1 - JH AH0 Z\nWAGES(2)  W EY1 - JH IH0 Z\nWAGG  W AE1 G\nWAGGED  W AE1 G D\nWAGGENER  W AE1 - G AH0 - N ER0\nWAGGING  W AE1 - G IH0 NG\nWAGGLING  W AE1 - G AH0 L - IH0 NG\nWAGGLING(2)  W AE1 - G L IH0 NG\nWAGGONER  W AE1 - G AH0 - N ER0\nWAGGY  W AE1 - G IY0\nWAGING  W EY1 - JH IH0 NG\nWAGLE  W AE1 - G AH0 L\nWAGLER  W AE1 G - L ER0\nWAGLEY  W AE1 G - L IY0\nWAGMAN  W AE1 G - M AH0 N\nWAGNER  W AE1 G - N ER0\nWAGNER'S  W AE1 G - N ER0 Z\nWAGNER'S(2)  V AE1 G - N ER0 Z\nWAGNER(2)  V AA1 G - N ER0\nWAGNERIAN  W AE2 G - N EH1 - R IY0 - AH0 N\nWAGNERIAN(2)  V AA2 G - N EH1 - R IY0 - AH0 N\nWAGNON  W AE1 G - N AH0 N\nWAGON  W AE1 - G AH0 N\nWAGONEER  W AE2 - G AH0 - N IH1 R\nWAGONEERS  W AE2 - G AH0 - N IH1 R Z\nWAGONER  W AE1 - G AH0 - N ER0\nWAGONS  W AE1 - G AH0 N Z\nWAGS  W AE1 G Z\nWAGSTAFF  W AE1 G - S T AE2 F\nWAGSTER  W AE1 G - S T ER0\nWAGUESPACK  W AE1 - G IH0 - S P AE2 K\nWAGY  W AE1 - G IY0\nWAH  W AA1\nWAH'S  W AA1 Z\nWAH-PEI  W AA1 - P EY1\nWAHID  W AA2 - HH IY1 D\nWAHL  W AA1 L\nWAHLBERG  W AA1 L - B ER0 G\nWAHLE  W AO1 L\nWAHLEN  W AA1 - L AH0 N\nWAHLER  W AA1 - L ER0\nWAHLERS  W AA1 - L ER0 Z\nWAHLERT  W AA1 - L ER0 T\nWAHLGREN  W AA1 L - G R AH0 N\nWAHLQUIST  W AA1 L - K W IH2 S T\nWAHLSTROM  W AA1 L - S T R AH0 M\nWAHOO  W AH0 - HH UW1\nWAHOO(2)  W AA1 - HH UW1\nWAI  W AY1\nWAIBEL  W EY1 - B AH0 L\nWAIBEL(2)  W AY1 - B AH0 L\nWAID  W EY1 D\nWAIDE  W EY1 D\nWAIDELICH  W AY1 D - L IH0 K\nWAIF  W EY1 F\nWAIFER  W EY1 - F ER0\nWAIGEL  W AY1 - G AH0 L\nWAIKIKI  W AY2 - K IY0 - K IY1\nWAIL  W EY1 L\nWAILED  W EY1 L D\nWAILES  W EY1 L Z\nWAILING  W EY1 - L IH0 NG\nWAILS  W EY1 L Z\nWAIN  W EY1 N\nWAINER  W EY1 - N ER0\nWAINIO  W EY1 - N IY0 - OW0\nWAINMAN  W EY1 N - M AH0 N\nWAINOCO  W EY2 - N OW1 - K OW0\nWAINOCO'S  W EY2 - N OW1 - K OW0 Z\nWAINRIGHT  W EY1 N - R AY2 T\nWAINSCOTT  W EY1 N - S K AH0 T\nWAINWRIGHT  W EY1 N - R AY2 T\nWAIS  W EY1 Z\nWAISANEN  W AY1 - S AH0 - N AH0 N\nWAISNER  W EY1 Z - N ER0\nWAIST  W EY1 S T\nWAISTLINE  W EY1 S T - L AY2 N\nWAISTS  W EY1 S T S\nWAIT  W EY1 T\nWAITE  W EY1 T\nWAITE'S  W EY1 T S\nWAITED  W EY1 - T AH0 D\nWAITED(2)  W EY1 - T IH0 D\nWAITER  W EY1 - T ER0\nWAITER'S  W EY1 - T ER0 Z\nWAITERS  W EY1 - T ER0 Z\nWAITES  W EY1 T S\nWAITIN'  W EY1 - T IH0 N\nWAITING  W EY1 - T IH0 NG\nWAITKUS  W EY1 T - K AH0 S\nWAITMAN  W AY1 T - M AH0 N\nWAITRESS  W EY1 - T R AH0 S\nWAITRESSES  W EY1 - T R AH0 - S IH0 Z\nWAITS  W EY1 T S\nWAITT  W EY1 T\nWAITZKIN  W EY1 T - S K IH2 N\nWAIVE  W EY1 V\nWAIVED  W EY1 V D\nWAIVER  W EY1 - V ER0\nWAIVERS  W EY1 - V ER0 Z\nWAIVES  W EY1 V Z\nWAIVING  W EY1 - V IH0 NG\nWAJDA  V AY1 - D AH0\nWAKABAYASHI  W AA0 - K AA2 - B AA0 - Y AA1 - SH IY0\nWAKE  W EY1 K\nWAKEFIELD  W EY1 K - F IY2 L D\nWAKEHAM  W AE1 - K AH0 M\nWAKELAND  W EY1 K - L AH0 N D\nWAKELEY  W AE1 K - L IY0\nWAKELY  W EY1 K - L IY0\nWAKEMAN  W EY1 K - M AH0 N\nWAKEN  W EY1 - K AH0 N\nWAKES  W EY1 K S\nWAKEUP  W EY1 K - AH2 P\nWAKID  W EY1 - K AH0 D\nWAKING  W EY1 - K IH0 NG\nWAKLEY  W AE1 K - L IY0\nWAKO  W AE1 - K OW0\nWAL  W AO1 L\nWALA  W AO1 - L AH0\nWALA'S  W AO1 - L AH0 Z\nWALAS  W AO1 - L AH0 Z\nWALBERG  W AO1 L - B ER0 G\nWALBERT  W AO1 L - B ER0 T\nWALBORN  W AO1 L - B ER0 N\nWALBRIDGE  W AO1 L - B R IH0 JH\nWALBRO  W AO1 L - B R OW0\nWALBURN  W AO1 L - B ER0 N\nWALBY  W AO1 L - B IY0\nWALCH  W AO1 L CH\nWALCHER  W AO1 L - CH ER0\nWALCK  W AO1 L K\nWALCOT  W AO1 L - K AA0 T\nWALCOTT  W AO1 L - K AA0 T\nWALCZAK  V AA1 L - CH AE0 K\nWALCZYK  V AA1 L - CH IH0 K\nWALD  W AO1 L D\nWALDA  V AA1 L - D AH0\nWALDBAUM  W AO1 L D - B AW2 M\nWALDE  W AO1 L D\nWALDECK  W AO1 L - D EH0 K\nWALDECKER  W AO1 L - D EH2 - K ER0\nWALDEGARD  W AO1 L - D AH0 - G AA2 R D\nWALDEMAR  V AA1 L - D AH0 - M AA0 R\nWALDEN  W AO1 L - D AH0 N\nWALDENBOOKS  W AO1 L - D AH0 N - B UH2 K S\nWALDENBOOKS'  W AO1 L - D AH0 N - B UH2 K S\nWALDER  W AO1 L - D ER0\nWALDHEIM  W AO1 L D - HH AY2 M\nWALDHEIM'S  W AO1 L D - HH AY2 M Z\nWALDHEIM'S(2)  V AO1 L D - HH AY2 M Z\nWALDHEIM(2)  V AO1 L D - HH AY2 M\nWALDHOLTZ  W AO1 L D - HH OW2 L T S\nWALDHOLTZ'S  W AO1 L D - HH OW2 L T - S IH0 Z\nWALDHOLZ  W AO1 L D - HH OW2 L T S\nWALDHORN  W AO1 L D - HH AO2 R N\nWALDIE  W AO1 L - D IY0\nWALDING  W AO1 L - D IH0 NG\nWALDINGER  W AO1 L - D IH0 - NG ER0\nWALDMAN  W AA1 L D - M AH0 N\nWALDMANN  W AO1 L D - M AH0 N\nWALDNER  W AO1 L D - N ER0\nWALDO  W AA1 L - D OW0\nWALDO(2)  W AO1 L - D OW0\nWALDOCH  W AO1 L - D AA0 K\nWALDOCK  W AO1 L - D AA0 K\nWALDON  W AO1 L - D AH0 N\nWALDORF  W AO1 L - D AO0 R F\nWALDOW  W AO1 L - D OW0\nWALDREN  W AO1 L - D R AH0 N\nWALDREP  W AO1 L - D R AH0 P\nWALDRIDGE  W AO1 L - D R IH0 JH\nWALDRIP  W AO1 L - D R AH0 P\nWALDRON  W AO1 L - D R AH0 N\nWALDROOP  W AO1 L - D R UW2 P\nWALDROP  W AO1 L - D R AA0 P\nWALDROUP  W AO1 L - D R UW2 P\nWALDRUM  W AO1 L - D R AH0 M\nWALDRUP  W AO1 L - D R AH0 P\nWALDSCHMIDT  W AO1 L D SH - M IH2 T\nWALDVOGEL  W AO1 L D - V OW2 - G AH0 L\nWALE  W EY1 L\nWALEED  W AA2 - L IY1 D\nWALEK  V AA1 - L EH0 K\nWALEN  W EY1 - L AH0 N\nWALENTA  W AH0 - L EH1 N - T AH0\nWALENTA(2)  V AH0 - L EH1 N - T AH0\nWALES  W EY1 L Z\nWALESA  W AH0 - L EH1 - S AH0\nWALESA'S  W AH0 - L EH1 - S AH0 Z\nWALESA'S(2)  V AH0 - L EH1 - S AH0 Z\nWALESA(2)  V AH0 - L EH1 - S AH0\nWALESON  W EY1 L - S AH0 N\nWALFORD  W AO1 L - F ER0 D\nWALFRED  W AO1 L - F R EH0 D\nWALGREEN  W AO1 L - G R IY2 N\nWALGREN  W AO1 L - G R AH0 N\nWALICKI  W AH0 - L IH1 - K IY0\nWALID  W AA0 - L IY1 D\nWALIGORA  W AO0 - L IH0 - G AO1 - R AH0\nWALINSKY  W AH0 - L IH1 N - S K IY0\nWALIZER  W AO1 - L AY0 - Z ER0\nWALK  W AO1 K\nWALK(2)  W AA1 K\nWALK-ON  W AO1 - K AA2 N\nWALK-ONS  W AO1 - K AA2 N Z\nWALKE  W AO1 K\nWALKED  W AO1 K T\nWALKEN  W AO1 - K AH0 N\nWALKENHORST  W AO1 - K AH0 N - HH AO2 R S T\nWALKER  W AO1 - K ER0\nWALKER'S  W AO1 - K ER0 Z\nWALKERS  W AO1 - K ER0 Z\nWALKIE  W AO1 - K IY0\nWALKIN'  W AO1 - K IH0 N\nWALKING  W AO1 - K IH0 NG\nWALKINGTON  W AO1 - K IH0 NG - T AH0 N\nWALKINSHAW  W AO1 - K AH0 N - SH AO0\nWALKLEY  W AO1 K - L IY0\nWALKMAN  W AO1 K - M AE2 N\nWALKMAN(2)  W AO1 K - M AH0 N\nWALKNER  W AO1 K - N ER0\nWALKO  W AO1 - K OW0\nWALKOUT  W AO1 K - AW2 T\nWALKOUTS  W AO1 K - AW2 T S\nWALKOWIAK  W AO0 - K AW1 - IY0 - AE0 K\nWALKOWSKI  W AO0 - K AO1 F S - K IY0\nWALKS  W AO1 K S\nWALKUP  W AO1 K - AH2 P\nWALKURE  W AO1 - K Y ER0\nWALKWAY  W AO1 K - W EY2\nWALKWAYS  W AO1 K - W EY2 Z\nWALL  W AO1 L\nWALL'S  W AO1 L Z\nWALL-TEX  W AO1 L - T EH1 K S\nWALLA  W AO1 - L AH0\nWALLACE  W AO1 - L AH0 S\nWALLACE'S  W AO1 - L AH0 - S AH0 Z\nWALLACE(2)  W AO1 - L IH0 S\nWALLACH  W AO1 - L AH0 K\nWALLACK  W AO1 - L AH0 K\nWALLANDER  W AO1 - L AH0 N - D ER0\nWALLAR  W AO1 - L ER0\nWALLBOARD  W AO1 L - B AO2 R D\nWALLE  W AO1 L\nWALLED  W AO1 L D\nWALLEN  W AO1 - L AH0 N\nWALLENBERG  W AO1 - L AH0 N - B ER0 G\nWALLENBERG'S  W AO1 - L AH0 N - B ER0 G Z\nWALLENSTEIN  W AO1 - L AH0 N - S T AY2 N\nWALLENSTEIN(2)  W AO1 - L AH0 N - S T IY2 N\nWALLER  W AO1 - L ER0\nWALLERSTEIN  W AO1 - L ER0 - S T AY2 N\nWALLERSTEIN(2)  W AO1 - L ER0 - S T IY2 N\nWALLES  W AO1 L Z\nWALLET  W AO1 - L AH0 T\nWALLETS  W AO1 - L AH0 T S\nWALLEY  W AO1 - L IY0\nWALLEYE  W AO1 - L AY2\nWALLFLOWER  W AO1 L - F L AW2 - ER0\nWALLGREN  W AO1 L - G R AH0 N\nWALLICH  W AO1 - L IH0 K\nWALLICH'S  W AO1 - L IH0 K S\nWALLICK  W AO1 - L IH0 K\nWALLIE  W AO1 - L IY0\nWALLIN  W AO1 - L IH0 N\nWALLING  W AO1 - L IH0 NG\nWALLINGFORD  W AO1 - L IH0 NG - F ER0 D\nWALLINGTON  W AO1 - L IH0 NG - T AH0 N\nWALLIS  W AO1 - L IH0 S\nWALLISON  W AO1 - L IH0 - S AH0 N\nWALLMAN  W AO1 L - M AH0 N\nWALLNER  W AO1 L - N ER0\nWALLO  W AA1 - L OW0\nWALLOCH  W AO1 - L AH0 K\nWALLOP  W AA1 - L AH0 P\nWALLOPING  W AO1 - L AH0 - P IH0 NG\nWALLOPS  W AA1 - L AH0 P S\nWALLOW  W AA1 - L OW0\nWALLOWED  W AA1 - L OW0 D\nWALLOWING  W AA1 - L OW0 - IH0 NG\nWALLPAPER  W AO1 L - P EY2 - P ER0\nWALLPAPERED  W AO1 L - P EY2 - P ER0 D\nWALLPAPERING  W AO1 L - P EY2 - P ER0 - IH0 NG\nWALLPAPERS  W AO1 L - P EY2 - P ER0 Z\nWALLS  W AO1 L Z\nWALLSEND  W AO1 L - S EH2 N D\nWALLSTREET  W AO1 L - S T R IY2 T\nWALLWORK  W AO1 L - W ER2 K\nWALLY  W AO1 - L IY0\nWALLY'S  W AO1 - L IY0 Z\nWALLY(2)  W EY1 - L IY0\nWALMART  W AO1 L - M AA2 R T\nWALMER  W AO1 L - M ER0\nWALMOND  W AO1 L - M AH0 N D\nWALMSLEY  W AO1 L M S - L IY0\nWALN  W AO1 L N\nWALNUT  W AO1 L - N AH2 T\nWALNUTS  W AO1 L - N AH2 T S\nWALP  W AE1 L P\nWALP(2)  W AO1 L P\nWALPOLE  W AO1 L - P OW2 L\nWALRATH  W AO1 L - R AH0 TH\nWALRAVEN  W AO1 L - R EY2 - V AH0 N\nWALROD  W AO1 L - R AA0 D\nWALRUS  W AO1 L - R AH0 S\nWALRUSES  W AA1 L - R AH0 - S IH0 Z\nWALSER  W AO1 L - Z ER0\nWALSH  W AO1 L SH\nWALSH'S  W AO1 L - SH IH0 Z\nWALSKI  V AA1 L S - K IY0\nWALSTAD  W AO1 L - S T AE0 D\nWALSTON  W AO1 L - S T AH0 N\nWALSTROM  W AO1 L - S T R AH0 M\nWALSWORTH  W AO1 L - S W ER0 TH\nWALT  W AO1 L T\nWALTER  W AO1 L - T ER0\nWALTER'S  W AO1 L - T ER0 Z\nWALTERMIRE  W AO1 L - T ER0 - M AY0 R\nWALTERS  W AO1 L - T ER0 Z\nWALTERS'  W AO1 L - T ER0 Z\nWALTH  W AO1 L TH\nWALTHALL  W AO1 L - TH AH0 L\nWALTHAM  W AO1 L - TH AH0 M\nWALTHER  W AO1 L - TH ER0\nWALTHERS  W AO1 L - TH ER0 Z\nWALTHOSE  W AO1 L T - HH OW2 Z\nWALTHOUR  W AO1 L - T AW0 R\nWALTMAN  W AO1 L T - M AH0 N\nWALTNER  W AO1 L T - N ER0\nWALTON  W AO1 L - T AH0 N\nWALTON'S  W AO1 L - T AH0 N Z\nWALTONS  W AO1 L - T AH0 N Z\nWALTRIP  W AO1 L - T R IH0 P\nWALTS  W AO1 L T S\nWALTZ  W AO1 L T S\nWALTZ(2)  W AO1 L S\nWALTZER  W AO1 L T - S ER0\nWALTZER(2)  W AO1 L - S ER0\nWALTZES  W AO1 L T - S AH0 Z\nWALTZES(2)  W AO1 L - S AH0 Z\nWALTZING  W AO1 L T - S IH0 NG\nWALTZING(2)  W AO1 L - S IH0 NG\nWALWORTH  W AO1 L - W ER0 TH\nWALWYN  W AO1 L - W IH0 N\nWALZ  W AO1 L Z\nWALZER  W AO1 L - Z ER0\nWAMBACH  W AO1 M - B AA0 K\nWAMBAUGH  W AO1 M - B AA0\nWAMBLE  W AA1 M - B AH0 L\nWAMBOLD  W AA1 M - B OW2 L D\nWAMBOLDT  W AA1 M - B OW0 L T\nWAMBOLT  W AA1 M - B OW2 L T\nWAMPLER  W AA1 M - P L ER0\nWAMPOLE  W AA1 M - P OW2 L\nWAMPUM  W AA1 M - P AH0 M\nWAMSER  W AA1 M - Z ER0\nWAMSLEY  W AA1 M Z - L IY0\nWAN  W AA1 N\nWANAMAKER  W AA1 - N AH0 - M EY2 - K ER0\nWANAT  W EY1 - N AH0 T\nWAND  W AA1 N D\nWANDA  W AA1 N - D AH0\nWANDEL  W AA1 N - D AH0 L\nWANDELL  W AA1 N - D AH0 L\nWANDER  W AA1 N - D ER0\nWANDERED  W AA1 N - D ER0 D\nWANDERER  W AA1 N - D ER0 - ER0\nWANDERERS  W AA1 N - D ER0 - ER0 Z\nWANDERING  W AA1 N - D ER0 - IH0 NG\nWANDERINGS  W AA1 N - D ER0 - IH0 NG Z\nWANDERLUST  W AA1 N - D ER0 - L AH2 S T\nWANDERS  W AA1 N - D ER0 Z\nWANDERSEE  W AA1 N - D ER0 - S IY2\nWANDIE  W AA1 N - D IY0\nWANDIS  W AA1 N - D IH0 S\nWANDLER  W AA1 N D - L ER0\nWANDLING  W AA1 N D - L IH0 NG\nWANDREY  W AA1 N - D R IY0\nWANDS  W AA1 N D Z\nWANE  W EY1 N\nWANED  W EY1 N D\nWANEK  W EY1 - N IH0 K\nWANER  W EY1 - N ER0\nWANES  W EY1 N Z\nWANG  W AE1 NG\nWANG'S  W AE1 NG Z\nWANGEN  W AE1 - NG AH0 N\nWANGER  W AE1 - NG ER0\nWANGERIN  W AO1 NG - G ER0 - IH0 N\nWANGLE  W AE1 NG - G AH0 L\nWANGLED  W AE1 NG - G AH0 L D\nWANGLER  W AE1 NG - G L ER0\nWANING  W EY1 - N IH0 NG\nWANK  W AA1 NG K\nWANKE  W AA1 NG K\nWANKO  W AA1 NG - K OW0\nWANLESS  W AA1 N - L AH0 S\nWANN  W AA1 N\nWANNA  W AA1 - N AH0\nWANNABE  W AA1 - N AH0 - B IY2\nWANNABEE  W AA1 - N AH0 - B IY2\nWANNABEES  W AA1 - N AH0 - B IY2 Z\nWANNABES  W AA1 - N AH0 - B IY2 Z\nWANNAMAKER  W AA1 - N AH0 - M EY2 - K ER0\nWANNEMACHER  W AA1 - N AH0 - M AA0 - K ER0\nWANNER  W AA1 - N ER0\nWANNINGER  W AA1 - N IH0 - NG ER0\nWANNISKI  W AH0 N - IH1 S - K IY0\nWANSER  W AO1 N - Z ER0\nWANSLEY  W AO1 N Z - L IY0\nWANT  W AA1 N T\nWANT(2)  W AO1 N T\nWANTA  W AA1 N - T AH0\nWANTA(2)  W AA1 - N AH0\nWANTAGE  W AA1 N - T IH0 JH\nWANTAGES  W AA1 N - T IH0 - JH IH0 Z\nWANTED  W AA1 N - T AH0 D\nWANTED(2)  W AO1 N - T IH0 D\nWANTED(3)  W AO1 - N IH0 D\nWANTING  W AA1 N - T IH0 NG\nWANTING(2)  W AA1 - N IH0 NG\nWANTLAND  W AA1 N T - L AH0 N D\nWANTON  W AO1 N - T AH0 N\nWANTON(2)  W AA1 N - T AH0 N\nWANTONLY  W AO1 N - T AH0 N - L IY0\nWANTONLY(2)  W AA1 N - T AH0 N - L IY0\nWANTS  W AA1 N T S\nWANTS(2)  W AO1 N T S\nWANTZ  W AA1 N T S\nWANZER  W AA1 N - Z ER0\nWAPLES  W AO1 - P AH0 L Z\nWAPNER  W AA1 P - N ER0\nWAPPING  W AA1 - P IH0 NG\nWAR  W AO1 R\nWAR'S  W AO1 R Z\nWARBINGTON  W AO1 R - B IH0 NG - T AH0 N\nWARBLER  W AO1 R - B L ER0\nWARBLERS  W AO1 R - B L ER0 Z\nWARBLING  W AO1 R - B AH0 L - IH0 NG\nWARBLING(2)  W AO1 R - B L IH0 NG\nWARBURG  W AO1 R - B ER0 G\nWARBURG'S  W AO1 R - B ER0 G Z\nWARBURTON  W AO1 R - B ER0 - T AH0 N\nWARCHOL  W AO1 R - K AO0 L\nWARD  W AO1 R D\nWARD'S  W AO1 R D Z\nWARDA  W AO1 R - D AH0\nWARDAIR  W AO1 R - D EH2 R\nWARDE  W AO1 R D\nWARDED  W AO1 R - D IH0 D\nWARDELL  W AO1 R - D EH0 L\nWARDEN  W AO1 R - D AH0 N\nWARDEN'S  W AO1 R - D AH0 N Z\nWARDENS  W AO1 R - D AH0 N Z\nWARDENS'  W AO1 R - D AH0 N Z\nWARDER  W AO1 R - D ER0\nWARDING  W AO1 R - D IH0 NG\nWARDLAW  W AO1 R D - L AO2\nWARDLE  W AO1 R - D AH0 L\nWARDLEY  W AO1 R D - L IY0\nWARDLOW  W AO1 R D - L OW2\nWARDRIP  W AO1 R D - R IH0 P\nWARDROBE  W AO1 R D - R OW2 B\nWARDROBES  W AO1 R D - R OW2 B Z\nWARDROP  W AO1 R - D R AA2 P\nWARDS  W AO1 R D Z\nWARDWELL  W AO1 R D - W EH2 L\nWARE  W EH1 R\nWAREHIME  W EH1 R - HH AY2 M\nWAREHOUSE  W EH1 R - HH AW2 S\nWAREHOUSED  W EH1 R - HH AW2 Z D\nWAREHOUSES  W EH1 R - HH AW2 - Z IH0 Z\nWAREHOUSES(2)  W EH1 R - HH AW2 - S IH0 Z\nWAREHOUSING  W EH1 R - HH AW2 - Z IH0 NG\nWAREING  W EH1 - R IH0 NG\nWAREN  W EH1 - R AH0 N\nWARES  W EH1 R Z\nWARF  W AO1 R F\nWARFARE  W AO1 R - F EH2 R\nWARFEL  W AO1 R - F AH0 L\nWARFIELD  W AO1 R - F IY0 L D\nWARFORD  W AO1 R - F ER0 D\nWARGA  W AO1 R - G AH0\nWARGO  W AO1 R - G OW2\nWARHEAD  W AO1 R - HH EH2 D\nWARHEADS  W AO1 R - HH EH2 D Z\nWARHOL  W AO1 R - HH AO0 L\nWARHOL'S  W AO1 HH - R AO2 L Z\nWARHURST  W AO1 R - HH ER0 S T\nWARILY  W EH1 - R AH0 - L IY0\nWARINESS  W EH1 - R IY0 - N IH0 S\nWARING  W EH1 - R IH0 NG\nWARK  W AO1 R K\nWARKENTIN  W AO0 R - K EH1 N - T IH0 N\nWARKENTIN(2)  W AO1 R - K AH0 N - T IH0 N\nWARLEY  W AO1 R - L IY0\nWARLICK  W AO1 R - L IH0 K\nWARLIKE  W AO1 R - L AY2 K\nWARLING  W AO1 R - L IH0 NG\nWARLOECK  W AO1 R - L AA2 K\nWARLORD  W AO1 R - L AO2 R D\nWARLORDS  W AO1 R - L AO2 R D Z\nWARM  W AO1 R M\nWARMACK  W AO1 R - M AE0 K\nWARMAN  W AO1 R - M AH0 N\nWARMED  W AO1 R M D\nWARMER  W AO1 R - M ER0\nWARMEST  W AO1 R - M AH0 S T\nWARMING  W AO1 R - M IH0 NG\nWARMINGTON  W AO1 R - M IH0 NG - T AH0 N\nWARMINSTER  W AO1 R - M IH2 N - S T ER0\nWARMISH  W AO1 R - M IH0 SH\nWARMLY  W AO1 R M - L IY0\nWARMOND  W AO1 R - M AH0 N D\nWARMONGER  W AO1 R - M AA2 NG - G ER0\nWARMONGERING  W AO1 R - M AA2 NG - G ER0 - IH0 NG\nWARMOTH  W AO1 R - M AH0 TH\nWARMS  W AO1 R M Z\nWARMTH  W AO1 R M TH\nWARMUP  W AO1 R - M AH2 P\nWARMUS  W AO1 R - M AH0 S\nWARMUTH  W AO1 R - M UH2 TH\nWARN  W AO1 R N\nWARNACO  W AO1 R - N AH0 - K OW2\nWARNCKE  W AO1 R NG - K IY0\nWARNE  W AO1 R N\nWARNECKE  W AO1 R - N IH0 K\nWARNED  W AO1 R N D\nWARNEKE  W AO1 R - N IH0 K\nWARNELL  W AO1 R - N AH0 L\nWARNER  W AO1 R - N ER0\nWARNER'S  W AO1 R - N ER0 Z\nWARNERS  W AO1 R - N ER0 Z\nWARNES  W AO1 R N Z\nWARNICK  W AO1 R - N IH0 K\nWARNICO  W AO1 R - N IH0 - K OW0\nWARNING  W AO1 R - N IH0 NG\nWARNINGLY  W AO1 R - N IH0 NG - L IY0\nWARNINGS  W AO1 R - N IH0 NG Z\nWARNKE  W AO1 R NG - K IY0\nWARNKEN  W AO1 R NG - K AH0 N\nWARNOCK  W AO1 R - N AA0 K\nWARNS  W AO1 R N Z\nWARONKER  W AO0 - R AA1 NG - K ER0\nWARP  W AO1 R P\nWARPATH  W AO1 R - P AE2 TH\nWARPED  W AO1 R P T\nWARPING  W AO1 R - P IH0 NG\nWARPLANE  W AO1 R - P L EY2 N\nWARPLANES  W AO1 R - P L EY2 N Z\nWARPS  W AO1 R P S\nWARR  W AO1 R\nWARRANT  W AO1 - R AH0 N T\nWARRANTED  W AO1 - R AH0 N - T IH0 D\nWARRANTIES  W AO1 - R AH0 N - T IY0 Z\nWARRANTLESS  W AO1 - R AH0 N T - L AH0 S\nWARRANTS  W AO1 - R AH0 N T S\nWARRANTY  W AO1 - R AH0 N - T IY0\nWARRELL  W AO2 - R EH1 L\nWARREN  W AO1 - R AH0 N\nWARREN'S  W AO1 - R AH0 N Z\nWARRENS  W AO1 - R AH0 N Z\nWARRICK  W AO1 - R IH0 K\nWARRINER  W AO1 - R AH0 - N ER0\nWARRING  W AO1 - R IH0 NG\nWARRINGTON  W AO1 - R IH0 NG - T AH0 N\nWARRIOR  W AO1 - R IY0 - ER0\nWARRIOR(2)  W AO1 R - Y ER0\nWARRIORS  W AO1 - R IY0 - ER0 Z\nWARRIORS(2)  W AO1 R - Y ER0 Z\nWARS  W AO1 R Z\nWARS'  W AO1 R Z\nWARSAW  W AO1 R - S AO2\nWARSAW'S  W AO1 R - S AO2 Z\nWARSAWS  W AO1 R - S AO2 Z\nWARSHAUER  W AO1 R - SH AW0 - ER0\nWARSHAW  W AO1 R - SH AO2\nWARSHAWSKY  W AO1 R - SH AH0 W - S K IY0\nWARSHIP  W AO1 R - SH IH2 P\nWARSHIPS  W AO1 R - SH IH2 P S\nWARSTLER  W AO1 R S T - L ER0\nWART  W AO1 R T\nWARTENBERG  W AO1 R - T AH0 N - B ER0 G\nWARTH  W AO1 R TH\nWARTHEN  W AO1 R - TH AH0 N\nWARTIME  W AO1 R - T AY2 M\nWARTIMES  W AO1 R - T AY2 M Z\nWARTMAN  W AO1 R T - M AH0 N\nWARTON  W AO1 R - T AH0 N\nWARTS  W AO1 R T S\nWARTZMAN  W AO1 R T S - M AH0 N\nWARWICK  W AO1 R - W IH0 K\nWARWICK'S  W AO1 R - W IH2 K S\nWARY  W EH1 - R IY0\nWARZECHA  W AO0 R - Z EH1 - HH AH0\nWAS  W AA1 Z\nWAS(2)  W AH1 Z\nWAS(3)  W AH0 Z\nWAS(4)  W AO1 Z\nWASATCH  W AA1 - S AE0 CH\nWASCH  W AO1 SH\nWASCHER  W AO1 - SH ER0\nWASCO  W AO1 S - K OW0\nWASCOM  W AO1 S - K AA0 M\nWASDEN  W AO1 S - D AH0 N\nWASEDA  W AH0 - S IY1 - D AH0\nWASEM  W AO1 - S IH0 M\nWASH  W AA1 SH\nWASH(2)  W AO1 SH\nWASHABAUGH  W AO1 - SH AH0 - B AO0\nWASHABLE  W AA1 - SH AH0 - B AH0 L\nWASHAM  W AA1 - SH AH0 M\nWASHBASIN  W AA1 SH - B EY2 - S AH0 N\nWASHBOARD  W AA1 SH - B AO2 R D\nWASHBURN  W AA1 SH - B ER2 N\nWASHBURNE  W AO1 SH - B ER2 N\nWASHCLOTH  W AA1 SH - K L AO2 TH\nWASHED  W AA1 SH T\nWASHER  W AA1 - SH ER0\nWASHERS  W AA1 - SH ER0 Z\nWASHES  W AA1 - SH IH0 Z\nWASHI'S  W AA1 - SH IY0 Z\nWASHING  W AA1 - SH IH0 NG\nWASHINGTON  W AA1 - SH IH0 NG - T AH0 N\nWASHINGTON'S  W AA1 - SH IH0 NG - T AH0 N Z\nWASHINGTON'S(2)  W AO1 - SH IH0 NG - T AH0 N Z\nWASHINGTON(2)  W AO1 - SH IH0 NG - T AH0 N\nWASHINGTONIAN  W AA2 - SH IH0 NG - T OW1 - N IY0 - AH0 N\nWASHINGTONIAN(2)  W AO2 - SH IH0 NG - T OW1 - N IY0 - AH0 N\nWASHINGTONIANS  W AA2 - SH IH0 NG - T OW1 - N IY0 - AH0 N Z\nWASHINGTONIANS(2)  W AO2 - SH IH0 NG - T OW1 - N IY0 - AH0 N Z\nWASHKO  V AA1 SH - K OW0\nWASHOE  W AA1 - SH OW2\nWASHOUT  W AA1 SH - AW2 T\nWASHOUTS  W AA1 SH - AW2 T S\nWASHROOM  W AA1 SH - R UW2 M\nWASHTUB  W AA1 SH - T AH2 B\nWASHY  W AA1 - SH IY0\nWASIELEWSKI  V AH0 - S IY0 - L EH1 F S - K IY0\nWASIK  V AA1 - S IH0 K\nWASIL  W AO1 - S AH0 L\nWASILEWSKI  V AH0 - S IH0 - L EH1 F S - K IY0\nWASINGER  W AO1 - S IH0 N - JH ER0\nWASKIEWICZ  V AA1 - S K AH0 - V IH0 CH\nWASKO  V AA1 - S K OW0\nWASKOW  V AA1 - S K OW0\nWASLEY  W AO1 S - L IY0\nWASMER  W AO1 - S AH0 - M ER0\nWASMUND  W AO1 Z - M AH0 N D\nWASMUTH  W AO1 Z - M UW0 TH\nWASN'T  W AA1 - Z AH0 N T\nWASN'T(2)  W AH1 - Z AH0 N T\nWASON  W AA1 - S AH0 N\nWASP  W AA1 S P\nWASP'S  W AA1 S P S\nWASPS  W AA1 S P S\nWASS  W AH1 S\nWASS(2)  W AA1 S\nWASSEL  W AO1 - S AH0 L\nWASSELL  W AO1 - S AH0 L\nWASSENAAR  W AO1 - S IH0 - N AA0 R\nWASSER  W AO1 - S ER0\nWASSERMAN  W AA1 - S ER0 - M AH0 N\nWASSERMAN'S  W AA1 - S ER0 - M AH0 N Z\nWASSERSTEIN  W AA1 - S ER0 - S T IY2 N\nWASSERSTEIN(2)  W AA1 - S ER0 - S T AY2 N\nWASSINK  W AO1 - S IH0 NG K\nWASSMAN  W AO1 S - M AH0 N\nWASSMER  W AA1 S - M ER0\nWASSOM  W AA1 - S AH0 M\nWASSON  W AO1 - S AH0 N\nWASSUM  W AA1 - S AH0 M\nWASTE  W EY1 S T\nWASTE'S  W EY1 S T S\nWASTEBASKET  W EY1 S T - B AE2 - S K AH0 T\nWASTEBASKETS  W EY1 S T - B AE2 - S K AH0 T S\nWASTED  W EY1 - S T AH0 D\nWASTED(2)  W EY1 - S T IH0 D\nWASTEFUL  W EY1 S T - F AH0 L\nWASTEFULNESS  W EY1 S T - F AH0 L - N AH0 S\nWASTELAND  W EY1 S T - L AE2 N D\nWASTEPAPER  W EY1 S T - P EY2 - P ER0\nWASTER  W EY1 - S T ER0\nWASTERS  W EY1 - S T ER0 Z\nWASTES  W EY1 S T S\nWASTEWATER  W EY1 S T - W AO2 - T ER0\nWASTING  W EY1 - S T IH0 NG\nWASZAK  V AA1 - SH AH0 K\nWASZKIEWICZ  V AA1 SH - K AH0 - V IH0 CH\nWAT  W AO1 T\nWATANABE  W AA2 - T AA0 N - AA1 - B EY0\nWATCH  W AA1 CH\nWATCH(2)  W AO1 CH\nWATCHDOG  W AA1 CH - D AO2 G\nWATCHDOGS  W AA1 CH - D AO2 G Z\nWATCHED  W AA1 CH T\nWATCHED(2)  W AO1 CH T\nWATCHER  W AA1 - CH ER0\nWATCHERS  W AA1 - CH ER0 Z\nWATCHES  W AA1 - CH AH0 Z\nWATCHES(2)  W AA1 - CH IH0 Z\nWATCHFUL  W AA1 CH - F AH0 L\nWATCHIN'  W AA1 - CH IH0 N\nWATCHING  W AA1 - CH IH0 NG\nWATCHMAN  W AA1 CH - M AH0 N\nWATCHORN  W AO1 - CH ER0 N\nWATCHWORD  W AA1 CH - W ER2 D\nWATER  W AO1 - T ER0\nWATER'S  W AO1 - T ER0 Z\nWATER-REPELLENT  W AO1 - T ER0 - R IH0 - P EH1 - L AH0 N T\nWATERBED  W AO1 - T ER0 - B EH2 D\nWATERBEDS  W AO1 - T ER0 - B EH2 D Z\nWATERBORNE  W AO1 - T ER0 - B AO2 R N\nWATERBURY  W AO1 - T ER0 - B EH2 - R IY0\nWATERCOLOR  W AO1 - T ER0 - K AH2 - L ER0\nWATERCOLORS  W AO1 - T ER0 - K AH2 - L ER0 Z\nWATERCRESS  W AO1 - T ER0 - K R EH2 S\nWATERED  W AO1 - T ER0 D\nWATERER  W AO1 - T ER0 - ER0\nWATERFALL  W AO1 - T ER0 - F AO2 L\nWATERFALLS  W AO1 - T ER0 - F AO2 L Z\nWATERFIELD  W AO1 - T ER0 - F IY0 L D\nWATERFORD  W AO1 - T ER0 - F ER0 D\nWATERFOWL  W AO1 - T ER0 - F AW2 L\nWATERFRONT  W AO1 - T ER0 - F R AH2 N T\nWATERFRONTS  W AO1 - T ER0 - F R AH2 N T S\nWATERGATE  W AO1 - T ER0 - G EY2 T\nWATERGATE(2)  W AA1 - T ER0 - G EY2 T\nWATERHOUSE  W AO1 - T ER0 - HH AW2 S\nWATERHOUSE'S  W AO1 - T ER0 - HH AW2 - S IH0 Z\nWATERING  W AO1 - T ER0 - IH0 NG\nWATERISHNESS  W AO1 - T ER0 - IH0 SH - N AH0 S\nWATERLOG  W AO1 - T ER0 - L AA2 G\nWATERLOGGED  W AO1 - T ER0 - L AA2 G D\nWATERLOO  W AO1 - T ER0 - L UW2\nWATERMAN  W AO1 - T ER0 - M AH0 N\nWATERMAN'S  W AO1 - T ER0 - M AH0 N Z\nWATERMARK  W AO1 - T ER0 - M AA2 R K\nWATERMELON  W AO1 - T ER0 - M EH2 - L AH0 N\nWATERMELONS  W AO1 - T ER0 - M EH2 - L AH0 N Z\nWATERMEN  W AO1 - T ER0 - M AH0 N\nWATERPROOF  W AO1 - T ER0 - P R UW2 F\nWATERPROOFING  W AO1 - T ER0 - P R UW2 - F IH0 NG\nWATERS  W AO1 - T ER0 Z\nWATERSHED  W AO1 - T ER0 - SH EH2 D\nWATERSHED(2)  W AA1 - T ER0 - SH EH2 D\nWATERSHEDS  W AO1 - T ER0 - SH EH2 D Z\nWATERSHEDS(2)  W AA1 - T ER0 - SH EH2 D Z\nWATERSON  W AO1 - T ER0 - S AH0 N\nWATERSTEIN  W AO1 - T ER0 - S T IY0 N\nWATERSTEIN(2)  W AO1 - T ER0 - S T AY0 N\nWATERSTON  W AO1 - T ER0 - S T AH0 N\nWATERSTONE'S  W AO1 - T ER0 - S T OW2 N Z\nWATERTIGHT  W AO1 - T ER0 - T AY2 T\nWATERTOWN  W AO1 - T ER0 - T AW2 N\nWATERVILLE  W AO1 - T ER0 - V IH0 L\nWATERWAY  W AO1 - T ER0 - W EY2\nWATERWAYS  W AO1 - T ER0 - W EY2 Z\nWATERWORK  W AO1 - T ER0 - W ER2 K\nWATERWORKS  W AO1 - T ER0 - W ER2 K S\nWATERWORLD  W AO1 - T ER0 - W ER2 L D\nWATERWORTH  W AO1 - T ER0 - W ER0 TH\nWATERY  W AO1 - T ER0 - IY0\nWATFORD  W AO1 T - F ER0 D\nWATHEN  W AO1 - TH AH0 N\nWATKIN  W AO1 T - K IH0 N\nWATKINS  W AA1 T - K IH0 N Z\nWATKINS'  W AA1 T - K IH0 N Z\nWATKINSON  W AO1 T - K IH0 N - S AH0 N\nWATLAND  W AA1 T - L AH0 N D\nWATLEY  W AA1 T - L IY0\nWATLING  W AO1 - T AH0 L - IH0 NG\nWATLING(2)  W AO1 T - L IH0 NG\nWATLINGTON  W AO1 - T AH0 L - IH0 NG - T AH0 N\nWATLINGTON(2)  W AO1 T - L IH0 NG - T AH0 N\nWATNE  W AO1 T N\nWATROUS  W AA1 - T R AH0 S\nWATRY  W AA1 - T R IY0\nWATSCO  W AA1 T - S K OW2\nWATSON  W AA1 T - S AH0 N\nWATSON'S  W AA1 T - S AH0 N Z\nWATSONVILLE  W AA1 T - S AH0 N - V IH2 L\nWATT  W AA1 T\nWATT'S  W AA1 T S\nWATTAGE  W AA1 - T AH0 JH\nWATTENBARGER  W AO1 - T IH0 N - B AA0 R - G ER0\nWATTENBERG  W AA1 - T AH0 N - B ER0 G\nWATTENBURG  W AA1 - T AH0 N - B ER0 G\nWATTERS  W AA1 - T ER0 Z\nWATTIE  W AA1 - T IY0\nWATTLES  W AA1 - T AH0 L Z\nWATTLETON(2)  W AA1 - T AH0 L - T AH0 N\nWATTON  W AO1 - T AH0 N\nWATTS  W AA1 T S\nWATTWIL  W AA1 T - W IH0 L\nWATWOOD  W AO1 T - W UH0 D\nWATZ  W AA1 T S\nWATZMAN  W AA1 T S - M AH0 N\nWAUGAMAN  W AO1 - G AH0 - M AH0 N\nWAUGH  W AO1\nWAUGH'S  W AO1 Z\nWAUKEGAN  W AO0 - K IY1 - G AH0 N\nWAUKESHA  W AO0 - K IY1 - SH AH0\nWAUSAU  W AO1 - S AO0\nWAUTERS  W AW1 - T ER0 Z\nWAVE  W EY1 V\nWAVED  W EY1 V D\nWAVELENGTH  W EY1 V - L EH2 NG TH\nWAVELENGTHS  W EY1 V - L EH2 NG TH S\nWAVER  W EY1 - V ER0\nWAVERED  W EY1 - V ER0 D\nWAVERING  W EY1 - V ER0 - IH0 NG\nWAVERLEY  W EY1 - V ER0 - L IY0\nWAVERLY  W EY1 - V ER0 - L IY0\nWAVES  W EY1 V Z\nWAVETEK  W EY1 V - T EH2 K\nWAVING  W EY1 - V IH0 NG\nWAVRA  W AA1 - V R AH0\nWAVY  W EY1 - V IY0\nWAWRZYNIAK  W AA0 R - Z IH1 - N IY0 - AE0 K\nWAX  W AE1 K S\nWAXED  W AE1 K S T\nWAXES  W AE1 K - S IH0 Z\nWAXING  W AE1 K - S IH0 NG\nWAXLER  W AE1 K - S L ER0\nWAXMAN  W AE1 K S - M AH0 N\nWAXMAN'S  W AE1 K S - M AH0 N Z\nWAXY  W AE1 K - S IY0\nWAY  W EY1\nWAY'S  W EY1 Z\nWAYANS  W EY1 - AH0 N Z\nWAYANS(2)  HH W EY1 - AH0 N Z\nWAYBRIGHT  W EY1 B - R AY2 T\nWAYCASTER  W EY1 - K AE2 - S T ER0\nWAYE  W EY1\nWAYLAID  W EY1 - L EY2 D\nWAYLAND  W EY1 - L AH0 N D\nWAYLAY  W EY1 - L EY2\nWAYLON  W EY1 - L AA2 N\nWAYMAN  W EY1 - M AH0 N\nWAYMIRE  W EY1 - M AY2 R\nWAYNE  W EY1 N\nWAYNE'S  W EY1 N Z\nWAYNESBORO  W EY1 N Z - B ER0 - OW0\nWAYNESVILLE  W EY1 N Z - V IH2 L\nWAYNICK  W EY1 - N IH0 K\nWAYS  W EY1 Z\nWAYSIDE  W EY1 - S AY2 D\nWAYSON  W EY1 - Z AH0 N\nWAYT  W EY1 T\nWAYWARD  W EY1 - W ER0 D\nWAZIR  W AA0 - Z IH1 R\nWAZIR'S  W AA0 - Z IH1 R Z\nWE  W IY1\nWE'D  W IY1 D\nWE'LL  W IY1 L\nWE'LL(2)  W IH1 L\nWE'RE  W IY1 R\nWE'RE(2)  W IH1 R\nWE'RE(3)  W ER1\nWE'VE  W IY1 V\nWEAK  W IY1 K\nWEAKEN  W IY1 - K AH0 N\nWEAKENED  W IY1 - K AH0 N D\nWEAKENING  W IY1 - K AH0 - N IH0 NG\nWEAKENS  W IY1 - K AH0 N Z\nWEAKER  W IY1 - K ER0\nWEAKEST  W IY1 - K AH0 S T\nWEAKLAND  W IY1 K - L AH0 N D\nWEAKLEY  W IY1 K - L IY0\nWEAKLING  W IY1 K - L IH0 NG\nWEAKLY  W IY1 K - L IY0\nWEAKNESS  W IY1 K - N AH0 S\nWEAKNESSES  W IY1 K - N AH0 - S AH0 Z\nWEAKNESSES(2)  W IY1 K - N AH0 - S IH0 Z\nWEAKS  W IY1 K S\nWEALTH  W EH1 L TH\nWEALTHIER  W EH1 L - TH IY0 - ER0\nWEALTHIEST  W EH1 L - TH IY0 - AH0 S T\nWEALTHS  W EH1 L TH S\nWEALTHY  W EH1 L - TH IY0\nWEAN  W IY1 N\nWEANED  W IY1 N D\nWEANING  W IY1 - N IH0 NG\nWEANT  W IY1 N T\nWEAPON  W EH1 - P AH0 N\nWEAPON'S  W EH1 - P AH0 N Z\nWEAPONRY  W EH1 - P AH0 N - R IY0\nWEAPONS  W EH1 - P AH0 N Z\nWEAPONS'  W EH1 - P AH0 N Z\nWEAR  W EH1 R\nWEARABLE  W EH1 - R AH0 - B AH0 L\nWEARER  W EH1 - R ER0\nWEARERS  W EH1 - R ER0 Z\nWEAREVER  W EH1 - R EH2 - V ER0\nWEARHOUSE  W EH1 R - HH AW2 S\nWEARIED  W IH1 - R IY0 D\nWEARILY  W EH1 - R AH0 - L IY0\nWEARINESS  W IH1 - R IY0 - N AH0 S\nWEARING  W EH1 - R IH0 NG\nWEARISOME  W IH1 - R IY0 - S AH0 M\nWEARS  W EH1 R Z\nWEARY  W IH1 - R IY0\nWEARYING  W IY1 - R IY0 - IH0 NG\nWEASE  W IY1 Z\nWEASEL  W IY1 - Z AH0 L\nWEASELLIKE  W IY1 - Z AH0 L - L AY2 K\nWEAST  W IY1 S T\nWEATHER  W EH1 - DH ER0\nWEATHER'S  W EH1 - DH ER0 Z\nWEATHERALL  W EH1 - DH ER0 - AO2 L\nWEATHERBEE  W EH1 - DH ER0 - B IY2\nWEATHERBY  W EH1 - DH ER0 - B IY0\nWEATHERED  W EH1 - DH ER0 D\nWEATHERFORD  W EH1 - DH ER0 - F ER0 D\nWEATHERHEAD  W EH1 - DH ER0 - HH EH2 D\nWEATHERHOLT  W EH1 - DH ER0 - HH OW2 L T\nWEATHERHOLTZ  W EH1 - DH ER0 - HH OW2 L T S\nWEATHERING  W EH1 - DH ER0 - IH0 NG\nWEATHERINGTON  W EH1 - DH ER0 - IH0 NG - T AH0 N\nWEATHERLY  W EH1 - DH ER0 - L IY0\nWEATHERMAN  W EH1 - DH ER0 - M AE2 N\nWEATHERMEN  W EH1 - DH ER0 - M EH2 N\nWEATHERPERSON  W EH1 - TH ER0 - P ER2 - S AH0 N\nWEATHERPROOF  W EH1 - DH ER0 - P R UW2 F\nWEATHERS  W EH1 - DH ER0 Z\nWEATHERSBEE  W EH1 - DH ER0 Z - B IY2\nWEATHERSBY  W EH1 - DH ER0 S - B IY0\nWEATHERSPOON  W EH1 - DH ER0 - S P UW2 N\nWEATHERSTONE  W EH1 - DH ER0 - S T OW2 N\nWEATHERWAX  W EH1 - DH ER0 - W AE2 K S\nWEATHINGTON  W EH1 - TH IH0 NG - T AH0 N\nWEAVE  W IY1 V\nWEAVED  W IY1 V D\nWEAVER  W IY1 - V ER0\nWEAVER'S  W IY1 - V ER0 Z\nWEAVERLING  W IY1 - V ER0 - L IH0 NG\nWEAVERS  W IY1 - V ER0 Z\nWEAVES  W IY1 V Z\nWEAVIL  W IY1 - V AH0 L\nWEAVING  W IY1 - V IH0 NG\nWEAVINGS  W IY1 - V IH0 NG Z\nWEB  W EH1 B\nWEBB  W EH1 B\nWEBB'S  W EH1 B Z\nWEBBED  W EH1 B D\nWEBBER  W EH1 - B ER0\nWEBBER'S  W EH1 - B ER0 Z\nWEBBING  W EH1 - B IH0 NG\nWEBBS  W EH1 B Z\nWEBER  W EH1 - B ER0\nWEBER'S  V EY1 - B ER0 Z\nWEBER'S(2)  W EH1 - B ER0 Z\nWEBERG  W EH1 - B ER0 G\nWEBERS  W EH1 - B ER0 Z\nWEBLEY  W EH1 - B L IY0\nWEBMASTER  W EH1 B - M AE2 - S T ER0\nWEBRE  W EH1 - B ER0\nWEBS  W EH1 B Z\nWEBSITE  W EH1 B - S AY2 T\nWEBSTER  W EH1 B - S T ER0\nWEBSTER'S  W EH1 B - S T ER0 Z\nWECHSEL  W EH1 K - S AH0 L\nWECHSLER  W EH1 K S - L ER0\nWECHSLER(2)  W EH1 SH - L ER0\nWECHT  W EH1 K T\nWECHT'S  W EH1 K T S\nWECHTER  W EH1 K - T ER0\nWECK  W EH1 K\nWECKER  W EH1 - K ER0\nWECKERLY  W EH1 - K ER0 - L IY0\nWECKESSER  W EH1 - K IH0 - S ER0\nWECKWERTH  W EH1 K - W ER0 TH\nWED  W EH1 D\nWEDBUSH  W EH1 D - B UH2 SH\nWEDD  W EH1 D\nWEDDED  W EH1 - D AH0 D\nWEDDED(2)  W EH1 - D IH0 D\nWEDDELL  W EH1 - D AH0 L\nWEDDING  W EH1 - D IH0 NG\nWEDDINGS  W EH1 - D IH0 NG Z\nWEDDINGTON  W EH1 - D IH0 NG - T AH0 N\nWEDDLE  W EH1 - D AH0 L\nWEDEKIND  W EH1 - D IH0 - K IH0 N D\nWEDEKING  W EH1 - D IH0 - K IH0 NG\nWEDEL  W EH1 - D AH0 L\nWEDELL  W EH1 - D AH0 L\nWEDEMEYER  W EH1 - D IH0 - M AY2 - ER0\nWEDGE  W EH1 JH\nWEDGED  W EH1 JH D\nWEDGES  W EH1 - JH AH0 Z\nWEDGES(2)  W EH1 - JH IH0 Z\nWEDGESTONE  W EH1 JH - S T OW2 N\nWEDGEWOOD  W EH1 JH - W UH2 D\nWEDGEWOOD'S  W EH1 JH - W UH2 D Z\nWEDGEWORTH  W EH1 JH - W ER2 TH\nWEDGWOOD  W EH1 JH - W UH2 D\nWEDIG  W EH1 - D IH0 G\nWEDIN  W EH1 - D IH0 N\nWEDLOCK  W EH1 D - L AA2 K\nWEDNESDAY  W EH1 N Z - D IY0\nWEDNESDAY'S  W EH1 N Z - D IY0 Z\nWEDNESDAY'S(2)  W EH1 N Z - D EY2 Z\nWEDNESDAY(2)  W EH1 N Z - D EY2\nWEDNESDAYS  W EH1 N Z - D EY2 Z\nWEDNESDAYS(2)  W EH1 N Z - D IY0 Z\nWEDOWEE  W EH0 - D AW1 - W IY2\nWEDOWEE'S  W EH0 - D AW1 - W IY2 Z\nWEDTECH  W EH1 D - T EH2 K\nWEDTECH'S  W EH1 D - T EH2 K S\nWEE  W IY1\nWEEBER  W IY1 - B ER0\nWEECH  W IY1 CH\nWEED  W IY1 D\nWEEDED  W IY1 - D IH0 D\nWEEDEN  W IY1 - D AH0 N\nWEEDING  W IY1 - D IH0 NG\nWEEDMAN  W IY1 D - M AH0 N\nWEEDON  W IY1 - D AH0 N\nWEEDS  W IY1 D Z\nWEEDY  W IY1 - D IY0\nWEEHAWKEN  W IY2 - HH AO1 - K AH0 N\nWEEK  W IY1 K\nWEEK'S  W IY1 K S\nWEEKDAY  W IY1 K - D EY2\nWEEKDAYS  W IY1 K - D EY2 Z\nWEEKEND  W IY1 K - EH2 N D\nWEEKEND'S  W IY1 K - EH2 N D Z\nWEEKEND(2)  W IY1 - K IH2 N D\nWEEKENDER  W IY1 K - EH2 N - D ER0\nWEEKENDS  W IY1 K - EH2 N D Z\nWEEKES  W IY1 K S\nWEEKLEY  W IY1 K - L IY0\nWEEKLIES  W IY1 K - L IY0 Z\nWEEKLONG  W IY1 K - L AO2 NG\nWEEKLY  W IY1 K - L IY0\nWEEKLY'S  W IY1 K - L IY0 Z\nWEEKS  W IY1 K S\nWEEKS'  W IY1 K S\nWEEMS  W IY1 M Z\nWEENY  W IY1 - N IY0\nWEEP  W IY1 P\nWEEPING  W IY1 - P IH0 NG\nWEEPS  W IY1 P S\nWEEPY  W IY1 - P IY0\nWEERS  W IY1 - ER0 Z\nWEERTS  W IH1 R T S\nWEESE  W IY1 Z\nWEESNER  W IY1 Z - N ER0\nWEEVIL  W IY1 - V AH0 L\nWEEVILS  W IY1 - V AH0 L Z\nWEGBREIT  W EH1 G - B R AY2 T\nWEGE  W IY1 JH\nWEGENER  W EH1 - G IY0 - N ER0\nWEGER  W IY1 - G ER0\nWEGLARZ  W EH1 G - L AA0 R Z\nWEGMAN  W EH1 G - M AH0 N\nWEGMANN  W EH1 G - M AH0 N\nWEGNER  W EH1 G - N ER0\nWEGRZYN  W EH1 - G ER0 - Z IH0 N\nWEHDE  W EH1 D\nWEHE  W IY1 HH\nWEHLAN  W EH1 - L AH0 N\nWEHLE  W EH1 - L IY0\nWEHLER  W EH1 - L ER0\nWEHLING  W EH1 - L IH0 NG\nWEHMAN  W EH1 - M AH0 N\nWEHMEIER  W EH1 - M AY0 - ER0\nWEHMEYER  W EH1 - M AY0 - ER0\nWEHNER  W EH1 - N ER0\nWEHR  W EH1 R\nWEHRENBERG  W EH1 - R AH0 N - B ER0 G\nWEHRHEIM  W EH1 R - HH AY0 M\nWEHRLE  W EH1 - R AH0 L\nWEHRLI  W EH1 R - L IY0\nWEHRLY  W EH1 R - L IY0\nWEHRMAN  W EH1 R - M AH0 N\nWEHRMANN  W EH1 R - M AH0 N\nWEHUNT  W EH1 - HH AH0 N T\nWEI  W EY1\nWEIAND  W AY1 - AH0 N D\nWEIBEL  W AY1 - B AH0 L\nWEIBLE  W IY1 - B AH0 L\nWEICH  W AY1 K\nWEICHEL  W AY1 - K AH0 L\nWEICHERT  W AY1 - K ER0 T\nWEICHMAN  W AY1 K - M AH0 N\nWEICHT  W AY1 K T\nWEICK  W IY1 K\nWEICKER  W AY1 - K ER0\nWEICKER'S  W AY1 - K ER0 Z\nWEIDA  V AY1 - D AH0\nWEIDE  W AY1 - D IY0\nWEIDEL  W AY1 - D AH0 L\nWEIDEMAN  W AY1 D - M AH0 N\nWEIDEMANN  W AY1 D - M AH0 N\nWEIDENBACH  W AY1 - D IH0 N - B AA0 K\nWEIDENBAUM  W AY1 - D AH0 N - B AW2 M\nWEIDENFELD  W AY1 - D AH0 N - F EH2 L D\nWEIDER  W AY1 - D ER0\nWEIDERMAN  W AY1 - D ER0 - M AH0 N\nWEIDIG  W AY1 - D IH0 G\nWEIDINGER  W AY1 - D IH0 - NG ER0\nWEIDLER  W AY1 - D AH0 L - ER0\nWEIDLER(2)  W AY1 D - L ER0\nWEIDLICH  W AY1 D - L IH0 K\nWEIDMAN  W AY1 D - M AH0 N\nWEIDMANN  W AY1 D - M AH0 N\nWEIDNER  W AY1 D - N ER0\nWEIER  W EY1 - ER0\nWEIGAND  W AY1 - G AH0 N D\nWEIGANDT  W AY1 - G AH0 N T\nWEIGEL  W AY1 - G AH0 L\nWEIGELT  W AY1 - G IH0 L T\nWEIGERT  W AY1 - G ER0 T\nWEIGH  W EY1\nWEIGHED  W EY1 D\nWEIGHING  W EY1 - IH0 NG\nWEIGHS  W EY1 Z\nWEIGHT  W EY1 T\nWEIGHTED  W EY1 - T IH0 D\nWEIGHTING  W EY1 - T IH0 NG\nWEIGHTINGS  W EY1 - T IH0 NG Z\nWEIGHTLESS  W EY1 T - L AH0 S\nWEIGHTLESSNESS  W EY1 T - L AH0 S - N AH0 S\nWEIGHTLIFTER  W EY1 T - L IH2 F - T ER0\nWEIGHTLIFTERS  W EY1 T - L IH2 F - T ER0 Z\nWEIGHTLIFTING  W EY1 T - L IH2 F - T IH0 NG\nWEIGHTMAN  W AY1 T - M AH0 N\nWEIGHTS  W EY1 T S\nWEIGHTY  W EY1 - T IY0\nWEIGHTY(2)  W EY1 - T IY2\nWEIGL  W IY1 - G AH0 L\nWEIGLE  W IY1 - G AH0 L\nWEIGOLD  W AY1 - G OW2 L D\nWEIHE  W IY1 HH\nWEIHER  W AY1 - HH ER0\nWEIK  W IY1 K\nWEIKEL  W AY1 - K AH0 L\nWEIKER  W AY1 - K ER0\nWEIKERT  W AY1 - K ER0 T\nWEIKLE  W IY1 - K AH0 L\nWEIL  W AY1 L\nWEIL'S  W AY1 L Z\nWEIL(2)  W IY1 L\nWEILAND  W AY1 - L AH0 N D\nWEILBACHER  W AY1 L - B AA2 - K ER0\nWEILD  W AY1 L D\nWEILD(2)  W IY1 L D\nWEILER  W AY1 - L ER0\nWEILL  W AY1 L\nWEILL'S  W AY1 L Z\nWEIMAN  W AY1 - M AH0 N\nWEIMANN  W AY1 - M AH0 N\nWEIMAR  V AY1 - M AA0 R\nWEIMER  W AY1 - M ER0\nWEIMEYER  W AY1 - M AY0 - ER0\nWEIN  W IY1 N\nWEINAND  W AY1 - N AH0 N D\nWEINBACH  W AY1 N - B AA2 K\nWEINBAUM  W AY1 N - B AW2 M\nWEINBERG  W AY1 N - B ER0 G\nWEINBERGER  W AY1 N - B ER0 - G ER0\nWEINBERGER'S  W AY1 N - B ER0 - G ER0 Z\nWEINDEL  W AY1 N - D AH0 L\nWEINEL  W AY1 - N AH0 L\nWEINER  W AY1 - N ER0\nWEINERT  W AY1 - N ER0 T\nWEINFELD  W AY1 N - F EH2 L D\nWEINGART  W AY1 NG - G AA0 R T\nWEINGARTEN  W AY1 N - G AA2 R - T AH0 N\nWEINGARTNER  W AY1 NG - G AA0 R T - N ER0\nWEINGER  W AY1 N - G ER0\nWEINHEIMER  W AY1 N - HH AY2 - M ER0\nWEINHOLD  W AY1 N - HH OW2 L D\nWEININGER  W AY1 - N IH0 - NG ER0\nWEINKAUF  W AY1 NG - K AW0 F\nWEINMAN  W AY1 N - M AH0 N\nWEINMANN  W AY1 N - M AH0 N\nWEINREB  W AY1 N - R IH0 B\nWEINREICH  W AY1 N - R AY2 K\nWEINRICH  W AY1 N - R IH0 K\nWEINROTH  W AY1 N - R AO2 TH\nWEINS  W IY1 N Z\nWEINSTEIN  W AY1 N - S T AY2 N\nWEINSTEIN'S  W AY1 N - S T AY2 N Z\nWEINSTEIN'S(2)  W AY1 N - S T IY2 N Z\nWEINSTEIN(2)  W AY1 N - S T IY2 N\nWEINSTOCK  W AY1 N - S T AA2 K\nWEINTRAUB  W AY1 N - T R AW2 B\nWEINTZ  W AY1 N T S\nWEINTZ'  W AY1 N T S\nWEINTZ'S  W AY1 N T - S IH0 Z\nWEINZIERL  W AY1 N - Z IH0 R L\nWEIPERT  W AY1 - P ER0 T\nWEIR  W IY1 R\nWEIR'S  W IY1 R Z\nWEIRAUCH  W AY1 - R AW0 K\nWEIRD  W IH1 R D\nWEIRDER  W IH1 R - D ER0\nWEIRDEST  W IH1 R - D AH0 S T\nWEIRDLY  W IH1 R D - L IY0\nWEIRDNESS  W IH1 R D - N AH0 S\nWEIRDO  W IH1 R - D OW0\nWEIRDOS  W IH1 R - D OW0 Z\nWEIRICH  W AY1 - R IH0 K\nWEIRICK  W AY1 - R IH0 K\nWEIRTON  W IH1 R - T AH0 N\nWEIRTON'S  W IH1 R - T AH0 N Z\nWEIS  W AY1 S\nWEISBACH  W AY1 S - B AA2 K\nWEISBECKER  W AY1 S - B EH2 - K ER0\nWEISBERG  W AY1 S - B ER0 G\nWEISBERGER  W AY1 S - B ER0 - G ER0\nWEISBROD  W AY1 S - B R AA2 D\nWEISBROT  W AY1 S - B R AH0 T\nWEISCHEDEL  W AY1 - SH AH0 - D AH0 L\nWEISE  W IY1 S\nWEISEL  W AY1 - S AH0 L\nWEISEL(2)  W AY1 - Z AH0 L\nWEISEL(3)  W IY2 - Z EH1 L\nWEISEMAN  W AY1 - S AH0 - M AH0 N\nWEISENBACH  W AY1 - S IH0 N - B AA0 K\nWEISENBACH(2)  W AY1 - Z IH0 N - B AA0 K\nWEISENBERG  W AY1 - S AH0 N - B ER0 G\nWEISENBERG(2)  W AY1 - Z AH0 N - B ER0 G\nWEISENBERGER  W AY1 - S AH0 N - B ER0 - G ER0\nWEISENBERGER(2)  W AY1 - Z AH0 N - B ER0 - G ER0\nWEISENBORN  W AY1 - S IH0 N - B ER0 N\nWEISENBORN(2)  W AY1 - Z IH0 N - B ER0 N\nWEISENBURGER  W AY1 - S AH0 N - B ER0 - G ER0\nWEISENBURGER(2)  W AY1 - S IH0 N - B ER0 - G ER0\nWEISENSEL  W AY1 - S IH0 N - S AH0 L\nWEISENSEL(2)  W AY1 - Z IH0 N - S AH0 L\nWEISENTHAL  W AY1 - S IH0 N - TH AA2 L\nWEISENTHAL(2)  W AY1 - Z IH0 N - TH AA2 L\nWEISER  W AY1 - S ER0\nWEISFELD  W AY1 S - F EH2 L D\nWEISFIELD'S  W AY1 S - F IY0 L D Z\nWEISGERBER  W AY1 S - G ER0 - B ER0\nWEISHAAR  W AY1 - SH AA0 R\nWEISHAUPT  W AY1 - SH AW0 P T\nWEISHEIT  W AY1 - SH AY0 T\nWEISINGER  W AY1 - S IH0 N - JH ER0\nWEISKOPF  W AY1 S - K AO0 F\nWEISMAN  W AY1 S - M AH0 N\nWEISMANN  W AY1 S - M AH0 N\nWEISNER  W AY1 S - N ER0\nWEISS  W AY1 S\nWEISS'S  W AY1 - S IH0 Z\nWEISSBERG  W AY1 S - B ER0 G\nWEISSE  W AY1 S\nWEISSENBORN  W AY1 - S IH0 N - B ER0 N\nWEISSER  W AY1 - S ER0\nWEISSERT  W AY1 - S ER0 T\nWEISSINGER  W AY1 - S IH0 N - JH ER0\nWEISSMAN  W AY1 S - M AH0 N\nWEISSMANN  W AY1 S - M AH0 N\nWEIST  W IY1 - IH0 S T\nWEIST(2)  W AY1 S T\nWEISZ  V AY1 SH\nWEITEK  W EY1 - T EH2 K\nWEITH  W IY1 TH\nWEITKAMP  W AY1 T - K AE2 M P\nWEITLER  W AY1 T - L ER0\nWEITMAN  W AY1 T - M AH0 N\nWEITZ  W IY1 T S\nWEITZEL  W AY1 T - Z AH0 L\nWEITZEN  W AY1 T - S AH0 N\nWEITZMAN  W AY1 T S - M AH0 N\nWEITZMAN'S  W AY1 T S - M AH0 N Z\nWEITZNER  W AY1 T - S N ER0\nWEIZMAN  W AY1 Z - M AH0 N\nWEIZSAECKER  W AY1 - S AE2 - K ER0\nWEKSEL  W EH1 K - S AH0 L\nWELBILT  W EH1 L - B IH1 L T\nWELBILT'S  W EH1 L - B IH1 L T S\nWELBORN  W EH1 L - B ER0 N\nWELBORNE  W EH1 L - B ER0 N\nWELBY  W EH1 L - B IY0\nWELCH  W EH1 L CH\nWELCH'S  W EH1 L - CH IH0 Z\nWELCHEL  W EH1 L - CH AH0 L\nWELCHER  W EH1 L - CH ER0\nWELCOME  W EH1 L - K AH0 M\nWELCOMED  W EH1 L - K AH0 M D\nWELCOMES  W EH1 L - K AH0 M Z\nWELCOMING  W EH1 L - K AH0 - M IH0 NG\nWELD  W EH1 L D\nWELDED  W EH1 L - D IH0 D\nWELDEN  W EH1 L - D AH0 N\nWELDER  W EH1 L - D ER0\nWELDERS  W EH1 L - D ER0 Z\nWELDIN  W EH1 L - D IH0 N\nWELDING  W EH1 L - D IH0 NG\nWELDON  W EH1 L - D AH0 N\nWELDON'S  W EH1 L - D AH0 N Z\nWELDS  W EH1 L D Z\nWELDWOOD  W EH1 L D - W UH2 D\nWELDY  W EH1 L - D IY0\nWELFARE  W EH1 L - F EH2 R\nWELFORD  W EH1 L - F ER0 D\nWELGE  W EH1 L JH\nWELINDER  W EH1 - L IH2 N - D ER0\nWELK  W EH1 L K\nWELKE  W EH1 L K\nWELKER  W EH1 L - K ER0\nWELL  W EH1 L\nWELL-DOER  W EH1 L - D UW1 R\nWELLAND  W EH1 - L AH0 N D\nWELLBEING  W EH2 L - B IY1 - IH0 NG\nWELLBORN  W EH1 L - B AO1 R N\nWELLBROCK  W EH1 L - B R AH0 K\nWELLCO  W EH1 L - K OW0\nWELLCOME  W EH1 L - K AH2 M\nWELLCOME'S  W EH1 L - K AH2 M Z\nWELLE  W EH1 L\nWELLEK  W EH1 - L EH0 K\nWELLEN  W EH1 - L AH0 N\nWELLENDORF  W EH1 - L IH0 N - D AO0 R F\nWELLENS  W EH1 - L AH0 N Z\nWELLER  W EH1 - L ER0\nWELLES  W EH1 L Z\nWELLES'  W EH1 L Z\nWELLESLEY  W EH1 L Z - L IY0\nWELLFLEET  W EH1 L - F L IY2 T\nWELLHEAD  W EH1 L - HH EH2 D\nWELLING  W EH1 - L IH0 NG\nWELLINGTON  W EH1 - L IH0 NG - T AH0 N\nWELLINGTON'S  W EH1 - L IH0 NG - T AH0 N Z\nWELLIVER  W EH1 - L IH0 - V ER0\nWELLMAN  W EH1 L - M AH0 N\nWELLNER  W EH1 L - N ER0\nWELLNESS  W EH1 L - N AH0 S\nWELLNITZ  W EH1 L - N IH0 T S\nWELLONS  W EH1 - L AH0 N Z\nWELLPOINT  W EH1 L - P OY2 N T\nWELLS  W EH1 L Z\nWELLS'S  W EH1 L - Z IH0 Z\nWELLSPRING  W EH1 L - S P R IH2 NG\nWELLSTONE  W EH1 L - S OW2 N\nWELLSTONE'S  W EH1 L - S OW2 N Z\nWELLTECH  W EH1 L - T EH2 K\nWELNA  W EH1 L - N AH0\nWELP  W EH1 L P\nWELSCH  W EH1 L SH\nWELSER  W EH1 L - S ER0\nWELSH  W EH1 L CH\nWELSH(2)  W EH1 L SH\nWELSHANS  W EH1 L - SH AH0 N Z\nWELT  W EH1 L T\nWELTE  W EH1 L T\nWELTER  W EH1 L - T ER0\nWELTERWEIGHT  W EH1 L - T ER0 - W EY2 T\nWELTMAN  W EH1 L T - M AH0 N\nWELTON  W EH1 L - T AH0 N\nWELTY  W EH1 L - T IY0\nWELTZ  W EH1 L T S\nWELZ  W EH1 L Z\nWEMBLEY  W EH1 M - B L IY0\nWEMHOFF  W EH1 M - HH AO2 F\nWEMMER  W EH1 - M ER0\nWEMPE  W EH1 M P\nWEMPLE  W EH1 M - P AH0 L\nWEN  W EH1 N\nWENATCHEE  W AH0 - N AE1 - CH IY0\nWENBERG  W EH1 N - B ER0 G\nWENCESLAUS  W EH1 N - S AH0 - S L AO2 S\nWENCHES  W EH1 N - CH IH0 Z\nWENCHESTER  W EH1 N - CH EH2 - S T ER0\nWENCHESTER'S  W EH1 N - CH EH2 - S T ER0 Z\nWENCK  W EH1 NG K\nWEND  W EH1 N D\nWENDA  W EH1 N - D AH0\nWENDE  W EH1 N D\nWENDEL  W EH1 N - D AH0 L\nWENDELINE  W EH1 N - D IH0 - L AY2 N\nWENDELKEN  W EH1 N - D IH0 L - K AH0 N\nWENDELL  W EH1 N - D AH0 L\nWENDER  W EH1 N - D ER0\nWENDERS  W EH1 N - D ER0 Z\nWENDING  W EH1 N - D IH0 NG\nWENDLAND  W EH1 N D - L AH0 N D\nWENDLANDT  W EH1 N D - L AH0 N T\nWENDLER  W EH1 N D - L ER0\nWENDLING  W EH1 N D - L IH0 NG\nWENDORF  W EH1 N - D AO0 R F\nWENDORFF  W EH1 N - D AO0 R F\nWENDS  W EH1 N D Z\nWENDT  W EH1 N T\nWENDY  W EH1 N - D IY0\nWENDY'S  W EH1 N - D IY0 Z\nWENFAN  W EH1 N - F AE1 N\nWENG  W EH1 NG\nWENGE  W EH1 N JH\nWENGE(2)  W EH1 NG\nWENGER  W EH1 - NG ER0\nWENGERD  W EH1 NG - G ER0 D\nWENGERT  W EH1 NG - G ER0 T\nWENGLER  W IH1 - NG AH0 - L ER0\nWENGLER(2)  W IH1 NG - G L ER0\nWENIG  W EH1 - N IH0 G\nWENIGER  W EH1 - N IH0 - G ER0\nWENINGER  W EH1 - N IH0 - NG ER0\nWENK  W EH1 NG K\nWENKE  W EH1 NG K\nWENKER  W EH1 NG - K ER0\nWENNBERG  W EH1 N - B ER0 G\nWENNER  W EH1 - N ER0\nWENNERSTROM  W EH1 - N ER0 - S T R AH0 M\nWENNING  W EH1 - N IH0 NG\nWENNINGER  W EH1 - N IH0 - NG ER0\nWENONA  W EH1 - N AH0 - N AH0\nWENRICH  W EH1 N - R IH0 K\nWENRICK  W EH1 N - R IH0 K\nWENSBERG  W EH1 N Z - B ER0 G\nWENSEL  W EH1 N - S AH0 L\nWENSTROM  W EH1 N - S T R AH0 M\nWENT  W EH1 N T\nWENTE  W EH1 N T\nWENTLAND  W EH1 N T - L AH0 N D\nWENTLING  W EH1 N - T L IH0 NG\nWENTWORTH  W EH1 N - T W ER1 TH\nWENTZ  W EH1 N T S\nWENTZEL  W EH1 N T - Z AH0 L\nWENTZELL  W EH1 N T - Z AH0 L\nWENTZVILLE  W EH1 N T S - V IH2 L\nWENZ  W EH1 N Z\nWENZEL  W EH1 N - Z AH0 L\nWENZHOU  W EH0 N - Z UW1\nWENZL  W EH1 N - Z AH0 L\nWENZLER  W EH1 N Z - L ER0\nWENZLICK  W EH1 N Z - L IH0 K\nWEPPLER  W EH1 P - L ER0\nWEPT  W EH1 P T\nWERBER  W ER1 - B ER0\nWERDEN  W ER1 - D AH0 N\nWERDER  W ER1 - D ER0\nWERDESHEIM  W ER1 D Z - HH AY2 M\nWERE  W ER0\nWERE(2)  W ER1\nWERELDHAVE  W EH1 - R AH0 L D - HH AA2 - V EY0\nWEREN'T  W ER1 - AH0 N T\nWEREN'T(2)  W ER1 N T\nWEREWOLF  W EH1 R - W UH2 L F\nWERGIN  W ER1 - G IH0 N\nWERK  W ER1 K\nWERKE  W ER1 K\nWERKHEISER  W ER1 K - HH AY0 - S ER0\nWERKING  W ER1 - K IH0 NG\nWERKMEISTER  W ER1 K - M AY0 - S T ER0\nWERLE  W AO1 - R AH0 L\nWERLEY  W ER1 - L IY0\nWERLING  W ER1 - L IH0 NG\nWERMAN  W ER1 - M AH0 N\nWERMIEL  W ER0 - M IY0 - AH0 L\nWERMUTH  W ER0 - M UW1 TH\nWERNE  W ER1 - N AH0\nWERNECKE  W ER1 - N IH0 K\nWERNER  W ER1 - N ER0\nWERNER'S  W ER1 - N ER0 Z\nWERNERT  W ER1 - N ER0 T\nWERNET  W ER1 - N IH0 T\nWERNETTE  W ER0 - N EH1 T\nWERNICK  W ER1 - N IH0 K\nWERNICKE  W ER1 - N IH0 K\nWERNIMONT  W ER1 - N IH0 - M AH0 N T\nWERNING  W ER1 - N IH0 NG\nWERNLI  W ER1 N - L IY0\nWERNTZ  W ER1 N T S\nWERRE  W EH1 R\nWERRY  W EH1 - R IY0\nWERST  W ER1 S T\nWERT  W ER1 T\nWERTENBERGER  W ER1 - T AH0 N - B ER0 - G ER0\nWERTH  W ER1 TH\nWERTHEIM  W ER1 T - HH AY0 M\nWERTHEIMER  W ER1 T - HH AY0 - M ER0\nWERTHER  W ER1 - DH ER0\nWERTMAN  W ER1 T - M AH0 N\nWERTS  W ER1 T S\nWERTZ  W ER1 T S\nWERY  W EH1 - R IY0\nWES  W EH1 S\nWESAT  W EH1 - S AE2 T\nWESAT(2)  W IY1 - S AE2 T\nWESCH  W EH1 SH\nWESCHE  W EH1 SH\nWESCO  W EH1 S - K OW0\nWESCOAT  W EH1 S - K OW2 T\nWESCOTT  W EH1 - S K AA0 T\nWESELOH  W EY0 - S EY1 - L OW0\nWESELY  W IY1 Z - L IY0\nWESEMAN  W IY1 Z - M AH0 N\nWESEMANN  W IY1 Z - M AH0 N\nWESENBERG  W IY1 - Z AH0 N - B ER0 G\nWESKER  W EH1 - S K ER0\nWESKER'S  W EH1 - S K ER0 Z\nWESLER  W EH1 - S AH0 - L ER0\nWESLER(2)  W EH1 S - L ER0\nWESLEY  W EH1 S - L IY0\nWESLEYAN  W EH1 Z - L IY0 - AH0 N\nWESLIA  W EH1 S - L IY0 - AH0\nWESLIA(2)  HH W EH1 S - L IY0 - AH0\nWESNER  W EH1 S - N ER0\nWESOLEK  W EH1 - S AH0 - L IH0 K\nWESOLOWSKI  V IH0 - S AH0 - L AO1 F S - K IY0\nWESP  W EH1 S P\nWESPAC  W EH1 S - P AE2 K\nWESPERCORP  W EH1 - S P ER0 - K AO2 R P\nWESRAY  W EH1 S - R EY0\nWESS  W EH1 S\nWESSEL  W EH1 - S AH0 L\nWESSELL  W EH1 - S AH0 L\nWESSELLS  W EH1 - S AH0 L Z\nWESSELMAN  W EH1 - S AH0 L - M AH0 N\nWESSELS  W EH1 - S AH0 L Z\nWESSEX  W EH1 - S AH0 K S\nWESSINGER  W EH1 - S IH0 N - JH ER0\nWESSLER  W EH1 S - L ER0\nWESSLING  W EH1 - S AH0 L - IH0 NG\nWESSLING(2)  W EH1 - S L IH0 NG\nWESSMAN  W EH1 S - M AH0 N\nWESSNER  W EH1 S - N ER0\nWESSON  W EH1 - S AH0 N\nWEST  W EH1 S T\nWEST'S  W EH1 S T S\nWESTAIR  W EH1 - S T EH1 R\nWESTALL  W EH1 - S T AH0 L\nWESTALL'S  W EH1 - S T AH0 L Z\nWESTAMERICA  W EH2 - S T AH0 - M EH1 - R IH0 - K AH0\nWESTAMERICA'S  W EH2 - S T AH0 - M EH1 - R IH0 - K AH0 Z\nWESTAR  W EH1 - S T ER0\nWESTBAY  W EH1 S T - B EY2\nWESTBERG  W EH1 S T - B ER0 G\nWESTBERRY  W EH1 S T - B EH2 - R IY0\nWESTBORO  W EH1 S T - B ER0 - OW0\nWESTBOROUGH  W EH1 S T - B ER0 - OW0\nWESTBOUND  W EH1 S T - B AW2 N D\nWESTBRIDGE  W EH1 S T - B R IH2 JH\nWESTBROOK  W EH1 S T - B R UH2 K\nWESTBROOKS  W EH1 S T - B R UH2 K S\nWESTBURNE  W EH1 S T - B ER0 N\nWESTBURY  W EH1 S T - B EH2 - R IY0\nWESTBY  W EH1 S T - B IY0\nWESTCAP  W EH1 S T - K AE2 P\nWESTCHESTER  W EH1 S T - CH EH2 - S T ER0\nWESTCHESTER'S  W EH1 S T - CH EH2 - S T ER0 Z\nWESTCOAST  W EH1 S T - K OW2 S T\nWESTCOAST'S  W EH1 S T - K OW2 S T S\nWESTCORP  W EH1 S T - K AO2 R P\nWESTCOTT  W EH1 S T - K AA2 T\nWESTDEUTSCHE  W EH1 S T - D OY1 CH\nWESTECH  W EH1 S - T EH0 K\nWESTEN  W EH1 - S T AH0 N\nWESTENBERGER  W EH1 - S T AH0 N - B ER0 - G ER0\nWESTENDORF  W EH1 - S T IH0 N - D AO0 R F\nWESTER  W EH1 - S T ER0\nWESTERBECK  W EH1 - S T ER0 - B EH2 K\nWESTERBERG  W EH1 - S T ER0 - B ER0 G\nWESTERFELD  W EH1 - S T ER0 - F EH2 L D\nWESTERFIELD  W EH1 - S T ER0 - F IY2 L D\nWESTERGAARD  W EH1 - S T ER0 - G AA2 R D\nWESTERGARD  W EH1 - S T ER0 - G ER0 D\nWESTERGREN  W EH1 - S T ER0 - G R EH0 N\nWESTERHOFF  W EH1 - S T ER0 - HH AO2 F\nWESTERHOLD  W EH1 - S T ER0 - HH OW2 L D\nWESTERLUND  W EH1 - S T ER0 - L AH0 N D\nWESTERLY  W EH1 - S T ER0 - L IY0\nWESTERMAN  W EH1 - S T ER0 - M AH0 N\nWESTERMANN  W EH1 - S T ER0 - M AH0 N\nWESTERMEYER  W EH1 - S T ER0 - M AY0 - ER0\nWESTERN  W EH1 - S T ER0 N\nWESTERN'S  W EH1 - S T ER0 N Z\nWESTERN(2)  HH W EH1 - S T ER0 N\nWESTERNER  W EH1 S - T ER0 - N ER0\nWESTERNERS  W EH1 S - T ER0 - N ER0 Z\nWESTERNIZATION  W EH2 - S T ER0 - N IH0 - Z EY1 - SH AH0 N\nWESTERNIZE  W EH1 - S T ER0 - N AY2 Z\nWESTERNIZED  W EH1 - S T ER0 - N AY2 Z D\nWESTERNMOST  W EH1 - S T ER0 N - M OW2 S T\nWESTERNS  W EH1 - S T ER0 N Z\nWESTERVELT  W EH1 - S T ER0 - V IH0 L T\nWESTFAELISCHES  W EH1 S T - F EY2 - L IH0 - SH IH0 Z\nWESTFAHL  W EH1 S T - F AA2 L\nWESTFALL  W EH1 S T - F AO2 L\nWESTFED  W EH1 S T - F EH2 D\nWESTFIELD  W EH1 S T - F IY0 L D\nWESTFORD  W EH1 S T - F ER0 D\nWESTGATE  W EH1 S T - G EY2 T\nWESTHAMPTON  W EH2 S T - HH AE1 M P - T AH0 N\nWESTHEIMER  W EH1 S T - HH AY2 - M ER0\nWESTHOFF  W EH1 S T - HH AO2 F\nWESTIN  W EH1 - S T IH0 N\nWESTINGHOUSE  W EH1 - S T IH0 NG - HH AW2 S\nWESTINGHOUSE'S  W EH1 - S T IH0 NG - HH AW2 - S IH0 Z\nWESTLAKE  W EH1 S T - L EY2 K\nWESTLAND  W EH1 S T - L AH0 N D\nWESTLEIGH  W EH1 S T - L AY0\nWESTLEY  W EH1 S T - L IY0\nWESTLING  W EH1 S T - L IH0 NG\nWESTLUND  W EH1 S T - L AH0 N D\nWESTMAN  W EH1 S T - M AH0 N\nWESTMARC  W EH1 S T - M AA2 R K\nWESTMARK  W EH1 S T - M AA2 R K\nWESTMARK'S  W EH1 S T - M AA2 R K S\nWESTMIN  W EH1 S T - M IH0 N\nWESTMINSTER  W EH2 S T - M IH1 N - S T ER0\nWESTMORELAND  W EH0 S T - M AO1 R - L AH0 N D\nWESTON  W EH1 - S T AH0 N\nWESTOVER  W EH1 - S T OW2 - V ER0\nWESTPAC  W EH1 S T - P AE2 K\nWESTPAC'S  W EH1 S T - P AE2 K S\nWESTPHAL  W EH1 S T - F AH0 L\nWESTPHALEN  W EH1 S T - F AH0 - L AH0 N\nWESTPHALIA  W EH1 S T - F EY2 - L IY0 - AH0\nWESTPHALIA(2)  W EH1 S T - F EY2 - L Y AH0\nWESTPORT  W EH1 S T - P AO2 R T\nWESTPRIDE  W EH1 S T - P R AY2 D\nWESTRA  W EH1 S - T R AH0\nWESTRICH  W EH1 - S T R IH0 K\nWESTRICK  W EH1 - S T R IH0 K\nWESTRIDGE  W EH1 S - T R IH2 JH\nWESTROM  W EH1 S - T R AH0 M\nWESTRUM  W EH1 S - T R AH0 M\nWESTRUP  W EH1 S - T R AH0 P\nWESTSIDE  W EH1 S T - S AY1 D\nWESTTECH  W EH1 S - T EH2 K\nWESTTECH'S  W EH1 - S T EH2 K S\nWESTVACO  W EH2 S T - V AE1 - K OW0\nWESTWARD  W EH1 S T - W ER0 D\nWESTWARDS  W EH1 S T - W ER0 D Z\nWESTWOOD  W EH1 S T - W UH2 D\nWESTWOOD'S  W EH1 S T - W UH2 D Z\nWESTWORLD  W EH1 S T - W ER2 L D\nWESUN  W IY1 - S AH2 N\nWET  W EH1 T\nWETHERBEE  W EH1 - DH ER0 - B IY2\nWETHERBY  W EH1 - TH ER0 - B IY0\nWETHERELL  W EH1 - TH ER0 - AH0 L\nWETHERILL  W EH1 - TH ER0 - AH0 L\nWETHERINGTON  W EH1 - DH ER0 - IH0 NG - T AH0 N\nWETHERLY  W EH1 - DH ER0 - L IY0\nWETHINGTON  W EH1 - TH IH0 NG - T AH0 N\nWETLAND  W EH1 T - L AE2 N D\nWETLANDS  W EH1 T - L AE2 N D Z\nWETLANDS'  W EH1 T - L AE2 N D Z\nWETMORE  W EH1 T - M AO0 R\nWETNESS  W EH1 T - N AH0 S\nWETSEL  W EH1 T - S AH0 L\nWETSTEIN  W EH1 T - S T IY2 N\nWETSTEIN(2)  W EH1 T - S T AY2 N\nWETSUIT  W EH1 T - S UW2 T\nWETTENGEL  W EH1 - T IH0 NG - G AH0 L\nWETTER  W EH1 - T ER0\nWETTERAU  W EH1 - T ER0 - AW0\nWETTERGREEN  W EH1 - T ER0 - G R IY2 N\nWETTEST  W EH1 - T AH0 S T\nWETTING  W EH1 - T IH0 NG\nWETTING(2)  HH W EH1 - T IH0 NG\nWETTLAUFER  W EH1 T - L AW0 - F ER0\nWETTSTEIN  W EH1 T - S T AY0 N\nWETTSTEIN(2)  W EH1 T - S T IY0 N\nWETZ  W EH1 T S\nWETZEL  W EH1 T - Z AH0 L\nWETZLER  W EH1 T - S L ER0\nWETZSTEIN  W EH1 T - S T AY0 N\nWETZSTEIN(2)  W EH1 T - S T IY0 N\nWEVER  W IY1 - V ER0\nWEXLER  W EH1 K S - L ER0\nWEXNER  W EH1 K S - N ER0\nWEY  W EY1\nWEYAND  W EY1 - AH0 N D\nWEYANDT  W EY1 - AH0 N T\nWEYANT  W EY1 - AH0 N T\nWEYENBERG  W AY1 N - B ER0 G\nWEYER  W EY1 - ER0\nWEYERHAEUSER  W EH1 R - HH AW2 - Z ER0\nWEYERHAEUSER'S  W EH2 R - HH AW2 - Z ER0 Z\nWEYERS  W EY1 - ER0 Z\nWEYFORTH  W EY1 - F AO2 R TH\nWEYGANDT  W EY1 - G AH0 N T\nWEYHRAUCH  W EY1 - R AW2 K\nWEYL  W EY1 L\nWEYLAND  W EY1 - L AH0 N D\nWEYLIN  W EY1 - L IH0 N\nWEYMAN  W EY1 - M AH0 N\nWEYMER  W EY1 - M ER0\nWEYMOUTH  W EY1 - M AH0 TH\nWEYRAUCH  W EH1 - R AW0 K\nWEYRICH  W EH1 - R IH0 K\nWEYRICK  W EY1 - R IH0 K\nWHACK  W AE1 K\nWHACK(2)  HH W AE1 K\nWHACKED  W AE1 K T\nWHACKED(2)  HH W AE1 K T\nWHACKING  W AE1 - K IH0 NG\nWHACKING(2)  HH W AE1 - K IH0 NG\nWHACKO  W AE1 - K OW0\nWHACKS  W AE1 K S\nWHACKS(2)  HH W AE1 K S\nWHALE  W EY1 L\nWHALE'S  W EY1 L Z\nWHALE'S(2)  HH W EY1 L Z\nWHALE(2)  HH W EY1 L\nWHALEN  W EY1 - L AH0 N\nWHALEN(2)  HH W EY1 - L AH0 N\nWHALER  W EY1 - L ER0\nWHALER(2)  HH W EY1 - L ER0\nWHALERS  W EY1 - L ER0 Z\nWHALERS(2)  HH W EY1 - L ER0 Z\nWHALES  W EY1 L Z\nWHALES(2)  HH W EY1 L Z\nWHALEY  W EY1 - L IY0\nWHALEY(2)  HH W EY1 - L IY0\nWHALIN  W AE1 - L IH0 N\nWHALING  W EY1 - L IH0 NG\nWHALING(2)  HH W EY1 - L IH0 NG\nWHALLEY  W AE1 - L IY0\nWHAM  W AE1 M\nWHAM(2)  HH W AE1 M\nWHAMMY  W AE1 - M IY0\nWHAMMY(2)  HH W AE1 - M IY0\nWHAMPOA  W AE0 M - P OW1 - AH0\nWHAN  W AE1 N\nWHAN(2)  HH W AE1 N\nWHANG  W AE1 NG\nWHANG(2)  HH W AE1 NG\nWHARF  W AO1 R F\nWHARF'S  W AO1 R F S\nWHARF'S(2)  HH W AO1 R F S\nWHARF(2)  HH W AO1 R F\nWHARFF  W AA1 R F\nWHARFF(2)  HH W AA1 R F\nWHARRY  W AE1 - R IY0\nWHARRY(2)  HH W AE1 - R IY0\nWHARTON  W AO1 R - T AH0 N\nWHARTON'S  W AO1 R - T AH0 N Z\nWHAT  W AH1 T\nWHAT'D  W AH1 - T IH0 D\nWHAT'D(2)  HH W AH1 - T IH0 D\nWHAT'LL  W AH1 - T AH0 L\nWHAT'LL(2)  HH W AH1 - T AH0 L\nWHAT'RE  W AH1 - T ER0\nWHAT'RE(2)  HH W AH1 - T ER0\nWHAT'S  W AH1 T S\nWHAT'S(2)  HH W AH1 T S\nWHAT(2)  HH W AH1 T\nWHATEVER  W AH2 T - EH1 - V ER0\nWHATEVER'S  W AH2 T - EH1 - V ER0 Z\nWHATEVER'S(2)  HH W AH2 - T EH1 - V ER0 Z\nWHATEVER(2)  HH W AH2 T - EH1 - V ER0\nWHATLEY  W AH1 T - L IY0\nWHATLEY(2)  HH W AH1 T - L IY0\nWHATNOT  W AH1 T - N AA2 T\nWHATNOT(2)  HH W AH1 T - N AA2 T\nWHATS  W AH0 T S\nWHATS(2)  HH W AH0 T S\nWHATSOEVER  W AH2 T - S OW0 - EH1 - V ER0\nWHATSOEVER(2)  HH W AH2 T - S OW0 - EH1 - V ER0\nWHAY-YU  W EY1 - Y UW1\nWHAY-YU(2)  HH W EY1 - Y UW1\nWHEAT  W IY1 T\nWHEAT(2)  HH W IY1 T\nWHEATEN  W IY1 - T AH0 N\nWHEATEN(2)  HH W IY1 - T AH0 N\nWHEATIE  W IY1 - T IY0\nWHEATIE(2)  HH W IY1 - T IY0\nWHEATIES  W IY1 - T IY0 Z\nWHEATIES(2)  HH W IY1 - T IY0 Z\nWHEATLEY  W IY1 T - L IY0\nWHEATLEY(2)  HH W IY1 T - L IY0\nWHEATLY  W IY1 T - L IY0\nWHEATLY(2)  HH W IY1 T - L IY0\nWHEATON  W IY1 - T AH0 N\nWHEATON(2)  HH W IY1 - T AH0 N\nWHEDBEE  W EH1 D - B IY2\nWHEDBEE(2)  HH W EH1 D - B IY2\nWHEDON  W EH1 - D AH0 N\nWHEDON(2)  HH W EH1 - D AH0 N\nWHEEL  W IY1 L\nWHEEL(2)  HH W IY1 L\nWHEELABRATOR  W IY2 - L AH0 - B R EY1 - T ER0\nWHEELABRATOR(2)  HH W IY2 - L AH0 - B R EY1 - T ER0\nWHEELAN  W IY1 - L AH0 N\nWHEELAN(2)  HH W IY1 - L AH0 N\nWHEELAND  W IY1 - L AH0 N D\nWHEELAND(2)  HH W IY1 - L AH0 N D\nWHEELBARROW  W IY1 L - B EH2 - R OW0\nWHEELBARROW(2)  HH W IY1 L - B EH2 - R OW0\nWHEELBARROWS  W IY1 L - B EH2 - R OW0 Z\nWHEELBARROWS(2)  HH W IY1 L - B EH2 - R OW0 Z\nWHEELBASE  W IY1 L - B EY2 S\nWHEELBASE(2)  HH W IY1 L - B EY2 S\nWHEELCHAIR  W IY1 L - CH EH2 R\nWHEELCHAIR(2)  HH W IY1 L - CH EH2 R\nWHEELCHAIRS  W IY1 L - CH EH2 R Z\nWHEELCHAIRS(2)  HH W IY1 L - CH EH2 R Z\nWHEELDON  W IY1 L - D AH0 N\nWHEELDON(2)  HH W IY1 L - D AH0 N\nWHEELED  W IY1 L D\nWHEELED(2)  HH W IY1 L D\nWHEELER  W IY1 - L ER0\nWHEELER'S  W IY1 - L ER0 Z\nWHEELER'S(2)  HH W IY1 - L ER0 Z\nWHEELER(2)  HH W IY1 - L ER0\nWHEELERS  W IY1 - L ER0 Z\nWHEELERS(2)  HH W IY1 - L ER0 Z\nWHEELESS  W IY1 - L AH0 S\nWHEELESS(2)  HH W IY1 - L AH0 S\nWHEELING  W IY1 - L IH0 NG\nWHEELING'S  W IY1 - L IH0 NG Z\nWHEELING'S(2)  HH W IY1 - L IH0 NG Z\nWHEELING(2)  HH W IY1 - L IH0 NG\nWHEELIS  W IY1 - L IH0 S\nWHEELIS(2)  HH W IY1 - L IH0 S\nWHEELOCK  W IY1 - L AA2 K\nWHEELOCK(2)  HH W IY1 - L AA2 K\nWHEELON  W IY1 - L AH0 N\nWHEELON(2)  HH W IY1 - L AH0 N\nWHEELS  W IY1 L Z\nWHEELS(2)  HH W IY1 L Z\nWHEELUS  W IY1 - L AH0 S\nWHEELUS(2)  HH W IY1 - L AH0 S\nWHEELWRIGHT  W IY1 L - R AY2 T\nWHEELWRIGHT(2)  HH W IY1 L - R AY2 T\nWHEELWRITER  W IY1 L - R AY2 - T ER0\nWHEELWRITER(2)  HH W IY1 L - R AY2 - T ER0\nWHEEZE  W IY1 Z\nWHEEZE(2)  HH W IY1 Z\nWHEEZES  W IY1 - Z AH0 Z\nWHEEZES(2)  HH W IY1 - Z AH0 Z\nWHEEZES(3)  W IY1 - Z IH0 Z\nWHEEZING  W IY1 - Z IH0 NG\nWHEEZING(2)  HH W IY1 - Z IH0 NG\nWHELAN  W EH1 - L AH0 N\nWHELAN(2)  HH W EH1 - L AH0 N\nWHELAN(3)  HH W IY1 - L AH0 N\nWHELAN(4)  W IY1 - L AH0 N\nWHELCHEL  W EH1 L - CH AH0 L\nWHELCHEL(2)  HH W EH1 L - CH AH0 L\nWHELESS  W IY1 - L IH0 S\nWHELESS(2)  HH W IY1 - L IH0 S\nWHELPLEY  W EH1 L P - L IY0\nWHELPLEY(2)  HH W EH1 L P - L IY0\nWHELTON  W EH1 L - T AH0 N\nWHELTON(2)  HH W EH1 L - T AH0 N\nWHEN  W EH1 N\nWHEN'LL  W EH1 - N AH0 L\nWHEN'LL(2)  HH W EH1 - N AH0 L\nWHEN'S  W EH1 N Z\nWHEN'S(2)  HH W EH1 N Z\nWHEN(2)  HH W EH1 N\nWHEN(3)  W IH1 N\nWHEN(4)  HH W IH1 N\nWHENCE  W EH1 N S\nWHENCE(2)  HH W EH1 N S\nWHENEVER  W EH0 N - EH1 - V ER0\nWHENEVER(2)  HH W EH0 - N EH1 - V ER0\nWHERE  W EH1 R\nWHERE'D  W EH1 R D\nWHERE'D(2)  HH W EH1 R D\nWHERE'S  W EH1 R Z\nWHERE'S(2)  HH W EH1 R Z\nWHERE(2)  HH W EH1 R\nWHEREABOUTS  W EH1 - R AH0 - B AW2 T S\nWHEREABOUTS(2)  HH W EH1 - R AH0 - B AW2 T S\nWHEREAS  W EH0 - R AE1 Z\nWHEREAS(2)  HH W EH0 - R AE1 Z\nWHEREBY  W EH0 R - B AY1\nWHEREBY(2)  HH W EH0 R - B AY1\nWHEREIN  W EH0 - R IH1 N\nWHEREIN(2)  HH W EH0 - R IH1 N\nWHEREUPON  W EH1 - R AH0 - P AA1 N\nWHEREUPON(2)  HH W EH1 - R AH0 - P AA1 N\nWHEREVER  W EH0 - R EH1 - V ER0\nWHEREVER(2)  HH W EH0 - R EH1 - V ER0\nWHEREWITHAL  W EH1 R - W IH0 - DH AO2 L\nWHEREWITHAL(2)  HH W EH1 R - W IH0 - DH AO2 L\nWHERLEY  W ER1 - L IY0\nWHERLEY(2)  HH W ER1 - L IY0\nWHERRY  W EH1 - R IY0\nWHERRY(2)  HH W EH1 - R IY0\nWHET  W EH1 T\nWHET(2)  HH W EH1 T\nWHETHER  W EH1 - DH ER0\nWHETHER(2)  HH W EH1 - DH ER0\nWHETSEL  W EH1 T - S AH0 L\nWHETSEL(2)  HH W EH1 T - S AH0 L\nWHETSELL  W EH1 T - S AH0 L\nWHETSELL(2)  HH W EH1 T - S AH0 L\nWHETSTINE  W EH1 T - S T IY0 N\nWHETSTINE(2)  HH W EH1 T - S T IY0 N\nWHETSTONE  W EH1 T - S T OW2 N\nWHETSTONE(2)  HH W EH1 T - S T OW2 N\nWHETTED  W EH1 - T IH0 D\nWHETTED(2)  HH W EH1 - T IH0 D\nWHETZEL  W EH1 T - Z AH0 L\nWHETZEL(2)  HH W EH1 T - Z AH0 L\nWHEW  W UW1\nWHEW(2)  HH W UW1\nWHEW(3)  HH Y UW1\nWHEY  W EY1\nWHEY(2)  HH W EY1\nWHICH  W IH1 CH\nWHICH'RE  W IH1 - CH ER0\nWHICH'RE(2)  HH W IH1 - CH ER0\nWHICH'S  W IH1 - CH IH0 Z\nWHICH'S(2)  HH W IH1 - CH IH0 Z\nWHICH(2)  HH W IH1 CH\nWHICHARD  W IH1 - CH ER0 D\nWHICHARD(2)  HH W IH1 - CH ER0 D\nWHICHEVER  W IH0 CH - EH1 - V ER0\nWHICHEVER(2)  HH W IH0 CH - EH1 - V ER0\nWHICKER  W IH1 - K ER0\nWHICKER(2)  HH W IH1 - K ER0\nWHIDBY  W IH1 D - B IY0\nWHIDBY(2)  HH W IH1 D - B IY0\nWHIDDEN  W IH1 - D AH0 N\nWHIDDEN(2)  HH W IH1 - D AH0 N\nWHIDDON  W IH1 - D AH0 N\nWHIDDON(2)  HH W IH1 - D AH0 N\nWHIFF  W IH1 F\nWHIFF(2)  HH W IH1 F\nWHIG  W IH1 G\nWHIG(2)  HH W IH1 G\nWHIGHAM  W IH1 - G AH0 M\nWHIGHAM(2)  HH W IH1 - G AH0 M\nWHIGS  W IH1 G Z\nWHIGS(2)  HH W IH1 G Z\nWHILDEN  W AY1 L - D AH0 N\nWHILDEN(2)  HH W AY1 L - D AH0 N\nWHILE  W AY1 L\nWHILE(2)  HH W AY1 L\nWHILES  W AY1 L Z\nWHILES(2)  HH W AY1 L Z\nWHILST  W AY1 L S T\nWHIM  W IH1 M\nWHIM(2)  HH W IH1 M\nWHIMPER  W IH1 M - P ER0\nWHIMPER(2)  HH W IH1 M - P ER0\nWHIMPERING  W IH1 M - P ER0 - IH0 NG\nWHIMPERING(2)  HH W IH1 M - P ER0 - IH0 NG\nWHIMS  W IH1 M Z\nWHIMS(2)  HH W IH1 M Z\nWHIMSICAL  W IH1 M - Z IH0 - K AH0 L\nWHIMSICAL(2)  HH W IH1 M - Z IH0 - K AH0 L\nWHIMSY  W IH1 M - S IY0\nWHIMSY(2)  HH W IH1 M - S IY0\nWHINE  W AY1 N\nWHINE(2)  HH W AY1 N\nWHINER  W AY1 - N ER0\nWHINER(2)  HH W AY1 - N ER0\nWHINERS  W AY1 - N ER0 Z\nWHINERS(2)  HH W AY1 - N ER0 Z\nWHINERY  W AY1 - N ER0 - IY0\nWHINERY(2)  HH W AY1 - N ER0 - IY0\nWHINES  W AY1 N Z\nWHINES(2)  HH W AY1 N Z\nWHINING  W AY1 - N IH0 NG\nWHINING(2)  HH W AY1 - N IH0 NG\nWHINNERY  W IH1 - N ER0 - IY0\nWHINNERY(2)  HH W IH1 - N ER0 - IY0\nWHINNEY  W IH1 - N IY0\nWHINNEY(2)  HH W IH1 - N IY0\nWHINY  W AY1 - N IY0\nWHINY(2)  HH W AY1 - N IY0\nWHIP  W IH1 P\nWHIP(2)  HH W IH1 P\nWHIPKEY  W IH1 P - K IY2\nWHIPKEY(2)  HH W IH1 P - K IY2\nWHIPLASH  W IH1 P - L AE2 SH\nWHIPLASH(2)  HH W IH1 P - L AE2 SH\nWHIPLASHES  W IH1 P - L AE2 - SH AH0 Z\nWHIPLASHES(2)  HH W IH1 P - L AE2 - SH AH0 Z\nWHIPP  W IH1 P\nWHIPP(2)  HH W IH1 P\nWHIPPANY  W IH1 - P AH0 - N IY0\nWHIPPANY(2)  HH W IH1 - P AH0 - N IY0\nWHIPPED  W IH1 P T\nWHIPPED(2)  HH W IH1 P T\nWHIPPING  W IH1 - P IH0 NG\nWHIPPING(2)  HH W IH1 - P IH0 NG\nWHIPPLE  W IH1 - P AH0 L\nWHIPPLE'S  W IH1 - P AH0 L Z\nWHIPPLE'S(2)  HH W IH1 - P AH0 L Z\nWHIPPLE(2)  HH W IH1 - P AH0 L\nWHIPPOORWILLS  W IH1 P - ER0 - W IH2 L Z\nWHIPPOORWILLS(2)  HH W IH1 P - ER0 - W IH2 L Z\nWHIPPS  W IH1 P S\nWHIPPS(2)  HH W IH1 P S\nWHIPS  W IH1 P S\nWHIPS(2)  HH W IH1 P S\nWHIPSAW  W IH1 P - S AO2\nWHIPSAW(2)  HH W IH1 P - S AO2\nWHIPSAWED  W IH1 P - S AO2 D\nWHIPSAWED(2)  HH W IH1 P - S AO2 D\nWHIPSAWING  W IH1 P - S AO2 - IH0 NG\nWHIPSAWING(2)  HH W IH1 P - S AO2 - IH0 NG\nWHIRL  W ER1 L\nWHIRL(2)  HH W ER1 L\nWHIRLED  W ER1 L D\nWHIRLED(2)  HH W ER1 L D\nWHIRLEY  W ER1 - L IY0\nWHIRLEY(2)  HH W ER1 - L IY0\nWHIRLING  W ER1 - L IH0 NG\nWHIRLING(2)  HH W ER1 - L IH0 NG\nWHIRLPOOL  W ER1 L - P UW2 L\nWHIRLPOOL'S  W ER1 L - P UW2 L Z\nWHIRLPOOL'S(2)  HH W ER1 L - P UW2 L Z\nWHIRLPOOL(2)  HH W ER1 L - P UW2 L\nWHIRLPOOLS  W ER1 L - P UW2 L Z\nWHIRLPOOLS(2)  HH W ER1 L - P UW2 L Z\nWHIRLWIND  W ER1 L - W IH2 N D\nWHIRLWIND(2)  HH W ER1 L - W IH2 N D\nWHIRRING  W ER1 - IH0 NG\nWHIRRING(2)  HH W ER1 - IH0 NG\nWHISENAND  W IH1 - S IH0 - N AE0 N D\nWHISENAND(2)  HH W IH1 - S IH0 - N AE0 N D\nWHISENANT  W IH1 - S IH0 - N AH0 N T\nWHISENANT(2)  HH W IH1 - S IH0 - N AH0 N T\nWHISENHUNT  W AY1 - Z AH0 N - HH AH2 N T\nWHISENHUNT(2)  HH W AY1 - Z AH0 N - HH AH2 N T\nWHISK  W IH1 S K\nWHISK(2)  HH W IH1 S K\nWHISKED  W IH1 S K T\nWHISKED(2)  HH W IH1 S K T\nWHISKER  W IH1 - S K ER0\nWHISKER(2)  HH W IH1 - S K ER0\nWHISKERS  W IH1 - S K ER0 Z\nWHISKERS(2)  HH W IH1 - S K ER0 Z\nWHISKEY  W IH1 S - K IY0\nWHISKEY(2)  HH W IH1 S - K IY0\nWHISKEYS  W IH1 - S K IY0 Z\nWHISKEYS(2)  HH W IH1 - S K IY0 Z\nWHISKS  W IH1 S K S\nWHISKS(2)  HH W IH1 S K S\nWHISKY  W IH1 S - K IY0\nWHISKY(2)  HH W IH1 S - K IY0\nWHISLER  W IH1 S - L ER0\nWHISLER(2)  HH W IH1 S - L ER0\nWHISMAN  W IH1 S - M AH0 N\nWHISMAN(2)  HH W IH1 S - M AH0 N\nWHISNANT  W IH1 S - N AH0 N T\nWHISNANT(2)  HH W IH1 S - N AH0 N T\nWHISNER  W IH1 S - N ER0\nWHISNER(2)  HH W IH1 S - N ER0\nWHISONANT  W IH1 - S AH0 - N AH0 N T\nWHISPER  W IH1 - S P ER0\nWHISPER(2)  HH W IH1 - S P ER0\nWHISPERED  W IH1 - S P ER0 D\nWHISPERED(2)  HH W IH1 - S P ER0 D\nWHISPERING  W IH1 - S P ER0 - IH0 NG\nWHISPERING(2)  HH W IH1 - S P ER0 - IH0 NG\nWHISPERS  W IH1 - S P ER0 Z\nWHISPERS(2)  HH W IH1 - S P ER0 Z\nWHISTLE  W IH1 - S AH0 L\nWHISTLE(2)  HH W IH1 - S AH0 L\nWHISTLEBLOWER  W IH1 - S AH0 L - B L OW2 - ER0\nWHISTLEBLOWER(2)  HH W IH1 - S AH0 L - B L OW2 - ER0\nWHISTLEBLOWERS  W IH1 - S AH0 L - B L OW2 - ER0 Z\nWHISTLEBLOWERS(2)  HH W IH1 - S AH0 L - B L OW2 - ER0 Z\nWHISTLED  W IH1 - S AH0 L D\nWHISTLED(2)  HH W IH1 - S AH0 L D\nWHISTLER  W IH1 S - L ER0\nWHISTLER(2)  HH W IH1 S - L ER0\nWHISTLERS  W IH1 S - L ER0 Z\nWHISTLERS(2)  HH W IH1 S - L ER0 Z\nWHISTLES  W IH1 - S AH0 L Z\nWHISTLES(2)  HH W IH1 - S AH0 L Z\nWHISTLING  W IH1 - S L IH0 NG\nWHISTLING(2)  HH W IH1 - S L IH0 NG\nWHISTON  W IH1 - S T AH0 N\nWHISTON(2)  HH W IH1 - S T AH0 N\nWHIT  W IH1 T\nWHIT(2)  HH W IH1 T\nWHITACRE  W IH1 - T AH0 - K ER0\nWHITACRE(2)  HH W IH1 - T AH0 - K ER0\nWHITAKER  W IH1 - T AH0 - K ER0\nWHITAKER(2)  HH W IH1 - T AH0 - K ER0\nWHITBECK  W IH1 T - B EH2 K\nWHITBECK(2)  HH W IH1 T - B EH2 K\nWHITBREAD  W IH1 T - B R EH2 D\nWHITBREAD(2)  HH W IH1 T - B R EH2 D\nWHITBY  W IH1 T - B IY0\nWHITBY(2)  HH W IH1 T - B IY0\nWHITCHER  W IH1 - CH ER0\nWHITCHER(2)  HH W IH1 - CH ER0\nWHITCHURCH  W IH1 T - CH ER2 CH\nWHITCHURCH(2)  HH W IH1 T - CH ER2 CH\nWHITCOMB  W IH1 T - K AH0 M\nWHITCOMB(2)  HH W IH1 T - K AH0 M\nWHITCRAFT  W IH1 T - K R AE2 F T\nWHITCRAFT(2)  HH W IH1 T - K R AE2 F T\nWHITE  W AY1 T\nWHITE'S  W AY1 T S\nWHITE'S(2)  HH W AY1 T S\nWHITE(2)  HH W AY1 T\nWHITEAKER  W IH1 - T AH0 - K ER0\nWHITEAKER(2)  HH W IH1 - T AH0 - K ER0\nWHITEBREAD  W AY1 T - B R EH2 D\nWHITEBREAD(2)  HH W AY1 T - B R EH2 D\nWHITECOTTON  W AY1 T - K AA2 - T AH0 N\nWHITECOTTON(2)  HH W AY1 T - K AA2 - T AH0 N\nWHITED  W AY1 - T IH0 D\nWHITED(2)  HH W AY1 - T IH0 D\nWHITEFIELD  W AY1 T - F IY2 L D\nWHITEFIELD(2)  HH W AY1 T - F IY2 L D\nWHITEFISH  W AY1 T - F IH2 SH\nWHITEFISH(2)  HH W AY1 T - F IH2 SH\nWHITEFORD  W AY1 T - F AO0 R D\nWHITEFORD(2)  HH W AY1 T - F AO0 R D\nWHITEHAIR  W AY1 T - HH EH1 R\nWHITEHAIR(2)  HH W AY1 T - HH EH1 R\nWHITEHALL  W AY1 T - HH AO2 L\nWHITEHALL'S  W AY1 T - HH AO2 L Z\nWHITEHALL'S(2)  HH W AY1 T - HH AO2 L Z\nWHITEHALL(2)  HH W AY1 T - HH AO2 L\nWHITEHEAD  W AY1 T - HH EH2 D\nWHITEHEAD'S  W AY1 T - HH EH2 D Z\nWHITEHEAD'S(2)  HH W AY1 T - HH EH2 D Z\nWHITEHEAD(2)  HH W AY1 T - HH EH2 D\nWHITEHILL  W AY1 T - HH IH2 L\nWHITEHILL(2)  HH W AY1 T - HH IH2 L\nWHITEHORN  W AY1 T - HH AO2 R N\nWHITEHORN(2)  HH W AY1 T - HH AO2 R N\nWHITEHORSE  W AY1 T - HH AO2 R S\nWHITEHORSE(2)  HH W AY1 T - HH AO2 R S\nWHITEHOUSE  W AY1 T - HH AW2 S\nWHITEHOUSE(2)  HH W AY1 T - HH AW2 S\nWHITEHURST  W AY1 T - HH ER2 S T\nWHITEHURST'S  W AY1 T - HH ER2 S T\nWHITEHURST(2)  HH W AY1 T - HH ER2 S T\nWHITELAW  W AY1 T - L AO2\nWHITELAW(2)  HH W AY1 T - L AO2\nWHITELEY  W AY1 T - L IY0\nWHITELEY(2)  HH W AY1 T - L IY0\nWHITELOCK  W AY1 T - L AA2 K\nWHITELOCK(2)  HH W AY1 T - L AA2 K\nWHITELY  W AY1 T - L IY0\nWHITELY(2)  HH W AY1 T - L IY0\nWHITEMAN  W AY1 T - M AH0 N\nWHITEMAN(2)  HH W AY1 T - M AH0 N\nWHITEMONT  W AY1 T - M AA2 N T\nWHITEMONT(2)  HH W AY1 T - M AA2 N T\nWHITEN  W AY1 - T AH0 N\nWHITEN(2)  HH W AY1 - T AH0 N\nWHITENACK  W AY1 T - N AE2 K\nWHITENACK(2)  HH W AY1 T - N AE2 K\nWHITENEIR  W AY1 T - N IH2 R\nWHITENEIR(2)  HH W AY1 T - N IH2 R\nWHITENER  W AY1 T - N ER0\nWHITENER(2)  HH W AY1 T - N ER0\nWHITENESS  W AY1 T - N AH0 S\nWHITENESS(2)  HH W AY1 T - N AH0 S\nWHITENIGHT  W AY1 T - N AY2 T\nWHITENIGHT(2)  HH W AY1 T - N AY2 T\nWHITENING  W AY1 - T IH0 - N IH0 NG\nWHITENING(2)  W AY1 T - N IH0 NG\nWHITENING(3)  HH W AY1 - T IH0 - N IH0 NG\nWHITENING(4)  HH W AY1 T - N IH0 NG\nWHITER  W AY1 - T ER0\nWHITER(2)  HH W AY1 - T ER0\nWHITES  W AY1 T S\nWHITES(2)  HH W AY1 T S\nWHITESCARVER  W AY1 T - S K AA2 R - V ER0\nWHITESCARVER(2)  HH W AY1 T - S K AA2 R - V ER0\nWHITESEL  W AY1 T - S EH2 L\nWHITESEL(2)  HH W AY1 T - S EH2 L\nWHITESELL  W AY1 T - S EH2 L\nWHITESELL(2)  HH W AY1 T - S EH2 L\nWHITESIDE  W AY1 T - S AY2 D\nWHITESIDE(2)  HH W AY1 T - S AY2 D\nWHITESIDES  W AY1 T - S AY2 D Z\nWHITESIDES(2)  HH W AY1 T - S AY2 D Z\nWHITEST  W AY1 - T IH0 S T\nWHITEST(2)  HH W AY1 - T IH0 S T\nWHITESTONE  W AY1 T - S T OW2 N\nWHITESTONE(2)  HH W AY1 T - S T OW2 N\nWHITETAIL  W AY1 T - T EY2 L\nWHITETAIL(2)  HH W AY1 T - T EY2 L\nWHITETAIL(3)  HH W AY1 - T EY2 L\nWHITEWASH  W AY1 T - W AA2 SH\nWHITEWASH(2)  HH W AY1 T - W AA2 SH\nWHITEWASHED  W AY1 T - W AA2 SH T\nWHITEWASHED(2)  HH W AY1 T - W AA2 SH T\nWHITEWATER  W AY1 T - W AO2 - T ER0\nWHITEWATER'S  W AY1 T - W AO2 - T ER0 Z\nWHITEWATER'S(2)  HH W AY1 T - W AO2 - T ER0 Z\nWHITEWATER(2)  HH W AY1 T - W AO2 - T ER0\nWHITEY  W AY1 - T IY2\nWHITEY(2)  HH W AY1 - T IY2\nWHITEY(3)  HH W AY1 - T IY0\nWHITFIELD  W IH1 T - F IY0 L D\nWHITFIELD(2)  HH W IH1 T - F IY0 L D\nWHITFILL  W IH1 T - F IH2 L\nWHITFILL(2)  HH W IH1 T - F IH2 L\nWHITFORD  W IH1 T - F ER0 D\nWHITFORD(2)  HH W IH1 T - F ER0 D\nWHITHAM  W IH1 - TH AH0 M\nWHITHAM(2)  HH W IH1 - TH AH0 M\nWHITHAM(3)  HH W IH1 - T AH0 M\nWHITHER  W IH1 - DH ER0\nWHITHER(2)  HH W IH1 - DH ER0\nWHITING  W AY1 - T IH0 NG\nWHITING(2)  HH W AY1 - T IH0 NG\nWHITINGS  W AY1 - T IH0 NG Z\nWHITINGS(2)  HH W AY1 - T IH0 NG Z\nWHITIS  W AY1 - T IH0 S\nWHITIS(2)  HH W AY1 - T IH0 S\nWHITISH  W AY1 - T IH0 SH\nWHITISH(2)  HH W AY1 - T IH0 SH\nWHITLATCH  W IH1 T - L AE2 CH\nWHITLATCH(2)  HH W IH1 T - L AE2 CH\nWHITLEDGE  W IH1 T - L EH2 JH\nWHITLEDGE(2)  HH W IH1 T - L EH2 JH\nWHITLEY  W IH1 T - L IY0\nWHITLEY(2)  HH W IH1 T - L IY0\nWHITLING  W IH1 T - L IH0 NG\nWHITLING(2)  HH W IH1 T - L IH0 NG\nWHITLOCK  W IH1 T - L AA2 K\nWHITLOCK(2)  HH W IH1 T - L AA2 K\nWHITLOW  W IH1 T - L OW2\nWHITLOW(2)  HH W IH1 T - L OW2\nWHITLY  W IH1 T - L IY0\nWHITLY(2)  HH W IH1 T - L IY0\nWHITMAN  W IH1 T - M AH0 N\nWHITMAN'S  W IH1 T - M AH0 N Z\nWHITMAN'S(2)  HH W IH1 T - M AH0 N Z\nWHITMAN(2)  HH W IH1 T - M AH0 N\nWHITMARSH  W IH1 T - M AA2 R SH\nWHITMARSH(2)  HH W IH1 T - M AA2 R SH\nWHITMER  W IH1 T - M ER0\nWHITMER(2)  HH W IH1 T - M ER0\nWHITMILL  W IH1 T - M IH2 L\nWHITMILL(2)  HH W IH1 T - M IH2 L\nWHITMIRE  W IH1 T - M AY2 R\nWHITMIRE(2)  HH W IH1 T - M AY2 R\nWHITMORE  W IH1 T - M AO0 R\nWHITMORE(2)  HH W IH1 T - M AO0 R\nWHITMOYER  W IH1 T - M OY2 - ER0\nWHITMOYER(2)  HH W IH1 T - M OY2 - ER0\nWHITMYER  W IH1 T - M AY2 - ER0\nWHITMYER(2)  HH W IH1 T - M AY2 - ER0\nWHITNER  W IH1 T - N ER0\nWHITNER(2)  HH W IH1 T - N ER0\nWHITNEY  W IH1 T - N IY0\nWHITNEY'S  W IH1 T - N IY0 Z\nWHITNEY'S(2)  HH W IH1 T - N IY0 Z\nWHITNEY(2)  HH W IH1 T - N IY0\nWHITON  W IH1 - T AH0 N\nWHITON(2)  HH W IH1 - T AH0 N\nWHITROW  W IH1 - T R OW2\nWHITROW(2)  HH W IH1 - T R OW2\nWHITSEL  W IH1 T - S AH0 L\nWHITSEL(2)  HH W IH1 T - S AH0 L\nWHITSELL  W IH1 T - S AH0 L\nWHITSELL(2)  HH W IH1 T - S AH0 L\nWHITSETT  W IH1 T - S IH0 T\nWHITSETT(2)  HH W IH1 T - S IH0 T\nWHITSITT  W IH1 T - S IH0 T\nWHITSITT(2)  HH W IH1 T - S IH0 T\nWHITSON  W IH1 T - S AH0 N\nWHITSON(2)  HH W IH1 T - S AH0 N\nWHITT  W IH1 T\nWHITT(2)  HH W IH1 T\nWHITTAKER  W IH1 - T AH0 - K ER0\nWHITTAKER(2)  HH W IH1 - T AH0 - K ER0\nWHITTED  W IH1 - T IH0 D\nWHITTED(2)  HH W IH1 - T IH0 D\nWHITTEMORE  W IH1 T - M AO0 R\nWHITTEMORE(2)  HH W IH1 T - M AO0 R\nWHITTEN  W IH1 - T AH0 N\nWHITTEN(2)  HH W IH1 - T AH0 N\nWHITTENBERG  W IH1 - T AH0 N - B ER0 G\nWHITTENBERG(2)  HH W IH1 - T AH0 N - B ER0 G\nWHITTENBURG  W IH1 - T AH0 N - B ER0 G\nWHITTENBURG(2)  HH W IH1 - T AH0 N - B ER0 G\nWHITTET  W IH1 - T IH0 T\nWHITTET(2)  HH W IH1 - T IH0 T\nWHITTIER  W IH1 - T IY0 - ER0\nWHITTIER(2)  HH W IH1 - T IY0 - ER0\nWHITTING  W IH1 - T IH0 NG\nWHITTING(2)  HH W IH1 - T IH0 NG\nWHITTINGHAM  W IH1 - T IH0 NG - HH AE2 M\nWHITTINGHAM(2)  HH W IH1 - T IH0 NG - HH AE2 M\nWHITTINGHILL  W IH1 - T IH0 NG - HH IH2 L\nWHITTINGHILL(2)  HH W IH1 - T IH0 NG - HH IH2 L\nWHITTINGTON  W IH1 - T IH0 NG - T AH0 N\nWHITTINGTON(2)  HH W IH1 - T IH0 NG - T AH0 N\nWHITTLE  W IH1 - T AH0 L\nWHITTLE'S  W IH1 - T AH0 L Z\nWHITTLE'S(2)  HH W IH1 - T AH0 L Z\nWHITTLE(2)  HH W IH1 - T AH0 L\nWHITTLED  W IH1 - T AH0 L D\nWHITTLED(2)  HH W IH1 - T AH0 L D\nWHITTLESEY  W IH1 - T AH0 L - S IY0\nWHITTLESEY(2)  HH W IH1 - T AH0 L - S IY0\nWHITTLING  W IH1 T - L IH0 NG\nWHITTLING(2)  HH W IH1 T - L IH0 NG\nWHITTON  W IH1 - T AH0 N\nWHITTON(2)  HH W IH1 - T AH0 N\nWHITTY  W IH1 - T IY0\nWHITTY(2)  HH W IH1 - T IY0\nWHITWAM  W IH1 T - W AA0 M\nWHITWAM(2)  HH W IH1 T - W AA0 M\nWHITWELL  W IH1 T - W EH2 L\nWHITWELL(2)  HH W IH1 T - W EH2 L\nWHITWORTH  W IH1 T - W ER2 TH\nWHITWORTH(2)  HH W IH1 T - W ER2 TH\nWHIZ  W IH1 Z\nWHIZ(2)  HH W IH1 Z\nWHIZZED  W IH1 Z D\nWHIZZED(2)  HH W IH1 Z D\nWHIZZER  HH W IH1 - Z ER0\nWHIZZER  W IH1 - Z ER0\nWHIZZES  W IH1 - Z IH0 Z\nWHIZZES(2)  HH W IH1 - Z IH0 Z\nWHIZZING  W IH1 - Z IH0 NG\nWHIZZING(2)  HH W IH1 - Z IH0 NG\nWHO  HH UW1\nWHO'D  HH UW1 D\nWHO'LL  HH UW1 L\nWHO'RE  HH UW1 - ER0\nWHO'S  HH UW1 Z\nWHO'VE  HH UW0 V\nWHOA  W OW1\nWHOA(2)  HH W OW1\nWHOA(3)  HH OW1\nWHOBREY  W AA1 - B R IY0\nWHODUNIT  HH UW0 - D AH1 - N IH0 T\nWHODUNITS  HH UW0 - D AH1 - N IH0 T S\nWHOEVER  HH UW0 - EH1 - V ER0\nWHOEVER'S  HH UW0 - EH1 - V ER0 Z\nWHOLE  HH OW1 L\nWHOLEHEARTED  HH OW1 L - HH AA2 R - T IH0 D\nWHOLEHEARTEDLY  HH OW1 L - HH AA0 R - T IH0 D - L IY0\nWHOLENESS  HH OW1 L - N IH0 S\nWHOLES  HH OW1 L Z\nWHOLESALE  HH OW1 L - S EY2 L\nWHOLESALER  HH OW1 L - S EY2 - L ER0\nWHOLESALER'S  HH OW1 L - S EY2 - L ER0 Z\nWHOLESALERS  HH OW1 L - S EY2 - L ER0 Z\nWHOLESALERS'  HH OW1 L - S EY2 - L ER0 Z\nWHOLESALES  HH OW1 L - S EY2 L Z\nWHOLESALING  HH OW1 L - S EY2 - L IH0 NG\nWHOLESOME  HH OW1 L - S AH0 M\nWHOLESOMENESS  HH OW1 L - S AH0 M - N AH0 S\nWHOLEY  HH AA1 - L IY0\nWHOLLY  HH OW1 - L IY0\nWHOM  HH UW1 M\nWHOMEVER  HH UW0 M - EH1 - V ER0\nWHOMSOEVER  HH UW2 M - S OW0 - EH1 - V ER0\nWHOOP  W UW1 P\nWHOOP(2)  HH W UW1 P\nWHOOPED  W UW1 P T\nWHOOPED(2)  HH W UW1 P T\nWHOOPEE  W UW1 - P IY1\nWHOOPEE(2)  HH W UW1 - P IY1\nWHOOPI  W UW1 - P IY0\nWHOOPI(2)  HH W UW1 - P IY0\nWHOOPIE  W UW1 - P IY0\nWHOOPIE(2)  HH W UW1 - P IY0\nWHOOPING  W UW1 - P IH0 NG\nWHOOPING(2)  HH W UW1 - P IH0 NG\nWHOOPS  W UW1 P S\nWHOOPS(2)  HH W UW1 P S\nWHOOSH  W UW1 SH\nWHOOSH(2)  HH W UW1 SH\nWHOPPER  W AA1 - P ER0\nWHOPPER(2)  HH W AA1 - P ER0\nWHOPPERS  W AA1 - P ER0 Z\nWHOPPERS(2)  HH W AA1 - P ER0 Z\nWHOPPING  W AA1 - P IH0 NG\nWHOPPING(2)  HH W AA1 - P IH0 NG\nWHORE  HH AO1 R\nWHOREHOUSE  HH AO1 R - HH AW2 S\nWHORES  HH AO1 R Z\nWHORL  W ER1 L\nWHORL(2)  W AO1 R L\nWHORL(3)  HH W AO1 R L\nWHORLEY  HH AO1 R - L IY0\nWHORLEY(2)  W AO1 R - L IY0\nWHORLEY(3)  HH W AO1 R - L IY0\nWHORLS  W ER1 L Z\nWHORLS(2)  W AO1 R L Z\nWHORLS(3)  HH W AO1 R L Z\nWHORTON  HH AO1 R - T AH0 N\nWHOSE  HH UW1 Z\nWHOSOEVER  HH UW2 - S OW0 - EH1 - V ER0\nWHY  W AY1\nWHY'D  W AY1 D\nWHY'D(2)  HH W AY1 D\nWHY'S  W AY1 Z\nWHY'S(2)  HH W AY1 Z\nWHY(2)  HH W AY1\nWHYS  W AY1 Z\nWHYS(2)  HH W AY1 Z\nWHYTE  W AY1 T\nWHYTE(2)  HH W AY1 T\nWIACEK  V AY1 - AH0 - CH EH0 K\nWIAN  W AY1 - AH0 N\nWIANT  W AY1 - AH0 N T\nWIARD  W AY1 - AA0 R D\nWIATER  W AY1 - AH0 - T ER0\nWIATROWSKI  V IY0 - AH0 - T R AO1 F S - K IY0\nWIATT  W AY1 - AH0 T\nWIBBELSMAN  W IH1 - B AH0 L Z - M AH0 N\nWIBBENMEYER  W IH1 - B IH0 N - M AY0 - ER0\nWIBERG  W AY1 - B ER0 G\nWIBLE  W AY1 - B AH0 L\nWICAT  W IH1 - K AE0 T\nWICCA  W IH1 - K AH0\nWICCAN  W IH1 - K AH0 N\nWICE  W AY1 S\nWICH  W IH1 CH\nWICHERN  W IH1 - K ER0 N\nWICHERT  W IH1 - CH ER0 T\nWICHITA  W IH1 - CH AH0 - T AO2\nWICHITA'S  W IH1 - CH AH0 - T AO2 Z\nWICHMAN  W IH1 CH - M AH0 N\nWICHMANN  W IH1 CH - M AH0 N\nWICK  W IH1 K\nWICKARD  W IH1 - K ER0 D\nWICKE  W IH1 K\nWICKED  W IH1 - K AH0 D\nWICKEDLY  W IH1 - K IH0 D - L IY0\nWICKEDNESS  W IH1 - K AH0 D - N AH0 S\nWICKENS  W IH1 - K AH0 N Z\nWICKER  W IH1 - K ER0\nWICKERHAM  W IH1 - K ER0 - HH AE2 M\nWICKERSHAM  W IH1 - K ER0 - SH AE2 M\nWICKERT  W IH1 - K ER0 T\nWICKES  W IH1 K S\nWICKES'S  W IH1 K - S IH0 Z\nWICKET  W IH1 - K AH0 T\nWICKET(2)  HH W IH1 - K AH0 T\nWICKETS  W IH1 - K AH0 T S\nWICKETS(2)  HH W IH1 - K AH0 T S\nWICKETT  W IH1 - K IH0 T\nWICKEY  W IH1 - K IY0\nWICKHAM  W IH1 - K AH0 M\nWICKIZER  W IH1 - K AY2 - Z ER0\nWICKLAND  W IH1 K - L AH0 N D\nWICKLANDER  W IH1 K - L AE2 N - D ER0\nWICKLEY  W IH1 K - L IY0\nWICKLIFF  W IH1 K - L IH0 F\nWICKLIFFE  W IH1 K - L IH0 F\nWICKLINE  W IH1 - K L AY2 N\nWICKLUND  W IH1 K - L AH0 N D\nWICKMAN  W IH1 K - M AH0 N\nWICKS  W IH1 K S\nWICKSTROM  W IH1 K - S T R AH0 M\nWICKWARE  W IH1 - K W EH2 R\nWICKWIRE  V IH1 S K - V AY0 R\nWICOR  W AY1 - K AO2 R\nWIDDER  W IH1 - D ER0\nWIDDLE  W IH1 - D AH0 L\nWIDDLED  W IH1 - D AH0 L D\nWIDDOWS  W IH1 - D OW2 Z\nWIDDOWSON  W IH1 - D AW0 - S AH0 N\nWIDE  W AY1 D\nWIDE'S  W AY1 D Z\nWIDEBODY  W AY1 D - B AA2 - D IY0\nWIDELL  W IH1 - D AH0 L\nWIDELY  W AY1 D - L IY0\nWIDEMAN  W AY1 D - M AH0 N\nWIDEN  W AY1 - D AH0 N\nWIDENED  W AY1 - D AH0 N D\nWIDENER  W IH1 - D IY0 - N ER0\nWIDENING  W AY1 - D AH0 N - IH0 NG\nWIDENS  W AY1 - D AH0 N Z\nWIDER  W AY1 - D ER0\nWIDESPREAD  W AY1 D - S P R EH1 D\nWIDEST  W AY1 - D AH0 S T\nWIDGER  W IH1 - JH ER0\nWIDGET  W IH1 - JH IH0 T\nWIDGETS  W IH1 - JH IH0 T S\nWIDHALM  W IH1 D - HH AA0 M\nWIDICK  W IH1 - D IH0 K\nWIDING  W AY1 - D IH0 NG\nWIDMAIER  W IH1 D - M AY0 - ER0\nWIDMAN  W IH1 D - M AH0 N\nWIDMANN  W IH1 D - M AH0 N\nWIDMAR  W IH1 D - M ER0\nWIDMAYER  W IH1 D - M EY2 - ER0\nWIDMER  W IH1 D - M ER0\nWIDNER  W IH1 D - N ER0\nWIDOW  W IH1 - D OW0\nWIDOW'S  W IH1 - D OW0 Z\nWIDOWED  W IH1 - D OW0 D\nWIDOWER  W IH1 - D OW0 - ER0\nWIDOWERS  W IH1 - D OW0 - ER0 Z\nWIDOWS  W IH1 - D OW0 Z\nWIDRICK  W IH1 - D R IH0 K\nWIDRIG  W IH1 D - R IH0 G\nWIDTH  W IH1 D TH\nWIDTHS  W IH1 D TH S\nWIDURI  W IH0 - D UH1 - R IY0\nWIEAND  W IY1 - AH0 N D\nWIEBE  W IY1 B\nWIEBER  W IY1 - B ER0\nWIEBERG  W IY1 - B ER0 G\nWIEBKE  W IY1 B - K IY0\nWIEBOLD  W IY1 - B OW2 L D\nWIEBUSCH  W IY1 - B AH0 SH\nWIECH  W IY1 CH\nWIECHERT  W IY1 - K ER0 T\nWIECHMAN  W IY1 K - M AH0 N\nWIECHMANN  W IY1 K - M AH0 N\nWIECK  W IY1 K\nWIECZOREK  V IY0 - CH AO1 - R EH0 K\nWIED  W IY1 D\nWIEDEL  W IY1 - D AH0 L\nWIEDEMAN  W IY1 D - M AH0 N\nWIEDEMANN  W IY1 D - M AH0 N\nWIEDEN  W IY1 - D AH0 N\nWIEDER  W IY1 - D ER0\nWIEDERAUFBAU  W IY2 - D ER0 - AO1 F - B AW0\nWIEDERHOLD  W IY1 - D ER0 - HH OW0 L D\nWIEDERHOLT  W IY1 - D ER0 - HH OW0 L T\nWIEDERKEHR  W IY1 - D ER0 - K IH0 R\nWIEDMAN  W IY1 D - M AH0 N\nWIEDMANN  W IY1 D - M AH0 N\nWIEDMEYER  W IY1 D - M AY0 - ER0\nWIEDNER  W IY1 D - N ER0\nWIEDRICH  W IY1 D - R IH0 K\nWIEGAND  W IY1 - G AH0 N D\nWIEGEL  W IY1 - G AH0 L\nWIEGERS  W IY1 - G ER0 Z\nWIEGERT  W IY1 - G ER0 T\nWIEGMAN  W IY1 G - M AH0 N\nWIEGMANN  W IY1 G - M AH0 N\nWIEHE  W IY1\nWIELAND  W IY1 - L AH0 N D\nWIELD  W IY1 L D\nWIELDED  W IY1 L - D IH0 D\nWIELDING  W IY1 L - D IH0 NG\nWIELDS  W IY1 L D Z\nWIELGUS  W IY1 L - G AH0 S\nWIEMAN  W IY1 - M AH0 N\nWIEMANN  W IY1 - M AH0 N\nWIEMER  W IY1 - M ER0\nWIEMERS  W IY1 - M ER0 Z\nWIEN  W IY1 N\nWIENCEK  V IY1 N - CH EH0 K\nWIENECKE  W IY1 - N IH0 K\nWIENEKE  W IY1 - N IH0 K\nWIENER  W IY1 - N ER0\nWIENER(2)  W AY1 - N ER0\nWIENERS  W IY1 - N ER0 Z\nWIENERSCHNITZEL  W IY1 - N ER0 SH - N IH2 T - S AH0 L\nWIENERSCHNITZEL'S  W IY1 - N ER0 SH - N IH2 T - S AH0 L Z\nWIENERSCHNITZEL'S(2)  V IY1 - N ER0 SH - N IH2 T - S AH0 L Z\nWIENERSCHNITZEL(2)  V IY1 - N ER0 SH - N IH2 T - S AH0 L\nWIENKE  W IY1 NG K\nWIENS  W IY1 N Z\nWIER  W IH1 R\nWIERDIN  W IH1 R - D IH0 N\nWIERENGA  V IH0 - R EH1 NG - G AH0\nWIERMAN  W IH1 R - M AH0 N\nWIERS  W IY1 R Z\nWIERSEMA  V IH0 R - S IY1 - M AH0\nWIERSMA  V IH1 R S - M AH0\nWIERZBA  V IH1 R Z - B AH0\nWIERZBICKI  V IH0 R Z - B IH1 T S - K IY0\nWIES  W AY1 Z\nWIESBADEN  W IY1 S - B AA2 - D AH0 N\nWIESBADEN(2)  W AY1 S - B AA2 - D AH0 N\nWIESE  W IY1 Z\nWIESEL  W IY1 - S AH0 L\nWIESELER  W IY1 - S AH0 - L ER0\nWIESEMANN  W IY1 S - M AH0 N\nWIESEN  W IY1 - S AH0 N\nWIESENTHAL  W IY1 - S AH0 N - TH AA1 L\nWIESENTHAL(2)  W IY1 - Z AH0 N - TH AA1 L\nWIESER  W IY1 - S ER0\nWIESMAN  W IY1 Z - M AH0 N\nWIESNER  W IY1 Z - N ER0\nWIESS  W IY1 S\nWIESSNER  W IY1 S - N ER0\nWIEST  W AY1 - IH0 S T\nWIETING  W IY1 - T IH0 NG\nWIFE  W AY1 F\nWIFE'S  W AY1 F S\nWIG  W IH1 G\nWIGAL  W IH1 - G AH0 L\nWIGAND  W IH1 - G AH0 N D\nWIGAND'S  W IH1 - G AH0 N D Z\nWIGEN  W IH1 - G AH0 N\nWIGFALL  W IH1 G - F AO2 L\nWIGFIELD  W IH1 G - F IY2 L D\nWIGG  W IH1 G\nWIGGANS  W IH1 - G AH0 N Z\nWIGGER  W IH1 - G ER0\nWIGGERS  W IH1 - G ER0 Z\nWIGGIN  W IH1 - G IH0 N\nWIGGINGTON  W IH1 - G IH0 NG - T AH0 N\nWIGGINS  W IH1 - G IH0 N Z\nWIGGINTON  W IH1 - G IH0 N - T AH0 N\nWIGGLE  W IH1 - G AH0 L\nWIGGLESWORTH  W IH1 - G AH0 L Z - W ER2 TH\nWIGGLING  W IH1 - G AH0 L - IH0 NG\nWIGGLING(2)  W IH1 - G L IH0 NG\nWIGGLY  W IH1 - G AH0 - L IY0\nWIGGS  W IH1 G Z\nWIGHT  W AY1 T\nWIGHTMAN  W AY1 T - M AH0 N\nWIGINGTON  W IH1 - G IH0 NG - T AH0 N\nWIGINTON  W IH1 - JH IH0 N - T AH0 N\nWIGLE  W AY1 - G AH0 L\nWIGLEY  W IH1 G - L IY0\nWIGMORE  W IH1 G - M AO0 R\nWIGNALL  W IH1 G - N AH0 L\nWIGS  W IH1 G Z\nWIGTON  W IH1 G - T AH0 N\nWIGTON'S  W IH1 G - T AH0 N Z\nWIGWAM  W IH1 G - W AA0 M\nWIITALA  V IY0 - T AA1 - L AH0\nWIK  W IH1 K\nWIKE  W AY1 K\nWIKEL  W IH1 - K AH0 L\nWIKER  W AY1 - K ER0\nWIKLE  W AY1 - K AH0 L\nWIKLUND  W IH1 K - L AH0 N D\nWIKOFF  W IH1 K - AO0 F\nWIKOWSKY  W IH0 - K AW1 S - K IY0\nWIKSTROM  W IH1 K - S T R AH0 M\nWIL  W IH1 L\nWIL'S  W IH1 L Z\nWILAND  W AY1 - L AH0 N D\nWILANDER  W AY1 - L AH0 N - D ER0\nWILBANKS  W IH1 L - B AH0 NG K S\nWILBER  W IH1 L - B ER0\nWILBERFORCE  W IH1 L - B ER0 - F AO2 R S\nWILBERG  W IH1 L - B ER0 G\nWILBERT  W IH1 L - B ER0 T\nWILBON  W IH1 L - B AH0 N\nWILBORN  W IH1 L - B ER0 N\nWILBOURN  W IH1 L - B ER0 N\nWILBOURNE  W IH1 L - B ER0 N\nWILBUR  W IH1 L - B ER0\nWILBURN  W IH1 L - B ER0 N\nWILCHER  W IH1 L - CH ER0\nWILCOCK  W IH1 L - K AA0 K\nWILCOX  W IH1 L - K AA0 K S\nWILCOXEN  W IH0 L - K AA1 K - S AH0 N\nWILCOXON  W IH0 L - K AA1 K - S AH0 N\nWILCOXSON  W IH1 L - K AA0 K - S AH0 N\nWILCZAK  V IH1 L - CH AE0 K\nWILCZEK  V IH1 L - CH EH0 K\nWILCZEWSKI  V IH0 L - CH EH1 F S - K IY0\nWILCZYNSKI  V IH0 L - CH IH1 N - S K IY0\nWILD  W AY1 L D\nWILDASIN  W AY1 L - D AH0 - S IH2 N\nWILDAVSKY  W IH0 L - D AE1 V S - K IY0\nWILDCARD  W AY1 L D - K AA2 R D\nWILDCAT  W AY1 L D - K AE2 T\nWILDCATS  W AY1 L D - K AE2 T S\nWILDCATTER  W AY1 L D - K AE2 - T ER0\nWILDCATTERS  W AY1 L D - K AE2 - T ER0 Z\nWILDCATTING  W AY1 L D - K AE2 - T IH0 NG\nWILDE  W AY1 L D\nWILDEMAN  W AY1 L D - M AH0 N\nWILDEN  W AY1 L - D AH0 N\nWILDER  W AY1 L - D ER0\nWILDER'S  W AY1 L - D ER0 Z\nWILDERMAN  W AY1 L - D ER0 - M AH0 N\nWILDERMUTH  W AY1 L - D ER0 - M UW0 TH\nWILDERNESS  W IH1 L - D ER0 - N AH0 S\nWILDES  W AY1 L D Z\nWILDEST  W AY1 L - D IH0 S T\nWILDEY  W IH1 L - D IY0\nWILDFIRE  W AY1 L D - F AY2 - ER0\nWILDFIRES  W AY1 L D - F AY2 - ER0 Z\nWILDFLOWER  W AY1 L D - F L AW2 - ER0\nWILDFLOWERS  W AY1 L D - F L AW2 R Z\nWILDING  W AY1 L - D IH0 NG\nWILDLIFE  W AY1 L D - L AY2 F\nWILDLY  W AY1 L D - L IY0\nWILDMAN  W AY1 L D - M AH0 N\nWILDMON  W AY1 L D - M AH0 N\nWILDNESS  W AY1 L D - N AH0 S\nWILDON  W AY1 L - D AH0 N\nWILDRICK  W AY1 L - D R IH0 K\nWILDS  W AY1 L D Z\nWILDT  W IH1 L T\nWILDWOOD  W AY1 L D - W UH2 D\nWILDWOODS  W AY1 L D - W UH2 D Z\nWILE  W AY1 L\nWILEEN  W IH0 - L IY1 N\nWILEMAN  W AY1 L - M AH0 N\nWILEMON  W IH1 - L IH0 - M AA0 N\nWILEN  W AY1 - L AH0 N\nWILENSKY  W AH0 - L IH1 N - S K IY0\nWILER  W AY1 - L ER0\nWILES  W AY1 L Z\nWILES'S  W AY1 L - Z IH0 Z\nWILEY  W AY1 - L IY0\nWILFERT  W IH1 L - F ER0 T\nWILFONG  W IH1 L - F AO0 NG\nWILFORD  W IH1 L - F ER0 D\nWILFRED  W IH1 L - F R IH0 D\nWILFREDA  W IH1 L - F R IH0 - D AH0\nWILFREDO  W IH2 L - F EY1 - D OW0\nWILFRID  W IH1 L - F R IH0 D\nWILFRIED  W IH1 L - F R IY0 D\nWILFULLY  W IH1 L - F AH0 - L IY0\nWILGUS  W IH1 L - G AH0 S\nWILHAM  W IH1 L - HH AH0 M\nWILHELM  W IH1 L - HH EH2 L M\nWILHELMA  W IH0 L - HH EH1 L - M AH0\nWILHELMI  W IH0 L - HH EH1 L - M IY0\nWILHELMINA  W IH2 L - HH EH0 L - M IY1 - N AH0\nWILHELMINE  W IH1 L - HH IH0 L - M IH0 N\nWILHELMS  W IH1 L - HH EH2 L M Z\nWILHELMSEN  W IH1 L - HH IH0 L M - S AH0 N\nWILHELMY  W IH1 L - HH IH0 L - M IY0\nWILHEMINA  W IH1 L - HH EH0 - M IY1 - N AH0\nWILHIDE  W IH1 L - HH AY2 D\nWILHITE  W IH1 L - HH AY2 T\nWILHOIT  W IH1 L - HH OY2 T\nWILHOITE  W IH1 L - HH OY2 T\nWILIAMS  W IH1 - L IY0 - AH0 M Z\nWILING  W AY1 - L IH0 NG\nWILINSKI  V IH0 - L IH1 N - S K IY0\nWILK  W IH1 L K\nWILKE  W IH1 L K\nWILKEN  W IH1 L - K AH0 N\nWILKENING  W IH1 L - K AH0 - N IH0 NG\nWILKENS  W IH1 L - K AH0 N Z\nWILKENSON  W IH1 L - K IH0 N - S AH0 N\nWILKER  W IH1 L - K ER0\nWILKERSON  W IH1 L - K ER0 - S AH0 N\nWILKES  W IH1 L K S\nWILKESBORO  W IH1 L K S - B ER0 - OW0\nWILKEY  W IH1 L - K IY0\nWILKIE  W IH1 L - K IY0\nWILKIN  W IH1 L - K IH0 N\nWILKING  W IH1 L - K IH0 NG\nWILKINS  W IH1 L - K IH0 N Z\nWILKINSON  W IH1 L - K AH0 N - S AH0 N\nWILKINSON'S  W IH1 L - K IH0 N - S AH0 N Z\nWILKINSON(2)  W IH1 L - K IH0 N - S AH0 N\nWILKIS  W IH1 L - K IH0 S\nWILKISON  W IH1 L - K IH0 - S AH0 N\nWILKOWSKI  V IH0 L - K AO1 F S - K IY0\nWILKS  W IH1 L K S\nWILL  W IH1 L\nWILL'S  W IH1 L Z\nWILL(2)  W AH0 L\nWILLA  W IH1 - L AH0\nWILLABELLE  W IH1 - L AH0 - B EH2 L\nWILLADSEN  W IH0 - L AE1 D - S AH0 N\nWILLAIMS  W IH1 - L AH0 M Z\nWILLAM  W IH1 - L AH0 M\nWILLAMETTE  W AH0 - L AE1 - M AH0 T\nWILLAMETTE'S  W AH0 - L AE1 - M AH0 T S\nWILLAMETTE'S(2)  W IH2 - L AH0 - M EH1 T S\nWILLAMETTE(2)  W IH2 - L AH0 - M EH1 T\nWILLAMINA  W IH0 - L AH0 - M AY1 - N AH0\nWILLAPA  W IH0 - L AA1 - P AH0\nWILLAPA'S  W IH0 - L AA1 - P AH0 Z\nWILLARD  W IH1 - L ER0 D\nWILLBANKS  W IH1 L - B AE2 NG K S\nWILLCOX  W IH1 L - K AA2 K S\nWILLCUTT  W IH1 L - K AH0 T\nWILLDEN  W IH1 L - D AH0 N\nWILLE  W IH1 L\nWILLED  W IH1 L D\nWILLEFORD  W IH1 - L IH0 - F ER0 D\nWILLEFORD(2)  W IH1 L - F ER0 D\nWILLEM  W IH1 - L AH0 M\nWILLEMS  W IH1 - L AH0 M Z\nWILLEMSEN  W IH0 - L EH1 M - S AH0 N\nWILLEMSEN(2)  W IH1 - L AH0 M - S AH0 N\nWILLEN  W IH1 - L AH0 N\nWILLENBORG  W IH1 - L IH0 N - B AO0 R G\nWILLENBRING  W IH1 - L AH0 N - B R IH2 NG\nWILLENS  W IH1 - L AH0 N Z\nWILLER  W IH1 - L ER0\nWILLERS  W IH1 - L ER0 Z\nWILLERT  W IH1 - L ER0 T\nWILLES  W AY1 L Z\nWILLET  W IH1 - L IH0 T\nWILLETS  W IH1 - L IH0 T S\nWILLETT  W IH1 - L IH0 T\nWILLETTE  W IH0 - L EH1 T\nWILLETTS  W IH1 - L IH0 T S\nWILLEY  W IH1 - L IY0\nWILLFORD  W IH1 L - F ER0 D\nWILLFUL  W IH1 L - F AH0 L\nWILLFULLY  W IH1 L - F AH0 - L IY0\nWILLHELM  W IH1 L - HH EH2 L M\nWILLHITE  W IH1 L - HH AY2 T\nWILLHOIT  W IH1 L - HH OY2 T\nWILLHOITE  W IH1 L - HH OY2 T\nWILLI  W IH1 - L IY0\nWILLIAM  W IH1 - L Y AH0 M\nWILLIAM'S  W IH1 - L Y AH0 M Z\nWILLIAMS  W IH1 - L Y AH0 M Z\nWILLIAMS'  W IH1 - L Y AH0 M Z\nWILLIAMS'S  W IH1 - L Y AH0 M - Z IH0 Z\nWILLIAMSBURG  W IH1 - L Y AH0 M Z - B ER0 G\nWILLIAMSBURGH  W IH1 - L Y AH0 M Z - B ER0 G\nWILLIAMSEN  W IH1 - L Y AH0 M - S AH0 N\nWILLIAMSON  W IH1 - L Y AH0 M - S AH0 N\nWILLIAMSON'S  W IH1 - L Y AH0 M - S AH0 N Z\nWILLIAMSPORT  W IH1 - L Y AH0 M - S P AO2 R T\nWILLIAMSTOWN  W IH1 - L Y AH0 M - S T AW2 N\nWILLIARD  W IH1 L - Y AA0 R D\nWILLIE  W IH1 - L IY0\nWILLIE'S  W IH1 - L IY0 Z\nWILLIFORD  W IH1 - L IH0 - F ER0 D\nWILLIG  W IH1 - L IH0 G\nWILLING  W IH1 - L IH0 NG\nWILLINGER  W IH1 - L IH0 - NG ER0\nWILLINGHAM  W IH1 - L IH0 NG - HH AE2 M\nWILLINGLY  W IH1 - L IH0 NG - L IY0\nWILLINGNESS  W IH1 - L IH0 NG - N AH0 S\nWILLIS  W IH1 - L IH0 S\nWILLIS'S  W IH1 - L IH0 - S IH0 Z\nWILLISON  W IH1 - L IH0 - S AH0 N\nWILLISTON  W IH1 - L IH0 - S T AA0 N\nWILLITS  W IH1 - L IH0 T S\nWILLKE  W IH1 L - K IY0\nWILLKIE  W IH1 L - K IY0\nWILLMAN  W IH1 L - M AH0 N\nWILLMANN  W IH1 L - M AH0 N\nWILLMON  W IH1 L - M AH0 N\nWILLMORE  W IH1 L - M AO0 R\nWILLMOTT  W IH1 L - M AH0 T\nWILLMS  W IH1 L M Z\nWILLNER  W IH1 L - N ER0\nWILLOCK  W IH1 - L AH0 K\nWILLOUGHBY  W IH1 - L AH0 - B IY0\nWILLOW  W IH1 - L OW2\nWILLOWBROOK  W IH1 - L OW0 - B R UH2 K\nWILLOWES  W IH1 - L OW2 Z\nWILLOWS  W IH1 - L OW2 Z\nWILLOWY  W IH1 - L AH0 W - IY0\nWILLPOWER  W IH1 L - P AW2 - ER0\nWILLS  W IH1 L Z\nWILLSE  W IH1 L - S IY0\nWILLSEY  W IH1 L - S IY0\nWILLSON  W IH1 L - S AH0 N\nWILLWERTH  W IH1 L - W ER0 TH\nWILLY  W IH1 - L IY0\nWILLYARD  W IH1 L - Y AA2 R D\nWILMA  W IH1 L - M AH0\nWILMAR  W IH1 L - M ER0\nWILMARTH  W IH1 L - M AA0 R TH\nWILMER  W IH1 L - M ER0\nWILMES  W IH1 L M Z\nWILMET  W IH1 L - M IH0 T\nWILMETH  W IH1 L - M IH0 TH\nWILMETTE  W IH0 L - M EH1 T\nWILMINGTON  W IH1 L - M IH0 NG - T AH0 N\nWILMORE  W IH1 L - M AO0 R\nWILMOT  W IH1 L - M AH0 T\nWILMOTH  W IH1 L - M AH0 TH\nWILMOTT  W IH1 L - M AH0 T\nWILMOUTH  W IH1 L - M AW0 TH\nWILMS  W IH1 L M Z\nWILNER  W IH1 L - N ER0\nWILPON  W IH1 L - P AA0 N\nWILSEY  W IH1 L - S IY0\nWILSHIRE  W IH1 L - SH AY2 R\nWILSHUSEN  W IH1 L - SH UW0 - S AH0 N\nWILSON  W IH1 L - S AH0 N\nWILSON'S  W IH1 L - S AH0 N Z\nWILT  W IH1 L T\nWILTED  W IH1 L - T IH0 D\nWILTEL  W IH1 L - T EH2 L\nWILTFONG  W IH1 L T - F AO0 NG\nWILTGEN  W IH1 L T - G AH0 N\nWILTHEW  W IH1 L - TH Y UW0\nWILTING  W IH1 L - T IH0 NG\nWILTON  W IH1 L - T AH0 N\nWILTRON  W IH1 L - T R AH0 N\nWILTROUT  W IH1 L - T R AW2 T\nWILTS  W IH1 L T S\nWILTSE  W IH1 L T S\nWILTSEY  W IH1 L T - S IY0\nWILTSHIRE  W IH1 L - CH AY2 R\nWILTSIE  W IH1 L T - S IY0\nWILTZ  W IH1 L T S\nWILY  W AY1 - L IY0\nWIMAN  W AY1 - M AH0 N\nWIMBERLEY  W IH1 M - B ER0 - L IY0\nWIMBERLY  W IH1 M - B ER0 - L IY0\nWIMBISH  W IH1 M - B IH0 SH\nWIMBLEDON  W IH1 M - B AH0 L - D AH0 N\nWIMBLEY  W IH1 M - B L IY0\nWIMBUSH  W IH1 M - B AH0 SH\nWIMBUSH(2)  W IH1 M - B UH0 SH\nWIMER  W AY1 - M ER0\nWIMMER  W IH1 - M ER0\nWIMP  W IH1 M P\nWIMPEE  W IH1 M - P IY0\nWIMPINESS  W IH1 M - P IY0 - N AH0 S\nWIMPS  W IH1 M P S\nWIMPY  W IH1 M - P IY0\nWIMS  W IH1 M Z\nWIMSATT  W IH1 M - S AH0 T\nWIN  W IH1 N\nWIN'S  W IH1 N Z\nWINAMAC  W IH1 - N AH0 - M AE0 K\nWINAMAC'S  W IH1 - N AH0 - M AE0 K S\nWINANS  W IH1 - N AH0 N Z\nWINANS'S  W IH1 - N AH0 N - Z IH0 Z\nWINANT  W AY1 - N AH0 N T\nWINBERG  W IH1 N - B ER0 G\nWINBERRY  W IH1 N - B EH2 - R IY0\nWINBORN  W IH1 N - B ER0 N\nWINBORNE  W IH1 N - B ER0 N\nWINBURN  W IH1 N - B ER2 N\nWINBUSH  W IH1 N - B UH2 SH\nWINCE  W IH1 N S\nWINCED  W IH1 N S T\nWINCEK  W IH1 N - S IH0 K\nWINCH  W IH1 N CH\nWINCHEL  W IH1 N - K AH0 L\nWINCHELL  W IH1 N - CH AH0 L\nWINCHELL'S  W IH1 N - CH AH0 L Z\nWINCHESTER  W IH1 N - CH EH2 - S T ER0\nWINCING  W IH1 N - S IH0 NG\nWINCKLER  W IH1 NG - K L ER0\nWIND  W AY1 N D\nWIND'S  W IH1 N D Z\nWIND(2)  W IH1 N D\nWINDCHILL  W IH1 N D - CH IH2 L\nWINDCHIME  W IH1 N D - CH AY2 M\nWINDCHIMES  W IH1 N D - CH AY2 M Z\nWINDECKER  W IH1 N - D EH2 - K ER0\nWINDED  W IH1 N - D IH0 D\nWINDED(2)  W AY1 N - D IH0 D\nWINDELL  W IH1 N - D AH0 L\nWINDELS  W IH1 N - D AH0 L Z\nWINDER  W IH1 N - D ER0\nWINDER(2)  W AY1 N - D ER0\nWINDERS  W IH1 N - D ER0 Z\nWINDERS(2)  W AY1 N - D ER0 Z\nWINDES  W IH1 N D Z\nWINDES(2)  W AY1 N D Z\nWINDFALL  W IH1 N D - F AO2 L\nWINDFALLS  W IH1 N D - F AO2 L Z\nWINDHAM  W IH1 N - D AH0 M\nWINDHEIM  W IH1 N D - HH AY2 M\nWINDHOEK  W IH1 N D - HH OW2 K\nWINDHOLZ  W IH1 N D - HH OW2 L Z\nWINDHORST  W IH1 N D - HH AO0 R S T\nWINDING  W AY1 N - D IH0 NG\nWINDISCH  W IH1 N - D IH0 SH\nWINDISH  W IH1 N - D IH0 SH\nWINDLASS  W IH1 N D - L AH0 S\nWINDLE  W IH1 N - D AH0 L\nWINDLER  W IH1 N D - L ER0\nWINDLEY  W IH1 N D - L IY0\nWINDMERE  W IH1 N D - M IH2 R\nWINDMERE'S  W IH1 N D - M IH2 R Z\nWINDMILL  W IH1 N D - M IH2 L\nWINDMILLER  W IH1 N D - M IH2 - L ER0\nWINDMILLS  W IH1 N D - M IH2 L Z\nWINDOM  W IH1 N - D AH0 M\nWINDON  W IH1 N - D AH0 N\nWINDOW  W IH1 N - D OW0\nWINDOWED  W IH1 N - D OW0 D\nWINDOWLESS  W IH1 N - D OW0 - L AH0 S\nWINDOWPANE  W IH1 N - D OW0 - P EY2 N\nWINDOWPANES  W IH1 N - D OW0 - P EY2 N Z\nWINDOWS  W IH1 N - D OW0 Z\nWINDS  W IH1 N D Z\nWINDS(2)  W AY1 N D Z\nWINDSHIELD  W IH1 N D - SH IY2 L D\nWINDSHIELDS  W IH1 N D - SH IY2 L D Z\nWINDSOR  W IH1 N - Z ER0\nWINDSOR'S  W IH1 N - Z ER0 Z\nWINDSPEED  W IH1 N D - S P IY2 D\nWINDSTAR  W IH1 N D - S T AA2 R\nWINDSTAR'S  W IH1 N D - S T AA2 R Z\nWINDSTORM  W IH1 N D - S T AO2 R M\nWINDSWEPT  W IH1 N - S W EH2 P T\nWINDT  W IH1 N T\nWINDUP  W AY1 N - D AH2 P\nWINDWARD  W IH1 N D - W ER0 D\nWINDY  W IH1 N - D IY0\nWINDY(2)  W AY1 N - D IY0\nWINE  W AY1 N\nWINE'S  W AY1 N Z\nWINEBARGER  W IH1 - N IH0 - B AA0 R - G ER0\nWINEBERG  W AY1 N - B ER0 G\nWINEBRENNER  W IH1 - N IH0 - B R IH0 - N ER0\nWINECOFF  W IH1 - N IH0 K - AO0 F\nWINED  W AY1 N D\nWINEGAR  W IH1 - N IH0 - G ER0\nWINEGARDEN  W AY1 N - G AA2 R - D AH0 N\nWINEGARDNER  W IH1 - N IH0 - G AA0 R D - N ER0\nWINEHEIM  W AY1 N - HH AY2 M\nWINEINGER  W AY1 - N IH0 - NG ER0\nWINELAND  W AY1 N - L AH0 N D\nWINELAND  W IH1 - N IH0 - L AH0 N D\nWINEMA  W IH1 - N IH0 - M AH0\nWINEMAN  W AY1 N - M AH0 N\nWINEMILLER  W AY1 N - M IH2 - L ER0\nWINER  W AY1 - N ER0\nWINERIES  W AY1 - N ER0 - IY0 Z\nWINERY  W AY1 - N ER0 - IY0\nWINERY'S  W AY1 - N ER0 - IY0 Z\nWINES  W AY1 N Z\nWINEY  W AY1 - N IY0\nWINFIELD  W IH1 N - F IY2 L D\nWINFORD  W IH1 N - F ER0 D\nWINFRED  W IH1 N - F R IH0 D\nWINFREE  W IH1 N - F R IY2\nWINFREY  W IH1 N - F R IY0\nWINFRID  W IH1 N - F R IH0 D\nWING  W IH1 NG\nWING'S  W IH1 NG Z\nWINGARD  W IH1 NG - G ER0 D\nWINGATE  W IH1 N - G EY2 T\nWINGBACK  W IH1 NG - B AE2 K\nWINGE  W IH1 N JH\nWINGED  W IH1 NG D\nWINGER  W IH1 - NG ER0\nWINGERS  W IH1 - NG ER0 Z\nWINGERT  W IH1 NG - G ER0 T\nWINGERTER  W IH1 NG - G ER0 - T ER0\nWINGET  W IH1 NG - G IH0 T\nWINGETT  W IH1 NG - G IH0 T\nWINGFIELD  W IH1 NG - F IY2 L D\nWINGING  W IH1 - NG IH0 NG\nWINGLER  W IH1 NG - G AH0 - L ER0\nWINGLER(2)  W IH1 NG - G L ER0\nWINGLIKE  W IH1 NG - L AY2 K\nWINGMAN  W IH1 NG - M AH0 N\nWINGO  W IY1 NG - G OW0\nWINGROVE  W IH1 N - G R OW2 V\nWINGS  W IH1 NG Z\nWINGSPAN  W IH1 NG - S P AE2 N\nWINIARSKI  V IH0 - N IY0 - AA1 R S - K IY0\nWINICK  W IH1 - N IH0 K\nWINIECKI  V IH0 - N IY1 T S - K IY0\nWINIFRED  W IH1 - N IH0 - F R IH0 D\nWINIK  W IH1 - N IH0 K\nWINING  W AY1 - N IH0 NG\nWININGER  W AY1 - N IH0 - NG ER0\nWININGS  W AY1 - N IH0 NG Z\nWINK  W IH1 NG K\nWINKED  W IH1 NG K T\nWINKEL  W IH1 NG - K AH0 L\nWINKELMAN  W IH1 NG - K AH0 L - M AH0 N\nWINKELMANN  W IH1 NG - K AH0 L - M AH0 N\nWINKELS  W IH1 NG - K AH0 L Z\nWINKER  W IH1 NG - K ER0\nWINKFIELD  W IH1 NG K - F IY2 L D\nWINKING  W IH1 NG - K IH0 NG\nWINKLE  W IH1 NG - K AH0 L\nWINKLEMAN  W IH1 NG - K AH0 L - M AH0 N\nWINKLER  W IH1 NG - K L ER0\nWINKLES  W IH1 NG - K AH0 L Z\nWINKLEY  W IH1 NG - K L IY0\nWINKOWSKI  V IH0 NG - K AO1 F S - K IY0\nWINKS  W IH1 NG K S\nWINLAND  W IH1 N - L AH0 N D\nWINN  W IH1 N\nWINNABLE  W IH1 - N AH0 - B AH0 L\nWINNE  W IH1 N\nWINNEBAGO  W IH2 - N AH0 - B EY1 - G OW0\nWINNEBAGO'S  W IH2 - N AH0 - B EY1 - G OW0 Z\nWINNER  W IH1 - N ER0\nWINNER'S  W IH1 - N ER0 Z\nWINNERS  W IH1 - N ER0 Z\nWINNERS'  W IH1 - N ER0 Z\nWINNETKA  W IH0 - N EH1 T - K AH0\nWINNETT  W IH1 - N IH0 T\nWINNEY  W IH1 - N IY0\nWINNICK  W IH1 - N IH0 K\nWINNICKI  V IH0 - N IH1 T S - K IY0\nWINNIE  W IH1 - N IY0\nWINNING  W IH1 - N IH0 NG\nWINNINGEST  W IH1 - N IH0 - NG AH0 S T\nWINNINGHAM  W IH1 - N IH0 NG - HH AE2 M\nWINNINGS  W IH1 - N IH0 NG Z\nWINNIPEG  W IH1 - N IH0 - P AH0 G\nWINNOW  W IH1 - N OW2\nWINNOWED  W IH1 - N OW2 D\nWINNOWING  W IH1 - N OW2 - IH0 NG\nWINNY  W IH1 - N IY0\nWINO  W IY1 - N OW0\nWINOGRAD  W IH1 - N AH0 - G R AE0 D\nWINOKUR  W IH1 - N AH0 - K ER0\nWINOLA  V IH0 - N OW1 - L AH0\nWINONA  W IH1 - N AH0 - N AH0\nWINONAH  W IH1 - N AH0 - N AH0\nWINOOSKI  W IH0 - N UW1 S - K IY0\nWINOS  W IY1 - N OW0 S\nWINQUIST  W IH1 N - K W IH2 S T\nWINS  W IH1 N Z\nWINSETT  W IH1 N - S IH0 T\nWINSHIP  W IH1 N - SH IH2 P\nWINSKI  W IH1 N - S K IY2\nWINSLETT  W IH1 N - S L IH0 T\nWINSLOW  W IH1 N - Z L OW0\nWINSOME  W IH1 N - S AH0 M\nWINSON  W IH1 N - S AH0 N\nWINSOR  W IH1 N - Z ER0\nWINSTANLEY  W IH1 N - S T AH0 N - L IY0\nWINSTEAD  W IH1 N - S T EH2 D\nWINSTON  W IH1 N - S T AH0 N\nWINT  W IH1 N T\nWINTER  W IH1 N - T ER0\nWINTER'S  W IH1 N - T ER0 Z\nWINTERBERG  W IH1 N - T ER0 - B ER0 G\nWINTERBOURNE  W IH1 N - T ER0 - B AO2 R N\nWINTERED  W IH1 N - T ER0 D\nWINTERHALTER  W IH1 N - T ER0 - HH AO2 L - T ER0\nWINTERIZE  W IH1 N - T ER0 - AY2 Z\nWINTERIZED  W IH1 N - T ER0 - AY2 Z D\nWINTERMUTE  W IH1 N - T ER0 - M Y UW2 T\nWINTERROWD  W IH1 N - T ER0 - AW0 D\nWINTERS  W IH1 N - T ER0 Z\nWINTERSHALL  W IH1 N - T ER0 - SH AE2 L\nWINTERSTEEN  W IH1 N - T ER0 - S T IY2 N\nWINTERSTEIN  W IH1 N - T ER0 - S T AY2 N\nWINTERSTEIN(2)  W IH1 N - T ER0 - S T IY2 N\nWINTERTHUR  W IH1 N - T ER0 - TH ER0\nWINTERTIME  W IH1 N - T ER0 - T AY2 M\nWINTERTON  W IH1 N - T ER0 - T AH0 N\nWINTHER  W IH1 N - TH ER0\nWINTHROP  W IH1 N - TH R AH0 P\nWINTHROP'S  W IH1 N - TH R AH0 P S\nWINTLE  W IH1 N - T AH0 L\nWINTOM  W IH1 N - T AH0 M\nWINTON  W IH1 N - T AH0 N\nWINTOUR  W IH1 N - T UH2 R\nWINTRY  W IH1 N - T R IY0\nWINTZ  W IH1 N T S\nWINTZER  W IH1 N T - S ER0\nWINWARD  W IH1 N - W ER0 D\nWINWOOD  W IH1 N - W UH2 D\nWINWOOD'S  W IH1 N - W UH2 D Z\nWINWORD  W IH1 N - W ER0 D\nWINZELER  W IH1 N - Z AH0 L - ER0\nWINZER  W IH1 N - Z ER0\nWION  W AY1 - AH0 N\nWIPE  W AY1 P\nWIPED  W AY1 P T\nWIPEOUT  W AY1 P - AW2 T\nWIPER  W AY1 - P ER0\nWIPERS  W AY1 - P ER0 Z\nWIPES  W AY1 P S\nWIPF  W IH1 P F\nWIPING  W AY1 - P IH0 NG\nWIPPERFURTH  W IH1 - P ER0 - F ER0 TH\nWIRE  W AY1 - ER0\nWIRE(2)  W AY1 R\nWIRED  W AY1 - ER0 D\nWIRED(2)  W AY1 R D\nWIRELESS  W AY1 R - L IH0 S\nWIRELESS'S  W AY1 - ER0 - L AH0 - S IH0 Z\nWIRELINE  W AY1 R - L AY2 N\nWIREMAN  W AY1 R - M AH0 N\nWIRES  W AY1 - ER0 Z\nWIRES(2)  W AY1 R Z\nWIRETAP  W AY1 - ER0 - T AE2 P\nWIRETAPPED  W AY1 - ER0 - T AE2 P T\nWIRETAPPING  W AY1 - ER0 - T AE2 - P IH0 NG\nWIRETAPS  W AY1 R - T AE2 P S\nWIRICK  W IH1 - R IH0 K\nWIRING  W AY1 - R IH0 NG\nWIRKKALA  V ER0 - K AA1 - L AH0\nWIRKUS  W ER1 - K IH0 S\nWIRSING  W ER1 - S IH0 NG\nWIRT  W ER1 T\nWIRTANEN  W ER1 - T AH0 - N AH0 N\nWIRTH  W ER1 TH\nWIRTHLIN  W ER1 TH - L IH0 N\nWIRTZ  W ER1 T S\nWIRY  W IH1 - R IY0\nWIRZ  W ER1 Z\nWIS  W IH1 S\nWISBY  W IH1 S - B IY0\nWISCH  W IH1 SH\nWISCHMEYER  W IH1 SH - M AY0 - ER0\nWISCONSIN  W IH0 S - K AA1 N - S AH0 N\nWISCONSIN'S  W IH0 S - K AA1 N - S AH0 N Z\nWISDOM  W IH1 Z - D AH0 M\nWISE  W AY1 Z\nWISECARVER  W AY1 Z - K AA2 R - V ER0\nWISECRACK  W AY1 Z - K R AE2 K\nWISECRACKING  W AY1 Z - K R AE2 - K IH0 NG\nWISECRACKS  W AY1 Z - K R AE2 K S\nWISECUP  W AY1 Z - K AH2 P\nWISED  W AY1 Z D\nWISEGUY  W AY1 Z - G AY2\nWISEHART  W AY1 Z - HH AA2 R T\nWISEL  W AY1 - Z AH0 L\nWISELEY  W IH1 - S IH0 - L IY0\nWISELEY(2)  W AY1 Z - L IY0\nWISELY  W AY1 Z - L IY0\nWISEMAN  W AY1 Z - M AH0 N\nWISENBAKER  W AY1 - Z AH0 N - B EY2 - K ER0\nWISENER  W IH1 - S IY0 - N ER0\nWISER  W AY1 - Z ER0\nWISEST  W AY1 - Z AH0 S T\nWISH  W IH1 SH\nWISHAM  W IH1 - SH AH0 M\nWISHARD  W IH1 - SH ER0 D\nWISHART  W IH1 - SH AA2 R T\nWISHBONE  W IH1 SH - B OW2 N\nWISHED  W IH1 SH T\nWISHER  W IH1 - SH ER0\nWISHERS  W IH1 - SH ER0 Z\nWISHES  W IH1 - SH IH0 Z\nWISHFUL  W IH1 SH - F AH0 L\nWISHFULLY  W IH1 SH - F AH0 - L IY0\nWISHING  W IH1 - SH IH0 NG\nWISHNER  W IH1 SH - N ER0\nWISHNICK  W IH1 SH - N IH0 K\nWISHON  W IH1 - SH AH0 N\nWISHY  W IH1 - SH IY0\nWISINSKI  V IH0 - S IH1 N - S K IY0\nWISLER  W IH1 - S AH0 - L ER0\nWISLER(2)  W IH1 S - L ER0\nWISLEY  W IH1 Z - L IY0\nWISMAN  W IH1 Z - M AH0 N\nWISMER  W IH1 - Z AH0 - M ER0\nWISNER  W IH1 S - N ER0\nWISNESKI  V IH0 S - N EH1 S - K IY0\nWISNEWSKI  V IH0 S - N EH1 F S - K IY0\nWISNIESKI  V IH0 S - N IY1 S - K IY0\nWISNIEWSKI  W IH0 Z - N IY0 - EH1 F S - K IY0\nWISOR  W AY1 - Z ER0\nWISP  W IH1 S P\nWISPY  W IH1 - S P IY0\nWISS  W IH1 S\nWISSA  W IH1 - S AH0\nWISSEL  W IH1 - S AH0 L\nWISSER  W IH1 - S ER0\nWISSING  W IH1 - S IH0 NG\nWISSINGER  W IH1 - S IH0 - NG ER0\nWISSINK  W IH1 - S IH0 NG K\nWISSLER  W IH1 S - L ER0\nWISSMAN  W IH1 S - M AH0 N\nWISSMANN  W IH1 S - M AH0 N\nWISSNER  W IH1 S - N ER0\nWIST  W IH1 S T\nWISTFUL  W IH1 S T - F AH0 L\nWISTFULLY  W IH1 S T - F AH0 - L IY0\nWISTFULNESS  W IH1 S T - F AH0 L - N AH0 S\nWISWELL  W IH1 - S W EH0 L\nWISZ  V IH1 SH\nWIT  W IH1 T\nWIT'S  W IH1 T S\nWITBECK  W IH1 T - B EH2 K\nWITBROCK  W IH1 T - B R AO2 K\nWITCH  W IH1 CH\nWITCH'S  W IH1 - CH IH0 Z\nWITCHCRAFT  W IH1 CH - K R AE2 F T\nWITCHER  W IH1 - CH ER0\nWITCHES  W IH1 - CH AH0 Z\nWITCHES(2)  W IH1 - CH IH0 Z\nWITCHEY  W IH1 - CH IY0\nWITCHHUNT  W IH1 CH - HH AH2 N T\nWITCHING  W IH1 - CH IH0 NG\nWITCHY  W IH1 - CH IY0\nWITCO  W IH1 T - K OW0\nWITCZAK  V IH1 T - CH AE0 K\nWITEK  V IH1 - T EH0 K\nWITH  W IH1 DH\nWITH(2)  W IH1 TH\nWITH(3)  W IH0 TH\nWITH(4)  W IH0 DH\nWITHAM  W IH1 - TH AH0 M\nWITHDRAW  W IH0 DH - D R AO1\nWITHDRAW(2)  W IH0 TH - D R AO1\nWITHDRAWAL  W IH0 DH - D R AO1 - AH0 L\nWITHDRAWAL(2)  W IH0 TH - D R AO1 - AH0 L\nWITHDRAWALS  W IH0 TH - D R AO1 - AH0 L Z\nWITHDRAWALS(2)  W IH0 DH - D R AO1 - AH0 L Z\nWITHDRAWING  W IH0 TH - D R AO1 - IH0 NG\nWITHDRAWING(2)  W IH0 DH - D R AO1 - IH0 NG\nWITHDRAWN  W IH0 TH - D R AO1 N\nWITHDRAWN(2)  W IH0 DH - D R AO1 N\nWITHDRAWS  W IH0 DH - D R AO1 Z\nWITHDRAWS(2)  W IH0 TH - D R AO1 Z\nWITHDREW  W IH0 TH - D R UW1\nWITHDREW(2)  W IH0 DH - D R UW1\nWITHEE  W IH1 - TH IY1\nWITHEM  W IH1 - TH IH0 M\nWITHER  W IH1 - DH ER0\nWITHERED  W IH1 - DH ER0 D\nWITHERELL  W IH1 - TH ER0 - AH0 L\nWITHERING  W IH1 - DH ER0 - IH0 NG\nWITHERINGTON  W IH1 - TH ER0 - IH0 NG - T AH0 N\nWITHEROW  W IH1 - TH ER0 - OW0\nWITHERS  W IH1 - DH ER0 Z\nWITHERSPOON  W IH1 - DH ER0 - S P UW2 N\nWITHEY  W IH1 - TH IY0\nWITHHELD  W IH0 TH - HH EH1 L D\nWITHHOLD  W IH0 TH - HH OW1 L D\nWITHHOLDING  W IH0 TH - HH OW1 L - D IH0 NG\nWITHHOLDS  W IH1 TH - HH OW2 L D Z\nWITHIN  W IH0 - DH IH1 N\nWITHIN(2)  W IH0 - TH IH1 N\nWITHINGTON  W IH1 - TH IH0 NG - T AH0 N\nWITHNAIL  W IH0 TH - N EY1 L\nWITHOUT  W IH0 - TH AW1 T\nWITHOUT(2)  W IH0 DH - AW1 T\nWITHROW  W IH1 - TH R OW2\nWITHSTAND  W IH0 TH - S T AE1 N D\nWITHSTANDING  W IH0 TH - S T AE1 N - D IH0 NG\nWITHSTANDS  W IH0 TH - S T AE1 N D Z\nWITHSTOOD  W IH0 TH - S T UH1 D\nWITKIN  W IH1 T - K IH2 N\nWITKOP  W IH1 T K - AH0 P\nWITKOWSKI  V IH0 T - K AO1 F S - K IY0\nWITLESS  W IH1 T - L AH0 S\nWITMAN  W IH1 T - M AH0 N\nWITMER  W IH1 T - M ER0\nWITNESS  W IH1 T - N AH0 S\nWITNESS'  W IH1 T - N AH0 S\nWITNESS'S  W IH1 T - N AH0 - S IH0 Z\nWITNESSED  W IH1 T - N AH0 S T\nWITNESSES  W IH1 T - N AH0 - S AH0 Z\nWITNESSES'  W IH1 T - N AH0 - S IH0 Z\nWITNESSES(2)  W IH1 T - N AH0 - S IH0 Z\nWITNESSING  W IH1 T - N AH0 - S IH0 NG\nWITOWSKI  V IH0 - T AO1 F S - K IY0\nWITS  W IH1 T S\nWITT  W IH1 T\nWITTE  W IH1 T\nWITTED  W IH1 - T IH0 D\nWITTEKIND  W IH1 - T IH0 - K IH0 N D\nWITTEMAN  W IH1 T - M AH0 N\nWITTEN  W IH1 - T AH0 N\nWITTENAUER  W IH1 - T IH0 - N AW0 - ER0\nWITTENBERG  W IH1 - T AH0 N - B ER0 G\nWITTENBORN  W IH1 - T IH0 N - B ER0 N\nWITTENBURG  W IH1 - T AH0 N - B ER0 G\nWITTENMYER  W IH1 - T IH0 N - M IY0 - ER0\nWITTENMYER(2)  W IH1 - T IH0 N - M AY0 - ER0\nWITTER  W IH1 - T ER0\nWITTER'S  W IH1 - T ER0 Z\nWITTERS  W IH1 - T ER0 Z\nWITTHUHN  W IH1 - TH AH0 N\nWITTIG  W IH1 - T IH0 G\nWITTILY  W IH1 - T AH0 - L IY0\nWITTING  W IH1 - T IH0 NG\nWITTINGLY  W IH1 - T IH0 NG - L IY0\nWITTKE  W IH1 T - K IY0\nWITTKOPP  W IH1 T K - AH0 P\nWITTLER  W IH1 T - L ER0\nWITTMAN  W IH1 T - M AH0 N\nWITTMANN  W IH1 T - M AH0 N\nWITTMER  W IH1 T - M ER0\nWITTMEYER  W IH1 T - M AY0 - ER0\nWITTNER  W IH1 T - N ER0\nWITTON  W IH1 - T AH0 N\nWITTROCK  W IH1 - T R AH0 K\nWITTS  W IH1 T S\nWITTWER  W IH1 T - W ER0\nWITTY  W IH1 - T IY0\nWITUCKI  W IH0 - T AH1 - K IY0\nWITWATERSRAND  W IH1 T - W AO2 - T ER0 - S R AE0 N D\nWITWER  W IH1 T - W ER0\nWITZ  W IH1 T S\nWITZEL  W IH1 T - Z AH0 L\nWITZIG  W IH1 T - Z IH0 G\nWITZKE  W IH1 T S - K IY0\nWIVES  W AY1 V Z\nWIVES'  W AY1 V Z\nWIX  W IH1 K S\nWIXOM  W IH1 K - S AH0 M\nWIXON  W IH1 K - S AH0 N\nWIXSON  W IH1 K - S AH0 N\nWIXTED  W IH1 K - S T IH0 D\nWIZ  W IH1 Z\nWIZ(2)  HH W IH1 Z\nWIZARD  W IH1 - Z ER0 D\nWIZARDRY  W IH1 - Z ER0 - D R IY0\nWIZARDS  W IH1 - Z ER0 D Z\nWIZEN  W AY1 - Z AH0 N\nWIZENED  W AY1 - Z AH0 N D\nWLODARCZYK  W AH0 - L AA1 - D ER0 - CH IH0 K\nWLODARSKI  W AH0 - L AH0 - D AA1 R S - K IY0\nWM  W IH1 - L Y AH0 M\nWM(2)  D AH1 - B AH0 - Y UW0 - EH1 M\nWNEK  W N EH1 K\nWNUK  W N AH1 K\nWO  W OW1\nWO(2)  HH W OW1\nWOBBE  W AA1 B\nWOBBLE  W AA1 - B AH0 L\nWOBBLED  W AA1 - B AH0 L D\nWOBBLING  W AA1 - B AH0 L - IH0 NG\nWOBBLING(2)  W AA1 - B L IH0 NG\nWOBBLY  W AA1 - B AH0 L - IY0\nWOBEGON  W OW1 - B AH0 - G AA0 N\nWOBIG  W OW1 - B IH0 G\nWOBST  W AA1 B S T\nWOBURN  W UW1 - B ER0 N\nWOE  W OW1\nWOEBEGONE  W OW1 - B IH0 - G AO2 N\nWOEFUL  W OW1 - F AH0 L\nWOEFULLY  W OW1 - F AH0 - L IY0\nWOEHL  W OW1 L\nWOEHLER  W OW1 - L ER0\nWOEHR  W AO1 R\nWOEHRLE  W AO1 - R AH0 L\nWOELFEL  W OW1 L - F AH0 L\nWOELFLE  W OW1 L - F AH0 L\nWOERNER  W AO1 R - N ER0\nWOES  W OW1 Z\nWOESSNER  W OW1 S - N ER0\nWOESTE  W OW1 S T\nWOFFORD  W AA1 - F ER0 D\nWOFFORD'S  W AA1 - F ER0 D Z\nWOGAN  W OW1 - G AH0 N\nWOGOMAN  W OW1 - G OW0 - M AH0 N\nWOHL  W OW1 L\nWOHLER  W OW1 - L ER0\nWOHLERS  W OW1 - L ER0 Z\nWOHLFARTH  W OW1 L - F AA2 R TH\nWOHLFEIL  W OW1 L - F AY2 L\nWOHLFORD  W OW1 L - F ER0 D\nWOHLGEMUTH  W OW1 L - G AH0 - M UW0 TH\nWOHLSTETTER  W OW1 L - S T EH2 - T ER0\nWOHLWEND  W OW1 L - W EH0 N D\nWOITSCHATZKE  W OY2 - CH AE1 T S - K IY2\nWOJAHN  W OW1 - HH AA0 N\nWOJCIAK  W OY1 - CH IY0 - AE0 K\nWOJCICKI  W OY2 - CH IH1 T S - K IY0\nWOJCIECH  W OY1 - CH EH0 K\nWOJCIECH(2)  V OY1 - CH EH0 K\nWOJCIECHOWSKI  W OY0 - CH IH0 - HH AO1 F S - K IY0\nWOJCIK  W OY1 - CH IH0 K\nWOJDYLA  W OY2 - D IH1 - L AH0\nWOJICK  W OY1 - CH IH0 K\nWOJNAR  W OY1 - N ER0\nWOJNAROWSKI  W OY2 - N ER0 - AW1 S - K IY0\nWOJNILOWER  W OY1 - N AH0 - L OW2 - ER0\nWOJNOWSKI  W OY2 - N AW1 S - K IY0\nWOJTAS  W OY1 - T AH0 S\nWOJTASZEK  W OY2 - T AA1 - SH EH0 K\nWOJTKIEWICZ  W OY1 T - K AH0 - V IH0 CH\nWOJTKOWSKI  W OY2 T - K AW1 S - K IY0\nWOJTOWICZ  W OY1 - T AH0 - V IH0 CH\nWOK  W AA1 K\nWOKE  W OW1 K\nWOKEN  W OW1 - K AH0 N\nWOLA  W OW1 - L AH0\nWOLAK  W OW1 - L AH0 K\nWOLANIN  W AA1 - L AH0 - N IH0 N\nWOLANSKI  V AH0 - L AE1 N S - K IY0\nWOLAVER  W AA1 - L AH0 - V ER0\nWOLBER  W OW1 L - B ER0\nWOLBERT  W OW1 L - B ER0 T\nWOLCOTT  W OW1 L - K AH0 T\nWOLD  W OW1 L D\nWOLDEN  W OW1 L - D AH0 N\nWOLDT  W OW1 L T\nWOLENZAC  W OW1 - L AH0 N - Z AE2 K\nWOLENZAC'S  W OW1 - L AH0 N - Z AE2 K S\nWOLF  W UH1 L F\nWOLF'S  W UH1 L F S\nWOLFARTH  W UH1 L - F AA0 R TH\nWOLFE  W UH1 L F\nWOLFE'S  W UH1 L F S\nWOLFENBARGER  W UH1 L - F IH0 N - B AA0 R - G ER0\nWOLFENDEN  W UH1 L - F EH2 N - D AH0 N\nWOLFENSCHMIDT  W UH1 L - F AH0 N SH - M IH2 T\nWOLFENSOHN  W UH1 L - F AH0 N - S AH0 N\nWOLFER  W UH1 L - F ER0\nWOLFERT  W UH1 L - F ER0 T\nWOLFF  W UH1 L F\nWOLFGANG  W UH1 L F - G AE2 NG\nWOLFGRAM  W UH1 L F - G R AE2 M\nWOLFINBARGER  W UH1 L - F IH0 N - B AA2 R - G ER0\nWOLFINGER  W UH1 L - F IH0 - NG ER0\nWOLFLEY  W UH1 L F - L IY0\nWOLFMAN  W UH1 L F - M AH0 N\nWOLFORD  W OW1 L - F ER0 D\nWOLFRAM  W UH1 L - F R AE2 M\nWOLFREY  W UH1 L - F R IY0\nWOLFROM  W UH1 L - F R AH0 M\nWOLFRUM  W UH1 L - F R AH0 M\nWOLFSBURG  W UH1 L F S - B ER0 G\nWOLFSON  W UH1 L F - S AH0 N\nWOLGAMOTT  W OW1 L - G AH0 - M AA0 T\nWOLGAST  W OW1 L - G AH0 S T\nWOLGEMUTH  W OW1 L - G IH0 - M UW0 TH\nWOLIN  W OW1 - L IH0 N\nWOLINSKI  V AH0 - L IH1 N - S K IY0\nWOLINSKY  V AH0 - L IH1 N - S K IY0\nWOLITARSKY  W OW2 - L IH0 - T AA1 R S - K IY0\nWOLK  W OW1 K\nWOLKE  W OW1 L K\nWOLKEN  W OW1 - K AH0 N\nWOLKEN(2)  W AO1 L - K AH0 N\nWOLKOFF  W OW1 L - K AO0 F\nWOLL  W AA1 L\nWOLLACK  W AA1 - L AH0 K\nWOLLAEGER  W AH0 - L EY1 - G ER0\nWOLLAM  W AA1 - L AH0 M\nWOLLARD  W AA1 - L ER0 D\nWOLLE  W AA1 L\nWOLLEN  W AA1 - L AH0 N\nWOLLENBERG  W AA1 - L AH0 N - B ER0 G\nWOLLENWEBER  W AA1 - L IH0 N - W IH0 - B ER0\nWOLLER  W AA1 - L ER0\nWOLLIN  W AA1 - L IH0 N\nWOLLMAN  W AA1 L - M AH0 N\nWOLLNER  W AA1 L - N ER0\nWOLLSCHLAGER  W AA1 L SH - L EY0 - G ER0\nWOLMAN  W AA1 L - M AH0 N\nWOLOHAN  W AA1 - L AH0 - HH AE0 N\nWOLOSZYN  V AH0 - L AA1 - SH IH0 N\nWOLPE  W OW1 L - P IY0\nWOLPER  W OW1 L - P ER0\nWOLPERT  W OW1 L - P ER0 T\nWOLRATH  W OW1 L - R AE2 TH\nWOLSEY  W OW1 L - S IY0\nWOLSFELD  W OW1 L Z - F EH2 L D\nWOLSKE  W OW1 L S K\nWOLSKI  V OW1 L S - K IY0\nWOLSKY  V OW1 L S - K IY0\nWOLSTENHOLME  W OW1 L - S T IH0 N - HH OW0 L M\nWOLTER  W OW1 L - T ER0\nWOLTERS  W OW1 L - T ER0 Z\nWOLTMAN  W OW1 L T - M AH0 N\nWOLTZ  W OW1 L T S\nWOLVEN  W UH1 L - V AH0 N\nWOLVERINE  W UH2 L - V ER0 - IY1 N\nWOLVERINE'S  W UH2 L - V ER0 - IY1 N Z\nWOLVERTON  W UH0 L - V ER1 - T AH0 N\nWOLVES  W UH1 L V Z\nWOLZ  W OW1 L Z\nWOMAC  W OW1 - M AH0 K\nWOMACK  W OW1 - M AE0 K\nWOMAN  W UH1 - M AH0 N\nWOMAN'S  W UH1 - M AH0 N Z\nWOMANHOOD  W UH1 - M AH0 N - HH UH2 D\nWOMANIZE  W UH1 - M AH0 - N AY2 Z\nWOMANIZER  W UH1 - M AH0 - N AY2 - Z ER0\nWOMANIZING  W UH1 - M AH0 - N AY2 - Z IH0 NG\nWOMB  W UW1 M\nWOMBACHER  W AA1 M - B AA2 - K ER0\nWOMBAT  W AA1 M - B AE2 T\nWOMBATS  W AA1 M - B AE2 T S\nWOMBLE  W AA1 M - B AH0 L\nWOMBLES  W AA1 M - B AH0 L Z\nWOMEN  W IH1 - M AH0 N\nWOMEN'S  W IH1 - M AH0 N Z\nWOMENS'  W IH1 - M AH0 N Z\nWOMER  W OW1 - M ER0\nWOMETCO  W OW0 - M EH1 T - K OW0\nWOMMACK  W AA1 - M AH0 K\nWON  W AH1 N\nWON'T  W OW1 N T\nWON(2)  W AA1 N\nWONDA  W AA1 N - D AH0\nWONDER  W AH1 N - D ER0\nWONDER'S  W AH1 N - D ER0 Z\nWONDERED  W AH1 N - D ER0 D\nWONDERFUL  W AH1 N - D ER0 - F AH0 L\nWONDERFULLY  W AH1 N - D ER0 - F AH0 - L IY0\nWONDERFULLY(2)  W AH1 N - D ER0 F - L IY0\nWONDERFULNESS  W AH1 N - D ER0 - F AH0 L - N AH0 S\nWONDERING  W AH1 N - D ER0 - IH0 NG\nWONDERLAND  W AH1 N - D ER0 - L AE2 N D\nWONDERLY  W AH1 N - D ER0 - L IY0\nWONDERMENT  W AH1 N - D ER0 - M AH0 N T\nWONDERS  W AH1 N - D ER0 Z\nWONDRA  W AA1 N - D R AH0\nWONDROUS  W AH1 N - D R AH0 S\nWONG  W AO1 NG\nWONG'S  W AO1 NG Z\nWONK  W AA1 N K\nWONKS  W AA1 N K S\nWONKSAHACHEE  W AA0 N K - S AH0 - HH AE1 - CH IY0\nWONNACOTT  W AH1 - N AH0 - K AA0 T\nWONT  W OW1 N T\nWOO  W UW1\nWOO'S  W UW1 Z\nWOOD  W UH1 D\nWOOD'S  W UH1 D Z\nWOODALL  W UH1 - D AO2 L\nWOODARD  W UH1 - D ER0 D\nWOODBECK  W UH1 D - B EH2 K\nWOODBERRY  W UH1 D - B EH2 - R IY0\nWOODBRIDGE  W UH1 D - B R IH2 JH\nWOODBURN  W UH1 D - B ER2 N\nWOODBURY  W UH1 D - B EH2 - R IY0\nWOODBY  W UH1 D - B IY0\nWOODCARVER  W UH1 D - K AA2 R - V ER0\nWOODCARVERS  W UH1 D - K AA2 R - V ER0 Z\nWOODCHIP  W UH1 D - CH IH2 P\nWOODCHIPS  W UH1 D - CH IH2 P S\nWOODCHUCK  W UH1 D - CH AH2 K\nWOODCLIFF  W UH1 D - K L IH2 F\nWOODCOCK  W UH1 D - K AA2 K\nWOODCOX  W UH1 D - K AA2 K S\nWOODDELL  W UH1 - D AH0 L\nWOODED  W UH1 - D IH0 D\nWOODELL  W UH1 - D AH0 L\nWOODEN  W UH1 - D AH0 N\nWOODFIELD  W UH1 D - F IY2 L D\nWOODFILL  W UH1 D - F IH2 L\nWOODFIN  W UH1 D - F IH0 N\nWOODFORD  W UH1 D - F ER0 D\nWOODFORK  W UH1 D - F ER0 K\nWOODHALL  W UH1 D - HH AO2 L\nWOODHAM  W UH1 D - HH AH0 M\nWOODHAMS  W UH1 D - HH AH0 M Z\nWOODHEAD  W UH1 D - HH EH2 D\nWOODHOUSE  W UH1 D - HH AW2 S\nWOODHULL  W UH1 D - HH AH2 L\nWOODIE  W UH1 - D IY0\nWOODIN  W UH1 - D IH0 N\nWOODING  W UH1 - D IH0 NG\nWOODINGTON  W UH1 - D IH0 NG - T AH0 N\nWOODIS  W UH1 - D IH0 S\nWOODKE  W UH1 D - K IY0\nWOODLAND  W UH1 D - L AE2 N D\nWOODLAND(2)  W UH1 D - L AH0 N D\nWOODLANDS  W UH1 D - L AE2 N D Z\nWOODLANDS(2)  W UH1 D - L AH0 N D Z\nWOODLE  W UH1 - D AH0 L\nWOODLEE  W UH1 D - L IY2\nWOODLEY  W UH1 D - L IY0\nWOODLIEF  W UH1 D - L IY2 F\nWOODLIFF  W UH1 D - L IH0 F\nWOODLING  W UH1 D - L IH0 NG\nWOODLOCK  W UH1 D - L AA2 K\nWOODLOT  W UH1 D - L AA2 T\nWOODMAC  W UH1 D - M AE0 K\nWOODMAN  W UH1 D - M AH0 N\nWOODMANSEE  W UH0 D - M AH0 N - S IY1\nWOODPECKER  W UH1 D - P EH2 - K ER0\nWOODPECKERS  W UH1 D - P EH2 - K ER0 Z\nWOODRICH  W UH1 D - R IH2 CH\nWOODRICK  W UH1 - D R IH0 K\nWOODRING  W UH1 D - R IH2 NG\nWOODROME  W UH1 - D R AH0 M\nWOODROOF  W UH1 D - R UW2 F\nWOODROW  W UH1 - D R OW2\nWOODRUFF  W UH1 - D R AH0 F\nWOODRUM  W UH1 - D R AH0 M\nWOODS  W UH1 D Z\nWOODSHED  W UH1 D - SH EH2 D\nWOODSIDE  W UH1 D - S AY2 D\nWOODSMALL  W UH1 D - S M AO2 L\nWOODSMAN  W UH1 D Z - M AE0 N\nWOODSMEN  W UH1 D Z - M AH0 N\nWOODSMEN'S  W UH1 D Z - M AH0 N Z\nWOODSON  W UH1 D - S AH0 N\nWOODSTOCK  W UH1 D - S T AA2 K\nWOODSTREAM  W UH1 D - S T R IY2 M\nWOODWARD  W UH1 D - W AO2 R D\nWOODWARD'S  W UH1 D - W ER0 D Z\nWOODWARD(2)  W UH1 D - W ER0 D\nWOODWIND  W UH1 D - W IH2 N D\nWOODWINDS  W UH1 D - W IH2 N D Z\nWOODWORK  W UH1 D - W ER2 K\nWOODWORKER  W UH1 D - W ER2 - K ER0\nWOODWORKERS  W UH1 D - W ER2 - K ER0 Z\nWOODWORKING  W UH1 D - W ER2 - K IH0 NG\nWOODWORTH  W UH1 D - W ER2 TH\nWOODY  W UH1 - D IY0\nWOODY'S  W UH1 - D IY0 Z\nWOODYARD  W UH1 D - Y AA2 R D\nWOOED  W UW1 D\nWOOF  W UW1 F\nWOOFTER  W UW1 F - T ER0\nWOOGIE  W UW1 - G IY0\nWOOGIE(2)  W UH1 - G IY0\nWOOING  W UW1 - IH0 NG\nWOOL  W UH1 L\nWOOLARD  W UH1 - L ER0 D\nWOOLBRIGHT  W UH1 L - B R AY2 T\nWOOLCO  W UH1 L - K OW2\nWOOLCOCK  W UH1 L - K AA2 K\nWOOLDRIDGE  W UH1 L - D R IH0 JH\nWOOLEN  W UH1 - L AH0 N\nWOOLENS  W UH1 - L AH0 N Z\nWOOLERY  W UH1 - L ER0 - IY0\nWOOLEVER  W UH1 L - EH2 - V ER0\nWOOLEY  W UH1 - L IY0\nWOOLF  W UH1 L F\nWOOLFOLK  W UH1 L - F OW2 K\nWOOLFORD  W UH1 L - F ER0 D\nWOOLFORK  W UH1 L - F AO2 R K\nWOOLLARD  W UH1 - L ER0 D\nWOOLLCOTT  W UH1 L - K AA0 T\nWOOLLEN  W UH1 - L AH0 N\nWOOLLEY  W UH1 - L IY0\nWOOLLY  W UH1 - L IY0\nWOOLMAN  W UH1 L - M AH0 N\nWOOLRIDGE  W UH1 L - R IH2 JH\nWOOLS  W UH1 L Z\nWOOLSEY  W UH1 L - Z IY0\nWOOLSEY'S  W UH1 L - Z IY0 Z\nWOOLSON  W UH1 L - S AH0 N\nWOOLSTON  W UH1 L - S T AH0 N\nWOOLUM  W UH1 - L AH0 M\nWOOLUMS  W UH1 - L AH0 M Z\nWOOLVERTON  W UH1 L - V ER0 - T AH0 N\nWOOLWINE  W UH1 L - W AY2 N\nWOOLWORTH  W UH1 L - W ER2 TH\nWOOLWORTH'S  W UH1 L - W ER2 TH S\nWOOLY  W UH1 - L IY0\nWOOMER  W UW1 - M ER0\nWOONG  W UW1 NG\nWOOS  W UW1 Z\nWOOSLEY  W UW1 Z - L IY0\nWOOSTER  W UW1 - S T ER0\nWOOTAN  W UW1 - T AH0 N\nWOOTEN  W UW1 - T AH0 N\nWOOTERS  W UW1 - T ER0 Z\nWOOTON  W UW1 - T AH0 N\nWOOTTEN  W UW1 - T AH0 N\nWOOTTON  W UW1 - T AH0 N\nWOOZY  W UW1 - Z IY0\nWOP  W AA1 P\nWOPS  W AA1 P S\nWOR  W AO1 R\nWOR(2)  D AH1 - B EH0 L - Y UW1 - OW1 - AA1 R\nWOR(3)  D AH1 - B AH0 - Y UW1 - OW1 - AA1 R\nWORCESTER  W UH1 - S T ER0\nWORD  W ER1 D\nWORD'S  W ER1 D Z\nWORDED  W ER1 - D IH0 D\nWORDELL  W ER1 - D AH0 L\nWORDEN  W ER1 - D AH0 N\nWORDING  W ER1 - D IH0 NG\nWORDLESS  W ER1 D - L AH0 S\nWORDPERFECT  W ER1 D - P ER1 - F EH0 K T\nWORDS  W ER1 D Z\nWORDSMITH  W ER1 D - S M IH2 TH\nWORDSTAR  W ER1 D - S T AA2 R\nWORDSWORTH  W ER1 D Z - W ER0 TH\nWORDY  W ER1 - D IY0\nWORE  W AO1 R\nWORK  W ER1 K\nWORK'S  W ER1 K S\nWORKABLE  W ER1 - K AH0 - B AH0 L\nWORKADAY  W ER1 - K AH0 - D EY2\nWORKAHOLIC  W ER1 - K AH0 - HH AA1 - L IH0 K\nWORKAHOLICS  W ER2 - K AH0 - HH AA1 - L IH0 K S\nWORKBENCH  W ER1 K - B EH2 N CH\nWORKDAY  W ER1 K - D EY2\nWORKDAYS  W ER1 K - D EY2 Z\nWORKED  W ER1 K T\nWORKER  W ER1 - K ER0\nWORKER'S  W ER1 - K ER0 Z\nWORKERS  W ER1 - K ER0 Z\nWORKERS'  W ER1 - K ER0 Z\nWORKFARE  W ER1 K - F EH2 R\nWORKFORCE  W ER1 K - F AO2 R S\nWORKGROUP  W ER1 K - G R UW2 P\nWORKGROUPS  W ER1 K - G R UW2 P S\nWORKHORSE  W ER1 K - HH AO2 R S\nWORKHORSES  W ER1 K - HH AO2 R - S IH0 Z\nWORKIN'  W ER1 - K AH0 N\nWORKING  W ER1 - K IH0 NG\nWORKINGER  W ER1 - K IH0 - NG ER0\nWORKINGS  W ER1 - K IH0 NG Z\nWORKLOAD  W ER1 K - L OW2 D\nWORKLOADS  W ER1 K - L OW2 D Z\nWORKMAN  W ER1 K - M AH0 N\nWORKMAN'S  W ER1 K - M AH0 N Z\nWORKMANLIKE  W ER1 K - M AE2 N - L AY2 K\nWORKMANSHIP  W ER1 K - M AH0 N - SH IH2 P\nWORKMEN  W ER1 K - M IH0 N\nWORKMEN'S  W ER1 K - M AH0 N Z\nWORKOUT  W ER1 K - AW2 T\nWORKOUTS  W ER1 K - AW2 T S\nWORKPLACE  W ER1 K - P L EY2 S\nWORKPLACES  W ER1 K - P L EY2 - S IH0 Z\nWORKROOM  W ER1 K - R UW2 M\nWORKS  W ER1 K S\nWORKS'  W ER1 K S\nWORKSHEET  W ER1 K - SH IY2 T\nWORKSHEETS  W ER1 K - SH IY2 T S\nWORKSHOP  W ER1 K - SH AA2 P\nWORKSHOPS  W ER1 K - SH AA2 P S\nWORKSTATION  W ER1 K - S T EY2 - SH AH0 N\nWORKSTATIONS  W ER1 K - S T EY2 - SH AH0 N Z\nWORKWEEK  W ER1 K - W IY2 K\nWORKWEEKS  W ER1 K - W IY2 K S\nWORLAND  W ER1 - L AH0 N D\nWORLCO  W ER1 L - K OW0\nWORLD  W ER1 L D\nWORLD'S  W ER1 L D Z\nWORLDCOM  W ER1 L D - K AA2 M\nWORLDCORP  W ER1 L D - K AO2 R P\nWORLDER  W ER1 L - D ER0\nWORLDERS  W ER1 L - D ER0 Z\nWORLDLINESS  W ER1 L D - L IY0 - N AH0 S\nWORLDLY  W ER1 L D - L IY0\nWORLDNEWS  W ER1 L D - N UW1 Z\nWORLDPASS  W ER1 L D - P AE2 S\nWORLDS  W ER1 L D Z\nWORLDSCOPE  W ER1 L D - S K OW2 P\nWORLDSPAN  W ER1 L D - S P AE2 N\nWORLDVISION  W ER1 L D - V IH2 - ZH AH0 N\nWORLDWIDE  W ER1 L D - W AY1 D\nWORLDWIDE'S  W ER1 L D - W AY2 D Z\nWORLEY  W ER1 - L IY0\nWORM  W ER1 M\nWORM'S  W ER1 M Z\nWORMAN  W ER1 - M AH0 N\nWORMINGTON  W ER1 - M IH0 NG - T AH0 N\nWORMLEY  W ER1 M - L IY0\nWORMLIKE  W ER1 M - L AY2 K\nWORMS  W ER1 M Z\nWORMSER  W ER1 M - Z ER0\nWORMUTH  W ER1 - M UW0 TH\nWORMWOOD  W ER1 M - W UH2 D\nWORN  W AO1 R N\nWORNER  W AO1 R - N ER0\nWORONOFF  W AO1 - R AH0 - N AO0 F\nWORRALL  W ER1 - R AH0 L\nWORREL  W ER1 - R AH0 L\nWORRELL  W ER1 - R AH0 L\nWORRIED  W ER1 - IY0 D\nWORRIER  W ER1 - IY0 - ER0\nWORRIERS  W ER1 - IY0 - ER0 Z\nWORRIES  W ER1 - IY0 Z\nWORRISOME  W ER1 - IY0 - S AH0 M\nWORRY  W ER1 - IY0\nWORRYING  W ER1 - IY0 - IH0 NG\nWORSE  W ER1 S\nWORSECK  W ER1 - S EH0 K\nWORSECK(2)  W AO1 R - S EH0 K\nWORSEN  W ER1 - S AH0 N\nWORSENED  W ER1 - S AH0 N D\nWORSENING  W ER1 - S AH0 N - IH0 NG\nWORSENING(2)  W ER1 S - N IH0 NG\nWORSENS  W ER1 - S AH0 N Z\nWORSHAM  W ER1 - SH AH0 M\nWORSHIP  W ER1 - SH AH0 P\nWORSHIP(2)  W ER1 - SH IH0 P\nWORSHIPED  W ER1 - SH IH0 P T\nWORSHIPER  W ER1 - SH AH0 - P ER0\nWORSHIPERS  W ER1 - SH IH0 - P ER0 Z\nWORSHIPFUL  W ER1 - SH AH0 P - F AH0 L\nWORSHIPPED  W ER1 - SH AH0 P T\nWORSHIPPERS  W ER1 - SH IH0 - P ER0 Z\nWORSHIPPING  W ER1 - SH AH0 - P IH0 NG\nWORSHIPS  W ER1 - SH AH0 P S\nWORSLEY  W ER1 S - L IY0\nWORST  W ER1 S T\nWORSTED  W ER1 - S T IH0 D\nWORSTELL  W ER1 - S T AH0 L\nWORSTER  W ER1 - S T ER0\nWORTH  W ER1 TH\nWORTH'S  W ER1 TH S\nWORTHAM  W ER1 - TH AH0 M\nWORTHEN  W ER1 - TH AH0 N\nWORTHEN'S  W ER1 - TH AH0 N Z\nWORTHEY  W ER1 - DH IY0\nWORTHIER  W ER1 - DH IY0 - ER0\nWORTHIES  W ER1 - DH IY0 Z\nWORTHIEST  W ER1 - DH IY0 - AH0 S T\nWORTHINESS  W ER1 - DH IY0 - N IH0 S\nWORTHING  W ER1 - TH IH0 NG\nWORTHINGTON  W ER1 - DH IH0 NG - T AH0 N\nWORTHLESS  W ER1 TH - L AH0 S\nWORTHLEY  W ER1 TH - L IY0\nWORTHMAN  W ER1 TH - M AH0 N\nWORTHS  W ER1 TH S\nWORTHWHILE  W ER1 TH - W AY1 L\nWORTHY  W ER1 - DH IY0\nWORTLEY  W ER1 T - L IY0\nWORTMAN  W ER1 T - M AH0 N\nWORTMANN  W ER1 T - M AH0 N\nWORTON  W ER1 - T AH0 N\nWORTS  W ER1 T S\nWOTAN  W OW1 - T AH0 N\nWOTHERSPOON  W AH0 - DH ER0 - S P UW1 N\nWOTRING  W AA1 - T ER0 - IH0 NG\nWOTTON  W AA1 - T AH0 N\nWOUK  W UW1 K\nWOUK(2)  W OW1 K\nWOULD  W UH1 D\nWOULD'VE  W UH1 - D AH0 V\nWOULDN'T  W UH1 - D AH0 N T\nWOULFE  W AW1 L F\nWOUND  W AW1 N D\nWOUND(2)  W UW1 N D\nWOUNDED  W UW1 N - D AH0 D\nWOUNDED(2)  W UW1 N - D IH0 D\nWOUNDING  W UW1 N - D IH0 NG\nWOUNDS  W UW1 N D Z\nWOUTERS  W AW1 - T ER0 Z\nWOVE  W OW1 V\nWOVEN  W OW1 - V AH0 N\nWOW  W AW1\nWOW'S  W AW1 Z\nWOWED  W AW1 D\nWOWIE  W AW1 - IY0\nWOWING  W AW1 - IH0 NG\nWOWS  W AW1 Z\nWOY  W OY1\nWOZNIAK  V AA1 Z - N IY0 - AE0 K\nWOZNICK  W AA1 Z - N IH0 K\nWOZNICKI  V AH0 Z - N IH1 T S - K IY0\nWOZNY  W AA1 Z - N IY0\nWRACK  R AE1 K\nWRACKED  R AE1 K T\nWRACKING  R AE1 - K IH0 NG\nWRAGE  R EY1 JH\nWRAGG  R AE1 G\nWRANGELL  R AE1 NG - G AH0 L\nWRANGLE  R AE1 NG - G AH0 L\nWRANGLED  R AE1 NG - G AH0 L D\nWRANGLER  R AE1 NG - G AH0 - L ER0\nWRANGLER(2)  R AE1 NG - G L ER0\nWRANGLERS  R AE1 NG - G AH0 - L ER0 Z\nWRANGLERS(2)  R AE1 NG - G L ER0 Z\nWRANGLES  R AE1 NG - G AH0 L Z\nWRANGLING  R AE1 NG - G AH0 - L IH0 NG\nWRANGLING(2)  R AE1 NG - G L IH0 NG\nWRAP  R AE1 P\nWRAPPED  R AE1 P T\nWRAPPER  R AE1 - P ER0\nWRAPPERS  R AE1 - P ER0 Z\nWRAPPING  R AE1 - P IH0 NG\nWRAPS  R AE1 P S\nWRAPUP  R AE1 - P AH0 P\nWRATH  R AE1 TH\nWRATHER  R AE1 - DH ER0\nWRAY  R EY1\nWREAK  R IY1 K\nWREAKED  R IY1 K T\nWREAKING  R IY1 - K IH0 NG\nWREAKS  R IY1 K S\nWREATH  R IY1 TH\nWREATHS  R IY1 TH S\nWREATHS(2)  R IY1 DH Z\nWRECK  R EH1 K\nWRECKAGE  R EH1 - K AH0 JH\nWRECKAGE(2)  R EH1 - K IH0 JH\nWRECKED  R EH1 K T\nWRECKER  R EH1 - K ER0\nWRECKING  R EH1 - K IH0 NG\nWRECKS  R EH1 K S\nWREDE  R IY1 D\nWREN  R EH1 N\nWRENCH  R EH1 N CH\nWRENCHED  R EH1 N CH T\nWRENCHES  R EH1 N - CH IH0 Z\nWRENCHING  R EH1 N - CH IH0 NG\nWRENN  R EH1 N\nWREST  R EH1 S T\nWRESTED  R EH1 - S T IH0 D\nWRESTING  R EH1 - S T IH0 NG\nWRESTLE  R EH1 - S AH0 L\nWRESTLED  R EH1 - S AH0 L D\nWRESTLER  R EH1 - S AH0 - L ER0\nWRESTLER(2)  R EH1 S - L ER0\nWRESTLERS  R EH1 S - L ER0 Z\nWRESTLERS(2)  R EH1 - S AH0 - L ER0 Z\nWRESTLES  R EH1 - S AH0 L Z\nWRESTLING  R EH1 - S L IH0 NG\nWRESTLING(2)  R EH1 - S AH0 - L IH0 NG\nWRETCHED  R EH1 - CH IH0 D\nWRETCHEDLY  R EH1 - CH IH0 D - L IY0\nWRICE  R AY1 S\nWRIGGLE  R IH1 - G AH0 L\nWRIGHT  R AY1 T\nWRIGHT'S  R AY1 T S\nWRIGHTS  R AY1 T S\nWRIGHTSMAN  R AY1 T S - M AH0 N\nWRIGHTSON  R AY1 T - S AH0 N\nWRIGLEY  R IH1 G - L IY0\nWRIGLEY'S  R IH1 - G L IY0 Z\nWRING  R IH1 NG\nWRINGER  R IH1 - NG ER0\nWRINGING  R IH1 - NG IH0 NG\nWRINKLE  R IH1 NG - K AH0 L\nWRINKLED  R IH1 NG - K AH0 L D\nWRINKLES  R IH1 NG - K AH0 L Z\nWRINKLING  R IH1 NG - K AH0 L - IH0 NG\nWRINKLING(2)  R IH1 NG - K L IH0 NG\nWRISLEY  R IH1 Z - L IY0\nWRIST  R IH1 S T\nWRISTON  R IH1 - S T AH0 N\nWRISTS  R IH1 S T S\nWRISTWATCH  R IH1 S T - W AA2 CH\nWRISTWATCHES  R IH1 S T - W AA2 - CH IH0 Z\nWRIT  R IH1 T\nWRITE  R AY1 T\nWRITEDOWN  R AY1 T - D AW2 N\nWRITEDOWNS  R AY1 T - D AW2 N Z\nWRITEOFF  R AY1 - T AO0 F\nWRITEOFFS  R AY1 - T AO0 F S\nWRITER  R AY1 - T ER0\nWRITER'S  R AY1 - T ER0 Z\nWRITERS  R AY1 - T ER0 Z\nWRITERS'  R AY1 - T ER0 Z\nWRITES  R AY1 T S\nWRITHE  R IH1 TH\nWRITHING  R AY1 - DH IH0 NG\nWRITHING(2)  R IH1 - TH IH0 NG\nWRITING  R AY1 - T IH0 NG\nWRITINGS  R AY1 - T IH0 NG Z\nWRITS  R IH1 T S\nWRITTEN  R IH1 - T AH0 N\nWROBEL  R OW1 - B AH0 L\nWROBLESKI  R AH0 - B L EH1 S - K IY0\nWROBLEWSKI  R AH0 - B L UW1 F S - K IY0\nWROCLAW  R AA1 - K L AO2\nWROE  R OW1\nWRONA  R OW1 - N AH0\nWRONG  R AO1 NG\nWRONGDOER  R AO1 NG - D UW1 - ER0\nWRONGDOERS  R AO1 NG - D UW1 - ER0 Z\nWRONGDOING  R AO1 NG - D UW0 - IH0 NG\nWRONGDOINGS  R AO0 NG - D UW1 - IH0 NG Z\nWRONGED  R AO1 NG D\nWRONGFUL  R AO1 NG - F AH0 L\nWRONGFULLY  R AO1 NG - F AH0 - L IY0\nWRONGHEADED  R AO1 NG - HH EH2 - D IH0 D\nWRONGLY  R AO1 NG - L IY0\nWRONGS  R AO1 NG Z\nWRONSKI  R AA1 N S - K IY0\nWROTE  R OW1 T\nWROTEN  R OW1 - T AH0 N\nWROUGHT  R AO1 T\nWRUBEL  R UW1 - B AH0 L\nWRUCK  R AH1 K\nWRUNG  R AH1 NG\nWRY  R AY1\nWRYE  R AY1\nWRYLY  R AY1 - L IY0\nWRYNESS  R AY1 - N AH0 S\nWRZESINSKI  R AH0 - Z IH0 - S IH1 N - S K IY0\nWS  D AH1 - B AH0 L - Y UW0 - EH1 S\nWS(2)  D AH1 - B Y AH0 - EH1 S\nWU  W UW1\nWU'S  W UW1 Z\nWU(2)  D AH1 - B AH0 L - Y UW0 - Y UW1\nWU(3)  D AH1 - B Y AH0 - Y UW1\nWUBBEN  W AH1 - B AH0 N\nWUELLNER  W UH1 L - N ER0\nWUENSCH  W UH1 N SH\nWUERTH  W UH1 R TH\nWUERTTEMBERG  W ER1 - T AH0 M - B ER0 G\nWUERTZ  W UH1 R T S\nWUEST  W UW1 - IH0 S T\nWUHAN  W UW1 - AH0 N\nWUJCIK  W AH1 JH - S IH0 K\nWULF  W UH1 L F\nWULFF  W UH1 L F\nWULI  W UW1 - L IY0\nWULIGER  W UW1 - L IH0 - G ER0\nWUNDER  W AH1 N - D ER0\nWUNDERKIND  W AH1 N - D ER0 - K AY2 N D\nWUNDERKIND(2)  W AH1 N - D ER0 - K IH2 N D\nWUNDERLE  W AH1 N - D ER0 - L IY0\nWUNDERLICH  W AH1 N - D ER0 - L IH0 K\nWUNDERLIN  W AH1 N - D ER0 - L IH0 N\nWUNSCH  W AH1 N SH\nWUNSCHEL  W AH1 N - SH AH0 L\nWURDEMAN  W ER1 D - M AH0 N\nWURL  W ER1 L\nWURLITZER  W ER1 - L IH0 T - S ER0\nWURM  W ER1 M\nWURST  W ER1 S T\nWURSTER  W ER1 - S T ER0\nWURSTHAUS  W ER1 S T - HH AW0 S\nWURTH  W ER1 TH\nWURTMAN  W ER1 T - M AH0 N\nWURTZ  W ER1 T S\nWURTZEL  W ER1 T - Z AH0 L\nWURZ  W ER1 Z\nWURZEL  W ER1 - Z AH0 L\nWURZER  W ER1 - Z ER0\nWUSS  W AH1 S\nWUSSLER  W AH1 S - L ER0\nWUSSOW  W AH1 - S OW0\nWUTHERING  W AH1 - DH ER0 - IH0 NG\nWUTHRICH  W AH1 - TH R IH0 K\nWUTTKE  W AH1 T - K IY0\nWUXI  W AH1 K - S IY0\nWUYDA  W OY1 - D AH0\nWY  W EY1\nWY(2)  D AH1 - B AH0 L - Y UW0 - W AY1\nWYAND  W AY1 - AH0 N D\nWYANT  W AY1 - AH0 N T\nWYATT  W AY1 - AH0 T\nWYATT'S  W AY1 - AH0 T S\nWYBLE  W AY1 - B AH0 L\nWYBORN  V IH1 - B ER0 N\nWYCHE  W AY1 CH\nWYCKOFF  W IH1 K - AO0 F\nWYCLIFF  W IH1 K - L IH0 F\nWYCOFF  W IH1 K - AO0 F\nWYDEN  W AY1 D\nWYDEN  W AY1 - D AH0 N\nWYDRA  W AY1 - D R AH0\nWYE  W AY1\nWYER  W AY1 - ER0\nWYERS  W AY1 - ER0 Z\nWYETH  W AY1 - EH0 TH\nWYFFELS  W IH1 - F AH0 L Z\nWYGAL  W AY1 - G AH0 L\nWYGANT  W AY1 - G AH0 N T\nWYGOD  W AY1 - G AA2 D\nWYK  W IH1 K\nWYKA  V IH1 - K AH0\nWYKE  W AY1 K\nWYKES  W AY1 K S\nWYKLE  W AY1 - K AH0 L\nWYKOFF  W IH1 K - AO0 F\nWYLAND  W AY1 - L AH0 N D\nWYLDE  W AY1 L D\nWYLE  W AY1 L\nWYLER  W AY1 - L ER0\nWYLES  W AY1 L Z\nWYLIE  W AY1 - L IY0\nWYLLIE  W IH1 - L IY0\nWYLMA  W AY1 L - M AH0\nWYLY  W AY1 - L IY0\nWYMAN  W AY1 - M AH0 N\nWYMER  W AY1 - M ER0\nWYMORE  W AY1 - M AO0 R\nWYNDHAM  W IH1 N - D AH0 M\nWYNE  W AY1 N\nWYNER  W AY1 - N ER0\nWYNES  W AY1 N Z\nWYNETTE  W IH0 - N EH1 T\nWYNETTE(2)  HH W IH0 - N EH1 T\nWYNGAARDEN  W IH1 N - G AA2 R - D AH0 N\nWYNIA  W IH1 - N IY0 - AH0\nWYNKOOP  W IH1 NG - K UW2 P\nWYNN  W IH1 N\nWYNN'S  W IH1 N Z\nWYNNE  W IH1 N\nWYNNS  W IH1 N Z\nWYNONA  W AY0 - N OW1 - N AH0\nWYNONA(2)  HH W AY0 - N OW1 - N AH0\nWYNTER  W IH1 N - T ER0\nWYNTON  W IH1 N - T AH0 N\nWYNYARD  W IH1 N - Y ER0 D\nWYOMING  W AY2 - OW1 - M IH0 NG\nWYOMING'S  W AY2 - OW1 - M IH0 NG Z\nWYRE  W AY1 R\nWYRICK  W IH1 - R IH0 K\nWYSE  W AY1 Z\nWYSE'S  W AY1 - Z IH0 Z\nWYSER  W AY1 - Z ER0\nWYSOCKI  V IH0 - S OW1 T S - K IY0\nWYSOCKI(2)  V IH0 - S AA1 T S - K IY0\nWYSONG  W IH1 - S AO0 NG\nWYSS  W IH1 S\nWYSZYNSKI  V IH0 - SH IH1 N - S K IY0\nWYTHE  W AY1 DH\nX  EH1 K S\nX'S  EH1 K - S IH0 Z\nX-RAY  EH1 K - S R EY2\nX-RAYS  EH1 K - S R EY2 Z\nX.  EH1 K S\nX.'S  EH1 K - S IH0 Z\nX.(2)  AE1 K S\nX.ERS  EH1 K - S ER0 Z\nX.S  EH1 K - S IH0 Z\nXANAX  Z AE1 - N AE0 K S\nXANTHE  Z AE1 N DH\nXANTIPPE  Z AE1 N - T IH0 P\nXAVER  Z EY1 - V ER0\nXAVIER  Z EY1 - V Y ER0\nXAVIERA  IH0 G - Z EY0 - V Y EH1 - R AH0\nXEBEC  Z EH1 - B AH0 K\nXENA  Z IY1 - N AH0\nXENE  Z IY1 N\nXENIA  Z IY1 - N IY0 - AH0\nXENON  Z IY1 - N AA0 N\nXENOPHOBIA  Z EH2 - N AH0 - F OW1 - B IY0 - AH0\nXENOPHOBIC  Z EH2 - N AH0 - F AA1 - B IH0 K\nXENOPHON  Z EH1 - N AH0 - F AH0 N\nXENOS  Z IY1 - N OW0 Z\nXERISCAPE  Z EH1 - R IH0 - S K EY2 P\nXEROX  Z IH1 - R AA0 K S\nXEROX'S  Z IH1 - R AA0 K - S IH0 Z\nXEROXED  Z IH1 - R AA0 K S T\nXEROXES  Z IH1 - R AA0 K - S IH0 Z\nXEROXING  Z IH1 - R AA0 K - S IH0 NG\nXERS  EH1 K - S EH0 R Z\nXERS(2)  K S EH1 R Z\nXERS(3)  EH1 K - S IY1 - AA1 - R EH0 S\nXERXES  Z ER1 K - S IY0 Z\nXI  SH IY1\nXIAMEN  Z IY0 - EY1 - M AH0 N\nXIAN  Z Y AA1 N\nXIAO  ZH AW1\nXIAOGANG  ZH AW1 - G AE1 NG\nXIAOPING  ZH AW1 - P IH1 NG\nXIAOPING'S  ZH AW1 - P IH1 NG Z\nXIAOYUN  SH AW1 - Y UW1 N\nXICOR  Z AY1 - K AO2 R\nXIDEX  Z IH1 - D AH0 K S\nXIE  Z IY1\nXILINX  Z AY1 - L IH2 NG K S\nXING  SH IH1 NG\nXINHUA  Z IH1 N - HH Y UW0 - AH0\nXINJIANG  Z IH1 N - JH IY0 - AE1 NG\nXIONG  ZH AO1 NG\nXOMA  Z OW1 - M AH0\nXOMA'S  Z OW1 - M AH0 Z\nXOMA'S(2)  IH0 G - Z OW1 - M AH0 Z\nXOMA'S(3)  EH0 K - S OW1 - M AH0 Z\nXOMA(2)  IH0 G - Z OW1 - M AH0\nXOMA(3)  EH0 K - S OW1 - M AH0\nXSCRIBE  EH0 K - S K R AY1 B\nXTRA  EH1 K - S T R AH0\nXU  Z UW1\nXUAN  ZH W AA1 N\nXUDONG  Z UW1 - D AO1 NG\nXUDONG(2)  ZH W EY1 - D AO1 NG\nXUE  Z UW1\nXUEDONG  Z UW0 - D AO1 NG\nXUEMEI  Z UW1 - M AY1\nXUS  Z AH1 S\nXYLIA  Z AY1 - L IY0 - AH0\nXYLINA  Z AY1 - L IH0 - N AH0\nXYLOGIC  Z AY2 - L AA1 - JH IH0 K\nXYLOGICS  Z AY2 - L AA1 - JH IH0 K S\nXYLON  Z AY1 - L AH0 N\nXYLONA  Z AY1 - L AH0 - N AH0\nXYLOPHONE  Z AY1 - L AH0 - F OW2 N\nXYVISION  Z AY1 - V IH1 - ZH AH0 N\nY  W AY1\nY'ALL  Y AO2 L\nY'S  W AY1 Z\nY.  W AY1\nY.'S  W AY1 Z\nYA  Y AA1\nYA'LL  Y AA1 L\nYAACOV  Y AA1 - K OW2 V\nYABBA  Y AE1 - B AH0\nYABLON  Y AE1 - B L AH0 N\nYABLONSKI  Y AH0 - B L AA1 N - S K IY0\nYABLONSKY  Y AH0 - B L AA1 N - S K IY0\nYACHT  Y AA1 T\nYACHTER  Y AA1 - T ER0\nYACHTERS  Y AA1 - T ER0 Z\nYACHTING  Y AA1 - T IH0 NG\nYACHTING'S  Y AA1 - T IH0 NG Z\nYACHTS  Y AA1 T S\nYACHTSMAN  Y AA1 T S - M AH0 N\nYACK  Y AE1 K\nYACKEL  Y AE1 - K AH0 L\nYACKLEY  Y AE1 K - L IY0\nYACKO  Y AE1 - K OW0\nYACKTMAN  Y AE1 K T - M AH0 N\nYACONO  Y AE1 - K AH0 - N OW0\nYACOS  Y AA1 - K OW0 S\nYACOUB  Y AE1 - K AW0 B\nYADEN  Y EY1 - D AH0 N\nYADON  Y AE1 - D AH0 N\nYAEGER  Y IY1 - JH ER0\nYAFFE  Y AE1 F\nYAGER  Y EY1 - JH ER0\nYAGI  Y AA1 - G IY0\nYAGODA  Y AH0 - G OW1 - D AH0\nYAH  Y AA1\nYAHI  Y AA1 - HH IY0\nYAHN  Y AE1 N\nYAHNKE  Y AE1 NG K\nYAHOO  Y AA1 - HH UW2\nYAHOOS  Y AA1 - HH UW2 Z\nYAHR  Y AA1 R\nYAHWEH  Y AA1 - W EH2\nYAHYA  Y AH1 - Y AH0\nYAK  Y AE1 K\nYAKE  Y EY1 K\nYAKEL  Y AE1 - K AH0 L\nYAKIMA  Y AE1 - K IH0 - M AH0\nYAKLIN  Y AE1 K - L IH0 N\nYAKOV  Y AA1 - K AO2 V\nYAKOVLEV  Y AH0 - K AA1 V - L AH0 V\nYAKOVLEV(2)  Y AA1 - K AH0 - V L EH0 V\nYAKUSA  Y AH0 - K UW1 - Z AH0\nYAKUTAKAY  Y AH0 - HH UW2 - T AH0 - K EY1\nYALE  Y EY1 L\nYALE'S  Y EY1 L Z\nYALIN  Y AA1 - L IH1 N\nYALTA  Y AO1 L - T AH0\nYAM  Y AE1 M\nYAMADA  Y AH0 - M AA1 - D AH0\nYAMAGATA  Y AA0 - M AA0 - G AA1 - T AH0\nYAMAGUCHI  Y AA2 - M AA0 - G UW1 - CH IY0\nYAMAHA  Y AA1 - M AA0 - HH AA2\nYAMAICHI  Y AA2 - M AA0 - IY1 - CH IY0\nYAMAICHI'S  Y AA2 - M AA0 - IY1 - CH IY0 Z\nYAMAMOTO  Y AA0 - M AA0 - M OW1 - T OW0\nYAMANAKA  Y AA2 - M AA0 - N AA1 - K AH0\nYAMANE  Y AA0 - M AA1 - N EY0\nYAMANE(2)  Y AH0 - M AA1 - N IY0\nYAMANI  Y AA0 - M AA1 - N IY0\nYAMANOUCHI  Y AA0 - M AA0 - N UW1 - CH IY0\nYAMASAKI  Y AA2 - M AA0 - S AA1 - K IY0\nYAMASHIRO  Y AA0 - M AA0 - SH IH1 - R OW0\nYAMASHITA  Y AA0 - M AA0 - SH IY1 - T AH0\nYAMATAKE  Y AA2 - M AA0 - T AA1 - K EY2\nYAMATO  Y AA0 - M AA1 - T OW0\nYAMAUCHI  Y AA2 - M AA0 - UW1 - CH IY0\nYAMAUCHI'S  Y AA2 - M AA0 - UW1 - CH IY0 Z\nYAMAZAKI  Y AA2 - M AA0 - Z AA1 - K IY0\nYAMIN  Y AE1 - M IH0 N\nYAMS  Y AE1 M Z\nYAN  Y AE1 N\nYAN-BIN  Y AA1 N - B IH1 N\nYANBU  Y AE1 N - B UW0\nYANCEY  Y AE1 N - S IY0\nYANCY  Y AE1 N - S IY0\nYANDA  Y AE1 N - D AH0\nYANDELL  Y AE1 N - D AH0 L\nYANDLE  Y AE1 N - D AH0 L\nYANDOW  Y AE1 N - D OW0\nYANES  Y EY1 N Z\nYANEY  Y EY1 - N IY0\nYANEZ  Y AE1 - N IH0 Z\nYANG  Y AE1 NG\nYANGSHENG  Y AA1 NG - SH EH1 NG\nYANGTZE  Y AE1 NG K T - S IY1\nYANI  Y AA1 - N IY0\nYANICK  Y AE1 - N IH0 K\nYANIK  Y AE1 - N IH0 K\nYANIS  Y AE1 - N AH0 S\nYANISH  Y AE1 - N IH0 SH\nYANK  Y AE1 NG K\nYANKASS  Y AE1 NG - K AE2 S\nYANKE  Y AE1 NG K\nYANKED  Y AE1 NG K T\nYANKEE  Y AE1 NG - K IY0\nYANKEE'S  Y AE1 NG - K IY0 Z\nYANKEES  Y AE1 NG - K IY0 Z\nYANKEES'  Y AE1 NG - K IY0 Z\nYANKELOVICH  Y AE2 NG - K EH1 - L AH0 - V IH0 CH\nYANKEY  Y AE1 NG - K IY0\nYANKING  Y AE1 NG - K IH0 NG\nYANKO  Y AE1 NG - K OW0\nYANKOVICH  Y AE1 NG - K AH0 - V IH0 CH\nYANKOWSKI  Y AH0 NG - K AO1 F S - K IY0\nYANKS  Y AE1 NG K S\nYANNI  Y AE1 - N IY0\nYANNICK  Y AE1 - N IH0 K\nYANNONE  Y AE1 - N AH0 N\nYANNUZZI  Y AA0 - N UW1 T - S IY0\nYANO  Y AA1 - N OW0\nYANOFSKY  Y AH0 - N AA1 F S - K IY0\nYANOMAMI  Y AE2 - N OW0 - M AE1 - M IY0\nYANOMAMI(2)  Y AA2 - N OW0 - M AA1 - M IY0\nYANT  Y AE1 N T\nYANTIS  Y AE1 N - T IH0 S\nYANTZ  Y AE1 N T S\nYAO  Y AW1\nYAOBANG  Y AW1 - B AE0 NG\nYAOHAN  Y AW1 - HH AA1 N\nYAP  Y AE1 P\nYAPLE  Y EY1 - P AH0 L\nYAPP  Y AE1 P\nYAPS  Y AE1 P S\nYARBER  Y AA1 R - B ER0\nYARBERRY  Y AA1 R - B EH2 - R IY0\nYARBORO  Y AA1 R - B ER0 - OW0\nYARBOROUGH  Y AA1 R - B ER2 - OW0\nYARBOUGH  Y AA1 R - B AW2\nYARBRO  Y AA1 R - B R OW0\nYARBROUGH  Y AA1 R - B ER0 - OW0\nYARCHOAN  Y AA0 R - CH OW1 N\nYARD  Y AA1 R D\nYARD'S  Y AA1 R D Z\nYARDAGE  Y AA1 R - D IH0 JH\nYARDE  Y AA1 R D\nYARDENI  Y AA0 R - D IY1 - N IY0\nYARDER  Y AA1 R - D ER0\nYARDLEY  Y AA1 R D - L IY0\nYARDS  Y AA1 R D Z\nYARDSTICK  Y AA1 R D - S T IH2 K\nYARDSTICKS  Y AA1 R D - S T IH2 K S\nYARGER  Y AA1 R - JH ER0\nYARLING  Y AA1 R - L IH0 NG\nYARMULKE  Y AA1 R - M AH2 L - K AH0\nYARMULKE(2)  Y AA1 R - M AH0 - K AH0\nYARMULKES  Y AA1 R - M AH2 L - K AH0 S\nYARMULKES(2)  Y AA1 R - M AH0 - K AH0 S\nYARN  Y AA1 R N\nYARNALL  Y AA1 R - N AH0 L\nYARNELL  Y AA1 R - N AH0 L\nYARNS  Y AA1 R N Z\nYARON  Y EH1 - R AH0 N\nYAROS  Y EH1 - R OW0 Z\nYAROSH  Y AE1 - R AH0 SH\nYARRINGTON  Y AE1 - R IH0 NG - T AH0 N\nYARROW  Y EH1 - R OW0\nYARROW(2)  Y AA1 - R OW0\nYARWOOD  Y AA1 R - W UH2 D\nYASIN  Y AE1 - S IH0 N\nYASIR  Y AA1 - S ER0\nYASIR(2)  Y AA2 - S IH1 R\nYASMIN  Y AE1 Z - M IH0 N\nYASMINE  Y AE1 Z - M IH0 N\nYASS  Y AE1 S\nYASSER  Y AE1 - S ER0\nYASSER'S  Y AE1 - S ER0 Z\nYASSER'S(2)  Y AA1 - S ER0 Z\nYASSER(2)  Y AA1 - S ER0\nYASSIN  Y AE1 - S IH0 N\nYASSIR  Y AE1 - S IH0 R\nYASSIR'S  Y AE1 - S IH0 R Z\nYASSIR'S(2)  Y AA1 - S IH0 R Z\nYASSIR(2)  Y AA1 - S IH0 R\nYASSO  Y AA1 - S OW0\nYASSUKOVICH  Y AH0 - S UW1 - K AH0 - V IH0 CH\nYASTROW  Y AE1 - S T R OW0\nYASUDA  Y AA0 - S UW1 - D AH0\nYASUHIKO  Y AA2 - S UW0 - HH IY1 - K OW0\nYASUHIRO  Y AA2 - S UW0 - HH IY1 - R OW0\nYASUNORI  Y AA2 - S UW0 - N AO1 - R IY0\nYASUO  Y AA0 - S UW1 - OW0\nYASUSHI  Y AA0 - S UW1 - SH IY0\nYASUTAKA  Y AA2 - S UW0 - T AA1 - K AH0\nYASUYOSHI  Y AA2 - S UW0 - Y OW1 - SH IY0\nYATER  Y EY1 - T ER0\nYATES  Y EY1 T S\nYATSKO  Y AA1 T - S K OW0\nYAU  Y OW1\nYAUCH  Y AO1 CH\nYAUGER  Y AO1 - JH ER0\nYAUN  Y AO1 N\nYAUPON  Y AO1 - P AH0 N\nYAUPONS  Y AO1 - P AH0 N Z\nYAVLINSKY  Y AE2 V - L IH1 N - S K IY0\nYAW  Y AO1\nYAWN  Y AO1 N\nYAWNED  Y AO1 N D\nYAWNER  Y AO1 - N ER0\nYAWNING  Y AO1 - N IH0 NG\nYAWNS  Y AO1 N Z\nYAWORSKI  Y AH0 - W ER1 S - K IY0\nYAX  Y AE1 K S\nYAY  Y EY1\nYAZOV  Y AE1 - Z AA0 V\nYAZOV(2)  Y AA1 - Z AO2 V\nYAZZIE  Y AE1 - Z IY0\nYBANEZ  IY0 - B AE1 - N IH0 Z\nYBARBO  IY0 - B AA1 R - B OW0\nYBARRA  IY0 - B AA1 - R AH0\nYDSTIE  Y IH1 D - S T IY0\nYDSTIE'S  Y IH1 D - S T IY0 Z\nYDSTIE'S(2)  IH1 D - S T IY0 Z\nYDSTIE(2)  IH1 D - S T IY0\nYE  Y IY1\nYE(2)  Y EH1\nYE-YI  Y EY1 - Y IY1\nYEA  Y EY1\nYEADON  Y EH1 - D AH0 N\nYEAGER  Y EY1 - G ER0\nYEAGLE  Y IY1 - G AH0 L\nYEAGLEY  Y IY1 G - L IY0\nYEAH  Y AE1\nYEAKEL  Y IY1 - K AH0 L\nYEAKEY  Y IY1 - K IY0\nYEAKLE  Y IY1 - K AH0 L\nYEAKLEY  Y IY1 K - L IY0\nYEAMAN  Y IY1 - M AH0 N\nYEAMANS  Y IY1 - M AH0 N Z\nYEAR  Y IH1 R\nYEAR'S  Y IH1 R Z\nYEARAGO  Y IH1 - R AH0 - G OW0\nYEARBOOK  Y IH1 R - B UH2 K\nYEARBOOKS  Y IH1 R - B UH2 K S\nYEARBY  Y ER1 - B IY0\nYEAREARLIER  Y IH2 - R ER1 - L Y ER0\nYEAREND  Y IH2 - R EH1 N D\nYEARGAIN  Y ER1 - G AH0 N\nYEARGAIN(2)  Y IH2 - G EY1 N\nYEARGAN  Y ER1 - G AH0 N\nYEARGIN  Y ER1 - JH IH0 N\nYEARICK  Y IY1 - R IH0 K\nYEARICK(2)  Y IH1 - R IH0 K\nYEARLING  Y ER1 - L IH0 NG\nYEARLING(2)  Y IH1 - L IH0 NG\nYEARLINGS  Y ER1 - L IH0 NG Z\nYEARLINGS(2)  Y IH1 - L IH0 NG Z\nYEARLONG  Y IH1 R - L AO1 NG\nYEARLY  Y IH1 R - L IY0\nYEARN  Y ER1 N\nYEARNED  Y ER1 N D\nYEARNING  Y ER1 - N IH0 NG\nYEARNINGS  Y ER1 - N IH0 NG Z\nYEARNS  Y ER1 N Z\nYEAROUT  Y IH1 R - AW0 T\nYEARS  Y IH1 R Z\nYEARS'  Y IH1 R Z\nYEARS(2)  Y ER0 Z\nYEARSLEY  Y ER1 S - L IY0\nYEARWOOD  Y IH1 R - W UH0 D\nYEARY  Y IH1 - R IY0\nYEAS  Y EY1 Z\nYEAS(2)  Y IY1 Z\nYEAS(3)  Y IY1 S\nYEAST  Y IY1 S T\nYEASTS  Y IY1 S T S\nYEATER  Y IY1 - T ER0\nYEATES  Y IY1 - EY2 T S\nYEATMAN  Y IY1 T - M AH0 N\nYEATON  Y IY1 - T AH0 N\nYEATS  Y EY1 T S\nYEATTS  Y IY1 T S\nYEAZEL  Y IY1 - Z AH0 L\nYECK  Y EH1 K\nYECKLEY  Y EH1 K - L IY0\nYEDDA  Y EH1 - D AH0\nYEDINAK  Y EH1 - D IH0 - N AE0 K\nYEDIYAT  Y EH1 - D IH0 - Y AE2 T\nYEE  Y IY1\nYEGOR  Y EY1 - G ER0\nYEH  Y EH1\nYEHIYA  Y AH0 - HH IY1 - AH0\nYEHLE  Y EH1 - HH AH0 L\nYEHUDA  Y AH0 - HH UW1 - D AH0\nYEHUDI  Y EY0 - HH UW1 - D IY0\nYEIRI  Y EH1 - R IY0\nYEISER  Y IY1 - S ER0\nYEISLEY  Y IY1 S - L IY0\nYEKATERINBURG  Y EH0 - K AE2 - T ER0 - IY1 N - B AH0 R G\nYELDELL  Y EH1 L - D AH0 L\nYELENA  Y EH1 - L IH0 - N AH0\nYELL  Y EH1 L\nYELLAND  Y EH1 - L AH0 N D\nYELLE  Y EH1 L\nYELLED  Y EH1 L D\nYELLEN  Y EH1 - L AH0 N\nYELLIN  Y EH1 - L IH0 N\nYELLIN'  Y EH1 - L IH0 N\nYELLING  Y EH1 - L IH0 NG\nYELLOW  Y EH1 - L OW0\nYELLOWER  Y EH1 - L OW0 - ER0\nYELLOWEST  Y EH1 - L OW0 - IH0 S T\nYELLOWING  Y EH1 - L OW0 - IH0 NG\nYELLOWISH  Y EH1 - L OW0 - IH0 SH\nYELLOWKNIFE  Y EH1 - L OW0 - N AY2 F\nYELLOWS  Y EH1 - L OW0 Z\nYELLOWSTONE  Y EH1 - L OW0 - S T OW2 N\nYELLOWSTONE'S  Y EH1 - L OW0 - S T OW2 N Z\nYELLS  Y EH1 L Z\nYELTON  Y EH1 L - T AH0 N\nYELTSIN  Y EH1 L T - S AH0 N\nYELTSIN'S  Y EH1 L T - S AH0 N Z\nYELVERTON  Y EH1 L - V ER0 - T AH0 N\nYELVINGTON  Y EH1 L - V IH0 NG - T AH0 N\nYEMEN  Y EH1 - M AH0 N\nYEMEN'S  Y EH1 - M AH0 N Z\nYEMENI  Y EH1 - M AH0 - N IY0\nYEMENI(2)  Y EH0 - M IY1 - N IY0\nYEMENIDJIAN  Y EH2 - M AH0 - N IH1 - JH IY0 - AH0 N\nYEN  Y EH1 N\nYEN'S  Y EH1 N Z\nYENCHING  Y EH1 N - CH IH1 NG\nYENDER  Y EH1 N - D ER0\nYENLU  Y EH1 N - L UW0\nYENTL  Y EH1 N - T AH0 L\nYEO  Y IY1 - OW0\nYEOMAN  Y OW1 - M AH0 N\nYEOMANS  Y OW1 - M AH0 N Z\nYEOSOCK  Y OW0 - S AO1 K\nYEP  Y EH1 P\nYEPEZ  Y EH1 - P IH0 Z\nYEPSEN  Y EH1 P - S EH0 N\nYERBY  Y ER1 - B IY0\nYERDON  Y ER1 - D AH0 N\nYERENA  Y EH1 - R IH0 - N AH0\nYEREVAN  Y EH1 - R AH0 - V AH0 N\nYERGER  Y ER1 - JH ER0\nYERGIN  Y ER1 - G AH0 N\nYERIAN  Y IY1 - R IY0 - AH0 N\nYERKE  Y ER1 K\nYERKES  Y ER1 - K IY0 Z\nYERKEY  Y ER1 - K IY0\nYERMAN  Y ER1 - M AH0 N\nYERXA  Y ER1 K - S AH0\nYES  Y EH1 S\nYESES  Y EH1 - S IH0 Z\nYESHIVA  Y IH0 - SH IY1 - V AH0\nYESKE  Y EH1 S K\nYESSUEY  Y EH1 - S UW0 - IY0\nYESTERDAY  Y EH1 - S T ER0 - D EY2\nYESTERDAY'S  Y EH1 - S T ER0 - D EY2 Z\nYESTERDAY'S(2)  Y EH1 - S T ER0 - D IY0 Z\nYESTERDAY(2)  Y EH1 - S T ER0 - D IY0\nYESTERDAYS  Y EH1 - S T ER0 - D EY2 Z\nYESTERDAYS(2)  Y EH1 - S T ER0 - D IY0 Z\nYESTERYEAR  Y EH1 - S T ER0 - Y IH2 R\nYET  Y EH1 T\nYETMAN  Y EH1 T - M AH0 N\nYETNIKOFF  Y EH1 T - N IH0 K - AO0 F\nYETT  Y EH1 T\nYETTA  Y EH1 - T AH0\nYETTER  Y EH1 - T ER0\nYEUNG  Y UW1 NG\nYEUTTER  Y UW1 - T ER0\nYEVETTE  Y IH0 - V EH1 T\nYEVGENY  Y EH2 V - G EH1 - N IY0\nYEVLINSKY  Y EH0 V - L IH1 N - S K IY0\nYEVLINSKY'S  Y EH0 V - L IH1 N - S K IY0 Z\nYEVTUSHENKO  Y EH2 V - T AH0 - SH EH1 NG - K OW0\nYEW  Y UW1\nYEW'S  Y UW1 Z\nYGLESIAS  IY0 - G L EY1 - S IY0 - AH0 S\nYI  Y IY1\nYIDDISH  Y IH1 - D IH0 SH\nYIE  Y IY1\nYIE(2)  Y AY1\nYIELD  Y IY1 L D\nYIELDED  Y IY1 L - D AH0 D\nYIELDED(2)  Y IY1 L - D IH0 D\nYIELDING  Y IY1 L - D IH0 NG\nYIELDS  Y IY1 L D Z\nYIGAL  Y IH0 - G AE1 L\nYIGAL(2)  Y IH0 - G AA1 L\nYIGAL(3)  Y IY0 - G AA1 L\nYILIN  Y IH1 - L IH0 N\nYIM  Y IH1 M\nYIN  Y IH1 N\nYING  Y IH1 NG\nYINGER  Y IH1 - NG ER0\nYINGLING  Y IH1 NG - G AH0 L - IH0 NG\nYINGLING(2)  Y IH1 NG - G L IH0 NG\nYINGST  Y IH1 NG G S T\nYINGST(2)  Y IH1 NG K S T\nYIP  Y IH1 P\nYIPPEE  Y IH2 - P IY1\nYIRNG-AN  Y IH1 R - NG AA1 N\nYITZHAK  Y IH1 T - S AA0 K\nYITZHAK(2)  Y IH1 T - S AE0 K\nYLVISAKER  Y IH2 L - V IH0 - S AA1 - K ER0\nYNEZ  Y N EH1 Z\nYNIGUEZ  IY0 - N IY1 - G EH0 Z\nYNJIUN  Y IH1 N - JH IH0 N\nYNJIUN(2)  Y IH1 N - JH IY0 - UW2 N\nYO  Y OW1\nYOAK  Y OW1 K\nYOAKAM  Y OW1 - K AH0 M\nYOAKUM  Y OW1 - K AH0 M\nYOAST  Y OW1 S T\nYOCAM  Y OW1 - K AH0 M\nYOCHAM  Y AA1 - CH AH0 M\nYOCHELSON  Y OW1 - K EH0 L - S AH0 N\nYOCHELSON(2)  Y OW1 - CH EH0 L - S AH0 N\nYOCHIM  Y AA1 - CH IH0 M\nYOCHUM  Y AA1 - CH AH0 M\nYOCHUM(2)  Y AA1 - K AH0 M\nYOCKEY  Y AA1 - K IY0\nYOCOM  Y OW1 - K AH0 M\nYOCUM  Y OW1 - K AH0 M\nYODEL  Y OW1 - D AH0 L\nYODELING  Y OW1 - D AH0 L - IH0 NG\nYODELING(2)  Y OW1 D - L IH0 NG\nYODER  Y OW1 - D ER0\nYODICE  Y OW1 - D IH0 S\nYOE  Y OW1\nYOES  Y OW1 Z\nYOEST  Y EH1 S T\nYOEST(2)  Y AO1 S T\nYOFFIE  Y AO1 - F IY0\nYOGA  Y OW1 - G AH0\nYOGI  Y OW1 - G IY0\nYOGIISM  Y OW1 - G IH2 - Z AH0 M\nYOGIISM(2)  Y OW1 - G IH2 - S AH0 M\nYOGIISMS  Y OW0 - G IY1 - S AH0 M Z\nYOGIISMS(2)  Y OW1 - G IH2 - Z AH0 M Z\nYOGURT  Y OW1 - G ER0 T\nYOH  Y OW1\nYOHE  Y OW1 - HH EY2\nYOHEI  Y OW1 - HH EY2\nYOHN  Y AA1 N\nYOHO  Y OW1 - HH OW0\nYOICHI  Y OW0 - IY1 - CH IY0\nYOKADO  Y AH0 - K AA1 - D OW0\nYOKE  Y OW1 K\nYOKED  Y OW1 K T\nYOKEL  Y OW1 - K EH0 L\nYOKELSON  Y OW1 - K EH0 L - S AH0 N\nYOKES  Y OW1 K S\nYOKICH  Y OW1 - K IH0 CH\nYOKLEY  Y AA1 K - L IY0\nYOKO  Y OW1 - K OW0\nYOKOHAMA  Y OW2 - K AH0 - HH AA1 - M AH0\nYOKOKOHJI  Y OW2 - K OW0 - K OW1 - JH IY0\nYOKOTA  Y OW0 - K OW1 - T AH0\nYOKOYAMA  Y OW2 - K OW0 - Y AA1 - M AH0\nYOKUM  Y OW1 - K AH0 M\nYOLA  Y OW1 - L AH0\nYOLANDA  Y OW0 - L AA1 N - D AH0\nYOLANDE  Y OW1 - L AH0 N D\nYOLK  Y OW1 K\nYOLKS  Y OW1 K S\nYOM  Y AA1 M\nYOM'S  Y AA1 M Z\nYOM'S(2)  Y OW1 M Z\nYOM(2)  Y OW1 M\nYOMIURI  Y OW2 - M IY1 - ER0 - IY0\nYON  Y AA1 N\nYONA  Y OW1 - N AH0\nYONAN  Y OW1 - N AH0 N\nYONCE  Y AA1 N S\nYONDER  Y AA1 N - D ER0\nYONEYAMA  Y OW2 - N IY0 - AA1 - M AH0\nYONG  Y AO1 NG\nYONGBYON  Y AO1 NG - B Y AO1 N\nYONGBYON'S  Y AO1 NG - B Y AO1 N Z\nYONGUE  Y AA1 NG G\nYONHAP  Y AA1 N - HH AE2 P\nYONKE  Y AA1 NG K\nYONKER  Y AA1 NG - K ER0\nYONKERS  Y AA1 NG - K ER0 Z\nYONSEI  Y AH1 N - S EY2\nYONTS  Y AA1 N T S\nYONTZ  Y AA1 N T S\nYOO  Y UW1\nYOON  Y UW1 N\nYOOR  Y UW1 R\nYOOR'S  Y UW1 R Z\nYOOS  Y UW1 Z\nYOPP  Y AA1 P\nYORAM  Y AO1 - R AH0 M\nYORBA  Y AO1 R - B AH0\nYORDY  Y AO1 R - D IY0\nYORE  Y AO1 R\nYORICH  Y AO1 - R IH0 CH\nYORIO  Y AO1 - R Y OW0\nYORK  Y AO1 R K\nYORK'S  Y AO1 R K S\nYORKBASED  Y AO1 R K - B EY2 S T\nYORKE  Y AO1 R K\nYORKER  Y AO1 R - K ER0\nYORKER'S  Y AO1 R - K ER0 Z\nYORKERS  Y AO1 R - K ER0 Z\nYORKS  Y AO1 R K S\nYORKSHIRE  Y AO1 R K - SH ER0\nYORKTOWN  Y AO1 R K - T AW2 N\nYORKTOWN'S  Y AO1 R K - T AW2 N Z\nYORRICK  Y AO1 - R IH0 K\nYOSEF  Y OW1 - S AH0 F\nYOSEMITE  Y OW0 - S EH1 - M IH0 - T IY0\nYOSHI  Y OW1 - SH IY0\nYOSHIAKI  Y OW2 - SH IY0 - AA1 - K IY0\nYOSHIDA  Y OW0 - SH IY1 - D AH0\nYOSHIHARA  Y OW2 - SH IH0 - HH AA1 - R AH0\nYOSHIHASHI  Y OW2 - SH IH0 - HH AA1 - SH IY0\nYOSHIHIRO  Y OW2 - SH IH0 - HH IY1 - R OW2\nYOSHIHIRO'S  Y OW2 - SH IH0 - HH IY1 - R OW2 Z\nYOSHIHISA  Y OW2 - SH IH0 - HH IY1 - S AH0\nYOSHIKAWA  Y OW0 - SH IY0 - K AA1 - W AH0\nYOSHIKAZU  Y OW2 - SH IH0 - K AA1 - Z UW0\nYOSHIMOTO  Y OW0 - SH IY0 - M OW1 - T OW0\nYOSHIMURA  Y OW2 - SH IH0 - M UW1 - R AH0\nYOSHINO  Y OW0 - SH IY1 - N OW0\nYOSHIO  Y OW0 - SH IY1 - OW0\nYOSHIOKA  Y OW2 - SH IY0 - OW1 - K AH0\nYOSHIRO  Y OW0 - SH IH1 - R OW0\nYOSS  Y AO1 S\nYOSSI  Y OW1 - S IY0\nYOST  Y OW1 S T\nYOTHER  Y AH1 - DH ER0\nYOTT  Y AA1 T\nYOU  Y UW1\nYOU'D  Y UW1 D\nYOU'D(2)  Y UH1 D\nYOU'LL  Y UW1 L\nYOU'RE  Y UH1 R\nYOU'RE(2)  Y UW1 R\nYOU'VE  Y UW1 V\nYOUELL  Y AA1 - UW0 L\nYOUGHAL  Y OW1 - AH0 L\nYOUKER  Y AW1 - K ER0\nYOUMAN  Y UW1 - M AH0 N\nYOUMANS  Y UW1 - M AH0 N Z\nYOUN  Y AH1 N\nYOUNAN  Y AH1 - N AH0 N\nYOUNCE  Y AW1 N S\nYOUNES  Y AH1 N Z\nYOUNG  Y AH1 NG\nYOUNG'S  Y AH1 NG Z\nYOUNGBERG  Y AH1 NG - B ER0 G\nYOUNGBLOOD  Y AH1 NG - B L AH2 D\nYOUNGBLUT  Y AH1 NG - B L AH0 T\nYOUNGDAHL  Y AH1 NG - D AA2 L\nYOUNGE  Y AH1 N JH\nYOUNGER  Y AH1 NG - G ER0\nYOUNGERMAN  Y AH1 - NG ER0 - M AH0 N\nYOUNGERS  Y AH1 NG - G ER0 Z\nYOUNGEST  Y AH1 NG - G AH0 S T\nYOUNGLOVE  Y AH1 NG - L AH2 V\nYOUNGMAN  Y AH1 NG - M AE2 N\nYOUNGQUIST  Y AH1 NG - K W IH2 S T\nYOUNGREN  Y AH1 N - G R EH0 N\nYOUNGS  Y AH1 NG Z\nYOUNGSTER  Y AH1 NG - S T ER0\nYOUNGSTER'S  Y AH1 NG - S T ER0 Z\nYOUNGSTERS  Y AH1 NG - S T ER0 Z\nYOUNGSTERS'  Y AH1 NG - S T ER0 Z\nYOUNGSTOWN  Y AH1 NG Z - T AW2 N\nYOUNGSTROM  Y AH1 NG - S T R AH0 M\nYOUNIS  Y AH1 - N IH0 S\nYOUNKER  Y AH1 NG - K ER0\nYOUNKERS  Y AH1 NG - K ER0 Z\nYOUNKERS'  Y AH1 NG - K ER0 Z\nYOUNKIN  Y AH1 NG - K IH0 N\nYOUNKINS  Y AH1 NG - K IH0 N Z\nYOUNT  Y AW1 N T\nYOUNTS  Y AW1 N T S\nYOUR  Y AO1 R\nYOUR(2)  Y UH1 R\nYOUREE  Y AO0 - R IY1\nYOURS  Y UH1 R Z\nYOURS(2)  Y AO1 R Z\nYOURS(3)  Y ER0 Z\nYOURSELF  Y ER0 - S EH1 L F\nYOURSELF(2)  Y UH0 R - S EH1 L F\nYOURSELF(3)  Y AO1 R - S EH0 L F\nYOURSELFER  Y AO2 R - S EH1 L - F ER0\nYOURSELFERS  Y AO2 R - S EH1 L - F ER0 Z\nYOURSELVES  Y UH0 R - S EH1 L V Z\nYOURSELVES(2)  Y AO1 R - S EH0 L V Z\nYOUSE  Y AW1 S\nYOUSE(2)  Y UW1 Z\nYOUSEF  Y UW1 - S EH0 F\nYOUSEF'S  Y UW1 - S EH0 F S\nYOUSIF  Y AW1 - S IH0 F\nYOUSIF(2)  Y UW1 - S IH0 F\nYOUSSEF  Y UW1 - S EH0 F\nYOUTH  Y UW1 TH\nYOUTH'S  Y UW1 TH S\nYOUTHFUL  Y UW1 TH - F AH0 L\nYOUTHS  Y UW1 DH Z\nYOUTHS(2)  Y UW1 TH S\nYOUTSEY  Y AW1 T - S IY0\nYOUTZ  Y AW1 T S\nYOUVILLE  Y UW1 - V IH2 L\nYOW  Y AW1\nYOWELL  Y AA1 - W EH0 L\nYOY  Y OY1\nYOYO  Y OW1 - Y OW0\nYOYOS  Y OW1 - Y OW0 Z\nYPSILANTI  IH2 P - S AH0 - L AE1 N - T IY0\nYQUEM  IY1 - K W AH0 M\nYSLETA  IY0 - S L EY1 - T AH0\nYTTRIUM  IH1 - T R IY0 - AH0 M\nYU  Y UW1\nYU'S  Y UW1 Z\nYUAN  Y UW0 - AA1 N\nYUAN'S  Y UW0 - AA1 N Z\nYUBA  Y UW1 - B AH0\nYUCAIPA  Y UW2 - K AY1 - P AH0\nYUCATAN  Y UW1 - K AH0 - T AE2 N\nYUCCA  Y AH1 - K AH0\nYUCK  Y AH1 K\nYUCKY  Y AH1 - K IY0\nYUE  Y UW1\nYUEN  Y W EH1 N\nYUEN(2)  Y UW0 - EH1 N\nYUGO  Y UW1 - G OW0\nYUGO'S  Y UW1 - G OW0 Z\nYUGOS  Y UW1 - G OW0 S\nYUGOSLAV  Y UW1 - G OW0 - S L AA2 V\nYUGOSLAVIA  Y UW2 - G OW0 - S L AA1 - V IY0 - AH0\nYUGOSLAVIA'S  Y UW2 - G OW0 - S L AA1 - V IY0 - AH0 Z\nYUGOSLAVIAN  Y UW2 - G OW0 - S L AA1 - V IY0 - AH0 N\nYUGOSLAVS  Y UW1 - G OW0 - S L AE2 V Z\nYUHAS  Y UW1 - HH AH0 Z\nYUHASZ  Y AH1 - HH AH0 SH\nYUICHI  Y UW1 - CH IY1\nYUICHI(2)  Y UW2 - IY1 - CH IY1\nYUILL  Y UW1 L\nYUILLE  Y UW1 L\nYUK  Y AH1 K\nYUKIO  Y UW0 - K IY1 - OW0\nYUKO  Y UW1 - K OW0\nYUKON  Y UW1 - K AA2 N\nYUKS  Y AH1 K S\nYUL  Y AH1 L\nYULE  Y UW1 L\nYULETIDE  Y UW1 L - T AY2 D\nYULI  Y UW1 - L IY0\nYUM  Y AH1 M\nYUMA  Y UW1 - M AH0\nYUMMIES  Y AH1 - M IY0 Z\nYUMMY  Y AH1 - M IY0\nYUN  Y AH1 N\nYUNDE  Y UW1 N - D EY2\nYUNDT  Y AH1 N D T\nYUNG  Y AH1 NG\nYUNICH  Y UW1 - N IH0 CH\nYUNIS  Y UW1 - N IH0 S\nYUNK  Y AH1 NG K\nYUNKER  Y AH1 NG - K ER0\nYUP  Y AH1 P\nYUPPIE  Y AH1 - P IY0\nYUPPIES  Y AH1 - P IY0 Z\nYUPPIFIED  Y AH1 - P IH0 - F AY2 D\nYUPPIFY  Y AH1 - P IH0 - F AY2\nYURACHEK  Y ER0 - AE1 - CH EH0 K\nYURCHAK  Y ER1 - CH AH0 K\nYURCHAK(2)  Y ER1 - AH0 K\nYURCHENKO  Y ER0 - CH EH1 NG - K OW0\nYUREK  Y UH1 - R EH0 K\nYURI  Y UH1 - R IY0\nYURICK  Y UH1 - R IH0 K\nYURKO  Y ER1 - K OW0\nYURKOVICH  Y ER1 - K AH0 - V IH0 CH\nYURT  Y UH1 R T\nYURY  Y UH1 - R IY0\nYUSEF  Y UW1 - S EH0 F\nYUSEF'S  Y UW1 - S EH0 F S\nYUSEN  Y UW1 - S AH0 N\nYUSKO  Y AH1 - S K OW0\nYUST  Y AH1 S T\nYUSTEF  Y UW1 - S T EH0 F\nYUTAKA  Y UW0 - T AA1 - K AH0\nYUTZY  Y AH1 T - Z IY0\nYUVAL  Y UW1 - V AH0 L\nYUZONG  Y UW2 - Z AO1 NG\nYVES  IY1 V\nYVETTE  IH0 - V EH1 T\nYVONNE  IH0 - V AA1 N\nYVONNE'S  IH0 - V AA1 N Z\nYZAGUIRRE  IY0 - Z AH0 - G W AY1 - ER0\nZ  Z IY1\nZ'S  Z IY1 Z\nZ.  Z IY1\nZ.'S  Z IY1 Z\nZABALA  Z AA0 - B AA1 - L AH0\nZABAR'S  Z AE1 - B AA0 R Z\nZABAWA  Z AA0 - B AA1 - W AH0\nZABEL  Z EY1 - B AH0 L\nZABIELSKI  Z AH0 - B IY1 L - S K IY0\nZABINSKI  Z AH0 - B IH1 N - S K IY0\nZABLOCKI  Z AH0 - B L OW1 T S - K IY0\nZABOROWSKI  Z AH0 - B ER0 - AO1 F S - K IY0\nZABOWS  Z EY1 - B OW0 Z\nZABOWSKI  Z AH0 - B AW1 S - K IY0\nZABRISKIE  Z AE1 - B R IH0 S - K IY0\nZACARIAS  Z AA0 - K AA0 - R IY1 - AH0 Z\nZACCAGNINI  Z AA0 - K AH0 G - N IY1 - N IY0\nZACCAGNINO  Z AA0 - K AH0 G - N IY1 - N OW0\nZACCARDI  Z AA0 - K AA1 R - D IY0\nZACCARIA  Z AA0 - K AA1 - R IY0 - AH0\nZACCARO  Z AA0 - K AA1 - R OW0\nZACCHEUS  Z AE1 - K OY0 Z\nZACCONE  Z AA0 - K OW1 - N IY0\nZACEK  Z AA1 - CH EH2 K\nZACH  Z AE1 K\nZACHAR  Z AH0 - K AA1 R\nZACHARIAH  Z AE2 - K ER0 - AY1 - AH0\nZACHARIAS  Z AE2 - K ER0 - AY1 - AH0 S\nZACHARY  Z AE1 - K ER0 - IY0\nZACHER  Z AE1 - K ER0\nZACHERY  Z AE1 - K ER0 - IY0\nZACHI  Z AA1 - K IY0\nZACHI(2)  Z AA1 - CH IY0\nZACHMAN  Z AE1 K - M AH0 N\nZACHMANN  Z AA1 K - M AH0 N\nZACHOW  Z AA1 - K OW0\nZACHRY  Z AA1 - K R IY0\nZACK  Z AE1 K\nZACK'S  Z AE1 K S\nZACKERY  Z AE1 - K ER0 - IY0\nZACKS  Z AE1 K S\nZADA  Z AA1 - D AH0\nZADAR  Z EY1 - D AA2 R\nZADAR(2)  Z IH0 - D AA1 R\nZADEH  Z AA1 - D EH2\nZADILLO  Z AH0 - D IH1 - L OW0\nZADOC  Z AA1 - D AH0 K\nZADOK  Z AA1 - D AH0 K\nZADORA  Z AH0 - D AO1 - R AH0\nZADROZNY  Z AH0 - D R OW1 Z - N IY0\nZAENTZ  Z AE1 N T S\nZAFFINO  Z AA0 - F IY1 - N OW0\nZAFFUTO  Z AH0 - F UW1 - T OW0\nZAFTIG  Z AE1 F - T IH0 G\nZAFTIG'S  Z AE1 F - T IH0 G Z\nZAG  Z AE1 G\nZAGAR  Z AA0 - G AA1 R\nZAGAT  Z AE1 - G AH0 T\nZAGEL  Z EY1 - G AH0 L\nZAGER  Z EY1 - G ER0\nZAGGED  Z AE1 G D\nZAGHA  Z AA1 - G AH0\nZAGLADIN  Z AE1 - G L AH0 - D IH0 N\nZAGORSKI  Z AH0 - G AO1 R S - K IY0\nZAGREB  Z AA1 - G R EH2 B\nZAGREB'S  Z AA1 - G R EH2 B Z\nZAGS  Z AE1 G Z\nZAGURY  Z AE1 - G Y ER0 - IY0\nZAHER  Z EY1 - ER0\nZAHIR  Z AH0 - HH IH1 R\nZAHLER  Z AA1 - L ER0\nZAHM  Z AE1 M\nZAHN  Z AE1 N\nZAHNER  Z AA1 - N ER0\nZAHNISER  Z AA1 - N AY0 - Z ER0\nZAHNOW  Z AA1 - N OW0\nZAHRADNIK  Z ER0 - AE1 D - N IH0 K\nZAIBATSU  Z EY2 - B AE1 T - S UW2\nZAID  Z EY1 D\nZAINO  Z EY1 - N OW0\nZAIRE  Z AY0 - IH1 R\nZAIRE'S  Z AY0 - IH1 R Z\nZAIREAN  Z AY0 - IH1 - R AH0 N\nZAIREAN'S  Z AY0 - IH1 - R AH0 N Z\nZAIREANS  Z AY0 - IH1 - R AH0 N Z\nZAIRIAN  Z AY0 - IH1 - R IY0 - AH0 N\nZAIRIAN'S  Z AY0 - IH1 - R IY0 - AH0 N Z\nZAIRIANS  Z AY0 - IH1 - R IY0 - AH0 N Z\nZAISER  Z AY1 - S ER0\nZAITECH  Z EY1 - T EH2 K\nZAITSEV  Z EY1 T - S EH0 V\nZAITSEV'S  Z EY1 T - S EH0 V Z\nZAITZ  Z EY1 T S\nZAJAC  Z AY1 - AH0 K\nZAJDEL  Z AE1 JH - D AH0 L\nZAJIC  Z AE1 - JH IH0 K\nZAJICEK  Z AY1 - IH0 - CH EH0 K\nZAJKOWSKI  Z AY0 - K AO1 F S - K IY0\nZAK  Z AE1 K\nZAKARIAN  Z AH0 - K EH1 - R IY0 - AH0 N\nZAKHAROV  Z AE1 - K ER0 - AA0 V\nZAKI  Z AA1 - K IY0\nZAKRAJSEK  Z AH0 - K R AY1 - S EH0 K\nZAKRZEWSKI  Z AA0 - K ER0 - Z UW1 S - K IY0\nZALAR  Z AA0 - L AA1 R\nZALAY  Z AH0 - L EY1\nZALDIVAR  Z AA0 L - D IY0 - V AA1 R\nZALE  Z EY1 L\nZALE'S  Z EY1 L Z\nZALENSKI  Z AH0 - L EH1 N - S K IY0\nZALESKI  Z AH0 - L EH1 S - K IY0\nZALESKY  Z AH0 - L EH1 S - K IY0\nZALEWSKI  Z AH0 - L EH1 F S - K IY0\nZALEWSKI(2)  Z AH0 - L UW1 S - K IY0\nZALEY  Z EY1 - L IY0\nZALEY'S  Z EY1 - L IY0 Z\nZALM  Z AA1 M\nZALMAN  Z AA1 L - M AH0 N\nZALOUDEK  Z AE1 - L AW0 - D IH0 K\nZALYGIN  Z AE1 - L IH0 - G IH0 N\nZAMAN  Z EY1 - M AH0 N\nZAMARELLO  Z AE2 - M ER0 - EH1 - L OW0\nZAMARRIPA  Z AA0 - M AA0 - R IY1 - P AH0\nZAMARRON  Z AA0 - M AA0 - R AO1 N\nZAMBELLI  Z AA0 M - B EH1 - L IY0\nZAMBIA  Z AE1 M - B IY0 - AH0\nZAMBIA'S  Z AE1 M - B IY0 - AH0 Z\nZAMBIAN  Z AE1 M - B IY0 - AH0 N\nZAMBITO  Z AA0 M - B IY1 - T OW0\nZAMBO  Z AE1 M - B OW0\nZAMBOANGA  Z AE0 M - B OW1 NG - G AH0\nZAMBRANA  Z AA0 M - B R AE1 - N AH0\nZAMBRANO  Z AA0 M - B R AA1 - N OW0\nZAMBRANO(2)  Z AE2 M - B R AE1 - N OW0\nZAMFIR  Z AE0 M - F IH1 R\nZAMMIT  Z AE1 - M IH0 T\nZAMORA  Z AH0 - M AO1 - R AH0\nZAMORANO  Z AA0 - M AO0 - R AA1 - N OW0\nZAMPEDRI  Z AA0 M - P EH1 - D R IY0\nZAMPINO  Z AA0 M - P IY1 - N OW0\nZAMUDIO  Z AA0 - M UW1 - D IY0 - OW0\nZAMZOW  Z AE1 M - Z OW0\nZANCA  Z AE1 NG - K AH0\nZANDER  Z AE1 N - D ER0\nZANDERS  Z AE1 N - D ER0 Z\nZANDI  Z AA1 N - D IY0\nZANDI(2)  Z AE1 N - D IY0\nZANDRA  Z AE1 N - D R AH0\nZANDSTRA  Z AE1 N D - S T R AH0\nZANDT  Z AE1 N T\nZANDY  Z AE1 N - D IY0\nZANDY'S  Z AE1 N - D IY0 Z\nZANE  Z EY1 N\nZANELLA  Z AH0 - N EH1 - L AH0\nZANETA  Z AA0 - N EH1 - T AH0\nZANG  Z AE1 NG\nZANGARA  Z AA0 NG - G AA1 - R AH0\nZANGARI  Z AA0 NG - G AA1 - R IY0\nZANGER  Z AE1 - NG ER0\nZANGHI  Z AA1 N - G IY0\nZANI  Z AA1 - N IY0\nZANIEST  Z EY1 - N IY0 - AH0 S T\nZANIEWSKI  Z AE0 - N IY0 - EH1 F S - K IY0\nZANIEWSKI(2)  Z AH0 - N UW1 F S - K IY0\nZANK  Z AE1 NG K\nZANNI  Z AE1 - N IY0\nZANONI  Z AA0 - N OW1 - N IY0\nZANOYAN  Z AH0 - N OY1 - AH0 N\nZANT  Z AE1 N T\nZANTAC  Z AE1 N - T AE0 K\nZANU  Z AA0 - N UW1\nZANUCK  Z AE1 - N AH0 K\nZANUSSI  Z AH0 - N UW1 - S IY0\nZANY  Z EY1 - N IY0\nZANZIBAR  Z AE1 N - Z AH0 - B AA2 R\nZAP  Z AE1 P\nZAPALAC  Z AH0 - P AA1 - L AH0 K\nZAPATA  Z AA0 - P AA1 - T AH0\nZAPATISTA  Z AA2 - P AH0 - T IY1 - S T AH0\nZAPATISTA'S  Z AA2 - P AH0 - T IY1 - S T AH0 Z\nZAPATISTAS  Z AA2 - P AH0 - T IY1 - S T AH0 Z\nZAPF  Z AE1 P F\nZAPIEN  Z AE1 - P IY0 N\nZAPMAIL  Z AE1 P - M EY2 L\nZAPP  Z AE1 P\nZAPPA  Z AE1 - P AH0\nZAPPA'S  Z AE1 - P AH0 Z\nZAPPALA  Z AA0 - P AA1 - L AH0\nZAPPED  Z AE1 P T\nZAPPIA  Z AE1 - P IY0 - AH0\nZAPPING  Z AE1 - P IH0 NG\nZAPPONE  Z AA0 - P OW1 - N IY0\nZAPPULLA  Z AA0 - P UW1 - L AH0\nZAPRUDER  Z AH0 - P R UW1 - D ER0\nZAPS  Z AE1 P S\nZARA  Z AE1 - R AH0\nZARAGOZA  Z AA0 - R AA0 - G OW1 - Z AH0\nZARAH  Z AE1 - R AH0\nZARATE  Z AA1 - R EY0 T\nZARB  Z AA1 R B\nZARCONE  Z AA0 R - K OW1 - N IY0\nZARED  Z EH1 R D\nZAREK  Z AA1 - R EH0 K\nZARELLA  Z AH0 - R EH1 - L AH0\nZAREMBA  Z AA0 - R EH1 M - B AH0\nZAREMSKI  Z ER0 - EH1 S - K IY0\nZARETSKY  Z ER0 - EH1 T S - K IY0\nZARETT  Z EH1 - R AH0 T\nZARIA  Z AA1 - R IY0 - AH0\nZARING  Z EH1 - R IH0 NG\nZARLENGO  Z AA0 R - L EY1 NG - G OW0\nZARLING  Z AA1 R - L IH0 NG\nZARO  Z AE1 - R OW0\nZARR  Z AE1 R\nZARRELLA  Z AA2 - R EH1 - L AH0\nZARRO  Z AA1 - R OW0\nZARROLI  Z ER0 - OW1 - L IY0\nZARROLI'S  Z ER0 - OW1 - L IY0 Z\nZARTMAN  Z AA1 R T - M AH0 N\nZARUBA  Z ER0 - UW1 - B AH0\nZARY  Z AA1 - R IY0\nZARZECKI  Z AA0 R - Z EH1 - K IY0\nZARZYCKI  Z ER0 - Z IH1 T S - K IY0\nZASADA  Z AA0 - S AA1 - D AH0\nZASKE  Z EY1 S K\nZASLAVSKAYA  Z AE2 S - L AH0 V - S K AY1 - AH0\nZASLOW  Z AA1 - S L OW0\nZASTROW  Z AE1 - S T R OW0\nZAUCHA  Z AW1 - HH AH0\nZAUGG  Z AO1 G\nZAUN  Z AO1 N\nZAUNER  Z AO1 - N ER0\nZAVADA  Z AA0 - V AA1 - D AH0\nZAVADIL  Z AA0 - V AA0 - D IY1 L\nZAVALA  Z AA0 - V AA1 - L AH0\nZAVERY  Z EY1 - V ER0 - IY0\nZAVODNIK  Z AH0 - V AA1 D - N IH0 K\nZAVODNY  Z AH0 - V AA1 D - N IY0\nZAWACKI  Z AA0 - V AA1 T S - K IY0\nZAWADA  Z AA0 - W AA1 - D AH0\nZAWADZKI  Z AA0 - V AA1 JH - K IY0\nZAWISLAK  Z AA0 - V IH1 S - L AH0 K\nZAWISTOWSKI  Z AA0 - V IH0 - S T AO1 F S - K IY0\nZAYAC  Z AY1 - AH0 K\nZAYAS  Z EY1 - AA0 Z\nZAYED  Z EY1 - AH0 D\nZAYRE  Z EY1 R\nZAYRE'S  Z EY1 - ER0 Z\nZAZUETA  Z AA0 Z - W EH1 - T AH0\nZBIG  Z B IH1 G\nZBIGNIEW  Z B IH1 G - N UW0\nZBIKOWSKI  Z B IH0 - K AW1 - S K IY0\nZBINDEN  Z B AY1 N - D AH0 N\nZDROJEWSKI  Z D R OY2 - UW1 S - K IY0\nZE  Z IY1\nZEA  Z IY1\nZEAGLER  Z IY1 - G L ER0\nZEAL  Z IY1 L\nZEALAND  Z IY1 - L AH0 N D\nZEALAND'S  Z IY1 - L AH0 N D Z\nZEALANDER  Z IY1 - L AH0 N - D ER0\nZEALANDERS  Z IY1 - L AH0 N - D ER0 Z\nZEALOT  Z EH1 - L AH0 T\nZEALOTRY  Z EH1 - L AH0 - T R IY0\nZEALOTS  Z EH1 - L AH0 T S\nZEALOUS  Z EH1 - L AH0 S\nZEALOUSLY  Z IY1 - L AH0 S - L IY0\nZEALOUSLY(2)  Z EH1 - L AH0 S - L IY0\nZEBELL  Z IY1 - B EH0 L\nZEBLEY  Z EH1 - B L IY0\nZEBRA  Z IY1 - B R AH0\nZEBRAS  Z IY1 - B R AH0 Z\nZEBROWSKI  Z AH0 - B R AO1 F S - K IY0\nZEBULON  Z IY1 - B AH0 - L AH0 N\nZECCA  Z EH1 - K AH0\nZECH  Z EH1 K\nZECHER  Z EH1 - K ER0\nZECHMAN  Z EH1 K - M AH0 N\nZECK  Z EH1 K\nZECKENDORF  Z EH1 - K AH0 N - D AO2 R F\nZED  Z EH1 D\nZEDEKIAH  Z EH2 - D AH0 - K AY1 - AH0\nZEDILLO  Z EY2 - D IY1 - OW0\nZEDILLO'S  Z EY2 - D IY1 - OW0 Z\nZEDILLO'S(2)  Z EH2 - D IH1 - L OW0 Z\nZEDILLO(2)  Z EH2 - D IH1 - L OW0\nZEDONG  Z EY2 - D AO1 NG\nZEDONG(2)  Z IY2 - D AH2 NG\nZEE  Z IY1\nZEEB  Z IY1 B\nZEEBLE  Z IY1 - B AH0 L\nZEEBRUGGE  Z IY2 - B R UW1 - G IY0\nZEEK  Z IY1 K\nZEELAND  Z IY1 - L AH0 N D\nZEEMAN  Z IY1 - M AH0 N\nZEESE  Z IY1 Z\nZEESE(2)  Z IY1 S\nZEFF  Z EH1 F\nZEFFIRELLI  Z EH2 - F IH0 - R EH1 - L IY0\nZEGEER  Z IH0 - G IH1 R\nZEGER  Z IY1 - G ER0\nZEGERS  Z IY1 - G ER0 Z\nZEGLIN  Z EH1 G - L IH0 N\nZEH  Z EH1\nZEHNDER  Z EH1 N - D ER0\nZEHNER  Z EH1 - N ER0\nZEHNTEL  Z EH1 N - T EH2 L\nZEHR  Z EH1 R\nZEHREN  Z EH1 - R AH0 N\nZEHRING  Z EH1 - R IH0 NG\nZEIBEL  Z AY1 - B AH0 L\nZEIBEL'S  Z AY1 - B AH0 L Z\nZEICHNER  Z AY1 K - N ER0\nZEIDERS  Z AY1 - D ER0 Z\nZEIDLER  Z AY1 - D AH0 - L ER0\nZEIDLER(2)  Z AY1 D - L ER0\nZEIDMAN  Z AY1 D - M AH0 N\nZEIEN  Z AY1 - AH0 N\nZEIGER  Z AY1 - G ER0\nZEIGLER  Z AY1 - G AH0 - L ER0\nZEIGLER(2)  Z AY1 - G L ER0\nZEILER  Z AY1 - L ER0\nZEILINGER  Z AY1 - L IH0 - NG ER0\nZEIMET  Z AY1 - M IH0 T\nZEINAB  Z AY1 - N AE0 B\nZEINER  Z AY1 - N ER0\nZEIS  Z IY1 Z\nZEISER  Z AY1 - S ER0\nZEISLER  Z AY1 - S AH0 - L ER0\nZEISLER(2)  Z AY1 S - L ER0\nZEISS  Z AY1 S\nZEIT  Z AY1 T\nZEITER  Z AY1 - T ER0\nZEITGEIST  T S AY1 T - G AY2 S T\nZEITLER  Z AY1 - T AH0 L - ER0\nZEITLER  Z AY1 T - L ER0\nZEITLER(2)  Z AY1 T - L ER0\nZEITLIN  Z AY1 T - L IH0 N\nZEITUNG  Z AY1 - T AH0 NG\nZEITZ  Z IY1 T S\nZEKAUSKAS  Z AH0 - K AW1 - S K AH0 S\nZEKE  Z IY1 K\nZEL  Z EH1 L\nZELASKO  Z IH0 - L AA1 - S K OW0\nZELAYA  Z EY0 - L AY1 - AH0\nZELAZNY  Z IH0 - L AA1 Z - N IY0\nZELDA  Z EH1 L - D AH0\nZELDIN  Z EH1 L - D IH0 N\nZELE  Z IY1 L\nZELEK  Z EH1 - L IH0 K\nZELEM  Z EH1 - L AH0 M\nZELENAK  Z EH1 - L IH0 - N AH0 K\nZELENKA  Z IH0 - L EH1 NG - K AH0\nZELENY  Z IH0 - L IY1 - N IY0\nZELESNIK  Z AH0 - L EH1 S - N IH0 K\nZELEZNIK  Z IH0 - L EH1 Z - N IH0 K\nZELIA  Z EH1 - L IY0 - AH0\nZELIE  Z EH1 - L IY0\nZELIFF  Z EH1 - L IH0 F\nZELINA  Z EH0 - L IY1 - N AH0\nZELINKA  Z IH0 - L IH1 NG - K AH0\nZELINSKI  Z IH0 - L IH1 N - S K IY0\nZELINSKY  Z IH0 - L IH1 N - S K IY0\nZELKO  Z EH1 L - K OW0\nZELL  Z EH1 L\nZELLARS  Z EH1 - L ER0 Z\nZELLE  Z EH1 L\nZELLER  Z EH1 - L ER0\nZELLERBACH  Z EH1 - L ER0 - B AA2 K\nZELLERS  Z EH1 - L ER0 Z\nZELLMAN  Z EH1 L - M AH0 N\nZELLMER  Z EH1 L - M ER0\nZELLNER  Z EH1 L - N ER0\nZELMA  Z EH1 L - M AH0\nZELMAN  Z EH1 L - M AH0 N\nZELNICK  Z EH1 L - N IH0 K\nZELOS  Z IY1 - L OW0 Z\nZELOTES  Z EH1 - L AH0 T S\nZELTNER  Z EH1 L T - N ER0\nZELTZER  Z EH1 L T - S ER0\nZELVIN  Z EH1 L - V IH0 N\nZEMAITIS  Z EH2 - M AY1 - T AH0 S\nZEMAN  Z IY1 - M AH0 N\nZEMANEK  Z EH1 - M AH0 - N IH0 K\nZEMBA  Z EH1 M - B AH0\nZEMBOWER  Z EH1 M - B AW2 - ER0\nZEMBRISKI  Z EH0 M - B R IH1 S - K IY0\nZEMECKI  Z AH0 - M EH1 - K IY0\nZEMECKIS  Z AH0 - M EH1 - K IY0 Z\nZEMEL  Z EH1 - M AH0 L\nZEMIN  Z IY1 - M IH0 N\nZEMKE  Z EH1 M K\nZEMPEL  Z EH1 M - P AH0 L\nZEN  Z EH1 N\nZENA  Z IY1 - N AH0\nZENAIDA  Z IH0 - N EY1 - D AH0\nZENAS  Z IY1 - N AH0 Z\nZENCHU  Z EH1 N - CH UW2\nZENDA  Z EH1 N - D AH0\nZENDEJAS  Z IY1 N - D IH0 - JH AH0 Z\nZENDER  Z EH1 N - D ER0\nZENECA  Z EH1 - N AH0 - K AH0\nZENECA'S  Z EH1 - N AH0 - K AH0 Z\nZENG  Z EH1 NG\nZENGER  Z IY1 N - JH ER0\nZENIA  Z EY1 - N IY0 - AH0\nZENICA  Z EH1 - N IH0 - K AH0\nZENINA  Z EH0 - N IY1 - N AH0\nZENITH  Z IY1 - N AH0 TH\nZENITH'S  Z IY1 - N IH0 TH S\nZENITH(2)  Z IY1 - N IH0 TH\nZENK  Z EH1 NG K\nZENKER  Z EH1 NG - K ER0\nZENNA  Z EH1 - N AH0\nZENNER  Z EH1 - N ER0\nZENO  Z EY1 - N OW0\nZENOBIA  Z AH0 - N OW1 - B IY0 - AH0\nZENON  Z IY1 - N AH0 N\nZENOR  Z EH1 - N ER0\nZENS  Z EH1 N Z\nZENT  Z EH1 N T\nZENTEC  Z EH1 N - T EH2 K\nZENTNER  Z EH1 N T - N ER0\nZENTRALSPARKASSE  Z EH1 N - T R AH0 L - S P AA2 R - K AA2 - Z IH0\nZENTZ  Z EH1 N T S\nZENZ  Z EH1 N Z\nZEOLI  Z IY0 - AA1 - L IY0\nZEOS  Z IY1 - OW2 S\nZEPA  Z EH1 - P AH0\nZEPA(2)  Z IY1 - P AH0\nZEPA(3)  Z IY1 - IY1 - P IY1 - EY1\nZEPEDA  Z EY0 - P EY1 - D AH0\nZEPP  Z EH1 P\nZEPPELIN  Z EH1 - P IH0 - L IH0 N\nZEPPENFELD  Z EH1 - P AH0 - F EH2 L D\nZERA  Z EH1 - R AH0\nZERBE  Z IH1 R B\nZERBE(2)  Z IH1 R - B IY0\nZERBY  Z IH1 R - B IY0\nZERILLI  Z ER0 - IY1 - L IY0\nZERINGUE  Z EH1 - R IH0 NG\nZERKLE  Z IH1 R - K AH0 L\nZERLINA  Z ER0 - L IY1 - N AH0\nZERLINDA  Z ER0 - L IY1 N - D AH0\nZERMENO  Z ER0 - M EH1 - N OW0\nZERN  Z IH1 R N\nZERO  Z IH1 - R OW0\nZERO'S  Z IH1 - R OW0 Z\nZERO'S(2)  Z IY1 - R OW0 Z\nZERO(2)  Z IY1 - R OW0\nZEROED  Z IH1 - R OW0 D\nZEROED(2)  Z IY1 - R OW0 D\nZEROES  Z IH1 - R OW0 Z\nZEROES(2)  Z IY1 - R OW0 Z\nZEROING  Z IY1 - R OW0 - IH0 NG\nZEROLI  Z AH0 - R OW1 - L IY0\nZEROS  Z IH1 - R OW0 Z\nZERR  Z IH1 R\nZERTUCHE  Z IH1 R - T AH0 K\nZERVAS  Z IH1 R - V AH0 Z\nZERVOS  Z IH1 R - V OW0 Z\nZERVOS(2)  Z ER1 - V OW0 S\nZERWHALE  Z ER1 - W EY2 L\nZEST  Z EH1 S T\nZESTFUL  Z EH1 S T - F AH0 L\nZETA  Z EY1 - T AH0\nZETTEL  Z EH1 - T AH0 L\nZETTLE  Z EH1 - T AH0 L\nZETTLEMOYER  Z EH1 - T AH0 L - M OY0 - ER0\nZETTLER  Z EH1 T - L ER0\nZEUS  Z UW1 S\nZEV  Z EH1 V\nZEVA  Z EY1 - V AH0\nZEWE  Z IY1 - W IY2\nZEWE(2)  Z EH1 - W EY2\nZEYNO  Z EY1 - N OW0\nZHAN  Z AA1 N\nZHANG  ZH AE1 NG\nZHANG(2)  ZH AA1 NG\nZHAO  ZH AW1\nZHAO(2)  JH AW1\nZHEJIANG  ZH IY1 - JH AA1 NG\nZHENG  Z EH1 NG\nZHENYU  ZH EH1 - N Y UW2\nZHIRINOVSKY  ZH IH2 - R AH0 - N AA1 F S - K IY0\nZHIRINOVSKY'S  ZH IH2 - R AH0 - N AA1 F - S K IY0 Z\nZHIRINOVSKY'S(2)  ZH IH2 R - N AA1 F - S K IY0 Z\nZHIRINOVSKY(2)  ZH IH2 R - N AA1 F S - K IY0\nZHIVAGO  ZH IH0 - V AA1 - G OW0\nZHIVKOV  ZH IH1 V - K AA0 V\nZHOU  Z UW1\nZHU  Z UW1\nZHUHAI  Z UW1 - HH AY1\nZIA  Z IY1 - AH0\nZIA'S  Z IY1 - AH0 Z\nZIAD  Z IY1 - AE0 D\nZIAD(2)  Z IY1 - AY1 - EY1 - D IY1\nZIAD(3)  Z AY1 - AE0 D\nZIAHE  Z IY1 - AA0\nZIAHE(2)  Z IY1 - AA0 - HH IY0\nZIASHIVANEY  Z IY2 - AA0 - SH IH0 - V EY1 - N IY0\nZIBELL  Z AY1 - B EH0 L\nZICCARDI  Z IY0 - K AA1 R - D IY0\nZICH  Z IH1 CH\nZICK  Z IH1 K\nZICKEFOOSE  Z IH1 - K IH0 - F UW0 S\nZICO  Z IY1 - K OW0\nZIDEK  Z IH1 - D IH0 K\nZIEBA  Z IY1 - B AH0\nZIEBARTH  Z IY1 - B AA0 R TH\nZIEBELL  Z IY1 - B EH0 L\nZIEG  Z IY1 G\nZIEGENBEIN  Z IY1 - G IH0 N - B AY0 N\nZIEGENFUSS  Z IY1 - G IH0 N - F AH0 S\nZIEGENHORN  Z IY1 - G IH0 N - HH ER0 N\nZIEGER  Z IY1 - G ER0\nZIEGLER  Z IY1 - G L ER0\nZIEHL  Z IY1 L\nZIEHM  Z IY1 M\nZIEL  Z IY1 L\nZIELINSKI  Z IY0 - L IH1 N - S K IY0\nZIELKE  Z IY1 L K\nZIEMAN  Z IY1 - M AH0 N\nZIEMANN  Z IY1 - M AH0 N\nZIEMBA  Z IY1 M - B AH0\nZIEMER  Z IY1 - M ER0\nZIEMIAN  Z IY1 - M IY0 - AH0 N\nZIEMKE  Z IY1 M K\nZIENTEK  Z IY1 N - T IH0 K\nZIER  Z IH1 R\nZIERKE  Z IY1 R K\nZIESEMER  Z IY1 - S IY0 - M ER0\nZIESKE  Z IY1 S K\nZIESKE(2)  Z IY1 S - K IY0\nZIESMER  Z IY1 - S AH0 - M ER0\nZIETLOW  Z IY1 T - L OW0\nZIETZ  Z IY1 T S\nZIFF  Z IH1 F\nZIFF'S  Z IH1 F S\nZIFFERERO  Z IH2 - F ER0 - EH1 - R OW0\nZIG  Z IH1 G\nZIG-ZAG  Z IH1 G - Z AE2 G\nZIG-ZAGGED  Z IH1 G - Z AE2 G D\nZIGGURAT  Z IH1 - G ER0 - AE2 T\nZIGGURATS  Z IH1 - G ER0 - AE2 T S\nZIGLAR  Z IH1 G - L ER0\nZIGLER  Z AY1 - G AH0 - L ER0\nZIGLER(2)  Z AY1 - G L ER0\nZIGMAN  Z IH1 G - M AH0 N\nZIGZAG  Z IH1 G - Z AE0 G\nZIGZAGGED  Z IH1 G - Z AE0 G D\nZIGZAGGING  Z IH1 G - Z AE0 - G IH0 NG\nZIGZAGS  Z IH1 G - Z AE0 G Z\nZIKA  Z IH1 - K AH0\nZIKE  Z AY1 K\nZIL  Z IH1 L\nZILBER  Z IH1 L - B ER0\nZILCH  Z IH1 L CH\nZILE  Z AY1 L\nZILKA  Z IH1 L - K AH0\nZILKHA  Z IH1 L K - HH AH0\nZILL  Z IH1 L\nZILLA  Z IH1 - L AH0\nZILLAH  Z IH1 - L AH0\nZILLER  Z IH1 - L ER0\nZILLION  Z IH1 - L Y AH0 N\nZILLIONAIRE  Z IH1 - L Y AH0 - N EH2 R\nZILLIONS  Z IH1 - L Y AH0 N Z\nZILLMER  Z IH1 L - M ER0\nZILMER  Z IH1 L - M ER0\nZILVIA  Z IH1 L - V IY0 - AH0\nZIM  Z IH1 M\nZIMA  Z IY1 - M AH0\nZIMBABWE  Z IH0 M - B AA1 B - W EY0\nZIMBABWE'S  Z IH0 M - B AA1 B - W EY0 Z\nZIMBABWEAN  Z IH0 M - B AA1 B - W IY0 - AH0 N\nZIMBALIST  Z IH1 M - B AH0 - L IH0 S T\nZIMBELMAN  Z IH1 M - B AH0 L - M AH0 N\nZIMDARS  Z IH1 M - D ER0 Z\nZIMERMAN  Z AY1 - M ER0 - M AH0 N\nZIMMER  Z IH1 - M ER0\nZIMMERER  Z IH1 - M ER0 - ER0\nZIMMERLE  Z IH1 - M ER0 - AH0 L\nZIMMERLY  Z IH1 - M ER0 - L IY0\nZIMMERMAN  Z IH1 - M ER0 - M AH0 N\nZIMMERMANN  Z IH1 - M ER0 - M AH0 N\nZIMMERS  Z IH1 - M ER0 Z\nZIMNY  Z IH1 M - N IY0\nZIMPFER  Z IH1 M P - F ER0\nZINC  Z IH1 NG K\nZINCK  Z IH1 NG K\nZINDA  Z IH1 N - D AH0\nZINDER  Z IH1 N - D ER0\nZINE  Z AY1 N\nZINES  Z AY1 N Z\nZINFANDEL  Z IH1 N - F AH0 N - D EH2 L\nZING  Z IH1 NG\nZINGA  Z IH1 - NG AH0\nZINGALE  Z IH0 NG - G AA1 - L IY0\nZINGARO  Z IH0 NG - G AA1 - R OW0\nZINGER  Z IH1 - NG ER0\nZINGG  Z IH1 NG G\nZINGLER  Z IH1 NG - G AH0 - L ER0\nZINGLER(2)  Z IH1 NG - G L ER0\nZINIA  Z IY1 - N IY0 - AH0\nZINK  Z IH1 NG K\nZINKE  Z IH1 NG K\nZINMAN  Z IH1 N - M AH0 N\nZINN  Z IH1 N\nZINNER  Z IH1 - N ER0\nZINNI  Z IH1 - N IY0\nZINNIA  Z IH1 - N IY0 - AH0\nZINNIAS  Z IH1 - N IY0 - AH0 Z\nZINNO  Z IH1 - N OW0\nZINS  Z IH1 N Z\nZINSER  Z IH1 N - S ER0\nZINSMEISTER  Z IH1 N S - M AY0 - S T ER0\nZINTER  Z IH1 N - T ER0\nZIOBRO  Z IY0 - OW1 - B R OW0\nZIOLKOWSKI  Z IY0 - OW0 L - K AO1 F S - K IY0\nZIOMEK  Z IY0 - OW1 - M EH0 K\nZION  Z AY1 - AH0 N\nZIONISM  Z AY1 - AH0 - N IH2 - Z AH0 M\nZIONIST  Z AY1 - AH0 - N IH0 S T\nZIONISTS  Z AY1 - AH0 - N IH0 S T S\nZIONS  Z AY1 - AH0 N Z\nZIP  Z IH1 P\nZIPF  Z IH1 P F\nZIPFEL  Z IH1 P - F AH0 L\nZIPKIN  Z IH1 P - K IH0 N\nZIPLESS  Z IH1 P - L AH0 S\nZIPP  Z IH1 P\nZIPPED  Z IH1 P T\nZIPPER  Z IH1 - P ER0\nZIPPERED  Z IH1 - P ER0 D\nZIPPERER  Z IH1 - P ER0 - ER0\nZIPPERING  Z IH1 - P ER0 - IH0 NG\nZIPPERS  Z IH1 - P ER0 Z\nZIPPING  Z IH1 - P IH0 NG\nZIPPO  Z IH1 - P OW0\nZIPPORA  Z IY0 - P AO1 - R AH0\nZIPPY  Z IH1 - P IY0\nZIPS  Z IH1 P S\nZIRBEL  Z ER1 - B AH0 L\nZIRBES  Z ER1 B Z\nZIRCON  Z ER1 - K AH0 N\nZIRCONIUM  Z ER0 - K OW1 - N IY0 - AH0 M\nZIRCONIUMS  Z ER0 - K OW1 - N IY0 - AH0 M Z\nZIRCONS  Z ER1 - K AA0 N Z\nZIRELLA  Z AH0 - R EH1 - L AH0\nZIRK  Z ER1 K\nZIRKEL  Z ER1 - K AH0 L\nZIRKELBACH  Z ER1 - K IH0 L - B AA0 K\nZIRKLE  Z ER1 - K AH0 L\nZISA  Z AY1 - S AH0\nZISES  Z AY1 - Z IH0 Z\nZISK  Z IH1 S K\nZISKA  Z IH1 - S K AH0\nZISSON  Z IH1 - S AH0 N\nZITA  Z IY1 - T AH0\nZITEK  Z IH1 - T IH0 K\nZITHER  Z IH1 - DH ER0\nZITHERS  Z IH1 - DH ER0 Z\nZITO  Z IY1 - T OW0\nZITO'S  Z IY1 - T OW0 Z\nZITTEL  Z IH1 - T AH0 L\nZIV  Z IH1 V\nZIWEI  Z IY1 - W EY0\nZIYAD  Z IY1 - AE0 D\nZIYANG  ZH IY0 - AE1 NG\nZIYANG(2)  ZH IY0 - AA1 NG\nZIZZO  Z IH1 - Z OW0\nZLATA  Z L AA1 - T AH2\nZLATA'S  Z L AA1 - T AH2 Z\nZLATA'S(2)  Z L AA1 - T AH0 Z\nZLATA(2)  Z L AA1 - T AH0\nZLIN  Z L IH1 N\nZLOBIN  Z L AO1 - B IH0 N\nZLOGAR  Z L OW1 - G ER0\nZLOMSOWITCH  Z L AA1 M - S OW0 - IH0 CH\nZLOTNICK  Z L AA1 T - N IH0 K\nZLOTY  Z L AO1 - T IY0\nZLOTYS  Z L AO1 - T IY0 Z\nZMIJEWSKI  Z M IY0 - UW1 - S K IY0\nZOBEL  Z OW1 - B AH0 L\nZOBRIST  Z AA1 - B R IH0 S T\nZOCH  Z AA1 K\nZOCOR  Z OW1 - K ER0\nZOCOR(2)  Z OW1 - K AO2 R\nZODIAC  Z OW1 - D IY0 - AE2 K\nZODY  Z OW1 - D IY0\nZOE  Z OW1 - IY0\nZOELLER  Z OW1 - L ER0\nZOELLICK  Z OW1 - L IH0 K\nZOELLNER  Z OW1 L - N ER0\nZOETE  Z OW1 - T IY0\nZOFAGART  Z OW1 - F AH0 - G AA0 R T\nZOFRAN  Z OW1 - F R AE2 N\nZOGBY  Z AO1 G - B IY0\nZOGG  Z AA1 G\nZOGHBY  Z OW1 - B IY0\nZOH  Z OW1\nZOLA  Z OW1 - L AH0\nZOLL  Z AA1 L\nZOLLARS  Z AA1 - L ER0 Z\nZOLLER  Z AA1 - L ER0\nZOLLINGER  Z AA1 - L IH0 - NG ER0\nZOLLMAN  Z AA1 L - M AH0 N\nZOLLNER  Z AA1 L - N ER0\nZOLLO  Z AA1 - L OW0\nZOLMAN  Z AA1 L - M AH0 N\nZOLOFT  Z AA1 - L AA0 F T\nZOLOFT(2)  Z OW1 - L AA0 F T\nZOLP  Z OW1 L P\nZOLTAN  Z OW1 L - T AH0 N\nZOMBIE  Z AA1 M - B IY0\nZOMBIES  Z AA1 M - B IY0 Z\nZON  Z AO1 N\nZONA  Z OW1 - N AH0\nZONDERVAN  Z AA1 N - D ER0 - V AE0 N\nZONE  Z OW1 N\nZONED  Z OW1 N D\nZONES  Z OW1 N Z\nZONING  Z OW1 - N IH0 NG\nZOO  Z UW1\nZOO'S  Z UW1 Z\nZOOK  Z UH1 K\nZOOLOGICAL  Z UW2 - L AA1 - JH IH0 - K AH0 L\nZOOLOGIST  Z OW0 - AA1 - L AH0 - JH AH0 S T\nZOOLOGY  Z OW0 - AA1 - L AH0 - JH IY0\nZOOM  Z UW1 M\nZOOMED  Z UW1 M D\nZOOMING  Z UW1 - M IH0 NG\nZOOMS  Z UW1 M Z\nZOOS  Z UW1 Z\nZOPFI  Z OW1 P - F IY0\nZORA  Z AO1 - R AH0\nZORAH  Z AO1 - R AH0\nZORAN  Z AO1 - R AH0 N\nZORANA  Z AO0 - R AE1 - N AH0\nZORICH  Z AO1 - R IH0 K\nZORINA  Z AO0 - R IY1 - N AH0\nZORINE  Z AO0 - R IY1 - N IY0\nZORINSKY  Z AO0 - R IH1 N S - K IY0\nZORKIN  Z AO1 R - K IH0 N\nZORN  Z AO1 R N\nZORNES  Z AO1 R N Z\nZORNOW  Z AO1 R - N AW0\nZORRO  Z AO1 - R OW2\nZORTMAN  Z AO1 R T - M AH0 N\nZORZ  Z AO1 R Z\nZORZI  Z AO1 R - Z IY0\nZOSEN  Z OW1 - Z AH0 N\nZOSS  Z AO1 S\nZOSTER  Z AA1 - S T ER0\nZOTOS  Z OW1 - T OW0 Z\nZOTTER  Z AA1 - T ER0\nZOUCHA  Z UW1 - HH AH0\nZOVIRAX  Z OW1 - V IH0 - R AE0 K S\nZSA  ZH AA1\nZSA-ZSA  ZH AA1 - ZH AA2\nZSAZSA  ZH AA1 - ZH AA2\nZSCHAU  ZH AW1\nZUBA  Z UW1 - B AH0\nZUBE  Z UW1 B\nZUBER  Z UW1 - B ER0\nZUBIA  Z UW1 - B IY0 - AH0\nZUBILLAGA  Z UW2 - B IH0 - L AA1 - G AH0\nZUBIN  Z UW1 - B IH0 N\nZUBOFF  Z UW1 - B AO0 F\nZUBROD  Z AH1 - B R AH0 D\nZUCCARELLI  Z UW0 - K ER0 - EH1 - L IY0\nZUCCARO  Z UW0 - K AA1 - R OW0\nZUCCHINI  Z UW0 - K IY1 - N IY0\nZUCCO  Z UW1 - K OW0\nZUCH  Z AH1 CH\nZUCHOWSKI  Z AH0 - HH AO1 F S - K IY0\nZUCHOWSKI(2)  Z UW0 - K AO1 F S - K IY0\nZUCK  Z AH1 K\nZUCKER  Z AH1 - K ER0\nZUCKER'S  Z AH1 - K ER0 Z\nZUCKER'S(2)  Z UW1 - K ER0 Z\nZUCKER(2)  Z UW1 - K ER0\nZUCKERMAN  Z AH1 - K ER0 - M AH0 N\nZUCKERMAN'S  Z AH1 - K ER0 - M AH0 N Z\nZUCKERMAN'S(2)  Z UW1 - K ER0 - M AH0 N Z\nZUCKERMAN(2)  Z UW1 - K ER0 - M AH0 N\nZUE  Z UW1\nZUE'S  Z UW1 Z\nZUEGE  Z UW1 JH\nZUEHLKE  Z UH1 L K\nZUELKE  Z UW1 L K\nZUERCHER  Z UH1 R - K ER0\nZUFALL  Z UW1 - F AH0 L\nZUFELT  Z AH1 - F IH0 L T\nZUG  Z AH1 G\nZUG'S  Z AH1 G Z\nZUGANOV  Z UW1 - G AH0 - N AO2 V\nZUGANOV'S  Z UW1 - G AH0 - N AO2 V S\nZUGANOV'S(2)  Z UW1 - G AH0 - N AO2 F S\nZUGANOV(2)  Z UW1 - G AH0 - N AO2 F\nZUHLKE  Z UW1 L K\nZUIDEMA  Z UW0 - IH0 - D EH1 - M AH0\nZUK  Z AH1 K\nZUKAS  Z UW1 - K AH0 Z\nZUKER  Z UW1 - K ER0\nZUKERMAN  Z UW1 - K ER0 - M AH0 N\nZUKIN  Z UW1 - K IH0 N\nZUKOWSKI  Z AH0 - K AO1 F S - K IY0\nZULAUF  Z UW1 - L AW0 F\nZULEGER  Z UW1 - L IH0 - G ER0\nZULFIKAR  Z AH2 L - F IH0 - K AA1 R\nZULLI  Z UW1 - L IY0\nZULLO  Z UW1 - L OW0\nZULU  Z UW1 - L UW2\nZULUAGA  Z UW2 - L UW0 - AA1 - G AH0\nZULUS  Z UW1 - L UW0 Z\nZUMBRO  Z AH1 M - B R OW0\nZUMBRUN  Z AH1 M - B R AH0 N\nZUMEL  Z UW2 - M EH1 L\nZUMMO  Z UW1 - M OW0\nZUMPANO  Z UW0 M - P AA1 - N OW0\nZUMSTEIN  Z AH1 M - S T IY2 N\nZUMSTEIN(2)  Z AH1 M - S T AY2 N\nZUMWALT  Z AH1 M - W AH0 L T\nZUNDEL  Z AH1 N - D AH0 L\nZUNGU  Z AH2 - NG UW1\nZUNI  Z UW1 - N IY2\nZUNIGA  Z UW0 - N IY1 - G AH0\nZUNINO  Z UW0 - N IY1 - N OW0\nZUNKER  Z AH1 NG - K ER0\nZUPAN  Z UW1 - P AH0 N\nZUPANCIC  Z AH0 - P AE1 NG - K IH0 K\nZUPANJA  Z AH0 - P AE1 N - JH AH0\nZUPKO  Z AH1 P - K OW0\nZURAWSKI  Z ER0 - AA1 F S - K IY0\nZURCHER  Z ER1 - K ER0\nZUREK  Z UH1 - R EH0 K\nZURFLUH  Z ER1 - F L UW0\nZURI  Z UH1 - R IY0\nZURICH  Z UH1 - R IH0 K\nZURICH'S  Z UH1 - R IH0 K S\nZURITA  Z ER0 - AY1 - T AH0\nZURKUHLEN  Z ER0 - K Y UW1 - L AH0 N\nZURN  Z ER1 N\nZUROWSKI  Z ER0 - AO1 F S - K IY0\nZUVER  Z UW1 - V ER0\nZUZANA  Z UW2 - Z AA1 - N AH0\nZVORNIK  Z V AO1 R - N IH0 K\nZWACK  Z W AO1 K\nZWAHLEN  Z W AA1 - L AH0 N\nZWART  Z W AO1 R T\nZWEBER  Z W IY1 - B ER0\nZWEIBEL  Z W AY1 - B AH0 L\nZWEIFEL  Z W AY1 - F AH0 L\nZWEIG  Z W AY1 G\nZWERDLING  Z W ER1 D - L IH0 NG\nZWERDLING'S  Z W ER1 D - L IH0 NG Z\nZWETCHKENBAUM  Z W EH1 CH - K AH0 N - B AA0 M\nZWICK  Z W IH1 K\nZWICKER  Z W IH1 - K ER0\nZWICKY  Z W IH1 - K IY0\nZWIEBEL  Z W IY1 - B AH0 L\nZWIEFELHOFER  Z W IY1 - F AH0 L - HH AA2 - F ER0\nZWIEG  Z W IY1 G\nZWILLING  Z W IH1 - L IH0 NG\nZWOLINSKI  Z V AH0 - L IH1 N - S K IY0\nZYCAD  Z IH1 - K AE2 D\nZYCH  Z AY1 CH\nZYCHER  Z IH1 - K ER0\nZYDECO  Z AY2 - D EH1 - K OW2\nZYDECO(2)  Z IH1 - D AH0 - K OW2\nZYDECO(3)  Z AY1 - D AH0 - K OW2\nZYGMUNT  Z IH1 G - M AH0 N T\nZYGOTE  Z AY1 - G OW0 T\nZYLA  Z IH1 - L AH0\nZYLKA  Z IH1 L - K AH0\nZYLSTRA  Z IH1 L - S T R AH0\nZYMAN  Z AY1 - M AH0 N\nZYNDA  Z IH1 N - D AH0\nZYSK  Z AY1 S K\nZYSKOWSKI  Z IH0 - S K AO1 F S - K IY0\nZYUGANOV  Z Y UW1 - G AA0 - N AA0 V\nZYUGANOV'S  Z Y UW1 - G AA0 - N AA0 V Z\nZYUGANOV'S(2)  Z Y UW1 - G AA0 - N AA0 F S\nZYUGANOV'S(3)  Z UW1 - G AA0 - N AA0 V Z\nZYUGANOV'S(4)  Z UW1 - G AA0 - N AA0 F S\nZYUGANOV(2)  Z Y UW1 - G AA0 - N AA0 F\nZYUGANOV(3)  Z UW1 - G AA0 - N AA0 V\nZYUGANOV(4)  Z UW1 - G AA0 - N AA0 F\nZYWICKI  Z IH0 - W IH1 - K IY0\nZZZZ  Z IY0 Z\nZZZZ(2)  Z Z\n{BRACE  B R EY1 S\n{LEFT-BRACE  L EH1 F T - B R EY1 S\n}CLOSE-BRACE  K L OW1 Z - B R EY1 S\n}RIGHT-BRACE  R AY1 T - B R EY1 S\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/english.py",
    "content": "import pickle\nimport os\nimport re\nfrom g2p_en import G2p\n\nfrom . import symbols\n\nfrom .english_utils.abbreviations import expand_abbreviations\nfrom .english_utils.time_norm import expand_time_english\nfrom .english_utils.number_norm import normalize_numbers\nfrom .japanese import distribute_phone\n\nfrom transformers import AutoTokenizer\n\ncurrent_file_path = os.path.dirname(__file__)\nCMU_DICT_PATH = os.path.join(current_file_path, \"cmudict.rep\")\nCACHE_PATH = os.path.join(current_file_path, \"cmudict_cache.pickle\")\n_g2p = G2p()\n\narpa = {\n    \"AH0\",\n    \"S\",\n    \"AH1\",\n    \"EY2\",\n    \"AE2\",\n    \"EH0\",\n    \"OW2\",\n    \"UH0\",\n    \"NG\",\n    \"B\",\n    \"G\",\n    \"AY0\",\n    \"M\",\n    \"AA0\",\n    \"F\",\n    \"AO0\",\n    \"ER2\",\n    \"UH1\",\n    \"IY1\",\n    \"AH2\",\n    \"DH\",\n    \"IY0\",\n    \"EY1\",\n    \"IH0\",\n    \"K\",\n    \"N\",\n    \"W\",\n    \"IY2\",\n    \"T\",\n    \"AA1\",\n    \"ER1\",\n    \"EH2\",\n    \"OY0\",\n    \"UH2\",\n    \"UW1\",\n    \"Z\",\n    \"AW2\",\n    \"AW1\",\n    \"V\",\n    \"UW2\",\n    \"AA2\",\n    \"ER\",\n    \"AW0\",\n    \"UW0\",\n    \"R\",\n    \"OW1\",\n    \"EH1\",\n    \"ZH\",\n    \"AE0\",\n    \"IH2\",\n    \"IH\",\n    \"Y\",\n    \"JH\",\n    \"P\",\n    \"AY1\",\n    \"EY0\",\n    \"OY2\",\n    \"TH\",\n    \"HH\",\n    \"D\",\n    \"ER0\",\n    \"CH\",\n    \"AO1\",\n    \"AE1\",\n    \"AO2\",\n    \"OY1\",\n    \"AY2\",\n    \"IH1\",\n    \"OW0\",\n    \"L\",\n    \"SH\",\n}\n\n\ndef post_replace_ph(ph):\n    rep_map = {\n        \"：\": \",\",\n        \"；\": \",\",\n        \"，\": \",\",\n        \"。\": \".\",\n        \"！\": \"!\",\n        \"？\": \"?\",\n        \"\\n\": \".\",\n        \"·\": \",\",\n        \"、\": \",\",\n        \"...\": \"…\",\n        \"v\": \"V\",\n    }\n    if ph in rep_map.keys():\n        ph = rep_map[ph]\n    if ph in symbols:\n        return ph\n    if ph not in symbols:\n        ph = \"UNK\"\n    return ph\n\n\ndef read_dict():\n    g2p_dict = {}\n    start_line = 49\n    with open(CMU_DICT_PATH) as f:\n        line = f.readline()\n        line_index = 1\n        while line:\n            if line_index >= start_line:\n                line = line.strip()\n                word_split = line.split(\"  \")\n                word = word_split[0]\n\n                syllable_split = word_split[1].split(\" - \")\n                g2p_dict[word] = []\n                for syllable in syllable_split:\n                    phone_split = syllable.split(\" \")\n                    g2p_dict[word].append(phone_split)\n\n            line_index = line_index + 1\n            line = f.readline()\n\n    return g2p_dict\n\n\ndef cache_dict(g2p_dict, file_path):\n    with open(file_path, \"wb\") as pickle_file:\n        pickle.dump(g2p_dict, pickle_file)\n\n\ndef get_dict():\n    if os.path.exists(CACHE_PATH):\n        with open(CACHE_PATH, \"rb\") as pickle_file:\n            g2p_dict = pickle.load(pickle_file)\n    else:\n        g2p_dict = read_dict()\n        cache_dict(g2p_dict, CACHE_PATH)\n\n    return g2p_dict\n\n\neng_dict = get_dict()\n\n\ndef refine_ph(phn):\n    tone = 0\n    if re.search(r\"\\d$\", phn):\n        tone = int(phn[-1]) + 1\n        phn = phn[:-1]\n    return phn.lower(), tone\n\n\ndef refine_syllables(syllables):\n    tones = []\n    phonemes = []\n    for phn_list in syllables:\n        for i in range(len(phn_list)):\n            phn = phn_list[i]\n            phn, tone = refine_ph(phn)\n            phonemes.append(phn)\n            tones.append(tone)\n    return phonemes, tones\n\n\ndef text_normalize(text):\n    text = text.lower()\n    text = expand_time_english(text)\n    text = normalize_numbers(text)\n    text = expand_abbreviations(text)\n    return text\n\nmodel_id = 'bert-base-uncased'\ntokenizer = AutoTokenizer.from_pretrained(model_id)\ndef g2p_old(text):\n    tokenized = tokenizer.tokenize(text)\n    # import pdb; pdb.set_trace()\n    phones = []\n    tones = []\n    words = re.split(r\"([,;.\\-\\?\\!\\s+])\", text)\n    for w in words:\n        if w.upper() in eng_dict:\n            phns, tns = refine_syllables(eng_dict[w.upper()])\n            phones += phns\n            tones += tns\n        else:\n            phone_list = list(filter(lambda p: p != \" \", _g2p(w)))\n            for ph in phone_list:\n                if ph in arpa:\n                    ph, tn = refine_ph(ph)\n                    phones.append(ph)\n                    tones.append(tn)\n                else:\n                    phones.append(ph)\n                    tones.append(0)\n    # todo: implement word2ph\n    word2ph = [1 for i in phones]\n\n    phones = [post_replace_ph(i) for i in phones]\n    return phones, tones, word2ph\n\ndef g2p(text, pad_start_end=True, tokenized=None):\n    if tokenized is None:\n        tokenized = tokenizer.tokenize(text)\n    # import pdb; pdb.set_trace()\n    phs = []\n    ph_groups = []\n    for t in tokenized:\n        if not t.startswith(\"#\"):\n            ph_groups.append([t])\n        else:\n            ph_groups[-1].append(t.replace(\"#\", \"\"))\n    \n    phones = []\n    tones = []\n    word2ph = []\n    for group in ph_groups:\n        w = \"\".join(group)\n        phone_len = 0\n        word_len = len(group)\n        if w.upper() in eng_dict:\n            phns, tns = refine_syllables(eng_dict[w.upper()])\n            phones += phns\n            tones += tns\n            phone_len += len(phns)\n        else:\n            phone_list = list(filter(lambda p: p != \" \", _g2p(w)))\n            for ph in phone_list:\n                if ph in arpa:\n                    ph, tn = refine_ph(ph)\n                    phones.append(ph)\n                    tones.append(tn)\n                else:\n                    phones.append(ph)\n                    tones.append(0)\n                phone_len += 1\n        aaa = distribute_phone(phone_len, word_len)\n        word2ph += aaa\n    phones = [post_replace_ph(i) for i in phones]\n\n    if pad_start_end:\n        phones = [\"_\"] + phones + [\"_\"]\n        tones = [0] + tones + [0]\n        word2ph = [1] + word2ph + [1]\n    return phones, tones, word2ph\n\ndef get_bert_feature(text, word2ph, device=None):\n    from text import english_bert\n\n    return english_bert.get_bert_feature(text, word2ph, device=device)\n\nif __name__ == \"__main__\":\n    # print(get_dict())\n    # print(eng_word_to_phoneme(\"hello\"))\n    from text.english_bert import get_bert_feature\n    text = \"In this paper, we propose 1 DSPGAN, a N-F-T GAN-based universal vocoder.\"\n    text = text_normalize(text)\n    phones, tones, word2ph = g2p(text)\n    import pdb; pdb.set_trace()\n    bert = get_bert_feature(text, word2ph)\n    \n    print(phones, tones, word2ph, bert.shape)\n\n    # all_phones = set()\n    # for k, syllables in eng_dict.items():\n    #     for group in syllables:\n    #         for ph in group:\n    #             all_phones.add(ph)\n    # print(all_phones)\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/english_bert.py",
    "content": "import torch\nfrom transformers import AutoTokenizer, AutoModelForMaskedLM\nimport sys\n\nmodel_id = 'bert-base-uncased'\ntokenizer = AutoTokenizer.from_pretrained(model_id)\nmodel = None\n\ndef get_bert_feature(text, word2ph, device=None):\n    global model\n    if (\n        sys.platform == \"darwin\"\n        and torch.backends.mps.is_available()\n        and device == \"cpu\"\n    ):\n        device = \"mps\"\n    if not device:\n        device = \"cuda\"\n    if model is None:\n        model = AutoModelForMaskedLM.from_pretrained(model_id).to(\n            device\n        )\n    with torch.no_grad():\n        inputs = tokenizer(text, return_tensors=\"pt\")\n        for i in inputs:\n            inputs[i] = inputs[i].to(device)\n        res = model(**inputs, output_hidden_states=True)\n        res = torch.cat(res[\"hidden_states\"][-3:-2], -1)[0].cpu()\n        \n    assert inputs[\"input_ids\"].shape[-1] == len(word2ph)\n    word2phone = word2ph\n    phone_level_feature = []\n    for i in range(len(word2phone)):\n        repeat_feature = res[i].repeat(word2phone[i], 1)\n        phone_level_feature.append(repeat_feature)\n\n    phone_level_feature = torch.cat(phone_level_feature, dim=0)\n\n    return phone_level_feature.T\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/english_utils/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/melo/text/english_utils/abbreviations.py",
    "content": "import re\n\n# List of (regular expression, replacement) pairs for abbreviations in english:\nabbreviations_en = [\n    (re.compile(\"\\\\b%s\\\\.\" % x[0], re.IGNORECASE), x[1])\n    for x in [\n        (\"mrs\", \"misess\"),\n        (\"mr\", \"mister\"),\n        (\"dr\", \"doctor\"),\n        (\"st\", \"saint\"),\n        (\"co\", \"company\"),\n        (\"jr\", \"junior\"),\n        (\"maj\", \"major\"),\n        (\"gen\", \"general\"),\n        (\"drs\", \"doctors\"),\n        (\"rev\", \"reverend\"),\n        (\"lt\", \"lieutenant\"),\n        (\"hon\", \"honorable\"),\n        (\"sgt\", \"sergeant\"),\n        (\"capt\", \"captain\"),\n        (\"esq\", \"esquire\"),\n        (\"ltd\", \"limited\"),\n        (\"col\", \"colonel\"),\n        (\"ft\", \"fort\"),\n    ]\n]\n\ndef expand_abbreviations(text, lang=\"en\"):\n    if lang == \"en\":\n        _abbreviations = abbreviations_en\n    else:\n        raise NotImplementedError()\n    for regex, replacement in _abbreviations:\n        text = re.sub(regex, replacement, text)\n    return text"
  },
  {
    "path": "xinference/thirdparty/melo/text/english_utils/number_norm.py",
    "content": "\"\"\" from https://github.com/keithito/tacotron \"\"\"\n\nimport re\nfrom typing import Dict\n\nimport inflect\n\n_inflect = inflect.engine()\n_comma_number_re = re.compile(r\"([0-9][0-9\\,]+[0-9])\")\n_decimal_number_re = re.compile(r\"([0-9]+\\.[0-9]+)\")\n_currency_re = re.compile(r\"(£|\\$|¥)([0-9\\,\\.]*[0-9]+)\")\n_ordinal_re = re.compile(r\"[0-9]+(st|nd|rd|th)\")\n_number_re = re.compile(r\"-?[0-9]+\")\n\n\ndef _remove_commas(m):\n    return m.group(1).replace(\",\", \"\")\n\n\ndef _expand_decimal_point(m):\n    return m.group(1).replace(\".\", \" point \")\n\n\ndef __expand_currency(value: str, inflection: Dict[float, str]) -> str:\n    parts = value.replace(\",\", \"\").split(\".\")\n    if len(parts) > 2:\n        return f\"{value} {inflection[2]}\"  # Unexpected format\n    text = []\n    integer = int(parts[0]) if parts[0] else 0\n    if integer > 0:\n        integer_unit = inflection.get(integer, inflection[2])\n        text.append(f\"{integer} {integer_unit}\")\n    fraction = int(parts[1]) if len(parts) > 1 and parts[1] else 0\n    if fraction > 0:\n        fraction_unit = inflection.get(fraction / 100, inflection[0.02])\n        text.append(f\"{fraction} {fraction_unit}\")\n    if len(text) == 0:\n        return f\"zero {inflection[2]}\"\n    return \" \".join(text)\n\n\ndef _expand_currency(m: \"re.Match\") -> str:\n    currencies = {\n        \"$\": {\n            0.01: \"cent\",\n            0.02: \"cents\",\n            1: \"dollar\",\n            2: \"dollars\",\n        },\n        \"€\": {\n            0.01: \"cent\",\n            0.02: \"cents\",\n            1: \"euro\",\n            2: \"euros\",\n        },\n        \"£\": {\n            0.01: \"penny\",\n            0.02: \"pence\",\n            1: \"pound sterling\",\n            2: \"pounds sterling\",\n        },\n        \"¥\": {\n            # TODO rin\n            0.02: \"sen\",\n            2: \"yen\",\n        },\n    }\n    unit = m.group(1)\n    currency = currencies[unit]\n    value = m.group(2)\n    return __expand_currency(value, currency)\n\n\ndef _expand_ordinal(m):\n    return _inflect.number_to_words(m.group(0))\n\n\ndef _expand_number(m):\n    num = int(m.group(0))\n    if 1000 < num < 3000:\n        if num == 2000:\n            return \"two thousand\"\n        if 2000 < num < 2010:\n            return \"two thousand \" + _inflect.number_to_words(num % 100)\n        if num % 100 == 0:\n            return _inflect.number_to_words(num // 100) + \" hundred\"\n        return _inflect.number_to_words(num, andword=\"\", zero=\"oh\", group=2).replace(\", \", \" \")\n    return _inflect.number_to_words(num, andword=\"\")\n\n\ndef normalize_numbers(text):\n    text = re.sub(_comma_number_re, _remove_commas, text)\n    text = re.sub(_currency_re, _expand_currency, text)\n    text = re.sub(_decimal_number_re, _expand_decimal_point, text)\n    text = re.sub(_ordinal_re, _expand_ordinal, text)\n    text = re.sub(_number_re, _expand_number, text)\n    return text"
  },
  {
    "path": "xinference/thirdparty/melo/text/english_utils/time_norm.py",
    "content": "import re\n\nimport inflect\n\n_inflect = inflect.engine()\n\n_time_re = re.compile(\n    r\"\"\"\\b\n                          ((0?[0-9])|(1[0-1])|(1[2-9])|(2[0-3]))  # hours\n                          :\n                          ([0-5][0-9])                            # minutes\n                          \\s*(a\\\\.m\\\\.|am|pm|p\\\\.m\\\\.|a\\\\.m|p\\\\.m)? # am/pm\n                          \\b\"\"\",\n    re.IGNORECASE | re.X,\n)\n\n\ndef _expand_num(n: int) -> str:\n    return _inflect.number_to_words(n)\n\n\ndef _expand_time_english(match: \"re.Match\") -> str:\n    hour = int(match.group(1))\n    past_noon = hour >= 12\n    time = []\n    if hour > 12:\n        hour -= 12\n    elif hour == 0:\n        hour = 12\n        past_noon = True\n    time.append(_expand_num(hour))\n\n    minute = int(match.group(6))\n    if minute > 0:\n        if minute < 10:\n            time.append(\"oh\")\n        time.append(_expand_num(minute))\n    am_pm = match.group(7)\n    if am_pm is None:\n        time.append(\"p m\" if past_noon else \"a m\")\n    else:\n        time.extend(list(am_pm.replace(\".\", \"\")))\n    return \" \".join(time)\n\n\ndef expand_time_english(text: str) -> str:\n    return re.sub(_time_re, _expand_time_english, text)"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/base.py",
    "content": "import abc\nfrom typing import List, Tuple\n\nfrom .punctuation import Punctuation\n\n\nclass BasePhonemizer(abc.ABC):\n    \"\"\"Base phonemizer class\n\n    Phonemization follows the following steps:\n        1. Preprocessing:\n            - remove empty lines\n            - remove punctuation\n            - keep track of punctuation marks\n\n        2. Phonemization:\n            - convert text to phonemes\n\n        3. Postprocessing:\n            - join phonemes\n            - restore punctuation marks\n\n    Args:\n        language (str):\n            Language used by the phonemizer.\n\n        punctuations (List[str]):\n            List of punctuation marks to be preserved.\n\n        keep_puncs (bool):\n            Whether to preserve punctuation marks or not.\n    \"\"\"\n\n    def __init__(self, language, punctuations=Punctuation.default_puncs(), keep_puncs=False):\n        # ensure the backend is installed on the system\n        if not self.is_available():\n            raise RuntimeError(\"{} not installed on your system\".format(self.name()))  # pragma: nocover\n\n        # ensure the backend support the requested language\n        self._language = self._init_language(language)\n\n        # setup punctuation processing\n        self._keep_puncs = keep_puncs\n        self._punctuator = Punctuation(punctuations)\n\n    def _init_language(self, language):\n        \"\"\"Language initialization\n\n        This method may be overloaded in child classes (see Segments backend)\n\n        \"\"\"\n        if not self.is_supported_language(language):\n            raise RuntimeError(f'language \"{language}\" is not supported by the ' f\"{self.name()} backend\")\n        return language\n\n    @property\n    def language(self):\n        \"\"\"The language code configured to be used for phonemization\"\"\"\n        return self._language\n\n    @staticmethod\n    @abc.abstractmethod\n    def name():\n        \"\"\"The name of the backend\"\"\"\n        ...\n\n    @classmethod\n    @abc.abstractmethod\n    def is_available(cls):\n        \"\"\"Returns True if the backend is installed, False otherwise\"\"\"\n        ...\n\n    @classmethod\n    @abc.abstractmethod\n    def version(cls):\n        \"\"\"Return the backend version as a tuple (major, minor, patch)\"\"\"\n        ...\n\n    @staticmethod\n    @abc.abstractmethod\n    def supported_languages():\n        \"\"\"Return a dict of language codes -> name supported by the backend\"\"\"\n        ...\n\n    def is_supported_language(self, language):\n        \"\"\"Returns True if `language` is supported by the backend\"\"\"\n        return language in self.supported_languages()\n\n    @abc.abstractmethod\n    def _phonemize(self, text, separator):\n        \"\"\"The main phonemization method\"\"\"\n\n    def _phonemize_preprocess(self, text) -> Tuple[List[str], List]:\n        \"\"\"Preprocess the text before phonemization\n\n        1. remove spaces\n        2. remove punctuation\n\n        Override this if you need a different behaviour\n        \"\"\"\n        text = text.strip()\n        if self._keep_puncs:\n            # a tuple (text, punctuation marks)\n            return self._punctuator.strip_to_restore(text)\n        return [self._punctuator.strip(text)], []\n\n    def _phonemize_postprocess(self, phonemized, punctuations) -> str:\n        \"\"\"Postprocess the raw phonemized output\n\n        Override this if you need a different behaviour\n        \"\"\"\n        if self._keep_puncs:\n            return self._punctuator.restore(phonemized, punctuations)[0]\n        return phonemized[0]\n\n    def phonemize(self, text: str, separator=\"|\", language: str = None) -> str:  # pylint: disable=unused-argument\n        \"\"\"Returns the `text` phonemized for the given language\n\n        Args:\n            text (str):\n                Text to be phonemized.\n\n            separator (str):\n                string separator used between phonemes. Default to '_'.\n\n        Returns:\n            (str): Phonemized text\n        \"\"\"\n        text, punctuations = self._phonemize_preprocess(text)\n        phonemized = []\n        for t in text:\n            p = self._phonemize(t, separator)\n            phonemized.append(p)\n        phonemized = self._phonemize_postprocess(phonemized, punctuations)\n        return phonemized\n\n    def print_logs(self, level: int = 0):\n        indent = \"\\t\" * level\n        print(f\"{indent}| > phoneme language: {self.language}\")\n        print(f\"{indent}| > phoneme backend: {self.name()}\")"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/cleaner.py",
    "content": "\"\"\"Set of default text cleaners\"\"\"\n# TODO: pick the cleaner for languages dynamically\n\nimport re\n\n# Regular expression matching whitespace:\n_whitespace_re = re.compile(r\"\\s+\")\n\nrep_map = {\n    \"：\": \",\",\n    \"；\": \",\",\n    \"，\": \",\",\n    \"。\": \".\",\n    \"！\": \"!\",\n    \"？\": \"?\",\n    \"\\n\": \".\",\n    \"·\": \",\",\n    \"、\": \",\",\n    \"...\": \".\",\n    \"…\": \".\",\n    \"$\": \".\",\n    \"“\": \"'\",\n    \"”\": \"'\",\n    \"‘\": \"'\",\n    \"’\": \"'\",\n    \"（\": \"'\",\n    \"）\": \"'\",\n    \"(\": \"'\",\n    \")\": \"'\",\n    \"《\": \"'\",\n    \"》\": \"'\",\n    \"【\": \"'\",\n    \"】\": \"'\",\n    \"[\": \"'\",\n    \"]\": \"'\",\n    \"—\": \"\",\n    \"～\": \"-\",\n    \"~\": \"-\",\n    \"「\": \"'\",\n    \"」\": \"'\",\n}\n\ndef replace_punctuation(text):\n    pattern = re.compile(\"|\".join(re.escape(p) for p in rep_map.keys()))\n    replaced_text = pattern.sub(lambda x: rep_map[x.group()], text)\n    return replaced_text\n\ndef lowercase(text):\n    return text.lower()\n\n\ndef collapse_whitespace(text):\n    return re.sub(_whitespace_re, \" \", text).strip()\n\ndef remove_punctuation_at_begin(text):\n    return re.sub(r'^[,.!?]+', '', text)\n\ndef remove_aux_symbols(text):\n    text = re.sub(r\"[\\<\\>\\(\\)\\[\\]\\\"\\«\\»\\']+\", \"\", text)\n    return text\n\n\ndef replace_symbols(text, lang=\"en\"):\n    \"\"\"Replace symbols based on the lenguage tag.\n\n    Args:\n      text:\n       Input text.\n      lang:\n        Lenguage identifier. ex: \"en\", \"fr\", \"pt\", \"ca\".\n\n    Returns:\n      The modified text\n      example:\n        input args:\n            text: \"si l'avi cau, diguem-ho\"\n            lang: \"ca\"\n        Output:\n            text: \"si lavi cau, diguemho\"\n    \"\"\"\n    text = text.replace(\";\", \",\")\n    text = text.replace(\"-\", \" \") if lang != \"ca\" else text.replace(\"-\", \"\")\n    text = text.replace(\":\", \",\")\n    if lang == \"en\":\n        text = text.replace(\"&\", \" and \")\n    elif lang == \"fr\":\n        text = text.replace(\"&\", \" et \")\n    elif lang == \"pt\":\n        text = text.replace(\"&\", \" e \")\n    elif lang == \"ca\":\n        text = text.replace(\"&\", \" i \")\n        text = text.replace(\"'\", \"\")\n    elif lang== \"es\":\n        text=text.replace(\"&\",\"y\")\n        text = text.replace(\"'\", \"\")\n    return text\n\ndef spanish_cleaners(text):\n    \"\"\"Basic pipeline for Portuguese text. There is no need to expand abbreviation and\n    numbers, phonemizer already does that\"\"\"\n    text = lowercase(text)\n    text = replace_symbols(text, lang=\"es\")\n    text = replace_punctuation(text)\n    text = remove_aux_symbols(text)\n    text = remove_punctuation_at_begin(text)\n    text = collapse_whitespace(text)\n    text = re.sub(r'([^\\.,!\\?\\-…])$', r'\\1.', text)\n    return text\n\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/es_symbols.json",
    "content": "{\n    \"symbols\": [\n        \"_\",\n        \",\",\n        \".\",\n        \"!\",\n        \"?\",\n        \"-\",\n        \"~\",\n        \"\\u2026\",\n        \"N\",\n        \"Q\",\n        \"a\",\n        \"b\",\n        \"d\",\n        \"e\",\n        \"f\",\n        \"g\",\n        \"h\",\n        \"i\",\n        \"j\",\n        \"k\",\n        \"l\",\n        \"m\",\n        \"n\",\n        \"o\",\n        \"p\",\n        \"s\",\n        \"t\",\n        \"u\",\n        \"v\",\n        \"w\",\n        \"x\",\n        \"y\",\n        \"z\",\n        \"\\u0251\",\n        \"\\u00e6\",\n        \"\\u0283\",\n        \"\\u0291\",\n        \"\\u00e7\",\n        \"\\u026f\",\n        \"\\u026a\",\n        \"\\u0254\",\n        \"\\u025b\",\n        \"\\u0279\",\n        \"\\u00f0\",\n        \"\\u0259\",\n        \"\\u026b\",\n        \"\\u0265\",\n        \"\\u0278\",\n        \"\\u028a\",\n        \"\\u027e\",\n        \"\\u0292\",\n        \"\\u03b8\",\n        \"\\u03b2\",\n        \"\\u014b\",\n        \"\\u0266\",\n        \"\\u207c\",\n        \"\\u02b0\",\n        \"`\",\n        \"^\",\n        \"#\",\n        \"*\",\n        \"=\",\n        \"\\u02c8\",\n        \"\\u02cc\",\n        \"\\u2192\",\n        \"\\u2193\",\n        \"\\u2191\",\n        \" \",\n        \"\\u0263\",\n        \"\\u0261\",\n        \"r\",\n        \"\\u0272\",\n        \"\\u029d\",\n        \"\\u028e\",\n        \"\\u02d0\"\n    ]\n}"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/es_symbols.txt",
    "content": "_,.!?-~…NQabdefghijklmnopstuvwxyzɑæʃʑçɯɪɔɛɹðəɫɥɸʊɾʒθβŋɦ⁼ʰ`^#*=ˈˌ→↓↑ ɡrɲʝɣʎː—¿¡"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/es_symbols_v2.json",
    "content": "{\n    \"symbols\": [\n        \"_\",\n        \",\",\n        \".\",\n        \"!\",\n        \"?\",\n        \"-\",\n        \"~\",\n        \"\\u2026\",\n        \"N\",\n        \"Q\",\n        \"a\",\n        \"b\",\n        \"d\",\n        \"e\",\n        \"f\",\n        \"g\",\n        \"h\",\n        \"i\",\n        \"j\",\n        \"k\",\n        \"l\",\n        \"m\",\n        \"n\",\n        \"o\",\n        \"p\",\n        \"s\",\n        \"t\",\n        \"u\",\n        \"v\",\n        \"w\",\n        \"x\",\n        \"y\",\n        \"z\",\n        \"\\u0251\",\n        \"\\u00e6\",\n        \"\\u0283\",\n        \"\\u0291\",\n        \"\\u00e7\",\n        \"\\u026f\",\n        \"\\u026a\",\n        \"\\u0254\",\n        \"\\u025b\",\n        \"\\u0279\",\n        \"\\u00f0\",\n        \"\\u0259\",\n        \"\\u026b\",\n        \"\\u0265\",\n        \"\\u0278\",\n        \"\\u028a\",\n        \"\\u027e\",\n        \"\\u0292\",\n        \"\\u03b8\",\n        \"\\u03b2\",\n        \"\\u014b\",\n        \"\\u0266\",\n        \"\\u207c\",\n        \"\\u02b0\",\n        \"`\",\n        \"^\",\n        \"#\",\n        \"*\",\n        \"=\",\n        \"\\u02c8\",\n        \"\\u02cc\",\n        \"\\u2192\",\n        \"\\u2193\",\n        \"\\u2191\",\n        \" \",\n        \"\\u0261\",\n        \"r\",\n        \"\\u0272\",\n        \"\\u029d\",\n        \"\\u0263\",\n        \"\\u028e\",\n        \"\\u02d0\",\n        \n        \"\\u2014\",\n        \"\\u00bf\",\n        \"\\u00a1\"\n    ]\n}"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/es_to_ipa.py",
    "content": "from .cleaner import spanish_cleaners\nfrom .gruut_wrapper import Gruut\n\ndef es2ipa(text):\n    e = Gruut(language=\"es-es\", keep_puncs=True, keep_stress=True, use_espeak_phonemes=True)\n    # text = spanish_cleaners(text)\n    phonemes = e.phonemize(text, separator=\"\")\n    return phonemes\n\n\nif __name__ == '__main__':\n  print(es2ipa('¿Y a quién echaría de menos, en el mundo si no fuese a vos?'))"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/example_ipa.txt",
    "content": "kapˈitulo ˈuno de daβˈid kˌoppeɾfjˈelð o el soβɾˈino de mi tˈia de tʃˈaɾles dˌiθjˈens.\nˈesta ɡɾˌaβaθjˈon de lˌiβɾˈiβoks ˈes de domˈinjo pˈuβliko.\nsi dˈeβo o nˈo sˈer el ˈeɾoe de mi pɾˈopja istˈoɾja, o si ˈeste kˌometˈiðo seɾˈa dˌesempeɲˈaðo poɾ ˈotɾa peɾsˈona ke nˈo ʝˈo,\nˈeso ˈes pɾeθˈisamˈente lo ke el lektˈoɾ beɾˈa en las siɣjˈɛntes pˈaxinas.\npˌaɾa pɾˌoθeðˈeɾ kon ˈoɾðen diɾˈe ke naθˈi, seɣˈun me ˈan dˈitʃo i lo kɾˈeo, ˈun bjˈeɾnes a las dˈoθe de la nˈotʃe.\nnotˈaɾon ke al mˈismo tjˈempo ke dˈaβa el ɾɾelˈox su pɾimˈeɾa kˌampanˈaða, lanθˈaβa ʝˈo sˌimultˈaneamˈente mi pɾimˈeɾ kexˈiðo.\ntenjˈɛndo en kˌonsiðˌeɾaθjˈon el dˈia i ˈoɾa de mi nˌaθimjˈɛnto, la ˌemfeɾmˈeɾa de la paɾˈiða i bˈaɾjas komˈaðɾes de la bˌeθindˈad,\na kjˌenes aβˈia ˌinspiɾˈaðo ˈun bˈiβo ˌinteɾˈes alɣˈunos mˈeses ˈantes de tɾaβˈaɾ kˌonoθimjˈɛnto kon ˈeʎas, dˌeklaɾˈaɾon dˈos kˈosas.\nla pɾimˈeɾa, ke estˈaβa pɾˌeðestinˈaðo a sˈer dˌesɣɾaθjˈaðo, i la seɣˈunda, ke ɡˌoθaɾˈia el pɾˌiβilˈexjo de bˈeɾ espˈektɾos i espˈiɾitus,\nkˈaɾɣa ˌineβitˈaβle de tˈoðas las ˌimfoɾtunˈaðas kɾiatˈuɾas de ˈambos sˈeksos ke nˈaθen en bjˈeɾnes dˌesðe las dˈoθe de la nˈotʃe ˌasta el ˌamaneθˈeɾ.\nɾɾespˈekto al pɾimˈeɾ pˈunto nˈo me ˌeksplikaɾˈe akˈi, pwˈes mi istˈoɾja dˌemostɾaɾˈa sˌufiθjˈɛntemˈente si la pɾˌeðikθjˈon fwˈe o nˈo beɾˈiðika.\nen kwˌanto al seɣˈundo, bˌastˈeme deθˈiɾ ke, a mˈenos de aβˈeɾ bˈisto espˈektɾos i espˈiɾitus kwˌando estˈaβa en la kˈuna,\nsˈiɣo aˈun ˌaɣwaɾðˈandolos.\nnˈo se kɾˈea ke me kˌondwˈelo poɾ la pɾˌiβaθjˈon de ˈesta pˈaɾte de mi eɾˈɛnθja, i si ˈalɣjen,\npoɾ kˌaswaliðˈad, ˌembiðjaɾˈe mi pwˈesto, se lo θˈeðo kon ˈalma i bˈiða.\nnaθˈi de pjˈes, kˌomo deθˈiɾse swˈele, i la θjuðˈad ke me djˈo el sˈer fwˈe blundeɾstoun en el kondˈaðo de sˌuffolˈu o poɾ aʎˈi θˈeɾka,\nfwˈi ˈun ˈixo pˈostumo, pwˈes aβɾˈi los ˈoxos al dˈia a los sˈeɪs mˈeses de aβˈeɾ θeɾɾˈaðo mi pˈaðɾe los sˈujjos pˌaɾa sjˈempɾe.\nxamˈas ˌolβiðaɾˈe la ˌindeskɾipːtˈiβle lˈastima ke se ˌapoðeɾˈo de mˈi al fˌiɣuɾˈaɾme ke mi pˈaðɾe se beˈia aʎˈi ˌaβandonˈaðo,\nsˈolo, en mˈeðjo de las tinjˈeβlas de la nˈotʃe, mjˌentɾas ke nwˌestɾa biβjˈɛnda, bjˈen templˈaða i ʎˈena de lˈuθ,\nle θeɾɾˈaβa kɾuˈelmˈente sus pwˈeɾtas.\nla peɾsˈona mˈas ˌimpoɾtˈante de nwˌestɾa famˈilja ˈeɾa ˈuna tˈia de mi pˈaðɾe, ke dˌesempˌeɲaɾˈa ˈun ˌimpoɾtˈante papˈel en mi ɾɾelˈato.\nmˈiss tɾotwˈooð o mˈiss betse, kˌomo la ʎamˈaβa mi pˈoβɾe mˈaðɾe, kˈaða bˈeθ ke loɣɾˈaβa dˌominˈaɾ el teɾɾˈoɾ ke le ˌinspiɾˈaβa el aβlˈaɾ de sˌemexˈante peɾsˈona,\nkˈosa ɾɾˈaɾa ˌentɾe paɾˈentesis, mˈiss betse se aβˈia kasˈaðo kon ˈun ˈombɾe mˈas xˈoβen ke ˈeʎa,\nsuxˈeto mˈujj ɡwˈapo, ˌaʊnke nˈo mˈujj bwˈeno, pwˈes seɣˈun el ɾɾumˈoɾ pˈuβliko, el maɾˈiðo θuɾɾˈo mˈas de ˈuna bˈeθ a su muxˈeɾ,\namˈen de ke θjˈeɾto dˈia, a pɾopˈosito de ˈuna kwestjˈon de suβsˈiðjos, tɾatˈo de ɾɾˌespondˈeɾ a la ˌoposiθjˈon de su kˈaɾa a mitˈad tiɾˈandola poɾ la bentˈana de ˈun pˈiso seɣˈundo.\nsˌemexˈantes pɾuˈeβas de ˌinkompˌatiβˌiliðˈað de kaɾˈakteɾ aβˈian ˌoβliɣˈaðo a mˈiss betse a dˌesembˌaɾaθˈaɾse de ˈel poɾ mˈeðjo de dinˈeɾo i ˈambos espˈosos se sˌepaɾˈaɾon ˌamiɣˈaβlemˈente.\nel tiɾˈano maɾtʃˈo kon su kˌapitˈal a la ˈindja, dˌonde seɣˈun ˈuna tɾˌaðiθjˈon de famˈilja, le aβˈian bˈisto ˈuna bˈeθ montˈaðo en ˈun ˌelefˈante i en kˌompaɲˈia de ˈun ɡɾˈan mˈono.\nnˈo aβˈia poðˈiðo ˌaβeɾiɣwˈaɾse si ˈeste ˈeɾa ˈuna makˈaka o ˈun ˌaβeˈun, pɾinθˈesa del moɣˈol, kˌonoθˈiða tambjˈen kon el nˈombɾe de ˈuna baβˈu,\nˌaʊnke ʝˈo me inklˈino poɾ ˈesto ˈultimo.\nsˈea de ˈeʎo lo ke kjˈeɾa, el kˈaso ˈes ke al kˈaβo de djˈeθ ˈaɲos ʎeɣˈo a ˌiŋɡlatˈeɾɾa la notˈiθja de su fˌaʎeθimjˈɛnto,\nsin ke nˈaðje supjˈeɾa kˈomo, pwˈes asˈi ke se sˌepaɾˈaɾon, ˈeʎa tomˈo su ˌapeʎˈiðo de soltˈeɾa,\nkompɾˈo ˈuna kˈasa pekˈeɲa en ˈuna alðˈea a oɾˈiʎas del mˈaɾ, dˌonde se ˌinstalˈo en kˌompaɲˈia de ˈuna kɾiˈaða,\nkˌomo ˈuna bˌeɾðaðˈeɾa ɾɾeklˈusa.\nmi pˈaðɾe aβˈia sˈiðo su soβɾˈino pɾˌeðilˈekto, seɣˈun tˈɛŋɡo ˌentendˈiðo, pˌeɾo ˈeʎa se djˈo poɾ sˈumamˈente ˌofendˈiða a pɾopˈosito de su mˌatɾimˈonjo bˌaxo pɾetˈeksto de ke mi mˈaðɾe nˈo ˈeɾa sˈino ˈuna muɲˈeka de θˈeɾa.\nˌaʊnke nˈo aβˈia bˈisto nˈunka a mi mˈaðɾe, saβˈia ke sˈolo kontˈaβa bˈeɪnte ˈaɲos.\nmi pˈaðɾe i mis betse nˈo bolβjˈeɾon a bˈeɾse.\nˈel, al kasˈaɾse kon mi mˈaðɾe, tenˈia dˈoβles ˈaɲos ke ˈeʎa, i kˌomo su salˈud ˈeɾa dˌelikˈaða,\nmuɾjˈo al kˈaβo de ˈun ˈaɲo, o sˈea, kˌomo ʎˈeβo dˈitʃo, sˈeɪs mˈeses ˈantes de mi benˈiða al mˈundo.\nˈe akˈi el estˈaðo de la sˌitwaθjˈon en la tˈaɾðe de akˈel dˈia del mˈes de mˈaɾθo,\nke me pˌeɾmitiɾˈe kˌalifikˈaɾ de mˌemoɾˈaβle bjˈeɾnes.\naʎˈa bˈase mi mˈaðɾe, sentˈaða θˈeɾka del fwˈeɣo, emfˈeɾma, tɾˈiste, pensˈando en el pˈoβɾe wˈeɾfano ke ˈiβa a benˈiɾ al mˈundo,\nkwˌando, alθˈando la bˈista, despwˈes de aβˈeɾ ˌeŋxuɣˈaðo alɣˈunas lˈaɣɾimas, ˌapeɾθiβjˈo a tɾaβˈes de la bentˈana ˈuna muxˈeɾ dˌeskonoθˈiða ke benˈia poɾ el xaɾðˈin.\nmi mˈaðɾe tˈuβo el pɾˌesentimjˈɛnto de ke ˈeɾa mis betse.\naβˈia en su tˈaʎe, en su mˈoðo de andˈaɾ, en tˈoðo o en fˈin, tˈal ɾɾˌixiðˈeθ ke a bjˈen seɣˈuɾo nˈo poðˈia sˈer ˈotɾa mˈas ke ˈeʎa.\nal ˌaθeɾkˈaɾse a la kˈasa, djˈo ˈuna nwˈeβa pɾuˈeβa de su ˌiðentiðˈað.\nmi pˈaðɾe aβˈia ɾɾˌepetˈiðo mˈas de ˈuna bˈeθ ke la tˈal seɲˈoɾa nˈo se kˌonduθˈia nˈunka kˌomo los demˈas.\nen bˈeθ de ʎamˈaɾ, se ˌaθeɾkˈo en dˌeɾetʃˈuɾa a la bentˈana poɾ dˌonde la aβˈia bˈisto mi mˈaðɾe i peɣˈo su ɾɾˈostɾo a los kɾistˈales.\nˈesta bisˈita pɾoðˈuxo tˈal ˌimpɾesjˈon ke sjˈempɾe ˈe tenˈiðo el kˌombenθimjˈɛnto ke si naθˈi en ˈun bjˈeɾnes se lo dˈeβo a mis betse.\nmi mˈaðɾe, ʎˈena de espˈanto, se lˌeβantˈo de su sˈiʎa i se ɾɾˌetiɾˈo a ˈun ɾɾinkˈon,\nmjˌentɾas ke mis betse ˌeskuðɾiɲˈaβa kon ˈoxos ˌinkisitoɾjˈales tˈoða la ˌaβitaθjˈon.\nnˈo taɾðˈo en dˌistiŋɡˈiɾ a su soβɾˈina i le ˈiθo ˈun xˈesto pˌaɾa ke ˌakuðjˈese a aβɾˈiɾle la pwˈeɾta,\ni kˌomo el tˈal xˈesto ˈeɾa el de ˈuna peɾsˈona ˌakostumbɾˈaða a aθˈeɾse ˌoβeðeθˈeɾ, mi mˈaðɾe ˌoβeðeθjˈo.\n—supˈoŋɡo ke sˈoɪs mi tɾˈes daβˈid kˌoppeɾfjˈelð —dˈixo mis betse—\nsu supˈoŋɡo sˌiɡnifikˈaβa ke nˈo aβˈia matˈeɾja a ˌekiβˌokaθjˈon al bˈeɾ la bestˈiða de lˈuto i ˌaβokˈaða a sˈer mˈaðɾe.\n—sˈi —ɾɾˌespondjˈo mi mˈaðɾe tˈimiðamˈente—\n—sˈoɪ mˈiss tɾoˌutwˈooð —dˈixo la ɾɾeθjˈen ʎeɣˈaða—i espˈeɾo ke ˈantes de aˈoɾa aβɾˈeis oˈiðo aβlˈaɾ de mˈi.\n—ˈe tenˈiðo ˈese ɡˈusto—ɾɾˌespondjˈo mi mˈaðɾe—\npwˈes bjˈen, sˈoɪ ʝˈo mˈisma en peɾsˈona.\nmi mˈaðɾe baxˈo la kaβˈeθa, ɾɾoɣˈando a mis betse ke entɾˈase.\nsˌentˈaɾonse xˈunto a la tʃˌimenˈea i mi mˈaðɾe se etʃˈo a ʎoɾˈaɾ.\n—ta, ta, ta——dˈixo mis betse kon ˌimpaθjˈɛnθja—\n—mi mˈaðɾe nˈo pˈuðo kˌontenˈeɾ sus lˈaɣɾimas sˈino al kˈaβo de alɣˈunos minˈutos.\n—kitˈaos el sombɾˈeɾo, ˈixa mˈia, pˌaɾa ke pwˈeða bˈeɾos—ˌaɲaðjˈo la bjˈexa.\nmi mˈaðɾe la tenˈia dˌemasjˈaðo mjˈeðo pˌaɾa neɣˈaɾse.\nasˈi ˈes ke se dˌespoxˈo de su sombɾˈeɾo, ˌaʊnke kon tˈal ˌaxitaθjˈon, ke sus kaβˈeʎos, ke ˈeɾan sˈumamˈente eɾmˈosos,\n—ˈa, djˈos de bondˈad, sˈoɪs ˈuna tʃikˈiʎa i nˈaða mˈas.\nsin dˈuða ke mi mˈaðɾe tenˈia el ˈaɪɾe sˈumamˈente ˌaliɲˈaðo, pˌeɾo la bwˈena seɲˈoɾa ˌaθepːtˈo la ˌeksklamaθjˈon kˌomo ˈun ɾɾepɾˈotʃe mˌeɾeθˈiðo,\ni ɾɾˌespondjˈo ke, en efˈekto, temˈia tenˈeɾ pˈoka ˌekspeɾjˈɛnθja kˌomo bjˈuða i kˌomo mˈaðɾe.\nmˈiss betse pˌaɾeθjˈo ˌamansˈaɾse, i ˌenseɣˈiða, pasˈando bɾˈuskamˈente a ˈotɾa ˌinteɾpˌelaθjˈon, ˌeksklamˈo.\n—¿poɾ kˈe se ʎˈama ˈesta kˈasa ɾɾoˌojˈeɾo?\n—fwˈe el nˈombɾe ke le djˈo mɾ.\nkˌoppeɾfjˈelð kwˌando kompɾˈo la kˈasa—ɾɾˌeplikˈo mi mˈaðɾe.\nkɾejjˈo ke aβˈia en los ˈaɾβoles mˈutʃas kˌoɾnˈexas.\nen akˈel momˈɛnto, ˈuna ɾɾˈafaɣa de bjˈɛnto sˌakuðjˈo ˌasta tˈal pˈunto los ˈolmos del ekstɾˈemo del xaɾðˈin ke mi mˈaðɾe i mˈiss betse dˌiɾixjˈeɾon sus miɾˈaðas a akˈel pˈunto.\nlos ˈaɾβoles se ˌinklinˈaɾon ˈunos sˌoβɾe ˈotɾos, ˌasemexˈandose a ˈunos xiɣˈantes ke se kˌomfjaɾˈian ˈun sekɾˈeto.\nˌenseɣˈiða, de ɾɾepˈɛnte, kˌomo si se uβjˈese ˌentuɾβˈaðo kon sus oɾɾˈiβles komfjˈanθas, ˌaxitˈaɾon kˌombulsiβˈamente sus fˌoɾmiðˈaβles bɾˈaθos,\nˌaɾɾoxˈando a lo lˈexos los antˈiɣwos nˈiðos de kˌoɾnˈexas pˌaɾeθˈiðos a los ɾɾˈestos de ˈun naʊfɾˈaxjo ke aθˈota la tˌempestˈad.\n—¿dˈonde estˈan las kˌoɾnˈexas?\n—pɾˌeɣuntˈo mˈiss betse.\n—las mi mˈaðɾe pensˈaβa en akˈel momˈɛnto en ˈotɾa kˈosa.\n—¿kˈe se ˈan ˈetʃo las kˌoɾnˈexas?\n—dˌesðe ke estˈamos akˈi nˈo las ˈemos bˈisto, ɾɾˌespondjˈo mi mˈaðɾe.\n—kɾeˈiamos —mɾ.\nkˌoppeɾfjˈelð kɾeˈia ke ˈuna nˌumeɾˈosa famˈilja de kˌoɾnˈexas poβlˈaβa ˈestos ˈaɾβoles, pˌeɾo los nˈiðos ˈeɾan antˈiɣwos i aθˈia mˈutʃo tjˈempo ke los pˈaxaɾos los aβˈian ˌaβandonˈaðo.\nˈese detˈaʎe pˈinta ˌadmiɾˈaβlemˈente a daβˈid kˌoppeɾfjˈelð de la kaβˈeθa a los pjˈes.\nʎamˈaɾ a ˈuna kˈasa ɾɾˈukeɾˈi, kwˌando en ˈeʎa nˈo eksˈiste nˈi ˈuna kˌoɾnˈexa, sˌuponˈeɾ ke ˈaɪ pˈaxaɾos pˌoɾke eksˈisten nˈiðos.\ni si aβˈeis benˈiðo pˌaɾa aβlˈaɾme mˈal de ˈel —mi pˈoβɾe mˈaðɾe, a lo ke supˈoŋɡo,\ntˈuβo poɾ ˈun momˈɛnto la iðˈea de ponˈeɾ kˈoto a las ˌimpeɾtinˈɛnθjas de mi tˈia, ke nˈo ˈeɾa muxˈeɾ ke se dexˈaβa dˌominˈaɾ tˈan fˈaθilmˈente.\npˌeɾo aˈun nˈo aβˈia ˌakaβˈaðo de ˌaɾtikulˈaɾ su pɾimˈeɾa fɾˈase kwˌando el esfwˈeɾθo ˌaβasaʎˈando su balˈoɾ le pɾoðˈuxo ˈuna kɾˈisis neɾβjˈosa.\n—¿kˈomo se ʎˈama bwˌestɾa kɾiˈaða?\n—pɾˌeɣuntˈo mi tˈia tiɾˈando al mˈismo tjˈempo del koɾðˈon de la kˌampanˈiʎa.\n—pˌeɣotj, tˌaɾtamˌuðeˈo mi mˈaðɾe.\n—pˌeɣotj, dixˈisteɪs.\nbˈajja ˈun nˈombɾe pˌaɾa ˈuna peɾsˈona kɾistjˈana.\n—ˈes su ˌapeʎˈiðo, —ɾɾˌeplikˈo mi mˈaðɾe.\nmi maɾˈiðo la ʎamˈaβa asˈi pˌoɾke su nˈombɾe de pˈila ˈeɾa lo mˈismo ke el mˈio.\nla kɾiˈaða ˌapaɾeθjˈo i la tˈia le dˈixo.\n—pˌeɣotj, bwˌestɾa ˈama estˈa ˈalɣo ˌindispwˈesta.\naθˈeð ˈuna tˈaθa de tˈe sin peɾðˈeɾ el tjˈempo miɾˈando las mˌusaɾˈaɲas.\naβjˈɛndo dˈaðo ˈesta ˈoɾðen, kˌomo si en la kˈasa se uβjˈese ɾɾˌekonoθˈiðo sjˈempɾe su ˌaʊtoɾiðˈað sˌoβeɾˈana,\ni dexˈando a pˌeɣotj ke se fwˈese a kumplˈiɾ lo mandˈaðo, mˈiss betse bolβjˈo a ˌokupˈaɾ su pwˈesto al lˈaðo del alˈumbɾe i kɾuθˈo ˈambas mˈanos sˌoβɾe ˈuna de sus ɾɾoðˈiʎas.\n—nˈo dˈuðo —dˈixo la bjˈexa, kˌomo si pɾˌosiɣjˈese ˈuna kˌombeɾsaθjˈon ˌinteɾɾumpˈiða.\n—nˈo dˈuðo ke tendɾˈeis ˈuna ˈixa.\n—pwˈes bjˈen, a paɾtˈiɾ del momˈɛnto de su nˌaθimjˈɛnto, ˈesa ˈixa… —kiθˈas ˈeɾa ˈun nˈiɲo.\n—se ˌatɾeβjˈo a ˌinsinwˈaɾ mi mˈaðɾe.\n—os dˈiɣo —ɾɾˌeplikˈo mˈiss betse—ke dˈeβe sˈer ˈuna ˈixa.\n—tɾatˈad de nˈo kˌontɾaðeθˈiɾme.\nasˈi ke, nˈaθka, os dˈiɣo kjˈeɾo pɾoβˈaɾle mi ˌamistˈað.\nseɾˈe su maðɾˈina i la pondɾˈeis poɾ nˈombɾe betse tɾotwˈooð kˌoppeɾfjˈelð.\ni nˈo tjˈene ke aβˈeɾ eŋɡˈaɲos en la bˈiða de ˈesta betse tɾotwˈooð.\nnˈo se bˌuɾlaɾˈan de sus ˌafekθjˈones, nˈo, ˈixa mˈia.\nse la ˌeðukaɾˈa bjˈen i saβɾˈa ke nˈo ˈes pɾeθˈiso dˈaɾ su kˌoɾaθˈon a kjen nˈo lo meɾˈeθe.\nʝˈo mˈisma me ˌenkaɾɣaɾˈe de ˈeʎo, si tˈal.\nmi mˈaðɾe, dˌemasjˈaðo kˌonmoβˈiða pˌaɾa aβˈeɾ poðˈiðo ˌanaliθˈaɾ kon sˌeɣuɾiðˈad tˈoðas las ˌimfleksjˈones de bˈoθ de mi tˈia,\nkɾejjˈo kˌompɾendˈeɾ, sin embˈaɾɣo, ke en akˈeʎa ˌokasjˈon ˌaluðˈia a antˈiɣwos ɾɾekwˈeɾðos pˌeɾsonˈales.\n—¿i daβˈid se poɾtˈo bjˈen kon bˈos?\n—pɾˌeɣuntˈo mˈiss betse despwˈes de ˈuna lixˈeɾa pˈaʊsa.\n—¿biβˈisteɪs en bwˈena ˌintelixˈɛnθja?\n—ˈeɾamos mˈujj felˈiθes, ɾɾˌespondjˈo mi mˈaðɾe.\nmi maɾˈiðo nˈo pˈuðo sˈer mexˈoɾ pˌaɾa konmˈiɣo.\n—ˈa, os mˌimaɾˈia, supˈoŋɡo, dˈixo mˈiss betse.\nsˌoβɾe tˈoðo ˈoɪ ke me ˈaʎo sˈola en el mˈundo, ɾɾˌespondjˈo mi mˈaðɾe ɾɾompjˈɛndo a ʎoɾˈaɾ.\n—bˈajja, nˈo ʎoɾˈeis.\nbjˈen se bˈe ke os ʎeβˈaβaɪs kˌomo ˈunos ˈaŋxeles.\npoɾ ˈeso os ˈe dˌiɾixˈiðo ˈesta pɾeɣˈunta.\n¿ˈeɾaɪs wˈeɾfana, beɾðˈad?\n—¿e ˌinstitutɾˈiθ?\n—ˈeɾa ˌinstitutɾˈiθ en ˈuna kˈasa a dˌonde solˈia ˈiɾ de bisˈita de kwˌando en kwˌando, mɾ.\ntˈuβo la bondˈad de fixˈaɾ su ˌatenθjˈon en mˈi.\nme aβlˈo ˌamistˈosamˈente i me pɾopˈuso kasˈaɾse konmˈiɣo.\n—ˌaθepːtˈe i nos kasˈamos, ɾɾˌespondjˈo mi mˈaðɾe kon ˌiŋxenwiðˈað.\n—ˈa, pˈoβɾe nˈiɲa, ˌaɲaðjˈo mˈiss betse en bˈoθ bˈaxa i miɾˈando al fwˈeɣo kon ˈaɪɾe ˌensimismˈaðo.\n¿kˈe ˈes lo ke saβˈeis?\n—nˈo os kompɾˈɛndo.\nkwiðˈaɾ ˈuna kˈasa, poɾ exˈemplo.\ntˈemo ke nˈo sˈepa lo sˌufiθjˈɛnte, kˌomo ʝˈo kisjˈeɾa, pˌeɾo mɾ.\nfˈalta le aθˈia ˌapɾendˈeɾ pɾimˈeɾo, ˌeksklamˈo mˈiss betse en fˈoɾma de paɾˈentesis.\nkɾˈeo ke uβjˈeɾa ˌapɾoβetʃˈaðo, poɾ el desˈeo ke tenˈia de ˌapɾendˈeɾ i poɾ la paθjˈɛnθja kon ke me ˌinstɾuˈia,\nsi la desɣɾˈaθja de su mwˈeɾte al ʎeɣˈaɾ akˈi, mi mˈaðɾe pɾˌoɾɾumpjˈo de nwˈeβo ˌensoʎˈosos i nˈo pˈuðo kˌontinwˈaɾ.\n—bˈajja, nˈo ʎoɾˈeis, dˈixo mˈiss betse.\nos bˈaɪs a ponˈeɾ mˈala i nˈo aɾˈeis ɡɾˈan bjˈen a mi ˌixˈaða.\nˈeste ˈultimo ˌaɾɣumˈɛnto pˌaɾeθjˈo kalmˈaɾ alɣˈun tˈanto a mi mˈaðɾe.\nɾɾeɪnˈo ˈun momˈɛnto de pˈaʊsa i mi nˈoβle tˈia kˌontinwˈo kon los pjˈes en los moɾˈiʎos de la tʃˌimenˈea.\ndaβˈid, pɾˌosiɣjˈo, aβˈia kompɾˈaðo ˈuna ˌanwaliðˈað, seɣˈun me ˈan ˌaseɣuɾˈaðo.\n—¿kˈe ˈa ˈetʃo poɾ bˈos?\nkˌoppeɾfjˈelð —ɾɾˌespondjˈo la ˌinteɾpelˈaða, aθjˈɛndo ˈun pˌoðeɾˈoso esfwˈeɾθo—\nˈa sˈiðo lo bastˈante bwˈeno pˌaɾa ˌaseɣuɾˈaɾme ˈuna pˈaɾte de dˈitʃa ɾɾˈɛnta.\n—kinjˈɛntas lˈiβɾas ˌesteɾlˈinas.\n—uβjˈeɾa poðˈiðo aθˈeɾ mˈenos, —ˌaɲaðjˈo mˈiss betse.\nal ʎeɣˈaɾ akˈi, ɾɾˌeðoβlˈaɾon los soʎˈoθos de mi mˈaðɾe.\npˌeɣotte, ke entɾˈaβa en akˈel momˈɛnto kon ˈuna tˈaθa de tˈe en ˈuna mˈano i ˈun kˌandelˈeɾo en la ˈotɾa aʎˈo tˈan mˈal a su seɲˈoɾa,\nkˈosa ke uβjˈeɾa notˈaðo fˈaθilmˈente mˈiss betse a estˈaɾ mexˈoɾ ˌalumbɾˈaða a la estˈanθja, ke se ˌapɾesuɾˈo a ʎeβˈaɾla a su kˈama.\nluˈeɣo, ʎamˈando a su soβɾˈino, sˈean pˌeɣotte, ke aθˈia alɣˈunos dˈias se aʎˈaβa ˌeskondˈiðo en la kˈasa sin ke lo supjˈese su mˈaðɾe,\nle dˈixo, ˈið kˌoɾɾiˈɛndo en bˈuska del mˈeðiko i de la ˌemfeɾmˈeɾa.\nˈuno i ˈotɾa ˌasombɾˈaɾonse ˈun pˈoko kwˌando ʎeɣˈaɾon sˌuθesˈiβamˈente, kon alɣˈunos minˈutos de ˌinteɾβˈalo, al aʎˈaɾ ˈuna seɲˈoɾa dˌeskonoθˈiða,\nde ɾɾˈostɾo ˌimponˈɛnte, sentˈaða en fɾˈɛnte del alˈumbɾe, kon ˈun sombɾˈeɾo ke kolɣˈaβa del bɾˈaθo deɾˈetʃo i ˌokupˈaða en ˌintɾoðuθˈiɾse ˌalɣoðˈon en las oɾˈexas.\nkˌomo pˌeɣotte nˈo saβˈia kjˈen ˈeɾa i su mˈaðɾe nˈo deθˈia nˈaða, la dˌeskonoθˈiða se keðˈo en la sˈala sin ke nˈaðje se ˌokupˈase de ˈeʎa.\nel doktˈoɾ, al bˈeɾla en el mˈismo sˈitjo kˈaða bˈeθ ke suβˈia o baxˈaβa del kwˈaɾto de la emfˈeɾma,\nkɾejjˈo ke benˈia poɾ iðˈentiko motˈiβo ke ˈel i la dˌiɾixjˈo ˈuna fɾˈase de kˌoɾtesanˈia.\nˈeɾa el ˈombɾe mˈas tˈimiðo i melˈoso, ˌeskiβˈandose kontˈinwamˈente i ˌaβandonˈando su pwˈesto poɾ temˈoɾ de sˈer ˌimpoɾtˈuno.\nen bˈeθ de andˈaɾ, pwˈeðe deθˈiɾse ke se ˌeskuɾɾˈia sin ɾɾuˈiðo i mˈas lˈɛntamˈente ke el espˈektɾo de amlˈet.\nkon la kaβˈeθa ˌenkoxˈiða ˌentɾe los ˈombɾos, kon la ˌekspɾesjˈon de ˈuna moðˈestja ke peðˈia peɾðˈon,\npoɾ nˈaða de ˈeste mˈundo uβjˈeɾa dˈitʃo ˈuna palˈaβɾa dˈuɾa i dˌesaɣɾaðˈaβle nˈi a ˈun pˈeɾɾo,\npoɾ mˈas ke fwˈese ˈun pˈeɾɾo ɾɾaβjˈoso.\npensˈo ke a mi tˈia le dolˈian los oˈiðos i le pɾˌeɣuntˈo kon ˈun aθˈɛnto sˈumamˈente melˈoso si sufɾˈia de alɣˈuna ˌiɾɾitaθjˈon lokˈal.\n—¿i kˈe djˈaβlo sˌiɡnifˈika ˈeso?\n—ɾɾˌespondjˈo mi tˈia tˈan bɾˈuskamˈente ke el doktˈoɾ siʎˈiβ, kˌomo eɾˈiðo de mutˈismo, fwˈe a sentˈaɾse al lˈaðo del alˈumbɾe.\nen bɾˈeβe fwˈe ʎamˈaðo de nwˈeβo al lˈaðo de mi mˈaðɾe, dˌonde pˌeɾmaneθjˈo alɣˈunos instˈantes.\nsuβjˈo, bolβjˈo a baxˈaɾ i kwˌando se ˌeskuɾɾiˈo poɾ ˈultima bˈeθ en la sˈala kɾejjˈo tenˈeɾ ˈun maɡnˈifiko pɾetˈeksto pˌaɾa ɾɾˌenoβˈaɾ la kˌombeɾsaθjˈon.\n—seɲˈoɾa, tˈɛŋɡo el majjˈoɾ ɡˈusto en dˈaɾos mi ˌenoɾaβwˈena.\n—se pwˈeðe saβˈeɾ poɾ kˈe, —ɾɾˌeplikˈo mi tˈia seβˈeɾamˈente.\nel doktˈoɾ kɾejjˈo aβˈeɾ paɾtˈiðo de lixˈeɾo, ˌolβiðˈando la ˌintɾoðukθjˈon ˌimbaɾjˈaβle de tˈoðos sus diskˈuɾsos.\nˈantes de kˌontinwˈaɾ bolβjˈo a sˌaluðˈaɾ kon majjˈoɾ ɾɾespˈeto si kˈaβe ke la pɾimˈeɾa bˈeθ.\n—seɲˈoɾa, tɾˌankilˈiθˈaos.\nfelˈiθ ʝˈo ke pwˈeðo dˈaɾos la ˌenoɾaβwˈena.\nʝˈa nˈo tenˈeis ke temˈeɾ nˈaða.\nen ˈuna de ˈestas fɾˈases ˌenroʎˈose el doktˈoɾ i mi tˈia kˌontinwˈaβa miɾˈandole ɾɾˌepɾimjˈɛndo kon mˈutʃo tɾaβˈaxo su ˌimpaθjˈɛnθja,\nˌasta ke poɾ fˈin mɾ.\nsiʎˈiβ ˌeksklamˈo pˌaɾa tˌeɾminˈaɾ su diskˈuɾso.\n—felˈiθ ʝˈo ke pwˈeðo deθˈiɾos.\nʝˈa se ˌakaβˈo tˈoðo, komplˈetamˈente tˈoðo.\n—¿i kˈomo estˈa la mˈaðɾe?\n—pɾˌeɣuntˈo mi tˈia kɾuθˈandose de bɾˈaθos i sin ˌaβandonˈaɾ el sombɾˈeɾo.\n—mˈujj bjˈen, seɲˈoɾa, i espˈeɾo ke kˈaða bˈeθ sˌeɣiɾˈa mexˈoɾ.\nbˈa tˈoðo lo bjˈen ke pwˈeðe ˈiɾ ˈuna xˈoβen pɾˌimeɾˈiθa en su sˌitwaθjˈon.\n¿poðˈeis bˈeɾla sin ˌinkombenjˈɛnte a niŋɡˈuno?\n—pɾˌeɣuntˈo mi tˈia kon la mˈisma ˌaspeɾˈeθa.\nel doktˈoɾ siʎˈiβ ˌenkoxjˈo la kaβˈeθa ˌentɾe los ˈombɾos ˈun pˈoko mˈas ke de kostˈumbɾe.\n—la tʃˌikitˈina, la ɾɾeθjˈen naθˈiða, ɾɾepˈito.\n—seɲˈoɾa —ɾɾˌeplikˈo el doktˈoɾ—kɾeˈia ke saβˈiaɪs ke nˈo ˈes ˈuna nˈiɲa, sˈino ˈun nˈiɲo.\nmi tˈia nˈo pɾˌonunθjˈo nˈi ˈuna sˈilaβa, pˌeɾo koxjˈɛndo su sombɾˈeɾo poɾ las θˈintas a manˈeɾa de ˈuna ˈonda,\nˌamenaθˈo kon ˈel la kaβˈeθa del doktˈoɾ.\nse lo ˌenkasketˈo a tɾaβˈes en la sˈujja, saljˈo i nˈo bolβjˈo mˈas.\ndˌesapˌaɾeθjˈo kˌomo nˈaða ˌenoxˈaða, o kˌomo ˈuno de ˈesos espˈiɾitus ke estˈaβa pɾˌeðestinˈaðo a bˈeɾ, seɣˈun el ɾɾumˈoɾ pˌopulˈaɾ.\nsann pˌeɣotj pɾˌetendˈia aβˈeɾse ˌenkontɾˈaðo kon ˈeʎa a la pwˈeɾta de la kˈasa sin poðˈeɾ kˌompɾendˈeɾ klˈaɾamˈente lo ke le pɾˌeɣuntˈaɾa mˈiss betse,\nke le ˌaplikˈo ˈun pˈaɾ de pˌeskoθˈones pˌaɾa ˌaɣuθˈaɾ su ˌintelixˈɛnθja.\nla tˈia del mutʃˈatʃo ˌafiɾmˈo a la maɲˈana siɣjˈɛnte ke sann tenˈia los kaɾɾˈiʎos kˌomo ˈuna ˌamapˈola a kˌonsekwˈɛnθja de la ˌinteɾɾˌoɣaθjˈon de la bwˈena seɲˈoɾa.\nmi bwˈena tˈia nˈo bolβjˈo, nˈo tˈal.\nʝˈo me ʎˈaβa en mi kˈuna i mi mˈaðɾe en su kˈama.\nmˈiss betse tɾotwˈooð kˌoppeɾfjˈelð, la sˌoβɾinˈita ke mi tˈia aβˈia ˌespeɾˈaðo ˌasta las dˈoθe de la nˈotʃe,\npˌeɾmaneθjˈo en el lˈimbo, en ˈesa fˌoɾmiðˈaβle ɾɾexjˈon de dˌonde ʝˈo ʎeɣˈaβa i de dˌonde pɾˌoβenˈian tˈoðos los bjaxˈeɾos de la bˈiða.\nla lˈuθ del dˈia pɾˌojjektˈo sus ɾɾˈajjos en la mansjˈon de la nˈaða, i a sus ɾɾeflˈexos mi sˈer dexˈo la inˈeɾθja i bˈino a tomˈaɾ pwˈesto ˌentɾe los moɾtˈales.\nkapˈitulo dˈos de daβˈid kˌoppeɾfjˈelð o el soβɾˈino de metˈia de tʃˈaɾles dˌiθjˈens.\nˈesta ɡɾˌaβaθjˈon de lˌiβɾˈiβoks ˈes de domˈinjo pˈuβliko.\nkapˈitulo dˈos.\nmi mˈaðɾe i pˌeɣotte sˈon pˌaɾa mˈi los dˈos pɾimˈeɾos sˈeɾes ke ɾɾekwˈeɾðan mi memˈoɾja en ˈeste kwˈaðɾo ɾɾˌetɾospektˈiβo.\nmi mˈaðɾe kon sus eɾmˈosos kaβˈeʎos i su esβˈelto tˈaʎe.\npˌeɣotte ke nˈo tenˈia tˈaʎe de niŋɡˈuna klˈase, pˌeɾo ke pˌoseˈia ˈunos ɡɾˈandes ˈoxos nˈeɣɾos, ˈunos moflˈetes mˈujj kˌoloɾˈaðos i ˈunos bɾˈaθos mˈas kˌoloɾˈaðos aˈun.\na bˈeθes me ekstɾˈaɲa kˈomo los pˈaxaɾos nˈo akˈuðen a pˌikoteˈaɾlos kon pɾˌefeɾˈɛnθja a las manθˈanas.\nse me fiɣˈuɾa estˈaɾ bjˈɛndo mˈujj θˈeɾka de mˈi akˈeʎas dˈos kɾiatˈuɾas, bjˈen ˌaɣatʃˈandose pˌaɾa ke puðjˈeɾa sˌolˈito etʃˈaɾme en sus bɾˈaθos o ponjˈendose de ɾɾoðˈiʎas mjˌentɾas ke ʝˈo ˈiβa de ˈuna a ˈotɾa.\naˈun kɾˈeo sentˈiɾ la ˌimpɾesjˈon de la mˈano ke me ˌalaɾɣˈaβa pˌeɣotte, akˈeʎa mˈano ke la kostˈuɾa aβˈia bwˈelto mˈas ˈaspeɾa ke ˈuna lˈima.\nkiθˈas sˈea ˈun kapɾˈitʃo de mi ˌimaxˌinaθjˈon al pensˈaɾ ke nwˌestɾa memˈoɾja pwˈeðe ˈiɾ mˈas aʎˈa de lo ke se kɾˈee xˌeneɾˈalmˈente en lo pasˈaðo,\nasˈi kˌomo tambjˈen pjˈɛnso ke mˈutʃos nˈiɲos estˈan dotˈaðos de ˈuna fˌakultˈad de ˌoβseɾβaθjˈon ˈes mˈas,\nnˈo se dˈeβe deθˈiɾ ke la majjˈoɾ pˈaɾte de los ˈombɾes ke sˈon notˈaβles ɾɾespˈekto a ˈeste pˌaɾtikulˈaɾ ˈan ˌadkiɾˈiðo ˈeste dˈon.\nˈantes, poɾ el kontɾˈaɾjo, ˌestaɾˈian mˈas bjˈen dispwˈestos a peɾðˈeɾlo, kon tˈanta mˈas ɾɾaθˈon kwˌanto ke ˈestos mˈismos ˈombɾes konsˈeɾβan θjˈeɾta lˌuθiðˈeθ de iðˈeas i θjˈeɾta pɾˌeðispˌosiθjˈon a sˈer felˈiθes,\nke ˈes ˈotɾa de las eɾˈɛnθjas de su imfˈanθja.\nen tˈoðo kˈaso, al xuθɣˈaɾ poɾ mˈi a los demˈas, lo ˈaɣo poɾ aβˈeɾ sˈiðo kwˌando nˈiɲo sˈumamˈente ˌoβseɾβaðˈoɾ,\ni ˈoɪ ke sˈoɪ ˈombɾe, ɾɾekwˈeɾðo peɾfˈektamˈente mi bˈiða de la imfˈanθja.\nbeˈamos de kˈe mˈas me akwˈeɾðo.\nde mi kˈasa kon tˈoðos sus ˌeskondˈites.\nen el pˈiso bˌaxo se ˈaʎa la koθˈina kˈujja pwˈeɾta dˈa ˈun pˈatjo.\nen mˈeðjo de ˈeste pˈatjo, ˈun pˌalomˈaɾ sin palˈomas.\nen ˈun ɾɾinkˈon la kasˈeta del pˈeɾɾo, poɾ supwˈesto en ˌinkilˈino.\nˌaðemˈas, ˈuna poɾθjˈon de ˈaβes de tamˈaɲo ɾɾˌespetˈaβle, ʝˈɛndo i binjˈɛndo kon ˈaɪɾe fˌosko i ˌamenˌaθaðˈoɾ.\nsˌoβɾe tˈoðo ˈun ɡˈaʎo, suβˈiðo en ˈun maðˈeɾo, ke pˌaɾeθˈia fixˈaɾ tˈoða su ˌatenθjˈon en mˈi kˈaða bˈeθ ke miɾˈaβa a tɾaβˈes de la bentˈana,\nkˈosa ke aˈun me ˈaθe temblˈaɾ, pwˈes el tˈal ɡˈaʎo nˈo ˈeɾa nˈaða bwˈeno.\nˈunos kwˌantos pˈaβos ke kˌaminˈaβan kon su ˈaɪɾe dˌeɾɾeŋɡˈaðo i me pˌeɾseɣˈian ˌalaɾɣˈando el peskwˈeθo.\npoɾ de nˈotʃe swˈeɲo kon ˈeʎos, kˌomo el dˌomaðˈoɾ de fjˈeɾas swˈeɲa kon sus leˈones.\nˈe akˈi ˈun pasˈiʎo tˈan lˈaɾɣo ke a mˈi se me fiɣˈuɾa ke nˈo tjˈene fˈin,\ni ke bˈa de la koθˈina a la pwˈeɾta de la kˈaʎe.\nen ˈeste kˌoɾɾeðˈoɾ ˈaɪ ˈun kwˈaɾto oskˈuɾo ke sˈiɾβe pˌaɾa ɡwaɾðˈaɾ tɾˈastos bjˈexos.\nasˈi ke ˈes de nˈotʃe, pˈaso mˈujj depɾˈisa poɾ delˈante del tˈal kwˈaɾto, pwˈes nˈo se a θjˈɛnθja θjˈeɾta lo ke ˈaɪ ˌentɾe los bjˈexos tonˈeles i las kˈaxas de tˈe,\na pesˈaɾ ke eksˈala ˈun olˈoɾ de xaβˈon, pimjˈɛnta, bˈelas de sˈeβo i kafˈe.\ntambjˈen ˈaɪ dˈos sˈalas, ˈuna de ˈeʎas pekˈeɲa, dˌonde solˈemos pasˈaɾ las belˈaðas mi mˈaðɾe, pˌeɣotj i ʝˈo.\npwˈes bwˈeno ˈes deθˈiɾ ke pˌeɣotj fˈoɾma nwˌestɾa teɾtˈulja, asˈi ke ˈa ˌakaβˈaðo sus kˌeaθˈeɾes i se mˈaɾtʃa tˈoðo el mˈundo.\nˌenseɣˈiða bjˈene la sˈala pɾˌinθipˈal, en la kwˈal ɾɾˌeθiβˈimos los domˈiŋɡos.\nˌaʊnke ˈesta ˌaβitaθjˈon ˈes majjˈoɾ ke la ˈotɾa, nˈo ˈes tˈan kˈomoða, i pˌaɾa mˈi ɾɾˈeɪna en ˈeʎa ˈuna espˈeθje de lˈuɣuβɾe tɾistˈeθa,\npwˈes pˌeɣotj me ˈa kontˈaðo ke kwˌando los fˌuneɾˈales de mi pˈaðɾe se bjˈo ʎˈena kon tˈanta xˈɛnte kˌomo bˈino,\nbestˈiða de lˈuto pˌaɾa ˌakompaɲˈaɾ su ˌataˈuð.\ntambjˈen en ˈesta sˈala, θjˈeɾto domˈiŋɡo poɾ la nˈotʃe, mi mˈaðɾe nos leˈia a pˌeɣotj i a mˈi la ɾɾˌesuɾɾekθjˈon del ˈaxaɾo ˌentɾe los mwˈeɾtos.\nnˈo konˈoθko nˈaða tˈan bˈeɾðe kˌomo el θˈesped de ˈeste θˌementˈeɾjo, nˈi ˌaɾβolˈeðas mˈas sombɾˈias ke las sˈujjas,\nnˈi kˈalma iɣwˈal a la de las lˈosas de los tˈumulos.\naʎˈi se ˌapaθjˈɛnta el ɡanˈaðo, i kwˌando poɾ la mˌaɲanˈita me pˈoŋɡo de ɾɾoðˈiʎas en mi kˈama pˌaɾa bˈeɾ los koɾðˈeɾos,\ndistˈiŋɡo el pɾimˈeɾ ɾɾˈajjo de sˈol ke pɾojjˈekta su ɾɾeflˈexo en la esfˈeɾa solˈaɾ i me pɾeɣˈunto ¿ˌestaɾˈa alˈeɣɾe la esfˈeɾa kwˌando mˈaɾka aˈun las ˈoɾas?\nmˈas aʎˈa se enkwˈɛntɾa el bˈanko de la iɣlˈesja, ˈun bˈanko kon ˈun ɾɾespˈalðo ˈalto, kˌolokˈaðo xˈunto a ˈuna de las bentˈanas bˈaxas,\ndˌesðe dˌonde se pwˈeðe bˈeɾ nwˌestɾa kˈasa duɾˈante el seɾβˈiθjo, lo kwˈal eksplˈika la kostˈumbɾe de pˌeɣotj ke miɾˈaβa fɾekwˈɛntemˈente ˌaθja akˈel lˈaðo pˌaɾa ˌaθeɾkˈaɾse de ke nˈo ˈaɪ laðɾˈones nˈi fwˈeɣo.\npˌeɾo aˈun kwˌando ˈeʎa mˈiɾa a ˈuno i ˈotɾo lˈaðo, se emfˈaða si ʝˈo bwˈelβo la kaβˈeθa i me ˈaθe sˈeɲas pˌaɾa ke nˈo sepˈaɾe la bˈista del minˈistɾo ke ofˈiθja.\nnˈo pwˈeðo miɾˈaɾle kontˈinwamˈente pˌoɾke le konˈoθko bastˈante kon sˌoβɾepeʎˈiθos en ˈeʎa, i de kwˌando en kwˌando me ˈetʃa ˈunas miɾˈaðas,\nmˈiɾo a mi mˈaðɾe ke ˈaθe kˌomo ke nˈo me bˈe, luˈeɣo a ˈun tʃikˈiʎo ke me ˈaθe ˈuna mwˈeka,\nal ˈotɾo lˈaðo del pˈoɾtiko bˈeo ˈun kaɾnˈeɾo ke paɾˈeθe keɾˈeɾ entɾˈaɾ en la iɣlˈesja i me sjˈɛnto dispwˈesto a ɡɾitˈaɾle ke se bˈajja,\npˌeɾo ¿kˈe seɾˈia de mˈi si tˈal iθjˈeɾe?\nˈun pˈoko mˈas lˈexos estˈa el pˈulpito.\naʎˈi sˈi ke poðɾˈia xˌuɣˈaɾse bjˈen.\n¡kˈe ɡˈoθo si ʝˈo me bjˈeɾa en akˈeʎa fˌoɾtalˈeθa i binjˈeɾa ˈuno de mis kˌompaɲˈeɾos a ponˈeɾme sˈitjo!\nle tˌiɾaɾˈia el koxˈin de tˌeɾθjopˈelo del pɾˌeðikaðˈoɾ.\nˌinsensˈiβlemˈente, a fwˈeɾθa de miɾˈaɾ, θjˌeɾɾanse mis ˈoxos i mis oˈiðos nˈo ˈojjen a fwˈeɾθa de aθˈeɾ kˌomo ke eskˈutʃo al minˈistɾo ke kˈanta ˈun sˈalmo kon bˈoθ dˌesafinˈaða de bˌaxo pɾofˈundo.\nme kˈaɪɣo del bˈanko metjˈɛndo ˈun estɾˈepito ˌimfeɾnˈal i peɣˈote me leβˈanta del swˈelo mˈas mwˈeɾto ke bˈiβo.\naˈoɾa bˈeo la fatʃˈaða de nwˌestɾa kˈasa i las bentˈanas ɾɾˌoðeˈaðas de ˈun ˌenrexˈaðo de maðˈeɾa.\ndistˈiŋɡo el pˌaɾteɾ, el θˈesped i los ˈaltos ˈalamos kon sus nˈiðos de kˌoɾnˈexas.\nˌatɾaβjˈeso el pasˈiʎo i la koθˈina.\nme ɾɾeˈuno en la wˈeɾta kon mi mamˈa i mjˌentɾas kˈoxe la fɾˈuta maðˈuɾa de la ˌempaliθˈaða,\nɾɾˈoβo a ˌoɾtaðiʎas alɣˈuna ke ˈotɾa ɡɾosˈeʎa.\nen el imbjˈeɾno xuɣˈamos en la sˈala mˈas pekˈeɲa.\nkwˌando mi mˈaðɾe se kˈansa, se sjˈɛnta en la butˈaka.\nalɣˈunas bˈeθes se diɾˈixe al espˈexo.\nen soɾtˈixa en los dˈeðos los ɾɾˈiθos de su eɾmˈosa kˌaβeʎˈeɾa.\nse axˈusta su esβˈelto tˈaʎe i bjˈen sˈe ke nˈo le emfˈaða el aʎˈaɾse sjˈempɾe bonˈita.\nˌaɲaðiɾˈe a ˈestas pɾimˈeɾas ˌimpɾesjˈones el sˌentimjˈɛnto de ˈun bˌeɾðaðˈeɾo ˌasθendjˈɛnte ke pˌeɣotj ˌexeɾθˈia sˌoβɾe mi mˈaðɾe i sˌoβɾe mˈi.\nla kˌonsultˈaβamos a pɾopˈosito de tˈoðo i ˌasta le tenˈiamos θjˈeɾto mjˈeðo.\nˈun dˈia pˌeɣotj i ʝˈo nos aʎˈaβamos sentˈaðos los dˈos al lˈaðo del alˈumbɾe, pwˈes mi mˈaðɾe aβˈia ˈiðo de bisˈita a kˈasa de ˈuna beθˈina.\nleˈiale ˈun kapˈitulo sˌoβɾe los kˌokoðɾˈilos i ˈun pˈoko poɾ fˈalta del lektˈoɾ i ˈotɾo pˈoko poɾ fˈalta de ˌintelixˈɛnθja.\nestˈoɪ seɣˈuɾo de ke pˌeɣotj nˈo poðˈia deθˈiɾ a pˈunto fˈixo si el kˌokoðɾˈilo ˈeɾa ˈun ˌanimˈal o ˈuna leɣˈumbɾe ˌekstɾaˌoɾðinˈaɾja,\nkwˌando en ˈesto se ˌapoðeɾˈo de mˈi el swˈeɲo, pˌeɾo nˈo keɾˈia ˌakostˈaɾme poɾ nˈaða de ˈeste mˈundo.\ntɾatˈe de ɾɾˌesistˈiɾ al swˈeɲo miɾˈando fˈixamˈente a pˌeɣotj, kˈujjo tˈaʎe tomˈaβa kˈaða bˈeθ a mis ˈoxos majjˈoɾes pɾˌopoɾθjˈones i se me pɾˌesentˈaβa kˌomo ˈun bˌeɾðaðˈeɾo xiɣˈante.\nme fɾotˈe los ˈoxos i apˈenas sˈi poðˈia aβɾˈiɾ los pˈaɾpaðos, nˈo peɾðjˈɛndo de bˈista nˈi mi kɾiˈaða nˈi el kˈaβo de θˈeɾa ke el ˈilo ʎenˈaβa de sˈuɾkos,\nnˈi su θˈinta pˌaɾa meðˈiɾ, nˈi su θˈesta de kostˈuɾa, en kˈujja tˈapa aβˈia dˌiβuxˈaða la kˌateðɾˈal de sˈan pˈaβlo kon su kˈupula ˌenkaɾnˈaða,\nnˈi el deðˈal de kˈoβɾe ke la ɾɾˌesɣwaɾðˈaβa de las pˌikaðˈuɾas de la aɣˈuxa.\npˌeɾo sentˈi ke pˌaɾa nˈo sˌukumbˈiɾ nˌeθesitˈaβa ˈun nwˈeβo esfwˈeɾθo i dˌiɾixˈi bɾˈuskamˈente a pˌeɣotj ˈesta sˌiŋɡulˈaɾ pɾeɣˈunta.\n—¿pˌeɣotj, aβˈeis estˈaðo kasˈaða alɣˈuna bˈeθ?\ndjˈos de mi bˈiða, dˈime kjˈen djˈaβlos te ˈa aβlˈaðo de kˌasamjˈɛnto.\npˌeɣotj se ˌestɾemeθjˈo de tˈal mˈoðo ke ʝˈo me dˌespeɾtˈe del tˈoðo.\ndexˈo de kosˈeɾ i me miɾˈo sin soltˈaɾ la aɣˈuxa de su mˈano.\n—¿aβˈeis estˈaðo kasˈaða alɣˈuna bˈeθ?\n—sˈoɪ ˈuna ɡwˈapa tʃˈika, ¿nˈo ˈes ˈesto?\na deθˈiɾ beɾðˈad, se me fˌiɣuɾˈaβa ke ˈeɾa ɡwˈapa, de ˈuna beʎˈeθa dˌifeɾˈɛnte a la de mi mˈaðɾe,\npˌeɾo en su xˈeneɾo nˈo aβˈia nˈaða ke peðˈiɾ.\nsu ˌenθendˈiðo kˈutis me pˌaɾeθˈia tˈan bɾiʎˈante kˌomo el fˈondo de ˈun tˌaβuɾˈete de tˌeɾθjopˈelo ˌenkaɾnˈaðo en ke mi mˈaðɾe aβˈia boɾðˈaðo ˈunas flˈoɾes.\ntˈal bˈeθ ˈeɾa ˈun pˈoko mˈas swˈaβe el tˈakto, pˌeɾo ˈesta ˈeɾa su ˈunika dˌifeɾˈɛnθja.\n—kon ke sˈoɪ eɾmˈosa, dˈixo pˌeɣotj.\n—ˈo, nˈo, ˈixo mˈio, pˌeɾo ¿kjˈen djˈaβlos te ˈa aβlˈaðo de kˌasamjˈɛntos?\n—nˈo sˈe, ɾɾˌeplikˈe.\ndˈime si se pwˈeðe kasˈaɾ ˈuno kon bˈaɾjas peɾsˈonas a ˈun mˈismo tjˈempo.\n—nˈo tˈal, ɾɾˌespondjˈo pˌeɣotj sin bˌaθilˈaɾ.\npˌeɾo kwˌando se ˈa mwˈeɾto la peɾsˈona kon kjen ˈuno se ˈa kasˈaðo, pwˈeðe el ke sˌoβɾeβˈiβe kasˈaɾse ˈotɾa bˈeθ.\n—se pwˈeðe, si se kjˈeɾe, ɾɾˌeplikˈo la xˈoβen.\nˈeso depˈɛnde de la ˌopinjˈon de kˈaða ˈuno.\n—¿i kwˈal ˈes bwˌestɾa ˌopinjˈon?\nˌaɲaðˈi kon tˈanta majjˈoɾ kˌuɾjosiðˈad kwˌanto ke ˈeʎa me ˌeksaminˈaβa kon ɡɾˈan ˌatenθjˈon.\npˌeɣotj dexˈo de fixˈaɾ sus nˈeɣɾos ˈoxos en los mˈios, pˈusˈose a kosˈeɾ i ˌeksklamˈo despwˈes de tˌituβeˈaɾ ˈun pˈoko.\n—tˈoðo lo ke pwˈeðo deθˈiɾ ˈes ke nˈunka ˈe estˈaðo kasˈaða i ke xamˈas me kˌasaɾˈe.\n—bˈeo ke estˈais de mˈal umˈoɾ, pˌeɣotj.\nle dˈixe i ɡwaɾðˈe silˈɛnθjo, kɾejjˈɛndo en efˈekto ke la aβˈia kˌontɾaɾjˈaðo.\npˌeɾo me ˌeŋɡaɲˈaβa, pˌoɾke duɾˈante alɣˈunos minˈutos tɾatˈo de tɾˌaβaxˈaɾ i nˈo kˌonsiɣjˈɛndˈolo ˌaβɾiˈo de ɾɾepˈɛnte sus bɾˈaθos,\ni me atɾˈaxo a ˈeʎos besˈando ɾɾˌepetˈiðas bˈeθes mi ɾɾiθˈaða kˌaβeʎˈeɾa.\nˌapeɾθiβˈime de la ˌeneɾxˈia de sus kaɾˈiθjas al bˈeɾ ke saltˈaβan dˈos botˈones de su bestˈiðo,\npwˈes kˌomo nˈo aβˈia wˈeko poɾ niŋɡˈun lˈaðo, kwalkjˈeɾ ˌexeɾθˈiθjo le ˌeksponˈia sˌemexˈante ˌinkombenjˈɛnte.\n—bˈamos, ˌeksklamˈo.\nsiɣˈamos la istˈoɾja de los kˌokoðɾˈilos.\nnˈo pˈuðe kˌompɾendˈeɾ poɾ kˈe pˌeɣotj mostɾˈaβa tˈanta tˌuɾβaθjˈon i dˌeseˈaβa bolβˈeɾ a los kˌokoðɾˈilos, seɣˈun ˈeʎa los ʎamˈaβa.\nnˈo oβstˈante, seɣˈimos lejjˈɛndo la istˈoɾja de ˈestos mˈonstɾuos, o mexˈoɾ dˈitʃo, biβˈimos en su kˌompaɲˈia poɾ espˈaθjo de mˈeðja ˈoɾa.\ndexˈamos sus wˈeβos en la aɾˈena pˌaɾa ke el sˈol puðjˈeɾa ˌempoʎˈaɾlos.\nnos bˈimos pˌeɾseɣˈiðos poɾ el pˈaðɾe i la mˈaðɾe, kˈujja kˈoleɾa buɾlˈamos dˈando bwˈeltas, kˈosa ke nˈo poðˈian aθˈeɾ kˌomo nosˈotɾos a kˈaʊsa de la pˌesaðˈeθ de sus mˌoβimjˈɛntos.\nˌenseɣˈiða les pˌeɾseɣˈimos a nwˌestɾa bˈeθ en el ˈaɣwa kon los kˌaθaðˈoɾes indˈixenas.\nles ˌintɾoðuθˈimos a buθˈaðos pˈintʃos en la bˈoka.\nen ˈuna palˈaβɾa, nˈo taɾðˈamos en ˌapɾendˈeɾ de memˈoɾja tˈoða la istˈoɾja de los kˌokoðɾˈilos, al mˈenos ʝˈo,\npwˈes en kwˌanto a pˌeɣotj se me fˌiɣuɾˈaβa ke poɾ momˈɛntos pˌaðeθˈia alɣˈunas dˌistɾakθjˈones i se pikˈaβa los dˈeðos kon la aɣˈuxa.\nˌiβamos a kˌontinwˈaɾ nwˌestɾa lektˈuɾa kwˌando ʎamˈaɾon a la pwˈeɾta.\nla ke ʎeɣˈaβa ˈeɾa mi mˈaðɾe i benˈia ˌakompaɲˈaða de ˈun kˌaβaʎˈeɾo de pˌatiʎas nˈeɣɾas, ke ɾɾˌekonoθˈi poɾ aβˈeɾnos ˌakompaɲˈaðo ʝˈa el domˈiŋɡo ˌanteɾjˈoɾ dˌesðe la iɣlˈesja ˌasta nwˌestɾa kˈasa.\nkwˌando mi mamˈa en el dintˈel de la pwˈeɾta me koxjˈo en sus bɾˈaθos i me besˈo,\nel kˌaβaʎˈeɾo dˈixo ke ʝˈo ˈeɾa mˈas felˈiθ poɾ mi pɾˌiβilˈexjo ke ˈun monˈaɾka o ˈuna kˈosa pˌaɾeθˈiða,\npwˈes dˈeβo kˌomfesˈaɾ ke a mi memˈoɾja bjˈene a ˌajjuðˈaɾ mi ˌekspeɾjˈɛnθja sˌuβsiɣjˈɛnte.\nkˈiso, poɾ su pˈaɾte, ˌakaɾiθjˈaɾme poɾ enθˈima del ˈombɾo de mi mˈaðɾe, pˌeɾo malðˈita la sˌimpatˈia ke sentˈi ˌaθja ˈel i poɾ su ˈaspeɾa bˈoθ.\ntˈuβe θˈelos al notˈaɾ ke su mˈano ɾɾoθˈaβa a mi mˈaðɾe i la sˌepaɾˈe kwˌanto me fwˈe posˈiβle.\n¿kˈomo se entjˈɛnde, daβˈid?\ndˈixo mi mˈaðɾe kon ˈaɪɾe de ɾɾepɾˈotʃe.\nkeɾˈiðo nˈiɲo, ˌeksklamˈo el kˌaβaʎˈeɾo, nˈo pwˈeðo ˌenoxˈaɾme de su θˌelofilˈeal.\nxamˈas aβˈia bˈisto ˈun kaɾmˈin tˈan suβˈiðo en las mexˈiʎas de mi mˈaðɾe.\nɾɾiɲˈo me kˌaɾiɲˈosamˈente i, al mˈismo tjˈempo ke me ˌestɾetʃˈaβa kˈontɾa su kˌoɾaθˈon, djˈo las ɡɾˈaθjas a akˈel seɲˈoɾ poɾ la molˈestja de aβˈeɾla ˌakompaɲˈaðo.\n—ˈes pɾeθˈiso ke nos dˈemos las bwˈenas nˈotʃes, ˈixo mˈio—dˈixo el kˌaβaʎˈeɾo, ke a su bˈeθ koxjˈo la mˈano de mi mˈaðɾe i besˈo el ɡwˈante ke la kuβɾˈia.\n—bwˈenas nˈotʃes—le ɾɾˌespondˈi.\n—bˈamos, seˈamos bwˈenos amˈiɣos—ɾɾˌepitjˈo el kˌaβaʎˈeɾo ɾɾiɲˈando—bˈɛŋɡa la mˈano.\nʝˈo tenˈia mi mˈano deɾˈetʃa ˌentɾe las mˈanos de mi mˈaðɾe, asˈi fwˈe ke la ˌalaɾɣˈe la ˈotɾa.\n—nˈo ˈes ˈesta la bwˈena, daβˈid—ˌoβseɾβˈo el kˌaβaʎˈeɾo sin dexˈaɾ de ɾɾeˈiɾ.\nmi mˈaðɾe kˈiso aθˈeɾme dˈaɾ la mˈano deɾˈetʃa, pˌeɾo, kˌomo me aʎˈaβa bjˈen dˌeθiðˈiðo a nˈo dˈaɾ sˈino la iθkjˈeɾða,\nel kˌaβaʎˈeɾo ˌakaβˈo poɾ ˌestɾetʃˈaɾla koɾðjˈalmˈente.\nˌenseɣˈiða ɾɾˌepitjˈo ke ʝˈo ˈeɾa ˈuna kɾiatˈuɾa ˌeksθelˈɛnte i se ɾɾˌetiɾˈo.\nbˈi ke ɾɾˌeβolβˈia la ˈultima ˌaβenˈiða del xaɾðˈin i ke nos embjˈaβa ˈuna miɾˈaða de dˌespeðˈiða kon sus nˈeɣɾos ˈoxos de mˌalaɣˈeɾo.\nla pwˈeɾta, ˈuna bˈeθ θeɾɾˈaða, peɣˈo tˈik ke nˈo aβˈia aβlˈaðo nˈi ˈuna sˈola palˈaβɾa, sˌuxetˈo el bˈaɾɾo de jˈeɾɾo i los tɾˈes entɾˈamos en el salˈon.\naʎˈi, kˈontɾa su kostˈumbɾe, mi mˈaðɾe, en bˈeθ de sentˈaɾse en su butˈaka, al lˈaðo de la lˈumbɾe,\npˌeɾmaneθjˈo al ˈotɾo ekstɾˈemo de la ˌaβitaθjˈon ˌinstalˈandose en ˈuna sˈiʎa i tˌaɾaɾeˈando.\nmjˌentɾas ke aθˈia ɡˌoɾɣoɾˈitos, ˌempeθˈe a doɾmˈiɾme, pˌeɾo mi swˈeɲo fwˈe bastˈante lixˈeɾo pˌaɾa poðˈeɾ oˈiɾ a pˌeɣotj ke,\nde pjˈe e inmˈoβil en mˈeðjo del salˈon, kon ˈun kˌandelˈeɾo en la mˈano, deθˈia a mi mˈaðɾe.\n—¿os aβˈeis dˌiβeɾtˈiðo ˈesta nˈotʃe, seɲˈoɾa?\n—sˈi, ɡɾˈaθjas, pˌeɣotj, bastˈante.\nme ˌaβentˈuɾo a ˌaɲaðˈiɾ ke aβˈeis pasˈaðo ˈuna swaɣe ke nˈo uβjˈeɾa kˌomplaθˈiðo mˈutʃo a mɾ.\n—ˌeksklamˈo mi mˈaðɾe—me bˌolβeɾˈeis lˈoka.\nnˈo ˈaɪ ˈuna muxˈeɾ en el mˈundo ke se bˈea peˈoɾ tɾatˈaða poɾ su kɾiˈaða ke ʝˈo.\nnˈo θˈeso de pɾˌeɣuntˈaɾme si sˈoɪ ˈuna tʃikˈiʎa o ˈuna muxˈeɾ bjˈuða.\n—nˈaðje iɡnˈoɾa ke aβˈeis sˈiðo kasˈaða, seɲˈoɾa, —ɾɾˌeplikˈo pˌeɣotj—\n—en ˈeste kˈaso, ¿kˈomo os ˌatɾeβˈeis?\no, mexˈoɾ dˈitʃo, ¿kˈomo tenˈeis balˈoɾ pˌaɾa aθˈeɾme tˈan dˌesɣɾaθjˈaða i ˌatoɾmentˈaɾme asˈi kwˌando saβˈeis ke nˈo tˈɛŋɡo nˈi ˈuna sˈola amˈiɣa?\n—ɾɾaθˈon de mˈas pˌaɾa sˈer mˈas pɾˌekaβˈiða, —dˈixo pˌeɣotj—\n—pwˈeðo ˌimpeðˈiɾ, —ˌaɲaðjˈo mi mˈaðɾe—ke sˈean fˈinos i atˈɛntos konmˈiɣo.\nˈes pɾeθˈiso ke me kˈambje, ke me eskˈalðe el ɾɾˈostɾo.\nkwalkjˈeɾa diɾˈia ke nˈo dˌeseˈaβaɪs ˈotɾa kˈosa, —ˌaɲaðjˈo mi mˈaðɾe ɾɾompjˈɛndo a ʎoɾˈaɾ i ʝˈɛndo a sentˈaɾse en la butˈaka pˌaɾa ˌakaɾiθjˈaɾme.\nˈa, mi keɾˈiðo daβˈid, pˈoβɾe ˈixo mˈio, tambjˈen seɾˈeis kapˈaθ de deθˈiɾ ke nˈo kjˈeɾo ˈeste tesˈoɾo kwˌando nˈo ˈaɪ kɾiatˈuɾa en el mˈundo mˈas amˈaða.\nnˈaðje ˈa dˈitʃo tˈal kˈosa, seɲˈoɾa, —ˌeksklamˈo pˌeɣotj, ˌempeθˈando kon moβˈeɾse—\n—lo aβˈeis dˈitʃo, o a lo mˈenos ˈesa ˈa sˈiðo bwˌestɾa ˌintenθjˈon, —pɾˌosiɣjˈo mi mˈaðɾe sin dexˈaɾ de ʎoɾˈaɾ—\npˌeɾo mi ˈixo sˈaβe ke le kjˈeɾo.\ndaβˈid ɾɾespˈonde, —¿sˈoɪ ˈuna mˈala mˈaðɾe?—\nme pɾˌeɣuntˈo al bˈeɾ ke sus kaɾˈiθjas me aβˈian dˌespeɾtˈaðo.\n—ˈaβla, ˈixo mˈio, —sˈoɪ ˈuna mˈaðɾe ˌeɣoˈista i kɾuˈel.\na ˈesto los tɾˈes nos pusˈimos a sˌoʎoθˈaɾ, ʝˈo mˈutʃo mˈas fwˈeɾte ke mi mˈaðɾe i pˌeɣotj,\nˌaʊnke estˈoɪ seɣˈuɾo ke nwˌestɾas lˈaɣɾimas ˈeɾan iɣwˈalmˈente sinθˈeɾas.\nasˈi ke uβˈimos ʎoɾˈaðo lo bastˈante nos fwˈimos a ˌakostˈaɾ.\nnˈo bjˈen me aβˈia doɾmˈiðo kwˌando mis ˌoleˈoθos bolβjˈeɾon a dˌespeɾtˈaɾme, i bˈi a mi mˈaðɾe sentˈaða al lˈaðo de mi kˈama.\nme koxjˈo en sus bɾˈaθos i akˈeʎa bˈeθ me doɾmˈi de bˈeɾas ˌasta la maɲˈana siɣjˈɛnte.\nnˈo pwˈeðo deθˈiɾ si fwˈe el domˈiŋɡo siɣjˈɛnte u ˈotɾo ke bolβˈi a bˈeɾ al kˌaβaʎˈeɾo de las paðˈiʎas nˈeɣɾas.\nnˈo ˌaseɣˈuɾo la ˌeksaktitˈuð de mis fˈetʃas, pˌeɾo el kˈaso ˈes ke tˈoðos los domˈiŋɡos le aʎˈaβamos en la iɣlˈesja i nos ˌakompaɲˈaβa a kˈasa.\nˈuna bˈeθ nos ˈiθo ˈuna bisˈita bˌaxo el pɾetˈeksto de bˈeɾ ˈun xeɾˈanjo ke estˈaβa al balkˈon.\nse me fˌiɣuɾˈo ke nˈo ɾɾˌepaɾˈaβa mˈutʃo en el xeɾˈanjo, pˌeɾo ˈantes de ˈiɾse sˌuplikˈo a mi mˈaðɾe ke le djˈeɾa ˈuna mˌatˈita.\nɾɾˌespondjˈole ke poðˈia koxˈeɾla ˈel mˈismo, a lo kwˈal se neɣˈo, ˌinsistjˈɛndo pˌaɾa ke se la djˈese de su mˈano.\nmi mˈaðɾe ˌakθeðjˈo i el kˌaβaʎˈeɾo dˈixo ke la kˌonseɾβaɾˈia etˈeɾnamˈente, lo kwˈal me ˈiθo sˌospetʃˈaɾ ke nˈo ˈeɾan ɡɾˈandes sus kˌonoθimjˈɛntos,\npwˈesto ke ˌiɡnoɾˈaβa ke la flˈoɾ sˌepaɾˈaða de su tˈaʎo se mˌaɾtʃitaɾˈia al kˈaβo de ˈuno o dˈos dˈias.\npˌeɣotj nˈo pasˈaβa kon tˈanta fɾekwˈɛnθja las nˈotʃes en nwˌestɾa kˌompaɲˈia.\nmi mˈaðɾe la miɾˈaβa kon ɡɾˈan dˌefeɾˈɛnθja, aˈun mˈas ke ˈantes, seɣˈun notˈe, i los tɾˈes kˌontinwˈaβamos sjˈɛndo los mexˈoɾes amˈiɣos del mˈundo.\nsin embˈaɾɣo, ˌeksistˈia θjˈeɾta dˌifeɾˈɛnθja, ˈuna espˈeθje de kˌoɾteðˈad ˌindefinˈiβle.\nalɣˈunas bˈeθes pˌeɣotj pˌaɾeθˈia ke ɾɾˌepɾotʃˈaβa a mi mˈaðɾe el ke se pusjˈese tˈoðos los lˈindos tɾˈaxes ke ʎenˈaβan sus aɾmˈaɾjos o el ke fwˈese de bisˈita kon fɾekwˈɛnθja a kˈasa de la beθˈina,\npˌeɾo tˈoðo ˈesto me lo ˌeksplikˈaβa ʝˈo ˌimpeɾfˈektamˈente.\npˈoko a pˈoko me ˌakostumbɾˈe a bˈeɾ al kˌaβaʎˈeɾo de las pˌatiʎas nˈeɣɾas, sin keɾˈeɾle poɾ ˈeso mˈas,\nsin dexˈaɾ de tenˈeɾ los mˈismos θˈelos, pˌeɾo nˈo me saβˈia dˈaɾ kwˈɛnta de akˈeʎos sˌentimjˈɛntos pˈuɾamˈente ˌinstintˈiβos.\nakˈeʎo sˌoβɾepasˈaβa a mi ɾɾˌaθonamjˈɛnto de nˈiɲo.\nˈuna ˌeɾmosˈisima maɲˈana de otˈoɲo me aʎˈaβa en nwˌestɾo paɾtˈeɾɾe kon mi mˈaðɾe, kwˌando mɾ.\nmuɾston, ke ˈeɾa su nˈombɾe, ʎeɣˈo a kaβˈaʎo.\nsˌaluðˈo a mi mˈaðɾe, dˌixˈole ke se dˌiɾixˈia a lˌoˈustoˈe a bˈeɾ a ˈunos amˈiɣos ke le ˌespeɾˈaβan kon su ʝaɣ,\ni pɾopˈuso ʎeβˈaɾme si akˈel pasˈeo poðˈia sˈer de mi aɣɾˈaðo.\nel ˈaɪɾe ˈeɾa tˈan swˈaβe i el kaβˈaʎo pjafˈaβa tˈan nˈoβlemˈente a la pwˈeɾta del xaɾðˈin ke me dexˈe sˌeðuθˈiɾ.\nfwˈi en bˈuska de pˌeɣotj pˌaɾa ke me bistjˈeɾa.\nˌentɾetˈanto, mɾ.\nmuɾston etʃˈo pjˈe a tjˈeɾɾa, se etʃˈo las ɾɾiˈɛndas al bɾˈaθo i siɣjˈo la ˌempaliθˈaða ke mi mˈaðɾe,\npˌaɾa aθˈeɾle kˌompaɲˈia, seɣˈia tambjˈen poɾ la pˈaɾte de aðˈɛntɾo.\nme akwˈeɾðo ke pˌeɣotj i ʝˈo miɾˈaβamos de kwˌando en kwˌando poɾ la bentˈana, i los dˈos ke se pˌaseˈaβan pˌaɾeθˈian ˌeksaminˈaɾ el espˈino mˈujj de θˈeɾka.\nde ɾɾepˈɛnte, pˌeɣotj, ke estˈaβa de mˈujj bwˈen umˈoɾ, ˌekspeɾˌimentˈo θjˈeɾta kˌontɾaɾjeðˈad i me peɪnˈo kon fwˈeɾθa,\nkˈosa ke me ˌoβliɣˈo a aθˈeɾ ˈun xˈesto.\nmuɾston i ʝˈo nˈo taɾðˈamos en ˌalexˈaɾnos tɾotˈando poɾ la kˌaɾɾetˈeɾa.\nme ʎeβˈaβa delˈante de su sˈiʎa, koxˈiðo kon ˈuno de sus bɾˈaθos, i nˈo poðˈia mˈenos dˌeβolβˈeɾ de kwˌando en kwˌando la kaβˈeθa pˌaɾa miɾˈaɾ su ɾɾˈostɾo.\ntenˈia ˈuna espˈeθje de ˈoxos nˈeɣɾos de aβˈismo.\nnˈo konˈoθko ˈotɾa ˌekspɾesjˈon ke pwˈeða dˌefinˈiɾ ˈun ˈoxo kˈujja pɾˌofundiðˈad ˈes ˌimpenetɾˈaβle, ke en ˈuna lixˈeɾa dˌistɾakθjˈon paɾˈeθen de ɾɾepˈɛnte belˈaɾse o ˌapaɣˈaɾse.\nˌeksaminˈe akˈeʎa kˈaɾa kon θjˈeɾto espˈanto, i me pɾˌeɣuntˈe kˈe seɾˈia lo ke asˈi pɾˌeokupˈaβa su ˌimaxˌinaθjˈon.\nnˈo dexˈe de ˌadmiɾˈaɾ sus nˈeɣɾas pˌatiʎas i su bjˈen ˌafeɪtˈaða bˈaɾβa ke nˈo mostɾˈaβa sˈino los pˈuntos nˈeɣɾos ke tambjˈen imˈitan la bˈaɾβa en ˈuna fiɣˈuɾa de θˈeɾa.\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/gruut_wrapper.py",
    "content": "import importlib\nfrom typing import List\n\nimport gruut\nfrom gruut_ipa import IPA # pip install gruut_ipa\n\nfrom .base import BasePhonemizer\nfrom .punctuation import Punctuation\n\n# Table for str.translate to fix gruut/TTS phoneme mismatch\nGRUUT_TRANS_TABLE = str.maketrans(\"g\", \"ɡ\")\n\n\nclass Gruut(BasePhonemizer):\n    \"\"\"Gruut wrapper for G2P\n\n    Args:\n        language (str):\n            Valid language code for the used backend.\n\n        punctuations (str):\n            Characters to be treated as punctuation. Defaults to `Punctuation.default_puncs()`.\n\n        keep_puncs (bool):\n            If true, keep the punctuations after phonemization. Defaults to True.\n\n        use_espeak_phonemes (bool):\n            If true, use espeak lexicons instead of default Gruut lexicons. Defaults to False.\n\n        keep_stress (bool):\n            If true, keep the stress characters after phonemization. Defaults to False.\n\n    Example:\n\n        >>> from TTS.tts.utils.text.phonemizers.gruut_wrapper import Gruut\n        >>> phonemizer = Gruut('en-us')\n        >>> phonemizer.phonemize(\"Be a voice, not an! echo?\", separator=\"|\")\n        'b|i| ə| v|ɔ|ɪ|s, n|ɑ|t| ə|n! ɛ|k|o|ʊ?'\n    \"\"\"\n\n    def __init__(\n        self,\n        language: str,\n        punctuations=Punctuation.default_puncs(),\n        keep_puncs=True,\n        use_espeak_phonemes=False,\n        keep_stress=False,\n    ):\n        super().__init__(language, punctuations=punctuations, keep_puncs=keep_puncs)\n        self.use_espeak_phonemes = use_espeak_phonemes\n        self.keep_stress = keep_stress\n\n    @staticmethod\n    def name():\n        return \"gruut\"\n\n    def phonemize_gruut(self, text: str, separator: str = \"|\", tie=False) -> str:  # pylint: disable=unused-argument\n        \"\"\"Convert input text to phonemes.\n\n        Gruut phonemizes the given `str` by seperating each phoneme character with `separator`, even for characters\n        that constitude a single sound.\n\n        It doesn't affect 🐸TTS since it individually converts each character to token IDs.\n\n        Examples::\n            \"hello how are you today?\" -> `h|ɛ|l|o|ʊ| h|a|ʊ| ɑ|ɹ| j|u| t|ə|d|e|ɪ`\n\n        Args:\n            text (str):\n                Text to be converted to phonemes.\n\n            tie (bool, optional) : When True use a '͡' character between\n                consecutive characters of a single phoneme. Else separate phoneme\n                with '_'. This option requires espeak>=1.49. Default to False.\n        \"\"\"\n        ph_list = []\n        for sentence in gruut.sentences(text, lang=self.language, espeak=self.use_espeak_phonemes):\n            for word in sentence:\n                if word.is_break:\n                    # Use actual character for break phoneme (e.g., comma)\n                    if ph_list:\n                        # Join with previous word\n                        ph_list[-1].append(word.text)\n                    else:\n                        # First word is punctuation\n                        ph_list.append([word.text])\n                elif word.phonemes:\n                    # Add phonemes for word\n                    word_phonemes = []\n\n                    for word_phoneme in word.phonemes:\n                        if not self.keep_stress:\n                            # Remove primary/secondary stress\n                            word_phoneme = IPA.without_stress(word_phoneme)\n\n                        word_phoneme = word_phoneme.translate(GRUUT_TRANS_TABLE)\n\n                        if word_phoneme:\n                            # Flatten phonemes\n                            word_phonemes.extend(word_phoneme)\n\n                    if word_phonemes:\n                        ph_list.append(word_phonemes)\n\n        ph_words = [separator.join(word_phonemes) for word_phonemes in ph_list]\n        ph = f\"{separator} \".join(ph_words)\n        return ph\n\n    def _phonemize(self, text, separator):\n        return self.phonemize_gruut(text, separator, tie=False)\n\n    def is_supported_language(self, language):\n        \"\"\"Returns True if `language` is supported by the backend\"\"\"\n        return gruut.is_language_supported(language)\n\n    @staticmethod\n    def supported_languages() -> List:\n        \"\"\"Get a dictionary of supported languages.\n\n        Returns:\n            List: List of language codes.\n        \"\"\"\n        return list(gruut.get_supported_languages())\n\n    def version(self):\n        \"\"\"Get the version of the used backend.\n\n        Returns:\n            str: Version of the used backend.\n        \"\"\"\n        return gruut.__version__\n\n    @classmethod\n    def is_available(cls):\n        \"\"\"Return true if ESpeak is available else false\"\"\"\n        return importlib.util.find_spec(\"gruut\") is not None\n\n\nif __name__ == \"__main__\":\n    from es_to_ipa import es2ipa\n    import json\n\n    e = Gruut(language=\"es-es\", keep_puncs=True, keep_stress=True, use_espeak_phonemes=True)\n    symbols = [\n        \"_\",\n        \",\",\n        \".\",\n        \"!\",\n        \"?\",\n        \"-\",\n        \"~\",\n        \"\\u2026\",\n        \"N\",\n        \"Q\",\n        \"a\",\n        \"b\",\n        \"d\",\n        \"e\",\n        \"f\",\n        \"g\",\n        \"h\",\n        \"i\",\n        \"j\",\n        \"k\",\n        \"l\",\n        \"m\",\n        \"n\",\n        \"o\",\n        \"p\",\n        \"s\",\n        \"t\",\n        \"u\",\n        \"v\",\n        \"w\",\n        \"x\",\n        \"y\",\n        \"z\",\n        \"\\u0251\",\n        \"\\u00e6\",\n        \"\\u0283\",\n        \"\\u0291\",\n        \"\\u00e7\",\n        \"\\u026f\",\n        \"\\u026a\",\n        \"\\u0254\",\n        \"\\u025b\",\n        \"\\u0279\",\n        \"\\u00f0\",\n        \"\\u0259\",\n        \"\\u026b\",\n        \"\\u0265\",\n        \"\\u0278\",\n        \"\\u028a\",\n        \"\\u027e\",\n        \"\\u0292\",\n        \"\\u03b8\",\n        \"\\u03b2\",\n        \"\\u014b\",\n        \"\\u0266\",\n        \"\\u207c\",\n        \"\\u02b0\",\n        \"`\",\n        \"^\",\n        \"#\",\n        \"*\",\n        \"=\",\n        \"\\u02c8\",\n        \"\\u02cc\",\n        \"\\u2192\",\n        \"\\u2193\",\n        \"\\u2191\",\n        \" \",\n    ]\n    with open('./text/es_phonemizer/spanish_text.txt', 'r') as f:\n        lines = f.readlines()\n    \n\n    used_sym = []\n    not_existed_sym = []\n    phonemes = []\n\n    for line in lines[:400]:\n        text = line.split('|')[-1].strip()\n        ipa = es2ipa(text)\n        phonemes.append(ipa + '\\n')\n        for s in ipa:\n            if s not in symbols:\n                if s not in not_existed_sym:\n                    print(f'not_existed char: {s}')\n                    not_existed_sym.append(s)\n            else:\n                if s not in used_sym:\n                    # print(f'used char: {s}')\n                    used_sym.append(s)\n    \n    print(used_sym)\n    print(not_existed_sym)\n\n\n    with open('./text/es_phonemizer/es_symbols.txt', 'w') as g:\n        g.writelines(symbols + not_existed_sym)\n        \n    with open('./text/es_phonemizer/example_ipa.txt', 'w') as g:\n        g.writelines(phonemes)\n        \n    data = {'symbols': symbols + not_existed_sym}\n    with open('./text/es_phonemizer/es_symbols_v2.json', 'w') as f:\n        json.dump(data, f, indent=4)\n\n\n\n\n\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/punctuation.py",
    "content": "import collections\nimport re\nfrom enum import Enum\n\nimport six\n\n_DEF_PUNCS = ';:,.!?¡¿—…\"«»“”'\n\n_PUNC_IDX = collections.namedtuple(\"_punc_index\", [\"punc\", \"position\"])\n\n\nclass PuncPosition(Enum):\n    \"\"\"Enum for the punctuations positions\"\"\"\n\n    BEGIN = 0\n    END = 1\n    MIDDLE = 2\n    ALONE = 3\n\n\nclass Punctuation:\n    \"\"\"Handle punctuations in text.\n\n    Just strip punctuations from text or strip and restore them later.\n\n    Args:\n        puncs (str): The punctuations to be processed. Defaults to `_DEF_PUNCS`.\n\n    Example:\n        >>> punc = Punctuation()\n        >>> punc.strip(\"This is. example !\")\n        'This is example'\n\n        >>> text_striped, punc_map = punc.strip_to_restore(\"This is. example !\")\n        >>> ' '.join(text_striped)\n        'This is example'\n\n        >>> text_restored = punc.restore(text_striped, punc_map)\n        >>> text_restored[0]\n        'This is. example !'\n    \"\"\"\n\n    def __init__(self, puncs: str = _DEF_PUNCS):\n        self.puncs = puncs\n\n    @staticmethod\n    def default_puncs():\n        \"\"\"Return default set of punctuations.\"\"\"\n        return _DEF_PUNCS\n\n    @property\n    def puncs(self):\n        return self._puncs\n\n    @puncs.setter\n    def puncs(self, value):\n        if not isinstance(value, six.string_types):\n            raise ValueError(\"[!] Punctuations must be of type str.\")\n        self._puncs = \"\".join(list(dict.fromkeys(list(value))))  # remove duplicates without changing the oreder\n        self.puncs_regular_exp = re.compile(rf\"(\\s*[{re.escape(self._puncs)}]+\\s*)+\")\n\n    def strip(self, text):\n        \"\"\"Remove all the punctuations by replacing with `space`.\n\n        Args:\n            text (str): The text to be processed.\n\n        Example::\n\n            \"This is. example !\" -> \"This is example \"\n        \"\"\"\n        return re.sub(self.puncs_regular_exp, \" \", text).rstrip().lstrip()\n\n    def strip_to_restore(self, text):\n        \"\"\"Remove punctuations from text to restore them later.\n\n        Args:\n            text (str): The text to be processed.\n\n        Examples ::\n\n            \"This is. example !\" -> [[\"This is\", \"example\"], [\".\", \"!\"]]\n\n        \"\"\"\n        text, puncs = self._strip_to_restore(text)\n        return text, puncs\n\n    def _strip_to_restore(self, text):\n        \"\"\"Auxiliary method for Punctuation.preserve()\"\"\"\n        matches = list(re.finditer(self.puncs_regular_exp, text))\n        if not matches:\n            return [text], []\n        # the text is only punctuations\n        if len(matches) == 1 and matches[0].group() == text:\n            return [], [_PUNC_IDX(text, PuncPosition.ALONE)]\n        # build a punctuation map to be used later to restore punctuations\n        puncs = []\n        for match in matches:\n            position = PuncPosition.MIDDLE\n            if match == matches[0] and text.startswith(match.group()):\n                position = PuncPosition.BEGIN\n            elif match == matches[-1] and text.endswith(match.group()):\n                position = PuncPosition.END\n            puncs.append(_PUNC_IDX(match.group(), position))\n        # convert str text to a List[str], each item is separated by a punctuation\n        splitted_text = []\n        for idx, punc in enumerate(puncs):\n            split = text.split(punc.punc)\n            prefix, suffix = split[0], punc.punc.join(split[1:])\n            splitted_text.append(prefix)\n            # if the text does not end with a punctuation, add it to the last item\n            if idx == len(puncs) - 1 and len(suffix) > 0:\n                splitted_text.append(suffix)\n            text = suffix\n        while splitted_text[0] == '':\n            splitted_text = splitted_text[1:]\n        return splitted_text, puncs\n\n    @classmethod\n    def restore(cls, text, puncs):\n        \"\"\"Restore punctuation in a text.\n\n        Args:\n            text (str): The text to be processed.\n            puncs (List[str]): The list of punctuations map to be used for restoring.\n\n        Examples ::\n\n            ['This is', 'example'], ['.', '!'] -> \"This is. example!\"\n\n        \"\"\"\n        return cls._restore(text, puncs, 0)\n\n    @classmethod\n    def _restore(cls, text, puncs, num):  # pylint: disable=too-many-return-statements\n        \"\"\"Auxiliary method for Punctuation.restore()\"\"\"\n        if not puncs:\n            return text\n\n        # nothing have been phonemized, returns the puncs alone\n        if not text:\n            return [\"\".join(m.punc for m in puncs)]\n\n        current = puncs[0]\n\n        if current.position == PuncPosition.BEGIN:\n            return cls._restore([current.punc + text[0]] + text[1:], puncs[1:], num)\n\n        if current.position == PuncPosition.END:\n            return [text[0] + current.punc] + cls._restore(text[1:], puncs[1:], num + 1)\n\n        if current.position == PuncPosition.ALONE:\n            return [current.mark] + cls._restore(text, puncs[1:], num + 1)\n\n        # POSITION == MIDDLE\n        if len(text) == 1:  # pragma: nocover\n            # a corner case where the final part of an intermediate\n            # mark (I) has not been phonemized\n            return cls._restore([text[0] + current.punc], puncs[1:], num)\n\n        return cls._restore([text[0] + current.punc + text[1]] + text[2:], puncs[1:], num)\n\n\n# if __name__ == \"__main__\":\n#     punc = Punctuation()\n#     text = \"This is. This is, example!\"\n\n#     print(punc.strip(text))\n\n#     split_text, puncs = punc.strip_to_restore(text)\n#     print(split_text, \" ---- \", puncs)\n\n#     restored_text = punc.restore(split_text, puncs)\n#     print(restored_text)"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/spanish_symbols.txt",
    "content": "dˌaβˈiðkopeɾfjl unθsbmtʃwɛxɪŋʊɣɡrɲʝʎː"
  },
  {
    "path": "xinference/thirdparty/melo/text/es_phonemizer/test.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"ename\": \"ImportError\",\n     \"evalue\": \"attempted relative import with no known parent package\",\n     \"output_type\": \"error\",\n     \"traceback\": [\n      \"\\u001b[0;31m---------------------------------------------------------------------------\\u001b[0m\",\n      \"\\u001b[0;31mImportError\\u001b[0m                               Traceback (most recent call last)\",\n      \"\\u001b[1;32m/home/xumin/workspace/Bert-VITS2/text/es_phonemizer/test.ipynb Cell 1\\u001b[0m line \\u001b[0;36m5\\n\\u001b[1;32m      <a href='vscode-notebook-cell://ssh-remote%2Bcatams4/home/xumin/workspace/Bert-VITS2/text/es_phonemizer/test.ipynb#W0sdnNjb2RlLXJlbW90ZQ%3D%3D?line=2'>3</a>\\u001b[0m \\u001b[39mimport\\u001b[39;00m \\u001b[39mos\\u001b[39;00m\\u001b[39m,\\u001b[39m \\u001b[39msys\\u001b[39;00m\\n\\u001b[1;32m      <a href='vscode-notebook-cell://ssh-remote%2Bcatams4/home/xumin/workspace/Bert-VITS2/text/es_phonemizer/test.ipynb#W0sdnNjb2RlLXJlbW90ZQ%3D%3D?line=3'>4</a>\\u001b[0m sys\\u001b[39m.\\u001b[39mpath\\u001b[39m.\\u001b[39mappend(\\u001b[39m'\\u001b[39m\\u001b[39m/home/xumin/workspace/MyShell-VC-Training/text/es_phonemizer/\\u001b[39m\\u001b[39m'\\u001b[39m)\\n\\u001b[0;32m----> <a href='vscode-notebook-cell://ssh-remote%2Bcatams4/home/xumin/workspace/Bert-VITS2/text/es_phonemizer/test.ipynb#W0sdnNjb2RlLXJlbW90ZQ%3D%3D?line=4'>5</a>\\u001b[0m \\u001b[39mfrom\\u001b[39;00m \\u001b[39mes_to_ipa\\u001b[39;00m \\u001b[39mimport\\u001b[39;00m es2ipa\\n\\u001b[1;32m      <a href='vscode-notebook-cell://ssh-remote%2Bcatams4/home/xumin/workspace/Bert-VITS2/text/es_phonemizer/test.ipynb#W0sdnNjb2RlLXJlbW90ZQ%3D%3D?line=8'>9</a>\\u001b[0m \\u001b[39mdef\\u001b[39;00m \\u001b[39msplit_sentences_en\\u001b[39m(text, min_len\\u001b[39m=\\u001b[39m\\u001b[39m10\\u001b[39m):\\n\\u001b[1;32m     <a href='vscode-notebook-cell://ssh-remote%2Bcatams4/home/xumin/workspace/Bert-VITS2/text/es_phonemizer/test.ipynb#W0sdnNjb2RlLXJlbW90ZQ%3D%3D?line=9'>10</a>\\u001b[0m   \\u001b[39m# 将文本中的换行符、空格和制表符替换为空格\\u001b[39;00m\\n\\u001b[1;32m     <a href='vscode-notebook-cell://ssh-remote%2Bcatams4/home/xumin/workspace/Bert-VITS2/text/es_phonemizer/test.ipynb#W0sdnNjb2RlLXJlbW90ZQ%3D%3D?line=10'>11</a>\\u001b[0m   text \\u001b[39m=\\u001b[39m re\\u001b[39m.\\u001b[39msub(\\u001b[39m'\\u001b[39m\\u001b[39m[\\u001b[39m\\u001b[39m\\\\n\\u001b[39;00m\\u001b[39m\\\\t\\u001b[39;00m\\u001b[39m ]+\\u001b[39m\\u001b[39m'\\u001b[39m, \\u001b[39m'\\u001b[39m\\u001b[39m \\u001b[39m\\u001b[39m'\\u001b[39m, text)\\n\",\n      \"File \\u001b[0;32m/data/workspace/Bert-VITS2/text/es_phonemizer/es_to_ipa.py:1\\u001b[0m\\n\\u001b[0;32m----> 1\\u001b[0m \\u001b[39mfrom\\u001b[39;00m \\u001b[39m.\\u001b[39;00m\\u001b[39mcleaner\\u001b[39;00m \\u001b[39mimport\\u001b[39;00m spanish_cleaners\\n\\u001b[1;32m      2\\u001b[0m \\u001b[39mfrom\\u001b[39;00m \\u001b[39m.\\u001b[39;00m\\u001b[39mgruut_wrapper\\u001b[39;00m \\u001b[39mimport\\u001b[39;00m Gruut\\n\\u001b[1;32m      4\\u001b[0m \\u001b[39mdef\\u001b[39;00m \\u001b[39mes2ipa\\u001b[39m(text):\\n\",\n      \"\\u001b[0;31mImportError\\u001b[0m: attempted relative import with no known parent package\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import re\\n\",\n    \"import os\\n\",\n    \"import os, sys\\n\",\n    \"sys.path.append('/home/xumin/workspace/MyShell-VC-Training/text/es_phonemizer/')\\n\",\n    \"from es_to_ipa import es2ipa\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def split_sentences_en(text, min_len=10):\\n\",\n    \"  # 将文本中的换行符、空格和制表符替换为空格\\n\",\n    \"  text = re.sub('[\\\\n\\\\t ]+', ' ', text)\\n\",\n    \"  # 在标点符号后添加一个空格\\n\",\n    \"  text = re.sub('([¿—¡])', r'\\\\1 $#!', text)\\n\",\n    \"  # 分隔句子并去除前后空格\\n\",\n    \"  \\n\",\n    \"  sentences = [s.strip() for s in text.split(' $#!')]\\n\",\n    \"  if len(sentences[-1]) == 0: del sentences[-1]\\n\",\n    \"\\n\",\n    \"  new_sentences = []\\n\",\n    \"  new_sent = []\\n\",\n    \"  for ind, sent in enumerate(sentences):\\n\",\n    \"    if sent in ['¿', '—', '¡']:\\n\",\n    \"      new_sent.append(sent)\\n\",\n    \"    else:\\n\",\n    \"      new_sent.append(es2ipa(sent))\\n\",\n    \"    \\n\",\n    \"  \\n\",\n    \"  new_sentences = ''.join(new_sent)\\n\",\n    \"\\n\",\n    \"  return new_sentences\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'—¿aβˈeis estˈaðo kasˈaða alɣˈuna bˈeθ?'\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"split_sentences_en('—¿Habéis estado casada alguna vez?')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'aβˈeis estˈaðo kasˈaða alɣˈuna bˈeθ?'\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"es2ipa('—¿Habéis estado casada alguna vez?')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"base\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.8.18\"\n  },\n  \"orig_nbformat\": 4\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/__init__.py",
    "content": ""
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/base.py",
    "content": "import abc\nfrom typing import List, Tuple\n\nfrom .punctuation import Punctuation\n\n\nclass BasePhonemizer(abc.ABC):\n    \"\"\"Base phonemizer class\n\n    Phonemization follows the following steps:\n        1. Preprocessing:\n            - remove empty lines\n            - remove punctuation\n            - keep track of punctuation marks\n\n        2. Phonemization:\n            - convert text to phonemes\n\n        3. Postprocessing:\n            - join phonemes\n            - restore punctuation marks\n\n    Args:\n        language (str):\n            Language used by the phonemizer.\n\n        punctuations (List[str]):\n            List of punctuation marks to be preserved.\n\n        keep_puncs (bool):\n            Whether to preserve punctuation marks or not.\n    \"\"\"\n\n    def __init__(self, language, punctuations=Punctuation.default_puncs(), keep_puncs=False):\n        # ensure the backend is installed on the system\n        if not self.is_available():\n            raise RuntimeError(\"{} not installed on your system\".format(self.name()))  # pragma: nocover\n\n        # ensure the backend support the requested language\n        self._language = self._init_language(language)\n\n        # setup punctuation processing\n        self._keep_puncs = keep_puncs\n        self._punctuator = Punctuation(punctuations)\n\n    def _init_language(self, language):\n        \"\"\"Language initialization\n\n        This method may be overloaded in child classes (see Segments backend)\n\n        \"\"\"\n        if not self.is_supported_language(language):\n            raise RuntimeError(f'language \"{language}\" is not supported by the ' f\"{self.name()} backend\")\n        return language\n\n    @property\n    def language(self):\n        \"\"\"The language code configured to be used for phonemization\"\"\"\n        return self._language\n\n    @staticmethod\n    @abc.abstractmethod\n    def name():\n        \"\"\"The name of the backend\"\"\"\n        ...\n\n    @classmethod\n    @abc.abstractmethod\n    def is_available(cls):\n        \"\"\"Returns True if the backend is installed, False otherwise\"\"\"\n        ...\n\n    @classmethod\n    @abc.abstractmethod\n    def version(cls):\n        \"\"\"Return the backend version as a tuple (major, minor, patch)\"\"\"\n        ...\n\n    @staticmethod\n    @abc.abstractmethod\n    def supported_languages():\n        \"\"\"Return a dict of language codes -> name supported by the backend\"\"\"\n        ...\n\n    def is_supported_language(self, language):\n        \"\"\"Returns True if `language` is supported by the backend\"\"\"\n        return language in self.supported_languages()\n\n    @abc.abstractmethod\n    def _phonemize(self, text, separator):\n        \"\"\"The main phonemization method\"\"\"\n\n    def _phonemize_preprocess(self, text) -> Tuple[List[str], List]:\n        \"\"\"Preprocess the text before phonemization\n\n        1. remove spaces\n        2. remove punctuation\n\n        Override this if you need a different behaviour\n        \"\"\"\n        text = text.strip()\n        if self._keep_puncs:\n            # a tuple (text, punctuation marks)\n            return self._punctuator.strip_to_restore(text)\n        return [self._punctuator.strip(text)], []\n\n    def _phonemize_postprocess(self, phonemized, punctuations) -> str:\n        \"\"\"Postprocess the raw phonemized output\n\n        Override this if you need a different behaviour\n        \"\"\"\n        if self._keep_puncs:\n            return self._punctuator.restore(phonemized, punctuations)[0]\n        return phonemized[0]\n\n    def phonemize(self, text: str, separator=\"|\", language: str = None) -> str:  # pylint: disable=unused-argument\n        \"\"\"Returns the `text` phonemized for the given language\n\n        Args:\n            text (str):\n                Text to be phonemized.\n\n            separator (str):\n                string separator used between phonemes. Default to '_'.\n\n        Returns:\n            (str): Phonemized text\n        \"\"\"\n        text, punctuations = self._phonemize_preprocess(text)\n        phonemized = []\n        for t in text:\n            p = self._phonemize(t, separator)\n            phonemized.append(p)\n        phonemized = self._phonemize_postprocess(phonemized, punctuations)\n        return phonemized\n\n    def print_logs(self, level: int = 0):\n        indent = \"\\t\" * level\n        print(f\"{indent}| > phoneme language: {self.language}\")\n        print(f\"{indent}| > phoneme backend: {self.name()}\")"
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/cleaner.py",
    "content": "\"\"\"Set of default text cleaners\"\"\"\n# TODO: pick the cleaner for languages dynamically\n\nimport re\nfrom .french_abbreviations import abbreviations_fr\n\n# Regular expression matching whitespace:\n_whitespace_re = re.compile(r\"\\s+\")\n\n\nrep_map = {\n    \"：\": \",\",\n    \"；\": \",\",\n    \"，\": \",\",\n    \"。\": \".\",\n    \"！\": \"!\",\n    \"？\": \"?\",\n    \"\\n\": \".\",\n    \"·\": \",\",\n    \"、\": \",\",\n    \"...\": \".\",\n    \"…\": \".\",\n    \"$\": \".\",\n    \"“\": \"\",\n    \"”\": \"\",\n    \"‘\": \"\",\n    \"’\": \"\",\n    \"（\": \"\",\n    \"）\": \"\",\n    \"(\": \"\",\n    \")\": \"\",\n    \"《\": \"\",\n    \"》\": \"\",\n    \"【\": \"\",\n    \"】\": \"\",\n    \"[\": \"\",\n    \"]\": \"\",\n    \"—\": \"\",\n    \"～\": \"-\",\n    \"~\": \"-\",\n    \"「\": \"\",\n    \"」\": \"\",\n    \"¿\" : \"\",\n    \"¡\" : \"\"\n}\n\n\ndef replace_punctuation(text):\n    pattern = re.compile(\"|\".join(re.escape(p) for p in rep_map.keys()))\n    replaced_text = pattern.sub(lambda x: rep_map[x.group()], text)\n    return replaced_text\n\ndef expand_abbreviations(text, lang=\"fr\"):\n    if lang == \"fr\":\n        _abbreviations = abbreviations_fr\n    for regex, replacement in _abbreviations:\n        text = re.sub(regex, replacement, text)\n    return text\n\n\ndef lowercase(text):\n    return text.lower()\n\n\ndef collapse_whitespace(text):\n    return re.sub(_whitespace_re, \" \", text).strip()\n\ndef remove_punctuation_at_begin(text):\n    return re.sub(r'^[,.!?]+', '', text)\n\ndef remove_aux_symbols(text):\n    text = re.sub(r\"[\\<\\>\\(\\)\\[\\]\\\"\\«\\»]+\", \"\", text)\n    return text\n\n\ndef replace_symbols(text, lang=\"en\"):\n    \"\"\"Replace symbols based on the lenguage tag.\n\n    Args:\n      text:\n       Input text.\n      lang:\n        Lenguage identifier. ex: \"en\", \"fr\", \"pt\", \"ca\".\n\n    Returns:\n      The modified text\n      example:\n        input args:\n            text: \"si l'avi cau, diguem-ho\"\n            lang: \"ca\"\n        Output:\n            text: \"si lavi cau, diguemho\"\n    \"\"\"\n    text = text.replace(\";\", \",\")\n    text = text.replace(\"-\", \" \") if lang != \"ca\" else text.replace(\"-\", \"\")\n    text = text.replace(\":\", \",\")\n    if lang == \"en\":\n        text = text.replace(\"&\", \" and \")\n    elif lang == \"fr\":\n        text = text.replace(\"&\", \" et \")\n    elif lang == \"pt\":\n        text = text.replace(\"&\", \" e \")\n    elif lang == \"ca\":\n        text = text.replace(\"&\", \" i \")\n        text = text.replace(\"'\", \"\")\n    elif lang== \"es\":\n        text=text.replace(\"&\",\"y\")\n        text = text.replace(\"'\", \"\")\n    return text\n\ndef french_cleaners(text):\n    \"\"\"Pipeline for French text. There is no need to expand numbers, phonemizer already does that\"\"\"\n    text = expand_abbreviations(text, lang=\"fr\")\n    # text = lowercase(text) # as we use the cased bert\n    text = replace_punctuation(text)\n    text = replace_symbols(text, lang=\"fr\")\n    text = remove_aux_symbols(text)\n    text = remove_punctuation_at_begin(text)\n    text = collapse_whitespace(text)\n    text = re.sub(r'([^\\.,!\\?\\-…])$', r'\\1.', text)\n    return text\n\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/en_symbols.json",
    "content": "{\"symbols\": [\n    \"_\",\n    \",\",\n    \".\",\n    \"!\",\n    \"?\",\n    \"-\",\n    \"~\",\n    \"\\u2026\",\n    \"N\",\n    \"Q\",\n    \"a\",\n    \"b\",\n    \"d\",\n    \"e\",\n    \"f\",\n    \"g\",\n    \"h\",\n    \"i\",\n    \"j\",\n    \"k\",\n    \"l\",\n    \"m\",\n    \"n\",\n    \"o\",\n    \"p\",\n    \"s\",\n    \"t\",\n    \"u\",\n    \"v\",\n    \"w\",\n    \"x\",\n    \"y\",\n    \"z\",\n    \"\\u0251\",\n    \"\\u00e6\",\n    \"\\u0283\",\n    \"\\u0291\",\n    \"\\u00e7\",\n    \"\\u026f\",\n    \"\\u026a\",\n    \"\\u0254\",\n    \"\\u025b\",\n    \"\\u0279\",\n    \"\\u00f0\",\n    \"\\u0259\",\n    \"\\u026b\",\n    \"\\u0265\",\n    \"\\u0278\",\n    \"\\u028a\",\n    \"\\u027e\",\n    \"\\u0292\",\n    \"\\u03b8\",\n    \"\\u03b2\",\n    \"\\u014b\",\n    \"\\u0266\",\n    \"\\u207c\",\n    \"\\u02b0\",\n    \"`\",\n    \"^\",\n    \"#\",\n    \"*\",\n    \"=\",\n    \"\\u02c8\",\n    \"\\u02cc\",\n    \"\\u2192\",\n    \"\\u2193\",\n    \"\\u2191\",\n    \" \",\n    \"ɣ\",\n    \"ɡ\", \n    \"r\", \n    \"ɲ\", \n    \"ʝ\", \n    \"ʎ\",\n    \"ː\"\n  ]\n}"
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/fr_symbols.json",
    "content": "{\n    \"symbols\": [\n        \"_\",\n        \",\",\n        \".\",\n        \"!\",\n        \"?\",\n        \"-\",\n        \"~\",\n        \"\\u2026\",\n        \"N\",\n        \"Q\",\n        \"a\",\n        \"b\",\n        \"d\",\n        \"e\",\n        \"f\",\n        \"g\",\n        \"h\",\n        \"i\",\n        \"j\",\n        \"k\",\n        \"l\",\n        \"m\",\n        \"n\",\n        \"o\",\n        \"p\",\n        \"s\",\n        \"t\",\n        \"u\",\n        \"v\",\n        \"w\",\n        \"x\",\n        \"y\",\n        \"z\",\n        \"\\u0251\",\n        \"\\u00e6\",\n        \"\\u0283\",\n        \"\\u0291\",\n        \"\\u00e7\",\n        \"\\u026f\",\n        \"\\u026a\",\n        \"\\u0254\",\n        \"\\u025b\",\n        \"\\u0279\",\n        \"\\u00f0\",\n        \"\\u0259\",\n        \"\\u026b\",\n        \"\\u0265\",\n        \"\\u0278\",\n        \"\\u028a\",\n        \"\\u027e\",\n        \"\\u0292\",\n        \"\\u03b8\",\n        \"\\u03b2\",\n        \"\\u014b\",\n        \"\\u0266\",\n        \"\\u207c\",\n        \"\\u02b0\",\n        \"`\",\n        \"^\",\n        \"#\",\n        \"*\",\n        \"=\",\n        \"\\u02c8\",\n        \"\\u02cc\",\n        \"\\u2192\",\n        \"\\u2193\",\n        \"\\u2191\",\n        \" \",\n        \"\\u0263\",\n        \"\\u0261\",\n        \"r\",\n        \"\\u0272\",\n        \"\\u029d\",\n        \"\\u028e\",\n        \"\\u02d0\",\n        \n        \"\\u0303\",\n        \"\\u0153\",\n        \"\\u00f8\",\n        \"\\u0281\",\n        \"\\u0252\",\n        \"\\u028c\",\n        \"\\u2014\",\n        \"\\u025c\",\n        \"\\u0250\"\n    ]\n}"
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/fr_to_ipa.py",
    "content": "from .cleaner import french_cleaners\nfrom .gruut_wrapper import Gruut\n\n\ndef remove_consecutive_t(input_str):\n    result = []\n    count = 0\n\n    for char in input_str:\n        if char == 't':\n            count += 1\n        else:\n            if count < 3:  \n                result.extend(['t'] * count)\n            count = 0\n            result.append(char)\n\n    if count < 3:\n        result.extend(['t'] * count)\n\n    return ''.join(result)\n\ndef fr2ipa(text):\n    e = Gruut(language=\"fr-fr\", keep_puncs=True, keep_stress=True, use_espeak_phonemes=True)\n    # text = french_cleaners(text)\n    phonemes = e.phonemize(text, separator=\"\")\n    # print(phonemes)\n    phonemes = remove_consecutive_t(phonemes)\n    # print(phonemes)\n    return phonemes"
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/french_abbreviations.py",
    "content": "import re\n\n# List of (regular expression, replacement) pairs for abbreviations in french:\nabbreviations_fr = [\n    (re.compile(\"\\\\b%s\\\\.\" % x[0], re.IGNORECASE), x[1])\n    for x in [\n        (\"M\", \"monsieur\"),\n        (\"Mlle\", \"mademoiselle\"),\n        (\"Mlles\", \"mesdemoiselles\"),\n        (\"Mme\", \"Madame\"),\n        (\"Mmes\", \"Mesdames\"),\n        (\"N.B\", \"nota bene\"),\n        (\"M\", \"monsieur\"),\n        (\"p.c.q\", \"parce que\"),\n        (\"Pr\", \"professeur\"),\n        (\"qqch\", \"quelque chose\"),\n        (\"rdv\", \"rendez-vous\"),\n        (\"max\", \"maximum\"),\n        (\"min\", \"minimum\"),\n        (\"no\", \"numéro\"),\n        (\"adr\", \"adresse\"),\n        (\"dr\", \"docteur\"),\n        (\"st\", \"saint\"),\n        (\"co\", \"companie\"),\n        (\"jr\", \"junior\"),\n        (\"sgt\", \"sergent\"),\n        (\"capt\", \"capitain\"),\n        (\"col\", \"colonel\"),\n        (\"av\", \"avenue\"),\n        (\"av. J.-C\", \"avant Jésus-Christ\"),\n        (\"apr. J.-C\", \"après Jésus-Christ\"),\n        (\"art\", \"article\"),\n        (\"boul\", \"boulevard\"),\n        (\"c.-à-d\", \"c’est-à-dire\"),\n        (\"etc\", \"et cetera\"),\n        (\"ex\", \"exemple\"),\n        (\"excl\", \"exclusivement\"),\n        (\"boul\", \"boulevard\"),\n    ]\n] + [\n    (re.compile(\"\\\\b%s\" % x[0]), x[1])\n    for x in [\n        (\"Mlle\", \"mademoiselle\"),\n        (\"Mlles\", \"mesdemoiselles\"),\n        (\"Mme\", \"Madame\"),\n        (\"Mmes\", \"Mesdames\"),\n    ]\n]"
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/french_symbols.txt",
    "content": "_,.!?-~…NQabdefghijklmnopstuvwxyzɑæʃʑçɯɪɔɛɹðəɫɥɸʊɾʒθβŋɦ⁼ʰ`^#*=ˈˌ→↓↑ ɣɡrɲʝʎː̃œøʁɒʌ—ɜɐ"
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/gruut_wrapper.py",
    "content": "import importlib\nfrom typing import List\n\nimport gruut\nfrom gruut_ipa import IPA # pip install gruut_ipa\n\nfrom .base import BasePhonemizer\nfrom .punctuation import Punctuation\n\n# Table for str.translate to fix gruut/TTS phoneme mismatch\nGRUUT_TRANS_TABLE = str.maketrans(\"g\", \"ɡ\")\n\n\nclass Gruut(BasePhonemizer):\n    \"\"\"Gruut wrapper for G2P\n\n    Args:\n        language (str):\n            Valid language code for the used backend.\n\n        punctuations (str):\n            Characters to be treated as punctuation. Defaults to `Punctuation.default_puncs()`.\n\n        keep_puncs (bool):\n            If true, keep the punctuations after phonemization. Defaults to True.\n\n        use_espeak_phonemes (bool):\n            If true, use espeak lexicons instead of default Gruut lexicons. Defaults to False.\n\n        keep_stress (bool):\n            If true, keep the stress characters after phonemization. Defaults to False.\n\n    Example:\n\n        >>> from TTS.tts.utils.text.phonemizers.gruut_wrapper import Gruut\n        >>> phonemizer = Gruut('en-us')\n        >>> phonemizer.phonemize(\"Be a voice, not an! echo?\", separator=\"|\")\n        'b|i| ə| v|ɔ|ɪ|s, n|ɑ|t| ə|n! ɛ|k|o|ʊ?'\n    \"\"\"\n\n    def __init__(\n        self,\n        language: str,\n        punctuations=Punctuation.default_puncs(),\n        keep_puncs=True,\n        use_espeak_phonemes=False,\n        keep_stress=False,\n    ):\n        super().__init__(language, punctuations=punctuations, keep_puncs=keep_puncs)\n        self.use_espeak_phonemes = use_espeak_phonemes\n        self.keep_stress = keep_stress\n\n    @staticmethod\n    def name():\n        return \"gruut\"\n\n    def phonemize_gruut(self, text: str, separator: str = \"|\", tie=False) -> str:  # pylint: disable=unused-argument\n        \"\"\"Convert input text to phonemes.\n\n        Gruut phonemizes the given `str` by seperating each phoneme character with `separator`, even for characters\n        that constitude a single sound.\n\n        It doesn't affect 🐸TTS since it individually converts each character to token IDs.\n\n        Examples::\n            \"hello how are you today?\" -> `h|ɛ|l|o|ʊ| h|a|ʊ| ɑ|ɹ| j|u| t|ə|d|e|ɪ`\n\n        Args:\n            text (str):\n                Text to be converted to phonemes.\n\n            tie (bool, optional) : When True use a '͡' character between\n                consecutive characters of a single phoneme. Else separate phoneme\n                with '_'. This option requires espeak>=1.49. Default to False.\n        \"\"\"\n        ph_list = []\n        for sentence in gruut.sentences(text, lang=self.language, espeak=self.use_espeak_phonemes):\n            for word in sentence:\n                if word.is_break:\n                    # Use actual character for break phoneme (e.g., comma)\n                    if ph_list:\n                        # Join with previous word\n                        ph_list[-1].append(word.text)\n                    else:\n                        # First word is punctuation\n                        ph_list.append([word.text])\n                elif word.phonemes:\n                    # Add phonemes for word\n                    word_phonemes = []\n\n                    for word_phoneme in word.phonemes:\n                        if not self.keep_stress:\n                            # Remove primary/secondary stress\n                            word_phoneme = IPA.without_stress(word_phoneme)\n\n                        word_phoneme = word_phoneme.translate(GRUUT_TRANS_TABLE)\n\n                        if word_phoneme:\n                            # Flatten phonemes\n                            word_phonemes.extend(word_phoneme)\n\n                    if word_phonemes:\n                        ph_list.append(word_phonemes)\n\n        ph_words = [separator.join(word_phonemes) for word_phonemes in ph_list]\n        ph = f\"{separator} \".join(ph_words)\n        return ph\n\n    def _phonemize(self, text, separator):\n        return self.phonemize_gruut(text, separator, tie=False)\n\n    def is_supported_language(self, language):\n        \"\"\"Returns True if `language` is supported by the backend\"\"\"\n        return gruut.is_language_supported(language)\n\n    @staticmethod\n    def supported_languages() -> List:\n        \"\"\"Get a dictionary of supported languages.\n\n        Returns:\n            List: List of language codes.\n        \"\"\"\n        return list(gruut.get_supported_languages())\n\n    def version(self):\n        \"\"\"Get the version of the used backend.\n\n        Returns:\n            str: Version of the used backend.\n        \"\"\"\n        return gruut.__version__\n\n    @classmethod\n    def is_available(cls):\n        \"\"\"Return true if ESpeak is available else false\"\"\"\n        return importlib.util.find_spec(\"gruut\") is not None\n\n\nif __name__ == \"__main__\":\n    from cleaner import french_cleaners\n    import json\n\n    e = Gruut(language=\"fr-fr\", keep_puncs=True, keep_stress=True, use_espeak_phonemes=True)\n    symbols = [  # en + sp\n        \"_\",\n        \",\",\n        \".\",\n        \"!\",\n        \"?\",\n        \"-\",\n        \"~\",\n        \"\\u2026\",\n        \"N\",\n        \"Q\",\n        \"a\",\n        \"b\",\n        \"d\",\n        \"e\",\n        \"f\",\n        \"g\",\n        \"h\",\n        \"i\",\n        \"j\",\n        \"k\",\n        \"l\",\n        \"m\",\n        \"n\",\n        \"o\",\n        \"p\",\n        \"s\",\n        \"t\",\n        \"u\",\n        \"v\",\n        \"w\",\n        \"x\",\n        \"y\",\n        \"z\",\n        \"\\u0251\",\n        \"\\u00e6\",\n        \"\\u0283\",\n        \"\\u0291\",\n        \"\\u00e7\",\n        \"\\u026f\",\n        \"\\u026a\",\n        \"\\u0254\",\n        \"\\u025b\",\n        \"\\u0279\",\n        \"\\u00f0\",\n        \"\\u0259\",\n        \"\\u026b\",\n        \"\\u0265\",\n        \"\\u0278\",\n        \"\\u028a\",\n        \"\\u027e\",\n        \"\\u0292\",\n        \"\\u03b8\",\n        \"\\u03b2\",\n        \"\\u014b\",\n        \"\\u0266\",\n        \"\\u207c\",\n        \"\\u02b0\",\n        \"`\",\n        \"^\",\n        \"#\",\n        \"*\",\n        \"=\",\n        \"\\u02c8\",\n        \"\\u02cc\",\n        \"\\u2192\",\n        \"\\u2193\",\n        \"\\u2191\",\n        \" \",\n        \"ɣ\",\n        \"ɡ\", \n        \"r\", \n        \"ɲ\", \n        \"ʝ\", \n        \"ʎ\",\n        \"ː\"\n    ]\n    with open('/home/xumin/workspace/VITS-Training-Multiling/230715_fr/metadata.txt', 'r') as f:\n        lines = f.readlines()\n    \n\n    used_sym = []\n    not_existed_sym = []\n    phonemes = []\n\n    for line in lines:\n        text = line.split('|')[-1].strip()\n        text = french_cleaners(text)\n        ipa =  e.phonemize(text, separator=\"\")\n        phonemes.append(ipa)\n        for s in ipa:\n            if s not in symbols:\n                if s not in not_existed_sym:\n                    print(f'not_existed char: {s}')\n                    not_existed_sym.append(s)\n            else:\n                if s not in used_sym:\n                    # print(f'used char: {s}')\n                    used_sym.append(s)\n    \n    print(used_sym)\n    print(not_existed_sym)\n\n\n    with open('./text/fr_phonemizer/french_symbols.txt', 'w') as g:\n        g.writelines(symbols + not_existed_sym)\n        \n    with open('./text/fr_phonemizer/example_ipa.txt', 'w') as g:\n        g.writelines(phonemes)\n\n    data = {'symbols': symbols + not_existed_sym}\n\n    with open('./text/fr_phonemizer/fr_symbols.json', 'w') as f:\n        json.dump(data, f, indent=4)\n\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/fr_phonemizer/punctuation.py",
    "content": "import collections\nimport re\nfrom enum import Enum\n\nimport six\n\n_DEF_PUNCS = ';:,.!?¡¿—…\"«»“”'\n\n_PUNC_IDX = collections.namedtuple(\"_punc_index\", [\"punc\", \"position\"])\n\n\nclass PuncPosition(Enum):\n    \"\"\"Enum for the punctuations positions\"\"\"\n\n    BEGIN = 0\n    END = 1\n    MIDDLE = 2\n    ALONE = 3\n\n\nclass Punctuation:\n    \"\"\"Handle punctuations in text.\n\n    Just strip punctuations from text or strip and restore them later.\n\n    Args:\n        puncs (str): The punctuations to be processed. Defaults to `_DEF_PUNCS`.\n\n    Example:\n        >>> punc = Punctuation()\n        >>> punc.strip(\"This is. example !\")\n        'This is example'\n\n        >>> text_striped, punc_map = punc.strip_to_restore(\"This is. example !\")\n        >>> ' '.join(text_striped)\n        'This is example'\n\n        >>> text_restored = punc.restore(text_striped, punc_map)\n        >>> text_restored[0]\n        'This is. example !'\n    \"\"\"\n\n    def __init__(self, puncs: str = _DEF_PUNCS):\n        self.puncs = puncs\n\n    @staticmethod\n    def default_puncs():\n        \"\"\"Return default set of punctuations.\"\"\"\n        return _DEF_PUNCS\n\n    @property\n    def puncs(self):\n        return self._puncs\n\n    @puncs.setter\n    def puncs(self, value):\n        if not isinstance(value, six.string_types):\n            raise ValueError(\"[!] Punctuations must be of type str.\")\n        self._puncs = \"\".join(list(dict.fromkeys(list(value))))  # remove duplicates without changing the oreder\n        self.puncs_regular_exp = re.compile(rf\"(\\s*[{re.escape(self._puncs)}]+\\s*)+\")\n\n    def strip(self, text):\n        \"\"\"Remove all the punctuations by replacing with `space`.\n\n        Args:\n            text (str): The text to be processed.\n\n        Example::\n\n            \"This is. example !\" -> \"This is example \"\n        \"\"\"\n        return re.sub(self.puncs_regular_exp, \" \", text).rstrip().lstrip()\n\n    def strip_to_restore(self, text):\n        \"\"\"Remove punctuations from text to restore them later.\n\n        Args:\n            text (str): The text to be processed.\n\n        Examples ::\n\n            \"This is. example !\" -> [[\"This is\", \"example\"], [\".\", \"!\"]]\n\n        \"\"\"\n        text, puncs = self._strip_to_restore(text)\n        return text, puncs\n\n    def _strip_to_restore(self, text):\n        \"\"\"Auxiliary method for Punctuation.preserve()\"\"\"\n        matches = list(re.finditer(self.puncs_regular_exp, text))\n        if not matches:\n            return [text], []\n        # the text is only punctuations\n        if len(matches) == 1 and matches[0].group() == text:\n            return [], [_PUNC_IDX(text, PuncPosition.ALONE)]\n        # build a punctuation map to be used later to restore punctuations\n        puncs = []\n        for match in matches:\n            position = PuncPosition.MIDDLE\n            if match == matches[0] and text.startswith(match.group()):\n                position = PuncPosition.BEGIN\n            elif match == matches[-1] and text.endswith(match.group()):\n                position = PuncPosition.END\n            puncs.append(_PUNC_IDX(match.group(), position))\n        # convert str text to a List[str], each item is separated by a punctuation\n        splitted_text = []\n        for idx, punc in enumerate(puncs):\n            split = text.split(punc.punc)\n            prefix, suffix = split[0], punc.punc.join(split[1:])\n            splitted_text.append(prefix)\n            # if the text does not end with a punctuation, add it to the last item\n            if idx == len(puncs) - 1 and len(suffix) > 0:\n                splitted_text.append(suffix)\n            text = suffix\n        return splitted_text, puncs\n\n    @classmethod\n    def restore(cls, text, puncs):\n        \"\"\"Restore punctuation in a text.\n\n        Args:\n            text (str): The text to be processed.\n            puncs (List[str]): The list of punctuations map to be used for restoring.\n\n        Examples ::\n\n            ['This is', 'example'], ['.', '!'] -> \"This is. example!\"\n\n        \"\"\"\n        return cls._restore(text, puncs, 0)\n\n    @classmethod\n    def _restore(cls, text, puncs, num):  # pylint: disable=too-many-return-statements\n        \"\"\"Auxiliary method for Punctuation.restore()\"\"\"\n        if not puncs:\n            return text\n\n        # nothing have been phonemized, returns the puncs alone\n        if not text:\n            return [\"\".join(m.punc for m in puncs)]\n\n        current = puncs[0]\n\n        if current.position == PuncPosition.BEGIN:\n            return cls._restore([current.punc + text[0]] + text[1:], puncs[1:], num)\n\n        if current.position == PuncPosition.END:\n            return [text[0] + current.punc] + cls._restore(text[1:], puncs[1:], num + 1)\n\n        if current.position == PuncPosition.ALONE:\n            return [current.mark] + cls._restore(text, puncs[1:], num + 1)\n\n        # POSITION == MIDDLE\n        if len(text) == 1:  # pragma: nocover\n            # a corner case where the final part of an intermediate\n            # mark (I) has not been phonemized\n            return cls._restore([text[0] + current.punc], puncs[1:], num)\n\n        return cls._restore([text[0] + current.punc + text[1]] + text[2:], puncs[1:], num)\n\n\n# if __name__ == \"__main__\":\n#     punc = Punctuation()\n#     text = \"This is. This is, example!\"\n\n#     print(punc.strip(text))\n\n#     split_text, puncs = punc.strip_to_restore(text)\n#     print(split_text, \" ---- \", puncs)\n\n#     restored_text = punc.restore(split_text, puncs)\n#     print(restored_text)"
  },
  {
    "path": "xinference/thirdparty/melo/text/french.py",
    "content": "import pickle\nimport os\nimport re\n\nfrom . import symbols\nfrom .fr_phonemizer import cleaner as fr_cleaner\nfrom .fr_phonemizer import fr_to_ipa\nfrom transformers import AutoTokenizer\n\n\ndef distribute_phone(n_phone, n_word):\n    phones_per_word = [0] * n_word\n    for task in range(n_phone):\n        min_tasks = min(phones_per_word)\n        min_index = phones_per_word.index(min_tasks)\n        phones_per_word[min_index] += 1\n    return phones_per_word\n\ndef text_normalize(text):\n    text = fr_cleaner.french_cleaners(text)\n    return text\n\nmodel_id = 'dbmdz/bert-base-french-europeana-cased'\ntokenizer = AutoTokenizer.from_pretrained(model_id)\n\ndef g2p(text, pad_start_end=True, tokenized=None):\n    if tokenized is None:\n        tokenized = tokenizer.tokenize(text)\n    # import pdb; pdb.set_trace()\n    phs = []\n    ph_groups = []\n    for t in tokenized:\n        if not t.startswith(\"#\"):\n            ph_groups.append([t])\n        else:\n            ph_groups[-1].append(t.replace(\"#\", \"\"))\n    \n    phones = []\n    tones = []\n    word2ph = []\n    # print(ph_groups)\n    for group in ph_groups:\n        w = \"\".join(group)\n        phone_len = 0\n        word_len = len(group)\n        if w == '[UNK]':\n            phone_list = ['UNK']\n        else:\n            phone_list = list(filter(lambda p: p != \" \", fr_to_ipa.fr2ipa(w)))\n        \n        for ph in phone_list:\n            phones.append(ph)\n            tones.append(0)\n            phone_len += 1\n        aaa = distribute_phone(phone_len, word_len)\n        word2ph += aaa\n        # print(phone_list, aaa)\n        # print('=' * 10)\n\n    if pad_start_end:\n        phones = [\"_\"] + phones + [\"_\"]\n        tones = [0] + tones + [0]\n        word2ph = [1] + word2ph + [1]\n    return phones, tones, word2ph\n\ndef get_bert_feature(text, word2ph, device=None):\n    from text import french_bert\n    return french_bert.get_bert_feature(text, word2ph, device=device)\n\nif __name__ == \"__main__\":\n    ori_text = 'Ce service gratuit est“”\"\" 【disponible》 en chinois 【simplifié] et autres 123'\n    # ori_text = \"Ils essayaient vainement de faire comprendre à ma mère qu'avec les cent mille francs que m'avait laissé mon père,\"\n    # print(ori_text)\n    text = text_normalize(ori_text)\n    print(text)\n    phoneme = fr_to_ipa.fr2ipa(text)\n    print(phoneme)\n\n    \n    from TTS.tts.utils.text.phonemizers.multi_phonemizer import MultiPhonemizer\n    from text.cleaner_multiling import unicleaners\n\n    def text_normalize(text):\n        text = unicleaners(text, cased=True, lang='fr')\n        return text\n\n    # print(ori_text)\n    text = text_normalize(ori_text)\n    print(text)\n    phonemizer = MultiPhonemizer({\"fr-fr\": \"espeak\"})\n    # phonemizer.lang_to_phonemizer['fr'].keep_stress = True\n    # phonemizer.lang_to_phonemizer['fr'].use_espeak_phonemes = True\n    phoneme = phonemizer.phonemize(text, separator=\"\", language='fr-fr')\n    print(phoneme)"
  },
  {
    "path": "xinference/thirdparty/melo/text/french_bert.py",
    "content": "import torch\nfrom transformers import AutoTokenizer, AutoModelForMaskedLM\nimport sys\n\nmodel_id = 'dbmdz/bert-base-french-europeana-cased'\ntokenizer = AutoTokenizer.from_pretrained(model_id)\nmodel = None\n\ndef get_bert_feature(text, word2ph, device=None):\n    global model\n    if (\n        sys.platform == \"darwin\"\n        and torch.backends.mps.is_available()\n        and device == \"cpu\"\n    ):\n        device = \"mps\"\n    if not device:\n        device = \"cuda\"\n    if model is None:\n        model = AutoModelForMaskedLM.from_pretrained(model_id).to(\n            device\n        )\n    with torch.no_grad():\n        inputs = tokenizer(text, return_tensors=\"pt\")\n        for i in inputs:\n            inputs[i] = inputs[i].to(device)\n        res = model(**inputs, output_hidden_states=True)\n        res = torch.cat(res[\"hidden_states\"][-3:-2], -1)[0].cpu()\n        \n    assert inputs[\"input_ids\"].shape[-1] == len(word2ph)\n    word2phone = word2ph\n    phone_level_feature = []\n    for i in range(len(word2phone)):\n        repeat_feature = res[i].repeat(word2phone[i], 1)\n        phone_level_feature.append(repeat_feature)\n\n    phone_level_feature = torch.cat(phone_level_feature, dim=0)\n\n    return phone_level_feature.T\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/japanese.py",
    "content": "# Convert Japanese text to phonemes which is\n# compatible with Julius https://github.com/julius-speech/segmentation-kit\nimport re\nimport unicodedata\n\nfrom transformers import AutoTokenizer\n\nfrom . import symbols\npunctuation = [\"!\", \"?\", \"…\", \",\", \".\", \"'\", \"-\"]\n\ntry:\n    import MeCab\nexcept ImportError as e:\n    raise ImportError(\"Japanese requires mecab-python3 and unidic-lite.\") from e\nfrom num2words import num2words\n\n_CONVRULES = [\n    # Conversion of 2 letters\n    \"アァ/ a a\",\n    \"イィ/ i i\",\n    \"イェ/ i e\",\n    \"イャ/ y a\",\n    \"ウゥ/ u:\",\n    \"エェ/ e e\",\n    \"オォ/ o:\",\n    \"カァ/ k a:\",\n    \"キィ/ k i:\",\n    \"クゥ/ k u:\",\n    \"クャ/ ky a\",\n    \"クュ/ ky u\",\n    \"クョ/ ky o\",\n    \"ケェ/ k e:\",\n    \"コォ/ k o:\",\n    \"ガァ/ g a:\",\n    \"ギィ/ g i:\",\n    \"グゥ/ g u:\",\n    \"グャ/ gy a\",\n    \"グュ/ gy u\",\n    \"グョ/ gy o\",\n    \"ゲェ/ g e:\",\n    \"ゴォ/ g o:\",\n    \"サァ/ s a:\",\n    \"シィ/ sh i:\",\n    \"スゥ/ s u:\",\n    \"スャ/ sh a\",\n    \"スュ/ sh u\",\n    \"スョ/ sh o\",\n    \"セェ/ s e:\",\n    \"ソォ/ s o:\",\n    \"ザァ/ z a:\",\n    \"ジィ/ j i:\",\n    \"ズゥ/ z u:\",\n    \"ズャ/ zy a\",\n    \"ズュ/ zy u\",\n    \"ズョ/ zy o\",\n    \"ゼェ/ z e:\",\n    \"ゾォ/ z o:\",\n    \"タァ/ t a:\",\n    \"チィ/ ch i:\",\n    \"ツァ/ ts a\",\n    \"ツィ/ ts i\",\n    \"ツゥ/ ts u:\",\n    \"ツャ/ ch a\",\n    \"ツュ/ ch u\",\n    \"ツョ/ ch o\",\n    \"ツェ/ ts e\",\n    \"ツォ/ ts o\",\n    \"テェ/ t e:\",\n    \"トォ/ t o:\",\n    \"ダァ/ d a:\",\n    \"ヂィ/ j i:\",\n    \"ヅゥ/ d u:\",\n    \"ヅャ/ zy a\",\n    \"ヅュ/ zy u\",\n    \"ヅョ/ zy o\",\n    \"デェ/ d e:\",\n    \"ドォ/ d o:\",\n    \"ナァ/ n a:\",\n    \"ニィ/ n i:\",\n    \"ヌゥ/ n u:\",\n    \"ヌャ/ ny a\",\n    \"ヌュ/ ny u\",\n    \"ヌョ/ ny o\",\n    \"ネェ/ n e:\",\n    \"ノォ/ n o:\",\n    \"ハァ/ h a:\",\n    \"ヒィ/ h i:\",\n    \"フゥ/ f u:\",\n    \"フャ/ hy a\",\n    \"フュ/ hy u\",\n    \"フョ/ hy o\",\n    \"ヘェ/ h e:\",\n    \"ホォ/ h o:\",\n    \"バァ/ b a:\",\n    \"ビィ/ b i:\",\n    \"ブゥ/ b u:\",\n    \"フャ/ hy a\",\n    \"ブュ/ by u\",\n    \"フョ/ hy o\",\n    \"ベェ/ b e:\",\n    \"ボォ/ b o:\",\n    \"パァ/ p a:\",\n    \"ピィ/ p i:\",\n    \"プゥ/ p u:\",\n    \"プャ/ py a\",\n    \"プュ/ py u\",\n    \"プョ/ py o\",\n    \"ペェ/ p e:\",\n    \"ポォ/ p o:\",\n    \"マァ/ m a:\",\n    \"ミィ/ m i:\",\n    \"ムゥ/ m u:\",\n    \"ムャ/ my a\",\n    \"ムュ/ my u\",\n    \"ムョ/ my o\",\n    \"メェ/ m e:\",\n    \"モォ/ m o:\",\n    \"ヤァ/ y a:\",\n    \"ユゥ/ y u:\",\n    \"ユャ/ y a:\",\n    \"ユュ/ y u:\",\n    \"ユョ/ y o:\",\n    \"ヨォ/ y o:\",\n    \"ラァ/ r a:\",\n    \"リィ/ r i:\",\n    \"ルゥ/ r u:\",\n    \"ルャ/ ry a\",\n    \"ルュ/ ry u\",\n    \"ルョ/ ry o\",\n    \"レェ/ r e:\",\n    \"ロォ/ r o:\",\n    \"ワァ/ w a:\",\n    \"ヲォ/ o:\",\n    \"ディ/ d i\",\n    \"デェ/ d e:\",\n    \"デャ/ dy a\",\n    \"デュ/ dy u\",\n    \"デョ/ dy o\",\n    \"ティ/ t i\",\n    \"テェ/ t e:\",\n    \"テャ/ ty a\",\n    \"テュ/ ty u\",\n    \"テョ/ ty o\",\n    \"スィ/ s i\",\n    \"ズァ/ z u a\",\n    \"ズィ/ z i\",\n    \"ズゥ/ z u\",\n    \"ズャ/ zy a\",\n    \"ズュ/ zy u\",\n    \"ズョ/ zy o\",\n    \"ズェ/ z e\",\n    \"ズォ/ z o\",\n    \"キャ/ ky a\",\n    \"キュ/ ky u\",\n    \"キョ/ ky o\",\n    \"シャ/ sh a\",\n    \"シュ/ sh u\",\n    \"シェ/ sh e\",\n    \"ショ/ sh o\",\n    \"チャ/ ch a\",\n    \"チュ/ ch u\",\n    \"チェ/ ch e\",\n    \"チョ/ ch o\",\n    \"トゥ/ t u\",\n    \"トャ/ ty a\",\n    \"トュ/ ty u\",\n    \"トョ/ ty o\",\n    \"ドァ/ d o a\",\n    \"ドゥ/ d u\",\n    \"ドャ/ dy a\",\n    \"ドュ/ dy u\",\n    \"ドョ/ dy o\",\n    \"ドォ/ d o:\",\n    \"ニャ/ ny a\",\n    \"ニュ/ ny u\",\n    \"ニョ/ ny o\",\n    \"ヒャ/ hy a\",\n    \"ヒュ/ hy u\",\n    \"ヒョ/ hy o\",\n    \"ミャ/ my a\",\n    \"ミュ/ my u\",\n    \"ミョ/ my o\",\n    \"リャ/ ry a\",\n    \"リュ/ ry u\",\n    \"リョ/ ry o\",\n    \"ギャ/ gy a\",\n    \"ギュ/ gy u\",\n    \"ギョ/ gy o\",\n    \"ヂェ/ j e\",\n    \"ヂャ/ j a\",\n    \"ヂュ/ j u\",\n    \"ヂョ/ j o\",\n    \"ジェ/ j e\",\n    \"ジャ/ j a\",\n    \"ジュ/ j u\",\n    \"ジョ/ j o\",\n    \"ビャ/ by a\",\n    \"ビュ/ by u\",\n    \"ビョ/ by o\",\n    \"ピャ/ py a\",\n    \"ピュ/ py u\",\n    \"ピョ/ py o\",\n    \"ウァ/ u a\",\n    \"ウィ/ w i\",\n    \"ウェ/ w e\",\n    \"ウォ/ w o\",\n    \"ファ/ f a\",\n    \"フィ/ f i\",\n    \"フゥ/ f u\",\n    \"フャ/ hy a\",\n    \"フュ/ hy u\",\n    \"フョ/ hy o\",\n    \"フェ/ f e\",\n    \"フォ/ f o\",\n    \"ヴァ/ b a\",\n    \"ヴィ/ b i\",\n    \"ヴェ/ b e\",\n    \"ヴォ/ b o\",\n    \"ヴュ/ by u\",\n    # Conversion of 1 letter\n    \"ア/ a\",\n    \"イ/ i\",\n    \"ウ/ u\",\n    \"エ/ e\",\n    \"オ/ o\",\n    \"カ/ k a\",\n    \"キ/ k i\",\n    \"ク/ k u\",\n    \"ケ/ k e\",\n    \"コ/ k o\",\n    \"サ/ s a\",\n    \"シ/ sh i\",\n    \"ス/ s u\",\n    \"セ/ s e\",\n    \"ソ/ s o\",\n    \"タ/ t a\",\n    \"チ/ ch i\",\n    \"ツ/ ts u\",\n    \"テ/ t e\",\n    \"ト/ t o\",\n    \"ナ/ n a\",\n    \"ニ/ n i\",\n    \"ヌ/ n u\",\n    \"ネ/ n e\",\n    \"ノ/ n o\",\n    \"ハ/ h a\",\n    \"ヒ/ h i\",\n    \"フ/ f u\",\n    \"ヘ/ h e\",\n    \"ホ/ h o\",\n    \"マ/ m a\",\n    \"ミ/ m i\",\n    \"ム/ m u\",\n    \"メ/ m e\",\n    \"モ/ m o\",\n    \"ラ/ r a\",\n    \"リ/ r i\",\n    \"ル/ r u\",\n    \"レ/ r e\",\n    \"ロ/ r o\",\n    \"ガ/ g a\",\n    \"ギ/ g i\",\n    \"グ/ g u\",\n    \"ゲ/ g e\",\n    \"ゴ/ g o\",\n    \"ザ/ z a\",\n    \"ジ/ j i\",\n    \"ズ/ z u\",\n    \"ゼ/ z e\",\n    \"ゾ/ z o\",\n    \"ダ/ d a\",\n    \"ヂ/ j i\",\n    \"ヅ/ z u\",\n    \"デ/ d e\",\n    \"ド/ d o\",\n    \"バ/ b a\",\n    \"ビ/ b i\",\n    \"ブ/ b u\",\n    \"ベ/ b e\",\n    \"ボ/ b o\",\n    \"パ/ p a\",\n    \"ピ/ p i\",\n    \"プ/ p u\",\n    \"ペ/ p e\",\n    \"ポ/ p o\",\n    \"ヤ/ y a\",\n    \"ユ/ y u\",\n    \"ヨ/ y o\",\n    \"ワ/ w a\",\n    \"ヰ/ i\",\n    \"ヱ/ e\",\n    \"ヲ/ o\",\n    \"ン/ N\",\n    \"ッ/ q\",\n    \"ヴ/ b u\",\n    \"ー/:\",\n    # Try converting broken text\n    \"ァ/ a\",\n    \"ィ/ i\",\n    \"ゥ/ u\",\n    \"ェ/ e\",\n    \"ォ/ o\",\n    \"ヮ/ w a\",\n    \"ォ/ o\",\n    # Try converting broken text\n    \"ャ/ y a\",\n    \"ョ/ y o\",\n    \"ュ/ y u\",\n    \"琦/ ch i\",\n    \"ヶ/ k e\",\n    \"髙/ t a k a\",\n    \"煞/ sh y a\",\n    # Symbols\n    \"、/ ,\",\n    \"。/ .\",\n    \"！/ !\",\n    \"？/ ?\",\n    \"・/ ,\",\n]\n\n_COLON_RX = re.compile(\":+\")\n_REJECT_RX = re.compile(\"[^ a-zA-Z:,.?]\")\n\n\ndef _makerulemap():\n    l = [tuple(x.split(\"/\")) for x in _CONVRULES]\n    return tuple({k: v for k, v in l if len(k) == i} for i in (1, 2))\n\n\n_RULEMAP1, _RULEMAP2 = _makerulemap()\n\n\ndef kata2phoneme(text: str) -> str:\n    \"\"\"Convert katakana text to phonemes.\"\"\"\n    text = text.strip()\n    res = []\n    while text:\n        if len(text) >= 2:\n            x = _RULEMAP2.get(text[:2])\n            if x is not None:\n                text = text[2:]\n                res += x.split(\" \")[1:]\n                continue\n        x = _RULEMAP1.get(text[0])\n        if x is not None:\n            text = text[1:]\n            res += x.split(\" \")[1:]\n            continue\n        res.append(text[0])\n        text = text[1:]\n    # res = _COLON_RX.sub(\":\", res)\n    return res\n\n\n_KATAKANA = \"\".join(chr(ch) for ch in range(ord(\"ァ\"), ord(\"ン\") + 1))\n_HIRAGANA = \"\".join(chr(ch) for ch in range(ord(\"ぁ\"), ord(\"ん\") + 1))\n_HIRA2KATATRANS = str.maketrans(_HIRAGANA, _KATAKANA)\n\n\ndef hira2kata(text: str) -> str:\n    text = text.translate(_HIRA2KATATRANS)\n    return text.replace(\"う゛\", \"ヴ\")\n\n\n_SYMBOL_TOKENS = set(list(\"・、。？！\"))\n_NO_YOMI_TOKENS = set(list(\"「」『』―（）［］[]\"))\n_TAGGER = MeCab.Tagger()\n\n\ndef text2kata(text: str) -> str:\n    parsed = _TAGGER.parse(text)\n    res = []\n    for line in parsed.split(\"\\n\"):\n        if line == \"EOS\":\n            break\n        parts = line.split(\"\\t\")\n\n        word, yomi = parts[0], parts[1]\n        if yomi:\n            try:\n                res.append(yomi.split(',')[6])\n            except Exception:\n                import pdb; pdb.set_trace()\n        else:\n            if word in _SYMBOL_TOKENS:\n                res.append(word)\n            elif word in (\"っ\", \"ッ\"):\n                res.append(\"ッ\")\n            elif word in _NO_YOMI_TOKENS:\n                pass\n            else:\n                res.append(word)\n    return hira2kata(\"\".join(res))\n\n\n_ALPHASYMBOL_YOMI = {\n    \"#\": \"シャープ\",\n    \"%\": \"パーセント\",\n    \"&\": \"アンド\",\n    \"+\": \"プラス\",\n    \"-\": \"マイナス\",\n    \":\": \"コロン\",\n    \";\": \"セミコロン\",\n    \"<\": \"小なり\",\n    \"=\": \"イコール\",\n    \">\": \"大なり\",\n    \"@\": \"アット\",\n    \"a\": \"エー\",\n    \"b\": \"ビー\",\n    \"c\": \"シー\",\n    \"d\": \"ディー\",\n    \"e\": \"イー\",\n    \"f\": \"エフ\",\n    \"g\": \"ジー\",\n    \"h\": \"エイチ\",\n    \"i\": \"アイ\",\n    \"j\": \"ジェー\",\n    \"k\": \"ケー\",\n    \"l\": \"エル\",\n    \"m\": \"エム\",\n    \"n\": \"エヌ\",\n    \"o\": \"オー\",\n    \"p\": \"ピー\",\n    \"q\": \"キュー\",\n    \"r\": \"アール\",\n    \"s\": \"エス\",\n    \"t\": \"ティー\",\n    \"u\": \"ユー\",\n    \"v\": \"ブイ\",\n    \"w\": \"ダブリュー\",\n    \"x\": \"エックス\",\n    \"y\": \"ワイ\",\n    \"z\": \"ゼット\",\n    \"α\": \"アルファ\",\n    \"β\": \"ベータ\",\n    \"γ\": \"ガンマ\",\n    \"δ\": \"デルタ\",\n    \"ε\": \"イプシロン\",\n    \"ζ\": \"ゼータ\",\n    \"η\": \"イータ\",\n    \"θ\": \"シータ\",\n    \"ι\": \"イオタ\",\n    \"κ\": \"カッパ\",\n    \"λ\": \"ラムダ\",\n    \"μ\": \"ミュー\",\n    \"ν\": \"ニュー\",\n    \"ξ\": \"クサイ\",\n    \"ο\": \"オミクロン\",\n    \"π\": \"パイ\",\n    \"ρ\": \"ロー\",\n    \"σ\": \"シグマ\",\n    \"τ\": \"タウ\",\n    \"υ\": \"ウプシロン\",\n    \"φ\": \"ファイ\",\n    \"χ\": \"カイ\",\n    \"ψ\": \"プサイ\",\n    \"ω\": \"オメガ\",\n}\n\n\n_NUMBER_WITH_SEPARATOR_RX = re.compile(\"[0-9]{1,3}(,[0-9]{3})+\")\n_CURRENCY_MAP = {\"$\": \"ドル\", \"¥\": \"円\", \"£\": \"ポンド\", \"€\": \"ユーロ\"}\n_CURRENCY_RX = re.compile(r\"([$¥£€])([0-9.]*[0-9])\")\n_NUMBER_RX = re.compile(r\"[0-9]+(\\.[0-9]+)?\")\n\n\ndef japanese_convert_numbers_to_words(text: str) -> str:\n    res = _NUMBER_WITH_SEPARATOR_RX.sub(lambda m: m[0].replace(\",\", \"\"), text)\n    res = _CURRENCY_RX.sub(lambda m: m[2] + _CURRENCY_MAP.get(m[1], m[1]), res)\n    res = _NUMBER_RX.sub(lambda m: num2words(m[0], lang=\"ja\"), res)\n    return res\n\n\ndef japanese_convert_alpha_symbols_to_words(text: str) -> str:\n    return \"\".join([_ALPHASYMBOL_YOMI.get(ch, ch) for ch in text.lower()])\n\n\ndef japanese_text_to_phonemes(text: str) -> str:\n    \"\"\"Convert Japanese text to phonemes.\"\"\"\n    res = unicodedata.normalize(\"NFKC\", text)\n    res = japanese_convert_numbers_to_words(res)\n    res = japanese_convert_alpha_symbols_to_words(res)\n    res = text2kata(res)\n    res = kata2phoneme(res)\n    return res\n\n\ndef is_japanese_character(char):\n    # 定义日语文字系统的 Unicode 范围\n    japanese_ranges = [\n        (0x3040, 0x309F),  # 平假名\n        (0x30A0, 0x30FF),  # 片假名\n        (0x4E00, 0x9FFF),  # 汉字 (CJK Unified Ideographs)\n        (0x3400, 0x4DBF),  # 汉字扩展 A\n        (0x20000, 0x2A6DF),  # 汉字扩展 B\n        # 可以根据需要添加其他汉字扩展范围\n    ]\n\n    # 将字符的 Unicode 编码转换为整数\n    char_code = ord(char)\n\n    # 检查字符是否在任何一个日语范围内\n    for start, end in japanese_ranges:\n        if start <= char_code <= end:\n            return True\n\n    return False\n\n\nrep_map = {\n    \"：\": \",\",\n    \"；\": \",\",\n    \"，\": \",\",\n    \"。\": \".\",\n    \"！\": \"!\",\n    \"？\": \"?\",\n    \"\\n\": \".\",\n    \"·\": \",\",\n    \"、\": \",\",\n    \"...\": \"…\",\n}\n\n\ndef replace_punctuation(text):\n    pattern = re.compile(\"|\".join(re.escape(p) for p in rep_map.keys()))\n\n    replaced_text = pattern.sub(lambda x: rep_map[x.group()], text)\n\n    replaced_text = re.sub(\n        r\"[^\\u3040-\\u309F\\u30A0-\\u30FF\\u4E00-\\u9FFF\\u3400-\\u4DBF\"\n        + \"\".join(punctuation)\n        + r\"]+\",\n        \"\",\n        replaced_text,\n    )\n\n    return replaced_text\n\nfrom pykakasi import kakasi\n# Initialize kakasi object\nkakasi = kakasi()\n# Set options for converting Chinese characters to Katakana\nkakasi.setMode(\"J\", \"K\")  # Chinese to Katakana\nkakasi.setMode(\"H\", \"K\")  # Hiragana to Katakana\n# Convert Chinese characters to Katakana\nconv = kakasi.getConverter()\n\ndef text_normalize(text):\n    res = unicodedata.normalize(\"NFKC\", text)\n    res = japanese_convert_numbers_to_words(res)\n    res = \"\".join([i for i in res if is_japanese_character(i)])\n    res = replace_punctuation(res)\n    res = conv.do(res)\n    return res\n\n\ndef distribute_phone(n_phone, n_word):\n    phones_per_word = [0] * n_word\n    for task in range(n_phone):\n        min_tasks = min(phones_per_word)\n        min_index = phones_per_word.index(min_tasks)\n        phones_per_word[min_index] += 1\n    return phones_per_word\n\n\n\n# tokenizer = AutoTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-v3')\n\nmodel_id = 'tohoku-nlp/bert-base-japanese-v3'\ntokenizer = AutoTokenizer.from_pretrained(model_id)\ndef g2p(norm_text):\n\n    tokenized = tokenizer.tokenize(norm_text)\n    phs = []\n    ph_groups = []\n    for t in tokenized:\n        if not t.startswith(\"#\"):\n            ph_groups.append([t])\n        else:\n            ph_groups[-1].append(t.replace(\"#\", \"\"))\n    word2ph = []\n    for group in ph_groups:\n        text = \"\"\n        for ch in group:\n            text += ch\n        if text == '[UNK]':\n            phs += ['_']\n            word2ph += [1]\n            continue\n        elif text in punctuation:\n            phs += [text]\n            word2ph += [1]\n            continue\n        # import pdb; pdb.set_trace()\n        # phonemes = japanese_text_to_phonemes(text)\n        phonemes = kata2phoneme(text)\n        # phonemes = [i for i in phonemes if i in symbols]\n        for i in phonemes:\n            assert i in symbols, (group, norm_text, tokenized, i)\n        phone_len = len(phonemes)\n        word_len = len(group)\n\n        aaa = distribute_phone(phone_len, word_len)\n        assert len(aaa) == word_len\n        word2ph += aaa\n\n        phs += phonemes\n    phones = [\"_\"] + phs + [\"_\"]\n    tones = [0 for i in phones]\n    word2ph =  [1] + word2ph + [1]\n    assert len(word2ph) == len(tokenized) + 2\n    return phones, tones, word2ph\n\ndef get_bert_feature(text, word2ph, device):\n    from text import japanese_bert\n\n    return japanese_bert.get_bert_feature(text, word2ph, device=device)\n\n\nif __name__ == \"__main__\":\n    # tokenizer = AutoTokenizer.from_pretrained(\"./bert/bert-base-japanese-v3\")\n    text = \"こんにちは、世界！...\"\n    text = 'ええ、僕はおきなと申します。こちらの小さいわらべは杏子。ご挨拶が遅れてしまいすみません。あなたの名は?'\n    text = 'あの、お前以外のみんなは、全員生きてること?'\n    from text.japanese_bert import get_bert_feature\n\n    text = text_normalize(text)\n    print(text)\n    phones, tones, word2ph = g2p(text)\n    bert = get_bert_feature(text, word2ph)\n\n    print(phones, tones, word2ph, bert.shape)\n\n# if __name__ == '__main__':\n#     from pykakasi import kakasi\n#     # Initialize kakasi object\n#     kakasi = kakasi()\n\n#     # Set options for converting Chinese characters to Katakana\n#     kakasi.setMode(\"J\", \"H\")  # Chinese to Katakana\n#     kakasi.setMode(\"K\", \"H\")  # Hiragana to Katakana\n\n#     # Convert Chinese characters to Katakana\n#     conv = kakasi.getConverter()\n#     katakana_text = conv.do('ええ、僕はおきなと申します。こちらの小さいわらべは杏子。ご挨拶が遅れてしまいすみません。あなたの名は?')  # Replace with your Chinese text\n\n#     print(katakana_text)  # Output: ニーハオセカイ\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/japanese_bert.py",
    "content": "import torch\nfrom transformers import AutoTokenizer, AutoModelForMaskedLM\nimport sys\n\n\nmodels = {}\ntokenizers = {}\ndef get_bert_feature(text, word2ph, device=None, model_id='tohoku-nlp/bert-base-japanese-v3'):\n    global model\n    global tokenizer\n\n    if (\n        sys.platform == \"darwin\"\n        and torch.backends.mps.is_available()\n        and device == \"cpu\"\n    ):\n        device = \"mps\"\n    if not device:\n        device = \"cuda\"\n    if model_id not in models:\n        model = AutoModelForMaskedLM.from_pretrained(model_id).to(\n            device\n        )\n        models[model_id] = model\n        tokenizer = AutoTokenizer.from_pretrained(model_id)\n        tokenizers[model_id] = tokenizer\n    else:\n        model = models[model_id]\n        tokenizer = tokenizers[model_id]\n\n\n    with torch.no_grad():\n        inputs = tokenizer(text, return_tensors=\"pt\")\n        tokenized = tokenizer.tokenize(text)\n        for i in inputs:\n            inputs[i] = inputs[i].to(device)\n        res = model(**inputs, output_hidden_states=True)\n        res = torch.cat(res[\"hidden_states\"][-3:-2], -1)[0].cpu()\n\n    assert inputs[\"input_ids\"].shape[-1] == len(word2ph), f\"{inputs['input_ids'].shape[-1]}/{len(word2ph)}\"\n    word2phone = word2ph\n    phone_level_feature = []\n    for i in range(len(word2phone)):\n        repeat_feature = res[i].repeat(word2phone[i], 1)\n        phone_level_feature.append(repeat_feature)\n\n    phone_level_feature = torch.cat(phone_level_feature, dim=0)\n\n    return phone_level_feature.T\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/ko_dictionary.py",
    "content": "# coding: utf-8\r\n# Add the word you want to the dictionary.\r\netc_dictionary = {\"1+1\": \"원플러스원\", \"2+1\": \"투플러스원\"}\r\n\r\n\r\nenglish_dictionary = {\r\n    \"KOREA\": \"코리아\",\r\n    \"IDOL\": \"아이돌\",\r\n    \"IT\": \"아이티\",\r\n    \"IQ\": \"아이큐\",\r\n    \"UP\": \"업\",\r\n    \"DOWN\": \"다운\",\r\n    \"PC\": \"피씨\",\r\n    \"CCTV\": \"씨씨티비\",\r\n    \"SNS\": \"에스엔에스\",\r\n    \"AI\": \"에이아이\",\r\n    \"CEO\": \"씨이오\",\r\n    \"A\": \"에이\",\r\n    \"B\": \"비\",\r\n    \"C\": \"씨\",\r\n    \"D\": \"디\",\r\n    \"E\": \"이\",\r\n    \"F\": \"에프\",\r\n    \"G\": \"지\",\r\n    \"H\": \"에이치\",\r\n    \"I\": \"아이\",\r\n    \"J\": \"제이\",\r\n    \"K\": \"케이\",\r\n    \"L\": \"엘\",\r\n    \"M\": \"엠\",\r\n    \"N\": \"엔\",\r\n    \"O\": \"오\",\r\n    \"P\": \"피\",\r\n    \"Q\": \"큐\",\r\n    \"R\": \"알\",\r\n    \"S\": \"에스\",\r\n    \"T\": \"티\",\r\n    \"U\": \"유\",\r\n    \"V\": \"브이\",\r\n    \"W\": \"더블유\",\r\n    \"X\": \"엑스\",\r\n    \"Y\": \"와이\",\r\n    \"Z\": \"제트\",\r\n}\r\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/korean.py",
    "content": "# Convert Japanese text to phonemes which is\n# compatible with Julius https://github.com/julius-speech/segmentation-kit\nimport re\nimport unicodedata\n\nfrom transformers import AutoTokenizer\n\nfrom . import punctuation, symbols\n\n\nfrom num2words import num2words\nfrom melo.text.ko_dictionary import english_dictionary, etc_dictionary\nfrom anyascii import anyascii\nfrom jamo import hangul_to_jamo\n\ndef normalize(text):\n    text = text.strip()\n    text = re.sub(\"[⺀-⺙⺛-⻳⼀-⿕々〇〡-〩〸-〺〻㐀-䶵一-鿃豈-鶴侮-頻並-龎]\", \"\", text)\n    text = normalize_with_dictionary(text, etc_dictionary)\n    text = normalize_english(text)\n    text = text.lower()\n    return text\n\n\ndef normalize_with_dictionary(text, dic):\n    if any(key in text for key in dic.keys()):\n        pattern = re.compile(\"|\".join(re.escape(key) for key in dic.keys()))\n        return pattern.sub(lambda x: dic[x.group()], text)\n    return text\n\n\ndef normalize_english(text):\n    def fn(m):\n        word = m.group()\n        if word in english_dictionary:\n            return english_dictionary.get(word)\n        return word\n\n    text = re.sub(\"([A-Za-z]+)\", fn, text)\n    return text\n\n\ng2p_kr = None\ndef korean_text_to_phonemes(text, character: str = \"hangeul\") -> str:\n    \"\"\"\n\n    The input and output values look the same, but they are different in Unicode.\n\n    example :\n\n        input = '하늘' (Unicode : \\ud558\\ub298), (하 + 늘)\n        output = '하늘' (Unicode :\\u1112\\u1161\\u1102\\u1173\\u11af), (ᄒ + ᅡ + ᄂ + ᅳ + ᆯ)\n\n    \"\"\"\n    global g2p_kr  # pylint: disable=global-statement\n    if g2p_kr is None:\n        from g2pkk import G2p\n\n        g2p_kr = G2p()\n\n    if character == \"english\":\n        from anyascii import anyascii\n        text = normalize(text)\n        text = g2p_kr(text)\n        text = anyascii(text)\n        return text\n\n    text = normalize(text)\n    text = g2p_kr(text)\n    text = list(hangul_to_jamo(text))  # '하늘' --> ['ᄒ', 'ᅡ', 'ᄂ', 'ᅳ', 'ᆯ']\n    return \"\".join(text)\n\ndef text_normalize(text):\n    # res = unicodedata.normalize(\"NFKC\", text)\n    # res = japanese_convert_numbers_to_words(res)\n    # # res = \"\".join([i for i in res if is_japanese_character(i)])\n    # res = replace_punctuation(res)\n    text = normalize(text)\n    return text\n\n\ndef distribute_phone(n_phone, n_word):\n    phones_per_word = [0] * n_word\n    for task in range(n_phone):\n        min_tasks = min(phones_per_word)\n        min_index = phones_per_word.index(min_tasks)\n        phones_per_word[min_index] += 1\n    return phones_per_word\n\n\n\n# tokenizer = AutoTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-v3')\n\nmodel_id = 'kykim/bert-kor-base'\ntokenizer = AutoTokenizer.from_pretrained(model_id)\n\ndef g2p(norm_text):\n    tokenized = tokenizer.tokenize(norm_text)\n    phs = []\n    ph_groups = []\n    for t in tokenized:\n        if not t.startswith(\"#\"):\n            ph_groups.append([t])\n        else:\n            ph_groups[-1].append(t.replace(\"#\", \"\"))\n    word2ph = []\n    for group in ph_groups:\n        text = \"\"\n        for ch in group:\n            text += ch\n        if text == '[UNK]':\n            phs += ['_']\n            word2ph += [1]\n            continue\n        elif text in punctuation:\n            phs += [text]\n            word2ph += [1]\n            continue\n        # import pdb; pdb.set_trace()\n        # phonemes = japanese_text_to_phonemes(text)\n        # text = g2p_kr(text)\n        phonemes = korean_text_to_phonemes(text)\n        # import pdb; pdb.set_trace()\n        # # phonemes = [i for i in phonemes if i in symbols]\n        # for i in phonemes:\n        #     assert i in symbols, (group, norm_text, tokenized, i)\n        phone_len = len(phonemes)\n        word_len = len(group)\n\n        aaa = distribute_phone(phone_len, word_len)\n        assert len(aaa) == word_len\n        word2ph += aaa\n\n        phs += phonemes\n    phones = [\"_\"] + phs + [\"_\"]\n    tones = [0 for i in phones]\n    word2ph =  [1] + word2ph + [1]\n    assert len(word2ph) == len(tokenized) + 2\n    return phones, tones, word2ph\n\ndef get_bert_feature(text, word2ph, device='cuda'):\n    from . import japanese_bert\n    return japanese_bert.get_bert_feature(text, word2ph, device=device, model_id=model_id)\n\n\nif __name__ == \"__main__\":\n    # tokenizer = AutoTokenizer.from_pretrained(\"./bert/bert-base-japanese-v3\")\n    from text.symbols import symbols\n    text = \"전 제 일의 가치와 폰타인 대중들이 한 일의 의미를 잘 압니다. 앞으로도 전 제 일에 자부심을 갖고 살아갈 겁니다\"\n    import json\n\n    # genshin_data = json.load(open('/data/zwl/workspace/StarRail_Datasets/Index & Scripts/Index/1.3/Korean.json'))\n    genshin_data = json.load(open('/data/zwl/workspace/Genshin_Datasets/Index & Script/AI Hobbyist Version/Index/4.1/KR_output.json'))\n    from tqdm import tqdm\n    new_symbols = []\n    for key, item in tqdm(genshin_data.items()):\n        texts = item.get('voiceContent', '')\n        if isinstance(texts, list):\n            texts = ','.join(texts)\n        if texts is None:\n            continue\n        if len(texts) == 0:\n            continue\n\n        text = text_normalize(text)\n        phones, tones, word2ph = g2p(text)\n        bert = get_bert_feature(text, word2ph)\n        import  pdb; pdb.set_trace()\n        for ph in phones:\n            if ph not in symbols and ph not in new_symbols:\n                new_symbols.append(ph)\n                print('update!, now symbols:')\n                print(new_symbols)\n                with open('korean_symbol.txt', 'w') as f:\n                    f.write(f'{new_symbols}')\n\n        \n\n# if __name__ == '__main__':\n#     from pykakasi import kakasi\n#     # Initialize kakasi object\n#     kakasi = kakasi()\n\n#     # Set options for converting Chinese characters to Katakana\n#     kakasi.setMode(\"J\", \"H\")  # Chinese to Katakana\n#     kakasi.setMode(\"K\", \"H\")  # Hiragana to Katakana\n\n#     # Convert Chinese characters to Katakana\n#     conv = kakasi.getConverter()\n#     katakana_text = conv.do('ええ、僕はおきなと申します。こちらの小さいわらべは杏子。ご挨拶が遅れてしまいすみません。あなたの名は?')  # Replace with your Chinese text\n\n#     print(katakana_text)  # Output: ニーハオセカイ"
  },
  {
    "path": "xinference/thirdparty/melo/text/opencpop-strict.txt",
    "content": "a\tAA a\nai\tAA ai\nan\tAA an\nang\tAA ang\nao\tAA ao\nba\tb a\nbai\tb ai\nban\tb an\nbang\tb ang\nbao\tb ao\nbei\tb ei\nben\tb en\nbeng\tb eng\nbi\tb i\nbian\tb ian\nbiao\tb iao\nbie\tb ie\nbin\tb in\nbing\tb ing\nbo\tb o\nbu\tb u\nca\tc a\ncai\tc ai\ncan\tc an\ncang\tc ang\ncao\tc ao\nce\tc e\ncei\tc ei\ncen\tc en\nceng\tc eng\ncha\tch a\nchai\tch ai\nchan\tch an\nchang\tch ang\nchao\tch ao\nche\tch e\nchen\tch en\ncheng\tch eng\nchi\tch ir\nchong\tch ong\nchou\tch ou\nchu\tch u\nchua\tch ua\nchuai\tch uai\nchuan\tch uan\nchuang\tch uang\nchui\tch ui\nchun\tch un\nchuo\tch uo\nci\tc i0\ncong\tc ong\ncou\tc ou\ncu\tc u\ncuan\tc uan\ncui\tc ui\ncun\tc un\ncuo\tc uo\nda\td a\ndai\td ai\ndan\td an\ndang\td ang\ndao\td ao\nde\td e\ndei\td ei\nden\td en\ndeng\td eng\ndi\td i\ndia\td ia\ndian\td ian\ndiao\td iao\ndie\td ie\nding\td ing\ndiu\td iu\ndong\td ong\ndou\td ou\ndu\td u\nduan\td uan\ndui\td ui\ndun\td un\nduo\td uo\ne\tEE e\nei\tEE ei\nen\tEE en\neng\tEE eng\ner\tEE er\nfa\tf a\nfan\tf an\nfang\tf ang\nfei\tf ei\nfen\tf en\nfeng\tf eng\nfo\tf o\nfou\tf ou\nfu\tf u\nga\tg a\ngai\tg ai\ngan\tg an\ngang\tg ang\ngao\tg ao\nge\tg e\ngei\tg ei\ngen\tg en\ngeng\tg eng\ngong\tg ong\ngou\tg ou\ngu\tg u\ngua\tg ua\nguai\tg uai\nguan\tg uan\nguang\tg uang\ngui\tg ui\ngun\tg un\nguo\tg uo\nha\th a\nhai\th ai\nhan\th an\nhang\th ang\nhao\th ao\nhe\th e\nhei\th ei\nhen\th en\nheng\th eng\nhong\th ong\nhou\th ou\nhu\th u\nhua\th ua\nhuai\th uai\nhuan\th uan\nhuang\th uang\nhui\th ui\nhun\th un\nhuo\th uo\nji\tj i\njia\tj ia\njian\tj ian\njiang\tj iang\njiao\tj iao\njie\tj ie\njin\tj in\njing\tj ing\njiong\tj iong\njiu\tj iu\nju\tj v\njv\tj v\njuan\tj van\njvan\tj van\njue\tj ve\njve\tj ve\njun\tj vn\njvn\tj vn\nka\tk a\nkai\tk ai\nkan\tk an\nkang\tk ang\nkao\tk ao\nke\tk e\nkei\tk ei\nken\tk en\nkeng\tk eng\nkong\tk ong\nkou\tk ou\nku\tk u\nkua\tk ua\nkuai\tk uai\nkuan\tk uan\nkuang\tk uang\nkui\tk ui\nkun\tk un\nkuo\tk uo\nla\tl a\nlai\tl ai\nlan\tl an\nlang\tl ang\nlao\tl ao\nle\tl e\nlei\tl ei\nleng\tl eng\nli\tl i\nlia\tl ia\nlian\tl ian\nliang\tl iang\nliao\tl iao\nlie\tl ie\nlin\tl in\nling\tl ing\nliu\tl iu\nlo\tl o\nlong\tl ong\nlou\tl ou\nlu\tl u\nluan\tl uan\nlun\tl un\nluo\tl uo\nlv\tl v\nlve\tl ve\nma\tm a\nmai\tm ai\nman\tm an\nmang\tm ang\nmao\tm ao\nme\tm e\nmei\tm ei\nmen\tm en\nmeng\tm eng\nmi\tm i\nmian\tm ian\nmiao\tm iao\nmie\tm ie\nmin\tm in\nming\tm ing\nmiu\tm iu\nmo\tm o\nmou\tm ou\nmu\tm u\nna\tn a\nnai\tn ai\nnan\tn an\nnang\tn ang\nnao\tn ao\nne\tn e\nnei\tn ei\nnen\tn en\nneng\tn eng\nni\tn i\nnian\tn ian\nniang\tn iang\nniao\tn iao\nnie\tn ie\nnin\tn in\nning\tn ing\nniu\tn iu\nnong\tn ong\nnou\tn ou\nnu\tn u\nnuan\tn uan\nnun\tn un\nnuo\tn uo\nnv\tn v\nnve\tn ve\no\tOO o\nou\tOO ou\npa\tp a\npai\tp ai\npan\tp an\npang\tp ang\npao\tp ao\npei\tp ei\npen\tp en\npeng\tp eng\npi\tp i\npian\tp ian\npiao\tp iao\npie\tp ie\npin\tp in\nping\tp ing\npo\tp o\npou\tp ou\npu\tp u\nqi\tq i\nqia\tq ia\nqian\tq ian\nqiang\tq iang\nqiao\tq iao\nqie\tq ie\nqin\tq in\nqing\tq ing\nqiong\tq iong\nqiu\tq iu\nqu\tq v\nqv\tq v\nquan\tq van\nqvan\tq van\nque\tq ve\nqve\tq ve\nqun\tq vn\nqvn\tq vn\nran\tr an\nrang\tr ang\nrao\tr ao\nre\tr e\nren\tr en\nreng\tr eng\nri\tr ir\nrong\tr ong\nrou\tr ou\nru\tr u\nrua\tr ua\nruan\tr uan\nrui\tr ui\nrun\tr un\nruo\tr uo\nsa\ts a\nsai\ts ai\nsan\ts an\nsang\ts ang\nsao\ts ao\nse\ts e\nsen\ts en\nseng\ts eng\nsha\tsh a\nshai\tsh ai\nshan\tsh an\nshang\tsh ang\nshao\tsh ao\nshe\tsh e\nshei\tsh ei\nshen\tsh en\nsheng\tsh eng\nshi\tsh ir\nshou\tsh ou\nshu\tsh u\nshua\tsh ua\nshuai\tsh uai\nshuan\tsh uan\nshuang\tsh uang\nshui\tsh ui\nshun\tsh un\nshuo\tsh uo\nsi\ts i0\nsong\ts ong\nsou\ts ou\nsu\ts u\nsuan\ts uan\nsui\ts ui\nsun\ts un\nsuo\ts uo\nta\tt a\ntai\tt ai\ntan\tt an\ntang\tt ang\ntao\tt ao\nte\tt e\ntei\tt ei\nteng\tt eng\nti\tt i\ntian\tt ian\ntiao\tt iao\ntie\tt ie\nting\tt ing\ntong\tt ong\ntou\tt ou\ntu\tt u\ntuan\tt uan\ntui\tt ui\ntun\tt un\ntuo\tt uo\nwa\tw a\nwai\tw ai\nwan\tw an\nwang\tw ang\nwei\tw ei\nwen\tw en\nweng\tw eng\nwo\tw o\nwu\tw u\nxi\tx i\nxia\tx ia\nxian\tx ian\nxiang\tx iang\nxiao\tx iao\nxie\tx ie\nxin\tx in\nxing\tx ing\nxiong\tx iong\nxiu\tx iu\nxu\tx v\nxv\tx v\nxuan\tx van\nxvan\tx van\nxue\tx ve\nxve\tx ve\nxun\tx vn\nxvn\tx vn\nya\ty a\nyan\ty En\nyang\ty ang\nyao\ty ao\nye\ty E\nyi\ty i\nyin\ty in\nying\ty ing\nyo\ty o\nyong\ty ong\nyou\ty ou\nyu\ty v\nyv\ty v\nyuan\ty van\nyvan\ty van\nyue\ty ve\nyve\ty ve\nyun\ty vn\nyvn\ty vn\nza\tz a\nzai\tz ai\nzan\tz an\nzang\tz ang\nzao\tz ao\nze\tz e\nzei\tz ei\nzen\tz en\nzeng\tz eng\nzha\tzh a\nzhai\tzh ai\nzhan\tzh an\nzhang\tzh ang\nzhao\tzh ao\nzhe\tzh e\nzhei\tzh ei\nzhen\tzh en\nzheng\tzh eng\nzhi\tzh ir\nzhong\tzh ong\nzhou\tzh ou\nzhu\tzh u\nzhua\tzh ua\nzhuai\tzh uai\nzhuan\tzh uan\nzhuang\tzh uang\nzhui\tzh ui\nzhun\tzh un\nzhuo\tzh uo\nzi\tz i0\nzong\tz ong\nzou\tz ou\nzu\tz u\nzuan\tz uan\nzui\tz ui\nzun\tz un\nzuo\tz uo\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/spanish.py",
    "content": "import pickle\nimport os\nimport re\n\nfrom . import symbols\nfrom .es_phonemizer import cleaner as es_cleaner\nfrom .es_phonemizer import es_to_ipa\nfrom transformers import AutoTokenizer\n\n\ndef distribute_phone(n_phone, n_word):\n    phones_per_word = [0] * n_word\n    for task in range(n_phone):\n        min_tasks = min(phones_per_word)\n        min_index = phones_per_word.index(min_tasks)\n        phones_per_word[min_index] += 1\n    return phones_per_word\n\ndef text_normalize(text):\n    text = es_cleaner.spanish_cleaners(text)\n    return text\n\ndef post_replace_ph(ph):\n    rep_map = {\n        \"：\": \",\",\n        \"；\": \",\",\n        \"，\": \",\",\n        \"。\": \".\",\n        \"！\": \"!\",\n        \"？\": \"?\",\n        \"\\n\": \".\",\n        \"·\": \",\",\n        \"、\": \",\",\n        \"...\": \"…\"\n    }\n    if ph in rep_map.keys():\n        ph = rep_map[ph]\n    if ph in symbols:\n        return ph\n    if ph not in symbols:\n        ph = \"UNK\"\n    return ph\n\ndef refine_ph(phn):\n    tone = 0\n    if re.search(r\"\\d$\", phn):\n        tone = int(phn[-1]) + 1\n        phn = phn[:-1]\n    return phn.lower(), tone\n\n\ndef refine_syllables(syllables):\n    tones = []\n    phonemes = []\n    for phn_list in syllables:\n        for i in range(len(phn_list)):\n            phn = phn_list[i]\n            phn, tone = refine_ph(phn)\n            phonemes.append(phn)\n            tones.append(tone)\n    return phonemes, tones\n\n\n# model_id = 'bert-base-uncased'\nmodel_id = 'dccuchile/bert-base-spanish-wwm-uncased'\ntokenizer = AutoTokenizer.from_pretrained(model_id)\n\ndef g2p(text, pad_start_end=True, tokenized=None):\n    if tokenized is None:\n        tokenized = tokenizer.tokenize(text)\n    # import pdb; pdb.set_trace()\n    phs = []\n    ph_groups = []\n    for t in tokenized:\n        if not t.startswith(\"#\"):\n            ph_groups.append([t])\n        else:\n            ph_groups[-1].append(t.replace(\"#\", \"\"))\n    \n    phones = []\n    tones = []\n    word2ph = []\n    # print(ph_groups)\n    for group in ph_groups:\n        w = \"\".join(group)\n        phone_len = 0\n        word_len = len(group)\n        if w == '[UNK]':\n            phone_list = ['UNK']\n        else:\n            phone_list = list(filter(lambda p: p != \" \", es_to_ipa.es2ipa(w)))\n        \n        for ph in phone_list:\n            phones.append(ph)\n            tones.append(0)\n            phone_len += 1\n        aaa = distribute_phone(phone_len, word_len)\n        word2ph += aaa\n        # print(phone_list, aaa)\n        # print('=' * 10)\n\n    if pad_start_end:\n        phones = [\"_\"] + phones + [\"_\"]\n        tones = [0] + tones + [0]\n        word2ph = [1] + word2ph + [1]\n    return phones, tones, word2ph\n\ndef get_bert_feature(text, word2ph, device=None):\n    from text import spanish_bert\n    return spanish_bert.get_bert_feature(text, word2ph, device=device)\n\nif __name__ == \"__main__\":\n    text = \"en nuestros tiempos estos dos pueblos ilustres empiezan a curarse, gracias sólo a la sana y vigorosa higiene de 1789.\"\n    # print(text)\n    text = text_normalize(text)\n    print(text)\n    phones, tones, word2ph = g2p(text)\n    bert = get_bert_feature(text, word2ph)\n    print(phones)\n    print(len(phones), tones, sum(word2ph), bert.shape)\n\n\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/spanish_bert.py",
    "content": "import torch\nfrom transformers import AutoTokenizer, AutoModelForMaskedLM\nimport sys\n\nmodel_id = 'dccuchile/bert-base-spanish-wwm-uncased'\ntokenizer = AutoTokenizer.from_pretrained(model_id)\nmodel = None\n\ndef get_bert_feature(text, word2ph, device=None):\n    global model\n    if (\n        sys.platform == \"darwin\"\n        and torch.backends.mps.is_available()\n        and device == \"cpu\"\n    ):\n        device = \"mps\"\n    if not device:\n        device = \"cuda\"\n    if model is None:\n        model = AutoModelForMaskedLM.from_pretrained(model_id).to(\n            device\n        )\n    with torch.no_grad():\n        inputs = tokenizer(text, return_tensors=\"pt\")\n        for i in inputs:\n            inputs[i] = inputs[i].to(device)\n        res = model(**inputs, output_hidden_states=True)\n        res = torch.cat(res[\"hidden_states\"][-3:-2], -1)[0].cpu()\n        \n    assert inputs[\"input_ids\"].shape[-1] == len(word2ph)\n    word2phone = word2ph\n    phone_level_feature = []\n    for i in range(len(word2phone)):\n        repeat_feature = res[i].repeat(word2phone[i], 1)\n        phone_level_feature.append(repeat_feature)\n\n    phone_level_feature = torch.cat(phone_level_feature, dim=0)\n\n    return phone_level_feature.T\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/symbols.py",
    "content": "# punctuation = [\"!\", \"?\", \"…\", \",\", \".\", \"'\", \"-\"]\npunctuation = [\"!\", \"?\", \"…\", \",\", \".\", \"'\", \"-\", \"¿\", \"¡\"]\npu_symbols = punctuation + [\"SP\", \"UNK\"]\npad = \"_\"\n\n# chinese\nzh_symbols = [\n    \"E\",\n    \"En\",\n    \"a\",\n    \"ai\",\n    \"an\",\n    \"ang\",\n    \"ao\",\n    \"b\",\n    \"c\",\n    \"ch\",\n    \"d\",\n    \"e\",\n    \"ei\",\n    \"en\",\n    \"eng\",\n    \"er\",\n    \"f\",\n    \"g\",\n    \"h\",\n    \"i\",\n    \"i0\",\n    \"ia\",\n    \"ian\",\n    \"iang\",\n    \"iao\",\n    \"ie\",\n    \"in\",\n    \"ing\",\n    \"iong\",\n    \"ir\",\n    \"iu\",\n    \"j\",\n    \"k\",\n    \"l\",\n    \"m\",\n    \"n\",\n    \"o\",\n    \"ong\",\n    \"ou\",\n    \"p\",\n    \"q\",\n    \"r\",\n    \"s\",\n    \"sh\",\n    \"t\",\n    \"u\",\n    \"ua\",\n    \"uai\",\n    \"uan\",\n    \"uang\",\n    \"ui\",\n    \"un\",\n    \"uo\",\n    \"v\",\n    \"van\",\n    \"ve\",\n    \"vn\",\n    \"w\",\n    \"x\",\n    \"y\",\n    \"z\",\n    \"zh\",\n    \"AA\",\n    \"EE\",\n    \"OO\",\n]\nnum_zh_tones = 6\n\n# japanese\nja_symbols = [\n    \"N\",\n    \"a\",\n    \"a:\",\n    \"b\",\n    \"by\",\n    \"ch\",\n    \"d\",\n    \"dy\",\n    \"e\",\n    \"e:\",\n    \"f\",\n    \"g\",\n    \"gy\",\n    \"h\",\n    \"hy\",\n    \"i\",\n    \"i:\",\n    \"j\",\n    \"k\",\n    \"ky\",\n    \"m\",\n    \"my\",\n    \"n\",\n    \"ny\",\n    \"o\",\n    \"o:\",\n    \"p\",\n    \"py\",\n    \"q\",\n    \"r\",\n    \"ry\",\n    \"s\",\n    \"sh\",\n    \"t\",\n    \"ts\",\n    \"ty\",\n    \"u\",\n    \"u:\",\n    \"w\",\n    \"y\",\n    \"z\",\n    \"zy\",\n]\nnum_ja_tones = 1\n\n# English\nen_symbols = [\n    \"aa\",\n    \"ae\",\n    \"ah\",\n    \"ao\",\n    \"aw\",\n    \"ay\",\n    \"b\",\n    \"ch\",\n    \"d\",\n    \"dh\",\n    \"eh\",\n    \"er\",\n    \"ey\",\n    \"f\",\n    \"g\",\n    \"hh\",\n    \"ih\",\n    \"iy\",\n    \"jh\",\n    \"k\",\n    \"l\",\n    \"m\",\n    \"n\",\n    \"ng\",\n    \"ow\",\n    \"oy\",\n    \"p\",\n    \"r\",\n    \"s\",\n    \"sh\",\n    \"t\",\n    \"th\",\n    \"uh\",\n    \"uw\",\n    \"V\",\n    \"w\",\n    \"y\",\n    \"z\",\n    \"zh\",\n]\nnum_en_tones = 4\n\n# Korean\nkr_symbols = ['ᄌ', 'ᅥ', 'ᆫ', 'ᅦ', 'ᄋ', 'ᅵ', 'ᄅ', 'ᅴ', 'ᄀ', 'ᅡ', 'ᄎ', 'ᅪ', 'ᄑ', 'ᅩ', 'ᄐ', 'ᄃ', 'ᅢ', 'ᅮ', 'ᆼ', 'ᅳ', 'ᄒ', 'ᄆ', 'ᆯ', 'ᆷ', 'ᄂ', 'ᄇ', 'ᄉ', 'ᆮ', 'ᄁ', 'ᅬ', 'ᅣ', 'ᄄ', 'ᆨ', 'ᄍ', 'ᅧ', 'ᄏ', 'ᆸ', 'ᅭ', '(', 'ᄊ', ')', 'ᅲ', 'ᅨ', 'ᄈ', 'ᅱ', 'ᅯ', 'ᅫ', 'ᅰ', 'ᅤ', '~', '\\\\', '[', ']', '/', '^', ':', 'ㄸ', '*']\nnum_kr_tones = 1\n\n# Spanish\nes_symbols = [\n        \"N\",\n        \"Q\",\n        \"a\",\n        \"b\",\n        \"d\",\n        \"e\",\n        \"f\",\n        \"g\",\n        \"h\",\n        \"i\",\n        \"j\",\n        \"k\",\n        \"l\",\n        \"m\",\n        \"n\",\n        \"o\",\n        \"p\",\n        \"s\",\n        \"t\",\n        \"u\",\n        \"v\",\n        \"w\",\n        \"x\",\n        \"y\",\n        \"z\",\n        \"ɑ\",\n        \"æ\",\n        \"ʃ\",\n        \"ʑ\",\n        \"ç\",\n        \"ɯ\",\n        \"ɪ\",\n        \"ɔ\",\n        \"ɛ\",\n        \"ɹ\",\n        \"ð\",\n        \"ə\",\n        \"ɫ\",\n        \"ɥ\",\n        \"ɸ\",\n        \"ʊ\",\n        \"ɾ\",\n        \"ʒ\",\n        \"θ\",\n        \"β\",\n        \"ŋ\",\n        \"ɦ\",\n        \"ɡ\",\n        \"r\",\n        \"ɲ\",\n        \"ʝ\",\n        \"ɣ\",\n        \"ʎ\",\n        \"ˈ\",\n        \"ˌ\",\n        \"ː\"\n    ]\nnum_es_tones = 1\n\n# French \nfr_symbols = [\n    \"\\u0303\",\n    \"œ\",\n    \"ø\",\n    \"ʁ\",\n    \"ɒ\",\n    \"ʌ\",\n    \"ɜ\",\n    \"ɐ\"\n]\nnum_fr_tones = 1\n\n# German \nde_symbols = [\n    \"ʏ\",\n    \"̩\"\n  ]\nnum_de_tones = 1\n\n# Russian \nru_symbols = [\n    \"ɭ\",\n    \"ʲ\",\n    \"ɕ\",\n    \"\\\"\",\n    \"ɵ\",\n    \"^\",\n    \"ɬ\"\n]\nnum_ru_tones = 1\n\n# combine all symbols\nnormal_symbols = sorted(set(zh_symbols + ja_symbols + en_symbols + kr_symbols + es_symbols + fr_symbols + de_symbols + ru_symbols))\nsymbols = [pad] + normal_symbols + pu_symbols\nsil_phonemes_ids = [symbols.index(i) for i in pu_symbols]\n\n# combine all tones\nnum_tones = num_zh_tones + num_ja_tones + num_en_tones + num_kr_tones + num_es_tones + num_fr_tones + num_de_tones + num_ru_tones\n\n# language maps\nlanguage_id_map = {\"ZH\": 0, \"JP\": 1, \"EN\": 2, \"ZH_MIX_EN\": 3, 'KR': 4, 'ES': 5, 'SP': 5 ,'FR': 6}\nnum_languages = len(language_id_map.keys())\n\nlanguage_tone_start_map = {\n    \"ZH\": 0,\n    \"ZH_MIX_EN\": 0,\n    \"JP\": num_zh_tones,\n    \"EN\": num_zh_tones + num_ja_tones,\n    'KR': num_zh_tones + num_ja_tones + num_en_tones,\n    \"ES\": num_zh_tones + num_ja_tones + num_en_tones + num_kr_tones,\n    \"SP\": num_zh_tones + num_ja_tones + num_en_tones + num_kr_tones,\n    \"FR\": num_zh_tones + num_ja_tones + num_en_tones + num_kr_tones + num_es_tones,\n}\n\nif __name__ == \"__main__\":\n    a = set(zh_symbols)\n    b = set(en_symbols)\n    print(sorted(a & b))\n"
  },
  {
    "path": "xinference/thirdparty/melo/text/tone_sandhi.py",
    "content": "# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom typing import List\nfrom typing import Tuple\n\nimport jieba\nfrom pypinyin import lazy_pinyin\nfrom pypinyin import Style\n\n\nclass ToneSandhi:\n    def __init__(self):\n        self.must_neural_tone_words = {\n            \"麻烦\",\n            \"麻利\",\n            \"鸳鸯\",\n            \"高粱\",\n            \"骨头\",\n            \"骆驼\",\n            \"马虎\",\n            \"首饰\",\n            \"馒头\",\n            \"馄饨\",\n            \"风筝\",\n            \"难为\",\n            \"队伍\",\n            \"阔气\",\n            \"闺女\",\n            \"门道\",\n            \"锄头\",\n            \"铺盖\",\n            \"铃铛\",\n            \"铁匠\",\n            \"钥匙\",\n            \"里脊\",\n            \"里头\",\n            \"部分\",\n            \"那么\",\n            \"道士\",\n            \"造化\",\n            \"迷糊\",\n            \"连累\",\n            \"这么\",\n            \"这个\",\n            \"运气\",\n            \"过去\",\n            \"软和\",\n            \"转悠\",\n            \"踏实\",\n            \"跳蚤\",\n            \"跟头\",\n            \"趔趄\",\n            \"财主\",\n            \"豆腐\",\n            \"讲究\",\n            \"记性\",\n            \"记号\",\n            \"认识\",\n            \"规矩\",\n            \"见识\",\n            \"裁缝\",\n            \"补丁\",\n            \"衣裳\",\n            \"衣服\",\n            \"衙门\",\n            \"街坊\",\n            \"行李\",\n            \"行当\",\n            \"蛤蟆\",\n            \"蘑菇\",\n            \"薄荷\",\n            \"葫芦\",\n            \"葡萄\",\n            \"萝卜\",\n            \"荸荠\",\n            \"苗条\",\n            \"苗头\",\n            \"苍蝇\",\n            \"芝麻\",\n            \"舒服\",\n            \"舒坦\",\n            \"舌头\",\n            \"自在\",\n            \"膏药\",\n            \"脾气\",\n            \"脑袋\",\n            \"脊梁\",\n            \"能耐\",\n            \"胳膊\",\n            \"胭脂\",\n            \"胡萝\",\n            \"胡琴\",\n            \"胡同\",\n            \"聪明\",\n            \"耽误\",\n            \"耽搁\",\n            \"耷拉\",\n            \"耳朵\",\n            \"老爷\",\n            \"老实\",\n            \"老婆\",\n            \"老头\",\n            \"老太\",\n            \"翻腾\",\n            \"罗嗦\",\n            \"罐头\",\n            \"编辑\",\n            \"结实\",\n            \"红火\",\n            \"累赘\",\n            \"糨糊\",\n            \"糊涂\",\n            \"精神\",\n            \"粮食\",\n            \"簸箕\",\n            \"篱笆\",\n            \"算计\",\n            \"算盘\",\n            \"答应\",\n            \"笤帚\",\n            \"笑语\",\n            \"笑话\",\n            \"窟窿\",\n            \"窝囊\",\n            \"窗户\",\n            \"稳当\",\n            \"稀罕\",\n            \"称呼\",\n            \"秧歌\",\n            \"秀气\",\n            \"秀才\",\n            \"福气\",\n            \"祖宗\",\n            \"砚台\",\n            \"码头\",\n            \"石榴\",\n            \"石头\",\n            \"石匠\",\n            \"知识\",\n            \"眼睛\",\n            \"眯缝\",\n            \"眨巴\",\n            \"眉毛\",\n            \"相声\",\n            \"盘算\",\n            \"白净\",\n            \"痢疾\",\n            \"痛快\",\n            \"疟疾\",\n            \"疙瘩\",\n            \"疏忽\",\n            \"畜生\",\n            \"生意\",\n            \"甘蔗\",\n            \"琵琶\",\n            \"琢磨\",\n            \"琉璃\",\n            \"玻璃\",\n            \"玫瑰\",\n            \"玄乎\",\n            \"狐狸\",\n            \"状元\",\n            \"特务\",\n            \"牲口\",\n            \"牙碜\",\n            \"牌楼\",\n            \"爽快\",\n            \"爱人\",\n            \"热闹\",\n            \"烧饼\",\n            \"烟筒\",\n            \"烂糊\",\n            \"点心\",\n            \"炊帚\",\n            \"灯笼\",\n            \"火候\",\n            \"漂亮\",\n            \"滑溜\",\n            \"溜达\",\n            \"温和\",\n            \"清楚\",\n            \"消息\",\n            \"浪头\",\n            \"活泼\",\n            \"比方\",\n            \"正经\",\n            \"欺负\",\n            \"模糊\",\n            \"槟榔\",\n            \"棺材\",\n            \"棒槌\",\n            \"棉花\",\n            \"核桃\",\n            \"栅栏\",\n            \"柴火\",\n            \"架势\",\n            \"枕头\",\n            \"枇杷\",\n            \"机灵\",\n            \"本事\",\n            \"木头\",\n            \"木匠\",\n            \"朋友\",\n            \"月饼\",\n            \"月亮\",\n            \"暖和\",\n            \"明白\",\n            \"时候\",\n            \"新鲜\",\n            \"故事\",\n            \"收拾\",\n            \"收成\",\n            \"提防\",\n            \"挖苦\",\n            \"挑剔\",\n            \"指甲\",\n            \"指头\",\n            \"拾掇\",\n            \"拳头\",\n            \"拨弄\",\n            \"招牌\",\n            \"招呼\",\n            \"抬举\",\n            \"护士\",\n            \"折腾\",\n            \"扫帚\",\n            \"打量\",\n            \"打算\",\n            \"打点\",\n            \"打扮\",\n            \"打听\",\n            \"打发\",\n            \"扎实\",\n            \"扁担\",\n            \"戒指\",\n            \"懒得\",\n            \"意识\",\n            \"意思\",\n            \"情形\",\n            \"悟性\",\n            \"怪物\",\n            \"思量\",\n            \"怎么\",\n            \"念头\",\n            \"念叨\",\n            \"快活\",\n            \"忙活\",\n            \"志气\",\n            \"心思\",\n            \"得罪\",\n            \"张罗\",\n            \"弟兄\",\n            \"开通\",\n            \"应酬\",\n            \"庄稼\",\n            \"干事\",\n            \"帮手\",\n            \"帐篷\",\n            \"希罕\",\n            \"师父\",\n            \"师傅\",\n            \"巴结\",\n            \"巴掌\",\n            \"差事\",\n            \"工夫\",\n            \"岁数\",\n            \"屁股\",\n            \"尾巴\",\n            \"少爷\",\n            \"小气\",\n            \"小伙\",\n            \"将就\",\n            \"对头\",\n            \"对付\",\n            \"寡妇\",\n            \"家伙\",\n            \"客气\",\n            \"实在\",\n            \"官司\",\n            \"学问\",\n            \"学生\",\n            \"字号\",\n            \"嫁妆\",\n            \"媳妇\",\n            \"媒人\",\n            \"婆家\",\n            \"娘家\",\n            \"委屈\",\n            \"姑娘\",\n            \"姐夫\",\n            \"妯娌\",\n            \"妥当\",\n            \"妖精\",\n            \"奴才\",\n            \"女婿\",\n            \"头发\",\n            \"太阳\",\n            \"大爷\",\n            \"大方\",\n            \"大意\",\n            \"大夫\",\n            \"多少\",\n            \"多么\",\n            \"外甥\",\n            \"壮实\",\n            \"地道\",\n            \"地方\",\n            \"在乎\",\n            \"困难\",\n            \"嘴巴\",\n            \"嘱咐\",\n            \"嘟囔\",\n            \"嘀咕\",\n            \"喜欢\",\n            \"喇嘛\",\n            \"喇叭\",\n            \"商量\",\n            \"唾沫\",\n            \"哑巴\",\n            \"哈欠\",\n            \"哆嗦\",\n            \"咳嗽\",\n            \"和尚\",\n            \"告诉\",\n            \"告示\",\n            \"含糊\",\n            \"吓唬\",\n            \"后头\",\n            \"名字\",\n            \"名堂\",\n            \"合同\",\n            \"吆喝\",\n            \"叫唤\",\n            \"口袋\",\n            \"厚道\",\n            \"厉害\",\n            \"千斤\",\n            \"包袱\",\n            \"包涵\",\n            \"匀称\",\n            \"勤快\",\n            \"动静\",\n            \"动弹\",\n            \"功夫\",\n            \"力气\",\n            \"前头\",\n            \"刺猬\",\n            \"刺激\",\n            \"别扭\",\n            \"利落\",\n            \"利索\",\n            \"利害\",\n            \"分析\",\n            \"出息\",\n            \"凑合\",\n            \"凉快\",\n            \"冷战\",\n            \"冤枉\",\n            \"冒失\",\n            \"养活\",\n            \"关系\",\n            \"先生\",\n            \"兄弟\",\n            \"便宜\",\n            \"使唤\",\n            \"佩服\",\n            \"作坊\",\n            \"体面\",\n            \"位置\",\n            \"似的\",\n            \"伙计\",\n            \"休息\",\n            \"什么\",\n            \"人家\",\n            \"亲戚\",\n            \"亲家\",\n            \"交情\",\n            \"云彩\",\n            \"事情\",\n            \"买卖\",\n            \"主意\",\n            \"丫头\",\n            \"丧气\",\n            \"两口\",\n            \"东西\",\n            \"东家\",\n            \"世故\",\n            \"不由\",\n            \"不在\",\n            \"下水\",\n            \"下巴\",\n            \"上头\",\n            \"上司\",\n            \"丈夫\",\n            \"丈人\",\n            \"一辈\",\n            \"那个\",\n            \"菩萨\",\n            \"父亲\",\n            \"母亲\",\n            \"咕噜\",\n            \"邋遢\",\n            \"费用\",\n            \"冤家\",\n            \"甜头\",\n            \"介绍\",\n            \"荒唐\",\n            \"大人\",\n            \"泥鳅\",\n            \"幸福\",\n            \"熟悉\",\n            \"计划\",\n            \"扑腾\",\n            \"蜡烛\",\n            \"姥爷\",\n            \"照顾\",\n            \"喉咙\",\n            \"吉他\",\n            \"弄堂\",\n            \"蚂蚱\",\n            \"凤凰\",\n            \"拖沓\",\n            \"寒碜\",\n            \"糟蹋\",\n            \"倒腾\",\n            \"报复\",\n            \"逻辑\",\n            \"盘缠\",\n            \"喽啰\",\n            \"牢骚\",\n            \"咖喱\",\n            \"扫把\",\n            \"惦记\",\n        }\n        self.must_not_neural_tone_words = {\n            \"男子\",\n            \"女子\",\n            \"分子\",\n            \"原子\",\n            \"量子\",\n            \"莲子\",\n            \"石子\",\n            \"瓜子\",\n            \"电子\",\n            \"人人\",\n            \"虎虎\",\n        }\n        self.punc = \"：，；。？！“”‘’':,;.?!\"\n\n    # the meaning of jieba pos tag: https://blog.csdn.net/weixin_44174352/article/details/113731041\n    # e.g.\n    # word: \"家里\"\n    # pos: \"s\"\n    # finals: ['ia1', 'i3']\n    def _neural_sandhi(self, word: str, pos: str, finals: List[str]) -> List[str]:\n        # reduplication words for n. and v. e.g. 奶奶, 试试, 旺旺\n        for j, item in enumerate(word):\n            if (\n                j - 1 >= 0\n                and item == word[j - 1]\n                and pos[0] in {\"n\", \"v\", \"a\"}\n                and word not in self.must_not_neural_tone_words\n            ):\n                finals[j] = finals[j][:-1] + \"5\"\n        ge_idx = word.find(\"个\")\n        if len(word) >= 1 and word[-1] in \"吧呢啊呐噻嘛吖嗨呐哦哒额滴哩哟喽啰耶喔诶\":\n            finals[-1] = finals[-1][:-1] + \"5\"\n        elif len(word) >= 1 and word[-1] in \"的地得\":\n            finals[-1] = finals[-1][:-1] + \"5\"\n        # e.g. 走了, 看着, 去过\n        # elif len(word) == 1 and word in \"了着过\" and pos in {\"ul\", \"uz\", \"ug\"}:\n        #     finals[-1] = finals[-1][:-1] + \"5\"\n        elif (\n            len(word) > 1\n            and word[-1] in \"们子\"\n            and pos in {\"r\", \"n\"}\n            and word not in self.must_not_neural_tone_words\n        ):\n            finals[-1] = finals[-1][:-1] + \"5\"\n        # e.g. 桌上, 地下, 家里\n        elif len(word) > 1 and word[-1] in \"上下里\" and pos in {\"s\", \"l\", \"f\"}:\n            finals[-1] = finals[-1][:-1] + \"5\"\n        # e.g. 上来, 下去\n        elif len(word) > 1 and word[-1] in \"来去\" and word[-2] in \"上下进出回过起开\":\n            finals[-1] = finals[-1][:-1] + \"5\"\n        # 个做量词\n        elif (\n            ge_idx >= 1\n            and (word[ge_idx - 1].isnumeric() or word[ge_idx - 1] in \"几有两半多各整每做是\")\n        ) or word == \"个\":\n            finals[ge_idx] = finals[ge_idx][:-1] + \"5\"\n        else:\n            if (\n                word in self.must_neural_tone_words\n                or word[-2:] in self.must_neural_tone_words\n            ):\n                finals[-1] = finals[-1][:-1] + \"5\"\n\n        word_list = self._split_word(word)\n        finals_list = [finals[: len(word_list[0])], finals[len(word_list[0]) :]]\n        for i, word in enumerate(word_list):\n            # conventional neural in Chinese\n            if (\n                word in self.must_neural_tone_words\n                or word[-2:] in self.must_neural_tone_words\n            ):\n                finals_list[i][-1] = finals_list[i][-1][:-1] + \"5\"\n        finals = sum(finals_list, [])\n        return finals\n\n    def _bu_sandhi(self, word: str, finals: List[str]) -> List[str]:\n        # e.g. 看不懂\n        if len(word) == 3 and word[1] == \"不\":\n            finals[1] = finals[1][:-1] + \"5\"\n        else:\n            for i, char in enumerate(word):\n                # \"不\" before tone4 should be bu2, e.g. 不怕\n                if char == \"不\" and i + 1 < len(word) and finals[i + 1][-1] == \"4\":\n                    finals[i] = finals[i][:-1] + \"2\"\n        return finals\n\n    def _yi_sandhi(self, word: str, finals: List[str]) -> List[str]:\n        # \"一\" in number sequences, e.g. 一零零, 二一零\n        if word.find(\"一\") != -1 and all(\n            [item.isnumeric() for item in word if item != \"一\"]\n        ):\n            return finals\n        # \"一\" between reduplication words should be yi5, e.g. 看一看\n        elif len(word) == 3 and word[1] == \"一\" and word[0] == word[-1]:\n            finals[1] = finals[1][:-1] + \"5\"\n        # when \"一\" is ordinal word, it should be yi1\n        elif word.startswith(\"第一\"):\n            finals[1] = finals[1][:-1] + \"1\"\n        else:\n            for i, char in enumerate(word):\n                if char == \"一\" and i + 1 < len(word):\n                    # \"一\" before tone4 should be yi2, e.g. 一段\n                    if finals[i + 1][-1] == \"4\":\n                        finals[i] = finals[i][:-1] + \"2\"\n                    # \"一\" before non-tone4 should be yi4, e.g. 一天\n                    else:\n                        # \"一\" 后面如果是标点，还读一声\n                        if word[i + 1] not in self.punc:\n                            finals[i] = finals[i][:-1] + \"4\"\n        return finals\n\n    def _split_word(self, word: str) -> List[str]:\n        word_list = jieba.cut_for_search(word)\n        word_list = sorted(word_list, key=lambda i: len(i), reverse=False)\n        first_subword = word_list[0]\n        first_begin_idx = word.find(first_subword)\n        if first_begin_idx == 0:\n            second_subword = word[len(first_subword) :]\n            new_word_list = [first_subword, second_subword]\n        else:\n            second_subword = word[: -len(first_subword)]\n            new_word_list = [second_subword, first_subword]\n        return new_word_list\n\n    def _three_sandhi(self, word: str, finals: List[str]) -> List[str]:\n        if len(word) == 2 and self._all_tone_three(finals):\n            finals[0] = finals[0][:-1] + \"2\"\n        elif len(word) == 3:\n            word_list = self._split_word(word)\n            if self._all_tone_three(finals):\n                #  disyllabic + monosyllabic, e.g. 蒙古/包\n                if len(word_list[0]) == 2:\n                    finals[0] = finals[0][:-1] + \"2\"\n                    finals[1] = finals[1][:-1] + \"2\"\n                #  monosyllabic + disyllabic, e.g. 纸/老虎\n                elif len(word_list[0]) == 1:\n                    finals[1] = finals[1][:-1] + \"2\"\n            else:\n                finals_list = [finals[: len(word_list[0])], finals[len(word_list[0]) :]]\n                if len(finals_list) == 2:\n                    for i, sub in enumerate(finals_list):\n                        # e.g. 所有/人\n                        if self._all_tone_three(sub) and len(sub) == 2:\n                            finals_list[i][0] = finals_list[i][0][:-1] + \"2\"\n                        # e.g. 好/喜欢\n                        elif (\n                            i == 1\n                            and not self._all_tone_three(sub)\n                            and finals_list[i][0][-1] == \"3\"\n                            and finals_list[0][-1][-1] == \"3\"\n                        ):\n                            finals_list[0][-1] = finals_list[0][-1][:-1] + \"2\"\n                        finals = sum(finals_list, [])\n        # split idiom into two words who's length is 2\n        elif len(word) == 4:\n            finals_list = [finals[:2], finals[2:]]\n            finals = []\n            for sub in finals_list:\n                if self._all_tone_three(sub):\n                    sub[0] = sub[0][:-1] + \"2\"\n                finals += sub\n\n        return finals\n\n    def _all_tone_three(self, finals: List[str]) -> bool:\n        return all(x[-1] == \"3\" for x in finals)\n\n    # merge \"不\" and the word behind it\n    # if don't merge, \"不\" sometimes appears alone according to jieba, which may occur sandhi error\n    def _merge_bu(self, seg: List[Tuple[str, str]]) -> List[Tuple[str, str]]:\n        new_seg = []\n        last_word = \"\"\n        for word, pos in seg:\n            if last_word == \"不\":\n                word = last_word + word\n            if word != \"不\":\n                new_seg.append((word, pos))\n            last_word = word[:]\n        if last_word == \"不\":\n            new_seg.append((last_word, \"d\"))\n            last_word = \"\"\n        return new_seg\n\n    # function 1: merge \"一\" and reduplication words in it's left and right, e.g. \"听\",\"一\",\"听\" ->\"听一听\"\n    # function 2: merge single  \"一\" and the word behind it\n    # if don't merge, \"一\" sometimes appears alone according to jieba, which may occur sandhi error\n    # e.g.\n    # input seg: [('听', 'v'), ('一', 'm'), ('听', 'v')]\n    # output seg: [['听一听', 'v']]\n    def _merge_yi(self, seg: List[Tuple[str, str]]) -> List[Tuple[str, str]]:\n        new_seg = []\n        # function 1\n        for i, (word, pos) in enumerate(seg):\n            if (\n                i - 1 >= 0\n                and word == \"一\"\n                and i + 1 < len(seg)\n                and seg[i - 1][0] == seg[i + 1][0]\n                and seg[i - 1][1] == \"v\"\n            ):\n                new_seg[i - 1][0] = new_seg[i - 1][0] + \"一\" + new_seg[i - 1][0]\n            else:\n                if (\n                    i - 2 >= 0\n                    and seg[i - 1][0] == \"一\"\n                    and seg[i - 2][0] == word\n                    and pos == \"v\"\n                ):\n                    continue\n                else:\n                    new_seg.append([word, pos])\n        seg = new_seg\n        new_seg = []\n        # function 2\n        for i, (word, pos) in enumerate(seg):\n            if new_seg and new_seg[-1][0] == \"一\":\n                new_seg[-1][0] = new_seg[-1][0] + word\n            else:\n                new_seg.append([word, pos])\n        return new_seg\n\n    # the first and the second words are all_tone_three\n    def _merge_continuous_three_tones(\n        self, seg: List[Tuple[str, str]]\n    ) -> List[Tuple[str, str]]:\n        new_seg = []\n        sub_finals_list = [\n            lazy_pinyin(word, neutral_tone_with_five=True, style=Style.FINALS_TONE3)\n            for (word, pos) in seg\n        ]\n        assert len(sub_finals_list) == len(seg)\n        merge_last = [False] * len(seg)\n        for i, (word, pos) in enumerate(seg):\n            if (\n                i - 1 >= 0\n                and self._all_tone_three(sub_finals_list[i - 1])\n                and self._all_tone_three(sub_finals_list[i])\n                and not merge_last[i - 1]\n            ):\n                # if the last word is reduplication, not merge, because reduplication need to be _neural_sandhi\n                if (\n                    not self._is_reduplication(seg[i - 1][0])\n                    and len(seg[i - 1][0]) + len(seg[i][0]) <= 3\n                ):\n                    new_seg[-1][0] = new_seg[-1][0] + seg[i][0]\n                    merge_last[i] = True\n                else:\n                    new_seg.append([word, pos])\n            else:\n                new_seg.append([word, pos])\n\n        return new_seg\n\n    def _is_reduplication(self, word: str) -> bool:\n        return len(word) == 2 and word[0] == word[1]\n\n    # the last char of first word and the first char of second word is tone_three\n    def _merge_continuous_three_tones_2(\n        self, seg: List[Tuple[str, str]]\n    ) -> List[Tuple[str, str]]:\n        new_seg = []\n        sub_finals_list = [\n            lazy_pinyin(word, neutral_tone_with_five=True, style=Style.FINALS_TONE3)\n            for (word, pos) in seg\n        ]\n        assert len(sub_finals_list) == len(seg)\n        merge_last = [False] * len(seg)\n        for i, (word, pos) in enumerate(seg):\n            if (\n                i - 1 >= 0\n                and sub_finals_list[i - 1][-1][-1] == \"3\"\n                and sub_finals_list[i][0][-1] == \"3\"\n                and not merge_last[i - 1]\n            ):\n                # if the last word is reduplication, not merge, because reduplication need to be _neural_sandhi\n                if (\n                    not self._is_reduplication(seg[i - 1][0])\n                    and len(seg[i - 1][0]) + len(seg[i][0]) <= 3\n                ):\n                    new_seg[-1][0] = new_seg[-1][0] + seg[i][0]\n                    merge_last[i] = True\n                else:\n                    new_seg.append([word, pos])\n            else:\n                new_seg.append([word, pos])\n        return new_seg\n\n    def _merge_er(self, seg: List[Tuple[str, str]]) -> List[Tuple[str, str]]:\n        new_seg = []\n        for i, (word, pos) in enumerate(seg):\n            if i - 1 >= 0 and word == \"儿\" and seg[i - 1][0] != \"#\":\n                new_seg[-1][0] = new_seg[-1][0] + seg[i][0]\n            else:\n                new_seg.append([word, pos])\n        return new_seg\n\n    def _merge_reduplication(self, seg: List[Tuple[str, str]]) -> List[Tuple[str, str]]:\n        new_seg = []\n        for i, (word, pos) in enumerate(seg):\n            if new_seg and word == new_seg[-1][0]:\n                new_seg[-1][0] = new_seg[-1][0] + seg[i][0]\n            else:\n                new_seg.append([word, pos])\n        return new_seg\n\n    def pre_merge_for_modify(self, seg: List[Tuple[str, str]]) -> List[Tuple[str, str]]:\n        seg = self._merge_bu(seg)\n        try:\n            seg = self._merge_yi(seg)\n        except Exception:\n            print(\"_merge_yi failed\")\n        seg = self._merge_reduplication(seg)\n        seg = self._merge_continuous_three_tones(seg)\n        seg = self._merge_continuous_three_tones_2(seg)\n        seg = self._merge_er(seg)\n        return seg\n\n    def modified_tone(self, word: str, pos: str, finals: List[str]) -> List[str]:\n        finals = self._bu_sandhi(word, finals)\n        finals = self._yi_sandhi(word, finals)\n        finals = self._neural_sandhi(word, pos, finals)\n        finals = self._three_sandhi(word, finals)\n        return finals\n"
  },
  {
    "path": "xinference/thirdparty/melo/train.py",
    "content": "# flake8: noqa: E402\n\nimport os\nimport torch\nfrom torch.nn import functional as F\nfrom torch.utils.data import DataLoader\nfrom torch.utils.tensorboard import SummaryWriter\nimport torch.distributed as dist\nfrom torch.nn.parallel import DistributedDataParallel as DDP\nfrom torch.cuda.amp import autocast, GradScaler\nfrom tqdm import tqdm\nimport logging\n\nlogging.getLogger(\"numba\").setLevel(logging.WARNING)\nimport commons\nimport utils\nfrom data_utils import (\n    TextAudioSpeakerLoader,\n    TextAudioSpeakerCollate,\n    DistributedBucketSampler,\n)\nfrom models import (\n    SynthesizerTrn,\n    MultiPeriodDiscriminator,\n    DurationDiscriminator,\n)\nfrom losses import generator_loss, discriminator_loss, feature_loss, kl_loss\nfrom mel_processing import mel_spectrogram_torch, spec_to_mel_torch\nfrom text.symbols import symbols\nfrom melo.download_utils import load_pretrain_model\n\ntorch.backends.cuda.matmul.allow_tf32 = True\ntorch.backends.cudnn.allow_tf32 = (\n    True  # If encontered training problem,please try to disable TF32.\n)\ntorch.set_float32_matmul_precision(\"medium\")\n\n\ntorch.backends.cudnn.benchmark = True\ntorch.backends.cuda.sdp_kernel(\"flash\")\ntorch.backends.cuda.enable_flash_sdp(True)\n# torch.backends.cuda.enable_mem_efficient_sdp(\n#     True\n# )  # Not available if torch version is lower than 2.0\ntorch.backends.cuda.enable_math_sdp(True)\nglobal_step = 0\n\n\ndef run():\n    hps = utils.get_hparams()\n    local_rank = int(os.environ[\"LOCAL_RANK\"])\n    dist.init_process_group(\n        backend=\"gloo\",\n        init_method=\"env://\",  # Due to some training problem,we proposed to use gloo instead of nccl.\n        rank=local_rank,\n    )  # Use torchrun instead of mp.spawn\n    rank = dist.get_rank()\n    n_gpus = dist.get_world_size()\n    \n    torch.manual_seed(hps.train.seed)\n    torch.cuda.set_device(rank)\n    global global_step\n    if rank == 0:\n        logger = utils.get_logger(hps.model_dir)\n        logger.info(hps)\n        utils.check_git_hash(hps.model_dir)\n        writer = SummaryWriter(log_dir=hps.model_dir)\n        writer_eval = SummaryWriter(log_dir=os.path.join(hps.model_dir, \"eval\"))\n    train_dataset = TextAudioSpeakerLoader(hps.data.training_files, hps.data)\n    train_sampler = DistributedBucketSampler(\n        train_dataset,\n        hps.train.batch_size,\n        [32, 300, 400, 500, 600, 700, 800, 900, 1000],\n        num_replicas=n_gpus,\n        rank=rank,\n        shuffle=True,\n    )\n    collate_fn = TextAudioSpeakerCollate()\n    train_loader = DataLoader(\n        train_dataset,\n        num_workers=16,\n        shuffle=False,\n        pin_memory=True,\n        collate_fn=collate_fn,\n        batch_sampler=train_sampler,\n        persistent_workers=True,\n        prefetch_factor=4,\n    )  # DataLoader config could be adjusted.\n    if rank == 0:\n        eval_dataset = TextAudioSpeakerLoader(hps.data.validation_files, hps.data)\n        eval_loader = DataLoader(\n            eval_dataset,\n            num_workers=0,\n            shuffle=False,\n            batch_size=1,\n            pin_memory=True,\n            drop_last=False,\n            collate_fn=collate_fn,\n        )\n    if (\n        \"use_noise_scaled_mas\" in hps.model.keys()\n        and hps.model.use_noise_scaled_mas is True\n    ):\n        print(\"Using noise scaled MAS for VITS2\")\n        mas_noise_scale_initial = 0.01\n        noise_scale_delta = 2e-6\n    else:\n        print(\"Using normal MAS for VITS1\")\n        mas_noise_scale_initial = 0.0\n        noise_scale_delta = 0.0\n    if (\n        \"use_duration_discriminator\" in hps.model.keys()\n        and hps.model.use_duration_discriminator is True\n    ):\n        print(\"Using duration discriminator for VITS2\")\n        net_dur_disc = DurationDiscriminator(\n            hps.model.hidden_channels,\n            hps.model.hidden_channels,\n            3,\n            0.1,\n            gin_channels=hps.model.gin_channels if hps.data.n_speakers != 0 else 0,\n        ).cuda(rank)\n    if (\n        \"use_spk_conditioned_encoder\" in hps.model.keys()\n        and hps.model.use_spk_conditioned_encoder is True\n    ):\n        if hps.data.n_speakers == 0:\n            raise ValueError(\n                \"n_speakers must be > 0 when using spk conditioned encoder to train multi-speaker model\"\n            )\n    else:\n        print(\"Using normal encoder for VITS1\")\n\n    net_g = SynthesizerTrn(\n        len(symbols),\n        hps.data.filter_length // 2 + 1,\n        hps.train.segment_size // hps.data.hop_length,\n        n_speakers=hps.data.n_speakers,\n        mas_noise_scale_initial=mas_noise_scale_initial,\n        noise_scale_delta=noise_scale_delta,\n        **hps.model,\n    ).cuda(rank)\n\n    net_d = MultiPeriodDiscriminator(hps.model.use_spectral_norm).cuda(rank)\n    optim_g = torch.optim.AdamW(\n        filter(lambda p: p.requires_grad, net_g.parameters()),\n        hps.train.learning_rate,\n        betas=hps.train.betas,\n        eps=hps.train.eps,\n    )\n    optim_d = torch.optim.AdamW(\n        net_d.parameters(),\n        hps.train.learning_rate,\n        betas=hps.train.betas,\n        eps=hps.train.eps,\n    )\n    if net_dur_disc is not None:\n        optim_dur_disc = torch.optim.AdamW(\n            net_dur_disc.parameters(),\n            hps.train.learning_rate,\n            betas=hps.train.betas,\n            eps=hps.train.eps,\n        )\n    else:\n        optim_dur_disc = None\n    net_g = DDP(net_g, device_ids=[rank], find_unused_parameters=True)\n    net_d = DDP(net_d, device_ids=[rank], find_unused_parameters=True)\n    \n    pretrain_G, pretrain_D, pretrain_dur = load_pretrain_model()\n    hps.pretrain_G = hps.pretrain_G or pretrain_G\n    hps.pretrain_D = hps.pretrain_D or pretrain_D\n    hps.pretrain_dur = hps.pretrain_dur or pretrain_dur\n\n    if hps.pretrain_G:\n        utils.load_checkpoint(\n                hps.pretrain_G,\n                net_g,\n                None,\n                skip_optimizer=True\n            )\n    if hps.pretrain_D:\n        utils.load_checkpoint(\n                hps.pretrain_D,\n                net_d,\n                None,\n                skip_optimizer=True\n            )\n\n\n    if net_dur_disc is not None:\n        net_dur_disc = DDP(net_dur_disc, device_ids=[rank], find_unused_parameters=True)\n        if hps.pretrain_dur:\n            utils.load_checkpoint(\n                    hps.pretrain_dur,\n                    net_dur_disc,\n                    None,\n                    skip_optimizer=True\n                )\n                \n    try:\n        if net_dur_disc is not None:\n            _, _, dur_resume_lr, epoch_str = utils.load_checkpoint(\n                utils.latest_checkpoint_path(hps.model_dir, \"DUR_*.pth\"),\n                net_dur_disc,\n                optim_dur_disc,\n                skip_optimizer=hps.train.skip_optimizer\n                if \"skip_optimizer\" in hps.train\n                else True,\n            )\n            _, optim_g, g_resume_lr, epoch_str = utils.load_checkpoint(\n                utils.latest_checkpoint_path(hps.model_dir, \"G_*.pth\"),\n                net_g,\n                optim_g,\n                skip_optimizer=hps.train.skip_optimizer\n                if \"skip_optimizer\" in hps.train\n                else True,\n            )\n            _, optim_d, d_resume_lr, epoch_str = utils.load_checkpoint(\n                utils.latest_checkpoint_path(hps.model_dir, \"D_*.pth\"),\n                net_d,\n                optim_d,\n                skip_optimizer=hps.train.skip_optimizer\n                if \"skip_optimizer\" in hps.train\n                else True,\n            )\n            if not optim_g.param_groups[0].get(\"initial_lr\"):\n                optim_g.param_groups[0][\"initial_lr\"] = g_resume_lr\n            if not optim_d.param_groups[0].get(\"initial_lr\"):\n                optim_d.param_groups[0][\"initial_lr\"] = d_resume_lr\n            if not optim_dur_disc.param_groups[0].get(\"initial_lr\"):\n                optim_dur_disc.param_groups[0][\"initial_lr\"] = dur_resume_lr\n\n        epoch_str = max(epoch_str, 1)\n        global_step = (epoch_str - 1) * len(train_loader)\n    except Exception as e:\n        print(e)\n        epoch_str = 1\n        global_step = 0\n\n    scheduler_g = torch.optim.lr_scheduler.ExponentialLR(\n        optim_g, gamma=hps.train.lr_decay, last_epoch=epoch_str - 2\n    )\n    scheduler_d = torch.optim.lr_scheduler.ExponentialLR(\n        optim_d, gamma=hps.train.lr_decay, last_epoch=epoch_str - 2\n    )\n    if net_dur_disc is not None:\n        scheduler_dur_disc = torch.optim.lr_scheduler.ExponentialLR(\n            optim_dur_disc, gamma=hps.train.lr_decay, last_epoch=epoch_str - 2\n        )\n    else:\n        scheduler_dur_disc = None\n    scaler = GradScaler(enabled=hps.train.fp16_run)\n\n    for epoch in range(epoch_str, hps.train.epochs + 1):\n        try:\n            if rank == 0:\n                train_and_evaluate(\n                    rank,\n                    epoch,\n                    hps,\n                    [net_g, net_d, net_dur_disc],\n                    [optim_g, optim_d, optim_dur_disc],\n                    [scheduler_g, scheduler_d, scheduler_dur_disc],\n                    scaler,\n                    [train_loader, eval_loader],\n                    logger,\n                    [writer, writer_eval],\n                )\n            else:\n                train_and_evaluate(\n                    rank,\n                    epoch,\n                    hps,\n                    [net_g, net_d, net_dur_disc],\n                    [optim_g, optim_d, optim_dur_disc],\n                    [scheduler_g, scheduler_d, scheduler_dur_disc],\n                    scaler,\n                    [train_loader, None],\n                    None,\n                    None,\n                )\n        except Exception as e:\n            print(e)\n            torch.cuda.empty_cache()\n        scheduler_g.step()\n        scheduler_d.step()\n        if net_dur_disc is not None:\n            scheduler_dur_disc.step()\n\n\ndef train_and_evaluate(\n    rank, epoch, hps, nets, optims, schedulers, scaler, loaders, logger, writers\n):\n    net_g, net_d, net_dur_disc = nets\n    optim_g, optim_d, optim_dur_disc = optims\n    scheduler_g, scheduler_d, scheduler_dur_disc = schedulers\n    train_loader, eval_loader = loaders\n    if writers is not None:\n        writer, writer_eval = writers\n\n    train_loader.batch_sampler.set_epoch(epoch)\n    global global_step\n\n    net_g.train()\n    net_d.train()\n    if net_dur_disc is not None:\n        net_dur_disc.train()\n    for batch_idx, (\n        x,\n        x_lengths,\n        spec,\n        spec_lengths,\n        y,\n        y_lengths,\n        speakers,\n        tone,\n        language,\n        bert,\n        ja_bert,\n    ) in enumerate(tqdm(train_loader)):\n        if net_g.module.use_noise_scaled_mas:\n            current_mas_noise_scale = (\n                net_g.module.mas_noise_scale_initial\n                - net_g.module.noise_scale_delta * global_step\n            )\n            net_g.module.current_mas_noise_scale = max(current_mas_noise_scale, 0.0)\n        x, x_lengths = x.cuda(rank, non_blocking=True), x_lengths.cuda(\n            rank, non_blocking=True\n        )\n        spec, spec_lengths = spec.cuda(rank, non_blocking=True), spec_lengths.cuda(\n            rank, non_blocking=True\n        )\n        y, y_lengths = y.cuda(rank, non_blocking=True), y_lengths.cuda(\n            rank, non_blocking=True\n        )\n        speakers = speakers.cuda(rank, non_blocking=True)\n        tone = tone.cuda(rank, non_blocking=True)\n        language = language.cuda(rank, non_blocking=True)\n        bert = bert.cuda(rank, non_blocking=True)\n        ja_bert = ja_bert.cuda(rank, non_blocking=True)\n\n        with autocast(enabled=hps.train.fp16_run):\n            (\n                y_hat,\n                l_length,\n                attn,\n                ids_slice,\n                x_mask,\n                z_mask,\n                (z, z_p, m_p, logs_p, m_q, logs_q),\n                (hidden_x, logw, logw_),\n            ) = net_g(\n                x,\n                x_lengths,\n                spec,\n                spec_lengths,\n                speakers,\n                tone,\n                language,\n                bert,\n                ja_bert,\n            )\n            mel = spec_to_mel_torch(\n                spec,\n                hps.data.filter_length,\n                hps.data.n_mel_channels,\n                hps.data.sampling_rate,\n                hps.data.mel_fmin,\n                hps.data.mel_fmax,\n            )\n            y_mel = commons.slice_segments(\n                mel, ids_slice, hps.train.segment_size // hps.data.hop_length\n            )\n            y_hat_mel = mel_spectrogram_torch(\n                y_hat.squeeze(1),\n                hps.data.filter_length,\n                hps.data.n_mel_channels,\n                hps.data.sampling_rate,\n                hps.data.hop_length,\n                hps.data.win_length,\n                hps.data.mel_fmin,\n                hps.data.mel_fmax,\n            )\n\n            y = commons.slice_segments(\n                y, ids_slice * hps.data.hop_length, hps.train.segment_size\n            )  # slice\n\n            # Discriminator\n            y_d_hat_r, y_d_hat_g, _, _ = net_d(y, y_hat.detach())\n            with autocast(enabled=False):\n                loss_disc, losses_disc_r, losses_disc_g = discriminator_loss(\n                    y_d_hat_r, y_d_hat_g\n                )\n                loss_disc_all = loss_disc\n            if net_dur_disc is not None:\n                y_dur_hat_r, y_dur_hat_g = net_dur_disc(\n                    hidden_x.detach(), x_mask.detach(), logw.detach(), logw_.detach()\n                )\n                with autocast(enabled=False):\n                    # TODO: I think need to mean using the mask, but for now, just mean all\n                    (\n                        loss_dur_disc,\n                        losses_dur_disc_r,\n                        losses_dur_disc_g,\n                    ) = discriminator_loss(y_dur_hat_r, y_dur_hat_g)\n                    loss_dur_disc_all = loss_dur_disc\n                optim_dur_disc.zero_grad()\n                scaler.scale(loss_dur_disc_all).backward()\n                scaler.unscale_(optim_dur_disc)\n                commons.clip_grad_value_(net_dur_disc.parameters(), None)\n                scaler.step(optim_dur_disc)\n\n        optim_d.zero_grad()\n        scaler.scale(loss_disc_all).backward()\n        scaler.unscale_(optim_d)\n        grad_norm_d = commons.clip_grad_value_(net_d.parameters(), None)\n        scaler.step(optim_d)\n\n        with autocast(enabled=hps.train.fp16_run):\n            # Generator\n            y_d_hat_r, y_d_hat_g, fmap_r, fmap_g = net_d(y, y_hat)\n            if net_dur_disc is not None:\n                y_dur_hat_r, y_dur_hat_g = net_dur_disc(hidden_x, x_mask, logw, logw_)\n            with autocast(enabled=False):\n                loss_dur = torch.sum(l_length.float())\n                loss_mel = F.l1_loss(y_mel, y_hat_mel) * hps.train.c_mel\n                loss_kl = kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * hps.train.c_kl\n\n                loss_fm = feature_loss(fmap_r, fmap_g)\n                loss_gen, losses_gen = generator_loss(y_d_hat_g)\n                loss_gen_all = loss_gen + loss_fm + loss_mel + loss_dur + loss_kl\n                if net_dur_disc is not None:\n                    loss_dur_gen, losses_dur_gen = generator_loss(y_dur_hat_g)\n                    loss_gen_all += loss_dur_gen\n        optim_g.zero_grad()\n        scaler.scale(loss_gen_all).backward()\n        scaler.unscale_(optim_g)\n        grad_norm_g = commons.clip_grad_value_(net_g.parameters(), None)\n        scaler.step(optim_g)\n        scaler.update()\n\n        if rank == 0:\n            if global_step % hps.train.log_interval == 0:\n                lr = optim_g.param_groups[0][\"lr\"]\n                losses = [loss_disc, loss_gen, loss_fm, loss_mel, loss_dur, loss_kl]\n                logger.info(\n                    \"Train Epoch: {} [{:.0f}%]\".format(\n                        epoch, 100.0 * batch_idx / len(train_loader)\n                    )\n                )\n                logger.info([x.item() for x in losses] + [global_step, lr])\n\n                scalar_dict = {\n                    \"loss/g/total\": loss_gen_all,\n                    \"loss/d/total\": loss_disc_all,\n                    \"learning_rate\": lr,\n                    \"grad_norm_d\": grad_norm_d,\n                    \"grad_norm_g\": grad_norm_g,\n                }\n                scalar_dict.update(\n                    {\n                        \"loss/g/fm\": loss_fm,\n                        \"loss/g/mel\": loss_mel,\n                        \"loss/g/dur\": loss_dur,\n                        \"loss/g/kl\": loss_kl,\n                    }\n                )\n                scalar_dict.update(\n                    {\"loss/g/{}\".format(i): v for i, v in enumerate(losses_gen)}\n                )\n                scalar_dict.update(\n                    {\"loss/d_r/{}\".format(i): v for i, v in enumerate(losses_disc_r)}\n                )\n                scalar_dict.update(\n                    {\"loss/d_g/{}\".format(i): v for i, v in enumerate(losses_disc_g)}\n                )\n\n                image_dict = {\n                    \"slice/mel_org\": utils.plot_spectrogram_to_numpy(\n                        y_mel[0].data.cpu().numpy()\n                    ),\n                    \"slice/mel_gen\": utils.plot_spectrogram_to_numpy(\n                        y_hat_mel[0].data.cpu().numpy()\n                    ),\n                    \"all/mel\": utils.plot_spectrogram_to_numpy(\n                        mel[0].data.cpu().numpy()\n                    ),\n                    \"all/attn\": utils.plot_alignment_to_numpy(\n                        attn[0, 0].data.cpu().numpy()\n                    ),\n                }\n                utils.summarize(\n                    writer=writer,\n                    global_step=global_step,\n                    images=image_dict,\n                    scalars=scalar_dict,\n                )\n\n            if global_step % hps.train.eval_interval == 0:\n                evaluate(hps, net_g, eval_loader, writer_eval)\n                utils.save_checkpoint(\n                    net_g,\n                    optim_g,\n                    hps.train.learning_rate,\n                    epoch,\n                    os.path.join(hps.model_dir, \"G_{}.pth\".format(global_step)),\n                )\n                utils.save_checkpoint(\n                    net_d,\n                    optim_d,\n                    hps.train.learning_rate,\n                    epoch,\n                    os.path.join(hps.model_dir, \"D_{}.pth\".format(global_step)),\n                )\n                if net_dur_disc is not None:\n                    utils.save_checkpoint(\n                        net_dur_disc,\n                        optim_dur_disc,\n                        hps.train.learning_rate,\n                        epoch,\n                        os.path.join(hps.model_dir, \"DUR_{}.pth\".format(global_step)),\n                    )\n                keep_ckpts = getattr(hps.train, \"keep_ckpts\", 5)\n                if keep_ckpts > 0:\n                    utils.clean_checkpoints(\n                        path_to_models=hps.model_dir,\n                        n_ckpts_to_keep=keep_ckpts,\n                        sort_by_time=True,\n                    )\n\n        global_step += 1\n\n    if rank == 0:\n        logger.info(\"====> Epoch: {}\".format(epoch))\n    torch.cuda.empty_cache()\n\n\ndef evaluate(hps, generator, eval_loader, writer_eval):\n    generator.eval()\n    image_dict = {}\n    audio_dict = {}\n    print(\"Evaluating ...\")\n    with torch.no_grad():\n        for batch_idx, (\n            x,\n            x_lengths,\n            spec,\n            spec_lengths,\n            y,\n            y_lengths,\n            speakers,\n            tone,\n            language,\n            bert,\n            ja_bert,\n        ) in enumerate(eval_loader):\n            x, x_lengths = x.cuda(), x_lengths.cuda()\n            spec, spec_lengths = spec.cuda(), spec_lengths.cuda()\n            y, y_lengths = y.cuda(), y_lengths.cuda()\n            speakers = speakers.cuda()\n            bert = bert.cuda()\n            ja_bert = ja_bert.cuda()\n            tone = tone.cuda()\n            language = language.cuda()\n            for use_sdp in [True, False]:\n                y_hat, attn, mask, *_ = generator.module.infer(\n                    x,\n                    x_lengths,\n                    speakers,\n                    tone,\n                    language,\n                    bert,\n                    ja_bert,\n                    y=spec,\n                    max_len=1000,\n                    sdp_ratio=0.0 if not use_sdp else 1.0,\n                )\n                y_hat_lengths = mask.sum([1, 2]).long() * hps.data.hop_length\n\n                mel = spec_to_mel_torch(\n                    spec,\n                    hps.data.filter_length,\n                    hps.data.n_mel_channels,\n                    hps.data.sampling_rate,\n                    hps.data.mel_fmin,\n                    hps.data.mel_fmax,\n                )\n                y_hat_mel = mel_spectrogram_torch(\n                    y_hat.squeeze(1).float(),\n                    hps.data.filter_length,\n                    hps.data.n_mel_channels,\n                    hps.data.sampling_rate,\n                    hps.data.hop_length,\n                    hps.data.win_length,\n                    hps.data.mel_fmin,\n                    hps.data.mel_fmax,\n                )\n                image_dict.update(\n                    {\n                        f\"gen/mel_{batch_idx}\": utils.plot_spectrogram_to_numpy(\n                            y_hat_mel[0].cpu().numpy()\n                        )\n                    }\n                )\n                audio_dict.update(\n                    {\n                        f\"gen/audio_{batch_idx}_{use_sdp}\": y_hat[\n                            0, :, : y_hat_lengths[0]\n                        ]\n                    }\n                )\n                image_dict.update(\n                    {\n                        f\"gt/mel_{batch_idx}\": utils.plot_spectrogram_to_numpy(\n                            mel[0].cpu().numpy()\n                        )\n                    }\n                )\n                audio_dict.update({f\"gt/audio_{batch_idx}\": y[0, :, : y_lengths[0]]})\n\n    utils.summarize(\n        writer=writer_eval,\n        global_step=global_step,\n        images=image_dict,\n        audios=audio_dict,\n        audio_sampling_rate=hps.data.sampling_rate,\n    )\n    generator.train()\n    print('Evauate done')\n    torch.cuda.empty_cache()\n\n\nif __name__ == \"__main__\":\n    run()\n"
  },
  {
    "path": "xinference/thirdparty/melo/train.sh",
    "content": "CONFIG=$1\nGPUS=$2\nMODEL_NAME=$(basename \"$(dirname $CONFIG)\")\n\nPORT=10902\n\nwhile : # auto-resume: the code sometimes crash due to bug of gloo on some gpus\ndo\ntorchrun --nproc_per_node=$GPUS \\\n        --master_port=$PORT \\\n    train.py --c $CONFIG --model $MODEL_NAME \n\nfor PID in $(ps -aux | grep $CONFIG | grep python | awk '{print $2}')\ndo\n    echo $PID\n    kill -9 $PID\ndone\nsleep 30\ndone"
  },
  {
    "path": "xinference/thirdparty/melo/transforms.py",
    "content": "import torch\nfrom torch.nn import functional as F\n\nimport numpy as np\n\n\nDEFAULT_MIN_BIN_WIDTH = 1e-3\nDEFAULT_MIN_BIN_HEIGHT = 1e-3\nDEFAULT_MIN_DERIVATIVE = 1e-3\n\n\ndef piecewise_rational_quadratic_transform(\n    inputs,\n    unnormalized_widths,\n    unnormalized_heights,\n    unnormalized_derivatives,\n    inverse=False,\n    tails=None,\n    tail_bound=1.0,\n    min_bin_width=DEFAULT_MIN_BIN_WIDTH,\n    min_bin_height=DEFAULT_MIN_BIN_HEIGHT,\n    min_derivative=DEFAULT_MIN_DERIVATIVE,\n):\n    if tails is None:\n        spline_fn = rational_quadratic_spline\n        spline_kwargs = {}\n    else:\n        spline_fn = unconstrained_rational_quadratic_spline\n        spline_kwargs = {\"tails\": tails, \"tail_bound\": tail_bound}\n\n    outputs, logabsdet = spline_fn(\n        inputs=inputs,\n        unnormalized_widths=unnormalized_widths,\n        unnormalized_heights=unnormalized_heights,\n        unnormalized_derivatives=unnormalized_derivatives,\n        inverse=inverse,\n        min_bin_width=min_bin_width,\n        min_bin_height=min_bin_height,\n        min_derivative=min_derivative,\n        **spline_kwargs\n    )\n    return outputs, logabsdet\n\n\ndef searchsorted(bin_locations, inputs, eps=1e-6):\n    bin_locations[..., -1] += eps\n    return torch.sum(inputs[..., None] >= bin_locations, dim=-1) - 1\n\n\ndef unconstrained_rational_quadratic_spline(\n    inputs,\n    unnormalized_widths,\n    unnormalized_heights,\n    unnormalized_derivatives,\n    inverse=False,\n    tails=\"linear\",\n    tail_bound=1.0,\n    min_bin_width=DEFAULT_MIN_BIN_WIDTH,\n    min_bin_height=DEFAULT_MIN_BIN_HEIGHT,\n    min_derivative=DEFAULT_MIN_DERIVATIVE,\n):\n    inside_interval_mask = (inputs >= -tail_bound) & (inputs <= tail_bound)\n    outside_interval_mask = ~inside_interval_mask\n\n    outputs = torch.zeros_like(inputs)\n    logabsdet = torch.zeros_like(inputs)\n\n    if tails == \"linear\":\n        unnormalized_derivatives = F.pad(unnormalized_derivatives, pad=(1, 1))\n        constant = np.log(np.exp(1 - min_derivative) - 1)\n        unnormalized_derivatives[..., 0] = constant\n        unnormalized_derivatives[..., -1] = constant\n\n        outputs[outside_interval_mask] = inputs[outside_interval_mask]\n        logabsdet[outside_interval_mask] = 0\n    else:\n        raise RuntimeError(\"{} tails are not implemented.\".format(tails))\n\n    (\n        outputs[inside_interval_mask],\n        logabsdet[inside_interval_mask],\n    ) = rational_quadratic_spline(\n        inputs=inputs[inside_interval_mask],\n        unnormalized_widths=unnormalized_widths[inside_interval_mask, :],\n        unnormalized_heights=unnormalized_heights[inside_interval_mask, :],\n        unnormalized_derivatives=unnormalized_derivatives[inside_interval_mask, :],\n        inverse=inverse,\n        left=-tail_bound,\n        right=tail_bound,\n        bottom=-tail_bound,\n        top=tail_bound,\n        min_bin_width=min_bin_width,\n        min_bin_height=min_bin_height,\n        min_derivative=min_derivative,\n    )\n\n    return outputs, logabsdet\n\n\ndef rational_quadratic_spline(\n    inputs,\n    unnormalized_widths,\n    unnormalized_heights,\n    unnormalized_derivatives,\n    inverse=False,\n    left=0.0,\n    right=1.0,\n    bottom=0.0,\n    top=1.0,\n    min_bin_width=DEFAULT_MIN_BIN_WIDTH,\n    min_bin_height=DEFAULT_MIN_BIN_HEIGHT,\n    min_derivative=DEFAULT_MIN_DERIVATIVE,\n):\n    if torch.min(inputs) < left or torch.max(inputs) > right:\n        raise ValueError(\"Input to a transform is not within its domain\")\n\n    num_bins = unnormalized_widths.shape[-1]\n\n    if min_bin_width * num_bins > 1.0:\n        raise ValueError(\"Minimal bin width too large for the number of bins\")\n    if min_bin_height * num_bins > 1.0:\n        raise ValueError(\"Minimal bin height too large for the number of bins\")\n\n    widths = F.softmax(unnormalized_widths, dim=-1)\n    widths = min_bin_width + (1 - min_bin_width * num_bins) * widths\n    cumwidths = torch.cumsum(widths, dim=-1)\n    cumwidths = F.pad(cumwidths, pad=(1, 0), mode=\"constant\", value=0.0)\n    cumwidths = (right - left) * cumwidths + left\n    cumwidths[..., 0] = left\n    cumwidths[..., -1] = right\n    widths = cumwidths[..., 1:] - cumwidths[..., :-1]\n\n    derivatives = min_derivative + F.softplus(unnormalized_derivatives)\n\n    heights = F.softmax(unnormalized_heights, dim=-1)\n    heights = min_bin_height + (1 - min_bin_height * num_bins) * heights\n    cumheights = torch.cumsum(heights, dim=-1)\n    cumheights = F.pad(cumheights, pad=(1, 0), mode=\"constant\", value=0.0)\n    cumheights = (top - bottom) * cumheights + bottom\n    cumheights[..., 0] = bottom\n    cumheights[..., -1] = top\n    heights = cumheights[..., 1:] - cumheights[..., :-1]\n\n    if inverse:\n        bin_idx = searchsorted(cumheights, inputs)[..., None]\n    else:\n        bin_idx = searchsorted(cumwidths, inputs)[..., None]\n\n    input_cumwidths = cumwidths.gather(-1, bin_idx)[..., 0]\n    input_bin_widths = widths.gather(-1, bin_idx)[..., 0]\n\n    input_cumheights = cumheights.gather(-1, bin_idx)[..., 0]\n    delta = heights / widths\n    input_delta = delta.gather(-1, bin_idx)[..., 0]\n\n    input_derivatives = derivatives.gather(-1, bin_idx)[..., 0]\n    input_derivatives_plus_one = derivatives[..., 1:].gather(-1, bin_idx)[..., 0]\n\n    input_heights = heights.gather(-1, bin_idx)[..., 0]\n\n    if inverse:\n        a = (inputs - input_cumheights) * (\n            input_derivatives + input_derivatives_plus_one - 2 * input_delta\n        ) + input_heights * (input_delta - input_derivatives)\n        b = input_heights * input_derivatives - (inputs - input_cumheights) * (\n            input_derivatives + input_derivatives_plus_one - 2 * input_delta\n        )\n        c = -input_delta * (inputs - input_cumheights)\n\n        discriminant = b.pow(2) - 4 * a * c\n        assert (discriminant >= 0).all()\n\n        root = (2 * c) / (-b - torch.sqrt(discriminant))\n        outputs = root * input_bin_widths + input_cumwidths\n\n        theta_one_minus_theta = root * (1 - root)\n        denominator = input_delta + (\n            (input_derivatives + input_derivatives_plus_one - 2 * input_delta)\n            * theta_one_minus_theta\n        )\n        derivative_numerator = input_delta.pow(2) * (\n            input_derivatives_plus_one * root.pow(2)\n            + 2 * input_delta * theta_one_minus_theta\n            + input_derivatives * (1 - root).pow(2)\n        )\n        logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator)\n\n        return outputs, -logabsdet\n    else:\n        theta = (inputs - input_cumwidths) / input_bin_widths\n        theta_one_minus_theta = theta * (1 - theta)\n\n        numerator = input_heights * (\n            input_delta * theta.pow(2) + input_derivatives * theta_one_minus_theta\n        )\n        denominator = input_delta + (\n            (input_derivatives + input_derivatives_plus_one - 2 * input_delta)\n            * theta_one_minus_theta\n        )\n        outputs = input_cumheights + numerator / denominator\n\n        derivative_numerator = input_delta.pow(2) * (\n            input_derivatives_plus_one * theta.pow(2)\n            + 2 * input_delta * theta_one_minus_theta\n            + input_derivatives * (1 - theta).pow(2)\n        )\n        logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator)\n\n        return outputs, logabsdet\n"
  },
  {
    "path": "xinference/thirdparty/melo/utils.py",
    "content": "import os\nimport glob\nimport argparse\nimport logging\nimport json\nimport subprocess\nimport numpy as np\nfrom scipy.io.wavfile import read\nimport torch\nimport torchaudio\nimport librosa\nfrom melo.text import cleaned_text_to_sequence, get_bert\nfrom melo.text.cleaner import clean_text\nfrom melo import commons\n\nMATPLOTLIB_FLAG = False\n\nlogger = logging.getLogger(__name__)\n\n\n\ndef get_text_for_tts_infer(text, language_str, hps, device, symbol_to_id=None):\n    norm_text, phone, tone, word2ph = clean_text(text, language_str)\n    phone, tone, language = cleaned_text_to_sequence(phone, tone, language_str, symbol_to_id)\n\n    if hps.data.add_blank:\n        phone = commons.intersperse(phone, 0)\n        tone = commons.intersperse(tone, 0)\n        language = commons.intersperse(language, 0)\n        for i in range(len(word2ph)):\n            word2ph[i] = word2ph[i] * 2\n        word2ph[0] += 1\n\n    if getattr(hps.data, \"disable_bert\", False):\n        bert = torch.zeros(1024, len(phone))\n        ja_bert = torch.zeros(768, len(phone))\n    else:\n        bert = get_bert(norm_text, word2ph, language_str, device)\n        del word2ph\n        assert bert.shape[-1] == len(phone), phone\n\n        if language_str == \"ZH\":\n            bert = bert\n            ja_bert = torch.zeros(768, len(phone))\n        elif language_str in [\"JP\", \"EN\", \"ZH_MIX_EN\", 'KR', 'SP', 'ES', 'FR', 'DE', 'RU']:\n            ja_bert = bert\n            bert = torch.zeros(1024, len(phone))\n        else:\n            raise NotImplementedError()\n\n    assert bert.shape[-1] == len(\n        phone\n    ), f\"Bert seq len {bert.shape[-1]} != {len(phone)}\"\n\n    phone = torch.LongTensor(phone)\n    tone = torch.LongTensor(tone)\n    language = torch.LongTensor(language)\n    return bert, ja_bert, phone, tone, language\n\ndef load_checkpoint(checkpoint_path, model, optimizer=None, skip_optimizer=False):\n    assert os.path.isfile(checkpoint_path)\n    checkpoint_dict = torch.load(checkpoint_path, map_location=\"cpu\")\n    iteration = checkpoint_dict.get(\"iteration\", 0)\n    learning_rate = checkpoint_dict.get(\"learning_rate\", 0.)\n    if (\n        optimizer is not None\n        and not skip_optimizer\n        and checkpoint_dict[\"optimizer\"] is not None\n    ):\n        optimizer.load_state_dict(checkpoint_dict[\"optimizer\"])\n    elif optimizer is None and not skip_optimizer:\n        # else:      Disable this line if Infer and resume checkpoint,then enable the line upper\n        new_opt_dict = optimizer.state_dict()\n        new_opt_dict_params = new_opt_dict[\"param_groups\"][0][\"params\"]\n        new_opt_dict[\"param_groups\"] = checkpoint_dict[\"optimizer\"][\"param_groups\"]\n        new_opt_dict[\"param_groups\"][0][\"params\"] = new_opt_dict_params\n        optimizer.load_state_dict(new_opt_dict)\n\n    saved_state_dict = checkpoint_dict[\"model\"]\n    if hasattr(model, \"module\"):\n        state_dict = model.module.state_dict()\n    else:\n        state_dict = model.state_dict()\n\n    new_state_dict = {}\n    for k, v in state_dict.items():\n        try:\n            # assert \"emb_g\" not in k\n            new_state_dict[k] = saved_state_dict[k]\n            assert saved_state_dict[k].shape == v.shape, (\n                saved_state_dict[k].shape,\n                v.shape,\n            )\n        except Exception as e:\n            print(e)\n            # For upgrading from the old version\n            if \"ja_bert_proj\" in k:\n                v = torch.zeros_like(v)\n                logger.warn(\n                    f\"Seems you are using the old version of the model, the {k} is automatically set to zero for backward compatibility\"\n                )\n            else:\n                logger.error(f\"{k} is not in the checkpoint\")\n\n            new_state_dict[k] = v\n\n    if hasattr(model, \"module\"):\n        model.module.load_state_dict(new_state_dict, strict=False)\n    else:\n        model.load_state_dict(new_state_dict, strict=False)\n\n    logger.info(\n        \"Loaded checkpoint '{}' (iteration {})\".format(checkpoint_path, iteration)\n    )\n\n    return model, optimizer, learning_rate, iteration\n\n\ndef save_checkpoint(model, optimizer, learning_rate, iteration, checkpoint_path):\n    logger.info(\n        \"Saving model and optimizer state at iteration {} to {}\".format(\n            iteration, checkpoint_path\n        )\n    )\n    if hasattr(model, \"module\"):\n        state_dict = model.module.state_dict()\n    else:\n        state_dict = model.state_dict()\n    torch.save(\n        {\n            \"model\": state_dict,\n            \"iteration\": iteration,\n            \"optimizer\": optimizer.state_dict(),\n            \"learning_rate\": learning_rate,\n        },\n        checkpoint_path,\n    )\n\n\ndef summarize(\n    writer,\n    global_step,\n    scalars={},\n    histograms={},\n    images={},\n    audios={},\n    audio_sampling_rate=22050,\n):\n    for k, v in scalars.items():\n        writer.add_scalar(k, v, global_step)\n    for k, v in histograms.items():\n        writer.add_histogram(k, v, global_step)\n    for k, v in images.items():\n        writer.add_image(k, v, global_step, dataformats=\"HWC\")\n    for k, v in audios.items():\n        writer.add_audio(k, v, global_step, audio_sampling_rate)\n\n\ndef latest_checkpoint_path(dir_path, regex=\"G_*.pth\"):\n    f_list = glob.glob(os.path.join(dir_path, regex))\n    f_list.sort(key=lambda f: int(\"\".join(filter(str.isdigit, f))))\n    x = f_list[-1]\n    return x\n\n\ndef plot_spectrogram_to_numpy(spectrogram):\n    global MATPLOTLIB_FLAG\n    if not MATPLOTLIB_FLAG:\n        import matplotlib\n\n        matplotlib.use(\"Agg\")\n        MATPLOTLIB_FLAG = True\n        mpl_logger = logging.getLogger(\"matplotlib\")\n        mpl_logger.setLevel(logging.WARNING)\n    import matplotlib.pylab as plt\n    import numpy as np\n\n    fig, ax = plt.subplots(figsize=(10, 2))\n    im = ax.imshow(spectrogram, aspect=\"auto\", origin=\"lower\", interpolation=\"none\")\n    plt.colorbar(im, ax=ax)\n    plt.xlabel(\"Frames\")\n    plt.ylabel(\"Channels\")\n    plt.tight_layout()\n\n    fig.canvas.draw()\n    data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep=\"\")\n    data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))\n    plt.close()\n    return data\n\n\ndef plot_alignment_to_numpy(alignment, info=None):\n    global MATPLOTLIB_FLAG\n    if not MATPLOTLIB_FLAG:\n        import matplotlib\n\n        matplotlib.use(\"Agg\")\n        MATPLOTLIB_FLAG = True\n        mpl_logger = logging.getLogger(\"matplotlib\")\n        mpl_logger.setLevel(logging.WARNING)\n    import matplotlib.pylab as plt\n    import numpy as np\n\n    fig, ax = plt.subplots(figsize=(6, 4))\n    im = ax.imshow(\n        alignment.transpose(), aspect=\"auto\", origin=\"lower\", interpolation=\"none\"\n    )\n    fig.colorbar(im, ax=ax)\n    xlabel = \"Decoder timestep\"\n    if info is not None:\n        xlabel += \"\\n\\n\" + info\n    plt.xlabel(xlabel)\n    plt.ylabel(\"Encoder timestep\")\n    plt.tight_layout()\n\n    fig.canvas.draw()\n    data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep=\"\")\n    data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))\n    plt.close()\n    return data\n\n\ndef load_wav_to_torch(full_path):\n    sampling_rate, data = read(full_path)\n    return torch.FloatTensor(data.astype(np.float32)), sampling_rate\n\n\ndef load_wav_to_torch_new(full_path):\n    audio_norm, sampling_rate = torchaudio.load(full_path, frame_offset=0, num_frames=-1, normalize=True, channels_first=True)\n    audio_norm = audio_norm.mean(dim=0)\n    return audio_norm, sampling_rate\n\ndef load_wav_to_torch_librosa(full_path, sr):\n    audio_norm, sampling_rate = librosa.load(full_path, sr=sr, mono=True)\n    return torch.FloatTensor(audio_norm.astype(np.float32)), sampling_rate\n\n\ndef load_filepaths_and_text(filename, split=\"|\"):\n    with open(filename, encoding=\"utf-8\") as f:\n        filepaths_and_text = [line.strip().split(split) for line in f]\n    return filepaths_and_text\n\n\ndef get_hparams(init=True):\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"-c\",\n        \"--config\",\n        type=str,\n        default=\"./configs/base.json\",\n        help=\"JSON file for configuration\",\n    )\n    parser.add_argument('--local_rank', type=int, default=0)\n    parser.add_argument('--world-size', type=int, default=1)\n    parser.add_argument('--port', type=int, default=10000)\n    parser.add_argument(\"-m\", \"--model\", type=str, required=True, help=\"Model name\")\n    parser.add_argument('--pretrain_G', type=str, default=None,\n                            help='pretrain model')\n    parser.add_argument('--pretrain_D', type=str, default=None,\n                            help='pretrain model D')\n    parser.add_argument('--pretrain_dur', type=str, default=None,\n                            help='pretrain model duration')\n\n    args = parser.parse_args()\n    model_dir = os.path.join(\"./logs\", args.model)\n\n    os.makedirs(model_dir, exist_ok=True)\n\n    config_path = args.config\n    config_save_path = os.path.join(model_dir, \"config.json\")\n    if init:\n        with open(config_path, \"r\") as f:\n            data = f.read()\n        with open(config_save_path, \"w\") as f:\n            f.write(data)\n    else:\n        with open(config_save_path, \"r\") as f:\n            data = f.read()\n    config = json.loads(data)\n\n    hparams = HParams(**config)\n    hparams.model_dir = model_dir\n    hparams.pretrain_G = args.pretrain_G\n    hparams.pretrain_D = args.pretrain_D\n    hparams.pretrain_dur = args.pretrain_dur\n    hparams.port = args.port\n    return hparams\n\n\ndef clean_checkpoints(path_to_models=\"logs/44k/\", n_ckpts_to_keep=2, sort_by_time=True):\n    \"\"\"Freeing up space by deleting saved ckpts\n\n    Arguments:\n    path_to_models    --  Path to the model directory\n    n_ckpts_to_keep   --  Number of ckpts to keep, excluding G_0.pth and D_0.pth\n    sort_by_time      --  True -> chronologically delete ckpts\n                          False -> lexicographically delete ckpts\n    \"\"\"\n    import re\n\n    ckpts_files = [\n        f\n        for f in os.listdir(path_to_models)\n        if os.path.isfile(os.path.join(path_to_models, f))\n    ]\n\n    def name_key(_f):\n        return int(re.compile(\"._(\\\\d+)\\\\.pth\").match(_f).group(1))\n\n    def time_key(_f):\n        return os.path.getmtime(os.path.join(path_to_models, _f))\n\n    sort_key = time_key if sort_by_time else name_key\n\n    def x_sorted(_x):\n        return sorted(\n            [f for f in ckpts_files if f.startswith(_x) and not f.endswith(\"_0.pth\")],\n            key=sort_key,\n        )\n\n    to_del = [\n        os.path.join(path_to_models, fn)\n        for fn in (x_sorted(\"G\")[:-n_ckpts_to_keep] + x_sorted(\"D\")[:-n_ckpts_to_keep])\n    ]\n\n    def del_info(fn):\n        return logger.info(f\".. Free up space by deleting ckpt {fn}\")\n\n    def del_routine(x):\n        return [os.remove(x), del_info(x)]\n\n    [del_routine(fn) for fn in to_del]\n\n\ndef get_hparams_from_dir(model_dir):\n    config_save_path = os.path.join(model_dir, \"config.json\")\n    with open(config_save_path, \"r\", encoding=\"utf-8\") as f:\n        data = f.read()\n    config = json.loads(data)\n\n    hparams = HParams(**config)\n    hparams.model_dir = model_dir\n    return hparams\n\n\ndef get_hparams_from_file(config_path):\n    with open(config_path, \"r\", encoding=\"utf-8\") as f:\n        data = f.read()\n    config = json.loads(data)\n\n    hparams = HParams(**config)\n    return hparams\n\n\ndef check_git_hash(model_dir):\n    source_dir = os.path.dirname(os.path.realpath(__file__))\n    if not os.path.exists(os.path.join(source_dir, \".git\")):\n        logger.warn(\n            \"{} is not a git repository, therefore hash value comparison will be ignored.\".format(\n                source_dir\n            )\n        )\n        return\n\n    cur_hash = subprocess.getoutput(\"git rev-parse HEAD\")\n\n    path = os.path.join(model_dir, \"githash\")\n    if os.path.exists(path):\n        saved_hash = open(path).read()\n        if saved_hash != cur_hash:\n            logger.warn(\n                \"git hash values are different. {}(saved) != {}(current)\".format(\n                    saved_hash[:8], cur_hash[:8]\n                )\n            )\n    else:\n        open(path, \"w\").write(cur_hash)\n\n\ndef get_logger(model_dir, filename=\"train.log\"):\n    global logger\n    logger = logging.getLogger(os.path.basename(model_dir))\n    logger.setLevel(logging.DEBUG)\n\n    formatter = logging.Formatter(\"%(asctime)s\\t%(name)s\\t%(levelname)s\\t%(message)s\")\n    if not os.path.exists(model_dir):\n        os.makedirs(model_dir, exist_ok=True)\n    h = logging.FileHandler(os.path.join(model_dir, filename))\n    h.setLevel(logging.DEBUG)\n    h.setFormatter(formatter)\n    logger.addHandler(h)\n    return logger\n\n\nclass HParams:\n    def __init__(self, **kwargs):\n        for k, v in kwargs.items():\n            if type(v) == dict:\n                v = HParams(**v)\n            self[k] = v\n\n    def keys(self):\n        return self.__dict__.keys()\n\n    def items(self):\n        return self.__dict__.items()\n\n    def values(self):\n        return self.__dict__.values()\n\n    def __len__(self):\n        return len(self.__dict__)\n\n    def __getitem__(self, key):\n        return getattr(self, key)\n\n    def __setitem__(self, key, value):\n        return setattr(self, key, value)\n\n    def __contains__(self, key):\n        return key in self.__dict__\n\n    def __repr__(self):\n        return self.__dict__.__repr__()\n"
  },
  {
    "path": "xinference/thirdparty/mlx/__init__.py",
    "content": "# Copyright 2022-2023 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/__init__.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nfrom .datasets import Dataset, load_dataset\nfrom .flux import FluxPipeline\nfrom .lora import LoRALinear\nfrom .sampler import FluxSampler\nfrom .trainer import Trainer\nfrom .utils import (\n    load_ae,\n    load_clip,\n    load_clip_tokenizer,\n    load_flow_model,\n    load_t5,\n    load_t5_tokenizer,\n)\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/autoencoder.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nfrom dataclasses import dataclass\nfrom typing import List\n\nimport mlx.core as mx\nimport mlx.nn as nn\nfrom mlx.nn.layers.upsample import upsample_nearest\n\n\n@dataclass\nclass AutoEncoderParams:\n    resolution: int\n    in_channels: int\n    ch: int\n    out_ch: int\n    ch_mult: List[int]\n    num_res_blocks: int\n    z_channels: int\n    scale_factor: float\n    shift_factor: float\n\n\nclass AttnBlock(nn.Module):\n    def __init__(self, in_channels: int):\n        super().__init__()\n        self.in_channels = in_channels\n\n        self.norm = nn.GroupNorm(\n            num_groups=32,\n            dims=in_channels,\n            eps=1e-6,\n            affine=True,\n            pytorch_compatible=True,\n        )\n        self.q = nn.Linear(in_channels, in_channels)\n        self.k = nn.Linear(in_channels, in_channels)\n        self.v = nn.Linear(in_channels, in_channels)\n        self.proj_out = nn.Linear(in_channels, in_channels)\n\n    def __call__(self, x: mx.array) -> mx.array:\n        B, H, W, C = x.shape\n\n        y = x.reshape(B, 1, -1, C)\n        y = self.norm(y)\n        q = self.q(y)\n        k = self.k(y)\n        v = self.v(y)\n        y = mx.fast.scaled_dot_product_attention(q, k, v, scale=C ** (-0.5))\n        y = self.proj_out(y)\n\n        return x + y.reshape(B, H, W, C)\n\n\nclass ResnetBlock(nn.Module):\n    def __init__(self, in_channels: int, out_channels: int):\n        super().__init__()\n        self.in_channels = in_channels\n        out_channels = in_channels if out_channels is None else out_channels\n        self.out_channels = out_channels\n\n        self.norm1 = nn.GroupNorm(\n            num_groups=32,\n            dims=in_channels,\n            eps=1e-6,\n            affine=True,\n            pytorch_compatible=True,\n        )\n        self.conv1 = nn.Conv2d(\n            in_channels, out_channels, kernel_size=3, stride=1, padding=1\n        )\n        self.norm2 = nn.GroupNorm(\n            num_groups=32,\n            dims=out_channels,\n            eps=1e-6,\n            affine=True,\n            pytorch_compatible=True,\n        )\n        self.conv2 = nn.Conv2d(\n            out_channels, out_channels, kernel_size=3, stride=1, padding=1\n        )\n        if self.in_channels != self.out_channels:\n            self.nin_shortcut = nn.Linear(in_channels, out_channels)\n\n    def __call__(self, x):\n        h = x\n        h = self.norm1(h)\n        h = nn.silu(h)\n        h = self.conv1(h)\n\n        h = self.norm2(h)\n        h = nn.silu(h)\n        h = self.conv2(h)\n\n        if self.in_channels != self.out_channels:\n            x = self.nin_shortcut(x)\n\n        return x + h\n\n\nclass Downsample(nn.Module):\n    def __init__(self, in_channels: int):\n        super().__init__()\n        self.conv = nn.Conv2d(\n            in_channels, in_channels, kernel_size=3, stride=2, padding=0\n        )\n\n    def __call__(self, x: mx.array):\n        x = mx.pad(x, [(0, 0), (0, 1), (0, 1), (0, 0)])\n        x = self.conv(x)\n        return x\n\n\nclass Upsample(nn.Module):\n    def __init__(self, in_channels: int):\n        super().__init__()\n        self.conv = nn.Conv2d(\n            in_channels, in_channels, kernel_size=3, stride=1, padding=1\n        )\n\n    def __call__(self, x: mx.array):\n        x = upsample_nearest(x, (2, 2))\n        x = self.conv(x)\n        return x\n\n\nclass Encoder(nn.Module):\n    def __init__(\n        self,\n        resolution: int,\n        in_channels: int,\n        ch: int,\n        ch_mult: list[int],\n        num_res_blocks: int,\n        z_channels: int,\n    ):\n        super().__init__()\n        self.ch = ch\n        self.num_resolutions = len(ch_mult)\n        self.num_res_blocks = num_res_blocks\n        self.resolution = resolution\n        self.in_channels = in_channels\n        # downsampling\n        self.conv_in = nn.Conv2d(\n            in_channels, self.ch, kernel_size=3, stride=1, padding=1\n        )\n\n        curr_res = resolution\n        in_ch_mult = (1,) + tuple(ch_mult)\n        self.in_ch_mult = in_ch_mult\n        self.down = []\n        block_in = self.ch\n        for i_level in range(self.num_resolutions):\n            block = []\n            attn = []  # TODO: Remove the attn, nobody appends anything to it\n            block_in = ch * in_ch_mult[i_level]\n            block_out = ch * ch_mult[i_level]\n            for _ in range(self.num_res_blocks):\n                block.append(ResnetBlock(in_channels=block_in, out_channels=block_out))\n                block_in = block_out\n            down = {}\n            down[\"block\"] = block\n            down[\"attn\"] = attn\n            if i_level != self.num_resolutions - 1:\n                down[\"downsample\"] = Downsample(block_in)\n                curr_res = curr_res // 2\n            self.down.append(down)\n\n        # middle\n        self.mid = {}\n        self.mid[\"block_1\"] = ResnetBlock(in_channels=block_in, out_channels=block_in)\n        self.mid[\"attn_1\"] = AttnBlock(block_in)\n        self.mid[\"block_2\"] = ResnetBlock(in_channels=block_in, out_channels=block_in)\n\n        # end\n        self.norm_out = nn.GroupNorm(\n            num_groups=32, dims=block_in, eps=1e-6, affine=True, pytorch_compatible=True\n        )\n        self.conv_out = nn.Conv2d(\n            block_in, 2 * z_channels, kernel_size=3, stride=1, padding=1\n        )\n\n    def __call__(self, x: mx.array):\n        hs = [self.conv_in(x)]\n        for i_level in range(self.num_resolutions):\n            for i_block in range(self.num_res_blocks):\n                h = self.down[i_level][\"block\"][i_block](hs[-1])\n\n                # TODO: Remove the attn\n                if len(self.down[i_level][\"attn\"]) > 0:\n                    h = self.down[i_level][\"attn\"][i_block](h)\n\n                hs.append(h)\n\n            if i_level != self.num_resolutions - 1:\n                hs.append(self.down[i_level][\"downsample\"](hs[-1]))\n\n        # middle\n        h = hs[-1]\n        h = self.mid[\"block_1\"](h)\n        h = self.mid[\"attn_1\"](h)\n        h = self.mid[\"block_2\"](h)\n\n        # end\n        h = self.norm_out(h)\n        h = nn.silu(h)\n        h = self.conv_out(h)\n\n        return h\n\n\nclass Decoder(nn.Module):\n    def __init__(\n        self,\n        ch: int,\n        out_ch: int,\n        ch_mult: list[int],\n        num_res_blocks: int,\n        in_channels: int,\n        resolution: int,\n        z_channels: int,\n    ):\n        super().__init__()\n        self.ch = ch\n        self.num_resolutions = len(ch_mult)\n        self.num_res_blocks = num_res_blocks\n        self.resolution = resolution\n        self.in_channels = in_channels\n        self.ffactor = 2 ** (self.num_resolutions - 1)\n\n        # compute in_ch_mult, block_in and curr_res at lowest res\n        block_in = ch * ch_mult[self.num_resolutions - 1]\n        curr_res = resolution // 2 ** (self.num_resolutions - 1)\n        self.z_shape = (1, z_channels, curr_res, curr_res)\n\n        # z to block_in\n        self.conv_in = nn.Conv2d(\n            z_channels, block_in, kernel_size=3, stride=1, padding=1\n        )\n\n        # middle\n        self.mid = {}\n        self.mid[\"block_1\"] = ResnetBlock(in_channels=block_in, out_channels=block_in)\n        self.mid[\"attn_1\"] = AttnBlock(block_in)\n        self.mid[\"block_2\"] = ResnetBlock(in_channels=block_in, out_channels=block_in)\n\n        # upsampling\n        self.up = []\n        for i_level in reversed(range(self.num_resolutions)):\n            block = []\n            attn = []  # TODO: Remove the attn, nobody appends anything to it\n\n            block_out = ch * ch_mult[i_level]\n            for _ in range(self.num_res_blocks + 1):\n                block.append(ResnetBlock(in_channels=block_in, out_channels=block_out))\n                block_in = block_out\n            up = {}\n            up[\"block\"] = block\n            up[\"attn\"] = attn\n            if i_level != 0:\n                up[\"upsample\"] = Upsample(block_in)\n                curr_res = curr_res * 2\n            self.up.insert(0, up)  # prepend to get consistent order\n\n        # end\n        self.norm_out = nn.GroupNorm(\n            num_groups=32, dims=block_in, eps=1e-6, affine=True, pytorch_compatible=True\n        )\n        self.conv_out = nn.Conv2d(block_in, out_ch, kernel_size=3, stride=1, padding=1)\n\n    def __call__(self, z: mx.array):\n        # z to block_in\n        h = self.conv_in(z)\n\n        # middle\n        h = self.mid[\"block_1\"](h)\n        h = self.mid[\"attn_1\"](h)\n        h = self.mid[\"block_2\"](h)\n\n        # upsampling\n        for i_level in reversed(range(self.num_resolutions)):\n            for i_block in range(self.num_res_blocks + 1):\n                h = self.up[i_level][\"block\"][i_block](h)\n\n                # TODO: Remove the attn\n                if len(self.up[i_level][\"attn\"]) > 0:\n                    h = self.up[i_level][\"attn\"][i_block](h)\n\n            if i_level != 0:\n                h = self.up[i_level][\"upsample\"](h)\n\n        # end\n        h = self.norm_out(h)\n        h = nn.silu(h)\n        h = self.conv_out(h)\n\n        return h\n\n\nclass DiagonalGaussian(nn.Module):\n    def __call__(self, z: mx.array):\n        mean, logvar = mx.split(z, 2, axis=-1)\n        if self.training:\n            std = mx.exp(0.5 * logvar)\n            eps = mx.random.normal(shape=z.shape, dtype=z.dtype)\n            return mean + std * eps\n        else:\n            return mean\n\n\nclass AutoEncoder(nn.Module):\n    def __init__(self, params: AutoEncoderParams):\n        super().__init__()\n        self.encoder = Encoder(\n            resolution=params.resolution,\n            in_channels=params.in_channels,\n            ch=params.ch,\n            ch_mult=params.ch_mult,\n            num_res_blocks=params.num_res_blocks,\n            z_channels=params.z_channels,\n        )\n        self.decoder = Decoder(\n            resolution=params.resolution,\n            in_channels=params.in_channels,\n            ch=params.ch,\n            out_ch=params.out_ch,\n            ch_mult=params.ch_mult,\n            num_res_blocks=params.num_res_blocks,\n            z_channels=params.z_channels,\n        )\n        self.reg = DiagonalGaussian()\n\n        self.scale_factor = params.scale_factor\n        self.shift_factor = params.shift_factor\n\n    def sanitize(self, weights):\n        new_weights = {}\n        for k, w in weights.items():\n            if w.ndim == 4:\n                w = w.transpose(0, 2, 3, 1)\n                w = w.reshape(-1).reshape(w.shape)\n                if w.shape[1:3] == (1, 1):\n                    w = w.squeeze((1, 2))\n            new_weights[k] = w\n        return new_weights\n\n    def encode(self, x: mx.array):\n        z = self.reg(self.encoder(x))\n        z = self.scale_factor * (z - self.shift_factor)\n        return z\n\n    def decode(self, z: mx.array):\n        z = z / self.scale_factor + self.shift_factor\n        return self.decoder(z)\n\n    def __call__(self, x: mx.array):\n        return self.decode(self.encode(x))\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/clip.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nfrom dataclasses import dataclass\nfrom typing import List, Optional\n\nimport mlx.core as mx\nimport mlx.nn as nn\n\n_ACTIVATIONS = {\"quick_gelu\": nn.gelu_fast_approx, \"gelu\": nn.gelu}\n\n\n@dataclass\nclass CLIPTextModelConfig:\n    num_layers: int = 23\n    model_dims: int = 1024\n    num_heads: int = 16\n    max_length: int = 77\n    vocab_size: int = 49408\n    hidden_act: str = \"quick_gelu\"\n\n    @classmethod\n    def from_dict(cls, config):\n        return cls(\n            num_layers=config[\"num_hidden_layers\"],\n            model_dims=config[\"hidden_size\"],\n            num_heads=config[\"num_attention_heads\"],\n            max_length=config[\"max_position_embeddings\"],\n            vocab_size=config[\"vocab_size\"],\n            hidden_act=config[\"hidden_act\"],\n        )\n\n\n@dataclass\nclass CLIPOutput:\n    # The last_hidden_state indexed at the EOS token and possibly projected if\n    # the model has a projection layer\n    pooled_output: Optional[mx.array] = None\n\n    # The full sequence output of the transformer after the final layernorm\n    last_hidden_state: Optional[mx.array] = None\n\n    # A list of hidden states corresponding to the outputs of the transformer layers\n    hidden_states: Optional[List[mx.array]] = None\n\n\nclass CLIPEncoderLayer(nn.Module):\n    \"\"\"The transformer encoder layer from CLIP.\"\"\"\n\n    def __init__(self, model_dims: int, num_heads: int, activation: str):\n        super().__init__()\n\n        self.layer_norm1 = nn.LayerNorm(model_dims)\n        self.layer_norm2 = nn.LayerNorm(model_dims)\n\n        self.attention = nn.MultiHeadAttention(model_dims, num_heads, bias=True)\n\n        self.linear1 = nn.Linear(model_dims, 4 * model_dims)\n        self.linear2 = nn.Linear(4 * model_dims, model_dims)\n\n        self.act = _ACTIVATIONS[activation]\n\n    def __call__(self, x, attn_mask=None):\n        y = self.layer_norm1(x)\n        y = self.attention(y, y, y, attn_mask)\n        x = y + x\n\n        y = self.layer_norm2(x)\n        y = self.linear1(y)\n        y = self.act(y)\n        y = self.linear2(y)\n        x = y + x\n\n        return x\n\n\nclass CLIPTextModel(nn.Module):\n    \"\"\"Implements the text encoder transformer from CLIP.\"\"\"\n\n    def __init__(self, config: CLIPTextModelConfig):\n        super().__init__()\n\n        self.token_embedding = nn.Embedding(config.vocab_size, config.model_dims)\n        self.position_embedding = nn.Embedding(config.max_length, config.model_dims)\n        self.layers = [\n            CLIPEncoderLayer(config.model_dims, config.num_heads, config.hidden_act)\n            for i in range(config.num_layers)\n        ]\n        self.final_layer_norm = nn.LayerNorm(config.model_dims)\n\n    def _get_mask(self, N, dtype):\n        indices = mx.arange(N)\n        mask = indices[:, None] < indices[None]\n        mask = mask.astype(dtype) * (-6e4 if dtype == mx.float16 else -1e9)\n        return mask\n\n    def sanitize(self, weights):\n        new_weights = {}\n        for key, w in weights.items():\n            # Remove prefixes\n            if key.startswith(\"text_model.\"):\n                key = key[11:]\n            if key.startswith(\"embeddings.\"):\n                key = key[11:]\n            if key.startswith(\"encoder.\"):\n                key = key[8:]\n\n            # Map attention layers\n            if \"self_attn.\" in key:\n                key = key.replace(\"self_attn.\", \"attention.\")\n            if \"q_proj.\" in key:\n                key = key.replace(\"q_proj.\", \"query_proj.\")\n            if \"k_proj.\" in key:\n                key = key.replace(\"k_proj.\", \"key_proj.\")\n            if \"v_proj.\" in key:\n                key = key.replace(\"v_proj.\", \"value_proj.\")\n\n            # Map ffn layers\n            if \"mlp.fc1\" in key:\n                key = key.replace(\"mlp.fc1\", \"linear1\")\n            if \"mlp.fc2\" in key:\n                key = key.replace(\"mlp.fc2\", \"linear2\")\n\n            new_weights[key] = w\n\n        return new_weights\n\n    def __call__(self, x):\n        # Extract some shapes\n        B, N = x.shape\n        eos_tokens = x.argmax(-1)\n\n        # Compute the embeddings\n        x = self.token_embedding(x)\n        x = x + self.position_embedding.weight[:N]\n\n        # Compute the features from the transformer\n        mask = self._get_mask(N, x.dtype)\n        hidden_states = []\n        for l in self.layers:\n            x = l(x, mask)\n            hidden_states.append(x)\n\n        # Apply the final layernorm and return\n        x = self.final_layer_norm(x)\n        last_hidden_state = x\n\n        # Select the EOS token\n        pooled_output = x[mx.arange(len(x)), eos_tokens]\n\n        return CLIPOutput(\n            pooled_output=pooled_output,\n            last_hidden_state=last_hidden_state,\n            hidden_states=hidden_states,\n        )\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/datasets.py",
    "content": "import json\nfrom pathlib import Path\n\nfrom PIL import Image\n\n\nclass Dataset:\n    def __getitem__(self, index: int):\n        raise NotImplementedError()\n\n    def __len__(self):\n        raise NotImplementedError()\n\n\nclass LocalDataset(Dataset):\n    prompt_key = \"prompt\"\n\n    def __init__(self, dataset: str, data_file):\n        self.dataset_base = Path(dataset)\n        with open(data_file, \"r\") as fid:\n            self._data = [json.loads(l) for l in fid]\n\n    def __len__(self):\n        return len(self._data)\n\n    def __getitem__(self, index: int):\n        item = self._data[index]\n        image = Image.open(self.dataset_base / item[\"image\"])\n        return image, item[self.prompt_key]\n\n\nclass LegacyDataset(LocalDataset):\n    prompt_key = \"text\"\n\n    def __init__(self, dataset: str):\n        self.dataset_base = Path(dataset)\n        with open(self.dataset_base / \"index.json\") as f:\n            self._data = json.load(f)[\"data\"]\n\n\nclass HuggingFaceDataset(Dataset):\n\n    def __init__(self, dataset: str):\n        from datasets import load_dataset as hf_load_dataset\n\n        self._df = hf_load_dataset(dataset)[\"train\"]\n\n    def __len__(self):\n        return len(self._df)\n\n    def __getitem__(self, index: int):\n        item = self._df[index]\n        return item[\"image\"], item[\"prompt\"]\n\n\ndef load_dataset(dataset: str):\n    dataset_base = Path(dataset)\n    data_file = dataset_base / \"train.jsonl\"\n    legacy_file = dataset_base / \"index.json\"\n\n    if data_file.exists():\n        print(f\"Load the local dataset {data_file} .\", flush=True)\n        dataset = LocalDataset(dataset, data_file)\n    elif legacy_file.exists():\n        print(f\"Load the local dataset {legacy_file} .\")\n        print()\n        print(\"     WARNING: 'index.json' is deprecated in favor of 'train.jsonl'.\")\n        print(\"              See the README for details.\")\n        print(flush=True)\n        dataset = LegacyDataset(dataset)\n    else:\n        print(f\"Load the Hugging Face dataset {dataset} .\", flush=True)\n        dataset = HuggingFaceDataset(dataset)\n\n    return dataset\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/flux.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nfrom typing import Tuple\n\nimport mlx.core as mx\nimport mlx.nn as nn\nfrom mlx.utils import tree_unflatten\nfrom tqdm import tqdm\n\nfrom .lora import LoRALinear\nfrom .sampler import FluxSampler\nfrom .utils import (\n    load_ae,\n    load_clip,\n    load_clip_tokenizer,\n    load_flow_model,\n    load_t5,\n    load_t5_tokenizer,\n)\n\n\nclass FluxPipeline:\n    def __init__(self, name: str, model_path: str, t5_padding: bool = True):\n        self.dtype = mx.bfloat16\n        self.name = name\n        self.t5_padding = t5_padding\n\n        self.model_path = model_path\n        self.ae = load_ae(name, model_path)\n        self.flow = load_flow_model(name, model_path)\n        self.clip = load_clip(name, model_path)\n        self.clip_tokenizer = load_clip_tokenizer(name, model_path)\n        self.t5 = load_t5(name, model_path)\n        self.t5_tokenizer = load_t5_tokenizer(name, model_path)\n        self.sampler = FluxSampler(name)\n\n    def ensure_models_are_loaded(self):\n        mx.eval(\n            self.ae.parameters(),\n            self.flow.parameters(),\n            self.clip.parameters(),\n            self.t5.parameters(),\n        )\n\n    def reload_text_encoders(self):\n        self.t5 = load_t5(self.name, self.model_path)\n        self.clip = load_clip(self.name, self.model_path)\n\n    def tokenize(self, text):\n        t5_tokens = self.t5_tokenizer.encode(text, pad=self.t5_padding)\n        clip_tokens = self.clip_tokenizer.encode(text)\n        return t5_tokens, clip_tokens\n\n    def _prepare_latent_images(self, x):\n        b, h, w, c = x.shape\n\n        # Pack the latent image to 2x2 patches\n        x = x.reshape(b, h // 2, 2, w // 2, 2, c)\n        x = x.transpose(0, 1, 3, 5, 2, 4).reshape(b, h * w // 4, c * 4)\n\n        # Create positions ids used to positionally encode each patch. Due to\n        # the way RoPE works, this results in an interesting positional\n        # encoding where parts of the feature are holding different positional\n        # information. Namely, the first part holds information independent of\n        # the spatial position (hence 0s), the 2nd part holds vertical spatial\n        # information and the last one horizontal.\n        i = mx.zeros((h // 2, w // 2), dtype=mx.int32)\n        j, k = mx.meshgrid(mx.arange(h // 2), mx.arange(w // 2), indexing=\"ij\")\n        x_ids = mx.stack([i, j, k], axis=-1)\n        x_ids = mx.repeat(x_ids.reshape(1, h * w // 4, 3), b, 0)\n\n        return x, x_ids\n\n    def _prepare_conditioning(self, n_images, t5_tokens, clip_tokens):\n        # Prepare the text features\n        txt = self.t5(t5_tokens)\n        if len(txt) == 1 and n_images > 1:\n            txt = mx.broadcast_to(txt, (n_images, *txt.shape[1:]))\n        txt_ids = mx.zeros((n_images, txt.shape[1], 3), dtype=mx.int32)\n\n        # Prepare the clip text features\n        vec = self.clip(clip_tokens).pooled_output\n        if len(vec) == 1 and n_images > 1:\n            vec = mx.broadcast_to(vec, (n_images, *vec.shape[1:]))\n\n        return txt, txt_ids, vec\n\n    def _denoising_loop(\n        self,\n        x_t,\n        x_ids,\n        txt,\n        txt_ids,\n        vec,\n        num_steps: int = 35,\n        guidance: float = 4.0,\n        start: float = 1,\n        stop: float = 0,\n    ):\n        B = len(x_t)\n\n        def scalar(x):\n            return mx.full((B,), x, dtype=self.dtype)\n\n        guidance = scalar(guidance)\n        timesteps = self.sampler.timesteps(\n            num_steps,\n            x_t.shape[1],\n            start=start,\n            stop=stop,\n        )\n        for i in range(num_steps):\n            t = timesteps[i]\n            t_prev = timesteps[i + 1]\n\n            pred = self.flow(\n                img=x_t,\n                img_ids=x_ids,\n                txt=txt,\n                txt_ids=txt_ids,\n                y=vec,\n                timesteps=scalar(t),\n                guidance=guidance,\n            )\n            x_t = self.sampler.step(pred, x_t, t, t_prev)\n\n            yield x_t\n\n    def generate_latents(\n        self,\n        text: str,\n        n_images: int = 1,\n        num_steps: int = 35,\n        guidance: float = 4.0,\n        latent_size: Tuple[int, int] = (64, 64),\n        seed=None,\n    ):\n        # Set the PRNG state\n        if seed is not None:\n            mx.random.seed(seed)\n\n        # Create the latent variables\n        x_T = self.sampler.sample_prior((n_images, *latent_size, 16), dtype=self.dtype)\n        x_T, x_ids = self._prepare_latent_images(x_T)\n\n        # Get the conditioning\n        t5_tokens, clip_tokens = self.tokenize(text)\n        txt, txt_ids, vec = self._prepare_conditioning(n_images, t5_tokens, clip_tokens)\n\n        # Yield the conditioning for controlled evaluation by the caller\n        yield (x_T, x_ids, txt, txt_ids, vec)\n\n        # Yield the latent sequences from the denoising loop\n        yield from self._denoising_loop(\n            x_T, x_ids, txt, txt_ids, vec, num_steps=num_steps, guidance=guidance\n        )\n\n    def decode(self, x, latent_size: Tuple[int, int] = (64, 64)):\n        h, w = latent_size\n        x = x.reshape(len(x), h // 2, w // 2, -1, 2, 2)\n        x = x.transpose(0, 1, 4, 2, 5, 3).reshape(len(x), h, w, -1)\n        x = self.ae.decode(x)\n        return mx.clip(x + 1, 0, 2) * 0.5\n\n    def generate_images(\n        self,\n        text: str,\n        n_images: int = 1,\n        num_steps: int = 35,\n        guidance: float = 4.0,\n        latent_size: Tuple[int, int] = (64, 64),\n        seed=None,\n        reload_text_encoders: bool = True,\n        progress: bool = True,\n    ):\n        latents = self.generate_latents(\n            text, n_images, num_steps, guidance, latent_size, seed\n        )\n        mx.eval(next(latents))\n\n        if reload_text_encoders:\n            self.reload_text_encoders()\n\n        for x_t in tqdm(latents, total=num_steps, disable=not progress, leave=True):\n            mx.eval(x_t)\n\n        images = []\n        for i in tqdm(range(len(x_t)), disable=not progress, desc=\"generate images\"):\n            images.append(self.decode(x_t[i : i + 1]))\n            mx.eval(images[-1])\n        images = mx.concatenate(images, axis=0)\n        mx.eval(images)\n\n        return images\n\n    def training_loss(\n        self,\n        x_0: mx.array,\n        t5_features: mx.array,\n        clip_features: mx.array,\n        guidance: mx.array,\n    ):\n        # Get the text conditioning\n        txt = t5_features\n        txt_ids = mx.zeros(txt.shape[:-1] + (3,), dtype=mx.int32)\n        vec = clip_features\n\n        # Prepare the latent input\n        x_0, x_ids = self._prepare_latent_images(x_0)\n\n        # Forward process\n        t = self.sampler.random_timesteps(*x_0.shape[:2], dtype=self.dtype)\n        eps = mx.random.normal(x_0.shape, dtype=self.dtype)\n        x_t = self.sampler.add_noise(x_0, t, noise=eps)\n        x_t = mx.stop_gradient(x_t)\n\n        # Do the denoising\n        pred = self.flow(\n            img=x_t,\n            img_ids=x_ids,\n            txt=txt,\n            txt_ids=txt_ids,\n            y=vec,\n            timesteps=t,\n            guidance=guidance,\n        )\n\n        return (pred + x_0 - eps).square().mean()\n\n    def linear_to_lora_layers(self, rank: int = 8, num_blocks: int = -1):\n        \"\"\"Swap the linear layers in the transformer blocks with LoRA layers.\"\"\"\n        all_blocks = self.flow.double_blocks + self.flow.single_blocks\n        all_blocks.reverse()\n        num_blocks = num_blocks if num_blocks > 0 else len(all_blocks)\n        for i, block in zip(range(num_blocks), all_blocks):\n            loras = []\n            for name, module in block.named_modules():\n                if isinstance(module, nn.Linear):\n                    loras.append((name, LoRALinear.from_base(module, r=rank)))\n            block.update_modules(tree_unflatten(loras))\n\n    def fuse_lora_layers(self):\n        fused_layers = []\n        for name, module in self.flow.named_modules():\n            if isinstance(module, LoRALinear):\n                fused_layers.append((name, module.fuse()))\n        self.flow.update_modules(tree_unflatten(fused_layers))\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/layers.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nimport math\nfrom dataclasses import dataclass\nfrom functools import partial\nfrom typing import List, Optional, Tuple\n\nimport mlx.core as mx\nimport mlx.nn as nn\n\n\ndef _rope(pos: mx.array, dim: int, theta: float):\n    scale = mx.arange(0, dim, 2, dtype=mx.float32) / dim\n    omega = 1.0 / (theta**scale)\n    x = pos[..., None] * omega\n    cosx = mx.cos(x)\n    sinx = mx.sin(x)\n    pe = mx.stack([cosx, -sinx, sinx, cosx], axis=-1)\n    pe = pe.reshape(*pe.shape[:-1], 2, 2)\n\n    return pe\n\n\n@partial(mx.compile, shapeless=True)\ndef _ab_plus_cd(a, b, c, d):\n    return a * b + c * d\n\n\ndef _apply_rope(x, pe):\n    s = x.shape\n    x = x.reshape(*s[:-1], -1, 1, 2)\n    x = _ab_plus_cd(x[..., 0], pe[..., 0], x[..., 1], pe[..., 1])\n    return x.reshape(s)\n\n\ndef _attention(q: mx.array, k: mx.array, v: mx.array, pe: mx.array):\n    B, H, L, D = q.shape\n\n    q = _apply_rope(q, pe)\n    k = _apply_rope(k, pe)\n    x = mx.fast.scaled_dot_product_attention(q, k, v, scale=D ** (-0.5))\n\n    return x.transpose(0, 2, 1, 3).reshape(B, L, -1)\n\n\ndef timestep_embedding(\n    t: mx.array, dim: int, max_period: int = 10000, time_factor: float = 1000.0\n):\n    half = dim // 2\n    freqs = mx.arange(0, half, dtype=mx.float32) / half\n    freqs = freqs * (-math.log(max_period))\n    freqs = mx.exp(freqs)\n\n    x = (time_factor * t)[:, None] * freqs[None]\n    x = mx.concatenate([mx.cos(x), mx.sin(x)], axis=-1)\n\n    return x.astype(t.dtype)\n\n\nclass EmbedND(nn.Module):\n    def __init__(self, dim: int, theta: int, axes_dim: List[int]):\n        super().__init__()\n\n        self.dim = dim\n        self.theta = theta\n        self.axes_dim = axes_dim\n\n    def __call__(self, ids: mx.array):\n        n_axes = ids.shape[-1]\n        pe = mx.concatenate(\n            [_rope(ids[..., i], self.axes_dim[i], self.theta) for i in range(n_axes)],\n            axis=-3,\n        )\n\n        return pe[:, None]\n\n\nclass MLPEmbedder(nn.Module):\n    def __init__(self, in_dim: int, hidden_dim: int):\n        super().__init__()\n        self.in_layer = nn.Linear(in_dim, hidden_dim, bias=True)\n        self.out_layer = nn.Linear(hidden_dim, hidden_dim, bias=True)\n\n    def __call__(self, x: mx.array) -> mx.array:\n        return self.out_layer(nn.silu(self.in_layer(x)))\n\n\nclass QKNorm(nn.Module):\n    def __init__(self, dim: int):\n        super().__init__()\n        self.query_norm = nn.RMSNorm(dim)\n        self.key_norm = nn.RMSNorm(dim)\n\n    def __call__(self, q: mx.array, k: mx.array) -> tuple[mx.array, mx.array]:\n        return self.query_norm(q), self.key_norm(k)\n\n\nclass SelfAttention(nn.Module):\n    def __init__(self, dim: int, num_heads: int = 8, qkv_bias: bool = False):\n        super().__init__()\n        self.num_heads = num_heads\n        head_dim = dim // num_heads\n\n        self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n        self.norm = QKNorm(head_dim)\n        self.proj = nn.Linear(dim, dim)\n\n    def __call__(self, x: mx.array, pe: mx.array) -> mx.array:\n        H = self.num_heads\n        B, L, _ = x.shape\n        qkv = self.qkv(x)\n        q, k, v = mx.split(qkv, 3, axis=-1)\n        q = q.reshape(B, L, H, -1).transpose(0, 2, 1, 3)\n        k = k.reshape(B, L, H, -1).transpose(0, 2, 1, 3)\n        v = v.reshape(B, L, H, -1).transpose(0, 2, 1, 3)\n        q, k = self.norm(q, k)\n        x = _attention(q, k, v, pe)\n        x = self.proj(x)\n        return x\n\n\n@dataclass\nclass ModulationOut:\n    shift: mx.array\n    scale: mx.array\n    gate: mx.array\n\n\nclass Modulation(nn.Module):\n    def __init__(self, dim: int, double: bool):\n        super().__init__()\n        self.is_double = double\n        self.multiplier = 6 if double else 3\n        self.lin = nn.Linear(dim, self.multiplier * dim, bias=True)\n\n    def __call__(self, x: mx.array) -> Tuple[ModulationOut, Optional[ModulationOut]]:\n        x = self.lin(nn.silu(x))\n        xs = mx.split(x[:, None, :], self.multiplier, axis=-1)\n\n        mod1 = ModulationOut(*xs[:3])\n        mod2 = ModulationOut(*xs[3:]) if self.is_double else None\n\n        return mod1, mod2\n\n\nclass DoubleStreamBlock(nn.Module):\n    def __init__(\n        self, hidden_size: int, num_heads: int, mlp_ratio: float, qkv_bias: bool = False\n    ):\n        super().__init__()\n\n        mlp_hidden_dim = int(hidden_size * mlp_ratio)\n        self.num_heads = num_heads\n        self.hidden_size = hidden_size\n        self.img_mod = Modulation(hidden_size, double=True)\n        self.img_norm1 = nn.LayerNorm(hidden_size, affine=False, eps=1e-6)\n        self.img_attn = SelfAttention(\n            dim=hidden_size, num_heads=num_heads, qkv_bias=qkv_bias\n        )\n\n        self.img_norm2 = nn.LayerNorm(hidden_size, affine=False, eps=1e-6)\n        self.img_mlp = nn.Sequential(\n            nn.Linear(hidden_size, mlp_hidden_dim, bias=True),\n            nn.GELU(approx=\"tanh\"),\n            nn.Linear(mlp_hidden_dim, hidden_size, bias=True),\n        )\n\n        self.txt_mod = Modulation(hidden_size, double=True)\n        self.txt_norm1 = nn.LayerNorm(hidden_size, affine=False, eps=1e-6)\n        self.txt_attn = SelfAttention(\n            dim=hidden_size, num_heads=num_heads, qkv_bias=qkv_bias\n        )\n\n        self.txt_norm2 = nn.LayerNorm(hidden_size, affine=False, eps=1e-6)\n        self.txt_mlp = nn.Sequential(\n            nn.Linear(hidden_size, mlp_hidden_dim, bias=True),\n            nn.GELU(approx=\"tanh\"),\n            nn.Linear(mlp_hidden_dim, hidden_size, bias=True),\n        )\n\n    def __call__(\n        self, img: mx.array, txt: mx.array, vec: mx.array, pe: mx.array\n    ) -> Tuple[mx.array, mx.array]:\n        B, L, _ = img.shape\n        _, S, _ = txt.shape\n        H = self.num_heads\n\n        img_mod1, img_mod2 = self.img_mod(vec)\n        txt_mod1, txt_mod2 = self.txt_mod(vec)\n\n        # prepare image for attention\n        img_modulated = self.img_norm1(img)\n        img_modulated = (1 + img_mod1.scale) * img_modulated + img_mod1.shift\n        img_qkv = self.img_attn.qkv(img_modulated)\n        img_q, img_k, img_v = mx.split(img_qkv, 3, axis=-1)\n        img_q = img_q.reshape(B, L, H, -1).transpose(0, 2, 1, 3)\n        img_k = img_k.reshape(B, L, H, -1).transpose(0, 2, 1, 3)\n        img_v = img_v.reshape(B, L, H, -1).transpose(0, 2, 1, 3)\n        img_q, img_k = self.img_attn.norm(img_q, img_k)\n\n        # prepare txt for attention\n        txt_modulated = self.txt_norm1(txt)\n        txt_modulated = (1 + txt_mod1.scale) * txt_modulated + txt_mod1.shift\n        txt_qkv = self.txt_attn.qkv(txt_modulated)\n        txt_q, txt_k, txt_v = mx.split(txt_qkv, 3, axis=-1)\n        txt_q = txt_q.reshape(B, S, H, -1).transpose(0, 2, 1, 3)\n        txt_k = txt_k.reshape(B, S, H, -1).transpose(0, 2, 1, 3)\n        txt_v = txt_v.reshape(B, S, H, -1).transpose(0, 2, 1, 3)\n        txt_q, txt_k = self.txt_attn.norm(txt_q, txt_k)\n\n        # run actual attention\n        q = mx.concatenate([txt_q, img_q], axis=2)\n        k = mx.concatenate([txt_k, img_k], axis=2)\n        v = mx.concatenate([txt_v, img_v], axis=2)\n\n        attn = _attention(q, k, v, pe)\n        txt_attn, img_attn = mx.split(attn, [S], axis=1)\n\n        # calculate the img bloks\n        img = img + img_mod1.gate * self.img_attn.proj(img_attn)\n        img = img + img_mod2.gate * self.img_mlp(\n            (1 + img_mod2.scale) * self.img_norm2(img) + img_mod2.shift\n        )\n\n        # calculate the txt bloks\n        txt = txt + txt_mod1.gate * self.txt_attn.proj(txt_attn)\n        txt = txt + txt_mod2.gate * self.txt_mlp(\n            (1 + txt_mod2.scale) * self.txt_norm2(txt) + txt_mod2.shift\n        )\n\n        return img, txt\n\n\nclass SingleStreamBlock(nn.Module):\n    def __init__(\n        self,\n        hidden_size: int,\n        num_heads: int,\n        mlp_ratio: float = 4.0,\n        qk_scale: Optional[float] = None,\n    ):\n        super().__init__()\n        self.hidden_dim = hidden_size\n        self.num_heads = num_heads\n        head_dim = hidden_size // num_heads\n        self.scale = qk_scale or head_dim**-0.5\n\n        self.mlp_hidden_dim = int(hidden_size * mlp_ratio)\n        # qkv and mlp_in\n        self.linear1 = nn.Linear(hidden_size, hidden_size * 3 + self.mlp_hidden_dim)\n        # proj and mlp_out\n        self.linear2 = nn.Linear(hidden_size + self.mlp_hidden_dim, hidden_size)\n\n        self.norm = QKNorm(head_dim)\n\n        self.hidden_size = hidden_size\n        self.pre_norm = nn.LayerNorm(hidden_size, affine=False, eps=1e-6)\n\n        self.mlp_act = nn.GELU(approx=\"tanh\")\n        self.modulation = Modulation(hidden_size, double=False)\n\n    def __call__(self, x: mx.array, vec: mx.array, pe: mx.array):\n        B, L, _ = x.shape\n        H = self.num_heads\n\n        mod, _ = self.modulation(vec)\n        x_mod = (1 + mod.scale) * self.pre_norm(x) + mod.shift\n\n        q, k, v, mlp = mx.split(\n            self.linear1(x_mod),\n            [self.hidden_size, 2 * self.hidden_size, 3 * self.hidden_size],\n            axis=-1,\n        )\n        q = q.reshape(B, L, H, -1).transpose(0, 2, 1, 3)\n        k = k.reshape(B, L, H, -1).transpose(0, 2, 1, 3)\n        v = v.reshape(B, L, H, -1).transpose(0, 2, 1, 3)\n        q, k = self.norm(q, k)\n\n        # compute attention\n        y = _attention(q, k, v, pe)\n\n        # compute activation in mlp stream, cat again and run second linear layer\n        y = self.linear2(mx.concatenate([y, self.mlp_act(mlp)], axis=2))\n        return x + mod.gate * y\n\n\nclass LastLayer(nn.Module):\n    def __init__(self, hidden_size: int, patch_size: int, out_channels: int):\n        super().__init__()\n        self.norm_final = nn.LayerNorm(hidden_size, affine=False, eps=1e-6)\n        self.linear = nn.Linear(\n            hidden_size, patch_size * patch_size * out_channels, bias=True\n        )\n        self.adaLN_modulation = nn.Sequential(\n            nn.SiLU(), nn.Linear(hidden_size, 2 * hidden_size, bias=True)\n        )\n\n    def __call__(self, x: mx.array, vec: mx.array):\n        shift, scale = mx.split(self.adaLN_modulation(vec), 2, axis=1)\n        x = (1 + scale[:, None, :]) * self.norm_final(x) + shift[:, None, :]\n        x = self.linear(x)\n        return x\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/lora.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nimport math\n\nimport mlx.core as mx\nimport mlx.nn as nn\n\n\nclass LoRALinear(nn.Module):\n    @staticmethod\n    def from_base(\n        linear: nn.Linear,\n        r: int = 8,\n        dropout: float = 0.0,\n        scale: float = 1.0,\n    ):\n        output_dims, input_dims = linear.weight.shape\n        lora_lin = LoRALinear(\n            input_dims=input_dims,\n            output_dims=output_dims,\n            r=r,\n            dropout=dropout,\n            scale=scale,\n        )\n        lora_lin.linear = linear\n        return lora_lin\n\n    def fuse(self):\n        linear = self.linear\n        bias = \"bias\" in linear\n        weight = linear.weight\n        dtype = weight.dtype\n\n        output_dims, input_dims = weight.shape\n        fused_linear = nn.Linear(input_dims, output_dims, bias=bias)\n\n        lora_b = self.scale * self.lora_b.T\n        lora_a = self.lora_a.T\n        fused_linear.weight = weight + (lora_b @ lora_a).astype(dtype)\n        if bias:\n            fused_linear.bias = linear.bias\n\n        return fused_linear\n\n    def __init__(\n        self,\n        input_dims: int,\n        output_dims: int,\n        r: int = 8,\n        dropout: float = 0.0,\n        scale: float = 1.0,\n        bias: bool = False,\n    ):\n        super().__init__()\n\n        # Regular linear layer weights\n        self.linear = nn.Linear(input_dims, output_dims, bias=bias)\n\n        self.dropout = nn.Dropout(p=dropout)\n\n        # Scale for low-rank update\n        self.scale = scale\n\n        # Low rank lora weights\n        scale = 1 / math.sqrt(input_dims)\n        self.lora_a = mx.random.uniform(\n            low=-scale,\n            high=scale,\n            shape=(input_dims, r),\n        )\n        self.lora_b = mx.zeros(shape=(r, output_dims))\n\n    def __call__(self, x):\n        y = self.linear(x)\n        z = (self.dropout(x) @ self.lora_a) @ self.lora_b\n        return y + (self.scale * z).astype(x.dtype)\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/model.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nimport mlx.core as mx\nimport mlx.nn as nn\n\nfrom .layers import (\n    DoubleStreamBlock,\n    EmbedND,\n    LastLayer,\n    MLPEmbedder,\n    SingleStreamBlock,\n    timestep_embedding,\n)\n\n\n@dataclass\nclass FluxParams:\n    in_channels: int\n    vec_in_dim: int\n    context_in_dim: int\n    hidden_size: int\n    mlp_ratio: float\n    num_heads: int\n    depth: int\n    depth_single_blocks: int\n    axes_dim: list[int]\n    theta: int\n    qkv_bias: bool\n    guidance_embed: bool\n\n\nclass Flux(nn.Module):\n    def __init__(self, params: FluxParams):\n        super().__init__()\n\n        self.params = params\n        self.in_channels = params.in_channels\n        self.out_channels = self.in_channels\n        if params.hidden_size % params.num_heads != 0:\n            raise ValueError(\n                f\"Hidden size {params.hidden_size} must be divisible by num_heads {params.num_heads}\"\n            )\n        pe_dim = params.hidden_size // params.num_heads\n        if sum(params.axes_dim) != pe_dim:\n            raise ValueError(\n                f\"Got {params.axes_dim} but expected positional dim {pe_dim}\"\n            )\n        self.hidden_size = params.hidden_size\n        self.num_heads = params.num_heads\n        self.pe_embedder = EmbedND(\n            dim=pe_dim, theta=params.theta, axes_dim=params.axes_dim\n        )\n        self.img_in = nn.Linear(self.in_channels, self.hidden_size, bias=True)\n        self.time_in = MLPEmbedder(in_dim=256, hidden_dim=self.hidden_size)\n        self.vector_in = MLPEmbedder(params.vec_in_dim, self.hidden_size)\n        self.guidance_in = (\n            MLPEmbedder(in_dim=256, hidden_dim=self.hidden_size)\n            if params.guidance_embed\n            else nn.Identity()\n        )\n        self.txt_in = nn.Linear(params.context_in_dim, self.hidden_size)\n\n        self.double_blocks = [\n            DoubleStreamBlock(\n                self.hidden_size,\n                self.num_heads,\n                mlp_ratio=params.mlp_ratio,\n                qkv_bias=params.qkv_bias,\n            )\n            for _ in range(params.depth)\n        ]\n\n        self.single_blocks = [\n            SingleStreamBlock(\n                self.hidden_size, self.num_heads, mlp_ratio=params.mlp_ratio\n            )\n            for _ in range(params.depth_single_blocks)\n        ]\n\n        self.final_layer = LastLayer(self.hidden_size, 1, self.out_channels)\n\n    def sanitize(self, weights):\n        new_weights = {}\n        for k, w in weights.items():\n            if k.endswith(\".scale\"):\n                k = k[:-6] + \".weight\"\n            for seq in [\"img_mlp\", \"txt_mlp\", \"adaLN_modulation\"]:\n                if f\".{seq}.\" in k:\n                    k = k.replace(f\".{seq}.\", f\".{seq}.layers.\")\n                    break\n            new_weights[k] = w\n        return new_weights\n\n    def __call__(\n        self,\n        img: mx.array,\n        img_ids: mx.array,\n        txt: mx.array,\n        txt_ids: mx.array,\n        timesteps: mx.array,\n        y: mx.array,\n        guidance: Optional[mx.array] = None,\n    ) -> mx.array:\n        if img.ndim != 3 or txt.ndim != 3:\n            raise ValueError(\"Input img and txt tensors must have 3 dimensions.\")\n\n        img = self.img_in(img)\n        vec = self.time_in(timestep_embedding(timesteps, 256))\n        if self.params.guidance_embed:\n            if guidance is None:\n                raise ValueError(\n                    \"Didn't get guidance strength for guidance distilled model.\"\n                )\n            vec = vec + self.guidance_in(timestep_embedding(guidance, 256))\n        vec = vec + self.vector_in(y)\n        txt = self.txt_in(txt)\n\n        ids = mx.concatenate([txt_ids, img_ids], axis=1)\n        pe = self.pe_embedder(ids).astype(img.dtype)\n\n        for block in self.double_blocks:\n            img, txt = block(img=img, txt=txt, vec=vec, pe=pe)\n\n        img = mx.concatenate([txt, img], axis=1)\n        for block in self.single_blocks:\n            img = block(img, vec=vec, pe=pe)\n        img = img[:, txt.shape[1] :, ...]\n\n        img = self.final_layer(img, vec)\n\n        return img\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/sampler.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nimport math\nfrom functools import lru_cache\n\nimport mlx.core as mx\n\n\nclass FluxSampler:\n    def __init__(self, name: str, base_shift: float = 0.5, max_shift: float = 1.5):\n        self._base_shift = base_shift\n        self._max_shift = max_shift\n        self._schnell = \"schnell\" in name\n\n    def _time_shift(self, x, t):\n        x1, x2 = 256, 4096\n        t1, t2 = self._base_shift, self._max_shift\n        exp_mu = math.exp((x - x1) * (t2 - t1) / (x2 - x1) + t1)\n        t = exp_mu / (exp_mu + (1 / t - 1))\n        return t\n\n    @lru_cache\n    def timesteps(\n        self, num_steps, image_sequence_length, start: float = 1, stop: float = 0\n    ):\n        t = mx.linspace(start, stop, num_steps + 1)\n\n        if self._schnell:\n            t = self._time_shift(image_sequence_length, t)\n\n        return t.tolist()\n\n    def random_timesteps(self, B, L, dtype=mx.float32, key=None):\n        if self._schnell:\n            # TODO: Should we upweigh 1 and 0.75?\n            t = mx.random.randint(1, 5, shape=(B,), key=key)\n            t = t.astype(dtype) / 4\n        else:\n            t = mx.random.uniform(shape=(B,), dtype=dtype, key=key)\n            t = self._time_shift(L, t)\n\n        return t\n\n    def sample_prior(self, shape, dtype=mx.float32, key=None):\n        return mx.random.normal(shape, dtype=dtype, key=key)\n\n    def add_noise(self, x, t, noise=None, key=None):\n        noise = (\n            noise\n            if noise is not None\n            else mx.random.normal(x.shape, dtype=x.dtype, key=key)\n        )\n        return x * (1 - t) + t * noise\n\n    def step(self, pred, x_t, t, t_prev):\n        return x_t + (t_prev - t) * pred\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/t5.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nimport math\nfrom dataclasses import dataclass\nfrom typing import List, Optional, Tuple\n\nimport mlx.core as mx\nimport mlx.nn as nn\n\n_SHARED_REPLACEMENT_PATTERNS = [\n    (\".block.\", \".layers.\"),\n    (\".k.\", \".key_proj.\"),\n    (\".o.\", \".out_proj.\"),\n    (\".q.\", \".query_proj.\"),\n    (\".v.\", \".value_proj.\"),\n    (\"shared.\", \"wte.\"),\n    (\"lm_head.\", \"lm_head.linear.\"),\n    (\".layer.0.layer_norm.\", \".ln1.\"),\n    (\".layer.1.layer_norm.\", \".ln2.\"),\n    (\".layer.2.layer_norm.\", \".ln3.\"),\n    (\".final_layer_norm.\", \".ln.\"),\n    (\n        \"layers.0.layer.0.SelfAttention.relative_attention_bias.\",\n        \"relative_attention_bias.embeddings.\",\n    ),\n]\n\n_ENCODER_REPLACEMENT_PATTERNS = [\n    (\".layer.0.SelfAttention.\", \".attention.\"),\n    (\".layer.1.DenseReluDense.\", \".dense.\"),\n]\n\n\n@dataclass\nclass T5Config:\n    vocab_size: int\n    num_layers: int\n    num_heads: int\n    relative_attention_num_buckets: int\n    d_kv: int\n    d_model: int\n    feed_forward_proj: str\n    tie_word_embeddings: bool\n\n    d_ff: Optional[int] = None\n    num_decoder_layers: Optional[int] = None\n    relative_attention_max_distance: int = 128\n    layer_norm_epsilon: float = 1e-6\n\n    @classmethod\n    def from_dict(cls, config):\n        return cls(\n            vocab_size=config[\"vocab_size\"],\n            num_layers=config[\"num_layers\"],\n            num_heads=config[\"num_heads\"],\n            relative_attention_num_buckets=config[\"relative_attention_num_buckets\"],\n            d_kv=config[\"d_kv\"],\n            d_model=config[\"d_model\"],\n            feed_forward_proj=config[\"feed_forward_proj\"],\n            tie_word_embeddings=config[\"tie_word_embeddings\"],\n            d_ff=config.get(\"d_ff\", 4 * config[\"d_model\"]),\n            num_decoder_layers=config.get(\"num_decoder_layers\", config[\"num_layers\"]),\n            relative_attention_max_distance=config.get(\n                \"relative_attention_max_distance\", 128\n            ),\n            layer_norm_epsilon=config.get(\"layer_norm_epsilon\", 1e-6),\n        )\n\n\nclass RelativePositionBias(nn.Module):\n    def __init__(self, config: T5Config, bidirectional: bool):\n        self.bidirectional = bidirectional\n        self.num_buckets = config.relative_attention_num_buckets\n        self.max_distance = config.relative_attention_max_distance\n        self.n_heads = config.num_heads\n        self.embeddings = nn.Embedding(self.num_buckets, self.n_heads)\n\n    @staticmethod\n    def _relative_position_bucket(rpos, bidirectional, num_buckets, max_distance):\n        num_buckets = num_buckets // 2 if bidirectional else num_buckets\n        max_exact = num_buckets // 2\n\n        abspos = rpos.abs()\n        is_small = abspos < max_exact\n\n        scale = (num_buckets - max_exact) / math.log(max_distance / max_exact)\n        buckets_large = (mx.log(abspos / max_exact) * scale).astype(mx.int16)\n        buckets_large = mx.minimum(max_exact + buckets_large, num_buckets - 1)\n\n        buckets = mx.where(is_small, abspos, buckets_large)\n        if bidirectional:\n            buckets = buckets + (rpos > 0) * num_buckets\n        else:\n            buckets = buckets * (rpos < 0)\n\n        return buckets\n\n    def __call__(self, query_length: int, key_length: int, offset: int = 0):\n        \"\"\"Compute binned relative position bias\"\"\"\n        context_position = mx.arange(offset, query_length)[:, None]\n        memory_position = mx.arange(key_length)[None, :]\n\n        # shape (query_length, key_length)\n        relative_position = memory_position - context_position\n        relative_position_bucket = self._relative_position_bucket(\n            relative_position,\n            bidirectional=self.bidirectional,\n            num_buckets=self.num_buckets,\n            max_distance=self.max_distance,\n        )\n\n        # shape (query_length, key_length, num_heads)\n        values = self.embeddings(relative_position_bucket)\n\n        # shape (num_heads, query_length, key_length)\n        return values.transpose(2, 0, 1)\n\n\nclass MultiHeadAttention(nn.Module):\n    def __init__(self, config: T5Config):\n        super().__init__()\n        inner_dim = config.d_kv * config.num_heads\n        self.num_heads = config.num_heads\n        self.query_proj = nn.Linear(config.d_model, inner_dim, bias=False)\n        self.key_proj = nn.Linear(config.d_model, inner_dim, bias=False)\n        self.value_proj = nn.Linear(config.d_model, inner_dim, bias=False)\n        self.out_proj = nn.Linear(inner_dim, config.d_model, bias=False)\n\n    def __call__(\n        self,\n        queries: mx.array,\n        keys: mx.array,\n        values: mx.array,\n        mask: Optional[mx.array],\n        cache: Optional[Tuple[mx.array, mx.array]] = None,\n    ) -> [mx.array, Tuple[mx.array, mx.array]]:\n        queries = self.query_proj(queries)\n        keys = self.key_proj(keys)\n        values = self.value_proj(values)\n\n        num_heads = self.num_heads\n        B, L, _ = queries.shape\n        _, S, _ = keys.shape\n        queries = queries.reshape(B, L, num_heads, -1).transpose(0, 2, 1, 3)\n        keys = keys.reshape(B, S, num_heads, -1).transpose(0, 2, 1, 3)\n        values = values.reshape(B, S, num_heads, -1).transpose(0, 2, 1, 3)\n\n        if cache is not None:\n            key_cache, value_cache = cache\n            keys = mx.concatenate([key_cache, keys], axis=3)\n            values = mx.concatenate([value_cache, values], axis=2)\n\n        values_hat = mx.fast.scaled_dot_product_attention(\n            queries, keys, values, scale=1.0, mask=mask.astype(queries.dtype)\n        )\n        values_hat = values_hat.transpose(0, 2, 1, 3).reshape(B, L, -1)\n\n        return self.out_proj(values_hat), (keys, values)\n\n\nclass DenseActivation(nn.Module):\n    def __init__(self, config: T5Config):\n        super().__init__()\n        mlp_dims = config.d_ff or config.d_model * 4\n        self.gated = config.feed_forward_proj.startswith(\"gated\")\n        if self.gated:\n            self.wi_0 = nn.Linear(config.d_model, mlp_dims, bias=False)\n            self.wi_1 = nn.Linear(config.d_model, mlp_dims, bias=False)\n        else:\n            self.wi = nn.Linear(config.d_model, mlp_dims, bias=False)\n        self.wo = nn.Linear(mlp_dims, config.d_model, bias=False)\n        activation = config.feed_forward_proj.removeprefix(\"gated-\")\n        if activation == \"relu\":\n            self.act = nn.relu\n        elif activation == \"gelu\":\n            self.act = nn.gelu\n        elif activation == \"silu\":\n            self.act = nn.silu\n        else:\n            raise ValueError(f\"Unknown activation: {activation}\")\n\n    def __call__(self, x):\n        if self.gated:\n            hidden_act = self.act(self.wi_0(x))\n            hidden_linear = self.wi_1(x)\n            x = hidden_act * hidden_linear\n        else:\n            x = self.act(self.wi(x))\n        return self.wo(x)\n\n\nclass TransformerEncoderLayer(nn.Module):\n    def __init__(self, config: T5Config):\n        super().__init__()\n        self.attention = MultiHeadAttention(config)\n        self.ln1 = nn.RMSNorm(config.d_model, eps=config.layer_norm_epsilon)\n        self.ln2 = nn.RMSNorm(config.d_model, eps=config.layer_norm_epsilon)\n        self.dense = DenseActivation(config)\n\n    def __call__(self, x, mask):\n        y = self.ln1(x)\n        y, _ = self.attention(y, y, y, mask=mask)\n        x = x + y\n\n        y = self.ln2(x)\n        y = self.dense(y)\n        return x + y\n\n\nclass TransformerEncoder(nn.Module):\n    def __init__(self, config: T5Config):\n        super().__init__()\n        self.layers = [\n            TransformerEncoderLayer(config) for i in range(config.num_layers)\n        ]\n        self.ln = nn.RMSNorm(config.d_model, eps=config.layer_norm_epsilon)\n        self.relative_attention_bias = RelativePositionBias(config, bidirectional=True)\n\n    def __call__(self, x: mx.array):\n        pos_bias = self.relative_attention_bias(x.shape[1], x.shape[1])\n        pos_bias = pos_bias.astype(x.dtype)\n        for layer in self.layers:\n            x = layer(x, mask=pos_bias)\n        return self.ln(x)\n\n\nclass T5Encoder(nn.Module):\n    def __init__(self, config: T5Config):\n        self.wte = nn.Embedding(config.vocab_size, config.d_model)\n        self.encoder = TransformerEncoder(config)\n\n    def sanitize(self, weights):\n        new_weights = {}\n        for k, w in weights.items():\n            for old, new in _SHARED_REPLACEMENT_PATTERNS:\n                k = k.replace(old, new)\n            if k.startswith(\"encoder.\"):\n                for old, new in _ENCODER_REPLACEMENT_PATTERNS:\n                    k = k.replace(old, new)\n            new_weights[k] = w\n        return new_weights\n\n    def __call__(self, inputs: mx.array):\n        return self.encoder(self.wte(inputs))\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/tokenizers.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nimport mlx.core as mx\nimport regex\nfrom sentencepiece import SentencePieceProcessor\n\n\nclass CLIPTokenizer:\n    \"\"\"A simple port of CLIPTokenizer from https://github.com/huggingface/transformers/ .\"\"\"\n\n    def __init__(self, bpe_ranks, vocab, max_length=77):\n        self.max_length = max_length\n        self.bpe_ranks = bpe_ranks\n        self.vocab = vocab\n        self.pat = regex.compile(\n            r\"\"\"<\\|startoftext\\|>|<\\|endoftext\\|>|'s|'t|'re|'ve|'m|'ll|'d|[\\p{L}]+|[\\p{N}]|[^\\s\\p{L}\\p{N}]+\"\"\",\n            regex.IGNORECASE,\n        )\n\n        self._cache = {self.bos: self.bos, self.eos: self.eos}\n\n    @property\n    def bos(self):\n        return \"<|startoftext|>\"\n\n    @property\n    def bos_token(self):\n        return self.vocab[self.bos]\n\n    @property\n    def eos(self):\n        return \"<|endoftext|>\"\n\n    @property\n    def eos_token(self):\n        return self.vocab[self.eos]\n\n    def bpe(self, text):\n        if text in self._cache:\n            return self._cache[text]\n\n        unigrams = list(text[:-1]) + [text[-1] + \"</w>\"]\n        unique_bigrams = set(zip(unigrams, unigrams[1:]))\n\n        if not unique_bigrams:\n            return unigrams\n\n        # In every iteration try to merge the two most likely bigrams. If none\n        # was merged we are done.\n        #\n        # Ported from https://github.com/huggingface/transformers/blob/main/src/transformers/models/clip/tokenization_clip.py\n        while unique_bigrams:\n            bigram = min(\n                unique_bigrams, key=lambda pair: self.bpe_ranks.get(pair, float(\"inf\"))\n            )\n            if bigram not in self.bpe_ranks:\n                break\n\n            new_unigrams = []\n            skip = False\n            for a, b in zip(unigrams, unigrams[1:]):\n                if skip:\n                    skip = False\n                    continue\n\n                if (a, b) == bigram:\n                    new_unigrams.append(a + b)\n                    skip = True\n\n                else:\n                    new_unigrams.append(a)\n\n            if not skip:\n                new_unigrams.append(b)\n\n            unigrams = new_unigrams\n            unique_bigrams = set(zip(unigrams, unigrams[1:]))\n\n        self._cache[text] = unigrams\n\n        return unigrams\n\n    def tokenize(self, text, prepend_bos=True, append_eos=True):\n        if isinstance(text, list):\n            return [self.tokenize(t, prepend_bos, append_eos) for t in text]\n\n        # Lower case cleanup and split according to self.pat. Hugging Face does\n        # a much more thorough job here but this should suffice for 95% of\n        # cases.\n        clean_text = regex.sub(r\"\\s+\", \" \", text.lower())\n        tokens = regex.findall(self.pat, clean_text)\n\n        # Split the tokens according to the byte-pair merge file\n        bpe_tokens = [ti for t in tokens for ti in self.bpe(t)]\n\n        # Map to token ids and return\n        tokens = [self.vocab[t] for t in bpe_tokens]\n        if prepend_bos:\n            tokens = [self.bos_token] + tokens\n        if append_eos:\n            tokens.append(self.eos_token)\n\n        if len(tokens) > self.max_length:\n            tokens = tokens[: self.max_length]\n            if append_eos:\n                tokens[-1] = self.eos_token\n\n        return tokens\n\n    def encode(self, text):\n        if not isinstance(text, list):\n            return self.encode([text])\n\n        tokens = self.tokenize(text)\n        length = max(len(t) for t in tokens)\n        for t in tokens:\n            t.extend([self.eos_token] * (length - len(t)))\n\n        return mx.array(tokens)\n\n\nclass T5Tokenizer:\n    def __init__(self, model_file, max_length=512):\n        self._tokenizer = SentencePieceProcessor(model_file)\n        self.max_length = max_length\n\n    @property\n    def pad(self):\n        try:\n            return self._tokenizer.id_to_piece(self.pad_token)\n        except IndexError:\n            return None\n\n    @property\n    def pad_token(self):\n        return self._tokenizer.pad_id()\n\n    @property\n    def bos(self):\n        try:\n            return self._tokenizer.id_to_piece(self.bos_token)\n        except IndexError:\n            return None\n\n    @property\n    def bos_token(self):\n        return self._tokenizer.bos_id()\n\n    @property\n    def eos(self):\n        try:\n            return self._tokenizer.id_to_piece(self.eos_token)\n        except IndexError:\n            return None\n\n    @property\n    def eos_token(self):\n        return self._tokenizer.eos_id()\n\n    def tokenize(self, text, prepend_bos=True, append_eos=True, pad=True):\n        if isinstance(text, list):\n            return [self.tokenize(t, prepend_bos, append_eos, pad) for t in text]\n\n        tokens = self._tokenizer.encode(text)\n\n        if prepend_bos and self.bos_token >= 0:\n            tokens = [self.bos_token] + tokens\n        if append_eos and self.eos_token >= 0:\n            tokens.append(self.eos_token)\n        if pad and len(tokens) < self.max_length and self.pad_token >= 0:\n            tokens += [self.pad_token] * (self.max_length - len(tokens))\n\n        return tokens\n\n    def encode(self, text, pad=True):\n        if not isinstance(text, list):\n            return self.encode([text], pad=pad)\n\n        pad_token = self.pad_token if self.pad_token >= 0 else 0\n        tokens = self.tokenize(text, pad=pad)\n        length = max(len(t) for t in tokens)\n        for t in tokens:\n            t.extend([pad_token] * (length - len(t)))\n\n        return mx.array(tokens)\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/trainer.py",
    "content": "import mlx.core as mx\nimport numpy as np\nfrom PIL import Image, ImageFile\nfrom tqdm import tqdm\n\nfrom .datasets import Dataset\nfrom .flux import FluxPipeline\n\n\nclass Trainer:\n\n    def __init__(self, flux: FluxPipeline, dataset: Dataset, args):\n        self.flux = flux\n        self.dataset = dataset\n        self.args = args\n        self.latents = []\n        self.t5_features = []\n        self.clip_features = []\n\n    def _random_crop_resize(self, img):\n        resolution = self.args.resolution\n        width, height = img.size\n\n        a, b, c, d = mx.random.uniform(shape=(4,), stream=mx.cpu).tolist()\n\n        # Random crop the input image between 0.8 to 1.0 of its original dimensions\n        crop_size = (\n            max((0.8 + 0.2 * a) * width, resolution[0]),\n            max((0.8 + 0.2 * b) * height, resolution[1]),\n        )\n        pan = (width - crop_size[0], height - crop_size[1])\n        img = img.crop(\n            (\n                pan[0] * c,\n                pan[1] * d,\n                crop_size[0] + pan[0] * c,\n                crop_size[1] + pan[1] * d,\n            )\n        )\n\n        # Fit the largest rectangle with the ratio of resolution in the image\n        # rectangle.\n        width, height = crop_size\n        ratio = resolution[0] / resolution[1]\n        r1 = (height * ratio, height)\n        r2 = (width, width / ratio)\n        r = r1 if r1[0] <= width else r2\n        img = img.crop(\n            (\n                (width - r[0]) / 2,\n                (height - r[1]) / 2,\n                (width + r[0]) / 2,\n                (height + r[1]) / 2,\n            )\n        )\n\n        # Finally resize the image to resolution\n        img = img.resize(resolution, Image.LANCZOS)\n\n        return mx.array(np.array(img))\n\n    def _encode_image(self, input_img: ImageFile.ImageFile, num_augmentations: int):\n        for i in range(num_augmentations):\n            img = self._random_crop_resize(input_img)\n            img = (img[:, :, :3].astype(self.flux.dtype) / 255) * 2 - 1\n            x_0 = self.flux.ae.encode(img[None])\n            x_0 = x_0.astype(self.flux.dtype)\n            mx.eval(x_0)\n            self.latents.append(x_0)\n\n    def _encode_prompt(self, prompt):\n        t5_tok, clip_tok = self.flux.tokenize([prompt])\n        t5_feat = self.flux.t5(t5_tok)\n        clip_feat = self.flux.clip(clip_tok).pooled_output\n        mx.eval(t5_feat, clip_feat)\n        self.t5_features.append(t5_feat)\n        self.clip_features.append(clip_feat)\n\n    def encode_dataset(self):\n        \"\"\"Encode the images & prompt in the latent space to prepare for training.\"\"\"\n        self.flux.ae.eval()\n        for image, prompt in tqdm(self.dataset, desc=\"encode dataset\"):\n            self._encode_image(image, self.args.num_augmentations)\n            self._encode_prompt(prompt)\n\n    def iterate(self, batch_size):\n        xs = mx.concatenate(self.latents)\n        t5 = mx.concatenate(self.t5_features)\n        clip = mx.concatenate(self.clip_features)\n        mx.eval(xs, t5, clip)\n        n_aug = self.args.num_augmentations\n        while True:\n            x_indices = mx.random.permutation(len(self.latents))\n            c_indices = x_indices // n_aug\n            for i in range(0, len(self.latents), batch_size):\n                x_i = x_indices[i : i + batch_size]\n                c_i = c_indices[i : i + batch_size]\n                yield xs[x_i], t5[c_i], clip[c_i]\n"
  },
  {
    "path": "xinference/thirdparty/mlx/flux/utils.py",
    "content": "# Copyright © 2024 Apple Inc.\n\nimport json\nimport os\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nimport mlx.core as mx\n\nfrom .autoencoder import AutoEncoder, AutoEncoderParams\nfrom .clip import CLIPTextModel, CLIPTextModelConfig\nfrom .model import Flux, FluxParams\nfrom .t5 import T5Config, T5Encoder\nfrom .tokenizers import CLIPTokenizer, T5Tokenizer\n\n\n@dataclass\nclass ModelSpec:\n    params: FluxParams\n    ae_params: AutoEncoderParams\n    ckpt_path: Optional[str]\n    ae_path: Optional[str]\n    repo_id: Optional[str]\n    repo_flow: Optional[str]\n    repo_ae: Optional[str]\n\n\nconfigs = {\n    \"flux-dev\": ModelSpec(\n        repo_id=\"black-forest-labs/FLUX.1-dev\",\n        repo_flow=\"flux1-dev.safetensors\",\n        repo_ae=\"ae.safetensors\",\n        ckpt_path=os.getenv(\"FLUX_DEV\"),\n        params=FluxParams(\n            in_channels=64,\n            vec_in_dim=768,\n            context_in_dim=4096,\n            hidden_size=3072,\n            mlp_ratio=4.0,\n            num_heads=24,\n            depth=19,\n            depth_single_blocks=38,\n            axes_dim=[16, 56, 56],\n            theta=10_000,\n            qkv_bias=True,\n            guidance_embed=True,\n        ),\n        ae_path=os.getenv(\"AE\"),\n        ae_params=AutoEncoderParams(\n            resolution=256,\n            in_channels=3,\n            ch=128,\n            out_ch=3,\n            ch_mult=[1, 2, 4, 4],\n            num_res_blocks=2,\n            z_channels=16,\n            scale_factor=0.3611,\n            shift_factor=0.1159,\n        ),\n    ),\n    \"flux-schnell\": ModelSpec(\n        repo_id=\"black-forest-labs/FLUX.1-schnell\",\n        repo_flow=\"flux1-schnell.safetensors\",\n        repo_ae=\"ae.safetensors\",\n        ckpt_path=os.getenv(\"FLUX_SCHNELL\"),\n        params=FluxParams(\n            in_channels=64,\n            vec_in_dim=768,\n            context_in_dim=4096,\n            hidden_size=3072,\n            mlp_ratio=4.0,\n            num_heads=24,\n            depth=19,\n            depth_single_blocks=38,\n            axes_dim=[16, 56, 56],\n            theta=10_000,\n            qkv_bias=True,\n            guidance_embed=False,\n        ),\n        ae_path=os.getenv(\"AE\"),\n        ae_params=AutoEncoderParams(\n            resolution=256,\n            in_channels=3,\n            ch=128,\n            out_ch=3,\n            ch_mult=[1, 2, 4, 4],\n            num_res_blocks=2,\n            z_channels=16,\n            scale_factor=0.3611,\n            shift_factor=0.1159,\n        ),\n    ),\n}\n\n\ndef load_flow_model(name: str, ckpt_path: str):\n    # Make the model\n    model = Flux(configs[name].params)\n\n    # Load the checkpoint if needed\n    if os.path.isdir(ckpt_path):\n        ckpt_path = os.path.join(ckpt_path, configs[name].repo_flow)\n    weights = mx.load(ckpt_path)\n    weights = model.sanitize(weights)\n    model.load_weights(list(weights.items()))\n\n    return model\n\n\ndef load_ae(name: str, ckpt_path: str):\n    # Make the autoencoder\n    ae = AutoEncoder(configs[name].ae_params)\n\n    # Load the checkpoint if needed\n    ckpt_path = os.path.join(ckpt_path, \"ae.safetensors\")\n    weights = mx.load(ckpt_path)\n    weights = ae.sanitize(weights)\n    ae.load_weights(list(weights.items()))\n\n    return ae\n\n\ndef load_clip(name: str, ckpt_path: str):\n    config_path = os.path.join(ckpt_path, \"text_encoder/config.json\")\n    with open(config_path) as f:\n        config = CLIPTextModelConfig.from_dict(json.load(f))\n\n    # Make the clip text encoder\n    clip = CLIPTextModel(config)\n\n    ckpt_path = os.path.join(ckpt_path, \"text_encoder/model.safetensors\")\n    weights = mx.load(ckpt_path)\n    weights = clip.sanitize(weights)\n    clip.load_weights(list(weights.items()))\n\n    return clip\n\n\ndef load_t5(name: str, ckpt_path: str):\n    config_path = os.path.join(ckpt_path, \"text_encoder_2/config.json\")\n    with open(config_path) as f:\n        config = T5Config.from_dict(json.load(f))\n\n    # Make the T5 model\n    t5 = T5Encoder(config)\n\n    model_index = os.path.join(ckpt_path, \"text_encoder_2/model.safetensors.index.json\")\n    weight_files = set()\n    with open(model_index) as f:\n        for _, w in json.load(f)[\"weight_map\"].items():\n            weight_files.add(w)\n    weights = {}\n    for w in weight_files:\n        w = f\"text_encoder_2/{w}\"\n        w = os.path.join(ckpt_path, w)\n        weights.update(mx.load(w))\n    weights = t5.sanitize(weights)\n    t5.load_weights(list(weights.items()))\n\n    return t5\n\n\ndef load_clip_tokenizer(name: str, ckpt_path: str):\n    vocab_file = os.path.join(ckpt_path, \"tokenizer/vocab.json\")\n    with open(vocab_file, encoding=\"utf-8\") as f:\n        vocab = json.load(f)\n\n    merges_file = os.path.join(ckpt_path, \"tokenizer/merges.txt\")\n    with open(merges_file, encoding=\"utf-8\") as f:\n        bpe_merges = f.read().strip().split(\"\\n\")[1 : 49152 - 256 - 2 + 1]\n    bpe_merges = [tuple(m.split()) for m in bpe_merges]\n    bpe_ranks = dict(map(reversed, enumerate(bpe_merges)))\n\n    return CLIPTokenizer(bpe_ranks, vocab, max_length=77)\n\n\ndef load_t5_tokenizer(name: str, ckpt_path: str, pad: bool = True):\n    model_file = os.path.join(ckpt_path, \"tokenizer_2/spiece.model\")\n    return T5Tokenizer(model_file, 256 if \"schnell\" in name else 512)\n"
  },
  {
    "path": "xinference/thirdparty/whisper/__init__.py",
    "content": "import hashlib\nimport io\nimport os\nimport urllib\nimport warnings\nfrom typing import List, Optional, Union\n\nimport torch\nfrom tqdm import tqdm\n\nfrom .audio import load_audio, log_mel_spectrogram, pad_or_trim\nfrom .decoding import DecodingOptions, DecodingResult, decode, detect_language\nfrom .model import ModelDimensions, Whisper\nfrom .transcribe import transcribe\nfrom .version import __version__\n\n_MODELS = {\n    \"tiny.en\": \"https://openaipublic.azureedge.net/main/whisper/models/d3dd57d32accea0b295c96e26691aa14d8822fac7d9d27d5dc00b4ca2826dd03/tiny.en.pt\",\n    \"tiny\": \"https://openaipublic.azureedge.net/main/whisper/models/65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9/tiny.pt\",\n    \"base.en\": \"https://openaipublic.azureedge.net/main/whisper/models/25a8566e1d0c1e2231d1c762132cd20e0f96a85d16145c3a00adf5d1ac670ead/base.en.pt\",\n    \"base\": \"https://openaipublic.azureedge.net/main/whisper/models/ed3a0b6b1c0edf879ad9b11b1af5a0e6ab5db9205f891f668f8b0e6c6326e34e/base.pt\",\n    \"small.en\": \"https://openaipublic.azureedge.net/main/whisper/models/f953ad0fd29cacd07d5a9eda5624af0f6bcf2258be67c92b79389873d91e0872/small.en.pt\",\n    \"small\": \"https://openaipublic.azureedge.net/main/whisper/models/9ecf779972d90ba49c06d968637d720dd632c55bbf19d441fb42bf17a411e794/small.pt\",\n    \"medium.en\": \"https://openaipublic.azureedge.net/main/whisper/models/d7440d1dc186f76616474e0ff0b3b6b879abc9d1a4926b7adfa41db2d497ab4f/medium.en.pt\",\n    \"medium\": \"https://openaipublic.azureedge.net/main/whisper/models/345ae4da62f9b3d59415adc60127b97c714f32e89e936602e85993674d08dcb1/medium.pt\",\n    \"large-v1\": \"https://openaipublic.azureedge.net/main/whisper/models/e4b87e7e0bf463eb8e6956e646f1e277e901512310def2c24bf0e11bd3c28e9a/large-v1.pt\",\n    \"large-v2\": \"https://openaipublic.azureedge.net/main/whisper/models/81f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524/large-v2.pt\",\n    \"large-v3\": \"https://openaipublic.azureedge.net/main/whisper/models/e5b1a55b89c1367dacf97e3e19bfd829a01529dbfdeefa8caeb59b3f1b81dadb/large-v3.pt\",\n    \"large\": \"https://openaipublic.azureedge.net/main/whisper/models/e5b1a55b89c1367dacf97e3e19bfd829a01529dbfdeefa8caeb59b3f1b81dadb/large-v3.pt\",\n}\n\n# base85-encoded (n_layers, n_heads) boolean arrays indicating the cross-attention heads that are\n# highly correlated to the word-level timing, i.e. the alignment between audio and text tokens.\n_ALIGNMENT_HEADS = {\n    \"tiny.en\": b\"ABzY8J1N>@0{>%R00Bk>$p{7v037`oCl~+#00\",\n    \"tiny\": b\"ABzY8bu8Lr0{>%RKn9Fp%m@SkK7Kt=7ytkO\",\n    \"base.en\": b\"ABzY8;40c<0{>%RzzG;p*o+Vo09|#PsxSZm00\",\n    \"base\": b\"ABzY8KQ!870{>%RzyTQH3`Q^yNP!>##QT-<FaQ7m\",\n    \"small.en\": b\"ABzY8>?_)10{>%RpeA61k&I|OI3I$65C{;;pbCHh0B{qLQ;+}v00\",\n    \"small\": b\"ABzY8DmU6=0{>%Rpa?J`kvJ6qF(V^F86#Xh7JUGMK}P<N0000\",\n    \"medium.en\": b\"ABzY8usPae0{>%R7<zz_OvQ{)4kMa0BMw6u5rT}kRKX;$NfYBv00*Hl@qhsU00\",\n    \"medium\": b\"ABzY8B0Jh+0{>%R7}kK1fFL7w6%<-Pf*t^=N)Qr&0RR9\",\n    \"large-v1\": b\"ABzY8r9j$a0{>%R7#4sLmoOs{s)o3~84-RPdcFk!JR<kSfC2yj\",\n    \"large-v2\": b\"ABzY8zd+h!0{>%R7=D0pU<_bnWW*tkYAhobTNnu$jnkEkXqp)j;w1Tzk)UH3X%SZd&fFZ2fC2yj\",\n    \"large-v3\": b\"ABzY8gWO1E0{>%R7(9S+Kn!D~%ngiGaR?*L!iJG9p-nab0JQ=-{D1-g00\",\n    \"large\": b\"ABzY8gWO1E0{>%R7(9S+Kn!D~%ngiGaR?*L!iJG9p-nab0JQ=-{D1-g00\",\n}\n\n\ndef _download(url: str, root: str, in_memory: bool) -> Union[bytes, str]:\n    os.makedirs(root, exist_ok=True)\n\n    expected_sha256 = url.split(\"/\")[-2]\n    download_target = os.path.join(root, os.path.basename(url))\n\n    if os.path.exists(download_target) and not os.path.isfile(download_target):\n        raise RuntimeError(f\"{download_target} exists and is not a regular file\")\n\n    if os.path.isfile(download_target):\n        with open(download_target, \"rb\") as f:\n            model_bytes = f.read()\n        if hashlib.sha256(model_bytes).hexdigest() == expected_sha256:\n            return model_bytes if in_memory else download_target\n        else:\n            warnings.warn(\n                f\"{download_target} exists, but the SHA256 checksum does not match; re-downloading the file\"\n            )\n\n    with urllib.request.urlopen(url) as source, open(download_target, \"wb\") as output:\n        with tqdm(\n            total=int(source.info().get(\"Content-Length\")),\n            ncols=80,\n            unit=\"iB\",\n            unit_scale=True,\n            unit_divisor=1024,\n        ) as loop:\n            while True:\n                buffer = source.read(8192)\n                if not buffer:\n                    break\n\n                output.write(buffer)\n                loop.update(len(buffer))\n\n    model_bytes = open(download_target, \"rb\").read()\n    if hashlib.sha256(model_bytes).hexdigest() != expected_sha256:\n        raise RuntimeError(\n            \"Model has been downloaded but the SHA256 checksum does not not match. Please retry loading the model.\"\n        )\n\n    return model_bytes if in_memory else download_target\n\n\ndef available_models() -> List[str]:\n    \"\"\"Returns the names of available models\"\"\"\n    return list(_MODELS.keys())\n\n\ndef load_model(\n    name: str,\n    device: Optional[Union[str, torch.device]] = None,\n    download_root: str = None,\n    in_memory: bool = False,\n) -> Whisper:\n    \"\"\"\n    Load a Whisper ASR model\n\n    Parameters\n    ----------\n    name : str\n        one of the official model names listed by `whisper.available_models()`, or\n        path to a model checkpoint containing the model dimensions and the model state_dict.\n    device : Union[str, torch.device]\n        the PyTorch device to put the model into\n    download_root: str\n        path to download the model files; by default, it uses \"~/.cache/whisper\"\n    in_memory: bool\n        whether to preload the model weights into host memory\n\n    Returns\n    -------\n    model : Whisper\n        The Whisper ASR model instance\n    \"\"\"\n\n    if device is None:\n        device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n    if download_root is None:\n        default = os.path.join(os.path.expanduser(\"~\"), \".cache\")\n        download_root = os.path.join(os.getenv(\"XDG_CACHE_HOME\", default), \"whisper\")\n\n    if name in _MODELS:\n        checkpoint_file = _download(_MODELS[name], download_root, in_memory)\n        alignment_heads = _ALIGNMENT_HEADS[name]\n    elif os.path.isfile(name):\n        checkpoint_file = open(name, \"rb\").read() if in_memory else name\n        alignment_heads = None\n    else:\n        raise RuntimeError(\n            f\"Model {name} not found; available models = {available_models()}\"\n        )\n\n    with (\n        io.BytesIO(checkpoint_file) if in_memory else open(checkpoint_file, \"rb\")\n    ) as fp:\n        checkpoint = torch.load(fp, map_location=device)\n    del checkpoint_file\n\n    dims = ModelDimensions(**checkpoint[\"dims\"])\n    model = Whisper(dims)\n    model.load_state_dict(checkpoint[\"model_state_dict\"])\n\n    if alignment_heads is not None:\n        model.set_alignment_heads(alignment_heads)\n\n    return model.to(device)\n"
  },
  {
    "path": "xinference/thirdparty/whisper/__main__.py",
    "content": "from .transcribe import cli\n\ncli()\n"
  },
  {
    "path": "xinference/thirdparty/whisper/assets/gpt2.tiktoken",
    "content": "IQ== 0\nIg== 1\nIw== 2\nJA== 3\nJQ== 4\nJg== 5\nJw== 6\nKA== 7\nKQ== 8\nKg== 9\nKw== 10\nLA== 11\nLQ== 12\nLg== 13\nLw== 14\nMA== 15\nMQ== 16\nMg== 17\nMw== 18\nNA== 19\nNQ== 20\nNg== 21\nNw== 22\nOA== 23\nOQ== 24\nOg== 25\nOw== 26\nPA== 27\nPQ== 28\nPg== 29\nPw== 30\nQA== 31\nQQ== 32\nQg== 33\nQw== 34\nRA== 35\nRQ== 36\nRg== 37\nRw== 38\nSA== 39\nSQ== 40\nSg== 41\nSw== 42\nTA== 43\nTQ== 44\nTg== 45\nTw== 46\nUA== 47\nUQ== 48\nUg== 49\nUw== 50\nVA== 51\nVQ== 52\nVg== 53\nVw== 54\nWA== 55\nWQ== 56\nWg== 57\nWw== 58\nXA== 59\nXQ== 60\nXg== 61\nXw== 62\nYA== 63\nYQ== 64\nYg== 65\nYw== 66\nZA== 67\nZQ== 68\nZg== 69\nZw== 70\naA== 71\naQ== 72\nag== 73\naw== 74\nbA== 75\nbQ== 76\nbg== 77\nbw== 78\ncA== 79\ncQ== 80\ncg== 81\ncw== 82\ndA== 83\ndQ== 84\ndg== 85\ndw== 86\neA== 87\neQ== 88\neg== 89\new== 90\nfA== 91\nfQ== 92\nfg== 93\noQ== 94\nog== 95\now== 96\npA== 97\npQ== 98\npg== 99\npw== 100\nqA== 101\nqQ== 102\nqg== 103\nqw== 104\nrA== 105\nrg== 106\nrw== 107\nsA== 108\nsQ== 109\nsg== 110\nsw== 111\ntA== 112\ntQ== 113\ntg== 114\ntw== 115\nuA== 116\nuQ== 117\nug== 118\nuw== 119\nvA== 120\nvQ== 121\nvg== 122\nvw== 123\nwA== 124\nwQ== 125\nwg== 126\nww== 127\nxA== 128\nxQ== 129\nxg== 130\nxw== 131\nyA== 132\nyQ== 133\nyg== 134\nyw== 135\nzA== 136\nzQ== 137\nzg== 138\nzw== 139\n0A== 140\n0Q== 141\n0g== 142\n0w== 143\n1A== 144\n1Q== 145\n1g== 146\n1w== 147\n2A== 148\n2Q== 149\n2g== 150\n2w== 151\n3A== 152\n3Q== 153\n3g== 154\n3w== 155\n4A== 156\n4Q== 157\n4g== 158\n4w== 159\n5A== 160\n5Q== 161\n5g== 162\n5w== 163\n6A== 164\n6Q== 165\n6g== 166\n6w== 167\n7A== 168\n7Q== 169\n7g== 170\n7w== 171\n8A== 172\n8Q== 173\n8g== 174\n8w== 175\n9A== 176\n9Q== 177\n9g== 178\n9w== 179\n+A== 180\n+Q== 181\n+g== 182\n+w== 183\n/A== 184\n/Q== 185\n/g== 186\n/w== 187\nAA== 188\nAQ== 189\nAg== 190\nAw== 191\nBA== 192\nBQ== 193\nBg== 194\nBw== 195\nCA== 196\nCQ== 197\nCg== 198\nCw== 199\nDA== 200\nDQ== 201\nDg== 202\nDw== 203\nEA== 204\nEQ== 205\nEg== 206\nEw== 207\nFA== 208\nFQ== 209\nFg== 210\nFw== 211\nGA== 212\nGQ== 213\nGg== 214\nGw== 215\nHA== 216\nHQ== 217\nHg== 218\nHw== 219\nIA== 220\nfw== 221\ngA== 222\ngQ== 223\ngg== 224\ngw== 225\nhA== 226\nhQ== 227\nhg== 228\nhw== 229\niA== 230\niQ== 231\nig== 232\niw== 233\njA== 234\njQ== 235\njg== 236\njw== 237\nkA== 238\nkQ== 239\nkg== 240\nkw== 241\nlA== 242\nlQ== 243\nlg== 244\nlw== 245\nmA== 246\nmQ== 247\nmg== 248\nmw== 249\nnA== 250\nnQ== 251\nng== 252\nnw== 253\noA== 254\nrQ== 255\nIHQ= 256\nIGE= 257\naGU= 258\naW4= 259\ncmU= 260\nb24= 261\nIHRoZQ== 262\nZXI= 263\nIHM= 264\nYXQ= 265\nIHc= 266\nIG8= 267\nZW4= 268\nIGM= 269\naXQ= 270\naXM= 271\nYW4= 272\nb3I= 273\nZXM= 274\nIGI= 275\nZWQ= 276\nIGY= 277\naW5n 278\nIHA= 279\nb3U= 280\nIGFu 281\nYWw= 282\nYXI= 283\nIHRv 284\nIG0= 285\nIG9m 286\nIGlu 287\nIGQ= 288\nIGg= 289\nIGFuZA== 290\naWM= 291\nYXM= 292\nbGU= 293\nIHRo 294\naW9u 295\nb20= 296\nbGw= 297\nZW50 298\nIG4= 299\nIGw= 300\nc3Q= 301\nIHJl 302\ndmU= 303\nIGU= 304\ncm8= 305\nbHk= 306\nIGJl 307\nIGc= 308\nIFQ= 309\nY3Q= 310\nIFM= 311\naWQ= 312\nb3Q= 313\nIEk= 314\ndXQ= 315\nZXQ= 316\nIEE= 317\nIGlz 318\nIG9u 319\naW0= 320\nYW0= 321\nb3c= 322\nYXk= 323\nYWQ= 324\nc2U= 325\nIHRoYXQ= 326\nIEM= 327\naWc= 328\nIGZvcg== 329\nYWM= 330\nIHk= 331\ndmVy 332\ndXI= 333\nIHU= 334\nbGQ= 335\nIHN0 336\nIE0= 337\nJ3M= 338\nIGhl 339\nIGl0 340\nYXRpb24= 341\naXRo 342\naXI= 343\nY2U= 344\nIHlvdQ== 345\naWw= 346\nIEI= 347\nIHdo 348\nb2w= 349\nIFA= 350\nIHdpdGg= 351\nIDE= 352\ndGVy 353\nY2g= 354\nIGFz 355\nIHdl 356\nICg= 357\nbmQ= 358\naWxs 359\nIEQ= 360\naWY= 361\nIDI= 362\nYWc= 363\nZXJz 364\na2U= 365\nICI= 366\nIEg= 367\nZW0= 368\nIGNvbg== 369\nIFc= 370\nIFI= 371\naGVy 372\nIHdhcw== 373\nIHI= 374\nb2Q= 375\nIEY= 376\ndWw= 377\nYXRl 378\nIGF0 379\ncmk= 380\ncHA= 381\nb3Jl 382\nIFRoZQ== 383\nIHNl 384\ndXM= 385\nIHBybw== 386\nIGhh 387\ndW0= 388\nIGFyZQ== 389\nIGRl 390\nYWlu 391\nYW5k 392\nIG9y 393\naWdo 394\nZXN0 395\naXN0 396\nYWI= 397\ncm9t 398\nIE4= 399\ndGg= 400\nIGNvbQ== 401\nIEc= 402\ndW4= 403\nb3A= 404\nMDA= 405\nIEw= 406\nIG5vdA== 407\nZXNz 408\nIGV4 409\nIHY= 410\ncmVz 411\nIEU= 412\nZXc= 413\naXR5 414\nYW50 415\nIGJ5 416\nZWw= 417\nb3M= 418\nb3J0 419\nb2M= 420\ncXU= 421\nIGZyb20= 422\nIGhhdmU= 423\nIHN1 424\naXZl 425\nb3VsZA== 426\nIHNo 427\nIHRoaXM= 428\nbnQ= 429\ncmE= 430\ncGU= 431\naWdodA== 432\nYXJ0 433\nbWVudA== 434\nIGFs 435\ndXN0 436\nZW5k 437\nLS0= 438\nYWxs 439\nIE8= 440\nYWNr 441\nIGNo 442\nIGxl 443\naWVz 444\ncmVk 445\nYXJk 446\n4oA= 447\nb3V0 448\nIEo= 449\nIGFi 450\nZWFy 451\naXY= 452\nYWxseQ== 453\nb3Vy 454\nb3N0 455\nZ2g= 456\ncHQ= 457\nIHBs 458\nYXN0 459\nIGNhbg== 460\nYWs= 461\nb21l 462\ndWQ= 463\nVGhl 464\nIGhpcw== 465\nIGRv 466\nIGdv 467\nIGhhcw== 468\nZ2U= 469\nJ3Q= 470\nIFU= 471\ncm91 472\nIHNh 473\nIGo= 474\nIGJ1dA== 475\nIHdvcg== 476\nIGFsbA== 477\nZWN0 478\nIGs= 479\nYW1l 480\nIHdpbGw= 481\nb2s= 482\nIHdoZQ== 483\nIHRoZXk= 484\naWRl 485\nMDE= 486\nZmY= 487\naWNo 488\ncGw= 489\ndGhlcg== 490\nIHRy 491\nLi4= 492\nIGludA== 493\naWU= 494\ndXJl 495\nYWdl 496\nIG5l 497\naWFs 498\nYXA= 499\naW5l 500\naWNl 501\nIG1l 502\nIG91dA== 503\nYW5z 504\nb25l 505\nb25n 506\naW9ucw== 507\nIHdobw== 508\nIEs= 509\nIHVw 510\nIHRoZWly 511\nIGFk 512\nIDM= 513\nIHVz 514\nYXRlZA== 515\nb3Vz 516\nIG1vcmU= 517\ndWU= 518\nb2c= 519\nIFN0 520\naW5k 521\naWtl 522\nIHNv 523\naW1l 524\ncGVy 525\nLiI= 526\nYmVy 527\naXo= 528\nYWN0 529\nIG9uZQ== 530\nIHNhaWQ= 531\nIC0= 532\nYXJl 533\nIHlvdXI= 534\nY2M= 535\nIFRo 536\nIGNs 537\nZXA= 538\nYWtl 539\nYWJsZQ== 540\naXA= 541\nIGNvbnQ= 542\nIHdoaWNo 543\naWE= 544\nIGlt 545\nIGFib3V0 546\nIHdlcmU= 547\ndmVyeQ== 548\ndWI= 549\nIGhhZA== 550\nIGVu 551\nIGNvbXA= 552\nLCI= 553\nIElu 554\nIHVu 555\nIGFn 556\naXJl 557\nYWNl 558\nYXU= 559\nYXJ5 560\nIHdvdWxk 561\nYXNz 562\ncnk= 563\nIOKA 564\nY2w= 565\nb29r 566\nZXJl 567\nc28= 568\nIFY= 569\naWdu 570\naWI= 571\nIG9mZg== 572\nIHRl 573\ndmVu 574\nIFk= 575\naWxl 576\nb3Nl 577\naXRl 578\nb3Jt 579\nIDIwMQ== 580\nIHJlcw== 581\nIG1hbg== 582\nIHBlcg== 583\nIG90aGVy 584\nb3Jk 585\ndWx0 586\nIGJlZW4= 587\nIGxpa2U= 588\nYXNl 589\nYW5jZQ== 590\na3M= 591\nYXlz 592\nb3du 593\nZW5jZQ== 594\nIGRpcw== 595\nY3Rpb24= 596\nIGFueQ== 597\nIGFwcA== 598\nIHNw 599\naW50 600\ncmVzcw== 601\nYXRpb25z 602\nYWls 603\nIDQ= 604\naWNhbA== 605\nIHRoZW0= 606\nIGhlcg== 607\nb3VudA== 608\nIENo 609\nIGFy 610\nIGlm 611\nIHRoZXJl 612\nIHBl 613\nIHllYXI= 614\nYXY= 615\nIG15 616\nIHNvbWU= 617\nIHdoZW4= 618\nb3VnaA== 619\nYWNo 620\nIHRoYW4= 621\ncnU= 622\nb25k 623\naWNr 624\nIG92ZXI= 625\ndmVs 626\nIHF1 627\nCgo= 628\nIHNj 629\ncmVhdA== 630\ncmVl 631\nIEl0 632\nb3VuZA== 633\ncG9ydA== 634\nIGFsc28= 635\nIHBhcnQ= 636\nZnRlcg== 637\nIGtu 638\nIGJlYw== 639\nIHRpbWU= 640\nZW5z 641\nIDU= 642\nb3BsZQ== 643\nIHdoYXQ= 644\nIG5v 645\nZHU= 646\nbWVy 647\nYW5n 648\nIG5ldw== 649\nLS0tLQ== 650\nIGdldA== 651\nb3J5 652\naXRpb24= 653\naW5ncw== 654\nIGp1c3Q= 655\nIGludG8= 656\nIDA= 657\nZW50cw== 658\nb3Zl 659\ndGU= 660\nIHBlb3BsZQ== 661\nIHByZQ== 662\nIGl0cw== 663\nIHJlYw== 664\nIHR3 665\naWFu 666\naXJzdA== 667\nYXJr 668\nb3Jz 669\nIHdvcms= 670\nYWRl 671\nb2I= 672\nIHNoZQ== 673\nIG91cg== 674\nd24= 675\naW5r 676\nbGlj 677\nIDE5 678\nIEhl 679\naXNo 680\nbmRlcg== 681\nYXVzZQ== 682\nIGhpbQ== 683\nb25z 684\nIFs= 685\nIHJv 686\nZm9ybQ== 687\naWxk 688\nYXRlcw== 689\ndmVycw== 690\nIG9ubHk= 691\nb2xs 692\nIHNwZQ== 693\nY2s= 694\nZWxs 695\nYW1w 696\nIGFjYw== 697\nIGJs 698\naW91cw== 699\ndXJu 700\nZnQ= 701\nb29k 702\nIGhvdw== 703\naGVk 704\nICc= 705\nIGFmdGVy 706\nYXc= 707\nIGF0dA== 708\nb3Y= 709\nbmU= 710\nIHBsYXk= 711\nZXJ2 712\naWN0 713\nIGNvdWxk 714\naXR0 715\nIGFt 716\nIGZpcnN0 717\nIDY= 718\nIGFjdA== 719\nICQ= 720\nZWM= 721\naGluZw== 722\ndWFs 723\ndWxs 724\nIGNvbW0= 725\nb3k= 726\nb2xk 727\nY2Vz 728\nYXRlcg== 729\nIGZl 730\nIGJldA== 731\nd2U= 732\naWZm 733\nIHR3bw== 734\nb2Nr 735\nIGJhY2s= 736\nKS4= 737\naWRlbnQ= 738\nIHVuZGVy 739\ncm91Z2g= 740\nc2Vs 741\neHQ= 742\nIG1heQ== 743\ncm91bmQ= 744\nIHBv 745\ncGg= 746\naXNz 747\nIGRlcw== 748\nIG1vc3Q= 749\nIGRpZA== 750\nIGFkZA== 751\namVjdA== 752\nIGluYw== 753\nZm9yZQ== 754\nIHBvbA== 755\nb250 756\nIGFnYWlu 757\nY2x1ZA== 758\ndGVybg== 759\nIGtub3c= 760\nIG5lZWQ= 761\nIGNvbnM= 762\nIGNv 763\nIC4= 764\nIHdhbnQ= 765\nIHNlZQ== 766\nIDc= 767\nbmluZw== 768\naWV3 769\nIFRoaXM= 770\nY2Vk 771\nIGV2ZW4= 772\nIGluZA== 773\ndHk= 774\nIFdl 775\nYXRo 776\nIHRoZXNl 777\nIHBy 778\nIHVzZQ== 779\nIGJlY2F1c2U= 780\nIGZs 781\nbmc= 782\nIG5vdw== 783\nIOKAkw== 784\nY29t 785\naXNl 786\nIG1ha2U= 787\nIHRoZW4= 788\nb3dlcg== 789\nIGV2ZXJ5 790\nIFVu 791\nIHNlYw== 792\nb3Nz 793\ndWNo 794\nIGVt 795\nID0= 796\nIFJl 797\naWVk 798\ncml0 799\nIGludg== 800\nbGVjdA== 801\nIHN1cHA= 802\nYXRpbmc= 803\nIGxvb2s= 804\nbWFu 805\ncGVjdA== 806\nIDg= 807\ncm93 808\nIGJ1 809\nIHdoZXJl 810\naWZpYw== 811\nIHllYXJz 812\naWx5 813\nIGRpZmY= 814\nIHNob3VsZA== 815\nIHJlbQ== 816\nVGg= 817\nSW4= 818\nIGV2 819\nZGF5 820\nJ3Jl 821\ncmli 822\nIHJlbA== 823\nc3M= 824\nIGRlZg== 825\nIHJpZ2h0 826\nIHN5 827\nKSw= 828\nbGVz 829\nMDAw 830\naGVu 831\nIHRocm91Z2g= 832\nIFRy 833\nX18= 834\nIHdheQ== 835\nIGRvbg== 836\nICw= 837\nIDEw 838\nYXNlZA== 839\nIGFzcw== 840\ndWJsaWM= 841\nIHJlZw== 842\nIEFuZA== 843\naXg= 844\nIHZlcnk= 845\nIGluY2x1ZA== 846\nb3RoZXI= 847\nIGltcA== 848\nb3Ro 849\nIHN1Yg== 850\nIOKAlA== 851\nIGJlaW5n 852\nYXJn 853\nIFdo 854\nPT0= 855\naWJsZQ== 856\nIGRvZXM= 857\nYW5nZQ== 858\ncmFt 859\nIDk= 860\nZXJ0 861\ncHM= 862\naXRlZA== 863\nYXRpb25hbA== 864\nIGJy 865\nIGRvd24= 866\nIG1hbnk= 867\nYWtpbmc= 868\nIGNhbGw= 869\ndXJpbmc= 870\naXRpZXM= 871\nIHBo 872\naWNz 873\nYWxz 874\nIGRlYw== 875\nYXRpdmU= 876\nZW5lcg== 877\nIGJlZm9yZQ== 878\naWxpdHk= 879\nIHdlbGw= 880\nIG11Y2g= 881\nZXJzb24= 882\nIHRob3Nl 883\nIHN1Y2g= 884\nIGtl 885\nIGVuZA== 886\nIEJ1dA== 887\nYXNvbg== 888\ndGluZw== 889\nIGxvbmc= 890\nZWY= 891\nIHRoaW5r 892\neXM= 893\nIGJlbA== 894\nIHNt 895\naXRz 896\nYXg= 897\nIG93bg== 898\nIHByb3Y= 899\nIHNldA== 900\naWZl 901\nbWVudHM= 902\nYmxl 903\nd2FyZA== 904\nIHNob3c= 905\nIHByZXM= 906\nbXM= 907\nb21ldA== 908\nIG9i 909\nIHNheQ== 910\nIFNo 911\ndHM= 912\nZnVs 913\nIGVmZg== 914\nIGd1 915\nIGluc3Q= 916\ndW5k 917\ncmVu 918\nY2Vzcw== 919\nIGVudA== 920\nIFlvdQ== 921\nIGdvb2Q= 922\nIHN0YXJ0 923\naW5jZQ== 924\nIG1hZGU= 925\ndHQ= 926\nc3RlbQ== 927\nb2xvZw== 928\ndXA= 929\nIHw= 930\ndW1w 931\nIGhlbA== 932\ndmVybg== 933\ndWxhcg== 934\ndWFsbHk= 935\nIGFj 936\nIG1vbg== 937\nIGxhc3Q= 938\nIDIwMA== 939\nMTA= 940\nIHN0dWQ= 941\ndXJlcw== 942\nIEFy 943\nc2VsZg== 944\nYXJz 945\nbWVyaWM= 946\ndWVz 947\nY3k= 948\nIG1pbg== 949\nb2xsb3c= 950\nIGNvbA== 951\naW8= 952\nIG1vZA== 953\nIGNvdW50 954\nIENvbQ== 955\naGVz 956\nIGZpbg== 957\nYWly 958\naWVy 959\n4oCU 960\ncmVhZA== 961\nYW5r 962\nYXRjaA== 963\nZXZlcg== 964\nIHN0cg== 965\nIHBvaW50 966\nb3Jr 967\nIE5ldw== 968\nIHN1cg== 969\nb29s 970\nYWxr 971\nZW1lbnQ= 972\nIHVzZWQ= 973\ncmFjdA== 974\nd2Vlbg== 975\nIHNhbWU= 976\nb3Vu 977\nIEFs 978\nY2k= 979\nIGRpZmZlcmU= 980\nIHdoaWxl 981\nLS0tLS0tLS0= 982\nIGdhbWU= 983\nY2VwdA== 984\nIHNpbQ== 985\nLi4u 986\nIGludGVy 987\nZWs= 988\nIHJlcG9ydA== 989\nIHByb2R1 990\nIHN0aWxs 991\nbGVk 992\nYWg= 993\nIGhlcmU= 994\nIHdvcmxk 995\nIHRob3VnaA== 996\nIG51bQ== 997\nYXJjaA== 998\naW1lcw== 999\nYWxl 1000\nIFNl 1001\nIElm 1002\nLy8= 1003\nIExl 1004\nIHJldA== 1005\nIHJlZg== 1006\nIHRyYW5z 1007\nbmVy 1008\ndXRpb24= 1009\ndGVycw== 1010\nIHRha2U= 1011\nIENs 1012\nIGNvbmY= 1013\nd2F5 1014\nYXZl 1015\nIGdvaW5n 1016\nIHNs 1017\ndWc= 1018\nIEFtZXJpYw== 1019\nIHNwZWM= 1020\nIGhhbmQ= 1021\nIGJldHdlZW4= 1022\naXN0cw== 1023\nIERl 1024\nb290 1025\nSXQ= 1026\nIGVhcg== 1027\nIGFnYWluc3Q= 1028\nIGhpZ2g= 1029\nZ2Fu 1030\nYXo= 1031\nYXRoZXI= 1032\nIGV4cA== 1033\nIG9w 1034\nIGlucw== 1035\nIGdy 1036\nIGhlbHA= 1037\nIHJlcXU= 1038\nZXRz 1039\naW5z 1040\nIFBybw== 1041\naXNt 1042\nIGZvdW5k 1043\nbGFuZA== 1044\nYXRh 1045\ndXNz 1046\nYW1lcw== 1047\nIHBlcnNvbg== 1048\nIGdyZWF0 1049\ncHI= 1050\nIHNpZ24= 1051\nIEFu 1052\nJ3Zl 1053\nIHNvbWV0 1054\nIHNlcg== 1055\naGlw 1056\nIHJ1bg== 1057\nIDo= 1058\nIHRlcg== 1059\naXJlY3Q= 1060\nIGZvbGxvdw== 1061\nIGRldA== 1062\naWNlcw== 1063\nIGZpbmQ= 1064\nMTI= 1065\nIG1lbQ== 1066\nIGNy 1067\nZXJlZA== 1068\nZXg= 1069\nIGV4dA== 1070\ndXRo 1071\nZW5zZQ== 1072\nY28= 1073\nIHRlYW0= 1074\ndmluZw== 1075\nb3VzZQ== 1076\nYXNo 1077\nYXR0 1078\ndmVk 1079\nIHN5c3RlbQ== 1080\nIEFz 1081\nZGVy 1082\naXZlcw== 1083\nbWlu 1084\nIGxlYWQ= 1085\nIEJs 1086\nY2VudA== 1087\nIGFyb3VuZA== 1088\nIGdvdmVybg== 1089\nIGN1cg== 1090\ndmVsb3A= 1091\nYW55 1092\nIGNvdXI= 1093\nYWx0aA== 1094\nYWdlcw== 1095\naXpl 1096\nIGNhcg== 1097\nb2Rl 1098\nIGxhdw== 1099\nIHJlYWQ= 1100\nJ20= 1101\nY29u 1102\nIHJlYWw= 1103\nIHN1cHBvcnQ= 1104\nIDEy 1105\nLi4uLg== 1106\nIHJlYWxseQ== 1107\nbmVzcw== 1108\nIGZhY3Q= 1109\nIGRheQ== 1110\nIGJvdGg= 1111\neWluZw== 1112\nIHNlcnY= 1113\nIEZvcg== 1114\nIHRocmVl 1115\nIHdvbQ== 1116\nIG1lZA== 1117\nb2R5 1118\nIFRoZXk= 1119\nNTA= 1120\nIGV4cGVy 1121\ndG9u 1122\nIGVhY2g= 1123\nYWtlcw== 1124\nIGNoZQ== 1125\nIGNyZQ== 1126\naW5lcw== 1127\nIHJlcA== 1128\nMTk= 1129\nZ2c= 1130\naWxsaW9u 1131\nIGdyb3U= 1132\ndXRl 1133\naWs= 1134\nV2U= 1135\nZ2V0 1136\nRVI= 1137\nIG1ldA== 1138\nIHNheXM= 1139\nb3g= 1140\nIGR1cmluZw== 1141\nZXJu 1142\naXplZA== 1143\nYXJlZA== 1144\nIGZhbQ== 1145\naWNhbGx5 1146\nIGhhcHA= 1147\nIElz 1148\nIGNoYXI= 1149\nbWVk 1150\ndmVudA== 1151\nIGdlbmVy 1152\naWVudA== 1153\ncGxl 1154\naWV0 1155\ncmVudA== 1156\nMTE= 1157\ndmVz 1158\ncHRpb24= 1159\nIDIw 1160\nZm9ybWF0aW9u 1161\nIGNvcg== 1162\nIG9mZmlj 1163\naWVsZA== 1164\nIHRvbw== 1165\naXNpb24= 1166\nIGluZg== 1167\nIFo= 1168\ndGhl 1169\nb2Fk 1170\nIHB1YmxpYw== 1171\nIHByb2c= 1172\ncmlj 1173\nKio= 1174\nIHdhcg== 1175\nIHBvd2Vy 1176\ndmlldw== 1177\nIGZldw== 1178\nIGxvYw== 1179\nIGRpZmZlcmVudA== 1180\nIHN0YXRl 1181\nIGhlYWQ= 1182\nJ2xs 1183\nIHBvc3M= 1184\nIHN0YXQ= 1185\ncmV0 1186\nYW50cw== 1187\nIHZhbA== 1188\nIGlzcw== 1189\nIGNsZQ== 1190\naXZlcnM= 1191\nYW5j 1192\nIGV4cGw= 1193\nIGFub3RoZXI= 1194\nIFE= 1195\nIGF2 1196\ndGhpbmc= 1197\nbmNl 1198\nV2g= 1199\nIGNoaWxk 1200\nIHNpbmNl 1201\naXJlZA== 1202\nbGVzcw== 1203\nIGxpZmU= 1204\nIGRldmVsb3A= 1205\naXR0bGU= 1206\nIGRlcA== 1207\nIHBhc3M= 1208\n44M= 1209\nIHR1cm4= 1210\nb3Ju 1211\nVGhpcw== 1212\nYmVycw== 1213\ncm9zcw== 1214\nIEFk 1215\nIGZy 1216\nIHJlc3A= 1217\nIHNlY29uZA== 1218\nb2g= 1219\nIC8= 1220\nIGRpc2M= 1221\nICY= 1222\nIHNvbWV0aGluZw== 1223\nIGNvbXBsZQ== 1224\nIGVk 1225\nIGZpbA== 1226\nIG1vbnRo 1227\nYWo= 1228\ndWM= 1229\nIGdvdmVybm1lbnQ= 1230\nIHdpdGhvdXQ= 1231\nIGxlZw== 1232\nIGRpc3Q= 1233\nIHB1dA== 1234\nIHF1ZXN0 1235\nYW5u 1236\nIHByb3Q= 1237\nMjA= 1238\nIG5ldmVy 1239\naWVuY2U= 1240\nIGxldmVs 1241\nIGFydA== 1242\nIHRoaW5ncw== 1243\nIG1pZ2h0 1244\nIGVmZmVjdA== 1245\nIGNvbnRybw== 1246\nIGNlbnQ= 1247\nIDE4 1248\nIGFsbG93 1249\nIGJlbGll 1250\nY2hvb2w= 1251\nb3R0 1252\nIGluY3Jl 1253\nIGZlZWw= 1254\nIHJlc3VsdA== 1255\nIGxvdA== 1256\nIGZ1bg== 1257\nb3Rl 1258\nIHR5 1259\nZXJlc3Q= 1260\nIGNvbnRpbg== 1261\nIHVzaW5n 1262\nIGJpZw== 1263\nMjAx 1264\nIGFzaw== 1265\nIGJlc3Q= 1266\nICk= 1267\nSU4= 1268\nIG9wcA== 1269\nMzA= 1270\nIG51bWJlcg== 1271\naW5lc3M= 1272\nU3Q= 1273\nbGVhc2U= 1274\nIGNh 1275\nIG11c3Q= 1276\nIGRpcmVjdA== 1277\nIGds 1278\nIDw= 1279\nIG9wZW4= 1280\nIHBvc3Q= 1281\nIGNvbWU= 1282\nIHNlZW0= 1283\nb3JkaW5n 1284\nIHdlZWs= 1285\nYXRlbHk= 1286\naXRhbA== 1287\nIGVs 1288\ncmllbmQ= 1289\nIGZhcg== 1290\nIHRyYQ== 1291\naW5hbA== 1292\nIHByaQ== 1293\nIFVT 1294\nIHBsYWNl 1295\nIGZvcm0= 1296\nIHRvbGQ= 1297\nIjo= 1298\nYWlucw== 1299\nYXR1cmU= 1300\nIFRydW1w 1301\nIHN0YW5k 1302\nICM= 1303\naWRlcg== 1304\nIEZy 1305\nIG5leHQ= 1306\nIHNvYw== 1307\nIHB1cg== 1308\nIGxldA== 1309\nIGxpdHRsZQ== 1310\nIGh1bQ== 1311\nIGk= 1312\ncm9u 1313\nMTU= 1314\nIDE1 1315\nIGNvbW11bg== 1316\nIG1hcms= 1317\nIFRoZXJl 1318\nIHdy 1319\nIFRoYXQ= 1320\nIGluZm9ybWF0aW9u 1321\nd2F5cw== 1322\nIGJ1cw== 1323\nYXBw 1324\nIGludmVzdA== 1325\nbWU= 1326\nIGhhcmQ= 1327\nYWluZWQ= 1328\nZWFk 1329\nIGltcG9ydA== 1330\nIGFwcHJv 1331\nIHRlc3Q= 1332\nIHRyaQ== 1333\nIHJlc3Q= 1334\nb3NlZA== 1335\nIGZ1bGw= 1336\nIGNhcmU= 1337\nIFNw 1338\nIGNhc2U= 1339\nT04= 1340\nIHNr 1341\nIGxlc3M= 1342\nICs= 1343\nIHBhcnRpYw== 1344\nIFBs 1345\nYWJseQ== 1346\ndWNr 1347\naXNoZWQ= 1348\nY2hu 1349\nYmU= 1350\nIGxpc3Q= 1351\nYXRvcg== 1352\nIHRvcA== 1353\nIGFkdg== 1354\nIEJl 1355\ncnVjdA== 1356\nIGRlbQ== 1357\ncmF0aW9u 1358\nbGluZw== 1359\nZ3k= 1360\ncmVlbg== 1361\nZ2Vy 1362\nIGhvbWU= 1363\nIGxlZnQ= 1364\nIGJldHRlcg== 1365\nIGRhdGE= 1366\nIDEx 1367\nIGF0dGFjaw== 1368\nIHByb2JsZQ== 1369\nbGluZQ== 1370\nYXJkcw== 1371\nIGJlaA== 1372\ncmFs 1373\nIEhvdw== 1374\nIFNoZQ== 1375\nYXJnZQ== 1376\nIC0t 1377\nOi8v 1378\nIGJybw== 1379\nIFBo 1380\nYXRz 1381\nIGJ1aWxk 1382\nd3c= 1383\naWRlZA== 1384\nYWlt 1385\nYXNlcw== 1386\nZW5jeQ== 1387\nIG1haW4= 1388\naW5lZA== 1389\nIGluY2x1ZGluZw== 1390\nIHs= 1391\nIGdvdA== 1392\nIGludGVyZXN0 1393\nIGtlZXA= 1394\nIFg= 1395\nIGVhcw== 1396\nYWluaW5n 1397\nIGNsYXNz 1398\n4oCm 1399\nIE5v 1400\nIHZhcg== 1401\nIHNtYWxs 1402\nYW1wbGU= 1403\nQVQ= 1404\nIGlkZQ== 1405\nIFNv 1406\nIHJlY2U= 1407\nIHBvbGl0 1408\nIG1vdg== 1409\nIHBsYW4= 1410\nIHBlcmNlbnQ= 1411\naXZpbmc= 1412\nIGNhbXA= 1413\nIHBheQ== 1414\nMTQ= 1415\nc2M= 1416\naXNlZA== 1417\nIHVudA== 1418\nb25leQ== 1419\ncGxveQ== 1420\nPT09PQ== 1421\nIGRpZG4= 1422\nIEluZA== 1423\nZWxz 1424\nZXJ0YWlu 1425\nIHBvcw== 1426\nX19fXw== 1427\naXZlcg== 1428\nIHByb2Nlc3M= 1429\nIHByb2dyYW0= 1430\naWZpZWQ= 1431\nIFJlcA== 1432\nMTY= 1433\ndXJv 1434\nb2xvZ3k= 1435\nYXR0ZXI= 1436\naW5h 1437\nIG5hbWU= 1438\nIEFsbA== 1439\nIGZvdXI= 1440\nIHJldHVybg== 1441\ndmlvdXM= 1442\nYnM= 1443\nIGNhbGxlZA== 1444\nIG1vdmU= 1445\nIFNj 1446\naXJk 1447\nIGdyb3Vw 1448\nIGJyZQ== 1449\nIG1lbg== 1450\nIGNhcA== 1451\ndGVu 1452\nZWU= 1453\nIGRyaQ== 1454\nbGVn 1455\naGVyZQ== 1456\ndXRob3I= 1457\nIHBhdA== 1458\nIGN1cnJlbnQ= 1459\naWRlcw== 1460\nIHBvcA== 1461\ndG8= 1462\nZW50aW9u 1463\nIGFsd2F5cw== 1464\nIG1pbA== 1465\nIHdvbWVu 1466\nIDE2 1467\nIG9sZA== 1468\naXZlbg== 1469\ncmFwaA== 1470\nIE9y 1471\ncm9y 1472\nZW50bHk= 1473\nIG5lYXI= 1474\nIEV4 1475\ncmVhbQ== 1476\nc2g= 1477\nIDE0 1478\nIGZyZWU= 1479\naXNzaW9u 1480\nc3RhbmQ= 1481\nIENvbg== 1482\nYWxpdHk= 1483\ndXNlZA== 1484\nMTM= 1485\nIGRlc2lnbg== 1486\nIGNoYW5nZQ== 1487\nIGNoYW5n 1488\nIGJv 1489\nIHZpcw== 1490\nZW1iZXI= 1491\nIGJvb2s= 1492\ncmVhZHk= 1493\nIGtpbGw= 1494\nMjU= 1495\ncHBlZA== 1496\nIGF3YXk= 1497\nIGFibGU= 1498\nIGNvdW50cnk= 1499\nIGNvbnN0 1500\nYXJu 1501\nIG9yZGVy 1502\nQVI= 1503\naW9y 1504\naXVt 1505\nb3J0aA== 1506\nMTg= 1507\nYWlsYWJsZQ== 1508\nIHN3 1509\nIG1pbGxpb24= 1510\nIDEz 1511\nYXRpYw== 1512\ndGVk 1513\nIEdv 1514\nIG9wZXI= 1515\nZW5n 1516\nIHRoaW5n 1517\nYWpvcg== 1518\nY29ub20= 1519\nIENvbW0= 1520\nIHdoeQ== 1521\ndXJlZA== 1522\ndXJhbA== 1523\nIHNjaG9vbA== 1524\nYnk= 1525\nIE1hcg== 1526\nIGFmZg== 1527\nIGRheXM= 1528\nIGFubg== 1529\ndXNo 1530\nYW5l 1531\nSWY= 1532\nZWc= 1533\nIHByb2Y= 1534\nIGhlYWx0aA== 1535\nb3V0aA== 1536\nQnV0 1537\naW9uYWw= 1538\nLiw= 1539\nIHNvbA== 1540\nIGFscmVhZHk= 1541\nIDMw 1542\nIGNoYXJhY3Q= 1543\nSGU= 1544\nIGZyaWVuZA== 1545\nRVM= 1546\naWFucw== 1547\naWNsZQ== 1548\nJ2Q= 1549\nIE9u 1550\nIGxlYXN0 1551\nIHByb20= 1552\nIGRy 1553\nIGhpc3Q= 1554\naXRoZXI= 1555\nIGVzdA== 1556\naXF1 1557\nMTc= 1558\nc29u 1559\nIHRlbGw= 1560\nIHRhbGs= 1561\nb2hu 1562\nb2ludA== 1563\nbGVjdGlvbg== 1564\nQU4= 1565\nIHVudGls 1566\nYXVnaA== 1567\nIGxhdGVy 1568\nIHZl 1569\nIHZpZXc= 1570\nZW5kaW5n 1571\naXZlZA== 1572\nIHdvcmQ= 1573\nd2FyZQ== 1574\nIGNvc3Q= 1575\nIGVub3VnaA== 1576\nIGdpdmU= 1577\nIFVuaXRlZA== 1578\nIHRlY2hu 1579\nYXJlbnQ= 1580\nT1I= 1581\nIHBhcg== 1582\nIERy 1583\nIDIwMTY= 1584\ncmlzdA== 1585\nZXJpbmc= 1586\nIMI= 1587\nIGxhcmdl 1588\nc2lkZQ== 1589\nYWN5 1590\nY2Nlc3M= 1591\nIHdpbg== 1592\nIGltcG9ydGFudA== 1593\nIDE5OQ== 1594\nIGRvZXNu 1595\nIDE3 1596\nIGJ1c2luZXNz 1597\nIGNsZWFy 1598\nIHJlc2U= 1599\nIiw= 1600\ndXJ5 1601\nIGVxdQ== 1602\nYXN0ZXI= 1603\nYWxm 1604\nIEFtZXJpY2Fu 1605\nbmVjdA== 1606\nIGV4cGVjdA== 1607\naXZlcnNpdHk= 1608\nIG9jYw== 1609\nIEZs 1610\nIGtpbmQ= 1611\nIG1lYW4= 1612\nIHBhc3Q= 1613\nIGRldg== 1614\nIGJhcw== 1615\nbGV0 1616\ncmFmdA== 1617\nIG9yZ2Fu 1618\nIGRlbA== 1619\nIHBlcmZvcm0= 1620\nIHN0b3J5 1621\nIHNlYXNvbg== 1622\nIENvbA== 1623\nIGNsYWlt 1624\nIGNhbWU= 1625\nIHdpdGhpbg== 1626\nIGxpbmU= 1627\nIHByb2plY3Q= 1628\nIEF0 1629\nIGNvbnRyb2w= 1630\nZW5kZWQ= 1631\nIFN5 1632\nIGFpcg== 1633\naXphdGlvbg== 1634\nICo= 1635\nbGV5 1636\nIG1vbmV5 1637\naWRk 1638\nWW91 1639\nZm9y 1640\nIGZhbWlseQ== 1641\nIG1ha2luZw== 1642\nIGJpdA== 1643\nIHBvbGljZQ== 1644\nIGhhcHBlbg== 1645\nIHZlcnM= 1646\nb255 1647\ndWZm 1648\nIFdoZW4= 1649\nIHNpdA== 1650\naWRlbw== 1651\nbGY= 1652\naXNvbg== 1653\nIHN1cmU= 1654\nZ2lu 1655\nIGFwcGVhcg== 1656\nIGxpZ2h0 1657\nIGVz 1658\nb2Y= 1659\nIHdhdGVy 1660\nIHRpbWVz 1661\nbm90 1662\nIGdyb3c= 1663\nIGNvbXBhbnk= 1664\nIFRl 1665\nb3dz 1666\nIG1hcg== 1667\nb3VyY2U= 1668\naW9s 1669\nYXJt 1670\nYnI= 1671\nIGV4YW1wbGU= 1672\nIGNvbmM= 1673\nIGZvcmU= 1674\nIFRv 1675\ncHJv 1676\nRU4= 1677\ncmllcw== 1678\nIDI1 1679\nIENhbg== 1680\nbmV5 1681\nIGFjdHVhbGx5 1682\nIGV2ZXI= 1683\ndXJpdHk= 1684\nYWtlbg== 1685\nYXBz 1686\nIHRheA== 1687\nIG1ham9y 1688\nYW1h 1689\nIG9mdGVu 1690\nZXJhbA== 1691\nIGh1bWFu 1692\nIGpvYg== 1693\naXN0ZXI= 1694\nIGF2YWlsYWJsZQ== 1695\nb2Ny 1696\nZW5u 1697\nYWlk 1698\naXZpZA== 1699\nIHJlY29yZA== 1700\nPyI= 1701\nIHNpbmc= 1702\nIEFt 1703\naWRlbmNl 1704\nIG5ld3M= 1705\nc3Rlcg== 1706\nIGVjb25vbQ== 1707\nIGZvbGxvd2luZw== 1708\nIEJy 1709\naXNpbmc= 1710\nIGhvdXI= 1711\nbW9zdA== 1712\ndW1lbnQ= 1713\nIHNleA== 1714\nIGRlc2M= 1715\nIGJlY29tZQ== 1716\nIEVk 1717\nIHRvb2s= 1718\nIGhhdmluZw== 1719\nIHByb2R1Y3Q= 1720\nYXVsdA== 1721\nQXM= 1722\nYXJpbmc= 1723\nIG1lYW5z 1724\nIGhvcA== 1725\ndW5l 1726\nIGNobw== 1727\nIGNlcnRhaW4= 1728\nIG5vbg== 1729\nIGRlYWw= 1730\nMjQ= 1731\nbGVtZW50 1732\nb2Np 1733\nZW5l 1734\nIHNpZGU= 1735\nIFBy 1736\nIE1heQ== 1737\nIHJlYXNvbg== 1738\ndWVk 1739\nY2hlZA== 1740\ndWxhdGlvbg== 1741\nIGVsZWN0 1742\nIG9mZmljaWFs 1743\nIHBvc3NpYmxl 1744\nIGhvbGQ= 1745\nYW5kcw== 1746\nb3Rz 1747\nIGNpdHk= 1748\nb3JpZXM= 1749\nIHNldmVy 1750\nIGNoaWxkcmVu 1751\nIG9uY2U= 1752\nIGFjdGl2 1753\nbGVy 1754\nIG5pZ2h0 1755\naXRpb25z 1756\nIEpvaG4= 1757\nYXBl 1758\ncGxheQ== 1759\nIGRvbmU= 1760\nIGxpbQ== 1761\nIHdvcmtpbmc= 1762\nIFByZXM= 1763\nb3JsZA== 1764\nZWI= 1765\nIENv 1766\nIGJvZHk= 1767\nYWlscw== 1768\ndXRlcw== 1769\nIE1y 1770\nIHdoZXRoZXI= 1771\nIGF1dGhvcg== 1772\ncm9w 1773\nIHByb3Blcg== 1774\nIHNlZW4= 1775\nKTs= 1776\nIGZhYw== 1777\nIFN1 1778\nIGNvbmQ= 1779\naXRpbmc= 1780\nIGNvdXJzZQ== 1781\nIH0= 1782\nLS0tLS0tLS0tLS0tLS0tLQ== 1783\nYWlnbg== 1784\nIGV2ZW50 1785\nIGVuZw== 1786\nIHBvdA== 1787\nIGludGVybg== 1788\naWFt 1789\nIHNob3J0 1790\nZW1wdA== 1791\n44I= 1792\nIEdvZA== 1793\naWxhcg== 1794\nODA= 1795\nIG9yaWc= 1796\nSVM= 1797\nb3Vybg== 1798\nYWJpbGl0eQ== 1799\naXRpdmU= 1800\nIGRhbQ== 1801\nIDEwMA== 1802\nIHByZXNz 1803\nIGRvaW5n 1804\nIHByb3RlY3Q= 1805\ncmluZw== 1806\nIHRob3VnaHQ= 1807\nIHF1ZXN0aW9u 1808\ncmV3 1809\nIFdhcg== 1810\nIHNldmVyYWw= 1811\nIFN0YXRl 1812\nIGdpdmVu 1813\nIGZ1bmQ= 1814\nIFR3 1815\nIHdlbnQ= 1816\nYW5jZXM= 1817\nd29yaw== 1818\ncG9y 1819\nbXk= 1820\nNDA= 1821\nIGFyZw== 1822\nYXJ0bWVudA== 1823\ndXN0b20= 1824\nIHBvbGlj 1825\nIG1lZXQ= 1826\nIGNyZWF0 1827\nMjI= 1828\nIFN0YXRlcw== 1829\nIGdhbWVz 1830\ncmF3 1831\ndXR1cmU= 1832\nIHVuZGVyc3RhbmQ= 1833\ndXJz 1834\nIE9i 1835\nbGlzaA== 1836\nc3k= 1837\nIG1ha2Vz 1838\nIHdvbg== 1839\nYWdvbg== 1840\nIGh0dA== 1841\nIGxvdmU= 1842\nZW50aWFs 1843\nIGNvbXBsZXRl 1844\ncGFy 1845\nIElt 1846\nQUw= 1847\nIGFjY291bnQ= 1848\nwqA= 1849\nb3JlZA== 1850\ndmVydA== 1851\nIGlkZW50 1852\nIDIwMTU= 1853\nIG90aGVycw== 1854\nIE1pbg== 1855\naWJlcg== 1856\ndmVyYWdl 1857\nVGhlcmU= 1858\naXRpb25hbA== 1859\nZGQ= 1860\nIHByb2I= 1861\nIHlvdW5n 1862\nIGFsb25n 1863\nIGFjY29yZGluZw== 1864\nIHlldA== 1865\nIG1lbWJlcnM= 1866\nIFdoYXQ= 1867\nb2lk 1868\nIE1hbg== 1869\nQW5k 1870\nIGFtb25n 1871\nYWk= 1872\nIGVtcGxveQ== 1873\nIFJlcw== 1874\nID4= 1875\nIGludm9s 1876\nIGxvdw== 1877\nYWY= 1878\nIENhcg== 1879\nIGhpZw== 1880\nIE9uZQ== 1881\nIFNlYw== 1882\naW5hdGlvbg== 1883\nIGxpa2VseQ== 1884\nIGFudA== 1885\nYWdlZA== 1886\nIFJ1c3M= 1887\nIGJlbg== 1888\nIHJlbGU= 1889\nRm9y 1890\nYmFjaw== 1891\nIE5vdA== 1892\nIHByZXNpZGVudA== 1893\nYmFsbA== 1894\nIGFjY2Vzcw== 1895\naXZpZHVhbA== 1896\nIERlbQ== 1897\nIEV1cm8= 1898\nNjA= 1899\nIGtub3du 1900\naXJs 1901\nIEdy 1902\nIGVhcmx5 1903\ndXNl 1904\naWV0eQ== 1905\n4oCT 1906\nIGZpZ2h0 1907\nIHNlbnQ= 1908\nIHRvZGF5 1909\nIG1hcmtldA== 1910\nIi4= 1911\nIGJhc2Vk 1912\nIHN0cm9uZw== 1913\ndXJ0aGVy 1914\nIGRlYg== 1915\nbWJlcg== 1916\nIHByb2JsZW0= 1917\nIGRlYXRo 1918\nIHNvY2lhbA== 1919\naW1hdGU= 1920\nQVM= 1921\nb3J0dW4= 1922\nIGNhbXBhaWdu 1923\nZXJ5 1924\nQ2g= 1925\nIGV5 1926\naWFsbHk= 1927\nIG11cw== 1928\nd2g= 1929\ncG9z 1930\nIGVy 1931\nIHNhZg== 1932\nIG1vbnRocw== 1933\naXJvbg== 1934\nIHZpb2w= 1935\nIGZpdmU= 1936\nIHN0cmU= 1937\nIHBsYXllcnM= 1938\naW5j 1939\nYWxk 1940\neWVhcg== 1941\nYXVu 1942\nIHN1Y2Nlc3M= 1943\nIHByZXNlbnQ= 1944\nZXJlbmNl 1945\nIDIwMTQ= 1946\nIHN1Z2c= 1947\nIHBhcnRpY3VsYXI= 1948\nIHRyeQ== 1949\nIHN1Z2dlc3Q= 1950\nIENocmlzdA== 1951\nb25lcw== 1952\nIHByaXY= 1953\nMjM= 1954\nIGNyaXQ= 1955\nIGxhbmQ= 1956\nIGxvY2Fs 1957\naWZ5 1958\nMjk= 1959\nIGF1dA== 1960\nRUQ= 1961\nIEd1 1962\nIG11bHQ= 1963\nIHBvbGl0aWNhbA== 1964\nIGFza2Vk 1965\nIGZvcm1lcg== 1966\naXR0ZXI= 1967\ncmlwdA== 1968\nIGNsb3Nl 1969\nIHByYWN0 1970\nIFlvcms= 1971\nIGdldHRpbmc= 1972\nIGFjcm9zcw== 1973\nIGNvbWI= 1974\nIGJlbGlldmU= 1975\nIHo= 1976\nIHRvZ2V0 1977\nIHRvZ2V0aGVy 1978\nIENlbnQ= 1979\naXJj 1980\nIGluZGl2aWR1YWw= 1981\nIE1j 1982\nMjc= 1983\naXNr 1984\nIEVuZw== 1985\nIGZhY2U= 1986\nIDI0 1987\nIHZhbHVl 1988\nIGFyZWE= 1989\nZXY= 1990\nIHdyaXQ= 1991\nIFByZXNpZGVudA== 1992\nIHZvdA== 1993\nIGtleQ== 1994\nIG1vbQ== 1995\ncHV0 1996\nIGFueXRoaW5n 1997\nIGV4cGVyaWVuY2U= 1998\nYXR0bGU= 1999\nIG1pbmQ= 2000\nYWZm 2001\nb21t 2002\nIGZ1dHVyZQ== 2003\nZ2Vk 2004\nIGN1dA== 2005\nIHRvdA== 2006\naXRjaA== 2007\nIHZpZGVv 2008\nIGludmVzdGln 2009\nIG5ldA== 2010\nIE15 2011\ncmljdA== 2012\naWVu 2013\nLik= 2014\nIGltcHJv 2015\ndGhvdWdo 2016\nd2FyZHM= 2017\nIGNvbm5lY3Q= 2018\nIE1lZA== 2019\nc2VsdmVz 2020\nZW5zaXZl 2021\nbWI= 2022\nb2Jlcg== 2023\nYXRvcnM= 2024\nQW4= 2025\nIDUw 2026\nIHJlZHU= 2027\ncmVzZW50 2028\nIGFib3Zl 2029\nIGZyZQ== 2030\nIEV1cm9wZQ== 2031\nc3c= 2032\nIGFtb3VudA== 2033\nIEFwcA== 2034\nIGVpdGhlcg== 2035\nIG1pbGl0 2036\nIGFuYWw= 2037\nIGZhaWw= 2038\nIEVu 2039\nYWxlcw== 2040\nIHNwZWNpYWw= 2041\nIGJsYWNr 2042\nSVQ= 2043\nY2hlcg== 2044\nIGxvb2tpbmc= 2045\nIGZpcmU= 2046\neW4= 2047\nIGFsbW9zdA== 2048\nb29u 2049\nIHN0dWR5 2050\nIG1pc3M= 2051\nY2hlcw== 2052\ncm93bg== 2053\nIHRyZQ== 2054\nIGNvbW11bml0eQ== 2055\nIG1lZGlh 2056\nIGZvb2Q= 2057\nIGNvbWVz 2058\nIFVuaXZlcnNpdHk= 2059\nIHNpbmdsZQ== 2060\nV2hhdA== 2061\ndWx5 2062\nIGhhbGY= 2063\nYWd1ZQ== 2064\naG9k 2065\nIFJlcHVibGlj 2066\nIHN0YXJ0ZWQ= 2067\nIHF1aWNr 2068\nb3Rv 2069\nYm9vaw== 2070\nIGlzc3Vl 2071\naXRvcg== 2072\nIGVsc2U= 2073\nIGNvbnNpZGVy 2074\nMjY= 2075\ncm9kdQ== 2076\nIHRha2Vu 2077\nMjg= 2078\nOTk= 2079\nIFdpdGg= 2080\nIHRydWU= 2081\nIHdh 2082\nIHRyYWQ= 2083\nIGFnbw== 2084\nIG1lc3M= 2085\naWVm 2086\nIGFkZGVk 2087\nb2tl 2088\nIGJhZA== 2089\nIGZhdg== 2090\nMzM= 2091\nIHNpbWlsYXI= 2092\nYXNr 2093\nIERvbg== 2094\nIGNoYXJhY3Rlcg== 2095\nb3J0cw== 2096\nIEhvdXNl 2097\nIHJlcG9ydGVk 2098\nIHR5cGU= 2099\ndmFs 2100\naW9k 2101\nIEhvd2V2ZXI= 2102\nIHRhcmc= 2103\nIGVudGlyZQ== 2104\ncHBpbmc= 2105\nIGhpc3Rvcnk= 2106\nIGxpdmU= 2107\nZmZpYw== 2108\nLi4uLi4uLi4= 2109\nZWRlcmFs 2110\nIHRyeWluZw== 2111\nIGRpc2N1c3M= 2112\nIEhhcg== 2113\nYWNlcw== 2114\nbGlzaGVk 2115\nIHNlbGY= 2116\nb3Nw 2117\ncmVzdA== 2118\nIHJvb20= 2119\nZWx0 2120\nIGZhbGw= 2121\nb2x1dGlvbg== 2122\nIGV0 2123\nIHg= 2124\nIGlzbg== 2125\nIGlkZWE= 2126\nYm8= 2127\nIHNvdW5k 2128\nIERlcA== 2129\nIHNvbWVvbmU= 2130\nY2lhbGx5 2131\ndWxseQ== 2132\nIGZvYw== 2133\nIG9iamVjdA== 2134\naWZ0 2135\nYXBlcg== 2136\nIHBsYXllcg== 2137\nIHJhdGhlcg== 2138\nIHNlcnZpY2U= 2139\nYXNoaW5n 2140\nIERv 2141\nIFBhcnQ= 2142\ncnVn 2143\nbW9u 2144\ncGx5 2145\nIG1vcg== 2146\nIG5vdGhpbmc= 2147\nIHByb3ZpZGU= 2148\nSUM= 2149\ndW5n 2150\nIHBhcnR5 2151\nIGV4aXN0 2152\nIG1hZw== 2153\nNzA= 2154\nIHJ1bA== 2155\nIGhvdXNl 2156\nIGJlaGluZA== 2157\nIGhvd2V2ZXI= 2158\nIFdvcmxk 2159\nIHN1bQ== 2160\nIGFwcGxpYw== 2161\nIDs= 2162\nIGZ1bmN0aW9u 2163\nZ3I= 2164\nIFBvbA== 2165\nIGZyb250 2166\nMjAw 2167\nIHNlcmllcw== 2168\nIHRlbQ== 2169\nIHR5cA== 2170\naWxscw== 2171\nIG9wdA== 2172\nIHBvaW50cw== 2173\nIGJlbG93 2174\naXR0ZWQ= 2175\nIHNwZWNpZmlj 2176\nIDIwMTc= 2177\ndW1i 2178\nIHJh 2179\nIHByZXZpb3Vz 2180\nIHByZXQ= 2181\ncmVtZQ== 2182\nIGN1c3RvbQ== 2183\nIGNvdXJ0 2184\nIE1l 2185\nIHJlcGw= 2186\nIHdob2xl 2187\nZ28= 2188\nY2Vy 2189\nIHRyZWF0 2190\nIEFjdA== 2191\nIHByb2JhYmx5 2192\nIGxlYXJu 2193\nZW5kZXI= 2194\nIEFzcw== 2195\nIHZlcnNpb24= 2196\nbm93 2197\nIGNoZWNr 2198\nIENhbA== 2199\nUkU= 2200\nbWluaXN0 2201\nT24= 2202\nb3VyY2Vz 2203\nIGJlbmVm 2204\nIGRvYw== 2205\nIGRldGVy 2206\nIGVuYw== 2207\nIHN1cGVy 2208\nIGFkZHJlc3M= 2209\nIHZpY3Q= 2210\nIDIwMTM= 2211\nIG1lYXM= 2212\ndHI= 2213\nIGZpZWxk 2214\nV2hlbg== 2215\nIHNpZ25pZmlj 2216\ndWdl 2217\nIGZlYXQ= 2218\nIGNvbW1vbg== 2219\nbG9hZA== 2220\nIGJlZ2lu 2221\nIGJyaW5n 2222\nIGFjdGlvbg== 2223\nZXJtYW4= 2224\nIGRlc2NyaWI= 2225\nIGluZHVzdA== 2226\nIHdhbnRlZA== 2227\ncmllZA== 2228\nbWluZw== 2229\nIGF0dGVtcHQ= 2230\nNDU= 2231\nZmVy 2232\nIGR1ZQ== 2233\ncmVzc2lvbg== 2234\nIyM= 2235\nIHNoYWxs 2236\nIHNpeA== 2237\nb28= 2238\nIHN0ZXA= 2239\nIHB1Yg== 2240\nIGhpbXNlbGY= 2241\nIDIz 2242\nIGNvcA== 2243\nIGRlc3Q= 2244\nIHN0b3A= 2245\nQUM= 2246\naWJpbGl0eQ== 2247\nIGxhYg== 2248\naWN1bHQ= 2249\nIGhvdXJz 2250\nIGNyZWF0ZQ== 2251\nIGZ1cnRoZXI= 2252\nIEFtZXJpY2E= 2253\nIENpdHk= 2254\nIGRvdQ== 2255\naGVhZA== 2256\nU1Q= 2257\nIE5vcnRo 2258\nY2luZw== 2259\nIG5hdGlvbmFs 2260\ndWxl 2261\nIEluc3Q= 2262\nIHRha2luZw== 2263\nIFF1 2264\naXJ0 2265\nIHJlZA== 2266\nIHJlc2VhcmNo 2267\ndmlyb24= 2268\nIEdl 2269\nIGJyZWFr 2270\nYW5h 2271\nIHNwYWNl 2272\nYXRlcmlhbA== 2273\nIHJlY2VudA== 2274\nIEFi 2275\nIGdlbmVyYWw= 2276\nIGhpdA== 2277\nIHBlcmlvZA== 2278\nIGV2ZXJ5dGhpbmc= 2279\naXZlbHk= 2280\nIHBoeXM= 2281\nIHNheWluZw== 2282\nYW5rcw== 2283\nIGNvdQ== 2284\nIGN1bHQ= 2285\nYWNlZA== 2286\nZWFs 2287\ndWF0aW9u 2288\nIGNvdW4= 2289\nbHU= 2290\nIGluY2x1ZGU= 2291\nIHBvc2l0aW9u 2292\nIEFmdGVy 2293\nIENhbmFk 2294\nIEVt 2295\nIGltbQ== 2296\nIFJlZA== 2297\nIHBpY2s= 2298\nIGNvbXBs 2299\nIG1hdHRlcg== 2300\ncmVn 2301\nZXh0 2302\nYW5ndQ== 2303\naXNj 2304\nb2xl 2305\nYXV0 2306\nIGNvbXBldA== 2307\nZWVk 2308\nZmVjdA== 2309\nIDIx 2310\nIFNlbg== 2311\nIFRoZXNl 2312\nYXNpbmc= 2313\nIGNhbm5vdA== 2314\nIGluaXQ= 2315\nIHJlbGF0aW9ucw== 2316\nYWNoZWQ= 2317\nIGJhcg== 2318\nIDQw 2319\nIFRI 2320\nIDIwMTI= 2321\nIHZvbA== 2322\nIGdyb3VuZA== 2323\nIHNlY3VyaXR5 2324\nIHVwZA== 2325\naWx0 2326\nMzU= 2327\nIGNvbmNlcm4= 2328\nIEp1c3Q= 2329\nIHdoaXRl 2330\nIHNlZW1z 2331\nIEhlcg== 2332\ncGVjaWFsbHk= 2333\naWVudHM= 2334\nIGFubm91bg== 2335\nIGZpZw== 2336\naWdodHM= 2337\nIHN0cmk= 2338\nbGlrZQ== 2339\naWRz 2340\nIHN1cw== 2341\nIHdhdGNo 2342\nIOI= 2343\nIHdpbmQ= 2344\nIENvbnQ= 2345\nIGl0c2VsZg== 2346\nIG1hc3M= 2347\nQWw= 2348\neWxl 2349\naXF1ZQ== 2350\nIE5hdGlvbmFs 2351\nIGFicw== 2352\nIHBhY2s= 2353\nIG91dHNpZGU= 2354\nIGFuaW0= 2355\nIHBhaW4= 2356\nZXRlcg== 2357\nIG1hbmFn 2358\nZHVjdA== 2359\nb2du 2360\nIF0= 2361\nIFNlcHQ= 2362\nc2Vj 2363\nb2Zm 2364\nIEphbg== 2365\nIGZvb3Q= 2366\nYWRlcw== 2367\nIHRoaXJk 2368\nIG1vdA== 2369\nIGV2aWRlbmNl 2370\naW50b24= 2371\nIHRocmVhdA== 2372\nYXB0 2373\ncGxlcw== 2374\nY2xl 2375\nIGxv 2376\nIGRlY2w= 2377\nIGl0ZW0= 2378\nbWVkaQ== 2379\nIHJlcHJlc2VudA== 2380\nb21i 2381\nYW1lcg== 2382\nIHNpZ25pZmljYW50 2383\nb2dyYXBo 2384\nc3U= 2385\nIGNhbA== 2386\naXJlcw== 2387\nMDAwMA== 2388\nSUQ= 2389\nQU0= 2390\nIHNpbXBseQ== 2391\nIGxvbmdlcg== 2392\nIGZpbGU= 2393\nT1Q= 2394\nY2hl 2395\nU28= 2396\nYXRlZw== 2397\nb3Jn 2398\nIEhpcw== 2399\nIGVuZXI= 2400\nIGRvbQ== 2401\nIHVwb24= 2402\naWxp 2403\nIjoi 2404\nIHRoZW1zZWx2ZXM= 2405\nIGNvbWluZw== 2406\nIHF1aXRl 2407\nIGRpZmZpY3VsdA== 2408\nIEJhcg== 2409\naWxpdGllcw== 2410\ncmVs 2411\nZW5kcw== 2412\nY2lhbA== 2413\nNjQ= 2414\nIHdvbWFu 2415\ncmFw 2416\neXI= 2417\nIG5lY2Vzcw== 2418\naXBz 2419\nIHRleHQ= 2420\nIHJlcXVpcmU= 2421\nIG1pbGl0YXJ5 2422\nIHJldmlldw== 2423\nIHJlc3BvbnM= 2424\nNzU= 2425\nIHN1YmplY3Q= 2426\nIGluc3RlYWQ= 2427\nIGlzc3Vlcw== 2428\nIGdlbg== 2429\nIiwi 2430\nIG1pbnV0ZXM= 2431\nIHdlYXA= 2432\ncmF5 2433\nYW1lZA== 2434\ndGltZQ== 2435\nYmw= 2436\nSG93 2437\nIGNvZGU= 2438\nIFNt 2439\nIGhpZ2hlcg== 2440\nIFN0ZQ== 2441\ncmlz 2442\nIHBhZ2U= 2443\nIHN0dWRlbnRz 2444\nIEludGVybg== 2445\nIG1ldGhvZA== 2446\nIEF1Zw== 2447\nIFBlcg== 2448\nIEFn 2449\nIHBvbGljeQ== 2450\nIFN3 2451\nIGV4ZWM= 2452\nIGFjY2VwdA== 2453\ndW1l 2454\ncmlidXQ= 2455\nIHdvcmRz 2456\nIGZpbmFs 2457\nIGNoYW5nZXM= 2458\nIERlbW9jcg== 2459\nIGZyaWVuZHM= 2460\nIHJlc3BlY3Q= 2461\nIGVw 2462\nIGNvbXBhbg== 2463\naXZpbA== 2464\nIGRhbWFnZQ== 2465\nKioqKg== 2466\nb2dsZQ== 2467\ndmlyb25tZW50 2468\nIG5lZw== 2469\nZW50YWw= 2470\nIGFw 2471\nIHRvdGFs 2472\naXZhbA== 2473\nISI= 2474\nbGlt 2475\nIG5lZWRz 2476\nIGFncmU= 2477\nIGRldmVsb3BtZW50 2478\nIGFnZQ== 2479\naXBsZQ== 2480\nMjE= 2481\nIHJlc3VsdHM= 2482\nIEFm 2483\nU2g= 2484\nIGd1bg== 2485\nIE9iYW1h 2486\ncm9sbA== 2487\nIEA= 2488\nIHJpZ2h0cw== 2489\nIEJyaXQ= 2490\nIHJ1bm5pbmc= 2491\nIHdhc24= 2492\nIHBvcnQ= 2493\nIHJhdGU= 2494\nIHByZXR0eQ== 2495\nIHRhcmdldA== 2496\nIHNhdw== 2497\nIGNpcmM= 2498\nIHdvcmtz 2499\naWNybw== 2500\nYWx0 2501\nb3Zlcg== 2502\nd3d3 2503\nVGhhdA== 2504\nbGllcg== 2505\nIGV2ZXJ5b25l 2506\ndWRl 2507\nIHBpZQ== 2508\naWRkbGU= 2509\ncmFlbA== 2510\nIHJhZA== 2511\nIGJsb2Nr 2512\nIHdhbGs= 2513\nVG8= 2514\n44E= 2515\nbmVz 2516\nIEF1c3Q= 2517\nYXVs 2518\ncm90ZQ== 2519\nIFNvdXRo 2520\nZXNzaW9u 2521\nb3Bo 2522\nIHNob3dz 2523\nIHNpdGU= 2524\nIGpv 2525\nIHJpc2s= 2526\nY2x1cw== 2527\nbHQ= 2528\nIGluag== 2529\naWRpbmc= 2530\nIFNwZQ== 2531\nIGNoYWxs 2532\naXJt 2533\nIDIy 2534\naXR0aW5n 2535\nc3Ry 2536\nIGh5 2537\nTEU= 2538\na2V5 2539\nIGJlZ2Fu 2540\nYXR1cg== 2541\nYXNoaW5ndG9u 2542\nbGFt 2543\nIERhdg== 2544\nYml0 2545\nIHNpemU= 2546\nIFBhcg== 2547\nMzg= 2548\nb3VybmFs 2549\nZmFjZQ== 2550\nIGRlY2lzaW9u 2551\nIGxhcmc= 2552\nIGp1ZA== 2553\ncmVjdA== 2554\nIGNvbnRpbnVl 2555\nIE9jdA== 2556\nb3ZlcmVk 2557\nIEludA== 2558\nPT09PT09PT0= 2559\nIHBhcmVudA== 2560\nIFdpbGw= 2561\nIGVhc3k= 2562\nIGRydWc= 2563\nYW5nZXI= 2564\nIHNlbnNl 2565\nIGRp 2566\naWRheQ== 2567\nIGVuZXJneQ== 2568\naXN0aWM= 2569\nIGFzc29jaQ== 2570\nYXJ0ZXI= 2571\nb2JhbA== 2572\nZWtz 2573\nIEVs 2574\ndXJjaA== 2575\nIGdpcmw= 2576\nb2U= 2577\naXRsZQ== 2578\nIDI4 2579\nIENoZQ== 2580\nIHJlcXVlc3Q= 2581\nIHNvb24= 2582\nIGhvc3Q= 2583\na3k= 2584\nIHN0YXRlcw== 2585\nb21lcw== 2586\nIG1hdGVyaWFs 2587\nbGV4 2588\nIG1vbWVudA== 2589\nIGFuc3c= 2590\nb25zZQ== 2591\nIGVzcGVjaWFsbHk= 2592\nIG5vcm0= 2593\nIHNlcnZpY2Vz 2594\ncGl0ZQ== 2595\ncmFu 2596\nIHJvbGU= 2597\nNDQ= 2598\nKTo= 2599\nIGNyZWQ= 2600\nQ2w= 2601\nX19fX19fX18= 2602\nIG1hdA== 2603\nIGxvZw== 2604\nIENsaW50b24= 2605\nT1U= 2606\nIG9mZmljZQ== 2607\nIDI2 2608\nIGNoYXJn 2609\nIHRyYWNr 2610\nbWE= 2611\nIGhlYXJ0 2612\nIGJhbGw= 2613\nIHBlcnNvbmFs 2614\nIGJ1aWxkaW5n 2615\nbmE= 2616\nc2V0 2617\nYm9keQ== 2618\nIEJsYWNr 2619\nIGluY3JlYXNl 2620\naXR0ZW4= 2621\nIG5lZWRlZA== 2622\nMzY= 2623\nMzI= 2624\nPSI= 2625\nIGxvc3Q= 2626\nIGJlY2FtZQ== 2627\nIGdyb3Vwcw== 2628\nIE11cw== 2629\nIHdyb3Rl 2630\nIFBl 2631\nIHByb3A= 2632\nam95 2633\nw6k= 2634\nIFdoaXRl 2635\nIGRlYWQ= 2636\nLic= 2637\nIGh0dHA= 2638\nIHdlYnM= 2639\nT1M= 2640\nIGluc2lkZQ== 2641\nIHdyb25n 2642\nIHN0YXRlbWVudA== 2643\nIC4uLg== 2644\neWw= 2645\nIGZpbG0= 2646\nIG11c2lj 2647\nIHNoYXJl 2648\naWZpY2F0aW9u 2649\nIHJlbGVhc2U= 2650\nIGZvcndhcmQ= 2651\nIHN0YXk= 2652\nIGNvbXB1dA== 2653\naXR0ZQ== 2654\nc2Vy 2655\nIG9yaWdpbmFs 2656\nIGNhcmQ= 2657\nIGNhbmQ= 2658\nIGRpdg== 2659\nYXR1cmFs 2660\nIGZhdm9y 2661\nT00= 2662\nIGNhc2Vz 2663\ndXNlcw== 2664\nIHNlY3Rpb24= 2665\nIGxlYXZl 2666\nZ2luZw== 2667\nb3ZlZA== 2668\nIFdhc2hpbmd0b24= 2669\nMzk= 2670\nIEds 2671\nIHJlcXVpcmVk 2672\nYWN0aW9u 2673\nYXBhbg== 2674\nb29y 2675\naXRlcg== 2676\nIEtpbmc= 2677\nIGNvdW50cmllcw== 2678\nIEdlcm1hbg== 2679\nbGxpbmc= 2680\nIDI3 2681\nMzQ= 2682\nIHF1ZXN0aW9ucw== 2683\nIHByaW0= 2684\nIGNlbGw= 2685\nIHNob290 2686\nIGFueW9uZQ== 2687\nIFdlc3Q= 2688\nIGFmZmVjdA== 2689\nZXBlbmQ= 2690\nIG9ubGluZQ== 2691\nIElzcmFlbA== 2692\nIFNlcHRlbWJlcg== 2693\nIGFiaWxpdHk= 2694\nIGNvbnRlbnQ= 2695\naXNlcw== 2696\nIHJldmU= 2697\nIGxhdW4= 2698\nIGluZGlj 2699\nIGZvcmNl 2700\nY2FzdA== 2701\nIHNvbGQ= 2702\nYXZpbmc= 2703\nZmw= 2704\nIHNvZnQ= 2705\nIGNvbXBhbmllcw== 2706\nY2VlZA== 2707\nIGFydGljbGU= 2708\nIGF1ZA== 2709\nIHJldg== 2710\nIGVkdWM= 2711\nIHBsYXlpbmc= 2712\nMDU= 2713\nIGhlbGQ= 2714\nY3Rvcg== 2715\nIHJlbGVhc2Vk 2716\nIGZlZGVyYWw= 2717\nMzc= 2718\nIGFkbWluaXN0 2719\nIGludGVydmlldw== 2720\nIGluc3RhbGw= 2721\nIHJlY2VpdmVk 2722\nIHNvdXJjZQ== 2723\ndWs= 2724\nUGg= 2725\nIHNlcmlvdXM= 2726\nIGNyZWF0ZWQ= 2727\nIGNhdXNl 2728\nIGltbWVkaQ== 2729\nIGRlZmlu 2730\ndWVs 2731\nIERlcGFydG1lbnQ= 2732\nY3Rpb25z 2733\nIENvdXI= 2734\nIE5vdw== 2735\nemU= 2736\naXRlcw== 2737\naXR1dGlvbg== 2738\nIGxhdGU= 2739\nIHNwZWFr 2740\nbmVycw== 2741\nIGxlZ2Fs 2742\nYXJp 2743\nIENvcg== 2744\nIHdlZWtz 2745\nIG1vZGVs 2746\nIHByZWQ= 2747\nIGV4YWN0 2748\nQkM= 2749\nIEJ5 2750\nSU5H 2751\nb3Npbmc= 2752\nIHRha2Vz 2753\nIHJlZ2FyZA== 2754\nIG9wcG9ydHVu 2755\nIHByaWNl 2756\nIDE5OA== 2757\nIEFwcg== 2758\nZnVsbHk= 2759\nIG9yZA== 2760\nIHByb2JsZW1z 2761\ncnVjdGlvbg== 2762\naGFt 2763\nIENvdW50 2764\nbGVnZQ== 2765\nIGxlYWRlcnM= 2766\nRVQ= 2767\nbGV2 2768\nIGRlZXA= 2769\nb2xvZ2ljYWw= 2770\nZXNl 2771\naGFwcw== 2772\nIFNvbWU= 2773\nIHBlcnM= 2774\nIGNvbnRyYWN0 2775\nIHJlbGF0aW9uc2hpcA== 2776\nc3A= 2777\nb3Vk 2778\nIGJhc2U= 2779\nNDg= 2780\nbWl0 2781\nQWQ= 2782\nYW5jaWFs 2783\nIGNvbnN1bQ== 2784\nIHBvdGVudGlhbA== 2785\nIGxhbmd1 2786\ncmVt 2787\nZXRo 2788\nIHJlbGln 2789\ncmVzc2Vk 2790\nNjY= 2791\nIGxpbms= 2792\nIGxvd2Vy 2793\nYXllcg== 2794\nIEp1bmU= 2795\nIGZlbQ== 2796\ndW50 2797\nZXJj 2798\ndXJk 2799\nIGNvbnRhY3Q= 2800\nIGlsbA== 2801\nIG1vdGhlcg== 2802\nIGVzdGFi 2803\naHR0 2804\nIE1hcmNo 2805\nIEJybw== 2806\nIENoaW5h 2807\nIDI5 2808\nIHNxdQ== 2809\nIHByb3ZpZGVk 2810\nIGF2ZXJhZ2U= 2811\nYXNvbnM= 2812\nIDIwMTE= 2813\nIGV4YW0= 2814\nbGlu 2815\nNTU= 2816\nbmVk 2817\nIHBlcmZlY3Q= 2818\nIHRvdQ== 2819\nYWxzZQ== 2820\ndXg= 2821\nIGJ1eQ== 2822\nIHNob3Q= 2823\nIGNvbGxlY3Q= 2824\nIHBob3Q= 2825\nIHBsYXllZA== 2826\nIHN1cnBy 2827\nIG9mZmljaWFscw== 2828\nIHNpbXBsZQ== 2829\nYXZ5 2830\nIGluZHVzdHJ5 2831\nIGhhbmRz 2832\nZ3JvdW5k 2833\nIHB1bGw= 2834\nIHJvdW5k 2835\nIHVzZXI= 2836\nIHJhbmdl 2837\ndWFyeQ== 2838\nIHByaXZhdGU= 2839\nb3Bz 2840\nZWVz 2841\nIHdheXM= 2842\nIE1pY2g= 2843\nIHZlaA== 2844\nIGV4Y2VwdA== 2845\nIHRlcm1z 2846\naW11bQ== 2847\ncHBlcg== 2848\nSU9O 2849\nb3Jlcw== 2850\nIERyYWdvbg== 2851\nb3Vs 2852\nIGRlbg== 2853\nIHBlcmZvcm1hbmNl 2854\nIGJpbGw= 2855\nY2ls 2856\nNDc= 2857\nIGVudmlyb25tZW50 2858\nIGV4Yw== 2859\nYWRk 2860\nIHdvcnRo 2861\nIHBpY3Q= 2862\nIGNoYW5jZQ== 2863\nIDIwMTg= 2864\nYm9y 2865\nIHNwZWVk 2866\naWN0aW9u 2867\nIGFsbGVn 2868\nIEphcGFu 2869\nYXRvcnk= 2870\ncmVldA== 2871\nIG1hdGNo 2872\nIElJ 2873\nIHN0cnU= 2874\nb3JkZXI= 2875\nIHN0ZQ== 2876\nIGxpdmluZw== 2877\nIHN0cnVjdA== 2878\naW5v 2879\nIHNlcGFy 2880\naGVybg== 2881\nIHJlc3BvbnNl 2882\nIGVuam95 2883\nIHZpYQ== 2884\nQUQ= 2885\ndW1lbnRz 2886\nYWNlYm9vaw== 2887\nIG1lbWJlcg== 2888\naWJy 2889\naXppbmc= 2890\nIHRvb2w= 2891\nIE1vbg== 2892\nIFdoaWxl 2893\naG9vZA== 2894\nIEFuZw== 2895\nIERlZg== 2896\nIG9mZmVy 2897\nVHI= 2898\nYXVy 2899\nIHR1cm5lZA== 2900\nIEp1bHk= 2901\nZG93bg== 2902\nYW5jZWQ= 2903\nIHJlY2VudGx5 2904\nIEVhcg== 2905\nIGNl 2906\nIFN0YXI= 2907\nIENvbmc= 2908\ncm91Z2h0 2909\nIGJsb29k 2910\nIGhvcGU= 2911\nIGNvbW1lbnQ= 2912\nYWludA== 2913\nIGFycmk= 2914\naWxlcw== 2915\nIHBhcnRpY2lw 2916\nb3VnaHQ= 2917\ncmlwdGlvbg== 2918\nMDg= 2919\nNDk= 2920\nIGdhdmU= 2921\nIHNlbGVjdA== 2922\nIGtpbGxlZA== 2923\nc3ljaA== 2924\nIGdvZXM= 2925\naWo= 2926\nIGNvbGw= 2927\nIGltcGFjdA== 2928\nYXRpdmVz 2929\nIFNlcg== 2930\nMDk= 2931\nIEF1Z3VzdA== 2932\nIGJveQ== 2933\nZGU= 2934\nIERlcw== 2935\nIGZlbHQ= 2936\nVVM= 2937\nIGV4cGVjdGVk 2938\nIGltYWdl 2939\nIE1hcms= 2940\nY2NvcmRpbmc= 2941\nb2ljZQ== 2942\nRUM= 2943\nIE1hZw== 2944\nZW5lZA== 2945\naG9sZA== 2946\nIFBvc3Q= 2947\nIHByZXZlbnQ= 2948\nTm8= 2949\nIGludm9sdmVk 2950\nIGV5ZXM= 2951\nIHF1aWNrbHk= 2952\nQXQ= 2953\ndW5r 2954\nIGJlaGF2 2955\nIHVy 2956\nIGxlZA== 2957\nY29tZQ== 2958\nZXk= 2959\nIGNhbmRpZA== 2960\nIGVhcmxpZXI= 2961\nIGZvY3Vz 2962\nZXR5 2963\nUHJv 2964\nbGVkZ2U= 2965\naXhlZA== 2966\naWxsZWQ= 2967\nIHBvcHVsYXI= 2968\nQVA= 2969\nIHNldHQ= 2970\nbGlnaHQ= 2971\nIHZhcmlvdXM= 2972\naW5rcw== 2973\nIGxldmVscw== 2974\nIHJvYWQ= 2975\nZWxsaWc= 2976\nYWJsZXM= 2977\naGVs 2978\naXR0ZWU= 2979\nIEdlbmVy 2980\neXBl 2981\nIGhlYXJk 2982\naWNsZXM= 2983\nIG1pcw== 2984\nIHVzZXJz 2985\nIFNhbg== 2986\nIGltcHJvdmU= 2987\nIGZhdGhlcg== 2988\nIHNlYXJjaA== 2989\nVGhleQ== 2990\ndmls 2991\nIHByb2Zlc3M= 2992\nIGtuZXc= 2993\nIGxvc3M= 2994\nIGV2ZW50cw== 2995\nNjU= 2996\nIGJpbGxpb24= 2997\nMDc= 2998\nMDI= 2999\nIE5ld3M= 3000\nIEFN 3001\nIGNvdmVy 3002\nd2hlcmU= 3003\nZW5zaW9u 3004\nIGJvdHQ= 3005\nIGFyZWFz 3006\nZW5jZXM= 3007\nb3Bl 3008\nIFR3aXR0ZXI= 3009\nYWVs 3010\nIGdldHM= 3011\nIEdvb2dsZQ== 3012\nIHNu 3013\naWFudA== 3014\nIHZvdGU= 3015\nIG5lYXJseQ== 3016\nIGluY2x1ZGVk 3017\nIHJlY29nbg== 3018\neno= 3019\nbW0= 3020\nYWxlZA== 3021\nIGhhcHBlbmVk 3022\nMDQ= 3023\nIGhvdA== 3024\nIHdob3Nl 3025\nIGNpdmls 3026\nIHN1ZmY= 3027\nb2Vz 3028\naXRpeg== 3029\nIFN5cmk= 3030\nIHJlc3BvbmQ= 3031\nIGhvbg== 3032\nIGZlYXR1cmVz 3033\nIGVjb25vbWlj 3034\nIEFwcmls 3035\ncmlt 3036\nIHRlY2hub2xvZ3k= 3037\nIG9wdGlvbg== 3038\nYWdpbmc= 3039\nIHB1cmNo 3040\nUmU= 3041\nIGxhdA== 3042\nY2hpZQ== 3043\naXNs 3044\nIHJlY29tbQ== 3045\ndWY= 3046\nIHRyYWluaW5n 3047\nIGVmZmVjdHM= 3048\nIGZhc3Q= 3049\nIDIwMTA= 3050\nIG9jY3Vy 3051\nIHdlYnNpdGU= 3052\nIGVtYWls 3053\nIHNlbnM= 3054\nZWNo 3055\nIG9pbA== 3056\nIGluZmx1 3057\nIGN1cnJlbnRseQ== 3058\nIFNjaA== 3059\nIEFkZA== 3060\nIGdvYWw= 3061\nIHNjaWVudA== 3062\nIGNvbnY= 3063\nMTAw 3064\nZW15 3065\nIGRlY2lkZWQ= 3066\nIHRyYXZlbA== 3067\nIG1lbnRpb24= 3068\nTEw= 3069\nMDM= 3070\nIGVsZWN0aW9u 3071\nIHBob25l 3072\nIGxvb2tz 3073\nIHNpdHVhdGlvbg== 3074\nIGN5 3075\nIGhvcg== 3076\nYmVk 3077\nIENvdXJ0 3078\nYWlseQ== 3079\nYXZlcw== 3080\nIHF1YWxpdHk= 3081\nIENvbXA= 3082\nd2lzZQ== 3083\nIHRhYmxl 3084\nIHN0YWZm 3085\nIFdpbmQ= 3086\nZXR0 3087\nIHRyaWVk 3088\naWRlcmVk 3089\nIGFkZGl0aW9u 3090\nIGJveA== 3091\nIGxhY2s= 3092\nYXJpbHk= 3093\nIHdpZGU= 3094\nIG1pZA== 3095\nIGJvYXJk 3096\neXNpcw== 3097\nIGFudGk= 3098\naGE= 3099\nIGRpZw== 3100\nZW5pbmc= 3101\nIGRybw== 3102\nQ29u 3103\nNjg= 3104\nIHNsb3c= 3105\nYmFzZWQ= 3106\nc2VxdQ== 3107\nIHBhdGg= 3108\nRXg= 3109\nYWtlcg== 3110\nIHdvcmtlZA== 3111\nIHBlbg== 3112\nIGVuZ2luZQ== 3113\nIGxvb2tlZA== 3114\nIFN1cGVy 3115\nIFNlcnY= 3116\nIHZpY3RpbQ== 3117\nVW4= 3118\nIHByb3BlcnR5 3119\nIGludHJvZHU= 3120\nIGV4ZWN1dA== 3121\nIFBN 3122\nTGU= 3123\nIGNvbG9y 3124\nIE1vcmU= 3125\nIDYw 3126\nIG5ldHdvcms= 3127\nIGRhdGU= 3128\nY3Vs 3129\naWRnZQ== 3130\nIGV4dHJh 3131\nMzE= 3132\nIHNsZQ== 3133\nNjc= 3134\nIHdvbmQ= 3135\nIHJlcG9ydHM= 3136\nanVzdA== 3137\nIEF1c3RyYWw= 3138\nIGNhcGl0YWw= 3139\nIGVucw== 3140\nIGNvbW1hbmQ= 3141\nIGFsbG93ZWQ= 3142\nIHByZXA= 3143\nIGNhcHQ= 3144\naGli 3145\nIG51bWJlcnM= 3146\nY2hhbg== 3147\nIGZhaXI= 3148\nbXA= 3149\nb21z 3150\nIHJlYWNo 3151\nV2l0aA== 3152\ndGFpbg== 3153\nIGJyb2Fk 3154\nIGNvdXBsZQ== 3155\nZWNhdXNl 3156\nbHlpbmc= 3157\nIEZlYg== 3158\nIHNjcmVlbg== 3159\nIGxpdmVz 3160\nIHByaW9y 3161\nIENvbmdyZXNz 3162\nQXI= 3163\nIGFwcHJvYWNo 3164\nIGVtZXI= 3165\nYXJpZXM= 3166\nIERpcw== 3167\nc2Vydg== 3168\nIE5l 3169\nIGJ1aWx0 3170\nY2llcw== 3171\nIHJlcGU= 3172\nIHJ1bGVz 3173\nZm9yY2U= 3174\nIFBhbA== 3175\nIGZpbmFuY2lhbA== 3176\nIGNvbnNpZGVyZWQ= 3177\nIENoYXI= 3178\nbmNlcw== 3179\nIElT 3180\nIGJyb3VnaHQ= 3181\nIGJp 3182\naWVycw== 3183\nIFNpbQ== 3184\nT1A= 3185\nIHByb2R1Y3Rz 3186\nIHZpc2l0 3187\nIGRvY3VtZW50 3188\nIGNvbmR1Y3Q= 3189\nIGNvbXBsZXRlbHk= 3190\naW5pbmc= 3191\nIENhbGlm 3192\naWJseQ== 3193\nIHdyaXR0ZW4= 3194\nIFRW 3195\nZW1lbnRz 3196\nIGRyYXc= 3197\nT25l 3198\nIHB1Ymxpc2hlZA== 3199\nIHNlY3JldA== 3200\ncmFpbg== 3201\naGV0 3202\nIEZhY2Vib29r 3203\nb25kYXk= 3204\nIFVw 3205\nIHNleHVhbA== 3206\nIHRob3Vz 3207\nIFBhdA== 3208\nIGVzcw== 3209\nIHN0YW5kYXJk 3210\nIGFybQ== 3211\nZ2Vz 3212\nZWN0aW9u 3213\nIGZlbGw= 3214\nIGZvcmVpZ24= 3215\nYW5p 3216\nIEZyaWRheQ== 3217\nIHJlZ3VsYXI= 3218\naW5hcnk= 3219\nIGluY3JlYXNlZA== 3220\nIHVzdWFsbHk= 3221\nIGRlbW9u 3222\nIGRhcms= 3223\nIGFkZGl0aW9uYWw= 3224\ncm9s 3225\nIE9m 3226\nIHByb2R1Y3Rpb24= 3227\nISE= 3228\ndW5kcmVk 3229\nIGludGVybmF0aW9uYWw= 3230\naWRlbnRz 3231\nIEZyZWU= 3232\ncm91cA== 3233\nIHJhY2U= 3234\nIG1hY2g= 3235\nIGh1Z2U= 3236\nQWxs 3237\nbGVhcg== 3238\nb3ZlbWJlcg== 3239\nIHRvd24= 3240\nIGF0dGVudGlvbg== 3241\nIE9mZg== 3242\neW9uZA== 3243\nIFRoZW4= 3244\nZmllbGQ= 3245\nIHRlcnJvcg== 3246\ncmF6 3247\nIEJv 3248\nIG1lZXRpbmc= 3249\nIFBhcms= 3250\nIGFycmVzdA== 3251\nIGZlYXI= 3252\nIGF3 3253\nIFZhbA== 3254\nb3Jpbmc= 3255\nJyw= 3256\nIGV4dHJlbWU= 3257\nYXJy 3258\nIHdvcmtlcnM= 3259\nQWZ0ZXI= 3260\nIDMx 3261\nbmV0 3262\nYW1lbnQ= 3263\nIGRpcmVjdGx5 3264\nIHBvcHVsYXRpb24= 3265\ndWJl 3266\nIE9jdG9iZXI= 3267\nIElO 3268\nIEphbnVhcnk= 3269\nNTk= 3270\nIERhdmlk 3271\nIGNyb3Nz 3272\nY2VtYmVy 3273\nIEZpcnN0 3274\nIG1lc3NhZ2U= 3275\naXJpdA== 3276\nIG5hdGlvbg== 3277\nIHBvbGw= 3278\naXNpb25z 3279\nIGFuc3dlcg== 3280\nbnk= 3281\naXNvZGU= 3282\nIGNhcnJ5 3283\nIFJ1c3NpYQ== 3284\nIGhlYXI= 3285\nZW5ndGg= 3286\ncm95 3287\nIG5hdHVyYWw= 3288\naW5hbGx5 3289\nIGRvZw== 3290\nbWl0dGVk 3291\nIHRyYWRl 3292\nIHN1YnN0 3293\nIG11bHRpcGxl 3294\nIEFmcmlj 3295\nIGZhbnM= 3296\nIHNvcnQ= 3297\nIGdsb2JhbA== 3298\naWNhdGlvbg== 3299\nIFdlZA== 3300\nYXJh 3301\nIGFjaGll 3302\nIGxhbmd1YWdl 3303\ndmV5 3304\nIHRhbA== 3305\nIG5lY2Vzc2FyeQ== 3306\nIGRldGFpbHM= 3307\nIHNlbg== 3308\nIFN1bmQ= 3309\nIFJlZw== 3310\nIFJlYw== 3311\nMDY= 3312\nIHNpbA== 3313\ncmVzc2l2ZQ== 3314\nIG1lZGljYWw= 3315\ndW5jaA== 3316\nb3JuaWE= 3317\nIHVuZA== 3318\nZm9ydA== 3319\nb2Nrcw== 3320\nIE1vbmRheQ== 3321\ndWVzZGF5 3322\nY3JhZnQ= 3323\nNzc= 3324\ndXJ0 3325\nIHZlcg== 3326\nIEhpbGw= 3327\nIHJlY2VpdmU= 3328\nIG1vcm5pbmc= 3329\nZXN0ZXJu 3330\nIGJhbms= 3331\nIHNhdA== 3332\naXJ0aA== 3333\nIEhpZ2g= 3334\nIGRldmljZQ== 3335\nIFRIRQ== 3336\nIENlbnRlcg== 3337\nIHNhZmU= 3338\nIHBsZQ== 3339\nIENhbmFkYQ== 3340\nIHN5c3RlbXM= 3341\nIGFzc2lzdA== 3342\nIHN1cnY= 3343\nIGJhdHRsZQ== 3344\nIFNvYw== 3345\ndmVydGlz 3346\nU2hl 3347\nIHBhcGVy 3348\nIGdyb3d0aA== 3349\nIGNhc3Q= 3350\nU2M= 3351\nIHBsYW5z 3352\nbGxlZA== 3353\nIHBhcnRz 3354\nIHdhbGw= 3355\nIG1vdmVtZW50 3356\nIHByYWN0aWNl 3357\naW1hdGVseQ== 3358\nIGRpc3BsYXk= 3359\nIHNvbWV0aW1lcw== 3360\nb21w 3361\nIFBhdWw= 3362\nIFllcw== 3363\na2luZw== 3364\nNTg= 3365\nb2x5 3366\nIHNvbg== 3367\nIGF2b2lk 3368\nb2tlcw== 3369\nIEpldw== 3370\nIHRvd2FyZHM= 3371\nYXNj 3372\nIC8v 3373\nIEtvcmU= 3374\nIHRhbGtpbmc= 3375\nIGNvcnJlY3Q= 3376\nIHNwZW50 3377\naWNrcw== 3378\naWFibGU= 3379\nZWFyZWQ= 3380\nIHRlcm0= 3381\nIHdhbnRz 3382\nb21pbmc= 3383\nIHV0 3384\nIGRvdWI= 3385\nIGZvcmNlcw== 3386\nIHBsZWFzZQ== 3387\nNjk= 3388\nIE5vdmVtYmVy 3389\nYXRmb3Jt 3390\nb25kb24= 3391\nIG9uZXM= 3392\nIGltbWVkaWF0ZWx5 3393\nIFJ1c3NpYW4= 3394\nIE1ldA== 3395\nIGRlZw== 3396\nIHBhcmVudHM= 3397\nQ0g= 3398\nIEFtZXJpY2Fucw== 3399\nYWx5 3400\nIE1vZA== 3401\nIHNob3du 3402\nIGNvbmRpdGlvbnM= 3403\nIHN0dWZm 3404\nIHJlYg== 3405\nIFlvdXI= 3406\nIGluY2x1ZGVz 3407\nbm93bg== 3408\nIFNhbQ== 3409\nIGV4cGVyaWVu 3410\nbWlzc2lvbg== 3411\nIEV2ZW4= 3412\nYXVnaHQ= 3413\nIGFubm91bmNlZA== 3414\nIFJlcHVibGljYW4= 3415\nIGRldGVybWlu 3416\nIGRlc2NyaWJlZA== 3417\nIENvdW50eQ== 3418\nKCk= 3419\nIGRvb3I= 3420\nIGNoYW5nZWQ= 3421\nIG5laWdo 3422\nIEhlcmU= 3423\nIGNsZWFu 3424\nIHBhbg== 3425\nIERlY2VtYmVy 3426\nIEV1cm9wZWFu 3427\naXJpbmc= 3428\nYXB0ZXI= 3429\nIGNsdWI= 3430\nIFR1ZXNkYXk= 3431\nIHBhaWQ= 3432\nIE5ldA== 3433\nIGF0dGFja3M= 3434\nIGNoYXJhY3RlcnM= 3435\nIGFsb25l 3436\nIGRpcmVjdG9y 3437\nZG9t 3438\nIDM1 3439\nIGxvYWQ= 3440\nIHJvdXQ= 3441\nIENhbGlmb3JuaWE= 3442\nIGZpbmFsbHk= 3443\nIHJhYw== 3444\nIGNvbnRy 3445\nIGV4YWN0bHk= 3446\ncmVzaA== 3447\ncHJp 3448\nIElzbGFt 3449\nIG5hdHVyZQ== 3450\nIGNhcmVlcg== 3451\nIGxhdGVzdA== 3452\nIGNvbnZlcnM= 3453\nIFNs 3454\ncG9zZQ== 3455\nY2llbnQ= 3456\nIEluYw== 3457\naXZpdHk= 3458\nODg= 3459\nIEF0dA== 3460\nIE1vcg== 3461\nbmVzZGF5 3462\nIHdlaWdodA== 3463\na2Vu 3464\nIG5vdGU= 3465\nIHRlYW1z 3466\nIFw= 3467\nYWlycw== 3468\nIEdyZWVu 3469\nIGh1bmRyZWQ= 3470\nb25lbnQ= 3471\nIHN0cmVuZw== 3472\nIGNvbnNpc3Q= 3473\naWNhdGVk 3474\nIHJlZ3Vs 3475\nIGxpYw== 3476\nYXN0aWM= 3477\nIHRlbg== 3478\ndXJzZGF5 3479\nZWxsaWdlbmNl 3480\nb3VzbHk= 3481\nIFVL 3482\nQkk= 3483\nIGNvc3Rz 3484\nIGluZGVwZW5k 3485\nIEFQ 3486\nIG5vcm1hbA== 3487\nIGhvbQ== 3488\nIG9idmlvdXM= 3489\nIHN3ZQ== 3490\nIHN0YXI= 3491\nIHJlYWR5 3492\nYWNoZXI= 3493\nIGltcGxlbWVudA== 3494\nZ2VzdA== 3495\nIHNvbmc= 3496\nIEdldA== 3497\nIExhYg== 3498\nIGludGVyZXN0aW5n 3499\ndXNpbmc= 3500\nIGdpdmluZw== 3501\nIFN1bmRheQ== 3502\nIGV0Yw== 3503\nIG1pZGRsZQ== 3504\nIHJlbWVtYmVy 3505\ncmlnaHQ= 3506\nb3NpdGlvbg== 3507\ndXRpb25z 3508\nIG1heA== 3509\nNDY= 3510\nIHlvdXJzZWxm 3511\nIGRlbWFuZA== 3512\nIHRyZWF0bWVudA== 3513\nIGRhbmdlcg== 3514\nIENvbnM= 3515\nIGd1eQ== 3516\nIEJyaXRpc2g= 3517\nIHBoeXNpY2Fs 3518\nIHJlbGF0ZWQ= 3519\nIHJlbWFpbg== 3520\nIGNvdWxkbg== 3521\nIHJlZmVy 3522\nIGNpdGl6 3523\nYm94 3524\nRU5U 3525\nYm9hcmQ= 3526\nIGlubg== 3527\nSUc= 3528\nZXJv 3529\nIFN0cmVldA== 3530\nb3NwaXRhbA== 3531\ncmVuY2g= 3532\nY2hlcnM= 3533\nIHN0cmE= 3534\nT0w= 3535\nYWdlcg== 3536\nIEFO 3537\nIGVhc2lseQ== 3538\nSUE= 3539\nZW5nZQ== 3540\naW55 3541\nIGNsb3M= 3542\nb2NrZWQ= 3543\nIHVzZXM= 3544\nIENvdW4= 3545\nSW0= 3546\ndWlsZA== 3547\nPz8= 3548\nbW9yZQ== 3549\nIGFuZw== 3550\nIHdyaXRl 3551\nb2x1dGU= 3552\nNTc= 3553\nIGxlYWRlcg== 3554\nIHJlYWRpbmc= 3555\nPC8= 3556\nIGF1dG9t 3557\nZXN0cw== 3558\nNDM= 3559\nIGxlZ2lzbA== 3560\nIEdvbGQ= 3561\nIGRlc2lnbmVk 3562\nIFNU 3563\nIExlZw== 3564\nYXJlcw== 3565\nIGJlYXV0 3566\nIFRleA== 3567\nIGFwcGVhcnM= 3568\nIHN0cnVnZw== 3569\nIFJvbQ== 3570\nIDAw 3571\nIGNob2ljZQ== 3572\nIHBhcnRpY3VsYXJseQ== 3573\nIEZyb20= 3574\nb3Blcg== 3575\nIExvbmRvbg== 3576\nYW5uZWQ= 3577\nIGFsbG93cw== 3578\nb2JpbGU= 3579\nIGRpZmZlcmVuY2U= 3580\n4oCi 3581\nIFZpZXc= 3582\nIFdlZG5lc2RheQ== 3583\nIGFsdGhvdWdo 3584\nIHJlbGF0aXZl 3585\nIGFwcGxpY2F0aW9u 3586\nYXRldmVy 3587\nIGFyZW4= 3588\nIG15c2VsZg== 3589\nIGltYWc= 3590\nIGRpc2U= 3591\nIHNvY2lldHk= 3592\nIGZyZXF1 3593\nIEVuZ2xpc2g= 3594\nIHBvb3I= 3595\nIERheQ== 3596\nIHdyaXRpbmc= 3597\nIHNldmVu 3598\nIHN0YXJ0aW5n 3599\nIGJ1ZA== 3600\nIHByaW50 3601\nIFRyYW5z 3602\ndWZhY3Q= 3603\nIFN0dWQ= 3604\nbmV3 3605\nIGNyaW0= 3606\nIGdpdmVz 3607\nIGNvb2w= 3608\nYWU= 3609\naWFuY2U= 3610\nIEdlbmVyYWw= 3611\nIHRoaW5raW5n 3612\nIHNhdmU= 3613\nIGxpbWl0ZWQ= 3614\nIFBhcnR5 3615\nIG1lYW5pbmc= 3616\ncGVu 3617\nb3dlcnM= 3618\nIEphY2s= 3619\nRU0= 3620\nIG5pY2U= 3621\ncnVwdA== 3622\nIGdhcw== 3623\nIGVpZ2h0 3624\nIGZlZXQ= 3625\nIGVmZm9ydA== 3626\nIGlnbg== 3627\naWNpdA== 3628\nQmw= 3629\nY29pbg== 3630\nIG9waW4= 3631\nIGJyYWlu 3632\nV2hpbGU= 3633\naGVzdA== 3634\nIFRodXJzZGF5 3635\nIHdvdWxkbg== 3636\nYXVnaHRlcg== 3637\nIHRvdWNo 3638\nbGVtZW50cw== 3639\nIHN0dWRpZXM= 3640\nIGNlbnRlcg== 3641\nY29udA== 3642\nb3JnZQ== 3643\nIGNvbXB1dGVy 3644\nIGludmVzdGlnYXRpb24= 3645\nUGw= 3646\nb3Jrcw== 3647\nIDIwMDg= 3648\nIGluY3JlYXNpbmc= 3649\nIHN0b3Jl 3650\nIGNvbW1lbnRz 3651\nIGJhbA== 3652\nbWVu 3653\nIGRvbGw= 3654\nIGxpYmVy 3655\nIHdpZmU= 3656\nIGxhd3M= 3657\nYXR1cmRheQ== 3658\naXRuZXNz 3659\nIG1vZGVybg== 3660\nIFNr 3661\nIGFkbWluaXN0cmF0aW9u 3662\nIG9wcG9ydHVuaXR5 3663\nIHNhbA== 3664\nIHBvd2VyZnVs 3665\nTXk= 3666\nIGNsYWltcw== 3667\nIEVhcnRo 3668\nb3Jkcw== 3669\nIHRpdGxl 3670\nIGVzYw== 3671\nbmFtZQ== 3672\nTm90 3673\nb21lbg== 3674\nIGJleW9uZA== 3675\nIGNhbWVy 3676\nIHNlbGw= 3677\naXR1dGU= 3678\nZWFyY2g= 3679\nIGFwcGw= 3680\naW1lbnQ= 3681\nNDI= 3682\nIEFydA== 3683\nIHVuZg== 3684\nIHZpb2xlbmNl 3685\ndXJn 3686\nIEVhc3Q= 3687\nIGNvbXBhcmVk 3688\nIG9wdGlvbnM= 3689\nIHRocm91Z2hvdXQ= 3690\nIHZz 3691\naWdy 3692\nLls= 3693\nYWNoZXM= 3694\nNzg= 3695\nIGZpbGVz 3696\nRkw= 3697\nRUw= 3698\nYXJpYW4= 3699\nIEphbWVz 3700\nIEFpcg== 3701\nYW5jaA== 3702\nIGRldGFpbA== 3703\nIHBpZWNl 3704\nUFM= 3705\nIG5hbWVk 3706\nIGVkdWNhdGlvbg== 3707\nIGRyaXZl 3708\nIGl0ZW1z 3709\nIHN0dWRlbnQ= 3710\naWNlZA== 3711\nOjo= 3712\naWNv 3713\nIHRocm93 3714\nIHNjZW5l 3715\nIGNvbXBsZXg= 3716\nIDIwMDk= 3717\nIHByZWM= 3718\nIEJyZQ== 3719\nNzk= 3720\nIGNvbmNlcHQ= 3721\nIHN0YXR1cw== 3722\nYW1pbmc= 3723\nIGRpZWQ= 3724\nIGtub3dsZWRnZQ== 3725\nIGJlZ2lubmluZw== 3726\nT0Q= 3727\ncnVhcnk= 3728\nIGNlcnRhaW5seQ== 3729\nIGd1eXM= 3730\nIHNsaWdodA== 3731\naW5u 3732\nb3VuZHM= 3733\nIGZpbmU= 3734\nIGZhdA== 3735\naWNhdGlvbnM= 3736\nIHBlcmhhcHM= 3737\nIEFudA== 3738\nIGluY29tZQ== 3739\nIGh0dHBz 3740\nIG1ham9yaXR5 3741\ncG9ydHM= 3742\nc3Rvbg== 3743\nIGdyZWF0ZXI= 3744\nIGZlZWQ= 3745\nZW50aWFsbHk= 3746\nIHNhZmV0eQ== 3747\nIHVuaXF1ZQ== 3748\nYW5kb20= 3749\nIGdvbmU= 3750\nIHNob3dlZA== 3751\nIGhpc3Rvcg== 3752\nIGNvdW50ZXI= 3753\naXVz 3754\naWRh 3755\nIGxlYWRpbmc= 3756\naXBl 3757\nIHNlbmQ= 3758\nIERvbmFsZA== 3759\nZXJ2ZQ== 3760\nIGRlZmVuc2U= 3761\naW5lc2U= 3762\nIHllcw== 3763\nIEZpcmU= 3764\nIE11c2xpbQ== 3765\ncmFx 3766\nIGNvbnRpbnVlZA== 3767\nb3No 3768\nIHByb3ZpZGVz 3769\nIHByaXNvbg== 3770\nIFByZQ== 3771\nIGhhcHB5 3772\nIGVjb25vbXk= 3773\nIHRydXN0 3774\nYWdz 3775\nIEdhbWU= 3776\nIHdlYXBvbnM= 3777\ndW1hbg== 3778\nIENsZQ== 3779\naXRhdGlvbg== 3780\nIGFuYWx5c2lz 3781\nIFRpbWVz 3782\nIHNjaWVuY2U= 3783\nLT4= 3784\nIGZpZ3VyZQ== 3785\nIGRpc2FwcA== 3786\nZW50eQ== 3787\nIHNvZnR3YXJl 3788\nIHVsdA== 3789\nIG9mZmljZXJz 3790\nTmV3 3791\nSXM= 3792\nIHJlbWFpbnM= 3793\nIEluZGlh 3794\nIHBzeWNo 3795\ncmllZg== 3796\nIGNhdA== 3797\nZXNj 3798\nIG9ic2Vydg== 3799\nIHN0YWdl 3800\nIERhcms= 3801\nIGVudGVy 3802\nY2hhbmdl 3803\nIHBhc3NlZA== 3804\nIGRlc3BpdGU= 3805\nIE91dA== 3806\nIG1vdmll 3807\ncnM= 3808\nIHZvaWNl 3809\nbWluZQ== 3810\nIFBsYXk= 3811\nIHRvd2FyZA== 3812\nIFRlcg== 3813\nIHJlZ2lvbg== 3814\nIHZhbHVlcw== 3815\nb3J0ZXJz 3816\nIG1vdW50 3817\nIG9mZmljZXI= 3818\nIE90aGVy 3819\nYmFu 3820\nIGhvdXM= 3821\nd29vZA== 3822\ncm9vbQ== 3823\nSVY= 3824\nIFN1bg== 3825\nc2Vl 3826\nIE92ZXI= 3827\ncm9n 3828\nOTA= 3829\nIGxheQ== 3830\nIFR1cg== 3831\nYXdu 3832\nIHByZXNzdXJl 3833\nIFN1Yg== 3834\nIGJvb2tz 3835\nZWRvbQ== 3836\nIFNhbmQ= 3837\nQUE= 3838\nYWdv 3839\nIHJlYXNvbnM= 3840\nZm9yZA== 3841\nIGFjdGl2aXR5 3842\nVVQ= 3843\nTm93 3844\nIFNlbmF0ZQ== 3845\nY2VsbA== 3846\nbmlnaHQ= 3847\nIGNhbGxz 3848\naW50ZXI= 3849\nIGxldHRlcg== 3850\nIFJvYg== 3851\nIEpl 3852\nIGNob29zZQ== 3853\nIExhdw== 3854\nR2V0 3855\nQmU= 3856\nIHJvYg== 3857\nIHR5cGVz 3858\nIHBsYXRmb3Jt 3859\nIHF1YXJ0ZXI= 3860\nUkE= 3861\nIFRpbWU= 3862\nIG1heWJl 3863\nIENy 3864\nOTU= 3865\ncHJl 3866\nIG1vdmluZw== 3867\nIGxpZg== 3868\nIGdvbGQ= 3869\nIHNvbQ== 3870\nIHBhdGllbnRz 3871\nIHRydXRo 3872\nIEtl 3873\ndXJhbmNl 3874\nYW50bHk= 3875\nbWFy 3876\nIGNoYXJnZQ== 3877\nIEdyZWF0 3878\nIGNlbGU= 3879\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 3880\nIHJvY2s= 3881\ncm9pZA== 3882\nYW5jeQ== 3883\nIGNyZWRpdA== 3884\nYXVk 3885\nQnk= 3886\nIEV2ZXJ5 3887\nIG1vdmVk 3888\naW5nZXI= 3889\ncmlidXRpb24= 3890\nIG5hbWVz 3891\nIHN0cmFpZ2h0 3892\nIEhlYWx0aA== 3893\nIFdlbGw= 3894\nIGZlYXR1cmU= 3895\nIHJ1bGU= 3896\nIHNjaGU= 3897\naW5hdGVk 3898\nIE1pY2hhZWw= 3899\nYmVyZw== 3900\nNDE= 3901\naWxlZA== 3902\nYmFuZA== 3903\nIGNsaWNr 3904\nIEFuZ2Vs 3905\nb25lbnRz 3906\nwq0= 3907\nIElyYXE= 3908\nIFNhdHVyZGF5 3909\nIGF3YXJl 3910\ncGFydA== 3911\nIHBhdHRlcm4= 3912\nT1c= 3913\nIExldA== 3914\nIGdyYWQ= 3915\naWduZWQ= 3916\nIGFzc29jaWF0ZWQ= 3917\nIHN0eWxl 3918\nbm8= 3919\naWF0aW9u 3920\nYWl0aA== 3921\naWxpZXM= 3922\nIHN0b3JpZXM= 3923\ndXJhdGlvbg== 3924\nIGluZGl2aWR1YWxz 3925\nIOKApg== 3926\nbWlzcw== 3927\nIEFzc29jaQ== 3928\naXNoaW5n 3929\nYWJ5 3930\nIHN1bW1lcg== 3931\nIEJlbg== 3932\nIDMy 3933\nIGFyY2g= 3934\ndXR5 3935\nIFRleGFz 3936\naG9s 3937\nIGZ1bGx5 3938\nIG1pbGw= 3939\nIGZvbGxvd2Vk 3940\nIEJpbGw= 3941\nIEluZGlhbg== 3942\nIFNlY3JldA== 3943\nIEJlbA== 3944\nIEZlYnJ1YXJ5 3945\nIGpvYnM= 3946\nIHNlZW1lZA== 3947\nIEdvdmVybg== 3948\naXBwZWQ= 3949\nIHJlYWxpdHk= 3950\nIGxpbmVz 3951\nIHBhcms= 3952\nIG1lYXN1cmU= 3953\nIE91cg== 3954\nSU0= 3955\nIGJyb3RoZXI= 3956\nIGdyb3dpbmc= 3957\nIGJhbg== 3958\nIGVzdGlt 3959\nIGNyeQ== 3960\nIFNjaG9vbA== 3961\nIG1lY2hhbg== 3962\nIE9G 3963\nIFdpbmRvd3M= 3964\nIHJhdGVz 3965\nIE9o 3966\nIHBvc2l0aXZl 3967\nIGN1bHR1cmU= 3968\naXN0aWNz 3969\naWNh 3970\nIGhhcg== 3971\neWE= 3972\naXRlbHk= 3973\naXBw 3974\nIG1hcA== 3975\nZW5jaWVz 3976\nIFdpbGxpYW0= 3977\nSUk= 3978\nYWtlcnM= 3979\nNTY= 3980\nIE1hcnQ= 3981\nIFJlbQ== 3982\nIGFsdGVybg== 3983\naXR1ZGU= 3984\nIGNvYWNo 3985\ncm93ZA== 3986\nRG9u 3987\nIGtpZHM= 3988\nIGpvdXJuYWw= 3989\nIGNvcnBvcg== 3990\nIGZhbHNl 3991\nIHdlYg== 3992\nIHNsZWVw 3993\nIGNvbnRhaW4= 3994\nIHN0bw== 3995\nIGJlZA== 3996\naXZlcnNl 3997\nIFJpY2g= 3998\nIENoaW5lc2U= 3999\nIHB1bg== 4000\nIG1lYW50 4001\na25vd24= 4002\nIG5vdGljZQ== 4003\nIGZhdm9yaXRl 4004\nYXZlbg== 4005\nIGNvbmRpdGlvbg== 4006\nIHB1cnBvc2U= 4007\nKSk= 4008\nIG9yZ2FuaXphdGlvbg== 4009\nIGNoYWxsZW5n 4010\nIG1hbnVmYWN0 4011\nIHN1c3A= 4012\nIEFj 4013\nIGNyaXRpYw== 4014\ndW5lcw== 4015\ndWNsZWFy 4016\nIG1lcg== 4017\ndmVudGlvbg== 4018\nIDgw 4019\nIG1pc3Q= 4020\nIFVz 4021\nIFRvcg== 4022\naHR0cA== 4023\nb2xm 4024\nIGxhcmdlcg== 4025\nIGFkdmFudA== 4026\nIHJlc2Vhcg== 4027\nIGFjdGlvbnM= 4028\nbWw= 4029\nIGtlcHQ= 4030\nIGFpbQ== 4031\nLCc= 4032\nY29s 4033\nIGJlbmVmaXRz 4034\naWZ5aW5n 4035\nIGFjdHVhbA== 4036\nIEludGVybmF0aW9uYWw= 4037\nIHZlaGljbGU= 4038\nIGNoaWVm 4039\nIGVmZm9ydHM= 4040\nIExlYWd1ZQ== 4041\nIE1vc3Q= 4042\nIHdhaXQ= 4043\nIGFkdWx0 4044\nIG92ZXJhbGw= 4045\nIHNwZWVjaA== 4046\nIGhpZ2hseQ== 4047\nIGZlbWFsZQ== 4048\nIGVycm9y 4049\nIGVmZmVjdGl2ZQ== 4050\nNTQ= 4051\nIGVuY291cg== 4052\nd2VsbA== 4053\nIGZhaWxlZA== 4054\nIGNvbnNlcnY= 4055\nIHByb2dyYW1z 4056\nIHRyb3U= 4057\nIGFoZWFk 4058\nNTAw 4059\ndmVydGlzZW1lbnQ= 4060\nSVA= 4061\nIEZvdW5k 4062\ncGly 4063\nICU= 4064\nIGNyaW1l 4065\nYW5kZXI= 4066\nIGxvY2F0aW9u 4067\nIElyYW4= 4068\nIGJlaGF2aW9y 4069\nYXppbmc= 4070\nIHJhcmU= 4071\nIGVtYg== 4072\nIGNhdXNlZA== 4073\nIHNoaXA= 4074\nIGFjdGl2ZQ== 4075\nIGNvbnRyaWJ1dA== 4076\nIGdyZWVu 4077\nIGFjcXU= 4078\nIHJlZmxlY3Q= 4079\ndmVudWU= 4080\nIGZpcm0= 4081\nIGJpcnRo 4082\nXS4= 4083\nIGNsZWFybHk= 4084\nIGVtb3Q= 4085\nIGFnZW5jeQ== 4086\ncmlhZ2U= 4087\nIG1lbW9yeQ== 4088\nOTg= 4089\nU0E= 4090\nIFNlZQ== 4091\nYWNpbmc= 4092\nQ0M= 4093\nIGJpZ2dlc3Q= 4094\nIHJhcA== 4095\nIGJhc2lj 4096\nIGJhbmQ= 4097\nZWF0 4098\nIHN1c3BlY3Q= 4099\nIE1hYw== 4100\nIDkw 4101\nbWFyaw== 4102\naXN0YW4= 4103\nIHNwcmVhZA== 4104\nYW1z 4105\na2k= 4106\nYXN5 4107\ncmF2 4108\nIFJvYmVy 4109\nIGRlbW9uc3Ry 4110\ncmF0ZWQ= 4111\nIGFic29sdXRl 4112\nIHBsYWNlcw== 4113\nIGltcGw= 4114\naWJyYXJ5 4115\nIGNhcmRz 4116\nIGRlc3Ryb3k= 4117\nIHZpcnQ= 4118\ndmVyZQ== 4119\nIGFwcGVhcmVk 4120\neWFu 4121\ncG9pbnQ= 4122\nIGJlZw== 4123\nIHRlbXBlcg== 4124\nc3Bl 4125\nYW50ZWQ= 4126\nZWFycw== 4127\nIERpcmVjdA== 4128\nIGxlbmd0aA== 4129\nIGJsb2c= 4130\nYW1i 4131\nIGludGVn 4132\nIHJlc291cmNlcw== 4133\nYWNj 4134\naWZ1bA== 4135\nIHNwb3Q= 4136\nIGZvcmNlZA== 4137\nIHRob3VzYW5kcw== 4138\nIE1pbmlzdGVy 4139\nIHF1YWw= 4140\nIEZyZW5jaA== 4141\nYXRpY2FsbHk= 4142\nIGdlbmVyYWxseQ== 4143\nIGRyaW5r 4144\nIHRodXM= 4145\nSUw= 4146\nb2Rlcw== 4147\nIGFwcHJvcHJp 4148\nIFJlYWQ= 4149\nIHdob20= 4150\nIGV5ZQ== 4151\nIGNvbGxlZ2U= 4152\nIDQ1 4153\naXJlY3Rpb24= 4154\nIGVuc3VyZQ== 4155\nIGFwcGFyZW50 4156\naWRlcnM= 4157\nIHJlbGlnaW91cw== 4158\nIG1pbm9y 4159\nb2xpYw== 4160\nIHRybw== 4161\nIFdoeQ== 4162\ncmlidXRl 4163\nbWV0 4164\nIHByaW1hcnk= 4165\nIGRldmVsb3BlZA== 4166\nIHBlYWNl 4167\nIHNraW4= 4168\nc3Rl 4169\nYXZh 4170\nIGJsdWU= 4171\nIGZhbWlsaWVz 4172\nIGly 4173\nIGFwcGx5 4174\nIGluZm9ybQ== 4175\nIFNtaXRo 4176\nQ1Q= 4177\naWk= 4178\nIGxpbWl0 4179\nIHJlc2lzdA== 4180\nLi4uLi4uLi4uLi4uLi4uLg== 4181\ndW1u 4182\nIGNvbmZsaWM= 4183\nIHR3ZQ== 4184\ndWRk 4185\nIFRvbQ== 4186\nIGxpdGVy 4187\ncXVl 4188\nYm9u 4189\nIGhhaXI= 4190\nIGV2ZW50dWFsbHk= 4191\nIHB1cw== 4192\nIGhlbHBlZA== 4193\nIGFnZw== 4194\nb3JuZXk= 4195\nIEFwcGxl 4196\nIGZpdA== 4197\nIFN1cg== 4198\nIHByZW0= 4199\nIHNhbGVz 4200\nIHNlY29uZHM= 4201\nIHN0cmVuZ3Ro 4202\nIGZlZWxpbmc= 4203\nv70= 4204\nIHRvdXI= 4205\nIGtub3dz 4206\nb29t 4207\nIGV4ZXJj 4208\nIHNvbWV3 4209\n77+9 4210\nPj4= 4211\nIHNwb2tlcw== 4212\nIGlkZWFz 4213\nIHJlZ2lzdA== 4214\nc29mdA== 4215\nIERlbA== 4216\nIFBD 4217\nIHByb3Bvcw== 4218\nIGxhdW5jaA== 4219\nIGJvdHRvbQ== 4220\nVEg= 4221\nIFBsZWFzZQ== 4222\ndmVzdA== 4223\naXR6 4224\nIEludGVy 4225\nIHNjcmlwdA== 4226\nIHJhdA== 4227\nYXJuaW5n 4228\nIGls 4229\nIEplcg== 4230\nIEFyZQ== 4231\nIHdoYXRldmVy 4232\nb2tlbg== 4233\nY2llbmNl 4234\nIG1vZGU= 4235\nIGFncmVl 4236\nIHNvdXJjZXM= 4237\nIGluaXRpYWw= 4238\nIHJlc3RyaWN0 4239\nIHdvbmRlcg== 4240\ndXNpb24= 4241\nIyMjIw== 4242\nIFNpbA== 4243\ndmlsbGU= 4244\nIGJ1cm4= 4245\ndHc= 4246\nYXNpb24= 4247\nIMKj 4248\nIG5vcg== 4249\ndWluZw== 4250\nIHJlYWNoZWQ= 4251\nIHN1bg== 4252\nIGNhdGVn 4253\naWdyYXRpb24= 4254\nIGNvb2s= 4255\nIHByb21vdA== 4256\nIG1hbGU= 4257\nIGNsaW1hdGU= 4258\nIGZpeA== 4259\nIGFsbGVnZWQ= 4260\nVVI= 4261\nYWxsZWQ= 4262\nIGltYWdlcw== 4263\nQ29udA== 4264\nb3Rh 4265\nIHNjaG9vbHM= 4266\naW9z 4267\nIGRyb3A= 4268\nIHN0cmVhbQ== 4269\nIE1v 4270\nIHByZXZpb3VzbHk= 4271\nYWxpbmc= 4272\nIHBldA== 4273\nIGRvdWJsZQ== 4274\nIChA 4275\nYW5uZWw= 4276\nIGRlZmF1bHQ= 4277\ndGllcw== 4278\nIHJhbms= 4279\nIERlYw== 4280\nIENvdW5jaWw= 4281\nIHdlYXBvbg== 4282\nIHN0b2Nr 4283\nIGFuYWx5 4284\nIFN0cg== 4285\nIHBpY3R1cmU= 4286\nIFBvbGljZQ== 4287\nZmVyZW5jZQ== 4288\nIGNlbnR1cnk= 4289\nIGNpdGl6ZW5z 4290\nIG9udG8= 4291\nIGV4cGFuZA== 4292\nIGhlcm8= 4293\nIFNvbA== 4294\nIHdpbGQ= 4295\nIHVwZGF0ZQ== 4296\nIGN1c3RvbWVycw== 4297\ncm9udA== 4298\nZGVm 4299\nIGxpaw== 4300\nIGNyaW1pbmFs 4301\nIENocmlzdGlhbg== 4302\nU1A= 4303\nNzY= 4304\nIGxlYXZpbmc= 4305\nIG90aGVyd2lzZQ== 4306\nIERpc3Q= 4307\nIGJhc2lz 4308\nNTI= 4309\nNTM= 4310\naWNpcA== 4311\nIEJlcg== 4312\nIHJlY29tbWVuZA== 4313\nIGZsb29y 4314\nIGNyb3dk 4315\nb2xlcw== 4316\nIDcw 4317\nIGNlbnRyYWw= 4318\nIEV2 4319\nIGRyZWFt 4320\nIGRvd25sb2Fk 4321\nIGNvbmZpcg== 4322\nIFRob20= 4323\nIHdpbmRvdw== 4324\nIGhhcHBlbnM= 4325\nIHVuaXQ= 4326\nIHRlbmQ= 4327\nIHNwbA== 4328\nIGJlY29tZXM= 4329\nIGZpZ2h0aW5n 4330\nIHByZWRpY3Q= 4331\nIFByZXNz 4332\nIFBvd2Vy 4333\nIGhlYXZ5 4334\nYWtlZA== 4335\nIGZhbg== 4336\nb3J0ZXI= 4337\nYXRlZ3k= 4338\nQkE= 4339\naXplcw== 4340\nIHNwZW5k 4341\nSGVyZQ== 4342\nIDIwMDc= 4343\nIGFkb3A= 4344\nIEhhbQ== 4345\nIGZvb3RiYWxs 4346\nIFBvcnQ= 4347\nb2RheQ== 4348\nNTE= 4349\nYW1waW9ucw== 4350\nIHRyYW5zZmVy 4351\naHQ= 4352\nIDM4 4353\ndGVybQ== 4354\nYWNpdHk= 4355\nIGJ1cg== 4356\nXSw= 4357\ndGVybmFs 4358\ncmln 4359\nYnV0 4360\nIHRoZXJlZm9yZQ== 4361\nIEJlY2F1c2U= 4362\ncmVzcA== 4363\ncmV5 4364\nIG1pc3Npb24= 4365\nU29tZQ== 4366\nIG5vdGVk 4367\nIGFzc3Vt 4368\nIGRpc2Vhc2U= 4369\nIGVkaXQ= 4370\nIHByb2dyZXNz 4371\ncmQ= 4372\nIEJyb3du 4373\nb2NhbA== 4374\nIGFkZGluZw== 4375\nIHJhaXNlZA== 4376\nIEFueQ== 4377\nIHRpY2s= 4378\nIHNlZWluZw== 4379\nIFBlb3BsZQ== 4380\nIGFncmVlbWVudA== 4381\nIHNlcnZlcg== 4382\nIHdhdA== 4383\nIGRlYmF0ZQ== 4384\nIHN1cHBvc2Vk 4385\naWxpbmc= 4386\nIGxhcmdlc3Q= 4387\nIHN1Y2Nlc3NmdWw= 4388\nIFByaQ== 4389\nIERlbW9jcmF0aWM= 4390\nIGp1bXA= 4391\nIFN5cmlh 4392\nIG93bmVycw== 4393\nIG9mZmVycw== 4394\nIHNob290aW5n 4395\nIGVmZmlj 4396\nc2V5 4397\nIGhhdmVu 4398\ndmVyc2U= 4399\ndGVyZWQ= 4400\nIExpZ2h0 4401\naW1hbA== 4402\nIEJpZw== 4403\nIGRlZmVuZA== 4404\nIGJlYXQ= 4405\nIHJlY29yZHM= 4406\nJSk= 4407\nIHNjZW4= 4408\nIGVtcGxveWVlcw== 4409\nIGRldmljZXM= 4410\naGVt 4411\nIGNvbW1lcg== 4412\nIE1leA== 4413\nIGJlbmVmaXQ= 4414\nIFByb2Y= 4415\nIGlsbGVn 4416\nIHN1cmZhY2U= 4417\nIEFsc28= 4418\nIGhhcm0= 4419\naW5nbHk= 4420\nd2lkZQ== 4421\nIEFsZXg= 4422\nIHNodXQ= 4423\nIEN1cg== 4424\nIGxvc2U= 4425\ncG0= 4426\nIGNoYWxsZW5nZQ== 4427\nc2VtYg== 4428\nIHN0YXRpb24= 4429\nIGludGVsbGlnZW5jZQ== 4430\nIGFjY3Vy 4431\nIEZsb3I= 4432\nIHJlcXVpcmVz 4433\nIE1hbA== 4434\nYnVt 4435\nIGhvc3BpdGFs 4436\nIHNwaXJpdA== 4437\nIG9mZmVyZWQ= 4438\nIHByb2R1Y2U= 4439\nIENvbW11bg== 4440\nIGNyZWF0aW5n 4441\nIGNyaXM= 4442\nc3BlY3Q= 4443\nIGVuZGVk 4444\nIGRhaWx5 4445\nIHZvdGVycw== 4446\nbGFuZHM= 4447\naWFz 4448\naWg= 4449\nb25h 4450\nIHNtYXJ0 4451\nIE9mZmljZQ== 4452\nIExvcmQ= 4453\ncmlhbA== 4454\nIEludGVybmV0 4455\nIGNpcmN1bQ== 4456\nIGV4dHJlbWVseQ== 4457\nJy4= 4458\nIG9waW5pb24= 4459\nIE1pbA== 4460\nIGdhaW4= 4461\nQlM= 4462\nIEZpbg== 4463\neXA= 4464\nIHVzZWZ1bA== 4465\nIGJ1ZGdldA== 4466\nIGNvbWZvcnQ= 4467\naXNm 4468\nIGJhY2tncm91bmQ= 4469\nZWxpbmU= 4470\nIGVwaXNvZGU= 4471\nIGVuZW15 4472\nIHRyaWFs 4473\nIGVzdGFibGlzaA== 4474\nZGF0ZQ== 4475\nIENhcA== 4476\nIGNvbnRpbnVlcw== 4477\nIHNob3dpbmc= 4478\nIFVuaW9u 4479\nd2l0aA== 4480\nIHBvc3RlZA== 4481\nIFN5c3RlbQ== 4482\nIGVhdA== 4483\ncmlhbg== 4484\nIHJpc2U= 4485\nIEdlcm1hbnk= 4486\naWxz 4487\nIHNpZ25lZA== 4488\nIHZpbGw= 4489\nIGdyYW5k 4490\nbW9y 4491\nIEVuZ2xhbmQ= 4492\nIHByb2plY3Rz 4493\ndW1iZXI= 4494\nIGNvbmZlcmVuY2U= 4495\nemE= 4496\nIHJlc3BvbnNpYmxl 4497\nIEFyYWI= 4498\nIGxlYXJuZWQ= 4499\n4oCU4oCU 4500\naXBwaW5n 4501\nIEdlb3JnZQ== 4502\nT0M= 4503\nIHJldHVybmVk 4504\nIEF1c3RyYWxpYQ== 4505\nIGJyaWVm 4506\nUXU= 4507\nIGJyYW5k 4508\naWxsaW5n 4509\nYWJsZWQ= 4510\nIGhpZ2hlc3Q= 4511\nIHRyYWlu 4512\nIENvbW1pc3Npb24= 4513\nd2hpbGU= 4514\nIG5vbQ== 4515\nY2VwdGlvbg== 4516\nIG11dA== 4517\nIEJsdWU= 4518\nIGluY2lkZW50 4519\ndmFudA== 4520\nODY= 4521\nIElE 4522\nIG51Y2xlYXI= 4523\nNzQ= 4524\nIExpa2U= 4525\nIFJF 4526\nIE1pY3Jv 4527\nbGk= 4528\nbWFpbA== 4529\nIGNoYXJnZXM= 4530\nODk= 4531\nIGFkanVzdA== 4532\nYWRv 4533\nIGVhcnRo 4534\nTkE= 4535\nIHByaWNlcw== 4536\nUEE= 4537\nIGRyYWZ0 4538\nIHJ1bnM= 4539\nIGNhbmRpZGF0ZQ== 4540\nZW5zZXM= 4541\nIG1hbmFnZW1lbnQ= 4542\nIFBoaWw= 4543\nIE1pc3M= 4544\nIHRlYWNo 4545\nZ3JhbQ== 4546\nIHVuZGVyc3RhbmRpbmc= 4547\nYWl0 4548\naWNhZ28= 4549\nQWRk 4550\nIEVw 4551\nc2VjdXQ= 4552\nIHNlcGFyYXRl 4553\nIGluc3RhbmNl 4554\nIGV0aA== 4555\nIHVubGVzcw== 4556\nKioqKioqKio= 4557\nIEZvcmU= 4558\naW5hdGU= 4559\nIG9wZXJhdGlvbnM= 4560\nU3A= 4561\nIGZhaXRo 4562\nZ2Fy 4563\nIENodXJjaA== 4564\ncm9uaWM= 4565\nIGNvbmZpZw== 4566\nb3N1cmU= 4567\nIGFjdGl2aXRpZXM= 4568\nIHRyYWRpdGlvbmFs 4569\nIDM2 4570\nIGRpcmVjdGlvbg== 4571\nIG1hY2hpbmU= 4572\nIHN1cnJvdW5k 4573\nIHB1c2g= 4574\ndW5jdGlvbg== 4575\nIEVV 4576\nIGVhc2llcg== 4577\nIGFyZ3VtZW50 4578\nR0I= 4579\nIG1pY3Jv 4580\nIHNwZW5kaW5n 4581\naXphdGlvbnM= 4582\nIHRoZW9yeQ== 4583\nYWRvdw== 4584\nIGNhbGxpbmc= 4585\nIExhc3Q= 4586\nIGRlcg== 4587\nIGluZmx1ZW5jZQ== 4588\nIGNvbW1pdA== 4589\nIHBob3Rv 4590\nIHVuYw== 4591\naXN0cnk= 4592\nZ24= 4593\nYXN0ZQ== 4594\nYWNrcw== 4595\nIGRpc3A= 4596\nYWR5 4597\nZG8= 4598\nIEdvb2Q= 4599\nIGA= 4600\nIHdpc2g= 4601\nIHJldmVhbGVk 4602\nwqDCoA== 4603\nbGln 4604\nIGVuZm9yY2U= 4605\nIENvbW1pdHRlZQ== 4606\nIGNoZW0= 4607\nIG1pbGVz 4608\nIGludGVyZXN0ZWQ= 4609\nIHNvbHV0aW9u 4610\naWN5 4611\naW5jdA== 4612\nIC0+ 4613\nIERldA== 4614\nIHJlbW92ZWQ= 4615\nIGNvbXBhcg== 4616\nZWFo 4617\nIHBsYW50 4618\nIFNpbmNl 4619\nIGFjaGlldmU= 4620\nIGFkdmFudGFnZQ== 4621\nIHNsaWdodGx5 4622\nYmluZw== 4623\nIHBsYWNlZA== 4624\ndW5kZXI= 4625\nMjAxNQ== 4626\nIE1hZA== 4627\nIHRpbQ== 4628\nb3Nlcw== 4629\nIGNydQ== 4630\nIFJvY2s= 4631\nIG1vc3RseQ== 4632\nIG5lZ2F0aXZl 4633\nIHNldHRpbmc= 4634\nIHByb2R1Y2Vk 4635\nIG11cg== 4636\nIGNvbm5lY3Rpb24= 4637\nIE1lcg== 4638\nIGRyaXZlcg== 4639\nIGV4ZWN1dGl2ZQ== 4640\nIGFzc2F1bHQ= 4641\nIGJvcm4= 4642\nIFZlcg== 4643\ndGFpbmVk 4644\nIHN0cnVjdHVyZQ== 4645\nIHJlZHVjZQ== 4646\nIGRlY2FkZXM= 4647\nIGRlZA== 4648\ndWtl 4649\nIE1hbnk= 4650\naWRkZW4= 4651\nIGxlYWd1ZQ== 4652\nU2U= 4653\nIGpvaW4= 4654\nIGRpc2Nv 4655\nIGRpZQ== 4656\nY2tz 4657\nYWN0aW9ucw== 4658\nIGFzc2Vzcw== 4659\nYWdu 4660\nIGdvYWxz 4661\nb3Vycw== 4662\nSVI= 4663\nIHNlbmlvcg== 4664\naWxsZXI= 4665\nbW9k 4666\naXBtZW50 4667\nb2NvbA== 4668\ndXk= 4669\nIFF1ZQ== 4670\nIHBhcnRpZXM= 4671\naXJnaW4= 4672\nIGxlYXJuaW5n 4673\naXRhYmxl 4674\nIHN0cmVldA== 4675\nIGNhbWVyYQ== 4676\nQXBw 4677\nIHNraWxscw== 4678\nYnJl 4679\nY2lvdXM= 4680\nIGNlbGVicg== 4681\nIEZyYW5j 4682\nIGV4aXN0aW5n 4683\nIHdpbGxpbmc= 4684\nbG9y 4685\nIGlk 4686\nIFNwYWNl 4687\nIGNyaXRpY2Fs 4688\nIExh 4689\nb3J0dW5hdGVseQ== 4690\nIHNlcnZl 4691\nIGNvbGQ= 4692\nIHNwZWNpZXM= 4693\nVFM= 4694\nIGFuaW1hbHM= 4695\nIEJheQ== 4696\nIG9sZGVy 4697\nIFVuZGVy 4698\nZXN0aWM= 4699\nIFRyZQ== 4700\nIHRlYWNoZXI= 4701\nIHByZWZlcg== 4702\ndmlz 4703\nIHRocmVhZA== 4704\nIE1hdHQ= 4705\nIG1hbmFnZXI= 4706\n44O7 4707\nIHByb2Zlc3Npb25hbA== 4708\nIFZvbA== 4709\nIG5vdGVz 4710\nVGhlc2U= 4711\ndWxh 4712\nIGZyZXNo 4713\nZW50ZWQ= 4714\ndXp6 4715\nZWR5 4716\nY2x1c2lvbg== 4717\nIFJlbA== 4718\nIGRvdWJ0 4719\nRU8= 4720\nIG9wZW5lZA== 4721\nIEJpdA== 4722\nQWR2ZXJ0aXNlbWVudA== 4723\nIGd1ZXNz 4724\nIFVO 4725\nIHNlcXU= 4726\nIGV4cGxhaW4= 4727\nb3R0ZW4= 4728\nIGF0dHJhY3Q= 4729\nYWtz 4730\nIHN0cmluZw== 4731\nIGNvbnRleHQ= 4732\nb3NzaWJsZQ== 4733\nIFJlcHVibGljYW5z 4734\nIHNvbGlk 4735\nIGNpdGllcw== 4736\nIGFza2luZw== 4737\nIHJhbmRvbQ== 4738\ndXBz 4739\ndXJpZXM= 4740\nYXJhbnQ= 4741\nZGRlbg== 4742\nZ2w= 4743\nIEZsb3JpZGE= 4744\nIGRlcGVuZA== 4745\nIFNjb3R0 4746\nIDMz 4747\nIGlU 4748\naWNvbg== 4749\nIG1lbnRpb25lZA== 4750\nIDIwMDA= 4751\nIGNsYWltZWQ= 4752\nIGRlZmluaXRlbHk= 4753\ndWxm 4754\nIGNvcmU= 4755\nIG9wZW5pbmc= 4756\nIENvbnN0 4757\nd2hpY2g= 4758\nIFRyYQ== 4759\nQUc= 4760\nNzI= 4761\nIGJlbGlldmVk 4762\nYWRh 4763\nIDQ4 4764\nIFNlY3VyaXR5 4765\neXJpZ2h0 4766\nIFBldA== 4767\nIExvdQ== 4768\nIGhvbGRpbmc= 4769\nPT09PT09PT09PT09PT09PQ== 4770\nIGljZQ== 4771\nIGJyb3c= 4772\nIGF1dGhvcml0aWVz 4773\naG9zdA== 4774\nd29yZA== 4775\nIHNjb3Jl 4776\nIERpdg== 4777\nIGNlbGxz 4778\nIHRyYW5zbA== 4779\nIG5laWdoYm9y 4780\nIHJlbW92ZQ== 4781\ndWN0 4782\nIGRpc3RyaWN0 4783\nIEFjY29yZGluZw== 4784\nIHdvcnNl 4785\nIGNvbmNlcm5z 4786\nIHByZXNpZGVudGlhbA== 4787\nIHBvbGljaWVz 4788\nIEhhbGw= 4789\nNzM= 4790\nIGh1cw== 4791\nQVk= 4792\nIDIwMDY= 4793\nIEp1ZA== 4794\nIGluZGVwZW5kZW50 4795\nIEp1c3RpY2U= 4796\naWxpYXI= 4797\ncHJpbnQ= 4798\naWdodGVy 4799\nIHByb3RlY3Rpb24= 4800\nemVu 4801\nIHN1ZGRlbg== 4802\naG91c2U= 4803\nIEplcw== 4804\nUFI= 4805\nIEluZg== 4806\nIGJ1bA== 4807\nIF8= 4808\nIFNlcnZpY2U= 4809\nIFBS 4810\nIHN0cmF0ZWd5 4811\nZmZlY3Q= 4812\nIGdpcmxz 4813\nIG1pc3Npbmc= 4814\nb3lhbA== 4815\nIFRlYW0= 4816\ndWxhdGVk 4817\nIGRhdA== 4818\nIHBvbGl0aWNz 4819\nYWJvcg== 4820\nQWNjb3JkaW5n 4821\nIHNwZWxs 4822\nIGdyYXBo 4823\nb3J0aGVybg== 4824\nVEM= 4825\nQWI= 4826\nIGxhYm9y 4827\naXNoZXI= 4828\nIGtpY2s= 4829\nIGlUdW5lcw== 4830\nIHN0ZXBz 4831\ncG9zZXM= 4832\nIHNtYWxsZXI= 4833\nRW4= 4834\nYmVydA== 4835\nIHJvbGw= 4836\nIHJlc2VhcmNoZXJz 4837\nIGNsb3NlZA== 4838\nIHRyYW5zcG9ydA== 4839\nIGxhd3k= 4840\nX19fX19fX19fX19fX19fXw== 4841\nIENoaWNhZ28= 4842\nIGFzcGVjdA== 4843\nIG5vbmU= 4844\nIG1hcnJpYWdl 4845\nOTY= 4846\nIGVsZW1lbnRz 4847\nIEZyZQ== 4848\nIFNhbA== 4849\nIGRyYW0= 4850\nRkM= 4851\ndG9w 4852\nZXF1 4853\nIGhlYXJpbmc= 4854\nIHN1cHBvcnRlZA== 4855\nIHRlc3Rpbmc= 4856\nY29ob2w= 4857\nIG1hc3NpdmU= 4858\nIHN0aWNr 4859\nIGd1YXJk 4860\naXNjbw== 4861\ncGhvbmU= 4862\nRnJvbQ== 4863\nSG93ZXZlcg== 4864\nIGJvcmRlcg== 4865\nIGNvcHk= 4866\nb2dyYXBoeQ== 4867\nbGlzdA== 4868\nNzE= 4869\nIG93bmVy 4870\nY2xhc3M= 4871\ncnVpdA== 4872\ncmF0ZQ== 4873\nIE9uY2U= 4874\nIGRpZ2l0YWw= 4875\nIHRhc2s= 4876\nRVJT 4877\nIGluY3JlZA== 4878\ndGVz 4879\nKys= 4880\nIEZyYW5jZQ== 4881\nIGJyZWF0 4882\nb3ds 4883\nIGlzc3VlZA== 4884\nIFdlc3Rlcm4= 4885\nIGRldGVjdA== 4886\nIHBhcnRuZXJz 4887\nIHNoYXJlZA== 4888\nIENhbGw= 4889\nIGNhbmNlcg== 4890\nYWNoZQ== 4891\ncmliZQ== 4892\nIGV4cGxhaW5lZA== 4893\nIGhlYXQ= 4894\neyI= 4895\nIGludmVzdG1lbnQ= 4896\nIEJvb2s= 4897\nIHdvb2Q= 4898\nIHRvb2xz 4899\nIEFsdGhvdWdo 4900\nIGJlbGllZg== 4901\nIGNyaXNpcw== 4902\nIGdl 4903\nIE1Q 4904\nIG9wZXJhdGlvbg== 4905\ndHlwZQ== 4906\nfn4= 4907\nZ2E= 4908\nIGNvbnRhaW5z 4909\nYW50YQ== 4910\nIGV4cHJlc3M= 4911\nIEdyb3Vw 4912\nIEpvdXJuYWw= 4913\na2E= 4914\nIGFtYg== 4915\nIFVTQQ== 4916\nIGZpbmRpbmc= 4917\nIGZ1bmRpbmc= 4918\naG93 4919\nIGVzdGFibGlzaGVk 4920\naWRlb3M= 4921\nIGRlZ3JlZQ== 4922\nIGRhbmdlcm91cw== 4923\nYW5naW5n 4924\nIGZyZWVkb20= 4925\ncHBvcnQ= 4926\nb3V0aGVybg== 4927\nIGNodXJjaA== 4928\nIGNhdGNo 4929\nIFR3bw== 4930\nIHByZXNlbmNl 4931\nIEd1YXJk 4932\nVXA= 4933\nIGF1dGhvcml0eQ== 4934\nIFByb2plY3Q= 4935\nIGJ1dHRvbg== 4936\nIGNvbnNlcXU= 4937\nIHZhbGlk 4938\nIHdlYWs= 4939\nIHN0YXJ0cw== 4940\nIHJlZmVyZW5jZQ== 4941\nIE1lbQ== 4942\nIik= 4943\nVU4= 4944\nb3JhZ2U= 4945\nIE9wZW4= 4946\nIGNvbGxlY3Rpb24= 4947\neW0= 4948\nZ2VuY3k= 4949\nIGJlYXV0aWZ1bA== 4950\ncm9z 4951\nIHRlbGxz 4952\nIHdhaXRpbmc= 4953\nbmVs 4954\nIHByb3ZpZGluZw== 4955\nIERlbW9jcmF0cw== 4956\nIGRhdWdodGVy 4957\nIG1hc3Rlcg== 4958\nIHB1cnBvc2Vz 4959\nIEphcGFuZXNl 4960\nIGVxdWFs 4961\nIHR1cm5z 4962\nIGRvY3VtZW50cw== 4963\nIHdhdGNoaW5n 4964\nUmVz 4965\nIHJhbg== 4966\nMjAxNA== 4967\nIHJlamVjdA== 4968\nIEtvcmVh 4969\nIHZpY3RpbXM= 4970\nTGV2ZWw= 4971\nZXJlbmNlcw== 4972\nIHdpdG5lc3M= 4973\nIDM0 4974\nIHJlZm9ybQ== 4975\nY29taW5n 4976\nIG9jY3Vw 4977\nIGNhdWdodA== 4978\nIHRyYWZmaWM= 4979\nYWRpbmc= 4980\nIG1vZGVscw== 4981\nYXJpbw== 4982\nIHNlcnZlZA== 4983\nIGJhdHRlcg== 4984\ndWF0ZQ== 4985\nIFNlY3JldGFyeQ== 4986\nIGFncmVlZA== 4987\nIHRydWx5 4988\neW5hbQ== 4989\nIFJldA== 4990\nIHVuaXRz 4991\nIFJlc2VhcmNo 4992\naGFuZA== 4993\nYXppbmU= 4994\nIE1pa2U= 4995\nIHZhcmlldHk= 4996\nb3RhbA== 4997\nIGFtYXppbmc= 4998\nIGNvbmZpcm1lZA== 4999\nIGVudGlyZWx5 5000\nIHB1cmNoYXNl 5001\nIGVsZW1lbnQ= 5002\nIGNhc2g= 5003\nIGRldGVybWluZQ== 5004\nRGU= 5005\nIGNhcnM= 5006\nIFdhbGw= 5007\n4pY= 5008\nIHZpZXdz 5009\nIGRydWdz 5010\nIGRlcGFydG1lbnQ= 5011\nIFN0ZXA= 5012\ndWl0 5013\nIDM5 5014\nYXN1cmU= 5015\nIENsYXNz 5016\nIGNvdmVyZWQ= 5017\nIEJhbms= 5018\nIG1lcmU= 5019\ndWFuYQ== 5020\nIG11bHRp 5021\nIG1peA== 5022\nIHVubGlrZQ== 5023\nbGV2aXNpb24= 5024\nIHN0b3BwZWQ= 5025\nIHNlbQ== 5026\nIEdhbA== 5027\ndWxlcw== 5028\nIHdlbA== 5029\nIEpvaG5zb24= 5030\nbGE= 5031\nIHNraWxs 5032\nIGJlY29taW5n 5033\ncmll 5034\nIGFwcHJvcHJpYXRl 5035\nZmU= 5036\nZWxsb3c= 5037\nIFByb3Q= 5038\ndWxhdGU= 5039\nb2NhdGlvbg== 5040\nIHdlZWtlbmQ= 5041\nb2RpZXM= 5042\nIHNpdGVz 5043\nIGFuaW1hbA== 5044\nIFRpbQ== 5045\nIHNjYWxl 5046\nIGNoYXJnZWQ= 5047\nIGluc3RydWN0 5048\naWxsYQ== 5049\nIG1ldGhvZHM= 5050\nIGNlcnQ= 5051\nIGp1ZGdl 5052\nIEhlbA== 5053\nIGRvbGxhcnM= 5054\nIHN0YW5kaW5n 5055\nIFNxdQ== 5056\nIGRlYnQ= 5057\nbGlhbQ== 5058\nIGRyaXZpbmc= 5059\nIFN1bQ== 5060\nIEVkaXRpb24= 5061\nIGFsYnVt 5062\nYW5kb24= 5063\nSUY= 5064\nIFVr 5065\nNjM= 5066\nYWRlcg== 5067\nIGNvbW1lcmNpYWw= 5068\nZXNo 5069\nIEdvdmVybm1lbnQ= 5070\nIGRpc2NvdmVyZWQ= 5071\nIG91dHB1dA== 5072\nIEhpbGxhcnk= 5073\nIENhcm9s 5074\nIDIwMDU= 5075\nIGFidXNl 5076\nYW5jaW5n 5077\nIHN3aXRjaA== 5078\nIGFubnVhbA== 5079\nVHc= 5080\nIHN0YXRlZA== 5081\nYWdlbWVudA== 5082\naW5uZXI= 5083\nIGRlbW9jcg== 5084\nIHJlc2lkZW50cw== 5085\nIGFsbG93aW5n 5086\nIGZhY3RvcnM= 5087\nb2Rk 5088\nIGZ1Y2s= 5089\nZW1pZXM= 5090\nIG9jY3VycmVk 5091\nb3Rp 5092\nIG5vcnRo 5093\nIFB1YmxpYw== 5094\nIGluanVyeQ== 5095\nIGluc3VyYW5jZQ== 5096\nQ0w= 5097\nb2xseQ== 5098\n44A= 5099\nIHJlcGVhdGVk 5100\nIGFybXM= 5101\nYW5nZWQ= 5102\nIGNvbnN0cnVjdGlvbg== 5103\nIGZsZQ== 5104\nUFU= 5105\naWNpYW5z 5106\nIGZvcm1z 5107\nIE1jQw== 5108\nYW50aWM= 5109\nIG1lbnRhbA== 5110\ncGlyZQ== 5111\nIGVxdWlwbWVudA== 5112\nIGZhbnQ= 5113\nIGRpc2N1c3Npb24= 5114\nIHJlZ2FyZGluZw== 5115\na2lu 5116\nYXJw 5117\nIGNoYWly 5118\nb2d1ZQ== 5119\nIHByb2NlZWQ= 5120\nIElk 5121\nT3Vy 5122\nIG11cmRlcg== 5123\nTWFu 5124\nIDQ5 5125\nYXNw 5126\nIHN1cHBseQ== 5127\nIGlucHV0 5128\nIHdlYWx0aA== 5129\nbGlhbWVudA== 5130\nIHByb2NlZA== 5131\nb3JpYWw= 5132\nIFN0YXQ= 5133\nIE5GTA== 5134\naGVucw== 5135\nIEluc3RpdHV0ZQ== 5136\nIHB1dHRpbmc= 5137\nb3VybmFtZW50 5138\nZXRpYw== 5139\nIGxvY2F0ZWQ= 5140\nIGtpZA== 5141\nZXJpYQ== 5142\ncnVu 5143\nIHByaW5j 5144\nICE= 5145\nZ29pbmc= 5146\nIEJldA== 5147\nIGNsb3Q= 5148\nIHRlbGxpbmc= 5149\nIHByb3Bvc2Vk 5150\naW90 5151\nb3JyeQ== 5152\nIGZ1bmRz 5153\nZ21lbnQ= 5154\nIExpZmU= 5155\nIGJhYnk= 5156\nIEJhY2s= 5157\nIHNwb2tl 5158\nSW1hZ2U= 5159\nIGVhcm4= 5160\nIEFU 5161\nZ3U= 5162\nIGV4Y2hhbmdl 5163\nIExpbg== 5164\nb3Zpbmc= 5165\nIHBhaXI= 5166\nTW9yZQ== 5167\nYXpvbg== 5168\nIGFycmVzdGVk 5169\nIGtpbGxpbmc= 5170\nY2Fu 5171\nIENhcmQ= 5172\neWQ= 5173\nIGlkZW50aWZpZWQ= 5174\nIG1vYmlsZQ== 5175\nIHRoYW5rcw== 5176\nb255bQ== 5177\nIEZvcm0= 5178\nIGh1bmRyZWRz 5179\nIENocmlz 5180\nIENhdA== 5181\nIHRyZW5k 5182\naGF0 5183\nIEF2 5184\nb21hbg== 5185\nIGVsZWN0cmlj 5186\nIFdpbA== 5187\nU0U= 5188\nT2Y= 5189\nIHJlc3RhdXI= 5190\nb3RlZA== 5191\nIHRyaWc= 5192\nIG5pbmU= 5193\nIGJvbWI= 5194\nV2h5 5195\nwq8= 5196\nIGNvdmVyYWdl 5197\nIGFwcGVhbA== 5198\nIFJvYmVydA== 5199\nIFN1cA== 5200\nIGZpbmlzaGVk 5201\nIGZsb3c= 5202\nIGRlbGl2ZXI= 5203\nIGNhbGN1bA== 5204\nIHBob3Rvcw== 5205\nIHBoaWw= 5206\nIHBpZWNlcw== 5207\nIGFwcHJl 5208\na2Vz 5209\nIHJvdWdo 5210\nRG8= 5211\nIHBhcnRuZXI= 5212\nIGNvbmNlcm5lZA== 5213\nIDM3 5214\nIEdlbg== 5215\nQ29s 5216\nY3RvcnM= 5217\nID0+ 5218\nc3RhdGU= 5219\nIHN1Z2dlc3RlZA== 5220\nIEZvcmNl 5221\nQ0U= 5222\nIGhlcnNlbGY= 5223\nIFBsYW4= 5224\nd29ya3M= 5225\nb290aA== 5226\ncmVuY3k= 5227\nIGNvcm5lcg== 5228\nIGh1c2JhbmQ= 5229\nIGludGVybmV0 5230\nIEF1dA== 5231\nZW1z 5232\nb3Nlbg== 5233\nIEF0bA== 5234\nZ2Vu 5235\nIGJhbGFuY2U= 5236\nNjI= 5237\nIHNvdW5kcw== 5238\ndGV4dA== 5239\nIGFycg== 5240\nb3Zlcw== 5241\nIG1pbGxpb25z 5242\nIHJhZGlv 5243\nIHNhdGlzZg== 5244\nIERhbQ== 5245\nTXI= 5246\nR28= 5247\nU3Bl 5248\nIGNvbWJhdA== 5249\ncmFudA== 5250\nIEdyZWU= 5251\nIGZ1ZWw= 5252\nIGRpc3RhbmNl 5253\nIHRlc3Rz 5254\nIGRlY3Jl 5255\nIEVy 5256\nIG1hbmFnZWQ= 5257\nRFM= 5258\nIHRpdA== 5259\nIG1lYXN1cmVz 5260\nIExpYmVy 5261\nIGF0dGVuZA== 5262\nYXNoZWQ= 5263\nIEpvc2U= 5264\nIE5pZ2h0 5265\nZGl0 5266\nIE5vdg== 5267\nIEVuZA== 5268\nb3V0cw== 5269\nIGdlbmVyYXRpb24= 5270\nIGFkdm9j 5271\neXRo 5272\nIGNvbnZlcnNhdGlvbg== 5273\nIFNreQ== 5274\nYWN0aXZl 5275\nY2Vs 5276\ncmllcg== 5277\nIEZyYW5r 5278\nIGdlbmRlcg== 5279\nIGNvbmNlbnQ= 5280\nIGNhcnJpZWQ= 5281\nYW5kYQ== 5282\nIFZpcmdpbg== 5283\nIGFycml2ZWQ= 5284\naWNpZGU= 5285\nYWRlZA== 5286\nIGZhaWx1cmU= 5287\nIG1pbmltdW0= 5288\nbGV0cw== 5289\nIHdvcnN0 5290\nIGtlZXBpbmc= 5291\nIGludGVuZGVk 5292\nIGlsbGVnYWw= 5293\nIHN1YnNj 5294\nIGRldGVybWluZWQ= 5295\nIHRyaXA= 5296\nWWVz 5297\nIHJhaXNl 5298\nIH4= 5299\nIGZlZWxz 5300\nIHBhY2thZ2U= 5301\nIEpv 5302\naGk= 5303\nMjAxNg== 5304\ncmVhbA== 5305\nIGZyYQ== 5306\nIHN5bWI= 5307\nTWU= 5308\ndWNreQ== 5309\ncHJldA== 5310\nIEto 5311\nIEVkaXQ= 5312\nIFdlYg== 5313\nZW1pYw== 5314\nIENvbG9y 5315\nIGp1c3RpY2U= 5316\nSW50 5317\nIGZhcm0= 5318\nY2tub3c= 5319\nIj4= 5320\nZWxlc3M= 5321\nIHJlZHVjZWQ= 5322\nIDUwMA== 5323\neHg= 5324\nIFJhZA== 5325\nIFdvb2Q= 5326\nIGNsaW4= 5327\nIGh5cA== 5328\naWxlcg== 5329\ndXJh 5330\na2lucw== 5331\nODU= 5332\nNjE= 5333\nIFRoZWly 5334\nIE1hcnk= 5335\nIHNhbg== 5336\nIG5vdmVs 5337\nIFdobw== 5338\nIGNhcGFjaXR5 5339\nIGltcG9zc2libGU= 5340\nIHBsYXlz 5341\nIG1pbmlzdGVy 5342\naWp1YW5h 5343\naWNhdGU= 5344\nIFNldA== 5345\nIGZyYW0= 5346\nIGluZw== 5347\nIGNvbW11bml0aWVz 5348\nIEZCSQ== 5349\naXRh 5350\nIGJvbg== 5351\nIHN0cmF0ZWc= 5352\nIGludGVyZXN0cw== 5353\nbG9jaw== 5354\nZ2Vycw== 5355\nbWFz 5356\nIEFORA== 5357\nIGNvbmZsaWN0 5358\nIHJlcXVpcmVtZW50cw== 5359\nIHNhYw== 5360\nIG9wZXJhdGluZw== 5361\naW5p 5362\ncmVsYXRlZA== 5363\nIGNvbW1pdHRlZA== 5364\nIHJlbGF0aXZlbHk= 5365\nIHNvdXRo 5366\nwq/Crw== 5367\nIGFmZm9yZA== 5368\nIGlkZW50aXR5 5369\nIGRlY2lzaW9ucw== 5370\nIGFjY3VzZWQ= 5371\ncGxhY2U= 5372\nIHZpY3Rvcnk= 5373\nb2No 5374\naWF0 5375\nTmFtZQ== 5376\nQ29t 5377\ndGlvbg== 5378\nZWRz 5379\nIHNlZWs= 5380\nIHRpZ2h0 5381\nIEltYWdlcw== 5382\nIGluaXRp 5383\nIGh1bWFucw== 5384\nIGZhbWlsaWFy 5385\nIGF1ZGllbmNl 5386\nIGludGVybmFs 5387\ndmVudHVyZQ== 5388\nIHNpZGVz 5389\nIFRP 5390\nIGRpbQ== 5391\nIGNvbmNsdWQ= 5392\nIGFwcG9pbnQ= 5393\nIGVuZm9yY2VtZW50 5394\nIEppbQ== 5395\nIEFzc29jaWF0aW9u 5396\nIGNpcmN1bXN0 5397\nIENhbmFkaWFu 5398\nIGpvaW5lZA== 5399\nIGRpZmZlcmVuY2Vz 5400\nIExvcw== 5401\nIHByb3Rlc3Q= 5402\nIHR3aWNl 5403\nd2lu 5404\nIGdsYXNz 5405\nYXJzaA== 5406\nIEFybXk= 5407\nIGV4cHJlc3Npb24= 5408\nIGRlY2lkZQ== 5409\nIHBsYW5uaW5n 5410\nYW5pYQ== 5411\nIGhhbmRsZQ== 5412\nIE1pY3Jvc29mdA== 5413\nIE5vcg== 5414\nIG1heGltdW0= 5415\nIFJldg== 5416\nIHNlYQ== 5417\nIGV2YWw= 5418\nIGhlbHBz 5419\ncmVm 5420\nIGJvdW5k 5421\nIG1vdXRo 5422\nIHN0YW5kYXJkcw== 5423\nIGNsaW0= 5424\nIENhbXA= 5425\nIEZveA== 5426\nY2xlcw== 5427\nIGFybXk= 5428\nIFRlY2hu 5429\nYWNraW5n 5430\neHk= 5431\nU1M= 5432\nIDQy 5433\nIGJ1Zw== 5434\nIFVrcmFpbg== 5435\nIE1heA== 5436\nIEpvbmVz 5437\nIFNob3c= 5438\nbG8= 5439\nIHBsYW5ldA== 5440\nIDc1 5441\nIHdpbm5pbmc= 5442\nIGZhc3Rlcg== 5443\nIHNwZWN0 5444\nIGJyb2tlbg== 5445\nVFI= 5446\nIGRlZmluZWQ= 5447\nIGhlYWx0aHk= 5448\nIGNvbXBldGl0aW9u 5449\naHR0cHM= 5450\nIElzbGFuZA== 5451\nIEZl 5452\nIGFubm91bmNl 5453\nIEN1cA== 5454\nIEluc3RlYWQ= 5455\nIGNsaWVudA== 5456\nIHBvc3NpYmx5 5457\nc2VjdGlvbg== 5458\nb2NrZXQ= 5459\nbG9vaw== 5460\nIGZpbmlzaA== 5461\nIGNyZXc= 5462\nIHJlc2Vydg== 5463\nIGVkaXRvcg== 5464\nIGhhdGU= 5465\nIHNhbGU= 5466\nIGNvbnRyb3ZlcnM= 5467\nIHBhZ2Vz 5468\nd2luZw== 5469\nIG51bWVy 5470\nIG9wcG9zaXRpb24= 5471\nIDIwMDQ= 5472\nIHJlZnVnZQ== 5473\nIGZsaWdodA== 5474\nIGFwYXJ0 5475\nIExhdA== 5476\nQW1lcmlj 5477\nIEFmcmljYQ== 5478\nIGFwcGxpY2F0aW9ucw== 5479\nIFBhbGVzdA== 5480\nIEJ1cg== 5481\nIGdhcg== 5482\nIFNvY2lhbA== 5483\nIHVwZ3I= 5484\nIHNoYXBl 5485\nIHNwZWFraW5n 5486\nYW5zaW9u 5487\nYW8= 5488\nIFNu 5489\nIHdvcnJ5 5490\nIEJyaXRhaW4= 5491\nUGxlYXNl 5492\ncm91ZA== 5493\nIGh1bg== 5494\nIGludHJvZHVjZWQ= 5495\nIGRpZXQ= 5496\nSW5k 5497\nIFNlY29uZA== 5498\nIGZ1bmN0aW9ucw== 5499\ndXRz 5500\nIEVhY2g= 5501\nIEplZmY= 5502\nIHN0cmVzcw== 5503\nIGFjY291bnRz 5504\nIGd1YXJhbnQ= 5505\nIEFubg== 5506\nZWRpYQ== 5507\nIGhvbmVzdA== 5508\nIHRyZWU= 5509\nIEFmcmljYW4= 5510\nIEJ1c2g= 5511\nfSw= 5512\nIHNjaA== 5513\nIE9ubHk= 5514\nIGZpZg== 5515\naWdhbg== 5516\nIGV4ZXJjaXNl 5517\nIEV4cA== 5518\nIHNjaWVudGlzdHM= 5519\nIGxlZ2lzbGF0aW9u 5520\nIFdvcms= 5521\nIFNwcg== 5522\nw4I= 5523\nIEh1bWFu 5524\nIOg= 5525\nIHN1cnZleQ== 5526\nIHJpY2g= 5527\ncmlw 5528\nIG1haW50YWlu 5529\nIGZsbw== 5530\nIGxlYWRlcnNoaXA= 5531\nc3RyZWFt 5532\nIElzbGFtaWM= 5533\nIDAx 5534\nIENvbGxlZ2U= 5535\nIG1hZ2lj 5536\nIFByaW1l 5537\nIGZpZ3VyZXM= 5538\nMjAxNw== 5539\naW5kZXI= 5540\neHVhbA== 5541\nIERlYWQ= 5542\nIGFic29sdXRlbHk= 5543\nIGZvdXJ0aA== 5544\nIHByZXNlbnRlZA== 5545\ncmVzcG9uZA== 5546\ncmlibGU= 5547\nIGFsY29ob2w= 5548\nYXRv 5549\nIERF 5550\ncG9yYXJ5 5551\nIGdyYWI= 5552\nIHZhcmk= 5553\nIHF1YW50 5554\nIFBob3Rv 5555\nIHBsdXM= 5556\ncmljaw== 5557\nYXJrcw== 5558\nIGFsdGVybmF0aXZl 5559\nIHBpbA== 5560\nIGFwcHJveA== 5561\ndGhhdA== 5562\nIG9iamVjdHM= 5563\nIFJv 5564\nIEFuZHJvaWQ= 5565\nIHNpZ25pZmljYW50bHk= 5566\nIFJvYWQ= 5567\na2F5 5568\nUmVhZA== 5569\nYXZvcg== 5570\nIGFja25vdw== 5571\nIEhE 5572\nIFNpbmc= 5573\nT3I= 5574\nIE1vbnQ= 5575\nIHVucw== 5576\ncHJvZg== 5577\nIG5lZ290aQ== 5578\nIEFyY2g= 5579\naWtp 5580\nIHRlbGV2aXNpb24= 5581\nIEpld2lzaA== 5582\nIGNvbW1pdHRlZQ== 5583\nIG1vdG9y 5584\nIGFwcGVhcmFuY2U= 5585\nIHNpdHRpbmc= 5586\nIHN0cmlrZQ== 5587\nIERvd24= 5588\nY29tcA== 5589\nIEhpc3Q= 5590\nIGZvbGQ= 5591\nYWNlbWVudA== 5592\nIExvdWlz 5593\nIGJlbG9uZw== 5594\nIOKAog== 5595\nIG1vcnQ= 5596\nIHByZXBhcmVk 5597\nIDY0 5598\nIE1hc3Rlcg== 5599\nIGluZGVlZA== 5600\nIERlbg== 5601\nIHJlbnQ= 5602\nVEE= 5603\nb3VybmV5 5604\nYXJj 5605\nU3U= 5606\nOTc= 5607\nIGFkdmljZQ== 5608\nIGNoYW5naW5n 5609\nIGxpc3RlZA== 5610\nIGxhdW5jaGVk 5611\naXNhdGlvbg== 5612\nIFBldGVy 5613\naXNoZXM= 5614\nIGxpdmVk 5615\nIE1lbA== 5616\nIFN1cHJlbWU= 5617\nIEZlZGVyYWw= 5618\nICk7 5619\ncnVjdHVyZQ== 5620\nIHNldHM= 5621\nIHBoaWxvcw== 5622\ndW91cw== 5623\nIMKg 5624\nIGFwcGxpZWQ= 5625\nIE5PVA== 5626\nIGhvdXNpbmc= 5627\nIE1vdW50 5628\nIG9kZA== 5629\nIHN1c3Q= 5630\nREE= 5631\nZmZpY2llbnQ= 5632\nID8= 5633\nb2x2ZWQ= 5634\nIHBvd2Vycw== 5635\nIHRocg== 5636\nIHJlbWFpbmluZw== 5637\nIFdhdGVy 5638\nTEM= 5639\nIGNhdXNlcw== 5640\n44Gu 5641\nIG1hbm5lcg== 5642\nYWRz 5643\nIHN1Z2dlc3Rz 5644\nIGVuZHM= 5645\nc3RhbmRpbmc= 5646\nZmln 5647\nIER1bg== 5648\naWR0aA== 5649\nIGdheQ== 5650\nIHRlcm1pbg== 5651\nIEFuZ2VsZXM= 5652\nTVM= 5653\nIHNjaWVudGlmaWM= 5654\nIGNvYWw= 5655\nYXBlcnM= 5656\nYmFy 5657\nIFRob21hcw== 5658\nIHN5bQ== 5659\nIFJ1bg== 5660\ndGhpcw== 5661\nUEM= 5662\naWdyYW50cw== 5663\nIG1pbnV0ZQ== 5664\nIERpc3RyaWN0 5665\nY2VsbGVudA== 5666\nIGxlYXZlcw== 5667\nIGNvbXBsZXRlZA== 5668\nYW1pbg== 5669\nIGZvY3VzZWQ= 5670\nIG1vbml0b3I= 5671\nIHZlaGljbGVz 5672\nTUE= 5673\nIE1hc3M= 5674\nIEdyYW5k 5675\nIGFmZmVjdGVk 5676\naXR1dGlvbmFs 5677\nIGNvbnN0cnVjdA== 5678\nIGZvbGxvd3M= 5679\nIHRvbg== 5680\ncmVlbnM= 5681\nIGhvbWVz 5682\nIEV4dA== 5683\nIExldmVs 5684\ncmFzdA== 5685\nIEly 5686\nIGVsaW0= 5687\nIGxhcmdlbHk= 5688\nIEpvZQ== 5689\nIHZvdGVz 5690\nYWxscw== 5691\nIGJ1c2luZXNzZXM= 5692\nIEZvdW5kYXRpb24= 5693\nIENlbnRyYWw= 5694\nIHlhcmRz 5695\nIG1hdGVyaWFscw== 5696\ndWxuZXI= 5697\nIGd1aWRl 5698\nIGNsb3Nlcg== 5699\ndW1z 5700\nIHNwb3J0cw== 5701\nZWRlcg== 5702\nSnVzdA== 5703\nIHRheGVz 5704\nODQ= 5705\nIE9sZA== 5706\nIGRlY2FkZQ== 5707\nb2xh 5708\nIHZpcg== 5709\nIGRyb3BwZWQ= 5710\nIGRlbGF5 5711\naXRlY3Q= 5712\nIHNlY3VyZQ== 5713\nc3RlaW4= 5714\nbGV2ZWw= 5715\nIHRyZWF0ZWQ= 5716\nIGZpbGVk 5717\nYWluZQ== 5718\nIHZhbg== 5719\nIG1pcg== 5720\nIGNvbHVtbg== 5721\naWN0ZWQ= 5722\nZXBlcg== 5723\nIHJvdA== 5724\nIGNvbnN1bHQ= 5725\nIGVudHJ5 5726\nIG1hcmlqdWFuYQ== 5727\nIERvdQ== 5728\nIGFwcGFyZW50bHk= 5729\nb2tpbmc= 5730\nY2x1c2l2ZQ== 5731\nIGluY3JlYXNlcw== 5732\nYW5v 5733\nIHNwZWNpZmljYWxseQ== 5734\nIHRlbGU= 5735\nZW5zaW9ucw== 5736\nIHJlbGlnaW9u 5737\nYWJpbGl0aWVz 5738\nIGZyYW1l 5739\nIE5vdGU= 5740\nIExlZQ== 5741\nIGhlbHBpbmc= 5742\nIGVkZ2U= 5743\nb3N0b24= 5744\nIG9yZ2FuaXphdGlvbnM= 5745\nw4M= 5746\nIEJvdGg= 5747\naGlwcw== 5748\nIGJpZ2dlcg== 5749\nIGJvb3N0 5750\nIFN0YW5k 5751\nIHJvdw== 5752\ndWxz 5753\nYWJhc2U= 5754\nIHJpZA== 5755\nTGV0 5756\nYXJlbg== 5757\ncmF2ZQ== 5758\nIHN0cmV0 5759\nUEQ= 5760\nIHZpc2lvbg== 5761\nIHdlYXJpbmc= 5762\nIGFwcHJlY2k= 5763\nIGF3YXJk 5764\nIFVzZQ== 5765\nIGZhY3Rvcg== 5766\nd2Fy 5767\ndWxhdGlvbnM= 5768\nKSg= 5769\nIGdvZA== 5770\nIHRlcnJpdA== 5771\nIHBhcmFt 5772\nYXN0cw== 5773\nODc= 5774\nIGVuZW1pZXM= 5775\nIEdhbWVz 5776\nRkY= 5777\nIGFjY2lkZW50 5778\nV2VsbA== 5779\nIE1hcnRpbg== 5780\nVEVS 5781\nIGF0aA== 5782\nIEhlbGw= 5783\nIGZvcmc= 5784\nIHZldGVy 5785\nIE1lZGlj 5786\nZnJlZQ== 5787\nIHN0YXJz 5788\nIGV4cGVuc2l2ZQ== 5789\nIGFjYWQ= 5790\ncmF3bg== 5791\nIFdoZQ== 5792\nIGxvY2s= 5793\nIGZvcm1hdA== 5794\nIHNvbGRpZXJz 5795\nc20= 5796\nIGFnZW50 5797\nIHJlc3BvbnNpYmlsaXR5 5798\nb3Jh 5799\nIFNjaWVuY2U= 5800\nIHJhcGlk 5801\nIHRvdWdo 5802\nIEplc3Vz 5803\nIGJlbGlldmVz 5804\nTUw= 5805\nIHdlYXI= 5806\nbGV0ZQ== 5807\nw4PDgg== 5808\nIERyaQ== 5809\nIGNvbW1pc3Npb24= 5810\nIEJvYg== 5811\nT2g= 5812\nYXBlZA== 5813\nIHdhcm0= 5814\nw4PDgsODw4I= 5815\nIDIwMDM= 5816\nb3J0aW9u 5817\nIGhhc24= 5818\ndXN0ZXI= 5819\nIHVuaXZlcnM= 5820\nIElsbA== 5821\nIGtpbmc= 5822\nb2xvZ2llcw== 5823\nOTQ= 5824\nIFRlbQ== 5825\nIE1vcw== 5826\nIHBhdGllbnQ= 5827\nIE1leGljbw== 5828\nY2Vhbg== 5829\nIERlYXRo 5830\nIFNhbmRlcnM= 5831\neW91 5832\nIENhc3Q= 5833\nIENvbXBhbnk= 5834\ncHR5 5835\nIGhhcHBlbmluZw== 5836\nRlA= 5837\nIEJhdHRsZQ== 5838\nIGJvdWdodA== 5839\nQW0= 5840\nTW9k 5841\nVXM= 5842\ndXRlcnM= 5843\nIENyZQ== 5844\nIFRob3Nl 5845\nIDQ0 5846\naXNlcg== 5847\nIHNvdWw= 5848\nIFRvcA== 5849\nIEhhcnJ5 5850\nIEF3 5851\nIHNlYXQ= 5852\nZmZlZQ== 5853\nIHJldm9sdXRpb24= 5854\nICgi 5855\nIER1cmluZw== 5856\nZXR0ZQ== 5857\nIHJpbmc= 5858\nIG9mZmVuc2l2ZQ== 5859\nIHJldHVybnM= 5860\nIHZpZGVvcw== 5861\nIGRpc2Ns 5862\nIGZhbW91cw== 5863\nZW5jZWQ= 5864\nIFNpZ24= 5865\nIFJpdmVy 5866\nIDMwMA== 5867\nUE0= 5868\nIEJ1cw== 5869\nIENI 5870\nIGNhbmRpZGF0ZXM= 5871\nYXJkZW4= 5872\nIHBlcmNlbnRhZ2U= 5873\nIHZpc3VhbA== 5874\nIHRoYW5r 5875\nIHRyb3VibGU= 5876\nbmVyZ3k= 5877\nIDIwMDE= 5878\nIHByb3Zl 5879\nYXNoaW9u 5880\nIGVuaA== 5881\nIExvbmc= 5882\nVU0= 5883\nIGNvbm5lY3RlZA== 5884\nIHBvc3NpYmlsaXR5 5885\nT3Zlcg== 5886\nIGV4cGVydA== 5887\nIGxpYnJhcnk= 5888\nYXJ0cw== 5889\nIERpcmVjdG9y 5890\nIGZlbGxvdw== 5891\nOTI= 5892\naXJ0eQ== 5893\nIGRyeQ== 5894\nIHNpZ25z 5895\nIExvdmU= 5896\nIHF1aWV0 5897\nZm9vdA== 5898\nIHB1cmU= 5899\nIEh1bg== 5900\nIGZpbGxlZA== 5901\ncGhhcw== 5902\nIEVsZWN0 5903\nZW5kbWVudA== 5904\nIEV4cGw= 5905\nIHVuYWJsZQ== 5906\nbnM= 5907\nbW8= 5908\nIHZhc3Q= 5909\nb2Jl 5910\nIGlkZW50aWZ5 5911\nYXBwaW5n 5912\nIENhcm9saW5h 5913\nZ3Jlc3M= 5914\nIHByb3Rl 5915\nIGZpc2g= 5916\nIGNpcmN1bXN0YW5jZXM= 5917\ncmF6eQ== 5918\nIFBob3Q= 5919\nIGJvZGllcw== 5920\nIE11cg== 5921\nIGRldmVsb3Bpbmc= 5922\nIEFS 5923\nIGV4cGVyaWVuY2Vk 5924\nIHN1YnN0YW50 5925\nIEJvYXJk 5926\nZXNvbWU= 5927\nIGRvbWVzdGlj 5928\nIGNvbWJpbmVk 5929\nIFB1dA== 5930\nIGNoZW1pY2Fs 5931\nIENoaWxk 5932\nIHBvb2w= 5933\nIEN5 5934\nIGVnZw== 5935\nY29ucw== 5936\nc3RlcnM= 5937\nIGh1cnQ= 5938\nIG1hcmtldHM= 5939\nIGNvbnNlcnZhdGl2ZQ== 5940\nIHN1cHBvcnRlcnM= 5941\nIGFnZW5jaWVz 5942\naWRlbA== 5943\nT2I= 5944\ndXJi 5945\nIDQz 5946\nIERlZmVuc2U= 5947\neWU= 5948\nIEFw 5949\nZHVsZQ== 5950\nIHRlbXBlcmF0dXJl 5951\nIGNvbmR1Y3RlZA== 5952\nIENoaWVm 5953\nIHB1bGxlZA== 5954\nIGZvbA== 5955\nTGFzdA== 5956\nb250bw== 5957\nb3Npcw== 5958\nVkVS 5959\nRGVz 5960\nIFBhbg== 5961\nRmlyc3Q= 5962\nIGFkdmFuY2U= 5963\nIGxpY2Vuc2U= 5964\ncm9ycw== 5965\nIEpvbg== 5966\nIGltYWdpbmU= 5967\nIGhlbGw= 5968\nIGZpeGVk 5969\nIGluY29y 5970\nb3NpdGU= 5971\nIExvZw== 5972\naWNrZW4= 5973\nXTo= 5974\nIHN1cnByaXNl 5975\naGFi 5976\nIGNyYWZ0 5977\nb2x0 5978\nIEp1bA== 5979\nIGRpYWw= 5980\nIHJlbGV2YW50 5981\nIGVudGVyZWQ= 5982\nIGxlYWRz 5983\nIEFE 5984\nIENsZWFu 5985\nIHBpY3R1cmVz 5986\nZXNzb3I= 5987\nIGFsdA== 5988\nIHBheWluZw== 5989\nUGVy 5990\nIE1hcmtldA== 5991\nIHVwZGF0ZXM= 5992\nYW1pbHk= 5993\nIFR5cGU= 5994\nIEhvbWU= 5995\nIDU1 5996\nc2VtYmx5 5997\ncm9tZQ== 5998\nODM= 5999\nIGdyZWF0ZXN0 6000\nIGhlaWdodA== 6001\nIGhlYXY= 6002\nYWludHM= 6003\nIGxpc3Rlbg== 6004\nYXNlcg== 6005\nIFNI 6006\nIGNhcGFibGU= 6007\nYWNsZQ== 6008\nIHBlcnNwZWN0 6009\naW5hdGluZw== 6010\nIG9mZmVyaW5n 6011\ncnlwdA== 6012\nIERldmVsb3A= 6013\nYWJpbg== 6014\ncmM= 6015\nIGJyaWdodA== 6016\nYWx0eQ== 6017\nYXJyb3c= 6018\nIHN1cHBs 6019\naW5kaW5n 6020\nYWNrZWQ= 6021\nZ3lwdA== 6022\nIEFub3RoZXI= 6023\ncGc= 6024\nIFZpcmdpbmlh 6025\nIEx1 6026\nIHBsYW5uZWQ= 6027\nIHBpdA== 6028\nIHN3ZWV0 6029\nVHlwZQ== 6030\nIERp 6031\nIHR5cGljYWxseQ== 6032\nIEZyYW5jaXNjbw== 6033\nIHByb3NwZWN0 6034\nIERhbg== 6035\nIHRlZW4= 6036\ncmVlcw== 6037\nIHNjaGVk 6038\nIGhvbA== 6039\nIHNjcg== 6040\nIGxvdHM= 6041\nbGlmZQ== 6042\nIG5ld3Nw 6043\nIGZvcmdldA== 6044\nIE5vbmU= 6045\nIE1pZGRsZQ== 6046\nIFJ5YW4= 6047\nZWRk 6048\nIHNldmVyZQ== 6049\nIHN1aXQ= 6050\nbGxlcg== 6051\nOTM= 6052\nIGNvcnJlc3BvbmQ= 6053\nIGV4cGxvcw== 6054\ndWF0aW9ucw== 6055\nIGZsYWc= 6056\nZ2FtZQ== 6057\ncmlk 6058\nIHByaW4= 6059\nIERhdGE= 6060\nIGRlcGxveQ== 6061\nIEVudGVy 6062\nc3VpdA== 6063\nZ2hhbg== 6064\nIE1lbg== 6065\nIHRob3VnaHRz 6066\nIG1hdHRlcnM= 6067\nIGFkYXB0 6068\nIEFyaQ== 6069\nIGZpbGw= 6070\nIGZvcnRo 6071\nIHNhbQ== 6072\nIDQx 6073\nIHBheW1lbnQ= 6074\nIEhvcg== 6075\nIHNwcmluZw== 6076\nZHVj 6077\nIGxvc2luZw== 6078\nIGJyaW5naW5n 6079\nRk8= 6080\nYWxh 6081\nIGRpc3RyaWJ1dGlvbg== 6082\naGVyZWQ= 6083\nYm91cg== 6084\nIElzcmFlbGk= 6085\nb21h 6086\nIGNvbWJpbmF0aW9u 6087\nIHBsZW50eQ== 6088\nVkU= 6089\nQ2Fu 6090\nIEhhdw== 6091\nIHBlcm1hbg== 6092\nIFNwZWNpYWw= 6093\nIHRvdw== 6094\nIHNlZWtpbmc= 6095\nIGV4YW1wbGVz 6096\nIGNsYXNzZXM= 6097\nY3I= 6098\nIGJlZXI= 6099\nIG1vdmVz 6100\nIElQ 6101\nIEtu 6102\nIHBhbmVs 6103\nRXZlbg== 6104\nIHByb3Blcmx5 6105\nIHJpcw== 6106\nIHBsdWc= 6107\nIGVzdGltYXRlZA== 6108\nRXZlcnk= 6109\nIGRlZmVuc2l2ZQ== 6110\nYWdyYXBo 6111\nIHByZWdu 6112\nIGluc3RpdA== 6113\nIFZpY3Q= 6114\nIHZvbHVtZQ== 6115\nIHBvc2l0aW9ucw== 6116\nIGxpbmtz 6117\nIFByb2dyYW0= 6118\nIFdlZWs= 6119\nYWd1ZXM= 6120\nIHRyYW5zZm9ybQ== 6121\na2Vy 6122\nIENFTw== 6123\nIGNhcw== 6124\nIG9wcG9uZW50 6125\nIHR3ZWV0 6126\nIENvZGU= 6127\nIHNob3A= 6128\nIGZseQ== 6129\nIHRhbGtz 6130\nIGJhZw== 6131\nUGhvbmU= 6132\nIGFpZA== 6133\nIHBsYW50cw== 6134\nIDY1 6135\nIGF0dG9ybmV5 6136\nYXJ0ZXJz 6137\ncXVlc3Q= 6138\nIE1hZ2lj 6139\nIGJlZ2lucw== 6140\nIG15c3Rlcg== 6141\nIGVudmlyb25tZW50YWw= 6142\nIHN0b3JhZ2U= 6143\nTk4= 6144\nIG1hcmc= 6145\nIHNrZQ== 6146\nIG1ldGFs 6147\nZWxseQ== 6148\nIG9yZGVyZWQ= 6149\nIHJlbWFpbmVk 6150\nIGxvdmVk 6151\nIHByb21wdA== 6152\nIHVwZGF0ZWQ= 6153\nIGV4cGVydHM= 6154\nIHdhbGtpbmc= 6155\nIGFuY2llbnQ= 6156\nIHBlcmZvcm1lZA== 6157\nQVRF 6158\nIG5laXRoZXI= 6159\naWVuY3k= 6160\nIG1hbnVmYWN0dXJl 6161\nIFBhaw== 6162\nIHNlbGVjdGVk 6163\nIG1pbmU= 6164\nIHVsdGltYXRlbHk= 6165\nIGV4cGxhbg== 6166\nIGxhYmVs 6167\nIFNlcnZpY2Vz 6168\ncmlidXRlZA== 6169\nVHJ1bXA= 6170\nIHN5bg== 6171\nIFVsdA== 6172\nU0M= 6173\nIG1lYXQ= 6174\nIGdpYW50 6175\nIFdhcnM= 6176\nIE9O 6177\nIGFkbQ== 6178\nIGludGVycHJldA== 6179\nIGV2ZW5pbmc= 6180\nIGV2aWw= 6181\nIEJvc3Rvbg== 6182\nIFdpbGQ= 6183\nIMM= 6184\nIEJpdGNvaW4= 6185\nIEFtYXpvbg== 6186\nRHI= 6187\nIEluZm9ybWF0aW9u 6188\nIG9idmlvdXNseQ== 6189\nIGFkdmFuY2Vk 6190\nUGhvdG8= 6191\nb2xhcg== 6192\nIHdlYXRoZXI= 6193\nIHN5bWJvbA== 6194\nIHNvbGU= 6195\nIHBvdGVudGlhbGx5 6196\nb3N0ZXI= 6197\nIG9yaWdpbmFsbHk= 6198\nbXVu 6199\nMzAw 6200\nYXpl 6201\nZXNzaW9ucw== 6202\nIGRlY2s= 6203\nIHN0b29k 6204\nIHlvdXRo 6205\nIEJlcm4= 6206\nUmVw 6207\nIFRlc3Q= 6208\nIGJhc2ljYWxseQ== 6209\nb3RpYw== 6210\nIGludm9sdmU= 6211\nb2xpdA== 6212\nbHlu 6213\nU2Vl 6214\nIGFpcmNyYWZ0 6215\nIGNvbmZpcm0= 6216\nRVc= 6217\nIG1lc3NhZ2Vz 6218\nIFJpY2hhcmQ= 6219\nIGtpdA== 6220\nIHByb2hpYg== 6221\nIHZ1bG5lcg== 6222\naXN0ZXJz 6223\nIGV4aXN0ZW5jZQ== 6224\nIHR1cm5pbmc= 6225\nIFNQ 6226\nIGRlc2lyZQ== 6227\nIGZsYXQ= 6228\nIG1lbnQ= 6229\nc2Vhc29u 6230\nYW5nZXM= 6231\nIG5laWdoYm9yaG9vZA== 6232\nIExha2U= 6233\nQVRJT04= 6234\nIHBvaW50ZWQ= 6235\nYnVy 6236\nIGlubm92 6237\ndWNrcw== 6238\nVUw= 6239\nIHByb2Zlc3Nvcg== 6240\nIGV4cHJlc3NlZA== 6241\nQUI= 6242\naWNpb3Vz 6243\nIDIwMDI= 6244\nIERldg== 6245\nIHNlc3Npb24= 6246\nIGJhcmU= 6247\nc2Vu 6248\nIGRpc3M= 6249\nIENhdGg= 6250\nIFBhc3M= 6251\nIFBvaW50 6252\nIGRvY3Rvcg== 6253\nb3Jyb3c= 6254\nYWlsZWQ= 6255\nIFJ1Yg== 6256\nIERD 6257\nIENoYXJs 6258\ncGVyc29u 6259\nIHdyaXRlcg== 6260\naWdodGVycw== 6261\ndXJlYXU= 6262\nIG9ibGln 6263\nIHJlY29yZGVk 6264\nIGJyb2tl 6265\nIG9yZGVycw== 6266\naWx0eQ== 6267\nIG1vdGlvbg== 6268\naW5pdHk= 6269\nbGF3 6270\nYWRpdW0= 6271\nIGltbWlncmF0aW9u 6272\nIGNvbnRyYXN0 6273\nIGJhdHQ= 6274\nIGV4Y2VsbGVudA== 6275\nIHRlY2huaWNhbA== 6276\nYW1p 6277\nIHR1bg== 6278\nIGNsb3Vk 6279\nIFllYXI= 6280\nZ2Vvbg== 6281\nIGNyZWF0aW9u 6282\nIHN0cmFuZ2U= 6283\nIGF1dGg= 6284\nIGZvcnQ= 6285\nYm9ybg== 6286\nIGV4dGVudA== 6287\nIFRvZGF5 6288\nIENsdWI= 6289\nIHJhaW4= 6290\nIHNhbXBsZQ== 6291\nIGFjY2VwdGVk 6292\nIHRhY3Q= 6293\nIGZpcmVk 6294\nIFNvbg== 6295\nIHN0YW5kcw== 6296\nIGJvb3Q= 6297\nIDQ3 6298\nIHN0YXRlbWVudHM= 6299\nIHZlcnNpb25z 6300\nIHNlbGxpbmc= 6301\nb3VuZGVk 6302\nIDE5OTA= 6303\nIHdlcmVu 6304\nIFdhdGNo 6305\nIGV4cGVyaW1lbnQ= 6306\nUG9zdA== 6307\nIHJldGFpbA== 6308\ndWxlZA== 6309\nSW5zdA== 6310\ndW50ZQ== 6311\n44O8 6312\nIGRlcGFydA== 6313\nIGJvbmQ= 6314\naXZlcnk= 6315\nb21wbA== 6316\nIHJlYWN0aW9u 6317\nIFN5cmlhbg== 6318\nIFBhYw== 6319\nYXBwZWQ= 6320\nYW5pZWw= 6321\nRFA= 6322\nIHJlc29sdXRpb24= 6323\nIHJlYWN0 6324\nIGFwcHJvdmVk 6325\nb25vbQ== 6326\nbW9uZA== 6327\nIE9mZmlj 6328\nLS0t 6329\nIHJlcGxhY2U= 6330\nIHRhY2s= 6331\nIHNwb3J0 6332\nIGNoYWlu 6333\nIGVtZXJnZW5jeQ== 6334\ncmFk 6335\nIFBhbGVzdGlu 6336\nIDQ2 6337\nIGF1dG9tYXRpY2FsbHk= 6338\nIHJvdXRl 6339\nIHBhbA== 6340\nIGJhbmtz 6341\nIFBhcmlz 6342\nIE1lZGlh 6343\ncm9hZA== 6344\naWNpbmc= 6345\naXh0 6346\naXN0ZWQ= 6347\nIGdyZXc= 6348\nIGNvb3Jk 6349\nIFdoZXJl 6350\nb21pbg== 6351\nIHN1YnM= 6352\n77+977+9 6353\nIMKx 6354\nIGNvcnBvcmF0ZQ== 6355\nIHNlbGVjdGlvbg== 6356\nbm9vbg== 6357\nIFJlcG9ydA== 6358\nY3M= 6359\nY2x1ZGluZw== 6360\nb3JkZXJz 6361\nYW5jaGU= 6362\nIEl0cw== 6363\nIHNsb3dseQ== 6364\nIEVneXB0 6365\nIEFjYw== 6366\nIGNvbGxl 6367\naXF1ZXM= 6368\nRVg= 6369\nIGF0dGVtcHRz 6370\ndXJs 6371\nIENyb3Nz 6372\nIGZpbmRpbmdz 6373\nIFND 6374\nIE9S 6375\nIGluZGV4 6376\nZW5zaXR5 6377\nIFdheQ== 6378\nIExhbmQ= 6379\nIHNob2Nr 6380\nZGlz 6381\nIGR5bmFt 6382\nIGNhcnQ= 6383\nbW9zcA== 6384\nU2luY2U= 6385\naWVzdA== 6386\nIEJveQ== 6387\nIHN0b3Jt 6388\nIENvbnRpbg== 6389\nMjAxMw== 6390\naGV3 6391\naWxpdA== 6392\nIGVzc2VudGlhbA== 6393\naXF1aWQ= 6394\nT3RoZXI= 6395\naXZlcmVk 6396\nIHJlYXNvbmFibGU= 6397\nQWN0 6398\nIHN1YnNlcXU= 6399\nIFBhY2s= 6400\nIEZvcnQ= 6401\nIGNvbnNpZGVyaW5n 6402\nIHVuaXZlcnNpdHk= 6403\nbG9n 6404\nIG1hcnJpZWQ= 6405\nIGlsbHVzdA== 6406\nIFRydWU= 6407\no48= 6408\nIG51bWVyb3Vz 6409\ncmFzdHJ1Y3R1cmU= 6410\nIHNlcmlvdXNseQ== 6411\nIHJlZmVycmVk 6412\ndWE= 6413\nIGNvbnNpc3RlbnQ= 6414\nb25uYQ== 6415\nIFJlYWw= 6416\ncnVwdGlvbg== 6417\nY2lwbGVz 6418\nIGZhY3Rz 6419\nOTE= 6420\nb3Rlcw== 6421\nZXJn 6422\nVGhlbg== 6423\nIGFjY29tcGw= 6424\nTm90ZQ== 6425\nIHJldmVudWU= 6426\nIHBhc3Npbmc= 6427\nIG1hbA== 6428\nZWVu 6429\nIFlldA== 6430\nIGdhdGhlcg== 6431\ndGVyZGF5 6432\nZXdvcms= 6433\nIEF1dGhvcg== 6434\nUGU= 6435\nIG9wdGlt 6436\nIHJ1Yg== 6437\nIOijjw== 6438\nIHVua25vd24= 6439\nc3RvbmU= 6440\nIHVuaW9u 6441\nb2x2ZQ== 6442\nIG9wcG9ydHVuaXRpZXM= 6443\nIGJyb3dzZXI= 6444\nIFdhbA== 6445\nIENvc3Q= 6446\nIHJlcG9ydGluZw== 6447\nc3Rz 6448\ncGV0 6449\nIHNhbmQ= 6450\nIHN1ZGRlbmx5 6451\nIHN1cnByaXNpbmc= 6452\nIFZS 6453\nIHNvbWV3aGF0 6454\nIEJhcw== 6455\ndWx0dXJl 6456\naXp6 6457\nIENE 6458\nIGNoYWxsZW5nZXM= 6459\nIHNldHRpbmdz 6460\nIGV4cGVyaWVuY2Vz 6461\nIEZ1bGw= 6462\nIGNhbm4= 6463\nIHJlY2VpdmluZw== 6464\nRVNU 6465\nIGpvaW50 6466\nIGN1bHR1cmFs 6467\nIGFzdA== 6468\nODI= 6469\nYXN0ZXJu 6470\nY2VpdmVk 6471\nIENydQ== 6472\nIGJ1bGw= 6473\ncGlyZWQ= 6474\nYW1t 6475\nIGZhY2luZw== 6476\ncG93ZXI= 6477\nIGJvc3M= 6478\nIEhvbA== 6479\nIGluc3Ry 6480\nIGluY3JlYXNpbmdseQ== 6481\nIHNoaWZ0 6482\nIHN0cmVldHM= 6483\nIFdpbGxpYW1z 6484\nYWJi 6485\nIGxpZQ== 6486\nIGxhdWdo 6487\nIENh 6488\nUEw= 6489\nIGFkdWx0cw== 6490\nIGN1c3RvbWVy 6491\nIG9idGFpbmVk 6492\nIHN1cHBvcnRpbmc= 6493\naHRtbA== 6494\nZmlyZQ== 6495\nIGRldGFpbGVk 6496\nIHBpY2tlZA== 6497\nIFJpZ2h0 6498\nbGRlcg== 6499\nRUU= 6500\nc3Rvb2Q= 6501\nIEtpbQ== 6502\nIHdpcmU= 6503\nIHNpZ2h0 6504\nIGRldmVsb3BlcnM= 6505\nIHBlcnNvbnM= 6506\nIHNhZA== 6507\nIGN1cA== 6508\nIHdhcm5pbmc= 6509\nIGJveXM= 6510\nbG9uZw== 6511\nIGJpcmQ= 6512\nZm8= 6513\nIHdhbA== 6514\nIG9ic2VydmVk 6515\nIHpvbmU= 6516\naXZlbmVzcw== 6517\nIGNoYW5uZWw= 6518\nY3JpcHQ= 6519\nIHJlZnVzZWQ= 6520\nIEFnYWlu 6521\nIHN1Yw== 6522\nIHNwb2tlc21hbg== 6523\nIFJlZg== 6524\ncml0ZQ== 6525\nb3VzdG9u 6526\n44Oz 6527\nIFNoZXI= 6528\nIGFjdHM= 6529\nIE5hbWU= 6530\nIHN0cnVnZ2xl 6531\nYXJyeQ== 6532\nb21ldGltZXM= 6533\nIGRpc2NyaW0= 6534\nSFQ= 6535\nIGNhdGVnb3J5 6536\nIHJlYWxpemU= 6537\nIGVtcGxveWVl 6538\nIEFmZ2hhbg== 6539\nZW5nZXI= 6540\nIGd1bnM= 6541\nIFN0ZXZl 6542\nIE1vdA== 6543\nIE9s 6544\nb2tlZA== 6545\nIHRoaWNr 6546\nIGZhaXJseQ== 6547\naWxseQ== 6548\nIHN1cnZl 6549\nIE1hdA== 6550\nd2VpZ2h0 6551\n4pQ= 6552\nIHRyb29wcw== 6553\nIGFnZW50cw== 6554\nIGJhdHRlcnk= 6555\nIG1vdGl2 6556\nw6E= 6557\nU2Vj 6558\nZGVu 6559\nb3Zlcnk= 6560\nTFM= 6561\nIGZsdQ== 6562\nIGNvbmZpZGVudA== 6563\nIE9wZXI= 6564\nIGVtcHR5 6565\nIHBoZW4= 6566\nIHNlY3Rvcg== 6567\nIGV4Y2l0ZWQ= 6568\nIHJlbW90ZQ== 6569\nYXBo 6570\nb2Vu 6571\nIGRlc3Ryb3llZA== 6572\nIG1vcmFs 6573\nIEhQ 6574\nIFJvbg== 6575\nIGRyZXNz 6576\nIEJhdA== 6577\nIGxpdA== 6578\nIE1T 6579\nIGFm 6580\nSEw= 6581\ncnVt 6582\naXNtcw== 6583\nIHNob3VsZG4= 6584\nIHN5bXB0 6585\nIFRvcm9udG8= 6586\naGV0aWM= 6587\nIGNhcmJvbg== 6588\nIGluc3RhbGxlZA== 6589\nIHZpb2xlbnQ= 6590\nIHNvbGFy 6591\namE= 6592\nIHByYWN0aWNlcw== 6593\nIHJpZGU= 6594\nIFBlbm4= 6595\nIGltcHJvdmVk 6596\nIGF1ZGlv 6597\nIGJlaGF2aQ== 6598\nIFBT 6599\nIGVhdGluZw== 6600\nRGF0YQ== 6601\nIFJldmlldw== 6602\ncGFzcw== 6603\nY2xhaW0= 6604\ndWF0ZWQ= 6605\nYW5nZXJz 6606\nY2hlbg== 6607\nIHByb3BlcnRpZXM= 6608\nIGFueXdoZXJl 6609\nQW5vdGhlcg== 6610\nIGJsb3c= 6611\nIEphY2tzb24= 6612\nIHByb3Vk 6613\nIHBsYW5l 6614\nbGluZXM= 6615\nIHNxdWFyZQ== 6616\nIHByb29m 6617\nYW5zYXM= 6618\nIHRhbGtlZA== 6619\nbWFrZXJz 6620\nIHNpc3Rlcg== 6621\nIGhvbGRz 6622\nIHJlc2lkZW50 6623\nID09 6624\nIHJlc2lzdGFuY2U= 6625\nIHNwbGl0 6626\nIHByb3NlY3V0 6627\nIGNvbmZpZGVuY2U= 6628\ncmVzZW50cw== 6629\nIGN1dHM= 6630\nIGV4Y2VwdGlvbg== 6631\nIHplcm8= 6632\nR2V0dHk= 6633\nIGNvcHlyaWdodA== 6634\nIHRvdGFsbHk= 6635\nb3JtYWw= 6636\naWZpY2F0aW9ucw== 6637\nIEF1c3RyYWxpYW4= 6638\nIHNpY2s= 6639\nIDE1MA== 6640\nIGhvdXNlaG9sZA== 6641\nIGZlZXM= 6642\nIGRyaXZlcnM= 6643\nb2dlbg== 6644\nIE5Z 6645\nIG5lY2Vzc2FyaWx5 6646\nIHJlZ3VsYXRpb25z 6647\nZWFyaW5n 6648\nc2w= 6649\nIHBlcnNwZWN0aXZl 6650\nY2FyZQ== 6651\naWNpYWw= 6652\nSGlz 6653\nIGVzY2FwZQ== 6654\nIHN1cnByaXNlZA== 6655\nIFZhbg== 6656\ndXJyZW50 6657\nIHZhYw== 6658\nODE= 6659\nIFRodXM= 6660\nIGVtcGhhcw== 6661\nIENoYW1waW9ucw== 6662\nIEljZQ== 6663\nIG5hcnI= 6664\nIGhlYWRz 6665\nIGNhdXNpbmc= 6666\nYmVs 6667\nZm9ydHVuYXRlbHk= 6668\nIE1h 6669\nIHRhcmdldHM= 6670\nY2lwbA== 6671\nIGFmdGVybm9vbg== 6672\nIGFkZHM= 6673\nIE1heWJl 6674\nIEZvdXI= 6675\nZXNzZWQ= 6676\ncGxldGU= 6677\nIHVzdWFs 6678\nY2hv 6679\naW5ndQ== 6680\nIHdpdGhk 6681\nIEVuZXJneQ== 6682\nIEVjb25vbQ== 6683\nT08= 6684\nIGFydGljbGVz 6685\nIGluanVyZWQ= 6686\nIG1hbmFnZQ== 6687\nIGV4cGxhaW5z 6688\nIGRpYWdu 6689\nUmVj 6690\nYXR1cmVz 6691\nIGxpbmtlZA== 6692\nIGRpc2N1c3NlZA== 6693\nIGV4cGxv 6694\nIG9jY2FzaW9u 6695\nYXRoYW4= 6696\nIG9wcG9zaXRl 6697\nIGZhY2Vz 6698\nIGRlbmllZA== 6699\nIEtuaWdodA== 6700\nIG51dA== 6701\nIGFwcHJveGltYXRlbHk= 6702\nIGRpc2FwcG9pbnQ= 6703\nb255bW91cw== 6704\nIEJlc3Q= 6705\nIExv 6706\nIEh5 6707\nIEFmZg== 6708\nIHZvdGluZw== 6709\nYW53aGlsZQ== 6710\nIElJSQ== 6711\nIGluc3RpdHV0aW9ucw== 6712\nYWdyYW0= 6713\nIERhaWx5 6714\nIGRyYWc= 6715\nIG5lYXJieQ== 6716\nIGd1aWx0eQ== 6717\nIGNvbnZlcg== 6718\nUHJl 6719\nc2hpcA== 6720\nIHJld2FyZA== 6721\nIHBoaWxvc29waA== 6722\nIFNT 6723\ndWdo 6724\nIGFwcHM= 6725\nZnJpZW5k 6726\nIHVwcGVy 6727\nIGFkdmVydA== 6728\nIHNub3c= 6729\nIGZydXN0 6730\nIG91cnNlbHZlcw== 6731\nRnI= 6732\nIERpZQ== 6733\nYW1waW9u 6734\nIGRpc21pc3M= 6735\nIGNlcmU= 6736\nIHNpZ25hbA== 6737\nZnJvbQ== 6738\nICku 6739\nIDUy 6740\nIGNyaW1lcw== 6741\naXRvcnM= 6742\nZXN0aXZhbA== 6743\ndXNldW0= 6744\nIGNvdW5jaWw= 6745\nIFNhdWQ= 6746\nTWF5 6747\nIEd1bg== 6748\naWNpYW4= 6749\nZXRoZXI= 6750\nIHN1ZmZpY2llbnQ= 6751\nIEhlbg== 6752\nc29sZQ== 6753\nIGhpc3RvcmljYWw= 6754\nIEZhcg== 6755\nIFR1cm4= 6756\nIHBpbg== 6757\nIHN1Y2NlZWQ= 6758\nbWF0 6759\nbHltcA== 6760\nIHRyYWRpdGlvbg== 6761\nIE9r 6762\nIGNybw== 6763\nIGRlc2NyaXB0aW9u 6764\nYWxsZQ== 6765\nIHNreQ== 6766\nVGU= 6767\nIHdpZGVseQ== 6768\nIHdhdmU= 6769\nIGRlZmluaXRpb24= 6770\nIEpld3M= 6771\nIGN5Y2xl 6772\nIHJlZmVyZQ== 6773\nIGJyaW5ncw== 6774\ndXNhbA== 6775\nIGFsaXZl 6776\nIGZyZXF1ZW50bHk= 6777\nIGludGVudGlvbg== 6778\nIENvbnRyb2w= 6779\nbHY= 6780\neXN0ZW0= 6781\nIHByaXZhY3k= 6782\nZ2VudA== 6783\ncmVuY2U= 6784\nIFF1ZXN0 6785\nIENocmlzdG1hcw== 6786\nIHJhaWw= 6787\nIGNvb3Blcg== 6788\nIHRlc3RlZA== 6789\nIENhcHQ= 6790\nYXNrcw== 6791\nIGNvbWZvcnRhYmxl 6792\nIGRlbGl2ZXJlZA== 6793\nc2NhcGU= 6794\nIGRlcHRo 6795\nIEdPUA== 6796\nIHdyaXRlcw== 6797\nIGFzc2V0cw== 6798\nIHNhdg== 6799\naW1lbnRz 6800\nIHRyYW5zaXRpb24= 6801\nIGFydGlzdA== 6802\nIExvb2s= 6803\nIGxvYg== 6804\nIGNvbXBvbmVudHM= 6805\nYXJpdHk= 6806\nIHdhbGtlZA== 6807\nIHJvb3Q= 6808\nIHBhcnRpY2lwYW50cw== 6809\nIG5vdGljZWQ= 6810\nIHJlc2M= 6811\nIG5hdg== 6812\nIEFkbWluaXN0 6813\nZGE= 6814\ndXRyYWw= 6815\ncGxhdGU= 6816\nIGltcG9ydGFuY2U= 6817\nIGFzc2VydA== 6818\naW91c2x5 6819\nY3JpcHRpb24= 6820\nIGluanVyaWVz 6821\nIENoZWNr 6822\nIHJlZ2lzdGVyZWQ= 6823\nIGludGVudA== 6824\nIG1pc3NlZA== 6825\nb2dyYXBoaWM= 6826\nIHNlbnRlbmNl 6827\nb3VudGVy 6828\nIGFzc2lzdGFuY2U= 6829\nZXZpbg== 6830\nIGRhdGFiYXNl 6831\nIGJ1aWxkaW5ncw== 6832\nIGNsYXNzaWM= 6833\nIHRoaW5rcw== 6834\nIE9oaW8= 6835\nUHI= 6836\ndWdn 6837\nIGZlZQ== 6838\ncGFu 6839\nIGVmZmVjdGl2ZWx5 6840\nIGZhY2lsaXR5 6841\nIGJlYXI= 6842\nIGNoYXB0ZXI= 6843\nIGRvZ3M= 6844\nIENvbHVtYg== 6845\nIGxhdHRlcg== 6846\naXRpYWw= 6847\nIGFkbWl0dGVk 6848\nVFY= 6849\nIEdlb3Jn 6850\nIHBvc3Rz 6851\nXFw= 6852\nIGxhd3llcg== 6853\nIGVxdWl2YWw= 6854\nIG1hbmQ= 6855\nIGNvbnRyb2xsZWQ= 6856\nIFdhbGs= 6857\nIEFuZHJldw== 6858\nIG1lbnU= 6859\nYW1lbnRhbA== 6860\nIHByb3RlY3RlZA== 6861\ndmE= 6862\nIGFkbWluaXN0cg== 6863\nb3JhbA== 6864\nIHJlaW4= 6865\nIFNhcg== 6866\nIGFtb3VudHM= 6867\nIG5hdGl2ZQ== 6868\nIE1vb24= 6869\nIHJlcHJlc2VudHM= 6870\nIGFiYW5kb24= 6871\nIGNhcnJ5aW5n 6872\nIHRhbms= 6873\nbWFyeQ== 6874\nIGRlY2xhcmVk 6875\nVHViZQ== 6876\nIGhhdA== 6877\nIHB1bmlzaA== 6878\nZWxsZWN0 6879\nbWVz 6880\nIHVuaXZlcnNl 6881\nIFJvZA== 6882\ncGh5 6883\nIGluZnJhc3RydWN0dXJl 6884\nIDUx 6885\nIG9wcG9zZWQ= 6886\nb3dudA== 6887\nY2E= 6888\nIE1ha2U= 6889\nIGhhcmR3YXJl 6890\nIGNvZmZlZQ== 6891\nUmVs 6892\nYmFs 6893\nd29ybGQ= 6894\nIFNhZg== 6895\nIFNlYQ== 6896\naW5hbHM= 6897\nIG93bmVk 6898\nIGhhbGw= 6899\nZXJzaW9u 6900\nIGRlc2NyaWJl 6901\nIFBvdA== 6902\nIHBvcnRpb24= 6903\nIGF0bW9zcA== 6904\nIGdvdmVybm1lbnRz 6905\nIGRlcGVuZGluZw== 6906\nIG9mZmVuc2U= 6907\nIHRyaWNr 6908\nYXdh 6909\nIExpbmU= 6910\nIFZpcw== 6911\nIEhhcmQ= 6912\nIE9yaWc= 6913\nIENsaWNr 6914\nIGRlc2s= 6915\nIFZhbGxleQ== 6916\nIFNvdg== 6917\nIG1vdmllcw== 6918\nIHJlbWFyaw== 6919\nIG1haWw= 6920\nIGNvbnNjaW91cw== 6921\nIHJ1bGluZw== 6922\nIFJpZ2h0cw== 6923\nIG1lZGlj 6924\naGVudA== 6925\nIFdvbWVu 6926\nPjw= 6927\nIHJlcGxhY2Vk 6928\nIFByZW0= 6929\nIFRoYW5rcw== 6930\nIHJlbmV3 6931\nIEJhbGw= 6932\naWZvcm0= 6933\nIHNob3Rz 6934\nQ29tbQ== 6935\nIGFybWVk 6936\nIGNvbnN0YW50 6937\nIHRhc3Rl 6938\nIHJlYWxpemVk 6939\nIGJ1ZmY= 6940\nIG1v 6941\nIGVmZmljaWVudA== 6942\nTW9zdA== 6943\nb3JhdGlvbg== 6944\naWZpZXM= 6945\nIGNvbW11bmljYXRpb24= 6946\nIGZsb29k 6947\nIGNvbnNlcXVlbmNlcw== 6948\nIGFueXdheQ== 6949\naWdn 6950\nIEdN 6951\nIFRoYW5r 6952\nIGlyb24= 6953\nIGV2b2x1dGlvbg== 6954\nIENvcA== 6955\ndHdpdHRlcg== 6956\nIDk1 6957\nIHJlbGF0aW9uc2hpcHM= 6958\nYWRlbA== 6959\nIFlvdW5n 6960\nIHByb3Bvc2Fs 6961\nYXllcnM= 6962\ndWlsZGluZw== 6963\nIEhvdA== 6964\nT1JF 6965\nY29z 6966\nIGNvbGxhYm9y 6967\nUEc= 6968\nYXh5 6969\nIGtub3dpbmc= 6970\nIHN1cHBvcnRz 6971\nb3dlZA== 6972\nIGNvbnRyb2xz 6973\nIG1lcmVseQ== 6974\ndW1lcg== 6975\nIGF0aGxldA== 6976\nIGZhc2hpb24= 6977\ncGF0aA== 6978\nIGdpZnQ= 6979\nIGVyYQ== 6980\nQU5E 6981\nIGtpbmRz 6982\nIEtvcmVhbg== 6983\nIGxlZ2l0 6984\ndWxvdXM= 6985\nIGVzc2VudGlhbGx5 6986\nIHRoZXJhcA== 6987\nbmlj 6988\nIHN1ZmZlcmVk 6989\nIGh1cg== 6990\nIHByb21pc2U= 6991\nIGV4Y2Vzcw== 6992\nIG92ZXJ3 6993\nIHByaW1l 6994\nIEhvdXN0b24= 6995\nZXJyeQ== 6996\nIE1z 6997\nUlM= 6998\nMjAxMg== 6999\nIHN0b3Jlcw== 7000\nIE9seW1w 7001\nIGpvdXJuZXk= 7002\nQWx0aG91Z2g= 7003\nU3Vi 7004\nIEVkdWM= 7005\nIENoYXB0ZXI= 7006\nIHJlcXVlc3Rz 7007\nIGNvbnN1bWVycw== 7008\nIHRpbnk= 7009\nIGlzb2w= 7010\nIEZhaXI= 7011\nYmE= 7012\nIFlPVQ== 7013\nIGNyYXNo 7014\nY2VsZXI= 7015\nIGVtb3Rpb25hbA== 7016\nIGdvb2Rz 7017\nIGVsZWN0ZWQ= 7018\nIG1vZGVy 7019\nIExpbnV4 7020\nIGJsb2Nrcw== 7021\nIGlzbGFuZA== 7022\nIFNvY2lldHk= 7023\nIGVsZWN0aW9ucw== 7024\nIGJyb2FkY2FzdA== 7025\nIGNoZWFw 7026\nIG5hdGlvbnM= 7027\nIHNlYXNvbnM= 7028\nNDAw 7029\nIHdhc3Rl 7030\nIFNhdA== 7031\nIGZpZWxkcw== 7032\nZW1wbG95 7033\nIHByb2ZpbGU= 7034\nIGF1dGhvcnM= 7035\nQUxM 7036\nIEdyYQ== 7037\nd2VzdA== 7038\nIFR5 7039\nIGRlYXRocw== 7040\nIHZhY2M= 7041\nIGZvcm1lZA== 7042\nIGR1 7043\nIG9uZ29pbmc= 7044\nIE11c2xpbXM= 7045\nZWxm 7046\naWd1cmU= 7047\nIGFzc3VtZQ== 7048\nIFVrcmFpbmU= 7049\nd2F0ZXI= 7050\nIGNvYXN0 7051\nIHZvdGVk 7052\nZ29y 7053\nIEFT 7054\nIE1pY2hpZ2Fu 7055\nYXph 7056\nIEFybQ== 7057\naXJv 7058\nIGZsZXg= 7059\nYXN0ZXJz 7060\nJyc= 7061\nIHdlbGNvbWU= 7062\nYXJs 7063\nIGxvY2F0aW9ucw== 7064\naWdhdGlvbg== 7065\nIEZpbA== 7066\nIGJ1eWluZw== 7067\nIGFyY2hpdGVjdA== 7068\nIGhhcmRlcg== 7069\nIEN1Yg== 7070\nIGludGVyZmFjZQ== 7071\nIHJlc3RhdXJhbnQ= 7072\nIGRpc2NvdmVy 7073\nIGV4Y2VlZA== 7074\nIGZhdm91cg== 7075\nZ2VyeQ== 7076\nIGR1dHk= 7077\nIHBpdGNo 7078\nYWRvcg== 7079\nIE1hY2g= 7080\nYm95 7081\nIHJlc3BvbmRlZA== 7082\nIGV4dGVuZGVk 7083\naGVycw== 7084\nTWFueQ== 7085\ncmFpZA== 7086\naWZlcg== 7087\nIElucw== 7088\nU2Vy 7089\nIG1lZGl1bQ== 7090\nc2hl 7091\nIFNwb3J0cw== 7092\nIG1hZ2F6aW5l 7093\ndXRhdGlvbg== 7094\nIGxpbWl0cw== 7095\nIEdhbGw= 7096\nIGV4dGVybmFs 7097\ncmF6aWw= 7098\nIHlvdW5nZXI= 7099\ndGxl 7100\nIHJlbWluZA== 7101\nIENPTg== 7102\nIGltbWVkaWF0ZQ== 7103\nIGhpZGRlbg== 7104\nIHZvbHVudGU= 7105\nIHNpbXBs 7106\nb2RjYXN0 7107\nIHBoYXNl 7108\nZHI= 7109\nIHBsb3Q= 7110\nIGV4cG9zdXJl 7111\nUkk= 7112\nb2dyYXA= 7113\ndmlu 7114\nYW5pc2g= 7115\nIEFjYWQ= 7116\nIEVuZ2luZQ== 7117\nIGV4cGFuc2lvbg== 7118\nIFBheQ== 7119\nWW91cg== 7120\nIHB1c2hlZA== 7121\nIEVsbA== 7122\nIEhlYWQ= 7123\nIG1hcmtldGluZw== 7124\nIEFD 7125\na2V0 7126\nIGhpdHM= 7127\nIGdybw== 7128\nIEFnZQ== 7129\nIFNjb3Q= 7130\nXVs= 7131\nIHN0aW0= 7132\nIGlQaG9uZQ== 7133\niJI= 7134\nIG5hcnJvdw== 7135\nIEdldHR5 7136\nIFR1cmtleQ== 7137\nIHBlcmZlY3RseQ== 7138\nIGVuYWJsZQ== 7139\ndXRjaA== 7140\nIHByZWNpc2U= 7141\nIHJlZ2ltZQ== 7142\nIHNoaWY= 7143\nIGNvbXBlbnM= 7144\nZ3Vu 7145\nZGl2 7146\nIGNob3Nlbg== 7147\nIEtlbg== 7148\nQW55 7149\nIHRyZWVz 7150\nIHJlY29tbWVuZGVk 7151\nIFJlbg== 7152\ndWFibGU= 7153\nIEhU 7154\nRm9sbG93 7155\nRUc= 7156\nIEhhbmQ= 7157\nIEtlbm4= 7158\nIGFyZ3VtZW50cw== 7159\nIGV4aXN0cw== 7160\nIGJpa2U= 7161\nIENvbnNlcnY= 7162\nIGJyZWFraW5n 7163\nIEdhcg== 7164\nIGNyYXp5 7165\nIHZpcnR1YWw= 7166\nYXlsb3I= 7167\naXhlbA== 7168\nIDE5ODA= 7169\nIHBlcm1pc3Npb24= 7170\nIFNlcmllcw== 7171\nIGNvbnN1bWVy 7172\nIGNsb3NlbHk= 7173\nY2FsbGVk 7174\nIDU0 7175\nIGhvcGVz 7176\nIGFycmF5 7177\nIFdpbg== 7178\nIExhYm91cg== 7179\nIHNwb25z 7180\nIElyZQ== 7181\nIHBvdw== 7182\nIHJlYWRlcnM= 7183\nIGVtcGxveW1lbnQ= 7184\nIGNyZWF0dXJl 7185\nIHJlc3VsdGluZw== 7186\nIGFjY3VyYXRl 7187\nIG1vbWVudHM= 7188\nIGFyZ3VlZA== 7189\nIHBlZA== 7190\nRHVyaW5n 7191\nIDUz 7192\nIFRhbA== 7193\nIHNvdWdodA== 7194\nIHN1ZmZlcmluZw== 7195\nIGljb24= 7196\nbGVl 7197\nICgk 7198\nYWxpYW4= 7199\nwrA= 7200\nIHByYQ== 7201\nIGJvbnVz 7202\nKCI= 7203\na28= 7204\nIGFjdGluZw== 7205\nREU= 7206\nZmFsbA== 7207\nIGNvbXBhcmlzb24= 7208\nIHNtb290aA== 7209\nIE5BUw== 7210\ndXBw 7211\nIEpvc2VwaA== 7212\nZXBpbmc= 7213\nIFRha2U= 7214\nIE1pZA== 7215\nIHNlbmRpbmc= 7216\nZmFzdA== 7217\nIEZhbGw= 7218\nIGRlYWxpbmc= 7219\ndXNlcg== 7220\nIE9yZ2Fu 7221\nQ28= 7222\nIGF0dGFjaGVk 7223\nIHNlZXM= 7224\nJS4= 7225\nIHR5cGljYWw= 7226\nQVJU 7227\nIGZpbmRz 7228\nIEFzaWE= 7229\ndW1pbg== 7230\nIENvcmU= 7231\nIEVudA== 7232\naW5lbnQ= 7233\ndWNl 7234\nIEJsb29k 7235\nIE5ldmVy 7236\nIGVtYWlscw== 7237\nIGhpZ2hsaWdodA== 7238\nIGNvbmZyb250 7239\nYXR1cw== 7240\ndXRlZA== 7241\nIHVudXM= 7242\nIHRvcGlj 7243\nIEFkYW0= 7244\nIGJsZQ== 7245\nYXRp 7246\nIHVuZGVyc3Rvb2Q= 7247\nU2V0 7248\nc3RydWN0 7249\nVFA= 7250\nIG1vYg== 7251\nYWE= 7252\nIFN0YXJ0 7253\ncGVjdGVk 7254\nc2VsbA== 7255\nIGRlZGljYXRlZA== 7256\nIENB 7257\ndWFu 7258\nIHNvbmdz 7259\nZXNjcmlwdGlvbg== 7260\nIHRlY2g= 7261\nIHJhcGU= 7262\nIGFzaWRl 7263\nIGdyYW50 7264\nIDU2 7265\nc3Vi 7266\nIGFyZ3Vl 7267\nIGNvbnRhaW5pbmc= 7268\nIHNjaGVkdWxl 7269\nIGxpYmVyYWw= 7270\nIHB1YmxpY2x5 7271\nIGhlYXZpbHk= 7272\nIFV0 7273\naW5lcg== 7274\nIFNlY3Rpb24= 7275\nIENhcmU= 7276\nd2VldA== 7277\nbHM= 7278\nRGlz 7279\n4pSA 7280\nIEZvbGxvdw== 7281\nQmFjaw== 7282\nIElU 7283\nIGJlcw== 7284\namk= 7285\nIEhpdA== 7286\nZXN0ZWQ= 7287\nIGV2ZXJ5Ym9keQ== 7288\nIFN3ZWQ= 7289\nIGZlbWlu 7290\nIGZhY2lsaXRpZXM= 7291\nIGNvbnZlbg== 7292\nQ29tcA== 7293\nIE9T 7294\nY29yZQ== 7295\nIGFueA== 7296\nIGRpdmlzaW9u 7297\nIENhbQ== 7298\nIFN0YW4= 7299\nbWF0ZXM= 7300\nIGV4cGxvcmU= 7301\ncGxvbQ== 7302\nIHNoYXJlcw== 7303\ncGxvYWQ= 7304\nYW5lcw== 7305\nIGlkZWFs 7306\nZXRlcnM= 7307\nIEJhc2U= 7308\nIHBsYXN0aWM= 7309\nIGRpc3RpbmN0 7310\nIE5ldHdvcms= 7311\nIFNlYXR0bGU= 7312\nIHRyYWRpbmc= 7313\nZW5zdXM= 7314\naW50ZW5k 7315\nIGV4aGli 7316\nIGluaXRpYWxseQ== 7317\nIEZvb2Q= 7318\nIHRob3VzYW5k 7319\nIEJ1c2luZXNz 7320\nYWN0ZXI= 7321\nIHBhcmFncmFwaA== 7322\nIHJvdWdobHk= 7323\nIHd3dw== 7324\nIGNyZWF0aXZl 7325\nIENvbmY= 7326\nIGNvbnN1bXB0aW9u 7327\nIGZpbG1z 7328\nYWdhbg== 7329\nIG9idGFpbg== 7330\nIHRhbGw= 7331\nIHRvcg== 7332\nIGFja25vd2xlZA== 7333\nIGdyb3du 7334\nYWxv 7335\nS0U= 7336\nIDQwMA== 7337\nZW5kZXJz 7338\ndGFpbmluZw== 7339\nVUc= 7340\nIHN1aWNpZGU= 7341\nIHdhdGNoZWQ= 7342\nIExpc3Q= 7343\nYWxp 7344\ncmVoZW5z 7345\nIHN1cnJvdW5kaW5n 7346\nIHBpcA== 7347\nIGZseWluZw== 7348\nIEphdmE= 7349\nb3JkYW4= 7350\nIHNlcnZpbmc= 7351\naW5hdGlvbnM= 7352\ncG9zdA== 7353\nIHNobw== 7354\nQXY= 7355\nIGphaWw= 7356\nenk= 7357\nIDE5OTk= 7358\nIDwv 7359\nIGxpdGVyYWxseQ== 7360\nIFNpcg== 7361\nIGV4cG9zZWQ= 7362\nIGxpZXM= 7363\nc3Rhcg== 7364\nIGJhdA== 7365\nIGVhcm5lZA== 7366\nIERpZw== 7367\nIHNwZWNpZmllZA== 7368\nIFNlYXNvbg== 7369\nIGRlZ3JlZXM= 7370\nRG9uYWxk 7371\nIGNlbnRyZQ== 7372\nIHNoYXJpbmc= 7373\nIHdpbnRlcg== 7374\nIENP 7375\nQ2hl 7376\nIM4= 7377\nTVA= 7378\nIHVudw== 7379\nIGZld2Vy 7380\nIE1pcg== 7381\nIHNvbWV3aGVyZQ== 7382\nIEtleQ== 7383\nIGF0dGFja2Vk 7384\nIEtpcg== 7385\nIGRvbWFpbg== 7386\nIHN0cm9uZ2Vy 7387\nIDk5 7388\nIHBlbmFsdHk= 7389\nSWQ= 7390\nU2NyaXB0 7391\nIGRlY2xpbmVk 7392\nIG5lY2s= 7393\nIGZyYXVk 7394\nIGN1cnJlbmN5 7395\nIHJpc2luZw== 7396\nUkM= 7397\n4oCm4oCm 7398\nSHo= 7399\nIHRhYg== 7400\nIHRhbGVudA== 7401\nbmFt 7402\nIE5CQQ== 7403\nIHZpbGxhZ2U= 7404\nIGxlZ3M= 7405\nIE5leHQ= 7406\nRWQ= 7407\nIGFjaWQ= 7408\nIGh5ZA== 7409\nODAw 7410\nIGludm9sdmluZw== 7411\nIEltYWdl 7412\nIEJlZm9yZQ== 7413\nRmw= 7414\nIHllc3RlcmRheQ== 7415\nU291cmNl 7416\nIHRlcnJvcmlzdA== 7417\nIHN1cA== 7418\nIHN5bnQ= 7419\nIFNhdWRp 7420\nIHdlc3Q= 7421\nIHJ1 7422\nYnVyZw== 7423\nIHZpc2libGU= 7424\nIHN0cnVjaw== 7425\ncmlzb24= 7426\nIGF3ZXNvbWU= 7427\nIGRyYXdu 7428\nIGFuc3dlcnM= 7429\nIEdpcmw= 7430\nIFJhbQ== 7431\nIHRocmVhdHM= 7432\nIGRlZmVhdA== 7433\nb3NpdA== 7434\nIHZlbnQ= 7435\nYXR1cmFsbHk= 7436\nQW1lcmljYW4= 7437\nZW5kYQ== 7438\nIEhvbHk= 7439\nIHJ1bQ== 7440\nJSw= 7441\nY2FzZQ== 7442\nIEhpc3Rvcnk= 7443\nIFlvdVR1YmU= 7444\nIHNpdHVhdGlvbnM= 7445\nIEROQQ== 7446\nU3Rl 7447\nIHNhdmVk 7448\nSXRlbQ== 7449\nIHJlY2lw 7450\nb2xvZ2lzdA== 7451\nIGZhY2Vk 7452\nIGVsaWc= 7453\nT25jZQ== 7454\nIExp 7455\ndWg= 7456\nIG1pc3Rha2U= 7457\nIERpdmlzaW9u 7458\nIEJlbGw= 7459\nIHN5bXB0b21z 7460\nwq4= 7461\nIGRvbWlu 7462\nIGZhbGxpbmc= 7463\nIGVuZGluZw== 7464\nYXNoZXM= 7465\nIG1hdGNoZXM= 7466\nIE9ubGluZQ== 7467\nIGV4cGxhbmF0aW9u 7468\nRGVm 7469\ncmVkaXQ= 7470\nIGFueW1vcmU= 7471\nIFRvdGFs 7472\nIEZPUg== 7473\ndXNoZWQ= 7474\nIGxldHRlcnM= 7475\nIHJpc2tz 7476\nIE9L 7477\nIHJlcG9ydGVkbHk= 7478\nOlw= 7479\nIHBsYXRl 7480\nIHN1YmplY3Rz 7481\nIGF0dGVtcHRlZA== 7482\naWZpZXI= 7483\naWFuYQ== 7484\nIHVubGlrZWx5 7485\nIFRob3VnaA== 7486\ndW1h 7487\nIEludmVzdA== 7488\nIFByaW4= 7489\naWNhbg== 7490\nIERhcg== 7491\nIENvbG9yYWRv 7492\nYXVn 7493\nIHZlZ2V0 7494\nYW9z 7495\ncmlh 7496\nIHNoZWw= 7497\nIG1hcmtlZA== 7498\nICgp 7499\nIHNwcg== 7500\ncG8= 7501\nIExpbms= 7502\nIGRlZmU= 7503\nIEpy 7504\nIHRoZW1l 7505\nIHBhc3Npb24= 7506\nIFBlbg== 7507\nIGluZm8= 7508\naXplcg== 7509\nIHNoaXQ= 7510\nIENpdmls 7511\nYXBzZQ== 7512\nY3Jl 7513\nIHBvbHk= 7514\nIGNvbXBvbmVudA== 7515\nIENoYXJsZXM= 7516\nIElyZWxhbmQ= 7517\nIFByb3Y= 7518\nIGRvY3RvcnM= 7519\nIGdyYW50ZWQ= 7520\nIHBhaW50 7521\nIGhvbm9y 7522\nIHNtb2tl 7523\nIHBheW1lbnRz 7524\nIHByaW1hcmlseQ== 7525\nIEtpbmdkb20= 7526\ncmljaA== 7527\nYXRlbGw= 7528\nIGRlYWxz 7529\nIHNjaGVkdWxlZA== 7530\nIGZ1bmRhbWVudGFs 7531\nIHByb3RlaW4= 7532\nIG5ld3NwYXBlcg== 7533\nIGNsaWVudHM= 7534\neXRob24= 7535\nIERhdGU= 7536\naHVz 7537\nIGZlZWRiYWNr 7538\nIHN0cmV0Y2g= 7539\nIGNvY2s= 7540\nIGhvdGVs 7541\nIFF1ZWVu 7542\nIHN1Z2Fy 7543\nIGp1 7544\nIG1pbGs= 7545\nIGFwcHJvdmFs 7546\nIExpdmU= 7547\nIGVxdWl2YWxlbnQ= 7548\nZWZ1bGx5 7549\nIGluc2VydA== 7550\nem9uYQ== 7551\nIGV4dGVuc2lvbg== 7552\nZHJp 7553\nSm9obg== 7554\nIGFjY29tcA== 7555\nU20= 7556\nIEZ1bmQ= 7557\nIGNvbnN0YW50bHk= 7558\nIGBg 7559\nIGdlbmVyYXRlZA== 7560\nIEFjdGlvbg== 7561\nIFBzeWNo 7562\nIFRyaQ== 7563\nIHJlY29nbml6ZQ== 7564\nIHZhcnk= 7565\ncGhh 7566\nIFJh 7567\nZGY= 7568\nZXRjaA== 7569\nIFNvdmlldA== 7570\nVHdv 7571\nIHBhdHRlcm5z 7572\nIHByb2Zlc3Npb24= 7573\nYW5pbmc= 7574\nVGltZQ== 7575\nIExpbQ== 7576\nIGNvbG9ycw== 7577\nIEF6 7578\nIFRS 7579\nIGluZmVjdA== 7580\nIHBoZW5vbWVu 7581\nIHNoZWxs 7582\nQWxzbw== 7583\nIHB1dHM= 7584\nIGRlbGl2ZXJ5 7585\nIGJyb3du 7586\nIHByb2Nlc3Npbmc= 7587\nIGxpZ2h0cw== 7588\nZXNzYWdl 7589\nIEJyb29r 7590\nIEF1ZA== 7591\nbGF0aW9u 7592\nIGluZHVzdHJpYWw= 7593\nTGlrZQ== 7594\nIEJyYXppbA== 7595\ncm91cw== 7596\nRVNT 7597\nIEx1Yw== 7598\nIHNvbWVob3c= 7599\nIDg1 7600\nIHByb3BvcnQ= 7601\nIHBvbGl0aWNpYW5z 7602\nIGluZGljYXRl 7603\nIGhvbGU= 7604\nIHRlY2huaXF1ZXM= 7605\nIGNvbXBldGl0aXZl 7606\nIHBocg== 7607\nIHZv 7608\naXN0ZW50 7609\nIERyZWFt 7610\nIGNhbXB1cw== 7611\nIGFzcGVjdHM= 7612\nIGhlbHBmdWw= 7613\nIHNoaWVsZA== 7614\nb3JzZQ== 7615\nIHRyaWdnZXI= 7616\nbWFs 7617\nIDU4 7618\nIHRvcnQ= 7619\nIHBlcnNvbmFsbHk= 7620\nIHRhZw== 7621\nIGtlZXBz 7622\nIFZpZGVv 7623\nIGJlbmNo 7624\nIGdhcA== 7625\nYWlyZQ== 7626\nIGVhc3Q= 7627\nIHJlY292ZXJ5 7628\ncGVyaWFs 7629\nIHByb2ZpdA== 7630\nIE1pYw== 7631\nIDU3 7632\nIGNvbG9u 7633\nIHN0cm9uZ2x5 7634\nc3R5bGU= 7635\nIGFsbGVnYXRpb25z 7636\naGFu 7637\nIHJlcG9ydGVycw== 7638\nam8= 7639\ncmluZQ== 7640\nYXJnZXQ= 7641\nYW5kYWw= 7642\nIDAz 7643\nIGZsYXNo 7644\ndHJhbnM= 7645\nIHN0cmljdA== 7646\nIHBhcmtpbmc= 7647\nIFBha2lzdGFu 7648\nIGxp 7649\nIHdlaXJk 7650\nIEVyaWM= 7651\nIHJlZ2lvbnM= 7652\nIEp1bg== 7653\nIGludGVsbGVjdA== 7654\nIFdI 7655\nb2Rpbmc= 7656\ncmlidXRlcw== 7657\ndXBpZA== 7658\nIFRpdA== 7659\nIGZpbmdlcg== 7660\nb3JpYQ== 7661\nIGVsZXY= 7662\nIEZpZWxk 7663\nIGNvbmNsdXNpb24= 7664\nOzs= 7665\nIGZlZWxpbmdz 7666\nIGV4dGVuc2l2ZQ== 7667\nIG1peGVk 7668\nIG5ldXJv 7669\ndnk= 7670\nIGhhcmFzcw== 7671\nIENpcmM= 7672\nb3VjaA== 7673\nIHRlcnJpdG9yeQ== 7674\nIHN1Y2Nlc3NmdWxseQ== 7675\nTWFy 7676\nIGluZ3JlZA== 7677\nIG92ZXJ3aGVs 7678\nIGxheWVy 7679\nVmlldw== 7680\nIGFsbGllcw== 7681\naWxsYW5jZQ== 7682\nIFRocmVl 7683\nIGJ1bmNo 7684\nIG5vcm1hbGx5 7685\nIG5ldHdvcmtz 7686\nIHNhY3I= 7687\nIENJQQ== 7688\nYmxlcw== 7689\nIGNob3Nl 7690\nIG9wcG9uZW50cw== 7691\nIHJlZ2FyZGxlc3M= 7692\nIGZyYW5jaA== 7693\nIHByZWY= 7694\nIFBv 7695\nIGJyaWRnZQ== 7696\nYW5uYQ== 7697\nIFNpbHZlcg== 7698\nIHdhZ2U= 7699\ncGFnZQ== 7700\ncmlvcg== 7701\nIHJhZGljYWw= 7702\nIExpdHRsZQ== 7703\nIG1hbmlw 7704\nIHNlY3JldGFyeQ== 7705\nIGdhbmc= 7706\nRFI= 7707\nRkE= 7708\nIGRlY2VudA== 7709\nIFNwaXJpdA== 7710\nIHVuY2xl 7711\nIERldmVsb3BtZW50 7712\nIGludmVzdG9ycw== 7713\nIHdhbGxz 7714\nIHB1Ymxpc2g= 7715\nIGdlbmVyYXRl 7716\naXNzaW9ucw== 7717\nY2Fy 7718\nIHByb21vdGU= 7719\nIGN1dHRpbmc= 7720\nIGNoZXN0 7721\nIGRyaW5raW5n 7722\nIGNvbGxlY3RlZA== 7723\nIDcy 7724\nIGhvcGluZw== 7725\nIGVtYnI= 7726\nZ29yaXRo 7727\nIHdhcm5lZA== 7728\nIGluc3RydWN0aW9ucw== 7729\nT0c= 7730\nIERpZA== 7731\nIEFnZW5jeQ== 7732\nIGdlYXI= 7733\nIGNyaXRpY2lzbQ== 7734\nIEZ1cnRoZXI= 7735\nIHV0aWw= 7736\nYW5ueQ== 7737\nUmVk 7738\nIGNvdW5zZWw= 7739\nIEFzaWFu 7740\nIHJlZHVjdGlvbg== 7741\ncG9vbA== 7742\nIHRlYWNoaW5n 7743\nIGRlZXBseQ== 7744\naXk= 7745\nIGVzdGltYXRlcw== 7746\nIGNob2ljZXM= 7747\nIHBlcm1hbmVudA== 7748\naW5lbQ== 7749\na2Vs 7750\nIGZhc2M= 7751\ncHNl 7752\nZmlsZQ== 7753\nIExvdw== 7754\nIFBlcnNvbg== 7755\nIHRvdXJuYW1lbnQ= 7756\nc3RhbA== 7757\nIG1lbA== 7758\nVVNU 7759\nIFJheQ== 7760\nYXpp 7761\nVmFs 7762\nIGNvbnRhaW5lZA== 7763\nIEhvbGx5 7764\nIHdha2U= 7765\nIHJldmVhbA== 7766\nIHByb2Nlc3Nlcw== 7767\nIElTSVM= 7768\nIDA5 7769\nIGJsaW5k 7770\nIHN0ZWVs 7771\nIEJhZA== 7772\nIGNhcmVmdWxseQ== 7773\nYXBweQ== 7774\ncm9pdA== 7775\nIGdhbWluZw== 7776\nIGhvdXNlcw== 7777\nIENvbGw= 7778\nIHRydWNr 7779\nZXJt 7780\nIHNjb3JlZA== 7781\nIG9jY2Fz 7782\ncmV0dXJu 7783\nYm91bmQ= 7784\ndmFy 7785\nIHNoYXJw 7786\nIGFmcmFpZA== 7787\nIEVY 7788\nYW1iZXI= 7789\nY2lmaWM= 7790\nIHNjaGVtZQ== 7791\nTkM= 7792\nIFBvbGl0 7793\nIGRlY2xpbmU= 7794\nIDE5OTg= 7795\nIHB1c2hpbmc= 7796\nIHBvc3Nlc3Npb24= 7797\nIHByaXZpbGU= 7798\nIHRlYWNoZXJz 7799\nIHlpZWxk 7800\nSEE= 7801\nIERhdmlz 7802\naXRsZWQ= 7803\nIyMjIyMjIyM= 7804\nIHJpZw== 7805\nIERhbmllbA== 7806\nYWNvbg== 7807\nIGhpZGU= 7808\ndXRlbg== 7809\nIGNvbGxlYWd1ZXM= 7810\nIHByaW5jaXBsZXM= 7811\nIGxvdWQ= 7812\nIHNpbg== 7813\nIERlbW9u 7814\nIHN0b25l 7815\nIDAy 7816\nIHRhdWdodA== 7817\nIHRlcnJpYmxl 7818\nIHN0dWNr 7819\nIFBvbGljeQ== 7820\ndGVlbg== 7821\nIGltcGxlbWVudGF0aW9u 7822\nIEJCQw== 7823\nIEFQSQ== 7824\nIHdoZWVs 7825\nYWxsYXM= 7826\nIGNoYW1waW9ucw== 7827\nb2xhcnM= 7828\ncGxheWVy 7829\nIHJlcGVhdGVkbHk= 7830\nIFN0aWxs 7831\nIGxpa2Vz 7832\nYXN0eQ== 7833\nZXN0ZXI= 7834\nIENhdGhvbGlj 7835\nUkw= 7836\nIGJhdGg= 7837\nIG5vaXNl 7838\ndGl0bGU= 7839\nIG5vcnRoZXJu 7840\nUGFydA== 7841\nIG1hZ24= 7842\nIGZhYg== 7843\nIEFzaA== 7844\nIGRpc3Bs 7845\nIHRpY2tldA== 7846\nIG11cmQ= 7847\nIGFsb25nc2lkZQ== 7848\nIE11c2lj 7849\nIHJpdmVy 7850\nIFN0ZWVs 7851\nIENM 7852\nIFBsYXllcg== 7853\nIE11bHQ= 7854\nb3dpbmc= 7855\ncmVw 7856\nc2l6ZQ== 7857\nIHR1cg== 7858\nIEdlb3JnaWE= 7859\naXNjYWw= 7860\ncmFjdGlvbg== 7861\nIGNhYmxl 7862\nIDU5 7863\nIHdpbnM= 7864\nIHVwY29taW5n 7865\nIHN1cnZpdmU= 7866\nIGluc3BpcmVk 7867\nIEVkdWNhdGlvbg== 7868\nIHN0YXRpc3RpY3M= 7869\nIEZvb3Q= 7870\naWFtaQ== 7871\nIHllbGxvdw== 7872\nIFBhZ2U= 7873\nLi0= 7874\nIEhhcw== 7875\nIHVyYmFu 7876\nIGF4 7877\nZXNzZWw= 7878\nXCI= 7879\nIHF1YXJ0ZXJiYWNr 7880\nIHJlZ2lzdGVy 7881\nIExhYm9y 7882\nIGFiaWxpdGllcw== 7883\nIEZhbWlseQ== 7884\nIHZhcmlhYmxl 7885\nIFByaWNl 7886\nIGNvbnRlbQ== 7887\nIHRoaW4= 7888\nIEVxdQ== 7889\nZGF0YQ== 7890\nIGdvdHRlbg== 7891\nIGNvbnN0aXQ= 7892\nIGFza3M= 7893\nIHRhaWw= 7894\nIGV4Y2l0aW5n 7895\nIEVmZmVjdA== 7896\nIFNwYW5pc2g= 7897\nIGVuY291cmFnZQ== 7898\naW5zb24= 7899\nIEFo 7900\nIGNvbW1pdG1lbnQ= 7901\nQ1M= 7902\nIHJhbGx5 7903\nIDo6 7904\nIHN1YnNpZA== 7905\nIHNwaW4= 7906\nIGNhcHR1cmVk 7907\nMjAxOA== 7908\nIGlubm9j 7909\nIGFsbGVnZWRseQ== 7910\nIENvbWU= 7911\nIGFydGlzdHM= 7912\nIE51bWJlcg== 7913\nIGVsZWN0cm9uaWM= 7914\nIHJlZ2lvbmFs 7915\nYXBlcw== 7916\nIHdyYQ== 7917\nIG15dGg= 7918\ncHJpc2U= 7919\nIE1pbGxlcg== 7920\nIENyZWF0 7921\nIEVwaXNvZGU= 7922\nYmVsbA== 7923\nIGRpcmVjdGVk 7924\nIGV4dHJhY3Q= 7925\nIHNvcnJ5 7926\nIHZpY2U= 7927\nYWdnZXI= 7928\nIFN1cHBvcnQ= 7929\nIDY2 7930\nIElyb24= 7931\nIHdvbmRlcmZ1bA== 7932\nIGdyYQ== 7933\nTmV0 7934\naW9uZQ== 7935\nRW5n 7936\nIHNoaXBz 7937\naWtlcw== 7938\nIEtldmlu 7939\naXRhcg== 7940\nIGFjdGl2aXN0cw== 7941\ndHJ1ZQ== 7942\nIEFyaXpvbmE= 7943\nZW50aA== 7944\nIERlc3BpdGU= 7945\nIFNF 7946\nIGhhYml0 7947\nZXJuZWw= 7948\nIGlucXU= 7949\nIGFib3J0aW9u 7950\nIHZvaWQ= 7951\nIGV4cGxpY2l0 7952\nIGVuZ2FnZWQ= 7953\nIGFuZ3J5 7954\nIHJhdGluZw== 7955\nIGZyYWc= 7956\nYnJv 7957\naWNraW5n 7958\nZGV2 7959\nIHdvcnJpZWQ= 7960\nIG9ic2Vy 7961\nIGFwYXJ0bWVudA== 7962\nIEdU 7963\nIGVzdGF0ZQ== 7964\nIENvbnN0aXR1dGlvbg== 7965\nZW1vbg== 7966\nIFNub3c= 7967\nIGNvdW50eQ== 7968\nIGRpc2Fn 7969\nIFN0ZXBoZW4= 7970\nIGltbWlncmFudHM= 7971\nd2luZA== 7972\nIE5hdGlvbnM= 7973\nIGZvbGtz 7974\nT3V0 7975\nIGdhbGw= 7976\nIHRhcmdldGVk 7977\nIHN0ZWFk 7978\nIEJvbg== 7979\nIExpYg== 7980\nIGluZm9ybWVk 7981\nIDEyMA== 7982\nY2hhaW4= 7983\naWRlbGluZXM= 7984\nb3JvdWdo 7985\nIGRyaXZlbg== 7986\nIHJlZ3VsYXJseQ== 7987\nIGJhc2tldA== 7988\nIHByaW5jaXBsZQ== 7989\nb2N1bWVudA== 7990\nIHN0dW4= 7991\naWJpbGl0aWVz 7992\nIFJvbWFu 7993\nIEFib3V0 7994\nIGFsZXJ0 7995\nIGRlbW9jcmFjeQ== 7996\nIHJlcHJlc2VudGVk 7997\nSFM= 7998\nY2Vycw== 7999\ncGFyZW50 8000\nQXJ0 8001\ncGFjaw== 8002\nIGRpcGxvbQ== 8003\ncmV0cw== 8004\nIE5P 8005\nIGNhcHR1cmU= 8006\nIEFkdg== 8007\nhKI= 8008\nIGFubm91bmNlbWVudA== 8009\nIExlYXI= 8010\nIGhvb2s= 8011\nIHB1cnM= 8012\nIFN1Y2g= 8013\nIENhbWVy 8014\nIHJlZnVnZWVz 8015\nIFZl 8016\nUG9s 8017\nIHJlY29nbml6ZWQ= 8018\nbGli 8019\nIGhhZG4= 8020\nQXNz 8021\nIHBpbG90 8022\ndXNoaW5n 8023\nIHJldHVybmluZw== 8024\nIHRyYWls 8025\nIFN0b25l 8026\nIHJvdXRpbmU= 8027\nIGNvdXJ0cw== 8028\nIGRlc3Blcg== 8029\nIGZyaWVuZGx5 8030\nIEl0YWx5 8031\nIHBsZWQ= 8032\nIGJyZWF0aA== 8033\nIHN0dWRpbw== 8034\nTlM= 8035\nIGltcHJlc3NpdmU= 8036\nIEFmZ2hhbmlzdGFu 8037\nIGZpbmc= 8038\nIGRvd250 8039\naW5raW5n 8040\nIFJvZw== 8041\naWFyeQ== 8042\nY29sb3I= 8043\nc2V4 8044\nYXJvbg== 8045\nIGZhdWx0 8046\nIE5pY2s= 8047\nRG93bg== 8048\nIFJvc2U= 8049\nIFNvdXRoZXJu 8050\nWFg= 8051\naXNvZGVz 8052\nTGlzdA== 8053\nNjAw 8054\nIG91dGNvbWU= 8055\nZXJy 8056\nIGVsc2V3aGVyZQ== 8057\nIHJldGlyZQ== 8058\nIHBvdW5kcw== 8059\nIEdsb2JhbA== 8060\nUGVvcGxl 8061\nIGNvbW11bmljYXRpb25z 8062\nIGxvYW4= 8063\nIHJhdGlv 8064\nIEVtcGlyZQ== 8065\nIGdvbm5h 8066\nIGludmVudA== 8067\nREY= 8068\nIDE5NzA= 8069\nIENvbW1vbg== 8070\ncGF0 8071\nIHByb21pc2Vk 8072\nIGRpbm5lcg== 8073\nIEhvbQ== 8074\nIGNyZWF0ZXM= 8075\nIG9wZXJhdGU= 8076\ndmVydHk= 8077\nIEpvcmRhbg== 8078\nZXRpbWU= 8079\nIHN1c3RhaW4= 8080\nUmVn 8081\nIGluY3JlZGlibGU= 8082\naW1h 8083\nIHdhcnJhbnQ= 8084\nIG1t 8085\nQXR0 8086\nIGxhd3N1aXQ= 8087\nIHJldmlld3M= 8088\naXR1cmU= 8089\nIFNvdXJjZQ== 8090\nbGlnaHRz 8091\nIEZvcmQ= 8092\nIDYz 8093\nZ3JvdXA= 8094\nc3RvcmU= 8095\nIGZlYXR1cmVk 8096\nIGZvcmV2ZXI= 8097\nIHBvdmVydHk= 8098\nIFBvcA== 8099\nIENOTg== 8100\nYXp6 8101\nYWJpcw== 8102\nYWNoaW5n 8103\nIGxhaWQ= 8104\nIFN1cHA= 8105\nIGZpbHRlcg== 8106\nZW5h 8107\nIENvbW11bml0eQ== 8108\nIGNyZWF0dXJlcw== 8109\ndWN0aW9u 8110\nIFJveWFs 8111\nIGFzc29jaWF0aW9u 8112\nIENvbm5lY3Q= 8113\nIEJyYWQ= 8114\n4paI 8115\nbGVycw== 8116\ndGhlcmU= 8117\nIEdp 8118\nIHZhbHVhYmxl 8119\nQUNL 8120\nIFRheWxvcg== 8121\nIGxpcXVpZA== 8122\nIEF0dG9ybmV5 8123\nIENhcmw= 8124\nIEZpbmFs 8125\nYWdh 8126\nIFdpbHNvbg== 8127\nQmVjYXVzZQ== 8128\nIFByb2Zlc3Nvcg== 8129\nYWth 8130\nIGluY3JlZGlibHk= 8131\ncmFuY2U= 8132\nISk= 8133\nUmVm 8134\nc2s= 8135\nIHNvbHV0aW9ucw== 8136\nIGF0bW9zcGhlcmU= 8137\nIGJsYW1l 8138\ndW1lcw== 8139\nIE5vYg== 8140\nQ0E= 8141\ndW1wcw== 8142\ncmljYWw= 8143\nIFB1dGlu 8144\nIERlc3Q= 8145\nb3JpYw== 8146\nIFBB 8147\nIHJlc3BlY3RpdmVseQ== 8148\nd2Fu 8149\nIGZpZnRo 8150\n4oSi 8151\nIENyeQ== 8152\nIGdvdmVybm9y 8153\ncmVzaWRlbnQ= 8154\nIHB1cmNoYXNlZA== 8155\nIGhhY2s= 8156\nIGludGVuc2U= 8157\nb2Jz 8158\nIG9yaWdpbg== 8159\nIGRlZmluZQ== 8160\nIGNhcmVmdWw= 8161\nKioq 8162\nIHNob3VsZGVy 8163\nQ2xpY2s= 8164\nIHRpZWQ= 8165\nIGRlc3RydWN0aW9u 8166\nb3VyZWQ= 8167\nIG5vYm9keQ== 8168\nIGhv 8169\nIEV4cGVy 8170\nIHRpcA== 8171\nIjs= 8172\nIHRlY2huaXF1ZQ== 8173\nIGp1cg== 8174\nIFBvaw== 8175\nYm93 8176\nIGxlZ2VuZA== 8177\nIGFjY29yZA== 8178\nIGJ1c3k= 8179\nIEludGVs 8180\nIGhhbmc= 8181\nYWtp 8182\nLl0= 8183\n4oCU4oCU4oCU4oCU 8184\nIHN1cmdlcnk= 8185\nIHJlcHJvZHU= 8186\nIHVuaWZvcm0= 8187\nIHNjZW5lcw== 8188\nY29kZQ== 8189\nIDYy 8190\nbGlzaGVy 8191\nIEhhdmU= 8192\ncGhpYQ== 8193\nIGNyeXB0 8194\nIHJlY29u 8195\nIHNjcmVhbQ== 8196\nIGFkb3B0ZWQ= 8197\nIHNjb3Jlcw== 8198\nTmU= 8199\nIEl0YWxpYW4= 8200\naW5jbHVkaW5n 8201\nQk8= 8202\nIGluZGljYXRlZA== 8203\nIGVudGVydGFpbg== 8204\nR3U= 8205\nVGV4dA== 8206\naWVs 8207\nIHR3ZW50eQ== 8208\nIGVuZ2FnZQ== 8209\nb2Zmcw== 8210\nIFBhY2lmaWM= 8211\nIHNtaWxl 8212\nIHBlcnNvbm5lbA== 8213\nIHRvbGVy 8214\nIGRvb3Jz 8215\nIHRvbmU= 8216\nIG1hY2hpbmVz 8217\nIGVudGVyaW5n 8218\ndGVuYW5jZQ== 8219\nQ08= 8220\nIEplcnNleQ== 8221\nIGZvcmVzdA== 8222\nIGhvcnNl 8223\nIGNvbXBsYWludA== 8224\nIFNwcmluZw== 8225\neW8= 8226\nIFBsdXM= 8227\nZWRpbmc= 8228\nIFJldHVybg== 8229\ncXVhcnRlcnM= 8230\naWFscw== 8231\nY293 8232\nIGFjYWRlbWlj 8233\nIGZydWl0 8234\nIDE5OTY= 8235\nb2dldGhlcg== 8236\nIHdpbmU= 8237\nIHB1cnN1 8238\nIFN0ZXZlbg== 8239\nIGxpY2Vucw== 8240\nV2hv 8241\nIGNsb3RoZXM= 8242\ncmVjdGlvbg== 8243\nIHNxdWFk 8244\nIHN0YWJsZQ== 8245\nIHJhdw== 8246\nemVucw== 8247\nU3Rhcg== 8248\ndXRpZXM= 8249\nYW5jZXI= 8250\nIGtleXM= 8251\nIE11 8252\nIGNvbXBsaWNhdGVk 8253\naWdlcg== 8254\nIFRleHQ= 8255\nIGFic29y 8256\nIDY4 8257\nIGZ1bm55 8258\nIHJlbGllZg== 8259\nIExldw== 8260\nIENvb2s= 8261\nIGNoYXJ0 8262\nIGRyYXdpbmc= 8263\nR0U= 8264\nIG1vZHVsZQ== 8265\nIEJ1bGw= 8266\nSUxM 8267\nIHNhbHQ= 8268\nMDAwMDAwMDA= 8269\naWxsZQ== 8270\nIHJlc291cmNl 8271\nYXdheQ== 8272\nYWRlbHBoaWE= 8273\nIEJydQ== 8274\nIDY3 8275\nIHNvbWVib2R5 8276\nIHBhcnRpY2lwYXRl 8277\nIHJvc2U= 8278\nd2VyZWQ= 8279\nIG11c2NsZQ== 8280\nIGNvbnNlbnQ= 8281\nIGNvbnRpbnVpbmc= 8282\nIEd1YXJkaWFu 8283\nIE9yZGVy 8284\ncmVnb24= 8285\nIHJlYXI= 8286\nIHByb3Zpc2lvbg== 8287\nIGxpa2Vk 8288\ncmllbnQ= 8289\nIGJyYQ== 8290\nVHJhbnM= 8291\nIG1lZXRpbmdz 8292\nIHRveA== 8293\nIGNvbnZlbnQ= 8294\nIGF1dG8= 8295\nIHJlY29yZGluZw== 8296\nIFNvZnQ= 8297\nMDAx 8298\nIFJvbGw= 8299\nIHByb2dyYW1taW5n 8300\nIHBpYw== 8301\nIHByb3ZlZA== 8302\nIHN0YWI= 8303\nIEFzdA== 8304\nIGNhcHRpb24= 8305\ndWxhdGluZw== 8306\nIEF0dGFjaw== 8307\nIG5ld2x5 8308\nIDE5OTc= 8309\nZnI= 8310\nIGRpc2NpcGw= 8311\nIEdyZWVr 8312\nIGVkaXRpb24= 8313\nIERvZXM= 8314\nIEJveA== 8315\naWZsZQ== 8316\nYWNrZXQ= 8317\nIHBhc3Nlcw== 8318\nIGd1ZXN0 8319\nIGFjY2VsZXI= 8320\naXRhbHM= 8321\nVUQ= 8322\nIGF1dGhlbnQ= 8323\nIFJlc3Q= 8324\nb3ZhbA== 8325\ndGE= 8326\ndWluZQ== 8327\nIGFybW9y 8328\nIFRvd24= 8329\nIGNvbXBhdA== 8330\nIGluY2hlcw== 8331\nRGVzcGl0ZQ== 8332\nIGFzc2lnbg== 8333\naGVyZW50 8334\nIHByZXBhcmU= 8335\nIE1lZw== 8336\nb2NrZXk= 8337\nIGRlcGVuZHM= 8338\nIHRyYWNrcw== 8339\nd2F0Y2g= 8340\nIGxpc3Rz 8341\nIE5vcnRoZXJu 8342\nIGFsdGVy 8343\ncmVj 8344\nIEVhc3Rlcm4= 8345\nIGNvbmRlbQ== 8346\nIGV2ZXJ5d2hlcmU= 8347\nPyc= 8348\nIGFmZmlsaQ== 8349\nIGZvdWdodA== 8350\nIjp7Ig== 8351\nIG1hYw== 8352\naXRhcmlhbg== 8353\nIHNjb3Bl 8354\nIEFM 8355\nYXdz 8356\nYXJtcw== 8357\nIHF1ZQ== 8358\nIGVuam95ZWQ= 8359\nbmVzb3Rh 8360\nIGFnZ3Jlc3NpdmU= 8361\nIFN0b3J5 8362\nIElW 8363\nIHJlY2lwZQ== 8364\nIHJhcmVseQ== 8365\nIE1lZGljYWw= 8366\ndmFsdWU= 8367\nYW5nZWw= 8368\nYXlpbmc= 8369\nb21ldGhpbmc= 8370\nIHN1YnNlY3Rpb24= 8371\nIHNvdXRoZXJu 8372\nIGZyZXF1ZW5jeQ== 8373\ncmV0ZQ== 8374\ncm9sbGVk 8375\ndWx0cw== 8376\nIE5pYw== 8377\nIGJlaGFsZg== 8378\nIHNlcXVlbmNl 8379\nYWJldA== 8380\nIGNvbnRyb3ZlcnNpYWw= 8381\nIGNvbXByb20= 8382\nIHdvcmtlcg== 8383\nIG1haW5seQ== 8384\nIGFsZ29yaXRo 8385\nIE1ham9y 8386\nb3JjZQ== 8387\nZ2VuZGVy 8388\nIG9yZ2FuaXplZA== 8389\nIGZha2U= 8390\nIGNvbmNsdWRlZA== 8391\nIEVE 8392\nIEV4ZWM= 8393\ncmFnZQ== 8394\nIGNoYW5jZXM= 8395\nYmVycnk= 8396\nIFRyYWQ= 8397\nIGNvbmZpZ3VyYXRpb24= 8398\nIHdpdGhkcmF3 8399\nIGZybw== 8400\ndWRlcw== 8401\nIEJyb3RoZXI= 8402\nIEJyaWFu 8403\nIHRyaWVz 8404\nIHNhbXBsZXM= 8405\nIGJpZA== 8406\nIEdvbGRlbg== 8407\nIHBob3RvZ3JhcGg= 8408\naWZlc3Q= 8409\nIERP 8410\nIFBhcmxpYW1lbnQ= 8411\nKioqKioqKioqKioqKioqKg== 8412\nUmVt 8413\nIGNvbnRlc3Q= 8414\nIHNpZ25pbmc= 8415\ncHg= 8416\nIFplYWw= 8417\n4pSA4pSA 8418\nRWFy 8419\nIGV4aXQ= 8420\nQmVmb3Jl 8421\nIENvcnBvcg== 8422\nbnVsbA== 8423\nbW9udGg= 8424\nIHJhY2lhbA== 8425\nb3R0ZWQ= 8426\nIFZlZw== 8427\nIFJldXRlcnM= 8428\nIHN3b3Jk 8429\ncHNvbg== 8430\nIFJvbW5leQ== 8431\nYWVk 8432\nIHRyaWI= 8433\nIGlubmVy 8434\nIHByb3RvY29s 8435\nIEJp 8436\nIE1pYW1p 8437\nZXZlcmFs 8438\ncHJlc3M= 8439\nIHNoaXBwaW5n 8440\nIEFtZW5kbWVudA== 8441\nIEhvd2FyZA== 8442\nY29ubmVjdA== 8443\nIERpc2M= 8444\nIEphYw== 8445\naWFtb25k 8446\nIFRoZXJlZm9yZQ== 8447\nc2Vz 8448\nIFByaW5jZXNz 8449\nIFVTQg== 8450\nIEFudGg= 8451\nIHN1cnZlaWxsYW5jZQ== 8452\nIGFwb2xvZw== 8453\nIDYx 8454\nb3dh 8455\nIGZ1bGY= 8456\nanM= 8457\nIGx1Y2s= 8458\ndXN0ZWQ= 8459\nIMKn 8460\nbmk= 8461\nIGFudGljaXA= 8462\nZW1hbg== 8463\nIHdpbm5lcg== 8464\nIHNpbHZlcg== 8465\nbGxh 8466\naWNpdHk= 8467\nIHVudXN1YWw= 8468\nIGNyYWNr 8469\nIHRpZXM= 8470\nZXo= 8471\nIHByYWN0aWNhbA== 8472\nIHByb3ZpbmNl 8473\nIFBsYWNl 8474\nIHByaW9yaXR5 8475\nSUNF 8476\nIGRlc2NyaWJlcw== 8477\nIGJyYW5jaA== 8478\nRm9ybQ== 8479\nYXNrYQ== 8480\nbWlzc2lvbnM= 8481\nYmk= 8482\nIHBvcm4= 8483\nIFR1cms= 8484\nIGVudGh1cw== 8485\nIGZpZ2h0ZXJz 8486\nIDA4 8487\nIERldHJvaXQ= 8488\nIGZvdW5kYXRpb24= 8489\nYXZpZA== 8490\nQXJl 8491\nIGp1ZGdtZW50 8492\nY2xpbmc= 8493\nIHNvbHZl 8494\nIERlc2lnbg== 8495\nV2hlcmU= 8496\naGVzaXM= 8497\nIFRybw== 8498\nYWZ0ZXI= 8499\nIG5ldXRyYWw= 8500\nIFBhbGVzdGluaWFu 8501\nIEhvbGx5d29vZA== 8502\nIGFkdmlz 8503\nIE5vbg== 8504\neWVz 8505\nb2xpcw== 8506\nIHJlcHV0YXRpb24= 8507\nIHNtZWxs 8508\nIGJyZWFk 8509\nIEJ1bA== 8510\nIEJlYWNo 8511\nIGNsYWltaW5n 8512\nIGdlbmV0aWM= 8513\nIHRlY2hub2xvZ2llcw== 8514\nIHVwZ3JhZGU= 8515\ncm93cw== 8516\nIGRldmVsb3Blcg== 8517\nIEpvc2g= 8518\nIERpc25leQ== 8519\nZXJ2ZWQ= 8520\naXBhbA== 8521\nIHVuZXg= 8522\nIGJhcmVseQ== 8523\ndGhlbg== 8524\nIFB1Yg== 8525\nIGlsbG5lc3M= 8526\nZXRhcnk= 8527\nIEJhbA== 8528\nIHBhdGNo 8529\nIGJ1dHQ= 8530\nIHN0dXBpZA== 8531\nIERvZw== 8532\nIERhbGxhcw== 8533\nZnJvbnQ= 8534\naWVjZQ== 8535\nIHByb3Rlc3Rz 8536\nIGNoYXQ= 8537\nb2VuaXg= 8538\nIHdpbmc= 8539\nIHBhcmxpYW1lbnQ= 8540\nIDc3 8541\nb3NleHVhbA== 8542\nIHJlbmRlcg== 8543\ncHRpb25z 8544\nIENvYXN0 8545\nb3Nh 8546\nIEdyZWc= 8547\naG9w 8548\nIE1hbmFnZW1lbnQ= 8549\nIGJpdGNvaW4= 8550\nIHJlY292ZXI= 8551\nIGluY29ycG9y 8552\nb3JuZQ== 8553\nIFVzaW5n 8554\nIHByZWNlZA== 8555\nIHRocmVhdGVuZWQ= 8556\nIHNwaXJpdHVhbA== 8557\nIEV2ZW50 8558\nIEZyZWQ= 8559\nIGFkdmVydGlzaW5n 8560\nIGltcHJvdmVtZW50cw== 8561\nIEN1c3RvbQ== 8562\nIGVycm9ycw== 8563\nIHNlbnNpdGl2ZQ== 8564\nIE5hdnk= 8565\nIGNyZWFt 8566\nTG9vaw== 8567\nIGV4Y2x1c2l2ZQ== 8568\nIGNvbXByZWhlbnM= 8569\nIGRlbGVn 8570\nIGNvbmNl 8571\nIHJlbWVt 8572\nIHN0cnVjdHVyZXM= 8573\nIHN0b3JlZA== 8574\nTkQ= 8575\nIDEwMDA= 8576\nVVA= 8577\nIEJ1ZGQ= 8578\nQUY= 8579\nd29tYW4= 8580\nIEFjYWRlbXk= 8581\n8J8= 8582\nc2Vh 8583\nIHRlbXBvcmFyeQ== 8584\nQWJvdXQ= 8585\nZXN0ZXJz 8586\nIHRpY2tldHM= 8587\nIHBvc3Nlc3M= 8588\naW5jaA== 8589\nb3o= 8590\nIGxh 8591\nIGNvbnRyYWN0cw== 8592\nIHVucA== 8593\nIGNpZw== 8594\nIEthdA== 8595\ndWx0dXJhbA== 8596\nYXNt 8597\nIG1vdW50YWlu 8598\nIENhcHRhaW4= 8599\nU3RlcA== 8600\nbWFraW5n 8601\nIFNwYWlu 8602\nIGVxdWFsbHk= 8603\nIGxhbmRz 8604\nYXRlcnM= 8605\nIHJlamVjdGVk 8606\nZXJh 8607\naW1t 8608\ncml4 8609\nQ0Q= 8610\nIHRyYW5zYWN0aW9u 8611\nZ2VuZXI= 8612\nbGVzc2x5 8613\nIHx8 8614\nIGNvcw== 8615\nIEhlbnJ5 8616\nIHByb3Zpc2lvbnM= 8617\nIGdhaW5lZA== 8618\nIGRpcmVjdG9yeQ== 8619\nIHJhaXNpbmc= 8620\nIFNlcA== 8621\nb2xlbg== 8622\nb25kZXI= 8623\nIGNvbnNvbGU= 8624\naW5zdA== 8625\nIGJvbQ== 8626\nIHVuY2VydGFpbg== 8627\nMTUw 8628\nb2NraW5n 8629\nIG1lYXN1cmVk 8630\nIHBsYWlu 8631\nIHNlYXRz 8632\nIGRpY3Q= 8633\nU0w= 8634\nYWZl 8635\nIGVzdGltYXRl 8636\naXpvbg== 8637\nYXRoZXJlZA== 8638\nIGNvbnRyaWJ1dGVk 8639\nIGVwaXNvZGVz 8640\nb21tb2Q= 8641\nR3I= 8642\nQU5U 8643\nIDY5 8644\nR2VuZXI= 8645\nIDI1MA== 8646\ndmlvdXNseQ== 8647\ncm9nZW4= 8648\nIHRlcnJvcmlzbQ== 8649\nIG1vdmVtZW50cw== 8650\nZW50bGU= 8651\nb3VuY2U= 8652\nIFNvdWw= 8653\nIHByZXY= 8654\nIFRhYmxl 8655\nYWN0cw== 8656\ncmlvcnM= 8657\ndGFi 8658\nIHN1ZmZlcg== 8659\nIG5lcnY= 8660\nIG1haW5zdHJlYW0= 8661\nIFdvbGY= 8662\nIGZyYW5jaGlzZQ== 8663\nYmF0 8664\nIGRlbWFuZHM= 8665\nIGFnZW5kYQ== 8666\nIGRvemVu 8667\nIGNsaW5pY2Fs 8668\naXphcmQ= 8669\nIE9w 8670\ndGQ= 8671\nIHZpc2l0ZWQ= 8672\nIFBlcmhhcHM= 8673\nIGFjdG9y 8674\nIGRlbGlj 8675\nIGNvbnRyaWJ1dGU= 8676\nIGluamVjdA== 8677\nIEVz 8678\nYWNjbw== 8679\nIGxpc3RlbmluZw== 8680\nIGNvbmdyZXNz 8681\nZXBlbmRlbnQ= 8682\nIHByZW1pdW0= 8683\nIDc2 8684\nIElyaXNo 8685\nIGFzc2lnbmVk 8686\nIFBoeXM= 8687\nIHdvcmxkd2lkZQ== 8688\nIG5hcnJhdGl2ZQ== 8689\nb3R5cGU= 8690\nbW9udA== 8691\nYmFzZQ== 8692\nIEJvd2w= 8693\nIEFkbWluaXN0cmF0aW9u 8694\nIHJlbGF0aW9u 8695\nIEVW 8696\nQ1A= 8697\nIGNvdmVycw== 8698\nIDc4 8699\nIGNlcnRpZmlj 8700\nIGdyYXNz 8701\nIDA0 8702\ncGlyYWN5 8703\naXJh 8704\nIGVuZ2luZWVyaW5n 8705\nIE1hcnM= 8706\nIHVuZW1wbG95 8707\nIEZvcmVpZ24= 8708\nc3RyYWN0 8709\nIHZlbg== 8710\nIHN0ZWFs 8711\nIHJlcGxpZWQ= 8712\nIHVsdGltYXRl 8713\nIHRpdGxlcw== 8714\nZGF0ZWQ= 8715\nIGpveQ== 8716\nYXVz 8717\nIGh5cGVy 8718\nYWt1 8719\nIG9mZmljaWFsbHk= 8720\nIFByb2R1Y3Q= 8721\nIGRpZmZpY3VsdHk= 8722\ncGVyb3I= 8723\nIHJlc3VsdGVk 8724\ncmliZWQ= 8725\nbGluaw== 8726\nd2hv 8727\nfn5+fg== 8728\nIFNwZWVk 8729\nIFZpZXQ= 8730\nV2luZA== 8731\nIEJhcmFjaw== 8732\nIHJlc3RyaWN0aW9ucw== 8733\nIFNoYXJl 8734\nIDE5OTU= 8735\naXRpb25hbGx5 8736\nIGJlYXV0eQ== 8737\nb3B0 8738\nIG1hcHM= 8739\nIENS 8740\nIE5hdGlvbg== 8741\nIENydXo= 8742\nV2lsbA== 8743\nIGVsZWN0cmljaXR5 8744\nIG9yZw== 8745\nIGJ1cmQ= 8746\nIHZpb2xhdGlvbg== 8747\nIHVzYWdl 8748\nIHBlcm1pdA== 8749\nIENocm9u 8750\nIEZhbnQ= 8751\nIG5hdHVyYWxseQ== 8752\nIDA3 8753\nIHRocm93bg== 8754\nIEF3b2tlbg== 8755\nIGFsaWVu 8756\nIEhlcm8= 8757\nIEtlbnQ= 8758\nIFJpY2s= 8759\ncmlrZQ== 8760\nIHBhY2U= 8761\nfSx7Ig== 8762\nR0w= 8763\nIHBvaXNvbg== 8764\nIFRvd2Vy 8765\nIGZvcm1hbA== 8766\nYWx5c2lz 8767\nIGdlbnVpbmU= 8768\nIGtpbA== 8769\nYXZlcg== 8770\nIHByb2NlZHVyZQ== 8771\nIFByb3A= 8772\naW50ZW5kbw== 8773\nIE1haW4= 8774\nYXNhbnQ= 8775\nIHRyYWluZWQ= 8776\nR2FtZQ== 8777\nIExvYWQ= 8778\nIE1B 8779\nIGNydWNpYWw= 8780\nIGxldHM= 8781\nIEZS 8782\nIGNoYW1waW9u 8783\nMTAx 8784\nIENvbmZlcmVuY2U= 8785\nIHdyaXRlcnM= 8786\nIGNvbm5lY3Rpb25z 8787\nIG9rYXk= 8788\naXJtcw== 8789\nIFJhbmQ= 8790\nIGVuY291bnRlcg== 8791\nIEJ1ZmY= 8792\nIGFjaGlldmVk 8793\nIGNoZWNrcw== 8794\naXNjb25z 8795\nIGFzc2lzdGFudA== 8796\nIHdoZW5ldmVy 8797\nIEFjY2Vzcw== 8798\nIFVy 8799\nYmlu 8800\nIGNsb2Nr 8801\naXNw 8802\nb3BoZXI= 8803\nIGJvcnJvdw== 8804\nIG1hZA== 8805\nIHBlcnNvbmFsaXR5 8806\nb25seQ== 8807\nSVNU 8808\nYWJhbWE= 8809\nIGdhaW5z 8810\nIGNvbW1vbmx5 8811\nIHRlcnI= 8812\nIGh5cG90 8813\nIHJlbHk= 8814\nIHRpc3M= 8815\naXNjb25zaW4= 8816\nIHJpZGlj 8817\nZnVuY3Rpb24= 8818\nIE9yZWdvbg== 8819\nIHVuY29t 8820\ncmF0aW5n 8821\nZWxhbmQ= 8822\nIE5D 8823\nIG1vb24= 8824\nYW5ub24= 8825\nIHZ1bG5lcmFibGU= 8826\ndXRpdmU= 8827\nwqDCoMKgwqA= 8828\nIFJhZGlv 8829\nIHdlc3Rlcm4= 8830\nc2VjdA== 8831\nIFRvbnk= 8832\nIG9jY3Vycw== 8833\nIE9z 8834\nIEhvbg== 8835\nw60= 8836\nIHZlc3NlbA== 8837\nIFNjb3RsYW5k 8838\nIGRpc2NyaW1pbmF0aW9u 8839\nIHN1YnNlcXVlbnQ= 8840\nc3RyaW5n 8841\nIGZhbnRhc3k= 8842\nIFNoYWRvdw== 8843\nIHRlc3RpbQ== 8844\nV0U= 8845\naXRp 8846\ncmFz 8847\nIGJvYXQ= 8848\nIG1hcmtz 8849\nIG9yZGluYXJ5 8850\nIHJlbg== 8851\nIHJlcHJlc2VudGF0aXZl 8852\nIHBldGl0aW9u 8853\nIDcz 8854\nIGFkdmVudHVyZQ== 8855\nIGlnbm9yZQ== 8856\nIFBoaWxhZGVscGhpYQ== 8857\nIFNhdg== 8858\nVlA= 8859\nIGZhY3Rvcnk= 8860\nIHRhc2tz 8861\nIGRlcHJlc3Npb24= 8862\nemVk 8863\nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= 8864\nIFN0b3Jt 8865\nIGNvZ24= 8866\nIGVsaWdpYmxl 8867\nIHJlZHVjaW5n 8868\ndmlh 8869\nIDA1 8870\nIHN0cmlraW5n 8871\nIGRvbGxhcg== 8872\naG8= 8873\nT1Y= 8874\nIGluc3RydW1lbnQ= 8875\nIHBoaWxvc29waHk= 8876\nIE1vb3Jl 8877\nIEF2ZW51ZQ== 8878\nIHJ1bGVk 8879\nIEZyb250 8880\nSU5F 8881\nIE1haA== 8882\nIHNjZW5hcmlv 8883\nIE5BU0E= 8884\nIGVub3Jt 8885\nIGRlYnV0 8886\nIHRlYQ== 8887\nVG9kYXk= 8888\nIGFic2VuY2U= 8889\nU2lt 8890\nIGhhbQ== 8891\nbGVlcA== 8892\nIHRhYmxlcw== 8893\nIEhlYXJ0 8894\nTUk= 8895\nS2U= 8896\ncmVxdQ== 8897\nVkQ= 8898\nbWFw 8899\nIGNoYWlybWFu 8900\nIHB1bXA= 8901\nIHJhcGlkbHk= 8902\ndmk= 8903\nIHN1YnN0YW50aWFs 8904\nRVA= 8905\nZGVz 8906\nY2hhbnQ= 8907\naWxpcHA= 8908\nIFNhbnRh 8909\ncmllcnM= 8910\nYW5jaGVzdGVy 8911\nTG9hZA== 8912\nIENhc2U= 8913\nIHNhdmluZw== 8914\nIDc0 8915\nIEFGUA== 8916\nZXJuaW5n 8917\nb3VuY2Vk 8918\nIE1pbm5lc290YQ== 8919\nIFdhcw== 8920\nIHJlY3J1 8921\nIGFzc2Vzc21lbnQ= 8922\nIEJyb24= 8923\nVUU= 8924\nIGR5bmFtaWM= 8925\nIGZ1cm4= 8926\ndWxhdG9y 8927\nIHByb3BhZw== 8928\naGlnaA== 8929\nIGFjY29tbW9k 8930\nIHN0YWNr 8931\nIFN1cw== 8932\nd3JpdA== 8933\nIHJldmVu 8934\nIEdvZGQ= 8935\nIFplYWxhbmQ= 8936\nYWJz 8937\nIGJydXQ= 8938\nIHBlcnBldA== 8939\naG90 8940\nIGhhcmRseQ== 8941\nIEJ1cm4= 8942\n44K5 8943\nIHN0eQ== 8944\nIHRyYW5zYWN0aW9ucw== 8945\nIGdhdGU= 8946\nIHNjcmVlbnM= 8947\nIHN1Ym1pdHRlZA== 8948\nIDEwMQ== 8949\nIGxhbmd1YWdlcw== 8950\ndWdodA== 8951\nZW1lbg== 8952\nIGZhbGxz 8953\nIGNvYw== 8954\ngqw= 8955\nIHN0cmlrZXM= 8956\ncGE= 8957\nIGRlbGliZXI= 8958\nIElN 8959\nIHJlbGF4 8960\nYW5uZWxz 8961\nIFNlbmF0b3I= 8962\nIGV4dHJlbQ== 8963\nIH0s 8964\nIERlYg== 8965\nIGJlbGw= 8966\nIGRpc29yZGVy 8967\nY3V0 8968\nIGlPUw== 8969\nIGxvY2tlZA== 8970\nIGVtaXNzaW9ucw== 8971\nIHNob3J0bHk= 8972\nIl0= 8973\nIEp1ZGdl 8974\nIFNvbWV0aW1lcw== 8975\nIHJpdmFs 8976\nIGR1c3Q= 8977\nIHJlYWNoaW5n 8978\nRmlsZQ== 8979\nwq/Cr8Kvwq8= 8980\naW5vaXM= 8981\nIEphc29u 8982\nIHNhdGVsbA== 8983\nYXJldA== 8984\nIHN0YXRpb25z 8985\nIGFncmlj 8986\nIFRlY2hub2xvZ3k= 8987\nY29tZXM= 8988\nIFVuZm9ydHVuYXRlbHk= 8989\nIENoaWxkcmVu 8990\nIGFwcGxpZXM= 8991\nYXN0ZWQ= 8992\nIGFuZ2Vy 8993\nYWlsYWJpbGl0eQ== 8994\nIERhbWFnZQ== 8995\nIGNvbXBhcmU= 8996\nIFN0YW5kYXJk 8997\nIGFpbWVk 8998\nIEJh 8999\nYW5ndWFnZQ== 9000\nIHJlZ3VsYXRpb24= 9001\nIGp1cnk= 9002\nIGFpcnBvcnQ= 9003\nIHNlY3Rpb25z 9004\nIFByaW5jZQ== 9005\nZW1lZA== 9006\nIG1lZGljaW5l 9007\nIGhpdHRpbmc= 9008\nIHNwYXJr 9009\nb2x2ZXM= 9010\nIGFkcw== 9011\nU3RhdGU= 9012\nIGZvb2Rz 9013\nIHJlcGxhY2VtZW50 9014\nIGNoaWNrZW4= 9015\nIGxvd2VzdA== 9016\nIG1pbmRz 9017\nIGludm9sdmVz 9018\ndWk= 9019\nIGFycmFuZw== 9020\nIHByb2NlZHVyZXM= 9021\nIFdoaWNo 9022\naXZlcnNhcnk= 9023\nIGJpbGxz 9024\nIGltcHJvdmVtZW50 9025\nIGluZXY= 9026\nIGV4cGVjdGF0aW9ucw== 9027\nIGludGVsbGVjdHVhbA== 9028\nIHNwYWNlcw== 9029\nIG1lY2hhbmlzbQ== 9030\nMjUw 9031\nYnJlYWs= 9032\nIFpl 9033\nIFRlbm4= 9034\nIEJhbHQ= 9035\nIGJhcnJlbA== 9036\nIHN0YXRpYw== 9037\nbWFubg== 9038\nUG9saWNl 9039\nIHRpcHM= 9040\nIGhhbmRsaW5n 9041\nY3Vz 9042\nb2RlZA== 9043\naWx0b24= 9044\naXJ5 9045\nIGpvdXJuYWxpc3Rz 9046\nb3Vyc2U= 9047\nIGNvbWlj 9048\nIG5vbWluZQ== 9049\nSVRZ 9050\nIHZlcnN1cw== 9051\nIGxvb3A= 9052\nIHN1cmY= 9053\nIEluZHVzdA== 9054\nIEh1bnRlcg== 9055\nIGJlbGllZnM= 9056\naXNhbg== 9057\nIHNldHVw 9058\nIGJyZXc= 9059\naW1hZ2U= 9060\nIGNvbXB1dGVycw== 9061\nZm9s 9062\nfSwi 9063\nIE1lZGFs 9064\nIHRheHA= 9065\nIGRpc3BsYXllZA== 9066\nIGdyYXY= 9067\nIGZpc2NhbA== 9068\nTW9u 9069\nIE1vc2Nvdw== 9070\nIEtvbmc= 9071\nIENlbnRyZQ== 9072\nIGNhbWVyYXM= 9073\nIE1ycw== 9074\nIEhheQ== 9075\nIGF2ZXI= 9076\nIEtlbGx5 9077\ncHk= 9078\nIHJlcXVpcmVtZW50 9079\nIGVudGl0bGVk 9080\nb21iaWU= 9081\nIHNoYWRvdw== 9082\nYWdpYw== 9083\nIEFr 9084\nIGVsaXRl 9085\nIGRpdmlkZWQ= 9086\nIGhlYWRpbmc= 9087\nIGNvcGllcw== 9088\nIGxvc3Nlcw== 9089\nIHZpdA== 9090\na2Vk 9091\nIEJyeQ== 9092\nIGFucw== 9093\nIFN0ZWFt 9094\nIHJlcG9ydGVy 9095\naGVpbQ== 9096\nIEl0ZW0= 9097\nIHN1cGVyaW9y 9098\nZG9u 9099\nZXJlbnQ= 9100\nw7Y= 9101\nIHRoZXJhcHk= 9102\nIHBlYWs= 9103\nIE1vZGVs 9104\nIGx5aW5n 9105\nIGdhbQ== 9106\nemVy 9107\ncml0dGVu 9108\nIHJlc3BvbnNlcw== 9109\nIGNvbnNpZGVyYXRpb24= 9110\nIEJpYmxl 9111\nIGxveWFs 9112\nIGluc3RhbnQ= 9113\nIHBt 9114\nIEZvcmVzdA== 9115\nw7w= 9116\nIGV4dGVuZA== 9117\nIGNvbnZpY3RlZA== 9118\nIGZvdW5kZXI= 9119\nIGNvbnZpbg== 9120\nIE9haw== 9121\nY2hlY2s= 9122\nIHNjaG9sYXJz 9123\ncGVk 9124\nIG92ZXJzZQ== 9125\nVG9w 9126\nY291bnQ= 9127\nIEFyaw== 9128\nwrc= 9129\nIDA2 9130\nIExB 9131\nbWQ= 9132\nIExhdGlu 9133\naW1lbnRhbA== 9134\nIENQVQ== 9135\nIHN1YnN0YW5jZQ== 9136\nIG1pbm9yaXR5 9137\nIG1hbnVmYWN0dXJpbmc= 9138\nRXI= 9139\nb2NvbGF0ZQ== 9140\nIGF0dGVuZGVk 9141\nIE1hbmFnZXI= 9142\ncmF0aW9ucw== 9143\nIGFwcHJlY2lhdGU= 9144\nb215 9145\nR0JU 9146\naWRlbmN5 9147\nQkw= 9148\nIGd1YXJhbnRlZQ== 9149\ncG9zaXRpb24= 9150\nIG9jZWFu 9151\nY2x1ZGU= 9152\nIGhlYWRlZA== 9153\nIHRhcGU= 9154\nIGxvb3Nl 9155\nIGxvZ2lj 9156\nIHByb3Zlbg== 9157\nIHNwaXI= 9158\nIGFkbWl0 9159\naXNh 9160\nIGludmVzdGlnYXRl 9161\nIDE5OTQ= 9162\nc3lsdg== 9163\nIExvc3Q= 9164\nY2VzdA== 9165\nIDcx 9166\nIHJlcXVlc3RlZA== 9167\nIHdpbmRvd3M= 9168\nIFBva8Op 9169\nIFdpdGhvdXQ= 9170\nTWV0 9171\nIGJlaGF2aW91cg== 9172\nIHJlYWRlcg== 9173\nIGh1bmc= 9174\nIEtlZXA= 9175\nIHJvbGVz 9176\nIGltcGxlbWVudGVk 9177\nIGJsYW5r 9178\nIHNlcnZlcw== 9179\nIEpheQ== 9180\nIGNpdGVk 9181\nIEZyaWVuZA== 9182\ncHJvZml0 9183\nYXBvbg== 9184\nIHJlcGFpcg== 9185\naXRlbQ== 9186\nYXJyYXNz 9187\nIGNyaXRpY3M= 9188\nYWRp 9189\nIEZhdGhlcg== 9190\nIHNob3V0 9191\nIGZvb2w= 9192\nIDg4 9193\nIHByb2R1Y2luZw== 9194\nIGxpYg== 9195\nIHJvdW5kcw== 9196\nIGNpcmNsZQ== 9197\nIHByZXBhcg== 9198\nIHN1Ym1pdA== 9199\nIG5pYw== 9200\nbW9ycm93 9201\n44Or 9202\nVW5kZXI= 9203\nIHZpdGFs 9204\nYXRlcm4= 9205\nIHBhc3N3b3Jk 9206\nIHB1YmxpY2F0aW9u 9207\nIHByb21pbmVudA== 9208\nIHNwZWFrcw== 9209\nIGJhcnM= 9210\nIGRlZXBlcg== 9211\nIE1pbGw= 9212\ncG9ydGVk 9213\nIHdpZA== 9214\nIGJ1dHRlcg== 9215\nIHNtb2tpbmc= 9216\nIGluZGljYXRlcw== 9217\nS2V5 9218\ncm9wcmk= 9219\nIEZpbGU= 9220\nYWxsaW5n 9221\nYXN0aW5n 9222\nIFJ1cw== 9223\nIGFkag== 9224\nIDc5 9225\nYXZhbA== 9226\nIHByZXN1bQ== 9227\nYnVyZ2g= 9228\nb25pYw== 9229\nIGZ1cg== 9230\nIHBvbGxz 9231\naWth 9232\nIHNlY29uZGFyeQ== 9233\nIG1vbnN0ZXI= 9234\naWdz 9235\nIEN1cnJlbnQ= 9236\nRXZlbnQ= 9237\nIG93bmVyc2hpcA== 9238\nZW5kYXI= 9239\nIGFycml2ZQ== 9240\nIFRheA== 9241\nIG51bGw= 9242\nIFByaXY= 9243\nIHRocm8= 9244\nIGtpc3M= 9245\nY2F0 9246\nIHVwc2V0 9247\nYW5nbGU= 9248\naXRjaGVz 9249\nZWN0b3I= 9250\nb2xvZ2lzdHM= 9251\nIEdhbGF4eQ== 9252\nIGNvcnJ1cHRpb24= 9253\nIGhpbnQ= 9254\nZW50ZXI= 9255\nIEhvc3BpdGFs 9256\nIGdyZWF0bHk= 9257\nIGJlZ3Vu 9258\nZXN5 9259\nIHNvaWw= 9260\nIEFudG9u 9261\nIG1haW50ZW5hbmNl 9262\n44Op 9263\nIGRvemVucw== 9264\nIGh1bWFuaXR5 9265\nIEFsYWJhbWE= 9266\nIHJvbQ== 9267\nd29ydGg= 9268\nYXBpbmc= 9269\nc3lsdmFuaWE= 9270\nbGFo 9271\nIGdhdGhlcmVk 9272\nR0E= 9273\nIGF0dGFja2luZw== 9274\nZm91bmQ= 9275\nIFNxdWFyZQ== 9276\nIGFyYml0 9277\naWN0aW9ucw== 9278\nIFdpc2NvbnNpbg== 9279\nIGRhbmNl 9280\nIFNhaW50 9281\nYXJjaHk= 9282\nIGJhc2ViYWxs 9283\nIGNvbnRyaWJ1dGlvbnM= 9284\nIGxpdGVyYXR1cmU= 9285\nIGV4aGE= 9286\ncGVydHk= 9287\ndGVzdA== 9288\nIGJhYg== 9289\nIGNvbnRhaW5lcg== 9290\nbGV0dGVy 9291\nIGZhbGxlbg== 9292\nIHdlYnNpdGVz 9293\nIGJvdHRsZQ== 9294\nIFNhYw== 9295\nIGJyZWFzdA== 9296\nIFBM 9297\nIHZldGVyYW4= 9298\nIGludGVydmlld3M= 9299\nIEFsZQ== 9300\nIGJhbm5lZA== 9301\nZW5nZXJz 9302\nIFJldm9sdXRpb24= 9303\naW50aA== 9304\nIGNvbmNlcm5pbmc= 9305\nSVZF 9306\nIGV4cGVuc2Vz 9307\nIE1hdHRoZXc= 9308\nIENvbHVtYmlh 9309\nZHM= 9310\naXN0YW5jZQ== 9311\nIGVudGl0eQ== 9312\nLi4uIg== 9313\nIHJlbGlhYmxl 9314\nIHBhcmFsbGU= 9315\nIENocmlzdGlhbnM= 9316\nIG9waW5pb25z 9317\nIGluZHU= 9318\nbG93 9319\nIGNvbXBldGU= 9320\nIHRob3JvdWdo 9321\nIGVtcGxveWVk 9322\nIGVzdGFibGlzaG1lbnQ= 9323\naWdlbg== 9324\nIENybw== 9325\nIGxhd3llcnM= 9326\nIFN0YXRpb24= 9327\nVEU= 9328\nIExpbmQ= 9329\nIFB1cg== 9330\naXRhcnk= 9331\nIGVmZmljaWVuY3k= 9332\n4oCQ 9333\nIEx5 9334\nIG1hc2s= 9335\nIGRpc2FzdGVy 9336\nIGFnZXM= 9337\nRVJF 9338\nZXNpcw== 9339\nIEhvbGQ= 9340\nIGNhc3VhbA== 9341\nYmxlZA== 9342\nIGVuYWJsZWQ= 9343\nIEVudmlyb25tZW50 9344\nIEludGVsbGlnZW5jZQ== 9345\naXBlcg== 9346\nIE1hcA== 9347\nIEJF 9348\nIGVtZXJnZWQ= 9349\naXNkb20= 9350\nIGNhYmlu 9351\nIHJlZ2lzdHJhdGlvbg== 9352\nIGZpbmdlcnM= 9353\nIHJvc3Rlcg== 9354\nIGZyYW1ld29yaw== 9355\nIERvY3Rvcg== 9356\nZXR0cw== 9357\nIHRyYW5zcG9ydGF0aW9u 9358\nIGF3YXJlbmVzcw== 9359\nSGVy 9360\nIGF0dGVtcHRpbmc= 9361\nT2Zm 9362\nIFN0b3Jl 9363\nw4PDgsODw4LDg8OCw4PDgg== 9364\nIEtub3c= 9365\nIGRlZmVuY2U= 9366\nIHNjYW4= 9367\nIFRlbg== 9368\nIENoYWly 9369\nIFBI 9370\nIEF0bGFudGE= 9371\nIGZ1Y2tpbmc= 9372\nIGFuc3dlcmVk 9373\nYm4= 9374\nIEthcg== 9375\nIGNhdGVnb3JpZXM= 9376\nIHJhdGlvbmFs 9377\nIGN1c3Q= 9378\nIHJvYm90 9379\nIGNvcnJlY3RseQ== 9380\nIGdpZg== 9381\nIGdyYXBoaWNz 9382\nbWlj 9383\nIGdyb3VuZHM= 9384\nIE9wcA== 9385\naWF0ZQ== 9386\nIGRpc3RyaWJ1dGVk 9387\nIHNhbmN0aW9ucw== 9388\nIGNoYWxsZW5naW5n 9389\ndXRv 9390\nIGluZ3JlZGllbnRz 9391\nIGludml0ZWQ= 9392\nIGZvdW5kZWQ= 9393\nIFJlcXU= 9394\nZGVk 9395\nIGJvd2w= 9396\nIGJyb3RoZXJz 9397\nIEhh 9398\nSU8= 9399\nIHdhZ2Vz 9400\naW1vcmU= 9401\nb2NpYWw= 9402\nIHNlZWQ= 9403\nYXRpdmVseQ== 9404\nIGFkZHJlc3Nlcw== 9405\nIElvd2E= 9406\nYWJldGg= 9407\nIGF0dGl0dWRl 9408\naXNk 9409\nY2hpbGQ= 9410\nIG1vbGU= 9411\nIGRpc2NvdmVyeQ== 9412\neWFyZA== 9413\nQnI= 9414\nIDgy 9415\nIHN1cHBsaWVz 9416\nZWxsaW5n 9417\nIGRpc3Rpbmd1 9418\nQ1I= 9419\nIHJlY2VwdA== 9420\nIHZlcnQ= 9421\nIHN3aW0= 9422\nYmVj 9423\nZG9vcg== 9424\nIFllYWg= 9425\nIGdhbA== 9426\nIGludGVyYWN0 9427\nIEVTUA== 9428\nIENT 9429\nYW1wcw== 9430\nIGNvbnZpbmNlZA== 9431\nIG9iamVjdGl2ZQ== 9432\nIGRpc2g= 9433\nIFBob3Rvcw== 9434\nbGFk 9435\nIGRvd250b3du 9436\nb2ls 9437\naW5jdGlvbg== 9438\nIHRvbW9ycm93 9439\nIENPTQ== 9440\nIHN1cnZpdmFs 9441\nc2hvdA== 9442\nIHNldHRsZW1lbnQ= 9443\nQ29ucw== 9444\nIFhib3g= 9445\naW50ZXJlc3Q= 9446\nIFNN 9447\nYXJnbw== 9448\nZW5lc3M= 9449\nIGV0aG5pYw== 9450\nYmVyZWQ= 9451\nTWlu 9452\nIFRvaw== 9453\nIGluY2VudA== 9454\nIENvbW1hbmQ= 9455\nIG1haW50YWluZWQ= 9456\nIGJyZWFrcw== 9457\nYnJpZGdl 9458\nYXRhcg== 9459\nYWdn 9460\nIEZpbmFsbHk= 9461\ndW5pY2lw 9462\nIE9udA== 9463\nbGVmdA== 9464\nIHJlY29nbml0aW9u 9465\nICov 9466\nIFBlcnM= 9467\nIHdlbGY= 9468\nIGFkZHJlc3NlZA== 9469\nIEthbnNhcw== 9470\nIHZpcnVz 9471\nIHdoZXJlYXM= 9472\nIHBhcGVycw== 9473\ncmFtcw== 9474\nIE1pbmlzdHJ5 9475\nIHBsZWFzdXJl 9476\nIGFjcXVpcmVk 9477\nIGR1cmF0aW9u 9478\nanBn 9479\nIGNhbG0= 9480\nIE5ITA== 9481\nIGJ1cm5pbmc= 9482\nIGZvbGRlcg== 9483\naWNrZWQ= 9484\nIFB5 9485\nIElsbGlub2lz 9486\nQ2xhc3M= 9487\nIEdvZGRlc3M= 9488\nIHBlcmZvcm1pbmc= 9489\nIHdlbGZhcmU= 9490\namFy 9491\nSW50ZXI= 9492\nIGxpbg== 9493\nIGVuaGFuY2U= 9494\nIG5vdGlvbg== 9495\nZmFyZQ== 9496\neXBlcw== 9497\nIEFyZWE= 9498\nIGNhbm5hYmlz 9499\nIERpZWdv 9500\nZnM= 9501\nIE1hbmNoZXN0ZXI= 9502\nY29tbQ== 9503\naW5pdGU= 9504\nIGNvdmVyaW5n 9505\nIFNvdW5k 9506\nIDE5NjA= 9507\nIDg0 9508\nZWxlY3Q= 9509\nemluZw== 9510\nIGNpdGl6ZW4= 9511\nIHBob25lcw== 9512\nIHJhaWQ= 9513\nIGlnbm9yZWQ= 9514\nIE9iamVjdA== 9515\nIHVwbG9hZA== 9516\nY2FyZA== 9517\nIG1vZGlmaWVk 9518\nIHJvb21z 9519\naWFo 9520\ncmFuZ2U= 9521\naGVhc3Q= 9522\nYWNodXM= 9523\nIHN1Z2dlc3Rpbmc= 9524\n4oCL 9525\nZ3JhZGU= 9526\nRWw= 9527\nIGNsb3RoaW5n 9528\nIHJo 9529\nIEhhbg== 9530\ndW5pdHk= 9531\nZW5jaW5n 9532\nIEF1c3Rpbg== 9533\nc2VjdXRpb24= 9534\ndHJh 9535\nZGVt 9536\nIFF1YWw= 9537\nIGhlYXZlbg== 9538\nIHN0YWdlcw== 9539\nIHdlZGQ= 9540\ncGx1cw== 9541\naWZpY2lhbA== 9542\nIEltbQ== 9543\nIEhv 9544\naWV0aWVz 9545\nIHBocmFzZQ== 9546\nIGJyaWxs 9547\nYWN0b3J5 9548\nIHByb3ZpZGVycw== 9549\nIHNpbGVuY2U= 9550\nIGFlcg== 9551\nIEFJ 9552\nIEFkdmVudHVyZQ== 9553\nIHBsYXRmb3Jtcw== 9554\nIGRlbW9uc3RyYXRlZA== 9555\nIGludGVyZg== 9556\naW5ndG9u 9557\nIHJhY2Vz 9558\nIGdyYWRl 9559\ndWx0YW5l 9560\nIFRocm91Z2g= 9561\nZmFsc2U= 9562\nIGJvdw== 9563\nIEFC 9564\nIGZsYXZvcg== 9565\nIGhpc3Rvcmlj 9566\nZ292 9567\nIGNvbG91cg== 9568\nIHZpZXdlZA== 9569\nIEVtYWls 9570\nZWxjb21l 9571\nIGludGVydmVudGlvbg== 9572\nIGRpdmVyc2l0eQ== 9573\nIHBlcmlvZHM= 9574\nIHJldmVyc2U= 9575\nIFZlcnk= 9576\nIHF1b3Rl 9577\nIExlZnQ= 9578\ndGhyb3VnaA== 9579\nIHNjcmV3 9580\nIGxhbmRpbmc= 9581\nIHBpbGw= 9582\nIHdldA== 9583\nIHByb3Rlc3RlcnM= 9584\nIHJlcGVhdA== 9585\nYXZlZA== 9586\nZXJr 9587\nIHNhbGFyeQ== 9588\nIFBlbm5zeWx2YW5pYQ== 9589\nU3RpbGw= 9590\nIG1heW9y 9591\nIGtpdGNoZW4= 9592\nIGZlYXR1cmluZw== 9593\nIE11c2V1bQ== 9594\nIFRvdXJuYW1lbnQ= 9595\nIEZhbA== 9596\nIHNlcnZlcnM= 9597\nVUM= 9598\nIGFueWJvZHk= 9599\naW1n 9600\nIFRyYWRl 9601\naXh0dXJl 9602\ndGhlbGVzcw== 9603\nIGZpbmFuY2U= 9604\nIGNsb3Npbmc= 9605\nIFBhdHJp 9606\naWFj 9607\nYWJlbA== 9608\nID4+ 9609\nb3JvdXM= 9610\nIGZpcm1z 9611\nc2NyZWVu 9612\ndW5h 9613\nIGVtYmFycmFzcw== 9614\ndWxzZQ== 9615\nIGxldHRpbmc= 9616\nIHRocmV3 9617\naWxleQ== 9618\nIGNoYW5uZWxz 9619\nbGFu 9620\nIFZlZ2Fz 9621\nIHNlYXI= 9622\nIGZhbnRhc3RpYw== 9623\nYXJyZQ== 9624\ndXp6bGU= 9625\nIERlcg== 9626\nVGhvc2U= 9627\nIHN3aW5n 9628\nIHNoZWV0 9629\naW5kZXg= 9630\nY292ZXI= 9631\nb2dhbg== 9632\nIHZhcmlhYmxlcw== 9633\nIFRlY2g= 9634\nIHNwb2tlbg== 9635\nYWNoZWw= 9636\nIERh 9637\nIE1vdW50YWlu 9638\nIGxvYWRlZA== 9639\nIGZvb3RhZ2U= 9640\ndmVyc2lvbg== 9641\nIHVubA== 9642\nIFBob2VuaXg= 9643\nIHRocm93aW5n 9644\nIGZpcmluZw== 9645\nIHRyYWNraW5n 9646\nIHdpZHRo 9647\nIHN0cnVnZ2xpbmc= 9648\ncm9vbXM= 9649\nb3Rpb24= 9650\nIG1vbnRobHk= 9651\nIFNlcnZlcg== 9652\nIGVnZ3M= 9653\nb3Blbg== 9654\nTUM= 9655\nIDE5OTM= 9656\nIGhpcmVk 9657\nIHN0YXllZA== 9658\nIEFsbGVu 9659\nIHN0cm8= 9660\nIDk4 9661\nc3RlcA== 9662\nIFR1cmtpc2g= 9663\nIGZhYnJpYw== 9664\naXN0aW5n 9665\nIERvbQ== 9666\nIGRhdGVz 9667\nIHByb24= 9668\nIGJhc2tldGJhbGw= 9669\nIGx1Y2t5 9670\nIEFyYWJpYQ== 9671\nIGFzc3VtZWQ= 9672\nZXN0eQ== 9673\nIGFmZmFpcnM= 9674\nIGdsYWQ= 9675\nIEluZGVlZA== 9676\nIEZB 9677\nIFdvcmQ= 9678\nIGpvaW5pbmc= 9679\naWZpY2U= 9680\ncHJlYWQ= 9681\naXJ0cw== 9682\nIFNlbGVjdA== 9683\nIHBvcHVsYXRpb25z 9684\nYXdhcmU= 9685\nIG5vc2U= 9686\nIGNvbXBsYWludHM= 9687\nc3RhcnQ= 9688\nIHNjb3Jpbmc= 9689\nVGhhbmtz 9690\nIG1pbmluZw== 9691\nIHZpc2l0b3Jz 9692\nU0g= 9693\nIGRhbWFnZWQ= 9694\nIGNoYXJhY3RlcmlzdGljcw== 9695\nIFBlbnQ= 9696\nREM= 9697\nIDgz 9698\nIFNpeA== 9699\ncmF0ZXM= 9700\nIGZsYWdz 9701\nIEJyZXc= 9702\nZG9n 9703\nTWFyaw== 9704\nLy8vLw== 9705\nIGV4ZWN1dGlvbg== 9706\nIGpva2U= 9707\ncGhvbmVz 9708\nIHRlc3RpbW9ueQ== 9709\nIG9ic3Q= 9710\nUUw= 9711\nIEN1dA== 9712\nIHN0dWRpZWQ= 9713\nIE5pbnRlbmRv 9714\naWNrZXQ= 9715\nIE5CQw== 9716\nIGxhZA== 9717\nIEJyYQ== 9718\nIE1vaA== 9719\nIGtlcm5lbA== 9720\nIG92ZXJ3aGVsbWluZw== 9721\nIGFnZWQ= 9722\nIGFwcGxpY2FibGU= 9723\nIENvbmQ= 9724\nIHJvYWRz 9725\nIEJsb2Nr 9726\nbWFkZQ== 9727\nb2RnZQ== 9728\nIGNvbW1hbmRz 9729\nIG9mZmljZXM= 9730\ndmVsYW5k 9731\nIHR1dA== 9732\nIHJlY2VpdmVy 9733\nIEZybw== 9734\nIHNob3BwaW5n 9735\nIGlQ 9736\nIFN0cmU= 9737\nIEFCQw== 9738\nIGVudGVydGFpbm1lbnQ= 9739\nIEJvdw== 9740\nb3J0ZWQ= 9741\nTWM= 9742\nIHJlYWRz 9743\nZ3JhZA== 9744\nIENvbGxlY3Q= 9745\nIOKIkg== 9746\nIENhcGl0YWw= 9747\nZWRlcmF0aW9u 9748\nIGVtcGxveWVy 9749\nIGludm9sdmVtZW50 9750\nIGFueGlldHk= 9751\nYWxpYQ== 9752\nIHJvb2Y= 9753\nIEFtb25n 9754\nIERlbW9jcmF0 9755\nIHN0YXRz 9756\nIFZpbGw= 9757\nIGNvbnN0aXR1dGlvbmFs 9758\nIHJlZmVycmluZw== 9759\naXR0eQ== 9760\nIHRhY2tsZQ== 9761\nb3V0dWJl 9762\nIGJhY2tlZA== 9763\nIEhvbmc= 9764\nIEJyb2Fk 9765\nIGVsZQ== 9766\nIE90dA== 9767\nIDE5OTI= 9768\naG91cg== 9769\nYWNodXNldHRz 9770\nQ2Fs 9771\nIGRlZmVhdGVk 9772\nIDgx 9773\nZXNw 9774\nIHNlZW1pbmdseQ== 9775\nd2Fz 9776\nIEplbm4= 9777\nIEt1cmQ= 9778\nIGdlbmU= 9779\nIGRpc2NvdW50 9780\nUmV0 9781\nRUNU 9782\nKCk7 9783\nIGNsdWJz 9784\nIHNpZA== 9785\nIE1hcnNo 9786\nQ2hlY2s= 9787\nIHBw 9788\nIEVhZw== 9789\naWRlc3ByZWFk 9790\nIGJlaW5ncw== 9791\nRlQ= 9792\nIGludHJvZHVjdGlvbg== 9793\nIENoYW5nZQ== 9794\nQVJE 9795\nIDExMA== 9796\nYWRvd3M= 9797\naWVyY2U= 9798\nIG1lYWw= 9799\nYXV0aG9y 9800\nIEJhbmc= 9801\nbGFob21h 9802\nIHJhbmtz 9803\nMjAxMQ== 9804\nPz8/Pw== 9805\nbWF4 9806\nIGNvbGxhcHNl 9807\nIG9wZW5z 9808\nIGVjaG8= 9809\nIHNvcGg= 9810\nIHJhY2lzdA== 9811\nIGVub3Jtb3Vz 9812\nIHdhdmVz 9813\nIHRhcA== 9814\nIGNvbXByZWhlbnNpdmU= 9815\nLi0t 9816\nIFJveQ== 9817\nIGZhcm1lcnM= 9818\nUmVsYXRlZA== 9819\nYWlyZWQ= 9820\ncm9uZXM= 9821\nIENyaW0= 9822\nIHByb3BvcnRpb24= 9823\nIGRlc2lnbnM= 9824\nIG5lZ290aWF0aW9ucw== 9825\nIHZpcnR1YWxseQ== 9826\nIEJhdG1hbg== 9827\nIHdhcm4= 9828\nIGxlZ2l0aW1hdGU= 9829\nbWF0ZQ== 9830\nIGNvbnZlbnRpb24= 9831\nLCw= 9832\nbmV0aWM= 9833\nIFNE 9834\nIGNvbnNpc3RlbnRseQ== 9835\nIGNvbXBlbnNhdGlvbg== 9836\nIHB1bmlzaG1lbnQ= 9837\nIHll 9838\nIHRpZQ== 9839\nIEJ1cmVhdQ== 9840\naXJsZg== 9841\nIEJ1 9842\nIEFyZW4= 9843\nIFBoaWxpcHA= 9844\nIGtuaWZl 9845\nIG1lbW9yaWVz 9846\nIFJvc3M= 9847\nIGFuZ2xl 9848\nIDg2 9849\nIFRodW5kZXI= 9850\nIHJlbmQ= 9851\nIFRvdXI= 9852\nIGNvdW50cw== 9853\nc3VuZw== 9854\nIEltcA== 9855\nIGVkdWNhdGlvbmFs 9856\nIGFjY2Vzc2libGU= 9857\nQ09N 9858\nIGRyZXc= 9859\neWVy 9860\nR2w= 9861\nYW1pbmU= 9862\nT1JU 9863\nT0I= 9864\nSUI= 9865\nbWFzdGVy 9866\nIHRyaWFscw== 9867\nb2d5 9868\naGFy 9869\nIFRydXN0 9870\nIHByZWZlcnJlZA== 9871\naXJsZnJpZW5k 9872\nIE5ldg== 9873\nIGJpbg== 9874\nIGNvdw== 9875\nUGFnZQ== 9876\nIHNpZ25hdHVyZQ== 9877\nIEJM 9878\nNzAw 9879\nIHJldGlyZWQ= 9880\nIGJ5dGVz 9881\nIG5laWdoYg== 9882\nIExlZ2VuZA== 9883\nIGRldmFzdA== 9884\nIHN1c3BlY3RlZA== 9885\naXNvbnM= 9886\nIFBva8OpbW9u 9887\nc2NhbGU= 9888\nIGNhcGFiaWxpdGllcw== 9889\nIHJldmVs 9890\nIGNoZWVzZQ== 9891\nZHk= 9892\naWdyYW50 9893\nIGZhaWxpbmc= 9894\nYml0cw== 9895\nIEhlcm9lcw== 9896\nIEdob3N0 9897\nIFNjaWVudA== 9898\nIGFwcG9pbnRlZA== 9899\ndXJp 9900\nIGluc3RpdHV0aW9u 9901\nIGV4cGFuZGVk 9902\nZ3JlZw== 9903\nIG1vbml0b3Jpbmc= 9904\nIHBvZGNhc3Q= 9905\nIGNvYWxpdGlvbg== 9906\nIDk2 9907\nSm8= 9908\nIHN0b2xlbg== 9909\nIFNhYg== 9910\nIHN0b3Bz 9911\nIGhvbGlkYXk= 9912\nIGludHI= 9913\nQ2Fy 9914\nQmxhY2s= 9915\nIExHQlQ= 9916\nIHdhcm1pbmc= 9917\nIEFuZGVyc29u 9918\nIDg5 9919\nIHByb2R1Y2Vy 9920\nTWVk 9921\nIGFjY3VyYWN5 9922\nIE1hcnZlbA== 9923\naXphYmV0aA== 9924\nIFBhdHJpY2s= 9925\nbW9ueQ== 9926\nIG1pbmk= 9927\nYWNsZXM= 9928\nIG92ZXJ0 9929\ndGhleQ== 9930\nIG1lbWJlcnNoaXA= 9931\nIFZlbg== 9932\nIGV4Y2g= 9933\nIHJlbW92YWw= 9934\nIERhdmU= 9935\nVFk= 9936\nbWFk 9937\nIEZpbmQ= 9938\nIGFkZXF1 9939\nIGVj 9940\nIHRlZXRo 9941\nIGVtb3Rpb24= 9942\nIHBlcm0= 9943\nIHNvbGVseQ== 9944\nZGI= 9945\nIGV4dHJhb3Jk 9946\nSUdIVA== 9947\nY2Fs 9948\nIGd1aWRlbGluZXM= 9949\nIGR5aW5n 9950\nIHN1c3BlbmRlZA== 9951\nIFByZW1pZXI= 9952\nIEFudGhvbnk= 9953\nZWx2ZQ== 9954\nIGRhZA== 9955\nIEV0aA== 9956\nIEZvb3RiYWxs 9957\nIGFiYW5kb25lZA== 9958\nIDw8 9959\nIG1hcmNo 9960\nIGhvcnJvcg== 9961\n4oCmIg== 9962\nIGNoaWxkaG9vZA== 9963\nIGNhbXBhaWducw== 9964\nIGx1bmNo 9965\nIEFsYmVydA== 9966\nYmxvY2s= 9967\n4paI4paI 9968\nb3VuZGluZw== 9969\nIGJvbmU= 9970\nb3JnYW4= 9971\nYWRlcnM= 9972\nIEZsYXNo 9973\nIERyaXZl 9974\nIHRvbmlnaHQ= 9975\nIHdhcnM= 9976\nIEZM 9977\nIGZvcm1hdGlvbg== 9978\nY29uc3Q= 9979\nTmV3cw== 9980\nIGNvbXBl 9981\nb3Jpb3Vz 9982\nIFN0YWZm 9983\nIGRpc2N1c3Npb25z 9984\nIFByb3RlY3Rpb24= 9985\nIEphbQ== 9986\nIGNyaXRlcmlh 9987\nIGluc3RhbGxhdGlvbg== 9988\nIGFjY29tcGxpc2g= 9989\naXp6YQ== 9990\nIHB1Ymxpc2hlcg== 9991\nIHJlc2N1ZQ== 9992\nIFRyeQ== 9993\nVUxM 9994\nIFNvbQ== 9995\nIEhvcA== 9996\nb3JldA== 9997\ndGhz 9998\nb3Jkb24= 9999\nIHBvY2tldA== 10000\nIEludg== 10001\nRG93bmxvYWQ= 10002\nIENyaW1l 10003\nIGJlbmU= 10004\nIEd1aWRl 10005\nIEFzc2VtYmx5 10006\nIHBhcmFtZXRlcnM= 10007\nSUU= 10008\nIEFsZXhhbmRlcg== 10009\nIGNvbmNlcnQ= 10010\nIFNjaGU= 10011\nIHNob2Vz 10012\nIHZpc2l0aW5n 10013\nIHJlY2FsbA== 10014\nIGJ1Yg== 10015\nIHJ1cmFs 10016\nIGNvbmNyZXRl 10017\nIFJvcw== 10018\nTmV4dA== 10019\nUnVzcw== 10020\nIGxvYW5z 10021\nIFNoaWVsZA== 10022\nIHRyZW0= 10023\naGVtYXQ= 10024\na2c= 10025\nIEhhcnJpcw== 10026\naXNpdGlvbg== 10027\nIE1vdmU= 10028\nIEZD 10029\nIGZhdGU= 10030\nIENobw== 10031\nIHRpcmVk 10032\nIHByaW5jaXBhbA== 10033\naGlzdA== 10034\naWVuY2Vz 10035\nYXRoeQ== 10036\nIHNldmVudA== 10037\nIG1vb2Q= 10038\nIHN0cmF0ZWdpYw== 10039\nIGRpc2Vhc2Vz 10040\nIGZvcnVt 10041\nIHRlbXBvcg== 10042\nIGhlYWRxdWFydGVycw== 10043\nUGFy 10044\naWdl 10045\nZmxpeA== 10046\nIGd1aXRhcg== 10047\nIDk0 10048\nT25seQ== 10049\nIHJlbGVhc2Vz 10050\ncm9waA== 10051\nPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 10052\nIDYwMA== 10053\nIENvbnRpbnVl 10054\naWdhdGU= 10055\nIENyaXQ= 10056\nc3lzdGVt 10057\nIGRpc2FibGVk 10058\nIHVuZXhwZWN0ZWQ= 10059\naXRodWI= 10060\nIHVuY2xlYXI= 10061\nIEVzdA== 10062\nIGNvbnRyYWQ= 10063\nIHN0cmF0ZWdpZXM= 10064\ndmVudHVyZXM= 10065\nIHBhc3NhZ2U= 10066\nQU1F 10067\nIGltcHJvdmluZw== 10068\nIHJldmVhbHM= 10069\nIGRlY3JlYXNl 10070\nb3Zh 10071\nIGFubm95 10072\nIFNob3J0 10073\nIExpYnJhcnk= 10074\nIGN5YmVy 10075\nbmVsbA== 10076\nIEh1cg== 10077\nIENC 10078\nIHBob3RvZ3JhcA== 10079\nVUk= 10080\nIHNlZA== 10081\nR2U= 10082\nIDg3 10083\nIGRpdmVyc2U= 10084\nIGVuY291cmFnZWQ= 10085\nIGNvbnNwaXJhY3k= 10086\nIGJpcmRz 10087\nIG9wZXJhdG9y 10088\nIGhhbmRmdWw= 10089\nIGNsYXNzaWZpZWQ= 10090\nPyk= 10091\nIGRyYW1hdGlj 10092\nIGludmVzdGlnYXRvcnM= 10093\naXRv 10094\nIHdpZGVzcHJlYWQ= 10095\nIFJvb20= 10096\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 10097\nIGNvbGxlY3RpdmU= 10098\nIGpvdXJuYWxpc3Q= 10099\nU3RyaW5n 10100\nIHRlbXBlcmF0dXJlcw== 10101\naWxh 10102\nIGd1aWQ= 10103\nIGluc3BlY3Q= 10104\nIG1pc3NpbGU= 10105\nIE1heW9y 10106\nIG1hbnVhbA== 10107\nIHNpbXVsdGFuZQ== 10108\nIHJhdGluZ3M= 10109\nIHN1Y2s= 10110\nIDk3 10111\nIHVuaXZlcnNhbA== 10112\nIHBoYXJt 10113\nIGRpc3J1cHQ= 10114\naWFubw== 10115\nQVY= 10116\nIGZ0 10117\nIHN0YXRpc3Q= 10118\nb2xkcw== 10119\nIFdhbGtlcg== 10120\ncGhw 10121\nIHVuZGVydA== 10122\nIExhcw== 10123\naXNob3A= 10124\nbnRpbA== 10125\ncmVzaG9sZA== 10126\nIFdoZXRoZXI= 10127\nTXM= 10128\nIGRlbnk= 10129\nIENsb3Vk 10130\nIHByb3ZpZGVy 10131\nIHN1cnZpdg== 10132\nIFVwZGF0ZQ== 10133\naGFz 10134\nIG1pc3Rha2Vz 10135\nY2hhcmdl 10136\ncGxlZA== 10137\ncml0eQ== 10138\nIG5vZGU= 10139\nIE1hc3NhY2h1c2V0dHM= 10140\nb29scw== 10141\nbGljYXRpb24= 10142\nIGZhaWxz 10143\nZW1hbGU= 10144\nb3Jp 10145\nYmFja3M= 10146\nIHNoaXJ0 10147\nICcn 10148\nIE5BVA== 10149\nIHdhdGVycw== 10150\nZWxzb24= 10151\nIGVhc2U= 10152\nIHNjYXI= 10153\nIGNvbnRlbnRz 10154\nbWluZA== 10155\nIGNvbnRyaWJ1dGlvbg== 10156\nIHNocg== 10157\nIGhhbmRlZA== 10158\nIHN0YWJpbGl0eQ== 10159\nIHRyYXZl 10160\nRW0= 10161\nIG1pcnJvcg== 10162\nMTIz 10163\nIHdlaWdo 10164\nIGZpY3Rpb24= 10165\nb3V2ZXI= 10166\naXN0YW50 10167\ncml0aW9u 10168\nIEZlZA== 10169\nIHBoeXNpY2FsbHk= 10170\nIHN0YWtl 10171\nIEFydGljbGU= 10172\nIEFyYw== 10173\nIExld2lz 10174\nIE1pbmQ= 10175\nIGRlbW9uc3RyYXRl 10176\nIHByb2ZpdHM= 10177\ndmlzaW9u 10178\nb21pYw== 10179\nb2xpZA== 10180\nIGJhdHRsZXM= 10181\nIGRyaXZlcw== 10182\nIGVhc3Rlcm4= 10183\nIFNvbnk= 10184\nISEh 10185\nYXJhdGlvbg== 10186\ndmFyZA== 10187\nIEdM 10188\ncG9ydGF0aW9u 10189\nIDky 10190\nIGxhd21ha2Vycw== 10191\nIHByb3RlY3Rpbmc= 10192\nIEVQQQ== 10193\nIHllYWg= 10194\nIHNoYW1l 10195\nb2xwaA== 10196\nZXZlbg== 10197\neGl0 10198\nIGF0dGFjaA== 10199\nIHJlcHJlc2VudGluZw== 10200\nIG9icw== 10201\nIFV0YWg= 10202\naWZmcw== 10203\nIEZyZWVkb20= 10204\nw7M= 10205\nQUs= 10206\nIGluY2lkZW50cw== 10207\naXRhZ2U= 10208\nIHZpZXdlcnM= 10209\nY2Q= 10210\nIG1vdXNl 10211\nIGNsYXI= 10212\nIGFjY29yZGFuY2U= 10213\nIGJvdA== 10214\nY29y 10215\nIFN1bW1lcg== 10216\naGVsZA== 10217\nIGlubm9jZW50 10218\nIGluaXRpYXRpdmU= 10219\nb2xz 10220\nX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= 10221\nIHNwb3Rz 10222\ncGFjZQ== 10223\nIGNvbnZlbnRpb25hbA== 10224\nIGNvcnBvcmF0aW9ucw== 10225\nIGJsb2NrZWQ= 10226\nSEQ= 10227\nYXR0ZXJlZA== 10228\nIHJlZmVycw== 10229\nIGJ1Y2s= 10230\nIERpZ2l0YWw= 10231\nMTIw 10232\nIHRvcGljcw== 10233\nVEY= 10234\nxIE= 10235\nYnJpZA== 10236\ncmVlbWVudA== 10237\nIHVuZGVybHlpbmc= 10238\nIE1lbWJlcg== 10239\nIGludmVzdGlnYXRpbmc= 10240\nIHByZWduYW5jeQ== 10241\nIHRvdWNoZG93bg== 10242\nIEJhbmQ= 10243\nIENhbGxlcg== 10244\nIGluc3RhbmNlcw== 10245\nUFA= 10246\nd2E= 10247\nR29vZA== 10248\nIDE5OTE= 10249\nIENvbGQ= 10250\nIGZlYXJz 10251\nIHJlbWFya3M= 10252\nhpI= 10253\nYXRhbA== 10254\nIG1pdA== 10255\nIGV4cGVyaW1lbnRz 10256\naXB0 10257\nQ29sb3I= 10258\naW5kdQ== 10259\nVXBkYXRl 10260\nIDkz 10261\nQWc= 10262\nIOU= 10263\nYW5jb3V2ZXI= 10264\nQm90aA== 10265\nIGp1ZGdlcw== 10266\nT2JqZWN0 10267\nIHN0ZXJl 10268\ndW1ibg== 10269\nIHBhcnRpY2lwYXRpb24= 10270\nIFN0YXJz 10271\nIEplcmU= 10272\nIHdlZWtseQ== 10273\nIEJhbg== 10274\nIGNvbnZlcnNhdGlvbnM= 10275\nIFBpdHQ= 10276\ndXo= 10277\nIEluZGlhbmE= 10278\nIEtpY2s= 10279\nIGluZmVjdGlvbg== 10280\nIGhlcm9lcw== 10281\nIHNldHRsZWQ= 10282\nIHN0cmlw 10283\nIGhhbA== 10284\nIGR1bXA= 10285\nIFNjaQ== 10286\nIGxlcw== 10287\nIHJlZmVyZW5jZXM= 10288\nIFVSTA== 10289\nIEJyaWRnZQ== 10290\nIHdhbnRpbmc= 10291\nRm9yY2U= 10292\nIGV4Y2x1cw== 10293\nTWVhbndoaWxl 10294\nbW4= 10295\nIGdlbnRsZQ== 10296\nbWFrZXI= 10297\nc2VuYWw= 10298\nIEdybw== 10299\nb3VyaQ== 10300\nIFJhaW4= 10301\nIEFsbGlhbmNl 10302\nIGxpZnQ= 10303\nZWxh 10304\nU0Q= 10305\nIENsZXZlbGFuZA== 10306\nIHJhbmtlZA== 10307\nIHN0YWRpdW0= 10308\nIGRlYWRseQ== 10309\n5Lg= 10310\nIHJpZGluZw== 10311\nYXJpYQ== 10312\nIEFybW9y 10313\nIGRvY3VtZW50YXRpb24= 10314\nIEdyZWVjZQ== 10315\ncmVlaw== 10316\nIGxlbnM= 10317\nIFNh 10318\nIGdyb3Nz 10319\nIEVtZXI= 10320\nYWdlcnM= 10321\nIER1Yg== 10322\nIFJo 10323\nIEFNRA== 10324\nIGFycml2YWw= 10325\nIGRlc2VydA== 10326\nIHN1cHBsZW1lbnQ= 10327\nIFJlc3A= 10328\nIGtuZWU= 10329\nIG1hcmdpbg== 10330\nZm9udA== 10331\nb2dn 10332\nMjAxMA== 10333\nIFBpcg== 10334\nIFByb20= 10335\naXZhbHM= 10336\nIGludGFrZQ== 10337\nIGRpZmZlcmVudGx5 10338\ndWdz 10339\nIGJpdHM= 10340\nY2x1ZGVk 10341\nIHNlYXJjaGluZw== 10342\nIER1 10343\ndW1ibGU= 10344\nIGZ1bmN0aW9uYWw= 10345\nIEJhbHRpbW9yZQ== 10346\nIENvdWxk 10347\nIGRlc2lyZWQ= 10348\nIGNpcmN1aXQ= 10349\nIEx5bg== 10350\nIEdP 10351\nIEZhbHNl 10352\ncmVwcmU= 10353\nJzo= 10354\nYWx0aWVz 10355\nIG1pbmlt 10356\nIGRyb3Zl 10357\nIFNob3VsZA== 10358\nIGhpcA== 10359\nIHByb3M= 10360\nIHV0aWxpdHk= 10361\nIE5hdHVyZQ== 10362\nIE1vZGU= 10363\nUHJlc2lkZW50 10364\nb3Bw 10365\ncmF0 10366\nZm9ybWFuY2U= 10367\nIGNvbmNlbnRyYXRpb24= 10368\nIGZvbnQ= 10369\nIEJ1ZA== 10370\nIGFtaWQ= 10371\nIHJldmVycw== 10372\nIE1M 10373\nQmFy 10374\nIGludGVyYWN0aW9u 10375\nIGp1cmlzZA== 10376\nIHNwZWxscw== 10377\nZGVw 10378\nZmls 10379\nIGNpdmlsaWFucw== 10380\ndXR0ZXI= 10381\nIENvb3Blcg== 10382\nIEJlbG93 10383\nIGVudHJhbmNl 10384\nIGNvbnZlcnQ= 10385\nIGNvbnRyb3ZlcnN5 10386\nb3dlcmVk 10387\nIGNvbnRyYXJ5 10388\nIGFyYw== 10389\nIEV4ZWN1dGl2ZQ== 10390\nIE9mZmljZXI= 10391\nIHBhY2thZ2Vz 10392\nIHByb2dyZXNzaXZl 10393\nd2lkdGg= 10394\nIHJlc2VydmVk 10395\ndm9s 10396\nIFNhbXN1bmc= 10397\nIHByaW50ZWQ= 10398\nIGNlbnRlcnM= 10399\nIGludHJvZHVjZQ== 10400\nIEtlbm5lZHk= 10401\nIG9kZHM= 10402\nIHN1cmVseQ== 10403\nIGluZGVwZW5kZW5jZQ== 10404\nIHBhc3NlbmdlcnM= 10405\ncmVwcmVuZQ== 10406\nIEJlaA== 10407\nIGxvdmVz 10408\nIEVTUE4= 10409\nIGZhY2lsaXQ= 10410\nIGlkZW50aWNhbA== 10411\nIGRvY3Q= 10412\nIHBhcnRuZXJzaGlw 10413\nY29uZg== 10414\nIEhpZGU= 10415\nIGNvbmZ1c2Vk 10416\nIENvdw== 10417\nTWVu 10418\nIHdyZXN0 10419\nIElyYXFp 10420\nIGhvbGVz 10421\nIFN0dWRpZXM= 10422\nIHByZWduYW50 10423\naGFyZA== 10424\nIHNpZ25hbHM= 10425\nSVg= 10426\nIHB1bGxpbmc= 10427\nIGdyYWR1YXRl 10428\nIG5vbWluZWU= 10429\nRGF0ZQ== 10430\nIHBlcm1pdHRlZA== 10431\nIOKCrA== 10432\nIE9rbGFob21h 10433\nU3RhcnQ= 10434\nIGF1dGhvcml6ZWQ= 10435\nIGFsYXJt 10436\nIENvcw== 10437\ndmFu 10438\nIGdlbmVyYXRpb25z 10439\nY3VsYXI= 10440\nIGRyYWdvbg== 10441\nIFNvZnR3YXJl 10442\nIEVkd2FyZA== 10443\nIGNvbnRyb2xsZXI= 10444\nU2Vu 10445\nZ2VyZWQ= 10446\nIFZpaw== 10447\nIGFwcHJvYWNoZWQ= 10448\nVGhhbms= 10449\nIGNhbmNl 10450\nIGZvcm11bGE= 10451\nIFNtYWxs 10452\nIHdlYWtuZXNz 10453\nIHJhbXA= 10454\naXR1ZGVz 10455\nanVk 10456\nIGJyaWxsaWFudA== 10457\nIGFjY3Vz 10458\nc291cmNl 10459\nIDgwMA== 10460\nIEV2aWw= 10461\nU3c= 10462\nIGhvbWVsZXNz 10463\nd2Vlaw== 10464\naWVucw== 10465\ncmljcw== 10466\nIFRoaXJk 10467\nVE8= 10468\nIG9yZ2FuaWM= 10469\nIHByZXNlbnRhdGlvbg== 10470\nYWdo 10471\nIERvd25sb2Fk 10472\ndmF0aW9u 10473\nIGFzc2VtYmx5 10474\nb3JhYmxl 10475\naG9sZGVycw== 10476\nIEJlcm5pZQ== 10477\nIEhlbHA= 10478\nIHRvbmc= 10479\nIEZpZ2h0 10480\nIGJlYWNo 10481\nQm9vaw== 10482\nIExpYw== 10483\nIHJ1c2g= 10484\nIFJvdW5k 10485\nb3Vw 10486\nIE1hcng= 10487\nIGNhbGN1bGF0ZWQ= 10488\nIERldmls 10489\nIFNhcmFo 10490\nIG9jY2FzaW9uYWxseQ== 10491\nIGJ1bGxldA== 10492\nQXZhaWxhYmxl 10493\nZ2F0ZQ== 10494\nIDkx 10495\nIGhvc3A= 10496\nIHByb21pc2Vz 10497\nIEhJVg== 10498\nIFN0YWRpdW0= 10499\nIFN0b2Nr 10500\nIENvcnBvcmF0aW9u 10501\nZ2FnZQ== 10502\nTkc= 10503\nIENyZWRpdA== 10504\nIHNuZQ== 10505\naWJs 10506\nIGFjY3Vt 10507\nc3VjaA== 10508\nIHRlcnJvcmlzdHM= 10509\nIGNvbnNjaW91c25lc3M= 10510\nIFpo 10511\nIGRyYW1h 10512\nb29sYQ== 10513\ncGlyYXRpb24= 10514\nIGxhYm91cg== 10515\nIE5pbg== 10516\nIHV0dGVy 10517\nIGRlbW9jcmF0aWM= 10518\nIGFzc2Fzcw== 10519\naWxhdGlvbg== 10520\nIGdlc3Q= 10521\nIGFicm9hZA== 10522\nIG1ldGFi 10523\nIHNvcnRz 10524\nIGZsYXY= 10525\nVUI= 10526\nIG1n 10527\nIE5vdGhpbmc= 10528\nIE9k 10529\nIG11c2ljYWw= 10530\nMjAwOQ== 10531\nIGRyb3Bz 10532\nb2NhdGVk 10533\nYXRlcmFs 10534\nMDAwMDAw 10535\nIGdyZQ== 10536\nIGVxdWFsaXR5 10537\nIGJ1cmRlbg== 10538\nIHZpZw== 10539\nIExlYWRlcg== 10540\nLS0tLS0tLS0tLS0t 10541\nIGNlcmVtb255 10542\nIGZpZ2h0ZXI= 10543\nIGFjdG9ycw== 10544\nIOY= 10545\nYW1hbg== 10546\nRmk= 10547\nIGFsaWdu 10548\ncHV0ZXI= 10549\nIGVsZGVy 10550\nIE5TQQ== 10551\nIHJlcHJlc2VudGF0aW9u 10552\nIE9udGFyaW8= 10553\nSVRI 10554\ndXNhbGVt 10555\nIGhhcmFzc21lbnQ= 10556\naXR6ZXI= 10557\nIHN5bXA= 10558\nIGJveGVz 10559\nIERS 10560\nIG1hbmlmZXN0 10561\nYXRyZQ== 10562\nIF4= 10563\nIGRpZXM= 10564\nbGV0b24= 10565\nIG1pc3Npb25z 10566\nZXRoZQ== 10567\nIHJlc29sdmU= 10568\nIGZvbGxvd2Vycw== 10569\nIGFzYw== 10570\nIGtt 10571\nbG9yZA== 10572\nYW1tZWQ= 10573\nIHNpbGVudA== 10574\nIEFzc29jaWF0ZWQ= 10575\nIHRpbWluZw== 10576\nIHByaXNvbmVycw== 10577\nIEtpbmdz 10578\nIEZpdmU= 10579\nIHRvd2Vy 10580\nIGFwcHJvYWNoZXM= 10581\nIHByZWNpc2VseQ== 10582\nIGJ1cmVhdQ== 10583\nIE1vdGhlcg== 10584\nIElzcw== 10585\nIGtleWJvYXJk 10586\naXR1YWw= 10587\nIGZ1bmRlZA== 10588\nIHN0YXlpbmc= 10589\nIHBzeWNob2xvZ2ljYWw= 10590\nIG1pbGU= 10591\nIExlb24= 10592\nIEJhcmI= 10593\nd2lsbA== 10594\nIHdpZGVy 10595\nIEF0bGFudGlj 10596\nIHRpbGw= 10597\nIFJvbWU= 10598\ncm90 10599\nIGFjY29tcGFu 10600\nIGZsb3Vy 10601\nYWNv 10602\nV29ybGQ= 10603\nIEV4cHJlc3M= 10604\nIFl1 10605\nQ29y 10606\nIHBsZWFzZWQ= 10607\ncGFydHk= 10608\nIHBvaW50aW5n 10609\nIGluZmxhdGlvbg== 10610\nIHJveQ== 10611\nICks 10612\nYWluZXI= 10613\nIHdlZGRpbmc= 10614\nb3Jtb24= 10615\nIHJlcXVpcmluZw== 10616\nIHF1YWxpZmllZA== 10617\nIHNlZ21lbnQ= 10618\nRU5E 10619\nIHNpemVz 10620\nZWFscw== 10621\nIGNvcnJ1cHQ= 10622\nYXNzYWRvcg== 10623\nIGNlbGVi 10624\nIGRyZWFtcw== 10625\nIE1lc3M= 10626\nIGNoZWNraW5n 10627\nIFZlcnNpb24= 10628\nIHByZXBhcmluZw== 10629\nIGFjdGl2ZWx5 10630\nIERpZmY= 10631\nIGx1eA== 10632\nIFdpbnRlcg== 10633\nYWN0ZXJpYQ== 10634\nIE5F 10635\nIGRlcHV0eQ== 10636\nIHRyYW5zZ2VuZGVy 10637\nIHN1bW1hcnk= 10638\nIGluaGVy 10639\nZXJpZXM= 10640\nY2hhcg== 10641\nIFlhbg== 10642\nIGtub2Nr 10643\nIFBhdGg= 10644\nIGxpcA== 10645\ncm9sbGVy 10646\nIGltcHJlc3Npb24= 10647\nIGNlbGVicmF0ZQ== 10648\nIHNsaWRl 10649\nIGd1ZXN0cw== 10650\nIGNsaXA= 10651\nRlM= 10652\nIHNhdmluZ3M= 10653\nIGNhcHRhaW4= 10654\nIGxlZ2FjeQ== 10655\nIERlbnZlcg== 10656\nIHdvdW5kZWQ= 10657\ndGFib29sYQ== 10658\nQUNU 10659\nIHB1cnN1ZQ== 10660\nIG94eQ== 10661\nIHE= 10662\nIHNlbWk= 10663\nIE5lZWQ= 10664\nIEFmZmFpcnM= 10665\nIG9ic2M= 10666\nIGNoZWNrZWQ= 10667\nIGR1YWw= 10668\nQ29kZQ== 10669\nIE1E 10670\nbGVt 10671\ndWx0eQ== 10672\nIMKp 10673\nIEVsaXphYmV0aA== 10674\nIGNlbnR1cmllcw== 10675\nYXJkZWQ= 10676\nc3Jj 10677\nIGV2aWRlbnQ= 10678\nZW5uaXM= 10679\nYXRpbg== 10680\nIHVuZW1wbG95bWVudA== 10681\nIE1hcmlv 10682\nIGludGlt 10683\nQ2hyaXN0 10684\nIGJpb2xvZ2ljYWw= 10685\nIHNvbGRpZXI= 10686\nIEFkZGVk 10687\nIG1hdGg= 10688\nIEdpbA== 10689\nIGJpYXM= 10690\nIGRhdGluZw== 10691\nIE9jZWFu 10692\nIG1pY2U= 10693\nTXVz 10694\naGlyZQ== 10695\nIFRlcw== 10696\nU2VydmVy 10697\nbGltaXRlZA== 10698\nU2l6ZQ== 10699\nIG1ldGVycw== 10700\nIHJvY2tldA== 10701\nZXNzZWU= 10702\nIGNlcnRpZmljYXRl 10703\nIElyYW5pYW4= 10704\nQVNT 10705\nIGdyaWQ= 10706\nRGVj 10707\nIHJvbGxpbmc= 10708\nY29tbXVu 10709\nIFN3ZWRlbg== 10710\nYnVyeQ== 10711\nIHRpc3N1ZQ== 10712\nIHJhY2lzbQ== 10713\nIExvY2Fs 10714\nIG15c3Rlcnk= 10715\nIGV4YW1pbmU= 10716\nIHN0ZW0= 10717\nIHNpdHM= 10718\nIGhvcGVk 10719\nb3Rpbmc= 10720\nIGRpYWxvZ3Vl 10721\nIHBlcnN1 10722\nV2F0Y2g= 10723\nbGF5 10724\nTUFO 10725\nIGNocm9uaWM= 10726\nIFBvcnRsYW5k 10727\nbWFya2V0 10728\nIFNFQw== 10729\nIHBhcmFsbGVs 10730\nIHNjYW5kYWw= 10731\nIGNhcnJpZXM= 10732\nIHBoZW5vbWVub24= 10733\naHVtYW4= 10734\nYWNrZXI= 10735\nIE94 10736\nIHJldGlyZW1lbnQ= 10737\ndGFpbm1lbnQ= 10738\nb3ZpZQ== 10739\nIEdlYXI= 10740\nIGR1dGllcw== 10741\nIGRvc2U= 10742\nIHNjcm9sbA== 10743\nTUI= 10744\naW5m 10745\nIHNhdWNl 10746\nIGxhbmRzY2FwZQ== 10747\ncmVkZGl0 10748\nIENoYW1waW9uc2hpcA== 10749\nIFJlZGRpdA== 10750\nYWxpZA== 10751\nIGNvaW4= 10752\nIG92ZXJz 10753\nIHBvc3Rpbmc= 10754\nYWJvdXQ= 10755\nIGZlbA== 10756\nYW5keQ== 10757\nIGJvbGQ= 10758\nIGZvY3VzaW5n 10759\nZWZmZWN0 10760\nR1I= 10761\nIGRlZW1lZA== 10762\nIHJlY29tbWVuZGF0aW9ucw== 10763\nIHN0ZXBwZWQ= 10764\nIHZvdGVy 10765\nIERlZXA= 10766\nIEluc3RhZ3JhbQ== 10767\nIG1vZGVyYXRl 10768\nIE1hcnlsYW5k 10769\nIHJlc3RyaWN0ZWQ= 10770\nIE1C 10771\nIENoYWxs 10772\nIHRvYg== 10773\nIGNpcg== 10774\nIE9jYw== 10775\nIEV2ZXI= 10776\nIGNvbGxhcHM= 10777\nSU5GTw== 10778\nPS0= 10779\nIFBpY3Q= 10780\nIEFjY291bnQ= 10781\nbmM= 10782\nIG91Z2h0 10783\nIGV4cG9ydA== 10784\nIGRydW5r 10785\nKCc= 10786\nIHdpc2U= 10787\nIE1vcnQ= 10788\nbmVjZXNz 10789\nIGFuY2VzdA== 10790\nIEluY3Jl 10791\nIGZyZXF1ZW50 10792\nbWly 10793\nIGludGVycHJldGF0aW9u 10794\nIGRlcGVuZGVudA== 10795\nIGNvaW5z 10796\nIEJvbA== 10797\nVmlkZW8= 10798\nIEp1c3Rpbg== 10799\nIGZhdGFs 10800\nIGNvb2tpbmc= 10801\nIGNvbmZ1c2lvbg== 10802\naXBoZXI= 10803\nIGN1c3RvZHk= 10804\nIE1vcmdhbg== 10805\nb21hY2g= 10806\nIEdvdmVybm9y 10807\nIHJlc3RhdXJhbnRz 10808\nZWxpbmc= 10809\nIGFja25vd2xlZGdlZA== 10810\nIHRoZXI= 10811\nIGdlbmVz 10812\nY2hpbmc= 10813\nSGV5 10814\nIHRhY3RpY3M= 10815\nIE1leGljYW4= 10816\nIHZlbmQ= 10817\nIGhlcw== 10818\ncXVlcg== 10819\nIG5vdGluZw== 10820\nIENhbWVyb24= 10821\nIHRhcmdldGluZw== 10822\ncm9jaw== 10823\nIGNyZWRpdHM= 10824\nIGVtb3Rpb25z 10825\nIHJlcHJlc2VudGF0aXZlcw== 10826\nbmV3cw== 10827\nIGxlZ2lzbGF0aXZl 10828\nIHJlbW92aW5n 10829\nIHR3ZWV0ZWQ= 10830\nIENhcnRlcg== 10831\nIEZpeGVk 10832\nIGZvcmNpbmc= 10833\nIHNwZWFrZXI= 10834\nIG1hbGVz 10835\nIFZpZXRuYW0= 10836\nbGluZWQ= 10837\nIGNvbmNlcHRz 10838\nIHZvaWNlcw== 10839\nb2ly 10840\nIFRyaWI= 10841\nV2hl 10842\nIEplcnVzYWxlbQ== 10843\nIFNhbnQ= 10844\nIGN1bA== 10845\nIGxhZHk= 10846\nIEhhd2Fp 10847\nIGFydHM= 10848\nIElubg== 10849\nIE1hY2hpbmU= 10850\nIEVtcGVyb3I= 10851\nIHNsb3Q= 10852\nZ2x5 10853\nIFByb2Nlc3M= 10854\nSUlJ 10855\nIGF0aGxldGVz 10856\nIFRlbXBsZQ== 10857\nIFJlcHJlc2VudA== 10858\nIHByZXNj 10859\nIHRvbnM= 10860\nIGdvbGRlbg== 10861\nIHB1bmNo 10862\nIEdS 10863\naXZlcnBvb2w= 10864\nIGVuYWN0 10865\nIGxvYmJ5 10866\nIG1vcw== 10867\nIHBpY2tpbmc= 10868\nIGxpZmV0aW1l 10869\nIGNvZ25pdGl2ZQ== 10870\nRWFjaA== 10871\nem8= 10872\nIGR1Yg== 10873\nIGNvbnNpc3Rz 10874\nb2xu 10875\nIGZlc3RpdmFs 10876\nYW1vdXM= 10877\nIGludGVsbGln 10878\nd29yZHM= 10879\nIFNtYXJ0 10880\nIGRlbGU= 10881\nIGxhcHQ= 10882\nIG1hZ2ljYWw= 10883\nIFNpbg== 10884\nYnVz 10885\ndXJpdGllcw== 10886\naWdodGg= 10887\nIFJ1Ynk= 10888\nIFN1cmU= 10889\nb2x2aW5n 10890\nIGp1bg== 10891\nT1NU 10892\nIGltcG9zZWQ= 10893\nIGFzdHJvbg== 10894\nIGNvcnJlbA== 10895\nIE5T 10896\nIEtpdA== 10897\nIEZ1dHVyZQ== 10898\nYnVybg== 10899\nIGltbXVuZQ== 10900\nb2N1cw== 10901\nIGNvdXJzZXM= 10902\nIFN0cmluZw== 10903\nIGxlYW4= 10904\nIGdob3N0 10905\nIG91dGNvbWVz 10906\nIGV4cGVuc2U= 10907\nIGV2ZXJ5ZGF5 10908\nIGFjY2VwdGFibGU= 10909\nQWg= 10910\nIGVxdWlwcGVk 10911\nIG9yYW5nZQ== 10912\nRlI= 10913\nIER1dGNo 10914\nVGhvdWdo 10915\nIFJhbms= 10916\nUVU= 10917\nIFJvYmVydHM= 10918\nd2hhdA== 10919\ncmVuZA== 10920\nIGRpc2FwcGVhcg== 10921\nIHNwYXdu 10922\nIExhbQ== 10923\nb2lz 10924\nIGRlc2VydmU= 10925\nIG1pbmltYWw= 10926\nIG5lcnZvdXM= 10927\nIFdvdWxk 10928\nIHJvb2s= 10929\nIFZhbmNvdXZlcg== 10930\nIHJlc2lnbg== 10931\nc2hpcmU= 10932\nIFdvcmtz 10933\nIEJ1aWxk 10934\nIGFmZm9yZGFibGU= 10935\nIEdhcnk= 10936\nIEFyZW5h 10937\nIGhhbmdpbmc= 10938\nIGltcGxpY2F0aW9ucw== 10939\nIFNvbmc= 10940\nIG1haW50YWluaW5n 10941\nIGd1YXJkcw== 10942\nQ09O 10943\nIGRlcml2ZWQ= 10944\nIGV4ZWN1dGVk 10945\nIHRoZW9yaWVz 10946\nIHF1b3RlZA== 10947\nIEFuZHJl 10948\nb2dh 10949\nc2VsZXNz 10950\naW5mbw== 10951\nIEJlbGc= 10952\nIHRlYXJz 10953\nIFN1cnY= 10954\nIGJpcnRoZGF5 10955\naWdpb3Vz 10956\naW1tZXI= 10957\nIHNwZWN0cnVt 10958\nIGFyY2hpdGVjdHVyZQ== 10959\nIHJlY3J1aXQ= 10960\nYXJtYQ== 10961\nVGFibGU= 10962\nIG1vbnN0ZXJz 10963\nIEdvdg== 10964\nIGRlc3RpbmF0aW9u 10965\nIGF0dHJhY3RpdmU= 10966\nIGZvc3M= 10967\nIE1vcmVvdmVy 10968\nIHByZXNlbnRz 10969\nVEhF 10970\nIHJlcGx5 10971\ncHRvbg== 10972\nIGN1bQ== 10973\nIGRlbGlnaHQ= 10974\nIGFmZmVjdHM= 10975\nIGRvbmF0aW9ucw== 10976\nIFRveQ== 10977\nIEhpbQ== 10978\nTUVOVA== 10979\nIG92ZXJjb21l 10980\naXRjaGVk 10981\nIEZhbnRhc3k= 10982\nIEhhdA== 10983\nIEJlYXN0 10984\nYm90dA== 10985\nIGludmVzdGlnYXRpb25z 10986\nUnVu 10987\nIGh1bnRpbmc= 10988\nZGk= 10989\nZnVuZA== 10990\nIHNlc3Npb25z 10991\nZXN0eWxl 10992\nIHBvcnRyYXk= 10993\nb2lkcw== 10994\nWWVhaA== 10995\nIGNvbW11bmljYXRl 10996\nIGNvbWVkeQ== 10997\nIFlhbmc= 10998\nIGJlbHQ= 10999\nIE1hcmluZQ== 11000\nIHByZWRpY3RlZA== 11001\nUGxheQ== 11002\nIGltcG9ydGFudGx5 11003\nIHJlbWFya2FibGU= 11004\nIGVsaW1pbmF0ZQ== 11005\nRGF2aWQ= 11006\nIGJpbmQ= 11007\nVklE 11008\nIGFkdm9jYXRlcw== 11009\nIEdhemE= 11010\naW1w 11011\nREI= 11012\nIE5h 11013\nIFNpbWlsYXI= 11014\nSUVT 11015\nIGNoYXJpdHk= 11016\ndmFz 11017\nbWF0aA== 11018\nIOKW 11019\nb2tlcg== 11020\nbmR1bQ== 11021\nIGNhcHM= 11022\nIEhhbA== 11023\nMjAwMA== 11024\nZWFu 11025\nIGZsZWV0 11026\nIHJlY3Jl 11027\nUmlnaHQ= 11028\nIHNsZWVwaW5n 11029\naWppbmc= 11030\na2luZA== 11031\nIGRlc2lnbmF0ZWQ= 11032\nw6Q= 11033\nIGFuaW1hdGlvbg== 11034\na2Vl 11035\nIEludHJvZHU= 11036\nIC8+ 11037\nIGRlbGF5ZWQ= 11038\nIHRyZW1lbmQ= 11039\nIGN1cmlvdXM= 11040\nVXNl 11041\nIGxlY3Q= 11042\nZGFt 11043\nIGlubm92YXRpb24= 11044\nIFBvaW50cw== 11045\nIGxvYWRpbmc= 11046\nIGRpc3B1dGU= 11047\nY3RpYw== 11048\naXJkcw== 11049\nIEJZ 11050\nIG51cnM= 11051\nIFZhbHVl 11052\nSU9OUw== 11053\nIEh1bQ== 11054\nIHRlbXBsYXRl 11055\nbWVycw== 11056\nIGFwcGVhcmFuY2Vz 11057\nIEVudGVydGFpbm1lbnQ= 11058\nIHRyYW5zbGF0aW9u 11059\nIHNha2U= 11060\nIGJlbmVhdGg= 11061\nIGluaGli 11062\nIGV1cm8= 11063\nYWJldGVz 11064\nIHN0dWR5aW5n 11065\nIE1hcw== 11066\nIHBlcmNlaXZlZA== 11067\nIGV4YW1pbmVk 11068\nIGVhZ2Vy 11069\nIGNvYWNoZXM= 11070\nIGltcGVy 11071\nY2hp 11072\nIHByb2R1Y2Vz 11073\nIiku 11074\nIEV2ZXJ5b25l 11075\nIG11bmljaXA= 11076\nIGdpcmxmcmllbmQ= 11077\nIGhpcmU= 11078\nIFZpY2U= 11079\nIHN1aXRhYmxl 11080\nb3B5 11081\nIGluZXF1 11082\nIER1a2U= 11083\nZmlzaA== 11084\nZmlyc3Q= 11085\nIE9icw== 11086\nIGludGVyaW9y 11087\nIEJydWNl 11088\nIFJ5 11089\nIGFuYWx5cw== 11090\nIGNvbnNpZGVyYWJsZQ== 11091\nIGZvcmVjYXN0 11092\nIGZlcnQ= 11093\nb3JzaGlw 11094\nIERydWc= 11095\nIEFMTA== 11096\nOiI= 11097\ndGh1cg== 11098\nIE1haWw= 11099\nIGJhbGxvdA== 11100\nIGluc3RhbnRseQ== 11101\nIENoYW5uZWw= 11102\nIHBpY2tz 11103\nIDE5ODk= 11104\nIHRlbnQ= 11105\nb2xp 11106\nIGNpdmlsaWFu 11107\nYmxpbmc= 11108\nZWxsbw== 11109\nYnU= 11110\nIGluY2g= 11111\nIGxvZ28= 11112\nIGNvb3BlcmF0aW9u 11113\nIHdhbGtz 11114\nIGludmVzdG1lbnRz 11115\nIGltcHJpc29u 11116\nIEZlc3RpdmFs 11117\nIEt5 11118\nIGxlZ2FsbHk= 11119\nIGdyaQ== 11120\nY2hhcmc= 11121\nU2w= 11122\nIHRocmVhdGVuaW5n 11123\nZHVjdGlvbg== 11124\nZmxvdw== 11125\nIGRpc21pc3NlZA== 11126\naWJyYXJpZXM= 11127\nY2Fw 11128\nZWxl 11129\nIE1jRw== 11130\nIEhhcnZhcmQ= 11131\nIENvbnNlcnZhdGl2ZQ== 11132\nIENCUw== 11133\ncG5n 11134\nIHJvb3Rz 11135\nIEhhdmluZw== 11136\ndW1ibGVk 11137\nIEZ1bg== 11138\nXC8= 11139\nIFNlYXJjaA== 11140\ncGxleA== 11141\nIGRpc2N1c3Npbmc= 11142\nIGNvbnRpbnU= 11143\nIFRhaQ== 11144\nIFdpaw== 11145\nRnJlZQ== 11146\nZml0 11147\nIHJlZnVzZQ== 11148\nIG1hbmFnaW5n 11149\nIHN5bmQ= 11150\naXBlZGlh 11151\nd2Fsaw== 11152\nIHByb2Zlc3Npb25hbHM= 11153\nIGd1aWRhbmNl 11154\nIHVuaXZlcnNpdGllcw== 11155\nIGFzc2VtYg== 11156\ndW50dQ== 11157\nRmluYWxseQ== 11158\nQVNF 11159\nIEF1dG8= 11160\nIEhhZA== 11161\nIGFubml2ZXJzYXJ5 11162\nTEQ= 11163\nIER1cg== 11164\nIFVsdGltYXRl 11165\naWhhZA== 11166\ncHJvZHVjdA== 11167\nIHRyYW5zaXQ= 11168\nIHJlc3RvcmU= 11169\nIGV4cGxhaW5pbmc= 11170\nIGFzc2V0 11171\nIHRyYW5zZmVycmVk 11172\nIGJ1cnN0 11173\nYXBvbGlz 11174\nIE1hZ2F6aW5l 11175\nIENyYQ== 11176\nIEJS 11177\nZ2dlZA== 11178\nIEhF 11179\nTWljaA== 11180\nYmV0 11181\nIExhZHk= 11182\neWx1bQ== 11183\nZXJ2ZXM= 11184\nIG1lZXRz 11185\nd2hpdGU= 11186\nTG9n 11187\nIGNvcnJlc3BvbmRpbmc= 11188\nIGluc2lzdGVk 11189\nR0c= 11190\nIHN1cnJvdW5kZWQ= 11191\nIHRlbnM= 11192\nIGxhbmU= 11193\nIGNvaW5j 11194\naG9tZQ== 11195\nIGV4aXN0ZWQ= 11196\nZWN0ZWQ= 11197\nIERvdWJsZQ== 11198\nbGFtbQ== 11199\nIHNrZXB0 11200\nZXhw 11201\nIHBlcmNlcHRpb24= 11202\naWV2 11203\nIEJlaW5n 11204\nb2Z0 11205\nIGFkb3B0 11206\nLjo= 11207\nXTs= 11208\nV2luZG93cw== 11209\nIHNhdGVsbGl0ZQ== 11210\nQVNI 11211\nIGluZmFudA== 11212\nZGVzY3JpcHRpb24= 11213\nIE1lYW53aGlsZQ== 11214\nY20= 11215\nb2Nh 11216\nIFRyZWF0 11217\nYWN0b3I= 11218\nIHRvYmFjY28= 11219\nIE5vcm0= 11220\nZW1wdGlvbg== 11221\nIGZsZXNo 11222\nIGpl 11223\nb29w 11224\nIEhlYXZlbg== 11225\nIGJlYXRpbmc= 11226\nYW5pbQ== 11227\nIGdhdGhlcmluZw== 11228\nIGN1bHRpdg== 11229\nR08= 11230\nYWJl 11231\nIEpvbmF0aGFu 11232\nIFNhZmV0eQ== 11233\nIGJhZGx5 11234\ncHJvdA== 11235\nIGNob29zaW5n 11236\nIGNvbnRhY3RlZA== 11237\nIHF1aXQ= 11238\nIGRpc3R1cg== 11239\nIHN0aXI= 11240\nIHRva2Vu 11241\nRGV0 11242\nIFBh 11243\nIGZ1bmN0aW9uYWxpdHk= 11244\nMDAz 11245\nc29tZQ== 11246\nIGxpbWl0YXRpb25z 11247\nIG1ldGg= 11248\nYnVpbGQ= 11249\nY29uZmln 11250\nTlQ= 11251\ncmVsbA== 11252\nYmxlbQ== 11253\nIE1vbQ== 11254\nIHZldGVyYW5z 11255\nIEh1 11256\nIHRyZW5kcw== 11257\nYXJlcg== 11258\nIEdpdmVu 11259\nIENhcHRpb24= 11260\nbWF5 11261\nQVNU 11262\nIHdvbmRlcmluZw== 11263\nIENsYXJr 11264\nbm9ybWFs 11265\nIHNlcGFyYXRlZA== 11266\nIGRlc3A= 11267\nc3RpYw== 11268\nYnJldw== 11269\nIHJlbGF0aW5n 11270\nIE5paw== 11271\nIEZhcm0= 11272\nIGVudGh1c2k= 11273\nZ29vZA== 11274\nZGVi 11275\nIGFjdGl2aXN0 11276\nIG1hcnQ= 11277\nIGV4cGxvc2lvbg== 11278\nIEVjb25vbWlj 11279\nTGluaw== 11280\nIGluc2lnaHQ= 11281\nIGNvbnZlbmllbnQ= 11282\nIGNvdW50ZXJwYXJ0 11283\nc3VwcG9ydA== 11284\nIFZpcnQ= 11285\nYWdlbg== 11286\nIFRlbm5lc3NlZQ== 11287\nIFNpbW9u 11288\nIEF3YXJk 11289\nT0NL 11290\nIEZpZ3VyZQ== 11291\nIG92ZXJzZWFz 11292\nIHByaWRl 11293\nIENhcw== 11294\nbm90ZQ== 11295\nbWc= 11296\nQ3VycmVudA== 11297\nIGRpc3BsYXlz 11298\nY29udGVudA== 11299\nIHRyYXZlbGluZw== 11300\nIGhvc3BpdGFscw== 11301\nIEZpbmFuY2lhbA== 11302\nIFBhc3Q= 11303\nIGRlZmVuZGFudA== 11304\nIHN0cmVhbWluZw== 11305\nbWJsZQ== 11306\nIEJlcmxpbg== 11307\ndWtp 11308\nIGRpc3RyaWJ1dA== 11309\nIGFudGli 11310\nIGNob2NvbGF0ZQ== 11311\nIENhc3RsZQ== 11312\nIGludGVycnVwdA== 11313\nIFJvdw== 11314\nIGNvbnZlcnNpb24= 11315\nIGJ1Z3M= 11316\nIFJhdGhlcg== 11317\nbGllc3Q= 11318\nTFk= 11319\nIEplYW4= 11320\nY29tbW9u 11321\nYWto 11322\nIDEzMA== 11323\nb3R0b24= 11324\nIERlYW4= 11325\nIGFtZW5kbWVudA== 11326\nIGdhbWVwbGF5 11327\nIFdhcnJlbg== 11328\nb2Rh 11329\nIGhpZ2hsaWdodHM= 11330\nIGlycmU= 11331\nIE5BVE8= 11332\nIGJhbGxz 11333\nIGRlbWFuZGluZw== 11334\nVVJF 11335\nIEx1a2U= 11336\nRmlndXJl 11337\nc3RvcA== 11338\nb25pYQ== 11339\nem9uZQ== 11340\naXplcnM= 11341\nIFdS 11342\nIGF3YXJkZWQ= 11343\nIHJlZ3VsYXRvcnk= 11344\nIEhhcnQ= 11345\nIFNO 11346\ncGxpbmc= 11347\nIHNvdXI= 11348\nIFBpeGVs 11349\ndXNpdmU= 11350\nIGZldA== 11351\nIFNlbnQ= 11352\nIGF1dG9tYXRpYw== 11353\nIGZlcg== 11354\ndmVybm1lbnQ= 11355\nIEtoYW4= 11356\nVE9O 11357\nZmF0aGVy 11358\nIGV4dHJhb3JkaW5hcnk= 11359\ndGhyb3A= 11360\nIFB5dGhvbg== 11361\nIEdQVQ== 11362\nIHNleHVhbGx5 11363\nIGRlc2t0b3A= 11364\naXRpdml0eQ== 11365\nIEFudG9uaW8= 11366\nIG9yaWVudA== 11367\nIGVhcnM= 11368\nb2JieQ== 11369\nb3VzZXM= 11370\ndmVydGlzZW1lbnRz 11371\nIG1hbnVmYWN0dXJlcnM= 11372\naWNpZW50 11373\nbWludXRl 11374\nIGNvbnZpY3Rpb24= 11375\nIGdhcmRlbg== 11376\ncHVibGlj 11377\nIHNhdGlzZmllZA== 11378\nZm9sZA== 11379\nT0s= 11380\nIGluaGFi 11381\nIFRoaW5r 11382\nIHByb2dyYW1tZQ== 11383\nIHN0b21hY2g= 11384\nIGNvb3JkaW4= 11385\nIGhvbHk= 11386\nIHRocmVzaG9sZA== 11387\nIHJoZXQ= 11388\nIHNlcmlhbA== 11389\nIGVtcGxveWVycw== 11390\nIEV2ZXJ5dGhpbmc= 11391\ncmFo 11392\nIGJvdGhlcg== 11393\nIGJyYW5kcw== 11394\nVmFsdWU= 11395\nIFRlZA== 11396\nIFBsYW5ldA== 11397\nIHBpbms= 11398\nIEZ1cnRoZXJtb3Jl 11399\nc2E= 11400\nUEU= 11401\ncmVjaw== 11402\nIFVTRA== 11403\nb3R0ZQ== 11404\nICYm 11405\nIGxhbmRlZA== 11406\nZ2V0cw== 11407\nIHByb2R1Y2Vycw== 11408\nIGhlYWx0aGNhcmU= 11409\nIGRvbWluYW50 11410\nIGRlc3Rybw== 11411\nIGFtZW5kZWQ= 11412\nY2hyb24= 11413\nIGZpdHM= 11414\nIFN5ZA== 11415\nIEF1dGhvcml0eQ== 11416\nQVRDSA== 11417\nIGZpZ2h0cw== 11418\nIExMQw== 11419\nIC0tLQ== 11420\nIENvcnA= 11421\nIHRveGlj 11422\nc3BlY2lmaWM= 11423\nIENvcm4= 11424\nIENoZWw= 11425\nIHRlbGVwaG9uZQ== 11426\nIFBhbnQ= 11427\nIG15c3RlcmlvdXM= 11428\nYXVuY2g= 11429\nb2RveA== 11430\nbWVkaWE= 11431\nIHdpdG5lc3Nlcw== 11432\nYWd1 11433\nIHF1ZXN0aW9uZWQ= 11434\nIEJyZXhpdA== 11435\nIFJlbWVtYmVy 11436\nZW5leg== 11437\nIGVuZG9yc2U= 11438\naWF0cmlj 11439\nIElkZW50 11440\nIHJpZGljdWxvdXM= 11441\nMTEw 11442\nIHByYXllcg== 11443\nIHNjaWVudGlzdA== 11444\nIDE5NTA= 11445\nIEFxdQ== 11446\nIHVuZGVyZ3JvdW5k 11447\nIFVGQw== 11448\nbWFyZQ== 11449\nIExhdGVy 11450\nd2ljaA== 11451\nIHN1YnNjcmli 11452\nIGhvc3Rz 11453\nIGVycg== 11454\nIGdyYW50cw== 11455\nYW50b20= 11456\nIHN1bW1vbg== 11457\nZWFybHk= 11458\nIENsZWFy 11459\nIFByaW0= 11460\nIHN1c3BlbnNpb24= 11461\nIGd1YXJhbnRlZWQ= 11462\nYXBwZXI= 11463\nIHJpY2U= 11464\nIFNlYW4= 11465\nIFNoaW4= 11466\nIHJlZmVyZW5kdW0= 11467\nIGZsZWQ= 11468\ncnVzdA== 11469\nIDM2MA== 11470\ndGVyeQ== 11471\nIHNob2NrZWQ= 11472\nQlI= 11473\nIE9pbA== 11474\nIEFsbGFo 11475\nIHBhcnRseQ== 11476\nIGlnbm9y 11477\nIHRyYW5zbWlzc2lvbg== 11478\nIGhvbW9zZXh1YWw= 11479\naXZlcnNhbA== 11480\nIGhvcGVmdWxseQ== 11481\n44Kk 11482\nIGxlc3Nvbg== 11483\nTGVn 11484\nIC4u 11485\nWWV0 11486\ndGFibGU= 11487\nYXBwcm9wcmk= 11488\ncmV0dA== 11489\nIGJvYXJkcw== 11490\nIGluY29ycmVjdA== 11491\nIGJhY3Rlcmlh 11492\nYXJ1 11493\nYW1hYw== 11494\nIHNuYXA= 11495\nLici 11496\nIHBhcmFk 11497\ndGVt 11498\naGVhcnQ= 11499\nIGF2YWlsYWJpbGl0eQ== 11500\nIHdpc2RvbQ== 11501\nICgr 11502\nIHByaWVzdA== 11503\nIMKgIMKg 11504\nT3Blbg== 11505\nIHNwYW4= 11506\nIHBhcmFtZXRlcg== 11507\nIGNvbnZpbmNl 11508\nICglKQ== 11509\ncmFj 11510\nIGZv 11511\nIHNhZmVseQ== 11512\nIGNvbnZlcnRlZA== 11513\nIE9seW1waWM= 11514\nIHJlc2VydmU= 11515\nIGhlYWxpbmc= 11516\nIE1pbmU= 11517\nTWF4 11518\nIGluaGVyZW50 11519\nIEdyYWhhbQ== 11520\nIGludGVncmF0ZWQ= 11521\nRGVt 11522\nIHBpcGVsaW5l 11523\nIGFwcGx5aW5n 11524\nIGVtYmVk 11525\nIENoYXJsaWU= 11526\nIGNhdmU= 11527\nMjAwOA== 11528\nIGNvbnNlbnN1cw== 11529\nIHJld2FyZHM= 11530\nUGFs 11531\nIEhUTUw= 11532\nIHBvcHVsYXJpdHk= 11533\nbG9va2luZw== 11534\nIFN3b3Jk 11535\nIEFydHM= 11536\nJyk= 11537\nIGVsZWN0cm9u 11538\nY2x1c2lvbnM= 11539\nIGludGVncml0eQ== 11540\nIGV4Y2x1c2l2ZWx5 11541\nIGdyYWNl 11542\nIHRvcnR1cmU= 11543\nIGJ1cm5lZA== 11544\ndHdv 11545\nIDE4MA== 11546\nUHJvZHU= 11547\nIGVudHJlcHJlbmU= 11548\ncmFwaGljcw== 11549\nIGd5bQ== 11550\ncmljYW5l 11551\nIFRhbQ== 11552\nIGFkbWluaXN0cmF0aXZl 11553\nIG1hbnVmYWN0dXJlcg== 11554\nIHZlbA== 11555\nIE5p 11556\nIGlzb2xhdGVk 11557\nIE1lZGljaW5l 11558\nIGJhY2t1cA== 11559\nIHByb21vdGluZw== 11560\nIGNvbW1hbmRlcg== 11561\nIGZsZWU= 11562\nIFJ1c3NlbGw= 11563\nIGZvcmdvdHRlbg== 11564\nIE1pc3NvdXJp 11565\nIHJlc2lkZW5jZQ== 11566\nbW9ucw== 11567\nIHJlc2VtYg== 11568\nIHdhbmQ= 11569\nIG1lYW5pbmdmdWw= 11570\nUFQ= 11571\nIGJvbA== 11572\nIGhlbGlj 11573\nIHdlYWx0aHk= 11574\nIHJpZmxl 11575\nc3Ryb25n 11576\ncm93aW5n 11577\ncGxhbg== 11578\nYXN1cnk= 11579\n4oCmLg== 11580\nIGV4cGFuZGluZw== 11581\nIEhhbWlsdG9u 11582\nIHJlY2VpdmVz 11583\nU0k= 11584\nZWF0dXJlcw== 11585\nIEFuaW0= 11586\nUkVF 11587\nUHV0 11588\nIGJyaWVmbHk= 11589\ncml2ZQ== 11590\nIHN0aW11bA== 11591\nIGBgKA== 11592\nIF9f 11593\nIGNoaXA= 11594\nIGhheg== 11595\nIHByaXpl 11596\nIFRoaW5ncw== 11597\nQUNF 11598\ndWxpbg== 11599\nZGljdA== 11600\nb2t1 11601\nIGFzc29jaWF0ZQ== 11602\nb2NrZXRz 11603\neW91dHViZQ== 11604\nU3Rvcnk= 11605\nYXRlZ29yeQ== 11606\nIG1pbGQ= 11607\nYWlsaW5n 11608\nIFll 11609\nT3JpZw== 11610\nIEth 11611\nb3JpZw== 11612\nIHByb3BhZ2FuZGE= 11613\nIGFub255bW91cw== 11614\nIHN0cnVnZ2xlZA== 11615\nIG91dHJhZ2U= 11616\nQVRFRA== 11617\nIEJlaWppbmc= 11618\ncmFyeQ== 11619\nIGxlYXRoZXI= 11620\nIHdvcmxkcw== 11621\nIGJyb2FkZXI= 11622\nMTI1 11623\naWRhbA== 11624\nIEJldHRlcg== 11625\nIHRlYXI= 11626\nRXh0 11627\nIHByb3Bvc2Fscw== 11628\nIGl0ZXI= 11629\nIFNxdWFk 11630\nIHZvbHVudA== 11631\nbWk= 11632\nRGlk 11633\nIFB1 11634\ncGlu 11635\nIHNwZWFrZXJz 11636\nIGJvcmRlcnM= 11637\nIGZpZ3VyZWQ= 11638\nPSc= 11639\nIHNpbXVsdGFuZW91c2x5 11640\nYWVkYQ== 11641\nIGNoYXJnaW5n 11642\nIHVyZ2Vk 11643\nIGNvbmo= 11644\nMjU2 11645\nIEdvcmRvbg== 11646\nbWVyY2U= 11647\nIGRvY3VtZW50YXJ5 11648\nU2hhcmU= 11649\naXRvbA== 11650\nT05F 11651\nIEdhcmRlbg== 11652\naGF0dA== 11653\nIFRob21wc29u 11654\nYW5lb3Vz 11655\nYXBvcmU= 11656\nIHRhbmtz 11657\nIGxlc3NvbnM= 11658\ndHJhY2s= 11659\nIG91dHN0YW5kaW5n 11660\nIHZvbHVudGVlcnM= 11661\nIHNwcmF5 11662\nIG1hbmFnZXJz 11663\nbGFyZ2U= 11664\nIGNhbXBz 11665\nIGFydGlmaWNpYWw= 11666\nIFJ1 11667\nIGJhZ3M= 11668\ndGhhbA== 11669\nIGNvbXBhdGlibGU= 11670\nIEJsYWRl 11671\nIGZlZA== 11672\nIGFyZ3Vlcw== 11673\nRkk= 11674\nIHVuZmFpcg== 11675\nIGNvcm4= 11676\nIG9mZnNldA== 11677\nIGRpcmVjdGlvbnM= 11678\nIGRpc2FwcG9pbnRlZA== 11679\nIENvbnZlbnRpb24= 11680\nIHZpZXdpbmc= 11681\nTUU= 11682\nb2NpdHk= 11683\nIHRvd25z 11684\nIGxheWVycw== 11685\nIHJvbGxlZA== 11686\nIGp1bXBlZA== 11687\nIGF0dHJpYnV0ZQ== 11688\nIHVubmVjZXNz 11689\naW5jb2xu 11690\nIHN1cHBvc2U= 11691\nIE5ldGhlcg== 11692\nY2hh 11693\nIGJ1cmllZA== 11694\nIHNpeHRo 11695\nQmVu 11696\ncmVzc2luZw== 11697\nT1VS 11698\nIHdvdW5k 11699\nIGN5Y2w= 11700\nIG1lY2hhbmlzbXM= 11701\nIGNvbmdyZXNzaW9uYWw= 11702\nIEVsZW1lbnQ= 11703\nIGFncmVlbWVudHM= 11704\nIGRlY29y 11705\nIGNsb3Nlc3Q= 11706\nIE1pdA== 11707\nR29vZ2xl 11708\nfX0= 11709\nIG1peHR1cmU= 11710\nIGZsdWlk 11711\nU2lnbg== 11712\nIFNjaG9sYXI= 11713\nIHBpc3Q= 11714\nYXNrZXQ= 11715\nYWJsaW5n 11716\nIHJhY2luZw== 11717\naGVybw== 11718\ncmllbA== 11719\nYXNzeQ== 11720\nIGNoZWFwZXI= 11721\nYmVu 11722\nIHZlcnRpY2Fs 11723\nYW1hY2FyZQ== 11724\nIFJlYWRpbmc= 11725\nZ21lbnRz 11726\nIGhlbGljb3A= 11727\nIHNhY3JpZmljZQ== 11728\nYXlh 11729\ncGFyZW4= 11730\nVkE= 11731\nIExlcw== 11732\nIFN0dWRpbw== 11733\nIHZpb2xhdGlvbnM= 11734\nIEFubmE= 11735\nYWNlcg== 11736\n6b4= 11737\nIFJhdA== 11738\nIEJlY2s= 11739\nIERpY2s= 11740\nIEFDVA== 11741\nIGNvbXBvc2l0aW9u 11742\nIHRleHR1cmU= 11743\nIE93bg== 11744\nIHNtYXJ0cGhvbmU= 11745\nIE5B 11746\nIGZvcmI= 11747\naW1wb3J0 11748\nIGRlZmVuZGluZw== 11749\naWxzdA== 11750\ncmVy 11751\nIG9o 11752\nIEplcmVteQ== 11753\nIGJhbmtpbmc= 11754\nY2VwdGlvbnM= 11755\nIHJlc3BlY3RpdmU= 11756\nLy4= 11757\nIGRyaW5rcw== 11758\nIFdp 11759\nIGJhbmRz 11760\nIExpdmVycG9vbA== 11761\nIGdyaXA= 11762\nIEJ1eQ== 11763\nIG9wZW5seQ== 11764\nIHJldmlld2Vk 11765\ncGVydA== 11766\nIHZlcmlmeQ== 11767\nIENvbGU= 11768\nIFdhbGVz 11769\nTU8= 11770\nIHVucHJl 11771\nIHNoZWx0ZXI= 11772\nIEltcGVyaWFs 11773\nIGd1aQ== 11774\nIERhaw== 11775\nIHN1Z2dlc3Rpb25z 11776\nIGV4cGxpY2l0bHk= 11777\nIHNsYXZl 11778\nIGJsb2NrY2hhaW4= 11779\nIGNvbXBldGluZw== 11780\nIHByb21pc2luZw== 11781\nU09O 11782\nIHNvY2Nlcg== 11783\nIGNvbnN0aXR1dGlvbg== 11784\nNDI5 11785\nIGRpc3RyYWN0 11786\nIFVzZXI= 11787\nZXNpZGVz 11788\nIE1ldGhvZA== 11789\nIFRva3lv 11790\nIGFjY29tcGFuaWVk 11791\nQ2xpZW50 11792\nc3Vy 11793\nYWxvZw== 11794\nIGlkZW50aWZpY2F0aW9u 11795\nIGludmFzaW9u 11796\nYXNtYQ== 11797\nIGluZHVzdHJpZXM= 11798\ncHBlcnM= 11799\nIHN1YnRsZQ== 11800\nIFVuaXQ= 11801\nbmF0dXJhbA== 11802\nIHN1cnZpdmVk 11803\nIGZsYXc= 11804\nmIU= 11805\nIEhvbGw= 11806\nIGRlZmljaXQ= 11807\nIHR1dG9yaWFs 11808\nIENoYW5jZQ== 11809\nIGFyZ3Vpbmc= 11810\nIGNvbnRlbXBvcmFyeQ== 11811\nIGludGVncmF0aW9u 11812\nZm9yd2FyZA== 11813\nIHR1bQ== 11814\naXRpcw== 11815\nIGhpZGluZw== 11816\nIERvbWlu 11817\nIFRhbg== 11818\nIEJ1aWxkaW5n 11819\nIFZpbg== 11820\nIHNwb2tlc3BlcnNvbg== 11821\nIE5vdGVz 11822\nIGVtZXJnaW5n 11823\nIHByZXBhcmF0aW9u 11824\nIHByb3N0 11825\nIHN1c3BlY3Rz 11826\nIGF1dG9ub20= 11827\nRGVzY3JpcHRpb24= 11828\nIGRlYWx0 11829\nIFBlYXI= 11830\nIHN0ZWFkeQ== 11831\nIGRlY3JlYXNlZA== 11832\nIHNvdmVyZQ== 11833\nIENsaW4= 11834\nIGdyYWR1YWxseQ== 11835\nb3JzZXM= 11836\nIFdBUg== 11837\nU2Vydg== 11838\n44Ki 11839\naHI= 11840\nIGRpcnR5 11841\nIEJhcm4= 11842\nIEJD 11843\nIGRpbA== 11844\nIGNhbGVuZGFy 11845\nIGNvbXBsaWFuY2U= 11846\nIGNoYW1iZXI= 11847\nYmI= 11848\nIHBhc3Nlbmdlcg== 11849\nYXRlZnVs 11850\nIFRpdGxl 11851\nIFN5ZG5leQ== 11852\nIEdvdA== 11853\nIGRhcmtuZXNz 11854\nIGRlZmVjdA== 11855\nIHBhY2tlZA== 11856\nYXNzaW9u 11857\nIGdvZHM= 11858\nIGhhcnNo 11859\nSUNL 11860\nbGVhbnM= 11861\nIGFsZ29yaXRobQ== 11862\nIG94eWdlbg== 11863\nIHZpc2l0cw== 11864\nIGJsYWRl 11865\nIGtpbG9tZXQ= 11866\nIEtlbnR1Y2t5 11867\nIGtpbGxlcg== 11868\nUGFjaw== 11869\nZW5ueQ== 11870\nIGRpdmluZQ== 11871\nIG5vbWluYXRpb24= 11872\nYmVpbmc= 11873\nIGVuZ2luZXM= 11874\nIGNhdHM= 11875\nIGJ1ZmZlcg== 11876\nIFBoaWxs 11877\nIHRyYWZm 11878\nQUdF 11879\nIHRvbmd1ZQ== 11880\nIHJhZGlhdGlvbg== 11881\nZXJlcg== 11882\nbWVt 11883\nIEV4cGxpY2l0 11884\n6b6N 11885\nIGNvdXBsZXM= 11886\nIHBoeXNpY3M= 11887\nIE1jSw== 11888\nIHBvbGl0aWNhbGx5 11889\nYXdrcw== 11890\nIEJsb29t 11891\nIHdvcnNoaXA= 11892\nZWdlcg== 11893\ndXRlcg== 11894\nIEZP 11895\nIG1hdGhlbWF0 11896\nIHNlbnRlbmNlZA== 11897\nIGRpc2s= 11898\nIE1hcmc= 11899\nIC8q 11900\nUEk= 11901\nIG9wdGlvbmFs 11902\nIGJhYmllcw== 11903\nIHNlZWRz 11904\nIFNjb3R0aXNo 11905\nIHRoeQ== 11906\nXV0= 11907\nIEhpdGxlcg== 11908\nUEg= 11909\nbmd0aA== 11910\nIHJlY292ZXJlZA== 11911\naW5nZQ== 11912\nIHBvd2Rlcg== 11913\nIGxpcHM= 11914\nIGRlc2lnbmVy 11915\nIGRpc29yZGVycw== 11916\nIGNvdXJhZ2U= 11917\nIGNoYW9z 11918\nIn0seyI= 11919\nIGNhcnJpZXI= 11920\nYmFibHk= 11921\nSGlnaA== 11922\nIFJU 11923\nZXNpdHk= 11924\nbGVu 11925\nIHJvdXRlcw== 11926\ndWF0aW5n 11927\nRmls 11928\nTk9U 11929\nd2FsbA== 11930\nc2J1cmdo 11931\nIGVuZ2FnaW5n 11932\nIEphdmFTY3JpcHQ= 11933\nb3Jlcg== 11934\nbGlob29k 11935\nIHVuaW9ucw== 11936\nIEZlZGVyYXRpb24= 11937\nIFRlc2xh 11938\nIGNvbXBsZXRpb24= 11939\nIFRh 11940\nIHByaXZpbGVnZQ== 11941\nIE9yYW5nZQ== 11942\nIG5ldXI= 11943\ncGFyZW5jeQ== 11944\nIGJvbmVz 11945\nIHRpdGxlZA== 11946\nIHByb3NlY3V0b3Jz 11947\nIE1F 11948\nIGVuZ2luZWVy 11949\nIFVuaXZlcnNl 11950\nIEhpZw== 11951\nbmll 11952\nb2FyZA== 11953\nIGhlYXJ0cw== 11954\nIEdyZQ== 11955\ndXNzaW9u 11956\nIG1pbmlzdHJ5 11957\nIHBlbmV0 11958\nIE51dA== 11959\nIE93 11960\nIFhQ 11961\naW5zdGVpbg== 11962\nIGJ1bGs= 11963\nU3lzdGVt 11964\naWNpc20= 11965\nIE1hcmtldGFibGU= 11966\nIHByZXZhbA== 11967\nIHBvc3Rlcg== 11968\nIGF0dGVuZGluZw== 11969\ndXJhYmxl 11970\nIGxpY2Vuc2Vk 11971\nIEdo 11972\nZXRyeQ== 11973\nIFRyYWRhYmxl 11974\nIGJsYXN0 11975\n4KQ= 11976\nIFRpdGFu 11977\nZWxsZWQ= 11978\nZGll 11979\nSGF2ZQ== 11980\nIEZsYW1l 11981\nIHByb2ZvdW5k 11982\nIHBhcnRpY2lwYXRpbmc= 11983\nIGFuaW1l 11984\nIEVzcw== 11985\nIHNwZWNpZnk= 11986\nIHJlZ2FyZGVk 11987\nIFNwZWxs 11988\nIHNvbnM= 11989\nb3duZWQ= 11990\nIG1lcmM= 11991\nIGV4cGVyaW1lbnRhbA== 11992\nbGFuZG8= 11993\naHM= 11994\nIER1bmdlb24= 11995\naW5vcw== 11996\nIGNvbXBseQ== 11997\nIFN5c3RlbXM= 11998\nYXJ0aA== 11999\nIHNlaXplZA== 12000\nbG9jYWw= 12001\nIEdpcmxz 12002\ndWRv 12003\nb25lZA== 12004\nIEZsZQ== 12005\nIGNvbnN0cnVjdGVk 12006\nIGhvc3RlZA== 12007\nIHNjYXJlZA== 12008\nYWN0aWM= 12009\nIElzbGFuZHM= 12010\nIE1PUkU= 12011\nIGJsZXNz 12012\nIGJsb2NraW5n 12013\nIGNoaXBz 12014\nIGV2YWM= 12015\nUHM= 12016\nIGNvcnBvcmF0aW9u 12017\nIG94 12018\nIGxpZ2h0aW5n 12019\nIG5laWdoYm9ycw== 12020\nIFVi 12021\nYXJv 12022\nIGJlZWY= 12023\nIFViZXI= 12024\nRmFjZWJvb2s= 12025\nYXJtZWQ= 12026\naXRhdGU= 12027\nIFJhdGluZw== 12028\nIFF1aWNr 12029\nIG9jY3VwaWVk 12030\nIGFpbXM= 12031\nIEFkZGl0aW9uYWxseQ== 12032\nIEludGVyZXN0 12033\nIGRyYW1hdGljYWxseQ== 12034\nIGhlYWw= 12035\nIHBhaW50aW5n 12036\nIGVuZ2luZWVycw== 12037\nTU0= 12038\nIE11c3Q= 12039\nIHF1YW50aXR5 12040\nUGF1bA== 12041\nIGVhcm5pbmdz 12042\nIFBvc3Rz 12043\nc3RyYQ== 12044\n44O844M= 12045\nIHN0YW5jZQ== 12046\nIGRyb3BwaW5n 12047\nc2NyaXB0 12048\nIGRyZXNzZWQ= 12049\nTWFrZQ== 12050\nIGp1c3RpZnk= 12051\nIEx0ZA== 12052\nIHByb21wdGVk 12053\nIHNjcnV0 12054\nIHNwZWVkcw== 12055\nIEdpYW50cw== 12056\nb21lcg== 12057\nIEVkaXRvcg== 12058\nIGRlc2NyaWJpbmc= 12059\nIExpZQ== 12060\nbWVudGVk 12061\nIG5vd2hlcmU= 12062\nb2NhbHk= 12063\nIGluc3RydWN0aW9u 12064\nZm9ydGFibGU= 12065\nIGVudGl0aWVz 12066\nIGNt 12067\nIE5hdHVyYWw= 12068\nIGlucXVpcnk= 12069\nIHByZXNzZWQ= 12070\naXpvbnQ= 12071\nZm9yY2Vk 12072\nIHJhaXNlcw== 12073\nIE5ldGZsaXg= 12074\nIFNpZGU= 12075\nIG91dGVy 12076\nIGFtb25nc3Q= 12077\naW1z 12078\nb3dza2k= 12079\nIGNsaW1i 12080\nbmV2ZXI= 12081\nIGNvbWJpbmU= 12082\nZGluZw== 12083\nIGNvbXBy 12084\nIHNpZ25pZmljYW5jZQ== 12085\nIHJlbWVtYmVyZWQ= 12086\nIE5ldmFkYQ== 12087\nIFRlbA== 12088\nIFNjYXI= 12089\nIFdhcnJpb3Jz 12090\nIEphbmU= 12091\nIGNvdXA= 12092\nYmFz 12093\nIHRlcm1pbmFs 12094\nLC0= 12095\nT0g= 12096\nIHRlbnNpb24= 12097\nIHdpbmdz 12098\nIE15c3Rlcg== 12099\n77+977+977+977+9 12100\nIFVubGlrZQ== 12101\ndmFsaWQ= 12102\ndmlyb25tZW50cw== 12103\nIEFsaQ== 12104\nIG5ha2Vk 12105\nYm9va3M= 12106\nIE11bg== 12107\nIEd1bGY= 12108\nIGRlbnNpdHk= 12109\nIGRpbWlu 12110\nIGRlc3BlcmF0ZQ== 12111\nIHByZXNpZGVuY3k= 12112\nIDE5ODY= 12113\naHk= 12114\nSU5E 12115\nIHVubG9jaw== 12116\naW1lbnM= 12117\nIGhhbmRsZWQ= 12118\nIEVi 12119\nIGRpc2FwcGVhcmVk 12120\nIGdlbnJl 12121\nIDE5ODg= 12122\nIGRldGVybWluYXRpb24= 12123\nU3RyZWFt 12124\naWtv 12125\nYXB0ZXJz 12126\nIGFja25vd2xlZGdl 12127\nSmFu 12128\nIGNhcGl0YWxpc20= 12129\nUGF0 12130\nIDIwMjA= 12131\nIHBhaW5mdWw= 12132\nIGN1cnZl 12133\nIGJvbWJz 12134\nc3Rvcm0= 12135\nIE1ldGFs 12136\nZW5jZXI= 12137\nIEZpZw== 12138\nIEFhcm9u 12139\nYW5jaGVz 12140\nIGluc3BpcmF0aW9u 12141\nIGV4aGF1c3Q= 12142\ndGFpbnM= 12143\nYXNoaQ== 12144\nIGRlc2NyaXB0 12145\nIHJpdHVhbA== 12146\nIENoZWxzZWE= 12147\nIHByb21vdGlvbg== 12148\nIEh1bmc= 12149\nIFdhcmQ= 12150\naXZh 12151\nIEVU 12152\nIHRvc3M= 12153\nYWxsb3c= 12154\nIEZyYW5jaXM= 12155\nRGVw 12156\nIGhhcHBpbmVzcw== 12157\nIEdsYXNz 12158\nIGJldGE= 12159\nIHN0cmVuZ3RoZW4= 12160\nTkU= 12161\nb2E= 12162\nIGJ1dHRvbnM= 12163\nIE11cnJheQ== 12164\nIGtpY2tlZA== 12165\nUXVlc3Q= 12166\nIFRhbGs= 12167\nIFNldmVyYWw= 12168\nIFplcm8= 12169\nIGRyb25l 12170\ndWxr 12171\nIGNhbQ== 12172\nIE1vYmlsZQ== 12173\nIHByZXZlbnRpbmc= 12174\nIHJldHJv 12175\nIEF4 12176\nIGNydWVs 12177\nIGZsb2F0 12178\nLiks 12179\nIGZpbGluZw== 12180\nIEdyYW50 12181\nIEJvcg== 12182\nIHJpYg== 12183\nIGNoYW1waW9uc2hpcA== 12184\nIE1lcmM= 12185\nIHN0eWxlcw== 12186\nIGNha2U= 12187\nIGJ1aWxkcw== 12188\nIFNlbGY= 12189\naW94 12190\nIGVwaWM= 12191\nb3lk 12192\nQmVs 12193\nIFN0ZXc= 12194\nLig= 12195\nYWh1 12196\nIEJleW9uZA== 12197\nIG91dHM= 12198\nIHNvbG8= 12199\nIFRyZWU= 12200\nIHByZXNlcnZl 12201\nIHR1Yg== 12202\nQVJF 12203\ncm9j 12204\nIEltcHJv 12205\nIFdyaWdodA== 12206\nIGJ1bmQ= 12207\nIHRyYWdlZA== 12208\nIG9jY2FzaW9uYWw= 12209\nYmlhbg== 12210\nU2Vjb25k 12211\ncm9ucw== 12212\nIGludGVyYWN0aW9ucw== 12213\nZm9ybWVk 12214\nc2luZw== 12215\nIG93bnM= 12216\nIGhvY2tleQ== 12217\nR2VuZXJhbA== 12218\nIGxvZ2ljYWw= 12219\nIGV4cGVuZA== 12220\nIGVzY2Fs 12221\nIEdyaWZm 12222\nIENyb3du 12223\nIFJlc2VydmU= 12224\nIHN0b3BwaW5n 12225\nIGV4Y3VzZQ== 12226\nc2Vjb25k 12227\nIG9wZXJhdGVk 12228\nIHJlYWNoZXM= 12229\nIE1hbGF5cw== 12230\nIHBvbGx1dGlvbg== 12231\nIEJyb29rbHlu 12232\nIGRlbGV0ZQ== 12233\nIGhhc2g= 12234\nQmxvY2s= 12235\nYWhh 12236\n4oCz 12237\nIHNob3J0ZXI= 12238\ncGllY2U= 12239\nPjwv 12240\nIGhvcm0= 12241\nIFdhdA== 12242\nIEJyZWFr 12243\nIHByb2hpYml0ZWQ= 12244\nIGludGVuc2l0eQ== 12245\nIEFsYW4= 12246\nIGxpYWJpbGl0eQ== 12247\nPyE= 12248\nYW5kZWQ= 12249\nIG5laWdoYm91cg== 12250\nIENvbGxlY3Rpb24= 12251\nIGZpcmVz 12252\nIHJldm9sdXRpb25hcnk= 12253\nZmx5 12254\nIE9ybGVhbnM= 12255\nV2hpdGU= 12256\nIFdyaXQ= 12257\nIERhd24= 12258\nIHNldHRsZQ== 12259\nIGV4ZWN1dGU= 12260\nQk0= 12261\nIHNwb2tlc3dvbWFu 12262\nIGxpZmVzdHlsZQ== 12263\nIGNsaWNraW5n 12264\nIEtpbGw= 12265\nIExpYmVyYWw= 12266\nIE5hemk= 12267\nIHRyYWlsZXI= 12268\nIG1vdW50YWlucw== 12269\nIGRhbW4= 12270\nemVz 12271\ncGVz 12272\nIHByZXNzaW5n 12273\nIGJhaWw= 12274\nIE9yZ2FuaXphdGlvbg== 12275\nIHBpcg== 12276\nIHRoaXJ0eQ== 12277\nIGVsZWN0cmljYWw= 12278\nIDExNQ== 12279\nIFBvbHk= 12280\nIFJhcA== 12281\nIFN0cmlrZQ== 12282\nIENhbm4= 12283\nIGRlbWFuZGVk 12284\nIGJhY2tpbmc= 12285\nZGVmYXVsdA== 12286\nc3BlZWQ= 12287\nIExlZ2lzbA== 12288\nIG1vdGhlcnM= 12289\nIEJvZHk= 12290\nIHZhcmlhdGlvbg== 12291\nY2VkZW50ZWQ= 12292\ncG93ZXJlZA== 12293\nbGVhZGluZw== 12294\nTmV2ZXI= 12295\nIGdyYXZl 12296\nIEFudGk= 12297\nQVc= 12298\nIGludGVydmlld2Vk 12299\nIEdhYg== 12300\nIEZhdA== 12301\nIHJvb2tpZQ== 12302\ndXU= 12303\nIGRlcG9z 12304\naXhvbg== 12305\nIGFtcGw= 12306\ncmV0aW9u 12307\nIEhlYXQ= 12308\nIHBlYWNlZnVs 12309\nU00= 12310\naWV2ZQ== 12311\nIGRpdmVy 12312\nIFZpY3Rvcmlh 12313\nIG1pYw== 12314\ncGRm 12315\nIHN0YXRpbmc= 12316\nIGx1bmc= 12317\nIGNyaXRpY2l6ZWQ= 12318\nIHZhY2NpbmU= 12319\nIExvYWRpbmc= 12320\ndXJzZQ== 12321\nVGFrZQ== 12322\nIEZyYW4= 12323\nIFNvbGQ= 12324\nIFJvYmlu 12325\nIGRldGVjdGVk 12326\nIFNjcmlwdA== 12327\nIGFkanVzdGVk 12328\nIHNlbmF0b3I= 12329\nIG9wcG9zaW5n 12330\nRXJyb3I= 12331\nQ291bnQ= 12332\nIGNvbmZsaWN0cw== 12333\nIG93 12334\nIEFyZ2VudA== 12335\nIG1hdGNoaW5n 12336\naGg= 12337\nIFRyZWs= 12338\nc3RhcnRlcg== 12339\nIiks 12340\nIEFG 12341\nb2Rlcg== 12342\neHh4eA== 12343\nIEFsdA== 12344\nYWNyZQ== 12345\nIFBpY2s= 12346\nIFNvbGFy 12347\nIERhbA== 12348\nT2N0 12349\nIEJhdHQ= 12350\nIHNyYw== 12351\nIGVuZ2FnZW1lbnQ= 12352\nIGV4ZWN1dGl2ZXM= 12353\nIGxpYmVydHk= 12354\namF2YQ== 12355\nIHRhbGVudGVk 12356\naWdlbm91cw== 12357\nIGNvbnNlY3V0 12358\nLi4uLi4= 12359\nSW5mbw== 12360\nIGhvcnJpYmxl 12361\nIHN1cnByaXNpbmdseQ== 12362\nZmVlZA== 12363\naWNhdGluZw== 12364\nIExFRA== 12365\nIGZlbWFsZXM= 12366\nU3RhdGlvbg== 12367\nZWxsZXI= 12368\nIE9ha2xhbmQ= 12369\nIG1lY2hhbmljYWw= 12370\naW9sb2d5 12371\nIFZhcg== 12372\nIHJvYnVzdA== 12373\nZXR0aW5ncw== 12374\nb3R0YQ== 12375\nIHRoZW9yZXQ= 12376\nIHJldGFpbg== 12377\na3dhcmQ= 12378\nIGRh 12379\nIGRlcGxveWVk 12380\nZGVs 12381\nIEFuZHk= 12382\nIHN1YnNjcmliZQ== 12383\nd2Vi 12384\nIG5h 12385\nIE1pY2hlbA== 12386\nIHBhcnRpYWxseQ== 12387\nIENvbWV5 12388\nIGNyb3du 12389\nIE1hag== 12390\nIEJsdQ== 12391\ncmF0b3I= 12392\nRGF5 12393\nSU5U 12394\nIGRvY3VtZW50ZWQ= 12395\nIEdEUA== 12396\nZ2k= 12397\nY2hlbGw= 12398\nIGJydXRhbA== 12399\nIEJhYg== 12400\nc3RyYXRpb24= 12401\nIHRoZWZ0 12402\nIHR1YmU= 12403\nQEA= 12404\nIHF1ZXJ5 12405\nIExpbmNvbG4= 12406\nIHB1Ymxpc2hpbmc= 12407\nIHdvcmU= 12408\nb3JpY2Fs 12409\nIHJpYw== 12410\nIG5vdGFibGU= 12411\nIHN1YnNlcXVlbnRseQ== 12412\nbmV4 12413\nIG9ic2VydmU= 12414\nIEJvZQ== 12415\nIGNvZGVz 12416\nbWFpbg== 12417\nV0g= 12418\nIFNM 12419\nIHJlc2lkZW50aWFs 12420\nYXZhbg== 12421\nIG1hcw== 12422\nYXJlc3Q= 12423\nYWRlb24= 12424\nT1VU 12425\nIHNvcGhpc3RpYw== 12426\nYW50ZQ== 12427\nIGNlbnM= 12428\nICoq 12429\nIG1vcnRhbGl0eQ== 12430\nIHlvdXJz 12431\nIG9jY2FzaW9ucw== 12432\nIHJlY2FsbGVk 12433\nIERyaXZlcg== 12434\nIHZvY2Fs 12435\nIGJhdGhyb29t 12436\nIHNob3Bz 12437\nIGNvbGxhYm9yYXRpb24= 12438\nIE9iYW1hY2FyZQ== 12439\nIENlbGw= 12440\nQ2hhcg== 12441\nU3VwZXI= 12442\nQ3Jl 12443\nIHRlbmRz 12444\nIHRvcm4= 12445\nIGVjb25vbWljcw== 12446\nYXZlcnk= 12447\nIFJhaWQ= 12448\nIFNlbQ== 12449\nIHNob3VsZGVycw== 12450\nIGV4cGVjdGluZw== 12451\nIGV4YW1pbmF0aW9u 12452\nZW5hbWU= 12453\nIFVJ 12454\naWFiaWxpdHk= 12455\nb2xhcw== 12456\nIEFtYg== 12457\nIERyYQ== 12458\nIG1pZGZpZWxk 12459\nIElD 12460\nIGxheW91dA== 12461\nIGZsb2F0aW5n 12462\nZmk= 12463\naXRhdGl2ZQ== 12464\nIHRyZW1lbmRvdXM= 12465\nINA= 12466\nIGFidW5k 12467\nV29yaw== 12468\nIExpZ2h0bmluZw== 12469\nIHNpbWlsYXJseQ== 12470\nIGNvbnNlcnZhdGl2ZXM= 12471\nIHByYXk= 12472\nQkU= 12473\naXphcnJl 12474\nIHRlbXB0 12475\nIGVtcGhhc2lz 12476\nIE1ldHJv 12477\nIGZpc2hpbmc= 12478\nIG1hcnJ5 12479\nbmVn 12480\nIFN0dWR5 12481\nIHJlY2s= 12482\nIGRpc3Bvcw== 12483\nb25pbmc= 12484\nYnNpdGU= 12485\nIHN1c3BpYw== 12486\nIG1lcmNo 12487\nIEdpYg== 12488\nIERlc2NyaXB0aW9u 12489\nIERWRA== 12490\nd2hl 12491\nIFllbWVu 12492\nIGVudmlyb25tZW50cw== 12493\nb290aW5n 12494\nIE1vZGVybg== 12495\nZXU= 12496\nIHJlZmxlY3Rz 12497\nIGhvbmV5 12498\nIGFuYWx5c3Q= 12499\nIGd1dA== 12500\nZGVj 12501\nQWN0aW9u 12502\nIGhvdXNlaG9sZHM= 12503\nIHN0ZXI= 12504\nIHRlbXBsZQ== 12505\nIHJlZm9ybXM= 12506\nIGZhdm91cml0ZQ== 12507\nIGRlYWRsaW5l 12508\nIExF 12509\nVGhyZWU= 12510\nIFdpdGhpbg== 12511\nQXVn 12512\nIG5pZ2h0cw== 12513\nZWx0YQ== 12514\nIGludmFsaWQ= 12515\nIEV4Y2hhbmdl 12516\nIERlbGhp 12517\nd2hlbg== 12518\naW5jb21l 12519\nIPCf 12520\nIHdpcmVsZXNz 12521\nc2NyaWJl 12522\naXN0YQ== 12523\nIGhvc3RpbGU= 12524\nIGFsbHk= 12525\nIGdpZw== 12526\nIG91dGxldHM= 12527\nIERvcg== 12528\nRU1FTlQ= 12529\nIGFzaA== 12530\nIGFic3RyYWN0 12531\nT1JE 12532\nIE1vdG9y 12533\nIGFkdmlzZXI= 12534\naXN0bGU= 12535\nIGJhc2Vz 12536\nIGNvdXJ0ZXN5 12537\nIGNyb3NzaW5n 12538\nIGNsZWFyZWQ= 12539\nIHJlZnVnZWU= 12540\nY29zeXN0ZW0= 12541\nIHRocm93cw== 12542\nZnVu 12543\nYm91cm5l 12544\nZGF5cw== 12545\nIGRpc2FncmVl 12546\nIE5hdGl2ZQ== 12547\nIHJlZmxlY3RlZA== 12548\nIEZhc3Q= 12549\nIFllbGxvdw== 12550\nIFNpbmdhcG9yZQ== 12551\nIFJhdmVu 12552\nIGVtYnJhY2U= 12553\nIEt1 12554\nIENoZW4= 12555\nIEVhcmx5 12556\nIGFwcG9pbnRtZW50 12557\nIE1pbmk= 12558\naXRlbWVudA== 12559\nIHBsYWNpbmc= 12560\nIGJpY3k= 12561\nU1I= 12562\nIHdoaXM= 12563\nU1U= 12564\nIGludmVzdGlnYXRlZA== 12565\nIHBob3RvZ3JhcGhz 12566\nZ2l0aHVi 12567\nIEJlYXQ= 12568\nIFJpbmc= 12569\naWdoZWQ= 12570\naWFy 12571\nIGV2b2x2ZWQ= 12572\nZXJhbGQ= 12573\nIGR1bg== 12574\nIGh1Yg== 12575\nSUFM 12576\nIGVuY291cmFnaW5n 12577\nIFByaW50 12578\nIERheXM= 12579\nIHByb3NlY3V0aW9u 12580\nIHBhbnRz 12581\nYXp5 12582\nbGl2ZQ== 12583\nIGZvc3NpbA== 12584\nIEp1 12585\nIHJvY2tz 12586\ndWRnZQ== 12587\nIFJhY2U= 12588\nIGdyZWV0 12589\nYmll 12590\nIGZpbGxpbmc= 12591\nIExlbg== 12592\nIGRpYWJldGVz 12593\nIGZpcmVhcm1z 12594\ndW1pbmc= 12595\nZW5lenVlbA== 12596\nIEJC 12597\nIGFjY2VwdGluZw== 12598\nQVRI 12599\nIHJlc29ydA== 12600\nIGh1bnQ= 12601\ncmlr 12602\ndWNrZXI= 12603\nYW1lbnRz 12604\nIHN1c3RhaW5lZA== 12605\nIGNyb3NzZWQ= 12606\nIGJyZWFrZmFzdA== 12607\nIGF0dHJpYnV0ZXM= 12608\nbGVjdGVk 12609\nYXRpbGU= 12610\nIHZpYnI= 12611\nIEthbA== 12612\nYXJzb24= 12613\nb3BsZXM= 12614\nIHRvdWNoZWQ= 12615\nIGRhbWFnZXM= 12616\nIGltcHJlc3NlZA== 12617\ncnVw 12618\nIGFuY2g= 12619\nIEFkYW1z 12620\nSGVs 12621\nIFZpY3Rvcg== 12622\nIG1vdW50ZWQ= 12623\nIEND 12624\nIGRlbGljaW91cw== 12625\nc3Bhbg== 12626\nZWxsYQ== 12627\nIGVsYWJvcg== 12628\nYW1wbGVz 12629\nIGRlZmlj 12630\nIGNvbnN0aXR1 12631\ndWF0ZXM= 12632\nIE1pc3Npb24= 12633\nIFRoZXI= 12634\nIE1vbnN0ZXI= 12635\nYmVz 12636\nUmV1dGVycw== 12637\nIEluZG9uZXM= 12638\naGlsbA== 12639\nbXVuaXRpb24= 12640\nIGNvbmZpcm1hdGlvbg== 12641\nIENvbnNpZGVy 12642\nYWNlbnQ= 12643\nIGpldA== 12644\nIEVtcGxveQ== 12645\nIEdUWA== 12646\nbmFu 12647\nIFNwaWRlcg== 12648\nIHByb2Nlc3Nvcg== 12649\nIHBhdHJp 12650\nIFBlbnRhZ29u 12651\nIFJvYmluc29u 12652\nIHJlYWxpc3RpYw== 12653\nw7E= 12654\nIGFwcGVhcmluZw== 12655\nIHBpcGU= 12656\nb21lZA== 12657\nIGZydQ== 12658\nIGF3ZnVs 12659\nIGV2YWx1YXRpb24= 12660\nIGludGVsbGlnZW50 12661\nIENpdGl6 12662\nIGZ1bmRyYQ== 12663\nb2RpdW0= 12664\nIHR3ZWV0cw== 12665\nIHdvcm4= 12666\ncHJpbmc= 12667\nIGtpZG4= 12668\nIHJlYmVscw== 12669\nIEthbQ== 12670\nIE5ldGhlcmxhbmRz 12671\nIFNX 12672\nIGFjcXVpc2l0aW9u 12673\nIE1hbGU= 12674\n44Oq 12675\nb21iaWVz 12676\nIHRyYWRlbQ== 12677\nIFN0YXR1cw== 12678\nQnJl 12679\nIFRISVM= 12680\nIGFkdmVyc2U= 12681\nIE5FVw== 12682\nc2lnbg== 12683\nIG9yZ2FuaXNhdGlvbg== 12684\nZW5j 12685\nIEhhcnBlcg== 12686\nYXBvcg== 12687\nIE1lbWJlcnM= 12688\nIFBlYWNl 12689\nIEFpcnBvcnQ= 12690\nIE90aGVycw== 12691\nIHNjcmF0Y2g= 12692\nIFBpbA== 12693\nIHNlbnNvcg== 12694\nIGFkb3B0aW9u 12695\nIEhvdGVs 12696\nIERyYWc= 12697\nIGhvbmVzdGx5 12698\nIHlhcmQ= 12699\nIEZvcmNlcw== 12700\nIHBhdGVudA== 12701\nIGJhc3M= 12702\nIHF1aWV0bHk= 12703\nIGJyZWF0aGluZw== 12704\nIHBvc2U= 12705\naW9ycw== 12706\nIEplc3M= 12707\nc3RhdGlj 12708\nSVRF 12709\nT2ZmaWM= 12710\nIGpldw== 12711\nd2Nz 12712\nIDE0MA== 12713\nIHByZXZpZXc= 12714\naXBwaQ== 12715\nIHVuZm9ydHVuYXRlbHk= 12716\nb2tlbW9u 12717\nIGhvcm4= 12718\nIHJlYXNz 12719\nIHBlZXI= 12720\nb2NrZXI= 12721\nIHVudG8= 12722\nIEdyYXk= 12723\nIGNsZWFuaW5n 12724\nIGF0dHJhY3RlZA== 12725\nMjAwNw== 12726\nUG9pbnQ= 12727\na2lsbA== 12728\nIEFncmVlbWVudA== 12729\ndXJjaGVz 12730\nIGhvcnI= 12731\nIE1pc3Npc3M= 12732\nIHdvcnRoeQ== 12733\nIGZsb3dlcnM= 12734\ndG93bg== 12735\nZGxs 12736\nIHJlYWN0aW9ucw== 12737\nIGRlY2U= 12738\nIGluZGljYXRpbmc= 12739\nTUQ= 12740\nIHByZWZlcmVuY2U= 12741\nIE1WUA== 12742\nZXNzaW9uYWw= 12743\nIFRhcmdldA== 12744\nZ2VuY2U= 12745\nIEluZGlhbnM= 12746\nIG1pc2M= 12747\nIGZyZWVseQ== 12748\nIG11c2NsZXM= 12749\nIGxpbmV1cA== 12750\nIGltcGFjdHM= 12751\nb3VzaW5n 12752\nb21p 12753\nYWN1bGFy 12754\nIGNvbnRyb2xsaW5n 12755\nYWdpbmU= 12756\nY2VyeQ== 12757\naGVsbA== 12758\nIHJhbmtpbmc= 12759\nIE5pY2g= 12760\nIEF2ZQ== 12761\nMTI4 12762\nIGhpZ2h3YXk= 12763\nIGluY29ucw== 12764\nIGJpbmRpbmc= 12765\nIHN0cnVnZ2xlcw== 12766\nIFBpdHRzYnVyZ2g= 12767\nIGdyYXk= 12768\ncmlu 12769\nIGNvbWljcw== 12770\nIFNwb3J0 12771\nIHJlbGF0aXZlcw== 12772\nIGZyaWdodA== 12773\nIHByb2Jl 12774\nIFBvcnR1Zw== 12775\nIHZvYw== 12776\nIHR1 12777\nIENvcnBz 12778\nIHBvc3NpYmlsaXRpZXM= 12779\nIHF1YWxpZnk= 12780\nd2Nzc3RvcmU= 12781\nIGxpYnJhcmllcw== 12782\nIG1pZ3JhbnRz 12783\nIGVudHJpZXM= 12784\nIGNvbnNlY3V0aXZl 12785\ndmFscw== 12786\nIENoYWlybWFu 12787\nIGhpbGw= 12788\nSU1F 12789\nIEdhcmQ= 12790\nIGluZXF1YWxpdHk= 12791\nZm94 12792\nIFNhdmU= 12793\nIGNvcnQ= 12794\nY2xhaW1lZA== 12795\nIHRyYWl0cw== 12796\nIHBvdXI= 12797\nIG1pc3NpbGVz 12798\nIGVzc2VuY2U= 12799\nIHNlbmRz 12800\nIGFsbGlhbmNl 12801\nIHdpc2hlcw== 12802\nIENocmlzdG9waGVy 12803\nQmln 12804\nTlk= 12805\nIEphY29i 12806\nc2Fu 12807\ndXJyZWQ= 12808\nIFNP 12809\nbGx5 12810\nIGFkdm9jYXRl 12811\nIEJvbmQ= 12812\nICIv 12813\nVXNpbmc= 12814\nIGRpc3RyaWN0cw== 12815\nIEdhdGU= 12816\nIEJpcg== 12817\ncmlkZ2U= 12818\nIE5heg== 12819\nIFJz 12820\nYm9hcmRz 12821\nIEdh 12822\nIFJlYWdhbg== 12823\nIGluZmx1ZW5jZWQ= 12824\nMTAwMA== 12825\nYXB5 12826\nIGNoYWxsZW5nZWQ= 12827\nIGJhcmc= 12828\nIGZhY3VsdHk= 12829\nIEZpZg== 12830\nIGFjcXVpcmU= 12831\nQWM= 12832\nIGluc2VjdA== 12833\nIGluc3RydW1lbnRz 12834\nIGxlYWY= 12835\ndGhvZG94 12836\nTWVzc2FnZQ== 12837\nIHRhbGU= 12838\nIHRoZXJlYnk= 12839\nIHRyYXA= 12840\nIHN0cm9uZ2VzdA== 12841\nIE1pbGl0YXJ5 12842\naXNpYmxl 12843\nIDE5ODQ= 12844\nZXRoZWxlc3M= 12845\nIGZsZXhpYmxl 12846\nIGtpbGxz 12847\nIGZpbmlzaGluZw== 12848\nIFNpemU= 12849\nIHJlZHVjZXM= 12850\nIGVwaWQ= 12851\nIG9yaWVudGF0aW9u 12852\nZnVsbA== 12853\nIHRyYWNl 12854\nIGxhc2Vy 12855\nIG9wcG9zZQ== 12856\nIGVkaXRpbmc= 12857\nIG1vbWVudHVt 12858\n5Lo= 12859\nc2hvdw== 12860\nVkk= 12861\nIExhZA== 12862\nIDE5ODU= 12863\nIG11cmRlcmVk 12864\nOTAw 12865\ndXRoZXI= 12866\nIHByb2JhYmlsaXR5 12867\nIFBvbGw= 12868\nIHJlbHVjdA== 12869\nIENoZW0= 12870\nIE1vbnRyZWFs 12871\nIGFkZXF1YXRl 12872\nIFBvbGFuZA== 12873\nIFNoZXJpZmY= 12874\ndW1waA== 12875\nIG9r 12876\nIDAwMA== 12877\nICJb 12878\nIG9wZXJhdG9ycw== 12879\nIEZlcg== 12880\nIG1vZGVz 12881\nIEV2ZQ== 12882\nIGRpc2NpcGxpbmU= 12883\nTkVU 12884\nSGFuZA== 12885\nIG9yYWw= 12886\nIFdF 12887\nZW1haWw= 12888\nSlA= 12889\nIFBhbGVzdGluaWFucw== 12890\nIGhlbmNl 12891\nIExlc3M= 12892\nIG92ZXJs 12893\nZGln 12894\nIGludGltaWQ= 12895\nIENvYWw= 12896\nIHJhbmdpbmc= 12897\ndGhh 12898\nIGRpc3RhbnQ= 12899\nIGZpYg== 12900\nIEluZGV4 12901\nIFdvbmRlcg== 12902\nIFBlbA== 12903\naGF0dGFu 12904\nIEh1Zw== 12905\nw5c= 12906\ncmFpdA== 12907\nIHdyYXBwZWQ= 12908\nIFJQRw== 12909\nIGNoZW1pY2Fscw== 12910\nIE1vbmV5 12911\nIGZyb3plbg== 12912\nIGluZGlyZWN0 12913\nIEFnYWluc3Q= 12914\nRW5k 12915\nIHVuY29tZm9ydGFibGU= 12916\nIEdhbGxlcnk= 12917\nIFBvc3RlZA== 12918\n2Kc= 12919\nb25kdWN0 12920\nIGNvbnNlcXVlbmNl 12921\nIGJpdHRlcg== 12922\nIDE5ODc= 12923\ncG9w 12924\nIGNvdW50bGVzcw== 12925\nIEFsYXNrYQ== 12926\nZmZmZg== 12927\nIGRlcGFydHVyZQ== 12928\nIHJlZnVuZA== 12929\nIElhbg== 12930\naWF0ZWQ= 12931\nIHNlZWtz 12932\nIG1lY2hhbmljcw== 12933\nIGp1cmlzZGljdGlvbg== 12934\nbHlubg== 12935\nIGFsaWtl 12936\nIEh1bnQ= 12937\nYXRob24= 12938\nIHJlc29sdmVk 12939\nIGNhY2hl 12940\nIGRpc3RpbmN0aW9u 12941\nZGlyZWN0 12942\nIGVuY291bnQ= 12943\nb3Vi 12944\nYmVhdA== 12945\nIENvdW50cnk= 12946\nc2VhcmNo 12947\nIGNvbnRpbnVvdXM= 12948\nIG1vZGVzdA== 12949\nIFJhaWw= 12950\ndGhvb2Q= 12951\nMTMw 12952\nQlVH 12953\nIGNyaW1pbmFscw== 12954\nIGluZGljYXRpb24= 12955\nIGVuY291bnRlcmVk 12956\nbGFzdA== 12957\nIFd5 12958\nIGlkZW9sb2d5 12959\nIFBERg== 12960\nc2VjdXJpdHk= 12961\nXSk= 12962\nIEppbW15 12963\nIEVO 12964\nIGhpcmluZw== 12965\nVGVt 12966\nIHBpZw== 12967\nYXVudA== 12968\nIENyeXN0YWw= 12969\nIHBlbmFsdGllcw== 12970\nIGNhcGFiaWxpdHk= 12971\nIHB5 12972\nIHByb2R1Y3RpdmU= 12973\nIGJhbGFuY2Vk 12974\nIEdlRm9yY2U= 12975\nY2xpY2s= 12976\nb2xpdGFu 12977\nb2Rz 12978\nIGFmdGVyd2FyZHM= 12979\nIHBsYXlvZmZz 12980\nIEdpbGw= 12981\nVXNlcg== 12982\nIGJhY2tz 12983\ncHVi 12984\ndGFn 12985\nIGFic3VyZA== 12986\ncGlyaW5n 12987\nIGNpdGluZw== 12988\nIHRyaWxsaW9u 12989\nIG9ibGlnYXRpb24= 12990\nIG1heGlt 12991\nYWhvbw== 12992\nY2Y= 12993\ndW1p 12994\nIEFscGhh 12995\nIE5lbHNvbg== 12996\nIHB1cnN1YW50 12997\naW5pdGVseQ== 12998\nIGZyYWN0 12999\nZW50cnk= 13000\nYmVyeQ== 13001\nIFRob3I= 13002\nQWRkZWQ= 13003\nIERK 13004\nIEdlbmU= 13005\nIGF3a3dhcmQ= 13006\nU3R1ZA== 13007\nIHdhbGxldA== 13008\nIERpdmluZQ== 13009\nYXJpb3M= 13010\nIHJlbGVhc2luZw== 13011\nIGVkaXRlZA== 13012\nIGFjY29tcGxpc2hlZA== 13013\nQmVzdA== 13014\nIGVkZ2Vz 13015\nIHBsYW5lcw== 13016\nIGZlZWRpbmc= 13017\nIn0sIg== 13018\nIGRpc2Nsb3N1cmU= 13019\nIGdyYWlu 13020\nYWlyeQ== 13021\nb29ucw== 13022\nZXJuYW5k 13023\nVlI= 13024\nIHJlYXNvbmFibHk= 13025\nIGRydW0= 13026\nIHBhcnRpYWw= 13027\nIGdyYXBoaWM= 13028\nIHVucHJlY2VkZW50ZWQ= 13029\nIGFkdmlzZWQ= 13030\nTWljcm8= 13031\nIEFzc2Fk 13032\ncG9pbnRz 13033\nc2Nhcg== 13034\nIFpvbmU= 13035\ndHRlcw== 13036\nIDcwMA== 13037\ndm8= 13038\nIEhhbXA= 13039\nIGZpeGVz 13040\nIGNhdXRpb24= 13041\nIHN0cmluZ3M= 13042\nIHBhbmVscw== 13043\nIGxlYWs= 13044\nIHByaWNpbmc= 13045\ncm93dGg= 13046\nIEVycm9y 13047\nIFNhaW50cw== 13048\nZml4 13049\nIG9ic2VydmF0aW9ucw== 13050\nIEFicw== 13051\nIHN1Z2dlc3Rpb24= 13052\nIFVrcmFpbmlhbg== 13053\nIGJhcnJpZXI= 13054\nIHBhaW50ZWQ= 13055\nQmV0 13056\naW1pcg== 13057\nIFNwZWN0 13058\ncG90 13059\nb3JuZXlz 13060\nIGNvbXBvdW5k 13061\nIGJlYXJz 13062\nIFJ1c2g= 13063\nIGx1eHVyeQ== 13064\nU3Vt 13065\nIG9yYml0 13066\nIE1hcmM= 13067\nIGV4ZW1wdA== 13068\nIFRyYWls 13069\nIE1P 13070\nIEhhbnM= 13071\nIFdlYXBvbg== 13072\nb2N1c2Vk 13073\ndW1pbnVt 13074\nIEplcnJ5 13075\nIGJ1c3Q= 13076\nIEFH 13077\nIFdpa2k= 13078\nIGVuZGxlc3M= 13079\nIFZsYWQ= 13080\nIEJhaA== 13081\nIFJhZGVvbg== 13082\na2V5cw== 13083\nIFN1cnZleQ== 13084\nIFZpb2w= 13085\nZGVmaW5l 13086\nbGVhbg== 13087\nIGNvbW1vZA== 13088\nIHJldmVudWVz 13089\nxY0= 13090\nIGZ1cm5pdHVyZQ== 13091\nIGNhc3Rpbmc= 13092\nIGRpcGxvbWF0aWM= 13093\nIFBsYXllcnM= 13094\nIEtpbGxlZA== 13095\nIG1vZGlmeQ== 13096\nIGlubm92YXRpdmU= 13097\nIEFidQ== 13098\nbm9y 13099\nIGJvbmRz 13100\nIGNvYWNoaW5n 13101\nTWVy 13102\nIG1vZHVsZXM= 13103\nIFBhdHJpb3Rz 13104\nIGVuaGFuY2Vk 13105\nIHByb2NlZWRpbmdz 13106\nIHRlYW1tYXRlcw== 13107\nIDEyOA== 13108\nYXJkbw== 13109\nIGNvbXByb21pc2U= 13110\nIE11Y2g= 13111\nIGZsZXc= 13112\nIEVkZ2U= 13113\nIHVubmVjZXNzYXJ5 13114\nIGRvY3RyaW5l 13115\ncmVwb3J0 13116\nIE9ybGFuZG8= 13117\nIFByb2ZpbGU= 13118\nIHBsYXlvZmY= 13119\nZnJpZW5kbHk= 13120\nIGNvbXBsYWlu 13121\nIE1D 13122\nIE9wdA== 13123\nIEdC 13124\nIGJlYXRlbg== 13125\nIGdvbGY= 13126\nIHBsYWNlbWVudA== 13127\nQml0 13128\nIG5ld3NsZXR0ZXI= 13129\nIDIwMTk= 13130\ndmlzb3I= 13131\ncmF3bA== 13132\nIGlQYWQ= 13133\nIGFjdGVk 13134\nIGp1aWNl 13135\nIGRlY2tz 13136\nUE4= 13137\nc3VjY2Vzcw== 13138\nIEhhbGY= 13139\nIGRlbGV0ZWQ= 13140\nIHNlY3JldHM= 13141\nIGFzeWx1bQ== 13142\nTWFydA== 13143\nIEFjdGl2 13144\nIEd1eQ== 13145\nIFRz 13146\nIGR5cw== 13147\nIGFzc3VtaW5n 13148\nIG1hbmE= 13149\nIHN1YnVy 13150\nIDEyNQ== 13151\nTWVkaWE= 13152\nQVJZ 13153\ncmlkZQ== 13154\nY3A= 13155\nIGRpZmZpY3VsdGllcw== 13156\nIGNvbGxlY3Rpbmc= 13157\nIGJhbmtydXB0 13158\nbm9u 13159\nIGNvbXBvc2Vk 13160\nIHZvbHQ= 13161\nIG1pbGl0YW50cw== 13162\nID4+Pg== 13163\nIE1vcm1vbg== 13164\ndG9y 13165\nIHBhcnRpY2xlcw== 13166\nIEJhcnQ= 13167\ncnlwdGlvbg== 13168\nIGFkbWlu 13169\nIHNxdWVl 13170\nVklESUE= 13171\nIGNyZWF0b3I= 13172\naWFtZXRlcg== 13173\naWN1bGFy 13174\nTkJD 13175\nIGdyYWJiZWQ= 13176\nIG5vZGQ= 13177\nIHJhdGVk 13178\nIHJvdGF0aW9u 13179\nIGdyYXNw 13180\nIGV4Y2Vzc2l2ZQ== 13181\nIEVD 13182\nIFdoaXQ= 13183\nIGludmVudG9yeQ== 13184\nYXVsdHM= 13185\nIEZC 13186\nIGVjb3N5c3RlbQ== 13187\nIGJpbGxpb25z 13188\nIHZlbnR1cmU= 13189\nbmFtZWQ= 13190\nIGRlZmVuZGVy 13191\nb3V0ZQ== 13192\nSW5zdGVhZA== 13193\naXJhYmxl 13194\nV2Fy 13195\nIGFzc3VtcHRpb24= 13196\nIGJpdGU= 13197\nIGVhcnRocXU= 13198\ndGFpbA== 13199\nc3BhY2U= 13200\nIGdpZnRz 13201\nYm95cw== 13202\nIGluZXZpdGFibGU= 13203\nIHN0cnVjdHVyYWw= 13204\nIGJlbmVmaWNpYWw= 13205\nIGNvbXBlbGxpbmc= 13206\naG9sZQ== 13207\nZXJ2YXRpb24= 13208\nIGNvYXQ= 13209\nb2o= 13210\naW5jYXJu 13211\nIFllYXJz 13212\nIGRldGVybWluaW5n 13213\nIHJoZXRvcmlj 13214\nIGJvdW5kYXJpZXM= 13215\nIHdoaXRlcw== 13216\nQW50 13217\nYWRkeQ== 13218\nKS0= 13219\ncmFoYW0= 13220\nZXRlcm1pbg== 13221\nIGhhcnZlc3Q= 13222\nIENvbmM= 13223\nIGxhcHRvcA== 13224\nIE1hdGNo 13225\nIGVuam95aW5n 13226\nY2Nh 13227\nb2xsYXI= 13228\nIHRyaXBz 13229\nIGFkZGljdGlvbg== 13230\nIFNhaw== 13231\nIHBvd2VyZWQ= 13232\nIGNvdXM= 13233\nIFJ1c3NpYW5z 13234\naWVyZQ== 13235\nIHJldHJpZQ== 13236\ncXVhbGl0eQ== 13237\nIGRpZmZlcg== 13238\nIGtpbmdkb20= 13239\nIExhdXI= 13240\nIENhcGl0b2w= 13241\nIGNvbmNsdXNpb25z 13242\nIEFsdGVybg== 13243\nIE5hdg== 13244\nIHRyYW5zcGFyZW50 13245\nQkVS 13246\nR3JvdXA= 13247\nIENvbXBsZXRl 13248\nIGluZmVy 13249\nIGludHJpZw== 13250\nIGluc2FuZQ== 13251\nUk8= 13252\nb3Bob2I= 13253\naXNlbg== 13254\ncXVhbA== 13255\nTWljaGFlbA== 13256\nIG11c2V1bQ== 13257\nIFBvcGU= 13258\nIHJlc2V0 13259\ncmF0aXZl 13260\nZml2ZQ== 13261\nIGFnZ3JlZw== 13262\naXR0ZWVz 13263\nb3NpdG9yeQ== 13264\nIGNhcmI= 13265\nIFJlY29yZA== 13266\nIGRlY2lkZXM= 13267\nIEZpeA== 13268\nIGV4Y2VwdGlvbnM= 13269\nIENvbW1pc3Npb25lcg== 13270\ndW5z 13271\nIEVudmlyb25tZW50YWw= 13272\nIGxlZ2VuZGFyeQ== 13273\naXN0ZW5jZQ== 13274\nIHR1bm5lbA== 13275\na20= 13276\nIGluc3VsdA== 13277\nIHRyb2xs 13278\nIHNoYWtl 13279\nIGRldGVudGlvbg== 13280\ncXVlcw== 13281\nIENocm9tZQ== 13282\nIEZpbGVz 13283\nIHN1YnQ= 13284\nIHByb3NwZWN0cw== 13285\nIHByb2w= 13286\ncmVuZGVy 13287\ncHJvb2Y= 13288\nIHBlcmZvcm1hbmNlcw== 13289\nU3Ry 13290\nIGhyZWY= 13291\nZXJuYW1l 13292\nIGFjaGlldmVtZW50 13293\nIGZ1dA== 13294\nRnVsbA== 13295\nIExlYmFu 13296\nZ29vZ2xl 13297\n44OI 13298\nYW1wYQ== 13299\nTWF5YmU= 13300\nIHByb2plY3RlZA== 13301\nIEVtYg== 13302\nIGNvbGxlZw== 13303\nIGF3YXJkcw== 13304\nIOKU 13305\nR29sZA== 13306\nIEJsYWtl 13307\nIFJhag== 13308\naWZ0aW5n 13309\nIHBlbmRpbmc= 13310\nIGluc3RpbmN0 13311\nIGRldmVsb3BtZW50cw== 13312\nQ29ubmVjdA== 13313\nIE1hbmQ= 13314\nIFdJVEg= 13315\nIFBoaWxpcHBpbmVz 13316\ncHJvZmlsZQ== 13317\nIGFsdG9nZXRoZXI= 13318\nIEJ1bmQ= 13319\nIFRE 13320\nb29vbw== 13321\nYW1wZWQ= 13322\naXBo 13323\nIHN0ZWFt 13324\nIG9sZGVzdA== 13325\nIGRldGVjdGlvbg== 13326\ndWxwdA== 13327\nIOc= 13328\nIFdheW5l 13329\nMjAwNg== 13330\nZmE= 13331\nIGNpcmNsZXM= 13332\nIEZ1 13333\nIGRvbm9ycw== 13334\nYXBwcm9wcmlhdGU= 13335\nIERha290YQ== 13336\namFtaW4= 13337\nIG1vdGl2YXRlZA== 13338\nIHB1cmNoYXNlcw== 13339\nIExvdWlzaWFuYQ== 13340\nIFNwbA== 13341\nIGdsb2Jl 13342\nIDEwNQ== 13343\nemlw 13344\nY2FsbA== 13345\nIGRlcGFydG1lbnRz 13346\nIHN1c3RhaW5hYmxl 13347\nMTA1 13348\nIE9Q 13349\naWZpZXJz 13350\nIHByZXZlbnRlZA== 13351\nIGluY29tcA== 13352\nIENvbW1hbmRlcg== 13353\nIGRvbWluYXRlZA== 13354\nIMK7 13355\nIGludmVzdGVk 13356\nIGNvbXBsZXhpdHk= 13357\nIGluY2w= 13358\nIGVuc3VyaW5n 13359\nIHJlYWxt 13360\neW5j 13361\nIEluZGVwZW5kZW50 13362\ncmFpbmVk 13363\nIEplbg== 13364\nIEZsaWdodA== 13365\nIGF0aGU= 13366\nIHNwZWN1bGF0aW9u 13367\nIFRF 13368\nb2NhdGU= 13369\ndGlj 13370\nIHBsYWludA== 13371\naGVycnk= 13372\nIHRveQ== 13373\nIDExMQ== 13374\nIHBsYXRlcw== 13375\nc3RhdHVz 13376\nIElzYQ== 13377\nIGRldm90ZWQ= 13378\nQ29w 13379\nIEVT 13380\nMjU1 13381\ndXJyZW5jeQ== 13382\nTWFpbg== 13383\nIHNsYXZlcw== 13384\nIHBlcHBlcg== 13385\nIHF1b3Rlcw== 13386\nIGNlaWxpbmc= 13387\nIEZpc2g= 13388\nIHRyYW5zZm9ybWF0aW9u 13389\nIGZyYWN0aW9u 13390\nIGFkdmFudGFnZXM= 13391\nIHRvaWxl 13392\nIHN0dW5uaW5n 13393\nIG1vaXN0 13394\nYnJlYWtpbmc= 13395\nc2k= 13396\nIExvY2F0aW9u 13397\nIE1lZGl1bQ== 13398\nIHRleHRz 13399\nIHVnbHk= 13400\nIGJpbw== 13401\nLuKAlA== 13402\nIEJhc2Vk 13403\nIHRyYWlucw== 13404\nIFdpbmc= 13405\nIEFuY2llbnQ= 13406\nIFJlY29yZHM= 13407\nIEhvcGU= 13408\nU3BlY2lhbA== 13409\nYWRlc2g= 13410\nb2Jp 13411\nWy8= 13412\nIHRlbXBvcmFyaWx5 13413\nVmVy 13414\naHU= 13415\nb3Nlcg== 13416\nIG92ZXJuaWdodA== 13417\nIG1hbW0= 13418\nIFRyZWFzdXJ5 13419\nIFZlbmV6dWVs 13420\nIE1lZ2E= 13421\nIHRhcg== 13422\nIGV4cGVjdHM= 13423\nYmxhY2s= 13424\nb3JwaA== 13425\nXFxcXA== 13426\nIGFjY2VwdGFuY2U= 13427\nIHJhZGFy 13428\nc2lz 13429\nIGp1bmlvcg== 13430\nIGZyYW1lcw== 13431\nIG9ic2VydmF0aW9u 13432\nYWNpZXM= 13433\nUG93ZXI= 13434\nIEFkdmFuY2Vk 13435\nTWFn 13436\nb2xvZ2ljYWxseQ== 13437\nIE1lY2hhbg== 13438\nIHNlbnRlbmNlcw== 13439\nIGFuYWx5c3Rz 13440\nYXVnaHRlcnM= 13441\nZm9yY2VtZW50 13442\nIHZhZ3Vl 13443\nIGNsYXVzZQ== 13444\nIGRpcmVjdG9ycw== 13445\nIGV2YWx1YXRl 13446\nIGNhYmluZXQ= 13447\nTWF0dA== 13448\nIENsYXNzaWM= 13449\nQW5n 13450\nIGNsZXI= 13451\nIEJ1Y2s= 13452\nIHJlc2VhcmNoZXI= 13453\nIDE2MA== 13454\nIHBvb3JseQ== 13455\nIGV4cGVyaWVuY2luZw== 13456\nIFBlZA== 13457\nIE1hbmhhdHRhbg== 13458\nIGZyZWVk 13459\nIHRoZW1lcw== 13460\nYWR2YW50 13461\nIG5pbg== 13462\nIHByYWlzZQ== 13463\nMTA0 13464\nIExpYnlh 13465\nYmVzdA== 13466\nIHRydXN0ZWQ= 13467\nIGNlYXNl 13468\nIGRpZ24= 13469\nRGlyZWN0 13470\nIGJvbWJpbmc= 13471\nIG1pZ3JhdGlvbg== 13472\nIFNjaWVuY2Vz 13473\nIG11bmljaXBhbA== 13474\nIEF2ZXJhZ2U= 13475\nIGdsb3J5 13476\nIHJldmVhbGluZw== 13477\nIGFyZW5h 13478\nIHVuY2VydGFpbnR5 13479\nIGJhdHRsZWZpZWxk 13480\naWFv 13481\nR29k 13482\nIGNpbmVt 13483\ncmFwZQ== 13484\nZWxsZQ== 13485\nYXBvbnM= 13486\nIGxpc3Rpbmc= 13487\nIHdhaXRlZA== 13488\nIHNwb3R0ZWQ= 13489\na2VsZXk= 13490\nIEF1ZGlv 13491\nZW9y 13492\nYXJkaW5n 13493\naWRkaW5n 13494\naWdtYQ== 13495\nIE5lZw== 13496\nIGxvbmU= 13497\nIC0tLS0= 13498\nZXhl 13499\nZGVn 13500\nIHRyYW5zZg== 13501\nIHdhc2g= 13502\nIHNsYXZlcnk= 13503\nIGV4cGxvcmluZw== 13504\nIFdX 13505\nYXRzb24= 13506\nIGVuY2w= 13507\nbGllcw== 13508\nIENyZWVr 13509\nIHdvb2Rlbg== 13510\nTWFuYWdlcg== 13511\nIEJyYW5k 13512\ndW1teQ== 13513\nIEFydGh1cg== 13514\nIGJ1cmVhdWNy 13515\nIGJsZW5k 13516\nYXJpYW5z 13517\nRnVydGhlcg== 13518\nIHN1cHBvc2VkbHk= 13519\nIHdpbmRz 13520\nIDE5Nzk= 13521\nIGdyYXZpdHk= 13522\nIGFuYWx5c2Vz 13523\nIFRyYXZlbA== 13524\nIFZldGVy 13525\nIGR1bWI= 13526\nIGFsdGVybmF0ZQ== 13527\nZ2Fs 13528\nIGNvbnN1bWVk 13529\nIGVmZmVjdGl2ZW5lc3M= 13530\nLicn 13531\nIHBhdGhz 13532\nb25kYQ== 13533\nTEE= 13534\nIFN0cm9uZw== 13535\nIGVuYWJsZXM= 13536\nIGVzY2FwZWQ= 13537\nICIi 13538\nIDExMg== 13539\nIDE5ODM= 13540\nIHNtaWxlZA== 13541\nIHRlbmRlbmN5 13542\nRmlyZQ== 13543\nIHBhcnM= 13544\nIFJvYw== 13545\nIGxha2U= 13546\nIGZpdG5lc3M= 13547\nIEF0aA== 13548\nIEhvcm4= 13549\nIGhpZXI= 13550\nIGltcG9zZQ== 13551\nbW90aGVy 13552\nIHBlbnNpb24= 13553\naWN1dA== 13554\nYm9ybmU= 13555\naWNpYXJ5 13556\nLl8= 13557\nIFNV 13558\nIHBvbGFy 13559\naXN5 13560\nZW5ndQ== 13561\naXRpYWxpemVk 13562\nQVRB 13563\nd3JpdGU= 13564\nIGV4ZXJjaXNlcw== 13565\nIERpYW1vbmQ= 13566\nb3R5cGVz 13567\nIGhhcm1mdWw= 13568\nb256 13569\nIHByaW50aW5n 13570\nc3Rvcnk= 13571\nIGV4cGVydGlzZQ== 13572\nIEdlcg== 13573\nIHRyYWdlZHk= 13574\nIEZseQ== 13575\nIGRpdmlk 13576\nYW1waXJl 13577\nc3RvY2s= 13578\nTWVt 13579\nIHJlaWdu 13580\nIHVudmU= 13581\nIGFtZW5k 13582\nIFByb3BoZXQ= 13583\nIG11dHVhbA== 13584\nIEZhYw== 13585\nIHJlcGxhY2luZw== 13586\nSGFy 13587\nIENpcmN1aXQ= 13588\nIHRocm9hdA== 13589\nIFNob3Q= 13590\nIGJhdHRlcmllcw== 13591\nIHRvbGw= 13592\nIGFkZHJlc3Npbmc= 13593\nIE1lZGljYWlk 13594\nIHB1cHA= 13595\nIE5hcg== 13596\nb2xr 13597\nIGVxdWl0eQ== 13598\nTVI= 13599\nIEhpc3Bhbg== 13600\nIExhcmdl 13601\nbWlk 13602\nRGV2 13603\nIGV4cGVk 13604\nIGRlbW8= 13605\nIE1hcnNoYWxs 13606\nZXJndXM= 13607\nIGZpYmVy 13608\nIGRpdm9yY2U= 13609\nIENyZWF0ZQ== 13610\nIHNsb3dlcg== 13611\nIFBhcmtlcg== 13612\nIFN0dWRlbnQ= 13613\nIFRyYWluaW5n 13614\nUmV0dXJu 13615\nIFRydQ== 13616\nIGN1Yg== 13617\nIFJlYWNoZWQ= 13618\nIHBhbmlj 13619\nIHF1YXJ0ZXJz 13620\nIHJlY3Q= 13621\nIHRyZWF0aW5n 13622\nIHJhdHM= 13623\nIENocmlzdGlhbml0eQ== 13624\nb2xlcg== 13625\nIHNhY3JlZA== 13626\nIGRlY2xhcmU= 13627\ndWxhdGl2ZQ== 13628\nZXRpbmc= 13629\nIGRlbGl2ZXJpbmc= 13630\nZXN0b25l 13631\nIHRlbA== 13632\nIExhcnJ5 13633\nIG1ldGE= 13634\nYWNjZXB0 13635\nYXJ0eg== 13636\nIFJvZ2Vy 13637\naGFuZGVk 13638\nIGhlYWRlcg== 13639\nIHRyYXBwZWQ= 13640\nIENlbnR1cnk= 13641\nIGtub2NrZWQ= 13642\nIE94Zm9yZA== 13643\nIHN1cnZpdm9ycw== 13644\nYm90 13645\nIGRlbW9uc3RyYXRpb24= 13646\nIGRpcnQ= 13647\nIGFzc2lzdHM= 13648\nT01F 13649\nIERyYWZ0 13650\nb3J0dW5hdGU= 13651\nZm9saW8= 13652\ncGVyZWQ= 13653\ndXN0ZXJz 13654\nZ3Q= 13655\nIExvY2s= 13656\nIGp1ZGljaWFs 13657\ndmVydGVk 13658\nIHNlY3VyZWQ= 13659\nb3V0aW5n 13660\nIEJvb2tz 13661\nIGhvc3Rpbmc= 13662\nIGxpZnRlZA== 13663\nbGVuZ3Ro 13664\nIGplcg== 13665\nIHdoZWVscw== 13666\nIFJhbmdl 13667\ndW1ibmFpbHM= 13668\nIGRpYWdub3Npcw== 13669\ndGVjaA== 13670\nIFN0ZXdhcnQ= 13671\nIFByYWN0 13672\nIG5hdGlvbndpZGU= 13673\nIGRlYXI= 13674\nIG9ibGlnYXRpb25z 13675\nIGdyb3dz 13676\nIG1hbmRhdG9yeQ== 13677\nIHN1c3BpY2lvdXM= 13678\nISc= 13679\nQXBy 13680\nR3JlYXQ= 13681\nIG1vcnRnYWdl 13682\nIHByb3NlY3V0b3I= 13683\nIGVkaXRvcmlhbA== 13684\nIEty 13685\nIHByb2Nlc3NlZA== 13686\ndW5nbGU= 13687\nIGZsZXhpYmlsaXR5 13688\nRWFybGllcg== 13689\nIENhcnQ= 13690\nIFN1Zw== 13691\nIGZvY3VzZXM= 13692\nIHN0YXJ0dXA= 13693\nIGJyZWFjaA== 13694\nIFRvYg== 13695\nY3ljbGU= 13696\n44CM 13697\ncm9zZQ== 13698\nIGJpemFycmU= 13699\n44CN 13700\nIHZlZ2V0YWJsZXM= 13701\nJCQ= 13702\nIHJldHJlYXQ= 13703\nb3NoaQ== 13704\nIFNob3A= 13705\nIEdyb3VuZA== 13706\nIFN0b3A= 13707\nIEhhd2FpaQ== 13708\nIEF5 13709\nUGVyaGFwcw== 13710\nIEJlYXV0 13711\ndWZmZXI= 13712\nZW5uYQ== 13713\nIHByb2R1Y3Rpdml0eQ== 13714\nRml4ZWQ= 13715\nY29udHJvbA== 13716\nIGFic2VudA== 13717\nIENhbXBhaWdu 13718\nR3JlZW4= 13719\nIGlkZW50aWZ5aW5n 13720\nIHJlZ3JldA== 13721\nIHByb21vdGVk 13722\nIFNldmVu 13723\nIGVydQ== 13724\nbmVhdGg= 13725\nYXVnaGVk 13726\nIFBpbg== 13727\nIExpdmluZw== 13728\nQ29zdA== 13729\nb21hdGlj 13730\nbWVnYQ== 13731\nIE5pZw== 13732\nb2N5 13733\nIGluYm94 13734\nIGVtcGlyZQ== 13735\nIGhvcml6b250 13736\nIGJyYW5jaGVz 13737\nIG1ldGFwaA== 13738\nQWN0aXZl 13739\nZWRp 13740\nIEZpbG0= 13741\nIFNvbWV0aGluZw== 13742\nIG1vZHM= 13743\naW5jaWFs 13744\nIE9yaWdpbmFs 13745\nR2Vu 13746\nIHNwaXJpdHM= 13747\nIGVhcm5pbmc= 13748\nSGlzdA== 13749\nIHJpZGVycw== 13750\nIHNhY3JpZmlj 13751\nTVQ= 13752\nIFZB 13753\nIFNhbHQ= 13754\nIG9jY3VwYXRpb24= 13755\nIE1p 13756\nIGRpc2c= 13757\nbGljdA== 13758\nIG5pdA== 13759\nIG5vZGVz 13760\nZWVt 13761\nIFBpZXI= 13762\nIGhhdHJlZA== 13763\ncHN5 13764\n44OJ 13765\nIHRoZWF0ZXI= 13766\nIHNvcGhpc3RpY2F0ZWQ= 13767\nIGRlZmVuZGVk 13768\nIGJlc2lkZXM= 13769\nIHRob3JvdWdobHk= 13770\nIE1lZGljYXJl 13771\nIGJsYW1lZA== 13772\nYXJlbnRseQ== 13773\nIGNyeWluZw== 13774\nRk9S 13775\ncHJpdg== 13776\nIHNpbmdpbmc= 13777\nIEls 13778\nIGN1dGU= 13779\nb2lkZWQ= 13780\nb2xpdGljYWw= 13781\nIE5ldXJv 13782\n5aQ= 13783\nIGRvbmF0aW9u 13784\nIEVhZ2xlcw== 13785\nIEdpdmU= 13786\nVG9t 13787\nIHN1YnN0YW50aWFsbHk= 13788\nIExpY2Vuc2U= 13789\nIEph 13790\nIGdyZXk= 13791\nIEFuaW1hbA== 13792\nIEVS 13793\nIFVuZA== 13794\nIGtlZW4= 13795\nIGNvbmNsdWRl 13796\nIE1pc3Npc3NpcHBp 13797\nRW5naW5l 13798\nIFN0dWRpb3M= 13799\nUHJlc3M= 13800\nb3ZlcnM= 13801\nbGxlcnM= 13802\nIDM1MA== 13803\nIFJhbmdlcnM= 13804\nIHJvdQ== 13805\nZXJ0bw== 13806\nRXA= 13807\naXNzYQ== 13808\naXZhbg== 13809\nIHNlYWw= 13810\nIFJlZ2lzdA== 13811\nZGlzcGxheQ== 13812\nIHdlYWtlbg== 13813\ndXVt 13814\nIENvbW1vbnM= 13815\nIFNheQ== 13816\nIGN1bHR1cmVz 13817\nIGxhdWdoZWQ= 13818\nIHNsaXA= 13819\nIHRyZWF0bWVudHM= 13820\naXphYmxl 13821\nbWFydA== 13822\nIFJpY2U= 13823\nIGJlYXN0 13824\nIG9iZXNpdHk= 13825\nIExhdXJl 13826\naWdh 13827\nV2hpY2g= 13828\naG9sZGVy 13829\nIGVsZGVybHk= 13830\nIHBheXM= 13831\nIGNvbXBsYWluZWQ= 13832\nIGNyb3A= 13833\nIHByb2M= 13834\nIGV4cGxvc2l2ZQ== 13835\nIEZhbg== 13836\nIEFyc2VuYWw= 13837\nQXV0aG9y 13838\nZWZ1bA== 13839\nIG1lYWxz 13840\nICgt 13841\naWRheXM= 13842\nIGltYWdpbmF0aW9u 13843\nIGFubnVhbGx5 13844\nIG1z 13845\nYXN1cmVz 13846\nSGVhZA== 13847\naWto 13848\nbWF0aWM= 13849\nIGJveWZyaWVuZA== 13850\nIENvbXB1dGVy 13851\nIGJ1bXA= 13852\nIHN1cmdl 13853\nIENyYWln 13854\nIEtpcms= 13855\nRGVs 13856\nbWVkaWF0ZQ== 13857\nIHNjZW5hcmlvcw== 13858\nIE11dA== 13859\nIFN0cmVhbQ== 13860\nIGNvbXBldGl0b3Jz 13861\n2YQ= 13862\nIFN0YW5mb3Jk 13863\nIFJlc291cmNlcw== 13864\nYXplZA== 13865\nYmFnZQ== 13866\nIG9yZ2FuaXM= 13867\nIFJlbGVhc2U= 13868\nIHNlcGFyYXRlbHk= 13869\nIGhhYml0cw== 13870\nIG1lYXN1cmVtZW50cw== 13871\nIENsb3Nl 13872\nIGFjY29tcGFueQ== 13873\nIGdseQ== 13874\nIHRhbmc= 13875\nIFJvdQ== 13876\nIHBsdWdpbg== 13877\nIGNvbnZleQ== 13878\nIENoYWxsZW5nZQ== 13879\nb290cw== 13880\namFu 13881\nIGN1cnM= 13882\nIFJlbGF0aW9ucw== 13883\na2VlcGVy 13884\nIGFwcHJvYWNoaW5n 13885\ncGluZw== 13886\nU3BlYWtpbmc= 13887\nIGFycmFuZ2VtZW50 13888\nIFZJ 13889\nYXJldHRlcw== 13890\nIGFmZmVjdGluZw== 13891\nIHBlcm1pdHM= 13892\nYmVjYXVzZQ== 13893\nIHVzZWxlc3M= 13894\nIEh1cw== 13895\nISEhIQ== 13896\nIGRlc3Ryb3lpbmc= 13897\nVW5mb3J0dW5hdGVseQ== 13898\nIGZhc2NpbmF0aW5n 13899\nU2Vt 13900\nIGVsZWN0b3JhbA== 13901\nIHRyYW5zcGFyZW5jeQ== 13902\nIENoYW9z 13903\nIHZvbHVudGVlcg== 13904\nIHN0YXRpc3RpY2Fs 13905\nIGFjdGl2YXRlZA== 13906\ncm94 13907\nV2Vi 13908\nSEU= 13909\nIEhhbXBzaGlyZQ== 13910\naXNpdmU= 13911\nTWFw 13912\nIHRyYXNo 13913\nIExhd3JlbmNl 13914\nc3RpY2s= 13915\nQ3I= 13916\nIHJpbmdz 13917\nRVhU 13918\nIG9wZXJhdGlvbmFs 13919\nb3Blcw== 13920\nRG9lcw== 13921\nIEV2YW5z 13922\nIHdpdG5lc3NlZA== 13923\nUG9ydA== 13924\nIGxhdW5jaGluZw== 13925\nZWNvbm9t 13926\nd2Vhcg== 13927\nIFBhcnRpY2lw 13928\ndW1t 13929\nY3VsZXM= 13930\nIFJBTQ== 13931\nIFR1bg== 13932\nIGFzc3VyZWQ= 13933\nIGJpbmFyeQ== 13934\nIGJldHJheQ== 13935\nIGV4cGxvcmF0aW9u 13936\nIEZlbA== 13937\nIGFkbWlzc2lvbg== 13938\naXRhdGVk 13939\nU3k= 13940\nIGF2b2lkZWQ= 13941\nIFNpbXVsYXRvcg== 13942\nIGNlbGVicmF0ZWQ= 13943\nIEVsZWN0cmlj 13944\npZ4= 13945\nIGNsdXN0ZXI= 13946\naXR6ZXJsYW5k 13947\naGVhbHRo 13948\nTGluZQ== 13949\nIE5hc2g= 13950\nYXRvbg== 13951\nIHNwYXJl 13952\nIGVudGVycHJpc2U= 13953\nIERJUw== 13954\nY2x1ZGVz 13955\nIGZsaWdodHM= 13956\nIHJlZ2FyZHM= 13957\nIMOX 13958\naGFsZg== 13959\nIHRydWNrcw== 13960\nIGNvbnRhY3Rz 13961\nIHVuY29ucw== 13962\nIENsaW1hdGU= 13963\nIGltbWVuc2U= 13964\nTkVX 13965\nb2Nj 13966\nZWN0aXZl 13967\nIGVtYm9k 13968\nIHBhdHJvbA== 13969\nIGJlc2lkZQ== 13970\nIHZpYWJsZQ== 13971\nIGNyZWVw 13972\nIHRyaWdnZXJlZA== 13973\ndmVybmluZw== 13974\nIGNvbXBhcmFibGU= 13975\ncWw= 13976\nIGdhaW5pbmc= 13977\nYXNzZXM= 13978\nICgpOw== 13979\nIEdyZXk= 13980\nIE1MUw== 13981\nc2l6ZWQ= 13982\nIHByb3NwZXI= 13983\nIj8= 13984\nIHBvbGxpbmc= 13985\nIHNoYXI= 13986\nIFJD 13987\nIGZpcmVhcm0= 13988\nb3JpZW50 13989\nIGZlbmNl 13990\nIHZhcmlhdGlvbnM= 13991\nZ2l2aW5n 13992\nIFBp 13993\nb3NwZWw= 13994\nIHBsZWRnZQ== 13995\nIGN1cmU= 13996\nIHNweQ== 13997\nIHZpb2xhdGVk 13998\nIHJ1c2hlZA== 13999\nIHN0cm9rZQ== 14000\nIEJsb2c= 14001\nc2Vscw== 14002\nIEVj 14003\nLCcn 14004\nIHBhbGU= 14005\nIENvbGxpbnM= 14006\ndGVycm9y 14007\nIENhbmFkaWFucw== 14008\nIHR1bmU= 14009\nIGxhYm9yYXRvcnk= 14010\nIG5vbnM= 14011\ndGFyaWFu 14012\nIGRpc2FiaWxpdHk= 14013\nIEdhbQ== 14014\nIHNpbmdlcg== 14015\nYWxn 14016\nIFNlbmlvcg== 14017\nIHRyYWRlZA== 14018\nIFdhcnJpb3I= 14019\nIGluZnJpbmc= 14020\nIEZyYW5rbGlu 14021\nIHN0cmFpbg== 14022\nIFN3ZWRpc2g= 14023\nIHNldmVudGg= 14024\nIEJlbm4= 14025\nIFRlbGw= 14026\nIHN5bmRyb21l 14027\nIHdvbmRlcmVk 14028\naWRlbg== 14029\nKysrKw== 14030\naWdv 14031\nIHB1cnBsZQ== 14032\nIGpvdXJuYWxpc20= 14033\nIHJlYmVs 14034\nIGZ1 14035\nYmxvZw== 14036\nIGludml0ZQ== 14037\ncmVuY2llcw== 14038\nIENvbnRhY3Q= 14039\nSXNyYWVs 14040\nIENvbnRlbnQ= 14041\nIGNoZWVy 14042\nIGJlZHJvb20= 14043\nIEVuZ2luZWVyaW5n 14044\nIFF1ZWVucw== 14045\nIGR3ZWxs 14046\nIFBsYXlTdGF0aW9u 14047\nIERpbQ== 14048\nIENvbG9u 14049\nbHI= 14050\nIG9wZXJhdGVz 14051\nIG1vdGl2YXRpb24= 14052\nVVNB 14053\nYXN0ZXJlZA== 14054\nQ29yZQ== 14055\nIFRydXRo 14056\nb2xv 14057\nT1NF 14058\nIE1lbW9yeQ== 14059\nIHByZWRlYw== 14060\nIGFuYXJjaA== 14061\nIDE5MjA= 14062\nIFlhbQ== 14063\nw6g= 14064\nYmlk 14065\nIGdyYXRlZnVs 14066\nIGV4Y2l0ZW1lbnQ= 14067\nIHRyZWFzdXJl 14068\nIGxvbmdlc3Q= 14069\nY3RpdmU= 14070\nIGRlc2VydmVz 14071\nIHJlc2VydmVz 14072\nIGNvcHM= 14073\nIE90dGF3YQ== 14074\nIEVneXB0aWFu 14075\nYW5rZWQ= 14076\nIGFydGlm 14077\nIGh5cG90aGVzaXM= 14078\nOi8= 14079\nIHB1cmNoYXNpbmc= 14080\nIGxvdmVseQ== 14081\nSFA= 14082\nIGRpdmlkZQ== 14083\nIHN0cmljdGx5 14084\nIHF1ZXN0aW9uaW5n 14085\nIHRheHBheWVycw== 14086\nIEpveQ== 14087\nIHJvbGxz 14088\nIEhlYXZ5 14089\nIHBvcnRz 14090\nIG1hZ25ldGlj 14091\nIGluZmxhbW0= 14092\nIGJydXNo 14093\ndGljcw== 14094\n4oiS 14095\nIGJvdHRsZXM= 14096\ncHB5 14097\nIHBhZGQ= 14098\n44Kv 14099\nbWlsbGlvbg== 14100\nIGRldmFzdGF0aW5n 14101\nIGNvbXBpbGVk 14102\nIG1lZGljYXRpb24= 14103\nIHR3ZWx2ZQ== 14104\nIFBlcnJ5 14105\nU3BhY2U= 14106\naW1i 14107\neW91cg== 14108\nIGxlYWtlZA== 14109\nIFRhcg== 14110\nIHVuaXR5 14111\nIGluZmVjdGVk 14112\nIHRyYXZlbGVk 14113\nSURF 14114\nIE1jRG9uYWxk 14115\ndHh0 14116\nIFByaW5j 14117\nIGludGVydmVu 14118\nIFRhaXdhbg== 14119\nIFBvdw== 14120\nIGJlYXJpbmc= 14121\nIFRocmVhZA== 14122\nIHpvbmVz 14123\naXphcmRz 14124\ndW5rcw== 14125\nQ2hhcHRlcg== 14126\nbGxvcg== 14127\nIMK3 14128\nIHdvdW5kcw== 14129\nIGRpc2NyZXRpb24= 14130\nIHN1Y2NlZWRlZA== 14131\naWtpbmc= 14132\nIGljb25pYw== 14133\nQ2FsbA== 14134\nIHNjcmVlbmluZw== 14135\nIE1pcw== 14136\naWN0cw== 14137\nIG1pbmlzdGVycw== 14138\nIHNlcGFyYXRpb24= 14139\nUGxheWVy 14140\nIGJpcA== 14141\nIGJlbG92ZWQ= 14142\nIGNvdW50aW5n 14143\nIEV5ZQ== 14144\nYXJvdW5k 14145\naW5naW5n 14146\nIHRhYmxldA== 14147\nIG9mZmVuY2U= 14148\naW5hbmNl 14149\naGF2ZQ== 14150\nIEluZm8= 14151\nIE5pbmph 14152\nIHByb3RlY3RpdmU= 14153\nIENhc3M= 14154\nTWFj 14155\nIFF1YWxpdHk= 14156\nTm9ydGg= 14157\nIGlj 14158\nIEN1YmE= 14159\nIENocm9uaWNsZQ== 14160\nIFByb3BlcnR5 14161\nIGZhc3Rlc3Q= 14162\nb3Rvcw== 14163\nIEdlcm0= 14164\nT1dO 14165\nIGJvb20= 14166\nIFN0YW5sZXk= 14167\nZXJndXNvbg== 14168\nIGNsZXZlcg== 14169\nIGVudGVycw== 14170\nbW9kZQ== 14171\ndGVyaW9y 14172\nIFNlbnM= 14173\nIGxpbmVhcg== 14174\nQVJL 14175\nIGNvbXBhcmluZw== 14176\nIHB1cmVseQ== 14177\nIHNhZmVy 14178\nIFBvdHRlcg== 14179\nIGN1cHM= 14180\nUlQ= 14181\nIGdsdWM= 14182\nIGF0dHJpYnV0ZWQ= 14183\nIGR1cGw= 14184\nIFBhcA== 14185\nIHByZWNpb3Vz 14186\nIHBh 14187\naWN0aW9uYXJ5 14188\nIFRpZw== 14189\nIFRvbw== 14190\nb2x1dGlvbnM= 14191\nc3Rhbg== 14192\nIHJvYm90cw== 14193\nIGxvYmI= 14194\nIHN0YXR1dGU= 14195\nIHByZXZlbnRpb24= 14196\nd2VzdGVybg== 14197\nMTYw 14198\nIEFjdGl2ZQ== 14199\nIE1hcmlh 14200\naGFs 14201\nTm9uZQ== 14202\nZWxsYXI= 14203\nIEtC 14204\nIFBhcnRuZXJz 14205\nIFNpbmdsZQ== 14206\nIEZvbGxvd2luZw== 14207\nYW5nbw== 14208\nYWNpb3Vz 14209\nIHRob3U= 14210\nIGtn 14211\nIGluZmx1ZW50aWFs 14212\nIEZyaWVuZHM= 14213\nU3Vy 14214\nYWludGVk 14215\nIGZvcnVtcw== 14216\nIHN0YXJ0ZXI= 14217\nIGNpdGl6ZW5zaGlw 14218\nIEVsZWN0aW9u 14219\nb25nZQ== 14220\nb3RhdGlvbg== 14221\nb3NwaA== 14222\nOzs7Ow== 14223\ndXRpY2Fs 14224\ncHVy 14225\nZXJlbg== 14226\nIGFjY3VzYXRpb25z 14227\nYml0aW91cw== 14228\nYWJiaXQ= 14229\nIE9yZA== 14230\nUG9zdGVk 14231\naXJr 14232\nIHNlbnNpdGl2aXR5 14233\naWNoZQ== 14234\nIEFteQ== 14235\nIEZhYg== 14236\nIHN1bW1pdA== 14237\nIHBlZGVzdA== 14238\nIHJ1YmJlcg== 14239\nIGFncmljdWx0dXJhbA== 14240\nIGNhbmNlbA== 14241\nQUU= 14242\nIGluYXVn 14243\nIGNvbnRhbQ== 14244\nIGZpcm1seQ== 14245\naXc= 14246\nc3RhZ2U= 14247\nIEthbg== 14248\nIHRpZXI= 14249\nIGludmVudGlvbg== 14250\nIHRyYW5zbGF0ZWQ= 14251\nIFJ1bGVz 14252\nQm94 14253\nVHdpdHRlcg== 14254\nSURT 14255\nIHBpenph 14256\nIGRlYnVn 14257\nIERyb3A= 14258\ndnM= 14259\nIGhvcnNlcw== 14260\nYmln 14261\nIGJvcmluZw== 14262\nIGhvb2Q= 14263\nIE1jQ2Fpbg== 14264\nYXRjaGVk 14265\nIEJyb3M= 14266\nIHNraXA= 14267\nIGVzc2F5 14268\nc3RhdA== 14269\nIExlZ2VuZHM= 14270\nIGFtbXVuaXRpb24= 14271\nYXVj 14272\nIHNob290ZXI= 14273\nIHVuaA== 14274\nIHN1cHBsaWVk 14275\nIGdlbmVyaWM= 14276\nIFNL 14277\naWJhbg== 14278\neXJpY3M= 14279\nIDI1NQ== 14280\nIGNsaW1iaW5n 14281\nRm9ybWVy 14282\nIGZsaXA= 14283\nIGp1bXBpbmc= 14284\nIGZydXN0cmF0aW9u 14285\nIFRlcnJ5 14286\nIG5laWdoYm9yaG9vZHM= 14287\nIG1lZGlhbg== 14288\nYmVhbg== 14289\nIGJyYWlucw== 14290\nRm9sbG93aW5n 14291\nIHNoYXBlZA== 14292\nIGRyYXdz 14293\nIGFsdGVyZWQ= 14294\nSmFjaw== 14295\nIHJlY2lwZXM= 14296\nIHNraWxsZWQ= 14297\nd2VhbHRo 14298\nYWNoaQ== 14299\nZWxlY3Rpb24= 14300\nIGJlaGF2aW9ycw== 14301\nZGVhbHM= 14302\nIFVudGls 14303\nRmU= 14304\nIGRlY2xhcmF0aW9u 14305\nbWFya3M= 14306\nIEJldHdlZW4= 14307\nY2Vsb25h 14308\nIHJlc29u 14309\nIGJ1YmJsZQ== 14310\nQW1vbmc= 14311\nIGltcGVyaWFs 14312\nR1M= 14313\nIGZlbWluaXN0 14314\nMjAwNQ== 14315\nIEt5bGU= 14316\nIGFjY291bnRpbmc= 14317\nIFRlbGU= 14318\nIFR5cg== 14319\nIGNvbm5lY3Rpbmc= 14320\nIHJlaGFi 14321\nIFByZWQ= 14322\nc2lt 14323\nIG1lYW50aW1l 14324\nIHBoeXNpY2lhbg== 14325\nTVc= 14326\nIENhbXBiZWxs 14327\nIEJyYW5kb24= 14328\nIGNvbnRyaWJ1dGluZw== 14329\nIFJ1bGU= 14330\nIFdlaWdodA== 14331\nIE5hcA== 14332\nIGludGVyYWN0aXZl 14333\nIHZhZw== 14334\nIGhlbG1ldA== 14335\nIENvbWI= 14336\nZm91cg== 14337\nIHNoaXBwZWQ= 14338\nIGNvbXBsZXRpbmc= 14339\nIFBE 14340\nUERBVEU= 14341\nIHNwcmVhZGluZw== 14342\nIHNjYXJ5 14343\nZXJ2aW5n 14344\nIEdhcw== 14345\nIGZyYW5r 14346\nc2Nob29s 14347\nIHJvbWFudGlj 14348\nIHN0YWJpbA== 14349\nUm9i 14350\nIGFjY3VyYXRlbHk= 14351\nIGFjdXRl 14352\nIEhhbm4= 14353\nIHN5bWJvbHM= 14354\nIGNpdmlsaXphdGlvbg== 14355\nIEFX 14356\nIGxpZ2h0bmluZw== 14357\nIGNvbnNpZGVycw== 14358\nIHZlbnVl 14359\nINc= 14360\nIG92ZW4= 14361\nIFNG 14362\naGlz 14363\nIG51 14364\nIExlYXJu 14365\nIHBlb3BsZXM= 14366\nIHN0ZA== 14367\nIHNsZWU= 14368\nIHNsaWM= 14369\nIFN0YXRpc3RpY3M= 14370\nIGNvcm5lcnM= 14371\nIEJha2Vy 14372\nIDop 14373\nbWVudGF0aW9u 14374\nb2x2ZXI= 14375\nIGxhdWdoaW5n 14376\nIFRvZGQ= 14377\nb25kZQ== 14378\nIEhpbGxz 14379\nIG51dHM= 14380\nIFdvbWFu 14381\ncGxhbmU= 14382\nIGxpdmVy 14383\nIEluc2lkZQ== 14384\nU29ycnk= 14385\nIGFncmVlcw== 14386\nIGZ1bmRhbWVudA== 14387\nIEZpc2hlcg== 14388\nIGF1Y3Rpb24= 14389\nIHRocmVhZHM= 14390\nZ2xhcw== 14391\nIEJhc2lj 14392\nIE5hdA== 14393\nIGxhY2tpbmc= 14394\nIGNlbGVicmF0aW9u 14395\nanU= 14396\nIHNpbGx5 14397\nRXVybw== 14398\nIHRhdHQ= 14399\naWdodHk= 14400\nY29udHJvbGxlZA== 14401\nVGVzdA== 14402\nIFNpbmdo 14403\nIHJhZ2U= 14404\nIHJoeXRo 14405\nb2ZmaWM= 14406\nIFBoYW50b20= 14407\nIGhlYWRsaW5lcw== 14408\nIHJlc3BvbmRpbmc= 14409\nIE1vcm5pbmc= 14410\nIHZpdGFtaW4= 14411\nIGJvb3Rz 14412\nIFNpdGU= 14413\nYWxpbg== 14414\ncGk= 14415\nIHZpcmFs 14416\nIFVD 14417\nREVS 14418\nIFNleA== 14419\nIHN0b2Nrcw== 14420\nY3VycmVudA== 14421\nIGNodXJjaGVz 14422\nIFJhcmU= 14423\nIE11cnBoeQ== 14424\nIGRlbmlhbA== 14425\nIEdhbWluZw== 14426\nIHRvdWc= 14427\nIG5pY2s= 14428\nIG1ha2Vycw== 14429\nIFJvbmFsZA== 14430\nIGdlbmVyb3Vz 14431\nIERvYw== 14432\nIE1vcnJpcw== 14433\nIHRyYW5zZm9ybWVk 14434\nIE5vcm1hbA== 14435\nIDEwNA== 14436\nIEtpY2tzdGFydGVy 14437\nIFVwb24= 14438\nT25saW5l 14439\nIElSUw== 14440\nIHdyYXA= 14441\nIGxvdmluZw== 14442\nIGFycml2ZXM= 14443\nIER1ZQ== 14444\nIGhldGVy 14445\nIE1hZGU= 14446\nIHJlbnRhbA== 14447\nIGJlbG9uZ3M= 14448\nIGF0dG9ybmV5cw== 14449\nIGNyb3Bz 14450\nIG1hdGNoZWQ= 14451\ndWx1bQ== 14452\nb2xpbmU= 14453\nMTA5 14454\nIGRpc3Bhcg== 14455\nIGJ1eWVycw== 14456\nIENhbWJyaWRnZQ== 14457\nIGV0aGljcw== 14458\ncm91cHM= 14459\nIGp1c3RpZmllZA== 14460\nIG1hcmdpbmFs 14461\nIHJlc3BlY3RlZA== 14462\nd2lubmluZw== 14463\nIG5vZGRlZA== 14464\nIFNlcmdl 14465\nIEZvcm1lcg== 14466\nQ3JhZnQ= 14467\nIyMjIyMjIyMjIyMjIyMjIw== 14468\nIFdhcm5lcg== 14469\nIGRhc2g= 14470\nZXRl 14471\nIGVudGVydA== 14472\nIEVzY2FwZQ== 14473\nb3V0aGVhc3Q= 14474\nIGtuZWVz 14475\nIEJvbWI= 14476\nIHJ1Zw== 14477\nUGFzcw== 14478\nIGF0dGl0dWRlcw== 14479\nZ292ZXJubWVudA== 14480\nIFByaW9y 14481\nIHF1YWxpdGllcw== 14482\nIG5vdGlmaWNhdGlvbg== 14483\nIFBob25l 14484\nbGll 14485\nIGFudGljaXBhdGVk 14486\nIENvbWJhdA== 14487\nIEJhcnJ5 14488\nIDE5ODI= 14489\nVXNlcnM= 14490\nb25lcg== 14491\nIGNvbXB1dGluZw== 14492\nIENvbm5lY3RpY3V0 14493\nIGxlc3Nlcg== 14494\nIHBlZXJz 14495\nIEN1 14496\nIHRlY2huaWNhbGx5 14497\nIHN1Ym1pc3Npb24= 14498\nIFVuaXZlcnNhbA== 14499\nIG1hbnVhbGx5 14500\nb3VyZ2U= 14501\nIHJlc3BvbmRlbnRz 14502\nIEJUQw== 14503\nIEhvc3Q= 14504\nIGZhcmU= 14505\nIEJpcmQ= 14506\nIHJlY2VpcHQ= 14507\nYWxzbw== 14508\nIGphY2s= 14509\nIGFncmljdWx0dXJl 14510\nIHNrdWxs 14511\nICE9 14512\nIHBhc3NpdmU= 14513\nIENJ 14514\nIHNvY2lldGllcw== 14515\nIHJlbWluZGVk 14516\nIGludGVyZmVyZW5jZQ== 14517\nQnV5 14518\nIOKc 14519\nZ29u 14520\nIHNjcnV0aW55 14521\nIFdpdGNo 14522\nIGNvbmR1Y3Rpbmc= 14523\nIOOD 14524\nIGV4Y2hhbmdlcw== 14525\nIE1pdGNoZWxs 14526\nIGluaGFiaXQ= 14527\nIHR3aXN0 14528\nQkQ= 14529\nIHdoZXJldmVy 14530\nZ3JvdXBvbg== 14531\nIGpva2Vz 14532\nIEJlbmphbWlu 14533\nIFJhbmRvbQ== 14534\nZnJhbWU= 14535\nIExpb25z 14536\nIGhpZ2hsaWdodGVk 14537\nIEFya2Fuc2Fz 14538\nRW50 14539\nIHBpbGU= 14540\nIHByZWxpbQ== 14541\nZ3M= 14542\nbWluZGVk 14543\nIGZlbG9ueQ== 14544\nIEdB 14545\nIEx1Y2s= 14546\nIHByYWN0aWNhbGx5 14547\nIEJvcw== 14548\nIGFjdHJlc3M= 14549\nRGFt 14550\nIEJvdQ== 14551\nIHZpc2E= 14552\nIGVtYmVkZGVk 14553\nIGh5YnJpZA== 14554\nIGVhcmxpZXN0 14555\nIHNvb25lcg== 14556\nc29jaWFs 14557\nIEhB 14558\nIHN0ZWVw 14559\nIGRpc2FkdmFudA== 14560\nIGV4cGxvaXQ= 14561\nIEVnZw== 14562\nIFVsdHJh 14563\nIG5lY2Vzc2l0eQ== 14564\nTG9jYWw= 14565\naWVnZQ== 14566\nIGRhdGVk 14567\nIG1hc3Nlcw== 14568\nIHN1YnNjcmlwdGlvbg== 14569\ncGxlc3M= 14570\nIGFub255bQ== 14571\nIHByZXN1bWFibHk= 14572\nQmx1ZQ== 14573\nVGhlaXI= 14574\nYXNrZXRiYWxs 14575\nIFBoaWxpcA== 14576\nIGNvbWVk 14577\nbG9hZGVk 14578\ncmFuZQ== 14579\nIHJlZmxlY3Rpb24= 14580\nQ2hpbmE= 14581\nIGV4dGVuZHM= 14582\nIGZvcm1pbmc= 14583\nIHVuZGVycw== 14584\nMjAwMQ== 14585\nIGdyYXQ= 14586\nIGNvbmNlbnRyYXRpb25z 14587\nIGluc3VsaW4= 14588\nIHNlY3VsYXI= 14589\nIHdoaWxzdA== 14590\nIHdpbm5lcnM= 14591\nQWR2ZXJ0aXNlbWVudHM= 14592\nIGRlbGliZXJhdGVseQ== 14593\nIFdvcmtpbmc= 14594\nIHNpbms= 14595\nZXRpY3M= 14596\nZGFsZQ== 14597\nIG1hbmRhdGU= 14598\nIGdyYW0= 14599\nIHZhY2F0aW9u 14600\nIHdhcm5pbmdz 14601\ncmlwcA== 14602\nIFRIQVQ= 14603\nIGNvbW1lbnRhcnk= 14604\nIGludHU= 14605\nIGFlc3Q= 14606\nIHJlYXNvbmluZw== 14607\nIGJyZWFrZG93bg== 14608\nIFpvbWJpZQ== 14609\nIC0tPg== 14610\nIFBvbGl0aWNhbA== 14611\nY290dA== 14612\nIHRocnVzdA== 14613\nIHRlY2hub2xvZ2ljYWw= 14614\nIGRlY2lkaW5n 14615\nIHRyYWZmaWNraW5n 14616\nTG9uZw== 14617\nV2VsY29tZQ== 14618\ncHJpc2luZw== 14619\nIENvbW11bmljYXRpb25z 14620\nIGVuZG9ycw== 14621\nIHN3aWZ0 14622\nIG1ldGFib2w= 14623\nY29pbnM= 14624\ncmVzYQ== 14625\nIEhUVFA= 14626\nIGVucm9sbA== 14627\nIEhhcHB5 14628\ndXNy 14629\naW50YWdl 14630\nIFsi 14631\ndWFibHk= 14632\nIE1hdGVyaWFs 14633\nIHJlcGVhbA== 14634\nU2VwdA== 14635\na2g= 14636\nIE1vZGk= 14637\nIHVuZGVybmVhdGg= 14638\nIElM 14639\nc2hvcmU= 14640\nIGRpYWdub3NlZA== 14641\nYWNldXRpY2Fs 14642\nIHNob3dlcg== 14643\nYXV4 14644\nIFN3aXRjaA== 14645\nIFN0cmVuZ3Ro 14646\nIGppaGFk 14647\nbmF0aW9uYWw= 14648\nIHRyYXVtYQ== 14649\ndXNzeQ== 14650\nb25p 14651\nIGNvbnNvbGlk 14652\nIGNhbG9yaWVz 14653\nIEZseW5u 14654\nYWdnZWQ= 14655\nMTY4 14656\nIFBpbms= 14657\nIGZ1bGZpbGw= 14658\nIGNoYWlucw== 14659\nIG5vdGFibHk= 14660\nIEFW 14661\nTGlmZQ== 14662\nIENodWNr 14663\nbXVz 14664\nIFVyYmFu 14665\nIEhlbmQ= 14666\nIGRlcG9zaXQ= 14667\nIFNhZA== 14668\nIGFmZmFpcg== 14669\nT1JL 14670\naWV2YWw= 14671\nIEZEQQ== 14672\nIHRyb3A= 14673\nIE92ZXJhbGw= 14674\nIHZpcnR1ZQ== 14675\nIHNhdGlzZmFjdGlvbg== 14676\nYXVuZA== 14677\nIGx1bg== 14678\nIFN3aXR6ZXJsYW5k 14679\nIE9wZXJhdGlvbg== 14680\ncHJvY2Vzcw== 14681\nIHNob29r 14682\nIGNvdW50aWVz 14683\nbGVhc2Vk 14684\nIENoYXJsb3R0ZQ== 14685\nMTEy 14686\nIHRyYW5zY3JpcHQ= 14687\nIHJlZGQ= 14688\ncHVzaA== 14689\nIEhleQ== 14690\nIEFuYWx5c2lz 14691\nWyI= 14692\nIGFsdGVybmF0aXZlcw== 14693\nYXJkbGVzcw== 14694\nIGVsZXBo 14695\nIHByZWp1ZA== 14696\nIExlYWY= 14697\nSGF2aW5n 14698\nIEh1Yg== 14699\nIGV4cHJlc3Npb25z 14700\nIFZvbHVtZQ== 14701\nIHNob2NraW5n 14702\nIFJlZHM= 14703\nIHJlYWRpbHk= 14704\nIHBsYW5ldHM= 14705\nYWRhdGE= 14706\nIGNvbGxhcHNlZA== 14707\nIE1hZHJpZA== 14708\nIGlycml0 14709\naXBwZXI= 14710\nIEVuYw== 14711\nIFdpcmU= 14712\nIGJ1eno= 14713\nIEdQ 14714\nYXNoYQ== 14715\nIGFjY2lkZW50YWxseQ== 14716\ndXJ1 14717\nIGZydXN0cmF0ZWQ= 14718\nIFNB 14719\nIGh1bmdyeQ== 14720\nIEh1ZmY= 14721\nIGxhYmVscw== 14722\nYW50bw== 14723\nIEVQ 14724\nIGJhcnJpZXJz 14725\nKXw= 14726\nIEJlcmtlbGV5 14727\nIEpldHM= 14728\nIHBhaXJz 14729\nIExhbg== 14730\nSmFtZXM= 14731\nIEJlYXI= 14732\nIGh1bW9y 14733\nIExpYmVydHk= 14734\nIG1hZ25pdHVkZQ== 14735\nIGFnaW5n 14736\nIE1hc29u 14737\nIGZyaWVuZHNoaXA= 14738\ndW1ibGluZw== 14739\nIGVtZXJnZQ== 14740\nIG5ld3NwYXBlcnM= 14741\nIGFtYml0aW91cw== 14742\nIFJpY2hhcmRz 14743\nYXRlcm5hbA== 14744\nIDE5ODE= 14745\nIGNvb2tpZXM= 14746\nIHNjdWxwdA== 14747\nIHB1cnN1aXQ= 14748\nTG9jYXRpb24= 14749\nIHNjcmlwdHM= 14750\ncGM= 14751\nIGFycmFuZ2VtZW50cw== 14752\nIGRpYW1ldGVy 14753\nIGxvc2Vz 14754\nYW1hdGlvbg== 14755\nIGxpcXU= 14756\nIEpha2U= 14757\nYXJldHRl 14758\nIHVuZGVyc3RhbmRz 14759\nIFplbg== 14760\ndm0= 14761\nIGFwcHJvdmU= 14762\nIHdpcA== 14763\nIHVsdHJh 14764\nIGludGVuZA== 14765\nIERJ 14766\nYXNjdWxhcg== 14767\nIHN0YXlz 14768\nIEtvcg== 14769\nIEts 14770\nIGludmVzdGluZw== 14771\nTGE= 14772\nIGJlbGlldmluZw== 14773\nYmFk 14774\nbW91dGg= 14775\nIHRheHBheWVy 14776\n44OD 14777\nIFF1ZWJlYw== 14778\nIGxhcA== 14779\nIFN3aXNz 14780\nZHJvcA== 14781\nIGRyYWlu 14782\naXJp 14783\nZXRj 14784\nZnRlbg== 14785\nIE5leA== 14786\nIHN0cmF3 14787\nIHNjcmVhbWluZw== 14788\nIGNvdW50ZWQ= 14789\nIGRhbWFnaW5n 14790\nIGFtYmFzc2Fkb3I= 14791\nY2VudHVyeQ== 14792\nIHByb3g= 14793\nIGFycmVzdHM= 14794\ndXY= 14795\naWxhdGVyYWw= 14796\nIENoYXJn 14797\nIHByZXNjcmliZWQ= 14798\nIGluZGVwZW5kZW50bHk= 14799\nIGZpZXJjZQ== 14800\nIEJhYnk= 14801\nIGJyYXZl 14802\nIHN1aXRz 14803\nPT4= 14804\nIGJhc2VsaW5l 14805\nIFJhdGU= 14806\nIGlzbGFuZHM= 14807\nICgo 14808\nZ3JlZW4= 14809\naXhlbHM= 14810\nIG5hbWVseQ== 14811\nIFZpbGxhZ2U= 14812\ndGhhbg== 14813\nYW15 14814\nVmVyc2lvbg== 14815\nZ21haWw= 14816\nZW50aWFscw== 14817\nIFN1ZA== 14818\nIE1lbGJvdXJuZQ== 14819\nIGFycml2aW5n 14820\nIHF1YW50dW0= 14821\nZWZm 14822\ncm9wb2xpdGFu 14823\nVHJp 14824\nIGZ1bmVyYWw= 14825\nIElS 14826\nw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= 14827\nIENvYg== 14828\naXRhYmx5 14829\nIHR1cmI= 14830\nIGNvbWJv 14831\nUmV2aWV3 14832\nIGRlcGxveW1lbnQ= 14833\ndWl0eQ== 14834\nIEJvdHQ= 14835\nIGludmlzaWJsZQ== 14836\nIHJlbmRlcmluZw== 14837\nIHVubG9ja2Vk 14838\nIGFxdQ== 14839\nIFZsYWRpbWly 14840\nIHBhZA== 14841\nIEJyYWlu 14842\nIExlZ2FjeQ== 14843\nZHJhZ29u 14844\nIEt1cmRpc2g= 14845\nIHNvdW5kZWQ= 14846\nIGRldGFpbmVk 14847\nIERN 14848\nZ2FyeQ== 14849\nIGRhdWdodGVycw== 14850\nIGRpc3R1cmJpbmc= 14851\ndWth 14852\nIFBhcmFk 14853\nIHRhc3Q= 14854\nIHVuZm9ydHVuYXRl 14855\nIHVs 14856\nZW1pbg== 14857\nIGF0dGVuZGFuY2U= 14858\ndHJs 14859\nIHBhcmtz 14860\nIE1lbW9yaWFs 14861\nIEFsaWNl 14862\nb3RoeQ== 14863\nZ3VhcmQ= 14864\nIERpc2U= 14865\nIFNoYW4= 14866\nIEZvcnVt 14867\nUmljaA== 14868\nIHNoaWZ0ZWQ= 14869\ndWV6 14870\nIGxpZ2h0ZXI= 14871\nIE1hZ24= 14872\nIGNvZA== 14873\nU2No 14874\naGFtbWFk 14875\nUHVi 14876\nMzUw 14877\nIFBva2Vtb24= 14878\nIHByb3RvdHlwZQ== 14879\nIHVucmU= 14880\nQmFzZQ== 14881\nIFN0dWRlbnRz 14882\nIFJlcGx5 14883\nIENvbW11bmlzdA== 14884\nIGdhdQ== 14885\nIFR5bGVy 14886\nSVo= 14887\nIHBhcnRpY2lwYXRlZA== 14888\nIHN1cHJlbQ== 14889\nIERldGFpbHM= 14890\nIHZlc3NlbHM= 14891\ncm9k 14892\nIHRyaWJl 14893\na2VlcA== 14894\nIGFzc3VtcHRpb25z 14895\nIHBvdW5k 14896\nIGNydWRl 14897\nIEF2YWlsYWJsZQ== 14898\nIHN3aW1taW5n 14899\nIGluY2x1c2lvbg== 14900\nIGFkdmFuY2Vz 14901\nY3VsYXRpb24= 14902\nIGNvbnNlcnZhdGlvbg== 14903\nIG92ZXJk 14904\nIEJ1ZmZhbG8= 14905\nQXJ0aWNsZQ== 14906\nZWRnZQ== 14907\nIGF3YQ== 14908\nIE1hZGlzb24= 14909\nIHNpZGV3 14910\nIGNhdGFzdA== 14911\nIEtyaXN0 14912\ndWNsZQ== 14913\nIEhpZ2h3YXk= 14914\nIFRlcnJvcg== 14915\nIGFjdGl2YXRpb24= 14916\nIHVuY29uc2Npb3Vz 14917\nIFNhdGFu 14918\nIFN1c2Fu 14919\naWxsZXJ5 14920\nIGFycmFuZ2Vk 14921\naW9w 14922\nIHJ1bW9ycw== 14923\ndXJyaW5n 14924\ndGhpbms= 14925\nIEtlaXRo 14926\nIEtpbmQ= 14927\nIGF2b2lkaW5n 14928\nYnlu 14929\nbnV0 14930\nIFNwZWFrZXI= 14931\ncnVz 14932\nbmFtZXM= 14933\nIGd1aWx0 14934\nIE9seW1waWNz 14935\nIHNhaWw= 14936\nIE1lcw== 14937\nbGV2YW50 14938\nIENvbHVtYnVz 14939\nYWZ0 14940\nQ2l0eQ== 14941\nU291dGg= 14942\nIEhhcnZleQ== 14943\nIFB1bg== 14944\nU2V2ZXJhbA== 14945\nIG1lbnRhbGx5 14946\nIGltcHJlc3M= 14947\nbW91bnQ= 14948\nIFVidW50dQ== 14949\n4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 14950\nIFN1cGVybWFu 14951\nIE1Qcw== 14952\nIGludGVudGlvbnM= 14953\nIFJhY2luZw== 14954\nIGxpa2VsaWhvb2Q= 14955\nIDI0MA== 14956\nVG90YWw= 14957\nIHRveXM= 14958\nIFdhdHNvbg== 14959\nIHVyZ2U= 14960\nTGVhcg== 14961\nIFBhcGVy 14962\nIG9jY3VycmluZw== 14963\nIEJlbmc= 14964\nIENlcnQ= 14965\nIHN0b25lcw== 14966\nVGlt 14967\nIFR3aW4= 14968\nemI= 14969\nIER5bmFt 14970\nIHBvbGl0aWNpYW4= 14971\na2Vucw== 14972\nIEVudGVycHJpc2U= 14973\nVVRFUlM= 14974\nIGFib2w= 14975\nIHJlZnJlc2g= 14976\nIGFyYml0cmFyeQ== 14977\ncGVjdGlvbg== 14978\nIHRyb3VibGVz 14979\nIH0pOw== 14980\ndHY= 14981\nIHBpbG90cw== 14982\nIGRpc3RyaWJ1dGU= 14983\nIGF1ZGl0 14984\nIHBhdXNl 14985\nb3JpZ2luYWw= 14986\nIHJpdmFscw== 14987\nwqM= 14988\nRmln 14989\nVEw= 14990\nYWJpbA== 14991\ncnlpbmc= 14992\nTGlu 14993\naW9uZWQ= 14994\nbG9u 14995\nIGZhbmN5 14996\nIGNyYXNoZWQ= 14997\nIHRyYWN0 14998\nIHNoZWQ= 14999\nIGNvbnN1bWU= 15000\nQmFzZWQ= 15001\nZG93bmxvYWQ= 15002\naW5pdA== 15003\nIHZvbHRhZ2U= 15004\nSW50cm9kdQ== 15005\nIGNvbmRlbW5lZA== 15006\nIEZpbmFuY2U= 15007\ncmVzcGVjdA== 15008\nIGV4Y2x1ZGVk 15009\nIGVzdGFibGlzaGluZw== 15010\naGVyaWM= 15011\nIGhlcml0YWdl 15012\nIHNwZWN0YWN1bGFy 15013\nIHVuc3Q= 15014\nIFNub3dkZW4= 15015\nIExhbmU= 15016\nU2Fu 15017\nIHByb3RlY3Rpb25z 15018\nc3RydWN0aW9u 15019\naW5jaW5u 15020\nIG1hY3Jv 15021\nQ3VzdG9t 15022\naW9zaXR5 15023\nIGVzcA== 15024\nIGZ1bmN0aW9uaW5n 15025\nIG11c2g= 15026\nIHB1enpsZQ== 15027\nIGV0aGljYWw= 15028\nTWFs 15029\nIGdvdmVybmluZw== 15030\nIEZlcmd1c29u 15031\nIHJlc3RvcmVk 15032\nIHN0cmVzc2Vk 15033\nIENvdW50ZXI= 15034\nIEthcw== 15035\nY2xpcA== 15036\nQU5T 15037\nIHNlaXo= 15038\nVUs= 15039\nYnlzcw== 15040\nb2xkb3du 15041\nYXBp 15042\nIHBlcm1hbmVudGx5 15043\nb3VudGVycw== 15044\nV2VzdA== 15045\nVGhyb3VnaA== 15046\nTGlnaHQ= 15047\nYXRvZXM= 15048\nIG5lYXQ= 15049\nIGNvcmQ= 15050\ndXJlcg== 15051\nIHNldmVyZWx5 15052\nIEF2ZW4= 15053\nIGludGVycm9n 15054\nIHRyaXBsZQ== 15055\nR2l2ZW4= 15056\nTnVtYmVy 15057\nIGFyaXNl 15058\nIHNoZXI= 15059\ncGxhbnQ= 15060\nIGZsb3dlcg== 15061\nIENvdQ== 15062\nIGF0ZQ== 15063\nIG5ld2Vy 15064\nYnVs 15065\nIG1lYW53aGlsZQ== 15066\nIExhaXI= 15067\nIGFkanVzdG1lbnQ= 15068\nIENvcHlyaWdodA== 15069\nIGRpdmVycw== 15070\naW9sb2dpY2Fs 15071\nIGdhbWVycw== 15072\nb2F0 15073\nIGhpc3RvcmljYWxseQ== 15074\nIGFuYWxvZw== 15075\nIGxvbmd0aW1l 15076\nIHByZXNjcmlwdGlvbg== 15077\nIE1pc3Q= 15078\nIEh5cGVy 15079\nIE1haW5l 15080\nIERlaXR5 15081\nIG11bHRpcGw= 15082\nIFJlaW5jYXJu 15083\nIEh5ZA== 15084\nIFBpYw== 15085\nU2ls 15086\ncmFudHM= 15087\nIENyaXM= 15088\nLjs= 15089\nKHs= 15090\nZXBlbmRlbmNl 15091\nIHJlY3k= 15092\nYXRldXI= 15093\nIHF1YWQ= 15094\nIGdsb2I= 15095\nIGNvbmNlZA== 15096\ndGVhbQ== 15097\nIGNhcGl0YWxpc3Q= 15098\nIExvdA== 15099\nIHJveWFs 15100\nIEN5YmVy 15101\nIGJsYWNrcw== 15102\nbWV0aWM= 15103\ncml2 15104\nIERhbm55 15105\nIHNwbw== 15106\nIFJP 15107\nIGFuaW1hdGVk 15108\ncnlwdGVk 15109\nIERlcHV0eQ== 15110\nIHJlbmRlcmVk 15111\nRkU= 15112\nIHN0cmVhaw== 15113\nIGNsb3Vkcw== 15114\nIERvdWc= 15115\nfn5+fn5+fn4= 15116\nIGRpc2NvdXI= 15117\nIFZlaA== 15118\nIHBzeWNob2xvZ3k= 15119\nIEpvdXJuZXk= 15120\nIGNyeXN0YWw= 15121\nIEZyb3N0 15122\nIHN1c3BpY2lvbg== 15123\nIHJlbGF0ZQ== 15124\nb3J1cw== 15125\nIENyeXB0 15126\nIE5WSURJQQ== 15127\nY29tZWQ= 15128\ndXRpbmc= 15129\naW5jaW5uYXRp 15130\nIHZ1bG5lcmFiaWxpdHk= 15131\nb3N0aWM= 15132\nIGlzb2xhdGlvbg== 15133\nIGNvb2xpbmc= 15134\nIENvYWxpdGlvbg== 15135\nIDExOQ== 15136\nRm91cg== 15137\nIERlYWw= 15138\nIOKJ 15139\nc2VtYmxl 15140\ncmFtZW50 15141\nIEJhcmNlbG9uYQ== 15142\nIDEwMg== 15143\nIGNvY2FpbmU= 15144\nb2NhbHlwc2U= 15145\nRmVi 15146\nb2dlbmlj 15147\nIG11dGF0aW9u 15148\nIGNyeXB0b2M= 15149\nIEtlbA== 15150\nIEdpdA== 15151\nYWlz 15152\nIHNpc3RlcnM= 15153\nQU5L 15154\nIGFjdGl2YXRl 15155\nVGVy 15156\nIGRyZWFk 15157\neWxvbg== 15158\nIHByb3ByaQ== 15159\nQXVzdA== 15160\nIERlZmF1bHQ= 15161\nIG91dGRvb3I= 15162\nIHNoZWVy 15163\nY2VpdmU= 15164\nIGdlbnRseQ== 15165\n0L4= 15166\nUHJvZ3JhbQ== 15167\nIOKGkg== 15168\nIHZlZ2Fu 15169\nIENydXM= 15170\nIHJlc3BvbnNpYmlsaXRpZXM= 15171\nIEhS 15172\nT0xE 15173\nIHByZXZlbnRz 15174\nIHN0aWZm 15175\nIFdlcmU= 15176\nIGF0aGxldGlj 15177\nIFNjb3Jl 15178\nICk6 15179\nIGNvbHVtbnM= 15180\nIExvYw== 15181\nYXZhaWxhYmxl 15182\nIEZyYW0= 15183\nIFNlc3Npb25z 15184\nIGNvbXBhbmlvbg== 15185\nIHBhY2tz 15186\nMTQw 15187\nIEtuaWdodHM= 15188\nIGZhcnQ= 15189\nIHN0cmVhbXM= 15190\nIHNob3Jl 15191\nIGFwcGVhbHM= 15192\nIFBlcmZvcm1hbmNl 15193\naGF1bA== 15194\nIFN0cmE= 15195\nIE5hZw== 15196\nMTAz 15197\nIFRyYW5zcG9ydGF0aW9u 15198\nQkI= 15199\nRXY= 15200\nemFu 15201\nUHVibGlj 15202\nIHR3aW4= 15203\ndWxzaW9u 15204\nTXVsdA== 15205\nIGVsZWN0cm8= 15206\nIHN0YXR1ZQ== 15207\nYXRpb25hbGx5 15208\nIE5vcnQ= 15209\nIGluc3BlY3Rpb24= 15210\nLyo= 15211\naWd1ZQ== 15212\nIGNvbXBhc3Npb24= 15213\nIFRhbGVz 15214\nIFN0ZWlu 15215\nIFNjcmVlbg== 15216\nIEJ1Zw== 15217\nIExpb24= 15218\nZ2lybA== 15219\nIHdpdGhkcmF3YWw= 15220\nIG9iamVjdGl2ZXM= 15221\nIGJsb29keQ== 15222\nIHByZWxpbWluYXJ5 15223\nIGphY2tldA== 15224\nIGRpbWVuc2lvbnM= 15225\nIENvb2w= 15226\nIE9jY3Vw 15227\nIHdyZWNr 15228\nIGRvdWJsZWQ= 15229\nYW5raW5n 15230\nIDE5NzU= 15231\nIGdsYXNzZXM= 15232\nIFdhbmc= 15233\ncHJvdg== 15234\nUGF0aA== 15235\nY29ubmVjdGVk 15236\nIE11bHRp 15237\nIE5vcndheQ== 15238\nYWdvbmlzdA== 15239\nIGZlYXJlZA== 15240\nIHRvdWNoaW5n 15241\nIGFyZ3VhYmx5 15242\nwq/Cr8Kvwq/Cr8Kvwq/Crw== 15243\nIE5DQUE= 15244\nY2hlbQ== 15245\nIHNwYXQ= 15246\nIFdXRQ== 15247\nIENlbA== 15248\naWdnZXI= 15249\nIGF0dGFja2Vy 15250\nIEpvaW4= 15251\nb2JqZWN0 15252\nZXR0YQ== 15253\nIGVsaW1pbmF0ZWQ= 15254\nZGV0 15255\nIGRlc3RydWN0 15256\nIEx1Y2Fz 15257\nY3R1YXJ5 15258\nMTgw 15259\nIEJyYWR5 15260\nIEJsdWVz 15261\nQmF5 15262\nYXVrZWU= 15263\nIHRpbWVsaW5l 15264\nIGRlbGVnYXRlcw== 15265\nd3JpdHRlbg== 15266\ndWZmaWNpZW50 15267\nIHNoYXBlcw== 15268\nQ29weXJpZ2h0 15269\nb3VibGU= 15270\nc2VydmljZQ== 15271\nIHBpb25l 15272\nIGNvbGxlZ2Vz 15273\nIHJvd3M= 15274\nIHNwaXRl 15275\nIGFzc2Vzc2Vk 15276\nMzYw 15277\nIGxlYXNl 15278\nIGNvbmZpZGVudGlhbA== 15279\nY2tlcg== 15280\nIE1hbm5pbmc= 15281\nIFZvaWNl 15282\nIHNlYWxlZA== 15283\nIGNhbGN1bGF0ZQ== 15284\nTk8= 15285\nIEFzc2lzdGFudA== 15286\nIHRlZW5hZ2Vy 15287\ndWxlbnQ= 15288\nYXRoZXJpbmU= 15289\nIG1vY2s= 15290\nIGRpYW1vbmQ= 15291\nIGZlc3Q= 15292\nIHN3aXRjaGVk 15293\nIHJlc3VtZQ== 15294\nIFB1ZXJ0bw== 15295\nIGxhbmVz 15296\naXJhdGlvbg== 15297\nIFNpbWlsYXJseQ== 15298\nIHJvZA== 15299\nIFNlbA== 15300\nIFBhbGFjZQ== 15301\nIExpbWl0ZWQ= 15302\nZW91cw== 15303\nIHZhcmlhbnQ= 15304\nIHdhcmQ= 15305\nICkp 15306\nU2hvdw== 15307\nT09L 15308\nQWxleA== 15309\nIE5lcA== 15310\nYnJpcw== 15311\nIFdpa2lwZWRpYQ== 15312\nIGV4Y2VwdGlvbmFs 15313\nIG1hbmFnZXM= 15314\nIERyYXc= 15315\nQWdhaW4= 15316\nIGNvcHBlcg== 15317\ndXR0 15318\nIGV4cG9ydHM= 15319\nIHBvcnRmb2xpbw== 15320\nIGVsZXZhdGVk 15321\nUmF0ZWQ= 15322\nIE90aGVyd2lzZQ== 15323\nIFRhY3Q= 15324\nIFNoZWw= 15325\nIFRY 15326\nIuKAlA== 15327\nIHJlc3Vy 15328\nIFdh 15329\ndmVuYW50 15330\nIG1vbmV0YXJ5 15331\ncGVvcGxl 15332\nRW1haWw= 15333\nIGZpZnR5 15334\nIFN3ZWV0 15335\nIE1hbGF5c2lh 15336\nIGNvbmZ1c2luZw== 15337\nIFJpbw== 15338\ndWRh 15339\ndXRlbmFudA== 15340\nIik7 15341\nIHByYWlzZWQ= 15342\nIHZvbHVtZXM= 15343\ndHVybg== 15344\nIG1hdHVyZQ== 15345\nIG5vbnByb2ZpdA== 15346\nIHBhc3Npb25hdGU= 15347\nIFByaXZhdGU= 15348\nIDEwMw== 15349\nIGRlc2NlbmQ= 15350\n56We 15351\ndWZmeQ== 15352\naGVhZGVk 15353\nV2hldGhlcg== 15354\ncmllbg== 15355\nemVjaA== 15356\nYmVpdA== 15357\nIGNocm9t 15358\nIE1jTQ== 15359\nIGRhbmNpbmc= 15360\nIGVsZWc= 15361\nIE5vdGljZWQ= 15362\nMTE1 15363\nIGFkdm9jYWN5 15364\nRU5UUw== 15365\nYW1ibGluZw== 15366\nIE1pbm9y 15367\nIEZpbm4= 15368\nIHByaW9yaXRpZXM= 15369\nIHRoZXJlb2Y= 15370\nIFN0YWdl 15371\nIFJvZ2Vycw== 15372\nIHN1YnN0aXR1dGU= 15373\nIEphcg== 15374\nIEplZmZlcnNvbg== 15375\nIGxpZ2h0bHk= 15376\nMTAy 15377\nIExpc2E= 15378\ndWl0cw== 15379\neXNpY2Fs 15380\nIHNoaWZ0cw== 15381\nIGRyb25lcw== 15382\nIHdvcmtwbGFjZQ== 15383\nIHJlc2lk 15384\nZW5zZWQ= 15385\nYWhu 15386\nIHByZWZlcmVuY2Vz 15387\nc2VydmVy 15388\nIGRlYmF0ZXM= 15389\nZG9j 15390\nIEdvZHM= 15391\nIGhlbGljb3B0ZXI= 15392\nIGhvbm91cg== 15393\nIGNvbnNpZGVyYWJseQ== 15394\nZWRlZA== 15395\nIEZlbWFsZQ== 15396\nIEFubmU= 15397\nIHJldW4= 15398\nIEZhY2U= 15399\nIEhhbGxvdw== 15400\nIEJ1ZGdldA== 15401\nIGNvbmRlbW4= 15402\nIHRlbmRlcg== 15403\nUHJvZg== 15404\nb2NyYXRpYw== 15405\nIFR1cm5lcg== 15406\nIEFncmlj 15407\nIDE5NzY= 15408\nIGFwdA== 15409\nZGlzYw== 15410\nIEZpZ2h0ZXI= 15411\nIEF1cg== 15412\nIGdhcmJhZ2U= 15413\naW5wdXQ= 15414\nIEthcmw= 15415\nIE9saXZlcg== 15416\nIExhbmd1YWdl 15417\na24= 15418\nTm9u 15419\nIENsYXI= 15420\nIHRyYWRpdGlvbnM= 15421\nIGFkdmVydGlzZW1lbnQ= 15422\nIFNvcg== 15423\nIGFyY2hpdmU= 15424\nIHZpbGxhZ2Vz 15425\nNzUw 15426\nIGltcGxlbWVudGluZw== 15427\nd2F1a2Vl 15428\nIGRpZXRhcnk= 15429\nIHN3aXRjaGluZw== 15430\nUmVwdWJsaWM= 15431\nIHZlbG9jaXR5 15432\nIGNpdA== 15433\nIEF3YXJkcw== 15434\nIGZpbmFuY2luZw== 15435\nIGxhc3RlZA== 15436\nKV0= 15437\nIHJlbWluZGVy 15438\nUGVyc29u 15439\nIHByZWNpc2lvbg== 15440\nIGRlc2lnbmVycw== 15441\nIEZyaWVk 15442\nIEJvcmRlcg== 15443\nIHRyYWdpYw== 15444\nIHdpZWxk 15445\nIGluaXRpYXRpdmVz 15446\nIFRhbms= 15447\nd2Vy 15448\nIGpvaW5z 15449\nUm8= 15450\naW5lcnk= 15451\nIGFycm93 15452\nIGdlbmVyYXRpbmc= 15453\nZm91bmRlcg== 15454\nIHNlYXJjaGVz 15455\nIHJhbmRvbWx5 15456\nQWNjZXNz 15457\nIGJhdGNo 15458\nIHBvc2Vk 15459\nbGF0 15460\nIHB1cnN1aW5n 15461\nYXNh 15462\nIHRlc3RpZmllZA== 15463\nZm9ybWluZw== 15464\nIFNoYXI= 15465\nd2lraQ== 15466\nIEVpdGhlcg== 15467\nU29tZXRpbWVz 15468\nIHNlbmF0b3Jz 15469\nIEpvaG5ueQ== 15470\nIFRhbGliYW4= 15471\nIEdQUw== 15472\nIjoiLw== 15473\n44Gu5Q== 15474\nIGFuYWx5emVk 15475\nIFJ1Ymlv 15476\nIE1vdmVtZW50 15477\nb3BhcmQ= 15478\naWlp 15479\nU3RhbmQ= 15480\nZmlnaHQ= 15481\nIGlnbm9yaW5n 15482\naWFuZw== 15483\nIEdO 15484\nc29ldmVy 15485\nIFNUQVQ= 15486\nIHJlZnVzaW5n 15487\nIHN3ZWF0 15488\nIGJheQ== 15489\nUE9SVA== 15490\naXJtZWQ= 15491\nYWt5 15492\nIGRpc3Bybw== 15493\nIGxhYmVsZWQ= 15494\nIDEwOA== 15495\nSGVsbG8= 15496\nIHBsZWFzYW50 15497\nYWJh 15498\nIHRyaXVtcGg= 15499\nIGFib2FyZA== 15500\nIGluY29t 15501\nIENyb3c= 15502\nbGV0dA== 15503\nIGZvbGs= 15504\nIGNoYXNl 15505\nYGA= 15506\nIEJydXM= 15507\nIHRlZW5z 15508\nY3Vl 15509\nIHRlcnJhaW4= 15510\naHlk 15511\naWxpZ2h0 15512\nT1JZ 15513\nU3VwcG9ydA== 15514\nZXdz 15515\nbGxp 15516\ncmFpbnRz 15517\nIENhbmQ= 15518\nIGFidXNlZA== 15519\nYWNobWVudA== 15520\nbGFyZw== 15521\nQmFz 15522\nIENhbmNlcg== 15523\nIDE5Nzg= 15524\nIHN1cHBvcnRlcg== 15525\nYWNjZXNz 15526\nIFRlcm1pbg== 15527\nIFRhbXBh 15528\nIEFOWQ== 15529\nIG5ld2VzdA== 15530\nIENyaW1pbmFs 15531\nZWR1 15532\nIDE5MzA= 15533\nIGFkbWl0cw== 15534\nIGVuZGU= 15535\nIGZhaWx1cmVz 15536\ndXJhdGU= 15537\nZnVsbmVzcw== 15538\nY3ljbA== 15539\nIFN1YmplY3Q= 15540\nIGluZmluaXRl 15541\ndGhyZWU= 15542\nV0E= 15543\ncGl0 15544\nIEluc3RhbGw= 15545\nUmFk 15546\naWxpYXRpb24= 15547\nR00= 15548\nIGNvbnRpbmVudA== 15549\nIGFjY29tbW9kYXRl 15550\nIENsYXk= 15551\nIHB1cA== 15552\nIEZ1bmN0aW9u 15553\nIGhhbW1lcg== 15554\nIEFsYmVydGE= 15555\nIHJldmlzZWQ= 15556\nIG1pbm9yaXRpZXM= 15557\nIG1lYXN1cmVtZW50 15558\nQ29ubmVsbA== 15559\nIGRpc2FibGU= 15560\nIE1peA== 15561\nSW5jcmU= 15562\nIGZvcms= 15563\nIFJvc2Vu 15564\nIGltcGxpZXM= 15565\ndW1ibHI= 15566\nQU5H 15567\nIHByb3RlaW5z 15568\nIGFnZ3Jlc3Npb24= 15569\nIGZhY2lsaXRhdGU= 15570\nU04= 15571\nIGlsbGVnYWxseQ== 15572\ndWVy 15573\nIGFjYWRlbQ== 15574\nIHB1eno= 15575\nIFNoaWZ0 15576\ncGF5 15577\nb2xsbw== 15578\nIGF1ZGllbmNlcw== 15579\nQnVpbGQ= 15580\nIG5vYmxl 15581\nIHN5bnRheA== 15582\n4piF 15583\nIGJlYW0= 15584\nIEJlZA== 15585\nIEFsZA== 15586\nIG9yaWdpbnM= 15587\ndmlkZW8= 15588\nIDE5Nzc= 15589\nIEFzc2F1bHQ= 15590\nIGdhcmFnZQ== 15591\nVGVhbQ== 15592\nIHZlcmRpY3Q= 15593\nIGR3YXI= 15594\nIFZpcnR1YWw= 15595\nZXZlbnQ= 15596\nS2VlcA== 15597\nIHNlbnRpbWVudA== 15598\nIHdpbGRsaWZl 15599\nc2hpcnQ= 15600\nIGJ1cmc= 15601\nIHJlY29tbWVuZGF0aW9u 15602\ncmVwcmVzZW50 15603\nIGdhbGxlcnk= 15604\nb3duZXJz 15605\nIHNjaG9sYXI= 15606\nIGNvbnZlbmllbmNl 15607\nIFN3aWZ0 15608\nIGNvbnZpbmM= 15609\nQ2Fw 15610\nIHdhcmZhcmU= 15611\nIFZpc3VhbA== 15612\nIGNvbnN0aXR1dGU= 15613\nIGFib3J0 15614\nIFdlYXRoZXI= 15615\nIExvb2tpbmc= 15616\nIEhlbQ== 15617\nIG1hcnRpYWw= 15618\nIGluY29taW5n 15619\nZXRpdGlvbg== 15620\nIHRvbGVyYW5jZQ== 15621\nIENyZWF0ZWQ= 15622\nIGZsb3dz 15623\nIEVsZGVy 15624\nIHNvdWxz 15625\nIGZvdWw= 15626\nIFBhaW4= 15627\nIENBTg== 15628\nIDIyMA== 15629\nYmM= 15630\naGVuZA== 15631\nIGdlbml1cw== 15632\nUmVhbA== 15633\nIFdy 15634\nb21ldGVy 15635\ncGFk 15636\nIGxpbWl0aW5n 15637\nIFNp 15638\nIExvcmU= 15639\nIEFkdmVudHVyZXM= 15640\nIHZhcmllZA== 15641\nRGlzYw== 15642\nZmlu 15643\nIFBlcnNvbmFs 15644\nQ2hyaXM= 15645\nIGludmVudGVk 15646\nIGRpdmU= 15647\nIFJpc2U= 15648\nIG96 15649\nIENvbWljcw== 15650\nIGV4cG9zZQ== 15651\nIFJlYg== 15652\nbGV0dGVycw== 15653\nc2l0ZQ== 15654\naW1hdGVk 15655\nIGhhY2tpbmc= 15656\nIGVkdWNhdGVk 15657\nIE5vYm9keQ== 15658\nIGRlcHJp 15659\nIGluY2VudGl2ZQ== 15660\n44K3 15661\nIG92ZXJzaWdodA== 15662\nIHRyaWJlcw== 15663\nIEJlbGdpdW0= 15664\nIGxpY2Vuc2luZw== 15665\nb3VydA== 15666\nUHJvZHVjdA== 15667\nYWhs 15668\nIEdlbQ== 15669\nIHNwZWNpYWxpc3Q= 15670\nIGNyYQ== 15671\nYW5uZXJz 15672\nIENvcmJ5bg== 15673\nIDE5NzM= 15674\nUkVBRA== 15675\nIHN1bW1hcg== 15676\nIG92ZXJsb29r 15677\nIEFwcGxpY2F0aW9u 15678\nIGluYXBwcm9wcmlhdGU= 15679\nIGRvd25sb2FkZWQ= 15680\nUXVl 15681\nIEJlYXJz 15682\nIHRodW1i 15683\nIENoYXJhY3Rlcg== 15684\nIFJlaW5jYXJuYXRlZA== 15685\nIFNpZA== 15686\nIGRlbW9uc3RyYXRlcw== 15687\nc2t5 15688\nIEJsb29tYmVyZw== 15689\nIEFycmF5 15690\nIFJlc3VsdHM= 15691\nIEZvdXJ0aA== 15692\nIEVEVA== 15693\nIE9zY2Fy 15694\nY2VuZA== 15695\nIDEwNg== 15696\nIE5VTEw= 15697\nIEhFUkU= 15698\nbWF0Y2g= 15699\nIEJydW4= 15700\nIGdsdWNvc2U= 15701\naWVn 15702\nZWd1 15703\nIGNlcnRpZmllZA== 15704\nIHJlbGll 15705\nIGh1bWFuaXRhcmlhbg== 15706\nIHByYXllcnM= 15707\nS2luZw== 15708\nIG5hbg== 15709\naG91 15710\nMTA4 15711\ndWx1 15712\nIHJlbmV3YWJsZQ== 15713\nIGRpc3Rpbmd1aXNo 15714\nIGRlbnNl 15715\nIFZlbnQ= 15716\nIFBhY2thZ2U= 15717\nIEJvc3M= 15718\nIGVkaXRvcnM= 15719\nIG1pZ3I= 15720\nVHJh 15721\nIFBldGVycw== 15722\nIEFyY3RpYw== 15723\nMjAwNA== 15724\nIENhcGU= 15725\nIGxvY2FsbHk= 15726\nIGxhc3Rpbmc= 15727\nIGhhbmR5 15728\nLiku 15729\nUGFu 15730\nIFJFUw== 15731\nSW5kZXg= 15732\nIHRlbnNpb25z 15733\nIGZvcm1lcmx5 15734\nIGlkZW9sb2dpY2Fs 15735\nIHNlbnNvcnM= 15736\nIGRlYWxlcnM= 15737\nIGRlZmluZXM= 15738\nU2s= 15739\nIHByb2NlZWRz 15740\nIHByb3h5 15741\nYXppbmVz 15742\nIEJhc2g= 15743\nIFBhZA== 15744\nIENyYWZ0 15745\nZWFsb3Vz 15746\nIHNoZWV0cw== 15747\nb21ldHJ5 15748\nSnVuZQ== 15749\nY2xvY2s= 15750\nVFQ= 15751\nIFRoZWF0cmU= 15752\nIEJ1eno= 15753\nIGNoYXB0ZXJz 15754\nIG1pbGxlbm4= 15755\nIGRvdWdo 15756\nIENvbmdyZXNzaW9uYWw= 15757\nIGltYWdpbmVk 15758\nYXZpb3I= 15759\nIGNsaW5pYw== 15760\nIDE5NDU= 15761\nIGhvbGRlcg== 15762\ncm9vdA== 15763\nb2xlc3Rlcg== 15764\nIHJlc3RhcnQ= 15765\nQk4= 15766\nIEhhbWFz 15767\nIEpvYg== 15768\nIG9yYg== 15769\nIHJhbQ== 15770\nIGRpc2Nsb3Nl 15771\nIHRyYW5zbGF0ZQ== 15772\nIGltbWlncmFudA== 15773\nIGFubm95aW5n 15774\nIHRyZWF0eQ== 15775\nYW5pdW0= 15776\nIFRlYQ== 15777\nIExlZ2lvbg== 15778\nIGNyb3dkcw== 15779\nIEJlYw== 15780\nIEFlcg== 15781\nb2h5ZA== 15782\nQnJv 15783\nTG9va2luZw== 15784\nIGxicw== 15785\nIGFnZ3Jlc3M= 15786\nIHNlYW0= 15787\nIGludGVyY2VwdA== 15788\nIE1J 15789\nbWVyY2lhbA== 15790\nYWN0aXY= 15791\nIENpdA== 15792\nIGRpbWVuc2lvbg== 15793\nIGNvbnNpc3RlbmN5 15794\nIHJ1c2hpbmc= 15795\nIERvdWdsYXM= 15796\nIHRyaW0= 15797\nSW5zdGFsbA== 15798\naWNrZXI= 15799\nIHNoeQ== 15800\nMTA2 15801\nIG1lbnRpb25z 15802\ncGVsbGVk 15803\nIFRhaw== 15804\nY29zdA== 15805\nIGNsYXNzcm9vbQ== 15806\nIGZvcnR1bmU= 15807\nZHJpdmVu 15808\nIHVubGU= 15809\nIFdoZWVs 15810\nIGludmVzdG9y 15811\nIE1hc3RlcnM= 15812\na2l0 15813\nIGFzc29jaWF0aW9ucw== 15814\nIEV2b2x1dGlvbg== 15815\nb3Bpbmc= 15816\ndXNjcmlwdA== 15817\nIHByb3ZpbmNpYWw= 15818\nIFdhbHRlcg== 15819\nYXZp 15820\nU08= 15821\nIHVubGltaXRlZA== 15822\nRW5nbGlzaA== 15823\nIENhcmRz 15824\nIEVib2xh 15825\nbmVyZWQ= 15826\nIHJldmVuZ2U= 15827\nIG91dHJpZ2h0 15828\ndW1wZXI= 15829\nIGZpdHRpbmc= 15830\nIFNvbGlk 15831\nIGZvcm1hbGx5 15832\nIHByb2JsZW1hdGlj 15833\nIGhhemFyZA== 15834\nIGVuY3J5cHRpb24= 15835\nIHN0cmFpZ2h0Zm9yd2FyZA== 15836\nIEFL 15837\nIHBzZQ== 15838\nIE9yYg== 15839\nIENoYW1iZXI= 15840\nIE1haw== 15841\nQ29udGVudHM= 15842\nIGxveWFsdHk= 15843\nIGx5cmljcw== 15844\nIFN5bQ== 15845\nIHdlbGNvbWVk 15846\nIGNvb2tlZA== 15847\nIG1vbm9w 15848\nIG51cnNl 15849\nIG1pc2xlYWRpbmc= 15850\nIGV0ZXJuYWw= 15851\nIHNoaWZ0aW5n 15852\nICs9 15853\nVmlz 15854\nIGluc3RpdHV0aW9uYWw= 15855\naWxsYXJ5 15856\nIHBhbnQ= 15857\nVkVSVA== 15858\nIEFDQw== 15859\nIEVuaA== 15860\nIGluY29u 15861\nIFJFVVRFUlM= 15862\nIGRvbmF0ZWQ= 15863\n4oCm4oCm4oCm4oCm 15864\nSW50ZXJu 15865\nIGV4aGliaXQ= 15866\nIHRpcmU= 15867\nIFJpYw== 15868\nIENoYW1waW9u 15869\nIE11aGFtbWFk 15870\nTklORw== 15871\nIFNvY2Nlcg== 15872\nIG1vYmlsaXR5 15873\nIHZhcnlpbmc= 15874\nIE1vdmll 15875\nIGxvcmQ= 15876\nb2Fr 15877\nRmllbGQ= 15878\nIHZlY3Rvcg== 15879\ndXNpb25z 15880\nIHNjcmFw 15881\nIGVuYWJsaW5n 15882\nbWFrZQ== 15883\nVG9y 15884\nLio= 15885\nfHw= 15886\nIFdlYnNpdGU= 15887\nIE5QQw== 15888\nIHNvY2lhbGlzdA== 15889\nIEJpbGx5 15890\nIEFkZGl0aW9uYWw= 15891\nIGNhcmdv 15892\nIGZhcm1z 15893\nIFNvb24= 15894\nIFByaXpl 15895\nIG1pZG5pZ2h0 15896\nIDkwMA== 15897\nc2Vlbg== 15898\nIFNwb3Q= 15899\nIHNoZWVw 15900\nIHNwb25zb3JlZA== 15901\nIEhp 15902\nIEp1bXA= 15903\nIDE5Njc= 15904\nTWljcm9zb2Z0 15905\nIEFnZW50 15906\nIGNoYXJ0cw== 15907\nZGly 15908\nIGFkamFjZW50 15909\nIHRyaWNrcw== 15910\nIG1hbmdh 15911\nIGV4YWdnZXI= 15912\nLz4= 15913\nZm9vdGJhbGw= 15914\nIEZDQw== 15915\nR0M= 15916\nIFRpZXI= 15917\nYW5kcmE= 15918\nT1VORA== 15919\nJSks 15920\nIGZydWl0cw== 15921\nVkM= 15922\nIEFB 15923\nUm9iZXI= 15924\nIG1pZHN0 15925\n4pc= 15926\nYW5rYQ== 15927\nIGxlZ2lzbGF0dXJl 15928\nIE5laWw= 15929\nIHRvdXJpc3Rz 15930\nIiI= 15931\nIFdhcm5pbmc= 15932\nIE5ldmVydGhlbGVzcw== 15933\nIE9mZmljaWFs 15934\nIFdoYXRldmVy 15935\nIG1vbGQ= 15936\nIGRyYWZ0ZWQ= 15937\nIHN1YnN0YW5jZXM= 15938\nIGJyZWVk 15939\nIHRhZ3M= 15940\nIFRhc2s= 15941\nIHZlcmI= 15942\nIG1hbnVmYWN0dXJlZA== 15943\nY29tbWVudHM= 15944\nIFBvbGlzaA== 15945\nUHJvdg== 15946\nIGRldGVybWluZXM= 15947\nT2JhbWE= 15948\na2Vycw== 15949\nIHV0dGVybHk= 15950\nIHNlY3Q= 15951\nc2NoZQ== 15952\nIEdhdGVz 15953\nIENoYXA= 15954\nIGFsdW1pbnVt 15955\nIHpvbWJpZQ== 15956\nIFRvdWNo 15957\nIFVQ 15958\nIHNhdGlzZnk= 15959\nIHByZWRvbWlu 15960\nYXNjcmlwdA== 15961\nIGVsYWJvcmF0ZQ== 15962\nIDE5Njg= 15963\nIG1lYXN1cmluZw== 15964\nIFZhcmk= 15965\nYW55YWh1 15966\nIHNpcg== 15967\ndWxhdGVz 15968\naWRnZXM= 15969\naWNrZXRz 15970\nIFNwZW5jZXI= 15971\nVE0= 15972\nb3VidGVk 15973\nIHByZXk= 15974\nIGluc3RhbGxpbmc= 15975\nIENhYg== 15976\ncmVlZA== 15977\ncmVhdGVk 15978\nU3VwcA== 15979\nIHdyaXN0 15980\nIEtlcnJ5 15981\nMTA3 15982\nIEtsZQ== 15983\nIFJhY2hlbA== 15984\nIGNvdHRvbg== 15985\nIEFSRQ== 15986\nIEVsZQ== 15987\nQ29udHJvbA== 15988\nIGxvYWRz 15989\nIERvZA== 15990\nYW5hcw== 15991\nYm9uZQ== 15992\nIGNsYXNzaWNhbA== 15993\nIFJlZ2lvbmFs 15994\nIEludGVn 15995\nVk0= 15996\nIGRlc2lyZXM= 15997\nIGF1dGlzbQ== 15998\nc3VwcG9ydGVk 15999\nIE1lc3NhZ2U= 16000\nIGNvbXBhY3Q= 16001\nd3JpdGVy 16002\nIDEwOQ== 16003\nIEh1cnJpY2FuZQ== 16004\nY2lzaW9u 16005\nIGN5Y2xlcw== 16006\nIGRyaWxs 16007\nIGNvbGxlYWd1ZQ== 16008\nIG1ha2Vy 16009\nR2VybWFu 16010\nIG1pc3Rha2Vu 16011\nU3Vu 16012\nIEdheQ== 16013\nIHdoYXRzb2V2ZXI= 16014\nIHNlbGxz 16015\nIEFpcmw= 16016\nbGl2 16017\nIE9wdGlvbg== 16018\nIHNvbHZlZA== 16019\nIHNlY3RvcnM= 16020\nIGhvcml6b250YWw= 16021\nIGVxdWF0aW9u 16022\nIFNraWxs 16023\nIEJpbw== 16024\nZ2VtZW50 16025\nIFNuYXA= 16026\nIExlZ2Fs 16027\nIHRyYWRlbWFyaw== 16028\nIG1ha2V1cA== 16029\nIGFzc2VtYmxlZA== 16030\nIHNhdmVz 16031\nIEhhbGxvd2Vlbg== 16032\nIFZlcm1vbnQ= 16033\nIEZST00= 16034\nIGZhcm1pbmc= 16035\nIFBvZGNhc3Q= 16036\nYWNjZXB0YWJsZQ== 16037\nIEhpZ2hlcg== 16038\nIGFzbGVlcA== 16039\ndWxsaXZhbg== 16040\nIHJlZmVyZW4= 16041\nIExldg== 16042\nIGJ1bGxldHM= 16043\nb2tv 16044\nSEM= 16045\nIHN0YWlycw== 16046\nIG1haW50YWlucw== 16047\nIExvd2Vy 16048\nIFZp 16049\nIG1hcmluZQ== 16050\nIGFjcmVz 16051\nIGNvb3JkaW5hdG9y 16052\nIEpvaA== 16053\nIGNvdW50ZXJwYXJ0cw== 16054\nIEJyb3RoZXJz 16055\nIGluZGljdA== 16056\nYnJh 16057\nIGNodW5r 16058\nIGNlbnRz 16059\nSG9tZQ== 16060\nIE1vbnRo 16061\nIGFjY29yZGluZ2x5 16062\naWZsZXM= 16063\nIEdlcm1hbnM= 16064\nIFN5bg== 16065\nSHVi 16066\nIGV5ZWI= 16067\n4pSA4pSA4pSA4pSA 16068\nIHJhbmdlcw== 16069\nIEhvbGxhbmQ= 16070\nIFJvYm90 16071\nZmM= 16072\nTWlrZQ== 16073\nIHBsYXNtYQ== 16074\nIHN3YXA= 16075\nIGF0aGxldGU= 16076\nIFJhbXM= 16077\nLCci 16078\nIGluZmVjdGlvbnM= 16079\nIGNvcnJpZA== 16080\nIHZpYg== 16081\nIHBhdGNoZXM= 16082\nIHRyYWRpdGlvbmFsbHk= 16083\nIHJldmVsYXRpb24= 16084\nIHN3ZWVw 16085\nIGdsYW5jZQ== 16086\nIGluZXg= 16087\nMjAwMw== 16088\nIFJhdw== 16089\nd29ya2luZw== 16090\nb3N1cmVz 16091\nIERhdA== 16092\nIEx5bmNo 16093\nIGxldmVyYWdl 16094\nIFJlaWQ= 16095\nIGNvcnJlbGF0aW9u 16096\naWFuY2Vz 16097\nYXZhc2NyaXB0 16098\nIHJlcG9zaXRvcnk= 16099\ncmV0dHk= 16100\nIDE5NzI= 16101\nMjQw 16102\nIG91bg== 16103\ncG9s 16104\nIFJlZWQ= 16105\nIHRhY3RpY2Fs 16106\naXNpdGU= 16107\nQXBwbGU= 16108\nIFF1aW5u 16109\nIHJhcGVk 16110\naWxsbw== 16111\nRXVyb3Bl 16112\nIGFsZ29yaXRobXM= 16113\nIFJvZHJpZw== 16114\naXU= 16115\nIGlsbHVt 16116\nIGZhbWU= 16117\nIGludHJvZHVjaW5n 16118\nIGRlbGF5cw== 16119\nIFJhaWRlcnM= 16120\nIHdoaXN0bGU= 16121\nIG5vdmVscw== 16122\nIFJlYWxseQ== 16123\nIGRlcml2 16124\nIHB1YmxpY2F0aW9ucw== 16125\nIE5laXRoZXI= 16126\nIENvbW1lcmNl 16127\nIGFzdG9u 16128\nbGFuZ3VhZ2U= 16129\nTm90ZXM= 16130\nIFJvdGg= 16131\nIEZlYXI= 16132\nIG1hdGU= 16133\nIHBhcmFkZQ== 16134\nIFFC 16135\nIG1hbmV1 16136\nIENpbmNpbm5hdGk= 16137\nbWl0dGluZw== 16138\nIHdhaXN0 16139\nIFJldw== 16140\nIGRpc2NvbnQ= 16141\n0LA= 16142\nIHN0YXJpbmc= 16143\nIGFsaWFz 16144\nIHNlY3VyaXRpZXM= 16145\nIHRvaWxldA== 16146\nIEplZGk= 16147\nIHVubGF3 16148\ndmlzZWQ= 16149\nLy8vLy8vLy8= 16150\nXSg= 16151\nIFdlaXNz 16152\nIHByZXN0 16153\nIENvbXBhbg== 16154\nIG1lbW8= 16155\nIEdyYWNl 16156\nSnVseQ== 16157\nIEVsaXRl 16158\nY2VudGVy 16159\nIFN0YXk= 16160\nIGdhbGF4eQ== 16161\nIHRvb3Ro 16162\nIFNldHRpbmdz 16163\nIHN1YmplY3RlZA== 16164\n44Km 16165\nIGxpbmViYWNr 16166\nIHJldGFpbGVycw== 16167\nIFdhbnQ= 16168\nIGRhbmdlcnM= 16169\nQWly 16170\nIHZvbHVudGFyeQ== 16171\nZXdheQ== 16172\nIGludGVycHJldGVk 16173\nb3RpbmU= 16174\nw6c= 16175\nIHBlbA== 16176\nU2VydmljZQ== 16177\nIEV2ZW50dWFsbHk= 16178\nIGNhcmVlcnM= 16179\nIHRocmVhdGVu 16180\nIG1lbW9y 16181\nIEJyYWRsZXk= 16182\nYW5jaWVz 16183\nc24= 16184\nIFVua25vd24= 16185\nTmF0aW9uYWw= 16186\nIHNoYWRvd3M= 16187\nYWlsYW5k 16188\nIERhc2g= 16189\nRXZlcnlvbmU= 16190\naXp6YXJk 16191\nTWFyY2g= 16192\nPSg= 16193\nIHB1bGxz 16194\nIHN0cmFuZ2Vy 16195\nIGJhY2t3YXJkcw== 16196\nIEJlcm5hcmQ= 16197\naW1lbnNpb25hbA== 16198\nIGNocm9u 16199\nIHRoZW9yZXRpY2Fs 16200\na3RvcA== 16201\nIHdhcmU= 16202\nIEludmVzdGln 16203\nIEluaXRp 16204\nIE9wZXJhdGlvbnM= 16205\nb3Zlbg== 16206\nb2NpZGU= 16207\nKi8= 16208\nIGZsYW1lcw== 16209\nIENhc2g= 16210\nc2hpdA== 16211\nIGNhYg== 16212\nIEFuYWx5 16213\nIFNlYWg= 16214\nIGRlZmluaW5n 16215\nIG9yZGVyaW5n 16216\nIGltbXVu 16217\nIHBlcnNpc3RlbnQ= 16218\nQUNI 16219\nUnVzc2lhbg== 16220\nbWFucw== 16221\nIGhpbmQ= 16222\nIHBob3RvZ3JhcGh5 16223\nwqk= 16224\nIGh1Zw== 16225\nIDEwNw== 16226\nIEhlbmNl 16227\naW90cw== 16228\ndWRlYXU= 16229\nIHN1YnNpZGllcw== 16230\nIHJvdXRpbmVseQ== 16231\nIERldmljZQ== 16232\naXRpYw== 16233\nIGRpc2d1c3Q= 16234\nbGFuZGVy 16235\nIDE5NDA= 16236\nIGFzc2lnbm1lbnQ= 16237\nIEJlc2lkZXM= 16238\nd2ljaw== 16239\nIER1c3Q= 16240\ndXNj 16241\nc3RydWN0ZWQ= 16242\nMTEx 16243\nZGV2ZWxvcA== 16244\nIGZvbmQ= 16245\nIGludGVyc2VjdGlvbg== 16246\nIGRpZ25pdHk= 16247\nIGNvbW1pc3Npb25lcg== 16248\nV2l0aG91dA== 16249\ncmVhY2g= 16250\nIGNhcnRvb24= 16251\nIHNjYWxlcw== 16252\n44Ot 16253\nRklH 16254\nIHN1cnZleXM= 16255\nIEluZG9uZXNpYQ== 16256\nIGFydHdvcms= 16257\nIHVuY2g= 16258\nIGN5Y2xpbmc= 16259\ndW5jdA== 16260\nYXVlcg== 16261\nb3JhdGU= 16262\nIE9idmlvdXNseQ== 16263\nIGNoYXJhY3Rlcml6ZWQ= 16264\nZmVsZA== 16265\nIGFmZmlybQ== 16266\nIGlubmluZ3M= 16267\nIOk= 16268\nIGFsaWVucw== 16269\nIGNsb3Ro 16270\nZXRvb3Ro 16271\nIENlcnRhaW4= 16272\nwqc= 16273\nIGRpZ2VzdA== 16274\na25vdw== 16275\nIFhM 16276\nIHByZWRpY3Rpb25z 16277\nIGRpbg== 16278\nV0FS 16279\nIGFmdGVybWF0aA== 16280\nRXhhbXBsZQ== 16281\nIFN1Y2Nlc3M= 16282\nIFRocg== 16283\nSUdO 16284\nIG1pbmVy 16285\nQnVz 16286\nIGNsYXJpdHk= 16287\naGVpbWVy 16288\nIE9VVA== 16289\nIFNlbmQ= 16290\nIENpcmNsZQ== 16291\nIERpZXQ= 16292\nIHByb25vdW5jZWQ= 16293\nIGNyZWF0b3Jz 16294\nIGVhcnRocXVha2U= 16295\nYXR0ZXJ5 16296\nZ2VvbnM= 16297\nIG9k 16298\nIGxheWluZw== 16299\nb3Jw 16300\nVWx0 16301\ncHJvamVjdA== 16302\nIHVuZGVybWlu 16303\nIHNlcXVlbA== 16304\nU2Ft 16305\nIERhcmtuZXNz 16306\nIHJlY2VwdGlvbg== 16307\nYnVsbA== 16308\nWVM= 16309\nIFZpcg== 16310\nIHNlcXVlbmNlcw== 16311\nIENvaW4= 16312\nIG91dGZpdA== 16313\nIFdhaXQ= 16314\nMTE5 16315\nIGRlbGl2ZXJz 16316\nLi4uLi4u 16317\nIGJsb3du 16318\nIEVzYw== 16319\nIE1hdGg= 16320\ncGVybQ== 16321\nIFVs 16322\nIGdsaW0= 16323\nIGZhY2lhbA== 16324\nIGdyZWVuaG91c2U= 16325\nIHRva2Vucw== 16326\nLy0= 16327\nIEFubnVhbA== 16328\nIE9ORQ== 16329\nIHRlZW5hZ2U= 16330\nIFBoeXNpY2Fs 16331\nIExhbmc= 16332\nIENlbHQ= 16333\nIHN1ZWQ= 16334\naXZpZHVhbGx5 16335\nIHBhdGllbmNl 16336\nY2hhaXI= 16337\ncmVndWxhcg== 16338\nIGF1Zw== 16339\naW52 16340\nZXhjZXB0 16341\nIExpbA== 16342\nIG5lc3Q= 16343\nZmQ= 16344\nc3Vt 16345\nIENoYXNl 16346\nUnVzc2lh 16347\nIEplbm5pZmVy 16348\nIG9mZnNlYXNvbg== 16349\nT3ZlcmFsbA== 16350\nRm9yZQ== 16351\nIHJpb3Q= 16352\nQXVk 16353\nZm9ybWVy 16354\nIGRlZmVuZGVycw== 16355\nIENU 16356\naW90aWM= 16357\ncmlibHk= 16358\nIGF1dG9tYXRlZA== 16359\nIHBlbmlz 16360\nIGluc2lzdA== 16361\nIGRpYWdyYW0= 16362\nIFNRTA== 16363\nIEdhcmM= 16364\nIHdpdGNo 16365\nY2xpZW50 16366\naWVycmE= 16367\nYW1iZXJz 16368\nIHJlY291bnQ= 16369\nZmFy 16370\nVmVyeQ== 16371\nb3N0ZXJvbmU= 16372\nIGFwcHJlY2lhdGVk 16373\nIFBlcmZlY3Q= 16374\nU2VjdGlvbg== 16375\nIGRvc2Vz 16376\nb2NhdXN0 16377\nIGNvc3RseQ== 16378\nIGdyYW1z 16379\nIFNoaQ== 16380\nIHdyZXN0bGluZw== 16381\nIDE5NzE= 16382\nIHRyb3BoeQ== 16383\nIG5lcnZl 16384\nIEtheg== 16385\nIEV4cGVyaWVuY2U= 16386\nIHBsZWRnZWQ= 16387\nIHBsYXliYWNr 16388\nIGNyZWF0aXZpdHk= 16389\nYnll 16390\nIGF0dGFja2Vycw== 16391\nIGhvbGRlcnM= 16392\nIENvYWNo 16393\nIFBoRA== 16394\nIHRyYW5zZmVycw== 16395\nIGNvbG9yZWQ= 16396\nIEhpbmR1 16397\nIGRyb3du 16398\nIGxpc3RlbmVk 16399\nIFdB 16400\naWFzbQ== 16401\nUE8= 16402\nIGFwcGVhbGluZw== 16403\nIGRpc2Nsb3NlZA== 16404\nIENoaWNrZW4= 16405\nYWdnaW5n 16406\nIHBsZWFkZWQ= 16407\nIG5hdmlnYXRpb24= 16408\nIFJldHVybnM= 16409\nIFtb 16410\nUk9S 16411\nRUE= 16412\nIHBob3RvZ3JhcGhlcg== 16413\nIFJpZGVy 16414\naXBwZXJz 16415\nIHNsaWNl 16416\nIGVyZWN0 16417\nIGhlZA== 16418\naXNzYW5jZQ== 16419\nIFZpa2luZ3M= 16420\ndXJpb3Vz 16421\nIGFwcGV0 16422\nb3VidGVkbHk= 16423\nQ2hpbGQ= 16424\nIGF1dGhlbnRpYw== 16425\nb29z 16426\nIE1ha2luZw== 16427\nIGFubm91bmNpbmc= 16428\nIGJvZA== 16429\nIG1ldGVy 16430\nIE5pbmU= 16431\nIFJvZ3Vl 16432\nIHdvcmtmb3JjZQ== 16433\nIHJlbmV3ZWQ= 16434\nIG9yZ2FuaXNhdGlvbnM= 16435\nYWNz 16436\nUExF 16437\nU2hvcnQ= 16438\nIGNvbXBvdW5kcw== 16439\nIFZpc2l0 16440\nIGVudmVsb3A= 16441\nZWFydGg= 16442\nIHN1cHBvcnRpdmU= 16443\nZ2dsZQ== 16444\nIEJydXNzZWxz 16445\nIEd1aWxk 16446\nQ3JlYXRl 16447\nUkVM 16448\nIGF2ZXJhZ2Vk 16449\nIDE5Njk= 16450\ncmlhZ2Vz 16451\nIGxlbmd0aHk= 16452\nIGZvcmdvdA== 16453\nT2theQ== 16454\nIEVyZA== 16455\nIGRlYWxlcg== 16456\nIHJlY2Vzc2lvbg== 16457\nREQ= 16458\nIGRlc3BlcmF0ZWx5 16459\nIGh1bmdlcg== 16460\nIHN0aWNrcw== 16461\nIG1waA== 16462\nIEZhaXRo 16463\nIGludGVudGlvbmFsbHk= 16464\nIGRlbW9s 16465\ndWVsbGVy 16466\nIFNhbGU= 16467\nIGRlYnJpcw== 16468\nc3ByaW5n 16469\nIGxlYXA= 16470\nPj4+Pg== 16471\nIGNvbnRhaW5lcnM= 16472\nc2VsbGluZw== 16473\ncmFuZWFu 16474\nYXR0ZXJpbmc= 16475\nIGNvbW1lbnRlZA== 16476\nIENN 16477\nb251dA== 16478\nIHdvb2Rz 16479\nZXNwZWNpYWxseQ== 16480\nIG9yZ2FuaXpl 16481\naXZpYw== 16482\nIFdvb2Rz 16483\nYW5nYQ== 16484\nc3F1 16485\nIG1hag== 16486\nYW1vbg== 16487\nIGF4aXM= 16488\nIDE5NzQ= 16489\nIERlbm1hcms= 16490\nIHdhcnJpb3I= 16491\nIFBhbmQ= 16492\nIG91dGxpbmVk 16493\nIEJP 16494\naW5zdWxh 16495\nemlsbGE= 16496\nZWJvb2s= 16497\nIGRhcmU= 16498\nIHNlYXJjaGVk 16499\nIG5hdmlnYXRl 16500\nU24= 16501\nd3JpdGluZw== 16502\nIHVuaXRlZA== 16503\nSmFwYW4= 16504\nIEhlYnJldw== 16505\nIGZsYW1l 16506\nIHJlbGllcw== 16507\nIGNhdGNoaW5n 16508\nIFNobw== 16509\nIGltcHJpc29ubWVudA== 16510\nIHBvY2tldHM= 16511\nIGNsb3N1cmU= 16512\nIEZhbQ== 16513\ndGlt 16514\nYWRlcXU= 16515\nQWN0aXZpdHk= 16516\nIHJlY3J1aXRpbmc= 16517\nIFdBVENI 16518\nIEFyZ2VudGluYQ== 16519\nZGVzdA== 16520\nIGFwb2xvZ2l6ZQ== 16521\nb3Jv 16522\nIGxhY2tz 16523\nIHR1bmVk 16524\nIEdyaWZmaW4= 16525\nIGluZmFtb3Vz 16526\nIGNlbGVicml0eQ== 16527\nc3Nvbg== 16528\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 16529\nIElzaXM= 16530\nIERpc3BsYXk= 16531\nIGNyZWRpYmlsaXR5 16532\nIGVjb25vbWllcw== 16533\nIGhlYWRsaW5l 16534\nIENvd2JveXM= 16535\nIGluZGVm 16536\nIGxhdGVseQ== 16537\nIGluY2VudGl2ZXM= 16538\nYnV0dG9u 16539\nIE1vYg== 16540\nQXV0 16541\nIHJlc2lnbmVk 16542\nIE9t 16543\nY2FtcA== 16544\nIHByb2ZpbGVz 16545\nIHNjaGVtZXM= 16546\nb2xwaGlucw== 16547\nYXllZA== 16548\nQ2xpbnRvbg== 16549\nZW5o 16550\nIFlhaG9v 16551\nIGFic3Q= 16552\nIGFuaw== 16553\nc3VpdHM= 16554\nIHdpc2hlZA== 16555\nIE1hcmNv 16556\ndWRkZW4= 16557\nIHNwaGVyZQ== 16558\nIEJpc2hvcA== 16559\nIGluY29ycG9yYXRlZA== 16560\nIFBsYW50 16561\nMTE0 16562\nIGhhdGVk 16563\ncGlj 16564\nIGRvbmF0ZQ== 16565\nIGxpbmVk 16566\nIGJlYW5z 16567\nIHN0ZWFsaW5n 16568\nIGNvc3R1bWU= 16569\nIHNoZXJpZmY= 16570\nIGZvcnR5 16571\nIGludGFjdA== 16572\nIGFkYXB0ZWQ= 16573\nIHRyYXZlbGxpbmc= 16574\nYmFydA== 16575\nIG5pY2VseQ== 16576\nIGRyaWVk 16577\nIHNjYWw= 16578\nb3NpdHk= 16579\nTk9URQ== 16580\nIEJo 16581\nIEJyb25jb3M= 16582\nIElnbg== 16583\nIGludGltYXRl 16584\nIGNoZW1pc3RyeQ== 16585\nIG9wdGltYWw= 16586\nRGVi 16587\nIEdlbmVyYXRpb24= 16588\nIF0s 16589\naWNoaQ== 16590\nIFdpaQ== 16591\nIFlPVVI= 16592\ndmVudGlvbnM= 16593\nV3JpdGU= 16594\nIHBvcHVs 16595\ndW5uaW5n 16596\nIFdvcg== 16597\nVm9s 16598\nIHF1ZWVu 16599\naGVhZHM= 16600\nS0s= 16601\nIGFuYWx5emU= 16602\nb3BpYw== 16603\nZWFyY2hlcnM= 16604\nIGRvdA== 16605\nbGVncmFwaA== 16606\nYXN0aWNhbGx5 16607\nIHVwZ3JhZGVz 16608\nIGNhcmVz 16609\nIGV4dGVuZGluZw== 16610\nIGZyZWV6ZQ== 16611\nIGluYWJpbGl0eQ== 16612\nIG9yZ2Fucw== 16613\nIHByZXRlbmQ= 16614\nIG91dGxldA== 16615\nMTEz 16616\nb2xhbg== 16617\nIE1hbGw= 16618\ndWxpbmc= 16619\ndGFsaw== 16620\nIGV4cHJlc3Npbmc= 16621\nIEFsd2F5cw== 16622\nIEJlZ2lu 16623\nZmlsZXM= 16624\nIGxpY2Vuc2Vz 16625\nJSU= 16626\nIE1pdHQ= 16627\nIGZpbHRlcnM= 16628\nIE1pbHdhdWtlZQ== 16629\nR04= 16630\nIHVuZm9sZA== 16631\nTW8= 16632\nIG51dHJpdGlvbg== 16633\ncHBv 16634\nQm8= 16635\nIGZvdW5kaW5n 16636\nIHVuZGVybWluZQ== 16637\nIGVhc2llc3Q= 16638\nIEN6ZWNo 16639\nIE1hY2s= 16640\nIHNleHVhbGl0eQ== 16641\nIE5peG9u 16642\nV2lu 16643\nIEFybg== 16644\nIEtpbg== 16645\n44Kj 16646\naWNlcg== 16647\nIGZvcnR1bg== 16648\nIHN1cmZhY2Vz 16649\nYWdoZA== 16650\nIGNhcnJpZXJz 16651\nIFBBUlQ= 16652\nIFRpYg== 16653\nIGludGVydmFs 16654\nIGZydXN0cmF0aW5n 16655\nIFNoaXA= 16656\nIEFybWVk 16657\nZmZl 16658\nIGJvYXRz 16659\nIEFicmFoYW0= 16660\naW5pcw== 16661\nIHN1aXRlZA== 16662\ndGhyZWFk 16663\naW92 16664\nYWJ1bA== 16665\nIFZlbmV6dWVsYQ== 16666\nIHRvbQ== 16667\nc3VwZXI= 16668\nIGNhc3RsZQ== 16669\nYWx0aG91Z2g= 16670\naW94aWRl 16671\nZWNoZXM= 16672\nIGV2b2x1dGlvbmFyeQ== 16673\nIG5lZ290aWF0ZQ== 16674\nIGNvbmZyb250ZWQ= 16675\nUmVtZW1iZXI= 16676\nIDE3MA== 16677\nU3VjaA== 16678\nIDkxMQ== 16679\nbXVsdA== 16680\nIEFieXNz 16681\ndXJyeQ== 16682\na2Vlcw== 16683\nc3BlYw== 16684\nIEJhcmJhcmE= 16685\nIGJlbG9uZ2luZw== 16686\nIHZpbGxhaW4= 16687\naXN0YW5p 16688\nIGFjY291bnRhYmxl 16689\nIHBvcnRpb25z 16690\nIERlY2w= 16691\nVXI= 16692\nIEthdGU= 16693\nZ3Jl 16694\nIG1hZ2F6aW5lcw== 16695\nVUNL 16696\nIHJlZ3VsYXRl 16697\nb21vbg== 16698\nIEFsbW9zdA== 16699\nIG92ZXJ2aWV3 16700\nIHNjcmFt 16701\nIGxvb3Q= 16702\nIEZpdHo= 16703\nIGNoYXJhY3RlcmlzdGlj 16704\nIFNuYWtl 16705\nc2F5 16706\nIFJpY28= 16707\nIHRyYWl0 16708\nIEpvaW5lZA== 16709\nYXVjdXM= 16710\nIGFkYXB0YXRpb24= 16711\nIEFpcmxpbmVz 16712\nIGFyY2hhZQ== 16713\nIElkZQ== 16714\nIGJpa2Vz 16715\nIGxpdGVyYXJ5 16716\nIGluZmx1ZW5jZXM= 16717\nIFVzZWQ= 16718\nQ3JlYXQ= 16719\nIHBsZWE= 16720\nIERlZmVuY2U= 16721\nIEFzc2Fzcw== 16722\nIHBvbmQ= 16723\nVUxU 16724\nKSI= 16725\nIGV2YWx1YXRlZA== 16726\nIG9idGFpbmluZw== 16727\nIGRlbW9ncmFwaGlj 16728\nIHZpZ2ls 16729\nYWxleQ== 16730\nIHNwb3VzZQ== 16731\nIFNlYWhhd2tz 16732\ncmVzcG9ucw== 16733\nIEJlbHQ= 16734\ndW1hdGlj 16735\nIHJpc2Vz 16736\ncnVubmVy 16737\nIE1pY2hlbGxl 16738\nIHBvdGVudA== 16739\ncmFjZQ== 16740\nIFBBQw== 16741\nRmluZA== 16742\nb2xlc3Rlcm9s 16743\nSVNT 16744\nIEludHJvZHVjZWQ= 16745\ncmVzc2Vz 16746\naWdubWVudA== 16747\nT3M= 16748\nIFR1 16749\nIERleA== 16750\naWNpZGVz 16751\nIHNwYXJrZWQ= 16752\nIExhdXJh 16753\nIEJyeWFudA== 16754\nIHNtaWxpbmc= 16755\nIE5leHVz 16756\nIGRlZmVuZGFudHM= 16757\nIENhdGFs 16758\nIGRpc2hlcw== 16759\nc2hhcGVk 16760\nIHByb2xvbmc= 16761\nbXQ= 16762\nKCQ= 16763\n44CC 16764\nIGNhbGN1bGF0aW9ucw== 16765\nIFNhbWU= 16766\nIHBpdg== 16767\nSEg= 16768\nIGNhbmNlbGxlZA== 16769\nIGdyaW4= 16770\nIHRlcnJpdG9yaWVz 16771\naXN0aWNhbGx5 16772\nQ29tZQ== 16773\nIFBhcmVudA== 16774\nUHJvamVjdA== 16775\nIG5lZ2xpZw== 16776\nIFByaXZhY3k= 16777\nIGFtbW8= 16778\nTEVDVA== 16779\nb2x1dGVseQ== 16780\nIEVwaWM= 16781\nIG1pc3VuZGVy 16782\nd2Fs 16783\nQXByaWw= 16784\nbW9z 16785\ncGF0aHk= 16786\nIENhcnNvbg== 16787\nIGFsYnVtcw== 16788\nIEVhc3k= 16789\nIHBpc3RvbA== 16790\nPDw= 16791\nIFwo 16792\ndGFyZ2V0 16793\naGVscA== 16794\nIGludGVycHJl 16795\nY29uc2Npb3Vz 16796\nIEhvdXNpbmc= 16797\nIEpvaW50 16798\nMTI3 16799\nIGJlZXJz 16800\nc2NpZW5jZQ== 16801\nIEZpcmVmb3g= 16802\nZWZmZWN0aXZl 16803\nIENhYmlu 16804\nIE9rYXk= 16805\nIEFwcGxpYw== 16806\nIHNwYWNlY3JhZnQ= 16807\nIFNS 16808\ndmV0 16809\nIFN0cmFuZ2U= 16810\nU0I= 16811\nIGNvcnBz 16812\naWJlcmFs 16813\nZWZmaWNpZW50 16814\nIHByZXZhbGVuY2U= 16815\nIGVjb25vbWlzdHM= 16816\nMTE4 16817\nVGhyZWFk 16818\nb3JkYWJsZQ== 16819\nT0RF 16820\nIENhbnQ= 16821\nPS09LQ== 16822\naWZpYWJsZQ== 16823\nIEFyb3VuZA== 16824\nIHBvbGU= 16825\nIHdpbGxpbmduZXNz 16826\nQ0xB 16827\nIEtpZA== 16828\nIGNvbXBsZW1lbnQ= 16829\nIHNjYXR0ZXJlZA== 16830\nIGlubWF0ZXM= 16831\nIGJsZWVkaW5n 16832\nZXZlcnk= 16833\nIHF1ZXVl 16834\nIFRyYWlu 16835\nIGhpag== 16836\nIG1lbGVl 16837\ncGxldGVk 16838\nIGRpZ2l0 16839\nIGdlbQ== 16840\nb2ZmaWNpYWw= 16841\nIGxpZnRpbmc= 16842\n0LU= 16843\nUmVxdQ== 16844\naXR1dGVz 16845\nIHBhY2thZ2luZw== 16846\nIFdvcmtlcnM= 16847\naHJhbg== 16848\nIExlYmFub24= 16849\nb2xlc2M= 16850\nIHB1bmlzaGVk 16851\nIEp1YW4= 16852\nIGphbQ== 16853\nIERvY3VtZW50 16854\nIG1hcHBpbmc= 16855\naWNhdGVz 16856\nIGluZXZpdGFibHk= 16857\nIHZhbmlsbGE= 16858\nIFRvbg== 16859\nIHdhdGNoZXM= 16860\nIGxlYWd1ZXM= 16861\nIGluaXRpYXRlZA== 16862\nZGVncmVl 16863\ncG9ydGlvbg== 16864\nIHJlY2FsbHM= 16865\nIHJ1aW4= 16866\nIG1lbHQ= 16867\nSUFO 16868\nIGhlbQ== 16869\nRXhw 16870\nIGJha2luZw== 16871\nIENvbG9tYg== 16872\nYXRpYmxl 16873\nIHJhZGl1cw== 16874\ncGx1Zw== 16875\nIElG 16876\nZXRpY2FsbHk= 16877\nIGZpY3Q= 16878\nSEVS 16879\nIFRhcA== 16880\nYXRpbnVt 16881\nIGluaw== 16882\nIGNvaA== 16883\nIFdpemFyZA== 16884\nYm90aA== 16885\ndGV4 16886\nIHNwZW5kcw== 16887\nIEN1cnJlbnRseQ== 16888\nIFBpdA== 16889\nIG5ldXJvbnM= 16890\naWdudA== 16891\nIHJhbGw= 16892\nIGJ1c2Vz 16893\nYnVpbGRpbmc= 16894\nIGFkanVzdG1lbnRz 16895\nIGNyaWVk 16896\naWJsaWNhbA== 16897\nYXR0ZWQ= 16898\nIFppb24= 16899\nIE1hdHRlcg== 16900\nIG1lZGl0YXRpb24= 16901\nIERlbm5pcw== 16902\nIG91cnM= 16903\nIFRhYg== 16904\nIHJhbmtpbmdz 16905\nb3J0YWw= 16906\nIGFkdmVycw== 16907\nIHN1cnJlbmRlcg== 16908\nIEdvYg== 16909\nY2l1bQ== 16910\nb21hcw== 16911\naW1ldGVy 16912\nIG11bHRpcGxheWVy 16913\nIGhlcm9pbg== 16914\nIG9wdGltaXN0aWM= 16915\nIGluZGljYXRvcg== 16916\nIEJyaWc= 16917\nIGdyb2Nlcnk= 16918\nIGFwcGxpY2FudA== 16919\nIFJvY2tldA== 16920\ndmlk 16921\nRXhjZXB0aW9u 16922\ncGVudA== 16923\nIG9yZ2FuaXppbmc= 16924\nIGVuY291bnRlcnM= 16925\nIFRPRA== 16926\nIGpld2Vs 16927\nU2F2ZQ== 16928\nIENocmlzdGll 16929\nIGhlYXRpbmc= 16930\nIGxhenk= 16931\nIENQ 16932\nIGNvdXNpbg== 16933\nQ29uZmln 16934\nIHJlZ2VuZXI= 16935\nIG5lYXJlc3Q= 16936\nIGFjaGlldmluZw== 16937\nRU5T 16938\ndGhyb3c= 16939\nIFJpY2htb25k 16940\nYW50bGU= 16941\nMjAwMg== 16942\nIGFudGVu 16943\nYmlyZA== 16944\nMTMz 16945\nIG5hcmM= 16946\ncmFpbnQ= 16947\ndW5ueQ== 16948\nIEhpc3Bhbmlj 16949\nb3VybmFtZW50cw== 16950\nIHByb3BoZQ== 16951\nIFRoYWlsYW5k 16952\nIFRp 16953\nIGluamVjdGlvbg== 16954\nIGluaGVyaXQ= 16955\ncmF2aXM= 16956\nIG1lZGk= 16957\nIHdob2V2ZXI= 16958\nIERFQlVH 16959\nR1A= 16960\nIEh1ZA== 16961\nQ2FyZA== 16962\ncHJvbQ== 16963\nIHBvcg== 16964\nIG92ZXJoZWFk 16965\nTGF3 16966\nIHZpb2xhdGU= 16967\nIGhlYXRlZA== 16968\nIGRlc2NyaXB0aW9ucw== 16969\nIGFjaGlldmVtZW50cw== 16970\nIEJlZXI= 16971\nIFF1YW50 16972\nV2Fz 16973\nIGVpZ2h0aA== 16974\nIEl2 16975\nIHNwZWNpYWxpemVk 16976\nVVBEQVRF 16977\nIERlbHRh 16978\nUG9w 16979\nSnVs 16980\nIEFzaw== 16981\nb3BoeQ== 16982\nIG5ld3NsZXR0ZXJz 16983\nIFRvb2w= 16984\nIGdhcmQ= 16985\nIENvbmZlZGVy 16986\nIEdNVA== 16987\nIEFiYm90dA== 16988\nIGltbXVuaXR5 16989\nIFZN 16990\nSXNsYW0= 16991\nIGltcGxpY2l0 16992\nd2Q= 16993\nIDE5NDQ= 16994\ncmF2aXR5 16995\nb21ldHJpYw== 16996\nIHN1cnZpdmluZw== 16997\ndXJhaQ== 16998\nIFByaXNvbg== 16999\nIHJ1c3Q= 17000\nIFNrZXRjaA== 17001\nIGJlZXM= 17002\nIFRoZW9yeQ== 17003\nIG1lcml0 17004\nVGV4 17005\nY2hhdA== 17006\nIG1pbQ== 17007\nIHBhc3Rl 17008\nIEtvY2g= 17009\nIGlnbm9yYW5jZQ== 17010\nIFNob290 17011\nIGJhc2VtZW50 17012\nVW5pdGVk 17013\nIEFkdmlz 17014\naGVpZ2h0 17015\nIGZvc3Rlcg== 17016\nIGRldGFpbg== 17017\naW5mb3JtYXRpb24= 17018\nIG5ldXJhbA== 17019\nJzs= 17020\nIHByb3Zlcw== 17021\nYWxsZXJ5 17022\nIGludml0YXRpb24= 17023\ndW1iZXJz 17024\nIGNhdHRsZQ== 17025\nIGJpY3ljbGU= 17026\nemk= 17027\nIGNvbnN1bHRhbnQ= 17028\nIGFwb2xvZ3k= 17029\nIFRpZ2Vy 17030\nIDEyMw== 17031\nOTk5 17032\nIGluZGl2aWR1YWxseQ== 17033\ncnQ= 17034\naWdpb24= 17035\nIEJyYXppbGlhbg== 17036\nIGRpc3R1cmI= 17037\nIGVudHJlcHJlbmV1cnM= 17038\nIGZvcmVzdHM= 17039\nY2VycHQ= 17040\ncGxhdGVz 17041\ncGhlcg== 17042\nY2xpcHNl 17043\nIHR3aXR0ZXI= 17044\nIGFjaWRz 17045\nb2dyYXBoaWNhbA== 17046\naHVt 17047\nIEJhbGQ= 17048\naWZ1bGx5 17049\nIGNvbXBpbGVy 17050\nIERB 17051\nIGRvbm9y 17052\nYXNp 17053\nIHRyaWJhbA== 17054\nbGFzaA== 17055\nIENvbmZpZw== 17056\nIGFwcGxpY2FudHM= 17057\nIHNhbGFyaWVz 17058\nMTM1 17059\nUHV0aW4= 17060\nIEZvY3Vz 17061\naXJz 17062\nIG1pc2NvbmR1Y3Q= 17063\nIEhheg== 17064\nIGVhdGVu 17065\nTW9iaWxl 17066\nTXVzbGlt 17067\nIE1hcmN1cw== 17068\ndmlvbA== 17069\nIGZhdm9yYWJsZQ== 17070\nIHN0dWI= 17071\nYWRpbg== 17072\nIEhvYg== 17073\nIGZhaXRoZnVs 17074\nIGVsZWN0cm9uaWNz 17075\nIHZhY3V1bQ== 17076\nd2FpdA== 17077\nYmFja2Vk 17078\nZWNvbm9taWM= 17079\nZGlzdA== 17080\nIHRlbnVyZQ== 17081\nIHNpbmNlcmU= 17082\nIFRvZ2V0aGVy 17083\nIFdhdmU= 17084\nIHByb2dyZXNzaW9u 17085\nIGRlbnlpbmc= 17086\nIGRpc3RyZXNz 17087\nYnJhc2th 17088\ndGhpcmQ= 17089\nIG1peGluZw== 17090\nIGNvbG9uaWFs 17091\nIHByaXZhdGVseQ== 17092\nIHVucmVzdA== 17093\nYXRlcm5pdHk= 17094\nIHByZW1pc2Vz 17095\nYW50aQ== 17096\nZ3JlZ2F0aW9u 17097\nIGxpY2VuY2U= 17098\nIEhpbmQ= 17099\nIFNhbXVlbA== 17100\nIGNvbnZpbmNpbmc= 17101\nIEFjZQ== 17102\nIFJ1c3Q= 17103\nIE5ldGFueWFodQ== 17104\nIGhhbmRsZXM= 17105\nIFBhdGNo 17106\nb3JpZW50ZWQ= 17107\nYWhv 17108\nIEdvbno= 17109\nIGhhY2tlcnM= 17110\nY2xhaW1lcg== 17111\nIGN1c3RvbXM= 17112\nIEdyYW4= 17113\nZmlnaHRlcnM= 17114\nIGx1Yw== 17115\nIG1hbnVzY3JpcHQ= 17116\nYXJlbnRob29k 17117\nIGRldmls 17118\nIHdhcnJpb3Jz 17119\nIG9mZmVuZGVycw== 17120\nV2lsbGlhbQ== 17121\nIGhvbGlkYXlz 17122\nIG5pZ2h0bWFyZQ== 17123\nIGxldmVy 17124\naWZmZXJlbnQ= 17125\nU3RhdA== 17126\nIGV4aGliaXRpb24= 17127\ncHV0ZWQ= 17128\nIFB1cmU= 17129\nIGFscGhh 17130\nIGVudGh1c2lhc20= 17131\nIFJlcHJlc2VudGF0aXZlcw== 17132\nRUFS 17133\nIFR5cA== 17134\nIHdoZWF0 17135\nIEFsZg== 17136\nIGNvcnJlY3Rpb24= 17137\nIGV2YW5nZWw= 17138\nQVRU 17139\nTWlzcw== 17140\nIHNvdXA= 17141\nIGltcGxpZWQ= 17142\ncGFyYW0= 17143\nIHNleHk= 17144\nIEx1eA== 17145\nIHJlcHVibGlj 17146\ncGF0Y2g= 17147\nYWJsaXNo 17148\nIGljb25z 17149\nIGZhdGhlcnM= 17150\nIEdFVA== 17151\nIENhcmli 17152\nIHJlZ3VsYXRlZA== 17153\nIENvaGVu 17154\nIEJvYmJ5 17155\nIG5lcg== 17156\nIGJlbnQ= 17157\ndmVudG9yeQ== 17158\nIEFsb25n 17159\nIEVTVA== 17160\nIFdhbGxhY2U= 17161\nIG11cmRlcnM= 17162\ncmlzZQ== 17163\na2VsbA== 17164\nIENvbW1vbndlYWx0aA== 17165\nIG5hc3R5 17166\nZXRh 17167\nIE1JVA== 17168\nIGFkbWluaXN0ZXJlZA== 17169\nIGdlbnVpbmVseQ== 17170\nRWRpdG9y 17171\nbmljaw== 17172\nIGh5ZHJv 17173\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 17174\nIEJsZQ== 17175\nIGZpbmVz 17176\nIGdvcmdl 17177\nYXVzaWJsZQ== 17178\ncmg= 17179\nIGFwcGxl 17180\nbWVudGlvbmVk 17181\nIHJvcGU= 17182\nb3R5cA== 17183\nSFI= 17184\nIGRpc2FwcG9pbnRpbmc= 17185\nIGNhZ2U= 17186\nbmlr 17187\nIGRvdWJ0cw== 17188\nIEZSRUU= 17189\ncHJpbnRz 17190\nIE1VU1Q= 17191\nIHZlbmRvcnM= 17192\nIElucXU= 17193\nIGxpYmVyYWxz 17194\nIGNvbnRyYWN0b3I= 17195\nIHVwc2lkZQ== 17196\nY2hpbGRyZW4= 17197\nIHRyaWNreQ== 17198\nIHJlZ3VsYXRvcnM= 17199\nY2hhcmdlZA== 17200\nbGl0ZXI= 17201\nICoqKg== 17202\nIHJlYmVsbA== 17203\nbGFuZw== 17204\nIGxvY2Fscw== 17205\nIHBoeXNpY2lhbnM= 17206\nIGhleQ== 17207\nYXJzZQ== 17208\ndG0= 17209\nIExleA== 17210\nIGJlaGF2aW9yYWw= 17211\nc3VjY2Vzc2Z1bA== 17212\nRlg= 17213\nIGJyaWNr 17214\nb3ZpYw== 17215\nIGNvbmZvcm0= 17216\nIHJldmlld2luZw== 17217\nIGluc2lnaHRz 17218\nIGJpb2xvZ3k= 17219\nIFJlbW92ZQ== 17220\nIEV4dHJh 17221\nIGNvbW1pdHRpbmc= 17222\naW5kdWNlZA== 17223\naWdudHk= 17224\naWdt 17225\nIGF0b21pYw== 17226\nQ29tbW9u 17227\nIEVN 17228\nIFBlcmU= 17229\nIEl0ZW1z 17230\nZWg= 17231\nIHByZXNlcnZlZA== 17232\nIEhvb2Q= 17233\nIHByaXNvbmVy 17234\nIGJhbmtydXB0Y3k= 17235\nIGdyZW4= 17236\ndXNoZXM= 17237\nIGV4cGxvaXRhdGlvbg== 17238\nIHNpZ25hdHVyZXM= 17239\nIGZpbmFu 17240\nXSwi 17241\nIE1S 17242\nIG1lZw== 17243\ncmVtbGlu 17244\nIG11c2ljaWFucw== 17245\nIHNlbGVjdGluZw== 17246\nIGV4YW1pbmluZw== 17247\nSU5L 17248\nbGF0ZWQ= 17249\nSGk= 17250\nIGFydGlj 17251\nIHBldHM= 17252\nIGltcGFpcg== 17253\nIE1BTg== 17254\nIHRhYmxldHM= 17255\naW5jbHVkZQ== 17256\nUmFuZ2U= 17257\nIGNhdXQ= 17258\nIGxvZ3M= 17259\nIG1vdW50aW5n 17260\nIHVuYXdhcmU= 17261\nIGR5bmFtaWNz 17262\nIFBhbGVzdGluZQ== 17263\nIFF1YXJ0ZXI= 17264\nIFB1cnBsZQ== 17265\nIG1h 17266\nIEltcG9ydA== 17267\nIGNvbGxlY3Rpb25z 17268\nY2lhdGlvbg== 17269\nIHN1Y2Nlc3Nvcg== 17270\nIGNsb25l 17271\nIGFpbWluZw== 17272\nIHBvc3Nlc3NlZA== 17273\nIHN0aWNraW5n 17274\nIHNoYWtpbmc= 17275\nIGxvY2F0ZQ== 17276\nIEhvY2tleQ== 17277\nVHVybg== 17278\nMTcw 17279\nIGZpZnRlZW4= 17280\nIEhhcnJpc29u 17281\nIGNvbnRpbnVvdXNseQ== 17282\nIFRD 17283\nIFZhbGVudA== 17284\nIFJlc2N1ZQ== 17285\nIGJ5cGFzcw== 17286\nYW1vdW50 17287\nIG1hc3Q= 17288\nIHByb3RlY3Rz 17289\nIGFydGlzdGlj 17290\nIHNvbWV0aW1l 17291\nIHNob2U= 17292\nIHNob3V0ZWQ= 17293\naWZpY2FudA== 17294\nZXRpdGl2ZQ== 17295\nIFJlZ2lzdGVy 17296\nIEppbg== 17297\nIGNvbmNlbnRyYXRlZA== 17298\nbGluZ3Rvbg== 17299\nb25pZXM= 17300\nIGdlbmVyYXRvcg== 17301\neXJpbQ== 17302\nIEFybWVu 17303\nIGNsZWFyaW5n 17304\naWRv 17305\nIFRX 17306\nYWxwaA== 17307\nIGxhZGllcw== 17308\nSGFyZA== 17309\nIGRpYWxvZw== 17310\nIGlucHV0cw== 17311\n5pw= 17312\nIHBvc2Vz 17313\nIHNsb3Rz 17314\nIFByZW1pdW0= 17315\nIGxlYWtz 17316\nIGJvc3Nlcw== 17317\nIDExMw== 17318\nY291cnNl 17319\nQWNj 17320\nIE5ld3Rvbg== 17321\nIEF1c3RyaWE= 17322\nIE1hZ2U= 17323\nIHRlYWNoZXM= 17324\nYWJhZA== 17325\nIHdlYXJz 17326\nIGN5bA== 17327\nIGN1cnNl 17328\nIFNhbGVz 17329\nIFdpbmdz 17330\nIHBzeQ== 17331\nIGdhcHM= 17332\nIEljZWxhbmQ= 17333\nIFBpbnRlcmVzdA== 17334\nIGxhbmRsb3Jk 17335\nIGRlZmluaXRpb25z 17336\nIEtlcg== 17337\nIHN1ZmZpY2llbnRseQ== 17338\nIFBlbmNl 17339\nIEFyY2hpdGVjdA== 17340\nIHN1cnBhc3M= 17341\nIDExNA== 17342\nIHN1cGVyaGVybw== 17343\nIERpc2Vhc2U= 17344\nIHByaWVzdHM= 17345\nIEN1bHR1cmU= 17346\nIGRlZmluaXRpdmU= 17347\nIHNlY3JldGx5 17348\nIERhbmNl 17349\naW5zdGFsbA== 17350\nY2hpZWY= 17351\nIEplc3NpY2E= 17352\nV291bGQ= 17353\nVXBkYXRlZA== 17354\nIGxvY2tlcg== 17355\nIEtheQ== 17356\nIG1lbW9yaWFs 17357\n6KY= 17358\nZmF0 17359\nIGRpc2d1 17360\nIGZsYXZvcnM= 17361\nIEJhc2ViYWxs 17362\nIFJlc2lzdGFuY2U= 17363\nIGtpY2tz 17364\nIGVudg== 17365\nIHRlZW5hZ2Vycw== 17366\nRGFyaw== 17367\nIENBUg== 17368\nIGhhbHQ= 17369\nIExH 17370\nIEdhYnJpZWw= 17371\nIGZldmVy 17372\nIHNhdHVy 17373\nIG1hbGw= 17374\nIGFmZmlsaWF0ZQ== 17375\nIFNsZWVw 17376\nIFNwZWNpZmlj 17377\nIFZlbA== 17378\nIGphcg== 17379\nIFNhY3JlZA== 17380\nIEVkd2FyZHM= 17381\nIEFDTA== 17382\nIHJldGFpbmVk 17383\nIEdpYW50 17384\nIGxpbWl0YXRpb24= 17385\naW5jZXM= 17386\nIHJlZnVzYWw= 17387\nIFRhbGU= 17388\nIEJ1dGxlcg== 17389\nIGFjY2lkZW50cw== 17390\nIENTUw== 17391\nIGltcG9ydGVk 17392\nIENvcHk= 17393\nzrE= 17394\nRVJU 17395\nemVs 17396\nIGRpdmlzaW9ucw== 17397\naG90cw== 17398\nIEFsYg== 17399\nIERT 17400\nTG9hZGVy 17401\nV2FzaGluZ3Rvbg== 17402\nYXRpc2Y= 17403\nIENyZWF0aXZl 17404\nXC4= 17405\nIEF1dG9t 17406\ncmVkaWN0 17407\nIHJlY2VwdG9y 17408\nIENhcmxvcw== 17409\nTWV0aG9k 17410\nb2th 17411\nIG1hbGljaW91cw== 17412\nIHN0ZXBwaW5n 17413\nLFs= 17414\nIERhZA== 17415\nIGF0dHJhY3Rpb24= 17416\nIEVmZmVjdHM= 17417\nIFBpcmF0ZQ== 17418\nIENlcg== 17419\nIEluZHVzdHJ5 17420\nIFJ1ZA== 17421\nIGNoYXJ0ZXI= 17422\nIGRpbmluZw== 17423\nIGluc2lzdHM= 17424\nIGNvbmZpZ3VyZQ== 17425\nICgj 17426\nIFNpbXBsZQ== 17427\nIFNjcm9sbA== 17428\nVVRD 17429\nMTc1 17430\nIEtvbg== 17431\nIG1hcmtldHBsYWNl 17432\nIOOC 17433\nIHJlZnJlcw== 17434\nIGdhdGVz 17435\nZXJyZWQ= 17436\nIFBvZA== 17437\nIGJlaGF2ZQ== 17438\nRnJhbms= 17439\nbm9kZQ== 17440\nIGVuZG9yc2Vk 17441\naGV0dA== 17442\nYXNpdmU= 17443\nIEhvbWVsYW5k 17444\nIHJpZGVz 17445\nIExlYXZl 17446\nZXJuZXNz 17447\nIGZsb29kaW5n 17448\nQUZQ 17449\nIHJpc2Vu 17450\nIGNvbnRpbnVhbGx5 17451\nIHVuYW5pbQ== 17452\nIENvbnRyYWN0 17453\nIFBhcw== 17454\nIGd1aWRlZA== 17455\nIENoaWxl 17456\nYmQ= 17457\nIHN1Y2M= 17458\ncHRpYw== 17459\nIGNvbW1pdHRlZXM= 17460\nIEx1dGhlcg== 17461\nIEFueW9uZQ== 17462\nIHNhYg== 17463\nMTI0 17464\nIHBpeGVs 17465\nIEJhaw== 17466\nIFRhZw== 17467\nIEJlbm5ldHQ= 17468\nRW50ZXI= 17469\nc21hbGw= 17470\nIFByZXNpZGVudGlhbA== 17471\nIHB1bA== 17472\nIGNvbnRyYWNl 17473\nYXJjaGl2ZQ== 17474\nIGNvYXN0YWw= 17475\nIEtpZHM= 17476\nMTky 17477\n4oCy 17478\naWNreQ== 17479\nSU5HVE9O 17480\nIHdvbGY= 17481\nIFN0YWxpbg== 17482\nVHVy 17483\naWRnZXQ= 17484\nYW1hcw== 17485\nIFVubGVzcw== 17486\nIHNwb25zb3I= 17487\nIG1vcnBo 17488\nIENob29zZQ== 17489\nIHJ1bm5lcg== 17490\nIHVuYmVs 17491\nIG11ZA== 17492\nIE1hbmE= 17493\nIGR1YmJlZA== 17494\nIGdvZGQ= 17495\ndXJlcnM= 17496\nd2luZG93 17497\nIHJlbGllZA== 17498\nIGNlbGVicmF0aW5n 17499\nb3Nj 17500\nIDEzNQ== 17501\nIGxvYmJ5aW5n 17502\nIGluY29tcGxldGU= 17503\nIHJlc3RyaWN0aW9u 17504\nIGluY2Fw 17505\naXR1cw== 17506\nIGV4cGVjdGF0aW9u 17507\nIEFwb2xsbw== 17508\nIGludGVucw== 17509\nIHN5bmM= 17510\nR0g= 17511\nIG1hbmlwdWxhdGlvbg== 17512\nQlk= 17513\nIHNwZWFy 17514\nIGJyZWFzdHM= 17515\nIHZvbGNhbg== 17516\naWxpYQ== 17517\nTWF0ZXJpYWw= 17518\nIGZvcm1hdHM= 17519\nIEJhc3Q= 17520\nIHBhcmxpYW1lbnRhcnk= 17521\nIHNuYWtl 17522\nIHNlcnZhbnRz 17523\nIFRydWRlYXU= 17524\nIEdyaW0= 17525\nIEFyYWJpYw== 17526\nIFNDUA== 17527\nIEJveXM= 17528\nc3RhdGlvbg== 17529\nIHByb3NwZWN0aXZl 17530\nb3JkZQ== 17531\naW5pdGlhbGl6ZWQ= 17532\nIGJvcmVk 17533\nQUJMRQ== 17534\nIGFjY2Vzc2Vk 17535\nIHRheGk= 17536\nIFNoZWxs 17537\nYWlkZW4= 17538\ndXJzZWQ= 17539\naW5hdGVz 17540\nIEluc3VyYW5jZQ== 17541\nIFBldGU= 17542\nU2VwdGVtYmVy 17543\nNjUw 17544\nIGFkdmVudHVyZXM= 17545\nIENvdmVy 17546\nIHRyaWJ1dGU= 17547\nIHNrZXRjaA== 17548\nIGVtcG93ZXI= 17549\nINg= 17550\nIEdsZW5u 17551\nIERhdw== 17552\nPVwi 17553\nIFBvbGl0aWNz 17554\nIGd1aWRlcw== 17555\nIGRpb3hpZGU= 17556\nIEdvcmU= 17557\nIEJyaWdodA== 17558\nIFNpZXJyYQ== 17559\nIHZhbHVlZA== 17560\nY29uZA== 17561\nIHBvaW50ZXI= 17562\nU2VsZWN0 17563\nIHJpc2t5 17564\nIGFic29yYg== 17565\naW1hZ2Vz 17566\nIHJlZnVzZXM= 17567\nIGJvbnVzZXM= 17568\nX19f 17569\nIGhpbGFy 17570\nIEZlYXR1cmVz 17571\nMjIw 17572\nIENvbGxlY3Rvcg== 17573\nRm9vdA== 17574\nIDE5NjQ= 17575\nY3VsdXM= 17576\nIGRhd24= 17577\nIHdvcmtvdXQ= 17578\nIExP 17579\nIHBoaWxvc29waGljYWw= 17580\nIFNhbmR5 17581\nIFlvdXRo 17582\nIGxpYWJsZQ== 17583\nQWY= 17584\nYmx1ZQ== 17585\nIG92ZXJ0dXJu 17586\nbGVzc25lc3M= 17587\nIFRyaWJ1bmU= 17588\nIEluZw== 17589\nIGZhY3Rvcmllcw== 17590\nIGNhdGNoZXM= 17591\nIHByb25l 17592\nIG1hdHJpeA== 17593\nIGxvZ2lu 17594\nIGluYWNj 17595\nIGV4ZXJ0 17596\nc3lz 17597\nIG5lZWRsZQ== 17598\nIFF1cg== 17599\nIG5vdGlmaWVk 17600\nb3VsZGVy 17601\ndHg= 17602\nIHJlbWluZHM= 17603\nIHB1Ymxpc2hlcnM= 17604\nIG5vcnQ= 17605\nIGdpdA== 17606\nIGZsaWVz 17607\nIEVtaWx5 17608\nIGZsb3dpbmc= 17609\nIEFsaWVu 17610\nIFN0cmF0ZWc= 17611\nIGhhcmRlc3Q= 17612\nIG1vZGlmaWNhdGlvbg== 17613\nQVBJ 17614\nIE1Z 17615\nIGNyYXNoZXM= 17616\nc3RhaXJz 17617\nbnVtYmVy 17618\nIHVyZ2luZw== 17619\nY2hhbm5lbA== 17620\nIEZhbGNvbg== 17621\nIGluaGFiaXRhbnRz 17622\nIHRlcnJpZnlpbmc= 17623\nIHV0aWxpemU= 17624\nIGJhbm5lcg== 17625\nIGNpZ2FyZXR0ZXM= 17626\nIHNlbnNlcw== 17627\nIEhvbG1lcw== 17628\nIHByYWN0aXRpb24= 17629\nIFBoaWxsaXBz 17630\nb3R0bw== 17631\nIGNvbXBpbGU= 17632\nTW9kZWw= 17633\nIEtv 17634\nIFtd 17635\nQW1lcmljYW5z 17636\nIFRlcm1z 17637\nIG1lZGljYXRpb25z 17638\nIEFuYQ== 17639\nIGZ1bmRhbWVudGFsbHk= 17640\nIE5vdGljZQ== 17641\nIHdlYWtlcg== 17642\nIDAwMDA= 17643\nIGdhcmxpYw== 17644\nIG91dGJyZWFr 17645\nIGVjb25vbWlzdA== 17646\nIEJpcnRo 17647\nIG9ic3RhY2xlcw== 17648\nYXJjZXI= 17649\nIE9ydGhvZG94 17650\nIHBsYWNlYm8= 17651\nIENyZXc= 17652\nYXNwYmVycnk= 17653\nIEFuZ2Vscw== 17654\nIGRpc2NoYXJnZQ== 17655\nIGRlc3RydWN0aXZl 17656\nMTE3 17657\nIFJpc2luZw== 17658\nIGRhaXJ5 17659\nbGF0ZQ== 17660\nIGNvbGxpc2lvbg== 17661\nIFRpZ2Vycw== 17662\nZWFub3I= 17663\nb2N1bWVudGVk 17664\nIEludmFsaWQ= 17665\nIGRvbnQ= 17666\nIExpdGVy 17667\nIFZh 17668\nIGh5ZHJvZ2Vu 17669\nIHZhcmlhbnRz 17670\nIEJyb3ducw== 17671\nIDE5NjU= 17672\nIGluZGlnZW5vdXM= 17673\nIHRyYWRlcw== 17674\nIHJlbWFpbmRlcg== 17675\nIHN3ZXB0 17676\nIEltcGFjdA== 17677\nIHJlZGlzdA== 17678\nIHVuaW50 17679\nZ3JhZHVhdGU= 17680\n44OV 17681\nIFdJTEw= 17682\n44Gu5w== 17683\nIENyaXRpY2Fs 17684\nIGZpc2hlcg== 17685\nIHZpY2lvdXM= 17686\nIHJldmVyc2Vk 17687\nWWVhcg== 17688\nIFNveA== 17689\nIHNob290aW5ncw== 17690\nIGZpbG1pbmc= 17691\nIHRvdWNoZG93bnM= 17692\nYWlyZXM= 17693\nbWVs 17694\nIGdyYW5kZmF0aGVy 17695\nIGFmZmVjdGlvbg== 17696\naW5nbGU= 17697\nIG92ZXJseQ== 17698\nQWRkaXRpb25hbA== 17699\nIHN1cHJlbWU= 17700\nIEdyYWQ= 17701\nIHNwb3J0aW5n 17702\nIG1lcmN5 17703\nIEJyb29rcw== 17704\nb3VudHk= 17705\nIHBlcmZvcm1z 17706\nIHRpZ2h0bHk= 17707\nIGRlbW9ucw== 17708\nIGtpbGxpbmdz 17709\nIGZhY3Rpb24= 17710\nIE5vdmE= 17711\nYXV0cw== 17712\nIHVuZG91YnRlZGx5 17713\nYXJpbg== 17714\nIHVuZGVyd2F5 17715\ncmFr 17716\nIGxpdg== 17717\nIFJlZ2lvbg== 17718\nIGJyaWVmaW5n 17719\nc2Vycw== 17720\nY2xvdWQ= 17721\nIE1paw== 17722\ndXNw 17723\nIHByZWRpY3Rpb24= 17724\nYXpvcg== 17725\nIHBvcnRhYmxl 17726\nIEdhbmQ= 17727\nIHByZXNlbnRpbmc= 17728\nIDEwODA= 17729\nwrs= 17730\ndXNoaQ== 17731\nIFNwYXJr 17732\ndGhlcmV1bQ== 17733\nIGp1c3RpZmljYXRpb24= 17734\nIE55 17735\nIGNvbnRyYWN0b3Jz 17736\nbWluZ2hhbQ== 17737\nIFN0eWxl 17738\n5YU= 17739\nIENocm9uaWNsZXM= 17740\nIFBpY3R1cmU= 17741\nIHByb3Zpbmc= 17742\nIHdpdmVz 17743\nc2V0dA== 17744\nIG1vbGVjdWxlcw== 17745\nIEZhaXJ5 17746\nIGNvbnNpc3Rpbmc= 17747\nIHBpZXI= 17748\nYWxvbmU= 17749\naW5pdGlvbg== 17750\nIG51Y2xl 17751\nanNvbg== 17752\nIGdvdHRh 17753\nIG1vYmls 17754\nIHZlcmJhbA== 17755\nYXJpdW0= 17756\nIG1vbnVtZW50 17757\ndWNrZWQ= 17758\nIDI1Ng== 17759\nVGVjaA== 17760\nbWluZWNyYWZ0 17761\nIFRyYWNr 17762\nIHRpbGU= 17763\nIGNvbXBhdGliaWxpdHk= 17764\nYXNpcw== 17765\nIHNhZGQ= 17766\nIGluc3RydWN0ZWQ= 17767\nIE11ZWxsZXI= 17768\nIGxldGhhbA== 17769\nIGhvcm1vbmU= 17770\nIG9yY2hl 17771\nZWxzZQ== 17772\nIHNrZWxldA== 17773\nIGVudGVydGFpbmluZw== 17774\nIG1pbmltaXpl 17775\nYWdhaW4= 17776\nIHVuZGVyZ28= 17777\nIGNvbnN0cmFpbnRz 17778\nIGNpZ2FyZXR0ZQ== 17779\nIElzbGFtaXN0 17780\nIHRyYXZlbHM= 17781\nIFBhbnRoZXJz 17782\nbGluZ3M= 17783\nQ2FyZQ== 17784\nIGxhd3N1aXRz 17785\ndXJhcw== 17786\nIGNyeXN0 17787\nIGxvd2VyZWQ= 17788\nIGFlcmlhbA== 17789\nIGNvbWJpbmF0aW9ucw== 17790\nIGhhdW4= 17791\nIGNoYQ== 17792\nIHZpbmU= 17793\nIHF1YW50aXRpZXM= 17794\nIGxpbmtpbmc= 17795\nYmFuaw== 17796\nIHNveQ== 17797\nQmlsbA== 17798\nIEFuZ2VsYQ== 17799\nIHJlY2lwaWVudA== 17800\nIFByb3Rlc3Q= 17801\nIHNvY2tldA== 17802\nIHNvbGlkYXJpdHk= 17803\nIOKG 17804\nbWlsbA== 17805\nIHZhcmllcw== 17806\nIFBha2lzdGFuaQ== 17807\nRHJhZ29u 17808\nIHVuZQ== 17809\nIGhvcml6b24= 17810\nwqDCoMKgwqDCoMKgwqDCoA== 17811\nIHByb3ZpbmNlcw== 17812\nIGZyYW5rbHk= 17813\nIGVuYWN0ZWQ= 17814\nbm90ZXM= 17815\nWyc= 17816\nIDE5Mg== 17817\nb2NyYWN5 17818\nIGVuZG9yc2VtZW50 17819\nIG92ZXJ0aW1l 17820\nVHJ1ZQ== 17821\nTGFi 17822\nbGljdGVk 17823\nIEROQw== 17824\nIGJlYXRz 17825\nIEphbWll 17826\nMTUy 17827\nIElOVA== 17828\nQ29udGFjdA== 17829\nIGFjY291bnRlZA== 17830\naGFzaA== 17831\nIFBhY2tlcnM= 17832\ncGlyZXM= 17833\nIGxlc2JpYW4= 17834\nIGFtZW5kbWVudHM= 17835\nIGhvcGVmdWw= 17836\nIEZpbmxhbmQ= 17837\nIHNwb3RsaWdodA== 17838\nIGNvbmZpZ3VyZWQ= 17839\nIHRyb3VibGVk 17840\nIGdhemU= 17841\nIENhbGdhcnk= 17842\nIHJlbGlhYmlsaXR5 17843\nIGluc3VyZw== 17844\nc3dlcg== 17845\nYnV5 17846\nIFNraW4= 17847\nIHBpeGVscw== 17848\nIGhhbmRndW4= 17849\nIHBhcmFz 17850\nIGNhdGVnb3I= 17851\nIEVM 17852\nIFJleA== 17853\nSW5kZWVk 17854\nIGtpbmRh 17855\nIGNvbmp1bmN0aW9u 17856\nIEJyeWFu 17857\nIE1hbnVmYWN0 17858\neWFuZw== 17859\nUGx1cw== 17860\nU1FM 17861\naXNobWVudA== 17862\nIGRvbWluYXRl 17863\nIG5haWw= 17864\nIG9hdGg= 17865\nIGVydXB0 17866\nIEZpbmU= 17867\naXRiYXJ0 17868\nIENoaXA= 17869\nIEFiZA== 17870\nIE5hbQ== 17871\nIGJ1eWVy 17872\nIGRpc3NlbnQ= 17873\nTGVha3M= 17874\nQ29udGlu 17875\nIHJpZGVy 17876\nIFNvbWVvbmU= 17877\nIGlsbHVzaW9u 17878\nY2lu 17879\nIEJvZWluZw== 17880\nIGluYWRlcXU= 17881\nb3ZhdGlvbg== 17882\naWFudHM= 17883\nIHJlYnVpbGQ= 17884\nNDUw 17885\nIERlc3Rpbnk= 17886\nU1c= 17887\nIFRpbGw= 17888\nSGl0 17889\naWF6 17890\nIEJhbmds 17891\nYWNoZXJz 17892\nIFJlZm9ybQ== 17893\nIHNlZ21lbnRz 17894\nIHN5c3RlbWF0aWM= 17895\nZGM= 17896\nIENvbnNlcnZhdGl2ZXM= 17897\nIHBvcnRhbA== 17898\naG9y 17899\nIERyYWdvbmJvdW5k 17900\nIGRyYWdnZWQ= 17901\nb21v 17902\nIHRoZWU= 17903\nYWR2ZXJ0 17904\nIFJlcG9ydHM= 17905\nIEV0 17906\nIGJhcnJlbHM= 17907\nQXVndXN0 17908\nIGNvbXBhcmlzb25z 17909\nIGhleA== 17910\nIGFudGhyb3A= 17911\nIls= 17912\nYm9yb3VnaA== 17913\nYWJp 17914\nIHBpY3R1cmVk 17915\ncGxheWluZw== 17916\nIEFkZHJlc3M= 17917\nIE1pcnJvcg== 17918\nU21pdGg= 17919\nIHRpcmVz 17920\nIE5QUg== 17921\nQUFBQQ== 17922\nIGNsYXNzaWZpY2F0aW9u 17923\nIFRoYW4= 17924\nIEhhcm0= 17925\nIFJB 17926\nIHJlamVjdGlvbg== 17927\nbWluYXRpb24= 17928\nIHJhbmdlZA== 17929\nIEZhbGxz 17930\nREk= 17931\nSG9zdA== 17932\n44K0 17933\nIEV4YW1wbGU= 17934\nbGlzdGVk 17935\ndGhpcmRz 17936\nIHNhZmVndQ== 17937\nYnJhbmQ= 17938\nIHByb2JhYmxl 17939\nQ2FuYWRh 17940\nSVRJT04= 17941\nIFFhZWRh 17942\nIGNoaWNr 17943\nIGltcG9ydHM= 17944\naGl0 17945\nbG9j 17946\nV1c= 17947\nIGJsZXc= 17948\nIGFueXRpbWU= 17949\nIHdob2xlcw== 17950\naWtlZA== 17951\nIGNhbGN1bGF0aW9u 17952\nY3JlYXRl 17953\nIE9yaQ== 17954\nIHVwZ3JhZGVk 17955\nIGFwcGFy 17956\ndXRvcnk= 17957\nIE1vbA== 17958\nQnJpdA== 17959\nIEpvbmc= 17960\nSU5BTA== 17961\nIFN0YXJ0aW5n 17962\nIGRpY2U= 17963\ndXJ0bGU= 17964\nIHJlbHlpbmc= 17965\nY2xvc3VyZQ== 17966\nIHByb2ZpdGFibGU= 17967\nIHNsYXVnaHRlcg== 17968\nIE1hbnVhbA== 17969\nY2FzdGVy 17970\nICIk 17971\nIGZlYXRoZXI= 17972\nIFNpbXBseQ== 17973\naWV2ZXM= 17974\nIGRldGVyaW9y 17975\nIFBDSQ== 17976\nIHN0YW1w 17977\nIGZsYXdz 17978\nIHNoYWRl 17979\naGFtbWVy 17980\nIHBhc3Nwb3J0 17981\nIGNvbnRpbmc= 17982\nYW1lbA== 17983\nIG9ic2VydmVycw== 17984\nIG5lZ2xlY3Q= 17985\nIFJC 17986\nIEJyb3RoZXJob29k 17987\nIHNrZXB0aWNhbA== 17988\nZmFtaWx5 17989\ndXNr 17990\nIGVtb3Rpb25hbGx5 17991\n4pk= 17992\nIEJldGE= 17993\nYXNvbmFibGU= 17994\naWRpdHk= 17995\nIE11bA== 17996\nIGtpY2tpbmc= 17997\nIENhcm0= 17998\nb2xsYWg= 17999\nVkVSVElT 18000\nIEF0aGVu 18001\nIGxhZGRlcg== 18002\nIEJ1bGxldA== 18003\n5aM= 18004\nMDAwMQ== 18005\nIFdpbGRsaWZl 18006\nIE1hc2s= 18007\nIE5hbg== 18008\nUmV2 18009\nIHVuYWNjZXB0YWJsZQ== 18010\nbGVnYWw= 18011\nIGNyb3dkZWQ= 18012\nYWdp 18013\nIENveA== 18014\namU= 18015\nIG1vcmFsaXR5 18016\nIGZ1ZWxz 18017\nIGNhYmxlcw== 18018\nIG1hbmtpbmQ= 18019\nIENhcmliYmVhbg== 18020\nIGFuY2hvcg== 18021\nIGJ5dGU= 18022\nIE9mdGVu 18023\nIE96 18024\nIGNyYWZ0ZWQ= 18025\nIGhpc3Rvcmlhbg== 18026\nIFd1 18027\nIHRvd2Vycw== 18028\nIENpdGl6ZW5z 18029\nIGhlbG0= 18030\nIGNyZWRlbnRpYWxz 18031\nIHNpbmd1bGFy 18032\nIEplc3Nl 18033\nIHRhY2tsZXM= 18034\nIGNvbnRlbXB0 18035\nIGFmb3Jl 18036\nIFNoYWRvd3M= 18037\nIG5pbA== 18038\nIHVyZ2VudA== 18039\nYXBwbGU= 18040\nYmxvb2Q= 18041\nIHZvbg== 18042\nIG9mZmxpbmU= 18043\nIGJyZWF0aGU= 18044\nIGp1bXBz 18045\nIGlycmVsZXZhbnQ= 18046\nb3hpYw== 18047\nb21hbA== 18048\naW1wb3J0YW50 18049\nSmlt 18050\nIGdsb3Zlcw== 18051\nYXJtaW5n 18052\nZGVwdGg= 18053\nIHRhbGVudHM= 18054\nb29raWU= 18055\nIFNC 18056\nIHBhbG0= 18057\ndWZmcw== 18058\nZXN0YQ== 18059\nSUdI 18060\nIGNhbm9u 18061\nIFZlcml6b24= 18062\nIFBsZQ== 18063\nIGNvdXBsZWQ= 18064\ndmVsdA== 18065\nIGZ1bmRyYWlzaW5n 18066\nIEdldHRpbmc= 18067\nIERMQw== 18068\nIG1hdGhlbWF0aWNhbA== 18069\nIEhT 18070\nIENhcmRpbmFscw== 18071\ndGVsbGluZw== 18072\nIHNwb25zb3Jz 18073\nIM8= 18074\nIEJ1bGxz 18075\nb3B0aW9u 18076\nIHByb3Bvc2U= 18077\nIG1lbW9yYWJsZQ== 18078\nIGVtYnJhY2Vk 18079\nIGRlY2xpbmluZw== 18080\nSGVhbHRo 18081\nZWRh 18082\nIH07 18083\nIHNwYW0= 18084\nbWlsZQ== 18085\nIHBpdGNoZXI= 18086\nIEVpZ2h0 18087\nIGNhcmluZw== 18088\ndXRpYw== 18089\ncm9sZQ== 18090\nIGFpcmxpbmU= 18091\nZXJuYW5kZXo= 18092\nIEF0aGxldA== 18093\nIGNlcnRpZmljYXRpb24= 18094\ndXhl 18095\ncmlnZXI= 18096\nIGVtcGly 18097\nIHNlbnNhdGlvbg== 18098\nIGRpc20= 18099\nIGJvbHQ= 18100\nIGV2b2x2ZQ== 18101\nSG91c2U= 18102\nIGNvbnN1bHRhdGlvbg== 18103\nIER1dHk= 18104\nIHRvdWNoZXM= 18105\nIE5hdGhhbg== 18106\nIGZhaW50 18107\naGFk 18108\nIig= 18109\nIENvbnN1bWVy 18110\nIEV4dHJlbWU= 18111\nIDEyNw== 18112\nIEhlcm0= 18113\nIFNhY3JhbWVudA== 18114\naXpvcGg= 18115\nIGFueGlvdXM= 18116\ndWxvdXNseQ== 18117\nIHNvY2lhbGx5 18118\nIFVUQw== 18119\nIHNvbHZpbmc= 18120\nIExldHRlcg== 18121\nSGlzdG9yeQ== 18122\nZWR1Yw== 18123\nUHJpY2U= 18124\nKSk7 18125\nIHJlbG9hZA== 18126\nYW1pYw== 18127\nIHBvcms= 18128\nIGRpc2NvdXJzZQ== 18129\nIHRvdXJuYW1lbnRz 18130\nYWlybw== 18131\nIEt1cg== 18132\nIENvc3Rh 18133\nIHZpb2xhdGluZw== 18134\nIGludGVyZmVyZQ== 18135\nIHJlY3JlYXRpb25hbA== 18136\ndWZmbGU= 18137\nIHNwZWVjaGVz 18138\nIG5lZWRpbmc= 18139\nIHJlbWVtYmVycw== 18140\nIGNyZWRpdGVk 18141\nbmlh 18142\nZm9jdXNlZA== 18143\nYW1lcmE= 18144\nIGJydQ== 18145\ndW1icw== 18146\nIEN1YmFu 18147\nIHByZWNlZGluZw== 18148\nIG5vbnNlbnNl 18149\nYWNpYWw= 18150\nIHNtYXJ0cGhvbmVz 18151\nIFN0b3JpZXM= 18152\nU3BvcnRz 18153\nIEVtZXJnZW5jeQ== 18154\nb3VuY2luZw== 18155\nZWZpbmVk 18156\nIGJlcg== 18157\nIGNvbnN1bHRpbmc= 18158\nIG1hc3RlcnM= 18159\naGVhc3Rlcm4= 18160\nLiJb 18161\nIFJ1bm5pbmc= 18162\nIHN1c2NlcHQ= 18163\nIEZlbmc= 18164\nQW1lcmljYQ== 18165\ncHJpc2Vz 18166\nc3RpdGlhbA== 18167\nIFdlZWtseQ== 18168\nIEdyZWF0ZXI= 18169\nbW9kdWxlcw== 18170\naWZ0ZXI= 18171\nR3JhcGhpY3M= 18172\ndWxlcg== 18173\nIHdob2xseQ== 18174\nIHN1cHByZXNz 18175\nIGNvbmNlYWxlZA== 18176\nIGhhcHBpbHk= 18177\nIGFjY2VwdHM= 18178\nIEVuam95 18179\nIHJpdmVycw== 18180\nIEV4Y2VwdA== 18181\nMjI1 18182\nIE5IUw== 18183\nIE1jQ29ubmVsbA== 18184\nIHB1c3N5 18185\nZmVycmVk 18186\ndXRhYmxl 18187\nIGF0dGFpbg== 18188\nID49 18189\nIGRlcG9zaXRz 18190\ncm9waGlj 18191\nIG5vdG9yaW91cw== 18192\nIFNoYXc= 18193\naWxpdGF0aW9u 18194\nIGVwaWRlbWlj 18195\nYWxsaWM= 18196\nIHNtYWxsZXN0 18197\nb3ZpY2g= 18198\nIGFjY2Vzc29yaWVz 18199\ncGVydGllcw== 18200\nIHN1cnBsdXM= 18201\nIE1lY2g= 18202\nIGFtYmln 18203\nIEltbWlncmF0aW9u 18204\nIGNoaW0= 18205\nZXZhbA== 18206\nIHByYWN0aWNpbmc= 18207\nIE15c3Rlcnk= 18208\nIGRvbWFpbnM= 18209\nIFNpbGljb24= 18210\nYXBwcw== 18211\nIGtpbG9tZXRlcnM= 18212\nZWE= 18213\nIFNtYXNo 18214\nIHdhcnJhbnR5 18215\nIG5vc3Q= 18216\nc2ls 18217\ncmV2 18218\nSm9u 18219\nIER1Ymxpbg== 18220\nIHRhc3Rlcw== 18221\nIGJvdXQ= 18222\nZ3JlYXQ= 18223\nZXJyb3I= 18224\nIHN3aXRjaGVz 18225\nIEJhcHQ= 18226\nRE8= 18227\nb2tp 18228\nIHNvdXJjZWQ= 18229\ncHJvZHU= 18230\nIGF0dGFjaG1lbnQ= 18231\nIElzc3Vl 18232\nIFF1ZXN0aW9u 18233\nSm9pbg== 18234\nIGZpdHRlZA== 18235\nIHVubGF3ZnVs 18236\nXl4= 18237\nZXJlaw== 18238\nIGF1dGhlbnRpY2F0aW9u 18239\nIHN0b2xl 18240\nIGFjY291bnRhYmlsaXR5 18241\nbGFiZWw= 18242\nU2VhcmNo 18243\nIGFsYmVpdA== 18244\nYXRpY2Fu 18245\nZnVuZGVk 18246\nIEFkZGluZw== 18247\nIElR 18248\nIHN1Ym1hcg== 18249\nbGl0 18250\nYXF1ZQ== 18251\nIExlYXJuaW5n 18252\nIGludGVnZXI= 18253\nTWFzdGVy 18254\nIENocm9t 18255\nIHByZW1pZXI= 18256\nT3A= 18257\nIExpdQ== 18258\nIGJsZXNzZWQ= 18259\nIEdsb2Jl 18260\nIFJlc3BvbnNl 18261\nIGxlZ2l0aW0= 18262\nIE1lcmtlbA== 18263\nIGRpc3Bvc2Fs 18264\nwrQ= 18265\nIGdhdWdl 18266\ncGVhdA== 18267\nIGluZHVjZWQ= 18268\nIHF1ZXN0aW9uYWJsZQ== 18269\nYXJ0aHk= 18270\nIFZpdA== 18271\nIEZlZWQ= 18272\nVW50aWw= 18273\nVXQ= 18274\nd29ydGh5 18275\nUlk= 18276\nIEhlcmFsZA== 18277\nIEhhbW1lcg== 18278\nIG1lZGFs 18279\nIFJpdmVycw== 18280\nIEhhY2s= 18281\nIGNsYXJpZnk= 18282\nIHRyYWNrZWQ= 18283\nIGF1dG9ub21vdXM= 18284\nIHRlbmFudA== 18285\nIFFhdGFy 18286\nZXJpZQ== 18287\nIGdyaW0= 18288\nIE1vbml0b3I= 18289\nIHJlc2lzdGFudA== 18290\nIFNwZWM= 18291\nIFdlbGxz 18292\nTkFT 18293\nMTQ4 18294\nIG1pbmVycw== 18295\naW90aWNz 18296\nIG1pc3Nlcw== 18297\nMTE2 18298\nZ2lhbg== 18299\nZ2l0 18300\nIEV5ZXM= 18301\ncHJlcw== 18302\nIGdyYWR1YXRlZA== 18303\nIGFuZ2Vs 18304\nIHN5bmNocm9u 18305\nIGVmZmljaWVudGx5 18306\nIHRyYW5zbWl0dGVk 18307\nSGFycnk= 18308\nIGdsb2JhbGx5 18309\nRU5DRQ== 18310\nIE1vbnRhbmE= 18311\ncmFnZWQ= 18312\nIFByZXZlbnRpb24= 18313\nIHBpc3M= 18314\nIExs 18315\nIHNoZWxm 18316\nIEJKUA== 18317\nIFRlc3RhbWVudA== 18318\nIExhdGU= 18319\naWtlcg== 18320\nIEhhcHA= 18321\nIEp1bGlhbg== 18322\naGFsbA== 18323\nIHNwb250 18324\nIHNodXRkb3du 18325\nIGluY29uc2lzdGVudA== 18326\nIHN1YnNjcmliZXJz 18327\nIHNrZWxldG9u 18328\nIE5lYnJhc2th 18329\nIGluc3BpcmU= 18330\nIFZvaWQ= 18331\nRmVlZA== 18332\nIGFuZ2xlcw== 18333\nIFNwcmluZ3M= 18334\nIGJlbmNobWFyaw== 18335\nIHZhY2NpbmVz 18336\naXpvcGhyZW4= 18337\nc2V4dWFs 18338\ndWZmZWQ= 18339\nIHNoaW5l 18340\nIEthdGg= 18341\nIGdlc3R1cmU= 18342\naW5lYQ== 18343\nIHJpcA== 18344\nIG9wcHJlc3Npb24= 18345\nIGNvbnNjaWVuY2U= 18346\nYnQ= 18347\nIEx1bQ== 18348\nIGluY2lkZW5jZQ== 18349\nIEZh 18350\nd3I= 18351\nIG1pbmVyYWw= 18352\nIFNwdXJz 18353\nYWxreQ== 18354\nIHRodW5kZXI= 18355\nIG9waW8= 18356\nQmVpbmc= 18357\nIFBhbG0= 18358\nIHdhc3RlZA== 18359\nIGxi 18360\naWFyaWVz 18361\nIEluaXRpYXRpdmU= 18362\nIGN1cnJpYw== 18363\nIG1hcmtlcg== 18364\nIE1jTA== 18365\nIGV4dGVuc2lvbnM= 18366\nIFB2 18367\nIEFybXM= 18368\nIG9mZmVyaW5ncw== 18369\nIGRlZmVuc2Vz 18370\nIHZlbmRvcg== 18371\nIGNvbnRyYWRpY3Q= 18372\nIENvbGlu 18373\nIHJlZGRpdA== 18374\nIHBlcmlwaGVy 18375\nMTIy 18376\nIHNpbnM= 18377\nRWRpdA== 18378\nSUNU 18379\nU29mdA== 18380\nIFNoYWg= 18381\nIGFkbWluaXN0cmF0b3I= 18382\nIFRyaXA= 18383\nIHBvcm5vZ3JhcGh5 18384\nIHR1aXRpb24= 18385\naW5lbmNl 18386\nIFByb2dyZXNz 18387\nIGNhdGFsb2c= 18388\nIHN1aXRl 18389\nIGhpa2U= 18390\nIHJlcHJvZHVjdGl2ZQ== 18391\nZW5naW5l 18392\nIGRyb3VnaHQ= 18393\nIE5vYWg= 18394\nIDIzMA== 18395\nIGR1ZGU= 18396\nIHJlbGF4ZWQ= 18397\nIHBhcnRpdGlvbg== 18398\nIHBhcnRpY2lwYW50 18399\nIHRlbGVzYw== 18400\nIGZlYXM= 18401\nIEZG 18402\nb3duZXI= 18403\nIHN3ZWVwaW5n 18404\nIGxlbnNlcw== 18405\nIG1hdGNodXA= 18406\nIFJlcGw= 18407\nb3VybmFscw== 18408\nIGNyZWRpYmxl 18409\nIGdyYW5kbW90aGVy 18410\nIHRoZXJtYWw= 18411\nIHN1YnNjcmliaW5n 18412\nIGlkZW50aXRpZXM= 18413\nY29sbQ== 18414\nVUNU 18415\nIHJlbHVjdGFudA== 18416\ndXNlcnM= 18417\nIENvcnQ= 18418\nIGFzc2lzdGVk 18419\nT1NT 18420\nQVRJT05T 18421\nSVNI 18422\nIHBoYXJtYWNldXRpY2Fs 18423\naWNhYmxl 18424\nYWRpYW4= 18425\nIFNvbmlj 18426\nIEZ1cnk= 18427\nIE1vbmc= 18428\nQUg= 18429\nIFBzeWNob2xvZ3k= 18430\nIHBob3NwaA== 18431\nIHRyZWF0cw== 18432\nrZQ= 18433\nIHN0ZWFkaWx5 18434\nIEhlbGxv 18435\nIHJlbGF0ZXM= 18436\nIGNsdWU= 18437\nRXhwbA== 18438\nYXV0aA== 18439\nIHJldmlzaW9u 18440\nIGVsZA== 18441\nb3Npb24= 18442\nIGJyb24= 18443\nMTQ0 18444\ncmlrZXM= 18445\nIG1pbmVz 18446\nIGJsYW5rZXQ= 18447\nIEZhaWw= 18448\nZWxlZA== 18449\nIEltYWdpbmU= 18450\nIFBsYW5uZWQ= 18451\nYWlj 18452\nUmVxdWVzdA== 18453\nTWFk 18454\nIEhvcnNl 18455\nIEVhZ2xl 18456\nIGNhcGFj 18457\nMTU3 18458\nIGxpbmc= 18459\nIE5pY2U= 18460\nIFBhcmVudGhvb2Q= 18461\nbWluc3Rlcg== 18462\nb2dz 18463\nZW5zaXRpdmU= 18464\nTm90aGluZw== 18465\nIGNhcm4= 18466\nRmlu 18467\nIFBF 18468\nIHJpZmxlcw== 18469\nIExQ 18470\nU2FuZA== 18471\nIGd1aUFjdGl2ZQ== 18472\nIHRvdXJpc3Q= 18473\nQ05O 18474\nIHVudmVpbGVk 18475\nIHByZWRlY2Vzc29y 18476\nfXs= 18477\ndWJlcg== 18478\nIG9mZnNob3Jl 18479\nIG9wdGljYWw= 18480\nIFJvdA== 18481\nIFBlYXJs 18482\nZXRvbg== 18483\nIHN0YXJlZA== 18484\nIGZhcnRoZXI= 18485\nYXRpbGl0eQ== 18486\nY29udGlu 18487\nIEd5 18488\nIEZvc3Rlcg== 18489\nIENvYw== 18490\ncmllbnRz 18491\nIGRlc2lnbmluZw== 18492\nIEVjb25vbXk= 18493\nT05H 18494\nV29tZW4= 18495\nIE5hbmN5 18496\nZXJ2ZXI= 18497\nIG1hc2N1bA== 18498\nIGNhc3VhbHRpZXM= 18499\nIDIyNQ== 18500\nIFN1bGxpdmFu 18501\nIENob2ljZQ== 18502\nIGFzdGVy 18503\nd3M= 18504\nIGhvdGVscw== 18505\nIGNvbnNpZGVyYXRpb25z 18506\nIGNvdWNo 18507\nIFN0cmlw 18508\nIEdu 18509\nIG1hbmlwdWxhdGU= 18510\nbGllZA== 18511\nIHN5bnRoZXRpYw== 18512\nIGFzc2F1bHRlZA== 18513\nIG9mZmVuc2Vz 18514\nIERyYWtl 18515\nIGltcGU= 18516\nT2N0b2Jlcg== 18517\nIEhlcml0YWdl 18518\naGw= 18519\nIEJsYWly 18520\nVW5saWtl 18521\nIGdyaWVm 18522\nIDQ1MA== 18523\nIG9wdGVk 18524\nIHJlc2lnbmF0aW9u 18525\naWxv 18526\nIHZlcnNl 18527\nIFRvbWI= 18528\nIHVwdA== 18529\nIGFpcmVk 18530\nIEhvb2s= 18531\nIE1MQg== 18532\nIGFzc3VtZXM= 18533\nb3V0ZWQ= 18534\nIFZlcnM= 18535\nIGluZmVyaW9y 18536\nIGJ1bmRsZQ== 18537\nIEROUw== 18538\nb2dyYXBoZXI= 18539\nIG11bHRpcA== 18540\nIFNvdWxz 18541\nIGlsbHVzdHJhdGVk 18542\nIHRhY3RpYw== 18543\nIGRyZXNzaW5n 18544\nIGR1bw== 18545\nQ29uZg== 18546\nIHJlbGVudA== 18547\nIGNhbnQ= 18548\nIHNjYXJjZQ== 18549\nIGNhbmR5 18550\nIENG 18551\nIGFmZmlsaWF0ZWQ= 18552\nIHNwcmludA== 18553\neWxhbg== 18554\nIEdhcmNpYQ== 18555\nIGp1bms= 18556\nUHJpbnQ= 18557\nZXhlYw== 18558\nQ3JpdA== 18559\nIHBvcnRyYWl0 18560\naXJpZXM= 18561\nIE9GRg== 18562\nIGRpc3B1dGVz 18563\nV1I= 18564\nTG92ZQ== 18565\n44GE 18566\nIFJleW4= 18567\nIGhpcHA= 18568\nb3BhdGg= 18569\nIGZsb29ycw== 18570\nIEZlZWw= 18571\nIHdvcnJpZXM= 18572\nIHNldHRsZW1lbnRz 18573\nIFBvcw== 18574\nIG1vc3F1ZQ== 18575\nIGZpbmFscw== 18576\nIGNydXNoZWQ= 18577\nIFByb2JhYmx5 18578\nIEJvdA== 18579\nIE1hbnM= 18580\nIFBlcmlvZA== 18581\nIHNvdmVyZWlnbnR5 18582\nIHNlbGxlcg== 18583\nIGFwb3N0 18584\nIGFtYXRldXI= 18585\nIGRvcm0= 18586\nIGNvbnN1bWluZw== 18587\nIGFybW91cg== 18588\nIFJvb3Nl 18589\nIGludGVuc2l2ZQ== 18590\nIGVsaW1pbmF0aW5n 18591\nIFN1bm5p 18592\nIEFsZXBwbw== 18593\namlu 18594\nIGFkdmlzZQ== 18595\ncGFs 18596\nIEhhbG8= 18597\nIGRlc2NlbnQ= 18598\nIHNpbXBsZXI= 18599\nIGJvb3Ro 18600\nU1RS 18601\nTGF0ZXI= 18602\nIENhdmU= 18603\nPT09 18604\nIG1vbA== 18605\nIGZpc3Q= 18606\nIHNob3RndW4= 18607\nc3VwcA== 18608\nIHJvYmJlcnk= 18609\nRWZmZWN0 18610\nIG9ic2N1cmU= 18611\nIFByb2Zlc3Npb25hbA== 18612\nIGVtYmFzc3k= 18613\nIG1pbGl0YW50 18614\nIGluY2FyY2Vy 18615\nIGdlbmVyYXRlcw== 18616\nIGxhdW5jaGVz 18617\nIGFkbWluaXN0cmF0b3Jz 18618\nIHNoYWZ0 18619\nIGNpcmN1bGFy 18620\nIGZyZXNobWFu 18621\nIFdlcw== 18622\nIEpvZWw= 18623\nIERyZXc= 18624\nIER1bmNhbg== 18625\nIEFwcGFyZW50bHk= 18626\nc2lnaHQ= 18627\nIEludGVybmFs 18628\nIEluZGl2aWR1YWw= 18629\nIEZF 18630\nIGJvcmU= 18631\nIE10 18632\nIGJyb2FkbHk= 18633\nIE9wdGlvbnM= 18634\nb3VudGFpbg== 18635\naXBlcw== 18636\nIFZpZGVvcw== 18637\nMjA0 18638\nIGhpbGxz 18639\nIHNpbXVsYXRpb24= 18640\nIGRpc2FwcG9pbnRtZW50 18641\naXRhbg== 18642\nIExhYm9yYXRvcnk= 18643\nIHVwd2FyZA== 18644\nIGJvdW5kYXJ5 18645\nIGRhcmtlcg== 18646\naGFydA== 18647\nIGRvbWluYW5jZQ== 18648\nQ29uZw== 18649\nIE9yYWNsZQ== 18650\nIExvcmRz 18651\nIHNjaG9sYXJzaGlw 18652\nIFZpbmNlbnQ= 18653\nZWRl 18654\nIFJhaA== 18655\nIGVuY291cmFnZXM= 18656\ncm92 18657\nIHF1bw== 18658\nIHByZW1pc2U= 18659\nIENyaXNpcw== 18660\nIEhvbG9jYXVzdA== 18661\nIHJoeXRobQ== 18662\nIG1ldHJpYw== 18663\nY2x1Yg== 18664\nIHRyYW5zcG9ydGVk 18665\nIG5vZA== 18666\nIFBpc3Q= 18667\nIGFuY2VzdG9ycw== 18668\nIEZyZWRlcg== 18669\ndGh1bWJuYWlscw== 18670\nIENF 18671\nT05E 18672\nUGhpbA== 18673\ndmVuZ2U= 18674\nIFByb2R1Y3Rz 18675\nY2FzdGxl 18676\nIHF1YWxpZnlpbmc= 18677\nIEthcmVu 18678\nVkVSVElTRU1FTlQ= 18679\nIG1pZ2h0eQ== 18680\nIGV4cGxhbmF0aW9ucw== 18681\nIGZpeGluZw== 18682\nRGk= 18683\nIGRlY2xhcmluZw== 18684\nIGFub255bWl0eQ== 18685\nIGp1dmVu 18686\nIE5vcmQ= 18687\nIERvb20= 18688\nIEFjdHVhbGx5 18689\nT2s= 18690\ncGhpcw== 18691\nIERlc2VydA== 18692\nIDExNg== 18693\nSUs= 18694\nIEZN 18695\nIGluY29tZXM= 18696\nVkVM 18697\nb2tlcnM= 18698\nIHBlY3Vs 18699\nIGxpZ2h0d2VpZ2h0 18700\nZ3Vl 18701\nIGFjY2VudA== 18702\nIGluY3JlbWVudA== 18703\nIENoYW4= 18704\nIGNvbXBsYWluaW5n 18705\nIEJhZ2hk 18706\nIG1pZGZpZWxkZXI= 18707\nIG92ZXJoYXVs 18708\nUHJvY2Vzcw== 18709\nIEhvbGxvdw== 18710\nIFRpdGFucw== 18711\nU21hbGw= 18712\nbWFudWVs 18713\nIFVuaXR5 18714\nIEV2ZW50cw== 18715\nU3R5 18716\nIGRpc3Byb3BvcnRpb24= 18717\nbmVzdHk= 18718\nZW5lcw== 18719\nIENvZA== 18720\nIGRlbW9uc3RyYXRpb25z 18721\nIENyaW1zb24= 18722\nIE9I 18723\nIGVucm9sbGVk 18724\nIGNlbA== 18725\nIEJyZXR0 18726\nIGFpZGU= 18727\nIGhlZWxz 18728\nIGJyb2FkYmFuZA== 18729\nIG1hcmtpbmc= 18730\nIHdpemFyZA== 18731\nIE5K 18732\nIENoaWVmcw== 18733\nIGluZ3JlZGllbnQ= 18734\nIGR1Zw== 18735\nIFNodXQ= 18736\ndXJjaGFzZQ== 18737\nZW5kb3I= 18738\nIGZhcm1lcg== 18739\nIEdvbGRtYW4= 18740\nMTI5 18741\nMTU1 18742\nT3JkZXI= 18743\nIGxpb24= 18744\naWFibHk= 18745\nIHN0YWlu 18746\nYXJyYXk= 18747\naWxpdGFyeQ== 18748\nIEZBUQ== 18749\nIGV4cGxvZGVk 18750\nIE1jQ2FydGh5 18751\nIFR3ZWV0 18752\nIEdyZWVucw== 18753\nZWtpbmc= 18754\nbG4= 18755\nZW5zZW4= 18756\nIG1vdG9yY3ljbGU= 18757\nIHBhcnRpY2xl 18758\nIGNob2xlc3Rlcm9s 18759\nQnJvbg== 18760\nIHN0YWly 18761\nIG94aWQ= 18762\nIGRlc2lyYWJsZQ== 18763\naWJsZXM= 18764\nIHRoZW9y 18765\nZm9yY2luZw== 18766\nIHByb21vdGlvbmFs 18767\nb3Zv 18768\nYm9vdA== 18769\nIEJvbnVz 18770\ncmF3bGluZw== 18771\nIHNob3J0YWdl 18772\nIFBzeQ== 18773\nIHJlY3J1aXRlZA== 18774\nIGluZmFudHM= 18775\nIHRlc3Rvc3Rlcm9uZQ== 18776\nIGRlZHVjdA== 18777\nIGRpc3RpbmN0aXZl 18778\nIGZpcm13YXJl 18779\nYnVpbHQ= 18780\nMTQ1 18781\nIGV4cGxvcmVk 18782\nIGZhY3Rpb25z 18783\nIHZpZGU= 18784\nIHRhdHRvbw== 18785\nIGZpbmFuY2lhbGx5 18786\nIGZhdGlndWU= 18787\nIHByb2NlZWRpbmc= 18788\nY29uc3RpdHV0aW9uYWw= 18789\nIG1pc2Vy 18790\nIGNoYWlycw== 18791\nZ2dpbmc= 18792\naXBwbGU= 18793\nIGRlbnQ= 18794\nIGRpc3JlZw== 18795\n55Q= 18796\nc3RhbnQ= 18797\nbGxv 18798\nYnBz 18799\nYWtlbmluZw== 18800\nIGFibm9ybWFs 18801\nIEVSQQ== 18802\n5aOr 18803\nIEhCTw== 18804\nIE1BUg== 18805\nIGNvbmNlc3M= 18806\nIHNlcnZhbnQ= 18807\nIGFzcGly 18808\nbGF2 18809\nIFBhbmVs 18810\nYW1v 18811\nIHByZWNpcA== 18812\nIHJlY29yZGluZ3M= 18813\nIHByb2NlZWRlZA== 18814\nIGNvbG9ueQ== 18815\nIFRhbmc= 18816\nYWJsbw== 18817\nIHN0cmlwcGVk 18818\nTGVmdA== 18819\ndG9v 18820\nIHBvdGF0b2Vz 18821\nIGZpbmVzdA== 18822\nJSku 18823\nIGNyYXA= 18824\nIFphY2g= 18825\nYWJhc2Vz 18826\nIEdvdGg= 18827\nIGJpbGxpb25haXJl 18828\nd29sZg== 18829\nIHNhbmN0aW9u 18830\nU0s= 18831\nIGxvZ2dlZA== 18832\nUG8= 18833\nZXllZA== 18834\ndW5hbA== 18835\nIGNyaWNrZXQ= 18836\nIGFybWllcw== 18837\nIHVuY292ZXJlZA== 18838\nQ2xvdWQ= 18839\nw7Nu 18840\nIHJlYm91bmRz 18841\nIG1lcw== 18842\nT3Blcg== 18843\nUGFj 18844\nIG5hdGlvbmFsbHk= 18845\nIGluc2VydGVk 18846\ncGljdA== 18847\nIGdvdmVybmFuY2U= 18848\n0Lg= 18849\nIHByaXZpbGVnZXM= 18850\nR0VU 18851\nIGZhdm9yaXRlcw== 18852\naW1pdHk= 18853\nIGxvdmVy 18854\ndGhlbQ== 18855\nZW1wbA== 18856\nIGdvcmdlb3Vz 18857\nQW5u 18858\nIHNsaXBwZWQ= 18859\nIHZldG8= 18860\nQm9i 18861\nIHNsaW0= 18862\ndWNj 18863\nIEZhbWU= 18864\ndWRkZW5seQ== 18865\nIGRlbmllcw== 18866\nIE1hdXI= 18867\nIGRpc3RhbmNlcw== 18868\nIHdhbm5h 18869\ndGFy 18870\nIFNFUg== 18871\nIOKI 18872\nIGxlbW9u 18873\nYXRoZXRpYw== 18874\nIGxpdGVyYWw= 18875\nIGRpc3Rpbmd1aXNoZWQ= 18876\nIGFuc3dlcmluZw== 18877\nR0k= 18878\nIHJlbGlnaW9ucw== 18879\nIFBoaWxvcw== 18880\nIExheQ== 18881\nIGNvbXBvcw== 18882\naXJlbWVudHM= 18883\nIEtvcw== 18884\naW5leg== 18885\ncm9sbGluZw== 18886\nIHlvdW5nZXN0 18887\nYW5kaXNl 18888\nIEJvcm4= 18889\nIGFsdGFy 18890\nYW1pbmE= 18891\nIEJvb3Q= 18892\ndm9j 18893\nIGRpZ2dpbmc= 18894\nIHByZXNzdXJlcw== 18895\nIGxlbg== 18896\nMjY0 18897\nIGFzc2Fzc2luYXRpb24= 18898\nIEJpcm1pbmdoYW0= 18899\nIE15dGg= 18900\nIHNvdmVyZWlnbg== 18901\nIEFydGlzdA== 18902\nIFBob3RvZ3JhcGg= 18903\nIGRlcGljdGVk 18904\nIGRpc3BlbnM= 18905\nb3J0aHk= 18906\nIGFtYnVs 18907\naW50ZWc= 18908\nIENlbGU= 18909\nIFRpYmV0 18910\nIGhpZXJhcmNoeQ== 18911\nIGN1 18912\nIHByZXNlYXNvbg== 18913\nIFBldGVyc29u 18914\nIGNvbG91cnM= 18915\nIHdvcnJ5aW5n 18916\nIGJhY2tlcnM= 18917\nIFBhbG1lcg== 18918\nIM68 18919\nIGNvbnRyaWJ1dG9y 18920\nIGhlYXJpbmdz 18921\nIHVyaW5l 18922\nINk= 18923\nb3VyZ2VvaXM= 18924\nU2ltaWxhcg== 18925\nIFppbW1lcg== 18926\nc29tZXRoaW5n 18927\nIFVTQw== 18928\nIHN0cmVuZ3Rocw== 18929\nIEZJ 18930\nIGxvZ2dpbmc= 18931\nQXNrZWQ= 18932\nIFRoYWk= 18933\naW5xdQ== 18934\nIFdhbHQ= 18935\nIGNyZXdz 18936\naXRpc20= 18937\nMzAx 18938\nIHNoYXJwbHk= 18939\ndW1lZA== 18940\nIHJlZGlyZWN0 18941\ncmF0b3Jz 18942\nSW5m 18943\nIFdlYXBvbnM= 18944\nIHRlYXNw 18945\nMTk5OQ== 18946\nTGl2ZQ== 18947\nIEVzcGVjaWFsbHk= 18948\nIFN0ZXI= 18949\nIFZldGVyYW5z 18950\nIGludHJv 18951\nb3RoZXJhcHk= 18952\nIG1hbHdhcmU= 18953\nIGJyZWVkaW5n 18954\nIG1vbGVjdWxhcg== 18955\nIFJvdXRl 18956\nIENvbW1lbnQ= 18957\nb2NoZW0= 18958\nIGFpbg== 18959\nU2Vhc29u 18960\nIGxpbmViYWNrZXI= 18961\nxKs= 18962\nIEVjb25vbWljcw== 18963\nZXNhcg== 18964\nIExpdmVz 18965\nIEVtbWE= 18966\nIGtpbg== 18967\nIFRlcnJpdA== 18968\nIHBsYW50ZWQ= 18969\nb3Rvbg== 18970\nIEJ1dHRlcg== 18971\nIFNwb25z 18972\nUEVS 18973\nIGR1bmdlb24= 18974\nIHN5bWJvbGlj 18975\nIGZpbG1lZA== 18976\nIGRpZXRz 18977\nIGNvbmNsdWRlcw== 18978\nIGNlcnRhaW50eQ== 18979\nIEZvcm1hdA== 18980\nIHN0cmFuZ2Vycw== 18981\nZm9ybWF0 18982\nIFBoYXNl 18983\nIGNvcGllZA== 18984\nIG1ldHJlcw== 18985\nbGRh 18986\nIFVzZXJz 18987\nIGRlbGliZXJhdGU= 18988\nIHdhc2hlZA== 18989\nIExhbmNl 18990\naW1hdGlvbg== 18991\nIGltcHJvcGVy 18992\nIEdlbmVzaXM= 18993\naWNrcg== 18994\nIEt1c2g= 18995\nIHJlYWxpc2U= 18996\nIGVtYmFycmFzc2luZw== 18997\nYWxraW5n 18998\nYnVja3M= 18999\nIHZlcmlmaWVk 19000\nIG91dGxpbmU= 19001\neWVhcnM= 19002\nIEluY29tZQ== 19003\nMjAy 19004\nIHpvbWJpZXM= 19005\nRmluYWw= 19006\nIE1pbGxlbm4= 19007\nIG1vZGlmaWNhdGlvbnM= 19008\nIFZpc2lvbg== 19009\nIE1vc2Vz 19010\ndmVyYg== 19011\naXRlcnJhbmVhbg== 19012\nIEpldA== 19013\nIG5hdmFs 19014\nIEFnZw== 19015\nIHVybA== 19016\nIHZpY3Rvcmllcw== 19017\nIG5vbmV0aGVsZXNz 19018\nIGluanVzdA== 19019\nIEZhY3Q= 19020\n55o= 19021\nIGluc3VmZmljaWVudA== 19022\ncmV2aWV3 19023\nZmFjZWJvb2s= 19024\nIG5lZ290aWF0aW5n 19025\nIGd1YXJhbnRlZXM= 19026\naW1lbg== 19027\ndXRlbmJlcmc= 19028\nIGdhbWJsaW5n 19029\nIGNvbmdy 19030\nTG9hZGluZw== 19031\nIG5ldmVydGhlbGVzcw== 19032\nIHByZXNpZGVudHM= 19033\nIEluZHVzdHJpYWw= 19034\nIDExOA== 19035\nIHBvdXJlZA== 19036\nIFRvcnk= 19037\nIDE3NQ== 19038\nIDo9 19039\nU2NvdHQ= 19040\nYW5nZXJlZA== 19041\nVG9r 19042\nIG9yZ2FuaXplcnM= 19043\nTWF0 19044\nIEdyb3d0aA== 19045\nIGFkdWw= 19046\nIGVuc3VyZXM= 19047\nIDExNw== 19048\n6b6N5Q== 19049\nIG1hc3NhY3Jl 19050\nIGdyYWRlcw== 19051\nYmVmb3Jl 19052\nQURWRVJUSVNFTUVOVA== 19053\nIFNsb3c= 19054\nIE1NQQ== 19055\n4oCUIg== 19056\nIFZhdGljYW4= 19057\nUWFlZGE= 19058\nIG93ZQ== 19059\nNjY2Ng== 19060\nIFNvcnJ5 19061\nIEdyYXNz 19062\nIGJhY2tncm91bmRz 19063\nIGV4aGF1c3RlZA== 19064\nIGNsYW4= 19065\nIGNvbXByb21pc2Vk 19066\nIEVsZg== 19067\nIElzYWFj 19068\nZW5zb24= 19069\nSW52ZXN0 19070\nSUZB 19071\nIGludGVycnVwdGVk 19072\n44OJ44Op 19073\nIHR3aXN0ZWQ= 19074\nIERyYWdvbnM= 19075\nTW9kZQ== 19076\nIEtyZW1saW4= 19077\nIGZlcnRpbA== 19078\naGVyZXM= 19079\ncGhhbg== 19080\nIE5vZGU= 19081\nZmVk 19082\nIE9yYw== 19083\nIHVud2lsbGluZw== 19084\nQ2VudA== 19085\nIHByaW9yaXQ= 19086\nIGdyYWR1YXRlcw== 19087\nIHN1YmplY3RpdmU= 19088\nIGlzc3Vpbmc= 19089\nIEx0 19090\nIHZpZXdlcg== 19091\nIHdva2U= 19092\nVGh1cw== 19093\nYnJvb2s= 19094\nIGRlcHJlc3NlZA== 19095\nIGJyYWNrZXQ= 19096\nIEdvcg== 19097\nIEZpZ2h0aW5n 19098\nIHN0cmlrZXI= 19099\nUmVwb3J0 19100\nIFBvcnR1Z2Fs 19101\nIG5lbw== 19102\nd2Vk 19103\nMTk5 19104\nIGZsZWVpbmc= 19105\nc2hhZG93 19106\naWRlbnRpZmllZA== 19107\nVVNF 19108\nU3RlYW0= 19109\nIHN0cmV0Y2hlZA== 19110\nIHJldmVsYXRpb25z 19111\nYXJ0ZWQ= 19112\nIER3 19113\nIGFsaWdubWVudA== 19114\nZXN0b24= 19115\nIEphcmVk 19116\nU2Vw 19117\nIGJsb2dz 19118\ndXBkYXRl 19119\nZ29t 19120\ncmlzaw== 19121\nIGNsYXNo 19122\nIEhvdXI= 19123\nIHJ1bnRpbWU= 19124\nIHVud2FudGVk 19125\nIHNjYW0= 19126\nIHJhY2s= 19127\nIGVubGlnaHQ= 19128\nb25lc3Q= 19129\nIEZlcnI= 19130\nIGNvbnZpY3Rpb25z 19131\nIHBpYW5v 19132\nIGNpcmN1bGF0aW9u 19133\nIFdlbGNvbWU= 19134\nIGJhY2tsYXNo 19135\nIFdhZGU= 19136\nIHJlY2VpdmVycw== 19137\nb3RpdmU= 19138\nSmVmZg== 19139\nIG5ldHdvcmtpbmc= 19140\nIFByZXA= 19141\nIEV4cGxvcmVy 19142\nIGxlY3R1cmU= 19143\nIHVwbG9hZGVk 19144\nIE1lYXQ= 19145\nQkxF 19146\nIE5hemlz 19147\nIFN5bmQ= 19148\nc3R1ZA== 19149\ncm9vdHM= 19150\ncmlhbnM= 19151\nIHBvcnRyYXllZA== 19152\nID8/ 19153\nIEJ1ZGRoYQ== 19154\nc3Vu 19155\nUm9iZXJ0 19156\nIENvbXBsZXg= 19157\nIG92ZXJzZWU= 19158\nIHN0ZWFsdGg= 19159\nVGl0bGU= 19160\nIEpvYnM= 19161\nIEt1bQ== 19162\nIGFwcHJlY2lhdGlvbg== 19163\nIE1PRA== 19164\nIGJhc2ljcw== 19165\nIGNsaXBz 19166\nIG51cnNpbmc= 19167\nIHByb3Bvc2l0aW9u 19168\nIHJlYWxpc2Vk 19169\nIE5ZQw== 19170\nIGFsbG9jYXRlZA== 19171\ncml1bQ== 19172\nYXJhbg== 19173\nIFByb2R1Y3Rpb24= 19174\nIFZvdGU= 19175\nIHNtdWdn 19176\nIGh1bnRlcg== 19177\nYXplcg== 19178\nIENoYW5nZXM= 19179\nIGZsdWN0 19180\neW9u 19181\nQXJyYXk= 19182\nIGtpdHM= 19183\nV2F0ZXI= 19184\nIHVuY29tbW9u 19185\nIHJlc3Rpbmc= 19186\nZWxscw== 19187\nd291bGQ= 19188\nIHB1cnN1ZWQ= 19189\nIGFzc2VydGlvbg== 19190\nb21ldG93bg== 19191\nIE1vc3Vs 19192\nIFBsYXRmb3Jt 19193\naW9sZXQ= 19194\nIHNoYXJlaG9sZGVycw== 19195\nIHRyYWlscw== 19196\nUGF5 19197\nIEVuZm9yY2VtZW50 19198\ndHlwZXM= 19199\nIEFub255bW91cw== 19200\nIHNhdGlzZnlpbmc= 19201\naWxvZ3k= 19202\nICgn 19203\nd2F2ZQ== 19204\nY2l0eQ== 19205\nU3RldmU= 19206\nIGNvbmZyb250YXRpb24= 19207\nIEVsZA== 19208\nQ2FwdA== 19209\nYWhhbg== 19210\naHRt 19211\nIEN0cmw= 19212\nT05T 19213\nMjMw 19214\naWZh 19215\naG9sZGluZw== 19216\nIGRlbGljYXRl 19217\nIGphdw== 19218\nIEdvaW5n 19219\nb3J1bQ== 19220\nU2Fs 19221\nIGR1bGw= 19222\nIEJldGg= 19223\nIHByaXNvbnM= 19224\nIGVnbw== 19225\nIEVsc2E= 19226\nYXZvcml0ZQ== 19227\nIEdhbmc= 19228\nIE51Y2xlYXI= 19229\nIHNwaWRlcg== 19230\nYXRzdQ== 19231\nIHNhbXBsaW5n 19232\nIGFic29yYmVk 19233\nIFBoYXJt 19234\naWV0aA== 19235\nIGJ1Y2tldA== 19236\nIFJlY29tbQ== 19237\nT0Y= 19238\nIEZhY3Rvcnk= 19239\nQU5DRQ== 19240\nIGJhY3Rlcg== 19241\nSGFz 19242\nIE9ic2Vydg== 19243\nMTIx 19244\nIHByZW1pZXJl 19245\nRGV2ZWxvcA== 19246\nIGN1cnJlbmNpZXM= 19247\nQ2FzdA== 19248\nIGFjY29tcGFueWluZw== 19249\nIE5hc2h2aWxsZQ== 19250\nIGZhdHR5 19251\nIEJyZW5k 19252\nIGxvY2tz 19253\nIGNlbnRlcmVk 19254\nIFVU 19255\nYXVnaHM= 19256\nb3JpZQ== 19257\nIEFmZm9yZGFibGU= 19258\ndmFuY2U= 19259\nREw= 19260\nZW1ldA== 19261\nIHRocm9uZQ== 19262\nIEJsdWV0b290aA== 19263\nIG5hbWluZw== 19264\naWZ0cw== 19265\nQURF 19266\nIGNvcnJlY3RlZA== 19267\nIHByb21wdGx5 19268\nIFNUUg== 19269\nIGdlbm9tZQ== 19270\nIGNvcGU= 19271\nIHZhbGxleQ== 19272\nIHJvdW5kZWQ= 19273\nIEtlbmQ= 19274\nYWxpb24= 19275\ncGVycw== 19276\nIHRvdXJpc20= 19277\nIHN0YXJr 19278\ndmw= 19279\nIGJsb3dpbmc= 19280\nIFNjaGVkdWxl 19281\nc3Rk 19282\nIHVuaGFwcHk= 19283\nIGxpdGlnYXRpb24= 19284\nY2VkZXM= 19285\nIGFuZHJvaWQ= 19286\nIGludGVncmFs 19287\nZXJlcnM= 19288\ndWRlZA== 19289\ndGF4 19290\nIHJlaXRlcg== 19291\nIE1vdG9ycw== 19292\nb2NpYXRlZA== 19293\nIHdvbmRlcnM= 19294\nIEFwb3N0 19295\ndWNraW5n 19296\nIFJvb3NldmVsdA== 19297\nZnJhbQ== 19298\nIHlpZWxkcw== 19299\nIGNvbnN0aXR1dGVz 19300\nYXdr 19301\nSW50ZXJlc3Q= 19302\nIGludGVyaW0= 19303\nIGJyZWFrdGhyb3VnaA== 19304\nIENoZXI= 19305\nIHByb3NlYw== 19306\nIERq 19307\nIE1U 19308\nUmVzcA== 19309\nIFBU 19310\nIHNwZXJt 19311\nZWRpdA== 19312\nQlQ= 19313\nTGludXg= 19314\nY291bnRyeQ== 19315\nbGVhZ3Vl 19316\nIGRpY2s= 19317\nIG9jdA== 19318\nIGluc2VydGluZw== 19319\nIHNjcmE= 19320\nIEJyZXdpbmc= 19321\nIDE5NjY= 19322\nIHJ1bm5lcnM= 19323\nIHBsdW4= 19324\naWR5 19325\nIERpYW4= 19326\nIGR5c2Z1bmN0aW9u 19327\nIGV4Y2x1c2lvbg== 19328\nIGRpc2dy 19329\nIGluY29ycG9yYXRl 19330\nIHJlY29uYw== 19331\nIG5vbWluYXRlZA== 19332\nIEFyY2hlcg== 19333\nZHJhdw== 19334\nYWNoZWxvcg== 19335\nIHdyaXRpbmdz 19336\nIHNoYWxsb3c= 19337\nIGhhc3Q= 19338\nIEJNVw== 19339\nIFJT 19340\nIHRoaWdo 19341\nIDE5NjM= 19342\nIGxhbWI= 19343\nIGZhdm9yZWQ= 19344\nYWdsZQ== 19345\nIGNvb2xlcg== 19346\nIEhvdXJz 19347\nIEdV 19348\nIE9yaWdpbg== 19349\nIGdsaW1wc2U= 19350\nLS0tLS0tLS0tLS0tLS0tLS0tLS0= 19351\nTGlt 19352\nIGNoZWVr 19353\nIGplYWxvdXM= 19354\nLSc= 19355\nIGhhcm5lc3M= 19356\nIFBvaXNvbg== 19357\nIGRpc2FiaWxpdGllcw== 19358\nbmVhcG9saXM= 19359\nIG91dGxvb2s= 19360\nIG5vdGlmeQ== 19361\nIEluZGlhbmFwb2xpcw== 19362\nIGFicnVwdA== 19363\nbnNpYw== 19364\nIGVuY3J5cHRlZA== 19365\nIGZvcmZl 19366\ncmVhdGg= 19367\nIHJhYmI= 19368\nIGZvdW5kYXRpb25z 19369\nIGNvbXBsaW1lbnQ= 19370\nIEludGVydmlldw== 19371\nIFN3ZQ== 19372\nIGFkb2xlc2M= 19373\nIG1vbml0b3Jz 19374\nIFNhY3JhbWVudG8= 19375\nIHRpbWVseQ== 19376\nIGNvbnRlbXBs 19377\nIHBvc2l0aW9uZWQ= 19378\nIHBvc3RlcnM= 19379\ncGhpZXM= 19380\naW92YXNjdWxhcg== 19381\ndm9pZA== 19382\nIEZpZnRo 19383\nIGludmVzdGlnYXRpdmU= 19384\nT1VO 19385\nIGludGVncmF0ZQ== 19386\nIElOQw== 19387\naXNoYQ== 19388\naWJsaW5ncw== 19389\nIFJlcXVlc3Q= 19390\nIFJvZHJpZ3Vleg== 19391\nIHNsaWRlcw== 19392\nIERY 19393\nIGZlbWluaXNt 19394\nIGRhdGFz 19395\nIGJlbmQ= 19396\naXJ1cw== 19397\nIE5pZ2VyaWE= 19398\nRm94 19399\nQ2hhbmdl 19400\nIGFpcnBsYW5l 19401\nIExhZGVu 19402\nIHB1YmxpY2l0eQ== 19403\naXh0eQ== 19404\nIGNvbW1pdG1lbnRz 19405\nIGFnZ3JlZ2F0ZQ== 19406\nIGRpc3BsYXlpbmc= 19407\nIEFycm93 19408\nIDEyMg== 19409\nIHJlc3BlY3Rz 19410\nYW5kcm9pZA== 19411\nc2l4 19412\nIFNoYQ== 19413\nIHJlc3RvcmF0aW9u 19414\nKVw= 19415\nV1M= 19416\nb3lz 19417\nIGlsbHVzdHJhdGU= 19418\nd2l0aG91dA== 19419\nMTI2 19420\nIOKUgg== 19421\nIHBpY2t1cA== 19422\nbmVscw== 19423\nIC4uLi4= 19424\nZm9vZA== 19425\nIEZlbg== 19426\nKT8= 19427\nIHBoZW5vbWVuYQ== 19428\nIGNvbXBhbmlvbnM= 19429\nIFdyaXRl 19430\nIHNwaWxs 19431\nIGJyaWRnZXM= 19432\nIFVwZGF0ZWQ= 19433\nIEZv 19434\nIGluc2VjdHM= 19435\nQVNISU5HVE9O 19436\nIHNjYXJl 19437\naWx0cg== 19438\nIFpoYW5n 19439\nIHNldmVyaXR5 19440\nIGluZHVs 19441\nMTQ5 19442\nIENvZmZlZQ== 19443\nIG5vcm1z 19444\nIHB1bHNl 19445\nIEZU 19446\nIGhvcnJpZmlj 19447\nIERlc3Ryb3k= 19448\nIEpTT04= 19449\nIG9saXZl 19450\nIGRpc2N1c3Nlcw== 19451\nUmVzdA== 19452\nRWxlY3Q= 19453\nIFdpbm4= 19454\nIFN1cnZpdg== 19455\nIEhhaXQ= 19456\nU3VyZQ== 19457\nb3BlZA== 19458\nIHJvb3RlZA== 19459\nIFNrZQ== 19460\nIEJyb256ZQ== 19461\nIGxvbA== 19462\nRGVmYXVsdA== 19463\nIGNvbW1vZGl0eQ== 19464\ncmVkaXRlZA== 19465\nIGxpYmVydGFyaWFu 19466\nIGZvcmJpZGRlbg== 19467\nIGdyYW4= 19468\n4Kg= 19469\nIGxhZw== 19470\nZW56 19471\nZHJpdmU= 19472\nIG1hdGhlbWF0aWNz 19473\nIHdpcmVz 19474\nIGNyaXRpY2FsbHk= 19475\nIGNhcmJvaHlk 19476\nIENoYW5jZWxsb3I= 19477\nIEVkZGll 19478\nIGJhbm5pbmc= 19479\nIEZyaQ== 19480\nIGNvbXBsaWNhdGlvbnM= 19481\nZXRyaWM= 19482\nIEJhbmdsYWRlc2g= 19483\nIGJhbmR3aWR0aA== 19484\nU3RvcA== 19485\nIE9yaWdpbmFsbHk= 19486\nIGhhbGZ3YXk= 19487\neW5hc3R5 19488\nc2hpbmU= 19489\nIHRhbGVz 19490\ncml0aWVz 19491\nYXZpZXI= 19492\nIHNwaW5uaW5n 19493\nIFdITw== 19494\nIG5laWdoYm91cmhvb2Q= 19495\nYmFjaA== 19496\nIGNvbW1lcmNl 19497\nIFNsZQ== 19498\nQlU= 19499\nIGVudHJlcHJlbmV1cg== 19500\nIHBlY3VsaWFy 19501\nIENvbW1lbnRz 19502\nZnJl 19503\nMzIw 19504\nSUNT 19505\nIGltYWdlcnk= 19506\nIENhbm9u 19507\nIEVsZWN0cm9uaWM= 19508\nc2hvcnQ= 19509\nKCg= 19510\nRGln 19511\nIGNvbW1lbQ== 19512\ndWNlZA== 19513\nIGluY2xpbmVk 19514\nIFN1bW1vbg== 19515\nIGNsaWZm 19516\nIE1lZGl0ZXJyYW5lYW4= 19517\nIHBvZXRyeQ== 19518\nIHByb3NwZXJpdHk= 19519\nIFJlY2U= 19520\nIHBpbGxz 19521\nbWVtYmVy 19522\nIGZpbmFsZQ== 19523\ndW5j 19524\nIEdpZw== 19525\n5L0= 19526\nIGxvZA== 19527\nIGJhY2t3YXJk 19528\nLSs= 19529\nIEZvcndhcmQ= 19530\nIHRocmk= 19531\nc3VyZQ== 19532\nIHNvYXA= 19533\nIEZY 19534\nUkVT 19535\nIFNleHVhbA== 19536\nb3Vsb3M= 19537\nIGZvb2xpc2g= 19538\nIHJpZ2h0ZW91cw== 19539\nIGNvZmY= 19540\ndGVycm9yaXNt 19541\ndXN0YWlu 19542\nb3Rlcg== 19543\nIGFidXNlcw== 19544\nbmV4dA== 19545\nIGFidXNpdmU= 19546\nIHRoZXJlYWZ0ZXI= 19547\nIHByb2hpYml0aW9u 19548\nIFNVUA== 19549\nIGRpcA== 19550\nIHJpcHBlZA== 19551\nIGluaGVyaXRlZA== 19552\nIGJhdHM= 19553\nc3RydQ== 19554\nR1Q= 19555\nIGZsYXdlZA== 19556\ncGhhYmV0 19557\nIGZvZw== 19558\nZG9vcnM= 19559\nIGltYWdpbmc= 19560\nIGRpZ2l0cw== 19561\nIEh1bmdhcnk= 19562\nIGFycm9n 19563\nIHRlYWNoaW5ncw== 19564\nIHByb3RvY29scw== 19565\nIEJhbmtz 19566\n4Lg= 19567\ncG91bmQ= 19568\nIEN1cnQ= 19569\nLiIp 19570\nLi8= 19571\nIGV4ZW1wdGlvbg== 19572\nZW5kaXg= 19573\nIE11bGw= 19574\nIGltcHJvdmVz 19575\nIEdhbWVy 19576\nZGltZW5zaW9uYWw= 19577\nSWNvbg== 19578\nIE1hcmdhcmV0 19579\nU3RhdHVz 19580\nZGF0ZXM= 19581\nIGludGVuZHM= 19582\nIGRlcGljdA== 19583\nIHBhcmtlZA== 19584\nSm9l 19585\nIE1hcmluZXM= 19586\nY2hub2xvZ3k= 19587\nISku 19588\nIGp1ZGdlZA== 19589\nIHdlaWdodHM= 19590\nUmF5 19591\nIGFwYXJ0bWVudHM= 19592\naGVzdGVy 19593\nIHJlaW5mb3JjZQ== 19594\nIG9mZmVuZGVy 19595\nb2NjdXA= 19596\nIHNvcmU= 19597\nZXB0 19598\nIFBIUA== 19599\nIEJyb3c= 19600\nIGF1dGhvcml6YXRpb24= 19601\nIFJpc2s= 19602\nIERlbGF3YXJl 19603\nIFFV 19604\nIG5vdGlmaWNhdGlvbnM= 19605\nIHN1bmxpZ2h0 19606\nIGV4Y2x1ZGU= 19607\nZGF0 19608\nIG1lc2g= 19609\nIFN1ZGFu 19610\nIGJlbG9uZ2Vk 19611\nIHN1YndheQ== 19612\nIG5vb24= 19613\nIEludGVyaW9y 19614\nb2xpY3M= 19615\nIExha2Vycw== 19616\nIGNvZGluZw== 19617\nRGlzY2xhaW1lcg== 19618\nQ2FsaWY= 19619\nT2xk 19620\nIGRpc2w= 19621\nPz8/Pz8= 19622\nIGNvbmZpcm1z 19623\nIHJlY3J1aXRtZW50 19624\nIGhvbWljaWRl 19625\nQ29uc2lkZXI= 19626\nIEplZmZyZXk= 19627\nZnR5 19628\nfTs= 19629\nIG9iamVjdGlvbg== 19630\nZG9pbmc= 19631\nIExlbw== 19632\nV2FudA== 19633\nIGdsb3c= 19634\nIENsYXJrZQ== 19635\nIE5vcm1hbg== 19636\nIHZlcmlmaWNhdGlvbg== 19637\nIHBhY2tldA== 19638\nIEZvcm11bGE= 19639\nIHBsYWc= 19640\nZXN2aWxsZQ== 19641\nIHNob3V0aW5n 19642\nIG92 19643\nIFJFQw== 19644\nIEJ1Yg== 19645\nIG5pbnRo 19646\nIGVuZXJn 19647\nIHZhbGlkaXR5 19648\nIHVwcw== 19649\namFjaw== 19650\nIG5laWdoYm9yaW5n 19651\nIE5lYw== 19652\nZXdvcmtz 19653\nIEhhYg== 19654\nYXJleg== 19655\nIHNwaW5l 19656\nIGV2ZW50dWFs 19657\nIExlYWRlcnM= 19658\nIENhcm4= 19659\nIHByb2JhdGlvbg== 19660\nIHJvbWFuY2U= 19661\nbXNn 19662\nIE1lY2hhbmljYWw= 19663\nRVJZ 19664\nUm9jaw== 19665\nIHBhcnRpc2Fu 19666\nTm9kZQ== 19667\nYXNzZXRz 19668\nbWluZW50 19669\nIGZvcmVpZ25lcnM= 19670\nIHRlc3RpZnk= 19671\nIFVzdWFsbHk= 19672\nbG9yZHM= 19673\nIEdyZW4= 19674\nIFBvd2VsbA== 19675\nQklM 19676\nIHNy 19677\nIGFkZGljdA== 19678\nIHNoZWxscw== 19679\nIHNpZ2g= 19680\nIFlhbGU= 19681\ndGVybml0eQ== 19682\nIDc1MA== 19683\nRVU= 19684\nIFJpZmxl 19685\nIHBhdHJvbg== 19686\nZW1h 19687\nIEJhbm5vbg== 19688\nYW5pdHk= 19689\nIHRyb3BpY2Fs 19690\nIFZJSQ== 19691\nY3Jvc3M= 19692\nRXZlcnl0aGluZw== 19693\nIElTTw== 19694\nIGh1bWJsZQ== 19695\nYXNzaW5n 19696\nIEZJRw== 19697\nIHVwZGF0aW5n 19698\neXNvbg== 19699\nIGNhbGNpdW0= 19700\nIGNvbXBldGVudA== 19701\nIHN0ZWVyaW5n 19702\nUHJvdA== 19703\nIFNZ 19704\nIEZpbmFscw== 19705\nIFJ1Zw== 19706\nMTU5 19707\nMTM3 19708\nIEdvbGY= 19709\nIDEyNg== 19710\nIGFjY29tbW9kYXRpb24= 19711\nIEh1Z2hlcw== 19712\nIGFlc3RoZXRpYw== 19713\nYXJ0aXNhbg== 19714\nIFR3aWxpZ2h0 19715\nIHByaW5jZQ== 19716\nIEFncmljdWx0dXJl 19717\nIERpc2Nv 19718\nIHByZWNlZGVudA== 19719\nIHR5cGluZw== 19720\nYXV0aG9yaXplZA== 19721\nT3B0aW9u 19722\nIEF1Yg== 19723\nbGlzaGVz 19724\nYWNodA== 19725\nbWFn 19726\nUGV0ZXI= 19727\nIFVGTw== 19728\nbW9udG9u 19729\nIExpdGg= 19730\nIGFyb20= 19731\nIHNlY3VyaW5n 19732\nIGNvbmZpbmVk 19733\ncHJpdmF0ZQ== 19734\nIHN3b3Jkcw== 19735\nIG1hcmtlcnM= 19736\nIG1ldGFib2xpYw== 19737\nc2VsZWN0 19738\nIEN1cnNl 19739\nIE90 19740\nZ3Jlc3NpdmU= 19741\nIGluY3VtYg== 19742\nIFNhZ2E= 19743\nIHByaWNlZA== 19744\nIGNsZWFyYW5jZQ== 19745\nQ29udGVudA== 19746\nIGRyaWxsaW5n 19747\nIG5vdGljZXM= 19748\nIGJvdXJnZW9pcw== 19749\nIHZlc3Q= 19750\nIGNvb2tpZQ== 19751\nIEd1YXJkaWFucw== 19752\ncnlz 19753\naW55bA== 19754\nIDEyNA== 19755\nIHBsYXVzaWJsZQ== 19756\nb25naA== 19757\nIE9kaW4= 19758\nIGNvbmNlcHRpb24= 19759\nIFl1aw== 19760\nIEJhZ2hkYWQ= 19761\nIEZsYWc= 19762\nQXVzdHJhbA== 19763\nIElCTQ== 19764\nIGludGVybmF0aW9uYWxseQ== 19765\nIFdpa2lMZWFrcw== 19766\nSUVE 19767\nIGN5bg== 19768\nIGNob29zZXM= 19769\nIFBpbGw= 19770\nIGNvbWJpbmluZw== 19771\nIHJhZGk= 19772\nIE1vaGFtbWVk 19773\nZGVmZW5zZQ== 19774\nYXRjaGluZw== 19775\nU3ViamVjdA== 19776\naWNpZW5jeQ== 19777\nRnJhbWU= 19778\nIHsi 19779\nIGNoZXNz 19780\nIHRpbWVy 19781\nMTkw 19782\nIHRpbg== 19783\nIG9yZGluYW5jZQ== 19784\nZW1ldGVyeQ== 19785\nIGFjY3VzaW5n 19786\nIG5vdGljZWFibGU= 19787\nIGNlbnRyZXM= 19788\nIGxpZA== 19789\nIE1pbGxz 19790\naW1ndXI= 19791\nIHpvb20= 19792\nZXJnaWM= 19793\nIGNvbXByZXNzaW9u 19794\ncHJpbQ== 19795\nZmluZA== 19796\nIHN1cmc= 19797\nIHBhbmQ= 19798\nIEtlZQ== 19799\nIENoYWQ= 19800\nY2VsbGVuY2U= 19801\nb3lsZQ== 19802\nIHNvY2lhbGlzbQ== 19803\nIFRyYXZpcw== 19804\nIE1Ieg== 19805\nIGd1aWxk 19806\nQUxMWQ== 19807\nIFN1YnNjcmliZQ== 19808\nIFJlbGF0ZWQ= 19809\nIG9jY3VycmVuY2U= 19810\naXRjaGluZw== 19811\nIGZpY3Rpb25hbA== 19812\nIGNydXNo 19813\nIEVB 19814\nY29k 19815\nbWl4 19816\nIFRyaXBsZQ== 19817\nIHJldHJpZXZl 19818\nIHN0aW11bHVz 19819\nIHBzeWNoaWF0 19820\nIERvb3I= 19821\nIGhvbW9zZXh1YWxpdHk= 19822\nIGVsZW1lbnRhcnk= 19823\nIGNlbGx1bGFy 19824\naWRpYW4= 19825\nIExhdW4= 19826\nIGludHJpZ3Vpbmc= 19827\nIGZvYW0= 19828\nIEJhc3M= 19829\naWRp 19830\naXRzdQ== 19831\nIGFzc3VyZQ== 19832\nIGNvbmdyYXQ= 19833\nIGJ1c2luZXNzbWFu 19834\nIEJvb3N0 19835\nY2xvc2U= 19836\nIGxpZWQ= 19837\nIHNjaWVuY2Vz 19838\nIE9tZWdh 19839\nIEdyYXBoaWNz 19840\nIDw9 19841\nc3Bva2Vu 19842\nIGNvbm5lY3Rpdml0eQ== 19843\nU2F0dXJkYXk= 19844\nIEF2ZW5nZXJz 19845\nIHRvZ2dsZQ== 19846\nIGFua2xl 19847\nIG5hdGlvbmFsaXN0 19848\nbW9kZWw= 19849\nIFBvb2w= 19850\nb3Bob2JpYQ== 19851\nVmFy 19852\nIE1vbnM= 19853\nYXRvcmllcw== 19854\nIGFnZ3Jlc3NpdmVseQ== 19855\nQ2xlYXI= 19856\nRm9yZ2U= 19857\nYWN0ZXJz 19858\nIGhlZGdl 19859\nIHBpcGVz 19860\nIGJsdW50 19861\nIHNx 19862\nIHJlbW90ZWx5 19863\nV2Vk 19864\nYXNlcnM= 19865\nIHJlZnJpZ2Vy 19866\nIHRpbGVz 19867\nIHJlc2N1ZWQ= 19868\nIGNvbXByaXNlZA== 19869\naW5za3k= 19870\nIG1hbmlm 19871\nYXZhbmF1Z2g= 19872\nIHByb2xpZmVy 19873\nIGFsaWduZWQ= 19874\neG1s 19875\nIHRyaXY= 19876\nIGNvb3JkaW5hdGlvbg== 19877\nIFBFUg== 19878\nIFF1b3Rl 19879\nMTM0 19880\nYmY= 19881\nIFNhdw== 19882\nIHRlcm1pbmF0aW9u 19883\nIDE5MA== 19884\nIGFkZGl0aW9ucw== 19885\nIHRyaW8= 19886\nIHByb2plY3Rpb25z 19887\nIHBvc2l0aXZlbHk= 19888\nIGluY2x1c2l2ZQ== 19889\nIG1lbWJy 19890\nMTk5MA== 19891\nb2xkZXI= 19892\nIHByYWN0aWNlZA== 19893\naW5rbGU= 19894\nQXJjaA== 19895\nIHN0YXJ0ZXJz 19896\nYXJpdXM= 19897\nIGludGVybWVkaWF0ZQ== 19898\nIEJlbmVm 19899\nIEtpbGxlcg== 19900\nIGludGVydmVudGlvbnM= 19901\nIEtpbA== 19902\nIEZseWluZw== 19903\nSW52 19904\nIHByZW1hdHVyZQ== 19905\nIHBzeWNoaWF0cmlj 19906\nIGluZGll 19907\nIGNvbGxhcg== 19908\nIFJhaW5ib3c= 19909\nYWZp 19910\nIGRpc3J1cHRpb24= 19911\nIEZPWA== 19912\nY2FzdGluZw== 19913\nIG1pc2RlbQ== 19914\nY3Jv 19915\nIHdpcGU= 19916\nYXJkb24= 19917\nIGJhc3Q= 19918\nIFRvbW15 19919\nIFJlcHJlc2VudGF0aXZl 19920\nIGJlbGx5 19921\nIFBP 19922\nIEJyZWl0YmFydA== 19923\nMTMy 19924\nIG1lc3NhZ2luZw== 19925\nU2hvdWxk 19926\nUmVmZXJlbmNlcw== 19927\nIEdSRQ== 19928\naXN0aWNhbA== 19929\nTFA= 19930\nIENhdg== 19931\nIENyYXp5 19932\nIGludHVpdGl2ZQ== 19933\na2VlcGluZw== 19934\nIE1vc3M= 19935\nIGRpc2NvbnRpbg== 19936\nIE1vZHVsZQ== 19937\nIHVucmVsYXRlZA== 19938\nIFByYWN0aWNl 19939\nIFRyYW5zcG9ydA== 19940\nIHN0YXRpc3RpY2FsbHk= 19941\nb3Jucw== 19942\nIHNpemVk 19943\ncHU= 19944\nIGNhZg== 19945\nIFdvcmxkcw== 19946\nIFJvZGdlcnM= 19947\nIEx1bg== 19948\nIENvbWlj 19949\nbGl2aW5n 19950\nIGNhcmVk 19951\nIGNsaW1iZWQ= 19952\nKXs= 19953\nIGNvbnNpc3RlZA== 19954\nIG1lZGlldmFs 19955\nZm9saw== 19956\nIGhhY2tlZA== 19957\nIGRpcmU= 19958\nIEhlcm1pb25l 19959\nIHRlbmRlZA== 19960\nY2VhbnM= 19961\nRGFuaWVs 19962\nd2VudA== 19963\nIGxlZ2lzbGF0b3Jz 19964\nIHJlZGVz 19965\nZ2FtZXM= 19966\nIGdu 19967\nYW1pbGlhcg== 19968\nICsr 19969\nZ2d5 19970\ndGhyZWF0 19971\nIG1hZ25ldA== 19972\nIHBlcmNlaXZl 19973\nIHppcA== 19974\nIGluZGljdG1lbnQ= 19975\nIGNyaXRpcXVl 19976\nZ2FyZA== 19977\nIFNhZmU= 19978\nIENyZWFt 19979\nIGFkdmVudA== 19980\nb2Jh 19981\nIHZvd2Vk 19982\nb3VzYW5kcw== 19983\nIHNraQ== 19984\nIGFib3J0aW9ucw== 19985\ndWFydA== 19986\nIHN0dW5uZWQ= 19987\nIGFkdmFuY2luZw== 19988\nIGxhY2tlZA== 19989\nIFwi 19990\nIHNjaGl6b3BocmVu 19991\nIGVsZWdhbnQ= 19992\nIGNvbmZlcmVuY2Vz 19993\nIGNhbmNlbGVk 19994\nIEh1ZHNvbg== 19995\nIEhvcGVmdWxseQ== 19996\nIHRydW1w 19997\nIGZyZXF1ZW5jaWVz 19998\nIG1ldGVvcg== 19999\nIEp1bmlvcg== 20000\nIEZsZWV0 20001\nIE1hbGNvbG0= 20002\nIFRvb2xz 20003\nIC4uLi4uLi4u 20004\nIGhvYmJ5 20005\nIEV1cm9wZWFucw== 20006\nIDE1MDA= 20007\nIEludG8= 20008\nIHN3YXk= 20009\nIEFwcHJv 20010\nIENvbXBs 20011\nQ29tbXVuaXR5 20012\nIHRpZGU= 20013\nIFN1bW1pdA== 20014\n5Ls= 20015\nIGludGVydmFscw== 20016\nIEV0aGVy 20017\nIGhhYml0YXQ= 20018\nIFN0ZXZlbnM= 20019\nbGlzaGluZw== 20020\nIERvbWFpbg== 20021\nIHRyaWdnZXJz 20022\nIGNoYXNpbmc= 20023\nIGNoYXJt 20024\nIEZsb3dlcg== 20025\naXRvcmVk 20026\nIGJsZXNzaW5n 20027\nIHRleHR1cmVz 20028\nRml2ZQ== 20029\nIGxpcXVvcg== 20030\nUlA= 20031\nRklO 20032\nIDE5NjI= 20033\nQ0FS 20034\nVW5rbm93bg== 20035\nIHJlc2ls 20036\nIExpbHk= 20037\nIGFidW5kYW5jZQ== 20038\nIHByZWRpY3RhYmxl 20039\ncmFy 20040\nIGJ1bGxzaGl0 20041\nbGVlbg== 20042\nY2hldA== 20043\nTW9y 20044\nTXVjaA== 20045\n5Lk= 20046\nIGVtcGhhc2l6ZWQ= 20047\nIGNydXN0 20048\nIHByaW1pdGl2ZQ== 20049\nIGVuam95YWJsZQ== 20050\nIFBpY3R1cmVz 20051\nIHRlYW1tYXRl 20052\ncGxlcg== 20053\nIFRvbA== 20054\nIEthbmU= 20055\nIHN1bW1vbmVk 20056\ndGh5 20057\ncmFtYQ== 20058\nIEhvbmRh 20059\nIHJlYWxpemluZw== 20060\nIHF1aWNrZXI= 20061\nIGNvbmNlbnRyYXRl 20062\nY2xlYXI= 20063\nIDIxMA== 20064\nIEVyZG9nYW4= 20065\nYXJpcw== 20066\nIHJlc3BvbmRz 20067\nIEJJ 20068\nIGVsaWdpYmlsaXR5 20069\nIHB1c2hlcw== 20070\nIElkYWhv 20071\nIGFnZ3Jhdg== 20072\nIHJ1aW5z 20073\ndXJhdGlvbnM= 20074\nIGJhbnM= 20075\nIGFuYXQ= 20076\nc2hhcmU= 20077\nIGdyaW5k 20078\naGlu 20079\ndW1lbg== 20080\nIHV0aWxpdGllcw== 20081\nIFlhbmtlZXM= 20082\nIGRhdGFiYXNlcw== 20083\nIERE 20084\nIGRpc3BsYWNlZA== 20085\nIGRlcGVuZGVuY2llcw== 20086\nIHN0aW11bGF0aW9u 20087\naHVu 20088\naG91c2Vz 20089\nIFByZXR0eQ== 20090\nIFJhdmVucw== 20091\nIFRPREFZ 20092\nIGFzc29jaWF0ZXM= 20093\nIHRoZXJhcGU= 20094\nY2xlZA== 20095\nIGRlZXI= 20096\nIHJlcGFpcnM= 20097\ncmVudGljZQ== 20098\nIHJlY2VwdG9ycw== 20099\nIHJlbWVk 20100\nIENl 20101\nIG1hcnJpYWdlcw== 20102\nIGJhbGxvdHM= 20103\nIFNvbGRpZXI= 20104\nIGhpbGFyaW91cw== 20105\nb3Bs 20106\nMTM4 20107\nIGluaGVyZW50bHk= 20108\nIGlnbm9yYW50 20109\nIGJvdW5jZQ== 20110\nIEVhc3Rlcg== 20111\nUkVMQVRFRA== 20112\nIEN1cnJlbmN5 20113\nRVY= 20114\n44Oe 20115\nIExlYWQ= 20116\nIGRlY2Vhc2Vk 20117\nQnJpZW4= 20118\nIE11c2s= 20119\nSlM= 20120\nIG1lcmdl 20121\naGVhcnRlZA== 20122\nY3JlYXQ= 20123\nbWl0dA== 20124\nbXVuZA== 20125\nIOKAiw== 20126\nIEJhZw== 20127\nIHByb2plY3Rpb24= 20128\nIGphdmE= 20129\nIFN0YW5kYXJkcw== 20130\nIExlb25hcmQ= 20131\nIGNvY29udXQ= 20132\nIFBvcHVsYXRpb24= 20133\nIHRyYWplY3Q= 20134\nIGltcGx5 20135\nIGN1cmlvc2l0eQ== 20136\nIERC 20137\nIEZyZXNo 20138\nIFBvcg== 20139\nIGhlYXZpZXI= 20140\nbmV5cw== 20141\nZ29tZXJ5 20142\nIGRlc2VydmVk 20143\nIHBocmFzZXM= 20144\nIEdD 20145\nIHllYXN0 20146\nZGVzYw== 20147\nRGVhdGg= 20148\nIHJlYm9vdA== 20149\nIG1ldGFkYXRh 20150\nSUNBTA== 20151\nIHJlcGF5 20152\nIEluZGVwZW5kZW5jZQ== 20153\nIHN1YnVyYmFu 20154\naWNhbHM= 20155\nIGF0b3A= 20156\nIGFsbG9jYXRpb24= 20157\nZ2VuZXJhdGlvbg== 20158\nIEdyYW0= 20159\nIG1vaXN0dXJl 20160\nIHBpbmU= 20161\nIExpYmVyYWxz 20162\nIGFpZGVz 20163\nIHVuZGVyZXN0 20164\nIEJlcnJ5 20165\nIGNlcmVtb24= 20166\nMzcw 20167\nYXN0cm91cw== 20168\nIFBpcmF0ZXM= 20169\nIHRlbnNl 20170\nIEluZHVzdHJpZXM= 20171\nIEFwcGVhbHM= 20172\nIE5lYXI= 20173\nIOijj+c= 20174\nIGxvdmVycw== 20175\nIENBUA== 20176\nIENyYXc= 20177\nIGdpYW50cw== 20178\nIGVmZmljYWN5 20179\nRWxlbWVudA== 20180\nIEJlaGF2aW9y 20181\nIFRveW90YQ== 20182\nIGludGVzdA== 20183\nUHJpdg== 20184\nQUk= 20185\nIG1hbmV1dmVy 20186\nIHBlcmZlY3Rpb24= 20187\nIGJhbmc= 20188\ncGFwZXI= 20189\ncmlsbA== 20190\nR2Vvcmdl 20191\nYm9yZGVy 20192\naW50ZXJz 20193\nIFNldGg= 20194\nIGNsdWVz 20195\nIExldmk= 20196\nIFJldmVudWU= 20197\nMTQ3 20198\nIHZhcG9y 20199\nIGZvcnR1bmF0ZQ== 20200\nIHRocmVhdGVucw== 20201\nIHZldA== 20202\nIGRlcGVuZGVuY3k= 20203\nZXJzZWQ= 20204\nYXJ0aWNsZQ== 20205\nIEJsaXp6YXJk 20206\nIGNobG9y 20207\nIG1pbnVz 20208\nIEJpbGxz 20209\nIGNyeXB0b2N1cnJlbmN5 20210\nIG1ldGFib2xpc20= 20211\ndGVyaW5n 20212\nIHBlc3RpYw== 20213\nc3RlcHM= 20214\nIFRyZWFzdXJl 20215\ncmFjdGVk 20216\nIENvbnN0YW50 20217\nIHRlbXA= 20218\nMTM5 20219\nIERldGVjdGl2ZQ== 20220\ndXJhbGx5 20221\nIHJlY292ZXJpbmc= 20222\nIGNvcnRleA== 20223\nIDE0NA== 20224\nY2xvc2Vk 20225\nIHByZWp1ZGljZQ== 20226\nYXVudGVk 20227\nIHN0b3Jtcw== 20228\nIE5PVw== 20229\nIG1hY2hpbmVyeQ== 20230\nQWRkcmVzcw== 20231\nIGNvbXBlbGxlZA== 20232\nMjcw 20233\nIGRlc3BhaXI= 20234\nYmFuZQ== 20235\nIHZlZ2V0YWJsZQ== 20236\nIGJlZHM= 20237\nTGVhcm4= 20238\nIGNvbG9yZnVs 20239\nIHNwaWtl 20240\nIG1hcmdpbnM= 20241\nIHN5bXBhdGh5 20242\nIHdvcmtzaG9w 20243\nIENCQw== 20244\nU2F0 20245\nIGJ1cm5z 20246\nIEdlbmRlcg== 20247\nIDEyOQ== 20248\nIENhYmxl 20249\nIGRlYnRz 20250\nIFRoZXJlc2E= 20251\nIHJlZmxlY3Rpbmc= 20252\nIGFpcnN0 20253\nIHJpbQ== 20254\ncmFtaWQ= 20255\nIHdlYWtuZXNzZXM= 20256\nV3JpdA== 20257\nb2dnbGU= 20258\ndGk= 20259\nIENoYXJnZQ== 20260\nIHdlaWdoZWQ= 20261\nICgu 20262\nIGxhdWdodGVy 20263\nIHJvdXRlcg== 20264\nIERlbW9jcmFjeQ== 20265\nRGVhcg== 20266\nIGhhc2h0 20267\nIGR5 20268\nIGhpbnRz 20269\ncnVubmluZw== 20270\nIGZpbmlzaGVz 20271\nYXJ1cw== 20272\nTWFzcw== 20273\ncmVzdWx0 20274\nYXNjdXM= 20275\nIHZpbnRhZ2U= 20276\nIGNvbnF1 20277\nIHdpbGRseQ== 20278\nYWNpc3Q= 20279\nIGxpbmd1 20280\nIHByb3RhZ29uaXN0 20281\nc3Ryb20= 20282\ndGVlbnRo 20283\nIFNvbG8= 20284\nbWFj 20285\nZmlsbGVk 20286\nIHJlbm93bg== 20287\naXRpdmVz 20288\nIG1vdGl2ZQ== 20289\nIEFudGFy 20290\nIE1hbm4= 20291\nIEFkanVzdA== 20292\nIHJvY2tldHM= 20293\nIHRyb3VibGluZw== 20294\nZWk= 20295\nIG9yZ2FuaXNtcw== 20296\nYXNzaXM= 20297\nQ2hyaXN0aWFu 20298\nIDE0NQ== 20299\nIEhhc3M= 20300\nIHN3YWxs 20301\nIHdheA== 20302\nIFN1cnZpdmFs 20303\nVlM= 20304\nIE11cmQ= 20305\ndmQ= 20306\nc3RhbmRhcmQ= 20307\nIGRyYWdvbnM= 20308\nIGFjY2VsZXJhdGlvbg== 20309\ncmF0aW9uYWw= 20310\nZmluYWw= 20311\nIHBhaXJlZA== 20312\nIEV0aGVyZXVt 20313\nIGludGVyZmFjZXM= 20314\nIHJlc2VudA== 20315\nIGFydGlmYWN0cw== 20316\nxas= 20317\nYXJlbA== 20318\nIGNvbXBldGl0b3I= 20319\nIE5pY2hvbGFz 20320\nIFN1cmZhY2U= 20321\nY3Bw 20322\nIFRvdA== 20323\nIGVjb25vbWljYWxseQ== 20324\nIG9yZ2FuaXNlZA== 20325\nIGVuZm9yY2Vk 20326\naW5obw== 20327\nIHZhcmlldGllcw== 20328\nIGFiZG9t 20329\nIEJhaWxleQ== 20330\naWRhdg== 20331\nIFNhbHY= 20332\ncGFpZA== 20333\nIGFsdGl0dWRl 20334\nZXNzZXJ0 20335\nIEd1dGVuYmVyZw== 20336\nYXJlYQ== 20337\nb3BvdWxvcw== 20338\nIHByb2Zlc3NvcnM= 20339\naWdncw== 20340\nIEZhdGU= 20341\naGV5 20342\nIDMwMDA= 20343\nRGlzdA== 20344\nIHR3aW5z 20345\nY2lsbA== 20346\nIE1hcHM= 20347\nIHRyYXBz 20348\nIHdlZWQ= 20349\nIEtpc3M= 20350\nIHlvZ2E= 20351\nIHJlY2lwaWVudHM= 20352\nIFdlc3RtaW5zdGVy 20353\nIHBvb2xz 20354\nIFdhbG1hcnQ= 20355\nMTg4 20356\nIFNjaG9vbHM= 20357\nYXR0YWNr 20358\nIEFSTQ== 20359\ncGFyYWdyYXBo 20360\nV2FybmluZw== 20361\namw= 20362\nIHNlbGZpc2g= 20363\nYW5jaGV6 20364\nIEhlaWdodHM= 20365\nRnJl 20366\nIFNvcGg= 20367\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 20368\ndG1s 20369\nMzMz 20370\nIHJhaWRz 20371\nIHNhdGVsbGl0ZXM= 20372\nS0VZ 20373\nIGxhc3Rz 20374\n0YI= 20375\nSW5z 20376\nIERhbWU= 20377\nIHVucHJlZGljdA== 20378\nLy8v 20379\nZ2hhaQ== 20380\nIGFydGlsbGVyeQ== 20381\nIGNydWlzZQ== 20382\nIGdlbA== 20383\nIENhYmluZXQ= 20384\nIGJsb3dz 20385\nIEVzcA== 20386\nIHByb3hpbWl0eQ== 20387\nb3RoZQ== 20388\nIFNraWxscw== 20389\nIFVwcGVy 20390\nb2Jv 20391\nIE5EUA== 20392\nIGVuam95cw== 20393\nIHJlcGVhdGluZw== 20394\nIENvbnN0cnVjdGlvbg== 20395\nIFF1ZXN0aW9ucw== 20396\nSGlsbGFyeQ== 20397\nIHVpbnQ= 20398\nIHByb2Nlc3NvcnM= 20399\nIEdpYnNvbg== 20400\nIE11bHRpcGxl 20401\ncWE= 20402\nIEJvbQ== 20403\nIE1pbGVz 20404\ndmVudGlvbmFs 20405\nIGh1cnRz 20406\nc2tpbg== 20407\nIEFJRFM= 20408\nIGFkdmlzZXJz 20409\nIFJvb3Q= 20410\nIG1ldGhvZG9sb2d5 20411\nIERhbGU= 20412\nIGRldG9u 20413\nIEtub3dsZWRnZQ== 20414\nc2VxdWVudGx5 20415\nIDEyMQ== 20416\nIGNvbm5lY3Rz 20417\nQ3k= 20418\nIERhbmdlcg== 20419\nIGNvbnRyaWJ1dG9ycw== 20420\nIEJlbnQ= 20421\nIGJyYXNz 20422\nIEd1bnM= 20423\naW50bw== 20424\nIEZvcnR1bmU= 20425\nIGJyb2tlcg== 20426\nYmFsYW5jZQ== 20427\nIGxlbmd0aHM= 20428\nIHZpYw== 20429\nIGF2ZXJhZ2luZw== 20430\nIGFwcHJvcHJpYXRlbHk= 20431\nIENhbWVyYQ== 20432\nIHNhbmR3aWNo 20433\nIENEQw== 20434\nIGNvb3JkaW5hdGU= 20435\nIG5hdmln 20436\nIGdvb2RuZXNz 20437\nbGFpbQ== 20438\nIGJyYWtl 20439\nIGV4dHJlbWlzdA== 20440\nIFdha2U= 20441\nIE1lbmQ= 20442\nIFRpbnk= 20443\nIENPTA== 20444\nIFJG 20445\nIER1YWw= 20446\nIFdpbmU= 20447\nQ2FzZQ== 20448\nIHJlZmluZWQ= 20449\nIGxhbXA= 20450\nTGVhZA== 20451\nIGJhcHQ= 20452\nIENhcmI= 20453\nIFNhZGQ= 20454\nIE1pbm5lYXBvbGlz 20455\nUERG 20456\nRWFybHk= 20457\nIEhpZGRlbg== 20458\nSXRz 20459\nIFRJTUU= 20460\nIHBhcA== 20461\nIGNvbW1pc3Npb25lZA== 20462\nIEZldw== 20463\nIENvbHRz 20464\nIEJyZW4= 20465\nIGJvdGhlcmVk 20466\nIGxpa2V3aXNl 20467\nRXhwZXI= 20468\nIFNjaHc= 20469\nY3J5 20470\nbm4= 20471\nIE1pdGNo 20472\naW1vbg== 20473\nTUc= 20474\nYm0= 20475\nVU1Q 20476\ncmF5cw== 20477\nIHJlZ2lzdHJ5 20478\nIDI3MA== 20479\nYWNoaW5l 20480\ncmVsbGE= 20481\nYW50aW5n 20482\nMDAwMDA= 20483\nIHJ1aW5lZA== 20484\nc3BvdA== 20485\nIHRh 20486\nIG1heGltaXpl 20487\nIGluY29udmVu 20488\nRGVhZA== 20489\nSHVtYW4= 20490\nRW5hYmxlZA== 20491\nIE1hcmll 20492\nIGNoaWxs 20493\nIFBhcmFkaXNl 20494\nIHN0YXJyaW5n 20495\nIExhdGlubw== 20496\nIFByb3RvY29s 20497\nIEVWRVI= 20498\nIHN1cHBsaWVycw== 20499\nbWVzc2FnZQ== 20500\nIEJyb2Nr 20501\nIHNlcnVt 20502\n4paI4paI4paI4paI 20503\nIGVuY29tcA== 20504\nIGFtYml0aW9u 20505\ndWVzZQ== 20506\nIGFycm93cw== 20507\nQW5kcmV3 20508\nIGFudGVubmE= 20509\nIDE5NjE= 20510\nIEJhcms= 20511\nIGJvb2w= 20512\n44Kq 20513\nIFN0b3JhZ2U= 20514\nIHJhaWx3YXk= 20515\nIHRvdWdoZXI= 20516\nIENhZA== 20517\nIHdhc2hpbmc= 20518\nUHk= 20519\nJ10= 20520\nZW1iZWQ= 20521\nIE1lbXBoaXM= 20522\nYWNrbGU= 20523\nIGZhbW91c2x5 20524\nIEZvcnR1bmF0ZWx5 20525\nb3ZpZXM= 20526\nIG1pbmRzZXQ= 20527\nIHNuZWFr 20528\nIERo 20529\nUkFX 20530\nIFNpbXBzb24= 20531\nIGxpdmVzdA== 20532\nIGxhbmRtYXJr 20533\nIGNlbWVudA== 20534\nTG93 20535\nIHRocmlsbGVk 20536\nIENvdXJzZQ== 20537\naW5lbA== 20538\nIGNodWNr 20539\naWRhdGU= 20540\nZ2xvYmFs 20541\nIHdoaXQ= 20542\nIO+/vQ== 20543\nYWRheXM= 20544\nc2tp 20545\nIFNW 20546\nIHZpcnVzZXM= 20547\nMzA2 20548\nIFJlc3BvbnM= 20549\nIHRoZWF0ZXJz 20550\nIEJyYW5jaA== 20551\nIEdlbmV2YQ== 20552\nIE1L 20553\nIHVuYmVsaWV2 20554\nIGNvbW11bmlzdA== 20555\nT3JpZ2luYWw= 20556\nIFJlY2VpdmVk 20557\nIFRyYW5zZmVy 20558\nIEFyZw== 20559\nSW5wdXQ= 20560\nIFN0cmF0ZWd5 20561\nIHBhbGFjZQ== 20562\ndGhlbmluZw== 20563\nRHJp 20564\nIHNlbnRlbmNpbmc= 20565\ndW1ibmFpbA== 20566\nIHBpbnM= 20567\ncmVjeQ== 20568\nIHNpYmxpbmdz 20569\nR2V0dGluZw== 20570\nIEJV 20571\nIE5vcnRod2VzdA== 20572\nIHByb2xvbmdlZA== 20573\nIFNha3VyYQ== 20574\nQ29tYg== 20575\nIEJvdXI= 20576\nIGluYWRlcXVhdGU= 20577\nIEthc2g= 20578\nIHVzZXJuYW1l 20579\nIEltcHJvdmU= 20580\nIGJhdHRsaW5n 20581\nIE1BQw== 20582\nIGN1cnJpY3VsdW0= 20583\nIHNvZGE= 20584\nIENhbm5vbg== 20585\nIHNlbnNpYmxl 20586\nc3BvbnM= 20587\nRGVjZW1iZXI= 20588\nIHdpY2tlZA== 20589\nIFBlbmd1 20590\nIGRpY3RhdG9ycw== 20591\nIEhlYXJ0cw== 20592\nb2d5bg== 20593\nIHNpbWlsYXJpdGllcw== 20594\nIFN0YXRz 20595\nIGhvbGxvdw== 20596\naXRhdGlvbnM= 20597\nIjpb 20598\nIGhvdmVy 20599\nIExpc3Rlbg== 20600\nc2No 20601\nU3VuZA== 20602\nIGNhZA== 20603\nIFBhcmtz 20604\nIGx1cg== 20605\nIGh5cGU= 20606\nIExlbQ== 20607\nTkFNRQ== 20608\naXN1cmU= 20609\nRnJpZGF5 20610\nIHNob290cw== 20611\nIGNsb3Nlcw== 20612\nIGRi 20613\nIFJpZGdl 20614\nIERpZmZlcmVudA== 20615\nIHJlcGxpZXM= 20616\nIEJyb2Fkd2F5 20617\nb3BlcnM= 20618\nIGludG9sZXI= 20619\nIFpldXM= 20620\nYWtlc3Bl 20621\nIHByb3ByaWV0YXJ5 20622\nIHJlcXVlc3Rpbmc= 20623\nIGNvbnRyb2xsZXJz 20624\nIE1JTg== 20625\naW1lZGlh 20626\nYmVjY2E= 20627\nIGV4cGFucw== 20628\nIG9pbHM= 20629\nQm90 20630\nIENoYW5k 20631\nIHByaW50ZXI= 20632\nIHRvcHBlZA== 20633\nIFBPTA== 20634\nIEVhcmxpZXI= 20635\nU29jaWFs 20636\nYXZpbg== 20637\nIGRlY3JlYXNlcw== 20638\nIFNlYg== 20639\nIHNwZWNpZmljYXRpb25z 20640\nIEJsYXN0 20641\nIEt1cnQ= 20642\nIGZyZWVs 20643\nQnJvd24= 20644\nIGRpbGln 20645\ncm9l 20646\nIFByb2JsZW0= 20647\nIFF1YWQ= 20648\nIGRlY2VudHJhbA== 20649\nIFZlY3Rvcg== 20650\nYW51dA== 20651\nIHBsdWdpbnM= 20652\nIEdyZWdvcnk= 20653\nIGZ1Y2tlZA== 20654\nZWxpbmVz 20655\nIEFtYmFzc2Fkb3I= 20656\ndGFrZQ== 20657\nIGNsZWFucw== 20658\nb25neWFuZw== 20659\nQW5vbnltb3Vz 20660\nc3Rybw== 20661\nIn0= 20662\nYWxpbmU= 20663\nIE9kZA== 20664\nIEV1Zw== 20665\nMjE2 20666\nIGJvaWw= 20667\nIFBvd2Vycw== 20668\nIG51cnNlcw== 20669\nT2J2aW91c2x5 20670\nIFRlY2huaWNhbA== 20671\nIGV4Y2VlZGVk 20672\nT1JT 20673\nIGV4dHJlbWlzdHM= 20674\nIHRyYWNlcw== 20675\nZXhwbA== 20676\nIGNvbXI= 20677\nIFNhY2g= 20678\nKS8= 20679\nIG1hc2tz 20680\nIHNjaQ== 20681\nQm9u 20682\nIHJlZ3Jlc3Npb24= 20683\nd2VnaWFu 20684\nIGFkdmlzb3I= 20685\naXR1cmVz 20686\nIFZv 20687\nZXhhbXBsZQ== 20688\nIEluc3RydWN0 20689\nIHNpZWdl 20690\nIHJlZHVjdGlvbnM= 20691\ncHRy 20692\nIHN0YXR1dG9yeQ== 20693\nIHJlbW92ZXM= 20694\nIHB1Y2s= 20695\ncmVkaXRz 20696\nIGJlZQ== 20697\nIHNhbGFk 20698\nIHByb21vdGlvbnM= 20699\nIEpvc2h1YQ== 20700\nd2l0aHN0YW5kaW5n 20701\nRVRI 20702\nIENoYQ== 20703\naW11cw== 20704\nIGV4cGVuZGl0dXJl 20705\nYXVudGluZw== 20706\nIGRlbGlnaHRlZA== 20707\nIDE1NQ== 20708\nYmVo 20709\nIGNhcnBldA== 20710\nIFNwYXJ0 20711\nIGp1bmdsZQ== 20712\nbGlzdHM= 20713\nIGJ1bGx5aW5n 20714\nIE5vYmVs 20715\nIEdsZW4= 20716\nIHJlZmVyZW5jZWQ= 20717\nIGludHJvZHVjZXM= 20718\nc2Vpbg== 20719\nIGNob3BwZWQ= 20720\nZ2xhc3M= 20721\nIFdyZXN0 20722\nIG5ldXRyYWxpdHk= 20723\nIOKZ 20724\nIGludmVzdGlnYXRvcg== 20725\nIHNoZWx2ZXM= 20726\nIHVuY29uc3RpdHV0aW9uYWw= 20727\nIHJlcHJvZHVjdGlvbg== 20728\nIG1lcmNoYW50 20729\nbWlh 20730\nIG1ldHJpY3M= 20731\nIGV4cGxvc2l2ZXM= 20732\nIFNvbmlh 20733\nIGJvZGlseQ== 20734\nIHRoaWNrbmVzcw== 20735\nIHByZWRvbWluYW50bHk= 20736\nIEFiaWxpdHk= 20737\nIG1vbml0b3JlZA== 20738\nSUNI 20739\nIF0u 20740\nIE1hcnRpbmV6 20741\nIHZpc2liaWxpdHk= 20742\nIHF1ZXJpZXM= 20743\nIGdlbm9jaWRl 20744\nIFdhcmZhcmU= 20745\nUXVlcnk= 20746\nIHN0dWRpb3M= 20747\nIGVtYnJ5 20748\nIGNvcnJpZG9y 20749\nIGNsZWFuZWQ= 20750\nY29tcGxldGU= 20751\nIE1I 20752\nIGVucm9sbG1lbnQ= 20753\nSU5HUw== 20754\nIGltcGFjdGVk 20755\nIGRpc2FzdHJvdXM= 20756\nIFl1bg== 20757\nIENsYWlyZQ== 20758\nIEJhc2ljYWxseQ== 20759\neXQ= 20760\ndXN0ZXJpdHk= 20761\nIGluZGlyZWN0bHk= 20762\nd2lr 20763\nIGRvZA== 20764\nIENhcnI= 20765\nIGFtcA== 20766\nIHByb2hpYml0 20767\nIEluaXRpYWw= 20768\nIFJk 20769\naWpp 20770\nIGVkdWNhdGU= 20771\nY29ybg== 20772\naW90dA== 20773\nIEJlYXV0eQ== 20774\nIGRldGVjdGl2ZQ== 20775\nIENvbm4= 20776\nc2luY2U= 20777\nIHN0YWdnZXI= 20778\nIG9iZXNl 20779\nIGJyZWU= 20780\nb2xvZ2lj 20781\naXNzZQ== 20782\nd2Fsa2Vy 20783\nIGJsYWRlcw== 20784\nIGxhd2Z1bA== 20785\nZnVuYw== 20786\nIEJlaGluZA== 20787\nIGFwcGV0aXRl 20788\nICgq 20789\nIHRlbm5pcw== 20790\nIG9mZnNwcmluZw== 20791\nIGpldHM= 20792\nIHN0cnVjdHVyZWQ= 20793\nIGFmb3JlbWVudGlvbmVk 20794\nTm92 20795\nIHNjYWxpbmc= 20796\nZmlsbA== 20797\nIHN0ZXc= 20798\nIGN1cmI= 20799\nIFN0ZXBoYW4= 20800\nZWRJbg== 20801\nU0Y= 20802\nb2JpYw== 20803\n6a2U 20804\nb3Vn 20805\nIE1N 20806\nIGdlbmV0aWNhbGx5 20807\nb3Bleg== 20808\nMTM2 20809\nIHVtYg== 20810\nYW5jZXJz 20811\nIGNvaG9ydA== 20812\nIG1lcmNoYW5kaXNl 20813\nIGltcG9zaW5n 20814\nIExlZ2lzbGF0dXJl 20815\nIEFyY2hpdmU= 20816\naXZpYQ== 20817\nIE5hdmFs 20818\nIG9mZmVuY2Vz 20819\nIG1pcmFjbGU= 20820\nIHNuYXBwZWQ= 20821\nIGZvZXM= 20822\nIGV4dGVuc2l2ZWx5 20823\nIFJhZg== 20824\nIGNhdGVy 20825\nZWRpZW5jZQ== 20826\nS2l0 20827\nIEJpbg== 20828\nIHJlY29tbWVuZHM= 20829\nIENpdGllcw== 20830\nIHJpZ2lk 20831\nIFJFQUQ= 20832\nIE5vYmxl 20833\nIFRpYW4= 20834\nIGNlcnRpZmljYXRlcw== 20835\nYW50aXM= 20836\nb2lsZXI= 20837\nIEJ1ZGRoaXN0 20838\nZGlk 20839\nIHN1cnZleWVk 20840\nIGRvd253YXJk 20841\nIHByaW50cw== 20842\nIE1vdGlvbg== 20843\ncm9uaWNz 20844\nIFNhbnM= 20845\nb3NzaWJseQ== 20846\ndWN0aW9ucw== 20847\nIGNvbG9uaWVz 20848\nIERhbmlzaA== 20849\ndW5pdA== 20850\nIHNwb2ls 20851\nIGFkdmlzb3J5 20852\nYmVycmllcw== 20853\nUGxhbg== 20854\nIHNwZWNpZmljYXRpb24= 20855\nb3BoZXJz 20856\nIFJlc291cmNl 20857\nIHNoaXJ0cw== 20858\ncHJpc2luZ2x5 20859\nY29tbXVuaWNhdGlvbnM= 20860\nIHRyaXZpYWw= 20861\nIG1lbnRpb25pbmc= 20862\naXNleHVhbA== 20863\nIHN1cHBsZW1lbnRz 20864\nIHN1cGVydmlzaW9u 20865\nQlA= 20866\ndm9y 20867\nIHdpdA== 20868\nIGNvb2xkb3du 20869\nIHBsYWludGlmZg== 20870\nIFJldmlld3M= 20871\nIFNyaQ== 20872\nIE1pbnQ= 20873\nIFN1Z2Fy 20874\nIGFmdGVyd2FyZA== 20875\nIFByaWVzdA== 20876\nIEludmVzdG1lbnQ= 20877\nb2dlbmU= 20878\nIFRha2luZw== 20879\nIHN0cmV0Y2hpbmc= 20880\nIGluZmxhbW1hdGlvbg== 20881\nIFRlaHJhbg== 20882\nIGxpbmluZw== 20883\nIGZyZWV6aW5n 20884\nIEVudGl0eQ== 20885\nIGluc3BpcmluZw== 20886\nc3BlY2lhbA== 20887\ncHJpY2U= 20888\nIHN1ZQ== 20889\nIFBvcnRlcg== 20890\nb3VuZ2U= 20891\nRVRB 20892\nIERlcmVr 20893\nIEx1aXM= 20894\ndW8= 20895\neW1waA== 20896\nIGV4dGVyaW9y 20897\naWhpbA== 20898\nIEFzaGxleQ== 20899\naW5hdG9y 20900\nIG51dHJpZW50cw== 20901\nIFRocm9uZXM= 20902\nIGZpbmFuY2Vz 20903\nIEluc3BlY3Q= 20904\nIHNwZWNpYWxseQ== 20905\nIFJlcXVpcmVk 20906\nIFBUUw== 20907\nIFZpb2xlbmNl 20908\nb2ludGVk 20909\nc2hvdHM= 20910\nIGV4Y2VycHQ= 20911\nY29vbg== 20912\nSU5T 20913\nIEdyaQ== 20914\nIHJlY29nbmlzZWQ= 20915\nV2Vlaw== 20916\nWW91bmc= 20917\nIHZvbQ== 20918\naXNsZQ== 20919\nIEN1cnJ5 20920\nIEJ1ZGRo 20921\nIG5vdGVib29r 20922\nIGR1cmFibGU= 20923\nLz8= 20924\nIEdhZA== 20925\nIFB1cHA= 20926\nIGZvcmdpdmU= 20927\ncGFyaw== 20928\nIHBlcnNvbmFsaXRpZXM= 20929\nYW5hbHlzaXM= 20930\nY2xhbWF0aW9u 20931\nIGVsZXZhdG9y 20932\nIHdhcmVob3VzZQ== 20933\nIFJvbGU= 20934\ndW5u 20935\nIGlsbHVzdHJhdGlvbg== 20936\nIFNjYW4= 20937\nIGF0bW9zcGhlcmlj 20938\nSW1wb3J0 20939\nQU5D 20940\ncmljdGVk 20941\nZnU= 20942\nMDEw 20943\nIGFyY2hl 20944\nIHJld2FyZGVk 20945\nYWtlc3BlYXJl 20946\nIGludGVybmFsbHk= 20947\nIFJCSQ== 20948\nYWxrZXI= 20949\nIGVsZXBoYW50 20950\nb3dpdHo= 20951\nIFBpenph 20952\nIGJpcGFydGlzYW4= 20953\nw6lz 20954\nIHNsb3dlZA== 20955\nIFN0YXJr 20956\nIG92ZXJyaWRl 20957\nT1VT 20958\nIDMyMA== 20959\ndW5kcmVkcw== 20960\nIERlY2s= 20961\nIENlbnN1cw== 20962\nYmVl 20963\nMTQ2 20964\nb3Rvcg== 20965\nIGlw 20966\nIHVi 20967\nb2NhdGlvbnM= 20968\nIEJ1dHRvbg== 20969\ncmljZQ== 20970\nIGNyaXBw 20971\nZmZm 20972\nIG9yaWdpbmF0ZWQ= 20973\nIG92ZXJ3aGVsbWVk 20974\nYXBwYQ== 20975\nIGZvcmVtb3N0 20976\n4oCR 20977\nIExFRw== 20978\ncmVsZWFzZQ== 20979\nZWF0dXJlZA== 20980\nYXRjaGVz 20981\nIHJlcHM= 20982\nIGxlbmRpbmc= 20983\nIFJlZmVyZW5jZQ== 20984\nIENsaWVudA== 20985\nMTY1 20986\ndmVudGg= 20987\nQ29tcGxldGU= 20988\nIFBhdHJvbA== 20989\nIHN3b3Ju 20990\nY2Ft 20991\nIHNodXR0bGU= 20992\nIFJhbHBo 20993\nIGhvbWV0b3du 20994\nLSw= 20995\nb25hbA== 20996\nIEJQ 20997\n5Y8= 20998\nIHBlcnN1YWRl 20999\nIEFsZXhhbmQ= 21000\nIGNvbWJpbmVz 21001\nIHZpdmlk 21002\nIExhZw== 21003\nIGVuY29kaW5n 21004\nIHNhbHZhdGlvbg== 21005\nd2Vu 21006\nIFJlY292ZXJ5 21007\naXlh 21008\nVW5pdmVyc2l0eQ== 21009\nIEJpZGVu 21010\nIGJ1ZGdldHM= 21011\nIFRleGFucw== 21012\nZml0cw== 21013\nIGhvbm9yZWQ= 21014\nIHB5dGhvbg== 21015\nVEQ= 21016\nIyMj 21017\nY2xvbmU= 21018\nIGJsaW5r 21019\nIExpcXVpZA== 21020\nIHVuZW1wbG95ZWQ= 21021\nIGNsYXNoZXM= 21022\nIENvdW5zZWw= 21023\nIGRpcmVjdGluZw== 21024\nIHB1bmN0 21025\nIEZhbGNvbnM= 21026\nIHNoYXJr 21027\nIERhbWFzY3Vz 21028\nIGplYW5z 21029\nIGVtYmFyaw== 21030\nIHNlaXpl 21031\nIHVwd2FyZHM= 21032\nMjgw 21033\nIEV6 21034\nIEFueXRoaW5n 21035\nIGV4b3RpYw== 21036\nbG93ZXI= 21037\nIENyZWF0b3I= 21038\nIFVt 21039\nIHN1YnVyYnM= 21040\nYmVyZ2Vy 21041\nIFdlbmQ= 21042\nIG1pbnQ= 21043\nIFhY 21044\nIERybw== 21045\nIHN1ZmZlcnM= 21046\nIGhlcmI= 21047\ndHJlZQ== 21048\nIGZyYWdpbGU= 21049\nIGZsb29kZWQ= 21050\nIEFsY29ob2w= 21051\nb2xlYW4= 21052\nbnlkZXI= 21053\nIEtP 21054\nRnJhbQ== 21055\nIDEzNg== 21056\nIG93ZWQ= 21057\nIE1lbGVl 21058\nIEhhc2g= 21059\nIHdoaXNr 21060\nIHN1ZG8= 21061\ncnI= 21062\nUXVpY2s= 21063\nYXBwcm8= 21064\nIGlp 21065\nIEV4YW1wbGVz 21066\naGVl 21067\nIHByb21vdGVz 21068\ncGVyYXR1cmU= 21069\na2Fy 21070\nIEhvbm9y 21071\nIHNvZGl1bQ== 21072\nIExpZg== 21073\ncm9zc28= 21074\naW50ZW5kZW50 21075\nIGNvcnJlc3BvbmRlbnQ= 21076\nRm91bmQ= 21077\nc2VjcmV0 21078\nIGlkZW50aWZpZXM= 21079\nYWduZQ== 21080\nIGxvdQ== 21081\nIFBQ 21082\nIGNvaW5jaWRlbmNl 21083\nbW92ZQ== 21084\nIG1pbGl0aWE= 21085\nIGluZmlsdHI= 21086\nIFByaW1hcnk= 21087\nIHBpdGNoaW5n 21088\nIEli 21089\nIEdPT0Q= 21090\n44K4 21091\nIFdpemFyZHM= 21092\naXJhbA== 21093\nIFZlbnVz 21094\nUlI= 21095\nIOKAlQ== 21096\nIENhc2V5 21097\nIHNhZGx5 21098\nIGFkbWlyZQ== 21099\nIGVtYmFycmFzc2Vk 21100\nY2I= 21101\nTWVs 21102\nIHR1YmVz 21103\nIGJlYXV0aWZ1bGx5 21104\nIFF1ZWVuc2xhbmQ= 21105\nQmVsb3c= 21106\ncmV6 21107\ncXVldA== 21108\ncGxlYXNhbnQ= 21109\nIMKr 21110\nQ2FtcA== 21111\nIGRlY2lzaXZl 21112\nMTk5OA== 21113\nIExhbWI= 21114\ndXR0b24= 21115\naG4= 21116\nIEphZ3U= 21117\nYXVuZGVy 21118\nIENvcmQ= 21119\nIGNsZXJr 21120\nIGNhZmZl 21121\nIHdpcGVk 21122\nIHJlaW0= 21123\nIE1vdW50YWlucw== 21124\nIGltcHJpc29uZWQ= 21125\nIGRldmVsb3Bz 21126\nIFByYQ== 21127\nIG1vZGVsaW5n 21128\nQW55b25l 21129\nYW5jZWw= 21130\nIFNpdA== 21131\nIHNoaWVsZHM= 21132\nIGxhd24= 21133\nIGNhcmRpb3Zhc2N1bGFy 21134\nIGRlbW9uc3RyYXRpbmc= 21135\nIHBhcnNl 21136\nIElzcmFlbGlz 21137\nIGV1cm9z 21138\nMTQz 21139\nIGdsb3Jpb3Vz 21140\naW5za2k= 21141\nZWNk 21142\nIGNvbmRpdGlvbmluZw== 21143\nIGhlbHBsZXNz 21144\nIG1pY3Jvc2M= 21145\nIEhhcmJvcg== 21146\nIHN0YWtlcw== 21147\nIDI2MA== 21148\nIHVuZXF1 21149\nIEZsb3lk 21150\nIGRhbXA= 21151\nIGFwcGFyYXR1cw== 21152\nIExhd3M= 21153\nIGNvdW50ZXJz 21154\nIGluZHVjZQ== 21155\nYXRhYmxl 21156\nIEFobWVk 21157\nIHNsYW0= 21158\nTm92ZW1iZXI= 21159\nIHBlcnNpc3Q= 21160\nIGltbWluZW50 21161\nw6Fu 21162\nIHNocmVk 21163\nIHBoYXNlcw== 21164\nIEVkbW9udG9u 21165\nIEFybXN0cm9uZw== 21166\nIE1lZXQ= 21167\nIEtpdHR5 21168\n0YA= 21169\nY2lyYw== 21170\nIEFkdWx0 21171\nIGFyb3Nl 21172\nIFhlbg== 21173\nRGFu 21174\nZ293 21175\nIHN1cGVyZg== 21176\nIEFkbWly 21177\nIGVuZHVyZQ== 21178\nIGtleXdvcmQ= 21179\neXJ1cw== 21180\nIHlhcm4= 21181\nIHBhdGh3YXk= 21182\nIEhvcGtpbnM= 21183\nbWlkdA== 21184\nIGNlbnNvcnNoaXA= 21185\nZGVwZW5kZW50 21186\nIGluc3RydWN0b3I= 21187\nU291cmNlcw== 21188\nIHRvZQ== 21189\nIGJhbGxvb24= 21190\nTm9i 21191\nIHN3ZWFy 21192\nIENhc3Rybw== 21193\nIGdsb3Nz 21194\nIEthdmFuYXVnaA== 21195\nIHJlbWFya2FibHk= 21196\nUGhvdG9z 21197\nIE5vbQ== 21198\nIFNvdXRoZWFzdA== 21199\neWVycw== 21200\nIHZhbGlkYXRpb24= 21201\nIGNhbm5vbg== 21202\nIFZpY3Rvcnk= 21203\nIFBpZXJyZQ== 21204\nIGNhdXRpb3Vz 21205\nQXVkaW8= 21206\nIGZldGNo 21207\nIEdpZnQ= 21208\nIEh5cA== 21209\nIHJlbWVkeQ== 21210\nWkU= 21211\nIHNjZW50 21212\nIGJlYXJk 21213\nIFJ1dA== 21214\nLSI= 21215\nIHBhdGVudHM= 21216\nSHk= 21217\nIHVuanVzdA== 21218\nIHBvdGF0bw== 21219\nIGZvcnRoY29taW5n 21220\nIGNoZWY= 21221\nIFJpZnQ= 21222\nYWZmZQ== 21223\nIFJPTQ== 21224\nIExhdW5jaA== 21225\nIHBhZHM= 21226\nIE5lbw== 21227\nIG9uc2V0 21228\nIHNxdWVlemU= 21229\nc2FmZQ== 21230\nIHByZWZpeA== 21231\nIFRN 21232\nIE5lYXJseQ== 21233\nIENsaW5pY2Fs 21234\nIE1lbnRhbA== 21235\nb3RpYXRpb24= 21236\nIFVuaWM= 21237\nYW50cnk= 21238\nIENpcg== 21239\nIGVwaXQ= 21240\nw6Y= 21241\nIGV4dHJhY3RlZA== 21242\ndmVyc2VseQ== 21243\ncmlhZA== 21244\nIHN0cmFpbnM= 21245\nIHRvcHM= 21246\nIHBvZW0= 21247\nIFJhbmR5 21248\nIE1hcGxl 21249\nVEhFUg== 21250\ndXBpdGVy 21251\nIFNTRA== 21252\nmuk= 21253\nIHVuY29u 21254\ncGVyaW5n 21255\nIHNsZXB0 21256\naW5lcnM= 21257\nIHVuZGVyd2F0ZXI= 21258\nIEV2aWRlbmNl 21259\nZ29uZQ== 21260\nMjA1 21261\nIGhpc3RvcmlhbnM= 21262\nIHN5bnRoZXNpcw== 21263\nIGZyb2c= 21264\nYmFza2V0YmFsbA== 21265\nIHZpYnJhbnQ= 21266\nIHN1Ym9yZA== 21267\nIDM2NQ== 21268\nIERpYWw= 21269\nIGNvb3BlcmF0ZQ== 21270\nSEFIQQ== 21271\nIGdyZWV0ZWQ= 21272\nMTU4 21273\nIGpheno= 21274\nIGludG94 21275\nIFdhbGtpbmc= 21276\nIHN1cGVydmlzb3I= 21277\nIEZ1c2lvbg== 21278\nIE1lcmNlZGVz 21279\nc2VuZA== 21280\nSGFt 21281\nc2Q= 21282\nbmw= 21283\nIHRvdXJz 21284\nIEZJRkE= 21285\nIGN1bHA= 21286\nZ2Q= 21287\nMzA0 21288\nIHBsZWFz 21289\nIGlsbHVzdHJhdGVz 21290\nIENvbG9tYmlh 21291\nIGhpZ2hsaWdodGluZw== 21292\nIFN1bW1hcnk= 21293\nIGV4cG9zaW5n 21294\nIERydQ== 21295\nIGlyb255 21296\ncml0aW9uYWw= 21297\nIENhcnJvbGw= 21298\nIEVsbGlz 21299\nUGljdA== 21300\nIFJhcHQ= 21301\nIGFkYXB0ZXI= 21302\nIHVubQ== 21303\nIGNvcnBzZQ== 21304\nIGNlbGVicml0aWVz 21305\nRGVu 21306\nYXR1bQ== 21307\nIEFwb2NhbHlwc2U= 21308\nIFdhZw== 21309\nbGluaW5n 21310\nIGhvcm1vbmVz 21311\nUnVi 21312\nIFhp 21313\nIFZhdWx0cw== 21314\nMjA4 21315\nYWxreXJpZQ== 21316\naW5vc2F1cg== 21317\nIGZlZWRz 21318\ndml0eQ== 21319\nIGRlZmVhdGluZw== 21320\nV2FpdA== 21321\nIGVtcGhhc2l6ZQ== 21322\nIFN0ZWVsZXJz 21323\neXJpbnRo 21324\nbGV5cw== 21325\nIFdoZW5ldmVy 21326\nQ3VycmVudGx5 21327\nIENsb2Nr 21328\nIGNvbGxlY3RpdmVseQ== 21329\nYW55b24= 21330\nIEpQ 21331\nIG1lbnRhbGl0eQ== 21332\nIGRvd25sb2Fkcw== 21333\nIHN1cnJvdW5kaW5ncw== 21334\nIEJhcm5lcw== 21335\nIGZsYWdzaGlw 21336\nIGluZGljYXRvcnM= 21337\nIGdyYXBw 21338\nSmFudWFyeQ== 21339\nIEVsZW1lbnRhbA== 21340\nIEF0aGVuYQ== 21341\naWJhbA== 21342\nIHNpZ2h0cw== 21343\nIGNhcGl0YQ== 21344\nIFRyZWF0eQ== 21345\nIHZvaWNlZA== 21346\nIEdheg== 21347\nbGV0dGU= 21348\nIHlh 21349\nIGV4cGlyZWQ= 21350\nTGVnZW5k 21351\nSG90 21352\nbmF0dXJl 21353\nIHVuc3RhYmxl 21354\nIDI4MA== 21355\nw7o= 21356\nQ29tbWVudA== 21357\nQUxF 21358\nIHF1ZXN0cw== 21359\nIGhhbmRsZXI= 21360\nbmlz 21361\nIHZlcnNhdGlsZQ== 21362\nIGNvbmNlYWw= 21363\nZW5nZWFuY2U= 21364\nIEludGVyYWN0aXZl 21365\nIG9ic2Vzc2Vk 21366\nIERvZ3M= 21367\nIGNyYWNrZWQ= 21368\nU291bmQ= 21369\nc3Y= 21370\nIER5bGFu 21371\ncm9hZHM= 21372\nZng= 21373\nIENhdGhvbGljcw== 21374\nIEhhZw== 21375\nIHNsYW1tZWQ= 21376\nIGdsb3dpbmc= 21377\nc2FsZQ== 21378\nIHRpc3N1ZXM= 21379\nIENoaQ== 21380\nbmVl 21381\nIGNoZXI= 21382\nc2lj 21383\ndXJyZWN0aW9u 21384\nIGJhY29u 21385\ndWxhdG9yeQ== 21386\nKS4i 21387\nIGlycmVndWxhcg== 21388\nRk9STQ== 21389\nYXNzZWQ= 21390\nIGludGVudGlvbmFs 21391\nIGNvbXBlbnNhdGU= 21392\nIFNwZWFraW5n 21393\nIFNldHM= 21394\nMTUz 21395\nIGNvbnZlbnRpb25z 21396\nYmFuZHM= 21397\nZW1hZGU= 21398\nIGVjYw== 21399\nIFdpbnN0b24= 21400\nIEFzc2Fzc2lu 21401\nIEJlbGdpYW4= 21402\nIGRlcGVuZGVuY2U= 21403\nIG5pY2hl 21404\nIGJhcms= 21405\nIEpheno= 21406\nIGRpc2FkdmFudGFnZQ== 21407\nIGdhc29saW5l 21408\nIDE2NQ== 21409\n55qE 21410\nZXNzYQ== 21411\nbW9kdWxl 21412\nYW5ndWxhcg== 21413\nT1k= 21414\nIFRyZWF0bWVudA== 21415\naXRhcw== 21416\nb2xhdGlvbg== 21417\nIEFybm9sZA== 21418\nIGZldWQ= 21419\nIE5lc3Q= 21420\nIHRoZWF0cmU= 21421\nZXdhdGVy 21422\nIG1pbm9ycw== 21423\nb2xpY3k= 21424\nIEhhdmVu 21425\nZGl2aXNpb24= 21426\nIHRydW5r 21427\nRmFy 21428\nIFB1bGw= 21429\nIGNhcHR1cmluZw== 21430\nIDE4MDA= 21431\nIFRlZW4= 21432\nIGV4ZW1wbA== 21433\nIGNsaW5pY3M= 21434\nIEJ1cmc= 21435\nIHN1YnN0aXQ= 21436\nIHBheWxvYWQ= 21437\nIExhdg== 21438\nIFRyb3k= 21439\nIFdpdG5lc3M= 21440\nIGZyYWdtZW50cw== 21441\nIHBhc3N3b3Jkcw== 21442\nIGdvc3BlbA== 21443\nIEdpbg== 21444\nIHRlbmFudHM= 21445\nb2xpdGg= 21446\nU2l4 21447\nUHJldmlvdXM= 21448\nIEFnZXM= 21449\nIERhcndpbg== 21450\nIGJsYXQ= 21451\nIGVtcGF0aHk= 21452\nc21pdGg= 21453\nYmFn 21454\nIEVjaG8= 21455\nIENhbWI= 21456\nIE1hZGQ= 21457\nIEJvbw== 21458\nIHJlZGU= 21459\nIEJ1cm5pbmc= 21460\nIHNtb290aGx5 21461\nIEFkcmlhbg== 21462\nIFZhbXBpcmU= 21463\nIE1vbnN0ZXJz 21464\nc3RlYW0= 21465\nU3R5bGU= 21466\nTWE= 21467\ncmVh 21468\nIER3YXI= 21469\nYWx5c3Q= 21470\ndXJzb3I= 21471\nIGVsaW1pbmF0aW9u 21472\nIGNyeXB0bw== 21473\nY2h0 21474\nIEV0ZXJuYWw= 21475\n4oCmXQ== 21476\nIFNvcmNl 21477\nSWxs 21478\nTkVS 21479\nIHVo 21480\nQ29uY2x1c2lvbg== 21481\nd2FnZQ== 21482\nIHJlc3Bpcg== 21483\nIHJlbWluaXM= 21484\naGV0aWNhbA== 21485\nIGd5 21486\nIHV0aWxpemVk 21487\naWNpZGFs 21488\nIDE5MDA= 21489\nIGh1bnRlcnM= 21490\nIFN3YW4= 21491\nIFJlYWN0 21492\nIHZpc2l0b3I= 21493\nIFRoYW5rc2dpdmluZw== 21494\nMzA4 21495\nUG9zdHM= 21496\nIGhpcHM= 21497\nMTk5Nw== 21498\nb21lcnM= 21499\nIGtub2NraW5n 21500\nIFZlaGljbGU= 21501\nIHRpbA== 21502\nIDEzOA== 21503\nIG1p 21504\nIEludmVzdGlnYXRpb24= 21505\nIEtlbnlh 21506\nIGNhc2lubw== 21507\nIG1vdGl2ZXM= 21508\nIHJlZ2Fpbg== 21509\ncmV4 21510\nIHdlZWtlbmRz 21511\nIHN0YWJiZWQ= 21512\nYm9ybw== 21513\nIGV4cGxvaXRlZA== 21514\nIEhBVkU= 21515\nIFRlbGV2aXNpb24= 21516\nY29jaw== 21517\nIHByZXBhcmF0aW9ucw== 21518\nIGVuZGVhdg== 21519\nIFJlbW90ZQ== 21520\nIE1ha2Vy 21521\nIFByb2R1 21522\nIEV2YW4= 21523\nIGluZm9ybWF0aW9uYWw= 21524\nIExvdWlzdmlsbGU= 21525\nMTU0 21526\nIERyZWFtcw== 21527\nIHBsb3Rz 21528\nIFJ1bm5lcg== 21529\nIGh1cnRpbmc= 21530\nIGFjYWRlbXk= 21531\nIE1vbnRnb21lcnk= 21532\nbm0= 21533\nIExhbmM= 21534\nIEFseg== 21535\nMjEw 21536\nZWxvbmc= 21537\nIHJldGFpbGVy 21538\nIGFyaXNpbmc= 21539\nIHJlYmVsbGlvbg== 21540\nIGJsb25kZQ== 21541\ncGxheWVk 21542\nIGluc3RydW1lbnRhbA== 21543\nQ3Jvc3M= 21544\nIHJldGVudGlvbg== 21545\nIHRoZXJhcGV1dGlj 21546\nIHNlYXM= 21547\nIGluZmFudHJ5 21548\nIENsaW50 21549\nIHByb21wdGluZw== 21550\nIGJpdGNo 21551\nIHN0ZW1z 21552\nIEtyYQ== 21553\nIHRoZXNpcw== 21554\nIEJvZw== 21555\ncnVlZA== 21556\nIGtpbmdz 21557\nIGNsYXk= 21558\naWZpY2VudA== 21559\nIFlFUw== 21560\nIFRoaW5n 21561\nIEN1YnM= 21562\ndmV5YXJk 21563\nZWxzaA== 21564\naW5hcmlseQ== 21565\nIEV5 21566\nIFJvbGxpbmc= 21567\nIGV2b2x2aW5n 21568\nSW5kaWE= 21569\nIHJlY29nbml6ZXM= 21570\nIGdyYWR1YXRpb24= 21571\naXNlcnM= 21572\nIGZlcnRpbGl0eQ== 21573\nIE1pbGFu 21574\nQ29tbWFuZA== 21575\nIGJveGluZw== 21576\nIDE5NDM= 21577\nIGdsdXRlbg== 21578\nIEVtaXI= 21579\nIGlkb2w= 21580\nIGNvbmNlaXZlZA== 21581\nIENyZWF0aW9u 21582\nTWVyaXQ= 21583\ndWRkeQ== 21584\ndXNzaW9ucw== 21585\nIExpZXV0ZW5hbnQ= 21586\naWV0YWw= 21587\nIHVuY2hhbmdlZA== 21588\nIFNjYWxl 21589\nIENyaW1lYQ== 21590\nYmFsbHM= 21591\nYXRvcmlhbA== 21592\nIGRlcHRocw== 21593\nIGVtcGlyaWNhbA== 21594\nIHRyYW5zbQ== 21595\nIHVuc2FmZQ== 21596\nbWlzc2libGU= 21597\nY29tZm9ydA== 21598\nMTU2 21599\nIG1lY2hhbmlj 21600\nMDAy 21601\nbGlucw== 21602\nIHNtb2tlZA== 21603\nUG9z 21604\nIHNsb3dpbmc= 21605\nIGxhdg== 21606\nVGV4YXM= 21607\nIGNoZWF0aW5n 21608\nIE1ldHJvcG9saXRhbg== 21609\nZXRoeWw= 21610\nIGRpc2NvdmVyaW5n 21611\nYXNzZQ== 21612\nIHBlbmNpbA== 21613\nIFB5b25neWFuZw== 21614\nIGNsb3NldA== 21615\nIFNoZWV0 21616\nIEVudHJ5 21617\nb3VzdGlj 21618\nIG15c3Q= 21619\nZXJhdGU= 21620\nYXJpYXQ= 21621\nIG1pbmVyYWxz 21622\nIG11c2ljaWFu 21623\nIFB1bA== 21624\nIE1heg== 21625\nMjQ5 21626\nIHBlcm1pc3Npb25z 21627\nIGl2 21628\nZW5hcnk= 21629\naWNrZXJz 21630\nIEJpbmc= 21631\naGVh 21632\nZW5hYmxl 21633\nIGdyaWV2 21634\nIGFzc2VydGVk 21635\nIENvbG9uZWw= 21636\nIGFmZmlkYXY= 21637\nd28= 21638\nIHNlYXRlZA== 21639\nIFJpZGU= 21640\nIHBhaW50aW5ncw== 21641\nIFBpeA== 21642\nIDEzNw== 21643\naXNoaQ== 21644\ndW1iYWk= 21645\nZ290dGVu 21646\nIEVhcmw= 21647\nIGlubmluZw== 21648\nIGNlbnN1cw== 21649\nIHRyYXZlbGxlZA== 21650\nIENvbnN1bHQ= 21651\nMTg1 21652\nYmluZA== 21653\nIHNpbXBsaWNpdHk= 21654\nIG92ZXJsb29rZWQ= 21655\nIEhlbHBmdWw= 21656\nIG1vbmtleQ== 21657\nIG92ZXJ3aGVsbWluZ2x5 21658\nQmxvb2Q= 21659\nIEZsaW50 21660\nIEphbWE= 21661\nIFByZXNlbnQ= 21662\nIFJhZ2U= 21663\nIFRB 21664\ncHRpdmU= 21665\nIHR1cm5vdXQ= 21666\nd2FsZA== 21667\nIERvbHBoaW5z 21668\nIFZQTg== 21669\nIG9uaW9u 21670\nIGNyYWZ0aW5n 21671\nbW1h 21672\nIE1lcmN1cnk= 21673\nIGFycmFuZ2U= 21674\nIGFsZXJ0cw== 21675\nIE9U 21676\nemJvbGxhaA== 21677\nIGdhc2Vz 21678\nIFJpY2hhcmRzb24= 21679\nc2Fs 21680\nbGFy 21681\nIGZyb3N0 21682\nIGxvd2VyaW5n 21683\nIGFjY2xhaW0= 21684\nIHN0YXJ0dXBz 21685\nIEdhaW4= 21686\nZXNzbWVudA== 21687\nIGd1YXJkaWFu 21688\n5Lq6 21689\nIFBpZQ== 21690\nIExpbmtz 21691\nIG1lcml0cw== 21692\nIGF3YWtl 21693\nIHBhcmVudGFs 21694\nIGV4Y2VlZHM= 21695\nIGlkbGU= 21696\nIFBpbG90 21697\nIGVCYXk= 21698\nIEFjY2VwdA== 21699\naXBlZw== 21700\nQ2Ft 21701\nIEtvdA== 21702\nIHRyYWRlcnM= 21703\nb2xpdGljcw== 21704\ndW5rZXI= 21705\nIFBhbGU= 21706\nb3Np 21707\nYW5tYXI= 21708\nIDE5NDc= 21709\nIEZlbGw= 21710\nZXN0aWFs 21711\naXRhdGluZw== 21712\nR0Y= 21713\nIFNy 21714\naWZ0ZWQ= 21715\nIGNvbm5lY3Rvcg== 21716\nIEJvbmU= 21717\naWxsZXM= 21718\nMjYw 21719\naG1h 21720\nIG92ZXJsYXA= 21721\nIEdpdEh1Yg== 21722\nIGNsZWFuZXI= 21723\nIEJhcHRpc3Q= 21724\nIFdBUw== 21725\nIGx1bmdz 21726\n0YE= 21727\nIEJVVA== 21728\nIGNpdGU= 21729\nIHBpdGNoZWQ= 21730\ncmVhdG1lbnQ= 21731\nIHRyb3BoaWVz 21732\nIE51 21733\nMzg2 21734\nIFByaWRl 21735\nIGF0dGVuZGVlcw== 21736\nW10= 21737\nMTc5 21738\nIHNwYXRpYWw= 21739\nIHByaXplcw== 21740\nIFJlbGlnaW9u 21741\nIHNob3djYXNl 21742\nIENhdGVnb3J5 21743\ndmlkaWE= 21744\nVGFyZ2V0 21745\nUHJvcGVydHk= 21746\nPyw= 21747\nIGZ1c2lvbg== 21748\ncGll 21749\nIFVDTEE= 21750\nIHNvdW5kdHJhY2s= 21751\nIHByaW5jZXNz 21752\nIENhdmFs 21753\nc2hvdWxk 21754\nIGxpbWJz 21755\nQmFja2dyb3VuZA== 21756\nIGxvbmVseQ== 21757\nIGNvcmVz 21758\nIFRhaWw= 21759\nc2hlZXQ= 21760\nIDEzMg== 21761\nUmE= 21762\n44Kr 21763\nIEJvbHQ= 21764\nIGJvb2tlZA== 21765\nIGFkbWluaXN0ZXI= 21766\nIGVxdWFscw== 21767\nd3k= 21768\nIG9ic2VydmluZw== 21769\nIEJhcm9u 21770\nIEFkb2Jl 21771\nIHZpcmdpbg== 21772\nIFNvY2lhbGlzdA== 21773\nTW92ZQ== 21774\nZ2hhemk= 21775\nIExpbmRh 21776\nMjEy 21777\nIGJyZXdpbmc= 21778\nIG1lcmNoYW50cw== 21779\nYnVyc2U= 21780\nIGRpdm9y 21781\nIG1ldGFscw== 21782\nIE5lcg== 21783\nIHN1bXM= 21784\nIEVuZW15 21785\nIGVudmlzaW9u 21786\nIGdyYW50aW5n 21787\nIEhvbmV5 21788\nIFNreXJpbQ== 21789\nIHNvY2lv 21790\nZ3JhZGVk 21791\nIHNlbGVjdGl2ZQ== 21792\nV0FTSElOR1RPTg== 21793\nIDE5NDg= 21794\nIFNpcml1cw== 21795\nIEdyb3Nz 21796\nYWN0aXZpdHk= 21797\nIEl2YW4= 21798\nIGZ1cmlvdXM= 21799\nQlNE 21800\nIFByZXZpb3Vz 21801\nIHJlc3BvbnNpdmU= 21802\nIGNoYXJpdGFibGU= 21803\nIGxlYW5pbmc= 21804\nIFBldw== 21805\nIHZpb2xhdGVz 21806\nXFxcXFxcXFw= 21807\nIENvbWluZw== 21808\nd2lyZQ== 21809\nIHBvZXQ= 21810\nIHJlc29sdXRpb25z 21811\nY29tbWFuZA== 21812\nIFBvcnR1Z3Vlc2U= 21813\nIG5pY2tuYW1l 21814\nIGRlYWY= 21815\nRmVicnVhcnk= 21816\nIHJlY29nbmlzZQ== 21817\nIGVudGlyZXR5 21818\nIHNlYXNvbmFs 21819\ncGxhY2Vk 21820\nIFRlbGVncmFwaA== 21821\nIG1pY3JvcGhvbmU= 21822\nb3VyaW5n 21823\nIGdyYWlucw== 21824\nIGdvdmVybmVk 21825\nIHBvc3Rw 21826\nIFdhdGVycw== 21827\naW5lbWVudA== 21828\nIHVuZG9jdW1lbnRlZA== 21829\nIENvbWNhc3Q= 21830\nIGZveA== 21831\nIGFzc2F1bHRz 21832\ncmVvbg== 21833\nbWFueQ== 21834\nIEplbmtpbnM= 21835\nIEFueXdheQ== 21836\nIGFzc2Vzc21lbnRz 21837\nIGRvd25z 21838\nIE1vdXNl 21839\nIHN1cGVyYg== 21840\na3Q= 21841\nIERvdw== 21842\nIHRheGF0aW9u 21843\nNDAx 21844\nIHNtaWxlcw== 21845\nIHVuZGVydGFrZW4= 21846\nIGV4aA== 21847\nIGVudGh1c2lhc3RpYw== 21848\nIHR3ZW50 21849\nIGdvdmVybm1lbnRhbA== 21850\nIGF1dG9ub215 21851\nIFRlY2hub2xvZ2llcw== 21852\nIENoYWlu 21853\nIHByZXZhbGVudA== 21854\nZmI= 21855\nIG5pY290aW5l 21856\nb2dyYW0= 21857\nam9i 21858\nIGF3YWl0aW5n 21859\nIE1lbnU= 21860\nIGRlcHV0aWVz 21861\na292 21862\naXNob3Bz 21863\nQnV0dG9u 21864\nIFNoYW5naGFp 21865\nIGRpZXNlbA== 21866\nIER1Y2s= 21867\nUnlhbg== 21868\nIFBDcw== 21869\nTkY= 21870\nanVyeQ== 21871\nZW50ZQ== 21872\nIGluYWNjdXJhdGU= 21873\nZWRkeQ== 21874\nV2hhdGV2ZXI= 21875\nIHNob3dj 21876\nIE5hZA== 21877\nb2R1cw== 21878\nZXRy 21879\nIHBsYWludGlmZnM= 21880\nIFdPUg== 21881\nIEFzc2FuZ2U= 21882\nIHByaXZhdA== 21883\nIHByZW1pdW1z 21884\nIHRhbQ== 21885\nVVJM 21886\nIGVsaXRlcw== 21887\nIFJhbmdlcg== 21888\nb3R0ZW5oYW0= 21889\nIEhvZmY= 21890\nIEF0aGVucw== 21891\nIGRlZmluaXRl 21892\nIHNpZ2hlZA== 21893\nIGV2ZW5seQ== 21894\nMjEx 21895\nIEFtYmVy 21896\nYWtpYQ== 21897\nIG1haWxpbmc= 21898\nIGNyYXNoaW5n 21899\nIENvbmZlZGVyYXRl 21900\ncnVnZ2Vk 21901\nV2Fs 21902\nIERlcHRocw== 21903\nIGp1dmVuaWxl 21904\nIHJlYWN0b3I= 21905\nSW50cm9kdWN0aW9u 21906\nIERlbHV4ZQ== 21907\nMTk5NQ== 21908\nIFNhbmNoZXo= 21909\nIE1lYWQ= 21910\naXZhYmxl 21911\nOi0= 21912\nIFBsYW5uaW5n 21913\nIFRyYXA= 21914\ncXVpbg== 21915\nIFByb3RlY3Q= 21916\ndmVyZWQ= 21917\nSW5mb3JtYXRpb24= 21918\nIGtpZG5leQ== 21919\naW5uYW1vbg== 21920\nbGFz 21921\nIHBvbGljaW5n 21922\nIHRvbGVyYXRl 21923\nIFFp 21924\nIGJpYXNlZA== 21925\nRm9ydA== 21926\nIEtp 21927\nc2F2ZQ== 21928\nIHByaXZpbGVnZWQ= 21929\nIGJlYXN0cw== 21930\nIEdsYXM= 21931\nIENpbmVt 21932\nIGNvbWViYWNr 21933\nU3VuZGF5 21934\nIGV4dGluY3Rpb24= 21935\naG9wcw== 21936\nIHRyYW5zbWl0 21937\nIGRvdWJsZXM= 21938\nIEZsYXQ= 21939\nMTY3 21940\nIGRpc3B1dGVk 21941\nIGluanVzdGljZQ== 21942\nZm9v 21943\nVmljdA== 21944\ncm9sZXVt 21945\nIEp1bGll 21946\nQ29udGV4dA== 21947\nIFJhcml0eQ== 21948\naXNzdWU= 21949\nQ29tcG9uZW50 21950\nIGNvdW5zZWxpbmc= 21951\nYW5uZQ== 21952\nZGFyaw== 21953\nIG9iamVjdGlvbnM= 21954\ndWlsdA== 21955\nIGdhc3Q= 21956\nIHBsYWM= 21957\nIHVudXNlZA== 21958\n44OH 21959\nIFRyaWFs 21960\nIEphcw== 21961\naGVkcmFs 21962\nb2Ji 21963\nIHRlbXBvcmFs 21964\nIFBSTw== 21965\nIE5X 21966\nIEFubml2ZXJzYXJ5 21967\nTGFyZ2U= 21968\nIHRoZXJt 21969\nIGRhdmlk 21970\nIHN5c3RlbWlj 21971\nIFNoaXI= 21972\nbXV0 21973\nIE5lcHQ= 21974\nYWRkcmVzcw== 21975\nIHNjYW5uaW5n 21976\nIHVuZGVyc3RhbmRhYmxl 21977\nIGNhbnZhcw== 21978\nQ2F0 21979\nIFpvbw== 21980\nIGFuZ2Vscw== 21981\nTE8= 21982\nIFN0YXRlbWVudA== 21983\nIFNpZw== 21984\nb3ZhYmxl 21985\nIEF3YXk= 21986\nc2hhcmluZw== 21987\nb2NyYXRz 21988\nc3RhdGVk 21989\nIHdlaWdoaW5n 21990\nTm9y 21991\nd2lsZA== 21992\nQmV5 21993\nIGFzdG9uaXNoaW5n 21994\nIFJleW5vbGRz 21995\nIG9wZW5lcg== 21996\nIHRyYWluZXI= 21997\nIHN1cmdpY2Fs 21998\ncG4= 21999\nIGFkanVzdGluZw== 22000\nd2hlZWw= 22001\nIGZyb3du 22002\nZXJ2YXRpdmU= 22003\nIHN1c3BlbmQ= 22004\nV2l0aGlu 22005\ndGVpbg== 22006\nIG9ic3RhY2xl 22007\nIGxpYmVydGllcw== 22008\neW1lcw== 22009\nIHVyYW5pdW0= 22010\nYW5zb20= 22011\nYW5vbA== 22012\ndWJh 22013\nIExvc3M= 22014\nIGFyb3Vz 22015\nIEhlbmRlcnNvbg== 22016\nV293 22017\nc3Bs 22018\nY3Vy 22019\nIMKt 22020\nIHRoZWlycw== 22021\nRGFtYWdl 22022\nIGRvd25sb2FkaW5n 22023\nIGRpc2Nlcm4= 22024\nIFN0bw== 22025\nIEZsYQ== 22026\nIGhhdGg= 22027\nIEFq 22028\nIHVucGxlYXNhbnQ= 22029\nRXVyb3BlYW4= 22030\nZXhwZW5zaXZl 22031\nIHNjcmVlbnNob3Q= 22032\nIFVW 22033\nIGFsbGllZA== 22034\nIFBlcnNpYW4= 22035\nIG1vbm9wb2x5 22036\nIGF0b20= 22037\nIFJlZHNraW5z 22038\nIj48 22039\nIGNhbmNlbGw= 22040\nIGNpbmVtYQ== 22041\nMTMx 22042\nZmFpcg== 22043\nIEFsZnJlZA== 22044\nIGR1Y2s= 22045\nYXJncw== 22046\nMjIz 22047\nIElTSQ== 22048\nIHNpZ25hbGluZw== 22049\naW5hcg== 22050\nIGxhdWdocw== 22051\nIGZvcndhcmRz 22052\nIHJlY2tsZXNz 22053\nIGxpc3RlbmVycw== 22054\nYXRpdml0eQ== 22055\nIHZhc3RseQ== 22056\nbmFudA== 22057\nTGVzcw== 22058\nIEh1bnRpbmc= 22059\nIFNjaWVudGlmaWM= 22060\nSVRFRA== 22061\nIGtuaWdodA== 22062\nIEhUQw== 22063\ndXNh 22064\ndG1w 22065\nIHJ1ZGU= 22066\nIExlZ2VuZGFyeQ== 22067\nIGFyaXNlcw== 22068\nQmFk 22069\nIENsYWlt 22070\ncGVn 22071\nIHJlYWxpdGllcw== 22072\nVGhpbms= 22073\nIMKw 22074\nIHJvZGU= 22075\nIHN0cml2ZQ== 22076\nIGFuZWNk 22077\nIHNob3J0cw== 22078\nIGh5cG90aGVz 22079\nIGNvb3JkaW5hdGVk 22080\nIEdhbmRoaQ== 22081\nIEZQUw== 22082\nUkVE 22083\nIHN1c2NlcHRpYmxl 22084\nIHNocmluaw== 22085\nIENoYXJ0 22086\nSGVscA== 22087\nIGlvbg== 22088\nZGVlcA== 22089\ncmliZXM= 22090\nIEthaQ== 22091\nIEN1c3RvbWVy 22092\nU3VtbWFyeQ== 22093\nIGNvdWdo 22094\nd2lmZQ== 22095\nIGxlbmQ= 22096\nIHBvc2l0aW9uaW5n 22097\nIGxvdHRlcnk= 22098\nIENhbnlvbg== 22099\nIGZhZGU= 22100\nIGJyb256ZQ== 22101\nIEtlbm55 22102\nIGJvYXN0cw== 22103\nIEVuaGFuY2Vk 22104\ncmVjb3Jk 22105\nIGVtZXJnZW5jZQ== 22106\nIGFraW4= 22107\nIEJlcnQ= 22108\naXRvdXM= 22109\n4paR 22110\nIHN0aXA= 22111\nIGV4Y2hhbmdlZA== 22112\nb21vcmU= 22113\nYWxzaA== 22114\nIHJlc2Vydm9pcg== 22115\nIHN0YW5kcG9pbnQ= 22116\nV00= 22117\nIGluaXRpYXRl 22118\nIGRlY2F5 22119\nIGJyZXdlcnk= 22120\nIHRlcnJpYmx5 22121\nIG1vcnRhbA== 22122\nbGV2YXJk 22123\nIHJldmlz 22124\nTkk= 22125\nZWxv 22126\nIGNvbmZlc3M= 22127\nIE1TTkJD 22128\nIHN1Ym1pc3Npb25z 22129\nQ29udHJvbGxlcg== 22130\nIDIwMg== 22131\nIFJ1dGg= 22132\nfSk7 22133\nIEF6dXJl 22134\nIC4i 22135\nMjA2 22136\nIE1hcmtldGluZw== 22137\nIGxhdW5k 22138\naWVuY2llcw== 22139\nIHJlbm93bmVk 22140\nIFRyb3U= 22141\nIE5HTw== 22142\nYmxlbXM= 22143\nIHRlcnJpZmllZA== 22144\nIHdhcm5z 22145\nIHBlcnQ= 22146\nIHVuc3VyZQ== 22147\nNDgw 22148\nYWxleg== 22149\ndWx0eg== 22150\nIE91dHNpZGU= 22151\nIHN0eWw= 22152\nIFVuZGVyZ3JvdW5k 22153\nIHBhbmM= 22154\nIGRpY3Rpb25hcnk= 22155\nIGZvZQ== 22156\ncmltaW5hbA== 22157\nIE5vcndlZ2lhbg== 22158\nIGphaWxlZA== 22159\nIG1hdGVybmFs 22160\nw6ll 22161\nIEx1Y3k= 22162\nY29w 22163\nQ2hv 22164\nIHVuc2lnbmVk 22165\nIFplbGRh 22166\nIEluc2lkZXI= 22167\nIENvbnRpbnVlZA== 22168\nIDEzMw== 22169\nIE5hcnV0bw== 22170\nIE1ham9yaXR5 22171\nMTY5 22172\nIFdv 22173\n44KT 22174\nIHBhc3Rvcg== 22175\nIGluZm9ybWFs 22176\n0L0= 22177\nYW50aHJvcA== 22178\nam9pbg== 22179\n44GX 22180\naXRhdGlvbmFs 22181\nTlA= 22182\nIFdyaXRpbmc= 22183\nZm4= 22184\nIEJldmVy 22185\nMTk1 22186\nIHllbGxpbmc= 22187\nIGRyYXN0aWNhbGx5 22188\nIGVqZWN0 22189\nIG5ldXQ= 22190\nIHRocml2ZQ== 22191\nIEZyZXF1 22192\nb3V4 22193\nIHBvc3Nlc3Nlcw== 22194\nIFNlbmF0b3Jz 22195\nIERFUw== 22196\nIFNoYWtlc3BlYXJl 22197\nIEZyYW5jbw== 22198\nIExC 22199\ndWNoaQ== 22200\nIGluY2Fybg== 22201\nIGZvdW5kZXJz 22202\nRnVuY3Rpb24= 22203\nIGJyaWdodG5lc3M= 22204\nIEJU 22205\nIHdoYWxl 22206\nIFRoZWF0ZXI= 22207\nbWFzcw== 22208\nIERvbGw= 22209\nU29tZXRoaW5n 22210\nIGVjaG9lZA== 22211\nIEhleA== 22212\nY3JpdA== 22213\nYWZpYQ== 22214\nIGdvZGRlc3M= 22215\nIGVsZXZlbg== 22216\nIFByZXZpZXc= 22217\nIEF1cm9yYQ== 22218\nIDQwMQ== 22219\ndWxzaXZl 22220\nIExvZ2Fu 22221\naW5idXJnaA== 22222\nIENlbnRlcnM= 22223\nIE9OTFk= 22224\nIEFpZA== 22225\nIHBhcmFkb3g= 22226\nIGh1cmQ= 22227\nIExD 22228\nRHVl 22229\nY291cnQ= 22230\nIG9mZmVuZGVk 22231\nIGV2YWx1YXRpbmc= 22232\nIE1hdHRoZXdz 22233\nIHRvbWI= 22234\nIHBheXJvbGw= 22235\nIGV4dHJhY3Rpb24= 22236\nIEhhbmRz 22237\naWZp 22238\nIHN1cGVybmF0dXJhbA== 22239\nIENPTU0= 22240\nXT0= 22241\nZG9ncw== 22242\nIDUxMg== 22243\nIE1lZXRpbmc= 22244\nUmljaGFyZA== 22245\nIE1heGltdW0= 22246\nIGlkZWFscw== 22247\nVGhpbmdz 22248\nbWFuZA== 22249\nIFJlZ2FyZGxlc3M= 22250\nIGh1bWlsaQ== 22251\nYnVmZmVy 22252\nTGl0dGxl 22253\nIERhbmk= 22254\nIE5haw== 22255\nIGxpYmVyYXRpb24= 22256\nIEFiZQ== 22257\nIE9M 22258\nIHN0dWZmZWQ= 22259\nYWNh 22260\naW5kYQ== 22261\ncmFwaGlj 22262\nIG1vc3F1 22263\nIGNhbXBhaWduaW5n 22264\nIG9jY3VweQ== 22265\nU3F1 22266\ncmluYQ== 22267\nIFdlbA== 22268\nIFZT 22269\nIHBoeXNpYw== 22270\nIHB1bHM= 22271\ncmludA== 22272\nb2FkZWQ= 22273\nRVRG 22274\nIEFyY2hpdmVz 22275\nIHZlbnVlcw== 22276\naG5lcg== 22277\nIFR1cmJv 22278\nIGx1c3Q= 22279\nIGFwcGVhbGVk 22280\ncXVleg== 22281\naWxpYg== 22282\nIFRpbW90aHk= 22283\nIG9tbg== 22284\nZHJv 22285\nIG9ic2Vzc2lvbg== 22286\nIFNhdmFnZQ== 22287\nMTk5Ng== 22288\nR2xvYmFs 22289\nSmVz 22290\nMjE0 22291\nIHNsaWRpbmc= 22292\nIGRpc2FwcHJv 22293\nIE1hZ2ljYWw= 22294\nIHZvbHVudGFyaWx5 22295\nZ2I= 22296\nYW5leQ== 22297\nIHByb3BoZXQ= 22298\nIFJlaW4= 22299\nIEp1bGlh 22300\nIFdvcnRo 22301\nYXVydXM= 22302\nIGJvdW5kcw== 22303\naWV1 22304\nKSkp 22305\nIGNyb3Jl 22306\nIENpdGl6ZW4= 22307\nU2t5 22308\nIGNvbHVtbmlzdA== 22309\nIHNlZWtlcnM= 22310\nb25kbw== 22311\nSVNB 22312\nIExlbmd0aA== 22313\nIG5vc3RhbGc= 22314\nIG5ld2NvbQ== 22315\nIGRldHJpbQ== 22316\nZW50cmlj 22317\nMzc1 22318\nIEdF 22319\nIGF1dG9w 22320\nIGFjYWRlbWljcw== 22321\nQXBwRGF0YQ== 22322\nIFNoZW4= 22323\nIGlkaW90 22324\nIFRyYW5zaXQ= 22325\nIHRlYXNwb29u 22326\nV2ls 22327\nS08= 22328\nIENvbWVkeQ== 22329\nPiw= 22330\nIHBvcHVsYXRlZA== 22331\nV0Q= 22332\nIHBpZ3M= 22333\nIE9jdWx1cw== 22334\nIHN5bXBhdGhldGlj 22335\nIG1hcmF0aG9u 22336\nMTk4 22337\nIHNlaXp1cmU= 22338\nc2lkZWQ= 22339\nIGRvcA== 22340\naXJ0dWFs 22341\nTGFuZA== 22342\nIEZsb29y 22343\nb3NhdXJz 22344\nLi4uXQ== 22345\nIGxvcw== 22346\nIHN1YnNpZGlhcnk= 22347\nRVk= 22348\nIFBhcnRz 22349\nIFN0ZWY= 22350\nIEp1ZGljaWFyeQ== 22351\nIDEzNA== 22352\nIG1pcnJvcnM= 22353\nIGtldA== 22354\ndGltZXM= 22355\nIG5ldXJvbG9n 22356\nIGNhdg== 22357\nIEd1ZXN0 22358\nIHR1bW9y 22359\nc2NpbGw= 22360\nIExsb3lk 22361\nRXN0 22362\nIGNsZWFyZXI= 22363\nIHN0ZXJlb3R5cGVz 22364\nIGR1cg== 22365\nbm90aGluZw== 22366\nUmVkZGl0 22367\nIG5lZ290aWF0ZWQ= 22368\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 22369\nMjM1 22370\nIGZsb3du 22371\nIFNlb3Vs 22372\nIFJlc2lkZW50 22373\nIFNDSA== 22374\nIGRpc2FwcGVhcmFuY2U= 22375\nIFZpbmNl 22376\nZ3Jvd24= 22377\nIGdyYWJz 22378\ncmls 22379\nIEluZmluaXRl 22380\nIFR3ZW50eQ== 22381\nIHBlZGVzdHJpYW4= 22382\nIGplcnNleQ== 22383\nIEZ1cg== 22384\nIEluZmluaXR5 22385\nIEVsbGlvdHQ= 22386\nIG1lbnRvcg== 22387\nIG1vcmFsbHk= 22388\nIG9iZXk= 22389\nc2VjdXJl 22390\naWZmZQ== 22391\nIGFudGliaW90aWNz 22392\nYW5nbGVk 22393\nIEZyZWVtYW4= 22394\nIEludHJvZHVjdGlvbg== 22395\nSnVu 22396\nIG1hcnNo 22397\naWNhbnM= 22398\nIEVWRU5UUw== 22399\nb2Nob25k 22400\nV2FsbA== 22401\naWN1bHR5 22402\nIG1pc2RlbWVhbm9y 22403\nIGx5 22404\nVGhvbWFz 22405\nIFJlc29sdXRpb24= 22406\nIGFuaW1hdGlvbnM= 22407\nIERyeQ== 22408\nIGludGVyY291cnNl 22409\nIE5ld2Nhc3RsZQ== 22410\nIEhvZw== 22411\nIEVxdWlwbWVudA== 22412\nMTc3 22413\nIHRlcnJpdG9yaWFs 22414\nIGFyY2hpdmVz 22415\nMjAz 22416\nRmlsdGVy 22417\nIE11bmljaA== 22418\nIGNvbW1hbmRlZA== 22419\nIFdhbmQ= 22420\nIHBpdGNoZXM= 22421\nIENyb2F0 22422\nIHJhdGlvcw== 22423\nIE1pdHM= 22424\nIGFjY3VtdWxhdGVk 22425\nIFNwZWNpZmljYWxseQ== 22426\nIGdlbnRsZW1hbg== 22427\nYWNlcmI= 22428\nIHBlbm4= 22429\nIGFrYQ== 22430\nIEZ1aw== 22431\nIGludGVydmVuZQ== 22432\nIFJlZnVnZQ== 22433\nIEFsemhlaW1lcg== 22434\nIHN1Y2Nlc3Npb24= 22435\nb2hhbg== 22436\nZG9lcw== 22437\nTG9yZA== 22438\nIHNlcGFyYXQ= 22439\nIGNvcnJlc3BvbmRlbmNl 22440\nIHNoaW55 22441\nUHJpb3I= 22442\nIHN1bGY= 22443\nIG1pc2VyYWJsZQ== 22444\nIGRlZGljYXRpb24= 22445\nKCku 22446\nIHNwZWNpYWxpc3Rz 22447\nIGRlZmVjdHM= 22448\nIEN1bHQ= 22449\nIFhpYQ== 22450\nIGplb3BhcmQ= 22451\nIE9yZQ== 22452\nQWJpbGl0eQ== 22453\nIGxlYXI= 22454\nIGFtYml0aW9ucw== 22455\nIEJNSQ== 22456\nIEFyYWJz 22457\nIDE5NDI= 22458\nIHByZXNlcnZhdGlvbg== 22459\naWZpY2F0ZQ== 22460\nIGFzaGFtZWQ= 22461\nbG9zcw== 22462\nIFJlc3RhdXI= 22463\nIHJlc2VtYmxl 22464\nIGVucmljaA== 22465\nIEtO 22466\nIENsYW4= 22467\nZmxvYXQ= 22468\nIHBsYXlhYmxl 22469\nSVRU 22470\nIGhhcm1vbnk= 22471\nYXJyaXNvbg== 22472\nIFdlaW5zdGVpbg== 22473\nd2VyZQ== 22474\nIHBvaXNvbmluZw== 22475\nIENvbXB1dA== 22476\nIFdvcmRQcmVzcw== 22477\nbWFqb3I= 22478\nIFZhbHZl 22479\nRmFu 22480\nIFRocm93 22481\nIFJvbWFucw== 22482\nIERlcHJlc3Npb24= 22483\nYWRvcw== 22484\nIHRvcnR1cmVk 22485\nIGJhbGFuY2luZw== 22486\nYm90dG9t 22487\nIGFjcXVpcmluZw== 22488\nIE1vbnRl 22489\nYXJkaQ== 22490\nIGF1cmE= 22491\nICMj 22492\nIFN0YW5kaW5n 22493\nIEF0bGFz 22494\nQ0Y= 22495\nIGludHJpbnM= 22496\nIEJlbmdoYXpp 22497\nIGNhbXBpbmc= 22498\nIHRhcHBlZA== 22499\nYmxhZGU= 22500\nc3Ryb3Vz 22501\nIFJhYmI= 22502\nIFdyaXR0ZW4= 22503\ndGlw 22504\nIE5laWdo 22505\nc3RlcmRhbQ== 22506\nIEFsbG93 22507\nIEhlYWxpbmc= 22508\nIFJob2Q= 22509\nbnVt 22510\nIGNhZmZlaW5l 22511\nIFBlcmNlbnQ= 22512\nIGJvbw== 22513\nIGFwcGxlcw== 22514\nMzA1 22515\nIHdlbGNvbWluZw== 22516\nIGFwcGxhdWQ= 22517\nIGF1c3Rlcml0eQ== 22518\nwrE= 22519\nIFJlYWxpdHk= 22520\nZWZl 22521\n5a4= 22522\nIHN1Y2tz 22523\nIHRhYnM= 22524\nIFBheVBhbA== 22525\nIGJhY2twYWNr 22526\nIGdpZnRlZA== 22527\nYWJ1bGFyeQ== 22528\nIFNjb3V0 22529\naXJ0ZWVu 22530\nIGNoaW4= 22531\nIG9taXR0ZWQ= 22532\nIG5lZ2F0aXZlbHk= 22533\nIGFjY2Vzc2luZw== 22534\nIEVhcm4= 22535\nIGFtYnVsYW5jZQ== 22536\nIGhlYWRwaG9uZXM= 22537\nIDIwNQ== 22538\nIFJlZnJlc2g= 22539\ncHJlc2lkZW50 22540\nIEtpdGNoZW4= 22541\nIEVudGVyZWQ= 22542\nIFNueWRlcg== 22543\nMDA1 22544\nb21pY2Fs 22545\nIGJvcnJvd2Vk 22546\nIE5lbQ== 22547\nIGF2aWF0aW9u 22548\nIHN0YWxs 22549\ncmltaW5hdGlvbg== 22550\nIHVuaWZvcm1z 22551\naXRpbWU= 22552\nIFNpbW1vbnM= 22553\nZW5lcmd5 22554\nYWJsaXNoZWQ= 22555\neXk= 22556\ncXVhbGlmaWVk 22557\nIHJhbGxpZXM= 22558\nIFN0dWFydA== 22559\nZmxpZ2h0 22560\nIGdhbmdz 22561\ncmFn 22562\nIHZhdWx0 22563\nbHV4 22564\nIENvbXBhcg== 22565\nIGRlc2lnbmF0aW9u 22566\nMjA5 22567\nIEpvcw== 22568\nZG9sbGFy 22569\nemVybw== 22570\nIHdlbGxz 22571\nMzAz 22572\nIGNvbnN0aXR1ZW50cw== 22573\nIGhlY2s= 22574\nIGNvd3M= 22575\nIGNvbW1hbmRlcnM= 22576\nIGRpZmZlcmVudGlhbA== 22577\nIENhdGhlcmluZQ== 22578\nMjk5 22579\nIHZhbHZl 22580\nIGJyYWNl 22581\nIHBlcnNwZWN0aXZlcw== 22582\nY2VydA== 22583\nZmFjdA== 22584\naWN1bGFybHk= 22585\nIE1jTg== 22586\ncGxhbmVz 22587\nIGludHJpYw== 22588\nIHBlYXM= 22589\nb3Zhbg== 22590\nIHRvc3NlZA== 22591\ncmV0Y2g= 22592\nIExvcGV6 22593\nIHVuZmFtaWxpYXI= 22594\nZGVhdGg= 22595\nIEFwYXJ0 22596\nIENoYW5n 22597\nIHJlbGlldmVk 22598\ncm9waGU= 22599\nIGFpcnBvcnRz 22600\nIGZyZWFr 22601\ndXRpbA== 22602\nTWlsbA== 22603\nIENoaW4= 22604\nIE93ZW4= 22605\nbWFsZQ== 22606\nIEJyb2tlbg== 22607\nIFdpbmRz 22608\ncm9i 22609\ncmlzaW5n 22610\nIGZpcmVmaWdodGVycw== 22611\nIGF1dGhvcml0YXJpYW4= 22612\nIDE0OA== 22613\nQml0Y29pbg== 22614\nZXh0ZXJuYWw= 22615\nIGJyb3dzZXJz 22616\naWNoZXZlcg== 22617\nb3JpYW4= 22618\nIHVuYg== 22619\nIHBva2U= 22620\nIFpvdA== 22621\nTWlk 22622\nIFBvcHVsYXI= 22623\nIGNvdmVydA== 22624\nIGNvbnRyaWJ1dGVz 22625\nIDY1MA== 22626\nIGNvbnRlbnRpb24= 22627\nR2F0ZQ== 22628\nIGNvbnNvbGVz 22629\nIGNocm9tb3M= 22630\nIElY 22631\nIHZpc3VhbGx5 22632\nIEVpc2Vu 22633\nIGpld2Vscnk= 22634\nIGRlbGVnYXRpb24= 22635\nIGFjY2VsZXJhdGU= 22636\nIFJpbGV5 22637\nIHNsb3Bl 22638\nIGluZG9vcg== 22639\naXRpYWxseQ== 22640\nIGh1Z2VseQ== 22641\nIHR1bm5lbHM= 22642\nIGZpbmVk 22643\nIGRpcmVjdGl2ZQ== 22644\nIGZvcmVoZWFk 22645\ndXN0b21lZA== 22646\nIHNrYXRl 22647\nTXVzaWM= 22648\nZ2Fz 22649\nIHJlY29nbml6aW5n 22650\nYW1ibw== 22651\nIG92ZXJ3ZWlnaHQ= 22652\nIEdyYWRl 22653\n2Yo= 22654\nIHNvdW5kaW5n 22655\nIGxvY2tpbmc= 22656\nIFJFTQ== 22657\nU3RvcmU= 22658\nIGV4Y2F2 22659\nIExpa2V3aXNl 22660\nIExpZ2h0cw== 22661\nIGVsYm93 22662\nIFN1cHBseQ== 22663\nd2lj 22664\nIGhhbmRzb21l 22665\nMTk5NA== 22666\nQ29sbA== 22667\nIGFkZXF1YXRlbHk= 22668\nIEFzc29jaWF0ZQ== 22669\nIHN0cmlwcw== 22670\nIGNyYWNrZG93bg== 22671\nIG1hcnZlbA== 22672\nIEt1bg== 22673\nIHBhc3NhZ2Vz 22674\nQEBAQA== 22675\nIFRhbGw= 22676\nIHRob3VnaHRmdWw= 22677\nbmFtZXNl 22678\nIHByb3N0aXR1dGlvbg== 22679\nYnVzaW5lc3M= 22680\nIGJhbGxpc3RpYw== 22681\ncGVyc29uYWw= 22682\nY2ln 22683\naXphdGlvbmFs 22684\nUm91bmQ= 22685\nIMKgIMKgIMKgIMKg 22686\nIENvbGVtYW4= 22687\nIGFkbWl0dGluZw== 22688\nIFBsdWc= 22689\nIGJpdGNvaW5z 22690\nIFN1eg== 22691\nIGZhaXJuZXNz 22692\nIHN1cHBsaWVy 22693\nIGNhdGFzdHJvcGhpYw== 22694\nIEhlbGVu 22695\nb3F1 22696\nTWFyYw== 22697\nIEFydGljbGVz 22698\nZ2ll 22699\nIGVuZGFuZ2VyZWQ= 22700\nIGRlc3Rpbnk= 22701\nIFZvbHQ= 22702\nb2xpYQ== 22703\nYXhpcw== 22704\nIGNoZWF0 22705\nIHVuaWZpZWQ= 22706\nSUNP 22707\ncXVvdGU= 22708\nMzAy 22709\nIFNlZA== 22710\nIHN1cHByZXNzaW9u 22711\nIGFuYWx5emluZw== 22712\nIHNxdWF0 22713\nIGZpZ3VyaW5n 22714\nIGNvb3JkaW5hdGVz 22715\nIGNodW5rcw== 22716\nIDE5NDY= 22717\nIHN1YnA= 22718\nIHdpa2k= 22719\nIEZvcmJlcw== 22720\nIEp1cGl0ZXI= 22721\nIEVyaWs= 22722\naW1lcg== 22723\nIENvbW1lcmNpYWw= 22724\nXCk= 22725\nIGxlZ2l0aW1hY3k= 22726\nIGRlbnRhbA== 22727\nIE1lYW4= 22728\nIGRlZmljaXRz 22729\nNTUw 22730\nT3JpZ2luYWxseQ== 22731\nIEhvcnJvcg== 22732\nIGNvbnRhbWluYXRpb24= 22733\nbGxhaA== 22734\nIGNvbmZpc2M= 22735\nIENsYXJl 22736\nVEI= 22737\nIEZhaWxlZA== 22738\nYW5lZA== 22739\nIHJ1bGVy 22740\nIENvbnRyb2xsZXI= 22741\nIGZlbWluaXN0cw== 22742\nRml4 22743\nZ2F5 22744\nMjA3 22745\nIHJhYmJpdA== 22746\nVGhpcmQ= 22747\nb3dudG93bg== 22748\nIGdsdWU= 22749\nIHZvbGF0aWxl 22750\nIHNoaW5pbmc= 22751\nIGZvbGw= 22752\nIGltcGFpcmVk 22753\nIHN1cGVycw== 22754\n5og= 22755\nIGNsdXRjaA== 22756\nmumGkg== 22757\nIHByb2xldA== 22758\nICgh 22759\nIHllbGxlZA== 22760\nIEtpZXY= 22761\nIEVybg== 22762\nIFNob2Nr 22763\nS0I= 22764\nIHNpdHVhdGVk 22765\ncXVlcnk= 22766\nIE5hcw== 22767\nIGFubmV4 22768\nY2hhcmFjdGVy 22769\nIEhvbGlkYXk= 22770\nIGF1dG9tYXRpb24= 22771\nIEppbGw= 22772\nIFJlbWFzdGVyZWQ= 22773\nIGxpbmVt 22774\nIHdpbGRlcm5lc3M= 22775\nIEhvcml6b24= 22776\nIEd1aW5lYQ== 22777\nQVo= 22778\nIG1haW5sYW5k 22779\nIHNlY3JlY3k= 22780\nTEVBU0U= 22781\nIHB1bms= 22782\nIFByb3ZpbmNl 22783\nKCks 22784\nU3BlZWQ= 22785\nIGhhbmRpbmc= 22786\nIFNlYmFzdA== 22787\nU2ly 22788\ncmFzZQ== 22789\nIGpvdXJuYWxz 22790\nIGNvbmdlc3Q= 22791\nIFR1dA== 22792\naXJyZWw= 22793\nIHNjaGl6b3BocmVuaWE= 22794\nIG1pc29neW4= 22795\naGVhbHRoeQ== 22796\nSXJvbg== 22797\nIHJlYWN0ZWQ= 22798\nLSQ= 22799\nMjUy 22800\nIHBsdXJhbA== 22801\nIHBsdW0= 22802\nIGJhcmdhaW4= 22803\nIGdyb3VuZGVk 22804\nZmluZGVy 22805\nIGRpc3Nl 22806\nIExheg== 22807\nT09E 22808\nIGF0cm9j 22809\nRmFjdG9yeQ== 22810\nIG1pbmlvbnM= 22811\nIG9yaQ== 22812\nIEJyYXZl 22813\nIFBSRQ== 22814\nIE15YW5tYXI= 22815\nIEhvZA== 22816\nIGV4cGVkaXRpb24= 22817\nIGV4cGxvZGU= 22818\nIENvb3Jk 22819\nIGV4dHI= 22820\nIEJyaWVm 22821\nIEFESEQ= 22822\nIGhhcmRjb3Jl 22823\nZmVlZGluZw== 22824\nIGRpbGU= 22825\nIEZydWl0 22826\nIHZhY2NpbmF0aW9u 22827\nIE1hbw== 22828\nb3NwaGVyZQ== 22829\nIGNvbnRlc3Rz 22830\nLXw= 22831\nIGZyZW4= 22832\naXNwaGVyZQ== 22833\nUm9t 22834\nIFNoYXJw 22835\nIFRyZW5k 22836\nIGRpc2Nvbm5lY3Q= 22837\n4oCi4oCi 22838\nIHBlcnNlY3V0aW9u 22839\nRWFydGg= 22840\nIGhlYWx0aGllcg== 22841\nMzg0 22842\nIGNvYg== 22843\nIFRyaW5pdHk= 22844\nT1dT 22845\nQU5O 22846\nIHNwZWNpYWx0eQ== 22847\nIGdydQ== 22848\nIGNvb3BlcmF0aXZl 22849\nd2h5 22850\nU3RhcnRpbmc= 22851\nIElzc3Vlcw== 22852\nc3RyZQ== 22853\nZW5zb3I= 22854\nIDE4NQ== 22855\nQWR2 22856\nIT8= 22857\nIFJldmVs 22858\nZW1pYQ== 22859\nIEh1bGs= 22860\nIGNlbGVicmF0aW9ucw== 22861\nIFNvdQ== 22862\ncmF1ZA== 22863\nIEtsZWlu 22864\nIHVucmVhbA== 22865\nY29udGV4dA== 22866\nIHBhcnRuZXJzaGlwcw== 22867\nIGFkb3B0aW5n 22868\ndGljYWw= 22869\nIHNwbGFzaA== 22870\nIEhlemJvbGxhaA== 22871\nY2F0ZWdvcnk= 22872\nY3ljbG9w 22873\neHRvbg== 22874\nIERvdA== 22875\ndXJkeQ== 22876\ndHo= 22877\nIGVudmVsb3Bl 22878\nIE5M 22879\n4pU= 22880\nIHdoZXJlaW4= 22881\nU3BlYw== 22882\nMTg0 22883\nIHRlbGV2 22884\nYWxpYXRpb24= 22885\nIG15dGhz 22886\n5bA= 22887\nIHJpZ29yb3Vz 22888\nIGNvbW11bmljYXRpbmc= 22889\nIG9ic2VydmVy 22890\nIHJlaGU= 22891\nIFdhc2g= 22892\nIGFwb2xvZ2l6ZWQ= 22893\nIFRpbg== 22894\nIGV4cGVuZGl0dXJlcw== 22895\nd29ya2Vycw== 22896\nZG9jdW1lbnQ= 22897\nIGhlc2l0YXRl 22898\nIExlbmlu 22899\nIHVucHJlZGljdGFibGU= 22900\nIHJlbmV3YWw= 22901\nY2xlcg== 22902\nb2tpYQ== 22903\nIENPTlQ= 22904\nIHBvc3RzZWFzb24= 22905\nVG9rZW5z 22906\nIGV4YWNlcmI= 22907\nIGJldHRpbmc= 22908\nIDE0Nw== 22909\nIGVsZXZhdGlvbg== 22910\nV29vZA== 22911\nIFNvbG9tb24= 22912\nMTk0 22913\nMDA0 22914\nb3V0cHV0 22915\nIHJlZHVuZA== 22916\nIE11bWJhaQ== 22917\nIHBI 22918\nIHJlcHJvZHVjZQ== 22919\nIER1cmF0aW9u 22920\nTUFY 22921\nIGJvZw== 22922\nQ0JT 22923\nIEJhbGFuY2U= 22924\nIFNndA== 22925\nIFJlY2VudA== 22926\nIGNk 22927\nIHBvcHBlZA== 22928\nIGluY29tcGV0 22929\ncHJvcA== 22930\nYXlhbg== 22931\nZ3V5 22932\nUGFjaWZpYw== 22933\nIHR5cg== 22934\nIHt7 22935\nIE15c3RpYw== 22936\nIERhbmE= 22937\nIG1hc3R1cmI= 22938\nIGdlb21ldHJ5 22939\nw6I= 22940\nIENvcnJlY3Q= 22941\nIHRyYWplY3Rvcnk= 22942\nIGRpc3RyYWN0ZWQ= 22943\nIGZvbw== 22944\nIFdlbHNo 22945\nTHVj 22946\nbWl0aA== 22947\nIHJ1Z2J5 22948\nIHJlc3BpcmF0b3J5 22949\nIHRyaWFuZ2xl 22950\nIDIxNQ== 22951\nIHVuZGVyZ3JhZHVhdGU= 22952\nIFN1cGVyaW9y 22953\nY2hhbmdpbmc= 22954\nXy0= 22955\nIHJpZ2h0bHk= 22956\nIHJlZmVyZWU= 22957\nIGx1Y3JhdGl2ZQ== 22958\nIHVuYXV0aG9yaXplZA== 22959\nIHJlc2VtYmxlcw== 22960\nIEdOVQ== 22961\nIERlcmJ5 22962\nIHBhdGh3YXlz 22963\nIExlZA== 22964\nIGVuZHVyYW5jZQ== 22965\nIHN0aW50 22966\nIGNvbGxlY3Rvcg== 22967\nRmFzdA== 22968\nIGRvdHM= 22969\nIG5hdGlvbmFscw== 22970\nIFNlY3VyaXRpZXM= 22971\nIHdoaXA= 22972\nUGFyYW0= 22973\nIGxlYXJucw== 22974\nTWFnaWM= 22975\nIGRldGFpbGluZw== 22976\nbW9vbg== 22977\nIGJyb2FkY2FzdGluZw== 22978\nIGJha2Vk 22979\nMjY1 22980\naG9sbQ== 22981\nIFNhaA== 22982\nIEh1c3NlaW4= 22983\nIENvdXJ0ZXN5 22984\nMTc0 22985\nIDE0Ng== 22986\nIGdlb2dyYXBoaWM= 22987\ncGVhY2U= 22988\nIGp1ZGdpbmc= 22989\nIFN0ZXJu 22990\nQnVy 22991\nIHN0b3J5bGluZQ== 22992\nR3Vu 22993\nIFN0aWNr 22994\nMjQ1 22995\nMzA3 22996\n44K044Oz 22997\nIEFkbWluaXN0cmF0b3I= 22998\nIGJ1cm50 22999\nIHBhdmU= 23000\nY2hvZXM= 23001\nRXhlYw== 23002\nIGNhbXB1c2Vz 23003\nUmVzdWx0 23004\nIG11dGF0aW9ucw== 23005\nIENoYXJ0ZXI= 23006\nIGNhcHR1cmVz 23007\nIGNvbXBhcmVz 23008\nIGJhZGdl 23009\nU2NpZW50 23010\nIGVyYWQ= 23011\naWVyeQ== 23012\nb2k= 23013\nZXR0ZXM= 23014\nIEVzdGF0ZQ== 23015\nIHN0cmFw 23016\nIHByb3VkbHk= 23017\nIGZyaWVk 23018\nIHdpdGhkcmF3bg== 23019\nIFZveQ== 23020\ncGhvbnk= 23021\nSXRlbXM= 23022\nIFBpZXJjZQ== 23023\nYmFyZA== 23024\nIGFubm90YXRpb24= 23025\nYW50b24= 23026\naWxsb24= 23027\nSW1wcm8= 23028\nLi4uKQ== 23029\nIGhhcHBpZXI= 23030\nLS0tLS0t 23031\nYWRqdXN0 23032\nIHN0YWZmZXJz 23033\nIGFjdGl2aXNt 23034\nIHBlcmY= 23035\nIGFscmlnaHQ= 23036\nTmVlZA== 23037\nIGNvbW1lbmNl 23038\nIG9waW9pZA== 23039\nIEFtYW5kYQ== 23040\nRXM= 23041\nIFBhcnM= 23042\nIEthdw== 23043\nV29ya3M= 23044\nMjQ4 23045\nIGluZG8= 23046\ndGM= 23047\nZW5kYW50 23048\nIE1vdG8= 23049\nIGxlZ2FsaXphdGlvbg== 23050\nT1RF 23051\nIHRhc2tlZA== 23052\nIHRzcA== 23053\nIEFDVElPTlM= 23054\nMTY2 23055\nIHJlZnJlc2hpbmc= 23056\nIE5S 23057\nIFBlcmV6 23058\nIGluZnJpbmdlbWVudA== 23059\nU1k= 23060\nTGlzdGVu 23061\naW5uaW5n 23062\na3U= 23063\nIHJvdGF0ZQ== 23064\ncHJvZ3JhbQ== 23065\nYXJhaA== 23066\nRGVzaWdu 23067\nICjCow== 23068\nIHN0b3Jpbmc= 23069\nIHdhcnJhbnRz 23070\nIGp1ZGdlbWVudA== 23071\nIEJyaXN0 23072\ndXN1YWxseQ== 23073\ncGhvdG8= 23074\nIFJhbg== 23075\nIFBpbmU= 23076\nIG91dHJhZ2VvdXM= 23077\nIFZhbGVudGluZQ== 23078\nbHVlbmNl 23079\nIEV2ZXJ5Ym9keQ== 23080\nQWx0ZXJu 23081\nIHJlbGV2YW5jZQ== 23082\nIHRlcm1pbmF0ZWQ= 23083\nIGRlc3NlcnQ= 23084\nIGZ1bGZpbGxlZA== 23085\nIHByb3NlY3V0ZWQ= 23086\nIFdvcmRz 23087\nIG1pZ3JhbnQ= 23088\nIGN1bHRpdmF0aW9u 23089\nw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgg== 23090\naWRlbGl0eQ== 23091\nIFZlcm4= 23092\nIExvZ2lu 23093\nIG1ldGFwaG9y 23094\nIFRpcA== 23095\nIHJlY3J1aXRz 23096\nIFBpZw== 23097\ncmliaW5n 23098\nIGVudGh1c2lhc3Rz 23099\nZXhwZXI= 23100\nIGZyaWdodGVuaW5n 23101\nIEhhaXI= 23102\nYW5zb24= 23103\nc3RyYXRl 23104\nIGhp 23105\nSGVpZ2h0 23106\nIG93bmluZw== 23107\nbm9uZQ== 23108\nIGRpc2xpa2U= 23109\nIGtuaXZlcw== 23110\ncGhlcmQ= 23111\nIGxvdWRseQ== 23112\nIEFQSXM= 23113\nRGlzcGxheQ== 23114\nIExhYw== 23115\nIFVTUw== 23116\nYWJs 23117\ndmVyYWdlcw== 23118\nSmV3 23119\nIDE3Mg== 23120\nIEhpc3RvcmljYWw= 23121\nYXRvb24= 23122\nIFBoeXNpY3M= 23123\naW50ZXJu 23124\nIHdhcm10aA== 23125\nIHRvcHA= 23126\nRE0= 23127\nIGd1bm1hbg== 23128\nIGVtcGVyb3I= 23129\nb2Rp 23130\n44Oj 23131\naW5hdG9yeQ== 23132\nIFJpYg== 23133\nIDEzMQ== 23134\nIFNhdHVybg== 23135\nIFNoaW5pbmc= 23136\nIHdha2luZw== 23137\nUXVvdGVz 23138\nIGNvbWVkaWFu 23139\nZW5iZXJn 23140\nwr0= 23141\nIGJlbGlldmVycw== 23142\nIHBhcGVyd29yaw== 23143\nY3VzdG9t 23144\nIGxldg== 23145\nIGxhbWVudA== 23146\nIHBvdXJpbmc= 23147\nMjIy 23148\ncG9saXRpY2Fs 23149\nIFN1cHBsZW1lbnQ= 23150\nbWFpZA== 23151\nIGNydWVsdHk= 23152\nIHRyZWFk 23153\neXNpY3M= 23154\nQXc= 23155\ncml0ZXM= 23156\nIG1vZGlmaWVy 23157\nIFBvc2l0aW9u 23158\nQWRhbQ== 23159\nbGI= 23160\ndWJz 23161\nIGltcGVyZmVjdA== 23162\nIGNsdXN0ZXJz 23163\nIEVuZ2luZWVy 23164\nIENoZXJyeQ== 23165\nIGluYXVndXJhdGlvbg== 23166\nIFNhdQ== 23167\nIGVtYm9kaW1lbnQ= 23168\nIFVuY2xl 23169\nIG92ZXJy 23170\nIGV4cGxvc2lvbnM= 23171\nY3VsZQ== 23172\nIFByaW5jZXRvbg== 23173\nIEFuZHJlYQ== 23174\nIGluY29ycmVjdGx5 23175\nIGVhcm5lc3Q= 23176\nIHBpbGdy 23177\nIFNwcmludA== 23178\nIHNsZWV2ZQ== 23179\nIGhlYXJz 23180\nIEFtYXppbmc= 23181\nIGJyb3dzaW5n 23182\nYWdpbg== 23183\nIGhvbWVsYW5k 23184\nIGhhdw== 23185\nIGRpdmluZw== 23186\naXN0ZXJlZA== 23187\nMTc4 23188\nIGJhcmdhaW5pbmc= 23189\nIEFyY2FkZQ== 23190\nIGRlbGVnYXRl 23191\ndGVyc29u 23192\nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== 23193\nIEphY2tzb252aWxsZQ== 23194\nMjc1 23195\nIHN0YWdu 23196\nIGFkYW0= 23197\nIFNoZXJtYW4= 23198\nQ0I= 23199\nIHN1YnVyYg== 23200\nIEZvb2Rz 23201\nIGNvbnZlcnRpbmc= 23202\nIEFyaXN0 23203\nIGNoYW1iZXJz 23204\nbG92ZQ== 23205\nIGFtaW5v 23206\nIEdhbg== 23207\nIG1hZG5lc3M= 23208\nbWM= 23209\nIFVTRQ== 23210\nZGVmaW5lZA== 23211\nIHVsdHI= 23212\naW5kdXN0 23213\nIHdvbHZlcw== 23214\nbGFuY2U= 23215\nQWRkaXRpb25hbGx5 23216\nIGNyYWNrcw== 23217\nYXNpYQ== 23218\nIFJlYXNvbg== 23219\nIFB1bXA= 23220\nIGFjY2lkZW50YWw= 23221\nIExhc2Vy 23222\nIFJpZA== 23223\nIGluaXRpYWxpemVk 23224\nZWxsaQ== 23225\nIHVubmFtZWQ= 23226\nIG5vdW4= 23227\nIFBhc3NlZA== 23228\nIGhvc3RhZ2U= 23229\nIEV0aGlvcA== 23230\nc2hpcnRz 23231\nIHVucmVs 23232\nIEVtYmFzc3k= 23233\nIDE5NDE= 23234\nIGF0b21z 23235\nIHB1cnBvcnRlZA== 23236\nMTY0 23237\nIEZp 23238\nIGdhbGxvbnM= 23239\nIE1vbmljYQ== 23240\nIHBn 23241\nZW5tZW50 23242\nIHNvcnRlZA== 23243\nIEdvc3BlbA== 23244\nIGhlaWdodHM= 23245\nIHRyYWNlZA== 23246\nIHVuZGVyZ29pbmc= 23247\nU2hlbGw= 23248\nIHNhY2tz 23249\nIHByb3BvcnRpb25z 23250\nIGhhbGx1Yw== 23251\nRm9udA== 23252\nYWNldA== 23253\nIHdhcm1lcg== 23254\nIElOVEVS 23255\nIGdyYWJiaW5n 23256\nUGx1Zw== 23257\nIHJlYWxpemF0aW9u 23258\nIEJ1cmtl 23259\nIGVuY2hhbnQ= 23260\nQVRFUg== 23261\nIFNlZWQ= 23262\nIGFidW5kYW50 23263\nRk0= 23264\nIGNpdmlj 23265\nVnM= 23266\naXNp 23267\nIHZvdw== 23268\nIHJlcGVy 23269\nIFBhcnRuZXJzaGlw 23270\nIHBlbmV0cmF0aW9u 23271\nIGF4ZQ== 23272\nIHNoYXR0ZXJlZA== 23273\nIFpvbWJpZXM= 23274\nIHZpbnls 23275\nIEFsZXJ0 23276\nZW9u 23277\nIG9ibGlnZWQ= 23278\nIElsbHVzdA== 23279\nIFBsYXph 23280\nIEZyb250aWVy 23281\nIGRhdmlkamw= 23282\nIFNlcmlhbA== 23283\nIEhhdg== 23284\nIE51dHJpdGlvbg== 23285\nQmk= 23286\nIOKWiA== 23287\nIEpheXM= 23288\nbGludXg= 23289\nIGh1cnJ5 23290\nIHZveQ== 23291\nIGhvcGVsZXNz 23292\nIFN0ZWFsdGg= 23293\nIOOB 23294\nZXNzb3Jz 23295\ndHRsZQ== 23296\nYm9yZw== 23297\nIFNhZmFyaQ== 23298\nZmVsbA== 23299\nIHdhcnk= 23300\nZHVl 23301\nIEFib3Zl 23302\nSGE= 23303\nRUxM 23304\nIG5vdG9y 23305\nIFdvbg== 23306\nVG9v 23307\nIG9jY3VwYXRpb25z 23308\nIHBvc3Nlc3Npb25z 23309\nIGludml0aW5n 23310\nIHByZWRhdG9ycw== 23311\nIGFjY2VsZXJhdGVk 23312\nIDE1Nw== 23313\ndXRlcnRl 23314\nIEN1YmU= 23315\nZWFzdA== 23316\nYWNjb3VudA== 23317\nR2l2ZQ== 23318\nIHRyYW5zcGxhbnQ= 23319\ncmVkaWVudHM= 23320\naWRhYmxl 23321\nIHNjcmVlbnNob3Rz 23322\nIEd1bmQ= 23323\nIEZT 23324\nIHRyYXZlbGVycw== 23325\nIHNlbnNvcnk= 23326\nIEZpYXQ= 23327\nIFJvY2tldHM= 23328\njos= 23329\nX3s= 23330\nRnJpZW5k 23331\nIGNoYXJtaW5n 23332\nQUxT 23333\nIGVuam95bWVudA== 23334\nbXBo 23335\nIDUwMDA= 23336\nIFJFRw== 23337\n2YY= 23338\nYmlh 23339\nIGNvbXBpbGF0aW9u 23340\ncm9zdA== 23341\nIFZQ 23342\nIFNjaG5l 23343\nMjAxOQ== 23344\nIGNvcHlpbmc= 23345\nTU9SRQ== 23346\nIEZsb3Jl 23347\nZmFsbHM= 23348\nMjE1 23349\ndG90YWw= 23350\nIGRpc2NpcGxlcw== 23351\nZG91Ymxl 23352\nIGV4Y2VlZGluZw== 23353\nIHNtYXNoZWQ= 23354\nIGNvbmNlcHR1YWw= 23355\nIFJvbWFuaWE= 23356\nIEJyZW50 23357\nIElDRQ== 23358\nIFRvdQ== 23359\nIGdyYXA= 23360\nIG5haWxz 23361\nMTg5 23362\n44OY 23363\nIHByb2N1cmU= 23364\nZXVy 23365\nIGNvbmZpcm1pbmc= 23366\nIENlYw== 23367\nYXdp 23368\nIEVkZW4= 23369\nIG5n 23370\nIGVuZ2luZWVyZWQ= 23371\nYXRpY3M= 23372\nIGhvb2tlZA== 23373\nIGRpc2d1c3Rpbmc= 23374\nIE11cmRlcg== 23375\n44K/ 23376\nTGlicmFyeQ== 23377\nIDE2OA== 23378\nQWxtb3N0 23379\naGVtYXRpYw== 23380\nTWVudQ== 23381\nIE5vdHJl 23382\nIEp1cg== 23383\nIGtpZG5hcHBlZA== 23384\nIGhhY2tlcg== 23385\nIEphZGU= 23386\nIGNyZWVweQ== 23387\nIGRyYXdpbmdz 23388\nIFNwb25zb3I= 23389\nIGN5Y2xpc3Rz 23390\nIEdvYmxpbg== 23391\nIG9wdGltaXplZA== 23392\nIHN0YWdlZA== 23393\nIE1jRA== 23394\nYmV0d2Vlbg== 23395\nQWdl 23396\nZW5v 23397\nU2V4 23398\nIFdpZGU= 23399\nbmluZ3M= 23400\nYXZpcw== 23401\nIGluY2FwYWJsZQ== 23402\nIEtvYg== 23403\nIHJld2FyZGluZw== 23404\nIExvbmU= 23405\nb2xlc2NlbnQ= 23406\nIGNvbnRyYWN0ZWQ= 23407\nIHN0aWNreQ== 23408\nSm9zZQ== 23409\nQmFsbA== 23410\nZmVzdA== 23411\nIElucHV0 23412\nIFJlY2VudGx5 23413\nIHRvbWF0 23414\nc3F1YXJl 23415\nQXBwbGljYXRpb24= 23416\nIG5pdHJvZ2Vu 23417\nIGR1cGxpY2F0ZQ== 23418\nIFJlY29u 23419\nIERlYXI= 23420\nTG9uZG9u 23421\nIGludHJh 23422\nIGRvY2s= 23423\nIG91dHJlYWNo 23424\nIE1pbGxpb24= 23425\nIG1hbW1hbHM= 23426\nYW1wdG9u 23427\nVkFM 23428\nIHNuYXBz 23429\nIGRvcw== 23430\nIFdob2xl 23431\nIFJlYWR5 23432\nVHJ5 23433\nIFdpbm5pcGVn 23434\nZWFyYW5jZQ== 23435\nIGluY3VycmVk 23436\ncmVuY2hlZA== 23437\nIE5TVw== 23438\naWxvdA== 23439\ncmFpbmU= 23440\nIGN1YmU= 23441\nZ290 23442\nIHJ1bndheQ== 23443\nZXRlcm1pbmVk 23444\nIEhhd2tz 23445\nIHN1cnZpdm9y 23446\nIFdpc2g= 23447\nIERpbg== 23448\nIERFRg== 23449\nIFZhdWx0 23450\nMTg3 23451\nIG11c2hyb29tcw== 23452\nIGNyaXNw 23453\nYmV5 23454\nIERpc2NvdmVyeQ== 23455\nIGRldmVsb3BtZW50YWw= 23456\nIHBhcmFkaWdt 23457\nIGNoYW90aWM= 23458\nIFRzdQ== 23459\nIDMzMw== 23460\nYm9ucw== 23461\nIGJhY3RlcmlhbA== 23462\nIGNvbW1pdHM= 23463\nIGNvc21pYw== 23464\nIG1lZ2E= 23465\nb2NhdGl2ZQ== 23466\nIFBhaW50 23467\nb3Bob2JpYw== 23468\nIHZhaW4= 23469\nIGNhcnZlZA== 23470\nIFRoaWVm 23471\nIEd1bA== 23472\nb3dzaGlw 23473\nIGNpdGVz 23474\nIEVkaW5idXJnaA== 23475\nIGRpbWluaXNoZWQ= 23476\nIGFja25vd2xlZGdlcw== 23477\nIEtpbGxz 23478\nIG1pY3Jvdw== 23479\nIEhlcmE= 23480\nIHNlbmlvcnM= 23481\nIHdoZXJlYnk= 23482\nSG9w 23483\nYXRyb24= 23484\nIHVuYXZhaWxhYmxl 23485\nIE5hdGU= 23486\nIDQ4MA== 23487\nIHNsYXRlZA== 23488\nIFJlYmVjY2E= 23489\nIEJhdHRlcnk= 23490\nIGdyYW1tYXI= 23491\nIGhlYWRzZXQ= 23492\nIGN1cnNvcg== 23493\nIGV4Y2x1ZGluZw== 23494\nYW55ZQ== 23495\nYXVuZGVyaW5n 23496\nZWJpbg== 23497\nIGZlYXNpYmxl 23498\nIFB1Ymxpc2hpbmc= 23499\nIExhYnM= 23500\nIENsaWZm 23501\nIEZlcnJhcmk= 23502\nIHBhYw== 23503\ndmlzaWJsZQ== 23504\nbWFya2Vk 23505\ncGVsbA== 23506\nIHBvbGl0ZQ== 23507\nIHN0YWdnZXJpbmc= 23508\nIEdhbGFjdGlj 23509\nIHN1cGVyc3Q= 23510\nIHBhcmFu 23511\nIE9mZmljZXJz 23512\n44CB 23513\nIHNwZWNpZmljcw== 23514\ndWx1cw== 23515\nMjM5 23516\nIFBhc3Rl 23517\nQU1Q 23518\nIFBhbmFtYQ== 23519\nIERlbGV0ZQ== 23520\nYW5ndWFyZA== 23521\ncmVzdHJpYWw= 23522\nIGhlcm9pYw== 23523\nIER5 23524\n2KfZhA== 23525\nIGluY3VtYmVudA== 23526\nIGNydW5jaA== 23527\ndHJv 23528\nIHNjb29w 23529\nIGJsb2dnZXI= 23530\nIHNlbGxlcnM= 23531\ndXJlbg== 23532\nIG1lZGljaW5lcw== 23533\nIENhcHM= 23534\nIEFuaW1hdGlvbg== 23535\nb3h5 23536\nIG91dHdhcmQ= 23537\nIGlucXVpcmllcw== 23538\nMjI5 23539\nIHBzeWNob2xvZ2lzdA== 23540\nIFNhc2s= 23541\nZXZpbA== 23542\nIGNvbnRhbWluYXRlZA== 23543\n44Ko 23544\naGVyZW5jZQ== 23545\nIGJyYW5kZWQ= 23546\nIEFiZHVs 23547\nemg= 23548\nIHBhcmFncmFwaHM= 23549\nIG1pbnM= 23550\nIGNvcnJlbGF0ZWQ= 23551\nZXJi 23552\nIGltcGFydA== 23553\nIG1pbGVzdG9uZQ== 23554\nIFNvbHV0aW9ucw== 23555\nb3RsZQ== 23556\nIHVuZGVyY292ZXI= 23557\nIG1hcmNoZWQ= 23558\nIENoYXJnZXJz 23559\nZmF4 23560\nIFNlY3JldHM= 23561\nIHJ1dGg= 23562\nd2VhdGhlcg== 23563\nIGZlbWluaW5l 23564\nIHNoYW0= 23565\nIHByZXN0aWdpb3Vz 23566\naWdnaW5z 23567\nIHN1bmc= 23568\naGlzdG9yeQ== 23569\nZXR0bGU= 23570\nZ2dpZQ== 23571\nIG91dGRhdGVk 23572\nb2xhbmQ= 23573\nIHBlcmNlcHRpb25z 23574\nIFNlc3Npb24= 23575\nIERvZGdlcnM= 23576\ndWo= 23577\nIEVORA== 23578\nRG9j 23579\nIGRlZmljaWVuY3k= 23580\nR3JhbmQ= 23581\nIEpva2Vy 23582\nIHJldHJvc3BlY3Q= 23583\nIGRpYWdub3N0aWM= 23584\nIGhhcm1sZXNz 23585\nIHJvZ3Vl 23586\nIEF2YWw= 23587\nRXF1 23588\nIHRyYW5zYw== 23589\nIFJvYmVydHNvbg== 23590\nIERlcGVuZGluZw== 23591\nIEJ1cm5z 23592\naXZv 23593\nIGhvc3RpbGl0eQ== 23594\nRmVhdHVyZXM= 23595\nk5g= 23596\nIGRpc2NvbWZvcnQ= 23597\nIExDRA== 23598\nc3BlY2lmaWVk 23599\nIEV4cGVjdA== 23600\nMzQw 23601\nIGltcGVyYXRpdmU= 23602\nIFJlZ3VsYXI= 23603\nQ2hpbmVzZQ== 23604\nIHN0YXRld2lkZQ== 23605\nIHN5bW0= 23606\nIGxvb3Bz 23607\nIGF1dHVtbg== 23608\nTmljaw== 23609\nIHNoYXBpbmc= 23610\nIHF1b3Q= 23611\nIGNoZXJyeQ== 23612\nIENyb3NzcmVm 23613\n6Kaa6YaS 23614\nU3RhbmRhcmQ= 23615\naGVlZA== 23616\nIERlbGw= 23617\nIFZpZXRuYW1lc2U= 23618\nIG9zdA== 23619\nIFZhbGt5cmll 23620\nT0E= 23621\nQXNzYWQ= 23622\nIHJlYm91bmQ= 23623\nIFRyYWZmaWM= 23624\ncGxhY2Vz 23625\n5pg= 23626\nIEJ1Yw== 23627\nMTcy 23628\nIHNoZWx0ZXJz 23629\nIGluc2lzdGluZw== 23630\nIENlcnRhaW5seQ== 23631\nIEtlbm5ldGg= 23632\nIFRDUA== 23633\nIHBlbmFs 23634\nIFJlcGxheQ== 23635\naGVhcmQ= 23636\nIGRpYWxlY3Q= 23637\naXph 23638\nIEZZ 23639\naXRjaGVy 23640\nIERM 23641\nIHNwaXJhbA== 23642\nIHF1YXJ0ZXJiYWNrcw== 23643\nIGh1bGw= 23644\nIGdvb2dsZQ== 23645\nIHRvZGQ= 23646\nIFN0ZXJsaW5n 23647\nIFBsYXRl 23648\nIHNweWluZw== 23649\nbWJvbA== 23650\nIFJlYWxt 23651\nIFByb2NlZA== 23652\nIENyYXNo 23653\nIHRlcm1pbmF0ZQ== 23654\nIHByb3Rlc3Rpbmc= 23655\nQ2VudGVy 23656\nZ3VpZGVk 23657\nIHVuY292ZXI= 23658\nIGJveWNvdHQ= 23659\nIHJlYWxpemVz 23660\nc291bmQ= 23661\nIHByZXRlbmRpbmc= 23662\nIFZhcw== 23663\nMTk4MA== 23664\nIGZyYW1lZA== 23665\nIDEzOQ== 23666\nIGRlc2NlbmRlZA== 23667\nIHJlaGFiaWxpdGF0aW9u 23668\nIGJvcnJvd2luZw== 23669\nIEJ1Y2g= 23670\nIGJsdXI= 23671\nUm9u 23672\nIEZyb3plbg== 23673\nZW56YQ== 23674\nQ2hpZWY= 23675\nIFBvb3I= 23676\nIHRyYW5zbGF0ZXM= 23677\nTUlO 23678\nIDIxMg== 23679\nSkVDVA== 23680\nIGVydXB0ZWQ= 23681\nIHN1Y2Nlc3Nlcw== 23682\nU0VD 23683\nIHBsYWd1ZQ== 23684\nIGdlbXM= 23685\nZG9tcw== 23686\nIHN0cmV0Y2hlcw== 23687\nIFNweQ== 23688\nIHN0b3J5dGVsbGluZw== 23689\nQ3JlZGl0 23690\nIFB1c2g= 23691\nIHRyYWN0aW9u 23692\nIGluZWZmZWN0aXZl 23693\nIEx1bmE= 23694\nIHRhcGVz 23695\nIGFuYWx5dGljcw== 23696\nZXJjaXNl 23697\nIHByb2dyYW1tZXM= 23698\nIENhcmJvbg== 23699\nIGJlaG9sZA== 23700\naGVhdnk= 23701\nIENvbnNlcnZhdGlvbg== 23702\nIEZJUg== 23703\nIHNhY2s= 23704\ndGVybWlu 23705\ncmlja3M= 23706\nIGhvdXNlZA== 23707\nIHVudXN1YWxseQ== 23708\nSWNl 23709\nIGV4ZWN1dGluZw== 23710\nIE1vcm9j 23711\nZWRheQ== 23712\nIGVkaXRpb25z 23713\nIHNtYXJ0ZXI= 23714\nIEJB 23715\nIG91dGxhdw== 23716\nIHZhbmlzaGVk 23717\naWJh 23718\nQUxTRQ== 23719\nIFNpbHZh 23720\nMjM4 23721\nQ291bGQ= 23722\nIHBoaWxvc29waGVy 23723\nIGV2YWN1YXRlZA== 23724\nU2VjcmV0 23725\nMTQy 23726\nIHZpc2Fz 23727\n44Ks 23728\nIE1hbHQ= 23729\nIENsZWFybHk= 23730\nIE5pZ2Vy 23731\nIENhaXJv 23732\nIEZpc3Q= 23733\nMzgw 23734\nIFhNTA== 23735\nYXV0bw== 23736\naXRhbnQ= 23737\nIHJlaW5mb3JjZWQ= 23738\nUmVjb3Jk 23739\nIFN1cnZpdm9y 23740\nR0h6 23741\nIHNjcmV3cw== 23742\ncGFyZW50cw== 23743\nIG9jZWFucw== 23744\nbWFyZXM= 23745\nIGJyYWtlcw== 23746\ndmFzaXZl 23747\nIGhlbGxv 23748\nIFNJTQ== 23749\ncmltcA== 23750\nIG9yZQ== 23751\nIEFybW91cg== 23752\nMjQ3 23753\nIHRlcnJpZmlj 23754\nIHRvbmVz 23755\nMTQx 23756\nIE1pbnV0ZXM= 23757\nRXBpc29kZQ== 23758\nIGN1cnZlcw== 23759\nIGluZmxhbW1hdG9yeQ== 23760\nIGJhdHRpbmc= 23761\nIEJlYXV0aWZ1bA== 23762\nTGF5 23763\nIHVucG9w 23764\ndmFibGU= 23765\nIHJpb3Rz 23766\nIFRhY3RpY3M= 23767\nYmF1Z2g= 23768\nIENvY2s= 23769\nIG9yZ2FzbQ== 23770\nIFNhcw== 23771\nIGNvbnN0cnVjdG9y 23772\nZXR6 23773\nR292 23774\nIGFudGFnb24= 23775\nIHRoZWF0 23776\nIGRlZWRz 23777\naGFv 23778\nY3V0cw== 23779\nIE1jQ2w= 23780\nIHVt 23781\nIFNjaWVudGlzdHM= 23782\nIGdyYXNzcm9vdHM= 23783\neXNzZXk= 23784\nIl09Pg== 23785\nIHN1cmZhY2Vk 23786\nIHNoYWRlcw== 23787\nIG5laWdoYm91cnM= 23788\nIGFkdmVydGlz 23789\nb3lh 23790\nIG1lcmdlZA== 23791\nVXBvbg== 23792\nIGdhZA== 23793\nIGFudGljaXBhdGU= 23794\nQW55d2F5 23795\nIHNsb2dhbg== 23796\nIGRpc3Jlc3BlY3Q= 23797\nSXJhbg== 23798\nIFRC 23799\nYWN0ZWQ= 23800\nIHN1YnBvZW4= 23801\nbWVkaWF0ZWx5 23802\nT09PTw== 23803\nIHdhaXZlcg== 23804\nIHZ1bG5lcmFiaWxpdGllcw== 23805\nb3R0ZXN2aWxsZQ== 23806\nIEh1ZmZpbmd0b24= 23807\nSm9zaA== 23808\nIERI 23809\nTW9uZGF5 23810\nIEVsbGVu 23811\nS25vdw== 23812\neG9u 23813\naXRlbXM= 23814\nMjI4 23815\nIGZpbGxz 23816\nIE5pa2U= 23817\nIGN1bXVsYXRpdmU= 23818\nYW5kYWxz 23819\nSXI= 23820\nIOw= 23821\nIGZyaWN0aW9u 23822\naWdhdG9y 23823\nIHNjYW5z 23824\nIFZpZW5uYQ== 23825\nbGRvbQ== 23826\nIHBlcmZvcm1lcnM= 23827\nUHJpbQ== 23828\nIGJpZGRpbmc= 23829\nTXVy 23830\nIGxlYW5lZA== 23831\nIFByaXg= 23832\nYWxrcw== 23833\nIFvigKZd 23834\nIFR3aXRjaA== 23835\nIERldmVsb3Blcg== 23836\nIEdpcg== 23837\nIGNhbGxiYWNr 23838\nQWJzdHJhY3Q= 23839\nIGFjY3VzdG9tZWQ= 23840\nIGZyZWVkb21z 23841\nIFBH 23842\ndXJhY3k= 23843\nIGx1bXA= 23844\naXNtYW4= 23845\nLCwsLA== 23846\nMTk5Mg== 23847\nIFJFRA== 23848\nIHdvcm0= 23849\nTWF0Y2g= 23850\nIFBsYXRpbnVt 23851\nSUo= 23852\nIE93bmVy 23853\nVHJpdmlh 23854\nY29tcGw= 23855\nIG5ld2Jvcm4= 23856\nIGZhbnRhcw== 23857\nT3du 23858\nIDE5NTk= 23859\nIHN5bXBhdGg= 23860\nIHViaXF1 23861\nIG91dHB1dHM= 23862\nIGFsbGV2 23863\nIHByYWc= 23864\nS2V2aW4= 23865\nIGZhdm9ycw== 23866\nIGJ1cmlhbA== 23867\nIG51cnQ= 23868\nc29sZXRl 23869\nY2FjaGU= 23870\nIDE1Ng== 23871\nIHVubG9ja3M= 23872\ndGVjaG4= 23873\nTWFraW5n 23874\nIGNvbnF1ZXI= 23875\nYWRpYw== 23876\n5pY= 23877\nIGVsZg== 23878\nIGVsZWN0b3JhdGU= 23879\nIEt1cmRz 23880\nIFN0YWNr 23881\nIFNhbXVyYWk= 23882\nIOKYhQ== 23883\nIHt9 23884\nIFNhaWQ= 23885\nIEZhbGxvdXQ= 23886\nIGtpbmRuZXNz 23887\nIEN1c3RvbXM= 23888\nIEJvdWxldmFyZA== 23889\nIGhlbGljb3B0ZXJz 23890\nb3RpY3M= 23891\nIFZlZ2V0 23892\nY29tbWVudA== 23893\nIGNyaXRpY2lzZWQ= 23894\nIHBvbGlzaGVk 23895\nIFJlbWl4 23896\nIEN1bHR1cmFs 23897\nIHJlY29ucw== 23898\nIGRvaQ== 23899\nYXRlbQ== 23900\nU2NyZWVu 23901\nIGJhcnJlZA== 23902\nQ29tbWVudHM= 23903\nIEdlbmVyYWxseQ== 23904\nIHNsYXA= 23905\nNzIw 23906\nVmFyaQ== 23907\ncGluZQ== 23908\nIGVtcHQ= 23909\nIGhhdHM= 23910\nIFBsYXlpbmc= 23911\nbGFi 23912\nYXZlcmFnZQ== 23913\nZm9ybXM= 23914\nIENvdHRvbg== 23915\nIGNhbnM= 23916\nIERPTg== 23917\nIFNvbWFsaWE= 23918\nQ3J5cHQ= 23919\nIEluY3JlYXNlcw== 23920\nRXZlcg== 23921\nbW9kZXJu 23922\nIHN1cmdlb24= 23923\nMzAwMA== 23924\nIHJhbmRvbWl6ZWQ= 23925\nPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 23926\nQmVybg== 23927\naW1wbA== 23928\nIENPUg== 23929\nIHByb2NsYWlt 23930\ndGhvdXNl 23931\nIHRvZXM= 23932\nIGFtcGxl 23933\nIHByZXNlcnZpbmc= 23934\nIGRpc2JlbA== 23935\nZ3JhbmQ= 23936\nQmVzaWRlcw== 23937\nIHNpbGs= 23938\nIFBhdHRlcm4= 23939\naG0= 23940\nIGVudGVycHJpc2Vz 23941\nIGFmZmlkYXZpdA== 23942\nIEFkdmlzb3J5 23943\nIGFkdmVydGlzZWQ= 23944\nIFJlbGlnaW91cw== 23945\nc2VjdGlvbnM= 23946\ncHN5Y2g= 23947\nIEZpZWxkcw== 23948\nYXdheXM= 23949\nIGhhc2h0YWc= 23950\nIE5pZ2h0bWFyZQ== 23951\nIHZhbXBpcmU= 23952\nIGZvcmVuc2lj 23953\ncm9zc292ZXI= 23954\nbmFy 23955\nIG5hdnk= 23956\nIHZhY2FudA== 23957\nIER1ZWw= 23958\nIGhhbGx3YXk= 23959\nIGZhY2Vib29r 23960\naWRlbnRhbGx5 23961\nIE5SQQ== 23962\nIG1hdHQ= 23963\nIGh1cnJpY2FuZQ== 23964\nIEtpcmJ5 23965\nIFB1enpsZQ== 23966\nIHNraXJ0 23967\nb3VzdA== 23968\nZHVsbGFo 23969\nIGFuYWxvZ3k= 23970\naW5pb24= 23971\nIHRvbWF0b2Vz 23972\nIE5W 23973\nIFBlYWs= 23974\nIE1leWVy 23975\nIGFwcG9pbnRtZW50cw== 23976\nIG1hc2M= 23977\nIGFsbGV5 23978\ncmVoZW5k 23979\nIGNoYXJpdGllcw== 23980\nIHVuZG8= 23981\nIGRlc3RpbmF0aW9ucw== 23982\nIFRlc3Rpbmc= 23983\nIj48Lw== 23984\nIGRlc3RpbmVk 23985\nIGltcGxlbWVudHM= 23986\nIEhhcm9sZA== 23987\nUkVDVA== 23988\nIG9wdGltaXphdGlvbg== 23989\nIGtpbG9tZXRyZXM= 23990\nIGNtZA== 23991\nIGltcGFpcm1lbnQ= 23992\nIHVuc3VjY2Vzc2Z1bA== 23993\nIHN3aWZ0bHk= 23994\nIEdsYXNnb3c= 23995\nYXJ0ZW4= 23996\nIFNoYXJlcw== 23997\nIEFuc3dlcg== 23998\nIEFsYnVt 23999\nIG51dHJpdGlvbmFs 24000\n44OW 24001\nIEZ1dA== 24002\nIGJsb2M= 24003\nIE5GQw== 24004\nIHdob2xlc2FsZQ== 24005\nIENX 24006\nIG5lZ2xlY3RlZA== 24007\nIGxhdW5jaGVy 24008\nIGFubm91bmNlbWVudHM= 24009\nT1VMRA== 24010\nY29tYg== 24011\nIHJvdGF0aW5n 24012\nIHJlc3Rz 24013\nIFRpY2tldA== 24014\nY2hlZGVs 24015\nTG91 24016\nIFZpYw== 24017\nICIn 24018\nIHRlbXBsYXRlcw== 24019\nIHJlcGxhY2Vz 24020\nQXJj 24021\nOjo6Og== 24022\nIEdpbGJlcnQ= 24023\nIGlsbG5lc3Nlcw== 24024\nIHNjaGVkdWxlcw== 24025\nIGhldGVyb3NleHVhbA== 24026\nTElORQ== 24027\nIGhlcmVpbg== 24028\nIGNvZXJj 24029\nIGRlY3JlYXNpbmc= 24030\nIGRlcG9ydGF0aW9u 24031\nc3Vkbw== 24032\nIEluZGlnZW5vdXM= 24033\nIHdlaWdocw== 24034\nQWxvbmc= 24035\nJyk7 24036\nIEJlbmdhbHM= 24037\nNzA3 24038\nIGpvaW50cw== 24039\ndmVydHM= 24040\nIDE0OQ== 24041\nbmFpcmU= 24042\nIHNpbXBsZXN0 24043\nIGxvcmU= 24044\nMTA4MA== 24045\nZmljdGlvbg== 24046\nIERhdGFiYXNl 24047\nIHJlc2VydmF0aW9u 24048\nIHNvdQ== 24049\nIHNhbmN0dWFyeQ== 24050\nYXVkaW8= 24051\nYXBsZQ== 24052\nIHZlZ2V0YXJpYW4= 24053\nIGFudGljaXBhdGlvbg== 24054\nbWljcm8= 24055\nIGVuZHVyaW5n 24056\nIGRlcGFydGVk 24057\nIHNpZGV3YWxr 24058\nIHByb2hpYml0cw== 24059\nIEZvbnQ= 24060\nIGNvbXB1dGU= 24061\nIFNlY3Q= 24062\nIDE1OA== 24063\nQmF0dGxl 24064\nIGJvbWJlcg== 24065\nIGRpc3RyYWN0aW9u 24066\nIGVuZHVyZWQ= 24067\nIHByYWN0aXRpb25lcnM= 24068\nIGRpc3R1cmJlZA== 24069\nIGRyYW5r 24070\nb3JkZXJlZA== 24071\nIHN1cnByaXNlcw== 24072\nc2VhdA== 24073\nU2VjdXJpdHk= 24074\nIFdpc2RvbQ== 24075\nb2dv 24076\nIHN1YnBhcmFncmFwaA== 24077\nIFBlbmluc3VsYQ== 24078\nIE9yaWdpbnM= 24079\naXJlbg== 24080\nIFBhdg== 24081\naWdnbGU= 24082\nIGdyYXRpdHVkZQ== 24083\nIEdyYXZpdHk= 24084\nb3ZlcnR5 24085\naW1hbg== 24086\nY3Ry 24087\nIENhZXNhcg== 24088\nY291bGQ= 24089\nZ2Vt 24090\nIHNraWVz 24091\nIGNoYW1w 24092\nIGFncmVlaW5n 24093\nRmFtaWx5 24094\nRGl2 24095\nMTc2 24096\nIG1lc3N5 24097\ndW1wdGlvbg== 24098\nRmVkZXJhbA== 24099\nZXJubw== 24100\nIENoYXQ= 24101\nQmV5b25k 24102\nIGRldm90ZQ== 24103\nIFdhbHNo 24104\nIGR1bXBlZA== 24105\nIGFjY3VtdWxhdGlvbg== 24106\nc3RhZA== 24107\naGliaXRpb24= 24108\nIHNtb2tlcnM= 24109\nIGluc3BlY3Rvcg== 24110\nRnJlbmNo 24111\naXNzYW4= 24112\nIFZpdGE= 24113\nIHJlc2VhcmNoaW5n 24114\nUkFN 24115\nIENlbHRpY3M= 24116\nIGNsb2Fr 24117\nIFRlcnJh 24118\nTWFyeQ== 24119\nc29sZA== 24120\nIERPTQ== 24121\nbW9kcw== 24122\nSW50ZWw= 24123\nIG11bHRpdHVkZQ== 24124\nIEltcHJvdmVk 24125\nIHJlbGlhbmNl 24126\nIGFydGlmYWN0 24127\nIGFsYXJtaW5n 24128\nUHJvbQ== 24129\naG9u 24130\nVElPTg== 24131\nbWVkaXVt 24132\nIHJlZmxleA== 24133\nIEV4Y2Vs 24134\nIHdlYWtlbmVk 24135\nMTYz 24136\nMjI0 24137\nIGNvc3R1bWVz 24138\nIHVuaXF1ZWx5 24139\nIHNvcnJvdw== 24140\nIG1hbnNpb24= 24141\nd3A= 24142\nIHNhbHY= 24143\nIEdyb3Zl 24144\nYnNw 24145\nIFNuaXBlcg== 24146\nIFNoaXBwaW5n 24147\nIFBPVw== 24148\nIHVuZGlz 24149\nIGJyYW5kaW5n 24150\nR2lybA== 24151\nIEFobWFk 24152\nIExha2Vz 24153\nIENvcmV5 24154\nIGluaGVyaXRhbmNl 24155\nZW5lcnk= 24156\nIHBhY2tpbmc= 24157\nIFByZXN0 24158\nRGVzdA== 24159\nRlc= 24160\nIHJlZ3VsYXRvcg== 24161\nbG9ja2Vk 24162\nIGNvbnRlc3RlZA== 24163\nIE1lbGlzc2E= 24164\nIER1Yw== 24165\nIHVucG9wdWxhcg== 24166\nIHN0YWNrZWQ= 24167\nIDE5MTc= 24168\nIHllYXJseQ== 24169\nIHN0YXJl 24170\nIGFzc2Vzc2luZw== 24171\nw7g= 24172\nIGJldmVyYWdlcw== 24173\nIGNvbXBldGl0aW9ucw== 24174\nIHN0cmVuZ3RoZW5pbmc= 24175\nYWxvbmc= 24176\nIEx1ZA== 24177\nIG1lbHRlZA== 24178\nc3RhbmJ1bA== 24179\nIGJvdW50eQ== 24180\nRU5D 24181\nIExhbmRz 24182\nIGRlY2xhcmVz 24183\nIGN1c3RvbWl6ZQ== 24184\nIGNvbXBvc2l0ZQ== 24185\n44Os 24186\nQ00= 24187\nb2dyYXBoaWNz 24188\nIFRlbXA= 24189\nIGNvbnRlbmRlcg== 24190\nIGluc2lnbg== 24191\nIExBTg== 24192\nIGRpc2FzdGVycw== 24193\naW5zcGlyZWQ= 24194\nIGp1ZGdtZW50cw== 24195\ndXN0YWluYWJsZQ== 24196\ndXJzaW9u 24197\nIHZhcmlhbmNl 24198\nIFVsdGltYXRlbHk= 24199\nIC0tLS0tLS0t 24200\ndWFkb3I= 24201\nIFJY 24202\nIG1lbHRpbmc= 24203\nIEV4dGVuZGVk 24204\nIFR3ZQ== 24205\nTWFqb3I= 24206\nIEJpbA== 24207\nIHN5cnVw 24208\ncXVpY2s= 24209\nIEhvbGRlcg== 24210\nIGlubm9jZW5jZQ== 24211\nVUxF 24212\nIE1pZ2h0 24213\nOTk5OQ== 24214\nIGZhbA== 24215\nIGNvbnRpbnVpdHk= 24216\nIDE5NTM= 24217\nIEJT 24218\nc3RpbGw= 24219\nTGF0 24220\nIEFidXNl 24221\nIHVuc3VwcG9ydGVk 24222\neHh4eHh4eHg= 24223\nIGluc3RpdHV0ZQ== 24224\nIGZyYWdtZW50 24225\nIFBlcA== 24226\nV2VzdGVybg== 24227\nIENhdXNl 24228\nIEZyYWc= 24229\nIEFycw== 24230\n4KU= 24231\nYXN0aWNz 24232\nIGJpc2hvcA== 24233\nIGNyb3NzZXM= 24234\nIDE1NA== 24235\nIFVwZ3JhZGU= 24236\nIG1pdGlnYXRl 24237\nIFJheW1vbmQ= 24238\nTW9kcw== 24239\nIHRvbWF0bw== 24240\nIHN0dW1ibGVk 24241\nIGRpZmZlcnM= 24242\nSW5pdGlhbA== 24243\nIFJhc3BiZXJyeQ== 24244\nIGlnbm9yZXM= 24245\nIHRhbnQ= 24246\nw6A= 24247\nIHJlbGF5 24248\nIGJpc2V4dWFs 24249\nIGNvbmZlc3Npb24= 24250\nIGRlbWVudA== 24251\naW5hcw== 24252\nIEhlYXRoZXI= 24253\ncGxhdGZvcm0= 24254\nZHJpdmluZw== 24255\nYm91cmc= 24256\nIE11c2g= 24257\nIGh5c3Rlcg== 24258\nRGV0YWlscw== 24259\nIGRyaWZ0 24260\nIFdhbGQ= 24261\nIEx1Y2tpbHk= 24262\nb3Jm 24263\nIGV4cGlyZQ== 24264\nIFB1bmNo 24265\nenltZQ== 24266\nZ29sZA== 24267\nIHVucGFpZA== 24268\nIFRyZW50 24269\nIHVuYXJtZWQ= 24270\nIGlsbGljaXQ= 24271\nIFRvdHRlbmhhbQ== 24272\nIHNtYXNo 24273\nSW50ZXJuYXRpb25hbA== 24274\naW5rZXI= 24275\nIHN0aW5n 24276\nIFNhZGRhbQ== 24277\nIEFSVA== 24278\nIHRydXRocw== 24279\nYmlydGg= 24280\nIHNvYmVy 24281\nIE5pdA== 24282\nIGli 24283\nIHVzYWJsZQ== 24284\nIHN0YWNrcw== 24285\nIFN5bHY= 24286\nIG5vcnRoZWFzdA== 24287\nIGRvbWluYXRpb24= 24288\nIE1vdXI= 24289\nRU5TRQ== 24290\nIE1lYXN1cmU= 24291\nIHByb2dyYW1tZXI= 24292\nIDwt 24293\nMTgy 24294\nIENvbmRpdGlvbg== 24295\nIGJhY2t5YXJk 24296\naXJsaW5n 24297\nIEplYg== 24298\nIENyZWVk 24299\nIEhhbmc= 24300\nIENPTVA= 24301\nRkVS 24302\nIElzaA== 24303\nIGRldGVjdGl2ZXM= 24304\nLS0tLS0tLS0tLS0tLS0t 24305\nIE1lc3Nlbmdlcg== 24306\nIGxvb3Bo 24307\nIGdhdGV3YXk= 24308\nMTUx 24309\nIE1hdGVyaWFscw== 24310\nIERU 24311\nIGRvb21lZA== 24312\nb2Rv 24313\nIHNsaWNlcw== 24314\nIGVtYWlsZWQ= 24315\nIFBlcmw= 24316\nIHJlbm92 24317\nVVRI 24318\nb2R5bmFt 24319\nIFNvdXRod2VzdA== 24320\nZ2V0aWM= 24321\nIFRQUA== 24322\nIG9wdGltaXNt 24323\nIFRvdw== 24324\ndWxhdG9ycw== 24325\ncHJvdGVjdGVk 24326\neWxlcw== 24327\nwqs= 24328\nIGV4aWxl 24329\nZW52 24330\nUHJvcA== 24331\nIFppbW1lcm1hbg== 24332\n2Y4= 24333\nQ2E= 24334\nb21hbHk= 24335\n44OG 24336\nIHJhaWxyb2Fk 24337\nTGVl 24338\nMjMy 24339\nIHJlcGxpY2F0ZQ== 24340\nIGNvbWZvcnRhYmx5 24341\nYWN0bHk= 24342\nIHJhdg== 24343\nIHRlbGVzY29wZQ== 24344\nIGhvbmVzdHk= 24345\nIFBlcHBlcg== 24346\nIEJyaW5n 24347\nIHJpY2hlc3Q= 24348\nIG91dGRvb3Jz 24349\nIGhhbGxz 24350\nIGNvbnRlbmQ= 24351\nSVNF 24352\nIHN1Ym1pdHRpbmc= 24353\nIG5haXZl 24354\nYXJhdGlvbnM= 24355\nIDE0Mw== 24356\nIHBvaXNlZA== 24357\ncmVzcG9uc2libGU= 24358\nIHNvY2tz 24359\nIFNrdWxs 24360\nUXVlc3Rpb24= 24361\nIGRpc2NvdmVyaWVz 24362\nSm9pbmVk 24363\nIEVuZW1pZXM= 24364\nIFdpcmVsZXNz 24365\nIFJldmVuZ2U= 24366\nIHB1enpsZXM= 24367\nIGNlYXNlZA== 24368\nMjkw 24369\nY3JpcHRpb25z 24370\nIENvbnNvbGU= 24371\nIGJvaWxpbmc= 24372\nIGRpc2NyZXA= 24373\nIGRlZHVjdGlvbg== 24374\nIGFyc2VuYWw= 24375\nWFhYWA== 24376\nIEFtc3RlcmRhbQ== 24377\ncm94aW1hdGVseQ== 24378\nIFNoYW5l 24379\nIHBvc2luZw== 24380\nIEFDTFU= 24381\nIENvbXBhbmllcw== 24382\nIHRoZW9sb2d5 24383\nIFVn 24384\ncXVhcnRlcg== 24385\nIEhhbms= 24386\nQ29pbg== 24387\nIEx2 24388\nIGFsbGVnYXRpb24= 24389\nIEF2b2lk 24390\nIGluZGVmaW5pdGVseQ== 24391\nIGNvbW1vZGl0aWVz 24392\nIGJyaWc= 24393\nIE1hbml0 24394\nIHRlbnRo 24395\nbWV0aG9k 24396\nIEtuaWNrcw== 24397\nIOKAjg== 24398\nIGludm9rZWQ= 24399\nRGlhbA== 24400\nQVJB 24401\nIGNhdWN1cw== 24402\nMjI3 24403\nIEphYg== 24404\nIG91bmNlcw== 24405\nYmF5 24406\nIGJ1ZGR5 24407\nZmFu 24408\nMjM0 24409\nIEhpbA== 24410\nYWRo 24411\nIFRZ 24412\nIElORA== 24413\nIDE5Mzk= 24414\nIGl0ZXJhdGlvbg== 24415\nIEdvbnphbGV6 24416\nIFZlcnQ= 24417\nIElP 24418\nZW1i 24419\ncmVyYQ== 24420\nZW5jaA== 24421\nIFJlcXVpcmVtZW50cw== 24422\nIFdpbnM= 24423\nIGxpdmVzdG9jaw== 24424\naG91cnM= 24425\nIuKApg== 24426\nYnJhbA== 24427\nTWFyZw== 24428\nIERvbmU= 24429\nIHdhc3Rpbmc= 24430\naW5nZWQ= 24431\nZ3JvdXBz 24432\nIHdpc2hpbmc= 24433\nIFR1bWJscg== 24434\nIHRhcHBpbmc= 24435\nIG5hdGlvbmFsaXNt 24436\nIEJ5cg== 24437\nIHNxdWFyZXM= 24438\nIEFjdGlvbnM= 24439\n44Ol 24440\nSW5zaWRl 24441\nZGVidWc= 24442\nIGFwcGVuZA== 24443\nIHN0dWJib3Ju 24444\nIENpbmQ= 24445\nVGVsbA== 24446\nIHRlYXJpbmc= 24447\nIFJleQ== 24448\nb3Jj 24449\nIERheXRvbg== 24450\nIE5I 24451\nIE1hZG5lc3M= 24452\nQ2hhcmw= 24453\nIE1vcnJpc29u 24454\nZmlsdGVy 24455\nIGFjY3VzZQ== 24456\nIC4v 24457\nIHRvcnJlbnQ= 24458\nIGRlY2xpbmVz 24459\nZ2FsbGVyeQ== 24460\nTWluZQ== 24461\nIG5lZ290aWF0aW9u 24462\nIEJhc2hhcg== 24463\nb3BpYQ== 24464\nMTk5Mw== 24465\nZW1vcnQ= 24466\nIE5vdmVs 24467\nIEZhbmc= 24468\nZXJzaXZl 24469\nIEluc3RhbnQ= 24470\nIHJvbGxlcg== 24471\nQXJvdW5k 24472\nIEVsZWN0aW9ucw== 24473\nR2FtZXM= 24474\nIGluZXhwZW5zaXZl 24475\nIHdvcnM= 24476\nIHZ1bA== 24477\nIEhvbGU= 24478\nIHVuYmVsaWV2YWJsZQ== 24479\nIG5hdXNl 24480\nIGVudHI= 24481\nYm9hdA== 24482\nIFNURQ== 24483\nIGJ1c2g= 24484\nIEhhc3Nhbg== 24485\nIHdv 24486\nIHBhdXNlZA== 24487\nIE1pZw== 24488\nbGl2ZWQ= 24489\nIHNjb3V0 24490\nIGxpdGg= 24491\nUHVibGlzaGVk 24492\nZHVpbm8= 24493\nY29vbA== 24494\nIGNpcmN1bGF0aW5n 24495\naWRhcw== 24496\nIFBhbQ== 24497\ndmlvbGVudA== 24498\nIENyYXdmb3Jk 24499\ndWRkbGU= 24500\nIExldHRlcnM= 24501\nR3VhcmQ= 24502\nbW9ycGg= 24503\nIHdhbmRlcmluZw== 24504\nIHNvcGhvbW9yZQ== 24505\nIHF1ZWVy 24506\nIEJsaW5k 24507\ncnVl 24508\nIE1hcnJpYWdl 24509\nRG9t 24510\nIHBhZGRpbmc= 24511\nIGZvbGRlcnM= 24512\nIG1lYW5pbmdsZXNz 24513\nIGNhbmRpZGFjeQ== 24514\nYWZvcnQ= 24515\nIHdoaXN0bGVibA== 24516\nIElkZW50aWZpZWQ= 24517\nIGNpZ2Fy 24518\nIGhpZA== 24519\nIER1YmFp 24520\nIHBvc3R1cmU= 24521\nIGhpa2luZw== 24522\nIFRlcm1pbmFs 24523\nTGVnZW5kYXJ5 24524\nIFRQ 24525\nIEFUSw== 24526\nIFN0YXJidWNrcw== 24527\nIFJpb3Q= 24528\nMTk5MQ== 24529\nIEJvdHRvbQ== 24530\nZWZmaWM= 24531\nIEV1Z2VuZQ== 24532\nIFd5b21pbmc= 24533\nIFJvY2t5 24534\nIHNhbG1vbg== 24535\nIG1ldHJv 24536\nIGJpbGF0ZXJhbA== 24537\nIGNlbGVicmF0ZXM= 24538\nTGVuZ3Ro 24539\nYmlsbGlvbg== 24540\nQmF0 24541\nIHJlbGVn 24542\nIHBzZXVkbw== 24543\nRFQ= 24544\nIFJob2Rl 24545\nUGFyZW50 24546\ncGxldGlvbg== 24547\nIGF0dHJpYnV0 24548\nIHR1bmluZw== 24549\nIE5PVEU= 24550\nIFJlYmVs 24551\naWN1cw== 24552\nRnVuZA== 24553\nIGNvY2t0YWls 24554\nIDUwMQ== 24555\nIHNwb29u 24556\nIGJydXRhbGl0eQ== 24557\nIHVuaXRl 24558\nIG1pY3JvYmk= 24559\nIFJlaWNo 24560\ncG9zaXRpdmU= 24561\nIGFtYXplZA== 24562\nIE5U 24563\nRGVzYw== 24564\nRUNUSU9O 24565\nIGZhbHNlbHk= 24566\nIEhpZ2hsYW5kZXI= 24567\nIENyaXN0 24568\nIFZpY3Rvcmlhbg== 24569\nIGRpc3RyaWJ1dGlvbnM= 24570\ndGhlaXI= 24571\nIEVpbnN0ZWlu 24572\nIHBvZA== 24573\nIGVwaWRlbQ== 24574\nIGhlYXA= 24575\nIFJhbmNo 24576\nIGFudGhlbQ== 24577\nIHJlYXBw 24578\nIEF1YnVybg== 24579\nIGNvbmN1cnJlbnQ= 24580\nIFRocm91Z2hvdXQ= 24581\nIFBPU1Q= 24582\n4pg= 24583\nIGhvbWVtYWRl 24584\na2ljaw== 24585\nQmVn 24586\nIGNoYXNzaXM= 24587\nY291bnRlcg== 24588\nIG1lcmdlcg== 24589\nIGxhcHM= 24590\nMjE3 24591\ndW5pb24= 24592\nIFRyaWdnZXI= 24593\nIGRlYmF0ZWQ= 24594\nIHNpbGVudGx5 24595\nIHJlc3RyYWludA== 24596\nQmFs 24597\nMDAwMDAwMA== 24598\nIGZvcm1pZGFibGU= 24599\nIEZpbGlw 24600\nIHNhY3JpZmljZXM= 24601\nRm9vZA== 24602\nIGR3YXJm 24603\nIFNlcXU= 24604\naW5pYW4= 24605\nTW9yZW92ZXI= 24606\nIHRhbmdpYmxl 24607\nb3BzaXM= 24608\nIE1pbmVjcmFmdA== 24609\nIFJlZ2lzdHJhdGlvbg== 24610\nb2Fu 24611\nIHJlcHJlc2VudGF0aW9ucw== 24612\nIHRoaXJzdA== 24613\nIGNvcnA= 24614\naXJlbWVudA== 24615\nTWFkZQ== 24616\nbG9l 24617\nPiI= 24618\nY2F0cw== 24619\nKi4= 24620\nIGdlc3R1cmVz 24621\nZ2VuZXJhbA== 24622\nTGVhZ3Vl 24623\nIHBhY2tldHM= 24624\nIEluc3BlY3Rvcg== 24625\nIEJlcmc= 24626\nIGZyYXVkdWxlbnQ= 24627\nIGNyaXRpY2l6ZQ== 24628\nRnVu 24629\nIGJsYW1pbmc= 24630\nbmRyYQ== 24631\nIHNsYXNo 24632\nIEVzdG9u 24633\nIHByb3Bvc2luZw== 24634\nIHdoYWxlcw== 24635\nIHRoZXJhcGlzdA== 24636\nIHN1YnNldA== 24637\nIGxlaXN1cmU= 24638\nRUxE 24639\nIENWRQ== 24640\nIEFjdGl2aXR5 24641\nIGN1bG1pbg== 24642\nc2hvcA== 24643\nIERBWQ== 24644\naXNjaGVy 24645\nIEFkbWlyYWw= 24646\nIEF0dGFja3M= 24647\nIDE5NTg= 24648\nIG1lbW9pcg== 24649\nIGZvbGRlZA== 24650\nIHNleGlzdA== 24651\nIDE1Mw== 24652\nIExJ 24653\nIHJlYWRpbmdz 24654\nIGVtYmFycmFzc21lbnQ= 24655\nIEVtcGxveW1lbnQ= 24656\nd2FydA== 24657\nY2hpbg== 24658\nIGNvbnRpbnVhdGlvbg== 24659\nbGlh 24660\nUmVjZW50bHk= 24661\nIGR1ZWw= 24662\nIGV2YWN1YXRpb24= 24663\nIEthc2htaXI= 24664\nIGRpc3Bvc2l0aW9u 24665\nIFJpZw== 24666\nIGJvbHRz 24667\nIGluc3VyZXJz 24668\nNDY3 24669\nTWV4 24670\nIHJldGFsaWF0aW9u 24671\nIG1pc2VyeQ== 24672\nIHVucmVhc29uYWJsZQ== 24673\ncmFpbmluZw== 24674\nSW1t 24675\nIFBV 24676\nZW1lcg== 24677\nIGdlbml0YWw= 24678\n44Kz 24679\nIENhbmR5 24680\nIG9uaW9ucw== 24681\nIFBhdHQ= 24682\nbGluZXI= 24683\nIGNvbmNlZGVk 24684\nIGZh 24685\nIGZvcmM= 24686\nIEhlcm5hbmRleg== 24687\nIEdlb2Zm 24688\nZGViaWFu 24689\nIFRlYW1z 24690\nIGNyaWVz 24691\nIGhvbWVvd25lcnM= 24692\nMjM3 24693\nQUJD 24694\nIHN0aXRjaA== 24695\nIHN0YXRpc3RpYw== 24696\nIGhlYWRlcnM= 24697\nIEJpb2xvZ3k= 24698\nIG1vdG9ycw== 24699\nIEdFTg== 24700\nIExpcA== 24701\nIGhhdGVz 24702\nIGhlZWw= 24703\nU2VsZg== 24704\naXBs 24705\nRURJVA== 24706\nb3J0aW5n 24707\nIGFubm90 24708\nIFNwZWVjaA== 24709\nb2xkZW1vcnQ= 24710\nIEphdmFzY3JpcHQ= 24711\nIExlQnJvbg== 24712\nIGZvb3RwcmludA== 24713\nIGZu 24714\nIHNlaXp1cmVz 24715\nbmFz 24716\naGlkZQ== 24717\nIDE5NTQ= 24718\nIEJlZQ== 24719\nIERlY2xhcmF0aW9u 24720\nIEthdGll 24721\nIHJlc2VydmF0aW9ucw== 24722\nTlI= 24723\nZmVtYWxl 24724\nIHNhdHVyYXRlZA== 24725\nIGJpYmxpY2Fs 24726\nIHRyb2xscw== 24727\nRGV2aWNl 24728\ncGhvdG9z 24729\nIGRydW1z 24730\n44OJ44Op44K044Oz 24731\nTmlnaHQ= 24732\nZmlnaHRlcg== 24733\nIEhhaw== 24734\ncmliZXI= 24735\nIGN1c2g= 24736\nIGRpc2NpcGxpbmFyeQ== 24737\nYmF1bQ== 24738\nIEdI 24739\nIFNjaG1pZHQ= 24740\naWxpYnJpdW0= 24741\nIHNpeHR5 24742\nIEt1c2huZXI= 24743\ncm90cw== 24744\nIHB1bmQ= 24745\nIFJhYw== 24746\nIHNwcmluZ3M= 24747\nIGNvbnZl 24748\nQnVzaW5lc3M= 24749\nRmFsbA== 24750\nIHF1YWxpZmljYXRpb25z 24751\nIHZlcnNlcw== 24752\nIG5hcmNpc3M= 24753\nIEtvaA== 24754\nIFdvdw== 24755\nIENoYXJsb3R0ZXN2aWxsZQ== 24756\nZWRv 24757\nIGludGVycm9nYXRpb24= 24758\nIFdvb2w= 24759\nMzY1 24760\nQnJpYW4= 24761\nIOKckw== 24762\nIGFsbGVnZXM= 24763\nb25kcw== 24764\naWRhdGlvbg== 24765\nIEphY2tpZQ== 24766\neXU= 24767\nIGxha2Vz 24768\nIHdvcnRod2hpbGU= 24769\nIGNyeXN0YWxz 24770\nIEp1ZGE= 24771\nIGNvbXByZWhlbmQ= 24772\nIGZsdXNo 24773\nIGFic29ycHRpb24= 24774\nIE9D 24775\nIGZyaWdodGVuZWQ= 24776\nIENob2NvbGF0ZQ== 24777\nTWFydGlu 24778\nIGJ1eXM= 24779\nIGJ1Y2tz 24780\nIGFwcGVsbA== 24781\nIENoYW1waW9uc2hpcHM= 24782\nIGxpc3RlbmVy 24783\nIERlZmVuc2l2ZQ== 24784\nIGN6 24785\ndWRz 24786\nIE1hdGU= 24787\nIHJlcGxheQ== 24788\nIGRlY29yYXRlZA== 24789\nIHN1bms= 24790\nIFZJUA== 24791\nIEFuaw== 24792\nIDE5NQ== 24793\nYWFhYQ== 24794\nTm9ib2R5 24795\nIE1pbGs= 24796\nIEd1cg== 24797\nIE1r 24798\nIFNhcmE= 24799\nIHNlYXRpbmc= 24800\nIFdpZA== 24801\nVHJhY2s= 24802\nIGVtcGxveXM= 24803\nIGdpZ2FudGlj 24804\nQVBQ 24805\n44Kn 24806\naW52ZW50b3J5 24807\nIHRvd2Vs 24808\nYXRjaGU= 24809\nbGFzdGluZw== 24810\nIFRM 24811\nIGxhdGVuY3k= 24812\nIGtuZQ== 24813\nQmVy 24814\nbWVhbmluZw== 24815\nIHVwaGVsZA== 24816\nIHBsYXlncm91bmQ= 24817\nIG1hbnQ= 24818\nU2lkZQ== 24819\nIHN0ZXJlbw== 24820\nIG5vcnRod2VzdA== 24821\nIGV4Y2VwdGlvbmFsbHk= 24822\nIHJheXM= 24823\nIHJlY3VycmluZw== 24824\nRHJpdmU= 24825\nIHVwcmlnaHQ= 24826\nIGFiZHVjdA== 24827\nIE1hcmF0aG9u 24828\nIGdvb2RieWU= 24829\nIGFscGhhYmV0 24830\naHA= 24831\nIGNvdXJ0cm9vbQ== 24832\ncmluZ3Rvbg== 24833\nb3RoaW5n 24834\nVGFn 24835\nIGRpcGxvbWF0cw== 24836\nIGJhcmJhcg== 24837\nIEFxdWE= 24838\nMTgz 24839\nMzMzMw== 24840\nIG1hdHVyaXR5 24841\nIGluc3RhYmlsaXR5 24842\nIEFwYWNoZQ== 24843\nID09PQ== 24844\nIGZhc3Rpbmc= 24845\nIEdyaWQ= 24846\nTW9kTG9hZGVy 24847\nIDE1Mg== 24848\nQWJz 24849\nIE9wZXJhdGluZw== 24850\nZXR0aQ== 24851\nIGFjcXVhaW50 24852\nRG9ubmVsbA== 24853\nIEtlbQ== 24854\nIEZvcmdl 24855\nIGFybW9yZWQ= 24856\nTWls 24857\nIHBoaWxvc29waGVycw== 24858\naW52ZXN0 24859\nUGxheWVycw== 24860\n4og= 24861\nIG15cmlhZA== 24862\nIGNvbXJhZGVz 24863\nUm90 24864\nIHJlbWVtYmVyaW5n 24865\nIGNvcnJlc3BvbmRz 24866\nIHByb2dyYW1tZXJz 24867\nIEx5bm4= 24868\nIG9saWc= 24869\nIGNvaGVyZW50 24870\neW5jaHJvbg== 24871\nIENoZW1pY2Fs 24872\nIGp1Z2c= 24873\ncGFpcg== 24874\ncG9zdHM= 24875\nRXll 24876\nIElubmVy 24877\nIHNlbWVzdGVy 24878\nb3R0ZXN0 24879\nIEVtaXJhdGVz 24880\ncmljYW5lcw== 24881\nb3JvdXNseQ== 24882\nbWl0cw== 24883\nIFdpcw== 24884\nIGRvZGdl 24885\nbG9jYXRpb24= 24886\nIGZhZGVk 24887\nQW1hem9u 24888\nIFByb2NlZWQ= 24889\nIElORk8= 24890\nam91cm5hbA== 24891\nIFRydWNr 24892\nVGVu 24893\nIDIxNw== 24894\nIHN0YXR1dGVz 24895\nbW9iaWxl 24896\nIFR5cGVz 24897\nUmVjb21t 24898\nYnVzdGVy 24899\ncGV4 24900\nIGxlZ2VuZHM= 24901\nIGhlYWRhY2hl 24902\nZmFjZWQ= 24903\nIFdpRmk= 24904\naWZ0eQ== 24905\nIEhFUg== 24906\nIGNpcmN1aXRz 24907\nRVJST1I= 24908\nMjI2 24909\nb2xpbg== 24910\nIGN5bGluZGVy 24911\nb3NwYWNl 24912\naWtlcnM= 24913\nUHJlbQ== 24914\nUXVhbnQ= 24915\nIGNvbmZsaWN0aW5n 24916\nIHNsaWdodGVzdA== 24917\nIGZvcmdlZA== 24918\naW9uYWdl 24919\nU3RlcGhlbg== 24920\nIEt1Yg== 24921\nIE9wcG9ydHVu 24922\nIEhlYWw= 24923\nIGJsbw== 24924\nIHJ1bGVycw== 24925\nIGh1aA== 24926\nIHN1Ym1hcmluZQ== 24927\nZnk= 24928\nYXNzZXI= 24929\nIGFsbG93YW5jZQ== 24930\nIEthc2ljaA== 24931\nIFRhcw== 24932\nIEF1c3RyYWxpYW5z 24933\nRm9yZ2VNb2RMb2FkZXI= 24934\nIOKGkQ== 24935\nIE1hdHJpeA== 24936\nYW1pbnM= 24937\nIDEyMDA= 24938\nIEFjcXU= 24939\nMjM2 24940\nRG9jdW1lbnQ= 24941\nIEJyZWFraW5n 24942\nMTkz 24943\nIFN1YnN0 24944\nIFJvbGxlcg== 24945\nIFByb3BlcnRpZXM= 24946\nIE5J 24947\ndGllcg== 24948\nIGNydXNoaW5n 24949\nIGFkdm9jYXRpbmc= 24950\nRnVydGhlcm1vcmU= 24951\na2VlcGVycw== 24952\nIHNleGlzbQ== 24953\neGQ= 24954\nIGNhbGxlcg== 24955\nIFNlbnNl 24956\nY2hpZXZl 24957\nIFRG 24958\nIGZ1ZWxlZA== 24959\nIHJlbWluaXNjZW50 24960\nIG9ic2Vzcw== 24961\ndXJzdA== 24962\nIHVwaG9sZA== 24963\nIEZhbnM= 24964\naGV0aWNz 24965\nIOKX 24966\nIEJhdGg= 24967\nIGJldmVyYWdl 24968\nIG9zY2lsbA== 24969\nMjU0 24970\nIHBvbGVz 24971\nIGdyYWR1YWw= 24972\nIGV4dGluZw== 24973\nIFN1ZmY= 24974\nIFN1ZGRlbmx5 24975\nIGxpa2luZw== 24976\nIDE5NDk= 24977\ndW5jaWF0aW9u 24978\nYW1pbmF0aW9u 24979\nIE9tYXI= 24980\nIExW 24981\nIENvbnNlcXVlbnRseQ== 24982\nIHN5bnRoZXM= 24983\nIEdJRg== 24984\nIHBhaW5z 24985\nIGludGVyYWN0aW5n 24986\ndW91c2x5 24987\naW5jcmU= 24988\nIHJ1bW9y 24989\nIFNjaWVudG9sb2d5 24990\nMTk3 24991\nIFppZw== 24992\nIHNwZWxsaW5n 24993\nIEFTUw== 24994\nIGV4dGluZ3U= 24995\nbXNvbg== 24996\nIGdo 24997\nIHJlbWFya2Vk 24998\nIFN0cmF0ZWdpYw== 24999\nIE1PTg== 25000\n5aU= 25001\nZ2Fl 25002\nIFdIQVQ= 25003\nRXJpYw== 25004\nIENhbXB1cw== 25005\nIG1ldGhhbmU= 25006\nIGltYWdpbg== 25007\nSlVTVA== 25008\nIEFsbQ== 25009\nWFQ= 25010\naXE= 25011\nIFJTUw== 25012\nIHdyb25nZG9pbmc= 25013\nYXR0YQ== 25014\nIGJpZ290 25015\nIGRlbW9uc3RyYXRvcnM= 25016\nIENhbHZpbg== 25017\nIFZpbGxh 25018\nIG1lbWJyYW5l 25019\nIEF3ZXNvbWU= 25020\nIGJlbmVmaWM= 25021\nMjY4 25022\nIG1hZ25pZmljZW50 25023\nIExvdHM= 25024\nR3JlZw== 25025\nIEJvcmlz 25026\nIGRldGFpbmVlcw== 25027\nIEhlcm1hbg== 25028\nIHdoaXNwZXJlZA== 25029\nIGF3ZQ== 25030\nUHJvZmVzc29y 25031\nZnVuZGluZw== 25032\nIHBoeXNpb2xvZ2ljYWw= 25033\nIERlc3RydWN0aW9u 25034\nIGxpbWI= 25035\nIG1hbmlwdWxhdGVk 25036\nIGJ1YmJsZXM= 25037\nIHBzZXVk 25038\nIGh5ZHJh 25039\nIEJyaXN0b2w= 25040\nIHN0ZWxsYXI= 25041\nIEV4cGFuc2lvbg== 25042\nIEtlbGw= 25043\nIEludGVyZXN0aW5nbHk= 25044\nIG1hbnM= 25045\nIGRyYWdnaW5n 25046\nIGVjb2xvZ2ljYWw= 25047\nIEZpdA== 25048\nIGdlbnQ= 25049\nIGJlbmVmaXRlZA== 25050\nIEhhaXRp 25051\nIHBvbHln 25052\n44OO 25053\nIDIwMzA= 25054\nIHByb3c= 25055\nIHJlY29uc3RydWN0aW9u 25056\nIHdhc3Q= 25057\nIHBzeWNoaWM= 25058\nIEdyZWVrcw== 25059\nSGFuZGxlcg== 25060\nMTYy 25061\nIFB1bHNl 25062\nIHNvbGljaXQ= 25063\nIHN5cw== 25064\nIGluZmx1eA== 25065\nIEdlbnRsZQ== 25066\ncGVyY2VudA== 25067\nIHByb2xpZmVyYXRpb24= 25068\nIHRheGFibGU= 25069\nIGRpc3JlZ2FyZA== 25070\nIGVzY2FwaW5n 25071\nIGdpbmdlcg== 25072\nIHdpdGhzdGFuZA== 25073\nIGRldmFzdGF0ZWQ= 25074\nIERldw== 25075\nc2VyaWVz 25076\nIGluamVjdGVk 25077\nZWxhaWRl 25078\nIHR1cm5vdmVy 25079\naGVhdA== 25080\nmYI= 25081\nSGFwcHk= 25082\nIFNpbGVudA== 25083\n44Kt 25084\naXZpc20= 25085\nIGlycmF0aW9uYWw= 25086\nQU1B 25087\nIHJlZWY= 25088\ncnVi 25089\nIDE2Mg== 25090\nIGJhbmtlcnM= 25091\nIEV0aGljcw== 25092\ndnY= 25093\nIGNyaXRpY2lzbXM= 25094\nS24= 25095\nMTg2 25096\nTW92aWU= 25097\nIFRvcmllcw== 25098\nIG5vb2Q= 25099\nIGRpc3RvcnRpb24= 25100\nRmFsc2U= 25101\nb2RvcmU= 25102\nIHRhc3R5 25103\nUmVzZWFyY2g= 25104\nIFVJRA== 25105\nLSk= 25106\nIGRpdm9yY2Vk 25107\nIE1V 25108\nIEhheWVz 25109\nIElzbg== 25110\naWFuaQ== 25111\nIEhR 25112\nICIj 25113\naWduYW50 25114\nIHRyYXVtYXRpYw== 25115\nIExpbmc= 25116\nSHVu 25117\nIHNhYm90 25118\nb25saW5l 25119\ncmFuZG9t 25120\nIHJlbmFtZWQ= 25121\ncmFyZWQ= 25122\nS0E= 25123\nZGVhZA== 25124\nw6l0 25125\nIEFzc2lzdGFuY2U= 25126\nIHNlYWY= 25127\nKysrKysrKys= 25128\nIHNlbGRvbQ== 25129\nIFdlYmI= 25130\nIGJvb2xlYW4= 25131\ndWxldA== 25132\nIHJlZnJhaW4= 25133\nIERJWQ== 25134\ncnVsZQ== 25135\nIHNodXR0aW5n 25136\nIHV0aWxpemluZw== 25137\nbG9hZGluZw== 25138\nIFBhcmFt 25139\nY29hbA== 25140\nb290ZXI= 25141\nIGF0dHJhY3Rpbmc= 25142\nIERvbA== 25143\nIGhlcnM= 25144\nYWduZXRpYw== 25145\nIFJlYWNo 25146\naW1v 25147\nIGRpc2NhcmRlZA== 25148\nIFBpcA== 25149\nMDE1 25150\nw7xy 25151\nIG11Zw== 25152\nSW1hZ2luZQ== 25153\nQ09M 25154\nIGN1cnNlZA== 25155\nIFNob3dz 25156\nIEN1cnRpcw== 25157\nIFNhY2hz 25158\nc3BlYWtpbmc= 25159\nIFZpc3Rh 25160\nIEZyYW1ld29yaw== 25161\nb25nbw== 25162\nIHN1YnJlZGRpdA== 25163\nIGNydXM= 25164\nIE92YWw= 25165\nUm93 25166\nZ3Jvd2luZw== 25167\nIGluc3RhbGxtZW50 25168\nIGdsYWM= 25169\nIEFkdmFuY2U= 25170\nRUNL 25171\nIExHQlRR 25172\nTEVZ 25173\nIGFjZXQ= 25174\nIHN1Y2Nlc3NpdmU= 25175\nIE5pY29sZQ== 25176\nIDE5NTc= 25177\nUXVvdGU= 25178\nIGNpcmN1bXN0YW5jZQ== 25179\nYWNrZXRz 25180\nIDE0Mg== 25181\nb3J0aXVt 25182\nIGd1ZXNzZWQ= 25183\nIEZyYW1l 25184\nIHBlcnBldHJhdG9ycw== 25185\nIEF2aWF0aW9u 25186\nIEJlbmNo 25187\nIGhhbmRj 25188\nQXA= 25189\nIDE5NTY= 25190\nMjU5 25191\ncmFuZA== 25192\nTmV0TWVzc2FnZQ== 25193\nZGlu 25194\ndXJ0bGVz 25195\naGln 25196\nIFZJSUk= 25197\nZmZpdGk= 25198\nIFN3b3Jkcw== 25199\nYmlhbA== 25200\nIGtpZG5hcHBpbmc= 25201\nZGV2aWNl 25202\nIGJhcm4= 25203\nIEVsaQ== 25204\nYXVjYXM= 25205\nU2VuZA== 25206\nQ29uc3RydWN0ZWQ= 25207\nIMK9 25208\nIG5lZWRsZXM= 25209\nIGFkdmVydGlzZW1lbnRz 25210\nIHZvdQ== 25211\nIGV4aGliaXRlZA== 25212\nIEZvcnRyZXNz 25213\nQXNr 25214\nQmVycnk= 25215\nVFlQRQ== 25216\nIGNhbmNlcnM= 25217\ndW1waW5n 25218\nIFRlcnJpdG9yeQ== 25219\nIHBydWQ= 25220\nIG5hcw== 25221\nIGF0aGVpc3Q= 25222\nIGJhbGFuY2Vz 25223\n44Gf 25224\nIFNoYXdu 25225\nJiY= 25226\nIGxhbmRzYw== 25227\nIFJHQg== 25228\nIHBldHR5 25229\nIGV4Y2VsbGVuY2U= 25230\nIHRyYW5zbGF0aW9ucw== 25231\nIHBhcmNlbA== 25232\nIENoZXY= 25233\nRWFzdA== 25234\nIE91dHB1dA== 25235\naW1p 25236\nIGFtYmllbnQ= 25237\nIFRocmVhdA== 25238\nIHZpbGxhaW5z 25239\nIDU1MA== 25240\nSUNB 25241\nIHRhbGxlcg== 25242\nIGxlYWtpbmc= 25243\nY3Vw 25244\nIHBvbGlzaA== 25245\nIGluZmVjdGlvdXM= 25246\nIEtD 25247\nIEBA 25248\nYmFja2dyb3VuZA== 25249\nIGJ1cmVhdWNyYWN5 25250\nIFNhaQ== 25251\ndW5sZXNz 25252\naXRpb3Vz 25253\nIFNreXBl 25254\nQXRs 25255\nSURFTlQ= 25256\nMDA4 25257\nIGh5cG9jcg== 25258\nIHBpdGNoZXJz 25259\nIGd1ZXNzaW5n 25260\nIEZJTkFM 25261\nQmV0d2Vlbg== 25262\nIHZpbGxhZ2Vycw== 25263\nIDI1Mg== 25264\nZmFzaGlvbg== 25265\nIFR1bmlz 25266\nQmVo 25267\nIEV4Yw== 25268\nIE1JRA== 25269\nMjg4 25270\nIEhhc2tlbGw= 25271\nMTk2 25272\nIE5PUg== 25273\nIHNwZWNz 25274\nIGludmFyaQ== 25275\nIGdsdXQ= 25276\nIENhcnM= 25277\nIGltcHVsc2U= 25278\nIGhvbm9ycw== 25279\nZ2Vs 25280\nIGp1cmlzZGljdGlvbnM= 25281\nIEJ1bmRsZQ== 25282\ndWxhcw== 25283\nQ2FsaWZvcm5pYQ== 25284\nIEluY3JlYXNl 25285\nIHBlYXI= 25286\nIHNpbmdsZXM= 25287\nIGN1ZXM= 25288\nIHVuZGVyd2VudA== 25289\nIFdT 25290\nIGV4YWdnZXJhdGVk 25291\nIGR1YmlvdXM= 25292\nIGZsYXNoaW5n 25293\nTE9H 25294\nKV0u 25295\nSm91cm5hbA== 25296\ndGc= 25297\nVmFu 25298\nIElzdGFuYnVs 25299\nIEluc3A= 25300\nIEZyYW5rZW4= 25301\nRHJhdw== 25302\nIHNhZG5lc3M= 25303\nIGlyb25pYw== 25304\nIEZyeQ== 25305\neGM= 25306\nIDE2NA== 25307\naXNjaA== 25308\nV2F5 25309\nIFByb3Rlc3RhbnQ= 25310\naG9ybg== 25311\nIHVuYWZm 25312\nIFZpdg== 25313\naWxsYXM= 25314\nIFByb2R1Y3Rpb25z 25315\nIEhvZ2Fu 25316\nIHBlcmltZXRlcg== 25317\nIFNpc3RlcnM= 25318\nIHNwb250YW5lb3Vz 25319\nIGRvd25zaWRl 25320\nIGRlc2NlbmRhbnRz 25321\nIG9ybg== 25322\nd29ybQ== 25323\nSmFwYW5lc2U= 25324\nIDE5NTU= 25325\nIDE1MQ== 25326\nIERvaW5n 25327\nZWxzZW4= 25328\ndW1ibGVz 25329\nIHJhZGljYWxseQ== 25330\nIERydW0= 25331\nIEJhY2g= 25332\nIGxpYWJpbGl0aWVz 25333\nIE9C 25334\nIEVsZW1lbnRhcnk= 25335\nIG1lbWU= 25336\neW5lcw== 25337\nIGZpbmdlcnByaW50 25338\nIEdyYWI= 25339\nIHVuZGVydGFrZQ== 25340\nTWVtYmVycw== 25341\nIFJlYWRlcg== 25342\nIFNpbXM= 25343\nZ29k 25344\nIGh5cG90aGV0aWNhbA== 25345\nc2NpZW50 25346\nIEFK 25347\nIGNoYXJpc20= 25348\nIGFkbWlzc2lvbnM= 25349\nIE1pc3NpbGU= 25350\ndHJhZGU= 25351\nIGV4ZXJjaXNpbmc= 25352\nIEJhY2tncm91bmQ= 25353\nV3JpdHRlbg== 25354\nIHZvY2Fscw== 25355\nd2hldGhlcg== 25356\nIHZp 25357\nIFdpbm5lcg== 25358\nIGxpdHRlcg== 25359\nIFNob290aW5n 25360\nU1RFTQ== 25361\n44Kh 25362\nIEFGTA== 25363\nIHZhcmlhYmlsaXR5 25364\nIGVhdHM= 25365\nIERQUw== 25366\nYnJvdw== 25367\nIGVsZXBoYW50cw== 25368\nIHN0cmF0 25369\nIMU= 25370\nIHNldHRsZXJz 25371\nTWF0dGhldw== 25372\nIGluYWR2ZXJ0 25373\nSEk= 25374\nIElNRg== 25375\nIEdvYWw= 25376\nIG5lcnZlcw== 25377\nSm9obnNvbg== 25378\nZXll 25379\nYWJsaXNobWVudA== 25380\nVGh1cnNkYXk= 25381\nQklMSVRZ 25382\nSGFk 25383\nYW1vdG8= 25384\naGV0YW1pbmU= 25385\nZXBz 25386\nIG1pdG9jaG9uZA== 25387\nIGNvbXByZXNzZWQ= 25388\nIFRyZXZvcg== 25389\nIEFuaW1hbHM= 25390\nVG9vbA== 25391\nTG9jaw== 25392\nIHR3ZWFr 25393\nIHBpbmNo 25394\nIGNhbmNlbGxhdGlvbg== 25395\nUG90 25396\nIGZvY2Fs 25397\nIEFzdHJvbg== 25398\nMTcz 25399\nIEFTQw== 25400\nIE9USEVS 25401\ndW1uaQ== 25402\nIGRlbWlzZQ== 25403\nZGw= 25404\n2YU= 25405\nU2VtaXRpc20= 25406\nIGNyYWNraW5n 25407\nIGNvbGxhYm9yYXRpdmU= 25408\nIGV4cGxvcmVz 25409\nc3Fs 25410\nIGhlcmJz 25411\nIGNvbmZpZ3VyYXRpb25z 25412\nbWlz 25413\nIFJlc3VsdA== 25414\nYWNleQ== 25415\nIFNtb2tl 25416\nIHNhbmN0 25417\nZWxpYQ== 25418\nIGRlZ2VuZXI= 25419\nIGRlZXBlc3Q= 25420\nIHNjcmVhbWVk 25421\nIG5hcA== 25422\nU29mdHdhcmU= 25423\nIFNUQVI= 25424\nRUY= 25425\nIFhpbg== 25426\nc3BvbnNvcmVk 25427\nbWFuc2hpcA== 25428\nMjMz 25429\nIHByaW1hcmllcw== 25430\nIGZpbHRlcmluZw== 25431\nIGFzc2VtYmxl 25432\nbWls 25433\nIE15ZXJz 25434\nYm93cw== 25435\nIHB1bmNoZWQ= 25436\nTWlj 25437\nIGlubm92YXRpb25z 25438\nIGZ1bmM= 25439\nYW5kbw== 25440\nIGZyYWNraW5n 25441\nIFZ1bA== 25442\n0L7Q 25443\nb3Nob3A= 25444\nIEltbXVu 25445\nIHNldHRsaW5n 25446\nIGFkb2xlc2NlbnRz 25447\nIHJlYnVpbGRpbmc= 25448\nIHRyYW5zZm9ybWluZw== 25449\nIHBhcm9sZQ== 25450\nIGhhcmJvcg== 25451\nIGJvb2tpbmc= 25452\nb3Rpb25hbA== 25453\nb25nZXZpdHk= 25454\nIFlv 25455\nYnVn 25456\nIGVtZXJnZXM= 25457\nIE1ldGhvZHM= 25458\nIENodQ== 25459\nUHJlcw== 25460\nIER1bmdlb25z 25461\nIHRyYWlsaW5n 25462\nIFJ1bQ== 25463\nIEh1Z2g= 25464\n5aSp 25465\nIEVyYQ== 25466\nIEJhdHRsZXM= 25467\nUmVzdWx0cw== 25468\nIFRyYWRpbmc= 25469\nIHZlcnNh 25470\nY3Nz 25471\nYXhpZXM= 25472\naGVldA== 25473\nIGdyZWVk 25474\nMTk4OQ== 25475\nIGdhcmRlbnM= 25476\nIGNvbnRpbmdlbnQ= 25477\nUGFyaw== 25478\nIExlYWZz 25479\naG9vaw== 25480\ncm9iZQ== 25481\nIGRpcGxvbWFjeQ== 25482\nIEZ1ZWw= 25483\nIEludmFzaW9u 25484\nIHVwZ3JhZGluZw== 25485\nTWFsZQ== 25486\nIGVsaWM= 25487\nIHJlbGVudGxlc3M= 25488\nIENvdmVuYW50 25489\nYXBlc2g= 25490\nIFRyb3A= 25491\nVHk= 25492\ncHJvZHVjdGlvbg== 25493\nYXJ0eQ== 25494\nIHB1bmNoZXM= 25495\nYWtv 25496\nY3ljbG9wZWRpYQ== 25497\nIFJhYmJpdA== 25498\nIEhETUk= 25499\nIDE0MQ== 25500\nIGZvaWw= 25501\nSXRlbUltYWdl 25502\nIEZH 25503\nIGltcGxlbWVudGF0aW9ucw== 25504\nIFBvbQ== 25505\naXh0dXJlcw== 25506\nIGF3YWl0 25507\nIDMzMA== 25508\nYW11cw== 25509\nIHVtYnJlbGxh 25510\nIGZvcmVzZWU= 25511\nc2VwYXI= 25512\nIGNpcmN1bWNpc2lvbg== 25513\nIHBlcmlwaGVyYWw= 25514\nU2F5 25515\nIEV4cGVydA== 25516\nSW5j 25517\nIHdpdGhkcmV3 25518\nIEFuZGVycw== 25519\nZnJpZWQ= 25520\nIHJhZGlvYWN0aXZl 25521\nIE9wZW5pbmc= 25522\nIGJvYXJkaW5n 25523\nIE5E 25524\nIG92ZXJ0aHJvdw== 25525\nQWN0aXY= 25526\nV1A= 25527\nIEFjdHM= 25528\n15k= 25529\nIG1vdGlvbnM= 25530\ndmlj 25531\nIE1pZ2h0eQ== 25532\nIERlZmVuZGVy 25533\nYWVy 25534\nIHRoYW5rZnVs 25535\nIEtpbGxpbmc= 25536\nIEJyaXM= 25537\nbW9pbA== 25538\nIHByZWRpY3Rpbmc= 25539\nMjY2 25540\nY2hvaWNl 25541\nIGtpbGxlcnM= 25542\nIGluY3Vi 25543\nIENoZXN0 25544\nYXRoZXJpbmc= 25545\nIHByb2NsYWltZWQ= 25546\nZmxvd2Vy 25547\nb3Nzb20= 25548\ndW1ibGVkb3Jl 25549\nIEN5Y2xpbmc= 25550\nIE9jY3VweQ== 25551\nQUdFUw== 25552\nUGVu 25553\nIFl1Zw== 25554\nIHBhY2thZ2Vk 25555\nIGhlaWdodGVuZWQ= 25556\nY290 25557\nc3RhY2s= 25558\nQ29uZA== 25559\nIHN0YW1wcw== 25560\nbWFnZQ== 25561\nIHBlcnN1YWRlZA== 25562\nIGVuc2w= 25563\nIENhcmRpbmFs 25564\nIHNvbGl0YXJ5 25565\nIHBvc3Nlc3Npbmc= 25566\nIENvcms= 25567\nIGV2aWQ= 25568\nIFRheQ== 25569\nIGJsdWVz 25570\nIGV4dHJlbWlzbQ== 25571\nIGx1bmFy 25572\nIGNsb3du 25573\nVGVjaG4= 25574\nIGZlc3RpdmFscw== 25575\nIFB2UA== 25576\nIExhcg== 25577\nIGNvbnNlcXVlbnRseQ== 25578\ncHJlc2VudA== 25579\nIHNvbWVkYXk= 25580\n546L 25581\nIE1ldGVvcg== 25582\nIHRvdXJpbmc= 25583\nY3VsdHVyZQ== 25584\nIGJlYWNoZXM= 25585\nU2hpcA== 25586\nY2F1c2U= 25587\nIEZsb29k 25588\n44Ov 25589\nIHB1cml0eQ== 25590\ndGhvc2U= 25591\nIGVtaXNzaW9u 25592\nYm9sdA== 25593\nIGNob3Jk 25594\nIFNjcmlwdHVyZQ== 25595\nTHU= 25596\nICR7 25597\nY3JlYXRlZA== 25598\nT3RoZXJz 25599\nMjU4 25600\nIGVsZW1lbnRhbA== 25601\nIGFubm95ZWQ= 25602\nIEFF 25603\nZGFu 25604\nIFNhZw== 25605\nUmVzZWFyY2hlcnM= 25606\nIGZhaXJ5 25607\n4oCT4oCT 25608\nPT09PT09PT09PT09 25609\nU21hcnQ= 25610\nR0dHRw== 25611\nIHNrZWxldG9ucw== 25612\nIHB1cGlscw== 25613\nbGlua2Vk 25614\nIHVyZ2VuY3k= 25615\nZW5hYmxlZA== 25616\nIEZ1Y2s= 25617\nIGNvdW5jaWxs 25618\ncmFi 25619\nVUFM 25620\nVEk= 25621\nIGxpZmVz 25622\nIGNvbmZlc3NlZA== 25623\nQnVn 25624\nIGhhcm1vbg== 25625\nIENPTkZJRw== 25626\nIE5ldXRyYWw= 25627\nRG91Ymxl 25628\nIHN0YXBsZQ== 25629\nIFNIQQ== 25630\nQnJpdGlzaA== 25631\nIFNOUA== 25632\nQVRPUg== 25633\nb2Nv 25634\nIHN3aW5naW5n 25635\nZ2V4 25636\nb2xlb24= 25637\ncGxhaW4= 25638\nIE1pc3Npbmc= 25639\nIFRyb3BoeQ== 25640\ndmFyaQ== 25641\ncmFuY2g= 25642\nIDMwMQ== 25643\nNDQw 25644\nMDAwMDAwMDAwMDAwMDAwMA== 25645\nIHJlc3RvcmluZw== 25646\nIGhhdWw= 25647\ndWNpbmc= 25648\nbmVyZw== 25649\nIGZ1dHVyZXM= 25650\nIHN0cmF0ZWdpc3Q= 25651\ncXVlc3Rpb24= 25652\nIGxhdGVyYWw= 25653\nIEJhcmQ= 25654\nIHNvcg== 25655\nIFJob2Rlcw== 25656\nIERvd250b3du 25657\nPz8/Pz8t 25658\nIExpdA== 25659\nIEJlbmVk 25660\nIGNvaWw= 25661\nc3RyZWV0 25662\nIFBvcnRhbA== 25663\nRklMRQ== 25664\nIEdydQ== 25665\nKiw= 25666\nMjMx 25667\nbmV1bQ== 25668\nIHN1Y2tlZA== 25669\nIHJhcHBlcg== 25670\nIHRlbmRlbmNpZXM= 25671\nIExhdXJlbg== 25672\nY2VsbGFuZW91cw== 25673\nMjY3 25674\nIGJyb3dzZQ== 25675\nIG92ZXJj 25676\naGVhZGVy 25677\nb2lzZQ== 25678\nIGJlZXQ= 25679\nIEdsZQ== 25680\nU3RheQ== 25681\nIG11bQ== 25682\nIHR5cGVk 25683\nIGRpc2NvdW50cw== 25684\nVGFsaw== 25685\nIE9n 25686\nZXhpc3Rpbmc= 25687\nIFNlbGw= 25688\ndXBo 25689\nQ0k= 25690\nIEF1c3RyaWFu 25691\nIFdhcm0= 25692\nIGRpc21pc3NhbA== 25693\nIGF2ZXJhZ2Vz 25694\nY2FtZXJh 25695\nIGFsbGVnaWFuY2U= 25696\nTEFO 25697\nPSIj 25698\nIGNvbW1lbnRhdG9ycw== 25699\nIFNldHRpbmc= 25700\nIE1pZHdlc3Q= 25701\nIHBoYXJtYWM= 25702\nIEVYUA== 25703\nIHN0YWlubGVzcw== 25704\nQ2hpY2Fnbw== 25705\nIHRhbg== 25706\nMjQ0 25707\nIGNvdW50cnlzaWRl 25708\nIFZhYw== 25709\nMjk1 25710\nIHBpbm5lZA== 25711\nIGNyaXNlcw== 25712\nIHN0YW5kYXJkaXplZA== 25713\nVGFzaw== 25714\nIEphaWw= 25715\nIERvY2tlcg== 25716\nY29sb3JlZA== 25717\nZm9ydGg= 25718\nIn0s 25719\nIHBhdHJvbnM= 25720\nIHNwaWNl 25721\nIG1vdXJu 25722\nIE1vb2Q= 25723\nIGxhdW5kcnk= 25724\nIGVxdWlw 25725\nIE1vbGU= 25726\neWxs 25727\nIFRIQw== 25728\nbmF0aW9u 25729\nIFNoZXJsb2Nr 25730\nIGlzc3U= 25731\nIEtyZQ== 25732\nIEFtZXJpY2Fz 25733\nIEFBQQ== 25734\nIHN5c3RlbWF0aWNhbGx5 25735\nIGNvbnRyYQ== 25736\nIFNhbGx5 25737\nIHJhdGlvbmFsZQ== 25738\nIGNhcnJpYWdl 25739\nIHBlYWtz 25740\nIGNvbnRyYWRpY3Rpb24= 25741\nZW5zYXRpb24= 25742\nIEZhaWx1cmU= 25743\nIHByb3Bz 25744\nIG5hbWVzcGFjZQ== 25745\nIGNvdmU= 25746\nZmllbGRz 25747\n44KL 25748\nIHdvb2w= 25749\nIENhdGNo 25750\nIHByZXN1bWVk 25751\nIERpYW5h 25752\ncmFnb24= 25753\naWdp 25754\nIGhhbW0= 25755\nIHN0dW50 25756\nIEdVSQ== 25757\nIE9ic2VydmF0b3J5 25758\nIFNob3Jl 25759\nIHNtZWxscw== 25760\nYW5uYWg= 25761\nIGNvY2twaXQ= 25762\nIER1dGVydGU= 25763\nODUw 25764\nIG9wcHJlc3NlZA== 25765\nYnJlYWtlcg== 25766\nIENvbnRyaWJ1dA== 25767\nIFBlcnU= 25768\nIE1vbnNhbnRv 25769\nIEF0dGVtcHQ= 25770\nIGNvbW1hbmRpbmc= 25771\nIGZyaWRnZQ== 25772\nIFJpbg== 25773\nIENoZXNz 25774\ndWFsaXR5 25775\nIG9s 25776\nUmVwdWJsaWNhbg== 25777\nIEdsb3J5 25778\nIFdJTg== 25779\nLi4uLi4uLg== 25780\nYWdlbnQ= 25781\ncmVhZGluZw== 25782\nIGluaA== 25783\nSm9uZXM= 25784\nIGNsaWNrcw== 25785\nYWxhbg== 25786\nIFtdOw== 25787\nIE1hamVzdHk= 25788\nIENlZA== 25789\nb3B1cw== 25790\nYXRlbA== 25791\nw6o= 25792\nQVJD 25793\nIEVjdWFkb3I= 25794\n44Og 25795\nIEt1cm8= 25796\nIHJpdHVhbHM= 25797\nIGNhcHRpdmU= 25798\nIG91bmNl 25799\nIGRpc2FncmVlbWVudA== 25800\nIHNsb2c= 25801\nZnVlbA== 25802\nUGV0 25803\nTWFpbA== 25804\nIGV4ZXJjaXNlZA== 25805\nIHNvbGlj 25806\nIHJhaW5mYWxs 25807\nIGRldm90aW9u 25808\nIEFzc2Vzc21lbnQ= 25809\nIHJvYm90aWM= 25810\nb3B0aW9ucw== 25811\nIFJQ 25812\nIEZhbWlsaWVz 25813\nIEZsYW1lcw== 25814\nIGFzc2lnbm1lbnRz 25815\nMDA3 25816\nYWtlZG93bg== 25817\nIHZvY2FidWxhcnk= 25818\nUmVpbGx5 25819\nIGNhdmFs 25820\nZ2Fycw== 25821\nIHN1cHByZXNzZWQ= 25822\nIFNFVA== 25823\nIEpvaG5z 25824\nIHdhcnA= 25825\nYnJva2Vu 25826\nIHN0YXR1ZXM= 25827\nIGFkdm9jYXRlZA== 25828\nIDI3NQ== 25829\nIHBlcmls 25830\nb21vcnBo 25831\nIEZlbWlu 25832\ncGVyZmVjdA== 25833\nIGhhdGNo 25834\nTGli 25835\nNTEy 25836\nIGxpZmVsb25n 25837\nMzEz 25838\nIGNoZWVrcw== 25839\nIG51bWJlcmVk 25840\nIE11Zw== 25841\nQm9keQ== 25842\ncmF2ZWw= 25843\nV2VpZ2h0 25844\nIEphaw== 25845\nIEhlYXRo 25846\nIGtpc3Npbmc= 25847\nIEpVU1Q= 25848\nIHdhdmluZw== 25849\ndXBsb2Fk 25850\nIGluc2lkZXI= 25851\nIFByb2dyZXNzaXZl 25852\nIEZpbHRlcg== 25853\ndHRh 25854\nIEJlYW0= 25855\nIHZpb2xlbnRseQ== 25856\naXBhdGlvbg== 25857\nIHNrZXB0aWNpc20= 25858\nIDE5MTg= 25859\nIEFubmll 25860\nIFNJ 25861\nIGdlbmV0aWNz 25862\nIG9uYm9hcmQ= 25863\nYXRs 25864\nIEZyaWVkbWFu 25865\nIEJyaQ== 25866\nY2VwdGl2ZQ== 25867\nIHBpcmF0ZQ== 25868\nIFJlcG9ydGVy 25869\nMjc4 25870\nIG15dGhvbG9neQ== 25871\nIGVjbGlwc2U= 25872\nIHNraW5z 25873\nIGdseXBo 25874\naW5naGFt 25875\nRmlsZXM= 25876\nQ291cg== 25877\nd29tZW4= 25878\nIHJlZ2ltZXM= 25879\nIHBob3RvZ3JhcGhlZA== 25880\nS2F0 25881\nIE1BWA== 25882\nT2ZmaWNpYWxz 25883\nIHVuZXhwZWN0ZWRseQ== 25884\nIGltcHJlc3Npb25z 25885\nRnJvbnQ= 25886\nOzs7Ozs7Ozs= 25887\nIHN1cHJlbWFjeQ== 25888\nIHNhbmc= 25889\nIGFnZ3JhdmF0ZWQ= 25890\nIGFicnVwdGx5 25891\nIFNlY3Rvcg== 25892\nIGV4Y3VzZXM= 25893\nIGNvc3Rpbmc= 25894\naWRlcHJlc3M= 25895\nU3RhY2s= 25896\nIFJOQQ== 25897\nb2JpbA== 25898\nIGdob3N0cw== 25899\nbGRvbg== 25900\nYXRpYmlsaXR5 25901\nVG9waWNz 25902\nIHJlaW1idXJzZQ== 25903\nIEhN 25904\nIERlZw== 25905\nIHRoaWVm 25906\neWV0 25907\nb2dlbmVzaXM= 25908\nbGVhbmluZw== 25909\nIEtvbA== 25910\nIEJhc2tldGJhbGw= 25911\nIGZp 25912\nIFNlZWluZw== 25913\nIHJlY3ljbGluZw== 25914\nIFst 25915\nQ29uZ3Jlc3M= 25916\nIGxlY3R1cmVz 25917\nUHN5 25918\nIG5lcA== 25919\nIG1haWQ= 25920\nIG9yaWVudGVk 25921\nQVg= 25922\nIHJlc3BlY3RmdWw= 25923\ncmVuZQ== 25924\nZmx1c2g= 25925\nIFVubG9hZGVk 25926\ncmVxdWVzdA== 25927\nZ3JpZA== 25928\nIEFsdGVybmF0aXZlbHk= 25929\nIEh1Z28= 25930\nIGRlY3JlZQ== 25931\nIEJ1ZGRoaXNt 25932\nYW5kdW0= 25933\nQW5kcm9pZA== 25934\nIENvbmdv 25935\nIEpveWNl 25936\nIGFja25vd2xlZGdpbmc= 25937\naGVzaXZl 25938\nIFRvbW9ycm93 25939\nIEhpcm8= 25940\ndGhyZW4= 25941\nIE1hY2Vk 25942\nIGhvYXg= 25943\nIEluY3JlYXNlZA== 25944\nIFByYWRlc2g= 25945\nV2lsZA== 25946\nX19fX19f 25947\nMTYx 25948\nIGF1bnQ= 25949\nIGRpc3RyaWJ1dGluZw== 25950\nIFR1Y2tlcg== 25951\nIFNTTA== 25952\nIFdvbHZlcw== 25953\nQnVpbGRpbmc= 25954\nb3VsdA== 25955\nIEx1bw== 25956\nIFlhcw== 25957\nIFNwaXI= 25958\nIFNoYXBl 25959\nIENhbWJvZA== 25960\nIElQdg== 25961\nIG1s 25962\nIGV4dHJhZA== 25963\nMzkw 25964\nIFBlbm55 25965\nZHJlYW0= 25966\nIHN0YXRpb25lZA== 25967\nb3B0aW9uYWw= 25968\nZXdvcnRoeQ== 25969\nLjwv 25970\nIHVuZGVydGFraW5n 25971\nIGNoaWNrZW5z 25972\nIHN0aW11bGk= 25973\nIEVsc2U= 25974\naWdhdG9ycw== 25975\nIEJlZ2lubmluZw== 25976\nY3Rvcnk= 25977\nIHByZXBhcmVz 25978\nIGRlbHRh 25979\nIHZpY2luaXR5 25980\ndG9vbA== 25981\nIHdvcmtzaG9wcw== 25982\nTUh6 25983\nIGFjY3VzYXRpb24= 25984\nIGhpc3Rvcmllcw== 25985\ncm9wb2xpcw== 25986\nIENodXJjaGlsbA== 25987\nIG5lb24= 25988\nIGJhZmY= 25989\nZGllcw== 25990\nbWF5YmU= 25991\nIOijj+immumGkg== 25992\nIHN5bXB0b20= 25993\nRUNI 25994\nIE1hbnVlbA== 25995\nIGJhbmFuYQ== 25996\nIEhC 25997\nICoqKio= 25998\nIEtvcmVhbnM= 25999\nY29sbA== 26000\nRkI= 26001\nIHByYXlpbmc= 26002\nIENhbm5vdA== 26003\nIE1pbGU= 26004\nIGVtYnJhY2luZw== 26005\nIFNpbGs= 26006\nMzkz 26007\nb3RlcnM= 26008\nRkQ= 26009\nIGRheWxpZ2h0 26010\nYWxpYXM= 26011\nIEJyaWdhZGU= 26012\nIEhhbm5haA== 26013\nIGNsZXJneQ== 26014\nIHNvdXRoZWFzdA== 26015\nIGFsY29ob2xpYw== 26016\nIHByb3Bvc2Vz 26017\nbGl2aW9u 26018\nIGNhbGN1bGF0aW5n 26019\nIHN0aW11bGF0ZQ== 26020\nIHNwbGl0dGluZw== 26021\nZWlnaHQ= 26022\nIEluZHk= 26023\ncGxheXM= 26024\nIFBpaw== 26025\nIGRvbWVzdA== 26026\nIGZvcmdpdmVuZXNz 26027\nIFJpbmdz 26028\ncGF0aWVudA== 26029\na2luc29u 26030\nTW9udA== 26031\naWdpYmxl 26032\nOyI= 26033\nIHBlcmlvZGljYWxseQ== 26034\nYW1tYWQ= 26035\nIEJyaXR0 26036\ncGFyZA== 26037\nIGFyYml0cmF0aW9u 26038\nIFNjaG5laWRlcg== 26039\nIENvcnBvcmF0ZQ== 26040\nIE1heWE= 26041\nIHNuYWtlcw== 26042\nYXVt 26043\nIGJsYXN0ZWQ= 26044\nIG15c3Rlcmllcw== 26045\nIHJldml2ZQ== 26046\nb2NhbXA= 26047\nIERvZGdl 26048\nIE9wZXJh 26049\nMjc5 26050\nIG9ycGhhbg== 26051\nIHNwZWNpZmllcw== 26052\nIE1ldHM= 26053\nRHVyYXRpb24= 26054\nSGVu 26055\nIGZpcmV3b3Jrcw== 26056\nIHByb3NlY3V0ZQ== 26057\nIFRpbGxlcnNvbg== 26058\nZHA= 26059\ndXNhZ2U= 26060\nbGluZXNz 26061\nIERlYmlhbg== 26062\nIDIyNA== 26063\ncmlzZXM= 26064\nIEluZmVjdA== 26065\nYXRyYQ== 26066\nIFJS 26067\nIExvcg== 26068\nZGlmZg== 26069\nIENoYXJsZXN0b24= 26070\nIGFjb3VzdGlj 26071\nIGFtdXNl 26072\nMzMw 26073\nIGNlcg== 26074\nIFRhYw== 26075\nIFsr 26076\nIGNhcmRpYWM= 26077\nIFJlc3RhdXJhbnQ= 26078\nZXJneQ== 26079\nIGZ1eno= 26080\nIGJpdGVz 26081\nIGhhemFyZG91cw== 26082\nIGJyaWdodGVy 26083\ncmFucw== 26084\nIFN0ZXBoYW5pZQ== 26085\nZXh0cmE= 26086\nUkVU 26087\nIENocmlzdGluZQ== 26088\nIFN1ZQ== 26089\nc3RhdGVtZW50 26090\nIGJvbHN0ZXI= 26091\nIGFudGl0 26092\nUmFkaW8= 26093\nQklU 26094\n44Kw 26095\nIHZpc2lvbnM= 26096\nIENvbmNlcHQ= 26097\nIGlubGluZQ== 26098\nIFBoaWxvc29waHk= 26099\naXNhbnM= 26100\nIElydmluZw== 26101\nw6M= 26102\ndGFraW5n 26103\nIGluY29uc2lzdA== 26104\nIEt1bWFy 26105\nIGxpZw== 26106\nIFNjaHVtZXI= 26107\nIFJlZ3VsYXRpb25z 26108\nIEh6 26109\ndGhybw== 26110\nIFZvbGRlbW9ydA== 26111\nIE1FRA== 26112\nIEZyZWRlcmljaw== 26113\nUGFk 26114\nMjIx 26115\nIGFsbGVnaW5n 26116\nIENvbW11bmljYXRpb24= 26117\nIDE2Nw== 26118\nIGZvcmVjYXN0cw== 26119\nIHNwaWRlcnM= 26120\nT3JnYW4= 26121\nIFBhcnRpY2lwYW50cw== 26122\nIE9wcw== 26123\nZGVzaWdu 26124\nQ2xvc2U= 26125\nIGZhY3Rv 26126\nIGJvbWJlcnM= 26127\ncmVzaXN0YW50 26128\nYXRlZ29yaWVz 26129\nU2Nob29s 26130\nIGhvbWV3b3Jr 26131\nIGNvcnJv 26132\nVHVlc2RheQ== 26133\nIEJyZW5kYW4= 26134\nIE1Y 26135\nIFRT 26136\nIFN0cmk= 26137\nIHN0YWtlaG9sZGVycw== 26138\nIE1pbGxlbm5pdW0= 26139\nIHRyYW5zZmVycmluZw== 26140\nSnVk 26141\nIHRhYw== 26142\nIDE2MDA= 26143\nIFNESw== 26144\ncmI= 26145\nIGludGVycHJldGF0aW9ucw== 26146\nIFNH 26147\nIHVwc3RhaXJz 26148\nIEhhcnZlc3Q= 26149\nIHZhZ2luYQ== 26150\nIGluZ2VzdA== 26151\neGY= 26152\nIE9yaW9u 26153\nIEpvZXk= 26154\nIHNhbmR3aWM= 26155\nIGltbW9ydGFs 26156\nIGZsaXBwZWQ= 26157\nb3J0ZXg= 26158\ndGhyZWF0ZW5pbmc= 26159\nIHNuaXBlcg== 26160\nIGNvbnZlcnRz 26161\nIGluc3RhbGxhdGlvbnM= 26162\nIEJ1bGdhcg== 26163\nb3JzY2hl 26164\nbWFpbHM= 26165\nIGx1cmU= 26166\nIG5hcnJvd2x5 26167\nIGdyZW5hZGU= 26168\nIEdpbmc= 26169\nIHVuZGVyd2Vhcg== 26170\nLS0tLS0tLS0tLS0tLS0= 26171\nIGNoYXNlZA== 26172\nIFZBTA== 26173\nIHBhcmVudGluZw== 26174\nIEhhbWI= 26175\nIEJsYXo= 26176\nIGFuYXJjaGlzdA== 26177\nIE1lZGlhbg== 26178\nIFByb2dyYW1z 26179\nzr0= 26180\nIG9iag== 26181\nIE5va2lh 26182\nb3JtYW4= 26183\nYW5xdQ== 26184\nYXRpc20= 26185\nb3Bh 26186\nIGZ1bGZpbGxpbmc= 26187\nIHB1cHB5 26188\nIGVudGl0 26189\nIFNlYmFzdGlhbg== 26190\nIHNob290ZXJz 26191\nIHJpY2hlcg== 26192\n6KE= 26193\nIHRlbXB0ZWQ= 26194\nIEFUVA== 26195\nIENW 26196\nIHRvcmU= 26197\nUmVzb3VyY2U= 26198\nIERldmlscw== 26199\nNDA4 26200\naW5hdGlvbmFs 26201\nIGFzc3VyYW5jZQ== 26202\nIERhcnJlbg== 26203\nIHdoaWNoZXZlcg== 26204\ncG9zdXJl 26205\nIGZ1cnk= 26206\nU3RvY2s= 26207\nIHVuaXZlcnNhbGx5 26208\ncmVzcG9uc2U= 26209\nIG9haw== 26210\nIHdvcmtsb2Fk 26211\nIENvcm5lcg== 26212\nZWVsZQ== 26213\nIi4uLg== 26214\nIGRlcHJpdmVk 26215\na293c2tp 26216\nIGNhc3Rz 26217\nIGFmZmlsaWF0aW9u 26218\nIEFjaA== 26219\nIEFza2Vk 26220\nYXRoZQ== 26221\nIGxhY3Q= 26222\nIFRodQ== 26223\ncm0= 26224\nIGFpcmxpbmVz 26225\nIG5vdGlvbnM= 26226\nRm9ybWF0 26227\nIEZBQQ== 26228\n44OK 26229\nZHJpdmVy 26230\nIHRyYW5zY2VuZA== 26231\nU2V0dGluZ3M= 26232\nIFByb3NlY3V0 26233\nIHNwaW5hbA== 26234\nIGRlZmF1bHRz 26235\nRks= 26236\nIHByZWZlcnM= 26237\ncmVuZGVyZWQ= 26238\ndGh1cw== 26239\nZmlsbQ== 26240\nIHRpZ2Vy 26241\nIFNwaWNlcg== 26242\ncmVjb2du 26243\nIFJ1Z2J5 26244\nTmV0d29yaw== 26245\nIHBpdHk= 26246\nIGNvbXBhcnRtZW50 26247\nY2FzdGVycw== 26248\nIE1vbnJvZQ== 26249\nIDcyMA== 26250\nIGNvcnJlY3Rpb25z 26251\nIGRvcGFtaW5l 26252\nIEFa 26253\nQ3V0 26254\nIHJvb21t 26255\nIHNwZWN1bGF0ZQ== 26256\nSGFzaA== 26257\nIHJlc3RyaWN0aXZl 26258\nMTExMQ== 26259\ncmVkaWJsZQ== 26260\nb25lbA== 26261\nIHJhbXBhbnQ= 26262\ncmVwb3J0ZWQ= 26263\nIFN1aXRl 26264\nIE1pbmltdW0= 26265\nYWx5cw== 26266\nYXphcmQ= 26267\nbG9vcA== 26268\nIGxlbnQ= 26269\nc2hh 26270\nIHZhbmRhbA== 26271\nbWVudQ== 26272\nIEJvZWhuZXI= 26273\nIG5hcnJhdGl2ZXM= 26274\nIGF1dGhlbnRpY2l0eQ== 26275\nMjY5 26276\nYW5pYw== 26277\nZHV0eQ== 26278\nMjg1 26279\nIHRoYW5rZWQ= 26280\nIGJldHJheWVk 26281\nbGlmdA== 26282\nIHNvdXRod2VzdA== 26283\nIERleHRlcg== 26284\nIEJvZA== 26285\nIGtleXdvcmRz 26286\nQXZlcmFnZQ== 26287\nRElT 26288\nIGV0aG5pY2l0eQ== 26289\nISks 26290\nIE5hdGlvbmFscw== 26291\n4bk= 26292\nIFRhaA== 26293\naW94aWQ= 26294\nIHdpZGdldA== 26295\nIHBhc3Rh 26296\nIGJpbGxpbmc= 26297\nIHRyaWxvZ3k= 26298\nIExpbmVz 26299\nIHNuaWZm 26300\nIG5lcGhldw== 26301\nTGF0ZQ== 26302\nIHByaW5jaXA= 26303\nIExvb3A= 26304\nIE1hcnhpc3Q= 26305\nIGRpc3NvbHZlZA== 26306\nIGNvbnRleHRz 26307\nIEFtb3VudA== 26308\nIFNwaWtl 26309\nIHRvdGFscw== 26310\nIG9yZ2FuaXplcg== 26311\nIHVwcmlzaW5n 26312\nc2hpcHM= 26313\nWVk= 26314\nIE5vcnRoZWFzdA== 26315\nbW9uZXk= 26316\nZ3JhZGF0aW9u 26317\nIGdvYWxrZWVwZXI= 26318\nIEhlYXI= 26319\nIHN0ZWFr 26320\nIEJ1enpGZWVk 26321\nIHNvbGVtbg== 26322\nIFNjYW5k 26323\nIHBvcHBpbmc= 26324\nIGFkaGVyZQ== 26325\nIEFsbGVn 26326\nYnl0ZQ== 26327\nIFdvbHZlcg== 26328\nIHVuaW4= 26329\nIHJlY29s 26330\naXR1ZA== 26331\nIG1pbWlj 26332\naWJ1cw== 26333\nIHByZWRpY3Rz 26334\nIEtlZXBlcg== 26335\naWF0aW5n 26336\nIGRlY2VwdGlvbg== 26337\nIGxlYXJudA== 26338\nIGRpYXJ5 26339\nIGNvbmRpdGlvbmFs 26340\nIHJlbGlj 26341\nIGludm9rZQ== 26342\naWVuY2Vk 26343\n5Yg= 26344\nIFBvbnQ= 26345\nIGNlbGxwaG9uZQ== 26346\nIHNwZWVkaW5n 26347\nIHRhY2tsaW5n 26348\nIG51ZGU= 26349\nb3BlbmVk 26350\nIE1hbmFmb3J0 26351\nIDE5NTI= 26352\nIG1ham9ycw== 26353\nIFNpbGVuY2U= 26354\nIGxvZ2lzdGljcw== 26355\nIHdlaWdodGVk 26356\nIFBzeWNoaWF0 26357\nIjpbIg== 26358\nIHNpY2tuZXNz 26359\nIGRpdmlkZW5kcw== 26360\nem9u 26361\nUmVsZWFzZQ== 26362\nIEtleXM= 26363\nIEljaA== 26364\nIGVueg== 26365\nIEZlcm5hbmQ= 26366\nIM6x 26367\nIG1lYW5pbmdz 26368\nIHBlbm55 26369\nIHN0ZXJu 26370\nIGxhcg== 26371\nIFB1Ymxpc2hlZA== 26372\nIGJhY2tkcm9w 26373\nS2lt 26374\nIFN5bnQ= 26375\nIGRlYnV0ZWQ= 26376\nd20= 26377\nIElzbGU= 26378\nIHJlZ3VsYXRpbmc= 26379\nb3R0aQ== 26380\nIFNjaG9sYXJz 26381\naWNlc3Rlcg== 26382\nIENoZWY= 26383\nIHBvcHM= 26384\nIExhdW5jaGVy 26385\nIFZhcmlvdXM= 26386\nIGNvbW1lbnRpbmc= 26387\nb3NsYXY= 26388\nZW56aWU= 26389\nIHJpdmFscnk= 26390\n4oKs 26391\nUmVhbGx5 26392\nIG9yYw== 26393\nIGJlYW4= 26394\nIEp1ZHk= 26395\nTm90aWNl 26396\nIEJpa2U= 26397\nP10= 26398\nIHJlbnRlZA== 26399\nc3Rlbg== 26400\nIGZvcmVmcm9udA== 26401\nIEJhbGR3aW4= 26402\nIHlpZWxkZWQ= 26403\ndGFpbHM= 26404\nUHJpbWU= 26405\nIFNvdXJjZXM= 26406\naWNhdG9y 26407\nU2Vhbg== 26408\nIG1hcmNoaW5n 26409\nT3V0cHV0 26410\nIEp1bmdsZQ== 26411\nIHJlc2lkZQ== 26412\nenpsZQ== 26413\nIEFuZHJld3M= 26414\nIHRvcnF1ZQ== 26415\nQmFzaWM= 26416\nQWN0dWFsbHk= 26417\nc3RyYXA= 26418\ncGVudGVy 26419\nIGV4YW1z 26420\nIFlh 26421\nIDE1OQ== 26422\nIERlY2lzaW9u 26423\nIHJhbnNvbQ== 26424\nZXRlZW50aA== 26425\nZW5zaW5n 26426\nMjEz 26427\nIHN1bnNldA== 26428\nNDA0 26429\nIFJhcGlk 26430\nIEhlaW4= 26431\nIEFib3JpZ2luYWw= 26432\nIG9yZ2FuaXNt 26433\nIFNldmVy 26434\nIGNsYQ== 26435\nYWpp 26436\nU2ltcGxl 26437\nIEZsYXZvcg== 26438\nIEV2YWw= 26439\ncHJ1cw== 26440\nIGNob3J1cw== 26441\nREFZ 26442\nIGRlbm91bmNlZA== 26443\nIGJpb2dyYXBoeQ== 26444\nIFR1cm5idWxs 26445\nUmVjZW50 26446\nTm9ybWFs 26447\nbGVjdGlvbnM= 26448\nV29yZA== 26449\nIGZlcnJ5 26450\nIFdhZ25lcg== 26451\naG9t 26452\nVW5pdA== 26453\nIHN1cGVybWFya2V0 26454\nIFNpdGg= 26455\nIG5vbWluZWVz 26456\nIGRpY3RhdG9yc2hpcA== 26457\naWRkbGVy 26458\nIGFubm91bmNlcw== 26459\nIFRoZW0= 26460\nIE5lcHR1bmU= 26461\nIGRlaXR5 26462\nIFlp 26463\nIG1vbmFyY2g= 26464\nQVJS 26465\nIGludmFkZWQ= 26466\nIEhvaw== 26467\ndW50YXJ5 26468\nQ2VydGFpbg== 26469\nZWdh 26470\nIGtpZGRpbmc= 26471\nIFJlZ3VsYXRpb24= 26472\nIHRyYXk= 26473\nIHBob3RvZ3JhcGhlcnM= 26474\nIEFyY2FuZQ== 26475\nIGRpc2NoYXJnZWQ= 26476\nIGV2YW5nZWxpY2Fs 26477\nIGludGVyY2hhbmdl 26478\nIGZpbG1tYWtlcg== 26479\nIEVuZGxlc3M= 26480\nIDI5MA== 26481\nIFNhbHZhZG9y 26482\nQVNZ 26483\nIFNpZ25hbA== 26484\nIHdyYXRo 26485\n4pw= 26486\nbG90 26487\nJy8= 26488\nIHByb2plY3RpbGU= 26489\nIGVtcGxveWluZw== 26490\nIEludGVyZmFjZQ== 26491\nMTkx 26492\nYXRlbGxpdGU= 26493\nIFJhdGg= 26494\ncGFja2FnZQ== 26495\nIGluZGljYXRpb25z 26496\nSmFzb24= 26497\nIGFyZ3M= 26498\nIEdIeg== 26499\nIHRpbHQ= 26500\nbmFudHM= 26501\nd29u 26502\n44K1 26503\ncmVkZA== 26504\ncmVzY2VudA== 26505\nIENhbGVuZGFy 26506\nIG1vZHVsYXI= 26507\nIGFzc2lzdGluZw== 26508\nIHJlZGVlbQ== 26509\nIEJlYW4= 26510\nIHdvcnNo 26511\nIGRlY2VudHJhbGl6ZWQ= 26512\nKS4uLg== 26513\nMzc3 26514\nIGFycmF5cw== 26515\nIGFjY29tcGxpc2htZW50cw== 26516\nzr8= 26517\nZG90 26518\nIG11dHVhbGx5 26519\nIG9ic3RydWN0 26520\nIG1pc3JlcHJlc2VudA== 26521\nb3Jlc3Q= 26522\naW9uaWM= 26523\ncnVjZQ== 26524\nJTs= 26525\nIGtub3dpbmdseQ== 26526\ncG9ydGluZw== 26527\naW5lbnRseQ== 26528\nQXJp 26529\nIFNjaHVsdHo= 26530\nRGE= 26531\nIENlcmU= 26532\nIG9ic29sZXRl 26533\nhYs= 26534\nZ2l2ZQ== 26535\nIGJhaXQ= 26536\nIGVubGFyZw== 26537\nTmVpbGw= 26538\nIDE5MzM= 26539\nIHJlY29uc2lkZXI= 26540\nIFNlcmdlYW50 26541\nIERpYW5l 26542\nIENvZ24= 26543\nIEljb24= 26544\nUG9zaXRpb24= 26545\nIGZvc3Q= 26546\nIHN0aXJyaW5n 26547\nc2V2ZW4= 26548\nIFNwYWNlWA== 26549\ndWdnZXRz 26550\nIG1lZGQ= 26551\nR2Fs 26552\nIFNpc3Rlcg== 26553\nQm95 26554\nIHRyaWdnZXJpbmc= 26555\nVGFraW5n 26556\nIHNjcmVhbXM= 26557\nIGNhdXNhbA== 26558\nIGF3YWtlbg== 26559\nQXJt 26560\nMjk3 26561\nIGRpc3BhdGNoZWQ= 26562\nIEZBTFNF 26563\nIG9yZ2FuaXphdGlvbmFs 26564\nIFRvbmc= 26565\nIGRpbGVtbWE= 26566\nZGVtb24= 26567\nU3Bs 26568\nIGhvb2tz 26569\ndWRpbmc= 26570\nIHZhbGlkYXRl 26571\nIHBvdGlvbg== 26572\nIGNsYXc= 26573\nIGJ1cmds 26574\nIHF1aXI= 26575\nQUNB 26576\nIEJyZW5uYW4= 26577\nIGR1cmFiaWxpdHk= 26578\nIGJvbWJpbmdz 26579\nIFdpbmRvdw== 26580\nIGN1bHByaXQ= 26581\nMzI1 26582\nVGhlcmVmb3Jl 26583\ndW1iZXJlZA== 26584\ncGVyZm9ybWFuY2U= 26585\nd2FydHM= 26586\nIGVuZm9yY2luZw== 26587\nIEJsb3c= 26588\nIHJlcHJpbnQ= 26589\naWZheA== 26590\nYWxwaGE= 26591\nIHNpbmlzdGVy 26592\nIGJ1cmdlcg== 26593\nZmlnaHRpbmc= 26594\nU2NvcmU= 26595\nIFN0b25lcw== 26596\naWVt 26597\nNDA1 26598\nY2hlbXk= 26599\nIHZpbmVnYXI= 26600\nbm9t 26601\nIHByZXZhaWxpbmc= 26602\nIExhdGVzdA== 26603\nwrY= 26604\nIGJh 26605\nIFdyaXRlcg== 26606\nIDE3Nw== 26607\nIENvbndheQ== 26608\nIGNvbGxlY3Rz 26609\nIHF1YW50aXRhdGl2ZQ== 26610\nIGhvcnJvcnM= 26611\nb2dlbnM= 26612\nIFNsb3Y= 26613\nIGxheXM= 26614\naGF3 26615\nIFNsYXNo 26616\nIG5pZ2h0Y2x1Yg== 26617\nIERhdmllcw== 26618\nIGJyaWRl 26619\nIFNjYXJsZXQ= 26620\neW1t 26621\nIEFwcGxpY2F0aW9ucw== 26622\ndmVsZW5ndGg= 26623\nIHJldml2YWw= 26624\nIHNvZnRseQ== 26625\nIHpvbw== 26626\naXRhaXJl 26627\nQ3Vy 26628\nIGVsZWN0cm9t 26629\nIHBsYW50aW5n 26630\nT1RP 26631\nIEVsZW1lbnRz 26632\nIHN3YWxsb3c= 26633\ncG9ydGVy 26634\nIGxhcHRvcHM= 26635\nIHBlYW51dA== 26636\nIGxvYmJ5aXN0cw== 26637\nzrI= 26638\nUGFuZWw= 26639\nIEpvYW4= 26640\naW1pbA== 26641\ndG5j 26642\nIHJlc2lzdGVk 26643\nIG91dHdl 26644\nIHJldGFpbmluZw== 26645\nYXRyaQ== 26646\nIHBvb3Jlcg== 26647\nIFN5cmlhbnM= 26648\nIEhhbW1vbmQ= 26649\nIHdlbGQ= 26650\ndWRlcg== 26651\ndG9waWM= 26652\nIFRU 26653\ncmljaWE= 26654\nIHRoaWV2ZXM= 26655\nTGlj 26656\nIEd1c3Q= 26657\nIFdheXM= 26658\nYXJldGg= 26659\nMjQz 26660\nIGJyb2FkY2FzdGVy 26661\nc2hpZWxk 26662\nYXNzaXVt 26663\ndWJsZQ== 26664\nIGFpcnN0cmlrZXM= 26665\nb25zbw== 26666\nIHBlZGFs 26667\nIGNvbGxlY3RvcnM= 26668\nIFZhbmRlcg== 26669\nIE1lc2E= 26670\nIGRpY3RhdG9y 26671\nIGRpcg== 26672\nZW50b24= 26673\nY2FydA== 26674\nc2NvcmU= 26675\nYWRkZXI= 26676\nQ3J5 26677\nIHNzaA== 26678\nZ2dlcg== 26679\nIGRydW5rZW4= 26680\nIEdT 26681\nIFNlYXQ= 26682\nIGNvcm5lcmJhY2s= 26683\nIHNraXBwZWQ= 26684\nIFJlc2VhcmNoZXJz 26685\nIEF1ZGk= 26686\nUmVmZXJlbmNl 26687\nIGhhdW50ZWQ= 26688\nw6s= 26689\nIENsaW5pYw== 26690\nY3o= 26691\nIHBz 26692\nIFBhbGFkaW4= 26693\nIFJlY2lwZQ== 26694\nIHN0aWdtYQ== 26695\nb3BweQ== 26696\nIG1vbmtleXM= 26697\nIEhhd2s= 26698\nU2Fk 26699\nIi8+ 26700\nIFdvcmtzaG9w 26701\nIFJldGFpbA== 26702\nIEF2YXRhcg== 26703\nNjI1 26704\nTmE= 26705\nIFZD 26706\nIFNlY3VyZQ== 26707\nTVk= 26708\nMTk4OA== 26709\nb3NzaXA= 26710\nIHByb3N0YXRl 26711\nIHVuZGVu 26712\nIGdhbWVy 26713\nIENvbnRlbnRz 26714\nIFdhcmhhbW1lcg== 26715\nIFNlbnRpbmVs 26716\nMzEw 26717\nIHNlZ3JlZ2F0aW9u 26718\nIEZsZXg= 26719\nIE1BWQ== 26720\nIGRyaWxscw== 26721\nIERydWdz 26722\nSXNsYW1pYw== 26723\nIHNwdXI= 26724\nIGNhZmU= 26725\nIGltYWdpbmFyeQ== 26726\nIGd1aWRpbmc= 26727\nIHN3aW5ncw== 26728\nIFRoZW1l 26729\nb2J5 26730\nIG51ZA== 26731\nIGJlZ2dpbmc= 26732\nIHN0cm9uZ2g= 26733\nIHJlamVjdGluZw== 26734\nIHBlZGVzdHJpYW5z 26735\nIFByb3NwZWN0 26736\nUmFyZQ== 26737\nc2xl 26738\nIGNvbmNlc3Npb25z 26739\nIENvbnN0aXR1dGlvbmFs 26740\nIGJlYW1z 26741\nIGZpYmVycw== 26742\ncG9vbg== 26743\nIGluc3RpbmN0cw== 26744\ncHJvcGVydHk= 26745\nIEJJRw== 26746\nU2FuZGVycw== 26747\naW1hdGVz 26748\nIGNvYXRpbmc= 26749\nIGNvcnBzZXM= 26750\nIFRSVUU= 26751\nY2hlY2tlZA== 26752\nIDE2Ng== 26753\nQXNo 26754\nIEpT 26755\nIEZpY3Rpb24= 26756\nIGNvbW11bmFs 26757\nIGVuZXJnZXRpYw== 26758\nb29vb29vb28= 26759\nIG5vd2FkYXlz 26760\nSUxE 26761\naWJv 26762\nIFNVVg== 26763\nUmVu 26764\nIGR3ZWxsaW5n 26765\nU2lsdmVy 26766\nIHRhbGx5 26767\nIE1vdmluZw== 26768\nIGNvd2FyZA== 26769\nIGdlbmVyYWxz 26770\nIGhvcm5z 26771\nIGNpcmN1bGF0ZWQ= 26772\nIHJvYmJlZA== 26773\nIFVubGltaXRlZA== 26774\nIGhhcmFzc2Vk 26775\nIGluaGliaXQ= 26776\nIGNvbXBvc2Vy 26777\nIFNwb3RpZnk= 26778\nIHNwcmVhZHM= 26779\nMzY0 26780\nIHN1aWNpZGFs 26781\nIG5vaXNlcw== 26782\nIFN0dXI= 26783\nIHNhZ2E= 26784\nIEthZw== 26785\naXNv 26786\nIHRoZW9yZXRpY2FsbHk= 26787\nTW9uZXk= 26788\nIHNpbWlsYXJpdHk= 26789\nIHNsaWNlZA== 26790\ndXRpbHM= 26791\naW5nZXM= 26792\nIi0= 26793\nIGFudGg= 26794\nIGltcGVk 26795\nTW9kdWxl 26796\nVGhyb3VnaG91dA== 26797\nIG1lbnVz 26798\nY29tbWl0dGVl 26799\nYW5kaQ== 26800\nb2Jq 26801\naW5hdg== 26802\nZmlyZWQ= 26803\nIEFiZHVsbGFo 26804\nIHVuZGVhZA== 26805\nIGZvbnRz 26806\nSG9sZA== 26807\nRU5H 26808\nIHN1c3RhaW5hYmlsaXR5 26809\nIGZsaWNr 26810\nIHJhem9y 26811\nIEZlc3Q= 26812\nIENoYXJhY3RlcnM= 26813\nIHdvcmRpbmc= 26814\nIHBvcHVsaXN0 26815\nIGNyaXRpY2l6aW5n 26816\nIG11c2U= 26817\ndmluZQ== 26818\nIGNhcmRib2FyZA== 26819\nIGtpbmRseQ== 26820\nIGZyaW5nZQ== 26821\nIFRoZWZ0 26822\naWN1bHR1cmFs 26823\nIGdvdmVybm9ycw== 26824\nIO+/ve+/ve+/ve+/vQ== 26825\nIDE2Mw== 26826\nIHRpbWVvdXQ= 26827\nIEF1dGg= 26828\nQ2hpbGRyZW4= 26829\nQVU= 26830\nIHJlZGVtcHRpb24= 26831\nIEFsZ2Vy 26832\nIDE5MTQ= 26833\nIHdhdmVk 26834\nIGFzdHJvbmF1dHM= 26835\nb2dyYW1z 26836\nIHN3YW1w 26837\nIEZpbm5pc2g= 26838\nIGNhbmRsZQ== 26839\nIHRvbm5lcw== 26840\ndXRt 26841\nIHJheQ== 26842\nIHNwdW4= 26843\nIGZlYXJmdWw= 26844\nYXJ0aWNsZXM= 26845\nIGNhdXM= 26846\nb3JpY2FsbHk= 26847\nIFJlcXVpcmVz 26848\nIEdvbA== 26849\nIHBvcGU= 26850\nIGluYXVndXJhbA== 26851\nIGdsZQ== 26852\nQURB 26853\nIElTSUw= 26854\nIE9mZmVuc2l2ZQ== 26855\nIHdhdGNoZG9n 26856\nIGJhbGNvbg== 26857\nZW50aXR5 26858\nIEhvbw== 26859\nIGdhbGxvbg== 26860\nQUND 26861\nIGRvdWJsaW5n 26862\nIGltcGxpY2F0aW9u 26863\nIFNpZ2h0 26864\nIGRvY3Ry 26865\nLS0tLS0tLQ== 26866\nIFxc 26867\nIG1hbHQ= 26868\nUm9sbA== 26869\nIOKJpQ== 26870\nIHJlY2Fw 26871\nYWRkaW5n 26872\ndWNlcw== 26873\nIEJlbmQ= 26874\nZmlndXJl 26875\nIHR1cmtleQ== 26876\nIHNvY2lldGFs 26877\nIFRpY2tldHM= 26878\nIGNvbW1lcmNpYWxseQ== 26879\nIHNwaWN5 26880\nIDIxNg== 26881\nIFJhbXA= 26882\nIHN1cGVyaW9yaXR5 26883\nw68= 26884\nIFRyYWNrZXI= 26885\nQ2FybA== 26886\nIENveQ== 26887\nIFBhdHJpb3Q= 26888\nIGNvbnN1bHRlZA== 26889\nIGxpc3Rpbmdz 26890\nIHNsZXc= 26891\ncmVlbnNob3Q= 26892\nIEdvbmU= 26893\nIFsuLi5d 26894\nMzA5 26895\nIGhvdHRlc3Q= 26896\n2LE= 26897\nIHJvY2t5 26898\nIERpYXo= 26899\nIG1hc3NhZ2U= 26900\nIHBhcmFseQ== 26901\nIHBvbnk= 26902\nQXo= 26903\nIGNhcnRyaWRnZQ== 26904\nIE5a 26905\nIHNuYWNr 26906\nIExhbWFy 26907\ncGxlbWVudA== 26908\nIExlc2xpZQ== 26909\nIG1hdGVy 26910\nIHNuaXBw 26911\nMjQ2 26912\nIGpvaW50bHk= 26913\nIEJyaXNiYW5l 26914\nIGlQb2Q= 26915\nIHB1bXBpbmc= 26916\nIGdvYXQ= 26917\nIFNoYXJvbg== 26918\nZWFsaW5n 26919\nIGNvcm9u 26920\nIGFub21hbA== 26921\ncmFoaW0= 26922\nIENvbm5lY3Rpb24= 26923\nIHNjdWxwdHVyZQ== 26924\nIHNjaGVkdWxpbmc= 26925\nIERhZGR5 26926\nYXRoaW5n 26927\nIGV5ZWJyb3dz 26928\nIGN1cnZlZA== 26929\nIHNlbnRpbWVudHM= 26930\nIGRyYWZ0aW5n 26931\nRHJvcA== 26932\nKFs= 26933\nIG5vbWluYWw= 26934\nIExlYWRlcnNoaXA= 26935\nIEdyb3c= 26936\nIDE3Ng== 26937\nIGNvbnN0cnVjdGl2ZQ== 26938\naXZhdGlvbg== 26939\nIGNvcnJ1cHRlZA== 26940\nZ2VyYWxk 26941\nIENyb3M= 26942\nIENoZXN0ZXI= 26943\nIExhcA== 26944\n44Gq 26945\nT1RI 26946\nREFUQQ== 26947\nIGFsbW9uZA== 26948\ncHJvYmFibHk= 26949\nSW1w 26950\nIGZlYXN0 26951\nIFdhcmNyYWZ0 26952\nRmxvcg== 26953\nIGNoZWNrcG9pbnQ= 26954\nIHRyYW5zY3JpcHRpb24= 26955\nIDIwNA== 26956\nIHR3ZWFrcw== 26957\nIHJlbGlldmU= 26958\nU2NpZW5jZQ== 26959\nIHBlcmZvcm1lcg== 26960\nWm9uZQ== 26961\nIHR1cm1vaWw= 26962\naWdhdGVk 26963\naGliaXQ= 26964\nIENhZmU= 26965\ndGhlbWVk 26966\nIGZsdW9y 26967\nYmVuY2g= 26968\nIGRlY29t 26969\nIFVudA== 26970\nIEJhcnJldHQ= 26971\nIEZhY3Rz 26972\nIHRhc3Rpbmc= 26973\nIFBUU0Q= 26974\nIFNlYWw= 26975\nIEp1ZGFpc20= 26976\nIER5bmFtaWM= 26977\nIENvcnM= 26978\nVmU= 26979\nIE1pbmc= 26980\nIFRyYW5zZm9ybQ== 26981\ndm9u 26982\nIERlZmVuZGVycw== 26983\nIFRhY3RpY2Fs 26984\nIFZvbg== 26985\nIFVuaXZlcnM= 26986\nIGRpc3RvcnRlZA== 26987\nIEJyZWF0aA== 26988\nPyci 26989\nIGFnb24= 26990\nIERlYWRseQ== 26991\nIGxhbg== 26992\nIEN5Y2xl 26993\nb3JuZWQ= 26994\nIHJlbGlhYmx5 26995\nIGdsb3I= 26996\nIE1vbmtleQ== 26997\n44Oh 26998\nIGFkcmVu 26999\nIG1pY3Jvd2F2ZQ== 27000\nIEFsYmFu 27001\naXJjcmFmdA== 27002\nZGlnaXQ= 27003\nc21hcnQ= 27004\nIERyZWFk 27005\nwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq8= 27006\ne3s= 27007\nIFJvY2hlc3Rlcg== 27008\nIHNpbXBsaWZpZWQ= 27009\nIGluZmxpY3RlZA== 27010\nIHRha2VvdmVy 27011\nIHlvdXJzZWx2ZXM= 27012\nYWRpdGlvbmFs 27013\nIG11c2N1bGFy 27014\nS1M= 27015\nIGluZ2Vu 27016\nVGF4 27017\nIEZlYXR1cmU= 27018\nMjc3 27019\nIGNydWM= 27020\nIGNyYXRl 27021\nIHVuaWRlbnRpZmllZA== 27022\nIGFjY2xhaW1lZA== 27023\nIE1hbmdh 27024\nIEZyYW5jZXM= 27025\nIE5lcGFs 27026\nIEdlcmFsZA== 27027\nIEt1d2FpdA== 27028\nIHNsYWlu 27029\nIEhlYg== 27030\nIEdva3U= 27031\n44Gu5g== 27032\nMjg2 27033\nTXJz 27034\nIENvZHk= 27035\nIFNhbmN0dWFyeQ== 27036\nMDE2 27037\nIGRpc21hbnQ= 27038\nIGRhdGFzZXQ= 27039\nIEhvbmQ= 27040\nYnVjaw== 27041\nIFBhdHRlcnNvbg== 27042\nIHBhbGV0dGU= 27043\nIEdE 27044\naWNvbA== 27045\nIExvZGdl 27046\nIHBsYW5ldGFyeQ== 27047\nYWtpbg== 27048\nIFJlZ2lzdGVyZWQ= 27049\nYWJ3ZQ== 27050\nIFBldGVyc2J1cmc= 27051\nIGhhaWxlZA== 27052\nIFBpZWNl 27053\nU2NoZQ== 27054\nIERPSg== 27055\nIGVudW1lcg== 27056\nMTgx 27057\nIE9ic2VydmVy 27058\nIEJvbGQ= 27059\nZm91bmRlZA== 27060\nY29tbWVyY2U= 27061\nIGV4cGxvaXRz 27062\nIEZpbmRpbmc= 27063\nVVJO 27064\nIFNuZQ== 27065\nIEFjaWQ= 27066\nYXlldHRl 27067\nIFZhbHVlcw== 27068\nIGRyYXN0aWM= 27069\nIGFyY2hpdGVjdHVyYWw= 27070\nICIu 27071\n15U= 27072\ndW1wZWQ= 27073\nIHdyYXBwaW5n 27074\nIHdpZG93 27075\nIFNsYXllcg== 27076\nbGFjZQ== 27077\nb25jZQ== 27078\nR2VybWFueQ== 27079\nYXZvaWQ= 27080\nIHRlbXBsZXM= 27081\nUEFS 27082\nw7Q= 27083\nIEx1Y2lmZXI= 27084\nIEZsaWNrcg== 27085\nbG92 27086\nZm9yY2Vz 27087\nIHNjb3V0aW5n 27088\nIGxvdWRlcg== 27089\ndGVzeQ== 27090\nIGJlZm9yZWhhbmQ= 27091\nxJM= 27092\nIE5lb24= 27093\nIFdvbA== 27094\nIFR5cGljYWxseQ== 27095\nIFBvbGl0aWNv 27096\nLSstKw== 27097\nIGJ1aWxkZXI= 27098\nIGRlcml2ZQ== 27099\nS2lsbA== 27100\nIHBva2Vy 27101\nIGFtYmlndW91cw== 27102\nIGxpZnRz 27103\nIGN5dA== 27104\nIHJpYnM= 27105\nb29kbGU= 27106\nIFNvdW5kcw== 27107\naGFpcg== 27108\nIFN5bmRyb21l 27109\ndGY= 27110\nIHByb3BvcnRpb25hbA== 27111\ndWlk 27112\nIHBlcnRhaW5pbmc= 27113\nIEtpbmRsZQ== 27114\nIE5lZ3Jv 27115\nIHJlaXRlcmF0ZWQ= 27116\nIFRvbmlnaHQ= 27117\nb3Rocw== 27118\nIENvcm5lbGw= 27119\nIG93aW5n 27120\nIDIwOA== 27121\nZWxmYXJl 27122\nb2NhdGluZw== 27123\nIEJpcmRz 27124\nU3Vic2NyaWJl 27125\nIGVzc2F5cw== 27126\nIGJ1cmRlbnM= 27127\nIGlsbHVzdHJhdGlvbnM= 27128\nYXJpb3Vz 27129\nRVJBTA== 27130\nIENhbGN1bA== 27131\nIHhlbg== 27132\nIExpbmtlZElu 27133\nIEp1bmc= 27134\nIHJlZGVzaWdu 27135\nQ29ubm9y 27136\nMjk2 27137\nIHJldmVyc2Fs 27138\nIEFkZWxhaWRl 27139\nIExM 27140\nIHNpbmtpbmc= 27141\nIGd1bQ== 27142\nVVNI 27143\nY2FwdA== 27144\nIEdyaW1t 27145\nIGZvb3RzdGVwcw== 27146\nIENCRA== 27147\naXNwZXJz 27148\nIHByb3Nl 27149\nV2VkbmVzZGF5 27150\nIE1vdmllcw== 27151\nZWRpbg== 27152\nIG92ZXJ0dXJuZWQ= 27153\nIGNvbnRlbnRpb3Vz 27154\nVVNC 27155\nfn5+fn5+fn5+fn5+fn5+fg== 27156\nIENvcHBlcg== 27157\nIHBvaW50bGVzcw== 27158\nTlY= 27159\ndmFsdWVz 27160\nb2xwaGlu 27161\nZGFpbg== 27162\nIGRlcG9zaXRlZA== 27163\nIEdX 27164\nIHByZWNlZGVk 27165\nIENsYQ== 27166\nIEdvbGVt 27167\nIE5pbQ== 27168\nIM6y 27169\nIEVuZ2luZWVycw== 27170\nbWlkZGxl 27171\nIGZsYXR0 27172\nb3BlcmF0aXZl 27173\nIGNvdW5jaWxz 27174\naW1iYWJ3ZQ== 27175\nZWxpbg== 27176\nIHN0cmVzc2Z1bA== 27177\nIExE 27178\nIHJlc2g= 27179\nbGFrZQ== 27180\nIHdoZWVsY2hhaXI= 27181\nIEFsdGVybmF0aXZl 27182\nIG9wdGltaXpl 27183\nb3BlcmF0aW9u 27184\nIHBlZWs= 27185\nIG9uZXNlbGY= 27186\naWdpbA== 27187\nIHRyYW5zaXRpb25z 27188\nb3BhdGh5 27189\nYmxhbms= 27190\nIDE2OQ== 27191\nMTcx 27192\nX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== 27193\nIGxhdW5kZXJpbmc= 27194\nRW5j 27195\nIERFQw== 27196\nIHdvcmtvdXRz 27197\nIHNwaWtlcw== 27198\nIGRpbm9zYXVycw== 27199\nIGRpc2NyaW1pbmF0b3J5 27200\nUG9vbA== 27201\nUmF0aGVy 27202\nMzg1 27203\nUk5B 27204\ndGVzdGVycw== 27205\nZXRv 27206\nIElkZW50aXR5 27207\nIHZlaW4= 27208\nIEJ1cnRvbg== 27209\nIGFyY2FkZQ== 27210\nNDIw 27211\nVWx0aW1hdGVseQ== 27212\nIFNhZGx5 27213\nw7A= 27214\ncGlsbA== 27215\nIGN1Ymlj 27216\nIFNwZWN0cnVt 27217\ndGhlc2U= 27218\nc3RhdGVz 27219\nIHVub2ZmaWNpYWw= 27220\naGF3a3M= 27221\nIEVWRVJZ 27222\nIHJhaW5ib3c= 27223\nIGluY2FyY2VyYXRpb24= 27224\nYW5kaW5n 27225\nIHN5bGw= 27226\nIEV2ZXJ0b24= 27227\nIDE3OQ== 27228\nIFNlcmJpYQ== 27229\nIDE4OQ== 27230\nbWV0ZXI= 27231\nIE1pY2tleQ== 27232\nIGFudGlxdQ== 27233\nIGZhY3R1YWw= 27234\nbmVjaw== 27235\nIE5hcmU= 27236\nbm9ybQ== 27237\nbXVzdA== 27238\nIGhpZ2h3YXlz 27239\nIGdsYW0= 27240\nIGRpdmlkaW5n 27241\nIFNxdWFkcm9u 27242\nIE1hcnRoYQ== 27243\nIGJpcnRocw== 27244\nQ292ZXI= 27245\nLy8vLy8vLy8vLy8vLy8vLw== 27246\nIFdvbmc= 27247\nUGhvdA== 27248\nIEFMUw== 27249\ncmlv 27250\nIE5vbmV0aGVsZXNz 27251\nIExlbW9u 27252\nIDIwNg== 27253\nIEVF 27254\nIGRlcml2YXRpdmU= 27255\nIFdXSUk= 27256\ndm90ZQ== 27257\nIHRoZXJlaW4= 27258\nIHNlcGFyYXRpbmc= 27259\nNDQ2 27260\nc3luYw== 27261\nIFN0cmVldHM= 27262\nIHJhdHQ= 27263\nIG11bmljaXBhbGl0eQ== 27264\nIFNob3J0bHk= 27265\nIG1vbms= 27266\nKSwi 27267\nIHNjcnVi 27268\nIG9wZXJhdGl2ZXM= 27269\nTmVpdGhlcg== 27270\nUGxhY2U= 27271\nIExpbWl0 27272\nRmVtYWxl 27273\nIEFjdG9y 27274\nQ2hhcmFjdGVy 27275\nIGNvbnN0aXR1dGVk 27276\nMzU3 27277\nIHByb3Rlc3RlZA== 27278\nIFN0cmF3 27279\nIEhlaWdodA== 27280\naWxkYQ== 27281\nIFR5cGg= 27282\nIGZsb29kcw== 27283\nIGNvc21ldGlj 27284\nV0FZ 27285\ncGVydHVyZQ== 27286\ndXBvbg== 27287\ndG9ucw== 27288\nZXNzaW5n 27289\nIFBvY2tldA== 27290\nIHJvb2Z0 27291\nIENhdWNhcw== 27292\nIGFudGlkZXByZXNz 27293\nIGluY29tcGF0aWJsZQ== 27294\nRUNE 27295\nIG9wZXJh 27296\nIENvbnRlc3Q= 27297\nIGdlbmVyYXRvcnM= 27298\nbGltZQ== 27299\nRGVmZW5zZQ== 27300\nMTk4Nw== 27301\nZm9ydW0= 27302\nIHNhdmFnZQ== 27303\nIEh1bmdhcmlhbg== 27304\nbno= 27305\nIG1ldGFsbGlj 27306\nIGV4cGVsbGVk 27307\nIHJlc2lkZW5jeQ== 27308\nIGRyZXNzZXM= 27309\nNjY2 27310\nIENsZW1lbnQ= 27311\nZmlyZXM= 27312\nQ2F0ZWdvcnk= 27313\nIGdlZWs= 27314\nYWxpcw== 27315\nIGNlbWV0ZXJ5 27316\nZWR1Y2F0ZWQ= 27317\nIGNyYXds 27318\nIFVuYWJsZQ== 27319\nIFR5c29u 27320\nYWtpcw== 27321\nIHBhcmRvbg== 27322\nIFdyYQ== 27323\nIHN0cmVuZ3RoZW5lZA== 27324\nIEZvcnM= 27325\nMzM1 27326\nIEhD 27327\nIE1vbmQ= 27328\nIHZpc3VhbHM= 27329\nIEJlYXRsZXM= 27330\nZXR0bGVtZW50 27331\nIO8= 27332\nZ3Jv 27333\nIGJhc2g= 27334\nIHBvb3Jlc3Q= 27335\nIGV4Y2Vs 27336\nIGFzcGlyYXRpb25z 27337\nIE11bmljaXA= 27338\nZW5zaWJsZQ== 27339\nIGNlcmVtb25pZXM= 27340\nIGludGltaWRhdGlvbg== 27341\nIENPTlRS 27342\nYmVjaw== 27343\nIEthcA== 27344\nYXN1 27345\nIHRyYWRlbWFya3M= 27346\nIFNldw== 27347\nIENvbXBldGl0aW9u 27348\nbmV0d29yaw== 27349\nIEFycmk= 27350\nIFRldA== 27351\nUm9hbWluZw== 27352\nV0M= 27353\nRGF0 27354\nIHNvYg== 27355\nIHBhaXJpbmc= 27356\nIG92ZXJkb3Nl 27357\nU0FZ 27358\nYWJlcg== 27359\nIHJldm9sdA== 27360\nIEZhaA== 27361\nYWN0aW5n 27362\nZXE= 27363\nZXN0YXRpb24= 27364\nRmlnaHQ= 27365\nIE1hcmtz 27366\nMjcz 27367\nIDE3OA== 27368\nUmF3 27369\n44GL 27370\nMzQ5 27371\nYmxvY2tz 27372\nIHZlcmdl 27373\nZXN0aW5l 27374\nIFBvZGVzdGE= 27375\nIGludmFzaXZl 27376\nIHByb2ZvdW5kbHk= 27377\nIEFv 27378\nZWFjaA== 27379\nIGxlc3Q= 27380\naW50ZXJwcmV0 27381\nIHNocmlua2luZw== 27382\nIGVycm9uZQ== 27383\nIGNoZWVz 27384\nbHlz 27385\nIEl2eQ== 27386\nIERpcmVjdG9yeQ== 27387\nIGhpbnRlZA== 27388\nVklDRQ== 27389\nIGNvbnRhY3Rpbmc= 27390\nIEdlbnQ= 27391\naGVp 27392\nIGxhYmVsaW5n 27393\nIG1lcmN1cnk= 27394\nIExpdGU= 27395\nIGV4cGlyZXM= 27396\nIGRlc3RhYmls 27397\ncml0aXM= 27398\nY3U= 27399\nIGZlYXRoZXJz 27400\nIHN0ZWVy 27401\nIHByb2dyYW1tZWQ= 27402\nIFZhZGVy 27403\nR29pbmc= 27404\nIEVsaW0= 27405\nIHlv 27406\nIE1pY2hl 27407\nIDIwMw== 27408\nIHNsZWV2ZXM= 27409\nIGJ1bGx5 27410\nIEh1bWFucw== 27411\nMzY4 27412\nIGNvbXByZXNz 27413\nIEJhbm5lcg== 27414\nQVJT 27415\nIGF3aGlsZQ== 27416\nIGNhbGli 27417\nIHNwb25zb3JzaGlw 27418\nIERpZmZpY3VsdHk= 27419\nIFBhcGVycw== 27420\nIGlkZW50aWZpZXI= 27421\nfS4= 27422\nIHlvZw== 27423\nIFNoaWE= 27424\nIGNsZWFudXA= 27425\nIHZpYmU= 27426\naW50cm9kdQ== 27427\naW1taW5n 27428\nQXVzdHJhbGlh 27429\nIG91dGxpbmVz 27430\nIFlvdXR1YmU= 27431\ndHJhaW4= 27432\nIE1ha2Vz 27433\nIGRlcG9ydGVk 27434\nIGNlbnRy 27435\nIER1Zw== 27436\nIEJvdWxkZXI= 27437\nIEJ1ZmZ5 27438\nIGluanVuY3Rpb24= 27439\nIEhhcmxleQ== 27440\nIEdyb3Vwcw== 27441\nIER1bWJsZWRvcmU= 27442\nIENsYXJh 27443\nICIt 27444\nIHNhY3JpZmljZWQ= 27445\nZXBo 27446\nU2hhZG93 27447\naWJsaW5n 27448\nIGZyZWVsYW5jZQ== 27449\nIGV2aWRlbnRseQ== 27450\ncGhhbA== 27451\nIHJldGFpbnM= 27452\nTWly 27453\nIGZpbml0ZQ== 27454\nZGFy 27455\nIENvdXM= 27456\nIHJlcGFpcmVk 27457\nIHBlcmlvZGlj 27458\nIGNoYW1waW9uc2hpcHM= 27459\nIGFzdGVyb2lk 27460\nYmxpbmQ= 27461\nIGV4cHJlc3NseQ== 27462\nIEFzdHJvcw== 27463\nIHNjYWxlZA== 27464\nIGdlb2dyYXBoaWNhbA== 27465\nIFJhcGlkcw== 27466\nRW5qb3k= 27467\nIGVsYXN0aWM= 27468\nIE1vaGFtZWQ= 27469\nTWFya2V0 27470\nYmVnaW4= 27471\nIGRpc2NvdmVycw== 27472\nIHRlbGVjb21tdW5pY2F0aW9ucw== 27473\nIHNjYW5uZXI= 27474\nIGVubGFyZ2U= 27475\nIHNoYXJrcw== 27476\nIHBzeWNoZWRlbA== 27477\nIFJvdWdl 27478\nIHNuYXBzaG90 27479\naXNpbmU= 27480\nWFA= 27481\nIHBlc3RpY2lkZXM= 27482\nIExTRA== 27483\nIERpc3RyaWJ1dGlvbg== 27484\ncmVhbGx5 27485\nIGRlZ3JhZGF0aW9u 27486\nIGRpc2d1aXNl 27487\nIGJpb20= 27488\nIEVYVA== 27489\nIGVxdWF0aW9ucw== 27490\nIGhhemFyZHM= 27491\nIENvbXBhcmVk 27492\nKSo= 27493\nIHZpcnR1ZXM= 27494\nIGVsZGVycw== 27495\nIGVuaGFuY2luZw== 27496\nIEFjcm9zcw== 27497\nZXJvcw== 27498\nYW5nbGluZw== 27499\nIGNvbWJ1c3Q= 27500\ndWNjaQ== 27501\nIGNvbmN1c3Npb24= 27502\nIGNvbnRyYWNlcHRpb24= 27503\nIEthbmc= 27504\nIGV4cHJlc3Nlcw== 27505\nIGF1eA== 27506\nIFBpb25l 27507\nIGV4aGliaXRz 27508\nRGVidWc= 27509\nT1RBTA== 27510\nIEFscmVhZHk= 27511\nIFdoZWVsZXI= 27512\nIGV4cGFuZHM= 27513\nPzo= 27514\nIHJlY29uY2lsaWF0aW9u 27515\nIHBpcmF0ZXM= 27516\nIHB1cnNl 27517\nIGRpc2NvdXJhZ2U= 27518\nIHNwZWN0YWNsZQ== 27519\nUmFuaw== 27520\nIHdyYXBz 27521\nIFRob3VnaHQ= 27522\nIGltcGVuZGluZw== 27523\nT3Bw 27524\nIEFuZ2xv 27525\nIEVVUg== 27526\nIHNjcmV3ZWQ= 27527\ncmV0Y2hlZA== 27528\nIGVuY291cmFnZW1lbnQ= 27529\nbW9kZWxz 27530\nIGNvbmZ1c2U= 27531\nbW1t 27532\nIFZpdGFtaW4= 27533\n4paR4paR 27534\nQ3J1 27535\nIGtuaWdodHM= 27536\nIGRpc2NhcmQ= 27537\nIGJpc2hvcHM= 27538\nIFdlYXI= 27539\nIEdhcnJldHQ= 27540\na2Fu 27541\n44Of 27542\nIG1hc2N1bGluZQ== 27543\nY2FwaXRhbA== 27544\nIEF1cw== 27545\nIGZhdGFsbHk= 27546\ndGhhbmtz 27547\nIEFV 27548\nIEd1dA== 27549\nMTIwMA== 27550\nIDAwMDAwMDAw 27551\nIHN1cnJvZw== 27552\nIEJJT1M= 27553\ncmFpdHM= 27554\nIFdhdHRz 27555\nIHJlc3VycmVjdGlvbg== 27556\nIEVsZWN0b3JhbA== 27557\nIFRpcHM= 27558\nNDAwMA== 27559\nIG51dHJpZW50 27560\nIGRlcGljdGluZw== 27561\nIHNwcmluaw== 27562\nIG11ZmY= 27563\nIExJTQ== 27564\nIFNhbXBsZQ== 27565\ncHNj 27566\naWJp 27567\nZ2VuZXJhdGVk 27568\nIHNwZWNpbWVucw== 27569\nIGRpc3NhdGlzZg== 27570\nIHRhaWxvcmVk 27571\nIGhvbGRpbmdz 27572\nIE1vbnRobHk= 27573\nIEVhdA== 27574\ncG9vbnM= 27575\nIG5lYw== 27576\nIENhZ2U= 27577\nIExvdHVz 27578\nIExhbnRlcm4= 27579\nIGZyb250aWVy 27580\nIHBlbnNpb25z 27581\nIGpva2Vk 27582\nIEhhcmR5 27583\nPS09LT0tPS0= 27584\ncmFkZQ== 27585\nVUlE 27586\nIHJhaWxz 27587\nIGVtaXQ= 27588\nIHNsYXRl 27589\nIHNtdWc= 27590\nIHNwaXQ= 27591\nIENhbGxz 27592\nIEphY29icw== 27593\nZmVhdA== 27594\nIFVF 27595\nIHJlc3RydWN0 27596\nIHJlZ2VuZXJhdGlvbg== 27597\nIGVuZXJnaWVz 27598\nIENvbm5vcg== 27599\nT0hO 27600\nIENoZWVzZQ== 27601\nIGdlcg== 27602\nIHJlc3VycmVjdA== 27603\nbWFuYWdlbWVudA== 27604\nTlc= 27605\nIHByZXNlbnRseQ== 27606\nIEJydWlucw== 27607\nTWVtYmVy 27608\nIE1hbmc= 27609\naWRhbg== 27610\nIGJvb3N0aW5n 27611\nd3lu 27612\nKy4= 27613\ncmVxdWlzaXRl 27614\nIE5ZUEQ= 27615\nIE1lZ2Fu 27616\nIENvbmRpdGlvbnM= 27617\nIHBpY3M= 27618\nbmVzaXVt 27619\nIFJhc2g= 27620\nIDE3NA== 27621\nIER1Y2tz 27622\nIGVtYnJv 27623\nenU= 27624\nb25pYW4= 27625\ncmVsaWdpb3Vz 27626\nIGNyYXo= 27627\nIEFDQQ== 27628\nIFp1Y2tlcg== 27629\nRU1B 27630\nIFByb3M= 27631\nV2VhcG9u 27632\nIEtub3g= 27633\nIEFyZHVpbm8= 27634\nIHN0b3Zl 27635\nIGhlYXZlbnM= 27636\nIFB1cmNoYXNl 27637\nIGhlcmQ= 27638\nIGZ1bmRyYWlzZXI= 27639\nRGlnaXRhbA== 27640\nNTAwMA== 27641\nIHByb3BvbmVudHM= 27642\nL+KAiw== 27643\nIGplbGx5 27644\nIFZpc2E= 27645\nIG1vbmtz 27646\nIGFkdmFuY2VtZW50 27647\nIFdlcg== 27648\nIDE4Nw== 27649\nZXVz 27650\nZXJ0aWxpdHk= 27651\nIGZldGFs 27652\nIDE5MzY= 27653\nTG8= 27654\nIG91dGZpdHM= 27655\nIHN0YWlyY2FzZQ== 27656\nYm9tYg== 27657\nIGN1c3RvbWl6ZWQ= 27658\nY2xhaXI= 27659\nVHJlZQ== 27660\nIG1hcHBlZA== 27661\nIENvbnNpZGVyaW5n 27662\nIFRvcnJlcw== 27663\nIG1ldGh5bA== 27664\nIGFwcHJveGltYXRl 27665\nIGRvb20= 27666\nIEhhbnNlbg== 27667\nIGNyb3Nzb3Zlcg== 27668\nIHN0YW5kYWxvbmU= 27669\n5Lw= 27670\nIGludml0ZXM= 27671\nIGdyYXZleWFyZA== 27672\nIGhw 27673\nRG9uYWxkVHJ1bXA= 27674\nIGVzY29ydA== 27675\nR2Fy 27676\nIHByZWRlY2Vzc29ycw== 27677\nIGhheQ== 27678\nIGVuenltZQ== 27679\nIFN0cmFpZ2h0 27680\ndmlzb3Jz 27681\nSW5n 27682\nYW5lb3VzbHk= 27683\nIEFwcGxpZWQ= 27684\nIGZlYw== 27685\nIER1cmFudA== 27686\nIG91dHNwb2tlbg== 27687\nb3Ji 27688\nIHplYWw= 27689\nIGRpc2dyYWNl 27690\nJyku 27691\nIENoZW5n 27692\nMjg5 27693\nIFJlbmE= 27694\nIFN1aWNpZGU= 27695\nMjk0 27696\nIG91dHJhZ2Vk 27697\nIE5ld21hbg== 27698\nIE52aWRpYQ== 27699\nIEFiZXI= 27700\nIEJlcnM= 27701\nIHJlY3JlYXRpb24= 27702\nV2luZG93 27703\nIERQ 27704\neGU= 27705\nIHBlZG9waA== 27706\nIGZhbGxvdXQ= 27707\nYW1ib28= 27708\nIHByZXNlbnRhdGlvbnM= 27709\nIEFwcHM= 27710\nIGh0bWw= 27711\nMzQ1 27712\nIFhYWA== 27713\nIHJ1YmJpbmc= 27714\nIExlYXRoZXI= 27715\nIGh1bWlkaXR5 27716\nc2V5cw== 27717\nZXN0YWJsaXNoZWQ= 27718\nIFVuaXRz 27719\nNjQ2 27720\nIHJlc3BlY3RhYmxl 27721\nQXV0bw== 27722\nIHRocml2aW5n 27723\nIElubm92YXRpb24= 27724\nYW5ncw== 27725\nRXh0cmE= 27726\ncmVndWxhdGlvbg== 27727\nMjk4 27728\ncGljaw== 27729\nRXhhbXBsZXM= 27730\nIENK 27731\nQXR0YWNr 27732\nIGRyYWNvbg== 27733\nTFQ= 27734\nIHN0aWNrZXI= 27735\ncmVycw== 27736\nIHN1bm55 27737\nSXNz 27738\ncmVndWxhdGVk 27739\nZGlt 27740\nIEFic3RyYWN0 27741\nIGh1c2JhbmRz 27742\nT2ZmaWNl 27743\nb21pbmF0aW9u 27744\naXRhcnM= 27745\nQU5HRQ== 27746\nYXNjYWw= 27747\nIEtyaXM= 27748\nIEluZmFudHJ5 27749\nIG1hbGY= 27750\nIEF0aGU= 27751\nIFJhbGx5 27752\nYmFsYW5jZWQ= 27753\nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u 27754\nT1VQ 27755\nIG1vbGVjdWxl 27756\nbWV0aWNz 27757\nIFNwbGl0 27758\nIEluc3RydWN0aW9ucw== 27759\nIE5pZ2h0cw== 27760\nY2FyZHM= 27761\nIHR1Zw== 27762\nIGNvbmU= 27763\n5a0= 27764\nIHR4 27765\nIERpc2N1c3Npb24= 27766\nIGNhdGFzdHJvcGhl 27767\ncHBl 27768\nZ2lv 27769\nIGNvbW11bmlzbQ== 27770\nIGhhbHRlZA== 27771\nIEd1YW50 27772\nY2xlYW4= 27773\nIFNjaGVk 27774\nIEthbnll 27775\nIHdhbmRlcg== 27776\nIFNlcmlvdXNseQ== 27777\nIDE4OA== 27778\nZW5uaWFs 27779\nZm9sbG93 27780\ncHJvZHVjdGl2ZQ== 27781\nIEZsb3c= 27782\nIFNhaWw= 27783\nIGNyYXc= 27784\nIHNpbXVsYXRpb25z 27785\nb3J1 27786\nYW5nbGVz 27787\nIE5vbGFu 27788\nIG1lbnN0cnU= 27789\nNDcw 27790\nIDIwNw== 27791\nYWph 27792\nIGNhc3VhbGx5 27793\nYm9hcmRpbmc= 27794\nIDIyMg== 27795\nb3Z5 27796\nIE51bWJlcnM= 27797\ndW1hdA== 27798\nT0U= 27799\nMjg3 27800\nIENsZW1zb24= 27801\nIGNlcnRz 27802\nIHNsaWQ= 27803\nIFRyaWJl 27804\nIHRvYXN0 27805\nIGZvcnR1bmVz 27806\nIGZhbHM= 27807\nIENvbW1pdHRlZXM= 27808\nIGdw 27809\nIGZpZXJ5 27810\nIE5ldHM= 27811\nIEFuaW1l 27812\nUGFja2FnZQ== 27813\nIENvbXBhcmU= 27814\nbGF1Z2h0ZXI= 27815\naW5mZWN0 27816\nIGF0cm9jaXRpZXM= 27817\nIGp1c3RpY2Vz 27818\nIGluc3VsdHM= 27819\nIFZlcm5vbg== 27820\nIHNoYWtlbg== 27821\nIHBlcnNvbmE= 27822\nZXN0YW1w 27823\nMzY3 27824\nYnJhaW4= 27825\nIGV4cGVyaW1lbnRpbmc= 27826\nS2Vu 27827\nIEVsZWN0cm9uaWNz 27828\nIDE2MQ== 27829\nZG9tYWlu 27830\nIGdyYXBoaWNhbA== 27831\nYmlzaG9w 27832\nIHdob3BwaW5n 27833\nIEV2YW5nZWw= 27834\nIGFkdmVydGlzZXJz 27835\nIFNwZWFy 27836\nIGJpZHM= 27837\nIGRlc3Ryb3lz 27838\ndXR6 27839\nIHVuZGVyc2M= 27840\nIEFERA== 27841\nIGFudHM= 27842\nIEN1bQ== 27843\naXBwbGVz 27844\nIEZpbGw= 27845\nIGdsYW5jZWQ= 27846\nIGluZGljdGVk 27847\nIEVmZg== 27848\nIG1pc2Nvbg== 27849\nIERlc2t0b3A= 27850\nIGFiaWRl 27851\n44OA 27852\nIElv 27853\nIENvdWw= 27854\nIGNhcHN1bGU= 27855\nIENocnlz 27856\nTU9O 27857\nIHVuZGVz 27858\nIElSQQ== 27859\nIGNpdGF0aW9u 27860\nIGRpY3RhdGU= 27861\nIE5ldHdvcmtz 27862\nIENvbmZsaWN0 27863\nIFN0dWZm 27864\neGE= 27865\naXNlYw== 27866\nIENoZW1pc3RyeQ== 27867\nIHF1YXJ0ZXJseQ== 27868\nV2lsbGlhbXM= 27869\nYW5hbg== 27870\nT3B0 27871\nIEFsZXhhbmRyaWE= 27872\nb3V0aGVhc3Rlcm4= 27873\nIFNwcmluZ2ZpZWxk 27874\nIEJsYWNrcw== 27875\nIGdlb2dyYXBoeQ== 27876\nMjQy 27877\nIHV0bW9zdA== 27878\nIEV4eG9u 27879\nYWJvdXRz 27880\nRVZB 27881\nIEVuYWJsZQ== 27882\nIEJhcnI= 27883\nIGRpc2FncmVlZA== 27884\nIEN5cHJ1cw== 27885\nIGRlbWVudGlh 27886\nIGxhYnM= 27887\nIHViaXF1aXRvdXM= 27888\nIExPVkU= 27889\nIGNvbnNvbGlkYXRlZA== 27890\nc3I= 27891\nIGNyZWFteQ== 27892\nIFRpbWJlcg== 27893\nUmVnYXJkbGVzcw== 27894\nIENlcnRpZmljYXRl 27895\nICIuLi4= 27896\nb2dlbm91cw== 27897\nQ2FwdGFpbg== 27898\nIGluc3VsdGluZw== 27899\nIFNvcm9z 27900\nIEluc3Ry 27901\nIEJ1bGdhcmlh 27902\nYmV0dGVy 27903\nIHN1Y2tpbmc= 27904\nIERhdmlkc29u 27905\nYXR6 27906\nIGNvbGxhdGVyYWw= 27907\nZ2lm 27908\nIHBsYWd1ZWQ= 27909\nIENhbmNlbA== 27910\nIEdhcmRuZXI= 27911\nUkI= 27912\nIHNpeHRlZW4= 27913\nUmVtb3Zl 27914\ndXJpc3RpYw== 27915\nY29vaw== 27916\nUm9k 27917\nIGNvbXByaXNpbmc= 27918\nZmxl 27919\nKeKAlA== 27920\nIFZpa2luZw== 27921\nZ3Jvd3Ro 27922\nYWdvbmFs 27923\nIHNyZg== 27924\nYWZldHk= 27925\nbW90 27926\nTmVhcmx5 27927\nc3Rvd24= 27928\nIEZhY3Rvcg== 27929\nIGF1dG9tb2JpbGU= 27930\nIHByb2NlZHVyYWw= 27931\nbWFzaw== 27932\nYW1waXJlcw== 27933\nIGRpc2FwcGVhcnM= 27934\namFi 27935\nMzE1 27936\nIDE5NTE= 27937\nbmVlZGVk 27938\nIGRhcmluZw== 27939\nbGVhZGVy 27940\nIHBvZGl1bQ== 27941\nIHVuaGVhbHRoeQ== 27942\nIG11bmQ= 27943\nIHB5cmFtaWQ= 27944\nb2NyZQ== 27945\nIGtpc3NlZA== 27946\nIGRyZWFtZWQ= 27947\nIEZhbnRhc3RpYw== 27948\nIEdseQ== 27949\n5Yo= 27950\nIGdyZWF0bmVzcw== 27951\nIHNwaWNlcw== 27952\nIG1ldHJvcG9saXRhbg== 27953\nIGNvbXB1bHM= 27954\naWV0cw== 27955\nMTAxNg== 27956\nIFNoYW0= 27957\nIFB5cg== 27958\nZmxpZXM= 27959\nIE1pZG5pZ2h0 27960\nIHN3YWxsb3dlZA== 27961\nIGdlbnJlcw== 27962\nIEx1Y2t5 27963\nIFJld2FyZHM= 27964\nIGRpc3BhdGNo 27965\nIElQQQ== 27966\nIEFwcGx5 27967\nIGF2ZW4= 27968\nYWxpdGllcw== 27969\nMzEy 27970\ndGhpbmdz 27971\nICgpLg== 27972\nIG1hdGVz 27973\nIFN6 27974\nIENPUA== 27975\nb2xhdGU= 27976\nT0ZG 27977\nIHJlY2hhcmdl 27978\nY2Fwcw== 27979\nIFlvcmtlcg== 27980\naWNvbmU= 27981\nIGdhbGF4aWVz 27982\naWxlYWtz 27983\nRGF2ZQ== 27984\nIFB1eno= 27985\nIENlbHRpYw== 27986\nIEFGQw== 27987\nMjc2 27988\nIFNvbnM= 27989\nIGFmZmlybWF0aXZl 27990\nSG9y 27991\nIHR1dG9yaWFscw== 27992\nIENJVFk= 27993\nIFJvc2E= 27994\nIEV4dGVuc2lvbg== 27995\nU2VyaWVz 27996\nIGZhdHM= 27997\nIHJhYg== 27998\nbGlz 27999\nIHVuaWM= 28000\nIGV2ZQ== 28001\nIFNwaW4= 28002\nIGFkdWx0aG9vZA== 28003\ndHlw 28004\nIHNlY3Rhcmlhbg== 28005\nIGNoZWNrb3V0 28006\nIEN5Y2w= 28007\nU2luZ2xl 28008\nIG1hcnR5cg== 28009\nIGNoaWxsaW5n 28010\nODg4 28011\nb3VmbA== 28012\nIF07 28013\nIGNvbmdlc3Rpb24= 28014\nbWs= 28015\nIFdoZXJlYXM= 28016\nIDE5Mzg= 28017\ndXJyZW5jaWVz 28018\nZXJpb24= 28019\nIGJvYXN0 28020\nIFBhdGllbnRz 28021\nIGNoYXA= 28022\nIEJE 28023\ncmVhbERvbmFsZFRydW1w 28024\nIGV4YW1pbmVz 28025\naG92 28026\nIHN0YXJ0bGluZw== 28027\nIEJhYnlsb24= 28028\nd2lk 28029\nb21ldw== 28030\nYnJhbmNl 28031\nIE9keXNzZXk= 28032\nd2ln 28033\nIHRvcmNo 28034\nIFZveA== 28035\nIE1veg== 28036\nIFRyb2xs 28037\nIEFucw== 28038\nU2ltaWxhcmx5 28039\nIEZ1bA== 28040\nMDA2 28041\nVW5sZXNz 28042\nIEFsb25l 28043\nc3RlYWQ= 28044\nIFB1Ymxpc2hlcg== 28045\ncmlnaHRz 28046\ndHU= 28047\nIERvZXNu 28048\nIHByb2Zlc3Npb25hbGx5 28049\nIGNsbw== 28050\naWN6 28051\nIHN0ZWFscw== 28052\nIOE= 28053\nMTk4Ng== 28054\nIHN0dXJkeQ== 28055\nIEpvaGFubg== 28056\nIG1lZGFscw== 28057\nIGZpbGluZ3M= 28058\nIEZyYXNlcg== 28059\nZG9uZQ== 28060\nIG11bHRpbmF0aW9uYWw= 28061\nIGZlZGVy 28062\nIHdvcnRobGVzcw== 28063\nIHBlc3Q= 28064\nWWVzdGVyZGF5 28065\nYW5raW5k 28066\nIGdheXM= 28067\nIGJvcm5l 28068\nIFBPUw== 28069\nUGljdHVyZQ== 28070\nIHBlcmNlbnRhZ2Vz 28071\nMjUx 28072\ncmFtZQ== 28073\nIHBvdGlvbnM= 28074\nQU1E 28075\nIExlYmFuZXNl 28076\nIHJhbmc= 28077\nIExTVQ== 28078\nb25ncw== 28079\nIHBlbmluc3VsYQ== 28080\nIENsYXVzZQ== 28081\nQUxL 28082\nb2hh 28083\nIE1hY0Jvb2s= 28084\nIHVuYW5pbW91cw== 28085\nIGxlbmRlcnM= 28086\nIGhhbmdz 28087\nIGZyYW5jaGlzZXM= 28088\nb3JlcnM= 28089\nIFVwZGF0ZXM= 28090\nIGlzb2xhdGU= 28091\nYW5kcm8= 28092\nU29vbg== 28093\nIGRpc3J1cHRpdmU= 28094\nIFN1cnZl 28095\nIHN0aXRjaGVz 28096\nIFNjb3Jw 28097\nIERvbWluaW9u 28098\nIHN1cHBseWluZw== 28099\nQXJn 28100\nIHR1cnJldA== 28101\nIEx1aw== 28102\nIGJyYWNrZXRz 28103\nKik= 28104\nIFJldm9sdXRpb25hcnk= 28105\nIEhvbmVzdA== 28106\nIG5vdGljaW5n 28107\nIFNoYW5ub24= 28108\nIGFmZm9yZGVk 28109\nIHRoYQ== 28110\nIEphbmV0 28111\nIS0t 28112\nIE5hcmVuZHJh 28113\nIFBsb3Q= 28114\nSG9s 28115\nc2V2ZXI= 28116\nZWVudGg= 28117\nIG9ic3RydWN0aW9u 28118\nIDEwMjQ= 28119\nc3RhZmY= 28120\namFz 28121\nb3JnZXQ= 28122\nc2NlbmVz 28123\nbGF1Z2hz 28124\nIEZhcmdv 28125\nY3JpbWU= 28126\nIG9yY2hlc3Ry 28127\nIGRlbGV0 28128\naWxpYXJ5 28129\ncmlldmVk 28130\nIG1pbGl0YXI= 28131\nIEdyZWVuZQ== 28132\n4peP 28133\n44Gm 28134\nIEd1YXJkcw== 28135\nIHVubGVhc2hlZA== 28136\nIFdlYmVy 28137\nIGFkanVzdGFibGU= 28138\nIGNhbGliZXI= 28139\nIG1vdGl2YXRpb25z 28140\nIMOg 28141\nbUFo 28142\nIExhbmth 28143\naGFuZGxl 28144\nIHBlbnQ= 28145\nIFJhdg== 28146\nIEFuZ3VsYXI= 28147\nIEthdQ== 28148\ndW1iaW5n 28149\nIHBoaWxhbnRocm9w 28150\nIGRlaHlk 28151\nIHRveGljaXR5 28152\nZWVy 28153\nIFlPUks= 28154\nd2l0eg== 28155\n5bw= 28156\nIElF 28157\nY29tbXVuaXR5 28158\nIEFI 28159\nIHJldGFsaQ== 28160\nIG1hc3NpdmVseQ== 28161\nIERhbmllbHM= 28162\nIERFTA== 28163\nIGNhcmNpbg== 28164\nVXJs 28165\nIHJvdXRpbmc= 28166\nIE5QQ3M= 28167\nIFJBRg== 28168\ncnljZQ== 28169\nIHdhaXZlZA== 28170\nIEd1YXRlbQ== 28171\nRXZlcnlib2R5 28172\nIGNvdmVuYW50 28173\nIDE3Mw== 28174\nIHJlbGF4aW5n 28175\nIHF1YXJ0 28176\nYWxtb3N0 28177\nIGd1YXJkZWQ= 28178\nIFNvbGRpZXJz 28179\nIFBMQVk= 28180\nIG91dGdvaW5n 28181\nTEFORA== 28182\nIHJld3JpdGU= 28183\nIE1PVg== 28184\nIEltcGVy 28185\nIFNvbHV0aW9u 28186\nIHBoZW5vbWVuYWw= 28187\nIGxvbmdldml0eQ== 28188\nIGltcGF0 28189\nIE5pc3Nhbg== 28190\naXJpZQ== 28191\nIG9kb3I= 28192\nIFphcg== 28193\nb2tz 28194\nIG1pbGl0aWFz 28195\nIFNQRUM= 28196\nIHRvbGVyYXRlZA== 28197\nYXJzZXI= 28198\nIEJyYWRmb3Jk 28199\nKyw= 28200\nIHN1cnJlYWw= 28201\nc2Y= 28202\nQ2FuYWRpYW4= 28203\nIHJlc2VtYmxhbmNl 28204\nIGNhcmJvaHlkcmF0ZQ== 28205\nVklFVw== 28206\nIGFjY2Vzc29yeQ== 28207\nbWVhbA== 28208\nbGFyZ2VzdA== 28209\naWVnZWw= 28210\nU29tZW9uZQ== 28211\nIHRvdWdoZXN0 28212\nb3Nv 28213\nIGZ1bm5lbA== 28214\nIGNvbmRlbW5hdGlvbg== 28215\nbHVlbnQ= 28216\nIHdpcmVk 28217\nIFN1bnNldA== 28218\nSmVzdXM= 28219\nIFBTVA== 28220\nIFBhZ2Vz 28221\nIFR5Y29vbg== 28222\nIFBG 28223\nIHNlbGVjdGlvbnM= 28224\nIOCk 28225\ncGFydGlzYW4= 28226\nIGhpZ2hz 28227\nIFJ1bmU= 28228\nIGNyYWZ0cw== 28229\nbGVhZA== 28230\nIFBhcmVudHM= 28231\nIHJlY2xhaW0= 28232\nZWtlcg== 28233\nIEFsbGllZA== 28234\nYWVwZXI= 28235\nIGxvb21pbmc= 28236\nIGJlbmVmaWNpYXJpZXM= 28237\nIEh1bGw= 28238\nU3R1ZGVudHM= 28239\nSmV3aXNo 28240\nZGo= 28241\nIHBhY3Q= 28242\ndGVtcGxhdGU= 28243\nIE9mZmljaWFscw== 28244\nIEJheWxvcg== 28245\nIGhlbXA= 28246\nIHlvdXRocw== 28247\nIExldmVscw== 28248\nIFhpYW8= 28249\nIENoZXM= 28250\nIGVuZGVhdm9y 28251\nIFJlbW92ZWQ= 28252\nIGhpcHBvY2FtcA== 28253\nSGVsbA== 28254\n44KK 28255\nODA1 28256\nIGRpbm9zYXVy 28257\nIFdyYXRo 28258\nIEluZG9uZXNpYW4= 28259\nIGNhbGN1bGF0b3I= 28260\nIERpY3Rpb25hcnk= 28261\nIDQyMA== 28262\nIE1BRw== 28263\nKF8= 28264\nISw= 28265\ndGFyaWFucw== 28266\nIHJlc3RyaWN0aW5n 28267\ncmFjdXNl 28268\nIHdlZWtkYXk= 28269\nT1VOVA== 28270\nIHNocnVnZ2Vk 28271\nbGVncm91bmQ= 28272\nIGJhbGQ= 28273\nIERvY3RvcnM= 28274\nIHRvdXRlZA== 28275\nIE1heHdlbGw= 28276\nIDIxNA== 28277\nIGRpcGxvbWF0 28278\nIHJlcHJlc3Npb24= 28279\nIGNvbnN0aXR1ZW5jeQ== 28280\ndmljZQ== 28281\ncmFua2Vk 28282\nIE5hcG9sZW9u 28283\nZ2FuZw== 28284\nIEZvcmV2ZXI= 28285\ndHVu 28286\nIGJ1bGI= 28287\nIFBEVA== 28288\nIENpc2Nv 28289\nVkVO 28290\nIHJlc3VtZWQ= 28291\nU3RldmVu 28292\nIE1hbml0b2Jh 28293\nIGZhYnVsb3Vz 28294\nIEFnZW50cw== 28295\nMTk4NA== 28296\nIGFtdXNpbmc= 28297\nIE15c3Rlcmllcw== 28298\nIG9ydGhvZG94 28299\nZmxvb3I= 28300\nIHF1ZXN0aW9ubmFpcmU= 28301\nIHBlbmV0cmF0ZQ== 28302\nIGZpbG1tYWtlcnM= 28303\nIFVuYw== 28304\nIHN0YW1wZWQ= 28305\nIHRoaXJ0ZWVu 28306\nIG91dGZpZWxk 28307\nIGZvcndhcmRlZA== 28308\nIGFwcHJh 28309\nIGFpZGVk 28310\ndHJ5 28311\nIHVuZm9jdXNlZA== 28312\nIExpeg== 28313\nIFdlbmR5 28314\nIFNjZW5l 28315\nQ2hhcmc= 28316\nIHJlamVjdHM= 28317\nIGxlZnRpc3Q= 28318\nIFByb3ZpZGVuY2U= 28319\nIEJyaWQ= 28320\ncmVnbg== 28321\nIHByb3BoZWN5 28322\nIExJVkU= 28323\nNDk5 28324\nIGZvcmdl 28325\nIEZNTA== 28326\nIGludHJpbnNpYw== 28327\nIEZyb2c= 28328\nIHdvbnQ= 28329\nIEhvbHQ= 28330\nIGZhbWVk 28331\nQ0xVUw== 28332\nYWVwZXJuaWNr 28333\nIEhhdGU= 28334\nIENheQ== 28335\nIHJlZ2lzdGVyaW5n 28336\nb3J0YWxpdHk= 28337\ncm9weQ== 28338\nb2NhbHlwdGlj 28339\nYWFu 28340\nbmF2 28341\nIGZhc2Npc3Q= 28342\nSUZJRUQ= 28343\nIGltcGxpY2F0ZWQ= 28344\nIFJlc29ydA== 28345\nIENoYW5kbGVy 28346\nIEJyaWNr 28347\nUGlu 28348\neXNj 28349\nVXNhZ2U= 28350\nIEhlbG0= 28351\ndXNyYQ== 28352\n4piF4piF 28353\nIEFiYmFz 28354\nIHVuYW5pbW91c2x5 28355\nIGtlZXBlcg== 28356\nIGFkZGljdGVk 28357\nPz8/ 28358\nIGhlbG1ldHM= 28359\nIGFudGlveGlk 28360\nYXBzZWQ= 28361\nODA4 28362\nZ2llbmU= 28363\nIHdhaXRz 28364\nIG1pbmlvbg== 28365\ncmF2ZWQ= 28366\nIFBvcnNjaGU= 28367\nIGRyZWFtaW5n 28368\nIDE3MQ== 28369\nIENhaW4= 28370\nIHVuZm9y 28371\nYXNzbw== 28372\nIENvbmZpZ3VyYXRpb24= 28373\na3Vu 28374\naGFyZHQ= 28375\nIG5lc3RlZA== 28376\nIExEUw== 28377\nTEVT 28378\nIHR5aW5n 28379\nZW5vcw== 28380\nIGN1ZQ== 28381\nIE1hcnF1 28382\nc2tpcnRz 28383\nIGNsaWNrZWQ= 28384\nIGV4cGlyYXRpb24= 28385\nIEFjY29yZGluZ2x5 28386\nIFdD 28387\nIGJsZXNzaW5ncw== 28388\nIGFkZGljdGl2ZQ== 28389\nIE5hcnI= 28390\neXg= 28391\nIEphZ3VhcnM= 28392\nIHJlbnRz 28393\nIFNpYmVy 28394\nIHRpcHBlZA== 28395\nb3Vzc2U= 28396\nIEZpdHpnZXJhbGQ= 28397\nIGhpZXJhcmNo 28398\nb3V0aW5l 28399\nIHdhdmVsZW5ndGg= 28400\nPi4= 28401\nY2hpZA== 28402\nIFByb2Nlc3Npbmc= 28403\nLys= 28404\ncmFua2luZw== 28405\nRWFzeQ== 28406\nIENvbnN0cnVjdA== 28407\nIHRldA== 28408\naW5zdXJlZA== 28409\nSFVE 28410\nIHF1b3Rpbmc= 28411\nIGNvbW11bmljYXRlZA== 28412\naW54 28413\nIGlubWF0ZQ== 28414\nIGVyZWN0ZWQ= 28415\nIEFic29sdXRlbHk= 28416\nIFN1cmVseQ== 28417\nIHVuaW0= 28418\nIFRocm9uZQ== 28419\naGVpZA== 28420\nIGNsYXdz 28421\nIHN1cGVyc3Rhcg== 28422\nIExlbm4= 28423\nIFdoaXM= 28424\nVWs= 28425\nYWJvbA== 28426\nIHNrZXQ= 28427\nIE5pZXQ= 28428\nIHBlcmtz 28429\nIGFmZmluaXR5 28430\nIG9wZW5pbmdz 28431\ncGhhc2lz 28432\nIGRpc2NyaW1pbmF0ZQ== 28433\nVGlw 28434\ndmM= 28435\nIGdyaW5kaW5n 28436\nIEplbm55 28437\nIGFzdGhtYQ== 28438\naG9sZXM= 28439\nIEhvbWVy 28440\nIHJlZ2lzdGVycw== 28441\nIEdsYWQ= 28442\nIGNyZWF0aW9ucw== 28443\nIGxpdGhpdW0= 28444\nIGFwcGxhdXNl 28445\ndW50aWw= 28446\nSnVzdGljZQ== 28447\nIFR1cmtz 28448\nIHNjYW5kYWxz 28449\nIGJha2U= 28450\ndGFuaw== 28451\nTWVjaA== 28452\nIE1lYW5z 28453\nIE1haWQ= 28454\nUmVwdWJsaWNhbnM= 28455\naXNhbA== 28456\nd2luZG93cw== 28457\nIFNhbnRvcw== 28458\nIHZlZ2V0YXRpb24= 28459\nMzM4 28460\ndHJp 28461\nIGZsdXg= 28462\naW5zZXJ0 28463\nIGNsYXJpZmllZA== 28464\nIG1vcnRn 28465\nIENoaW0= 28466\nIFRvcnQ= 28467\nIGRpc2NsYWlt 28468\nbWV0YWw= 28469\nIEFzaWRl 28470\nIGluZHVjdGlvbg== 28471\nIGluZmw= 28472\nIGF0aGVpc3Rz 28473\nYW1waA== 28474\nIGV0aGVy 28475\nIFZpdGFs 28476\nIEJ1aWx0 28477\nTWluZA== 28478\nIHdlYXBvbnJ5 28479\nU0VU 28480\nIDE4Ng== 28481\nYWRtaW4= 28482\nZ2Ft 28483\nY29udHJhY3Q= 28484\nYWZh 28485\nIGRlcml2YXRpdmVz 28486\nIHNuYWNrcw== 28487\nIGNodXJu 28488\nRWNvbm9t 28489\nIGNhcHBlZA== 28490\nIFVuZGVyc3RhbmRpbmc= 28491\nIEhlcnM= 28492\nIEl6 28493\nIGR1Y3Q= 28494\nSUVOVA== 28495\nYXVnaHR5 28496\nIOKclA== 28497\nIE5Q 28498\nIHNhaWxpbmc= 28499\nSW5pdGlhbGl6ZWQ= 28500\nIHRlZA== 28501\nIHJlYWN0b3Jz 28502\nIExvbWI= 28503\nIGNob2tl 28504\nIFdvcm0= 28505\nIGFkbWlyYXRpb24= 28506\nIHN3dW5n 28507\nZW5zaWJseQ== 28508\nIHJhc2g= 28509\nIEdvYWxz 28510\nIEltcG9ydGFudA== 28511\nU2hvdA== 28512\nIFJhcw== 28513\nIHRyYWluZXJz 28514\nIEJ1bg== 28515\nV29ya2luZw== 28516\nIGhhcm1lZA== 28517\nIFBhbmRvcmE= 28518\nIExURQ== 28519\nIG11c2hyb29t 28520\nIENIQVI= 28521\nIEZlZQ== 28522\nIE1veQ== 28523\nQm9ybg== 28524\nb2xpYmVyYWw= 28525\nIE1hcnRpYWw= 28526\nIGdlbnRsZW1lbg== 28527\nIGxpbmdlcmluZw== 28528\nT2ZmaWNpYWw= 28529\nIGdyYWZmaXRp 28530\nIE5hbWVz 28531\nRGVy 28532\nIHF1aW50 28533\naXN0cmF0ZQ== 28534\nYXplZXJh 28535\nIE5PVElDRQ== 28536\nIEZsb3JlbmNl 28537\nIHBheWFibGU= 28538\nIGRlcGljdHM= 28539\nIFNwZWNpZXM= 28540\nSGVhcnQ= 28541\n4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 28542\nIGVuY2xvc2Vk 28543\nSW5jcmVhc2Vz 28544\nRGFpbHk= 28545\nIExpcw== 28546\nIGVuYWN0bWVudA== 28547\nIEJhY29u 28548\nIFN0ZWVsZQ== 28549\nZGVtYW5k 28550\nIDE4Mw== 28551\nIG1vdXRocw== 28552\nIHN0cmFuZGVk 28553\nIGVuaGFuY2VtZW50 28554\nMDEx 28555\nIFdoYXRz 28556\nIGhlYWxlZA== 28557\nZW55 28558\nIFJhYg== 28559\nIDM0MA== 28560\nIExhYnlyaW50aA== 28561\ncm9hY2g= 28562\nIFlvc2g= 28563\nIENsaXBwZXJz 28564\nIGNvbmNlcnRz 28565\nSW50ZXJuZXQ= 28566\nMzU1 28567\nIHN0aWNrZXJz 28568\nIHRlcm1lZA== 28569\nIEF4ZQ== 28570\nIGdyYW5kcGFyZW50cw== 28571\nRnJhbmNl 28572\nIENsaW0= 28573\nIFVo 28574\ndWxpYw== 28575\nIHRocmlsbA== 28576\nY2VudHJpYw== 28577\nIE92ZXJ2aWV3 28578\nIENvbmR1Y3Q= 28579\nIHN1YnN0YW50aXZl 28580\nIDE4Mg== 28581\nbXVy 28582\nIHN0cmF5 28583\nIENvZmY= 28584\nIHJlcGV0aXRpdmU= 28585\nIEZvcmdvdHRlbg== 28586\nIHF1YWxpZmljYXRpb24= 28587\nZXdpdG5lc3M= 28588\nIFppbWJhYndl 28589\nIHNpbXVsYXRlZA== 28590\nIEpE 28591\nMjUz 28592\nIFdhcmU= 28593\nIHVuc2M= 28594\nVGltZXM= 28595\nIHN1bW1vbnM= 28596\nIGRpc2Nvbm5lY3RlZA== 28597\nIDE4NA== 28598\nY2l1cw== 28599\nIEd1amFy 28600\nb2RrYQ== 28601\nIGVyYXNl 28602\nIFRvYmFjY28= 28603\nZWxlY3RlZA== 28604\nIHVuY29udA== 28605\nIFNoZXBhcmQ= 28606\nIExhbXA= 28607\nIGFsZXJ0ZWQ= 28608\nIG9wZXJhdGl2ZQ== 28609\nYXJuYQ== 28610\ndWludA== 28611\nIG5lZ2xpZ2VuY2U= 28612\nYWNlbWVudHM= 28613\nIHN1cHJh 28614\nIHByZXZhaWw= 28615\nIFNoYXJr 28616\nIGJlbHRz 28617\n44Gr 28618\nIHRpZ2h0ZXI= 28619\nRW5naW5lZXJz 28620\nIGluYWN0aXZl 28621\nIGV4cG9uZW50 28622\nIFdpbGxpZQ== 28623\nYXBsZXM= 28624\nIGhlaXI= 28625\nIEhpdHM= 28626\naWFubg== 28627\nIFNheXM= 28628\nIGN1cnJlbnRz 28629\nIEJlbmdhbA== 28630\nIGFyaXN0 28631\nQnVmZmVy 28632\nIGJyZWV6ZQ== 28633\nIFdlc2xleQ== 28634\nQ29sYQ== 28635\nIHByb25vdW4= 28636\nIGRlZWQ= 28637\nIEtsaW5n 28638\nIG9mdA== 28639\nIGluZmxpY3Q= 28640\nIHB1bmlzaGluZw== 28641\nIG5t 28642\naWt1 28643\nT0RVQ1Q= 28644\nMDE0 28645\nIHN1YnNpZHk= 28646\nIERFQQ== 28647\nIEhlcmJlcnQ= 28648\nIEphbA== 28649\nQmFuaw== 28650\nIGRlZmVycmVk 28651\nIHNoaXBtZW50 28652\nQm90dA== 28653\nIGFsbGU= 28654\nYmVhcmluZw== 28655\nSFRNTA== 28656\nT2ZmbGluZQ== 28657\nIDIxMw== 28658\nIHNjcm9sbGluZw== 28659\nIHNjYW5uZWQ= 28660\nIExpYnlhbg== 28661\nIFRPUA== 28662\nY2hyb20= 28663\nZHQ= 28664\nY29sdW1u 28665\nUHN5TmV0TWVzc2FnZQ== 28666\nWmVybw== 28667\nIHRvcnNv 28668\nMDUw 28669\n4pWQ 28670\nIGltcGVyc29u 28671\nIFNjaHdhcnR6 28672\ndWRpYw== 28673\nIHBpc3NlZA== 28674\nIFNhcHA= 28675\nMjU3 28676\nIElTUHM= 28677\nb2ds 28678\nIHN1cGVydmlzZWQ= 28679\nIGFkb2xlc2NlbnQ= 28680\nIGF0dGFpbmVk 28681\nIERlbGl2ZXJ5 28682\nIEJ1bm55 28683\nIDE5Mzc= 28684\nIG1pbmlhdHVyZQ== 28685\nIG9z 28686\nIDM3MA== 28687\nNjA4 28688\nIE1vdXJpbmhv 28689\nIGlubmF0ZQ== 28690\nIHRlbXBv 28691\nIE5N 28692\nIEZhbGxlbg== 28693\nMDA5 28694\nIHByb3ZvY2F0aXZl 28695\nU3RyZWFtZXI= 28696\nIEJlbmVkaWN0 28697\nIEJvbHNoZQ== 28698\nIHR1cnRsZQ== 28699\nIFBDQg== 28700\nIEVxdWFs 28701\nRGlyZWN0b3I= 28702\nIFJlbmQ= 28703\nIGZsdWlkcw== 28704\nQXV0aG9yaXRpZXM= 28705\nIGNvdXNpbnM= 28706\ncmVxdWVuY3k= 28707\nIE5laWdoYm9y 28708\nc2V0cw== 28709\nc2hhcmVk 28710\nQ2hhcmxlcw== 28711\ncGFzc3dvcmQ= 28712\nIGdlYXJz 28713\nIDIxMQ== 28714\nIEhhcmR3YXJl 28715\ncmlrYQ== 28716\nIHVwc3RyZWFt 28717\nSG9t 28718\nIGRpc3Byb3BvcnRpb25hdGVseQ== 28719\naXZpdGllcw== 28720\nIHVuZGVmaW5lZA== 28721\nIGVsZWN0cm9ucw== 28722\nIGNvbW1lbW9y 28723\nRXZlbnR1YWxseQ== 28724\nID48 28725\nIGlycmVzcG9uc2libGU= 28726\nMjE4 28727\nIFJlbGVhc2Vk 28728\nIE9WRVI= 28729\nIElHTg== 28730\nIEJyZWFk 28731\nc3RlbGxhcg== 28732\nIFNhZ2U= 28733\ndHRlZA== 28734\nZGFtYWdl 28735\nZWRpdGlvbg== 28736\nIFByZWM= 28737\nIGxpbWU= 28738\nIGNvbmZpbmVtZW50 28739\nIGNhbG9yaWU= 28740\nd2VhcG9u 28741\nIGRpZmZlcmluZw== 28742\nIFNpbmE= 28743\nbXlz 28744\nYW1k 28745\nIGludHJpY2F0ZQ== 28746\na2s= 28747\nIFBBVA== 28748\nw6Nv 28749\nc3RvbmVz 28750\nbGlua3M= 28751\nIHJhbmNo 28752\nU2VtaXRpYw== 28753\nIGRpZmZlcmVudGlhdGU= 28754\nIFNpbmdlcg== 28755\nb2NjdXBpZWQ= 28756\nIGZvcnRyZXNz 28757\nY21k 28758\nIGludGVyY2VwdGlvbg== 28759\nIEFua2FyYQ== 28760\nIHJlcHQ= 28761\nIFNvbGl0YWlyZQ== 28762\nIHJlbWFrZQ== 28763\ncHJlZA== 28764\nIGRhcmVk 28765\nYXV0aW9ucw== 28766\nIEJBQ0s= 28767\nUnVubmluZw== 28768\nIGRlYnVnZ2luZw== 28769\nIGdyYXBocw== 28770\nMzk5 28771\nIE5pZ2Vs 28772\nIGJ1bg== 28773\nIHBpbGxvdw== 28774\nIHByb2dyZXNzZWQ= 28775\nZmFzaGlvbmVk 28776\nIG9iZWRpZW5jZQ== 28777\nRVJO 28778\nIHJlaGVhcnM= 28779\nQ2VsbA== 28780\ndGw= 28781\nU2hlcg== 28782\nIGhlcmFsZA== 28783\nIFBheW1lbnQ= 28784\nIENvcnk= 28785\nIERlcHQ= 28786\nIHJlcGVudA== 28787\nIFdlYWs= 28788\ndWNrbGFuZA== 28789\nIHBsZWFzaW5n 28790\nIHNob3J0YWdlcw== 28791\nIGp1cm9ycw== 28792\nIEthYg== 28793\ncXFh 28794\nQW50aQ== 28795\nIHdvdw== 28796\nIFJDTVA= 28797\nIHRzdW4= 28798\nIFNpYw== 28799\nIGNvbXByaXNlcw== 28800\nIHNwaWVz 28801\nIHByZWNpbmN0 28802\nbnU= 28803\nIHVyZ2Vz 28804\nIHRpbWVk 28805\nIHN0cmlwZXM= 28806\nIEJvb3Rz 28807\nIHllbg== 28808\nQWR2YW5jZWQ= 28809\nIGRpc2NyZXRl 28810\nIEFyY2hhbmdlbA== 28811\nZW1wbG95bWVudA== 28812\nRGlmZg== 28813\nIG1vbnVtZW50cw== 28814\nIDIwOQ== 28815\nd29ya2Vy 28816\nIDE5Ng== 28817\nIEln 28818\ndXR0ZXJzdG9jaw== 28819\nVFBT 28820\nSmFj 28821\nIGhvbWVsZXNzbmVzcw== 28822\nIGNvbW1lbnRhdG9y 28823\nIHJhY2lhbGx5 28824\nZmluZw== 28825\nc2VlZA== 28826\nRWxl 28827\nZWxsYXRpb24= 28828\nIGV0aGFub2w= 28829\nIHBhcmlzaA== 28830\nIERvbmc= 28831\nIEF3YWtlbmluZw== 28832\nIGRldmlhdGlvbg== 28833\nIEJlYXJpbmc= 28834\nIFRzdWs= 28835\nIHJlY2Vzcw== 28836\nIGx5bXBo 28837\nIENhbm5hYmlz 28838\n5Zw= 28839\nIE5FV1M= 28840\nIGRyYQ== 28841\nIFN0ZWZhbg== 28842\nIFdyb25n 28843\nIFNBTQ== 28844\nIGxvb3NlbHk= 28845\nIGludGVycHJldGVy 28846\nIFBsYWlu 28847\nR292ZXJubWVudA== 28848\nIGJpZ290cnk= 28849\nIGdyZW5hZGVz 28850\nYXZleg== 28851\ncGljdHVyZWQ= 28852\nIG1hbmRhdGVk 28853\nIE1vbms= 28854\nIFBlZHJv 28855\nIGxhdmE= 28856\nMjc0 28857\nIGN5bmljYWw= 28858\nIFNjcm9sbHM= 28859\nbG9ja3M= 28860\nTXA= 28861\nIGNvbmdyZWdhdGlvbg== 28862\nb3JuaW5ncw== 28863\ncGhpbA== 28864\nIEliaWQ= 28865\nIGZlcnY= 28866\nIGRpc2FwcGVhcmluZw== 28867\nIGFycm9nYW50 28868\nc3lu 28869\nIE1hdmVy 28870\nIFN1aXQ= 28871\nMjQx 28872\nIGFiYnJl 28873\nYWNrZXJz 28874\nUGE= 28875\nIFllbA== 28876\nV2hlbmV2ZXI= 28877\nIDIzNQ== 28878\nIFZpbmU= 28879\nIEFuYXQ= 28880\nIGV4dGluY3Q= 28881\nTEVU 28882\nIGV4ZWN1dGFibGU= 28883\nVkVSUw== 28884\nb3hpZGU= 28885\nRE5B 28886\nIFByZWw= 28887\nIHJlc2VudG1lbnQ= 28888\nIGNvbXByaXNl 28889\nIEF2aXY= 28890\nIGludGVyY2VwdGlvbnM= 28891\nIHByb2xpZmlj 28892\nSU5B 28893\nIEVyaW4= 28894\ndGhvdWdodA== 28895\nMjE5 28896\nIFBzeWNoaWF0cnk= 28897\ndW5reQ== 28898\nY2hlbWlzdA== 28899\nSG8= 28900\nIE1jQ295 28901\nIGJyaWNrcw== 28902\nTG9z 28903\ncmlseQ== 28904\nIFVTU1I= 28905\nIHJ1ZA== 28906\nIGxhdWQ= 28907\nIFdpc2U= 28908\nIEVtZXJhbGQ= 28909\nIHJldml2ZWQ= 28910\nIGRhbW5lZA== 28911\nIFJlcGFpcg== 28912\naWRlbQ== 28913\nY3RpY2E= 28914\nIHBhdHJpYXJjaA== 28915\nIE51cnM= 28916\nbWVn 28917\nIGNoZWFwZXN0 28918\ncmVlbWVudHM= 28919\nZW1wdHk= 28920\nIENlbGVicg== 28921\nIGRlcHJpdmF0aW9u 28922\nY2hhbnRlZA== 28923\nIFRodW1ibmFpbHM= 28924\nRW5lcmd5 28925\nIEV0aGFu 28926\nIFFpbmc= 28927\nIG9wcG9zZXM= 28928\nV0lORA== 28929\ndmlr 28930\nIE1hdQ== 28931\nIFNVQg== 28932\nNjY3 28933\nR1JF 28934\nIFZvbHVudGU= 28935\nbnRvbg== 28936\nQ29vaw== 28937\n5ZA= 28938\nZXNxdWU= 28939\nIHBsdW1tZXQ= 28940\nIHN1aW5n 28941\nIHByb25vdW5jZQ== 28942\nIHJlc2lzdGluZw== 28943\nIEZpc2hpbmc= 28944\nIFRyaWFscw== 28945\nIHllbGw= 28946\nIDMxMA== 28947\nIGluZHVjdA== 28948\nIHBlcnNvbmFsaXplZA== 28949\nb2Z0ZW4= 28950\nUmVi 28951\nRU1CRVI= 28952\nIHZpZXdwb2ludA== 28953\nIGV4aXN0ZW50aWFs 28954\nKCkp 28955\ncmVtb3Zl 28956\nTUVOVFM= 28957\nbGFzc2Vz 28958\nIGV2YXBvcg== 28959\nIGFpc2xl 28960\nbWV0YQ== 28961\nIHJlZmxlY3RpdmU= 28962\nIGVudGl0bGVtZW50 28963\nIGRldmlzZWQ= 28964\nbXVzaWM= 28965\nYXNjYWRl 28966\nIHdpbmRpbmc= 28967\nb2Zmc2V0 28968\nIGFjY2Vzc2liaWxpdHk= 28969\na2VyZWQ= 28970\nQmV0dGVy 28971\nIEpvaG5zdG9u 28972\ndGhpbmtpbmc= 28973\nU25vdw== 28974\nIENyb2F0aWE= 28975\nIEF0b21pYw== 28976\nMjcx 28977\nMzQ4 28978\nIHRleHRib29r 28979\nIFNpeHRo 28980\nINin2YQ= 28981\nIHNsaWRlcg== 28982\nIEJ1cmdlcg== 28983\nYm9s 28984\nU3luYw== 28985\nIGdyYW5kY2hpbGRyZW4= 28986\nIGNlcnY= 28987\nKyk= 28988\nIGV0ZXJuaXR5 28989\nIHR3ZWV0aW5n 28990\nIHNwZWN1bGF0aXZl 28991\nIHBpdm90YWw= 28992\nIFdQ 28993\nIFRFUg== 28994\neW5hbWlj 28995\nIHVwbA== 28996\nIENhdHM= 28997\ncGVyaGFwcw== 28998\nIGNsYXNzbWF0ZXM= 28999\nIGJsYXRhbnQ= 29000\nJy0= 29001\nIGxha2g= 29002\nYW50aW5l 29003\nIEJvcmc= 29004\naW9t 29005\nLyg= 29006\nIEF0aGxldGlj 29007\nIHNhcg== 29008\nT1RB 29009\nIEhvZmZtYW4= 29010\nTmV2ZXJ0aGVsZXNz 29011\nIGFkb3JhYmxl 29012\nIHNwYXduZWQ= 29013\nQXNzb2NpYXRlZA== 29014\nIERvbWVzdGlj 29015\nIGltcGxhbnQ= 29016\nIEx1eGVt 29017\nIEtlbnM= 29018\nIHB1bXBz 29019\nIFNBVA== 29020\nQXR0cmlidXRlcw== 29021\nNTA5 29022\nYXZvdXI= 29023\nIGNlbnRyYWxpemVk 29024\nIFRO 29025\nIGZyZXNobHk= 29026\nIEFjaGlldmU= 29027\nIG91dHNpZGVycw== 29028\naGVydHk= 29029\nIFJlZQ== 29030\nIFRvd2Vycw== 29031\nIERhcnQ= 29032\nYWthYmxl 29033\nIG1w 29034\nIEhlYXZlbmx5 29035\nIHJpcGU= 29036\nIENhcm9saW5l 29037\ncnlhbg== 29038\nIGNsYXNzaWNz 29039\nIHJldGlyaW5n 29040\nIDIyOA== 29041\nIGFo 29042\nIGRlYWxpbmdz 29043\nIHB1bmNoaW5n 29044\nIENoYXBtYW4= 29045\nT3B0aW9ucw== 29046\nbWF4d2VsbA== 29047\ndm9sdW1l 29048\nIHN0YWw= 29049\nIGV4cG9ydGVk 29050\nIFF1aXRl 29051\nIG51bWVyaWNhbA== 29052\nQnVybg== 29053\nRmFjdA== 29054\nIEtleXN0b25l 29055\nIHRyZW5kaW5n 29056\nIGFsdGVyaW5n 29057\nIEFmcmljYW5z 29058\nNDc4 29059\nIE1O 29060\nIEtub2Nr 29061\nIHRlbXB0YXRpb24= 29062\nIHByZXN0aWdl 29063\nT3ZlcnZpZXc= 29064\nIFRyYWRpdGlvbmFs 29065\nIEJhaHJhaW4= 29066\nUHJpdmF0ZQ== 29067\nIEhPVQ== 29068\nIGJhcnI= 29069\nIFRhdA== 29070\nQ3ViZQ== 29071\nVVNE 29072\nIEdyYW5kZQ== 29073\nIEdhdA== 29074\nIEZsbw== 29075\nIHJlc2lkZXM= 29076\nIGluZGVj 29077\ndm9sZW50 29078\nIHBlcnBldHVhbA== 29079\ndWJlcw== 29080\nIHdvcmxkdmlldw== 29081\nIFF1YW50dW0= 29082\nIGZpbHRlcmVk 29083\nIGVuc3U= 29084\nb3JnZXRvd24= 29085\nRVJTT04= 29086\nIE1pbGQ= 29087\nMzc5 29088\nT1RU 29089\nw6U= 29090\nIHZpdGFtaW5z 29091\nIHJpYmJvbg== 29092\nIHNpbmNlcmVseQ== 29093\nIEhpbg== 29094\nIGVpZ2h0ZWVu 29095\nIGNvbnRyYWRpY3Rvcnk= 29096\nIGdsYXJpbmc= 29097\nIGV4cGVjdGFuY3k= 29098\nIGNvbnNwaXI= 29099\nIG1vbnN0cm91cw== 29100\nIDM4MA== 29101\ncmVjaQ== 29102\nIGhhbmRpYw== 29103\nIHB1bXBlZA== 29104\nIGluZGljYXRpdmU= 29105\nIHJhcHA= 29106\nIGF2YWls 29107\nIExFR08= 29108\nIE1hcmlqdWFuYQ== 29109\nMTk4NQ== 29110\nZXJ0b24= 29111\nIHR3ZW50aWV0aA== 29112\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 29113\nIFN3YW1w 29114\nIHZhbHVhdGlvbg== 29115\nIGFmZmlsaWF0ZXM= 29116\nYWRqdXN0ZWQ= 29117\nIEZhY2lsaXR5 29118\nMjYy 29119\nIGVuenltZXM= 29120\naXR1ZGluYWw= 29121\nIGltcHJpbnQ= 29122\nU2l0ZQ== 29123\nIGluc3RhbGxlcg== 29124\nIFRSQQ== 29125\nbW9sb2d5 29126\nbGluZWFy 29127\nIENvbGxlY3RpdmU= 29128\naWdhdGluZw== 29129\nIFRva2Vu 29130\nIHNwZWN1bGF0ZWQ= 29131\nS04= 29132\nIENseQ== 29133\nb3JpdHk= 29134\nIGRlZmVy 29135\nIGluc3BlY3RvcnM= 29136\nYXBwcm92ZWQ= 29137\nUk0= 29138\nIFN1bnM= 29139\nIGluZm9ybWluZw== 29140\nIFN5cmFjdXNl 29141\naWJsaQ== 29142\nNzY1 29143\nIGdsb3Zl 29144\nIGF1dGhvcml6ZQ== 29145\n4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm 29146\nIENydWlzZQ== 29147\nIGNvbnRyYWN0aW5n 29148\nc2hlbGw= 29149\nSUZF 29150\nIEpld2Vs 29151\ncHJhY3Q= 29152\nIFBob3Rvc2hvcA== 29153\nIEtub3dpbmc= 29154\naGFybQ== 29155\nIGF0dHJhY3Rpb25z 29156\nYWRhbg== 29157\nZXR1cw== 29158\nMDE4 29159\nd2FnZW4= 29160\nQWx0 29161\nIG11bHRpcGx5 29162\nIGVxdWlsaWJyaXVt 29163\nOns= 29164\nIEZpZ2h0ZXJz 29165\nIEVkZ2Fy 29166\nIGZvdXJ0ZWVu 29167\nR292ZXJu 29168\nIG1pc3VzZQ== 29169\nIGFidXNpbmc= 29170\nIGFuY2VzdHJ5 29171\ncmFtZXI= 29172\nNjQ0 29173\nIHdvcm1z 29174\nIHRoaWNrZXI= 29175\nIENvbWJpbmU= 29176\nIHBlYXNhbnRz 29177\nIHZpbmQ= 29178\nIGNvbnF1ZXN0 29179\nIG1vY2tlZA== 29180\nIGNpbm5hbW9u 29181\nIENhbGQ= 29182\nIEdhbGx1cA== 29183\nIGF2b2lkYW5jZQ== 29184\nIGluY2FybmF0aW9u 29185\nIFN0cmF0 29186\nIHRhc3RlZA== 29187\nZW50YQ== 29188\nIE5lYWw= 29189\ncGFyZWQ= 29190\nIHRlcm1pbm9sb2d5 29191\namVjdGlvbg== 29192\nU2NpZW50aXN0cw== 29193\nIElOUw== 29194\nIERlZQ== 29195\nIGRpcmVjdG9yaWVz 29196\nUm9hZA== 29197\nIFNoYXA= 29198\nYnJpZ2h0 29199\nIERpcmVjdG9ycw== 29200\nIENvbHVtbg== 29201\nIGJvYg== 29202\nIHByZWZlcmFibHk= 29203\nIGdsaXRjaA== 29204\nZnVydA== 29205\nIGVn 29206\naWRpcw== 29207\nQ0JD 29208\nIHN1cnJlbmRlcmVk 29209\nIHRlc3RhbWVudA== 29210\nMzM2 29211\ndWdnZXN0 29212\nIE5pbA== 29213\nYW5vdGhlcg== 29214\nIHBhdGhldGlj 29215\nIERvbm5h 29216\nIDIxOA== 29217\nIEF2ZXJ5 29218\nIHdoaXNrZXk= 29219\nIGZpeHR1cmU= 29220\nIENvbnF1ZXN0 29221\nIGJldHM= 29222\nT2Nj 29223\nIExlaWNlc3Rlcg== 29224\nXS4i 29225\nICkpOw== 29226\nIGZsYXNoZXM= 29227\nNDU2 29228\nIG1hc2tlZA== 29229\nZ2VicmE= 29230\nIGNvbXB1dGVk 29231\nY2hlbA== 29232\nYXVkZXI= 29233\nIGRlZmVhdHM= 29234\nIExpYmVyYXRpb24= 29235\nIE9zYW1h 29236\nIFZpdmU= 29237\nQ2hhbmdlcw== 29238\nQ2hhbm5lbA== 29239\nIHRhcmlmZnM= 29240\nIG1hZ2U= 29241\nIFNheA== 29242\nIGluYWR2ZXJ0ZW50bHk= 29243\nIENSRQ== 29244\nIFJlYXBlcg== 29245\naW5reQ== 29246\nZ3JhZGluZw== 29247\nIHN0ZXJlb3R5cA== 29248\nIGN1cmw= 29249\nIEZBTlQ= 29250\nIGZyYW1ld29ya3M= 29251\nTW9t 29252\nIEFuY2g= 29253\nIGZsYXZvdXI= 29254\nY2FyYm9u 29255\nIHBlcm1pdHRpbmc= 29256\nbGV0Y2hlcg== 29257\nIE1vemlsbGE= 29258\nIFBhcmtpbmc= 29259\nIENoYW1w 29260\nU2Nyb2xs 29261\nIG11cmRlcmVy 29262\nIHJlc3RlZA== 29263\nIG93ZXM= 29264\nIFBvc3M= 29265\nQURE 29266\nSUZG 29267\ncmVzb2x1dGlvbg== 29268\nIE1pbmluZw== 29269\nIGNvbXBhcmF0aXZl 29270\nRGlt 29271\nIG5laWdoYm91cmluZw== 29272\nIEFTVA== 29273\nIFRveGlj 29274\nIGJpYXNlcw== 29275\nIGd1bmZpcmU= 29276\ndXJvdXM= 29277\nIE1vbWVudA== 29278\nMTk4Mw== 29279\nIHBlcnZhc2l2ZQ== 29280\ndHRw 29281\nIE5vcm1hbGx5 29282\ncmly 29283\nU2FyYWg= 29284\nIEFsYmFueQ== 29285\nIHVuc2V0dA== 29286\nIFNNUw== 29287\naXBlcnM= 29288\nbGF5ZXI= 29289\nIFdoaXRlcw== 29290\ndXBsZQ== 29291\nIHR1cmJv 29292\nIExlZWRz 29293\nIHRoYXRz 29294\nIE1pbmVy 29295\nTUVS 29296\nIFJlaWdu 29297\nIHBlcm1l 29298\nIEJsaXR6 29299\nIDE5MzQ= 29300\nIGludGltaWRhdGluZw== 29301\ndHViZQ== 29302\nIGVjY2VudHJpYw== 29303\nYWJvbGlj 29304\nYm94ZXM= 29305\nIEFzc29jaWF0ZXM= 29306\ndm90ZXM= 29307\nIHNpbXVsYXRl 29308\ndW1ibw== 29309\nYXN0ZXJ5 29310\nIHNoaXBtZW50cw== 29311\nRkZGRg== 29312\nYW50aA== 29313\nIHNlYXNvbmVk 29314\nIGV4cGVyaW1lbnRhdGlvbg== 29315\n4pag 29316\nbGF3cw== 29317\nTWVldA== 29318\naWRkbGVz 29319\nYW50aWNz 29320\nUmF0aW5n 29321\nSVNJUw== 29322\naGlmdA== 29323\nIGZyb250cw== 29324\nYnVm 29325\nMDE3 29326\nIHVuYXR0 29327\nIERpbA== 29328\nbGVhc2Vz 29329\nIEdhcmRlbnM= 29330\nNzc3 29331\ndG91Y2g= 29332\ndmVsbA== 29333\nNDU4 29334\nID09PT09 29335\nc2F2aW5n 29336\nIGVyb3Npb24= 29337\nIFF1aW4= 29338\nIGVhcm5z 29339\nIGFjY29tcGxpc2htZW50 29340\nIFdlaQ== 29341\nIDxb 29342\nX19fX18= 29343\nIGlycmln 29344\nIFRlZGR5 29345\nIGNvbnF1ZXJlZA== 29346\nIEFybW9yZWQ= 29347\nIGFzc2VydHM= 29348\nIG1hbmlwdWxhdGluZw== 29349\ncsOp 29350\nIHRyYW5zY3JpcHRz 29351\nR2FsbGVyeQ== 29352\nIHBsb3R0aW5n 29353\nTmVpbA== 29354\nIGJldHJheWFs 29355\nbG9hZGVy 29356\nIFN1bA== 29357\nIGRpc3BsYWNlbWVudA== 29358\nIHJveWFsdHk= 29359\nIFdJ 29360\naGVpdA== 29361\nIERldmljZXM= 29362\nYWxsZWw= 29363\nIG11bmljaXBhbGl0aWVz 29364\nIGNhbmFs 29365\nU3RhcnM= 29366\nIFVBRQ== 29367\nICLigKY= 29368\nIENV 29369\nYWJvdmU= 29370\nIHJlc29uYW5jZQ== 29371\nIGd1aUFjdGl2ZVVu 29372\nYWRkZWQ= 29373\nIEJyYXZlcw== 29374\nIElibg== 29375\nIGhlcmVieQ== 29376\nIEJSRQ== 29377\nIHNoYXJlaG9sZGVy 29378\nIEhpcg== 29379\nIEpp 29380\nIHN0cmFuZ2VseQ== 29381\nIGFkbWlyZWQ= 29382\nIHBsaWdodA== 29383\nIGJhY2hlbG9y 29384\nIFBvbGU= 29385\nY2lwbGluYXJ5 29386\nVG9ueQ== 29387\nIEFybWVuaWFu 29388\nIHVubWFu 29389\nIFppb25pc3Q= 29390\nU3RhZ2U= 29391\naXNjb3Zlcg== 29392\nIGF1dG9tb3RpdmU= 29393\nIHNpZGVsaW5lcw== 29394\nIHNsaWNr 29395\nIFJlbmFpc3NhbmNl 29396\nIEZVTg== 29397\nSW1hZ2Vz 29398\nIEhhag== 29399\nIHBpbmc= 29400\nIHNob3J0Y3V0 29401\nIEJsdmQ= 29402\nIExvb2tz 29403\nIGJ1cnN0cw== 29404\nIGNsYW1w 29405\nIG1pc2g= 29406\nIHNvcnRpbmc= 29407\nIHBhdHJpb3Q= 29408\nIGNvcnJlY3RuZXNz 29409\nIFNjYW5kaW5hdg== 29410\nIENhdmFsaWVycw== 29411\ncHl0aG9u 29412\nYXphcg== 29413\nIDM3NQ== 29414\nIEphdW5l 29415\nNDA5 29416\nIGRldHJpbWVudGFs 29417\nIHN0YWJiaW5n 29418\nIHBvaXNvbmVk 29419\nIGZvdW50YWlu 29420\nb2NlbnQ= 29421\nb3JzdA== 29422\nIE1hcmk= 29423\nIHJhaW5z 29424\nIE92ZXJz 29425\nIEluc3RpdHV0aW9u 29426\ndWRnZXQ= 29427\nQU1Z 29428\ndGFsZQ== 29429\nIEtS 29430\nIFByaWNlcw== 29431\nIGhlYWRhY2hlcw== 29432\nIGxhbmRzbA== 29433\nIEF1cmE= 29434\nQm9udXM= 29435\nIFpoYW8= 29436\nIEhpcA== 29437\nIGhvcHM= 29438\nIEt1cmRpc3Rhbg== 29439\nIGV4cGxvaXRpbmc= 29440\ncnlu 29441\nIGh5cG9jcmlzeQ== 29442\nb3BlbmluZw== 29443\nIGd1bnNob3Q= 29444\nIHdlZA== 29445\naW50ZXJzdGl0aWFs 29446\nSW50ZXJzdGl0aWFs 29447\nIGFtZW4= 29448\nQnJlYWtpbmc= 29449\nIG1hcmtldGVk 29450\nV2lyZQ== 29451\nIENyb3dk 29452\nQ29udGludWU= 29453\nIEtub3du 29454\nIEVmZmVjdGl2ZQ== 29455\nb3JlYW4= 29456\naXpvbnM= 29457\nSm9zZXBo 29458\nIGVzY2FsYXRpb24= 29459\ndXNlcm5hbWU= 29460\nIGN1cnRhaW4= 29461\nQVRFUw== 29462\nIFBBUg== 29463\nIE1peQ== 29464\nIGNvdW50ZXJmZQ== 29465\nbGVuZQ== 29466\nIGNvbnRlbmRlcnM= 29467\nZGFpbHk= 29468\nIEFzYw== 29469\nIFBoaWxsaXA= 29470\nbW9zdGx5 29471\nIGZpbGVuYW1l 29472\naGVuZQ== 29473\nIHJlc2VtYmxpbmc= 29474\nIHN0YWdpbmc= 29475\nIENobG9l 29476\nIHdpcmluZw== 29477\nSG9u 29478\nIFJlbmV3 29479\nb3R0YWdl 29480\nIEh5YnJpZA== 29481\nbXVjaA== 29482\nIHN0cm9rZXM= 29483\nIHBvbGljeW1ha2Vycw== 29484\nQVBURVI= 29485\nIEFya2hhbQ== 29486\ncGxvdA== 29487\nIGFzc2lzdGFudHM= 29488\nIGRlcG9ydA== 29489\nIFNlZ2E= 29490\nIGluZmx1ZW56YQ== 29491\nIEN1cnNlZA== 29492\nIEtvYmU= 29493\nIHNraW5ueQ== 29494\nUHJvdmlkZXI= 29495\nIFJpcA== 29496\nIGluY3JlbWVudGFs 29497\ncHJvZHVjdHM= 29498\nQkY= 29499\nIGRvbWU= 29500\nIENyZWRpdHM= 29501\nIGxvc2Vycw== 29502\naW50cw== 29503\nIEJldHR5 29504\nIFRhbGVudA== 29505\nIERBTQ== 29506\nTHY= 29507\nRXNz 29508\nIGRlbnM= 29509\ndGVtcA== 29510\nSnVkZ2U= 29511\nb2RpYw== 29512\nICco 29513\nVVJFUw== 29514\nZXRzaw== 29515\nVk8= 29516\nIHJldHJpZXZlZA== 29517\nIGFyY2hpdGVjdHM= 29518\n2Yc= 29519\nIGV0aGlj 29520\nIFNlY29uZGFyeQ== 29521\nc3RvY2tz 29522\nYWRpYQ== 29523\nIDMyNQ== 29524\nIE9waW5pb24= 29525\nIHNpbXVsdGFuZW91cw== 29526\nIGRpeno= 29527\ndWxw 29528\nIHNtdWdnbGluZw== 29529\naXBwZXJ5 29530\nUmFuZG9t 29531\nZmFjaW5n 29532\nIERhcw== 29533\nIHN0b2NrcA== 29534\nIGRpc2Nsb3N1cmVz 29535\ncG9pbnRlcg== 29536\nIGNvcmFs 29537\nIFNlbGVjdGlvbg== 29538\nIFBpa2U= 29539\naXZhbGVudA== 29540\nIHJ1dGhsZXNz 29541\nIFJpbQ== 29542\nIGVuc3Vpbmc= 29543\nIEV4cGVyaW1lbnQ= 29544\nIGNvbmdyZXNzbWFu 29545\nIGJlbGlldmVy 29546\nIHVuc3BlY2lmaWVk 29547\nIE1vcmQ= 29548\nIGtub3dsZWRnZWFibGU= 29549\nIFZFUlk= 29550\nVFg= 29551\nIHN0cmFwcw== 29552\nIHR1cmY= 29553\nYXBlc2hpZnRlcg== 29554\nIG1hcml0YWw= 29555\nIGZsb2Nr 29556\n44GG 29557\nMjYz 29558\nQU1FUw== 29559\nIE9wcG9zaXRpb24= 29560\nIHRyZWFzdXJlcw== 29561\nIEdPRA== 29562\nIG1vZGVsZWQ= 29563\nIFdPUkxE 29564\nIChb 29565\nIFVzYWdl 29566\nSEY= 29567\nICQo 29568\ndXNzZWQ= 29569\nIHBpb25lZXI= 29570\nRWlnaHQ= 29571\ncGFyc2U= 29572\nYnJlYWQ= 29573\ncml0eg== 29574\nIE1pcmFuZGE= 29575\nIEthbnQ= 29576\nKysp 29577\nb3Jlbg== 29578\nIHByb3Zva2Vk 29579\nIGJyZWVkcw== 29580\nIEluY2x1ZGVz 29581\nIFBhc3RlYmlu 29582\nIEZsaXA= 29583\nSmF2YQ== 29584\nIGJyaW5r 29585\nIHJ1bW9yZWQ= 29586\nIHVuc2Vlbg== 29587\nIGdhcm5lcmVk 29588\nIERlZmlu 29589\nYWx0ZWQ= 29590\nIHRhdHRvb3M= 29591\nIGhlc2l0YXRpb24= 29592\naXNpdGlvbnM= 29593\nIFdlYXZlcg== 29594\nIFJlcG9ydGluZw== 29595\nIHRoZXJhcGllcw== 29596\nIGNvbnN1bHRhbnRz 29597\nIHJlc2lkdWFs 29598\nIE1hbGk= 29599\nIFJvbWE= 29600\naWFnbw== 29601\nIFJlc2lkZW50cw== 29602\ndWJp 29603\nIHJlbWVkaWVz 29604\nIGFkYXB0aXZl 29605\nIEFsaXZl 29606\nIEJhcmNs 29607\nIHdhbGxldHM= 29608\nY3J5cHQ= 29609\nZXRlcm1pbmF0aW9u 29610\nIFBlbG9zaQ== 29611\nIHNsaXBwaW5n 29612\nb3Rvbmlu 29613\nIGFsbGlhbmNlcw== 29614\ncGF0cmljaw== 29615\naXJpcw== 29616\nIG9ydGg= 29617\nIFBlcmtpbnM= 29618\nIERlVg== 29619\nIEdldHM= 29620\nIGRyeWluZw== 29621\nZ2Vl 29622\nZm9yZXN0 29623\nIEZvcmdldA== 29624\nb3JlbQ== 29625\nMzM5 29626\nIHZhZ3VlbHk= 29627\nIERpb24= 29628\nIFBvcm4= 29629\nIEhPVw== 29630\nIHBuZXVt 29631\nIHJ1YmJsZQ== 29632\nIFRhc3Rl 29633\nZW5jaWE= 29634\nIEdlbA== 29635\nIGRzdA== 29636\nIDI0NQ== 29637\nIE1vcm9jY28= 29638\naW5mbGFtbQ== 29639\nIFR3aW5z 29640\nIGJvdHM= 29641\nZGF1Z2h0ZXI= 29642\nIEJhbGs= 29643\nIGJyZXRocmVu 29644\nIGxvZ29z 29645\nIGdvYmw= 29646\nZnBz 29647\nIHN1YmRpdmlzaW9u 29648\nIHBhd24= 29649\nIHNxdWVlemVk 29650\nIG1vcmFsZQ== 29651\nIERX 29652\nJyI= 29653\nIGtub3Q= 29654\nb29reQ== 29655\nIGRpdmlzaXZl 29656\nIGJvb3N0ZWQ= 29657\nY2h5 29658\n44OQ 29659\naWZhY3Q= 29660\nIG5ld2NvbWVycw== 29661\nIFdyZXN0bGluZw== 29662\nIHNjb3V0cw== 29663\nd29sdmVz 29664\nUmF0 29665\nIG5pbmV0ZWVudGg= 29666\nIE9zYm9ybmU= 29667\nU3RhdHM= 29668\nIGVtcG93ZXJlZA== 29669\nIHBzeWNob3BhdGg= 29670\nIE9FTQ== 29671\ndWdnYWdl 29672\nIFBL 29673\nIE1vaGFtbWFk 29674\nUGFr 29675\nIGFuYXJjaGlzdHM= 29676\nIEV4dHJhY3Q= 29677\nZXN0aGVz 29678\nIFN0b2NraG9sbQ== 29679\nbG9v 29680\nIEdyYXBo 29681\nIGRlcGxveWluZw== 29682\nIFN0cmFuZ2Vy 29683\nIE1vbGQ= 29684\nIHN0YWZmZXI= 29685\nIGRpc2NvdW50ZWQ= 29686\ndWNrbGU= 29687\ncGxlYXNl 29688\nIExhbmRpbmc= 29689\nw61h 29690\nIDE5Mw== 29691\nIGFudGU= 29692\nIHJlcGV0aXRpb24= 29693\nICsvLQ== 29694\nIHBhcm9keQ== 29695\nIGxpdmVseQ== 29696\nQUFB 29697\nIEhvcnVz 29698\nIHBpdHM= 29699\naW5kZXJz 29700\nTE9D 29701\nIFZlbmljZQ== 29702\nNDA2 29703\nIERpc2NvdmVy 29704\n4oY= 29705\nZWxsZWN0dWFs 29706\nIHBlbnM= 29707\nIGV5ZWw= 29708\naWd1b3Vz 29709\nSW1wbA== 29710\nIGpva2luZw== 29711\nIGludmFs 29712\nIEJlbGZhc3Q= 29713\nIGNyZWRpdG9ycw== 29714\nIFNreXdhbGtlcg== 29715\nb3Zza3k= 29716\nIGNlYXNlZmlyZQ== 29717\nIHNlYWxz 29718\naXNvZnQ= 29719\nKSku 29720\nIEZlbGl4 29721\nSVRT 29722\nIHRyZXNw 29723\nIEJsb2NrY2hhaW4= 29724\nZXdhcmU= 29725\nIFNjaHdhcg== 29726\nZW5uZQ== 29727\nbW91bnRlZA== 29728\nIEJlYWNvbg== 29729\nbGVzaA== 29730\nIGltbWVuc2VseQ== 29731\nIGNoZWVyaW5n 29732\nRW1wbG95 29733\nc2NlbmU= 29734\naXNobHk= 29735\nYXRjaGV3YW4= 29736\nIE5pY29sYXM= 29737\nIGRyYWluZWQ= 29738\nIEV4aXQ= 29739\nIEF6ZXJi 29740\nanVu 29741\nIGZsb2F0ZWQ= 29742\ndWFuaWE= 29743\nRGVlcA== 29744\nIHN1cGVydg== 29745\nIG15c3RpY2Fs 29746\nIERvbGxhcg== 29747\nIEFwb3N0bGU= 29748\nIFJFTA== 29749\nIFByb3ZpZGVk 29750\nIEJ1Y2tz 29751\n44O0 29752\nY3V0dGluZw== 29753\nIGVuaGFuY2VtZW50cw== 29754\nIFBlbmd1aW5z 29755\nIElzYWlhaA== 29756\nIGplcms= 29757\nIFd5bg== 29758\nIHN0YWxsZWQ= 29759\nIGNyeXB0b2N1cnJlbmNpZXM= 29760\nIFJvbGFuZA== 29761\nc2luZ2xl 29762\nIGx1bWlu 29763\nIEZlbGxvdw== 29764\nIENhcGFjaXR5 29765\nIEthemFraA== 29766\nV04= 29767\nIGZpbmFuY2Vk 29768\nMzg5 29769\nIHRpZA== 29770\nIGNvbGx1c2lvbg== 29771\nIE15cg== 29772\n7oA= 29773\nU2VuYXRvcg== 29774\nIHBlZGlhdHJpYw== 29775\nIG5lYXRseQ== 29776\nIHNhbmR3aWNoZXM= 29777\nIEFyY2hpdGVjdHVyZQ== 29778\nIHR1Y2tlZA== 29779\nIGJhbGNvbnk= 29780\nIGVhcnRocXVha2Vz 29781\ncXVpcmU= 29782\nRnV0dXJl 29783\nIGhlZnR5 29784\n6Zc= 29785\nIHNwZWNpYWxpemVz 29786\nIHN0cmVzc2Vz 29787\nIHNlbmRlcg== 29788\nIG1pc3VuZGVyc3RhbmRpbmc= 29789\nIGVwaWxl 29790\nIHByb3Zva2U= 29791\nIENvbG9ycw== 29792\nIGRpc21heQ== 29793\ndWtv 29794\nW18= 29795\nNTg2 29796\nbmV1dHJhbA== 29797\nIGRvbmF0aW5n 29798\nIFJhbmRhbGw= 29799\nTXVsdGk= 29800\nIGNvbnZlbmllbnRseQ== 29801\nIFN1bmc= 29802\nIENvY2E= 29803\nIHRlbnRz 29804\nIEFjY2VsZXI= 29805\nIHBhcnRuZXJlZA== 29806\nMjcy 29807\naXJtaW5n 29808\nIEJBUw== 29809\nc29tZXRpbWVz 29810\nIG9iamVjdGVk 29811\ndWJyaWM= 29812\ncG9zZWQ= 29813\nTENT 29814\nZ3Jhc3M= 29815\nIGF0dHJpYnV0YWJsZQ== 29816\nVklT 29817\nSXNyYWVsaQ== 29818\nIHJlcGVhdHM= 29819\nIFJN 29820\ndmFn 29821\ndXRh 29822\naW5vdXM= 29823\nIGluZXJ0 29824\nIE1pZ3VlbA== 29825\n5q0= 29826\nIEhhd2FpaWFu 29827\nQm9hcmQ= 29828\nIGFydGlmaWM= 29829\nIEF6ZXJiYWk= 29830\nYXNpbw== 29831\nIFJlbnQ= 29832\nQUlO 29833\nIGFwcGxpYW5jZXM= 29834\nIG5hdGlvbmFsaXR5 29835\nIGFzc2hvbGU= 29836\nIE5lYg== 29837\nIG5vdGNo 29838\naGFuaQ== 29839\nIEJyaWRl 29840\nQXZhaWxhYmlsaXR5 29841\nIGludGVyY2VwdGVk 29842\nIGNvbnRpbmVudGFs 29843\nIHN3ZWxsaW5n 29844\nIFBlcnNwZWN0 29845\nYmllcw== 29846\nLjw= 29847\naXRobWV0aWM= 29848\nIExhcmE= 29849\nIHRlbXB0aW5n 29850\nYWRkcg== 29851\nIG92ZXJzZWVpbmc= 29852\nY2xhZA== 29853\nIERW 29854\nIEdpbmdyaWNo 29855\nIG11bg== 29856\nIEFwcHJvcHJp 29857\nIGFsdGVyYXRpb25z 29858\nIFBhdHJlb24= 29859\nIGhhdm9j 29860\nIGRpc2NpcGxpbmVz 29861\nIG5vdG9yaW91c2x5 29862\nYWt1eWE= 29863\naWVyaQ== 29864\nPyku 29865\nIFdlbnQ= 29866\nIHNpbGljb24= 29867\nIHRyZW1i 29868\nQ29udGFpbmVy 29869\nS25vd24= 29870\nIG1vcnRhcg== 29871\nZXN0ZQ== 29872\naWNrYQ== 29873\nQXJ0aHVy 29874\nIFByZXZpb3VzbHk= 29875\nIE1hcnR5 29876\nIHNwYXJzZQ== 29877\nZ2lucw== 29878\nIGlud2FyZA== 29879\nIFBhcnRpY2lwYW50 29880\nQ29weQ== 29881\nIE1pc2M= 29882\nIGFudGliaW90aWM= 29883\nIFJldHJv 29884\nIGVsdXNpdmU= 29885\nIGFzc2FpbA== 29886\nIEJhdHRhbGlvbg== 29887\nIEJvdWdodA== 29888\nIGRpbWluaXNo 29889\nIEV1cm9wYQ== 29890\nc2Vzc2lvbg== 29891\nIERhbmdlcm91cw== 29892\naWVzZWw= 29893\nIGRpc2JlbGllZg== 29894\nIGJsYXN0cw== 29895\nZXh0cmVtZQ== 29896\nIEJveWQ= 29897\nIFByb2plY3Rz 29898\nIEd1eXM= 29899\nIHVuZGVyZ29uZQ== 29900\nIGdyaWxs 29901\nIER3aWdodA== 29902\nIDE5Nw== 29903\nVVNFUg== 29904\nIGZpbGVzeXN0ZW0= 29905\nIGNsb2Nrcw== 29906\nVGF5bG9y 29907\nIHdyYXBwZXI= 29908\nIGZvbGRpbmc= 29909\nb3VzYW5k 29910\nIFBoaWxpcHBpbmU= 29911\nQVRJT05BTA== 29912\nIFBlcnRo 29913\nIGFzaGVz 29914\nIGFjY3VtdWxhdGU= 29915\nIEdhdGV3YXk= 29916\nU2hvcA== 29917\nb3Jrc2hpcmU= 29918\nSGFu 29919\nIEJhcnJlbA== 29920\nIExlaA== 29921\nIFhW 29922\nIHdoaW0= 29923\nIHJlcG8= 29924\nIENH 29925\nIE1hbQ== 29926\nIGluY29ycG9yYXRpbmc= 29927\nIGJhaWxvdXQ= 29928\nIGxpbmd1aXN0aWM= 29929\nIGRpc2ludGVn 29930\nQ0xF 29931\nIGNpbmVtYXRpYw== 29932\nIEZpYmVy 29933\nU3lu 29934\naWxpb24= 29935\nIENvbXBvcw== 29936\nY2hlbnM= 29937\nIG5lb2M= 29938\nIGJvaWxlZA== 29939\nRklORQ== 29940\nb25v 29941\ndW5jbGU= 29942\naWtlbg== 29943\nIEJN 29944\nzrk= 29945\nIHJlY2VpcHRz 29946\nIGRpc3Bvc2Vk 29947\nIFRoaXJ0eQ== 29948\nIFJvdWdo 29949\nIEFCUw== 29950\nIG5vdHdpdGhzdGFuZGluZw== 29951\nb2xsZW4= 29952\nIyQ= 29953\nIHVucmVsaWFibGU= 29954\nIGJsb29t 29955\nIG1lZGlvY3Jl 29956\nIHRyYW0= 29957\nIFRhc21hbg== 29958\nIHNoYWtlcw== 29959\nIG1hbmlmZXN0bw== 29960\nIE1X 29961\nIHNhdGlzZmFjdG9yeQ== 29962\nIHNob3Jlcw== 29963\nIGNvbXB1dGF0aW9u 29964\nIGFzc2VydGlvbnM= 29965\nb3Jtb25z 29966\nYXJhZw== 29967\nYWJpdA== 29968\nRGVtb2NyYXRz 29969\nIExvb3Q= 29970\nIFZvbGtz 29971\naGFpcmVk 29972\nIGdyYXZpdGF0aW9uYWw= 29973\nU2luZw== 29974\nIE1peg== 29975\nIHRocm90dGxl 29976\nIHR5cmFubnk= 29977\nIFZpZXdz 29978\nIHJvYmJlcg== 29979\nIE1pbm9yaXR5 29980\nIHNocmluZQ== 29981\nc2NvcGU= 29982\ncHVycG9zZQ== 29983\nIG51Y2xldXM= 29984\nb3VyY2luZw== 29985\nIFVTREE= 29986\nIERIUw== 29987\nd3Jh 29988\nIEJvd2ll 29989\nU2NhbGU= 29990\nIEJFTA== 29991\neGk= 29992\nSXRlcg== 29993\nICgpLA== 29994\nd3JpZ2h0 29995\nIHNhaWxvcnM= 29996\nb3VzZWQ= 29997\nTkFTQQ== 29998\nIFByb29m 29999\nIE1pbmVyYWw= 30000\ndG9rZW4= 30001\nIEZE 30002\nUmV3 30003\nIGVsbA== 30004\nNjMw 30005\nIGNoYW5jZWxsb3I= 30006\nIEdvcw== 30007\nIGFtb3VudGVk 30008\nIFJlY3Jl 30009\nb21leg== 30010\nIE9wdGlt 30011\nIE9saXZl 30012\nIHRyYWNrZXI= 30013\nb3dsZXI= 30014\nIFVuaXF1ZQ== 30015\nUm9vdA== 30016\nIG1hcml0aW1l 30017\nIFF1cmFu 30018\nIEFkYXB0 30019\nIGVjb3N5c3RlbXM= 30020\nIFJlcGVhdA== 30021\nIFNveQ== 30022\nIElNUA== 30023\nIGdyYWR1YXRpbmc= 30024\nYW5kZW0= 30025\nUHVy 30026\nIFJlc2V0 30027\nIFRyaWNr 30028\nIFBoaWxseQ== 30029\nIFR1ZQ== 30030\nIE1hbGF5c2lhbg== 30031\nIGNsaW1heA== 30032\nIGJ1cnk= 30033\nIGNvbnNwaWM= 30034\nIFNvdXRoYW1wdG9u 30035\nIEZsb3dlcnM= 30036\nIGVzY29ydGVk 30037\nIEVkdWNhdGlvbmFs 30038\nIElSQw== 30039\nIGJydXRhbGx5 30040\nZWF0aW5n 30041\nIHBpbGxhcg== 30042\nIFNhbmc= 30043\nIEp1ZGU= 30044\nYXJsaW5n 30045\nIEFtbmVzdHk= 30046\nIHJlbWluZGluZw== 30047\nIEFkbWluaXN0cmF0aXZl 30048\naGVzZGE= 30049\nIGZsYXNoZWQ= 30050\nIFBCUw== 30051\ncGVyYXRl 30052\nZmVhdHVyZQ== 30053\nIHN3aXBl 30054\nIGdyYXZlcw== 30055\nb3VsdHJ5 30056\nMjYx 30057\nYnJlYWtz 30058\nIEd1ZXI= 30059\nIHNocmltcA== 30060\nIFZvdGluZw== 30061\ncXVpc3Q= 30062\nIGFuYWx5dGljYWw= 30063\nIHRhYmxlc3Bvb25z 30064\nIFNPVQ== 30065\nIHJlc2VhcmNoZWQ= 30066\nIGRpc3J1cHRlZA== 30067\nIGpvdXI= 30068\nIHJlcGxpY2E= 30069\nIGNhcnRvb25z 30070\nYmlhbnM= 30071\nfSk= 30072\nY29weQ== 30073\nR290 30074\nb3VjaGVk 30075\nUFVU 30076\nIHN3YXJt 30077\nbm90YXRpb25z 30078\nc2FpZA== 30079\nIHJlYnVpbHQ= 30080\nIGNvbGxhYm9yYXRl 30081\nIHJhZ2luZw== 30082\nIG5hcg== 30083\nIGRlbW9ncmFwaGljcw== 30084\nIEREUg== 30085\nIGRpc3RydXN0 30086\nb3NzaWVy 30087\nIEtybw== 30088\nIHB1bXBraW4= 30089\nIHJlZ3JldHM= 30090\nIGZhdGFsaXRpZXM= 30091\nIExlbnM= 30092\nIE9sZQ== 30093\ncGQ= 30094\nIHB1cHBldA== 30095\nIE91dGxvb2s= 30096\nIFN0YW0= 30097\nT2w= 30098\nRmFpcg== 30099\nVVU= 30100\nIHJld3JpdHRlbg== 30101\nxLE= 30102\nIGZhc2NpbmF0ZWQ= 30103\nIHZlY3RvcnM= 30104\nIHRyaWJ1bmFs 30105\ndWF5 30106\nIE1hdHM= 30107\nIENvaW5z 30108\nW1s= 30109\nIDE4MQ== 30110\nIHJlbmRlcnM= 30111\nIEthZXBlcm5pY2s= 30112\nIGVzcGlvbmFnZQ== 30113\nIHN1bW0= 30114\nIGRpdGNo 30115\nQWNjb3VudA== 30116\nIHNwcmVhZHNoZWV0 30117\nIG11dGFudA== 30118\ncGFzdA== 30119\nNDA3 30120\nIGR5ZQ== 30121\nIGluaXRpYXRpb24= 30122\nIDQwMDA= 30123\nIHB1bmlzaGFibGU= 30124\nIHRoaW5uZXI= 30125\nIEtoYWw= 30126\nIGludGVybWVkaQ== 30127\nRHVu 30128\nIEdvdGhhbQ== 30129\nIGVhZ2VybHk= 30130\nIHZhZ2luYWw= 30131\ncG93ZXJz 30132\nVlc= 30133\nIFdBVENIRUQ= 30134\nIHByZWRhdG9y 30135\nYW1zdW5n 30136\nIGRpc3Bhcml0eQ== 30137\nIFsq 30138\nIGFtcGg= 30139\nIG91dHNraXJ0cw== 30140\nIFNwaXJpdHM= 30141\nIHNrZWxldGFs 30142\n0Ls= 30143\nIFJlYXI= 30144\nIGlzc3VhbmNl 30145\nIExvZ2lj 30146\ncmVsZWFzZWQ= 30147\nWlo= 30148\nIEJvdW5k 30149\nRW50cnk= 30150\nIGV4aXRz 30151\naXNvbA== 30152\nIEZvdW5kZXI= 30153\nIHdyZQ== 30154\nIEdyZWVubGFuZA== 30155\nIE1NTw== 30156\ndGFrZXI= 30157\nSU5D 30158\n44G+ 30159\nIGhvdXJseQ== 30160\naGVua28= 30161\nIGZhbnRhc2llcw== 30162\nIGRpc29i 30163\nIGRlbW9saXRpb24= 30164\n44OL 30165\nIGVubGlzdGVk 30166\ncmF0dWxhdGlvbnM= 30167\nIG1pc2d1aWRlZA== 30168\nIGVuc3VyZWQ= 30169\nIGRpc2NvdXJhZ2Vk 30170\nbW9ydA== 30171\nIGZsYW5r 30172\nIGNlc3M= 30173\nIHJlYWN0cw== 30174\nIFNlcmU= 30175\nc2Vuc2l0aXZl 30176\nIFNlcnBlbnQ= 30177\nYXNzYWQ= 30178\nIDI0Nw== 30179\nIGNhbG1seQ== 30180\nYnVzdGVycw== 30181\nIGJsZWVk 30182\nIFN0cm8= 30183\nIGFtdXNlbWVudA== 30184\nIEFudGFyY3RpY2E= 30185\nIHNjZXB0 30186\nIEdhdw== 30187\nYXE= 30188\nYXNvbmlj 30189\nIHNwcmF3bGluZw== 30190\nbmF0aXZl 30191\nYXR1cmF0ZWQ= 30192\nIEJhdHRsZWZpZWxk 30193\nSVZFUlM= 30194\nRUI= 30195\nIEdlbXM= 30196\nIE5vcnRod2VzdGVybg== 30197\nIEZpbG1z 30198\nIEF1dG9tYXRpYw== 30199\nIGFwcHJlaGVuZA== 30200\n44Go 30201\nIGd1aU5hbWU= 30202\nIGJhY2tlbmQ= 30203\nIGV2aWRlbmNlZA== 30204\nZ2VhbnQ= 30205\nMDEy 30206\nIFNpZWdl 30207\nIGV4dGVybmFsVG8= 30208\nIHVuZm9jdXNlZFJhbmdl 30209\nIGd1aUFjdGl2ZVVuZm9jdXNlZA== 30210\nIGd1aUljb24= 30211\nIGV4dGVybmFsVG9FVkE= 30212\nIGV4dGVybmFsVG9FVkFPbmx5 30213\nRnJp 30214\nY2hhcmQ= 30215\nZW5hcmllcw== 30216\nIGNoaWVmcw== 30217\nIGNm 30218\nIEhVRA== 30219\nIGNvcnJvYm9y 30220\nIGRC 30221\nIFRha2Vu 30222\nIFBhdHJpY2lh 30223\ncmFpbA== 30224\nIENoYXJt 30225\nIExpYmVydGFyaWFu 30226\ncmlldmU= 30227\nUGVyc29uYWw= 30228\nIE9VUg== 30229\nZ2VyaWVz 30230\nIGR1bXBpbmc= 30231\nIG5ldXJvbG9naWNhbA== 30232\naXRpbWF0ZQ== 30233\nIENsaW50b25z 30234\ncmFmdGVk 30235\nIE1vbGx5 30236\nIHRlcm1pbmFscw== 30237\ncmVnaXN0ZXI= 30238\nIGZsYXJl 30239\nIGVuY29kZWQ= 30240\nIGF1dG9wc3k= 30241\ncGVs 30242\nbWFjaGluZQ== 30243\nIGV4ZW1wdGlvbnM= 30244\nIFJveWFscw== 30245\nZGlzdGFuY2U= 30246\nIGRyYWZ0cw== 30247\nIGxhbWU= 30248\nIEN1bm5pbmc= 30249\nIHNwb3VzZXM= 30250\nIE1hcmtldHM= 30251\nIENhcnJpZXI= 30252\nIGltcGx5aW5n 30253\nIFlhaw== 30254\nc2lk 30255\nIGxvc2Vy 30256\nIHZpZ2lsYW50 30257\nIGltcGVhY2htZW50 30258\nIGF1Z21lbnRlZA== 30259\nIEVtcGxveWVlcw== 30260\nIHVuaW50ZW5kZWQ= 30261\ndGVybmFsbHk= 30262\nIFdhdHQ= 30263\nIHJlY29nbml6YWJsZQ== 30264\nZXNzaW0= 30265\n5p0= 30266\nIGNvYXRlZA== 30267\ncmhh 30268\nIGxpZXV0ZW5hbnQ= 30269\nIExlZ2lzbGF0aW9u 30270\ncHVibGlzaGVk 30271\nNDQ0 30272\nMDEz 30273\nIGlkZWFsbHk= 30274\nIFBhc3N3b3Jk 30275\nIHNpbXBsaWZ5 30276\nIE1ldGE= 30277\nIE1SSQ== 30278\nIHBsZWFkaW5n 30279\nb3JnYW5pemVk 30280\naGFuZGxlcg== 30281\nIHVucmF2ZWw= 30282\nY29ycmVjdA== 30283\nIGljeQ== 30284\nIHBhcmFub2lk 30285\nIHBhc3Nlcg== 30286\nIGluc3BlY3Rpb25z 30287\nb2Zlcg== 30288\nIEhlYWx0aGNhcmU= 30289\nMjgz 30290\nIEJydXQ= 30291\naW9sYQ== 30292\nZm9yZ2U= 30293\nIE1lZGlldmFs 30294\nTVNO 30295\naWV2ZXJz 30296\nIFByb2dyYW1taW5n 30297\n5Yk= 30298\nIDIyMw== 30299\nbXU= 30300\nIENMRQ== 30301\ndWdh 30302\nIHNob3BwZXJz 30303\nIGluZm9ybWF0aXZl 30304\nIFBsYW5z 30305\nIHN1cHBsZW1lbnRhdGlvbg== 30306\nIFRlc3Rz 30307\ndHlhcmQ= 30308\nb2N5dGVz 30309\nIFZlZ2E= 30310\nIEd1amFyYXQ= 30311\nZXJtYW5lbnQ= 30312\nRXhjZXB0 30313\nIExPVA== 30314\nYWxsYQ== 30315\nIEN1bW0= 30316\nIE9zdw== 30317\nIHZlbm9t 30318\nIERlYnQ= 30319\nIERPV04= 30320\nIHJldW5pb24= 30321\nIG11Yw== 30322\nIFJlbGllZg== 30323\nIGdlb3A= 30324\nIPCfmA== 30325\nYWxvZ3Vl 30326\nQW50aA== 30327\nZWNobw== 30328\nIGNvcnJvcw== 30329\nIHJlcGxpY2F0aW9u 30330\nIEJsYXppbmc= 30331\nIERhdWdodGVy 30332\nIGluZmxpYw== 30333\nIExpbmRzZXk= 30334\n2Yg= 30335\nMjg0 30336\nRXhpdA== 30337\nIGdsb29t 30338\nVEFJTg== 30339\nIHVuZGVybWluaW5n 30340\nIGFkdmlzaW5n 30341\naGlkZGVu 30342\nIG92ZXJmbG93 30343\nIGdvcg== 30344\ndXJkdWU= 30345\nIGVjaG9lcw== 30346\nZW5oYWdlbg== 30347\nIGltcHVscw== 30348\nZHJ1Zw== 30349\nY2FzaA== 30350\nIGFzeW5j 30351\nIG1pcmFj 30352\nYXR0cw== 30353\ncHVuaw== 30354\nIHBpdm90 30355\nIExlZ2lzbGF0aXZl 30356\nIGJsb2dnZXJz 30357\nIENsYXc= 30358\nc2J1cmc= 30359\nZHls 30360\nIFJlY29tbWVuZA== 30361\nIHZlcnRl 30362\nIHByb2hpYml0aW5n 30363\nIFBhbnRoZXI= 30364\nSm9uYXRoYW4= 30365\nIG9taW4= 30366\nIGhhdGVmdWw= 30367\nMjgx 30368\nIE9yY2hl 30369\nIE11cmRvY2g= 30370\nZG93bnM= 30371\nIGFzeW1t 30372\nR0VS 30373\nQWx3YXlz 30374\nIGluZm9ybXM= 30375\nIFdN 30376\nIFBvbnk= 30377\nIEFwcGVuZGl4 30378\nIEFybGluZ3Rvbg== 30379\nSmFt 30380\nIG1lZGljaW5hbA== 30381\nIFNsYW0= 30382\nSVRJRVM= 30383\nIHJlYWZm 30384\nIFJp 30385\nRkc= 30386\nU3ByaW5n 30387\nYm9vbA== 30388\nIHRoaWdocw== 30389\nIG1hcmtpbmdz 30390\nIFJhcXFh 30391\nIExhaw== 30392\ncG9sbA== 30393\ndHNreQ== 30394\nIE1vcnR5 30395\nIERlZmluaXRpb24= 30396\nIGRlYnVuaw== 30397\nZW5kZXJlZA== 30398\nIExlb25l 30399\nYXZlcnM= 30400\nIG1vcnRnYWdlcw== 30401\nQXBwYXJlbnRseQ== 30402\nTmlj 30403\naGF1cw== 30404\nIFRob3VzYW5kcw== 30405\nYXVsZA== 30406\nIG1hc2g= 30407\nc2hvb3Q= 30408\nIGRpYXJy 30409\nIGNvbnNjaW91c2x5 30410\nSGVybw== 30411\nZWFz 30412\nIE5hdHVyYWxseQ== 30413\nIERlc3Ryb3llcg== 30414\nIGRhc2hib2FyZA== 30415\nc2VydmljZXM= 30416\nUm9n 30417\nIG1pbGxlbm5pYWxz 30418\nIGludmFkZQ== 30419\nLSg= 30420\nIGNvbW1pc3Npb25z 30421\nIEF1Y2tsYW5k 30422\nIGJyb2FkY2FzdHM= 30423\nIGZyb250YWw= 30424\nIGNyYW5r 30425\nIEhpc3Rvcmlj 30426\nIHJ1bW91cnM= 30427\nQ1RW 30428\nIHN0ZXJpbA== 30429\nIGJvb3N0ZXI= 30430\ncm9ja2V0 30431\n44K8 30432\ndXRzY2hl 30433\nIFBJ 30434\nIDIzMw== 30435\nIFByb2R1Y2Vy 30436\nIEFuYWx5dGljcw== 30437\nIGludmFsdWFibGU= 30438\nIHVuaW50ZW50aW9u 30439\nIENZ 30440\nIHNjcnV0aW4= 30441\nIGdpZ2c= 30442\nIGVuZ3VsZg== 30443\nIHByb2xldGFyaWF0 30444\nIGhhY2tz 30445\nIEhldw== 30446\nYXJhaw== 30447\nIFNsaW1l 30448\naWVsZGluZw== 30449\nYWdoZXI= 30450\nIEVsbGlvdA== 30451\nIHRlbGVjb20= 30452\nIDIxOQ== 30453\ndWx0YW4= 30454\nIEFyYm9y 30455\nIFNjb3V0cw== 30456\nQmFu 30457\nIGxpZmVzcGFu 30458\nIGJsYXNw 30459\nMzg4 30460\nIGp1ZGljaWFyeQ== 30461\nIENvbnRpbmVudGFs 30462\nYXNraW5n 30463\nTWND 30464\nTEVE 30465\nIGJhZ2dhZ2U= 30466\nIFNvcmNlcmVy 30467\nIHJlbW5hbnRz 30468\nIEdyaWZmaXRo 30469\nZXRzdQ== 30470\nIFN1YmFydQ== 30471\nIFBlcnNvbmFsaXR5 30472\nZGVzaWduZWQ= 30473\ndXNoaW1h 30474\nYWduYXI= 30475\nIHJlY29pbA== 30476\nIHBhc3Npb25z 30477\nXCI6 30478\nIHRlZQ== 30479\nIGFib2xpdGlvbg== 30480\nIENyZWF0aW5n 30481\namFj 30482\nIDE5NA== 30483\nMDE5 30484\nIHBpbGxhcnM= 30485\ncmljaGVk 30486\nLyI= 30487\ndGs= 30488\nIGxpdmVsaWhvb2Q= 30489\nIHJvYXN0ZWQ= 30490\nYWhvbg== 30491\nIEh1dGNo 30492\nYXNzZXJ0 30493\nIGRpdmlkZW5k 30494\nIGtuaXQ= 30495\nIGRhdW50aW5n 30496\nIGRpc3R1cmJhbmNl 30497\nIHNoYWxl 30498\nIGN1bHRpdmF0ZWQ= 30499\nIHJlZnJpZ2VyYXRvcg== 30500\nTEI= 30501\nIE5FVA== 30502\nIGNvbW1lcmNpYWxz 30503\nIHRoaW5rZXJz 30504\nNDU1 30505\nIGNob3A= 30506\nQnJvYWQ= 30507\nIHN1c3BpY2lvbnM= 30508\nIHRhZ2dlZA== 30509\nbGlmdGluZw== 30510\nIHN0eWxpc2g= 30511\nIFNoaWVsZHM= 30512\nU2hvcnRseQ== 30513\nIHRhaWxz 30514\nQXV0aA== 30515\nU1RF 30516\nIEdBTUU= 30517\nIHNlaXNt 30518\nIEtpcw== 30519\nb2xvZ25l 30520\nIGNvd29yaw== 30521\nIGZvcmNpYmx5 30522\nIHRoeXJvaWQ= 30523\nIFBC 30524\nQU5F 30525\nbWFycmllZA== 30526\naG9yc2U= 30527\nIHBvbHltZXI= 30528\nIENoYWw= 30529\nb2Rvcg== 30530\nREVCVUc= 30531\nIENvbnRleHQ= 30532\nIGJsaXNz 30533\nIHBpbnBvaW50 30534\nIE1hdGhlbWF0 30535\nbGVncmFt 30536\nIFdlZWtlbmQ= 30537\nIGxhYmVsbGVk 30538\nIGJhcnQ= 30539\naXRsZXM= 30540\nIGVzdHJvZ2Vu 30541\n4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 30542\nIic= 30543\nIHZpc2libHk= 30544\nIG91dHNpZGVy 30545\nYWlkYQ== 30546\nQXJlYQ== 30547\nIGRpc3NlbWlu 30548\nIGRpc2hvbmVzdA== 30549\nIENsb3NlZA== 30550\nIEJ1bGxldGlu 30551\nIFJhbXNleQ== 30552\nc3dvcmQ= 30553\nIFhJ 30554\nb3VyY2Vk 30555\nU2FtZQ== 30556\nMzQ2 30557\nIFJlcGU= 30558\nIEtvdQ== 30559\nY2FrZQ== 30560\nZW1pcw== 30561\nQ2FjaGU= 30562\nIE1lYW5pbmc= 30563\nIEVubGlnaHQ= 30564\nb25vbXk= 30565\nIG1hbmlmZXN0YXRpb24= 30566\nc3dvcnRo 30567\nSmF5 30568\nIGNob3Jl 30569\nw7Zy 30570\nRHJlYW0= 30571\nIHNhbmN0aW9uZWQ= 30572\nIGN1bHR1cmFsbHk= 30573\nIEFyYQ== 30574\nTmF2 30575\nIHRoZW9sb2dpY2Fs 30576\nIHN0cnV0 30577\nIFZP 30578\nIEhhbmRib29r 30579\nIGNvbnN0cnVjdGluZw== 30580\nIMK2 30581\nIEJlbmVmaXRz 30582\nIFBzeWNob2xvZ2ljYWw= 30583\nc2Fj 30584\n5bg= 30585\ncG9saWN5 30586\nIE1hdHRlcnM= 30587\nIFJlcG9ydGVk 30588\nIEJ5dGU= 30589\nIHZpdHJv 30590\nIE1haWRlbg== 30591\nIGxhbQ== 30592\nIEplbm5pbmdz 30593\nIGdhcm1lbnQ= 30594\nIFJ1dGdlcnM= 30595\nIFN0YWZmb3Jk 30596\nIFdlbGxpbmd0b24= 30597\nIGludGVybWl0dA== 30598\nIG5wbQ== 30599\nIG9yZGVhbA== 30600\nIHBsdWdnZWQ= 30601\nb29taW5n 30602\naW5pc2hlZA== 30603\nZnJhbWV3b3Jr 30604\nIHRpbWJlcg== 30605\nIGNhc3M= 30606\nIDg1MA== 30607\naWxlc3M= 30608\nIFJlZHV4 30609\nNzY4 30610\nU3RyZQ== 30611\nIHN1cnBhc3NlZA== 30612\nd2hlbA== 30613\nIHBhcmFsbGVscw== 30614\nIHZlaWw= 30615\nIEdJ 30616\nIFJFU1Q= 30617\nIHJlYWRpbmVzcw== 30618\nc29ydA== 30619\nIG1vZGlmeWluZw== 30620\nIFNsYXRl 30621\ncnVmZg== 30622\nIG1hcmJsZQ== 30623\nIGluZnJhcmVk 30624\nIGF1ZGl0b3I= 30625\nIEZBTlRBU1k= 30626\nIFBvdmVydHk= 30627\nIFNQRA== 30628\nICIo 30629\nS3k= 30630\nUkFZ 30631\nIGV4ZWN1dGlvbnM= 30632\nIEJldmVybHk= 30633\nIE1hcnhpc20= 30634\nIEJ1cnN0 30635\nIEthbGk= 30636\nZXN0b25lcw== 30637\nQ2xlYXJseQ== 30638\nRWxs 30639\n44Gn 30640\nIFByb2NlZWRpbmdz 30641\nVG9rZW4= 30642\nSUZJQw== 30643\nw7Fh 30644\nQ2VudHJhbA== 30645\nIEhhbGV5 30646\nIERyYW1h 30647\nIGZvcm1hdGlvbnM= 30648\nT1JO 30649\nQm9va3M= 30650\nIGRvbWluYXRpbmc= 30651\nIEZseWVycw== 30652\nIENvbXBhbmlvbg== 30653\nIGRpc2NpcGxpbmVk 30654\nIFl1Z29zbGF2 30655\nIFNwZWxscw== 30656\nIHZlbmdlYW5jZQ== 30657\nIGxhbmRsb3Jkcw== 30658\nTGVu 30659\nIE9ncmU= 30660\nYW5vaWE= 30661\nIHBpZXJjaW5n 30662\nIGNvbmdyZWc= 30663\nIHNjb3Jlcg== 30664\nb2JpYQ== 30665\nIG5pY2tlbA== 30666\nIExlYXJucw== 30667\nIHJlam8= 30668\nIG1hc3RlcnBpZWNl 30669\nRmxhc2g= 30670\nIGluaGFiaXRlZA== 30671\nIE9wZW5HTA== 30672\nIER1ZA== 30673\nIElDTw== 30674\nIGFydGVy 30675\nIHBsdXI= 30676\nIG1hc3Rlcnk= 30677\nIGxvbmdzdGFuZGluZw== 30678\nc3RlZA== 30679\nIHdpbmVz 30680\nIHRlbGV2aXNlZA== 30681\nIFNocmluZQ== 30682\nIEJheWVybg== 30683\nIOKTmA== 30684\nIGVuY2xvc3VyZQ== 30685\nam9obg== 30686\nIHByb3BoZXRz 30687\nIFJlc3VycmVjdGlvbg== 30688\nIE9yZGVycw== 30689\nIHVuZXZlbg== 30690\ncmFscw== 30691\nIGR3aW5k 30692\nIExhaA== 30693\nIFNsb3Zlbg== 30694\nMzc4 30695\nIGluc2lzdGVuY2U= 30696\nYWZmbGU= 30697\nIENsb25l 30698\nIGhhcmRzaGlw 30699\nIENvbmdyZXNzbWFu 30700\nIHBsZWFk 30701\nIHJldmlld2Vycw== 30702\nIGN1cmVk 30703\nIDE5MzU= 30704\nYXNsZXk= 30705\nZmFrZQ== 30706\nIFRoaW5raW5n 30707\neWRpYQ== 30708\nUEFSVA== 30709\nIERvdGE= 30710\nb2l0 30711\nIHdoaXBwZWQ= 30712\nIGJvdW5jaW5n 30713\nIEhpc3Bhbmljcw== 30714\nY29taW5ncw== 30715\nIGNhbm5hYmlu 30716\nIENoYW1iZXJz 30717\nIFphY2s= 30718\nT3B0aW9uYWw= 30719\nIGNvYXRz 30720\nIHByb3dlc3M= 30721\nIE5vcnRvbg== 30722\nIHBsYWlubHk= 30723\nIGZyZWlnaHQ= 30724\nIGluaGliaXRpb24= 30725\nIGNsYW0= 30726\nIDMwMw== 30727\na2Vm 30728\nYWxlaWdo 30729\nTHVrZQ== 30730\nIHBzeWNobw== 30731\nYXRvcml1bQ== 30732\nTUVE 30733\nIHRyZWF0aWVz 30734\nIGluZGlzYw== 30735\nIGRj 30736\nT1BT 30737\nIHJlc2lsaWVudA== 30738\nIEludGVyc3RhdGU= 30739\nIHNsYWNr 30740\nIG11bmRhbmU= 30741\nIGVzdGFibGlzaGVz 30742\nMzU5 30743\nIHN0cmFpbmVk 30744\nIG5vbmQ= 30745\nU3Vz 30746\nIGNhc3Rl 30747\nYXJhdGU= 30748\naWV2aW5n 30749\nIHVuZmFpcmx5 30750\nIHBhcnNlcg== 30751\nb25pYWw= 30752\ndXJzaXZl 30753\nVmlh 30754\nIE90dG8= 30755\nIEF1dGhvcml0aWVz 30756\nc3Ryb2tl 30757\nS1I= 30758\nIE1lcmN5 30759\nIGZ1cm5pc2hlZA== 30760\nIG91dHNldA== 30761\nIG1ldGlj 30762\nMTk4Mg== 30763\nb2xpdGhpYw== 30764\nIFRlbnQ= 30765\nb2dpY2Fs 30766\nIEFpcmNyYWZ0 30767\nIGhpZGVz 30768\nIEJlY2FtZQ== 30769\nIGVkdWNhdG9ycw== 30770\ncmVhY2hpbmc= 30771\nIHZvbGF0aWxpdHk= 30772\nIHRvZGRsZXI= 30773\nIE5BU0NBUg== 30774\nIFR3ZWx2ZQ== 30775\nIEhpZ2hsaWdodHM= 30776\nIGdyYXBl 30777\nIHNwbGl0cw== 30778\nIHBlYXNhbnQ= 30779\nIHJlbmVn 30780\nIE1TSQ== 30781\nVGVtcA== 30782\nc3RhcnM= 30783\nIHRyZWs= 30784\nIEh5ZGU= 30785\nYmluZGluZw== 30786\nIHJlYWxpc20= 30787\nIG94aWRl 30788\nIEhvcw== 30789\nIG1vdW50cw== 30790\nIGJpdGluZw== 30791\nIGNvbGxhcHNpbmc= 30792\nIHBvc3RhbA== 30793\nIG11c2V1bXM= 30794\nIGRldGFjaGVk 30795\nIHJlc3BlY3Rpbmc= 30796\nIG1vbm9wb2w= 30797\nIHdvcmtmbG93 30798\nIENha2U= 30799\nVGVtcGxhdGU= 30800\nIE9yZ2FuaXNhdGlvbg== 30801\nIHBlcnNpc3RlbmNl 30802\nMzY5 30803\nQ29taW5n 30804\nQnJhZA== 30805\nIHJlZHVuZGFudA== 30806\nIEdUQQ== 30807\nIGJlbmRpbmc= 30808\nIHJldm9rZWQ= 30809\nIG9mZmVuZGluZw== 30810\nIGZyYW1pbmc= 30811\nIHByaW50Zg== 30812\nQ29tbXVu 30813\nbWVtYmVycw== 30814\nT3V0c2lkZQ== 30815\nIGNvbnN0cnVlZA== 30816\nIGNvZGVk 30817\nRk9SRQ== 30818\nIGNoYXN0 30819\nQ2hhdA== 30820\nSW5kaWFu 30821\nIFlhcmQ= 30822\nPyEi 30823\nIFBvcnRz 30824\nIFhhdmllcg== 30825\nIFJFVA== 30826\nJy4i 30827\nIEJvYXQ= 30828\naXZhdGVk 30829\naWNodA== 30830\ndW1lcmFibGU= 30831\nRHM= 30832\nIER1bm4= 30833\nIGNvZmZpbg== 30834\nIHNlY3VyZWx5 30835\nIFJhcHRvcnM= 30836\nIEJlcw== 30837\nSW5zdGFsbGF0aW9u 30838\nIGluY2VwdGlvbg== 30839\nIEhlYWx0aHk= 30840\nZW5kYW50cw== 30841\nIHBzeWNob2xvZ2lzdHM= 30842\nIFNoZWlraA== 30843\nY3VsdHVyYWw= 30844\nIEJsYWNrQmVycnk= 30845\nc2hpZnQ= 30846\nRnJlZA== 30847\nb2NoZQ== 30848\nIGNha2Vz 30849\nIFNFTw== 30850\nIEdpYW4= 30851\nIEFzaWFucw== 30852\nb2dnaW5n 30853\nZWxlbWVudA== 30854\nIHB1bmRpdHM= 30855\nIFZhdWdo 30856\nIEdhdmlu 30857\nIGhpdHRlcg== 30858\nIGRyb3duZWQ= 30859\nIGNoYWxr 30860\nIFppa2E= 30861\nIG1lYXNsZXM= 30862\nODAy 30863\n4oCmLi4= 30864\nIEFXUw== 30865\nXSI= 30866\nIGRpc3RvcnQ= 30867\nIE1hc3Q= 30868\nIGFudGlib2RpZXM= 30869\nIE1hc2g= 30870\nTWVtb3J5 30871\nIFVnYW5kYQ== 30872\nIFByb2I= 30873\nIHZvbWl0aW5n 30874\nIFR1cm5z 30875\nIG9jY3VweWluZw== 30876\nIGV2YXNpb24= 30877\nIFRoZXJhcHk= 30878\nIHByb21v 30879\nIGVsZWN0cg== 30880\nIGJsdWVwcmludA== 30881\nIERyZQ== 30882\ncHJpY2Vk 30883\nIERlcG90 30884\nIGFsbGV2aWF0ZQ== 30885\nIFNvbWFsaQ== 30886\nbWFyZw== 30887\nbmluZQ== 30888\nIG5vc3RhbGdpYQ== 30889\nIFNoZXBoZXJk 30890\nIGNhdmFscnk= 30891\nIHRvcnBlZA== 30892\nIEJsb29keQ== 30893\neGI= 30894\nIHNhbms= 30895\nIGdvYWx0 30896\ncmVwb3J0cHJpbnQ= 30897\nZW1iZWRyZXBvcnRwcmludA== 30898\nY2xvbmVlbWJlZHJlcG9ydHByaW50 30899\nIEluaXRpYWxseQ== 30900\nIEZpc2NoZXI= 30901\nIG5vdGV3b3J0aHk= 30902\nY2Vybg== 30903\nIGluZWZmaWNpZW50 30904\ncmF3ZG93bmxvYWQ= 30905\ncmF3ZG93bmxvYWRjbG9uZWVtYmVkcmVwb3J0cHJpbnQ= 30906\nY2F0aW9u 30907\nIER5bmFzdHk= 30908\nbGFn 30909\nREVT 30910\nIGRpc3RpbmN0bHk= 30911\nIEVzdG9uaWE= 30912\nIG9wZW5uZXNz 30913\nIGdvc3NpcA== 30914\ncnVjaw== 30915\nV2lkdGg= 30916\nIElicmFoaW0= 30917\nIHBldHJvbGV1bQ== 30918\nIGF2YXRhcg== 30919\nIEhlZA== 30920\nYXRoYQ== 30921\nIEhvZ3dhcnRz 30922\nIGNhdmVz 30923\nNjc4 30924\nIHNhZmVndWFyZA== 30925\nIE1vZw== 30926\naXNzb24= 30927\nIER1cmhhbQ== 30928\nc2xhdWdodA== 30929\nIEdyYWR1YXRl 30930\nIHN1YmNvbnNjaW91cw== 30931\nIEV4Y2VsbGVudA== 30932\nIER1bQ== 30933\nLS0tLS0= 30934\nIHBpbGVz 30935\nIFdPUks= 30936\nIEdhcm4= 30937\nIEZvbA== 30938\nIEFUTQ== 30939\nIGF2b2lkcw== 30940\nIFR1bA== 30941\nIGJsZWFr 30942\nRUxZ 30943\naXZpc3Q= 30944\nbGlnaHRseQ== 30945\nUGVycw== 30946\nIERvYg== 30947\nIExT 30948\nIGluc2FuaXR5 30949\nzrU= 30950\nYXRhbGll 30951\nRW5sYXJnZQ== 30952\nIHR3aXN0cw== 30953\nIGZhdWx0eQ== 30954\nIHBpcmFjeQ== 30955\nIGltcG92ZXI= 30956\nIHJ1Z2dlZA== 30957\nIEZhc2hpb24= 30958\nIHNhbmRz 30959\nJz8= 30960\nc3dpY2s= 30961\nIG5hdGl2ZXM= 30962\nIGhlbg== 30963\nIE5vaXNl 30964\n44OX 30965\nIGdyZWVucw== 30966\nIGZyZWV6ZXI= 30967\nIGR5bmFzdHk= 30968\nIEZhdGhlcnM= 30969\nIE5ld2Fyaw== 30970\nIGFyY2hhZW9sb2dpY2Fs 30971\nIG90 30972\nb2Jhcg== 30973\nIGJsb2NrYWRl 30974\nIGFsbGVyZw== 30975\nTFY= 30976\nIGRlYml0 30977\nIFJGQw== 30978\nIE1pbHRvbg== 30979\nIFByZXNzdXJl 30980\nIHdpbGxpbmdseQ== 30981\nIGRpc3Byb3BvcnRpb25hdGU= 30982\nIG9wcHJlc3NpdmU= 30983\nIGRpYW1vbmRz 30984\nIGJlbG9uZ2luZ3M= 30985\nMTk3MA== 30986\nIGJlbGxz 30987\nIGltcGVyaWFsaXNt 30988\nIDIyNw== 30989\nIGV4cGxvZGluZw== 30990\nIEVjbGlwc2U= 30991\nIDE5MTk= 30992\nIHJhbnQ= 30993\nIG5vbWluYXRpb25z 30994\nMzQ3 30995\nIHBlYWNlZnVsbHk= 30996\ncmljYQ== 30997\nIEZVQ0s= 30998\nIHZpYnJhdGlvbg== 30999\nbWFsaW5r 31000\nIHJvcGVz 31001\nIEl2YW5rYQ== 31002\nIEJyZXdlcnk= 31003\nIEJvb2tlcg== 31004\nIE93ZW5z 31005\nZ29lcnM= 31006\nU2VydmljZXM= 31007\nIFNuYXBl 31008\nIDE5MQ== 31009\nMzk1 31010\nIDI5OQ== 31011\nanVzdGljZQ== 31012\nIGJyaQ== 31013\nIGRpc2Nz 31014\nIHByb21pbmVudGx5 31015\nIHZ1bGdhcg== 31016\nIHNraXBwaW5n 31017\nbHZlcw== 31018\nIHRzdW5hbWk= 31019\nMzc0 31020\nIFVydWc= 31021\nIEVpZA== 31022\ncmVjYXRlZA== 31023\ncGhlbg== 31024\nIGZhdWx0cw== 31025\nIFN0YXJ0ZWQ= 31026\nOTUw 31027\nIHBp 31028\nIGRldGVjdG9y 31029\nIGJhc3RhcmQ= 31030\nIHZhbGlkYXRlZA== 31031\nU3BhY2VFbmdpbmVlcnM= 31032\nT1VSQ0U= 31033\nICh+ 31034\nIHVuc3Vy 31035\nIGFmZmlybWVk 31036\nIGZhc2Npc20= 31037\nIHJlc29sdmluZw== 31038\nIENoYXZleg== 31039\nIEN5bg== 31040\nIGRldHJhY3Q= 31041\nTG9zdA== 31042\nIHJpZ2dlZA== 31043\nIGhvbWFnZQ== 31044\nIEJydW5v 31045\nNTU1 31046\nZWNh 31047\nIHByZXNzZXM= 31048\nIGh1bW91cg== 31049\nIHNwYWNpbmc= 31050\nICcv 31051\nb2xraWVu 31052\nQ291bg== 31053\nT1BFUg== 31054\nVHJl 31055\nU29u 31056\nIENhbWJvZGlh 31057\naWVycmU= 31058\nbW9uZw== 31059\nb3p5 31060\nIGxpcXVpZGl0eQ== 31061\nIFNvdmlldHM= 31062\nIEZlcm5hbmRv 31063\nIDIyOQ== 31064\nIHNsdWc= 31065\nIENhdGFsYW4= 31066\nZWxlY3RyaWM= 31067\nIHNjZW5lcnk= 31068\nIEhlYXJ0aA== 31069\nIGNvbnN0cmFpbmVk 31070\nIGdvYWxpZQ== 31071\nIEd1aWRlbGluZXM= 31072\nIEFtbW8= 31073\nIFBlYXJzb24= 31074\nIHRheGVk 31075\nIGZldHVz 31076\nUmVzcG9uc2U= 31077\nIEFsZXhpcw== 31078\ndGhpYQ== 31079\nR3V5 31080\nIHJlY29uc3RydWN0 31081\nIGV4dHJlbWVz 31082\nIGNvbmNsdWRpbmc= 31083\nIFBlZw== 31084\nb29rcw== 31085\nIGRlZHVjdGlvbnM= 31086\nUm9zZQ== 31087\nIGdyb3VuZGJyZWFraW5n 31088\nIFRhcmc= 31089\n44OB 31090\nIFJldmU= 31091\ncmVzb3VyY2U= 31092\nIG1vb25z 31093\nIGVsZWN0cm9tYWduZXRpYw== 31094\nIGFtaWRzdA== 31095\nIFZpa3Rvcg== 31096\nTkVTUw== 31097\nQkFDSw== 31098\nIGNvbW11dGU= 31099\nIEFuYWhlaW0= 31100\nIGZsdWN0dWF0aW9ucw== 31101\nNjQw 31102\nIG5vb2RsZXM= 31103\nIENvcGVuaGFnZW4= 31104\nIFRpZGU= 31105\nIEdyaXp6 31106\nIFNFRQ== 31107\nIHBpcGVsaW5lcw== 31108\nIHNjYXJz 31109\nZW5kbw== 31110\nYWd1cw== 31111\nIEVURg== 31112\nLyM= 31113\nIEJlY29tZQ== 31114\nNDQ4 31115\nIHZpc2M= 31116\nIFJlY29tbWVuZGVk 31117\nIGp1bXBlcg== 31118\nIGNvZ25pdGlvbg== 31119\nIGFzc2Fzc2lu 31120\nIHdpdG5lc3Npbmc= 31121\nIFNldHVw 31122\nIGxhYw== 31123\ndmlt 31124\nSVNN 31125\ncGFnZXM= 31126\nU1NM 31127\nMzU4 31128\nIGFkamVjdA== 31129\naW5kdXN0cmlhbA== 31130\nbG9yZQ== 31131\nY2hlcnk= 31132\nIGdsaXR0ZXI= 31133\nIGNhbGY= 31134\nRmxvcmlkYQ== 31135\nIHNwb2lsZXJz 31136\nIHN1Y2NlZWRz 31137\nIGNoYW50aW5n 31138\nIHNsb2dhbnM= 31139\nIFRyYWN5 31140\nVmlzaXQ= 31141\ncm9sb2d5 31142\nIG1vcm5pbmdz 31143\nIGxpbmVhZ2U= 31144\nIHNpcA== 31145\nIGludGVuc2VseQ== 31146\nIGZsb3VyaXNo 31147\nIFNsZWVwaW5n 31148\nIEZlbQ== 31149\nb3Jwb3I= 31150\nIEtsYW4= 31151\nIERhcnRo 31152\naGFjaw== 31153\nIE5pZWxzZW4= 31154\nIHR1bW9ycw== 31155\nIHByb2N1cmVtZW50 31156\nIFlvcmtzaGlyZQ== 31157\nIHJhaWRlZA== 31158\nS1k= 31159\nQW5uYQ== 31160\nIC8vWw== 31161\nIERpc29yZGVy 31162\nIE11c3Rhbmc= 31163\nIFdlbg== 31164\nIFRyeWluZw== 31165\nc3E= 31166\nIGRlbGl2ZXJpZXM= 31167\nIHNodXR0ZXI= 31168\nIGNlcmVicmFs 31169\nIGJpcG9sYXI= 31170\nIENO 31171\nbGFzcw== 31172\namV0 31173\nIGRlYmF0aW5n 31174\nPjo= 31175\nIGVhZ2xl 31176\nZ3JhZGVz 31177\nIERpeG9u 31178\nVUdD 31179\nTUFT 31180\nIERyYWNv 31181\nIE1hY2hpbmVz 31182\nYWZmZXI= 31183\nIGVtYW4= 31184\nwrI= 31185\ncHJvbg== 31186\nIEd5bQ== 31187\nIGNvbXBhcmF0aXZlbHk= 31188\nIFRyaWJ1bmFs 31189\nUFJP 31190\nIGxleA== 31191\nIGZlcnRpbGU= 31192\nIGRlcHJlc3Npbmc= 31193\nIHN1cGVyZmljaWFs 31194\nZXNzZW50aWFs 31195\nIEh1bnRlcnM= 31196\nZ3A= 31197\nIHByb21pbmVuY2U= 31198\nTGliZXI= 31199\nIEFuY2VzdA== 31200\nb3RlY2hub2xvZ3k= 31201\nIG1vY2tpbmc= 31202\nIFRyYWZm 31203\nlpo= 31204\nTWVkaXVt 31205\nSXJhcQ== 31206\nIHBzeWNoaWF0cmlzdA== 31207\nUXVhbnRpdHk= 31208\nIExlY3Q= 31209\nIG5vaXN5 31210\nNTIw 31211\nR1k= 31212\nIHNsYXBwZWQ= 31213\nIE1UVg== 31214\nIHBhcmE= 31215\ncHVsbA== 31216\nTXVsdGlwbGU= 31217\nYXNoZXI= 31218\nIG5vdXI= 31219\nIFNlZw== 31220\nU3BlbGw= 31221\ndm91cw== 31222\nb3JkaWFs 31223\nU2VuaW9y 31224\nIEdvbGRiZXJn 31225\nIFBsYXNtYQ== 31226\nbmVlZA== 31227\nIG1lc3Nlbmdlcg== 31228\nZXJldA== 31229\nIHRlYW1lZA== 31230\nIGxpdGVyYWN5 31231\nIExlYWg= 31232\nIERveWxl 31233\nIGVtaXR0ZWQ= 31234\nVVg= 31235\nIGV2YWRl 31236\nIG1hemU= 31237\nIHdyb25nbHk= 31238\nIExhcnM= 31239\nIHN0ZXJlb3R5cGU= 31240\nIHBsZWRnZXM= 31241\nIGFyb21h 31242\nIE1FVA== 31243\nIGFjcmU= 31244\nIE9E 31245\nIGZm 31246\nIGJyZXdlcmllcw== 31247\nIEhpbHRvbg== 31248\ndW5kbGU= 31249\nIEthaw== 31250\nIFRoYW5rZnVsbHk= 31251\nIENhbnVja3M= 31252\naW5jdGlvbnM= 31253\nIEFwcGVhcnM= 31254\nIGNvZXI= 31255\nIHVuZGVybWluZWQ= 31256\ncm92ZXJz 31257\nQW5kcmU= 31258\nIGJsYXpl 31259\ndW1lcnM= 31260\nIGZhbWluZQ== 31261\nYW1waGV0YW1pbmU= 31262\ndWxrYW4= 31263\nQW1vdW50 31264\nIGRlc3BlcmF0aW9u 31265\nd2lraXBlZGlh 31266\nZGV2ZWxvcG1lbnQ= 31267\nIENvcmludGg= 31268\ndXNzaWE= 31269\nSmFja3Nvbg== 31270\nTEk= 31271\nTmF0aXZl 31272\nUnM= 31273\nT2hpbw== 31274\nIEthdGhsZWVu 31275\nRm9ydHVuYXRlbHk= 31276\nIGF0dGVuZGFudA== 31277\nIFByZWZlcnJlZA== 31278\nIERpZG4= 31279\nIFZz 31280\nTWlz 31281\nIHJlc3BvbmRlbnQ= 31282\nIGJvdW4= 31283\nc3RhYmxl 31284\nIHBhdmVk 31285\nIHVuZXhwbA== 31286\nIENoZW5leQ== 31287\nTE0= 31288\nIEN1bGw= 31289\nYmxvd24= 31290\nIGNvbmZyb250aW5n 31291\nb2Nlc2U= 31292\nc2VydmluZw== 31293\nV2k= 31294\nIExpdGh1YW5pYQ== 31295\nYW5uaQ== 31296\nIHN0YWxr 31297\naGQ= 31298\nIHZlbmVy 31299\nQVBI 31300\neW5jaHJvbm91cw== 31301\nVVJS 31302\ndW1hYmx5 31303\naGlzdG9yaWM= 31304\nSGFsZg== 31305\nSGF5 31306\nIHJlc2lsaWVuY2U= 31307\nc3BlY3Rpb24= 31308\nIGFiYW5kb25pbmc= 31309\nT2Jz 31310\nIERlYmJpZQ== 31311\nIGdyYWRpZW50 31312\nIFBsYWludA== 31313\nIENhbmFs 31314\nQVJDSA== 31315\nIGV4cGFuc2l2ZQ== 31316\nIGZ1bmc= 31317\nIGJvdW5jZWQ= 31318\nVW5k 31319\nIHByZWNhdXRpb25z 31320\nIGNsYXJpZmljYXRpb24= 31321\nIGRhZ2dlcg== 31322\nIGdyaXBz 31323\nIMK1 31324\nIFJpdmVyYQ== 31325\nIFVuZGVhZA== 31326\naXNpdGVz 31327\nIEZJUlNU 31328\nw7Fv 31329\nYXVkaQ== 31330\nIGhvc3RhZ2Vz 31331\nIGNvbXBsaWFudA== 31332\nIGFsdW1uaQ== 31333\nU2V2ZW4= 31334\nIGN5YmVyc2VjdXJpdHk= 31335\nZWl0aGVy 31336\nQ29sbGVjdA== 31337\nIGludmFyaWFibHk= 31338\nIFNvY2k= 31339\nIGxhd21ha2Vy 31340\nIGFsZQ== 31341\nIFBlcnNvbmFsbHk= 31342\nTmF6aQ== 31343\nIGN1c3RvbWl6YXRpb24= 31344\nIFByb2M= 31345\nIFNhc2thdGNoZXdhbg== 31346\nZWF0dXJpbmc= 31347\nIHNwYXJlZA== 31348\nIGRpc2NvbnRpbnVlZA== 31349\nIGNvbXB1dGF0aW9uYWw= 31350\nIE1vdG9yb2xh 31351\nIHN1cHJlbWFjaXN0 31352\nZ292ZXJubWVudGFs 31353\nIHBhcmFkaXNl 31354\nIERvd25pbmc= 31355\nIE5pa29u 31356\nIGNhdGFseXN0 31357\nYmVycmE= 31358\nVG9yb250bw== 31359\nODc1 31360\nYmV0YQ== 31361\nIE1hY3Jvbg== 31362\nIHVucmVhbGlzdGlj 31363\ndmVjdG9y 31364\nIFZlaGljbGVz 31365\naXRpdmVuZXNz 31366\nIFJW 31367\nIENvbGJlcnQ= 31368\nc2lu 31369\nb2pp 31370\nZW50aW4= 31371\nIEtyaXNo 31372\naGVsbG8= 31373\nZmZpZWxk 31374\nb2t5 31375\nIFRhdGU= 31376\nIG1hcGxl 31377\nIGFpZHM= 31378\nY2hlbWljYWw= 31379\nMzM0 31380\nbnV0cw== 31381\nIFdhcnA= 31382\nIHh4 31383\nIFJvYmI= 31384\ndW1lcm91cw== 31385\nXy1f 31386\nZnRpbWU= 31387\nIFZX 31388\nIHdpbmdlcg== 31389\nIERvbWU= 31390\ndG9vbHM= 31391\nIFBW 31392\nIEdlb3JnZXRvd24= 31393\nIGdlYXJlZA== 31394\nIGppaGFkaXN0cw== 31395\nIGNw 31396\nIHN0ZXJvaWRz 31397\nTW90aGVy 31398\nY2xlcm9zaXM= 31399\nIERSTQ== 31400\nbmVzaWE= 31401\nIGxpbmdlcg== 31402\nIGltbWVyc2l2ZQ== 31403\nIENPVU4= 31404\nIG91dHdlaWdo 31405\nZW5zdWFs 31406\nQmFuZA== 31407\nIHRyYW5zZm9ybXM= 31408\nbWF0Y2hlZA== 31409\ncHNvbnM= 31410\nIEp1ZGljaWFs 31411\nZmFjdG9y 31412\nIHJlZmVycmFs 31413\nIG9kZGx5 31414\nIFdlbmdlcg== 31415\nQnJpbmc= 31416\nIEJvd3M= 31417\nNjAy 31418\nSUNMRQ== 31419\nIGxpb25z 31420\nIEFjYWRlbWlj 31421\nIFRob3Ju 31422\nIFJhaWRlcg== 31423\na2VmZWxsZXI= 31424\nU3RvcmFnZQ== 31425\nTG93ZXI= 31426\nIE9ydA== 31427\nIEVxdWFsaXR5 31428\nQUxU 31429\nIFNPQw== 31430\nVHlwZXM= 31431\nIGx5bg== 31432\nIEFzc2V0 31433\nY29hdA== 31434\nVFBQ 31435\nQ1ZF 31436\nIFBpb25lZXI= 31437\nYXBwbGljYXRpb24= 31438\nTW9kZXJu 31439\nIEhL 31440\nRW52aXJvbm1lbnQ= 31441\nQWxyaWdodA== 31442\nUmFpbg== 31443\nSVBQ 31444\nIFNoaWl0ZQ== 31445\nIG1vdW5k 31446\nIEFiaWxpdGllcw== 31447\nY29uZGl0aW9u 31448\nU3RhZmY= 31449\nIGNvbXBldGVuY2U= 31450\nIE1vb3I= 31451\nIERpYWJsbw== 31452\nIHdpdGhoZWxk 31453\nIG9zdGVuc2libHk= 31454\nIEJyb20= 31455\nIG1zZw== 31456\nIGRlbm9taW4= 31457\nIFJlZmVyZW5jZXM= 31458\nIEZQ 31459\nIHBsdW5nZWQ= 31460\nIHBhbXBo 31461\nbW92aW5n 31462\nY2VudHJhbA== 31463\nIGRvd25yaWdodA== 31464\nIGZhZGluZw== 31465\nVGFs 31466\nVHlw 31467\nIFRoeQ== 31468\ndWtlcw== 31469\naXRoZQ== 31470\nIG92ZQ== 31471\nIGJhdHRsZWQ= 31472\nIHNlYWZvb2Q= 31473\nIGZpZ3Vy 31474\nIFJE 31475\nY3JvcA== 31476\nIHNxdWFkcw== 31477\ne1w= 31478\n4Lk= 31479\nIEVo 31480\nIGludGVydmlld2luZw== 31481\nIFFpbg== 31482\nIGFzcGlyaW5n 31483\nUExJQw== 31484\nIGNsYXVzZXM= 31485\nIEdhc3Q= 31486\nIE5pcg== 31487\nIGx1Z2dhZ2U= 31488\nIGhvc2U= 31489\nIHN5c3RlbWQ= 31490\nIGRlc2NlbmRpbmc= 31491\nIFJldmlzZWQ= 31492\nIFJhaWxz 31493\nYWxpZ24= 31494\nNzA5 31495\nMzM3 31496\nIGZ1Zw== 31497\nY2hhcmdpbmc= 31498\ndGFncw== 31499\nIHV0ZXI= 31500\na2lzaA== 31501\nV0FSTklORw== 31502\nNDkw 31503\ncHJvZml0cw== 31504\nIHZveWFnZQ== 31505\nIGFjZQ== 31506\nIFZhbmd1YXJk 31507\nIFRhbmtz 31508\nIE11aw== 31509\nIDIyNg== 31510\nU2FmZQ== 31511\nQXJtb3I= 31512\nIHZvbGNhbmlj 31513\nIHdvbWI= 31514\nIE1JTA== 31515\nIGJlZ2lubmVy 31516\nIFJlY29nbg== 31517\nIEFBUA== 31518\nUExBWQ== 31519\nKSE= 31520\nIGRldGVjdGluZw== 31521\nY24= 31522\nIGJyZWFjaGVz 31523\nQmFzaWNhbGx5 31524\nIFBhZw== 31525\nIE11bmljaXBhbA== 31526\nIEluZGll 31527\nIExhZg== 31528\nIERpc2FibGU= 31529\nIE9sc29u 31530\nIHJlc3RyYWluZWQ= 31531\nIHJ1bGluZ3M= 31532\nIGh1bWFuZQ== 31533\nZXZlbnRz 31534\nIENpbmVtYQ== 31535\nZGlzcGxheVRleHQ= 31536\nIEhhdGNo 31537\nYWN0aW9uRGF0ZQ== 31538\nb25uYWlzc2FuY2U= 31539\nIGFzc2F1bHRpbmc= 31540\nIEx1Zw== 31541\nQ0hBVA== 31542\nIHZpZ29yb3Vz 31543\nIFBlcnNl 31544\nIGludG9sZXJhbmNl 31545\nIFNuYXBjaGF0 31546\nIFNoYXJrcw== 31547\nIGR1bW15 31548\nIERpYWdu 31549\nIEd1aXRhcg== 31550\naW1ldGVycw== 31551\nNDAz 31552\nUkVH 31553\nQXg= 31554\nIHNlcGFyYXRlcw== 31555\nIE1haG0= 31556\nIHR2 31557\namFo 31558\nT09M 31559\nQ2lyYw== 31560\nIFdpbmRzb3I= 31561\ndXNzaWFu 31562\nIGludHVpdGlvbg== 31563\nIGRpc2RhaW4= 31564\nIERvbm92YW4= 31565\nIDIyMQ== 31566\nRW1i 31567\nIGNvbmRlbW5pbmc= 31568\nIGdlbmVyb3NpdHk= 31569\nenp5 31570\nIHBhbnRpZXM= 31571\nIFByZXZlbnQ= 31572\nQWN0aW9uQ29kZQ== 31573\nQU5B 31574\nMzQy 31575\nZXh0ZXJuYWxBY3Rpb25Db2Rl 31576\nIHNwZWNpZnlpbmc= 31577\nIGNyeXN0YWxs 31578\nSmVyZQ== 31579\nIHJ1cHQ= 31580\nIEFwcHJlbnRpY2U= 31581\nIHByb2ZpbGluZw== 31582\n0Lo= 31583\nU3RyaWtl 31584\nIHNpZGVsaW5l 31585\nIG9ibGlnYXRlZA== 31586\nIG9jY3VsdA== 31587\nIGJ1cmVhdWNyYXRpYw== 31588\nYW50aWNhbGx5 31589\ncnVwdGVk 31590\nbmVnYXRpdmU= 31591\nIEV0aGlvcGlh 31592\nIENpdmlj 31593\nIGluc2lkZXJz 31594\nZWxpZ2libGU= 31595\nIFRWcw== 31596\nIEJBUg== 31597\nIFRJ 31598\naW9sb2dpc3Q= 31599\nIEFJUg== 31600\nIHN1YnN0aXR1dGVk 31601\nQXJhYg== 31602\nIFNhdWw= 31603\nIFlvZw== 31604\ncHJlbQ== 31605\nIGJ1aWxkZXJz 31606\nIHN0YXRpb25hcnk= 31607\nIGRvdWJ0ZnVs 31608\nIHZpZ29yb3VzbHk= 31609\nIHRocmlsbGluZw== 31610\nUGh5c2ljYWw= 31611\nIENhcmV5 31612\nIEh5ZHJh 31613\nZ2VvbmluZw== 31614\nIFNseQ== 31615\neXRvbg== 31616\nIGJvcnJvd2Vycw== 31617\nIFBhcmtpbnNvbg== 31618\nIOs= 31619\nIEphbWFpY2E= 31620\nIHNhdGly 31621\nIGluc3VyZ2VudHM= 31622\nIEZpcm0= 31623\nIGlzb3Q= 31624\nIEthcm4= 31625\nb3VybmluZw== 31626\nYWtlbnM= 31627\nZG9jcw== 31628\nbGl0dGxl 31629\nIE1vbmFjbw== 31630\nQ0xBU1M= 31631\nVHVya2V5 31632\nTHk= 31633\nIENvbmFu 31634\nYXNzaWM= 31635\nIHN0YXJyZWQ= 31636\nIFBhY2Vycw== 31637\nZXRpZXM= 31638\nIHRpcHBpbmc= 31639\nTW9vbg== 31640\nIFJ3 31641\nc2FtZQ== 31642\nIGNhdml0eQ== 31643\nIGdvb2Y= 31644\nIFpv 31645\nU2hvY2s= 31646\ndW1tZXI= 31647\nIGVtcGhhc2l6ZXM= 31648\nIHJlZ3JldHQ= 31649\nIG5vdmVsdHk= 31650\nIGVudnk= 31651\nIFBhc3NpdmU= 31652\ncnc= 31653\nNTA1 31654\nIGluZGlmZmVyZW50 31655\nIFJpY2E= 31656\nIEhpbXNlbGY= 31657\nIEZyZWRkaWU= 31658\nIGFkaXA= 31659\n5LiA 31660\nIGJyZWFrb3V0 31661\nIGh1cnJpZWQ= 31662\nIEh1YW5n 31663\nIERpc2s= 31664\nIHJvYW1pbmc= 31665\nPz8/Pz8tPz8/Pz8t 31666\nVVY= 31667\nIFJpY2t5 31668\nIFNpZ21h 31669\nIG1hcmdpbmFsaXplZA== 31670\nIGVkaXRz 31671\nIDMwNA== 31672\nbWVtb3J5 31673\nIHNwZWNpbWVu 31674\nMjkz 31675\n44Gv 31676\nIHZlcnRpY2FsbHk= 31677\nIGF1ZGl0aW9u 31678\nIEhlY2s= 31679\nIGNhc3Rlcg== 31680\nIEhvbGRpbmdz 31681\nYWRhbA== 31682\nIENyb24= 31683\nIExpYW0= 31684\nIGRlZmxlY3Q= 31685\nUGljaw== 31686\nIERlYnVn 31687\nUkVG 31688\nIHZlcnNhdGlsaXR5 31689\nb3RoZXM= 31690\nY2xhc3NpZmllZA== 31691\nIE1haGFy 31692\nIEhvcnQ= 31693\nQ291bnRlcg== 31694\nc3Rhc3k= 31695\nbm90aWNlZA== 31696\nMzMx 31697\nIFNoaW0= 31698\nZnVjaw== 31699\nIEJpZQ== 31700\nIGFpcmluZw== 31701\nIFByb3RlaW4= 31702\nIEhvbGRpbmc= 31703\nIHNwZWN0YXRvcnM= 31704\naWxpYXRlZA== 31705\nIFRoYXRjaGVy 31706\nbm9zaXM= 31707\n44O844Oz 31708\nVGVsZQ== 31709\nQm9zdG9u 31710\nIFRlbXBs 31711\nc3RheQ== 31712\nIGRlY2xhcmF0aW9ucw== 31713\nNDc5 31714\nVm9sdW1l 31715\nIERlc2lnbmVy 31716\nIE92ZXJ3YXRjaA== 31717\naWRhZQ== 31718\nIG9ud2FyZHM= 31719\nIG5ldHM= 31720\nIE1hbmlsYQ== 31721\ncGFydGljdWxhcmx5 31722\nIHBvbGl0aWM= 31723\nb290aGVy 31724\nIHBvcnRyYWl0cw== 31725\nIHBhdmVtZW50 31726\nY2ZmZmY= 31727\nIHNhaW50cw== 31728\nIGJlZ2lubmVycw== 31729\nRVNQTg== 31730\nIHNob3J0Y29taW5ncw== 31731\n4pWQ4pWQ 31732\nIGNvbWV0 31733\nIE9yZ2FuaWM= 31734\ncXVlbA== 31735\nIGhvc3BpdGFsaXplZA== 31736\nQnJlYWs= 31737\nIHBlZWw= 31738\nZHlsaWI= 31739\nYXNweA== 31740\ndXJhbmNlcw== 31741\nIFRJTQ== 31742\nUGc= 31743\nIHJlYWRhYmxl 31744\nIE1hbGlr 31745\nIG11enpsZQ== 31746\nIGJlbmNobWFya3M= 31747\nZGFs 31748\nIFZhY2M= 31749\nIEhpY2tz 31750\nNjA5 31751\nIEJpYmxpY2Fs 31752\naGVuZw== 31753\nIG92ZXJsb2Fk 31754\nIENpdmlsaXphdGlvbg== 31755\nIGltbW9yYWw= 31756\nIGZyaWVz 31757\n44KS 31758\nIHJlcHJvZHVjZWQ= 31759\nIGZvcm11bGF0aW9u 31760\nanVn 31761\naXJleg== 31762\nZ2Vhcg== 31763\nIGNvYWNoZWQ= 31764\nTXBTZXJ2ZXI= 31765\nIFNK 31766\nIEt3 31767\nSW5pdA== 31768\nZGVhbA== 31769\nIE9ybw== 31770\nIExva2k= 31771\nIFNvbmdz 31772\nIDIzMg== 31773\nIExvdWlzZQ== 31774\nYXNpb25hbGx5 31775\nIHVuY29uZA== 31776\nb2xseXdvb2Q= 31777\nIHByb2dyZXNzaXZlcw== 31778\nIEVub3VnaA== 31779\nIERvZQ== 31780\nIHdyZWNrYWdl 31781\nIGJydXNoZWQ= 31782\nIEJhc2VUeXBl 31783\nIHpvbmluZw== 31784\naXNoYWJsZQ== 31785\naGV0aWNhbGx5 31786\nIENhdWN1cw== 31787\nIEh1ZQ== 31788\nIGthcm1h 31789\nIFNwb3J0aW5n 31790\nIHRyYWRlcg== 31791\nIHNlZW1pbmc= 31792\nIENhcHR1cmU= 31793\nNDMw 31794\nYmlzaA== 31795\nIHR1bmVz 31796\nIGluZG9vcnM= 31797\nIFNwaGVyZQ== 31798\nIERhbmNpbmc= 31799\nVEVSTg== 31800\nIG5vYg== 31801\nIEdTVA== 31802\nbWFwcw== 31803\nIHBlcHBlcnM= 31804\nRml0 31805\nIG92ZXJzZWVz 31806\nIFJhYmJp 31807\nIFJ1bGVy 31808\ndmVydGlzaW5n 31809\nb2ZmaWNl 31810\neHh4 31811\nIHJhZnQ= 31812\nQ2hhbmdlZA== 31813\nIHRleHRib29rcw== 31814\nTGlua3M= 31815\nIE9tbg== 31816\n44CR 31817\nIGluY29udmVuaWVuY2U= 31818\nIERvbmV0c2s= 31819\nPX4= 31820\nIGltcGxpY2l0bHk= 31821\nIGJvb3N0cw== 31822\nIEJvbmVz 31823\nIEJvb20= 31824\nQ291cnRlc3k= 31825\nIHNlbnNhdGlvbmFs 31826\nQU5Z 31827\nIGdyZWVkeQ== 31828\nZWRlbg== 31829\nIGluZXhwZXI= 31830\nIExlcg== 31831\nIFZhbGU= 31832\nIHRpZ2h0ZW4= 31833\nIEVBUg== 31834\nIE51bQ== 31835\nIGFuY2VzdG9y 31836\nU2VudA== 31837\nIEhvcmRl 31838\ndXJnaWNhbA== 31839\nYWxsYWg= 31840\nIHNhcA== 31841\nYW1iYQ== 31842\nIFNwcmVhZA== 31843\ndHdpdGNo 31844\nIGdyYW5kc29u 31845\nIGZyYWN0dXJl 31846\nIG1vZGVyYXRvcg== 31847\nIFNldmVudGg= 31848\nIFJldmVyc2U= 31849\nIGVzdGltYXRpb24= 31850\nQ2hvb3Nl 31851\nIHBhcmFjaA== 31852\nIGJhcnJpYw== 31853\n44CQ 31854\nIGNvbXBhc3M= 31855\nIGFsbGVyZ2lj 31856\n4oCV 31857\nT1RIRVI= 31858\nZXJyaWxsYQ== 31859\nIHdhZ29u 31860\nIHppbmM= 31861\nIHJ1YmJlZA== 31862\nIEZ1bGxlcg== 31863\nIEx1eGVtYm91cmc= 31864\nIEhvb3Zlcg== 31865\nIGxpYXI= 31866\nIEV2ZW5pbmc= 31867\nIENvYmI= 31868\nZXN0ZWVt 31869\nIHNlbGVjdG9y 31870\nIEJyYXds 31871\naXNhbmNl 31872\nIEVr 31873\nIHRyb29w 31874\nIGd1dHM= 31875\nIEFwcGVhbA== 31876\nIFRpYmV0YW4= 31877\nIHJvdXRpbmVz 31878\nIE1lbnQ= 31879\nIHN1bW1hcml6ZWQ= 31880\nc3RlYW1hcHBz 31881\nIHRyYW5xdQ== 31882\nIDE5Mjk= 31883\nb3Jhbg== 31884\nIEF1dGhlbnQ= 31885\nIGdtYXh3ZWxs 31886\nIGFwcHJlaGVucw== 31887\nIHBvZW1z 31888\nIHNhdXNhZ2U= 31889\nIFdlYnN0ZXI= 31890\ndXJ1cw== 31891\nIHRoZW1lZA== 31892\nIGxvdW5nZQ== 31893\nIGNoYXJnZXI= 31894\nU3BvaWxlcg== 31895\nIHNwaWxsZWQ= 31896\naG9n 31897\nIFN1bmRlcg== 31898\nIEFpbg== 31899\nIEFuZ3J5 31900\nIGRpc3F1YWw= 31901\nIEZyZXF1ZW5jeQ== 31902\nIEV0aGVybmV0 31903\nIGhlbHBlcg== 31904\nUGVyY2VudA== 31905\nIGhvcnJpZnlpbmc= 31906\nIGFpbA== 31907\nIEFsbGFu 31908\nRUVF 31909\nIENyb3NzaW5n 31910\nNDQ5 31911\nIGhvbG9n 31912\nIFB1enpsZXM= 31913\nIEdvZXM= 31914\nZXJlbm4= 31915\nNjA0 31916\n44GP 31917\nIFJhZmFlbA== 31918\nIGF0dGVu 31919\nIEVtYW51ZWw= 31920\nIHVwcm8= 31921\nIFN1c3A= 31922\nUHN5Y2g= 31923\nIFRyYWluZXI= 31924\nIE5FUw== 31925\nIEh1bnRz 31926\nYmVjdWU= 31927\nIGNvdW5zZWxvcg== 31928\nUnVsZQ== 31929\nIHRveGlucw== 31930\nIGJhbm5lcnM= 31931\ncmlmaWNl 31932\nIGdyZWV0aW5n 31933\nIGZyZW56eQ== 31934\nIGFsbG9jYXRl 31935\nICop 31936\nZXhwcg== 31937\nNTAz 31938\nIENoaWNr 31939\nIFRvcm4= 31940\nIGNvbnNvbGlkYXRpb24= 31941\nIEZsZXRjaGVy 31942\nc3dpdGNo 31943\nZnJhYw== 31944\nY2xpcHM= 31945\nIE1jS2lu 31946\nIEx1bmFy 31947\nTW9udGg= 31948\nSVRDSA== 31949\nIHNjaG9sYXJseQ== 31950\ncmFwZWQ= 31951\nMzk4 31952\nIDE5MTA= 31953\nIGVncmVn 31954\nIGluc2VjdXJl 31955\nIHZpY3RvcmlvdXM= 31956\nY2ZmZmZjYw== 31957\nIHNpbmdsZWQ= 31958\nIGVsdmVz 31959\nIFdvbmQ= 31960\nYnVyc3Q= 31961\nIGNhbW91Zmw= 31962\nIEJMQUNL 31963\nIGNvbmRpdGlvbmVk 31964\n54k= 31965\nYW5zd2VyZWQ= 31966\nIGNvbXB1bHNvcnk= 31967\nYXNjaXN0 31968\nIHBvZGNhc3Rz 31969\nIEZyYW5rZnVydA== 31970\nYm5i 31971\nIG5lb2xpYmVyYWw= 31972\nIEtleWJvYXJk 31973\nIEJlbGxl 31974\nd2FybQ== 31975\nIHRydXN0cw== 31976\nIGluc3VyZWQ= 31977\nIEJ1Y2M= 31978\ndXNhYmxl 31979\nNjA3 31980\nIFBsYWlucw== 31981\nIDE4OTA= 31982\nIHNhYm90YWdl 31983\nIGxvZGdlZA== 31984\nZmVsdA== 31985\nIGdh 31986\nIE5hcmM= 31987\nIFNhbGVt 31988\nIHNldmVudHk= 31989\nIEJsYW5r 31990\ncG9ja2V0 31991\nIHdoaXNwZXI= 31992\nIG1hdGluZw== 31993\nb21pY3M= 31994\nIFNhbG1hbg== 31995\nIEthZA== 31996\nIGFuZ2VyZWQ= 31997\nIGNvbGxpc2lvbnM= 31998\nIGV4dHJhb3JkaW5hcmlseQ== 31999\nIGNvZXJjaW9u 32000\nR2hvc3Q= 32001\nYmlyZHM= 32002\n6IA= 32003\na29r 32004\nIHBlcm1pc3NpYmxl 32005\nYXZvcmFibGU= 32006\nIHBvaW50ZXJz 32007\nIGRpc3NpcA== 32008\nYWNp 32009\nIHRoZWF0cmljYWw= 32010\nIENvc21pYw== 32011\nIGZvcmdldHRpbmc= 32012\nIGZpbmFsaXplZA== 32013\n5aSn 32014\neW91dA== 32015\nbGlicmFyeQ== 32016\nIGJvb21pbmc= 32017\nIEJlbGlldmU= 32018\nIFRlYWNoZXI= 32019\nIExpdg== 32020\nIEdPT0RNQU4= 32021\nIERvbWluaWNhbg== 32022\nT1JFRA== 32023\nIFBhcnRpZXM= 32024\nIHByZWNpcGl0YXRpb24= 32025\nIFNsb3Q= 32026\nUm95 32027\nIENvbWJpbmVk 32028\nIGludGVncmF0aW5n 32029\nIGNocm9tZQ== 32030\nIGludGVzdGluYWw= 32031\nIFJlYmVsbA== 32032\nIG1hdGNodXBz 32033\nIGJsb2NrYnVzdGVy 32034\nIExvcmVu 32035\nIExldnk= 32036\nIHByZWFjaGluZw== 32037\nIFNlbmRpbmc= 32038\nIFB1cnBvc2U= 32039\ncmF4 32040\nZmlm 32041\nIGF1dGhvcml0YXRpdmU= 32042\nIFBFVA== 32043\nYXN0aWNhbA== 32044\nIGRpc2hvbg== 32045\nIGNoYXR0aW5n 32046\nICIkOi8= 32047\nQ29ubmVjdGlvbg== 32048\nIHJlY3JlYXRl 32049\nIGRlbGlucXU= 32050\nIGJyb3Ro 32051\nIERpcnR5 32052\nIEFkbWlu 32053\nem1hbg== 32054\nIHNjaG9sYXJzaGlwcw== 32055\nIDI1Mw== 32056\nY29udGFjdA== 32057\nYWxzYQ== 32058\nNzY3 32059\nY3JlZW4= 32060\nYWJiYWdl 32061\nIDE5MTU= 32062\nIGJsZW5kZWQ= 32063\nIGFsYXJtZWQ= 32064\nTGFuZ3VhZ2U= 32065\nMzU2 32066\nIGJsZW5kcw== 32067\nIENoYW5nZWQ= 32068\nV29sZg== 32069\nIGhlcGF0 32070\nQ3JlYXRpbmc= 32071\nIHBlcnNlY3V0 32072\nIHN3ZWV0bmVzcw== 32073\nYXJ0ZQ== 32074\nIGZvcmZlaXR1cmU= 32075\nIFJvYmVydG8= 32076\naW1wcm8= 32077\nTkZM 32078\nIE1hZ25ldA== 32079\nRGV0YWlsZWQ= 32080\nIGluc2lnbmlmaWNhbnQ= 32081\nIFBPTElU 32082\nIEJCUQ== 32083\nIENQUw== 32084\nIHNlYXc= 32085\nYW1pbmVy 32086\nbUw= 32087\nZW5kaWY= 32088\nZmluYWxz 32089\nIDI2NQ== 32090\ndWlzaA== 32091\nIH0p 32092\nIFByb2JsZW1z 32093\nIGVtYmxlbQ== 32094\nIHNlcmlvdXNuZXNz 32095\nIHBhcnNpbmc= 32096\nIHN1YnN0aXR1dGlvbg== 32097\nIHByZXNzdXJlZA== 32098\nIHJlY3ljbGVk 32099\nYWxlYg== 32100\nUnVieQ== 32101\nIHByb2ZpY2llbmN5 32102\nRHJpdmVy 32103\nIFdlc3Rlcg== 32104\nOic= 32105\nQUZUQQ== 32106\nIG1hbnRsZQ== 32107\nIENsYXl0b24= 32108\nZmxhZw== 32109\nIHByYWN0aXRpb25lcg== 32110\nY292ZXJlZA== 32111\nIFN0cnVjdA== 32112\nYWRkYWZp 32113\nNDI1 32114\nIFRvd25zaGlw 32115\nIEh5ZHJv 32116\nTG91aXM= 32117\nMzQz 32118\nIGNvbmRv 32119\nIFRhbw== 32120\nIHV0aWxpemF0aW9u 32121\nIG5hdXNlYQ== 32122\nIERlbXM= 32123\ncmlkZ2Vz 32124\ncGF1c2U= 32125\nIGZvcm11bGFz 32126\nIGNoYWxsZW5nZXI= 32127\nMzc2 32128\nIGRlZmVjdGl2ZQ== 32129\nIFJhaWx3YXk= 32130\nIFB1Yk1lZA== 32131\nIHlvZ3VydA== 32132\nbGJz 32133\nIE5vcmZvbGs= 32134\nT1BF 32135\nIE1vb2R5 32136\nIGRpc3RyaWJ1dG9y 32137\nIHNjcm9sbHM= 32138\nIGV4dHJhY3Rz 32139\nU3Rhbg== 32140\nIHZpYWJpbGl0eQ== 32141\nIGV4cG9zZXM= 32142\nIHN0YXJ2YXRpb24= 32143\nIFN0ZXBz 32144\nIERvZGQ= 32145\nZmV3 32146\nU1RE 32147\nMzMy 32148\nIGNsb3N1cmVz 32149\nIGNvbXBsZW1lbnRhcnk= 32150\nIFNhc2hh 32151\ndW1weQ== 32152\nIG1vbmV0 32153\nIGFydGljdWxhdGU= 32154\nIERvY3Q= 32155\na2lsbGVy 32156\nIHNjcmlt 32157\nIDI2NA== 32158\nIHByb3N0aXR1dGVz 32159\nIHNldmVyZWQ= 32160\nIGF0dGFjaG1lbnRz 32161\nIGNvb2xlZA== 32162\nTGV2 32163\nIEZhbGs= 32164\nZmFpbA== 32165\nIHBvbGljZW1hbg== 32166\nIERhZw== 32167\nIHByYXllZA== 32168\nIEtlcm5lbA== 32169\nIGNsdXQ= 32170\nIGNhdGg= 32171\nIGFub21hbHk= 32172\nU3Rvcm0= 32173\nZW1ha2Vy 32174\nIEJyZWFrZmFzdA== 32175\ndWxp 32176\nb2lyZQ== 32177\nSko= 32178\naHo= 32179\nT3BlcmF0aW9u 32180\nIFNpY2s= 32181\nMzU0 32182\nIEd1YXRlbWFsYQ== 32183\nUmF0ZQ== 32184\nIGV4cG9zdXJlcw== 32185\nZmFjZXM= 32186\nIEFyY2hhZQ== 32187\ncmFm 32188\nIE1pYQ== 32189\nIDIwMjU= 32190\nIG9wYXF1ZQ== 32191\nIGRpc2d1aXNlZA== 32192\nIEhlYWRxdWFydGVycw== 32193\nU2Fo 32194\nIHBvdHM= 32195\nOTc4 32196\nIE1hbGY= 32197\nIGZyb3duZWQ= 32198\nIHBvaXNvbm91cw== 32199\nIENvbnZlcnM= 32200\nZWVrcw== 32201\nIGNyYWI= 32202\nLiIi 32203\nIHRyZWFzb24= 32204\nIHJhbmM= 32205\nIGVzY2FsYXRpbmc= 32206\nIHdhcnI= 32207\nIG1vYnM= 32208\nIGxhbXBz 32209\nIFN1bnNoaW5l 32210\nIEJydW5zd2ljaw== 32211\nUGhvbmVz 32212\nIHNwZWxsZWQ= 32213\nIFNraXA= 32214\nIDIwNTA= 32215\nIDE5MTE= 32216\nIFBsdXRv 32217\nIEFtZW5k 32218\nIG1lYXRz 32219\nMzg3 32220\nIHN0b21w 32221\nIFpob3U= 32222\nIExldmlhdGhhbg== 32223\nIEhhemFyZA== 32224\nYWR2 32225\nIE9yd2VsbA== 32226\nIGFsb3Vk 32227\nIGJ1bXBlcg== 32228\nIEFuYXJjaA== 32229\ndWJ1bnR1 32230\nIFNlcmlvdXM= 32231\nZml0dGluZw== 32232\nIE9wdGlvbmFs 32233\nIENlY2ls 32234\nUkVBTQ== 32235\nIHNlcm90b25pbg== 32236\nIGN1bHRpdmF0ZQ== 32237\nYWdvZ3Vl 32238\nfVw= 32239\nIG1vc3F1ZXM= 32240\nIFN1bm55 32241\nIHJlYWN0aXZl 32242\ncmV2b2x1dGlvbg== 32243\nIEx1cA== 32244\nIEZlZG9yYQ== 32245\nIGRlZmVuc2VtYW4= 32246\nIFZJRA== 32247\naXN0aW5l 32248\nIGRyb3duaW5n 32249\nIEJyb2FkY2FzdGluZw== 32250\nIHRocmlsbGVy 32251\nIFNjeQ== 32252\nIGFjY2VsZXJhdGluZw== 32253\nIGRpcmVjdHM= 32254\nb2RpZWQ= 32255\nYmlrZQ== 32256\nZHVyYXRpb24= 32257\nIHBhaW5mdWxseQ== 32258\nUmVkZA== 32259\nIHByb2R1Y3Rpb25z 32260\nIGdhZw== 32261\nIHdoaXN0 32262\nIHNvY2s= 32263\nIGluZmluaXRlbHk= 32264\nIENvbmNlcm4= 32265\nIENpdGFkZWw= 32266\nIGxpZXU= 32267\nIGNhbmRsZXM= 32268\nb2dlbmVvdXM= 32269\nYXJnZXI= 32270\nIGhlYXZlbmx5 32271\naW5mbGFtbWF0b3J5 32272\nUGVyZm9ybWFuY2U= 32273\nQ3M= 32274\ncnVjdG9zZQ== 32275\nYXpha2k= 32276\nIHBlc3NpbQ== 32277\nIGluZmVyZW5jZQ== 32278\nIHBvd2Q= 32279\nIFpvZQ== 32280\nIHBhaW50cw== 32281\nIGRheno= 32282\ncHRh 32283\nLS0tLS0tLS0tLS0= 32284\nIGluc3Bpcg== 32285\nIEV4cGVyaW1lbnRhbA== 32286\nIEtuaWZl 32287\ncmVnb3I= 32288\nYm9ycw== 32289\nIHNob3dlcnM= 32290\ncm9tZWRh 32291\nIHNhaW50 32292\nIGJlbmlnbg== 32293\nIEppYW5n 32294\nIGVudmlzaW9uZWQ= 32295\nIHNocm91ZA== 32296\nSUZU 32297\nSE8= 32298\nIHNodWZm 32299\nIElDQw== 32300\nIHNlZ3JlZw== 32301\nIHJldmlzaXQ= 32302\naWdodGhvdXNl 32303\nTGk= 32304\nIHN1YnN0cmF0ZQ== 32305\nIFNlYXM= 32306\nIFJld2FyZA== 32307\nIEhlcA== 32308\nIEJyYXNz 32309\nc2Jt 32310\nIGVsaW1pbmF0ZXM= 32311\nIHN0YW1pbmE= 32312\nIFZBVA== 32313\nIExvYW4= 32314\nIGNvbnN0cmFpbnQ= 32315\nIGFwcHJvcHJpYXRlZA== 32316\nIHBlcw== 32317\nIEFMRQ== 32318\ncmFuZ2luZw== 32319\nIDQwNA== 32320\nMzky 32321\nIGludGVsbGVjdHVhbHM= 32322\nYWNodQ== 32323\nIHJlc3RydWN0dXJpbmc= 32324\nIExldmlu 32325\nIHJ1bmVz 32326\nIGRlbGlnaHRmdWw= 32327\nIGNhcmJvaHlkcmF0ZXM= 32328\nIE1vZGVscw== 32329\nIEV4cG8= 32330\nIHRyYW5zcG9ydGluZw== 32331\nYWxsb2M= 32332\nIHJpbmdpbmc= 32333\nU2Ftc3VuZw== 32334\nIHNjYXJjZWx5 32335\nIFVSTHM= 32336\nIE1BUw== 32337\nIHByb3RvdHlwZXM= 32338\nIG5hcnJhdG9y 32339\nIENQVXM= 32340\nY2Ru 32341\nIEJhcnRvbg== 32342\nIGRlY2lkZWRseQ== 32343\nIFNodQ== 32344\naXhpcg== 32345\nb2Npb3Vz 32346\nIE15c3Q= 32347\nTmludGVuZG8= 32348\nIHJldXNl 32349\nIGZvcmdpdmVu 32350\nRmV3 32351\naW5pY2Fs 32352\nbmF0 32353\nIHNlYW1sZXNz 32354\nIEV2YQ== 32355\nIEVWRQ== 32356\nIEpP 32357\nbGFuZGVycw== 32358\nIHNvZnRlcg== 32359\nbmVnaWU= 32360\nIHRyYW5zaWVudA== 32361\nIG9yYml0YWw= 32362\nIGZ1bGZpbA== 32363\nIEtvbQ== 32364\nSG9wZWZ1bGx5 32365\nIGR5bmFtaWNhbGx5 32366\nIEh1bmdlcg== 32367\n5Zs= 32368\nIEFybWVuaWE= 32369\nZWxtYW4= 32370\nYmVydG8= 32371\nIHBpZ2U= 32372\nIElEcw== 32373\nbGltaXQ= 32374\nIHZlaW5z 32375\nIHNvYXJpbmc= 32376\ncGFja3M= 32377\nR29sZGVu 32378\nIENyYWI= 32379\naXN0b3I= 32380\nIFJQTQ== 32381\nICQk 32382\nZ3Jlc3Npb24= 32383\nIGppaGFkaXN0 32384\nIGdhbWJsZQ== 32385\nIGNhcmVn 32386\nIGluZmxhdGVk 32387\nRmFjZQ== 32388\nIEZpcmVhcm1z 32389\nIEVtbWFudWVs 32390\n4p0= 32391\nIHNob2Nrcw== 32392\nZ3JhYg== 32393\nIHNwbGVuZA== 32394\nIEhQVg== 32395\nYWJvcnRpb24= 32396\nQWJvdmU= 32397\nRW50aXR5 32398\ncGxheWVycw== 32399\nIGNvbW1lbmNlZA== 32400\ndWxlbmNl 32401\nIGZ1bGZpbGxtZW50 32402\nIGVtYm9kaW1lbnRz 32403\nIFdlbGZhcmU= 32404\nIGhhaWw= 32405\nIDxA 32406\ndHRlbg== 32407\nIGNhdGNoZXI= 32408\nIEphemVlcmE= 32409\nIHZvbGNhbm8= 32410\nIHN0YWJpbGl6ZQ== 32411\nIEhhbmRsZXI= 32412\nIGludGVuc2lmaWVk 32413\nIEFicmFtcw== 32414\nIGh1bWlsaWF0aW9u 32415\ncGFjZWQ= 32416\nNjA1 32417\nIENlbnRPUw== 32418\nU3BlY2lmaWM= 32419\nIGhlZWQ= 32420\nIENBTQ== 32421\nIEdhbGlsZQ== 32422\nRGll 32423\nIGFib2xpc2hlZA== 32424\nIFRob21zb24= 32425\nIFRlYWNoZXJz 32426\nIFdhc3M= 32427\nam9uZw== 32428\nIElTQk4= 32429\nIEFsbGllcw== 32430\nc2hha2U= 32431\n5bc= 32432\ndmljdA== 32433\nSG93YXJk 32434\nIGRlZW0= 32435\nIGV4Y2VlZGluZ2x5 32436\nIFNtYXJ0c3RvY2tz 32437\naWJl 32438\nIGRvb3J3YXk= 32439\nIGNvbXBldGVk 32440\naWdtYXQ= 32441\nIG5hdGlvbmFsaXN0cw== 32442\nIGdyb29t 32443\nIEtlZW4= 32444\nIGRpc3Bvc2FibGU= 32445\nZGVjbA== 32446\nIFRvbGtpZW4= 32447\nIFNjaGVtZQ== 32448\nIGJpb2Q= 32449\nIGF2aWQ= 32450\nIEVsb24= 32451\nYWdhcg== 32452\nIFRTQQ== 32453\nUm9tYW4= 32454\nIGFydGlmaWNpYWxseQ== 32455\nIGFkdmlzb3Jz 32456\nWEw= 32457\nIEluZmVybm8= 32458\nMzY2 32459\nIHRlZGlvdXM= 32460\nIFBob3RvZ3JhcGh5 32461\nIENhcnJpZQ== 32462\nIHRyb3Bl 32463\nIFNhbmRyYQ== 32464\nIGRlY2ltYWw= 32465\nUXVlZW4= 32466\nIEd1bmRhbQ== 32467\nIE9N 32468\nb3RlY2g= 32469\nTkJB 32470\nIDE5MzI= 32471\nIGVudHJlbmNoZWQ= 32472\nIE1hcmlvbg== 32473\nIGZyYXRlcm5pdHk= 32474\nTGFib3Vy 32475\nSGVucnk= 32476\nIGxhdGl0dWRl 32477\nRWl0aGVy 32478\nIGVuaGFuY2Vz 32479\nIFBvdGVudGlhbA== 32480\nIHNoaW5lcw== 32481\naWRhZA== 32482\nIGJyZWFkdGg= 32483\nIGNhcGFjaXRpZXM= 32484\nIPCfmYI= 32485\nIEJyb254 32486\nIHNleGVz 32487\nIGRpZmZlcmVudGlhdGlvbg== 32488\nIGhlYXZ5d2VpZ2h0 32489\nIFRhag== 32490\nZHJh 32491\nIG1pZ3JhdGU= 32492\nIGV4aGF1c3Rpb24= 32493\nIFJVTg== 32494\nZWxzaXVz 32495\nIEN1b21v 32496\nIGd1aXRhcnM= 32497\nIGNsb25lcw== 32498\nIFNvbWV3 32499\nIFByeQ== 32500\nLS0tLS0tLS0tLS0tLQ== 32501\nIHdhcnJhbnRlZA== 32502\nY3ljbGVz 32503\nIHNhbHZhZ2U= 32504\nIGRpc2tz 32505\nUkFOVA== 32506\nIE5HT3M= 32507\nIE1hcnRpYW4= 32508\nIjpbeyI= 32509\nIGFkZGljdHM= 32510\nb2p1cmU= 32511\naWxsZXQ= 32512\nIGFtYXppbmdseQ== 32513\nYXJ0bWVudHM= 32514\ncGl4ZWw= 32515\nIEdQVXM= 32516\nTGF5b3V0 32517\n6KM= 32518\nIFRhbWls 32519\nIEJhc2ls 32520\nIGltcGFydGlhbA== 32521\nIFN0cnVjdHVyZQ== 32522\nZm9yaw== 32523\nYnJ5Y2U= 32524\nIHJpZGdl 32525\nIEhhbWJ1cmc= 32526\ncmlvdXM= 32527\nIGJsaXR6 32528\nY2lnYXJldHRlcw== 32529\nIGNhbm5lZA== 32530\nNDAy 32531\nIGlyb25pY2FsbHk= 32532\nIGNvbXBhc3Npb25hdGU= 32533\nIEhhd2tpbnM= 32534\nLiM= 32535\nIENhdGhlZHJhbA== 32536\nIHJhbGxpZWQ= 32537\naW50ZXJuYWw= 32538\nIHF1b3Rh 32539\nc3Rha2Vz 32540\nVEVYVA== 32541\nbW9t 32542\nIGNvbXBsZXRlcw== 32543\nIDIzOA== 32544\nIHNocnVn 32545\n44OR 32546\nIE5pbnRo 32547\nIHJldmlzZQ== 32548\nIFByb3ZpZGVy 32549\nIHRyZWFjaGVy 32550\nIHF1YXNp 32551\nIFBSRVM= 32552\nIGRlcG9zaXRpb24= 32553\nIGNvbmZpZGVudGlhbGl0eQ== 32554\naXNzb3Jz 32555\nIGltYmFsYW5jZQ== 32556\nIHNwYW5uaW5n 32557\nIGFuZ3VsYXI= 32558\nIEN1bA== 32559\nY29tbXVuaWNhdGlvbg== 32560\nIE5vcmE= 32561\nIEdlbml1cw== 32562\nb3B0ZXI= 32563\nIHNhY2tlZA== 32564\nU3BvdA== 32565\nIGZpbmVseQ== 32566\nIENIUg== 32567\nMjgy 32568\nd2F2ZXM= 32569\nUGFsZXN0 32570\nIFJvaGluZw== 32571\nTkw= 32572\n6L8= 32573\nIHNoaXR0eQ== 32574\nIFNjYWxpYQ== 32575\nNDc1 32576\nUHJvZ3Jlc3M= 32577\nIHJlZmVyZW5jaW5n 32578\nIGNsYXNzcm9vbXM= 32579\nYWJlZQ== 32580\nIHNvZA== 32581\naGVzaW9u 32582\nNzA4 32583\nIFp1Y2tlcmJlcmc= 32584\nIEZpbmlzaA== 32585\nIFNjb3RpYQ== 32586\nIFNhdmlvcg== 32587\nIEluc3RhbGxhdGlvbg== 32588\nYW50aGE= 32589\nKC0= 32590\nIDMwMg== 32591\nIFB1bms= 32592\nIGNyYXRlcg== 32593\neW91dHU= 32594\nIHJvYXN0 32595\nIGluZmx1ZW5jaW5n 32596\nIGR1cA== 32597\nIEpS 32598\nIEdyYXY= 32599\nIHN0YXR1cmU= 32600\nIGJhdGhyb29tcw== 32601\nQXNpZGU= 32602\nV2lraQ== 32603\nbWVhbg== 32604\nIFphaw== 32605\nIE9uZXM= 32606\nIE5hdGg= 32607\nIGh5cGVydA== 32608\nIGNvbW1lbmNlbWVudA== 32609\nQ2l2aWw= 32610\nIG1vZGVyYXRlbHk= 32611\nIGRpc3RyaWJ1dG9ycw== 32612\nIGJyZWFzdGZlZWRpbmc= 32613\nIDk4MA== 32614\nIFNpaw== 32615\nIENpZw== 32616\nIEFNRVI= 32617\nUklQ 32618\nIENhcmVlcg== 32619\ndXN0aW5n 32620\nIG1lc3NlZA== 32621\nIGVo 32622\nIEplbnNlbg== 32623\nLyQ= 32624\nIGJsYWNrbWFpbA== 32625\nIGNvbnZlcnNpb25z 32626\nIHNjaWVudGlmaWNhbGx5 32627\nIG1hbnRyYQ== 32628\ncGF5aW5n 32629\nIGl2b3J5 32630\nIENvdXJ0cw== 32631\nT1VHSA== 32632\nYXVudGxldA== 32633\nU2VyaWFs 32634\nQnJvdw== 32635\nIEh1bmRyZWRz 32636\nMzIz 32637\nIHBlZQ== 32638\nIGxpbnV4 32639\nIHN1Ym1lcg== 32640\nIFByaW5jaXBhbA== 32641\nNDg1 32642\nIERTTA== 32643\nIENvdXNpbnM= 32644\nIGRvY3RyaW5lcw== 32645\nIEF0aGxldGljcw== 32646\nIDMxNQ== 32647\nIEthcm1h 32648\nIGF0dGVudA== 32649\ndXJnZXI= 32650\nIHByZXNjcmliZQ== 32651\nIGVuY2Fwcw== 32652\nIENhbWU= 32653\nIHNlY3JldGl2ZQ== 32654\nIENyaW1lcw== 32655\nZG4= 32656\nQ2xlYW4= 32657\nIEVneXB0aWFucw== 32658\nIENhcnBlbnRlcg== 32659\nIGxs 32660\nSHVt 32661\nIE1pbG8= 32662\nIGNhcGl0YWxpc3Rz 32663\nIGJyaWVmZWQ= 32664\nVHdl 32665\nIEJhc2lu 32666\nZWx2ZXQ= 32667\nTW9z 32668\nIHBsdW5nZQ== 32669\nIEthaXNlcg== 32670\nIEZ1ag== 32671\naWxsaW4= 32672\nIHNhZmVndWFyZHM= 32673\nIG9zdGU= 32674\nIE9wcG9ydHVuaXR5 32675\nIE1hZmlh 32676\nIENhbGxpbmc= 32677\nYXBh 32678\ndXJiYW4= 32679\nYnJ1c2g= 32680\naWxsYXJk 32681\nY8Op 32682\naW50ZWxsaWdlbmNl 32683\nIExvYg== 32684\nIERydWlk 32685\nIHNtb290aGVy 32686\nIGZvb3Rpbmc= 32687\nIG1vdG9yaXN0cw== 32688\nYXJjaXR5 32689\nIG1hc2N1bGluaXR5 32690\nIG1pc20= 32691\nIGFiZG9taW5hbA== 32692\nIFRhdmVybg== 32693\nIFJvaA== 32694\nIGVzY2FwZXM= 32695\nc2lnbmVk 32696\nQW50aG9ueQ== 32697\nIHNhY3JpZmljaW5n 32698\nIGludGltYWN5 32699\nIGFudGVyaW9y 32700\nIEtvZA== 32701\nIG1vdGlm 32702\nIGdyYXo= 32703\nIHZpc3VhbGl6YXRpb24= 32704\nIGd1aXRhcmlzdA== 32705\nIFRyb3Rza3k= 32706\nbWFnaWM= 32707\nRGFy 32708\nIE1vcmk= 32709\nIHdhcmRz 32710\nIHRvaWxldHM= 32711\nbGVzdA== 32712\nIHRlbGVwb3J0 32713\nIFN1bmRheXM= 32714\nIFBsYXQ= 32715\nRVRT 32716\nIGVTcG9ydHM= 32717\nUGF0cmljaw== 32718\nIEthdGhlcmluZQ== 32719\nZW5rbw== 32720\nIGhhc3NsZQ== 32721\nIE1pY2s= 32722\nZ2dsZXM= 32723\nIGhvYg== 32724\nYWludGFpbg== 32725\nIGFpcmJvcm5l 32726\nIHNwYW5z 32727\nIGNoaWxp 32728\nIGFwZXJ0dXJl 32729\nIHZvbHVudGVlcmVk 32730\nIEluY2lkZW50 32731\nIEZyZXM= 32732\nIFZldGVyYW4= 32733\nYXVnaHRlcmVk 32734\naW5nbw== 32735\nIHVuaW5zdXJlZA== 32736\nQ0xPU0U= 32737\nIGZ1c2U= 32738\nIGVyb3RpYw== 32739\nIGFkdmVydGlzZQ== 32740\ncmFpc2luZw== 32741\nVGV4dHVyZQ== 32742\nIGF0dGVuZHM= 32743\nIFJFQUw= 32744\ndWRkbGVk 32745\nIHNtb290 32746\nIDMwNQ== 32747\nIFdpbGxpcw== 32748\nIGJsb25k 32749\nQW5hbHlzaXM= 32750\nIFZU 32751\nb25pY2E= 32752\nIHN0cm9uZ2hvbGQ= 32753\nUkY= 32754\nTk0= 32755\nLj4+ 32756\nIHByb3NwZXJvdXM= 32757\nIGJvYXN0ZWQ= 32758\nMjky 32759\nIE1hbnVmYWN0dXJpbmc= 32760\nUFJFU1M= 32761\nZ3Jlbg== 32762\nIHBoYXJtYWN5 32763\nIFJvY2tlZmVsbGVy 32764\na2Fp 32765\nIHRodW1icw== 32766\nIEh1dA== 32767\nIG1vdGhlcmJvYXJk 32768\nIGd1YXJkaWFucw== 32769\nIEFsdGVy 32770\nbGx1bGFy 32771\nIHNoYWNr 32772\nIHdpc2VseQ== 32773\nIGJhY2tib25l 32774\nZXJ2YQ== 32775\nIHN1aWNpZGVz 32776\nIE1jR3JlZ29y 32777\naWphaA== 32778\nRW1lcg== 32779\nIEJyYXY= 32780\nIGRlc2lnbmF0ZQ== 32781\nUE9TVA== 32782\ncHJvZHVjZWQ= 32783\nIGNsZWFuc2luZw== 32784\naXJsd2luZA== 32785\nZXhpc3RlbnQ= 32786\nIEh1bXBo 32787\nIFBheW5l 32788\nIHZlc3RlZA== 32789\nxaE= 32790\nIHN0cmluZ2VudA== 32791\naW9uYQ== 32792\nIHVuc3Vi 32793\nIHN1bW1lZA== 32794\nIEhlcmN1bGVz 32795\nc3ViamVjdA== 32796\nIFJhZ25hcg== 32797\nIE5vcw== 32798\nIGNoYXJhY3Rlcml6YXRpb24= 32799\nIHNhdnZ5 32800\nIERhd3Nvbg== 32801\nIENhc2lubw== 32802\nIGZyaQ== 32803\nIEJhcnJpZXI= 32804\nIG1pc2luZm9ybWF0aW9u 32805\nIGluc3VsYXRpb24= 32806\nIGNvcnJpZG9ycw== 32807\nIGFpcnBsYW5lcw== 32808\nIE5vY3Q= 32809\nYWhp 32810\nIDE5MTY= 32811\na2I= 32812\nYXJtYWM= 32813\nIHNodW4= 32814\nIHNjaGVtYQ== 32815\nIGhvcnJpZmllZA== 32816\nIDIzOQ== 32817\nYXVuZGVycw== 32818\nTkI= 32819\naWF0ZXM= 32820\nZXJpdHk= 32821\nIFNoYXJk 32822\nIHJhcml0eQ== 32823\nIGdyb3VwZWQ= 32824\nIEdoYW5h 32825\nYWdhaW5zdA== 32826\nIEJpb2xvZ2ljYWw= 32827\nIEF3YXJl 32828\nb3dlbGw= 32829\nz4Q= 32830\nIEJlYXU= 32831\nc2hhdw== 32832\nSGFjaw== 32833\nIEp1bGl1cw== 32834\nVVNT 32835\nb2xzb24= 32836\nYXVuYQ== 32837\nY3J1 32838\nIE1hdXJpY2U= 32839\nIElr 32840\nIHNlcXVlbmNpbmc= 32841\nIHJhZGljYWxz 32842\nICg/LA== 32843\ndmlydHVhbA== 32844\nIGFueXdheXM= 32845\nIHJlcGVyYw== 32846\nIGhhbmRsZXJz 32847\nIGhlc2l0YW50 32848\n6YM= 32849\nIE1G 32850\ncGxlbWVudGF0aW9u 32851\nYXNzb2NpYXRlZA== 32852\nIGNhbXBhaWduZWQ= 32853\nIFl1ZQ== 32854\ndXRhdGlvbnM= 32855\nIFlvZ2E= 32856\nIHNpbW1lcg== 32857\nIHJvZHM= 32858\nIG1lbG9keQ== 32859\nIGNvbnZveQ== 32860\ndmlkZW9z 32861\nIHNjcmVlbmVk 32862\nTmVn 32863\nb2NoZW1pY2Fs 32864\nICgpKQ== 32865\nIHVsdHJhcw== 32866\nIGFudGlw 32867\nIElzbGFuZGVycw== 32868\nNzA0 32869\nIGZldGlzaA== 32870\nIHJpZGljdWxvdXNseQ== 32871\nIEthcnQ= 32872\nIG1pdG9jaG9uZHJpYWw= 32873\nIGludGVyZmVyaW5n 32874\nQnVpbGRlcg== 32875\nIG92ZXJmbA== 32876\nIGFjbmU= 32877\nIE11ZA== 32878\nIEtlcnI= 32879\nZmxleA== 32880\nIFBvc3RhbA== 32881\nIEJhbHRpYw== 32882\nNDc3 32883\nIFBlcnNvbnM= 32884\nb3VyYWdl 32885\nSEI= 32886\nIE11c2U= 32887\nIEltbW9ydGFs 32888\nIERyaXZpbmc= 32889\nIHBldGl0aW9ucw== 32890\nIHN1YnNjcmlwdA== 32891\nIHNvcmNl 32892\nIFByb2Nlc3Nvcg== 32893\ndXRvbg== 32894\nU29ueQ== 32895\nIHBob24= 32896\nIHJhY2Vk 32897\nIEFudGhyb3A= 32898\nIGRheXRpbWU= 32899\nIEV4ZXJjaXNl 32900\nQWRkaW5n 32901\nIGVuZ2FnZXM= 32902\nIFF1YWxjb21t 32903\nIG1pcmFjbGVz 32904\nIG1lbWVz 32905\nIERyaW5r 32906\nIE9yaW9sZXM= 32907\nIGhhaXJz 32908\nIFBvbGFy 32909\nYXRob20= 32910\nIHNsaXBwZXJ5 32911\nIFJlbXk= 32912\nIGNhcmFtZWw= 32913\nIFlFQVI= 32914\nIGFsaw== 32915\nSWdu 32916\nYXV0aW9u 32917\nIE1lcmxpbg== 32918\nIENyYW4= 32919\nIGFwb2xvZ2llcw== 32920\nIDQxMA== 32921\nIG91dGluZw== 32922\nIE1lbW9yaWVz 32923\nYXBwb2ludGVk 32924\nIGNvdW50ZXJlZA== 32925\ndWxk 32926\ncG9zaW5n 32927\nIGZpcmV3YWxs 32928\nIFdhc3Q= 32929\nIFdldA== 32930\nd29ya2Vk 32931\nc2VsbGVy 32932\nIHJlcGVhbGVk 32933\nZXJlbw== 32934\nYXNzdW1pbmc= 32935\nQkxJQw== 32936\nbWl0ZQ== 32937\nIENFT3M= 32938\nIENoYXBlbA== 32939\nZWxsaWdlbnQ= 32940\nX19fX19fX19fX19fX19fX19fX19fX19f 32941\nRG9n 32942\nIHdhcnQ= 32943\nIHN1YnNjcmliZXI= 32944\nc3BvcnRz 32945\nIGJlZ2dlZA== 32946\nIE1W 32947\nIHNlbWlm 32948\nZXRoaWNhbA== 32949\nIHByZWFjaA== 32950\nIHJldml0YWw= 32951\nIHB1bml0aXZl 32952\nIHNob3J0Y3V0cw== 32953\nIGluc3RpdHV0ZWQ= 32954\nIFdhcnNhdw== 32955\nIGFiZG9tZW4= 32956\nIEtJTkc= 32957\nIHN1cGVyaW50ZW5kZW50 32958\nIGZyeQ== 32959\nIEdlbw== 32960\nVE9S 32961\nIGNvbnRyYWRpY3Rpb25z 32962\nYXB0aWM= 32963\nIGxhbmRzY2FwZXM= 32964\nYnVncw== 32965\nIGNsdXN0 32966\nIHZvbGxleQ== 32967\nY3JpYmVk 32968\nIHRhbmRlbQ== 32969\nIHJvYmVz 32970\nV0hBVA== 32971\nIHByb21vdGVy 32972\nIGVsb3F1 32973\ncmV2aWV3ZWQ= 32974\nIERL 32975\nIFBsYXRv 32976\nIGZwcw== 32977\nVGFuaw== 32978\nIERlcnJpY2s= 32979\nIHByaW9yaXRpemU= 32980\nYXNwZXI= 32981\nIEhvbmR1cmFz 32982\nIENvbXBsZXRlZA== 32983\nbmVj 32984\nIG1vZw== 32985\nbmly 32986\nIE1heW8= 32987\nREVG 32988\nc3RhbGw= 32989\naW5uZXNz 32990\nIFZvbGtzd2FnZW4= 32991\nIHByZWNhdXRpb24= 32992\nIE1lbGw= 32993\naWFr 32994\naXN0cmllcw== 32995\nIDI0OA== 32996\nIG92ZXJsYXBwaW5n 32997\nU2VuYXRl 32998\nIEVuaGFuY2U= 32999\ncmVzeQ== 33000\ncmFjaWFs 33001\nT1JUUw== 33002\nIE1vcm1vbnM= 33003\nU3Ryb25n 33004\nIENvY2g= 33005\nTWV4aWNv 33006\nIE1hZHVybw== 33007\nIGphcnM= 33008\nIGNhbmU= 33009\nV2lr 33010\nb2xsYQ== 33011\naWZmZXJlbmNl 33012\nIHBoeXNpY2lzdA== 33013\nIE1hZ2dpZQ== 33014\nIDI4NQ== 33015\nIGRlcGljdGlvbg== 33016\nIE1jTGFyZW4= 33017\nSnU= 33018\nIHNsb3dz 33019\nIGNvbW1pc3Npb25lcnM= 33020\nIFdpbGxvdw== 33021\nIEV4cGxvcw== 33022\naG92YWg= 33023\nIHRlY2huaWNpYW4= 33024\nIGhvbWljaWRlcw== 33025\nIEZsYXY= 33026\nIFRydW1hbg== 33027\nIDEwMDAw 33028\ndWN0b3I= 33029\nIHNoYWRlcg== 33030\nTmV3c2xldHRlcg== 33031\nNDU3 33032\nIHJldmVy 33033\nIGhhcmRlbmVk 33034\nIHdoZXJlYWJvdXRz 33035\nIHJlZGV2ZWxvcA== 33036\nIGNhcmJz 33037\nIHRyYXZlcnM= 33038\nIHNxdWlycmVs 33039\nIGZvbGxvd2Vy 33040\nIHNpbmdz 33041\nNTA4 33042\nIHJhYmJpdHM= 33043\nZW1vbml1bQ== 33044\nIGRvY3VtZW50aW5n 33045\nIG1pc3VuZGVyc3Rvb2Q= 33046\nKSc= 33047\nUmljaw== 33048\nZ2dpZXM= 33049\nIHByZW1pZQ== 33050\nIHNrYXRpbmc= 33051\nIHBhc3Nwb3J0cw== 33052\nIGZpc3Rz 33053\nYWdlZGRvbg== 33054\nSGF3 33055\nQUNQ 33056\nMDgw 33057\nIFRob3VnaHRz 33058\nIENhcmxzb24= 33059\nIHByaWVzdGhvb2Q= 33060\naHVh 33061\nIGR1bmdlb25z 33062\nIExvYW5z 33063\nIGFudGlz 33064\nIGZhbWlsaWFyaXR5 33065\nIFNhYmI= 33066\nb3BhbA== 33067\nIEluaw== 33068\nc3RyaWtl 33069\nIGNyYW0= 33070\nIGxlZ2FsaXplZA== 33071\nIGN1aXNpbmU= 33072\nIGZpYnJl 33073\nVHJhdmVs 33074\nIE1vbnVtZW50 33075\nT0RZ 33076\nZXRoeQ== 33077\nIGludGVyc3RhdGU= 33078\nIFBVUg== 33079\nZW1wb3Jhcnk= 33080\nIEFyYWJpYW4= 33081\nZGV2ZWxvcGVk 33082\nIHNhZGRsZQ== 33083\nIGdpdGh1Yg== 33084\nIE9mZmVy 33085\nIElTUA== 33086\ncm9sZXQ= 33087\nIFNVUEVS 33088\nIERlbmlz 33089\nIG11bHRpcGxpZXI= 33090\nIHN0aXJyZWQ= 33091\nSW50ZXJlc3RpbmdseQ== 33092\nIGN1c3RvbWFyeQ== 33093\nIGJpbGxlZA== 33094\naGV4 33095\nIG11bHRpcGxpZWQ= 33096\nIGZsaXBwaW5n 33097\nIENyb3NieQ== 33098\nIGZ1bmRhbWVudGFscw== 33099\naWFl 33100\nIFBsYXllZA== 33101\nIEF0b20= 33102\nYW1hem9u 33103\nIEZsYW0= 33104\nZWV6 33105\nYWN0aXZhdGVk 33106\nIHRhYmxlc3Bvb24= 33107\nIGxpYmVyYWxpc20= 33108\nIFBhbGlu 33109\nIFBhdGVs 33110\nTnVt 33111\nIFRBTQ== 33112\nIHN1cm4= 33113\nIFJlbG9hZGVk 33114\nIGNvaW5lZA== 33115\nIl0s 33116\nIENsYXNo 33117\nIEFndQ== 33118\nIHByYWdtYXRpYw== 33119\nIEFjdGl2YXRl 33120\nIDgwMg== 33121\nIHRyYWlsZXJz 33122\nIHNpbGhvdQ== 33123\nIHByb2Jlcw== 33124\nIGNpcmN1cw== 33125\nIEJhaW4= 33126\nIExpbmRzYXk= 33127\nIEFiYmV5 33128\nRGVsaXZlcnk= 33129\nIGNvbmNlc3Npb24= 33130\nIGdhc3Rybw== 33131\nIFNwcml0ZQ== 33132\nxJ8= 33133\nYW5kZWw= 33134\nIGdpbW0= 33135\nIGF1dG9iaQ== 33136\nIFR1cnRsZQ== 33137\nIHdvbmRlcmZ1bGx5 33138\nIEhhcmFt 33139\nIFdvcmxkd2lkZQ== 33140\nIEhhbmRsZQ== 33141\nIHRoZW9yaXN0cw== 33142\nIHNsZWVr 33143\nIFpodQ== 33144\nb2dyYXBoaWNhbGx5 33145\nRUdB 33146\nIE93bmVycw== 33147\nYXRocw== 33148\nIEFudGFyY3RpYw== 33149\nbmF0YWw= 33150\nPSIi 33151\nZmxhZ3M= 33152\nYGBgYA== 33153\nIHN1bA== 33154\nS2g= 33155\nIHBvdGFzc2l1bQ== 33156\nIGxpbmVtYW4= 33157\nIGNlcmVhbA== 33158\nIFNlYXNvbnM= 33159\nIDIwMjI= 33160\nIG1hdGhlbWF0aWM= 33161\nIGFzdHJvbm9tZXJz 33162\ncHJvZmVzc2lvbmFs 33163\nIGZhcmVz 33164\nY2tub3dsZWQ= 33165\nIGNoaQ== 33166\nIHlvdW5nc3RlcnM= 33167\nIG1pc3Rha2VubHk= 33168\nIGhlbWlzcGhlcmU= 33169\nIERpdmluaXR5 33170\ncm9uZQ== 33171\nICIs 33172\ncmluZ3M= 33173\nIGF0dHJhY3Rz 33174\ndmFuYQ== 33175\n5bk= 33176\nQ0FQ 33177\nIHBsYXlsaXN0 33178\nIHBvcmNo 33179\n44Gj 33180\nIGluY29ycG9yYXRlcw== 33181\nIHNvYWs= 33182\nIGFzc2VydGluZw== 33183\nIFRlcnJvcmlzbQ== 33184\nIFBhYmxv 33185\nSmE= 33186\nY2VzdGVy 33187\nIGZlYXJpbmc= 33188\nIFByYXllcg== 33189\nIGVzY2FsYXRlZA== 33190\nR1c= 33191\nIHJvYmU= 33192\nIEJyaWdodG9u 33193\nYWNpc3Rz 33194\nIFN5bXBob255 33195\nIER3YXJm 33196\nIFBhcmFkZQ== 33197\nIExlZ28= 33198\nIGluZXhwbA== 33199\nIGxvcmRz 33200\nbGVhZg== 33201\nUkFH 33202\nbGliZXI= 33203\nIGNpZ2Fycw== 33204\nIEplaG92YWg= 33205\nNjA2 33206\nV0lORE9XUw== 33207\nIExpYmVyaWE= 33208\nZWJ1cw== 33209\nSGVhdnk= 33210\nIGx1YnJpYw== 33211\nIFJX 33212\nYW5ndWFnZXM= 33213\nIG5hcnJvd2Vk 33214\nY29tcHV0ZXI= 33215\nIEVtYmVy 33216\nIG11cmRlcmluZw== 33217\nIGRvd25zdHJlYW0= 33218\nIFR1bHM= 33219\nIFRhYmxlcw== 33220\nVG9waWM= 33221\nIEFjY3VyYWN5 33222\nPS8= 33223\nbG9zdA== 33224\nIFJlaQ== 33225\nIHByb2dyZXNzZXM= 33226\nYmVhcg== 33227\nIGVzdGFibGlzaG1lbnRz 33228\nSnVzdGlu 33229\nIFBlYWNo 33230\nIEdvbWV6 33231\n5b8= 33232\nIFRyaWFuZ2xl 33233\nSWRlbnQ= 33234\nIEhpdmU= 33235\nUmVzb3VyY2Vz 33236\nIG1peGVz 33237\nIEFzc3VtaW5n 33238\nTXU= 33239\nIGh5cG9j 33240\nIHNhbmU= 33241\nIFdhbg== 33242\naWRpb3Vz 33243\nU3VjY2Vzcw== 33244\nIGlv 33245\nQW5nZWw= 33246\nIGRhbmdlcm91c2x5 33247\nIENyZWF0dXJl 33248\nV09SSw== 33249\nOls= 33250\nIEthdHJpbmE= 33251\nTGlzdGVuZXI= 33252\nTWlsbGVy 33253\nIElkbGli 33254\naGFuZw== 33255\nIGNpcmN1bXZlbnQ= 33256\naHJlZg== 33257\nIGNlbGVzdGlhbA== 33258\nIFdlZWtz 33259\nIFB1Zw== 33260\nIERhbHRvbg== 33261\nIHN1YnBvZW5h 33262\ndWt1 33263\nIHBlcnNpc3RlZA== 33264\ncGVp 33265\nb2xkaW5n 33266\nIERvY3VtZW50cw== 33267\nIEhhc3Q= 33268\nIENFTlQ= 33269\nIHByaW1lcg== 33270\nIHN5bm9ueW1vdXM= 33271\nIG5pYg== 33272\nb21icw== 33273\nIG5vdGF0aW9u 33274\nIERpc2g= 33275\nIEF0bW9zcA== 33276\nIGZvcmJpZA== 33277\nIEFORw== 33278\ncGF0dGVybg== 33279\nbG9z 33280\nIHByb2plY3RpbGVz 33281\nYnJvd24= 33282\nLiIs 33283\nIFZlbm9t 33284\nIGZpZXJjZWx5 33285\ndWJsaXNoZWQ= 33286\nIFVyYW4= 33287\nIE5pY2FyYWc= 33288\nNDEw 33289\nIENBTA== 33290\nT1RPUw== 33291\nIE1pcmFjbGU= 33292\nIEVuY2hhbnQ= 33293\nIGd1YXJkaW5n 33294\nYXBwZW5k 33295\nQXR0YWNo 33296\nIGxldmVsZWQ= 33297\nIGNvbmRvbXM= 33298\naWhpbGF0aW9u 33299\nNjQ5 33300\nIG5pZ2h0bWFyZXM= 33301\nIFRIRVk= 33302\nIFNUQVJU 33303\nIEtpbm4= 33304\nIHJvb21tYXRl 33305\nIGh5Z2llbmU= 33306\nb3BwaW5n 33307\nSm9i 33308\nIGx2bA== 33309\nIFZFUg== 33310\nIEtlZXBpbmc= 33311\nYWJldGlj 33312\nIGZvcm1hdHRpbmc= 33313\nZXJhbGE= 33314\nIHJldmlzaW9ucw== 33315\nIHJlc3VyZw== 33316\nVGVs 33317\nIEdvb2RtYW4= 33318\nMzUz 33319\ncG9k 33320\nIGluZGlzcA== 33321\nIFRyYW5zbGF0aW9u 33322\nIGdvd24= 33323\nIE11bmQ= 33324\nIGNpcw== 33325\nIGJ5c3RhbmQ= 33326\nY29sbGVjdA== 33327\nIFB1bmphYg== 33328\nYWN0aXZlbHk= 33329\nIEdhbWI= 33330\ndGVsbA== 33331\nIGltcG9ydGluZw== 33332\nZ2VuY2llcw== 33333\nIGxvY29t 33334\nIEJyaWxs 33335\nSG9seQ== 33336\nIEJlcmdlcg== 33337\nIHNob3dkb3du 33338\nIHJlc3BvbmRlcnM= 33339\nSUxZ 33340\nIHRha2Vkb3du 33341\nbGV0ZWQ= 33342\nIG1hdHRlcmVk 33343\nIHByZWRpY3RpdmU= 33344\nIG92ZXJsYXk= 33345\nR1BV 33346\nIFZpY2s= 33347\nIGNvbnZleWVk 33348\nVGFi 33349\ncGVlcg== 33350\nU2Nhbg== 33351\nIGRlZmVuc2l2ZWx5 33352\ndmFl 33353\nIGFwcHJvdmluZw== 33354\nIHRpZXJz 33355\nIFZpYQ== 33356\ncXVlcmFkZQ== 33357\nIFNhdWRpcw== 33358\nIGRlbW9saXNoZWQ= 33359\nIFByb3BoZQ== 33360\nIG1vbm8= 33361\nIGhvc3BpdGFsaXR5 33362\nSEFN 33363\nIEFyaWVs 33364\nTU9E 33365\nIFRvcmFo 33366\nIGJsYWg= 33367\nIEJlbGFydXM= 33368\nZXJlbnRpYWw= 33369\nIFR1Yw== 33370\nIGJhbmtlcg== 33371\nMzk3 33372\nIG1vc3F1aXQ= 33373\nIFNjaWVudGlzdA== 33374\nIE11c2ljYWw= 33375\nIGh1c3Q= 33376\nU2hpZnQ= 33377\nIHRvcm1lbnQ= 33378\nIHN0YW5kb2Zm 33379\nRWR1Yw== 33380\nIEZvZw== 33381\nIGFtcGxpZmllcg== 33382\nU2hhcGU= 33383\nSW5zdGFuY2U= 33384\nIENyaXRpY3M= 33385\nIGRhZW1vbg== 33386\nSG91c3Rvbg== 33387\nIG1hdHRyZXNz 33388\nIElERg== 33389\nIG9ic2NlbmU= 33390\nIEFtZXI= 33391\naGV0dGk= 33392\nIGNvbXBpbGluZw== 33393\nMzUy 33394\ndmVyZXR0 33395\nIFJlZHVjdGlvbg== 33396\naXN0cmF0aW9u 33397\nIEJsZXNzZWQ= 33398\nIEJhY2hlbG9y 33399\nMzE2 33400\nIHByYW5r 33401\nIFZ1bGNhbg== 33402\nZGRpbmc= 33403\nIG1vdXJuaW5n 33404\nIFF1aW50 33405\nIEJsYXN0ZXI= 33406\ndGVzdGluZw== 33407\nIHNlZGltZW50 33408\nPj4+ 33409\nIEV0ZXJuaXR5 33410\nIFdIRVJF 33411\nIE1hemU= 33412\nIHJlYWN0aW5n 33413\nIEFsdg== 33414\nb21zZGF5 33415\nIENSQQ== 33416\nIHRyYW5zbGF0b3I= 33417\nIGJvZ3Vz 33418\nYXR1 33419\nV2Vic2l0ZQ== 33420\nb2xscw== 33421\nIGJhcHRpc20= 33422\nIHNpYmxpbmc= 33423\nIEF1dHVtbg== 33424\ndmV6 33425\n44Gu6Q== 33426\nZ3VhcmRz 33427\nR2Vvcmc= 33428\nYXNzYWRvcnM= 33429\nIEZyZXVk 33430\nIGNvbnRpbmVudHM= 33431\nIFJlZ2lzdHJ5 33432\nQmVybmll 33433\nlprlo6s= 33434\nIHRvbGVyYW50 33435\nIFVX 33436\nIGhvcnJpYmx5 33437\nOTk1 33438\nIE1JREk= 33439\nIGltcGF0aWVudA== 33440\nb2NhZG8= 33441\nZXJp 33442\nIFdvcnN0 33443\nIE5vcnJpcw== 33444\nIFRhbGtpbmc= 33445\nIGRlZmVuZHM= 33446\nZW5zYWJsZQ== 33447\nIDIwMjE= 33448\nIGFuYXRvbXk= 33449\nTGV3 33450\nIGRyYXdlcg== 33451\nIENhbmJlcnJh 33452\nIHBhdHJpb3RpYw== 33453\n6b6N5Zaa5aOr 33454\nIEF2Zw== 33455\nQVJN 33456\nIHVuZGlzY2xvc2Vk 33457\nIGZhcmV3ZWxs 33458\nNDU5 33459\nYmFibGU= 33460\nIEFsbGlzb24= 33461\nT0xPRw== 33462\nIGNvbmNv 33463\ndGlnaHQ= 33464\nIEFDUEk= 33465\nIE1pbmVz 33466\nbGljaA== 33467\nIOKUnA== 33468\ncmVwcmVzZW50ZWQ= 33469\nMjAwMDAw 33470\nIGVudGh1c2lhc3Q= 33471\nT1RT 33472\nYmls 33473\nIEluZ3JlZGllbnRz 33474\nIGludmVudG9y 33475\nIE15U1FM 33476\nwqDCoMKg 33477\nIEFCT1VU 33478\nd2l0aGlu 33479\nIG1r 33480\nQnVs 33481\nIEZha2U= 33482\nIGRyYWNvbmlhbg== 33483\nV2E= 33484\naGVsbQ== 33485\nIFRlcnJhbg== 33486\nZXJ2aWxsZQ== 33487\nIGNvbW1vbnBsYWNl 33488\nU0laRQ== 33489\nICI8 33490\ncmVwbGFjZQ== 33491\nb2dyYXBocw== 33492\nIFNFTEVDVA== 33493\naW5jaWJsZQ== 33494\nIE1vc3RseQ== 33495\nIFNoZWZmaWVsZA== 33496\nIElERQ== 33497\ndWdnbGU= 33498\nIGNpdGF0aW9ucw== 33499\naHVyc3Q= 33500\nIFVuaXg= 33501\nIHVubGVhc2g= 33502\nIFBpcGVy 33503\nIE5hbm8= 33504\nIHN1Y2N1bWI= 33505\nIHJlbHVjdGFuY2U= 33506\nIDI1MDA= 33507\nIE1lcmNoYW50 33508\nIHdpcmV0 33509\nIGNvbWJvcw== 33510\nIEJpcnRoZGF5 33511\nIGNoYXJjb2Fs 33512\nIFVQUw== 33513\nIEZhaXJmYXg= 33514\nIGRyaXZld2F5 33515\nIFRlaw== 33516\nIFBpdGNo 33517\nb3ZlcmU= 33518\nIHRlY2huaWNpYW5z 33519\nIEFjdHVhbA== 33520\nZmxhdGlvbg== 33521\nIEZpc2NhbA== 33522\nIEVtcHR5 33523\nYW5hbW8= 33524\nIG1hZ25lc2l1bQ== 33525\nIHNsdXQ= 33526\nIGdyb3dlcnM= 33527\nSW52ZXN0aWdhdG9ycw== 33528\nKCk6 33529\nIFNhdGVsbGl0ZQ== 33530\nIEtleW5lcw== 33531\nbWlzc2l2ZQ== 33532\nbGFuZQ== 33533\nIGJvcm91Z2g= 33534\nMzQ0 33535\nIFRFQU0= 33536\nIEJldGhlc2Rh 33537\nQ1Y= 33538\naG93ZXI= 33539\nIFJBRA== 33540\nIGNoYW50 33541\nIFJpeQ== 33542\nIGNvbXBvc2l0aW9ucw== 33543\nIG1pbGRseQ== 33544\nIG1lZGRsaW5n 33545\nIGFnaWxpdHk= 33546\nYW5lZXJz 33547\nNTAx 33548\nIHN5bnRo 33549\nbGluZ2Vy 33550\nMjkx 33551\nIGV4Y2xhaW1lZA== 33552\nUGFydHk= 33553\nIGNvbnRhbWlu 33554\nIE1hbm9y 33555\nIFJlc3BvbmQ= 33556\nIHByYWlzaW5n 33557\nIG1hbm5lcnM= 33558\nZmxlZXQ= 33559\nU3VtbWVy 33560\nIEx5bmQ= 33561\nIERlZmluaXRlbHk= 33562\nZ3JpbQ== 33563\nIGJvd2xpbmc= 33564\nc3RyaQ== 33565\n55s= 33566\neW50 33567\nIG1hbmRhdGVz 33568\nRElW 33569\nIHJlY29uY2lsZQ== 33570\ndmlld3M= 33571\nIERhbW9u 33572\ndmV0dGU= 33573\nRmxv 33574\nIEdyZWF0ZXN0 33575\naWxvbg== 33576\naWNpYQ== 33577\nIHBvcnRyYXlhbA== 33578\nIGN1c2hpb24= 33579\nNTA0 33580\nMTk3OQ== 33581\nb3NzYWw= 33582\nQXBwbGlj 33583\nc2NyaXB0aW9u 33584\nIG1pdGlnYXRpb24= 33585\nQVRT 33586\ncGFj 33587\nIGVyYXNlZA== 33588\nIGRlZmljaWVuY2llcw== 33589\nIEhvbGxhbmRl 33590\nIFh1 33591\nIGJyZWQ= 33592\nIHByZWduYW5jaWVz 33593\nZmVtaW4= 33594\nIGVtcGg= 33595\nIHBsYW5uZXJz 33596\nIG91dHBlcg== 33597\ndXR0ZXJpbmc= 33598\nIHBlcnBldHJhdG9y 33599\nIG1vdHRv 33600\nIEVsbGlzb24= 33601\nIE5FVkVS 33602\nIGFkbWl0dGVkbHk= 33603\nQVJJ 33604\nIEF6ZXJiYWlqYW4= 33605\nIG1pbGxpc2Vj 33606\nIGNvbWJ1c3Rpb24= 33607\nIEJvdHRsZQ== 33608\nIEx1bmQ= 33609\nIFBz 33610\nIERyZXNz 33611\nIGZhYnJpY2F0ZWQ= 33612\nIGJhdHRlcmVk 33613\nIHNpZGVs 33614\nIE5vdHRpbmc= 33615\nRm9yZWlnbg== 33616\nIEplcm9tZQ== 33617\nMDIw 33618\nIEFyYml0 33619\nIGtub3Rz 33620\nIFJJR0hU 33621\nTW92aW5n 33622\n44GZ 33623\nIHN1cmdlcmllcw== 33624\nIGNvdXJ0aG91c2U= 33625\nIG1hc3RlcmVk 33626\nIGhvdmVyaW5n 33627\nIEJyYW4= 33628\nIEFsaXNvbg== 33629\nIHNhZmVzdA== 33630\nbWlsaXRhcnk= 33631\nIGJ1bGxpZWQ= 33632\nIGJhcnJhZ2U= 33633\nUmVhZGVy 33634\nRVNF 33635\nIEdlb2dyYXBoaWM= 33636\nVG9vbHM= 33637\nMzE0 33638\nIEdlZWs= 33639\ncm90aA== 33640\nZ2xlcnM= 33641\nIEZJTg== 33642\nz4E= 33643\nIEFzdG9u 33644\nYWx0ZXJu 33645\nNDg4 33646\nIHZldGVyaW4= 33647\nR2FtZXI= 33648\nIGludGVs 33649\ncmVuY2hlcw== 33650\nU2hpZWxk 33651\nIGFtbmVzdHk= 33652\nIEJoYXI= 33653\nIHBpbGVk 33654\nIGhvbm9yYWJsZQ== 33655\nIEluc3RpdHV0ZXM= 33656\nIHNvYWtlZA== 33657\nIGNvbWE= 33658\nIEVGRg== 33659\nMzQx 33660\nYnl0ZXM= 33661\nIEdtYWls 33662\nbGVpbg== 33663\nIENhbmFkaWVucw== 33664\nbWF0ZXJpYWw= 33665\nSWw= 33666\nIGluc3RydWN0b3Jz 33667\nIEtZ 33668\nIGNvbmNlaXZl 33669\ndWJi 33670\nIFBvc3NpYmxl 33671\nIGVhc2luZw== 33672\nIENocmlzdGluYQ== 33673\nIGNhcmlj 33674\nIEhEUg== 33675\nUk9N 33676\nIHNob3ZlbA== 33677\nZGVsZXRl 33678\nIHB1ZmY= 33679\nIENoYW5naW5n 33680\nIHNlYW1sZXNzbHk= 33681\nQXR0cmlidXRl 33682\nIGFjcXVpc2l0aW9ucw== 33683\nYWtlcnk= 33684\nIEVG 33685\nIGF1dGlzdGlj 33686\nIFRha2Vz 33687\nIFBvd2Rlcg== 33688\nIFN0aXI= 33689\nNTEw 33690\nIEJ1YmJsZQ== 33691\nc2V0dGluZ3M= 33692\nIEZvd2xlcg== 33693\nIG11c3RhcmQ= 33694\nIG1vcmVvdmVy 33695\nIGNvcHlyaWdodGVk 33696\nIExFRHM= 33697\nMTUwMA== 33698\n5ok= 33699\nIEhJUw== 33700\nZW5m 33701\nIGN1c3RvZA== 33702\nIEh1Y2s= 33703\nR2k= 33704\nIGltZw== 33705\nQW5zd2Vy 33706\nQ3Q= 33707\namF5 33708\nIEluZnJhc3RydWN0dXJl 33709\nIGZlZGVyYWxseQ== 33710\nTG9j 33711\nIG1pY3JvYmVz 33712\nIG92ZXJydW4= 33713\nZGRz 33714\nb3RlbnQ= 33715\nYWRpYXRvcg== 33716\nPj4+Pj4+Pj4= 33717\nIHRvcm5hZG8= 33718\nIGFkanVk 33719\nIGludHJpZ3VlZA== 33720\nIHNp 33721\nIFJldmVsYXRpb24= 33722\ncHJvZ3Jlc3M= 33723\nIGJ1cmdsYXJ5 33724\nIFNhaXlhbg== 33725\nIEthdGh5 33726\nIHNlcnBlbnQ= 33727\nIEFuZHJlYXM= 33728\nIGNvbXBlbA== 33729\nZXNzbGVy 33730\nIFBsYXN0aWM= 33731\nIEFkdmVudA== 33732\nIFBvc2l0aXZl 33733\nIFF0 33734\nIEhpbmR1cw== 33735\ncmVnaXN0ZXJlZA== 33736\ndWxhcml0eQ== 33737\nIHJpZ2h0ZW91c25lc3M= 33738\nIGRlbW9uaWM= 33739\ndWl0aXZl 33740\nIEJEUw== 33741\nIEdyZWdn 33742\nY2lh 33743\nIENydXNhZGU= 33744\nIFNpbmFp 33745\nV0FSRQ== 33746\nKyg= 33747\nIG1lbGw= 33748\nIGRlcmFpbA== 33749\neWFyZHM= 33750\nQXN0 33751\nIG5vdGljZWFibHk= 33752\nIE9iZXI= 33753\nUmFt 33754\nIHVubm90aWNlZA== 33755\nIHNlcQ== 33756\nYXZhZ2U= 33757\nVHM= 33758\nIDY0MA== 33759\nIGNvbmNlZGU= 33760\nIF0p 33761\nRmlsbA== 33762\nIGNhcHRpdml0eQ== 33763\nIEltcHJvdmVtZW50 33764\nIENydXNhZGVy 33765\nYXJhb2g= 33766\nTUFQ 33767\n5pc= 33768\nIHN0cmlkZQ== 33769\nYWx3YXlz 33770\nRmx5 33771\nTml0 33772\nIGFsZ2Fl 33773\nIENvb2tpbmc= 33774\nIERvb3Jz 33775\nTWFsbGV5 33776\nIHBvbGljZW1lbg== 33777\n44GN 33778\nIGFzdHJvbmF1dA== 33779\nYWNjZXNzaWJsZQ== 33780\nNDk1 33781\nIFJBVw== 33782\nY2xpZmZl 33783\ndWRpY3JvdXM= 33784\nIGRlcGVuZGVk 33785\nYWxhY2g= 33786\nIHZlbnR1cmVz 33787\ncmFrZQ== 33788\nIHRpdHM= 33789\nIEhvdQ== 33790\nIGNvbmRvbQ== 33791\nb3Jtb25hbA== 33792\nIGluZGVudA== 33793\nIHVwbG9hZGluZw== 33794\nRm9vdG5vdGU= 33795\nSW1wb3J0YW50 33796\nIDI3MQ== 33797\nIG1pbmRmdWw= 33798\nIGNvbnRlbmRz 33799\nQ3Jh 33800\nIGNhbGlicg== 33801\nIE9FQ0Q= 33802\ncGx1Z2lu 33803\nRmF0 33804\nIElTUw== 33805\nIER5bmFtaWNz 33806\nYW5zZW4= 33807\nNjg2 33808\nJyks 33809\nIHNwcml0ZQ== 33810\nIGhhbmRoZWxk 33811\nIEhpcHA= 33812\nPX49fg== 33813\nVHJ1c3Q= 33814\nIHNlbWFudGljcw== 33815\nIEJ1bmRlcw== 33816\nIFJlbm8= 33817\nIExpdGVyYXR1cmU= 33818\nc2Vuc2U= 33819\nR2FyeQ== 33820\nIEFlZw== 33821\nIFRyaW4= 33822\nRUVL 33823\nIGNsZXJpYw== 33824\nIFNTSA== 33825\nIGNocmlzdA== 33826\nIGludmFkaW5n 33827\naWJ1 33828\nIGVudW0= 33829\nYXVyYQ== 33830\nIGFsbGVnZQ== 33831\nIEluY3JlZGlibGU= 33832\nQkJD 33833\nIHRocnU= 33834\nIHNhaWxlZA== 33835\nIGVtdWxhdGU= 33836\nIGluc2VjdXJpdHk= 33837\nIGNyb3U= 33838\nIGFjY29tbW9kYXRpb25z 33839\nIGluY29tcGV0ZW50 33840\nIHNsaXBz 33841\nIEVhcnRocXU= 33842\nc2FtYQ== 33843\nSUxMRQ== 33844\nIGlQaG9uZXM= 33845\nYXNha2k= 33846\nIGJ5ZQ== 33847\nIGFyZA== 33848\nIGV4dHJhcw== 33849\nIHNsYXVnaHRlcmVk 33850\nIGNyb3dkZnVuZGluZw== 33851\ncmVzc28= 33852\nIGZpbGli 33853\nIEVSUk9S 33854\nIFRMUw== 33855\nZWdn 33856\nIEl0YWw= 33857\nIGVubGlzdA== 33858\nIENhdGFsb25pYQ== 33859\nIFNjb3Rz 33860\nIHNlcmdlYW50 33861\nIGRpc3NvbHZl 33862\nTkg= 33863\nIHN0YW5kaW5ncw== 33864\ncmlxdWU= 33865\nSVE= 33866\nIGJlbmVmaWNpYXJ5 33867\nIGFxdWFyaXVt 33868\nWW91VHViZQ== 33869\nIFBvd2VyU2hlbGw= 33870\nIGJyaWdodGVzdA== 33871\nIFdhcnJhbnQ= 33872\nU29sZA== 33873\nV3JpdGluZw== 33874\nIGJlZ2lubmluZ3M= 33875\nIFJlc2VydmVk 33876\nIExhdGlub3M= 33877\naGVhZGluZw== 33878\nIDQ0MA== 33879\nIHJvb2Z0b3A= 33880\nQVRJTkc= 33881\nIDM5MA== 33882\nVlBO 33883\nR3M= 33884\na2VybmVs 33885\ndHVybmVk 33886\nIHByZWZlcmFibGU= 33887\nIHR1cm5vdmVycw== 33888\nIEhlbHM= 33889\nU2E= 33890\nIFNoaW5qaQ== 33891\ndmVo 33892\nIE1PRFVMRQ== 33893\nVmlvbA== 33894\nIGV4aXRpbmc= 33895\nIGphYg== 33896\nIFZhbmlsbGE= 33897\nIGFjcm9u 33898\nIEdhcA== 33899\nYmVybg== 33900\nQWs= 33901\nIE1jR3U= 33902\nIGVuZGxlc3NseQ== 33903\nIEZhcmFnZQ== 33904\nIE5vZWw= 33905\nVmE= 33906\nTUs= 33907\nIGJydXRl 33908\nIEtydQ== 33909\nIEVTVg== 33910\nIE9saXZpYQ== 33911\n4oCg 33912\nIEthZg== 33913\nIHRydXN0aW5n 33914\nIGhvdHM= 33915\nMzI0 33916\nIG1hbGFyaWE= 33917\nIGpzb24= 33918\nIHBvdW5kaW5n 33919\nb3J0bWVudA== 33920\nQ291bnRyeQ== 33921\nIHBvc3Rwb25lZA== 33922\nIHVuZXF1aXY= 33923\nPyks 33924\nIFJvb25leQ== 33925\ndWRkaW5n 33926\nIExlYXA= 33927\ndXJyZW5jZQ== 33928\nc2hhcGVzaGlmdGVy 33929\nIEhBUw== 33930\nb3NhdGU= 33931\nIGNhdmVybg== 33932\nIGNvbnNlcnZhdGlzbQ== 33933\nIEJBRA== 33934\nIG1pbGVhZ2U= 33935\nIGFycmVzdGluZw== 33936\nVmF1bHRz 33937\nIG1peGVy 33938\nRGVtb2NyYXRpYw== 33939\nIEJlbnNvbg== 33940\nIGF1dGhvcmVk 33941\nODAwMA== 33942\nIHByb2FjdGl2ZQ== 33943\nIFNwaXJpdHVhbA== 33944\ndHJl 33945\nIGluY2FyY2VyYXRlZA== 33946\nIFNvcnQ= 33947\nIHBlYWtlZA== 33948\nIHdpZWxkaW5n 33949\ncmVjaWF0aW9u 33950\n15nX 33951\nUGF0Y2g= 33952\nIEVtbXk= 33953\nIGV4cXU= 33954\ndHRv 33955\nIFJhdGlv 33956\nIFBpY2tz 33957\nIEdyeQ== 33958\ncGhhbnQ= 33959\nIGZyZXQ= 33960\nIGV0aG4= 33961\nIGFyY2hpdmVk 33962\nJS0= 33963\nY2FzZXM= 33964\nIEJsYXpl 33965\nIGltYg== 33966\nY3Y= 33967\neXNz 33968\naW1vbnk= 33969\nIGNvdW50ZG93bg== 33970\nIGF3YWtlbmluZw== 33971\nIFR1bmlzaWE= 33972\nIFJlZmVy 33973\nIE1K 33974\nIHVubmF0dXJhbA== 33975\nIENhcm5lZ2ll 33976\naXplbg== 33977\nIE51Z2dldHM= 33978\naGVzcw== 33979\nIGV2aWxz 33980\nNjQ3 33981\nIGludHJvZHVjdG9yeQ== 33982\nbG92aW5n 33983\nIE1jTWFob24= 33984\nIGFtYmlndWl0eQ== 33985\nTGFiZWw= 33986\nIEFsbWlnaHR5 33987\nIGNvbG9yaW5n 33988\nIENsYXVz 33989\nc2V0dGluZw== 33990\nTlVMTA== 33991\nIEZhdm9yaXRl 33992\nIFNJRw== 33993\nPig= 33994\nIFNoaXZh 33995\nIE1heWVy 33996\nIHN0b3JtZWQ= 33997\nIENvdmVyYWdl 33998\nd2VhcG9ucw== 33999\naWdoYW0= 34000\nIHVuYW5zd2VyZWQ= 34001\nIGxldmU= 34002\nIGNveQ== 34003\nY2Fz 34004\nYmFncw== 34005\nYXN1cmVk 34006\nU2VhdHRsZQ== 34007\nIFNhbnRvcnVt 34008\nc2VyaW91cw== 34009\nIGNvdXJhZ2VvdXM= 34010\nIFNvdXA= 34011\nIGNvbmZpc2NhdGVk 34012\nIC8vLw== 34013\nIHVuY29udmVudGlvbmFs 34014\nIG1vbXM= 34015\nIFJvaGluZ3lh 34016\nIE9yY2hlc3RyYQ== 34017\nIFBvdGlvbg== 34018\nIGRpc2NyZWRpdA== 34019\nIEZJTA== 34020\nZml4ZWQ= 34021\nIERlZXI= 34022\nZG9p 34023\nIERpbWVuc2lvbg== 34024\nIGJ1cmVhdWNyYXRz 34025\nZXRlZW4= 34026\nIGFjdGlvbkdyb3Vw 34027\nb2ht 34028\nIGJ1bXBz 34029\nIFV0aWxpdHk= 34030\nIHN1Ym1hcmluZXM= 34031\ncmVuaGVpdA== 34032\ncmVzZWFyY2g= 34033\nIFNoYXBpcm8= 34034\nIHNrZXRjaGVz 34035\nIGRlY2VwdGl2ZQ== 34036\nIFZpbA== 34037\nZXNhbWU= 34038\nIEVzc2VudGlhbGx5 34039\nIHJhbXBhZ2U= 34040\naXNreQ== 34041\nIG11dHRlcmVk 34042\ndGhyaXRpcw== 34043\nIDIzNg== 34044\nZmV0 34045\nYmFycw== 34046\nIHB1cGls 34047\nIFRob3U= 34048\nb1M= 34049\nc29uZw== 34050\nIGZyYWN0dXJlZA== 34051\nIHJldmVydA== 34052\ncGljdHVyZQ== 34053\nIGNyaXRlcmlvbg== 34054\ndXNoZXI= 34055\nIHJlcGVyY3Vzc2lvbnM= 34056\nIFZpbnRhZ2U= 34057\nIFN1cGVyaW50ZW5kZW50 34058\nT2ZmaWNlcnM= 34059\nIGZsYWdnZWQ= 34060\nIGJsYW1lcw== 34061\nIGludmVyc2U= 34062\nb2dyYXBoZXJz 34063\nIG1ha2VzaGlmdA== 34064\nIGRldm9pZA== 34065\nIGZvc3NpbHM= 34066\nIEFyaXN0b3RsZQ== 34067\nIEZ1bmRz 34068\nIGRlcGxldGVk 34069\nIEZsdQ== 34070\nIFl1YW4= 34071\nIHdvZXM= 34072\nIGxpcGlk 34073\nIHNpdHU= 34074\ncmVxdWlzaXRlcw== 34075\nIGZ1cm5pc2g= 34076\nIFNhbWFy 34077\nIHNoYW1lZnVs 34078\nIGFkdmVyc2VseQ== 34079\nIGFkZXB0 34080\nIHJlbW9yc2U= 34081\nIG11cmRlcm91cw== 34082\ndWNrbGVz 34083\nIEVTTA== 34084\nIDMxNA== 34085\nc2VudA== 34086\nIHJlZGVm 34087\nIENhY2hl 34088\nIFB1cnM= 34089\naWdhbnM= 34090\nIDQ2MA== 34091\nIHByZXNjcmlwdGlvbnM= 34092\nIGZyZXM= 34093\nRnVjaw== 34094\nb2NyYXRlcw== 34095\nVHdlbnR5 34096\nIFdlaXJk 34097\nIFRvZ2dsZQ== 34098\nIENhbGxlZA== 34099\naXRpemVucw== 34100\nIHBvdWx0cnk= 34101\nIGhhcnZlc3Rpbmc= 34102\n44Km44K5 34103\nQm90dG9t 34104\nIGNhdXRpb25lZA== 34105\ndG4= 34106\nMzk2 34107\nIE5pa2tp 34108\nIGV2YWx1YXRpb25z 34109\nIGhhcmFzc2luZw== 34110\nIGJpbmRpbmdz 34111\nIE1vbmV0YXJ5 34112\nIGhpdHRlcnM= 34113\nIGFkdmVyc2FyeQ== 34114\ndW50cw== 34115\nIHNldGJhY2s= 34116\nIGVuY3J5cHQ= 34117\nIENhaXQ= 34118\nIGxvd3M= 34119\nZW5nZXM= 34120\nIE5vcm4= 34121\nIGJ1bGJz 34122\nIGJvdHRsZWQ= 34123\nIFZveWFnZXI= 34124\nMzE3 34125\nIHNwaGVyZXM= 34126\ncG9saXRpY3M= 34127\nIHN1YnRyYWN0 34128\nIHNlbnNhdGlvbnM= 34129\nIGFwcGFsbGluZw== 34130\nIDMxNg== 34131\nIGVudmlyb25tZW50YWxseQ== 34132\nIFNURU0= 34133\nIHB1Ymxpc2hlcw== 34134\nNTYw 34135\nIGRpbGlnZW5jZQ== 34136\nNDg0 34137\nIGFkdmlzZXM= 34138\nIHBldHJvbA== 34139\nIGltYWdpbmluZw== 34140\nIHBhdHJvbHM= 34141\nIEludGVnZXI= 34142\nIEFzaGVz 34143\nYWN0dXM= 34144\nIFJhZGlhbnQ= 34145\nIExU 34146\naXRhYmlsaXR5 34147\naHRha2luZw== 34148\nU2V0dGluZw== 34149\nIG51YW5jZWQ= 34150\nIFJlZWY= 34151\nIERldmVsb3BlcnM= 34152\nTmk= 34153\ncGllY2Vz 34154\nOTkw 34155\nTGljZW5zZQ== 34156\nIGxvd2Vycw== 34157\nIE90dG9tYW4= 34158\nMzI3 34159\nb29v 34160\nIHF1aXR0aW5n 34161\nbWFya2V0cw== 34162\nQmVoaW5k 34163\nIGJhc2lu 34164\nIGRvY3M= 34165\nYW5pZQ== 34166\nZmxhc2g= 34167\nY3Rs 34168\nIGNpdmlsaXplZA== 34169\nIEZ1a3VzaGltYQ== 34170\nIl0sIg== 34171\nIEtT 34172\nIEhvbmVzdGx5 34173\nYXJhdA== 34174\nIGNvbnN0cnVjdHM= 34175\nIExhbnM= 34176\nIERpcmU= 34177\nIExJS0U= 34178\nIFRyb3VibGU= 34179\nIHdpdGhob2xkaW5n 34180\nIE9ibGl2aW9u 34181\nIHNhbml0eQ== 34182\nYW55YQ== 34183\nQ29uc3Q= 34184\nIGdyb2Nlcg== 34185\nIENlbHNpdXM= 34186\nIHJlY291bnRlZA== 34187\nIFdpZmU= 34188\nQm9yZGVy 34189\nYXRlcmVk 34190\naGFwcHk= 34191\nIHNwb2lsZXI= 34192\nIGxvZ2ljYWxseQ== 34193\nSGFsbA== 34194\nIHN1Y2NlZWRpbmc= 34195\nIHBvbHltb3JwaA== 34196\nIGF4ZXM= 34197\nIFNob3RndW4= 34198\nIFNsaW0= 34199\nIFByaW5jaXBsZXM= 34200\nIExldGg= 34201\nYXJ0YQ== 34202\nIHNjb3I= 34203\nU2NyZWVuc2hvdA== 34204\nIHJlbGF4YXRpb24= 34205\nIyQjJA== 34206\nIGRldGVycmVudA== 34207\naWRkeQ== 34208\nIHBvd2VybGVzcw== 34209\nIGxlc2JpYW5z 34210\nIGNob3Jkcw== 34211\nIEVkaXRlZA== 34212\nc2VsZWN0ZWQ= 34213\nIHNlcGFyYXRpc3Rz 34214\nMDAwMg== 34215\nIGFpcnNwYWNl 34216\nIHR1cm5hcm91bmQ= 34217\nIGN1bm5pbmc= 34218\nUEFUSA== 34219\nUG9seQ== 34220\nIGJvbWJlZA== 34221\nIHRpb24= 34222\neHM= 34223\nIHdpdGhob2xk 34224\nIHdhZ2Vk 34225\nIExpYmVydGllcw== 34226\nRmxhZw== 34227\nIGNvbWZvcnRpbmc= 34228\nNDU0 34229\nIElyaXM= 34230\nYXJlcnM= 34231\nIHJhZw== 34232\nIHJlbG9jYXRlZA== 34233\nIEd1YXJhbnQ= 34234\nIHN0cmF0ZWdpY2FsbHk= 34235\nIGdhbW1h 34236\ndWJlcnR5 34237\nIExvY2toZWVk 34238\nZ3Jlcw== 34239\nIGdyaWxsZWQ= 34240\nIExvd2U= 34241\nc3RhdHM= 34242\nIFJvY2tz 34243\nIHNlbnNpbmc= 34244\nIHJlbnRpbmc= 34245\nIEdlb2xvZ2ljYWw= 34246\n2KfY 34247\nb3Ryb3A= 34248\nIHNldw== 34249\nIGltcHJvcGVybHk= 34250\nNDg2 34251\nIOKWoA== 34252\nIHN0YXJ2aW5n 34253\nIEJq 34254\nRGlzY3Vzc2lvbg== 34255\nMzI4 34256\nIENvbWJv 34257\nIEZpeGVz 34258\nTkFU 34259\nIHN0cml2aW5n 34260\ndGhvcmE= 34261\nIGhhcnZlc3RlZA== 34262\nIFBpbmc= 34263\nIHBsYXlmdWw= 34264\nIGF2ZW51ZXM= 34265\nIG9jY3VwYXRpb25hbA== 34266\nIHdha2Vz 34267\nIENvdXJpZXI= 34268\nIGRydW1tZXI= 34269\nIEJyb3dzZXI= 34270\nIEhvdXRo 34271\naXR1 34272\nIGFwcGFyZWw= 34273\ncGFzdGU= 34274\nIGh1bnRlZA== 34275\nIFNlY29uZGx5 34276\nbGFpbg== 34277\nWFk= 34278\nIFBJTg== 34279\naWNvbnM= 34280\nIGNvY2t0YWlscw== 34281\nIHNpemFibGU= 34282\nIGh1cmRsZXM= 34283\nZXN0aW5hbA== 34284\nIFJlY3JlYXRpb24= 34285\nIGVjbw== 34286\nNjQ4 34287\nIERpZWQ= 34288\nbWludA== 34289\nIGZpbmdlcnByaW50cw== 34290\nIGRpc3Bvc2U= 34291\nIEJvc25pYQ== 34292\ndHN5 34293\nMjIwMA== 34294\nIGluc3BlY3RlZA== 34295\nIEZvdQ== 34296\nIGZ1c3M= 34297\nIGFtYnVzaA== 34298\nIFJhaw== 34299\nIG1hbmlmZXN0ZWQ= 34300\nUHJvc2VjdXQ= 34301\nIHN1ZmZpY2U= 34302\ncmVuY2Vz 34303\nIGNvbXBlbnNhdGVk 34304\nIEN5cnVz 34305\nIGdlbnVz 34306\nIFdvbHZlcmluZQ== 34307\nIFRyZW5kcw== 34308\nIGhpa2Vz 34309\nIFNlZW4= 34310\nIGVucm9s 34311\nQ29sZA== 34312\nIHBvbGl0ZWx5 34313\nIFNsYXY= 34314\nIFJ1cGVydA== 34315\nIGV5ZXdpdG5lc3M= 34316\nIEFsdG8= 34317\nIHVuY29tcA== 34318\nIHBvc3Rlcmlvcg== 34319\nTXVzdA== 34320\nIEhlcno= 34321\nIHByb2dyZXNzaXZlbHk= 34322\nIDIzNA== 34323\nIGluZGlmZmVyZW5jZQ== 34324\nIEN1bm5pbmdoYW0= 34325\nIGFjYWRlbWlh 34326\nIHNld2Vy 34327\nIGFzdG91bmRpbmc= 34328\nIEFFUw== 34329\ncmF0aGVy 34330\nIGVsZGVzdA== 34331\nIGNsaW1icw== 34332\nIEFkZHM= 34333\nIG91dGNyeQ== 34334\nIGNvbnRhZw== 34335\nIEhvdXNlcw== 34336\nIHBlcHQ= 34337\nIE1lbGFuaWE= 34338\naW50ZXJlc3RlZA== 34339\nIFVDSA== 34340\nIFJvb3Rz 34341\nIEh1YmJhcmQ= 34342\nIFRCRA== 34343\nIFJvbWFuaWFu 34344\nZmlsZW5hbWU= 34345\nU3RvbmU= 34346\nIEltcGw= 34347\nIGNocm9tb3NvbWU= 34348\nQ2xl 34349\nZHg= 34350\nIHNjcmFtYmxlZA== 34351\nIFB0 34352\nIDI0Mg== 34353\nT1BMRQ== 34354\nIHRyZW1lbmRvdXNseQ== 34355\nU3RyZWV0 34356\nIGNyYXZpbmc= 34357\nIGJ1bmRsZWQ= 34358\nIFJH 34359\ncGlwZQ== 34360\nIGluanVyaW5n 34361\nIGFyY2FuZQ== 34362\nUGFydGljaXA= 34363\nIEhlcm9pYw== 34364\nc3R5 34365\nIHRvcHBpbmc= 34366\nIFRlbXBlc3Q= 34367\ncmVudGljZXM= 34368\nYmg= 34369\nIHBhcmFub2lh 34370\nIFVuaWNvZGU= 34371\nIGVncmVnaW91cw== 34372\nIFwn 34373\nIE9zd2FsZA== 34374\nIGdyYXZlbA== 34375\nIFNpbXBzb25z 34376\nIGJsYW5k 34377\nIEd1YW50YW5hbW8= 34378\nV3JpdGVy 34379\nbGluZXJz 34380\nIERpY2U= 34381\nSkM= 34382\nIHBhcml0eQ== 34383\nIHNpZGVk 34384\nIDIzNw== 34385\nIFB5cnJoYQ== 34386\nYXR0ZXJz 34387\nZGs= 34388\nRmluZQ== 34389\nY29tcGFu 34390\nIGZvcm11bGF0ZWQ= 34391\nIElkb2w= 34392\naWxlcnM= 34393\naGVtb3Ro 34394\nIEZhdg== 34395\nIGludHJ1c2lvbg== 34396\nIGNhcnJvdHM= 34397\nIExheWVy 34398\nIEhhY2tlcg== 34399\nIC0tLS0tLS0tLS0tLS0tLS0= 34400\nIG1vZGVyYXRpb24= 34401\n6YE= 34402\nb2NvYw== 34403\nIGNoYXJhY3Rlcml6ZQ== 34404\nIFRlcmVzYQ== 34405\nIHNvY2lvZWNvbm9taWM= 34406\nIHBlcms= 34407\nIFBhcnRpY2lwYXRpb24= 34408\ndHJhaW5pbmc= 34409\nIFBhdWxv 34410\ncGh5cw== 34411\nIHRydXN0d29ydGh5 34412\nIGVtYm9kaWVk 34413\nIE1lcmNo 34414\nY3VycmVuY3k= 34415\nIFByaW9yaXR5 34416\nIHRlYXNpbmc= 34417\nIGFic29yYmluZw== 34418\nIHVuZmluaXNoZWQ= 34419\nIENvbXBhcmlzb24= 34420\nIGRpc3BsZQ== 34421\nd3JpdGVycw== 34422\nIHByb2Zlc3Npb25z 34423\nIFBlbmd1aW4= 34424\nIGFuZ3JpbHk= 34425\nIExJTks= 34426\nNjg4 34427\nIENvcnJlc3BvbmQ= 34428\nIHByZXZhaWxlZA== 34429\nIGNhcnRlbA== 34430\nbHA= 34431\nYXNtcw== 34432\nIFJlZGVtcHRpb24= 34433\nIElzbGFtaXN0cw== 34434\nZWZmZWN0cw== 34435\nZG9zZQ== 34436\nIExhdHRlcg== 34437\nIEhhbGlmYXg= 34438\nIHZhcw== 34439\nIFRvcGljcw== 34440\nIE5hbWVk 34441\nYWR2ZXJ0aXNpbmc= 34442\nenph 34443\nSUNFUw== 34444\nIHJldGFyZGVk 34445\nYWNoYWJsZQ== 34446\nIFB1cHBldA== 34447\nIEl0ZW1MZXZlbA== 34448\nIHJldHJhY3Q= 34449\nIGlkZW50aWZpYWJsZQ== 34450\nQWFyb24= 34451\nIEJ1c3Rlcg== 34452\nc29s 34453\naGVsbGU= 34454\nYXNzZW1i 34455\nSG9wZQ== 34456\ncmFuZ2Vk 34457\nQmE= 34458\nIFB1cmNo 34459\n6YA= 34460\nIFNpcmk= 34461\nIGFycml2YWxz 34462\nIDE5MTI= 34463\nIHNob3J0ZW5lZA== 34464\nIDMxMg== 34465\nIGRpc2NyZXBhbmN5 34466\nIFRlbXBlcmF0dXJl 34467\nIFdhbHRvbg== 34468\nIGtpbmRlcmc= 34469\ncG9saXQ= 34470\nIHJlbWl4 34471\nIGNvbm5lY3RvcnM= 34472\n44OY44Op 34473\nIEthemFraHN0YW4= 34474\nZG9taW5hdGVk 34475\nIHN1Z2Fycw== 34476\naW1ibGU= 34477\nIFBhbmlj 34478\nIERlbWFuZA== 34479\nIENvbG9ueQ== 34480\nb25lbg== 34481\nIE1FUg== 34482\nNzc1 34483\ndXJpYQ== 34484\nYXphYXI= 34485\nIERlZ3JlZQ== 34486\nUHJp 34487\nIHN1bnNoaW5l 34488\nIDI1MQ== 34489\nIHBzeWNoZWRlbGlj 34490\nIGRpZ2l0YWxseQ== 34491\nIEJyYXVu 34492\nIHNoaW1tZXI= 34493\nIHNoYXZl 34494\nIFRlbGVzYw== 34495\nIEFzdHJhbA== 34496\nIFZlbmV6dWVsYW4= 34497\nIE9H 34498\nIGNyYXdsaW5n 34499\nSW50ZWc= 34500\nIEZlYXRoZXI= 34501\nIHVuZm9sZGluZw== 34502\nIGFwcHJvcHJpYXRpb24= 34503\nIOijj+g= 34504\nIE1vYmlsaXR5 34505\nIE5leQ== 34506\nLS4= 34507\nYmlsdA== 34508\nTElO 34509\nIFR1YmU= 34510\nIENvbnZlcnNlbHk= 34511\nIGtleWJvYXJkcw== 34512\nIENhbw== 34513\nIG92ZXJ0aA== 34514\nIGxhdXJl 34515\nPj5c 34516\nIFZpcGVy 34517\nYWNoYQ== 34518\nT2Zmc2V0 34519\nIFJhbGVpZ2g= 34520\nIEphZQ== 34521\nSm9yZGFu 34522\nanA= 34523\nIHRvdGFsaXRhcmlhbg== 34524\nQ29ubmVjdG9y 34525\nIG9ic2VydmVz 34526\nIFNwYXJ0YW4= 34527\nIEltbWVkaWF0ZWx5 34528\nIFNjYWw= 34529\nQ29vbA== 34530\nIHRhcHM= 34531\nIHJvYXI= 34532\nUGFzdA== 34533\nIGNoYXJz 34534\nIEJlbmRlcg== 34535\nIFNoZWxkb24= 34536\nIHBhaW50ZXI= 34537\nIGJlYWNvbg== 34538\nIENyZWF0dXJlcw== 34539\nIGRvd250dXJu 34540\nIGhpbmRlcg== 34541\nIEFuZHJvbWVkYQ== 34542\nw5s= 34543\nY2NvbGk= 34544\nIEZpdG5lc3M= 34545\nZXRyaWNhbA== 34546\nIHV0aWxpemVz 34547\nIHNlbmF0ZQ== 34548\nIGVuc2VtYmxl 34549\nIGNoZWVycw== 34550\nVFc= 34551\nIGFmZmx1ZW50 34552\na2ls 34553\ncnlsaWM= 34554\nb3JkZXJpbmc= 34555\nQ29tcHV0ZXI= 34556\nIGdydWVzb21l 34557\nb3N0aWNz 34558\nIFViaXNvZnQ= 34559\nIEtlbGxleQ== 34560\nIHdyZW5jaA== 34561\nIGJvdXJnZW9pc2ll 34562\nSUJMRQ== 34563\nIFByZXN0b24= 34564\nd29ybg== 34565\nYXJpc3Q= 34566\ncmVhdGluZw== 34567\nIHN0YWluZWQ= 34568\nYXJpbmU= 34569\nIHNsaW1l 34570\nRU5O 34571\nIGNoZXN0cw== 34572\nIGdyb3VuZHdhdGVy 34573\nYW5ub3Q= 34574\nIFRyYXk= 34575\nIExvY2tl 34576\nIENUUg== 34577\nIGR1ZGVz 34578\nIEV4dGVybmFs 34579\nIERlY29kZXI= 34580\nIHBhcmFtZWQ= 34581\nIE1lZGxpbmU= 34582\nODA5 34583\nIERpbm5lcg== 34584\ncnVwYWw= 34585\nZ3o= 34586\nIEd1bQ== 34587\nIERlbW8= 34588\namVl 34589\nIGRo 34590\nYmVybWFu 34591\nYXJjaHM= 34592\nIGVucXU= 34593\nIEVwc3RlaW4= 34594\nIGRldmFzdGF0aW9u 34595\nIGZyaWVuZHNoaXBz 34596\nIEFyZA== 34597\nIDIzMQ== 34598\nIFJ1Ymlu 34599\nIERpc3RhbmNl 34600\nIHNwdXJyZWQ= 34601\nIGRvc3NpZXI= 34602\nIG92ZXJsb29raW5n 34603\nXFxcXFxcXFxcXFxcXFxcXA== 34604\nRm9yZXN0 34605\nIENvbWVz 34606\nXCIs 34607\nIElyYW5pYW5z 34608\nIGZpeHR1cmVz 34609\nTGF1Z2hz 34610\nIGN1cnJ5 34611\nIEtpbmdzdG9u 34612\nIHNxdWFzaA== 34613\nIGNhdGFsb2d1ZQ== 34614\nIGFibm9ybWFsaXRpZXM= 34615\nIGRpZ2VzdGl2ZQ== 34616\nLi4uLi4uLi4u 34617\nIHN1Ym9yZGluYXRl 34618\nb2dseQ== 34619\nIDI0OQ== 34620\nTWlkZGxl 34621\nIG1hc3NhYw== 34622\nIGJ1cmdlcnM= 34623\nIGRvd25zdGFpcnM= 34624\nIDE5MzE= 34625\nMzk0 34626\nIFZH 34627\nIGxhc2Vycw== 34628\nIFNpa2g= 34629\nIEFsZXhh 34630\nZGVyaXZlZA== 34631\nIGN5Y2xpc3Q= 34632\n44Gu6a2U 34633\nb25lbGluZXNz 34634\nISEhISEhISE= 34635\nIGJ1ZmZz 34636\nbGVnYXRl 34637\nIHJhcGluZw== 34638\nIHJlY29tbWVuZGluZw== 34639\ncm9yZWQ= 34640\nIG11bHRpY3VsdHVyYWw= 34641\ndW5pcXVl 34642\nIGJ1c2luZXNzbWVu 34643\nIHVuZWFzeQ== 34644\nIE1BUA== 34645\nIGRpc3BlcnNlZA== 34646\nY2lwbGluZQ== 34647\nSmVzcw== 34648\nIEtlcmFsYQ== 34649\n5ac= 34650\nIGFic3RyYWN0aW9u 34651\nU3Vydg== 34652\nVWg= 34653\nIHByaW50ZXJz 34654\naWph 34655\nb3dkZXI= 34656\nIGFuYWxvZ291cw== 34657\nIEFTUA== 34658\nYWZlcg== 34659\nIHVuZm9sZGVk 34660\nIGxldmVsaW5n 34661\nIGJyZWFjaGVk 34662\nIEhlYXJpbmc= 34663\nIG5hdA== 34664\nIHRyYW5zbGF0aW5n 34665\nY3JpdGljYWw= 34666\nIGFudGFnb25pc3Q= 34667\nIFllc3RlcmRheQ== 34668\nIGZ1enp5 34669\nd2FzaA== 34670\nbWVyZQ== 34671\nIGJld2lsZA== 34672\nIE1hZQ== 34673\nVmlyZ2lu 34674\ncGhyYXNl 34675\nIHNpZ25hbGVk 34676\nIEhJR0g= 34677\nIHByb3Rlc3Rlcg== 34678\nIGdhcm5lcg== 34679\ndW5rbm93bg== 34680\nIGtheQ== 34681\nIGFiZHVjdGVk 34682\nIHN0YWxraW5n 34683\nYW1u 34684\nIGRlc2VydmluZw== 34685\nIFJpdg== 34686\nIEpvcmdl 34687\nIHNjcmF0Y2hpbmc= 34688\nIFNhdmluZw== 34689\naXBpbmc= 34690\nIHRlYXNl 34691\nIG1pc3Npb25hcnk= 34692\nIE1vcnJvdw== 34693\nVElNRQ== 34694\nUHJlc2VudA== 34695\nIGNoZW1vdGhlcmFweQ== 34696\ndGVybmVzcw== 34697\nIEhvbWVz 34698\nIFB1cmR1ZQ== 34699\nIHN0YXVuY2g= 34700\nIFdoaXRuZXk= 34701\nIFRIRVJF 34702\nzrw= 34703\naWF0dXM= 34704\nIEVybmVzdA== 34705\nIERlcGxveQ== 34706\nIGNvdmV0ZWQ= 34707\nRk1M 34708\nIERpYWxvZ3Vl 34709\nIGV4aXRlZA== 34710\nZnJ1aXQ= 34711\nIG5lcmQ= 34712\nIjoiIiwi 34713\nIHZpdm8= 34714\ncnVseQ== 34715\nNDYw 34716\nIEFtZW4= 34717\ncmVoZW5zaWJsZQ== 34718\nIOKY 34719\nRElS 34720\nIGFkaGVyZW5jZQ== 34721\nIGNoZXc= 34722\nIENva2U= 34723\nIFNlcmdlaQ== 34724\nZGlnaXRhbA== 34725\nIE5lY2s= 34726\nZ2VudGx5 34727\nZW50aGFs 34728\nLyk= 34729\nIHdlYXJ5 34730\nIGd1aXNl 34731\nIENvbmNvcmQ= 34732\nIE9uaW9u 34733\nYXRjaGVy 34734\nIGJpbmdl 34735\nIERpcmVjdGl2ZQ== 34736\nIG1hbm5lZA== 34737\nYW5zaw== 34738\nIGlsbHVzaW9ucw== 34739\nIGJpbGxpb25haXJlcw== 34740\nMzgz 34741\nb2x5bg== 34742\nb2R5bmFtaWM= 34743\nIFdoZWF0 34744\nIEFsaWM= 34745\nIGNvbG91cmVk 34746\nIE5BRlRB 34747\nYWJv 34748\nIG1hY3Jvcw== 34749\naW5kZXBlbmRlbnQ= 34750\nc3dlZXQ= 34751\nIHNwYWM= 34752\nIEthYnVs 34753\nIMQ= 34754\nZW1l 34755\nIGRpY3RhdGVk 34756\nIHNob3V0cw== 34757\nPXs= 34758\nIHJpcHBpbmc= 34759\nIFNoYXk= 34760\nIENyaWNrZXQ= 34761\nZGlyZWN0ZWQ= 34762\nIGFuYWx5c2Vk 34763\nIFdBUlJBTlQ= 34764\nYWdvbnM= 34765\nIEJsYXplcnM= 34766\nIGNoZWVyZWQ= 34767\nIGFyaXRobWV0aWM= 34768\nIFRhbno= 34769\nMzcz 34770\nIEZsYWdz 34771\nIDI5NQ== 34772\nIHdpdGNoZXM= 34773\nIEluY2x1ZGVk 34774\nIEdhaW5lZA== 34775\nIEJsYWRlcw== 34776\nR2Ft 34777\nIFNhbWFudGhh 34778\nIEF0bGFudGlz 34779\nIFByYXR0 34780\nIHNwb2lsZWQ= 34781\nIElC 34782\nIFJhbWlyZXo= 34783\nUHJvYmFibHk= 34784\ncmVybw== 34785\nIE5n 34786\nIFdhcmxvY2s= 34787\ndHA= 34788\nIG92ZXJoZQ== 34789\nIGFkbWluaXN0cmF0aW9ucw== 34790\nIHRpbnQ= 34791\nIHJlZ2ltZW50 34792\nIHBpc3RvbHM= 34793\nIGJsYW5rZXRz 34794\nIGVwaXN0 34795\nIGJvd2xz 34796\nIGh5ZHJhdWxpYw== 34797\nIGRlYW4= 34798\nIGp1bmc= 34799\nIGFzY2VuZA== 34800\nNzA1 34801\nIFNhbnRpYWdv 34802\nw64= 34803\nIHVuYXZvaWQ= 34804\nIFNoYW1hbg== 34805\ncmVi 34806\nIHN0ZW1taW5n 34807\nOTk4 34808\nIE1H 34809\nc3RpY2tz 34810\nZXN0aGVzaWE= 34811\nRVJP 34812\nIG1vcmJpZA== 34813\nIEdyaWxs 34814\nIFBvZQ== 34815\nYW55bA== 34816\nIGRlbGV0aW5n 34817\nIFN1cnZlaWxsYW5jZQ== 34818\nIGRpcmVjdGl2ZXM= 34819\nIGl0ZXJhdGlvbnM= 34820\nIFJveA== 34821\nIE1pbGt5 34822\nRmF0aGVy 34823\nIHBhdGVudGVk 34824\nNDQ3 34825\nIHByZWN1cnNvcg== 34826\nIG1haWRlbg== 34827\nIFBoZW4= 34828\nIFZlZ2Fu 34829\nIFBhdGVudA== 34830\nS2VsbHk= 34831\nUmVkZGl0b3I= 34832\nIG5vZHM= 34833\nIHZlbnRpbGF0aW9u 34834\nIFNjaHdhcno= 34835\nIHdpemFyZHM= 34836\nIG9taW5vdXM= 34837\nIEhlYWRz 34838\nIEJH 34839\nIGx1bWJlcg== 34840\nIFNwaWVs 34841\nIGlzRW5hYmxlZA== 34842\nIGFuY2VzdHJhbA== 34843\nIFNoaXBz 34844\nIHdyZXN0bGVy 34845\ncGhp 34846\nIHl1YW4= 34847\nIFJlYmVsbGlvbg== 34848\nIGljZWJlcmc= 34849\nIG1hZ2ljYWxseQ== 34850\nIGRpdmVyc2lvbg== 34851\nYXJybw== 34852\neXRobQ== 34853\nIFJpZGVycw== 34854\nIFJvYmJpZQ== 34855\nIEthcmE= 34856\nIE1haW50ZW5hbmNl 34857\nIEhlcmI= 34858\nIGhhcm1z 34859\ncGFja2Vk 34860\nIEZlaW5zdGVpbg== 34861\nIG1hcnJ5aW5n 34862\nIGJsZW5kaW5n 34863\nIFJhdGVz 34864\nIDE4ODA= 34865\nIHdyaW5r 34866\nIFVuY2g= 34867\nIFRvcmNo 34868\nZGVzY3JpYmVk 34869\nIGh1bWFub2lk 34870\naWxpdGF0aW5n 34871\nIENvbnY= 34872\nIEZlbGQ= 34873\nSUdIVFM= 34874\nIHdoaXN0bGVibG93ZXI= 34875\nb3J0bXVuZA== 34876\nZXRzeQ== 34877\nYXJyZXR0 34878\nIE1vbm8= 34879\nIElrZQ== 34880\nIENOQkM= 34881\nIFdBWQ== 34882\nIE1ETUE= 34883\nIEluZGl2aWR1YWxz 34884\nIHN1cHBsZW1lbnRhbA== 34885\nIHBvd2VyaG91c2U= 34886\nIFN0cnU= 34887\nRm9jdXM= 34888\nYXBoYWVs 34889\nIENvbGxlZw== 34890\nYXR0aQ== 34891\nWkE= 34892\nIHBlcmVubg== 34893\nIFNpZ25hdHVyZQ== 34894\nIFJvZG5leQ== 34895\nIGN1YmVz 34896\naWRkbGVk 34897\nIERhbnRl 34898\nIElOVg== 34899\naWxpbmd1YWw= 34900\nIEN0aA== 34901\nIHNvZmE= 34902\nIGludGltaWRhdGU= 34903\nIFJvZQ== 34904\nIERpcGxvbQ== 34905\nIENvdW50cmllcw== 34906\nYXlzb24= 34907\nIGV4dHJhZGl0aW9u 34908\nIGRpc2FibGluZw== 34909\nIENhcmRpZmY= 34910\nIG1lbW9yYW5kdW0= 34911\nIFRyYWNl 34912\nID8/Pw== 34913\nc2VjdG9y 34914\nIFJvdWhhbmk= 34915\nIFlhdGVz 34916\nIEZyZWV6ZQ== 34917\nIGJsYWRkZXI= 34918\nTW90b3I= 34919\nIFByb21pc2U= 34920\nYW50YXN5 34921\nIGZvcmVzZWVhYmxl 34922\nIENvbG9nbmU= 34923\nY29udGFpbmVy 34924\nIFRyZWVz 34925\nIEdvcnM= 34926\nIFNpbmNsYWly 34927\nIGJhcnJpbmc= 34928\na2V5ZQ== 34929\nIHNsYXNoZWQ= 34930\nIFN0YXRpc3RpY2Fs 34931\n6Yc= 34932\nIOKWug== 34933\nQWxsb3dz 34934\nIGh1bWlsaXR5 34935\nIGRyaWxsZWQ= 34936\nIEZ1cm4= 34937\nNDQz 34938\nIHNld2FnZQ== 34939\nIGhvbWVwYWdl 34940\nIGNvdXJ0eWFyZA== 34941\nIHZpbGU= 34942\nIHN1YnNpZGlhcmllcw== 34943\nYWpv 34944\nZGlyZWN0b3J5 34945\nIGFtbW9u 34946\nVmVycw== 34947\nY2hhcmdlcw== 34948\nIH19 34949\nIENoYWlucw== 34950\nIDI0Ng== 34951\nbm9i 34952\nIHBlcmNlcHQ= 34953\nIGdyaXQ= 34954\nIGZpc2hlcm1lbg== 34955\nIElyYXFpcw== 34956\nIERJU1RS 34957\nIEZVTEw= 34958\nIEV2YWx1YXRpb24= 34959\nZ3JhcGg= 34960\nYXRpYWw= 34961\nIGNvb3BlcmF0aW5n 34962\nIG1lbGFu 34963\nIGVubGlnaHRlbmVk 34964\nIGFsaQ== 34965\ndGFpbGVk 34966\nIHNhbHV0ZQ== 34967\nIHdlYWtlc3Q= 34968\nIEJ1bGxkb2dz 34969\nVUE= 34970\nIEFsbG95 34971\nIHNlbWVu 34972\nb2NlbmU= 34973\nIFdpbGxpYW1zb24= 34974\nc3By 34975\nLOKAlA== 34976\nIEdG 34977\naXR0ZW5z 34978\nQmVhdA== 34979\nIEp1bms= 34980\naXBoYXRl 34981\nIEZhcm1lcnM= 34982\nIEJpdGNvaW5z 34983\naWdlcnM= 34984\nZGg= 34985\nIExveWFs 34986\ncGF5ZXI= 34987\nIGVudGVydGFpbmVk 34988\nIHBlbm5lZA== 34989\nIGNvdXBvbg== 34990\nUXVldWU= 34991\nIHdlYWtlbmluZw== 34992\nY2Fycnk= 34993\nIHVuZGVyZXN0aW1hdGU= 34994\nIHNob290b3V0 34995\nIGNoYXJpc21hdGlj 34996\nIFByb2NlZHVyZQ== 34997\nIHBydWRlbnQ= 34998\naW5hbmNlcw== 34999\nIHJpY2hlcw== 35000\nIGNvcnRpY2Fs 35001\nIHN0cmlkZXM= 35002\nIGRyaWI= 35003\nIE9pbGVycw== 35004\nNTQw 35005\nIFBlcmZvcm0= 35006\nIEJhbmdrb2s= 35007\nIGV1dGg= 35008\nU0VS 35009\nIHNpbXBsaXN0aWM= 35010\ndG9wcw== 35011\nY2FtcGFpZ24= 35012\nUXVhbGl0eQ== 35013\nIGltcG92ZXJpc2hlZA== 35014\nIEVpc2VuaG93ZXI= 35015\nIGF1Z21lbnQ= 35016\nIEhhcmRlbg== 35017\nIGludGVydmVuZWQ= 35018\nIGxpc3RlbnM= 35019\nIEtvaw== 35020\nIHNhZ2U= 35021\nIHJ1YmJpc2g= 35022\nIERlZA== 35023\nIG11bGw= 35024\ncGVsbGluZw== 35025\nIHZpZGVvdA== 35026\nUHJvZHVjdGlvbg== 35027\nREo= 35028\nbWlhaA== 35029\nIGFkYXB0YXRpb25z 35030\nIG1lZGljYWxseQ== 35031\nIGJvYXJkZWQ= 35032\nIGFycm9nYW5jZQ== 35033\nIHNjcmFwcGVk 35034\nIG9wcHJlc3M= 35035\nRk9STUFUSU9O 35036\nIGp1bmN0aW9u 35037\nNDE1 35038\nRUVFRQ== 35039\nU2tpbGw= 35040\nIHN1YmR1 35041\nIFN1Z2dlc3Q= 35042\nIFBldHQ= 35043\nIGxldHQ= 35044\nIE1hbmlw 35045\nIENhZg== 35046\nIENvb3BlcmF0aW9u 35047\nVGhlcg== 35048\nIHJlZ2FpbmVk 35049\ntuY= 35050\ncmVmbGVjdA== 35051\nIHRodWdz 35052\nIFNoZWxieQ== 35053\nIGRpY3RhdGVz 35054\nIFdlaW5lcg== 35055\nIEhhbGU= 35056\nIGJhdHRsZWdyb3VuZA== 35057\nc2NoaWxk 35058\nIGNvbmRvbA== 35059\naHVudA== 35060\nb3NpdG9yaWVz 35061\nIGFjY3VzZXM= 35062\nRmlsZW5hbWU= 35063\nIHNocmk= 35064\nIG1vdGl2YXRl 35065\nIHJlZmxlY3Rpb25z 35066\nTnVsbA== 35067\nIExvYmJ5 35068\npbU= 35069\nIFNBVEE= 35070\nIEJhY2t1cA== 35071\n0YM= 35072\nbmlu 35073\nIENvcnJlY3Rpb24= 35074\nIGp1aWN5 35075\ndXRyYQ== 35076\nIFByaWM= 35077\nIHJlc3RyYWluaW5n 35078\nIEFpcmJuYg== 35079\nIEFycmVzdA== 35080\nIGFwcHJvcHJpYXRpb25z 35081\nIHNsb3Blcw== 35082\nIG1hbnNsYXVnaHRlcg== 35083\nIHdvcmtpbmdz 35084\nIEh1c3M= 35085\nIEZyZXk= 35086\nTGVhdmU= 35087\nIEhhcm1vbnk= 35088\nIEZlZGVy 35089\nIDQzMA== 35090\nIHRyZW5jaA== 35091\nIGdsYWRseQ== 35092\nIGJ1bGxwZW4= 35093\nIEdhdQ== 35094\nYm9uZXM= 35095\nIGdyb292ZQ== 35096\nIHByZXRleHQ= 35097\n44WL 35098\nIHRyYW5zbWl0dGVy 35099\nIENvbXBvbmVudA== 35100\nIHVuZGVyYWdl 35101\nIEVtcGlyZXM= 35102\nVGlsZQ== 35103\nIG95 35104\nIE1hcnZpbg== 35105\nIENBUw== 35106\nIGJsb3Nz 35107\nIHJlcGxpY2F0ZWQ= 35108\nIE1hcmluZXJz 35109\nTWFyY3Vz 35110\nIEJsb2Nrcw== 35111\nIGxpYmVyYXRlZA== 35112\nIGJ1dHRlcmZseQ== 35113\nRmVlbA== 35114\nIGZlcm1lbnRhdGlvbg== 35115\nIHlvdXR1YmU= 35116\nIG9mZmVuZA== 35117\nIFRlcm0= 35118\ncmVzaXN0 35119\nIGNlc3NhdGlvbg== 35120\nIGluc3VyZ2VuY3k= 35121\nIGJpcg== 35122\nIFJhaXNl 35123\nNTk1 35124\nIGh5cG90aGVzZXM= 35125\nNTAy 35126\nIHBsYXF1ZQ== 35127\nb2NyYXQ= 35128\nIGphY2tldHM= 35129\nIEh1ZmZQb3N0 35130\nYW1vbmc= 35131\nIGNvbmZlcg== 35132\nNDg3 35133\nIExpbGx5 35134\nIGFkYXB0aW5n 35135\nIEZheQ== 35136\nIHNob3ZlZA== 35137\ndmVj 35138\nIHJlZmluZQ== 35139\nIGdvbg== 35140\nIGd1bm1lbg== 35141\nemFp 35142\nIFNodXR0bGU= 35143\nIEl6YW4= 35144\nIDE5MTM= 35145\nIHBsZXRob3Jh 35146\nwrfCtw== 35147\nIDUxMA== 35148\nIHB1YmVydHk= 35149\nIDI0MQ== 35150\nIFdlYWx0aA== 35151\nIEFsbWE= 35152\nIE1FTQ== 35153\nIEFkdWx0cw== 35154\nQ2Fz 35155\ncHJpc29u 35156\nUmFjZQ== 35157\nIHdhdGVycHJvb2Y= 35158\nIGF0aGxldGljaXNt 35159\nIGNhcGl0YWxpemU= 35160\nIEp1aWNl 35161\nIGlsbHVtaW5hdGVk 35162\nIFBhc2NhbA== 35163\nIGlycml0YXRpb24= 35164\nIFdpdG5lc3Nlcw== 35165\nYWRsZQ== 35166\nIEFzdHJv 35167\nIGZheA== 35168\nIEVsdmlz 35169\nUHJpbWFyeQ== 35170\nIExpY2g= 35171\nIEVsdmVz 35172\nIHJlc2lkaW5n 35173\nIHN0dW1ibGU= 35174\nMzE5 35175\nIFBLSw== 35176\nIGFkdmVyc2FyaWVz 35177\nRE9T 35178\nIFJpdHVhbA== 35179\nIHNtZWFy 35180\nIGFyc29u 35181\naWRlbnRhbA== 35182\nIHNjYW50 35183\nIG1vbmFyY2h5 35184\nIGhhbGZ0aW1l 35185\nIHJlc2lkdWU= 35186\nIGluZGlnbg== 35187\nIFNoYXVu 35188\nIEVsbQ== 35189\nYXVyaQ== 35190\nQWZm 35191\nV0FUQ0g= 35192\nIEx5b24= 35193\naGVscHM= 35194\nMzYx 35195\nIGxvYmJ5aXN0 35196\nIGRpbWluaXNoaW5n 35197\nIG91dGJyZWFrcw== 35198\nIGdvYXRz 35199\nZmF2b3JpdGU= 35200\nIE5haA== 35201\nc29uaWFu 35202\nIEJvb3N0ZXI= 35203\nIHNhbmRib3g= 35204\nIEZhcmU= 35205\nIE1hbHRh 35206\nIGF0dFJvdA== 35207\nIE1PUg== 35208\nbGRl 35209\nIG5hdmlnYXRpbmc= 35210\nVG91Y2g= 35211\nIHVudHJ1ZQ== 35212\nIERpc2FzdGVy 35213\nIGx1ZGljcm91cw== 35214\nUGFzc3dvcmQ= 35215\nIEpGSw== 35216\nYmxvZ3Nwb3Q= 35217\nNDE2 35218\nIFVOREVS 35219\nZXJuYWw= 35220\nIGRlbGF5aW5n 35221\nVE9Q 35222\nIGltcGxhbnRz 35223\nIEFWRw== 35224\nIEh1Z2U= 35225\nYXR0cg== 35226\nIGpvdXJuYWxpc3RpYw== 35227\nIFBleXRvbg== 35228\nIElB 35229\nUmFw 35230\nZ29hbA== 35231\nIFByb2dyYW1tZQ== 35232\nIHNtYXNoaW5n 35233\nd2l2ZXM= 35234\ncHJpbnRsbg== 35235\nIFBsYWd1ZQ== 35236\naW51cw== 35237\nRUVQ 35238\nIGNydWlzZXI= 35239\nIFBhcmlzaA== 35240\ndW1pbml1bQ== 35241\nIG9jY3VwYW50cw== 35242\nIEppaGFk 35243\nbW9w 35244\nIHBpbnQ= 35245\nIGhlY3Q= 35246\nIE1lY2Nh 35247\nZGlyZWN0b3I= 35248\nIEZ1bmRpbmc= 35249\nIE1peGVk 35250\nIHN0YWc= 35251\nVGllcg== 35252\nIGd1c3Q= 35253\nIGJyaWdodGx5 35254\nb3JzaQ== 35255\nIHVwaGlsbA== 35256\nUkQ= 35257\nIGxlc2lvbnM= 35258\nIEJ1bmR5 35259\nbGl2aW91cw== 35260\nIGJpb2xvZ2lzdA== 35261\nIEZhY3VsdHk= 35262\nIEF1dGhvcml6YXRpb24= 35263\nIDI0NA== 35264\nQWxsb3c= 35265\n77g= 35266\nIEdpdWw= 35267\nIHBlcnRpbmVudA== 35268\nb3RhdXI= 35269\nZXNzZQ== 35270\nIFJvb2Y= 35271\nIHVubWFubmVk 35272\nMzUx 35273\nIFNoYWs= 35274\nIE9yaWVudA== 35275\nIGVuZGFuZ2Vy 35276\nRGly 35277\nIHJlcGxlbg== 35278\nZWRpZW50 35279\nIHRhaWxvcg== 35280\nIGdhZGdldHM= 35281\nIGF1ZGlibGU= 35282\n4piG 35283\nTmljZQ== 35284\nIGJvbWJhcmQ= 35285\nIFJhcGU= 35286\nIGRlZmlhbmNl 35287\nIFRXTw== 35288\nIEZpbGlwaW5v 35289\nIHVuYWZmZWN0ZWQ= 35290\nZXJ2YXRpdmVz 35291\nIHNvYXJlZA== 35292\nIEJvbHRvbg== 35293\nIGNvbXByb21pc2luZw== 35294\nIEJyZXdlcnM= 35295\nUkFM 35296\nIEFITA== 35297\naWN5Y2xl 35298\nIHZhbXBpcmVz 35299\nIGRpcHBlZA== 35300\nb3llcg== 35301\nIFhJSUk= 35302\nIHNpZGV3YXlz 35303\nIFdhc3Rl 35304\nIERpc3M= 35305\nIOKUnOKUgOKUgA== 35306\nJC4= 35307\nIGhhYml0YXRz 35308\nIEJlZWY= 35309\ndHJ1dGg= 35310\ndHJhaW5lZA== 35311\nc3BsaXQ= 35312\nUnVz 35313\nQW5keQ== 35314\nIEJyYW0= 35315\nUkVQ 35316\ncGlk 35317\n6KOF 35318\nIE11dGFudA== 35319\nQW5pbQ== 35320\nIE1hcmluYQ== 35321\nIGZ1dGlsZQ== 35322\naGlnaGVzdA== 35323\nZnJlcXVlbmN5 35324\nIGVwaWxlcHN5 35325\nIGNvcGluZw== 35326\nIGNvbmNpc2U= 35327\nIHRyYWNpbmc= 35328\nIFNVTg== 35329\ncGFuZWw= 35330\nIFNvcGhpZQ== 35331\nIENyb3dsZXk= 35332\nIEFkb2xm 35333\nIFNob290ZXI= 35334\nIHNoYWt5 35335\nIElH 35336\nIExpZXM= 35337\nIEJhcmJlcg== 35338\ncGtn 35339\nIHVwdGFrZQ== 35340\nIHByZWRhdG9yeQ== 35341\nVUxUUw== 35342\nLyoq 35343\nIGludG94aWNhdGVk 35344\nIFdlc3Ricm9vaw== 35345\nb2RkZXI= 35346\naGVtZW50 35347\nIGJhc2VtYW4= 35348\nQVBE 35349\nc3RvcmFnZQ== 35350\nIEZpZnR5 35351\nZWRpdG9y 35352\nR0VO 35353\nVVRJT04= 35354\naXJ0aW5n 35355\nIHNld2luZw== 35356\ncmlmdA== 35357\nIGFnb255 35358\nIFNhbmRz 35359\nIDI1NA== 35360\nQ2FzaA== 35361\nIGxvZGdl 35362\nIHB1bnQ= 35363\nTmF0dXJhbA== 35364\nIElkZWFz 35365\nIGVycm9uZW91cw== 35366\nIFNlbnNvcg== 35367\nIEhhbm5pdHk= 35368\nIDE5MjE= 35369\nIG1vdWxk 35370\nIEdvbg== 35371\na2F5YQ== 35372\nIGFub255bW91c2x5 35373\nIEtFWQ== 35374\nIHNpbXVsYXRvcg== 35375\nV2ludGVy 35376\nIHN0cmVhbWVk 35377\nNTA3 35378\nPyIs 35379\nIHRlYXNlZA== 35380\nIGNvZWZmaWNpZW50 35381\nIHdhcnRpbWU= 35382\nIFRIUg== 35383\nJycu 35384\nIEJhbmtpbmc= 35385\nbXBpcmU= 35386\nIGZhbmRvbQ== 35387\nIGxpYQ== 35388\nR2E= 35389\nIGRvd25oaWxs 35390\nIGludGVycHJldGluZw== 35391\nSW5kaXZpZHVhbA== 35392\nTm9ybQ== 35393\nIGplYWxvdXN5 35394\nYml0Y29pbg== 35395\nIHBsZWFzdXJlcw== 35396\nIFRveXM= 35397\nIENoZXZyb2xldA== 35398\nIEFkdmlzb3I= 35399\nSVpF 35400\nIHJlY2VwdGlvbnM= 35401\nNzA2 35402\nQ3Jv 35403\nIDI2Mg== 35404\nIGNpdHJ1cw== 35405\naXJ1 35406\nUmV2aWV3ZXI= 35407\namVjdGVk 35408\nVUVT 35409\nYW56 35410\nMTk4MQ== 35411\nIFdvcmtlcg== 35412\nIGNvbXBsaWVk 35413\nb3Jlc2NlbnQ= 35414\nY29udGluZW50YWw= 35415\nVG9u 35416\nIFByaXNt 35417\nIFNoZWVw 35418\nIDI4OA== 35419\nbm94 35420\nIFZvZw== 35421\nT3Jk 35422\nIHJlYWxtcw== 35423\ndGVr 35424\nIGlycmlnYXRpb24= 35425\nIGJpY3ljbGVz 35426\nIGVsZWN0cm9uaWNhbGx5 35427\ncG9seQ== 35428\ndGFsbA== 35429\nKCkpOw== 35430\nIGFlc3RoZXRpY3M= 35431\nIEludGVncmF0ZWQ= 35432\nRXhwbG9yZQ== 35433\nIGR1bms= 35434\nNDc2 35435\ncGFpbg== 35436\nIEphY3F1ZXM= 35437\nIERtaXQ= 35438\nRnJhbWVz 35439\nIHJldW5pdGVk 35440\nIGh1bWlk 35441\nRHJv 35442\nUG9saXRpY2Fs 35443\nIHlvdXRoZnVs 35444\nIGVudGFpbHM= 35445\nIG1vc3F1aXRv 35446\nMzYz 35447\nc3BlY2llcw== 35448\nIGNvb3JkaW5hdGluZw== 35449\nIE1heWhlbQ== 35450\nIE1hZ251cw== 35451\nTW91bnQ= 35452\nSW1wcm92ZWQ= 35453\nIFNUQVRF 35454\nQVRUTEU= 35455\nIGZsb3dlZA== 35456\nIHRhY2tsZWQ= 35457\nIGZhc2hpb25lZA== 35458\nIHJlb3JnYW4= 35459\naXZhcmk= 35460\nZmluZ2Vy 35461\nIHJlbHVjdGFudGx5 35462\nZXR0aW5n 35463\nIFZhbmQ= 35464\neW91bmc= 35465\nIEdhcmxhbmQ= 35466\nIHByZXN1bXB0aW9u 35467\nIGFtZW5pdGllcw== 35468\nIFBsZWFzYW50 35469\nb25lbnRpYWw= 35470\nIE94eQ== 35471\nIG1vcmFscw== 35472\nIFlhaA== 35473\nUmVhZHk= 35474\nU2ltb24= 35475\nRW5o 35476\nRGVtb24= 35477\nIGNsaWNo 35478\nTW9uaXRvcg== 35479\nIERV 35480\nIHdlbGNvbWVz 35481\nIHN0YW5kb3V0 35482\nIGRyZWFkZnVs 35483\nIGJhbmFuYXM= 35484\nIGJhbGxvb25z 35485\naG9vdGluZw== 35486\nYmFzaWM= 35487\nIHN1ZmZpeA== 35488\nIGR1bHk= 35489\nY2Fubw== 35490\nQ2hhaW4= 35491\nYXRvcw== 35492\nIGdlb3BvbGl0aWNhbA== 35493\nICgm 35494\nIEdlbWluaQ== 35495\nw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= 35496\nIGFjcXVpdHRlZA== 35497\nTHVjaw== 35498\ncHJvdGVjdA== 35499\nMTAyNA== 35500\nIHNjYXJjaXR5 35501\nIG1pbmRmdWxuZXNz 35502\nZWNpZGVk 35503\nRE4= 35504\ncHJpbWU= 35505\nIFByZXNpZGVudHM= 35506\nIFZJREVP 35507\nICjiiJI= 35508\nYWRkb2Nr 35509\nTk9S 35510\nIFBydQ== 35511\ncHVu 35512\nIExPTA== 35513\nKSkpKQ== 35514\nIExpcXU= 35515\nIFNBUw== 35516\nIHN0eWxpbmc= 35517\nIHB1bmlzaG1lbnRz 35518\nIG51bWI= 35519\nIGFzY2VydGFpbg== 35520\nIFJvY2tpZXM= 35521\nZmx1 35522\nVGh1bWJuYWls 35523\nIHBlcnBldHJhdGVk 35524\nIFNlbWk= 35525\nIGRpc2FybQ== 35526\nIE9sZGVy 35527\nIEV4Y2VwdGlvbg== 35528\nIGV4cG9uZW50aWFsbHk= 35529\nIENvbW11bml0aWVz 35530\nIGFib2xpc2g= 35531\nIFBhcnRuZXI= 35532\ncHRvbXM= 35533\nIDc3Nw== 35534\nIEZvbGV5 35535\nIENhc2Vz 35536\nIGdyZWFzZQ== 35537\nIFJlYmlydGg= 35538\nR3JvdW5k 35539\nIDsp 35540\nIERvY3RyaW5l 35541\naWtpbmk= 35542\nWWU= 35543\nIEJsb3Nzb20= 35544\nIHBlcnNpc3Rz 35545\nYmlsbA== 35546\nIGluZnVzaW9u 35547\nIGJ1ZGRpZXM= 35548\nOTEx 35549\nIFBhdGllbnQ= 35550\nIGRlbW9z 35551\nIGFjcXVhaW50YW5jZQ== 35552\nIFBhdw== 35553\nYXRhcmk= 35554\nIHhtbA== 35555\nIGZhc2NpbmF0aW9u 35556\nIFNlcnZl 35557\nz4I= 35558\nYnJhbmRlZA== 35559\nIGF6 35560\nUmV0dXJucw== 35561\nIG92ZXJzaGFkb3c= 35562\nIHJvYW0= 35563\nIHNwZWVkeQ== 35564\nbnVtYmVyZWQ= 35565\naGVsaWFs 35566\nIGRpc2NpcGxl 35567\nIGFzc3VyYW5jZXM= 35568\nZ2l2ZW4= 35569\ncGVjdGluZw== 35570\nIE5hdGFsaWU= 35571\n55Sw 35572\nIG1vc3F1aXRvZXM= 35573\ncm90ZWlu 35574\nIG51bWVyaWM= 35575\nIGluZGVwZW5kZW50cw== 35576\nIHRyYW5zaXRpb25hbA== 35577\nIHJlYWN0aW9uYXJ5 35578\nIE1lY2hkcmFnb24= 35579\nZG9jdG9y 35580\nIHNob3J0ZXN0 35581\nIHNlcXVlbnRpYWw= 35582\nIEJhYw== 35583\nIEFjY291bnRz 35584\n44GM 35585\nYWNoeQ== 35586\ncmFjdGl2ZQ== 35587\nIFJlZ2ltZW50 35588\nIGJyZWF0aHRha2luZw== 35589\nZmZpY2llbmN5 35590\nIEJhdGVz 35591\nIDMxMQ== 35592\nIHdhcmRyb2Jl 35593\nZnRz 35594\nIEJlcms= 35595\nU2ltcGx5 35596\nIFJpdmVyc2lkZQ== 35597\naXZlcmluZw== 35598\naWRlbnRpYWw= 35599\nbHVjZW50 35600\nIGVucmljaGVk 35601\nIENvbnZlcg== 35602\nIEdpdmluZw== 35603\n44OZ 35604\nIGxlZ2FsaXpl 35605\nIEZUQw== 35606\nIGZyZWFraW5n 35607\nTWl4 35608\nIHRlcnJlc3RyaWFs 35609\nZXNpYW4= 35610\nY2llbnRz 35611\nV2luZw== 35612\nTE9BRA== 35613\nIGxlZGdl 35614\nIFZpb2xlbnQ= 35615\nIE1ldGFsbA== 35616\nIDMwOA== 35617\nIHNvdXRoZWFzdGVybg== 35618\naGV0dG8= 35619\nTWVhdA== 35620\nIHNsb3dkb3du 35621\nIHJldHJlYXRlZA== 35622\nSmVyZW15 35623\nZW5kYXM= 35624\nKioqKio= 35625\nZXJpYw== 35626\nIHJlaW5z 35627\nb3BwYWJsZQ== 35628\nIEh1bWFuaXR5 35629\nZWFyYW5jZXM= 35630\ncmlnYW4= 35631\nQ2FtZXJh 35632\nIHdhaXZlcnM= 35633\nc29j 35634\nIGFsdGVyYXRpb24= 35635\ndHJhbnNmb3Jt 35636\nIENlbWV0ZXJ5 35637\nNTA2 35638\nIGluZGVmaW5pdGU= 35639\nIHN0aW11bGF0aW5n 35640\neWc= 35641\nNjAz 35642\nIFNvcA== 35643\nIGRlc2NyaXB0aXZl 35644\nUGhhc2U= 35645\nIEVkbXVuZA== 35646\nIHBuZXVtb25pYQ== 35647\ndmVudHVz 35648\nQW1i 35649\nIGxhYm9yYXRvcmllcw== 35650\nIEV4Y2x1c2l2ZQ== 35651\ndWdhcg== 35652\nV2VyZQ== 35653\nIG1hbGZ1bmN0aW9u 35654\nIGhvbW9zZXh1YWxz 35655\nIC0tLS0tLS0= 35656\ndW5p 35657\nIHR1cmJpbmVz 35658\nIEVxdWl0eQ== 35659\nRHU= 35660\nIG1pbmRlZA== 35661\nIFJI 35662\nIEJsYWNraGF3a3M= 35663\nIGZlYXRz 35664\nIDE3MDA= 35665\ncmVwbA== 35666\nMzYy 35667\nbGFkZW4= 35668\nIGluZGlzcGVuc2FibGU= 35669\nbHlzcw== 35670\ndHRp 35671\nIHJlZWw= 35672\nIGRpdmVydGVk 35673\nIGxpa2VuZXNz 35674\nIHN1YnNjcmlwdGlvbnM= 35675\nIGZpbmdlcnQ= 35676\nIGZpbHRoeQ== 35677\nZGVzdHJ1Y3Q= 35678\nZHJhZnQ= 35679\nIEJlcm5hcmRpbm8= 35680\nbGF1bmNo 35681\nIHBlcnBsZXg= 35682\nIFNVTQ== 35683\nY2FyYg== 35684\nIHN3ZWF0ZXI= 35685\nIFZlbnR1cmU= 35686\nIEphZw== 35687\nIENlbGVi 35688\nIFZvdGVycw== 35689\nIHN0ZWFkZmFzdA== 35690\nIGF0aGxldGljcw== 35691\nIEhhbnNvbg== 35692\nIERyYWM= 35693\nVHJhY2tlcg== 35694\nIGNvbW1lbmQ= 35695\nIFByZXNpZGVuY3k= 35696\nIERJRA== 35697\naW5mb3JtZWQ= 35698\nIHdlYnBhZ2U= 35699\nUHJldHR5 35700\nIGZvcmNlZnVsbHk= 35701\n44OD44Kv 35702\nIHJlbG9jYXRpb24= 35703\nIHNhdGlyZQ== 35704\n4ok= 35705\nIFN1bmRlcmxhbmQ= 35706\n5oQ= 35707\nVm9pY2U= 35708\nPz8/Pz8/Pz8= 35709\nIGluZm9ybWFudA== 35710\nIGJvd2Vs 35711\nIFVuaWZvcm0= 35712\nIC4uLiI= 35713\nIHB1cmdl 35714\nIHBpY25pYw== 35715\nIFVtYg== 35716\nIFVQREFURQ== 35717\nIFNhcHBoaXJl 35718\nIFN0YWxs 35719\nbGVhcm4= 35720\nIG9iamVjdGl2ZWx5 35721\nIG9ibGl0ZXI= 35722\nIGxvb3Bob2xl 35723\nIGpvdXJuZXlz 35724\nIG9taXNzaW9u 35725\nUHJvcw== 35726\nIFNpZG5leQ== 35727\ncGxvbWE= 35728\nIHNwcmF5ZWQ= 35729\nIGd1cnU= 35730\nIHRyYWl0b3I= 35731\nIHRpbWV0 35732\nIHNuYXBwaW5n 35733\nIFNldmVudA== 35734\ndXJuYWw= 35735\nIFVraXA= 35736\nIGJvd2Vk 35737\ncG9yYWw= 35738\nbGliZXJhbA== 35739\nUm9z 35740\nUXVlc3Rpb25z 35741\naU9T 35742\nIHN1bW1hcml6ZQ== 35743\nU1RBVA== 35744\nIDE4NTA= 35745\nYXBlc3Q= 35746\nIGxlbmRlcg== 35747\nIFZhcmlhYmxl 35748\nYnJpbmdpbmc= 35749\nIExPUkQ= 35750\nLCk= 35751\nIGNvbGxhcHNlcw== 35752\neGlldHk= 35753\nIE5lZA== 35754\nWUQ= 35755\nIFNjaGE= 35756\nIGFudGlib2R5 35757\nIGRpc2JhbmQ= 35758\neXJl 35759\naWxsdXNpb24= 35760\nIHJvdmVy 35761\nc2hlZA== 35762\nIEhpcm9zaA== 35763\nY2Np 35764\nIGNhbGFt 35765\nIE1vcnRvbg== 35766\nUGludGVyZXN0 35767\nIDE5Mjg= 35768\nIEV1cmFz 35769\nb3JkZXM= 35770\nIGZlbmNlcw== 35771\nIEludmVudG9yeQ== 35772\nIFZhbGVuY2lh 35773\nIFVk 35774\nIFRpZmY= 35775\nIHNxdWU= 35776\nIHF1b3RhdGlvbg== 35777\nIHRyb3VibGVzb21l 35778\nZXJrZXI= 35779\nUVVFU1Q= 35780\nIEtpbmdkb21z 35781\nc291dGg= 35782\nIGxldnk= 35783\nUHJpbmNl 35784\nIFN0aW5n 35785\nIG5pY2tuYW1lZA== 35786\nIGFwcGU= 35787\nIHBob3RvZ3JhcGhpYw== 35788\nIGNvcnB1cw== 35789\ncmVmZXJlbmNl 35790\nIFRyb2c= 35791\nVW50 35792\nKT0o 35793\nIExhdHZpYQ== 35794\nIGFjdGl2YXRpbmc= 35795\nIGxpY2Vuc2Vl 35796\nIGRpc3Bhcml0aWVz 35797\nIE5ld3NsZXR0ZXI= 35798\n44OD44OI 35799\nIGZyZWVpbmc= 35800\nIEplZXA= 35801\nIFBlcmNlcHRpb24= 35802\naW5zaw== 35803\nIHNpbGljb25l 35804\nIEhheWRlbg== 35805\nTGVhbg== 35806\nIFN1enVraQ== 35807\naWJyYXJpYW4= 35808\nNjY4 35809\nIHNwb3I= 35810\nIGNvcnJlbGF0aW9ucw== 35811\nYWdoZXR0aQ== 35812\nIHR1YmVy 35813\nIElQQ0M= 35814\naWx1cw== 35815\nIFZ1 35816\nIHdlYWx0aGllc3Q= 35817\nIENhcmJ1bmNsZQ== 35818\nYW56YQ== 35819\nIGZvb2xlZA== 35820\nIFp1cg== 35821\nIGRhZGR5 35822\ncmFubw== 35823\naWxpYW4= 35824\nIGtub2Nrb3V0 35825\nZm1hbg== 35826\ncmVxdWlyZWQ= 35827\nIFdpa2lsZWFrcw== 35828\nIER1ZmZ5 35829\nT05U 35830\nIGluc29s 35831\nIE9iamVjdHM= 35832\nIGJvdQ== 35833\nIE5vcmRpYw== 35834\nIEluc2VydA== 35835\nc2Nhbg== 35836\nIGRhbmNlcnM= 35837\nIGlkaW90cw== 35838\nbWFqb3JpdHk= 35839\nIE5ldmlsbGU= 35840\nIEZyZWVCU0Q= 35841\nIHRhcnQ= 35842\ncGFuaWM= 35843\nNjkw 35844\nIGNvY29h 35845\nIHNhbXBsZWQ= 35846\nIGxvb2t1cA== 35847\nSW5kdXN0 35848\nIGluamVjdGlvbnM= 35849\nZ2VucmU= 35850\nIGF1 35851\nIHJvYWR3YXk= 35852\nIGdlbml0YWxz 35853\nS2luZA== 35854\nIEV4YW1pbmVy 35855\nIFlheg== 35856\nRnJlc2g= 35857\nIHBhcmFseXNpcw== 35858\nIEFsdW1pbnVt 35859\nIHJlYXA= 35860\nb2vDqQ== 35861\nIHNsb3BweQ== 35862\nIFR1bm5lbA== 35863\ncG9zaXVt 35864\nbmVyeQ== 35865\nZW5pYw== 35866\nIGhlcmJhbA== 35867\nIE91dGVy 35868\nIEJ1aWxkZXI= 35869\nIGluY3Vy 35870\nIGlkZW9sb2dpZXM= 35871\nIGJhY2t1cHM= 35872\nY29uc3VtaW5n 35873\nIERldGVjdA== 35874\nZGVjaw== 35875\nIEtOT1c= 35876\nIEdyZXQ= 35877\nIE1JQw== 35878\nIHRvdWdobmVzcw== 35879\nIEV4aGliaXQ= 35880\nIGhpdmU= 35881\nTGVz 35882\nIFNDSE9PTA== 35883\nIEF0YXJp 35884\nYWxkZQ== 35885\nIE51bGw= 35886\nYW5kZXN0aW5l 35887\nbW91c2U= 35888\nIGJyaWdhZGU= 35889\nNDg5 35890\nIHJldm9s 35891\nIExhd3Nvbg== 35892\nIFdhaA== 35893\nb3BvbHk= 35894\nZWJ0ZWQ= 35895\nIFNhdW5kZXJz 35896\nIDMxMw== 35897\nIFdpbmM= 35898\nIHRhYm9v 35899\nIEhlbG1ldA== 35900\nIHdlZGdl 35901\nY2hpcA== 35902\nIFRpbmE= 35903\nYmc= 35904\nIGluZnVyaQ== 35905\ncm4= 35906\nIGFub21hbGllcw== 35907\nIFN5bmM= 35908\nIEV4YW0= 35909\nIENvbW1pdA== 35910\nIERpYXJ5 35911\nIEFMU08= 35912\nIERlYm9y 35913\nb21lZGljYWw= 35914\nIGNvbXByZWhlbnNpb24= 35915\nNjU1 35916\nIGVtcG93ZXJpbmc= 35917\nIGlyZQ== 35918\nIGp1aWNlcw== 35919\nIEVUSA== 35920\nIEJveGluZw== 35921\nPSIv 35922\nIGZhY2lsaXRhdGVk 35923\ncG9rZQ== 35924\nIFBhcnNvbnM= 35925\nIE1vZGVy 35926\ndHJhdmVs 35927\nIGNpdmlsaXphdGlvbnM= 35928\nIGxpYmVydGFyaWFucw== 35929\nIHJ1bmU= 35930\nIENsYXJrcw== 35931\nYXRoZWQ= 35932\nIGNhbXBhaWduZXJz 35933\nIERpc3BhdGNo 35934\nIEZhaHJlbmhlaXQ= 35935\nIENhcGNvbQ== 35936\nLS0tLS0tLS0tLQ== 35937\nIGxhY2U= 35938\nIGRyYWluaW5n 35939\nIGxpbmVy 35940\nIEFydGlmaWNpYWw= 35941\nw6lu 35942\ndGFzaw== 35943\nXSku 35944\nIEdNTw== 35945\nIE9wZXJhdG9y 35946\nb3JkaW5hcnk= 35947\nIEluZmx1ZW5jZQ== 35948\nIFVwcw== 35949\nIHBvdGVuY3k= 35950\ndXNzZW4= 35951\nb3Nwb25z 35952\nIFN3aW0= 35953\nIERlYWRsaW5l 35954\nVW5pdHk= 35955\nIGN1bGluYXJ5 35956\nIGVubGlnaHRlbm1lbnQ= 35957\nIHdlYXJlcg== 35958\nIG1pbmVk 35959\nIHBseQ== 35960\nIGluY2VzdA== 35961\nIERWRHM= 35962\nV2Fsaw== 35963\nQlRD 35964\nVHJhZGU= 35965\nIGRldmFs 35966\naWJhbmQ= 35967\nIE92ZXJzaWdodA== 35968\nUGFsZXN0aW5pYW4= 35969\nIGRhcnQ= 35970\nIG11bA== 35971\nTFI= 35972\nIHJlbW92YWJsZQ== 35973\nIFJlYWxtcw== 35974\n7J0= 35975\nIG1pc2Nhcg== 35976\nIFZ1bGthbg== 35977\nNjg1 35978\nw6hyZQ== 35979\nIFNhcA== 35980\nIG1lcmdpbmc= 35981\nIENhcmx5 35982\nY2hlc3Rlcg== 35983\nIGJyaXNr 35984\nIGx1eHVyaW91cw== 35985\nIEdlbmVyYXRvcg== 35986\nIGJpdHRlcm5lc3M= 35987\nIGVkaWJsZQ== 35988\nIDI0Mw== 35989\nVEc= 35990\nIHJlY3RhbmdsZQ== 35991\nV2l0aE5v 35992\nYmVsb3c= 35993\nSmVubg== 35994\nIGRhcmtlc3Q= 35995\nIGhpdGNo 35996\nIGRvc2FnZQ== 35997\nIHNjYXZlbg== 35998\nIEtlbGxlcg== 35999\nIElsbHVzdHJhdGVk 36000\nQ2VydGFpbmx5 36001\nIE1hdmVyaWNrcw== 36002\nTWFyZ2luYWw= 36003\nIGRpYXJyaGVh 36004\nIGVub3Jtb3VzbHk= 36005\nIDk5OQ== 36006\nc2hy 36007\ncXVhcnQ= 36008\nIGFkYW1hbnQ= 36009\nIE1ldw== 36010\nIHJlbm92YXRpb24= 36011\nIGNlcnZpY2Fs 36012\nIFBlcmNlbnRhZ2U= 36013\nZW5lcnM= 36014\nIEtpbWJlcg== 36015\nIGZsb2F0cw== 36016\nIGRleA== 36017\nIFdpdGNoZXI= 36018\nIFN3YW5zZWE= 36019\nZG0= 36020\nIHNhbHR5 36021\neWVsbG93 36022\nIGNhcGU= 36023\nIERyYWlu 36024\nIFBhdWxh 36025\nIFRvbGVkbw== 36026\nbGVzaQ== 36027\nTWFnYXppbmU= 36028\nIFdpY2s= 36029\nIE1u 36030\nIEFjaw== 36031\nIFJpZGluZw== 36032\nQVNPTg== 36033\nIGhvbW9waG9iaWM= 36034\nQVJQ 36035\nIHdhbmRlcmVk 36036\nQ1BV 36037\nb29kb28= 36038\nIFBpcGU= 36039\nIHRpZ2h0ZW5pbmc= 36040\nIEJ1dHQ= 36041\nMzE4 36042\nIGRlc2VydGVk 36043\nU2Vzc2lvbg== 36044\nIGZhY2lsaXRhdGluZw== 36045\nSnVtcA== 36046\nIGVtZXJnZW5jaWVz 36047\nT1dFUg== 36048\nIGV4aGF1c3RpdmU= 36049\nIEFGVEVS 36050\nIGhlYXJ0YmVhdA== 36051\nIExhYmVs 36052\nYWNreQ== 36053\nIENlcnRpZmllZA== 36054\naWx0cmF0aW9u 36055\nWmU= 36056\nIFV0dA== 36057\nIDEzMDA= 36058\nIHByZXN1bWU= 36059\nIERpc3A= 36060\nIHN1cmdlZA== 36061\nIGRvbGxz 36062\nQ29sdW1i 36063\nIGNoaW1wYW4= 36064\nIFJhem9y 36065\nIHRpY2tz 36066\nIGNvdW5jaWxsb3I= 36067\nIHBpbGdyaW1hZ2U= 36068\nIFJlYmVscw== 36069\nIFFD 36070\nIEF1Y3Rpb24= 36071\neGlh 36072\naWtr 36073\nYnJlZA== 36074\nIGluc2VydGlvbg== 36075\nIGNvYXJzZQ== 36076\nZEI= 36077\nU0VF 36078\nIFphcA== 36079\nIEZvbw== 36080\nIGNvbnRlbXBvcg== 36081\nIFF1YXJ0ZXJseQ== 36082\nb3Rpb25z 36083\nIEFsY2hlbWlzdA== 36084\nIFRyZXk= 36085\nIER1bw== 36086\nU3dlZXQ= 36087\nODA0 36088\nIEdpb3Y= 36089\nIGZ1bm4= 36090\nTmlu 36091\naG9mZg== 36092\nIHJhbWlmaWNhdGlvbnM= 36093\nIDE5MjI= 36094\nIEV4cGVydHM= 36095\nYXplcw== 36096\nIGdhcm1lbnRz 36097\nYXJpYWw= 36098\nIE5hYg== 36099\nIDI1Nw== 36100\nIFZlZA== 36101\nIGh1bW9yb3Vz 36102\nIFBvbXBl 36103\nIG55bG9u 36104\nIGx1cmtpbmc= 36105\nIFNlcmdleQ== 36106\nIE1hdHRpcw== 36107\nIG1pc29neW55 36108\nIENvbXBvbmVudHM= 36109\nIFdhdGNoaW5n 36110\nIEZvbGs= 36111\ncmFjdGljYWw= 36112\nQnVzaA== 36113\nIHRhcGVk 36114\nIGdyb3VwaW5n 36115\nIGJlYWRz 36116\nIDIwNDg= 36117\nIGNvbmR1 36118\ncXVlcnF1ZQ== 36119\nUmVhZGluZw== 36120\nIGdyaWV2YW5jZXM= 36121\nVWx0cmE= 36122\nIGVuZHBvaW50 36123\nSGln 36124\nIFN0YXRpYw== 36125\nIFNjYXJib3JvdWdo 36126\nTHVh 36127\nIE1lc3Np 36128\nYXF1 36129\nIFBzeU5ldA== 36130\nIFJ1ZGQ= 36131\nIGF2ZW51ZQ== 36132\ndnA= 36133\nSmVy 36134\nIHNoYWR5 36135\nIFJlc2lzdA== 36136\nIEFydGVtaXM= 36137\nIGNhcmVsZXNz 36138\nIGJyb2tlcnM= 36139\nIHRlbXBlcmFtZW50 36140\nIDUyMA== 36141\nVGFncw== 36142\nIFR1cm5pbmc= 36143\nIHV0dGVyZWQ= 36144\nIHBlZGQ= 36145\nIGltcHJvdmlzZWQ= 36146\nIDoo 36147\nIHRhYmw= 36148\nIHBsYWlucw== 36149\nMTYwMA== 36150\ncHJlc3N1cmU= 36151\nIEVzc2VuY2U= 36152\nbWFyZ2lu 36153\nZnJpZW5kcw== 36154\nIFJlc3RvcmF0aW9u 36155\nIHBvbGx1dA== 36156\nIFBva2Vy 36157\nIEF1Z3VzdGluZQ== 36158\nIENJUw== 36159\nIFNFQUw= 36160\nb3JhbWE= 36161\nIHRod2FydA== 36162\nc2Vlaw== 36163\nIHBhZ2Fu 36164\nwro= 36165\nY3B1 36166\nIGdhcm4= 36167\nIGFzc29ydG1lbnQ= 36168\nIElMQ1M= 36169\ndG93ZXI= 36170\nUmVjb21tZW5kZWQ= 36171\nIHVuYm9ybg== 36172\nIFJhbmRvbVJlZGRpdG9y 36173\nIFJhbmRvbVJlZGRpdG9yV2l0aE5v 36174\nIHBhcmFseXplZA== 36175\nIGVydXB0aW9u 36176\nIGludGVyc2VjdA== 36177\nIFN0b2tl 36178\nIFNjbw== 36179\nQmluZA== 36180\n5b4= 36181\nIFBORw== 36182\nIE5lZ2F0aXZl 36183\nIE5PQUE= 36184\nTGVvbg== 36185\nIGFsbG95 36186\nIExhbWE= 36187\nIERpdmVyc2l0eQ== 36188\nNTc1 36189\nIHVuZGVyZXN0aW1hdGVk 36190\nIFNjb3I= 36191\nIG11cmFs 36192\nIGJ1c3RlZA== 36193\nc29vbg== 36194\nbGlm 36195\nIG5vbmV4 36196\nIGFsbGVyZ3k= 36197\nIFVuZGVyd29ybGQ= 36198\nIFJheXM= 36199\nIEJsYXNpbw== 36200\nIGhycw== 36201\nIERpcg== 36202\nIDMyNw== 36203\nYnl0ZXI= 36204\nIHJlcGxhY2VtZW50cw== 36205\nIGFjdGl2YXRlcw== 36206\ncml2ZWQ= 36207\nTUg= 36208\nIHBhbnM= 36209\nIEhJ 36210\nIGxvbmdpdHVkaW5hbA== 36211\nIG51aXNhbmNl 36212\nYWxlcg== 36213\nIHN3ZWxs 36214\nIFNpZ25lZA== 36215\nc2Np 36216\nIElzbGVz 36217\nIEFHQQ== 36218\nIGRlZmlhbnQ= 36219\nIHNvbmlj 36220\nb2Nvbg== 36221\nS0M= 36222\nIEFpbQ== 36223\ndGll 36224\nYWhhaA== 36225\nIG1M 36226\nRFg= 36227\nIGJpc2M= 36228\nIEJpbGxib2FyZA== 36229\nIFNZU1RFTQ== 36230\nTkVZ 36231\nZ2FhcmQ= 36232\nIGRpc3RyZXNzZWQ= 36233\nZm9ybWVybHk= 36234\nQWxhbg== 36235\nIGNoZWZz 36236\nIG9wdGljcw== 36237\nIENvbWV0 36238\nIEFNQw== 36239\nIHJlZGVzaWduZWQ= 36240\naXJtYXRpb24= 36241\nIHNpZ2h0aW5ncw== 36242\nMzgy 36243\nMzEx 36244\nIFdC 36245\nIGNvbnRyYWN0aW9u 36246\nIFRPVEFM 36247\nRHVhbA== 36248\nIHN0YXJ0bGVk 36249\nIHVuZGVyc3RhbmRhYmx5 36250\nIHN1bmdsYXNzZXM= 36251\nRVRIT0Q= 36252\nIGRvY2tlcg== 36253\nIHN1cmZpbmc= 36254\nIEhFTA== 36255\nIFNsYWNr 36256\ndG9uZXM= 36257\nIHNoYWx0 36258\nVmlzdWFs 36259\nNDk4 36260\nRGVwYXJ0bWVudA== 36261\nY3Vzc2lvbg== 36262\nIHVucmVzdHJpY3RlZA== 36263\nIHRhZA== 36264\nIHJlbmFtZQ== 36265\nZW1wbG95ZWQ= 36266\nIGVkdWNhdGluZw== 36267\nIGdyaW5uZWQ= 36268\nYmVkcm9vbQ== 36269\nIEFjdGl2aXRpZXM= 36270\nIFZlbHZldA== 36271\nIFNXQVQ= 36272\nIHNodWZmbGU= 36273\naWdvcg== 36274\nIHNhdHVyYXRpb24= 36275\nRmluZGluZw== 36276\nY3JlYW0= 36277\naWN0ZXI= 36278\nIHZvZGth 36279\ndHJhY2tpbmc= 36280\ndGVj 36281\nIGZvcmVncm91bmQ= 36282\naWVzdGE= 36283\nIHZlaGVtZW50 36284\nIEVDQg== 36285\nIFRpZQ== 36286\nRXk= 36287\nIHR1cnRsZXM= 36288\nIFJhaWxyb2Fk 36289\nIEthdHo= 36290\nIEZyYW1lcw== 36291\nIG1lbmFjZQ== 36292\nIEZlbGxvd3NoaXA= 36293\nIEVzc2VudGlhbA== 36294\ndWdnaXNo 36295\nIGRyaXA= 36296\nY2h3aXR6 36297\nIEt5b3Rv 36298\nc2I= 36299\nIE5pbmE= 36300\nUGFyYW1ldGVy 36301\nIGFsYXJtcw== 36302\nIENsYXVk 36303\nIHBpb25lZXJpbmc= 36304\nIGNoaWVmbHk= 36305\nIFNjcmVhbQ== 36306\nQ29sbGVjdGlvbg== 36307\nIHRoYW5rZnVsbHk= 36308\nIFJvbmFsZG8= 36309\n5a2Q 36310\nc3RyaXA= 36311\nIERpc25leWxhbmQ= 36312\nY29tbWVyY2lhbA== 36313\nU2VlaW5n 36314\nU291bA== 36315\nIGV2YWN1YXRl 36316\nIGNpdg== 36317\nIEFzaGU= 36318\nIGRpdmlkZXM= 36319\nIERhZ2dlcg== 36320\ncmVoZW5zaXZl 36321\nIGJlcnJpZXM= 36322\nIERG 36323\nIHN1c2hp 36324\nIHBsdXJhbGl0eQ== 36325\nV0k= 36326\nIGRpc2FkdmFudGFnZWQ= 36327\nIGJhdHRhbGlvbg== 36328\nb2JpbGVz 36329\nNDUx 36330\nIGNsaW5n 36331\nIHVuZGVuaWFibGU= 36332\nIExvdW5nZQ== 36333\nIGhhdW50 36334\ncGhl 36335\nIHF1YW50aWZ5 36336\nIGRpZmZlcmVk 36337\nIFsqXQ== 36338\nIFZpeg== 36339\nY3Vt 36340\nc2xhdmU= 36341\nIHZpZGVvZw== 36342\nIHF1YXI= 36343\nIGJ1bmRsZXM= 36344\nIEFsb25zbw== 36345\ndGFja2xl 36346\nIG5ldXJvbmFs 36347\nIGxhbmRzbGlkZQ== 36348\nY29uZmlybWVk 36349\nIERlcHRo 36350\nIHJlbmV3YWJsZXM= 36351\nQmVhcg== 36352\nIE1hY2Vkb25pYQ== 36353\nIGplcnNleXM= 36354\nIGJ1bms= 36355\nIFNwYXdu 36356\nIENvbnRyb2xz 36357\nIEJ1Y2hhbmFu 36358\nIHJvYm90aWNz 36359\nIGVtcGhhc2l6aW5n 36360\nIFR1dG9yaWFs 36361\naHlw 36362\naXN0b24= 36363\nIG1vbnVtZW50YWw= 36364\n5rA= 36365\nIENhcnJ5 36366\nIHRic3A= 36367\nZW5hbmNl 36368\nSGlsbA== 36369\nYXJ0aGVk 36370\nIHJvdHRlbg== 36371\nRGVhbg== 36372\nIHR3aXN0aW5n 36373\nIGdvb2R3aWxs 36374\nIGltbWVyc2lvbg== 36375\nTGl2aW5n 36376\nIGJydXNoZXM= 36377\nIENHSQ== 36378\nIEF0aw== 36379\ndHJhZGl0aW9uYWw= 36380\nIHBoYW50b20= 36381\nIFN0YW1pbmE= 36382\nIGV4cGFuc2lvbnM= 36383\nIE1hcmlu 36384\nIGVtYmFya2Vk 36385\nIEVn 36386\naW50ZXN0aW5hbA== 36387\nIFBFT1BMRQ== 36388\nIEJvb3Ro 36389\nIEFwcGFsYWNo 36390\nIHJlbGVnYXRlZA== 36391\nVlQ= 36392\nTUlU 36393\nIG11c3Rlcg== 36394\nIHdpdGhkcmF3aW5n 36395\nIG1pY3Jvc2NvcGU= 36396\nIEdhdGhlcmluZw== 36397\nIENyZXNjZW50 36398\nIEFyZ2VudGluZQ== 36399\nIERlY3Jl 36400\nIERvbWluaWM= 36401\nIGJ1ZHM= 36402\nYW50YWdl 36403\nIElvbg== 36404\nIHdpZGVuZWQ= 36405\nT05TT1JFRA== 36406\nIEdsb3Zlcw== 36407\naWFubm9wb3Vsb3M= 36408\ncmF6ZW4= 36409\nZmVlbA== 36410\nIHJlcGF5bWVudA== 36411\nIGhpbmRzaWdodA== 36412\nIFJFQUxMWQ== 36413\nIFBpc3RvbA== 36414\nIEJyYWg= 36415\nIHdhdHRz 36416\nIHN1cnZpdmVz 36417\nIGZsdXJyeQ== 36418\naXNzeQ== 36419\nQWxlcnQ= 36420\nIFVydWd1YXk= 36421\nUGhvZW5peA== 36422\nU2xvdw== 36423\nIEdyYXZl 36424\nIEZpcg== 36425\nIG1hbmFnZWFibGU= 36426\nIHRhcmlmZg== 36427\nIFVEUA== 36428\nIFBpc3RvbnM= 36429\nIE5pZ2VyaWFu 36430\nIHN0cmlrZW91dHM= 36431\nIGNvc21ldGljcw== 36432\nd2hlbG1pbmc= 36433\nZmFi 36434\nY2FwZQ== 36435\ncHJveHk= 36436\nIHJldGhpbms= 36437\nIG92ZXJjb21pbmc= 36438\nc2ltcGxl 36439\nIHdvbw== 36440\nIGRpc3RyYWN0aW5n 36441\nIFN0YW50b24= 36442\nIFR1bHNh 36443\nIERvY2s= 36444\nNjU5 36445\nIGRpc2NvcmQ= 36446\nIEVtYWNz 36447\nIFZlcw== 36448\nIFJPQg== 36449\nIHJlYXNzdXJpbmc= 36450\nIGNvbnNvcnRpdW0= 36451\nTXVzbGltcw== 36452\nMzIx 36453\nIHByb21wdHM= 36454\nc2Vp 36455\nIEhpdGNo 36456\naW1wb3NlZA== 36457\nIEZvb2w= 36458\nIGluZGlzY3JpbQ== 36459\nd3Jvbmc= 36460\nYnVxdWVycXVl 36461\nRGF2aXM= 36462\nIV0= 36463\nIHRpbWVsZXNz 36464\nIE5FRUQ= 36465\nIHBlc3RpY2lkZQ== 36466\nIHJhbGx5aW5n 36467\nIENhbGRlcg== 36468\nIOWk 36469\nIHhw 36470\nIFVubGU= 36471\nIEV4cG9ydA== 36472\nbHVhag== 36473\nQnVmZg== 36474\nKTwv 36475\nQm9vdA== 36476\nIENocnlzbGVy 36477\nb3JhdGl2ZQ== 36478\nTWVzcw== 36479\nIG5lZ2xpZ2libGU= 36480\nZXJ0b2Rk 36481\nIE11c2hyb29t 36482\nIEdhbGU= 36483\nZ2M= 36484\nIENvc2J5 36485\nIFJ1cmFs 36486\ncml0aWNhbA== 36487\nQmVsbA== 36488\nIHR1cmJpbmU= 36489\nMDAyMDAwMDA= 36490\nIGxlZ2l0aW1hdGVseQ== 36491\nIEFuaW1hdGVk 36492\nVEVE 36493\nIFRoZW9kb3Jl 36494\nY29uZHVjdA== 36495\nIEhpZXI= 36496\nIGNvdW50ZXJmZWl0 36497\nIEFsZ2VyaWE= 36498\nIHVuYmVhdA== 36499\nY29udHJvbGxlcg== 36500\nIHVucmVz 36501\nIHNjcmFtYmxpbmc= 36502\nIEZhbGxvbg== 36503\nVGVz 36504\nIGFtYmVy 36505\nIHJveWFsdGllcw== 36506\nIFNoZWx0ZXI= 36507\nIExlc3Rlcg== 36508\nIGNsYXNzaWZ5 36509\nUmVtb3Rl 36510\nIHVuaGVhcmQ= 36511\nIGNvbnRyb3ZlcnNpZXM= 36512\nIGVucmljaG1lbnQ= 36513\nIFlhbmtlZQ== 36514\nZ2FtZXI= 36515\nIHBsYXRpbnVt 36516\nIGVjb2xvZ3k= 36517\nIFNhcms= 36518\nIHVudG91Y2hlZA== 36519\nIHN1cGVydmlzb3Jz 36520\nICIl 36521\nIGZvb3Ro 36522\nIGNvbW1vbnM= 36523\nIG5hcmNvdGljcw== 36524\nIGluZGljZXM= 36525\nIFBseQ== 36526\nIGFkZGl0aW9uYWxseQ== 36527\nIEdhd2tlcg== 36528\nIEVR 36529\nUGxheWluZw== 36530\nIGNhdmVhdA== 36531\nIEFic29sdXRl 36532\nb3NzdXM= 36533\nQmFieQ== 36534\nIHJhdGlvbg== 36535\nIHJlc2lu 36536\nIGNhbGlicmF0aW9u 36537\nIE5ld3BvcnQ= 36538\nIGtub2Nrcw== 36539\ndnQ= 36540\nIGNvbXBvc3Q= 36541\nU2NlbmU= 36542\nIHNhcmNhc3Q= 36543\nIGtpc3Nlcw== 36544\nIG5z 36545\nYWxsaQ== 36546\nIE1hcmNlbA== 36547\nIFBpZXQ= 36548\naWF0cmljcw== 36549\nIHN1cnJvdW5kcw== 36550\nIFJlcHJvZHU= 36551\nIFBoaWxsaWVz 36552\nIHVuY2VydGFpbnRpZXM= 36553\nIEV1cg== 36554\nIFJvbWFuY2U= 36555\nIEhhdGg= 36556\nIE5lZWRz 36557\nIENsb2Fr 36558\nIGNyZW0= 36559\ncXVldWU= 36560\nIDM1NQ== 36561\nIHVwZnJvbnQ= 36562\nXSk7 36563\nIHJlY2lwcm9j 36564\nIDE5Mjc= 36565\nIDExMDA= 36566\ndXRzdQ== 36567\nIGRlcHJlc3NpdmU= 36568\nb3dtZW50 36569\nRmFucw== 36570\nIG1lY2g= 36571\nIGFubmloaWw= 36572\nIGNvdW50ZXJ0ZXJyb3Jpc20= 36573\nIEZpZ3VyZXM= 36574\nYm9sZA== 36575\nIE1vaW5lcw== 36576\nIERyaXZlcnM= 36577\nIG1hbnVzY3JpcHRz 36578\nIENyeXB0bw== 36579\nIGh5cG5vdA== 36580\ncmVkZGl0cw== 36581\nIHByb3NlY3V0aW9ucw== 36582\nIGRpdmVydA== 36583\nQ1JJUA== 36584\nIEJlbmU= 36585\nIFJlZ2dpZQ== 36586\nIHRheGluZw== 36587\nIE1vcmFsZXM= 36588\nZW50aW5n 36589\ndHVy 36590\nc2lnbmlmaWNhbnQ= 36591\nIFBST1Y= 36592\nIHN0cmFuZHM= 36593\nIHBvdWNo 36594\nIFJvb2tpZQ== 36595\nu5I= 36596\nIG5pY2Vy 36597\naGVteQ== 36598\naHc= 36599\nRUNB 36600\nIGludGltaWRhdGVk 36601\nIHN0cmljdGVy 36602\nIG1pY3JvYmlhbA== 36603\nZGV0YWlscw== 36604\nIHZvd3M= 36605\nIHF1YWtl 36606\naGhoaA== 36607\nIHJlaW52ZW50 36608\nVWI= 36609\nIHJlbGlucXU= 36610\nIEJ1ZmZldHQ= 36611\nbGljZW5zZWQ= 36612\naXR0ZXJlZA== 36613\nIFBpY2FyZA== 36614\nIGNoZXdpbmc= 36615\ndWNs 36616\nb3JnYW5pYw== 36617\nIGxvY2FsaXplZA== 36618\nIEVjb25vbWlzdA== 36619\nIGFjcXVhaW50ZWQ= 36620\nRGVmaW5pdGlvbg== 36621\nc2Vk 36622\nQ3JpdGljcw== 36623\nIGNj 36624\nNDUz 36625\nMzgx 36626\nIGZlbGxvd3M= 36627\nIGNoZWNrcG9pbnRz 36628\nMDI1 36629\nIHJlZWxlY3Rpb24= 36630\nIG1lZGlhdGVk 36631\nIEtERQ== 36632\nIGh1cmRsZQ== 36633\nIHRleHRpbmc= 36634\nUGVyZmVjdA== 36635\nIHRydXN0ZWVz 36636\nZmVjdHVyZQ== 36637\nIGRpY2g= 36638\nbW9uYXJ5 36639\nIGRpc3RpbmN0aW9ucw== 36640\nIDE0MDA= 36641\nIHVzaGVy 36642\nIHBhcmFzaXRlcw== 36643\nIFNoYXJpbmc= 36644\nIFZpbQ== 36645\nIGJhcmJlY3Vl 36646\nIE1pbmlzdGVycw== 36647\nZXJlbGxh 36648\nIGVi 36649\nIG1j 36650\nIFNvbWVob3c= 36651\nIEluc2VjdA== 36652\nY2hhbmdlcw== 36653\nYnJvYWQ= 36654\nIEJ5eg== 36655\nIGdyYXBlcw== 36656\nNjY5 36657\nID09PT09PT09PT09PT09PT09 36658\nIGFzc2ltaWw= 36659\nIGhhdW50aW5n 36660\nIGZpcmVwb3dlcg== 36661\nIGRlZmFtYXRpb24= 36662\nZW1waGFzaXM= 36663\nIGNvbXBvc2U= 36664\nIGFsbGVyZ2llcw== 36665\nIHN0cmFuZw== 36666\ncm9sbGVycw== 36667\nYmFuZw== 36668\nIGJyZXdlcnM= 36669\ncm9uZ2g= 36670\ncmlvdA== 36671\ncG9vcg== 36672\nY29sZA== 36673\nU2FtcGxl 36674\nIGJ1b3k= 36675\nMDQw 36676\nIENvdXJ0bmV5 36677\nIDI2OA== 36678\nIFdlZGRpbmc= 36679\nNzAy 36680\nIG9ic2Vzc2l2ZQ== 36681\nIGJyYWtpbmc= 36682\nIExhbA== 36683\nYW5pY2Fs 36684\n5aY= 36685\nYXRlbg== 36686\nQ29uc3RydWN0aW9u 36687\nIGNsaW5pY2FsbHk= 36688\naWVyc2hpcA== 36689\nTmFtZXM= 36690\nIERpc2N1c3M= 36691\nIFJhbW9z 36692\nIGxvY2FsZQ== 36693\nIEFncmljdWx0dXJhbA== 36694\nRW5hYmxl 36695\nIGhvcnNlcG93ZXI= 36696\nZW50dXJl 36697\nUHJlZg== 36698\nQ291cnQ= 36699\nIHN0YWZmaW5n 36700\nIGZ1dHVyaXN0aWM= 36701\nZHJpdmVycw== 36702\nIE1hcmtldHBsYWNl 36703\n5oim 36704\nRnJpZW5kcw== 36705\nIGRhbW5pbmc= 36706\nIEN1c3RvbWVycw== 36707\nIHdlZWRz 36708\nIE1haQ== 36709\nIGFnaWxl 36710\nIFRhdHQ= 36711\naWNlbnQ= 36712\nUmFua2Vk 36713\nY3JvZnQ= 36714\nIEthdHk= 36715\nRXh0cmVtZQ== 36716\nIGNhcnZl 36717\nIFJvdmVy 36718\nIEJ5cm9u 36719\nMzcy 36720\nIGNvbmR1Y3Rz 36721\ncmF0Y2g= 36722\naXRpYQ== 36723\nIFB1bXBraW4= 36724\nU2FkbHk= 36725\nUmVsb2FkZWQ= 36726\nUG9saWN5 36727\nIGxpY2s= 36728\ncGVhaw== 36729\naXNrcw== 36730\nIENEcw== 36731\nIEVuY3ljbG9wZWRpYQ== 36732\naW5pdGlhbA== 36733\nQ29z 36734\nIEF3YXJlbmVzcw== 36735\nIERyYW0= 36736\nJCQkJA== 36737\nIHJpZmY= 36738\nIHNjcmlwdHVyZQ== 36739\ncnVubmVycw== 36740\nIGJvaWxlcg== 36741\nb25zb24= 36742\nb2lu 36743\nIGhhbXN0cmluZw== 36744\nIGNhdGFseQ== 36745\nIEFyY2hiaXNob3A= 36746\nY2hhbGw= 36747\nIGZhdXg= 36748\nb2tpbg== 36749\nbG9jYWxob3N0 36750\nIE5BTUU= 36751\nYWRvYmU= 36752\nU0FO 36753\nYW1hdGU= 36754\nIHNjcmFtYmxl 36755\nIGNhcmM= 36756\nIE1hbmlmZXN0 36757\nIENlZGFy 36758\nIFNlcmdpbw== 36759\nbGF0ZXI= 36760\nZmZlcg== 36761\nIGdyYXBwbGluZw== 36762\nIERldXRzY2hl 36763\nYWdvbmlzdHM= 36764\nIE5ld3Nw 36765\nIHByZXRlbmRlZA== 36766\nYXJjaG1lbnQ= 36767\nIGN1cmF0ZWQ= 36768\nIGhlYWRwaG9uZQ== 36769\nIFVuY29tbW9u 36770\nIFNJR04= 36771\nQWdlbnQ= 36772\nIGRlYWRsaW5lcw== 36773\nIGhvcml6b250YWxseQ== 36774\nIE1BVA== 36775\nIFN1bW1lcnM= 36776\nIG9yZGFpbmVk 36777\nIExhc3RseQ== 36778\nIEtlbmRhbGw= 36779\nIGZyaWc= 36780\nIE1hY2hpbmE= 36781\nIFdhdGVybG9v 36782\nIE1leGljYW5z 36783\nIHByb3RlY3Rvcg== 36784\nIGdsYXJl 36785\nfSI= 36786\nUHJlbWl1bQ== 36787\nIHJpZnQ= 36788\nIFRlbGVzY29wZQ== 36789\nTWV0YWw= 36790\nIHJlY2FwdA== 36791\nIDs7 36792\nIGluY2xpbmF0aW9u 36793\nIGltcG9zZXM= 36794\naW5nZW4= 36795\nXns= 36796\nIGhhc3Rl 36797\nIGRvbHBoaW5z 36798\nIGNvbW11dGVycw== 36799\ncGxhbm5lZA== 36800\nY29uZw== 36801\nbXg= 36802\nIFVwbG9hZA== 36803\nIGV4dHJhcA== 36804\nIFR1Y3Nvbg== 36805\nIEV4cGxvcmF0aW9u 36806\nZWZlYXRlZA== 36807\nIHNsZW5kZXI= 36808\nNzAz 36809\nIEJ1aw== 36810\naXNlbA== 36811\nIGNvbXBldGl0aXZlbmVzcw== 36812\nY2hsb3I= 36813\nIFBlcm1hbmVudA== 36814\nIEV2ZXJldHQ= 36815\nIFNwZWNpYWxpc3Q= 36816\nIFNPTA== 36817\nIGN5YW4= 36818\nIEV4YWN0bHk= 36819\nVUY= 36820\nIExJRkU= 36821\nYXJ5bA== 36822\nb25ldA== 36823\nIEVtcGxveWVl 36824\nYXdlZA== 36825\nIFJhdGluZ3M= 36826\nIGV4dHJhdmFn 36827\ndWxodQ== 36828\nIFBsYW5l 36829\nIGVsZXZhdGU= 36830\nIENvb3JkaW5hdG9y 36831\nIFdhdGtpbnM= 36832\nIGV4Y2x1ZGVz 36833\nIHNlbnRpZW50 36834\nIGVwb2No 36835\nIGFsbG9j 36836\nUHJldmlvdXNseQ== 36837\nIFNoeQ== 36838\nIFNsb3Zha2lh 36839\nTE9DSw== 36840\nIG1hcmtlZGx5 36841\nIGtub2I= 36842\nIGFkdmVudHVyZXJz 36843\nIEJlZW4= 36844\nIENvc3Rz 36845\nYW1tZXJz 36846\nIG9uc2xhdWdodA== 36847\nIFN1cHBvcnRlZA== 36848\nIFRhdQ== 36849\naWthcnA= 36850\nIFNvdmVyZQ== 36851\nIEhhbXB0b24= 36852\n44KJ 36853\nUHJldg== 36854\nIFdvcnNl 36855\nIGNvdHRhZ2U= 36856\nIEhhZGVz 36857\nbGV6 36858\nYm93bA== 36859\nIGZyYWdyYW5jZQ== 36860\nIExvaw== 36861\nRU1PVEU= 36862\nIFBldHJv 36863\nIDE5MjU= 36864\nIFBlbmQ= 36865\ncHJvZHVjaW5n 36866\nIHJlbG9jYXRl 36867\ndmF0aQ== 36868\ncG9sZQ== 36869\nIHNlbWlu 36870\nIE5VTQ== 36871\nIHJvY2tlZA== 36872\nYnVmZg== 36873\nYmx5 36874\nUmVwbHk= 36875\nIEhhaQ== 36876\nIGFydGljdWxhdGVk 36877\nIElzbGFtYWJhZA== 36878\nNjY1 36879\nIENsYWltcw== 36880\nRGVza3RvcA== 36881\nIHRydXN0ZWU= 36882\nIHNjcmlwdGluZw== 36883\nIFNvYg== 36884\nIEFzeWx1bQ== 36885\nU1RET1VU 36886\nIENsb3du 36887\nIERvcnRtdW5k 36888\nIERldm9u 36889\nbGl0ZQ== 36890\nIE1hcmJsZQ== 36891\nIGJ1bmtlcg== 36892\nIGNyZXN0 36893\nIGFyb3VzYWw= 36894\nIFNlYXJz 36895\nIEJ1ZGR5 36896\nZXJlZGl0aA== 36897\nIFBvbGx5 36898\nIGRlY29kZQ== 36899\nIFZpc2g= 36900\nIFJlZmxlY3Q= 36901\nYW5vbg== 36902\nIHJlZnVuZHM= 36903\naW1tZXJz 36904\nSE0= 36905\nIHdpcGluZw== 36906\nIHB1enpsZWQ= 36907\nIG1hdHRl 36908\ndW5v 36909\nUGllcnJl 36910\nKSks 36911\nIHRhaW50ZWQ= 36912\nIHN5bWJvbGlzbQ== 36913\nIEZyYXo= 36914\nIHByb3Rlc3RvcnM= 36915\nZXRoZXVz 36916\nJSUlJQ== 36917\nV3Jh 36918\nIGxheA== 36919\nYWRlbQ== 36920\nYXR1cmF0aW9u 36921\n44OT 36922\nIFRyYWlsZXI= 36923\nIEVORw== 36924\nIEJvd3Nlcg== 36925\nIGF0dG0= 36926\nRHVy 36927\nODA3 36928\nIHNpZHg= 36929\nIGNpZGVy 36930\nIEFmZmVjdA== 36931\nIHdvdmVu 36932\nIEJhcmtlcg== 36933\nYmVuZWY= 36934\nIGRzdGc= 36935\nIFJ5dQ== 36936\nPls= 36937\nIHNxb3I= 36938\nU2F1ZGk= 36939\nIGlzdGc= 36940\nIGluZHVsZ2U= 36941\ncHJvYw== 36942\nIGRpc2d1c3RlZA== 36943\nIGNvbXBvdW5kZWQ= 36944\nIG5lbQ== 36945\nIHNjaG9vbGluZw== 36946\nIEN1cmU= 36947\ncHJvY2Vzc2luZw== 36948\nU29s 36949\nIHByb3ZlcmI= 36950\naXRpemVk 36951\nIEFsdmFyZXo= 36952\nIHNjYXJm 36953\nIHJlY3Rhbmd1bGFy 36954\ncmV2ZQ== 36955\nIGhvcm1vbmFs 36956\nIFN0cmVzcw== 36957\naXRpemVu 36958\nIDQyNQ== 36959\nZ2lybHM= 36960\nIE5vaXI= 36961\nIFJhcHA= 36962\nIG1hcmNoZXM= 36963\nY2h1cmNo 36964\nIFVzZXM= 36965\nIDQwNQ== 36966\nIEJlcm0= 36967\nIG9yZGluYW5jZXM= 36968\nIEp1ZGdtZW50 36969\nQ2hhcmdlcw== 36970\nIFppbg== 36971\nIGR1c3R5 36972\nIHN0cmF3YmVycmllcw== 36973\nIHBlcmNl 36974\nIFRodXI= 36975\nIERlYm9yYWg= 36976\nbmV0ZmxpeA== 36977\nIExhbWJlcnQ= 36978\nIGFtdXNlZA== 36979\nIEd1YW5n 36980\nWU9V 36981\nUkdC 36982\nIENDVFY= 36983\nIGZpYXQ= 36984\ncmFuZw== 36985\nIGZlZGVyYXRpb24= 36986\nIE1hbnQ= 36987\nIEJ1c3Q= 36988\nIE1hcmU= 36989\ncmVzcGVjdGl2ZQ== 36990\nIE1pZ3JhdGlvbg== 36991\nIEJJVA== 36992\nNTkw 36993\nIHBhdHJpb3Rpc20= 36994\nIG91dGxpbmluZw== 36995\ncmVnaW9u 36996\nIEpvc8Op 36997\nIGJsYXN0aW5n 36998\nIEV6cmE= 36999\nQnM= 37000\nIHVuZGVybWluZXM= 37001\nIFNtb290aA== 37002\nIGNsYXNoZWQ= 37003\ncmFkaW8= 37004\nIHRyYW5zaXRpb25pbmc= 37005\nIEJ1Y2NhbmVlcnM= 37006\nIE93bA== 37007\nIHBsdWdz 37008\nIGhpYXR1cw== 37009\nIFBpbmJhbGw= 37010\nIG1pZw== 37011\nIE51dHI= 37012\nIFdvbGZl 37013\nIGludGVnZXJz 37014\nIG9yYml0cw== 37015\nIEVkd2lu 37016\nIERpcmVjdFg= 37017\nYml0ZQ== 37018\nIGJsYXppbmc= 37019\ndnI= 37020\nRWRnZQ== 37021\nIFBJRA== 37022\nZXhpdA== 37023\nIENvbWVk 37024\nIFBhdGhmaW5kZXI= 37025\nIEd1aWQ= 37026\nIFNpZ25z 37027\nIFplcg== 37028\nIEFnZW5kYQ== 37029\nIHJlaW1idXJzZW1lbnQ= 37030\nTWVzaA== 37031\naVBob25l 37032\nIE1hcmNvcw== 37033\nIFNpdGVz 37034\naGF0ZQ== 37035\nZW5idXJn 37036\nIHNvY2tldHM= 37037\ncGVuZA== 37038\nQmF0bWFu 37039\ndmly 37040\nIFNIT1c= 37041\nIHByb3Zpc2lvbmFs 37042\nY29ubg== 37043\nIERlYXRocw== 37044\nQVRJVkU= 37045\nUHJvZmlsZQ== 37046\nc3lt 37047\nSkE= 37048\nIG5pbmph 37049\naW5zdGFsbGVk 37050\naWRhdGVz 37051\nZWJyYQ== 37052\nIE9tYWhh 37053\nIHNlaXppbmc= 37054\nIEJlYXN0cw== 37055\nIHNhbHRz 37056\nTWlzc2lvbg== 37057\nR2VuZXJhbGx5 37058\nIFRyaWxvZ3k= 37059\naGVvbg== 37060\nbGVnYXRlcw== 37061\nIGRpbWU= 37062\nIGZhaXJl 37063\ncGFyYWJsZQ== 37064\nR3JhcGg= 37065\nIHRvdGFsaW5n 37066\nIGRpYWdyYW1z 37067\nIFlhbnVr 37068\ncGxldA== 37069\nIE1laA== 37070\nIG15dGhpY2Fs 37071\nIFN0ZXBoZW5z 37072\nYXV0aWNhbA== 37073\nb2NoZW1pc3RyeQ== 37074\nIGtpbG9ncmFtcw== 37075\nIGVsYm93cw== 37076\nYW5jb2Nr 37077\nIEJDRQ== 37078\nIFByYWd1ZQ== 37079\nIGltcHJvdg== 37080\nIERldmlu 37081\nICJc 37082\ncGFyYWxsZQ== 37083\nIHN1cHJlbWFjaXN0cw== 37084\nIEJpbGxpb24= 37085\nIHJlZ2ltZW4= 37086\naW5uYWNsZQ== 37087\nIHJlcXVpc2l0ZQ== 37088\nYW5nYW4= 37089\nIEJ1cmxpbmd0b24= 37090\nYWlubWVudA== 37091\nIE9iamVjdGl2ZQ== 37092\nb21za3k= 37093\nR1Y= 37094\nIHVuaWxhdGVyYWw= 37095\nIHRj 37096\nIGhpcmVz 37097\nbWVudGFs 37098\nIGludm9sdW50YXJ5 37099\nIHRyYW5zcGw= 37100\nIEFTQ0lJ 37101\nwqg= 37102\nRXZlbnRz 37103\nIGRvdWJ0ZWQ= 37104\nIEthcGxhbg== 37105\nIENvdXJhZ2U= 37106\naWdvbg== 37107\nIE1hbmFnaW5n 37108\nIFRhcnQ= 37109\nIGZhbHNlaG9vZA== 37110\nIFZpb2xldA== 37111\nIGFpcnM= 37112\nIGZlcnRpbGl6ZXI= 37113\nQnJpdGFpbg== 37114\nIGFxdWF0aWM= 37115\nb3Vm 37116\nV29yZHM= 37117\nIEhhcnRmb3Jk 37118\nIGV2ZW5pbmdz 37119\nIFZlbmdlYW5jZQ== 37120\ncXVpdGU= 37121\nR2FsbA== 37122\nIFByZXQ= 37123\nIHBkZg== 37124\nIExN 37125\nIFNvY2hp 37126\nIEludGVyY2VwdA== 37127\nOTIw 37128\nIHByb2ZpdGFiaWxpdHk= 37129\nIElkbGU= 37130\nIE1hY0RvbmFsZA== 37131\nIEVzdGFibGlzaG1lbnQ= 37132\ndW1zeQ== 37133\nIGdhdGhlcmluZ3M= 37134\nIE5hag== 37135\nQ2hhcmxpZQ== 37136\nIGFzY2VudA== 37137\nIFByb3RlY3Rvcg== 37138\nIGFsZ2VicmE= 37139\nIGJpb3M= 37140\nZm9ydW1z 37141\nRUxT 37142\nSW50cm9kdWNlZA== 37143\nIDMzNQ== 37144\nIGFzdHJvbm9teQ== 37145\nQ29udHJpYnV0 37146\nIFBvbGlj 37147\nUGxhdGZvcm0= 37148\nIGNvbnRhaW5tZW50 37149\nd3JhcA== 37150\nIGNvcm9uYXJ5 37151\nIEplbGx5 37152\nbWFuYWdlcg== 37153\nIGhlYXJ0YnJlYWtpbmc= 37154\nY2Fpcg== 37155\nIENoZXJv 37156\nY2dp 37157\nTWVkaWNhbA== 37158\nIEFjY291bnRhYmlsaXR5 37159\nISEi 37160\nb3BoaWxl 37161\nIHBzeWNob3RpYw== 37162\nIFJlc3RyaWN0 37163\nIGVxdWl0YWJsZQ== 37164\naXNzdWVz 37165\nIDE5MDU= 37166\nIE5law== 37167\nY2lzZWQ= 37168\nIFRyYWNraW5n 37169\nIG96b25l 37170\nIGNvb2tlcg== 37171\ncm9zaXM= 37172\nIHJlb3Blbg== 37173\nIGluZmluaXR5 37174\nIFBoYXJtYWNldXRpY2Fs 37175\nZW5zaW9uYWw= 37176\nQXR0ZW1wdA== 37177\nIFJvcnk= 37178\nTWFyY28= 37179\nIGF3YWl0cw== 37180\nSE9X 37181\ndHJlYXRlZA== 37182\nIGJvbHN0 37183\nIHJldmVyZWQ= 37184\nIHBvZHM= 37185\nb3BwZXJz 37186\nMDAxMA== 37187\nIGFtcGxpdHVkZQ== 37188\ncmljYW4= 37189\nU1BPTlNPUkVE 37190\nIHRyb3VzZXJz 37191\nIGhhbHZlcw== 37192\nIEthaW5l 37193\nIEN1dGxlcg== 37194\nIEFVVEg= 37195\nIHNwbGVuZGlk 37196\nIHByZXZlbnRpdmU= 37197\nIER1ZGxleQ== 37198\naWZhY3Rz 37199\ndW1pbmF0aQ== 37200\nIFlpbg== 37201\nIGFkbW9u 37202\nIFZhZw== 37203\nIGludmVydGVk 37204\nIGhhc3RpbHk= 37205\nIEhhZ3Vl 37206\nTHlu 37207\nIGxlZGdlcg== 37208\nIGFzdHJvbm9taWNhbA== 37209\nZ2V0dGluZw== 37210\nIGNpcmNh 37211\nIENpYw== 37212\nIFRlbm5pcw== 37213\nTGltaXRlZA== 37214\nIGRydQ== 37215\nIEJZVQ== 37216\nIHRyYXZlbGxlcnM= 37217\nIHBhbmU= 37218\nIEludHJv 37219\nIHBhdGllbnRseQ== 37220\nIGFpZGluZw== 37221\nIGxvb3M= 37222\nIFRvdWdo 37223\nIDI5Mw== 37224\nIGNvbnN1bWVz 37225\nU291cmNlRmlsZQ== 37226\nICIiIg== 37227\nIGJvbmRpbmc= 37228\nIHRpbHRlZA== 37229\nIG1lbnN0cnVhbA== 37230\nIENlbGVzdGlhbA== 37231\nVUxBUg== 37232\nUGx1Z2lu 37233\nIHJpc2tpbmc= 37234\nTmF6 37235\nIFJpeWFkaA== 37236\nIGFjY3JlZGl0ZWQ= 37237\nIHNraXJt 37238\n6Zs= 37239\nIGV4YW1pbmVy 37240\nIG1lc3Npbmc= 37241\nIG5lYXJpbmc= 37242\nIENoZXJu 37243\nIEJlY2toYW0= 37244\nIHN3YXBwZWQ= 37245\nIGdvb3Nl 37246\nS2F5 37247\nIGxvZnR5 37248\nIFdhbGxldA== 37249\nIFsn 37250\nIGFwb2NhbHlwc2U= 37251\nIGJhbWJvbw== 37252\nIFNQQUNF 37253\nIEVsZW5h 37254\nIDMwNg== 37255\nYWNvbnM= 37256\nIHRpZ2h0ZW5lZA== 37257\nIGFkb2xlc2NlbmNl 37258\nIHJhaW55 37259\nIHZhbmRhbGlzbQ== 37260\nIE5ld3Rvd24= 37261\nIGNvbmplY3Q= 37262\nY2FrZXM= 37263\nIGNoZWF0ZWQ= 37264\nIG1vZGVyYXRvcnM= 37265\ncGFyYW1z 37266\nRUZG 37267\nIGRlY2VpdA== 37268\nIFNUTA== 37269\nIFRhbnphbmlh 37270\nIFJJ 37271\nIDE5MjM= 37272\nIEV4aWxl 37273\ndGhlbA== 37274\nIHRoZW9sb2c= 37275\nIHF1aXJreQ== 37276\nIElydmluZQ== 37277\nIG5lZWR5 37278\nb3Jpcw== 37279\nVW0= 37280\nS2E= 37281\nIG1haWxib3g= 37282\nMzIy 37283\nIGJvcw== 37284\nIFBldHJh 37285\nS0lORw== 37286\nIGVubGFyZ2Vk 37287\nT2Z0ZW4= 37288\nIGJhZGFzcw== 37289\nIDM0Mw== 37290\nIFBsYWNlcw== 37291\nIENBRA== 37292\nIHByaXN0aW5l 37293\nIGludGVydmVuaW5n 37294\nZGlyZWN0aW9u 37295\nIGxheg== 37296\nIERTTQ== 37297\nIHByb2plY3Rpbmc= 37298\nIEZ1bms= 37299\nYWdvZw== 37300\ncGF5bWVudA== 37301\nbm92 37302\nIGNoYXR0ZXI= 37303\nQVJC 37304\nIGV4YW1pbmF0aW9ucw== 37305\nIEhvdXNlaG9sZA== 37306\nIEd1cw== 37307\nRm9yZA== 37308\nNDE0 37309\nQm9zcw== 37310\nIG15c3RpYw== 37311\nIGxlYXBz 37312\nIEJhdg== 37313\ndWx6 37314\nYnVkZ2V0 37315\nRm9vdGJhbGw= 37316\nIHN1YnNpZGl6ZWQ= 37317\nIGZpcnN0aGFuZA== 37318\nIGNvaW5jaWRl 37319\nb2N1bGFy 37320\nQ29ubg== 37321\nIENvbGxhYm9y 37322\nIGZvb2xz 37323\nYW11cmE= 37324\nYWhhcg== 37325\ncmlzdHM= 37326\nIHN3b2xsZW4= 37327\nIGV4cGVuZGVk 37328\nIFBhdQ== 37329\nc3Vw 37330\nIHNwYXI= 37331\nIGtleW5vdGU= 37332\nc3VmZg== 37333\nIHVuZXF1YWw= 37334\nIHByb2dyZXNzaW5n 37335\nc3RyaW5ncw== 37336\nIEdhbWVyZ2F0ZQ== 37337\nRGlzbmV5 37338\nIEVsZXZlbg== 37339\nb21uaWE= 37340\nIHNjcmlwdGVk 37341\nIGVhcm5lcnM= 37342\nYnJvdGhlcg== 37343\nIEVuYWJsZWQ= 37344\n5rM= 37345\nIGxhcnZhZQ== 37346\nIExPQw== 37347\nbWVzcw== 37348\nV2lsc29u 37349\nIFRlbXBsYXRl 37350\nc3VjY2Vzc2Z1bGx5 37351\nIHBhcmFtb3VudA== 37352\nIGNhbW91ZmxhZ2U= 37353\nIGJpbmRz 37354\nIFF1aWV0 37355\nIFNodXR0ZXJzdG9jaw== 37356\ncnVzaA== 37357\nIG1hc2NvdA== 37358\nZm9ydHVuZQ== 37359\nIENvbHQ= 37360\nIEJleW9u 37361\naGFiaQ== 37362\nIGhhaXJj 37363\nIDI2Nw== 37364\nIERldXM= 37365\nIHR3aXRjaA== 37366\nIGNvbmNlbnRyYXRpbmc= 37367\nIG5pcHBsZXM= 37368\nY2libGU= 37369\nIGdpcg== 37370\nTlo= 37371\nTWF0aA== 37372\nbmlo 37373\nUmVxdWlyZWQ= 37374\nIHBvbmRlcg== 37375\nIFNBTg== 37376\nIHdlZGRpbmdz 37377\nIGxvbmVsaW5lc3M= 37378\nTkVT 37379\nIE1haGpvbmc= 37380\nNjk1 37381\nYWRkbGU= 37382\nIEdhcm5lcg== 37383\nIENPVVI= 37384\nQnJpZGdl 37385\nIHNwcmVl 37386\nIENhbGR3ZWxs 37387\nIGJyaWJlcnk= 37388\nIO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQ== 37389\ncGx1Z2lucw== 37390\nIHJhY2tldA== 37391\nIGNoYW1wYWduZQ== 37392\ndmVyc2libGU= 37393\nVm90ZQ== 37394\nIG1vZGlmaWVycw== 37395\nTWF5b3I= 37396\nNjgw 37397\nIGFzc2VtYmxpZXM= 37398\nIFN1bHRhbg== 37399\nIE5pbmc= 37400\nIExhZGllcw== 37401\nIHN1bGZ1cg== 37402\nIG9yYnM= 37403\nIC0tLS0t 37404\nX19fX19fXw== 37405\nIEpvdXJuYWxpc20= 37406\nIGVzcG9ydHM= 37407\nIGx1c2g= 37408\nIGh1ZQ== 37409\nIHNwZWN0cmFs 37410\nSG9uZXN0 37411\n44OP 37412\nIGJ1c2hlcw== 37413\nIHJlaW5mb3JjZW1lbnQ= 37414\nIHJlb3BlbmVk 37415\nIFdoZWVscw== 37416\nIE1vcmc= 37417\ncmlldmluZw== 37418\nIGF1eGlsaWFyeQ== 37419\nIGpRdWVyeQ== 37420\nIEJBVA== 37421\ndGVzcXVl 37422\nIHZlcnRleA== 37423\ncHVyZQ== 37424\nZnJleQ== 37425\n44K6 37426\nZG9z 37427\nIHR5cGg= 37428\nIGN1bGw= 37429\nIGVx 37430\nIGRlY29u 37431\nIHRvc3Npbmc= 37432\nIGRpc3BhcmF0ZQ== 37433\nIEJyaWdoYW0= 37434\ncHJpbnRm 37435\nbGVkZ2Vk 37436\nIHN1bmQ= 37437\nIGNvenk= 37438\nIGhlcGF0aXRpcw== 37439\ncGVyZm9ybWluZw== 37440\nIGF2YWw= 37441\nIEdH 37442\nZnV0dXJl 37443\nIHBldGVydG9kZA== 37444\nIEtvc292bw== 37445\nIG1hZ25ldHM= 37446\nQWxyZWFkeQ== 37447\nIEVkaXNvbg== 37448\nIENlcmVz 37449\nIFJBSUQ= 37450\nIGJyaWxsaWFuY2U= 37451\nNTc2 37452\nIGRlcml2ZXM= 37453\nIGh5cGVydGVuc2lvbg== 37454\nIM6U 37455\nIGxhbWJkYQ== 37456\nIGZsYWly 37457\nIG1pc3Npb25hcmllcw== 37458\nIHJhcGVz 37459\nIFN0YXJ0ZXI= 37460\nIE1vbnRocw== 37461\nIGRlZnk= 37462\nIHNlaXNtaWM= 37463\nIFJhcGhhZWw= 37464\nIGV1cm96b25l 37465\nNjU2 37466\nenNjaGU= 37467\nIHNjcmF0Y2hlZA== 37468\nIGJvd3M= 37469\nIExlbm5vbg== 37470\nIEdhaWE= 37471\nIGRyaXBwaW5n 37472\nZmFjdHM= 37473\nQWxl 37474\nIGZyb2dz 37475\nIEJyZWFzdA== 37476\nb2dlbmVpdHk= 37477\nIFByb3NlY3V0b3I= 37478\nIGFtcGxpZmllZA== 37479\nIEhvZGc= 37480\nIEZu 37481\nVGhvdXNhbmRz 37482\nIE5JSA== 37483\nIE1vbml0b3Jpbmc= 37484\nRlRXQVJF 37485\nIFByaWVidXM= 37486\nIEdyb3dpbmc= 37487\naHVudGVy 37488\nIGRpYWdub3Nl 37489\nIE1hbGQ= 37490\nIExS 37491\nIGNyb3duZWQ= 37492\nIGJ1cnN0aW5n 37493\nIGRpc3NvbHV0aW9u 37494\namF2YXNjcmlwdA== 37495\nIHVzZWZ1bG5lc3M= 37496\nIEV4ZWN1dGlvbg== 37497\nOig= 37498\nIEl2b3J5 37499\nYWFo 37500\nIHBlcnNlY3V0ZWQ= 37501\ndmlvbGVuY2U= 37502\naXN0YXM= 37503\nIENyYXRl 37504\nIGltcHVsc2Vz 37505\nIFNwYW5p 37506\nZWRlcw== 37507\nSGFuZGxl 37508\nIFplcmc= 37509\ndGhpbmthYmxl 37510\nTGFzdGx5 37511\nIHNwb250YW5lb3VzbHk= 37512\nIGluY29udmVuaWVudA== 37513\nIGRpc21pc3Npbmc= 37514\nIHBsb3R0ZWQ= 37515\nIGVpZ2h0eQ== 37516\nIDczNw== 37517\ncmlzaA== 37518\nIFRob3JudG9u 37519\nYXRoYW0= 37520\nIHNpdGNvbQ== 37521\nVmVu 37522\nUmVjaXBl 37523\ndGVs 37524\nbHVuZA== 37525\nIGNsZWFycw== 37526\nIFNhc3VrZQ== 37527\nIDI1OA== 37528\nIG9wdGluZw== 37529\nIGVucmFnZWQ= 37530\nZXN0aGV0aWM= 37531\nIEFl 37532\ndWNocw== 37533\nUHJlcA== 37534\nRmxvdw== 37535\nIHJ1bm9mZg== 37536\nIEVhdGluZw== 37537\nIEdpbGVz 37538\nIEFjdGluZw== 37539\ncmVzb3VyY2Vz 37540\naWJhYmE= 37541\nIHJwbQ== 37542\nIHNrZXdlZA== 37543\nIEJsYW5j 37544\nIFNha3V5YQ== 37545\nIGhvdHRlcg== 37546\nIDE5MjQ= 37547\nb3BpYW4= 37548\nY2tv 37549\nIGNydW1ibGluZw== 37550\nIGNhcHRhaW5z 37551\nIEFwcHJvcHJpYXRpb25z 37552\nbGVhZGVycw== 37553\nZHJvcHBpbmc= 37554\nYW51dHM= 37555\nIHJldmVyc2luZw== 37556\nIFBvc2U= 37557\nIFNlaw== 37558\nU2NvdA== 37559\nIElkZWE= 37560\nY2lzZQ== 37561\nIFNsb3Zlbmlh 37562\nIDMxNw== 37563\nRG9jdG9y 37564\nIGNyb2NvZA== 37565\nYWxkaQ== 37566\nU2Vh 37567\nIEZhcnJlbGw= 37568\nIG1lcmNlbmFyaWVz 37569\nIFJOQw== 37570\nIEd1ZXNz 37571\nIHBhY2luZw== 37572\nTWFjaGluZQ== 37573\nU3RyZWFtZXJCb3Q= 37574\nIENoYXJpdHk= 37575\nIDI5OA== 37576\nIGNhbm5vbnM= 37577\nIFRvYnk= 37578\nVFBQU3RyZWFtZXJCb3Q= 37579\nIFBhc3Npb24= 37580\nY2Zn 37581\nVGhvbQ== 37582\nIGJhZGdlcw== 37583\nIEJlcm5zdGVpbg== 37584\nLuKAkw== 37585\nIFBPUA== 37586\nIENvbmo= 37587\nIGluaXRpYWxpemF0aW9u 37588\nIGJpb2RpdmVyc2l0eQ== 37589\nRHVi 37590\nIGZldWRhbA== 37591\nIGRpc2NsYWltZXI= 37592\nIGNyb3c= 37593\nIGlnbml0aW9u 37594\nYXJm 37595\nU0hB 37596\nIGtIeg== 37597\naGF6YXJk 37598\nIEFydGlzdHM= 37599\nb2V1dg== 37600\nNjc5 37601\nIFJ1ZHk= 37602\nTmluZQ== 37603\nIFJhbWFkYW4= 37604\n5b0= 37605\naXR0bw== 37606\nIGFkcmVuYWxpbmU= 37607\nQ2VydA== 37608\nIHNtZWxsZWQ= 37609\nIGltcHVuaXR5 37610\nIGFnZW5kYXM= 37611\nIFJlYm9ybg== 37612\nIENvbmNlbnQ= 37613\nIFNlZW1z 37614\nIG9tZWdh 37615\nIER1c3Rpbg== 37616\nIGJhY2tlcg== 37617\nIFNhdWNl 37618\nIEJveWxl 37619\nV0lO 37620\nIHNwaW5z 37621\nIHBhdXNlcw== 37622\ndXB0 37623\nIHNocmVkZGVk 37624\nIHN0cmFwcGVk 37625\nIENvcnJ1cHRpb24= 37626\nIHNjcmF0Y2hlcw== 37627\nIG5p 37628\nIGF0dGlyZQ== 37629\nIFNBRg== 37630\nRmFjdG9yeVJlbG9hZGVk 37631\nIElQUw== 37632\nICgl 37633\nIHNlbWluYXI= 37634\nZm9jdXM= 37635\nY2l2aWw= 37636\nIDE4NjA= 37637\naW50b3No 37638\nIGNvbnRpbnVhbA== 37639\nIGFiYnJldmk= 37640\nIFNvaw== 37641\nb2NvYm8= 37642\nWE0= 37643\nIGZyYW50aWM= 37644\nIHVuYXZvaWRhYmxl 37645\nIGFydGVyeQ== 37646\nIGFubm90YXRpb25z 37647\nYmF0aA== 37648\nQ2xpbWF0ZQ== 37649\nIGRvcnM= 37650\nIFNsaWRl 37651\nY29vcmQ= 37652\nIFJlbG9hZA== 37653\nIExETA== 37654\nIExvdmVjcmFmdA== 37655\nIHVuaW1hZ2lu 37656\nIHJlc2VtYmxlZA== 37657\nIGJhcnJhY2tz 37658\nbnA= 37659\nIHN1cnJvZ2F0ZQ== 37660\nIGNhdGVnb3JpemVk 37661\n44Kp 37662\nIHZhY2NpbmF0ZWQ= 37663\nIGRyYWluYWdl 37664\nIGluZGlzdA== 37665\nIFdoYXRzQXBw 37666\nIDE4NzA= 37667\nb2xlcmFuY2U= 37668\naW52b2tl 37669\nYW1vcnBo 37670\nIHJlY29ubmVjdA== 37671\nIGVtYW5j 37672\nIGJsaW5kbmVzcw== 37673\nIDEyODA= 37674\naW50ZXJuZXQ= 37675\nY29sbGFy 37676\nIGFsdHJ1 37677\nIGFieXNz 37678\nIFRSSQ== 37679\nNjU3 37680\nIGluZnVzZWQ= 37681\nSEVBRA== 37682\nIGZvcmVzdHJ5 37683\nIFdvb2R5 37684\nIENp 37685\nd2k= 37686\nc2Ft 37687\nNzg0 37688\naG9saWRheQ== 37689\nIG1vZ3Vs 37690\nIEZlZXM= 37691\nIERFTg== 37692\nSW50ZXJuYWw= 37693\ndXJiZWQ= 37694\nZnVzYw== 37695\nYXRvbQ== 37696\nIElsbHVzaW9u 37697\nIHBvbGxlZA== 37698\nIGZsYXA= 37699\nIGNvYXg= 37700\nTEdCVA== 37701\nQW5hbHk= 37702\nIFNlY3Rpb25z 37703\nIENhbGlmb3Ju 37704\nZW1u 37705\nIGhpdGhlcg== 37706\nIE5JR0hU 37707\nIG5haWxlZA== 37708\nIFBpcGVsaW5l 37709\nMzkx 37710\nb29m 37711\nIFByaW1hbA== 37712\ndmVyZW5k 37713\nIHNsYXNoaW5n 37714\nIHJldHJp 37715\nYXZpb3Vy 37716\nIGRlcGFydGluZw== 37717\nZ2ls 37718\nSVND 37719\nIG1pZHdheQ== 37720\nIHVsdHJhc291bmQ= 37721\nIGJlaGF2aW5n 37722\nIFRhcmE= 37723\nY2xhc3Nlcw== 37724\nVmlydHVhbA== 37725\nIENvbG9uaWFs 37726\nIHN0cmlwcGluZw== 37727\nIG9yY2hlc3RyYXRlZA== 37728\nIEdyYXZlcw== 37729\nNDUy 37730\nIElyb25pY2FsbHk= 37731\nIFdyaXRlcnM= 37732\nIGxlbmRz 37733\nIE1hbno= 37734\nIHJhdmVu 37735\nIG94aWRhdGl2ZQ== 37736\nIDI2Ng== 37737\nRUxG 37738\nYWN0dWFsbHk= 37739\nYXNjYXI= 37740\nRHJhZnQ= 37741\nIGZhdm91cmFibGU= 37742\nIGh1bWlsaWF0aW5n 37743\nIGZpZGVsaXR5 37744\nIEhvZg== 37745\nIFh1YW4= 37746\nNDk2 37747\nIGxheWVyZWQ= 37748\nYXRpcw== 37749\nNzkw 37750\nIHBheWNoZWNr 37751\naXRvbg== 37752\nS2Fy 37753\nIFZNd2FyZQ== 37754\nIEZhcm1lcg== 37755\nIHNlcnZpYw== 37756\nZ2xvbWVy 37757\nIHNsdW1w 37758\nIEZhYnJpYw== 37759\nIERPQw== 37760\nZXN0aW5n 37761\nIHJlYXNzdXJl 37762\nIHBoeWw= 37763\ndm9sdA== 37764\naXRvcnk= 37765\nUnVsZXM= 37766\nIG94aWRhdGlvbg== 37767\nIHByaXplZA== 37768\nIG1pc3RyZXNz 37769\nIERqYW5nbw== 37770\nV0FSTg== 37771\n5ZE= 37772\nIGVuY29kZQ== 37773\nIEZlZWRiYWNr 37774\nIHN0dXBpZGl0eQ== 37775\nSWFu 37776\nIFl1Z29zbGF2aWE= 37777\n16g= 37778\nYWNs 37779\nVVRF 37780\nMTk3Nw== 37781\nIHF1YWxpZmllcw== 37782\nIHB1bHNlcw== 37783\ncHJldHR5 37784\nIGZyb3pl 37785\nIHNz 37786\nSXRlcmF0b3I= 37787\nIHVyZ2VudGx5 37788\nIG1haWxlZA== 37789\nIENoYW0= 37790\nIHN1c3RhaW5pbmc= 37791\nIGJhc2ls 37792\nIHB1cHBpZXM= 37793\naWxhbnQ= 37794\nIFBMRUFTRQ== 37795\nbGFw 37796\nYWNlb3Vz 37797\nRmVhcg== 37798\nIE1hc3Rlcnk= 37799\nYXV0b21hdGlj 37800\nIFRBRw== 37801\nIGFudGlt 37802\nYWdsZXM= 37803\nNDcz 37804\nZnJhbWVz 37805\nIHdoaXNwZXJz 37806\nIFdob2V2ZXI= 37807\nIGJyYXZlcnk= 37808\nIFVLSVA= 37809\ncmFjdGlvbnM= 37810\nIiIi 37811\nIHRhbWU= 37812\nIHBhcnRlZA== 37813\nZXZlcnl0aGluZw== 37814\nQ09OVA== 37815\nIGluZGVidGVk 37816\nIGFkZHI= 37817\ncmVr 37818\nSVJFRA== 37819\nIGVtaW5lbnQ= 37820\nY2xpbnRvbg== 37821\nIG91c3RlZA== 37822\nIHJldmlld2Vy 37823\nIG1lbHRkb3du 37824\nIHJlYXJy 37825\nIFlhbw== 37826\ndGhlcmVhbA== 37827\nYWJ5dGU= 37828\nIHN0dW1ibGluZw== 37829\nIGJhdGNoZXM= 37830\nIDI1OQ== 37831\nIGNvbnRyYWNlcHRpdmU= 37832\nIHByb3N0aXR1dGU= 37833\nZW5zaXM= 37834\nRGVjbA== 37835\nIFN0cmlrZXM= 37836\nTWlsaXRhcnk= 37837\nIE9hdGg= 37838\ndmFjYw== 37839\ncHBpbmdz 37840\nMDUy 37841\nIHBhcnROYW1l 37842\nYW1waW5n 37843\nUmVwb3J0cw== 37844\nS0k= 37845\nQ0hS 37846\nIHN1YnRseQ== 37847\nc3dlcnM= 37848\nQmxha2U= 37849\ndXN1YWw= 37850\nIGNvbnRlc3RhbnRz 37851\nIGNhcnRyaWRnZXM= 37852\nIEdSRUFU 37853\nIGJsdXNo 37854\nIOKAug== 37855\nNDcy 37856\nIHJlYXNvbmVk 37857\n44Ok 37858\ncGFyYWxsZWxlZA== 37859\nIGR5bg== 37860\nYWdhdGU= 37861\nIG5pZ2h0bHk= 37862\n5YY= 37863\nNTU2 37864\nIHNlbWFudGlj 37865\nIEFkdm9j 37866\nICEh 37867\nIGRpc2FncmVlcw== 37868\nIEJX 37869\nVmVo 37870\nIGhhcm1pbmc= 37871\nIGVtYnJhY2Vz 37872\nIHN0cml2ZXM= 37873\nIGlubGFuZA== 37874\nIEthcmQ= 37875\nIGhlYXRz 37876\nIEdpbm55 37877\ndXRhbg== 37878\nZXJuYXV0 37879\neWxlbmU= 37880\nIEVsZXY= 37881\nSkQ= 37882\nIGhhcnM= 37883\nIFN0YXJy 37884\nIHNreXNj 37885\nIGNvbGxhYm9yYXRvcnM= 37886\nVXN1YWxseQ== 37887\nIHJldm9sdXRpb25z 37888\nIFNUQVRT 37889\nIGRpc21hbnRsZQ== 37890\nIGNvbmZpZGVudGx5 37891\nIGtpbmV0aWM= 37892\nQWxp 37893\nIHBlcmNlbnRpbGU= 37894\nIGV4dHJhY3Rpbmc= 37895\naWxsaWFu 37896\nZXN0ZWFk 37897\nIHBoeXNpY2lzdHM= 37898\nIE1hcnNoYWw= 37899\nIGZlbGxvd3NoaXA= 37900\nIGRhc2hlZA== 37901\nIFVS 37902\nIFNpb3V4 37903\nIENvbXBhY3Q= 37904\nYW1pZGU= 37905\nUHl0aG9u 37906\nIExlaWdo 37907\nIFBoYXJtYWM= 37908\naXN0cmF0ZXM= 37909\naGVyaWNhbA== 37910\nIGZ1ZQ== 37911\nIEVtaW4= 37912\nICh7 37913\nIE5laWdoYm9yaG9vZA== 37914\nIGRpc3J1cHRpbmc= 37915\nIER1cA== 37916\nIGdsYW5k 37917\nIFNldg== 37918\nIE1hcmlhbg== 37919\nYXJnb24= 37920\nIER1bmQ= 37921\nIDwhLS0= 37922\nIHN0cmFuZA== 37923\nIHN0YWRpdW1z 37924\nem9z 37925\nIHBzeWNob3Npcw== 37926\nIFJhY2s= 37927\nIGJyaWxsaWFudGx5 37928\n77iP 37929\nIHN1Ym1lcmdlZA== 37930\nIEluc3RpdA== 37931\nIENob3c= 37932\nIGNhZ2Vz 37933\nIEhhdHM= 37934\nIFVycw== 37935\nIGRpbHV0ZWQ= 37936\ndXNhdA== 37937\naWVubmU= 37938\nIE1lbWJlcnNoaXA= 37939\nIEJ1cms= 37940\nIGll 37941\nIGFyY2hldHlwZQ== 37942\nRHJ1Zw== 37943\ndWx0b24= 37944\nIFNwb2Nr 37945\nIE1jS2F5 37946\nIERlcGVuZA== 37947\nRmVhdHVyZWQ= 37948\nU29j 37949\nMTk3OA== 37950\nIEJlcmU= 37951\nIHJlbGVudGxlc3NseQ== 37952\nIGNyaXBwbGluZw== 37953\nIGFydGhyaXRpcw== 37954\n55Sf 37955\nIFRyb3BpY2Fs 37956\nIEJ1bGc= 37957\nIENoZXJ5bA== 37958\nIGFkbWlyYWJsZQ== 37959\nIHN1YnRpdGxl 37960\nT3ZlcnJpZGU= 37961\nIG9yaWdpbmF0aW5n 37962\nIENDUA== 37963\nIHN3b3Jl 37964\nIFNvbGU= 37965\nIERpc29yZGVycw== 37966\nMzI5 37967\nIHByb2Nlc3Npb24= 37968\nIHJlZnVyYg== 37969\nIGltbWVyc2Vk 37970\ncmVxdWVudGx5 37971\nIHNrZXB0aWNz 37972\nIGNlcmFtaWM= 37973\nbWl0dGVy 37974\nZW5zdGVpbg== 37975\nYmVsdA== 37976\nIFRJVA== 37977\nYmlkZGVu 37978\nIGZpcg== 37979\nbWlzdA== 37980\nPl0= 37981\nIHdlYXZl 37982\nIFBhcmFkb3g= 37983\nIGVudHJ1c3RlZA== 37984\nIEJhcmNsYXlz 37985\nIG5vdmVsaXN0 37986\nb2dpZQ== 37987\nODA2 37988\nIG5pbmV0eQ== 37989\nIGRpc2FncmVlbWVudHM= 37990\nQEBAQEBAQEA= 37991\nIEF1c2Nod2l0eg== 37992\nY2Fycw== 37993\nIExFVA== 37994\ndHVi 37995\nYXJhbnRpbmU= 37996\nUE9T 37997\nIGJhY2tzdG9yeQ== 37998\nIGNoZWVyZnVs 37999\nIFJhZw== 38000\nZWth 38001\nYmlhc2Vk 38002\nIGluZXhwZXJpZW5jZWQ= 38003\nYWtyYQ== 38004\nIFdpdHQ= 38005\ndGFu 38006\nIHJhcGlzdA== 38007\nIHBsYXRlYXU= 38008\nY2hhbA== 38009\nIElucXVpcw== 38010\nZXhwcmVzc2lvbg== 38011\nIGNpcGhlcg== 38012\nIHNoYXZpbmc= 38013\nYWRkZW4= 38014\ncmVseQ== 38015\nKFw= 38016\naXNtYQ== 38017\nIFJlZ3VsYXRvcnk= 38018\nQ0hBUg== 38019\naWx5bg== 38020\nTlZJRElB 38021\nR1U= 38022\nIG11cm0= 38023\nbGF1cw== 38024\nQ2hyaXN0b3BoZXI= 38025\nIGNvbnRyYWN0dWFs 38026\nIFByb3h5 38027\nIEphaW1l 38028\nIE1ldGhvZGlzdA== 38029\nIHN0ZXdhcmRz 38030\nc3Rh 38031\ncGVyaWE= 38032\nIHBoeXNpb2xvZ3k= 38033\nIGJ1bXBlZA== 38034\nIGZydWN0b3Nl 38035\nQXVzdHJhbGlhbg== 38036\nIE1ldGFsbGlj 38037\nIE1hc3F1ZXJhZGU= 38038\nYXJi 38039\nIHByb211bA== 38040\nIGRvd25mYWxs 38041\nIGJ1dGNoZXI= 38042\nIGJvdXI= 38043\nIElORk9STUFUSU9O 38044\nIEJpcw== 38045\ncGVjdHM= 38046\nYWRlbmE= 38047\nIGNvbnRlbXBsYXRpbmc= 38048\nYXJvbw== 38049\nY2VudGVyZWQ= 38050\nIFBlYWtz 38051\nVXNlZA== 38052\nIG1vZGVt 38053\nIGdlbmRlcnM= 38054\nIDgwMDA= 38055\nMzcx 38056\nIG1hdGVybml0eQ== 38057\nIFJheg== 38058\nIHJvY2tpbmc= 38059\nIGhhbmRndW5z 38060\nIERBQ0E= 38061\nQXV0b20= 38062\nIE5pbGU= 38063\nIHR1bXVsdA== 38064\nIEJlbmVmaXQ= 38065\nIEFwcHJvYWNo 38066\nd29ya3Nob3A= 38067\nIExlYXZpbmc= 38068\nR2Vy 38069\naW5zdGVhZA== 38070\nIHZpYnJhdGlvbnM= 38071\nIHJlcG9zaXRvcmllcw== 38072\nNDk3 38073\nIEF1bnQ= 38074\nIEp1Yg== 38075\nIEV4cGVkaXRpb24= 38076\nQWxwaGE= 38077\nIHNhbnM= 38078\nIG92ZXJkdWU= 38079\nIG92ZXJjcm93ZA== 38080\nIGxlZ2lzbGF0dXJlcw== 38081\nIHBhdGVybmFs 38082\nIExlb25hcmRv 38083\nIGV4cHJlc3NpdmU= 38084\nIGRpc3RyYWN0aW9ucw== 38085\nIHNpbGVuY2Vk 38086\ndHJ1c3Q= 38087\nIGJpa2luZw== 38088\nIDU2MA== 38089\nIHByb3ByaWV0 38090\nIGltcG9zaXRpb24= 38091\nIGNvbmdsb21lcg== 38092\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 38093\nIFRlYWNoaW5n 38094\nIFlvc2U= 38095\naW50ZW5zaXZl 38096\nVG93bg== 38097\nIHRyb2xsaW5n 38098\nIEdyYWM= 38099\nIEFTVVM= 38100\nWW8= 38101\nIHNwZWNpYWxz 38102\nIE5lcGg= 38103\nIEdvZHppbGxh 38104\nRGF0YWJhc2U= 38105\nIEhlZ2Vs 38106\nIDI3Mg== 38107\nMTk3Ng== 38108\nIEdsb3JpYQ== 38109\nIGRpc2VtYg== 38110\nIEludmVzdGlnYXRpb25z 38111\nIEJhbmU= 38112\nYWdlbWVudHM= 38113\nU3RyYW5nZQ== 38114\nIHRyZWFzdXJ5 38115\nIFBsYXlz 38116\nIHVuZGVzaXJhYmxl 38117\nIHdpZGVuaW5n 38118\nIHZlcmJhbGx5 38119\nIGluZmFuY3k= 38120\nIGN1dHRlcg== 38121\nZm1s 38122\nIDIxMDA= 38123\ncHJvdG90eXBl 38124\nZmluZQ== 38125\nIGRlY3JpbWluYWw= 38126\nIGR5c2Z1bmN0aW9uYWw= 38127\nIGJlc2ll 38128\nIEVybnN0 38129\nemVi 38130\nIG5vcnRoZWFzdGVybg== 38131\nIGF1c3Q= 38132\ncG9yYXRl 38133\nIE1hcmxpbnM= 38134\nIHNlZ3JlZ2F0ZWQ= 38135\nZXdvcmxk 38136\nIE1haGVy 38137\nIHRyYXZlcnNl 38138\nIG1vbmFzdGVyeQ== 38139\ndXJneQ== 38140\nR2Vhcg== 38141\nc2FuZA== 38142\nQ29tcGw= 38143\nIEVNUA== 38144\nIHBsZW50 38145\nIE1lcmNlcg== 38146\nIDI3Ng== 38147\nVEFCTEU= 38148\nQ29uZmlndXJhdGlvbg== 38149\nSHVuZHJlZHM= 38150\nIHByaWM= 38151\nIGNvbGxhYm9yYXRpbmc= 38152\nIFBhcmFtb3VudA== 38153\nIEN1bW1pbmdz 38154\nICg8 38155\nIHJlY29yZGVy 38156\nIGZsYXRz 38157\nIDQxNg== 38158\nd2hvc2U= 38159\nRm9udFNpemU= 38160\nIE9yYml0 38161\nWVI= 38162\nIHdyaXN0cw== 38163\nIGJha2VyeQ== 38164\nKX0= 38165\nIEJvdW50eQ== 38166\nIExhbmNhc3Rlcg== 38167\nIGVuZGluZ3M= 38168\nYWNjb3JkaW5n 38169\nIFNhbGFt 38170\nZWFzeQ== 38171\nNzU1 38172\nIEJ1cnI= 38173\nIEJhcm5ldHQ= 38174\nb25vbW91cw== 38175\nVW5pb24= 38176\nIHByZWNlZGVuY2U= 38177\nIFNjaG9sYXJzaGlw 38178\nIFVY 38179\nIHJvbGxvdXQ= 38180\nIGJvb24= 38181\nYWxt 38182\nIENhbnRlcg== 38183\n5rU= 38184\nIHJvdW5kaW5n 38185\nIGNsYWQ= 38186\nIHZhcA== 38187\nIEZlYXR1cmVk 38188\naXNhdGlvbnM= 38189\nIDU0MA== 38190\ncG9saWNl 38191\nIHVuc2V0dGxpbmc= 38192\nIGRyaWZ0aW5n 38193\nIEx1bWlh 38194\nIE9iYW1hQ2FyZQ== 38195\nIEZhdm9y 38196\nSHlwZXI= 38197\nIFJvdGhzY2hpbGQ= 38198\nIE1pbGliYW5k 38199\nYW5hbHk= 38200\nIEp1bGlldA== 38201\nSHU= 38202\nIHJlY2FsbGluZw== 38203\nYWhlYWQ= 38204\nNjk2 38205\nIHVuZmF2b3JhYmxl 38206\nIGRhbmNlcw== 38207\nT3g= 38208\nIGxlZ2FsaXR5 38209\nIDQwMw== 38210\ncm9tYW5jZXI= 38211\nIGlucXVpcmU= 38212\nIE1vdmVz 38213\nXCI+ 38214\nIFZhcmlhbnQ= 38215\nIE1lc3NpYWg= 38216\nIExDUw== 38217\nIEJhaMOh 38218\nNzU2 38219\nIGV5ZWJyb3c= 38220\nIMKl 38221\nIE1jRg== 38222\nIEZvcnR5 38223\nTWFz 38224\nIHBhbmlja2Vk 38225\nIHRyYW5zZm9ybWF0aW9ucw== 38226\ncXE= 38227\nIHJldm9sdmVz 38228\ncmluZ2U= 38229\nIEFp 38230\nYXhl 38231\nIG9ud2FyZA== 38232\nIENGUg== 38233\nIEJhcmU= 38234\nbG9naW4= 38235\nIGxpcXVpZHM= 38236\nIGRlY29tcA== 38237\nc2Vjb25kYXJ5 38238\naWxhbg== 38239\nIENvbnZlcnQ= 38240\nYW1peWE= 38241\nIHByb3NlY3V0aW5n 38242\nIOKJoQ== 38243\nIFlvcmtlcnM= 38244\nIEJ5cm5l 38245\nc2xvdw== 38246\nYXdlaQ== 38247\nSmVhbg== 38248\nIDI2OQ== 38249\nIFNreWRyYWdvbg== 38250\nIMOp 38251\nIE5pY2FyYWd1YQ== 38252\nIEh1Y2thYmVl 38253\nIEhpZ2hseQ== 38254\nIGFtcGhpYg== 38255\nIFBhc3Rvcg== 38256\nIExldHM= 38257\nIGJsdXJyZWQ= 38258\nIHZpc2NlcmFs 38259\nIENCTw== 38260\nIGNvbGxhYm9yYXRlZA== 38261\nemln 38262\nTGVnYWw= 38263\nIGFwYXJ0aGVpZA== 38264\nIGJyaWQ= 38265\nIHByZXNldA== 38266\nIERFVA== 38267\nIEFNQQ== 38268\n15Q= 38269\nYXJjaGluZw== 38270\nYXVjdXNlcw== 38271\nYnVpbGRlcg== 38272\nIHBvZXRpYw== 38273\nIGVtdWxhdG9y 38274\nIE1vbGVjdWxhcg== 38275\nIGhvbm9yaW5n 38276\naXNldW0= 38277\nIHRyYWN0b3I= 38278\nIENsdXN0ZXI= 38279\nIENhbG0= 38280\nYXJlZGV2aWw= 38281\nIHNpZGV3YWxrcw== 38282\nIHZpb2xpbg== 38283\nIGdlbmVyYWxpemVk 38284\nIEFsZWM= 38285\nIGVtYmFyZ28= 38286\nIGZhc3RiYWxs 38287\nIEhUVFBT 38288\nIExhY2s= 38289\nIENoaWxs 38290\ncml2ZXI= 38291\nQ2hlbA== 38292\nIFN3YXJt 38293\nIExldmluZQ== 38294\ncm95aW5n 38295\nTGF1bmNo 38296\nIGtpY2tlcg== 38297\nIGFkZGl0aXZl 38298\nIERlYWxz 38299\nV2lkZ2V0 38300\nY29udGFpbmluZw== 38301\nIGVzY2FsYXRl 38302\nIE9QRU4= 38303\nIHR3ZWFrZWQ= 38304\nIHN0YXNo 38305\nIHNwYXJrcw== 38306\nIEVzc2V4 38307\nIEVjYw== 38308\nIGNvbnZpY3Q= 38309\nIGJsb2dnaW5n 38310\nSUVS 38311\nIEhM 38312\nIG11cmRlcmVycw== 38313\nNzU5 38314\nIEhpYg== 38315\nIGRlcGw= 38316\nIEpvcmQ= 38317\nU2Fj 38318\nIGRpc3NlY3Q= 38319\nIEhvd2U= 38320\nb3NoZXI= 38321\nIGN1c3RvbWl6YWJsZQ== 38322\nIEZyYW56 38323\nIGF0cm8= 38324\nxIc= 38325\nIDAwMDQ= 38326\nIG91dHBvc3Q= 38327\nUm9zcw== 38328\nIGdseXBob3NhdGU= 38329\nIEhhc3Rpbmdz 38330\nIEJFRk9SRQ== 38331\nIHNob3Zl 38332\nb3BwZWQ= 38333\nIFNjYWxh 38334\nIGFtdWxldA== 38335\nYW5pYW4= 38336\nIGV4YWNlcmJhdGVk 38337\nIGVhdGVy 38338\nNDcx 38339\nVU1F 38340\nIHB1bHA= 38341\naXpvbnRhbA== 38342\nIFphbQ== 38343\nIEFUSQ== 38344\naW1tdW5l 38345\nYWJ5dGVz 38346\nIHVubmVjZXNzYXJpbHk= 38347\nIENBVA== 38348\nIEF4aXM= 38349\nIHZpc3VhbGl6ZQ== 38350\nw4k= 38351\nIFJhZGljYWw= 38352\nZm0= 38353\nRG9jdW1lbnRz 38354\nIEZvcnJlc3Q= 38355\nIGNvbnRleHR1YWw= 38356\nIFN5bWJvbA== 38357\nIHRlbnRhdGl2ZQ== 38358\nIERPRVM= 38359\nIEdvb2Rz 38360\nIGludGVybWl0dGVudA== 38361\nfTo= 38362\nbWVkaWF0ZWQ= 38363\nIHJpZGljdWxl 38364\nIGF0aGVpc20= 38365\nIHBhdGhvZ2Vucw== 38366\nIE11bQ== 38367\nIHJlaW50cm9kdQ== 38368\nIDMwNw== 38369\naUhVRA== 38370\nIGZsYXNobGlnaHQ= 38371\nIHN3ZWFyaW5n 38372\nIHBlbmd1 38373\nQnU= 38374\nIHJvdGF0ZWQ= 38375\nIENyYW5l 38376\nICgpKTs= 38377\nIGZhc2hpb25hYmxl 38378\nIGVuZG9yc2luZw== 38379\nNDYz 38380\nKVs= 38381\nIGluZ2VzdGlvbg== 38382\nIGNvb2tz 38383\nIDk1MA== 38384\nb3RvbXk= 38385\nIEltYW0= 38386\nIGth 38387\nIHRlYXNlcg== 38388\nIEdob3N0cw== 38389\nIOOCtQ== 38390\nMTk2OQ== 38391\nz4M= 38392\ndWJieQ== 38393\nIGNvbnZlcnRlcg== 38394\nemFubmU= 38395\nZW5kZQ== 38396\nIFByZXBhcg== 38397\nIE5pY2tlbA== 38398\nIENoaW1lcmE= 38399\naGlt 38400\nIFR5cmFubg== 38401\nIFNhYmJhdGg= 38402\nIE5pY2hvbHM= 38403\nIHJhcHQ= 38404\naWhhcg== 38405\nIHNoZWxsaW5n 38406\nIGlsbHVtaW5hdGU= 38407\nIGRlbnRpc3Q= 38408\ndXRvcg== 38409\nIEludGVncmF0aW9u 38410\nIHdoaW1z 38411\nIExpdGVyYXJ5 38412\nQmVhdXQ= 38413\nIHBhcmNobWVudA== 38414\nYWdhcmE= 38415\nQnJhbmQ= 38416\nIGRlcm9n 38417\n4oCmKQ== 38418\nIE5vcnNl 38419\nIHVud2l0dGluZw== 38420\nIGN1Yw== 38421\nIGJvcmRlcmxpbmU= 38422\nIHVwc2V0dGluZw== 38423\nIHJlY291cnNl 38424\nIGRyYXBlZA== 38425\nIFJhZGFy 38426\nIGNvbGRlcg== 38427\nIFBlcHNp 38428\naW1pbmFyeQ== 38429\nXSxb 38430\nNjU4 38431\nVmk= 38432\nIEZyZW0= 38433\nIFBlcw== 38434\nIHZldGVyaW5hcnk= 38435\nIFRFRA== 38436\nIEVwaWRlbQ== 38437\nbm92YQ== 38438\na2lk 38439\nIGRldm91dA== 38440\nb2N0 38441\namFk 38442\nTW9o 38443\nIFBBWQ== 38444\nIGdlb21ldHJpYw== 38445\nIDMyMw== 38446\nIGNpcmN1bWZlcmVuY2U= 38447\naWNoaWNr 38448\nMTk3NQ== 38449\nIFl1cmk= 38450\nIFNoYWxs 38451\nIEhvdmVy 38452\ndW5pbg== 38453\nU3By 38454\nIGdyYWZ0 38455\nIEhhcHBpbmVzcw== 38456\nIGRpc2FkdmFudGFnZXM= 38457\nYXR0YWNrcw== 38458\nIGh1YnM= 38459\nIFN0YXJDcmFmdA== 38460\n6ZY= 38461\nIGdhbGxlcmllcw== 38462\nIEtvcnJh 38463\nIGdyb2Nlcmllcw== 38464\nIEdvcnN1Y2g= 38465\nIHJhcGlzdHM= 38466\nIGZ1bmdp 38467\nIFR5cGhvb24= 38468\nVmVjdG9y 38469\nIEVtcHJlc3M= 38470\nYmF0dGxl 38471\nNDY4 38472\nIHBhcmFzaXRl 38473\nIEJvbWJlcg== 38474\nU0c= 38475\nZXhpc3Q= 38476\nIFBm 38477\nIHVuc2U= 38478\nIHN1cmdlb25z 38479\nQmlydGg= 38480\nIFVuc3VyZQ== 38481\nIFByaW50ZWQ= 38482\nIEJlaGF2aW9yYWw= 38483\nIEFzdGVy 38484\nUGFraXN0YW4= 38485\nIHVuZXRoaWNhbA== 38486\nIHN2 38487\nIElvVA== 38488\nIGxheW91dHM= 38489\nUGFpbg== 38490\nIGNvbnN0YW50cw== 38491\nIExX 38492\nIEJha2U= 38493\nIHRvd2Vscw== 38494\nIGRldGVyaW9yYXRpb24= 38495\nIEJvbGl2aWE= 38496\nIGJsaW5kZWQ= 38497\nIFdhcmRlbg== 38498\nIE1pc3RyZXNz 38499\nIG9uc3RhZ2U= 38500\nIGNsYW5z 38501\nIEJFU1Q= 38502\nMTk2MA== 38503\nIGFudGlxdWU= 38504\nIHJoZXRvcmljYWw= 38505\nIFBlcmN5 38506\nIFJ3YW5kYQ== 38507\nLC4= 38508\nQnJ1Y2U= 38509\nIHRyYXVtYXQ= 38510\nIFBhcmxpYW1lbnRhcnk= 38511\nIGZvb3Rub3Rl 38512\naWRpYQ== 38513\nIExlYXJuZWQ= 38514\nc2Vla2luZw== 38515\nZ2VuaWM= 38516\nIGRpbWVuc2lvbmFs 38517\nSGlkZQ== 38518\n6ICF 38519\nIGludHJpZ3Vl 38520\naW5zZQ== 38521\nIGxlYXNlcw== 38522\nIGFwcHJlbnRpY2Vz 38523\nd2FzaGluZw== 38524\nIDE5MjY= 38525\nVklMTEU= 38526\nIHN3b29w 38527\nc2Ns 38528\nIGJlZHJvb21z 38529\nb25pY3M= 38530\nIENydW5jaA== 38531\nY29tcGF0aWJsZQ== 38532\nIGluY2FwYWM= 38533\nIFllbWVuaQ== 38534\nYXNodHJh 38535\nemhvdQ== 38536\nZGFuZ2Vy 38537\nIG1hbmlmZXN0YXRpb25z 38538\nIERlbW9ucw== 38539\nQUFG 38540\nU2VjcmV0YXJ5 38541\nQUNURUQ= 38542\nTE9E 38543\nIGFteQ== 38544\ncmFwZXI= 38545\nZXRobmlj 38546\nNDE3 38547\nIHBvc2l0aXZlcw== 38548\nIDI3Mw== 38549\nIFJlZnVnZWVz 38550\nIHVzYg== 38551\nIFZhbGQ= 38552\nb2RkeQ== 38553\nIE1haG1vdWQ= 38554\nQXNpYQ== 38555\nIHNrdWxscw== 38556\nIEV4b2R1cw== 38557\nIENvbXBldA== 38558\nIExJQw== 38559\nIE1hbnNpb24= 38560\nIEFtZQ== 38561\nIGNvbnNvbGlkYXRl 38562\nc3Rvcm1z 38563\nb250ZW50 38564\nOTk2 38565\nIGNsZW4= 38566\nIG11bW15 38567\nZmxhdA== 38568\nNzU4 38569\nIFZPTA== 38570\nb3Rlcmlj 38571\nbmVu 38572\nIE1pbnV0ZQ== 38573\nU292 38574\nIGZpbmVy 38575\nUmg= 38576\nbHljZXI= 38577\nIHJlaW5mb3JjZW1lbnRz 38578\nIEpvaGFubmVz 38579\nIEdhbGxhZ2hlcg== 38580\nIGd5bW4= 38581\nU3VkZGVubHk= 38582\nIGV4dG9ydGlvbg== 38583\na3I= 38584\naWF0b3I= 38585\nVGE= 38586\nIGhpcHBvY2FtcHVz 38587\nTlBS 38588\nIENvbXB1dGluZw== 38589\nIHNxdWFyZWx5 38590\nIG1vZGVsbGluZw== 38591\nIEZvcnVtcw== 38592\nIExpc3A= 38593\nIEtyaXNobmE= 38594\nIDMyNA== 38595\nIHJ1c2hlcw== 38596\nIGVuc3VlZA== 38597\nIGNyZWVwaW5n 38598\nb250ZQ== 38599\nbmFp 38600\naWxhdGVy 38601\nIEhvcm5ldHM= 38602\nIG9ibGl2aW91cw== 38603\nSU5TVA== 38604\nNTU5 38605\nIGplb3BhcmR5 38606\nIGRpc3Rpbmd1aXNoaW5n 38607\nanVyZWQ= 38608\nIGJlZ3M= 38609\nc2ltaWxhcg== 38610\ncGhvdA== 38611\nNTMw 38612\nIFBhcmt3YXk= 38613\nIHNpbmtz 38614\nIEhlYXJ0aHN0b25l 38615\naWJ1cg== 38616\nIEJhdG9u 38617\nQXZvaWQ= 38618\nIGRhbmNlcg== 38619\nIG1hZ2lzdHJhdGU= 38620\nYXJ5bg== 38621\nIGRpc3R1cmJhbmNlcw== 38622\nIFJvbWVybw== 38623\nIHBhcmFwaA== 38624\nIG1pc2NoaWVm 38625\n4paT 38626\nIFNoYXJpYQ== 38627\nIHVyaW5hcnk= 38628\ncm91dGU= 38629\naXZhcw== 38630\nZml0dGVk 38631\nIGVqZWN0ZWQ= 38632\nIEFsYnVxdWVycXVl 38633\nIDQ3MA== 38634\nIGlycml0YXRlZA== 38635\nIFppcA== 38636\nIEJpb2w= 38637\nw40= 38638\nIGRlbm91bmNl 38639\nIGJpbmFyaWVz 38640\nIFZlcnNl 38641\nIG9wcG9z 38642\nIEtlbmRyaWNr 38643\nIEdQTA== 38644\nIHNwZXc= 38645\nIEVsaWphaA== 38646\nIEVhcw== 38647\nIGRyaWZ0ZWQ= 38648\nc29mYXI= 38649\nIGFubm95YW5jZQ== 38650\nIEJFVA== 38651\nNDc0 38652\nIFN0cm9uZ2g= 38653\naXRhdGVz 38654\nIENvZ25pdGl2ZQ== 38655\nb3Bob25l 38656\nIElkZW50aWZpY2F0aW9u 38657\nb2NyaW5l 38658\nY29ubmVjdGlvbg== 38659\nIGJveGVy 38660\nIEFTRA== 38661\nIEFyZWFz 38662\nWWFuZw== 38663\ndGNo 38664\ndWxsYWg= 38665\nIGRlY2VpdmU= 38666\nQ29tYmF0 38667\nZXBpc29kZQ== 38668\nY3JldGU= 38669\nV2l0bmVzcw== 38670\nIGNvbmRvbGVuY2Vz 38671\naHRhcg== 38672\nIGhlYWxz 38673\nIGJ1Y2tldHM= 38674\nIExBVw== 38675\nQmx1 38676\nIHNsYWI= 38677\nIE9SREVS 38678\nb2Ns 38679\nYXR0b24= 38680\nIFN0ZXZlbnNvbg== 38681\nIEdpbmdlcg== 38682\nIEZyaWVuZGx5 38683\nIFZhbmRlcmJpbHQ= 38684\nc3Bpcml0 38685\naWds 38686\nIFJlZ2FyZGluZw== 38687\nIFBST0c= 38688\nIHNlYWxpbmc= 38689\nc3RhcnRpbmc= 38690\nIGNhcmRpbmFs 38691\nIFZlYw== 38692\nIEJlaXI= 38693\nIG1pbGxpc2Vjb25kcw== 38694\nd2Vhaw== 38695\ncGVyc2U= 38696\nIHN0ZXJpbGU= 38697\nIENvbnRlbXBvcmFyeQ== 38698\nIFBoYW50 38699\nIENsbw== 38700\nIG91dHA= 38701\nIGV4aWxlZA== 38702\nIDI3Nw== 38703\nIHNlbGZpZQ== 38704\nIG1hbmlj 38705\nIG5hbm8= 38706\ndGVybXM= 38707\nQWxleGFuZGVy 38708\nIHJlc29sdmVz 38709\nIG1pbGxlbm5pYQ== 38710\nIGV4cGxvZGVz 38711\nIGNvbnN0ZWxsYXRpb24= 38712\nIGFkdWx0ZXJ5 38713\nbW90aW9u 38714\nRE9D 38715\nIGJyb2FkY2FzdGVycw== 38716\nIGtpbmRlcmdhcnRlbg== 38717\nIE1heXdlYXRoZXI= 38718\nIEVjbw== 38719\naWNobw== 38720\nIDI4Nw== 38721\nbGF1bg== 38722\nIG11dGU= 38723\nIGRpc2NyZWV0 38724\nIHByZXNjaG9vbA== 38725\nIHByZWVtcHQ= 38726\nRGVsZXRl 38727\nIEZyZWVk 38728\nUGk= 38729\nSEs= 38730\nIGJsb2NrZXI= 38731\nIEN1bWJlcg== 38732\nIHdyb3VnaHQ= 38733\nZGF0aW5n 38734\nIGluc3VyZXI= 38735\nIHF1b3Rhcw== 38736\nIHByZWFjaGVk 38737\nIGV2aWN0aW9u 38738\nIFJlZ2luYQ== 38739\nIFBlbnM= 38740\nIHNldmVudGVlbg== 38741\nIE5hc3M= 38742\nRGljaw== 38743\nIGZvbGRz 38744\nIGRvdHRlZA== 38745\nIEFhZA== 38746\nVW5pdmVyc2Fs 38747\nIHBpeno= 38748\nIEd1cnU= 38749\nIHNvaWxz 38750\nIG5vdmljZQ== 38751\nIE5lYW5kZXI= 38752\nIHN0b29s 38753\nIGRldG9uYXRlZA== 38754\nIFBpa2FjaHU= 38755\nIE1hc3NpdmU= 38756\nSVZFUg== 38757\nIEFiZGVs 38758\nIHN1YmR1ZWQ= 38759\nIHRhbGxlc3Q= 38760\nIHByZWNhcmlvdXM= 38761\nIGF5 38762\ncmlmaWNhdGlvbg== 38763\nIE9iag== 38764\nY2FsZQ== 38765\nIHVucXVlc3Rpb24= 38766\nY3Vsb3Npcw== 38767\nYWRhcw== 38768\naWdyYXRlZA== 38769\nRGF5cw== 38770\nIHF1ZWVucw== 38771\nIEdhemV0dGU= 38772\nIENvbG91cg== 38773\nIEJvd21hbg== 38774\nIEpK 38775\nw692ZQ== 38776\nIGRvbWluYXRlcw== 38777\nU3R1ZGVudA== 38778\nIG11 38779\nIGJhY2tsb2c= 38780\nIEVsZWN0cm8= 38781\nVHJ1dGg= 38782\nNDgz 38783\nIGNvbmRlbnNlZA== 38784\ncnVsZXM= 38785\nIENvbnNwaXJhY3k= 38786\nIGFjcm9ueW0= 38787\naGFuZGxlZA== 38788\nIE1hdHRl 38789\nanJp 38790\nIEltcG9zc2libGU= 38791\nbHVkZQ== 38792\nY3JlYXRpb24= 38793\nIHdhcm1lZA== 38794\nIFNsYXZl 38795\nIG1pc2xlZA== 38796\nIGZlcm1lbnQ= 38797\nIEthaA== 38798\naW5raQ== 38799\na2VsZXRvbg== 38800\nY3ls 38801\nIEthcmlu 38802\nSHVudGVy 38803\nUmVnaXN0ZXI= 38804\nIFN1cnJleQ== 38805\nIHN0YXJlcw== 38806\nIFdpZHRo 38807\nIE5heQ== 38808\nIFNraQ== 38809\nIGJsYWNrbGlzdA== 38810\ndWNrZXQ= 38811\nIGV4cHVsc2lvbg== 38812\naW1ldA== 38813\nIHJldHdlZXQ= 38814\ndmFudGFnZQ== 38815\nRmVhdHVyZQ== 38816\nIHRyb29wZXJz 38817\nIGhvbWVycw== 38818\nOTY5 38819\nIGNvbnRpbmdlbmN5 38820\nIFdUQw== 38821\nIEJyZXdlcg== 38822\nZm9yZWlnbg== 38823\nV2FyZQ== 38824\nU29sYXI= 38825\nIHVuZHVl 38826\nUkVD 38827\ndWxuZXJhYmxl 38828\ncGF0aGlj 38829\nIEJvaXNl 38830\nIDMyMg== 38831\nIGFyb3VzZWQ= 38832\nIFlpbmc= 38833\n5LiN 38834\ndWVsZXNz 38835\nIHBhcw== 38836\nIG1vcnA= 38837\nIGZsb3JhbA== 38838\nRXhwcmVzcw== 38839\ndWRnaW5n 38840\na0I= 38841\nIEdyYW50ZWQ= 38842\n2K8= 38843\nIE1pY2hh 38844\nIEdvdGhpYw== 38845\nIFNQRUNJQUw= 38846\nIFJpY2FyZG8= 38847\nRnJhbg== 38848\nIGFkbWluaXN0ZXJpbmc= 38849\nNjIw 38850\ncG9yYQ== 38851\nIMKu 38852\nIGNvbXByb21pc2Vz 38853\nIGJpdHRlbg== 38854\nQWNjZXB0 38855\nVGhpcnR5 38856\n0LI= 38857\nIG1hdGVyaWFsbHk= 38858\nIFRlcnI= 38859\naWdtYXRpYw== 38860\nY2hhaW5z 38861\nIGRvdmU= 38862\nc3RhZHQ= 38863\nTWFydmVs 38864\nRkFVTFQ= 38865\nIHdpbmRzaGllbGQ= 38866\nIDMzNg== 38867\nYWRpZXI= 38868\nIHN3YXBwaW5n 38869\nIGZsYXdsZXNz 38870\nIFByZWRhdG9y 38871\nIE1pY2hlbGU= 38872\nIHByb3B1bHNpb24= 38873\nIFBzeWNoaWM= 38874\nIGFzc2lnbmluZw== 38875\nIGZhYnJpY2F0aW9u 38876\nIGJhcmxleQ== 38877\nbHVzdA== 38878\nIHRvd2VyaW5n 38879\nIGFsdGVyY2F0aW9u 38880\nIEJlbnRsZXk= 38881\nU3BoZXJl 38882\nIHR1bmE= 38883\nIENsYXNzZXM= 38884\nRnJlZWRvbQ== 38885\ndW5lcg== 38886\nTGFkeQ== 38887\ndm9pY2U= 38888\nIGNvb2xlc3Q= 38889\nb3Jy 38890\nIHBhbHA= 38891\nJHs= 38892\nIGh5c3Rlcmlh 38893\nIE1ldGF0cm9u 38894\ncGFudHM= 38895\nIHNwYXduaW5n 38896\nRXhwZXJ0cw== 38897\nIEludmVzdG9ycw== 38898\nIEFuYXJjaHk= 38899\nIHNocnVuaw== 38900\nIFZpY3RpbQ== 38901\nIDI4OQ== 38902\nIGVjc3Rhc3k= 38903\nIEJpbmRpbmc= 38904\nNTg1 38905\nIE1lbG9keQ== 38906\nNTc4 38907\nb3RhbGx5 38908\nIEV0c3k= 38909\nbGlnYQ== 38910\nIGFwcGxhdWRlZA== 38911\nIHN3ZWF0aW5n 38912\nIHJlZGlzdHJpYnV0ZWQ= 38913\nIHBvcGNvcm4= 38914\nIHNlbWluYWw= 38915\nZnVy 38916\nIE5ldXJvc2NpZW5jZQ== 38917\nUmFuZA== 38918\nIE9zdA== 38919\nIE1hZGRlbg== 38920\nIEluY3JlYXNpbmc= 38921\nIERhd2tpbnM= 38922\nIFN1YndheQ== 38923\nIGFyc2Vu 38924\nY29uc2Vydg== 38925\nQlVS 38926\nIHNwaWtlZA== 38927\nIEx5ZnQ= 38928\nIEltcGVyaXVt 38929\nIERyb3Bib3g= 38930\nIGZhdm91cmVk 38931\nIGVuY29tcGFzc2Vz 38932\nZ2hvc3Q= 38933\nIGluc3BpcmVz 38934\nIGJ1cmdlb25pbmc= 38935\nIFlvc2hp 38936\nIFZlcnRpY2Fs 38937\nIEF1ZGl0b3I= 38938\nIGludGVuZGluZw== 38939\nIGZpbGlidXN0ZXI= 38940\nQmxvb20= 38941\nZmFj 38942\nIENhdnM= 38943\naWduaW5n 38944\nIGNvd29ya2Vycw== 38945\nIEJhcmJhcmlhbg== 38946\ncmVtZW1iZXI= 38947\nRkxBRw== 38948\nIGF1ZGl0b3J5 38949\nYXNvbnJ5 38950\nQ29sbGVnZQ== 38951\nIG11dGVk 38952\nZ2Vtb255 38953\nb2Jpbg== 38954\nIFBzeWNobw== 38955\nOTY4 38956\nIGxhdmlzaA== 38957\nIGhpZXJhcmNoaWNhbA== 38958\nIERyb25l 38959\nb3Vr 38960\nIGNyaXBwbGVk 38961\nIE1heGlt 38962\nU2xvdA== 38963\nIHF1aXo= 38964\nIFZpZA== 38965\naWZsaW5n 38966\nIGFyY2hhZW9sb2dpc3Rz 38967\nIGFiYW5kb25tZW50 38968\nZGlhbA== 38969\nbGVvbg== 38970\nIEZhcw== 38971\nVGVk 38972\nIHJhc3BiZXJyeQ== 38973\nIG1hbmV1dmVycw== 38974\nIGJlaGF2aW91cnM= 38975\nIGluc3VyZQ== 38976\nIHJlbW9k 38977\nU3dpdGNo 38978\naG9l 38979\nIHNwYWNlZA== 38980\nIGFmZm9yZGFiaWxpdHk= 38981\nIEZlcm4= 38982\nbm90YXRpb24= 38983\nIEJhbGFuY2Vk 38984\nIG9jY3VwaWVz 38985\nZW52aXJvbm1lbnQ= 38986\nIG5lY2tsYWNl 38987\nIHNlZGFu 38988\nRlU= 38989\nIEJyYXZv 38990\nIGFidXNlcnM= 38991\nIEFuaXRh 38992\nbWV0YWRhdGE= 38993\nIEdpdGh1Yg== 38994\nYWl0bw== 38995\nIEZhc3Rlcg== 38996\nIFdhc3Nlcm1hbg== 38997\nIEZsZXNo 38998\nIHRob3Ju 38999\ncmFyaWx5 39000\nIE1lcnJ5 39001\nd2luZQ== 39002\nIHBvcHVsYWNl 39003\nIExhbm4= 39004\nIHJlcGFpcmluZw== 39005\nIHBzeWNoZQ== 39006\nIG1vZHVsYXRpb24= 39007\nYXdhcnU= 39008\n4oCL4oCL 39009\nYXJpag== 39010\nIGRlY29yYXRpb25z 39011\nIGFwb2xvZ2lzZQ== 39012\nIEdhcmc= 39013\nYXBwbHk= 39014\nIGdpdmVhd2F5 39015\nIEZsYW4= 39016\nIFd5YXR0 39017\nVWJlcg== 39018\nIGF1dGhvcmlzZWQ= 39019\nIE1vcmFs 39020\nSEFIQUhBSEE= 39021\nYWN0aXZhdGU= 39022\nIHRvcnBlZG8= 39023\nIEZBUg== 39024\nIGFtYXNzZWQ= 39025\nIEFyYW0= 39026\nYXJraW4= 39027\nIFZpY3RpbXM= 39028\nc3RhYg== 39029\nIG9t 39030\nIEVDTw== 39031\nIG9waW9pZHM= 39032\nIHB1cnBvc2VseQ== 39033\nIFZlc3Q= 39034\nIGVyZw== 39035\nYXRhbg== 39036\nIFN1cmdlcnk= 39037\nIGNvcnJlY3Rpbmc= 39038\nIE9ydGl6 39039\nIEJlZXQ= 39040\nIHJldm9rZQ== 39041\nIGZyZWV3YXk= 39042\nIEhpZ2dpbnM= 39043\nRmFpbA== 39044\nIEZhcm1z 39045\nIEFUUA== 39046\naG91bmQ= 39047\nIHBva2luZw== 39048\nIENvbW11bmlzdHM= 39049\nbW9uc3Rlcg== 39050\naW1lbnRhcnk= 39051\nIHVubG9ja2luZw== 39052\nIHVuZml0 39053\nd2VlZA== 39054\nZW5hcmlv 39055\nYXRpY2Fs 39056\nIEVubGlnaHRlbm1lbnQ= 39057\nIE5H 39058\nIENvbXBlbnNhdGlvbg== 39059\nZGVlbg== 39060\nIFdpZG93 39061\nIENpbmR5 39062\nIEFmdGVyd2FyZHM= 39063\nIDYwMDA= 39064\naWtoYWls 39065\nYWdpY2FsbHk= 39066\nIHJhdGlmaWVk 39067\nIGNhc3VhbHR5 39068\nSE9NRQ== 39069\ncHNleQ== 39070\nZmVl 39071\nIHNwYXJrbGluZw== 39072\nIGTDqQ== 39073\nIGNvbmNlcnRlZA== 39074\nQ2F0YWw= 39075\nIGNvbXBseWluZw== 39076\nIEFyZXM= 39077\nIERlbnQ= 39078\nU2h1dA== 39079\nIHNraW0= 39080\nYWRtaW5pc3Q= 39081\nIGhvc3RpbGl0aWVz 39082\nIEdpbnM= 39083\nIDYwOA== 39084\nIG11ZGR5 39085\nIE1jSW50 39086\nIERlY2F5 39087\nNTI1 39088\nIGNvbnNwaWN1b3Vz 39089\nIEV4cG9zdXJl 39090\nIHJlc2NpbmQ= 39091\nIHdlYXJhYmxl 39092\nIDMyOA== 39093\nb3VybWV0 39094\nYWhz 39095\nIFJvYm90cw== 39096\nIGVjbGlwcw== 39097\naW5zdGFuY2U= 39098\nIFJFUE9SVA== 39099\nIEFwcGw= 39100\nMDMw 39101\nIFNraWVz 39102\nMDEwMA== 39103\nIGZhbGxhY3k= 39104\nU29ja2V0 39105\nIFJlY2VpdmVy 39106\nIHNvbHZlcw== 39107\nIEJ1dHRlcmZseQ== 39108\nIFNob3BwaW5n 39109\nIEZJUkU= 39110\nNjU0 39111\nTWVkaWM= 39112\nIHNpbmdlcnM= 39113\nIE5lZWRsZXNz 39114\nJycnJw== 39115\naXNoZXJz 39116\nIERpdmU= 39117\nNTg4 39118\nIHNlbGVjdGl2ZWx5 39119\nIGNsdW1zeQ== 39120\nODg5 39121\nIHB1cmNoYXNlcg== 39122\nZWFybmVk 39123\nYXJkeQ== 39124\nIGJlbmVmaXRpbmc= 39125\nZW5nbGlzaA== 39126\nIHlpZWxkaW5n 39127\nIFBvdXI= 39128\nIHNwaW5hY2g= 39129\nIGRlbHZl 39130\nIENyb20= 39131\nNjEw 39132\nIGV4cG9ydGluZw== 39133\nIE1BS0U= 39134\nIDI2Mw== 39135\nIGdyb3A= 39136\nIGVudm95 39137\nIElucXVpcnk= 39138\nIEx1aWdp 39139\nZHJ5 39140\nIFR1cmluZw== 39141\nVGh1bWJuYWlsSW1hZ2U= 39142\nIFZhcmlldHk= 39143\nIGZhY2V0 39144\nIGZsdWZmeQ== 39145\nIGV4Y2VycHRz 39146\nIHNob3J0aA== 39147\nIE9sc2Vu 39148\nQ0xVRA== 39149\nIHJlbGlhbnQ= 39150\nIFVOQw== 39151\nVG91cg== 39152\nIGJhdGhpbmc= 39153\nQ29tcGFueQ== 39154\nIGdsb2JhbGl6YXRpb24= 39155\nUHJlZA== 39156\nIE1hbGZveQ== 39157\nIGhvYw== 39158\namFt 39159\nY3JhZnRlZA== 39160\nIEJvbmRz 39161\nIEtpc3Npbmdlcg== 39162\nRW5nbGFuZA== 39163\nIG9yZGVybHk= 39164\nY2F0ZW50cnk= 39165\nIDI2MQ== 39166\nIGV4Y2hhbmdpbmc= 39167\nIEludGVudA== 39168\nIEFtZW5kbWVudHM= 39169\nRE9N 39170\nIHN0b3V0 39171\nwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA= 39172\nIEFpcmJ1cw== 39173\nIDI3OA== 39174\naHlkZQ== 39175\nUG9sbA== 39176\nSXRlbVRodW1ibmFpbEltYWdl 39177\nIGxvb3Bob2xlcw== 39178\nIFBpbGxhcg== 39179\nIGV4cGxvcg== 39180\nU3RyZXRjaA== 39181\nQXBhcnQ= 39182\nIHVubWFycmllZA== 39183\nTGltaXQ= 39184\nIFRyYW5zZm9ybWVycw== 39185\nIGludGVsbGVjdHVhbGx5 39186\ndW5jdHVyZQ== 39187\nMTgwMA== 39188\nIGRhcm4= 39189\nQnJhemls 39190\nIGxlZnRvdmVy 39191\nYmVydXM= 39192\nZnJlZA== 39193\nTWluZWNyYWZ0 39194\nMzI2 39195\nIEZvcm1z 39196\nIHByb29mcw== 39197\nIERlc2lnbmVk 39198\nIGluZGV4ZXM= 39199\nIFN1cHBvc2U= 39200\nRU1T 39201\nIExvdmluZw== 39202\nIEJvbm5pZQ== 39203\naW1hdGluZw== 39204\nT1RVUw== 39205\nIGNvbmR1Y3Rvcg== 39206\nIGJlaGF2ZWQ= 39207\nIEZyZW4= 39208\nIHN5bmVyZw== 39209\nIG1pbGxlbm5pdW0= 39210\nIGNhdGVyaW5n 39211\nIExhdWRlcg== 39212\nV3I= 39213\nIFlpYW5ub3BvdWxvcw== 39214\nIEFURg== 39215\nIGVuc2xhdmVk 39216\nIGF3YWtlbmVk 39217\nRFZE 39218\nIEVESVRJT04= 39219\nIENvbmNlcnQ= 39220\nIENoYWxsZW5nZXI= 39221\nIEhha3U= 39222\ndW1lcmlj 39223\nIGRlcHJlY2F0ZWQ= 39224\nIFNIQVI= 39225\nNDEy 39226\nIGR5c3RvcA== 39227\nIHRyZW1ibGluZw== 39228\nIGRyZWFkZWQ= 39229\nIFNwYWM= 39230\ncGFkZGluZw== 39231\nUmVwbA== 39232\nIEdhcnJpc29u 39233\nTWluaQ== 39234\nIHVucGFyYWxsZWxlZA== 39235\nYW1hcg== 39236\nVVJSRU5U 39237\nd3JlY2s= 39238\nY2VydGFpbg== 39239\ndGFs 39240\nIENMUw== 39241\nYXBwaW5ncw== 39242\nIHNlbnNlZA== 39243\nIGZlbmNpbmc= 39244\nIFBhc28= 39245\nIERlc2s= 39246\nIHNjb2Zm 39247\nIGNvbnRlbXBsYXRl 39248\nIExpZ2E= 39249\nbGlxdWlk 39250\nNzU3 39251\nIGFwcHJlbnRpY2U= 39252\nIFVDSElK 39253\nNTcw 39254\nIFRob3VzYW5k 39255\nIElsbHVt 39256\nIGNoYW1waW9uZWQ= 39257\n44KM 39258\nIGVsZWN0b3Jz 39259\nIDM5OA== 39260\nIEhhbmNvY2s= 39261\ncm91bmRlZA== 39262\nIEpPSE4= 39263\nIHVuc2F0aXNm 39264\nIHF1YWxpZmllcg== 39265\nIEdhZGdldA== 39266\nRU5F 39267\nIGRlYWRsaWVzdA== 39268\nIFBsYW50cw== 39269\nIGlvbnM= 39270\nIGFjY2VudHM= 39271\nIHR3ZWFraW5n 39272\nIHNoYXZlZA== 39273\nRlJFRQ== 39274\nIENoYXNlcg== 39275\nQWdhaW5zdA== 39276\nOTYw 39277\nIG1ldGhhbXBoZXRhbWluZQ== 39278\nIG5vcm1hbGl6ZWQ= 39279\nICRc 39280\nIFByZWNpc2lvbg== 39281\nIEd1YW0= 39282\nIGNob2tlZA== 39283\nIFhJSQ== 39284\nIENhc3Rpbmc= 39285\nVG9ycmVudA== 39286\nIHNjYWxw 39287\nIEphZ3Vhcg== 39288\nd2l0 39289\nIHNlbWlj 39290\naXhpZQ== 39291\nIEdvdWxk 39292\nIGNvbmZpbmVz 39293\nTnVzcmE= 39294\nIExvbg== 39295\nIEp1Z2c= 39296\neWNsZQ== 39297\nIENvZGVj 39298\nRWd5cHQ= 39299\nIHJlc3RyYWlu 39300\nIEFsaWVucw== 39301\nIGNob2tpbmc= 39302\nIER1bms= 39303\nIEJlbGxh 39304\nYWJj 39305\nIHNsYW5n 39306\nIG5ldXJvdHJhbnM= 39307\nc2F2 39308\nIGVtcG93ZXJtZW50 39309\n4oaS 39310\nIGNsaW1iZXJz 39311\nIE1pbQ== 39312\nIEZyYQ== 39313\ncm9zc2U= 39314\nQ2FwaXRhbA== 39315\nIEN0aHVsaHU= 39316\nSW50ZXJmYWNl 39317\nIHByb2ZpY2llbnQ= 39318\nIElOVE8= 39319\nIDMxOA== 39320\ncm9udGFs 39321\nNTgw 39322\nIERlc3BhaXI= 39323\nS2Vubg== 39324\nIHNjcmltbWFnZQ== 39325\nIENvYXQ= 39326\nYXNpb25z 39327\nIHdhbGxwYXBlcg== 39328\nIEpvbA== 39329\nIHJlc3VyZ2VuY2U= 39330\nIGFudGl2 39331\nIEJhbGxz 39332\nsr4= 39333\nIGJ1ZmZlcnM= 39334\nIHN1YnN5c3RlbQ== 39335\nIFN0ZWxsYXI= 39336\nIEx1bmc= 39337\nQUlEUw== 39338\nIGVyYWRpY2F0ZQ== 39339\nIGJsYXRhbnRseQ== 39340\nIGJlaGF2ZXM= 39341\nIE51bg== 39342\nIGFudGljcw== 39343\nZXhwb3J0 39344\nREVW 39345\nd2I= 39346\nIHBocA== 39347\nIEludGVncml0eQ== 39348\nIGV4cGxvcmVy 39349\nIHJldm9sdmluZw== 39350\nYXV0aG9yZWQ= 39351\nZ2Fucw== 39352\nIGJhc2s= 39353\nIGFzeW5jaHJvbm91cw== 39354\n5Y0= 39355\nVEhJTkc= 39356\nNjk4 39357\nR2VuZQ== 39358\nIFJhY2Vy 39359\nIE5pY28= 39360\naXNzdWVk 39361\nIHNlcm1vbg== 39362\ncG9zc2libHk= 39363\nIHNpemVvZg== 39364\nIGVudHJlcHJlbmV1cmlhbA== 39365\nb3hpbg== 39366\nIE1pbmVydmE= 39367\nIHBsYXRvb24= 39368\nbm9z 39369\ncmlrcw== 39370\nQVVU 39371\nIEF2YWxhbmNoZQ== 39372\nIERlc2M= 39373\nkeWjqw== 39374\nIFBvYw== 39375\nIGNvbmZlcnJlZA== 39376\nzrs= 39377\nIHBhdGNoZWQ= 39378\nRkJJ 39379\nNjYy 39380\nIGZyYWN0dXJlcw== 39381\nIGRldGVjdHM= 39382\nIGRlZGljYXRl 39383\nIGNvbnN0aXR1ZW50 39384\nIGNvc21vcw== 39385\nV1Q= 39386\nIHN3ZWF0cw== 39387\nIHNwcnVuZw== 39388\nYmFyYQ== 39389\nc29saWQ= 39390\nIHVuc3Vz 39391\nIGJ1bGt5 39392\nIFBoaWxpcHBl 39393\nIEZlbnJpcg== 39394\nIHRoZXJhcGlzdHM= 39395\nb3JlYWw= 39396\nXl5eXg== 39397\nIHRvdGFsZWQ= 39398\nIGJvb3pl 39399\nIFJQQw== 39400\nUHJvc2VjdXRvcnM= 39401\nIGRpc2VuZw== 39402\nIFNoYXJlZA== 39403\nIG1vdG9yY3ljbGVz 39404\nIGludmVudGlvbnM= 39405\nIGxldHR1Y2U= 39406\nIE1lcmdl 39407\nIEpD 39408\nIHNwaXJpdHVhbGl0eQ== 39409\nIFdBUk5JTkc= 39410\nIHVubHVja3k= 39411\nIFRlc3M= 39412\nIHRvbmd1ZXM= 39413\nIERVSQ== 39414\nVHVtYmxy 39415\nIGxlYW5z 39416\nIGludmFkZXJz 39417\nIGNhbm9weQ== 39418\nIEh1cnJpY2FuZXM= 39419\nIEJyZXQ= 39420\nIEFQUExJQw== 39421\naWRpbmU= 39422\naWNrbGU= 39423\nUmVnYXJkaW5n 39424\nIHZlZ2dpZXM= 39425\nIGVqYWM= 39426\nanV2ZW4= 39427\nRmlzaA== 39428\nREVN 39429\nIERpbm8= 39430\nVGhyb3c= 39431\nIENoZWNraW5n 39432\nYmVhcmQ= 39433\nKCY= 39434\nIGphaWxz 39435\nIGhy 39436\ndHJhbnNmZXI= 39437\naXZhdGluZw== 39438\nIGZsZWV0cw== 39439\nIEltYWc= 39440\nIE1jRG9ubmVsbA== 39441\nIHNuaXBwZXQ= 39442\nSXNh 39443\nIENoYXR0 39444\nIFN0YWlu 39445\nIFNldEZvbnRTaXpl 39446\nIE95 39447\nIE1hdGhlbWF0aWNz 39448\nNDk0 39449\nIGVsZWN0cm9seQ== 39450\nIEdvdHQ= 39451\nIEJyYXM= 39452\nQk9PSw== 39453\nIEZpbmdlcg== 39454\nZHVtcA== 39455\nIG11dGFudHM= 39456\nIHJlbnRhbHM= 39457\nIGludGVydHc= 39458\nIGNyZWVr 39459\nYWlsYQ== 39460\nQnJvdGhlcg== 39461\nIERpc2NvcmQ= 39462\ncGVl 39463\ncmF3bGVy 39464\nIGNhcnA= 39465\nIDI3OQ== 39466\n44K344Oj 39467\ncmVsYXRpb25z 39468\nIGNvbnRyYXN0cw== 39469\nQ29sdW1u 39470\nIHJlY29ubmFpc3NhbmNl 39471\nIHVua25vdw== 39472\nIGxvb3Rpbmc= 39473\nIHJlZ3VsYXRlcw== 39474\nIG9wdGltdW0= 39475\nIENoZXJva2Vl 39476\nIEFyeQ== 39477\nTGF0ZXN0 39478\nIHJvYWRzaWRl 39479\nIGRhbmNlZA== 39480\nIFVuaWNvcm4= 39481\nQWNrbm93bGVk 39482\nIHVuY29udHJvbGw= 39483\nIE1VUw== 39484\nYXRpbw== 39485\nY2hhbmNl 39486\naGF2ZW4= 39487\nVkFMVUU= 39488\nIGZhdm91cml0ZXM= 39489\nIGNlcmVtb25pYWw= 39490\nYmluYXJ5 39491\ncGVlZA== 39492\nd29vZHM= 39493\nRU1Q 39494\nIHZhc2N1bGFy 39495\nIGNvbnRlbXBsYXRlZA== 39496\nIGJhcnJlbg== 39497\nIExJU1Q= 39498\nWWVsbG93 39499\nb3Nwb25zb3Jz 39500\nIHdoaXNreQ== 39501\nIE1hbW0= 39502\nIERlVm9z 39503\nbWluaW11bQ== 39504\nSHVuZw== 39505\nNDQy 39506\nUGlj 39507\nIFNuYXBkcmFnb24= 39508\nNzc2 39509\nIGNhcnZpbmc= 39510\nIHVuZGVjaWRlZA== 39511\nIGFkdmFudGFnZW91cw== 39512\nIHBhbG1z 39513\nIEFR 39514\nIHN0YXJjaA== 39515\nTG9vcA== 39516\nIHBhZGRsZQ== 39517\nIGZsYW1pbmc= 39518\nIEhvcml6b25z 39519\nQW5pbWF0aW9u 39520\nYm9vc3Q= 39521\nIHByb2JhYmlsaXRpZXM= 39522\nIE1pc2g= 39523\nIGV4b2R1cw== 39524\nIEVkaXRvcmlhbA== 39525\nIGZ1bmd1cw== 39526\nIGRpc3NlbnRpbmc= 39527\nIERlbGljaW91cw== 39528\ncm9ncmFt 39529\nIER5bg== 39530\nZGlzaw== 39531\ndG9t 39532\nIGZhYnJpY3M= 39533\nIENvdmU= 39534\nIEJhbnM= 39535\nIHNvZnRlbg== 39536\nIENPTlM= 39537\nIGluZWxpZ2libGU= 39538\nIGVzdGltYXRpbmc= 39539\nIExleGluZ3Rvbg== 39540\ncHJhY3RpY2U= 39541\nb2Zp 39542\nIHNoZWRkaW5n 39543\nIE5vcGU= 39544\nIGJyZWF0aGVk 39545\nIENvcmludGhpYW5z 39546\neW5l 39547\nZWtp 39548\nQnVsbA== 39549\nIGF0dGFjaGluZw== 39550\ncmVlbnNob3Rz 39551\nIGFuYWx5c2U= 39552\nIEthcHBh 39553\nIHVuc3VzdGFpbmFibGU= 39554\nIGludGVycG9s 39555\nYW5reQ== 39556\naGVtZXI= 39557\nIHByb3RhZ29uaXN0cw== 39558\nIGZvcm1hdHRlZA== 39559\nIEJyeWNl 39560\nIEFjaGlsbGVz 39561\nIEFiZWRpbg== 39562\nc2hvY2s= 39563\nIGJ1bQ== 39564\nYm9z 39565\ncXVh 39566\nIFdhcm4= 39567\ncXQ= 39568\nIERpYWJldGVz 39569\nODY0 39570\nIEludmlzaWJsZQ== 39571\nIHZhbmlzaA== 39572\nIHRyYW5zbWl0dGluZw== 39573\nIG11cmt5 39574\nIEZlaQ== 39575\nIGF3YWl0ZWQ= 39576\nIEp1cmFzc2lj 39577\ndW1taWVz 39578\nIG1lbmFjaW5n 39579\nZ2FsbA== 39580\nQ2F0aA== 39581\nQnVpbHQ= 39582\naWxkbw== 39583\nIFZvdGVz 39584\nIG9udA== 39585\nIG11bml0aW9ucw== 39586\nIEZyZWVt 39587\nw61u 39588\nIGRlY2VuY3k= 39589\nbG9wcA== 39590\naWV2ZWQ= 39591\nIEdvcmQ= 39592\nIHVudGhpbmthYmxl 39593\nIE5ld3N3ZWVr 39594\nIDMyMQ== 39595\nSGVhdA== 39596\nIHByZXNlbnRlcg== 39597\namlhbmc= 39598\nIHBsYW5r 39599\nIEF2YWxvbg== 39600\nIGJlbno= 39601\nIFJvdXQ= 39602\nIHNsYW1taW5n 39603\nIERhaQ== 39604\nb3V0ZXI= 39605\nIENvb2tpZQ== 39606\nIEFsaWNpYQ== 39607\nZ2V5 39608\nIHZhbml0eQ== 39609\nIG93bA== 39610\n4bU= 39611\ndGVzdGVk 39612\nIEF3YWtlbnM= 39613\nIGNhbnY= 39614\nIGJsaW5kbHk= 39615\nIFJpZGxleQ== 39616\nIEVtYWlscw== 39617\nUmVxdWlyZXM= 39618\nIFNlcmJpYW4= 39619\nb2dyYXBoZWQ= 39620\naWZyYW1l 39621\nZXRlcmlh 39622\nIGFsdGVybmF0aW5n 39623\ncXVpZXQ= 39624\nIHNvY2lvbG9neQ== 39625\nIFVubG9jaw== 39626\nIENvbW11bmlzbQ== 39627\nIG9wcw== 39628\nIGF0dHJpYnV0aW9u 39629\nIGFiZHVjdGlvbg== 39630\nIEFicmFt 39631\nIHNpZGVsaW5lZA== 39632\nIEJPT0s= 39633\nIHJlZmluaW5n 39634\nIEZlZWxpbmc= 39635\nIE9zbG8= 39636\nIFBydWl0dA== 39637\ncmFjaw== 39638\nYW5naWJsZQ== 39639\nIGNhdXRpb3VzbHk= 39640\nIE1BUks= 39641\nZWVkcw== 39642\nTW91c2U= 39643\nIFN0ZXBo 39644\nIFBhaXI= 39645\nU2Fi 39646\nOTk3 39647\nIEJhYWw= 39648\nQmVj 39649\nIGNvbW1h 39650\nIFBhbGw= 39651\nIEdhZWw= 39652\nIG1pc3VuZGVyc3RhbmQ= 39653\nIFBlc2g= 39654\nT3JkZXJhYmxl 39655\nIGRpc21hbA== 39656\nIFNoaW55 39657\nJSI= 39658\nIHJlYWxpc3RpY2FsbHk= 39659\nIHBhdGlv 39660\nIEd3 39661\nIFZpcnR1ZQ== 39662\nIGV4aGF1c3Rpbmc= 39663\nd2hhdGV2ZXI= 39664\nb3BoeXM= 39665\neWlw 39666\nNDE4 39667\nQWRqdXN0 39668\nIFdhaXRpbmc= 39669\nZXNzb24= 39670\nIE1hemRh 39671\nIERvemVucw== 39672\nIHN0cmVhbWxpbmVk 39673\nIGluY29tcGV0ZW5jZQ== 39674\nIE1ldGg= 39675\nIGV0aG9z 39676\nT05FUw== 39677\nIGluY2VudGl2 39678\nIGdyaXR0eQ== 39679\nIEJ1dGNoZXI= 39680\nSGVhZGVy 39681\nIGV4cG9uZW50aWFs 39682\nw58= 39683\nIGNvcnJlbGF0ZQ== 39684\nIGNvbnNlbnN1YWw= 39685\nc291bmRpbmc= 39686\nUmluZw== 39687\nT3JpZ2lu 39688\nIGNvbmNsdXNpdmU= 39689\nZmVldA== 39690\nYWNseQ== 39691\nIEZlcm5hbmRleg== 39692\nQnV5YWJsZQ== 39693\nIGR1Y2tz 39694\nYXVudGxldHM= 39695\nIGVsb25n 39696\nIDI4Ng== 39697\nIHNpbXVs 39698\nR2Fz 39699\nIEtpcnN0 39700\nIHByb3Ry 39701\nIFJvYm8= 39702\nIEFvRQ== 39703\nb3BvbA== 39704\nIHBzeWNob2xvZ2ljYWxseQ== 39705\nc3Bpbg== 39706\naWxhdGVyYWxseQ== 39707\nIENvbnJhZA== 39708\nV2F2ZQ== 39709\nNDQx 39710\nIEFkdmVydGlzZW1lbnQ= 39711\nIEhhcm1vbg== 39712\nIE9yaWVudGFs 39713\naXNTcGVjaWFs 39714\nIHByZXN1bXB0aXZl 39715\nIHdpbA== 39716\nIEtpZXI= 39717\nbmVh 39718\nIHBwbQ== 39719\nIGhhcmJvdXI= 39720\nIFdpcmVk 39721\nY29tcGFueQ== 39722\nIGNvcm9uZXI= 39723\nYXR1cmRheXM= 39724\nIFByb3Vk 39725\nIE5FWFQ= 39726\nIEZsYWtl 39727\ndmFsdWVk 39728\nY2VpdmVy 39729\nIGZyYXVnaHQ= 39730\nIGNhc2luZw== 39731\nIHJ1bmF3YXk= 39732\nIGdpbg== 39733\nIExhdXJlbnQ= 39734\nIEhhcmxlbQ== 39735\nIEN1cmlvc2l0eQ== 39736\ncXVpc2hlZA== 39737\nIG5ldXJvc2NpZW5jZQ== 39738\nIEh1bHU= 39739\nIGJvcnJvd2Vy 39740\nIHBldGl0aW9uZXI= 39741\nIENvb2xkb3du 39742\nV0FSRA== 39743\nIGludm9raW5n 39744\nY29uZmlkZW5jZQ== 39745\nRm9yd2FyZA== 39746\nIHN0cw== 39747\ncG9wdWxhdGlvbg== 39748\nRGVsaXZlcnlEYXRl 39749\nRmlsbQ== 39750\nIENvdg== 39751\ncXVpY2tTaGlw 39752\ncXVpY2tTaGlwQXZhaWxhYmxl 39753\ncHJpbWFyeQ== 39754\naXNTcGVjaWFsT3JkZXJhYmxl 39755\naW52ZW50b3J5UXVhbnRpdHk= 39756\nY2hhbm5lbEF2YWlsYWJpbGl0eQ== 39757\nQk9Y 39758\nIE11bHRpcGxheWVy 39759\nIEplbm5lcg== 39760\nNzc4 39761\nIE1k 39762\nIH4vLg== 39763\nTU4= 39764\nIGNoaWxkaXNo 39765\nIGFudGlveGlkYW50 39766\nIENocm9tZWJvb2s= 39767\nIDI3NA== 39768\nIHNjcmVlbnBsYXk= 39769\nIGFkdmVudHVyb3Vz 39770\nIFJlbGF0aW9uc2hpcA== 39771\ncmVzcG9uc2l2ZQ== 39772\nbWluZ3Rvbg== 39773\nIGNvcm5lcnN0b25l 39774\nIEZleQ== 39775\nRklS 39776\nIHJvb2tpZXM= 39777\nIEZlYXR1cmluZw== 39778\nIG9yaWdpbmF0ZQ== 39779\nIGVsZWN0cm9kZXM= 39780\nYW50ZXM= 39781\nIHNjcmlwdHVyZXM= 39782\nIGdsdWVk 39783\nIGRpc2NvbnRlbnQ= 39784\nIGFmZmxpY3RlZA== 39785\nbGF5b3V0 39786\nQnJhdmU= 39787\nIG1vc2E= 39788\nIFF1YW50aXR5 39789\nIEhpaw== 39790\nd2lubmVy 39791\nSG91cnM= 39792\nIGVudGFpbA== 39793\nIENlbGxz 39794\nb2xvZ3Vl 39795\nIHZpbA== 39796\nIHByZWFjaGVy 39797\nIGRlY29yYXRpdmU= 39798\nZGlmZmVyZW50 39799\nIHByZWp1ZGljZXM= 39800\nIFNtb2tpbmc= 39801\nIE5vdHRpbmdoYW0= 39802\nc29UeXBl 39803\nIHJoeXRobXM= 39804\nIEFscGg= 39805\nYmxhc3Q= 39806\nU3RlZWw= 39807\nIERhbmllbGxl 39808\nIHN0cmlmZQ== 39809\nIHJlbWF0Y2g= 39810\nc29EZWxpdmVyeURhdGU= 39811\nIEZvcms= 39812\ndHJpcA== 39813\nb2x1bHU= 39814\naGVzZXM= 39815\nQ0c= 39816\nIFBPTElUSUNP 39817\nb3N0YQ== 39818\nIERyaWZ0 39819\n6b6N5aU= 39820\n6b6N5aWR5aOr 39821\nIHZldHRpbmc= 39822\nIEppbnBpbmc= 39823\nIFJlY2Vzc2lvbg== 39824\nTWlub3I= 39825\nIEZyYXVk 39826\nZW5mcmFuY2g= 39827\nIGNvbnZlbmVk 39828\nIE5BQUNQ 39829\nIE1pbGxpb25z 39830\nIEZhcm1pbmc= 39831\nIFdvbw== 39832\nIEZsYXJl 39833\ncml0bw== 39834\naW1taWdyYW50 39835\nIHZhY2FuY3k= 39836\nIEhFQUQ= 39837\nIFZhag== 39838\nZWdhbA== 39839\nIFZpZ2ls 39840\nU3R1ZHk= 39841\nIHJ1aW5pbmc= 39842\nIHJhY2tz 39843\nIGhlYXRlcg== 39844\nIFJhbmRvbHBo 39845\nIEJydXNo 39846\nIFRpcg== 39847\n2Kg= 39848\nIGNvdg== 39849\nJV0= 39850\nIHJlY291bnRz 39851\nIE9QVA== 39852\nIE1lbHQ= 39853\nIHRydWNl 39854\nIGNhc2lub3M= 39855\nIGNydXNhZGU= 39856\nIGNhcm5hZ2U= 39857\nIHN0cmlwZQ== 39858\nIEt5bA== 39859\nVGV4dHVyZXM= 39860\nIDY5OA== 39861\nIHByb2NsYW1hdGlvbg== 39862\nIGdvb2RpZXM= 39863\nIC4uLi4uLi4uLi4= 39864\ncHJvY2xhaW1lZA== 39865\nUG9saXQ= 39866\nIHRvcGljYWw= 39867\nIHNwZWNpYWxpemU= 39868\nIEFtaW4= 39869\nZ20= 39870\nIGFuY2hvcmVk 39871\nIGJlYXJpbmdz 39872\nc2FtcGxl 39873\nIEhpZ2hsYW5k 39874\nIEF1dGlzbQ== 39875\nIG1lcmNlbmFyeQ== 39876\nIGludGVydmlld2Vy 39877\nTEVS 39878\nIFNvbWVycw== 39879\nIGVtYnJ5bw== 39880\nIEFzc3k= 39881\nIDI4MQ== 39882\nIEVkaXRpbmc= 39883\nIENob3Nlbg== 39884\nNjYw 39885\nIHBjaQ== 39886\nIFRodW5kZXJib2x0 39887\nQklMTA== 39888\nIGNodWNrbGVk 39889\nanJpd2Fs 39890\naG9m 39891\nIGVhcnRobHk= 39892\nKCl7 39893\naW5kZXBlbmRlbmNl 39894\nIGRpc3BlcnM= 39895\nIFZlbmRvcg== 39896\nIEdhcmV0aA== 39897\nIHBhbHM= 39898\nUGVubg== 39899\nIFN1Ym1pdA== 39900\naWN1bQ== 39901\nVGh1 39902\nIGNsYW5kZXN0aW5l 39903\nIGNhbm5pYmFs 39904\nIENsZXJr 39905\nRVN0cmVhbQ== 39906\nZ2FsaXRhcmlhbg== 39907\n4pml 39908\nZ2V3 39909\nIGhvcnJlbmQ= 39910\nIExvdg== 39911\nIFJlYWN0aW9u 39912\nb2NyaW4= 39913\nQ2xhc3NpYw== 39914\nIGVjaG9pbmc= 39915\nIGRpc2Nsb3Npbmc= 39916\nIEluc2lnaHQ= 39917\nb2d1bg== 39918\nIEluY2Fybg== 39919\ndXBsb2Fkcw== 39920\ncHBlcmM= 39921\nZ3V5ZW4= 39922\nIDE5MDE= 39923\nIEJhcnM= 39924\nNjg3 39925\nIGJyaWJlcw== 39926\nIEZyZXNubw== 39927\ndXJhdA== 39928\nIFJlZXNl 39929\nIGludHJ1c2l2ZQ== 39930\nIGdyaXBwaW5n 39931\nIEJsdWVwcmludA== 39932\nIFJhc20= 39933\ndW5pYQ== 39934\nbWFuYWdlZA== 39935\nIEhlYmRv 39936\nIDM0NQ== 39937\nIGRlY29kaW5n 39938\nIHBvZXRz 39939\nIGphd3M= 39940\nIEZJR0hU 39941\nYW1lbGVzcw== 39942\nIE1lYWRvd3M= 39943\nIEhhcmJhdWdo 39944\nSW50ZXJ2aWV3 39945\nIEhvc3A= 39946\nIEJSQQ== 39947\nIGRlbGV0aW9u 39948\nbW9i 39949\nV2Fsa2Vy 39950\nIE1vb25saWdodA== 39951\nIEplZA== 39952\nIFNvcGhpYQ== 39953\nIHVzdXI= 39954\nIGZvcnR1bmF0ZWx5 39955\nIFB1dHRpbmc= 39956\nIEZvbGQ= 39957\nIHNhbml0YXRpb24= 39958\nIHBhcnRpc2Fucw== 39959\nSVNPTg== 39960\nQm93 39961\nIENPTkM= 39962\nIFJlZHVjZWQ= 39963\nIFN1dHRvbg== 39964\nIHRvdWNoc2NyZWVu 39965\nIGVtYnJ5b3M= 39966\n4oCi4oCi4oCi4oCi 39967\nIEtydWc= 39968\nY29tYmF0 39969\nIFBldHJvbGV1bQ== 39970\nIGFtZA== 39971\nIENvc21vcw== 39972\nIHByZXNjcmliaW5n 39973\nIGNvbmZvcm1pdHk= 39974\nb3Vyc2Vz 39975\nIHBsZW50aWZ1bA== 39976\nIGRpc2lsbHVzaW9u 39977\nIEVjb2xvZ3k= 39978\naXR0YWw= 39979\nIGZhbmM= 39980\nIGFzc2Fzc2luYXRlZA== 39981\ncmVnbmFuY3k= 39982\nIHBlcmVubmlhbA== 39983\nIEJ1bGxldHM= 39984\nIHN0YWxl 39985\nIGNhY2hlZA== 39986\nIEp1ZGl0aA== 39987\nIERpc2Vhc2Vz 39988\nQWxsZW4= 39989\nIGxhcw== 39990\nIHNoYXJkcw== 39991\nIFN1YXJleg== 39992\nIEZyaWVuZHNoaXA= 39993\naW50ZXJmYWNl 39994\nIFN1cHBvcnRlcnM= 39995\nYWRkb25z 39996\nNDYy 39997\nIEltcmFu 39998\nIFdpbQ== 39999\nIG5ld2ZvdW5k 40000\nIE1i 40001\nQW5pbWFs 40002\nIGRhcmxpbmc= 40003\nYW5kZQ== 40004\nIHJoeQ== 40005\nIFR3aXN0ZWQ= 40006\ncG9zYWw= 40007\neW5za2k= 40008\nVmFyaW91cw== 40009\n15w= 40010\nIEtpdw== 40011\ndXlvbWk= 40012\nIHdlbGxiZWluZw== 40013\nIExhdQ== 40014\nYW5vcw== 40015\nIHVubWlzdA== 40016\nIG1hY09T 40017\nIHJlc3Ryb29t 40018\nIE9saXY= 40019\nIEFpcndheXM= 40020\nIHRpbWV0YWJsZQ== 40021\nOTgw 40022\nIHJhZGlvcw== 40023\ndm95 40024\naWFzY28= 40025\nIGNsb3VkeQ== 40026\nIERyYXdpbmc= 40027\nQW55dGhpbmc= 40028\nU3lyaWE= 40029\nIEhlcnQ= 40030\nc3Rha2luZw== 40031\nIHVuY2hlY2tlZA== 40032\nIGJyYXplbg== 40033\nIE5SUw== 40034\nNjk3 40035\nb25vbWlj 40036\nZXN0YWJsaXNo 40037\nIGxlbmc= 40038\nIGRpYWdvbmFs 40039\nIEZpb3I= 40040\nTGFpcg== 40041\nIFN0YXJk 40042\nIGRlZmljaWVudA== 40043\nam9pbmluZw== 40044\nYmVhbQ== 40045\nIG9tbmlw 40046\nIGJsZW5kZXI= 40047\nIHN1bnJpc2U= 40048\nTW9vcmU= 40049\nIEZhdWx0 40050\nIENvc3R1bWU= 40051\nIE11Yg== 40052\nRmxhZ3M= 40053\nYW5zZQ== 40054\nIHBheW91dA== 40055\nIEdvdmVybm9ycw== 40056\nIERpbGxvbg== 40057\nIEJhbmFuYQ== 40058\nTmFy 40059\nIHRyYWlsZWQ= 40060\nIGltcGVyaWFsaXN0 40061\ndW1hbm4= 40062\nYXRzdWtp 40063\nNDM1 40064\nIFJvYWRz 40065\nIHNsdXI= 40066\nIElkZWFsbHk= 40067\nIHRyZW5jaGVz 40068\nQ3RybA== 40069\nIG1pcnJvcmVk 40070\nIFplbA== 40071\nIENyZXN0 40072\nQ29tcGF0 40073\nIFJvbGxz 40074\nc2NyaWI= 40075\nIFRyYWlscw== 40076\nb21ldGVycw== 40077\nd2ludGVy 40078\nIGltbW9ydGFsaXR5 40079\naWxhdGVk 40080\nIGNvbnRyYWRpY3Rz 40081\ndW5pdmVyc2Fs 40082\naWxsaW9ucw== 40083\nIE1hbWE= 40084\nb3B0aW0= 40085\nQVRVUkU= 40086\nIGdlbw== 40087\nZXR0ZXI= 40088\nIENhcmxv 40089\nNDI0 40090\nIGNhbm9uaWNhbA== 40091\nIFN0cm9uZ2hvbGQ= 40092\nbmVhcg== 40093\nIHBlcmZ1bWU= 40094\nIG9yY2hlc3RyYQ== 40095\nb2RpYWM= 40096\nIHVwaGU= 40097\nIHJlaWduaW5n 40098\ndmVyc2l2ZQ== 40099\nIGNhdWN1c2Vz 40100\nIERFTQ== 40101\nIGluc3VsdGVk 40102\nIC0tLS0tLQ== 40103\nIENydXNo 40104\nIHJvb3Rpbmc= 40105\nIFdyYWl0aA== 40106\nIHdob3Jl 40107\nIHRvZnU= 40108\nQ21k 40109\nIEJyZWU= 40110\nICRf 40111\nIHJpdmU= 40112\nIEFkdmVydGlzaW5n 40113\nIHdhdHQ= 40114\nIEhP 40115\nIHBlcnN1YXNpdmU= 40116\nIFBhcmFtZXRlcnM= 40117\nIG9ic2VydmF0aW9uYWw= 40118\nIE5DVA== 40119\nIE1vag== 40120\nIFNhbG9u 40121\nIHRydW5j 40122\nIGV4cXVpc2l0ZQ== 40123\nIE1hcmE= 40124\nIHBvb3A= 40125\nIEFOTg== 40126\nRXhj 40127\nIFdvbmRlcmZ1bA== 40128\nIFRhY28= 40129\nIGhvbWVvd25lcg== 40130\nIFNtaXRoc29uaWFu 40131\nb3Jwb3JhdGVk 40132\nbW1tbQ== 40133\nIGxvYWY= 40134\nIFlhbWF0bw== 40135\nIEluZG8= 40136\nIGNsaW5naW5n 40137\nw6Fz 40138\nIGltbXV0YWJsZQ== 40139\naHVi 40140\nT3Jhbmdl 40141\nIGZpbmdlcnRpcHM= 40142\nIFdvb2Rlbg== 40143\nIEtpZGQ= 40144\nIEpQTQ== 40145\nIERhbW4= 40146\nQ293 40147\nY29kZXM= 40148\nNDgy 40149\nIGluaXRpYXRpbmc= 40150\nIEVsaw== 40151\nIEN1dHRpbmc= 40152\nIGFic2VudGVl 40153\nIFZhbmNl 40154\nIExpbGl0aA== 40155\nR1VJ 40156\nIG9ic2N1cmVk 40157\nIGR3YXJ2ZXM= 40158\nIENob3A= 40159\nIEJva28= 40160\nVmFsdWVz 40161\nIG11bHRpbWVkaWE= 40162\nIGJyZXdlZA== 40163\nUmVndWxhcg== 40164\nQ1JJUFRJT04= 40165\nIE1vcnRhbA== 40166\nIGFwZXg= 40167\nIHRyYXZlbGVy 40168\nIGJvaWxz 40169\nIHNwcmF5aW5n 40170\nUmVwcmVzZW50 40171\nIFN0YXJzaGlw 40172\nNDI4 40173\nIGRpc2FwcHJvdmFs 40174\nIHNoYWRvd3k= 40175\nIGxhbWVudGVk 40176\nIFJlcGxhY2U= 40177\nIEZyYW7Dpw== 40178\nNjc3 40179\nZG9y 40180\nIHVuc3RvcHBhYmxl 40181\nIGNvaG9ydHM= 40182\nZ3lu 40183\nIENsYXNzaWNz 40184\nIEFtcGg= 40185\nIHNsdWdnaXNo 40186\nIEFkZGljdGlvbg== 40187\nIFBhZHJlcw== 40188\nIGluc2NyaXB0aW9u 40189\nIGluaHVtYW4= 40190\nbWludXM= 40191\nIEplcmVtaWFo 40192\nYXRhcnM= 40193\nVGVycm9y 40194\nIFRvcw== 40195\nIFNoYXJtYQ== 40196\nYXN0YQ== 40197\nY2F0Y2g= 40198\nIHBsdW1iaW5n 40199\nIFRpbWJlcnM= 40200\nU2hhcg== 40201\nSGFs 40202\nIE9zYw== 40203\nIGNvdXBsaW5n 40204\naHVtYW5z 40205\nIHNwb25nZQ== 40206\nIGlkb2xz 40207\nIFNwYQ== 40208\nIEFkdm9jYXRl 40209\nIEJlYXRz 40210\nbHVh 40211\nIHRpY2tpbmc= 40212\nIGxvYWRlcg== 40213\nIEdyb24= 40214\nODEw 40215\nIHN0aW11bGF0ZWQ= 40216\nIHNpZGViYXI= 40217\nIE1hbnVmYWN0dXJlcg== 40218\nb3JlQW5k 40219\nMTk3Mw== 40220\nIHByYWlzZXM= 40221\nIEZsb3Jlcw== 40222\nZGlzYWJsZQ== 40223\nIEVsZWN0cmljYWw= 40224\ncmFpc2U= 40225\nRXRo 40226\nIG1pZ3JhdGVk 40227\nIGxlY3R1cmVy 40228\nS2lkcw== 40229\nIENhdmVybg== 40230\nIGtldHRsZQ== 40231\nIGdseWM= 40232\nIE1hbmRlbGE= 40233\nIEZ1bGx5 40234\n5aer 40235\nRklORVNU 40236\nIHNxdWVlemluZw== 40237\nIFJ5ZGVy 40238\nYW1wb28= 40239\nb3JlQW5kT25saW5l 40240\nSW5zdG9yZUFuZE9ubGluZQ== 40241\nQnV5YWJsZUluc3RvcmVBbmRPbmxpbmU= 40242\nIGNvbW1lbW9yYXRl 40243\nIFJhbXBhZ2U= 40244\nQXVzdGlu 40245\nIFNocm91ZA== 40246\nIFJ1aW5z 40247\nOTE1 40248\nIEtI 40249\nIHdhdGVyZnJvbnQ= 40250\nIEVTQw== 40251\nYmFieQ== 40252\nIENvdXQ= 40253\nIEVtYmxlbQ== 40254\nIGVxdWl2YWxlbnRz 40255\nNDky 40256\nVW5pcXVl 40257\nIE5pZXR6c2NoZQ== 40258\nYnJvd3Nlcg== 40259\nIGltaXRhdGlvbg== 40260\nIFdlcmV3b2xm 40261\nIEtpcmlu 40262\nYWNhcw== 40263\nJywi 40264\nIMO+ 40265\nUmV2aWV3ZWQ= 40266\nIGN1bnQ= 40267\nIHZvaWM= 40268\nIExlbm92bw== 40269\nIGJvbmRlZA== 40270\nNDgx 40271\nIGluaGliaXRvcnM= 40272\nIGVuZGVhdm9ycw== 40273\nIEhhdmFuYQ== 40274\nIFN0b3V0 40275\nIEpvbGx5 40276\nQWN0b3I= 40277\nKi8o 40278\nIG9jY3VycmVuY2Vz 40279\nIFRlbnM= 40280\nSW5jcmVhc2Vk 40281\nIEFDVElPTg== 40282\nIOOAjA== 40283\nIFJhbmtpbmdz 40284\nIEJyZWF0 40285\nIDMwOQ== 40286\nRG91 40287\nIGltcGFjdGluZw== 40288\nIER1Y2hlc3M= 40289\ncHJlZml4 40290\nUUI= 40291\nIHN1bW1vbmluZw== 40292\nIGJlc3Rvd2Vk 40293\nIEtlcGxlcg== 40294\nIFBPV0VS 40295\nY3ViZQ== 40296\nIEtpdHM= 40297\nIEdyaXA= 40298\nIG9waXVt 40299\nIHJlcHV0YWJsZQ== 40300\ndG9j 40301\naWNoYWVs 40302\nIFJpcHBsZQ== 40303\nIGNhZsOp 40304\nIFpvb20= 40305\nIEJ1cm1h 40306\nIHdhaXZl 40307\nIHN0YWxscw== 40308\nIGRlbWVhbm9y 40309\naW5jZXJpdHk= 40310\nIGZsdW9yaWRl 40311\nIFNIT1VMRA== 40312\nUGFyaXM= 40313\nIGxvbmdpbmc= 40314\nIHBsYXQ= 40315\nIGdyb3NzbHk= 40316\nIGJ1bGxz 40317\nIHNob3djYXNpbmc= 40318\nZXhwZWN0ZWQ= 40319\nIEdhZGRhZmk= 40320\nZW5naW5lZXJpbmc= 40321\nUmVwZWF0 40322\nIEt1dA== 40323\nIGNvbmNlaXZhYmxl 40324\nIHRyaW1tZWQ= 40325\nb3Njb3Bl 40326\nIENhbmRpZGF0ZQ== 40327\nIFRlYXJz 40328\ncm9sb2c= 40329\nTGV3aXM= 40330\nU1VQ 40331\nIHJvYWRtYXA= 40332\nIHNhbGl2YQ== 40333\nIHRydW1wZXQ= 40334\nSmltbXk= 40335\nIG1pcmFjdWxvdXM= 40336\nIGNvbG9uaXphdGlvbg== 40337\nIGFtcHV0 40338\nIEdOT01F 40339\nYXRlY2g= 40340\nRGlmZmVyZW50 40341\nIEVMRQ== 40342\nIEdvdmVybm1lbnRz 40343\nIEFoZWFk 40344\n44WL44WL 40345\nd29yZHByZXNz 40346\nTElC 40347\nIEluY2x1ZGU= 40348\nIERvcm90aHk= 40349\nMDQ1 40350\nIENvbG9tYmlhbg== 40351\nIGxlYXNlZA== 40352\nODg0 40353\nIGRlZ3JhZGluZw== 40354\nIERhaXN5 40355\naWF0aW9ucw== 40356\nIGJhcHRpemVk 40357\nIHN1cm5hbWU= 40358\nY294 40359\nIGJsaW5rZWQ= 40360\n44Oi 40361\nIHBvbGxlbg== 40362\nIGRlcm1hdA== 40363\nIHJlZ2V4 40364\nIE5pY2hvbHNvbg== 40365\nIEVhdGVy 40366\n55w= 40367\ncmFkb3I= 40368\nIG5hcnJvd2Vy 40369\nIGh1cnJpY2FuZXM= 40370\nIGhhbGx1Y2luYXRpb25z 40371\ncmlkZGVu 40372\nSVNTSU9O 40373\nIEZpcmVmbHk= 40374\nIGF0dGFpbm1lbnQ= 40375\nIG5vbWluYXRl 40376\nIGF2b2NhZG8= 40377\nIE1lcmVkaXRo 40378\nIHRz 40379\nIHJldmVyZW5jZQ== 40380\nIGV1cGg= 40381\nIGNyYXRlcw== 40382\nIFRFWFQ= 40383\nIDQ0Mw== 40384\nIDMxOQ== 40385\nSlNPTg== 40386\naXF1ZXR0ZQ== 40387\nIHNob3J0c3RvcA== 40388\naWNrZXk= 40389\nIHByb3BlbGxlZA== 40390\nIGFwaQ== 40391\nIFRoaWV2ZXM= 40392\nNzc5 40393\nIG92ZXJzYXc= 40394\nIGNvbGk= 40395\nIE5pY29sYQ== 40396\nIG92ZXJjbA== 40397\naWthd2E= 40398\nIEN5cg== 40399\nIDM4NA== 40400\nNzg5 40401\nIEFsbG93cw== 40402\nMTAyNw== 40403\nRGV0cm9pdA== 40404\nVFJZ 40405\nc2V0dXA= 40406\nIFNvY2lhbGlzbQ== 40407\nU292aWV0 40408\nc3VzcA== 40409\nIEFQUg== 40410\nIFNodXRkb3du 40411\nIGFsdW1pbml1bQ== 40412\nemJlaw== 40413\nIExvdmVy 40414\nR0dHR0dHR0c= 40415\nIGRlbW9jcmFjaWVz 40416\nIDE5MDg= 40417\nIE1lcnJpbGw= 40418\nIEZyYW5jb2lz 40419\nZ2RhbGE= 40420\nIHRyYWZmaWNrZXJz 40421\nIFRpbA== 40422\nIEdvYXQ= 40423\nIHNwZWQ= 40424\nIFJlc2Vydg== 40425\nIHByb2Q= 40426\nNTUy 40427\nIGNhYw== 40428\nIFVuaXY= 40429\nIFNjaHdl 40430\nIHN3aXJsaW5n 40431\nIFdpbGRlcm5lc3M= 40432\nIEVnZ3M= 40433\nIHNhZGRlbmVk 40434\nIGFyY2hhaWM= 40435\nSHlk 40436\nIGV4Y2Vzc2l2ZWx5 40437\nQlJF 40438\nIGFlcm9zcGFjZQ== 40439\nIFZvaWNlcw== 40440\nQ3JhaWc= 40441\nIGlnbml0ZWQ= 40442\nSW5pdGlhbGx5 40443\nIE1jQQ== 40444\nIGhhbmRzZXQ= 40445\nIHJlZm9ybWluZw== 40446\nIGZydXN0cmF0aW9ucw== 40447\nIERlYWRwb29s 40448\nIEJlbGljaGljaw== 40449\ncmFjdG9y 40450\nIFJhZ25hcm9r 40451\nIERydXBhbA== 40452\nIEFwcHJveGltYXRlbHk= 40453\nMTkyMA== 40454\nIEh1YmJsZQ== 40455\nYXJtb3I= 40456\nIFNhcmFz 40457\nIEpvbmFz 40458\nIG5vc3RhbGdpYw== 40459\nIGZlYXNpYmlsaXR5 40460\nU2FoYXJhbg== 40461\nIG9yYml0aW5n 40462\nIDk3MA== 40463\nUnU= 40464\nIHNoaW4= 40465\nIEludmVzdGlnYXRvcnM= 40466\nIGluY29uc2lzdGVuY2llcw== 40467\nIFBBTg== 40468\nQkc= 40469\nIGdyYXppbmc= 40470\nIGRldGVjdG9ycw== 40471\nIFN0YXJ0dXA= 40472\nIEZ1bm55 40473\nIE5hb21p 40474\nQ29uc2lkZXJpbmc= 40475\nIGhvZw== 40476\ndXRm 40477\nY2VtaWM= 40478\nIGZvcnRpZmllZA== 40479\nIEZ1bmN0aW9ucw== 40480\nIGNvZGVj 40481\nbnV0cml0aW9u 40482\nSGF0 40483\nIiE= 40484\nbWljcm9zb2Z0 40485\nNTU4 40486\nIFRoaW4= 40487\nIEFDRQ== 40488\nQWxpYXM= 40489\nIE9QUw== 40490\ncGFwZXJz 40491\nUEs= 40492\n44CO 40493\nIGltcHJvYmFibGU= 40494\nTm9ydGhlcm4= 40495\nZXF1YWw= 40496\nIGxvb2tvdXQ= 40497\nIHR5cmVz 40498\nIE1vZGlmaWVk 40499\nIEtvcA== 40500\nQWJzb2x1dGVseQ== 40501\nIGJ1aWxkdXA= 40502\nc2lsdmVy 40503\nIGF1ZGk= 40504\nIGdyb3Rlc3F1ZQ== 40505\nIFNhYmVy 40506\nIFByZXNieXRlcg== 40507\nT05Z 40508\nIGdsYWNpZXJz 40509\nIFNob2Fscw== 40510\nIEthc3M= 40511\nIEhSQw== 40512\nIE5pY29s 40513\nIEx1bmNo 40514\nIEZvc3M= 40515\n4paS 40516\nQURSQQ== 40517\nIE9uZVBsdXM= 40518\nb2luZw== 40519\nZ3JvdW5kcw== 40520\nIGluY2lkZW50YWw= 40521\nIGRhdGFzZXRz 40522\nNjg5 40523\nIENsYXJrc29u 40524\nIGFzc2VtYmxpbmc= 40525\nIENvcnJlY3Rpb25z 40526\nIGRyaW5rZXJz 40527\nIHF1YWxpZmllcnM= 40528\nIGxlYXNo 40529\nIHVuZm91bmRlZA== 40530\nIEh1bmRyZWQ= 40531\nIGtpY2tvZmY= 40532\nVGk= 40533\nIHJlY29uY2ls 40534\nIEdyYW50cw== 40535\nIENvbXBsaWFuY2U= 40536\nIERleHRlcml0eQ== 40537\nIDE5MDY= 40538\nd2Fybg== 40539\nRGFsbGFz 40540\nTWF4aW11bQ== 40541\nbmFyZA== 40542\nYXZpYQ== 40543\nYmVhdXQ= 40544\nZW5zaXRpdml0eQ== 40545\ndHJhY2U= 40546\nIHBpb25lZXJz 40547\nIEZyYWN0 40548\n44CP 40549\nIHByZWNlcHQ= 40550\nIGdsb3NzeQ== 40551\nIElFRUU= 40552\nQWNyb3Nz 40553\nIDY4MA== 40554\nU2xlZXA= 40555\nY2hlb24= 40556\nIHNhdGlyaWNhbA== 40557\nIE1pbm90YXVy 40558\nIENsYXVkZQ== 40559\nIHLDqQ== 40560\nYXBlZ28= 40561\nIGNhcnJvdA== 40562\nIFNlbWlu 40563\naW5vYQ== 40564\nIHpv 40565\nSW5kZXBlbmRlbnQ= 40566\nIGRpYWdub3Nlcw== 40567\nIEN1ZQ== 40568\nTUFS 40569\nIHJlbmRpdGlvbg== 40570\nIEtpaw== 40571\nIHBhdGhvbG9neQ== 40572\nIHNlbGVjdHM= 40573\nTGlua2VkSW4= 40574\nIGFzc2F5 40575\nIERyZXM= 40576\nIHRleHR1YWw= 40577\ncG9zdGVk 40578\nSVRBTA== 40579\nIE1hdWw= 40580\nTmVhbA== 40581\nIGludGVyY29ubmVjdGVk 40582\nIGVycmF0aWM= 40583\nIFZpcnVz 40584\nIDUzMA== 40585\nIGVudmlyb25tZW50YWxpc3Rz 40586\nIFBoZWxwcw== 40587\nIGVuZ2FnZW1lbnRz 40588\nIElOU1Q= 40589\nIGVjb25vbWljYWw= 40590\nbm94aW91cw== 40591\nIGdlYXJpbmc= 40592\naXp6eQ== 40593\nIGZhdm9yYWJseQ== 40594\nIE1jR2lsbA== 40595\nVGVybQ== 40596\nIGhhbmdlZA== 40597\nIGJhbGxwYXJr 40598\nIFJleWVz 40599\nIGJld2FyZQ== 40600\nIFBzYWw= 40601\nIE1hc3NhY3Jl 40602\ncWk= 40603\nIGluYWNjZXNzaWJsZQ== 40604\nYWNseXNt 40605\nIGZyYXk= 40606\naWxsYWM= 40607\nIGJpdHRlcmx5 40608\nIENlcnRpZmljYXRpb24= 40609\nTWljaGlnYW4= 40610\nIGlycmVzcGVjdGl2ZQ== 40611\nYWxvcmU= 40612\nRW1wdHk= 40613\nIGVuZG9yc2VtZW50cw== 40614\nIHVuZGV0 40615\nZmc= 40616\nZXF1aXBwZWQ= 40617\nIG1lcmNpbGVzcw== 40618\nIEN1c3Q= 40619\nIGltbWF0dXJl 40620\nIHZvdWNoZXI= 40621\nIEJsYWNrd2VsbA== 40622\n0Y8= 40623\naGF3aw== 40624\nZGlzY2lwbGluYXJ5 40625\naWxlZQ== 40626\nIE1ha290bw== 40627\nIER1ZGU= 40628\n44OH44Kj 40629\nWWVhcnM= 40630\nIGludmVy 40631\nIHNoYW1hbg== 40632\nIFlvbmc= 40633\naXBlbA== 40634\nZWxsZW4= 40635\nIENhdGh5 40636\nYnJpZHM= 40637\nIHNhcmM= 40638\nNjUx 40639\nTmVhcg== 40640\nIGdyb3VuZHdvcms= 40641\nIGFtYXo= 40642\nIDQxNQ== 40643\nIEh1bnRpbmd0b24= 40644\naGV3cw== 40645\nIEJ1bmc= 40646\nIGFyYml0cmFyaWx5 40647\nIFdpdA== 40648\nIEFsYmVydG8= 40649\nIGRpc3F1YWxpZmllZA== 40650\nYmVzdG9z 40651\nNDYx 40652\nIHBj 40653\nIDI4NA== 40654\ncm9iYXQ= 40655\nUm9iaW4= 40656\nIGh1Z3M= 40657\nIFRyYW5zaXRpb24= 40658\nIE9jY2FzaW9uYWxseQ== 40659\nIDMyNg== 40660\nIFdoaWxzdA== 40661\nIExleQ== 40662\nIHNwYWNlc2hpcA== 40663\nY3N2 40664\nIHVuc3VjY2Vzc2Z1bGx5 40665\nIEF1 40666\nbGVjaw== 40667\nIFdpbmdlZA== 40668\nIEdyaXp6bGllcw== 40669\nLu+/vQ== 40670\nIG5lYXJlcg== 40671\nIFNvcmNlcmVzcw== 40672\nIEluZGlnbw== 40673\nRWxzZQ== 40674\nODQw 40675\nbGV0ZXM= 40676\nQ29hY2g= 40677\nIHVwYnJpbmdpbmc= 40678\nIEtlcw== 40679\nIHNlcGFyYXRpc3Q= 40680\nIHJhY2lzdHM= 40681\nIGNoYWluZWQ= 40682\nIGFic3RpbmVuY2U= 40683\nbGVhcm5pbmc= 40684\nIHJlaW5zdGF0ZWQ= 40685\nIHN5bW1ldHJ5 40686\nIHJlbWluZGVycw== 40687\nIENoZXZ5 40688\nIG1vbnQ= 40689\nIGV4ZW1wbGFyeQ== 40690\nIFRPUg== 40691\nWlg= 40692\nIHF1YWxpdGF0aXZl 40693\nIFN0YW1w 40694\nIFNhdmFubmFo 40695\nIFJvc3Np 40696\nIHBhZWQ= 40697\nIGRpc3BlbnNhcmllcw== 40698\nIFdhbGxz 40699\nIENocm9uaWM= 40700\nIGNvbXBsaW1lbnRhcnk= 40701\nIEJlaXJ1dA== 40702\nICstLS0= 40703\naWdzbGlzdA== 40704\nIGNyeXB0b2dyYXBoaWM= 40705\nbWFzdGVycw== 40706\nIENhcGl0YWxz 40707\nIG1heGltYWw= 40708\nIGVudHJvcHk= 40709\nUG9pbnRz 40710\nIGNvbWJhdGFudHM= 40711\nbGlw 40712\nIEdsb2I= 40713\nIEJNQw== 40714\ncGhhc2U= 40715\ndGhhbms= 40716\nSFRUUA== 40717\nIGNvbW11dGVy 40718\nIFwoXA== 40719\nLi4v 40720\nIFJlZ2VuZXI= 40721\nIERPSQ== 40722\nIEFjdGl2aXNpb24= 40723\nIHNsaXQ= 40724\nb3NhbA== 40725\nUkVN 40726\nIGNoYW50cw== 40727\nWXU= 40728\nS2V5cw== 40729\nQnJleGl0 40730\nIEZvcmNlZA== 40731\nQXJpem9uYQ== 40732\nIHNxdWFkcm9u 40733\nSVNP 40734\nIE1hbG9uZQ== 40735\nIDMzOA== 40736\nIGNvbnRyYXN0aW5n 40737\nIHRpZGFs 40738\nIGxpYmVs 40739\nIGltcGxhbnRlZA== 40740\nIHVwcm9hcg== 40741\nIENhdGVy 40742\nIHByb3Bvc2l0aW9ucw== 40743\nTWFuY2hlc3Rlcg== 40744\nIEV1cm9z 40745\naXRhbWlu 40746\nR2ls 40747\nIEVsdmVu 40748\nIFNlZWs= 40749\nIEJhaQ== 40750\nIHJlZGV2ZWxvcG1lbnQ= 40751\nIFRvd25z 40752\nIEx1Yg== 40753\nISIs 40754\nYWxvbg== 40755\nS3Jpc3Q= 40756\nIG1lYXN1cmFibGU= 40757\nIGltYWdpbmFibGU= 40758\nIGFwb3N0bGVz 40759\nWU4= 40760\nNzYw 40761\nIHN0ZXJvaWQ= 40762\nIHNwZWNpZmljaXR5 40763\nIExvY2F0ZWQ= 40764\nIEJlY2tlcg== 40765\nIEVkdQ== 40766\nIERpZXRhcnk= 40767\ndXRzY2g= 40768\nIE1hcmlseW4= 40769\nIGJsaXN0ZXI= 40770\nIE1FUA== 40771\nIEtveg== 40772\nIENNUw== 40773\neWFob28= 40774\nIENhcm5leQ== 40775\nIGJvYXN0aW5n 40776\nIENhbGVi 40777\nQnl0ZQ== 40778\ncmVhZHM= 40779\nYWRlbg== 40780\nUHJvYmxlbQ== 40781\nIFdvb2R3YXJk 40782\nU3dl 40783\nU3Vw 40784\nIEtHQg== 40785\nU2V0dXA= 40786\nIHRhY2l0 40787\nIHJldHJpYnV0aW9u 40788\nIGR1ZXM= 40789\nIE3DvA== 40790\nLj8= 40791\n5Lit 40792\ncG90cw== 40793\nIGNhbWVv 40794\nIFBBTA== 40795\nZWR1Y2F0aW9u 40796\nQW15 40797\nbGlrZWx5 40798\nZ2xpbmc= 40799\nIGNvbnN0aXR1dGlvbmFsbHk= 40800\nIEhhbW0= 40801\nIFNwZWFr 40802\nIHdpZGdldHM= 40803\nYnJhdGU= 40804\nIGNyYXBweQ== 40805\nIEl0ZXI= 40806\nIGFudGljaXBhdGluZw== 40807\nIEJvdXQ= 40808\nUGl4ZWw= 40809\nIFllcA== 40810\nIExhdXJpZQ== 40811\nIGh1dA== 40812\nIGJ1bGxldGlu 40813\nIFNhbHZhdGlvbg== 40814\nIGNoYXRz 40815\nZWFyYWJsZQ== 40816\nSG9uZXN0bHk= 40817\nQUxUSA== 40818\nb25zZXF1 40819\nY3VsdA== 40820\naXNjb3Zlcnk= 40821\nb3Z5Y2g= 40822\nIHNlbHZlcw== 40823\nIFNhdG9zaGk= 40824\nU291bmRz 40825\nIGNvbnZlcmdlbmNl 40826\nIFJvc2VuYmVyZw== 40827\nMTk3NA== 40828\nIG5hc2Fs 40829\nIGZ1bGxlc3Q= 40830\nIGZlcm9jaW91cw== 40831\neHVz 40832\naXN0ZQ== 40833\nQU1T 40834\nIGxvYmJpZWQ= 40835\nIHNvb3RoaW5n 40836\nIEd1bm4= 40837\ndG9kYXk= 40838\nMDI0 40839\nIGluc3BpcmF0aW9uYWw= 40840\nIE5CTg== 40841\ncGI= 40842\nZ2V3YXRlcg== 40843\nb3JhaA== 40844\nYWxsb3dlZA== 40845\nIENvbGlzZXVt 40846\nIHNwZWNpYWxpemluZw== 40847\nIGluc2FuZWx5 40848\nIFRhcGU= 40849\nZGVsYXk= 40850\nIHRhcm4= 40851\nIFBvdW5k 40852\nIG1lbGFuY2g= 40853\nIGRlcGxveW1lbnRz 40854\naWxhbmQ= 40855\nIGxlc3Nlbg== 40856\nIGZ1cnJ5 40857\nIFVFRkE= 40858\nIGJsb29kc2hlZA== 40859\nIE1laWVy 40860\naXRoZXJpbmc= 40861\nIGhlaXJz 40862\nIEphdw== 40863\nYXh0ZXI= 40864\nIFB1YmxpY2F0aW9ucw== 40865\nIGFsdGVycw== 40866\naW50ZW50aW9u 40867\nIFdpbmNoZXN0ZXI= 40868\nZGV0ZXJtaW5hdGlvbg== 40869\nIExpZmV0aW1l 40870\ndGhpbg== 40871\nTW9uc3Rlcg== 40872\nNzgw 40873\nIGFwcHJveGltYXRpb24= 40874\nIHN1cGVybWFya2V0cw== 40875\nIFNlY29uZHM= 40876\nb3Jvcw== 40877\naHVnZQ== 40878\nIGJyaWJl 40879\nIExJTUlURUQ= 40880\ndW5lZA== 40881\nIG1pc2ludGVycHJldA== 40882\nIEluanVyeQ== 40883\nIDM2Nw== 40884\nIHRocmVzaG9sZHM= 40885\nIENhcm5pdmFs 40886\nIGdhc3Ryb2ludGVzdGluYWw= 40887\nIGd1aWRlbGluZQ== 40888\nIGRlY2VpdmVk 40889\nZmVhdHVyZXM= 40890\nIHB1cnBvcnRlZGx5 40891\nIFJvbm5pZQ== 40892\nIE5ld3Q= 40893\nIHNwYWNpb3Vz 40894\nYXN1cw== 40895\nIHN1cGVyaGVyb2Vz 40896\nIEN5bnRoaWE= 40897\nbGVnZ2Vk 40898\na2FtcA== 40899\nY2hpbw== 40900\nIHRodW1ibmFpbA== 40901\nIFNoaXJsZXk= 40902\naWxsYXRpb24= 40903\nIHNoZWRz 40904\nIFp5 40905\nRVBB 40906\nIGRhbXM= 40907\nIHlhd24= 40908\nbmFo 40909\nIFBlZ2d5 40910\nIEVyaWU= 40911\nIEp1dmVudHVz 40912\nIEZvdW50YWlu 40913\ncng= 40914\nZG9uYWxk 40915\nYWxidW0= 40916\nIENvbXByZWhlbnNpdmU= 40917\nIGNhY2hpbmc= 40918\nIFV6 40919\ndWxuZXJhYmlsaXR5 40920\nIFByaW5jaXBsZQ== 40921\nIEppYW4= 40922\naW5nZXJz 40923\nY2FzdHM= 40924\nIE9zaXJpcw== 40925\nY2hhcnQ= 40926\ndGlsZQ== 40927\nIFRpZmZhbnk= 40928\nIFBhdHRvbg== 40929\nIFdoaXA= 40930\nIG92ZXJzaXplZA== 40931\nSmU= 40932\nIENpbmRlcmVsbGE= 40933\nIEJvcmRlcnM= 40934\nIERhZXNo 40935\nTWFo 40936\nIGRvZ21h 40937\nIGNvbW11bmlzdHM= 40938\ndnU= 40939\nQ291bmNpbA== 40940\nIGZyZXNod2F0ZXI= 40941\nIHdvdW5kaW5n 40942\nIGRlYmFjbGU= 40943\nIHlvdW5nc3Rlcg== 40944\nIHRocmVhZGVk 40945\nIEJvdHM= 40946\nIFNhdmluZ3M= 40947\n44GC 40948\nb2xpbmc= 40949\nb2hv 40950\nIGlsbHVtaW5hdGlvbg== 40951\nTVJJ 40952\nIGxvb3Nlbg== 40953\ndHJ1bXA= 40954\nYWdlbmN5 40955\ndXJpb24= 40956\nIG1vbWVudGFyaWx5 40957\nIENodW4= 40958\nIEJ1ZGFwZXN0 40959\nIEFsbGV5 40960\nRGlzaw== 40961\nIGFzdG9uaXNoZWQ= 40962\nIENvbnF1ZXI= 40963\nIEFjY291bnRpbmc= 40964\naGF2aW5n 40965\nIFdlaW4= 40966\nIEFscmlnaHQ= 40967\nIHJldm9sdmVy 40968\nIGRlbHVzaW9u 40969\nIHJlbGljcw== 40970\nIGFkaGVyZW50 40971\ncXVhbnQ= 40972\nIGhhbmRtYWRl 40973\nb3Jpbw== 40974\nIGNvbWJhdGluZw== 40975\nY29kZWQ= 40976\nIHF1YWRydQ== 40977\ncmV0aA== 40978\nTmlr 40979\nIFRyaWJhbA== 40980\nIE15c3RlcmlvdXM= 40981\nIGluaGFs 40982\nIFdpbm5pbmc= 40983\nIENsYXNzaWZpY2F0aW9u 40984\nY2hhbmdlZA== 40985\nIHVuYWI= 40986\nIHNjb3Ju 40987\naWNpcGF0ZWQ= 40988\nd2w= 40989\nb25kdWN0b3I= 40990\nIHJlaW5mb3JjaW5n 40991\nIENoaWxkaG9vZA== 40992\nYW5vdmE= 40993\nIGFkdmVudHVyZXI= 40994\nIGRvY3RvcmFs 40995\nIFN0cmF0ZWdpZXM= 40996\nIGVuZ3VsZmVk 40997\nIEVuY291bnRlcg== 40998\nIGxhc2hlcw== 40999\nQ3JpdGljYWw= 41000\ncmljdWxhcg== 41001\nIFVURg== 41002\nb2NpYXRpb24= 41003\nY2hlY2tpbmc= 41004\nIENvbnN1bHRpbmc= 41005\nUnVudGltZQ== 41006\ncGVyaW9k 41007\nIEFzZ2FyZA== 41008\nIGRpc3RpbGxlZA== 41009\nIFBhc2FkZW5h 41010\nIER5aW5n 41011\nIENPVU5UWQ== 41012\nIGdyYW5pdGU= 41013\nIHNtYWNr 41014\nIHBhcmFjaHV0ZQ== 41015\nIFNVUg== 41016\nVmlyZ2luaWE= 41017\nIEZ1cmlvdXM= 41018\nNzg3 41019\nIE9raW4= 41020\nIGNhbWVs 41021\nIE1icHM= 41022\nMTk3Mg== 41023\nIENoYW8= 41024\nIEN5YW4= 41025\nam9pY2U= 41026\nZWZlcg== 41027\nIFdyYXA= 41028\nIERlYmF0ZQ== 41029\nU2Vn 41030\nIGZvcmVhcm0= 41031\nIElnbm9yZQ== 41032\nIHRpbWVzdGFtcA== 41033\nIHByb2Jpbmc= 41034\nIE5vb24= 41035\nIEdyYWls 41036\nZmVu 41037\nIGRvcm1hbnQ= 41038\nIEZpcnN0bHk= 41039\nIEVpZ2h0aA== 41040\nIEhVTg== 41041\nIERlc2lyZQ== 41042\nb3Jhcw== 41043\nR2lybHM= 41044\nIERlc21vbmQ= 41045\nemFy 41046\nYW1pbmVz 41047\nT0FE 41048\nZXhlY3V0ZQ== 41049\nIGJvb2Jz 41050\nIEFUTA== 41051\nXyg= 41052\nQ2hlbHNlYQ== 41053\nIG1hc3R1cmJhdGlvbg== 41054\nIENvQw== 41055\nIGRlc3Ryb3llcg== 41056\nIENob21za3k= 41057\nIHNjYXR0ZXI= 41058\nIEFzc2V0cw== 41059\nNzk2 41060\nIENhcmdv 41061\nIHJlY2VwdGl2ZQ== 41062\nIFNjb3Bl 41063\nIG1hcmtldGVycw== 41064\nIGxhdW5jaGVycw== 41065\nIGF4bGU= 41066\nIFNFQQ== 41067\nc2Vx 41068\nIE1vZmY= 41069\nZmluZGluZw== 41070\nIEdpYmJz 41071\nR2VvcmdpYQ== 41072\nZXh0cmVtZWx5 41073\nTko= 41074\nIGxhYm9yZXJz 41075\nc3RhbHM= 41076\nIG1lZGlhdGlvbg== 41077\nIEhlZGdl 41078\nYXRvd24= 41079\nIGlvZA== 41080\nZGVzcGl0ZQ== 41081\ndmlsbA== 41082\nSmFuZQ== 41083\nZXhpc3RlbmNl 41084\nIGNvaW5jaWRlZA== 41085\nIFV0aWxpdGllcw== 41086\nIENoZWFw 41087\nIGxvZ2lzdGljYWw= 41088\nIGN1bG1pbmF0aW9u 41089\nIE5pY290aW5l 41090\ncGFr 41091\nRm9sZGVy 41092\nIHJvZGVudHM= 41093\nc3R1ZmY= 41094\nIGxhd2Z1bGx5 41095\nIHJlcGVydG8= 41096\naW9jaA== 41097\namo= 41098\nRGlhbG9ndWU= 41099\nSEhISA== 41100\nbGljdGlvbg== 41101\nTG9va3M= 41102\nIDI5Nw== 41103\nIHR1cnJldHM= 41104\nIEFiYW5kb24= 41105\nIGluY2Vzcw== 41106\nIFRyYWZmb3Jk 41107\nIGN1cmxlZA== 41108\nIHByZWZlcnJpbmc= 41109\nIHByaXZhdGl6YXRpb24= 41110\nIGlycmVzaXN0 41111\nIFBhbmRh 41112\nIFNoYWtl 41113\nIE1jR3I= 41114\n44OE 41115\ndW5kZXJz 41116\nIGRpc2NyaW1pbmF0ZWQ= 41117\nIGJhcnRlbmRlcg== 41118\nSUxF 41119\nQXRsYW50aWM= 41120\nIHByb3BlbnNpdHk= 41121\nIFdpeg== 41122\nIEdpbQ== 41123\nY29uZmVyZW5jZQ== 41124\nIHJlaW5mb3JjZXM= 41125\nR2g= 41126\nd2Fnb24= 41127\nIGVlcmll 41128\nRmFs 41129\nIGh1Z2dlZA== 41130\ncmFjaXN0 41131\nUklD 41132\nRnU= 41133\nIGZpbGxlcg== 41134\nIFN0dWI= 41135\nIGVuZ3JhdmVk 41136\nIFdyZXN0bGU= 41137\nIGltYWdpbmF0aXZl 41138\nIFBlZXI= 41139\nIEZhY3RvcnM= 41140\nYW51cw== 41141\nIERyYWN1bGE= 41142\nbW9uaXRvcg== 41143\nIHJvdXRlcnM= 41144\naWJpYQ== 41145\nIEJvb2xlYW4= 41146\nZW5kYWxl 41147\nIFNsYXVnaHRlcg== 41148\nIFNoYWNr 41149\nUkZD 41150\nIFNwaWVsYmVyZw== 41151\nU2F4 41152\nIFBIT1RP 41153\nIENsb3Zlcg== 41154\nIFJhZQ== 41155\nRGVwZW5kaW5n 41156\nIE1lbW9y 41157\nYXJhbQ== 41158\nIHBpZXJjZWQ= 41159\nIGN1cnRhaW5z 41160\ndmFsZQ== 41161\nIElucXVpc2l0aW9u 41162\nIFBva2U= 41163\nIGZvcmVjYXN0aW5n 41164\nIGNvbXBsYWlucw== 41165\nU2Vuc2U= 41166\nIEhlcm1lcw== 41167\naXNjb3ZlcmVk 41168\nIGJpYmxl 41169\nIE1vcnBo 41170\nIGdlcm0= 41171\nNzg1 41172\nRE9O 41173\nIGNvbmdlbg== 41174\nIGNyYW5l 41175\nIERQUg== 41176\nIHJlc3BlY3RmdWxseQ== 41177\nUm9vbQ== 41178\nIE5hdw== 41179\nIERhbGFp 41180\ncmVhc29u 41181\nIEFuZ3Vz 41182\nRWR1Y2F0aW9u 41183\nIFRpdGFuaWM= 41184\ny5w= 41185\nIG92YWw= 41186\ndW5pdGVk 41187\nIHRoaXJkcw== 41188\nIG1vaXN0dXI= 41189\nIENQQw== 41190\nTWlhbWk= 41191\nIHRlbnRhY2xlcw== 41192\nIFBvbGFyaXM= 41193\nZXhj 41194\nZXhjbHVzaXZl 41195\nIFByYWlyaWU= 41196\nIGNvbG9zc2Fs 41197\nIEJsZW5k 41198\nc3VycHJpc2luZ2x5 41199\nw61z 41200\nIGluZG9jdHI= 41201\nIGJhc2Fs 41202\nIE1QRUc= 41203\ndW5kbw== 41204\nU3BsaXQ= 41205\nRGV2ZWxvcG1lbnQ= 41206\nIGxhbnRlcm4= 41207\nMTk3MQ== 41208\nIHByb3ZvY2F0aW9u 41209\nIGFuZ3Vpc2g= 41210\nIEJpbmQ= 41211\nIExlaWE= 41212\nZHVjZXJz 41213\naXBweQ== 41214\nY29uc2VydmFuY3k= 41215\nIGluaXRpYWxpemU= 41216\nIFR3aWNl 41217\nIFN1aw== 41218\nIHByZWRpYw== 41219\nIGRpcGxvbWE= 41220\nIHNvY2lvcA== 41221\nSW5ncmVkaWVudHM= 41222\nIGhhbW1lcmVk 41223\nIElybWE= 41224\nUWFpZGE= 41225\nIGdsaW1wcw== 41226\nIEJpYW4= 41227\nIHN0YWNraW5n 41228\nIGZlbmQ= 41229\nZ292dHJhY2s= 41230\nIHVubg== 41231\nZGVtb2NyYXRpYw== 41232\naWdyZWU= 41233\nIDU4MA== 41234\nIDI5NA== 41235\nIHN0cmF3YmVycnk= 41236\nSURFUg== 41237\nIGNoZXJpc2hlZA== 41238\nIEhvdHM= 41239\nIGluZmVycmVk 41240\nIDgwOA== 41241\nIFNvY3JhdGVz 41242\nT3JlZ29u 41243\nIFJvc2Vz 41244\nIEZPSUE= 41245\nIGluc2Vuc2l0aXZl 41246\nIDQwOA== 41247\nUmVjb21tZW5k 41248\nIFNoaW5l 41249\nIHBhaW5zdGFraW5n 41250\nVUdF 41251\nIEhlbGxlcg== 41252\nIEVudGVycHJpc2Vz 41253\nSU9S 41254\nYWRq 41255\nTlJT 41256\nTEc= 41257\nIGFsaWVuYXRlZA== 41258\nIGFja25vd2xlZGdlbWVudA== 41259\nIEFVRA== 41260\nIFJlbmVn 41261\nIHZvdWNoZXJz 41262\nIDk2MA== 41263\nIG1vb3Q= 41264\nIERpbWVuc2lvbnM= 41265\nIGNhYmJhZ2U= 41266\nQnJpZ2h0 41267\nZ2F0 41268\nIEtsdQ== 41269\nIGxhdGVudA== 41270\nIHpl 41271\nIE1lbmc= 41272\nIGRpc3BlcnNl 41273\nIHBhbmRlbW9uaXVt 41274\nSFE= 41275\nIHZpcnR1b3Vz 41276\nIExvY2F0aW9ucw== 41277\nZWVwZXI= 41278\ncHJvdmlkZWQ= 41279\nIHNlYW1z 41280\nIFdU 41281\naXpv 41282\nUFJPVg== 41283\nIHRpdGFuaXVt 41284\nIHJlY29sbGVjdGlvbg== 41285\nIGNyYW4= 41286\nIDc4MA== 41287\nIE5G 41288\nNDkx 41289\nNjQy 41290\ncGFja2luZw== 41291\nNTk4 41292\ndGV4dHVyZQ== 41293\nU3BpZGVy 41294\nZnJlZWRvbQ== 41295\nY2lwbGVk 41296\nIFRBTUFEUkE= 41297\n4pmm 41298\nYXV0aGVudA== 41299\nIFdBTlQ= 41300\ncmlmaWVk 41301\nIHJpdGVz 41302\nIHV0ZXJ1cw== 41303\na2lzcw== 41304\nIOKJpA== 41305\nIHNraWxsZXQ= 41306\nIGRpc2VuZnJhbmNo 41307\nIEdhYWw= 41308\nQ29tcGFu 41309\nIGFnZWluZw== 41310\nZ3VpZGU= 41311\nQmFsdA== 41312\nIGl0ZXJhdG9y 41313\nIGRpc2NyZXRpb25hcnk= 41314\ndGlwcw== 41315\nIHByaW1hdGVz 41316\nIFRlY2huaXF1ZQ== 41317\nIFBheW1lbnRz 41318\nYXplbA== 41319\nIFJPQ0s= 41320\nc3RhbnRpYWw= 41321\nMDYw 41322\nIGRtZw== 41323\nIEphY2tldHM= 41324\nIFBsYXlvZmY= 41325\nIG51cnNlcnk= 41326\nIFN5bWI= 41327\nYXJ0b24= 41328\nIGFubmV4YXRpb24= 41329\nQ29sb3JhZG8= 41330\nIGNvaWxz 41331\nIFNob2Vz 41332\n4oSiOg== 41333\nIFJveg== 41334\nQ09NUExF 41335\nIEV2ZXJlc3Q= 41336\nIFRyaXVtcGg= 41337\nSm95 41338\nR3JpZA== 41339\n4Lw= 41340\ncHJvY2Vzc29y 41341\nIFByb3NwZXI= 41342\nIFNldmVydXM= 41343\nIFNlbGVjdGVk 41344\ncmc= 41345\nIFRheXlpcA== 41346\nU3RyYQ== 41347\nIHNraWluZw== 41348\nID8p 41349\nIHBlZw== 41350\nVGVzbGE= 41351\nIHRpbWVmcmFtZQ== 41352\nIG1hc3Rlcm1pbmQ= 41353\nIE5C 41354\nc2NpZW50aWZpYw== 41355\nIFNoaXQ= 41356\nZ2VuZXJpYw== 41357\nSU5URVI= 41358\nTlVN 41359\nIHN0cm9sbA== 41360\nIEVuaXg= 41361\nIE1NUg== 41362\nIEVNUw== 41363\nbW92aWU= 41364\ngqo= 41365\nIG1pbmltaXppbmc= 41366\naWRkbGluZw== 41367\nIGlsbGVnaXRpbWF0ZQ== 41368\nIHByb3RvdHlw 41369\nIHByZW1hdHVyZWx5 41370\nIG1hbnVhbHM= 41371\nb2JiaWVz 41372\nIENhc3NpZHk= 41373\nREVD 41374\nZGVza3RvcA== 41375\nIGFlcm9z 41376\nIHNjcmVlbmluZ3M= 41377\nIGRlYmlsaXRhdGluZw== 41378\nIEdyaW5k 41379\nbmF0dXJlY29uc2VydmFuY3k= 41380\nIGZhZGVz 41381\ndGVybWluYXRpb24= 41382\nYXNzZXRzYWRvYmU= 41383\nRmFjdG9y 41384\nIGRlZmluaXRpdmVseQ== 41385\nUG9rw6k= 41386\nYXB1bHQ= 41387\nIExhZmF5ZXR0ZQ== 41388\nQ29ybg== 41389\nIENvcmFs 41390\nIHN0YWduYW50 41391\nVHVl 41392\nIGRpc3NhdGlzZmFjdGlvbg== 41393\nR2VuZGVy 41394\nIGtpZG5leXM= 41395\nIEdvdw== 41396\nIERlZmVhdA== 41397\nIEFzaHRvbg== 41398\nIGNhcnRlbHM= 41399\nIGZvcmVjbG9zdXJl 41400\nIEV4cGxvcmU= 41401\nc3RyZW5ndGg= 41402\nb3Rpbg== 41403\nIHZldGVyaW5hcmlhbg== 41404\nIGZ1bWJsZQ== 41405\nIHBhcmFw 41406\nIFN0cmFpdA== 41407\ncmlscw== 41408\nIHByaWNr 41409\nIEJlcm11ZGE= 41410\nIEFtbXVuaXRpb24= 41411\nc2tpbm5lZA== 41412\nIGFib3VuZA== 41413\nIEJyYXo= 41414\nIHNoYXJwZXI= 41415\nIEFzY2Vuc2lvbg== 41416\nIDk3OA== 41417\nIHByZXZpZXdz 41418\nIGNvbW11bmlvbg== 41419\nIFhZ 41420\nIHBob255 41421\nIG5ld2NvbWVy 41422\nIDMzMg== 41423\nLiIsIg== 41424\nIHJlZGlzdHJpYnV0aW9u 41425\nUHJvdGVjdA== 41426\nIFNvZg== 41427\nS2Fs 41428\nIGxpcHN0aWNr 41429\nd29yc3Q= 41430\nIHRhbmdsZWQ= 41431\nIHJldHJvc3BlY3RpdmU= 41432\naW50ZWdlcg== 41433\nIHZvbHVudGVlcmluZw== 41434\nIDE5MDc= 41435\nIC0tLS0tLS0tLS0tLS0tLS0tLS0t 41436\naWNoZW4= 41437\nIHVudmVpbGluZw== 41438\nIHNlbnNlbGVzcw== 41439\nIGZpc2hlcmllcw== 41440\nXC0= 41441\nIGhpbmdlcw== 41442\nIGNhbGN1bHVz 41443\nTXl0aA== 41444\nIHVuZGVmZWF0ZWQ= 41445\nIG9wdGltaXphdGlvbnM= 41446\nIGRlcHJlc3M= 41447\nIGJpbGxib2FyZA== 41448\nIFlhZA== 41449\nIFB5cmFtaWQ= 41450\nSXNu 41451\nSWRl 41452\nIGxlZ2lvbg== 41453\nIEtyYW1lcg== 41454\nZW50YW55bA== 41455\nIHBlbmV0cmF0aW5n 41456\nIEhhd3Ro 41457\nIFBST0RVQ1Q= 41458\nIEdlcmFyZA== 41459\nIFBhY3Q= 41460\nIEluY2x1ZGluZw== 41461\nIEVsaWFz 41462\nIEVsYWluZQ== 41463\ndmlzdWFs 41464\nIGh1bW1pbmc= 41465\nIGNvbmRlc2M= 41466\nIEZhc2M= 41467\n5LiK 41468\nIGVnYWxpdGFyaWFu 41469\nIGRldnM= 41470\nIERhaGw= 41471\nT3Bz 41472\nREg= 41473\nIEJvdW5jZQ== 41474\naWRhdGVk 41475\nYWxkbw== 41476\nIHJlcHVibGljYW4= 41477\nIGhhbWI= 41478\nIFNldHQ= 41479\nb2dyYXBoaWVz 41480\nQ0hBUFRFUg== 41481\nIHRyYW5zc2V4dWFs 41482\nIHNreXJvY2tldA== 41483\nYW5zd2Vy 41484\nIG1hcmt1cA== 41485\n2Ko= 41486\nIGhlcm9pbmU= 41487\nQ29tcGFyZQ== 41488\nIFRhdg== 41489\nQmVhc3Q= 41490\nIHN1Y2Nlc3NvcnM= 41491\nIG5hw692ZQ== 41492\nIEJ1Y2tsZXk= 41493\nc3RyZXNz 41494\nbWVhdA== 41495\nIGRvd25sb2FkYWJsZQ== 41496\nIGluZGV4ZWQ= 41497\nIHNjYWZm 41498\nIEx1bXA= 41499\nIEhvbW8= 41500\nU3R1ZGlv 41501\nSW5zcA== 41502\nIHJhY2tlZA== 41503\nZmFyaW91cw== 41504\nIFBldHR5 41505\nRXh0ZXJuYWw= 41506\nIDE5MDk= 41507\nV2Fycw== 41508\nY29tbWl0 41509\ncHV0ZXJz 41510\nIHVub2I= 41511\nIEVycg== 41512\nIEVH 41513\nIEFsYW0= 41514\nIFNpYmVyaWE= 41515\nIEF0bW9zcGhlcmlj 41516\nSVNURVI= 41517\nIFNhdGFuaWM= 41518\ndHJhbnNsYXRpb24= 41519\nIExvdWQ= 41520\ndHJhdW1hdGlj 41521\nbGlxdWU= 41522\nIHJlc29uYXRl 41523\nIFdlbGNo 41524\nIHNwYXJraW5n 41525\nIFRPTQ== 41526\ndG9uZQ== 41527\nIG91dGw= 41528\nIGhhbmRjdWZmZWQ= 41529\nIFNlcmll 41530\nODAx 41531\nIGxhbmRtYXJrcw== 41532\nIFJlZXZlcw== 41533\nIHNvZnRlbmVk 41534\nIGRhenpsaW5n 41535\nIFdhbnRlZA== 41536\nbW9udGhz 41537\nTWFnaWthcnA= 41538\nIHVudHJlYXRlZA== 41539\nIEJlZGZvcmQ= 41540\nTWk= 41541\nIER5bmFtbw== 41542\nT3Jl 41543\nNzk1 41544\nIHdyb25nZnVs 41545\nIGx1cmVk 41546\nIGNvcnRpc29s 41547\nIHZleA== 41548\nZHJhd24= 41549\naWxldA== 41550\nRG93bmxvYWRoYQ== 41551\nIEZhY3Rpb24= 41552\nIGxhYnlyaW50aA== 41553\nIGhpamFja2Vk 41554\nd2F0ZXJz 41555\nZXJpY2s= 41556\nIHN1cGVyaW9ycw== 41557\nIFJvd2xpbmc= 41558\nIEd1aW5uZXNz 41559\nIHRk 41560\nOTky 41561\nIHVuZWFydGhlZA== 41562\nIGNlbnRyaWY= 41563\nIHNoYW1lbGVzcw== 41564\nUG9k 41565\nIEZpYg== 41566\nIGljaW5n 41567\nIHByZWRpY3Rvcg== 41568\nIDI5Mg== 41569\nZm9yZXN0YXRpb24= 41570\nY29uc3RydWN0 41571\nQ2FuZA== 41572\nQCM= 41573\nIGFnaXRhdGVk 41574\nIHJlcHI= 41575\nT1ZB 41576\nIGtuaXR0aW5n 41577\nIExpbWE= 41578\nIGZvZGRlcg== 41579\nNjg0 41580\nIFBlcnNvbmE= 41581\na2w= 41582\nNzAx 41583\nIGJyZWFrdXA= 41584\n4bg= 41585\nIGFwcGFsbGVk 41586\nIGFudGlkZXByZXNzYW50cw== 41587\nIFN1c3NleA== 41588\nSGFycmlz 41589\nIFRoZXJtYWw= 41590\nZWVlZQ== 41591\nVXBsb2Fk 41592\nIGd1bGY= 41593\nIGRvb3JzdGVw 41594\nIFNoYW5r 41595\nTFU= 41596\nIE1FTg== 41597\nIFBvbmQ= 41598\nc29ycnk= 41599\nIG1pc2ZvcnR1bmU= 41600\nbmFuY2U= 41601\nIGJvbmE= 41602\nTXV0 41603\nIGRlZ3JhZGVk 41604\nIExPRw== 41605\nIE5lc3M= 41606\nYW5pbWFs 41607\nIGF2ZXJzaW9u 41608\ndW5kb3du 41609\nIHN1cHBsZW1lbnRlZA== 41610\nIEN1cHM= 41611\nIDUwNA== 41612\nIGRlcHJpdmU= 41613\nIFNwYXJrbGU= 41614\nxYI= 41615\nIE1lZGl0YXRpb24= 41616\nYXV0aG9ycw== 41617\nIFNhYmFu 41618\nIE5ha2Vk 41619\nYWlyZA== 41620\nIE1hbmRhcmlu 41621\nIFNjcmlwdHVyZXM= 41622\nIFBlcnNvbm5lbA== 41623\nIE1haGFyYXNodHJh 41624\nIDE5MDM= 41625\nIFBhaQ== 41626\nIE1pcmFnZQ== 41627\nb21iYXQ= 41628\nQWNjZXNzb3J5 41629\nIGZyYWdtZW50ZWQ= 41630\nVG9nZXRoZXI= 41631\nIGJlbGlldmFibGU= 41632\nIEdsYWRpYXRvcg== 41633\nYWxpZ25lZA== 41634\nIFNsdWc= 41635\nTUFU 41636\nIGNvbnZlcnRpYmxl 41637\nIEJvdXJib24= 41638\nYW1lcm9u 41639\nIFJlaGFi 41640\nbnRheA== 41641\nIHBvd2RlcmVk 41642\ncGlsbGFy 41643\nIHNtb2tlcg== 41644\nIE1hbnNvbg== 41645\nIEJG 41646\nNTEx 41647\nIEdvb2RlbGw= 41648\nIERBUg== 41649\nbXVk 41650\nZ2FydA== 41651\nIG9iZWRpZW50 41652\nIFRyYW5zbWlzc2lvbg== 41653\nIERvbmF0aW9u 41654\nODgw 41655\nIGJvdGhlcmluZw== 41656\nTWF0ZXJpYWxz 41657\n44Kx 41658\nZGVzdHJveQ== 41659\nIGZvcmVnb2luZw== 41660\nIGFuYXJjaGlzbQ== 41661\nIEtyeQ== 41662\naWNlcHM= 41663\nIGxpdHRlcmVk 41664\nIFNjaGlmZg== 41665\nIGFuZWNkb3RhbA== 41666\ndW5pdHM= 41667\nIGZpYW4= 41668\nIFN0aW0= 41669\nIFNPTUU= 41670\nIEludmFkZXJz 41671\nIGJlaGF2aW91cmFs 41672\nIFZlbnR1cmVz 41673\nIHN1YmxpbWU= 41674\nIGZydWl0aW9u 41675\nIFBlbmFsdHk= 41676\nIGNvcnJvc2lvbg== 41677\ntoU= 41678\nIGxpa2VuZWQ= 41679\nIGJlc2llZ2Vk 41680\nd2VlbmV5 41681\nIENyZWVw 41682\nIGxpbmVtZW4= 41683\nbXVsdGk= 41684\naWNhYmx5 41685\ndWRkZXI= 41686\nIHZpdGFsaXR5 41687\nIHNob3J0ZmFsbA== 41688\nIFBhbnRz 41689\nYXBpc3Q= 41690\nSGlkZGVu 41691\nIERyb3Bz 41692\nbWVkaWNhbA== 41693\nIHByb251bmNpYXRpb24= 41694\nIE5STA== 41695\nIGluc2lnaHRmdWw= 41696\nSlY= 41697\nIEJlYXJk 41698\nIENob3U= 41699\nIGNoYXJtcw== 41700\nIGJpbnM= 41701\nIGFtYmFzc2Fkb3Jz 41702\nIFNhdHVyZGF5cw== 41703\nIGluaGliaXRvcg== 41704\nIEZyYW5jaA== 41705\nNjAx 41706\nJywn 41707\nIENvbm9y 41708\nYXJ0bmV5 41709\nIFhwZXJpYQ== 41710\nZ3JhdmU= 41711\nYmVlcw== 41712\nIFByb3Rlc3RhbnRz 41713\nIHNvYWtpbmc= 41714\nIE1hbmRhbA== 41715\nIHBoYXNlZA== 41716\nIDY2MA== 41717\nIHNjYW1z 41718\nIGJ1enppbmc= 41719\nIEl0YWxpYW5z 41720\nIExvcmVuem8= 41721\nIEpB 41722\nIGhlc2l0YXRlZA== 41723\nIGNsaWZmcw== 41724\nIEdPVA== 41725\naW5ndWlzaGFibGU= 41726\nIGtv 41727\nIGludGVycnVwdGlvbg== 41728\nWmlw 41729\nTGVhcm5pbmc= 41730\nIHVuZGVyc2NvcmVz 41731\nIEJsaW5r 41732\nS3U= 41733\nNTc5 41734\nIEF1dG9i 41735\nSVJF 41736\nIHdhdGVyaW5n 41737\nIHBhc3RyeQ== 41738\nODIw 41739\nIHZpc2lvbmFyeQ== 41740\nIFRlbXBsYXI= 41741\nYXdhaXRlZA== 41742\nIHBpc3Rvbg== 41743\nIGFudGlk 41744\nY3VycmVudGx5 41745\nIHBhcmQ= 41746\nIHdhZ2luZw== 41747\nIG5vYmlsaXR5 41748\nIFl1cw== 41749\nIGluamVjdGluZw== 41750\nZmFpdGg= 41751\nIFBBU1M= 41752\n5bo= 41753\nIHJldGFrZQ== 41754\nIFBST0M= 41755\nIGNhdGhlZHJhbA== 41756\nYmFzaA== 41757\nIHdyZXN0bGVycw== 41758\nIHBhcnRuZXJpbmc= 41759\nIG5vc2Vz 41760\nIDM1OA== 41761\nVHJhbnNmb3Jt 41762\nYW1lbg== 41763\nIGJvdXRz 41764\nIElkZWFs 41765\nIENvbnN0YW50aW4= 41766\nIHNlcA== 41767\nIE1vbmFyY2g= 41768\nYXR0ZW4= 41769\nIFBlb3BsZXM= 41770\nbW9kaWZpZWQ= 41771\nIG1vcmF0b3JpdW0= 41772\nIHBlbmNoYW50 41773\nIG9mZmVuc2l2ZWx5 41774\nIHByb3hpZXM= 41775\nb2thbmU= 41776\nIFRhaXdhbmVzZQ== 41777\nIFBvbw== 41778\nIEhPTUU= 41779\ndXNpb25hbA== 41780\nIHZlcmJz 41781\nIE9tYW4= 41782\ndmlzb3J5 41783\nIHBlcnN1YXNpb24= 41784\nIG11bHRpdA== 41785\nIHNjaXNzb3Jz 41786\nR2F5 41787\nb3dheQ== 41788\nb3BoeXNpY2Fs 41789\nbHVz 41790\nZ251 41791\nIGFwb2NhbHlwdGlj 41792\nIGFic3VyZGl0eQ== 41793\nIHBsYXlib29r 41794\nIGF1dG9iaW9ncmFwaHk= 41795\nSVVN 41796\nIHNuZWFraW5n 41797\nIFNpbXVsYXRpb24= 41798\ncHBz 41799\nZWxsZXJ5 41800\nUGxhbmV0 41801\nIHJpZ2h0ZnVsbHk= 41802\nIG5pZWNl 41803\nIE5FQw== 41804\nIElQTw== 41805\nIERpc2Nsb3N1cmU= 41806\nbGVhbm9y 41807\nb3VzeQ== 41808\nU1RFUg== 41809\nIDI4Mg== 41810\nQ3J1eg== 41811\nQ2hhbGw= 41812\nNjQz 41813\nIFN1cnZpdmU= 41814\nIEZhdGFs 41815\nIEFtaWQ= 41816\nYXBv 41817\nV2VhcG9ucw== 41818\nREVO 41819\nNzcw 41820\nIEdyZWVud2FsZA== 41821\nIGxpbmVu 41822\nYWxvcw== 41823\nIHBvbGx1dGFudHM= 41824\nIFBDSWU= 41825\na2F0 41826\nIHBhdw== 41827\nIEtyYWZ0 41828\nQ2hlbQ== 41829\nIFRlcm1pbmF0b3I= 41830\nIHJlaW5jYXJu 41831\nIF1b 41832\nIFNlZWRz 41833\nIHNpbGhvdWV0dGU= 41834\nIFN0b3Jlcw== 41835\nIGdyb29taW5n 41836\nIERpcmVjdGlvbg== 41837\nIElzYWJlbA== 41838\nIEJyaWRnZXM= 41839\n8J+R 41840\nRUVE 41841\nIE1vcnNp 41842\nIHZhbHZlcw== 41843\nIFJhbmtlZA== 41844\nIFBoYXJtYQ== 41845\nIE9yZ2FuaXphdGlvbnM= 41846\nIHBlbmV0cmF0ZWQ= 41847\nIFJvZGhhbQ== 41848\nIFByb3Rvc3M= 41849\nIG92ZXJlc3Q= 41850\nIGV4YXNwZXI= 41851\nIFRK 41852\nIDAwMDAwMA== 41853\nIHRyaWNrbGU= 41854\nIGJvdXJib24= 41855\nV0hP 41856\nIHdyZXRjaGVk 41857\nIG1pY3Jvc2NvcGlj 41858\nIGNoZWNrbGlzdA== 41859\nIGFkb3JuZWQ= 41860\nUm95YWw= 41861\nQWRtaW5pc3Q= 41862\nIFJldGlyZW1lbnQ= 41863\nIEhpZ2hlc3Q= 41864\nV2VhdGhlcg== 41865\naWxlZ2U= 41866\nIGluY3JlbWVudHM= 41867\nIENvc3BvbnNvcnM= 41868\nIG1hc3Nl 41869\nIFNpbm4= 41870\ncmY= 41871\nIGhvcmRlcw== 41872\nYXNzZW1ibHk= 41873\nNzU0 41874\nIE5hdGFzaGE= 41875\nIFRZUEU= 41876\nIEdFTkVSQUw= 41877\nIGFycmFuZ2luZw== 41878\nIDQwNw== 41879\nbGF0b3I= 41880\nIGdsZWFu 41881\nIGRpc2NyZWRpdGVk 41882\nIGNsaW5pY2lhbnM= 41883\nVU5F 41884\nIGFjaGlldmVz 41885\nIEVtZXJzb24= 41886\nY29tcGxleA== 41887\nPVs= 41888\nIHByaW5jaXBhbGx5 41889\nIGZyYWls 41890\ncGlja2Vk 41891\nIHRoYW5raW5n 41892\nIHJlY2w= 41893\nIExBU1Q= 41894\nIHN1cHByZXNzaW5n 41895\naWxpYw== 41896\nIGFudGlkZXByZXNzYW50 41897\nIExpc2Jvbg== 41898\nIHRob3I= 41899\nIHNwYQ== 41900\nIGtpbmdkb21z 41901\nIFBlYXJjZQ== 41902\nZW1v 41903\nIHBsdW5n 41904\nIGRpdmVzdA== 41905\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 41906\nYmlz 41907\nb3NwZWxz 41908\nYWRy 41909\nU3Bpcml0 41910\naGFsbGE= 41911\nUGluaw== 41912\nZW5kZXo= 41913\nIHJlc3VycmVjdGVk 41914\nZXNjYXBl 41915\nIFJvc2Vuc3RlaW4= 41916\nIGdlb2xvZ2ljYWw= 41917\nIG5lY2Vzc2l0aWVz 41918\nIGNhcm5pdg== 41919\nIEVseXM= 41920\nIEJhcm5leQ== 41921\nIDI5Ng== 41922\nZGlneQ== 41923\nU1RPTg== 41924\nRE9XTg== 41925\nIG1pbGVzdG9uZXM= 41926\nIGtlcg== 41927\nIGRpc21hbnRsaW5n 41928\nIHJlcHJpbQ== 41929\nIGNyb3NzaW5ncw== 41930\nMTk0NQ== 41931\nIHBhdHJpYXJjaHk= 41932\nIGJsYXNwaGVteQ== 41933\nIDM1OQ== 41934\nbWV0cnk= 41935\nIE9iZXNpdHk= 41936\nIERpZmZlcmVuY2Vz 41937\nYmxvY2tpbmc= 41938\n44OV44Kh 41939\naWNoaXRh 41940\nIFNhYmhh 41941\ncGhhbHQ= 41942\nIENvbG8= 41943\ndWFsYQ== 41944\nZWZmaWNpZW50cw== 41945\nIE1lZGluYQ== 41946\nY29uc29sZQ== 41947\nNTU3 41948\nIEhhbm5pYmFs 41949\nIEhhYml0 41950\nIEZldmVy 41951\nIHRoZW5jZQ== 41952\nIHN5bmFnb2d1ZQ== 41953\nIGVzc2VudGlhbHM= 41954\nIHdpbms= 41955\nIFRyYWRlcg== 41956\nSURB 41957\nIFNwb2lsZXI= 41958\nIEljZWxhbmRpYw== 41959\nIEhheXdhcmQ= 41960\nIHBlYWM= 41961\nIG1hbGljZQ== 41962\nIGZsYXNoYmFjaw== 41963\nIHRodw== 41964\nIGxheW9mZnM= 41965\nTGlxdWlk 41966\nIHRyb29wZXI= 41967\nIGhpbmdl 41968\nIFJlYWRlcnM= 41969\nUGhpbGw= 41970\nIEJhdWVy 41971\nQ3JlYXRlZA== 41972\nIGF1ZGl0cw== 41973\nYWNjb21wYW4= 41974\nIHVuc3VzcGVjdGluZw== 41975\naWVyYQ== 41976\nNjY2NjY2NjY= 41977\nIGJyb2No 41978\nIGFwcHJlaGVuZGVk 41979\nIE1hbGs= 41980\nY2VybmluZw== 41981\nIENvZGV4 41982\nT1ZFUg== 41983\nTWFyc2g= 41984\nIERlbmc= 41985\nIEV4cHJlc3Npb24= 41986\nIGRpc3Jlc3BlY3RmdWw= 41987\nIGFzY2VuZGluZw== 41988\ndGVzdHM= 41989\nIFBsYWludGlmZg== 41990\nc3Rlcnk= 41991\nIEFsaWJhYmE= 41992\nZGluYW5k 41993\nIERlbXBzZXk= 41994\nQXBwbGljYXRpb25z 41995\nbW9yYWw= 41996\nIHRocm91Z2hwdXQ= 41997\nIHF1YXJyZWw= 41998\nIG1pbGxz 41999\nIGhlbW9y 42000\nIENBU0U= 42001\ndGVycm9yaXN0 42002\nc3RpbQ== 42003\naWZlc3R5bGU= 42004\ncm96ZW4= 42005\nQ0VQVA== 42006\nQXJr 42007\ndWNp 42008\nbGVjdGlj 42009\nIGlycml0YXRpbmc= 42010\nc2hlZXRz 42011\nQXk= 42012\nIHJlZGVlbWVk 42013\nIGhvcm55 42014\nIFRlYWNo 42015\nIFNlYXI= 42016\nZGVtb2NyYWN5 42017\nNDY1 42018\nIFJlc3RvcmU= 42019\nIHN0YW5kYnk= 42020\nIFBpcw== 42021\naWZmaW4= 42022\nIHNsZWVweQ== 42023\nIGV4dHJhdGVy 42024\nIGNvbXBsaW1lbnRz 42025\nRnJhbWV3b3Jrcw== 42026\nIGluc3RhbGxz 42027\nIGJhbmdpbmc= 42028\nc3VyZmFjZQ== 42029\nZm91bmRsYW5k 42030\nIG1ldGFwaHlzaWNhbA== 42031\nIDI4Mw== 42032\nb3Vscw== 42033\nZGV2aWNlcw== 42034\nQXJncw== 42035\nIFNhY3JpZmljZQ== 42036\nIE1jQ29ybQ== 42037\nZXNvbg== 42038\nQ29uc2VydmF0aXZl 42039\nIE1pa2hhaWw= 42040\nc2VlaW5n 42041\naXNpdmVseQ== 42042\nIFJvb21z 42043\nIEdlbmVyaWM= 42044\nIGVudGh1c2lhc3RpY2FsbHk= 42045\nIGdyaXBwZWQ= 42046\nIGNvbWVkaWM= 42047\nIEVsZWN0cmljaXR5 42048\nIGd1ZXJyaWxsYQ== 42049\nIGRlY29yYXRpb24= 42050\nIFBlcnNwZWN0aXZl 42051\nIGNvbnN1bHRhdGlvbnM= 42052\nIHVuYW1i 42053\nIHBsYWdpYXI= 42054\nIG1hZ2ljaWFu 42055\nIGVyZWN0aW9u 42056\nIFRvdXJpc20= 42057\nb3JpZWQ= 42058\ncm94eQ== 42059\nMTEwMA== 42060\nVGFt 42061\niOg= 42062\nzrM= 42063\n16o= 42064\nIFByZWRhdG9ycw== 42065\nTml0cm9tZQ== 42066\nIHRlbGVzY29wZXM= 42067\ncHJvamVjdHM= 42068\nIHVucHJvdGVjdGVk 42069\nIHN0b2NrZWQ= 42070\nIEVudHJlcHJlbmU= 42071\nbmV4cGVjdGVk 42072\nIHdhc3Rld2F0ZXI= 42073\nVmlsbA== 42074\nIGludGltYXRlbHk= 42075\nIGlDbG91ZA== 42076\nIENvbnN0YWJsZQ== 42077\nIHNwb29m 42078\nIG5lZmFyaW91cw== 42079\nIGZpbnM= 42080\nIGNlbnNvcg== 42081\nIE1vZGVz 42082\nIEVzcGVy 42083\nYXJib24= 42084\nIGludGVyc2VjdGlvbnM= 42085\nIGxhdWRlZA== 42086\nIHBoeXNp 42087\nIGdlbmVyb3VzbHk= 42088\nIFRoZU5pdHJvbWU= 42089\nIFRoZU5pdHJvbWVGYW4= 42090\nIGFyaXNlbg== 42091\nINmI 42092\nIGdsYW5kcw== 42093\nIFBhdmlsaW9u 42094\nIEd1cHRh 42095\nIHVuaWZvcm1seQ== 42096\nIHJhbXBz 42097\ncmlldA== 42098\nIFdIRU4= 42099\nIFZhbmVzc2E= 42100\nIHJvdXRlZA== 42101\nIGxpbXA= 42102\nIENQSQ== 42103\ncHRlcg== 42104\naW50dWl0aXZl 42105\nIHZhcGluZw== 42106\nIGV4cGVyaW1lbnRlZA== 42107\nIE9seW1wdXM= 42108\nIEFtb24= 42109\nIHNpZ2h0aW5n 42110\nIGluZmlsdHJhdGU= 42111\nIEdlbnRsZW1hbg== 42112\nIHNpZ25pbmdz 42113\nIE1lb3c= 42114\nIE5hdmlnYXRpb24= 42115\nY2hlY2tz 42116\nNDMz 42117\nIGVsYXBzZWQ= 42118\nIEJ1bGdhcmlhbg== 42119\nZXNwaWU= 42120\nIFNPTQ== 42121\nZHVyaW5n 42122\nIHNwaWxscw== 42123\nYW5jYQ== 42124\nIFBseW1vdXRo 42125\nTUFM 42126\nIGRvbWVzdGljYWxseQ== 42127\nIFdhdGVyZ2F0ZQ== 42128\nIEZBTQ== 42129\na2lsbGVk 42130\nZWRpdGVk 42131\nIFlvdXJzZWxm 42132\nIHN5bmNocm9uaXphdGlvbg== 42133\nIFByYWN0aWNlcw== 42134\nU1RFUA== 42135\nIGdlbm9tZXM= 42136\nIFFS 42137\nbm90aWNl 42138\nIGxvY2F0aW5n 42139\nemlu 42140\nIDMyOQ== 42141\nYWxjb2hvbA== 42142\nIGtpdHRlbg== 42143\nVm8= 42144\nIHJpbnNl 42145\nIGdyYXBwbGU= 42146\nIFNjcmV3 42147\nIER1bA== 42148\nQUlS 42149\nIGxlYXNpbmc= 42150\nIENhZsOp 42151\nIHJvc2Vz 42152\nIFJlc3BlY3Q= 42153\nIG1pc2xlYWQ= 42154\nIHBlcmZlY3RlZA== 42155\nIG51ZGl0eQ== 42156\nIG5vbnBhcnRpc2Fu 42157\nIENvbnN1bXB0aW9u 42158\nUmVwb3J0aW5n 42159\nIG51YW5jZXM= 42160\nIGRlZHVjdGlibGU= 42161\nIFNob3Rz 42162\nIDM3Nw== 42163\nIOac 42164\nYW5vb2dh 42165\nQmVuZWY= 42166\nIEJhbQ== 42167\nIFNhbXA= 42168\naWZpeA== 42169\nIGdhbHZhbg== 42170\nIE1lZGFscw== 42171\ncmFkaXVz 42172\nIG5vYmxlcw== 42173\nIGVhdmVz 42174\naWdyYXRl 42175\nS1Q= 42176\nIEhhcmJvdXI= 42177\ndWVycw== 42178\nIHJpc2tlZA== 42179\ncmVx 42180\nIG5ldXJvdA== 42181\nZ2V0dGFibGU= 42182\nYWluYQ== 42183\nUm9tbmV5 42184\nIHVuZGVycGlu 42185\nIGxvZnQ= 42186\nIFN1YmNvbW1pdHRlZQ== 42187\nIE1vbmdvbA== 42188\nYml6 42189\nIG1hbmlmZXN0cw== 42190\nYXNzaXN0ZWQ= 42191\nIEdhZ2E= 42192\nIHN5bmVyZ3k= 42193\nIHJlbGlnaW91c2x5 42194\nIFByZWY= 42195\nIEdlcnJ5 42196\nVEFH 42197\nIENob2k= 42198\nNDY2 42199\nYmVoaW5k 42200\nIE91 42201\nR29sZE1hZ2lrYXJw 42202\nIGhlbW9ycmg= 42203\nUml2ZXI= 42204\nIHRlbmRvbg== 42205\nIGluanVyZQ== 42206\nIEZpb25h 42207\nIHBhZw== 42208\nIGFnaXRhdGlvbg== 42209\nfHx8fA== 42210\ndXJhbg== 42211\nIEVTQQ== 42212\nIGVzdGVlbQ== 42213\nIGRvZGdpbmc= 42214\nIDQxMg== 42215\ncnNz 42216\nIGNlYXNlcw== 42217\nZXhjbHVkaW5n 42218\nIGludGFrZXM= 42219\nIGluc2VydHM= 42220\nIGVtYm9sZA== 42221\nIE9yYWw= 42222\ndXB1bmN0dXJl 42223\nNDEx 42224\nIFVuaWZpZWQ= 42225\nIERlbGU= 42226\nIGZ1cm5hY2U= 42227\nIENveW90ZXM= 42228\nIEJyYWNo 42229\nTGFib3I= 42230\nIGhhbmRzaGFrZQ== 42231\nIGJydWlzZXM= 42232\nR3JhZGU= 42233\n6ZeY 42234\nIEdyYW1teQ== 42235\naWxlZW4= 42236\nU3RhdGVz 42237\nIFNjYW5kaW5hdmlhbg== 42238\nIEthcmRhc2g= 42239\nODY2 42240\nIGVmZm9ydGxlc3NseQ== 42241\nIERJUkVDVA== 42242\nIFRIRU4= 42243\nIE1laQ== 42244\nZXJ0YXRpb24= 42245\nMTk2OA== 42246\nIGdyb2lu 42247\nd2l0Y2g= 42248\nUmVxdWlyZW1lbnRz 42249\nOTg1 42250\nIHJvb2Zz 42251\nIGVzdGF0ZXM= 42252\nIEhG 42253\nIGhhaGE= 42254\nIGRlbnNlbHk= 42255\nIE9DVA== 42256\nIHBsYXN0aWNz 42257\nIGluY2lkZW50YWxseQ== 42258\nIFRyYWNrcw== 42259\nIFRheGVz 42260\nIGNoYW50ZWQ= 42261\nIGZvcmNlZnVs 42262\nIEJpZWJlcg== 42263\nIEthaG4= 42264\nS2VudA== 42265\nIENvdA== 42266\nbGljdHM= 42267\nRmVk 42268\nIGhpZGVvdXM= 42269\nIFZlcmQ= 42270\nIFN5bmRpY2F0ZQ== 42271\nIElsbGVnYWw= 42272\nSmV0 42273\nIERBVg== 42274\ncmVhc29uYWJsZQ== 42275\nY3Jldw== 42276\nIGZ1bmRhbWVudGFsaXN0 42277\nIHRydXRoZnVs 42278\nIEppbmc= 42279\nIGxpbA== 42280\nIGRvd25lZA== 42281\nIGVuY2hhbnRlZA== 42282\nIFBvbGljaWVz 42283\nIE1jTWFzdGVy 42284\nIEhhcmU= 42285\naWRlc2hvdw== 42286\nIHBhcmFtcw== 42287\nZW5jZXJz 42288\nZ29yaXRobQ== 42289\nIGFsbG93YW5jZXM= 42290\nIHR1cmJ1bGVudA== 42291\nIGNvbXBsZXhpdGllcw== 42292\nIEtU 42293\nIDMzNw== 42294\nIEdlbmV0aWM= 42295\nRlVO 42296\nRG91Zw== 42297\ndGljaw== 42298\nIGdpZ3M= 42299\ndW1lbnRoYWw= 42300\nIHBhdHJpYXJjaGFs 42301\nIGNhbGM= 42302\nLC4uLg== 42303\nIGNvdXQ= 42304\nIEd1YW4= 42305\nIHBhdGhvbG9naWNhbA== 42306\nIFJpdmFscw== 42307\nIHVuZGVycmF0ZWQ= 42308\nIGZsdW9yZXNjZW50 42309\nIEppdQ== 42310\nYXJuYWV2 42311\nIFF1YW4= 42312\nIDQyOQ== 42313\nIOCo 42314\nTWFyaW8= 42315\nQ29uc3RydWN0 42316\nIENpdGF0aW9u 42317\nIFJhY2lhbA== 42318\nIFJTQQ== 42319\nIEZpZGVs 42320\nIDM5NQ== 42321\nUGVyc29uYWxseQ== 42322\nQ2F1c2U= 42323\nw7s= 42324\ncmFkaWNhbA== 42325\naW5lbg== 42326\nIHZlaGVtZW50bHk= 42327\nIFBhcGE= 42328\nIGludGVybnNoaXA= 42329\nIGZsYWtlcw== 42330\nIFJlY2s= 42331\nTHVja2lseQ== 42332\nQnJh 42333\nMjAyMA== 42334\ncmF2aW5ncw== 42335\nUk4= 42336\nV29uZGVy 42337\nU2VyaW91c2x5 42338\nIHJldXNhYmxl 42339\nIHBvbGx1dGVk 42340\nIFBlbmc= 42341\nbGVpZ2g= 42342\naW5kbGU= 42343\nIGNpcmN1aXRyeQ== 42344\nIE1hZG9ubmE= 42345\nIEJBUlQ= 42346\nUmVzaWRlbnRz 42347\nYXR0cmlidXRl 42348\nUGhpbGFkZWxwaGlh 42349\nQ2x1Yg== 42350\nIHBsYW5uZXI= 42351\nIGZyYW50aWNhbGx5 42352\nIGZhaXRoZnVsbHk= 42353\nIFRlcnJpdG9yaWVz 42354\nIExBVA== 42355\nIEFuZGVyc2Vu 42356\nYW51 42357\nIFBBUks= 42358\nIFNvcmE= 42359\naWFnZQ== 42360\nIFBsYXlvZmZz 42361\nIEdDQw== 42362\nNDI3 42363\nIGFibm9ybQ== 42364\nIExldmVy 42365\nIGRpc29iZWRpZW5jZQ== 42366\nQXN5bmM= 42367\nIFNoZWE= 42368\nVmVydA== 42369\nIHNraXJ0cw== 42370\nIFNhd3llcg== 42371\neHA= 42372\nIHdvcnNlbmluZw== 42373\nIHNjYXBlZ28= 42374\nIEFuZ2xl 42375\nb3RoYWw= 42376\nIHRyb3Zl 42377\nIFN0eQ== 42378\nIE5ndXllbg== 42379\nbWFyaW5l 42380\naWRlb24= 42381\nRGVwdGhz 42382\nQmxvZw== 42383\nIElsbHVtaW5hdGk= 42384\nIHRyYWN0cw== 42385\nIG9yZ2FuaXNl 42386\nIG9zdHI= 42387\nRnM= 42388\nIGxldmVyYWdpbmc= 42389\nIERhcmVkZXZpbA== 42390\nYXNhcg== 42391\nIGxhbmc= 42392\nIGV4dGVybWlu 42393\ndXJzaW9ucw== 42394\nIFJvbW8= 42395\n44Kk44OI 42396\nIGNvbnRlbmRlZA== 42397\nIGVuY291bnRlcmluZw== 42398\nIFRhYmxldA== 42399\nIEFsdGVybmF0ZQ== 42400\nc2tpbGw= 42401\nIHN3ZWV0cw== 42402\nIGNvaGVzaXZl 42403\nY2FwYWNpdHk= 42404\nIHJlcHVk 42405\nIGxpemFyZA== 42406\ncm9v 42407\nIHBpbGdyaW1z 42408\nIFJ1ZmY= 42409\nIEluc3RydW1lbnQ= 42410\nIExvZ28= 42411\ndWl0b3Vz 42412\nRUg= 42413\nIHNhbGVzbWFu 42414\nIGFua2xlcw== 42415\nTGVk 42416\nIFBhdHR5 42417\ndWRvcw== 42418\nT3duZXI= 42419\nIGRpc2NyZXBhbmNpZXM= 42420\na2o= 42421\nTVU= 42422\nIHVuY29uZGl0aW9uYWw= 42423\nRHJhZ29uTWFnYXppbmU= 42424\naWFyZA== 42425\nT2Fr 42426\nIENvbnZlcnNhdGlvbg== 42427\nYmVlcg== 42428\nIE9zYWth 42429\nRGVsdGE= 42430\ndXNreQ== 42431\nIHNlY3JldGlvbg== 42432\nIHBsYXph 42433\nIG1pbmc= 42434\nIGRlcGxldGlvbg== 42435\nIE1vdXM= 42436\nIElUUw== 42437\nIEhpbWFs 42438\nIEZsZW1pbmc= 42439\nIGN5dG9r 42440\nIEhpY2s= 42441\nIGJhdHRlcnM= 42442\nIEludGVsbGVjdHVhbA== 42443\nNjc1 42444\nw6ly 42445\nSVNJT04= 42446\nIFF1ZW50aW4= 42447\nIENoYXB0ZXJz 42448\naWhhZGk= 42449\nIGNvYXN0ZXI= 42450\nV0FZUw== 42451\nIExpemFyZA== 42452\nIFlvcg== 42453\nYW5kZXJpbmc= 42454\nU2tpbg== 42455\naGF1c3Q= 42456\nYWJieQ== 42457\nIHBvcnRyYXlpbmc= 42458\nIHdpZWxkZWQ= 42459\nZGFzaA== 42460\nIHByb3BvbmVudA== 42461\nIHJpcHBsZQ== 42462\nIGdyYXBoZW5l 42463\nIGZseWVy 42464\nIHJlY3VycmVudA== 42465\nIGRldmlscw== 42466\nIHdhdGVyZmFsbA== 42467\n5piv 42468\nZ29v 42469\nVGV4dENvbG9y 42470\nIHRhbXBlcmluZw== 42471\nSVZFUw== 42472\nVFJVTVA= 42473\nIEFiZWw= 42474\nIFNBTA== 42475\nIEhlbmRyaWNrcw== 42476\nIEx1Y2l1cw== 42477\nYm90cw== 42478\nIDQwOTY= 42479\nSVNUT1JZ 42480\nR3Vlc3Q= 42481\nIE5Y 42482\naW5hbnQ= 42483\nQmVueg== 42484\nIExvYWRlZA== 42485\nIENsZXZlcg== 42486\ndHJlYXRtZW50 42487\nIHRhdmVybg== 42488\nIDMzOQ== 42489\nIFROVA== 42490\naWZpY2FudGx5 42491\nVGVtcGVyYXR1cmU= 42492\nRmVs 42493\nIHVuZGVyd29ybGQ= 42494\nIEp1ZGdlcw== 42495\nIDwr 42496\nIHN0dW1w 42497\nIG9jY3VwYW5jeQ== 42498\nIGFiZXI= 42499\nIEZpbmRlcg== 42500\nKSIs 42501\nIE51bmVz 42502\ncmVzZXQ= 42503\naW5ldA== 42504\nZWN0b215 42505\nIHdlbGxuZXNz 42506\nIFBlYg== 42507\ncXVhcnRlcmVk 42508\nYW5kYW4= 42509\nIG5lZ2F0aXZlcw== 42510\nIFRoaWVs 42511\nIENsaXA= 42512\nIExURA== 42513\nIGJsaWdodA== 42514\nIHJlcGVydG9pcmU= 42515\nS3lsZQ== 42516\nIHF1ZXI= 42517\nIENlcw== 42518\nIGhhcGw= 42519\nOTg5 42520\nIFRoYW1lcw== 42521\naXNjb3BhbA== 42522\nRGVzaw== 42523\naXZhcmlhdGU= 42524\nIEV4Y2VsbGVuY2U= 42525\nZm91bmRhdGlvbg== 42526\nIOKH 42527\nWGk= 42528\nIG15c3RlcmlvdXNseQ== 42529\nZXN0eWxlcw== 42530\nIHBlcmlzaA== 42531\nIEVuZ2Vscw== 42532\nIERFQUQ= 42533\nMDkw 42534\nfX19 42535\nIFVucmVhbA== 42536\nIHJlc3RsZXNz 42537\nSURFUw== 42538\nb3J0aG9kb3g= 42539\nIEludGVybWVkaWF0ZQ== 42540\nIGRpbm5lcnM= 42541\nIFRyb3V0 42542\nIFNleW0= 42543\nIEhhbGxz 42544\nb2dnZWQ= 42545\nIHRyYWdlZGllcw== 42546\nIGRpZG50 42547\nNjc2 42548\nIGFpbG1lbnRz 42549\nIG9ic2VydmFibGU= 42550\nIFZpZGU= 42551\nYWRhcHQ= 42552\nIER1c2s= 42553\nIHByb2Zlc3Npb25hbGlzbQ== 42554\nIFByZXNjb3R0 42555\nIEluZGllcw== 42556\ncG94 42557\nIE1laHJhbg== 42558\nV2lkZQ== 42559\nIGVuZGVtaWM= 42560\nIFBhcmFu 42561\nQmlyZA== 42562\nIHBlZGFscw== 42563\nIElV 42564\nIEFkYW1hbnQ= 42565\nIEh1cnQ= 42566\nIGNvcnJlbGF0ZXM= 42567\ndXJkZW4= 42568\nIHNwb25zb3Jpbmc= 42569\nY2xpbWF0ZQ== 42570\nIFVuaXZlcnNpdGllcw== 42571\nIEtub3Q= 42572\nZW5uZXM= 42573\nIERhbWlhbg== 42574\nIEF4ZWw= 42575\nU3BvcnQ= 42576\nIGJhcmI= 42577\nIFNubw== 42578\nc2hvd24= 42579\nc3RlZW4= 42580\ndWRlbmNl 42581\nIG5vbnZpb2xlbnQ= 42582\nIGhvbW9waG9iaWE= 42583\nIGJpb21hc3M= 42584\nIERldGFpbA== 42585\nIHNyZk4= 42586\nIFR1bmU= 42587\nYWNjb21wYW5pZWQ= 42588\nSUVOQ0U= 42589\nQWxiZXJ0 42590\nIE1vbmdv 42591\neng= 42592\nIENlcmJlcnVz 42593\nb3JiaXQ= 42594\nY2Vucw== 42595\nIHNsYXk= 42596\nU0hBUkU= 42597\nSFk= 42598\nIGJyYXds 42599\nIFByb2Jl 42600\nIG5vbmV4aXN0ZW50 42601\nIENsYXJlbmNl 42602\nIEJsYWNrYnVybg== 42603\nIHBvcnRhbHM= 42604\nIFJpdGE= 42605\nIFJlbWFpbg== 42606\nIExldmFudA== 42607\nIHRyaWNrZWQ= 42608\nIEZlcnJ5 42609\nYXZlcmluZw== 42610\nIFN0cmF3YmVycnk= 42611\nIEFuc3dlcnM= 42612\nIGhvcnJlbmRvdXM= 42613\nIEFtYW4= 42614\nU3VwcGxlbWVudA== 42615\nIFRvYWQ= 42616\nIHBlZWxlZA== 42617\nIG1hbm9ldXY= 42618\nIFV6YmVr 42619\nbW9uZHM= 42620\nIEhlY3Rvcg== 42621\nIDQwMg== 42622\ncGVlcw== 42623\nZml4ZXM= 42624\nIGRq 42625\nIHJlc3VtZXM= 42626\nIGFjY291bnRhbnQ= 42627\nIGFkdmVyc2l0eQ== 42628\nIGhhbXBlcmVk 42629\nIExhcnNvbg== 42630\nIGRvcGluZw== 42631\ncGFydHM= 42632\nSHVy 42633\nIGJlYXJkZWQ= 42634\nIHly 42635\nIFBsdWdpbg== 42636\n5aWz 42637\nIC8qKg== 42638\ncm9sbGV5 42639\nIHdhdGVyc2hlZA== 42640\nIFN1Ym1pc3Npb24= 42641\naWZsb3dlcg== 42642\nQVND 42643\nIGNob2ly 42644\nIHNjdWxwdHVyZXM= 42645\nbUE= 42646\naW5jcmVhc2luZw== 42647\nYWlp 42648\nIHNuZWFrZXJz 42649\nIGNvbmZyb250cw== 42650\nIEVsZXBoYW50 42651\nIEVsaXhpcg== 42652\nIHJlY2Fs 42653\nIFRUTA== 42654\nd2lkZ2V0 42655\nIFdheA== 42656\nIEdyYXlzb24= 42657\nIGhhaXJzdA== 42658\nIGh1bWlsaWF0ZWQ= 42659\nIFdBUk4= 42660\nYXBwaW5lc3M= 42661\nIFRUQw== 42662\nRnVlbA== 42663\nIHBvbGlv 42664\nIGNvbXBsZXhlcw== 42665\nIGJhYmU= 42666\nIFhJVg== 42667\nUEY= 42668\nKS5b 42669\nUGFydHM= 42670\nIDQzNQ== 42671\nTWVn 42672\nIFlhcmRz 42673\nIEFMUA== 42674\nIHllbGxz 42675\nIHByaW5jZXM= 42676\nIGJ1bGxpZXM= 42677\nIENhcGl0YWxpc20= 42678\nZXhlbXB0 42679\nRkFR 42680\nIFNwb25nZQ== 42681\nIEFsYQ== 42682\nIHBsZWFzYW50bHk= 42683\nIGJ1Zg== 42684\nIGRlbm90ZQ== 42685\nIHVucHVibGlzaGVk 42686\nIGtuZWVsaW5n 42687\nYXNjYQ== 42688\nIGxhcHNl 42689\nYWxpZW4= 42690\nOTk0 42691\nIHJlZmVyZWVz 42692\nIExhd3llcnM= 42693\nU2FudGE= 42694\nIHB1enpsaW5n 42695\nIFByb21ldGhldXM= 42696\nIFBoYXJhb2g= 42697\nIERlbGF5 42698\nIGZhY2lsaXRhdGVz 42699\nIENFUw== 42700\nIGpld2Vscw== 42701\nIGJvb2tsZXQ= 42702\nb25kaW5n 42703\nIHBvbGFyaXphdGlvbg== 42704\nIE1vcmFu 42705\nIFNhbGFk 42706\nIFNPUw== 42707\nIEFkdmljZQ== 42708\nUEhPVE9T 42709\nSUNBTg== 42710\naWF0dXJlcw== 42711\nZXhwcmVzcw== 42712\nIFdvbmRlcmxhbmQ= 42713\nIENPREU= 42714\nIENMQVNT 42715\nOTc1 42716\nIGdyZXA= 42717\nIERpZXNlbA== 42718\nIEdsYWM= 42719\nIT8i 42720\nIHJt 42721\nb2luZQ== 42722\nZGlzY3JpbWluYXRpb24= 42723\nIE51cnNl 42724\nbWFsbG93 42725\nIHZvcnRleA== 42726\nIENvbnNvcnRpdW0= 42727\nIGxhcmdlRG93bmxvYWQ= 42728\nc3RyYWlnaHQ= 42729\nYXVnaGxpbg== 42730\nR3JhZA== 42731\nIHB1YmxpY2l6ZWQ= 42732\nIFdhdmVz 42733\nIFJlZGQ= 42734\nIGZlc3Rpdml0aWVz 42735\nIE1hbmU= 42736\nYXJvdg== 42737\nIGZsZWV0aW5n 42738\nIERydW5r 42739\ndWdlbg== 42740\nQ2VsZQ== 42741\nIGNocm9tb3NvbWVz 42742\nIERPVA== 42743\nLSstKy0rLSs= 42744\nIGJ1c2llc3Q= 42745\nIEJlYXZlcg== 42746\nU3lyaWFu 42747\nIEt5cg== 42748\na2Fz 42749\nIENyb3NzUmVm 42750\nMTk1MA== 42751\nNzYwMQ== 42752\nIHJlcGVhbGluZw== 42753\nIFdpbm5lcnM= 42754\nIE1hY3Jv 42755\nIERPRA== 42756\nYmxhbmNl 42757\nU29ydA== 42758\nNjQx 42759\nIG1ldHJl 42760\nIERpcms= 42761\nIGdvZ2dsZXM= 42762\nIGRyYXdiYWNrcw== 42763\nIGNvbXBsYWluYW50 42764\nIGF1dGhvcml6aW5n 42765\nIGFudGl0cnVzdA== 42766\nb3BlcmF0ZWQ= 42767\nIG1haA== 42768\nIGV4YWdnZXJhdGlvbg== 42769\nQW1hemluZw== 42770\nIFNlcmFwaA== 42771\nIGhhemU= 42772\nd293 42773\nIGV4dGluZ3Vpc2hlZA== 42774\nIGNhbnlvbg== 42775\nIEJvc2g= 42776\nIHZlbnRz 42777\nIHNjcmFwZQ== 42778\nQ29ycmVjdA== 42779\nNDI2 42780\nIGF2Zw== 42781\nRGVtYW5k 42782\nIOKIvA== 42783\nIG1pY3JvYmlvdGE= 42784\nIn1dLCI= 42785\nIFN0ZXY= 42786\nQmlv 42787\nIFBsYW5lcw== 42788\nIHN1Z2dlc3RpdmU= 42789\nIGRlY2lwaGVy 42790\nIFJlZnVnZWU= 42791\nIEtlanJpd2Fs 42792\nIEdyZWVucGVhY2U= 42793\nIGRlY2xhc3M= 42794\nIFNvdW5kZXJz 42795\nIHRobw== 42796\nIGRlY3J5cHQ= 42797\nIGJydXNoaW5n 42798\nIEphbmVpcm8= 42799\naXBvcA== 42800\nU2k= 42801\nODc3 42802\nIEdlb2ZmcmV5 42803\nIGNwdQ== 42804\nIEhhemVs 42805\nIHZpZXdwb2ludHM= 42806\nIGNyaXNweQ== 42807\nIE5vdGlmaWNhdGlvbg== 42808\nIHNvbGRlcg== 42809\nIE1vZGVzdA== 42810\nIEhlbWlzcGhlcmU= 42811\nIGNhc3NldHRl 42812\naW5jbHVkZXM= 42813\nIGlkZW50aWZpZXJz 42814\nIENBTEw= 42815\naW5jZW50 42816\nVG9kZA== 42817\nIFN3ZWVw 42818\nIDMzNA== 42819\nYm9zcw== 42820\nIHNtaXI= 42821\nZ2lueA== 42822\nIHRvd25zaGlw 42823\nIGdyaWV2aW5n 42824\nIE1vc3F1ZQ== 42825\nTmV0ZmxpeA== 42826\nQVNFRA== 42827\nIE1pbGxlbm5pYWxz 42828\nb2NvbQ== 42829\nMTk2Nw== 42830\nIGJvbGRseQ== 42831\nc2xlZXA= 42832\nIGVzY2hl 42833\nYXJpanVhbmE= 42834\nIHN3aXJs 42835\nIFBlbmFs 42836\nIG5lZ2xpZ2VudA== 42837\nIFN0ZXBoZW5zb24= 42838\nS0VS 42839\nIFpvcm8= 42840\ncmlzaXM= 42841\nIGxvY2FsaXphdGlvbg== 42842\nIFNleW1vdXI= 42843\nIEFuZ2xpYw== 42844\ncmVkaXRhdGlvbg== 42845\ncHJvdGVjdGlvbg== 42846\nIFBhaWdl 42847\nIG9taXQ= 42848\nIFJvdXNzZQ== 42849\nIFR1Yg== 42850\nIGludml0YXRpb25z 42851\ndHR5 42852\nIG1vc3M= 42853\ncGh5c2ljYWw= 42854\nQ3JlZGl0cw== 42855\nIGFuYXJjaHk= 42856\nIGNoaWxkY2FyZQ== 42857\nIGx1bGw= 42858\nIE1law== 42859\nIExhbmd1YWdlcw== 42860\nbGF0ZXN0 42861\nIFNhbmZvcmQ= 42862\nIHVzYWJpbGl0eQ== 42863\nIGRpZmZ1c2U= 42864\nIERBVEE= 42865\nIHNwcml0ZXM= 42866\nIFZlZ2V0YQ== 42867\nIFByb21vdGlvbg== 42868\n44O844Kv 42869\ncmljdGluZw== 42870\nemVl 42871\nVHVya2lzaA== 42872\nIFREcw== 42873\ncHJvdmVu 42874\nNTcx 42875\nIHNtdWdnbGVycw== 42876\nNzA3MTA= 42877\nIHJlZm9ybWVk 42878\nIExvaXM= 42879\nIHVuZmw= 42880\nIFdJVEhPVVQ= 42881\nIFJldHVybmluZw== 42882\nYW5uaWU= 42883\nIFRvbWFz 42884\nRnJhbmM= 42885\nIFByb2ZpdA== 42886\nIFNFUlY= 42887\nIFJ1bWJsZQ== 42888\naWt1bWFu 42889\nZXNhbg== 42890\nIHRlc3RlcnM= 42891\nIGdhZGdldA== 42892\nIGJyYWNlbGV0 42893\nIEZTQQ== 42894\nY29tcG9uZW50 42895\nIHBhcmFtZWRpY3M= 42896\nIGphbg== 42897\nIFJlbWVt 42898\nIFNraW5uZXI= 42899\nIGxvdg== 42900\nIFF1YWtl 42901\ncm9tYQ== 42902\nIGZsYXNr 42903\nUHJpbmM= 42904\nIG92ZXJwb3dlcg== 42905\nIGxvZGdpbmc= 42906\nIEtLSw== 42907\ncmV0dGU= 42908\nIGFic29yYnM= 42909\nd3JvdGU= 42910\nICwi 42911\nS2luZ3M= 42912\nIEhhaWw= 42913\nIEZhbGxpbmc= 42914\neHRhcA== 42915\nIEhlbGVuYQ== 42916\naXJlbnM= 42917\nTGFycnk= 42918\nIHBhbXBobGV0 42919\nIENQUg== 42920\nR3Jv 42921\nIEhpcm9zaGltYQ== 42922\nIGhvbGlzdGlj 42923\nIi5b 42924\nIGRldGFjaG1lbnQ= 42925\nIGFzcGlyZQ== 42926\nIGNvbXBsaWNpdA== 42927\nIEdyZWVud29vZA== 42928\nIHJlc3Bhd24= 42929\nIFN0dXBpZA== 42930\nIEZpbmlzaGVk 42931\nZmFs 42932\nYmFzcw== 42933\nIGFiaG9y 42934\nIG1vY2tlcnk= 42935\nIEZlYXN0 42936\nVklERU8= 42937\nIGNvbnNlYw== 42938\nIEh1bmdyeQ== 42939\nUHVsbA== 42940\nIEh1c3Q= 42941\naXRhbmNl 42942\nP+OAjQ== 42943\nKS0t 42944\nIFBhcmFsbGVs 42945\nY29udg== 42946\nNDY5 42947\naGFhcg== 42948\nd2FudA== 42949\nUGFwZXI= 42950\nbWlucw== 42951\nIFRvcm8= 42952\nIFRSVU1Q 42953\nIFJhaQ== 42954\nRFc= 42955\nIFdpY2tlZA== 42956\nIExlcA== 42957\nIGZ1bmt5 42958\nIGRldHJpbWVudA== 42959\naW9zaXM= 42960\nYWNoZXY= 42961\nIGRlZ3JhZGU= 42962\naW1pbGF0aW9u 42963\nIHJldGFyZA== 42964\nIGZyYWdtZW50YXRpb24= 42965\nIGNvd2JveQ== 42966\nIFlQRw== 42967\nIEhBTA== 42968\nUGFyZW50cw== 42969\nIFNpZWc= 42970\nIFN0cmF1c3M= 42971\nIFJ1YmJlcg== 42972\n15A= 42973\nRnJhZw== 42974\nIHB0 42975\nIG9wdGlvbmFsbHk= 42976\nIFpJUA== 42977\nIFRyYW5zY3JpcHQ= 42978\nIER3ZWxs 42979\nODgy 42980\nTWVyYw== 42981\nIE1PVA== 42982\n44Ov44Oz 42983\nIGh1bnRz 42984\nIGV4ZWN1dGVz 42985\nSW5jbHVkZXM= 42986\nIGFjaWRpYw== 42987\nIFJlc3BvbnNpYmlsaXR5 42988\nIER1bWI= 42989\nd2Vp 42990\nQW5kZXJzb24= 42991\nIEphc3Blcg== 42992\naWdodG9u 42993\nYWJzb2x1dGVseQ== 42994\nQWR1bHQ= 42995\nIHBsdW5kZXI= 42996\nTW9ybmluZw== 42997\nIFRvdXJz 42998\nIERhbmU= 42999\nzro= 43000\nIFRFU1Q= 43001\nIEdpbmE= 43002\nIGNhbmluZQ== 43003\nYXdhbg== 43004\nIHNvY2lhbGlzdHM= 43005\nIFNvZGE= 43006\nIGltcGV0dXM= 43007\nIFN1cHBsZW1lbnRhcnk= 43008\nb2xpYXRo 43009\nIEtpbm5pa3VtYW4= 43010\nbWl0dGVkbHk= 43011\nc2Vjb25kcw== 43012\nIG9yZ2FuaXNlcnM= 43013\nIGRvY3VtZW50YXJpZXM= 43014\nVmFyaWFibGU= 43015\nR1JFRU4= 43016\nIHJlc29ydHM= 43017\nIGJyYWdnaW5n 43018\nIDM2OA== 43019\nQXJ0aXN0 43020\nd2s= 43021\nYmxlcnM= 43022\nVW5jb21tb24= 43023\nIFJldHJpZXZlZA== 43024\nIGhlY3RhcmVz 43025\nIHRveGlu 43026\ncmFuaw== 43027\nIGZhaXRocw== 43028\nIEdyYXBoaWM= 43029\nIHZlYw== 43030\nIExJQQ== 43031\nQWZyaWNhbg== 43032\nIGFyZGVudA== 43033\nZW5kaWFyeQ== 43034\nTGFrZQ== 43035\nIERPUw== 43036\nY2llbnRpb3Vz 43037\nIE9rYXdhcnU= 43038\nIEFsbHk= 43039\nIFRpbWVsaW5l 43040\nRGFzaA== 43041\nIElj 43042\nY29udGludWU= 43043\nIHRpZHk= 43044\nIGluc3RpbmN0aXZlbHk= 43045\nIFBvc3NpYmx5 43046\nIE91dGRvb3I= 43047\nIFdvdWxkbg== 43048\nIGxpY2g= 43049\nIEJyYXk= 43050\nIEFY 43051\nIMOJ 43052\nICsj 43053\nXCc= 43054\nRGlyZWN0b3J5 43055\nYWJpZGluZw== 43056\nIGZlcmFs 43057\naWNhdGl2ZQ== 43058\nYnV0dA== 43059\nIHBlcnZlcnNl 43060\nU2FsdA== 43061\nIHdhcnBlZA== 43062\nIG5pbmV0ZWVu 43063\nIGNhYmluZXRz 43064\nIHNyZkF0dGFjaA== 43065\nIFNsb2Fu 43066\nIHBvd2VyaW5n 43067\ncmVnYXRpb24= 43068\nRmxpZ2h0 43069\nc2V2ZXJl 43070\nIHN0cmVu 43071\nIGNvZw== 43072\nYXBhY2hl 43073\nIOKd 43074\nIGNhZmV0ZXJpYQ== 43075\ncGFjZXM= 43076\nIEdyaW1vaXJl 43077\ndXRvbml1bQ== 43078\nIHJhaW5pbmc= 43079\nIGNpcmNsaW5n 43080\nIGxpbmViYWNrZXJz 43081\nY3JlZGl0 43082\nIHJlcGF0cmk= 43083\nIENhbWRlbg== 43084\nbGljZW5zZQ== 43085\nIGx5cmlj 43086\nIGRlc2NyaXB0b3I= 43087\nIHZhbGxleXM= 43088\nIHJlcQ== 43089\nIGJhY2tzdGFnZQ== 43090\nIFByb2hpYml0aW9u 43091\nIEtldA== 43092\nT3BlbmluZw== 43093\nU3lt 43094\n5pa5 43095\nIHNlcnZpbmdz 43096\nIG92ZXJzZWVu 43097\nIGFzdGVyb2lkcw== 43098\nIE1vZHM= 43099\nIFNwcmluZ2Vy 43100\nIENvbnRhaW5lcg== 43101\n6Ls= 43102\nIE1lbnM= 43103\nIG11bHRpbQ== 43104\nIGZpcmVmaWdodGVy 43105\ncGVj 43106\nIGNobG9yaW5l 43107\n0Lw= 43108\nZW5kaQ== 43109\nIHNwYXJpbmc= 43110\nIHBvbHlnYW15 43111\nIFJO 43112\nIFBlbGw= 43113\nIHRpZ2Vycw== 43114\nIGZsYXNoeQ== 43115\nIE1hZGFtZQ== 43116\nU3dvcmQ= 43117\nIHByZWZyb250YWw= 43118\nIHByZXJlcXVpc2l0ZQ== 43119\ndWNh 43120\nIHdpZmk= 43121\nIG1pc2NvbmNlcHRpb24= 43122\nIGhhcnNobHk= 43123\nIFN0cmVhbWluZw== 43124\nb3RvbQ== 43125\nIEdpdWxpYW5p 43126\nZm9vdGVk 43127\nIHR1YmluZw== 43128\naW5kaXZpZHVhbA== 43129\nemVr 43130\nbnVjbGVhcg== 43131\nbW9s 43132\nIHJpZ2h0ZnVs 43133\nNDkz 43134\nIHNwZWNpYWxpemF0aW9u 43135\nIHBhc3Npb25hdGVseQ== 43136\nIFZlbG9jaXR5 43137\nIEF2YWlsYWJpbGl0eQ== 43138\nVGVubg== 43139\nIGxhdGNo 43140\nIFNvbWVib2R5 43141\nIGhlbGl1bQ== 43142\nY2xhdw== 43143\nIGRpcHBpbmc= 43144\nWFhY 43145\nIGludGVycGVyc29uYWw= 43146\nNzEw 43147\nIHN1YnRlcg== 43148\nIGJpb2xvZ2lzdHM= 43149\nIExpZ2h0aW5n 43150\nIG9wdGlj 43151\nIGRlbmlt 43152\nZW5kb24= 43153\nIENvcm0= 43154\nIDM0MQ== 43155\nIENvdXA= 43156\nIGZlYXJsZXNz 43157\nIGFsb3Q= 43158\nIENsaWZmb3Jk 43159\nIFJ1bnRpbWU= 43160\nIFByb3Zpc2lvbg== 43161\ndXBkYXRlZA== 43162\nbGVuZWNr 43163\nIG5ldXJvbg== 43164\nIGdyYWRpbmc= 43165\nIEN0 43166\nc2VxdWVuY2U= 43167\naW5pYQ== 43168\nY29uY2VwdA== 43169\nIHJvYXJpbmc= 43170\ncml2YWw= 43171\nIENhdWNhc2lhbg== 43172\nIG1vbm9n 43173\na2V5ZXM= 43174\nIGFwcGVsbGF0ZQ== 43175\nIGxpYWlzb24= 43176\nRVN0cmVhbUZyYW1l 43177\nIFBsdW0= 43178\nIS4= 43179\nIHNwaGVyaWNhbA== 43180\nIHBlcmlzaGVk 43181\nIGJsb3Q= 43182\nIGJlbmNoZXM= 43183\nIDQxMQ== 43184\nIHBpb25lZXJlZA== 43185\nIGh1cmxlZA== 43186\nSmVubmlmZXI= 43187\nIFlvc2VtaXRl 43188\nQ2hhaXI= 43189\nIHJlZWZz 43190\nIGVsZWN0b3I= 43191\nIEFudGhlbQ== 43192\nNjUy 43193\nIHVuaW5zdGFsbA== 43194\nIGltcGVkZQ== 43195\nIGJsaW5raW5n 43196\nIGdvdG8= 43197\nRGVjcmU= 43198\nQXJlbg== 43199\nIHN0YWJpbGl6YXRpb24= 43200\nIERpc2FibGVk 43201\nIFlhbnVrb3Z5Y2g= 43202\nIG91dGxhd2Vk 43203\nIFZlbnR1cmE= 43204\ndGVuZXNz 43205\nIHBsYW50YXRpb24= 43206\nIHlhY2h0 43207\nIEh1YXdlaQ== 43208\nIHNvbHZlbnQ= 43209\nIGdyYWNpb3Vz 43210\nIGN1cmlvdXNseQ== 43211\nIGNhcGFjaXRvcg== 43212\nIGN4 43213\nIFJlZmxleA== 43214\nUGh5cw== 43215\nIENm 43216\ncHRpbg== 43217\nY29uc2VydmF0aXZl 43218\nIGludm9jYXRpb24= 43219\nY291cg== 43220\nRk4= 43221\nIE5ld2x5 43222\nSG91cg== 43223\nQXNpYW4= 43224\nIExlYWRpbmc= 43225\nIEFlcm9zcGFjZQ== 43226\nQW5uZQ== 43227\nIHByZW5hdGFs 43228\nIGRldGVyaW9yYXRpbmc= 43229\nSENS 43230\nIE5vcm1hbmR5 43231\nb2xpbmk= 43232\nIEFtYnJv 43233\nOTEw 43234\nIHNldGJhY2tz 43235\nIFRSRQ== 43236\nIHNpZw== 43237\nIFNjb3VyZ2U= 43238\nNTk3 43239\nNzk4 43240\nR2FtZXBsYXk= 43241\nIG1zZWM= 43242\nTVg= 43243\nIHByaWNleQ== 43244\nIExMUA== 43245\nYWtlcnU= 43246\nIG92ZXJhcmNoaW5n 43247\nIEJhbGU= 43248\nIHdvcmxkbHk= 43249\nQ2xhcms= 43250\nIHNjZW5pYw== 43251\nIGRpc2xpa2Vk 43252\nIENvbnRyb2xsZWQ= 43253\nVGlja2V0cw== 43254\nIEVX 43255\nYWJpZXM= 43256\nIFBsZW50eQ== 43257\nTm9uZXRoZWxlc3M= 43258\nIGFydGlzYW4= 43259\nVHJhbnNmZXI= 43260\nIEZhbW91cw== 43261\nIGluZmllbGQ= 43262\nYmxleQ== 43263\nIHVucmVzb2x2ZWQ= 43264\nIE1MQQ== 43265\n44KC 43266\nQ29ycmVjdGlvbg== 43267\nIGRlbW9jcmF0 43268\nIE1vcmVubw== 43269\ncm9jYWw= 43270\naWxpbmdz 43271\nIHNhaWxvcg== 43272\nIHJpZmU= 43273\naHVuZw== 43274\nIHRyb3Blcw== 43275\nIHNuYXRjaGVk 43276\nIExJTg== 43277\nIEJpYg== 43278\nRVNB 43279\nIFByZXY= 43280\nIENhbWVs 43281\ncnVudGltZQ== 43282\nIG9ibm94aW91cw== 43283\nNDM3 43284\nIHN1bW1lcnM= 43285\nIHVuZXhwbGFpbmVk 43286\nIFdhbHRlcnM= 43287\nY2FsaWJlcg== 43288\nIGd1bGw= 43289\nIEVuZHVyYW5jZQ== 43290\n5L2c 43291\nIDM0Nw== 43292\nSXJpc2g= 43293\nIGFlcm9iaWM= 43294\nIGNyYW1wZWQ= 43295\nIEhvbm9sdWx1 43296\n4Kk= 43297\ndXNlcmM= 43298\nZWNhc3Q= 43299\nQUNZ 43300\nIFF1ZXJ5 43301\n44K544OI 43302\nQmV0YQ== 43303\nIHN1c2NlcHRpYmlsaXR5 43304\nIFNoaXY= 43305\nIExpbWJhdWdo 43306\nIMOW 43307\nIE5YVA== 43308\nIE11c3M= 43309\nIEJyaXRvbnM= 43310\nRVNDTw== 43311\nRUdJTg== 43312\nICUl 43313\nIHNlY2Vzc2lvbg== 43314\nIFBhdHJvbg== 43315\nIEx1YQ== 43316\nbmFpcmVz 43317\nIEpQTW9yZ2Fu 43318\ndXNi 43319\nb2N5dGU= 43320\nIGNvdW5jaWxsb3Jz 43321\nIExpYW5n 43322\nZmFybQ== 43323\nIG5lcnZvdXNseQ== 43324\nIGF0dHJhY3RpdmVuZXNz 43325\nIEtvdg== 43326\nanVtcA== 43327\nUGxvdA== 43328\nIHN0YWlucw== 43329\nIFN0YXR1ZQ== 43330\nIEFwb3N0bGVz 43331\naGV0ZXI= 43332\nIFNVUFBPUlQ= 43333\nIG92ZXJ3aGVsbQ== 43334\nWUVT 43335\nIDI5MQ== 43336\nZGVuc2l0eQ== 43337\nIHRyYXBwaW5n 43338\nTWl0 43339\nIGZpZGU= 43340\nIFBhbWVsYQ== 43341\nYXRsYW50aWM= 43342\nRGFtbg== 43343\nIHB0cw== 43344\nT1BB 43345\nIHNlcnZpY2luZw== 43346\nIG92ZXJmbG93aW5n 43347\ndWxv 43348\nIEVyaXQ= 43349\ndGlja2V0 43350\nbGlnaHRpbmc= 43351\nIEhtbQ== 43352\n44O844Or 43353\naW1vdG8= 43354\nIGNodWNrbGU= 43355\nNDIz 43356\n44GV 43357\nc2hhcGU= 43358\nIHF1ZXVlcw== 43359\nIGFuY2hvcnM= 43360\n44K844Km44K5 43361\nRmVy 43362\nIGF3b2tl 43363\nIDY2Ng== 43364\naGFuZHM= 43365\nIGRpdmVyZ2VuY2U= 43366\nIDUwNQ== 43367\nVGlwcw== 43368\nIGRlcG90 43369\nIHNrZXc= 43370\nIERlbGl2ZXI= 43371\nb3BvdA== 43372\nIGRpdnVs 43373\nIEVC 43374\ndW5zaWduZWQ= 43375\nIFVuaQ== 43376\nWGJveA== 43377\nIGZvcmtz 43378\nIDcwMg== 43379\n5a8= 43380\nIHByb21vdGVycw== 43381\nIFZhcG9y 43382\nIGxldmllZA== 43383\nc2xvdA== 43384\nIHBpZ21lbnQ= 43385\nIGN5bGluZGVycw== 43386\nQ1JF 43387\nIHNuYXRjaA== 43388\nIHBlcnBldHVhbGx5 43389\nIGxpY2tpbmc= 43390\nIEZlZXQ= 43391\nIEtyYWtlbg== 43392\nIEhvbGRlbg== 43393\nIENMU0lE 43394\nbXI= 43395\nIHByb2plY3Rvcg== 43396\nIGRlbm90ZXM= 43397\nIGNoYXBlbA== 43398\nIFRvcnJlbnQ= 43399\nYmxlcg== 43400\nUm91dGU= 43401\nIERlZmVuZGFudA== 43402\nIFB1Ymxpc2hlcnM= 43403\nIE1hbGVz 43404\nIElubm92 43405\nIEFnaWxpdHk= 43406\ncml0ZXI= 43407\ndHltb2xvZ3k= 43408\nc3RvcmVz 43409\nTGluZA== 43410\nIGZvbGx5 43411\nIFp1cmljaA== 43412\nQmxl 43413\nIG51cnR1cmU= 43414\nIGNvYXN0bGluZQ== 43415\ndWNoaW4= 43416\nRG9taW4= 43417\nIGZyaXZvbA== 43418\nIENvbnNvbGlk 43419\ncmVzdWx0cw== 43420\nTUo= 43421\nIHBoeWxvZ2Vu 43422\nIGhhdWxlZA== 43423\nIFdpbGV5 43424\nIEplc3NpZQ== 43425\nIFByZXBhcmU= 43426\nIEVwcw== 43427\nIHRyZWFzdXJlcg== 43428\nSUFT 43429\nIGNvbG9uaXN0cw== 43430\nIGludW5k 43431\nIFdXRg== 43432\nIENvbnZlcnRlZA== 43433\nNjAwMA== 43434\nb3V0c2lkZQ== 43435\nIEFwcGVhcmFuY2U= 43436\nIFJlbGlj 43437\nIE1pc3Rlcg== 43438\nc2F3 43439\nIHJlc3VsdGFudA== 43440\nIGFkamVjdGl2ZQ== 43441\nIExhdXJlbA== 43442\nIEhpbmRp 43443\nYmRh 43444\nUGVhY2U= 43445\nIHJlYmlydGg= 43446\nIG1lbWJyYW5lcw== 43447\nIGZvcndhcmRpbmc= 43448\nIGNvbGxpZGVk 43449\nIENhcm9seW4= 43450\nS2Fuc2Fz 43451\nNTk5 43452\nIFNvbGlkR29sZE1hZ2lrYXJw 43453\nQmVjaw== 43454\nIHN0cmVzc2luZw== 43455\nIEdvbw== 43456\nIENvb3BlcmF0aXZl 43457\nIGZz 43458\nIEFyY2hpZQ== 43459\nTGl0ZXI= 43460\nIEtsb3Bw 43461\nSmVycnk= 43462\nIGZvb3R3ZWFy 43463\nV2FycmVu 43464\nIHNjcmVl 43465\naGFyZQ== 43466\nVW5kZXJzdGFuZGluZw== 43467\nUGVk 43468\nIGFudGhvbG9neQ== 43469\nIEFubm91bmNl 43470\nTWVnYQ== 43471\nIGZsdWVudA== 43472\nIGJvbmRhZ2U= 43473\nIERpc2NvdW50 43474\naWxpYWw= 43475\nQ2FydA== 43476\nIE5pZ2h0bWFyZXM= 43477\nU2hhbQ== 43478\nIEJvbGw= 43479\ndXNzaWU= 43480\nSHR0cA== 43481\nQXRsYW50YQ== 43482\nIHVucmVjb2du 43483\nIEJpZA== 43484\nIHVuZGVyZ3JhZA== 43485\nIGZvcmdpdmluZw== 43486\nIEdsb3Zlcg== 43487\nQUFBQUFBQUE= 43488\nNDQ1 43489\nVkc= 43490\ncGFpbw== 43491\na2lsbGVycw== 43492\nIHJlc3BvbnNpYmx5 43493\nIG1vYmlsaXpl 43494\nIGVmZmVjdGVk 43495\nIEx1bWlu 43496\nIGthbGU= 43497\nIGluZnJpbmdpbmc= 43498\nYW5ub3VuY2Vk 43499\nIGZpdHQ= 43500\nYmF0Y2g= 43501\nIFRhY2tsZQ== 43502\nIExpbWU= 43503\nIEFQUA== 43504\ndWtlbWlh 43505\nIHJ1Ynk= 43506\nIGV4b25lcg== 43507\nIENhc3VhbA== 43508\nMDcw 43509\nIHBlbHZpYw== 43510\nIGF1dG9tYXRl 43511\nIEtlYXI= 43512\nIENvYXN0YWw= 43513\nIGNyZWVk 43514\nIGJvcmVkb20= 43515\nIFN0dW4= 43516\ncmlvdHQ= 43517\ngo4= 43518\nIHJlZ2VuZXJhdGU= 43519\nIGNvbWVkaWFucw== 43520\nIE9QRVI= 43521\nU3BvbnM= 43522\naWRpdW0= 43523\nb25pcw== 43524\nTG9jYXRlZA== 43525\nMDU3 43526\nIHN1c3BlbnNl 43527\nIERhdGluZw== 43528\nQ2Fzcw== 43529\nIG5lb2NvbnM= 43530\nIFNoaW56bw== 43531\nIGF3b2tlbg== 43532\nY2hyaXN0 43533\nIE1lc3NhZ2Vz 43534\nYXR0bGVk 43535\nIFNwcmF5 43536\nIFNwaWNl 43537\nQ1c= 43538\nIHNoaWVsZGluZw== 43539\nIEdhdWw= 43540\nQW1pZA== 43541\nIHBhcmFtaWxpdGFyeQ== 43542\nIG11bHRpZg== 43543\nIFRhbm5lcg== 43544\naWxr 43545\nIGdvZGRhbW4= 43546\nZ2VtZW50cw== 43547\nIGJlZnJpZW5k 43548\nbW9iaQ== 43549\nIDM4OA== 43550\nZm9sZGVy 43551\nYWNjYQ== 43552\nIGluc2lu 43553\nZ2Fw 43554\nTmV2 43555\nZmlmdGg= 43556\nIHBzeWNoaWF0cnk= 43557\nYmFua3M= 43558\nVEhJUw== 43559\nIGhhcmI= 43560\nYWNxdQ== 43561\nIGZhY2FkZQ== 43562\nIFBvd2VyUG9pbnQ= 43563\nODAz 43564\nIGJsdWZm 43565\nU2hhcmVz 43566\nIGZhdm9yaW5n 43567\nRWxpemFiZXRo 43568\nw43DjQ== 43569\nIHJhbmdlcg== 43570\nNzcy 43571\nIEFyY2hl 43572\naGFr 43573\nIEdlbmV0aWNz 43574\nIEZFTUE= 43575\nIGV2b2x2ZXM= 43576\nIGVzdGU= 43577\nIFBldHM= 43578\nIE3DqQ== 43579\nIEludGVyZXN0aW5n 43580\nIENhbnRlcmJ1cnk= 43581\nY2hhcHRlcg== 43582\nIFN0YXJmbGVldA== 43583\nU3BhbmlzaA== 43584\nIGRyYXdiYWNr 43585\nIE5vcndpY2g= 43586\nOTcw 43587\nbm9ydGg= 43588\nYWdhbmRh 43589\nIHRyYW5zZm9ybWF0aXZl 43590\ncmFtaWRz 43591\nYmlvbG9neQ== 43592\nYWRheQ== 43593\nIHByb3BhZ2F0aW9u 43594\nIEdhbW1h 43595\nIERlbmlzZQ== 43596\nIENhbGN1bGF0b3I= 43597\nZW50aW1lcw== 43598\nIEJldHQ= 43599\nIGFwcGVuZGl4 43600\nIEhERA== 43601\nQUtJTkc= 43602\nIHN0aWdtYXQ= 43603\nIGhvbHN0ZXI= 43604\nIG9yZGluYXJpbHk= 43605\nQ2hhbmNl 43606\nIENvbnRyYXJ5 43607\nIGFkaGVzaXZl 43608\nIGdhdGhlcnM= 43609\nNjEy 43610\ncmVhdQ== 43611\nb255bXM= 43612\nZXdheXM= 43613\nIGluZHVjZXM= 43614\nIGludGVyY2hhbmdlYWJsZQ== 43615\nc2Vt 43616\nV2hpdA== 43617\nIHRyYW5jZQ== 43618\nIGluY29ycG9yYXRpb24= 43619\nIEV4dHJhcw== 43620\nRmluYW5jaWFs 43621\nIGF3a3dhcmRseQ== 43622\nIFN0dXJnZW9u 43623\nIEhZ 43624\nTm9ybWFsbHk= 43625\nIEVuZGluZw== 43626\nIEFzc2lzdA== 43627\nZW5jcnlwdGVk 43628\nIHN1Ymp1Zw== 43629\nIG5vcw== 43630\nIGZhbmF0aWM= 43631\nQ3Vi 43632\nQ1U= 43633\nPyIu 43634\nIGlycmV2ZXJzaWJsZQ== 43635\n5YI= 43636\nMDMx 43637\nIEhBUg== 43638\nc3ByZWFk 43639\ndWxpYQ== 43640\nPSQ= 43641\nU2NvcGU= 43642\nTG90cw== 43643\nIGxpZmVzdHlsZXM= 43644\nb2xvbg== 43645\nIGZlZHM= 43646\nIGNvbmdyYXR1bGF0ZQ== 43647\nd2Via2l0 43648\nIGluZGlzdGluZ3Vpc2hhYmxl 43649\nIFN3aW5n 43650\nIGNvbW1hbmRtZW50cw== 43651\ncXVpbGE= 43652\nYWJlbGxh 43653\nbWV0aHls 43654\nYW5uYWJpbg== 43655\nIG92ZXJl 43656\nIGxvYnN0ZXI= 43657\nIFFVRVNU 43658\nIENPTlRJTg== 43659\nYmVybmF0b3JpYWw= 43660\nOjo6Ojo6Ojo= 43661\nIFRyYXZl 43662\nIFNhbW9h 43663\nQU5J 43664\nNzUy 43665\n0LQ= 43666\ndXNlcmNvbnRlbnQ= 43667\nIE1vZGVyYXRl 43668\neWVhaA== 43669\nIEtpdHQ= 43670\nIHdlZQ== 43671\nIHN0dWZmaW5n 43672\nIEludGVydmVudGlvbg== 43673\nIERpZ24= 43674\nIHdhcmVob3VzZXM= 43675\nIEZpamk= 43676\nIHBlbGxldHM= 43677\nIHRha2Vhd2F5 43678\nIFRBQkxF 43679\nIENsYXNzaWNhbA== 43680\nY29sbGVjdGlvbg== 43681\nIGxhbmRmYWxs 43682\nIE11c2NsZQ== 43683\nIHNldHRsZXM= 43684\nIEFEVg== 43685\nIDM0NA== 43686\nTGF1cmE= 43687\nIGZhcmVk 43688\nIFBhcnRpYWw= 43689\nNDM2 43690\nb3NzaWJpbGl0eQ== 43691\nIERhbHk= 43692\nIFRhcmFudA== 43693\nIEZ1amk= 43694\nYW1s 43695\nY2VuY2U= 43696\nNTUx 43697\nIFByb2NlZHVyZXM= 43698\nIE9DRA== 43699\nIFVE 43700\ndGlu 43701\nUVVJ 43702\nYWNobw== 43703\nNDM4 43704\nIGdsaXRjaGVz 43705\nIGVuY2hhbnRtZW50 43706\nIGNhbGN1bGF0ZXM= 43707\nSVJP 43708\nIEh1YQ== 43709\nYWx5c2Vz 43710\nIExpZnQ= 43711\ndW1v 43712\nIGxlYXB0 43713\nIGh5cG90aGVzaXplZA== 43714\nIEd1c3Rhdg== 43715\naXRhbnM= 43716\nVkVSU0lPTg== 43717\n5qA= 43718\nUm9nZXI= 43719\nIHJhbmQ= 43720\nIEFkYXB0ZXI= 43721\nIDMzMQ== 43722\nIFBldGl0aW9u 43723\na2llcw== 43724\nTWFycw== 43725\nIHVuZGVyY3V0 43726\nemVlcw== 43727\nIEx5b25z 43728\nIERIQ1A= 43729\nTWlzc2luZw== 43730\nIHJldGlyZWVz 43731\nIGluc2lkaW91cw== 43732\nZWxp 43733\nPik= 43734\nLuOAjQ== 43735\nIGZpbmFsaXN0cw== 43736\nIEF1cmU= 43737\nIGFjY3VzZXI= 43738\nIHdhc3Rlcw== 43739\nIFlz 43740\nIExvcmk= 43741\nIGNvbnN0aXR1ZW5jaWVz 43742\nIHN1cHBlcg== 43743\nIG1heWhlbQ== 43744\nb3Jhbmdl 43745\nIG1pc3BsYWNlZA== 43746\nIG1hbmFnZXJpYWw= 43747\nIGV4Y2U= 43748\nIENMSQ== 43749\nIHByaW1hbA== 43750\nIExlbnQ= 43751\nQ3J5c3RhbA== 43752\naG92ZXI= 43753\nIE5UUw== 43754\nZW5kdW0= 43755\nIGR3 43756\nIEFsYw== 43757\nbm9zdGlj 43758\nIHByZXNlcnZlcw== 43759\nIFRzYXJuYWV2 43760\nIHRyaXBsZWQ= 43761\ncmVsYXRpdmU= 43762\nQXJjYWRl 43763\na2lsbGluZw== 43764\nIFdFRUs= 43765\nIEhhbm5h 43766\nRHVzdA== 43767\nQ29tcGxldGVk 43768\ngas= 43769\nIGFwcHJvdmVz 43770\nIFN1cmY= 43771\nIEx1dGhlcmFu 43772\ndmVuYW50cw== 43773\nIHJvYmJlcmllcw== 43774\nd2VpZ2h0cw== 43775\nc29mdHdhcmU= 43776\nYXRhbmE= 43777\ndWdhbA== 43778\nIGdyYXZ5 43779\nIENhbmNl 43780\nT0xPR1k= 43781\nbHlhaw== 43782\nVG9uaWdodA== 43783\nIHVudmVpbA== 43784\nIDE5MDQ= 43785\nIE1pbmlvbg== 43786\nZW50aW91cw== 43787\nc3RpY2U= 43788\ncGFja2FnZXM= 43789\nIEdFQVI= 43790\nIGdvbA== 43791\nIEh1dGNoaW5zb24= 43792\nIFByb2Zlc3Npb24= 43793\nIEdVTg== 43794\nIERpZmZlcmVuY2U= 43795\nIFRzdWt1eW9taQ== 43796\nIExlc2JpYW4= 43797\nNjcw 43798\nIGZ1Z2l0aXZl 43799\nIFBsYW5ldGFyeQ== 43800\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 43801\nIGFjY3J1ZWQ= 43802\nIGNoaWNrcw== 43803\nIHN0b3Bw 43804\nIGJsb2NrZXJz 43805\nQ29k 43806\nIGNvbW1lbnRlcnM= 43807\nIFNvbWV3aGVyZQ== 43808\nIFBob3RvZ3JhcGhlcg== 43809\ndGhlbWU= 43810\nIG1heW9yYWw= 43811\nd3U= 43812\nIGFudGVubmFz 43813\nIHJldmFtcGVk 43814\nIFN1YmplY3Rz 43815\naXTDqQ== 43816\naW11cmE= 43817\nIGVudHJhbmNlcw== 43818\nbGl0ZXJhbGx5 43819\nIHRlbmV0cw== 43820\nIE9NRw== 43821\nIE1QSA== 43822\nIERvbmtleQ== 43823\nIE9mZmVuc2U= 43824\nICIr 43825\nU25hcA== 43826\nIEFGQg== 43827\nIGFuaW1hdGU= 43828\nIFNvZA== 43829\nSGlzcGFuaWM= 43830\nIGluY29uc2lzdGVuY3k= 43831\nRGI= 43832\nRlk= 43833\nRXhwb3J0 43834\nIGFwZQ== 43835\nIHBlYXJs 43836\naWJlbA== 43837\nIFBBQ3M= 43838\nIHtc 43839\nIGFjdHU= 43840\nIEhTQkM= 43841\nY2FtcHVz 43842\nIHBheW9mZg== 43843\nIGRlaXRpZXM= 43844\nIE5hdG8= 43845\nb3VwbGU= 43846\nIGNlbnNvcmVk 43847\nIENsb2p1cmU= 43848\nIGNvbmZvdW5kaW5n 43849\nZW5p 43850\nIHJlY2tvbg== 43851\nb3BoZQ== 43852\nIHNwb3R0aW5n 43853\nIHNpZ25pZmllcw== 43854\nIHByb3BlbA== 43855\nIGZlc3RpdmU= 43856\nU3VnZ2VzdA== 43857\nIHBsZWRnaW5n 43858\nIEJlcm1hbg== 43859\nIHJlYmVsbGlvdXM= 43860\nIG92ZXJzaGFkb3dlZA== 43861\nIGluZmlsdHJhdGVk 43862\nam9icw== 43863\nNjcy 43864\nIHNjYWxhYmxl 43865\nIGRvbWluaW9u 43866\nIE5ld2ZvdW5kbGFuZA== 43867\nIE1lYWRvdw== 43868\nIHBhcnRpdGlvbnM= 43869\nQU1J 43870\nIHN1cHBsZW1lbnRhcnk= 43871\nc3RydW1lbnQ= 43872\nIGhhaXJ5 43873\nIHBlcnBldHVhdGU= 43874\nIG51dHNoZWxs 43875\nIFBvdGF0bw== 43876\nIEhvYmJpdA== 43877\nIGN1cnNlcw== 43878\nRmxvYXQ= 43879\nIHF1aWV0ZXI= 43880\nIGZ1ZWxpbmc= 43881\nIGNhcHN1bGVz 43882\nIEx1c3Q= 43883\nIEhhdW50ZWQ= 43884\nRXhlY3V0aXZl 43885\nIGNoaWxkYmlydGg= 43886\nR3Jl 43887\nIHJhZGlhbnQ= 43888\n5Y4= 43889\nIG1hbGxz 43890\nIGluZXB0 43891\nIFdhcnJhbnR5 43892\nIHNwZWN0YXRvcg== 43893\nRWg= 43894\ndGhlbnM= 43895\nIGN1bG1pbmF0aW5n 43896\n5qk= 43897\nYXJ5YQ== 43898\n44Ku 43899\naWxpdGFyaWFu 43900\nIE9SSUc= 43901\nIFNwZW5kaW5n 43902\ncHRpdmVz 43903\nIFNpcmVu 43904\nIFJlY29yZGluZw== 43905\nYXluZQ== 43906\nIHZpbQ== 43907\nIHNwcmFuZw== 43908\nVGFuZw== 43909\nIE1GVA== 43910\nbW9ybmluZw== 43911\nIFdlZWQ= 43912\nbXBlZw== 43913\nY2Vzc2lvbg== 43914\nIENodW5n 43915\nNzMw 43916\nd2FybmluZw== 43917\nNTYy 43918\naGFuZGVkbHk= 43919\nUG9vcg== 43920\nUG9saXRpY3M= 43921\nOiM= 43922\nIHBpYW4= 43923\nIGZlY2Vz 43924\nIERvY3VtZW50YXRpb24= 43925\nIGJhbmlzaGVk 43926\nIDM5OQ== 43927\nIEFSQw== 43928\nIGhlaW5vdXM= 43929\nSmFrZQ== 43930\nIEFtaXI= 43931\nd2F5bmU= 43932\ndnJl 43933\nb3NoZW5rbw== 43934\nIG5vdGVib29rcw== 43935\nIGZvdW5kYXRpb25hbA== 43936\nIG1hcnZlbG91cw== 43937\naXh0YXBl 43938\nIHdpdGhkcmF3YWxz 43939\nIGhvcmRl 43940\nIERoYWJp 43941\naXNhYmxl 43942\nIEtE 43943\nIGNvbnRhZ2lvdXM= 43944\nIERpcA== 43945\nIEFycm93cw== 43946\nIHByb25vdW5z 43947\nIG1vcnBoaW5l 43948\nIEJVUw== 43949\nNjgy 43950\nIGtvc2hlcg== 43951\nZmluaXNoZWQ= 43952\nIEluc3RydW1lbnRz 43953\nIGZ1c2Vk 43954\neWRlbg== 43955\nIFNhbG1vbg== 43956\nRmFi 43957\nYWZmZWN0ZWQ= 43958\nS0VO 43959\nQ0VOVA== 43960\nRG9tYWlu 43961\nIHBva2Vtb24= 43962\nIERyaW5raW5n 43963\nR3Jvd2luZw== 43964\nIEludmVzdGlnYXRpdmU= 43965\nIEFldGhlcg== 43966\nZW1p 43967\nIHRhYmxvaWQ= 43968\nIHJlcHJv 43969\nIE5vdHdpdGhzdGFuZGluZw== 43970\nIEJlcnNlcmtlcg== 43971\nIGRyYW1hcw== 43972\nIGNsaWNow6k= 43973\nIGJ1bmc= 43974\nIFVSSQ== 43975\nIERvcw== 43976\nMDQ0 43977\nIHBhc3RvcnM= 43978\nIGxz 43979\nIGFjcnlsaWM= 43980\nYXVudHM= 43981\nRWR3YXJk 43982\nIG1ham9yaXRpZXM= 43983\nQmFuZw== 43984\nIGZpZWxkaW5n 43985\nIFJlcGxhY2VtZW50 43986\nIEFsY2hlbXk= 43987\ncHBhcmQ= 43988\nIFJvbWVv 43989\nIFNhbmN0 43990\nIExhdnJvdg== 43991\naWJibGU= 43992\nSW5zdHJ1Y3Q= 43993\nIGltcHJhY3RpY2Fs 43994\nIFBsYXlib3k= 43995\nY2VwaGFs 43996\nIHN3YXBz 43997\nIGthbg== 43998\nIFRoZW8= 43999\nIGlsbHVzdHJhdGluZw== 44000\nIGRpc21hbnRsZWQ= 44001\nIFRyYW5zZ2VuZGVy 44002\nIEd1dGg= 44003\nVUdI 44004\nIHRyaXVtcGhhbnQ= 44005\nIGVuY29tcGFzcw== 44006\nIGJvb2ttYXJr 44007\ndWRkaW4= 44008\namVy 44009\nIHByZWRpY2F0ZQ== 44010\nRVNI 44011\nIHdoZW5jZQ== 44012\nIEFCRQ== 44013\nIG5vbnByb2ZpdHM= 44014\nU2VxdQ== 44015\nIGRpYWJldGlj 44016\nIHBlbmQ= 44017\nIGhlYXJ0ZmVsdA== 44018\nc2hp 44019\nIGludGVyYWN0cw== 44020\nIFRlbGVjb20= 44021\nIGJvbWJhcmRtZW50 44022\nZGVwZW5kaW5n 44023\nIExvd3J5 44024\nIEFkbWlzc2lvbg== 44025\nIEJsb29taW5n 44026\ndXN0cmF0aW9u 44027\nZW5lZ2dlcg== 44028\nQnJldw== 44029\nIG1vbHRlbg== 44030\nIE5lcmQ= 44031\nUElO 44032\n4paA 44033\nYXZlbWVudA== 44034\nIHRvdXJlZA== 44035\nIGNvZWZmaWNpZW50cw== 44036\nIFRyYXl2b24= 44037\nYW5zc29u 44038\nIHNhbmR5 44039\ndG9sZA== 44040\nZmxvd3M= 44041\nIHBvcHVsb3Vz 44042\nIFRpbmRlcg== 44043\nIEJsaXNz 44044\nUmFjaGVs 44045\nTWluaW11bQ== 44046\nIGNvbnRlc3RhbnQ= 44047\nIFJlZHVjZQ== 44048\nIE1vcnNl 44049\nIEdyYXNzbGV5 44050\nIENsaWNrZXI= 44051\nIGV4cHI= 44052\nIHNpbmNlcml0eQ== 44053\nIG1hcnF1 44054\nIGVsaWNpdA== 44055\nIFByb3Bvc2l0aW9u 44056\nIERlbW9uaWM= 44057\nIHRhY29z 44058\nR3JlZWs= 44059\nIHBvc3R3YXI= 44060\nIGluc29mYXI= 44061\nIFBvcms= 44062\nIDM1Mg== 44063\nZG9jdG9yYWw= 44064\nd2Fsa2luZw== 44065\nIG1pZHRlcm0= 44066\nIFNhbW15 44067\nc2lnaHRlZA== 44068\nIFRSQU5T 44069\naWNp 44070\nQUxE 44071\nIFVTTA== 44072\nIEZJU0E= 44073\nIEFtcGw= 44074\nIEFsZXhhbmRyYQ== 44075\naW5lbGxp 44076\nVHJhaW4= 44077\nIHNpZ25pZnk= 44078\nIFZlcnN1cw== 44079\nIG9iZnVzYw== 44080\nIGto 44081\nIGFnZ3Jv 44082\nIFJlbmF1bHQ= 44083\nIDM0OA== 44084\nNTE4 44085\nb3hpY2l0eQ== 44086\nMDIy 44087\nIFR3aXN0 44088\nIGdvb2Z5 44089\nRHluYW1pYw== 44090\nIGJyaWVmaW5ncw== 44091\nbWlnaHQ= 44092\nODk5 44093\nIGRlcm9nYXRvcnk= 44094\nVHJv 44095\nIGZvcmdpbmc= 44096\nIEtvcmFu 44097\nIE1hcnJpZWQ= 44098\nIEJ1Y3M= 44099\nIHBhbGF0ZQ== 44100\nIENvbnZlcnNpb24= 44101\nbWFibGU= 44102\nNDEz 44103\nIChf 44104\nIHNpcGg= 44105\nIE5FTw== 44106\nY29sbGVnZQ== 44107\nIG1hcmdpbmFsbHk= 44108\nIGZsaXJ0 44109\nIFRyYXBz 44110\nIFBhY2U= 44111\n6buS 44112\nIGdvYWx0ZW5kZXI= 44113\nIGZvcmJpZHM= 44114\nIGNsZXJrcw== 44115\nIFRhbnQ= 44116\nIFJvYmJpbnM= 44117\nIFByaW50aW5n 44118\nIHByZW1pZXJlZA== 44119\nIG1hZ25pZmljYXRpb24= 44120\nIFRH 44121\nIFJvdXNl 44122\nIE1vY2s= 44123\nb2R5bmFtaWNz 44124\nIHByZWNsdWRl 44125\naXNtbw== 44126\nIFB1bGl0emVy 44127\nIGF2YWxhbmNoZQ== 44128\nIEtvZGk= 44129\ncmlidW5l 44130\nIExlbmE= 44131\nRWxlY3RyaWM= 44132\nIHJlZmluZXJ5 44133\nIGVuZG93ZWQ= 44134\nIGNvdW5zZWxvcnM= 44135\nIGRvbHBoaW4= 44136\nIE1pdGg= 44137\nIGFybW91cmVk 44138\naGliaXRlZA== 44139\nQmVnaW4= 44140\nIFBX 44141\nT2ls 44142\nIFZvcg== 44143\nIFNoYXJpZg== 44144\nIEZyYXppZXI= 44145\nZXN0YXRl 44146\nIGphbXM= 44147\nUHJveHk= 44148\nIGJhbmRpdHM= 44149\nIFByZXNieXRlcmlhbg== 44150\nIFByZW1pZXJl 44151\ndGlueQ== 44152\nIENydWVs 44153\nVGVzdGluZw== 44154\nIGhvbWVy 44155\nIFZFUlM= 44156\nIFByb2w= 44157\nIERlcG9zaXQ= 44158\nIENvZmZpbg== 44159\nIHNlbWluYXJz 44160\nIHNxbA== 44161\nIERlZmVuZGFudHM= 44162\nQWx0ZXJuYXRpdmVseQ== 44163\nIFJhdHM= 44164\n56s= 44165\nZXRoeXN0 44166\nJz4= 44167\nIGlzc3Vlcg== 44168\nNTg5 44169\nIGNoYWlyZWQ= 44170\nIEFjY2Vzc29yaWVz 44171\nbWFuZW50 44172\nIG1hcnJvdw== 44173\nIFByaW1vcmRpYWw= 44174\nQ04= 44175\nIGxpbWl0bGVzcw== 44176\nIENhcm5hZ2U= 44177\nIHVuZHJhZnRlZA== 44178\ncXY= 44179\nSU5FU1M= 44180\nb25ldw== 44181\nIGNvaGVzaW9u 44182\nOTg3 44183\nIG5lY2tz 44184\nIGZvb3RiYWxsZXI= 44185\nIEdFUg== 44186\nIGRldGVjdGFibGU= 44187\nIFN1cHBvcnRpbmc= 44188\nIENTVg== 44189\nb2NhbGx5 44190\na0h6 44191\nIHVuZGU= 44192\nIHNob25l 44193\nIGJ1ZGRpbmc= 44194\ndHJhaw== 44195\nU3RhbmRpbmc= 44196\nIFN0YXJjcmFmdA== 44197\nIEtlbXA= 44198\nQmVuY2g= 44199\nIHRod2FydGVk 44200\nIEdyb3VuZHM= 44201\nYXRoaQ== 44202\nTGlzYQ== 44203\nRGlhbG9n 44204\nIFNY 44205\nVmlzaW9u 44206\nIGluZ2VuaW91cw== 44207\n2ZA= 44208\nIGZvc3RlcmluZw== 44209\nIFph 44210\nIEluZ3JhbQ== 44211\nICJA 44212\nTmF0dXJhbGx5 44213\nNjE2 44214\nMDM1 44215\nIEZBQw== 44216\nSG1t 44217\nNTU0 44218\nIGFjY2VsZXJhdG9y 44219\nIFZlbmQ= 44220\nIHN1bnNjcmVlbg== 44221\nIHR1YmVyY3Vsb3Npcw== 44222\ncmF2aW9sZXQ= 44223\nIEZ1bmN0aW9uYWw= 44224\nIEVycm9ycw== 44225\nZWRhcg== 44226\nMTk2Ng== 44227\nIFNwZWN0cmU= 44228\nIFJlY2lwZXM= 44229\nODg1 44230\nIE1hbmtpbmQ= 44231\nTGl2ZXJwb29s 44232\nIHwtLQ== 44233\nIHN1YnN0aXR1dGVz 44234\nIFhU 44235\nd2lyZWQ= 44236\nIGluY28= 44237\nIEFmZ2g= 44238\nRXZh 44239\naWNj 44240\nU29uZw== 44241\nS25pZ2h0 44242\nIGRpbGlnZW50bHk= 44243\nIEJyb2FkY2FzdA== 44244\nQWlk 44245\nIGFmYXI= 44246\nIEhNUw== 44247\nYXRvbmlu 44248\nIEdyYXRlZnVs 44249\nIGZpcmVwbGFjZQ== 44250\nIE9tbmk= 44251\nZXVybw== 44252\nIEZSRQ== 44253\nIFNoaWI= 44254\nIERpZ2VzdA== 44255\ndG9nZ2xl 44256\nIGhlYWRzZXRz 44257\nIGRpZmZ1c2lvbg== 44258\nIFNxdWlycmVs 44259\nIEZO 44260\nIGRhcmtlbmVk 44261\nb3V0aGVy 44262\nIHNsZWVwcw== 44263\nIFhlcg== 44264\nZ3Vucw== 44265\nIHNldHVwcw== 44266\nIHBhcnNlZA== 44267\nIG1hbW1vdGg= 44268\nIEN1cmlvdXM= 44269\nZ29i 44270\nIEZpdHpwYXRyaWNr 44271\nIEVtaWw= 44272\naW1vdg== 44273\nLi4uLi4uLi4uLi4uLg== 44274\nIEJlbm55 44275\nU2Vjb25kbHk= 44276\nIGhlYXJ0eQ== 44277\nIGNvbnNvbg== 44278\nc3RhaW5lZA== 44279\nIGdhbGFjdGlj 44280\nY2xhdmU= 44281\nIHBsdW1tZXRlZA== 44282\nIHBlc3Rz 44283\nIHN3YXQ= 44284\nIHJlZmVycmFscw== 44285\nIExpb25lbA== 44286\naG9seQ== 44287\nIHVuZGVyZG9n 44288\nIFNsYXRlcg== 44289\nIFByb3ZpZGU= 44290\nIEFtYXI= 44291\ncmVzc29y 44292\n5Yw= 44293\nb25nYQ== 44294\nIHRpbWlk 44295\nIHBpZXR5 44296\nIERlaw== 44297\nIHN1cmdpbmc= 44298\nYXpv 44299\nIDYxMA== 44300\nIGRlc2tz 44301\nIFNwb2thbmU= 44302\nIEFuZmllbGQ= 44303\nIHdhcnNoaXBz 44304\nIENvYnJh 44305\nIGFybWluZw== 44306\nY2x1c2l2ZWx5 44307\nIEJhZGdl 44308\nYWdhc2Nhcg== 44309\nIFBSRVNT 44310\nIE1jS2Vuemll 44311\nIEZlcmRpbmFuZA== 44312\nYnVybmluZw== 44313\nQWZlZQ== 44314\nIHR5cmFubg== 44315\nIEl3 44316\nIEJvb25l 44317\nMTAwNw== 44318\nIFJlcHQ= 44319\nCsKg 44320\nIGNhcmF2YW4= 44321\nIERpbGw= 44322\nIEJ1bmRlc2xpZ2E= 44323\nQ2h1Y2s= 44324\nIGhlYWxlcg== 44325\n44O844OG 44326\nIEhvYmJ5 44327\nIG5lZ2F0ZQ== 44328\nIGNyaXRpcXVlcw== 44329\nc2VjdGlvbmFs 44330\nbW9wb2xpdGFu 44331\nIGR4 44332\nIG91dHNvdXJjaW5n 44333\nIENpcGhlcg== 44334\ndGFw 44335\nU2hhcnA= 44336\nIHVwYmVhdA== 44337\nIGhhbmdhcg== 44338\nIGNydWlzaW5n 44339\nIE5pYWdhcmE= 44340\nIDM0Mg== 44341\naWxsdXM= 44342\nIFN2 44343\nIHN1YnRpdGxlcw== 44344\nIHNxdWFyZWQ= 44345\nIGJvb2tzdG9yZQ== 44346\nIHJldm9sdXRpb25hcmllcw== 44347\nIENhcmx0b24= 44348\nYWJhbA== 44349\nVXRhaA== 44350\nIGRlc3Bpc2U= 44351\nIFVN 44352\nY29uc2lkZXI= 44353\nYWlkbw== 44354\nIGNhcnRz 44355\nIFR1cnRsZXM= 44356\nVHJhaW5pbmc= 44357\nIGhvbm9yYXJ5 44358\nwqI= 44359\nIHRyaWFuZ2xlcw== 44360\nNDIy 44361\nIHJlcHJpbnRlZA== 44362\nIGdyYWNlZnVs 44363\nIE1vbmdvbGlh 44364\nIGRpc3J1cHRpb25z 44365\nIEJvaA== 44366\nIDM0OQ== 44367\nIGRyYWlucw== 44368\nIGNvbnN1bGF0ZQ== 44369\nIGJlbmRz 44370\nIG1hZmlh 44371\ndXJvbg== 44372\nIEZ1bHRvbg== 44373\nbWlzYw== 44374\nIHJlbmFs 44375\nIGluYWN0aW9u 44376\nY2tpbmc= 44377\nIHBob3RvbnM= 44378\nIGJydWlzZWQ= 44379\nIENvZGVz 44380\nb2dp 44381\nIG5lc3Rz 44382\nIExvdmVseQ== 44383\nIExpYnJl 44384\nIERhcnls 44385\nICMjIw== 44386\nU3lz 44387\nLiwi 44388\nIGZyZWV6ZXM= 44389\nZXN0YWJsaXNobWVudA== 44390\nYW5kb3dza2k= 44391\nIGN1bWJlcnM= 44392\nIFN0YXJn 44393\nIEJvbWJz 44394\nIGxlZ2lvbnM= 44395\nIGhhbmR3cml0aW5n 44396\nIGdydW4= 44397\nIENhaA== 44398\nc2VxdWVudA== 44399\nIG1vdGg= 44400\nIE1TTQ== 44401\nSW5zZXJ0 44402\nRmlm 44403\nIG1vdGVs 44404\nIGRleHRlcg== 44405\nIEJpbGQ= 44406\naGVhcnRlZGx5 44407\nIHByb3Bl 44408\nIFRleHR1cmU= 44409\nIEp1bmN0aW9u 44410\neW50aGVzaXM= 44411\nb2NhcmQ= 44412\nIFZlcmE= 44413\nIEJhcnRo 44414\nIM68Zw== 44415\nIGxhc2hlZA== 44416\nIDM1MQ== 44417\nIFphbWI= 44418\nIFN0YXBsZXM= 44419\nIENvcnRleA== 44420\nIENvcmtlcg== 44421\nIGNvbnRpbnV1bQ== 44422\nIFdSSVRF 44423\ndW50YQ== 44424\ncmlkb3I= 44425\nIGRlZW1z 44426\nMDMz 44427\nIEdPTEQ= 44428\ncGFz 44429\nIHJlcHJlc3NpdmU= 44430\n44OG44Kj 44431\nIGJhZmZsZWQ= 44432\nU2Nhcg== 44433\nIGNyYXZl 44434\nIF9fX19fXw== 44435\nIGVudHJlcHJlbmV1cnNoaXA= 44436\nIERpcmVjdG9yYXRl 44437\nICdb 44438\nIHZpbmVz 44439\nIGFzY2VuZGVk 44440\nIEdST1VQ 44441\nIEdvb2RieWU= 44442\nIGRvZ2dlZA== 44443\n44O044Kh 44444\nTWFudWZhY3Q= 44445\nIHVuaW1hZ2luYWJsZQ== 44446\ncmlvdHM= 44447\naWVycmV6 44448\nIHJlbGF0aXZpdHk= 44449\nIENyYWZ0aW5n 44450\ncmF1Z2h0 44451\ndWRlbg== 44452\nY29va2ll 44453\nIGFzc2Fzc2lucw== 44454\nIGRpc3NhdGlzZmllZA== 44455\nYWNjaQ== 44456\nIGNvbmR1aXQ= 44457\nU3ByZWFk 44458\nIFJpY2Fu 44459\nbmljZQ== 44460\naXp6bGU= 44461\nIHNjYXJlcw== 44462\nIFdIWQ== 44463\ncGhhbnM= 44464\nNTM1 44465\nIHByb3RyYWN0ZWQ= 44466\nIEtyaXN0ZW4= 44467\nNTM2 44468\nIFNjcmli 44469\nIE5laA== 44470\nIHR3ZW50aWVz 44471\nIHByZWRpY2FtZW50 44472\nIGhhbmRjdWZmcw== 44473\nIGZydWl0ZnVs 44474\nIFVM 44475\nIEx1ZHdpZw== 44476\nIGF0dGVzdA== 44477\nIEJyZWFrZXI= 44478\nIGJpb2xvZ2ljYWxseQ== 44479\nIERlYWxlcg== 44480\nIHJlbm92YXRpb25z 44481\nZnc= 44482\nZXNzZW4= 44483\nQWxpY2U= 44484\nIEhlbnJp 44485\nIHVuaWxhdGVyYWxseQ== 44486\nIFNpZGQ= 44487\naGFp 44488\nIFN0cmV0Y2g= 44489\nU2FsZXM= 44490\nIGN1bWJlcnNvbWU= 44491\nIEphdmllcg== 44492\nIHRyZW5keQ== 44493\nIHJvdHRpbmc= 44494\nIENoYWxsZW5nZXM= 44495\nIHNjcmFwcw== 44496\nIGZhY2V0cw== 44497\nIFZlcm9uaWNh 44498\nIFZlcmdl 44499\nIFNhbmE= 44500\nQWxpZW4= 44501\nIFJpaA== 44502\nIHJhZGlhbA== 44503\nZWN0YXI= 44504\nIDYzMA== 44505\nY2xp 44506\nTWFyaWU= 44507\nIHdpbGRmaXJl 44508\nIENhdG8= 44509\naGFuZGVy 44510\nIHdhaXRyZXNz 44511\nIGNob3Bz 44512\nIFNFQ1RJT04= 44513\nIGJsdW50bHk= 44514\nIENhdGFsb2c= 44515\nbmlhbg== 44516\nc3R1ZHk= 44517\nIHBhdHJvbGxpbmc= 44518\nIFRlbnRo 44519\nbmV4dXM= 44520\nIE5PTg== 44521\nb3BzeQ== 44522\nIHNjYXRoaW5n 44523\nc2ll 44524\nIGRldGVyaW9yYXRlZA== 44525\nVkI= 44526\nTmF6aXM= 44527\nIGRlcGljdGlvbnM= 44528\nIGF1dGhlbnRpY2F0ZWQ= 44529\nIENvbmNl 44530\na3JpdA== 44531\nIHByb211bGc= 44532\nIExPTkc= 44533\nVUZD 44534\nIFZpc2l0b3Jz 44535\nIFJlY2FsbA== 44536\nIHJlaGFiaWxpdA== 44537\nIFNMSQ== 44538\nIGdsYWNpZXI= 44539\nIEJpdGU= 44540\nIDUwMw== 44541\nIHZvbWl0 44542\nIGZlcm1lbnRlZA== 44543\nIEtoYWxpZA== 44544\nIGdyYWRlZA== 44545\nIE1hZ2lja2E= 44546\nIEljaGlnbw== 44547\ncG93ZXJmdWw= 44548\naWNhdG9ycw== 44549\nNzUz 44550\nIHNocmV3 44551\nIDM1Ng== 44552\nIGxlZ2FsaXppbmc= 44553\nIGFsbG90dGVk 44554\nIEFyY2hkZW1vbg== 44555\naXRoaW5n 44556\naWdndXJhdA== 44557\nVk9M 44558\nTGVvZA== 44559\nIG9pbHk= 44560\nIGluZHVjaW5n 44561\nIGFteWdkYWxh 44562\nIGFkbWlucw== 44563\nIEFjcXVpc2l0aW9u 44564\nQ0FO 44565\nIHNjaGVtYXRpYw== 44566\nIG1vYW4= 44567\nIENhbWVyb29u 44568\nIHRpbms= 44569\nIG1lcnJ5 44570\nIGJ1dHRlcmZsaWVz 44571\nIEdvZmY= 44572\nIHdvcmtzcGFjZQ== 44573\nIENvcm9uYQ== 44574\nIGphdmFzY3JpcHQ= 44575\nIERvbHBoaW4= 44576\nIENhbnRvcg== 44577\nNDY0 44578\ndG9l 44579\nQVBT 44580\nIEFnaW5n 44581\nIHBhZGRlZA== 44582\nIFpoZW5n 44583\nIEhlbGQ= 44584\nIGVzdHJhbmdlZA== 44585\nIDc3MA== 44586\nLn0= 44587\nIER1bmhhbQ== 44588\nIHNtb2tlcw== 44589\nIGNhcGl0YWxz 44590\ndW5kYWk= 44591\nU2hpbg== 44592\nIEZvdW5kaW5n 44593\nIGVudGl0bGU= 44594\nIGNlbnRlcnBpZWNl 44595\nRGlzY292ZXI= 44596\nIHRoZXJldG8= 44597\nYWxlcnQ= 44598\nIE5vdQ== 44599\nIEFuYWx5c3Q= 44600\nbGM= 44601\nRkg= 44602\nRklFTEQ= 44603\nIFBPVg== 44604\nZ3JheQ== 44605\nIGFyY3M= 44606\nIEhPVA== 44607\nIHJz 44608\nIG9ibGlnYXRvcnk= 44609\nIEFyY2hpdGVjdHM= 44610\nIFN2ZW4= 44611\nIEZFQw== 44612\nMDIwMA== 44613\nQ2hyaXN0bWFz 44614\nIEFsYmFuaWE= 44615\ncmF0b20= 44616\nNTg3 44617\nIGhhcmRzaGlwcw== 44618\nIGF1dG9z 44619\nIENoYXJnZXM= 44620\nIGFwZXM= 44621\nIDM3Ng== 44622\nd2FsbGV0 44623\nIGludG94aWNhdGlvbg== 44624\nIGdvYmxpbg== 44625\nIDU3MA== 44626\nKysrKysrKysrKysrKysrKw== 44627\nIFllbHA= 44628\nIE1hZ25ldGlj 44629\nIEJyaWdncw== 44630\nUmFpbA== 44631\nIHNwYXducw== 44632\nIFdpZ2dpbnM= 44633\nIHNob3djYXNlZA== 44634\nIHJlc29ydGVk 44635\ndWJlbg== 44636\nIHdoaXBwaW5n 44637\nIGltaXRhdGU= 44638\nIGRpZ2VzdGlvbg== 44639\nIFVTUFM= 44640\nIEdlc3Q= 44641\nIHllYQ== 44642\nIFRpZ2h0 44643\naW5kYWw= 44644\naWNhcw== 44645\nYC4= 44646\nQ0FTVA== 44647\nJyc7 44648\nIEZldA== 44649\nb3BhdGhpYw== 44650\nSW52YWxpZA== 44651\nIHJlZ3JldHRlZA== 44652\nIGJyb2Njb2xp 44653\nIFNjb3Jlcw== 44654\nZXZl 44655\nIHBvc3Rpbmdz 44656\nIGFjY3VtdWxhdGluZw== 44657\nIG5lZWRsZXNz 44658\nZWxmdGg= 44659\nIG1heW9ycw== 44660\nIHNjcmli 44661\nIGFuZWNkb3Rlcw== 44662\nIGJvdGNoZWQ= 44663\nIFJpYmJvbg== 44664\nIENvbnN0YW50aW5l 44665\naXVzZXM= 44666\nZXNzZXM= 44667\nIGRldmlzZQ== 44668\nQ29tcGFyZWQ= 44669\nIHB1ZGRpbmc= 44670\nIGdhcmc= 44671\nIGV2b2tl 44672\nNzk3 44673\nIGRldG94 44674\nOTA5 44675\nIFBpZWNlcw== 44676\nIE1jQ2FydG5leQ== 44677\nIG1ldGFzdA== 44678\nIEtyeXB0 44679\nUE9S 44680\nIHRlbmRpbmc= 44681\nIE1lcmNoYW50cw== 44682\nUHJvb2Y= 44683\nIFZhcmc= 44684\nIFBvcnRhYmxl 44685\n44O844OG44Kj 44686\nQnJhaW4= 44687\nMjUwMA== 44688\nIGZvbGlhZ2U= 44689\n2Lk= 44690\nIG1lbnRvcnM= 44691\nIEFpcmVz 44692\nIG1pbmltYWxpc3Q= 44693\nIGluZ2VzdGVk 44694\nIFRyb2phbg== 44695\nIFFpYW4= 44696\naW52b2x2ZWQ= 44697\nMDI3 44698\nIGVyb2RlZA== 44699\nUkFGVA== 44700\nIGJsdXJyeQ== 44701\nTW9i 44702\nIGJ1ZmZldA== 44703\nIEZuYXRpYw== 44704\nYWVh 44705\nS05PV04= 44706\nIEluaXQ= 44707\nc2FmZXR5 44708\nZW51bQ== 44709\nQUNUSU9O 44710\nIENydXNoZXI= 44711\nIERhdGVz 44712\nIC4uLi4uLi4uLi4uLi4uLi4= 44713\nY2FsbGluZw== 44714\nYWtvdg== 44715\nIHZlbnR1cmVk 44716\nIDU1NQ== 44717\nYXVnYQ== 44718\nSGFydA== 44719\nIEFlcm8= 44720\nTUFD 44721\nIHRoaW5seQ== 44722\nIGFycmE= 44723\nU1RBVEU= 44724\naWxkZQ== 44725\nIEphY3F1 44726\nIEZlbWFsZXM= 44727\nIHRoZW9yZW0= 44728\nIDM0Ng== 44729\nIHNtYXJ0ZXN0 44730\nIFBVQkxJQw== 44731\nIEtyb24= 44732\nIEJpdHM= 44733\nIFZlc3NlbA== 44734\nIFRlbGVwaG9uZQ== 44735\nIGRlY2Fw 44736\nIGFkanVuY3Q= 44737\nIFNFTg== 44738\nbWVyZ2E= 44739\nIHJlZGFjdGVk 44740\nIHByZWhpc3Rvcmlj 44741\nIGV4cGxhbmF0b3J5 44742\nIFJ1bnM= 44743\nIFV0dGFy 44744\nIE1hbm55 44745\nIEFVVEhPUg== 44746\nIFVubGVhc2hlZA== 44747\nIEJvd2xpbmc= 44748\nYmVhbnM= 44749\nNzkz 44750\nIHVuaXZlcnNlcw== 44751\nIHNlbnNpdA== 44752\nIEt1bmc= 44753\ncmVwZWF0 44754\nY3RybA== 44755\nIHBhY2Vk 44756\nIGZ1bGxlcg== 44757\nQ2xvY2s= 44758\nIHJlY29tYg== 44759\nIEZhdWw= 44760\nIEJ1bmtlcg== 44761\nIHBvb2xlZA== 44762\nIGFuYQ== 44763\nIE1vdXRo 44764\nTExPVw== 44765\naHVtYW5l 44766\nIGJ1bGxkbw== 44767\nIE1pY2hhZWxz 44768\nZmFt 44769\nIHdyZWNrZWQ= 44770\nIHBvcnRyYXlz 44771\nIFdoYWxl 44772\nIEhlcw== 44773\nIGd1ZXNzZXM= 44774\nIEJyb3dzZQ== 44775\nIExBUEQ= 44776\nIGNvbnNlcXVlbnRpYWw= 44777\nIElubm9jZW50 44778\nIERSQUc= 44779\nIHRyYW5zZ3Jlc3M= 44780\nIE9ha3M= 44781\nIHRyaXZpYQ== 44782\nIFJlc29u 44783\nIEFEUw== 44784\nLS0r 44785\nIFRvbGw= 44786\nIGdyYXNwaW5n 44787\nIFRIRU0= 44788\nIFRhZ3M= 44789\nIENvbmNsdXNpb24= 44790\nIHByYWN0aWNhYmxl 44791\nIGhvb3A= 44792\nIHVuaW50ZW50aW9uYWxseQ== 44793\nIGlnbml0ZQ== 44794\nIE1vdg== 44795\ndXJpemVk 44796\nbGVoZW0= 44797\nVGVybWlu 44798\nIGNvbG91cmZ1bA== 44799\nIExpbmVhcg== 44800\nIEVsbGll 44801\nR3k= 44802\nIG1hbnBvd2Vy 44803\nIGpz 44804\nIGVtb2pp 44805\nIFNIQVJFUw== 44806\nXy4= 44807\nMDAwMDc= 44808\nIHNvcGhpc3RpY2F0aW9u 44809\nIHVuZGVyc2NvcmU= 44810\nIHByYWN0aXNl 44811\nIGJsb2I= 44812\nb3BlbnM= 44813\nVWtyYWluZQ== 44814\nS2VlcGluZw== 44815\nWUM= 44816\nSlI= 44817\ndWx0aW1hdGU= 44818\nQ2xhaW0= 44819\nIGF1dG9tb2JpbGVz 44820\nOTkz 44821\nc3RlZWw= 44822\nIHBhcnRpbmc= 44823\nIExhbms= 44824\nLi4uPw== 44825\nIDM4NQ== 44826\nIHJlbWVtYnJhbmNl 44827\nIGVhc2Vk 44828\nIGNvdmFyaQ== 44829\nIFNpbmQ= 44830\nRWZmZWN0aXZl 44831\nIGRpc3NlbWluYXRpb24= 44832\nIE1vb3Nl 44833\nIENsYXBwZXI= 44834\nYnJhdGVz 44835\nQXBwbHk= 44836\nIGludmlz 44837\nIHdvcnNlbmVk 44838\n4oCULQ== 44839\nIGxlZ2lzbGF0b3I= 44840\nIExvbA== 44841\nIFJvd2U= 44842\nIGRlYWxlcnNoaXA= 44843\ndW1hcg== 44844\naWRlbmNlcw== 44845\nIGludmVzdGlnYXRlcw== 44846\nIGNhc2NhZGU= 44847\nIGJpZGRlcg== 44848\nIEJFTg== 44849\nSXJvbmljYWxseQ== 44850\nIHByZXNpZGluZw== 44851\nIGRpbmc= 44852\nIGNvbnRyYWRpY3RlZA== 44853\nIHNodXRz 44854\nIEZJWA== 44855\nIDM2Ng== 44856\nRGlzdHJpY3Q= 44857\nIHNpbmZ1bA== 44858\nIENoYXJpc21h 44859\nb29wcw== 44860\nIHRvdGFsaXR5 44861\nIHJlc3RpdHV0aW9u 44862\nIE9wdGltdXM= 44863\nIERhaA== 44864\nIGNsdWVsZXNz 44865\ndXJuZWQ= 44866\nIG51dHJpdA== 44867\nIGxhbmRvd25lcnM= 44868\nIGZsdXNoZWQ= 44869\nIGJyb2FkZW4= 44870\nbWll 44871\nIHByaW50bG4= 44872\nIG5pZw== 44873\nIENvcnB1cw== 44874\nSmVu 44875\nIHByb3Rv 44876\nIFdpa2ltZWRpYQ== 44877\nIFBhbG8= 44878\nQ09S 44879\nIHN0b3J5bGluZXM= 44880\nIGV2YW5nZWxpY2Fscw== 44881\nIERhcnJlbGw= 44882\nIHJvdG9y 44883\nIEhX 44884\nc2tpbGxlZA== 44885\nZXJ5bA== 44886\nIGJlZ2c= 44887\nIEJsdW1lbnRoYWw= 44888\nIHdlYXZpbmc= 44889\nIGRvd253YXJkcw== 44890\nIEphY2tldA== 44891\nIEFOR0VM 44892\nVGVjaG5vbG9neQ== 44893\nIGVzb3Rlcmlj 44894\nYWxkZWh5ZGU= 44895\nIGZ1cmlvdXNseQ== 44896\nIGZvcmVpZ25lcg== 44897\nV2Vhaw== 44898\nQ0hP 44899\nIEhvdW5k 44900\nRXhwZXJpZW5jZQ== 44901\nIFBsYXlzdGF0aW9u 44902\nIE1JQQ== 44903\nIFVuZw== 44904\nY2xvdGg= 44905\nYWdhbGw= 44906\nIGNhbG1pbmc= 44907\naXplbnM= 44908\nU3RydWN0 44909\nIFdpdGNoZXM= 44910\nIENlbGVicmF0aW9u 44911\nIC4uLi4uLi4uLi4uLi4u 44912\ncHRyb2xsZXI= 44913\nIFRDVQ== 44914\nIGJ1bm55 44915\n44ON 44916\ndXRvcmlhbA== 44917\nIHVwc2NhbGU= 44918\nIFN0YQ== 44919\nIENvbG9zc3Vz 44920\nIGNobG9yaWRl 44921\nIFphYw== 44922\nIFJlYXNvbnM= 44923\nIEJyb29raW5ncw== 44924\nIFdISVRF 44925\nXVsv 44926\nIExvc2U= 44927\nOTA1 44928\nIHVuZGVyc2lkZQ== 44929\nZXJuZWxz 44930\nIHZhcGU= 44931\nZG96ZW4= 44932\ndXBwZXQ= 44933\nIFNUT1A= 44934\nbWF0aWNhbA== 44935\nIFN0YXRlbWVudHM= 44936\naGVkZGFy 44937\nUEFD 44938\nQ3VzdG9tZXI= 44939\nIG1lbW9z 44940\nIFBK 44941\nZW5kYXJz 44942\nIExpbWl0cw== 44943\nbGF1Z2g= 44944\nIHN0YWJpbGl6ZWQ= 44945\nIEFMRUM= 44946\nWUE= 44947\nVXBncmFkZQ== 44948\nYWxhbQ== 44949\nIHRlY2hubw== 44950\nIGFuZXc= 44951\nZm9yZXNlZW4= 44952\nIGNvbGxlZ2lhdGU= 44953\nIFB5cm8= 44954\nIERpc20= 44955\nIGZyb250bGluZQ== 44956\nIGFtbW9uaWE= 44957\nSVU= 44958\nUXVpdGU= 44959\nSm9obm55 44960\nYXNzaW4= 44961\nR09Q 44962\nIFN0eWxlcw== 44963\nIFNvdmVyZWlnbg== 44964\nYWN0ZXJpYWw= 44965\nNTQ5 44966\nIFJJUA== 44967\nIExpc3Rz 44968\nIDM2NA== 44969\nIFJlY2Vw 44970\nc29ja2V0 44971\nIEJ5cmQ= 44972\nIENhbmRsZQ== 44973\nQW5jaWVudA== 44974\nIGFwcGVsbGFudA== 44975\nZW5mb3JjZW1lbnQ= 44976\nYWNlYQ== 44977\nYW5za2k= 44978\nIG9sZHM= 44979\nODg2 44980\nIHNsdXJz 44981\nIGVtcGlyZXM= 44982\nIGJ1Y2tsZQ== 44983\nIGFsaWVuYXRpb24= 44984\nIEFiZXJkZWVu 44985\nIHVuaWNvcm4= 44986\nIG92ZXJyaWRpbmc= 44987\nIExY 44988\ncHBh 44989\nIGRlc3Bpc2Vk 44990\nIEJ1Z3M= 44991\nIEJTVA== 44992\nU291dGhlcm4= 44993\nNTMz 44994\nIGhhbGxtYXJr 44995\nIFBvc3Rlcg== 44996\nIHN0ZW1tZWQ= 44997\nIHByaW5jaXBhbHM= 44998\nIFRFQ0g= 44999\nIFNhbmR3aWNo 45000\nSXRhbHk= 45001\nIGNoZWVzeQ== 45002\nIFNldFRleHRDb2xvcg== 45003\nIFByb3RlY3RpdmU= 45004\nIENvaG4= 45005\nSk8= 45006\nYXB0b3A= 45007\nUmVhc29u 45008\nTGVhZGVy 45009\nIFVuZGVyc3RhbmQ= 45010\nIEZyaWRheXM= 45011\nIENvbnRpbnVvdXM= 45012\nIGNsaXBwaW5n 45013\nIFJ5ZQ== 45014\nIGJlcnRo 45015\ndGltZXI= 45016\nYW5uaXM= 45017\ncmVhY3Q= 45018\nIGJ1ZmZhbG8= 45019\nIFBhcmFz 45020\nIDY1NQ== 45021\nIHByZXNpZGVk 45022\nIFN1bnJpc2U= 45023\nIHZldHM= 45024\nIGNsb3Zlcw== 45025\nIE1jQ3VsbA== 45026\nU3RyZW5ndGg= 45027\nR0FO 45028\nIGlsbGl0ZXI= 45029\nIFByaWNpbmc= 45030\nbMOp 45031\nIHJlc2lzdG9y 45032\nIGJydW4= 45033\nIFN1ZmZvbGs= 45034\n0Ys= 45035\nIExpdmVy 45036\nUmVsZWFzZWQ= 45037\nIHdoYXRz 45038\nODYw 45039\nIE1lYXN1cmVz 45040\nIGRlbm91bmNpbmc= 45041\nIFJ5emVu 45042\nIHNvdXZlbg== 45043\nIGNhcmVnaXZlcnM= 45044\nY2hpbmk= 45045\nIFNjYXJsZXR0 45046\nIHRyb3VnaA== 45047\nQ29uZ3JhdHVsYXRpb25z 45048\nIHRheGlz 45049\nIFRyYWRpdGlvbg== 45050\naml0 45051\nIHRhYmxldG9w 45052\nIGhpdGhlcnRv 45053\nIGRpc2luZm9ybWF0aW9u 45054\nb2ZmZW5zaXZl 45055\naHJh 45056\nIERJU1RSSUNU 45057\nIGNvbXBsaWNhdGU= 45058\nY2hlbmtv 45059\nIFJlY29uc3RydWN0aW9u 45060\nIHBhbHBhYmxl 45061\nIGF1c3A= 45062\nIDQyOA== 45063\nIHNob3djYXNlcw== 45064\nIFB1YmxpY2F0aW9u 45065\na25vd2xlZGdl 45066\naW5ub24= 45067\nNDE5 45068\nIHJldHJpZXZhbA== 45069\nYW5kZXJz 45070\nIHJlZnV0ZQ== 45071\nIGlucXVpcmVk 45072\nZ3Vy 45073\nIG5lZ2F0aXZpdHk= 45074\nIGNvbnNlcnZl 45075\nIGFmdGVybGlmZQ== 45076\nIHByZXN1cHA= 45077\nIEdpbGxlc3BpZQ== 45078\nIG10 45079\nIERO 45080\nVGFw 45081\nIHBlcnBlbmQ= 45082\nIFNteQ== 45083\nZG9lc24= 45084\nIHNwaWxsaW5n 45085\nIGh5cGVycw== 45086\nS2F0ZQ== 45087\nwq4s 45088\na2VwdA== 45089\nIFBvd2VyZWQ= 45090\nIGph 45091\nIEtsdXg= 45092\nYXJkZQ== 45093\nYWJhbg== 45094\nIDQ0NA== 45095\nIGZsYXR0ZW5lZA== 45096\nIEltcHJvdmVtZW50cw== 45097\ndXJnYQ== 45098\nIEt1bmQ= 45099\nIGluc2NyaWJlZA== 45100\nIGZhY3VsdA== 45101\nIHVucHJlcGFyZWQ= 45102\nIENvbnN1bWVycw== 45103\nIHNhdGlzZmllcw== 45104\nIHB1bG1vbmFyeQ== 45105\nIGluZmlsdHJhdGlvbg== 45106\nIGV4dGVybmFsbHk= 45107\nIGNvbmdyYXR1bGF0aW9ucw== 45108\nYWdoYW4= 45109\nIGFpcmxpbmVy 45110\nIGZsdW5n 45111\nIGZseWVycw== 45112\nR0Q= 45113\nIHNuaXBwZXRz 45114\nIHJlY3Vyc2l2ZQ== 45115\nIG1hc3RlcmluZw== 45116\nTGV4 45117\nIG92ZXJ0bHk= 45118\ndmc= 45119\nIGx1Y2tpbHk= 45120\nIGVuY3Jv 45121\nIExhbmNldA== 45122\nIEFieXNzYWw= 45123\nZnVuY3Rpb25hbA== 45124\nIHNvdw== 45125\nIHNxdWlk 45126\nIG5hcnJhdGlvbg== 45127\nIG5hdWdodHk= 45128\nIEhvbm91cg== 45129\nIFNwYXJ0YW5z 45130\nIHNoYXR0ZXI= 45131\nIFRhY29tYQ== 45132\nIENhbG9yaWVz 45133\nIFJhY2Vz 45134\nU3VibWl0 45135\nIHB1cnBvc2VmdWxseQ== 45136\nd2F2 45137\nIFlvaw== 45138\nRmVzdA== 45139\nIEdlcnI= 45140\nTWV0cm8= 45141\nIGl0aW5lcg== 45142\nZmFtb3Vz 45143\nICJ7 45144\naW5saW5l 45145\nd2FzaGVy 45146\nSXNzdWU= 45147\nIENMSUVOVA== 45148\nb3pv 45149\nVmVyc2lvbnM= 45150\nNzI1 45151\nIEdsb2Nr 45152\nIHNoaWVsZGVk 45153\nIFBDUg== 45154\nRU5DWQ== 45155\nIFdlbGQ= 45156\nIFNpbXBs 45157\nIHJlZGlyZWN0ZWQ= 45158\nIEtoYW0= 45159\nICg+ 45160\nIGxhYm91 45161\nIGRpYXBlcnM= 45162\nc3Ns 45163\nIGNlbGxhcg== 45164\nb3JnYW5pc21z 45165\nb3Jlc2M= 45166\nIEJlcmtz 45167\nZGlkbg== 45168\nU2hpcHBpbmc= 45169\nQ2hlc3Q= 45170\nIHVuZG9uZQ== 45171\nIG1pbGxpb25haXJl 45172\nIGNvcmRz 45173\nIFlvdW5nZXI= 45174\nYXBwcm9wcmlhdGVseQ== 45175\nIHNlcXVlbHM= 45176\ndXZl 45177\nYW50aWNpcGF0ZWQ= 45178\nIGxld2Q= 45179\nIFNoaXJ0 45180\nIERtaXRyeQ== 45181\nVmV0ZXI= 45182\nIHNsYXlpbmc= 45183\nIFlhcg== 45184\nIGNvbXBsaWNhdGlvbg== 45185\nSW93YQ== 45186\nIEVyaWNh 45187\nIEJMTQ== 45188\nZ2lybGZyaWVuZA== 45189\nYm9kaWVk 45190\nNjI2 45191\nMTk2Mw== 45192\nIGludGVybWVkaWFyeQ== 45193\nIGNvbnNvbGF0aW9u 45194\nTWFzaw== 45195\nIFNpZW0= 45196\nb3dhbg== 45197\nQmVnaW5uaW5n 45198\nIGZpeG1l 45199\nIGN1bG1pbmF0ZWQ= 45200\nIGNvbmR1Yw== 45201\nIFZvbHVudGVlcg== 45202\nIHBvc2l0aW9uYWw= 45203\nIGdyZWV0cw== 45204\nIERlZmluaXRpb25z 45205\nIHRoaW5rZXI= 45206\nIGluZ2VudWl0eQ== 45207\nIGZyZXNobWVu 45208\nIE1vbWVudHM= 45209\nIDM1Nw== 45210\nYXRldXJz 45211\nIEZlZEV4 45212\nc2c= 45213\nNjk0 45214\nIGR3aW5kbGluZw== 45215\nIEJPWA== 45216\nc2VsYWdl 45217\nIHRtcA== 45218\nIHN0ZW4= 45219\nIFN1dA== 45220\nIG5laWdoYm91cmhvb2Rz 45221\nIGNsYXNzbWF0ZQ== 45222\nZmxlZGdlZA== 45223\nIGxlZnRpc3Rz 45224\nIGNsaW1hdGVz 45225\nQVRIRVI= 45226\nIFNjeXRoZQ== 45227\ndWxpZmZl 45228\nIHNhZw== 45229\nIGhvcHBlZA== 45230\nIEZ0 45231\nIEVjaw== 45232\nIENL 45233\nIERvb21zZGF5 45234\na2lkcw== 45235\nIGdhc3BlZA== 45236\nIG1vbmlrZXI= 45237\nIExvZA== 45238\nIENGTA== 45239\ndGlvbnM= 45240\ncnVtcw== 45241\nZm9saW9z 45242\nIG1k 45243\nIHVuY2Fubnk= 45244\nIHRyYW5zcG9ydHM= 45245\nIExhYnJhZG9y 45246\nIHJhaWx3YXlz 45247\nIGFwcGxpYW5jZQ== 45248\nIENUUkw= 45249\n5oA= 45250\nUG9wdWxhdGlvbg== 45251\nIENvbmZlZGVyYWN5 45252\nIHVuYmVhcmFibGU= 45253\nIGRvcnNhbA== 45254\nIEluZm9ybQ== 45255\nb3B0ZWQ= 45256\nIEtJTEw= 45257\nTWFyeA== 45258\nIGh5cG9jcml0aWNhbA== 45259\ncXVz 45260\nIE51bWVyb3Vz 45261\nIEdlb3JnaWFu 45262\nIEFtYnJvc2U= 45263\nIExvY2g= 45264\nIGd1YmVybmF0b3JpYWw= 45265\nIFhlb24= 45266\nIFN1cHBvcnRz 45267\nZW5zZXI= 45268\nZWVseQ== 45269\nIEF2ZW5nZXI= 45270\nMTk2NQ== 45271\nQXJteQ== 45272\nIGp1eHRhcA== 45273\nIGNob3BwaW5n 45274\nIFNwbGFzaA== 45275\nIFN1c3RhaW5hYmxl 45276\nIEZpbmNo 45277\nIDE4NjE= 45278\naWN0aXZl 45279\nYXRtZWFs 45280\nIEdvaGFu 45281\nIGxpZ2h0c2FiZXI= 45282\nIEdQQQ== 45283\ndWd1 45284\nIFJFUEw= 45285\ndmFyaWFibGU= 45286\nIGhlcnBlcw== 45287\nIGRlc2VydHM= 45288\nYWNpb3VzbHk= 45289\nIHNpdHVhdGlvbmFs 45290\nd2Vla2x5 45291\nb2Js 45292\nIHRleHRpbGU= 45293\nIENvcm53YWxs 45294\nIGNvbnRyYWNlcHRpdmVz 45295\nIEFrZQ== 45296\nXS0= 45297\n5LmL 45298\nOiw= 45299\nIFdlbQ== 45300\nIEJpaGFy 45301\nICcu 45302\nIGJlcmU= 45303\nIGFuYWxvZ3Vl 45304\nIENvb2tpZXM= 45305\nIHRha2VvZmY= 45306\nV2hlZWw= 45307\nIG1hamVzdGlj 45308\nIGNvbW11dGluZw== 45309\nMDIz 45310\nIENvcnBzZQ== 45311\nYXNzbWVudA== 45312\nbWluaQ== 45313\nIGdvcmlsbGE= 45314\nIEFsYXM= 45315\nZXJlZQ== 45316\nIGFjcXVhaW50YW5jZXM= 45317\nIEFkdmFudGFnZQ== 45318\nIHNwaXJpdHVhbGx5 45319\nIGV5ZWQ= 45320\ncG13aWtp 45321\nIEVuZGVy 45322\nIHRyYW5zbHVjZW50 45323\nIG5pZ2h0dGltZQ== 45324\nIElNQUdFUw== 45325\nNTQ1 45326\nIEthbXA= 45327\nIEZyZWFr 45328\nIGln 45329\nUG9ydGxhbmQ= 45330\nNDMy 45331\nIE1hdGE= 45332\nIG1hcmluZXM= 45333\nIGhvcnM= 45334\nYXRlcmFzdQ== 45335\nIEF0dHJpYnV0aW9u 45336\nIC0tLS0tLS0tLQ== 45337\nIGtpbnM= 45338\nIEJFTE9X 45339\nKysr 45340\nIHJlZWxpbmc= 45341\nb2xlZA== 45342\nIGNsdXR0ZXI= 45343\nIFJlbGF0aXZl 45344\nIDQyNw== 45345\nQlVT 45346\nIGF2ZXJ0 45347\nIENoZW9uZw== 45348\nIEFibGU= 45349\nIFByeW9y 45350\nRGV2ZWxvcGVy 45351\nIGVuY3ljbG9wZWRpYQ== 45352\nIFVTQUY= 45353\nIEdhcnJ5 45354\nU3BhaW4= 45355\nQmxvY2tz 45356\nIGV4cG9zaXRpb24= 45357\nIEdhbWVyR2F0ZQ== 45358\nV09S 45359\nIHN0b2NrcGlsZQ== 45360\nIGNsb3RoZWQ= 45361\nIFRvbmU= 45362\nIFJ1ZQ== 45363\ndHVtYmxy 45364\nIHRyZWFjaGVyb3Vz 45365\nIGZyeWluZw== 45366\n0Yw= 45367\nIFNwaA== 45368\nIHJlc3RyYWludHM= 45369\nIGVtYm9kaWVz 45370\nIEdlcw== 45371\nU2FmZXR5 45372\nIG5lZ290aWF0b3Jz 45373\nbWluaW5n 45374\nIEFwcGFsYWNoaWFu 45375\nTE9T 45376\nIEplbm5h 45377\nIHBhc3NlcnM= 45378\n54s= 45379\nc25hcA== 45380\nIHNob3J0ZW4= 45381\nY3JlYXRvcg== 45382\nIGlubnVtZXJhYmxl 45383\ndXRoZXJsYW5k 45384\nNjc0 45385\nIFdPTQ== 45386\nIEFzY2VuZA== 45387\nIEFybW9yeQ== 45388\nIFRyYW5zYWN0aW9u 45389\nS2ljaw== 45390\nIHN1aXRjYXNl 45391\nZGF5TmFtZQ== 45392\nIHdhc3RlZnVs 45393\nbWFycmlhZ2U= 45394\nIE1jQ2FiZQ== 45395\naXRlY2g= 45396\nIE9zcw== 45397\nQ2xvc3VyZQ== 45398\nIFRyZWFzdXJlcg== 45399\nIGluZGVjZW50 45400\nIER1bGw= 45401\nIHJlc2lkZW5jZXM= 45402\nMTk1OQ== 45403\nIFNldHRsZW1lbnQ= 45404\nSGFtaWx0b24= 45405\nIHNlbGZpZXM= 45406\nIFJhbmtpbmc= 45407\nIEJhcmtsZXk= 45408\nIEJvcmU= 45409\nIFdDUw== 45410\nIE1hcml0aW1l 45411\nIEh1aA== 45412\nIEZvcmVzdHJ5 45413\nIGN1bHRpdmF0aW5n 45414\nIEJhbGxhcmQ= 45415\nIGdhcnJpc29u 45416\nIFNETA== 45417\nOTMw 45418\nIG5hc2NlbnQ= 45419\nIGlycmVzaXN0aWJsZQ== 45420\nIGF3ZnVsbHk= 45421\nXC9cLw== 45422\nIGVxdWF0ZQ== 45423\nIGFudGhyb3BvbG9neQ== 45424\nIFN5bHZpYQ== 45425\nIGludGVzdGluZQ== 45426\nIGlubm9jdW91cw== 45427\nY2Vzc2l2ZQ== 45428\nYWdyYQ== 45429\nIE1ldHJvaWQ= 45430\nR3JhbnQ= 45431\nODU1 45432\ngZY= 45433\nICJf 45434\n44OD44OJ 45435\nIGFwcHJhaXNhbA== 45436\nIEZyZWRkeQ== 45437\nMDQ2 45438\nIDQwNg== 45439\nIDE4MzA= 45440\nIGRvY2tpbmc= 45441\nU3RhdGlj 45442\nIHBvbnQ= 45443\nIFZvbHRhZ2U= 45444\nIFN0ZWFk 45445\nIE1vcnRnYWdl 45446\nIEpvbmFo 45447\nWUw= 45448\nQ0xBU1NJRklFRA== 45449\nIGFzYmVzdG9z 45450\nbmlrb3Y= 45451\nIGNvbGxhZ2Vu 45452\nIE9yYml0YWw= 45453\nUG9ja2V0 45454\nNzk5 45455\nIGh5YnJpZHM= 45456\naW5jaGVz 45457\nIGludm9pY2U= 45458\ndW5keQ== 45459\nIGluZXF1YWxpdGllcw== 45460\nVHJlbmQ= 45461\nd2FzaGVk 45462\nQkFMTA== 45463\nIGx1Y2lk 45464\nIENvbW1lbnRhcnk= 45465\nIHdpdHR5 45466\nQnJhbmRvbg== 45467\nIGJydWlzaW5n 45468\nIDYyMA== 45469\nZXNjZW50 45470\nYm94aW5n 45471\nUE9M 45472\nIDM3OA== 45473\nUmVjdA== 45474\nIGxpY2VuY2Vz 45475\nIE1jR2Vl 45476\ncHJlc3NlZA== 45477\nRGFubnk= 45478\nIGphbW1lZA== 45479\nb3JkaW5hdGU= 45480\nIGxldGg= 45481\nIGRpc3Rpbmd1aXNoZXM= 45482\nIFlhbWFoYQ== 45483\nSUxT 45484\nIEh1bWU= 45485\nIENhdGVnb3JpZXM= 45486\nUm9iZXJ0cw== 45487\nQ2hhcnQ= 45488\nIGJlZXRsZQ== 45489\nIEdyYXZleWFyZA== 45490\nICgkKQ== 45491\nb8Sf 45492\nIHR3aWxpZ2h0 45493\nYXJlbGxh 45494\n4b0= 45495\nIGJvb3Rocw== 45496\nIEhIUw== 45497\nIEZlbGRtYW4= 45498\nIGV4Y2F2YXRpb24= 45499\nIHBoaWxvc29waGllcw== 45500\nYXRvZ3JhcGh5 45501\nIEdhcmFnZQ== 45502\ndGVjaG5vbG9neQ== 45503\nIHVuZm9yZ2V0dGFibGU= 45504\nIHZlcmlmeWluZw== 45505\nIHN1Ym9yZGluYXRlcw== 45506\nRWxz 45507\nIG5lYg== 45508\nR2FtaW5n 45509\nRU5B 45510\nIEFjaGlldmVtZW50 45511\naXR0ZXJz 45512\nIEdhYmU= 45513\nIGR1bXBz 45514\nZm9yY2Vy 45515\nIHBvaWduYW50 45516\nIE1CQQ== 45517\nIEhlaWRp 45518\naW1laQ== 45519\nIG1hZ2Vz 45520\nIGxpYmVyYXRl 45521\nIGNpcmN1bWNpc2Vk 45522\nIE1lcm1haWQ= 45523\nIE1hdHRo 45524\ndG9nZXRoZXI= 45525\nIFdpY2hpdGE= 45526\nIHN0b3JlZnJvbnQ= 45527\nIEFkaW4= 45528\nVklJ 45529\nRm91cnRo 45530\nIGV4cGxvcmVycw== 45531\nV0VS 45532\nTm90YWJsZQ== 45533\nQnJvb2s= 45534\nbWVucw== 45535\nRmFpdGg= 45536\nLS0tLS0tLS0t 45537\nIEpvdQ== 45538\nrLw= 45539\nIHBpbmVhcHBsZQ== 45540\nIGFtYWxn 45541\nZWxu 45542\nYXJrYWJsZQ== 45543\nIOOCteODvOODhuOCow== 45544\nIOOCteODvOODhuOCo+ODr+ODsw== 45545\nIG92YXJpYW4= 45546\nIEVjaG9lcw== 45547\nIGhhaXJjdXQ= 45548\nIHBhdg== 45549\nIGNoaWxsZWQ= 45550\nYW5hc2lh 45551\nIHN0eWxlZA== 45552\nIGRhYg== 45553\nbmlwZXI= 45554\nIG1pbmlzdGVyaWFs 45555\nIERVUA== 45556\nVGFu 45557\nIHN1bHBo 45558\nIERldGVy 45559\nIEJvaGVt 45560\nb2Rhbg== 45561\nIGVkdWNhdG9y 45562\n4pOY 45563\nc3Bpcg== 45564\nQ2hpY2tlbg== 45565\nIEVsZWFub3I= 45566\nIHF1aQ== 45567\nIGhlYXZpZXN0 45568\nIGdyYXNwZWQ= 45569\nVVJB 45570\nIGNyb29rZWQ= 45571\nSmVzc2ljYQ== 45572\ncHJvYmxlbQ== 45573\nIHByZWRldGVybWluZWQ= 45574\nIG1hbmlhYw== 45575\nIGJyZWF0aHM= 45576\nIExhdWRlcmRhbGU= 45577\nIGhvYmJpZXM= 45578\neXo= 45579\nQ3JpbWU= 45580\nIGNoYXJpc21h 45581\nZEw= 45582\nIGxlYXBpbmc= 45583\nIGtpdHRlbnM= 45584\nQW5nZWxv 45585\nIEpBQ0s= 45586\nIFN1emFubmU= 45587\nIGhhbHRpbmc= 45588\nRU5USU9O 45589\nIHN3YWxsb3dpbmc= 45590\nIEVhcnRocXVha2U= 45591\nIGVpZ2h0ZWVudGg= 45592\nIE5JQw== 45593\nIElORg== 45594\nIENvbnNjaW91cw== 45595\nIHBhcnRpY3VsYXJz 45596\nY2lyY2xl 45597\nNzQw 45598\nIGJlbmV2b2xlbnQ= 45599\nIDc0Nw== 45600\nIDQ5MA== 45601\nIHJ1bmRvd24= 45602\nIFZhbGVyaWU= 45603\nIEJVUg== 45604\nIGNpdmlsaXNhdGlvbg== 45605\nIFNjaG4= 45606\nV0I= 45607\nb3RpZGU= 45608\naW50ZXJuYXRpb25hbA== 45609\nIGpvaG4= 45610\nIDE5MDI= 45611\nIHBlYW51dHM= 45612\nIGZsYXZvcmVk 45613\na3Vz 45614\nIHJvYXJlZA== 45615\nIGN1dG9mZg== 45616\n6aM= 45617\nIG9ybmFtZW50 45618\nIGFyY2hpdGVjdHVyZXM= 45619\nIDM2OQ== 45620\nb2xvcg== 45621\nIFdpbGRl 45622\nIENSQw== 45623\nIEFkanVzdGVk 45624\nIHByb3Zva2luZw== 45625\nbGFuZGlzaA== 45626\nIHJhdGlvbmFsaXR5 45627\nIGp1c3RpZmllcw== 45628\nIGRpc3BlbA== 45629\nIGFtZXJpYw== 45630\nIFBvbGVz 45631\n2Kk= 45632\nIGVudmlz 45633\nIERvb2RsZQ== 45634\n5L2/ 45635\naWdzYXc= 45636\nYXVsZHJvbg== 45637\nVGVjaG5pY2Fs 45638\nVGVlbg== 45639\ndXBoZW0= 45640\nIFhpYW5n 45641\nIGRldHJhY3RvcnM= 45642\nIFpp 45643\nIEpvdXJuYWxpc3Rz 45644\nIGNvbmR1Y2l2ZQ== 45645\nIFZvbHVudGVlcnM= 45646\nIHNk 45647\nS25vd2luZw== 45648\nIHRyYW5zbWlzc2lvbnM= 45649\nIFBMQU4= 45650\nIExJQg== 45651\nIGFsbHVkZWQ= 45652\nIG9iZQ== 45653\nIGRvcGU= 45654\nIEdvbGRzdGVpbg== 45655\nIHdhdmVsZW5ndGhz 45656\nIERlc3RpbmF0aW9u 45657\nbmRh 45658\ndWdp 45659\nIGF0dGVudGl2ZQ== 45660\nIExlYW4= 45661\ncmFsdGFy 45662\nIG1hbmc= 45663\nbWJ1ZHM= 45664\nYWtpbmdz 45665\nYmVuZGVy 45666\nIGFjY29s 45667\nIGNyYXdsZWQ= 45668\nTk9X 45669\nTWlubmVzb3Rh 45670\nIGZsb3VyaXNoZWQ= 45671\nIFp1cA== 45672\nIFN1cGVydmlzb3I= 45673\nIE9saXZpZXI= 45674\nRXhjZWxsZW50 45675\nIHdpZGVu 45676\nRG9uZQ== 45677\nIHdpZw== 45678\nIG1pc2NvbmNlcHRpb25z 45679\nQ29ycA== 45680\nV2Fu 45681\nIHZlbmVyYWJsZQ== 45682\nIE5vdGFibHk= 45683\nIEtsaW5nb24= 45684\nYW5pbWF0ZQ== 45685\nQm9vc3Q= 45686\nIFNBWQ== 45687\nbWlzc2luZw== 45688\naWJsaW9ncmFwaHk= 45689\nbWVsb24= 45690\nIHBheWRheQ== 45691\n2LM= 45692\nYm9sZQ== 45693\nIHZlaWxlZA== 45694\nIEFscGhhYmV0 45695\nSXRhbGlhbg== 45696\nIGV2ZXJsYXN0aW5n 45697\nIFJJUw== 45698\nIENyZWU= 45699\ncm9tcHQ= 45700\nIGhhdGluZw== 45701\nIGdyaW5uaW5n 45702\nIGdlb2dyYXBoaWNhbGx5 45703\nT1NI 45704\nIHdlZXBpbmc= 45705\nIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg 45706\nIGltcGVjYw== 45707\nTGV0dGVy 45708\nIGJsb2F0ZWQ= 45709\nUExB 45710\nIEZlaW4= 45711\nIHBlcnNldmVy 45712\nVGh1bmRlcg== 45713\nIGF1cg== 45714\nIFJM 45715\nIHBpdGZhbGxz 45716\n4pa6 45717\nIHByZWRvbWluYW50 45718\nIDUyNQ== 45719\nNzE4 45720\nQVBF 45721\nNzE0 45722\nIGZhcm1sYW5k 45723\nIFFpYW8= 45724\nIHZpb2xldA== 45725\nIEJhaGFtYXM= 45726\nIGluZmxpY3Rpbmc= 45727\nIEVmZmljaWVuY3k= 45728\nIGhvbWVicmV3 45729\nIHVuZGVydG9vaw== 45730\nIGN1cmx5 45731\nIEhhcmRpbmc= 45732\nbWFuaWE= 45733\nNTk2 45734\nIHRlbXBlcmVk 45735\nIGhhcnJvd2luZw== 45736\nIFBsZWRnZQ== 45737\nIEZyYW5rZW5zdGVpbg== 45738\n6Ko= 45739\nTW90aW9u 45740\nIHByZWRpY3RhYmx5 45741\nIEV4cGxvc2lvbg== 45742\nb2N1c2luZw== 45743\nZXJk 45744\nY29sbw== 45745\nRkZFUg== 45746\nIGJhY2tmaWVsZA== 45747\nIFZJREU= 45748\ndWVibA== 45749\nTmFycg== 45750\nIEFyZ3VtZW50 45751\nIGdlbm9taWM= 45752\nIGJvdXRpcXVl 45753\nIGJhdHRlZA== 45754\nIEJpbmFyeQ== 45755\nIGdhbWI= 45756\nIFJoeXRobQ== 45757\nNjcz 45758\nIGFmbG9hdA== 45759\nIE9seW1waWE= 45760\nWUlORw== 45761\nIGVuZGlm 45762\naXNpbg== 45763\nIHdpbnRlcnM= 45764\nIHNjYXR0ZXJpbmc= 45765\nSXY= 45766\nRGlzdGFuY2U= 45767\nIHRydQ== 45768\nIENvbWZvcnQ= 45769\nIG5leHVz 45770\nIGFpcmZsb3c= 45771\nIEJ5emFudGluZQ== 45772\ncGF5ZXJz 45773\nY29uaQ== 45774\nIEJldHN5 45775\nRGVhbA== 45776\nIE51Zw== 45777\nIENvbnRpbmVudA== 45778\ncmVkaWJseQ== 45779\nIG9wdGltaXppbmc= 45780\nYWxiZWl0 45781\nIGVjc3RhdGlj 45782\nIFByb3Rv 45783\n57c= 45784\naXZvdA== 45785\n4paE 45786\nZW1w 45787\ncm91bmRlcg== 45788\nIGNsb3V0 45789\nIElTVA== 45790\nNjYz 45791\nIERvbGxhcnM= 45792\nIERBQw== 45793\nIHN1YnNjcmliZWQ= 45794\nIHJlaGVhcnNhbA== 45795\nIGFtcHM= 45796\nIFNoYW5n 45797\nZXNt 45798\nIHNwcmlua2xl 45799\nIGFzc2FpbGFudA== 45800\nIE9v 45801\nIENvaW5iYXNl 45802\nVGFjdA== 45803\nIHJldGluYQ== 45804\nIG51bnM= 45805\nUk9O 45806\nYXR0bw== 45807\nIGp1Zw== 45808\nIFNWRw== 45809\nIGJpa2luaQ== 45810\nIEZJTEU= 45811\nIEZvdW5kZXJz 45812\nZXBvcnQ= 45813\nIEtQ 45814\nIHJlc3RvcmVz 45815\nIFRoaWNr 45816\nIGFzaG9yZQ== 45817\nIGFwcHJvdmFscw== 45818\nUmVuZGVy 45819\nTUFH 45820\nR3JhaGFt 45821\nIENvcnRhbmE= 45822\n44Oz44K4 45823\nc3No 45824\nb3JpYW5z 45825\nYXJzaXR5 45826\nIEluc3BpcmVk 45827\ndXBwZXI= 45828\nIHNpZ25hbGxpbmc= 45829\nIHJlYnVrZQ== 45830\nIGZsYXJlcw== 45831\nIGRvd250aW1l 45832\nU3R1ZGllcw== 45833\nIHN0YWduYXRpb24= 45834\nIFNlcXVlbmNl 45835\nIGdydW50 45836\nIGFzc3VyZXM= 45837\nIFBMQQ== 45838\nNTky 45839\nIGludHJhdmVu 45840\nZGVwZW5k 45841\nU3VzYW4= 45842\nIE1hbnppZWw= 45843\nTWFuaWE= 45844\nQ29udHJhY3Q= 45845\nIHNsYW1z 45846\nIGN1bHR1cmVk 45847\nIGNyZWRpdG9y 45848\nTElTVA== 45849\nIEhVTQ== 45850\nIENoYXR0YW5vb2dh 45851\nc2VydmVk 45852\nIGNsb2FrZWQ= 45853\nIEZUUA== 45854\ncG93ZGVy 45855\nIFN0ZWxsYQ== 45856\ndWN0aXZl 45857\nIGNoZWFwbHk= 45858\nIE1VQ0g= 45859\nIEdhbGlsZW8= 45860\nIHN1aXRlcw== 45861\nc3BlZWNo 45862\nIGRlbGliZXJhdGlvbnM= 45863\nIENoaXBz 45864\nq5g= 45865\nQmFsYW5jZQ== 45866\nIFd5bm5l 45867\nIEFrcm9u 45868\nQXNzZXQ= 45869\nIGhvbm91cmVk 45870\nIGVkZ2Vk 45871\nTGlrZXdpc2U= 45872\nYW5pbW91cw== 45873\nIFdhZ2U= 45874\nIEV6ZWs= 45875\nYWR2ZXJ0aXNlbWVudA== 45876\nIFJUWA== 45877\nIE1BRA== 45878\nIG1pZ3JhdGluZw== 45879\nIFNRVQ== 45880\nIDQ3NQ== 45881\nRWRpdGVk 45882\nIHNob3J0aGFuZA== 45883\nIEJhc2ljcw== 45884\nIGNyb3RjaA== 45885\nIEVWRU4= 45886\nIHZt 45887\nZWZmaWNpZW5jeQ== 45888\nIGNhbHZlcw== 45889\nIEZyaWU= 45890\nIEJyaWxsaWFudA== 45891\nIHN0cmlrZXJz 45892\nIHJlcGVudGFuY2U= 45893\nIGFydGVyaWVz 45894\ncmw= 45895\nQmVk 45896\naGFw 45897\nIGNyeXB0b2dyYXBoeQ== 45898\nIFNhYnJlcw== 45899\nIDQxNA== 45900\ndmlrcw== 45901\naWhhcmE= 45902\nYXBzZXM= 45903\nVGFsa2luZw== 45904\nIGludGVydHdpbmVk 45905\nIGRvY2tz 45906\nIGFsbGVsZQ== 45907\nIEFydGlmYWN0 45908\nIEhJTQ== 45909\ndG9ybg== 45910\n55U= 45911\nIG9wYWNpdHk= 45912\nIEVseQ== 45913\nb3N1a2U= 45914\nIG5pcHBsZQ== 45915\nIGhhbmR3cml0dGVu 45916\nIFZL 45917\nIENoYW1iZXJsYWlu 45918\nIExhb3M= 45919\naWdyYXBo 45920\nZ3Jvdw== 45921\nIHRyaWxsaW9ucw== 45922\nIGRlc2NlbmRhbnQ= 45923\nIFNhaWxvcg== 45924\nYXN1cmluZw== 45925\nIGNlaWxpbmdz 45926\nIFdhcmVob3VzZQ== 45927\nZmx5aW5n 45928\nIEdsb3c= 45929\nIG5vbnQ= 45930\nIG1pc2NhcnJpYWdl 45931\nIHJpZ3M= 45932\nIG1pbmlzdHJpZXM= 45933\nIGVsYWJvcmF0ZWQ= 45934\nIGRlbHVzaW9uYWw= 45935\nIEh1bWFuZQ== 45936\nIDM3OQ== 45937\nbmV0cw== 45938\nIGJsYWNrb3V0 45939\nYWRkZXJz 45940\nIG5w 45941\nIFRpcmU= 45942\ncm9zYw== 45943\nIHN1YmRpdg== 45944\nIGxpbmthZ2U= 45945\nIGNocm9ub2xvZ2ljYWw= 45946\nIEhFUk8= 45947\nIHJlc2V0dGxlbWVudA== 45948\nIFZpbnls 45949\nIHBhc3RvcmFs 45950\nIE1vYmls 45951\nIEJhcmJhcg== 45952\nQ29vbGRvd24= 45953\nIEZyaXR6 45954\nY3JpbWluYWw= 45955\ncmVwZQ== 45956\nIGJlbGxpZw== 45957\nIEJyZWVk 45958\nIDQxOA== 45959\nIHNlbWJsYW5jZQ== 45960\naWpr 45961\nIGN1cnRhaWw= 45962\nIGNsaW5jaA== 45963\nY29udGFpbmVk 45964\nIFByb21wdA== 45965\nYXN0b24= 45966\nIHdp 45967\nIHB1cnN1aXRz 45968\nNTE1 45969\nIEdsb3Nz 45970\nIGZsaXBz 45971\nIGNvdXBvbnM= 45972\nIGNsb25pbmc= 45973\nIExpa2VseQ== 45974\nUmVtb3ZlZA== 45975\nIFF1YXJ0eg== 45976\ncmljZXM= 45977\nIFNwZWFycw== 45978\nIHBpb3Vz 45979\nIGRlcHJlY2lhdGlvbg== 45980\nIERhcmU= 45981\nb3VuY2Vz 45982\nYW1heg== 45983\nT250 45984\nIHBpbm5hY2xl 45985\nZG9ja2Vy 45986\nMDI2 45987\nIFd5cg== 45988\nIFByb3Blcg== 45989\ny4g= 45990\nbmls 45991\nQnl0ZXM= 45992\nIHNlZWtlcg== 45993\ndHJpYWw= 45994\nIHVuZm9sZHM= 45995\nIE1hcnNl 45996\nIGV4dHJhdmFnYW50 45997\nIFN1cnZpdm9ycw== 45998\nUkVEQUNURUQ= 45999\nIFNwZWVkd2F5 46000\nIENyYWlnc2xpc3Q= 46001\nc3VibWl0 46002\nIEdlbmVyYXRpb25z 46003\nIHVwaG9sZGluZw== 46004\nIGJsb29kc3RyZWFt 46005\nIE1pc3Npb25z 46006\nIExhd24= 46007\nIGxpbWJv 46008\nZW5laQ== 46009\nSHVo 46010\nIFdpbGRjYXRz 46011\ncHJlcA== 46012\nIE1hcmt1cw== 46013\nIEZvcmJpZGRlbg== 46014\ncml0aWM= 46015\nSU5P 46016\nIGV4aGliaXRpbmc= 46017\ncmVxdWVudA== 46018\nY2h1aw== 46019\nIGhhYml0dWFs 46020\nIENvbXBhdGliaWxpdHk= 46021\nRHJhZw== 46022\nUklQVA== 46023\ndWphaA== 46024\nR1JPVU5E 46025\nIGRlbGlucXVlbnQ= 46026\nIGJ1cm5lcg== 46027\nIGNvbnRlbXBvcmFyaWVz 46028\nIGdpbW1pY2s= 46029\nbG9hZHM= 46030\nIG5venpsZQ== 46031\ncG9kY2FzdA== 46032\nIFdhaw== 46033\nIFN0YXRlbg== 46034\nIEt1aA== 46035\n44GT 46036\naW50ZXJydXB0ZWQ= 46037\nIGludmluY2libGU= 46038\nIEJ1cm5ldHQ= 46039\nY2lnYXJldHRl 46040\nIFBlYmJsZQ== 46041\nIFRlbXBvcmFyeQ== 46042\nIE1hcmlubw== 46043\nNTgy 46044\nIHdhc3RlbGFuZA== 46045\naWRlbnRseQ== 46046\nVHg= 46047\nIHJpdGU= 46048\nIFBhbmFzb25pYw== 46049\nIE1pZGRsZXM= 46050\nIEhvcnRvbg== 46051\nYWV1cw== 46052\nIGN1cmluZw== 46053\nIG1hdHM= 46054\nIGFkam91cm4= 46055\nIGZlYXJzb21l 46056\ncGV6 46057\nYm9hdHM= 46058\nIHByb3BlbGw= 46059\nIGNvbmZsaWN0ZWQ= 46060\nIEFuZ2Vy 46061\nIGluc3VyZ2VudA== 46062\nS2FybA== 46063\nIGNvYWxlcw== 46064\nIHNvdXRod2VzdGVybg== 46065\nIGRpc3N1 46066\nIE92ZXJ0 46067\nKioqKioqKioqKioq 46068\nIGJveGVk 46069\nIEJydW5l 46070\nYWFh 46071\nIGdhcmRlbmluZw== 46072\nIEVuZ2Vs 46073\ndHJhY2tz 46074\nIHB1cmlmaWVk 46075\nIHBsYWNlaG9sZGVy 46076\nIExpa2Vz 46077\nIGRhbg== 46078\nR2Fi 46079\nIGVjdA== 46080\nIEZhdw== 46081\nIEVsaW90 46082\nICcs 46083\nb3Ryb3BpYw== 46084\nIFJ1aW4= 46085\naGVkb24= 46086\nIGNhdWw= 46087\nIGFmdA== 46088\nIENhZGlsbGFj 46089\nZ2hh 46090\nYXNzaWFu 46091\ndWRlYg== 46092\nIFRpY2s= 46093\nIGFkanVzdHM= 46094\nQVJHRVQ= 46095\nNTM3 46096\naXNjaGU= 46097\nYW50eQ== 46098\nIEZyaWVkcmljaA== 46099\nIEJsaXp6 46100\nIEFPTA== 46101\nQ2FtcGFpZ24= 46102\nIG1hbW1hbA== 46103\nIFZlaWw= 46104\nIEtldg== 46105\nIE1hdXJpdA== 46106\nIERhbWllbg== 46107\nTmF0aW9u 46108\nRWFzdGVybg== 46109\nIHs6 46110\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 46111\nIHN0ZXJlb3R5cGljYWw= 46112\nIGF0dGlj 46113\nIEN5Ym9yZw== 46114\ncmVxdWlyZQ== 46115\nIGF3YXJkaW5n 46116\nIFBhcHVh 46117\nYnRu 46118\nYmVudA== 46119\nQm9v 46120\nICg9 46121\nIFhhbmRlcg== 46122\nIFNvbWVyc2V0 46123\nIGNhdGNoeQ== 46124\nIGNlcnRpZnk= 46125\nU1RSVUNU 46126\nIGl0YWw= 46127\nIHRpZGVz 46128\nIEJyYW5kcw== 46129\nR3JheQ== 46130\nY29tcGV0aXRpdmU= 46131\nIGN1cmF0b3I= 46132\nIERH 46133\nb21pbml1bQ== 46134\nIEdNT3M= 46135\nY2lhdGluZw== 46136\nIENhcm1lbg== 46137\nb3dhcmQ= 46138\nQmFsdGltb3Jl 46139\nIHJnYg== 46140\nQ3U= 46141\nIHdpcGVz 46142\nc3BlbGw= 46143\nSVRORVNT 46144\nIHN1bW1hcml6ZXM= 46145\nIFJldmlz 46146\nIHdoaXN0bGVibG93ZXJz 46147\nIEJyZWFjaA== 46148\nIGNyb2NoZXQ= 46149\na29z 46150\nZXdza2k= 46151\nIHJlcGV0 46152\nIGNyaW1zb24= 46153\nIEthcmFjaGk= 46154\ncmVhZGFibGU= 46155\nZGltZW5zaW9u 46156\nIElnb3I= 46157\naWxkZWQ= 46158\nIFplZA== 46159\nIEtlYW5l 46160\nIENvc21ldGlj 46161\nREVQ 46162\nIHJldHJlYXRpbmc= 46163\nIFVB 46164\nZW5zaWNhbA== 46165\nIGR1c2s= 46166\nIERpY2tlbnM= 46167\nIGFyZW5hcw== 46168\nIFBhc3NhZ2U= 46169\nbGV2ZWxz 46170\nIGN1cnY= 46171\nUG9wZQ== 46172\nIGNob3Jlcw== 46173\nIEVsaXNl 46174\nIENvbXBhc3M= 46175\nYnVi 46176\nIG1hbW1hbGlhbg== 46177\nIFNhbnNrcml0 46178\nIEFOQw== 46179\nIENyYWNr 46180\nUXVhbA== 46181\nTGF1bg== 46182\nYW1wdW5r 46183\nIGxlYXJuZXJz 46184\nIGdsYW1vcm91cw== 46185\nIGZ1cnRoZQ== 46186\nZXJtb3R0 46187\nY2FuZA== 46188\nR2VuZXJpYw== 46189\nIG5hcnJhdGVk 46190\nIGRpc29yZGVybHk= 46191\nIFRyYW5zYWN0aW9ucw== 46192\nIERldGVudGlvbg== 46193\nIFJva3U= 46194\nxI0= 46195\nIHVuZGVyc3RhdGVtZW50 46196\nIFNhdXI= 46197\nIFJvZHJpZ28= 46198\nIEFTQVA= 46199\nU2lu 46200\nIHJlam9pY2U= 46201\nTWV0aG9kcw== 46202\nIGVsZWN0cm9kZQ== 46203\nIHdvcnNoaXBwZWQ= 46204\nIGlkaQ== 46205\nIFBoeXNpY2lhbnM= 46206\nIHBvcHVw 46207\nIGRlZnQ= 46208\nIFJlbW92YWw= 46209\nIEJ1ZW5vcw== 46210\ndmVyYnM= 46211\nIGZ1bms= 46212\ndXNoYQ== 46213\ncmljdGlvbg== 46214\nb3JlYQ== 46215\nIEJhbmdhbG9yZQ== 46216\nIEtlbm9iaQ== 46217\nenpp 46218\nIG5vcm1hdGl2ZQ== 46219\nIGdvYmxpbnM= 46220\nIGNhZmVz 46221\nIFVOQ0xBU1NJRklFRA== 46222\nIEZpcmVk 46223\nU0lHTg== 46224\nIHNjbGVyb3Npcw== 46225\nIFZvdGVy 46226\nIFNvbm55 46227\nIEV4dGVuZA== 46228\nIEVWcw== 46229\nQXJzZW5hbA== 46230\nIHBzaQ== 46231\nIHdpZGVzdA== 46232\nIFR1cw== 46233\nIGxvb21z 46234\nIGp1c3RpZnlpbmc= 46235\nIEdyYW5nZXI= 46236\n6K8= 46237\nUmVmZXI= 46238\nNTgz 46239\nIGZsb3VyaXNoaW5n 46240\nYWJyZQ== 46241\nIHJhdmU= 46242\nIENvbnRyYQ== 46243\nIDE4OTg= 46244\nQWRkcw== 46245\nIGZ1bA== 46246\nIENvb2tl 46247\nc29tZW9uZQ== 46248\nPSM= 46249\nNjcx 46250\nIHlhaw== 46251\nIGFydGU= 46252\nIE1pc2NlbGxhbmVvdXM= 46253\nIERldGVjdGlvbg== 46254\nIENsYW5jeQ== 46255\n4oE= 46256\nYXNzaWVz 46257\nIHZhbGlhbnQ= 46258\nIEZlbWluaXN0 46259\nY29ycnVwdGlvbg== 46260\nVmVs 46261\nUGVhcg== 46262\nIHN1Y2NpbmN0 46263\nIHF1aWNrZXN0 46264\na3c= 46265\nIHNwaXR0aW5n 46266\nIExpYnJhcmllcw== 46267\n5YWJ 46268\nYW50eg== 46269\nRGFk 46270\nIFNwZWNpZmljYXRpb25z 46271\ncnVwdWxvdXM= 46272\nYW5kcg== 46273\nUkVTVUxUUw== 46274\nIHNub3diYWxs 46275\nIHByZWRpcw== 46276\nIEJheHRlcg== 46277\nIE51cnNpbmc= 46278\nIENoYWZm 46279\nc3dl 46280\nIG91dGFnZQ== 46281\nIG5lc3Rpbmc= 46282\nIG5vdG9yaWV0eQ== 46283\ndHJpZ2dlcg== 46284\nb25pdGU= 46285\nam9u 46286\nIGZvdQ== 46287\nb29rZWQ= 46288\nIENlbGVicml0eQ== 46289\ncmVhbGl0eQ== 46290\nIGZhdGln 46291\nIGh1Z2dpbmc= 46292\nIGJvdGhlcnM= 46293\nIFBhbnplcg== 46294\nIENoYW5kcmE= 46295\nZmlndXJlZA== 46296\nIHZvbHRz 46297\nIENsb3Vkcw== 46298\nIGZlZWJsZQ== 46299\nIEN1cnZl 46300\nIEFzdXM= 46301\nNzg2 46302\nYWJzb3I= 46303\nIFZJQ0U= 46304\nIEhlc3M= 46305\nIG1hbnVmYWN0dXJlcw== 46306\nIGdyaXp6 46307\nIFBvd2VyZnVs 46308\nYWNpZA== 46309\nIHN1YnNlY3Rpb25z 46310\nIEtydWdtYW4= 46311\nIEFscHM= 46312\naXN1 46313\nIHNlcXVlc3Q= 46314\nIFVsdHJvbg== 46315\nIFRpbmtlcg== 46316\nIEdvb3Nl 46317\nIG1pc21hdGNo 46318\nQXR0b3JuZXk= 46319\nIG1vcnBob2xvZ3k= 46320\nIFNpeGVycw== 46321\ndXR0ZXJlZA== 46322\nIEVMRUNU 46323\nZ3Jhbg== 46324\nUnVzc2VsbA== 46325\nIEdTTA== 46326\nIGZvcnRuaWdodA== 46327\nIC4p 46328\nIGFwb3N0bGU= 46329\ncHJvbmU= 46330\nZWxpc3Q= 46331\nVW50aXRsZWQ= 46332\nIEltcGxlbWVudGF0aW9u 46333\naXN0b3Jz 46334\nIHRhbmtlcg== 46335\nIHBsdXNo 46336\nIGF0dGVuZGFudHM= 46337\nIFRpaw== 46338\nIEdyZWVud2ljaA== 46339\nIFlvbg== 46340\nIFNQTA== 46341\nY2VsbHM= 46342\ndW50bGVk 46343\nU29sdXRpb24= 46344\nIFF1w6k= 46345\nIHZhY2F0ZWQ= 46346\nIHVwdGljaw== 46347\nIE1lcmlkaWFu 46348\n5oM= 46349\nIERyaWxs 46350\nOTI1 46351\nNTg0 46352\nIHJlbm92YXRlZA== 46353\nIEt1YnJpY2s= 46354\nenlr 46355\nIGxvdXN5 46356\ncHBlbA== 46357\nb2h5ZHJhdGU= 46358\nIEl6enk= 46359\nbGVzaWFzdGljYWw= 46360\nQ0ND 46361\nIEFqYXg= 46362\nIGFkYXB0ZXJz 46363\nIFBldHJhZXVz 46364\nIGFmZmlybWF0aW9u 46365\nIFNUT1I= 46366\nbGVtcw== 46367\nYWRvZXM= 46368\nIENvbnN0YW50aW5vcGxl 46369\nIHBvbmllcw== 46370\nIGxpZ2h0aG91c2U= 46371\nIGFkaGVyZW50cw== 46372\nIEJyZWVz 46373\nb21vcnBoaWM= 46374\nRmlnaHRpbmc= 46375\nIHBsYXN0ZXI= 46376\nIFBWQw== 46377\nIE9ic3Q= 46378\nIGRlYXJseQ== 46379\nIFRvb3Ro 46380\naWNrc29u 46381\nIHNoYW1pbmc= 46382\nUGxleA== 46383\nQWdn 46384\nIOKApiI= 46385\nIHN1YnJlZGRpdHM= 46386\nIHBpZ2Vvbg== 46387\nIFJlc2lkZW50aWFs 46388\nIFBhc3Npbmc= 46389\nIGx1bQ== 46390\nIFBlbnNpb24= 46391\nIHBlc3NpbWlzdGlj 46392\nIDQzMg== 46393\nemluc2tp 46394\nY2FkZQ== 46395\nMDc1 46396\nIGFwb2xvZ2lzZWQ= 46397\naXlhaA== 46398\nUHV0dGluZw== 46399\nIGdsb29teQ== 46400\nIEx5bWU= 46401\nPS09LT0tPS09LT0tPS09LQ== 46402\nIFRvbWU= 46403\nIFBzeWNoaWF0cmlj 46404\nIEhJVA== 46405\nY21z 46406\nYXBvbG9n 46407\nIGJyZWFrZXI= 46408\nIGRlZXBlbg== 46409\nIHRoZW9yaXN0 46410\nIEhpZ2hsYW5kcw== 46411\nIGJha2Vy 46412\nIHN0YXBsZXM= 46413\nIGludGVyZmVyZWQ= 46414\nIEFib3J0aW9u 46415\nam9pbmVk 46416\nY2h1 46417\nIGZvcm11bGF0ZQ== 46418\nIHZhY2NpbmF0aW9ucw== 46419\nIGJhbnRlcg== 46420\ncGhldXM= 46421\nIG91dGZpZWxkZXI= 46422\nIE1ldGVy 46423\nICMjIyMj 46424\nIDE4OTU= 46425\nIG5hcnJvd2luZw== 46426\nIFNUT1JZ 46427\nZnA= 46428\nIENTVA== 46429\naWdub3Jl 46430\nIHByb2NsYWltaW5n 46431\nIFJV 46432\nIEJBTEw= 46433\neW5h 46434\nNjUz 46435\nIHBvc2l0 46436\nUFJF 46437\nNTk0 46438\nIFJlZ2lzdHJhcg== 46439\nIFBpbGdyaW0= 46440\naWNpbw== 46441\nIHByZXR0 46442\nIGxpZmVsZXNz 46443\nIF9fXw== 46444\nTmVpZ2g= 46445\nIENodXJjaGVz 46446\nb3Jubw== 46447\nIG9yY3M= 46448\nIGtpbmRyZWQ= 46449\nIEF1ZGl0 46450\nIG1pbGxlbm5pYWw= 46451\nIFBlcnNpYQ== 46452\nZ3Jhdml0eQ== 46453\nIERpc2FiaWxpdHk= 46454\nIERBUks= 46455\nV3M= 46456\nb2Rvbg== 46457\nIGdyYW5kZGF1Z2h0ZXI= 46458\nIEJyb29rZQ== 46459\nIEFEQQ== 46460\nRVJB 46461\nIHBpY2t1cHM= 46462\nIFdpbGtpbnNvbg== 46463\nIFNoYXJkcw== 46464\nIE5L 46465\nIGV4cGVs 46466\nIEtpc2x5YWs= 46467\nIGphcmdvbg== 46468\nIHBvbGFyaXplZA== 46469\naWFuZQ== 46470\nUHVibGlzaGVy 46471\nIHJlYnV0dA== 46472\nIGFwcHJlaGVuc2lvbg== 46473\nIEtlc3NsZXI= 46474\nIHByaXNt 46475\nRlVM 46476\nMTk2NA== 46477\nIExvbGw= 46478\n5L8= 46479\nbGV0aGFs 46480\nxZ8= 46481\nIGdoZXR0bw== 46482\nIGJvdWxkZXI= 46483\nIFNsb3dseQ== 46484\nIE9zY2Fycw== 46485\nIEluc3RydWN0aW9u 46486\nIFVsdHI= 46487\nIE1vZQ== 46488\nTmljaA== 46489\nIFBBVEg= 46490\nKCo= 46491\nIFJFTEVBU0U= 46492\ndW5pbmc= 46493\ncm91c2U= 46494\nZW5lZw== 46495\nIHJlaW1i 46496\nIERldGVjdGVk 46497\nRG9T 46498\nIHN0ZXJsaW5n 46499\nIGFnZ3JlZ2F0aW9u 46500\nIExvbmVseQ== 46501\nIEF0dGVuZA== 46502\naGlnaGVy 46503\nIGFpcnN0cmlrZQ== 46504\na3Nvbg== 46505\nU0VMRUNU 46506\nIGRlZmxhdGlvbg== 46507\nIEhlcnJlcmE= 46508\nQ29sZQ== 46509\ncml0Y2g= 46510\nIGFkdmlzYWJsZQ== 46511\nRmF4 46512\nIHdvcmthcm91bmQ= 46513\nIHBpZA== 46514\nbW9ydGVt 46515\nZXJzZW4= 46516\nIHR5cG8= 46517\nIGFsdW0= 46518\nNzgy 46519\nIEphbWFs 46520\nc2NyaXB0cw== 46521\nIGNhcHRpdmVz 46522\nIFByZXNlbmNl 46523\nIExpZWJlcm1hbg== 46524\nYW5nZWxv 46525\nIGFsY29ob2xpc20= 46526\nYXNzaQ== 46527\nIHJlY2l0ZQ== 46528\nIGdhcGluZw== 46529\nIGJhc2tldHM= 46530\nIEdvdQ== 46531\nQnJvd3Nlcg== 46532\nbmVhdQ== 46533\nIGNvcnJlY3RpdmU= 46534\ndW5kYQ== 46535\nc2NvcmluZw== 46536\nIFhE 46537\nIGZpbGFtZW50 46538\nIGRlZXBlbmluZw== 46539\nIFN0YWlubGVzcw== 46540\nSW50ZWdlcg== 46541\nIGJ1Z2d5 46542\nIHRlbmFuY3k= 46543\nIE11YmFyYWs= 46544\nIHR1cGxl 46545\nIERyb2lk 46546\nIFNpdHRpbmc= 46547\nIGZvcmZlaXQ= 46548\nIFJhc211c3Nlbg== 46549\naXh0aWVz 46550\nZXNp 46551\nIEtpbW1lbA== 46552\nIG1ldGljdWxvdXNseQ== 46553\nIGFwb3B0 46554\nIFNlbGxlcg== 46555\nMDg4 46556\nZWNha2U= 46557\naGVtYXRpY2FsbHk= 46558\nVE4= 46559\nIG1pbmRsZXNz 46560\nIGRpZ3M= 46561\nIEFjY29yZA== 46562\nb25zZW5zZQ== 46563\nZW1pbmc= 46564\nYnJhY2U= 46565\nIGVCb29r 46566\nIERpc3RyaWJ1dA== 46567\nIEludmVzdG1lbnRz 46568\nd3Q= 46569\nXSks 46570\nYmVoYXZpb3I= 46571\nNTYz 46572\nIGJsaW5kaW5n 46573\nIFByb3Rlc3RlcnM= 46574\ndG9waWE= 46575\nIHJlYm9ybg== 46576\nIEtlbHZpbg== 46577\nIERvdmVy 46578\nIERhaXJ5 46579\nIE91dHM= 46580\nIFsv 46581\nz4A= 46582\nYnA= 46583\nIFZhbml0eQ== 46584\nIFJlY2Fw 46585\nIEhPVVNF 46586\nIEZBQ0U= 46587\nIDQyMg== 46588\nNjky 46589\nIEFudGlvY2g= 46590\nY29va2Vk 46591\nIGNvbGxpZGU= 46592\nIGFwcg== 46593\nIHNsZWVwZXI= 46594\nIEphcnZpcw== 46595\nIGFsdGVybmF0aXZlbHk= 46596\nIExlYXZlcw== 46597\nIE1hdw== 46598\nIGFudGlxdWl0eQ== 46599\nIEFkaW5pZGE= 46600\nIGFidXNlcg== 46601\nUG9rw6ltb24= 46602\nIGFzc29ydGVk 46603\nIFJldmlzaW9u 46604\nIFBpYW5v 46605\nIEdpZGVvbg== 46606\nT2NlYW4= 46607\nIHNhbG9u 46608\nIGJ1c3RsaW5n 46609\nb2duaXRpdmU= 46610\nIFJhaG1hbg== 46611\nIHdhaXRlcg== 46612\nIHByZXNldHM= 46613\nIE9zaA== 46614\nIEdIQw== 46615\nb3BlcmF0b3I= 46616\nIHJlcHRpbGVz 46617\nIDQxMw== 46618\nIEdhcnI= 46619\nIENoYWs= 46620\nIGhhc2hlcw== 46621\nIGZhaWxpbmdz 46622\nIGZvbGtsb3Jl 46623\nIGFibA== 46624\nIENlbmE= 46625\nIE1hY0FydGh1cg== 46626\nIENPVVJU 46627\nIHBlcmlwaGVyeQ== 46628\nYXBwZXJz 46629\nIHJlY2tvbmVk 46630\nIEluZmx1 46631\nIENFVA== 46632\nIDM3Mg== 46633\nIERlZmluaXRpdmU= 46634\nYXNzYXVsdA== 46635\nNDIx 46636\nIHJlc2Vydm9pcnM= 46637\nIGRpdmVz 46638\nIENvaWw= 46639\nREFR 46640\nIHZpdmlkbHk= 46641\nIFJK 46642\nIEJlbGxldg== 46643\nIGVjbGVjdGlj 46644\nIFNob3dkb3du 46645\nIEtN 46646\naXBlZA== 46647\ncmVldGluZ3M= 46648\nIEFzdWth 46649\nTGliZXJhbA== 46650\nIM+E 46651\nIGJ5c3RhbmRlcnM= 46652\nIEdvb2R3aW4= 46653\ndWtvbmc= 46654\nU2l0 46655\nIFRyZW0= 46656\nIGNyaW1pbmFsbHk= 46657\nIENpcmN1cw== 46658\nY2hyb21l 46659\nODg3 46660\nIG5hbm9w 46661\nIE9iaQ== 46662\nIExPVw== 46663\nb2do 46664\nIEF1dGhvcnM= 46665\nb2J5bA== 46666\nVXJiYW4= 46667\nIHRp 46668\nIFdlaXI= 46669\ndHJhcA== 46670\nYWd5 46671\nIHBhcmVudGhlc2Vz 46672\nIG91dG51bWJlcmVk 46673\nIGNvdW50ZXJwcm9kdWN0aXZl 46674\nIFRvYmlhcw== 46675\ndWJpcw== 46676\nUGFyc2Vy 46677\nU1RBUg== 46678\nIHN5bmFwdGlj 46679\nIEdlYXJz 46680\nIGhpYmVy 46681\nIGRlYnVua2Vk 46682\nIGV4YWx0ZWQ= 46683\nYXdhdHRz 46684\nSE9V 46685\nQ2h1cmNo 46686\nIFBpeGll 46687\nIFVyaQ== 46688\nIEZvcm1hdGlvbg== 46689\nIFByZWRpY3Rpb24= 46690\nQ0VP 46691\nIHRocm90dA== 46692\nIEJyaXRhbm4= 46693\nIE1hZGFnYXNjYXI= 46694\n64s= 46695\nIGJpbGxib2FyZHM= 46696\nIFJQR3M= 46697\nIEJlZXM= 46698\nY29tcGxldGVseQ== 46699\nRklM 46700\nIGRvZXNudA== 46701\nIEdyZWVuYmVyZw== 46702\ncmV5cw== 46703\nIHNsaW5n 46704\nIGVtcHRpZWQ= 46705\nIFBpeGFy 46706\nIERoYXJtYQ== 46707\nbHVjaw== 46708\naW5ndWlzaGVk 46709\nIGVuZG90 46710\nIGJhYnlz 46711\nMDU5 46712\nY2hlc3Q= 46713\ncmF0cw== 46714\nIHJpZGRlbg== 46715\nIGJlZXRsZXM= 46716\nIGlsbHVtaW5hdGluZw== 46717\nIGZpY3RpdGlvdXM= 46718\nIFByb3ZpbmNpYWw= 46719\nIDc2OA== 46720\nIHNoZXBoZXJk 46721\nIFJlbmRlcg== 46722\nIDE4OTY= 46723\nQ3Jldw== 46724\nIG1vbGRlZA== 46725\nIFhpYW9taQ== 46726\nIFNwaXJhbA== 46727\nIGRlbGlt 46728\nIG9yZ2FuaXNpbmc= 46729\nIGhvb3Bz 46730\nIEJlaQ== 46731\nemhlbg== 46732\nIGZ1Y2tpbg== 46733\nIGRlY2Fk 46734\nIHVuYmlhc2Vk 46735\nYW1teQ== 46736\nc3dpbmc= 46737\nIHNtdWdnbGVk 46738\nIGtpb3M= 46739\nIFBFUlNPTg== 46740\nIElucXVpc2l0b3I= 46741\nIHNub3d5 46742\nIHNjcmFwaW5n 46743\nIEJ1cmdlc3M= 46744\nUHRy 46745\nYWdhbWU= 46746\nUlc= 46747\nIGRyb2lk 46748\nIEx5cw== 46749\nIENhc3NhbmRyYQ== 46750\nSmFjb2I= 46751\nIDM1NA== 46752\nIHBhc3R1cmU= 46753\nIGZyYW5j 46754\nIFNjb3RjaA== 46755\nIEVuZHM= 46756\nIElHRg== 46757\nZGVmaW5pdGlvbg== 46758\nIGh5c3RlcmljYWw= 46759\nIEJyb3duZQ== 46760\nNzcx 46761\nIG1vYmlsaXphdGlvbg== 46762\n5pU= 46763\naXF1ZW5lc3M= 46764\nVGhvcg== 46765\nIHNwZWFyaGVhZGVk 46766\nIGVtYnJvaWxlZA== 46767\nIGNvbmplY3R1cmU= 46768\nanVkaWNpYWw= 46769\nQ2hvaWNl 46770\nIHBhcGVyYmFjaw== 46771\nUGly 46772\nIHJlY292ZXJz 46773\nIFN1cmdl 46774\nIFNob2d1bg== 46775\nIFBlZGlhdHJpY3M= 46776\n44Gg 46777\nIHN3ZWVwcw== 46778\nIExhYm9yYXRvcmllcw== 46779\nIFBhY2tz 46780\nYWx1cw== 46781\nYWRkaW4= 46782\nIGhlYWRsaWdodHM= 46783\nZ3Jh 46784\nRXZpZGVuY2U= 46785\nQ09MT1I= 46786\nQWRtaW4= 46787\nirE= 46788\nIGNvbmNvY3Q= 46789\nc3VmZmljaWVudA== 46790\nIHVubWFya2Vk 46791\nIHJpY2huZXNz 46792\nIGRpc3NlcnRhdGlvbg== 46793\nIHNlYXNvbmluZw== 46794\nIGdpYg== 46795\nIE1hZ2Vz 46796\ndW5jdGlvbnM= 46797\nIE5pZA== 46798\nY2hlYXQ= 46799\nIFRNWg== 46800\nY2l0aXplbnM= 46801\nIENhdGhvbGljaXNt 46802\nbmI= 46803\nIGRpc2VtYmFyaw== 46804\nIFBST0dSQU0= 46805\nYXF1ZXM= 46806\nVHlsZXI= 46807\nT3Jn 46808\nIFNsYXk= 46809\nIE5lcm8= 46810\nIFRvd25zZW5k 46811\nSU5UT04= 46812\ndGVsZQ== 46813\nIG1lc21lcg== 46814\nOTAx 46815\nIGZpcmViYWxs 46816\nZXZpZGVuY2U= 46817\nYWZmaWxpYXRlZA== 46818\nIEZyZW5jaG1hbg== 46819\nIEF1Z3VzdGE= 46820\nMDIx 46821\nIHNsZWQ= 46822\nIHJldXNlZA== 46823\nIEltbXVuaXR5 46824\nIHdyZXN0bGU= 46825\nYXNzZW1ibGVk 46826\nTWFyaWE= 46827\nIGd1bnNob3Rz 46828\nIEJhcmJpZQ== 46829\nIGNhbm5hYmlub2lkcw== 46830\nIFRvYXN0 46831\nIEtpbmRlcg== 46832\nSVJE 46833\nIHJlanV2ZW4= 46834\nIGdvcmU= 46835\nIHJ1cHR1cmU= 46836\nIGJyZWFjaGluZw== 46837\nIENhcnRvb24= 46838\nIDQ1NQ== 46839\nIFBhbGVv 46840\nNjE0 46841\nIHNwZWFycw== 46842\nIEFtZXM= 46843\nYWJ1cw== 46844\nTWFkaXNvbg== 46845\nR1JPVVA= 46846\nIGFib3J0ZWQ= 46847\neWFo 46848\nIGZlbG9u 46849\nIGNhdXNhdGlvbg== 46850\nIHByZXBhaWQ= 46851\nIHBpdHRlZA== 46852\nb3BsYW4= 46853\nIFNoZWxsZXk= 46854\nIFJ1c3Nv 46855\nIFBhZ2Fu 46856\nIHdpbGxmdWxseQ== 46857\nIENhbmF2ZXI= 46858\ndW5kcnVt 46859\nIFNhbGFyeQ== 46860\nIEFycGFpbw== 46861\ncmVhZGVy 46862\nIFJhdGlvbmFs 46863\nIE92ZXJzZQ== 46864\nIENhdXNlcw== 46865\nICou 46866\nIHdvYg== 46867\nS2VpdGg= 46868\nIENvbnNlbnQ= 46869\nbWFuYWM= 46870\nNzcz 46871\nNjIz 46872\nIGZhdGVmdWw= 46873\nZXRpbWVz 46874\nIHNwaXJpdGVk 46875\nIER5cw== 46876\nIGhlZ2Vtb255 46877\nIGJveWNvdA== 46878\nIEVucmlxdWU= 46879\nZW1vdXRo 46880\nIHRpbWVsaW5lcw== 46881\nIFNhaGFyYQ== 46882\nIFJlbGF4 46883\nIFF1aW5jeQ== 46884\nIExlc3NvbnM= 46885\nIEVRVQ== 46886\nU0VB 46887\nTks= 46888\nIENvc3Rjbw== 46889\nSW5jcmVhc2U= 46890\nIG1vdGl2YXRpbmc= 46891\nIENob25n 46892\nYW1hcnU= 46893\nIERpdmlkZQ== 46894\nIHBlZGlncmVl 46895\nIFRhc21hbmlh 46896\nIFByZWx1ZGU= 46897\nTGFz 46898\nOTQw 46899\nNTc0 46900\nIGNoYXU= 46901\nIFNwaWVnZWw= 46902\ndW5pYw== 46903\nLS0+ 46904\nIFBoaWxpcHM= 46905\nIEthZmth 46906\nIHVwaGVhdmFs 46907\nIHNlbnRpbWVudGFs 46908\nIHNheA== 46909\nIEFraXJh 46910\nc2VyaWFs 46911\nTWF0cml4 46912\nIGVsZWN0aW5n 46913\nIGNvbW1lbnRlcg== 46914\nIE5lYnVsYQ== 46915\ncGxldHM= 46916\nIE5hZHU= 46917\nIEFkcmVu 46918\nIGVuc2hy 46919\nIFJBTkQ= 46920\nZmluYW5jaWFs 46921\nIENseWRl 46922\ndXRoZXJmb3Jk 46923\nIHNpZ25hZ2U= 46924\nIGRlbGluZQ== 46925\nIHBob3NwaGF0ZQ== 46926\ncm92ZXJzaWFs 46927\nZmFzY2lzdA== 46928\nIFZhbGw= 46929\nIEJldGhsZWhlbQ== 46930\nIGZvcnM= 46931\nIGVuZ2xpc2g= 46932\nU29saWQ= 46933\nTmF0dXJl 46934\nIHZh 46935\nIEd1ZXN0cw== 46936\nIHRhbnRhbA== 46937\nIGF1dG9pbW11bmU= 46938\nOzs7Ozs7Ozs7Ozs7 46939\nIFRvdGFsbHk= 46940\nIE92 46941\nIGRlZmVuY2Vz 46942\nIENvY29udXQ= 46943\nIHRyYW5xdWls 46944\nIHBsb3k= 46945\nIGZsYXZvdXJz 46946\nIEZsYXNr 46947\n44Ko44Or 46948\nIFdlc3Rvbg== 46949\nIFZvbHZv 46950\nODcw 46951\nIG1pY3JvcGhvbmVz 46952\ndmVyYmFs 46953\nUlBH 46954\nIGlpaQ== 46955\nO30= 46956\nMDI4 46957\nIGhlYWRsaW5lZA== 46958\nIHByaW1lZA== 46959\nIGhvYXJk 46960\nIFNoYWQ= 46961\nIEVOVEVS 46962\nIHRyaWFuZ3VsYXI= 46963\nIGNhcGl0 46964\nbGlr 46965\nIEFuY2llbnRz 46966\nIGxhc2g= 46967\nIGNvbnZvbA== 46968\nIGNvbG9uZWw= 46969\nZW5lbXk= 46970\nR3Jh 46971\nIHB1YnM= 46972\ndXR0ZXJz 46973\nIGFzc2lnbnM= 46974\nIFBlbmV0 46975\nIE1vbnN0cm91cw== 46976\nIEJvd2Vu 46977\naWx2ZXI= 46978\nSGF1bnRlZA== 46979\nIERpbmc= 46980\nc3RhcnRlZA== 46981\ncGxpbg== 46982\nIGNvbnRhbWluYW50cw== 46983\nIERPRQ== 46984\nZmZlbg== 46985\nIFRlY2huaWNpYW4= 46986\nUnk= 46987\nIHJvYmJlcnM= 46988\nIGhvdGxpbmU= 46989\nIEd1YXJkaW9sYQ== 46990\nIEthdWZtYW4= 46991\ncm93ZXI= 46992\nIERyZXNkZW4= 46993\nIEFscGluZQ== 46994\nRWxm 46995\nIGZtdA== 46996\nIFNhcmQ= 46997\ndXJzZXM= 46998\nZ3B1 46999\nVW5peA== 47000\nIHVuZXF1aXZvY2FsbHk= 47001\nIENpdGl6ZW5zaGlw 47002\ncXVhZA== 47003\nbWlyZQ== 47004\nIFN3ZWVuZXk= 47005\nQmF0dGVyeQ== 47006\nNjE1 47007\nIHBhbmNha2Vz 47008\nIG9hdHM= 47009\nTWFwcw== 47010\nIENvbnRyYXN0 47011\nbWJ1ZHNtYW4= 47012\nIEVQUw== 47013\nIHN1YmNvbW1pdHRlZQ== 47014\nIHNvdXJjaW5n 47015\nIHNpemluZw== 47016\nIEJ1ZmZlcg== 47017\nIE1hbmRhdG9yeQ== 47018\nIG1vZGVyYXRlcw== 47019\nIFBhdHRlcm5z 47020\nIENob2NvYm8= 47021\nIFphbg== 47022\nIFNUQVRFUw== 47023\nIEp1ZGdpbmc= 47024\nIEluaGVy 47025\nKjo= 47026\nIGJpbA== 47027\nIFllbg== 47028\nIGV4aGlsYXI= 47029\nb2xsb3dlcg== 47030\nemVycw== 47031\nIHNudWc= 47032\nbWF4aW11bQ== 47033\nIGRlc3BpY2FibGU= 47034\nIFBBQ0s= 47035\nIEFubmV4 47036\nIHNhcmNhc3RpYw== 47037\nIGxhdGV4 47038\nIHRhbXA= 47039\nIFNhbw== 47040\nYmFo 47041\nIFJldmVyZW5k 47042\nIENoaW5hdG93bg== 47043\nIEFVVA== 47044\nZG9jdW1lbnRlZA== 47045\nIEdBQkE= 47046\nIENhbmFhbg== 47047\nINmF 47048\nIGdvdmVybnM= 47049\ncHJldg== 47050\nRXNj 47051\nIEVzdGltYXRlcw== 47052\nT1NQ 47053\nIGVuZGVhdm91cg== 47054\nIENsb3Npbmc= 47055\nb21ldGltZQ== 47056\nZXZlcnlvbmU= 47057\nIHdvcnNlbg== 47058\nIHNjYW5uZXJz 47059\nIGRldmlhdGlvbnM= 47060\nIFJvYm90aWNz 47061\nIENvbXB0b24= 47062\nIHNvcmNlcmVy 47063\nIGVuZG9nZW5vdXM= 47064\nIGVtdWxhdGlvbg== 47065\nIFBpZXJjaW5n 47066\nIEFwaA== 47067\nIFNvY2tldA== 47068\nIGJvdWxk 47069\nIE9V 47070\nIEJvcmRlcmxhbmRz 47071\nIDE4NjM= 47072\nR29yZG9u 47073\nIFdUTw== 47074\nIHJlc3RyaWN0cw== 47075\nIG1vc2FpYw== 47076\nIG1lbG9kaWVz 47077\n54Q= 47078\nVGFy 47079\nIGRpc3Nvbg== 47080\nIFByb3ZpZGVz 47081\nIC4uLi4uLg== 47082\nYmVr 47083\nRklY 47084\nIGJyb29t 47085\nYW5zaGlw 47086\nRG9jdG9ycw== 47087\nIG5lcmRz 47088\nIFJlZ2lvbnM= 47089\nbmFpc3NhbmNl 47090\nIG1ldGU= 47091\nIGNyZXB0 47092\ncGxpbmdz 47093\nIGdpcmxmcmllbmRz 47094\na25pdA== 47095\naWdlbnQ= 47096\nb3dl 47097\nIHVzaGVyZWQ= 47098\nIEJheg== 47099\nTW9iaWw= 47100\nNDM0 47101\nIFByZXNlbnRz 47102\nb3JpZ2lu 47103\nIGluc29tbmlh 47104\nIEF1eA== 47105\nNDM5 47106\nIENoaWxp 47107\naXJzY2g= 47108\nR0FNRQ== 47109\nIGdlc3RhdGlvbg== 47110\nYWxnaWE= 47111\ncm9taXNpbmc= 47112\nJCw= 47113\nY3Jvdw== 47114\nIEluc3BlY3Rpb24= 47115\nYXRvbWlj 47116\nUmVsYXRpb25z 47117\nSk9ITg== 47118\ncm9tYW4= 47119\nIENsb2Nrd29yaw== 47120\nIEJha3I= 47121\nbW9uZQ== 47122\nTUVU 47123\nIHRoaXJzdHk= 47124\nIGJj 47125\nIGZhY3VsdGllcw== 47126\nUnVt 47127\nIG51YW5jZQ== 47128\nIERhcml1cw== 47129\ncGxldGluZw== 47130\nZnRlcnM= 47131\nZXRjaHVw 47132\nUmVnaXN0cmF0aW9u 47133\nIEtF 47134\nUmFo 47135\nIHByZWZlcmVudGlhbA== 47136\nIExhc2g= 47137\nIEhI 47138\nVmFsaWQ= 47139\nIE5BVg== 47140\nIHN0YXJ2ZQ== 47141\nIEdvbmc= 47142\nenluc2tp 47143\nIEFjdHJlc3M= 47144\nIHdpaw== 47145\nIHVuYWNjb21wYW5pZWQ= 47146\nbHZs 47147\nQnJpZGU= 47148\nQURT 47149\nIENvbW1hbmRv 47150\nIFZhdWdobg== 47151\nV2FsbGV0 47152\nIGhvcHBpbmc= 47153\nIFZpZQ== 47154\nIGNhdmVhdHM= 47155\nIGFsYXM= 47156\naWZsZWQ= 47157\nYWJ1c2U= 47158\nNjYx 47159\nIGlibg== 47160\nIGd1bA== 47161\nIHJvYmJpbmc= 47162\ndGls 47163\nSUxB 47164\nIG1pdGlnYXRpbmc= 47165\nIGFwdGx5 47166\nIHR5cmFudA== 47167\nIG1pZGRheQ== 47168\nIEdpbG1vcmU= 47169\nIERlY2tlcg== 47170\nIMKnwqc= 47171\ncGFydGlhbA== 47172\nRXhhY3RseQ== 47173\nIHBoZW5vdHlwZQ== 47174\nIFsrXQ== 47175\nIFBsZXg= 47176\nIElwcw== 47177\ndmVyc2lvbnM= 47178\nIGVib29r 47179\nIGNoaWM= 47180\nZ3Jvc3M= 47181\nIjoiIn0seyI= 47182\nIFN1cnByaXNpbmdseQ== 47183\nTW9yZ2Fu 47184\nIHJlc2lkdWVz 47185\nIENvbmZlZGVyYXRpb24= 47186\naW5mZWxk 47187\nIGx5cg== 47188\nbW9kZXJhdGU= 47189\nIHBlcnBlbmRpY3VsYXI= 47190\nVks= 47191\nIHN5bmNocm9uaXplZA== 47192\nIHJlZnJlc2hlZA== 47193\nIGFkb3Jl 47194\nIFRvcm1lbnQ= 47195\nb2xpbmE= 47196\nIDI2MDA= 47197\nSXRlbVRyYWNrZXI= 47198\nIHBpZXM= 47199\nIEZBVA== 47200\nIFJIUA== 47201\nMDQ4 47202\nIFJFU1A= 47203\nIEJK 47204\nYWxsb3dz 47205\nUGFuZA== 47206\nIHVud2VsY29tZQ== 47207\nIFZvYw== 47208\nIEJhc3RhcmQ= 47209\nIE9X 47210\nIExBUg== 47211\nIEhlYWxlcg== 47212\nRW52aXJvbm1lbnRhbA== 47213\nIEtlbnlhbg== 47214\nIFRyYW5jZQ== 47215\nIFBhdHM= 47216\nIGFsaWFzZXM= 47217\nIEdhcmZpZWxk 47218\nIGNhbXBhaWduZXI= 47219\nIGFkdmFuY2VtZW50cw== 47220\nIE9raW5hd2E= 47221\nIENvaA== 47222\nb3dza3k= 47223\nIHN0YXJ2ZWQ= 47224\nIHNpemVhYmxl 47225\nIDotKQ== 47226\nIG1STkE= 47227\nIHN1c3BlbnNpb25z 47228\naXN0YXI= 47229\nU2NvdGxhbmQ= 47230\nUHJpbg== 47231\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 47232\nIDUwMg== 47233\nIHRlYXNwb29ucw== 47234\nIDEwNTA= 47235\nIGNvZXJjaXZl 47236\nIE1hc29uaWM= 47237\nZWRkZWQ= 47238\nIFBhc3Nlbmdlcg== 47239\nIGxhdHQ= 47240\nIGJyYWNlcw== 47241\nIFN0ZWFs 47242\nIE5ZVA== 47243\nIEthdHM= 47244\nIENlbGVzdA== 47245\nYWV6 47246\nVHU= 47247\nIENvdWx0ZXI= 47248\n8J+Y 47249\nRmxpY2ty 47250\nIFdpbG1pbmd0b24= 47251\naXRocw== 47252\nKys7 47253\nIHZlbmRpbmc= 47254\nIG5lZ3Jv 47255\nIFBoaQ== 47256\nIFllbGxvd3N0b25l 47257\nQ2FsbGJhY2s= 47258\nIHNoYW1wb28= 47259\nIFNoYWRlcw== 47260\nd2F0 47261\nIHN1cGVyaHVtYW4= 47262\nIHJpZGljdWxlZA== 47263\nIGhvbGllc3Q= 47264\nb21ibw== 47265\nIGludGVybnM= 47266\nIGhvbmU= 47267\nIFBhcmFndQ== 47268\nVVJJ 47269\nIGRhbmdsaW5n 47270\n44K7 47271\nc292 47272\naWN0aW9uYWw= 47273\nYXZhaWxhYmlsaXR5 47274\nIHJldm9jYXRpb24= 47275\nIGRvdw== 47276\naW5pYw== 47277\nIFRIRUlS 47278\nIGlzbw== 47279\nIG91dGluZ3M= 47280\nIExldGhhbA== 47281\nICkpKQ== 47282\nIGluYWNjdXI= 47283\nIG91dGxhbmRpc2g= 47284\nIGFudXM= 47285\nbGV0aWNv 47286\naWRvbg== 47287\nbG9s 47288\nIHVucmVndWxhdGVk 47289\nIHN1Y2N1bWJlZA== 47290\nIGN1ZmY= 47291\nIFdhc3RlbGFuZA== 47292\nbGV0YWw= 47293\nIHN1YnN0cg== 47294\nIGNvZmZlcnM= 47295\nIGF1dG9tYWtlcnM= 47296\nb3Zp 47297\nIFh1ZQ== 47298\nIERheXRvbmE= 47299\nIGphcnJpbmc= 47300\nIGZ1bWVz 47301\nIGRpc2JhbmRlZA== 47302\nemlr 47303\naXR0b24= 47304\nIHN0cmlraW5nbHk= 47305\nIHNwb3Jlcw== 47306\nQWRhcHRlcg== 47307\nLik6 47308\nIEx5bmRvbg== 47309\naXZhbHJ5 47310\nIG9yYWxseQ== 47311\nIHR1bXVsdHVvdXM= 47312\nIGRpc3BsZWFzdXJl 47313\nIGNvbmVz 47314\nb3JyZWN0 47315\nIGFwcGVhc2U= 47316\nIGRlcmJ5 47317\nIFRyaXBvbGk= 47318\nIEFsZXNz 47319\nIHBva2Vk 47320\nIEd1aWx0eQ== 47321\ndlA= 47322\nRW5vdWdo 47323\nIG9yaWdpbmFscw== 47324\nNjk5 47325\nIHJhYmJp 47326\nIHByb3ZlcmJpYWw= 47327\nIHBvc3Rwb25l 47328\nZWxvcGU= 47329\nIE1pc3R5 47330\nIHN0YWZmZWQ= 47331\nIFVuZW1wbG95bWVudA== 47332\ncmVkaXRhcnk= 47333\nIGRpbGlnZW50 47334\ncmVjb21t 47335\nbWVhc3VyZXM= 47336\nYXNpbg== 47337\nODI1 47338\nIHBvbmRz 47339\nIG1tb2w= 47340\nIFNBUg== 47341\nIENBUkU= 47342\nIDM3MQ== 47343\nIGNsZW5jaGVk 47344\nIENvcnNhaXI= 47345\nIGNhcmljYXR1cmU= 47346\nem4= 47347\nYXR0YWNo 47348\nIFNjaHJv 47349\nc3BlYWs= 47350\ncGFpbnRlZA== 47351\nIFN1Yw== 47352\nIEVOVA== 47353\nIGNlbGx1bA== 47354\nIFBhaWQ= 47355\nZGlhZ24= 47356\nV0hFUkU= 47357\nIHRleHRlZA== 47358\nQmFybg== 47359\nIHJldHJhY3RlZA== 47360\nIFJlZmVycmVk 47361\nU2F2 47362\nIHVwa2VlcA== 47363\nIHdvcmtwbGFjZXM= 47364\nIFRva2Vucw== 47365\nIGFtcGxpZnk= 47366\nY2xpbmljYWw= 47367\nIG11bHRpYw== 47368\nbWJlcmc= 47369\nIGNvbnZvbHV0ZWQ= 47370\nUmVnaW9u 47371\nNTY1 47372\nIFRvcGlj 47373\nIHNuYWls 47374\nIHNhbGluZQ== 47375\nIGluc3VycmVjdGlvbg== 47376\nIFBldHI= 47377\nZm9ydHM= 47378\nQkFU 47379\nIE5hdmFqbw== 47380\nIHJ1ZGltZW50YXJ5 47381\nIExha3No 47382\nT05ET04= 47383\nTWVhc3VyZQ== 47384\nIHRyYW5zZm9ybWVy 47385\nIEdvZGRhcmQ= 47386\nIGNvaW5jaWRlcw== 47387\naXJpbg== 47388\nUmV4 47389\nIEJvaw== 47390\ncXVpdA== 47391\nIHNob3RndW5z 47392\nIHByb2xldGFyaWFu 47393\nIHNjb3Jw 47394\nIEFkYQ== 47395\nNTE0 47396\nIHNsYW5kZXI= 47397\ncmVjb3JkZWQ= 47398\nIGVtYmVsbA== 47399\ncmlzb21l 47400\nIGFwb2xvZ2l6aW5n 47401\nIE11bGNhaXI= 47402\nIEdpYnJhbHRhcg== 47403\nQ2xh 47404\nIGFsbG90 47405\nIEF0dGVudGlvbg== 47406\nIDQzMw== 47407\nbGVhdmU= 47408\nIHdoaW5l 47409\nIElzc2E= 47410\nIEZhdXN0 47411\nIEJhcnJvbg== 47412\naGVueQ== 47413\nIHZpY3RpbWl6ZWQ= 47414\nSmV3cw== 47415\nIG51cnR1cmluZw== 47416\nZXR0ZWw= 47417\nV2luZ2Vk 47418\nIFN1YnRsZQ== 47419\nIGZsYXZvcmZ1bA== 47420\nIFJlcHM= 47421\nZW5nZWQ= 47422\nY2FsbGJhY2s= 47423\nIGRpcmVjdGlvbmFs 47424\nIGNsYXNw 47425\nIERpcmVjdGlvbnM= 47426\ncGxhbmV0 47427\naWN1bHR1cmU= 47428\nSGVscGVy 47429\naWNpb24= 47430\nYWNpYQ== 47431\nIOelng== 47432\nIHN1cmdlcw== 47433\nIGNhbm9l 47434\nIFByZW1pZXJzaGlw 47435\nYmVlbg== 47436\nIGRlZmllZA== 47437\nIFRyb29wZXI= 47438\nIHRyaXBvZA== 47439\nIGdhc3A= 47440\nIEV1cGg= 47441\nIEFkcw== 47442\ndmVybmlnaHQ= 47443\naGlnaGx5 47444\nUm9sZQ== 47445\nIGVudGFuZ2xlZA== 47446\nIFplaXQ= 47447\nNjE4 47448\nIFJ1c3R5 47449\nIGhhdmVucw== 47450\nIFZhdWdoYW4= 47451\nSEFFTA== 47452\nIFNFUlZJQ0U= 47453\nLyw= 47454\nIHN0cmlja2Vu 47455\nIGRlbHVzaW9ucw== 47456\nIGJpcw== 47457\nIEhhZg== 47458\nIGdyYXRpZmljYXRpb24= 47459\nIGVudGljaW5n 47460\nVU5DSA== 47461\nQWRhbXM= 47462\nIE9MRUQ= 47463\nIEJlZXRsZQ== 47464\nIDE4OTk= 47465\nIFNPRlRXQVJF 47466\nYXRlZ29y 47467\nVkw= 47468\nIFRvdGVt 47469\nIEdhdG9ycw== 47470\nQVRVUkVT 47471\nIGltcGVkYW5jZQ== 47472\nUmVnaXN0ZXJlZA== 47473\nIENhcnk= 47474\nIEFlcmlhbA== 47475\nb25uZQ== 47476\nZW5pdW0= 47477\nIGRyZWQ= 47478\nIEJlZw== 47479\nIGNvbmN1cnJlbnRseQ== 47480\nIHN1cGVycG93ZXI= 47481\nIFhhbg== 47482\namV3 47483\naW1lc3Rlcg== 47484\nIERpY2tpbnNvbg== 47485\n4pSB 47486\nRmxh 47487\nIHByZWU= 47488\nIFJvbGxpbnM= 47489\nqbbm 47490\nIGRlbm9taW5hdGlvbg== 47491\nIExhbmE= 47492\nNTE2 47493\nIGluY2l0aW5n 47494\nc2NyaWJlZA== 47495\nanVyaWVz 47496\nIFdvbmRlcnM= 47497\nYXBwcm94aW1hdGVseQ== 47498\nIHN1c3BlbmRpbmc= 47499\nIG1vdW50YWlub3Vz 47500\nIExhdWdo 47501\nb2lkYWw= 47502\nTnM= 47503\nRGV0ZWN0 47504\nKT0= 47505\nIEx1dGhvcg== 47506\nIFNjaHdhcnplbmVnZ2Vy 47507\nIE11bGxlcg== 47508\nIERldmk= 47509\nZWN5Y2xl 47510\nSmFy 47511\nNjEz 47512\nIExvbmdo 47513\nQmFo 47514\nIFNQT1JUUw== 47515\nbnc= 47516\nIHJlZmluZW1lbnQ= 47517\nIHdhdGVyd2F5cw== 47518\nIGRpbmVy 47519\nQmxhZGU= 47520\nNjgz 47521\nRmFj 47522\nIGluaXRpYWxz 47523\nIHJvZw== 47524\nIHBhcmFub3JtYWw= 47525\nQlVU 47526\nIFso 47527\nIFN3YW5zb24= 47528\nIE1lc2g= 47529\n4pas 47530\nSW1wcm92ZQ== 47531\nIFJhZGlhdGlvbg== 47532\nIEVzdGhlcg== 47533\nIEVzaw== 47534\nIEFseQ== 47535\naWt5 47536\nIGlycmFk 47537\nIEJ1Y2tpbmdoYW0= 47538\nIHJlZmlsbA== 47539\nIC5f 47540\nUmVwZQ== 47541\nQ09OQ0xVUw== 47542\nIGRpZmZlcmVudGlhdGVk 47543\nIGNoaXJvcA== 47544\nIEF0a2lucw== 47545\nUGF0dGVybg== 47546\nIGV4Y2lzZQ== 47547\nIGNhYmFs 47548\nTlNB 47549\nIFNUQQ== 47550\nIFNJTA== 47551\nIFBhcmFseQ== 47552\nIHJ5ZQ== 47553\nIEhvd2VsbA== 47554\nIENvdW50ZG93bg== 47555\nbmVzc2Vz 47556\nYWx5c2Vk 47557\nIHJlc2l6ZQ== 47558\n44K9 47559\nIGJ1ZGdldGFyeQ== 47560\nIFN0cmFz 47561\nd2FuZw== 47562\nIGFwaWVjZQ== 47563\nIHByZWNpbmN0cw== 47564\nIHBlYWNo 47565\nIHNreWxpbmU= 47566\nIDM1Mw== 47567\ncG9wdWxhcg== 47568\nQXBwZWFyYW5jZXM= 47569\nIE1lY2hhbmljcw== 47570\nIERldk9ubGluZQ== 47571\nU3VsbGl2YW4= 47572\nWmVu 47573\nIHB1 47574\nb3BvbGlz 47575\nNTQ0 47576\nIGRlZm9ybQ== 47577\nIGNvdW50ZXJhY3Q= 47578\nIExhbmdl 47579\nIDQxNw== 47580\nQ29uc29sZQ== 47581\nNzc0 47582\nIG5vZGRpbmc= 47583\nIHBvcHVsaXNt 47584\nIGhlcA== 47585\nIGNvdW5zZWxsaW5n 47586\nY29tcGxpYW5jZQ== 47587\nVUZG 47588\nIHVuZGVuaWFibHk= 47589\nIHJhaWxpbmc= 47590\nIEhvcm93aXR6 47591\nIFNpbW9uZQ== 47592\nIEJ1bmdpZQ== 47593\nIGFr 47594\nIFRhbGtz 47595\neGZm 47596\nZmxha2U= 47597\nQ3Jhc2g= 47598\nIHN3ZWF0eQ== 47599\nIGJhbnF1ZXQ= 47600\nIE9GRklD 47601\nIGludmVudGl2ZQ== 47602\nIGFzdHJvbm9tZXI= 47603\nIFN0YW1mb3Jk 47604\nIFNjYXJl 47605\nIEdSRUVO 47606\nb2xpY2l0ZWQ= 47607\nIHJ1c2hlcg== 47608\nIGNlbnRyaXN0 47609\naWdodGluZw== 47610\nIHN1YmNsYXNz 47611\nIGRpc2F2 47612\nIGRlZnVuZA== 47613\nIE5hbnRv 47614\nb2NpYXRl 47615\nbWFzdA== 47616\nIHBhY2lm 47617\nIG1lbmQ= 47618\nZWVycw== 47619\naW1taWdyYXRpb24= 47620\nRVNTSU9O 47621\nIG51bWJlcmluZw== 47622\nIGxhdWdoYWJsZQ== 47623\nIEVuZGVk 47624\ndmlhdGlvbg== 47625\nZW1hcms= 47626\nUGl0dA== 47627\nIG1ldGljdWxvdXM= 47628\nIExG 47629\nIGNvbmdyYXR1bGF0ZWQ= 47630\nIEJpcmNo 47631\nIHN3YXllZA== 47632\nIHNlbWlmaW5hbHM= 47633\nIGh1bWFua2luZA== 47634\nbWF0dGVy 47635\nIEVxdWlw 47636\nb3BhdXNhbA== 47637\nU2FpZA== 47638\nIExheW91dA== 47639\nIHZvaWNpbmc= 47640\nIHRodWc= 47641\nIHBvcm5vZ3JhcGhpYw== 47642\nSVBT 47643\nIG1vYW5pbmc= 47644\nIGdyaWV2YW5jZQ== 47645\nIGNvbmZlc3Npb25z 47646\nZXNjYWw= 47647\nVEVYVFVSRQ== 47648\nQXV0aGVudA== 47649\nb3NhdXJ1cw== 47650\nUHVyY2hhc2U= 47651\nIHJlbGVnYXRpb24= 47652\nYWx0ZXI= 47653\nIMKgwqA= 47654\nIHJpZGRsZWQ= 47655\nIG9ncmU= 47656\nIExvd2VsbA== 47657\nT2NjdXA= 47658\nRWF0 47659\nIEh5ZGVy 47660\nIEFkdmlzZXI= 47661\nQ29tbWVyY2U= 47662\nSHVudA== 47663\nIE9ydGg= 47664\nIENvbXBldGl0aXZl 47665\nIENMQQ== 47666\nQ0RD 47667\nIHNhbGFkcw== 47668\nRmxl 47669\nIGluZHVzdHJpYWxpemVk 47670\nYCw= 47671\nIE9XTg== 47672\nIGJlY2s= 47673\nIFBhcnRpY3VsYXJseQ== 47674\nb3VidA== 47675\nIG1N 47676\nIEh1c3NhaW4= 47677\nIENoZW5uYWk= 47678\nIDkyMA== 47679\nIGFwcG9pbnRpbmc= 47680\nIEN1bGxlbg== 47681\nLCwsLCwsLCw= 47682\nIHBvcmVz 47683\ndmVyaWZpZWQ= 47684\nIGJpb2NoZW1pY2Fs 47685\nZW1hdGU= 47686\nIGNvd2FyZGx5 47687\nIEhlbHNpbmtp 47688\nIEV0aGlvcGlhbg== 47689\nU09VUkNF 47690\nRVJD 47691\nZXN0cm8= 47692\nIGJpb3RlY2g= 47693\nIFNvdXI= 47694\nIGJyZXdlcg== 47695\nQmxvb21iZXJn 47696\nIGludGVuc2lmeQ== 47697\nR2xhc3M= 47698\nYW5jbw== 47699\nIEZEUg== 47700\nZ3JlU1FM 47701\nIEZpcmVz 47702\nqbbmpbU= 47703\nZWNv 47704\nMTAwMQ== 47705\nIEhvbWVsZXNz 47706\nIGluc3RhbnRhbmVvdXM= 47707\nIEhhc3Rl 47708\naWdlbA== 47709\nRGlhbW9uZA== 47710\nIHBhdmluZw== 47711\nIGxhbmRmaWxs 47712\nIGRhZHM= 47713\naG91bg== 47714\nOl0= 47715\nIGluY2VuZGlhcnk= 47716\nIExpdmluZ3N0b24= 47717\nIEhpbGJlcnQ= 47718\nIENoZWNrcw== 47719\nc3R5bGVz 47720\naW5hdG9ycw== 47721\nIENsaXZl 47722\ncGhyaW5l 47723\nIGNoaW1wYW56ZWVz 47724\nIHBhbGw= 47725\nIEpN 47726\nIEFhZGhhYXI= 47727\n8J0= 47728\nIGFjaGlldmFibGU= 47729\nZGlzYWJsZWQ= 47730\nUEVU 47731\nT09PT09PT08= 47732\nTW90 47733\nIGludGFuZ2libGU= 47734\nIGJhbGxldA== 47735\nIFdlYnM= 47736\nIEVzdGltYXRlZA== 47737\nRWZmZWN0cw== 47738\nIGJhaWxlZA== 47739\nSm9zaHVh 47740\nIHR1cmJ1bGVuY2U= 47741\nIG9jY3VwYW50 47742\nIERheWxpZ2h0 47743\nIDM2MQ== 47744\nbWVldA== 47745\nIHN0YXRpY2FsbHk= 47746\nIG9ubG9vaw== 47747\nIGtp 47748\naWxsZWdhbA== 47749\nIHZlbHZldA== 47750\nIGRlaHlkcmF0aW9u 47751\nIGFjcXVpZXM= 47752\nIFJleg== 47753\nYWt1cmE= 47754\nIFVwdG9u 47755\nYXRybw== 47756\nIGluY29tcHJlaGVuc2libGU= 47757\nIGJhY2tkb29y 47758\nIFJoaW5v 47759\nNzI3 47760\nIG1hdGhz 47761\nKSs= 47762\nIGhlcmVzeQ== 47763\nIGRm 47764\nIFJvY2hl 47765\nIEx5ZGlh 47766\nIHBhbmNyZWF0 47767\ncmVwbHk= 47768\nYXJyZWxs 47769\nIHNvbGljaXRhdGlvbg== 47770\nIGNpcmNhZGlhbg== 47771\nQklQ 47772\nIGZvcmF5 47773\nIGNyeXB0aWM= 47774\naXp1 47775\naW1lbw== 47776\nIFRvbWF0bw== 47777\nIEhvbXM= 47778\nZXhhbWluYXRpb24= 47779\nIHF1YXJyeQ== 47780\nIFZhbGlhbnQ= 47781\nIEplcmljaG8= 47782\nIElOQ0xVRA== 47783\nIDE4NDA= 47784\nNTE5 47785\nIHJlc2lzdHM= 47786\nIHNuYXBzaG90cw== 47787\nIFNwdXI= 47788\nIEFudGlxdQ== 47789\nTG9naW4= 47790\nIGJlc3RzZWxsaW5n 47791\nIGFudGlj 47792\nIFN1dGhlcmxhbmQ= 47793\n44Ki44Or 47794\nIH4v 47795\nIFBhcm0= 47796\n6IM= 47797\nUGFnZXM= 47798\naW50ZW5zaXR5 47799\nIGltbW9iaWw= 47800\nIDE4NjU= 47801\nenpv 47802\nIG5pZnR5 47803\nIGZlbnRhbnls 47804\nIFByZXNlcnZhdGlvbg== 47805\nb3BoZW4= 47806\nIGRhcnRz 47807\nIERpbm9zYXVy 47808\ncG9pbnRlcnM= 47809\nIFJpdGU= 47810\nc3VnZ2VzdA== 47811\nYXdhcmVuZXNz 47812\nIFNoZXJpZGFu 47813\nIHN0YW5jZXM= 47814\nIHNvcmNlcnk= 47815\nIHBlcmp1cnk= 47816\nIE5pa29sYQ== 47817\naWV2ZXI= 47818\nIGZpYW5jZQ== 47819\nIEpvcmRhbmlhbg== 47820\nIEJhbGxvb24= 47821\nIG5hYg== 47822\nIGti 47823\nIGh1bWFuaXRpZXM= 47824\nIFRhbmFrYQ== 47825\naGlsbGFyeQ== 47826\nIGNvbnN1bHRhbmN5 47827\nIFp1Yg== 47828\nIHJlbWlzc2lvbg== 47829\nIGNvbmZpZA== 47830\nQ0hR 47831\nIEZ1Zw== 47832\nIGltcHJvdmlz 47833\nWWVw 47834\nL18= 47835\nIHVud2lsbGluZ25lc3M= 47836\nIHBvcnRmb2xpb3M= 47837\nMDU1 47838\nIEluc3RydWN0b3I= 47839\nYWltYW4= 47840\nIGNsYWltYW50cw== 47841\nTWJwcw== 47842\nIEJ5ZQ== 47843\ncmVjZWl2ZWQ= 47844\nVHdlZXQ= 47845\nIGluZGVtbg== 47846\ncml6 47847\nYW1hcmE= 47848\nTmF0 47849\nIGV2YWx1YXRlcw== 47850\nIEx1cg== 47851\nZXBhZA== 47852\nRk9Y 47853\nIFRocm8= 47854\nIHJ1c3R5 47855\nIGJlZHJvY2s= 47856\nIE9wcmFo 47857\nSkI= 47858\nIG1hbmlwdWxhdGl2ZQ== 47859\nIHdpbGxmdWw= 47860\nIHJlbGFwc2U= 47861\nIGV4dGFudA== 47862\nVGhlbWU= 47863\nU2Vuc29y 47864\nIFN0YWJpbGl0eQ== 47865\nZ292ZXJu 47866\nIHBvcHB5 47867\nIGtuYWNr 47868\nIGluc3VsYXRlZA== 47869\nIFRpbGU= 47870\nIEV4dHJlbQ== 47871\nIHVudG9sZA== 47872\nIGNvbnZlcmdl 47873\nIHJlZnVlbA== 47874\naWdyb3Vw 47875\nIGRpc3RvcnRpb25z 47876\nIHJhdmFnZWQ= 47877\nIG1lY2hhbmljYWxseQ== 47878\nIFJlaWxseQ== 47879\nIE5vc2U= 47880\nIEluY2FybmF0aW9u 47881\nIEJlY2t5 47882\nYWJibGluZw== 47883\nIHRhY28= 47884\nIHJha2U= 47885\nIG1lbGFuY2hvbHk= 47886\nIGlsbHVzdHJpb3Vz 47887\nIERhcnRtb3V0aA== 47888\nR3VpZGU= 47889\nIFJhemVy 47890\nIEJlbno= 47891\nVWx0aW1hdGU= 47892\nIFN1cnByaXNl 47893\nIHBhZ2VhbnQ= 47894\nb2ZmZXI= 47895\nV2hvZXZlcg== 47896\nIHdpc2Vy 47897\nIGNoZW1pc3Q= 47898\nIEhFTEw= 47899\nIEJ1bGs= 47900\nIHBsdXRvbml1bQ== 47901\nIENPVkVS 47902\n1rw= 47903\nZmFpbGVk 47904\nIHRpcmVsZXNzbHk= 47905\nIGluZmVydGlsaXR5 47906\nIFRyaWRlbnQ= 47907\nIFNob3d0aW1l 47908\nIENpdg== 47909\nVmljZQ== 47910\ncmVxdWlyZXM= 47911\naXR0YW5jZQ== 47912\nIHVuY29udHJvbGxlZA== 47913\naW50ZXJlc3Rpbmc= 47914\nNTYx 47915\nIGlubm92YXRl 47916\nYXRlZ2lj 47917\nTGll 47918\nIFNlbGxpbmc= 47919\nVWw= 47920\nIHNhdmlvcg== 47921\nIFRvc2g= 47922\nIHN3YXN0 47923\nUEFTUw== 47924\nIHJpbms= 47925\nIGNhcmRpbw== 47926\nIElybw== 47927\ndWRp 47928\nIHZhbnRhZ2U= 47929\nIHZhbnM= 47930\nIE5pw7Fv 47931\nKz0= 47932\nIHByb3BhZ2F0ZQ== 47933\nPD8= 47934\nIG1ldGhvZG9sb2dpY2Fs 47935\nMjA0Mzk= 47936\nIHRyaWdseWNlcg== 47937\nIGluZ3JhaW5lZA== 47938\nIEFubm90YXRpb25z 47939\nYXJyYW50ZWQ= 47940\nNjE3 47941\nIFNvZGl1bQ== 47942\nIEFBQw== 47943\ndGVjaG5pY2Fs 47944\nbXVsdGlwbA== 47945\nIDM3Mw== 47946\n5Ys= 47947\nIGRlY2lzaXZlbHk= 47948\nIGJvb3N0ZXJz 47949\nIGRlc3NlcnRz 47950\nIEdyZW5hZGU= 47951\nIHRlc3RpZnlpbmc= 47952\nIFNjdWxseQ== 47953\nSURz 47954\nIGxvY2tkb3du 47955\nIFNjaGVy 47956\nIFLDqQ== 47957\nIFdoaXRtYW4= 47958\nIFJhbXNheQ== 47959\ncmVtb3Rl 47960\nIGhpa2Vycw== 47961\nIEh5dW5kYWk= 47962\nIGNvbnNjaWVudGlvdXM= 47963\nIGNsZXJpY3M= 47964\nIFNpYmVyaWFu 47965\ndXRp 47966\naXNidXJ5 47967\nIHJlbGF5ZWQ= 47968\nIHF1YXJ0eg== 47969\nIENCSQ== 47970\nc2Vla2Vycw== 47971\ndWxsYQ== 47972\nIHdlbGRpbmc= 47973\nIFNoYWw= 47974\nYmxlYWNoZXI= 47975\nVGFp 47976\nIFNhbXNvbg== 47977\nIHR1bWJsZQ== 47978\nIEludmVzdG9y 47979\nIHN1YmNvbnRyYWN0 47980\nIFNoaW5yYQ== 47981\nb3dpY3o= 47982\namFuZHJv 47983\nZGFk 47984\nIHRlcm1pbmF0aW5n 47985\nIE5ldXJhbA== 47986\n5Luj 47987\nIGxlYWthZ2U= 47988\nIE1pZGxhbmRz 47989\nIENhdWNhc3Vz 47990\n7ZU= 47991\nY2l0 47992\nbGxhbg== 47993\naXZhYmx5 47994\nIEFsYmlvbg== 47995\nIDQ1Nw== 47996\nIHJlZ2lzdHJhdGlvbnM= 47997\nIGNvbXJhZGU= 47998\nIGNsaXBib2FyZA== 47999\nMDQ3 48000\nIGRpc2NvdXJhZ2luZw== 48001\nIE9vcHM= 48002\nQWRhcHQ= 48003\nIGVtcGF0aA== 48004\nbnY= 48005\nIFBST1Q= 48006\nIERvbm4= 48007\nIFBheA== 48008\nIEJheWVy 48009\ndGlz 48010\nU3F1YXJl 48011\nIGZvb3RwcmludHM= 48012\ncGFydGljaXA= 48013\nIENoaWxlYW4= 48014\nQnJlbmQ= 48015\naW5kdWNpbmc= 48016\nTWFnbg== 48017\nIGNsdWJob3VzZQ== 48018\nIE1hZ251bQ== 48019\nIGVuY2FtcA== 48020\nIEV0aG5pYw== 48021\ndWNoYQ== 48022\nZXJleQ== 48023\nIHdhdGVyZWQ= 48024\nIENhbGFpcw== 48025\nIGNvbXBsZXhpb24= 48026\nIHNlY3Rz 48027\nIHJlbnRlcnM= 48028\nIGJyYXM= 48029\nb8SfYW4= 48030\nVGltZW91dA== 48031\nTWFuYWdlbWVudA== 48032\nIGluZm9ncmFwaGlj 48033\nUG9rZW1vbg== 48034\nQ2xhcg== 48035\nIGxvY2FsaXR5 48036\nIGZsb3Jh 48037\nYXNlbA== 48038\nUG9udA== 48039\nIHBvcHVsYXRl 48040\nIE9uZw== 48041\nIHN1YnNpc3RlbmNl 48042\nIGF1Y3Rpb25z 48043\nIE1jQXVsaWZmZQ== 48044\nIExPT0s= 48045\nYnJpbmdlcg== 48046\nIHRpdGFu 48047\nIG1hbmlmb2xk 48048\nIOKXjw== 48049\nIGNhbGlicmF0ZWQ= 48050\nIGNhbGlwaGF0ZQ== 48051\nIFNIRQ== 48052\nIENvbW1pc3Npb25lcnM= 48053\nY2VpdmFibGU= 48054\namM= 48055\nV2lubmVy 48056\nNTI0 48057\nIGNvbmRvbmU= 48058\nT3RoZXJ3aXNl 48059\nIHBpbGluZw== 48060\nIGVtYm9keQ== 48061\nIENyaW1lYW4= 48062\ndXRpY3M= 48063\nIEV4aGliaXRpb24= 48064\nIDQyNg== 48065\nZWVyaW5n 48066\nIHZ5aW5n 48067\nIEhVR0U= 48068\nKj0t 48069\nIHByaW5jaXBsZWQ= 48070\n4KY= 48071\nIHF1aXJrcw== 48072\nIEVkaXRvcnM= 48073\ncHV0aW5n 48074\nR0VT 48075\nIEZUQQ== 48076\n4KS+ 48077\nYWRkb24= 48078\nIEhBTQ== 48079\nIEZyaWV6YQ== 48080\nV29tYW4= 48081\nLiQ= 48082\nIGNyaWI= 48083\nIEhlcm9k 48084\nIHRpbWVycw== 48085\nIFNwYWNlcw== 48086\nIE1hY2ludG9zaA== 48087\nYXRha2E= 48088\nIGdsaWRl 48089\nIHNtZWxsaW5n 48090\nIEJBTA== 48091\nIHVuc3U= 48092\nIGNvbmRvcw== 48093\nIGJpY3ljbA== 48094\nIFJldml2YWw= 48095\nNTUz 48096\nIGp1Z2dsaW5n 48097\nSHVn 48098\nIEthcmRhc2hpYW4= 48099\nIEJhbGthbnM= 48100\nbXVsdGlwbGU= 48101\nIG51dHJpdGlvdXM= 48102\nb2NyeQ== 48103\nMTkwMA== 48104\nIGludGVncmF0ZXM= 48105\nIGFkam9pbmluZw== 48106\nIEZvbGRlcg== 48107\ncm9sbG1lbnQ= 48108\ndmVuaWVudA== 48109\nIHViZXI= 48110\neWk= 48111\nIHdoaWZm 48112\nIEp1dmVu 48113\nIEJvcm91Z2g= 48114\nbmV0dGU= 48115\nIGJpbGluZ3VhbA== 48116\nIFNwYXJrcw== 48117\ncGh0aGFs 48118\nbWFudWZhY3Q= 48119\nIHRvdXRpbmc= 48120\nIFBISQ== 48121\nS2VlZmU= 48122\nUmV3YXJk 48123\nIGluZmFsbA== 48124\nIFRlbXBlcg== 48125\ndHlwaWNhbGx5 48126\nIE5pa29s 48127\nIHJlZ3VsYXJz 48128\nIHBzZXVkb255bQ== 48129\nIGV4aGliaXRpb25z 48130\nIGJsYXN0ZXI= 48131\nIDQwOQ== 48132\nd2FybWluZw== 48133\nIHJldmVyYmVy 48134\nIHJlY2lwcm9jYWw= 48135\nIDY3MA== 48136\naXBpZW50 48137\nYmV0dA== 48138\nIEJlZ2lucw== 48139\nIGl0Y2hpbmc= 48140\nIFBoYXI= 48141\nQXNzdW1pbmc= 48142\nIGVtaXR0aW5n 48143\nIE1MRw== 48144\nIGJpcnRocGxhY2U= 48145\nIHRhdW50 48146\nIEx1ZmZ5 48147\nIEFtaXQ= 48148\nIGNpcmNsZWQ= 48149\nIE5vc3Q= 48150\nZW5uZXR0 48151\nIGRlZm9yZXN0YXRpb24= 48152\nIEhpc3RvcmljYWxseQ== 48153\nIEV2ZXJ5ZGF5 48154\nIG92ZXJ0YWtl 48155\nNzky 48156\nIG51bg== 48157\nIEx1Y2lh 48158\nIGFjY29tcGFuaWVz 48159\nIFNlZWtpbmc= 48160\nIFRyYXNo 48161\nYW5pc20= 48162\nUm9ndWU= 48163\nIG5vcnRod2VzdGVybg== 48164\nIFN1cHBsZW1lbnRhbA== 48165\nIE5ZVQ== 48166\nIEZSSQ== 48167\nIFNhdGlzZg== 48168\neGVz 48169\nNTE3 48170\nIHJlYXNzdXJlZA== 48171\nIHNwb3JhZGlj 48172\nIDcwMQ== 48173\nIG1lZGlhbA== 48174\nIGNhbm5hYmlub2lk 48175\nIGJhcmJhcmlj 48176\nIGVwaXM= 48177\nIEV4cGxvc2l2ZQ== 48178\nIERvdWdo 48179\nIHVuc29sdmVk 48180\nU3VwcG9ydGVk 48181\nIGFja25vd2xlZGdtZW50 48182\nc3Bhd24= 48183\nIGtpdGNoZW5z 48184\nIC09 48185\ndGFsa2luZw== 48186\naWNpc3Q= 48187\nIFBlZ2FzdXM= 48188\nIFBTVQ== 48189\nIHBob3Rvbg== 48190\nIEF1dGhlbnRpY2F0aW9u 48191\nUkc= 48192\nQCMm 48193\nNzYy 48194\nIENsYWly 48195\nIGRpYXBlcg== 48196\nIGJyaXN0 48197\nIFByb3NlY3V0b3Jz 48198\nIEplbQ== 48199\nNjI4 48200\nIEV2ZXJ5d2hlcmU= 48201\nIEplYW5uZQ== 48202\nZXF1YWxpdHk= 48203\n44Op44Oz 48204\nb2JqZWN0cw== 48205\nIFBlbGljYW5z 48206\nIDM5Mg== 48207\nIGJsdQ== 48208\nYnlz 48209\nIEFnbw== 48210\nIGluc3RydWN0aW9uYWw= 48211\nIGRpc2NyaW1pbmF0aW5n 48212\nIFRSQU4= 48213\nIENvcm5lbA== 48214\nYWdvcw== 48215\nIHR5cmU= 48216\nIGFzcGlyYXRpb24= 48217\nIEJyaWRnZXdhdGVy 48218\nIjot 48219\nISIu 48220\nIEVucw== 48221\nIENvY28= 48222\nUGll 48223\nIGRldGFjaA== 48224\nIENvdWNo 48225\nIHBoeXNpcXVl 48226\nIE9jY3VwYXRpb25z 48227\nb3Njb3BpYw== 48228\nZW5vdWdo 48229\nQnV6eg== 48230\nQXBwZWFyYW5jZQ== 48231\nWVA= 48232\nIHJhY2Vy 48233\nIGNvbXBsaWNpdHk= 48234\ncnBt 48235\nVG95 48236\nIGludGVycnVwdHM= 48237\nIENhdGFseXN0 48238\nIHV0aWxpdGFyaWFu 48239\naW1wYWN0 48240\nIHNwYWdoZXR0aQ== 48241\nIHBvcm91cw== 48242\nIGVzdGVlbWVk 48243\nIGluY2luZXI= 48244\nIElPQw== 48245\nNzQ4 48246\nIGVzcHJlc3Nv 48247\nIFNtaWxl 48248\nYWJpbGlh 48249\nNjM1 48250\nIG1hdGhlbWF0aWNpYW4= 48251\nIDQyNA== 48252\nIEtM 48253\nIEhJUA== 48254\nIG92ZXJoZWFyZA== 48255\nIFR1ZA== 48256\nIFRlYw== 48257\nIHF1aXp6 48258\nIGZsYXR0ZXJpbmc= 48259\nIGNvbm4= 48260\n4oCO 48261\nIGF0dGFjaGVz 48262\nIFJPUw== 48263\nIEFDUw== 48264\nIHRjcA== 48265\nIFNoYW1l 48266\nc2tpcA== 48267\ncmVzcGVjdGVk 48268\nIFRyaW5pZGFk 48269\nZ3JhaW4= 48270\nIGZvb3Rob2xk 48271\nIFVuY2hhcnRlZA== 48272\nIEp1bGlv 48273\nemw= 48274\nYXZvcmVk 48275\nIEFueGlldHk= 48276\nZXJyb3Jz 48277\nIENlbnRhdXJp 48278\naXRzY2g= 48279\nRGFkZHk= 48280\nIGNsdXRjaGluZw== 48281\nIEltcGxlbWVudA== 48282\nIEd1dGllcnJleg== 48283\nIDc2MA== 48284\nIHRlbGVwb3J0YXRpb24= 48285\nZW5kcmE= 48286\nIHJldmVyc2libGU= 48287\nc3Ryb3M= 48288\nQWR2ZW50dXJl 48289\nMDgz 48290\nIGxpYmVyYXRpbmc= 48291\nIGFzcGhhbHQ= 48292\nIFNwZW5k 48293\nQVJEUw== 48294\naW1zeQ== 48295\nUFJFUw== 48296\nIEVtZXJnaW5n 48297\nIHdpbGRmaXJlcw== 48298\nIHRlY2hub2xvZ2ljYWxseQ== 48299\nIGVtaXRz 48300\nIEFSVElDTEU= 48301\nIGlycmVndWxhcml0aWVz 48302\nIGNoZXJpc2g= 48303\n54mI 48304\nIHN0aW5r 48305\nIFJvc3Q= 48306\nRWNvbm9taWM= 48307\nIGNvdWdoaW5n 48308\nIE1jQ2Fubg== 48309\ncHJvcGVydGllcw== 48310\naWxhbnRybw== 48311\nIHJlbmVnb3Rp 48312\nVHJhbnNsYXRpb24= 48313\nIGlucXVlc3Q= 48314\nIEdyYXBl 48315\nb290ZXJz 48316\nZ3Vp 48317\nIFN3b3Jkc21hbg== 48318\nYWNlYWU= 48319\naGl0dGluZw== 48320\nIHJj 48321\nIGV4ZXJ0ZWQ= 48322\nIFNBUA== 48323\naXRlbnQ= 48324\nIHBlcmlsb3Vz 48325\nIG9ic2N1cml0eQ== 48326\nIGFzc2Fzc2luYXRl 48327\nIGFib3JpZ2luYWw= 48328\nIHJlc2N1aW5n 48329\nIFNoYXR0ZXJlZA== 48330\nbG9ja2luZw== 48331\nYWxsaW9u 48332\nQ2hhbmdpbmc= 48333\nIEhhcnJpbmd0b24= 48334\nIEJvcmQ= 48335\nIEFmZ2hhbnM= 48336\nSmFtaWU= 48337\nYXJldHo= 48338\nIEF1Z3VzdHVz 48339\nIDM4Ng== 48340\nODMw 48341\nIGpvZw== 48342\nb2tpbmdseQ== 48343\nVHJpZ2dlcg== 48344\nIEhPUg== 48345\nU3RhdGlzdGljcw== 48346\nIHZpZXdlcnNoaXA= 48347\nIGFkZGl0aXZlcw== 48348\naHVy 48349\nIG1heGltaXppbmc= 48350\nIFJvdmU= 48351\nIExvdWll 48352\nIEJ1Y2tldA== 48353\nIENIUklTVA== 48354\nb3VzZWw= 48355\nIHN0cmVha3M= 48356\naXJ0ZWQ= 48357\nIHRlcnQ= 48358\nIGNvbG9uaWFsaXNt 48359\nIGJ1cnlpbmc= 48360\neWs= 48361\nQ29uZGl0aW9u 48362\nIERQUks= 48363\nQnlJZA== 48364\nNzUx 48365\n4pe8 48366\nIHdvcnJpc29tZQ== 48367\nIHZvY2F0aW9uYWw= 48368\nc2xpY2U= 48369\nIHNhaWxz 48370\nIENvcnJlY3Rpb25hbA== 48371\nOTU0 48372\nIHR1bA== 48373\nS2lk 48374\nbHVzdGVy 48375\nIGZhbWlsaWFs 48376\nIFNwaXQ= 48377\nIEVwaXNjb3BhbA== 48378\nU3BlY2lmaWNhbGx5 48379\nIFZvbGNhbm8= 48380\ncnVucw== 48381\ncXM= 48382\nIHZldHRlZA== 48383\nIGNyYW1tZWQ= 48384\ndHJvcA== 48385\naGVyZXI= 48386\nVGhhbmtmdWxseQ== 48387\nIHBlcmN1c3Npb24= 48388\nIG9yYW5nZXM= 48389\nIHJvdW5kdXA= 48390\nIDQ5OQ== 48391\neGlvdXM= 48392\nQ2hhcmFjdGVycw== 48393\nIFppb25pc20= 48394\nIFJhbw== 48395\nw5vDmw== 48396\nV0Y= 48397\nIHVuaW50ZW50aW9uYWw= 48398\nT05FWQ== 48399\nR3JhYg== 48400\nQ29tbWVyY2lhbA== 48401\nIGdsdXRhbWF0ZQ== 48402\nIE1jS2VubmE= 48403\ncnVjaWF0aW5n 48404\nbmluZ3Rvbg== 48405\naWh1 48406\nQ2hhbg== 48407\nIFN3YXA= 48408\nIGxlYWZsZXRz 48409\nIGZ1bmN0aW9uYWxseQ== 48410\nZXJvdXM= 48411\nRmFybQ== 48412\nIGNhbG9yaWM= 48413\nIExpdGVyYWxseQ== 48414\nY29uY2VydA== 48415\nIHNoZW5hbg== 48416\nIHJlcGFpZA== 48417\nZXllcw== 48418\nIGJhc2hpbmc= 48419\nIEdvcmdl 48420\nIGNvbGxhYm9yYXRpb25z 48421\nIHVuYWNjb3VudA== 48422\naXRjaGll 48423\nIHRlYW13b3Jr 48424\ncHBlbGlu 48425\nIHBpcGluZw== 48426\nIG1pbmNlZA== 48427\nIGRpYW0= 48428\ncmllZw== 48429\nIG1hc2NhcmE= 48430\nIHN1Y2tlcg== 48431\nIE1vb25z 48432\nQXBwcw== 48433\nIFBlY2s= 48434\nIHBlcnY= 48435\nIEZsb2F0 48436\nb2xleQ== 48437\nIE5pc2g= 48438\naW1pemU= 48439\nIGFyb21hdGlj 48440\ndWlu 48441\nZW5kaXNo 48442\nIS8= 48443\nIEJpY3ljbGU= 48444\nIEFTSUM= 48445\naWxlZ2Vk 48446\nIFF1YWRybw== 48447\naW9zeW4= 48448\nIGxvY2tvdXQ= 48449\nIFdpbms= 48450\nU1BFQw== 48451\nQXR0ZW1wdHM= 48452\nIHNlZWRlZA== 48453\ncmVkbw== 48454\naWFzaXM= 48455\nIHNuYWc= 48456\n44OV44Kp 48457\n44K2 48458\nIGdyb3VuZGluZw== 48459\nIHJlbGlldmVy 48460\nIGZyaXZvbG91cw== 48461\nIEdpZnRz 48462\nIEZhY2Vz 48463\nRXNwZWNpYWxseQ== 48464\nIG1pY3JvYmlvbWU= 48465\naW1hZw== 48466\nIFNjaGw= 48467\nIFBsZXM= 48468\nIEJsZWFjaA== 48469\nIElyd2lu 48470\nIEVhdG9u 48471\nIERpc2NpcGxl 48472\nIG11bHRpcGxpY2F0aW9u 48473\nIGNvZXJjZWQ= 48474\nIDQxOQ== 48475\nc3Ro 48476\nRXZpbA== 48477\nQm9tYg== 48478\nIGV4b3Jj 48479\nIHN0YWdnZXJlZA== 48480\nTEVTUw== 48481\nIGluZXJ0aWE= 48482\nIEVESVQ= 48483\nIGdvYg== 48484\nVHJhZGl0aW9uYWw= 48485\nIGNsYXNzeQ== 48486\nTGVhcnk= 48487\nIFBBR0U= 48488\neXJz 48489\nIHRyYW5zcG9ydGVy 48490\nIG1hdHVyZWQ= 48491\nIGhpamFi 48492\nIGJpb21l 48493\nV2hlcmVhcw== 48494\nIGV4dGVybWluYXRpb24= 48495\nIFR1ZXM= 48496\nIFRha2VydQ== 48497\nIEF1ZHJleQ== 48498\nZXJpYWw= 48499\nIEFkZW4= 48500\nYWZmbGVz 48501\nIG5hcmNpc3Npc3RpYw== 48502\nIEJhaXJk 48503\nVVRG 48504\nSXJl 48505\nIENvbm5pZQ== 48506\nQ2hhbXA= 48507\nIHdoaXNwZXJpbmc= 48508\nIEhhdHQ= 48509\nREs= 48510\nIGRpc2luZmVjdA== 48511\nIGRlZHVjdGVk 48512\nIHBhcnRha2U= 48513\nIGRvd25ncmFkZQ== 48514\nIEVzcG9ydHM= 48515\nIENvbnRpbnVpbmc= 48516\nIGRlbW9jcmF0aWNhbGx5 48517\naWNyb2JpYWw= 48518\naXR0YQ== 48519\nIGxpbWVzdG9uZQ== 48520\nIGV4ZW1wdGVk 48521\nIEZyZW56eQ== 48522\nSGVybQ== 48523\nNzI4 48524\nIGZsZWRnbGluZw== 48525\nTWV0YQ== 48526\nNzY1NjE= 48527\nNjkz 48528\nJTo= 48529\nd2FrZQ== 48530\nNTI2 48531\nIERpc2NpcGxpbmU= 48532\nIHZpcmdpbml0eQ== 48533\nIExlZ2lvbnM= 48534\nIEZyYW5raWU= 48535\naW50ZW50 48536\nIHJlc3Ryb29tcw== 48537\nIFJvdXRlcg== 48538\nZGFx 48539\nIG9iamVjdGlvbmFibGU= 48540\n4oaR 48541\nd2Fyaw== 48542\nIFJhaHVs 48543\nZ2Fpbg== 48544\nYWN0aXZhdGlvbg== 48545\nYWJzb2x1dGU= 48546\nIEFjY2Vzc2Vk 48547\nIDI0MDA= 48548\nb2dnbGVz 48549\nIHNlY29uZGx5 48550\nIERFRkVOU0U= 48551\nIHBvc3RhZ2U= 48552\nd3JhcHBlcg== 48553\nc2hhcnA= 48554\nNzI5 48555\nIGNvbW11bmljYXRlcw== 48556\nIGFkZG9u 48557\nIE1pbGl0aWE= 48558\nSG9uZw== 48559\nIHNsdW1wZWQ= 48560\nIEpQRUc= 48561\nIEljYXI= 48562\nYWRpc2g= 48563\nNjgx 48564\nIG1hamVzdHk= 48565\nIFdvbGZnYW5n 48566\nIEVsYXN0aWM= 48567\ndXBlcg== 48568\nIHZpeg== 48569\nIHVuY29uc2Npb3VzbHk= 48570\nIFNURA== 48571\nIFNhc3M= 48572\nIGZsb3dlcmluZw== 48573\nIEhlbGlj 48574\nIERyYXBlcg== 48575\nIEFtYXRldXI= 48576\nIG1hbnVyZQ== 48577\nIGRpc2luZ2Vu 48578\nIExlaQ== 48579\nYnJpbmc= 48580\nOTQ5 48581\nIGluaGliaXRlZA== 48582\nIGhlYWRxdWFydGVyZWQ= 48583\nIGVuaWdtYXRpYw== 48584\n77+977+977+9 48585\nIHJlZHJlc3M= 48586\nUkg= 48587\nIHJhdHRsZWQ= 48588\nIGRpY3Rpb24= 48589\nbGlv 48590\nIFRCQQ== 48591\nIFNOQVA= 48592\nQ2FsbGluZw== 48593\nIGZhc2Npc3Rz 48594\nIERvdmU= 48595\naWV3aWN6 48596\nMDM2 48597\nIGNvYXN0cw== 48598\nIFJlY3Q= 48599\nICld 48600\nTG90 48601\nNjI5 48602\nIFNFTQ== 48603\nIFBldGVyc2Vu 48604\nIEV4cGxhaW4= 48605\nIEJvYXJkcw== 48606\nIEJlem9z 48607\nIEpvdXJuYWxz 48608\nIDIwMjQ= 48609\ncGFyc2Vy 48610\nIG1pc3RydXN0 48611\nIGdyYXRl 48612\nIExvY2tlZA== 48613\nYm9h 48614\nU2FpbnQ= 48615\nZ2FtaW5n 48616\nIHZvd2Vs 48617\naW5hdGVseQ== 48618\nYmxvdw== 48619\nQWxsYWg= 48620\nIHVubWF0Y2hlZA== 48621\nIGJvcmRlcmluZw== 48622\nIEV4cGVuZA== 48623\nbnI= 48624\nT3JhY2xl 48625\ncm91Y2g= 48626\nIGNvbnRpZ3VvdXM= 48627\nYWN1cw== 48628\nIGRpc3RyYXVnaHQ= 48629\nNTgx 48630\nIGFuYXRvbWljYWw= 48631\nT1g= 48632\nYXBpeGVs 48633\nODMz 48634\nIFBMVVM= 48635\nIHJlc3VzYw== 48636\nIGFiaWRpbmc= 48637\nNTcz 48638\nIHZhY2FuY2llcw== 48639\nRW1pbHk= 48640\nIGh5cG90aGFs 48641\nIFdlcm5lcg== 48642\nIFdlZQ== 48643\nIERKcw== 48644\nNTEz 48645\nIHdpdGNoY3JhZnQ= 48646\nIGFjdXB1bmN0dXJl 48647\nZW50YXJ5 48648\nYmVuZWZpdA== 48649\nUHJvZHVjdHM= 48650\nIFBTUA== 48651\nIE1QRw== 48652\nIEppbm4= 48653\nIEphcnJldHQ= 48654\nIDQ0NQ== 48655\nIEltYWdpbmc= 48656\nIFB5dGg= 48657\nRmluaXNo 48658\nIHRleA== 48659\nIGp1dmVuaWxlcw== 48660\nIGhlcm9pc20= 48661\nIGRvdWJ0bGVzcw== 48662\nIEFraQ== 48663\nIFRlbmQ= 48664\nIFBhdHJpYXJjaA== 48665\nIGJpdHRlcnM= 48666\nIFRlbGVjb21tdW5pY2F0aW9ucw== 48667\naXRhdGl2ZWx5 48668\nYWduYQ== 48669\nIHJn 48670\nIFNPTEQ= 48671\nIGNvbXB1bHNpb24= 48672\nIE5hc2E= 48673\nIEthdGhyeW4= 48674\nIG1pbGxpb25haXJlcw== 48675\nIGludHJpbnNpY2FsbHk= 48676\nIGJvbHN0ZXJlZA== 48677\ndGltZW91dA== 48678\nZmxv 48679\nIHR1dG9y 48680\ncG91cg== 48681\nU3RhdGVtZW50 48682\nIHsq 48683\nIFJ1ZG9scGg= 48684\nIEtpbWJlcmx5 48685\ncm9nZW5z 48686\nYWRpcQ== 48687\nXSs= 48688\nIGluZGlnbmF0aW9u 48689\nIGZyYWN0dXJpbmc= 48690\nIFJlbGVhc2Vz 48691\nIEdyYWlu 48692\ncHJvdGVpbg== 48693\nTGFnbw== 48694\nIHZhY2F0aW9ucw== 48695\nIGJvb3RlZA== 48696\nIFRIUkVF 48697\nIEhH 48698\nb3Jlc2NlbmNl 48699\nIHRm 48700\nIHNvYXI= 48701\naW9zeW5jcg== 48702\nIGdsYW5jZXM= 48703\nIFNwb29u 48704\nIEp1cnk= 48705\nIENvd2JveQ== 48706\nIGNyZWF0aXZlbHk= 48707\nSGlnaGVy 48708\nIHNvbGljaXRvcg== 48709\nIGhhd2s= 48710\nYWNpbw== 48711\nODk2 48712\nIHN1cGVyZmx1 48713\nIGJvbWJzaGVsbA== 48714\nY3R1cmU= 48715\nIGJyb2tlcmFnZQ== 48716\nIHJhaWRpbmc= 48717\nIGZyZW5jaA== 48718\nIGFuZ2xlZA== 48719\nVHJhbnNhY3Rpb24= 48720\nIEdlbm9jaWRl 48721\ndXBl 48722\nIEhhaXRpYW4= 48723\nNTcy 48724\nITo= 48725\nIHVud2l0dGluZ2x5 48726\naXRlcmF0b3I= 48727\nc2Nyb2xs 48728\nIHRhbGxpZWQ= 48729\nIGJpb21lZGljYWw= 48730\nIENBUkQ= 48731\nIGV1cGhlbQ== 48732\nIGJyYWluc3Rvcm0= 48733\nYXF1aW4= 48734\nS28= 48735\nTWljaGVsbGU= 48736\nIFJ1bmVz 48737\nIEJhbGxpc3RpYw== 48738\ndWRlcnM= 48739\nIG1vZGVzdHk= 48740\nIGlQYWRz 48741\nIEV6ZWtpZWw= 48742\nWUU= 48743\nIHN0YXJzaGlw 48744\nIHBvd2VyZnVsbHk= 48745\nIHBlcmw= 48746\nIFNoYWRl 48747\nIFF1YXJ0 48748\nIEVFRw== 48749\nIGZpc2hlcm1hbg== 48750\nT1NFRA== 48751\nIFR5cGljYWw= 48752\nZGZ4 48753\nIG1lc2hlcw== 48754\nIGV0Y2hlZA== 48755\nd29ydGhpbmVzcw== 48756\nIHRvcHBsZWQ= 48757\nIDM5Ng== 48758\nb3JpdXM= 48759\nV2Vpc3M= 48760\nIG15c3Fs 48761\nIFZhbGhhbGxh 48762\n2ZI= 48763\nbGVhc2luZw== 48764\nIHJlY29tcA== 48765\ncmFwbmVs 48766\nU2Vs 48767\nMDQz 48768\nIGRlcmFpbGVk 48769\nIEd1aWRlcw== 48770\nSVJU 48771\nIGRlaHVtYW4= 48772\nIEJyaXR0YW55 48773\nIikp 48774\nIGV4Y2xhaW0= 48775\nIGJhbGs= 48776\nIDg0MA== 48777\nQ0xBSU0= 48778\naW50ZWw= 48779\nTEFC 48780\nIHBlZ2dlZA== 48781\nIGFzdHJvcGg= 48782\nc21va2luZw== 48783\nIHJpZ2dpbmc= 48784\nIGZpeGF0aW9u 48785\nIGNhdGFwdWx0 48786\naW5zaWRl 48787\nIENhc2NhZGU= 48788\nIEJvbHNoZXZpaw== 48789\nR2F6YQ== 48790\nRGVwdGg= 48791\nIGxvdWRzcGU= 48792\nIGFsbW9uZHM= 48793\nbWV5ZXI= 48794\nbGVuZXNz 48795\namVu 48796\nZnJlc2g= 48797\nIHVuYmVhdGVu 48798\nIFNxdWlk 48799\nIFByZXN1bWFibHk= 48800\nVGltZXI= 48801\nQlc= 48802\nIHJvc3RlcnM= 48803\nIGVsbGlwdA== 48804\nIEhhcnJpZXQ= 48805\nZGF0YWJhc2U= 48806\nIE11dHVhbA== 48807\nIENvbW1vZG9yZQ== 48808\ndWtlZA== 48809\na25pZmU= 48810\nIENPTU1VTg== 48811\naHlh 48812\nIG1lbHRz 48813\nYXJjaGl2ZXM= 48814\nIHJhdGlmaWNhdGlvbg== 48815\nIG11bHRpcGx5aW5n 48816\nIGludGVyb3Blcg== 48817\nIGFzY2VydA== 48818\nd2luZ3M= 48819\ndmVydGluZw== 48820\nIFNjb3JwaW9u 48821\nYXll 48822\nIFBvcnRzbW91dGg= 48823\nIE1UQQ== 48824\nbml0 48825\naWF6ZXA= 48826\nIHF1YXJhbnRpbmU= 48827\nIHNsaWRlc2hvdw== 48828\nIGNlbnRpbWV0ZXJz 48829\nIHN5bm9wc2lz 48830\nIHNwYXRl 48831\ndGhpcnN0 48832\nIG5vbWluYXRpbmc= 48833\nIE1lbHZpbg== 48834\nUHJldmlldw== 48835\nIHRocm9i 48836\nIGdlbmVyYXRpb25hbA== 48837\nIFJhZGl1cw== 48838\ncmVzdGxpbmc= 48839\ncHV0YWJsZQ== 48840\nYXdhcg== 48841\nTkVDVA== 48842\nIHVubGF3ZnVsbHk= 48843\nIFJldmVsYXRpb25z 48844\nV2lraXBlZGlh 48845\nc3Vydg== 48846\nIGV5ZWluZw== 48847\naWpu 48848\nIEZX 48849\nIGJydW50 48850\nIGludGVyc3RlbGxhcg== 48851\nIGNsaXRvcg== 48852\nIENyb2F0aWFu 48853\nIENoaWM= 48854\nZXZh 48855\nIERpc2FwcA== 48856\nIEFraW4= 48857\naW5lcmllcw== 48858\nZHVzdA== 48859\nSW50ZXJlc3RlZA== 48860\nIGdlbmVzaXM= 48861\nIEV1Y2w= 48862\nw7Zu 48863\ncGlja2luZw== 48864\nIG11dGF0ZWQ= 48865\nIGRpc2FwcHJvdmU= 48866\nIEhETA== 48867\nIDYyNQ== 48868\nzLY= 48869\nY2FuY2Vy 48870\nIHNxdWF0cw== 48871\nIGxldmVycw== 48872\nRGlzY3Vzcw== 48873\nPV0= 48874\nRGV4 48875\nIFZJREVPUw== 48876\nQVVE 48877\nIHRyYW5zYWN0 48878\nIEtpbmVjdA== 48879\nIEt1YWxh 48880\nIEN5cA== 48881\nNzQ3 48882\nIHNoYXR0ZXJpbmc= 48883\nIGFyc2VuaWM= 48884\nIEludGFrZQ== 48885\nIEFuZ2Vsbw== 48886\nIFF1aXQ= 48887\nIEtoZQ== 48888\nIDE4OTM= 48889\nTWFrZXI= 48890\nMDI5 48891\nIFBhaW50aW5n 48892\nRGlzYWJsZQ== 48893\nOTE2 48894\nIGFuYWxnZXM= 48895\nIHRhY3RpbGU= 48896\nIHByb3BoZXM= 48897\nIGRpY2Vk 48898\nIFRyYXZlbHM= 48899\nIEhlYWRlcg== 48900\nIENsdWJz 48901\nQXNzaXN0YW50 48902\nIGluY3JpbQ== 48903\nIGRpcHM= 48904\nIGNydWNpZml4 48905\nIFNoYW5haGFu 48906\nIEludGVycHJldA== 48907\nIDQwOTA= 48908\nYWxvZ3k= 48909\nYWJiYQ== 48910\nIHNpbXVsYWM= 48911\naHVzYmFuZA== 48912\nU0lN 48913\nIHJlY3ljbGU= 48914\ndWNlcg== 48915\nZWRnZWQ= 48916\nIHJlbmFpc3NhbmNl 48917\nIEJvbWJheQ== 48918\nQ2F0aG9saWM= 48919\nIExJTkU= 48920\nIENsb3RoaW5n 48921\ncmVwb3J0cw== 48922\nIHBsYXVz 48923\nIGRhZw== 48924\nIE1hY2U= 48925\nWkk= 48926\nIGludHJ1ZGVy 48927\nIFZldGVyaW5hcnk= 48928\nZ3J1 48929\nIHNuZWFreQ== 48930\nIFNpZQ== 48931\nIENpbm5hbW9u 48932\nUE9TRQ== 48933\nIGNvdXJpZXI= 48934\nIENOUw== 48935\nIGVtYW5jaXBhdGlvbg== 48936\nc2l0 48937\nIHBsYXl0aHJvdWdo 48938\nIEZhY2lsaXRpZXM= 48939\ndmlydA== 48940\nIEdhdW50bGV0 48941\nVGhvbXBzb24= 48942\nIHVuYmVsaWV2YWJseQ== 48943\nUGFyYW1ldGVycw== 48944\nIHN0aXRjaGluZw== 48945\naWduZQ== 48946\nIFRIRVNF 48947\nUHJpdmFjeQ== 48948\nIHNoZW5hbmlnYW5z 48949\nIHZpdHJp 48950\nIFZhbGlk 48951\nNTkx 48952\nrbc= 48953\nIFByb3RvdHlwZQ== 48954\naW5rYQ== 48955\nU0NQ 48956\nIFRpZA== 48957\n6Ig= 48958\nb2xkZWQ= 48959\nIGluZGl2aWR1YWxpdHk= 48960\nIGJhcmtpbmc= 48961\nIG1hcnM= 48962\nIFdE 48963\nIDgyMA== 48964\nIHRpcg== 48965\nIHNsYXBwaW5n 48966\nIGRpc2dydW50bGVk 48967\nIEFuZ29sYQ== 48968\ncml1cw== 48969\nIFRvcm5hZG8= 48970\nIFRodXJz 48971\nIGNhcHRjaGE= 48972\nIGFuZ3N0 48973\nIFBvZw== 48974\nIEFzc2Fzc2lucw== 48975\nIEFkaWRhcw== 48976\nIGpveWZ1bA== 48977\nIHdoaW5pbmc= 48978\nRW1lcmdlbmN5 48979\nIHBob3NwaG9ydXM= 48980\nIGF0dHJpdGlvbg== 48981\nb3Bob24= 48982\nIFRpbWJlcndvbHZlcw== 48983\nIEphaA== 48984\nIEJyaW5naW5n 48985\nIFdhZA== 48986\nIEVuc3VyZQ== 48987\nb2hs 48988\nIFhpZQ== 48989\nb21tZWw= 48990\nY21w 48991\nIHppcHBlcg== 48992\nIHJlbGF0 48993\nIENvcnJpZG9y 48994\nbWlsbw== 48995\nVElORw== 48996\nQXZn 48997\nIGNyb3BwZWQ= 48998\nXX0= 48999\nIHJhZ2Vk 49000\nIEx1bXB1cg== 49001\nIEd1ZXJyZXJv 49002\nb3Vya2U= 49003\nTnV0 49004\nIG9mZnNldHM= 49005\nb2dsdQ== 49006\nZHJt 49007\nIG1vcnRhbHM= 49008\nbGF0YWJsZQ== 49009\nIGRpc21pc3NpdmU= 49010\n5LiJ 49011\nIHRocm9hdHM= 49012\nIGNoaXBzZXQ= 49013\nIFNwb3RsaWdodA== 49014\nQ2F0YWxvZw== 49015\nYXJ0aXN0 49016\nR2I= 49017\nIGNoaWxseQ== 49018\nIHN0b2tlZA== 49019\nIDM3NA== 49020\nV2FyZA== 49021\nTGF0aW4= 49022\nIGZpYXNjbw== 49023\nIGJsZWFjaA== 49024\nIGJyYXY= 49025\nRW5oYW5jZWQ= 49026\nIGlub2M= 49027\nIEZpb3JpbmE= 49028\nXz4= 49029\nIGxldWtlbWlh 49030\nIGVsdWM= 49031\nIGFubm91bmNlcg== 49032\nIExpdGh1YW4= 49033\nIEFybWFnZWRkb24= 49034\n5Yc= 49035\nTGVuaW4= 49036\nIFJ1aw== 49037\nIHBlcHA= 49038\nIFJvbWFudGlj 49039\nIFBJVA== 49040\nIEludGVyc3RlbGxhcg== 49041\nIEF0a2luc29u 49042\nUmFpZA== 49043\nSnM= 49044\nR29hbA== 49045\nQ291cnNl 49046\nIHZhbmlzaGluZw== 49047\nZXNsZXk= 49048\nIFJvdW5kcw== 49049\nRWxzYQ== 49050\nNTkz 49051\nIHJlZHVuZGFuY3k= 49052\nIFNUQU5E 49053\nIHByb3BoZXRpYw== 49054\nIGhhYml0YWJsZQ== 49055\ncnl1 49056\nIGZhaW50bHk= 49057\nTU9ERQ== 49058\nIGZsYW5rZWQ= 49059\nSVJD 49060\nQXdlc29tZQ== 49061\nIHNwdXJpb3Vz 49062\nIFphaA== 49063\nIE1TRw== 49064\nIHNoYWRpbmc= 49065\nIG1vdGl2YXRpb25hbA== 49066\nIFNhbnRhbmE= 49067\nIFNQUg== 49068\nIGV4Y3J1Y2lhdGluZw== 49069\nb21pYWw= 49070\nIE1pa28= 49071\nIExlb3BhcmQ= 49072\nQWJ5c3M= 49073\nIFt8 49074\nZGlydHk= 49075\nIGJhdGhz 49076\nIGRlbW9yYWw= 49077\nYW5kcmU= 49078\nUEI= 49079\nIHVuaWZpY2F0aW9u 49080\nIHNhY3JhbWVudA== 49081\nIFsm 49082\nIHByaWNlbGVzcw== 49083\nIGdlbGF0aW4= 49084\nIGVtYW5hdGluZw== 49085\nIEFsbGFhaA== 49086\nOTg2 49087\nIG91dGJ1cnN0 49088\nIGVyYXM= 49089\nIFhWSQ== 49090\nIFNQSQ== 49091\nT3R0 49092\nIExhemFydXM= 49093\nUExJRUQ= 49094\nRmx5aW5n 49095\nYmxvZ3M= 49096\nV2lzY29uc2lu 49097\nUmF2ZW4= 49098\nIHJlYmF0ZQ== 49099\nIGNyZWVwcw== 49100\nIFNwYW4= 49101\nIFBhaW50ZXI= 49102\nIEtpcmE= 49103\nIEFtb3M= 49104\nIENvcnZldHRl 49105\nQ29uc3VtZXI= 49106\nIFJlY292ZXI= 49107\nY2tp 49108\nIHBlc2t5 49109\nIEludmVudGlvbg== 49110\nQ29tcGFuaWVz 49111\nIGNoYWxsZW5nZXJz 49112\nYWRlbWlj 49113\nIFVrcmFpbmlhbnM= 49114\nIE5ldXJvbG9n 49115\nIEZvcnNha2Vu 49116\nIGVudHJhbnRz 49117\nIGVtYmF0dGxlZA== 49118\nIGRlZnVuY3Q= 49119\nIEdsYWNpZXI= 49120\nIHBvaXNvbnM= 49121\nIEhvcnNlcw== 49122\nbWFrZXM= 49123\nIERpcnQ= 49124\nIDQyMw== 49125\naGho 49126\nIFRyYW5zZm9ybWF0aW9u 49127\nUVVJUkU= 49128\nLi4uLi4uLi4uLi4uLi4uLi4u 49129\nIHRyYXZlbGxlcg== 49130\nIFNleHk= 49131\nIEtlcm4= 49132\naXBvbGFy 49133\nIHJhbnNvbXdhcmU= 49134\nb29vb29vb29vb29vb29vbw== 49135\nRWM= 49136\ncnVieQ== 49137\nUHJvZmVzc2lvbmFs 49138\nIE91dGJyZWFr 49139\nYXJndW1lbnQ= 49140\nR3JleQ== 49141\nIEZpZmE= 49142\nIENITw== 49143\nIEZPUk0= 49144\nIEFtdHJhaw== 49145\nLVs= 49146\nIGNyYWRsZQ== 49147\nIGFudGlveGlkYW50cw== 49148\n44Gu5a4= 49149\nNzM2 49150\nIE5BU0w= 49151\nIENvbnRyaWJ1dGlvbnM= 49152\nSW5kaWFuYQ== 49153\nIFNURVA= 49154\nQ1NT 49155\nIHNhbGllbnQ= 49156\nIGFsbG9jYXRpb25z 49157\neXJpZ2h0cw== 49158\nIG1hc2hlZA== 49159\nIEN1dHRlcg== 49160\nU2V4dWFs 49161\nIHBvdW5kZWQ= 49162\nIGZhbmJhc2U= 49163\nIGNhc2M= 49164\nIFRyYW5zcGFyZW5jeQ== 49165\nIGFuYWx5dGlj 49166\nIFN1bW1vbmVy 49167\n154= 49168\nIEFEQw== 49169\nZGV0YWls 49170\nIHZhbnF1aXNoZWQ= 49171\nIGNyYWJz 49172\nYXJpZQ== 49173\nRGVzdHJveQ== 49174\nIFNhY2s= 49175\nIHRyYW5zaXN0b3I= 49176\nQWxhYmFtYQ== 49177\nIEtvZW4= 49178\nIEZpc2hlcmllcw== 49179\nY29uZQ== 49180\nIGFubmV4ZWQ= 49181\nIE1HTQ== 49182\nZXNh 49183\nIGZha2Vk 49184\nIENvbmdyYXR1bGF0aW9ucw== 49185\nIGhpbmRlcmVk 49186\nIGNvcnJlY3Rpb25hbA== 49187\nIElUVg== 49188\nbGVldmU= 49189\nIGluYXBwcm9wcmlhdGVseQ== 49190\nbGlja3M= 49191\nIHRyZXNwYXNz 49192\nIHBhd3M= 49193\nIG5lZ290aWF0b3I= 49194\nIENocmlzdGVuc2Vu 49195\nbGltaXRz 49196\nIERpYW5uZQ== 49197\nIGVsZWdhbmNl 49198\nIENvbnRyYWN0cw== 49199\nYW5rZQ== 49200\nT2Jq 49201\nIHZpZ2lsYW5jZQ== 49202\nIGNhc3RsZXM= 49203\nIE5BRA== 49204\nIEhvbG8= 49205\nIGVtcGhhdGljYWxseQ== 49206\nIFRpdHVz 49207\nIFNlcnZpbmc= 49208\nIFJpY2hpZQ== 49209\nIFBpZ3M= 49210\nNTY4 49211\nIGFuaW1vc2l0eQ== 49212\nIEF0dHJpYnV0ZXM= 49213\nIFVyaWVs 49214\nTVE= 49215\nbXlyYQ== 49216\nIEFwcGxpY2FudA== 49217\nIHBzeWNoaWF0cmlzdHM= 49218\nIFZpag== 49219\nIEFiYnk= 49220\nYWdyZWU= 49221\nUHVzaA== 49222\nIGtXaA== 49223\naGliYQ== 49224\nIGluY2l0ZQ== 49225\nIFdlYXNsZXk= 49226\nIFRheGk= 49227\nbWluaXN0aWM= 49228\naHlwZXI= 49229\nIEZhcm4= 49230\nIDYwMQ== 49231\nIE5hdGlvbndpZGU= 49232\nRmFrZQ== 49233\nOTUy 49234\nIG1haXpl 49235\nIGludGVyYWN0ZWQ= 49236\nIHRyYW5zaXRpb25lZA== 49237\nIHBhcmFzaXRpYw== 49238\nIGhhcm1vbmlj 49239\nIGRlY2F5aW5n 49240\nIGJhc2VsZXNz 49241\nbnNpY3M= 49242\nIHRyYW5zcGlyZWQ= 49243\nIGFidW5kYW50bHk= 49244\nIEZvcmVuc2lj 49245\nIHRyZWFkbWlsbA== 49246\nIEphdg== 49247\nYWJhbmQ= 49248\nIHNzaGQ= 49249\nIGZyb250bWFu 49250\nIEpha2FydGE= 49251\nb2xsZXI= 49252\nZHJvcHM= 49253\nIFNFUlZJQ0VT 49254\ncm9tcHR1 49255\nb3BoaWNhbA== 49256\naG9zcGl0YWw= 49257\nYmxlZG9u 49258\nNjQ1 49259\nIG1pZHJhbmdl 49260\nIEVWRU5U 49261\nY3VsYXRlZA== 49262\ncmF3bGVk 49263\nIHBlcmNoZWQ= 49264\nIG92ZXJib2FyZA== 49265\nIFBlZWw= 49266\nIFB3cg== 49267\nIENhcnRo 49268\nIENPTVBMRQ== 49269\nY29l 49270\nc2hhbGw= 49271\nIGRldGVycmVuY2U= 49272\nTUVUSE9E 49273\nIEFic2VudA== 49274\nTUVO 49275\nIHNpbGw= 49276\nIExFVkVM 49277\nWW9yaw== 49278\nIHNpbm5lcnM= 49279\nIE9QRUM= 49280\nIE51cg== 49281\nIERlc2lnbnM= 49282\nc2VsZWN0aW9u 49283\nIHVud29ydGh5 49284\nQ0hB 49285\nIHN0cmVuZ3RoZW5z 49286\nODgz 49287\nZWRseQ== 49288\nIHNsaWNpbmc= 49289\nIG1hbG51dHJpdGlvbg== 49290\nIGZpbG1tYWtpbmc= 49291\nIFBvbGs= 49292\ndXJhdGVk 49293\nIDQyMQ== 49294\nYnJlYWtlcnM= 49295\nISci 49296\nIHdldGxhbmRz 49297\nIERpc2NyaW1pbmF0aW9u 49298\nIGFsbG93YWJsZQ== 49299\nIHN0ZWVyZWQ= 49300\nIFNpY2lseQ== 49301\nU0FN 49302\nIG11c3RhY2hl 49303\nIG1pZHM= 49304\nIGNsaXBwZWQ= 49305\nIGNpcmN1bGF0ZQ== 49306\nIGJyaXR0bGU= 49307\nIEJ1aWxkaW5ncw== 49308\ncmFpc2Vk 49309\nIFJvdW5kdXA= 49310\nIHdlYWx0aGllcg== 49311\nIG92ZXJ3cml0ZQ== 49312\nIG92ZXJwb3dlcmVk 49313\nIEdlcnJhcmQ= 49314\nc2l0ZXM= 49315\nUERBVEVE 49316\nIGFjdXRlbHk= 49317\nIEdhbWJsZQ== 49318\nIHBpbQ== 49319\nIEt1cw== 49320\nVHlwaWNhbGx5 49321\nRGVwbG95 49322\nIE1vcm9jY2Fu 49323\ncG90aW9u 49324\nY29tYmU= 49325\nIHZpZ2lsYW50ZQ== 49326\nIDM2Mw== 49327\nU3Rldw== 49328\nIEJhZ2c= 49329\nIHJlc2lkZWQ= 49330\nIFNwbw== 49331\nIHJlbW5hbnQ= 49332\nIGVtcHRpbmVzcw== 49333\nYnJhaW5lcg== 49334\nIG91dHBhdGllbnQ= 49335\ncHJpb3JpdHk= 49336\nIGxlcHRpbg== 49337\nIFBheXRvbg== 49338\nIEdsZWFtaW5n 49339\nIFNoZWQ= 49340\nIFBvbG8= 49341\nIE1vcm1vbmlzbQ== 49342\ncmVzdHJpY3RlZA== 49343\nYXJsYW5l 49344\nd3g= 49345\nIGNyZWF0aW5l 49346\nIEFub24= 49347\nIFNUVUQ= 49348\nIEpVTA== 49349\nIFRlZQ== 49350\nNTI4 49351\nMDg5 49352\nIGhhdGNoZWQ= 49353\nRGlzcGF0Y2g= 49354\nIENvbXBvc2l0ZQ== 49355\nIDQ1MQ== 49356\ncHVmZg== 49357\nIFhDT00= 49358\nIE9ybg== 49359\nIFRIQU5L 49360\nRU5ERUQ= 49361\nIEFzaGV2aWxsZQ== 49362\nIMOc 49363\nIG1hbmdv 49364\nIFNsaWdodGx5 49365\nd29ybGRseQ== 49366\nIFdhbmRlcg== 49367\nIEV4cGFuZA== 49368\nIENocg== 49369\nTWlzdA== 49370\nIG9ydGhvZG94eQ== 49371\nIFVORVNDTw== 49372\ncmVnYXRl 49373\nRWxzZXdoZXJl 49374\na2ll 49375\naXJsZWQ= 49376\nIHRvcHBsZQ== 49377\nIGFkb3B0aXZl 49378\nIExlZ3M= 49379\nZHJlc3M= 49380\nIFNhZ2Fu 49381\nYmFyZQ== 49382\nIEdsb3U= 49383\nQ3J1bmNo 49384\nIGhlbHBlcnM= 49385\nIGNocm9uaWNhbGx5 49386\nIEh1bWE= 49387\nMTAwMDA= 49388\nIGFjY29tbW9kYXRpbmc= 49389\n5LqU 49390\nIHdyaW5rbGVz 49391\nIGRvZGdlZA== 49392\nZm91cnRo 49393\nIHByZWNvbg== 49394\nIGNvbXByZXNzb3I= 49395\nIEthcmU= 49396\nIGV2aWN0 49397\nIFdhcndpY2s= 49398\naW1hcg== 49399\nIG1vZGVybml6YXRpb24= 49400\nIGJhbmR3YWdvbg== 49401\nIHJlZnV0ZWQ= 49402\nIG5ldHRlZA== 49403\nIE5hcGxlcw== 49404\nIEdlbmll 49405\ncGVyb3Jz 49406\nIGZpZWxkZWQ= 49407\nIGRlcmU= 49408\nIFBhcmFibGVz 49409\nbGVlcw== 49410\nIHRyb3V0 49411\nYXNwZXJz 49412\nIG5paGls 49413\nIGhhcHBpZXN0 49414\nIGZsb3BweQ== 49415\nIExvZnQ= 49416\nIEhlYXJk 49417\nIHVuaXNvbg== 49418\nIGx1Zw== 49419\nIFJlZG1vbmQ= 49420\nY2xhc3NpYw== 49421\nU3VwcG9ydGVycw== 49422\nU0hJUA== 49423\nR01U 49424\nIGZ1ZWxsZWQ= 49425\n55A= 49426\nIGRk 49427\nIEVtaW5lbQ== 49428\nIDE4OTc= 49429\nTllTRQ== 49430\nIHNlY3JldGFyaWVz 49431\nIEZJQQ== 49432\nIENhbmF2ZXJhbA== 49433\nRmF2b3JpdGU= 49434\nIHBvbXA= 49435\nIGRldGFpbmVl 49436\nZXJzaGlw 49437\nYWltb24= 49438\naW91cg== 49439\nIEFwZXg= 49440\nIHBsYW50YXRpb25z 49441\nYW1pYQ== 49442\nYWNpb24= 49443\nUnVzdA== 49444\nIHRvd2Vk 49445\nIFRydWx5 49446\nNTc3 49447\nIHNoZWx0ZXJlZA== 49448\ncmlkZXI= 49449\nV28= 49450\nIGxhaXI= 49451\nIEludGVsbGlnZW50 49452\naW1wcm92ZQ== 49453\nbWF0aWNhbGx5 49454\nIGV0aXF1ZXR0ZQ== 49455\nYWRyYQ== 49456\nYWxsbw== 49457\nIEp1bm8= 49458\nYW55dGhpbmc= 49459\nIFN0cnVnZ2xl 49460\nIFByZWRpY3Q= 49461\nIEdyaW1lcw== 49462\nIEFNRVJJQ0E= 49463\nY3R4 49464\nIFNpdHVhdGlvbg== 49465\nV09PRA== 49466\nIHNvbHVibGU= 49467\nbWVpZXI= 49468\nIGludG9sZXJhYmxl 49469\nYW5nZXJpbmc= 49470\nIHVuaW50ZXJydXB0ZWQ= 49471\nIHRvb2x0aXA= 49472\nIGludGVycm9nYXRlZA== 49473\nIGd1bm5lZA== 49474\nIFNuZWFr 49475\n5q2m 49476\nIHRldGhlcg== 49477\nIGNydW1ibGU= 49478\nTGVucw== 49479\nIGNsdXN0ZXJlZA== 49480\nIFN5bA== 49481\nIEhhc2Fu 49482\nIGR5c3RvcGlhbg== 49483\nd2FuYQ== 49484\nIGpveXN0aWNr 49485\nIFRoaWI= 49486\nYW1tdQ== 49487\nVG9tb3Jyb3c= 49488\nNTQ2 49489\nIG92ZXJjYW1l 49490\nIG1pbmltaXplZA== 49491\nY2VwdG9y 49492\nUnVubmVy 49493\nRU5HVEg= 49494\nIEJyZW5kYQ== 49495\nIEFjaGlldmVtZW50cw== 49496\nIHRvcmNoZXM= 49497\nIHJhcHBvcnQ= 49498\nIEludmVzdGlnYXRvcg== 49499\nIEhhbmRsaW5n 49500\ncmVsYXRpb24= 49501\nZ3JleQ== 49502\nODE1 49503\nIGtjYWw= 49504\nIENvbW1hbmRz 49505\nZHE= 49506\nIGN1cmxz 49507\nIGJlYXJlcg== 49508\nIGN5bmljaXNt 49509\naXRyaQ== 49510\nIFVzZWZ1bA== 49511\nQmVl 49512\nRENT 49513\nIGFicmFz 49514\nUHJhY3Q= 49515\nQklMSVRJRVM= 49516\nNzEy 49517\nIGRlYnVnZ2Vy 49518\nIGRlYnRvcg== 49519\nIExpYQ== 49520\nIEtlcnM= 49521\nIGV4YWNlcmJhdGU= 49522\nIFN0YWN5 49523\nIEJsYW5k 49524\nIFNjZW5lcw== 49525\nIGJyYW5jaGluZw== 49526\n4paI4paI4paI4paI4paI4paI4paI4paI 49527\nYXBlYWtl 49528\nIHNhbHNh 49529\nIG1pc2hhbmQ= 49530\nIEtvbmFtaQ== 49531\nIE5pYg== 49532\nIGFuZWNkb3Rl 49533\nIGFncmVlYWJsZQ== 49534\nz4k= 49535\nIE5hdGhhbmllbA== 49536\nIEhlaXNtYW4= 49537\nIEJld2FyZQ== 49538\nIDE4ODY= 49539\nc3BlY3RpdmU= 49540\nNjkx 49541\nNTIy 49542\nIGluaGliaXRz 49543\nIGhhc2hpbmc= 49544\nIDE4ODk= 49545\n5bCG 49546\ndmljaA== 49547\nUHVyZQ== 49548\nIHNvbGlkbHk= 49549\nIGFzcGlyaW4= 49550\naW1hcnU= 49551\nIHN0cmVldGNhcg== 49552\nIFVDUw== 49553\nIEp1ZGQ= 49554\nIGZsYXNoYmFja3M= 49555\ncGlucw== 49556\nIDE0NDA= 49557\nIFVOSENS 49558\nIFN5bXB0b21z 49559\nVElU 49560\nNTM4 49561\nRnJh 49562\nJSk7 49563\nIG9veg== 49564\nIGN1cmZldw== 49565\nIGNhbG1lZA== 49566\nIHBhcnRpY2lwYXRlcw== 49567\nVGVY 49568\nIG5vbnNlbnNpY2Fs 49569\nIGZ1bGxiYWNr 49570\nIERlTA== 49571\nbW9ua2V5 49572\naGFyaQ== 49573\nIG1ldGFib2xpdGVz 49574\nIGxvb3RlZA== 49575\nIEFMV0FZUw== 49576\nIEJDQw== 49577\nTHQ= 49578\nb2NoZXQ= 49579\nQm9uZQ== 49580\nIHZldG9lZA== 49581\nIGdjYw== 49582\nIENMSUNL 49583\nIDE4ODg= 49584\nc2Fm 49585\nIHN0aWZmbmVzcw== 49586\nIGxvd2x5 49587\nIEdlaA== 49588\ndmVyc29u 49589\nb3JzZXQ= 49590\nIHVuZm9yZXNlZW4= 49591\nIGFuZXN0aGVzaWE= 49592\nIE9wdGljYWw= 49593\nIHJlY29uc3RydWN0ZWQ= 49594\nIFR1cA== 49595\nc2hvd3M= 49596\nTkVXUw== 49597\nIE5ld3NwYXBlcg== 49598\nIEFTQQ== 49599\ndGVyYQ== 49600\nTnVtYmVycw== 49601\nIGluZXhwbGljYWJsZQ== 49602\n15E= 49603\nIGhhcmRuZXNz 49604\ndW50YXJpbHk= 49605\nIEFjZXI= 49606\nZ3JhZGllbnQ= 49607\nQVJESVM= 49608\nIHdvb2RsYW5k 49609\nIG1ldGFwaG9ycw== 49610\nIFdlbWJsZXk= 49611\nIFBhdmVs 49612\ncGhpbGlz 49613\nIHJld3JpdGluZw== 49614\nIHBlcmNlcHR1YWw= 49615\nIDEwNzA= 49616\nd29ybXM= 49617\nIERvd25z 49618\nIHVuc3VycHJpc2luZ2x5 49619\nIHRhZ2dpbmc= 49620\nZmxhbWU= 49621\nIGxpdHJlcw== 49622\nIGJvdW5jZXM= 49623\nIEJhYmU= 49624\nc2h1dA== 49625\nIG92ZXJkb3Nlcw== 49626\nIFNoZWlsYQ== 49627\nIENoYXU= 49628\nIEJsZXNz 49629\nQ2FwdHVyZQ== 49630\nIFNpZ25pZmljYW50 49631\nIFNjaW9u 49632\nIDM4OQ== 49633\nIE1jSA== 49634\nIFRpdGFuaXVt 49635\nIE1lYWw= 49636\nYW1lZGE= 49637\nYWdlbnRz 49638\nYWdncmVzc2l2ZQ== 49639\nQmlsbHk= 49640\nNzYz 49641\nIFNheWluZw== 49642\nREVSUg== 49643\naXRvbmU= 49644\nQ29sbGlucw== 49645\nQm91bmQ= 49646\nIGJvbHRlZA== 49647\nIERNQ0E= 49648\nOTUz 49649\nIHVuaXF1ZW5lc3M= 49650\nIGVwaWdlbg== 49651\ndW5jaQ== 49652\nYW50YW0= 49653\nIHJlY2tvbmluZw== 49654\nY2hhaXJz 49655\nT0dS 49656\nIFNlbmVnYWw= 49657\nIDE4NjI= 49658\ncmVsZXZhbnQ= 49659\nIMKv 49660\nIHBoYXJtYWNpZXM= 49661\nIEdlcmFs 49662\ndmllcg== 49663\nWWFu 49664\nT1JQRw== 49665\nIHJhYmlk 49666\nYmVuZGluZw== 49667\nIFVOSVRFRA== 49668\nIDQ2NQ== 49669\nQXNzZW1ibHk= 49670\nIHdlZXA= 49671\nIGJlaGVzdA== 49672\nIE1vdGhlcnM= 49673\nIEphY2U= 49674\naGlk 49675\nIHdoaXJsd2luZA== 49676\nIFVOSVZFUlM= 49677\nIHV0b3BpYW4= 49678\nIGtpZG5hcA== 49679\nUGhpbGlwcA== 49680\nS2lu 49681\nODkz 49682\nIGxpdmVzdHJlYW0= 49683\nIE1JU1M= 49684\nIHN1YnZlcnNpdmU= 49685\nIFRlY2huaXF1ZXM= 49686\nIEpVU1RJQ0U= 49687\nIEJBU0U= 49688\nIDM4Nw== 49689\nIGFzc2FpbGFudHM= 49690\nIEhhcmRjb3Jl 49691\nIHNwcmlua2xlZA== 49692\nIFBzZQ== 49693\n6Zo= 49694\ncHJpbnRlZA== 49695\nIEhhdQ== 49696\nT1JHRQ== 49697\nIFRPVVI= 49698\nIGxhY2Vk 49699\nIGl0Y2g= 49700\nR2l2aW5n 49701\nIHBvcnRlZA== 49702\nNzgx 49703\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 49704\nYnJlZWRpbmc= 49705\nIGxvZ2dlcg== 49706\nIEhPTA== 49707\naW5uaWU= 49708\nRmlyc3RseQ== 49709\nIGVtYnJ5b25pYw== 49710\nIGRlbGVnYXRlZA== 49711\ncGFp 49712\nT0lM 49713\nIGNlbnRyYWxseQ== 49714\nIFJ4 49715\nIFNjb3V0aW5n 49716\nRHV0Y2g= 49717\nIGhlcmVkaXRhcnk= 49718\nIENydWlzZXI= 49719\nc2F0 49720\nNTI5 49721\nIE1hcnJpb3R0 49722\nb3RoZXJtYWw= 49723\nIHByb2hpYml0aW9ucw== 49724\nRWFybg== 49725\nIFN0YWI= 49726\nIENvbGxlZ2Vz 49727\nIEJlbGllZg== 49728\nc3RyZXRjaGVk 49729\nIExI 49730\nIEVudGl0eUl0ZW0= 49731\nQ0lB 49732\nIHVucmVt 49733\nIGxhdXJlYXRl 49734\nIGRlbm9taW5hdGlvbnM= 49735\nc3VtbWFyeQ== 49736\naGxlcg== 49737\nU3BlY3Q= 49738\nIEtsYXVz 49739\nIEJlYW5z 49740\nIGluc3Vy 49741\nIFBBWA== 49742\nIGZpZWxkZXI= 49743\nIFZldA== 49744\nIFNwYXJyb3c= 49745\nemll 49746\nIFNR 49747\nIE1vbmRheXM= 49748\nIE9mZmxpbmU= 49749\nIExlcm5lcg== 49750\nIEV4dGVuc2lvbnM= 49751\nSXJlbGFuZA== 49752\nIHBhdHJvbmFnZQ== 49753\nIGNvbnRyYXN0ZWQ= 49754\nIE1hbmlh 49755\naGlydA== 49756\nTW9zY293 49757\nIGNvbmRlbW5z 49758\nIEFuZ2U= 49759\nIGNvbXBvc2luZw== 49760\nIFBlcGU= 49761\nIFBhZGRvY2s= 49762\nIGhldGVyb2dlbmVpdHk= 49763\nIGlkZW9sb2dpY2FsbHk= 49764\nIGZpc2hlcw== 49765\nIGN1cnNpbmc= 49766\nIFJ1dGhlcmZvcmQ= 49767\nIEZsb2F0aW5n 49768\nIEFtZWxpYQ== 49769\nVGVh 49770\nU3lub3BzaXM= 49771\nIHN0dW50cw== 49772\nIGJlYWQ= 49773\nIHN0b2NraW5n 49774\nIE1JTEw= 49775\nb2Jvb2s= 49776\nbWFzc2l2ZQ== 49777\nXDw= 49778\nIGh1bXA= 49779\nIFByZWZlcmVuY2Vz 49780\nRW5naW5lRGVidWc= 49781\nZ2Vpc3Q= 49782\nIE5pZXRv 49783\nb21ldmVy 49784\naXNoeQ== 49785\nZXZhbHVhdGU= 49786\nY29sb25pYWw= 49787\nQWx0ZXJuYXRpdmU= 49788\nIEdvUHJv 49789\nIFZvcnRleA== 49790\nIE5FVFdPUks= 49791\nYW5za3k= 49792\nU2VjdXJl 49793\nIFRocnVzdA== 49794\nU25ha2U= 49795\nIHBhcmNlbHM= 49796\nIHNhbXVyYWk= 49797\nIGFjdHJlc3Nlcw== 49798\nTmFw 49799\nTUY= 49800\naWZlcmF0aW9u 49801\nQmVlcg== 49802\nNTIz 49803\nIElseQ== 49804\nb2ludG1lbnQ= 49805\nUGluZw== 49806\nIHN0cmlwZWQ= 49807\nIE1lbGxvbg== 49808\nb3NzZXNzaW9u 49809\nIG5ldXRyb24= 49810\nZW5kaXVt 49811\nIGFwaA== 49812\nIEZsYXZvcmluZw== 49813\nIDM4Mw== 49814\nIHJlc3BvbnNpdmVuZXNz 49815\nIEppbmRhbA== 49816\nIEhpdGNoY29jaw== 49817\nRGVudmVy 49818\nIERSQUdPTg== 49819\nc21hbnNoaXA= 49820\nIER1cGw= 49821\nIHNseQ== 49822\nIHdlYmNhbQ== 49823\nIFR3YWlu 49824\nIERhcmxpbmc= 49825\naWxpYXRl 49826\nY29uc3VtZXI= 49827\nRElU 49828\nIG5hbWVzYWtl 49829\nIHVub3J0aG9kb3g= 49830\nIGZ1bmVy 49831\nIFBMb1M= 49832\nIENPTlRST0w= 49833\nb3p5Zw== 49834\nb2dsb2Jpbg== 49835\nRkFDRQ== 49836\nRVJH 49837\nIERpYQ== 49838\nIEZpZXN0YQ== 49839\nY2VsZQ== 49840\nMDM0 49841\nIGVuY2xhdmU= 49842\n4pas4pas 49843\nb25lbWVudA== 49844\nYWxpc3Q= 49845\nTWFuZA== 49846\nIGhvbWVncm93bg== 49847\nIEZhbmN5 49848\nIGNvbmNlcHRpb25z 49849\nIENvbnRhaW5z 49850\ndXJlZW4= 49851\nIHJlaXRlcmF0ZQ== 49852\nIG1lYWdlcg== 49853\nIGluc3RhbGxtZW50cw== 49854\nU3Bhd24= 49855\nNjI3 49856\nIHBob3RvYw== 49857\nIENhYnJlcmE= 49858\nIFJvc2VudGhhbA== 49859\nIExhbnNpbmc= 49860\naXNuZXI= 49861\nIGludmVzdHM= 49862\nIFVGT3M= 49863\nRVhQ 49864\nSGFyZHdhcmU= 49865\nIHRyYWdpY2FsbHk= 49866\nIGNvbmNlZGVz 49867\naWVmdA== 49868\nY2hhbQ== 49869\nYm9yZ2g= 49870\nIFNjaHI= 49871\nIE1lbGFuaWU= 49872\nIEhveQ== 49873\nIHZpc2l0YXRpb24= 49874\nIGlkaW9zeW5jcg== 49875\nIGZyYWN0aW9ucw== 49876\nIGZvcmVza2lu 49877\nb2Jvcw== 49878\nIHBvYWNoaW5n 49879\nIFZJRVc= 49880\nIHN0aW11bGF0ZXM= 49881\nIEdvcms= 49882\nY2Fub24= 49883\nTUlD 49884\nIE5lbWVzaXM= 49885\nIEluZHJh 49886\nIERNVg== 49887\nIDUyOQ== 49888\nIGluc3BlY3Rpbmc= 49889\nIGdyYW5kbWE= 49890\nIFdoZWRvbg== 49891\nIFNoYW50 49892\nIFB1cmc= 49893\naWthbg== 49894\nIFRlZw== 49895\nIENMUg== 49896\nemFj 49897\nVmljdG9yaWE= 49898\nIFZlcmlmeQ== 49899\naW9uaWNz 49900\nIHBhcnR5aW5n 49901\nIE1vdQ== 49902\nY29sb3Vy 49903\nIHRlc3RpbW9uaWVz 49904\nbGF0aW9ucw== 49905\nIHByZXNzdXJpbmc= 49906\naGlybw== 49907\nYWNlcnM= 49908\nIGZpZA== 49909\nYW5nbGVy 49910\nIENTSQ== 49911\nIGhlcmVhZnRlcg== 49912\nIGRpc3NpZGVudHM= 49913\ncmVwb3J0aW5n 49914\naXBoYW55 49915\nY2hldg== 49916\nIHNvbGl0dWRl 49917\nIGxvYmU= 49918\nIGluZGlz 49919\nIGNyZWRlbnRpYWw= 49920\ncmVjZW50 49921\nYWR1bHQ= 49922\nIE5pcnZhbmE= 49923\nIEZyYW5jaGlzZQ== 49924\nTGF5ZXI= 49925\nSHlw 49926\nIEJlcmtzaGlyZQ== 49927\nIHdpbGxz 49928\ndGlm 49929\nIHRvdGVt 49930\nIEp1ZGFo 49931\ncmVwYWly 49932\nSW5zdGFudA== 49933\nNTQ4 49934\nIGVtYmFzc2llcw== 49935\nIGJvdHRsZW5lY2s= 49936\nIGJvdW50 49937\nIHR5cGV3 49938\nIEFsdmlu 49939\namluZw== 49940\naW1pbGFy 49941\nUnVzaA== 49942\nIGJyaW0= 49943\nIEhFTFA= 49944\nQWlt 49945\nXSc= 49946\nIHBhc3NpdmVseQ== 49947\nIGJvdW5kZWQ= 49948\nIFJhdGVk 49949\nIGNyaW1pbmFsaXR5 49950\nIGJpb21hcms= 49951\nIGRpc3BhdGNoZXI= 49952\nIFRvd2FyZHM= 49953\nICsrKw== 49954\ncmlnaHRlb3Vz 49955\nZnJvZw== 49956\nIFBhbmM= 49957\nQ2FydGVy 49958\nMDMy 49959\n5qmf 49960\nIHVsdHJhdmlvbGV0 49961\nIExpY2Vuc2Vk 49962\nIFRhdGE= 49963\nIEJsZXNzaW5n 49964\nIEdBTQ== 49965\nIGNoZW1pY2FsbHk= 49966\nIFNlYWY= 49967\nIFJFTEU= 49968\nIE1lcmNlbmFyeQ== 49969\nY2FwaXRhbGlzdA== 49970\nIGZvcm11bGF0aW9ucw== 49971\nIGFubmloaWxhdGlvbg== 49972\nIFZlcmI= 49973\nIEFyZ29u 49974\nIHVubG9hZGVk 49975\nIG1vcnBoZWQ= 49976\nIGNvbnF1ZXJpbmc= 49977\nYmFja2Vy 49978\nSUVMRA== 49979\nIHRoZWZ0cw== 49980\nIGZyb250cnVubmVy 49981\nIFJveWFsZQ== 49982\nIEZ1bmRhbWVudGFs 49983\nZWxpZ2h0 49984\nQ2hpcA== 49985\nbmVjZXNzYXJ5 49986\nYXlu 49987\nIFNsaXA= 49988\nIDQ0OA== 49989\nY2VybmVk 49990\nUGF1c2U= 49991\nIHNob2NraW5nbHk= 49992\nIEFCVg== 49993\nIGNvbXBvc3VyZQ== 49994\nNzMz 49995\nIE1vdG9yc3BvcnQ= 49996\nYWhpbWU= 49997\nTXVycmF5 49998\nTWFjaA== 49999\nIGdyaWRz 50000\nIGRlYmlhbg== 50001\nIGZ1cnRoZXJtb3Jl 50002\nIGRleHRlcml0eQ== 50003\nIENvbGxlY3Rpb25z 50004\nb3Nsb3Y= 50005\naWxhZ2U= 50006\nYmo= 50007\nIE1vbnRlbmVn 50008\nIHN0cnV0Q29ubmVjdG9y 50009\nIG1hc3NhY3Jlcw== 50010\nIGJyaWVmcw== 50011\nZmV0Y2hlZA== 50012\ndXZpYW4= 50013\nb2xpdGlvbg== 50014\nRmFpbHVyZQ== 50015\nZW1vbmlj 50016\nIGZsYXJlZA== 50017\nIGNsYWltYW50 50018\nIGN1cmVz 50019\nIGdpdmVhd2F5cw== 50020\nIFN1YnN0YW5jZQ== 50021\nYWxpb25z 50022\nIGNyaW5nZQ== 50023\nIEt1bA== 50024\nIGFyaXN0b2NyYWN5 50025\nIFVsc3Rlcg== 50026\nb2xhdGVk 50027\naG91c2luZw== 50028\nIE1JUw== 50029\nIGdsYXJlZA== 50030\nIFdpbGhlbG0= 50031\nbmVlZHM= 50032\nbGFtYmRh 50033\nYnVpbGRlcnM= 50034\nIFZJUw== 50035\nIHJhZGlhdG9y 50036\nIEdob3N0YnVzdGVycw== 50037\nIDQzNg== 50038\nYWN0dWFs 50039\nIGhlcmRz 50040\nw6dh 50041\nd2F0Y2hpbmc= 50042\nIGNvdW50ZXJpbmc= 50043\nQ2hhcmdl 50044\nIGNoYXJyZWQ= 50045\nIHdhcmhlYWRz 50046\nIGlvZGluZQ== 50047\nIE1hY3k= 50048\nMDQx 50049\nIGRlcGFydHVyZXM= 50050\nIFNpbnM= 50051\nIGR5ZWQ= 50052\nIENvbmNlcHRz 50053\nZ2Fkbw== 50054\nNzEz 50055\nIHF1b3RhdGlvbnM= 50056\nIGdpc3Q= 50057\nIENocmlzdHk= 50058\nIGFudGlnZW4= 50059\nIEhlbXA= 50060\nIERyYXdu 50061\nIEJhcmc= 50062\nZXp2b3Vz 50063\nIHBhdGVybml0eQ== 50064\nIGFyZHU= 50065\nIEFuY2hvcmFnZQ== 50066\nIFJpaw== 50067\nIG92ZXJsb2FkZWQ= 50068\nIFVzZXJuYW1l 50069\nIFRhbW15 50070\nIE5hdQ== 50071\nIENlbGx1bGFy 50072\nIHdhbmluZw== 50073\nIHJvZGVudA== 50074\nIFdvcmNlc3Rlcg== 50075\naWx0cw== 50076\nIFRhZA== 50077\nIGR3ZWxsaW5ncw== 50078\nIGJ1bGxpc2g= 50079\nNDMx 50080\nIHJldGFsaWF0ZQ== 50081\nIG1pZ3JhaW5l 50082\nIENoZXZyb24= 50083\nQ0hFQ0s= 50084\nIGRvbmtleQ== 50085\nY3JpbQ== 50086\nU1BB 50087\nIEFuYWxvZw== 50088\nIG1hcnF1ZWU= 50089\nIEhhYXM= 50090\nQmly 50091\nIEdERFI= 50092\nIERvd25sb2Fkcw== 50093\nIHdpbGxwb3dlcg== 50094\nIEZvcnRo 50095\nIFJlY29yZGVk 50096\nIGltcG9zc2liaWxpdHk= 50097\nIExvZ2dlZA== 50098\nIEZyYW5rcw== 50099\nIFJhdHQ= 50100\naW5pdGlvbnM= 50101\nIGNsZWFuZXJz 50102\nIHNvcmVseQ== 50103\nIGZsaWNrZXJpbmc= 50104\nIEV4YW1pbmF0aW9u 50105\nY2F0Y2hpbmc= 50106\nYWxsb3dlZW4= 50107\nTXNn 50108\nIGR1bm5v 50109\nRmE= 50110\nIGR5c3Bo 50111\nY3Jhenk= 50112\nLicnLg== 50113\nIG1haW5saW5l 50114\nIGNz 50115\nIHB0cg== 50116\nIFdhbGx5 50117\naWd1bg== 50118\nOTUx 50119\nIEJpZ2Zvb3Q= 50120\nZmlnaHRz 50121\nIHJldHJpZXZpbmc= 50122\nSnI= 50123\nIGR1cGxpY2F0aW9u 50124\nIEV4cGxhbg== 50125\nIHJlbGF0aW9uYWw= 50126\nIHF1YWludA== 50127\nIGJpc2N1aXRz 50128\nIGFkbw== 50129\nIHNodWRkZXI= 50130\nIGFudGlkb3Rl 50131\nYmxvb2RlZA== 50132\na3No 50133\nIHNhdWNlcw== 50134\nIHJlaW52ZXN0 50135\nIGRpc3BlbnNhcnk= 50136\nIERpdmVy 50137\nIDkwMDA= 50138\nc3R1ZGVudA== 50139\nIGluc2VwYXI= 50140\nZXNjYXA= 50141\nIHRvZGRsZXJz 50142\nIEdQSU8= 50143\nIEFzc2lnbm1lbnQ= 50144\naGVhZGVycw== 50145\nIGxhY2tsdXN0ZXI= 50146\nIGFiYWNr 50147\nOTU2 50148\nIHRvb2xiYXI= 50149\nNzQ1 50150\nIG91c3Q= 50151\nIGNvbnRlbXBsYXRpb24= 50152\nIFBSRVNJREVOVA== 50153\nIDQ1OA== 50154\nPT09PT09 50155\nIGd1YXJhbnRlZWluZw== 50156\nIEhlaXN0 50157\nIENhbm5lcw== 50158\nmb0= 50159\nIGNvbGxhYm9yYXRvcg== 50160\nIEFtcA== 50161\nIGdvdQ== 50162\nIFNIQUxM 50163\nc3Rvcmllcw== 50164\nNzgz 50165\nIG1vYmlsaXplZA== 50166\nIGJyb29k 50167\nIExV 50168\nIPCfkQ== 50169\nIHJlZmlu 50170\nIEFudGhyb3BvbG9neQ== 50171\ndmluZA== 50172\naWxsaQ== 50173\nIHdhcnJhbnRpZXM= 50174\nIEJhYmVs 50175\nIHN3YXRo 50176\nIGNhY2hlcw== 50177\nIGFudGFnb25pc3Rz 50178\nYXJ0aWZhY3Rz 50179\nIGhvdGx5 50180\nIFN0YXJ0cw== 50181\nIEfDtg== 50182\nemFn 50183\nISEhISE= 50184\nIHNjb3VyZ2U= 50185\nIGNvbnNwaXJpbmc= 50186\ncnVpdHM= 50187\ncmV2ZXJzZQ== 50188\nIFNoZWVu 50189\nIEplc3VpdA== 50190\nIEdpb3Zhbm5p 50191\nYWRpZXM= 50192\nIGJ1dHRvY2tz 50193\nZWFyY2hlcg== 50194\nYWNhbg== 50195\nIHZvbGxleWJhbGw= 50196\nIHNocm91ZGVk 50197\nIHNjb3JlYm9hcmQ= 50198\nYmF0cw== 50199\nIElQTQ== 50200\nIGFzc2Vz 50201\nIGRlcmVndWxhdGlvbg== 50202\nIFRlbGVncmFt 50203\nIFJlYm9vdA== 50204\nIDcwMDA= 50205\nIENhbmFyeQ== 50206\nIGtlcm5lbHM= 50207\nIEZyYW7Dp29pcw== 50208\nIER1ZmY= 50209\nIFBvbg== 50210\nIExlaWNh 50211\nIEdhcm1pbg== 50212\nIG9ycGhhbnM= 50213\nIENsYXVkaWE= 50214\nIGNhbGVuZGFycw== 50215\nIExlaWxhbg== 50216\nZW50bw== 50217\nUm9ja2V0 50218\nIGJydW5jaA== 50219\nIEhhd2tpbmc= 50220\nYWluZXJz 50221\nIHNlbnNpYmlsaXRpZXM= 50222\nIGtX 50223\nIEthbmQ= 50224\nIHJlY2xhaW1lZA== 50225\nIGludGVyZXN0aW5nbHk= 50226\n16k= 50227\ncm9teQ== 50228\nSk0= 50229\nIEVuaGFuY2VtZW50 50230\nYnVzaA== 50231\nU2tpcA== 50232\nIHJhcHBlcnM= 50233\nIGdhemluZw== 50234\ncGVkaWE= 50235\nYXRobG9u 50236\nUmV2b2x1dGlvbg== 50237\nIHNuaXBlcnM= 50238\nIHJldmVydGVk 50239\nIGNvbmdsb21lcmF0ZQ== 50240\nVGVycnk= 50241\nNzk0 50242\nIGhhcnNoZXI= 50243\nIGRlc29sYXRl 50244\nIEhpdG1hbg== 50245\nQ29tbWlzc2lvbg== 50246\nICgv 50247\n4oCmLiI= 50248\nQ29tcGFy 50249\nIGFtcGxpZmljYXRpb24= 50250\nb21pbmF0ZWQ= 50251\nIHJlZ3Jlc3M= 50252\nIENvbGxpZGVy 50253\nIGluZm9ybWFudHM= 50254\nIGdhemVk 50255\n"
  },
  {
    "path": "xinference/thirdparty/whisper/assets/multilingual.tiktoken",
    "content": "IQ== 0\nIg== 1\nIw== 2\nJA== 3\nJQ== 4\nJg== 5\nJw== 6\nKA== 7\nKQ== 8\nKg== 9\nKw== 10\nLA== 11\nLQ== 12\nLg== 13\nLw== 14\nMA== 15\nMQ== 16\nMg== 17\nMw== 18\nNA== 19\nNQ== 20\nNg== 21\nNw== 22\nOA== 23\nOQ== 24\nOg== 25\nOw== 26\nPA== 27\nPQ== 28\nPg== 29\nPw== 30\nQA== 31\nQQ== 32\nQg== 33\nQw== 34\nRA== 35\nRQ== 36\nRg== 37\nRw== 38\nSA== 39\nSQ== 40\nSg== 41\nSw== 42\nTA== 43\nTQ== 44\nTg== 45\nTw== 46\nUA== 47\nUQ== 48\nUg== 49\nUw== 50\nVA== 51\nVQ== 52\nVg== 53\nVw== 54\nWA== 55\nWQ== 56\nWg== 57\nWw== 58\nXA== 59\nXQ== 60\nXg== 61\nXw== 62\nYA== 63\nYQ== 64\nYg== 65\nYw== 66\nZA== 67\nZQ== 68\nZg== 69\nZw== 70\naA== 71\naQ== 72\nag== 73\naw== 74\nbA== 75\nbQ== 76\nbg== 77\nbw== 78\ncA== 79\ncQ== 80\ncg== 81\ncw== 82\ndA== 83\ndQ== 84\ndg== 85\ndw== 86\neA== 87\neQ== 88\neg== 89\new== 90\nfA== 91\nfQ== 92\nfg== 93\noQ== 94\nog== 95\now== 96\npA== 97\npQ== 98\npg== 99\npw== 100\nqA== 101\nqQ== 102\nqg== 103\nqw== 104\nrA== 105\nrg== 106\nrw== 107\nsA== 108\nsQ== 109\nsg== 110\nsw== 111\ntA== 112\ntQ== 113\ntg== 114\ntw== 115\nuA== 116\nuQ== 117\nug== 118\nuw== 119\nvA== 120\nvQ== 121\nvg== 122\nvw== 123\nwA== 124\nwQ== 125\nwg== 126\nww== 127\nxA== 128\nxQ== 129\nxg== 130\nxw== 131\nyA== 132\nyQ== 133\nyg== 134\nyw== 135\nzA== 136\nzQ== 137\nzg== 138\nzw== 139\n0A== 140\n0Q== 141\n0g== 142\n0w== 143\n1A== 144\n1Q== 145\n1g== 146\n1w== 147\n2A== 148\n2Q== 149\n2g== 150\n2w== 151\n3A== 152\n3Q== 153\n3g== 154\n3w== 155\n4A== 156\n4Q== 157\n4g== 158\n4w== 159\n5A== 160\n5Q== 161\n5g== 162\n5w== 163\n6A== 164\n6Q== 165\n6g== 166\n6w== 167\n7A== 168\n7Q== 169\n7g== 170\n7w== 171\n8A== 172\n8Q== 173\n8g== 174\n8w== 175\n9A== 176\n9Q== 177\n9g== 178\n9w== 179\n+A== 180\n+Q== 181\n+g== 182\n+w== 183\n/A== 184\n/Q== 185\n/g== 186\n/w== 187\nAA== 188\nAQ== 189\nAg== 190\nAw== 191\nBA== 192\nBQ== 193\nBg== 194\nBw== 195\nCA== 196\nCQ== 197\nCg== 198\nCw== 199\nDA== 200\nDQ== 201\nDg== 202\nDw== 203\nEA== 204\nEQ== 205\nEg== 206\nEw== 207\nFA== 208\nFQ== 209\nFg== 210\nFw== 211\nGA== 212\nGQ== 213\nGg== 214\nGw== 215\nHA== 216\nHQ== 217\nHg== 218\nHw== 219\nIA== 220\nfw== 221\ngA== 222\ngQ== 223\ngg== 224\ngw== 225\nhA== 226\nhQ== 227\nhg== 228\nhw== 229\niA== 230\niQ== 231\nig== 232\niw== 233\njA== 234\njQ== 235\njg== 236\njw== 237\nkA== 238\nkQ== 239\nkg== 240\nkw== 241\nlA== 242\nlQ== 243\nlg== 244\nlw== 245\nmA== 246\nmQ== 247\nmg== 248\nmw== 249\nnA== 250\nnQ== 251\nng== 252\nnw== 253\noA== 254\nrQ== 255\nIHQ= 256\nIGE= 257\nIHRo 258\naW4= 259\nZXI= 260\nIHc= 261\nIHM= 262\nb3U= 263\nIHRoZQ== 264\ncmU= 265\nb24= 266\nYXQ= 267\nZW4= 268\nIGM= 269\naXQ= 270\naXM= 271\nIGI= 272\nbmQ= 273\nIGQ= 274\nIG0= 275\nIGg= 276\nIG8= 277\naW5n 278\nZXM= 279\nIHA= 280\nIHRv 281\nYW4= 282\nIGY= 283\nb3I= 284\nbGw= 285\nIEk= 286\nIGw= 287\nIHk= 288\nYXI= 289\nIGc= 290\nIHlvdQ== 291\nZWQ= 292\nIGFuZA== 293\nIGlu 294\nIG9m 295\nYXM= 296\nIG4= 297\nb20= 298\naWM= 299\nIHRoYXQ= 300\ndXM= 301\nZXQ= 302\ndmU= 303\nYWw= 304\nb3c= 305\nbGU= 306\nIGlz 307\nIGU= 308\nIGl0 309\nb3Q= 310\nJ3M= 311\nIGJl 312\naW9u 313\nIFQ= 314\nIHdo 315\nIEE= 316\nZW50 317\nIFM= 318\nIHJl 319\nYXk= 320\nIHdl 321\nIG9u 322\nZXJl 323\nIGhh 324\ndXQ= 325\nYWM= 326\naWQ= 327\naWc= 328\nb3M= 329\na2U= 330\ndmVy 331\naW0= 332\nINA= 333\nIFRo 334\nYW0= 335\nYWxs 336\nIGZvcg== 337\nZWw= 338\nY2g= 339\ncm8= 340\nIHRoaXM= 341\nIHN0 342\nIFc= 343\nIHU= 344\nYWQ= 345\nb3V0 346\naXI= 347\nbGQ= 348\nY3Q= 349\nIGs= 350\naWY= 351\nIGdv 352\nLi4= 353\n0L4= 354\naXRo 355\nbHk= 356\naHQ= 357\ncXU= 358\nIC0= 359\nIGRv 360\nIGo= 361\nIGhhdmU= 362\nIEI= 363\nIGFu 364\nIHdpdGg= 365\nIGFyZQ== 366\nIHI= 367\nIGRl 368\nIHNl 369\nIHNv 370\nIHY= 371\nc3Q= 372\naWxs 373\ndXI= 374\nIGxp 375\nIE0= 376\nZXN0 377\nb2Q= 378\nYWxseQ== 379\nJ3Q= 380\ndXN0 381\nIGFz 382\nIEM= 383\nY2U= 384\nIG1l 385\n0LA= 386\n0LU= 387\naWw= 388\nIEg= 389\nIHdhcw== 390\ndGVy 391\ndGg= 392\nIGNhbg== 393\nYW50 394\nIGNvbQ== 395\nb3Vy 396\naWdodA== 397\nIFk= 398\nYXRpb24= 399\nIEFuZA== 400\nb2w= 401\nIHNo 402\n0YI= 403\nb3A= 404\nc2U= 405\nIG5vdA== 406\nIFNv 407\nIG5l 408\ndW4= 409\nIGFi 410\nIGxpa2U= 411\nIGF0 412\nIEQ= 413\naWU= 414\nIGhl 415\nIGNvbg== 416\nIGNo 417\nb3Jl 418\nIGFs 419\nIG9y 420\nIHF1 421\nIE8= 422\nb21l 423\ncmE= 424\ndWw= 425\nIE4= 426\ncHA= 427\nIHlvdXI= 428\nb3VsZA== 429\nIFA= 430\nIGZy 431\nZ2U= 432\nZXJz 433\nJ3Jl 434\n0Lg= 435\nIHRoZXk= 436\nIHdoYXQ= 437\ndXNl 438\nIGFsbA== 439\nIFRoZQ== 440\nIEw= 441\nZXNz 442\nZW0= 443\nIGtu 444\nIGp1c3Q= 445\nYXJ0 446\nIHBybw== 447\ndmVyeQ== 448\ndW0= 449\nIGxv 450\nIOw= 451\nIG15 452\nb2s= 453\nIGV4 454\nYWI= 455\nIHRoZXJl 456\nIGJ1dA== 457\nIGtub3c= 458\nIHN1 459\nIEc= 460\n0YE= 461\nIEU= 462\nIG1h 463\n0L7Q 464\nIGVu 465\nIGFib3V0 466\nIEl0 467\naXN0 468\nIHdvcg== 469\ncmk= 470\naW5k 471\nIG9uZQ== 472\nYXRl 473\nYW5k 474\naW5r 475\nIGxl 476\nb3J0 477\nJ20= 478\nIEY= 479\naWNo 480\n0YA= 481\naWRl 482\nIGdldA== 483\nIG91dA== 484\nLi4u 485\nIHdpbGw= 486\n44E= 487\naXZl 488\n0L0= 489\nIGZyb20= 490\nYWlu 491\nIFdl 492\nIHVw 493\ncGU= 494\ncmVz 495\nY2E= 496\nIFI= 497\nIGlm 498\nIHBs 499\nIGRvbg== 500\nYWNr 501\nIDE= 502\nICI= 503\nIHRy 504\nIHVz 505\nIFdo 506\naXR5 507\nIEo= 508\nIFlvdQ== 509\nIGhlcmU= 510\naGVy 511\nIHNvbWU= 512\nb3Vn 513\nYWs= 514\nYXJk 515\nIGdvaW5n 516\nIHVu 517\nbWVudA== 518\nIHRoaW5r 519\nIHBl 520\nZW5k 521\nICg= 522\nY2F1c2U= 523\nIHRpbQ== 524\nYXN0 525\nw6k= 526\nIG91cg== 527\nIHdhbnQ= 528\nYW1l 529\naWVz 530\nIOs= 531\ndWQ= 532\naW5l 533\nIHJlYWxseQ== 534\nIHRl 535\nIHNlZQ== 536\nY2k= 537\nIGJ5 538\nc28= 539\ndXJl 540\nb3Nl 541\nIFs= 542\nYXJl 543\nIG1vcmU= 544\nYWg= 545\nb25l 546\nY2s= 547\nb3BsZQ== 548\n0LDQ 549\nIHRoZW4= 550\nIHRoaW5n 551\nIHRoZW0= 552\ndmVu 553\nb3VuZA== 554\nb3N0 555\nb25n 556\nZWN0 557\nIHJpZ2h0 558\nYWc= 559\nIGludA== 560\nIHBlb3BsZQ== 561\nIHdoZW4= 562\nb3Vz 563\ncGw= 564\nIHRpbWU= 565\nIGlt 566\nIHdobw== 567\nIDI= 568\nYXA= 569\nIGJlY2F1c2U= 570\naGluZw== 571\nIG5v 572\naWNl 573\nIGxvb2s= 574\nIGhhcw== 575\nIHdvdWxk 576\nIGhvdw== 577\nYWN0 578\nIGZl 579\nbnQ= 580\nb3VnaA== 581\nIHBy 582\nIEJ1dA== 583\nIHNheQ== 584\n0YM= 585\nIG5vdw== 586\nIG1hbg== 587\nIHZlcnk= 588\nIHdvcms= 589\naXo= 590\nIEs= 591\naXY= 592\naXR0 593\nIGFy 594\nZXA= 595\nIGNs 596\nIHdoaWNo 597\nIGNv 598\nYW5z 599\nJ3Zl 600\nIHNh 601\nZmY= 602\nJ2xs 603\nIGFueQ== 604\nIGFjdA== 605\nIHll 606\nYmVy 607\nYWNo 608\nYWdl 609\ncGVy 610\nIGFsc28= 611\nZmVy 612\nIHRoZXNl 613\nIGFk 614\n0LXQ 615\ndGhlcg== 616\nYWNl 617\naWNr 618\nYWtl 619\ncmVhdA== 620\naXJl 621\ndWU= 622\nIGFn 623\nIFU= 624\ndWNo 625\naW9ucw== 626\ncnk= 627\nMDA= 628\nbmE= 629\nIGRpZA== 630\nIHF1ZQ== 631\nIGhhZA== 632\nIGV2ZXJ5 633\nIEhl 634\nIGxh 635\nIHdheQ== 636\nIHNw 637\nYmxl 638\nIFRoaXM= 639\nYXNz 640\nIHRoZWly 641\naXRl 642\nIG5lZWQ= 643\nIHBhcnQ= 644\nIHdlcmU= 645\nIGJhY2s= 646\naXA= 647\nb3du 648\nb21ldA== 649\nYmU= 650\nYXNl 651\nIG1ha2U= 652\naXJzdA== 653\naWE= 654\nZW5jZQ== 655\nYW5n 656\nYW5r 657\nIGdvdA== 658\nIHByZQ== 659\nIGNvbnQ= 660\nIG90aGVy 661\ncHQ= 662\nIFRoYXQ= 663\nb2c= 664\nIGdvb2Q= 665\nIGludG8= 666\nYWxr 667\nIGJlZW4= 668\nIGFt 669\nIG92ZXI= 670\ndWFsbHk= 671\nIOI= 672\n7J0= 673\nIHVuZA== 674\naGU= 675\nd2F5 676\nIGdy 677\n0Yw= 678\nIGRpZg== 679\nIHBlcg== 680\n0Y8= 681\nIElu 682\nIHR3 683\nb25k 684\nYXJz 685\naW50 686\nb3Jt 687\nIGxvdA== 688\nIHdoZXJl 689\nIMM= 690\nIFY= 691\nIHNvbWV0 692\n0Ls= 693\nZW5z 694\nIGd1 695\nIGFj 696\ndWc= 697\n0Ys= 698\nxLE= 699\nIGZpcnN0 700\ncmVl 701\nIGhpcw== 702\naXR0bGU= 703\nIGltcA== 704\nIG1v 705\nYXY= 706\nIGxpdHRsZQ== 707\nIFdoYXQ= 708\nIG11Y2g= 709\nIHo= 710\nIOo= 711\nYWJsZQ== 712\nINC/ 713\nIHBv 714\nIGNvbXA= 715\nbmU= 716\nIGRpcw== 717\nIGxldA== 718\nYW5jZQ== 719\nIGhlcg== 720\nIHRoaW5ncw== 721\nIHN0YXJ0 722\ndWx0 723\nIGFwcA== 724\nIHJlcw== 725\nIGZv 726\nIGNvdWxk 727\nIGludGVy 728\nIHRob3Nl 729\nIGRlcw== 730\nIHdlbGw= 731\nIHR3bw== 732\nIGtpbmQ= 733\neHQ= 734\ncmVzcw== 735\nZWx5 736\nw6Q= 737\nIGJy 738\nIHRocg== 739\nINCy 740\nIGk= 741\naXNo 742\nIGRpZmZlcg== 743\nIHJv 744\nIFN0 745\nIHNvbWV0aGluZw== 746\nIHRha2U= 747\nIGJv 748\neXM= 749\nIHNoZQ== 750\nIHRhbGs= 751\nbG8= 752\n0Yc= 753\nIGV2ZW4= 754\n0Lo= 755\n44A= 756\nINC9 757\nIGJ1 758\nIElm 759\nIGRvd24= 760\nIENo 761\nYWRl 762\nYXRpb25z 763\nIHVzZQ== 764\nb3Jk 765\nIG9mZg== 766\nIGFjdHVhbGx5 767\nIHNwZQ== 768\nZHU= 769\nYXRlZA== 770\nYXRlcg== 771\nb3Nz 772\nbmluZw== 773\nw7w= 774\nIGRvZXM= 775\nINGB 776\nIG5ldw== 777\nIGJldA== 778\ndmVs 779\nY2Vzcw== 780\ncGxl 781\nIGhhcHA= 782\ndGluZw== 783\nb25uYQ== 784\nIGVz 785\nIGRheQ== 786\nIG9ubHk= 787\naWdu 788\na2F5 789\nc2Vs 790\nZW50cw== 791\nb3VudA== 792\naWxk 793\naWxl 794\nIHNj 795\nIGhpbQ== 796\nIGFnYWlu 797\ndmluZw== 798\nIGdvbm5h 799\nIGNvbW0= 800\nIGhlbA== 801\nb3RoZXI= 802\nIGtl 803\naWNhbA== 804\nIDM= 805\nIGVs 806\nIHRocm91Z2g= 807\nIGNvbWU= 808\nYXJr 809\nZGF5 810\naWVy 811\nw7M= 812\nIHRoYW4= 813\nIFRoZXk= 814\nIG1heQ== 815\nIHNlcg== 816\n7ZU= 817\nIGNhbGw= 818\nIGRpZmZlcmVudA== 819\nIHNob3VsZA== 820\nIFRoZXJl 821\nYXJ5 822\nIE5vdw== 823\n44I= 824\ndGhpbmc= 825\nd2U= 826\nb3J5 827\nZnRlcg== 828\nIHB1dA== 829\nb3Jz 830\naWFs 831\n64s= 832\nIHVuZGVy 833\nIGluYw== 834\nIFll 835\ndWI= 836\nZm9ybQ== 837\nIHZpZGU= 838\n4Lg= 839\ndmVycw== 840\nIGZlZWw= 841\nw6E= 842\nb2R5 843\nZnQ= 844\nZm9yZQ== 845\nIGVt 846\nZ2V0 847\nIHNhaWQ= 848\naXRpb24= 849\nIHJlYw== 850\naW91cw== 851\nYXRjaA== 852\nIHRyeQ== 853\nIGhlbHA= 854\nIHNob3c= 855\n0LQ= 856\nIGJpdA== 857\ndWxs 858\n0LI= 859\n0YLQvg== 860\nZ3I= 861\nIHBsYXk= 862\naWZl 863\nYWls 864\nIFllYWg= 865\nIHF1ZXN0 866\nIG1hbnk= 867\nIHBlcnM= 868\nIGdyZWF0 869\nw60= 870\nIGVzdA== 871\nbmc= 872\nIOKZ 873\ndHk= 874\nbGE= 875\nIE9o 876\nINc= 877\n4K4= 878\nIEJl 879\nYWR5 880\nIG1vc3Q= 881\nY3Rpb24= 882\nIE5v 883\nIGRvaW5n 884\nIGJlaW5n 885\nIHRvbw== 886\nY2Vz 887\nIGJs 888\nLiI= 889\nIHJlbQ== 890\naXNz 891\nb25z 892\nPj4= 893\ncnU= 894\nd24= 895\nb250 896\naWI= 897\nZWxs 898\nIHNt 899\nb3Ro 900\ndWFs 901\nID4+ 902\nIHBo 903\nbGVz 904\nb2M= 905\nZnVs 906\nIHNlYw== 907\naXNl 908\nIGFkZA== 909\naWdo 910\nZXJ0 911\nIHNhbWU= 912\n4oA= 913\nIG1lYW4= 914\nIGZpbmQ= 915\nZWs= 916\nIGVuZA== 917\nLS0= 918\n0Lw= 919\nIHN0aWxs 920\nYXo= 921\nICc= 922\nIG1pbg== 923\nIHllYXJz 924\ndXJu 925\nIGFyb3VuZA== 926\nc2VsZg== 927\nIHdy 928\nYnM= 929\nb3VnaHQ= 930\nIOKZqg== 931\nIGZs 932\nYW5nZQ== 933\nIGFmdGVy 934\nIHBvaW50 935\nbWVy 936\ndmVk 937\nIGxvbmc= 938\nb3k= 939\n5Lg= 940\nIGNy 941\nd2F5cw== 942\nIHN5 943\nIHRyYQ== 944\nIDIw 945\nYXZl 946\nIGNoZQ== 947\nIGVudA== 948\nIGJlZm9yZQ== 949\ncGg= 950\nIGF0dA== 951\naWFu 952\naWx5 953\nIHBlcnNvbg== 954\nIGJpZw== 955\nIHNjaA== 956\nIHJlYWw= 957\nIG5leHQ= 958\nIGxvdmU= 959\nIHZpZGVv 960\nIExldA== 961\nIGZpbg== 962\nIG1haw== 963\naWJsZQ== 964\nIHRvZGF5 965\nZXJt 966\nIEFs 967\nb3dlcg== 968\nYW5u 969\naXg= 970\nIHBhcg== 971\nIHN0dWQ= 972\nw7Y= 973\nIGltcG9ydA== 974\ndGU= 975\nIGdpdmU= 976\ndmVz 977\nIGRpZQ== 978\nIGRlYw== 979\nIHRlbGw= 980\nINC6 981\n0YHRgg== 982\nIHdoeQ== 983\naWNhbGx5 984\naWN0 985\ncmVk 986\nIGJhcw== 987\nIHN1cmU= 988\nIGJlbA== 989\nYXRpbmc= 990\nIHRhaw== 991\nIHNldA== 992\nIGxpZmU= 993\nIGRpZG4= 994\n2Kc= 995\nb2I= 996\ndW5k 997\nYXRo 998\nIG9w 999\nINC+ 1000\nYWl0 1001\nIHdvcmxk 1002\nIHN1cHA= 1003\naW8= 1004\nIGNvdXI= 1005\nINC4 1006\nd2FyZA== 1007\n0LXQvQ== 1008\nIGFsd2F5cw== 1009\ndXA= 1010\nIGhhbmQ= 1011\nIEhvdw== 1012\nY2lhbA== 1013\nIGNvbnM= 1014\nINE= 1015\nIGluZA== 1016\nIDQ= 1017\nIEFz 1018\nIGZ1bg== 1019\namVjdA== 1020\nIGltcG9ydGFudA== 1021\nIHN1cg== 1022\nZXc= 1023\nYXRlcw== 1024\nIDU= 1025\nIGRp 1026\nIG1hZGU= 1027\nIGlucw== 1028\nIGFzaw== 1029\nIGV0 1030\nIG51bQ== 1031\nIGNhcg== 1032\nIE9rYXk= 1033\nIHNpbQ== 1034\naWs= 1035\nIGxhc3Q= 1036\nIEdv 1037\nIG11cw== 1038\nIHJlbA== 1039\ndWxhcg== 1040\ntOw= 1041\nIFdlbGw= 1042\ncGVjdA== 1043\nIFRoYW5r 1044\nIHRocmVl 1045\nw6M= 1046\n44M= 1047\nIGludg== 1048\nIGdlbg== 1049\nbGlj 1050\nIGhhcHBlbg== 1051\n64o= 1052\naWVu 1053\nZXZlcg== 1054\n0L7Qsg== 1055\nIHN0cg== 1056\nIEFsbA== 1057\nIGluc3Q= 1058\nIOKA 1059\nIGRlZg== 1060\nIHNs 1061\nIG1pZ2h0 1062\ndW5n 1063\nIHllYXI= 1064\nIG93bg== 1065\nIGtlZXA= 1066\nYm9keQ== 1067\nZGVy 1068\nINGC 1069\nINC0 1070\nIGFub3RoZXI= 1071\nIG1vZA== 1072\nIGV2 1073\nIGd1eXM= 1074\nIGFibGU= 1075\nw6Nv 1076\ncXVl 1077\naWRlbnQ= 1078\nIFllcw== 1079\nIGl0cw== 1080\nIHBsYWNl 1081\nIHByb2R1 1082\nYXJu 1083\nINC8 1084\nIHJlcA== 1085\nIGV4cGVy 1086\nIGZhbQ== 1087\naXRpZXM= 1088\naWZpYw== 1089\nIGhpZ2g= 1090\naWVk 1091\nb29s 1092\naWV3 1093\n0LXRgg== 1094\ncmVu 1095\nIGRvbmU= 1096\nIC4uLg== 1097\n64qU 1098\nc3RlbQ== 1099\nIFNl 1100\nIGJldHRlcg== 1101\nY29tZQ== 1102\nIGRlbA== 1103\nIHR5 1104\nIHVt 1105\nIGhv 1106\nIEFu 1107\nIG1vbg== 1108\naW5ncw== 1109\nIHNr 1110\nIG9i 1111\nY29t 1112\nYmxlbQ== 1113\nb3Bl 1114\nc3RhbmQ= 1115\nJ2Q= 1116\nbWVudHM= 1117\nIGVsZQ== 1118\nIElz 1119\nIGRh 1120\nIHJlZw== 1121\nbGVhc2U= 1122\naWtl 1123\nYWxz 1124\naXpl 1125\n6rA= 1126\nIGNhcmU= 1127\nIG5ldmVy 1128\n7J20 1129\nZXNl 1130\nIG1ldA== 1131\nb2xvZw== 1132\nIFdoZW4= 1133\ndWNr 1134\n0LXRgA== 1135\nIMOp 1136\nIGRhdA== 1137\nw6c= 1138\nIGV4YW0= 1139\naWxpdHk= 1140\nIGRldA== 1141\nY3Jp 1142\nIHVzZWQ= 1143\nIERv 1144\nIHRyYW5z 1145\nZWc= 1146\ndGVu 1147\n0Y4= 1148\nY3Vz 1149\nIHNlY29uZA== 1150\nIGJlc3Q= 1151\nIGhhcmQ= 1152\nIGlkZQ== 1153\nIHByb2JsZW0= 1154\n6rM= 1155\nIFVu 1156\n0YU= 1157\nIM4= 1158\nIHdhdGNo 1159\nIFNo 1160\nYXR0ZXI= 1161\nIHByZXQ= 1162\nIGRlcg== 1163\nIGNvdXJzZQ== 1164\nxZ8= 1165\nYXRpdmU= 1166\naWNz 1167\nIHF1ZXN0aW9u 1168\ndXRl 1169\n7Jc= 1170\nIEZvcg== 1171\nYXRoZXI= 1172\nIGNvbA== 1173\naWVuZA== 1174\nIO0= 1175\nIFo= 1176\nIGRvZXNu 1177\nYXJjaA== 1178\nIGludGVyZXN0 1179\nIHBvbA== 1180\nIGNvcg== 1181\naWVuY2U= 1182\nIHByZXM= 1183\nIGVhY2g= 1184\nIHN5c3RlbQ== 1185\nIGZhY3Q= 1186\naWVs 1187\nYWJseQ== 1188\nIGVy 1189\nIHJ1bg== 1190\nIOyd 1191\nIHRvcA== 1192\nbmVy 1193\nIHRob3VnaHQ= 1194\nIGVhcw== 1195\naWVudA== 1196\nIGNyZQ== 1197\n0Yg= 1198\nIGNvbW11bg== 1199\neWU= 1200\ncmVhZHk= 1201\nbGxvdw== 1202\nIGV2ZXJ5dGhpbmc= 1203\nb21t 1204\nIG1lZA== 1205\nmpQ= 1206\nIGNvdW50 1207\naXRz 1208\nIGNvbXBs 1209\naGlw 1210\n2YQ= 1211\nb29r 1212\nIHRvZ2V0 1213\nIHRvZ2V0aGVy 1214\nYW1w 1215\nIGdhbWU= 1216\nIGFscmVhZHk= 1217\n0LDQuw== 1218\nIGNhbGxlZA== 1219\nYWxl 1220\nxYI= 1221\nIE15 1222\nIHVuZGVyc3RhbmQ= 1223\nIGRy 1224\nIG1vbQ== 1225\naXRlZA== 1226\n0L7Quw== 1227\nIHVzaW5n 1228\nenk= 1229\nIG51bWJlcg== 1230\n44CB 1231\nY2Vk 1232\nIGNsZQ== 1233\n0L3Qvg== 1234\n64uk 1235\naW5jZQ== 1236\nIGxvb2tpbmc= 1237\nIHByZXR0eQ== 1238\nIHByb2I= 1239\nIFNoZQ== 1240\nIHZl 1241\nIGdldHRpbmc= 1242\nIHdlZWs= 1243\nIGVmZg== 1244\ndWZm 1245\nYWly 1246\ndWVz 1247\nZXJu 1248\nIFE= 1249\nb3Vw 1250\nZW50aW9u 1251\nIHNpZGU= 1252\n0L7QvA== 1253\nIGZvcm0= 1254\nIGJ1cw== 1255\nIGFzcw== 1256\nIGVk 1257\nYXNvbg== 1258\nd2Vlbg== 1259\n4oCm 1260\nIHR1cm4= 1261\nIGN1cg== 1262\nIGNvbGw= 1263\nIGRpcmU= 1264\nIEdvZA== 1265\nIDEw 1266\nIGVxdQ== 1267\nINCx 1268\nIG9wZW4= 1269\nIHN1Y2g= 1270\naXJk 1271\n0LDQug== 1272\nIGVhcg== 1273\nxJk= 1274\nZ2Fu 1275\nIHBhcnRpYw== 1276\nIGZyaWVuZA== 1277\nIGV4cA== 1278\nIGV4dA== 1279\nIGhvbWU= 1280\nIHdhdGVy 1281\nIE9u 1282\n0YLRjA== 1283\nb3Jr 1284\nINC/0YA= 1285\nIG1vdmU= 1286\nbmVzcw== 1287\nZW5zZQ== 1288\naG8= 1289\nIGNoYXI= 1290\nY28= 1291\naW5z 1292\nIGJvdGg= 1293\nIDE5 1294\nIGdyYQ== 1295\nIGJldHdlZW4= 1296\n4bs= 1297\nIOyV 1298\nYXNo 1299\nIFJl 1300\nYWk= 1301\nYWx0aA== 1302\ndXJlcw== 1303\nZW1iZXI= 1304\nIGF2 1305\nIHZlcg== 1306\nw6o= 1307\nb25leQ== 1308\nIHRoYW5r 1309\nIG1heWJl 1310\ndWM= 1311\naW1l 1312\n6rOg 1313\nIGF3YXk= 1314\nIG5hbWU= 1315\nb3VzZQ== 1316\nIGFjYw== 1317\nIG11c2lj 1318\nIGNoYW5nZQ== 1319\nIHBhc3M= 1320\nZ2Vy 1321\nIGJ1aWxk 1322\nIHZhbA== 1323\naW5lc3M= 1324\nYW55 1325\nIGZldw== 1326\ntOs= 1327\ndGE= 1328\nIGxpc3Q= 1329\nw6U= 1330\nIG9sZA== 1331\nIOye 1332\nIHNvcnQ= 1333\nIG1lbQ== 1334\nIGNh 1335\nY2VwdA== 1336\nIGdlbmVy 1337\nIHllYWg= 1338\nIHdoaWxl 1339\nIGFueXRoaW5n 1340\ncmlj 1341\nZ3JhbQ== 1342\nIGVpbg== 1343\nY3k= 1344\ndXJpbmc= 1345\nIERl 1346\nIHBvd2Vy 1347\nIGNvbWluZw== 1348\nIHdvcmQ= 1349\nIC0t 1350\nIGJlbGll 1351\nIGZvdW5k 1352\ndG8= 1353\n0L8= 1354\nIG1lYW5z 1355\nIGluZm9ybQ== 1356\nINg= 1357\nINGH 1358\nIHNtYWxs 1359\nMDAw 1360\nIGNhbWU= 1361\nIO2V 1362\nd2g= 1363\nIHdvcmtpbmc= 1364\nIGV4YW1wbGU= 1365\nIHBvcw== 1366\nIGRlcA== 1367\n6rI= 1368\n5Lo= 1369\nb3Rl 1370\nIGRlbQ== 1371\n7Kc= 1372\ndHM= 1373\nIHZhcg== 1374\nYXV0 1375\nIHRyaQ== 1376\nY2hu 1377\nIGhlYWQ= 1378\nIHdob2xl 1379\n15k= 1380\nemU= 1381\nIHRyeWluZw== 1382\nIHRlbQ== 1383\nIGNvdQ== 1384\nZXRz 1385\nIDY= 1386\nIGZpbA== 1387\ndmVsb3A= 1388\nIGNhc2U= 1389\n4K8= 1390\nIHByb2JhYmx5 1391\nIG9rYXk= 1392\nIHBsYW4= 1393\nIHNpdA== 1394\nIHNjaG9vbA== 1395\nIFRoZW4= 1396\nuOs= 1397\nbWU= 1398\nIHByb2Nlc3M= 1399\nIGZhcg== 1400\nIHJlYWQ= 1401\nIHBvc3M= 1402\nIGJyZQ== 1403\nIHNvbA== 1404\naWNodA== 1405\nIHN1cHBvcnQ= 1406\nIFRv 1407\nZXJ0YWlu 1408\nIHN0YXJ0ZWQ= 1409\nIGNhcA== 1410\nIGxlZnQ= 1411\nIGRhdGE= 1412\nIHRpbWVz 1413\n0LXQuw== 1414\nIHdhbnRlZA== 1415\n0LDQvQ== 1416\nIHRhbGtpbmc= 1417\nIGlzdA== 1418\nIGhhdmluZw== 1419\ndW1w 1420\nIGNvbnRpbg== 1421\nIHN1Yg== 1422\nINC3 1423\ncHI= 1424\n64uI 1425\naW5h 1426\nxbw= 1427\nIGNyZWF0 1428\nb2Rl 1429\n15U= 1430\n5pg= 1431\nISE= 1432\nIHRlcm0= 1433\naXNt 1434\n0L7QtA== 1435\nIEJlY2F1c2U= 1436\nIHdlbnQ= 1437\naWRlcg== 1438\nIHByb3Y= 1439\nIGNoaWxk 1440\nIGRlbg== 1441\nIGxpZ2h0 1442\nYnI= 1443\ns9C+ 1444\nb2g= 1445\nIGJvb2s= 1446\nINk= 1447\ndXRpb24= 1448\nIEp1c3Q= 1449\nZW5l 1450\nIGZvdXI= 1451\nIHZpcw== 1452\n6rCA 1453\nIGhvcGU= 1454\nIG1ha2luZw== 1455\nIExl 1456\n7JU= 1457\nIG9wcA== 1458\nYXU= 1459\nIG1vbmV5 1460\nIHByb2dyYW0= 1461\nw6g= 1462\nIHN0YW5k 1463\nSU4= 1464\nIHNpZ24= 1465\nIGxlYXJu 1466\nw6A= 1467\nIERvbg== 1468\nIHRlYW0= 1469\nINC90LA= 1470\nbHVk 1471\nIHJlc3Q= 1472\naWNlcw== 1473\n5pw= 1474\nINGA 1475\nIGF1dA== 1476\nIGxlYWQ= 1477\nYXRpb25hbA== 1478\nZGU= 1479\nZ3k= 1480\nIG5pY2U= 1481\nIGRhcw== 1482\nIGRpc3Q= 1483\nIGh1bQ== 1484\nIE9uZQ== 1485\n5og= 1486\nIGNvbWVz 1487\nIGpv 1488\nIGNlbnQ= 1489\nIGV4cGw= 1490\nIG1hcms= 1491\ncmVlbg== 1492\nbGVk 1493\nZ2lu 1494\n7JqU 1495\nIGxldmVs 1496\nIGNvbmY= 1497\ndXNo 1498\nIGRldmVsb3A= 1499\nIHRlc3Q= 1500\nZW5n 1501\ndmlvdXM= 1502\nYXR1cmU= 1503\n0LXQvA== 1504\ncmV0 1505\nIGpl 1506\nIHN0dWZm 1507\nIGNsYXNz 1508\nb3dz 1509\nIOq3 1510\nIHNp 1511\nIGxlcw== 1512\ncm9w 1513\n55o= 1514\nIHBvcg== 1515\nIHdhcg== 1516\n7JeQ 1517\nIGV2ZXJ5b25l 1518\nIGdl 1519\nIGNoZWNr 1520\nb3R0 1521\nIHNpbmc= 1522\nIGFydA== 1523\nIGZvbGxvdw== 1524\nIDIwMQ== 1525\nIEZy 1526\nYWlz 1527\n7JY= 1528\nzrE= 1529\n5bA= 1530\nIMOg 1531\naW1lcw== 1532\nIHJldA== 1533\nIGNoYW5n 1534\nIHB1Yg== 1535\nIGluZg== 1536\nIHRlY2hu 1537\nYWRh 1538\naXZlcw== 1539\nIGJlaA== 1540\n5piv 1541\nIGxvb2tz 1542\n44CC 1543\n0Lc= 1544\nIFdoeQ== 1545\n55qE 1546\nIGVub3VnaA== 1547\nIGJyYQ== 1548\naXRjaA== 1549\n5Ls= 1550\nIGFkdg== 1551\n0LE= 1552\nIHdpdGhvdXQ= 1553\nd2Vy 1554\nbWVyaWM= 1555\nZGVu 1556\nIGNvbXBsZXQ= 1557\nIGlkZWE= 1558\ndGVycw== 1559\nb2Nr 1560\nIGRlZmlu 1561\nIGV2ZXI= 1562\nIGds 1563\nIG9uY2U= 1564\nIGJyaW5n 1565\nIHNheWluZw== 1566\nIGFucw== 1567\nIGhlYXI= 1568\nbmVjdA== 1569\nIGxlc3M= 1570\nZ28= 1571\ncmVhbQ== 1572\nYWRv 1573\n7J4= 1574\nIG1pbmQ= 1575\nZW50ZQ== 1576\nIGZ1bGw= 1577\nIGJhZA== 1578\nIHdvbQ== 1579\nIHNvbWVvbmU= 1580\nIGR1 1581\nIHdvbg== 1582\nIGNvbnRybw== 1583\nb3J0dW4= 1584\nIGhlYWx0aA== 1585\nIGNobw== 1586\nIEFy 1587\nIGNvbmM= 1588\nIGluZm9ybWF0aW9u 1589\nIHN0b3A= 1590\nYXR0 1591\nYXRlbHk= 1592\n5L0= 1593\nIGdyb3Vw 1594\nINGD 1595\nIHF1aXRl 1596\nIHJlc3A= 1597\nRVI= 1598\ndWdodA== 1599\n6rg= 1600\nbWFu 1601\naXplZA== 1602\nIEJy 1603\nIHJlbWVtYmVy 1604\nIGZhbWlseQ== 1605\nIGJ1c2luZXNz 1606\nYXc= 1607\nIHNwZWM= 1608\nIGF1 1609\nIE9y 1610\nxIU= 1611\nIHNlZW4= 1612\nIGxhcg== 1613\nIDc= 1614\nZ2c= 1615\nYmVycw== 1616\nIGRyYQ== 1617\nIG1vbnRo 1618\nIHNheXM= 1619\nIGlzcw== 1620\nIGxpdmU= 1621\nIGxpbmU= 1622\nIG1vbWVudA== 1623\nIGV4Yw== 1624\nZWxz 1625\nIHNvdW5k 1626\nIGNvb2w= 1627\nIGxvYw== 1628\nIGNlcnRhaW4= 1629\nIGRyaQ== 1630\n0L7Rgg== 1631\nYW1lcw== 1632\nIG11c3Q= 1633\nbnk= 1634\n0LjRgg== 1635\nIGtpZA== 1636\nIGluY2x1ZA== 1637\n7J2E 1638\nYXRvcg== 1639\nxJ8= 1640\naGE= 1641\nYXJlZA== 1642\nIHNlZW0= 1643\n0Lk= 1644\n7IQ= 1645\nIGVsc2U= 1646\nIOyg 1647\naXJs 1648\nIDg= 1649\nIHZv 1650\nIHF1ZXN0aW9ucw== 1651\naW5lcw== 1652\nZWU= 1653\n5oiR 1654\nw7xy 1655\nIEFtZXJpYw== 1656\nIHN0b3J5 1657\nIHNlcnY= 1658\ndmVybg== 1659\nYWdlcw== 1660\nbGFuZA== 1661\nIOKAkw== 1662\nZXJh 1663\nIENhbg== 1664\nIHBvcA== 1665\nZXRoZXI= 1666\nIG5h 1667\nIG9yZGVy 1668\nIG1ha2Vz 1669\nIHNpbmNl 1670\nY29u 1671\nY3Rvcg== 1672\nIHRob3VnaA== 1673\nIHByb2R1Y3Q= 1674\n0LvQuA== 1675\nIGxlZw== 1676\nIG1lZXQ= 1677\nYWxm 1678\n0YHRjw== 1679\ndW5jaA== 1680\naXRlcg== 1681\nb3Zl 1682\n15XX 1683\naWV0 1684\n0LDQvA== 1685\naXRhbA== 1686\nIHN1cGVy 1687\nbGluZw== 1688\nIHBheQ== 1689\nIHBhcmE= 1690\nIGpvYg== 1691\nIEhlcmU= 1692\nIHN3 1693\na3M= 1694\ncHRpb24= 1695\nbWE= 1696\nIGJlbGlldmU= 1697\nrOs= 1698\nIHdhaXQ= 1699\n0L7QuQ== 1700\nIHVudA== 1701\nIHF1aWNr 1702\naHI= 1703\nINGN 1704\nIFBybw== 1705\nIG1lbg== 1706\n4Lk= 1707\nIGRheXM= 1708\nIGdvZXM= 1709\nIHNwZWFr 1710\nIEF0 1711\nZW1lbnQ= 1712\nIG1pc3M= 1713\nIGF3 1714\nIGRlc2lnbg== 1715\nIHByb2plY3Q= 1716\n0L7RgA== 1717\naWo= 1718\nYW50cw== 1719\nYXRz 1720\nIENocg== 1721\nIDk= 1722\nIGN1dA== 1723\nIHJlcXU= 1724\nINC90LU= 1725\nIE5vdA== 1726\nYXN0ZXI= 1727\nIG1pbGw= 1728\nIHBhcnRpY3VsYXI= 1729\nIHBpZQ== 1730\nIHN0dWRlbnRz 1731\nIGZpdmU= 1732\nb3Vu 1733\nIE5l 1734\nIGdp 1735\nIHBhcw== 1736\nIGZyZWU= 1737\nIFNw 1738\nbGljaA== 1739\nIHByb2Y= 1740\nIGVuZw== 1741\nIHByb3Q= 1742\nIExpa2U= 1743\nb3NlZA== 1744\nIGNvbm5lY3Q= 1745\nYXBw 1746\nIOun 1747\naXRpbmc= 1748\nIGJsbw== 1749\nIGxvcw== 1750\naXN0cw== 1751\nIGV4cGVyaWVuY2U= 1752\ncmVudA== 1753\nIHN0YXk= 1754\nIGZvb2Q= 1755\ndG9u 1756\ncnVjdA== 1757\nIGhpc3Q= 1758\ndmlldw== 1759\naW5pbmc= 1760\nbW9zdA== 1761\naXZlcnM= 1762\nYm8= 1763\n44GE 1764\nIFRy 1765\nZ2Vu 1766\nIHBsZWFzZQ== 1767\nIGNvbW11bml0eQ== 1768\nIGNl 1769\nQU4= 1770\nbm8= 1771\nIGJvZHk= 1772\nIGhvdXI= 1773\nIHZlcnM= 1774\n4bo= 1775\nY2Vy 1776\nIOqw 1777\nIHJlYXNvbg== 1778\nIFJpZ2h0 1779\nIGxhdGVy 1780\nz4Q= 1781\nIGhvdXNl 1782\nIFg= 1783\n0L7QvQ== 1784\nIHN0YXRl 1785\nZmlj 1786\n5aQ= 1787\nxZs= 1788\naWVsZA== 1789\nIHByaQ== 1790\nIHBhc3Q= 1791\nIHdhbGs= 1792\nb2xvZ3k= 1793\nZXJpbmc= 1794\nYW5uYQ== 1795\nIHRlcg== 1796\nIGhvbGQ= 1797\nIG9yZ2Fu 1798\nYmVu 1799\nzr8= 1800\nw7Nu 1801\nIGVmZmVjdA== 1802\nIHlvdXJzZWxm 1803\nIHBsdXM= 1804\nYWo= 1805\nYW5kbw== 1806\ndXJhbA== 1807\nIHJvb20= 1808\nbGVjdA== 1809\n6rKM 1810\nPyI= 1811\nc2lkZQ== 1812\nIGJlY29tZQ== 1813\n0YY= 1814\nIMI= 1815\nb29k 1816\nIGNvbnN0 1817\nIG5pZ2h0 1818\ndXRlcw== 1819\n0LY= 1820\nIGJyZWFr 1821\nIHBhaW4= 1822\nIHN0ZXA= 1823\naXJlZA== 1824\nIG5vdGhpbmc= 1825\nIHVudGls 1826\n0ZY= 1827\n0LDQsg== 1828\n2Yo= 1829\nIGR1cmluZw== 1830\n7KeA 1831\nbGVzcw== 1832\nb2xs 1833\n0L3Riw== 1834\nzrk= 1835\nZmVjdA== 1836\naXZlcg== 1837\nj4Q= 1838\naXRoZXI= 1839\neWluZw== 1840\nIGJlZ2lu 1841\n15nX 1842\naXZpZA== 1843\nIMOn 1844\nIHNhbA== 1845\nIHRh 1846\nIHBvdA== 1847\nICQ= 1848\nIG1hcg== 1849\nIGNsZWFy 1850\nIGZhY2U= 1851\nIGdyb3c= 1852\nICo= 1853\nIGluc2lkZQ== 1854\nIGZyaWVuZHM= 1855\nIGxlYXZl 1856\nZW5u 1857\nIGVhc3k= 1858\nIGFyZWE= 1859\nYWxpdHk= 1860\nb3Vk 1861\nIGVhdA== 1862\n2YY= 1863\nIHB1cg== 1864\nb3Ju 1865\nIHNhdw== 1866\nIGFuc3dlcg== 1867\nIGZyb250 1868\nIGJlYXV0 1869\nvOs= 1870\nIG1hdHRlcg== 1871\nIHNvbg== 1872\nIE5ldw== 1873\nIHJlc3VsdA== 1874\naWRlcw== 1875\nY2hl 1876\nIGZ1dA== 1877\ncHM= 1878\nIGZvY3Vz 1879\nIGludGVyZXN0aW5n 1880\n5aU= 1881\nIGFw 1882\nIi4= 1883\nIGNyZWF0ZQ== 1884\n0L7RgQ== 1885\nIHByZXNz 1886\ncm9zcw== 1887\nIHBpY2s= 1888\nbGluZQ== 1889\nIHRvb2s= 1890\nIE1heQ== 1891\ncm93 1892\nIGljaA== 1893\nmOs= 1894\nIHJlZg== 1895\nIG1vcg== 1896\ncmFjdA== 1897\nYXJlbnQ= 1898\nQVI= 1899\nIGV4YWN0 1900\nIHNwYWNl 1901\nd29yaw== 1902\n0L3QuA== 1903\nIGJpcg== 1904\nIGRldg== 1905\n0LM= 1906\nIHRvbGQ= 1907\nIHB1YmxpYw== 1908\nY2lhbGx5 1909\nIHZpZXc= 1910\nIEhleQ== 1911\nbWVk 1912\nbGxv 1913\nY2M= 1914\nIGZhYw== 1915\nIGNvdXBsZQ== 1916\nIGhlYXJ0 1917\nbGVy 1918\nIHJlYWR5 1919\nIGFsbW9zdA== 1920\nYXJpbmc= 1921\nIGhhbGY= 1922\nIE1l 1923\nYXZvcg== 1924\naXF1ZQ== 1925\nIGNoYXJhYw== 1926\nIHByYWN0 1927\nT04= 1928\nYW5l 1929\nIGls 1930\n0L3QsA== 1931\nIHZp 1932\nbGlzaA== 1933\naGVhZA== 1934\nIGxlYXN0 1935\nIGJhc2ljYWxseQ== 1936\nYXNlZA== 1937\ncmlnaHQ= 1938\nIHlldA== 1939\nIHRha2luZw== 1940\nIGNvdW50cnk= 1941\nIHdpbg== 1942\nIGlzbg== 1943\nIHBvc3NpYmxl 1944\nIGNhbQ== 1945\nIGluY3Jl 1946\nIHBhdA== 1947\nIHdhbm5h 1948\nIGNvbnNpZGVy 1949\nIGFicw== 1950\nIHdpdGhpbg== 1951\nIGh1bWFu 1952\nIHRoaW5raW5n 1953\nIG9o 1954\noZw= 1955\nIHF1aQ== 1956\nYXNlcw== 1957\nIDA= 1958\naXRlbHk= 1959\n5LiN 1960\nIGtpbGw= 1961\nIG1pbA== 1962\nIGludmVzdA== 1963\naXN0ZXI= 1964\nIHN1Yw== 1965\naW9uYWw= 1966\nZWxm 1967\nIHdoZXRoZXI= 1968\nIGNvbnRyb2w= 1969\nIGFnYWluc3Q= 1970\nb3Rz 1971\n64uI64uk 1972\naW9y 1973\nIHByZXNlbnQ= 1974\nINin 1975\nIHdhdGNoaW5n 1976\ndWJl 1977\nZXJ2 1978\nIG5pY2h0 1979\nIGdvdmVybg== 1980\nIFRoZXNl 1981\nIDo= 1982\ndWl0 1983\ndWdo 1984\nIHdvcmtz 1985\nb28= 1986\nIHdpcg== 1987\nIGFpcg== 1988\nIFRl 1989\n0LDQtw== 1990\naXNpb24= 1991\nd2hlcmU= 1992\nIHRvdA== 1993\nam95 1994\n7Is= 1995\nIHZvbA== 1996\nINC1 1997\nIGNsb3Nl 1998\nIEFk 1999\n0Yk= 2000\naW5lZA== 2001\nIHVuYQ== 2002\nIOq3uOs= 2003\nsOs= 2004\nb3JyeQ== 2005\nIGJybw== 2006\nIGZpbG0= 2007\naWZ0 2008\nMjA= 2009\nIHR5cGU= 2010\nIGhhcHBlbmVk 2011\nIEFt 2012\nIGdpcmw= 2013\nIEFyZQ== 2014\nd2FyZHM= 2015\nIHBvdXI= 2016\nIGNvbG9y 2017\nZWx0 2018\n0LDRgQ== 2019\nIHNlbnNl 2020\nbGV4 2021\nIFdpdGg= 2022\ndXNz 2023\ncmli 2024\nIHJlc2U= 2025\nIG5vcm0= 2026\nIGZ1dHVyZQ== 2027\nIGRlYWw= 2028\nZW5kaW5n 2029\nZXk= 2030\nIHg= 2031\nZXJv 2032\nIENs 2033\ndWs= 2034\nIHdoYXRldmVy 2035\nc2VsdmVz 2036\nIHlvdW5n 2037\n7Io= 2038\nIE1hcg== 2039\nIENocmlzdA== 2040\nIGd1ZXNz 2041\nIHBlcmZvcm0= 2042\nIGVuZXI= 2043\ncm9u 2044\nIGhpdA== 2045\nIHdvbmQ= 2046\nIGRpcmVjdA== 2047\nIEV2ZXJ5 2048\nIG9mdGVu 2049\nIGZh 2050\nIGFsb25n 2051\nIGNsaWNr 2052\nIExvb2s= 2053\nIHNpdHU= 2054\nIGhhcHB5 2055\nZWFk 2056\nIGFnbw== 2057\nIGVuYw== 2058\nIG15c2VsZg== 2059\nIGNvdmVy 2060\n0L7QsQ== 2061\nIG1pZA== 2062\nIGNvc3Q= 2063\nIHRlbg== 2064\nIFNjaA== 2065\nIGV4cGVjdA== 2066\nIHdhc24= 2067\nIHN0cm9uZw== 2068\naWZ1bA== 2069\nIG9wcG9ydHVu 2070\naW5hbA== 2071\neWxl 2072\nIHNoYXJl 2073\nIHRydWU= 2074\nIGFwcHJv 2075\nIGNoYWxs 2076\nIG1pbnV0ZXM= 2077\nIGNoYW5u 2078\nIOuC 2079\nzrU= 2080\nbGk= 2081\nIG1lc3M= 2082\nb3JpZXM= 2083\ncGVjaWFsbHk= 2084\nIHdyb25n 2085\nIHllcw== 2086\nIOyX 2087\naXJvbg== 2088\nIGFsbG93 2089\nIHN1YnM= 2090\nIGZvcmU= 2091\nIGZpZ2h0 2092\nIHNvY2lhbA== 2093\nIGNyYQ== 2094\nYW5h 2095\nIGFmZg== 2096\nIGVzcw== 2097\nIHdheXM= 2098\nIHNob3J0 2099\nIGZhbGw= 2100\nIGxhdw== 2101\nIFdobw== 2102\nIGVuam95 2103\nIGNhbA== 2104\nIGFjY2Vzcw== 2105\nZmU= 2106\nIG5vbg== 2107\nIGFjcm9zcw== 2108\nZXJ5 2109\ndmlvdXNseQ== 2110\nIEV4 2111\naWRlZA== 2112\nIGxpbms= 2113\nIFBy 2114\nIHRlcm1z 2115\nYWNlcw== 2116\nIGxhbmQ= 2117\nYXppbmc= 2118\nIDE1 2119\nIG11bHQ= 2120\nIHNwZWNpYWw= 2121\n5YA= 2122\naXZpbmc= 2123\n7J2A 2124\nIHR5cA== 2125\nIHN0ZQ== 2126\nIMQ= 2127\nIGZvcndhcmQ= 2128\n5Y8= 2129\nIGZyZQ== 2130\n5aW9 2131\nIHJlc2VhcmNo 2132\n4K+N 2133\n0LDRgg== 2134\nIG1haW4= 2135\nIHJlY29yZA== 2136\nIGh1 2137\nIGRlZmluaXRlbHk= 2138\nIGVpdGhlcg== 2139\nIGxpc3Rlbg== 2140\nIGtleQ== 2141\nIG1hcmtldA== 2142\nINGH0YLQvg== 2143\naXphdGlvbg== 2144\nIHZpZGVvcw== 2145\nIGd1eQ== 2146\nIGZpZw== 2147\nIHN0cmE= 2148\nIFBs 2149\ndWxseQ== 2150\nYW1vcw== 2151\nIG1lbnRpb24= 2152\nIHNvbmc= 2153\nIGludGVybg== 2154\ncmFs 2155\ndXJz 2156\nIGhvbg== 2157\nIHZhbHVl 2158\nIGJhcg== 2159\nY2xl 2160\n0L7Qtg== 2161\nxIc= 2162\nnOs= 2163\nIHp1 2164\n0LjQvA== 2165\n5L2g 2166\nIHNpbmdsZQ== 2167\nIGF1Y2g= 2168\nY3Vzcw== 2169\nIGdldHM= 2170\nIHNvbWV0aW1lcw== 2171\n5b4= 2172\nYW1i 2173\nbW0= 2174\nY2luZw== 2175\nIHBlcmZlY3Q= 2176\nIEJs 2177\nb3V0aA== 2178\n7KA= 2179\nIHNjaQ== 2180\ncGFy 2181\nIHJlZA== 2182\nIHBvc3Q= 2183\nIG1vdA== 2184\nIGVsZWN0 2185\nIEV1 2186\naXRpdmU= 2187\nIFNvbWU= 2188\nIGRlc2NyaQ== 2189\nIGN1cnJlbnQ= 2190\nw6lz 2191\nIHRyZQ== 2192\nIEVu 2193\nIG1pdA== 2194\nRU4= 2195\niOs= 2196\naXVt 2197\nIGhlYXJk 2198\nIHNpbXBsZQ== 2199\nbGFy 2200\nIGV2ZXJ5Ym9keQ== 2201\naWxhcg== 2202\nIG5lZWRz 2203\nIGRpZmZpYw== 2204\nIEdvb2Q= 2205\ndW1lbnQ= 2206\nY2VudA== 2207\nIG9wZXI= 2208\n0LDRgtGM 2209\nZXR5 2210\nIGJsYWNr 2211\nIGdpdmVu 2212\nb25lcw== 2213\nIHdlbA== 2214\n6YA= 2215\nIOyVhA== 2216\nIDMw 2217\nQVQ= 2218\nIHN0YXQ= 2219\nb3VjaA== 2220\nIE1y 2221\n0LDRgA== 2222\nIHNobw== 2223\nIGNvbmQ= 2224\n15Q= 2225\nbXk= 2226\nIGNoaWxkcmVu 2227\nIGV1 2228\n0LXQtA== 2229\n7JWE 2230\ndGVybg== 2231\nIHVo 2232\nIGhhcg== 2233\nIHByb20= 2234\nIHB1bGw= 2235\ncmV3 2236\nIGNvbXBhbnk= 2237\nIGJlYXV0aWZ1bA== 2238\ndXN0b20= 2239\n7ZWY 2240\n0LrQuA== 2241\nIHN0cmU= 2242\nIGFtYXppbmc= 2243\ncmllcw== 2244\nIHN1Y2Nlc3M= 2245\nIG1hY2g= 2246\nbm90 2247\nIGRpc2N1c3M= 2248\nIG5hdA== 2249\npqw= 2250\nIHVuZQ== 2251\nIGRpZmZpY3VsdA== 2252\nIHJpcw== 2253\nzr0= 2254\nIGNhbXA= 2255\nIGJ1eQ== 2256\n5LiA 2257\nIG1hZw== 2258\ncG8= 2259\nIFlvdXI= 2260\nIGJlaGluZA== 2261\naWNh 2262\nxLFu 2263\nIE9L 2264\nIGxhbmc= 2265\nIHdvbWVu 2266\nIGVudg== 2267\nIHJlY2U= 2268\nIGNoYW5uZWw= 2269\naWFsbHk= 2270\ndWxl 2271\nIDEy 2272\ndGhlcnM= 2273\nIGJvdHQ= 2274\nIHJlcG9ydA== 2275\nZW50bHk= 2276\nZnVsbHk= 2277\nVGhl 2278\nIHNlbnQ= 2279\nIGV2ZW50 2280\nIGVuZXJneQ== 2281\nbHQ= 2282\nIHdvcmRz 2283\nYXJy 2284\nZGxl 2285\nIGFoZWFk 2286\nYXJkcw== 2287\n2LE= 2288\n5LqG 2289\nIHRvb2w= 2290\nY29ub20= 2291\n0LXRgQ== 2292\nIGV4YWN0bHk= 2293\nIGZhdm9y 2294\nIGxvdw== 2295\nIHByb3Blcg== 2296\nIOyeiA== 2297\nICE= 2298\nIHJlbGF0aW9ucw== 2299\nIG1hcw== 2300\nIGtpZHM= 2301\nIGVudGlyZQ== 2302\ndWRl 2303\n2YU= 2304\nIFdoZXJl 2305\nIG9uZXM= 2306\nIGNpdHk= 2307\nb2x1dA== 2308\nIHNpeA== 2309\nYWJpbGl0eQ== 2310\nw7Zy 2311\naWxp 2312\nIEVz 2313\nIGhhcHBlbnM= 2314\nYWlucw== 2315\nIG1vZGVs 2316\nIHBpY3Q= 2317\nIGVzcGVjaWFsbHk= 2318\nIDEwMA== 2319\na3Q= 2320\nIHNvb24= 2321\nYnk= 2322\ncm9kdQ== 2323\nIGFubg== 2324\nIHN1YnNjcmk= 2325\nIFF1 2326\nIGF2YWls 2327\naW1lbnQ= 2328\nIHZvYw== 2329\na2E= 2330\nIDIwMA== 2331\nYXBlcg== 2332\nIEluZA== 2333\nIOyn 2334\naG9y 2335\njbA= 2336\nam9y 2337\n0LjQuw== 2338\nIHNxdQ== 2339\nQVU= 2340\nYXJuaW5n 2341\nINCz 2342\nSVM= 2343\nINC7 2344\n0LXQuQ== 2345\neWVz 2346\n5YU= 2347\nINCS 2348\nIG9yaWc= 2349\n0L7Qs9C+ 2350\nIGFza2Vk 2351\naWx0 2352\n0L7Qsw== 2353\nIGNvbnRpbnVl 2354\nIOyY 2355\ncmFt 2356\nIG90aGVycw== 2357\nRVM= 2358\nb2hu 2359\nIGxheQ== 2360\nIGJhc2Vk 2361\nIHB1 2362\nIGFwcGU= 2363\nIGxpbQ== 2364\nIHByb3A= 2365\ngOs= 2366\nbWlu 2367\nIGhvdA== 2368\nIExh 2369\nIGZhc3Q= 2370\nIHByb3RlY3Q= 2371\nIGFtb3VudA== 2372\nIGFxdQ== 2373\nIGZ1bmQ= 2374\nIGN1c3RvbQ== 2375\nIGN1bHQ= 2376\nIGhhbmRz 2377\nIGhhdmVu 2378\nIGF1ZA== 2379\nIG91dHNpZGU= 2380\nIEFmdGVy 2381\nYXBz 2382\nIGFuaW0= 2383\ncGxveQ== 2384\nIGhhdA== 2385\nIEZpcnN0 2386\nIHRyZWF0 2387\nIGVw 2388\nIG1hdGVy 2389\nIGJ1aWxkaW5n 2390\nIOuw 2391\n5ZA= 2392\n7ISc 2393\nemE= 2394\ndWdodGVy 2395\nIFBl 2396\nbmV5 2397\nZXRlcg== 2398\nYXRpYw== 2399\nIGVkdWM= 2400\n6riw 2401\nIG1vdg== 2402\nk6Q= 2403\nYW1h 2404\ncmF0aW9u 2405\nIHNu 2406\n2Yg= 2407\nIHN1bQ== 2408\nIHBob3Q= 2409\nINCd 2410\nIC4= 2411\n5pyJ 2412\nIGZpbmlzaA== 2413\naXR0aW5n 2414\n5a4= 2415\nIGxhcmdl 2416\nIOyW 2417\nIHdoaXRl 2418\nYXJh 2419\nIG1haXM= 2420\nIEhp 2421\nIGRhbQ== 2422\nINin2YQ= 2423\nIGJveA== 2424\nIEhlbGxv 2425\nIHNsZQ== 2426\nIG9wdA== 2427\ncmllZA== 2428\npbw= 2429\nIGFjdGl2 2430\nIG7Do28= 2431\nIENvbQ== 2432\nIHBsYXlpbmc= 2433\nVGg= 2434\nIGF2YWlsYWJsZQ== 2435\nIHBvcnQ= 2436\n5Yg= 2437\nIEFo 2438\nIGxhcw== 2439\nIGVhcmx5 2440\nIHdvbmRlcg== 2441\nsbA= 2442\nIDE4 2443\nY3Vs 2444\nIGZ1bmN0aW9u 2445\nIG1vcm5pbmc= 2446\nbGxl 2447\naWVudHM= 2448\ndXg= 2449\nIGNpcg== 2450\naXRpb25z 2451\nIGRlZXA= 2452\nIHBvbGl0 2453\neW9y 2454\nbXA= 2455\nYWtpbmc= 2456\njOs= 2457\nIE1hbg== 2458\nIG1pbGxpb24= 2459\nIC8= 2460\nIGluZGl2aWQ= 2461\nIHBhbg== 2462\nIGdvdmVybm1lbnQ= 2463\nIHdyaXRl 2464\nIFRvZA== 2465\nYW1lbnQ= 2466\nIM8= 2467\nIHdpbmQ= 2468\nIEVuZw== 2469\nY2hlbg== 2470\nV2g= 2471\n7Jw= 2472\nIGlkZW50 2473\n44Gn 2474\ndmVudA== 2475\ndXJjaA== 2476\nIGh5 2477\nIHlh 2478\nIHRyYWQ= 2479\nIHJlbGF0aW9uc2hpcA== 2480\nw7o= 2481\nIGRvdQ== 2482\nT1I= 2483\nIHN3ZQ== 2484\nIG5lZw== 2485\naW5hdGlvbg== 2486\nIHRleHQ= 2487\naXBw 2488\nIGZpbmU= 2489\nw6Fz 2490\nIERy 2491\nIENvbWU= 2492\nIG1vbnRocw== 2493\nLCI= 2494\n0LXQvdC4 2495\nIGhvdXJz 2496\nIHBvZA== 2497\naXJ0 2498\nIGludm9s 2499\nIGNvbGxlY3Q= 2500\nIGF1Zg== 2501\nIHBh 2502\nIGhpc3Rvcnk= 2503\nbWI= 2504\naWZ5 2505\nID8= 2506\nIGJlbG93 2507\nYXN1cmU= 2508\nYWJ5 2509\nIGxhbmd1 2510\nIGFudA== 2511\nIGNvbWI= 2512\nYXRv 2513\nIGV4aXN0 2514\nIOuL 2515\nIHRha2Vz 2516\nIGNoYXJhY3Rlcg== 2517\nYWZm 2518\nIGZpZWxk 2519\nIGVjb25vbQ== 2520\naWVm 2521\nIHBpZWNl 2522\n5Zw= 2523\nIHJlYWNo 2524\nIOqy 2525\nb255 2526\nIG1hdGVyaWFs 2527\nIGRpZw== 2528\nIHBoeXM= 2529\nIGltcHJv 2530\nIHNpbWlsYXI= 2531\nSUM= 2532\nIG5ldA== 2533\neW4= 2534\nIHBvc2l0aW9u 2535\nw58= 2536\nIGJlbmU= 2537\ncmVhZA== 2538\nIGxlYXJuaW5n 2539\ndW1l 2540\nIGNsZWFu 2541\n0YLQvtGA 2542\nIGNvb2s= 2543\nIHNlZW1z 2544\nIG9s 2545\nIFVT 2546\nIEplcw== 2547\nIOCu 2548\nZW50aWFs 2549\naXZlcnNpdHk= 2550\nYWN5 2551\nINGP 2552\nb2x1dGVseQ== 2553\ncmVjdA== 2554\nIFBsZWFzZQ== 2555\nIHJlcHJlcw== 2556\nIHRvdWNo 2557\nbWVu 2558\nINCw 2559\nacOzbg== 2560\nIFRoYW5rcw== 2561\nIGFuZw== 2562\nIG1ham9y 2563\nIGl0c2VsZg== 2564\naWxscw== 2565\nIiw= 2566\naWFucw== 2567\nIHNjcmVlbg== 2568\nIGhvcg== 2569\nIGtub3du 2570\nIGVudmlyb24= 2571\nIGZpbmFs 2572\nIGZpZ3VyZQ== 2573\nIFR3 2574\nIGV5ZXM= 2575\nIGltYWc= 2576\nIHNlZWluZw== 2577\nIGhhaXI= 2578\ncmVt 2579\nIGFwcGxpYw== 2580\nZW5kcw== 2581\ncHV0 2582\nIG5ld3M= 2583\nIGNvbXBsZXRlbHk= 2584\ndWdocw== 2585\nIGtuZXc= 2586\naWZpZWQ= 2587\nIEpl 2588\nIERpZA== 2589\nIHNpdHVhdGlvbg== 2590\nIGZsbw== 2591\nbXM= 2592\nIHBob25l 2593\nIGJhbGw= 2594\nZG8= 2595\nIHBhcmVudA== 2596\nIHNvcnJ5 2597\ndXJ5 2598\n0LjQvQ== 2599\naXBz 2600\n0LDQtA== 2601\nIGluc3RlYWQ= 2602\nIGh1Z2U= 2603\nIHR1 2604\nIOOB 2605\nIEdy 2606\nIGRldGFpbA== 2607\nINCf 2608\nIGluZGl2aWR1YWw= 2609\nIGZpcmU= 2610\nIGNsb3M= 2611\nIHdlcg== 2612\ndW5l 2613\nIHJ1bm5pbmc= 2614\nIGNvbnZlcnM= 2615\nIHJlY29tbQ== 2616\nIGNvbW8= 2617\nIHNvbWVib2R5 2618\nIEpvaG4= 2619\nIOydtA== 2620\nIE91cg== 2621\ncGxlcw== 2622\nIFBo 2623\nIGFuYWw= 2624\nIDUw 2625\nIG9mZmVy 2626\nIDw= 2627\naXRpb25hbA== 2628\nZ2VzdA== 2629\nIHZvdXM= 2630\nbGV0 2631\naWN5 2632\nIGZlZWxpbmc= 2633\nTEU= 2634\ncm9z 2635\nIHRoaXJk 2636\n0L7Qug== 2637\nIHNlcmllcw== 2638\nIEFueQ== 2639\naXNlZA== 2640\nb2xk 2641\nIGRyYXc= 2642\nIHNlcnZpY2U= 2643\nIGNhbm5vdA== 2644\nYmFs 2645\n44GG 2646\nIGxpdmluZw== 2647\nxLFt 2648\nIGRpZmZlcmVuY2U= 2649\nIG9wcG9ydHVuaXR5 2650\nIG5lYXI= 2651\nb3J0aA== 2652\na2Vu 2653\nIGxvY2Fs 2654\n2Ko= 2655\nIENvbg== 2656\nIG9iamVjdA== 2657\nIGRhc3M= 2658\n44GZ 2659\nkNc= 2660\nIHF1aWNrbHk= 2661\ncmFwaA== 2662\nIGlzc3Vlcw== 2663\n6YCZ 2664\nIEFtZXJpY2Fu 2665\nIHByZXA= 2666\nZW5jZXM= 2667\nIHByb2Zlc3M= 2668\nbGxpbmc= 2669\nb2Y= 2670\nIGZvb3Q= 2671\nYnJl 2672\nIHVzdWFsbHk= 2673\nIGdlbmVyYWw= 2674\nZGE= 2675\nYW5jZXM= 2676\nIGRlc3Q= 2677\nIG9jYw== 2678\nIG1lbWJlcnM= 2679\nIGRhbnM= 2680\nIGVxdWFs 2681\nenQ= 2682\nIGJlY29t 2683\nIG1vdmluZw== 2684\nIHNwZWNpZmlj 2685\nw61h 2686\nIGZ1cg== 2687\nIG5lY2Vzcw== 2688\nIGNvbW1vbg== 2689\nIGF0dGFjaw== 2690\nINGN0YLQvg== 2691\nIFRvZGF5 2692\nIHVucw== 2693\nIEd1 2694\naW9k 2695\nIGFjY291bnQ= 2696\nIGdyYW5k 2697\nIHNlbGY= 2698\nIEVs 2699\nIHRhc3Q= 2700\nIGNvbnRlbnQ= 2701\nIGN1 2702\nhOs= 2703\nIE1heWJl 2704\nIEplc3Vz 2705\nb3Jlcw== 2706\ncG9ydA== 2707\nqbQ= 2708\nIGdpdmVz 2709\nIG5vcm1hbA== 2710\n0YDRgw== 2711\nIGltcGFjdA== 2712\nw6Ry 2713\nIGRpZXM= 2714\nIGxhYg== 2715\nc2g= 2716\naW9z 2717\nIFByZXM= 2718\nIFVuZA== 2719\nIE9m 2720\nIGZpbmFsbHk= 2721\nIGRvbGw= 2722\nIHZvY8Oq 2723\ncGx5 2724\nIEFn 2725\nIHRha2Vu 2726\nIGdyb3VuZA== 2727\nZm9ydA== 2728\nIGdhdmU= 2729\nIEluc3Q= 2730\nIGxvc3Q= 2731\nIHdvcmtlZA== 2732\nIGxpdGVy 2733\nIGlzc3Vl 2734\nIGluZHVzdA== 2735\nIHJldHVybg== 2736\nIGhhcHBlbmluZw== 2737\nIHdhbnRz 2738\n0LjQsg== 2739\nIHByb2JsZW1z 2740\nIENhcg== 2741\nnbw= 2742\nIEFsc28= 2743\nIHNpemU= 2744\nIG9idmlvdXNseQ== 2745\nIFN1 2746\nIFNj 2747\nIHJlY29tbWVuZA== 2748\nb3VyY2Vz 2749\nYXN0aWM= 2750\nLi4uLg== 2751\nIG1p 2752\nbGllcg== 2753\nIEV2ZW4= 2754\nY2lh 2755\nIGh1cg== 2756\ndmE= 2757\nIG1hc3M= 2758\nIHdvdWxkbg== 2759\ndW50 2760\nY2tz 2761\nIGZlbHQ= 2762\nb3Nw 2763\nbGlnaHQ= 2764\n0L7Qu9GM 2765\nbmll 2766\nIGJvdHRvbQ== 2767\nINCx0Ys= 2768\nb3JlZA== 2769\naXNvbg== 2770\nIGdyYWQ= 2771\nIHVtYQ== 2772\nIHZh 2773\nIOyC 2774\ncmVzc2lvbg== 2775\ndWxhdGlvbg== 2776\nSUQ= 2777\naWRlbmNl 2778\nIGJ1cg== 2779\nIGdvbmU= 2780\nbHU= 2781\n7Ja07A== 2782\nIHJlZHU= 2783\nIGph 2784\n7J2Y 2785\naXRh 2786\nIHNvZnQ= 2787\nIMOnYQ== 2788\naWNv 2789\nZXJhbA== 2790\nw7E= 2791\nYWY= 2792\nIHBvaW50cw== 2793\nZ3U= 2794\nIGTDqQ== 2795\nYXB0 2796\nYXg= 2797\nIEFscmlnaHQ= 2798\nIGNhbWVyYQ== 2799\nIGFjaA== 2800\nINC/0L4= 2801\nIHNldmVy 2802\nNTA= 2803\nIHNpZQ== 2804\nz4E= 2805\nIG1hbA== 2806\nIGNvbXB1dA== 2807\nIG1pZGRsZQ== 2808\nIGNvdWxkbg== 2809\nbWluZw== 2810\nIOyL 2811\nIEhpcw== 2812\nIGdhbWVz 2813\nIGludHJvZHU= 2814\nIGNlbGw= 2815\ncG9y 2816\nIHNsZWVw 2817\nIOuz 2818\naWRpbmc= 2819\nIG91 2820\nIGRlZw== 2821\nIGRyaW5r 2822\nIGVudmlyb25tZW50 2823\nIFVuaXRlZA== 2824\nIHRhbGtlZA== 2825\nIGNob29zZQ== 2826\nIGpvdXI= 2827\nZWdl 2828\nIE1pbg== 2829\nIGludGU= 2830\nIHJhdGhlcg== 2831\nIG9mZmlj 2832\n0LrQsA== 2833\nYWNoaW5n 2834\nIG1lbnRpb25lZA== 2835\nIGZpbGw= 2836\nIHRyYWNr 2837\nIG5pZQ== 2838\nIHV0 2839\nINCy0Ys= 2840\naWJpbGl0eQ== 2841\nIHZhYw== 2842\nIHJhZA== 2843\nIHBhY2s= 2844\nIHNlbmQ= 2845\nIERhcw== 2846\nIEFi 2847\nIGVuZ2luZQ== 2848\n44GX 2849\nIGNvbXBldA== 2850\nw7Q= 2851\nINCy0YE= 2852\nIGRvb3I= 2853\nIGxvbmdlcg== 2854\n5bCN 2855\nIGxhbmd1YWdl 2856\nIGV4dHJh 2857\ncGxheQ== 2858\nIHdlYnM= 2859\ndW1i 2860\ncm9vbQ== 2861\n55w= 2862\nIGJlZ2lubmluZw== 2863\nIHJlZmVy 2864\nQU0= 2865\nbmVu 2866\naWdoZXI= 2867\nZmFjZQ== 2868\nZXJj 2869\nIGZvcmdldA== 2870\nIGNvbW1lbnQ= 2871\n0LXQug== 2872\n0LvRjw== 2873\ncm9y 2874\nxbxl 2875\nIEdl 2876\nIGRhcms= 2877\nIGFueW9uZQ== 2878\nYW50ZQ== 2879\nZ2Vz 2880\n7Iq1 2881\n0ZE= 2882\nYmVk 2883\namU= 2884\ncnVjdHVyZQ== 2885\nIHByaW0= 2886\naWRh 2887\n6KY= 2888\n44G+ 2889\nIG1peA== 2890\nIHN0YXJ0aW5n 2891\nIOydtOs= 2892\nIHByb3ZpZGU= 2893\nYWN0aW9u 2894\nIG1vdGhlcg== 2895\nIHBlcmlvZA== 2896\nIHN0aWNr 2897\nIFlvdVQ= 2898\nIHRlY2hub2xvZ3k= 2899\n6rk= 2900\nIGJlZA== 2901\nIGdpdmluZw== 2902\nIGV4cGxhaW4= 2903\nemVu 2904\naW1hdGU= 2905\nIHJlcHJlc2VudA== 2906\nbG9hZA== 2907\nIEhvd2V2ZXI= 2908\nIGxpdmVz 2909\ndXRo 2910\naXJpdA== 2911\nb2du 2912\nIGxpaw== 2913\nIHJlc3BvbnM= 2914\nIHByaXY= 2915\nIHRvbQ== 2916\nw6fDo28= 2917\naWFt 2918\nIGV4Y2l0ZWQ= 2919\nIGNhcmQ= 2920\nZ3JvdW5k 2921\nINeU 2922\nIHNlbnM= 2923\nIHRlYWNo 2924\naWRv 2925\naG9k 2926\nIGVwaXM= 2927\nIHdlbGNvbWU= 2928\nIHdhbGw= 2929\n5Lk= 2930\nIGNoYW5jZQ== 2931\naGVu 2932\nINCh 2933\nIMSR 2934\nIHNpbXBseQ== 2935\nINGC0LDQug== 2936\ncmluZw== 2937\namE= 2938\nYm9vaw== 2939\nIHNldmVyYWw= 2940\nc3Rl 2941\nIGNyZWF0ZWQ= 2942\nINC+0YI= 2943\nIHB1c2g= 2944\nPT0= 2945\nIGhpZ2hlcg== 2946\ndWY= 2947\nb3VyY2U= 2948\nb2tl 2949\nIG9ubGluZQ== 2950\nIHJlbGU= 2951\nIHRvbg== 2952\nZW5zaXZl 2953\nIGZhdm9yaXRl 2954\n0YPQtA== 2955\nIGxvb2tlZA== 2956\nIHZvbg== 2957\n4oCU 2958\nIGbDvHI= 2959\nIGJ1dHRvbg== 2960\nIGJpbGw= 2961\nIGNoYW5nZXM= 2962\nISI= 2963\nIHNsb3c= 2964\nYWJsZXM= 2965\nIGRlYXRo 2966\nYW5kcw== 2967\nYXRlZw== 2968\nIHRoZW1zZWx2ZXM= 2969\n44Gj 2970\nIGNvcA== 2971\n44Gu 2972\nIHBlcnNvbmFs 2973\ndWdoaW5n 2974\nIDEx 2975\nZ2Fy 2976\nYWRlcw== 2977\nIG5lZWRlZA== 2978\nIHN0dWR5 2979\nYWdlZA== 2980\n0YHRgtCy 2981\naW5v 2982\nIGRpc2M= 2983\na2k= 2984\nIGFkZHJlc3M= 2985\n16g= 2986\naXR0ZW4= 2987\nZXNvbWU= 2988\nINC2 2989\npOs= 2990\ndXJh 2991\nIG11 2992\nIGNvbnRpbnU= 2993\nZm9y 2994\nIG1hdGNo 2995\n44Gm 2996\nIHN0cmFpZ2h0 2997\nkOs= 2998\nbmVycw== 2999\nIGRvZw== 3000\nIGRlYg== 3001\nIENP 3002\nIG9z 3003\nZ2Vk 3004\nY2FtZQ== 3005\nIGNvcnJlY3Q= 3006\nZXR0ZQ== 3007\nIFNlZQ== 3008\nIGluY2x1ZGluZw== 3009\nIEV1cm8= 3010\nZXN0ZXI= 3011\nIGp1bXA= 3012\nIFdoaWNo 3013\nINC60LDQug== 3014\nc29u 3015\neWE= 3016\nSU5H 3017\nIGVpbmU= 3018\nb3No 3019\nZW5jeQ== 3020\nIG1lZGlh 3021\nIHN1YnNjcmliZQ== 3022\n6YI= 3023\nIHByaW4= 3024\nIGhhYg== 3025\nIFBlcg== 3026\nIFdhcw== 3027\nIHBhZ2U= 3028\naXRvcg== 3029\nIHRvd2FyZHM= 3030\nIHRyaWVk 3031\nZW5nZQ== 3032\nYXJ0bWVudA== 3033\nIHZhcmk= 3034\nIHBhcGVy 3035\nIHBpY3R1cmU= 3036\nIHZlcnNpb24= 3037\nIGJyb3VnaHQ= 3038\nd2FyZQ== 3039\nIFN0YXRlcw== 3040\nIHNpY2g= 3041\nbGVkZ2U= 3042\nIHBlcmNlbnQ= 3043\nIGdvZA== 3044\nZWM= 3045\nIENvbW0= 3046\nIGRlY2lkZWQ= 3047\nIHNlbGVjdA== 3048\n7ZWc 3049\nKS4= 3050\ndXJpdHk= 3051\nIGZ1cnRoZXI= 3052\nIGNvbW1lbnRz 3053\nbGVtZW50 3054\nIGRyZWFt 3055\nIGNlbnRlcg== 3056\nbWk= 3057\nIGNhcw== 3058\nIHdvbWFu 3059\nIHJvYWQ= 3060\nIGZhaWw= 3061\nIGJlY2FtZQ== 3062\nbHVz 3063\naWxpdGllcw== 3064\n44Gv 3065\nIENv 3066\nIG1hbmFnZQ== 3067\nIHJlY29nbg== 3068\nIGFjdGlvbg== 3069\nIGJlbmVm 3070\nIGVhcmxpZXI= 3071\n15w= 3072\nIHNwZWVk 3073\nIG1lbnQ= 3074\nIHNvY2k= 3075\nIHNob290 3076\ndWk= 3077\nIMOk 3078\nIGFwcGx5 3079\ndm8= 3080\neGlt 3081\nIGNhdXNl 3082\nIHN1cnBy 3083\nIGhhYmVu 3084\nREk= 3085\nIGZhdGhlcg== 3086\nIE5leHQ= 3087\nIFlvdVR1YmU= 3088\nIGNvZGU= 3089\nIHJvbGU= 3090\nZ3Jlc3M= 3091\nIGdyZWVu 3092\nZXR0 3093\nIGJ1aWx0 3094\nIGZsb3c= 3095\nIGJhc2U= 3096\nIHRyYWluaW5n 3097\nIHJvdW5k 3098\nIFdpbGw= 3099\nIHBhdGg= 3100\nIFJv 3101\nIGludGVyZXN0ZWQ= 3102\n7Ja0 3103\nIHJlc3BlY3Q= 3104\nIGNoYW5nZWQ= 3105\naXNzaW9u 3106\nIHN0dWRlbnQ= 3107\nb2dyYXBo 3108\nIGFwcHJvYWNo 3109\nIHNob3dz 3110\n5bCx 3111\nIHRhcg== 3112\nIGNyaXQ= 3113\nIGdsbw== 3114\n7Iq164uI64uk 3115\nIGRlYWQ= 3116\nIFByZXNpZGVudA== 3117\nIHRob3Vz 3118\nIGJhbA== 3119\nc3Rlcg== 3120\nZXg= 3121\nIGFic29sdXRlbHk= 3122\nIG1pYw== 3123\nIHByYWN0aWNl 3124\nIHF1YWxpdHk= 3125\nIGxvd2Vy 3126\nb2dsZQ== 3127\nIHNlcGFy 3128\nYmFsbA== 3129\nbWVkaQ== 3130\nIHJldmlldw== 3131\nIEFwcA== 3132\nIG9r 3133\n4oCL 3134\nIGV4cGVyaWVu 3135\nIGNvbmNlcm4= 3136\nZW50aWFsbHk= 3137\nbW9yZQ== 3138\nIEpv 3139\nYXBhbg== 3140\nIEljaA== 3141\naXN0aWM= 3142\nIGZhaXI= 3143\nIHdlYnNpdGU= 3144\naXJlcw== 3145\nIEJ5 3146\nIHRyYXZlbA== 3147\nIHJpc2s= 3148\nIG1pcg== 3149\nIGJvYXJk 3150\nIHNlbg== 3151\nIHBhcmVudHM= 3152\nIFdvdw== 3153\nIGZlZWQ= 3154\nIHNhdmU= 3155\nIHNlcmlvdXM= 3156\nIGluaXQ= 3157\nRUw= 3158\ndW5kcmVk 3159\nQVM= 3160\nIHZhbg== 3161\nb3Jyb3c= 3162\nIHdvcnRo 3163\nIHNlYXJjaA== 3164\nIDE2 3165\nIHBhcnRz 3166\n0YHRgtGM 3167\nIGNvbXBhbg== 3168\nIG1vdmll 3169\nIG1ldGhvZA== 3170\nIGlsbA== 3171\nIHdpc2g= 3172\nZHk= 3173\nIGl0ZW0= 3174\nIG1pbnVz 3175\nYW5nZXI= 3176\nIHZvaWNl 3177\nIHNraW4= 3178\nIGFyZWFz 3179\nIGVpZ2h0 3180\nIG9icw== 3181\nICw= 3182\n0LDQuQ== 3183\nIG9pbA== 3184\nIGN5 3185\nIGJhYnk= 3186\nc3k= 3187\nIGVtcGxveQ== 3188\nIEtl 3189\nIHBsYWNlcw== 3190\nIGZpeA== 3191\nIGVzdMOh 3192\n44Go 3193\naXZlZA== 3194\nIGxvdHM= 3195\nIHNlYXNvbg== 3196\ndW5r 3197\nYWx0 3198\nIHRhYmxl 3199\nINCi 3200\nw6I= 3201\nIGF0dGVudGlvbg== 3202\n44Gq 3203\nIEhlcg== 3204\nIGFnZQ== 3205\nIHByYQ== 3206\nYmFjaw== 3207\nY2ls 3208\nIG5ldHdvcms= 3209\ncml0 3210\nIGRvYw== 3211\nIGFyZW4= 3212\naWdlbg== 3213\nIOuE 3214\n2K8= 3215\nZW5kZXI= 3216\nIHRvdGFs 3217\nIHByaWNl 3218\nIGNyYXp5 3219\n7Jo= 3220\naXF1 3221\ndGhvdWdo 3222\nWW91 3223\n2Yc= 3224\n44KT 3225\nz4U= 3226\nIHNhdA== 3227\nIGJp 3228\nIERpZQ== 3229\nIHNoYQ== 3230\nIHRoYW5rcw== 3231\ndWg= 3232\nIHN0YWdl 3233\n0LDQtg== 3234\nIEZs 3235\nIGxlYXY= 3236\nIGJveQ== 3237\nIGFm 3238\nw7Zu 3239\nIEdldA== 3240\nIGFjY2VwdA== 3241\nIGVudGVy 3242\nIHR1cg== 3243\nIHNpxJk= 3244\nIGhvbmVzdA== 3245\n44CM 3246\nIHNhbQ== 3247\nIHJlcGw= 3248\nZ2luZw== 3249\nIGRldmVsb3BtZW50 3250\nIEFjdA== 3251\nb3Jh 3252\n44CN 3253\n5L4= 3254\nIGtub3dz 3255\nIGltYWdl 3256\nIExvcmQ= 3257\n0LjRgtGM 3258\nIHdlZWtz 3259\nIHNleA== 3260\nlOs= 3261\nIGh1bmRyZWQ= 3262\nIHNvdW5kcw== 3263\nIGxlYXJuZWQ= 3264\nIGJ1ZA== 3265\nINGB0YI= 3266\nIGluY3JlZA== 3267\n4pk= 3268\nIG5vcw== 3269\nIGRyb3A= 3270\nIGJlbg== 3271\nINCY 3272\nIHNhZmU= 3273\nYXRh 3274\nIGZ1Y2s= 3275\nc29jaQ== 3276\nIGRhbg== 3277\nIGNyb3Nz 3278\nMTA= 3279\nbW8= 3280\ndmVydA== 3281\nIDE3 3282\nemll 3283\n5ZU= 3284\nIGRvbQ== 3285\nIEJv 3286\nIHNldHRpbmc= 3287\nIGludm9sdmVk 3288\nYXJpbHk= 3289\nIHNpbmQ= 3290\nIHN1cw== 3291\nIHdvcnJ5 3292\nZXRo 3293\n6rmM 3294\nIHN1bg== 3295\nIGhpZXI= 3296\nIGNlcnRhaW5seQ== 3297\nb3Vs 3298\nb3J0cw== 3299\nIEVy 3300\nIFVt 3301\nIGNhdXM= 3302\nIG5hdHVyYWw= 3303\nIMO8 3304\nIGNyeQ== 3305\nIFNlYw== 3306\nIHNvbQ== 3307\n5rI= 3308\nIGVkdWNhdGlvbg== 3309\n0LDQtdGC 3310\nIG11bHRpcA== 3311\nIGFsb25l 3312\nIGV5ZQ== 3313\nIHJhdGU= 3314\nIEV1cm9wZQ== 3315\n6L8= 3316\nbW9u 3317\nIGZpdA== 3318\naXppbmc= 3319\ncHBlZA== 3320\nIHByZXNzdXJl 3321\ndGhl 3322\n0LjRgQ== 3323\naXRlcw== 3324\nIEFm 3325\ncmVjaQ== 3326\nYXR0bGU= 3327\nIHNlcnZpY2Vz 3328\nIEdvb2dsZQ== 3329\n6YE= 3330\nIGNhc2Vz 3331\nIGRyaXZl 3332\nIGNoYWxsZW5n 3333\ndXo= 3334\nIE1v 3335\n7Jy86w== 3336\ndmFs 3337\n5YCL 3338\nIGZvbA== 3339\nIOyi 3340\nZmZpYw== 3341\nIHJh 3342\nIHNpbg== 3343\nIGJsdWU= 3344\nIGFmZmVjdA== 3345\nIG1pcw== 3346\nIHNob3Q= 3347\nINC+0LE= 3348\nYXNpbmc= 3349\nIHNpZ25pZmlj 3350\nIENoZQ== 3351\nIOqz 3352\nIHBvc2l0aXZl 3353\n7KM= 3354\nIHdpZQ== 3355\nIDQw 3356\nb3JkaW5n 3357\nIEZyb20= 3358\n6rU= 3359\nIGJyYW5k 3360\nIHRydXN0 3361\nIHBsZQ== 3362\nIGNvbW11bmlj 3363\nIHdlaWdodA== 3364\nIGFza2luZw== 3365\nIHRheA== 3366\nIEphcGFu 3367\n44Gf 3368\nIO2VmA== 3369\nb3Bz 3370\nz4I= 3371\nIHB1dHRpbmc= 3372\nIHJvbGw= 3373\nIEFtZXJpY2E= 3374\ncmVn 3375\nntc= 3376\nYXR1cmVz 3377\nZW5zaW9u 3378\nIFNvbWV0 3379\nIG9yaWdpbmFs 3380\ncGluZw== 3381\nIMWf 3382\nIHByb2R1Y3Rz 3383\n44O8 3384\nIGNvbnRhY3Q= 3385\nb2x1dGlvbg== 3386\nIGdvYWw= 3387\nIHBvdw== 3388\nIHBlcmZvcm1hbmNl 3389\nIGJsb29k 3390\nYXRvcnM= 3391\nIE1pY2g= 3392\nIHRlbXBlcg== 3393\nIERhbg== 3394\nIHN1Z2c= 3395\n0YLQuA== 3396\nIGltbQ== 3397\nIG9mZmljZQ== 3398\nIGFycmk= 3399\nIGNvbWZvcnQ= 3400\nINCU 3401\nIHN1Z2dlc3Q= 3402\nIHBsYXQ= 3403\ngpg= 3404\nMTk= 3405\nIG9t 3406\nIHNldmVu 3407\nIENlbnQ= 3408\naWxsZQ== 3409\nIGNvbmNlcHQ= 3410\nIGJhZw== 3411\nw7xu 3412\naXZlbHk= 3413\nIGRpdg== 3414\nbW9z 3415\n5ok= 3416\nIGZlZWxz 3417\nIGly 3418\nYWtlcw== 3419\nbGV5 3420\nIHBhcnRpY2lw 3421\nINCa 3422\nZmw= 3423\nanVzdA== 3424\nIHNpbA== 3425\nIFBh 3426\nQUw= 3427\nIGdvdHRh 3428\nIGZhbg== 3429\nIGNoYWxsZW5nZQ== 3430\nIGNvbXBhbmllcw== 3431\nIFBlb3BsZQ== 3432\nPC8= 3433\n0L7Qtw== 3434\nIHBlbg== 3435\naXNpbmc= 3436\nIGF1cw== 3437\nZW1pYw== 3438\nYW1lbnRl 3439\nIG1lZXRpbmc= 3440\nIHZpc2l0 3441\nIHN1cHBvc2Vk 3442\nIE9uY2U= 3443\n0LTQsA== 3444\nb3JsZA== 3445\nMzA= 3446\nVVM= 3447\nIHZpb2w= 3448\nIG5vdGljZQ== 3449\nINCQ 3450\naGFu 3451\ncGVk 3452\n7Jg= 3453\naGg= 3454\nIHRyb3U= 3455\nIG1pbnV0ZQ== 3456\nIFBhcg== 3457\ncmF5 3458\nIHRpdA== 3459\nIHVwZA== 3460\nIGJsb2Nr 3461\nIGR1ZQ== 3462\nYXVy 3463\nIGZvcmNl 3464\nIGNvdW4= 3465\nIOKAlA== 3466\nIHR5cGVz 3467\n66c= 3468\nIGxhdGU= 3469\nIGltcHJvdmU= 3470\nIOyI 3471\nIGF2ZQ== 3472\ndWxlcw== 3473\nY2w= 3474\nYW1lZA== 3475\nIGF3ZXNvbWU= 3476\nIE9r 3477\nIHZvdA== 3478\nIG1hY2hpbmU= 3479\nIGZvbGxvd2luZw== 3480\nIG1lYXN1cmU= 3481\nYWNpw7Nu 3482\ndWVs 3483\nY2hhbg== 3484\nIGFiaWxpdHk= 3485\nIHRvdXQ= 3486\nIGlkZWFz 3487\nIGluY3JlYXNl 3488\nIGVucw== 3489\nINGF 3490\nIOuq 3491\nIGplc3Q= 3492\nINCc 3493\nIHRydXRo 3494\naHk= 3495\nIHNwZW5k 3496\nIHNjaWVuY2U= 3497\nZXRl 3498\nIDE0 3499\nIGVwaXNvZGU= 3500\nIGFsZw== 3501\nZW5kZWQ= 3502\n44GT 3503\nYXJp 3504\nbGxh 3505\nIGZpc2g= 3506\nIHRocm93 3507\nbWl0 3508\n5bk= 3509\nIGNpcmM= 3510\nIENhbA== 3511\nIHRvdXI= 3512\nIGRpcmVjdGlvbg== 3513\nIG5vY2g= 3514\n0LXQsg== 3515\nw6lu 3516\nIGNvdW50cmllcw== 3517\nIGluZHVzdHJ5 3518\naW55 3519\naWNsZQ== 3520\nIGZlZXQ= 3521\nSXQ= 3522\nIGxlYWRlcnM= 3523\nZXR6dA== 3524\nIHN0YWZm 3525\n55Q= 3526\nIHB1cnA= 3527\naXRv 3528\nPyE= 3529\nIEph 3530\nIHN0b3Jl 3531\nZXRpYw== 3532\nIENoaW5h 3533\nIOuQ 3534\nIFVuaXZlcnNpdHk= 3535\nICM= 3536\nIGRlY2lzaW9u 3537\nIGFjaGll 3538\nIGFjdHVhbA== 3539\ndWx5 3540\nIHNlY3Rpb24= 3541\nIHJlc3VsdHM= 3542\nIHN0YXI= 3543\nIG1pc3Q= 3544\naWJseQ== 3545\nIGRhZA== 3546\nIG51bWJlcnM= 3547\nb21i 3548\n6Ko= 3549\nIFNwZQ== 3550\nIG1lcg== 3551\nIDI1 3552\nIGF1dG9t 3553\nIGNvbGQ= 3554\n2Kg= 3555\nhJw= 3556\nYWdlcg== 3557\nIFRW 3558\nIFNpZQ== 3559\nIEhhdmU= 3560\nIMW8ZQ== 3561\ndWdn 3562\nYWluZWQ= 3563\nIHVwb24= 3564\nIGxvZw== 3565\nIGNvbXBsZXRl 3566\nIGJyYWlu 3567\nYWdpbmc= 3568\nIE11cw== 3569\nb3Zlcg== 3570\nIGVhc2llcg== 3571\nIGludGVncg== 3572\nIG3DoXM= 3573\nIHR1cm5lZA== 3574\nIHN0cmk= 3575\naXZhbA== 3576\nIGhlYXY= 3577\nIFRI 3578\nIHdyaXRpbmc= 3579\n0YDQsA== 3580\n5Zyo 3581\n5aSn 3582\nIGNsYQ== 3583\nZGluZw== 3584\nIHRlbGxpbmc= 3585\n0LjQtA== 3586\naWNhdGVk 3587\n5Lul 3588\nYWNodA== 3589\n44GC 3590\naGFwcw== 3591\nIFN0ZQ== 3592\nIHJlc291cmNlcw== 3593\nIGRhbm4= 3594\nIHBhcnR5 3595\nIM+E 3596\nIHNhZg== 3597\naXNlcw== 3598\ndHJl 3599\nb2ludA== 3600\nIGtub3dsZWRnZQ== 3601\nIGFueW1vcmU= 3602\nIGZseQ== 3603\nIG1haW50 3604\n0LjQug== 3605\n5ZE= 3606\nIHNlbGw= 3607\nbGF1Z2hz 3608\nIFlvcms= 3609\nIGJpZW4= 3610\nIG9k 3611\nIGVhc2lseQ== 3612\nIHJhbmdl 3613\nIG9wdGlvbg== 3614\n2Lk= 3615\nIGFwcHJlY2k= 3616\nb2Ny 3617\nIGRldGVybQ== 3618\n0YQ= 3619\nIG1lYW5pbmc= 3620\nIHNpdGU= 3621\nIGRpc2Nv 3622\ndmVyYWdl 3623\nIGxvc2U= 3624\nIGluc3RhbGw= 3625\nIGVtb3Q= 3626\nYW50bHk= 3627\nw6R0 3628\nIHRhbWI= 3629\nIFdhcg== 3630\nIEhv 3631\nIEdlbg== 3632\nZW15 3633\n0LXQtw== 3634\nIFBvbA== 3635\nIG1lc3NhZ2U= 3636\nIG5vdGU= 3637\njIA= 3638\nIGhldA== 3639\nIGltbWVkaQ== 3640\nIGF2bw== 3641\nIGJvb2tz 3642\nIGJlY29tZXM= 3643\ncmVzaA== 3644\nw6hz 3645\nYXNvbnM= 3646\nIGhpbXNlbGY= 3647\ndXRz 3648\nIGp1 3649\nIGF3YXJl 3650\nIHJlcXVpcmU= 3651\nIHN5c3RlbXM= 3652\nIEhhcg== 3653\nIGFtb25n 3654\nIGhvbQ== 3655\nIGJyZWF0 3656\nIHdlaXJk 3657\nIOu2 3658\nzrs= 3659\n2Kk= 3660\naWZm 3661\nb3Jpbmc= 3662\nIHBsYXRmb3Jt 3663\nIFRha2U= 3664\nIGhlbHBz 3665\ndXRpb25z 3666\nIGZvcmc= 3667\nIGx1Y2s= 3668\nIEVuZ2xpc2g= 3669\nIHdlYg== 3670\nIG5lZ2F0aXZl 3671\nIHR1dA== 3672\nIGFib3Zl 3673\nbmd0aA== 3674\nIOqxsA== 3675\nIHN0b3JpZXM= 3676\nIGxvYWQ= 3677\nIGJhY2tncm91bmQ= 3678\nIHN3aXRjaA== 3679\nZ2E= 3680\nIHByaW5jaQ== 3681\nIGZpbmFu 3682\nIHZhcmlvdXM= 3683\nIGzDoA== 3684\nIGtpbmRz 3685\nYWluaW5n 3686\nIG5hdHVyZQ== 3687\nINCe 3688\nY3o= 3689\nIHByYXk= 3690\nIGdhcg== 3691\naXJt 3692\nICY= 3693\nIOyD 3694\nbnM= 3695\nIFJlcA== 3696\nIEZl 3697\nIHJldg== 3698\ncmFuZA== 3699\nIGxpa2VseQ== 3700\nIHVuZGVyc3RhbmRpbmc= 3701\nxLFy 3702\n44GL 3703\nIGZhbA== 3704\nIDEz 3705\n0YbQuA== 3706\nIHN1ZA== 3707\nIGJyb3RoZXI= 3708\nIHBsYW50 3709\nIHRocm91Z2hvdXQ= 3710\nd2lzZQ== 3711\ncHJl 3712\nIGN1bHR1cmU= 3713\nINmF 3714\nIHdvbmRlcmZ1bA== 3715\nIGFo 3716\ncHBlcg== 3717\nIHNvbGQ= 3718\nIHN0YXJ0cw== 3719\nIHdyaXR0ZW4= 3720\nzq8= 3721\nbmk= 3722\nINeU1w== 3723\nIERhdg== 3724\nIHVsdA== 3725\nIGFybQ== 3726\nIHJvY2s= 3727\nIHdlYXI= 3728\n642w 3729\nYW5v 3730\ncmFn 3731\nIHNxdWFyZQ== 3732\n0LDQvdC4 3733\nY2FzdA== 3734\nbGVicg== 3735\nIGxpdGVyYWxseQ== 3736\nIHBsYXllZA== 3737\nIGhlYXQ= 3738\nb25zZQ== 3739\ncmljdA== 3740\nIGluc3A= 3741\naWRz 3742\nIHBvcHVsYXI= 3743\n64+E 3744\nIGNhdGNo 3745\nIG1vdW50 3746\nIGp1ZA== 3747\nV2hhdA== 3748\n0LXQsQ== 3749\nUkE= 3750\nYXVk 3751\n0LrQvg== 3752\nIHN1cmZhY2U= 3753\nIGNvbnY= 3754\nIHBpZWNlcw== 3755\nT2g= 3756\n5oA= 3757\nIHN0eWxl 3758\ncHBpbmc= 3759\nIHJlYWRpbmc= 3760\nIGNvbnZlcnNhdGlvbg== 3761\n0L7Qvw== 3762\n5L6G 3763\nIEFnYWlu 3764\nIGJhbms= 3765\ndGltZQ== 3766\n0YPRgg== 3767\nZXJ2ZQ== 3768\nIEdyZWF0 3769\nIGNhcHQ= 3770\n0LDQsQ== 3771\nYXlz 3772\nIEZpbg== 3773\naWZpY2F0aW9u 3774\nIMOkcg== 3775\n0LDRjg== 3776\nIGVnZw== 3777\nIFdlbA== 3778\nIHRhcmdldA== 3779\ndWxh 3780\nY2hlcw== 3781\nYW5p 3782\nT08= 3783\naWNpb3Vz 3784\nbm93 3785\nz4M= 3786\nYm9hcmQ= 3787\nIGdlbnRl 3788\nIGRybw== 3789\nIEV0 3790\nIGRpbg== 3791\nIGNvcw== 3792\nIGF1dGhvcg== 3793\n2LM= 3794\nIG9jaA== 3795\nIGVtYWls 3796\nIHNwaXJpdA== 3797\nIHNpdHRpbmc= 3798\nbWFz 3799\nIHN0cmVuZ3Ro 3800\nIGJpZ2dlcg== 3801\nIFdhaXQ= 3802\nIG1hdA== 3803\nIHBvbGljZQ== 3804\ncmVzc2Vk 3805\nIHdhaXRpbmc= 3806\naXNoaW5n 3807\nIGRvbGxhcnM= 3808\naG9vZA== 3809\nc3M= 3810\nIGltYWdpbmU= 3811\naW5p 3812\nIG1lcw== 3813\nIGRpc2U= 3814\naWRnZQ== 3815\nYWJvcg== 3816\nIHBldA== 3817\nIGhvcA== 3818\nIEtpbmc= 3819\nIGNvbXB1dGVy 3820\nIGdvbGQ= 3821\nIG51 3822\nIGZpbmc= 3823\nKSw= 3824\nIHNlY3VyaXR5 3825\ncnVjdGlvbg== 3826\nIHNvbHV0aW9u 3827\nZXh0 3828\nIHBhdHRlcg== 3829\naWNrZW4= 3830\ndXJlZA== 3831\nIHN0YW5kYXJk 3832\n7Iuc 3833\nIGRvdWJsZQ== 3834\nzrc= 3835\nIHdpZmU= 3836\naXNh 3837\nIGRpcmVjdGx5 3838\nYWNlZA== 3839\nIGJ1bmNo 3840\nIMK/ 3841\n0LDQu9GM 3842\nIHJlZ2FyZA== 3843\nIHN3ZWV0 3844\nIHVuaXF1ZQ== 3845\nIOKZqw== 3846\nIHRyYWlu 3847\nIEdlcm0= 3848\nzqw= 3849\nUkU= 3850\nIGJlaGF2 3851\nIHByZWQ= 3852\n7IM= 3853\nc2V0 3854\nIGRlc2NyaXB0aW9u 3855\nw6ll 3856\nIGNhdA== 3857\n5ZM= 3858\nIGNvbGxlZ2U= 3859\n7Js= 3860\nIGFwcGxpY2F0aW9u 3861\nIFNlbg== 3862\nYXNr 3863\nIGNyZWQ= 3864\ndWJsaWM= 3865\nIG11bHRpcGxl 3866\nIG5p 3867\nIHByZXNpZGVudA== 3868\nIGFkZGVk 3869\nIHJvYg== 3870\nIGFxdWk= 3871\nIGhvc3A= 3872\nIHRvb2xz 3873\nIGd1bg== 3874\nIGJhc2lj 3875\nIGxpbmVz 3876\nIHN0cnVjdHVyZQ== 3877\nIFJ1c3M= 3878\nIHRvdGFsbHk= 3879\nIGJpZ2dlc3Q= 3880\nIGVlbg== 3881\nIGFyZw== 3882\nINec 3883\nIHBhcms= 3884\nIERlcw== 3885\nIGNlbGVicg== 3886\nIGZhaXQ= 3887\n0LXQvdGM 3888\nIHN1ZmY= 3889\nIHJlZ3VsYXI= 3890\nqOs= 3891\nIG1pbmU= 3892\nIEtvcmU= 3893\nIHByZXZpb3Vz 3894\nIHBp 3895\nIHNlZw== 3896\nIHBvbGljeQ== 3897\nINC60L4= 3898\nIFRydW1w 3899\nIHZhY2M= 3900\nw7N3 3901\nIFN5 3902\n0LjRhw== 3903\naXR0ZXI= 3904\nIHBvbGl0aWNhbA== 3905\ncmFz 3906\nIGFscw== 3907\n0LXQu9GM 3908\nIHNoYXBl 3909\nYW56 3910\nIG9udG8= 3911\nIGFyY2g= 3912\nIGFtYg== 3913\nYWdyYW0= 3914\nIFNt 3915\nY3Rpb25z 3916\nIGpvaW4= 3917\nYm9y 3918\n5Zs= 3919\nIGZyYW1l 3920\noIc= 3921\nIGNob2ljZQ== 3922\n4K+B 3923\n0YPRjg== 3924\nIENvcg== 3925\nIFN3 3926\nSVQ= 3927\nIHRlbmQ= 3928\nIEVhcg== 3929\nIHRvcg== 3930\nIGV2ZW50cw== 3931\nIGNsYWlt 3932\nIERh 3933\nIE1hcms= 3934\nIGdyb3Vwcw== 3935\nIGVhdGluZw== 3936\nIFdvcmxk 3937\nIHJlY2VudGx5 3938\nIHRhc3Rl 3939\nIHN1cnY= 3940\n4KQ= 3941\nIHNraWxscw== 3942\nINC40Lc= 3943\naXR0ZWQ= 3944\nIHNob3A= 3945\n7J207A== 3946\nIGVzdGFi 3947\nIOuCmA== 3948\nIHNlY29uZHM= 3949\nIFRob3Nl 3950\nIEVudA== 3951\nIOyE 3952\nZXJzb24= 3953\nIHRvd24= 3954\nIGNhbmQ= 3955\nIG9wdGlvbnM= 3956\nIGluZw== 3957\nVklE 3958\nIGVuY291cg== 3959\nIHLDqQ== 3960\n4pmq 3961\nIGVudHJl 3962\nIG1vdmVtZW50 3963\nIEJlbg== 3964\nIGJpcnRo 3965\nIHdoZQ== 3966\nIGhhbmc= 3967\nIEVt 3968\naWdl 3969\ncm9sbA== 3970\nIHVuZg== 3971\n7II= 3972\nIHJpZA== 3973\nIHNwcmVhZA== 3974\nIGhvc3Q= 3975\nYWxk 3976\nIEVk 3977\nIGNvbnN1bQ== 3978\nVU4= 3979\nIG9waW4= 3980\naXRhcg== 3981\nIE1lZA== 3982\nIHN1YmplY3Q= 3983\nIHBhbA== 3984\nIGNhcnJ5 3985\nIGFncmVl 3986\nIFdoaWxl 3987\nIGNhcmVlcg== 3988\nIHNjaWVudA== 3989\nIHN1ZGRlbg== 3990\nIGZpbGU= 3991\nemk= 3992\nIGV4Y2VwdA== 3993\n6bo= 3994\nIHBvdGVudGlhbA== 3995\nIEFub3RoZXI= 3996\nIGNvbXBsZXg= 3997\nIFNpbQ== 3998\nZW5kbw== 3999\nIHJhaXM= 4000\nIHBoeXNpY2Fs 4001\nIGRhdGU= 4002\nYWtlcg== 4003\nIENvbA== 4004\nIHBvd2VyZnVs 4005\nIG1lbWJlcg== 4006\ncmFw 4007\nIHNwb3Q= 4008\nIHNvdXJjZQ== 4009\nIGZlbQ== 4010\nw6lt 4011\nIGVtcA== 4012\namk= 4013\naWV0eQ== 4014\nIGluZmx1 4015\nIGRyeQ== 4016\nIGxvY2s= 4017\nIHplcm8= 4018\nIFVo 4019\nIHJvdXQ= 4020\nIHBvcnF1ZQ== 4021\nIDI0 4022\nIHRhbA== 4023\nIGZvbGtz 4024\nIGxhdW5jaA== 4025\nIGNvbXBvbg== 4026\nIFdlbGNvbWU= 4027\nIGthbm4= 4028\nw6Ru 4029\nINGN0YI= 4030\nZWVz 4031\nINmI 4032\nIGFueXdheQ== 4033\nIGF1ZGllbmNl 4034\n5Lq6 4035\nIHNsaWdodA== 4036\nb25h 4037\nIHVy 4038\nIHJlbGln 4039\nIGV4dHJlbQ== 4040\nxLF6 4041\nIE1h 4042\nzrw= 4043\nIMO2 4044\nIGFsbG93cw== 4045\nIGZhdA== 4046\nIEZhY2U= 4047\nIG5hdGlvbmFs 4048\nIGludGVydmlldw== 4049\nIE1j 4050\nw6l0 4051\nIGN1dGU= 4052\nZWxh 4053\nIHNlY3JldA== 4054\nIFdlc3Q= 4055\nIERlcA== 4056\nIGV4ZXJj 4057\nIGhpc3Rvcg== 4058\nIHByaW9y 4059\nIDYw 4060\nYXZh 4061\nYWNoZXI= 4062\neW9uZA== 4063\nIEhh 4064\nIGVzdGU= 4065\naW5hcnk= 4066\nIE5vcnRo 4067\nb25zdA== 4068\nIHNtYXJ0 4069\nYW1z 4070\n0LDQu9C4 4071\nIGRhcg== 4072\nZXJlZA== 4073\nIGZ1bm55 4074\nIE9i 4075\nIEJsYWNr 4076\nIHJlbGF0ZWQ= 4077\nIEJ1 4078\nIHNvbWV3aGVyZQ== 4079\nIFJlbQ== 4080\nbmVz 4081\nbWVudGU= 4082\nIFJlYWxseQ== 4083\nIGNyZWF0aW5n 4084\nIGZhbWls 4085\nIHNvY2lldHk= 4086\nIGdlbA== 4087\nIHRyYW5zZm9ybQ== 4088\nxIM= 4089\nIGluY2x1ZGU= 4090\nIGhvbA== 4091\nbGlrZQ== 4092\na28= 4093\nYWlycw== 4094\nINC/0L7QtA== 4095\nIHBlcnNwZWN0 4096\nIGJlcw== 4097\nIHBhcnRpY3VsYXJseQ== 4098\nIHNob3dpbmc= 4099\nIFBhcnQ= 4100\nIHF1YWw= 4101\nbG9jaw== 4102\nIHJlYWxpdHk= 4103\naG9sZA== 4104\naWN0aW9u 4105\nb29u 4106\nIHZpcg== 4107\n44Gr 4108\naXRhcnk= 4109\nIGRydWc= 4110\nIGZlYXR1cmU= 4111\nIHJlYXNvbnM= 4112\nINep 4113\nIHdyb3Rl 4114\nIGZhbnQ= 4115\nIGJhbmQ= 4116\n2YM= 4117\nZW5h 4118\na2V5 4119\nIGVhcnRo 4120\nZG9t 4121\nIGZlYXR1cmVz 4122\nIGZsb29y 4123\nIHNwZWFraW5n 4124\nIHRpcA== 4125\nIEF1c3Q= 4126\nIHN0b2Nr 4127\nIGNodXJjaA== 4128\nIHJhYw== 4129\n7Jy866Gc 4130\n4LiZ 4131\n44KM 4132\na3k= 4133\nIHJlc3BvbnNl 4134\n24w= 4135\ndWxhdGlvbnM= 4136\nIHNsaWRl 4137\nIGdyYWR1 4138\nY2lvdXM= 4139\nIG1lYW50 4140\nID09 4141\nINeQ1w== 4142\n44U= 4143\nIGtpbmRh 4144\nIHNjZW5l 4145\nIG11aXQ= 4146\nIOqwgA== 4147\ncmFzdA== 4148\ncmVzdA== 4149\nIHBsYXllcnM= 4150\nd2E= 4151\nIGJyb2Fk 4152\nIHRvbW9ycm93 4153\nb2NvbA== 4154\nINGB0LI= 4155\nIEJhcg== 4156\nxLFr 4157\nIHNlYQ== 4158\nIHJlbW92ZQ== 4159\nIHJlbWluZA== 4160\n0L7QvNGD 4161\nIFNpbmNl 4162\nIGF2ZWM= 4163\nY2VsbA== 4164\n0LjRhQ== 4165\nIGRvY3VtZW50 4166\nIOq3uOuf 4167\nIG5laWdo 4168\nYmVhdA== 4169\nIHDDpQ== 4170\nIGFzcGVjdA== 4171\nIGRlZA== 4172\nbGlzaGVk 4173\naWxz 4174\nIG91cnNlbHZlcw== 4175\ndWNl 4176\nIGhleQ== 4177\nINC/0YDQvg== 4178\nZW50eQ== 4179\nIGFzc29jaQ== 4180\nYWRvcw== 4181\ndW1iZXI= 4182\nIF0= 4183\n6YKj 4184\nbm92 4185\nIOyZ 4186\n0YPRhw== 4187\nIGNvbmRpdGlvbg== 4188\n64qU642w 4189\nIHZhbHVlcw== 4190\nIHNjZW4= 4191\nbWluaXN0 4192\nIGNhc3Q= 4193\nIGdyb3dpbmc= 4194\nIHVzZXI= 4195\nIHJlc3BvbmQ= 4196\nbGlt 4197\nw6ly 4198\neW0= 4199\n55yL 4200\nb3Nlcw== 4201\nc3ljaA== 4202\nINGA0LDQtw== 4203\nIGFwcGVhcg== 4204\nIHByb2dyZXNz 4205\nZW5ndGg= 4206\nIGphaw== 4207\nIERpcw== 4208\nIHBhdGllbnRz 4209\nIFNlcg== 4210\nIGdhcw== 4211\nw6hyZQ== 4212\n7Ja07JqU 4213\nIHJlY2k= 4214\n7J24 4215\nIHNjYQ== 4216\nZXBlbmQ= 4217\n0YHQug== 4218\n0LDQvw== 4219\nIGJhdHRlcg== 4220\nIHZlaA== 4221\n8J8= 4222\nIGFjY29t 4223\nIGJlYXQ= 4224\nIHBhaW50 4225\nIGNvbnRyaWI= 4226\nIHNhZA== 4227\nxrA= 4228\nYWxlcw== 4229\nIHRyZWU= 4230\nYmE= 4231\nIGJvcm4= 4232\naWNlZA== 4233\n4K6V 4234\nYmFuZA== 4235\nIG1lY2hhbg== 4236\nIERldA== 4237\nIGNhcGl0YWw= 4238\nIGRlbGl2ZXI= 4239\nIGZlYXI= 4240\nnpg= 4241\nIFNvdXRo 4242\nIGJvdWdodA== 4243\nIHN0cmVzcw== 4244\nIHZvcg== 4245\nPz8= 4246\naWg= 4247\n7JW8 4248\nIGVyYQ== 4249\n7J206w== 4250\n0LDRjw== 4251\naXNpb25z 4252\naXZpdHk= 4253\nIGhlbHBlZA== 4254\nIGFzc2lzdA== 4255\nIHBsYXllcg== 4256\ncmFu 4257\nIGltbWVkaWF0ZWx5 4258\nIG1vdmVk 4259\nY2ll 4260\n6rE= 4261\nIGFubm91bg== 4262\n5b8= 4263\n7J6Q 4264\nIHByb2R1Y3Rpb24= 4265\nIHN1bW1lcg== 4266\nIHR1bg== 4267\nIHByb2dyYW1z 4268\nR0g= 4269\nYWxpbmc= 4270\naXJh 4271\nZWxlc3M= 4272\nLik= 4273\nIGF2ZXJhZ2U= 4274\n6KaB 4275\nIGdsYXNz 4276\nb21hbg== 4277\naWZpY2FsbHk= 4278\nIOuLpA== 4279\nIENvbmc= 4280\nIFZlcg== 4281\nIHRyaWNr 4282\nIGJlZ2Fu 4283\nIHZpbGw= 4284\n6rGw 4285\naG93 4286\n5q0= 4287\nIHRpbGw= 4288\nIDkw 4289\nYmVydA== 4290\nIOq4 4291\nIHRlbXBlcmF0dXJl 4292\nw7I= 4293\n4LmI 4294\nIGdyYXBo 4295\nIOq3uA== 4296\nIHJvdA== 4297\nIG1vYg== 4298\nQVk= 4299\nYWVs 4300\nIHJlcGU= 4301\nIGRldmljZQ== 4302\nIDE5OQ== 4303\nIHRlbGU= 4304\nIGtlcHQ= 4305\ncGE= 4306\n5pY= 4307\ndmVyc2U= 4308\nIHN0cmVhbQ== 4309\n0LXRhw== 4310\nZXNzaW9u 4311\nIHN0cnVnZw== 4312\neno= 4313\nIGRlZ3JlZQ== 4314\nIGhlbHBpbmc= 4315\nIHNtZWxs 4316\nIHBlcmhhcHM= 4317\ncHJv 4318\nIGNvbnRleHQ= 4319\nIGlr 4320\nINC/0LXRgA== 4321\nIGNhbGN1bA== 4322\n6bq8 4323\nYmluZw== 4324\nIHJlYWxpemU= 4325\nbGFt 4326\nIENoYXI= 4327\neXQ= 4328\nIOydtOw= 4329\nIGRhbmdlcg== 4330\nIElt 4331\nYWE= 4332\nIGxvdmVk 4333\nIHB1cnBvc2U= 4334\nIGZpbmlzaGVk 4335\nIHBlYWNl 4336\nIG90 4337\nIGdsb2JhbA== 4338\nz4A= 4339\nIGFiZXI= 4340\nlog= 4341\nIGNoYXJhY3RlcnM= 4342\nIG51cg== 4343\nIGRhbWFnZQ== 4344\nIGVtZXI= 4345\nIHByZWM= 4346\nIFdpcg== 4347\nIGluc3RpdA== 4348\nkdc= 4349\nIGFsbG93ZWQ= 4350\nYm9u 4351\nIHRvZA== 4352\n0LXQs9C+ 4353\nIGpldHp0 4354\nIG1lZGlj 4355\nIHNtYWxsZXI= 4356\nY2VlZA== 4357\nIGxldmVscw== 4358\nIGludGVsbA== 4359\nV2U= 4360\nIHNlbQ== 4361\nIGN1cnJlbnRseQ== 4362\nIG1vZGVybg== 4363\nIGNvbnRyYWN0 4364\nIGRldGFpbHM= 4365\nb3J0dW5hdGVseQ== 4366\nT1M= 4367\nIHN0YXRlcw== 4368\nIGFkanVzdA== 4369\nYW50YWdl 4370\nZXo= 4371\nIFZlcnk= 4372\nIHNjYWxl 4373\nIHJlbGVhc2U= 4374\nIGZheg== 4375\nIGlj 4376\naXR1ZGU= 4377\nQUM= 4378\nIFBhdA== 4379\naWRlbg== 4380\nrZA= 4381\nIHByZWZlcg== 4382\nb2xvZ2ljYWw= 4383\nIEZhY2Vib29r 4384\nIOqwmQ== 4385\nIC4u 4386\nIE1ha2U= 4387\nINC60L7RgtC+0YA= 4388\nIERhdmlk 4389\nIEFmcmlj 4390\nIG1vZGU= 4391\nIENpdHk= 4392\nIHNoYWxs 4393\nINGE 4394\naW1pbg== 4395\nINC30LA= 4396\ncm9t 4397\ndWE= 4398\nIGJleW9uZA== 4399\nIGRpc3RyaWI= 4400\n0LrRgw== 4401\nIERvZXM= 4402\nIHZpY3Q= 4403\ncmF0ZQ== 4404\nIHZhaQ== 4405\nIHN1Y2Nlc3NmdWw= 4406\nIGhvdXM= 4407\nYWhh 4408\nZXN0cw== 4409\nIEVzdA== 4410\nIGRpc2NvdmVy 4411\nIHRoZXJlZm9yZQ== 4412\nY2hh 4413\nIGN1cA== 4414\nIHBvcHVsYXRpb24= 4415\nIEls 4416\nc2M= 4417\nIHNwZW50 4418\ncmVs 4419\nIHVzZWZ1bA== 4420\nIHRhYg== 4421\n5p0= 4422\nIMU= 4423\nIOygnA== 4424\nIGNvbnNl 4425\nIHF1YW50 4426\nYXlh 4427\nIGJvbg== 4428\n5Y+v 4429\nIENoaW4= 4430\nIOqygw== 4431\nb3VuZHM= 4432\n0LXRiA== 4433\nZWxsZQ== 4434\nIGljZQ== 4435\nMjE= 4436\nIGtpY2s= 4437\n5LiL 4438\nIHN0ZXBz 4439\nIHRvbmlnaHQ= 4440\n0L3Ri9C5 4441\ncmVuY2g= 4442\nLic= 4443\nIGdyYWI= 4444\nIGltcGxlbWVudA== 4445\nIOyImA== 4446\nIG1pc3Npb24= 4447\nIGNsZWFybHk= 4448\nIGFwcHJlY2lhdGU= 4449\n6IA= 4450\nIGZyZXNo 4451\nYXJt 4452\nIFR3bw== 4453\nIGV4ZWM= 4454\nIHByb2plY3Rz 4455\nIGNvbW11bml0aWVz 4456\ncmlibGU= 4457\nIHJlZ2lvbg== 4458\nIGZyZXF1 4459\ncm95 4460\nIGhvd2V2ZXI= 4461\nIHBhcnRuZXJz 4462\nYW5j 4463\nIG1pbmlt 4464\nIGxhdA== 4465\nIGZhbWlsaWVz 4466\nIGV2aWRlbmNl 4467\nIHB1bg== 4468\ncmFmdA== 4469\nIGxvc3M= 4470\nIG1hcA== 4471\nIGFueWJvZHk= 4472\nIGNoYW5naW5n 4473\nIHJ1bGVz 4474\nIG9yZ2FuaXphdGlvbg== 4475\nIGVzc2VudGlhbGx5 4476\nIFJlZA== 4477\nIGVsZW1lbnQ= 4478\n5pc= 4479\nIHZpcnQ= 4480\ncmF0 4481\nIHByaW50 4482\nYW5kZXI= 4483\nYXJlbg== 4484\nZW1vcw== 4485\nzr/PhQ== 4486\nIGNvbmRpdGlvbnM= 4487\nYWJl 4488\nIGRhbmNl 4489\n0LjRgA== 4490\nIGRvcw== 4491\n0L7Rhw== 4492\nIFF1ZQ== 4493\nIHdhbGtpbmc= 4494\nIHRybw== 4495\nIGlk 4496\nIGFkZGl0aW9uYWw= 4497\nIGZ1bGx5 4498\nIGZhbnM= 4499\nIGFkZGl0aW9u 4500\nIGxpa2Vk 4501\nIMO8YmVy 4502\nIGJvdw== 4503\nZGk= 4504\nIG1hc3Rlcg== 4505\nb2Zm 4506\nKTo= 4507\nbWJlcg== 4508\nIOus 4509\n5a8= 4510\n5Yiw 4511\nbGF1c2U= 4512\nIG9kZXI= 4513\nIHNhZmV0eQ== 4514\nIHJlYWN0 4515\n4K6/ 4516\nYnQ= 4517\nIGRpc2FwcA== 4518\nIGdpcmxz 4519\nU3Q= 4520\nIEFuZw== 4521\nIGZhaXRo 4522\nIHR1cm5z 4523\nIHRpZ2h0 4524\nIG1vdXRo 4525\nYW1p 4526\nemVy 4527\nIHdlYXA= 4528\nINCx0YPQtA== 4529\nIGhvc3BpdGFs 4530\ncmFpZA== 4531\nIG1pY3Jv 4532\nIFN0YXRl 4533\nIE1vc3Q= 4534\nYWdu 4535\nIGRlY2lkZQ== 4536\nIHBhdGllbnQ= 4537\nIGNvcm5lcg== 4538\nIGRpZWQ= 4539\nTm8= 4540\nIFN0dWQ= 4541\ncmVuZA== 4542\nZW1wdA== 4543\nIGxpZQ== 4544\nIGxpZg== 4545\nIEJlZm9yZQ== 4546\ndMOz 4547\nIFN1cGVy 4548\nIGJlbGw= 4549\nNjA= 4550\nIHByaXZhdGU= 4551\nIFBhdWw= 4552\nIGdpYg== 4553\nIGFncmU= 4554\ntOyEnA== 4555\nIHNpZw== 4556\nIGludmVzdGln 4557\n0Y/Rgg== 4558\nZW5pbmc= 4559\nIGRpc3RhbmNl 4560\nIHdhcm0= 4561\nIGRpZ2l0YWw= 4562\n5b6I 4563\naW5lcg== 4564\nIHBhbmQ= 4565\nIENPVklE 4566\n0LPQvg== 4567\nZ24= 4568\nIHJhY2U= 4569\nIHByb3Vk 4570\nIHRlYWNoaW5n 4571\nINGC0L4= 4572\n7J6l 4573\nIEFsbGFo 4574\nSW4= 4575\nIHdvb2Q= 4576\nIGNvbG9ycw== 4577\nIHdpcmQ= 4578\ndWo= 4579\naWRhZA== 4580\nIGN1c3RvbWVycw== 4581\nIGNvbm5lY3RlZA== 4582\nIGxheWVy 4583\nIGFjaGlldmU= 4584\nIHBlcnNwZWN0aXZl 4585\nIENvbGw= 4586\n2YI= 4587\nIGNsb3Vk 4588\nISEh 4589\nIGVuZGVk 4590\noIfqsow= 4591\nIG1hbmFnZW1lbnQ= 4592\nIHJpY2g= 4593\nIHN1YnN0 4594\nIHJlbW8= 4595\nIHNlcnZl 4596\nIHJlc2lzdA== 4597\nIHRob3VnaHRz 4598\nIGdyb3d0aA== 4599\naWxpYXI= 4600\nIHJpZ2h0cw== 4601\nIGNoYXJnZQ== 4602\nIGNvbnNpc3Q= 4603\nIHdlcmRlbg== 4604\nIGVtYg== 4605\nYW5kb20= 4606\nIGh1cnQ= 4607\nIGthbg== 4608\naWFz 4609\n0LvQvg== 4610\nIHNoaXQ= 4611\nIGJlZw== 4612\nIHJlY2VpdmVk 4613\naXRhdGlvbg== 4614\nIG1lYXQ= 4615\nIGlzc28= 4616\nZmZlZQ== 4617\nIGZhbW91cw== 4618\nIGNvbWZvcnRhYmxl 4619\nSUw= 4620\nIEJ5ZQ== 4621\n6Kqq 4622\n5YCR 4623\nb3RoZXM= 4624\nIG1lZGljYWw= 4625\nIGVuam95ZWQ= 4626\nIGhlYWx0aHk= 4627\nIHd5 4628\nY2llcw== 4629\nIGVmZm9ydA== 4630\nIGRvY3Rvcg== 4631\nIG1pbGl0YXJ5 4632\nTEFV 4633\nIGdybw== 4634\nIGJhdHRsZQ== 4635\nIGZlZA== 4636\nIGNhcGFj 4637\nIGFmcmFpZA== 4638\naXZpbA== 4639\nINCy0YHQtQ== 4640\nIGxlbmd0aA== 4641\neXNpcw== 4642\nIGJlaQ== 4643\npO0= 4644\nIG9yZ2FuaXo= 4645\nb3Jn 4646\naW5j 4647\nIGludGVyYWN0 4648\nIENoaW5lc2U= 4649\nIGFjY29yZGluZw== 4650\nIGluY3JlZGlibGU= 4651\nIGtpbGxlZA== 4652\nIGRhdWdodGVy 4653\nIM+A 4654\n0YvQsg== 4655\nIHNjaG9vbHM= 4656\nIMKr 4657\nbGxlcg== 4658\nIHNob3VsZG4= 4659\nbmFs 4660\nIGNyaXM= 4661\nIGNoaWNrZW4= 4662\nIGZhc3Rlcg== 4663\nIGV4dHJlbWVseQ== 4664\nIG9wcG9z 4665\nIG5vdXM= 4666\nICs= 4667\ncmlh 4668\nIGZpbmFuY2lhbA== 4669\nIGV4Y2l0aW5n 4670\nIGpvdXJuZXk= 4671\n15nXnQ== 4672\noOs= 4673\nIGRpc3BsYXk= 4674\nIG1lbW9yeQ== 4675\nIGhlYXZ5 4676\n0L3QtQ== 4677\nIHBhc3NlZA== 4678\n0YDQuA== 4679\naWxlcw== 4680\nIHBzeWNo 4681\nIHNwZWNpZmljYWxseQ== 4682\nIGVuZ2FnZQ== 4683\nIGxlZA== 4684\nb3JnZQ== 4685\nIERlbQ== 4686\nb3JkZXI= 4687\nIDgw 4688\nIGNyZWFt 4689\nZXN0ZXJkYXk= 4690\nIGVkZ2U= 4691\nINC/0L7Quw== 4692\nIGJ1bGw= 4693\nIGluZGlj 4694\nIGt0w7M= 4695\nIGhvcGVmdWxseQ== 4696\ndW1lbnRz 4697\nYWdlbg== 4698\n0L3QvtCz0L4= 4699\nIGhhdGU= 4700\nY2h0 4701\nODA= 4702\nIGVmZmlj 4703\nIOyngA== 4704\nIGludGVybmV0 4705\nIGJ1ZGdldA== 4706\nIHByb3BlcnR5 4707\naWRheQ== 4708\nIOya 4709\nINC80L7Qtg== 4710\nb2xh 4711\nIHNob3dlZA== 4712\nIE1vbg== 4713\nIHRob3VzYW5k 4714\nQVA= 4715\nIHBvb3I= 4716\ndXNlZA== 4717\nIEphY2s= 4718\nIHPDpQ== 4719\ng70= 4720\nIGVzYw== 4721\nIHNvZnR3YXJl 4722\nIHF1YXI= 4723\nINio 4724\nIG5lY2Vzc2FyaWx5 4725\nb21lbg== 4726\naXk= 4727\nIGV2ZW50dWFsbHk= 4728\naXNoZWQ= 4729\nIGJyaWdodA== 4730\nRUQ= 4731\nIHNwbA== 4732\nIGRlbWFuZA== 4733\nIHRocmVhdA== 4734\nIHNpcg== 4735\nIHJlbGVhc2Vk 4736\nY2tldA== 4737\nIOKAqw== 4738\nIHJlcXVpcmVk 4739\nIHZvdGU= 4740\n7Lk= 4741\n4K6k 4742\nIGRldmVsb3BlZA== 4743\nIOyCrA== 4744\nYXRvcnk= 4745\nIGRpcg== 4746\nY2FwZQ== 4747\nIHNsaWdodGx5 4748\nw6w= 4749\n4LmJ 4750\ncmVldA== 4751\nIGRpc2Vhc2U= 4752\nIGNvdXJ0 4753\nIGl0ZW1z 4754\nIEVhcnRo 4755\n0YHRgtC4 4756\n0LbQtQ== 4757\n7LI= 4758\nIGNoYWxsZW5nZXM= 4759\nIEJyaXQ= 4760\nIGRlc2lnbmVk 4761\nMTI= 4762\nIGhlYXJpbmc= 4763\nIGxpc3RlbmluZw== 4764\nem8= 4765\nINGB0Ls= 4766\n44Gn44GZ 4767\nIHBlcm8= 4768\nIHdlYXJpbmc= 4769\ncGxpYw== 4770\nIGNoZW0= 4771\nIGJhbGFuY2U= 4772\nIGJh 4773\nIHJlY2VpdmU= 4774\naW1h 4775\nIHNpZ25pZmljYW50 4776\nINC80Ys= 4777\nYW5jaA== 4778\nIENy 4779\nIENvdW4= 4780\n6riI 4781\nIGpvYnM= 4782\nIG9mZmljaWFs 4783\nIHBlcm0= 4784\nb21z 4785\nIG9wcG9ydHVuaXRpZXM= 4786\nIG92ZXJhbGw= 4787\nIGh1cw== 4788\nb2Rlcw== 4789\nIG5hdGlvbg== 4790\nIFJlZw== 4791\nIG9yZA== 4792\nIHJlc3RhdXI= 4793\nIOyG 4794\nIG1lbA== 4795\ndmlu 4796\nIHdlbm4= 4797\nIGvDtm4= 4798\n5oM= 4799\nIG9waW5pb24= 4800\n44KC 4801\n6Kw= 4802\nIFNvbWV0aW1lcw== 4803\n54I= 4804\n0YnQtQ== 4805\nYXNj 4806\nT1U= 4807\nIDIwMjA= 4808\nIGRlbGljaW91cw== 4809\naWdlcg== 4810\nIOyViA== 4811\nb2xl 4812\nIGhhbmRsZQ== 4813\nIGNpdA== 4814\nIO2VnA== 4815\nIGbDtnI= 4816\nb290aA== 4817\nIG5lY2Vzc2FyeQ== 4818\nIGluZGVwZW5k 4819\n5oQ= 4820\naXN0ZW4= 4821\naGFt 4822\nIMOpdA== 4823\n44Oz 4824\nIG11bHRp 4825\nz4w= 4826\nPyk= 4827\nIGNhbXB1cw== 4828\nIHRvcGlj 4829\nIHJhaW4= 4830\nIHBhbmVs 4831\nIFNhbQ== 4832\nIGxhcmdlcg== 4833\nYXVkaWVuY2U= 4834\nIHBhaWQ= 4835\nIGVjb25vbWlj 4836\nb2x0 4837\nIHN0cmVldA== 4838\nIENvbnQ= 4839\nIGRyaXZpbmc= 4840\nIOyggA== 4841\nIGhheQ== 4842\nIHByb2Zlc3Npb25hbA== 4843\nIEludGVybg== 4844\n5bg= 4845\nIGlucHV0 4846\nIGNhdGVn 4847\nIGNybw== 4848\nIGxs 4849\nRVQ= 4850\n0YvQuQ== 4851\nKio= 4852\nIFpl 4853\nQkxF 4854\nIOyk 4855\ncmVlcw== 4856\nINCv 4857\nZWRl 4858\naWVydA== 4859\nIGZvbGQ= 4860\nIGR1cg== 4861\nIE5hdGlvbmFs 4862\nIOyWtOs= 4863\nYW5jZWQ= 4864\nIGZhaXJl 4865\ndXRlZA== 4866\nIGtpbmc= 4867\nIHdpbGQ= 4868\nb2k= 4869\ndXBiZWF0 4870\nIHByZXZlbnQ= 4871\naXVz 4872\nIMOo 4873\nIHdpZGU= 4874\nIHJpbmc= 4875\nIHRpdGxl 4876\nIHN0YW5kaW5n 4877\nIGFsdGhvdWdo 4878\nIGhp 4879\nIHNhdWNl 4880\nIHNpZGVz 4881\nIGFuaW1hbHM= 4882\naWxpbmc= 4883\nYXRpdmVz 4884\n7JeQ7ISc 4885\nIE92ZXI= 4886\nIGRlc3A= 4887\nIGNvbnNpZGVyZWQ= 4888\nYXJpZXM= 4889\naWVycw== 4890\nIGVpbmVu 4891\nIHNpc3Rlcg== 4892\nIOuV 4893\nIFN1cmU= 4894\n44KL 4895\ncmllbmQ= 4896\nYWlnbg== 4897\nIHNob3du 4898\nIHNhYw== 4899\nIHNvbnQ= 4900\nIGNlbnR1cnk= 4901\nIHRpZW4= 4902\nIM66 4903\nIFNU 4904\n5ZWK 4905\nIG9sZGVy 4906\naWVt 4907\nIHRydWx5 4908\nIFNp 4909\nIHdpbmRvdw== 4910\naXF1ZXM= 4911\nYXJpbw== 4912\n5rKS 4913\nIGxvY2F0aW9u 4914\nzro= 4915\nIOyc 4916\ndmk= 4917\nYWd1ZQ== 4918\nIFNvcnJ5 4919\nIGRpc3A= 4920\nIGhlbGw= 4921\nIMOJ 4922\nIHRyYWRl 4923\nIGNyaXRpY2Fs 4924\nIOqx 4925\nIG5hbWVk 4926\nIHByZXBhcmVk 4927\nIEhvdXNl 4928\nYWx1 4929\nIHRvdWdo 4930\nIHRyaXA= 4931\nIHNhbmQ= 4932\nY2Vs 4933\nw7x6 4934\nIFB1dA== 4935\nIGFwYXJ0 4936\naXNm 4937\ndmlz 4938\nIGxpYnI= 4939\nYXZlbg== 4940\nIHZpZQ== 4941\nIGVmZmVjdGl2ZQ== 4942\n4Liy 4943\nIG1hZ24= 4944\nIG11aXRv 4945\nIOq1 4946\naGFs 4947\nIGxpbWl0 4948\nIG5pbmU= 4949\nIHdpbGxpbmc= 4950\nxLHFnw== 4951\nc3A= 4952\n0LXQsw== 4953\naGk= 4954\nIGFsdA== 4955\nIEphbg== 4956\nIG9yaWdpbg== 4957\nIFVz 4958\nIGVsZW1lbnRz 4959\nIHVzZXM= 4960\nIGhlbHBmdWw= 4961\nIGZsYXQ= 4962\nIGZhbWlsaWFy 4963\nIFBhcms= 4964\nIGNvcmU= 4965\nIGNsb3Nlcg== 4966\nIGFjdGl2ZQ== 4967\nIGFkbWluaXN0 4968\nQ0U= 4969\n0L3Ri9C1 4970\n54Q= 4971\nIHJlbGF0aXZl 4972\nIG1lbnRhbA== 4973\nIHJhbmRvbQ== 4974\nIHBhcnRuZXI= 4975\nIHV0aWw= 4976\ncGhvbmU= 4977\nIHJ1bGU= 4978\nd3c= 4979\nIOyglQ== 4980\nIHNjaG9u 4981\nIGNvZmZlZQ== 4982\nSEE= 4983\nIGNvbm5lY3Rpb24= 4984\nIHVuaXQ= 4985\nbGF1Z2hpbmc= 4986\nbG9n 4987\nIGFwcGw= 4988\n0LvQsA== 4989\ndXNpYw== 4990\nIEJyYQ== 4991\nIGFueXdoZXJl 4992\nQVVESQ== 4993\nIHNlcGFyYXRl 4994\nYm94 4995\nIGRpdmlk 4996\nIHRlc3Rpbmc= 4997\nIHNpY2s= 4998\nIHdlcmVu 4999\n5LuW 5000\nINec1w== 5001\nIGFkdmFudGFnZQ== 5002\nIHRyYW5zZmVy 5003\nJy4= 5004\nIOu5 5005\nIGZpbmRpbmc= 5006\n0L3QvtC5 5007\nIOyiiw== 5008\nIGZvcnQ= 5009\nIGVjb25vbXk= 5010\nIGxhY2s= 5011\nIGxlYXZpbmc= 5012\nIGRpbQ== 5013\n5Y4= 5014\nIFJlcw== 5015\n2K0= 5016\nIGRpc2N1c3Npb24= 5017\n0LXQvw== 5018\nIGdlcw== 5019\nZHVjdA== 5020\nIGNoYWlu 5021\nIHVzZXJz 5022\nZWNo 5023\nxYJh 5024\nIGRpc2g= 5025\nIGNhcmVmdWw= 5026\nIHRlYWNoZXI= 5027\nIG9wdGlt 5028\nIGZsdQ== 5029\nYXRpY2FsbHk= 5030\nIHJlZmxlY3Q= 5031\nIHRyZWF0bWVudA== 5032\nZWVk 5033\nacSZ 5034\nw7k= 5035\n4K6+ 5036\nIGVxdWlw 5037\nIHBsYW5uaW5n 5038\nIHNvbHZl 5039\n44Gd 5040\nIFRvbQ== 5041\nIGF2b2lk 5042\nIHBvdQ== 5043\nIGdyZWF0ZXI= 5044\nbGlu 5045\nT0w= 5046\nIEx1 5047\nIE1vcmU= 5048\nIGF0dHJhY3Q= 5049\nw6pu 5050\ndW5h 5051\nIHBob3Rv 5052\nZXJhdGlvbg== 5053\nIHBsYW5ldA== 5054\nIGNvcHk= 5055\nIHZpc3VhbA== 5056\naXJpbmc= 5057\nIGludGVybmF0aW9uYWw= 5058\nIGxhdWdoaW5n 5059\nIHRoaWNr 5060\nIGhvbGRpbmc= 5061\nIGJyaW5naW5n 5062\nIGxldHRlcg== 5063\nIGJ1cm4= 5064\nIGVmZmVjdHM= 5065\naXTDqQ== 5066\nb3Vycw== 5067\nT1Q= 5068\nw6ptZQ== 5069\nIFNjaG9vbA== 5070\n15XXqg== 5071\ncm9wcmk= 5072\nbGln 5073\nzrHOuQ== 5074\nIGFkdWx0 5075\nIHN1Z2Fy 5076\nIHJpZGU= 5077\nIGhpZ2hsaWdodA== 5078\nIG5vYm9keQ== 5079\nIDIx 5080\nIGNoYXQ= 5081\nINC/0YDQuA== 5082\nIGlubm92 5083\ndW5nZW4= 5084\nIGF0dGFjaA== 5085\nZWRvbQ== 5086\n5Yo= 5087\neWw= 5088\nIGxlZ2Fs 5089\nIHJpY2U= 5090\nIGNvbGxhYm9y 5091\na2luZw== 5092\nZG93bg== 5093\n5pk= 5094\n44KK 5095\nIGlo 5096\nIEFj 5097\nb3VzbHk= 5098\nIHJhcA== 5099\nIHNvbGlk 5100\nIGdlbmVyYWxseQ== 5101\nIHBhdHRlcm4= 5102\nYWxp 5103\n4Lit 5104\nIHRyYW5zbA== 5105\naW50ZXI= 5106\nYXVsdA== 5107\nIOuo 5108\nIGV4cHJlc3M= 5109\nIGV4YW1wbGVz 5110\nIGNob3Nl 5111\nIHRlbGxz 5112\nw61z 5113\nYWludA== 5114\nIFRlbGw= 5115\nIE1pY2hhZWw= 5116\n5qg= 5117\nIE51bWJlcg== 5118\nIHRhcA== 5119\nIGV4cGVyaW1lbnQ= 5120\nIGJlbmVmaXQ= 5121\nIOyw 5122\nIHNlcXU= 5123\nIGV4cGVuc2l2ZQ== 5124\nIGdlbmVyYXRpb24= 5125\nIE1hbnk= 5126\nIGFkZGluZw== 5127\nIGtpbA== 5128\nIGNhbXBhaWdu 5129\nIEFudA== 5130\ncmF3 5131\nb21tZW4= 5132\nIHNvdWw= 5133\nam8= 5134\nIEFjdHVhbGx5 5135\nYW1t 5136\n6rKg 5137\nIG1heGlt 5138\nIHNhbHQ= 5139\nIGNydQ== 5140\nIGNhbGxpbmc= 5141\n44GM 5142\nIGJhc2lz 5143\nYmFu 5144\nIGtlZXBpbmc= 5145\nIE1vcg== 5146\nZWRz 5147\n7IY= 5148\nIHRvZG8= 5149\n0LDQvNC4 5150\n0L3Rjw== 5151\nIGxpdmVk 5152\nIER1 5153\n44KJ 5154\n5a62 5155\nZm9yY2U= 5156\n5bm0 5157\nZmVyZW5jZQ== 5158\nYWxh 5159\nIG9jY3Vy 5160\nc2s= 5161\nIHJlY2VudA== 5162\nIGNhcnM= 5163\nIHRyYWRpdGlvbmFs 5164\nZW50bGU= 5165\nsog= 5166\nIGhlbGQ= 5167\nIG5hY2g= 5168\nIENlbnRlcg== 5169\nZXJlbg== 5170\nIGJpbg== 5171\n2YE= 5172\nIGNvbW1l 5173\nIHJldmU= 5174\nIOyYpA== 5175\nIGV4cGVjdGVk 5176\nYWJpbA== 5177\nIGZvY3VzZWQ= 5178\nb3Y= 5179\nIGlQ 5180\nb3JpYWw= 5181\naXJv 5182\nIGV0Yw== 5183\nYW1pbmc= 5184\nIFNvbg== 5185\nIHllc3RlcmRheQ== 5186\nIHN0cmF0ZQ== 5187\nINGG 5188\nIOuP 5189\ncGVz 5190\nIGFjdGl2aXR5 5191\nIGFkdmljZQ== 5192\nIG9wZW5pbmc= 5193\nZmlu 5194\nIHJlbGE= 5195\n6ZY= 5196\nIGluc3RhbmNl 5197\nIEV2ZXJ5b25l 5198\nYmw= 5199\ncGVu 5200\nIHZpc2lvbg== 5201\nIEFsZXg= 5202\naWZvcm4= 5203\nIHRpY2s= 5204\nSGU= 5205\nIHN0cmF0ZWd5 5206\nIGtvbQ== 5207\nUEU= 5208\nIEds 5209\nIGVsZWN0cmlj 5210\nMTU= 5211\nIGRhaWx5 5212\nIGh1c2JhbmQ= 5213\nIHN0YXRpb24= 5214\nIGFuYWx5c2lz 5215\neW5hbQ== 5216\nIGF0dGVtcHQ= 5217\nIGJpbGxpb24= 5218\ndmFudA== 5219\nIGZvcnRo 5220\nIG1hdGg= 5221\nYWx5 5222\nIGJlaGF2aW9y 5223\nIE1hcw== 5224\na2Fu 5225\nIERheQ== 5226\nIGJsZXNz 5227\nIGd1dA== 5228\nIEhpZ2g= 5229\nb3g= 5230\nIGRyZXNz 5231\nIGplZA== 5232\n6K8= 5233\n5ZY= 5234\nIGV4cGVyaWVuY2Vz 5235\naXN0YQ== 5236\nIGZpZ2h0aW5n 5237\n5bc= 5238\nINGB0Lo= 5239\nIG1vc3RseQ== 5240\nYXVzZQ== 5241\nIHBpY3R1cmVz 5242\n0LXQvdGC 5243\nIG1hZA== 5244\nIG1vZGVscw== 5245\n0YjQtQ== 5246\nIENvdW50 5247\nxYQ= 5248\nxYJv 5249\nZXB0 5250\nT00= 5251\nIEFO 5252\nIHRyb3VibGU= 5253\nNDA= 5254\nIGJpcmQ= 5255\ndWxhdGU= 5256\nIG11cg== 5257\nIHByb2R1Y2U= 5258\nIG1hcnJpZWQ= 5259\nYml0 5260\nIHRoZW9yeQ== 5261\n7Zg= 5262\nIGxlYWRlcg== 5263\nIExhc3Q= 5264\nQUE= 5265\n6LU= 5266\nIGltYWdlcw== 5267\nIGV4cGFuZA== 5268\nIFBvcg== 5269\nIHB1cmNo 5270\nIFNhbg== 5271\nIENocmlzdG1hcw== 5272\nIEF1c3RyYWw= 5273\nIHdpZA== 5274\nIE1pc3M= 5275\nIGtub3dpbmc= 5276\nIHpl 5277\nc2hpcA== 5278\na3U= 5279\n0YXQvtC0 5280\nIEluc3RhZ3JhbQ== 5281\nIEluZGlh 5282\nIGVzdGE= 5283\nIENhbGlmb3Ju 5284\nIDcw 5285\nIGRyYWc= 5286\nIGJydXNo 5287\nIG5hbWVz 5288\nQW5k 5289\nIHlv 5290\naWxsYQ== 5291\nIHNjaGVk 5292\nIGRlc3Ryb3k= 5293\neWVhcg== 5294\nIHZhbW9z 5295\nINmE 5296\nw6dh 5297\nIGZvcmdvdA== 5298\n0LjQtQ== 5299\nIHJhaXNl 5300\ncmVtZQ== 5301\n7ZW0 5302\nIEdpdmU= 5303\nIGNvbnRhaW4= 5304\ncmFi 5305\nIGdpZnQ= 5306\nINGB0L8= 5307\nIHJlcXVlc3Q= 5308\nIHNodXQ= 5309\nIGRlZ3JlZXM= 5310\nIGJlbmVmaXRz 5311\n0YvQtQ== 5312\nIHN0dWRpZXM= 5313\nIGVuZHM= 5314\nIGV2ZXJ5d2hlcmU= 5315\nIGhlcm8= 5316\nb3Bo 5317\nZXJyeQ== 5318\nIG1hdGVyaWFscw== 5319\nZW5lZA== 5320\nTkE= 5321\n5Y0= 5322\nIG11eQ== 5323\nIHdvcnNl 5324\n5LuA 5325\nIE1hZA== 5326\nIGRlY2lzaW9ucw== 5327\naW9uZQ== 5328\nIGZvcmVpZ24= 5329\nbGF1Z2h0ZXI= 5330\naWJlcg== 5331\n0LXQvdC40Y8= 5332\n44WL 5333\nIHJlYWxpemVk 5334\nIGlnbg== 5335\nIHdlYWs= 5336\nIM68 5337\nIHNjYXJlZA== 5338\nIGFzc3Vt 5339\nQUs= 5340\n778= 5341\n77+9 5342\nIGNvdmVyZWQ= 5343\nIFNhdA== 5344\nINC+0L0= 5345\nIGluZGl2aWR1YWxz 5346\nIGNvbXBhcmVk 5347\nMTE= 5348\nIEFkZA== 5349\naWNsZXM= 5350\nIGNlcnQ= 5351\ncmFy 5352\nIGJyaWVm 5353\nIGFjdGl2aXRpZXM= 5354\nIGZhYg== 5355\nYmFy 5356\nIGFzdA== 5357\nIE90aGVy 5358\nIGNsYXNzZXM= 5359\nIG9n 5360\nIG1pc3Npbmc= 5361\n44Gg 5362\n6Z0= 5363\nd2Vycw== 5364\n16k= 5365\nIGludHJvZHVjZQ== 5366\nIGVxdWF0aW9u 5367\n44G+44GZ 5368\nIG5vbQ== 5369\nIHBhaW50aW5n 5370\ndXNoaW5n 5371\nIEFQ 5372\nIGVuY291cmFnZQ== 5373\nIHNoaXA= 5374\naXR0ZWU= 5375\naXZlcnNl 5376\nb3Rh 5377\nbmFt 5378\n44O7 5379\nIGV4ZXJjaXNl 5380\nINCt 5381\nIG5hcw== 5382\nIHRob3VzYW5kcw== 5383\nIENhbGlmb3JuaWE= 5384\nIHNlcw== 5385\nIHJvdw== 5386\nnog= 5387\nIHBhbmRlbWlj 5388\nIHNraWxs 5389\nYmVs 5390\nIGRpcmVjdG9y 5391\nIG1pbGs= 5392\nIG51dA== 5393\nIG1vdGlvbg== 5394\nIGNsb3NlZA== 5395\n6Kg= 5396\nIGNyZWRpdA== 5397\nYWhy 5398\nIGNoZWVzZQ== 5399\nIGFsdGVybg== 5400\naW1hdGVseQ== 5401\nIHN1c3Q= 5402\nIFRyYQ== 5403\nIGdsYWQ= 5404\nIGhpZ2hseQ== 5405\nIHdh 5406\nIHJlZHVjZQ== 5407\nIGJsZQ== 5408\nYWRvcg== 5409\naW5hdGVk 5410\naW9uZXM= 5411\nY2llbnQ= 5412\nIGRlcGVuZGluZw== 5413\nIHNoYXJpbmc= 5414\nIGNhdWdodA== 5415\ncmFlbA== 5416\nIG1laHI= 5417\nIHBhc3Npb24= 5418\n55s= 5419\nIHJ1 5420\nIGZhcm0= 5421\nVEk= 5422\nYXZlcw== 5423\nIFJvYg== 5424\nIEJybw== 5425\nIG1vdGl2 5426\ncmV0Y2g= 5427\ncnVwdA== 5428\nIEJpZw== 5429\nIGFsbGU= 5430\nIGV0dA== 5431\ndWJz 5432\nIEphcGFuZXNl 5433\nIEhhbGw= 5434\n0LjQu9C4 5435\nQVVESUJMRQ== 5436\n56w= 5437\nIGNlbGxz 5438\naWth 5439\nZWxpbmU= 5440\naWxlcg== 5441\nIOyj 5442\nIHNreQ== 5443\nSU5BVURJQkxF 5444\nZW5kZQ== 5445\nYXB0ZXI= 5446\nIHBpbg== 5447\nIGdhdGhlcg== 5448\naG9s 5449\nbGVjdGlvbg== 5450\nIHN5bg== 5451\nIHBsdWc= 5452\ncm91bmQ= 5453\nIHVuaXZlcnNpdHk= 5454\naGli 5455\nIGZhbnRhc3RpYw== 5456\na24= 5457\nIGhvbGU= 5458\nIFJlbWVtYmVy 5459\naW5jdA== 5460\nYWtz 5461\nQ0g= 5462\nIGJyb2tlbg== 5463\nIHN0cmF0ZWc= 5464\nIGFsaXZl 5465\nIHRhbms= 5466\nIGNhcnQ= 5467\ncmF0ZWQ= 5468\ncmll 5469\nIFN0ZXA= 5470\nIEV2ZXJ5dGhpbmc= 5471\nIGJvdW5k 5472\nIHNvYnJl 5473\nIGN1c3RvbWVy 5474\noYw= 5475\ndXJn 5476\nIEJpbGw= 5477\nTGE= 5478\nd2hhdA== 5479\nIHJlYWN0aW9u 5480\nIHNlc3Npb24= 5481\nIHBsYW5z 5482\nIOydtOugh+qyjA== 5483\nIGRvd25sb2Fk 5484\n7Jk= 5485\ndWVy 5486\nIGNhYg== 5487\nIGluc3Ry 5488\naWZ5aW5n 5489\nIE5pY2U= 5490\nIHRlYW1z 5491\nxLFs 5492\nIGdvYWxz 5493\naXNjaA== 5494\nIHRyYW5zcG9ydA== 5495\nIGFuaW1hbA== 5496\nIGNvc3Rz 5497\nIGNhbGxz 5498\nIHNlaHI= 5499\n7Ig= 5500\ncmlhbg== 5501\nIGRpYWw= 5502\nIHdlYXRoZXI= 5503\n4LmA 5504\nINCy0L7Rgg== 5505\nIFBsYXk= 5506\nIHNoYXJlZA== 5507\nIHNtb290aA== 5508\nYWJh 5509\nIGxlYXZlcw== 5510\n4K6p 5511\nIGNvbmNlbnQ= 5512\nIHNoaWZ0 5513\nIOuQmA== 5514\nIEdvdmVybg== 5515\nIGRlbW9uc3Q= 5516\nIGJ1dHRlcg== 5517\nIOyXrA== 5518\nIHNhdGlzZg== 5519\niOus 5520\nIHJlY29nbml6ZQ== 5521\nIEZyZW5jaA== 5522\nIHZvbHVtZQ== 5523\nw6RuZA== 5524\n0YPQvA== 5525\nIOynhA== 5526\nIEtlZXA= 5527\nb3dh 5528\naXBwZWQ= 5529\n0YHRgtGA 5530\nIGRldGVjdA== 5531\nIM+D 5532\nIGxpZnQ= 5533\nIGNsb3RoZXM= 5534\nIFN0b3A= 5535\nw7U= 5536\nbWV0 5537\nIGNsaW4= 5538\nIGFycg== 5539\nZnJpZW5k 5540\nIHN0dWNr 5541\nWWU= 5542\naGFuZA== 5543\ndW1h 5544\nIHNjcmk= 5545\nIGZ1Y2tpbmc= 5546\nY3RvcnM= 5547\n16o= 5548\nIGpvaW5pbmc= 5549\nIGNldHRl 5550\nINij 5551\nIFdoaXRl 5552\nIGlocg== 5553\nzq0= 5554\n44Gt 5555\nIGluY2x1ZGVk 5556\nZXNzbw== 5557\nIGFjYWQ= 5558\nYnVt 5559\nIHNhYg== 5560\nINC00LvRjw== 5561\n6L+Z 5562\ndWZhY3Q= 5563\nIFJlcHVibGlj 5564\ncmlt 5565\nIHllbGxvdw== 5566\nIGxpbWl0ZWQ= 5567\nVEVS 5568\nIFR5 5569\nIG5vdGVz 5570\ndmVzdA== 5571\n0LjQtw== 5572\nYWxlZA== 5573\nIHBoYXNl 5574\nYW5kYQ== 5575\nIE1vbQ== 5576\nUkk= 5577\nIGltbWVy 5578\nbWFs 5579\nIGluag== 5580\nIHlhbmc= 5581\ndWRpYmxl 5582\n0LDQsw== 5583\nIHNldHQ= 5584\nIG1hZ2lj 5585\nIGVuc3VyZQ== 5586\nIHNwcmluZw== 5587\nIHNob2Nr 5588\nIHdoZWVs 5589\n0L7Qs9C00LA= 5590\n44KI 5591\nIGNhbmNlcg== 5592\nIHJvb3Q= 5593\n0JA= 5594\nZ2VuY3k= 5595\nIOuN 5596\naWk= 5597\nIG91dHB1dA== 5598\nIGNvbW1pdA== 5599\nIHdvcmtlcnM= 5600\n7JWE7JqU 5601\nINGB0LDQvA== 5602\ndmV5 5603\nIHBldQ== 5604\nIGNpdmls 5605\naXNj 5606\nIGJyaW5ncw== 5607\n0YDQsNCy 5608\nYW5pYQ== 5609\nxIE= 5610\nY3JhZnQ= 5611\nbWJvbA== 5612\nIGludGVsbGln 5613\nYmk= 5614\nYWNpbmc= 5615\neW91 5616\nIGJlY29taW5n 5617\nIERlcg== 5618\nZW1h 5619\n5bCx5piv 5620\nIGluZ3JlZA== 5621\nIGNvbW1hbmQ= 5622\nIHVwZGF0ZQ== 5623\nIHByZW0= 5624\nIG9wZW5lZA== 5625\nhKQ= 5626\n0LXQvdC40LU= 5627\nIGdhcmQ= 5628\nIHN0YXRlbWVudA== 5629\nIHNjcmV3 5630\nIHByb3Rl 5631\nIGNhcmRz 5632\nIHRhc2s= 5633\nIGV2ZW5pbmc= 5634\nIHN0aXRjaA== 5635\naW5lbg== 5636\nIEJlcg== 5637\nbWFyaw== 5638\nIERhZA== 5639\nINC10YHRgtGM 5640\nINee1w== 5641\n7JeI 5642\nIGJhbg== 5643\nIGNsaW0= 5644\nIGZyZWVkb20= 5645\nIG5vcm1hbGx5 5646\n0LXRgdGM 5647\n5aY= 5648\nIHByb3ZpZGVk 5649\nIOyekA== 5650\nIOyVhOuLiA== 5651\nIEtpbQ== 5652\naWVkZXI= 5653\n7J2M 5654\nIGNpdGl6 5655\nIGJpa2U= 5656\nIGJhaw== 5657\nIG5vaXNl 5658\nIGNsaW1hdGU= 5659\naXplcw== 5660\n5b6M 5661\nIGluY3JlYXNpbmc= 5662\nIFRIRQ== 5663\nIGxpcXU= 5664\nIHBlcnNvbmFsbHk= 5665\nZWY= 5666\ncmVzcA== 5667\nIGxlZ3M= 5668\naW5kZXI= 5669\nIHBlZA== 5670\nIOunjg== 5671\nIGRlcGVuZA== 5672\nIHZhcmlldHk= 5673\nIElzcmFlbA== 5674\nIHdhc2g= 5675\n5YY= 5676\nIHF1aWV0 5677\nIEphbWVz 5678\nIEpldw== 5679\nIGZvcmV2ZXI= 5680\nIEludA== 5681\nIGNvdW50ZXI= 5682\ndXJhbmNl 5683\nIEFueXdheQ== 5684\nY2FyZQ== 5685\nIE9ubHk= 5686\nY2nDs24= 5687\nYWRp 5688\nIEV2 5689\n64uI6rmM 5690\nIM6x 5691\nIHNsb3dseQ== 5692\nINC+0LQ= 5693\nIG5vdGljZWQ= 5694\naWVyZW4= 5695\nIGZlbGw= 5696\nINCR 5697\nIG3Dqm1l 5698\nIHdoZW5ldmVy 5699\nISk= 5700\nIEh5 5701\n5bw= 5702\nb3Jkcw== 5703\ndXNpb24= 5704\nIFN0YXI= 5705\nIO2Y 5706\nIE1hYw== 5707\n5LiK 5708\naXZlbg== 5709\nIOyLnA== 5710\nIOyXhg== 5711\nIFR1cg== 5712\nIGdlcg== 5713\ncmlz 5714\nIHZleg== 5715\nINC70Y4= 5716\nIHZlcnN1cw== 5717\n2KfY 5718\nb2NvbGF0ZQ== 5719\nIHBsYW5l 5720\nIHpv 5721\nIHN1aXQ= 5722\nVGhpcw== 5723\nIG5lcnY= 5724\nIEFjYw== 5725\n0YPQtg== 5726\n7IKs 5727\nbmg= 5728\nZW1l 5729\nIGF1c3M= 5730\nIG1lYXM= 5731\nIHRyw6hz 5732\nz4k= 5733\n0YHQu9C4 5734\nIEFydA== 5735\nIFNlY29uZA== 5736\n0L7Qu9GM0LrQvg== 5737\nY2hv 5738\naXRlY3Q= 5739\n0LXRgdGC 5740\nIGJvc3M= 5741\nIGluY29tZQ== 5742\noKQ= 5743\nIHNoYWQ= 5744\nIGFwcHJvcHJp 5745\nIE1hbA== 5746\nb3B0 5747\nIGFydGlzdA== 5748\nIHBsYXlz 5749\nb3RoZXJz 5750\nIEludGVy 5751\nIHZpcnVz 5752\nIGh1bmc= 5753\nIGNvbnN0YW50 5754\nIHNjcmlwdA== 5755\nIHNub3c= 5756\ndWxm 5757\na2V0 5758\nIGRldmljZXM= 5759\nIG1ldGFs 5760\naWdodHM= 5761\n7IS4 5762\nIHNhbGVz 5763\nIHZlZ2V0 5764\nIGNvbGxlY3Rpb24= 5765\nIHZpYQ== 5766\na2Vy 5767\nIGdvdHRlbg== 5768\nT1c= 5769\nacOpbg== 5770\nIGFjY3Vy 5771\nIHdhdmU= 5772\ndWx0eQ== 5773\nIEFpcg== 5774\nIGxlYWRpbmc= 5775\naWNpbmc= 5776\nIGNlbnRyYWw= 5777\nIENocmlzdGlhbg== 5778\nZnI= 5779\nIEFsdGhvdWdo 5780\nIHNvbmdz 5781\nIGZpZg== 5782\n0L3Ri9GF 5783\nIGJlbG9uZw== 5784\nb3NzaWJsZQ== 5785\n7LA= 5786\nIHBob3Rvcw== 5787\naXNs 5788\nIHJlbGF4 5789\nc2E= 5790\nVVNJQw== 5791\n6rc= 5792\nIG1hbnVmYWN0 5793\nIFR3aXR0ZXI= 5794\nIGRhbmdlcm91cw== 5795\nIGh5ZA== 5796\nbGVhcg== 5797\naWFudA== 5798\nIOKApg== 5799\nIHN1ZGRlbmx5 5800\nIGxhdWdo 5801\nIGFuZ2xl 5802\nIEdvdA== 5803\nIHdvcnJpZWQ= 5804\n0L7QtQ== 5805\nIHBhcA== 5806\nIE1hcnQ= 5807\nZW5v 5808\nIGJhdHRlcnk= 5809\nINC/0L7RgQ== 5810\nIGxpZ2h0cw== 5811\nIGFybXM= 5812\nIEFicw== 5813\nbWVz 5814\n4oCT 5815\ndXNldW0= 5816\nIHRlYQ== 5817\nIE1pYw== 5818\nIGZvcm1lcg== 5819\nb2dyYXBoeQ== 5820\nIGFwcGxpY2F0aW9ucw== 5821\nIERpcmU= 5822\n54S2 5823\nIGZlZWRiYWNr 5824\naXRjaGVu 5825\neW9ydW0= 5826\ndWVk 5827\naWd0 5828\nxrDhuw== 5829\nb3NpdGlvbg== 5830\nIERlbA== 5831\nIO2VmOs= 5832\nIEJhY2s= 5833\nYWRz 5834\nIHByaW1l 5835\n7KO8 5836\n7KOg 5837\n15E= 5838\nIG11dA== 5839\nXS4= 5840\nINCX 5841\nbG9j 5842\na2lu 5843\nIGV4cGVydA== 5844\nIGFscmlnaHQ= 5845\ndW5ncw== 5846\nIHN1cHBseQ== 5847\nIGxlYWRlcnNoaXA= 5848\nIEZyYQ== 5849\nIHR5cGljYWxseQ== 5850\nIHNlbA== 5851\nIHRyZWVz 5852\nIDIy 5853\naGFy 5854\nIHdvcnN0 5855\nIGJ1c3k= 5856\nYW50bw== 5857\nIFVw 5858\nIEJhcw== 5859\nIHByZXNlbnRhdGlvbg== 5860\nIHN0cmFuZ2U= 5861\nIHRoaW4= 5862\n0YLQtQ== 5863\nIHZlaGljbGU= 5864\nINC00L4= 5865\nY2VsbGVudA== 5866\nNzA= 5867\nIHRpcmVk 5868\nIGNyaXNpcw== 5869\nIHRpbnk= 5870\nYXN5 5871\nIHJhbg== 5872\n6Yc= 5873\nIGZvcmNlcw== 5874\nINC+0Yc= 5875\nIGlkZW50aWZ5 5876\nIGFzc2Vzcw== 5877\n0LjRgtC1 5878\nU0U= 5879\nIGNyZWF0aXZl 5880\n558= 5881\nIGRlcGFydG1lbnQ= 5882\nIGluaXRpYWw= 5883\n5oiR5YCR 5884\nIERhbQ== 5885\nYWt0 5886\ndmVyZQ== 5887\nIGluZmVjdA== 5888\nIHB1bXA= 5889\n4bqh 5890\nIHZpZWw= 5891\nIHJhcmU= 5892\nIGRvdA== 5893\nYXNoaW9u 5894\nZW1wbA== 5895\nIGZsZXg= 5896\nIGtvbg== 5897\nIHRydWNr 5898\nIGxlY3Q= 5899\nIHBsYXN0aWM= 5900\nbGF3 5901\nIGxpa2Vz 5902\nIHJvdWdo 5903\nIE1BVA== 5904\n7Z6I 5905\nIGNvbW1lcg== 5906\nIGFzc2U= 5907\nIGNha2U= 5908\nIGFjdGlvbnM= 5909\nIGFkbQ== 5910\nIG90aGVyd2lzZQ== 5911\nIEhlYWx0aA== 5912\nIGNvbGxl 5913\n4LmA4Lg= 5914\nIHJ1Yg== 5915\n5b6X 5916\n5pQ= 5917\nIHNjcg== 5918\nIHp1bQ== 5919\nIEhpbQ== 5920\nIGNoYW1w 5921\nIGNvbmNlcm5lZA== 5922\nIDUwMA== 5923\nIHBsYXRl 5924\nIE91dA== 5925\nIGRvbmM= 5926\nIGVxdWlwbWVudA== 5927\nIHRhdWdodA== 5928\nbGxlZA== 5929\nIO2Z 5930\naXZh 5931\nIG1vdG9y 5932\nwrs= 5933\nIGd1aWRl 5934\n5Yk= 5935\nIHN0b3BwZWQ= 5936\nIHJhdA== 5937\nIGxhYm9y 5938\nIGFpbQ== 5939\nIHByZXBhcmU= 5940\nINGI 5941\nIHNob290aW5n 5942\nYW5uZWQ= 5943\nY3JpcHQ= 5944\nIGVuZW15 5945\nIGRlcGVuZHM= 5946\nIG5hdg== 5947\nIGJlcg== 5948\nIGxhbmRz 5949\nIHVuaXZlcnM= 5950\naXU= 5951\nIGZhY3Rvcg== 5952\nb2tpbmc= 5953\nIGNhcmJvbg== 5954\nYnV0 5955\nIExvdmU= 5956\nZWxk 5957\nIM61 5958\nIGdh 5959\nIMOpcw== 5960\nIGJyZWFk 5961\nIHZvbHQ= 5962\n7Yo= 5963\nIHdhc3Rl 5964\nIGtlZXBz 5965\n5omA 5966\nIHN0b3I= 5967\nIGhvbm9y 5968\nIHVubGVzcw== 5969\nIGNvbHVt 5970\nIOuMgA== 5971\nIHBsYW50cw== 5972\nWWVhaA== 5973\nIGluY2x1ZGVz 5974\n5Lit 5975\nIG94 5976\nIHBldXQ= 5977\n66eM 5978\n7IOB 5979\naXN0cnk= 5980\n4Lix 5981\nIERlcGFydG1lbnQ= 5982\nYW50YQ== 5983\nIGZpbmdlcg== 5984\nIHN0cmV0Y2g= 5985\nIHN5bWJvbA== 5986\nIG5laWdoYm9y 5987\n5qw= 5988\n6rCE 5989\nfn4= 5990\nINGC0Ys= 5991\nIEFiZXI= 5992\na2Vz 5993\nIG1hc3NpdmU= 5994\nIENI 5995\nIFNhbA== 5996\n16A= 5997\n44KS 5998\nIGR5bmFt 5999\nYWNoZQ== 6000\nIFByZQ== 6001\nIG1vbml0b3I= 6002\nZW50ZWQ= 6003\nRU8= 6004\nIHJhaXNlZA== 6005\naXN0aWNz 6006\n2qk= 6007\nIHZvdQ== 6008\naXRlbg== 6009\nobA= 6010\nIGJ1c2luZXNzZXM= 6011\nIGVhcm4= 6012\nIG1vYmlsZQ== 6013\naWRhZGU= 6014\nIGhhYmU= 6015\neXI= 6016\nbGljdA== 6017\nIGNvbmR1Y3Q= 6018\nIGZlZGVyYWw= 6019\nIHdv 6020\nYnU= 6021\nIG5vbmU= 6022\nIHRlYWNoZXJz 6023\nINin2YTY 6024\n6YGT 6025\naWRlbnRz 6026\n2KfZhA== 6027\nIHRyZW5k 6028\n0LXQtg== 6029\nIGFsYnVt 6030\nIG1pY2g= 6031\nYmFzZWQ= 6032\n4Li1 6033\nIHRyYW5zaXRpb24= 6034\nINC90L4= 6035\nw7Vlcw== 6036\naG9zdA== 6037\nZWR5 6038\nIFByb2Y= 6039\ncGFu 6040\naWpu 6041\nIGNhcGFjaXR5 6042\ndW5kbw== 6043\nINeR1w== 6044\nIGJyZWF0aA== 6045\nINC80LXQvQ== 6046\nIG3DvA== 6047\n7Zk= 6048\nIEF1dA== 6049\naGluZ3Rvbg== 6050\nIG5vcg== 6051\nIGdhaW4= 6052\ncG9pbnQ= 6053\nWWVz 6054\nINiq 6055\nIE5h 6056\nw6Vy 6057\nIGnDpw== 6058\nIE1hcnk= 6059\nIHNwaW4= 6060\nIGFudGk= 6061\n5ZCn 6062\nIHNvbWVob3c= 6063\nIGxhd3M= 6064\nIG1vbWVudHM= 6065\nIGdyZQ== 6066\nIG1vdmVz 6067\nIFdvdWxk 6068\nIHByZWRpY3Q= 6069\nIHZyYQ== 6070\nIDIwMTk= 6071\ntoQ= 6072\nIGZ1bmRhbWVudA== 6073\nMjU= 6074\nIHB1cmU= 6075\nIHdvdw== 6076\nIGlzbGFuZA== 6077\nIGludmVzdG1lbnQ= 6078\nIGJhdGg= 6079\nIFlh 6080\nIGhhcmRlcg== 6081\nIHRpcHM= 6082\n5Zc= 6083\nIGVsZWN0cm9u 6084\nIEJvYg== 6085\nIGJvbmQ= 6086\nb2RpZXM= 6087\nIEF1Zw== 6088\nIGdpYnQ= 6089\nIGNoYWly 6090\nIHR3aWNl 6091\nd29vZA== 6092\nIGNsYXI= 6093\nIG1hc2s= 6094\nIGhvbmVzdGx5 6095\nIDIwMTg= 6096\ndGllcw== 6097\nJyw= 6098\nIHBlbnM= 6099\nIHN1cnByaXNlZA== 6100\nIGNvbW11bmljYXRpb24= 6101\n44Gj44Gm 6102\nIHNwcg== 6103\nIHdob3Nl 6104\nIHN0YXJz 6105\n15DX 6106\nIOKAiw== 6107\nIHByb3Blcmx5 6108\nIGdyZXc= 6109\nb3Npbmc= 6110\nIGRpdmVycw== 6111\nQUQ= 6112\nIGVtcHQ= 6113\nIGV4cHJlc3Npb24= 6114\n4bq/ 6115\nIFBhbA== 6116\n44GK 6117\nIGp1c3RpY2U= 6118\nIHBhaXI= 6119\nd28= 6120\nIHNlYXQ= 6121\nb3J0ZXI= 6122\nIGxpbmtz 6123\nIE1lcg== 6124\nIHJlbmQ= 6125\n0L3QvtC1 6126\ndXBpZA== 6127\nIEhlbA== 6128\nIE1hcmNo 6129\nIExv 6130\n0YHRjA== 6131\nIGhhc24= 6132\nIGV2YWx1 6133\n44GP 6134\n5aSp 6135\naWxvcw== 6136\nIGZ1bmRpbmc= 6137\nIHZlbg== 6138\ndWFu 6139\nIE1hc3Rlcg== 6140\nIE9s 6141\nIEZyZQ== 6142\nIHlhcA== 6143\nIFNpcg== 6144\nc2No 6145\nIG1pc3Rha2U= 6146\nYW1hbg== 6147\nIGRpbm5lcg== 6148\nIFdhc2hpbmd0b24= 6149\nIG9yZ2FuaXphdGlvbnM= 6150\nINC20LU= 6151\nYXZpbmc= 6152\nIHbDrQ== 6153\nIGJpcnRoZGF5 6154\nIGJlYXI= 6155\nINmB 6156\nIGFmZm9yZA== 6157\nIHJldmVu 6158\nIHJlbGF0aW9uc2hpcHM= 6159\ncm91Z2g= 6160\nIFRpbWU= 6161\nIHRhZw== 6162\nIFN1bg== 6163\ndWFyeQ== 6164\nIFBv 6165\nY2Fy 6166\nYWJpbGl0aWVz 6167\nIHByaXNvbg== 6168\nIGxpYw== 6169\n7KCV 6170\naWRkZW4= 6171\nIHNwZWNpZXM= 6172\n6bs= 6173\nIGZpcm0= 6174\nIHNjb3Jl 6175\nIGRpdA== 6176\nIHNwZWN0 6177\nIHBlbA== 6178\nIGNvbXBsaWNhdGVk 6179\n5qij 6180\nIHJhbms= 6181\nIG9wcG9zaXRl 6182\nIHBpY2tlZA== 6183\nINC60L7QvQ== 6184\nZWxlcg== 6185\nIG1pZw== 6186\nIFNs 6187\nIE5ldA== 6188\nIG5lY2s= 6189\nIEZyYW5jZQ== 6190\nIHRlY2huaWNhbA== 6191\n4Lih 6192\nIG1pbGVz 6193\nIHByaW1hcnk= 6194\nIHNlaW4= 6195\nc2Vz 6196\nIGxhdWdocw== 6197\nYnJh 6198\nxZtjaQ== 6199\ncmlhZ2U= 6200\nIG5pYw== 6201\nZXRlcnM= 6202\nIMOq 6203\nb2xvZ2llcw== 6204\nIElT 6205\ncmFk 6206\ndWRv 6207\nxLFuZA== 6208\nbWFy 6209\nIGV4Y2g= 6210\nIGNvbXBldGl0aW9u 6211\nIGF1c3Np 6212\nIFNlcnY= 6213\nIHJlbnQ= 6214\nIGNob2NvbGF0ZQ== 6215\nIHdpZWRlcg== 6216\nIG5lYXJseQ== 6217\nIHNwZWVjaA== 6218\nIHVuYw== 6219\nIHBhcmFt 6220\nIEJyaXRpc2g= 6221\nIHJlbWFpbg== 6222\n4LiB 6223\ndXJ0 6224\nINi5 6225\nIGNyYWNr 6226\nYWlscw== 6227\nIHByb21pc2U= 6228\nIHBheWluZw== 6229\nacOf 6230\nIGFkYXB0 6231\n0LDQu9Cw 6232\nIG1vdmllcw== 6233\nIHdpcmU= 6234\nn6w= 6235\n5pyD 6236\nIHRlcnJpYmxl 6237\nIHPDsw== 6238\nIHBlcmZlY3RseQ== 6239\n5ZGi 6240\nb3JkaW4= 6241\nIGrDoQ== 6242\nIGltcG9zc2libGU= 6243\nIFRocmVl 6244\nIG5o 6245\nIHR1cm5pbmc= 6246\ncnVt 6247\nIEJlbA== 6248\naWdn 6249\nIHJlc3BvbnNpYmxl 6250\n0LjQuQ== 6251\nIGluY3JlZGlibHk= 6252\nd2k= 6253\naWFubw== 6254\nIGh1bWFucw== 6255\nIMOH 6256\nIHNldHRpbmdz 6257\nIGpveQ== 6258\nb290 6259\nIGRlYWxpbmc= 6260\naWxsZWQ= 6261\nIHN1cnJvdW5k 6262\nIGZvbGxvd2Vk 6263\nIHBvc3NpYmx5 6264\nIGluaXRp 6265\nc3Rlbg== 6266\nIHByb3M= 6267\nIGNhbmRpZA== 6268\nIGFzc2lnbg== 6269\nIHZpb2xlbmNl 6270\nV2VsbA== 6271\nIHJpc2U= 6272\nUFM= 6273\nIHRhbWLDqW0= 6274\nIOuTpA== 6275\naWFuY2U= 6276\neWFu 6277\nIGF1ZGlv 6278\nIEJldA== 6279\nIEFtZXJpY2Fucw== 6280\nIEFzcw== 6281\naXNjaGVu 6282\n7J6F 6283\nIHVsdGltYXRlbHk= 6284\nIHBvbGlj 6285\nIG1ham9yaXR5 6286\n6YCZ5YCL 6287\nIEZpbmFsbHk= 6288\nZXJhcA== 6289\nIGd1YXJk 6290\nIE1BVFQ= 6291\nIGJyb3du 6292\n0LzQuA== 6293\nIGNoYQ== 6294\nIEhvbHk= 6295\nIG5lcnZvdXM= 6296\naXBwaW5n 6297\nxJlk 6298\nIFNh 6299\nk5zr 6300\ntoA= 6301\nbGll 6302\n55yf 6303\nIG51Yw== 6304\nIEFwcg== 6305\n6Zs= 6306\nIEtvcmVh 6307\nZWdv 6308\nIENhbmFkYQ== 6309\nIGvDtm5uZW4= 6310\nIGNvbXBhcg== 6311\nIGdhbno= 6312\nIE1haXM= 6313\nIHRoZW1l 6314\nIGtp 6315\nIGRyYXdpbmc= 6316\nYXpvbg== 6317\nIE9mZg== 6318\ndHQ= 6319\nIFdpbmQ= 6320\nIHRvZG9z 6321\nIG9idmlvdXM= 6322\n0L3QsNGP 6323\nSU0= 6324\nINCg 6325\nd2VsbA== 6326\nIGJsb3c= 6327\nIGhvb2s= 6328\nIGNpcmNsZQ== 6329\nIOuztA== 6330\nIGFyY2hpdGVjdA== 6331\nIEty 6332\nIGPDsw== 6333\nIHByb3RlY3Rpb24= 6334\nZWdh 6335\n5Yc= 6336\nIHdhdGNoZWQ= 6337\nIGFuc3dlcnM= 6338\nIGRpZXQ= 6339\naXZv 6340\nIHBvd2Rlcg== 6341\nIHlvdXJz 6342\nIGhpZ2hlc3Q= 6343\n54K6 6344\nRkY= 6345\n5bo= 6346\nIGJveXM= 6347\nw7Z5bGU= 6348\nIGx1bmNo 6349\n6Kyd 6350\nIElJ 6351\nIHNldHM= 6352\nIG1vbGU= 6353\n24E= 6354\nIHdpbnRlcg== 6355\nIGx1Y2t5 6356\nIHJlc3BvbnNpYmlsaXR5 6357\nIHNpZ25hbA== 6358\nIHdvbmRlcmluZw== 6359\nIGF4 6360\nIGNvb2tpbmc= 6361\n0L7QstC+0YA= 6362\nbGVn 6363\nINC/0L7Rgg== 6364\nIHN1cnByaXNl 6365\nIGRlbW9jcg== 6366\nIGxvb3A= 6367\nIGphZw== 6368\nIGN1cmlvdXM= 6369\nIG1hcmtldGluZw== 6370\n0J0= 6371\nYXJvbg== 6372\nIEFwcGxl 6373\nIHZpcnR1YWw= 6374\nIDE5OA== 6375\nbm9vbg== 6376\nIE1ldA== 6377\n0L7RgdGC0L4= 6378\n0L7QsdGL 6379\naXR1 6380\nIEF3 6381\nIGJ1eWluZw== 6382\nIHJlc3RhdXJhbnQ= 6383\nIEJ1ZA== 6384\nIGRvdWJ0 6385\nIGdyYW50 6386\nIHZlcmQ= 6387\nIGNhc2g= 6388\nIGZhY3VsdHk= 6389\nVGhhdA== 6390\nIEVpbg== 6391\n5aSa 6392\nIHdlZA== 6393\naXRuZXNz 6394\nIE1hZw== 6395\nbmVs 6396\nIG5hcnI= 6397\nIGFjY2lkZW50 6398\nIG1lZGl1bQ== 6399\nZW1lbnRz 6400\nIGNyb3c= 6401\nbmlnaHQ= 6402\n7J28 6403\n5Lmf 6404\nIGxpYnJhcnk= 6405\n0LDRjtGC 6406\nIHRhbWJpw6lu 6407\nIHJlZmVyZW5jZQ== 6408\nIGZvdXJ0aA== 6409\naG91c2U= 6410\ndmVudGlvbg== 6411\nIGZpbGxlZA== 6412\nIENvdXI= 6413\naWJy 6414\nIG5n 6415\nIGRldmVsb3Bpbmc= 6416\nIHByb3ZpZGVz 6417\nIHBvbGw= 6418\nIHRyYWZmaWM= 6419\nYXJlbnRseQ== 6420\n4K6f 6421\nIGZvcm1z 6422\nIGNsaWVudA== 6423\nIGdlbnRsZQ== 6424\nIG11c3M= 6425\nIENvbmdyZXNz 6426\nIEluZGlhbg== 6427\nY2Vhbg== 6428\nIHBpbA== 6429\nIGN6eQ== 6430\nc3Rvb2Q= 6431\ndXR5 6432\nIG7DpA== 6433\nIHNwZW5kaW5n 6434\nIGNvbnN0cnVjdGlvbg== 6435\naW5hdWRpYmxl 6436\nIOuniA== 6437\niOustA== 6438\nIOyDnQ== 6439\nb21h 6440\nb3Nlbg== 6441\nYWdv 6442\nIGxhcmdlc3Q= 6443\n44WL44WL 6444\nIHVuaXZlcnNl 6445\nYmVz 6446\nb3Nh 6447\nINC10LPQvg== 6448\nIGR1ZGU= 6449\nIE1BUg== 6450\nIGluZGVlZA== 6451\nzrXOuQ== 6452\nIG1hbmFnZWQ= 6453\nIFNob3VsZA== 6454\nU28= 6455\nIGFwcGxpZWQ= 6456\nIGZhaXJseQ== 6457\nIERlbg== 6458\nIGFuYWx5 6459\nIGNvbnN0YW50bHk= 6460\n0YHQvw== 6461\nSG93 6462\nIFNheQ== 6463\nZW5jaWVz 6464\nIFBD 6465\nIGVnZ3M= 6466\n4K6w 6467\nIGV0aA== 6468\nIEVudMOjbw== 6469\naW5hcg== 6470\naW90 6471\nIGN6 6472\nIEV1cm9wZWFu 6473\n44GI 6474\nIEFN 6475\nIGPDoQ== 6476\nIHJhZGlv 6477\np4w= 6478\nIGhpZGU= 6479\n5LuK 6480\nIFN0YXJ0 6481\nIGNsdWI= 6482\nIEhvcGU= 6483\nIGVmZm9ydHM= 6484\nbHVzaW9u 6485\nIGNpdGllcw== 6486\naG9uZQ== 6487\nIHJlYWNoZWQ= 6488\nIGd1aWQ= 6489\ncm9pZA== 6490\nIGhhcm0= 6491\nIGN1dHRpbmc= 6492\nIGJ1bA== 6493\nMTg= 6494\naWVzdA== 6495\nIE1leA== 6496\nIGlyb24= 6497\n55+l 6498\nIGFmdGVybm9vbg== 6499\nIGhhbGw= 6500\nIHByenk= 6501\nIGdvc2g= 6502\nIGluZmx1ZW5jZQ== 6503\nINCy0LjQtA== 6504\nIGluY3JlYXNlZA== 6505\nIE1pbmlzdGVy 6506\nIGRpc2Np 6507\nIFBldGVy 6508\nIHZlcnQ= 6509\nIG1lbnU= 6510\nIHNlbGxpbmc= 6511\ndXJhbGx5 6512\nIHF1b3Rl 6513\nIMKh 6514\nIGNvbnRpbnVlcw== 6515\nbXByZQ== 6516\nIMWfZXk= 6517\naXR1dGlvbg== 6518\nINC90LDRgQ== 6519\nY2xlcw== 6520\nIEdlcm1hbg== 6521\nY3p5 6522\nINCj 6523\nQmU= 6524\nIGtpdGNoZW4= 6525\nIFRyeQ== 6526\naXBl 6527\nIGljb24= 6528\nYXJw 6529\nIHByb3ZpZGluZw== 6530\nIFRyYW5z 6531\nIHRlY2huaXF1ZQ== 6532\nIGjDpHI= 6533\nIGluZnJhc3Q= 6534\nIHN1c3A= 6535\nw7xjaw== 6536\naWNpcA== 6537\nINCV 6538\nIGNpbg== 6539\n7Ja06w== 6540\nIHByeg== 6541\nIGNvbXBvbmVudA== 6542\nIGJ5ZQ== 6543\nIEJpYmxl 6544\naXplcg== 6545\nQ2g= 6546\nIHNvbHV0aW9ucw== 6547\nIGFjY29tcGw= 6548\nIDIwMTY= 6549\nSUU= 6550\nIFRh 6551\nIGFzc3VtZQ== 6552\nIGxpcXVpZA== 6553\nIOuouQ== 6554\nIHF1YXJ0ZXI= 6555\nIGZlbWFsZQ== 6556\nIFRoaW5r 6557\nIHN0YXR1cw== 6558\naXR1dGU= 6559\nIGNvYWNo 6560\nIHJlaW4= 6561\nIGNvbWJpbmF0aW9u 6562\n6Lc= 6563\nIFRlcg== 6564\nIG9iamVjdHM= 6565\nIGRpc3RyaWN0 6566\nIG1ha2V1cA== 6567\nIG11cmRlcg== 6568\nd2Fz 6569\nZmVu 6570\nIGJvd2w= 6571\nIHB1Ymxpc2hlZA== 6572\nIHNwb3J0cw== 6573\n44Gh 6574\nIGlkZW50aXR5 6575\nIHNlZW1lZA== 6576\nIGFjdGluZw== 6577\n0LvRjg== 6578\ncml4 6579\nIHVwbG9hZA== 6580\nIGhhc3Q= 6581\nIGJvYXQ= 6582\nIE1vZA== 6583\ncmlv 6584\nID0= 6585\nIGN5Y2xl 6586\nr7g= 6587\nIGxvdWQ= 6588\ndXN0ZWQ= 6589\nY29taW5n 6590\nIDIwMTc= 6591\nIG9udA== 6592\nIGxlZ2lzbA== 6593\nIHN0cnVjdA== 6594\nIFNvbWV0aGluZw== 6595\nIGNvbmZsaWN0 6596\nIHVwcGVy 6597\nIG1hbmFnZXI= 6598\nIG1vcnQ= 6599\nIGZyYQ== 6600\nIMSw 6601\nIE1pa2U= 6602\nIFdvcms= 6603\nIG7Dsw== 6604\ncGhlcmU= 6605\nIOyCrOs= 6606\nIExhbmQ= 6607\nIGZpbHRlcg== 6608\nIHByb21vdA== 6609\n5rA= 6610\n5pmC 6611\nlbw= 6612\nIHJlY29yZGluZw== 6613\n150= 6614\nIGFzc29jaWF0ZWQ= 6615\nIGZ1ZWw= 6616\ndW5kZXI= 6617\nIGVsZWN0aW9u 6618\nIGVtcGxveWVlcw== 6619\nIENvbXA= 6620\n0YDRg9Cz 6621\nIFdv 6622\ncm9s 6623\nIHNhdmVk 6624\nIEhvbg== 6625\nIFZp 6626\n5YiG 6627\nYWNh 6628\ncHJldA== 6629\nIHdldA== 6630\nIHN0dXBpZA== 6631\nIGxhZA== 6632\nIGZlc3Q= 6633\nIHdha2U= 6634\nINC40L0= 6635\nIGdyZWF0ZXN0 6636\nIEppbQ== 6637\nIHNlcmlvdXNseQ== 6638\nIOy5 6639\nIGZlZWxpbmdz 6640\nIDMwMA== 6641\naWF0aW9u 6642\nIGJlYXV0eQ== 6643\nIOyemA== 6644\nIHNhbg== 6645\nk6A= 6646\nIC0o 6647\nIGNvbnNjaW91cw== 6648\nINC00LXQuw== 6649\nYnll 6650\n55k= 6651\nTWFu 6652\nIGxldHM= 6653\nIHNob2Vz 6654\neWQ= 6655\n5LmI 6656\nIGRpc2FwcGU= 6657\nIENvdW50eQ== 6658\nIFNjb3R0 6659\nIGJ1dHQ= 6660\nIGFxdcOt 6661\nIGNvbmZpZw== 6662\ncmVzcG9uZA== 6663\nTEFVR0g= 6664\nqeuLiOuLpA== 6665\nIGRpdmlkZWQ= 6666\nIGFjcXU= 6667\nIHpvbmU= 6668\nIGtvbW0= 6669\nYcOnw6Nv 6670\n7Kec 6671\nY3V0 6672\nIDIz 6673\nIG1heGltdW0= 6674\ncm9n 6675\nIHJ1bnM= 6676\nIGNvbXBvbmVudHM= 6677\nIGFycml2ZWQ= 6678\nIGNvbmZpZGVudA== 6679\n0YDQvtCy 6680\nIGhlaWdodA== 6681\nIHByb2NlZA== 6682\nRU0= 6683\nINCt0YLQvg== 6684\nIE1lbg== 6685\nIHRhbGtz 6686\nIGNvbmZpZGVuY2U= 6687\nIENocmlz 6688\nIGxlYWRz 6689\nIG5vc2U= 6690\nZmFsbA== 6691\nYmI= 6692\nIE5vdGhpbmc= 6693\naXNlcg== 6694\nIGluZGVwZW5kZW50 6695\nIG1pbm9y 6696\nIHN5bQ== 6697\nbGVu 6698\nY2llbmNl 6699\nIGZhc2hpb24= 6700\nIHNleHVhbA== 6701\nIGJ1bg== 6702\naGVyZQ== 6703\nIHNvaWw= 6704\nIGRpZXNl 6705\nIHNoYXA= 6706\nIGVtcHR5 6707\nIGpvdXJuYWw= 6708\nYWdvbg== 6709\nIFRoZWly 6710\nIHdlZWtlbmQ= 6711\nw610 6712\nIGVycm9y 6713\nIG5hcg== 6714\nw7g= 6715\n6Kk= 6716\nYW5jeQ== 6717\nIOyVig== 6718\nIGZvcmVzdA== 6719\nIGhhY2Vy 6720\nIG1pc3NlZA== 6721\n44GV 6722\n5Y+v5Lul 6723\nIGV2aWw= 6724\nIHN0b3JhZ2U= 6725\nIHNpbmdpbmc= 6726\naW5oYQ== 6727\nIGtub2Nr 6728\nIGltcHJlc3M= 6729\nINC+0YfQtdC90Yw= 6730\nIEdvbGQ= 6731\nIFN1cg== 6732\nIFBvcnQ= 6733\n5Y67 6734\nIExvbmQ= 6735\nIGZhemVy 6736\nb3R5 6737\nb3Rv 6738\nIGFueA== 6739\nIFdpbGxpYW0= 6740\nIGV4aXN0aW5n 6741\ncGxhY2U= 6742\nIENE 6743\nzrM= 6744\nIENvbGxlZ2U= 6745\nbG9y 6746\nIEVhc3Q= 6747\nc2Vu 6748\nZmFjaA== 6749\nb2Z0 6750\nIGV4cGVyaWVuY2Vk 6751\nIGxvdmVz 6752\naW1t 6753\nIHBvbHk= 6754\nIGVzc2U= 6755\n7KQ= 6756\nIEdyYW5k 6757\n6Kc= 6758\nY2hlcg== 6759\nIHZpY3RpbQ== 6760\nIEdlcw== 6761\n0LvRjA== 6762\ndmlzaW9u 6763\nIHRhbGw= 6764\nIGxlbnM= 6765\nINC30L3QsA== 6766\nIEJvdGg= 6767\nIOyy 6768\nIHN1c3RhaW4= 6769\nIGFyZ3VtZW50 6770\nIGZhY3RvcnM= 6771\nIGF1dG9tYXRpY2FsbHk= 6772\nIGZydWl0 6773\nIGxpYmVy 6774\nIGFsZQ== 6775\nIFByZXNz 6776\nIEJh 6777\nINCz0L4= 6778\nIGh1bmRyZWRz 6779\ndGhhdA== 6780\nIFJpY2g= 6781\nIHJlY2lwZQ== 6782\nIElU 6783\n6Ic= 6784\n4bql 6785\nIGRlc2NyaWJl 6786\nIGRyaXZlcg== 6787\nIE9jdA== 6788\nIE1hdA== 6789\n0LTQtQ== 6790\nIG1lYWw= 6791\nIGxhdGVzdA== 6792\nIHRoZXJhcA== 6793\nIGNvbXBhcmU= 6794\nIEFtYXpvbg== 6795\nIOyigA== 6796\nIFJ1c3NpYQ== 6797\nIHN0cmluZw== 6798\nIGth 6799\nIENvbW11bg== 6800\nIGRpYQ== 6801\nSXM= 6802\nIG1pbGxpb25z 6803\nIGNvcnBvcg== 6804\nIGNvcnJlc3BvbmQ= 6805\nIGZpeGVk 6806\nIEpvZQ== 6807\n2Y4= 6808\nIHZpZXdz 6809\nIHJpdmVy 6810\nIHN0dWRpbw== 6811\naWdnZXI= 6812\nIGZsYXZvcg== 6813\nIHByZXNlbmNl 6814\nIHVuaXRz 6815\nIHNhdmluZw== 6816\nYXZvdXI= 6817\nIHBlc3Nv 6818\nb3JpdGg= 6819\nIGhlcnM= 6820\nIE5hdA== 6821\nYXNpb24= 6822\nIEZyYW5r 6823\n0L7RiA== 6824\nxYJ5 6825\n7YQ= 6826\nIGVpbmVt 6827\nIGZ1bmN0aW9ucw== 6828\ndW1hbg== 6829\nIG5vcnRo 6830\nIOyghA== 6831\nIGhvcnNl 6832\ndmlk 6833\nIHBsZWFzdXJl 6834\n0LDRiA== 6835\nw6llcw== 6836\naW5kYQ== 6837\nIHRhaWw= 6838\nIGV4cGxvcmU= 6839\nU1Q= 6840\nIGNvbW1lcmNpYWw= 6841\nIER1cmluZw== 6842\nYXJs 6843\nXTo= 6844\nZml0 6845\nIHJhdGVz 6846\n5rM= 6847\nTVVTSUM= 6848\nIGhvdXNpbmc= 6849\nIGVpbmVy 6850\nIHNpdHVhdGlvbnM= 6851\n5os= 6852\nIGRlY3Jl 6853\nIGFwcHJvcHJpYXRl 6854\n0LXQvdC90L4= 6855\nJS4= 6856\nIGJhYw== 6857\nIHdhdA== 6858\nZW5zaXR5 6859\nw6Ro 6860\na25vd24= 6861\naXR6 6862\nIGVtb3Rpb25hbA== 6863\nZXJ2YXRpb24= 6864\nIGJsaW5k 6865\nMTY= 6866\n7YM= 6867\n5aSn5a62 6868\nIGpvaW5lZA== 6869\nIGxvY2F0ZWQ= 6870\nINGB0Lw= 6871\nYWRhcw== 6872\nYmVyZw== 6873\nIGRlc3M= 6874\nIGRlYXI= 6875\nZWRlbg== 6876\nY29z 6877\nIGFkb3B0 6878\nMTAw 6879\nb3dl 6880\nIENoZWNr 6881\naXNtbw== 6882\nIHNpbXBs 6883\nIGFuZ3J5 6884\nINC80LXQvdGP 6885\nIENhbQ== 6886\nIHBhZA== 6887\nIGF0dGVuZA== 6888\nIHNhbXBsZQ== 6889\n5pel 6890\nIOyb 6891\nIElO 6892\ndWxvdXM= 6893\nIFNhcg== 6894\nIFNob3c= 6895\nIGluZnJhc3RydWN0dXJl 6896\nIEF1Z3VzdA== 6897\nIGxlc3Nvbg== 6898\nIG5pZXQ= 6899\n5o4= 6900\nIGZvaQ== 6901\nIGJyb2tl 6902\ndHI= 6903\n55U= 6904\nIDQ1 6905\nIGdldw== 6906\n0YPQvw== 6907\nYXRp 6908\nIG1haW50YWlu 6909\nIGFydGlzdHM= 6910\naW5nZXI= 6911\n5p2l 6912\nZXJ2ZWQ= 6913\nSUE= 6914\nIGVxdWFscw== 6915\nIG9wZXJhdGlvbg== 6916\naWxseQ== 6917\nIOuCtA== 6918\nIGNyb3dk 6919\nIGludGVybmFs 6920\nIHRlc3Rz 6921\nIFJvY2s= 6922\nIENvbnM= 6923\nIOuEiOustA== 6924\nd2Fy 6925\nIHNvdQ== 6926\nIGNoYXJ0 6927\nIEp1bmU= 6928\nIEFwcmls 6929\nZ2VudA== 6930\nIHZlbnQ= 6931\nIHF1YW5k 6932\nIEtvcmVhbg== 6933\naW1v 6934\n54k= 6935\naWRlcnM= 6936\nIG1vdW50YWlu 6937\n0YHRgtCw0LI= 6938\n5pyI 6939\naWpr 6940\nIGRpc2NvdmVyZWQ= 6941\nIFN1bmQ= 6942\nIFNpbA== 6943\nIHNvbG8= 6944\nwrQ= 6945\nIHNjaG9s 6946\nIEVhY2g= 6947\n57U= 6948\nIGJhcmU= 6949\nIO2M 6950\nIHbDrWRl 6951\nIGluZ3JlZGllbnRz 6952\nIEl0cw== 6953\nnbzqs6A= 6954\nIOyK 6955\nz40= 6956\nIExlZQ== 6957\nIHNjYXJ5 6958\nIHByaW5jaXA= 6959\nIHNwaXJpdHVhbA== 6960\n7IU= 6961\nIEhvbGQ= 6962\n5rKS5pyJ 6963\nIGRlZmluZQ== 6964\nIExlcw== 6965\nIE5vcg== 6966\nIEVuZA== 6967\nIGJsb2c= 6968\nIEdyZWVu 6969\n0LDQtdGC0YHRjw== 6970\ncGFydA== 6971\nZWxlcw== 6972\n5LqL 6973\nIFVuZGVy 6974\nIHBhcnRl 6975\nIDM1 6976\nIHNlY3Rvcg== 6977\nIFNlcHQ= 6978\nIGF1dGg= 6979\n4K6u 6980\nb21pbg== 6981\nIGNsaWVudHM= 6982\nIGNp 6983\nIEZyaWRheQ== 6984\nZXJhcw== 6985\nIHR3ZQ== 6986\ndWxhdGVk 6987\nIGN1bHR1cmFs 6988\nINGB0LLQvg== 6989\nIOuNlA== 6990\nIMO6 6991\nIHBhcmNl 6992\n4K6y 6993\nIHRyYWRpdGlvbg== 6994\nIGp1ZGdl 6995\nIEdlbmVyYWw= 6996\nIGRldGVybWluZQ== 6997\nIElzbg== 6998\nIFBM 6999\nbmVhdGg= 7000\nIG1hdHRlcnM= 7001\n7ZW07A== 7002\nIV0= 7003\n0LDRhQ== 7004\nIHBvb2w= 7005\nIHZhcmlhYmxl 7006\nIHZhY2NpbmU= 7007\nIGNhdXNlZA== 7008\nIHdlc3Q= 7009\nIFllcA== 7010\nZmFzdA== 7011\nIHBoaWxvcw== 7012\naG9yYQ== 7013\nIGNvbnRpbnVlZA== 7014\nIHVuZm9ydHVuYXRlbHk= 7015\n44GN 7016\n5pU= 7017\nIGZsaWdodA== 7018\nIHdyYXA= 7019\nIGh1aA== 7020\nIEFic29sdXRlbHk= 7021\nIHBpbms= 7022\nIHJlbWFpbnM= 7023\nIG7DqQ== 7024\nIGZsZQ== 7025\nIFNvbA== 7026\nIGxvc2luZw== 7027\nIGFsZ29yaXRo 7028\nIHJlcXVpcmVz 7029\nIGZvdW5kYXRpb24= 7030\nIEJ1cg== 7031\nIHByb2Zlc3Npb24= 7032\nIE1pZA== 7033\nIOutkA== 7034\nY2Fu 7035\nIE1pbA== 7036\nIHlvdW5nZXI= 7037\nIGFwcGVhcnM= 7038\ndGVybQ== 7039\n7ZWY6rOg 7040\nYWNsZQ== 7041\nIExvbmRvbg== 7042\nIGVuZ2luZWVyaW5n 7043\n4Lii 7044\nIGFkdmVudA== 7045\n7IS47JqU 7046\nIOq4sA== 7047\nIE1hag== 7048\n0YDQtdC8 7049\naW5ndQ== 7050\nIFVL 7051\ndXJv 7052\nc3Bl 7053\nIHRlbnQ= 7054\nIHJlcG9ydGVk 7055\nIEFM 7056\nSGV5 7057\nIOunkA== 7058\nIGRlbnQ= 7059\nIEF1c3RyYWxpYQ== 7060\nIEphbnVhcnk= 7061\ns7Q= 7062\nYWd1ZXM= 7063\nYXJzaA== 7064\ncmln 7065\nIHRpZW5l 7066\n4Lij 7067\nzq4= 7068\nIG1hY2hlbg== 7069\ndW50ZQ== 7070\n0YPRgQ== 7071\nIGVsZWN0cg== 7072\nIHR1dG9yaWFs 7073\nIHBsYWNlZA== 7074\nIOydtOqxsA== 7075\nIENvdW5jaWw= 7076\n7ZaI 7077\nsOumrA== 7078\nYWhyZW4= 7079\nIOq3uOuemA== 7080\nIHByb3Zl 7081\nZm9s 7082\nIHF1ZXI= 7083\nIGNoZWFw 7084\nIEZhdGhlcg== 7085\nIFBvd2Vy 7086\nk5w= 7087\nIHB1cnM= 7088\nIGVzcA== 7089\nIEJyZQ== 7090\n6riw6w== 7091\nb21hcw== 7092\n5oOz 7093\n0LjQu9GM 7094\nIGdlaHQ= 7095\nb3N0ZXI= 7096\n6rO8 7097\nIGZpbGVz 7098\nINCn 7099\nYmVsbA== 7100\nIHdob20= 7101\nIOuY 7102\nIGV4Y2VsbGVudA== 7103\nIGRhdGFi 7104\nIGfDtg== 7105\nIOynhOynnA== 7106\nIGJlbGllZg== 7107\namV0 7108\nIGphY2s= 7109\nIHN3aW0= 7110\ncmlhbA== 7111\ndW1pbg== 7112\nYXVj 7113\nIHNvbGw= 7114\nIGVzc2VudGlhbA== 7115\n7ZWY64qU 7116\nIGV2b2w= 7117\nY2hhZnQ= 7118\nYWluZQ== 7119\ndGhsZXQ= 7120\nIGluY29y 7121\nIHJlcG9ydHM= 7122\nIGRlZmluaXRpb24= 7123\na2Vs 7124\nIGNpcmN1bQ== 7125\nIHByb2R1Y2Vk 7126\nINeb 7127\nYW50aWM= 7128\nbmV0 7129\nIGF3YXJk 7130\nIGR1cmNo 7131\nIHRyYW5zcA== 7132\nIG1hbGU= 7133\npqzr 7134\nIG1vb24= 7135\nIEdlb3JnZQ== 7136\nIGZseWluZw== 7137\nacOz 7138\nIHNvdXJjZXM= 7139\nIHBsZW50eQ== 7140\nIERlbW9jcg== 7141\nUk8= 7142\nIDAw 7143\nIHNlY3VyZQ== 7144\nIEJpcg== 7145\ncmFpbg== 7146\nIHp1cg== 7147\nIGVmZmljaWVudA== 7148\nIHJlcGVhdA== 7149\nIG1ldGhvZHM= 7150\nIGNhbG0= 7151\nIGRpc2N1c3NlZA== 7152\nIOyeiOuKlA== 7153\nIHNlcnZlcg== 7154\nYW5pZQ== 7155\nIEluc3RlYWQ= 7156\nIGlkZWFs 7157\nIGNvbnZlbg== 7158\nIGhvcGluZw== 7159\nIFRvcg== 7160\nIGRlcHRo 7161\nIGhlYXZlbg== 7162\nRU5DRQ== 7163\nIGhhYml0 7164\nZ3JhZA== 7165\nIGZsYWc= 7166\nIGluZQ== 7167\nIGto 7168\nIExJ 7169\nIGZhY2luZw== 7170\nIEFV 7171\nIFRpbQ== 7172\nIGdlbQ== 7173\nIEp1bA== 7174\nIGVsYQ== 7175\naXp6YQ== 7176\nIGZlbGxvdw== 7177\nIHF1ZWw= 7178\nIHNwb2tl 7179\nIGNpdGl6ZW5z 7180\ndWdl 7181\n6YO9 7182\nIHBhZ2Vz 7183\nIGZhc2M= 7184\nIHJlbGlnaW91cw== 7185\nYXRlbg== 7186\nIGNoYXB0ZXI= 7187\nIFZhbA== 7188\nIGNvbnN1bHQ= 7189\nIE1pbGw= 7190\nZ2w= 7191\nb3Blcg== 7192\nIGluZmlu 7193\nIG1hcnJpYWdl 7194\nIG1lZGljaW5l 7195\nINC00LI= 7196\nIGRvZ3M= 7197\nIGluc3RydW1lbnQ= 7198\nIEV4YWN0 7199\nw6Fu 7200\nIDIwMjE= 7201\nIGZlcg== 7202\nIHdlYWx0aA== 7203\nIGdyYWRl 7204\n0YvRhQ== 7205\nIGNyaW1l 7206\nIHRocmVhZA== 7207\nIGVzc2E= 7208\nIHdpbmU= 7209\nY29ob2w= 7210\ncGhh 7211\n4LiH 7212\nb2d1ZQ== 7213\nIGluc3VyYW5jZQ== 7214\nYXJyYXRvcg== 7215\nIFNlcHRlbWJlcg== 7216\nIHZpZA== 7217\nIFNwaXJpdA== 7218\nIGdlc3Q= 7219\nIFJ1c3NpYW4= 7220\nIHByb3BlcnRpZXM= 7221\nIGFydGljbGU= 7222\nIHVuZGVybmVhdGg= 7223\neWVy 7224\nIGpvaW50 7225\nIHJlbGF0aXZlbHk= 7226\nIGluY2g= 7227\nIGRlc3BpdGU= 7228\nIEdyZWU= 7229\nIGNsYXNzaWM= 7230\nIHN1cHBvcnRpbmc= 7231\nIGluc3RydWN0 7232\nbHVzaXZl 7233\nIGRpYWdu 7234\n5oo= 7235\nIGFkbWluaXN0cmF0aW9u 7236\n0LDQsdC+0YI= 7237\nIE9wZW4= 7238\n5omA5Lul 7239\nINC/0L7Qug== 7240\nIGRvbGxhcg== 7241\nIGNvbnNlcXU= 7242\nb2Jlcg== 7243\nIEdlcm1hbnk= 7244\nIHRlcnI= 7245\nIFFV 7246\nINCT 7247\n574= 7248\nIHN0cm9uZ2Vy 7249\nyZk= 7250\nINmK 7251\nIGlQaG9uZQ== 7252\nIGZhYnJpYw== 7253\nw7xo 7254\nIGVuZW0= 7255\n5q8= 7256\nIHN1YnQ= 7257\nRUU= 7258\nb25kZQ== 7259\nIGNyZXc= 7260\nIHJlbW92ZWQ= 7261\nIGxhZHk= 7262\nIHBvdGVudGlhbGx5 7263\nINCd0L4= 7264\neWFs 7265\nIHN5bXB0 7266\nIGFybXk= 7267\nIGludHJvZHVjZWQ= 7268\ndGVz 7269\nIGFzcGVjdHM= 7270\nMTQ= 7271\nIExvdQ== 7272\nICk= 7273\nIGRlcGxveQ== 7274\ncGV0 7275\nIGhhbg== 7276\nIFdhdGNo 7277\nIHdlYXBvbnM= 7278\nIHBoZW4= 7279\nIHJlZ2lzdGVy 7280\nIGVpbmZhY2g= 7281\nIHNwb3J0 7282\nIGJyaWRnZQ== 7283\nIGlubmVy 7284\nIG1pbmltdW0= 7285\nIHdpdG5lc3M= 7286\nIGVzbw== 7287\nIHZpbGxhZ2U= 7288\nIG93bmVy 7289\npqzqs6A= 7290\nIHNjcmVhbQ== 7291\naWxlZA== 7292\nIHBpdGNo 7293\nYnJ1 7294\nIGFkdmFuY2U= 7295\n5LiN5piv 7296\nIHN1cHBvc2U= 7297\nIEF0dA== 7298\n0LXRgtGB0Y8= 7299\nIGRpZmZlcmVuY2Vz 7300\nYWtlZA== 7301\nIGludGVycHJldA== 7302\nw6Y= 7303\naWVuZG8= 7304\nIGFic29s 7305\nINCx0YPQtNC10YI= 7306\nIOuy 7307\nIHRyaWFs 7308\nIHRoaW5rcw== 7309\nbHlpbmc= 7310\nY2VwdGlvbg== 7311\nIEFmcmljYW4= 7312\nIGNoZW1pY2Fs 7313\nIHRhcGU= 7314\nIGNvbnZlcnNhdGlvbnM= 7315\nIGRpc3RyaWJ1dGlvbg== 7316\ndGk= 7317\nIEFJ 7318\nIGZsYXNo 7319\nIHVuZGVyc3Rvb2Q= 7320\nIEdvdmVybm1lbnQ= 7321\n5bCP 7322\nIT8= 7323\nIFNr 7324\n6rGw6w== 7325\ncmllcg== 7326\nVFM= 7327\nIEFjY29yZGluZw== 7328\n0Y7Rgg== 7329\nIHNwb25z 7330\n0YLQvtCx0Ys= 7331\nIHZhbHU= 7332\nZXJlbQ== 7333\naWNodGln 7334\nIHJlc2lzdGFuY2U= 7335\nIEdhbA== 7336\nZ2VyeQ== 7337\nIGJlZ2lucw== 7338\nIGFkdmFuY2Vk 7339\nIHJlbGV2YW50 7340\nIHBvbGl0aWNz 7341\nIEZhbQ== 7342\nIMOnb2s= 7343\nIE5ldmVy 7344\naWxsaW5n 7345\nIGZvb3RiYWxs 7346\n0LjQuA== 7347\nIElE 7348\nIEFmcmljYQ== 7349\nIGZpbmdlcnM= 7350\nINCx0L7Qu9GM 7351\nIMOh 7352\nIGNsaXA= 7353\nIExhdA== 7354\n44KE 7355\nIOyngOq4iA== 7356\nZXNzZQ== 7357\nIHZvb3I= 7358\nIGFzaWRl 7359\n5p4= 7360\nIHRvd2FyZA== 7361\nIGJhdA== 7362\nIHZhbGlk 7363\nIE1lbnM= 7364\nIGNvbXBsZXRlZA== 7365\nxLHEnw== 7366\nIHBvZGNhc3Q= 7367\nIEJvbg== 7368\n25I= 7369\nIEp1bHk= 7370\naWxh 7371\nIHBhY2thZ2U= 7372\nIHB1bGxlZA== 7373\nY2hhcg== 7374\nIE1lbA== 7375\nb2lz 7376\nIHNvdXRo 7377\nIOuU 7378\nIGltcG9ydGFuY2U= 7379\nIHB1c2hpbmc= 7380\nIGlzb2w= 7381\nIHN0YW5kcw== 7382\nY2lsbA== 7383\n5Lw= 7384\nIPCf 7385\nb3Jp 7386\n6rCB 7387\nIGhvbWVz 7388\nIGNvbmNlcm5z 7389\nIGJpeg== 7390\n5b0= 7391\nYmll 7392\nIGJpcw== 7393\nIGdlYXI= 7394\nIE1T 7395\nIGh1bg== 7396\nIE1hdHQ= 7397\n4bqj 7398\nc2V5 7399\nIFNlY3JldA== 7400\nIG9kZA== 7401\nIE1heA== 7402\nb2xseQ== 7403\nZm9yZA== 7404\nIFNI 7405\nIHJlcGxhY2U= 7406\nIG5hdmln 7407\nIGluaQ== 7408\n0LjRjw== 7409\nIGdpYW50 7410\nIG1hbmQ= 7411\nIEhhcHA= 7412\nVElPTg== 7413\nZ3Vu 7414\naWFtbw== 7415\n7J6F64uI64uk 7416\nIGdhcA== 7417\nIMOqdHJl 7418\nIGNsYXNzcm9vbQ== 7419\nIGh5cA== 7420\nYWtp 7421\n6K4= 7422\naXN0ZXJz 7423\nYWNrcw== 7424\nINGB0L4= 7425\nIGJ1Zw== 7426\nIGdyYXY= 7427\nYW1pbg== 7428\nIGV2ZXJ5ZGF5 7429\nIOyhsA== 7430\nIGdhcmRlbg== 7431\nY2VtYmVy 7432\nIGVzdG8= 7433\n5ZeO 7434\n2Kw= 7435\nn7A= 7436\n5YE= 7437\nIHJvbQ== 7438\nIOygnOqwgA== 7439\nIGZhbGxpbmc= 7440\nIGZhdWx0 7441\nZWxseQ== 7442\nIGNoZXN0 7443\nINC70Lg= 7444\nIHBvdGF0bw== 7445\nIGJ1aWxkaW5ncw== 7446\nIG9wZXJhdGluZw== 7447\nIHBhcmU= 7448\nd3I= 7449\nRG9u 7450\nIEZvdXI= 7451\nIHZ1bA== 7452\nIGzDoQ== 7453\nIGZydXN0 7454\nIERhbm4= 7455\nb2xlcw== 7456\nbnlh 7457\nIOy2 7458\nINGA0LDRgQ== 7459\n15s= 7460\nIGHDrQ== 7461\nd29yZA== 7462\nIHdlYXBvbg== 7463\nIG9idA== 7464\nIEZhbGw= 7465\nIFN0ZXZl 7466\nIG1peGVk 7467\nIHBvZGU= 7468\nIEFT 7469\nIExlZw== 7470\nIGRlc2M= 7471\nIHNwbGl0 7472\nIGVtZXJnZW5jeQ== 7473\nIFNpbmc= 7474\nIHByb2ZpdA== 7475\nIHR5cGljYWw= 7476\nIERvbmM= 7477\nIGFubm91bmNl 7478\nIFRleA== 7479\nIHNhY3I= 7480\ndGVybmFs 7481\nIGNvbW1pdHRlZQ== 7482\naWdv 7483\nIGRpYW0= 7484\ncGhhcw== 7485\nIGRlZmU= 7486\nIFByb2Zlc3M= 7487\nIGRlY2w= 7488\n0YPRgA== 7489\nMjI= 7490\nb2xm 7491\nIE1vbmQ= 7492\ndXk= 7493\nIGF5 7494\nIGxlbQ== 7495\nIGxvdmVseQ== 7496\nIENvdWxk 7497\nIGd1YXI= 7498\nSEg= 7499\nIGNhcmVmdWxseQ== 7500\nIExpc3Rlbg== 7501\nINC60YA= 7502\nIHlvdXRo 7503\nIFRoZXJlZm9yZQ== 7504\nIGRyZWFtcw== 7505\nIEplZmY= 7506\nP10= 7507\nIOuI 7508\nREE= 7509\nIGJvZGllcw== 7510\nYXV4 7511\nIHRlY2huaXF1ZXM= 7512\nIG1lY2hhbmlzbQ== 7513\n15M= 7514\nINC+0L3QuA== 7515\nIGRlc2lyZQ== 7516\nw64= 7517\nIFZv 7518\ncXVlcw== 7519\nINGD0LbQtQ== 7520\nIFdob2E= 7521\nIEdhbWU= 7522\nIGhhbA== 7523\nYW5pc2g= 7524\nIHByYWN0aWNlcw== 7525\nNTAw 7526\nIHNvcnRz 7527\ndXBz 7528\nYXRlZnVs 7529\nIGhlcnNlbGY= 7530\nIGd1aXRhcg== 7531\nIHByb3Bvcw== 7532\nIHNpdGVz 7533\nIGJlYWNo 7534\nINei 7535\n56ys 7536\n0L3Rgw== 7537\nIGRyYW0= 7538\nIE5vdmU= 7539\nVkU= 7540\ncmFudA== 7541\nIHBsb3Q= 7542\nIOyXrOq4sA== 7543\nIENh 7544\nIGVzdGFibGlzaGVk 7545\nIDIwMTU= 7546\nIGluc3BpcmVk 7547\nIGFubm91bmNlZA== 7548\n5Liq 7549\nINGC0YA= 7550\nIDI2 7551\nIHZveQ== 7552\nIHRlY2g= 7553\n7KCB 7554\nIHByb2Nlc3Nlcw== 7555\nb250bw== 7556\nIFBhbg== 7557\nIHJhcGlk 7558\naXN0YW4= 7559\nIDE5Nw== 7560\nIHJlbGlnaW9u 7561\nIDI4 7562\nIHNtaWxl 7563\nIGJhYg== 7564\nINqp 7565\nIFZpcg== 7566\nIHNjaGVkdWxl 7567\nIGV4ZWN1dA== 7568\nIHByb24= 7569\n0Y0= 7570\nINCd0YM= 7571\nbXVzaWM= 7572\n7JuQ 7573\nIGdhbg== 7574\n7Iug 7575\nIGRlZmF1bHQ= 7576\nIGJlbQ== 7577\n2Yk= 7578\nIGZvcmNlZA== 7579\nIE9idmlvdXNseQ== 7580\nIHN0b25l 7581\nIHRpZQ== 7582\nIGRyaW5raW5n 7583\nIHNlcnZlZA== 7584\nQ2F1c2U= 7585\nIGNvbmZlcmVuY2U= 7586\nIEV4YWN0bHk= 7587\n44OI 7588\noJw= 7589\n7JmA 7590\nIFJh 7591\nIGZha2U= 7592\nIGRpZmY= 7593\n44Gp 7594\nIGNoYWxsZW5naW5n 7595\nIOykkQ== 7596\nz4c= 7597\n5LuA6bq8 7598\nIGludGVsbGlnZW5jZQ== 7599\ncmV0ZQ== 7600\nIHN0dWR5aW5n 7601\nIGFwcG9pbnQ= 7602\nIHRhbg== 7603\nINC40Lw= 7604\nIGN1cnZl 7605\nIFRlYW0= 7606\nIEF6 7607\nINC30LQ= 7608\nIE11c2lj 7609\nZmllbGQ= 7610\naXJhdGlvbg== 7611\nIGZhaWxlZA== 7612\nIG5vdmVs 7613\nIGRpZmZlcmVudGx5 7614\nIGVzY2FwZQ== 7615\nIFlv 7616\nIE9jdG9iZXI= 7617\nxLF5b3I= 7618\nIGRlc2NyaWJlZA== 7619\nIGNvbnZlcnQ= 7620\nYWNlbWVudA== 7621\nIGhvdGVs 7622\naXNhdGlvbg== 7623\nIHN1aXM= 7624\n44GR 7625\n5a2Q 7626\n5oCO 7627\nIHdhbGtlZA== 7628\nMjAw 7629\nIG5laWdoYm9yaG9vZA== 7630\naXNw 7631\nIExvcw== 7632\nIGhpZGRlbg== 7633\nIDI3 7634\n0LvQtQ== 7635\nIHBocg== 7636\nIElzbGFuZA== 7637\nIFN0cmVldA== 7638\nZW5kYQ== 7639\naGlwcw== 7640\nb3N1cmU= 7641\nIGRlZmluZWQ= 7642\n4Lin 7643\nIHZpZGE= 7644\nIGxhYmVs 7645\nIEV2ZXJ5Ym9keQ== 7646\nIGpva2U= 7647\naWFv 7648\n2KfZhg== 7649\nIGF0aGxldA== 7650\nLi4uIg== 7651\nIEZpcmU= 7652\nRG8= 7653\nIGRlZmVuc2U= 7654\nIGVudGVydGFpbg== 7655\nw6F0 7656\nIHBvbGljaWVz 7657\nIGFsY29ob2w= 7658\nIEVuZ2luZQ== 7659\nIGdhbA== 7660\nIEp1ZA== 7661\nIHZvbHVudGU= 7662\naWNrcw== 7663\nZXRh 7664\nYWd0 7665\nINeV 7666\nIG3Dtg== 7667\nMTM= 7668\nIGVuY291bg== 7669\nIGVo 7670\nIG9yYW5nZQ== 7671\nIGFic29y 7672\nIHNwYWNlcw== 7673\nIE5vdmVtYmVy 7674\n6rWs 7675\naWF0 7676\nIHRhbQ== 7677\nY2tub3c= 7678\nIHN0b3Jt 7679\nIERpcmVjdG9y 7680\nIHByZWdu 7681\nIOydvA== 7682\nINC+0L8= 7683\nIHJlc291cmNl 7684\nIGJhcmQ= 7685\nbmV3 7686\nIERlY2VtYmVy 7687\ndWl0cw== 7688\nIHdlaWw= 7689\nIGNvbnN0cnVjdA== 7690\nc2k= 7691\nbmlj 7692\nIGZsb3Vy 7693\nIHJlc3RyaWN0 7694\nw7x0 7695\nIGVudGlyZWx5 7696\nIGJyZWFraW5n 7697\nZW50bGljaA== 7698\nIHR3ZW50eQ== 7699\nIGNhdXNlcw== 7700\nIGVsZXY= 7701\nIFNwcg== 7702\nIEludGVybmV0 7703\nIGtpc3M= 7704\nIG9wZXJhdGlvbnM= 7705\nc3p5 7706\nIOuK 7707\nIHNjaWVudGlzdHM= 7708\nIGdyb3du 7709\nIG93bmVycw== 7710\nb3V0cw== 7711\nIGNvdXJzZXM= 7712\nIHVzdWFs 7713\nIGlubg== 7714\nIHRyYW5zbQ== 7715\nw7Fv 7716\nIG51ZXN0 7717\n0LrQvtCy 7718\nIGNhdGVnb3J5 7719\nIExpZmU= 7720\nIFBsdXM= 7721\nIGF0bW9z 7722\nd2hpbGU= 7723\nIHJlY29yZHM= 7724\nIGRlxJ8= 7725\n64uk6rOg 7726\nIOyCrOue 7727\nIHJlcXVpcmVtZW50cw== 7728\naW5u 7729\nIGltbWln 7730\nIGRlZXBlcg== 7731\n57Q= 7732\nIGFwcHM= 7733\nIGNvbGxlYWd1ZXM= 7734\nxbx5 7735\nIG9mZmVycw== 7736\nIHTDoQ== 7737\nIGNvbHVtbg== 7738\nbGF1ZA== 7739\nSVI= 7740\nIE1z 7741\nIGV4Y2hhbmdl 7742\nbGFz 7743\nIExhdw== 7744\nIEpvbg== 7745\naXNzZQ== 7746\ncm9nZW4= 7747\nIG1vaQ== 7748\n15c= 7749\nIHNlbmRpbmc= 7750\nIGhlbGxv 7751\n0LXQtQ== 7752\nxZvEhw== 7753\nIHN1Y2NlZWQ= 7754\nIHN1ZmZlcmluZw== 7755\nIGFkdmVydA== 7756\nIOyjvA== 7757\n55+l6YGT 7758\nIHJlY28= 7759\nxLFuxLE= 7760\nINC60L7QvA== 7761\nYWxsZXk= 7762\nIGZhaWx1cmU= 7763\naWVq 7764\nIOuVjA== 7765\nIGRydWdz 7766\nIGN1YW5kbw== 7767\nIOyWtOuW 7768\nIEFib3V0 7769\nIHF1YW5kbw== 7770\nOTA= 7771\nIEZlZA== 7772\nMTc= 7773\nU2g= 7774\naW5obw== 7775\nIFN1bmRheQ== 7776\nIFBoaWw= 7777\nIGFjYWRlbWlj 7778\nIEluYw== 7779\nIG1haW50ZW4= 7780\n5Ye6 7781\nIHJld2FyZA== 7782\nZXJk 7783\nIGNvbW1pdHRlZA== 7784\n7Iqk 7785\n0LPRgA== 7786\nIHN0YW5kYXJkcw== 7787\nIGthbA== 7788\nIGludGVudGlvbg== 7789\nIFpo 7790\nIGFja25vdw== 7791\n5L8= 7792\nID09PQ== 7793\nb2d5 7794\n5ac= 7795\nIGZpbG1z 7796\naXNr 7797\nIHRlZXRo 7798\nIHN0cnVnZ2xl 7799\ncmQ= 7800\ndWVu 7801\nIGRpc3M= 7802\nIERhcg== 7803\nYW15 7804\nIGVuZW1pZXM= 7805\nIHZlbG9j 7806\nIENhbGw= 7807\ndW1icw== 7808\n0LjRgtC10LvRjA== 7809\nIG9jZWFu 7810\nw6lk 7811\n7Jqw 7812\nIHRyZW0= 7813\naWVudG8= 7814\n0LXRiNGM 7815\nZmZpY2llbnQ= 7816\nIGJvdHRsZQ== 7817\nIGluc3RpdHV0aW9u 7818\nZXN0eQ== 7819\nIEhhbg== 7820\naGFi 7821\n64qY 7822\nIGFycmVzdA== 7823\n6YKE 7824\nIGxldHRlcnM= 7825\nb3VuY2U= 7826\n7Yw= 7827\nQW4= 7828\nIGNyZWF0ZXM= 7829\nIGNsb2Nr 7830\nIGRlYnQ= 7831\nIGFuY2llbnQ= 7832\naWZpY2F0aW9ucw== 7833\nZ2k= 7834\nQnV0 7835\nIFR1 7836\na2w= 7837\nIGJvcmRlcg== 7838\nIG9vaw== 7839\nIEJheQ== 7840\nZXN0YQ== 7841\nIOuztOw= 7842\nIHdyYQ== 7843\ncHJlbmU= 7844\nIOqyjA== 7845\nYW5nbGU= 7846\nIGJlbGlldmVk 7847\naWVuY3k= 7848\nYWth 7849\nIGNyaXRpYw== 7850\nIGJvbWI= 7851\nIGhhbQ== 7852\nINCb 7853\n6rWt 7854\nIEd1eXM= 7855\ncm9zb2Z0 7856\nIGNyaW0= 7857\nZXRjaA== 7858\nQVJS 7859\nIHNpZ2h0 7860\n0LjQvdCw 7861\nIGFpbg== 7862\n4buR 7863\naXNjaGU= 7864\nIGF1eA== 7865\nIG51bWVy 7866\nIHN1cnZpdmU= 7867\nQWxs 7868\nQkM= 7869\nIHN6 7870\nn6zr 7871\nIGphbQ== 7872\nIENvdXJ0 7873\nIGFsbGVz 7874\nIHRyaWdnZXI= 7875\n0J4= 7876\nIGZvcm1hdA== 7877\nIGRlY2FkZXM= 7878\nIGNlcw== 7879\nIHNpZ25z 7880\nIHJvYm90 7881\nIENodXJjaA== 7882\nIGF6 7883\nIHNvdXA= 7884\nIFRleGFz 7885\ndXRlbg== 7886\nINGH0YLQvtCx0Ys= 7887\nIG5laWdoYg== 7888\nlteU 7889\nIGNvbW11bmljYXRl 7890\nxaE= 7891\nIGVsaW1pbg== 7892\nIGZyZXF1ZW5jeQ== 7893\naGVybg== 7894\naWRvcw== 7895\nIGVtcGhhcw== 7896\nIG1lc3NhZ2Vz 7897\nIGdlbmRlcg== 7898\nIFdlbm4= 7899\nINCy0L4= 7900\nIHByaWNlcw== 7901\nb2xv 7902\nINC/0L7QvQ== 7903\nd2luZw== 7904\nIEZpbA== 7905\n0LDQtdC8 7906\nIEN1cg== 7907\nIGZhbHNl 7908\nIGZpZWxkcw== 7909\nIHPDqQ== 7910\nMjQ= 7911\nIG1hYw== 7912\ndcWf 7913\nIGxheWVycw== 7914\nIGFkdm9j 7915\nd2Fu 7916\nIGthcg== 7917\nIMWe 7918\nIGRlY29y 7919\nIHdhbGxz 7920\nb2U= 7921\naXNzaW9ucw== 7922\nIHJlc29s 7923\n16I= 7924\nIENhcm9s 7925\nIFZpZGU= 7926\nbGVlcA== 7927\nIFlPVQ== 7928\nIGZsaXA= 7929\nIHN1cmdlcnk= 7930\nIGNob3A= 7931\nVVI= 7932\nLiw= 7933\nIGFnZW5jeQ== 7934\nIHdhbnRpbmc= 7935\nIHNvbGFy 7936\nIGhvcml6 7937\nIEFkYW0= 7938\nIHN0YXlpbmc= 7939\nb2xpYw== 7940\nIGdyYXRlZnVs 7941\nIHJlbWFyaw== 7942\nIHRlY2hub2xvZ2llcw== 7943\nIHByb3RlaW4= 7944\n5b+D 7945\n0LTQtdC7 7946\nIE1vbnQ= 7947\nIHNob3VsZGVy 7948\nIHph 7949\ncmV5 7950\nIE9vaA== 7951\nIHN0eQ== 7952\naWNhcg== 7953\n0L7RgtGA 7954\nIHJvdXRl 7955\nIFR1cm4= 7956\nIGJvbQ== 7957\nIGRlYmF0ZQ== 7958\nIHBvc3NpYmlsaXR5 7959\nIO2VtOw= 7960\nYXBh 7961\nIGludmVudA== 7962\nw7xybGljaA== 7963\nIHByb2ZpbGU= 7964\nIHNlbmlvcg== 7965\ncHB5 7966\ndmFz 7967\nIG11bmRv 7968\nYXRldmVy 7969\nIGFwcGFyZW50bHk= 7970\nZW5lcg== 7971\n15A= 7972\n560= 7973\nIHByZWNpcw== 7974\nIGFsaWdu 7975\nIGtuaWZl 7976\nIFJvYmVydA== 7977\n5Ys= 7978\nIGZvb2w= 7979\nIGludml0ZQ== 7980\ndXNpbmc= 7981\nIGNpcmN1bXN0 7982\nIGNhcHR1cmU= 7983\nIGRvdWdo 7984\nIFNhbmQ= 7985\nIHNldQ== 7986\nIE5ld3M= 7987\nIGJpdGU= 7988\nIG5ldXQ= 7989\nd2lkZQ== 7990\nIGxlY3R1cmU= 7991\nIOuYkA== 7992\nIG9yaWdpbmFsbHk= 7993\nIGNob2ljZXM= 7994\nIEdhcg== 7995\nIHZlcnNl 7996\nIGxpdA== 7997\nIDE5Ng== 7998\n7ZWg 7999\nIG1lYXN1cmVz 8000\nw6fDtWVz 8001\nd2F0ZXI= 8002\ncml2ZQ== 8003\nIHppam4= 8004\n7YE= 8005\nIEJ1cw== 8006\nIGhlYg== 8007\n0LXRhQ== 8008\nIEthcg== 8009\nIE7Do28= 8010\nIGtpbGxpbmc= 8011\n4K6q 8012\nIG1pcnJvcg== 8013\nbW9k 8014\nIG1vbA== 8015\nIGNyZWF0aW9u 8016\nIGVzdGlt 8017\nIGF0bW9zcGhlcmU= 8018\nIGdhbQ== 8019\nIHRhYmxlcw== 8020\naXNp 8021\nIExpdHRsZQ== 8022\nIHRhcw== 8023\nIEVsZQ== 8024\nw6ls 8025\nIHNjZW5lcw== 8026\nIHRvbmU= 8027\nIGFmZmVjdGVk 8028\nIEFVREk= 8029\nIEJyb3du 8030\nSWY= 8031\nINmH 8032\nIERhbmllbA== 8033\n55yf55qE 8034\ncXVlcg== 8035\nY2hp 8036\n7ZWY6w== 8037\nIG1pc3Rha2Vz 8038\nIHNsYQ== 8039\n44Kk 8040\nIGVudHI= 8041\nINC10YHQu9C4 8042\nIHNob3V0 8043\nIHBvcnRpb24= 8044\n0Zc= 8045\nIHByZXZpb3VzbHk= 8046\n4buZ 8047\nINC/0YDQtdC0 8048\n0L7RgdGM 8049\nIGhlYWRz 8050\n544= 8051\n5a0= 8052\n5ZyL 8053\nIGdyYXNz 8054\n4Liw 8055\nY3JpYmU= 8056\nIHF1w6k= 8057\nIFNwYW5pc2g= 8058\nIG9mZmVyZWQ= 8059\nINCx0YvQu9C+ 8060\nIENsb3Vk 8061\nIHZlY3Rvcg== 8062\nIEh1aA== 8063\nIGthZA== 8064\naWZ0cw== 8065\nIM69 8066\nIGh1bmdyeQ== 8067\n0KE= 8068\nIHBhcmFsbA== 8069\nQU5E 8070\nIHbDrWRlbw== 8071\naXp6 8072\nIG9jY3Vw 8073\nIO2U 8074\nIHNlZWs= 8075\naGVz 8076\nIGRvb3Jz 8077\nIGhvdXNlcw== 8078\nIGNvbnNpZGVyaW5n 8079\nIGdyYWR1YXRl 8080\nIGZ1bGY= 8081\n6KGM 8082\n6KM= 8083\nIGV4dHJlbWU= 8084\nIGZsb3dlcnM= 8085\naXRhdGU= 8086\nIFByaQ== 8087\nIGZ1bmRhbWVudGFs 8088\n0YfQsNGB 8089\n6K+0 8090\nIHRleHR1cmU= 8091\njZg= 8092\nIEFORA== 8093\n4K6x 8094\nIFRlbQ== 8095\nIG5hZGE= 8096\n7KeE 8097\nIGNlbGVicmF0ZQ== 8098\ndW1z 8099\nIHBpbGw= 8100\nINC40LvQuA== 8101\nZ29pbmc= 8102\nIGhpcA== 8103\nIHN1cHBvcnRlZA== 8104\nIHBlcm1hbg== 8105\nIGFncmVlbWVudA== 8106\nIHR5bQ== 8107\nIOuR 8108\nk6TsnbQ= 8109\nIHB1cmNoYXNl 8110\n7ZQ= 8111\nIFBsYW4= 8112\nZWdlbg== 8113\nIHJlY292ZXI= 8114\nUFU= 8115\nIE1pY3Jvc29mdA== 8116\nZHVj 8117\nIGhvbGVz 8118\nIGRyb3BwZWQ= 8119\nIHBpZw== 8120\nIGVuZGluZw== 8121\nIGF0dGFja3M= 8122\nYmVj 8123\nIHJlbg== 8124\nIHJhcHA= 8125\nIOyasOumrA== 8126\nIHRlcnJvcg== 8127\nINeZ 8128\nIGVkaXQ= 8129\nIGFv 8130\nLjwv 8131\nIDIwMDA= 8132\nIFVuaW9u 8133\nIHNjaWVudGlmaWM= 8134\nIHB1bmNo 8135\nb3J0aW9u 8136\nIHB1dHM= 8137\nIE1vbmRheQ== 8138\nIEplcg== 8139\nRUM= 8140\nIG1hdHJpeA== 8141\nIGluc3RpdHV0aW9ucw== 8142\nIG1vbnQ= 8143\nIGV4aGli 8144\nIHNwZWFrZXI= 8145\nIG1ldGVycw== 8146\nLl0= 8147\nIHNlcnZpbmc= 8148\nIGRhdGFiYXNl 8149\nIExBVQ== 8150\nIGRhbW4= 8151\nIHBvZGVy 8152\nISEhIQ== 8153\nIO2WiA== 8154\nIEFVRElFTkNF 8155\nIGp1bg== 8156\nIEFD 8157\nIEl0YWw= 8158\nc2Vj 8159\nIFlvdW5n 8160\ncnVjaw== 8161\nb3V2ZQ== 8162\n4LiE 8163\n54g= 8164\nIOunjOs= 8165\nYWRpbmc= 8166\ndXJhdGlvbg== 8167\nIFBT 8168\n0Jo= 8169\nIFVuZg== 8170\n6IE= 8171\nb3JpYQ== 8172\nIG1hbmlm 8173\nIHNlbnRlbmNl 8174\nIHNpZ25lZA== 8175\nQlM= 8176\nIHByb29m 8177\nIE11c2xpbQ== 8178\nIG51Y2xlYXI= 8179\nINCz0L7QstC+0YA= 8180\nIHdvbGw= 8181\nIGZhdm91cg== 8182\nIFdI 8183\nIHZ1bG5lcg== 8184\nIGNsb3NlbHk= 8185\nIGluZGV4 8186\n0YLQtdGA 8187\nYWNoZWw= 8188\nIGNhcGFibGU= 8189\nIEJlcw== 8190\nIGNyb2No 8191\nZWt0 8192\nIHNoZWV0 8193\nIHNlZXM= 8194\nIG5hdHVyYWxseQ== 8195\nIEVuZ2xhbmQ= 8196\nIHBhcnRpY2lwYXRl 8197\nIGV4aXN0cw== 8198\nIHNoYXJw 8199\ncHk= 8200\nIGJyZWFrZmFzdA== 8201\nYm93 8202\nIHR3aXN0 8203\n56c= 8204\naW5hdGluZw== 8205\nb3Rp 8206\nIEZvdW5k 8207\nIGRldXg= 8208\nIHNlbGVjdGVk 8209\n7KCE 8210\nb3Npcw== 8211\nIHByZXNlbnRlZA== 8212\nIGxpbmVhcg== 8213\nIOq0 8214\nIGt1bg== 8215\n6bue 8216\nw7RuZw== 8217\nIGLEmWQ= 8218\nIHRlbXBvcg== 8219\nIGNhYmxl 8220\nINC/0YDQvtGB0YLQvg== 8221\n0LrQtQ== 8222\nINGC0LDQvA== 8223\nIHdpbm5pbmc= 8224\n6IO9 8225\nmOuPhA== 8226\nIDIwMTQ= 8227\nIOyXrOs= 8228\nIFVO 8229\nIENsaWNr 8230\nIHByZXBhcg== 8231\nIFRP 8232\nIHN1YQ== 8233\nIEhhbQ== 8234\nIGzDpA== 8235\nIGFic29sdXRl 8236\nIGVuZ2FnZWQ= 8237\n5aaC 8238\nIEhtbQ== 8239\nIGRhc2g= 8240\nVEE= 8241\nw7Fvcw== 8242\nIHNwbw== 8243\n55Sf 8244\nKV0= 8245\nIHRlc3RlZA== 8246\nIGJsYW5r 8247\nIHJlamVjdA== 8248\nIGFzc2lt 8249\nIHJlYXI= 8250\nIFN0cg== 8251\nIGNyYXNo 8252\nINC90LDRiA== 8253\n0LjRgtGB0Y8= 8254\nIGNvbG9u 8255\nIFVudA== 8256\nIENl 8257\nIGFjaWQ= 8258\n6Zc= 8259\nIGtpdA== 8260\naWJpbGl0aWVz 8261\ndXRv 8262\nIHZhbHVhYmxl 8263\nbGlzdA== 8264\nIHBhcnRpZXM= 8265\nIE1t 8266\nIGNvbG91cg== 8267\nIGNoYW0= 8268\nIHN0ZWVs 8269\nIEltcA== 8270\nIGZ1bmRz 8271\nIEROQQ== 8272\nIEtlbg== 8273\naW5kZQ== 8274\n7ZW07ISc 8275\n44OD 8276\nIEhhcHB5 8277\nIFVzZQ== 8278\nIExpZ2h0 8279\nIGxpcA== 8280\nIGF1dGhvcml0eQ== 8281\nIExvbmc= 8282\nIElyYW4= 8283\nIGVsbA== 8284\nIGNvb3JkaW4= 8285\nIHN1Ym0= 8286\nIHJlY29yZGVk 8287\n0YPRiA== 8288\nIGRlbHRh 8289\nIHJlZm9ybQ== 8290\nIFN0aWxs 8291\nIG9wcG9u 8292\nIGFsbG93aW5n 8293\nIHBhdHRlcm5z 8294\nIGxldHRpbmc= 8295\nIHNsZWVwaW5n 8296\nT2theQ== 8297\nIHBpenph 8298\nIMWb 8299\nINC00L7Quw== 8300\nIHRhbGVudA== 8301\nZW5zaW9ucw== 8302\nIGVudmlyb25tZW50YWw= 8303\nIHByb2Zlc3Nvcg== 8304\nIHNob3Rz 8305\nIGNvbnRhaW5z 8306\ndWdhcg== 8307\neW8= 8308\nj5k= 8309\nIHNlcXVlbmNl 8310\nzrnOsQ== 8311\nYWRlcg== 8312\n6aA= 8313\n0LDRhw== 8314\n2YbYpw== 8315\nIElr 8316\nIHRvdXM= 8317\ndXJpZXM= 8318\nIHBvdW5kcw== 8319\nIGV4dGVybmFs 8320\naW1lbnRz 8321\nIHZyYWltZW50 8322\n7Iuk 8323\nIGhhcHBpbmVzcw== 8324\nIHByemU= 8325\nZXN0aWM= 8326\nIGVzdGFibGlzaA== 8327\nIEZsb3I= 8328\nIHJpZw== 8329\nIGhvbmV5 8330\nIHB1bA== 8331\nIHN5bXB0b21z 8332\nIGJyb3dz 8333\n0LXQu9C4 8334\nIM+Ezr8= 8335\nIHNoaXJ0 8336\nIFRlY2hu 8337\nIFByb2dyYW0= 8338\n0LXQvNGD 8339\nIHVwc2V0 8340\nIGd1ZXN0 8341\nYnVyZw== 8342\nIHVubGlrZQ== 8343\nIHNvbWV3aGF0 8344\nIGhhbmdpbmc= 8345\nYWU= 8346\nIHJ1bQ== 8347\nIHBob3RvZ3JhcGg= 8348\nIExp 8349\n5Zue 8350\nIHN0YWJsZQ== 8351\nIHZvbHRhZ2U= 8352\nIEVsbA== 8353\nIGVudHJlcHJlbmU= 8354\ndXNlcw== 8355\nYXNzZW4= 8356\nrLg= 8357\nIOunjuydtA== 8358\nIGdob3N0 8359\nIHNhZ2Vu 8360\nIGNvbWJhdA== 8361\nIGfDtnI= 8362\nIENhcA== 8363\nIHPDo28= 8364\nIEthdA== 8365\nIGZvcm1h 8366\nIHN1bW0= 8367\nIG1hcmNo 8368\nIHZhc3Q= 8369\nw7xr 8370\nIGNvbW1pdG1lbnQ= 8371\naW1vcw== 8372\nTGV0 8373\nIGRlZGljYXRlZA== 8374\naXN0ZQ== 8375\nbGF5 8376\n6YCZ5qij 8377\nIHRvcGljcw== 8378\nIG1hY2hpbmVz 8379\nIFBhcmlz 8380\nIOydtOufsA== 8381\nIG1pbmk= 8382\nIG1hcmtldHM= 8383\nIGtv 8384\nzrQ= 8385\ndmlsbGU= 8386\nIGdvb2RuZXNz 8387\nIGZyYW1ld29yaw== 8388\ndWx0dXJl 8389\nIGJhc2tldA== 8390\nZXNzYQ== 8391\n0LDRhtC4 8392\ndXN0ZXI= 8393\nIOq5 8394\n5L2G 8395\nIGV4dGVudA== 8396\nIE1lbnNjaGVu 8397\nIGNvbnNpc3RlbnQ= 8398\nIGF1dG8= 8399\ncmlw 8400\nIG1lcmU= 8401\n4K+I 8402\n0ZQ= 8403\nIGVsbGU= 8404\njIDr 8405\nb2tlbg== 8406\nIHB1bGxpbmc= 8407\nIGNvdw== 8408\nb3V0aGVybg== 8409\nIG1lZXRpbmdz 8410\nIGNhZGE= 8411\n0L3Ri9C8 8412\naWVudGU= 8413\nIGJhc3Q= 8414\nYW5pbmc= 8415\nIGZvY3VzaW5n 8416\ncm9hZA== 8417\nIHJvb2Y= 8418\nIFByb2Zlc3Nvcg== 8419\nIFNQ 8420\n0YDQsNC3 8421\nIG5vb2Q= 8422\nIDQwMA== 8423\nIOydtOygnA== 8424\n7J6I 8425\nIE1vdW50 8426\n0LXQudGH0LDRgQ== 8427\nINeQ 8428\nV2h5 8429\n154= 8430\nxLFuZGE= 8431\nIHBvc2l0aW9ucw== 8432\nw6htZQ== 8433\n548= 8434\nINC00YDRg9Cz 8435\naXlvcg== 8436\nIHBhc3Npbmc= 8437\nIGFzc2VtYg== 8438\nIHNtb2tl 8439\nIHRpbA== 8440\nIG11c2V1bQ== 8441\n0JQ= 8442\nIFBlcnNvbg== 8443\n0L3QuNC8 8444\nbGVpY2g= 8445\nIGludGVudA== 8446\nIHNxdWU= 8447\nIGNyYWZ0 8448\n7IiY 8449\nb3JzdW4= 8450\nIDE1MA== 8451\nIGJyb3RoZXJz 8452\ndm9y 8453\nIFNwZWFrZXI= 8454\naWNpYW5z 8455\nIG9mZmljZXI= 8456\nIGnDp2lu 8457\nINGC0LXQsQ== 8458\nIHNjcmF0Y2g= 8459\nIGdlbmVyYXRl 8460\neWk= 8461\nIGVtb3Rpb25z 8462\nYXVz 8463\n7LmY 8464\nNDU= 8465\nIExpbms= 8466\nIFJlYWw= 8467\nIGF0ZQ== 8468\nINC90LDQtA== 8469\nIG5hdGl2ZQ== 8470\n4buH 8471\nxLF5 8472\nIGVub3Jt 8473\nIGJsb2Nrcw== 8474\nIGZhY2Vz 8475\nYWNj 8476\naXZlbmVzcw== 8477\nIGluY2hlcw== 8478\ndWlz 8479\naGVpdA== 8480\nIHN0cmVldHM= 8481\nIHByb2JhYmlsaXR5 8482\nYXNp 8483\nIGltcGw= 8484\nIOCk 8485\ndXJkYXk= 8486\nIGZhdXQ= 8487\nb215 8488\nIHBpcA== 8489\nIGlsbHVzdA== 8490\n4K6v 8491\nIEp1bg== 8492\nIGx5aW5n 8493\nOTk= 8494\nIG1lbW9yaWVz 8495\nIHByYWN0aWNhbA== 8496\naWFuYQ== 8497\nb25jZXM= 8498\nIHZpZXdlcnM= 8499\nIFRob21hcw== 8500\n5ow= 8501\nIEdpcmw= 8502\nIFdoZXRoZXI= 8503\nIGlubm92YXRpb24= 8504\nIGRpc2FwcG9pbnQ= 8505\nTXk= 8506\nIHdpbm5lcg== 8507\nIGln 8508\nIHJhdGlv 8509\nIEJsdWU= 8510\nIFN1Yg== 8511\nIGRvY3VtZW50cw== 8512\nIGZvcm11bGE= 8513\nIOup 8514\n0Yo= 8515\nIGFwcGVhcmVk 8516\ndmFy 8517\nYW5kb24= 8518\nIHNwcmF5 8519\nbWFr 8520\nIFFVRVM= 8521\nS0U= 8522\nIHdlZGRpbmc= 8523\nUmU= 8524\n0LDRgtGM0YHRjw== 8525\nIHVubw== 8526\nIGdhbGw= 8527\n7YSw 8528\nY2lv 8529\nY2Vycw== 8530\nINC80L3QtQ== 8531\nIHBlcHBlcg== 8532\n44GX44Gf 8533\nIEZlYnJ1 8534\nIGFsdGVybmF0aXZl 8535\nIGZ1 8536\nIEJhc2ljYWxseQ== 8537\nIFNtaXRo 8538\nIGdhdGU= 8539\nIFRhbQ== 8540\nIFdoYXRldmVy 8541\nIGFwcHJveGlt 8542\nIGNvbmNlcnQ= 8543\nIGp1aWNl 8544\nIEVzcGVjaWFsbHk= 8545\nIGR5bmFtaWM= 8546\nUXU= 8547\nb25kZXI= 8548\naXZlcnk= 8549\nIGJhbmc= 8550\nIHJ1bA== 8551\nIFBhcnR5 8552\nIHNjaG9sYXJz 8553\nIGNyeWluZw== 8554\nasSF 8555\n0KI= 8556\nIFFVRVNUSU9O 8557\ncmlk 8558\nIGFjY3VyYXRl 8559\nw6dv 8560\nIENvb2w= 8561\nY29pbg== 8562\nIOyDgQ== 8563\nIEZv 8564\nIHByw7M= 8565\nIFJvbWFu 8566\nINCf0YA= 8567\nIGNoZWNraW5n 8568\nPyc= 8569\nIGF0dGFjaGVk 8570\nIElzbGFt 8571\nIGV4cGVydHM= 8572\n16c= 8573\nIENvbnN0 8574\n0YDQsNC9 8575\nIHNoYWRvdw== 8576\nIGRlbGF5 8577\n0JI= 8578\nIG9yaWVudA== 8579\n64I= 8580\nZWxsZW4= 8581\nIGFzw60= 8582\n0LrQuNC5 8583\nIGhpc3RvcmljYWw= 8584\nIHVuY29t 8585\nb21w 8586\naG0= 8587\nIGJpbA== 8588\nIHBsYW5uZWQ= 8589\nIFVuZm9ydHVuYXRlbHk= 8590\nIFdpbmRvd3M= 8591\n2LQ= 8592\nIGVuY291bnRlcg== 8593\nIOyDneqwgQ== 8594\nIHJlZ2FyZGluZw== 8595\nYXJyYXNz 8596\nIHJlY292ZXJ5 8597\nIEh1cg== 8598\nIEVtcA== 8599\nIHPDrQ== 8600\n7ZWY6rKM 8601\nIGRlZmVuZA== 8602\nIGNldA== 8603\nYXNzZQ== 8604\n64uo 8605\nb2tlcw== 8606\nIHJlbW90ZQ== 8607\nINiz 8608\nIGFydHM= 8609\naXNjbw== 8610\nYXVjb3Vw 8611\nIE1leGljbw== 8612\nINC/0L7QvA== 8613\nIGNob3Nlbg== 8614\nZW1hdA== 8615\nb2Rpbmc= 8616\nIGZsb3dlcg== 8617\nc3RhbmRpbmc= 8618\nIEFzc29jaQ== 8619\ndW1teQ== 8620\nSUxM 8621\nIGNhbWVyYXM= 8622\n5YaN 8623\nIOaIkQ== 8624\nIEFyYWI= 8625\nIFN1bQ== 8626\nIHRlZ28= 8627\nIGNyaW1pbmFs 8628\naWZvcm0= 8629\nIHN0YWNr 8630\n7ISx 8631\nIERvbmFsZA== 8632\nIE9sZA== 8633\nIGR1c3Q= 8634\nIEpvc2U= 8635\nIGhlbQ== 8636\nIGluY3JlYXNlcw== 8637\nb3N0YQ== 8638\nIGR5aW5n 8639\nIFJpdmVy 8640\nIG1vaXN0 8641\n0YLQvtCy 8642\nYXJlcw== 8643\nIGRpc2NpcGw= 8644\ncmFpdA== 8645\nIEhhcw== 8646\neWdlbg== 8647\nIFRyZQ== 8648\nIOu0 8649\nIGxhbmd1YWdlcw== 8650\nIEhlbg== 8651\nIDM2 8652\nIERpc25leQ== 8653\naW50cw== 8654\nIGFsZ28= 8655\nIGZvb2Rz 8656\nIHNldHVw 8657\nbGFu 8658\nIGVmZmVjdGl2ZWx5 8659\nIHdoZXJldmVy 8660\n5pyA 8661\nIHVudGVy 8662\nZm9ybWF0aW9u 8663\nIGhpdHM= 8664\nIHByaW5jaXBsZQ== 8665\nIHRhc3Rlcw== 8666\np4g= 8667\nIHRyZWF0ZWQ= 8668\nIHJlc29sdXRpb24= 8669\nIHByaXZpbGU= 8670\nIElQ 8671\n67A= 8672\nIHRlcnJpdA== 8673\nIHBvd2Vycw== 8674\nIO2D 8675\nIFZpY3Q= 8676\nIGJvdGhlcg== 8677\nIENoYWly 8678\nIG11c2NsZQ== 8679\nIHNhbGU= 8680\nIGRlY2VudA== 8681\nIGNvdXA= 8682\nIFNxdQ== 8683\nIGNvYXN0 8684\nIHJvZA== 8685\nIEZyYW5j 8686\nIGJhdGhyb29t 8687\nIHNob3BwaW5n 8688\nINC80L7QttC10YI= 8689\nIGnFnw== 8690\nIFN0YXk= 8691\nZ3JhZGU= 8692\nIGZvcm1lZA== 8693\nIGJhxZ8= 8694\nIGJyaWxs 8695\nam91cg== 8696\n7ZY= 8697\n5Zug 8698\nd2ll 8699\naWNhdGU= 8700\nIOKAi+KAiw== 8701\nIE5vcm0= 8702\n4KU= 8703\nIG1haW5seQ== 8704\nIFNwYWNl 8705\nIHRyZW1lbmQ= 8706\naXRp 8707\n4K61 8708\nVVQ= 8709\nTXVzaWM= 8710\nIEZlYnJ1YXJ5 8711\nIGNvbnRyYXN0 8712\n5a+5 8713\nZXN0aW5n 8714\nIM60 8715\naW5naW5n 8716\nINmG 8717\nc3Nlbg== 8718\nIEhvbWU= 8719\nIHNoZWxs 8720\nIEhheQ== 8721\nIGFsbGVy 8722\nIEFw 8723\nIFdlc3Rlcm4= 8724\nIFdvcmQ= 8725\nIFBMQVk= 8726\nIOuF 8727\nIEFxdQ== 8728\nIGVudHJ5 8729\nIGxhdW5jaGVk 8730\nIE1lbQ== 8731\nIFBvdXI= 8732\nIHp3ZQ== 8733\nIFNvbWVvbmU= 8734\naW5nZQ== 8735\nIFByb2I= 8736\nbWJsZQ== 8737\nIFJlbA== 8738\ndXJ1 8739\nIHJoeQ== 8740\nIGdpZw== 8741\nIGVuZ2FnZW1lbnQ= 8742\nw7zFnw== 8743\n44KH 8744\nIG9mZmVyaW5n 8745\nd2hlbA== 8746\nIGFjdG9y 8747\nIOWwjQ== 8748\nQVBQ 8749\nd2VzdA== 8750\nIFJveQ== 8751\nIHJldHVybmVk 8752\nIHNpbHZlcg== 8753\ncmF0aW5n 8754\nIGVzdGFy 8755\nIHNrZQ== 8756\nIHRp 8757\naWNhdGlvbg== 8758\nIGFubm95 8759\nIGRlZXBseQ== 8760\n7Jqp 8761\nIG5hdMO8cmxpY2g= 8762\nRUxM 8763\nIENhdGg= 8764\nIHJhaWw= 8765\n0L3QvtCy 8766\nIHByYXllcg== 8767\nY29s 8768\nR0I= 8769\nINCi0LDQug== 8770\nIGdsYQ== 8771\nIFdhdGVy 8772\n0Y/RgtGM 8773\nIE5vbg== 8774\nw7R0 8775\nYWdlcnM= 8776\nIGh1Zw== 8777\nIGRvY3RvcnM= 8778\nYW5jaW5n 8779\nIFRhbGs= 8780\nemluZw== 8781\nIGhhZG4= 8782\nIGx1aQ== 8783\nIGF0w6k= 8784\nIOq3uOumrOqzoA== 8785\n6rmM7KeA 8786\naWNp 8787\nIGluY29ycG9y 8788\nIERp 8789\nemls 8790\nYW55YQ== 8791\nqoU= 8792\nIMK7 8793\nMzU= 8794\nIGJlZXI= 8795\nIGJlYXVjb3Vw 8796\nIE1D 8797\nIGVhcnM= 8798\nb2dlbg== 8799\nIFF1ZXN0 8800\nZWRh 8801\n5pys 8802\nIFNhdHVyZGF5 8803\nIGZhbGxz 8804\nc3Rvbg== 8805\nYmxlcw== 8806\nIHRodXM= 8807\nIOuEpA== 8808\n4LmE 8809\nIHRoZXJt 8810\nIGRpdmVyc2l0eQ== 8811\nIHNveQ== 8812\nYXp1 8813\naW1w 8814\nIHRlbGV2aXNpb24= 8815\n6YGO 8816\nINep15w= 8817\nIHd1cg== 8818\nIGVkZ2Vz 8819\nIGxlc3NvbnM= 8820\nIEF1ZA== 8821\n44GX44Gm 8822\ndm9pcg== 8823\nYW1lbnRv 8824\nIGV4cGxhaW5lZA== 8825\nINC+0L3QsA== 8826\nIHRlbXBz 8827\nz44= 8828\nVGhleQ== 8829\nIHN1cnByaXNpbmc= 8830\n0LDQvdC40Y8= 8831\nIERyYWc= 8832\n6Z2i 8833\nIENsZQ== 8834\nIG5hbQ== 8835\nINC70Y7QtA== 8836\nIGhhcmR3YXJl 8837\nIHRodW1icw== 8838\nIM66zrHOuQ== 8839\nIFRvcA== 8840\nIMOl 8841\n6Zk= 8842\n15XXqA== 8843\nIOq3uOuemOyEnA== 8844\nIEJ1ZGQ= 8845\ndGhlcm4= 8846\nIGludGVyZXN0cw== 8847\n2LA= 8848\nIGRldmVsb3BlcnM= 8849\nIGhpdHRpbmc= 8850\nIG9wcG9zZWQ= 8851\nIGhlYXJ0cw== 8852\nIEFuZHJvaWQ= 8853\nIEhhbmQ= 8854\nIHJlcHJlc2VudHM= 8855\nZ2xpY2g= 8856\n7Yq4 8857\nIDMy 8858\nIGRvbWlu 8859\nIEFubg== 8860\n5LiA5LiL 8861\nIMOpdMOp 8862\nIHpvb20= 8863\nIGt0w7NyZQ== 8864\nIGFkdWx0cw== 8865\nIG9yZGVyZWQ= 8866\nIHBpY2tpbmc= 8867\nIEhvbmc= 8868\nIGZpbG1pbmc= 8869\n5oCd 8870\nIHNlZWQ= 8871\nIEFU 8872\nIGNhbGN1bGF0ZQ== 8873\nINC60L7Qs9C00LA= 8874\nIE9z 8875\naWNpdA== 8876\nIHJlbWFpbmluZw== 8877\nIHNlZ3U= 8878\nw7s= 8879\nIOyYpOuKmA== 8880\nIGFycml2ZQ== 8881\nIGNvbmdy 8882\nIGdyYW5kZQ== 8883\nIGhlYWx0aGNhcmU= 8884\nINC80L7QttC90L4= 8885\nU0E= 8886\nZXN0ZQ== 8887\nIGF3YXJlbmVzcw== 8888\nIHNxdWFyZWQ= 8889\neHR1cmU= 8890\nIEJlaW5n 8891\nIHNvbGRpZXJz 8892\n0YPQsQ== 8893\nIHJldm9sdXRpb24= 8894\nIHRyYWluZWQ= 8895\nZW5kZW4= 8896\n6LA= 8897\nIGRhbmNpbmc= 8898\nIGluc3RhbGxlZA== 8899\ncHJpc2U= 8900\nIHZldGVy 8901\nIG1lbm9z 8902\nbmVsbA== 8903\nIEJyb3RoZXI= 8904\nIG51bg== 8905\nIGltcG9ydGFudGx5 8906\nYWxsZWQ= 8907\naWHFgg== 8908\nYWJsZWQ= 8909\nIFN5c3RlbQ== 8910\nIFZvbA== 8911\nIGVsZA== 8912\nIGVtb3Rpb24= 8913\naWNhbg== 8914\nIEJhbms= 8915\naWtlcw== 8916\nIHZsb2c= 8917\nINCy0L7Qtw== 8918\nIHB1ZWRl 8919\n7Jik 8920\nIHRlZW4= 8921\nIHNldmVyZQ== 8922\nJSw= 8923\nIGNsZWFuaW5n 8924\nesSF 8925\nl5A= 8926\nIFRocm91Z2g= 8927\nIFNldA== 8928\nRVA= 8929\nIj8= 8930\nIE1vdGhlcg== 8931\nIGZpZ3VyZWQ= 8932\nIG11ZA== 8933\nINGW 8934\nIE9mZmljZQ== 8935\nIHJhdw== 8936\nIGRlc3Ryb3llZA== 8937\nZW50YQ== 8938\nIGFnZ3Jlc3M= 8939\nINC+0YE= 8940\nIOuqqOs= 8941\nw6TDpA== 8942\nIEFS 8943\nIGNvcnJlY3RseQ== 8944\n5YmN 8945\nIHN0aXI= 8946\nIGV4dHJhY3Q= 8947\nIHZlaGljbGVz 8948\n6ZaL 8949\nIFJ1bg== 8950\nINCy0YDQtdC8 8951\nIHBhcmFsbGVs 8952\nIGxhZw== 8953\nanU= 8954\nIGRhcmU= 8955\nIE1vdA== 8956\nb25v 8957\nIGJlaW5ncw== 8958\nIHN0cm8= 8959\nIGV4Y3VzZQ== 8960\nIGFscGhh 8961\nIGFza3M= 8962\nIHBvY2tldA== 8963\nLi4uPw== 8964\nIGtpdGE= 8965\nw7xt 8966\nIGFwcGVhcmFuY2U= 8967\nb3JkYW4= 8968\nIGluc2VydA== 8969\nINC90LDRhw== 8970\nm2k= 8971\nIHRlbXBv 8972\nIGZhY2lsaXR5 8973\nIHZpc2libGU= 8974\n5ZI= 8975\nIFNjaWVuY2U= 8976\ndXJvcw== 8977\nINmB2Yo= 8978\nIFZhbg== 8979\nIHRlbnNpb24= 8980\nIO2VoA== 8981\nIGRlbGl2ZXJ5 8982\nIHN0aW0= 8983\nIHN1cnZleQ== 8984\nIEdyYQ== 8985\nIGJvbA== 8986\n5qA= 8987\nIHdlaXRlcg== 8988\nw59lbg== 8989\n5LiA5YCL 8990\nIHByb2NlZWQ= 8991\nIGltcHJlc3NpdmU= 8992\nIFZvYw== 8993\naW91c2x5 8994\nINC00LA= 8995\naGFsZQ== 8996\nb2No 8997\nIGdsdWU= 8998\ncGhldA== 8999\nY29udA== 9000\nIGZpdHM= 9001\nIGJveGVz 9002\nIGNvbnRyb2xz 9003\nIENoaWxk 9004\nIHNjZW5hcmlv 9005\nIHRyb3A= 9006\nIHByb2Nlc3Npbmc= 9007\nINGC0L7Qu9GM0LrQvg== 9008\nIGJpcmRz 9009\nIENoaWM= 9010\nINC90LDQvw== 9011\nIDIwMTM= 9012\nIG3DvHNzZW4= 9013\nIEphZw== 9014\nIHPEhQ== 9015\nIHBlcmNl 9016\ncmVo 9017\nIEZvcmU= 9018\nIGNvbmZ1c2Vk 9019\nYWlyZQ== 9020\nIGFjY29tcGxpc2g= 9021\nIGNhc2E= 9022\nY2xvY2s= 9023\nIGluZmx1ZW4= 9024\nIFJP 9025\nIGJvbmU= 9026\naWNpYW4= 9027\nIFND 9028\nIHN0cmF0ZWdpZXM= 9029\nZ2g= 9030\n0LTRgw== 9031\nIGl0dQ== 9032\nIHBlcnNvbmFsaXR5 9033\nIGJhcmR6bw== 9034\nIGFjY2VwdGVk 9035\nIHN0b20= 9036\naWV2 9037\nIEhpc3Q= 9038\nIEF1cw== 9039\nIOuwlOs= 9040\nQVRPUg== 9041\n5oSP 9042\nb2ly 9043\nIG1hZ2F6 9044\nIGV4cGxhbg== 9045\nIGNvcm4= 9046\nIGlscw== 9047\nIGNpcmN1aXQ= 9048\nIGdheQ== 9049\naG9w 9050\n44KD 9051\nIGVxdWl2YWw= 9052\nIGRpZXNlcg== 9053\nZXJ2ZXM= 9054\nY29tZXM= 9055\na2xpY2g= 9056\nIOuVjOs= 9057\nYWJldA== 9058\nIGV4aGE= 9059\nIG1hbm5lcg== 9060\nIOKZquKZqg== 9061\nw6lj 9062\nw6Rs 9063\nIGNvbmZpcm0= 9064\nIGVudGVyZWQ= 9065\nZW1wbG8= 9066\nIEZhcg== 9067\nIG/DuQ== 9068\nZXNzaW9ucw== 9069\nIG51cnM= 9070\nIGVudMOjbw== 9071\nIGFiYW5kb24= 9072\nbGlmZQ== 9073\nIHdpcw== 9074\nTmFycmF0b3I= 9075\nIOyWtA== 9076\nVGhlcmU= 9077\nIFJhbQ== 9078\nYXN0ZQ== 9079\nIGF0dHJpYg== 9080\nIEF5 9081\nIG1lc21v 9082\nIM69zrE= 9083\n6as= 9084\nZW5zZXM= 9085\nIGNyb3A= 9086\nINC30LTQtdGB0Yw= 9087\nIFVudGls 9088\nc3RlaW4= 9089\nIG92ZW4= 9090\nIHN1c3BlY3Q= 9091\naGV0 9092\nIHB1aXM= 9093\nIGNhcnJpZWQ= 9094\nw6ln 9095\nIERldg== 9096\nZW1z 9097\ncmVlbnM= 9098\nYmVycnk= 9099\nIHRlbXBs 9100\nIEJpdA== 9101\nIHZhcmlhYmxlcw== 9102\nIG92ZXJ3aGVs 9103\nzrzOtQ== 9104\nIGluaXRpYWxseQ== 9105\n7JWY 9106\nb3RoaW5n 9107\n0LXRgtGM 9108\nIEhpbGw= 9109\nIGRlcGFydA== 9110\nIG15c3Q= 9111\nYXp6 9112\nIGZsdWlk 9113\nIERD 9114\nIGNsaW5pY2Fs 9115\nIFJ5YW4= 9116\nIEZsb3JpZGE= 9117\nIFRhaw== 9118\nIGFueGlldHk= 9119\nYnJv 9120\nIGNpcmN1bXN0YW5jZXM= 9121\nINmD 9122\nIGV4aXN0ZW5jZQ== 9123\nIHRvbmc= 9124\nIDIwMTI= 9125\nIFNlY3JldGFyeQ== 9126\nIHNwaWN5 9127\nIFso 9128\nIFdpdGhvdXQ= 9129\nIGZhY3Rz 9130\nIHRvbnM= 9131\nQXBw 9132\nIFN0YW5k 9133\nIGxpZXM= 9134\nIEFE 9135\nd2lu 9136\nz4TOtQ== 9137\nYXBwbGF1c2U= 9138\nSVA= 9139\nc3Rh 9140\nIFN1cA== 9141\ncGhvbmVz 9142\nnpE= 9143\ncGll 9144\nIFBvdA== 9145\nIE5P 9146\n6LW3 9147\nINee 9148\nINCU0LA= 9149\naWNhcw== 9150\nIEly 9151\nIHB1c2hlZA== 9152\nIHVuY2xl 9153\nINmF2YY= 9154\nIGxvbg== 9155\nIHByaW5jaXBsZXM= 9156\nIEludGVybmF0aW9uYWw= 9157\nIMOW 9158\nxb4= 9159\nIHNheWE= 9160\nIOqzoA== 9161\nIHJpYg== 9162\nIHBhc3Rl 9163\nIHdhcm5pbmc= 9164\nIG11c2ljYWw= 9165\nIGFncmVlZA== 9166\n0L7RgNC8 9167\nIGdhcmxpYw== 9168\nIG94eWdlbg== 9169\n7JiI 9170\nQWw= 9171\nIOunng== 9172\nZWxpbmVz 9173\nTEFVU0U= 9174\n576O 9175\nZ3lwdA== 9176\nR0U= 9177\nY2tlcg== 9178\ndHU= 9179\nIHNoZWw= 9180\nIHN0YXllZA== 9181\nINCz0L7QtA== 9182\nIGxhcHQ= 9183\nIE1hcnRpbg== 9184\nIGludml0ZWQ= 9185\nIGNvbmZpcg== 9186\nIGVtYmFycmFzcw== 9187\nYWNpb25lcw== 9188\nIENhbXA= 9189\nIGhvbGRz 9190\nYXh5 9191\nIGRpdmU= 9192\ndWNrbGVz 9193\nIGJvb3N0 9194\nIHfDvHI= 9195\nc3RhbA== 9196\nINGA0LDQsdC+0YI= 9197\nIGTDqWM= 9198\nIG9mZmljZXJz 9199\nIOyVhOs= 9200\nb2xvZ2lzdA== 9201\n157X 9202\nIHNlZWRz 9203\nIGJ1ZmY= 9204\nIHVwZGF0ZXM= 9205\n44KP 9206\nZGVk 9207\nIGZyaWVuZGx5 9208\nIGNvdW5jaWw= 9209\nIFByb2JhYmx5 9210\nIHBpYW5v 9211\nIHJlZHVjZWQ= 9212\nz4TOsQ== 9213\nIGF1dGhlbnQ= 9214\nIGV4cGxvcw== 9215\ncGFzcw== 9216\nIEhpdA== 9217\nanVk 9218\nIE5hdg== 9219\nb21p 9220\nIGNvbW1pc3Npb24= 9221\nIGd5bQ== 9222\n0J8= 9223\nIHBvbg== 9224\n0YDQvtGB 9225\nIGludGVyZmFjZQ== 9226\nIHN0cnVjdHVyZXM= 9227\nIEplbg== 9228\nIHlvaw== 9229\nIG1ldQ== 9230\n7KeA66eM 9231\nbmVk 9232\nIFdpZQ== 9233\nIGlkZW50aWZpZWQ= 9234\nIGNoYW5uZWxz 9235\nxLFuYQ== 9236\nIHBoaWxvc29w 9237\na2VpdA== 9238\nIGJpdHM= 9239\nZW50ZXM= 9240\nIGZyYWc= 9241\nIEtpbmQ= 9242\nIGRvY2g= 9243\nIHNuZQ== 9244\naW5kaW5n 9245\nIEpld2lzaA== 9246\n0L7RgNC+0Yg= 9247\nIGZ1ZQ== 9248\n5pa5 9249\nIO2P 9250\nIG3EsQ== 9251\nIGtlaW5l 9252\nIGxvY2F0aW9ucw== 9253\n55So 9254\nIG1ldGVy 9255\nIGJlZWY= 9256\n44GY 9257\nIG1hbmlw 9258\nIHNvbm8= 9259\nenpsZQ== 9260\n57Y= 9261\nIHBlcw== 9262\nIGhvcnJpYmxl 9263\nIFNu 9264\nIGZhY3Rvcnk= 9265\nIGZpZnRo 9266\nIGNvb2tlZA== 9267\nIG1vb2Q= 9268\nIHZlbG9jaXR5 9269\nIG9ibGln 9270\nIGNvbm5lY3Rpb25z 9271\nxJ9pbQ== 9272\nIOqztQ== 9273\nIGRvbWFpbg== 9274\nIGFwcGx5aW5n 9275\nIHJpZGlj 9276\nIGNlbA== 9277\nIGNoaWxkaG9vZA== 9278\nIFRlc3Q= 9279\ncmF0dWxhdGlvbnM= 9280\nIFZpcmdpbg== 9281\nIENFTw== 9282\nINC/0Ls= 9283\nIGFsZ29yaXRobQ== 9284\nIGludGVyYWN0aW9u 9285\nYWdh 9286\nIGtpZGRpbmc= 9287\nIHRvbWF0bw== 9288\nIGNvbnRpbnVpbmc= 9289\nbGFk 9290\nc3RyZWFt 9291\n0L7QttC1 9292\nIOyYgQ== 9293\n0LXQu9C+0LI= 9294\nQkE= 9295\nIG5hcA== 9296\nIE5vYm9keQ== 9297\nIHRodW1i 9298\nIE9O 9299\nIHJ1c2g= 9300\nRFI= 9301\nIHN0cmlrZQ== 9302\nIGV2b2x1dGlvbg== 9303\naWNoZQ== 9304\nIOy7 9305\nIOq3uOufsA== 9306\n2KfYqg== 9307\nIGFr 9308\nIHdpbmRvd3M= 9309\nIGV4Y2Vzcw== 9310\n44Gq44GE 9311\nIGNvbmNsdWQ= 9312\nIGVwaXNvZGVz 9313\nIHN0cnVnZ2xpbmc= 9314\nIERhdA== 9315\nnbzr 9316\nIGtleXM= 9317\nIGtsZQ== 9318\n5p6c 9319\nIHZlZ2V0YWJsZXM= 9320\neXN0ZW0= 9321\nw6puY2lh 9322\ncmljaw== 9323\nIHJldmVudWU= 9324\nIEhhdw== 9325\nIGxhbg== 9326\nYW50ZXM= 9327\naW5peg== 9328\n44GT44KM 9329\n0LjRgdGC 9330\nIHN1cA== 9331\nqbTshJw= 9332\nIG1vbWVudG8= 9333\naXN0bw== 9334\n44Gk 9335\nIEVyaWM= 9336\naW9ycw== 9337\nYmFq 9338\nIGludHJvZHVjdGlvbg== 9339\naXJ0eQ== 9340\nIGRlY2s= 9341\ncmVhbA== 9342\nIE1hcmlv 9343\nIGxvdmluZw== 9344\n4LiU 9345\nIHN1cHBvcnRz 9346\n0LjRh9C10YE= 9347\nIGluY2lkZW50 9348\ndXRjaA== 9349\ndXY= 9350\nIGJvb20= 9351\n0LXRgNGM 9352\nINC90YPQtg== 9353\nIGNvbWJpbmVk 9354\nIExpbg== 9355\nMjM= 9356\nb3JhdGlvbg== 9357\nbnRl 9358\nIHNvcg== 9359\nIGRpcnR5 9360\naWZlcg== 9361\nIEFQSQ== 9362\nIGNvbGxhYm9yYXRpb24= 9363\naWFibGU= 9364\nIHByaW9yaXR5 9365\nIEFsZQ== 9366\nIFByaW4= 9367\nIEV4Yw== 9368\nIHZhaXM= 9369\nIGdyYW4= 9370\nIHN0b29k 9371\nIHJlY3J1 9372\nIE11cg== 9373\nZXNpcw== 9374\nYXNw 9375\nIGxvY2tlZA== 9376\nIFBlcm8= 9377\nIEhhcnJ5 9378\nIHR1ZG8= 9379\nIFRlbg== 9380\n2LU= 9381\nZm9yY2VtZW50 9382\nKSk= 9383\nb2xp 9384\nIOyduA== 9385\nIHN1cHBs 9386\nIGNyb2NoZXQ= 9387\nIHBoZW5vbWVu 9388\nbG9z 9389\nYXRoYW4= 9390\nIFN1cHA= 9391\nIGVtYnI= 9392\nIGJlaw== 9393\nIFplaXQ= 9394\nZ2VuZA== 9395\nIHJvb21z 9396\nqr0= 9397\nVkVS 9398\nbnljaA== 9399\nIGRvbnQ= 9400\nIGNhYmlu 9401\nIGFjY291bnRz 9402\nIEVhc3Rlcg== 9403\n15XXnA== 9404\n44Or 9405\nIGZhY2lsaXRpZXM= 9406\nYmVpdA== 9407\nIGxpbmtlZA== 9408\nIEdlcg== 9409\nIHByb2dyYW1taW5n 9410\nb3RpYw== 9411\nIGRyYW1h 9412\nIDI5 9413\nIO2B 9414\nIGluc3RydWN0aW9ucw== 9415\nIGltcG9ydGFudGU= 9416\nIHdhdmVz 9417\nIGFpZA== 9418\nQ0s= 9419\n6rKg7Iq164uI64uk 9420\nIE1pcg== 9421\nIHRpZA== 9422\nIEhvdA== 9423\nIGFycmFuZ2U= 9424\nIEJhYnk= 9425\nIHRhY2s= 9426\nINGJ 9427\n7Z0= 9428\nIHZlcnRpY2Fs 9429\nIGhlZWw= 9430\nIEN1dA== 9431\nIG5hcnJvdw== 9432\nIEFyaQ== 9433\nIGtuZWU= 9434\nIEJyYXppbA== 9435\nIEZpdmU= 9436\nIHBvc3RlZA== 9437\nVUQ= 9438\nIHJvbGxpbmc= 9439\nzrg= 9440\nIGNsYWltcw== 9441\nIElucw== 9442\nT0s= 9443\n44GE44GG 9444\ndWlu 9445\nIEluc3RpdHV0ZQ== 9446\nIGludGVuc2U= 9447\naWFy 9448\nIE5pY2s= 9449\nIHNlbGVjdGlvbg== 9450\nIGxlZ2VuZA== 9451\nIHVuaWZvcm0= 9452\nw7pu 9453\nIHN0dWRpZWQ= 9454\n5aSq 9455\nINCl 9456\nIOyVjA== 9457\nZ2Vycw== 9458\nIGRvdw== 9459\nIENT 9460\nIGFnZW50 9461\nIEF1Zg== 9462\n6Ka6 9463\nIGpvZw== 9464\nIGFpcmNyYWZ0 9465\n64uY 9466\nIHZpdA== 9467\ndWxz 9468\nIHNlZ21lbnQ= 9469\nIG9yZGVycw== 9470\nIENsYXNz 9471\nIGFwb2xvZw== 9472\nIHBsYXRmb3Jtcw== 9473\nIG15dGg= 9474\n0LDQttC1 9475\nIEJvb2s= 9476\nIHNlbnNpdGl2ZQ== 9477\nINC/0L7Qu9GD0Yc= 9478\nIGRhbWl0 9479\nIENhcHQ= 9480\nc29sZQ== 9481\nIGFyY2hpdGVjdHVyZQ== 9482\nIFdpbA== 9483\nIGluaGVy 9484\nY2Fw 9485\nIEJveQ== 9486\n5qyh 9487\nIGJ1cm5pbmc= 9488\nIFB1YmxpYw== 9489\nIGJlaGFsZg== 9490\nIOychA== 9491\nIHRoZXJhcHk= 9492\ndWJzY3JpYmU= 9493\nIGludm9sdmU= 9494\nIGV4cG9zZWQ= 9495\nacWf 9496\n5Lus 9497\nw6p0cmU= 9498\nIHRvaWw= 9499\nIHNpbms= 9500\ncGly 9501\n5YM= 9502\nSUk= 9503\nIGFnZW5jaWVz 9504\nIHE= 9505\nIERvd24= 9506\nYXVm 9507\nIOunmw== 9508\n44O744O7 9509\nIHByb2M= 9510\nb2tlZA== 9511\nIHN0b3Jlcw== 9512\ncG93ZXI= 9513\nIFRoaW5ncw== 9514\nIGFjY2Vzc2libGU= 9515\nIHRlxbw= 9516\nIEVkdWM= 9517\nIHNwZWFrZXJz 9518\nIFNhcmFo 9519\nlJQ= 9520\nIGRpdmVyc2U= 9521\n7J6W 9522\nIFVsdA== 9523\nw6B5 9524\nIENoaWNhZ28= 9525\nU2hl 9526\nYXRoeQ== 9527\nIGVuYWJsZQ== 9528\nIHRyYWRpbmc= 9529\nIG11c2NsZXM= 9530\n5ps= 9531\nIENhcmU= 9532\nIFVy 9533\nIFNjb3Q= 9534\nIHBocmFzZQ== 9535\nRU5U 9536\nIOqyvQ== 9537\nIEphYw== 9538\ncGFjaw== 9539\nIGRldGVybWluZWQ= 9540\nw7xuZA== 9541\nIG5lZ290aQ== 9542\nIHZpZMOp 9543\nIHJveg== 9544\nIFN1cw== 9545\nIHJpZGluZw== 9546\naG1lbg== 9547\nIERlZg== 9548\nIENyZQ== 9549\n44K5 9550\nIFdhbGw= 9551\naWdhbg== 9552\nIHNlbXByZQ== 9553\n0ZbQtA== 9554\nIGRyaXZlbg== 9555\nIGZvb3RhZ2U= 9556\nIGZvbmQ= 9557\nIFdheQ== 9558\nw6Rt 9559\nIE9iYW1h 9560\nIFNlcnZpY2U= 9561\nIDc1 9562\nIERhcms= 9563\nIOq3vOs= 9564\nIENhdA== 9565\n2Lc= 9566\n6Yw= 9567\nIGp1Zw== 9568\nIGV0d2Fz 9569\nIGJyZWF0aGluZw== 9570\n4buD 9571\n5YW2 9572\nIFdlYg== 9573\n5LmL 9574\n6LWw 9575\nIGZvaXM= 9576\nIGxpZ2h0aW5n 9577\nIERB 9578\nIG9ic3Q= 9579\nIGxldXI= 9580\n54++ 9581\nIEVneXB0 9582\nIEFybXk= 9583\naWNpZGU= 9584\n0LDRgtC4 9585\nIOuLpOs= 9586\nIGFwYXJ0bWVudA== 9587\nIGNoaWVm 9588\nIFdlZA== 9589\nIG5ldHdvcmtz 9590\nIGJhdHQ= 9591\n5rg= 9592\nIEx1Yw== 9593\nIG5pY2VseQ== 9594\nIHZlcmI= 9595\n4Li0 9596\n7LY= 9597\nb3NpdA== 9598\nIHJldmVhbGVk 9599\nIHRhdA== 9600\nIHRpZWQ= 9601\n4buB 9602\nIGFuaW1hdGlvbg== 9603\nIHJvbGVz 9604\n7Iqk7Q== 9605\nIHZlcnNpb25z 9606\n0YfQuNGC 9607\nIHRhc2tz 9608\nr7w= 9609\nIHJlc2M= 9610\nc2hl 9611\nIGxvb3Nl 9612\nIGPhuw== 9613\nIGNvaXNh 9614\nIGFsZXJ0 9615\nIG5pbg== 9616\nIFNBTQ== 9617\nIHRyYWJhag== 9618\naXJ1cw== 9619\nVEg= 9620\nxqE= 9621\nb2dldGhlcg== 9622\nIFRhaQ== 9623\nIGZpZ3VyZXM= 9624\nINeQ16o= 9625\nIGNyZWVw 9626\nIGludmVzdGlnYXRpb24= 9627\nIHJlY29tbWVuZGVk 9628\nIEFr 9629\nIHJlc2lkZW50cw== 9630\n0YHRgtCy0L4= 9631\nc2VjdA== 9632\n0LDQvdC40LU= 9633\nIG1pbmRz 9634\ndWluZw== 9635\n5bE= 9636\nb3dpbmc= 9637\nIG5vZw== 9638\nIHJheg== 9639\n2KfYsQ== 9640\nIHF1b3Q= 9641\nINC40YU= 9642\nIHNlZA== 9643\nIGFwcGxhdWQ= 9644\nIGNvdmVyYWdl 9645\ndm9s 9646\nIFJlYw== 9647\nxJs= 9648\nINCy0YHRkQ== 9649\nIGV4cGVjdGluZw== 9650\nIG9wZXJhdGU= 9651\nIGNvbnZlcg== 9652\nIFN1Y2g= 9653\nIFJhZA== 9654\nIFByaW1l 9655\nIHB1cnBsZQ== 9656\nIDIwMTA= 9657\nIOyViOs= 9658\nIGV4ZW0= 9659\nIGNvbXBhcmlzb24= 9660\nIGxhbmRzY2FwZQ== 9661\nIG5laXRoZXI= 9662\nIEVo 9663\n64U= 9664\nIHN0b21hY2g= 9665\nIGNhc28= 9666\nw6Ju 9667\nIHBlcmNlbnRhZ2U= 9668\nd2ljaA== 9669\naXRhbg== 9670\nIGts 9671\nIGV4cGFucw== 9672\nINin2YTZhQ== 9673\nIG9jY2FzaW9u 9674\ncmV0cw== 9675\naWduaW5n 9676\nIGtpbG9tZXQ= 9677\n6Lef 9678\nIGd1c3Q= 9679\nY3pl 9680\nIHVyYmFu 9681\nIGFncmlj 9682\nIGFzc2lzdGFuY2U= 9683\nIHN1cmY= 9684\naW1ldGVy 9685\nIHBldGl0 9686\nIGFzc2Vzc21lbnQ= 9687\nIG1hbnVhbA== 9688\nIGltcHJvdmVk 9689\nYnN0 9690\nIHBpbG90 9691\nIE1hcnM= 9692\nIHZpZWxl 9693\nIENvbmdyYXR1bGF0aW9ucw== 9694\nIGFyZ3Vl 9695\nIHdpcmtsaWNo 9696\nIGNsaWNraW5n 9697\nUklT 9698\nIGxvZ28= 9699\nIG91dGNvbWU= 9700\nIENlbnRyYWw= 9701\nIEpp 9702\nIGdhbWluZw== 9703\nIGNvbnNlcnY= 9704\nIHVsdGltYXRl 9705\nIFZl 9706\nIFdhbA== 9707\nYXJv 9708\n5oSf 9709\nc3Rhcg== 9710\nIGNvbnN1bWVy 9711\nIHRyYXZlbGluZw== 9712\naW1lcg== 9713\nIDEwMDA= 9714\n0L3QuNC6 9715\nIHByaW5jaXBhbA== 9716\nIHNha2U= 9717\n0ZbQsg== 9718\nIG1vdXNl 9719\nYXJpb3M= 9720\nIHJlbGF0aW9u 9721\n6Ieq 9722\nIG1vcmFs 9723\n5ZWm 9724\nIHRoZXRh 9725\nd3k= 9726\nIGthbQ== 9727\nIGVpZw== 9728\nIGdvbGRlbg== 9729\n16Q= 9730\nIGFtcGw= 9731\nIHZ1 9732\nc3Ry 9733\ncm9ycw== 9734\nIHdoZXJlYXM= 9735\naXphcg== 9736\nIGFkbWluaXN0cg== 9737\nIG7Ds3M= 9738\nIFByZXQ= 9739\nIEFjYWQ= 9740\nYW5naW5n 9741\nYmFnZQ== 9742\nw6l0YWl0 9743\ndXJp 9744\nIGhlYWxpbmc= 9745\nIHRpcG8= 9746\nIG1hcnJ5 9747\n0YPQsg== 9748\nIGVzdGF0ZQ== 9749\ndXU= 9750\n7JQ= 9751\nIEJlc3Q= 9752\nIHN1ZmZlcg== 9753\nIDE5NA== 9754\nIGJhY3Rlcg== 9755\nINCS0L7Rgg== 9756\nIE9t 9757\nIGR6 9758\n6LY= 9759\n7KY= 9760\nIG9sZHU= 9761\nIHBoeXNpY2FsbHk= 9762\nIExvdWlz 9763\nZXRpbWU= 9764\nY2FzZQ== 9765\nIHBpZXI= 9766\n7KCc 9767\ndmFu 9768\nIGFzc2V0cw== 9769\nIOuB 9770\ndmV0 9771\n0LjQsQ== 9772\nIHByb21vdGU= 9773\nIGNvbmdyYXQ= 9774\ndWVzZGF5 9775\nIGR1dHk= 9776\nIFZpZGVv 9777\n2K4= 9778\nIEpvaG5zb24= 9779\na3Rpb24= 9780\nIFZvY8Oq 9781\n44CL 9782\nIGFp 9783\nIGFubnVhbA== 9784\nIEpvc2g= 9785\naXR0ZQ== 9786\nIEpP 9787\nIHNsaWRlcw== 9788\nIGFuYw== 9789\nuYQ= 9790\ndGVlbg== 9791\nIGNhcnJ5aW5n 9792\nbHltcA== 9793\nZWRpbmc= 9794\nIGZybw== 9795\nIGFkbWl0 9796\ncmVy 9797\nIG9mZmljaWFscw== 9798\ncHRpb25z 9799\nZ2Fs 9800\nIGhldXRl 9801\nIHZvaWNlcw== 9802\nIGJhbGxz 9803\nIGd1ZXN0cw== 9804\nYW5uZXI= 9805\n44CK 9806\naXNoZXI= 9807\nIE1S 9808\nIFJpY2hhcmQ= 9809\nIHJvdWdobHk= 9810\nbMSx 9811\nIHZpY3Rvcnk= 9812\nIGFsZ3Vu 9813\nIE1ycw== 9814\nxZtjaWU= 9815\nIFVr 9816\nIGV5 9817\nIFdhcnM= 9818\nIGJyYW5jaA== 9819\nYXN0eQ== 9820\nIFByaW5jZQ== 9821\n0LXQutGC 9822\nIHJlY29nbml6ZWQ= 9823\nIG11Y2hv 9824\nIExlYXZl 9825\nY29ubmVjdA== 9826\nIHNwZWxs 9827\nIHRvdWNoZWQ= 9828\nIGFnZW5kYQ== 9829\n6L4= 9830\nYXJpYQ== 9831\nIEtvbmc= 9832\nb2dh 9833\nIHBhcmFtZXRlcnM= 9834\n64uk6w== 9835\nIGluc3RhbnQ= 9836\nIHJlZ3Vs 9837\nQ29u 9838\nIGVkaXRvcg== 9839\nIERpc3Q= 9840\nIHVua25vd24= 9841\nIHB1bmlzaA== 9842\nIGV4cGVjdGF0aW9ucw== 9843\nIGNyeXB0 9844\nIGRpdmlkZQ== 9845\nYWtlbg== 9846\nIE1lc3M= 9847\nIGh5cGVy 9848\nIFByb2plY3Q= 9849\naWtp 9850\nIGFnb3Jh 9851\nIGFidXNl 9852\nIGNhdXNpbmc= 9853\nIGNvbnZpbg== 9854\nIExB 9855\nIGNvbmNlbnRyYXRpb24= 9856\nIGJyZWFrcw== 9857\ndXJlcg== 9858\nIGNvbmNyZXRl 9859\nIGZvcm1hbA== 9860\nIGJldGE= 9861\naXRvcnM= 9862\nIENoYW1w 9863\nIGhlYWRpbmc= 9864\nIEJsbw== 9865\nIHByZW5k 9866\nIFNlbmF0ZQ== 9867\nIGFkdmVudHVyZQ== 9868\nb3Nv 9869\nIG9wZW5z 9870\nIFBMQVlJTkc= 9871\nIFNV 9872\ndXJlbg== 9873\naWt0 9874\nINC70Y7QsQ== 9875\nIEZvbGxvdw== 9876\nIEJpZGVu 9877\nZWxu 9878\nIFNreQ== 9879\nZXRpbmc= 9880\nIEV4dA== 9881\n0L3Rg9GO 9882\nIOyZnA== 9883\nIHNocg== 9884\nZWxsYQ== 9885\nIERpdg== 9886\nIHRyYW5zZm9ybWF0aW9u 9887\nIGhvdXNlaG9sZA== 9888\nZXRyeQ== 9889\n6KE= 9890\nIERlc3A= 9891\nIGNvdXJhZ2U= 9892\nIHBhcmtpbmc= 9893\nIGV0dMOk 9894\nY2Fs 9895\nbHlu 9896\nIGxhaWQ= 9897\nIHRyaWVz 9898\naXJ0cw== 9899\naWdh 9900\nIHJlY2FsbA== 9901\naWZpZXI= 9902\nz4HOsQ== 9903\nIGFhbg== 9904\nIGJ1dHRvbnM= 9905\nIHJlYWNoaW5n 9906\nIOq3vOuNsA== 9907\nIHNwYXJr 9908\nIFNvY2lhbA== 9909\nINC10YnQtQ== 9910\nIGNhbmFs 9911\nIGNyaXRlcg== 9912\nIGt0w7NyeQ== 9913\nIHRlbmVtb3M= 9914\ngqw= 9915\nINC90LXRgg== 9916\nIHR1YmU= 9917\nYWNsZXM= 9918\n0LjRiA== 9919\nIGRlxJ9pbA== 9920\nIHN0YW1w 9921\nIGluZmw= 9922\nIGFob3Jh 9923\nIHRyYWls 9924\nIG1peHR1cmU= 9925\nIFJvbGw= 9926\nIHJvdXRpbmU= 9927\nIGNvdW50eQ== 9928\nIGVuam95aW5n 9929\n0L3QvtGB0YLRjA== 9930\nZXJlcw== 9931\nIHB1cnBvc2Vz 9932\nIFNhbnRh 9933\nIGJyZWFzdA== 9934\nw6RuZw== 9935\nIHdyaXRlcg== 9936\n5Yw= 9937\n0YDQvg== 9938\nIG5lbQ== 9939\naWNvcw== 9940\n0LDRgdGC 9941\nIGRldGFpbGVk 9942\nIHJldmVyc2U= 9943\nIFJlYWR5 9944\nIGRpc3RyYWN0 9945\nIEFsb3Jz 9946\ndXR0ZXI= 9947\nIGRlc2VydmU= 9948\nIFJvbg== 9949\n0L3QvtC8 9950\nIG9ic2Vydg== 9951\nIGxvZ2lj 9952\nIFB5 9953\nIEtldmlu 9954\n44Gd44GG 9955\npbQ= 9956\n2YrZhg== 9957\nIHNrYQ== 9958\nIHRhY3Q= 9959\nIGhvbGlkYXk= 9960\nIGJ1bXA= 9961\nINC80L7Qsw== 9962\nIGRlaXg= 9963\n7YU= 9964\nIHdvcnNoaXA= 9965\nQ2w= 9966\nIHN1Y2s= 9967\nINGB0LXQsQ== 9968\nIGFwcGxhdXNl 9969\nIEVw 9970\nINC80L4= 9971\nIHBhdGNo 9972\n4bqt 9973\nIGxhZGllcw== 9974\nIGJyb2FkY2FzdA== 9975\nIGlsbGVn 9976\nIG5hcnJhdGl2ZQ== 9977\nb3NzYQ== 9978\nQVJSQVRPUg== 9979\nIHNhbmc= 9980\nIG1vdmVtZW50cw== 9981\nIHBhcnRuZXJzaGlw 9982\nIG9yZ2FuaXplZA== 9983\nIG5vZGU= 9984\nZXN0eWxl 9985\nIE1lZw== 9986\nIGluZHVzdHJpYWw= 9987\nIGdvbA== 9988\nIGJvcmluZw== 9989\n5Yqg 9990\n44GU 9991\nIGN1dHM= 9992\nIHJlY29u 9993\nYXNh 9994\nIGltcHJlc3Npb24= 9995\n7Jq0 9996\nZ2ll 9997\nTUE= 9998\nhrU= 9999\nIGVkaXRpbmc= 10000\ncm9udA== 10001\nIGZvbGxvd3M= 10002\nIEl0YWxpYW4= 10003\n0YDQvtC0 10004\nIOqwmeydgA== 10005\nIOuwqQ== 10006\nIHBhcnRpY2xlcw== 10007\nIEJvYXJk 10008\n15nXqg== 10009\nanVu 10010\ncm9uaWM= 10011\nIGVq 10012\nIM+Ezrc= 10013\n15XXkw== 10014\nY2lvbg== 10015\naXR0eQ== 10016\nIFR1ZXNkYXk= 10017\ndW1lcw== 10018\nIFByb3Q= 10019\nZWRlcg== 10020\nIHBlc3NvYXM= 10021\nINC90L7Qsg== 10022\nIHNraXA= 10023\nIG9iamVjdGl2ZQ== 10024\nw61hcw== 10025\nIGRlc2s= 10026\nIExvb2tz 10027\ndW5kZW4= 10028\nIHByaW1hcmlseQ== 10029\naW1lbnRv 10030\nIHJlcG9ydGluZw== 10031\nIGhhY2U= 10032\nIGNoZWNrZWQ= 10033\n6Zg= 10034\nIOuztOs= 10035\nIHNtZWxscw== 10036\nIGFjdG9ycw== 10037\nIEFzaWE= 10038\naWzDoA== 10039\nIHJlY2VpdmluZw== 10040\nIHRheGVz 10041\nIGdyYWNl 10042\nIGNvbXBldGl0aXZl 10043\nIGRpdmlzaW9u 10044\nIGVzcGVy 10045\nIHdoZWVscw== 10046\nIGtvbW10 10047\nIHRyZW1lbmRvdXM= 10048\nIGVzcGU= 10049\nLi4uKQ== 10050\nIOyehQ== 10051\nIGxpc3RlZA== 10052\nw6RsbA== 10053\nIHVudXM= 10054\nIEhvbGx5 10055\nIGd1aWRhbmNl 10056\nIGN1Yg== 10057\nIGludGVsbGVjdA== 10058\nINCx0YvQuw== 10059\nIHJlZ2FyZGxlc3M= 10060\nIFN0YW4= 10061\n5rKh 10062\nIGNvbmNsdXNpb24= 10063\nYWNhxJ8= 10064\nIGxvbA== 10065\nIEJhdA== 10066\nIG1hbmlmZXN0 10067\nIENoaWVm 10068\nIHNoYW1l 10069\nIG91dGNvbWVz 10070\nIG1haWw= 10071\nIGt1cg== 10072\nzrnOug== 10073\nZXR6 10074\nIHByZXBhcmluZw== 10075\nMjc= 10076\nIFF1ZWVu 10077\n4K6z 10078\nIOu5hA== 10079\nIHRpc3M= 10080\nIGNvbnNjaW91c25lc3M= 10081\nIHBhbnRz 10082\nIG1lbHQ= 10083\ndWNodA== 10084\naW5o 10085\n7JuM 10086\nIHZvdHJl 10087\nIG1vZHVsZQ== 10088\nb3d5 10089\nIG1vbnN0ZXI= 10090\nIOuG 10091\nIGVsZWN0cm9uaWM= 10092\nIGNlbnRyZQ== 10093\nIHN0b3Bz 10094\nIHRvdQ== 10095\nIOut 10096\nIGxhbWI= 10097\nIGNvbnNlcXVlbmNlcw== 10098\nIHN0cmF3 10099\nIGltcGVy 10100\nIGV4dGVuZA== 10101\n44Gj44Gf 10102\nIGFuc3dlcmVk 10103\nIE1haA== 10104\nIExBVVJB 10105\naWZ0aW5n 10106\ndWF0ZQ== 10107\n5YWI 10108\nIFVTQg== 10109\nIEFuZHJldw== 10110\n44Kr 10111\nIEZyZWQ= 10112\nIERF 10113\nIEdlb3Jn 10114\n57s= 10115\nw6xuaA== 10116\nIGRyYXdu 10117\nIGxpcHM= 10118\nYmly 10119\nIG1heW9y 10120\naW1p 10121\nIGVuY29yZQ== 10122\n5ZCD 10123\nZm9ydGFibGU= 10124\ndXJzZGF5 10125\nIEZvcm0= 10126\nIGJsYW1l 10127\nIHNob3dlcg== 10128\nIGNvbnRhaW5lcg== 10129\nc3RlcnM= 10130\ndWRlcw== 10131\nIFRheQ== 10132\n4Lil 10133\nIOyYiA== 10134\nIHZvbQ== 10135\nIGJhc3M= 10136\nIExhYg== 10137\naXNzYQ== 10138\nIGRpbWVuc2lvbg== 10139\nIGV4ZWN1dGl2ZQ== 10140\nIFJvbQ== 10141\n6rKM7JqU 10142\nIERvY3Rvcg== 10143\nIGRlbGl2ZXJlZA== 10144\nIGdhbmc= 10145\nIGNlcg== 10146\nIHBpdA== 10147\nZWxp 10148\nIGV4dHJhb3Jk 10149\namFy 10150\nIGRlcml2 10151\nIGlsbG5lc3M= 10152\nIGd1bnM= 10153\nIDIwMTE= 10154\nIGFpcnBvcnQ= 10155\n0JU= 10156\nIGF0dGl0dWRl 10157\nIGdyYXQ= 10158\nIFdy 10159\nIE5BUlJBVE9S 10160\nIOyalA== 10161\nIHJlbmV3 10162\nIGNvc2E= 10163\nIGNvbnRyb2xsZWQ= 10164\nb21teQ== 10165\nb25kcw== 10166\nIGVzZQ== 10167\nw6RjaA== 10168\nIHZlbmQ= 10169\nZGFt 10170\nIGFyZ3U= 10171\nIGFjY2VsZXI= 10172\nIG5haWw= 10173\naWVuZQ== 10174\n7IOd 10175\nIGVuY29udA== 10176\nZXNlYXJjaA== 10177\n6aE= 10178\nIGdvb2Rz 10179\nIGZpc2hpbmc= 10180\nQVBQTEFVU0U= 10181\nIE5BUw== 10182\nZWN0aW9u 10183\nIHRlbXBsZQ== 10184\nbGljaGU= 10185\nIGtleWJvYXJk 10186\n562J 10187\nIGRlc2Rl 10188\nIGVkdWNhdGlvbmFs 10189\nIE5pZ2h0 10190\nMzM= 10191\nIGJyZWF0aGU= 10192\nbGljaGVu 10193\ndGht 10194\nacOocmU= 10195\n4Lia 10196\nbGFyxLE= 10197\nIGFsaQ== 10198\nIGNvbXBvcw== 10199\nIHNlbnNvcg== 10200\nIOu2gOs= 10201\nIG5ld3Nw 10202\nIEJ1bmQ= 10203\nIE1p 10204\nIHBlcmZvcm1pbmc= 10205\nIGRydW0= 10206\nQkU= 10207\nIHBvcms= 10208\nIGNvYWw= 10209\nZW5nZXI= 10210\nIHJhbQ== 10211\nIOuyiA== 10212\n54S25b6M 10213\n0LjRgNC+0LI= 10214\nIFBvcA== 10215\nIHBob25lcw== 10216\nIGZhY2ls 10217\nIHRyYWNrcw== 10218\nb250ZQ== 10219\nIG9yZ2FuaWM= 10220\nIGRpYWxvZ3Vl 10221\nIEhhdmluZw== 10222\nIFBvc3Q= 10223\nIHBheW1lbnQ= 10224\nIGFycmF5 10225\nIGludGVuZGVk 10226\nw7pz 10227\nIGJhcnM= 10228\nIHJldmlld3M= 10229\nbGFuZHM= 10230\nIGtpbmdkb20= 10231\nIHN0YWdlcw== 10232\nIG1vdW50YWlucw== 10233\nIGR1bg== 10234\nIGRlY2ly 10235\nxI0= 10236\nIGJhbmtz 10237\nIHRocm93aW5n 10238\nIOuquw== 10239\nIGFuZ2Vy 10240\nINGB0LXQudGH0LDRgQ== 10241\nIGRpc3R1cg== 10242\nIGh1bWFuaXR5 10243\nIGVsZXM= 10244\nIHNob3VsZGVycw== 10245\nIFBlcmZlY3Q= 10246\nIGZhbmN5 10247\nIGJyaWxsaWFudA== 10248\nIGluc3BpcmF0aW9u 10249\naG1t 10250\n5b+r 10251\nIGxpZA== 10252\nVUw= 10253\nIG3DpQ== 10254\naW5kaQ== 10255\n6Ig= 10256\nIHNoaWVsZA== 10257\nIOyYpOs= 10258\nQ1Q= 10259\nYWdpbmU= 10260\ndWJlcg== 10261\nIEJS 10262\nIHF1ZXN0bw== 10263\nINC30LDQug== 10264\nIEtub3c= 10265\nIHRhbmc= 10266\n7ZWp64uI64uk 10267\nIGJhcmVseQ== 10268\nIFNF 10269\nIG1hcmdpbg== 10270\ncmVp 10271\n0LDRgtC10LvRjA== 10272\nIGNvbnRy 10273\nIHbDoA== 10274\nIGxlZ2l0 10275\n0Jg= 10276\na2lucw== 10277\n0YDQtdC0 10278\nIEFzaA== 10279\nIGFkdmlz 10280\nIEdyZWVr 10281\n0YPQug== 10282\nIHNoYWtl 10283\naWRhZGVz 10284\n0LDRgdGM 10285\nIGNvbnZlbnRpb24= 10286\nIGNvbnRlc3Q= 10287\nTVM= 10288\nIFllYXI= 10289\nIHJlcHJlc2VudGF0aW9u 10290\naW5kZW4= 10291\nZW5kYXI= 10292\nIHByb3N0 10293\nIEh1bWFu 10294\nIEN5 10295\nYW5nZWQ= 10296\nUEE= 10297\nIGF4aXM= 10298\nIHRoZW9yZQ== 10299\nYXR6 10300\nIO2VmOqzoA== 10301\nIGVscw== 10302\nIFJlc2VhcmNo 10303\nIGJlbmVmaWM= 10304\nIGRlbnNpdHk= 10305\naW5kbw== 10306\n7Jy8 10307\naW1kaQ== 10308\nIHJlc2VhcmNoZXJz 10309\n6rGw65Og 10310\naWdocw== 10311\nZGFu 10312\nIGRpY2U= 10313\nIG1hYXI= 10314\nIHN1Ym1pdA== 10315\nIGR1bWI= 10316\nIGJpag== 10317\nYXdheQ== 10318\nIFBhc3M= 10319\nIGV4dGVuc2lvbg== 10320\nIGNydXNo 10321\nIGNvdmVyaW5n 10322\nZWRp 10323\nYm9ybg== 10324\naW5hdGlvbnM= 10325\nINGB0LTQtdC7 10326\n0LLQtdGA 10327\nIE90aGVyd2lzZQ== 10328\naXN0YW50 10329\n0LDQudGC0LU= 10330\nIHRhbnRv 10331\nIHBlcmZvcm1lZA== 10332\nINC30LDQvw== 10333\nYWxv 10334\nIEZvdW5kYXRpb24= 10335\nIHByb3RvY29s 10336\nIFpv 10337\nbWF5 10338\nIGhhY2s= 10339\nIGJ1ZGR5 10340\nbWFkZQ== 10341\nIGFkcw== 10342\nIGZhc2NpbmF0aW5n 10343\nIGVxdWl2YWxlbnQ= 10344\nZ2Vs 10345\nIGFyYw== 10346\nINGH0LXQu9C+0LI= 10347\nIHByb3Bvc2Vk 10348\nIG5vdHJl 10349\nYW5nZXM= 10350\nIGNvdW5zZWw= 10351\nYWxsYQ== 10352\nIDMx 10353\nd2VldA== 10354\nyJk= 10355\nIGVsZWN0cmljaXR5 10356\nIHRveA== 10357\nxYJhZA== 10358\nIOy0 10359\nIGRpZmZpY3VsdHk= 10360\noNeZ 10361\nbmVzZGF5 10362\n0LjRgdGM 10363\nIGFsbGVn 10364\nIEdP 10365\nIHF1aXQ= 10366\nIEhlcnI= 10367\nIGVzdMOhbg== 10368\nIGdpcmxmcmllbmQ= 10369\nIHRlbmc= 10370\naWZpY2lhbA== 10371\nIEphbQ== 10372\nIGNhbmNlbA== 10373\nIGZyZXF1ZW50bHk= 10374\nSVY= 10375\n5a+m 10376\nIGNsb3Npbmc= 10377\nIGRlY2FkZQ== 10378\nIHJlcHJlc2VudGVk 10379\nIENhbmFk 10380\nINC60L7RgtC+0YDRi9C1 10381\nIGVzdGFtb3M= 10382\nIFRodXJzZGF5 10383\nIEdh 10384\nIExpdmU= 10385\nbGVt 10386\nYmJsZQ== 10387\nU09O 10388\nIDIwMDg= 10389\nIGRpY2g= 10390\nIEF3ZXNvbWU= 10391\nIGNvbmNlcHRz 10392\nUEVBSw== 10393\nIGxpdGVyYXR1cmU= 10394\nIE9seW1w 10395\n0LvQsNC0 10396\nIG5vc3Q= 10397\ndml0 10398\nIEVudGVy 10399\nb3JkZXJz 10400\naWNraW5n 10401\nbmllag== 10402\nIGV1Y2g= 10403\nIFRob3VnaA== 10404\nIGJhZ3M= 10405\nIGxpbWl0cw== 10406\nIHN0YWtl 10407\ng6U= 10408\nIG9j 10409\nIFZpcw== 10410\nIDEyMA== 10411\nIG51ZQ== 10412\nIGNvbmNl 10413\nIGRpc2Fn 10414\n56g= 10415\nIGFudGljaXA= 10416\noIg= 10417\nc2w= 10418\nIHZvdGluZw== 10419\nIGV4cG9zdXJl 10420\nIENvbW11bml0eQ== 10421\nIEp1c3RpY2U= 10422\nb3JuZXk= 10423\nc3p5c3Q= 10424\nIGZyaWVk 10425\n7Iuc6w== 10426\nIFdpbg== 10427\nIEA= 10428\nIEhvcGVmdWxseQ== 10429\nZXN6 10430\nIG1vbmRl 10431\nIGNvbWJpbmU= 10432\nZ21lbnQ= 10433\nIHJlY29tbWVuZGF0aW9ucw== 10434\nIHByZWduYW50 10435\n7Iud 10436\ncmFm 10437\nIGx1 10438\n6ICB 10439\n5LuA5LmI 10440\nZG9vcg== 10441\n0LDQt9GL0LI= 10442\ndWVnbw== 10443\nIGltcHJvdmVtZW50 10444\nIHRyaW0= 10445\nIGVpZ2Vu 10446\nIGFwcHJveGltYXRlbHk= 10447\nINCy0LDQvA== 10448\nYXdh 10449\nINGB0L7QsQ== 10450\nIGNvcm9u 10451\nIG9uZ29pbmc= 10452\nIGhlcw== 10453\nIGluanVyeQ== 10454\nIGZyYW5r 10455\nIGthZGFy 10456\ncmVuY3k= 10457\nIENvbG9y 10458\nIEdydQ== 10459\nIGRpcA== 10460\n0YDRiw== 10461\nIHRlYXJz 10462\nZ3Q= 10463\nIFBE 10464\nIHBhdXNl 10465\nb3Nj 10466\nIHVzdGVk 10467\nIFdvbw== 10468\nIHdpxJk= 10469\n6KaL 10470\nIGRlbm4= 10471\nIFBldA== 10472\nIG92ZXJjb21l 10473\nIOuCtOqwgA== 10474\nIE1vdmU= 10475\nIGxpY2Vuc2U= 10476\nIHJlcGVhdGVk 10477\n4K+H 10478\nIGNhdGVnb3JpZXM= 10479\nIG5vb2RsZXM= 10480\nIGZsb29k 10481\nIE1hc3M= 10482\nIG51dHM= 10483\nIEplc3M= 10484\nIElo 10485\nIGNoYW5jZXM= 10486\nkJg= 10487\nIGRvbmRl 10488\nSUc= 10489\nIGFuZGVyZQ== 10490\nIGJvbmVz 10491\n7J6R 10492\nIGVmZmljaWVuY3k= 10493\nIG1vZGVy 10494\ncm9hdA== 10495\nIOydtOqyjA== 10496\naWxsZXI= 10497\nIG9tZWdh 10498\nINC/0L7Qsg== 10499\nIEdyb3Vw 10500\nIHByb2R1Y2luZw== 10501\nYW1v 10502\nIHBhcnRpY2lwYW50cw== 10503\ndXBw 10504\naWZpY2U= 10505\nIGZvcnR1bg== 10506\naWV0bmFt 10507\nYWNhaw== 10508\nIEtv 10509\nbWnFnw== 10510\nIGphaWw= 10511\nIEpvbmVz 10512\nxZtteQ== 10513\nIERldXRz 10514\nIGJyaWVmbHk= 10515\nIFRhbA== 10516\nIFBlcmhhcHM= 10517\nIFJ1Yg== 10518\nIEtu 10519\n64uk64qU 10520\ncsOp 10521\nIHZvY8Oqcw== 10522\nIENoYXJsZXM= 10523\n0LXRgtC1 10524\ncmllcnM= 10525\nIGhlYWw= 10526\nYW50ZWU= 10527\nIGRlbW9jcmFjeQ== 10528\nIGxvYW4= 10529\nIGNoZWY= 10530\n0Y/QvA== 10531\nIHVuY29tZm9ydGFibGU= 10532\nIGV0ZXJu 10533\nYXBwaW5n 10534\nIHJlcGFpcg== 10535\ncm90 10536\nIFRhcg== 10537\nIGNvdmVycw== 10538\nb21pbmc= 10539\nIEV0aA== 10540\nIM6t 10541\n0YfQvdC+ 10542\nIGFmdGVyd2FyZHM= 10543\nINCy0LXRgA== 10544\nIGRhaGE= 10545\nIGtuZWVz 10546\nIG9yZGluYXJ5 10547\nw7xs 10548\nZ2Fz 10549\nIHRpY2tldA== 10550\nIOyggOuKlA== 10551\nIOyeiOyKteuLiOuLpA== 10552\nY2h0ZQ== 10553\nTXI= 10554\nIHNpc3Q= 10555\naHVp 10556\n6re46w== 10557\n7Jes 10558\nIHZhcnk= 10559\nIG1lbW9y 10560\nIGNvbnRyb2xsZXI= 10561\nIGLEmWR6aWU= 10562\nIG1pbmlzdGVy 10563\n15I= 10564\nZmxvdw== 10565\nQUg= 10566\nIHRvd2Vy 10567\n55A= 10568\nIHNjYXI= 10569\n5oOF 10570\nIFBlbg== 10571\nIHBhw61z 10572\n15g= 10573\n7J246w== 10574\nIGVuZXJn 10575\nIHN3b3Jk 10576\nIHBhcGVycw== 10577\n0LjQu9Cw 10578\nIFdlZG5lc2RheQ== 10579\nIEZvcmNl 10580\nIGV4dHJhb3JkaW5hcnk= 10581\nIExha2U= 10582\nIOqwgOs= 10583\nIEJlYXV0 10584\nIHJlYXNvbmFibGU= 10585\nIGNvbnRyaWJ1dGU= 10586\nIHBsZWFzZWQ= 10587\nIHVwZGF0ZWQ= 10588\nIHBpw7k= 10589\nZWxv 10590\nIHNpZ25pZmljYW50bHk= 10591\nIGJvdA== 10592\nIGdlbmVyYXRpb25z 10593\nIHByb3RlY3RlZA== 10594\n5ZOI 10595\nIGhpZGluZw== 10596\nIElsbA== 10597\nIG5ldXRyYWw= 10598\nXSw= 10599\nz4TOvw== 10600\nIHRvbmd1ZQ== 10601\nVGhhbms= 10602\nIOqzhA== 10603\nIHBheXM= 10604\nzq/OvQ== 10605\nIGFwcGxl 10606\nMDE= 10607\nZXJr 10608\naWVyYQ== 10609\nIGplZw== 10610\nIFN1YnNjcmliZQ== 10611\nIHRoZWF0ZXI= 10612\nIHN0cm9uZ2x5 10613\nIOyGjA== 10614\nINC/0YDQsNCy 10615\ndWNreQ== 10616\nIEppbg== 10617\na3dhcmQ= 10618\n6rG0 10619\nIG9wcG9uZW50 10620\nIFNP 10621\nIGhvbHk= 10622\nIGZpbGxpbmc= 10623\nOl0= 10624\nIGhpag== 10625\n0Jw= 10626\nIGJpc3M= 10627\nIGJsZW5k 10628\nIGltcGxpYw== 10629\nIOy9 10630\nbGxlaWNodA== 10631\n2YrYqQ== 10632\nYXNhbnQ= 10633\nZXJ0ZQ== 10634\nIFNhbWU= 10635\nIGludGVyaW9y 10636\nU2U= 10637\nIGJlbmNo 10638\nIHBvY28= 10639\nIG1hcmtz 10640\nIHdpbnM= 10641\n5ZaU 10642\nIM6z 10643\nIGRpc3RpbmN0 10644\nIEFzaWFu 10645\nIG1vbGVj 10646\nIEphY2tzb24= 10647\nIGVhc3Q= 10648\nIHBoeXNpY3M= 10649\naW1hbA== 10650\nIHBlYWs= 10651\nYXJpYW4= 10652\nZXBz 10653\nIG5lYXQ= 10654\nINCy0LDRgQ== 10655\ndXJuaW5n 10656\nIHN5bnRo 10657\nIHJldmVhbA== 10658\nxbo= 10659\nZ29u 10660\nbmlz 10661\nYXRpdg== 10662\nIExhcw== 10663\nIHB5 10664\nIE1hamVzdHk= 10665\nIFZhbGxleQ== 10666\nIGVuZg== 10667\nIGdlbnM= 10668\nIHJvb3Rz 10669\nZXpl 10670\nYmV0 10671\nIGFjdHM= 10672\n6Zo= 10673\n6JA= 10674\nIHBoaWxvc29waHk= 10675\nIG1hdGNoZXM= 10676\nnWk= 10677\nIGp1xbw= 10678\nIGRlc3Blcg== 10679\nIEVkdWNhdGlvbg== 10680\nIHNwb3Rz 10681\nIHJlZ2lvbnM= 10682\nQXI= 10683\nIE5hbQ== 10684\nZWVu 10685\nIGRpYWdyYW0= 10686\nIHJlbHk= 10687\nIHRlbnM= 10688\nIGRhdGluZw== 10689\nIGNvYXQ= 10690\nIEhvcg== 10691\nIGFja25vd2xlZGdl 10692\nIFByZXR0eQ== 10693\nINC/0L7Qvw== 10694\nIHZvaXI= 10695\nIGZhdm91cml0ZQ== 10696\nIG1vxbw= 10697\nIGtt 10698\nIERP 10699\nIGZlcnQ= 10700\nIOuPhA== 10701\nIFBhYw== 10702\nIGZvbnQ= 10703\nIGZpbmRz 10704\nIEl0YWx5 10705\nINC60L7Quw== 10706\nIGNvbXBhc3M= 10707\n67M= 10708\nbGlhbWVudA== 10709\nIG5vdGlvbg== 10710\nIGluamVjdA== 10711\nIHdpc2RvbQ== 10712\nIMOc 10713\nIE1vb24= 10714\nIEJ1c2luZXNz 10715\ncmljcw== 10716\nIFlvdXQ= 10717\nIGZvcmdpdmU= 10718\nIGZpbmFuY2U= 10719\naWxv 10720\n2KM= 10721\nYWhs 10722\nIGRlbW8= 10723\nIGNsaW1i 10724\nIGV4cG9ydA== 10725\n5aA= 10726\nIHN1Y2Nlc3NmdWxseQ== 10727\nIEZlcg== 10728\ncGVjdGVk 10729\nZGVt 10730\nIHJldGlyZQ== 10731\nIGxhcHRvcA== 10732\nIHNwaXI= 10733\nIEFzc29jaWF0aW9u 10734\nINCz0Ls= 10735\nIFNlbA== 10736\nIO2VnOs= 10737\nIGVtcGxveWVl 10738\nIG1vbHQ= 10739\nUkw= 10740\n0K8= 10741\nIGNvbnRyYQ== 10742\nIHVn 10743\nIEJhbGw= 10744\nIEphdmE= 10745\nw6lyaWU= 10746\nIHByb2NlZHVyZQ== 10747\nIGdyaWQ= 10748\nIOuKkOs= 10749\nIGJlbHQ= 10750\nINGN0YLQvtCz0L4= 10751\ndXJk 10752\nIGNvbXByZWg= 10753\nIGRldmVsb3Blcg== 10754\nINGN0YLQvtC8 10755\n5Zg= 10756\nY3I= 10757\nIOuT 10758\nIHNwb2tlbg== 10759\ncmVuY2U= 10760\nIHRlcm1pbg== 10761\nIGFnZ3Jlc3NpdmU= 10762\nIGJpc3NjaGVu 10763\nIGhhc3Rh 10764\nIEJyaWFu 10765\nIENvbW1pc3Npb24= 10766\nIFl1 10767\nIHByb21pc2Vk 10768\nIGVxdWl0eQ== 10769\naWtv 10770\ndmVydHk= 10771\nIHJlcGxhY2Vk 10772\nIEhlbHA= 10773\nIHBvc2U= 10774\nIE1pZGRsZQ== 10775\nIGtpbQ== 10776\nIG1laW4= 10777\nIENvdW5jaWxs 10778\nINCS0YE= 10779\nb3Jv 10780\nIEJlcm4= 10781\nIGJleg== 10782\nIGFuYWx5dA== 10783\nYW5nZW4= 10784\nIOyLtg== 10785\nIEdsbw== 10786\nIHF1YWQ= 10787\n0YLQsA== 10788\nIHNwZWFrcw== 10789\n7JiI7JqU 10790\nIOyXrOufrOs= 10791\nZnJlZQ== 10792\n0L3Rlg== 10793\ncmljaA== 10794\nIOuvuA== 10795\nIERpZXM= 10796\nYWJi 10797\npbg= 10798\nIGRlcHJlc3Npb24= 10799\nIHJldGFpbA== 10800\nhOuTpA== 10801\nIFZvdXM= 10802\nIExhdGlu 10803\n4bk= 10804\nIOyii+yVhA== 10805\nIHRvcnQ= 10806\nIGNvbXB1dGVycw== 10807\nIHNlYXJjaGluZw== 10808\nIHR1Yg== 10809\nYXRlbGw= 10810\nIG1lcmM= 10811\nIGdsYXNzZXM= 10812\ncGVyc29u 10813\nIGRpc2hlcw== 10814\nIGd1YXJhbnRlZQ== 10815\nIG1lZw== 10816\nc20= 10817\nIFdhbGs= 10818\n7Jy866m0 10819\nIGZvbGRlcg== 10820\nIE1pdA== 10821\nIHRpbWluZw== 10822\nIGFic3Q= 10823\nIExvZw== 10824\n44Kv 10825\nIGFwcHJvdmVk 10826\nIFVTQQ== 10827\n0LLQtdGC 10828\nIHdpc2U= 10829\nZXNzZWQ= 10830\nIGRvdWI= 10831\nIHJlc2lkZW50 10832\nIGdlbmVyYXRlZA== 10833\nIHN0YXlz 10834\nIGV4cGxhbmF0aW9u 10835\nIHBvaXNvbg== 10836\nYXRyZQ== 10837\nIGluc2FuZQ== 10838\nIHJlZmVycmVk 10839\nYWlyZXM= 10840\nIFRSQQ== 10841\nIHNlaQ== 10842\nIGlubm9j 10843\nQWg= 10844\nIG1hbnQ= 10845\naHVz 10846\nIG91dGVy 10847\nZ2Vi 10848\nb2ljZQ== 10849\nIGRpc2N1c3Npbmc= 10850\nIGNvbnZlbmllbnQ= 10851\nX18= 10852\nIGF2b2ly 10853\nIHNoYXBlcw== 10854\nIGdyYXk= 10855\nIGRlbnRybw== 10856\nIG1hY2h0 10857\nIDE5NQ== 10858\n2Y8= 10859\nIGFkZHM= 10860\ndXRpbmc= 10861\nIGNhcGFiaWxpdGllcw== 10862\nIHNlY3Rpb25z 10863\nIHR1bmU= 10864\nIENhdXNl 10865\nYXJkZQ== 10866\nINGB0LrQsNC3 10867\nYXZpcnVz 10868\nIFJF 10869\nIHR1bmVk 10870\nIGxlYWY= 10871\ndGVyaW9y 10872\nIENhcHRhaW4= 10873\nINis 10874\nIGNob29zaW5n 10875\naGlu 10876\nZ2dpbmc= 10877\ndmlldA== 10878\nIHJlZ3JldA== 10879\nMjY= 10880\nb25kZXJu 10881\nIGJvbnVz 10882\nIFJheQ== 10883\nQXM= 10884\nIHRvcm4= 10885\nIEhpZXI= 10886\nIEVV 10887\nIHJpc2tz 10888\nIGFtYQ== 10889\nIFlldA== 10890\nIGNoYXJhY3RlcmlzdGljcw== 10891\nIOqwkA== 10892\nIFNlbmF0b3I= 10893\nIFZhbW9z 10894\nIHJvc2U= 10895\nIGNvcnBvcmF0ZQ== 10896\nZ2hhbg== 10897\nIGNlbnRlcnM= 10898\nc3RhaXJz 10899\nIG5pdA== 10900\nIHVudXN1YWw= 10901\nIFRvbnk= 10902\nIEdS 10903\nIFdpbGQ= 10904\nIFNpbWlsYXI= 10905\nIHRvZGFz 10906\n5YGa 10907\nIGhvcml6b250 10908\nbWVs 10909\nIHN0cmljdA== 10910\nIGN1YWw= 10911\nIHdyaXQ= 10912\nIGV4dGVuZGVk 10913\nIO2VmOuKlA== 10914\nIHJlbGllZg== 10915\nIG9uaW9u 10916\nIGJhYmllcw== 10917\nIGRpZmVy 10918\nIGludGVncmF0ZWQ= 10919\nw7x6aWs= 10920\nZXBpbmc= 10921\nLS0tLQ== 10922\nIG1lbnM= 10923\nIHN0cmF0ZWdpYw== 10924\nZmluaXRlbHk= 10925\nIGVpZ2VudGxpY2g= 10926\nV2hv 10927\n5Zyw 10928\nIHs= 10929\nIOS9oA== 10930\nIFRyaQ== 10931\nIHBvaW50ZWQ= 10932\n8J0= 10933\nbmFtZW50 10934\n0LXRhg== 10935\nIHByaWRl 10936\nIFJlcHVibGljYW4= 10937\nIHNhbXBsZXM= 10938\nIGRvbWVzdGlj 10939\nTFk= 10940\ndmV6 10941\nIHdlYmluYXI= 10942\n2KfZhQ== 10943\nIGVuaA== 10944\nIHN1Z2dlc3RlZA== 10945\nIG1laW5l 10946\nIHB1ZWQ= 10947\nb3Jlbg== 10948\ncmly 10949\nIGhlYXZpbHk= 10950\nIGluc3RydWN0aW9u 10951\nIG1pY3JvcGhvbmU= 10952\nIGlndWFs 10953\nIElyYQ== 10954\nIHZ1bG5lcmFibGU= 10955\nIFZpcmdpbmlh 10956\nIGNvbnRpbnVvdXM= 10957\nIHBvdmVydHk= 10958\nIGJsYWRl 10959\n5LiJ 10960\nIHJlbGF0ZQ== 10961\nIGNhcmE= 10962\nIEdvaW5n 10963\nIHJlZ2lvbmFs 10964\nIEZ1Y2s= 10965\nIHRvdw== 10966\nIE11c2V1bQ== 10967\ncmFudHM= 10968\nINCx0LXQtw== 10969\nbGFpbQ== 10970\nIGNoYW1waW9u 10971\ndGxl 10972\nw61u 10973\nZW5jaWE= 10974\nIGRpZXNlbQ== 10975\nIERpZw== 10976\nbWF0ZXM= 10977\nIGludmVzdGluZw== 10978\nIEpvcmRhbg== 10979\nIGludGVncmF0aW9u 10980\nIO2O 10981\n4Lir 10982\nZW5zdXM= 10983\nIEFyY2g= 10984\nIHBlbmNpbA== 10985\n0LDQu9GM0L3Qvg== 10986\naXNzZW4= 10987\nIEth 10988\nIHJvY2tz 10989\nIHJhdGluZw== 10990\nIHJlZnVnZQ== 10991\nIGFwcg== 10992\nZXRlZA== 10993\nIGFzc2lzdGFudA== 10994\nIG1lYW5pbmdmdWw= 10995\nIHBlcm1hbmVudA== 10996\nIGhpbGw= 10997\nIHdzenlzdA== 10998\nIHdvdW5k 10999\nIEF0bA== 11000\nIGxha2U= 11001\nIEZvcnQ= 11002\n6Kyd6Kyd 11003\nIHJlZHVjdGlvbg== 11004\nIHZpdg== 11005\nIHNvdXI= 11006\nIGVjb3M= 11007\nIGhheg== 11008\nIHN0ZWFs 11009\nIG15c3Rlcg== 11010\nINCa0LDQug== 11011\nINGN0YLQuA== 11012\nIFZpZXRuYW0= 11013\nIGFudGVz 11014\nIGNvbm5lY3Rpbmc= 11015\n6ZaT 11016\nIERhdmU= 11017\nIGLDtnlsZQ== 11018\nIENhc3Q= 11019\nTGU= 11020\nIGN1bA== 11021\nIGdlbnJl 11022\n66eQ 11023\nIGNvbXBsYWlu 11024\nIGh1cnJ5 11025\nYXJ0ZQ== 11026\nZ3JlZw== 11027\nIG1vbml0b3Jpbmc= 11028\nIGRlc2VydA== 11029\nINGB0L7Qsg== 11030\nZWxpbmc= 11031\nIFN1cHJlbWU= 11032\nIGdpYmk= 11033\nIGxhcmc= 11034\nIG5hdGlvbnM= 11035\nIFRvaw== 11036\nIG5lZWRsZQ== 11037\n5rU= 11038\nIGFzbGVlcA== 11039\nIGNvbXVu 11040\nIEpld3M= 11041\nIGFjaGlldmVk 11042\nIGV4aXQ= 11043\nIGRpc2Vhc2Vz 11044\nbGluZXM= 11045\n44GL44KJ 11046\ncmllbmRz 11047\nIHJlY3Q= 11048\nIHNjYW4= 11049\n44Gv44GE 11050\nIGh1cnRz 11051\nesSZ 11052\nIExvb2tpbmc= 11053\n44K3 11054\n7ZI= 11055\ndWx0dXJhbA== 11056\n4buT 11057\naW5lbnQ= 11058\nIHB1ZXM= 11059\nIGNoZWVyaW5n 11060\np4A= 11061\nYWdnZXI= 11062\nIGFkYQ== 11063\nTGF1Z2h0ZXI= 11064\nIFdvbWVu 11065\n6KOh 11066\n6Ks= 11067\nIG9jY3VycmVk 11068\nIHNlYXRz 11069\n6ICM 11070\nIGVtcG93ZXI= 11071\ndW51 11072\nZWxsaW5n 11073\nQkVS 11074\nZW5zaW9uYWw= 11075\nIGNvbnNvbGU= 11076\nYXNoaW5n 11077\nIGVpbm1hbA== 11078\nZmFyZQ== 11079\nIOuPvA== 11080\nIHNlc3Npb25z 11081\n2ZA= 11082\nIHJpZGljdWxvdXM= 11083\nw61hbg== 11084\nIEhlbnJ5 11085\nIEhvbA== 11086\nIGNvbGxlY3RlZA== 11087\nIGRpc2N1c3Npb25z 11088\nRGU= 11089\nIGRpc2FiaWxpdHk= 11090\nIO2b 11091\nIHN1YnNjcmliZXJz 11092\nIGlyZ2VuZA== 11093\nIGZlbA== 11094\nIGRpcmVjdGlvbnM= 11095\nIG1hbnVmYWN0dXJpbmc= 11096\nIFJvZA== 11097\nIOyWmA== 11098\n4LiX 11099\n5piO 11100\nIGNyaXRlcmlh 11101\nIG1vbGQ= 11102\n6Kmx 11103\nIGVudGVyaW5n 11104\ncmlq 11105\naXNlbg== 11106\nIFBhcmE= 11107\naWV2ZQ== 11108\nIGNoYXJnZWQ= 11109\nIGpvdQ== 11110\nIGNhdHM= 11111\n0LvQtdC0 11112\nYWRheXM= 11113\n0LDQvdC+0LI= 11114\nasSZ 11115\ndmF0aW9u 11116\nIGFzdHJvbg== 11117\naXRhbHM= 11118\nIEJyYW5k 11119\nIEthbg== 11120\nIHBsYWlu 11121\nIGFuZGVyZW4= 11122\nYW5kZQ== 11123\n0Y/Qtw== 11124\nIHRvbGVy 11125\nxYJlbQ== 11126\nIHByw6k= 11127\n0LzQvtGC0YA= 11128\nYWdlbWVudA== 11129\ndWN0 11130\nY2jDqQ== 11131\nIEVuZXI= 11132\nYWrEhQ== 11133\nIO2VtOs= 11134\nIHN0YQ== 11135\nIHJpbmdz 11136\nIHRvaWxldA== 11137\nIENyYQ== 11138\nIGV4cGVyaWVuY2luZw== 11139\nIHNsaXA= 11140\nIHNhbmR3aWNo 11141\nIFVzaW5n 11142\nIHNwZWN0cnVt 11143\nIFJvcw== 11144\nYXBzZQ== 11145\nIEpheQ== 11146\n0LzRgw== 11147\n5rOV 11148\nRXg= 11149\nIHJlY29nbml0aW9u 11150\nIERpZG4= 11151\ndWRh 11152\nYWpl 11153\nZXN0bHk= 11154\nIGZlbWlu 11155\naXR1cmU= 11156\n0YDQsNGC 11157\nIGhpcmU= 11158\nIG5vd2hlcmU= 11159\n5L2N 11160\n4bqn 11161\nIHdpbmc= 11162\nIHNhdg== 11163\nIFNlY3VyaXR5 11164\nIHJ1cmFs 11165\nIEZ1bg== 11166\nYXllcg== 11167\nIGFjY3Vz 11168\nIG1t 11169\nIEpvc2VwaA== 11170\nIHNjcmVlbnM= 11171\nIGJvcnJvdw== 11172\nIHN3aW5n 11173\nIDQ4 11174\nIHRvdWNoaW5n 11175\ndGhpcw== 11176\naW50ZW5kbw== 11177\n6YM= 11178\n0KA= 11179\nIFNjb3RsYW5k 11180\nIEphc29u 11181\nIFZlbg== 11182\nIGV4Y2VwdGlvbg== 11183\nIG5lYXJieQ== 11184\nIGJyb3dzZXI= 11185\nYW5nZXJz 11186\nIFNpbg== 11187\nz4DOvw== 11188\n5L2G5piv 11189\nb3NwZWw= 11190\nIHd1cmRl 11191\nIGRydW5r 11192\n7Zo= 11193\n7IaN 11194\n44OJ 11195\nIOyKpO0= 11196\nIExpZQ== 11197\nb2Nv 11198\nIExlYWd1ZQ== 11199\nIGlnbm9yZQ== 11200\nIDop 11201\nIGxhbmRpbmc= 11202\nINi52YQ= 11203\nIFRhZw== 11204\nMjg= 11205\nIGRyYWZ0 11206\nIGFlcg== 11207\nIOq3uOuDpQ== 11208\nIHBlbnNl 11209\nINC00LDQttC1 11210\nIGJlZHJvb20= 11211\nIG5hag== 11212\n7KeA6rOg 11213\naWdlbm91cw== 11214\nIGRlYWxz 11215\nZWxsbw== 11216\n5LqM 11217\nIHBvc2l0 11218\n6rs= 11219\nIHZpc2l0ZWQ= 11220\naWZpZXM= 11221\nIHByZW1p 11222\nIGNhbnQ= 11223\nIFJpY2s= 11224\nIHJhaXNpbmc= 11225\nIHBlcm1pc3Npb24= 11226\nIHB1Ymw= 11227\ndW5jaQ== 11228\nIGJlbmQ= 11229\nIGNoYW1waW9ucw== 11230\nZGll 11231\nIGF3ZnVs 11232\nIGp1bXBpbmc= 11233\nIGxsZWc= 11234\nIHN1c3RhaW5hYmxl 11235\nIFRvdA== 11236\nIGNhbmR5 11237\n5YCZ 11238\nIHNhdGlzZmllZA== 11239\nIHBpcGU= 11240\nIGNvY2s= 11241\n2LY= 11242\nc3RvbmU= 11243\nIG1vbWVudHVt 11244\nINCd0LA= 11245\nIGFsb3Jz 11246\nIHJldHVybnM= 11247\nYW1tZW4= 11248\n564= 11249\n0YvQvA== 11250\nYXdu 11251\nb3R0ZWQ= 11252\nIHdvbGxlbg== 11253\naWN0ZWQ= 11254\nIGNhbmRpZGF0ZXM= 11255\nIExhZHk= 11256\nIHlpZWxk 11257\nIG1haW50ZW5hbmNl 11258\nZmZlY3Q= 11259\nIGV4cGFuc2lvbg== 11260\nIExFRA== 11261\nIGRhcmtuZXNz 11262\nIG91dGZpdA== 11263\n7JWI 11264\nINC40YHQvw== 11265\ncnVwdGlvbg== 11266\n44GE44G+44GZ 11267\nIGVuZ2FnaW5n 11268\nIGluc2lnaHQ= 11269\nIEFsd2F5cw== 11270\nIGdlZg== 11271\ncmFr 11272\nIHBpeA== 11273\n6Ka65b6X 11274\nIHF1YW50aXR5 11275\nIGluaw== 11276\nIEtpbmdkb20= 11277\nIGNvcnQ= 11278\n5bi4 11279\nIGdvdmVybm1lbnRz 11280\nIHByb3Rlc3Q= 11281\ncG9vbg== 11282\nINGC0L7Qs9C+ 11283\n5a6D 11284\ndWNoZW4= 11285\ncXVhbGl0eQ== 11286\nIFBvcnF1ZQ== 11287\nIENsdWI= 11288\nIHJpdA== 11289\nIGFydGljbGVz 11290\nQkk= 11291\naWdpYmxl 11292\nIGRpc2FzdGVy 11293\n0LjQsw== 11294\nINC90LjQug== 11295\n2YfYpw== 11296\n66W8 11297\nYXJldA== 11298\nIHVuYWJsZQ== 11299\nIMOu 11300\nIGVyc3Q= 11301\nINeg 11302\ndmFyZA== 11303\nIGFubm95aW5n 11304\nIEtpcg== 11305\n0LXRgNC2 11306\nZW5uaXM= 11307\nIHVuY2VydGFpbg== 11308\nMzY= 11309\nw7Zz 11310\nIGVjb3N5c3RlbQ== 11311\nemVk 11312\nasOg 11313\nc3Vu 11314\n7Ja07ISc 11315\nIMW8ZWJ5 11316\nIG1hcHM= 11317\n64KY 11318\n5YWo 11319\nIEp1c3Rpbg== 11320\nIHRyYXNo 11321\nIGVub3Jtb3Vz 11322\nIHN0YXRlZA== 11323\nIGJyYW5kcw== 11324\nIHlvdXQ= 11325\nINGH0LXQu9C+0LLQtdC6 11326\nIE1hdHRo 11327\nIHRyYW5zcG9ydGF0aW9u 11328\nIGxlZ2lzbGF0aW9u 11329\nIHByb3ZpZGVycw== 11330\nINit 11331\nIG1hZ2F6aW5l 11332\nIHNlaGVu 11333\nIERlc3BpdGU= 11334\nIHBhc3Nlcw== 11335\n5oiQ 11336\nIGFsdGVy 11337\nYWRhbg== 11338\nIGZhcm1lcnM= 11339\n6LCi 11340\nIGNvbmZpcm1lZA== 11341\nIGVzYQ== 11342\naXRvcw== 11343\nIHJvYWRz 11344\nVklT 11345\nIHdvcmtlcg== 11346\nIGRlc2lnbnM= 11347\nIFNvdmlldA== 11348\nYnJpZA== 11349\nIHByYWN0aWNpbmc= 11350\nIOu2gA== 11351\nIFNlYQ== 11352\n44Op 11353\nINC/0YDQvtC0 11354\nIGNoaWxs 11355\nIGxlbW9u 11356\n7JeQ64qU 11357\nIGZsZXhpYmxl 11358\nIEV4Y3VzZQ== 11359\nIHRlcnJpdG9yeQ== 11360\n5ZWP 11361\n44G/ 11362\nIGx1eA== 11363\nIGxpZmV0aW1l 11364\nIGRpc3Rpbmd1 11365\nIFRpbWVz 11366\nIGdyb3Nz 11367\nZW56 11368\nIHNjcm9sbA== 11369\nbcSxxZ8= 11370\nY2lw 11371\no7w= 11372\nRFA= 11373\nIHB1Ymxpc2g= 11374\nIGViZW4= 11375\nIHJlZ2lzdA== 11376\nIGVkaXRpb24= 11377\nIExF 11378\nIGNoYXJnaW5n 11379\ndXRhdGlvbg== 11380\neXJpY3M= 11381\naWRhcw== 11382\nIM6/ 11383\nINC60L7RgA== 11384\nIFRvbg== 11385\n55uu 11386\nIHdob2V2ZXI= 11387\nIEZveA== 11388\n5omL 11389\n6rGw65Og7JqU 11390\nIGZvdWdodA== 11391\nIGRyaWxs 11392\nIEFmZ2hhbg== 11393\nfiE= 11394\nIFRvbw== 11395\nIHNlY29uZGFyeQ== 11396\ncsOk 11397\nIEhlYWQ= 11398\naW5uZW4= 11399\nIHlhcm4= 11400\nINC90LDQvA== 11401\nIHdpZHRo 11402\nIGVuZ2luZWVy 11403\nacSF 11404\nIHdpbmdz 11405\nIOuVjOusuA== 11406\nIHRyYXVtYQ== 11407\nIHJlcHJvZHU= 11408\nIGNoaXA= 11409\nIHBhc3Npb25hdGU= 11410\nIGF3a3dhcmQ= 11411\nIO2K 11412\n0LDQttC0 11413\nIEJpdGNvaW4= 11414\nIGtow7RuZw== 11415\nIHLDsw== 11416\ncmVjdGlvbg== 11417\nINCz0LTQtQ== 11418\nIFVzdWFsbHk= 11419\nIGltcGxlbWVudGF0aW9u 11420\nIGdhbWVwbGF5 11421\nIG15c3Rlcnk= 11422\nINC+0Lo= 11423\nIGHDsW9z 11424\nYW5keQ== 11425\n0LjQvNC4 11426\nIHByaXZhY3k= 11427\nYWNv 11428\n44KB 11429\nIGR1bXA= 11430\nIFBheQ== 11431\nIGRpcGw= 11432\nIGZ1cm4= 11433\nIHNoaXBz 11434\nTEE= 11435\nINGF0L7RgNC+0Yg= 11436\nIGVj 11437\nIGRyb3Bz 11438\nY2hs 11439\nMzI= 11440\nIG9ic2VydmU= 11441\nIERldmVsb3A= 11442\nTcO8emlr 11443\nYW5uZWw= 11444\nb3dhxIc= 11445\nIGZhY2Vk 11446\nw6Fs 11447\nIHZpY3RpbXM= 11448\nIGdpZnRz 11449\nIGJvb3Q= 11450\nw59l 11451\ncm9k 11452\nIDIwMDk= 11453\nw7ZydA== 11454\nIHVuaXZlcnNhbA== 11455\nIG5vdXZl 11456\nIGJveWZyaWVuZA== 11457\nIGNldGVyYQ== 11458\n0YHRgtCw 11459\nJ1M= 11460\nIG5pdmU= 11461\nIGNydWNpYWw= 11462\nIHN1cnZl 11463\nIGNvaW4= 11464\nIHNvbmRlcm4= 11465\nIHNoYWRl 11466\nIGx1Z2Fy 11467\nIHN1cmVseQ== 11468\nIG1heA== 11469\nIGltcHJvdmluZw== 11470\n5Zug54K6 11471\nIHdlbg== 11472\nINeR 11473\nIOyWtOw= 11474\nIGVuZm9yY2VtZW50 11475\naWJs 11476\nIGxpdg== 11477\nbGVyaQ== 11478\nIG1lam9y 11479\nIENhcm9saW5h 11480\nIHZhcw== 11481\nIGNvbXByb20= 11482\nIGRpcnQ= 11483\nIHVwZ3JhZGU= 11484\nIEJlbGw= 11485\nIHJlc3RhdXJhbnRz 11486\nIHRyYXA= 11487\nIHRlYXM= 11488\nYmxpYw== 11489\nIEdyZWc= 11490\nc2Fu 11491\nIG93 11492\ndWVzdA== 11493\nIHByb3Bvc2Fs 11494\nIFJldA== 11495\nZnJvbnQ= 11496\nIHBhc3NhZ2U= 11497\nIHN1cnJvdW5kaW5n 11498\nIMO6bHQ= 11499\nIHVwY29taW5n 11500\nIGhvcnJvcg== 11501\nIGNsb3RoaW5n 11502\nIOyVvQ== 11503\nIGRpbA== 11504\ncm9tZQ== 11505\nIElk 11506\nIFJvYWQ= 11507\nINGN0YLQvtGC 11508\nY2hhaW4= 11509\nINCx0YvRgtGM 11510\nIE9mZmlj 11511\nINCd0LU= 11512\nIGluc2Fu 11513\nIGRlY3JlYXNl 11514\nINGF0L7Rgg== 11515\nYnVpbGQ= 11516\nIERyYWdvbg== 11517\n5YI= 11518\nIGludmVzdG9ycw== 11519\nYW50aQ== 11520\nIHNhY3JpZmljZQ== 11521\nIHRyb29wcw== 11522\nIEJhZA== 11523\nIHBhc3N3b3Jk 11524\nIGNvbnN0cmE= 11525\n4LiV 11526\nIMOHYQ== 11527\nYWRvdw== 11528\ndGhyb3VnaA== 11529\n0YbQsA== 11530\nQ2Fu 11531\nIGNhbmRpZGF0ZQ== 11532\nIGFudGli 11533\n7JeF 11534\nIHRhc3R5 11535\n2YjZhg== 11536\nIEluZg== 11537\nIEJhbmc= 11538\nacOfdA== 11539\naW5pdHk= 11540\nZmF0aGVy 11541\nIGNvbnRyb3ZlcnM= 11542\nIFBhaw== 11543\naWx0eQ== 11544\n6rWs6w== 11545\nIGxpZ2h0ZXI= 11546\nIGZhbGxlbg== 11547\nIHp1cw== 11548\nIEd1YXJk 11549\nIGNvdHQ= 11550\nIEZyZWU= 11551\nIGluaXRpYXRpdmU= 11552\nYWxvdXM= 11553\nIG5vdGlmaWNhdGlvbg== 11554\nIE1lZGlj 11555\nIENvbW1pdHRlZQ== 11556\n7Jew 11557\nIFdvb2Q= 11558\nIG11c2g= 11559\ndWx1bQ== 11560\n6LI= 11561\nYWhhaA== 11562\nIHN1ZmZpY2llbnQ= 11563\nIHNpbmdlcg== 11564\n0LrQvtC5 11565\nQUxJ 11566\nw6R0dA== 11567\nIFBS 11568\nIExhcg== 11569\nY3VsZXM= 11570\naWVtcG8= 11571\nIHVuZXg= 11572\nIGludGVncmFs 11573\nIHRyYW5zbWlzc2lvbg== 11574\nIGljaQ== 11575\n0YPRhQ== 11576\nZ2lj 11577\nIE5pbnRlbmRv 11578\nIENvcA== 11579\nIFRydXN0 11580\nZW5hcw== 11581\nIGFiaWxpdGllcw== 11582\nIGNoaXBz 11583\ncGF0 11584\nIGFuY2hl 11585\n0LvQtdC9 11586\nIGFwcHJvYWNoZXM= 11587\nIHRob3I= 11588\nIHNpc3RlcnM= 11589\nIGRyaXZlcnM= 11590\nIGFsbGE= 11591\nMDM= 11592\nIHJ1YmJlcg== 11593\nIG7DpQ== 11594\nQUNL 11595\nIGRpc2FwcGVhcg== 11596\n6rCc 11597\nIGNvbXBlbnM= 11598\nIHZpYnI= 11599\n56yR 11600\nR08= 11601\nIHNpemVz 11602\nIHRyYWNraW5n 11603\n7ZmU 11604\nIOyEuA== 11605\nIGltcGFjdHM= 11606\naWJpbA== 11607\nZmlzaA== 11608\nQlI= 11609\nIGFycm93 11610\nIGxhcmdlbHk= 11611\nYW5ueQ== 11612\nIGxhd3llcg== 11613\n5oCO6bq8 11614\nam91cnM= 11615\n2ro= 11616\ndmlh 11617\nIGRlbGxh 11618\nIG1hdGhlbWF0 11619\nIE1pbmU= 11620\nIEtvbGw= 11621\n2LI= 11622\nIENyb3Nz 11623\nIDY1 11624\nIGdyYWM= 11625\nIGludm9sdmVz 11626\nIGRlbGlnaHQ= 11627\nIEhvbGx5d29vZA== 11628\nIGltbWVkaWF0ZQ== 11629\nb25pYw== 11630\nIGxhZG8= 11631\nIGJ1bGxldA== 11632\nIE5vdGU= 11633\nIHVubG9jaw== 11634\nIGRpc2NvdW50 11635\nIHJpc2luZw== 11636\ncHJlc3M= 11637\nIHBhY2U= 11638\nIHNob3J0ZXI= 11639\nIHRlbmVy 11640\nZ2Vvbg== 11641\nIG1hbmFnaW5n 11642\nIGNlcmU= 11643\nQ2hy 11644\nV2hlbg== 11645\nYWNoZW4= 11646\nIOyT 11647\nIEh1bg== 11648\nIG9mdA== 11649\nIDI1MA== 11650\naWVydW5n 11651\nIHN0YWJpbA== 11652\nIENvbm5lY3Q= 11653\nIHlhbmk= 11654\nIGRvd250 11655\nzrzOsQ== 11656\nIHZvY2Fs 11657\nzr3OsQ== 11658\nIGxlYW4= 11659\nIHZpZMOpbw== 11660\nIEZhbWlseQ== 11661\ncmVzZW50 11662\nIGFtb3VudHM= 11663\n7KeB 11664\nY2xhc3M= 11665\nIHZpYg== 11666\nIEF2 11667\nYXJzZQ== 11668\nIGdlbnRsZW1lbg== 11669\nIHNlZWtpbmc= 11670\nIHVuaW9u 11671\nIHJlZ3VsYXJseQ== 11672\n5o8= 11673\nIEphaHI= 11674\nIEZvb2Q= 11675\nIFByb2JsZW0= 11676\nIGFydGlmaWNpYWw= 11677\nIFNpeA== 11678\nIGltcHJlc3NlZA== 11679\nIHRvb3Ro 11680\nIEto 11681\nIHlhcmQ= 11682\nIO2VtA== 11683\nIG93bmVk 11684\nIOuPmQ== 11685\n7LKt 11686\nIHRvZGE= 11687\nIHBvcnRmb2w= 11688\nIOuCqA== 11689\nb3JnZW91cw== 11690\nIGRhdGVz 11691\n0L7Qu9GM0Lc= 11692\n0LXRh9C90L4= 11693\nIGNvbmZpZ3VyYXRpb24= 11694\nIHJlcXVpcmVtZW50 11695\nIGJlbGx5 11696\nIHBhaW5mdWw= 11697\nIGRlbW9uc3RyYXRl 11698\nIGdsZWljaA== 11699\nIHZpc2l0aW5n 11700\nIENvbmY= 11701\nIGRhbA== 11702\n2ZE= 11703\nIGFtZW5k 11704\nIEZ1cg== 11705\n5q+U 11706\nIHZpdGFs 11707\n4buL 11708\nIG1hdGU= 11709\nIE91 11710\nIGxlZ2FjeQ== 11711\ndXN0aW5n 11712\nIGFjY29tbW9k 11713\nIHF1b2k= 11714\nYXVlbg== 11715\nIGxpZmVzdHlsZQ== 11716\nQ0M= 11717\nw6TDpG4= 11718\nYXJ0ZW4= 11719\nIG1pbmhh 11720\ncsOz 11721\nIOuqqA== 11722\nIGZvcm1hdGlvbg== 11723\nIHRyYWlsZXI= 11724\ncGVyb3I= 11725\nINCz0YA= 11726\nIHVk 11727\nenU= 11728\nIGtvbW1lbg== 11729\nIGNhdmU= 11730\nIENvdW5jaWxsb3I= 11731\nIHRocm93bg== 11732\nIHRyaWNrcw== 11733\nTEFVR0hURVI= 11734\nIEFjYWRlbXk= 11735\ncm93ZA== 11736\noZ0= 11737\n7KCA 11738\nIEltYWdpbmU= 11739\nIGluZm9ybWVk 11740\ncm9waA== 11741\nIGxpZw== 11742\nIHNrdWxs 11743\nYWJldGg= 11744\nIGZ1bmN0aW9uYWw= 11745\nZXJlaw== 11746\nT24= 11747\n6aY= 11748\nIGFuY2VzdA== 11749\nIHNhZmVseQ== 11750\nIEhU 11751\n64u5 11752\nIGRhdg== 11753\nIGRyaXZlcw== 11754\nQW1lcmlj 11755\nIHRpcmU= 11756\nIHNhaXM= 11757\nw6FyaQ== 11758\nYXZvcnM= 11759\nIGNvcnJlc3BvbmRpbmc= 11760\nIHByw6lz 11761\nY2hlc3Q= 11762\nIGJhY3Rlcmlh 11763\nIGluZmVjdGlvbg== 11764\ndXNhbA== 11765\nIGF2ZXo= 11766\nIGJhc2tldGJhbGw= 11767\nIHN1cHBsaWVz 11768\nIGV4cGVydGlzZQ== 11769\noKU= 11770\nZmE= 11771\nIHRpZW1wbw== 11772\nIFdhbnQ= 11773\nIHNpbGx5 11774\nIHVwcA== 11775\nIGVsZWN0ZWQ= 11776\nIGZpcmVk 11777\nINiv 11778\nIHVuaXZlcnNpdGllcw== 11779\nYWxsZQ== 11780\nIGphY2tldA== 11781\nwrA= 11782\nIHRyYXY= 11783\nbHM= 11784\nIGRlZmVhdA== 11785\nIGNvZ24= 11786\nIGVxdWF0aW9ucw== 11787\ndWtp 11788\nIFNoZXI= 11789\nIHRoaXJ0eQ== 11790\nIHN0cmVhbWluZw== 11791\nb3Ryb3M= 11792\nIFByb2R1 11793\nbmVq 11794\nIGRlc2lnbmVy 11795\nIOuKkOuC 11796\nIHBhaW50ZWQ= 11797\ncmFpbmU= 11798\nbWFpbA== 11799\nIHZlc3M= 11800\nIHJoeXRobQ== 11801\nbGVzaA== 11802\nIDk5 11803\nIGFpbmRh 11804\nY2hpZWQ= 11805\nIMOpdGFpdA== 11806\nIGFmZmVjdHM= 11807\n6aM= 11808\nIEZpbmQ= 11809\nIMOpbA== 11810\nIHBvdGF0b2Vz 11811\nIHBhZw== 11812\nINC/0LDRgA== 11813\nYXJ0cw== 11814\nIE5hY2g= 11815\nIDMz 11816\nIEhhcmQ= 11817\nIElyYXE= 11818\nIG9waW5pb25z 11819\nd2l0aA== 11820\nZXJtYW4= 11821\nw70= 11822\n6K0= 11823\nIFNQRUFL 11824\nrLw= 11825\nIHN0YWJpbGl0eQ== 11826\nIEhF 11827\nIGNhcHR1cmVk 11828\nIGJ1Y2tz 11829\nIG1hc2tz 11830\nIGNvbXBldGU= 11831\nIGZvcmdvdHRlbg== 11832\n0LvRjtGH 11833\nc2VxdQ== 11834\nIOyEoA== 11835\naWxsaW9u 11836\nIGdyYXBoaWNz 11837\nIGh1Yg== 11838\nIOyXsA== 11839\nZW1wb3I= 11840\nIGNyb3du 11841\nIHdpZGVy 11842\nIG9jY3Vycw== 11843\nRFM= 11844\n5oE= 11845\nIEJhdHRsZQ== 11846\n44Gq44KT 11847\nIGR1YWw= 11848\nIDYwMA== 11849\nYXRoZXJz 11850\n4LmB 11851\nIHNldHRsZQ== 11852\nIGF2YWl0 11853\nIGRvaXM= 11854\n0LrQuNGF 11855\nYWRvcmVz 11856\nIMOz 11857\nbmVnbw== 11858\nIEdlb3JnaWE= 11859\nIFJvZw== 11860\nIGRpdm9y 11861\nIFNvbmc= 11862\nIFNwZWNpYWw= 11863\nIG11bg== 11864\nIHByZXRlbmQ= 11865\nTUFO 11866\nIHZpb2xlbnQ= 11867\nIGJlc2lkZXM= 11868\ndnk= 11869\nIE5heg== 11870\nMjk= 11871\nIHN3ZWF0 11872\nIHp3 11873\nIEh1 11874\nIEJ1aWxk 11875\nIGhvcm0= 11876\nIENhcmQ= 11877\nIOycoA== 11878\nIHJlY29tbWVuZGF0aW9u 11879\nY2FsbGVk 11880\nc3RpY2s= 11881\nIFBvbGljZQ== 11882\nIGNvbnN1bWVycw== 11883\nIGdyb2Nlcg== 11884\nIHN0dW4= 11885\nINCS0Ys= 11886\n0KM= 11887\nIERhdGE= 11888\nIHN1YnN0YW50 11889\naXJlY3Q= 11890\n4LI= 11891\nINCy0Lc= 11892\nIEFybQ== 11893\nIHNlbWVzdGVy 11894\nIEJyYWQ= 11895\nIG91cnM= 11896\nINC60L7RgtC+0YDRi9C5 11897\np2E= 11898\nIGdyYW1z 11899\nIGV4ZXJjaXNlcw== 11900\nNzU= 11901\nIHN3ZWFy 11902\nIGluY2VudA== 11903\nz4HOvw== 11904\nIGlsbGVnYWw= 11905\n5L2V 11906\nIERhbW4= 11907\nIG7Dug== 11908\nIG5lY2Vz 11909\nIGN1eg== 11910\naWNvbg== 11911\nIGhvcnM= 11912\nIENvbW8= 11913\n5L2c 11914\nIOuRkA== 11915\nIG92ZXJzZQ== 11916\nIGhhcnZlc3Q= 11917\nIHRocmV3 11918\nINC/0L7RgtC+0LzRgw== 11919\n15nXlA== 11920\nIG90cm8= 11921\nINC/0LXRgNCy 11922\nIHNjb3Bl 11923\nIGdsb3J5 11924\nIE1pY2hpZ2Fu 11925\nIGFzc3VtaW5n 11926\nINGD0LQ= 11927\nIGJvbGQ= 11928\nZ3Vl 11929\nbW90aGVy 11930\nIHdhcmVu 11931\n6Kyb 11932\nINil 11933\nIEthbQ== 11934\naXNwaWVs 11935\nIHRvdWpvdXJz 11936\nIGNvbnN0aXR1dGlvbg== 11937\nIH4= 11938\nIGZyYW5rbHk= 11939\nb2xlbg== 11940\nb25zY2lvdXM= 11941\nIHfDvHJkZQ== 11942\ndGhvbg== 11943\nIE9G 11944\n7J6Q6w== 11945\ndW5kYQ== 11946\nIOaYrw== 11947\nINC/0L7RgA== 11948\nIGVtcGxveW1lbnQ= 11949\n0ZHRgg== 11950\n44GB 11951\nIHN0ZWFt 11952\nIERJ 11953\nIHByb2Zlc3Npb25hbHM= 11954\nIGVuZ2luZWVycw== 11955\nIFhpYQ== 11956\n56s= 11957\n7JiB 11958\nIER1bg== 11959\nIGJpdGNo 11960\nIEZvcmQ= 11961\n5LiN6KaB 11962\nc2VjdGlvbg== 11963\nIHZpY2U= 11964\nIExhdGVy 11965\nb3N0b24= 11966\n0Y3Rgg== 11967\n16Y= 11968\nIEF6dXJl 11969\ncGxpbmc= 11970\nIDE4MA== 11971\nIENyZWF0 11972\nSVNIQQ== 11973\nIGJ1ZW5v 11974\n7Z2s 11975\ncnVw 11976\nbGVycw== 11977\nIFlhbmc= 11978\nIEhB 11979\nYmF0 11980\nIENhdGhvbGlj 11981\nIGFjY2VudA== 11982\nIG1peGluZw== 11983\nY2tldHM= 11984\nIGVuaGFuY2U= 11985\nw7xocg== 11986\nw6pz 11987\nIO2W 11988\nIHN3aW1taW5n 11989\nIGPhu6dh 11990\nIEVsaXo= 11991\nIGltbXVuZQ== 11992\nINCx0L7Quw== 11993\nIGZhcmU= 11994\nIEdhYg== 11995\n16E= 11996\nIHNhdGVsbA== 11997\nIEFueXRoaW5n 11998\nIGFzc2V0 11999\nIHNjaGVkdWw= 12000\nIHJhZGljYWw= 12001\nIHp3ZWk= 12002\nIE1F 12003\ncmVsYXRlZA== 12004\nIHNlcGFyYXRlZA== 12005\nIExpYnI= 12006\nIGdyaXA= 12007\nIOCuqg== 12008\n6KiA 12009\nIGJlYW5z 12010\nIE9w 12011\n7IaM 12012\nIHBvdW5k 12013\nIGVudHJhbmNl 12014\nz4Y= 12015\nIE5pZQ== 12016\nIFJlcHVibGljYW5z 12017\nIGF0b20= 12018\nIHBlcnNvbmFz 12019\nIEFsaQ== 12020\nw6Rocg== 12021\n5aSW 12022\nIGRyYW1hdGlj 12023\nIEZpbmU= 12024\nIHJlbWluZHM= 12025\n6Jk= 12026\nIGTDqWrDoA== 12027\nIGFmZm9yZGFibGU= 12028\nIGJyYW4= 12029\naWVybw== 12030\nYWxhcg== 12031\nY3U= 12032\nIFw= 12033\nIG1vxbxl 12034\nIGJsYXN0 12035\nIHJlY3k= 12036\nZmlyZQ== 12037\nIGxsZQ== 12038\nINCy0YDQtdC80Y8= 12039\nIFdX 12040\nIHZz 12041\nIER1ZGU= 12042\nIFJvbWU= 12043\nIGdyZWV0 12044\nIEhldA== 12045\nY2lhcw== 12046\nIOuLuQ== 12047\nbGVzc2x5 12048\nIHByZW1pdW0= 12049\nIGV4cGVyaW1lbnRz 12050\nYXRhcg== 12051\nw6lyaQ== 12052\nIG9mZmljaWFsbHk= 12053\nIGZlZQ== 12054\n4LmH 12055\nINGH0LXQvA== 12056\ncmVh 12057\nIHRveQ== 12058\nT1A= 12059\nIFRheWxvcg== 12060\nIE1jQw== 12061\naWxleQ== 12062\nIEJhaw== 12063\nIGFsdW0= 12064\nIFVudGVy 12065\nIG1hZ2ljYWw= 12066\nIHRyYWJhbA== 12067\nIHZvdGVz 12068\naXRhZ2U= 12069\nIG1lY2hhbmljYWw= 12070\naG4= 12071\n44G+44GX44Gf 12072\nINC40L3RgtC10YA= 12073\n5LuK5aSp 12074\nIGhpbnQ= 12075\nIGF1dGhvcml0aWVz 12076\nIE5BU0E= 12077\naXZlcnNhcnk= 12078\nINC/0L7Rhw== 12079\ncmFj 12080\nIFNQRUFLRVI= 12081\nw7Z0 12082\nIGZyYW1lcw== 12083\nIGdvb2RieWU= 12084\nIGNoZXI= 12085\naHU= 12086\nIG5ldXI= 12087\n5a6a 12088\nIE1hY2g= 12089\nIEhlbGw= 12090\nIGZlc3RpdmFs 12091\n64WE 12092\ndXRh 12093\nIG11c2hyb29t 12094\nIHRhbnQ= 12095\nIHRhdHRv 12096\nIGRlbGV0ZQ== 12097\nIGRpeg== 12098\nIHbDpA== 12099\nIHNldmVudA== 12100\nIFF1aWNr 12101\nIGJha2luZw== 12102\nIGFzc2VtYmx5 12103\nR28= 12104\nIERyZWFt 12105\nIExhZA== 12106\n6Z2e 12107\nw6J5 12108\nYWdz 12109\nIGdyYXZpdHk= 12110\nIOynkQ== 12111\nZW1wbG95 12112\nIGRpZXNlcw== 12113\nIGRpc2NvdmVyeQ== 12114\n0YHRgtCy0LA= 12115\nIGhlYmJlbg== 12116\nIGdlcmFkZQ== 12117\nIERS 12118\nICcn 12119\nIHRlY2huaWNhbGx5 12120\nINCf0L4= 12121\nIHByaXZpbGVnZQ== 12122\nIEV2ZXI= 12123\nIFNlcnZpY2Vz 12124\ndXJhbg== 12125\nIGNvbnN1bXB0aW9u 12126\nIFJldg== 12127\nIFNoYWxs 12128\nYXNzZXI= 12129\ntoDthLA= 12130\nIHJhY2lhbA== 12131\nIFlvdXR1YmU= 12132\nIFByYQ== 12133\n0YHRgtCy0LXQvQ== 12134\nY2Vr 12135\n5rQ= 12136\nYXNoYQ== 12137\nINuB 12138\nkZw= 12139\nYWhu 12140\nSUNL 12141\nIGRyaW5rcw== 12142\nIGNhcmI= 12143\n44K/ 12144\nIDY0 12145\nIE1tbQ== 12146\nIGVsZWN0cmljYWw= 12147\nIGZydWl0cw== 12148\nIEhE 12149\nw7Fh 12150\nIERlZmluaXRlbHk= 12151\nIOuwmw== 12152\nIGZhaXM= 12153\ncmF0aW9ucw== 12154\nIGNvZQ== 12155\nYWh1 12156\nIEZhaXI= 12157\nIGVhdGVu 12158\nIGZpcg== 12159\nIEF1 12160\n0YPQvQ== 12161\ndWxhdGluZw== 12162\naW5nbHk= 12163\nIHZhY2NpbmVz 12164\nIGRyYWdvbg== 12165\nIHBvaW50aW5n 12166\nIHBlbG8= 12167\nb3J0ZXJz 12168\nIHdvcmtvdXQ= 12169\n0LjQvNC10YA= 12170\nbW9uZA== 12171\nIE5vcGU= 12172\nINeW15Q= 12173\nINmC 12174\nIGFkb3B0ZWQ= 12175\nYnVs 12176\nIHNhbnM= 12177\nIHBvc3NpYmlsaXRpZXM= 12178\nIHBlbmQ= 12179\nIHphbWFu 12180\naG91 12181\nIHNoYXJlcw== 12182\nIGNhbGVuZGFy 12183\nIHBlcnNvbmE= 12184\nIHNlYWw= 12185\nIGdlbmU= 12186\nIHN0b3JlZA== 12187\nINC/0L7Qtw== 12188\nIGx5cmljcw== 12189\nIGluc3RydW1lbnRz 12190\nIE1B 12191\ngOydtA== 12192\nIGNsb3Vkcw== 12193\naG90 12194\n4bqv 12195\nIOqwmeyVhOyalA== 12196\nIEVtcGlyZQ== 12197\nIGJpbw== 12198\nd2luZA== 12199\naWVnbw== 12200\nIEV1cm9w 12201\nIOWlvQ== 12202\nZWRnZQ== 12203\nIGJhY2t3YXJkcw== 12204\nIOyngOs= 12205\nIHF1ZWVu 12206\nIHNoaW5l 12207\nIMOnxLFr 12208\nIGNhZA== 12209\nIE9k 12210\nIOyCrOuejA== 12211\nIGJ1YmJsZQ== 12212\nw7Rp 12213\nemVz 12214\nIHJlYWN0aW9ucw== 12215\nIGp1ZGdtZW50 12216\nIERlbW9jcmF0cw== 12217\nIGNvc2Fz 12218\nYXNoZWQ= 12219\nINC00L7Qu9C2 12220\nxZtuaWU= 12221\n6rQ= 12222\nIGV4ZW1wbGU= 12223\nTVA= 12224\n4buv 12225\nIFZlcnM= 12226\nIHJlc2ls 12227\nIG3DoQ== 12228\nxYRzdA== 12229\nYmVsaWV2 12230\nIFZvcg== 12231\nIHNjaGVtZQ== 12232\nb25kYQ== 12233\nIHBvZGVtb3M= 12234\nIGNoYXJnZXM= 12235\nIGRlc3RpbmF0aW9u 12236\nIEt5 12237\nIFNT 12238\nIHNpbGVuY2U= 12239\nIGVtYmVk 12240\nbmF0 12241\n4bubaQ== 12242\nQU5U 12243\nZ2dlZA== 12244\nIHJlZHVjaW5n 12245\nIHVnbHk= 12246\nIG1pbQ== 12247\n0YPQtNCw 12248\nMzQ= 12249\nIGNvcmQ= 12250\nINGC0L7QttC1 12251\nIExpc2E= 12252\nIMO2bg== 12253\nIENocmlzdGlhbnM= 12254\ndW1ibGVz 12255\nb2xvZ2lzdHM= 12256\nYXph 12257\nIHRlbmRz 12258\nIENvb2s= 12259\nIGdlc2FndA== 12260\nIO2VmOuCmA== 12261\nIFRlcw== 12262\nZXJlbW9ueQ== 12263\nINC90YPQttC90L4= 12264\nIE1BUklTSEE= 12265\nIGVucm9sbA== 12266\nIENyeQ== 12267\nRVNT 12268\nIFNhZA== 12269\nIGltcGxlbWVudGVk 12270\nIGTDrWE= 12271\nw5w= 12272\nIHBpc3Q= 12273\nRHI= 12274\nIHNhYmU= 12275\nIFNvY2k= 12276\nw6RyZQ== 12277\nINC60YLQvg== 12278\nIEZyYW5jaXNjbw== 12279\nIOyepQ== 12280\nIGNyZWF0dXJlcw== 12281\nYXdz 12282\nIGVhcm5lZA== 12283\nIGNoZWFwZXI= 12284\nIGRsYQ== 12285\nIHdhcm4= 12286\nc2NoZQ== 12287\nIGJsYWg= 12288\nIG51dHI= 12289\n6Lw= 12290\nIGdvcmdlb3Vz 12291\nIEFuZ2VsZXM= 12292\nIGdlbWFjaHQ= 12293\nIGhvbWVsZXNz 12294\nb2dyYXBoaWM= 12295\nIFRhaXdhbg== 12296\nIFNvbQ== 12297\nIEhhZA== 12298\nYWN0aW9ucw== 12299\nIHBvc3Rz 12300\nIG91dHJh 12301\nIE1lYW4= 12302\na2Fy 12303\nIGNvdXM= 12304\nIGJyYWNr 12305\n0LjRgtGM0YHRjw== 12306\nIGJlbGlldmVz 12307\nIHN1aWNpZGU= 12308\nIGVxdWFsbHk= 12309\nIGNhcmVz 12310\n0L7QttC90L4= 12311\nIHN0ZW0= 12312\nIE11Y2g= 12313\nIHByb2R1Y2Vy 12314\n15XXkA== 12315\nIHByb3RlY3Rpbmc= 12316\nIFRSQVZJUw== 12317\nIGludGVydmlld3M= 12318\nIGFsaWVu 12319\nIEFzaw== 12320\nIHNvbGU= 12321\nQ08= 12322\nIFN1ZA== 12323\nIHN1cnZpdg== 12324\nIHNrZXRjaA== 12325\nIHfFgmE= 12326\nIGNvbG9j 12327\nIGFwb2xvZ2l6ZQ== 12328\nd2VpZ2h0 12329\nIDU1 12330\nID4= 12331\nIGhlcm9lcw== 12332\nIEJvc3Rvbg== 12333\nIGRlcGVuZGVudA== 12334\nIG1vdGl2YXRpb24= 12335\nZmxpeA== 12336\nIHNlYW0= 12337\n0LrQuNC1 12338\nIGRyYWlu 12339\nb2RlZA== 12340\nIGd1aWx0eQ== 12341\nIEplbm4= 12342\naW5nZW4= 12343\nIGdyYW50ZWQ= 12344\nIEtlbGx5 12345\nIFNhdg== 12346\nIFVuY2xl 12347\nIEhvbmVzdGx5 12348\nRUxJ 12349\nIG5hdmlnYXRl 12350\nIGJsZXNzZWQ= 12351\nY29yZQ== 12352\nIGVhcm5pbmc= 12353\nIHNpZ25hbHM= 12354\nIGRpc2s= 12355\naWFscw== 12356\nIGFnZXM= 12357\n5oU= 12358\nIHBhcnRpY2xl 12359\nINGH0LXRgA== 12360\nIGNhbm4= 12361\nIHRpZXI= 12362\nIHN0YXRlbWVudHM= 12363\n6rOg7JqU 12364\nIOuVjOusuOyXkA== 12365\nIENobw== 12366\nIHBvbGFy 12367\nYW7Dpw== 12368\nIEtlbm4= 12369\nIE5p 12370\nIEZpZ2h0 12371\nb3JnYW4= 12372\n6ZU= 12373\nIENoYQ== 12374\nIFPDrQ== 12375\n44Oq 12376\nIHNsaWM= 12377\nIGNlcnRpZmlj 12378\nIHRlbXBsYXRl 12379\nIEZlZGVyYWw= 12380\nIGNvbnNpZGVyYXRpb24= 12381\nIGV4cGxv 12382\nIE1haW4= 12383\nIE5F 12384\nIGFsb25nc2lkZQ== 12385\nIGRyZXNzZWQ= 12386\nIFBvaW50 12387\nIGVudmlyb25tZW50cw== 12388\nIHByw7N4aW0= 12389\nIGRhYXI= 12390\nIHByb21wdA== 12391\nIHB1cnN1ZQ== 12392\nIGVudGVydGFpbm1lbnQ= 12393\nIHRocm9hdA== 12394\nIHByb2JsZW1h 12395\nIG1hcnQ= 12396\n7Lw= 12397\nIHByb3ZpZGVy 12398\n2Iw= 12399\nINeX 12400\naW50ZQ== 12401\nbWFraW5n 12402\nIHN0cm9rZQ== 12403\nIHRpc3N1ZQ== 12404\nVW4= 12405\nIHByZWNpb3Vz 12406\nIEFydHM= 12407\naW5raW5n 12408\nINCe0L0= 12409\nINC40YE= 12410\nbmFo 12411\nINCV0YHQu9C4 12412\nIGNvcm5lcnM= 12413\nIHRyaWNreQ== 12414\naW5jaA== 12415\nbGlqaw== 12416\nIHByZXNzaW5n 12417\nbGV2ZWw= 12418\nQU5H 12419\nIHJhZGlhdGlvbg== 12420\n7ISg 12421\nIGNvbmZyb250 12422\nIHZldA== 12423\nIHJlcHJlc2VudGF0aXZl 12424\nIHByb3BhZw== 12425\nIGNyYXA= 12426\nIERlYw== 12427\nIHJhbXA= 12428\n0LXQv9C10YDRjA== 12429\ndcOpcw== 12430\nZXNzZW4= 12431\nY3JpcHRpb24= 12432\nIGJpbGxz 12433\nIE1hdHRoZXc= 12434\nIGFuaW1l 12435\n4bqldA== 12436\nIGxvd2VzdA== 12437\naGFz 12438\nc2NyZWVu 12439\nb2dyYXA= 12440\n0LDQu9C+ 12441\naW50b24= 12442\nIEphaA== 12443\n6ICF 12444\naXTDoA== 12445\nIGtheQ== 12446\nIHJvdGF0aW9u 12447\nIFdlcmU= 12448\nYWJlaQ== 12449\nIHRyaWFscw== 12450\nIGxldmVy 12451\naWdodHk= 12452\nIHNwb29u 12453\nIGh1bnQ= 12454\nY2xpbmc= 12455\nIGRpc20= 12456\nINCx0L7Qu9GM0Yg= 12457\nIGFzc2F1bHQ= 12458\nIO2YlQ== 12459\nIHdlZWtseQ== 12460\nIG1pc21v 12461\nIGdlbmV0aWM= 12462\ndWxwdA== 12463\nIFN0dWRlbnQ= 12464\nIHJlYWxpc3RpYw== 12465\nIGF1dGhlbnRpYw== 12466\n5omT 12467\nYXN0YQ== 12468\nIGFycmVzdGVk 12469\nIGd1aWRlbGluZXM= 12470\nINec15A= 12471\nINC00LDQsg== 12472\nIENvbWluZw== 12473\nZsO8cg== 12474\nIHJlcXVlc3Rz 12475\ng5A= 12476\nIGFuYWx5emU= 12477\nIGludGVyZXNz 12478\nIGhhbHQ= 12479\nIE9wZXI= 12480\nb25vbQ== 12481\nIGR1Y2s= 12482\nIHdpdGhk 12483\nc2Vy 12484\nIM+M 12485\nIEhpc3Rvcnk= 12486\nIHlvdXR1YmU= 12487\n44KN 12488\nIHNhYmVy 12489\nd2Fsaw== 12490\nZm9udA== 12491\nIG92ZXJ2aWV3 12492\nMzk= 12493\nw7x5 12494\nZXR0aQ== 12495\nIGZyb3plbg== 12496\nIGZsZXNo 12497\nxJ9p 12498\nIFBN 12499\nIOyZgA== 12500\n6aI= 12501\n0YbQuNC4 12502\nIOq4sOs= 12503\n7YGs 12504\nIHByb3Nl 12505\nb29vbw== 12506\ncmF0ZXM= 12507\nV1M= 12508\nIGF1dG9tYXRpYw== 12509\nIGNvbGxlY3Rpbmc= 12510\nxZE= 12511\nIG5laWdoYm9ycw== 12512\nwrsu 12513\nIEV4cGw= 12514\nIGNpcmN1bA== 12515\nY292ZXI= 12516\nd2Vn 12517\nIHN0aWNrcw== 12518\nIGVsbGVy 12519\nIHd3dw== 12520\nIGRvcm0= 12521\nIEV4cGVy 12522\nIHN0YXRpc3RpY3M= 12523\nIGVtYWlscw== 12524\nIGdyYXZl 12525\naW1peg== 12526\nSFM= 12527\nIHVpdA== 12528\nLCc= 12529\nIGxhc2Vy 12530\n6Ik= 12531\nINGC0LXQvA== 12532\n0YvRiA== 12533\n0YnRkQ== 12534\nIGdlbmF1 12535\nIHRpZW5lbg== 12536\nIG1lZGl0YXRpb24= 12537\nIE9yZ2Fu 12538\nIGVzdGltYXRl 12539\nIOustOw= 12540\nbGV0cw== 12541\nIG7DoHk= 12542\nIG1pbmRzZXQ= 12543\nIHJlc29u 12544\nIG3DqXM= 12545\nIG51bWVyb3Vz 12546\nIHZpZWxsZWljaHQ= 12547\nIFRoaXJk 12548\ndW91cw== 12549\nIERlYWQ= 12550\n0LDQvdC0 12551\nSE4= 12552\nIHJhY2luZw== 12553\nIGFnZW50cw== 12554\nIFV0 12555\nIHRlYXI= 12556\nIEhQ 12557\nIGNoZW1pc3RyeQ== 12558\nIHN1cnZpdmFs 12559\n5paw 12560\nIGNvbnZpbmNlZA== 12561\nIDs= 12562\nIHJlZ3VsYXRpb25z 12563\nIEVT 12564\n5ZKM 12565\nMzAw 12566\nIGVuc2U= 12567\nIOy1 12568\nIGRpY3Q= 12569\nR0E= 12570\nIGFow60= 12571\n5YuV 12572\nIHRlag== 12573\nINC+0YHRgg== 12574\nIEVsZWN0 12575\nIGludGVsbGVjdHVhbA== 12576\nIGJpYXM= 12577\nIGJ1cmRlbg== 12578\n54K5 12579\nIOyWtOuWuw== 12580\nIGNoZWVy 12581\nIHNvcGg= 12582\nIHBvcnRmb2xpbw== 12583\ndWJh 12584\nIGVzdG9z 12585\nVFY= 12586\nRm9y 12587\nIGFzaA== 12588\nIGtvbW1lcg== 12589\nIGNvbGxlY3RpdmU= 12590\nIHdyZXN0 12591\nIEpldHp0 12592\nIFdhdA== 12593\ncmVpY2g= 12594\nIHByaW1lcg== 12595\nYWN0aXZl 12596\nIG1pZQ== 12597\naWNrZWQ= 12598\nIGh1bnRpbmc= 12599\nIHRlc3RpbQ== 12600\nIGNvbXBhc3Npb24= 12601\nINix 12602\nIGJydXQ= 12603\nIHNhbGFk 12604\n0L7QsdGJ0LU= 12605\nIHNvbHZpbmc= 12606\nIGZsb2F0aW5n 12607\n57c= 12608\nIGF0dHJhY3RpdmU= 12609\n2YjZhA== 12610\nIHBlcmQ= 12611\naWZmZXI= 12612\nIHNjdWxwdA== 12613\naGho 12614\nIFdlZWs= 12615\nIGVudGh1cw== 12616\nIG5hZA== 12617\nIG1lcmNo 12618\nIO2ZlQ== 12619\nIG1pbGU= 12620\n5aW95LqG 12621\nIM64 12622\nIOuCmOs= 12623\n6YeN 12624\nMzg= 12625\nIGNoYWlucw== 12626\nIEFsbW9zdA== 12627\nIHRpY2tldHM= 12628\ncmlu 12629\nIEND 12630\nIGRpc3RyaWJ1dGVk 12631\nYWJldGVz 12632\nIHRlbXBlcmF0dXJlcw== 12633\nIGdhaW5lZA== 12634\nIGZsZXhpYmlsaXR5 12635\nIHNjcmVhbWluZw== 12636\nIGFicm9hZA== 12637\ndW5v 12638\nIGVudHJlcHJlbmV1cnM= 12639\nIE5ldHdvcms= 12640\nIENhbmFkaWFu 12641\nIHByZXY= 12642\nIHPDtg== 12643\nINGC0LXQsdGP 12644\nIFBva2U= 12645\nIFBvZA== 12646\nIFR1cmtleQ== 12647\n54++5Zyo 12648\nIGFic3RyYWN0 12649\nIHNuYWtl 12650\nIEFteQ== 12651\nIOuKkOuCjA== 12652\nIGJyYXZl 12653\nIOyeiOyWtOyalA== 12654\nIEthbA== 12655\nIDIwMDc= 12656\nw6FyaW8= 12657\nIG1hcmtlZA== 12658\nZ2luZXM= 12659\nIGFsbG9j 12660\nT05H 12661\nIHNjaWVudGlzdA== 12662\nIGVzY2E= 12663\nIHJhY2lzbQ== 12664\n15HX 12665\nIFNhbXM= 12666\nIFBlbm4= 12667\nIGxvYWRz 12668\nIOCuqA== 12669\nw7xiZXI= 12670\nTWU= 12671\naXjDsg== 12672\nIHBlcsOy 12673\nYW5uZQ== 12674\nIGV4cHJlc3NlZA== 12675\n0LzQtdGA 12676\nIG1vZXQ= 12677\nIHJldHVybmluZw== 12678\nbmlh 12679\nIGV4cG9u 12680\nUHJv 12681\nIGxveWFs 12682\nTUw= 12683\nIGxhbXA= 12684\nIHNoeQ== 12685\nIGNvbXBvc2l0aW9u 12686\nIEx5 12687\nIG1hZ25ldGlj 12688\nIHByZW1pZXI= 12689\nIG1lYXN1cmVk 12690\nIHN1bW1hcnk= 12691\nIGF0dGFja2Vk 12692\nIGZpbmlzaGluZw== 12693\n0Jc= 12694\n56U= 12695\nIHNpdHM= 12696\nIGh5ZHJvZ2Vu 12697\nIG1haQ== 12698\nIERldXRzY2g= 12699\nYXPEsQ== 12700\nIG9idGFpbg== 12701\ndmll 12702\nIHNvaXQ= 12703\nIOuwlA== 12704\nIGxhbmU= 12705\nIGNvbnNlZ3U= 12706\n0LLQvg== 12707\nIGVhc2U= 12708\nYWtpbg== 12709\nIEZh 12710\nIHVudHVr 12711\nIGJ1cnN0 12712\nIGN1bQ== 12713\nYWzEsW0= 12714\nw7pibGlj 12715\naWRp 12716\nIFJveWFs 12717\nIEtvbg== 12718\nIGNvbW1vbmx5 12719\nIHJlbW92aW5n 12720\nIGp1cg== 12721\naWxpYg== 12722\nIGFuY2g= 12723\n7ZaJ 12724\nxrDhu6M= 12725\nINCc0Ys= 12726\nIEFudGg= 12727\nIFPDpQ== 12728\nIGludGVycnVwdA== 12729\nIHN0ZXJl 12730\nIE9T 12731\nb255bQ== 12732\ndGVyeQ== 12733\nIE1hcmlh 12734\n6rKD 12735\nIGV4cGxvcmluZw== 12736\nIHRyYW5zcGFyZW50 12737\nIGZhdGU= 12738\nIEp1bmc= 12739\nIGdydXA= 12740\nIGRhcmtlcg== 12741\nIERvdWc= 12742\nIG1hbmU= 12743\n5pS+ 12744\n4bqhaQ== 12745\nZHJp 12746\nbG9vaw== 12747\nIERlc2lnbg== 12748\nIHR1dGFq 12749\nIGhvcml6b250YWw= 12750\ncmVvbg== 12751\nb3J0ZQ== 12752\nIENvcnJlY3Q= 12753\nIFN0ZXZlbg== 12754\nIHZpbmU= 12755\nMDI= 12756\nacSH 12757\nIHNpZW1wcmU= 12758\nIEtleQ== 12759\n5YOP 12760\nIEdhbWVz 12761\nIG5hYXI= 12762\nIHNob2NrZWQ= 12763\nZWx2ZQ== 12764\nIFJvc2U= 12765\n7Ius 12766\nIHN0b3BwaW5n 12767\nb2hs 12768\nIE1peA== 12769\nIHN1ZmZlcmVk 12770\nIHNpZ21h 12771\nIHdlYWtuZXNz 12772\nIE93 12773\n4Li14LmI 12774\nSUY= 12775\nIOCuhQ== 12776\nYWRlZA== 12777\nIE5ldGZsaXg= 12778\nYW5lcw== 12779\nIHJlbWFpbmVk 12780\naXJ5 12781\nIHJpcA== 12782\nZWxsdA== 12783\nIHNpbGVudA== 12784\nIHByb3Zlbg== 12785\nIHRveGlj 12786\nIGFsdW1pbg== 12787\nIG11bHRpcGw= 12788\nYWxhbmQ= 12789\nIDM0 12790\nMDY= 12791\nIEJydQ== 12792\nIOygleunkA== 12793\nSnVzdA== 12794\nYm95 12795\nIHNob2U= 12796\nIGNyZWF0dXJl 12797\nIGhlYWRlZA== 12798\nINC+0YLQug== 12799\n5rE= 12800\nIGVzc2VuY2U= 12801\nIHJlbWFya2FibGU= 12802\nIG7Dum1lcg== 12803\nIGRyZXc= 12804\nIHB1enpsZQ== 12805\nIExpYnJhcnk= 12806\nIEZ1 12807\nYXNoZXM= 12808\na2s= 12809\nIElzdA== 12810\nprA= 12811\nIEJyeQ== 12812\nIGNlcmVtb255 12813\nIOCujg== 12814\nIGNyaQ== 12815\nZXF1 12816\n44Ki 12817\nIHByaXpl 12818\nIGRpbWVuc2lvbnM= 12819\nb2dyYW0= 12820\nIGxlYXRoZXI= 12821\nIHBvcHVsYXRpb25z 12822\ndXVt 12823\nIHZlZ2Fu 12824\n0Y/QtA== 12825\nIGPDs21v 12826\n5YQ= 12827\nIHN0cmlw 12828\n5aM= 12829\nIHZhY2F0aW9u 12830\nhZU= 12831\nIG1lYWxz 12832\naWxpcHA= 12833\nIGVudHM= 12834\nYXJhbQ== 12835\ncmljaHQ= 12836\nIGdyYWlu 12837\nIFNwYWlu 12838\nIGNoZWVr 12839\nIEFmZg== 12840\nSU9O 12841\nIEJyaW5n 12842\nIDM4 12843\naWVsZW4= 12844\ndWx1 12845\nINCx0L7Qu9GM0YjQtQ== 12846\nIGFubm91bmNlbWVudA== 12847\nINGC0YPRgg== 12848\nIFByb3BoZXQ= 12849\nYXJkbw== 12850\nMzc= 12851\nIHdva2U= 12852\nIHRyYW5zbGF0aW9u 12853\nIE5PVA== 12854\nIENM 12855\nIGTDvMWf 12856\n0YbRlg== 12857\nYWNlcg== 12858\nIExvYw== 12859\nIHBlcmNlcHRpb24= 12860\nTk8= 12861\nIGRpZXNlbg== 12862\nTG9vaw== 12863\naGVhcnQ= 12864\nYXZlZA== 12865\nIGJvdW5kYXJ5 12866\nIGZsb3dz 12867\n0ZHQvA== 12868\nIGFyZ3VtZW50cw== 12869\nIGVsZWN0aW9ucw== 12870\nxLFz 12871\nIGhlY2s= 12872\nIHN1aXRhYmxl 12873\nIGZpYmVy 12874\nIFN0cmE= 12875\neHk= 12876\nIEh1bQ== 12877\nIG1vbnRobHk= 12878\ndXBlcg== 12879\nIGdvbGY= 12880\nIGxhdGVseQ== 12881\nIEdhcmQ= 12882\nIFJlbg== 12883\nIEFzdA== 12884\nIEZhbnQ= 12885\n0LDRgdGB 12886\nIG9ic2Vy 12887\n66Gc 12888\nIGVhc2llc3Q= 12889\njZTr 12890\nIHdlYnNpdGVz 12891\ncG9s 12892\nIGNvY29u 12893\nIOCuhw== 12894\nIFZlZw== 12895\nIHdhbGtz 12896\nIGludHJv 12897\nIGRpcmVjdGVk 12898\nIEFubmE= 12899\nIOuTpOyWtA== 12900\nIEVhc3Rlcm4= 12901\nIFNhaW50 12902\nIEJvdw== 12903\nIHJvYXN0 12904\nIFVSTA== 12905\nIGplZGVu 12906\ndXJhcw== 12907\nYWph 12908\nIHNlbWk= 12909\nIHJhcGlkbHk= 12910\nIHRhcmdldHM= 12911\nIENvbnRyb2w= 12912\nIGJhaA== 12913\nIHJlZmxlY3Rpb24= 12914\nIGNyZWF0aXZpdHk= 12915\naG9sZGVycw== 12916\nIOyYrOs= 12917\nIGFtb25nc3Q= 12918\nIGZlZWRpbmc= 12919\n0Y3RgtC+0LzRgw== 12920\nINCy0LjQtNC1 12921\nIOunjOuTpA== 12922\nIFNtYXJ0 12923\nIHJlbGlhYmxl 12924\nIHZlemVz 12925\nINeo 12926\nY2h1Y2tsZXM= 12927\nYXppb25l 12928\nIFdpbGxpYW1z 12929\nIGHDpw== 12930\nIHNsZWU= 12931\n0LXRiQ== 12932\nIHRpbWVsaW5l 12933\nIHRob3JvdWdo 12934\n4buN 12935\nIE90 12936\n4bqhbg== 12937\nIGltYWdpbmF0aW9u 12938\nIG1lY2hhbmljcw== 12939\ncmlzdA== 12940\nIGNsYWltZWQ= 12941\nz4TOtw== 12942\nw6p0ZQ== 12943\nIEh1cnJ5 12944\nIGlQYWQ= 12945\nIGNvbnN0cnU= 12946\nIENsYQ== 12947\nIEFscw== 12948\n5Lya 12949\ndXR6 12950\nIGN1bHR1cmVz 12951\nIOyWtOuWu+qyjA== 12952\nIGJlbG9uZ3M= 12953\nIHllcg== 12954\nIERvZXNu 12955\nIGdlb21ldA== 12956\nIGJpZA== 12957\nIGZvYW0= 12958\nIGhvYg== 12959\nIEJyaXRhaW4= 12960\nIHN1YnN0YW5jZQ== 12961\nIGFubml2ZXJzYXJ5 12962\nIOuEiA== 12963\nIG5vdGVk 12964\nIGdvdmVybm9y 12965\nIHN0b2Nrcw== 12966\nMzE= 12967\nIGRpeWU= 12968\n7Iqk6w== 12969\nIHJlYg== 12970\nemVs 12971\nIG11bHRpcGx5 12972\nIG9wZXJhdG9y 12973\nhKTsmpQ= 12974\nIHdhdGVycw== 12975\nIGTDpHI= 12976\nIHVuc2Vy 12977\nIEVsaXphYmV0aA== 12978\n6auY 12979\nIGluY3JlYXNpbmdseQ== 12980\nIEdybw== 12981\nIGVuZ2luZXM= 12982\naXJz 12983\n2Ks= 12984\nIHRyZWFzdXJl 12985\nUEM= 12986\naW5jdGlvbg== 12987\naXJp 12988\nIGFjY3Vt 12989\nIHZhcmlhdGlvbg== 12990\nIHBvbQ== 12991\nIHRpdGxlcw== 12992\nIEZlc3Q= 12993\nw7Nz 12994\nIGVsZGVy 12995\nbnlt 12996\ncnVu 12997\n0Y/Qsg== 12998\nIGlubm92YXRpdmU= 12999\nIG5vbWJyZQ== 13000\nIGNvaW5j 13001\nIGZyYW5jaA== 13002\nIGVudG9uY2Vz 13003\nIG5pY2h0cw== 13004\nIGV4Y2x1c2l2ZQ== 13005\nIENoZWVycw== 13006\nIEJp 13007\ndWpl 13008\n5q2h 13009\nIHBvaw== 13010\nIFByZW0= 13011\nIHJvY2tldA== 13012\nRUxJUEU= 13013\nIGhvc3BpdGFscw== 13014\ncml1bQ== 13015\nIGp1c3Rl 13016\nIGhhbW1lcg== 13017\nIHF1YW50dW0= 13018\nIHJlc3BvbnNlcw== 13019\nbGx5 13020\nZW5kaQ== 13021\nIGFjdGl2ZWx5 13022\nIGZyaWRnZQ== 13023\naWF0ZQ== 13024\nbG9uZw== 13025\nIHF1ZW0= 13026\nIGRlYXRocw== 13027\nIHN1cGVyaW9y 13028\nY2tlbg== 13029\n7J207JeQ 13030\na3RvcA== 13031\nIGdhdGhlcmVk 13032\no6g= 13033\nIGRhenU= 13034\nIHJlY2lwZXM= 13035\nIGJ1eno= 13036\nY2Vu 13037\nIGFueXRpbWU= 13038\nb25zZW5zZQ== 13039\nIGNpcmNsZXM= 13040\nIHNvbHZlZA== 13041\nIOyLoA== 13042\nIGNvcm9uYXZpcnVz 13043\nIEx1a2U= 13044\nIGJ1YmI= 13045\nIGNvbnRlbXBvcg== 13046\ncnp5 13047\nIEphbmU= 13048\nINC00L7QvA== 13049\nIHNjcmV3cw== 13050\nIGh5YnJpZA== 13051\nIGNhc3VhbA== 13052\nIHNlbGJzdA== 13053\nYmVpbmc= 13054\nIMSQ 13055\nIENvbHVtYg== 13056\nINGF0L7Rhw== 13057\nIGJ1Y2tldA== 13058\nIGV2YWx1YXRl 13059\nIGlkb2w= 13060\nIHJlcHV0YXRpb24= 13061\nIOyGjOs= 13062\n2YjYsQ== 13063\nIGhlY2hv 13064\nIHBvZW0= 13065\nIHN1YmplY3Rz 13066\ncGxhbnQ= 13067\nIEJlaA== 13068\nIFNwZWFraW5n 13069\nIGJhdHRlcmllcw== 13070\nIGZvbGxvd2Vycw== 13071\nw7Zs 13072\nIGdlbnRseQ== 13073\nIHNpeHQ= 13074\nIHBhcmFtZXRlcg== 13075\nIGlra2U= 13076\nIFRvdXI= 13077\nIERK 13078\nb3R0ZQ== 13079\nIEphaHJlbg== 13080\nIHByZXBhcmF0aW9u 13081\nINC00YPQvA== 13082\nIDgwMA== 13083\nY29w 13084\naWtpbmc= 13085\nIOusuA== 13086\nINC90YM= 13087\nINC70LXRgg== 13088\n5ZCM 13089\nIElkZQ== 13090\nIOyhsOq4iA== 13091\nIGxhdWdodGVy 13092\nIG1vbGVjdWxlcw== 13093\nIFJlc3Q= 13094\nIG9ic2VydmVk 13095\nZHppZQ== 13096\nIGFkdmVydGlzaW5n 13097\nZXJ0bw== 13098\nIG1vaW5z 13099\nIE1JVA== 13100\nIGV4Y2l0 13101\nIHR1bQ== 13102\nIHR5bA== 13103\nIGludmVzdGVk 13104\nIHBoYXJt 13105\nIHVuZXhwZWN0ZWQ= 13106\nIHBoaQ== 13107\nb3R5cGU= 13108\nd2Vpc2U= 13109\nIGdlw6c= 13110\nam91cmQ= 13111\nIGhvcnNlcw== 13112\nbsSF 13113\nPSI= 13114\nIFNN 13115\nIGZpYg== 13116\nIGNsaXBz 13117\n55W2 13118\n5aaC5p6c 13119\nIHJlZ2ltZQ== 13120\nIHJvdGF0ZQ== 13121\ncm91 13122\nbmlr 13123\nIGFybW9y 13124\n8J+Y 13125\n0LXRgNCw 13126\n5bqm 13127\nIE9jaA== 13128\nIHJpY2h0aWc= 13129\nw7x6ZWw= 13130\nYW5lb3VzbHk= 13131\nbWVr 13132\n6Yyv 13133\nIFhpYW8= 13134\nIGV4aXN0ZWQ= 13135\nd29ydGg= 13136\n44Gj44Go 13137\nIG5hdWdodA== 13138\nIGhlacOfdA== 13139\nIEJhbA== 13140\nIHJlc2lk 13141\naXZvdA== 13142\nb21hdGlj 13143\nIGhpcmVk 13144\nIGdyYWR1YWxseQ== 13145\nIG9uaW9ucw== 13146\nIGNvbXBhdA== 13147\nIGludGlt 13148\nIGpldw== 13149\nIGNvbnRyaWJ1dGlvbg== 13150\nIElyZQ== 13151\nYWNqaQ== 13152\nIHNsaWNl 13153\nIGltbXVu 13154\nIFJ1cw== 13155\nIGdyb3dz 13156\nIFNpbWlsYXJseQ== 13157\nIGhhcmRlc3Q= 13158\nIHN0cnVjaw== 13159\nIG1lYXN1cmVtZW50 13160\nLi4uXQ== 13161\ndGhleQ== 13162\nIOyggOs= 13163\nIHNuZWFr 13164\nIGFwcGxpZXM= 13165\nINC90LXQvA== 13166\n5pM= 13167\n15HXqA== 13168\nINCn0YLQvg== 13169\nIG91dHJv 13170\nIGlubm9jZW50 13171\nIG1vZw== 13172\nIFNhbXN1bmc= 13173\nIG1lcmN5 13174\nIGhhbmRsaW5n 13175\nIGludGVydmVudGlvbg== 13176\naWRheXM= 13177\nZ290 13178\nIGN1cnJpYw== 13179\nIGJvdW5kYXJpZXM= 13180\nIGNvbmZ1c2luZw== 13181\nnbzripQ= 13182\n5oc= 13183\nIHN0aXRjaGVz 13184\nw612ZWw= 13185\nIHR1bm5lbA== 13186\naXTDpA== 13187\nIGdvc3Q= 13188\naW15 13189\nIGN6YXM= 13190\nIG3DqQ== 13191\nIGNhdGFs 13192\nIFNpbW9u 13193\nIExJQU0= 13194\nbWlj 13195\nINCk 13196\nIGV5ZWw= 13197\naXNhcw== 13198\nIENQVQ== 13199\nIERvdQ== 13200\nIG7DpGNo 13201\nIGluZmluaXR5 13202\nIHJpZg== 13203\nIFBlYWNl 13204\nIEN1 13205\nIG1pbmltYWw= 13206\nIGxpc3RlbmVk 13207\nIHBvbGU= 13208\naGFsYg== 13209\nIGxvYWRlZA== 13210\nIHN0ZWFkeQ== 13211\nIEJlc2lkZXM= 13212\nw6pt 13213\nIGxhcA== 13214\nIGNvb3A= 13215\nIGZyaWVuZHNoaXA= 13216\nd29ybGQ= 13217\nIGdlaA== 13218\nIHR5bGtv 13219\nIExhdXJh 13220\nIHN1cnJvdW5kZWQ= 13221\nIEV2ZW50 13222\nIGNoYXA= 13223\nIFdvbmRlcg== 13224\nYnJlYWs= 13225\nIGRyb3Zl 13226\nIGJyb2FkZXI= 13227\nIGNoaQ== 13228\nRmk= 13229\nIGdlaGVu 13230\nIHdlc3Rlcm4= 13231\nIGludGVsbGlnZW50 13232\nIHBlcnNpc3Q= 13233\nIGZvdW5kZWQ= 13234\n44GT44Go 13235\nIGhpc3Rvcmlj 13236\nIGZyw6U= 13237\nY2tzw6U= 13238\nIGhhbmR5 13239\nIHN5bXA= 13240\nIHJvd3M= 13241\nIG51dHJp 13242\nYnVy 13243\nIExlb24= 13244\nIHNpc3RlbWE= 13245\nIGV4dGVuc2l2ZQ== 13246\nINGD0LI= 13247\n7Y8= 13248\nIG5pZ2h0cw== 13249\nIGPDoWM= 13250\nIGNvdW50aW5n 13251\nIE11c3Q= 13252\nYWxsb3c= 13253\n0LXRgdGB 13254\nTW9t 13255\nINC90LDQtNC+ 13256\nIGJhcnJlbA== 13257\n44Oe 13258\nQVJE 13259\nIGluc3RhbGxhdGlvbg== 13260\nIGluc2VjdA== 13261\nIOuFuOs= 13262\ndWrEhQ== 13263\nIMSRaQ== 13264\nIHBhY2tlZA== 13265\nIGZpY3Rpb24= 13266\nTm93 13267\nIFlheQ== 13268\nIHBlcnQ= 13269\ncm9ucw== 13270\ndW5kZQ== 13271\nYWNoZXM= 13272\nIHN0eWxlcw== 13273\nIGFwcsOocw== 13274\nb2t1 13275\nIFZpY2U= 13276\nxLFuxLF6 13277\nY29tbQ== 13278\nIGFzc2lnbmVk 13279\nIGludGVyYWN0aW9ucw== 13280\nIGFjYWI= 13281\nRkVMSVBF 13282\nIHJlc2N1ZQ== 13283\nIGluZHVzdHJpZXM= 13284\nIEFuZHk= 13285\nIHByYWlzZQ== 13286\nIGZsYW1l 13287\nIHNuYWNr 13288\n7YI= 13289\n54E= 13290\nIHN3bw== 13291\ncmVuZGVy 13292\nIGJvYXJkcw== 13293\nINGC0L7QvA== 13294\nZW5uZQ== 13295\nIHBhc3Rh 13296\nIGRldmls 13297\nIEZlbA== 13298\nIGhhdHRl 13299\nIGNvbGxlZw== 13300\nZWg= 13301\n7Ls= 13302\n44GT44Gu 13303\nIHByb2R1Y3RpdmU= 13304\nZm9yd2FyZA== 13305\n0LjQvw== 13306\nIHNtYXJ0cGhvbmU= 13307\nIGludmlz 13308\nIGJ1bQ== 13309\nIHdob2E= 13310\n7J6E 13311\nIG9ja3PDpQ== 13312\nIExhbmc= 13313\nIFN5cmlh 13314\nIHNlc2k= 13315\nzq/OsQ== 13316\nIGFwcHJvdmFs 13317\nNDg= 13318\nINC+0LTQuNC9 13319\nIOuW 13320\nIEhhcnI= 13321\nIEFkbWluaXN0 13322\nINek 13323\nIERlYW4= 13324\nZmk= 13325\nIGNpdGl6ZW4= 13326\nIHNoYXJr 13327\nMDU= 13328\nIGJvaWw= 13329\nIGluZGljYXRl 13330\n5aE= 13331\nQXJl 13332\nIGxheW91dA== 13333\nIHJlZnI= 13334\nIFBhY2lmaWM= 13335\nQUFBQQ== 13336\nIEF1c3RyYWxpYW4= 13337\nZ3Jlc3Npb24= 13338\nVm9pY2U= 13339\n0LDQu9GB0Y8= 13340\nIHNoZWx0ZXI= 13341\nVG8= 13342\nYXVwdA== 13343\nIGV2YWx1YXRpb24= 13344\nYXBvcg== 13345\nIGN1cnJlbmN5 13346\nINC80L3QvtCz0L4= 13347\naWdvcw== 13348\n44Gw 13349\nIG9jdA== 13350\nIHJveWFs 13351\n6LM= 13352\nYXNpbA== 13353\nIENoaWxkcmVu 13354\nIHJpZW4= 13355\nIOuTnOs= 13356\nIGJhcnJpZXI= 13357\nIGVqZW1wbG8= 13358\nIGVr 13359\nTkQ= 13360\nZXNw 13361\n0LXQvdCw 13362\nIHBpYw== 13363\nIGtpbGxlcg== 13364\nIGludGVncmF0ZQ== 13365\nIGZld2Vy 13366\nIGRpc2FiaWxpdGllcw== 13367\nIC4uLi4= 13368\nIHRyaWFuZ2xl 13369\nIGZlZXM= 13370\nIHdpZGVseQ== 13371\nZW1p 13372\nIG92ZXJ3aGVsbWluZw== 13373\nIHpvbWI= 13374\nIGJlcmU= 13375\nIGhvb2Q= 13376\nIEF5ZQ== 13377\nIEhhcnZhcmQ= 13378\nZXY= 13379\nIM+Ezr/PhQ== 13380\nIGN1cHM= 13381\nIEF1Y2g= 13382\nem9uYQ== 13383\nIDE5OTA= 13384\nIHdlacOf 13385\nIGNydW5jaA== 13386\n5qU= 13387\nINC30LDQsg== 13388\nIG1lYXN1cmluZw== 13389\nIHN0YXRpb25z 13390\nIFN0ZXBoZW4= 13391\nIHNob3J0bHk= 13392\nIHNpZ25pbmc= 13393\nIGNvbWVkeQ== 13394\nb21v 13395\nIHN1Z2dlc3Rpb25z 13396\nIHNpZ25hdHVyZQ== 13397\nINC/0YDQuNCy 13398\nIGRpc29yZGVy 13399\nYXNrYQ== 13400\nIHdvcmxkcw== 13401\nIHByZWNpc2VseQ== 13402\nbm9ybQ== 13403\ncmF2 13404\nIENpdmls 13405\nSW50ZXI= 13406\nIENlcnRhaW4= 13407\nIGluanVyZWQ= 13408\nIHN1Z2dlc3Rz 13409\nIEdvbGRlbg== 13410\nIGN5YmVy 13411\nINi0 13412\nIHRlbXBvcmFyeQ== 13413\nIGNvb3Blcg== 13414\nIHZvdGVk 13415\nIG91Z2h0 13416\n4bqleQ== 13417\neHVhbA== 13418\nIHBhbmVscw== 13419\nIDk1 13420\nIGhhbmRzb21l 13421\nINC/0YDQvtCy 13422\nIHBlcm1pdA== 13423\nIGtlaW4= 13424\nIGJhZGx5 13425\nIG5vdGlmaWNhdGlvbnM= 13426\naXph 13427\nIE5vdGljZQ== 13428\nIGluY2x1c2l2ZQ== 13429\nIGFuc3dlcmluZw== 13430\nIO2X 13431\ndWxk 13432\n7YWM 13433\nIG5vd2FkYXlz 13434\nIDM3 13435\nIGJvbHQ= 13436\nIHN0YXRpYw== 13437\nIEhvcA== 13438\nIGF2YW50 13439\nYWpv 13440\nIOunm+yeiA== 13441\nIGZpZnR5 13442\nIEZpbmFs 13443\nIHNjb3Jlcw== 13444\nIFRhcA== 13445\nIGN5bA== 13446\nIGNvbnZpbmNl 13447\nIGFueXdheXM= 13448\nb2Rh 13449\nIOyVvA== 13450\nIHNlcnZlcw== 13451\nINGC0LDQutC+0Lk= 13452\nIFpvb20= 13453\nIHNhdmluZ3M= 13454\ndWxv 13455\nIHNvdXRoZXJu 13456\ndmlld2Vy 13457\nIGhvamU= 13458\nIHNlamE= 13459\nIHJlcHJlc2VudGluZw== 13460\niOuNmA== 13461\nbGlr 13462\nIFNvbWVib2R5 13463\nIGJlYXN0 13464\nIHN0aWNraW5n 13465\nIGluc2lzdA== 13466\nIHRhbGVudGVk 13467\nIGV4cGxhaW5pbmc= 13468\nIGF0dG9ybmV5 13469\n6YOo 13470\nIHN0YWlycw== 13471\nIERvZw== 13472\n7Ys= 13473\nIGNpZw== 13474\nIHNoYXBlZA== 13475\nIHNvbnM= 13476\nz4HOuQ== 13477\ndXR0 13478\nIOyU 13479\nIHBhcmFk 13480\n7J24642w 13481\nIGhvcm4= 13482\nIEpvdXI= 13483\nYW5ubw== 13484\nIHdvcmxkd2lkZQ== 13485\n5Yqb 13486\nIHBhcnRpY2lwYXRpb24= 13487\npoQ= 13488\nIG3Ds3c= 13489\nIGJ1cm5lZA== 13490\nIHdyaXRlcnM= 13491\nYWxsYWg= 13492\nIEZ1bmQ= 13493\nIGNsZXZlcg== 13494\nIExldXRl 13495\nYmlu 13496\nIGJlYXRpbmc= 13497\nZm9vdA== 13498\nIOybkA== 13499\nIFN0dWRpbw== 13500\nIHZhZw== 13501\nYmV5 13502\ncnpl 13503\nIG9wcG9zaXRpb24= 13504\nINC20LjQtw== 13505\nd2hv 13506\nIOqxtA== 13507\nIHRyYWNl 13508\nINC00LXQvdGM 13509\nIGVwaWQ= 13510\nIGdlc2No 13511\nIE5hcg== 13512\nIEJF 13513\n0YPQuQ== 13514\nIFNpZ24= 13515\nZWRseQ== 13516\nIGNsYXk= 13517\nIGluc3RhbnRseQ== 13518\nIGdhdGhlcmluZw== 13519\nIEdhbGF4eQ== 13520\nIGJvcmVk 13521\nIEJ1ZGRo 13522\nY8Op 13523\nIG1hbQ== 13524\nIHNsb3Bl 13525\nIOuLpOydjA== 13526\nIHNjaMO2bg== 13527\nIHBpcg== 13528\nZ2Vm 13529\nYW1lcg== 13530\nIGjDtg== 13531\nIGNvbGxlYWd1ZQ== 13532\nIHByZXNlbnRz 13533\nYWRpdW0= 13534\nIOCutQ== 13535\nIGZhbGFy 13536\nYmVlcA== 13537\nIGRyaWVk 13538\naXNtcw== 13539\nIHJvcGU= 13540\nIHdvcmtzaG9w 13541\nIGVzdHVk 13542\nIGJhbmRz 13543\nIHRoZW1lcw== 13544\n5YWs 13545\n2YrYsQ== 13546\n5ZCO 13547\nIHJlbWluZGVy 13548\n0YLRgw== 13549\nIEJo 13550\nIGNvY29udXQ= 13551\nINGB0YLQvg== 13552\nIENoYW5uZWw= 13553\nIGltbWlncmF0aW9u 13554\nw6Rz 13555\nLi4uLi4= 13556\n5Li7 13557\n55m9 13558\nc3RvcA== 13559\nINC60LDRgA== 13560\nIGNvaW5z 13561\nINGH0LDRgQ== 13562\nIGRlc3RydWN0aW9u 13563\nbGluZWQ= 13564\nIGJhcnJpZXJz 13565\nYW50aW5l 13566\nIHByaW50ZWQ= 13567\nIGNvbmdyYXR1bGF0aW9ucw== 13568\nIEhlYXJ0 13569\nIGlucXU= 13570\ndGhh 13571\nIGhhcmRseQ== 13572\nIEF2ZW4= 13573\nIHRpbmhh 13574\nIFNvbnk= 13575\nIE5G 13576\nIGdyYWR1YXRlcw== 13577\nIHNxdWVlemU= 13578\nZXJlbXk= 13579\nz4TOuQ== 13580\nIGVwaWM= 13581\nIEp1 13582\nIG9sbQ== 13583\nIExhdWdodGVy 13584\nIGJlbGllZnM= 13585\nIENydQ== 13586\nIFRydWU= 13587\nIFNvdWw= 13588\nb3dlZW4= 13589\nIHJvbWFudGlj 13590\nINC30LI= 13591\nIGFub3M= 13592\nIFl1cA== 13593\n6Zi/ 13594\nZGlt 13595\nIGluZmVy 13596\nINC30LDQvA== 13597\nIHNvYw== 13598\ndWth 13599\nIHByZWNpc2U= 13600\nIGRyb3BwaW5n 13601\nIGNsdWU= 13602\nIGVycm9ycw== 13603\nY2hhcmdl 13604\nIFB1 13605\nb21ldGVy 13606\nIGxhbWJkYQ== 13607\nYWNpb25hbA== 13608\nIERvbmc= 13609\nIGNoYW1iZXI= 13610\nIHRoYW5rZnVs 13611\nIE51 13612\nIEhhd2Fp 13613\nIGluZm8= 13614\nIGFjdGl2YXRl 13615\nIFF1YWw= 13616\nIHF1ZWQ= 13617\n0YPQu9GM 13618\nIGNsb3Ro 13619\n5Zac 13620\nIHdpY2h0aWc= 13621\nNTU= 13622\nIG90cmE= 13623\nb2dyYXBoZXI= 13624\nIGN1cmlvcw== 13625\nIDE5ODA= 13626\nIGVtcHJlcw== 13627\nZGVzcw== 13628\nZXVy 13629\nIGNsdXN0ZXI= 13630\nYXJ0ZXI= 13631\nb2JpbGU= 13632\nIFlhbg== 13633\nIEFkdg== 13634\nIGRpc2NpcGxpbmU= 13635\nIOygleuPhA== 13636\nIFBsYWNl 13637\nIFNlbGVjdA== 13638\nVEU= 13639\nINCx0YvQu9Cw 13640\nIHdoaXM= 13641\nIGJheQ== 13642\nIERvcg== 13643\nZW5jaW5n 13644\nIHJlcGV0 13645\nIGZpY2Fy 13646\ncGFk 13647\nIGZvZw== 13648\ndXlvcg== 13649\nIHNuYXA= 13650\naWJ0 13651\nIHNvYmll 13652\nIGFwcG9pbnRtZW50 13653\nIFJ5 13654\nIGNlaWxpbmc= 13655\nb3Vyc2U= 13656\nIHdyaXRlcw== 13657\nIEFmZ2hhbmlzdGFu 13658\nIG1vcw== 13659\nYXpl 13660\nIHBlbmFs 13661\nIGNyeXN0YWw= 13662\nSUNF 13663\n6rCQ 13664\n6Z8= 13665\nIFRlc2xh 13666\nIHRoZW9yaWVz 13667\nIGFwcGVhbA== 13668\nIG5ld3NwYXBlcg== 13669\nIGNvb2tpZXM= 13670\n5qk= 13671\nINin2YTZhA== 13672\nIG1hag== 13673\nIEdldHRpbmc= 13674\na29tbWVu 13675\nIEhlYXZlbg== 13676\nZWxscw== 13677\nIGRpdmluZQ== 13678\nxKs= 13679\nIGFrdA== 13680\nIGhvcGVz 13681\nIENoZW4= 13682\nd2VnZW4= 13683\nKioq 13684\nIEZyYWdl 13685\nINC90Lg= 13686\n4Li5 13687\nbWluaXN0ZXI= 13688\nbmVzb3Rh 13689\nd2hpY2g= 13690\nIGV4cGxpY2l0 13691\nIHZlcmRhZA== 13692\nIGdyYWR1YXRlZA== 13693\nIFBoaWxpcHA= 13694\nUUw= 13695\nIE1J 13696\nIGRldm90 13697\nIGN1cmU= 13698\nIGNsb3Nlc3Q= 13699\nIMOE 13700\nIHNleHk= 13701\n44Gb 13702\nIERlYXRo 13703\nb2tv 13704\ndWd1 13705\nIEFubmU= 13706\naXRhcmlhbg== 13707\nZXNh 13708\n0LXQs9C+0LQ= 13709\nIER1cg== 13710\nIDAwMA== 13711\nemVpdA== 13712\nIHRvdXJuYW1lbnQ= 13713\nIG1lbGhvcg== 13714\n4Liq 13715\nIGluZHU= 13716\nIGZsYXc= 13717\nIHdhcnM= 13718\nIE1pbmQ= 13719\nIElyb24= 13720\n0YLQsNC6 13721\nIFZS 13722\nIHNpeg== 13723\nIFNvdXRoZXJu 13724\nIOq3uOufrOs= 13725\nIGF3YWs= 13726\nIOyVng== 13727\nIGN1YmU= 13728\nYmVsaWV2YWJsZQ== 13729\naWZhbGw= 13730\nZGlz 13731\nIGFiYW5kb25lZA== 13732\nbWluZA== 13733\nIHBhcmw= 13734\nIGNsYXNzaWNhbA== 13735\n6Is= 13736\n4buZdA== 13737\nIEF1dG8= 13738\nIEJvcg== 13739\n56k= 13740\nNDAw 13741\nIFNvY2lldHk= 13742\nIHN1YnRsZQ== 13743\nIG1pc3Npb25z 13744\nIHJlbWVtYmVyZWQ= 13745\nIEVpdGhlcg== 13746\nIGRhZsO8cg== 13747\nT1JE 13748\nIGludGVuc2l0eQ== 13749\nRVNJTg== 13750\nIEN1cA== 13751\nIHJhcmVseQ== 13752\nIHRveXM= 13753\nIENoYXJsaWU= 13754\n4buf 13755\nIGdsYXViZQ== 13756\nIHJvdW5kcw== 13757\nVElO 13758\nIGNhcGFiaWxpdHk= 13759\nIGRlcml2YXRpdmU= 13760\nIHJlZmVycmluZw== 13761\nIGTDpQ== 13762\nIFRBTEk= 13763\nIGNvdHRvbg== 13764\nIGNvbmZlcg== 13765\nIGNvbHVtbnM= 13766\nIGxpYmVyYWw= 13767\nIG51bmNh 13768\nIM68zrU= 13769\nIGluZG8= 13770\naWJlbg== 13771\nIEJlaXNwaWVs 13772\nIOq3uOughw== 13773\nINGD0Yc= 13774\nIGhveQ== 13775\nIGZyeQ== 13776\nIFNjb3R0aXNo 13777\n6Io= 13778\nIGNpdg== 13779\nIGNvbnNlcnZhdGl2ZQ== 13780\nIGFpcnBs 13781\nIHNhcg== 13782\ncnVz 13783\nIGludmVzdG1lbnRz 13784\nIGluZmluaXRl 13785\nIOCulQ== 13786\nIFRBTElFU0lO 13787\nIEdhcnk= 13788\ndWVsbA== 13789\nINCw0Lo= 13790\nIENpcg== 13791\nIHJpdHVhbA== 13792\nID4+Pg== 13793\nIHRlbXB0 13794\nIFRlY2g= 13795\nIFBva2Vtb24= 13796\nIGltcHJvdmVtZW50cw== 13797\nIHNwYXJl 13798\nIHRyYW5zbGF0ZQ== 13799\nIHNvbnJh 13800\nIEZpbG0= 13801\nd29ydA== 13802\nINC80Lg= 13803\nIHBlcmlvZHM= 13804\nIGplYWxvdXM= 13805\n44GE44GE 13806\nIHRpcg== 13807\nTUk= 13808\nIGNvbmR1Y3RlZA== 13809\nIOyViOuFlQ== 13810\nMDk= 13811\nIFBvbGl0 13812\nIFdoZXJlYXM= 13813\nIG1vaXN0dXJl 13814\nIHNpbnM= 13815\nIGthcA== 13816\nINGN0Lo= 13817\nIGJlbmlt 13818\nIGVsaW1pbmF0ZQ== 13819\nIGF0aGxldGVz 13820\nIE1hbmFnZXI= 13821\nIGZlYXR1cmVk 13822\nYXBvcmU= 13823\n5Lqb 13824\nIOuwnA== 13825\nIHBlcmY= 13826\nIFRodXM= 13827\nIGRlYnV0 13828\n0L7QsdGA 13829\nIHNlw7E= 13830\nIG15c3RlcmlvdXM= 13831\nd29yZHM= 13832\nlOqwgA== 13833\nIGNoZWNrcw== 13834\nIHZvbHVudGVlcg== 13835\nIHdhc2hpbmc= 13836\nIE1hcnZlbA== 13837\nIEFC 13838\naXNzb3Jz 13839\nISc= 13840\nIEZ1bGw= 13841\neWVvbg== 13842\nIHdlaWdo 13843\nIEpPSE4= 13844\nIHZvcw== 13845\nIHByb2NlZHVyZXM= 13846\nIGFkZHJlc3NlZA== 13847\nIEJlcmxpbg== 13848\ncHV0ZXI= 13849\nIEJhbg== 13850\nIG1lZGljYXRpb24= 13851\nIGRyb25l 13852\nINGD0LE= 13853\nIEplYW4= 13854\nIGNhcHM= 13855\nIGRpc2FwcG9pbnRlZA== 13856\nIHdvcmU= 13857\nIOq1rQ== 13858\nIG9yZ2FuaXpl 13859\nIEhhbGxvd2Vlbg== 13860\nIGZhbnRhc3k= 13861\neWFyZA== 13862\nIG5vc290cm9z 13863\nIGp1bXBlZA== 13864\nIHBob3RvZ3JhcGh5 13865\nIE5hbWU= 13866\ncmVj 13867\nQUI= 13868\nIGJsZXNzaW5n 13869\nIFNodXQ= 13870\nIGJpdHRlcg== 13871\ncG9w 13872\n44Gd44KM 13873\nIGRlaQ== 13874\nIGZ1bGZpbGw= 13875\n55CG 13876\nIGRlbmdhbg== 13877\nIGJlbG8= 13878\nIE1lYW53aGlsZQ== 13879\nIGRlcG9pcw== 13880\nIGRpYWJldGVz 13881\nIGJ1bmQ= 13882\nIFplYWxhbmQ= 13883\nIGRpZ2VzdA== 13884\nIHRpcmVz 13885\nIGRvZA== 13886\nYWduZQ== 13887\n4bq/dA== 13888\nIHBlZWw= 13889\nINC30LDQsQ== 13890\nIG5vZGVz 13891\nIHRyZW5kcw== 13892\nIFN3aXRjaA== 13893\nIEF3YXJk 13894\nIE9yaWc= 13895\nIEhhbA== 13896\nIGVzdGFz 13897\nIDM2MA== 13898\nIHNpbXVsdA== 13899\nIGNvbWlj 13900\nIG3DoA== 13901\nIGJhbGFuY2Vk 13902\nIFByaW5jZXNz 13903\nIGtpbG9tZXRlcnM= 13904\n4bup 13905\nIHBhcnRpcg== 13906\n7KSR 13907\nc29mdA== 13908\nIFZpZXc= 13909\nIGJpb2xvZ2ljYWw= 13910\naW5zdA== 13911\nNDQ= 13912\nIG1hbmVyYQ== 13913\nIGNvbXByZWhlbnNpdmU= 13914\nIFNhYg== 13915\nIGNyaW1lcw== 13916\neWVycw== 13917\nIENvbXBhbnk= 13918\nIFBob3Q= 13919\nIHBvdWNv 13920\naWFj 13921\nIGJlaW0= 13922\naW5hdGU= 13923\nIHN1YnNlcXU= 13924\nIE1heW9y 13925\nIGNlbnR1cmllcw== 13926\nw6hyZXM= 13927\n7J6W7JWE7JqU 13928\nIOq3uOufvA== 13929\nIEZyYXU= 13930\nIE9I 13931\nIOuBnQ== 13932\nIE5haA== 13933\nIFNlcmllcw== 13934\nIG92ZXJuaWdodA== 13935\n7ZKI 13936\nIOKAog== 13937\nIHRyYXZl 13938\nYXR0ZXJlZA== 13939\nIHdhcnJp 13940\nIEdydW5k 13941\nIEluZG9uZXM= 13942\nIHNjcmE= 13943\nb2J5 13944\nIEJyb29r 13945\nIGN1cnM= 13946\nIOu4 13947\nIGV4cGxhaW5z 13948\ncmFtYXRpYw== 13949\nIHBhcnRpY2lwYXRpbmc= 13950\nIG1pbnV0 13951\nIGNvbnRyYWN0cw== 13952\nIGdlZ2Vu 13953\nIGRpc2FwcGVhcmVk 13954\nIFNO 13955\nIHJvYnVzdA== 13956\nYXBo 13957\nIHNocmlt 13958\nIGRldmFzdA== 13959\nY29wZQ== 13960\nIG1lZXRz 13961\nIHBlYWNlZnVs 13962\nbWF0ZQ== 13963\nIHdlbGQ= 13964\nINeq 13965\nZG9u 13966\n0YPRgtGM 13967\nIHJlZ2lzdGVyZWQ= 13968\nIE5paw== 13969\namlu 13970\nIGNhdg== 13971\nIGVjaHQ= 13972\naW94 13973\nIGZsb3dpbmc= 13974\n0L3QvtGB0YLQuA== 13975\nIHRvZQ== 13976\nIGVudGl0eQ== 13977\n0L7QstCw 13978\nZml0cw== 13979\nIFBhdHJpY2s= 13980\n0YLRgA== 13981\nIGxldmVyYWdl 13982\nIGNvcnJlbA== 13983\naWFo 13984\nIHN0cmluZ3M= 13985\naXN0aW5jdA== 13986\nIGd1ZQ== 13987\nYXJjaHk= 13988\nIHRlbmdv 13989\nxLFtxLF6 13990\nIG9yYml0 13991\n5Li6 13992\nINC10YnRkQ== 13993\nY2FrZQ== 13994\nINec15Q= 13995\nIE1pbm5lc290YQ== 13996\nIGJyYWtl 13997\nb3dpZQ== 13998\nIGNyYXc= 13999\n6riw66W8 14000\nIHByb2dyYW1tZQ== 14001\nINGB0LvRg9GH 14002\n5Y+q 14003\naWVuY2Vz 14004\nIE91aQ== 14005\nIFBlcnM= 14006\naW1pZW50bw== 14007\nIEludmVzdA== 14008\nIHNsb3dlcg== 14009\n5pmC5YCZ 14010\nIEJldGg= 14011\nIG51cnNl 14012\nIFNwcmluZw== 14013\nU3A= 14014\nIHVuZW1wbG95 14015\n0LTQuA== 14016\nIGdlbml1cw== 14017\nIEFhcm9u 14018\nIOq3uOufrA== 14019\nIGVp 14020\n44GX44KH 14021\nIHRhbmtz 14022\nIGF1am91cmQ= 14023\nIGNvbXBsZXhpdHk= 14024\nINGA0LXRiA== 14025\nIG9sZGVzdA== 14026\nIGxldHo= 14027\n5YWl 14028\nIHBoZW5vbWVub24= 14029\ncHJpbnQ= 14030\nIEJ1bmRlcw== 14031\naXRhdA== 14032\n6ruY 14033\nIDQy 14034\nIFdp 14035\nIGluY29t 14036\nIGdlaw== 14037\nIGVtYnJhY2U= 14038\nIHRpZXM= 14039\nb3V0ZQ== 14040\nIGRvc2U= 14041\nIEZyaWVuZHM= 14042\n0YvRgg== 14043\n0LXQs9C+0LTQvdGP 14044\nIG9yZw== 14045\nhOuhnA== 14046\nw7Nn 14047\nIGV4Y2VlZA== 14048\nIGdvZHM= 14049\nIOqxsOyYiOyalA== 14050\nIHNvY2lldA== 14051\nIFVuaXZlcnM= 14052\naXTDpHQ= 14053\nIHdvcmRlbg== 14054\nIHNtb2tpbmc= 14055\nIGludGVucw== 14056\nYWJ1bA== 14057\nZW1pYQ== 14058\n6JE= 14059\nNDc= 14060\nZmx5 14061\nIDIwMDY= 14062\nIFNlcmlvdXNseQ== 14063\nIHByemV6 14064\n5rw= 14065\nY3Jl 14066\nIG5hbg== 14067\nIG1vZGVz 14068\n0L7QstCw0YLRjA== 14069\nIEhhbmc= 14070\nZW1lbg== 14071\nIGJlbmVmaWNpYWw= 14072\nIHZvdGVycw== 14073\nIEJyb2Fk 14074\nIGJlbnQ= 14075\nV293 14076\nIG11bA== 14077\n5ZOl 14078\nIFVD 14079\nIGRhbWFnZWQ= 14080\nIFVrcmFpbmU= 14081\nIHdpcGU= 14082\nIHN0b25lcw== 14083\nIG1hbmFnZXJz 14084\nIHJhYg== 14085\n0YHRgtGA0L4= 14086\nbGF0 14087\nIGRlY2U= 14088\nIGdyYXBoaWM= 14089\nIGZvc3M= 14090\nIGRpc2FncmVl 14091\nIEFtZW4= 14092\nIHNlY3JldHM= 14093\naG9sZQ== 14094\naW5rbGU= 14095\nIGZvcnR1bmF0ZQ== 14096\nIOyx 14097\n7JyE 14098\n6JCs 14099\nIGhhYml0cw== 14100\nIGJ1cmllZA== 14101\nIGhpbg== 14102\nIHZpcnR1YWxseQ== 14103\nb2xhcw== 14104\nIFJQ 14105\nIFRhYg== 14106\nbG93 14107\nIHNhY3JpZmlj 14108\nIGVzdGltYXRlZA== 14109\nb2xu 14110\n2Ys= 14111\nY3Vy 14112\nIEZlZWw= 14113\nIGNhc3RsZQ== 14114\nIHVzZWxlc3M= 14115\nIGRpc2c= 14116\nIEphY29i 14117\nIGdhYW4= 14118\nIHVwc2lkZQ== 14119\nIHBhcmVjZQ== 14120\n44Oz44M= 14121\nIHNoaXBwaW5n 14122\nIENS 14123\nIGRpc3J1cHQ= 14124\nYWN0ZXI= 14125\nVU5E 14126\nZnU= 14127\n5a6M 14128\nIFBpY2s= 14129\nIENoYXJs 14130\nIEJ1bGw= 14131\nIGVudGVycHJpc2U= 14132\nIHB1bmlzaG1lbnQ= 14133\nYWNraW5n 14134\nIGZyYWN0aW9u 14135\nIHRhYmxldA== 14136\nIGNob3Jk 14137\nIHNpbWlsYXJseQ== 14138\n5YW25a+m 14139\nIFRvcm9udG8= 14140\nIGNvdXJ0cw== 14141\nxJ9s 14142\nZXN6Y3pl 14143\nIHByb25vdW4= 14144\nIFNpc3Rlcg== 14145\nIE1Q 14146\nIGdyZWF0bHk= 14147\nIERhbms= 14148\naWNvcA== 14149\nIGdhcmJhZ2U= 14150\nIHJlc29sdmU= 14151\nIFNhZg== 14152\nIEd1bg== 14153\nIGNvbXBvdW5k 14154\nIOuwsA== 14155\nIE11c2lr 14156\n4pmr 14157\nIGNoYW9z 14158\nIFdoZW5ldmVy 14159\nIGV1cm9z 14160\nIG9yY2hlc3Q= 14161\nIHJlZnJpZ2Vy 14162\nYWxhbg== 14163\n4Li3 14164\nIEFtYXppbmc= 14165\nIHB1ZA== 14166\nYWdhbg== 14167\nIGplc3pjemU= 14168\naXN5 14169\nIGFjY3VyYWN5 14170\nIEFtYQ== 14171\naXNvZGU= 14172\n64yA 14173\nIGludGVycHJldGF0aW9u 14174\nIExpYmVy 14175\n5rc= 14176\nY2Ft 14177\nIGV2b2x2ZWQ= 14178\nIEtheQ== 14179\n0YbRiw== 14180\nIGNyZWF0b3I= 14181\naXRhcw== 14182\nIGFsYXJt 14183\nIGNlbGVicmF0aW9u 14184\nemVudA== 14185\nIGZ1bmNpb24= 14186\nIG92 14187\ndW1ibGluZw== 14188\nICU= 14189\n4LiI 14190\nIHJlc3RyaWN0aW9ucw== 14191\nINC90LDQsg== 14192\nIEtpbmRlcg== 14193\nIGJhbmFuYQ== 14194\n0YzRjw== 14195\nIGRpYW1ldGVy 14196\nIG5vcnRoZXJu 14197\ndXJlcnM= 14198\nIFBhcw== 14199\n5oiR55qE 14200\nIHdvcmtmb3JjZQ== 14201\nIGp1bmc= 14202\nIGd1YXJhbnRl 14203\nIGVxdWlsaWI= 14204\nIHN1aXRl 14205\nIGV1cm8= 14206\nIGRlbGliZXI= 14207\nU3Rl 14208\nIGRvd250b3du 14209\nIGNoaW4= 14210\nIGNvZGVz 14211\nZWRpYQ== 14212\nIHNoZWVw 14213\ncmVzaG9sZA== 14214\nd25pZQ== 14215\nw7Ni 14216\nIHVuZGVybHlpbmc= 14217\nbGlh 14218\namVy 14219\nz4DPjA== 14220\n550= 14221\ndGhyb3A= 14222\nIHphcA== 14223\nIHZhY3V1bQ== 14224\nIEhhYg== 14225\nIHdyYXBwZWQ= 14226\n7KI= 14227\nIGludmVudG9yeQ== 14228\n0LzQsA== 14229\nIGNvb3Jk 14230\nIHBsYXRlcw== 14231\nIHN5bW0= 14232\nVGU= 14233\nIHfFgmHFm25pZQ== 14234\nIHJlYWNoZXM= 14235\nIGxvbmVseQ== 14236\nU2NyaXB0 14237\nbGVl 14238\nZXNzZXI= 14239\nIOqxuA== 14240\nIEdlc2No 14241\nIE1vdmluZw== 14242\nIHLDqXA= 14243\nIFZpbGw= 14244\n5ZCI 14245\nIFJhY2hlbA== 14246\nIHRlbW9z 14247\nT05F 14248\nIHN0cmFpbg== 14249\nIGFuZ2Vs 14250\nIGbDpQ== 14251\nVHI= 14252\nIGFjaG8= 14253\nIGhpZ2hsaWdodHM= 14254\nIFdlcg== 14255\nIENhcmw= 14256\nIGJsdXI= 14257\nIHJlZ2FyZHM= 14258\nwrc= 14259\n0LjQu9GB0Y8= 14260\nIHJlY3Jl 14261\nIFlhbmk= 14262\nVUNL 14263\noLg= 14264\nIGVsZWN0cm9ucw== 14265\nIFNwaWVs 14266\nIHZlZA== 14267\n2r4= 14268\nIGJlYW0= 14269\nIGlkaW90 14270\n65Ok 14271\n0L3QsNGH 14272\naWRk 14273\nIHNraQ== 14274\naXRhdGl2ZQ== 14275\nIGh5cG90aGVz 14276\n44Gn44GZ44Gt 14277\nZW50ZXI= 14278\nIOyVhOuLiOs= 14279\nIGlocmU= 14280\nIHByZXZpZXc= 14281\nYW5nZWw= 14282\nIGRlbW9u 14283\nIGR1cw== 14284\nIGRpYw== 14285\nIEtvbQ== 14286\nTEVZ 14287\nLi4uIQ== 14288\nIHNpZWh0 14289\nIFNvbmlj 14290\nIHRlbmhv 14291\nYW5hcw== 14292\nIGRpZ2l0 14293\nIE1hYXI= 14294\nIHVuZGVyZ3JhZA== 14295\nb3VuY2Vy 14296\ndWZmeQ== 14297\nIGNvbnZlcnNpb24= 14298\nIGRpc2Nvbm5lY3Q= 14299\nIGVjaG8= 14300\nb21lcg== 14301\nIGN1cnJpY3VsdW0= 14302\nIHBlcmNow6k= 14303\nIHdhbmQ= 14304\nLi4/ 14305\nIHJvbGxlZA== 14306\nIGVudHJlcHJlbmV1cg== 14307\nIHRoZW9yZXQ= 14308\nINGJ0L4= 14309\nIGluc2lnaHRz 14310\nIHp1c2FtbWVu 14311\nb2lu 14312\ncmV0dA== 14313\ncHJvZHU= 14314\nIHZpc2l0b3Jz 14315\nZW91cw== 14316\nIGdyYW5kbW90aGVy 14317\nIGh1bW9y 14318\nINC90LjRhQ== 14319\nemVuaWE= 14320\naW5zb24= 14321\nIHJlc2V0 14322\nIGJhc2ViYWxs 14323\nIG1hdGNoaW5n 14324\n64uk6rCA 14325\nIHB1bnRv 14326\n7KE= 14327\nIHJlZGU= 14328\nIGFkZHJlc3Npbmc= 14329\nIGZvcmVjYXN0 14330\nIEJvbA== 14331\nIGNvbG9yZWQ= 14332\nIGRvY3VtZW50YXRpb24= 14333\nIGV4cGVjdGF0aW9u 14334\nIE5vcnRoZXJu 14335\nIGNyZW8= 14336\nIOCumg== 14337\nZm9u 14338\nIHVuc2VyZQ== 14339\nVU0= 14340\nIGNvcGllcw== 14341\nIGV4cGFuZGVk 14342\nIHZldGVyYW5z 14343\nIEFsbQ== 14344\nINCy0L7QvtCx0YnQtQ== 14345\nIHBzeWNob2xvZ2ljYWw= 14346\nIG5vc3Nv 14347\nIHBheW1lbnRz 14348\naW1ldGVycw== 14349\nIC0tPg== 14350\nIEplbm5pZmVy 14351\nIHZvbHVudGVlcnM= 14352\nb3NzZQ== 14353\nb3Jpb3Vz 14354\nINCx0YvQu9C4 14355\n6II= 14356\nIEVzcw== 14357\nd3M= 14358\nIEJD 14359\nIElD 14360\nV29tYW4= 14361\nIHZvbnQ= 14362\nIGV0aG5pYw== 14363\nRU5O 14364\n0LjQvNC+ 14365\nIGxvYg== 14366\nIG91aQ== 14367\nY3M= 14368\nIHJlaGU= 14369\nIOyggQ== 14370\nIGNoaWNr 14371\nw7pzaWNh 14372\nIGtvbnQ= 14373\nIERpc3RyaWN0 14374\nIHBpbGU= 14375\nINCw0LI= 14376\n0LXQudGB0YLQsg== 14377\nIMKj 14378\nIGlzc3VlZA== 14379\nINC60L7QvNC/ 14380\nIHByb3NwZXI= 14381\nIHByb2ZvdW5k 14382\nIERlYXI= 14383\nIOOBkw== 14384\nIGZ1bmRlZA== 14385\nIGJpc2E= 14386\nnpjr 14387\n158= 14388\nIOydmA== 14389\nIHR3ZWx2ZQ== 14390\nIENoYW1waW9ucw== 14391\n6Z2e5bi4 14392\n0YHQuw== 14393\nIDIwMDU= 14394\ncG0= 14395\nIG9uZGU= 14396\nIGRpZmbDqQ== 14397\nIENoYWxs 14398\nIGRpZmZpY3VsdGllcw== 14399\nIGdhcmFnZQ== 14400\nIGTDoQ== 14401\nw7xuaw== 14402\nIOusvA== 14403\nIHRyYW4= 14404\nIHN1Ym1pdHRlZA== 14405\nenc= 14406\n2YjYpw== 14407\nIGFyaw== 14408\nIOyEsQ== 14409\nIGdyb2Nlcnk= 14410\n0L7QvdCw 14411\naWVyZQ== 14412\nIGFlc3Q= 14413\nIGV4aGliaXRpb24= 14414\nIHLDqXM= 14415\nIGNvbnNpc3RlbmN5 14416\nIGNvb2tpZQ== 14417\n0L3QtdC5 14418\nIHJlcGxhY2VtZW50 14419\n5rK5 14420\nIFNlbQ== 14421\nIOyCrOyaqQ== 14422\nODAw 14423\nIGdlbmVz 14424\nIHRyYW5zYWN0aW9u 14425\nIEVM 14426\nIGR1cmFudGU= 14427\naWJsZXM= 14428\nIEVhdA== 14429\ndGFpbA== 14430\naXNzYW5jZQ== 14431\nIHRvc3M= 14432\nIHN1cnZpdmVk 14433\nIG9mZmljZXM= 14434\nIHN1cHBvcnRpdmU= 14435\nV2hlcmU= 14436\nIHRvdXRlcw== 14437\nIOuniQ== 14438\nIGpva2Vz 14439\naWVyb24= 14440\nYXBlcnM= 14441\nIG1hdHVyZQ== 14442\nIE1hcnNo 14443\nIHNpZG8= 14444\na2luZA== 14445\nIHJlYWxtZW50ZQ== 14446\nIENoZWY= 14447\nIHF1ZWxxdWU= 14448\nIGp1ZGdlcw== 14449\nZWZ0 14450\nRVJT 14451\nIGpldA== 14452\nIHBlcnNvbnM= 14453\n6Ls= 14454\naXphdGlvbnM= 14455\ncmlr 14456\nIHNob3Bz 14457\nIFd5 14458\nIGVsZWc= 14459\ncXXDqA== 14460\ncXVvaQ== 14461\nIGp1Z2E= 14462\nIO2VnOuyiA== 14463\nIFF1ZXN0aW9u 14464\nIEdsb2JhbA== 14465\nIOyVveqwhA== 14466\nIFN0YXRpb24= 14467\n5o6l 14468\nIE9oaW8= 14469\nIHN0aWNreQ== 14470\nIHN0cmVzc2Vk 14471\nIGfDvG4= 14472\nIO2d 14473\n0YHRgtGD0L8= 14474\n6aGM 14475\nIFBoRA== 14476\naW1tZXI= 14477\nIG1lbnRvcg== 14478\nIGludmVudGVk 14479\nIHJldW4= 14480\nIGluZXZpdA== 14481\nIHBvbMOtdA== 14482\nIGV4ZWN1dGU= 14483\nIFN0b3J5 14484\nIG91dHN0YW5kaW5n 14485\nIGd1ZXI= 14486\nIFJhaW4= 14487\nIGNob3Nlcw== 14488\nIFRpdA== 14489\nINGB0LXRgA== 14490\nIFNpbmdhcG9yZQ== 14491\nIE5vbmU= 14492\nIGNocm9uaWM= 14493\nsOuNsA== 14494\nIGVnbw== 14495\n5qC3 14496\nRVNU 14497\n44GC44KK 14498\nIFdhbmc= 14499\nIE5BVA== 14500\nIGF1Zw== 14501\nIGRlc2t0b3A= 14502\nIGV0ZXJuYWw= 14503\nIOyCrOyLpA== 14504\nIENvbnN0aXR1dGlvbg== 14505\n7IKs6w== 14506\n15nXnA== 14507\ncHJlcw== 14508\nINCi0Ys= 14509\nIGludGVyZg== 14510\nIGxpc3Rz 14511\nIGZpZ2h0cw== 14512\nZnRlbg== 14513\nIElvd2E= 14514\nIG1vdGl2YXRlZA== 14515\nIEhvc3A= 14516\nIGVsc2V3aGVyZQ== 14517\nIHBhdGhz 14518\nIGluc3RhbmNlcw== 14519\nQmw= 14520\ncmFuZ2U= 14521\n4bux 14522\nIFNpdA== 14523\nbWFuYQ== 14524\nIOyLnOyekQ== 14525\nIG3DrG5o 14526\nYW5zYXM= 14527\nIHNuYQ== 14528\nIHBoaWxvc29waA== 14529\nIHBhc3Nl 14530\nxrDhu51p 14531\nYWto 14532\nZW50YWw= 14533\nIGlobg== 14534\ncnVjdG9y 14535\nINCy0LDRiA== 14536\nIGdlbmVyb3Vz 14537\nIHBpdm90 14538\n0L/QvtC7 14539\nIGphbWFpcw== 14540\nIGNvbWVudA== 14541\nIExldw== 14542\nb2R6aQ== 14543\nIFhib3g= 14544\nINCy0L7QtA== 14545\nIGNvbnNlbnQ= 14546\nieyepQ== 14547\nIGRpc3Bhcg== 14548\nbGFzcw== 14549\nIEdvdmVybm9y 14550\nQmVpZmFsbA== 14551\nIOqwnA== 14552\nIGJlbG92ZWQ= 14553\n16DXlQ== 14554\nc2VsbA== 14555\nIGhvbm9yZWQ= 14556\nbGVo 14557\nIHfDpHJl 14558\ndW50aW5n 14559\nIGZyYXVk 14560\nIFJBTQ== 14561\n6rG4 14562\nIGtpbGxz 14563\nIGVjb25vbWljcw== 14564\nMDQ= 14565\n0L/QtdGA 14566\nIGNvaXNhcw== 14567\nINC40LPRgA== 14568\nw61t 14569\nIG3DtmNodGU= 14570\nIOy1nA== 14571\nIHN0aW11bA== 14572\nIGZhc3Rlc3Q= 14573\nbHY= 14574\nIGfDqW4= 14575\nIFNvdW5kcw== 14576\nIDE5NzA= 14577\nIGhvbWV3b3Jr 14578\nc3BlYWtpbmc= 14579\nIGVuY291cmFnaW5n 14580\nIHF1ZXJ5 14581\nIHJldmVycw== 14582\ncHJvZml0 14583\nIGR5 14584\nIOyekQ== 14585\n64qU642w7JqU 14586\nIHNvYXA= 14587\nIEdhbGw= 14588\nIENO 14589\nIEFucw== 14590\nIGZpYw== 14591\nYW5rcw== 14592\nIGRlc3NlcnQ= 14593\nIOyggO2drA== 14594\nIE1ha2luZw== 14595\nIGNvbWXDpw== 14596\n6rOE 14597\nIGFzc29jaWF0aW9u 14598\nRGFk 14599\naGVl 14600\nIGhvZ3k= 14601\nIGFwcm8= 14602\nIGludmlzaWJsZQ== 14603\nQW1lcmljYW4= 14604\n7Y4= 14605\nIHZpYmU= 14606\nIGVtaXNzaW9ucw== 14607\nIGFkdm9jYXRl 14608\nIGtpY2tlZA== 14609\nIHZlbA== 14610\nIHN1bW1hcg== 14611\nIGZyZWFraW5n 14612\nY2hyb24= 14613\nIHBpbmNo 14614\nIHdzenlzdGs= 14615\naXNjYWw= 14616\nIHByb3ZlZA== 14617\nIG1pbmRmdWw= 14618\nIHTDpA== 14619\nIG5vaXNlcw== 14620\nIGlzb2xhdGVk 14621\nIGNyb3NzZWQ= 14622\nIOqwlQ== 14623\nIHZvaWzDoA== 14624\nIGNob3Jl 14625\nIFJB 14626\nQ29t 14627\nIHJlbGF4ZWQ= 14628\nYXRybw== 14629\nIHByZXZlbnRpb24= 14630\nVm9pY2VvdmVy 14631\nT0Q= 14632\nIENvdmlk 14633\nIHNlcGFyYXRpb24= 14634\nIC1b 14635\n0LjRh9C10LPQvg== 14636\n55m8 14637\nIFNE 14638\nYmxlZXA= 14639\nIGluZGVwZW5kZW5jZQ== 14640\nIHBhcnRpYWw= 14641\nIGFsZ29yaXRobXM= 14642\nIEFueW9uZQ== 14643\nIGFzc29jaWF0ZQ== 14644\naHVt 14645\naWN1bGFy 14646\nIGLhuqFu 14647\nIGJhdHRsZXM= 14648\nR29vZA== 14649\nQXBwbGF1c2U= 14650\nIGJhc3RhbnRl 14651\nIGFkdmFudA== 14652\nIFN3ZWV0 14653\nIHJlZnVzZWQ= 14654\n44K4 14655\nINGC0LXQsdC1 14656\ncGxldA== 14657\nIGVuY291cmFnZWQ= 14658\n5ZOm 14659\nIG1pcmFjbGU= 14660\nIEJ1bg== 14661\nIFZhcg== 14662\ncmltaW5hdGlvbg== 14663\nZWxlY3Q= 14664\nIE11bHQ= 14665\nIGRlbGl2ZXJpbmc= 14666\nZWluZw== 14667\nIGNt 14668\nbmVobWVu 14669\nIExpbmU= 14670\nIOunjA== 14671\nZW5jZWQ= 14672\nIFNvdW5k 14673\nIENvbnRpbg== 14674\naWpk 14675\nVU5H 14676\na2xl 14677\nIHRocmVzaG9sZA== 14678\nIGNvbXBhY3Q= 14679\nYWR0 14680\nIHRvZXM= 14681\nIFB1cg== 14682\nb3duZWQ= 14683\nbWVudGVk 14684\nIGRlc2lnbmluZw== 14685\nIHZhY2NpbmF0ZWQ= 14686\nIGV4aGF1c3Q= 14687\nIGJhc2ljcw== 14688\nIGNvbnNpc3Rz 14689\nIEd1eQ== 14690\nYWN6eQ== 14691\nIG3DrQ== 14692\nd29u 14693\n5a6z 14694\nIDg1 14695\n5oI= 14696\nIG11bQ== 14697\nIGlnbm9y 14698\nIHByaW50aW5n 14699\nYWN1bGFy 14700\ncG93 14701\nIGV4cGFuZGluZw== 14702\nIGdpcg== 14703\nIENhYg== 14704\n7Zi4 14705\n0YLRjNGB0Y8= 14706\nIOyXrOufrOu2hA== 14707\nIGFuZ2xlcw== 14708\nIHRlcm1pbmFs 14709\nIFdvbg== 14710\nIEludGVyZXN0aW5n 14711\nIGNyb3NzaW5n 14712\nIGJvbmRz 14713\nIHB1ZWRlbg== 14714\nIG9yYg== 14715\nbGFyxLFu 14716\nIGNyZWVweQ== 14717\nIG51dHJpdGlvbg== 14718\nIGFsbGllcw== 14719\nIHdpcmVsZXNz 14720\nIGRlc2lyZWQ= 14721\nIGNvbXB1dGU= 14722\nIEFyaXpvbmE= 14723\nIEJlYXV0aWZ1bA== 14724\nIHByb2R1Y2Vz 14725\nIG51ZXN0cm8= 14726\ndGVk 14727\nIGVsaWdpYmxl 14728\nINGB0L7Qtw== 14729\naWNpYWw= 14730\nIEhlcm8= 14731\nIGNvbnN1bWU= 14732\nIHJvYm90cw== 14733\nIHB1cmNoYXNlZA== 14734\nY2Npw7Nu 14735\nIGl6 14736\nxrDhu6Nj 14737\nzq/Ovc6xzrk= 14738\nINij2YY= 14739\nIHNoYWRvd3M= 14740\nIE1lZGlh 14741\nIHByaW5jZXNz 14742\nIGtsYXI= 14743\nIHdvb2Rlbg== 14744\nIHVzYXI= 14745\nIGfDvHplbA== 14746\nIHNsb3Q= 14747\ncmFkZQ== 14748\nIOuS 14749\nIGhhcm1vbg== 14750\nIGluZ3JlZGllbnQ= 14751\nb3JzaGlw 14752\nZWtp 14753\nIGdyYW5kZmF0aGVy 14754\nIGV4Y2l0ZW1lbnQ= 14755\nIHBvbGl0aWNpYW5z 14756\nLi4h 14757\nIG91dHM= 14758\nIHNlcGFyYXRlbHk= 14759\nINGP0Lo= 14760\nIFdlbHQ= 14761\nIFBvdw== 14762\namFu 14763\nIG9yaWVudGF0aW9u 14764\n5Y+L 14765\nTEM= 14766\nYWdlbQ== 14767\n24zaug== 14768\n5ZCX 14769\nIGJyYW5jaGVz 14770\nYWRlbg== 14771\ncmVudGU= 14772\nIElocg== 14773\nYXNt 14774\nIGVzdMOjbw== 14775\nIE5pYw== 14776\nIHNsYXZl 14777\nIGNvbXByZXNz 14778\nY3Jvd2Q= 14779\nIGNsaW1iaW5n 14780\nIE1hbmFnZW1lbnQ= 14781\nIEJhaA== 14782\nIHBhbmlj 14783\nIGtvcg== 14784\nIGNvb2xpbmc= 14785\nIGJpbmQ= 14786\nINC30LDQtA== 14787\nIHJhY2s= 14788\nIGVudGl0 14789\nIHNlbmRz 14790\nIHlvdXJzZWx2ZXM= 14791\nZGVz 14792\nIE11c2xpbXM= 14793\nIO2a 14794\naXNtYQ== 14795\nY3ljbGU= 14796\ndW5rdA== 14797\nIENvcmU= 14798\nIGluanVyaWVz 14799\nIGlkZW50aWNhbA== 14800\n0LrQsNGP 14801\nIERldXRzY2hsYW5k 14802\nINC10LU= 14803\naXNhbg== 14804\nIHRydWM= 14805\nbGV0b24= 14806\nIGJhY2t1cA== 14807\nIHVsdHJh 14808\nIGFidW5k 14809\naWxsZXVycw== 14810\nIGJ5xYJv 14811\n5YWD 14812\nb3J0ZWQ= 14813\nIGVhcnRocXU= 14814\nINC60Ls= 14815\nIG9ic2VydmF0aW9u 14816\nIG1haW50ZW5hbnQ= 14817\nZWxlbg== 14818\nIHNldHRsZWQ= 14819\nIHBlbGE= 14820\nIEVjb25vbQ== 14821\nINU= 14822\nIHN0ZWVyaW5n 14823\nIEFMTA== 14824\nIENoZXI= 14825\nIHBhdGllbmNl 14826\nIFNub3c= 14827\nIGJvcg== 14828\nIHdvcnRoeQ== 14829\nIGPDoWk= 14830\nINen 14831\nIM66zrE= 14832\nZG9n 14833\nIEthcmVu 14834\naWxsZXM= 14835\nzrI= 14836\nIGFncmljdWx0dXJl 14837\n15XXnw== 14838\nIFNlYW4= 14839\nIHNlbnNvcnM= 14840\n7ZW06w== 14841\nYWdo 14842\nIHB1YmxpY2x5 14843\nIHBldXg= 14844\nIEFsZXhhbmRlcg== 14845\nIHByaW9yaXQ= 14846\nIGxhenk= 14847\nYXJkb24= 14848\nYXR0ZXJpbmc= 14849\nIGNvc3R1bWU= 14850\n2LPYqg== 14851\n6L+Y 14852\nIHVudw== 14853\n0Js= 14854\nIHRoaWNrbmVzcw== 14855\ncXVpdG8= 14856\nZ3VudA== 14857\naXN0YXM= 14858\nbmV5cw== 14859\nIOuQmOqyjA== 14860\nIEJyYXNpbA== 14861\nIHRva2Vu 14862\nIGFmZmlsaQ== 14863\nbG9u 14864\nIGbDpXI= 14865\nIEJlYWNo 14866\nIHdpdGNo 14867\nIFNldmVu 14868\nIHBhbnQ= 14869\nzrvOuw== 14870\nIGNhcHRhaW4= 14871\n5Z0= 14872\nIHZldXQ= 14873\nIHBvdXZvaXI= 14874\nYWN6 14875\nIEJhcmI= 14876\nIHV0aWxpdHk= 14877\nIGNvbnRlbXBvcmFyeQ== 14878\nIG9idGFpbmVk 14879\nIHBhaW50aW5ncw== 14880\nZWFy 14881\nIHBlYW4= 14882\nIE9n 14883\nIGN1c3Q= 14884\n0LvQtdC8 14885\ngpjr 14886\nIElzc28= 14887\nIGFjb250ZQ== 14888\nIFRlbGU= 14889\nIEFzc2lzdGFudA== 14890\nw4k= 14891\n7ZaI7Iq164uI64uk 14892\nIGNvdW50cw== 14893\nIGJ1Y2s= 14894\nIERlZXA= 14895\nIHRhY2tsZQ== 14896\nIGhhcnNo 14897\nIGRlY2lkZXM= 14898\n6Zec 14899\nLuKAiw== 14900\n6YKK 14901\nIEFuZ2Vs 14902\nIGxheWluZw== 14903\nIGNhbG9yaWVz 14904\nIGNvbnRyb2xsaW5n 14905\nIGFkdmFudGFnZXM= 14906\nINGN0YLQvtC5 14907\nIGFwcHJvYWNoaW5n 14908\nIHRocmVhdHM= 14909\nYWthbg== 14910\nZW1hdGlj 14911\nbWFubg== 14912\n6rO1 14913\nbXVtYmxlcw== 14914\nYWNpw7M= 14915\nIG1haW50YWluaW5n 14916\nIGZvdW5kZXI= 14917\nbGFo 14918\nZmlnaHQ= 14919\nIGFkbWl0dGVk 14920\n4oCmLg== 14921\nlYw= 14922\nYWJvbA== 14923\nIHVzYWdl 14924\nIG5vbnNlbnNl 14925\nIFBhbGVzdA== 14926\nIGNvbnRyZQ== 14927\nIERlbW9jcmF0aWM= 14928\nIEVS 14929\namVrdA== 14930\nIGFyYml0 14931\nINCz0L7Quw== 14932\nIE1pY2hlbGxl 14933\naWNoZXI= 14934\nZXNo 14935\nIFBobw== 14936\n0LrQvtC8 14937\nNDk= 14938\nIEVuZXJneQ== 14939\nzr/PjQ== 14940\nIGNlbnRz 14941\nIHJlZmVycw== 14942\nIGdvc3BlbA== 14943\nIFNoYQ== 14944\nIFNoYXJl 14945\n15nXoA== 14946\nIGNsaW5pYw== 14947\nIOuEow== 14948\nIGVxdWFsaXR5 14949\ndWdz 14950\nIHNoZWQ= 14951\nIHBsYW5lcw== 14952\nIHRvdXRl 14953\ncmVjaw== 14954\nIHN0cmFuZA== 14955\nIGJpb2xvZ3k= 14956\nIGxlYWd1ZQ== 14957\nIFBvaw== 14958\nIG7Dum1lcm8= 14959\nIENvYXN0 14960\nIGNvbnNpc3RlbnRseQ== 14961\nIG51Y2xl 14962\nT09PTw== 14963\nIG9iamV0 14964\nIGNob3I= 14965\nIGdpbmdlcg== 14966\nIGRhYmVp 14967\nIGNvb3BlcmF0aW9u 14968\n4K+NLg== 14969\nbnRlbg== 14970\n56Q= 14971\nbMOg 14972\n7JaR 14973\ncmFkbw== 14974\nIHBhc3NpdmU= 14975\nIGdsb3Zlcw== 14976\nIHVuZGVyZ3JvdW5k 14977\nIGxvZ2ljYWw= 14978\nIGtldA== 14979\nIGZ1bmN0aW9uYWxpdHk= 14980\nuOumrA== 14981\nIHBvcnRhbA== 14982\nZWxsZXI= 14983\n15nXqA== 14984\nIFRlZA== 14985\nIEdyZQ== 14986\nkJw= 14987\nIHBlcnNvbm5lbA== 14988\nIGVtZXJnaW5n 14989\nIEbDvHI= 14990\nIG1lYW50aW1l 14991\ndXNhbGVt 14992\nIENsZWFy 14993\nIHRyYXBwZWQ= 14994\nIOyasA== 14995\nIGRpc3Bs 14996\nIG1ldHRyZQ== 14997\nIG11bmljaXA= 14998\nIHdpdGhkcmF3 14999\nIHNwYXQ= 15000\ndW5lcw== 15001\nIGFjY2Vzc2liaWxpdHk= 15002\n5oiR5Lus 15003\nIGFwYXJl 15004\nIHByb3NwZWN0 15005\nINC90LDQtw== 15006\nIGNvcHBlcg== 15007\nIFBSTw== 15008\nz4XPhA== 15009\nIGF0dGFja2luZw== 15010\nIFZpbg== 15011\nIFN0b25l 15012\nIGludmVzdGlnYXRl 15013\nc3R5bGU= 15014\nIM67 15015\n66Gd 15016\n66eI 15017\nIGluc3BlY3Q= 15018\nIGxpdmVy 15019\n0LDQu9C40YHRjA== 15020\nIHNlcmE= 15021\naGFsdGVu 15022\nZW1hbg== 15023\nIG1pbmlzdHJ5 15024\nJyc= 15025\nIGRvdHM= 15026\n44WL44WL44WL44WL 15027\n0YPRgdGC 15028\nIEphaw== 15029\nQUtF 15030\nIGdhcHM= 15031\ndWNrZXI= 15032\nINC40L3RgtC10YDQtdGB 15033\nIEVtaWx5 15034\nIGludGVydmFs 15035\nIHRlbmRlcg== 15036\nIFRlY2hub2xvZ3k= 15037\nZ2FtZQ== 15038\nIHRyaWI= 15039\n2YTYpw== 15040\nIERldmVsb3BtZW50 15041\n2YXYpw== 15042\nIHdyaXN0 15043\nIGZpcmVz 15044\nIHRhcmdldGVk 15045\n7KCQ 15046\nIHNvZA== 15047\n7ZqM 15048\nIG9sZHXEnw== 15049\nIHNlYXNvbnM= 15050\ndmVudGlvbnM= 15051\nINC90LXQs9C+ 15052\nIHNvbWV0aW1l 15053\n0LvQuNCy 15054\nbsOp 15055\nIHTDug== 15056\nIERldXM= 15057\nIGV4ZWN1dGlvbg== 15058\nw6Fw 15059\nIENoYW5nZQ== 15060\nIEluZGVlZA== 15061\nIHJlZ3VsYXRpb24= 15062\nIEh1bmc= 15063\nw6lpcw== 15064\nIHdpc2hlcw== 15065\nIGpheno= 15066\nIHN0cnVjdHVyYWw= 15067\nIGJsb3dpbmc= 15068\nIGJ5xIc= 15069\nIHRoZXJtYWw= 15070\ncGhhbnQ= 15071\n0YDRg9C3 15072\n0LDQvdGC 15073\nIFB1bGw= 15074\nIGNvbmZ1c2lvbg== 15075\n0L3Ri9C80Lg= 15076\nIHNjZW5hcmlvcw== 15077\n7KCB7Jy866Gc 15078\nINC00LXRgg== 15079\nIHRhdHRvbw== 15080\nIGF1dHJl 15081\nIGhlYXRpbmc= 15082\nIHRyZWF0aW5n 15083\nINC/0L7QvdC40Lw= 15084\nIGV4Y2x1cw== 15085\nIExPTA== 15086\nd2Vhcg== 15087\nYWdsZQ== 15088\nIHp1csO8Y2s= 15089\nIHJhdGlvbmFs 15090\nc3U= 15091\nIGRldGVy 15092\nIE5hdGl2ZQ== 15093\n4K6V4K6z 15094\nYWNoZWQ= 15095\nIOOD 15096\nIEVudG9uY2Vz 15097\nIGhvcmE= 15098\n7J207JeQ7JqU 15099\nIGxpdGU= 15100\nw6s= 15101\nIHNpeHRo 15102\nINCx0L7Qu9C10LU= 15103\nYWN0b3I= 15104\nIHBzeWNob2xvZ3k= 15105\n55u4 15106\nIGRlbWFuZHM= 15107\nIHBlZXI= 15108\nIG5ld2x5 15109\nIFdXRQ== 15110\nRG9uYWxk 15111\nIEJveA== 15112\nIHBpbmU= 15113\nIGxvYWRpbmc= 15114\nIE5pY28= 15115\nIHPFgg== 15116\nb21tZQ== 15117\nQVJU 15118\nIHJlY3J1aXQ= 15119\nIGJ1Z3M= 15120\nYXJlbnRz 15121\nINC/0YDQvtCx 15122\nIEluc2lkZQ== 15123\naXBwZXI= 15124\nZHJhbWF0aWM= 15125\nIHBsYW5ldHM= 15126\nb3JkZQ== 15127\nIHlvZ2E= 15128\nY2hpbGQ= 15129\nIE1hcmll 15130\nIOOBgg== 15131\nIEJM 15132\nIGZpbG1lZA== 15133\nIHJlZnJlc2g= 15134\nIHRvbWF0b2Vz 15135\nIGZldA== 15136\nUXXDqQ== 15137\nICEh 15138\nIOuCtOs= 15139\ncmluZQ== 15140\nIGludGVyYWN0aXZl 15141\nc2Fs 15142\nYW5uYWg= 15143\ncGV6 15144\n57aT 15145\nIHVuZGVyc3RhbmRz 15146\nIFRva3lv 15147\nIGxpYnJhcmllcw== 15148\nIHJlYWRlcg== 15149\nkZA= 15150\nb3o= 15151\nIEVuZGU= 15152\nIEZsbw== 15153\nIG1pbGQ= 15154\nIHBvZXRyeQ== 15155\nINC20LjQsg== 15156\n5oSb 15157\nIGJlaGF2ZQ== 15158\nIGRvZW4= 15159\nIFN1c2Fu 15160\ncGFnZQ== 15161\ncmFoYW0= 15162\nIGNvbW11bmljYXRpb25z 15163\nIHR1bmluZw== 15164\nIHBhYw== 15165\nIGFueGlvdXM= 15166\nSU8= 15167\nTWFyaw== 15168\nIGhpw6c= 15169\nYm9va3M= 15170\nIHBpc3M= 15171\nIGVuYWJsZWQ= 15172\nYWNoZWxvcg== 15173\nIEZPUg== 15174\nIMOpYw== 15175\nIFRS 15176\naWxzdA== 15177\naGF0 15178\nIOydjA== 15179\nIHR5Y2g= 15180\nIGphcg== 15181\nIGJ1aWxkcw== 15182\nIEFyZ2VudA== 15183\nIGludGVybWVkaQ== 15184\nIGxvdQ== 15185\nIGFyYQ== 15186\nIGFzc2lnbm1lbnQ= 15187\nIGNhYmluZXQ= 15188\nIHJldGlyZW1lbnQ= 15189\n44G7 15190\nIGRpc2FibGVk 15191\ncmljYQ== 15192\nIGF3YXJkcw== 15193\nIGJvb3Rz 15194\nIGFja25vd2xlZA== 15195\nIHRoeQ== 15196\nIOq1rA== 15197\nIHN5bmQ= 15198\n0L3QuNC5 15199\naWx0b24= 15200\nIHByb2Js 15201\nIEZhbA== 15202\nIHZlcmRhZGU= 15203\nIDcwMA== 15204\nIExlYXJuaW5n 15205\nb2N1cw== 15206\nIHBhbGFjZQ== 15207\nTm90 15208\ndGFpbg== 15209\nY20= 15210\nIG1hZ25ldA== 15211\naW5jb2xu 15212\nIGZpZ3VyaW5n 15213\nIEx5bg== 15214\nIEJvc3M= 15215\nIFZP 15216\nIGRpYWdub3Npcw== 15217\nIGVxdWlwcGVk 15218\nd2F0Y2g= 15219\naW5vcw== 15220\nYWRlcnM= 15221\nIHNoZWxm 15222\nIG9yZ2FuaXM= 15223\nIG5vZA== 15224\nIGvEsXo= 15225\ncHBlcnM= 15226\nIHJlc3RvcmU= 15227\nIGFydGlj 15228\nIFZvaWNl 15229\nxLF5b3J1bQ== 15230\n6rKp 15231\nIHNwcmVhZGluZw== 15232\nIGhpcHM= 15233\nIHdhcmQ= 15234\ndXJlYXU= 15235\nIGludGVyc2VjdGlvbg== 15236\nNjY= 15237\nIDM5 15238\n57M= 15239\nIHdhaXRlZA== 15240\n7LQ= 15241\naGhoaA== 15242\nIGR5cw== 15243\nIEVO 15244\nIGJhdGNo 15245\nIGNhZg== 15246\nIG1hcmtlcg== 15247\n5aSn5a625aW9 15248\nb3JhYmxl 15249\nw7NyaWE= 15250\nIHN0ZXBwZWQ= 15251\nIGNlbGVicmF0aW5n 15252\n0LDQvdCw 15253\nIHdvcm4= 15254\nIEZvbA== 15255\nIHBsYQ== 15256\nIGF0dGVtcHRz 15257\nIHR3ZWV0 15258\nIHJ1c3Q= 15259\nZ2VuY2U= 15260\n7Ya1 15261\nIHJldmVs 15262\nIHJlY2VwdA== 15263\nZW5lc3M= 15264\nICgo 15265\n44O844M= 15266\nIeKAiw== 15267\nIOyGkA== 15268\nIGluZmx1ZW5jZWQ= 15269\n0LjQtg== 15270\nINC60L7QvdC10YfQvdC+ 15271\nIGNvbGxlZ2Vz 15272\naW9uaQ== 15273\nIHNhZw== 15274\nQW5u 15275\nb2xhcg== 15276\nIGV4cHJlc3Npb25z 15277\nIHN1aXRz 15278\nIG93bmVyc2hpcA== 15279\nZWxhbmQ= 15280\ncGllY2U= 15281\n5oCO5LmI 15282\nIGRlc3B1w6lz 15283\nIHRlbA== 15284\nIGluc3VsdA== 15285\nIOq1ieyepQ== 15286\nIFNtYWxs 15287\nIEZS 15288\nb2th 15289\nYmVycmllcw== 15290\nIEFudG9u 15291\n0LXQu9GP 15292\n0Y/RgQ== 15293\nIHZhbHZl 15294\nYWN0cw== 15295\nIHdvb2Rz 15296\n4K6j 15297\nIGN1bHRpdg== 15298\nIGbDoQ== 15299\n44Go44GE44GG 15300\nIGNoZWVycw== 15301\nIGFzc3VtcHRpb24= 15302\nIGZpdG5lc3M= 15303\nw61jdWw= 15304\nIHBvZHI= 15305\nIHdlaXQ= 15306\nIEhpbmQ= 15307\nIGRpZ24= 15308\nINC30L0= 15309\nIHNxdWFk 15310\nIGRlc3Rybw== 15311\nY2VyZQ== 15312\nc2hpcnQ= 15313\naW1tdA== 15314\nZW5nZXJz 15315\nIHPDpA== 15316\na8WCYWQ= 15317\nIMiZ 15318\nIG9jY2Fz 15319\nIOykhA== 15320\nIHByb2Nlc3Nvcg== 15321\nIERN 15322\nIERhZGR5 15323\nIHNvb25lcg== 15324\nIHN0cmFpZ2h0Zm9yd2FyZA== 15325\nIGRlcGFydG1lbnRz 15326\nIENocm9tZQ== 15327\nIHdvcmtwbGFjZQ== 15328\nIFB5dGhvbg== 15329\nIG1lbmc= 15330\nIERBTg== 15331\nIEljZQ== 15332\nIOuIiA== 15333\nIEdp 15334\nIGhpcmluZw== 15335\nIGxhbmRlZA== 15336\nIGRlbW9jcmF0aWM= 15337\naWVkeg== 15338\n44GY44KD 15339\nIHNldg== 15340\naWNpYQ== 15341\nIGVzcGVjaWFs 15342\nIE5vdXM= 15343\nIGjDpHQ= 15344\nIGJvdQ== 15345\ncGVydA== 15346\naWVzeg== 15347\n5ZGA 15348\nIHZpbA== 15349\nxZtsaQ== 15350\nIMOubg== 15351\nIGxvc3Nlcw== 15352\n6ZW3 15353\nIHRvYXN0 15354\nIHJlYWxt 15355\nIEF1c3Rpbg== 15356\nIEluZm9ybWF0aW9u 15357\nIHJlc3VtZQ== 15358\nIGNoYXNl 15359\nIHNhbGFyeQ== 15360\nIOu2hA== 15361\n0LvQuNGH 15362\nINGB0LvQtdC0 15363\nIEZ1cnRoZXI= 15364\nIGNhcmluZw== 15365\nIHZpZw== 15366\nIHZhbG9y 15367\n6L+Z5Liq 15368\nINGH0LA= 15369\nIGFuYWx5dGljcw== 15370\nIGdsb2Jl 15371\nIE1BTg== 15372\nIG5lbA== 15373\n7J207JW8 15374\nn7w= 15375\nIG95 15376\n7ZWY7IS47JqU 15377\namVu 15378\nIHRyb3VibGVz 15379\nYWhhaGE= 15380\nIGNodXJjaGVz 15381\ndWV0 15382\nIG1lYXN1cmVtZW50cw== 15383\nYmls 15384\n7L0= 15385\naWZ1bGx5 15386\n0LjQvdGD 15387\nIFdpbHNvbg== 15388\nprQ= 15389\nIO2MjA== 15390\nIOywqA== 15391\nIHDDumJsaWM= 15392\nIEplcnVzYWxlbQ== 15393\nIG5haWxz 15394\nIHNwaW5l 15395\nIGhlbW9z 15396\nIHpu 15397\ncXVpcw== 15398\nIExlYmVu 15399\nIHJlZmVyZW5jZXM= 15400\nSVRI 15401\naXBlcg== 15402\nINGB0LXQsdGP 15403\n7IE= 15404\nIFdh 15405\nc3RhdGU= 15406\np50= 15407\n5YWx 15408\nIEdlbmVy 15409\nIGFjdHJlc3M= 15410\nIEVuam95 15411\n4LmD 15412\nINeS 15413\nIGluZmVjdGVk 15414\nIHNoYWtpbmc= 15415\nIG5pY2s= 15416\n4Li4 15417\nIGZvdA== 15418\nIGFjY29tcGxpc2hlZA== 15419\ndWtl 15420\nIHNoZWV0cw== 15421\nIGZlbmNl 15422\nIG51cnNpbmc= 15423\nIGludHJvZHVjaW5n 15424\nIGZlYXQ= 15425\nT25l 15426\nVE8= 15427\nIGNsdWJz 15428\nIEJydWNl 15429\nb25nZQ== 15430\nY2hhbmdl 15431\nIEJhdG1hbg== 15432\n5Y+w 15433\nIE9mZmljZXI= 15434\nIGh5ZHJv 15435\nIHN1cHBsZW1lbnQ= 15436\nIGNlbGE= 15437\nIGxvbmdlc3Q= 15438\nIGNvbXBldGluZw== 15439\nIGNvbmhl 15440\nZ2l2aW5n 15441\nIGJyYWlucw== 15442\nIGxvYW5z 15443\nIHdhZ2U= 15444\nIENsaW50b24= 15445\nIHPEgw== 15446\nYW5lb3Vz 15447\nIGxvcmQ= 15448\n0YDRg9C2 15449\nIHF1aXo= 15450\nIHN0aWZm 15451\nIExHQg== 15452\nc3o= 15453\nTUU= 15454\nbWFyZQ== 15455\ndGhlcmU= 15456\nIG7DpHI= 15457\nIE1hbmQ= 15458\nbGFzdA== 15459\nIGRhZw== 15460\nIGhhbGZ3YXk= 15461\nIEJhbmQ= 15462\nIOuLpOyLnA== 15463\nIEFyZW4= 15464\nIGlsZQ== 15465\nUE4= 15466\nZW50bw== 15467\nIGFsZ3Vt 15468\nIHNvY2Nlcg== 15469\nIGJsb2NrZWQ= 15470\nIEpvbmF0aGFu 15471\nIHNldw== 15472\nIFRlc3RhbWVudA== 15473\nIHZhbGU= 15474\nIGJlaGF2aQ== 15475\n5aeL 15476\nIGNvbm5h 15477\nSUNI 15478\nIGF1ZGllbmNlcw== 15479\nbWw= 15480\nYW1tYWQ= 15481\nIOyCtOw= 15482\nSUdI 15483\nIHJhY2Vz 15484\nZW1lZA== 15485\nIG3hu5l0 15486\nw68= 15487\nIG92ZXJz 15488\nIGRlY2xhcmVk 15489\nIHNhbmE= 15490\nIFVuYQ== 15491\nINGA0LU= 15492\ndWNrcw== 15493\nIHBhaXJz 15494\nIGFuZ2U= 15495\nTmU= 15496\nIHVwcw== 15497\nYXZ5 15498\nw7hy 15499\ncmVlaw== 15500\nIGJlaGF2aW9ycw== 15501\nIHJlZmxlY3RlZA== 15502\nIHByaW9yaXRpZXM= 15503\nIGNvbmR1 15504\nIHJldHJlYXQ= 15505\nIGV4cGVuc2Vz 15506\nIOu0kA== 15507\nIHRyaXBsZQ== 15508\nIOq1ieyepe2eiA== 15509\nw6RsdA== 15510\nIGluZGlnZW5vdXM= 15511\nIG1pbmluZw== 15512\nIGFjY2VwdGFibGU= 15513\nIHJ1aW4= 15514\nQ0E= 15515\ndWluZQ== 15516\nIHBpcGVsaW5l 15517\nY3RpYw== 15518\nw6p0 15519\nINCy0YHQtdCz0L4= 15520\nIGJvdW4= 15521\nIERpZ2l0YWw= 15522\nIEJvb20= 15523\n0YbQtQ== 15524\nINC70YPRhw== 15525\nIGFzYw== 15526\njIDroZw= 15527\nIEdvb2RieWU= 15528\nIHJlbmRlcg== 15529\nZW5leg== 15530\nYXJyZQ== 15531\nIFRIQVQ= 15532\nYm91cg== 15533\naWNpw7Nu 15534\n44Kt 15535\nRXZlcnk= 15536\nIHdpcmVz 15537\nIFBhcmxpYW1lbnQ= 15538\nbnVuZw== 15539\nYXRldXI= 15540\nIFNhdmU= 15541\nIFBoeXM= 15542\nIGFtb3I= 15543\nIEV2ZQ== 15544\nIGZyaWdodA== 15545\nIGdhbW1h 15546\nIG1pY3Jvcw== 15547\nbWl0dA== 15548\nIENvZGU= 15549\nIEJleQ== 15550\ncGxlZA== 15551\nINC40YHQv9C+0LvRjNC3 15552\n55c= 15553\n7IOJ 15554\n5aW5 15555\nIG1vbmV0 15556\nIEphaHJl 15557\nIGx1eHVyeQ== 15558\nIGRlYWY= 15559\nIGJldHJheQ== 15560\nIOqysA== 15561\n0LjQutC4 15562\nIGRlZmVhdGVk 15563\nIHVuZGVydA== 15564\nIHdlZw== 15565\nIGNvb2xlcg== 15566\n44GV44KT 15567\naWFtaQ== 15568\n6YKE5pyJ 15569\nIEplc3NpY2E= 15570\nIEpveQ== 15571\nIHNvcGhpc3RpYw== 15572\n0LXQvdC40Lg= 15573\n8J2Y 15574\nIGNoaWxp 15575\nIFR5cGU= 15576\nIHByb3RlaW5z 15577\nIHByZXNlbnRpbmc= 15578\nYWxpYQ== 15579\n7Jq4 15580\nIE1ham9y 15581\nIG1vbGVjdWxl 15582\ndW1lcg== 15583\nIGNvbGxhcHNl 15584\nIEFueXdheXM= 15585\nIE1vdW50YWlu 15586\nYW50ZWQ= 15587\n44CQ 15588\nINCy0LjQtNC10L4= 15589\n5rC0 15590\nQXVk 15591\nIGNvbnF1 15592\nIHZvbGw= 15593\nIGtuaXQ= 15594\nIG1lbWJy 15595\nIE1hcmtldA== 15596\nIGRhcmk= 15597\nIGNhbGN1bGF0ZWQ= 15598\n0LPQuA== 15599\nIHNocmltcA== 15600\nIE11 15601\nINC/0YDQvtGC 15602\nIOyYgeyDgQ== 15603\nIHByb2R1Y3Rpdml0eQ== 15604\nIGNvZ25pdGl2ZQ== 15605\nIEhlYg== 15606\naWN0aW9ucw== 15607\n6rK9 15608\nIGNyw6k= 15609\nZsO2cg== 15610\nIHByYXlpbmc= 15611\nYXNoaQ== 15612\nIFRpaw== 15613\nw7Ny 15614\nd2Vu 15615\n0YzRjg== 15616\naXhv 15617\nICgi 15618\nINGC0LXQuw== 15619\nIOyWtOuWpA== 15620\nINC/0LXRgNC10LQ= 15621\nIERyaXZl 15622\n44CR 15623\nIEVxdQ== 15624\nIGVxdWlsaWJyaXVt 15625\nIGRlc2NyaWJlcw== 15626\n0L3QtdC1 15627\nNDI= 15628\nIEN1cnJlbnQ= 15629\neXk= 15630\nIGFic29yYg== 15631\nIHNvbGRpZXI= 15632\nZGVycw== 15633\nIHRlc3RpbW9ueQ== 15634\nIGRlY2xpbmU= 15635\nnOuhnA== 15636\nZ2FnZQ== 15637\nIGluc3BpcmU= 15638\nbGFwcGluZw== 15639\nIHNwaW5uaW5n 15640\nIHNsYXZlcnk= 15641\nIGZhY2lhbA== 15642\nIHRyYWRpdGlvbnM= 15643\nw6FyaW9z 15644\nIEhvc3BpdGFs 15645\nIG5lc3Q= 15646\nIOuIhA== 15647\nIHRvaQ== 15648\nIGZlYXJz 15649\n7IWo 15650\nIE11aA== 15651\nIGdyYWR1YXRpb24= 15652\nIGltcGFjdGVk 15653\nIGF1bnQ= 15654\nIExldHM= 15655\nIGFsdW1pbnVt 15656\nIGRvbWluYW50 15657\nIERhdmlz 15658\nIE5hdnk= 15659\nIGNvbXB0 15660\nb3BsZXM= 15661\nIGVzdGF2YQ== 15662\n6KU= 15663\nIHNjYWw= 15664\nIHByZXNlcnZl 15665\nIE9wcA== 15666\nIHByYWN0aWNhbGx5 15667\nIG1hZ25pdHVkZQ== 15668\nIGZpdHRpbmc= 15669\nIGNvb3JkaW5hdGU= 15670\nIGZ1cm5pdHVyZQ== 15671\nIEZhbWls 15672\nIGV4cGxvc2lvbg== 15673\nIGRvY3VtZW50YXJ5 15674\nIFNjcmlwdA== 15675\nIHBvcnRyYXk= 15676\nbWF0 15677\nIHNjaGVkdWxlZA== 15678\nIGR5bmFtaWNz 15679\ncGh5 15680\nYWt5 15681\nIFVJ 15682\nQ2hl 15683\nIGNvbnRpbnVvdXNseQ== 15684\nIFByb3Y= 15685\n5bCR 15686\n0YPQtw== 15687\ncmFo 15688\nIGdlcm5l 15689\ncHJvb2Y= 15690\nIHNlY3JldGFyeQ== 15691\nIFBhdHJlb24= 15692\nc2NyZWFt 15693\nIEtpZHM= 15694\n4buTaQ== 15695\nIGtn 15696\nIHVuY2VydGFpbnR5 15697\nINC60LDQttC0 15698\nIG1pdGln 15699\nIHJlYWRz 15700\n5bey 15701\nIFJ1 15702\nIHByaWVzdA== 15703\nINC90LXQtA== 15704\nIGxpbWl0YXRpb25z 15705\nIGZsb2F0 15706\nNjAw 15707\nIFRveQ== 15708\nIEppbW15 15709\nIG9mZmVuc2l2ZQ== 15710\nZW5p 15711\nIFhp 15712\nIGV5ZWJy 15713\nIFR1cms= 15714\nIGFjY2lkZW50YWxseQ== 15715\nIG9obmU= 15716\nIFNhdWQ= 15717\nOTU= 15718\nIER1dGNo 15719\n0LDQvdGB 15720\nIFNlYXR0bGU= 15721\nIOuTsQ== 15722\nY2hlY2s= 15723\na8SZ 15724\nIGNvbnRyaWJ1dGlvbnM= 15725\nIGJlc2lkZQ== 15726\nIHF1aW5kaQ== 15727\nIGZsZXc= 15728\n5pe2 15729\n2LDYpw== 15730\nIExP 15731\nIHdhaXN0 15732\nIEVW 15733\nIGhvbGlkYXlz 15734\nam9u 15735\nIG1pc3VuZGVy 15736\n0Y/QvQ== 15737\nIGJvdXQ= 15738\nIGRpbWlu 15739\n4bq9 15740\nw7Ns 15741\nIEdyYWNl 15742\nIGlucHV0cw== 15743\nIGRlbnk= 15744\nIGZvcm1pbmc= 15745\nIEJpbGQ= 15746\nIGFkZXF1 15747\nIGZvbGs= 15748\nIHJlamVjdGVk 15749\nc2VtYg== 15750\nIGZydXN0cmF0ZWQ= 15751\nb3Blbg== 15752\nIEJldHRlcg== 15753\naWxvbg== 15754\nIHRvd2Vs 15755\nIGRpZmZlcmVudGlhbA== 15756\nIHNhY3JlZA== 15757\nIHNhaWw= 15758\n6YeM 15759\nZW50aW1lcw== 15760\nIGdlbnRsZW1hbg== 15761\nIGljb25pYw== 15762\nIGNvbXBhcmluZw== 15763\nIHNhZ3Q= 15764\nIHRleHRz 15765\nIGdyYW5kbWE= 15766\nIHJvbGxz 15767\nIGNvbnRlbnRz 15768\n5LiN5aW9 15769\n0L7RgdGB 15770\nIHN1c3BlbnNpb24= 15771\ncm9pdA== 15772\nprw= 15773\nIGFzc2V6 15774\nIGRvcnQ= 15775\nIE1hdGg= 15776\nIFZpY3Rvcg== 15777\nIEphdmFTY3JpcHQ= 15778\n5LiN5bCN 15779\nIGVuaGFu 15780\nxZk= 15781\nIEJ1c2g= 15782\nIHByb21vdGlvbg== 15783\nIGtpbg== 15784\nIG1vbnN0ZXJz 15785\nIENvbG9yYWRv 15786\nIM6y 15787\n7ZW07JqU 15788\n5q2j 15789\naWZmZXJlbnQ= 15790\nIG5ha2Vk 15791\nIHByb2Q= 15792\nZXRpY3M= 15793\nIFdvbWFu 15794\nIHRyZWF0bWVudHM= 15795\nIGVzdG95 15796\ndsOp 15797\nIGxpZnRpbmc= 15798\nIHlhcHQ= 15799\nIFJvYmVy 15800\nIOy5nA== 15801\nIHN1YnN0aXR1dGU= 15802\nYWt1 15803\ncmlkZ2U= 15804\nIOqxsOs= 15805\nIHJlc3BvbmRlZA== 15806\nIGLDqQ== 15807\nIEVuZ2luZWVy 15808\nIHRyYW5zZmVycmVk 15809\n67I= 15810\nIGhhYmVy 15811\nb29w 15812\nIFdF 15813\nIHZlc3Q= 15814\nIGZvcnR5 15815\nIERT 15816\nIDIwMDQ= 15817\nIGNvYWNoaW5n 15818\nbm9t 15819\nIEJhYg== 15820\nIG5vc3Nh 15821\nIEpha2U= 15822\nIGd5 15823\nIGRlbGVn 15824\nIOyeoA== 15825\nINC60YDQsNGB 15826\nIHN0YW5kcG9pbnQ= 15827\nIGRpc2Fk 15828\nIGFydHdvcms= 15829\nQWQ= 15830\naWxsbw== 15831\nIMSRxrDhu6Nj 15832\nIFByb20= 15833\nIExpYg== 15834\nIGNyaXRpY2lzbQ== 15835\nIGNvbnRhY3Rz 15836\n0YDQsNC8 15837\nIGFjaGlldmVtZW50 15838\n0JTQsA== 15839\nIGRpc3NvbA== 15840\nIFZlZ2Fz 15841\nIHN0cmVhbXM= 15842\nIEtlbnQ= 15843\nINi52YTZiQ== 15844\nIHJhZGl1cw== 15845\nIHN1Y2tz 15846\nIEFjaA== 15847\nIGZp 15848\nb3VzdA== 15849\nINC70Y7QtNC4 15850\nIHBhbGV0dGU= 15851\nIEhheg== 15852\nIEFudGhvbnk= 15853\nIHRlbWE= 15854\nIENvcw== 15855\nIHNhZmVy 15856\nzrHPgg== 15857\nIGNvbnRyYWQ= 15858\nIG1haW9y 15859\nIGluZmxhdGlvbg== 15860\nIFNpbHZlcg== 15861\nIGF0dGVuZGluZw== 15862\n7ZWc7YWM 15863\nYXJ0bw== 15864\nIGFwcGxhdWRpbmc= 15865\nIGNvbXB1dGluZw== 15866\nIEhhdA== 15867\n5rs= 15868\na25vdw== 15869\nbWFrZXJz 15870\nIGNvbm9j 15871\nIGVkdWNhdGVk 15872\nIG1vZGlmaWVk 15873\nIGluY2x1c2lvbg== 15874\nbWVudGFs 15875\nnpA= 15876\naXNpYQ== 15877\nIM+Azr/PhQ== 15878\nIGF1bg== 15879\nIElyZWxhbmQ= 15880\nIGvDtg== 15881\nIGNvbXBsaWFuY2U= 15882\nIGluc3BpcmluZw== 15883\n0LjRgtC10LvRjNC90L4= 15884\nIGRpc3Bvcw== 15885\n7LCo 15886\nIHdpcA== 15887\ncmljYWw= 15888\ncmF3ZA== 15889\nIHRyZXM= 15890\nIG1vYmls 15891\nb2x1dGlvbnM= 15892\nQk8= 15893\nIGJvdW5jZQ== 15894\nIGFzc3VtZWQ= 15895\nIE1lZGljYWw= 15896\nIGZpc2NhbA== 15897\nIG5nxrDhu51p 15898\naXRpb25hbGx5 15899\nIHN0b2xlbg== 15900\nIEJN 15901\nIG1lY2hhbmlzbXM= 15902\nzrXOrw== 15903\nIHF1YWxpZmllZA== 15904\nIOyekOs= 15905\ndWdodGVycw== 15906\nIEhJVg== 15907\nIExvdHM= 15908\nIHNlcnZlcnM= 15909\nIGNhcnI= 15910\nIFRvZ2V0aGVy 15911\nIGF0dHJhY3RlZA== 15912\nIGty 15913\n5oiR5piv 15914\ndGh1cg== 15915\naW5pbg== 15916\nIEhhbGY= 15917\nyJs= 15918\nIFBhcA== 15919\nIHJlbWluZGVk 15920\nQUxM 15921\nIGhlbG1ldA== 15922\nIGJvdHRsZXM= 15923\nIHByb2Zlc3NvcnM= 15924\nIHNlaW5l 15925\nxYLEhQ== 15926\n44OP 15927\nIOqxsOyVvA== 15928\nINei15w= 15929\nZnVu 15930\nIEJpcmQ= 15931\nIGZpZ2h0ZXI= 15932\nIOuUsOs= 15933\nIFRvb2w= 15934\nIHRpbg== 15935\naW5vaXM= 15936\n67aE 15937\n15nXnw== 15938\nIENBUg== 15939\n5ZCN 15940\naXJzdHk= 15941\nIG91dGRvb3I= 15942\nIE5T 15943\n44WO 15944\nZmZlbg== 15945\nIGx1ZA== 15946\nSGVsbG8= 15947\nIHJvbGxlcg== 15948\naWVsZQ== 15949\nIFBvbGFuZA== 15950\nIGFwYQ== 15951\nZXhw 15952\nIGNlcnRpZmljYXRl 15953\nIFRvd24= 15954\n0LDRjtGC0YHRjw== 15955\naWxkZQ== 15956\nIGRldGVybWlu 15957\nUFI= 15958\nIGZyZWV6ZQ== 15959\nIG1haW5zdHJlYW0= 15960\nIG9iamVjdGl2ZXM= 15961\nYmxv 15962\nIHRha2ll 15963\n5ZOI5ZOI 15964\nIOuwlOuhnA== 15965\nZWxldA== 15966\nIElW 15967\nIEZhc3Q= 15968\nIGRlcmU= 15969\nZW1w 15970\nIERyYQ== 15971\nIOyeiOyXiA== 15972\nIGRpc2NyaW1pbmF0aW9u 15973\nIM61zq/Ovc6xzrk= 15974\nbmVjZXNz 15975\n5q4= 15976\nxLHEn8Sx 15977\nIHBvc3Rpbmc= 15978\nd2nFm2NpZQ== 15979\nIGx1Yg== 15980\nIG9saXZl 15981\nIHJpbQ== 15982\nIG1vZGVsaW5n 15983\nIGHDsW8= 15984\nIFBha2lzdGFu 15985\nIG92ZXJs 15986\nIGluZmxhbQ== 15987\nTkU= 15988\n7JeQ6rKM 15989\nIGF0dGVuZGVk 15990\nIGRlYWx0 15991\nIEFsdA== 15992\nIExpbmNvbG4= 15993\nIGF3YWtl 15994\nIGZpbHRlcnM= 15995\nIFdpdGhpbg== 15996\nY3p5d2nFm2NpZQ== 15997\nIHPDuw== 15998\nIEpvaG5ueQ== 15999\nIGludGVncml0eQ== 16000\nIGlzb2xhdGlvbg== 16001\nIEVhc3k= 16002\nINC/0YDQuNC9 16003\nIEFsaWNl 16004\nIHNtaWxpbmc= 16005\nZW5peA== 16006\nLC4uLg== 16007\nzrY= 16008\nIGJlZ3Vu 16009\nIGpld2Vs 16010\nIGNvbnZlbnRpb25hbA== 16011\nIHN0YXRpc3Q= 16012\nIGhhbmRlZA== 16013\nIGlycmU= 16014\nIHByb2hpYg== 16015\nIHNhdGVsbGl0ZQ== 16016\n6aaZ 16017\nIEluZHVzdA== 16018\nIHRyYWdlZA== 16019\nIHRyYXZh 16020\nIGlobQ== 16021\nIGNydWVs 16022\nIEFnb3Jh 16023\nIERvYw== 16024\nIHpvbmVz 16025\nIG1hbGw= 16026\nIHRyYXk= 16027\n15XXoA== 16028\nIGlycml0 16029\nIGthbnM= 16030\nIEJlYXQ= 16031\ndWRnZQ== 16032\naWVsbGU= 16033\nIHRydXN0ZWQ= 16034\nIGJpa2Vz 16035\nINGD0L8= 16036\nIE1lbWJlcg== 16037\nd2ljaw== 16038\nIGNyZWF0b3Jz 16039\nIGhlcml0YWdl 16040\naW5kaXN0aW5jdA== 16041\nIHJlc3Vy 16042\nZW5uZW4= 16043\nQ29tZQ== 16044\nIGZpcmluZw== 16045\nIEJ1ZW5v 16046\nINCi0L4= 16047\naWthbg== 16048\nZXR0ZXM= 16049\nIGtlcw== 16050\nIHRyaXBz 16051\nIGRpdm9yY2U= 16052\nIEts 16053\nIGNvbnNvbA== 16054\na2VlcA== 16055\n6riw6rCA 16056\nIFJlcG9ydA== 16057\nIGhvc3Rpbmc= 16058\nIGRpYW1vbmQ= 16059\nIGNvbXBsaWM= 16060\nIGhlbGljb3A= 16061\nIGRlcHVpcw== 16062\nZHM= 16063\nIENoYW4= 16064\n0Y/Quw== 16065\nIHNjaXNzb3Jz 16066\naWxhdGlvbg== 16067\nIHByb3BvcnRpb24= 16068\nRVJF 16069\nINmI2KfZhA== 16070\naW50YQ== 16071\nIG11Y2hhcw== 16072\ndWF0aW9u 16073\naXRpcw== 16074\n5oqK 16075\n0Y/RiQ== 16076\nIG5paW4= 16077\nIGVtcGhhc2l6ZQ== 16078\ndWVsYQ== 16079\nIHByb2R1Y2Vycw== 16080\nIHJ6ZQ== 16081\nw6RuZGVy 16082\nRVRI 16083\n5ro= 16084\nIGNvbnN0aXR1 16085\n5Zu9 16086\nIHBlcmZvcm1hbmNlcw== 16087\naXN0bGU= 16088\nZ292 16089\nIExpdGVy 16090\nIGluY29ycG9yYXRl 16091\nIGVkdWNhdGU= 16092\nIE5pbg== 16093\n7Kq9 16094\n2YfZhQ== 16095\nZWxlcmF0aW9u 16096\n15XXkQ== 16097\nIHlhxZ8= 16098\nb3JvdXM= 16099\nIENhcw== 16100\nIGdyYW50cw== 16101\n64ql 16102\nYW1lbA== 16103\nIOq3uOugh+qyjA== 16104\nIEVzdGU= 16105\n0YXQvtC00LjRgg== 16106\nINC/0L7RgdC70LU= 16107\nIGdlbnQ= 16108\nIGZvY3VzZXM= 16109\nYWxpdGllcw== 16110\nIFJo 16111\n67O0 16112\n5rCR 16113\nIERhbmNl 16114\ncnI= 16115\nIGFtZXI= 16116\nIHV0aWxpemU= 16117\nIGzDrQ== 16118\nIEFtb25n 16119\nIHByZWduYW5jeQ== 16120\nIGxvb3Bz 16121\n0LDQu9C+0YHRjA== 16122\nIE1vaA== 16123\nIGNhdGNoaW5n 16124\nIGdsb2I= 16125\nIGFqdWQ= 16126\nIFs/ 16127\nIEFuYWw= 16128\nbG9va2luZw== 16129\nIHN1cmZhY2Vz 16130\nIHByb2dyZXNzaXZl 16131\nIHZpcmFs 16132\nMDg= 16133\nzr4= 16134\nS0E= 16135\nIMW8eQ== 16136\nIHBpY2tz 16137\nYW5ub24= 16138\nIGJ1bGs= 16139\nIFJvc3M= 16140\nIGRlc2NyaWJpbmc= 16141\nIEdlbA== 16142\nIGxvY2FsbHk= 16143\nIGVuZGxlc3M= 16144\nIG1hc3NhZ2U= 16145\nIGNsZWFuZWQ= 16146\nIHRyYXZlbGVk 16147\n0LXQvdGL 16148\nIHNlbnRpbWVudA== 16149\naWdtYQ== 16150\nIE5hcw== 16151\nIGNoZW1pY2Fscw== 16152\nIHJpZ2h0ZW91cw== 16153\nIE1hZ2lj 16154\nIHJlbGF0ZXM= 16155\nIHRydWNrcw== 16156\nIDE5NjA= 16157\n5Yil 16158\nIGFwcGV0 16159\nIHNuYWNrcw== 16160\nIFN1bW1lcg== 16161\nIHnDvHo= 16162\nIHByaXM= 16163\nIE1leGljYW4= 16164\nIHRyYW5zcGFyZW4= 16165\nIG1pbm9yaXR5 16166\nIHZlcnRl 16167\nIGxhc3Nlbg== 16168\nNDY= 16169\n0LvQtdC6 16170\nw6lw 16171\nINGE0LjQu9GM 16172\nIGl5aQ== 16173\nIHNwYW4= 16174\n7ZWY7KeA 16175\nIGluZGljYXRlZA== 16176\ncXVhcg== 16177\nIHNjaG9sYXJzaGlw 16178\nIExHQlQ= 16179\nIGhpc3RvcmljYWxseQ== 16180\nw7PFgg== 16181\nIG1pbmlzdA== 16182\nIHBlbmV0 16183\nIFJhcA== 16184\nIGNvbnNlcnZhdGlvbg== 16185\n55u0 16186\nIEhvbmV5 16187\nIEJlaQ== 16188\naWRlbA== 16189\nIHJlc3BvbnNpYmlsaXRpZXM= 16190\nIG1lc3N5 16191\nIEV4Y2VwdA== 16192\nT1JF 16193\nIGluaXRpYXRpdmVz 16194\nIGp1bmlvcg== 16195\nIGRlc2lnbmVycw== 16196\nIGV4cGxvcmF0aW9u 16197\nIHNwb25zb3I= 16198\nIG1vYmlsaXR5 16199\nIGludGVn 16200\nbGFuZG8= 16201\nIGJhcms= 16202\nIGluZGljYXRlcw== 16203\n4LY= 16204\nIGVtcGxveWVy 16205\n5a6J 16206\nIGNvdXNpbg== 16207\nIGJvaWxpbmc= 16208\nIGNocm9t 16209\nIMOnYWw= 16210\nIHBlcnBldA== 16211\nIGNvbnRhaW5lZA== 16212\nIHBhcmtz 16213\n0Ks= 16214\nIEVuZ2luZWVyaW5n 16215\nUGxlYXNl 16216\nIFN0YXJ0aW5n 16217\naGVybw== 16218\nIGxhd3llcnM= 16219\n6KW/ 16220\nIHpk 16221\nIGZyYW5jaGlzZQ== 16222\ncmFnZQ== 16223\nIGludHVpdA== 16224\nIEdM 16225\ncmVhY2g= 16226\nIEVsbGU= 16227\nIG5oxrA= 16228\nIE5vcmQ= 16229\nIGJlYW4= 16230\nMDc= 16231\nIHBsZWFzYW50 16232\n5b2T 16233\ndmlyb24= 16234\nIGdyYWRpZW50 16235\nenVz 16236\nIEVN 16237\nIGVzc2F5 16238\n7JeQ7JqU 16239\n4bq/bg== 16240\nbnU= 16241\n4bur 16242\nIMOJcw== 16243\nIGRlbm9taW4= 16244\nIEdpcmxz 16245\nIHBlcnNvbm5lcw== 16246\nINin2YTYow== 16247\nYmlsZA== 16248\nIFN0YXQ= 16249\nIGNvbXBsaW1lbnQ= 16250\nIEthdGU= 16251\nIG9wdGltYWw= 16252\nIGhpZA== 16253\n2K/Zig== 16254\nIHF1aWNrZXI= 16255\nd2FsbA== 16256\nRW4= 16257\nSU5F 16258\nPz8/ 16259\n7LK0 16260\nIEFjdGlvbg== 16261\n5Z8= 16262\nIHBlbmFsdHk= 16263\nIEtheg== 16264\nJz8= 16265\nIGNyaWVk 16266\nIGNhbnZhcw== 16267\nZnRl 16268\nIGV4Y2x1ZA== 16269\nuOuhnA== 16270\nIGVtcGhhc2lz 16271\nIGVuenk= 16272\nIEhvdQ== 16273\nIG92ZXJzZWFz 16274\nw61hbW9z 16275\n5bir 16276\nw7ZnbGljaA== 16277\nIGhlYWRwaG9uZXM= 16278\nY24= 16279\nIEFnZQ== 16280\nIGFrYW4= 16281\nIGNoYXJhY3RlcmlzdGlj 16282\n7ZWY66m0 16283\nZ2V0cw== 16284\nIOu2iA== 16285\nIHJpdmFs 16286\nIGJvcmRlcnM= 16287\nZW1lbnRl 16288\nZW3DoXM= 16289\nIHlvbA== 16290\nIGNvbXBl 16291\nZW5kZXJz 16292\nxLFuZGFu 16293\nIG3DtmdsaWNo 16294\nIGJ1YmJsZXM= 16295\nbmF0dXJhbA== 16296\nIGFybWVk 16297\nIGVsYWJvcg== 16298\nIOydtOuyiA== 16299\nIHdhc2hlZA== 16300\nzr/Phc68zrU= 16301\n6KuL 16302\nIGZsYXZvcnM= 16303\nIGV4aXN0ZQ== 16304\nIHByZXN0 16305\nIFRoZW1h 16306\n0L7Qv9GA0L7RgQ== 16307\nZXJvbg== 16308\nVUU= 16309\nZXJp 16310\nIGNvbmNlcg== 16311\nIGFpeMOy 16312\n5YWp 16313\nIHByb3RlY3RpdmU= 16314\nINC30L3QsNGO 16315\nIOuCoA== 16316\nIElJSQ== 16317\nIG1lZXI= 16318\nIFNob3A= 16319\nbGxp 16320\nIE9yZGVy 16321\nIE1Z 16322\nIEdob3N0 16323\n44KC44GG 16324\nYWRlbA== 16325\nIHN0b2xl 16326\nIHJlbGVhc2luZw== 16327\nIENvbW1lbnQ= 16328\nIHRyYWlucw== 16329\n66qF 16330\nIHdpc3Nlbg== 16331\nZW5zZWQ= 16332\nIGRlc2NlbmQ= 16333\nIGZpZXI= 16334\nIHJhZGk= 16335\nIHBlcnN1 16336\n56I= 16337\nINC80L0= 16338\nIERlc3Q= 16339\nIHdvcnJpZXM= 16340\naXRldA== 16341\nYmFz 16342\nIHN0YWI= 16343\nbmFtZQ== 16344\nb3JpYw== 16345\nIENsb3Nl 16346\nIGFsdW1uaQ== 16347\nIFNlbGY= 16348\nZmZl 16349\naXRhdGluZw== 16350\nYXRoZXJpbmU= 16351\nIFJpZ2h0cw== 16352\nIGVsbG9z 16353\nIHdhcnJhbnQ= 16354\nIG5lcnZl 16355\nIHZlZ2V0YWJsZQ== 16356\nIFRlaWw= 16357\nIOqwmeydtA== 16358\nUlk= 16359\nIHN1c3RhaW5hYmlsaXR5 16360\nIHN0ZWh0 16361\nIGJyaWQ= 16362\nYWRhxZ8= 16363\nIHR2 16364\nIGR1cmF0aW9u 16365\nIHBlc3NvYQ== 16366\nIG1ldHJpY3M= 16367\nIGFkYW0= 16368\nY2Fz 16369\n0LDRgNC4 16370\nIGV2aWRlbnQ= 16371\nIGRpc3BsYXllZA== 16372\n2KfYpg== 16373\nIHJlY2s= 16374\nIEJ1ZGRoYQ== 16375\nIGRlbGU= 16376\nIERpZWdv 16377\nb3NwaA== 16378\nIGJsYQ== 16379\nIE1paw== 16380\ndWxhdG9y 16381\nIDIwMDE= 16382\nIHByb21vdGluZw== 16383\neWNo 16384\nIEVY 16385\nIGxhc3RseQ== 16386\nIG91dGxpbmU= 16387\nIHNwaXJpdHM= 16388\nIHZldXg= 16389\nIHN1YnRyYWN0 16390\nIMWfaW1kaQ== 16391\nIHBpbnM= 16392\nIGJ1cmdlcg== 16393\nIG1vbHRv 16394\nIGhhYsOtYQ== 16395\nIOuwmA== 16396\naWd1 16397\nZXJzdA== 16398\nIG5lbg== 16399\nIGJhY29u 16400\naXRpb3Vz 16401\nIGNhcnJpZXM= 16402\nIHByb21pc2Vz 16403\nbmRl 16404\nIExlZnQ= 16405\nIExpbQ== 16406\n5qM= 16407\nIDQ0 16408\nIGNhcmVlcnM= 16409\nIOyjvOs= 16410\nIHNwZWVkcw== 16411\ncXXDqQ== 16412\nbWFk 16413\nbWFya2V0 16414\naXNtZQ== 16415\nIDIwMDM= 16416\nIHJlY2Vzcw== 16417\nIEpVRA== 16418\nIHJhY2lzdA== 16419\nIFNjaGw= 16420\nIHBhcmxlcg== 16421\nIG90cm9z 16422\naXNoZXM= 16423\nIGNvbnZlcnRlZA== 16424\nYWFhYQ== 16425\n0LDQvdC40Lg= 16426\nIEFyaw== 16427\nIENoYW5jZQ== 16428\nIGVsZW1lbnRhcnk= 16429\nzrXOvQ== 16430\naW5rcw== 16431\nSW50ZXJ2aWV3ZXI= 16432\nIGZyZWVseQ== 16433\nYWxhaA== 16434\nIOuLpOuluA== 16435\nIHJlcXVlc3RlZA== 16436\nIHRvcnF1ZQ== 16437\nbm/Fm2Np 16438\nb3VyZWQ= 16439\nIFN0YWZm 16440\nIHN0YWlu 16441\nIEFsYW4= 16442\nIHZlcmU= 16443\nIFdpbnRlcg== 16444\nIGRlZmVjdA== 16445\naWVkeQ== 16446\nIGJlYXRz 16447\nIGjDoQ== 16448\ndW1u 16449\nb29ucw== 16450\naXR1ZGVz 16451\nIHNlaXQ= 16452\nb2x5 16453\nIHJlc2Vydg== 16454\nIGV4dHI= 16455\nIHBoeXNpY2lhbg== 16456\ndmlzb3I= 16457\nIGhhbmRmdWw= 16458\nIE5hdGlvbnM= 16459\nIOyii+ydgA== 16460\ndWNjZXNz 16461\nIHVwc3RhaXJz 16462\nIFNxdWFyZQ== 16463\nIGhlaW4= 16464\nIFNlYXNvbg== 16465\nb2xpcw== 16466\nIHByaW5jZQ== 16467\nIGRlZmVuc2l2ZQ== 16468\n570= 16469\nINC80LXRgdGC 16470\n0ZbQuQ== 16471\nINin2YY= 16472\ndW1ibGU= 16473\n6rmM7JqU 16474\nIGFzc2Fzcw== 16475\nIGNpcmN1bGFy 16476\nIHF1YWxpdGllcw== 16477\nIGhtbQ== 16478\nIGJsb3du 16479\nIExpeg== 16480\nIEt1cg== 16481\nIFNB 16482\nIGZpbmRpbmdz 16483\nIGNvbG91cnM= 16484\nIGRlbGxl 16485\nIElS 16486\nIEF0aA== 16487\nIER1Yg== 16488\nIE94 16489\nINiu 16490\nIHBvY2tldHM= 16491\nIGdyaWxs 16492\nIHN3aXRjaGluZw== 16493\nIHByZWZlcnJlZA== 16494\nIFdhbGVz 16495\nIGV4ZW1wbG8= 16496\nIGNob3BwZWQ= 16497\nIHZhY2NpbmF0aW9u 16498\nIG5ldXJv 16499\nIHNwZWNpZnk= 16500\naXZvcw== 16501\nIHNlcsOh 16502\nIHppZQ== 16503\nIOCurg== 16504\nIHJlc3VsdGluZw== 16505\nIFVnaA== 16506\nIG1lc3NlZA== 16507\nQ0Q= 16508\nIHBhYXI= 16509\nIGNvbWVy 16510\nIGNvdWNo 16511\nIEZlc3RpdmFs 16512\nIDQ5 16513\ndm91cw== 16514\nemVucw== 16515\n56iu 16516\nIEtlbm5lZHk= 16517\nIFRz 16518\nIOuztOyX 16519\nIGRlbW9uc3RyYXRpb24= 16520\nIHVudG8= 16521\nIGZydXN0cmF0aW5n 16522\nIGxhYm9yYXRvcnk= 16523\nIGVneQ== 16524\nIGJlYXV0aWZ1bGx5 16525\nIOyerOs= 16526\nIGFsZ3U= 16527\nIMO2eWxl 16528\n5L2g55yL 16529\nIFBI 16530\nIGZvcnR1bmU= 16531\nIGNsZWFuZXI= 16532\nIFJvYmlu 16533\nIHNhdXM= 16534\nIEdlbGQ= 16535\nIGthdA== 16536\nb2Jz 16537\nIG9sdXI= 16538\nIG1hdHQ= 16539\nIHF1ZXN0YQ== 16540\nIHN1Z2dlc3Rpb24= 16541\nZW5jZXI= 16542\n0L7RgdGC 16543\nIHJhZGFy 16544\nIOyeoQ== 16545\naXNoYQ== 16546\n4K6o 16547\n44KT44Gq 16548\namVz 16549\nIHZlZWw= 16550\n7IKw 16551\nIGF1dGhvcnM= 16552\n44CO 16553\ncGxhbg== 16554\nIGNvbGxhYm9yYXRpdmU= 16555\nIGluc3RpbmN0 16556\nIGZhcm1pbmc= 16557\nYXVnZQ== 16558\nRWR1 16559\nIG1lbWJlcnNoaXA= 16560\nIHNpbXVsdGFuZW91c2x5 16561\nIGJha2U= 16562\nIGvDpA== 16563\nIGxlY3R1cmVz 16564\n0YfQtdGB 16565\nIHByZW5kcmU= 16566\nIGNvbGxhcHM= 16567\nIFNheWE= 16568\nIEZ1dA== 16569\nIHlvZw== 16570\nIFJhdGhlcg== 16571\n2LHZig== 16572\nIGNhbXBz 16573\n0L7Qu9C+0LQ= 16574\nIHNpbXVsYXRpb24= 16575\nIE1haw== 16576\nTGF1Z2hz 16577\nIGdyZXk= 16578\nIHNlbnRlbmNlcw== 16579\neWVu 16580\nIFVubGVzcw== 16581\nSmU= 16582\nIFNhdGFu 16583\nINGC0LDQutC20LU= 16584\nIE5B 16585\nIGJyb24= 16586\nID9d 16587\nIHNvdWxz 16588\nIGxpZ2h0bmluZw== 16589\nIGltYWdpbmVk 16590\nIGN6eWxp 16591\ncHNpbG9u 16592\nZXR0YQ== 16593\nIGJlbGlldmluZw== 16594\nIHN0cm9uZ2VzdA== 16595\nIENPTg== 16596\nIHF1ZWxxdWVz 16597\nIGltbWlncmFudHM= 16598\nIHdhbGxldA== 16599\n6YCZ5piv 16600\nIEplcnNleQ== 16601\nIGltcGxpY2F0aW9ucw== 16602\nIGZvcmI= 16603\n44CP 16604\nIHVuYmVsaWV2YWJsZQ== 16605\n2KfYoQ== 16606\nIG9wZXJhdGlvbmFs 16607\nw7xz 16608\nIEdN 16609\nIOq3uOufsOuNsA== 16610\nIGdyYWNpYXM= 16611\nIGVudGVuZA== 16612\nIFJlZ2FyZA== 16613\ncm9i 16614\nINGC0LXRhQ== 16615\n6I8= 16616\nIFJldm9sdXRpb24= 16617\nIHdhYXI= 16618\nIEJpeg== 16619\ndGhlbGVzcw== 16620\nIHNwb25zb3JlZA== 16621\ncXVpZXI= 16622\nIOydvOs= 16623\nIHRlaw== 16624\nIOuQoA== 16625\naWdrZWl0 16626\nIEx1Y2s= 16627\nIENlcnRhaW5seQ== 16628\nIHRvbGw= 16629\nINC90LjRh9C10LPQvg== 16630\nIE1vbmV5 16631\nINGB0YLQvtGA 16632\nIERvdWJsZQ== 16633\nIFdvbGY= 16634\nIGNodW5r 16635\nzqzOvQ== 16636\naXTDqXM= 16637\nb25pbmc= 16638\nTWFy 16639\nIGdyYW5kZXM= 16640\nIGNvbGxlY3Rpb25z 16641\nIEV1cm9wYQ== 16642\nINCw0YA= 16643\nIOKAi+KAi+KAiw== 16644\nIOq3uOufrOuptA== 16645\nINC+0LHRig== 16646\nIOOBqg== 16647\nIOyLnOqwhA== 16648\nIEN1c3RvbQ== 16649\nIOyymA== 16650\n0ZbQu9GM 16651\nIGluZGl2aWR1YWxseQ== 16652\n7Zc= 16653\nIGRvemVu 16654\nIG93ZQ== 16655\nIFZpY3Rvcmlh 16656\n5Y+v6IO9 16657\nIGJlZXQ= 16658\ndXJi 16659\nIGFuYWxvZw== 16660\nacOnw6Nv 16661\ngpw= 16662\nc29ldmVy 16663\nIG1vZG8= 16664\nIHN1YnNjcmliZWQ= 16665\n7J6s 16666\nIGVudGl0aWVz 16667\n54mH 16668\nIGNsb3NldA== 16669\nIHJlc3BvbmRpbmc= 16670\nIHByaW50ZXI= 16671\nIFN0ZXBoYW4= 16672\nIGJ5xYI= 16673\nIERvbQ== 16674\nIEZlcm4= 16675\nIFBpZXI= 16676\nIHdpxJlj 16677\nIGhlbmNl 16678\nIG1vZHVsZXM= 16679\n44Os 16680\nIOuUsQ== 16681\nIERhbm55 16682\nINGB0LXQsdC1 16683\nIHZhZA== 16684\nIOyXhA== 16685\nIHNvdXM= 16686\nIHNwaGVyZQ== 16687\nQlk= 16688\nIFBlZA== 16689\naWduZWQ= 16690\nIHdoZWF0 16691\nIHVuZGVycw== 16692\nIGV2b2x2ZQ== 16693\nIGRlY2xhcg== 16694\nIGxpZ2h0bHk= 16695\nIGlkZW50aWZ5aW5n 16696\n5oSP5oCd 16697\nIGxlZ2VuZGFyeQ== 16698\nIGdlbnVpbmU= 16699\nIGdyaW5k 16700\nIFVuZQ== 16701\nZ2ViZW4= 16702\nIGJpY3k= 16703\nIGp1bXBz 16704\nIHByb3ZpbmNl 16705\nemnEmQ== 16706\nINeQ16DXmQ== 16707\nIGhvYw== 16708\nINCx0Ls= 16709\nIEdyYWQ= 16710\nIHJldmVuZ2U= 16711\nINin2YTYqg== 16712\nb29o 16713\n5ouc 16714\n0LDRhtC40Lg= 16715\n5bmz 16716\nIGVsZWN0cm8= 16717\nIOuQkA== 16718\n44Gn44Gv 16719\nIGZhbHM= 16720\ncmllbA== 16721\nb2tlcg== 16722\nIEV4Y2VsbGVudA== 16723\nIE1vcmdhbg== 16724\nIGJyaWNr 16725\nIHN1YnN0YW50aWFs 16726\nIHBvbGx1dGlvbg== 16727\nIFTDvHI= 16728\nIEV2ZXQ= 16729\nIGx1bmc= 16730\n44GW 16731\n15nXqQ== 16732\nb21tZXM= 16733\nIHJlYWxpemluZw== 16734\nIGh1bWJsZQ== 16735\nIExvY2s= 16736\nIGJvZA== 16737\nIOyWuA== 16738\nIHBlZXJz 16739\ndXp6 16740\nIGVtYmVkZGVk 16741\nIGNsYXJv 16742\nIGFnZ3JlZw== 16743\nIGVtcGxveWVycw== 16744\nIFJhag== 16745\nIOOBqA== 16746\nIFlp 16747\nIGpldQ== 16748\nYXRlcnM= 16749\nIHN0cmlrZXM= 16750\nbm9z 16751\nYXV0cmVz 16752\nZHI= 16753\nb3BoZXI= 16754\nIEFwcGFyZW50bHk= 16755\n7ZiE 16756\nIGluZmFudA== 16757\n2KfYqA== 16758\n0YLRiw== 16759\n7Zs= 16760\n2q8= 16761\nIHJlZGVz 16762\nYWNhxJ/EsW0= 16763\nIERBVklE 16764\nIENoaWNrZW4= 16765\nIHBlcnNwZWN0aXZlcw== 16766\nIHZpZXdlcg== 16767\nIHNoYXI= 16768\nINC/0YDQvtC40Lc= 16769\nbGlndA== 16770\nZXJvcw== 16771\naXRhYmxl 16772\n0LjQu9C+0YHRjA== 16773\nIGRpZsOt 16774\ntOuNsA== 16775\nIHJldGlyZWQ= 16776\nIHRoYXRz 16777\nemVuaWU= 16778\nYmVpdGVu 16779\nIG15Y2tldA== 16780\nIFJhYg== 16781\nIGluZmxhbW0= 16782\n7LCu 16783\nIGR1bQ== 16784\nIGRhZGR5 16785\n5pyf 16786\nIGltbWVycw== 16787\nIHBsYXlsaXN0 16788\n4K+G 16789\nIHRyYXVt 16790\nIHJlZnVzZQ== 16791\nc3RlcA== 16792\n4K6a 16793\nY3Vw 16794\nIHBvcHM= 16795\ncmltaW4= 16796\nYXnEsW0= 16797\nIGFsZA== 16798\nIHVubmVjZXNz 16799\nIGRhaA== 16800\nIElyaXNo 16801\nIGNvbXBy 16802\nbGHFnw== 16803\nVFA= 16804\nIHRyYW5zbGF0ZWQ= 16805\nU2M= 16806\nY2XEn2lt 16807\ntJA= 16808\nIGRyZWk= 16809\nINC70Y7QtNC10Lk= 16810\nIHF1aWVybw== 16811\nIGhlbGU= 16812\nemxpY2g= 16813\nIGFwcGxlcw== 16814\nIGRpc3RyaWN0cw== 16815\nIGNyZWRpdHM= 16816\nIGFzcA== 16817\nIOuLqA== 16818\nb3JhbA== 16819\n5b2x 16820\nIHN0ZXBwaW5n 16821\nIFZh 16822\nIGdhaW5z 16823\nNjU= 16824\nIG51ZXN0cmE= 16825\nZWRheQ== 16826\nYXNzYWRvcg== 16827\nIExpbmQ= 16828\nIGNyb3Bz 16829\nY2llbmRv 16830\naWd1ZQ== 16831\nIGJhbmE= 16832\nQW0= 16833\nIHBlbnQ= 16834\nIGFkZGljdGlvbg== 16835\nIHBhY2thZ2luZw== 16836\nw6Rk 16837\nqqg= 16838\nIHBlcnF1w6g= 16839\nIGNhbXBhaWducw== 16840\nIHN0ZWVw 16841\nIG5ldWU= 16842\nIGVtYmFycmFzc2Vk 16843\nIGRpc3RpbmN0aW9u 16844\naXR6ZXI= 16845\n5ZGK 16846\nIHJlZ2lzdHJhdGlvbg== 16847\nIGxsYW0= 16848\nIEFsbWlnaHR5 16849\nbGllc3Q= 16850\nIHV6 16851\nbmFr 16852\n57o= 16853\nIHRlcmF6 16854\naWFtZW50ZQ== 16855\nIHRyYW5zYWN0aW9ucw== 16856\nIGPDtHQ= 16857\nIHN3aXRjaGVk 16858\nIGNvbWJv 16859\nIHByYXllcnM= 16860\nIGludGVybnNoaXA= 16861\nIGFkZHJlc3Nlcw== 16862\nIGNoYXJpdHk= 16863\nIFdPTw== 16864\nIGJhaXQ= 16865\n6L+H 16866\nIO+/vQ== 16867\nIGZpY2E= 16868\nIFR5bGVy 16869\nYXJ1 16870\nIGF0b21z 16871\nIExldmVs 16872\nINC/0L7RgtC+0Lw= 16873\nIGZhbWU= 16874\ndWxr 16875\nIHRlYWNoZXM= 16876\nIHJlYnVpbGQ= 16877\n0LXQtNGM 16878\nIEluZG9uZXNpYQ== 16879\ndXNoaQ== 16880\nIFNob3J0 16881\nIGVuc3VyaW5n 16882\nZnM= 16883\nZWxl 16884\nIG1hcmdpbmFs 16885\nIGNvbmNsdWRl 16886\nYW10 16887\nIHZlcmlmeQ== 16888\nIE1jRG9uYWxk 16889\nIHNrYWw= 16890\nIHJlY29uc3Q= 16891\nIE1hbm4= 16892\nIGJhc2VtZW50 16893\nIHRyYW5zZm9ybWVk 16894\nIG9jY2FzaW9uYWxseQ== 16895\nem9uZQ== 16896\nIERhbnM= 16897\nINC60LDQutC+0Lk= 16898\nIGRpYWdub3NlZA== 16899\nIM+EzrE= 16900\nIGNvbW1hbmRz 16901\nIHByZXNpZGVudGlhbA== 16902\nIGFiYg== 16903\nIGJyYWNrZXQ= 16904\nIExlbQ== 16905\nw6VuZw== 16906\nIGZhdm9yaXRlcw== 16907\nIHJldm9s 16908\nIO2KuQ== 16909\nIGhhcmFzcw== 16910\n6YU= 16911\nIGNsZWFucw== 16912\nc3TDpG5k 16913\nIGtub2NrZWQ= 16914\nIHBlb3BsZXM= 16915\nIG11c2ljaWFucw== 16916\nIG11dHVhbA== 16917\nIENvbGQ= 16918\nODg= 16919\nemVq 16920\nYXRpZQ== 16921\nIEhvbm9y 16922\nIG9ic2Vzc2Vk 16923\nIE1VU0lD 16924\nIEJyZWFr 16925\nw7puZw== 16926\nIG1vZGlmeQ== 16927\nIHPDtnlsZQ== 16928\nINee15Q= 16929\nIE9ubGluZQ== 16930\nZm8= 16931\nIE1pbGxlcg== 16932\nIGxpa2luZw== 16933\nIGluaGFi 16934\nIGdyYXRpdHVkZQ== 16935\nIEpvdXJuYWw= 16936\nYXJuZXNz 16937\nSm9obg== 16938\nIEdpdA== 16939\n5Ymb 16940\nIHNpbmNlcmU= 16941\nIFNjaQ== 16942\nIEVsaQ== 16943\nIHN5bWJvbHM= 16944\nIG1hbnVhbGx5 16945\nzrXPgg== 16946\nINCy0ZbQtA== 16947\nIEZhdA== 16948\nIGxhYmVscw== 16949\nIHNvcGhpc3RpY2F0ZWQ= 16950\ndW1wcw== 16951\nIHJlbGVhc2Vz 16952\nIDQ3 16953\nIE9N 16954\n6rCA6w== 16955\nIEJpZW4= 16956\nIFJlZg== 16957\n6KiY 16958\nIFN0YQ== 16959\nIEVnZw== 16960\nIGluZGljYXRvcg== 16961\ncHNvbg== 16962\nIG5hc8SxbA== 16963\nUmlnaHQ= 16964\nIGNvbnZleQ== 16965\nIGtub3Q= 16966\nIGNvbm5lY3Rz 16967\ndWxhcw== 16968\nIHByZWNlZA== 16969\nIGluZXF1YWxpdHk= 16970\nYW1pZW50bw== 16971\nIHJlcGx5 16972\nT1k= 16973\nIGRpc21pc3M= 16974\nIOuQnA== 16975\n54Sh 16976\nINGF0L7RgNC+0YjQvg== 16977\nIG3DqWQ= 16978\nIHJhbmRvbWx5 16979\nIE9udA== 16980\ndWFyZA== 16981\nIHB1bGxz 16982\nINGC0LXQv9C10YDRjA== 16983\nIE5lZWQ= 16984\nIFNvZnQ= 16985\nIHN0cmVuZ3Rocw== 16986\nIGdvZWQ= 16987\ndW1lbg== 16988\n5q27 16989\nIO2OuA== 16990\nINC00L7QsQ== 16991\nIGNsYXJpdHk= 16992\nIEFp 16993\nIGJhbGxvb24= 16994\nIFBhbmQ= 16995\nIOyVhOuL 16996\nIHNoaW55 16997\nIHNtYWxsZXN0 16998\nb25pYQ== 16999\naGlsbA== 17000\nb3Rpbmc= 17001\nIGVpbmc= 17002\nIG1lcmVseQ== 17003\nIHNldXM= 17004\nINC90LXQvw== 17005\nIO2GtQ== 17006\nIGd1aWRlcw== 17007\nIHNwZWNpYWxpc3Q= 17008\nIHN0ZWFr 17009\n44KI44GG 17010\nIG1pZ3JhdGlvbg== 17011\ncXVlbGU= 17012\nIHJ1aW5lZA== 17013\nIHB1cHA= 17014\n5aWz 17015\nIGtlbmQ= 17016\nYW5nYW4= 17017\nIHBhbG0= 17018\nIHVuZmFpcg== 17019\nIHpt 17020\nIERW 17021\nY2hlc3Rlcg== 17022\n0LjRjg== 17023\nIG9vaA== 17024\nZXJn 17025\nQVRI 17026\nsKk= 17027\n5ZOq 17028\ncmlzb24= 17029\nIGludm9sdmluZw== 17030\nIHBhcnRseQ== 17031\nYW7Dp2Fpcw== 17032\nIHZvdw== 17033\nIHByb21pbmVudA== 17034\nIGNyeXN0 17035\naWJh 17036\nIGRlc2VydmVz 17037\nIG92ZXJ0 17038\nIHNlbnNpdA== 17039\nIFdoZQ== 17040\nIHRpZ2h0ZW4= 17041\nIGludGltaWQ= 17042\nIGFsaW1lbnQ= 17043\nd2lsbA== 17044\nIHN0cmVuZ3RoZW4= 17045\nIFRhbg== 17046\n5Y+I 17047\n44GX44G+44GZ 17048\nb25p 17049\nIE11bg== 17050\nIHByb3Bo 17051\nIHJlaGVhcnM= 17052\nIEtsZQ== 17053\nIHZlY2Vz 17054\nIHdvbmRlcmVk 17055\nb2tp 17056\nIHNlbnNlcw== 17057\ntOyL 17058\nxrDhu5s= 17059\nIMiZaQ== 17060\nIG11Y2hvcw== 17061\nIHdhdGNoZXM= 17062\nb3J0dW5hdGU= 17063\nIEp1YW4= 17064\n7J6W7JWE 17065\n0YDQtQ== 17066\nZWk= 17067\naW9uZW4= 17068\nIGV4cGVyaW1lbnRhbA== 17069\nIGRhdWdodGVycw== 17070\n4Lib 17071\nIG1lbnRhbGx5 17072\nYmVjY2E= 17073\nYXdhcmU= 17074\n7ISd 17075\nIHdoYXRzb2V2ZXI= 17076\nIGVuYWJsZXM= 17077\nIExvdw== 17078\nb2lk 17079\n4LiK 17080\nw7Nk 17081\n2Lo= 17082\nIGNvbnN0cnVjdGVk 17083\nIExhZGllcw== 17084\nIGFjY3VzZWQ= 17085\nINCw0L0= 17086\nRGFu 17087\nIHNwYXdu 17088\nIGNvbnRhaW5lcnM= 17089\nIGFydGlzdGlj 17090\nxLFw 17091\nIGRpc2Ns 17092\nIGF1dHJlcw== 17093\naW5hcw== 17094\nIE5hdGlvbg== 17095\nIG5hZw== 17096\nYmVhbg== 17097\nd2hl 17098\nnOuPhA== 17099\nIFNlb3Vs 17100\nIO2PrA== 17101\nIE5pY2g= 17102\nIGNvbXBsZW1lbnQ= 17103\nIGludGVydmVu 17104\nIE1vZGVs 17105\nIE9yYW5nZQ== 17106\nbmFtb24= 17107\nIGNhbGN1bGF0aW9u 17108\nc2Vl 17109\nIHVzdGVkZXM= 17110\nIGxlYg== 17111\nIGRvY3Q= 17112\n0ZbQvQ== 17113\nIGZvc3Rlcg== 17114\nIGVsYXN0aWM= 17115\nIEFoaA== 17116\nIGFjZQ== 17117\nIFBpbms= 17118\nIEplZw== 17119\nIGRlZXI= 17120\n44GX44GE 17121\nc2lz 17122\nIGpha28= 17123\nIEVtbWE= 17124\n0YHRgtCy0LXQvdC90L4= 17125\nIHBvcnRyYWl0 17126\nIG1ha2Vy 17127\nIGF1bWVudA== 17128\n0YDQvtCx 17129\nIGFpcnBsYW5l 17130\nIHRyYW5zcGFyZW5jeQ== 17131\nIGFkanVzdG1lbnQ= 17132\nIENEQw== 17133\nw6dvbg== 17134\nIHVwbG9hZGVk 17135\nINC00LXQudGB0YLQsg== 17136\nINCz0L7RgtC+0LI= 17137\nIGl0ZXI= 17138\nIGN1cnNl 17139\nw7Ru 17140\nbWVyY2U= 17141\nYXJhbg== 17142\nIGxlYWs= 17143\n57WQ 17144\nIGFic2VuY2U= 17145\n0YHQutC40Lk= 17146\nIHJlYWRlcnM= 17147\nYWxlcg== 17148\nIGJlbmVhdGg= 17149\nYW5nbw== 17150\naGV0aWM= 17151\nIGZpbm5z 17152\nIHBvb3A= 17153\nIGR1cGxpYw== 17154\nSGk= 17155\naWdz 17156\nb2xvZ2ljYWxseQ== 17157\nb3Bw 17158\nIGRpemVy 17159\nIEFsbGVu 17160\nIGdsaQ== 17161\nIGFjY2VsZXJhdGlvbg== 17162\nIHZpdGFtaW4= 17163\n44Ot 17164\ndsOk 17165\nIEFjY2Vzcw== 17166\n4K6Z 17167\ncsOhcw== 17168\nIGFwcHJlY2lhdGVk 17169\nIG5haA== 17170\nIHBvc3Rlcg== 17171\nIHRhbGU= 17172\nIGhpZ2hsaWdodGVk 17173\n5paH 17174\nxbxlbGk= 17175\nIGJsb2NrY2hhaW4= 17176\nIG1pY3Jvdw== 17177\nIGNpbmVtYQ== 17178\nIENoYW5n 17179\nIFNlYXJjaA== 17180\ndXN0ZXJz 17181\nIFplcm8= 17182\nIERpdmlzaW9u 17183\n0YDQsNGB 17184\nIHNjYXJl 17185\nIGplbGx5 17186\nIEFkbWluaXN0cmF0aW9u 17187\nU08= 17188\nIGxpbmVk 17189\nIOqwhA== 17190\nIGdlYmVu 17191\nIHNvZGE= 17192\nIHdpbm5lcnM= 17193\ns7w= 17194\n2ZI= 17195\nIEFtYg== 17196\n5ZWP6aGM 17197\n5ZQ= 17198\nIHBlZw== 17199\n5bex 17200\nNDM= 17201\nIHJhdXM= 17202\nIHJld2FyZHM= 17203\nIGluY2x1cw== 17204\nIGhpZ2h3YXk= 17205\nIGhhaA== 17206\nIG11bHRpcGxpZWQ= 17207\nIHPhur0= 17208\nIGRpc2NpcGxlcw== 17209\nIG5pbmc= 17210\nIGRyZXNzaW5n 17211\nIGF0dHJpYnV0ZXM= 17212\nIE1vc2M= 17213\nIEdyZWVjZQ== 17214\nIHNlaw== 17215\nIExlYXJu 17216\nIGp1cw== 17217\ncmVuZHJl 17218\nIHBlcnNvbm5l 17219\ncGxldGU= 17220\nIHBsYWNpbmc= 17221\nIGx1ZWdv 17222\naWxsYW5jZQ== 17223\nINC+0LHRiQ== 17224\nIHByb3Zpc2lvbg== 17225\nIGxpb24= 17226\ndHJh 17227\nYm9hcmRz 17228\nIGJlaGF2aW91cg== 17229\naGV5 17230\nIHN1YnNjcmlwdGlvbg== 17231\nIHByb3RhZ29u 17232\n44Oj 17233\nIHZhcmE= 17234\nIMWfdQ== 17235\nIGhhaGE= 17236\nIHRlYXNwb29u 17237\n5p8= 17238\nYXZvaXI= 17239\nIGNyeXB0bw== 17240\nINGB0YLQsNGA 17241\nIFN0b3Jl 17242\nYWJz 17243\nIFN0dWRlbnRz 17244\nIGxhdW5k 17245\naW50bw== 17246\nIGFwcHJvYWNoZWQ= 17247\nsJw= 17248\n0YPRjtGJ 17249\nIExhYm9y 17250\nb3Rlcw== 17251\naWF0cmlj 17252\nIGdyb8Of 17253\ndXRpdmU= 17254\nINC40LQ= 17255\nIEdpYg== 17256\nIHBsYWNlbWVudA== 17257\nIGRpZsOtY2ls 17258\nIGZyb2c= 17259\nINCy0YHQtdGF 17260\nIEpy 17261\nYXplZA== 17262\n0YPRiQ== 17263\nIOq8 17264\nZnJhbWU= 17265\n0LDQtdGI0Yw= 17266\nIGxvY2tkb3du 17267\n5ZGz 17268\nIG1lZGk= 17269\nINeU157X 17270\n0LXQvdC40Lk= 17271\nZW1hbGU= 17272\n7KKF 17273\nYXRlcmFs 17274\nIGRpc3RhbnQ= 17275\nIGJlYXJz 17276\nIGpvdXJuYWxpc3Q= 17277\n6Kej 17278\nIE1hcnNoYWxs 17279\nIElobmVu 17280\ndWV0b290aA== 17281\nYmFn 17282\nIMSRw6M= 17283\nIEhpZ2huZXNz 17284\nIOywjQ== 17285\n0LjQutCw 17286\nIFd1 17287\nIEZyYW4= 17288\nIHBlbmc= 17289\nIGZvbg== 17290\nIGh5cG90aGVzaXM= 17291\nINGA0YM= 17292\nIGx5 17293\n15o= 17294\n7JuU 17295\nIFJhZGlv 17296\n4Lie 17297\nRGF2 17298\nIGVtYmFycmFzc2luZw== 17299\nIOyeiOyWtA== 17300\nIGNhc3Rpbmc= 17301\nIGNhZ2U= 17302\nIFBzeWNo 17303\nIOydvOuLqA== 17304\nIMW+ 17305\naW1i 17306\nIGRpcmVjdG9ycw== 17307\nU0g= 17308\nIM+EzrfOvQ== 17309\n4buBdQ== 17310\nIGtvbnXFnw== 17311\nIG9wdGlvbmFs 17312\ncXVhcnRlcnM= 17313\naWtlcg== 17314\nIFNhbnQ= 17315\nIHZlcnNlcw== 17316\n67aA 17317\nIG9sYXI= 17318\nIM+H 17319\n44OV 17320\nIM6zzrnOsQ== 17321\nIEltbQ== 17322\nIGNvbnRyb3ZlcnNpYWw= 17323\nIGVyc3Rlbg== 17324\nIHJlY2lw 17325\nIENocmlzdGlhbml0eQ== 17326\nIOq0nA== 17327\nb3Jkb24= 17328\n15XXqQ== 17329\nIHNsYXNo 17330\nIFBm 17331\n0YPQtNGM 17332\n15XXnQ== 17333\nIFBlcnJ5 17334\nIG1hbXk= 17335\nIGJhY2tncm91bmRz 17336\nIOCujuCuqQ== 17337\nIHBlbmRhbnQ= 17338\nIENvbHVtYmlh 17339\nIGludmVyc2U= 17340\nINGH0LXRgNC10Lc= 17341\nIHN2 17342\nIGRpZ2dpbmc= 17343\nNDE= 17344\nY2hlbQ== 17345\nIG5hdmlnYXRpb24= 17346\nIFNoaW4= 17347\nIEZyb250 17348\nUEQ= 17349\nIGJlYXJpbmc= 17350\nIFdhc3Nlcg== 17351\nIHdheA== 17352\nIENIUklT 17353\nY2hpbmc= 17354\nIHByZXNzZWQ= 17355\nRWw= 17356\nIERhbA== 17357\nb25zaW4= 17358\nIGJpbmRpbmc= 17359\n0YHQutC+0Lk= 17360\ncG9vbnM= 17361\nIG1vY2s= 17362\nYXJlc3Q= 17363\n0LrRgNCw 17364\nTU0= 17365\nIGNvcnJ1cHQ= 17366\nc3Rvcm0= 17367\nIHJlZnJlcw== 17368\nIENvYWNo 17369\nbGzDpA== 17370\nIFRISVM= 17371\nIHBhcmFn 17372\nIOyTsA== 17373\ncG9vbA== 17374\nIGJpbGxpb25z 17375\nIOq5gA== 17376\nZ3JvdXA= 17377\nIHdlbGNvbWluZw== 17378\nY2VsbGVuY2U= 17379\nIER1a2U= 17380\n6ri0 17381\nIHByaW1lcmE= 17382\n7KC4 17383\nIHBvbmQ= 17384\nIHN0YXR1ZQ== 17385\nIOq1rOs= 17386\nIGhhdGNo 17387\nIGluc3RydW1lbnRhbA== 17388\nIHJlc2lkZW50aWFs 17389\n7Luk 17390\nIGFjY2VwdGluZw== 17391\nb3NoaQ== 17392\nZGF0ZQ== 17393\nIOyUqA== 17394\nIHBsYW50ZWQ= 17395\nIGpva2luZw== 17396\nIOyEnA== 17397\nIGhhdGVk 17398\nINGA0LDRgdGB0Lo= 17399\nIHNsZXB0 17400\nIHBhY2thZ2Vz 17401\nIGlzbGFuZHM= 17402\nZXNlbg== 17403\nxJ/EsQ== 17404\nIGRpYWdvbg== 17405\nIE9zYw== 17406\nIG1lc2g= 17407\nIHNjYWxlcw== 17408\nYXJpdHk= 17409\nIERlZmVuc2U= 17410\n44Gh44KH 17411\nIExld2lz 17412\nINGB0LXQs9C+0LTQvdGP 17413\nIGZsaWVz 17414\ndWluZWx5 17415\nIENvbnNpZGVy 17416\nIHN0YXJr 17417\naGV3 17418\nIEFzw60= 17419\ns7Tr 17420\nIHByb3Bvc2U= 17421\nIO2VmOuptA== 17422\nb2Rv 17423\nIE5vcm1hbGx5 17424\nIGhlZWZ0 17425\nIEhhcnJpcw== 17426\nZ3Jv 17427\nIEJsb29k 17428\nYmFzZQ== 17429\nIGlPUw== 17430\nIHRvdWNoZXM= 17431\nIGluc3Bpcg== 17432\nINeT 17433\nIGJpbmFyeQ== 17434\nIOy2lA== 17435\nIHNlcmlhbA== 17436\nIGlvbg== 17437\nIHVuZW1wbG95bWVudA== 17438\nIG9kZHM= 17439\nIEZhYg== 17440\nIEZCSQ== 17441\nQlJVTg== 17442\nIHdlaWdodHM= 17443\nzr3Ovw== 17444\nYXRpbGU= 17445\nIG51cnNlcw== 17446\nIGludm9sdmVtZW50 17447\nIO2UvA== 17448\nIGdvdmVybmFuY2U= 17449\nIOKCrA== 17450\n0YDRg9C/ 17451\naWVycmE= 17452\n7ZiV 17453\nIEplcnJ5 17454\nIGJlYXJk 17455\nIHNhbHZhdGlvbg== 17456\nIEFsb25n 17457\nZ2VudGxl 17458\nIEtp 17459\nYm9s 17460\nIFBsYXQ= 17461\nIGhhc2h0 17462\n6L+R 17463\nIHdhcmU= 17464\nIHBhcnRpZQ== 17465\neWN6 17466\nIGludHI= 17467\nRmlo 17468\nbmVudA== 17469\nIGNoZWF0 17470\naWxlbg== 17471\nIOuv 17472\nb3JpZQ== 17473\nIGbDoWNpbA== 17474\nZXRyaWM= 17475\nIGFmZmVjdGluZw== 17476\ndW5jaWF0aW9u 17477\nIGFmZmFpcnM= 17478\nIGJlZQ== 17479\nIHZpZXdpbmc= 17480\nIG9yYW5n 17481\nIExhbg== 17482\nINCh0YI= 17483\n5LiW 17484\nIE1lcw== 17485\ng4E= 17486\nZXJpZQ== 17487\nIGVzcGE= 17488\nIGludGVycHJl 17489\nIHBvc3Nlc3M= 17490\nIHB1cmVseQ== 17491\ncml0bw== 17492\nZm91bmQ= 17493\nYXNtYQ== 17494\n7KCB7J24 17495\nIGV4YW1pbmU= 17496\nINGD0Lw= 17497\nIGJlc2No 17498\nIFRvbW9ycm93 17499\nIEJsb2Nr 17500\nIHZhcmlhbnQ= 17501\nIHByZWZlcmVuY2U= 17502\nIGNvYWNoZXM= 17503\nIG1lZGljYXRpb25z 17504\nIO2YhA== 17505\nIGVtcGlyZQ== 17506\n64Sk 17507\nIElsbGlub2lz 17508\nIGNyaXNweQ== 17509\nIHRow6w= 17510\nIGJlZXM= 17511\nNzc= 17512\nIGdsb3c= 17513\n6Lo= 17514\nIFN0dWRpZXM= 17515\n5ZCE 17516\nIENoYWxsZW5nZQ== 17517\nIHVubGlrZWx5 17518\n0Kc= 17519\nxLF5b3JzdW4= 17520\nRElF 17521\nIG1pbmltaXpl 17522\naXphcmQ= 17523\nIMO6bg== 17524\nIGVuY29udHJhcg== 17525\nIEtpbGw= 17526\n5bs= 17527\nIHZhbmlsbGE= 17528\nIEdyYW50 17529\nIEdU 17530\nc2Vh 17531\nIHNvdWdodA== 17532\n0LLQvtC0 17533\nIG7DpG0= 17534\nIEF1bnQ= 17535\nT1dO 17536\nIHB1bXBraW4= 17537\nc3RlbGxlbg== 17538\nIHJhZw== 17539\n0LXQs9C00LA= 17540\nIHN0b3J5dA== 17541\nIGZvcnVt 17542\n5qmf 17543\nIGVzdGFiYQ== 17544\ndWNoZQ== 17545\nIGNvbmdyZXNz 17546\nIFJleQ== 17547\nIGRyYW1hdGljYWxseQ== 17548\nIFNwb3J0 17549\nIFllbGxvdw== 17550\nIOqzhOyGjQ== 17551\nIGRpc2d1c3Rpbmc= 17552\nIFJlY2VudA== 17553\nIGFjcXVpcmVk 17554\nIGNhYmxlcw== 17555\n55Sa 17556\nZGlu 17557\nIHZpc3Rv 17558\nIGNvbW11bmljYXRpbmc= 17559\n0YHRgtCw0LLQu9GP 17560\n0LXRgdGC0L4= 17561\n44O744O744O7 17562\nIHLDqWc= 17563\nIHNvY2tz 17564\nIHByb2Nlcw== 17565\nYmVjYXVzZQ== 17566\nIHV0dGVy 17567\nIGNvbG9jYXI= 17568\nIG5ld2VzdA== 17569\nIGdyYW1t 17570\n6KGo 17571\n5LiN55+l6YGT 17572\nIHNoaWZ0aW5n 17573\nIGNhcnJpZXI= 17574\nINGB0LrQvtGA 17575\nIFNjaHc= 17576\nIGV4ZWN1dGVk 17577\nIG1haW50YWluZWQ= 17578\nIM+G 17579\nIE1vc2Vz 17580\nIGRpc3Nl 17581\nIGhvcnI= 17582\n44Cc 17583\nIHJhbGx5 17584\nIGFsbGVt 17585\nIEV2ZW50dWFsbHk= 17586\nIGRpeW9y 17587\nbHZhbmlh 17588\nIHNjaG5lbGw= 17589\nIOqzvA== 17590\nIOunpA== 17591\nIHN0cnVnZ2xlcw== 17592\nbGF0ZQ== 17593\nIGNsYXJpZnk= 17594\nw6ltZW50 17595\nIG11bHRpcGxpYw== 17596\n0LjQsdC+ 17597\nIGpvdXJu 17598\nIGZyYWdy 17599\nIHN1cnByaXNpbmdseQ== 17600\nIGRlc3BlcmF0ZQ== 17601\nNTI= 17602\nIHN1bA== 17603\nIFJlYWQ= 17604\nIEZyaWVk 17605\nIG1vbmQ= 17606\nd29v 17607\nIG9yZ2FuaXppbmc= 17608\n44GX44KH44GG 17609\nIFNvb24= 17610\nINCy0L7Qv9GA0L7RgQ== 17611\nIE51cg== 17612\nINCX0LQ= 17613\nIHNwaWRlcg== 17614\n0LXRgdGP 17615\nIHR1dG9yaWFscw== 17616\nIG51dHJpZW50cw== 17617\nb3Jlcg== 17618\nIGNvZWZmaWNpZW50 17619\nIGFycmFuZ2VtZW50 17620\nIHByaWNpbmc= 17621\nbmFu 17622\neXU= 17623\nQkw= 17624\nIHRyaWJl 17625\nIEhvd2FyZA== 17626\ndW5rcw== 17627\nIG5ld2Vy 17628\nIHByb3Zpbg== 17629\nIHByZWRpY3Rpb24= 17630\naG9z 17631\nIG9sc3Vu 17632\nIEFyb3VuZA== 17633\nIHZpZXI= 17634\nINGB0YLQvtGA0L7QvQ== 17635\nIHZhbGxleQ== 17636\nIEVsYQ== 17637\naWZp 17638\nIGdhbGF4eQ== 17639\nIHRyYW5xdQ== 17640\nIGFkdmVycw== 17641\nIFRlbXBsZQ== 17642\naWZmcw== 17643\naWdlbmNl 17644\n6Ieq5bex 17645\nIGvDtm5udGU= 17646\nIMSRw7M= 17647\nRGlk 17648\nIHBob3RvZ3JhcGhz 17649\nIEFXUw== 17650\n0YbQuNGP 17651\nIGd1YXJkcw== 17652\nIGFwcG9pbnRlZA== 17653\nIEdpbA== 17654\nINC80L7QvA== 17655\nIGNvZA== 17656\nIFVubGlrZQ== 17657\nIGV2ZW5seQ== 17658\naXNjb25zaW4= 17659\nIGVzdG91 17660\nIG1uaWU= 17661\nIEV4ZWM= 17662\nIE1W 17663\nIEVpbmU= 17664\n5L+h 17665\nIFJvZ2Vy 17666\nIEZhYw== 17667\nIExpc3Q= 17668\nIGZ1ZXI= 17669\n0LDQtdGC0LU= 17670\nb21lZA== 17671\nIGF0dHJhY3Rpb24= 17672\n6Imy 17673\nIHRlcnJhaW4= 17674\nIERyb3A= 17675\nIGNvcnBvcmF0aW9ucw== 17676\nIHNjaWVuY2Vz 17677\nIHRocm9uZQ== 17678\n44GE44Gf 17679\nIGFq 17680\nIFJvdA== 17681\n54m5 17682\nIHN1cHBvcnRlcnM= 17683\nIEJlcmU= 17684\nSGVyZQ== 17685\nIGRpZmVyZW50ZXM= 17686\nIHNpZ25pZmljYW5jZQ== 17687\nz4POtw== 17688\n5oiR6Ka65b6X 17689\nIGNsYW1w 17690\nIOuMgOs= 17691\nIGZhYnVsb3Vz 17692\ncmV6 17693\n5oyB 17694\nIGFzc3VtcHRpb25z 17695\ndXRoZXI= 17696\nd2lk 17697\ncG90 17698\n6L+O 17699\nIHlhbg== 17700\ndWxpbg== 17701\n0YDRi9Cy 17702\nIFNsb3c= 17703\nIFBlbm5zeQ== 17704\nIO2VtOyEnA== 17705\nIG1laW8= 17706\nIHdlYWx0aHk= 17707\nIEVpZ2h0 17708\nIHB1bHNl 17709\nIGZyaWN0aW9u 17710\naWRpdHk= 17711\nIEhvbGw= 17712\naXlvcnVt 17713\nIHNvdW5kZWQ= 17714\nIENhcnI= 17715\nIGZvcms= 17716\n4pg= 17717\nIFBB 17718\nIGNvbnNwaXI= 17719\nIGNvZGluZw== 17720\ncnQ= 17721\nIFR5cA== 17722\nIOyWkQ== 17723\nINC/0L7Qsw== 17724\nIG1pc2Vy 17725\nINGB0LzQvtGC0YA= 17726\nIFN3ZWRlbg== 17727\nIG9sYXJhaw== 17728\nIFpoYW5n 17729\nIENoaQ== 17730\nIFRpdGFu 17731\nIHNjcmVlbmluZw== 17732\nIFNwaWRlcg== 17733\nIMWeaW1kaQ== 17734\nIG9ic3RhY2xlcw== 17735\nbGFyYQ== 17736\nIGNoYWxsZW5nZWQ= 17737\ncHNl 17738\nVE9O 17739\n4bul 17740\nIFBp 17741\nIGxhZ2k= 17742\naWV1cnM= 17743\nIGh1cnRpbmc= 17744\nIG5lZ2xlY3Q= 17745\nIGdlbmVyYXRpbmc= 17746\nIHlvdW5nZXN0 17747\nIGF1ZGl0 17748\nINGA0LXQtw== 17749\nz4HOrA== 17750\nIGRvbmF0ZQ== 17751\nIFBERg== 17752\nIHZpc2l0cw== 17753\nIGNydWlzZQ== 17754\nUFA= 17755\nYXNlcg== 17756\nIHdzcA== 17757\nYmFja3M= 17758\naXZhbHM= 17759\n44GG44KT 17760\nIGRldmU= 17761\nIHByb3BvcnQ= 17762\nIGNhdGg= 17763\nIEVmZmVjdA== 17764\nIHdpbmRz 17765\nIOyZlA== 17766\nIGNoYXJ0cw== 17767\nIHNhbWE= 17768\nIGF1dG9tYXRpb24= 17769\nINC/0L7QutCw 17770\nIG9sYW4= 17771\nIGJvYXRz 17772\nIGNhZmU= 17773\nIGRlbmllZA== 17774\nIE1hbWE= 17775\nIGJsb2NraW5n 17776\nIFRob3I= 17777\nIHBoZW5vbWVuYWw= 17778\nIHN0YWtlaG9sZGVycw== 17779\nIHVub3M= 17780\n0YPQtdGC 17781\nIEFicmFoYW0= 17782\n44Gn44KC 17783\nIGRldGVjdGlvbg== 17784\nIGp1cmlz 17785\nIHBvd2VyZWQ= 17786\nemlhbA== 17787\nIHdlbGZhcmU= 17788\nIHVwZ3JhZA== 17789\nIG1vxbxuYQ== 17790\nIENhc2U= 17791\nY3VsYXI= 17792\nlOydtA== 17793\n44OB 17794\nIEd1ZXNz 17795\nIGN5Y2xlcw== 17796\n5L6L 17797\n57Wm 17798\ncm9jaw== 17799\ndW1p 17800\nIGVsaXRl 17801\nIHF1w6g= 17802\n5aCx 17803\n0YLQvtC8 17804\nIHNob3Jl 17805\nZ3VudGE= 17806\nIGt1 17807\nIGZhaXRoZnVs 17808\nIEplcmVteQ== 17809\nYWlk 17810\n4Lc= 17811\ndWdhbA== 17812\n5bCN5ZWK 17813\nIFZlbA== 17814\nIHZyYWk= 17815\nc3RlbGw= 17816\nqLg= 17817\nIGtvbA== 17818\n6L0= 17819\nIHF1YW50bw== 17820\nINC30LDRgA== 17821\nIDIwMDI= 17822\nZXN5 17823\nIHJlc2VydmU= 17824\nINC80L7QvNC10L3Rgg== 17825\nIGRlcGxveWVk 17826\nIGRlZmluaW5n 17827\nIHNhdQ== 17828\nIGdhYXQ= 17829\nIik= 17830\nIHRyYW5zbWl0 17831\nIHB1Ymxpc2hpbmc= 17832\nIHJhbmtpbmc= 17833\nIG9mZmVuc2U= 17834\nIDQ2 17835\ncGlu 17836\nIFRha2luZw== 17837\nIGVudGl0bGVk 17838\nIGdlbnVpbmVseQ== 17839\nIHZhcmlhdGlvbnM= 17840\nIGZpbmRl 17841\nIHRhdQ== 17842\nIHVuZm9ydHVuYXRl 17843\nIFJhaA== 17844\ncG9ydHM= 17845\nIGPF 17846\nIG1vbmtleQ== 17847\nIGJyYWM= 17848\nd2Vp 17849\nbHVuZw== 17850\nIGFydGlm 17851\nIHN5cnVw 17852\nINCU0LDQsg== 17853\nIGxpZnRlZA== 17854\nIGNoZXo= 17855\nIEFkdmVudA== 17856\nIFN0b2Nr 17857\nIGRvbA== 17858\n0LzQtdC9 17859\n0LjRiNGM 17860\nIHlu 17861\nZ2lv 17862\nZGV0 17863\nIGRlc3Nl 17864\nIGdyaQ== 17865\nIENoYWlybWFu 17866\n54U= 17867\nIGN1ZW50YQ== 17868\nYW5pbQ== 17869\nIGNyYWI= 17870\nIGVzY2Fs 17871\nIHByZW1pw6hyZQ== 17872\nIEdlZg== 17873\nIGRpbmluZw== 17874\nIHNldmVudGg= 17875\nIGNoYXNpbmc= 17876\nIFRvd2Vy 17877\nIGJydXRhbA== 17878\nIGZ1bmRhbWVudGFsbHk= 17879\n44Go44GG 17880\n0LvQtdC90LjRjw== 17881\nc3RhZ2U= 17882\nIGFjcXVpcw== 17883\nIGN5bGluZGVy 17884\nIGNvbW1hbmRlcg== 17885\nbWVt 17886\nIFVW 17887\naGFwcHk= 17888\nIGVwc2lsb24= 17889\nIGludml0YXRpb24= 17890\nIGZhcm1lcg== 17891\nY2hhaXI= 17892\nIGRlc3Rpbnk= 17893\nIHNvdmVyZQ== 17894\nIEhlYnJldw== 17895\nIHNlcnZhbnQ= 17896\nIGJldw== 17897\nIGdhc3Q= 17898\ndXRpZXM= 17899\nIGFkbWluaXN0cmF0aXZl 17900\nIENvbW1hbmQ= 17901\nw6l0YQ== 17902\nIG5pdHJvZ2Vu 17903\n6re8 17904\nIGFiaQ== 17905\nIHZpbGxhaW4= 17906\nIGJsYW5rZXQ= 17907\nIFNlbmQ= 17908\nIGJlYXRlbg== 17909\nsoQ= 17910\nIHZvbHVudA== 17911\nIHNjaG9sYXI= 17912\nIEVtcGVyb3I= 17913\nIDQz 17914\ndmFibGU= 17915\nIER1cw== 17916\nIEdV 17917\nIHRhcmdldGluZw== 17918\nd3d3 17919\nIGFtZW5kbWVudA== 17920\n7IaM6w== 17921\nIHRpbmc= 17922\nIG5hc3R5 17923\nIGdhdWdl 17924\nINGA0L7QtA== 17925\nIEhhbnM= 17926\nWW91cg== 17927\nzrHOvQ== 17928\nIHByb2pldA== 17929\nIEhhd2FpaQ== 17930\nIHN1c3BpY2lvdXM= 17931\nIHNjaHc= 17932\nIHJlbW92YWw= 17933\nIGludHJpZw== 17934\nIE1V 17935\nIHBvbnRv 17936\n4KS+ 17937\nINC+0LHRgNCw0Lc= 17938\nIGd1ZXNzaW5n 17939\ncGFjZQ== 17940\nIG1vdGhlcnM= 17941\nIG1pbGxpbWV0ZXI= 17942\n0LvQtdC90LjQtQ== 17943\n5rKh5pyJ 17944\nIGF2YWlsYWJpbGl0eQ== 17945\naWN6 17946\n5q2k 17947\nIGZyYWN0 17948\nIGJhc2Vz 17949\na20= 17950\nIEJUUw== 17951\nIEZpZWxk 17952\nIGR6aWU= 17953\nIHNlZ3VuZG8= 17954\nIOuCmOuKlA== 17955\nIGxlZ2l0aW1hdGU= 17956\naW1hcw== 17957\nINCy0L0= 17958\nIGNvcnJ1cHRpb24= 17959\nIHNtYXNo 17960\nIFZhbGVudA== 17961\nIGFsaWduZWQ= 17962\nIFBlbm5zeWx2YW5pYQ== 17963\nIGdhYg== 17964\nIEV1bg== 17965\nZW50aA== 17966\nIE1vcm5pbmc= 17967\nIGNhbmRsZQ== 17968\nIGJhY2twYWNr 17969\nIElzbGFtaWM= 17970\nYcOnw7Vlcw== 17971\nIGVuY3J5 17972\nIG11c2hyb29tcw== 17973\n7YyM 17974\nZGl0 17975\nIHRyYW5zaXQ= 17976\nIFdpc2NvbnNpbg== 17977\nIHBhcnRpY2lwYXRlZA== 17978\nIElscw== 17979\nIHVuZm9sZA== 17980\ntoDr 17981\nIHByb2ZpdHM= 17982\nIHdhcm1pbmc= 17983\nIEdhbmc= 17984\nIG5ldHdvcmtpbmc= 17985\nIG1lZ2E= 17986\nIHRob3JvdWdobHk= 17987\nbGVtZW50cw== 17988\nIEht 17989\nIGRlY2lkaW5n 17990\nIGVtb3Rpb25hbGx5 17991\nIGV4aGF1c3RlZA== 17992\nINCf0L7Rgg== 17993\nY2lkbw== 17994\nIEhUTUw= 17995\nIGNvcHlyaWdodA== 17996\nIG1lbG9keQ== 17997\neWlt 17998\nIGFuZGVycw== 17999\nb3Nob3A= 18000\nIOuzvA== 18001\nIGF0aGxldGU= 18002\nIEdF 18003\nIGZyZXF1ZW50 18004\nIGRlc2lyZXM= 18005\nIG5lZWRpbmc= 18006\nIFl1bg== 18007\nIHJpZmxl 18008\nIGxvdmVy 18009\nJ1Q= 18010\nIGRlbnNl 18011\nIHTDo28= 18012\nIG5vdGlmaWVk 18013\nIGlkaQ== 18014\n7Jet 18015\n7YY= 18016\nIGludGVyYWN0aW5n 18017\nIHJhcHBvcnQ= 18018\n0LXRgNC4 18019\nc2tp 18020\nIGJlc3Nlcg== 18021\nIG1hbnVmYWN0dXJlcg== 18022\nIEt5bGU= 18023\nIGFjY291bnRhYmxl 18024\nIFNhaw== 18025\nIFBpbA== 18026\nIERvbWlu 18027\nIHByZXN1bQ== 18028\nINCS0YHQtQ== 18029\nIHZpbmVnYXI= 18030\nIGd1YXJhbnRlZWQ= 18031\n55yL5Yiw 18032\nIGhhbmRsZWQ= 18033\n6Z+z 18034\nY2F0 18035\nIGNpdmlsaXphdGlvbg== 18036\nIGFjY29tcA== 18037\nIFZN 18038\nw6ltb24= 18039\nIGRlemU= 18040\nIGdyYWRlcw== 18041\nIHNvbGx0ZQ== 18042\nIHN0YXJpbmc= 18043\n15DXqg== 18044\nYXJudA== 18045\nIGhvcml6b24= 18046\nIHRyYXZhaWw= 18047\naG91cg== 18048\n56ys5LiA 18049\nIEVE 18050\nIERhaw== 18051\nIG55 18052\nIGNvbnZl 18053\nIENoYW0= 18054\nIGZpcm1z 18055\nIExpdQ== 18056\nINGB0YLRgNCw0L0= 18057\nIGxpYmVydA== 18058\nIGxlbnNlcw== 18059\nIGludGFrZQ== 18060\nINCy0YvQsQ== 18061\nIG1lbnNlbg== 18062\naGVs 18063\nIHByYWN0aXRpb24= 18064\nIDM1MA== 18065\n44Kz 18066\nRk8= 18067\nIGJlZHM= 18068\nIGFuY2VzdG9ycw== 18069\nIOyXhOyyrQ== 18070\nIGRpc3R1cmI= 18071\nIExhc3RseQ== 18072\nIFN1cHBvcnQ= 18073\n4Li14LmJ 18074\nIENvcm9uYQ== 18075\nIGVudGh1c2k= 18076\nINCy0L7Qt9C8 18077\nIOyCrOuejOs= 18078\nIDUy 18079\nYmlyZA== 18080\nIHJlZHVjZXM= 18081\nIOyeiOydhA== 18082\nIEdlbmU= 18083\n6rWQ 18084\nxJlw 18085\nIMOcYmVy 18086\nIGNvbmNlcm5pbmc= 18087\ndXNlcg== 18088\nIGNvbmNlbnRyYXRl 18089\nIFdIQVQ= 18090\naXNob3A= 18091\nb255bW91cw== 18092\nbm9sZA== 18093\nIHN1Z2dlc3Rpbmc= 18094\nqbA= 18095\nIEZpc2g= 18096\nLi4uLi4uLi4= 18097\nIHZlc3NlbA== 18098\nIHRyYWJham8= 18099\n44G1 18100\nIE9jZWFu 18101\n5aeQ 18102\neWc= 18103\nIHRvd25z 18104\nZGVs 18105\nIHRlcnJpZnlpbmc= 18106\nIMOnYWzEscWf 18107\nIHNpbm8= 18108\nIGVhdHM= 18109\nIGdleg== 18110\nIGdlbWU= 18111\nIOyZhA== 18112\nIGNvbXBhcnQ= 18113\nIGltcGxlbWVudGluZw== 18114\nIFBvdHRlcg== 18115\nIEdlcm1hbnM= 18116\nIGfFgg== 18117\nIHRlbm5pcw== 18118\nIGNhcnBldA== 18119\nYXVlcg== 18120\nIFNhdWRp 18121\neWVvbmc= 18122\nIGN1cnJ5 18123\nIEZvcmVzdA== 18124\n0YvQuw== 18125\nIGZpZnRlZW4= 18126\nIGJvbHRz 18127\nIHtc 18128\nrLQ= 18129\nIHNldHRsZW1lbnQ= 18130\nIGxhbmdl 18131\nIGJhbQ== 18132\nR2V0 18133\n7ZWZ 18134\nIHN3YXA= 18135\nIEtoYW4= 18136\nIGNvbW1lbmNl 18137\nIHF1YXJhbnRpbmU= 18138\nIHNjb3JlZA== 18139\n55Y= 18140\nIDE5NTA= 18141\nIHRoaWNrZXI= 18142\nIHPDu3I= 18143\n5Y+j 18144\nIExhcnJ5 18145\nIGFsbGV6 18146\n7Iuc64qU 18147\nIGfDvA== 18148\nIHNwZWN0YWN1bGFy 18149\nLy8= 18150\nYm90aA== 18151\nIHN0YXRz 18152\n5aaz 18153\nIE5hbmN5 18154\nIGJ1bnU= 18155\nIGNydXN0 18156\nIGFjdGl2YXRlZA== 18157\nIOq3uOue 18158\nb3V0aGU= 18159\nIHBvcnRz 18160\nIG5ldXJhbA== 18161\nIGphdw== 18162\nIG9ic2VydmF0aW9ucw== 18163\nIHZvaXQ= 18164\nYWJhbg== 18165\n4bqjaQ== 18166\npqzrpbw= 18167\nb21lcw== 18168\n4K+L 18169\ncXVp 18170\nIGtpbmRuZXNz 18171\n0JE= 18172\nIDQx 18173\nIG1vZGVyYXRl 18174\nIGFuZ2Vscw== 18175\nIFRhbWI= 18176\nw6h0 18177\nIGNobG9y 18178\nIEJpbGx5 18179\n7LKY6w== 18180\nYWNvbg== 18181\nIHNlbGVjdGluZw== 18182\nIERlbHRh 18183\nIG51bGw= 18184\nZGVubHk= 18185\nIGNpdWQ= 18186\nIHRlbmRlbmN5 18187\nIGJyZWFrZG93bg== 18188\nIG1pbnQ= 18189\n0YTQvtGA0Lw= 18190\nb3JwaA== 18191\nIGRhd24= 18192\nc3By 18193\nIFdJTEw= 18194\nw6RjaGxpY2g= 18195\nIHB1cHB5 18196\nNzAw 18197\nIOCupA== 18198\nIGZhaWxz 18199\nIENvbmM= 18200\nIHJlbGF0aXZlcw== 18201\nIGludml0aW5n 18202\nIGF1dG9ub20= 18203\nIGNvbXBvc2Vk 18204\nIHVuaXR5 18205\nIGRlY2lz 18206\nIGFjY2Vzc29yaWVz 18207\nIENhc3M= 18208\nIGJpc3Q= 18209\nIFRpcA== 18210\n7Ke4 18211\nIHB1bnQ= 18212\nIHLDoXA= 18213\n6YCy 18214\nQU5L 18215\n44Ga 18216\nZXhpc3Q= 18217\nIGNvbXBhdGlibGU= 18218\nIG5lcg== 18219\nINC10LzRgw== 18220\nIGFwbGlj 18221\nIGJhcHQ= 18222\nIGZhaWxpbmc= 18223\nIFRhbWFt 18224\nIG9zY2lsbA== 18225\nIGxldHp0ZW4= 18226\nIHJlcGVhdGVkbHk= 18227\nIGp1bmdsZQ== 18228\nIFB1c2g= 18229\naGFp 18230\nIM63 18231\nIGRlYWRseQ== 18232\n0Y/Qtg== 18233\nd2nEhQ== 18234\nIENvbW1vbg== 18235\nIM6V 18236\nIHNrYXRl 18237\nVEM= 18238\nIE1pbmk= 18239\nIGhvYmJ5 18240\n4bqnbg== 18241\nIHJvdXRlcw== 18242\nIGFtaWdvcw== 18243\nIGNvbmp1bg== 18244\nIHBhcnRuZXJzaGlwcw== 18245\nIG5vdm8= 18246\nIGF2ZXI= 18247\nIHBvdXZleg== 18248\nYnJpZGdl 18249\nIHByZW9j 18250\naGlt 18251\nIHR1cmI= 18252\nIHNvYg== 18253\nIFNuYXA= 18254\nIOywuA== 18255\nbWludXRl 18256\nIHRyYWplY3Q= 18257\ndWrEmQ== 18258\nIGVhZ2Vy 18259\nIHJlZ3VsYXRvcnk= 18260\nIGJhbmtpbmc= 18261\nYmxpbmc= 18262\n0YjRjA== 18263\nYcW8 18264\nIGJpemFycmU= 18265\naXRhdGVk 18266\nZGlyZQ== 18267\nIHRocmVhdGVuZWQ= 18268\nIHNoaW5pbmc= 18269\nIG5lc3Nl 18270\nIGNvcnBz 18271\nINGB0YM= 18272\nIHRlbGVz 18273\nIHRlbXA= 18274\ndGVt 18275\nINC60LDQvQ== 18276\nIGZldmVy 18277\nTmV3 18278\nIGhlYXZpZXI= 18279\nIFNhaA== 18280\nYnVk 18281\nIG91dHJvcw== 18282\nIOywvg== 18283\nIOuqhQ== 18284\nYXJyaW5n 18285\nIOq0nOywrg== 18286\nIE5hcA== 18287\nIHNlbWlu 18288\nIFRoYW4= 18289\naWZz 18290\nIGRlc2Vu 18291\nINGC0LDQutC+0LU= 18292\nIGxvc2Vz 18293\nIEJhbHQ= 18294\na29u 18295\nINC90LDQv9GA 18296\nIHZvaXM= 18297\nIE1vc2Nvdw== 18298\nIGNoYWlycw== 18299\naGlz 18300\nIHJlZnVnZWVz 18301\na2c= 18302\nIGtvbGU= 18303\njag= 18304\n0LDRgdC40LHQvg== 18305\npr0= 18306\nIFVuaXZlcnNl 18307\nIERpcmVjdA== 18308\nIGNoZWF0aW5n 18309\nIENpbg== 18310\nIHBhdHJp 18311\nIGFkdmlzZQ== 18312\nIE5ldGhlcg== 18313\nIHByaW1laXJv 18314\nIG1lbnRpb25pbmc= 18315\nbnV0 18316\nNTY= 18317\nYXLEsQ== 18318\nIHBldGl0ZQ== 18319\nYmxlZA== 18320\nIHBlbnNhcg== 18321\naWNpbw== 18322\nSU5E 18323\nIHZldGVyYW4= 18324\nIGxhZGRlcg== 18325\nIGNvbnNlcXVlbmNl 18326\n0L7QttCw0Ls= 18327\nIEJ1cm4= 18328\nIHJ1Zw== 18329\nIE1hZGU= 18330\nIGdpdA== 18331\nIi4uLg== 18332\nIGNvbXBldGl0b3Jz 18333\nIHByemVk 18334\nIGFwcGFyZW50 18335\nIEFyZ2VudGluYQ== 18336\nIFdvcmtpbmc= 18337\nIGNvbGxhYm9yYXRl 18338\nd29tYW4= 18339\nIHJldGFpbg== 18340\nIGxldXJz 18341\nIGRhc2hib2FyZA== 18342\n15nXkw== 18343\nIEVhcmx5 18344\nQk0= 18345\nINC10ZE= 18346\n0L7Qu9C+0LM= 18347\nIHNhdGlzZnlpbmc= 18348\nIG9mdGVudGltZXM= 18349\nIG1hcHBpbmc= 18350\nw7xua8O8 18351\nYXJ0aA== 18352\nZm9sZA== 18353\nIGxhdW5jaGluZw== 18354\nIGF1cmE= 18355\nIHByZWNpc2lvbg== 18356\nd29ya3M= 18357\nR29k 18358\nIHN0cmFw 18359\nIEltcGVy 18360\nIHJpdmVycw== 18361\nIHw= 18362\nIGN1ZXI= 18363\ncmVnb24= 18364\nIGFycml2YWw= 18365\n0LrQsNGF 18366\nIE1pYW1p 18367\n0LDQvdGL 18368\nIHN1cnZpdm9ycw== 18369\nIFNlbmlvcg== 18370\nRGF2aWQ= 18371\nIGVzdGFkbw== 18372\nIHNlY3RvcnM= 18373\nIHBvcHBpbmc= 18374\nIGNoaW0= 18375\nYXnEsQ== 18376\nIGt1bm5lbg== 18377\nIGdhbGxlcnk= 18378\nIHN1bmxpZ2h0 18379\nZXNlaGVu 18380\nIHllbGxpbmc= 18381\nIE1laW4= 18382\nIFBob2VuaXg= 18383\nIG1hbm8= 18384\nIGhpc3Rvcmlh 18385\nIG9jY3VycmluZw== 18386\n5qy4 18387\n7Lg= 18388\n0LDQtNC4 18389\n5b6F 18390\nIGluc3RpdHV0aW9uYWw= 18391\nIFR1dA== 18392\n57I= 18393\nIHNsYXZlcw== 18394\n44Gp44GG 18395\nIGZvcmdpdmVuZXNz 18396\nIHR3aW4= 18397\nIEh5dW4= 18398\n0L3RjA== 18399\nIEtvbW0= 18400\nYW5kcmE= 18401\nc2hvdA== 18402\nc3PDpA== 18403\nINGG0LU= 18404\nYXR0YQ== 18405\nIGV4cGVuc2U= 18406\nIEdQVQ== 18407\nIFBhc3Q= 18408\ncmlibHk= 18409\nIOutkOyVvA== 18410\nINCz0L7QtNCw 18411\nIHJlc3Bpcg== 18412\n5p2x 18413\nIFF1ZWVucw== 18414\naG9wcw== 18415\nIHPDqXJpZQ== 18416\nIHByZWY= 18417\nIGNvbWVk 18418\nIHBsdXQ= 18419\nIE92ZXJhbGw= 18420\nIOOBnQ== 18421\nIGN1c2g= 18422\nIHJpbmdpbmc= 18423\nIGluY29ycmVjdA== 18424\nINGB0YLRgA== 18425\nIGdlb21ldHJ5 18426\nIGFkdmVydGlz 18427\nINCo 18428\nIHJldmlld2Vk 18429\n44GC44GC 18430\nIGRvemVucw== 18431\nIGRldGVybWluYXRpb24= 18432\nIFBoaWxs 18433\nIGNvbnRyaWJ1dGVk 18434\nIENpdA== 18435\nIHBhc3NlbmdlcnM= 18436\nIGPDtHTDqQ== 18437\nIHJldmVy 18438\nIHRlY2hub2xvZ2ljYWw= 18439\nIGFsbGVu 18440\nIHJhaW5pbmc= 18441\nYXZp 18442\nIHNhbHR5 18443\nIHR5cGluZw== 18444\nINGC0LU= 18445\nIHRpbHQ= 18446\nIOy5mA== 18447\nINC+0YA= 18448\nINC/0YDRj9C8 18449\nIHJvdQ== 18450\nIGFyZW5h 18451\nYXJhdA== 18452\n5Yir 18453\nSEhISA== 18454\nIG1hbnVmYWN0dXJlcnM= 18455\nIEVkd2FyZA== 18456\nIHR1Y2s= 18457\nIGJsb3dz 18458\naW5nbw== 18459\nIE1hcmM= 18460\n7JWE7ISc 18461\nTWljaA== 18462\nIENsZWFu 18463\n6LQ= 18464\nZXN0bw== 18465\nIFBhY2s= 18466\nIHNoYWZ0 18467\nQlJVTk8= 18468\nIGF2ZW4= 18469\ndXVy 18470\n0YHQutC+0LvRjNC60L4= 18471\n6rSA 18472\nIGF1dG9tYXRlZA== 18473\nIHZlbnR1cmU= 18474\nIHN1cnZlaWxsYW5jZQ== 18475\nIEdyb3c= 18476\nIEVtZXI= 18477\nINC00L7RgA== 18478\nIGludmVzdG9y 18479\nIFlvaw== 18480\nIGxhdHRlcg== 18481\nIE5J 18482\nIGZ1bmN0aW9uaW5n 18483\nIEhhbWlsdG9u 18484\nIDUx 18485\nIG11cmRlcmVk 18486\nIGFuY2hvcg== 18487\nIGN1Yw== 18488\nIFNDUA== 18489\nIE1hZGFt 18490\nIGNvbnN0cmFpbnRz 18491\nIGJhcm4= 18492\nYW5rZW4= 18493\nIOunjuydgA== 18494\nIE1vdG9y 18495\nIERvaW5n 18496\nIGFtZW4= 18497\nZXR0cw== 18498\nIGluc3RydWN0b3I= 18499\nZWd0 18500\nYWtv 18501\nIHBvc3R1cmU= 18502\naXZpYQ== 18503\nIFBvbGlzaA== 18504\nINC00LLQsA== 18505\nIGNvbG9yZnVs 18506\nIGVsYm93 18507\nIHBhcmxl 18508\nIHBhc3Nlcg== 18509\nIGNvbmRlbQ== 18510\nb3J0YWw= 18511\nIGZlcnRpbA== 18512\n2KfYrw== 18513\nIENvbG9tYg== 18514\nIGFsaWdubWVudA== 18515\nIGFzdHJvbmF1dA== 18516\nIE11dA== 18517\nIHNhbG1vbg== 18518\nIHN0cnVjdHVyZWQ= 18519\nnteo 18520\nIGNsaWNrcw== 18521\nIG1pZWo= 18522\n5pS/ 18523\n44GE44KE 18524\nIFJvdW5k 18525\nIHJhaW5ib3c= 18526\nIFZB 18527\n44GU44GW 18528\n7KeI 18529\nb3R6 18530\nLDwv 18531\nIE5pY29sZQ== 18532\nbGlzaGluZw== 18533\nIHdoaWxzdA== 18534\nIHJlcHVibGlj 18535\nIHRhbWFt 18536\ndmVydGVk 18537\nIHJlY29nbml6aW5n 18538\nINCz0LvQsNCy 18539\nIGR1Yg== 18540\nIEpvcw== 18541\nZmFsbHM= 18542\naWNoaQ== 18543\nIGN6xJk= 18544\nINCm 18545\nIE1pdGNo 18546\nQ1I= 18547\nY2xpY2s= 18548\n44GE44Gm 18549\nIHN0dW5uaW5n 18550\nIEp1bGlh 18551\nbWVycw== 18552\nIFBvbHk= 18553\nIGRlc3Nh 18554\nIGludMOp 18555\nIOqzoOs= 18556\nIGRvxJ8= 18557\nIGRpdmVy 18558\nIHN0cmlraW5n 18559\nYXBob3I= 18560\nIGFwZW5hcw== 18561\nb3VzZXM= 18562\nIHRyYWdlZHk= 18563\nIEZhbg== 18564\nIFR1cmtpc2g= 18565\nIHByb3BoZXQ= 18566\nIGRpc3RhbmNpbmc= 18567\nIEhlbQ== 18568\nIGNhcnRvb24= 18569\nS2U= 18570\nYW50aW5n 18571\nIENsYXJr 18572\n578= 18573\nIGRhdm9u 18574\nIO2F 18575\nIHl1bW15 18576\nIGNvbXByb21pc2U= 18577\nIHN0YXJ0dXA= 18578\ncml0dA== 18579\nIGNlcnRpZmllZA== 18580\nIHBpbGxvdw== 18581\nYmVyZQ== 18582\n7KSA 18583\nIHNlZ3Vpcg== 18584\nIHN0YWRpdW0= 18585\nYXRpdm8= 18586\nIHNpbXBsZXI= 18587\ns7g= 18588\nIHZpc2E= 18589\nIHBhdGh3YXk= 18590\nIG51ZXZv 18591\nIHJheQ== 18592\n44OQ 18593\n6Zw= 18594\nw7bDnw== 18595\nINC30LDQvQ== 18596\nIGNlbGVicml0eQ== 18597\n0LfQsA== 18598\nIGVpbmVz 18599\nIEdpdmVu 18600\nIEFyYQ== 18601\nIEpvYg== 18602\nIHlhaw== 18603\nIEFyYmVpdA== 18604\ncmVzc2luZw== 18605\nw6FuZA== 18606\nIGdyYWJiZWQ= 18607\ncGVuZA== 18608\nIHNpbmU= 18609\naXJr 18610\nINCe0YI= 18611\nIEZsZQ== 18612\naWNoZW4= 18613\n56Y= 18614\nIE5laWw= 18615\n6Jmf 18616\nIHJlcGVhdGluZw== 18617\nIGRyYXdpbmdz 18618\ncmlzZQ== 18619\nIGdsaXR0ZXI= 18620\nZml2ZQ== 18621\nIHN1cnQ= 18622\nIHNpY2hlcg== 18623\nIGFkanVzdG1lbnRz 18624\nIOmCow== 18625\naXBwaQ== 18626\nY2tl 18627\nIHJlcHJlc2VudGF0aXZlcw== 18628\nIG1pZHN0 18629\nIHNwb2ls 18630\nbWV5ZQ== 18631\nIHRhZ3M= 18632\nIHllcA== 18633\nIFN0ZXBoYW5pZQ== 18634\nIGdlcmU= 18635\nIFJ1ZA== 18636\n54s= 18637\nIGdyb3M= 18638\nIHF1ZXVl 18639\nIGFjY29yZA== 18640\nIG9yZ2FuaXNhdGlvbg== 18641\nZW5keQ== 18642\nIFRleHQ= 18643\nw7x5b3I= 18644\nIMOt 18645\nIGNvbmNsdXM= 18646\nIOykgOs= 18647\nIGFtcA== 18648\nIExlc3M= 18649\nIOuQmOuKlA== 18650\nY2Fubw== 18651\nIFBpeA== 18652\nYXBlZA== 18653\nIGRhcmF1Zg== 18654\ndW8= 18655\neW50aA== 18656\nYWJlbA== 18657\nIERvbmU= 18658\nIGRpY2s= 18659\nYXRob24= 18660\nIGhpbGFy 18661\nYWNjbw== 18662\nIOyGjQ== 18663\nIE9yZWdvbg== 18664\nIFdlaWw= 18665\nIG1hdGhlbWF0aWNz 18666\nIGFsbQ== 18667\nIHBpeGVscw== 18668\nIGZyw6Vu 18669\n0LHQvg== 18670\nRkM= 18671\n0L3Rjg== 18672\naGVpbQ== 18673\nZ29z 18674\nIEZvcmdldA== 18675\nZmVuZA== 18676\nIFZvaWzDoA== 18677\nIEdyZWV0 18678\nIM6xz4XPhA== 18679\nIHJlY3Vy 18680\n5pS2 18681\nNTE= 18682\nIOyeiOqzoA== 18683\nQXQ= 18684\nIHlhcmRz 18685\n0LjRgtC4 18686\nIG9mZnNldA== 18687\ncm9sbGluZw== 18688\nINCf0L7RgQ== 18689\nIGVubGlnaHQ= 18690\nIFBhZA== 18691\nbGltaXRlZA== 18692\n0LjQu9GM0L3Qvg== 18693\nIFNhcmE= 18694\nINGB0LTQtdC70LDRgtGM 18695\nbWFydA== 18696\nIEp1bXA= 18697\nIGFkb3JhYmxl 18698\nb3JzZQ== 18699\nY2hlZXJpbmc= 18700\nIGVtcGF0aHk= 18701\nIFRvbmlnaHQ= 18702\nb3Jw 18703\nIEh1bnRlcg== 18704\nUG9pbnQ= 18705\n0LPQsA== 18706\nIHBhc3Nlbmdlcg== 18707\nIEtuaWdodA== 18708\nIHNlZW1pbmdseQ== 18709\naHVo 18710\nIHRoZWF0cmU= 18711\nIHRvbWI= 18712\nIGRlcHJlc3NlZA== 18713\nIHN1bW1vbg== 18714\nIHNhdGlzZmFjdGlvbg== 18715\nZG9vcnM= 18716\nIEhvdXN0b24= 18717\n0LDRjtGJ 18718\nIFJpbw== 18719\n0LPQu9GP 18720\nIGFycmFuZ2Vk 18721\nIGhhbmRsZXM= 18722\nIHRyaWxsaW9u 18723\nIG5pZ2h0bWFyZQ== 18724\nIFF1YW5kbw== 18725\nIG9sZQ== 18726\nIEd1aWRl 18727\nb29v 18728\nIGJpbGU= 18729\nIGVtcGV6 18730\nIDcy 18731\nY3JpYmVk 18732\nIHByb2dyZXNzaW9u 18733\nIExpbnV4 18734\n66as 18735\nIOyymOydjA== 18736\nIGZvc3NpbA== 18737\nIHF1ZXJv 18738\n7Iah 18739\nYXRpdmE= 18740\nIHB1eno= 18741\nIFp1cw== 18742\n44Kq 18743\nIHRocmlsbGVk 18744\nIENC 18745\nIG1pbmVy 18746\n0YDQsNGJ 18747\nIFNBUg== 18748\nIE5vcw== 18749\nINCz0L7RgNC+0LQ= 18750\nIGNhbWI= 18751\nINGC0LA= 18752\nIHJlc3VsdGVk 18753\nIERpY2s= 18754\nb3VuZw== 18755\nIGNvbWljcw== 18756\nIGFic29sdXQ= 18757\nc3Rhbg== 18758\nZGltZW5zaW9uYWw= 18759\nIHRlbnNl 18760\nbXVz 18761\nIEludGVsbA== 18762\nINGN0YLRgw== 18763\nIHBoYXNlcw== 18764\nIHZvbHRh 18765\nIHbDo28= 18766\nYm91bmQ= 18767\nIEFuZGVyc29u 18768\nIGN1cmlvc2l0eQ== 18769\nIHBvbnQ= 18770\n6YCZ6KOh 18771\nIGRlbW9uc3RyYXRlZA== 18772\nb2xpbmU= 18773\nIFNwZWVk 18774\nIG1hbWE= 18775\nIHNob2NraW5n 18776\nIGtpZWR5 18777\nIGVhcnRocXVha2U= 18778\nIGltcGxpZXM= 18779\nIGVudGVycw== 18780\nnoA= 18781\nIGVsZXZhdG9y 18782\nIGRlbGlnaHRlZA== 18783\nIE1pdHQ= 18784\nIEJhc2Vk 18785\nIERvbA== 18786\nIGtlbg== 18787\nIHdvcnJ5aW5n 18788\nIGZpbGVk 18789\nYWlsYW5k 18790\nINC80LXRgg== 18791\nIG1hc2M= 18792\nIM6R 18793\nIEp1bGll 18794\nIGRpbWVuc2lvbmFs 18795\naHVtYW4= 18796\nVG9r 18797\nw78= 18798\nIHVuc3Q= 18799\nIHNldWxl 18800\nIGVtYmFy 18801\nIO2VqeuLiOuLpA== 18802\nYWNpb24= 18803\nIOyJ 18804\nIOu2gOu2hA== 18805\nIGhlYXRlZA== 18806\n4oCm4oCm 18807\nIiE= 18808\nIHJlYWxpc2U= 18809\n0LXRgtGL 18810\naWVuaWE= 18811\naWV6 18812\nIGbDvGg= 18813\nIEVzc2U= 18814\nIHBz 18815\nIGTDsw== 18816\nYXN0ZXJz 18817\nIG9ucw== 18818\nUE0= 18819\nIHJldHJv 18820\nbWFrZXI= 18821\nd2hlbg== 18822\nIGVsbGE= 18823\nIExpdmluZw== 18824\nIExhbQ== 18825\nIHRyb25n 18826\nIGFwcHJvdmU= 18827\nIM64zrE= 18828\nIHN1bmc= 18829\n0LXQvdC40Y4= 18830\nIFJlbW92ZQ== 18831\nw6huZQ== 18832\naXJlbg== 18833\nIHN0cmFuZ2Vy 18834\n0LjQvdGL 18835\nIHbDpg== 18836\nYWZ0ZXI= 18837\nb3R0bw== 18838\nlOuhnA== 18839\nIEFob3Jh 18840\nbWlsbA== 18841\nSVNI 18842\nIGdyYWR1YXRpbmc= 18843\na3Rl 18844\nIHJlbm92 18845\nIHByb2Nlc3NlZA== 18846\na2V5cw== 18847\n0LXQutC+ 18848\nIGVucmljaA== 18849\nIMWfZWs= 18850\nIGluc2Vj 18851\nIE5hbg== 18852\nY2FrZXM= 18853\nIGlsbHVzaW9u 18854\nmOulvA== 18855\nIGFpcmw= 18856\naW1z 18857\nIGFudGVu 18858\n4buvbmc= 18859\nc24= 18860\nIHByZWNpc2E= 18861\n6riw7J6Q 18862\nINin2YTYuQ== 18863\nIGZvcmVtb3N0 18864\nIHBhcmFncmFwaA== 18865\nYXZhaXM= 18866\nINCy0L7RgQ== 18867\nIG1hbnM= 18868\nw61maWM= 18869\nYm90 18870\nINi52YY= 18871\nIGJyb3Ro 18872\nIGFsdGVybmF0ZQ== 18873\nIENoYXB0ZXI= 18874\nIHZlY3RvcnM= 18875\nZXNhcg== 18876\nIGluZGljYXRpb24= 18877\nIE5laW4= 18878\ntoE= 18879\nIGplYW5z 18880\nWUU= 18881\nY29uZA== 18882\nIHVuaXRlZA== 18883\nYWJp 18884\nIFNlcmdl 18885\nIHBhcnRpYWxseQ== 18886\nIG1hY3Jv 18887\n5omN 18888\n5by1 18889\nIGV0aGljYWw= 18890\ncnVpdA== 18891\nIHNoaWZ0ZWQ= 18892\nIGNhYmU= 18893\nIG1hdGhlbWF0aWNhbA== 18894\nIHJ1ZGU= 18895\n15nXldeq 18896\nIE1lcmM= 18897\nIGdhbnpl 18898\naWNpb24= 18899\nIHVuY29uc2Npb3Vz 18900\nIGJ1cm50 18901\nINGA0LXQsQ== 18902\n7Yq46w== 18903\nIGNoYXJt 18904\nYW5kYWw= 18905\n7LKc 18906\nb3RoeQ== 18907\nIEhhZGk= 18908\nIGFwcHJlY2lhdGlvbg== 18909\nRU5E 18910\nIHLDqWFs 18911\ntoTrk6Q= 18912\nIE5hZw== 18913\noKTqs6A= 18914\nIExhdXJlbg== 18915\nIHbhu5tp 18916\nIEJyaWRnZQ== 18917\nIFVtbQ== 18918\nIFdlZw== 18919\nIGNoYXF1ZQ== 18920\nIFNvcGg= 18921\nIGdkemll 18922\n7ZGc 18923\nIHN0ZXI= 18924\nIEJsYQ== 18925\nIHJlZmxlY3Rz 18926\nIGJlbmNobWFyaw== 18927\n0LLQsNGC 18928\nYW1pbmU= 18929\n44Gh44KD 18930\nIGFuaA== 18931\nIGNvbnRpbmVudA== 18932\nIEZEQQ== 18933\n7KGw 18934\nIMOqdGVz 18935\n15nXkA== 18936\n5byA 18937\nIGJsb29keQ== 18938\nIE5pbmU= 18939\naWVsdA== 18940\nZW1hbmQ= 18941\nIOuztOqzoA== 18942\nIHRpZGFr 18943\nIFNjaWVudA== 18944\ncGxleA== 18945\nb3N0ZW4= 18946\nIGFuaW1hdGVk 18947\nYXNzYQ== 18948\nIGRlcml2ZWQ= 18949\nINC40YHRgtC+0YA= 18950\nIE1pZw== 18951\n7IWY 18952\nIHJvcw== 18953\ncGx1cw== 18954\nb3NhdXI= 18955\nIF4= 18956\nIGludGVuc2l2ZQ== 18957\nIGdsb2JhbGx5 18958\nIGRpZmVyZW4= 18959\n7J206rOg 18960\n5L2g55qE 18961\nxIVk 18962\nIGTDqXM= 18963\nIHByZXNlbnRhdGlvbnM= 18964\nIENybw== 18965\nIGVzc2Vz 18966\nIEJldHdlZW4= 18967\nUGE= 18968\nIG5hdw== 18969\n4Lit4LiH 18970\nIGJyZWVk 18971\naWNodGU= 18972\nINCe0L3QuA== 18973\nIEJ1aWxkaW5n 18974\nIGNvbmZvcm0= 18975\nTU8= 18976\nINCW 18977\nIEtpZA== 18978\nbmFz 18979\nIER1ZQ== 18980\ncsOpcw== 18981\nIGRpb3g= 18982\nIEJpbg== 18983\nIHRheGk= 18984\nIHNhcA== 18985\nIEh1Yg== 18986\n54K65LuA6bq8 18987\nIGNlbnRlcmVk 18988\nIHN1cmdl 18989\nIGF2b25z 18990\nIGxlYXJudA== 18991\nIFlhbQ== 18992\nIERpZXNl 18993\n0L3QuNC60Lg= 18994\nIEJlaWo= 18995\nV2lsbA== 18996\nIGF0dGVtcHRlZA== 18997\nIGdyaWVm 18998\nw7Nq 18999\nIGtpZG5leQ== 19000\nIG9wcG9uZW50cw== 19001\n5pu0 19002\nIG5vbWU= 19003\nNTc= 19004\n0Y/RgtC90L4= 19005\nIG1pZG5pZ2h0 19006\nQW5ub3VuY2Vy 19007\nYWNpdHk= 19008\nb25lZA== 19009\nIHB1ZWRlcw== 19010\nIHByb2JsZW1hdGlj 19011\nIGNvcHM= 19012\nIFBldGU= 19013\ncmludA== 19014\ndW50ZWQ= 19015\nIGJpcA== 19016\n5qI= 19017\nIMOA 19018\nIGNlbnM= 19019\nYXRpdmVseQ== 19020\nIOS4jQ== 19021\nIHVyZ2VudA== 19022\nIHN0cnVnZ2xlZA== 19023\nYWNodXM= 19024\nIG1pY3Jvd2F2ZQ== 19025\nIFNpZGU= 19026\nIERlbm4= 19027\nINGP0LI= 19028\nIHVyZ2U= 19029\nIGZvcmNpbmc= 19030\nd2FuZw== 19031\nINC60L7RgtC+0YDQsNGP 19032\nIG1hbW0= 19033\nIPCfjg== 19034\nIHRyaWJlcw== 19035\nIFNoYWRvdw== 19036\nIFNhbmc= 19037\nIEhpdGxlcg== 19038\nIGx1bg== 19039\nIHNjZW50 19040\n7KeR 19041\nIG92ZXJ3aGVsbWVk 19042\nIGJvbWJz 19043\nIGNyaW1pbg== 19044\nIGNvbnNvbGlk 19045\nIG1vbGVjdWxhcg== 19046\n15XXpw== 19047\nbm9y 19048\nIHBlcmNlaXZlZA== 19049\nIHbDqQ== 19050\nIGFsdG9nZXRoZXI= 19051\nIG9ydGg= 19052\nIHZlbQ== 19053\nIHp3YXI= 19054\naXpv 19055\nxas= 19056\nIG1lbHRlZA== 19057\nb3JkZW4= 19058\nIENoYXJsb3R0ZQ== 19059\nIEV4Y2Vs 19060\nYXJ0YQ== 19061\n7Jyg 19062\nIEdldw== 19063\nIHJvbWFuY2U= 19064\nZXJlbW9z 19065\nIGNvbG9uaWFs 19066\nIHRyYWRpdGlvbmFsbHk= 19067\nIHF1YW4= 19068\naG9v 19069\nIGNoYW1waW9uc2hpcA== 19070\nIGFyYml0cg== 19071\n7IWU 19072\nINC80LjQvQ== 19073\nIHNlbGZpc2g= 19074\nIGJsZXc= 19075\ncnlpbmc= 19076\nIG9wZXJhdG9ycw== 19077\nIGp1cmlzZA== 19078\nj4U= 19079\ndWl0aW9u 19080\nIEVD 19081\nIEFueWJvZHk= 19082\ndmF0ZQ== 19083\naWV0aWVz 19084\nIGFuYWx5c3Q= 19085\ntOyXkA== 19086\nINCy0YHQtdCz0LTQsA== 19087\nw6dlaw== 19088\nIEt1bg== 19089\nIGFnaW5n 19090\n1aE= 19091\n0YDQsNGE 19092\nIE1vbWVudA== 19093\nIEh1YQ== 19094\n6IM= 19095\ndGhlbg== 19096\n0LXQu9Cw 19097\nZXN0b25l 19098\nIGVuZGU= 19099\nIGF3YXJkZWQ= 19100\nIG7DpGNoc3Rlbg== 19101\nIFNwb3Q= 19102\nIE5lZw== 19103\nIGZhaXJ5 19104\n5Luj 19105\nIENvdmVy 19106\nIGRlcG9zaXQ= 19107\nIHN0cmVzc2Z1bA== 19108\nIGp1bms= 19109\nIG1ldGFib2w= 19110\nSmE= 19111\nIOq3gA== 19112\nIHVuZGVyZ3JhZHVhdGU= 19113\nIGNhbmNlbGw= 19114\nIGNvbnNlbnN1cw== 19115\nIG9zbw== 19116\n6YeR 19117\n4bq3 19118\nxJ9lcg== 19119\ncmFkYQ== 19120\nIFBhbGFjZQ== 19121\nIHBlZGFs 19122\nIGV4YWdnZXI= 19123\nIGJlaGF2aW9yYWw= 19124\ncGxheWVy 19125\nbGxlcw== 19126\nIGNvbm5lY3Rvcg== 19127\nIHNrZXB0 19128\njZTrnbzqs6A= 19129\nIG1pdHQ= 19130\nIEhhaGE= 19131\nIHBlcXVl 19132\nIEdvdHQ= 19133\nZmFuZw== 19134\n4LA= 19135\nam9z 19136\nIGtpY2tpbmc= 19137\nIG1vdW50ZWQ= 19138\nIHJlcGxhY2luZw== 19139\ndm9z 19140\nIHF1aWV0bHk= 19141\nIG1pbGl0 19142\nIG93bnM= 19143\nIG5pdmVhdQ== 19144\nIGF1cg== 19145\nIEJ1eQ== 19146\nIHByZWRpY3RlZA== 19147\nIGNvd3M= 19148\nIHBvbmVy 19149\nIERyaQ== 19150\nIHJlbWFya3M= 19151\nIHJlcG9ydGVy 19152\nIGFya2FkYcWf 19153\n0LXRgdGC0Lg= 19154\nIHNhdmVz 19155\nIMOnb2M= 19156\nIG1ldGFwaG9y 19157\nIEtlbA== 19158\nc3RhdGlvbg== 19159\nc2VtYmx5 19160\nIGFkdmlzb3I= 19161\nIHdvcmtzaG9wcw== 19162\nIGFjY291bnRpbmc= 19163\nIHRvaw== 19164\nbmllcg== 19165\naW5uZXI= 19166\nIGJ1cmFkYQ== 19167\nIEJC 19168\nIE9seW1waWM= 19169\nIFByYWN0 19170\nQ2hyaXN0 19171\nINGB0Y4= 19172\nIGthcw== 19173\nIHZpZXdlZA== 19174\nIG1hcmtlcnM= 19175\nIGZvdG8= 19176\nZ2V0aWM= 19177\nIEx1Y2Fz 19178\nIHBhZHM= 19179\nIEpvaA== 19180\nIENEVQ== 19181\nYWZmZW4= 19182\nYXJlbQ== 19183\nIEJlY2s= 19184\nIEdvc2g= 19185\nc2hpdA== 19186\n44GM44Go44GG 19187\nIE1hdGVy 19188\nYWJ1bGFyeQ== 19189\nIFJvb20= 19190\nbGxlbg== 19191\nIEZvbGxvd2luZw== 19192\nIGRvaXQ= 19193\nYmFsbHM= 19194\naXhh 19195\nIGdyb3VuZHM= 19196\nIOyeiOuKlOuNsA== 19197\nTFM= 19198\nIHdpbGRsaWZl 19199\nIFNRTA== 19200\nIHNoaWZ0cw== 19201\n5LiA6bue 19202\nQm9vaw== 19203\nIGhvc3RlZA== 19204\nbGxvcg== 19205\nIHNuYXBz 19206\nIGJlc29pbg== 19207\nINep15Q= 19208\nIHBlYW51dA== 19209\nw6RmdA== 19210\nuaA= 19211\nxZts 19212\nQXVkaWVuY2U= 19213\nIEJhcmJhcmE= 19214\nIGFkb3B0aW9u 19215\nIHdvbGY= 19216\nINC+0YHQvdC+0LI= 19217\nYXJkYQ== 19218\nIGV4cG9zZQ== 19219\nIOym 19220\namFz 19221\nxJM= 19222\nIGNvdW50bGVzcw== 19223\nIOyngQ== 19224\naGVhbHRo 19225\ndWVudA== 19226\naXNv 19227\nb3Rpb24= 19228\nIGh1bmdlcg== 19229\nIG1vaXM= 19230\nb2Zmcw== 19231\nIGNsYWltaW5n 19232\nIM6a 19233\nIEJlbGc= 19234\nINC90LDQuQ== 19235\n6riw64+E 19236\nIHVucHJl 19237\nIGdlZA== 19238\nIElv 19239\nINC/0L7RgdC80L7RgtGA 19240\nIGNvxZs= 19241\nIE5hcnJhdG9y 19242\nIMOHb2s= 19243\n7Zmp 19244\n4Lit4Lii 19245\nY2lwbA== 19246\nIHRpbWVy 19247\nIGRlZmlj 19248\nYXZpbg== 19249\nIGNhdGVnb3I= 19250\nIHRocm93cw== 19251\nIOuCnA== 19252\nINC/0L7RgdC70LXQtA== 19253\nIFRoYWk= 19254\nIG1hc2N1bA== 19255\nIGJla29tbWVu 19256\nIGludGVybmF0aW9u 19257\ndWxzZQ== 19258\nIGF5ZQ== 19259\nIHBvaQ== 19260\nIHBpeGVs 19261\nQ2hyaXM= 19262\nIHN0b3Zl 19263\nzr/OuQ== 19264\nIGdlbmVyYXRvcg== 19265\nIOy7rOs= 19266\nIGFjYWRlbQ== 19267\nIHByYWN0aWNlZA== 19268\nIGFxdWVzdA== 19269\nIGNvbnRyaWJ1dGluZw== 19270\nIEln 19271\nIOG7nw== 19272\nIGNvbnRhaW5pbmc= 19273\nIHdyZXN0bGluZw== 19274\nINGH0LXQs9C+ 19275\naGF1cHQ= 19276\nIGVzc2Fz 19277\ndmVsb3Bl 19278\nIGV4Y2VwdGlvbmFs 19279\nWVU= 19280\nIEFwcGxhdXNl 19281\ncmljYW5l 19282\nIGNvbnZlbmllbmNl 19283\nINC00LXQu9Cw0YLRjA== 19284\n0LjQu9C40YHRjA== 19285\nIEVudmlyb24= 19286\nODU= 19287\nIGPDog== 19288\nIOyViOuFle2VmOyEuOyalA== 19289\nIE1P 19290\nIFBvcGU= 19291\nIHNhaA== 19292\nb2Jp 19293\nIG1hc3RlcnM= 19294\nYWluZXM= 19295\nIGJsZXNzaW5ncw== 19296\nIG9iZXk= 19297\nIGZsdXg= 19298\nIGJyb3c= 19299\nIOyLpA== 19300\nIHBvcHVsYXJpdHk= 19301\nIExhbWI= 19302\nemV1Zw== 19303\n7JmU 19304\nj4TroZ0= 19305\naXR1YXRpb24= 19306\nIGFjY29tcGFu 19307\nIGRpYWxvZw== 19308\nIEphbWll 19309\n5Yqg5rK5 19310\nIHNld2luZw== 19311\nIGJsZWVkaW5n 19312\nIGJhaWw= 19313\nIHRocmVhZHM= 19314\nb2RnZQ== 19315\nIFNoYW5n 19316\nIGRlcGxveW1lbnQ= 19317\nY2hlZA== 19318\nIHNhdGlzZnk= 19319\nIGxheg== 19320\nIG1pc3NpbGU= 19321\nIExpbmtlZA== 19322\nIG1ha2Vycw== 19323\nY2l1bQ== 19324\nZnJl 19325\nIOuovA== 19326\nIOustOs= 19327\nIEVkZ2U= 19328\nIHNvY2lldGllcw== 19329\nIGFndWE= 19330\nIHN5bmNocm9u 19331\noaA= 19332\ndW5mdA== 19333\nIHVubQ== 19334\nIHRyaWFuZw== 19335\nIGluanVzdA== 19336\ndG9w 19337\nIG9yYWw= 19338\na29y 19339\nIO2VqA== 19340\nbGRpZ3Q= 19341\nY2XEnw== 19342\ncXVldA== 19343\nIExlbw== 19344\nIHNhdm9pcg== 19345\nIGVhc3Rlcm4= 19346\naWV1 19347\nIGV4cGVk 19348\nINCh0L8= 19349\nIHVubmVjZXNzYXJ5 19350\nIFBlcmZvcm0= 19351\nIE1pbmc= 19352\nINGA0LDQsg== 19353\nIGludGVudGlvbnM= 19354\nIGNvbXByZXNzaW9u 19355\nIFNhYw== 19356\nzr/Ouw== 19357\nYXJzb24= 19358\nIHRyb3V2ZQ== 19359\nIE11aGFtbWFk 19360\nINCy0YvRgQ== 19361\nIGZpbml0ZQ== 19362\nINC90LDRhdC+0LQ= 19363\ndWdh 19364\n0YDQsNC30YM= 19365\nIGNlbGVicmF0ZWQ= 19366\nIGNvbmZlc3M= 19367\nIHNxdWFyZXM= 19368\nIEdvcmRvbg== 19369\nIOuCmOyY 19370\nIHN5bmRyb21l 19371\nIGNvbXBsZXRpb24= 19372\nIGJhY2tpbmc= 19373\nIGRhcmY= 19374\nIFF1cmFu 19375\nIGludGVybWVkaWF0ZQ== 19376\nIGtlcg== 19377\nIGTDvA== 19378\naGVzaXZl 19379\nIGFjY291bnRhYmlsaXR5 19380\nIFJlYmVjY2E= 19381\n6JGX 19382\nIFNsZWVw 19383\nIGRpZmbDqXJlbnQ= 19384\nb2xz 19385\nIFJpY2U= 19386\nIOuzuA== 19387\nIGFudGliaW90 19388\nz4TOrA== 19389\ncno= 19390\nYW1ibGluZw== 19391\nIHNlbnNpdGl2aXR5 19392\nIGNocm9u 19393\nYWxsYXM= 19394\nNjQ= 19395\nIGZsZWV0 19396\nIG9wdGltaXN0aWM= 19397\n0YHQutC+0LPQvg== 19398\nIGphZGk= 19399\nYWlsbGV1cnM= 19400\nIEVub3VnaA== 19401\nIHNlbmlu 19402\nIHBhY2tz 19403\nYm4= 19404\nIEFyZWE= 19405\nIFRybw== 19406\nqOumrA== 19407\n0LDRlA== 19408\nIFRob20= 19409\nIGhhcm1vbnk= 19410\n0L3QuNC60LA= 19411\nIHNvbWVkYXk= 19412\nSVNF 19413\nIEJyb2Fkd2F5 19414\nbGFyZXM= 19415\nZXJuZXNz 19416\n4LmE4Lih 19417\nIFRlbm4= 19418\nIE5BVE8= 19419\n44KK44G+44GZ 19420\nIG1pbnV0b3M= 19421\nIEthbnNhcw== 19422\nIE1vbmc= 19423\nIGNvbXB0ZQ== 19424\n5Zub 19425\niqQ= 19426\nIOyXrQ== 19427\nIHN1cGVyaGVybw== 19428\nIEdhcmRlbg== 19429\nIE1vcw== 19430\nIGF0dGFjaG1lbnQ= 19431\nIGJ1c3Q= 19432\n4K+K 19433\nIFRoYWlsYW5k 19434\nc3RhdA== 19435\nIHNwaWNl 19436\nIExlYg== 19437\nIGxlYXA= 19438\nemVjaA== 19439\nR0w= 19440\nIHZlcmw= 19441\nIGZpeGluZw== 19442\nIOuztOuptA== 19443\nIHBvcm4= 19444\nIGLDvHk= 19445\nINmF2Kc= 19446\nIFZpcnQ= 19447\nIFRvbW15 19448\nIGNhcmdv 19449\nIE9saGE= 19450\nIHJva3U= 19451\n2YPZhg== 19452\nIGJha2Vk 19453\nIHRhY3RpY3M= 19454\nIG1hcmtldHBsYWNl 19455\nIGt0w7NyYQ== 19456\nYXJsbw== 19457\nIHN3aXRjaGVz 19458\nIGNhY2hl 19459\nIEhS 19460\nIEdhbg== 19461\nIEdQUw== 19462\nIGR1YXM= 19463\naGVyZXM= 19464\n0LXRgNGI 19465\ndHJhY2s= 19466\nIGx1bmdz 19467\nU3RhdGlvbg== 19468\naWdnbGVz 19469\nIGNhbXBpbmc= 19470\n5ZOH 19471\nIGNvbXBsZXRpbmc= 19472\nYW1hcw== 19473\nIGN5Y2w= 19474\nIHByb3RvdHlwZQ== 19475\nIEp1ZGdl 19476\nb3R5cGVz 19477\nIGluZmVjdGlvbnM= 19478\noKTr 19479\n0LXRgNCz 19480\nb2Jh 19481\nIEJvZA== 19482\nIFNlY29uZGx5 19483\nIGFwb3N0 19484\nIHNvZ2Fy 19485\nIHJlYXNz 19486\naWVr 19487\n5pa8 19488\nIGFzaGFtZWQ= 19489\nIGN1cnZlcw== 19490\nINCy0LDQtg== 19491\nIGVuc2VtYmxl 19492\nYXR1cg== 19493\nIHBob3RvZ3JhcGhlcg== 19494\nIGVpZ2h0aA== 19495\nIHdhc3RlZA== 19496\n566X 19497\nIGRhbXA= 19498\nINC80LDQuw== 19499\nYXJlbmE= 19500\nIGludGVybmFsbHk= 19501\nIGhlZWxz 19502\nIFNhbHQ= 19503\nIGJsaXI= 19504\niOuCmA== 19505\nIGNvbnRyYXJ5 19506\nIHByaW1h 19507\nIG9zcw== 19508\nIHJhYmJpdA== 19509\nIGF1dG9y 19510\nIGJyb2FkbHk= 19511\nw61zdA== 19512\nIGJhY2tz 19513\n7ZSE 19514\nZXRv 19515\nIGp1cnk= 19516\n6LE= 19517\nIHByb3N0dQ== 19518\nIGJhcmE= 19519\nIHBhcmxpYW1lbnQ= 19520\nb3JpZW50 19521\n0LjQu9Cw0YHRjA== 19522\nIGluZGlyZWN0 19523\nw6Ft 19524\nIMOlcg== 19525\nIHRyYWl0cw== 19526\nIGTDrWFz 19527\n2YTZhQ== 19528\nIENU 19529\nYWx5c3Q= 19530\nIGxpdmVzdA== 19531\nIGtvcw== 19532\nTWF5 19533\nIEppbmc= 19534\nIGpvdXJuYWxpc3Rz 19535\n0YfQuNC6 19536\nYXJtcw== 19537\nIOqwkOyCrA== 19538\nINC40LzQtQ== 19539\nIMOpZ2Fs 19540\nIE5ld3Rvbg== 19541\nIHJlY292ZXJlZA== 19542\nIGJyYXVjaGVu 19543\nIEJyb24= 19544\n0LDQvdC+ 19545\nIHBhbGU= 19546\ncHJpc2Vz 19547\nIGhvcmFz 19548\nY2h0cw== 19549\n6YCa 19550\nw7/Dvw== 19551\nYWtlcnM= 19552\nIEFsYXNrYQ== 19553\nemllag== 19554\nIHNjb29w 19555\n7J206rCA 19556\n44GV44GE 19557\nY29y 19558\nw6lsw6k= 19559\nIHN1cmc= 19560\nIHZpZW5l 19561\nIEtyaXN0 19562\nNTQ= 19563\nIGJhbm5lZA== 19564\nIHNtb290aGx5 19565\nIHRyZWF0cw== 19566\nIHByb25vdW5jZQ== 19567\nIGZsdXNo 19568\nIGNhbWJp 19569\nIG11c2ljaWFu 19570\nIEFzaGxleQ== 19571\nIFNQRA== 19572\nIEJvYmJ5 19573\nIGdsb3Nz 19574\ncmVzcGVjdA== 19575\nIHJldmlld2luZw== 19576\nIGdlbmVyaWM= 19577\nxrDhu5tj 19578\nYXRzw6RjaGxpY2g= 19579\nIGhlYWx0aGllcg== 19580\ndWJlcnM= 19581\nINC00LDQvQ== 19582\nIE1lZGljYXJl 19583\nNTM= 19584\nIGNvbXBsYWludHM= 19585\namFj 19586\nIGFncmljdWx0dXJhbA== 19587\nU3Bl 19588\nIEpvbmc= 19589\nIGRpb3hpZGU= 19590\n6rKo 19591\nZWxpams= 19592\nIFNoaXQ= 19593\nYWludHM= 19594\nIElhbg== 19595\nIFNpbXBseQ== 19596\nIFN0cmU= 19597\n5pyL 19598\nIEdEUA== 19599\nNTk= 19600\nYXN6 19601\nIEthdGll 19602\nINCx0YA= 19603\nIHBlZWs= 19604\nb3d5Y2g= 19605\nIHJlc29ydA== 19606\nIHJlc2lkZW5jZQ== 19607\nIHNwaWNlcw== 19608\nY2nDsw== 19609\nIGplZGVy 19610\nIGVtbw== 19611\nYXJpdW0= 19612\nIHB1ZmY= 19613\n66eJ 19614\n0YPQu9GM0YI= 19615\nIG1ldGE= 19616\nIOyghOs= 19617\nIG9wdGltaXphdGlvbg== 19618\nZ2FuZw== 19619\nIO2VhA== 19620\nIGVmZmljaWVudGx5 19621\nIHZpc3VhbGx5 19622\nIGZyb3N0 19623\nIEFydGh1cg== 19624\nIMW8 19625\nIGFjaGlldmluZw== 19626\nIHJvdGF0aW5n 19627\nIGxpbmluZw== 19628\nIG9jY3VwaWVk 19629\n5byf 19630\nbWVudGF0aW9u 19631\nIHN0cmV0Y2hpbmc= 19632\nIHN0YWxs 19633\nb3N0aWM= 19634\nIFNldmVy 19635\nIGdsdWM= 19636\nIHLDs8W8 19637\nIG91dHJlYWNo 19638\nc3RyYQ== 19639\naWtlbg== 19640\nIOyWmOq4sA== 19641\nIEpvaW4= 19642\nIGltcGU= 19643\nIGNvbXBlbnNhdGlvbg== 19644\nIFRhdA== 19645\nIENhcmxvcw== 19646\nw7xocnQ= 19647\nIEZyYW5jaXM= 19648\nY2pp 19649\neWVhaA== 19650\nIG1lbWJyYW5l 19651\nIGV4aGFsZQ== 19652\nIHJlbGk= 19653\nIE9S 19654\nIHJlZnJpZ2VyYXRvcg== 19655\nIFZlbmV6 19656\nTGlrZQ== 19657\nIHJhaXNlcw== 19658\nb3R0bGU= 19659\nYXR1cmE= 19660\nIHJ1bGVy 19661\nIHdlZXI= 19662\nIGd1aWRlZA== 19663\nIE1hZ24= 19664\nIENvcnBvcg== 19665\njZQ= 19666\nIGF0dHJpYnV0ZQ== 19667\nIFdvYWg= 19668\nIGFycm93cw== 19669\nIGF3YWl0 19670\nIFByaW0= 19671\nIGRpZ25pdHk= 19672\nIE9udGFyaW8= 19673\naXNjaGVy 19674\nIOyLnQ== 19675\naW1lbg== 19676\nb3V2ZXI= 19677\nQVNT 19678\n4buHbg== 19679\nb3B5 19680\nYWNodXNldHRz 19681\nIGVsZGVybHk= 19682\n5Y6f 19683\nRkE= 19684\nIERhaWx5 19685\nc2hpbmU= 19686\nIDU2 19687\n6KI= 19688\naWVybm8= 19689\nIHNraWxsZWQ= 19690\nIGdyb8OfZQ== 19691\nIE9haw== 19692\n56ys5LqM 19693\naWdnbGU= 19694\n0LXQu9C10Lk= 19695\nIGJpcmF6 19696\nIGFyZ3Vpbmc= 19697\nINC/0L7RjdGC0L7QvNGD 19698\nIGRyaWZ0 19699\nIGhhcm5lc3M= 19700\nIGRlaXhhcg== 19701\nYXV0cmU= 19702\nIFNlZWluZw== 19703\nIGNhcGl0YWxpc20= 19704\nIEVsZA== 19705\nemlvbmU= 19706\nIEJleW9uZA== 19707\nIHBlcmZlY3Rpb24= 19708\nIGhvZQ== 19709\nIGRlY2xhcmU= 19710\n0LDQu9Cw0YHRjA== 19711\nIHBva2U= 19712\nINeh 19713\nIGZpZ2h0ZXJz 19714\n6rKg64uk 19715\n0L7RgNC+0LI= 19716\nIGFjY29yZGluZ2x5 19717\nIElzYQ== 19718\nIG9wdGltaXpl 19719\nIE1pbmlzdHJ5 19720\nIHNhZ2U= 19721\n7Iuc66m0 19722\nIGJlbmk= 19723\nIGRvbmF0aW9u 19724\nIGNsZWFyZWQ= 19725\nIEx1Y2tpbHk= 19726\nIGhhcm1mdWw= 19727\ntey7pA== 19728\nIGNlbWVudA== 19729\n0L/QuNGB 19730\nIGRlZGk= 19731\nIENyYWln 19732\nIGRlbW9ucw== 19733\nIGN1c3RvbWl6ZQ== 19734\nIGlnbm9yZWQ= 19735\nIFRpYW4= 19736\nIGhvcGVk 19737\nIEJ1cmVhdQ== 19738\nIHJp 19739\nIFlhaA== 19740\nIHNvY2tldA== 19741\nIGZlYXR1cmluZw== 19742\nIHBhcmY= 19743\nIFRF 19744\nIFRlYWNoZXI= 19745\nIGNhdGFsb2c= 19746\n6rCA7KeA6rOg 19747\nIFNlaXRl 19748\nIGNvbmU= 19749\nIFBhbGVzdGlu 19750\nIGdld29vbg== 19751\nIGdhaW5pbmc= 19752\nINii 19753\nIGNhdGFzdA== 19754\nIG5laWdoYm91cg== 19755\nSVNU 19756\nIHN0ZWFsaW5n 19757\nIHRyb2lz 19758\nIGludGVuZA== 19759\nIFNob290 19760\nIHBpb25l 19761\nIEludGVs 19762\nIExJTg== 19763\nIGJyaWdodGVy 19764\nIFllc3RlcmRheQ== 19765\nIHNvdw== 19766\nc2lu 19767\nb2Rz 19768\nIGV0aGljcw== 19769\nIGludGVydmlld2Vk 19770\ncmVsbA== 19771\nIHJlZnJlc2hpbmc= 19772\nc8Ol 19773\nIGFic3VyZA== 19774\nIHBob3NwaA== 19775\nZmls 19776\nIHN0ZWhlbg== 19777\ndmFscw== 19778\nIGNhcmVk 19779\n5oiW 19780\nIGRlbGw= 19781\nYm9uZQ== 19782\nIGhvY2g= 19783\nIHB1cA== 19784\nIGlv 19785\nIGFjb250ZWNl 19786\nZWxsZXM= 19787\nIFNwbA== 19788\naWdp 19789\nIHTDpG4= 19790\nIGVsZXBoYW50 19791\nIGdhdGVz 19792\nIHNsaWNlcw== 19793\nIHByYW5r 19794\nb2tyYXQ= 19795\nIGhpbGFyaW91cw== 19796\nIFNpZA== 19797\nIOuSpA== 19798\nIGVzc2VyZQ== 19799\nIHRlbGVwaG9uZQ== 19800\naW5hbGx5 19801\ncmF0b3I= 19802\nIGhlbGljb3B0ZXI= 19803\nIGnFn3Rl 19804\nIGdpZA== 19805\nIHRvdXJpc3Q= 19806\nIGNvbmZsaWN0cw== 19807\n0LDRgtCw 19808\nIHTDqQ== 19809\nIGFzc2VydA== 19810\nIGxhdW5kcnk= 19811\nIEJvbQ== 19812\nIHNwZWNpYWxpemVk 19813\nIE1vZGVybg== 19814\nb2dyYWY= 19815\nIGFubw== 19816\nIHJldHJpZQ== 19817\nIFB1dGlu 19818\nIEhBUg== 19819\nINC80LDRiA== 19820\nIM6xz4DPjA== 19821\nIHR1dHRp 19822\nINCy0YLQvtGA 19823\n7Ja1 19824\nIEJ1bA== 19825\n64uk66m0 19826\nxYJl 19827\n5pyL5Y+L 19828\nYXJpbg== 19829\nIHRoZXJhcGlzdA== 19830\nIGfDpXI= 19831\nIEN6eQ== 19832\ncHBl 19833\nbWly 19834\nIFRlcm0= 19835\nIEJlYXI= 19836\nbGFjZQ== 19837\nIE1vcmVvdmVy 19838\nIERpc2M= 19839\nIO2DgA== 19840\nIHRpdGxlZA== 19841\nIHN0cmlwcw== 19842\nIEZhaHI= 19843\nIFJpbmc= 19844\ncmFuZG8= 19845\nYWZh 19846\n6Lqr 19847\nIHNob3J0cw== 19848\nIHRydW5r 19849\nIHNlbnRpZG8= 19850\nz4nOvQ== 19851\nIGFjcmVz 19852\nIG92ZXJk 19853\nIE9seW1waWNz 19854\n5Y+r 19855\nIE1lcmNp 19856\nIOuCmOyYpA== 19857\nIGdlcm0= 19858\nYW1tZWQ= 19859\nIHByZWd1bnQ= 19860\nIE51dA== 19861\nIDwv 19862\nIHRyYXZlbHM= 19863\nIHZvY2FidWxhcnk= 19864\nZXRlbg== 19865\nb2Rlcg== 19866\nIGNvbnN1bWluZw== 19867\nd3JpdGluZw== 19868\n6LaF 19869\nIGFwcGVhcmluZw== 19870\nIGFkanVzdGVk 19871\nc2Vt 19872\nIGZyZW50ZQ== 19873\nIG1heGltaXpl 19874\nIHp3aXNjaGVu 19875\nIHphbQ== 19876\nY29uc2Npb3Vz 19877\nemVr 19878\n6LCi6LCi 19879\naGFv 19880\n7LKY65+8 19881\nIEVwaXNvZGU= 19882\nIHZpc2liaWxpdHk= 19883\nIG1pam4= 19884\nIHZpZWxlbg== 19885\nIEJyb3RoZXJz 19886\n15nXkQ== 19887\nIHbDpGxkaWd0 19888\nIGNydXNoZWQ= 19889\ndWZlbg== 19890\n5L2g5YCR 19891\nYWN0aWM= 19892\nIEJlZA== 19893\nIEZB 19894\naXNzaXBwaQ== 19895\nIHJlbW90 19896\nIHBldHM= 19897\nIHRodW5kZXI= 19898\nIE1hbQ== 19899\n7JW17Luk 19900\ncGFyZW50cw== 19901\nIGLEsQ== 19902\nIHN1cnRvdXQ= 19903\nIHNlZ21lbnRz 19904\nIG5laG1lbg== 19905\nIHV0aWxpeg== 19906\nIFJ1Ynk= 19907\nIHLhu5Np 19908\nIGhhcHBpbHk= 19909\nIGJ1c2g= 19910\ndWx0YW4= 19911\n546p 19912\n2Lg= 19913\nIEhpbA== 19914\nIGxhd24= 19915\nIGV5ZWJyb3dz 19916\nbWV6 19917\nIFN5ZA== 19918\ncmVw 19919\naW5m 19920\n6aCt 19921\nIG92ZXJoZWFk 19922\nY3puaWU= 19923\nIG94aWQ= 19924\nIFdvbA== 19925\nIGRlc3Ryb3lpbmc= 19926\nIEFkZGl0aW9uYWxseQ== 19927\ndW1ibGVk 19928\nZGVw 19929\nIGRlcG9z 19930\nIGNvbW1vZA== 19931\nIGNha2Vz 19932\nIHRhbGVudHM= 19933\nIHBvdXJxdW9p 19934\nIGNvbnRlbXBs 19935\nbmVscw== 19936\n0L7RiQ== 19937\nIEFyYWJpYw== 19938\nIE1hcnlsYW5k 19939\n546L 19940\nb3dv 19941\nIFBsYQ== 19942\nxJ9sdW0= 19943\nIHByb3BoZQ== 19944\nIFJlcHJlc2VudA== 19945\nb3BvbA== 19946\nYWNjb3Jk 19947\nIE1lYW5pbmc= 19948\nIGpvaW50cw== 19949\nIGJyYWtlcw== 19950\nY2t0 19951\nIDE5OTk= 19952\nIHB1YmxpY2F0aW9u 19953\nIFJldmlldw== 19954\n0L7QudC0 19955\nIG5pY2hl 19956\nIHNpZ25pZmljYQ== 19957\nIGRlYnI= 19958\nIG92ZXJsYXA= 19959\nIGRlbWFuZGluZw== 19960\nIFPDsw== 19961\nIHN1YnNlcXVlbnQ= 19962\nIHF1b3Rlcw== 19963\nIEN1cnJlbnRseQ== 19964\nIHByZXZlbnRpbmc= 19965\nIDEzMA== 19966\nIENlbA== 19967\nb25u 19968\nd25pZcW8 19969\n7JW9 19970\nINC60LDQutC40LU= 19971\nQUNI 19972\nIGd1bQ== 19973\nIElzcmFlbGk= 19974\n7Jy864uI6rmM 19975\n5ag= 19976\ncnVrdA== 19977\nIGNsYXBwaW5n 19978\nIE1hc3NhY2h1c2V0dHM= 19979\nIHJlc2lsaWVuY2U= 19980\nIHN1YnNjcmliaW5n 19981\nIGpld2Vscnk= 19982\nZ2VicmE= 19983\nIGNvcnJlY3Rpb24= 19984\nYm9v 19985\n2KY= 19986\nbGlv 19987\nc2Ft 19988\nIGVudmVsb3Bl 19989\na2Fs 19990\nIEZhcm0= 19991\nIGNhdHRsZQ== 19992\nIGJyYXM= 19993\nIHJlcGVudA== 19994\nIHRvbmVz 19995\nb3Npb24= 19996\ncGVjdGlvbg== 19997\nIGRlbmVu 19998\nyJtp 19999\nIE1hcmc= 20000\nIGFjcXVpcmU= 20001\naWJsaW5ncw== 20002\nIGFzcGly 20003\nIHNpemVk 20004\nIGFsYw== 20005\nIHZpYnJhdGlvbg== 20006\ndGls 20007\nZW1pbg== 20008\nIGNvcnJlbGF0aW9u 20009\nIHNpbmd1bGFy 20010\nINC/0L7Rj9Cy 20011\ncmVr 20012\nIGNoYXB0ZXJz 20013\nbWJyZQ== 20014\nIGF1ZGl0aW9u 20015\nw6dhcw== 20016\nIHZhbXA= 20017\nIHRlcw== 20018\nINGA0LDQt9Cy 20019\nIHJlc3BlY3RlZA== 20020\nY2lu 20021\nIGZ1Y2tpbg== 20022\nIMO8YmVyaGF1cHQ= 20023\nINC/0L7QsQ== 20024\nIGFsaWtl 20025\ntog= 20026\ncm9iaQ== 20027\nw650 20028\nIFRvdWNo 20029\nYW56YQ== 20030\nIGZpcm1seQ== 20031\nIEdyZWV0aW5ncw== 20032\nc2NhbGU= 20033\nZGFk 20034\n0LDQutGC0Lg= 20035\nIGJhY2t5YXJk 20036\n0L7QttC0 20037\nR3I= 20038\nIFNURQ== 20039\n0L7RgNGC 20040\nIGjDpHR0ZQ== 20041\nIEZpcnN0bHk= 20042\nIE9mdGVu 20043\nYXN1cmVz 20044\nIGRyYXdz 20045\ncmVkaXQ= 20046\nQVRF 20047\nUGU= 20048\nQ1A= 20049\nIGNvbXBlbGxpbmc= 20050\nIHN1YnNpZA== 20051\nIG5laWdoYm9yaG9vZHM= 20052\nIGRpcGxvbQ== 20053\nIGVudGVuZGVy 20054\ncGVyaW5n 20055\nYXVn 20056\nY2hhdA== 20057\n0J3Rgw== 20058\nIERvbGw= 20059\nIOygkA== 20060\nIGhvc2U= 20061\nbmFy 20062\nIHJld2FyZGluZw== 20063\nIFNvbGQ= 20064\nIHRha2k= 20065\nIGJsYWRlcw== 20066\nIEthdGg= 20067\nIGpvZ28= 20068\nIHNlbnNhdGlvbg== 20069\ndWFuYQ== 20070\ncGVs 20071\nIFJlY2VudGx5 20072\nIHBvbHltZXI= 20073\nIFVQ 20074\nLS0t 20075\nIGhvdmVy 20076\nIHJ1bGVk 20077\n5rW3 20078\nINeU15DX 20079\nIGFmZmVjdGlvbg== 20080\nIMSR4buD 20081\nIGJyZWU= 20082\n56eB 20083\nIExheQ== 20084\nIFlvbmc= 20085\nIHJlY2VpdmVy 20086\nnOulvA== 20087\nIGRpc3Nv 20088\nIFFpbmc= 20089\nIMOpdg== 20090\nIG3DunNpY2E= 20091\nIGFlc3RoZXRpYw== 20092\nIEJyZWF0 20093\nIFRB 20094\nIGFjY3VyYXRlbHk= 20095\nP+KAiw== 20096\nIHdhZ2Vz 20097\ncmF3ZMSZ 20098\nIHN3YWxsb3c= 20099\nIGNvbXBsYWludA== 20100\nIGxpZWQ= 20101\nYmVjdWU= 20102\nIHJlbGF4aW5n 20103\nIFBva8OpbW9u 20104\nIHRlY24= 20105\nYmFuZw== 20106\ns7Ts 20107\nIHF1aWVu 20108\n0L3QvtC80YM= 20109\nIGhhYml0YXQ= 20110\nLi4uLi4u 20111\nYWJsaW5n 20112\nINGC0LDQutC40LU= 20113\nIGJlc29uZA== 20114\nIGVtcGxveWVk 20115\nIGFycml2ZXM= 20116\nIHZlc3NlbHM= 20117\nIEF4 20118\nIGRpc3BsYXlz 20119\nMTUw 20120\nb2xvZ2ll 20121\nIOyXkA== 20122\nIGNsbw== 20123\nINC00L7Qsg== 20124\nINCe0LQ= 20125\nIHZ1ZWw= 20126\n6Iqx 20127\nd2VuZA== 20128\nIHNsaXBw 20129\ndXJw 20130\nIExvdA== 20131\nIGJ1bGxldHM= 20132\nIHJhZ2U= 20133\nIHNraXJ0 20134\naWVudGVz 20135\nIG5o4buvbmc= 20136\nIE5hdHVyYWw= 20137\nIGhpbmQ= 20138\nIHdvcmtsb2Fk 20139\nbXU= 20140\n7YOc 20141\nIHN1bnNldA== 20142\n0LLQvtC7 20143\ncGl0 20144\n5Y2B 20145\nIEFTSA== 20146\nIOu2hOuTpA== 20147\nIGRvd25zdGFpcnM= 20148\n6a0= 20149\nIGNvdW50ZWQ= 20150\nIG5heg== 20151\n15XXpA== 20152\nIFBoaWxpcHBpbmVz 20153\nIDExMA== 20154\nIFBhcmtlcg== 20155\nIGdpdHU= 20156\nIGludGVyZXM= 20157\nIHVtYnJl 20158\nIE5hdHVyZQ== 20159\nIGplcg== 20160\nZW5vcw== 20161\nIHBhbmVsaXN0cw== 20162\nIGNvYXRpbmc= 20163\nIGNoZXJyeQ== 20164\nIFBlbnQ= 20165\nIE1pc3Q= 20166\ncmVnYXRpb24= 20167\nIHZpbmQ= 20168\nIENvcnBz 20169\nIE1pc3Npb24= 20170\nIG5vYmxl 20171\nIGZvbmN0aW9u 20172\nIHdhcnJpb3I= 20173\nIHByb3Rlc3Rz 20174\nb3VyaQ== 20175\nIGNvbnN0aXR1dGlvbmFs 20176\nxYJhbQ== 20177\nIGVtZXJnZWQ= 20178\nIGR5ZQ== 20179\nIFRyeWluZw== 20180\naWdt 20181\n5LiA5Liq 20182\nw6lxdQ== 20183\nTE8= 20184\nIFZlcm0= 20185\nZXJ2aW5n 20186\nIFRJTQ== 20187\nIENp 20188\nIGZyZWV6ZXI= 20189\nIGdydXBv 20190\nIFNwb3J0cw== 20191\nINC/0YDQvtCz 20192\nINmE2Kc= 20193\nb3RoZXJhcA== 20194\naWZmYW55 20195\nYmlhbg== 20196\nIHJhbmtlZA== 20197\nIHByb3Bvc2Fscw== 20198\nIMSRw6J5 20199\nIGZyZWV6aW5n 20200\nIGluc2VjdHM= 20201\ndmls 20202\nIGNvbXBvc3Q= 20203\n546w 20204\nIHNlbWFuYQ== 20205\nIGRpc3Rpbmd1aXNo 20206\nIGZhY2lsaXRhdGU= 20207\nIHBsdXNpZXVycw== 20208\nIHZlcmc= 20209\nIGFsZ3Vucw== 20210\nIFRpa1Rvaw== 20211\nIEV4cHJlc3M= 20212\n0LzQtdC90YI= 20213\nU1U= 20214\nIGludGltYXRl 20215\nIEF1dGhvcg== 20216\nIHdpdG5lc3Nlcw== 20217\nIGthbGF1 20218\nIGFyZ3VlZA== 20219\nIGF2b2lkaW5n 20220\nY3RpdmU= 20221\nIHB1cnN1aW5n 20222\nIHN5bGw= 20223\nw6F2ZWw= 20224\nIEF0bGFudGE= 20225\nIFV0YWg= 20226\nIFRpbGw= 20227\nIGVyZg== 20228\nIDIwMjI= 20229\nw6R0ZXI= 20230\nIGZ1bmVyYWw= 20231\nIEZsYXNo 20232\nIEF0bGFudGlj 20233\nIGdlbGU= 20234\n7KaI 20235\nIG1vcnRnYWdl 20236\nIOuEmA== 20237\nbGljaHQ= 20238\nIGFtYml0aW91cw== 20239\nIEJlaWppbmc= 20240\nIGRpdmluZw== 20241\nIHVuYm94 20242\naWxsYXM= 20243\nIG90cmFz 20244\nIGV2YWM= 20245\nIG1hcmluZQ== 20246\nINGB0L7Qt9C0 20247\nIENyZWF0ZQ== 20248\nIGdq 20249\nIGZyZXF1ZW5jaWVz 20250\naW5ndG9u 20251\nIFJvbWFucw== 20252\nIGFpbWluZw== 20253\nIEJ1ZmY= 20254\nIGVtcGVyb3I= 20255\nIE1vaQ== 20256\nIHByb21pc2luZw== 20257\n44Gc 20258\nIGFsZ3VtYQ== 20259\nIHBhc2E= 20260\nIGRpc29yZGVycw== 20261\nU0k= 20262\nIHN1Y2NlZWRlZA== 20263\nIGN1ZXJwbw== 20264\nIHNvZGl1bQ== 20265\nIHN0dWI= 20266\naGVpcm8= 20267\nIGRlbGF5ZWQ= 20268\nZXRlcmE= 20269\ndHc= 20270\nIHN5bmM= 20271\naGQ= 20272\nIHRvdXJpc3Rz 20273\nIHN5c3Q= 20274\nIG3DqXQ= 20275\nIHF1YWxpZnk= 20276\nIE90aGVycw== 20277\nbGxlcnM= 20278\n0LDRgtC10LvRjNC90L4= 20279\nINCe0L3QsA== 20280\nIHBlcmNlaXZl 20281\nIOqygA== 20282\nIOqwgOyepQ== 20283\nINC40YHQug== 20284\nIE1hdHRlcg== 20285\nIEJsdWV0b290aA== 20286\nIHBlYXJs 20287\nIGFyaXNl 20288\nIG1vbnVtZW50 20289\nINC40LzQtdC90L3Qvg== 20290\nYWdp 20291\n2YTZig== 20292\nIHJobw== 20293\nIHNtYXJ0ZXI= 20294\nIGNvbmo= 20295\n0L7QutCw 20296\nIGtlZW4= 20297\nIFRyZWF0 20298\n0LrQu9GO0Yc= 20299\nIHBhY2tldA== 20300\nZWxzaXVz 20301\nIEFsYWI= 20302\n0LjQvdC4 20303\nIHBzaQ== 20304\nIGVuam95YWJsZQ== 20305\nIEVsbGVu 20306\nINCy0Lw= 20307\nIGVsaW1pbmF0ZWQ= 20308\nIFJvdw== 20309\nIHpvbWJpZQ== 20310\nIEt1 20311\nIHBocmFzZXM= 20312\nIGdyZW4= 20313\ndXRlcg== 20314\nIGRpcmVrdA== 20315\n15Y= 20316\nZW5lbg== 20317\ndXNh 20318\nINGB0LvQvtCy 20319\nxLA= 20320\nIEdo 20321\nIGNvcnJpZA== 20322\nIHF1ZWVy 20323\nIExpbmRh 20324\nIG9uYQ== 20325\nIG9ibGlnYXRpb24= 20326\nZGFy 20327\nINi1 20328\nZW1tZW50 20329\nYWNpZXM= 20330\nIHNjcmV3ZWQ= 20331\nIG5haw== 20332\nIGF5dWQ= 20333\n5LiU 20334\nw6Fy 20335\nbGV6 20336\nIGRyb3du 20337\nIE1lZGljaW5l 20338\nIGxhYnM= 20339\nIGp1c3F1 20340\nIEdvbm5h 20341\nIHRlcnJvcmlzdA== 20342\ncXVlc3Q= 20343\nIGZhcnRoZXI= 20344\nIHJlcGxpZWQ= 20345\nIFNX 20346\nIE1pc3Npc3NpcHBp 20347\naXNobmE= 20348\nIGhvbGRlcg== 20349\nIHJlaWdu 20350\nIGFjY2VwdGFuY2U= 20351\nIHVs 20352\ntow= 20353\nIEhvdGVs 20354\nIENvb3Blcg== 20355\ndGFu 20356\nIEdyYWI= 20357\nIHZhcG9y 20358\nIGFjdGVk 20359\nIEthbmc= 20360\nZmFu 20361\nIOydtOyDgQ== 20362\n55Sa6bq8 20363\ndXRldA== 20364\nIHdvcmR0 20365\nIGZhcm1z 20366\nZGF0 20367\nIGNvdXBsZXM= 20368\nIGJlYWRz 20369\naWVudG9z 20370\nVGhlbg== 20371\n5L+C 20372\nb3NpdHk= 20373\nIFN0YW5mb3Jk 20374\nLi0= 20375\nV2FpdA== 20376\nIGRhdGFz 20377\nb2lyZQ== 20378\nIGhhc2h0YWc= 20379\naW1tZQ== 20380\nIGVuY291bnRlcmVk 20381\nIHNob3V0aW5n 20382\nIHJlc2lzdGFudA== 20383\nIFNldW5n 20384\nIHRyYWdpYw== 20385\nIERyYXc= 20386\nLCw= 20387\nIHNob3djYXNl 20388\nIEFG 20389\nIFN0cmk= 20390\nIGJhY2tlZA== 20391\nINGD0LM= 20392\nINCx0YPQtNGD0YI= 20393\nIENvbGU= 20394\nZXVycw== 20395\nKD8p 20396\nIGVzY2FwZWQ= 20397\nQVNU 20398\nIEFzc2VtYmx5 20399\nIHN0aWNrZXI= 20400\nIG1pZXV4 20401\nIGVudGVydGFpbmluZw== 20402\nIERPTg== 20403\nIEFtZW5k 20404\nIEthcmw= 20405\nIGluaGli 20406\nc3N0 20407\naWVn 20408\nfn5+ 20409\nIGhvb2tlZA== 20410\nIGxpdGVyYWw= 20411\nIHN1bm55 20412\nc3RlcHM= 20413\nIOuwnOs= 20414\nIE1hcmluZQ== 20415\nIHN1ZQ== 20416\nIHByaXNvbmVycw== 20417\nIEVi 20418\nNTg= 20419\nIGRydW1z 20420\nIGd1aWx0 20421\nYWxn 20422\nIGhhcHBpZXI= 20423\nIENN 20424\nIOyVhOuLiOyVvA== 20425\nINCf0LXRgA== 20426\n0YPQu9GP 20427\nIGtleXdvcmQ= 20428\nIFBhcmNl 20429\nIEZvcmVpZ24= 20430\nIEFtYW5kYQ== 20431\n56We 20432\nIOuqqQ== 20433\ncGxlc3M= 20434\niKw= 20435\nw7Ntbw== 20436\nIHF1YWxxdWVy 20437\n7J2065286rOg 20438\nIGNvbnNwaXJhY3k= 20439\nIHN0cmF3YmVycnk= 20440\nIGhhdHRlbg== 20441\nRXM= 20442\nIHNwb3M= 20443\nIHZpbGxhZ2Vz 20444\nIGxldg== 20445\nINGB0YDQtdC0 20446\nIHdha2luZw== 20447\nIGNhbGN1bGF0aW9ucw== 20448\nINmF2Lk= 20449\nIHBvdXJpbmc= 20450\nIGxlYmlo 20451\nIHBvbGlzaA== 20452\nIFRvdXQ= 20453\nIGZ1bmt0aW9u 20454\n0LzQvg== 20455\nIFRp 20456\nIHdhc3Rpbmc= 20457\naXN0aWNhbGx5 20458\nIG1hbmlwdWxhdGU= 20459\nIHNpbXBsaWZ5 20460\nIHRlYW1tYXRlcw== 20461\nINCx0L4= 20462\nIGNvbnRhbQ== 20463\nIFF1aXRl 20464\nIGt1cno= 20465\nIENhbmQ= 20466\ndHlwZQ== 20467\nb3V0aGVhc3Q= 20468\nIGZpbmFuY2lhbGx5 20469\n0L7Qu9C9 20470\nZWxzb24= 20471\nIGZvcmVoZWFk 20472\ndWFnZQ== 20473\nbmF1ZGlibGU= 20474\nIEJlaGluZA== 20475\nIG5lZ290aWF0aW9ucw== 20476\nIOuniOydjA== 20477\nIGFsdGVybmF0aXZlcw== 20478\ncmFuaw== 20479\naG9sZGVy 20480\n5oeJ 20481\nIGhlYWxlZA== 20482\n0YLQvtGH 20483\nIFNwZWM= 20484\n5Lu2 20485\n5LuW5YCR 20486\nIGV4aGliaXQ= 20487\nIHNoYWxsb3c= 20488\nIGdvYg== 20489\nIOuc 20490\nIGZydXN0cmF0aW9u 20491\nw61v 20492\nIG1lbHRpbmc= 20493\nIFN0b3Jt 20494\nIHBhdGVudA== 20495\nIEJhcmNlbA== 20496\nIHBlZGVzdA== 20497\n2YjZhQ== 20498\nIHRhaQ== 20499\nIE1vZGU= 20500\nIHdpbA== 20501\nIOuqqOultA== 20502\nIMOpZ2FsZW1lbnQ= 20503\n6YKj6bq8 20504\nINeQ15c= 20505\nYXlhbg== 20506\nIGFtYXplZA== 20507\n7KeA64qU 20508\nIGhhY2llbmRv 20509\nIOydtOyVvA== 20510\nzrvOsQ== 20511\n4LiC 20512\n0LXRgtCw 20513\nIGV4YW1z 20514\nIHRyYXZlbGxpbmc= 20515\nUHJlc3M= 20516\n0LjRgNGD 20517\nIGJhc2VsaW5l 20518\nIGJ1c2Vz 20519\nIHJlaW5mb3I= 20520\ndmVuYW50 20521\nIFRydXRo 20522\nnb0= 20523\nb2Jl 20524\nIHllbGw= 20525\nIHNhdXNhZ2U= 20526\nVEY= 20527\nIEV2aWw= 20528\nIG1laW5lcg== 20529\n15nXpw== 20530\nIGhvcGVmdWw= 20531\nIHLDs3duaWXFvA== 20532\nIFBlcsOy 20533\ndHdv 20534\nbmRlcg== 20535\nINC80LjRgA== 20536\nIGNvbnNjaWVuY2U= 20537\nIFdhcnJlbg== 20538\naWNreQ== 20539\nIGFpbWVk 20540\nIGfDtnJh 20541\nWFQ= 20542\nIHB5cmFt 20543\nUmVk 20544\n6Zu7 20545\nYXR1 20546\nIEVzdGE= 20547\nIGVhcm5pbmdz 20548\nIGhhdHM= 20549\nIFN0YWR0 20550\naWNrZXQ= 20551\ncG9pbnRz 20552\naW5hbmRlcg== 20553\nIG1vdG9yY3ljbGU= 20554\nIOuPjA== 20555\nIO2VtOyVvA== 20556\na29t 20557\nIERpbmc= 20558\n5pI= 20559\nIHJlY3Vycw== 20560\nIGVzdGltYXRlcw== 20561\nIGRlcm5p 20562\nIHZlcnNjaA== 20563\n44Gd44Gu 20564\nIE1JQw== 20565\n0LjQstCw0YLRjA== 20566\nINC/0YDQvtGI 20567\nIGRvc3Q= 20568\nINCy0YHRgtGA 20569\nIHdpZWw= 20570\nIHNpYmxpbmdz 20571\nINC00LXQsg== 20572\nIGVhcmxpZXN0 20573\nIGZhdGlndWU= 20574\nIG5oaQ== 20575\nIGd1c3Rh 20576\nIGJvbm5l 20577\n5pyA5b6M 20578\nZnJvbQ== 20579\nIEplbm55 20580\nIHN1cHBvc2VkbHk= 20581\naW50YWdl 20582\nIGNvdW50aWVz 20583\nIHVucmU= 20584\nIHBsYW50aW5n 20585\nIEdyYWM= 20586\nIEdlbmVzaXM= 20587\nIEFscGhh 20588\neXN6 20589\nIHRpbGU= 20590\nIOqyveyasA== 20591\nINeZ16k= 20592\ncXVlbA== 20593\nIGRpc3RyaWJ1dGU= 20594\nZGVm 20595\nw6lyYWw= 20596\nIGNsdXRjaA== 20597\nYWRlbHBo 20598\nIFBsYXlTdGF0aW9u 20599\nhLg= 20600\nIHNq 20601\nYnJlYWtpbmc= 20602\nIOuQmOs= 20603\nIEN1YmE= 20604\nIFJ1c3NpYW5z 20605\nIE1BUks= 20606\nIHBlcnNl 20607\nIHJlc3RyaWN0ZWQ= 20608\naWdlcw== 20609\nIFRyYXZlbA== 20610\nIGVsZWN0cm9uaWNz 20611\nIHF1YXJ0ZXJz 20612\nIEtlaXRo 20613\nc2l6ZWQ= 20614\nIGRlYWRsaW5l 20615\nYXJlbnRo 20616\nIHbDrWRlb3M= 20617\nIHByb3RvY29scw== 20618\nYW1tZW50 20619\nIFRyYWluaW5n 20620\nIMOi 20621\nIHNlcXVlbA== 20622\n0L3QsNC6 20623\nIGtlaW5lbg== 20624\nIG1hdHRyZXNz 20625\nbHVkaW5n 20626\nIGNsYXNzaWZpZWQ= 20627\nIHJlYWN0b3I= 20628\nIEtvbnQ= 20629\nIHBhc3Nhcg== 20630\nIGhvbm91cg== 20631\nb3JpZw== 20632\nSU5B 20633\nIE5hdGhhbg== 20634\n0LLQsA== 20635\nINGB0LrQsNC30LDRgtGM 20636\ndMSxcg== 20637\nIGV4Y2x1c2l2ZWx5 20638\nIHNoYWRlcw== 20639\nINC/0YDQvtGG 20640\nIG9jY2FzaW9ucw== 20641\naWph 20642\n55qE5pmC5YCZ 20643\n5Y6y 20644\n5oWi 20645\nZmln 20646\nIHR1cw== 20647\nIHJlbWVt 20648\nIENocmlzdG9waGVy 20649\nIHNsaW1l 20650\nIGFsZ3VuYQ== 20651\nIEZvcnR1bmF0ZWx5 20652\nIGxvcnM= 20653\ndm9sbA== 20654\nYXZlcg== 20655\nIG91dGxldA== 20656\nIExpbmtlZElu 20657\nIEV4ZWN1dGl2ZQ== 20658\nIG9yZ2Fucw== 20659\nIEJlZ2lu 20660\nIO2ZlA== 20661\nIHRyYW5zcGxhbnQ= 20662\ncmFnZW4= 20663\nVk8= 20664\nIEbDtnI= 20665\nINio2KfZhA== 20666\nIEFuZHJl 20667\naXNpbmU= 20668\nIGxhc3Rz 20669\nIGhpc3TDs3JpYQ== 20670\nIGx1eg== 20671\nIGNvbGxhcg== 20672\nIGtpZG5h 20673\nIG9wdGljYWw= 20674\naW92 20675\nIHRvYg== 20676\nIGV4dGVyaW9y 20677\nIG1ldHJpYw== 20678\naWV1cg== 20679\nIHRyb2xs 20680\nINGA0L7Qtw== 20681\n5pif 20682\nIHTDtA== 20683\nIOyYiOyB 20684\nIEdlc2V0eg== 20685\nINC10LQ= 20686\nIGRlbm9taW5hdG9y 20687\n7LM= 20688\nIGxldHQ= 20689\n5YWJ 20690\nIGdyw7bDnw== 20691\n6aGY 20692\nIEx1dGhlcg== 20693\nIHJlc3Rl 20694\nIHJlc2VtYg== 20695\nIHBlcm1ldA== 20696\na3Np 20697\nIGZpc2hlcg== 20698\n44Gf44GE 20699\nIFZvbg== 20700\n7ZS8 20701\nIM+Dz4TOvw== 20702\nIGxvY2tz 20703\nIHNob290cw== 20704\nIGthbXU= 20705\nIEtlcg== 20706\nIE9icw== 20707\n552A 20708\nIGJpbGk= 20709\nIOuwsQ== 20710\nIHRvcnR1cmU= 20711\nYXNzeQ== 20712\nINC40LM= 20713\nIGxhc3Rpbmc= 20714\n5aW955qE 20715\nIHRpZW5lcw== 20716\nIHJlY2VpdmVz 20717\nIE9zY2Fy 20718\nIHJlbWVtYmVyaW5n 20719\nIHByb2JsZW1hcw== 20720\nIGlh 20721\n5Zib 20722\nIG1lbW9yYWJsZQ== 20723\nIGpvdXJz 20724\nIGZhw6dvbg== 20725\nYW1pYw== 20726\nIOu0pA== 20727\nYXRpcXVl 20728\nIOutlOqwgA== 20729\nIHppcA== 20730\naGFsdA== 20731\nIPCfmA== 20732\nIGZyaWVz 20733\nIGZpbmRlbg== 20734\nZ3Jh 20735\n0YDRg9C0 20736\naW1wb3J0 20737\nIOuLrOs= 20738\nIGlraQ== 20739\nIGNvbXBsYWluaW5n 20740\nIGZhemVuZG8= 20741\nIGdvb2dsZQ== 20742\nIHRhYnM= 20743\nIOuTpOyWtOw= 20744\n44Km 20745\ndWdv 20746\naWVydG8= 20747\nYXVmZW4= 20748\nIOuovOyggA== 20749\nIHNrdWxsZQ== 20750\nIHN1aXY= 20751\nIHNweQ== 20752\nIEthaQ== 20753\n6YKj5YCL 20754\nIG1hcnRpYWw= 20755\nIG9uZGVy 20756\n6Kqw 20757\nYXRpbGl0eQ== 20758\nIGlyZ2VuZHdpZQ== 20759\nIGNsYXA= 20760\naW50ZWxs 20761\nIGluc3RhbGxpbmc= 20762\nIHVuaXF1 20763\nIENlbnRyZQ== 20764\nYXN0cw== 20765\ndWFy 20766\nIHJldmlz 20767\nIHRocmVhdGVuaW5n 20768\ncmFpcw== 20769\nIGN1aWQ= 20770\nc2th 20771\nIHJlc29sdmVk 20772\nIHJpZGVz 20773\nIGZhaWx1cmVz 20774\nIHNlbWI= 20775\nIG1hbGVz 20776\nVUZG 20777\n5b6I5aSa 20778\nIHRyw6pz 20779\nYXBwZWQ= 20780\nIG5ld3NwYXBlcnM= 20781\ncmlldA== 20782\nIGFwcGxhdWRz 20783\n0JM= 20784\nIOOBrw== 20785\nIE5D 20786\n5Y2D 20787\n5pmC6ZaT 20788\nIGhldGVy 20789\nIGhhemFyZA== 20790\nIHJ5 20791\nIHN0cmljdGx5 20792\nIDU0 20793\nIOuTpOyWtOqwgA== 20794\nIHNwb250 20795\nIHRhdHPDpGNobGljaA== 20796\nIOunkOyU 20797\nbGF1Yg== 20798\nIGFic29yYmVk 20799\nYWNhxJ/EsXo= 20800\nIG9udQ== 20801\nINCQ0L0= 20802\nIGV4cGxpY2l0bHk= 20803\nIOyerA== 20804\nIEZ1dHVyZQ== 20805\nYWNodGVu 20806\nw6Bv 20807\neW9u 20808\nIHNlcmlh 20809\nIEhlcnJlbg== 20810\nY2Vq 20811\nIEFsYmVydA== 20812\n7J2064qU 20813\nZWN0b3I= 20814\nIHBhY2tpbmc= 20815\nIHZpcnR1ZQ== 20816\nIHZlbmly 20817\nREQ= 20818\nIHlheg== 20819\nIGxvZ3M= 20820\nIFBob3Rvc2hvcA== 20821\nIHNpZA== 20822\nbGluZ3M= 20823\nIHJlbW90ZWx5 20824\nIERpZmZlcmVudA== 20825\nIG9wZXJhdGVk 20826\nbGlnaHRz 20827\nIGRpc2NyaW1pbg== 20828\naXN0YW5jZQ== 20829\nIEdSRQ== 20830\nIHBsYWM= 20831\nIHNoaXJ0cw== 20832\nIGp1c3RpZnk= 20833\nIHRyYWJhbGhv 20834\ndXRpbA== 20835\ndm9j 20836\nIHF1YXJ0 20837\nIM6k 20838\nU0M= 20839\nIFNS 20840\nIC0i 20841\nIGhlc2l0YXRl 20842\nIHBhaw== 20843\n6Iez 20844\nZ3Vh 20845\nSm8= 20846\nIHNvdXZlbnQ= 20847\nIEFuZ2VsYQ== 20848\nZXNzZWU= 20849\nYWRlbHBoaWE= 20850\nYXJrcw== 20851\nIHdlZWQ= 20852\nIGthbm5zdA== 20853\n5YKZ 20854\nIOq3uOufrOuLiOq5jA== 20855\nIHBsdXTDtHQ= 20856\nIENvbW1hbmRlcg== 20857\nIHN1bW1hcml6ZQ== 20858\n4K+A 20859\nIDk4 20860\n44GH 20861\nIGRldmVsb3BtZW50cw== 20862\nIENvc3Q= 20863\nIHRoZW9yZXRpY2Fs 20864\nIG9yZQ== 20865\nIG1ldGFsbA== 20866\nzr/Phc69 20867\nZmFocg== 20868\n0JrQkA== 20869\nIGNodWNr 20870\nIGFkYXB0ZWQ= 20871\nIE9rbGFo 20872\nIE5ldGhlcmxhbmRz 20873\nIHBvZXQ= 20874\nc3Rv 20875\na2F0 20876\nIHdlYXJz 20877\n568= 20878\nIOyWtOuUlA== 20879\nIEVzdG8= 20880\nIGxhdWdoZWQ= 20881\nIGRvbm5lcg== 20882\nIOuNsA== 20883\nIOybkOs= 20884\nb2N1cg== 20885\nIEtpY2s= 20886\nIERldHJvaXQ= 20887\nIGJpY3ljbGU= 20888\nIGxhY2tpbmc= 20889\ncGhhYmV0 20890\nIEtlbmQ= 20891\nQXNz 20892\nIHJldmVhbHM= 20893\nIM6g 20894\nIE5vYWg= 20895\npqzripQ= 20896\nIHNlbGxz 20897\nIEFsYWJhbWE= 20898\nIHRlcnJpZmlj 20899\nIEVsZW1lbnQ= 20900\nIO2G 20901\nIHR1cmJv 20902\nIEhvbQ== 20903\nIHRoZW9yZW0= 20904\nIGFkdmVudHVyZXM= 20905\nIHB1cmNoYXNpbmc= 20906\nIFTDoQ== 20907\nINC80LDRgg== 20908\nIHZlbW9z 20909\nIGR1dGllcw== 20910\nIHdlbmln 20911\nIGJvb3Ro 20912\nIGVudHJhcg== 20913\nVkE= 20914\nIGdlYXJz 20915\nIEphZQ== 20916\nw6hu 20917\nIGNhbGNpdW0= 20918\nIFJvYmVydHM= 20919\nINC/0YDQvtCx0LvQtdC8 20920\nIHJpYmJvbg== 20921\nINC90LDQt9GL0LI= 20922\nIGxhdg== 20923\nIGludGVydmVudGlvbnM= 20924\nIFVsdHJh 20925\nIG5hbWVseQ== 20926\nIGFkZXF1YXRl 20927\nIHJlY2Fw 20928\nIGRvY2s= 20929\nZnRpbmc= 20930\nIHZvaQ== 20931\nIGNvbnN1bHRhdGlvbg== 20932\nINGB0LXQvA== 20933\nIHBvZGVt 20934\nIHBvc3Nlc3Npb24= 20935\nIGNsdWVz 20936\nIFJ1c3NlbGw= 20937\nIHJlbmV3YWJsZQ== 20938\n5Y6y5a6z 20939\nINGD0Lc= 20940\naW5mb3JtYXRpb24= 20941\naWdnZXJz 20942\nV2l0aA== 20943\nd25v 20944\nIGVsYWJvcmF0ZQ== 20945\nY3RvcmFs 20946\nIERvdw== 20947\nIHJhbWVu 20948\n5o+Q 20949\n4buV 20950\nIGVyc3Rl 20951\nIFplbA== 20952\n44OX 20953\nIHF1YXNp 20954\nINC90LDQug== 20955\n56eS 20956\nIFN0YXJz 20957\nIHRyaWJhbA== 20958\nIHNlYXRlZA== 20959\nIHdvbA== 20960\nIGNob2w= 20961\nw6Rtw6Q= 20962\nIG91dGJyZWFr 20963\nIGNyZXM= 20964\nIHVuc2VyZXI= 20965\nIO2RnA== 20966\nIHVuZGVyd2F0ZXI= 20967\nIGFzc3VyZQ== 20968\nT09E 20969\nIG5hcHJhd2TEmQ== 20970\nIGVzdGFibGlzaG1lbnQ= 20971\nIGluY29u 20972\nIGRpZmVyZW50ZQ== 20973\nIGV4Y3Vz 20974\nIERpbQ== 20975\n0L7RhQ== 20976\nIExpbmc= 20977\ncm9sb2c= 20978\nIOOBvg== 20979\nIG91dGRvb3Jz 20980\nbmFq 20981\nIGVwaWRlbWlj 20982\nIHVudGVycw== 20983\nIDMwMDA= 20984\nIEdhYnJpZWw= 20985\nIOyXhuuKlA== 20986\nIGVuY2w= 20987\nIE9kZXI= 20988\nIEZvb3Q= 20989\ncGFz 20990\nIFp1aw== 20991\n5ZOh 20992\nIHdvcmtmbG93 20993\nIHVucA== 20994\nIGFsbGlhbmNl 20995\nZW5zY2hhZnQ= 20996\nIHlvZ3VydA== 20997\n0LjQvdC1 20998\nIGVydQ== 20999\nIGZpeg== 21000\n5LqU 21001\nIGHFnw== 21002\nIGFwcmVuZA== 21003\nIGN1YWxxdWllcg== 21004\nIGNhcnJvdHM= 21005\nxLFuxLFu 21006\nYWZvb2Q= 21007\nIGZsb29ycw== 21008\nIGtleXdvcmRz 21009\nIHNwb3R0ZWQ= 21010\nIGRyYW5r 21011\nIHBhcmFz 21012\nIMO6bHRpbW8= 21013\nIGhhYmxhcg== 21014\nIHByb3NlY3V0 21015\n7JeQ64+E 21016\n6ZaL5aeL 21017\nIMOpcA== 21018\nIHN0aWNrZXJz 21019\nIHB1c2hlcw== 21020\na2g= 21021\nIHJlc3RhcnQ= 21022\nIFRodW5kZXI= 21023\n4budaQ== 21024\nIG11aXRh 21025\nIGZveA== 21026\nYXJkZcWf 21027\nIFphY2g= 21028\nIE1pbmVjcmFmdA== 21029\n57g= 21030\nID09PT0= 21031\nIGfDtnJl 21032\nIHN0YW5jZQ== 21033\naWd1bmc= 21034\n2Y7ZkQ== 21035\na8Ok 21036\nIHRlYWNoaW5ncw== 21037\n6YY= 21038\nIGRlY2F5 21039\nIHJpYw== 21040\nb21lbmE= 21041\nINCy0YHQtdC8 21042\nY2h0ZW4= 21043\nIFZlcnQ= 21044\nIO2VnOq1rQ== 21045\nrLTr 21046\nIGNvYw== 21047\nOik= 21048\na2VpdGVu 21049\nIEJB 21050\nZXRoZWxlc3M= 21051\nIGhlYWRxdWFydGVycw== 21052\nIHNwaWtl 21053\nIEJhc2U= 21054\nIDEwMQ== 21055\nIGNvb3JkaW5hdGVz 21056\nIHRhcmQ= 21057\nIGJvaWxlZA== 21058\nIE1vbnN0ZXI= 21059\nIG5vdGVib29r 21060\nIOq0gA== 21061\nIFdha2U= 21062\nIFNldHRpbmc= 21063\n7J207Jc= 21064\nIFN5ZG5leQ== 21065\nIEZpbm4= 21066\nIGxvYmJ5 21067\n5b6e 21068\nIHNlbmlvcnM= 21069\n0L3QuNGF 21070\nYXZhbg== 21071\nIEpF 21072\nIHRyYWZm 21073\ndGhpbms= 21074\nIHNsYXA= 21075\nIENhc3RsZQ== 21076\nqW5n 21077\nIGFsZ3Vub3M= 21078\nIFBlcnNvbmFsbHk= 21079\nIE1hbGU= 21080\n7Yuw 21081\nIEdlbmVyYWxseQ== 21082\nIFBlbA== 21083\nIGRpYXM= 21084\nIGV2b2x2aW5n 21085\naXRvbA== 21086\n0LLQvtGA 21087\nIHBsZWlu 21088\nIGZsaWdodHM= 21089\nIGVsZXZlbg== 21090\nb3dlag== 21091\n4buRbmc= 21092\nIGFrdQ== 21093\nIGdsYW5jZQ== 21094\nIGNvbm5lY3Rpdml0eQ== 21095\nIGJhbGQ= 21096\n0YvRhw== 21097\nIGludGVzdA== 21098\nw6Fn 21099\nIEdSw5w= 21100\naWJsaWNhbA== 21101\nIFBhcGE= 21102\nIHBpdHk= 21103\nIGZhaW50 21104\nIHd1cmRlbg== 21105\nIGxlZ2FsbHk= 21106\nIHByZXk= 21107\nIFNjaWVuY2Vz 21108\nINC/0YDQvtGB 21109\nIHRyYWluZXI= 21110\nIHByb2Jsw6htZQ== 21111\nIGtpbG8= 21112\n0LrQvtCz0L4= 21113\nIGJyaWRnZXM= 21114\nODk= 21115\nIGxhc3RlZA== 21116\nIGVsZWdhbnQ= 21117\nYm93cw== 21118\nIHBhbGFi 21119\nIGRpcmVjdG9yeQ== 21120\n5LiN5pyD 21121\nIGJ1bGI= 21122\ncGVvcGxl 21123\nSVg= 21124\nIGdlYg== 21125\nIDY2 21126\nIFRlbm5lc3NlZQ== 21127\nYWhsZW4= 21128\naWV2YWw= 21129\nIGNhdXQ= 21130\nIERhbWVu 21131\ncGxv 21132\naWFuZQ== 21133\n0LDQu9C1 21134\nYXR0YW4= 21135\nINin2YTYsw== 21136\nIHJpc2t5 21137\nIHNsZWV2ZQ== 21138\nIGluY2lkZW50cw== 21139\nIOuwlQ== 21140\nQ28= 21141\nIGFwcGxpY2FibGU= 21142\nIGltcGVyaWFs 21143\nIFBoaWxpcA== 21144\nIFllYQ== 21145\n0LXRgNC+ 21146\nINC/0L7QutCw0Lc= 21147\nw7xuZQ== 21148\n7JiA 21149\nSHVi 21150\ndG9y 21151\nIHNpZ3U= 21152\nY2VuZA== 21153\nIHBvbGl0aWNhbGx5 21154\nIOyCtA== 21155\nIHBhcnM= 21156\nIG91dg== 21157\nIHByaW1laXJh 21158\nIFNoYWg= 21159\nIHNhdHVy 21160\nIGNvbWJ1c3Q= 21161\nIHByb21vdGVk 21162\n7KO86w== 21163\n5oCV 21164\nIHRlbXBsYXRlcw== 21165\nIOuLrA== 21166\nIGhhdWw= 21167\nINGC0LXRgA== 21168\nIHNsaWRpbmc= 21169\nY2VkZW50ZWQ= 21170\nIOOBrg== 21171\nY2hpbGRyZW4= 21172\nTVI= 21173\nIFdlaQ== 21174\nIGLDtnI= 21175\n5pep 21176\nIHByw7N4aW1v 21177\nYXLDrWE= 21178\nIHNhbXBsaW5n 21179\n0LXQu9C10L0= 21180\nZXNp 21181\nIERhbmllbGxl 21182\nIE9rbGFob21h 21183\n6IU= 21184\n55WM 21185\n0LXRgdC/ 21186\nIERWRA== 21187\nINCy0YvQvw== 21188\ncm91cw== 21189\nY29ucw== 21190\nIGVuaGFuY2Vk 21191\n6Zuj 21192\nIHBhc3Rvcg== 21193\nIFN1ZGRlbmx5 21194\n6K6T 21195\nZmFy 21196\nUEVS 21197\nIE5n 21198\nMTAwMA== 21199\nIGNoZXc= 21200\nIHJ1bW9ycw== 21201\nIEFuYQ== 21202\nIGFubsOpZXM= 21203\nINGD0YHRgg== 21204\nIFBoaWxhZGVscGhpYQ== 21205\n5Zev 21206\n0LXQttC00YM= 21207\nIGVmZmVjdGl2ZW5lc3M= 21208\n6L+Z5qC3 21209\nw6l0w6k= 21210\nIGRpbmc= 21211\nIHJlbGlnaW9ucw== 21212\nIGFnZWQ= 21213\nemllxIc= 21214\nIFJpYw== 21215\nIEthcA== 21216\nIFBhZ2U= 21217\nIHPDvA== 21218\nIG7DpG1saWNo 21219\nIG1hbmtpbmQ= 21220\nIHJlc3Rpbmc= 21221\nIGluZmx1ZW5jZXM= 21222\nIFNjaHVs 21223\nINC90LXQsg== 21224\nIG1hbmE= 21225\nIGNvbnN1bWVk 21226\nIFBvbQ== 21227\n576O5ZyL 21228\nIGNvbnNlZ3Vpcg== 21229\nIFRoYW5rc2dpdmluZw== 21230\nIEhpbmR1 21231\nbGFpcw== 21232\nIHRocml2ZQ== 21233\nIGNvbnRvdXI= 21234\n0LDRhtC40Y8= 21235\nIGZhbGFuZG8= 21236\nIErDoQ== 21237\nemFu 21238\n0LjRgtGD 21239\naXBoZXI= 21240\namFtaW4= 21241\nIEhhbGxv 21242\nIDE2MA== 21243\nINC+0YHQvtCx 21244\nIG1ldGU= 21245\nIOyVjOs= 21246\nIEJhcmNlbG9uYQ== 21247\nbGV0dGVy 21248\nINCd0LXRgg== 21249\n5Zk= 21250\nIGFkZW3DoXM= 21251\nIGNvb3JkaW5hdGlvbg== 21252\ndW50cw== 21253\nIHNsb3A= 21254\nINC/0YDQuNC0 21255\n7KeA66eJ 21256\nIHF1ZXN0aW9uaW5n 21257\nIGRpZXNlbA== 21258\nIGRlag== 21259\nIGFmZmlybQ== 21260\njZTrnbzqs6DsmpQ= 21261\naWVubmU= 21262\nIGNyYW5r 21263\nIHByZWRpY3Rpb25z 21264\nIHBoeXNp 21265\nY2hzZWw= 21266\nIGNvbWJpbmF0aW9ucw== 21267\nIGV4Y2VsbGVuY2U= 21268\n6YCZ6bq8 21269\n4bud 21270\nd2lkdGg= 21271\nd2VlZA== 21272\nhOulvA== 21273\nhOuniA== 21274\nIGFsdG8= 21275\nIGRhaXJ5 21276\nIE5vcm1hbA== 21277\ncHBlbg== 21278\nIG9iZW4= 21279\nIGRldmFzdGF0aW5n 21280\nIHBveg== 21281\nIEh1cw== 21282\nbWF6 21283\nIHdhcm5lZA== 21284\nIGRlbms= 21285\nIEF1c3M= 21286\nIHRyYWRlcw== 21287\naGVsbA== 21288\nIHByaW1lcm8= 21289\nIG1pYQ== 21290\n0LLQsNGA 21291\n2KjZig== 21292\nIGtpY2tz 21293\nIGHEnw== 21294\nIE3DvA== 21295\nIGx1Yw== 21296\n0LXQvdC40LXQvA== 21297\nIFN0YW5kYXJk 21298\ncmljZQ== 21299\nIEN1Yg== 21300\nIGdvdQ== 21301\nIEpvw6Nv 21302\n0YPRgdC6 21303\nIGVucXU= 21304\no4w= 21305\nZ2V3 21306\nIO2BsA== 21307\nb3dhbmlh 21308\naWFuaQ== 21309\nIGZha3Q= 21310\n0Y/QvdC4 21311\nIGJlZg== 21312\nIHRodW1ibmE= 21313\nIGNldXg= 21314\n5q2h6L+O 21315\nYXBwbGU= 21316\nTkVO 21317\nIGdhZA== 21318\nYXBvbg== 21319\nIEZhbnRhc3RpYw== 21320\nIGNvbmNlbnRyYXRlZA== 21321\nZ2lybA== 21322\nbGVuZQ== 21323\nINCU0LvRjw== 21324\nIMOpdGE= 21325\nYWFu 21326\nIG91dHRh 21327\nIG5hcmM= 21328\nIEJvZHk= 21329\nYnJ1c2g= 21330\nIGxlZ2lzbGF0aXZl 21331\nIE1lZ2Fu 21332\nIG1pc3Rha2Vu 21333\nIE1pc3NvdXJp 21334\nIGxhYmVsZWQ= 21335\n0LvRj9C10YLRgdGP 21336\nIHJlYWxpc2Vk 21337\neW9yc3Vu 21338\n44GC44KK44GM44Go44GG 21339\nIFNhZmV0eQ== 21340\nIGFjY2VsZXJhdGU= 21341\nIHNhbmN0aW9ucw== 21342\nIHBlZQ== 21343\nIGp1ZWdv 21344\nIHBlcHBlcnM= 21345\nIHdhbA== 21346\n6riJ 21347\nZWxsb3c= 21348\nINC20LXQvQ== 21349\nIGNpbmNv 21350\nINGB0LjRgdGC 21351\nY292ZXJ5 21352\nIGdyYW0= 21353\nIMOpcG8= 21354\nIEJNVw== 21355\naXZvbA== 21356\nIENoZW0= 21357\n55qE6Kmx 21358\ndXNlbWVudA== 21359\nIFN1cHBvc2U= 21360\nIOqwgOyngOqzoA== 21361\nIG1pbGxlbm4= 21362\nIFR1bg== 21363\nIG1lZGFs 21364\nIGhhY2lh 21365\nIHN0aW11bHVz 21366\nIGJyaWdodG5lc3M= 21367\nYWllbnQ= 21368\nIEhhbmRz 21369\naW5ldA== 21370\nIGNvYWxpdGlvbg== 21371\n5a24 21372\nIHJpc2Vz 21373\ncmluYQ== 21374\nIHNjb290 21375\nIOOBpw== 21376\nIGRlZmVuZGluZw== 21377\nIGludmVycw== 21378\nIGhpbGxz 21379\nIGZ1bGZpbGxlZA== 21380\n5Yiw5LqG 21381\nbGxpZQ== 21382\nIGFkb2xlcw== 21383\nIENoYXNl 21384\n5Zac5q2h 21385\nIEpK 21386\nIG5ldWVu 21387\nIFRydQ== 21388\nIGluaGVyaXQ= 21389\nIHNpeHR5 21390\nIEV4cA== 21391\nIENsYXk= 21392\n0L7RgdC+0LE= 21393\nYXJuYQ== 21394\nIEltcGVyaWFs 21395\nINGN0YLQsA== 21396\nIHNvY2lhbGx5 21397\nYXR5 21398\nb2R5bmFt 21399\nIHJpYnM= 21400\nb21pYw== 21401\nIFRvbA== 21402\n0L7Qu9C2 21403\nIDE5OTg= 21404\nIGZyYW0= 21405\nIHJhbmtz 21406\nINCx0YPQtNGD 21407\nIENvbG9u 21408\nSHo= 21409\nIGFjY29tbW9kYXRl 21410\nIGV4cGxvZGU= 21411\n7YSw6w== 21412\nSEFFTA== 21413\nIEhhcnQ= 21414\nINC20LjQt9C90Lg= 21415\n5qE= 21416\nIGRlbGljYXRl 21417\noNeX 21418\nIHRvZnU= 21419\nIGFjaGlldmVtZW50cw== 21420\nIFNvcg== 21421\nIGFncmVlbWVudHM= 21422\nIDU3 21423\nIHRhbXA= 21424\nIGZyYW7Dp2Fpcw== 21425\nIGhlcmJz 21426\nY29ybg== 21427\nIGtvbms= 21428\nQU5B 21429\nIFFp 21430\nIHByw7Nw 21431\nIHRpZ2Vy 21432\nIOuRmA== 21433\nxINt 21434\nIGFwcHJlbnQ= 21435\nYWhhbg== 21436\nIHJ1bGluZw== 21437\nIHRzcA== 21438\nIHR3aXR0ZXI= 21439\nIHRlZW5hZ2Vy 21440\nYnVz 21441\nIO2S 21442\nIEFtZW5kbWVudA== 21443\nIHRhcHBpbmc= 21444\nIEFQSXM= 21445\n5aC0 21446\nIG1hdGNoZWQ= 21447\n66m0 21448\nV0E= 21449\nIEJlYXV0eQ== 21450\nIGluZXZpdGFibGU= 21451\nIGdhc2Vz 21452\nINm+ 21453\naGlnaA== 21454\nIE9wdA== 21455\nIHByZWRvbWlu 21456\nz4HPjA== 21457\nIHR1YmVz 21458\nIOyVoA== 21459\nIEFh 21460\nIOaciQ== 21461\nb21ldG93bg== 21462\nIElN 21463\nIGRlc2Fy 21464\nw6RyZW4= 21465\nINC80LDRgQ== 21466\nIE3DtmdsaWNo 21467\nIHJlbnRhbA== 21468\nIO2VqOq7mA== 21469\nIERpYW5h 21470\nIGF1dGlzbQ== 21471\nIFB1ZXJ0bw== 21472\nxLFsZA== 21473\nIGZhbGFu 21474\nIGRyZWFtaW5n 21475\nIGd1dGU= 21476\nINC60LDQvA== 21477\nIHdyZWNr 21478\nIHN0b3J5dGVsbGluZw== 21479\nIExlZ2VuZA== 21480\nIFVrcmFpbg== 21481\nINC/0YDQvtC40YE= 21482\nIFNL 21483\nIO2WiQ== 21484\nIMWbd2k= 21485\nIEJlbGlldmU= 21486\nIG1vc3RyYXI= 21487\nIFRvZGQ= 21488\nIE5pZ2Vy 21489\naWN0aW5n 21490\naGFyZA== 21491\nOi8v 21492\naXJhYmxl 21493\naWdhdGlvbg== 21494\nIE1lbWJlcnM= 21495\nIOygnO2SiA== 21496\nIGRpc2NvdXI= 21497\nn70= 21498\ncmlrYQ== 21499\nIERO 21500\nIEZpZg== 21501\nIENhcGl0YWw= 21502\n0YDQvtC8 21503\nIFNhbnM= 21504\neXVu 21505\nIHBpbG90cw== 21506\nIHRyYXQ= 21507\nIG55dA== 21508\nIOuvvA== 21509\nIGV4cG9uZW50aWFs 21510\nIGVtZXJnZQ== 21511\nIHRyYWplY3Rvcnk= 21512\nINC/0L7Rh9C10LzRgw== 21513\nIHNlYWxlZA== 21514\nYXR0aQ== 21515\nIHdpZGVz 21516\nINC+0LPRgA== 21517\naWFuY2Vz 21518\nIHdpdG5lc3NlZA== 21519\nT3I= 21520\nb3Np 21521\nIEpvZWw= 21522\nb25hbA== 21523\n6IG9 21524\nIEludGU= 21525\nY2VkZXM= 21526\nIEdvdHRh 21527\nYW5pdW0= 21528\nIGZlbWFsZXM= 21529\nIExlYmVucw== 21530\nIG1vaXN0dXI= 21531\nIFNpbXBsZQ== 21532\nIERvY2g= 21533\nYXLDoQ== 21534\nIGdlc2VoZW4= 21535\nVVNU 21536\nxqFp 21537\nIGNsYXNzaWZpY2F0aW9u 21538\nIGRpYWdvbmFs 21539\nIHBlcm1ldHQ= 21540\nY29tcA== 21541\nINin2YTYrQ== 21542\nIE1hbGF5cw== 21543\nIGdlaMO2cnQ= 21544\nIHBvcHBlZA== 21545\nIGNvbnRhY3RlZA== 21546\nINeb15w= 21547\nIDE0MA== 21548\nIGFkYXB0YXRpb24= 21549\nIG1hbnVz 21550\nIHR1cmtleQ== 21551\nIHByZWFjaA== 21552\nYnJpZ2h0 21553\nIGRvd25z 21554\nIHVucHJlY2VkZW50ZWQ= 21555\nIG1pZ2h0eQ== 21556\nIGNhdGVy 21557\naXR0aQ== 21558\nZ3M= 21559\nIERlcHV0eQ== 21560\nd3JpdGU= 21561\nIEJsZXNz 21562\nw6Fj 21563\nIHN1bW1pdA== 21564\nIOuPvOyalA== 21565\nIHRob3VnaHRmdWw= 21566\nIHNocmVk 21567\nc2luZ2luZw== 21568\nINC70YPRh9GI0LU= 21569\nIHllbg== 21570\nIHZpYnJhbnQ= 21571\nIFdhbHRlcg== 21572\nIGhvc3Rz 21573\nIGFtYnVs 21574\nIGludmFzaW9u 21575\nb2dhbg== 21576\nIHJlYXNvbmluZw== 21577\nIHN1Y2M= 21578\n0LvQtdC60YI= 21579\nIGZhbGE= 21580\nIGtpbmdz 21581\nIGdvaW4= 21582\nIGNhbGli 21583\nIEdSw5xORU4= 21584\nb3Rlcg== 21585\nIGVpbno= 21586\nIGluc3VsaW4= 21587\niqg= 21588\nIHNjYWxpbmc= 21589\nIENvcm4= 21590\naHlk 21591\nIG1hdHRl 21592\nUEw= 21593\nIGFsaWVucw== 21594\nIFNlZw== 21595\n6K+d 21596\nZXN0aQ== 21597\nYXN0aWNz 21598\nIHdhcm1lcg== 21599\nIGluZ2Vu 21600\nIE1M 21601\nIHJvZGU= 21602\nIEV5ZQ== 21603\nYmVpdHM= 21604\nIEJhcm4= 21605\nwrss 21606\nIENodWNr 21607\nIHByb2ZpdGFibGU= 21608\ndWd1ZXNl 21609\nIEFyYWJpYQ== 21610\nIGNvY28= 21611\nIHB1ZWRv 21612\nIGluZmxhbW1hdGlvbg== 21613\nY2xpcA== 21614\nIHRhYmxlc3Bvb25z 21615\nIOygkQ== 21616\nIFN3ZWQ= 21617\nIGFuYXQ= 21618\n7Iig 21619\nIGFycmli 21620\nIGRhbmNlcg== 21621\nIENhcnRlcg== 21622\nIG1hZ25pZmlj 21623\nc3RvcmU= 21624\n6YG4 21625\nIGZhZGU= 21626\nIGFjY29tcGFueQ== 21627\nIHdhaHI= 21628\nIHllYXN0 21629\nIG1pbmVyYWw= 21630\nIGxlZ2lzbGF0dXJl 21631\n5L2P 21632\naXJvcw== 21633\nIGNyb3dkZWQ= 21634\n0YDQsNGI 21635\nb2NhZG8= 21636\n7Ja07JW8 21637\nIO2bhA== 21638\nIEJhcnJ5 21639\nbWFzdGVy 21640\nIG5pY2tuYW1l 21641\nICIuLi4= 21642\nIFJz 21643\nIE1vb3Jl 21644\nIHZlbnVl 21645\nINCx0YM= 21646\n44Oh 21647\nbGlob29k 21648\nIEFnZW5jeQ== 21649\n0LvQvtCy 21650\nIGthaA== 21651\nIOyGjOumrA== 21652\nIG1hcnNo 21653\nIGluY29ycG9yYXRlZA== 21654\nYW50d29ydA== 21655\nIGtpbWNoaQ== 21656\nIHdvbw== 21657\nIGRpc3RyYWN0ZWQ= 21658\nZXJpZXM= 21659\nIGluZm9ybWFjacOzbg== 21660\nIENob29zZQ== 21661\nIEphZGk= 21662\nIGFuYWxvZ3k= 21663\nc2F5 21664\ndWZmbGU= 21665\nYm9r 21666\nIGFjaWRz 21667\nIGFjcXVpc2l0aW9u 21668\nIHZhcmlhbnRz 21669\n6LW35L6G 21670\nIHBhc3NpZXJ0 21671\n7J2064KY 21672\ncnVjdGl2ZQ== 21673\nYnJpZw== 21674\nIOOAjA== 21675\nZXBoZXI= 21676\nIHBI 21677\ndXRsaWNo 21678\n5beu 21679\nIHJlbGll 21680\ndWl0ZQ== 21681\nIHJlY2VwdGlvbg== 21682\nIGNvaA== 21683\nIFByZXA= 21684\nIGFudGljaXBhdGU= 21685\n5oCn 21686\na2Vl 21687\nIGRlc2lnbmF0ZWQ= 21688\n0Y/RgtC4 21689\nIEtvcg== 21690\nIEFuaW0= 21691\nw7xobA== 21692\nIFdoaXQ= 21693\nIHVuY292ZXI= 21694\nIE1heWE= 21695\nINGC0L7Qs9C00LA= 21696\nsJU= 21697\ndXRlbmFudA== 21698\nIOyWvOs= 21699\nIGZvcmVzdHM= 21700\nIG1lbWU= 21701\nIGRpc3Rpbmd1aXNoZWQ= 21702\nIE1hcng= 21703\nIExpb24= 21704\nIHNlcnZhbnRz 21705\nIERpYW0= 21706\n55W254S2 21707\nIFBvbGljeQ== 21708\njbw= 21709\nIHRyaWdnZXJlZA== 21710\nYWJpbGly 21711\nIOydkQ== 21712\nIG5lZ290aWF0ZQ== 21713\nIGZleg== 21714\nIGVydw== 21715\nIHZhcmllcw== 21716\nIGplbWFuZA== 21717\nIGRpc2NoYXJnZQ== 21718\n0YHRj9GH 21719\nIFBBUg== 21720\nIEFmZmFpcnM= 21721\nIHZvdGVy 21722\nIGF0ZW4= 21723\nIGNyb2lz 21724\nb2JpbA== 21725\nIE9vcHM= 21726\nIEFyYw== 21727\nIEhlYXRoZXI= 21728\nYW5rYQ== 21729\nIHNpbXBsZXM= 21730\nzr/OvQ== 21731\nIj4= 21732\nIGNob3Jkcw== 21733\nIFNhbmRlcnM= 21734\nIOu2hOs= 21735\nQmVu 21736\nIGRhcsO8YmVy 21737\naWxpYW5z 21738\nIG9yZGVyaW5n 21739\nIE1hbmg= 21740\nIGtpbG9ncmFt 21741\nIGthcsWf 21742\nIGdyYXNw 21743\nIGdob3N0cw== 21744\nYWxlbg== 21745\nIEplZGk= 21746\nINCx0LvQuA== 21747\nIGRvd25sb2FkZWQ= 21748\nIGNvbmR1Y3Rpbmc= 21749\nIEhhaw== 21750\nIHJlc2VhcmNoZXI= 21751\naWxhbg== 21752\nZ29vZA== 21753\nIEhhbm5haA== 21754\nIGTDvMWfw7xu 21755\nIE1lc3NpYWg= 21756\ndWl0eQ== 21757\naW9uYQ== 21758\nIHByb2JhYmxl 21759\nIFlF 21760\nIGluZGVwZW5kZW50bHk= 21761\nIGJ1ZmZlcg== 21762\nYnVybg== 21763\nb3VyZA== 21764\nIE1jSw== 21765\nIGxpbmd1 21766\ndWplbXk= 21767\n0LXRgNGC 21768\nIGludHVpdGl2ZQ== 21769\nIGNyYWNrcw== 21770\nYXBwcm9wcmk= 21771\nbnR5 21772\nIGdlZW4= 21773\nIGxlbmQ= 21774\nIGNlcnRpZmljYXRpb24= 21775\nSURT 21776\ndW50ZXI= 21777\ncGVlcw== 21778\nIHRydW1w 21779\nIGJhbmtydXB0 21780\nIGZlYXM= 21781\n6Jc= 21782\nIGR1xbw= 21783\n5riF 21784\nIHZpcnVzZXM= 21785\nIDU4 21786\nZ29k 21787\nINC20LXQuw== 21788\nIHN0YWxr 21789\nSW5k 21790\nYWNoaQ== 21791\nIENG 21792\nIENvbmQ= 21793\nIHNhbmN0 21794\nIGNvbnRlbg== 21795\nIGZyZWVk 21796\nIFJU 21797\nIG1lbnRvcnM= 21798\n7KGx 21799\nIHBvcnRhYmxl 21800\nIFBhdWxv 21801\ncmFuZQ== 21802\nSEFIQQ== 21803\nIFNlY3Rpb24= 21804\n54Y= 21805\naHl1bg== 21806\nIM6tz4c= 21807\nIFB1Yg== 21808\nIEluZGVwZW5k 21809\nIGNvbXBvdW5kcw== 21810\nINGB0Ys= 21811\nIG1lc3NhZ2luZw== 21812\nIGRlZGljYXRpb24= 21813\nIG5vdGljaW5n 21814\nIGRldm90ZWQ= 21815\n0Y7RgtGB0Y8= 21816\nIHNuYWtlcw== 21817\nIGJhdHRsZWZpZWxk 21818\ncGVycw== 21819\nIGRlbGE= 21820\nOTI= 21821\nIGhhaQ== 21822\naWxsw6Q= 21823\nw6lyZXI= 21824\nZXZlcnk= 21825\nIHJlc3BvbnNpdmU= 21826\n15nXlQ== 21827\nb3Bm 21828\n6Yk= 21829\nirg= 21830\nQmVjYXVzZQ== 21831\nIHRvdXJpc20= 21832\nIOq3uOqyjA== 21833\n15XXpg== 21834\nIGNhbnM= 21835\nc3TDvHQ= 21836\nIGRvbm5l 21837\nIERpb3M= 21838\nIFViZXI= 21839\nYWN0b3J5 21840\nIG9yaWVudGVk 21841\nIEhlcm0= 21842\nIHBhdHJvbg== 21843\ndXJm 21844\nYmVp 21845\nIHByb2dyYW1h 21846\nIE9oaA== 21847\nZ2VuZXI= 21848\nIGZpc3Q= 21849\nIFdlbmR5 21850\nIGFuZGE= 21851\nIGd1ZXNzZWQ= 21852\nIGZyZWFr 21853\n5Lit5ZyL 21854\nIEtpbmdz 21855\nY2hvb2w= 21856\nIG9mZmxpbmU= 21857\nIEluZGlhbmE= 21858\nIEFsbGlhbmNl 21859\nIDUz 21860\nIHBhcnRpY3Vs 21861\nIEZvY3Vz 21862\nIGluaGFiaXQ= 21863\nIOqwmeydgOuNsA== 21864\nIE1jRw== 21865\nb3dza2k= 21866\nIOydtOqxtA== 21867\nIHBhxYRzdA== 21868\n0L7QvdC4 21869\naXR0YQ== 21870\nIGNvbmZpcm1hdGlvbg== 21871\nIEJyb29rbHlu 21872\nIG5vb2RsZQ== 21873\nZnVuZA== 21874\naXR1ZA== 21875\nIGdyYW5kcGFyZW50cw== 21876\nIGJhcmJlY3Vl 21877\nzrXOuc+C 21878\nIOE= 21879\nIGJhbGxvdA== 21880\nIFZldGVy 21881\nIHBpcGVz 21882\naWdpb3Vz 21883\nIEdyYXBo 21884\nZXN0ZWQ= 21885\nIOu4jOs= 21886\nIEtF 21887\n44Gh44KH44Gj44Go 21888\nIGVpbnM= 21889\nIGhhdHJlZA== 21890\n44GR44Gp 21891\nIGRhbmc= 21892\nZWVlZQ== 21893\nIGFyY2hhZQ== 21894\nIEplc3Nl 21895\nIGRldGVjdGVk 21896\nIHNlbmk= 21897\nYnVyZ2g= 21898\nIGRpc3BsYWNlbWVudA== 21899\nIGRvcA== 21900\nIGNvbmRpdGlvbmluZw== 21901\nINC90LXRgdC60L7Qu9GM0LrQvg== 21902\nIGRpc3R1cmJpbmc= 21903\nUEg= 21904\nIHRoaW5uZXI= 21905\nIHdvdW5kZWQ= 21906\nIEN1YW5kbw== 21907\nIGN1c2hpb24= 21908\nIHdoaXRlcw== 21909\nIHByZWZlcmVuY2Vz 21910\nIOykgOu5hA== 21911\nIGthxbw= 21912\nIEdhdGU= 21913\nIFBhdGg= 21914\nZGxlcw== 21915\n4LiE4Lij 21916\naW1vcmU= 21917\nIOuztOyXrA== 21918\nIGRpc2NpcGxpbmVz 21919\n4buP 21920\nIG1lc21h 21921\nIOyDiOs= 21922\nIOyLrA== 21923\nIGdpbmc= 21924\nIHVtYnJlbGxh 21925\nSUdIVA== 21926\nIHBlbnNpb24= 21927\nIGNvbWJpbmluZw== 21928\nU1M= 21929\nIHJlY3RhbmdsZQ== 21930\n4buHdA== 21931\nIHByb3hpbQ== 21932\nIENvdw== 21933\nuIw= 21934\nIGludGVudGlvbmFs 21935\n5pWZ 21936\nIGRlY2lk 21937\nINGB0LrQsNC2 21938\nIFVtYQ== 21939\naWFzbQ== 21940\nYnV6 21941\nIGRlYnJpcw== 21942\nIGNhc3M= 21943\nIFByb3A= 21944\naXNrYQ== 21945\n66Cl 21946\nZXN0ZXJvbA== 21947\ndXNzaWFu 21948\n7J20656R 21949\nIHVubGltaXRlZA== 21950\nIGFkbWlyZQ== 21951\nIHRpZ2h0bHk= 21952\nIGdlbm9tZQ== 21953\nIEp1bmlvcg== 21954\ndmVuaXI= 21955\nZ3Vz 21956\nIGPEgw== 21957\nIFZsYWQ= 21958\nIO2C 21959\nIHJlbGF0aXY= 21960\naW5jaQ== 21961\nIGF1bnF1ZQ== 21962\nIEJveXM= 21963\n0YbQuNC+0L0= 21964\nIFN3aXNz 21965\nIHBoeXNpY2lhbnM= 21966\nIO2PiQ== 21967\nIFBFVA== 21968\nIHdvdW5kcw== 21969\nYWJvdXQ= 21970\nw6Bp 21971\nb256 21972\ndXJpdGllcw== 21973\nINGD0LLQuNC0 21974\n5bem 21975\nIG1lbnRhbGl0eQ== 21976\nIHZhcmlhbmNl 21977\nIHNlZ3VuZGE= 21978\nIHZvbGNhbm8= 21979\nYWxpZQ== 21980\n4KWH 21981\nIHRpbGVz 21982\nIFRlcnJ5 21983\nINin2YTZhNmH 21984\nIGNhbm9u 21985\nIHNjYXR0ZXJlZA== 21986\ncHRvbg== 21987\nIGRlZmluaXRpb25z 21988\nIGFsZ2VicmE= 21989\nb3Rlbg== 21990\nYWJsbw== 21991\naWp1YW5h 21992\nIHdyYXBwaW5n 21993\nIHNlc2FtZQ== 21994\nINC90LDRh9C40L3QsA== 21995\nIEFsZg== 21996\nINCg0L7RgdGB 21997\nb3Jubw== 21998\nIGFua2xl 21999\nIHNwZWNpYWx0eQ== 22000\nIGF0dGVtcHRpbmc= 22001\naWxpYXRpb24= 22002\nIDE5MjA= 22003\nIHBoZW5vbWVuYQ== 22004\nIFByb2R1Y3Q= 22005\nIEJ1Y2s= 22006\nIEF3dw== 22007\nc2Vlbg== 22008\nIHZvaWQ= 22009\nIEZyYW5rbGlu 22010\nIGFkdm9jYWN5 22011\nIFNlcA== 22012\nIGNvb2xlc3Q= 22013\nINGB0YDQsNC30YM= 22014\nIFF1YW5k 22015\nIDkwMA== 22016\nIFRyYWQ= 22017\nZGllcw== 22018\nIGhhc2g= 22019\n5oiR5bCx 22020\n5Lmf5piv 22021\nIHBvdHM= 22022\nIHNhZGx5 22023\nIHZpYWJsZQ== 22024\nIFRpZ2Vy 22025\nIE9ORQ== 22026\nIG5ldXJvbnM= 22027\nb3dhbmll 22028\nxJc= 22029\nIFNoYXI= 22030\nIExhbmRlcw== 22031\nIGNvbmZlcmVuY2Vz 22032\n6Kmy 22033\nIGNyZWRlbnRpYWw= 22034\nIGxpbWU= 22035\naW5lZQ== 22036\neGl0 22037\ncGF5 22038\nIGluY29ucw== 22039\nID4+Og== 22040\n6KqN 22041\nIO2emOs= 22042\nIGxlc3Nlcg== 22043\nIHNwaWxs 22044\nIHByZW1pc2U= 22045\nIDM2NQ== 22046\nIEhvc3Q= 22047\nIHRvbWFy 22048\n15DXnA== 22049\n67KI 22050\nIFdoYXRz 22051\nIGxpZ2h0d2VpZ2h0 22052\nIE1hcA== 22053\nZmlh 22054\nZWxsc2NoYWZ0 22055\nIHZlbmRvcnM= 22056\ndWVzdG8= 22057\nIE1pc3Rlcg== 22058\nINCf0YDQuA== 22059\n5Y+z 22060\naG1h 22061\nIGludGVudGlvbmFsbHk= 22062\nIFRhbmc= 22063\n6Zeu 22064\nIGlkZW50aWZpY2F0aW9u 22065\nIGV0Y2V0ZXJh 22066\nIE5lZQ== 22067\nINGC0YDQuA== 22068\n6re4 22069\nIGNyeXB0b2N1cg== 22070\nIGluaGFsZQ== 22071\nIGFkZGljdA== 22072\n5ZCE5L2N 22073\nIG1hdQ== 22074\nINGC0LDQutCw0Y8= 22075\nIOuyhA== 22076\nIGNvbXByYXI= 22077\naWVkemllxIc= 22078\nINC+0YLQvdC+ 22079\nIGJlZ2lubmVy 22080\nINC80YPQtg== 22081\nIG9ic2M= 22082\nIGxpbWl0aW5n 22083\nYXNjdWxhcg== 22084\nIGluc3BlY3Rpb24= 22085\nYWNp 22086\nIHJlam8= 22087\nTXVz 22088\nIHphdGVu 22089\nIHN6Y3o= 22090\nIE1hZHJpZA== 22091\nIHZhcmlldGllcw== 22092\nIGVzdMOg 22093\nIFNoYWtlcw== 22094\nIGtpdHM= 22095\nIGFkbWluaXN0ZXI= 22096\nIGxhdmE= 22097\nIGfDpQ== 22098\n6Kmm 22099\n16rXmQ== 22100\nIFdheW5l 22101\nIGluc3RhZ3JhbQ== 22102\nIHJhdGVk 22103\ncGFwZXI= 22104\nIGJpbGQ= 22105\nIHByZXRlbmRpbmc= 22106\nIG9ic2VydmluZw== 22107\nINGB0LDQvNC+0Lw= 22108\nIHRyb3I= 22109\nIG9yZ2FuaXNtcw== 22110\nIGZhbHRh 22111\nIGhvbWV0b3du 22112\n57E= 22113\nIO2L 22114\nIGNoZWc= 22115\nIOyh 22116\nIGNvbW1h 22117\naXPDqQ== 22118\nIGxpa2VsaWhvb2Q= 22119\nYXZvcmVk 22120\nIGdlbGRp 22121\n0L3QuNC60L7Qsg== 22122\nIG1lZGlv 22123\nIGpha2ll 22124\nIEp1cA== 22125\nIGdyZWVuaG91c2U= 22126\nIHNwaXQ= 22127\n0LrQvtC1 22128\nINC60LDQtg== 22129\nIEdyYW0= 22130\nIENvbmZlcmVuY2U= 22131\nIGRlZmljaXQ= 22132\nc8Sxbg== 22133\naW5zZQ== 22134\ndcSf 22135\nIHJpY2h0 22136\nIGNvaW5jaWRlbmNl 22137\n5Y+N 22138\nIGV1cm9w 22139\nIGJ1dHRlcmZseQ== 22140\ncHJlYWQ= 22141\nIOyWvA== 22142\n6IC2 22143\nIHdhdmVs 22144\nIEluZmlu 22145\nIFBsYW5ldA== 22146\nIHNlbGZpZQ== 22147\naWVudHJhcw== 22148\nIGFycm9n 22149\nb3Nlcg== 22150\naWRhbA== 22151\noNeX16DXlQ== 22152\nw7x0w7xu 22153\nIGZyZXNobWFu 22154\nIE1hY2hpbmU= 22155\nz4PPhA== 22156\nIERpYQ== 22157\n7J2064uk 22158\n44GT44GG 22159\nbmVh 22160\nIGxpc3Rpbmc= 22161\nIGNvbmZpZ3VyZQ== 22162\ndXRvcg== 22163\nVXA= 22164\ndHNjaGFmdA== 22165\ncmnDqHJl 22166\nIHVwd2FyZHM= 22167\nINGF0L7Rh9GD 22168\nIHN3ZWVw 22169\nQnI= 22170\nIGV4cHJlc3Npbmc= 22171\nIHVuaGFwcHk= 22172\nIG1hbmRhdG9yeQ== 22173\nZ2VuZGVy 22174\nIEHDrQ== 22175\nIGluZGljYXRvcnM= 22176\nIG9pbHM= 22177\nbm90ZQ== 22178\nIHNlZ3Vy 22179\n0L7QttC10YI= 22180\neW5hc3R5 22181\nIGRpc3RhbmNlcw== 22182\nIG1lcmdl 22183\nQkVSVA== 22184\nIHN1cnJlbmRlcg== 22185\nIGJ1YXQ= 22186\nIEF3YXJkcw== 22187\nIHNlw7Fvcg== 22188\nb2RveA== 22189\nIGZsYXZvdXI= 22190\nIGFiZG9t 22191\nIGNvbmZpZ3Vy 22192\nODY= 22193\nIERJWQ== 22194\nIHJpZ2lk 22195\nsJg= 22196\nIGNvcnBvcmF0aW9u 22197\nIGdyb29t 22198\namF3 22199\nIE5lYXI= 22200\n0LjQu9C+ 22201\nIG9wZXJh 22202\nIElubm92 22203\n0LjRgNCw 22204\nk7E= 22205\nIHNwZWNpZmllZA== 22206\nIGNvc20= 22207\nIEZyZWVkb20= 22208\nIGNsb3du 22209\nIE5lbQ== 22210\nINCy0L7Quw== 22211\n0ZHQvQ== 22212\nIGNoYXJnZXI= 22213\n4LmB4Lil 22214\nIGluZmx1ZW50aWFs 22215\nw6RzaWRlbnQ= 22216\n6aQ= 22217\nIOyEoOs= 22218\nIHZvbHVtZXM= 22219\n5pA= 22220\nIG91dHJhcw== 22221\nIFR3aXRjaA== 22222\nIGZvdW5kaW5n 22223\nIGF3aGlsZQ== 22224\nIGNvaWw= 22225\n6rCZ 22226\nIGPhuqM= 22227\nIFRocm93 22228\nIEhlbmNl 22229\nb21tdA== 22230\nIEJlbmphbWlu 22231\n0LPQu9GP0LQ= 22232\nVGltZQ== 22233\nb2JpYw== 22234\nIG1vdXI= 22235\nIGRyZWFk 22236\nIEzDoA== 22237\nIENoaWxl 22238\nIHByZXZhbA== 22239\nIHZhaW4= 22240\nIGFydMSxaw== 22241\nIHByZXNlcnZlZA== 22242\nINC+0YLQtA== 22243\nIHdhcmVob3VzZQ== 22244\nIGJlc3Rl 22245\nIFNldmVyYWw= 22246\nIFNpdHVhdGlvbg== 22247\nIGNhcmRib2FyZA== 22248\nVG9k 22249\nZXJuYQ== 22250\nIGdhcmFudA== 22251\nIGdlc3R1cmU= 22252\nIGhlbg== 22253\nIHNwZWxsaW5n 22254\nb3NleHVhbA== 22255\nIGFubmU= 22256\nIG1pY2U= 22257\nIE1laW5l 22258\nY2FyZA== 22259\nIHJlYmVsbA== 22260\nIGNlcnRv 22261\nIOycoOs= 22262\nIHZlcnNjaGllZA== 22263\nIEJvcw== 22264\nIGludmVudGlvbg== 22265\nIHRyemU= 22266\nIG1hbmnDqHJl 22267\nIENoYWQ= 22268\nIHNwcmU= 22269\nIG9yZ2FuaXNhdGlvbnM= 22270\nIHBvb3JseQ== 22271\nIGFudGVyaW9y 22272\nIHN0YWly 22273\n0LrRgA== 22274\nIGF0b21pYw== 22275\nIHN5bXBhdGg= 22276\nIGNvbnRpbnVhbGx5 22277\nIGtsZWluZQ== 22278\nw6h0ZQ== 22279\n0LjRiQ== 22280\nzr/Pgg== 22281\ncGV1dA== 22282\nIHJlcG9zaXQ= 22283\nIGVudHJh 22284\nRW0= 22285\nIGZpbmFuY2luZw== 22286\nINC80L3QvtCz 22287\nIHRoZXNpcw== 22288\nIENvbXB1dGVy 22289\nZWF1 22290\nIFRyZWU= 22291\nIGJyaWRl 22292\nb25zaWV1cg== 22293\nc2hpcmU= 22294\nd2lj 22295\nREU= 22296\nIOyImOs= 22297\nIGFjb20= 22298\nIFBP 22299\nZXJzY2g= 22300\nINC/0L7QvNC+0Yk= 22301\nIEFybWVu 22302\nIOyjvQ== 22303\nIHpvcg== 22304\nIHByaW50cw== 22305\nIERhc3M= 22306\n5riv 22307\nIGR1cmFibGU= 22308\nIFRyYW5zcG9ydA== 22309\n7J6Q6rCA 22310\nINC70LXQsw== 22311\nIGTDqXQ= 22312\nw7RsZQ== 22313\nYW1vdXM= 22314\nWU4= 22315\nIGNsaWZm 22316\nIGdyYW1tYXI= 22317\nINCf0L7RjdGC0L7QvNGD 22318\nIGzDoG0= 22319\nZXNjaA== 22320\nIG1pc2VyYWJsZQ== 22321\nIHZvbHRz 22322\nIENhZA== 22323\ndWthbg== 22324\n0YLQuNCy 22325\ncnVzdA== 22326\nIOyYrOudvA== 22327\nIHZlcms= 22328\nIGNoaWNrZW5z 22329\nIFlvbw== 22330\nIG91dGZpdHM= 22331\nY29kZQ== 22332\nIGhpZXJhcmNoeQ== 22333\nbmV0ZXM= 22334\nIGNvdW50ZXJwYXJ0 22335\nIHTDtGk= 22336\nIHRlZA== 22337\nIEJhcnQ= 22338\nIOudvA== 22339\nIEdlbmF1 22340\nIGluY29taW5n 22341\nIEFCQw== 22342\ncmlxdWU= 22343\nINC+0YLQvw== 22344\ncXVhbA== 22345\nIGluY2VudGl2ZQ== 22346\nIGlocmVu 22347\n16DXmQ== 22348\nbG9l 22349\nIDE5MzA= 22350\nIGJhcmc= 22351\nIGRpY3Rpb24= 22352\nIMO2bmNl 22353\nSU5T 22354\nIHJlaA== 22355\naXNpYWo= 22356\nbW91dGg= 22357\nIHNjb3Jpbmc= 22358\nbMSxaw== 22359\nIOyVhOyjvA== 22360\nT1JJQQ== 22361\nIEVzdGFkb3M= 22362\nIGNvbXBhbmlvbg== 22363\nIGFzc2VtYmxl 22364\nIHB1bmlzaGVk 22365\nIGl0YWw= 22366\nIHByZXZlbnRz 22367\naXN0ZXM= 22368\nIEtlbnR1Y2t5 22369\nIGxvY2F0ZQ== 22370\nIGZhc3Rpbmc= 22371\n44Go5oCd 22372\ng4A= 22373\nIFNlYg== 22374\nIENyb3du 22375\nb3BpYQ== 22376\nIHdoaXA= 22377\ndXN6 22378\n0LrQsNC80Lg= 22379\nIGRhdGFiYXNlcw== 22380\n5a2X 22381\nIHByb3NlYw== 22382\nIDE5OTc= 22383\nIOyCtOynnQ== 22384\nIFNvbGFy 22385\nIFB1ZXM= 22386\nIFplbg== 22387\nb2xsbw== 22388\nIEd1cnU= 22389\nIHNxdWVleg== 22390\nINCX0LA= 22391\nIMSN 22392\nY2VwdGlvbnM= 22393\nY2Nh 22394\naXphYmxl 22395\nbWFuZA== 22396\nIGJyZWFrdGhyb3VnaA== 22397\nIHRhYmxlc3Bvb24= 22398\nIFNFQw== 22399\naWto 22400\nIFPDo28= 22401\nINC/0LvQvg== 22402\nYW1lbg== 22403\nIHByYWM= 22404\nIGRhcmxpbmc= 22405\nIHRhbGxlcg== 22406\nIHJlbmRlcmluZw== 22407\nIOyasOumrOqwgA== 22408\nIM+EzrfPgg== 22409\nIG3Dow== 22410\nIGVzb3M= 22411\ndWVyZG8= 22412\nINGB0YfQuNGC 22413\nYWxsZXI= 22414\n7JeI7Ja07JqU 22415\nIG1pbGxvbmVz 22416\nbGVyaW4= 22417\nIHBlZ2Fy 22418\nb25uZQ== 22419\nIGVucm9sbG1lbnQ= 22420\nIGxpZWd0 22421\nIGJvYQ== 22422\nd2nEmQ== 22423\nYnNw 22424\nIGN5Y2xpbmc= 22425\nIEJlcm5pZQ== 22426\nIDE5ODk= 22427\nINC00LDQu9GM 22428\nIERha290YQ== 22429\nINGB0LLRj9C3 22430\nIENQ 22431\nIHN0YXJl 22432\n7YKk 22433\nIHByb3NwZXJpdHk= 22434\nIGFycmFuZ2VtZW50cw== 22435\nIGFycml2aW5n 22436\nbcOk 22437\nIGtheWFr 22438\naXB0 22439\nIHBhcmRvbg== 22440\nIHJlbGF0 22441\nIHZlcnN0ZQ== 22442\nIEZpZw== 22443\nIGZvaWw= 22444\nIFRhbGtpbmc= 22445\ncGVhcmU= 22446\nIG5vaQ== 22447\nINC/0YDQuNGI 22448\nIGhvY2tleQ== 22449\nIGFkbw== 22450\nIE9VVA== 22451\nNjc= 22452\nIGhvcm1vbmVz 22453\nIEF2ZW51ZQ== 22454\nIFN1cGVybWFu 22455\nIHByZXNjcmlwdGlvbg== 22456\ndWJlcm5ldGVz 22457\nQ0w= 22458\nb3RpdmU= 22459\nTklT 22460\naWVuZW4= 22461\nIHNhZG5lc3M= 22462\nIFZpdA== 22463\nVHk= 22464\nIHN0YXJ0ZXI= 22465\nIGJlZGU= 22466\nIGZvdW5kYXRpb25z 22467\nIHNvcmU= 22468\n5bqX 22469\n0YnQtdGB0YLQsg== 22470\n7Jqw6w== 22471\nINGH0YPQsg== 22472\nbGluaw== 22473\nIG1hbmV1 22474\nd29ya2luZw== 22475\nw6Bu 22476\nIEF0dGFjaw== 22477\nIENhcnQ= 22478\ndmVpcw== 22479\nIFJlc3A= 22480\nZW5zaW5n 22481\nIOyii+yVhOyalA== 22482\nIGVzY3VjaA== 22483\nIFJOQQ== 22484\ngrQ= 22485\nIGFkb3A= 22486\nIGJlbmRpbmc= 22487\n2LnYrw== 22488\nIG1hbmFnZXM= 22489\ndXNw 22490\nIHRhcnQ= 22491\nIHJvdXRlcg== 22492\nQm8= 22493\nIGVzdGFibGlzaGluZw== 22494\nIGJhbGFuY2luZw== 22495\nIGF0aGxldGlj 22496\nIFNsbw== 22497\nIGZpbGxz 22498\nINC90LDQsQ== 22499\nINC00LDQuw== 22500\nIHBvc3Nv 22501\nIFZpZWxlbg== 22502\nIGNyaXRpY3M= 22503\nIGxhd3N1aXQ= 22504\nIElzYWFj 22505\nINGE0LjQu9GM0Lw= 22506\nIHRyYXM= 22507\nIHByYXc= 22508\nIENyYXp5 22509\nIG5ldQ== 22510\nIGt1bGw= 22511\nIHR1bW9y 22512\nIEFQUA== 22513\nZ2F0ZQ== 22514\nIEFSRQ== 22515\nOTg= 22516\nIFN0ZWFt 22517\nIGZ1Y2tlZA== 22518\nbGFnZQ== 22519\nIOKZrA== 22520\nIE1E 22521\nZnk= 22522\nIHNoZWxscw== 22523\nIFNlZW1z 22524\naXplcnM= 22525\nIHJhbmdlcw== 22526\nIEFudG9uaW8= 22527\nQVRJT04= 22528\nIEJhYmE= 22529\nIOyDiQ== 22530\na3Vu 22531\nIHByYXllZA== 22532\n0YDRjw== 22533\nINC/0YDQvtGC0LjQsg== 22534\nIHNlYXM= 22535\nYnVyeQ== 22536\nINeU16k= 22537\nIHRyYWl0 22538\nIERlcGVuZGluZw== 22539\nIGRyZQ== 22540\nIGvDtm5udA== 22541\n0YbRgw== 22542\nIGxpcHN0aWNr 22543\nZWV6 22544\nINC/0YDQuNC80LXRgA== 22545\nIGFzc2lnbm1lbnRz 22546\nQm9i 22547\nIG1ldGFscw== 22548\nIHNwZWNpYWxseQ== 22549\n5bCN5LiN5bCN 22550\nIOyYiOs= 22551\nIMWh 22552\nIHZpc3Rh 22553\nIM6s 22554\nIHR3aW5z 22555\nIG5vdGFibGU= 22556\nIFNhdQ== 22557\nIGTDqXZlbG9w 22558\nIMOnZWs= 22559\nIHBvbHlub20= 22560\nYXZhbQ== 22561\nIHRhbWLDqQ== 22562\n0L7QvdC+0Lw= 22563\nIHBsYXNtYQ== 22564\nIGVmZWN0 22565\nIGzDpG5n 22566\nIGNhc2k= 22567\n0YHQsA== 22568\nxLFtxLE= 22569\n44GZ44KL 22570\nk6TsnYA= 22571\nIGxhYm91cg== 22572\nb3NzZW4= 22573\nIFB1bg== 22574\ncmlm 22575\nIGRvc2Vz 22576\nIG9wZXJhdGVz 22577\n0LjQu9C70Lg= 22578\nIGphYXI= 22579\nc3Rhdw== 22580\nIOyCrOuekQ== 22581\nIGF0bQ== 22582\nIHByb3RlY3Rz 22583\nIGltcGVk 22584\nSE8= 22585\nIGNpbWE= 22586\nIHRvY2g= 22587\nYWJpcw== 22588\nIHNlbmRv 22589\nbGF1cw== 22590\nIGN1cmw= 22591\nIE51bQ== 22592\nIHNwb25zb3Jz 22593\nIGTDqWJ1dA== 22594\nIEFsZXhh 22595\nIELDvHI= 22596\nIEFtZXI= 22597\nIGNvcGU= 22598\nINC40LfQsg== 22599\namFs 22600\nIDE5OTU= 22601\nYXBhdA== 22602\ncmVzc2U= 22603\nIFByaXpl 22604\nIENsYWlyZQ== 22605\nIEJyYW5kb24= 22606\nIHdzenlzdGtv 22607\nIHZhbHVlZA== 22608\n4LiZ4Liw 22609\nIHNlY3Q= 22610\nIHNlY3JldGx5 22611\nIGRpYW1vbmRz 22612\nIEV2YW4= 22613\nIFJQRw== 22614\n44Gr44Gq 22615\niOuPhA== 22616\nIFVuaXZlcnNhbA== 22617\nIGRvdWJ0cw== 22618\nIFBpbg== 22619\nd2nEhXo= 22620\nmqk= 22621\nIGFsYm8= 22622\nIGJyYXVjaHQ= 22623\nQVVM 22624\nIE1vYmlsZQ== 22625\nZ3JhZGVz 22626\nIHNjaGVt 22627\nd2h5 22628\nIE5pY2h0 22629\ncGk= 22630\nZ2xl 22631\nIGNob3J1cw== 22632\nIGdseQ== 22633\nIHJlaW5mb3JjZQ== 22634\nIG11ZmY= 22635\nIFNoZW4= 22636\nIEhvbGE= 22637\n0YPQsw== 22638\ndmlkZW1tZW50 22639\ndmlhbA== 22640\nYWNpb3Vz 22641\nbGFpbWVk 22642\nIFJpY28= 22643\nIHZlZ2c= 22644\nIGlsbHVzdHJhdGlvbg== 22645\nIEJ1dHRlcg== 22646\nb3dhZA== 22647\nIGV1eA== 22648\nIGVuZmFudHM= 22649\nIExlYWRlcg== 22650\nIFZpbGxhZ2U= 22651\nZXRpY2FsbHk= 22652\n2YbZig== 22653\nIHN0ZXc= 22654\nIHN1cnByaXNlcw== 22655\nIGN1ZQ== 22656\nIEdyYW5kbWE= 22657\nIENlbHNpdXM= 22658\nIFJpY2h0 22659\nZW5j 22660\nIHBldGl0aW9u 22661\nIGhlcmI= 22662\nIHdpY2tlZA== 22663\nIHNjaGxl 22664\nb2NhbHk= 22665\nIHRyYW5zZg== 22666\nIHRva2Vucw== 22667\nIEdyYXk= 22668\nIEJCQw== 22669\nSUs= 22670\nIDE1MDA= 22671\nem4= 22672\nIE5ldg== 22673\nIGtveQ== 22674\nIHphcg== 22675\nIGJ1bGxzaGl0 22676\nIENvbG9tYmlh 22677\ndWxhdGl2ZQ== 22678\nIHdpZGVzcHJlYWQ= 22679\neWVjdA== 22680\na2l0 22681\nIGVtcHJlc2E= 22682\nIG5vdXI= 22683\nIGJ1cm5z 22684\nYXRpbg== 22685\nYWlyZWQ= 22686\nIHJldm9sdXRpb25hcnk= 22687\nINCz0L7QtNGD 22688\nIExvZ2Fu 22689\nIDE5OTY= 22690\nIEdyYWhhbQ== 22691\ncmVi 22692\nIE5IUw== 22693\n5pyb 22694\nIGNvc3R1bWVz 22695\nIG5hd2V0 22696\nIGxvdmVycw== 22697\nIEx1Y3k= 22698\nIEluZGlnZW5vdXM= 22699\n7ZWY6riw 22700\nIGltbXVuaXR5 22701\npbTr 22702\ndWl0bw== 22703\nIGV4Y2Vzc2l2ZQ== 22704\nIGRvbmF0aW9ucw== 22705\nINeU16g= 22706\nIOyyqw== 22707\n6YmE 22708\nIGRyeWluZw== 22709\nbWVsb24= 22710\nIHN1cnZleXM= 22711\nIOustOyKqA== 22712\n6aKo 22713\nYWFh 22714\nIHByb2Jl 22715\nYW5jaWFs 22716\nIGxvdWRlcg== 22717\nIGhvdGVscw== 22718\nw7zEnw== 22719\nYWduZXI= 22720\nIG9yaWdpbnM= 22721\nIOuniOyngOuniQ== 22722\nICoq 22723\nIHN0cmFuZ2Vycw== 22724\nIEhhdXM= 22725\nY29tZWQ= 22726\nIGFudGhyb3A= 22727\nIHVzbw== 22728\nIOyVhOyngQ== 22729\nIFl1YW4= 22730\nIO2VhOyalA== 22731\ncGxlcg== 22732\ncmVzc2l2ZQ== 22733\nIHNwcmF3 22734\nIFN0ZXc= 22735\nIDE5OTQ= 22736\nIGVsZGVycw== 22737\nIG1laW5lbg== 22738\nIGp1bnQ= 22739\nIGFjb3VzdA== 22740\nIFdvaG4= 22741\nIGJhbmFuYXM= 22742\nIHByb2plY3Rpb24= 22743\nIFN0aWNr 22744\nbGVndA== 22745\nc3BlZWQ= 22746\nIGPFqW5n 22747\nIFdvcnQ= 22748\nIEJhbHRpbW9yZQ== 22749\nINGG0LXQuw== 22750\nIGR1bm5v 22751\n5by3 22752\nPyw= 22753\n44OJ44Oz 22754\nIExvY2Fs 22755\nb3N0bw== 22756\n0K0= 22757\n0L7QtNCw 22758\nIFBvcnR1Z3Vlc2U= 22759\nIHRoZWlycw== 22760\nIGTDqW0= 22761\n5Y+m 22762\nIGRyYXVm 22763\nIEJ1ZGRoaXN0 22764\nZXJ0YQ== 22765\nR2U= 22766\nIGNhcnJvdA== 22767\nIFdvbmRlcmZ1bA== 22768\nIHNvYWs= 22769\nIGNoYWlybWFu 22770\nZ2dp 22771\nSUNB 22772\nZnJpZWQ= 22773\nIGZsaWNr 22774\nIFRocm91Z2hvdXQ= 22775\nIOyasOs= 22776\nIGNvdWdo 22777\nIGZsdWZmeQ== 22778\nc2Nob29s 22779\nIHJpcHBlZA== 22780\nLS0tLS0tLS0= 22781\nIFp1a3VuZnQ= 22782\nINC90LXQsQ== 22783\nIHN0bw== 22784\nIEJP 22785\ncGVudA== 22786\nIExhd3JlbmNl 22787\nz4nPgg== 22788\nc3RpY2tz 22789\nIEVpbnM= 22790\nINGA0Ys= 22791\nIFN0cm9uZw== 22792\nIGNhcmFtZWw= 22793\nIHNwaXRl 22794\nYXphcg== 22795\n6YO95piv 22796\nIGNyaXRpY2FsbHk= 22797\nIG9icmE= 22798\nb3dpdHo= 22799\nIFpvbmU= 22800\nINGA0LXQug== 22801\nIHN1Zw== 22802\nYXJkZWQ= 22803\nIGfDrA== 22804\nZmZlbnRsaWNo 22805\nYW5jaGU= 22806\n2J8= 22807\nYXN0aWNhbGx5 22808\n7J286w== 22809\n0LvQsNCy 22810\nIHNpbXBsZXN0 22811\nIEZyaWVuZA== 22812\nIHF1ZWxsbw== 22813\nIGFtYml0aW9u 22814\nIGFiYmlhbW8= 22815\n5bqV 22816\nINGE0L7RgNC8 22817\nIEVzc2E= 22818\nIGVkdWNhdG9ycw== 22819\nIHN0YXRpc3RpY2Fs 22820\n6YCZ6YKK 22821\nIGNoYW5nZXI= 22822\nIGF0YXU= 22823\nw6l0YWlz 22824\nIFNoYWtlc3BlYXJl 22825\n65CY 22826\nIHRyaWdnZXJz 22827\nIHJlYWxpeg== 22828\nIGNlbHVp 22829\nd2hlZWw= 22830\nIGxveWFsdHk= 22831\nIHNjcmVhbXM= 22832\na2Vocg== 22833\nIE1lZ2E= 22834\nZWFzdA== 22835\nIHRvcHM= 22836\nIFRvdGFsbHk= 22837\nb3VudGFpbg== 22838\nbG9yZA== 22839\nIHZpb2xhdGlvbg== 22840\nIEdB 22841\nIG5pY2Vy 22842\nIEZyZXNo 22843\nIE1lbGlzc2E= 22844\nZnVuY3Rpb24= 22845\nIHJhcGU= 22846\nIGV4Y2VwdGlvbnM= 22847\nIHNpbGljb24= 22848\nIGxpYmVydHk= 22849\nIGhvdXNlaG9sZHM= 22850\n44GN44G+44GZ 22851\nIENB 22852\nINCe0LE= 22853\nIGxpYg== 22854\nnow= 22855\nY2lmaWM= 22856\nIHRyb3BpY2Fs 22857\nIGludmVzdGlnYXRpbmc= 22858\nSEQ= 22859\nIGFkYXB0ZXI= 22860\nIFBpdHQ= 22861\nYW5jaWE= 22862\nIFNoZWxs 22863\nZnJpZW5kbHk= 22864\nIGNvbmNsdXNpb25z 22865\nIHR1cnRsZQ== 22866\nIGRlY29tcA== 22867\nIGFuaW1hdGlvbnM= 22868\nINGB0LXQug== 22869\naW5zaQ== 22870\nIHJldGVudGlvbg== 22871\na2ll 22872\nIGluamVjdGlvbg== 22873\nIE1hZGlzb24= 22874\n7LCw 22875\nIHZpZW50 22876\nIHZhcmllZA== 22877\nIHZpb2xpbg== 22878\nIEJpbA== 22879\nIGx1Y2tpbHk= 22880\nIGh0dA== 22881\nbMOk 22882\nIHJhbmNo 22883\n55yL55yL 22884\nIHPDs2xv 22885\n7JWF 22886\nIERlcmVr 22887\nIFNjcmlwdHVyZQ== 22888\n0L7RgNCw 22889\nIGNsYXNzcm9vbXM= 22890\nYXZpbA== 22891\nZm9ybWVk 22892\nIGJlZm9yZWhhbmQ= 22893\nIEdlbQ== 22894\ncHJlY2g= 22895\nIGxpbg== 22896\nIGdyZWVucw== 22897\n0YbQtdCy 22898\nIE1lcmNlZGVz 22899\nIGRyb3VnaHQ= 22900\nZ2FzcHM= 22901\nIGFib3J0aW9u 22902\nIHRlcnJpYmx5 22903\nIHNwb3PDs2I= 22904\nIHNlY3VyZWQ= 22905\nIGF0csOhcw== 22906\nIHdhdmVsZW5ndGg= 22907\nIGdyYWlucw== 22908\nZWN0aXZl 22909\nIHNwYWNlY3JhZnQ= 22910\nIHRvdXJz 22911\nIHByb2Zlcw== 22912\nIHN1cmdlb24= 22913\nIFBpZQ== 22914\nIGlkZWFsbHk= 22915\nYXJuZXI= 22916\nVVA= 22917\nb3BhcmQ= 22918\nc2Nl 22919\nIGltbWVuc2U= 22920\nIE9ydA== 22921\ncm9sbGVy 22922\nIERhbGxhcw== 22923\nIE5pY2hvbGFz 22924\nIHN1bGY= 22925\nIFRveW90YQ== 22926\nIHF1YW50aXRpZXM= 22927\nY2VhbnM= 22928\nIGN1aQ== 22929\nYW7Dp2E= 22930\nIENBTg== 22931\naXR6ZXJsYW5k 22932\n5YS/ 22933\nIHpvdQ== 22934\nIEN5YmVy 22935\nbGVnZW4= 22936\nIEluaXQ= 22937\nZWR1 22938\nIGFwZXJ0 22939\nIGFkamFj 22940\nb3V2 22941\n6ICM5LiU 22942\ncnM= 22943\nIGNhYmJhZ2U= 22944\nIHdoZWVsY2hhaXI= 22945\naW55bA== 22946\nIER5bmFt 22947\nIOyVhOuLiOudvA== 22948\nIGxpbmc= 22949\naGw= 22950\nINC80L7Qs9GD 22951\nIGNyaXNw 22952\nIG1pag== 22953\nIGR1Zw== 22954\nbmlu 22955\nIGJsb3Nz 22956\nIGJlbG9uZ2luZw== 22957\nIGxvdWRseQ== 22958\nIG1pbmVyYWxz 22959\nIGNvbmNsdWRlZA== 22960\nIHNlYXJjaGVk 22961\nOTY= 22962\nIE1lZXQ= 22963\nIFNFTw== 22964\nINCh0Lo= 22965\nIEhvYg== 22966\nb3R0YQ== 22967\nIHByb3BhZ2FuZGE= 22968\nIGNpbm5hbW9u 22969\nIGh1bnRlcg== 22970\nIGdlbWVpbnM= 22971\nIHNjdWxwdHVyZQ== 22972\ndWxzaW9u 22973\nIHbDpGw= 22974\nIG1hZ2F6aW5lcw== 22975\nIGNvbnRyb3ZlcnN5 22976\n5LiA5qij 22977\nIHNlcXVlbmNlcw== 22978\n44GE44KL 22979\nIO2ajA== 22980\nIGRlbGV0ZWQ= 22981\n5L2/ 22982\nkOuPhA== 22983\nIHZhcnlpbmc= 22984\n44OG 22985\nIG1vdW50aW5n 22986\nIGFmZmFpcg== 22987\nIHBhdGh3YXlz 22988\n5qY= 22989\nIGRpZ28= 22990\n5Lqu 22991\nINC00L7Qug== 22992\nQWxleA== 22993\nIHRvYmFjY28= 22994\nIENW 22995\nIGJvdGhlcmVk 22996\nIGFtYmllbnQ= 22997\naW5reQ== 22998\nIFNM 22999\nIGhhdGVz 23000\nIGplxbxlbGk= 23001\nIGNvbmdyZWc= 23002\nIGVsYXM= 23003\nIGRldXRz 23004\nIFN0dWRpb3M= 23005\nY2jEmQ== 23006\nIGRvY3VtZW50ZWQ= 23007\nIENydXo= 23008\nIExlbg== 23009\nIERvdWdsYXM= 23010\nIFBvcnR1Z2Fs 23011\nZW50aQ== 23012\nIHNwb3VzZQ== 23013\nIGFuYWx5cw== 23014\nYXZpYQ== 23015\nIGVkaXRlZA== 23016\nIGzhuqFp 23017\nYnVpbHQ= 23018\nIHZpbGxl 23019\nYWRvcmE= 23020\nIGJyYWNlbGV0 23021\nIHN1c2hp 23022\nIHBt 23023\nIHRyYWlscw== 23024\nIGx1Zw== 23025\nIMO2dmVy 23026\nIHNvcnJvdw== 23027\nIGNvbG9ueQ== 23028\nYWRveA== 23029\nIHNlcmll 23030\nYW55YWs= 23031\nINi3 23032\nIEd1bGY= 23033\n5piv5LiN5piv 23034\nIFBW 23035\nIFNhbXVlbA== 23036\nIEtpdA== 23037\nIFJhbA== 23038\nb250aW4= 23039\nZXhwbA== 23040\nIGVudHJpZXM= 23041\nIGFjdGl2aXN0cw== 23042\nUHM= 23043\nIHNhbnQ= 23044\nINGC0L7Rhw== 23045\nIEJydW5v 23046\na2VsZXk= 23047\nIHR1dHRv 23048\n6ZQ= 23049\nIHZpbnRhZ2U= 23050\nIHRlcnJpZmllZA== 23051\nINC/0L7RhQ== 23052\ndXNpdmU= 23053\nb3dlcnM= 23054\n0LDQudGC 23055\n64+Z 23056\nIHR3aXN0ZWQ= 23057\nIFRob3VnaHQ= 23058\nIHRhaA== 23059\nIHNocmluaw== 23060\nIHNoZWVy 23061\nbGl0 23062\nIGRhbGFt 23063\nIGRpYg== 23064\nIHZhcmQ= 23065\nb3dhbmU= 23066\nIGRvYnI= 23067\nIFJlbmE= 23068\nINGB0LLQvtGO 23069\nIHBhw61zZXM= 23070\nIEVyYQ== 23071\n44Gu44Gn 23072\nIEJVVA== 23073\nc2lnaHM= 23074\nIOq3uOqxsA== 23075\nIGdyb8OfZW4= 23076\nIOu5qOumrA== 23077\nIG5lcnZlcw== 23078\nIGNvbnN0aXQ= 23079\nIHByZW9jdXA= 23080\nIEdheQ== 23081\nIFh1 23082\na2VlcGVy 23083\naGV1cmU= 23084\nLi4p 23085\nIENhbG0= 23086\nIFVuaWRvcw== 23087\nIOydtOqygw== 23088\nIEFxdWk= 23089\nIOygnOydvA== 23090\nZMSxcg== 23091\n7KaY 23092\neW91cg== 23093\nINGN0YLQuNC8 23094\nMjAyMA== 23095\nIHJ1bmQ= 23096\nIEhP 23097\nIENhdGhlcmluZQ== 23098\naWVsaQ== 23099\nIGZ1c2lvbg== 23100\nIGlkZW9sb2d5 23101\nIGZvcmFt 23102\nc2hhcGVk 23103\nIO2bhOs= 23104\nIHd0 23105\nIHJldHI= 23106\nIHByw6lj 23107\nIOqwkQ== 23108\nIG9wZW5seQ== 23109\ndml0eQ== 23110\n6rWs7JqU 23111\nIG9ic3RhY2xl 23112\nIGJvbw== 23113\nIHNlaW5lcg== 23114\naWNvcm4= 23115\nIGVpZ2VubGlqaw== 23116\nIGhlYWRlcg== 23117\nYXJlbW9z 23118\nIHNvZnRlcg== 23119\nINCf0L7QtA== 23120\nIHByZWp1ZA== 23121\nIGRlZmluZXM= 23122\naWVydGU= 23123\nIGJsZW5kaW5n 23124\nIGJlbGlldmVycw== 23125\nIFdvY2hlbg== 23126\nINC90LjQutCw0Lo= 23127\nINCa0L7Qs9C00LA= 23128\nIFR5cGljYWxseQ== 23129\nIO2BrA== 23130\n566h 23131\nY2lvcw== 23132\nIG1pc3NpbGVz 23133\nIHNwb25nZQ== 23134\nIEtpdGNoZW4= 23135\nIHRyZW4= 23136\nbmluZ2Vu 23137\nIHNjcmFw 23138\nIHNlcmFpdA== 23139\ntOyg 23140\n57k= 23141\nIOuwmOs= 23142\nIHJlc3RvcmVk 23143\nIHByenlrxYJhZA== 23144\nIEt1YmVybmV0ZXM= 23145\nIHNhaXQ= 23146\nIHV3 23147\nIGVuYWJsaW5n 23148\nIHRyYXZlcnM= 23149\nYW1wcw== 23150\n5Y+X 23151\nIE9NRw== 23152\nZW5zb3I= 23153\nIHpvc3Rh 23154\nIHByb25vdW5jZWQ= 23155\nQW5n 23156\nbm9ybWFs 23157\nIGVjb25vbWllcw== 23158\ndGlu 23159\nIENoYW1waW9u 23160\naXplbg== 23161\nIGFyYmVpdGVu 23162\nIEdvc3BlbA== 23163\nIFp1 23164\nbmdh 23165\nIGxpdGVyYWN5 23166\nIE1hbnM= 23167\nIGNpcmN1bGF0aW9u 23168\nIGFkYXA= 23169\nIFRvdGFs 23170\nIG1lcmVrYQ== 23171\nIG9sYWNhaw== 23172\n0YHRgtCw0YLQuA== 23173\nSmFjaw== 23174\nIG11bmQ= 23175\nIHRoaWVm 23176\nYmllcw== 23177\nIOqygQ== 23178\nYXF1ZQ== 23179\nINqp24w= 23180\nIFNjYXI= 23181\n5bI= 23182\nIGFib2w= 23183\nIGRldm90ZQ== 23184\nIDAx 23185\nIHNpdHRlbg== 23186\nIFZpc3VhbA== 23187\nd2Vlaw== 23188\nc29tZQ== 23189\naW5ndA== 23190\nIGpvdXJuYWxpc20= 23191\nIEhpcg== 23192\nIEJhY2hlbG9y 23193\naW5lcnk= 23194\nw5xORA== 23195\n44Of 23196\n57uZ 23197\nIGNvbG9yaW5n 23198\nIENyaXN0 23199\nIGNlbGVicml0aWVz 23200\nINGH0LjRgQ== 23201\nIENyaXQ= 23202\nIGRpZmZlcmVudGlhdGU= 23203\nINCc0L3QtQ== 23204\nZWxpbQ== 23205\nIHNlYWZvb2Q= 23206\nIGFsZ3VtYXM= 23207\nb3RoZXJhcHk= 23208\n5oiw 23209\nIGdsYXVi 23210\nIGFyYml0cmFyeQ== 23211\nZ2Vucw== 23212\nINCx0YPQtNC10Lw= 23213\nIHRhdg== 23214\nIGNyZWFteQ== 23215\nIENvdW50cnk= 23216\nYcOx 23217\n0LzQtdGC 23218\nIGhpbnRlcg== 23219\nIG1pc20= 23220\nIGlsbHVzdHJhdGU= 23221\nw5xORE5JUw== 23222\nIGRlY3JlYXNpbmc= 23223\nIHdlbmlnZXI= 23224\nQUtJ 23225\naXhvbg== 23226\nINC90LXQuQ== 23227\nIGZhdHRv 23228\nIG5lcmQ= 23229\n56A= 23230\nIGJpdHRl 23231\nUGVy 23232\nIHRhbmU= 23233\nIGfDtno= 23234\nIGZvcnRl 23235\nIEV5 23236\nINC90LDQstC10YA= 23237\n6KKr 23238\nIFdvcmRQcmVzcw== 23239\nIE1pcw== 23240\nxa8= 23241\nesOkaA== 23242\nIGludMOpcmVzcw== 23243\nb3NhdXJz 23244\nIEZhbGxz 23245\nIG5lc3Nh 23246\nOTc= 23247\nIG11c2V1bXM= 23248\nIGNvcnJlc3BvbmRz 23249\nIHNpbmdz 23250\nZm91cg== 23251\nIGVkZXI= 23252\nIENvbW11bmlzdA== 23253\nb2E= 23254\nbmVr 23255\nIFdITw== 23256\nIGNvcnBv 23257\nIG1lc3Npbmc= 23258\nz4TOsc65 23259\nIGJydXNoZXM= 23260\nIGJpc2M= 23261\nIEFyYmVpdHM= 23262\nIFRheA== 23263\nIHNlbGU= 23264\nIGZsYWdz 23265\nb3VwZQ== 23266\nIGFudGljaXBhdGVk 23267\n44OR 23268\nIE5hZA== 23269\nIHBvdXJlZA== 23270\nIG1s 23271\nIGxsYW1h 23272\nIHZpc3VhbGl6ZQ== 23273\nIGxpc3RlbmVycw== 23274\n2YTZgw== 23275\nYWx0ZW4= 23276\nTWljaGFlbA== 23277\nIGNvc8Os 23278\n1aHV 23279\nb3B1cw== 23280\nIO2VtOyjvA== 23281\nIGhpa2U= 23282\nIEF0dG9ybmV5 23283\nIEhpbGxhcnk= 23284\ndWRlZA== 23285\nIO2VmOyngOunjA== 23286\nIGRvdmU= 23287\nIHN0b3Jtcw== 23288\n0LDQutGB 23289\nIGRvY3RyaW5l 23290\nIGhleA== 23291\naWtz 23292\nbm/Fm8SH 23293\nIHNjcmlwdHM= 23294\nIM60zrXOvQ== 23295\nINGN0YLQuNGF 23296\nINCG 23297\nYWJlcg== 23298\nIFZhcw== 23299\nIGNlbnRpbWV0ZXJz 23300\n157XlA== 23301\n0L3QuNCx 23302\nIHJpZGVycw== 23303\nIFRyaWI= 23304\n5YyF 23305\nIHRha8W8ZQ== 23306\nIG5vdW4= 23307\nIGljb25z 23308\nIHNvbGVseQ== 23309\nbWluZGVk 23310\nIGRpc3Bvbg== 23311\nIFN3aXR6ZXJsYW5k 23312\nIGNsdXN0ZXJz 23313\nIHF1ZWRh 23314\nYWlsaW5n 23315\nIG1hbmdh 23316\nIDY4 23317\nhIg= 23318\nIHRldA== 23319\nZ2lucw== 23320\naGF1cw== 23321\n56m6 23322\n5bel 23323\nIE9Q 23324\nb3RlZA== 23325\nIG5vdXZlYXU= 23326\nQUxMWQ== 23327\n2YjYrw== 23328\nw7Ju 23329\nIG1vcnRhbGl0eQ== 23330\nIEdpdEh1Yg== 23331\nZHJvcA== 23332\nIGRpc2d1 23333\nIHJlY29t 23334\nIGxvY2Fscw== 23335\nIGhvbWVtYWRl 23336\nYW1iYQ== 23337\nIHByb251bmNpYXRpb24= 23338\nIGFscGhhYmV0 23339\n0LDQvdGM 23340\nb3dhbnk= 23341\naXJhcw== 23342\naWRlbmN5 23343\nT01F 23344\nINGA0LDRgdGB 23345\nYXJhaw== 23346\ndmlhbWVudGU= 23347\nIG5vbnByb2ZpdA== 23348\nIFlvdVR1YmVy 23349\nIHBhcmVudGg= 23350\nIEJvbw== 23351\ndmF0 23352\nIFN0aXI= 23353\nIHByZWNpcA== 23354\nIGFudHM= 23355\nIGFsbHk= 23356\nIE1hb3Jp 23357\nIOuMgO2VnA== 23358\n5Y+v5piv 23359\nb2dlbmU= 23360\nIExhYm91cg== 23361\nYXJldHRl 23362\nIHJlY3ljbGluZw== 23363\nZW5zYQ== 23364\nIHB1cnN1aXQ= 23365\nIHNhaw== 23366\nINCX0LTQtdGB0Yw= 23367\nIHRvbGVyYW5jZQ== 23368\nIHNhYXQ= 23369\nIGNsaWNrZWQ= 23370\n4pml 23371\nIGZhY2Vib29r 23372\nIEludG8= 23373\nIGluY2VudGl2ZXM= 23374\n6riw64qU 23375\nIERlbm5pcw== 23376\nIFdpaw== 23377\nZ2VzY2g= 23378\n4LmA4Lib 23379\nIM+AzrE= 23380\nIFdob28= 23381\nIHJvdW5kZWQ= 23382\nIGRvcGU= 23383\nIGNhcHR1cmluZw== 23384\nIFdhcnJp 23385\nIGNpdmlsaWFu 23386\nIGNoYXJtaW5n 23387\nIGVzYXM= 23388\nIHN1c3RhaW5lZA== 23389\nIGxlYW5pbmc= 23390\nIGFidW5kYW5jZQ== 23391\nw61saWE= 23392\n0LDQu9GM0L3Ri9C5 23393\nIHBo4bqjaQ== 23394\nYWNqYQ== 23395\nIOqwmeyVhA== 23396\nYWN0aXY= 23397\n4Liy4Lii 23398\nIDk3 23399\nINC80L7QuQ== 23400\nY3Jv 23401\nIEphY2tpZQ== 23402\naXR0ZWVz 23403\nYnJhY2h0 23404\ndWxlbnQ= 23405\nIOygnOs= 23406\nIHBsdWdpbg== 23407\ndmFudGFnZQ== 23408\ncGFydHk= 23409\nIHN1YXM= 23410\nIGFudGU= 23411\n0YPQuw== 23412\n0J3QkA== 23413\n5oKo 23414\nIM+Dz4U= 23415\nIG1ldGg= 23416\nIGVudGh1c2lhc20= 23417\n0Y/RgtGB0Y8= 23418\n7ZmU6w== 23419\nIHN5bnRoZXRpYw== 23420\nIHNlYXNvbmluZw== 23421\nIExvc3Q= 23422\nb25vbXk= 23423\nIFNwYXJr 23424\nIGJ1cmU= 23425\nIGFzc3VyZWQ= 23426\nIGltYWdpbg== 23427\nIGNhcnJv 23428\nU2hh 23429\nxIV0 23430\n0L3Rg9GC0Yw= 23431\nw6F0aWNh 23432\nVFk= 23433\nIGtlcm4= 23434\nIEJyYXppbGlhbg== 23435\nw7A= 23436\nIHN1c3BlbmRlZA== 23437\nIENhcmli 23438\nIGJpemlt 23439\nIE9saXZlcg== 23440\n44G2 23441\nVG9t 23442\nINC/0LvQsNC9 23443\nIG5vcGU= 23444\nb21ldGhpbmc= 23445\nIGJlaWRlbg== 23446\n0YbQtdC9 23447\nIGZsdWN0 23448\nIM68zr/PhQ== 23449\nIGZhdGhlcnM= 23450\nIEJsYWtl 23451\nIHVwd2FyZA== 23452\nIERhc2g= 23453\nIExpbA== 23454\nIOyImOuPhA== 23455\nIHJldmVsYXRpb24= 23456\nIGVsZXZhdGVk 23457\nIEppYW5n 23458\nTEVE 23459\nIFRob21wc29u 23460\nINC80L7Qs9GD0YI= 23461\n0YHRgtGA0YM= 23462\naWZpZXJz 23463\nIGNvbWViYWNr 23464\nIGJ1eWVycw== 23465\n6rKw 23466\nIFNhbGVz 23467\n0LjRh9C1 23468\nY2lvbmVz 23469\nIHdoaXN0bGU= 23470\nIGR1bGw= 23471\nTEVY 23472\nIO2VmOqyoOyKteuLiOuLpA== 23473\nIGNyaW1pbmFscw== 23474\nIGRlc2NlbnQ= 23475\naXBwbGU= 23476\nbWFzxLE= 23477\nIGZvb2xpc2g= 23478\nINC00YPQvNCw0Y4= 23479\ndGFy 23480\nIG1hbmdv 23481\nIGNob3Jlb2dyYXBoeQ== 23482\nTWF0dA== 23483\nIHRlcnJpdG9y 23484\nIGFjYWJh 23485\nIEVpbnN0ZWlu 23486\nIElCTQ== 23487\nIE1ldGFs 23488\nIENyeXN0YWw= 23489\nIHJhaA== 23490\nIGZvdWw= 23491\nIElzbGFuZHM= 23492\nIGludGFjdA== 23493\nIFJhaWw= 23494\nLjo= 23495\nIGFjw6E= 23496\nINC/0YDQvtC/ 23497\n0LXRgNC1 23498\nIFdyaXRl 23499\naGVoZQ== 23500\nIEZP 23501\nIM+Dz4TOtw== 23502\nIGRvaW4= 23503\naGVsZA== 23504\nIGFwcHJvcHJpYXRlbHk= 23505\nIGRlbGliZXJhdGVseQ== 23506\nIGFyY2hpdmU= 23507\nIGdpdmVhd2F5 23508\n44GT44GT 23509\nIGZpbmFsZQ== 23510\n0LvQsNGB 23511\n0LXQvdC+ 23512\nxqFu 23513\n5qOS 23514\nb2dv 23515\n54mp 23516\nIEF1ZGllbmNl 23517\n44Wg 23518\nIHN1YnVy 23519\nIGhlYWRhY2hl 23520\n0LDQvdC90Y8= 23521\nIFdpdGNo 23522\nIFN3ZWRpc2g= 23523\nIEJJ 23524\nIGVyYXNl 23525\nIGtoaQ== 23526\nIGNvbW1lbnRhcnk= 23527\nIFN1bHRhbg== 23528\n7YOd 23529\nIExlYmFu 23530\nIOuztOyL 23531\nIFBhbQ== 23532\ncGVrdA== 23533\nbW9udGg= 23534\nIGdyb3VuZGVk 23535\n6r4= 23536\nIMWfZWtpbGRl 23537\nMjUw 23538\nIFNDSA== 23539\naW9zbw== 23540\nIGluYXVn 23541\naGVpbWVy 23542\nIHJlZmxlY3Rpbmc= 23543\nIFJ1dGg= 23544\nIE9pbA== 23545\nIHRyb3V2ZXI= 23546\ndWVw 23547\nLi5d 23548\nIOyeiOs= 23549\nIG9saGE= 23550\nIHJlYXNvbmFibHk= 23551\nIGdsaXRjaA== 23552\nVUI= 23553\nIEdyYW4= 23554\nIGFkYWxhaA== 23555\nIGxlbnQ= 23556\n2LHYpw== 23557\nIHRyYWN0aW9u 23558\nIGFkanVzdGluZw== 23559\ntKQ= 23560\n0L3QuNCx0YPQtNGM 23561\nINC00L7Qvw== 23562\nIHN0cmV0Y2hlZA== 23563\nIG9ydA== 23564\nIGNvc2luZQ== 23565\ndmlvbA== 23566\nIOyF 23567\nY2ly 23568\nIGJhc3RhcmQ= 23569\n5LiH 23570\nINGF0L7QtA== 23571\nIHF1aWVy 23572\nIHByZXNzdXJlcw== 23573\nIEFuaA== 23574\n5bm+ 23575\nIGVsbGVz 23576\nINC00YDRg9C3 23577\nINC80L7QttC10YLQtQ== 23578\nIGNo4bs= 23579\nIE3DqQ== 23580\nw7Zr 23581\n4bqndQ== 23582\n7KCI 23583\nemlu 23584\nIGNhdXRpb24= 23585\naWJhbg== 23586\nIGp1ZGdpbmc= 23587\n0YPRjtGC 23588\nIGJhag== 23589\nINCh0LXQudGH0LDRgQ== 23590\nIFBvb3I= 23591\nIE5hemk= 23592\nIHVwYmVhdA== 23593\neWFuZw== 23594\nIHdlZWtlbmRz 23595\nIEVzc2VudGlhbGx5 23596\nIG9sdXlvcg== 23597\nIHNwYXRpYWw= 23598\nYWNrZXI= 23599\nIHNlbGxlcg== 23600\nINeQ15XXqg== 23601\nkdec 23602\nIHZpdmlk 23603\nIEJvbmQ= 23604\n6raM 23605\naXNrdA== 23606\n44K1 23607\nIGdvYXQ= 23608\nZHJpdmVy 23609\nIG11Zw== 23610\naWN0aW9uYWw= 23611\nIGFsbHQ= 23612\nIEluaXRp 23613\nIFJhbmQ= 23614\nIGZpbmlzaGVz 23615\nIOqwiA== 23616\nIHZpdGFt 23617\nIHRlZW5hZ2Vycw== 23618\nIE1vcnJpcw== 23619\n7KSE 23620\nIE9yaQ== 23621\naXlh 23622\nIG15w7Zz 23623\nU3RlcA== 23624\nIEtyZQ== 23625\n6L6m 23626\nIGRpbm9zYXVy 23627\nIOuqhw== 23628\nYWZmZQ== 23629\nIOuQqeuLiOuLpA== 23630\nIHplZw== 23631\n5YiH 23632\nIE1hbmhhdHRhbg== 23633\nIHN1amV0 23634\ndWVsbGU= 23635\nc3RvZmY= 23636\nIGTDvHI= 23637\nIHN1Ym1hcg== 23638\nZXNlcw== 23639\nIGFxdWVsZQ== 23640\nIG5vdQ== 23641\nIEZhaXRo 23642\ndHo= 23643\nINGC0L7QvNGD 23644\nYWNldXQ= 23645\nbGllcnM= 23646\nIGJhbmR3aWR0aA== 23647\nxrDhu50= 23648\nIHJlc3BlY3RpdmU= 23649\nIEF2ZQ== 23650\nIHNwcmVhZHNoZQ== 23651\nIFNlbnQ= 23652\naWNhbWVudGU= 23653\nIGluZnJh 23654\nIGxlYXJuZXJz 23655\nIOCuiQ== 23656\nYWlhaA== 23657\ncmVuYWw= 23658\nIG11c3RhcmQ= 23659\nIGhhYnQ= 23660\n54M= 23661\nIFF1w6k= 23662\nIGFuYWx5emluZw== 23663\n5q+P 23664\nIHNvbGlj 23665\nINeU15XXkA== 23666\nIGNhdXNh 23667\nIHdlbGNvbWVk 23668\nIFN1Y2Nlc3M= 23669\nIGZhY2lsZQ== 23670\nINCf0L7RgtC+0LzRgw== 23671\nc2NoZWlu 23672\nIGZldGNo 23673\nIHN0cmF0 23674\nINGB0YLQvtC40YI= 23675\n7JeQ7ISc64qU 23676\nINGB0L/QvtGB0L7QsQ== 23677\nbWFt 23678\nIHNlcsOtYQ== 23679\nbmFtZW50cw== 23680\nd3JpdGVy 23681\nIGNvbnN1bHRpbmc= 23682\n7ZiA 23683\nIEJlcmtlbGV5 23684\nZXU= 23685\nYXNpdmU= 23686\nVVU= 23687\nIEFuYWx5dA== 23688\nIHN1Ym1pc3Npb24= 23689\nIG1hZ25pZmljZW50 23690\nZW56YQ== 23691\nIGVjb24= 23692\nIHByb2ZpbGVz 23693\nIGluY2Fy 23694\nQWI= 23695\nIE51bg== 23696\nIGhpYw== 23697\nc2NyZWFtaW5n 23698\nIHJlc2lsaWVudA== 23699\n5Yip 23700\nZ3J1bmQ= 23701\nIGNvbmN1cg== 23702\nIGJlcmVpdHM= 23703\nTEQ= 23704\nIG51cnQ= 23705\n7Ik= 23706\nIGZlYXN0 23707\nIGVuY3VlbnQ= 23708\nIE1pY2hlbA== 23709\nIHN1cHJlbQ== 23710\nIl0= 23711\nIGZlZWRz 23712\nIEtvbGxlZ2Vu 23713\naXNzZXI= 23714\nIEZlbmc= 23715\nIFdlbg== 23716\nbXVu 23717\nIHRlbsOtYQ== 23718\nIFdyZXN0 23719\nIOyYpOuKmOydgA== 23720\nIHN0ZWFk 23721\nIHJlc3RvcmF0aW9u 23722\nIGRvbmF0ZWQ= 23723\nIGRlbHM= 23724\nIGNlbnN1cw== 23725\nIGRlc3BlcmF0ZWx5 23726\nd29ydGh5 23727\nSEU= 23728\nIFNwYQ== 23729\nIEJyeWFu 23730\nIGhq 23731\nIFJhdw== 23732\n7JWE6w== 23733\nIENhbWVyYQ== 23734\nIHppZW4= 23735\nIHN0eWw= 23736\nIFRX 23737\nIENoZWVzZQ== 23738\nYm9ybmU= 23739\nIG9ibA== 23740\nIEFscmVhZHk= 23741\nIHVuc3RhYmxl 23742\nIGZsYW1lcw== 23743\ncG9zdA== 23744\nSGE= 23745\ncm9tYWdu 23746\nIOyXhOuniA== 23747\nZGVzdA== 23748\nIGtvbGVq 23749\nIHRlbXBvcmFyaWx5 23750\nIGRldGVybWluaW5n 23751\nIEdsYXNz 23752\n0YDQvtC9 23753\nb2xhbg== 23754\nIGRvbWluYXRlZA== 23755\n5YyW 23756\nX19fXw== 23757\nINmH2LDYpw== 23758\nIERhbmE= 23759\nIGRpbmhlaXJv 23760\nYXF1 23761\n66+8 23762\nIMOgcw== 23763\nIEpvZXk= 23764\nIEdyaWZm 23765\nIGF0dGFpbg== 23766\nIHRyYW5zaXRpb25z 23767\nIExpdGVyYWxseQ== 23768\n0LXQvdC0 23769\nIEhhdmVu 23770\nIGdyYWJiaW5n 23771\nIGNyeXN0YWxz 23772\nIEZvdXJ0aA== 23773\nIGNhbmRsZXM= 23774\nINGB0LvRg9GH0LA= 23775\ncmljbw== 23776\nIDUwMDA= 23777\nZXR0bw== 23778\nIHVuZG8= 23779\nIGt0bw== 23780\nIGRpdmVydA== 23781\nIGNoaXI= 23782\nIHBlcnNlYw== 23783\nIGhpa2luZw== 23784\nIGFubm91bmNlbWVudHM= 23785\n55Sx 23786\n0LfRiw== 23787\nIGF1Yw== 23788\nIHN5c3RlbWlj 23789\nIFJN 23790\nz4POsQ== 23791\nINCU0LY= 23792\nIHlhcg== 23793\nIFdhcmQ= 23794\nIHBpc3NlZA== 23795\nIGNhcm4= 23796\nIGF1dG9ub21vdXM= 23797\n44WO44WO 23798\nc292ZXI= 23799\n5rKS6Yyv 23800\n5b6I5aW9 23801\nIHJlZmxleA== 23802\nIGdhcmRlbnM= 23803\nIGRhdGVk 23804\n7LE= 23805\nYW1pxJk= 23806\nIGNvbnRpbnVpdHk= 23807\nIGNpdGl6ZW5zaGlw 23808\nIHNjaHdlcg== 23809\nIHphaw== 23810\ndGFibGU= 23811\nINGB0Yc= 23812\n6KeB 23813\nIM+DzrU= 23814\nIGdlbmVyYXRlcw== 23815\n6rWs64KY 23816\nw7Zo 23817\nw7Nt 23818\nYWxhbQ== 23819\nIEpVRFk= 23820\nIEJ1Zw== 23821\nIOOBpg== 23822\nIGRyb25lcw== 23823\nIMOhZ3Vh 23824\nYWNha3M= 23825\n5po= 23826\nINCa0L7QvQ== 23827\n15bXlA== 23828\nIHN0cml2ZQ== 23829\nIEFsdGVybg== 23830\nIG5lYXJlc3Q= 23831\nIHByb3llY3Q= 23832\ndGVyYQ== 23833\nIEFTSExFWQ== 23834\nIHdvcm0= 23835\nIHJlcGxheQ== 23836\nIHRhcmE= 23837\nIEluZGlhbnM= 23838\n44Kw 23839\naWNhaWQ= 23840\nIOyInA== 23841\nIGFwcGVhbGluZw== 23842\nIFdlcw== 23843\nIG1lbnRpb25z 23844\nINC00LXQu9C1 23845\nIGt3 23846\nIGZyYWdpbGU= 23847\naXN6 23848\na8Ozdw== 23849\naGFuZw== 23850\nY29sb3I= 23851\nIHByZXNpZGVudGU= 23852\nODc= 23853\n0LXRhA== 23854\n54i4 23855\nINC00L7QsdCw0LI= 23856\nIE5lbHNvbg== 23857\nw6FmaWM= 23858\nIE1JQ0hBRUw= 23859\nIG1lY2hhbmlj 23860\nIG1ldHJlcw== 23861\nIG9jenl3acWbY2ll 23862\nIENpbmQ= 23863\nIG9nc8Ol 23864\nIGxhbmRzY2E= 23865\nQUNF 23866\nIGhlYWRsaW5lcw== 23867\nIGNhdGFseXN0 23868\nIENhdGNo 23869\naW5rbGVz 23870\nIHBpbGxz 23871\nb3Jkbw== 23872\nIGltbWlncmFudA== 23873\nIGV4YW1pbmF0aW9u 23874\nIGFjY2lkZW50cw== 23875\nesSFZA== 23876\nIHF1aWVyZQ== 23877\nIG5lbGxh 23878\nIDY3 23879\nIHBhc3Nh 23880\nIHN1cGVyZmlj 23881\naXN0b3I= 23882\nIG5vdg== 23883\n64u1 23884\nIG1hbmRhdGU= 23885\naXNvbnM= 23886\nIFZpcnR1YWw= 23887\nIHNlbGJlcg== 23888\nIGNvdW5zZWxpbmc= 23889\nIE5CQQ== 23890\nIHNlcHQ= 23891\nIGJlbGlldmVy 23892\nIG1hcnZlbA== 23893\nIEludGVncg== 23894\nINC80ZY= 23895\nIG9ycGg= 23896\nIGJhY2t3YXJk 23897\nIEdlbmVyYXRpb24= 23898\nIFBpY3Q= 23899\nINGC0L7Rgg== 23900\nIHRhcGk= 23901\ncHJvY2hlbg== 23902\nIGhhbGx3YXk= 23903\naHRl 23904\nINuB25I= 23905\nIFp1bQ== 23906\n6ICB5bir 23907\nYWNobWVudA== 23908\naXF1ZXI= 23909\nZm9sZw== 23910\nIEVkZGll 23911\nIEtpbA== 23912\nIHdlbGxuZXNz 23913\nc3RvY2s= 23914\n6LyD 23915\nIGthw6c= 23916\nIHRlcnJvcmlzbQ== 23917\nIHBvaW50ZXI= 23918\nT2Y= 23919\naGVyaWM= 23920\nIFVsdGltYXRlbHk= 23921\nIG1lc2Vz 23922\nIFRyYWRl 23923\nIHBpbnQ= 23924\nIHR1aXRpb24= 23925\nIGRpc2FncmU= 23926\nIOqyjOyehA== 23927\nIG1hbnVzY3JpcHQ= 23928\nIHJvb21t 23929\nIG91dHB1dHM= 23930\n0LXRhtC4 23931\nIHJpZXM= 23932\nIHNhbHVk 23933\nb3R6ZGVt 23934\nIG1hc3Nlcw== 23935\nIGJ5xYJh 23936\nIGNsZWFyaW5n 23937\nIGRpc2NvdXJzZQ== 23938\nYXRzb24= 23939\nIGZvbGRlZA== 23940\nIEphcg== 23941\n2YTZiQ== 23942\nOTAw 23943\nINGD0YHQvw== 23944\nIHByb3BoZWN5 23945\nIGludGVyZmVyZQ== 23946\n0LjRhdC+0LQ= 23947\n4LmM 23948\nIHRocmk= 23949\nINee16k= 23950\nIGxhesSxbQ== 23951\nIDE5OTI= 23952\nIGZ1dHVybw== 23953\nIGxvY2tpbmc= 23954\nIGVtYmFyZ28= 23955\nIE5laXRoZXI= 23956\naXZhbWVudGU= 23957\nIG3DpXN0ZQ== 23958\nIG1paw== 23959\nIGNvbGxlY3Rvcg== 23960\n0LXQutC+0YLQvtGA 23961\nIEdhbmQ= 23962\nIHNlbnRpcg== 23963\nIE1pZ2h0 23964\n5aGU 23965\nIGdhbnplbg== 23966\nVUM= 23967\nIHJlbGF0aW5n 23968\nU0Q= 23969\nIG1vc3F1aXRv 23970\nR1I= 23971\nIGhvbGxvdw== 23972\n4piF 23973\nIFdhbGtlcg== 23974\nIGFmZmlsaWF0ZQ== 23975\nIGR1cGxpY2F0ZQ== 23976\n0L3QtdC8 23977\nIGdyYXBl 23978\nIE9yZ2FuaXphdGlvbg== 23979\nIHN5bnQ= 23980\nSm9l 23981\nIGdlZw== 23982\nIHJldmVhbGluZw== 23983\nIEV0aGFu 23984\nb3V0ZXI= 23985\nIHlheQ== 23986\n6auU 23987\n0LvQsNGA 23988\nIHJlcG9ydGVkbHk= 23989\nIGlocmVy 23990\nIHJlY29nbmlzZQ== 23991\nIGJ1bXBlcg== 23992\nIFJhbmR5 23993\nIFZlbnVz 23994\ndGxlcw== 23995\nIGFwcGV0aXRl 23996\nIGdsdWNvc2U= 23997\nIGNob2R6aQ== 23998\nIEZ1cnRoZXJtb3Jl 23999\ndGly 24000\nIGNvbnRh 24001\nIGludHVpdGlvbg== 24002\nIGFsdGl0dWRl 24003\nIGNodW5rcw== 24004\nIEpvc2h1YQ== 24005\nxLHEn8SxbQ== 24006\ncnlsaWM= 24007\nbGVhbnM= 24008\nIO2UvOs= 24009\nTEw= 24010\nUXVl 24011\nIGdvcg== 24012\nINC30L3QsNGH0LjRgg== 24013\nIHBvZW1z 24014\nIGV4Y2Vs 24015\nIGV4cGxvcmVk 24016\nIHBvcHVs 24017\nIGluY2x1c28= 24018\nc3TDpA== 24019\nIEdhdmlu 24020\nYWxsaW5n 24021\nIM+Ezr/OvQ== 24022\n6ak= 24023\nYXJiZWl0 24024\nIEdhcw== 24025\nIGdsb3Jpb3Vz 24026\ncmllYmVu 24027\nIHNwYW0= 24028\nIGluZG9vcg== 24029\nIHRocnVzdA== 24030\nIEFsZA== 24031\nIFByaW9y 24032\nIG9uYm9hcmQ= 24033\n44Gg44GV44GE 24034\nb2Nh 24035\nQVNI 24036\no6A= 24037\nIENocmlzdGluZQ== 24038\nIGRyYXdlcg== 24039\nIG5vb24= 24040\nIOyemOs= 24041\nIHBlcm1hbmVudGx5 24042\n5rex 24043\nINC90LDQv9GA0LjQvNC10YA= 24044\nIHBvZGNhc3Rz 24045\nZXJhcGV1dA== 24046\ncHJpdA== 24047\nIHN0YWlubGVzcw== 24048\nINqp25I= 24049\nIGZhbWlsaWE= 24050\nINGA0LDQt9GA 24051\ndW50bw== 24052\nINGB0YLQvtC7 24053\nIGjDpA== 24054\nIEhhaQ== 24055\nIFBC 24056\naXpvbg== 24057\nIGtvbm50ZQ== 24058\nIGLDvHnDvGs= 24059\nIHV0aWxpemFy 24060\n2oY= 24061\nIGFxdWVzdGE= 24062\nIG1peGVy 24063\ndWRlbnQ= 24064\n0LvQtdC60YE= 24065\nxYJ1 24066\nINGB0LjRgdGC0LXQvA== 24067\nINC90L7RgNC8 24068\nIGZhdGFs 24069\nIGNvbnNpZGVyYXRpb25z 24070\nIHZhbGlkYXRpb24= 24071\nIG9saQ== 24072\nIGthcmRlxZ8= 24073\nIEdMT1JJQQ== 24074\nIHBhbGw= 24075\n0LXRgdGC0LU= 24076\nIHJlY3Rhbmc= 24077\nIG1lZGlldmFs 24078\nYWxsYWhp 24079\nYXN0aQ== 24080\nIFN5cmlhbg== 24081\nIHNoZWFy 24082\nIGRlYnVn 24083\nIE1haQ== 24084\nIGtub2NraW5n 24085\nIExleA== 24086\nYXJkYW4= 24087\ncm92 24088\nIG1lbW9yaWFs 24089\n5rCj 24090\nb29reQ== 24091\nIHN0dWZmZWQ= 24092\nIHBhc3PDqQ== 24093\nIHdpZw== 24094\ngqA= 24095\nIHByw7N4aW1h 24096\nIDE5OTE= 24097\nINC80LXQttC00YM= 24098\nIG51ZXN0cm9z 24099\nIEJlYXN0 24100\nIHNtbw== 24101\nYXRjaGVk 24102\nb2xvZ2lh 24103\nINC80L7QtA== 24104\nIGdlZQ== 24105\nIGNvbmNlcHR1YWw= 24106\nIMO0 24107\nIGRlY3JlYXNlcw== 24108\nIHF1ZXJpZXM= 24109\n0L7Qu9GM0Yg= 24110\nIEFwYXJ0 24111\nIGV4ZW1wbA== 24112\n5bGx 24113\nIGZsZWQ= 24114\nIE9GRg== 24115\nZ2dhaw== 24116\nIGJlYWQ= 24117\naGly 24118\nbGllcw== 24119\nIENsZWFybHk= 24120\nxLFsYXI= 24121\nIGNoZXNz 24122\nIHdoaWNoZXZlcg== 24123\nIDk2 24124\n4bqx 24125\nIHJlc3BlY3Rz 24126\nINC80L7RgA== 24127\nIG9yZ2FuaXNt 24128\nIGdyYW5kcGE= 24129\nIFZpZQ== 24130\n6Lef5L2g 24131\nIGZsb29kaW5n 24132\nIHVwZ3JhZGVk 24133\n0ZHRgA== 24134\nIGNoZWVrcw== 24135\nIGNvbnF1ZXI= 24136\nIHN0dWJib3Ju 24137\nIHB1enpsZXM= 24138\nIGF1Y3Rpb24= 24139\nIHJlbHlpbmc= 24140\nIFBST0Y= 24141\nIEVzcGVy 24142\nINCc0KM= 24143\nIGh5cGU= 24144\nIHBvc3NpYmls 24145\nIGltcHJpc29u 24146\nIEVybg== 24147\n7JeI7Iq164uI64uk 24148\nIGVudmll 24149\nIHJlc3VycmVjdGlvbg== 24150\n5LiN6KGM 24151\nIHNwZXI= 24152\nIFZlbmV6dWVsYQ== 24153\nc29t 24154\nIOyeoOq5 24155\nIG5vdXZlbGxl 24156\nIGNsb3Nlcw== 24157\nIDE5NDA= 24158\nIHF1YQ== 24159\nIEphcmVk 24160\nIFBpcg== 24161\nIGluZGU= 24162\nIHNjcnVi 24163\ndWt1 24164\nIHJlcXVpcmluZw== 24165\nINCy0LDQvNC4 24166\nIGNvbnNpZGVyYWJsZQ== 24167\n5ZCb 24168\naWxpYQ== 24169\nIGlubmU= 24170\nIG1laW5lbQ== 24171\nIGhhcmRzaGlw 24172\nIHRyYXBz 24173\ncm9j 24174\nIOyEpOs= 24175\nIHJlc2VhcmNoaW5n 24176\nIE1hcmdhcmV0 24177\nIHBlbm55 24178\nIGLEsXJhaw== 24179\n0ZHQuw== 24180\nIHdvb2w= 24181\nIHJoZXQ= 24182\nIGZsYXR0ZW4= 24183\n54c= 24184\n4LmA4Lij 24185\nIHBpZWQ= 24186\nIENoYXA= 24187\nIHVuZGVybQ== 24188\nIGZyZXQ= 24189\nIGNyYXNoZWQ= 24190\nIEZyYXVlbg== 24191\n2LDZhw== 24192\naXZhbg== 24193\nIGxpdGVyYXJ5 24194\nbGF0ZWdv 24195\nIHNww6R0ZXI= 24196\nIHNpbWlsYXJpdGllcw== 24197\n4oY= 24198\nIENvcm9u 24199\nIENyZWVr 24200\nIGJvc3Nlcw== 24201\nIGFjY29tcGFuaWVk 24202\nIGRlYmF0ZXM= 24203\nIGFzc2VtYmxlZA== 24204\nIMOB 24205\nIFZhaQ== 24206\nIHRyYWN0 24207\nIHNpbXBsZW1lbnQ= 24208\nIEFyaW4= 24209\nIHZ1bG5lcmFiaWxpdHk= 24210\nIGhvcm1vbmU= 24211\nSUVM 24212\nT09L 24213\nIHJlbGF5 24214\nIEFuZHJlYQ== 24215\ncmls 24216\nIG5lY2Vzc2l0eQ== 24217\nYWNldXRpY2Fs 24218\n0Y7RiQ== 24219\nb3VzaW5n 24220\nbmFobWVu 24221\nIGZvb3RwcmludA== 24222\nbWFw 24223\nIFRpZXI= 24224\nYW5ueWE= 24225\naW50ZW5k 24226\n5Zau 24227\n5aI= 24228\nIGRlY29yYXRl 24229\nIHpvbWJpZXM= 24230\nIEh5ZA== 24231\nIFN1eg== 24232\nIGNhbXB1c2Vz 24233\nIEVtYg== 24234\nIHRocm90dGxl 24235\nIGFkbWlu 24236\nIG9wb3J0dW4= 24237\nIG1pcnJvcnM= 24238\nIGlkZW50aXRpZXM= 24239\nIENsaW4= 24240\nIOu5hOs= 24241\n4bmj 24242\nIE90dA== 24243\nIGJsdWVz 24244\nIGltcHJlc3Npb25z 24245\nLSw= 24246\nIHZhZ3Vl 24247\nYWZl 24248\nIGluZmVyaW9y 24249\nZXJhbGQ= 24250\nIG1lZGljaW5lcw== 24251\nIHByZWd1bnRh 24252\nb3NlbHk= 24253\nIHTDqWzDqQ== 24254\nIE1vbnRo 24255\nIExlYWRlcnM= 24256\nIEVneXB0aWFu 24257\nIHJhdGlvbg== 24258\na2Vycw== 24259\naGVpdHM= 24260\nIHJlY2h0 24261\nUGxheQ== 24262\nIGVn 24263\nIHBvbGxz 24264\nIFdPT0RS 24265\nIHNsb3Rz 24266\namFt 24267\nQm90aA== 24268\nIFJhdA== 24269\n0YDQsNC2 24270\nIEJyaWdodA== 24271\n5LiA5a6a 24272\n4buRaQ== 24273\ndXJpb3Vz 24274\nIHNpbmdlcnM= 24275\nIGxvZ2lu 24276\nIHTDqm0= 24277\nbGF0aW9u 24278\nIE11bQ== 24279\nxrDhu51uZw== 24280\nIEVkaXRvcg== 24281\n5ZCR 24282\nIGlubm92YXRpb25z 24283\naGF2ZQ== 24284\nIFNlaw== 24285\nIHdlYWtlcg== 24286\nIEdvYg== 24287\nQWZ0ZXI= 24288\ntOyngA== 24289\nIOusuOygnA== 24290\n44O844O8 24291\nIGRpc2FkdmFudGFnZQ== 24292\n56K6 24293\nIGdhemU= 24294\nIE1hY2s= 24295\nz4HOrw== 24296\nIEtpc3M= 24297\nIEhvbG8= 24298\nIEJpcnRo 24299\naXpp 24300\nYmFi 24301\n5L+d 24302\n7Iuc6rOg 24303\n0LTQtdGA0LY= 24304\nIHNxdWF0 24305\n0LrRg9GB 24306\ndW5p 24307\nIENvbW1l 24308\nIFdPT0RSVUZG 24309\nIENoYW1waW9uc2hpcA== 24310\nIHdlbGNoZQ== 24311\nIFlvdXRo 24312\nemVt 24313\nIG9kcG93 24314\nIHBlcnNpc3RlbnQ= 24315\ncnV0 24316\n7JSp 24317\n7Zal 24318\nbGFpcg== 24319\naWt1 24320\nIHZlbmRvcg== 24321\nIGNow7puZw== 24322\nIGZpbmFuY2k= 24323\nIG92ZXJseQ== 24324\nw6J1 24325\nIGdsdXRlbg== 24326\nIDE4MDA= 24327\nIGRpdmlzaW9ucw== 24328\nIGNpdWRhZA== 24329\nIG9iZWQ= 24330\nIHdhcnVt 24331\nIGVoZXI= 24332\nIGVsaW0= 24333\nINCS0L4= 24334\nIHBldXZlbnQ= 24335\nIFdhbm5h 24336\nIGF0dGVuZGFuY2U= 24337\nIGFzc2Vzc21lbnRz 24338\nIEJvZw== 24339\nIGltYWdlcnk= 24340\nIGNvbGxlY3RpdmVseQ== 24341\nIGluZm9ybWFs 24342\nIFNjaHdl 24343\nIGRldXRsaWNo 24344\nIENoZWw= 24345\nIFBF 24346\nb3dlZA== 24347\nIGJhbm5lcg== 24348\nIHNoZWx2ZXM= 24349\nIFJldHVybg== 24350\n5ou/ 24351\nTEFVR0hT 24352\nIGNvbmdyYXR1bGF0ZQ== 24353\nIE5vcndheQ== 24354\nIGR3ZWxs 24355\nIENhcmliYmVhbg== 24356\nIG5vcm1z 24357\nIEFuaW1hbA== 24358\nIFZhbGVudGluZQ== 24359\nIGV4dGVuZGluZw== 24360\nIFZvdQ== 24361\nb3Jy 24362\nIENoZW5n 24363\nwqE= 24364\nINC00L7RgNC+0LM= 24365\nIHZlZw== 24366\nIGjDpQ== 24367\nIFhpbg== 24368\nIOy5tOs= 24369\nZW1ldA== 24370\nIGh5cG90aA== 24371\nIGludGVyZXNzYW50ZQ== 24372\ncmljZXM= 24373\nSVo= 24374\nIFVTRA== 24375\nIHJ1bm5lcg== 24376\nIEJhZw== 24377\nIOq9 24378\nIGNvbWXDp2Fy 24379\nIHBpZ3M= 24380\nIHdlYWtuZXNzZXM= 24381\nUGg= 24382\nIFZpb2w= 24383\n5LiN55So 24384\nIGRyYWdnaW5n 24385\nIEFxdcOt 24386\nIENTUw== 24387\nIG1pbGxpbWV0ZXJz 24388\nIGVzdMOhcw== 24389\nIGFjdXRl 24390\nIGRlamFy 24391\nacSf 24392\nb2JyYQ== 24393\nTG92ZQ== 24394\nIHNpbGs= 24395\nKioqKg== 24396\nIGpvaW5z 24397\nIHByb2w= 24398\nIOqwkOyCrO2VqeuLiOuLpA== 24399\n5pSv 24400\n2K3Yrw== 24401\nYWdoZXR0aQ== 24402\nw6RubmVy 24403\nIHN0cmFuZw== 24404\nIGRvdWJsZWQ= 24405\nIGRlc2NyaXB0aW9ucw== 24406\nIHN0ZWxsZW4= 24407\nIHBhcnRp 24408\n56uL 24409\nsoTr 24410\nIMO2xJ8= 24411\naWdoaW5n 24412\nIGFuZ3VsYXI= 24413\nIG5hdHV1cg== 24414\nIFNoZWw= 24415\nxrDGoQ== 24416\nIHJheXM= 24417\nIHNlcGVy 24418\nc3RhcnQ= 24419\ndmlzZWQ= 24420\nIHJ1c2hlZA== 24421\nIGludGVybmF0aW9uYWxseQ== 24422\nIG5pdmVs 24423\nIGJveGluZw== 24424\nZmFsbGVu 24425\n4buRYw== 24426\nIHNlaW5lbg== 24427\ncGxpY2l0eQ== 24428\nIGNhcmJvaA== 24429\nIFRyYXZpcw== 24430\ndXNv 24431\nIFBoYXNl 24432\nIGFjdGl2YXRpb24= 24433\nIG9waW8= 24434\nt6g= 24435\nIGRlY3JlYXNlZA== 24436\nQ2Fy 24437\nIGJ1bmRsZQ== 24438\nIGV4cGVuZA== 24439\nb3JtYWw= 24440\nIGFkamFjZW50 24441\nIG1lZQ== 24442\nINC+0YDQsw== 24443\nIHRyYW5zY3JpcHQ= 24444\nIExhbmd1YWdl 24445\nR1M= 24446\n6KeJ 24447\nIHNldWw= 24448\nw6BuaA== 24449\nIG55YQ== 24450\nbmluZ3M= 24451\nIOyLnOs= 24452\nIOuUsOudvA== 24453\nIEFncg== 24454\nw61k 24455\n55WZ 24456\nIGFieQ== 24457\nIE5lbw== 24458\nxLF5b3J1eg== 24459\nIFRoaW5raW5n 24460\nYWltZQ== 24461\nIHZpdGU= 24462\nIHRyYXbDqXM= 24463\nINeR16I= 24464\nINC80LXQtA== 24465\nT3Vy 24466\naG9vdA== 24467\nIGxpbmVy 24468\nIFBpenph 24469\nIGh5Zw== 24470\nZmxpZXM= 24471\nIENvbnRpbnVl 24472\nIGRlbnRhbA== 24473\nIFRpYg== 24474\nIHJlZ3VsYXRl 24475\nbGllw58= 24476\nQUxL 24477\nIFRhZQ== 24478\n6ri4 24479\nIEJyZXhpdA== 24480\nIEd1dA== 24481\nIG9jY3VwYXRpb24= 24482\nIHpyb2Jp 24483\nw6Jt 24484\nIHdoaXNr 24485\n5LiW55WM 24486\nIGthbnNrZQ== 24487\nb21vbg== 24488\ncm9iZQ== 24489\nIHdhcmZhcmU= 24490\nIHRo4buD 24491\nIGpha2k= 24492\nIHN0cm9rZXM= 24493\nIHBlYXM= 24494\nIERhbWl0 24495\nSEFO 24496\nIGludGVyZmVyZW5jZQ== 24497\nINC80LjQvdGD0YI= 24498\nTkVS 24499\nb3V0aW5n 24500\nIHRleHR1cmVz 24501\nn4k= 24502\nb3dp 24503\nIO2VmQ== 24504\nIGRlbnM= 24505\nIHByb3RhZ29uaXN0 24506\nw6Rubg== 24507\nIGdvZGRlc3M= 24508\nIHdvbGx0ZQ== 24509\naWpv 24510\nIFdvY2hl 24511\nIFZQTg== 24512\nc3Rvcnk= 24513\nIGtpbmRlcmc= 24514\nIGZ1bm5lbA== 24515\nIGRpc3RyZXNz 24516\n0L3QvtGB0YLRjNGO 24517\nIG5vaXN5 24518\nINC/0YDQvtC00L7Qu9C2 24519\nIGRhcmFu 24520\nIGVuenltZQ== 24521\n0LvQvtC2 24522\nIG11dGU= 24523\nIGR3YXI= 24524\nINin2LM= 24525\nIGtvbXBs 24526\nIG1lcml0 24527\nIGZvc3Nl 24528\nIERyaW5r 24529\nIGZvcmE= 24530\nIHdvaGw= 24531\nIGJyZWV6ZQ== 24532\nIHNhbml0 24533\nIGRyaW4= 24534\nIOydtOqxsOuKlA== 24535\nIDYy 24536\nIOywqOs= 24537\nYWJ5dGVz 24538\nIGRlZWRz 24539\nINC5 24540\nacOobWU= 24541\naWdnbGluZw== 24542\nICIn 24543\nINGH0LDRgdGC0Yw= 24544\nIEFuc3dlcg== 24545\nIGV2YW5nZWw= 24546\nIDEwODA= 24547\nIFZpc2l0 24548\naWNpZW50 24549\nIHJlbGlhYmlsaXR5 24550\n0Y7RgdGM 24551\nIEVhcmxpZXI= 24552\nIGZpZA== 24553\n562J5LiA5LiL 24554\nIHNsZWV2ZXM= 24555\naXlvcnN1bg== 24556\nIGJpYg== 24557\nIEFjY291bnQ= 24558\n0Y/Qu9C4 24559\nY2lwbGluYXJ5 24560\nemFz 24561\nINCx0LXRgA== 24562\nIG5lY2tsYWNl 24563\nIGJsZW5kZXI= 24564\nIFBoaWxsaXBz 24565\nZXRp 24566\nIEp1cGl0ZXI= 24567\nIHByb3ZvYw== 24568\nIFllYXJz 24569\nZW50cmU= 24570\nYWNpbw== 24571\nIGvDvA== 24572\nIGFudGVubmE= 24573\nIG5vdmVscw== 24574\nIGZhcnQ= 24575\nIFN1Z2Fy 24576\nIEp1ZHk= 24577\nIGNvbGxhcHNlZA== 24578\n57A= 24579\ncml0aXM= 24580\nIOyDge2ZqQ== 24581\n0JfQqw== 24582\nIFZlcmY= 24583\ncmFuZWFu 24584\nZXJldW0= 24585\nIFRhcmdldA== 24586\nIDg4 24587\nINCY0Lc= 24588\naWRlbw== 24589\nIHJlZ3Jlc3Npb24= 24590\n7Lac 24591\nIG3Ds3dp 24592\nIHN0dWRpb3M= 24593\naWVucw== 24594\naXBo 24595\nIGZyeWluZw== 24596\nIGZhc2NpbmF0ZWQ= 24597\nIFdhaA== 24598\nYnVja3M= 24599\nbWF5YQ== 24600\nIFNhdHVybg== 24601\nIE1vbW15 24602\nIHJhdGluZ3M= 24603\nIGF1dHVtbg== 24604\nxrDGoW5n 24605\nIGxvc2Vy 24606\nIGNlbnRybw== 24607\nw6lyaWV1cg== 24608\nIEZvbGQ= 24609\nIHN1cGVydmlzb3I= 24610\nIE5vYmVs 24611\nIHVuZGVyZXN0 24612\nb2JpYQ== 24613\nINCy0YHRjw== 24614\nIHZlcnc= 24615\nIGZ1ZWxz 24616\nIGFydGlmYWN0cw== 24617\nIOu2mQ== 24618\nIEF1dG9t 24619\n55qE5piv 24620\n25Q= 24621\n15XXoQ== 24622\nIGlobmVu 24623\nIDU5 24624\nb3VuZGluZw== 24625\n0LXRgNGL 24626\naW5hcnM= 24627\nY2hhbnQ= 24628\nIGFkZGljdGVk 24629\nIGV4cGxvc2l2ZQ== 24630\nIGRpc3BlcnM= 24631\n4paI 24632\nYXhpcw== 24633\nQVJZ 24634\nIGx1bQ== 24635\nINGD0YHQuw== 24636\nINiM 24637\nIHJ1cGVlcw== 24638\nIFBlYXJs 24639\nY2FtcA== 24640\ndHY= 24641\nb3lh 24642\nIGNvbmNsdWRlcw== 24643\nIGNvbGxpc2lvbg== 24644\nIGJ1eWVy 24645\nIHBsYXlncm91bmQ= 24646\nIHNwcmluZ3M= 24647\nIGZlbWluaW5l 24648\nIFJhcw== 24649\nIGluY2FyY2Vy 24650\n7ZeY 24651\nIGRpYWxlY3Q= 24652\nIGNsb3N1cmU= 24653\nIGNoYXR0aW5n 24654\nIGJhYmU= 24655\nIHNwb3RsaWdodA== 24656\nIG5vdGF0aW9u 24657\n6Lev 24658\nU3Rhcg== 24659\nacOjbw== 24660\nIHTDqnRl 24661\nIHRpZGU= 24662\nIGp1bnRv 24663\nIHNlbmF0b3I= 24664\n0KU= 24665\nIGV4Y3VzZXM= 24666\nIGJsaW5r 24667\nIGFkbWlzc2lvbg== 24668\nIExpbHk= 24669\n0YvQvNC4 24670\nIGFtaWdv 24671\nIGx1c3Q= 24672\n64us 24673\nIGFtaW5v 24674\n5LqL5oOF 24675\nIGNvbnN1bHRhbnQ= 24676\nIEVsZWN0cmlj 24677\nIOuFuOuemA== 24678\ndWphaA== 24679\nIHNob290ZXI= 24680\naWNodGVu 24681\nIFVrcmFpbmlhbg== 24682\nIGFpbXM= 24683\nIEVudGVydGFpbg== 24684\nIG1pcmFjbGVz 24685\n6K2w 24686\nIHplaWdlbg== 24687\nIGxhbQ== 24688\nIHJlc3M= 24689\nIEppbGw= 24690\neWxhbg== 24691\nIHJvb2s= 24692\nIGhheWE= 24693\nIHBhc3Nwb3J0 24694\nYWRhdGE= 24695\nIGp1aWN5 24696\nY29uZg== 24697\n0LvQtdC5 24698\nIFN6 24699\nIGludGVyY2VwdA== 24700\n44GC44KK44GM44Go44GG44GU44GW 24701\nIFRlYW1z 24702\nIG1ha2Vu 24703\naXJyZWw= 24704\nIExJS0U= 24705\n4bqteQ== 24706\n6rWw 24707\nIHNob3J0YWdl 24708\nIHBhcmFkaWdt 24709\nIHBhcGVs 24710\nIGFzdGVybw== 24711\n44G+44Gf 24712\nIHNvbGxlbg== 24713\nIE1pY2tleQ== 24714\nIE9ybGVhbnM= 24715\nIGNob2xlc3Rlcm9s 24716\nIGdvb3Nl 24717\n0YbQuNGO 24718\n44GC44KL 24719\nIEZM 24720\nINCz0L7Qu9C+0LI= 24721\nIHRyaWJ1dGU= 24722\nIEdhbQ== 24723\nIMOpdmlkZW1tZW50 24724\n0Y/RhQ== 24725\n5a6e 24726\n55Sw 24727\nIGluYXBwcm9wcmk= 24728\ndWhhbg== 24729\nIG9yZ2FuaXphdGlvbmFs 24730\nYWlsZWQ= 24731\nIGVuZHVyZQ== 24732\nIDc2 24733\nIHNob3RndW4= 24734\nIGxpdnJl 24735\nIHN1aXRlZA== 24736\nIHdhcm10aA== 24737\nIFNJTQ== 24738\nIGVudmlzaW9u 24739\nIGRlZ3JhZA== 24740\nw65uZQ== 24741\nTGF1Z2hpbmc= 24742\nIFdob2V2ZXI= 24743\nIEJ1ZGRoaXNt 24744\nIHNwcmlua2xl 24745\nY2XEn2l6 24746\nIHJ1aW5z 24747\nIHN0YXJjaA== 24748\nIEhlcno= 24749\nIGluanVzdGljZQ== 24750\nIGh1bWlkaXR5 24751\n0L7QttCw0LvRg9C5 24752\nIE9iamVjdA== 24753\nIElnbg== 24754\nIEV4YW0= 24755\naWdlcnM= 24756\nIHRob3U= 24757\nIFNveQ== 24758\naXZhcw== 24759\nIHBvbGVz 24760\nbWF0aA== 24761\nINCy0L3QuNC8 24762\nSU5HSU5H 24763\nZWRyYWw= 24764\nIGV4cGxvcg== 24765\nIHJvYXN0ZWQ= 24766\nIGNyYXds 24767\nIGNvZmY= 24768\nIGFub20= 24769\nIHdpag== 24770\nIGltcHJvdmVz 24771\nIHRyZWF0eQ== 24772\nIGRpc2NvdmVyaW5n 24773\nIHN0YXR1dGU= 24774\nIG1lcmNhZG8= 24775\nINGB0LjQuw== 24776\nIGludGVs 24777\nIENoYW5jZWxsb3I= 24778\nIE1lZGljYWlk 24779\ndWdp 24780\nIHZlcmJhbA== 24781\nIGTDtm4= 24782\nIHNjcmlwdHVyZQ== 24783\nIGl0ZXJhdGlvbg== 24784\nZWtz 24785\nIE94Zm9yZA== 24786\nIHfDpGg= 24787\nIFZhZA== 24788\nIEFL 24789\nIOyVhOydtOs= 24790\nIGlldHM= 24791\nIG5lZWRsZXM= 24792\n2YPZhQ== 24793\nIHBhc2Fkbw== 24794\nIGFsYnVtcw== 24795\nIHllYQ== 24796\nZXR6ZW4= 24797\nhOuPhA== 24798\nIGRldGVybWluZXM= 24799\nIHRoZWU= 24800\nIFBsYXlpbmc= 24801\nw6RydA== 24802\nINem 24803\nY2xlZA== 24804\nIGRvd253YXJk 24805\nYWxvbmU= 24806\nIHNvbHU= 24807\nIHBhcnRpdGlvbg== 24808\nIHd6 24809\nZGQ= 24810\nIHBlc3NvYWw= 24811\n5aq9 24812\nIGZhY3Rvcmllcw== 24813\nIGJsZWlidA== 24814\n4Lih4Liy 24815\nYWxzYQ== 24816\nIE5GTA== 24817\nIGZ1ZXJh 24818\nIHJlc2VydmVk 24819\nIEVhcm4= 24820\nIGhlbHQ= 24821\nIHNob3J0Y3V0 24822\nIGNvbnZpbmNpbmc= 24823\nc3BhY2U= 24824\nIGVuZm9yY2U= 24825\nIGNvcmVz 24826\nIGVmdGVy 24827\nIHJlY2Vzc2lvbg== 24828\neGljbw== 24829\nIHByb3Bvc2l0aW9u 24830\nYXJpYW5z 24831\ncm9wb2w= 24832\nIOuqsOs= 24833\nIM6c 24834\nIOyalOymmA== 24835\nIGFjdGl2aXN0 24836\nIGNvbnZpY3Rpb24= 24837\nIHphYg== 24838\nIGNhbmNlbGVk 24839\n0YLQvtGH0L3Qvg== 24840\nIM6u 24841\n6YCZ5qij5a2Q 24842\nbml0ZQ== 24843\nIGZ1bmRyYQ== 24844\nYnV6emVy 24845\n0LXQu9C+ 24846\naWNhdGlvbnM= 24847\nIHpvbmE= 24848\nIHRlZW5z 24849\nIG1ldGhvZG9sb2d5 24850\nIOykkeyalA== 24851\ndGhhbg== 24852\nIFVs 24853\nIEdyZXk= 24854\nIGhvZw== 24855\nSU5L 24856\nIFN1bmc= 24857\nIENsYXVk 24858\nIENOTg== 24859\nIGRlbGl2ZXJz 24860\nYWxpbg== 24861\nIEFkb2Jl 24862\nb3RoZQ== 24863\nIERlc3dlZ2Vu 24864\n4Liz 24865\nIHdlcmRl 24866\nIGdyZWFzZQ== 24867\nIHVwZ3JhZGVz 24868\nIEZpbmxhbmQ= 24869\nYWNjZXB0 24870\nIGludGVycm9n 24871\nYmVl 24872\nIOOBqw== 24873\nIHByZWRl 24874\nIE5lcA== 24875\nIENhbWJyaWRnZQ== 24876\nIGdyYXBocw== 24877\nIGhhdW50ZWQ= 24878\n0YHQtdC8 24879\n5qc= 24880\n5YWL 24881\nU29tZQ== 24882\nIE1hbGw= 24883\nIHJlaGVhcnNhbA== 24884\nIFVyYmFu 24885\nIExhZw== 24886\nIG5pbQ== 24887\n6rCV 24888\nIHBvc2l0aW9uZWQ= 24889\nIGF2b2lkZWQ= 24890\nRU1B 24891\nIGxsZWdhcg== 24892\nIHLDoXBpZG8= 24893\nIGdvdXZlcm4= 24894\nIGhpbmc= 24895\nIGRlYWxlcg== 24896\nIHJlZm9ybXM= 24897\nIGZhdHR5 24898\n0LrQvtC7 24899\nIEFjZQ== 24900\nIG5lcA== 24901\nIOyyrQ== 24902\nIGNvbXB1dGF0aW9u 24903\nIFN0cmVhbQ== 24904\nYm91cm5l 24905\ndHVy 24906\nUG9y 24907\nIHNsZWVweQ== 24908\nIGJhbmdldA== 24909\n44GC44Gu 24910\nIHdlaWdocw== 24911\nIGJsZWliZW4= 24912\nIEdyZW4= 24913\nIHVuaW9ucw== 24914\nIOq1kA== 24915\nIGFwcmVuZGVy 24916\ndWl0YXI= 24917\nIEplc3Q= 24918\ndW1pbmc= 24919\nIFBsYXllcg== 24920\nIEV4dHJlbQ== 24921\nIGludGVnZXI= 24922\n0LDRh9C1 24923\nIGNvbmNlcnRz 24924\n15XXmw== 24925\nIHRyb2NoxJk= 24926\nIFJlcGU= 24927\n6YeN6KaB 24928\n4LmC 24929\nxbxlbg== 24930\nIHNvdW5kaW5n 24931\nIGFub255bW91cw== 24932\nIGV4Y2E= 24933\nIElyYW5pYW4= 24934\nIGVuZXJnZXRpYw== 24935\nIHdpdmVz 24936\nINGG0LLQtdGC 24937\nIGFpcw== 24938\n44GL44Gq 24939\nIHN1ZGFo 24940\nIHVuZGVyd2Vhcg== 24941\nIGNydW5jaHk= 24942\nIFBhaW4= 24943\nIGdlcsOnZWs= 24944\ncmVkaWN0 24945\nIG1pc21h 24946\n0ZbRgg== 24947\nIHN1cnZpdmluZw== 24948\nzq3Pgg== 24949\nIHBhcnRpY2lwYW50 24950\nIEhlc3Nlbg== 24951\nw6FyaWFz 24952\nIHN1YndheQ== 24953\naXN0w6Q= 24954\nIGNvcmFs 24955\nIG1hcmlqdWFuYQ== 24956\nIE1lbW9yaWFs 24957\n0YjQuNC5 24958\ncml6 24959\nIHNhdGVsbGl0ZXM= 24960\nIGxlYXNl 24961\nIENhbWVyb24= 24962\ndW1waA== 24963\nIGNsYXNzbWF0ZXM= 24964\nw6Row6Ru 24965\n0YHRgtCy0LU= 24966\nIGh1ZQ== 24967\nk6TsnYQ= 24968\nIHByb3BvcnRpb25hbA== 24969\nIG5vc3M= 24970\nIGxhcHM= 24971\ncsOl 24972\nIGJpdGNvaW4= 24973\n0JfQq9Ca0JA= 24974\nIOy2qQ== 24975\nINmE2YQ= 24976\nIE1vcnQ= 24977\nIEVzcA== 24978\nYXJub3M= 24979\nINGB0LrQsNC30LDQuw== 24980\nIMOkbmQ= 24981\n5YWE 24982\n15nXmded 24983\nIEdlYg== 24984\nZ2VoZW4= 24985\nSW5hdWRpYmxl 24986\nYm9yb3VnaA== 24987\n0YTRhA== 24988\nIGZlbGxvd3NoaXA= 24989\nIFBhcGVy 24990\nIGN1cnZlZA== 24991\nIEdFT1I= 24992\nIGNhbGN1bGF0b3I= 24993\nIENhdGFs 24994\nIHbDoG8= 24995\nIGJ5cGFzcw== 24996\n0LvQtdGC 24997\n4LM= 24998\ndHJhbnM= 24999\ncmVuY2llcw== 25000\n7KGM 25001\naWdlbnQ= 25002\nIHRhc3RlZA== 25003\nIG9jZWFucw== 25004\ndWZ0 25005\nZXJ2aWNl 25006\nINCc0KPQl9Cr0JrQkA== 25007\nIENsYXNzaWM= 25008\nIHJlc3BlY3RpdmVseQ== 25009\nfik= 25010\nw650cmU= 25011\nIE5hc2g= 25012\nIHppdA== 25013\nIOybgw== 25014\nIOuGkg== 25015\ncXVvdGU= 25016\nIFVucw== 25017\nIHRhYw== 25018\nIHByb3Zlcw== 25019\nIFBvcnRsYW5k 25020\nYmx5 25021\nIGVyZQ== 25022\n7LaU 25023\nIMOpcG9jYQ== 25024\nINGC0YvRgdGP0Yc= 25025\nNzY= 25026\nIGhhZGU= 25027\nIEZybw== 25028\nIHBvbMOtdGljYQ== 25029\ndGFn 25030\nIO2VrQ== 25031\nIHNjaMO2 25032\nYXJldHQ= 25033\nIHByb3Zpc2lvbnM= 25034\nIG1vdG9ycw== 25035\nIGltYWdpbmc= 25036\nIGRvaw== 25037\ndWxvdXNseQ== 25038\nIG1laWxsZQ== 25039\n546w5Zyo 25040\n65A= 25041\nIElTTw== 25042\nIFNURU0= 25043\nIEJvd2w= 25044\nIHRvd2Vycw== 25045\nIEVl 25046\nIFBlcmZvcm1hbmNl 25047\nIGxvaW4= 25048\nY3Vzc2lvbg== 25049\nIGNvYXN0YWw= 25050\naWFsZQ== 25051\nY29tcGFzcw== 25052\nIHNwZWxscw== 25053\nIGRpc2FwcG9pbnRpbmc= 25054\nIOuyiOynuA== 25055\nRUVS 25056\nIHZlcnNhdGlsZQ== 25057\nYXN1cnk= 25058\nIGVuZmlu 25059\nIGRvd25zaWRl 25060\nIGd1aWRpbmc= 25061\nINin2YTZgg== 25062\nIG5pbmV0eQ== 25063\nY2hhcmdlZA== 25064\nIEZhbnM= 25065\nIHBoaWxvc29waGljYWw= 25066\nIGdhcm4= 25067\nIG3DpW5nYQ== 25068\nIHdpbGxpbmduZXNz 25069\nIHBvcnRpb25z 25070\nYWJlbg== 25071\nIO8= 25072\nwr8= 25073\ncmF1bA== 25074\nIHNwcmludA== 25075\naWZlbg== 25076\nxLF5bGE= 25077\nINC60YPQvw== 25078\n44GP44Gg44GV44GE 25079\nIGVuc3VpdGU= 25080\nIENhcGl0b2w= 25081\nIDYz 25082\nINCz0L7QstC+0YDQuNGC 25083\nIGFwcG9pbnRtZW50cw== 25084\n5om+ 25085\nb21pYXN0 25086\nIGNhcmVn 25087\nIHB1Ymxpc2hlcg== 25088\nIGhlcmF1cw== 25089\nIM61zq8= 25090\nIFZT 25091\n44Gd44GX44Gm 25092\n5Lit5YWx 25093\nIHNhY3JpZmljZXM= 25094\ndGhpcmQ= 25095\nIGh1bWFuaXRhcmlhbg== 25096\nIOuCtOw= 25097\naW1vbg== 25098\nIGluZXF1 25099\nIHpvYg== 25100\nIGNvbWZvcnRhYmx5 25101\nIERpbmdl 25102\nIGNhbmNlbGxlZA== 25103\nIFBTQUtJ 25104\nIFJvYmluc29u 25105\nIGZpbnM= 25106\nKT8= 25107\nIEhpc3Rvcg== 25108\nINGH0LXQu9C+0LLQtdC60LA= 25109\nIHRic3A= 25110\ndGV4dA== 25111\na2lt 25112\nIHVwZGF0aW5n 25113\nIGdlbGQ= 25114\nZmVsZA== 25115\nj7w= 25116\nIG3DpA== 25117\nIGNhZsOp 25118\n1oA= 25119\nIFNyaQ== 25120\nIFJlZ2lvbg== 25121\nIEhhaGFoYQ== 25122\nIGZpbmFuY2Vz 25123\nINin2YTYtA== 25124\nIGJ1bms= 25125\ncnVr 25126\naGFmdA== 25127\nIGxhdGVyYWw= 25128\nIGV4dGVuc2lvbnM= 25129\nIOyVhOydtA== 25130\nIGRlZmluaXRl 25131\nIFpoYW8= 25132\nIEx1aXM= 25133\nc3R5 25134\nIGNhc29z 25135\nIEtsaW0= 25136\nIDE5OTM= 25137\nIHJlYWxpemF0aW9u 25138\nIGhpc3Rvcmlhbg== 25139\nIGNyYWNrZWQ= 25140\n64K0 25141\nIHN5c3TDqG1l 25142\nIENJQQ== 25143\nINGC0LLQvg== 25144\nb3NwaGVyaWM= 25145\nIGZsZWU= 25146\nIHLhuqV0 25147\nIFJlZ2FyZGxlc3M= 25148\nIHJlbHVjdA== 25149\nIHRpbWVseQ== 25150\nIEp1bGlhbg== 25151\nR00= 25152\n6ZI= 25153\nYWR1cmE= 25154\n6aOf 25155\nIGRyZXNzZXM= 25156\n54Gj 25157\nIOuUlA== 25158\nIG5vbWluYXRlZA== 25159\nIGFkdm9jYXRlcw== 25160\neW1waA== 25161\nIHJlY29yZGluZ3M= 25162\nIGRldmlhdGlvbg== 25163\nIHByaW9yaXRpemU= 25164\nIHNwaXJhbA== 25165\nIFlPVVI= 25166\nIHRyYW5zcG9zZQ== 25167\nYW1wb28= 25168\nIOybkOuemA== 25169\nIFZpc2lvbg== 25170\nIHBvbGl0ZQ== 25171\nIGhhbWI= 25172\nIFBhdGllbnQ= 25173\n5q+U6LyD 25174\n7YGs6w== 25175\nIHNpYQ== 25176\nIOqzsw== 25177\nIMW+ZQ== 25178\n6KeA 25179\nIHN1cGVybWFya2V0 25180\n67k= 25181\nIFNpZXJyYQ== 25182\nIGdyaWxsZWQ= 25183\nIFVwb24= 25184\nIGFic2VudA== 25185\nIG1lYw== 25186\nIEFwb2xsbw== 25187\nIHB1bms= 25188\nIFBhxYRzdA== 25189\nINGB0LLQvtC5 25190\nIOqxsOq4sA== 25191\nR2lybA== 25192\nIHNraW5ueQ== 25193\nIFByZW1pZXI= 25194\nIHRlcnJpdG9yaWVz 25195\nIGxpYWJpbGl0eQ== 25196\nIGplcms= 25197\ncmF0aWM= 25198\nIGRhbmNlcnM= 25199\nINGD0YDQvtCy 25200\nIOq0gOs= 25201\nb25seQ== 25202\nIFN0dQ== 25203\nIHNrZWxldG9u 25204\nIOutkOs= 25205\nINC30LDQutC+0L0= 25206\nxLFrdA== 25207\nIE1JS0U= 25208\nIGzDtg== 25209\nbWll 25210\nIHJlaXRlcg== 25211\n44GT44KM44Gv 25212\nIEtvbGxlZw== 25213\nIEFkYW1z 25214\nbGljaGVy 25215\nIMOnb2N1aw== 25216\n0Y/Qsw== 25217\nIGJsdXNo 25218\nIHN1bnNoaW5l 25219\nIGV6 25220\nIERldmls 25221\nIOq4uA== 25222\nIOOBig== 25223\nYWRk 25224\nIGxpY2Vuc2Vk 25225\nIHZpbnls 25226\nIEN6ZWNo 25227\naW1hZw== 25228\nIGNyYWNraW5n 25229\nIOy6 25230\nIHVkYWg= 25231\nIHNvbW1lcw== 25232\nIOyWvOq1 25233\nd2HEhw== 25234\nIGZyZXM= 25235\n5ZG9 25236\nIFdhbG1hcnQ= 25237\nINCi0LXQv9C10YDRjA== 25238\nYXRpc2Y= 25239\nQ0k= 25240\nbGFuZw== 25241\nIGRpZmZ1c2lvbg== 25242\n55S3 25243\nIHNvbW9z 25244\nIE1ha2Vz 25245\n5oiR5oOz 25246\nIFJpY2t5 25247\nIG11Y2hh 25248\n7ZWo 25249\nIGhvcnNlcG93ZXI= 25250\nYXNpYQ== 25251\nIGZpYmVycw== 25252\nIGVybQ== 25253\n0YHQutC40LU= 25254\nIGplc3Rl 25255\nIGZpcmVmaWdodA== 25256\nIGN1aXNpbmU= 25257\nIGJlc29uZGVycw== 25258\nZGln 25259\nIOyihQ== 25260\nINGD0LY= 25261\nIHRyYWNpbmc= 25262\nIGNlcnRhaW5z 25263\nIEFwcGx5 25264\n0YvQstCw0YLRjA== 25265\n54w= 25266\nIGJydQ== 25267\nIFlFUw== 25268\nIEJhaQ== 25269\nIERpdA== 25270\nIEJpcw== 25271\nIHVubGU= 25272\n0YHRgtCw0YLQvtGH0L3Qvg== 25273\nIEF3YWs= 25274\nLi4i 25275\nIDEyNQ== 25276\nIHJvb3RlZA== 25277\nIGNhdXRpb3Vz 25278\nY29uc3Q= 25279\nIG9yY2hlc3RyYQ== 25280\n55y8 25281\nINCy0L3Rg9GC 25282\nIHF1ZWxxdQ== 25283\nINC+0YLQstC10YI= 25284\nIE1ldGhvZA== 25285\n7Lmc 25286\nIM68zrHPgg== 25287\nbMO8 25288\nIOyVhOq5jA== 25289\nIG5hbWluZw== 25290\nQ2hhcg== 25291\nIFNpY2hlcg== 25292\nIHByaXZpbGVnZWQ= 25293\nIEZseQ== 25294\nIOOBiw== 25295\n4bqtdA== 25296\nIGFkdmFuY2Vz 25297\nIFplbGRh 25298\nIGFuZHJh 25299\nIGdyaW5kaW5n 25300\nIEVkaXRpb24= 25301\ncGY= 25302\nIHdhcnJpb3Jz 25303\nIGhlZGdl 25304\nIHVuc2VyZW4= 25305\nINGB0Y7QtNCw 25306\nZWxpbmVzcw== 25307\nIHBlcnNvbmFsaXRpZXM= 25308\nIGbDtg== 25309\nJ00= 25310\nINGC0L7Rh9C90L4= 25311\nIHNoaXBwZWQ= 25312\nIG1ldGVvcg== 25313\nIHN1cnJvdW5kaW5ncw== 25314\nIEZpbGw= 25315\ndWVzdGE= 25316\nIFBlcnNvbmFs 25317\nIEFsbGU= 25318\nT1JU 25319\n5LmF 25320\nIFNjaGU= 25321\nVkk= 25322\nIGNvbXBhcmFibGU= 25323\nZGFtbg== 25324\nIGRpdGNo 25325\nWUFO 25326\naXNtdXM= 25327\nIHBpY2t1cA== 25328\nIGRhaw== 25329\nIEVQ 25330\nYmVzdA== 25331\nIFN1ZQ== 25332\nw6RsbHQ= 25333\nIHBvcGNvcm4= 25334\nIGZvbGRpbmc= 25335\naG9tZQ== 25336\n0LjQstCw0LXRgg== 25337\n5bey57aT 25338\nIGFubm90 25339\nY2h1Y2s= 25340\nIGZpZXJjZQ== 25341\nIGRhbWFnaW5n 25342\nIGZsb3A= 25343\nIHBhc2Fy 25344\nIHJlZWY= 25345\nINGB0LLQvtC10Lk= 25346\nIHpvbw== 25347\nb3ZlcnM= 25348\namV0cw== 25349\nIHByw6hz 25350\nIFNpbGljb24= 25351\ndGVvaw== 25352\nIFNldGg= 25353\nYXRhbWVudGU= 25354\nIHRyYW5zbWl0dGVk 25355\nIHJlcGxpY2F0ZQ== 25356\nIHNsaW0= 25357\nIENyZWFt 25358\n5oSf44GY 25359\nIHNpZGV3YWxr 25360\n7IiY6w== 25361\nINC20LjQt9C90Yw= 25362\nIE1vbmljYQ== 25363\n5L6G5LqG 25364\nIGNvcGllZA== 25365\nIFRlcnJh 25366\naXN0ZW50 25367\n57O7 25368\nINC+0L3Qvg== 25369\nIHdoYWxl 25370\nIFdJVEg= 25371\n0LvRg9GI 25372\n5b2x54mH 25373\nIEVlbg== 25374\nINGB0LLQvtC4 25375\nIG9yZGlu 25376\nIHBsdXJhbA== 25377\nIHNwb2tlcw== 25378\nIGRpc3B1dGU= 25379\nIHNlbnNpYmxl 25380\nIHByZWFjaGluZw== 25381\nIGt0w7Nyenk= 25382\ncHRlZA== 25383\nYXZpZXI= 25384\nIHBpc3RvbA== 25385\nIFRhcGk= 25386\nIMWC 25387\nZmZmZg== 25388\nIGFjcnlsaWM= 25389\nIGlnbm9yYW5jZQ== 25390\nIFppZWw= 25391\ncmFucw== 25392\nIHdlbGRpbmc= 25393\nbWlk 25394\n5oiR5LiN 25395\nINC30LDQvdC40Lw= 25396\nIGxhbmVz 25397\nIG1pbmVz 25398\nIG1vbXM= 25399\n15XXlw== 25400\nIENoYW1iZXI= 25401\ndGllcg== 25402\nIG1vZGVzdA== 25403\nIOyXrOq4sOyEnA== 25404\nIHVuYXM= 25405\nIHdyZW5jaA== 25406\naGFuZGVk 25407\nIHNhdHVyYXRlZA== 25408\nIEZhbmc= 25409\nIENvbW1pc3Npb25lcg== 25410\n4KSw 25411\nINeW 25412\nIExvdWlzaWFuYQ== 25413\nIE1hc2s= 25414\nIGN1YmVz 25415\n7JSo 25416\nIHZpZMOpb3M= 25417\nIG7DpWdvbg== 25418\nIHJpZGVy 25419\nIOy2nA== 25420\nIHPDs24= 25421\nIExhdGlubw== 25422\nYmFuaw== 25423\n7ZW07KO8 25424\nIEJyZW5k 25425\nIHNleHVhbGl0eQ== 25426\nLi4uLA== 25427\nIGZvcmdldHRpbmc= 25428\nINuM 25429\nIEF2ZW5nZXJz 25430\nIEJvbmpvdXI= 25431\nY2Vzc29y 25432\n0LrRgNCw0Zc= 25433\nY2VuY2U= 25434\nIGdlb2dyYXBo 25435\nY3Vsbw== 25436\n0L7RgdGC0Yw= 25437\nIHN3ZWF0aW5n 25438\n7YOA 25439\nIHN5bW1ldHJ5 25440\ndHPDpQ== 25441\nIGphbg== 25442\nIEZlcnI= 25443\n6aaW 25444\nIGFtYmFzc2Fkb3I= 25445\nemnEmWs= 25446\nIG11c3Vu 25447\nINGD0YI= 25448\nIExH 25449\naXNzZW50 25450\nY29tbXVu 25451\nIGNvdXJz 25452\nIGRldmVsb3Bz 25453\nIGJyb256ZQ== 25454\nIHN1YnN0YW5jZXM= 25455\nZHJpdmVu 25456\n7KO87IS47JqU 25457\nIGFvcw== 25458\n5YSE 25459\nIFBST0ZFU1M= 25460\naGFsZg== 25461\nIHNvcnRlZA== 25462\nIEJvbWI= 25463\n0LvQsNCz 25464\nIE1hbGF5c2lh 25465\nIENocmlzdGluYQ== 25466\nIHRlYW1tYXRl 25467\n6IGe 25468\nRlQ= 25469\nIGvEsQ== 25470\naGVhcnRlZA== 25471\nKys= 25472\nb2dlbmlj 25473\nIGJlbGxz 25474\nIE91YWlz 25475\nIHNwZWNpYWxpc3Rz 25476\n0LHRiw== 25477\nZGVwdGg= 25478\nbGFzc2Vz 25479\nZ2llcw== 25480\nIENvZmZlZQ== 25481\nIG1hcmtpbmc= 25482\nIGZvbGw= 25483\ndWxp 25484\nIGFkaGVzaXZl 25485\nIEJvdA== 25486\nIFB1bmt0 25487\nZXll 25488\nIEJ1Yg== 25489\nZWxvbmc= 25490\n5Yi2 25491\nINC/0YDQuNC6 25492\nIGRvbm9y 25493\nODQ= 25494\nIGVuZm9y 25495\nIGNhdGNoZXM= 25496\nIGJyaWNrcw== 25497\nIGtuaXR0aW5n 25498\nIEtub3dpbmc= 25499\nb2tz 25500\nSFk= 25501\ncmlkZQ== 25502\nIEZhbnRhc3k= 25503\naW1hbg== 25504\nIHBzZQ== 25505\nIOyYqA== 25506\nINCy0LQ= 25507\nIHJlc3RyYQ== 25508\nIGV2YWx1YXRlZA== 25509\n0YDQtdCy 25510\nIGZvcnR1bmF0ZWx5 25511\nIGNoZWdhcg== 25512\n2LHYqA== 25513\nIGRvbWFpbnM= 25514\naWJp 25515\nYXJyeQ== 25516\nIHNodXR0ZXI= 25517\nIGZpY291 25518\nTWlrZQ== 25519\nIGluY2x1 25520\nIGRvbm9ycw== 25521\nIGFwbA== 25522\nIExvd2Vy 25523\nIGltcG9ydGVk 25524\nIGFjYWRlbXk= 25525\nIGZpbmFscw== 25526\nIGRpc2FwcGVhcnM= 25527\n2YrYpw== 25528\nIGFkbWluaXN0cmF0b3I= 25529\nanM= 25530\nIGN1dHRlcg== 25531\nIHJhbmdpbmc= 25532\nw7ZycGVy 25533\nIGNvbnN0cmFpbnQ= 25534\nIFRhYmxl 25535\nIFNoYW4= 25536\ndmlj 25537\nIEZpeA== 25538\nIFN3aWZ0 25539\nb3VuY2Vz 25540\nIFdhcnVt 25541\nIGxldHR1Y2U= 25542\nYXBwZWxsZQ== 25543\nIHNoYXZl 25544\nIGLDoXM= 25545\nIDc3 25546\nIE9vbw== 25547\nYW8= 25548\nIE1jTQ== 25549\nIERyZXc= 25550\nIGx1bXA= 25551\nIGxhc2hlcw== 25552\nc2NoZWlubGljaA== 25553\nUmVw 25554\naW5pcw== 25555\nIENldHRl 25556\nIGNvbXBvc2l0ZQ== 25557\nZW1ldGVyeQ== 25558\nIHNvcnRl 25559\nIEZpbmFuY2lhbA== 25560\n0L7QvdC1 25561\ncm9uZXM= 25562\nIFZveQ== 25563\nIHTDqWM= 25564\noLk= 25565\nIE5pbmph 25566\nIENvcmlu 25567\n0LXQvdC90Y8= 25568\n7J207JeI 25569\nIG5pY2g= 25570\nIGRldGVjdGl2ZQ== 25571\n4oCmIg== 25572\nz4POtQ== 25573\nnbzrj4Q= 25574\nIOuzgA== 25575\nIOu4lOs= 25576\nIHByb3Bl 25577\nIFdyaWdodA== 25578\nINeU16o= 25579\nIFNoaQ== 25580\nIOOBnw== 25581\nIGludmVzdGlnYXRpb25z 25582\n6YKE5piv 25583\nIFBvd2VyUG9pbnQ= 25584\nIENodQ== 25585\nIOyYpO0= 25586\nIOyZhOyghA== 25587\nIEZyYWdlbg== 25588\ndW5uaW5n 25589\nIHBvdXJyYWl0 25590\nIHRleHRib29r 25591\n0LzRiw== 25592\nIGZhaHJlbg== 25593\nINGC0L7RgA== 25594\nIGxha2Vz 25595\nw7xuZGU= 25596\nSW50 25597\nIE1ldHJv 25598\nIG1hbnNpb24= 25599\nINCw0LE= 25600\nIFpob3U= 25601\nIGNvcnJpZG9y 25602\nIGVzY29s 25603\nIGluZGljYXRpbmc= 25604\naWHFgmE= 25605\nIG1vbW15 25606\nIGFyY2hpdmVz 25607\nIGZvdW5kZXJz 25608\nZW5naW5l 25609\nIERpZXU= 25610\nIHNpY2tuZXNz 25611\nIOuztOuLiOq5jA== 25612\nIGFyYg== 25613\nIG5lZA== 25614\nIENob3A= 25615\nIGNvdmlk 25616\nIHNsYW0= 25617\nIHB1YmxpY2F0aW9ucw== 25618\nREM= 25619\nIHNwZW5kcw== 25620\n5r4= 25621\nIHJlZnVnZWU= 25622\nIGRpbGU= 25623\nINeQ15Y= 25624\naWZpY2Fy 25625\nIFNhY2g= 25626\nR3U= 25627\nIHJlbG9hZA== 25628\nPz8/Pw== 25629\nIGplxZtsaQ== 25630\nINGB0L7RgdGC0L4= 25631\nIHNpbXBsaWNpdHk= 25632\nIGJ1bGx5aW5n 25633\nINC80L7Quw== 25634\nIHJlYWxpZGFk 25635\nIHVuY2xlYXI= 25636\nYXBwYQ== 25637\nbGV2YW50 25638\nIElTSVM= 25639\nIFdhdHNvbg== 25640\nIGRlaW4= 25641\nIE1pY3Jv 25642\n7ZWc6w== 25643\nw7xn 25644\nIGRldmFt 25645\nIHR3ZWV0ZWQ= 25646\n5bCO 25647\nIHVuZGVyc3RhbmRhYmxl 25648\nYXRhbg== 25649\nIHZlcnNh 25650\nIHByZWNh 25651\nIHbhu4E= 25652\nIENvcHk= 25653\nIE9yYWNsZQ== 25654\nIG1pbmRmdWxuZXNz 25655\nIGRpc2NyZXQ= 25656\nZXJuZW4= 25657\nIFBsZQ== 25658\nSGF2ZQ== 25659\nIGlzb2xhdGU= 25660\nIGRldQ== 25661\nIHNldmVudHk= 25662\nIEhpbGxz 25663\nIGFyY2FkZQ== 25664\nINGB0L/QtdGG0Lg= 25665\nIHNpZ3VpZW50ZQ== 25666\nIELDnE5ETklT 25667\nbGlnYQ== 25668\nINCy0YHRgtGA0LXRhw== 25669\nw7Rt 25670\nIHR3ZWV0cw== 25671\nIHNjaGF1ZW4= 25672\nIGNyaXRpcXVl 25673\nIPCfjrU= 25674\nIHN0YXR0 25675\nINGB0LDQvNC+0LU= 25676\nw6JuY2lh 25677\nIHN1cGVybmF0dXJhbA== 25678\nIHBsdWdnZWQ= 25679\nRmw= 25680\neW7EsQ== 25681\nIFRhbWJpw6lu 25682\nIGVuY291cmFnZW1lbnQ= 25683\nIFNlcnZlcg== 25684\n64Kc 25685\ndXBh 25686\nIGFzdG9u 25687\nIGhlYXJz 25688\n0YDQsNGF 25689\nIHNjaGU= 25690\nIHJhdHM= 25691\nIHJlY3VwZXI= 25692\nIHVudGVu 25693\nIEZpZ2h0aW5n 25694\nIGFjYWRlbWljcw== 25695\n56S6 25696\nIFPDvA== 25697\n0YHQutC40YU= 25698\nIHBhaXJlZA== 25699\ngOydhA== 25700\nIMOhcmVh 25701\nIHN3ZWV0bmVzcw== 25702\n5Y+K 25703\nIGRlZmVy 25704\nIG11aXRhcw== 25705\nIEF1ZGlv 25706\nIGxvY2tlcg== 25707\n2YrYrw== 25708\nINGB0YLQsNCy 25709\nIGJ1ZW5h 25710\nQU5T 25711\nIGRldGVjdG9y 25712\nYXZv 25713\nYmVr 25714\nIM6xzr0= 25715\n7Y64 25716\nIGRyYWdnZWQ= 25717\nINC00L7Qu9C20LXQvQ== 25718\nw5Y= 25719\n2LHYqQ== 25720\n7J207KeA 25721\nIGNlbGxl 25722\nY2tpbmc= 25723\nINin2YTYrA== 25724\nIENhbnZhcw== 25725\nIGVzcGHDsQ== 25726\nIGdsaW1w 25727\nIHNwcmVhZHM= 25728\nb25nbw== 25729\nIE1hc29u 25730\nIEluZw== 25731\nIOqwgOuKpQ== 25732\nz4TOuc66 25733\nIHNlY3VsYXI= 25734\nIGJhdGVy 25735\nIGlucXVpcnk= 25736\nIGVuZXJnaWVz 25737\nIG1hbnVmYWN0dXJlZA== 25738\nIHZlZ2V0YXJpYW4= 25739\nIHBpbmVhcHBsZQ== 25740\n0Y/RgtCw 25741\nIHByYWN0aXRpb25lcnM= 25742\nMjAwMA== 25743\nIO2VtOyalA== 25744\nIOyXrOufrOu2hOuTpA== 25745\nIOu2iOs= 25746\nIEplZmZlcnNvbg== 25747\nIEpvYW4= 25748\nIHRyYW0= 25749\n5a65 25750\nY2htYWw= 25751\nIEhhaXQ= 25752\n4bmH 25753\nIHVucmVhbA== 25754\nIHN5bWJvbGlj 25755\nIHN0ZWFsdGg= 25756\nIHNwbGFzaA== 25757\nIEVudGVydGFpbm1lbnQ= 25758\nIG1ldGFsbGlj 25759\nPyIu 25760\n6LaK 25761\nYXJvdW5k 25762\nIGRlc3BhaXI= 25763\nIE5ldmFkYQ== 25764\nIEZpbmFuY2U= 25765\nIGtyaWU= 25766\nIEx1eA== 25767\nIFNtYXNo 25768\na2VlcGluZw== 25769\nINC30LDQsw== 25770\nIG5hcmNpc3M= 25771\nIGR6aXNpYWo= 25772\nIHRvbGVyYXRl 25773\nb2FyZA== 25774\nIGxpbmtpbmc= 25775\nIEVjb25vbWlj 25776\nIOy8 25777\nIG1vcnBo 25778\nIE5haw== 25779\nIEJha2Vy 25780\nYXRvbg== 25781\ncmluZ3M= 25782\nIFBlbmc= 25783\nIEFpcnBvcnQ= 25784\n44GL44Gj44Gf 25785\n7ZWY64uk 25786\np4E= 25787\ncHJpbnRz 25788\nIGhhZGk= 25789\nIGVtcGly 25790\nIExpdmVz 25791\nYW5uZXJz 25792\nINC90LjQvA== 25793\nIFBST0ZFU1NPUg== 25794\nIHBvc2l0aXZlbHk= 25795\nYW50b20= 25796\nIGJhZGdl 25797\na2VsdA== 25798\nIGludGVyZmVy 25799\nIGZ1bGZpbGxpbmc= 25800\nIHZpc3VhbGl6YXRpb24= 25801\n6Zec5L+C 25802\nIFByaWNl 25803\n77+977+9 25804\nIHNjZW5lcnk= 25805\nIHByb25l 25806\nIHdpemFyZA== 25807\nIGJhbnlhaw== 25808\ndmVyYg== 25809\nc2t5 25810\nIHdpc2hlZA== 25811\nIHJhaWx3YXk= 25812\nIMO8emVy 25813\nIGFsZ3VpZW4= 25814\nIEFX 25815\nINC60L7Qu9C40YfQtQ== 25816\nIHJlYWN0aW5n 25817\nIEJ1Y2g= 25818\n4Li2 25819\nIGFudGg= 25820\nIHNpaA== 25821\nIGh1c3Q= 25822\nIFNjcmVlbg== 25823\naWxhbnQ= 25824\nYWhv 25825\nIGZyYWdyYW5jZQ== 25826\nIGVsZXZhdGlvbg== 25827\nIE1lZGl0ZXI= 25828\nIOu/ 25829\nIMOpcXU= 25830\nIHdyYXBz 25831\nIGluZXJ0 25832\nIHJlY3JlYXRl 25833\n0LvQsNGC 25834\nIGJvbGVo 25835\nIGhhcmFzc21lbnQ= 25836\ndW5reQ== 25837\nIGdsaW1wc2U= 25838\ncmVnaWVydW5n 25839\nIGZ1dHVy 25840\nIHJlcG9zaXRvcnk= 25841\nIGVuZ3Jh 25842\nIHRyYWZmaWNraW5n 25843\nYXNzaXM= 25844\nIFRyZWs= 25845\nIOuyjA== 25846\nIOuniOs= 25847\nIEthYg== 25848\nYW5pdQ== 25849\nZ2l2ZQ== 25850\nIGRpbm9zYXVycw== 25851\nIGZlYXRoZXI= 25852\nIGF0dGl0dWRlcw== 25853\nIHBsdW0= 25854\nIFJT 25855\nIEFuZmFuZw== 25856\naWxsZXJ5 25857\nIOyKpA== 25858\nTVk= 25859\nIHRyemViYQ== 25860\nIHNraWVz 25861\nIEFq 25862\ndXJhYmxl 25863\nQ1U= 25864\nIFNoYW5l 25865\nIGRlcGFydHVyZQ== 25866\nIFRPTg== 25867\naWV0ZW4= 25868\ncmF0cw== 25869\n5rCX 25870\naXN1 25871\nIGJvcmQ= 25872\nIGludGVyZXN0aW5nbHk= 25873\n55m7 25874\nb3VnaGluZw== 25875\nIHJ1c2hpbmc= 25876\nIHZvbGF0aWxpdHk= 25877\nIHB5dA== 25878\nIGZvcm1hdHM= 25879\nINC30LDRgg== 25880\nIOq8rQ== 25881\nIHdoYXRub3Q= 25882\nIGNvbXBvcnQ= 25883\nc3c= 25884\nb3JlYW4= 25885\nIFJlbGF4 25886\nIGNsYW4= 25887\nIEFI 25888\nIHBldw== 25889\nIGRpY3Rpb25hcnk= 25890\nVGFrZQ== 25891\nc2hpcnRz 25892\nIEh1Z2g= 25893\nINi52YTZig== 25894\nIFBpYw== 25895\nIGVucm9sbGVk 25896\nIGplZG5haw== 25897\nIG9mZmVyaW5ncw== 25898\nIGNvcmF6 25899\nTGlmZQ== 25900\nICEhIQ== 25901\nIGNsZXI= 25902\nIFZpZGVvcw== 25903\nIFJvZHJpZw== 25904\nIElkZW50 25905\nIFBvcw== 25906\nIFN0YWdl 25907\nIFJhY2U= 25908\nIGVuYWN0 25909\n44GE44G+44GX44Gf 25910\nIEd5 25911\nIEhpc3Bhbg== 25912\nIGRlZmVuY2U= 25913\nIENhbXBiZWxs 25914\nbWF0aWM= 25915\nIHJlbGV2 25916\nIHBlYWNo 25917\nhLjsmpQ= 25918\nIHBhcmFkaXNl 25919\nIGNlcmVtb24= 25920\nIGFubm95ZWQ= 25921\n5oyH 25922\nbGF4 25923\nIGV4cGxvaXQ= 25924\nIGNsYXVzZQ== 25925\nZWtlcg== 25926\nIEJsb29t 25927\nbmFudA== 25928\nYXRldXJz 25929\nIGhlaWdodHM= 25930\nRXZlbg== 25931\n0YHQvtC9 25932\nIG91dHJhZ2U= 25933\nIFZpZXRuYW1lc2U= 25934\n44Gv44Gv 25935\nVFI= 25936\nIGVlcg== 25937\nIGNhbm5vbg== 25938\nIENvbWI= 25939\nkOunjA== 25940\n6LuK 25941\nIOqyg+uPhA== 25942\nIGFjY29tcGxpc2htZW50cw== 25943\nIEFuYWx5dGljcw== 25944\nIHNoYXBpbmc= 25945\ncmVpYmVu 25946\nIGJhY2hlbG9y 25947\nIGZpbmdlcnQ= 25948\nYWNrZWQ= 25949\nIHB5cmFtaWQ= 25950\nIFN0ZXdhcnQ= 25951\nw6FzdA== 25952\nIHN1cnZpdm9y 25953\nIGR1Y3Q= 25954\nIGRlYWxlcnM= 25955\n5rS7 25956\n2LnZhQ== 25957\n0LvQuNC9 25958\nIGVkZQ== 25959\n15XXog== 25960\nINmD2KfZhg== 25961\nIM+Ezrk= 25962\nIGNob29zZXM= 25963\nIE93bg== 25964\n0LPQvtGC0L7Qsg== 25965\naGlyZQ== 25966\n0LDQu9GM0L3Ri9C1 25967\nINCb0Y4= 25968\nINC+0YHRgtCw0LI= 25969\ndGVjaA== 25970\nIGRyb2l0 25971\nIHN1YmplY3RpdmU= 25972\nZW5lcw== 25973\nIGRpdmlz 25974\nYXZleg== 25975\nIG1hbmV1dmVy 25976\n4LmE4LiU 25977\nYWRlY2U= 25978\nIEVucw== 25979\nYWNpYWw= 25980\nIFByb3RlY3Rpb24= 25981\nlrQ= 25982\nIGZvcm1hbGx5 25983\nIHd5ZA== 25984\naW5ndcOpbQ== 25985\nIHppZW0= 25986\nIHJlY3J1aXRpbmc= 25987\n15nXmg== 25988\nbmVt 25989\nIGZvcmJpZGRlbg== 25990\nIEJhcHQ= 25991\n15DXoNeZ 25992\nIHN1YnNldA== 25993\nIE1hZ2F6 25994\nbmVtZW50 25995\nIGFxdWVsYQ== 25996\ncmFnb24= 25997\nIGNvbW1pdHRlZXM= 25998\nIMOpdGFpZW50 25999\ndWRp 26000\nIERhd24= 26001\nIGJvcmU= 26002\nIGNvbXBvc2Vy 26003\nIHdpxJljZWo= 26004\nYW5nYQ== 26005\nIGRpc2xpa2U= 26006\nIERheXM= 26007\n5Z+6 26008\nIHBhcmFs 26009\nIG1pZW50cmFz 26010\nIGhlYXZlbnM= 26011\n44GS 26012\naGVpZA== 26013\nIHRyYWRlcnM= 26014\nb25jZQ== 26015\nIG1hc2NhcmE= 26016\nIM+Az4HOvw== 26017\nIHdoaXNwZXI= 26018\nIE11c2s= 26019\n6ZuG 26020\nIEZhbWlsaWU= 26021\nQWxsYWg= 26022\nIE9saXZpYQ== 26023\nIFByb3M= 26024\nIG9saWth 26025\naWxpbQ== 26026\nIHLDqXBvbmQ= 26027\nIFBldGVycw== 26028\nIOW+iA== 26029\nIGJpdGVz 26030\nIHZpYw== 26031\nIE5Z 26032\nZW1wdGlvbg== 26033\nIDQ1MA== 26034\nIHZpc3VhbHM= 26035\nIGxpZXU= 26036\nw7xja2Vu 26037\nIFN0ZWVs 26038\nIEdQ 26039\nd2FpdA== 26040\nIG5vdGljZWFibGU= 26041\ndWNoYQ== 26042\nIHJlaGFiaWw= 26043\nIHJlamVjdGlvbg== 26044\nINGB0LvQtdC00YPRjtGJ 26045\nIHNsaWRlcg== 26046\nIHJlZ2FyZGVk 26047\nIGdyYXZpdA== 26048\nIFJlc2VydmU= 26049\nY291bnQ= 26050\nIGJyZWVkaW5n 26051\nIGxvbmdl 26052\nYWxlYg== 26053\nIGtuaWdodA== 26054\nINCy0L7QuQ== 26055\nIHByw6lzZW50 26056\ngpjsmpQ= 26057\nIFNwZWNpZmljYWxseQ== 26058\nIHBvc2Vz 26059\nIHZldXJl 26060\nb2theQ== 26061\nZW1hcw== 26062\nIOOBp+OBmQ== 26063\nIG1hasSF 26064\nIHdlYmluYXJz 26065\nIGNhbm5hYmlz 26066\nIGRhbWFscw== 26067\nIE5vcnRod2VzdA== 26068\nIHBhZGE= 26069\nIGNyb3dkcw== 26070\nIGZ1dHVyZXM= 26071\nIMOkbg== 26072\nIGNpdmlsaWFucw== 26073\nIFNhY2hlbg== 26074\n5o0= 26075\nIHRyYWNlcw== 26076\nIOuoueqzoA== 26077\nUVU= 26078\n6aGY44GE 26079\nIElG 26080\nYW7EsW4= 26081\n7IK0 26082\nIGJpYmxpY2Fs 26083\nIFZlZA== 26084\nIHN0b3Jpbmc= 26085\n0YDQsNCy0LvRjw== 26086\n5oeJ6Kmy 26087\nIG5hc3Q= 26088\nIGTDtg== 26089\n0YDQvtC/ 26090\nZWxpYQ== 26091\nIHNpZGV3YXlz 26092\nIFVuZGVyc3RhbmQ= 26093\nIFF1cg== 26094\nIHBlcnBlbmQ= 26095\nIE1pbGxpb25lbg== 26096\nIHdhdGVybWVsb24= 26097\nIERpdmluZQ== 26098\ndWx0dXI= 26099\nYWJvcmQ= 26100\nIHN1Y2Nlc3Nlcw== 26101\nIGhvbWJyZQ== 26102\nIGNhcnA= 26103\nIHN1c2NlcHQ= 26104\ndW5na2lu 26105\nIGtpag== 26106\ndWx1cw== 26107\n2KfYrA== 26108\nIG5vdGNo 26109\nIHBvbHlub21pYWw= 26110\n5bmy 26111\n5ak= 26112\nIMO6bmljbw== 26113\nIHRlbGVzY29wZQ== 26114\nIHBvbGl0aXF1ZQ== 26115\na2llbQ== 26116\nIM6tzr3OsQ== 26117\nIGFnZ3JlZ2F0ZQ== 26118\nIEdlb2Zm 26119\nIHRyaWw= 26120\nIEdSQQ== 26121\nIHN1YnNjcmliZXI= 26122\naW1ldA== 26123\nINC00L7Qu9C70LDRgA== 26124\nb3Bpbmc= 26125\nIHRoZXJhcGV1dA== 26126\nIENhbmNlcg== 26127\nIHBhcmFkZQ== 26128\nIGlycmln 26129\n4pmq4pmq 26130\nIGNsZWFyZXI= 26131\nIGJvZw== 26132\nIE1hdXI= 26133\n4Liy4LiH 26134\nIFNoYW5naGFp 26135\nYWNodGU= 26136\nIEtvbA== 26137\nZWx1amFo 26138\nIGhhdg== 26139\nIENyaW1l 26140\nc2Vr 26141\nIOuhnA== 26142\naWVubmE= 26143\nIEdvcg== 26144\n6Js= 26145\nINC/0L7RgtGA 26146\nINC60LDQttC10YLRgdGP 26147\nIExpZnQ= 26148\nIFNvcnQ= 26149\nIFBzYWw= 26150\nIHBpbmc= 26151\nk50= 26152\ncGhpcw== 26153\nIEZVQ0s= 26154\nIFN5bg== 26155\nIGJhbWJvbw== 26156\nrOyYgQ== 26157\nY3V0cw== 26158\nIG1tbQ== 26159\nIGZ1bmt0aW9uaWVydA== 26160\nIF8= 26161\nw61jaW8= 26162\nU3RvcA== 26163\nIGltYWdpbmFyeQ== 26164\nIG5vdGFtbWVudA== 26165\nIEluaXRpYXRpdmU= 26166\n44Ol 26167\nIEt1cnQ= 26168\nIGxvb3Nlbg== 26169\nIGJ1c2Nhcg== 26170\n54Gr 26171\nIHplbGY= 26172\nIHByb3Bz 26173\n5ZuJ 26174\nIG1vZXRlbg== 26175\nIG1pbGxp 26176\nIGhhbGxz 26177\nIE1hdGNo 26178\nIGJyYWNrZXRz 26179\nIENvdQ== 26180\n5qaC 26181\nINCc0LDRgA== 26182\nSVNB 26183\nIGNpZ2FyZXR0ZQ== 26184\nIGNvbXBldGl0aW9ucw== 26185\nIE1JTg== 26186\nIGJlaMO2 26187\ndm9vcg== 26188\nIHVzdA== 26189\nIFpp 26190\nIE9jYw== 26191\ndWxhdGVz 26192\nIGJhbGxvb25z 26193\nIHByb250bw== 26194\nIE1peQ== 26195\nIEZpbGU= 26196\nINC60LvQsNGB0YE= 26197\n0L3Rg9C7 26198\nIGNlcmVhbA== 26199\nIGluY3JlbWVudA== 26200\nIHJlZmluZWQ= 26201\n5Y+m5aSW 26202\ncHJpc2luZw== 26203\nIFJG 26204\nIHJlc3BlY3RmdWw= 26205\nIGxvb3Q= 26206\nYXNrZXQ= 26207\nIGRlaXhh 26208\naW5nbGU= 26209\nIGZ1bmNpb25h 26210\nIFJldmVs 26211\nIHNvYmVy 26212\nIHBlcmZvcm1z 26213\nIEdlbnRsZQ== 26214\n44Ko 26215\nIHJlY2lwaWVudA== 26216\nIEhhdXNl 26217\nIOuD 26218\nRnJvbQ== 26219\nIG1pbmlzdGVycw== 26220\nIHBhcmFkb3g= 26221\n5bCx5piv6Kqq 26222\nIHRhc3Rpbmc= 26223\nINeU15c= 26224\nIHJldXNl 26225\nIExhbmU= 26226\nINGB0L7QstC10YDRiA== 26227\nIHJlbWVtYmVycw== 26228\nIGZlbWluaXN0 26229\nIGNvbW1pdG1lbnRz 26230\nIHByb2plY3RlZA== 26231\nIGdheg== 26232\naXlvcnV6 26233\nIG9ibGlnYXRpb25z 26234\nUm8= 26235\nemFy 26236\nIGNodw== 26237\nIEpBTQ== 26238\nIGLEmWTEhQ== 26239\nYXNwYmVycnk= 26240\nINC80LXRgdGC0L4= 26241\n67KV 26242\nIHJlZ3VsYXRlZA== 26243\nIHdpY2h0 26244\nIFRyZXZvcg== 26245\nIHNlY29uZGx5 26246\nIElocmU= 26247\nZWxzaA== 26248\nIHJlcG9ydGVycw== 26249\n0YLQvtGA0LA= 26250\nb3lv 26251\nR0k= 26252\nIGludGVyY29ubmVjdA== 26253\n6ZCY 26254\nT1NI 26255\n5q2y 26256\nIGJyYXNz 26257\nIGlnbm9yaW5n 26258\n5LuK5pel 26259\naW5mZWN0 26260\nIHByb2pla3Q= 26261\nb3JldA== 26262\nz4TOsc69 26263\nINGC0LjQvw== 26264\nIG11dHRh 26265\nIHVuYm94aW5n 26266\nhLA= 26267\n5aGK 26268\nIGFkdmlzZWQ= 26269\nIERlbnZlcg== 26270\nIHNldmVyZWx5 26271\nIE1obQ== 26272\nIGZsaXBwZWQ= 26273\nIHBpZW4= 26274\nIGtvbW11bg== 26275\nIEZSRQ== 26276\nIOCuh+CusA== 26277\nYWludGVk 26278\nIGtuaXZlcw== 26279\nIGhhYmw= 26280\nIGdld29yZGVu 26281\nYXJldHRlcw== 26282\nQ1M= 26283\nINC80LDQu9C10L3RjA== 26284\nIGdhbGF4 26285\nIG5pbmV0ZQ== 26286\n6rGw64KY 26287\nIHNpcw== 26288\nIGFkdmlzb3J5 26289\nIGRyaWxsaW5n 26290\nIFdvdWxkbg== 26291\nw7xuZg== 26292\nZ2VzdGVsbHQ= 26293\nIEhlbGVu 26294\nINee15A= 26295\nYXBvbGlz 26296\nIHJ6ZWN6eQ== 26297\nIHRlcnJh 26298\nIGhlcA== 26299\nIGFsZ8O6bg== 26300\naWtr 26301\nIGFzdHJvbm9t 26302\nIFN0YXJidWNrcw== 26303\na8SF 26304\nIHBhdHJvbA== 26305\nIOy9lA== 26306\nIGdvbg== 26307\nIOOAkA== 26308\nIHNvbnN0 26309\nIGVuY291bnRlcnM= 26310\nIHJldHJvdQ== 26311\nIHNoYXJrcw== 26312\nIGRvcg== 26313\nIFJldmVy 26314\nIGV2YXBvcg== 26315\nIHJlc2Vydm9pcg== 26316\nIGFsbGVnZWQ= 26317\ndWxlcg== 26318\nIHZlcm0= 26319\nIGNvbW1lcmNl 26320\nIGZpdHRlZA== 26321\nZ2Vt 26322\nIHRhY3RpY2Fs 26323\nIGxpdGg= 26324\n6YmE5aGU 26325\naGFk 26326\n6K6K 26327\nIGNhcmJvaHlk 26328\nIGxlbmd0aHM= 26329\nzrnOvw== 26330\nIGRlbW9ncmFwaGlj 26331\nUm9i 26332\nIFNraW4= 26333\nY2NvbGk= 26334\nIHNpbXBsaWZpZWQ= 26335\nIHJlYWRpbHk= 26336\nIEN1bQ== 26337\nYWRlc2g= 26338\nIETDpQ== 26339\ndXNzdA== 26340\naWduZQ== 26341\nZXRvbg== 26342\nIG1lbm9y 26343\ncWk= 26344\nT09N 26345\n4Lit4LiZ 26346\nIHBzeWNoaWF0 26347\nIGVpZ2h0eQ== 26348\nINC80LjQu9C70Lg= 26349\nIFRvYg== 26350\nZWRv 26351\n57ay 26352\nIMSR4bq/bg== 26353\nIGNpcmN1aXRz 26354\nIExBVUdI 26355\naWNpc20= 26356\nZW1vcg== 26357\nIHJlZ2VuZXI= 26358\nZWdyZWU= 26359\nIGJ1cmVhdWM= 26360\nIEFsYmVy 26361\n5LmL5b6M 26362\nIFdvcg== 26363\n5aSr 26364\nIHJlc2lu 26365\nIGJ5xYJ5 26366\nIElH 26367\n4K+NLA== 26368\nIDc4 26369\nIHdlZWRz 26370\nIE15dGg= 26371\nOTM= 26372\n5r8= 26373\nIOuCmOyZlA== 26374\nw6l2 26375\n4b0= 26376\nw7ZyZW4= 26377\nw6dhcg== 26378\nIFBBVUw= 26379\nIGRpc2FkdmFudA== 26380\nIHBvc2l0aW9uaW5n 26381\nIGNvY2t0YWls 26382\nIGFncmVlcw== 26383\nbm4= 26384\nIFNhbGx5 26385\nTXM= 26386\nIGluaGVyZW50 26387\nIG1vbmV0YXJ5 26388\nIG5hdHVy 26389\nIE5o 26390\nIEltcG9ydA== 26391\nIGxlYmVu 26392\nIHdp 26393\ndXNzeQ== 26394\nIG9iZXM= 26395\nIHdhbmRlcmluZw== 26396\nIOyLoOs= 26397\nxIVkYQ== 26398\nZXRjaHVw 26399\nIGRpc3Bvc2Fs 26400\nIEpB 26401\nIENlcg== 26402\nemlsbGE= 26403\nIHZpcmdpbg== 26404\nIFNsaWRl 26405\nYW5kZWw= 26406\nIHJpZ2h0ZW91c25lc3M= 26407\nIM6j 26408\nIGlkZWlh 26409\n5L2g5aW9 26410\n0LjRgNC+0LLQsNGC0Yw= 26411\n16jXkA== 26412\nQ29tbWVudA== 26413\nIHByZWxpbQ== 26414\nIFZhbGU= 26415\nIOyngOuCnA== 26416\nIFZhbmM= 26417\nT01BTg== 26418\nINC/0ZbQtA== 26419\nIHl1bQ== 26420\nc3RyZQ== 26421\nY2Vt 26422\nIHBvY3o= 26423\nIGZyYWdtZW50 26424\nINGB0LvRg9GH0LDQtQ== 26425\nIHVuZGVyZ28= 26426\nIEhhbms= 26427\nY2Vrcw== 26428\nIEZQUw== 26429\nIG9jdXI= 26430\nIGRldGVyaW9y 26431\n5rOo 26432\nIGVtcHJlc2Fz 26433\nUGF1bA== 26434\nICkpKQ== 26435\nINCy0YDQtdC80LXQvdC4 26436\nIHNjb2xk 26437\n15nXog== 26438\nIHN1c3BlY3RlZA== 26439\nIGFjY2Vzc2luZw== 26440\nIHN1YnN0aXQ= 26441\nIGhpc3RvcmlhbnM= 26442\n5Lu7 26443\nINC00LXQu9C+ 26444\nIHNvY2llZA== 26445\ncm9uZQ== 26446\nIHJlZGVu 26447\nIGV4dGVuZHM= 26448\nZXBoZXJk 26449\nIGJhbGNvbg== 26450\n5LiN6LW3 26451\nIFNvbG8= 26452\nIHBvbGl0aWNpYW4= 26453\n0L7Qu9GM0L3Qvg== 26454\nIGlyZ2VuZHc= 26455\nIHRyYXVtYXRpYw== 26456\nIHJhcHBlcg== 26457\nIFJPQkVSVA== 26458\nUmVhbGx5 26459\n5oGv 26460\nIGxpbmV1cA== 26461\nQVNF 26462\nIGNvbnRyYWN0b3I= 26463\nIENvcnBvcmF0aW9u 26464\nZ29y 26465\nIFRvZG8= 26466\n0YHRgtGA0L7QuQ== 26467\nRkJF 26468\nIG5ld3NsZXR0ZXI= 26469\nIGtvxYQ= 26470\nYWx0aWVz 26471\nINC/0YDQuNGH 26472\nIEhlYXZ5 26473\nIHN3b3Jkcw== 26474\nIG1hbmlwdWxhdGlvbg== 26475\nIGZ1bms= 26476\nIHbDpXI= 26477\nIFRhbGliYW4= 26478\nIOuwpQ== 26479\nIGFjbmU= 26480\nw7xyw7w= 26481\nIGRlc3dlZ2Vu 26482\nIER1c3Q= 26483\nIHNpbGlj 26484\nIGhvb2tz 26485\nIGJsaWo= 26486\nIHBldGl0cw== 26487\nIGZpbG1l 26488\nIEJlcmVpY2g= 26489\nIFNhaWQ= 26490\nIGltcG9zZWQ= 26491\nIGRpYXJ5 26492\nINCz0L7RgA== 26493\nIEdhdGVz 26494\nIGFsdGE= 26495\n5biM 26496\nIGNoY2lh 26497\ncGxlYXNhbnQ= 26498\nIOuwnQ== 26499\nIG1vxbxlbXk= 26500\nIEF1c3RyaWE= 26501\nIGJyb2tlcg== 26502\nIHN1Y2tlZA== 26503\n6ICD 26504\nIGNvbXBhcnRtZW50 26505\nIGNsb25l 26506\nINeU16I= 26507\nIERhbmtl 26508\nIG5vY2htYWw= 26509\n0LXQt9C0 26510\nIGFkcmVuYWw= 26511\nIGtsZWluZW4= 26512\n44G+44GX44KH44GG 26513\nIHN1YnNlcXVlbnRseQ== 26514\nIGRlY2VudHJhbA== 26515\nIGdlbmV0aWNz 26516\nIOq0kQ== 26517\nIG1vbml0b3Jz 26518\nIEFwcGxpYw== 26519\nIFJlcG9ydGVy 26520\nd2VydA== 26521\nIHdpZW0= 26522\nIE1vdmVtZW50 26523\nIGludGVydmlld2luZw== 26524\nIGhhaXJz 26525\nIHB1w7I= 26526\nIENoZWxzZWE= 26527\nIGNvaGVy 26528\nIGNvdA== 26529\nIHphcw== 26530\nIHBhdGNoZXM= 26531\nIGxhaA== 26532\n0YPQvdC6 26533\nIFJlYWdhbg== 26534\nIE1hcmNv 26535\nY2l0eQ== 26536\nIGRlZmVuZGVy 26537\nIGRlY29yYXRpb24= 26538\naWpp 26539\nIGxpdHRlcg== 26540\n0Kg= 26541\nIGplZ28= 26542\nUkVX 26543\nIFBpaw== 26544\nIEhlZQ== 26545\nIEl2 26546\nINC40LTQtQ== 26547\nIFRoZWF0ZXI= 26548\nINGH0LDRgdGC0L4= 26549\nIHN3ZWF0ZXI= 26550\nIGhpZ2hsaWdodGluZw== 26551\nIGFpbnNp 26552\nIGRpcGxvbWF0aWM= 26553\nIE5ldmVydGhlbGVzcw== 26554\n5bM= 26555\nQVNPTg== 26556\nIHDDumJsaWNv 26557\nIGZlcm0= 26558\ncmVhdGVk 26559\nY29k 26560\nIOusvOs= 26561\nIG1pc3Rlcg== 26562\nIFZhbmNvdXZlcg== 26563\nIHJlY29nbml6ZXM= 26564\nZWNk 26565\nIGNvbXBsaWNhdGlvbnM= 26566\nZW5jaWFs 26567\n44GX44GP 26568\nIOqwgOyngA== 26569\nIFVsdGltYXRl 26570\nIHZhaWc= 26571\nIE1lcnJ5 26572\n15XXkg== 26573\nIE1hcmN1cw== 26574\n57i9 26575\nb3dlZ28= 26576\nIG1lbnRl 26577\nU20= 26578\nIGFqYQ== 26579\nIFRhbw== 26580\nIGp1ZGljaWFs 26581\nIGVudHJlcHJlbmV1cnNoaXA= 26582\nINC90LXQvNC90L7Qs9C+ 26583\nIHBpcw== 26584\nIGVyZw== 26585\nIGNocmlzdA== 26586\nIEN1cnQ= 26587\nINGA0LDRgdC/ 26588\nzrvOtQ== 26589\nZW5zY2g= 26590\nw61yZQ== 26591\nIGZvY2Fs 26592\nIERpYW1vbmQ= 26593\nYXbDrWE= 26594\nIGhhbm5v 26595\nIFNxdWFk 26596\nIGFzc29jaWF0aW9ucw== 26597\nIENyZWF0aXZl 26598\nIG1lc3Nlbmdlcg== 26599\nIGJlZ2dpbmc= 26600\nIGRlY2ltYWw= 26601\nIGTEscWf 26602\nIG1ldGFkYXRh 26603\nc2Vscw== 26604\nIMSwxZ8= 26605\n4buvYQ== 26606\nIGRpZmZpY2lsZQ== 26607\nZMSx 26608\nIHNsYXVnaHRlcg== 26609\nIFZlcmc= 26610\nINeS150= 26611\n57Ch 26612\n5oyJ 26613\nIFRlYQ== 26614\nYXNzZXM= 26615\nT2s= 26616\nIHN5bnRoZXM= 26617\nb3RpYXRpb24= 26618\nIHBhaW50ZXI= 26619\nIGVsYm93cw== 26620\nIGFyY2hpdGVjdHVyYWw= 26621\nINGA0LDQtA== 26622\nIGdsb3I= 26623\naW1hZ2U= 26624\nYW1wYQ== 26625\nY3VsaWFy 26626\noKg= 26627\nIHRldmU= 26628\nIFN0ZWxsZQ== 26629\nIEJhbQ== 26630\nIOy0iA== 26631\nYXNpcw== 26632\naXBlZGlh 26633\nIEdJ 26634\nIEFjdGl2ZQ== 26635\n54S25ZCO 26636\nYXpp 26637\n44KM44Gm 26638\nIEx1Y2t5 26639\n7ZWp 26640\nINC/0YDQuNGF0L7QtA== 26641\nIHJ1bndheQ== 26642\nIGF1dGhlbnRpY2F0aW9u 26643\nIHBvc2libGU= 26644\nIHN1cHBsZW1lbnRz 26645\nIHN1cmdpY2Fs 26646\nR2Vu 26647\nIGZlYXNpYmxl 26648\nRE8= 26649\nIG91dGxvb2s= 26650\nIGludGVydmFscw== 26651\nIGFuZWNk 26652\nw6BuZw== 26653\nIHN0cmFwcw== 26654\nIFNodQ== 26655\ndWRk 26656\naXNzZW5zY2hhZnQ= 26657\nIHBvcnRl 26658\nIGNvbW1pdHRpbmc= 26659\nIGFsbGV5 26660\nIGNvdmVuYW50 26661\nIFBlZHJv 26662\nbGVzc25lc3M= 26663\nIFNvbGlk 26664\nIE1vbGx5 26665\nINC90LXQutC+0YLQvtGA 26666\nIGNvb3BlcmF0ZQ== 26667\n5YyX 26668\nb2xsZW4= 26669\nIHR1bmE= 26670\nIGtpbmRlcmdhcnRlbg== 26671\nIFNpeg== 26672\nIGR1xbxv 26673\nIE1CQQ== 26674\nIEdFT1JHRQ== 26675\nIEZpc2hlcg== 26676\n5b+Y 26677\nIENhZXNhcg== 26678\nINC60YDQsNGB0LjQsg== 26679\nIERlbGhp 26680\nenlt 26681\nIGV4cGxpY2Fy 26682\n6rCA7KeA 26683\ndW5z 26684\nZ3Jvdw== 26685\nINC/0YDQuNGB 26686\nIDg2 26687\nIHN0YXRpbmc= 26688\nIG1hc3Nh 26689\nY2h0ZXI= 26690\nIOy7rOufrA== 26691\nIGRlcHV0eQ== 26692\nU00= 26693\nbm9j 26694\nIGdlb2dyYXBoeQ== 26695\nIEVudGVycHJpc2U= 26696\nIENhbnQ= 26697\nw7Z6 26698\nIHVucGFjaw== 26699\nIO2ZlOs= 26700\nIHNlYXJjaGVz 26701\nIHByZXNpZGVuY3k= 26702\nIHRyaXZpYWw= 26703\nIHBpZ2U= 26704\nb3VidA== 26705\n44Ka 26706\n7LyA7J20 26707\nIGJ1ZGdldHM= 26708\nIHVi 26709\nIHBuZQ== 26710\nIFlhbGU= 26711\nIMWfw7Z5bGU= 26712\ncmVndWxhcg== 26713\nIGltcGVyZmVjdA== 26714\nQVJB 26715\nIGZhbcOtbGlh 26716\ndXJt 26717\nIEFkdmVudHVyZQ== 26718\n44OK 26719\nY2lz 26720\nZW1hcms= 26721\nIG5lZ28= 26722\nIGluYXBwcm9wcmlhdGU= 26723\nINC/0YDQuNC3 26724\nINGA0L7Quw== 26725\nIGRyZWFtZWQ= 26726\nQnJ5 26727\nIHNodXR0bGU= 26728\nIHBpbGxhcnM= 26729\nIGJpaw== 26730\naW51bQ== 26731\nINGD0YE= 26732\nIE5lYnI= 26733\nIHBlcnBlbmRpY3VsYXI= 26734\nIGJvb2tlZA== 26735\nYmVyeQ== 26736\nIHZpa3Q= 26737\nYmVhcg== 26738\nZXN1cw== 26739\nINCy0L7Qt9C80L7QttC90L4= 26740\nqLk= 26741\nIHByZXN1bWFibHk= 26742\nIE1lbXBoaXM= 26743\nIGFtYnVsYW5jZQ== 26744\n15XXnteo 26745\nIHRodW1ibmFpbA== 26746\nIG1vZGlmaWNhdGlvbg== 26747\n6YeP 26748\nIGludGVycHJldGVk 26749\nIHByb21v 26750\nIM66zqw= 26751\nIM61z4A= 26752\nIGFjb3VzdGlj 26753\nIERC 26754\n5ZOO 26755\nIG5vbmV0aGVsZXNz 26756\nb3VsZQ== 26757\nIHBlcXU= 26758\nIGtub2I= 26759\n44Kj 26760\nIOuPjOyVhA== 26761\nIHB1cmNoYXNlcw== 26762\nIMOHw7xua8O8 26763\nIGRpdmlkaW5n 26764\ncGVyZm9ybQ== 26765\ncmFjdGlvbg== 26766\naGVhbHRoeQ== 26767\nIFRpdGxl 26768\nIHVr 26769\nIGNlcmNh 26770\nIGFyZ3VhYmx5 26771\nIGZhbGU= 26772\n67O1 26773\nIGdhbWVycw== 26774\nIHV0aWxpemluZw== 26775\nIG9mZmVuZGVk 26776\nIHRhdmE= 26777\nYWzEsQ== 26778\nIG1lZGlhbg== 26779\nIGluZmVjdGlvdXM= 26780\nIEFubmll 26781\nIHNtYXJ0cGhvbmVz 26782\nIHBhcm9sZQ== 26783\n5Zad 26784\nIEVwaWM= 26785\nenph 26786\nIHVuaWZpZWQ= 26787\nIOq3uOuVjA== 26788\nIGN1cnRhaW4= 26789\nIMSD 26790\nIHNleHVhbGx5 26791\nIHVuc2VyZW0= 26792\nIENvbnZlbnRpb24= 26793\nIGFsbGVnZWRseQ== 26794\nWWE= 26795\nIEhvbw== 26796\nZW5tZW50 26797\n5oCq 26798\n7ZuE 26799\nIGdpZ2FudGlj 26800\nIG5vdGluZw== 26801\nIHJlYm8= 26802\nIEphbWE= 26803\nIEFseg== 26804\nIGJvcnJvd2Vk 26805\n7Lmo 26806\nIHBlcmlwaGVy 26807\n0L7RgtCw 26808\nIEdC 26809\nIEdlYXI= 26810\nIGVjb25vbWljYWxseQ== 26811\nIHRlbGVmb24= 26812\nIHF1ZXJlbW9z 26813\nINC00LDQu9GM0YjQtQ== 26814\nIHJhcw== 26815\nIFRlYWNo 26816\naWNpb3M= 26817\nYXRvcw== 26818\nIHBsZWRnZQ== 26819\nYmF1 26820\nIEhpbXNlbGY= 26821\nTGluaw== 26822\nIGVzcGVybw== 26823\nIGNocm9tb3M= 26824\nIFBFUg== 26825\nIGVybGU= 26826\nIHBvZGl1bQ== 26827\nw6dvcw== 26828\nIG5pZXU= 26829\nIGZlbg== 26830\nIEdPRA== 26831\nIENob2NvbGF0ZQ== 26832\nd2Vyaw== 26833\nIHThu6s= 26834\nIHN1cHByZXNz 26835\nzrvOtw== 26836\nIDI0MA== 26837\nIHNpdMOk 26838\nIGhvbmVzdHk= 26839\nIEJpbw== 26840\nIEJhcmQ= 26841\nINC+0LHRidC10Lw= 26842\nINC80YPQtw== 26843\nIG1hcmJsZQ== 26844\nINGG0LXQvdGC 26845\nIHByb2N1cmU= 26846\nIHJvdG9y 26847\nYmVybg== 26848\nIHR1aA== 26849\nIGhlYWRzZXQ= 26850\nYXRlbQ== 26851\nIHdhcnJhbnR5 26852\n4K60 26853\nIGZpbGluZw== 26854\nzrnOrA== 26855\nIGNvbXByZW5kcmU= 26856\nIGltcHVsc2U= 26857\nIHNhbHY= 26858\nd3JpdHRlbg== 26859\nIGluc3RpdHV0ZQ== 26860\nS2lt 26861\nIExHQlRR 26862\nZmljaWVudGU= 26863\nSGlz 26864\nIM6xz4XPhM+M 26865\nIHRlZW5hZ2U= 26866\nb3J1cw== 26867\nINGA0LDQt9Cx 26868\nU2Vl 26869\nIENvbnNlcnY= 26870\n4buBbg== 26871\nZnVsbmVzcw== 26872\nIHN0cmF3YmVycmllcw== 26873\nIEFidQ== 26874\n0LjQvtC9 26875\nIG9sbGE= 26876\nTk9JU0U= 26877\nIEVtcGxveQ== 26878\nIHdpcGVk 26879\ndXJnZXI= 26880\nIG1vZGlmaWNhdGlvbnM= 26881\nIO2VmOyngA== 26882\nIGZvb3RzdGVwcw== 26883\nIGhvbm9ycw== 26884\nIGFkdWw= 26885\nIGZsaXBwaW5n 26886\nIEhV 26887\nWlk= 26888\nIGludGVncmF0aW5n 26889\n2KjYsQ== 26890\ndWxsYQ== 26891\nIG5hdHV1cmxpams= 26892\nIO2XiA== 26893\nIEV0aGVyZXVt 26894\n2YrZhA== 26895\nd2Vk 26896\nIHBlYWtz 26897\nIEtlcw== 26898\nIGJsb29t 26899\nIGNyYXNoaW5n 26900\nIDkxMQ== 26901\nINC+0YLQu9C40Yc= 26902\nIGNvbnRyb2xsZXJz 26903\nIERvZA== 26904\nINCy0LzQtdGB0YLQtQ== 26905\nIHNvcnRpcg== 26906\n5aWH 26907\nIFN0cmFpZ2h0 26908\nIEdyYWNpYXM= 26909\nIGdyb292ZQ== 26910\nIHRvZ2c= 26911\nIOyLtuydgA== 26912\nw6lybw== 26913\nIG91dHdhcmQ= 26914\nIFdB 26915\nIFJvY2t5 26916\nIHNjYW0= 26917\nIGhheWF0 26918\naWdudHk= 26919\n4oQ= 26920\ncGxpbmdz 26921\nIGFudGliaW90aWNz 26922\nIOS4gA== 26923\nIG5ldmVydGhlbGVzcw== 26924\namFuZw== 26925\nY29tbWVyY2U= 26926\nIHNwb2lsZXI= 26927\nIGdsb3Zl 26928\nIGNoYXR0ZXI= 26929\nIEJZ 26930\nfj8= 26931\nIO2YuA== 26932\nIGRlbW9s 26933\nd2VjaHNlbA== 26934\naW1pcg== 26935\nIHJhaWQ= 26936\n0LXRgNGF 26937\n7J6Q6riw 26938\nZW5m 26939\nIGNvbW1lbnRlZA== 26940\nIG9wdGltaXplZA== 26941\nIGNvbnZpY3RlZA== 26942\nIGJhdHM= 26943\nIFNC 26944\nIEF1cg== 26945\nIFRvbmc= 26946\nIGltcGxpY2l0 26947\nIEphbmV0 26948\nIHJlYWc= 26949\n44Gy 26950\nIEFkdmFuY2Vk 26951\nIGltcG9zZQ== 26952\n16nXlA== 26953\nIHNjaGVtZXM= 26954\nb3VnaGVy 26955\nYWJvbGlj 26956\nIOqxsOyjoA== 26957\nIHNsb3dpbmc= 26958\nIHd0ZWR5 26959\nIGRlc3RydWN0aXZl 26960\nINC+0L/RgNC10LQ= 26961\nIGxhbmRtYXJr 26962\nIOuPiA== 26963\nIFdhbGtpbmc= 26964\n4bq5 26965\nIHRpamQ= 26966\nIEtO 26967\nIFF1YW50 26968\n7Jik6w== 26969\nINC60YDRgw== 26970\nIHBlcmRlcg== 26971\nIG5vdmU= 26972\nw6RuZGU= 26973\nIOOBlw== 26974\nYmlh 26975\nIGN1c3RvZHk= 26976\nIGJpb2Q= 26977\n5p2x6KW/ 26978\nIGRpcmVjdGluZw== 26979\nLi4u4oCL 26980\nIHJlbG9j 26981\nIGRlbWFuZGU= 26982\n44KT44Gg 26983\nIG/En2x1bQ== 26984\nINC+0LTQvdCw 26985\nIE1pbGs= 26986\n5Y+3 26987\nIEtyYQ== 26988\nIEhvbmRh 26989\nIHB1ZQ== 26990\nIGVsZWt0 26991\nIGJlZ2lubmVycw== 26992\nIHNwZWFy 26993\nw61uaA== 26994\nIEx1ZnQ= 26995\nIG5pZw== 26996\nIFNjaG9vbHM= 26997\nIGZvcnVtcw== 26998\nIFFpbg== 26999\ncHBv 27000\nIHphZw== 27001\nINCu 27002\nIHRvb3RocA== 27003\nIFN0eWxl 27004\n7LSI 27005\nIHB1bmN0 27006\nIHJlcHM= 27007\nIEFseQ== 27008\nIGFtZW5kbWVudHM= 27009\nIMO2eg== 27010\nIGRpZ2l0cw== 27011\ndXJhaQ== 27012\nIGNoYW90aWM= 27013\nIE1hc3RlcnM= 27014\nZW9u 27015\nIENhc2g= 27016\nIEN1eg== 27017\nIGJlZGV1dGV0 27018\nIHNjYW5uaW5n 27019\nINC20LQ= 27020\n0L3QtdGC 27021\nIGNlcnRhaW50eQ== 27022\namVr 27023\nIGRpam8= 27024\nIENsaW1hdGU= 27025\nIHJpbnNl 27026\nIGtyaWo= 27027\ndmVsYW5k 27028\nIHNvdW5kdHJhY2s= 27029\nIFNhZmU= 27030\nIE5vdmE= 27031\nOTQ= 27032\nIGF0aGU= 27033\nIFZlcmI= 27034\nb2xlcg== 27035\n7J207KOg 27036\nIHZpbg== 27037\nIHJlc3BpcmF0b3J5 27038\nIFN0dWR5 27039\nIENBTQ== 27040\nIGF2b2NhZG8= 27041\nIFpoZW4= 27042\nIGxhdGVuY3k= 27043\nIGZlYXRoZXJz 27044\nIGNvbnRhcg== 27045\nINCy0LXRiQ== 27046\nIGZhcms= 27047\nIGJsZW5kZWQ= 27048\nIGV4cGxvZGVk 27049\nIFhY 27050\nIEJlbmlt 27051\nIGFsZ3XDqW0= 27052\naXN0b2lyZQ== 27053\nIGNvbmZpZGVudGlhbA== 27054\nIG1hc3Q= 27055\nIOy/ 27056\nZ2Vo 27057\nIGRpc3Jlc3BlY3Q= 27058\nIFN5c3RlbXM= 27059\nxrBh 27060\nRWQ= 27061\nIHd5cw== 27062\nIGV4b3RpYw== 27063\nIGdsb3dpbmc= 27064\nw7luZw== 27065\nb3VuZ2U= 27066\n6IQ= 27067\n0LDQvdC40Lc= 27068\nIHBhbGF2 27069\nIFN3b3Jk 27070\nIGdpbQ== 27071\nIENyb3c= 27072\nIHBvdGVudA== 27073\nYmlzaA== 27074\nIGFidXNlZA== 27075\nIEplZA== 27076\nIGdhbWJsaW5n 27077\nIFNwZWN0 27078\nIGludmVzdGlnYXRvcnM= 27079\n5pma 27080\nIHJhdHQ= 27081\nIGRvYg== 27082\nIERFUw== 27083\naG9n 27084\nINC+0YLQutGA0Ys= 27085\n7YyF 27086\nINC00LXQvdGM0LPQuA== 27087\nIO2YuQ== 27088\nIOuouOumrA== 27089\nIHNhdHVyYXRpb24= 27090\nIGluaGVyaXRlZA== 27091\nIElubm92YXRpb24= 27092\n7JeI642Y 27093\nIHRhbmdpYmxl 27094\nIGRlcHJp 27095\naGVk 27096\nINC/0L7QvNC+0LM= 27097\nIHNsaWNlZA== 27098\n4KWN 27099\nIHRo4bq/ 27100\nxaU= 27101\nNjg= 27102\nIGNvcm9uYQ== 27103\nIGdpZnRlZA== 27104\nIHNvaXI= 27105\nIGh1bWlsaXR5 27106\nIOydtOqxuA== 27107\nIGZsYXdz 27108\nINC/0YDQsNC60YLQuA== 27109\nIGthbGQ= 27110\nd2HFvA== 27111\neXc= 27112\n44KT44Gn44GZ 27113\naXJ0ZWVu 27114\nIGNyb2NoZXRz 27115\npqzqsIA= 27116\nIOyghOyXkA== 27117\nIGRlc2U= 27118\n5qWt 27119\nINC80LDQsw== 27120\nIGR6aWHFgg== 27121\nIGzDqWc= 27122\nY2hhbmdpbmc= 27123\nIGxsZXY= 27124\nxYRzaw== 27125\n55S7 27126\nIDE5ODQ= 27127\nb3Jucw== 27128\nIFdlbHNo 27129\nIHBoYXJtYWNldXRpY2Fs 27130\nIHB1bXBpbmc= 27131\nIFNoYXc= 27132\ncHVuaw== 27133\nIHZhdWx0 27134\nIGtpbmV0aWM= 27135\nIGh1cnJpY2FuZQ== 27136\nIEluY2x1ZGluZw== 27137\n4bupYw== 27138\nIEdyYW5kcGE= 27139\nYW5zaGlw 27140\n6aaZ5riv 27141\nINCy0YvRhdC+0LQ= 27142\n0L3QvtC2 27143\nnKA= 27144\ndXR0YQ== 27145\nIOqygeuLiOuLpA== 27146\nIGJheg== 27147\nINC/0L7RiA== 27148\nIHBlY3VsaWFy 27149\nennEhw== 27150\nIEVsbGll 27151\nIGxlYXJucw== 27152\nIEtyaXNobmE= 27153\nIGNvbnNlY3V0 27154\nIGVtcGF0aA== 27155\nIERpbg== 27156\nIHRyYWRlZA== 27157\nIEJvcmlz 27158\ndWdnYWdl 27159\nb2xsYQ== 27160\nINC90LDQt9Cy 27161\nIGV0ZXJuaXR5 27162\nINCy0L8= 27163\nw6htZXM= 27164\nIGdyYXBw 27165\nYsOp 27166\nINC/0YDQtdC00YHRgtCw0LI= 27167\nIEZD 27168\njeuLiOuLpA== 27169\nZXZlbg== 27170\nIE5lYnJhc2th 27171\nb3J0dW5l 27172\nIGthcmVuYQ== 27173\nIEFnZW50 27174\nIHN0aW5n 27175\nIFBJ 27176\nIG11bmljaXBhbA== 27177\ncG93ZXJlZA== 27178\nIGNvbnNlZ3Vl 27179\nIE1hbmNoZXN0ZXI= 27180\nIHJhaW55 27181\nIGJsaQ== 27182\nIGtvc3Q= 27183\nIGhhbHRlbg== 27184\nIEFoaGg= 27185\naW5zdWxh 27186\nZXJ0aW5n 27187\nINin2YTZgQ== 27188\nIHJlbGFjaW9u 27189\nIGtvbWVu 27190\nIGRvbWU= 27191\nIHByaWVzdHM= 27192\nIEludHJvZHU= 27193\ncm9waGU= 27194\nc2hvcmU= 27195\ndmVsdA== 27196\nY2xpcHNl 27197\nINGA0YPRgQ== 27198\n15nXoQ== 27199\nIHNhYmVtb3M= 27200\nIEhvbGxhbmQ= 27201\nb2dp 27202\nYW5raQ== 27203\nIE1hdHM= 27204\nIHNtb2tlZA== 27205\ndWxsaWU= 27206\nIGV1cm9wZQ== 27207\nINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+ 27208\nIGJhcmR6aWVq 27209\nIHRyYW5zZm9ybWluZw== 27210\nIEV6 27211\nb3BhdGg= 27212\nIOyWuOuLiA== 27213\nINGB0YLQsNC9 27214\n4bqxbmc= 27215\n4Lix4LmJ 27216\nIE91Y2g= 27217\nIGNsZWFyYW5jZQ== 27218\ndXN0YWlu 27219\nIHNvbGlkYXJpdHk= 27220\nIHByb3Zpbmc= 27221\nINCY0L0= 27222\nINGB0Yo= 27223\nIHByb2xvbmc= 27224\n0LDQtNC90L4= 27225\nIHNvcw== 27226\nIERlYWw= 27227\nIDE3MA== 27228\nbW9ucw== 27229\nINC30LXQvA== 27230\nIGxvZ2dlZA== 27231\nIGxpZmVsb25n 27232\nIHNlbnNvcnk= 27233\nIGJlaG9sZA== 27234\nIEZBUg== 27235\nw6h0ZW1lbnQ= 27236\nIEZlZGVyYXRpb24= 27237\nIGRvZGdl 27238\nIFNoaXI= 27239\nIGRyYWdvbnM= 27240\nIEFyY3RpYw== 27241\nxIXFvA== 27242\nxY0= 27243\nwro= 27244\nIGRlbmtl 27245\nIHBvZHLDrWE= 27246\nY29sZQ== 27247\n0YPQu9GM0YLQsNGC 27248\nIHN5c3RlbWF0aWM= 27249\n0LDQvNCw 27250\nY2hvcw== 27251\nIGNsaW5pY3M= 27252\nIEJT 27253\nIHRhbGVz 27254\ndXNpb25z 27255\nIO2IrA== 27256\nIHByZXNlcnZhdGlvbg== 27257\nIGxvcmU= 27258\nIFByb3Rlc3Q= 27259\n4bub 27260\n5biC 27261\nIGFja25vd2xlZGdlZA== 27262\nIElzYWlhaA== 27263\nIOuVjOuKlA== 27264\nINeY 27265\nIGNvbXBldGl0b3I= 27266\nIGFkdmFuY2luZw== 27267\nemlw 27268\nIHRlbnRo 27269\nIExhdXJl 27270\nIGhpbnRz 27271\nIGV4ZXJjaXNpbmc= 27272\nnpzr 27273\nIEludGVsbGlnZW5jZQ== 27274\ndWF0ZWQ= 27275\nT1VU 27276\nb3BlZA== 27277\nIGF1dG9ub215 27278\nIGJyYW5kaW5n 27279\nIE1lZGl0ZXJyYW5lYW4= 27280\n0ZbQug== 27281\nIHNjcmV3ZHJpdmVy 27282\nIHN1cHJl 27283\nIHN0YXA= 27284\nIGp1cmlzZGljdGlvbg== 27285\nIFNldHRpbmdz 27286\nIGZvcmVmcm9udA== 27287\nIEZlbWFsZQ== 27288\nY29tZm9ydA== 27289\nIG11bHRpcGxpY2F0aW9u 27290\nIE11cnJheQ== 27291\nIGJvYg== 27292\nIFRhcw== 27293\nIHRhaHU= 27294\nIG9udW4= 27295\nZXR0ZXI= 27296\nIHByb3BoZXRz 27297\nbGFn 27298\nIHJldmVudWVz 27299\nIHByw6E= 27300\nIHVwbG9hZGluZw== 27301\nIG1hY2hpbmVyeQ== 27302\nYXNjYWw= 27303\nIEVzdMOh 27304\nIEdvdGg= 27305\nIEJhbGQ= 27306\nIFNhdw== 27307\nIHN0cmlwZXM= 27308\n7KCR 27309\nIHBvd2lu 27310\n5pel5pys 27311\nIGhvc3RpbGU= 27312\nIGRhcnVt 27313\nIHByZXZlbnRlZA== 27314\n0L7QttCw0LvRg9C50YHRgtCw 27315\nIGFsZ3VuYXM= 27316\nIGhvcGVsZXNz 27317\nIHpuYWo= 27318\nIHJlYWRpbmdz 27319\nIGNyYXZpbmc= 27320\ndGF0 27321\nIFBpZw== 27322\nIGxpYXI= 27323\n54ix 27324\nIG11bHRpcGxheWVy 27325\nIGRhbGU= 27326\nIENvdXJzZQ== 27327\n7YG8 27328\nIEtpdGE= 27329\nIGN1c3RvbXM= 27330\nIHJlc3BvbmRz 27331\nZW5kcmE= 27332\n6KaW 27333\nIG1ldHJv 27334\n0YHQvtC7 27335\nIG1pdGlnYXRl 27336\nIG9wcHJlc3Npb24= 27337\nIOaIkeWAkQ== 27338\ncXVpbmhv 27339\nIGFtbW8= 27340\nIGVuZmVy 27341\nIHBvbnk= 27342\nIG91bmNlcw== 27343\nsJQ= 27344\nIOyImOqwgA== 27345\nIGRpY2hv 27346\nIERlYg== 27347\nIHdvbmRlcnM= 27348\nIFJvb3Nl 27349\nIHByaXplcw== 27350\nIEFMRVg= 27351\nIHRoYW5rZnVsbHk= 27352\nIHRpc3N1ZXM= 27353\nINGA0LDQstC90L4= 27354\nIEx1bmE= 27355\naW50ZWxsaWdpYmxl 27356\nIOyZuA== 27357\n6rCR 27358\nIEhlYXQ= 27359\nINGB0LjQtA== 27360\nIFF1aQ== 27361\nIGlvbnM= 27362\nIGFjY29tbW9kYXRpb24= 27363\n5L6/ 27364\nIEthcnQ= 27365\naWVuc3Q= 27366\nIHRhcmRl 27367\nIHNvYWtlZA== 27368\nIENhc2V5 27369\nIOy0nQ== 27370\nINGA0YPQsQ== 27371\nIGRpZmZlcmVudGk= 27372\nIGxlZnRvdmVy 27373\nIGV4Y2hhbmdlcw== 27374\nc2Vjb25k 27375\nIGZpcnN0bHk= 27376\nIGJ1aWxkZXI= 27377\ncmllbg== 27378\nIGR3 27379\nIGJvdW5jaW5n 27380\nPzwv 27381\nIOuMgO2VtOyEnA== 27382\nINGB0LU= 27383\nIE1pbGVz 27384\naWVuaWU= 27385\nINC/0L7QtNC/0LjRgQ== 27386\nIOustA== 27387\nIGFyaXNlcw== 27388\nIHN1YmNvbnNjaW91cw== 27389\nIFNhbmR5 27390\nIGxvdHRlcnk= 27391\n4oCR 27392\nYW1pbGlhcg== 27393\nIGNvb3JkaW5hdG9y 27394\n6Iw= 27395\nIGV4dHJhb3JkaW4= 27396\nIFJvbmFsZA== 27397\nIE1PTg== 27398\nZ3JlZW4= 27399\nIG1hbnVmYWN0dXJl 27400\nIFJlY29yZA== 27401\nIE1hcmtldGluZw== 27402\n0LjRhg== 27403\nIGNyZWRlbnRpYWxz 27404\nIHVwcmlnaHQ= 27405\nIEhlcml0YWdl 27406\nIGfDtnJk 27407\n5pyN 27408\nZXhwZW5zaXZl 27409\n4bqtbg== 27410\nIOyxhA== 27411\nIG91dGxpbmVk 27412\nIE9vb2g= 27413\nb3JpZW50ZWQ= 27414\nIHdpcmVk 27415\nIG91dGxldHM= 27416\nIGh1Z2VseQ== 27417\nIO2WiOuKlOuNsA== 27418\n0LDRgNGC 27419\nIGxvZ2lzdGljcw== 27420\nIHNlYXNvbmFs 27421\nIGRlYmU= 27422\nIHRoZW9y 27423\nIHBpcmF0ZQ== 27424\nYXBweQ== 27425\nIGtub3Rz 27426\nIGZlbW1l 27427\nIFNvZnR3YXJl 27428\nZ2VuZGU= 27429\n0YLQsNC60Lg= 27430\nIHRlbXBsZXM= 27431\nIGxpbWl0YXRpb24= 27432\nIGFtcGxpdHVkZQ== 27433\nIGhhY2Vu 27434\nIGF1ZGk= 27435\nIOuWqA== 27436\nIFdhaGw= 27437\nIG5paA== 27438\nIGFtcGxpZmllcg== 27439\nYXJpdXM= 27440\naXphZG8= 27441\nYWNoYQ== 27442\nIGt1bGxhbg== 27443\nIFR3aW4= 27444\nIEZvcmNlcw== 27445\nIGFicmly 27446\nIEVQQQ== 27447\nIEFoYQ== 27448\nIOq3uOuemOuPhA== 27449\nIGJpb20= 27450\nINCi0LDQvA== 27451\nIHNhaWxpbmc= 27452\nIEpva2Vy 27453\nRmlyc3Q= 27454\n6L+Z5piv 27455\nfl0= 27456\nb3JzY2g= 27457\nIHbDpnJl 27458\nIGJlZXRqZQ== 27459\nIFNwYcOf 27460\ncG9saXQ= 27461\nIHR1cmJ1bA== 27462\nIOyggO2drOqwgA== 27463\nIGNpYw== 27464\nIERyYWtl 27465\nIEJSSQ== 27466\naXphw6fDo28= 27467\nIOyeiOuLpA== 27468\nIEx5bm4= 27469\nIHRyYW5zZ2VuZGVy 27470\nIHJlc2lnbg== 27471\nIGNoYXJ0ZXI= 27472\nIEpI 27473\nIEhvbG1lcw== 27474\nIExpcA== 27475\nZGFz 27476\nIHBlZGlhdHJpYw== 27477\nIG1lbW9yaXpl 27478\nIGV2YWx1YXRpbmc= 27479\nIPCfkA== 27480\nY2Fr 27481\nIGNvbmp1bmN0aW9u 27482\nIHJlc2VydmVz 27483\nIHNoYW1wb28= 27484\nIGp1ZGdlZA== 27485\nIHdpZHo= 27486\nVklO 27487\nIGFib2FyZA== 27488\nYXJpcw== 27489\nIFJvaA== 27490\nIGNvb2xlZA== 27491\n0YHRgtC1 27492\nY2Vw 27493\ncm9zdA== 27494\naG90cw== 27495\nIE1lbGJvdXJuZQ== 27496\n0L7Rh9GM 27497\nIHZlbnRpbA== 27498\n0LjQvdC+0LI= 27499\nIG1vdGlvbnM= 27500\n7JeI64qU642w 27501\n0LzQtdGA0LjQug== 27502\nIENoYXQ= 27503\nIGdvdXZlcm5lbWVudA== 27504\n5LiA5qyh 27505\nIEtpdm9s 27506\nIEtpdm9sb3dpdHo= 27507\nIG7Ds2k= 27508\nINC60YPQtNCw 27509\nIGh5ZHJhdWw= 27510\nIEJlcmc= 27511\neWx1bQ== 27512\nIFByw6RzaWRlbnQ= 27513\ncm9weQ== 27514\nIHNlbWlj 27515\n0Y/QtdGC 27516\nIENhcGU= 27517\nIGNhbmU= 27518\nIGJyaW5nZW4= 27519\nIHdpcmluZw== 27520\ndW55YQ== 27521\nIHJlcGF5 27522\nqqk= 27523\nIHdvbnQ= 27524\nw6FudA== 27525\nIGdvdmVy 27526\nIExpYmVydHk= 27527\nIGVsZWN0cm9tYWdu 27528\nIFNpbmdo 27529\nINCz0YDRg9C/ 27530\n0LPQvtCy 27531\niOustOs= 27532\nIFJ1bGU= 27533\nIHVuZGVyd2F5 27534\nIEZyZWRlcg== 27535\nIHR1cmJpbmU= 27536\naXNoaQ== 27537\nIGbDrXM= 27538\nIEN1bHR1cmU= 27539\nYWNyZQ== 27540\nIHdhbmRlcg== 27541\nIGd1ZXJyYQ== 27542\nIHPDtnk= 27543\nIEp1cg== 27544\nYXdheXM= 27545\nIHNjaHdpZXI= 27546\nZ3VhcmQ= 27547\nIEFiZA== 27548\ndWN0aW9u 27549\nIGFya2FkYcWfbGFy 27550\nIEhhbWI= 27551\nPy4= 27552\nc2l6ZQ== 27553\nIE9ydGg= 27554\nIHN3YXk= 27555\nIM6U 27556\nIGFic29ycHRpb24= 27557\naW5lZXM= 27558\nIHBhdHJvbnM= 27559\nIGJlYWNoZXM= 27560\nR0c= 27561\nIGNvbnRhbWlu 27562\naW50ZW5kZW50 27563\nINC90YDQsNCy 27564\nINC00LXRgNC2 27565\nIHF1aWx0 27566\nIGV2b2x1dGlvbmFyeQ== 27567\n7J206528 27568\nYXppb25p 27569\nIGVya2w= 27570\nIEJ1dGxlcg== 27571\nIGRvbw== 27572\nIG5lZ290aWF0aW9u 27573\nZW5kdW0= 27574\nIHRlcm1pbm9sb2d5 27575\nIGt1bA== 27576\nIFVudGVybmVobWVu 27577\nw6lyaWM= 27578\neGk= 27579\nYmFk 27580\nINC00L7Qu9C20L3Riw== 27581\nIE1pdGNoZWxs 27582\ndGhyZWU= 27583\n5byP 27584\nIHN1YnN0cmF0ZQ== 27585\nIEluaGFsZQ== 27586\nIEFncmlj 27587\ndW5nZQ== 27588\nINC30YA= 27589\nIGFkdmVyc2U= 27590\nIOyggOuPhA== 27591\nIHBpbGxhcg== 27592\nIE1pbnV0ZW4= 27593\nIE1hdGU= 27594\nIFBsYXR6 27595\nIGhlbHBsZXNz 27596\nIGFsYXI= 27597\nIGZyZW5jaA== 27598\nIGFsbG9jYXRpb24= 27599\nIHN0ZW1z 27600\nIG1hcmF0aG9u 27601\nIEhBUkY= 27602\naXphY2nDs24= 27603\nSmVzcw== 27604\nINC30L3QsNGH 27605\nIGRlY2xhcmF0aW9u 27606\nRUVSSU5H 27607\nc3RlcmRhbQ== 27608\nYXNzaXVt 27609\nIHNlaXo= 27610\nIHByZXNpZGVudHM= 27611\ndGFrZQ== 27612\nIHdpbGRlcm5lc3M= 27613\nIGNvc21pYw== 27614\nIOuqqOuRkA== 27615\nc3Rybw== 27616\nIHBvd2llZHo= 27617\nIE1hZ2F6aW5l 27618\nIFZJ 27619\nINC00LXRgA== 27620\nIHfDvHJkZW4= 27621\nIHRhYmxldHM= 27622\nIHBpZXJ3cw== 27623\nIG1vcnRhbA== 27624\nIHN1cHBsaWVk 27625\nIE7Ds3M= 27626\nIFByb3Blcg== 27627\nINC60LDQttC00YvQuQ== 27628\nb2zDs2c= 27629\n67Cp 27630\nIG1pc2Nvbg== 27631\nIHByb3hpbWl0eQ== 27632\nIEFsbGVz 27633\nINCz0LvQsNC3 27634\nIGxhbWU= 27635\nIHZpYmVz 27636\nIGRlZW1lZA== 27637\nIHVyaW5l 27638\nIHJlbWluZGluZw== 27639\nIGNpcmN1bXN0YW5jZQ== 27640\n65Ok7J20 27641\nIGxhcHRvcHM= 27642\nwrI= 27643\n7ZW07JW8 27644\nIE9tZWdh 27645\n44Gq44KT44GL 27646\nTlk= 27647\nIHB1bXBz 27648\nIHJhaWxz 27649\nIHN1cnBhc3M= 27650\nIEJyb3M= 27651\nIG5hdGlvbmFsbHk= 27652\nIGdld2VzZW4= 27653\n5Lqr 27654\ns7Tri6Q= 27655\nb3NoaW5n 27656\n6rCI 27657\n56S+ 27658\nIGNyaWFu 27659\nIOyCrOuejOydtA== 27660\nY2F1c3Q= 27661\n5pW0 27662\n0YbQuNC/ 27663\nIE9iZXI= 27664\nIERBWQ== 27665\nIENhbm9u 27666\nenVuZw== 27667\nIOqwlg== 27668\nINCw0LLRgtC+0Lw= 27669\nIGRpdm9yY2Vk 27670\n15nXpA== 27671\nz4HOtQ== 27672\nY2VsYW5k 27673\nY2llcg== 27674\n0YDQtdC3 27675\nVG9kYXk= 27676\nIG9yYml0YWw= 27677\nIHN0cmV0 27678\nIHNhdHU= 27679\nIO2BrOs= 27680\nem9z 27681\nIFNjbw== 27682\nzrzOrQ== 27683\nIEd1YXJkaWFu 27684\naW50ZXJlc3Q= 27685\nIFZFUg== 27686\nw7xuZGVu 27687\nINGF0L7RgtC10Ls= 27688\ndGl0 27689\nQnk= 27690\nIGFubGF0 27691\nU2hvdw== 27692\nIG9pbHk= 27693\n56+A 27694\nIGxlZ2VuZHM= 27695\nIHNwZWN1bGF0aW9u 27696\nIFdpc2g= 27697\nIG1vbms= 27698\nR0FO 27699\nIGjhu40= 27700\nIGRhbmdlcnM= 27701\nIEJlbmU= 27702\naXF1ZW1lbnQ= 27703\nIOuCmOyZgA== 27704\nINCw0LQ= 27705\nIGRpc2NyZXRl 27706\nw4c= 27707\nIGNvbmRpdGlvbmFs 27708\nIEdpbGw= 27709\ndWF0ZXM= 27710\nINGB0L7QstGB0LXQvA== 27711\nIHNjcmVlbnNob3Q= 27712\nY2Fkbw== 27713\nIOuqqOuToA== 27714\nIGZpbmdlcnRpcHM= 27715\nIE1BQw== 27716\nIGR1ZGVz 27717\nY29zdA== 27718\nIGJ1bXBz 27719\nb25kbw== 27720\nIGRhdG9z 27721\nIGJlZXBz 27722\nIFByb24= 27723\nIEtoYWw= 27724\nemVnbw== 27725\nIEFiYnk= 27726\nVWg= 27727\nWW8= 27728\nIFRlbA== 27729\nIM68zq0= 27730\nS0k= 27731\nIHN0cmVzc2Vz 27732\nIHNwcmVhZHNoZWV0 27733\nIE5PVw== 27734\nREI= 27735\nIGxpYmVyYXRpb24= 27736\nIHByZWRpY3RhYmxl 27737\nIFF1ZXN0aW9ucw== 27738\nIHNwYWNpbmc= 27739\nIGluaGFiaXRhbnRz 27740\nIHp3acSFeg== 27741\n57Gz 27742\nIFNBUA== 27743\nIGx1Z2dhZ2U= 27744\nIGhpcHA= 27745\n6JY= 27746\nIHRhbmdlbnQ= 27747\nIHbDpQ== 27748\n0LDQu9GM0L3QvtC5 27749\nc2VoZW4= 27750\nIHByb2Nlc3NvcnM= 27751\nIGZpbmRldA== 27752\nIGNhcnRyaWRnZQ== 27753\nIGFkbWluaXN0cmF0b3Jz 27754\nIOyWtOya 27755\nIHN1cHJlbWU= 27756\nIEFudGk= 27757\nIO2UhOuhnA== 27758\nIGluZm9ybWF0aXZl 27759\nIGtvbXQ= 27760\n5oiR5Lmf 27761\n15nXmA== 27762\nQXNzaXN0YW50 27763\nIGxpc3Rh 27764\nw7ZsbA== 27765\nIGRpc3RpbmN0aXZl 27766\nIEh1ZA== 27767\nIHNhbG9u 27768\n5LiL5L6G 27769\nbcOqbWU= 27770\nIE1vdGlvbg== 27771\nIHNldWxlbWVudA== 27772\nIE1lbnNjaA== 27773\nIHB1bXBlZA== 27774\nw7xoZXI= 27775\naWJv 27776\nIHdhxbw= 27777\nIHF1YW50aXRhdGl2ZQ== 27778\n2b4= 27779\nIOuqqOyKtQ== 27780\nIHBvdWNo 27781\nIFRoZWF0cmU= 27782\nYWhp 27783\nIHNwaW5hY2g= 27784\nIHJlYWxpdGllcw== 27785\nIGxleQ== 27786\nIE1hcnRoYQ== 27787\nIHJlY2hlcg== 27788\nZWNoZXM= 27789\nIHBlcmlvZGlj 27790\nb2NpZGU= 27791\nIEluY3JlZA== 27792\nIHRo4bqleQ== 27793\nb3Rvbg== 27794\nIEVzbw== 27795\nIGfDqW7DqXJhbA== 27796\naWxpZ2h0 27797\nIGltYWdpbmluZw== 27798\naGVh 27799\nZXRpY2Fs 27800\n4but 27801\nIERlbW9rcmF0 27802\nIGVuam8= 27803\nIGFkanVzdGFibGU= 27804\nIHJhaW5z 27805\naWV3YcW8 27806\nIGp1c3RlbWVudA== 27807\nIGp1c3RpZmllZA== 27808\nIFNoYWtl 27809\ndml2 27810\n7IKs66W8 27811\nIG1ldHQ= 27812\nIEVudmlyb25tZW50YWw= 27813\nIHNvbGFtZW50ZQ== 27814\nIGludGVyc2VjdA== 27815\nIDE5ODg= 27816\nIHNpbXVsYXRl 27817\nSkE= 27818\nINC30LDRgQ== 27819\nIGNvbnRpbmc= 27820\nIFRlaw== 27821\nIHRvcmNo 27822\nINC00YDRg9Cz0L7QuQ== 27823\nIGluc2NyZQ== 27824\nIG1vZGVsbw== 27825\nIEdlZw== 27826\nIERlbW9jcmF0 27827\n0LrQsg== 27828\nIEJ1ZGR5 27829\nIHJlZHVuZA== 27830\nIGNyYWZ0cw== 27831\nIEhpag== 27832\nIGp1ZQ== 27833\nIEtpcms= 27834\nIGthYg== 27835\n4buj 27836\nIGFlc3RoZXQ= 27837\nIEpPTg== 27838\nIHN1cGVyY29t 27839\nINGB0LjRgtGD 27840\nIM+Mz4TOuQ== 27841\n2YXZhg== 27842\nIEVWRVI= 27843\n7JWY7Ja0 27844\nb2l0 27845\nIENsZXZlbGFuZA== 27846\nIHNpeHRlZW4= 27847\nIHdhdGVyZmFsbA== 27848\n77g= 27849\naW5mbA== 27850\nIGNvdW5zZWxvcg== 27851\nIFB1bms= 27852\nIHNwcmVjaGVu 27853\n5rWB 27854\nZXhj 27855\nIFNraWxscw== 27856\ncm96 27857\nYWRhbWVudGU= 27858\nIHBhbmNha2Vz 27859\n6riw66Gc 27860\nIHBsYW5r 27861\nIHNvdmVyZWlnbnR5 27862\nIGZ1aQ== 27863\nINC90LXQvtCx 27864\nIFdpaQ== 27865\nIFNjaG9s 27866\n4oCO 27867\nIFNwZWFr 27868\n6Iux 27869\nY2lsaWF0aW9u 27870\nIHRoaWdo 27871\nIOqxsOydmA== 27872\nIGpvdA== 27873\nIOy0rOyYgQ== 27874\nINmF24zaug== 27875\nIENDUA== 27876\nINC/0L7RgdGC 27877\nIG9ic2VydmVy 27878\nw6Fi 27879\nIHN0aWdtYQ== 27880\nIHByb3ByaWV0 27881\nIGNpZGFkZQ== 27882\nIGJhxZ9rYQ== 27883\n2LnYqQ== 27884\na3Jl 27885\nIHBvd2llZHppZcSH 27886\nIGNlYXNl 27887\nIHNraW5z 27888\nIHZlZ2dpZXM= 27889\nIG9wcG9zaW5n 27890\nb3BvbHk= 27891\nIEp1Zw== 27892\nIFlvb24= 27893\nIFVuaXQ= 27894\nIDE5ODY= 27895\nIGtvbnM= 27896\nIGRpYWdub3N0aWM= 27897\nIGVtcG93ZXJlZA== 27898\nIHRobw== 27899\nIGNlbg== 27900\nw6lyYXRpb24= 27901\nINGX 27902\nIHBoeXNpYw== 27903\nIFByYWN0aWNl 27904\n5bed 27905\nIFNvdXRoZWFzdA== 27906\nIEVzcGE= 27907\n6K+3 27908\nIEdlb3I= 27909\ncm9wb3J0aW9u 27910\nIHNwZWNz 27911\nIGFkYXB0aXZl 27912\nIFVuaXR5 27913\nIFdvcmtz 27914\ndWdlbg== 27915\nIE1vbnRhbmE= 27916\nVGhhbmtz 27917\nIHdoaXBwZWQ= 27918\nIGR1bmdlb24= 27919\nIHZpdGFtaW5z 27920\nU1A= 27921\nIHNjYW5kYWw= 27922\nIGRpbmVybw== 27923\nb3Zh 27924\nIGVtYnJv 27925\nIEVhZ2xl 27926\nIHRoZW9sb2d5 27927\nIFZhbmVzc2E= 27928\nIEFJRFM= 27929\n65Cc 27930\nIGZyZWVs 27931\nIEFsemhlaW1lcg== 27932\nIMWa 27933\nSGVy 27934\nIHRvcm5hZG8= 27935\nYWdlbnM= 27936\nIOyeiOyWtOyEnA== 27937\nIFRyYW5zZm9ybQ== 27938\nIHByb2Nlc3Nv 27939\nIG1pbGxpc2U= 27940\nIHByb2Zlc3Npb25hbGx5 27941\nIG1lbWI= 27942\nb2NhdGlvbg== 27943\nIHN0eWxpbmc= 27944\nINC+0LHRj9C3 27945\nIE9wZXJhdGlvbg== 27946\nIHd5Z2w= 27947\nIFJhbg== 27948\nIOeahA== 27949\nIEtpbg== 27950\n4buxYw== 27951\nIEJBUg== 27952\nIHBhcGVyd29yaw== 27953\nIHR1bGU= 27954\nIHF1ZXJpYQ== 27955\nIGNvbXBseQ== 27956\nIEhhaXI= 27957\n15nXmw== 27958\nINC/0YDQvtGB0YI= 27959\nIG11dGF0aW9u 27960\nIHJlcHLDqXM= 27961\nIG9jdG9wdXM= 27962\nIGltcG9ydGFudGVz 27963\nIGRlc2VydmVk 27964\nZXRy 27965\nIGRpc2FzdGVycw== 27966\nbMSxbmRh 27967\naXF1w6k= 27968\nIERlc2hhbGI= 27969\nc29v 27970\nb3NzaXA= 27971\nIHJlbGlldmVk 27972\nIENvbGxpbnM= 27973\nIHdhdGVycHJvb2Y= 27974\nIFl1aw== 27975\nIGNvcHlpbmc= 27976\nIGLDvHTDvG4= 27977\nIEhldXRl 27978\nIEVudHJl 27979\nIHJlc2lkdWFs 27980\nIGNvbG9uaWVz 27981\nIMOpbm9ybQ== 27982\nIEVyaW4= 27983\nIHN0YW4= 27984\nIHRyZW1lbmRvdXNseQ== 27985\nIGNhcHR1cmVz 27986\nIFNhaQ== 27987\nw6JjZQ== 27988\nIG1pYcWC 27989\nIDg3 27990\nIGxvZ2dpbmc= 27991\nIGluc2VydGVk 27992\nIGluaGVyZW50bHk= 27993\n7J2R 27994\nbGF2ZQ== 27995\n0L3QuNGH 27996\nIGZlbW1lcw== 27997\nIGTDqXA= 27998\ndWtz 27999\nYWNpYQ== 28000\nIFdhZGU= 28001\nIGppag== 28002\nIFZpbmNlbnQ= 28003\nIEljZWxhbmQ= 28004\naGVt 28005\nIGFwb2xvZ3k= 28006\nIFBlZw== 28007\nIGdsdWVk 28008\nIGNvbXBhbmlvbnM= 28009\nIExpdmVy 28010\nIGNyaXRpY2l6ZWQ= 28011\nbGVhZGluZw== 28012\nIHPDpGdh 28013\n5ryC 28014\nIHNxdWlk 28015\nIG5hcnJhdGl2ZXM= 28016\nIHRha2E= 28017\nbmV6 28018\nd2VpdA== 28019\nIHRyaXBvZA== 28020\nIGV4cGxpYw== 28021\nIHNwaW5hbA== 28022\nIGFwcHJveGltYXRpb24= 28023\nIHBhZ2Fy 28024\nIENhbHZpbg== 28025\nINCy0LXQtNGM 28026\nIGxhYw== 28027\nIHByb2FjdGl2ZQ== 28028\nIFRyYWlu 28029\nb3Jm 28030\nIHN0ZW4= 28031\nIGdyYXBlcw== 28032\nIG1ldXM= 28033\nIGF1dG9tYXQ= 28034\nIGJpYXNlZA== 28035\nIGNoYcOubmU= 28036\nY29hbA== 28037\nIHJlbmNvbnQ= 28038\nIEt1bQ== 28039\nIGZlc3RpdmFscw== 28040\nIHN0YXJ0dXBz 28041\nIGFrYQ== 28042\n44G5 28043\nIGN5bGluZA== 28044\nc25h 28045\nQ1JJ 28046\nIHJlc3VsdGFkbw== 28047\nIG1pbGVzdG9uZQ== 28048\nIM+F 28049\nIHRlbGVwb3J0 28050\nenljaA== 28051\nNjI= 28052\n5YWz 28053\nIEZlYXI= 28054\nIG51Y2xldXM= 28055\nIHNoaW5lcw== 28056\naG92 28057\nIFBhcnRuZXJz 28058\nIEthcw== 28059\nIG5hZGll 28060\nIGFsZXJ0cw== 28061\nIEJJTEw= 28062\nc3Ryb25n 28063\nIE5hdGU= 28064\nIERlbm1hcms= 28065\nIENhdg== 28066\nT1NU 28067\naMOkbHQ= 28068\nIOyVhOuLjA== 28069\nYW55b24= 28070\nIGVuY291cmFnZXM= 28071\nINC/0L7RgdGC0LDQsg== 28072\nIEh1YW5n 28073\n44GK6aGY44GE 28074\nU1RB 28075\nIHBhaW50cw== 28076\n44GZ44GU 28077\nIHNjaGVkdWxlcw== 28078\nIGNoZWF0ZWQ= 28079\nIGFwcHJveA== 28080\nIO+3 28081\nIMK7Lg== 28082\nIHNtaWxlcw== 28083\naXN1cmU= 28084\nIG5lcmVk 28085\nYXJkZW4= 28086\nIGN1cnQ= 28087\nIOuM 28088\nIFJvdGg= 28089\nIHB1aXNxdWU= 28090\nIEdFVA== 28091\nIFZlZ2V0 28092\nIHByb2R1eg== 28093\nIEJlbGdpdW0= 28094\nIENhbXB1cw== 28095\n16jXmded 28096\naWN1dA== 28097\nINGB0L3QuNC8 28098\nIHLDqXVzcw== 28099\nIHNsaXBwZXJ5 28100\nIEV3 28101\nxbM= 28102\nIExlZ2VuZHM= 28103\nIFRpZmZhbnk= 28104\n0LDQu9C40Lc= 28105\nINC/0LXRgNC10LI= 28106\nINC+0LPRgNC+0Lw= 28107\nIGNyb3M= 28108\nIENF 28109\nQnU= 28110\nIGVuc3VyZXM= 28111\nIGdyYW5kY2hpbGRyZW4= 28112\nIGFjdWVyZG8= 28113\nIHByaXNvbmVy 28114\nIHRoaXJzdHk= 28115\nYmFuZQ== 28116\nIOu5oA== 28117\nIMO6bHRpbWE= 28118\nIExhdW5jaA== 28119\nbml0eQ== 28120\nIGNvbWJ1c3Rpb24= 28121\nIHVuaWNvcm4= 28122\nIGZhbWlsbGU= 28123\nIGxvd2VyaW5n 28124\nIFlpbmc= 28125\nYnVpbGRpbmc= 28126\nIGR1bw== 28127\nIE3DqXhpY28= 28128\nYXN0aWFu 28129\nIOuoueydhA== 28130\nIFJhbHBo 28131\nIHJld3JpdGU= 28132\nIGdsYW0= 28133\naWZpcXVl 28134\nRXI= 28135\nIFJ1bm5pbmc= 28136\n0L7QvdC+0LI= 28137\nIG1lYW5pbmdz 28138\nIGNoZXd5 28139\nIExlc2xpZQ== 28140\nIGZpbmVzdA== 28141\nIGhhaGFoYQ== 28142\nIFNURVA= 28143\nIGxvbmVsaW5lc3M= 28144\ncmlhbnM= 28145\nIHF1ZXN0aW9uZWQ= 28146\nIGVzcXVl 28147\nIHNpbmtpbmc= 28148\nIHBlc28= 28149\nIFdyb25n 28150\nYXNtaW5l 28151\nIGRlZmluaXRpdmU= 28152\nIGJ1eXM= 28153\nIGNydWM= 28154\nY29vbA== 28155\nIOugiA== 28156\nIHDDsw== 28157\nIHV0aWxpemVk 28158\nIHdvcnRod2hpbGU= 28159\nIER5bGFu 28160\nRVNF 28161\nIHZlcnRleA== 28162\ndMSx 28163\nIEZpcg== 28164\nIHphdw== 28165\nIEdlZA== 28166\nINCd0LDQvw== 28167\nZHo= 28168\nIGN1cnNvcg== 28169\nIHN3aXBl 28170\nIGluZXZpdGFibHk= 28171\nIHBvc3RlcnM= 28172\nIGluY2xpbmVk 28173\nIGdyZWV0aW5n 28174\nIGRpc2FwcG9pbnRtZW50 28175\n44G+44Gn 28176\nIHJlbGHDp8Ojbw== 28177\nVFQ= 28178\nIHJhYmI= 28179\nIE1haW5l 28180\nIGFuYWx5emVk 28181\nRkU= 28182\nINCf0L7Quw== 28183\nIFNhbmRyYQ== 28184\nIHBsYWd1ZQ== 28185\nQVJF 28186\nIHbDpHI= 28187\nIFZpdg== 28188\ndW1lZA== 28189\naGFuZG8= 28190\naG91ZXR0ZQ== 28191\nIEJhaWxleQ== 28192\n5LiN6YGO 28193\neXNvbg== 28194\nIHNlbXVh 28195\nIGhhcmRjb3Jl 28196\n4oKs 28197\n0ZbQvA== 28198\nw6lyYQ== 28199\nT1RI 28200\nIGZvcmVpZ25lcnM= 28201\nIFBhbGVzdGluaWFu 28202\nIHByb3ByaW8= 28203\n0LDQvdC40Lk= 28204\nIG15dGhz 28205\nV0g= 28206\nIG5pbnRo 28207\nIENyZWF0b3I= 28208\n0LvQvtC8 28209\nIEZsaXA= 28210\nIGVtYW4= 28211\nIGtpxZ8= 28212\nemllaA== 28213\nIEVhcm5lc3Q= 28214\nc3lzdGVt 28215\nluyXkA== 28216\nIGFybWllcw== 28217\nIE91dHNpZGU= 28218\nIGhhcnVz 28219\n5rqW 28220\n0L7QtNCw0YA= 28221\nIHZpc2l0b3I= 28222\n562U 28223\nIHN0cmVuZ3RoZW5pbmc= 28224\nIDky 28225\ndmlv 28226\nIOumrA== 28227\nIGdyZWVkeQ== 28228\nIHBvcXVpdG8= 28229\ndWRlcg== 28230\nIEtvcGY= 28231\nIOuLpOydjOyXkA== 28232\nIHNlaXM= 28233\nw6F0aWNv 28234\nIHRydXN0aW5n 28235\nw61w 28236\nIEVtbQ== 28237\nbGVlbg== 28238\nINin2YTZhg== 28239\nIHJlY3J1aXRtZW50 28240\nIEZpbGlw 28241\nINmD2YQ= 28242\nQ2xpbnQ= 28243\nINCy0LXRgQ== 28244\nYXVmdA== 28245\nIGRvbWluYXRl 28246\nIHJlc3Rv 28247\nIGtyYQ== 28248\nw6Fp 28249\nIENhaXQ= 28250\ncm93cw== 28251\nIGNvdW50cnlzaWRl 28252\nIDE5NDU= 28253\n0LDRhtC40Y4= 28254\nINC00Lg= 28255\nIGtlcm5lbA== 28256\nbG92 28257\nIGNhbGN1bGF0aW5n 28258\n2K/Ypw== 28259\nIFdhbHQ= 28260\nIGVtcG93ZXJpbmc= 28261\nIGNoYXNzaXM= 28262\nbGluZWFy 28263\n0LPRgw== 28264\nIG5vdmE= 28265\nIHV5 28266\nIDY5 28267\nIGVuY29tcGFzcw== 28268\ndHJs 28269\nIGNvbXB1dGF0aW9uYWw= 28270\nIHdvcm1z 28271\nIG5oaeG7gXU= 28272\nIGFzdHJvbmF1dHM= 28273\nIHZlcw== 28274\nIHN5dHU= 28275\nIGRlbWFuZGVk 28276\nIGNz 28277\nIE1vbA== 28278\nIGA= 28279\nIGNoYW50 28280\nIHRoZXJlYnk= 28281\nIHBlbmlz 28282\nIGVtb2M= 28283\nd3lu 28284\n0YPQttC1 28285\nIHRyZWFk 28286\nw7NsZQ== 28287\nIGRlZXBlc3Q= 28288\nIG1hY2hl 28289\nIFZlbnQ= 28290\nIEFtc3RlcmRhbQ== 28291\n44Ob 28292\nIHJlYmVs 28293\nIDYx 28294\nINCy0LrRg9GB 28295\ndWZmcw== 28296\nIGRvxJ9ydQ== 28297\nIE5hcG9sZQ== 28298\nzq7Pgw== 28299\nIHdvcmtvdXRz 28300\nIEdsYWQ= 28301\n0L3QtdGB 28302\nIHRlbnNpb25z 28303\nIFNoaWZ0 28304\nIEd1ZXI= 28305\n7YyQ 28306\nIOy5nOq1rA== 28307\n0JY= 28308\nIGltcGxhbnQ= 28309\nw6p1 28310\n6riA 28311\nIGF1dGhvcml6ZWQ= 28312\nQ0VS 28313\nIFJW 28314\nIGhpbA== 28315\nbGV2 28316\nY2ltZW50bw== 28317\nIFVGTw== 28318\n7IOI 28319\n6KiC 28320\nd29y 28321\nIGRhbmNlcw== 28322\nIFBpeGVs 28323\n55yL5LiA5LiL 28324\nIHRyb3R6ZGVt 28325\nIG9idGVu 28326\nIEFsZnJlZA== 28327\nIGNvc3RseQ== 28328\nIFN0YW5sZXk= 28329\nIHRlcnJvcmlzdHM= 28330\nIFdpZA== 28331\nheuLiOuLpA== 28332\nIGxlaWNodA== 28333\n7J207Iqk 28334\nIGRvYnJ6ZQ== 28335\nIGhlc2l0 28336\nIGVyesOkaA== 28337\nIGVpbmlnZQ== 28338\nIGhlYnQ= 28339\n0YHQtQ== 28340\nIHVucHJlZGljdA== 28341\nQ8OzbW8= 28342\ncmVtb3M= 28343\nIFRoYW5rZnVsbHk= 28344\nIHB1cnNl 28345\nY2hz 28346\nYW5jZXI= 28347\ndWxvcw== 28348\nc3R1ZA== 28349\n5pyJ5rKS5pyJ 28350\nIG5ldXJvbG9n 28351\nIEFuY2llbnQ= 28352\nT3V0 28353\nYXdzemU= 28354\nIG9wcG9zZQ== 28355\nIGFudGlib2RpZXM= 28356\nIFNvbWVob3c= 28357\ncm9wb2xpdGFu 28358\na3Rvcg== 28359\nINGB0YLQvtGA0L7QvdGL 28360\nIHJvY2tldHM= 28361\nIGRpc2FibGU= 28362\nIGNhdGFzdHJvcGg= 28363\ntOye 28364\nIGN5bg== 28365\nINC00YDRg9C30YzRjw== 28366\nIGluc3RydWN0b3Jz 28367\nZW1hYWw= 28368\nIGV0d2E= 28369\nIHl1YW4= 28370\nIEdyb3VuZA== 28371\nIHByZW1pZXJl 28372\n0YfQuNCy 28373\nIHNhaW50 28374\neWJh 28375\nIGtvaw== 28376\nIGNvbnRyYWN0b3Jz 28377\nIOqwgQ== 28378\nINeQ15w= 28379\nIGhlYWRsaW5l 28380\nIGNvbXBsZXRhbWVudGU= 28381\nIGluZXhwZW5zaXZl 28382\nIHZpdQ== 28383\nIEdyYW5kZQ== 28384\nIGJsZWVk 28385\n66y8 28386\nIDcz 28387\nIHRvZGF2w61h 28388\nIFJ1c2g= 28389\nIEVsZGVy 28390\n6rCA64qU 28391\nIFJvdQ== 28392\nINC20LXQvdGJ 28393\nIE1pcmE= 28394\nIGRlaW5l 28395\nIGthcm1h 28396\nIHVtbQ== 28397\nIGVudHNjaGU= 28398\nIEhvbG9jYXVzdA== 28399\nIGRpc2NvdmVyaWVz 28400\nYW1lbnRz 28401\nIHJhaXNvbg== 28402\nIGJ1cmdlcnM= 28403\nQmFjaw== 28404\nIGdkeQ== 28405\nIEFH 28406\nIERhdw== 28407\n7JWg 28408\naGVhZGVk 28409\nIENsYXI= 28410\nSW5zdA== 28411\nIExpZXV0ZW5hbnQ= 28412\nIEFmRA== 28413\nIENlcw== 28414\nIHBlcnNvbmFsaXplZA== 28415\nIGludGVyZmFjZXM= 28416\n4LiI4Liw 28417\nINGA0LXQtg== 28418\nIHN1aWM= 28419\nIHN0YXJ2aW5n 28420\nIG94aWRl 28421\nIGRlY29yYXRlZA== 28422\nIERV 28423\nIOyYiOyBmA== 28424\nIHF1bw== 28425\nIGRpc3RvcnRpb24= 28426\n5q61 28427\nIOuoueyWtOs= 28428\nIHN0YWtlcw== 28429\n5piO55m9 28430\nIHN5bnRheA== 28431\nIGJp4bq/dA== 28432\ndGh5 28433\naWNpZQ== 28434\nIGJyYXNpbGU= 28435\naXNpcw== 28436\nUkM= 28437\nIHNob29r 28438\nIGRlcHRocw== 28439\nIENvc3Rh 28440\nIHZvY2Fscw== 28441\nIGNvYXN0ZXI= 28442\nIGZhbG91 28443\nZXR0bGU= 28444\nIGtlbm5lbg== 28445\nIGRlcml2ZQ== 28446\nIGFpZHM= 28447\nINCd0LjQug== 28448\nIGVudHdpYw== 28449\nIHZlcnRpY2FsbHk= 28450\nIM0= 28451\nIFNVVg== 28452\nIGZpcmV3b3Jrcw== 28453\nIHNwZWNpZmljcw== 28454\n5Lqk 28455\nIGluc2lzdGVk 28456\nIGRlc2hhbGI= 28457\nIEdvbno= 28458\nbG92ZQ== 28459\nIE1pbGl0YXJ5 28460\nIFBpZXJyZQ== 28461\nIOKI 28462\nIFdob3Nl 28463\nIHBlcmZ1bWU= 28464\nIM+AzrU= 28465\nIGxvd2VyZWQ= 28466\nIGNyb3NzZXM= 28467\nIHRyYW5zbGF0ZXM= 28468\nIGFycmliYQ== 28469\nw61kbw== 28470\nIExldg== 28471\n5YWn 28472\nIENpYW8= 28473\nIHNjaG9sYXJzaGlwcw== 28474\nIGdlc3R1cmVz 28475\nINGA0LXQt9GD0LvRjNGC0LDRgg== 28476\nIHF1ZXN0w6Nv 28477\nIENvbG9uZWw= 28478\nIEJvdHQ= 28479\n2LHZgQ== 28480\nTklORw== 28481\nIFdhdGNoaW5n 28482\nIFB1cnBsZQ== 28483\n0YHRgtGA0LDQvQ== 28484\nIGV4ZWN1dGl2ZXM= 28485\nIEtyaXM= 28486\nb3JuZXlz 28487\n0LXQvdC90YvQuQ== 28488\nIGNvYXRlZA== 28489\nxKk= 28490\nIHBhcmtlZA== 28491\nINGB0LLQtdGC 28492\nISEhISE= 28493\nIEZsb3lk 28494\nxLFzxLE= 28495\nemnEhw== 28496\nIG1vdGl2YXRl 28497\nIEVsb24= 28498\nbGVhbg== 28499\nhpM= 28500\nIGlw 28501\nIG5pxbw= 28502\nIEV4cGVyaWVuY2U= 28503\nIFRpbmE= 28504\nIEtvbGxlZ2U= 28505\nIEFtYmFzc2Fkb3I= 28506\naW55YQ== 28507\nIHRoZWZ0 28508\nIGhldXJlcw== 28509\nIE15c3Q= 28510\nIG1haXNvbg== 28511\nbGVi 28512\nIGJvd2xz 28513\nIELDvHJnZXI= 28514\nIFJvb3NldmVsdA== 28515\nUlA= 28516\n6rCA7JqU 28517\nIERlbGljaW91cw== 28518\nZXJkaW5ncw== 28519\nIEFzc29jaWF0ZQ== 28520\nb3Vzc2U= 28521\nIENvcnQ= 28522\nIFJlcGVhdA== 28523\nIEdsb3J5 28524\nIGNvbnRhZw== 28525\n4LmA4Lil 28526\nIFBhcmFk 28527\nIEtlcnJ5 28528\nIOq/ 28529\nIFdhdmU= 28530\n5b+F 28531\nIGdhdGV3YXk= 28532\n55CD 28533\nIeOAjQ== 28534\nIHRyYW5zY2VuZA== 28535\nIGRhbWFnZXM= 28536\nIHRhaWxz 28537\nIGdyYXZpdGF0aW9uYWw= 28538\nIFNoaWVsZA== 28539\nIHByaW1pdGl2ZQ== 28540\nIGNhcnJpZXJz 28541\nIEh1YXdlaQ== 28542\n2YLYrw== 28543\nIGZlbGl6 28544\nIE1pYQ== 28545\n5YOV 28546\nINC/0YDRj9C80L4= 28547\nINC/0YDQvtC40YHRhdC+0LTQuNGC 28548\nIE11cnBoeQ== 28549\nIEFjdGl2 28550\n44OD44Kv 28551\nIGRpc2NvbWZvcnQ= 28552\n15HXlA== 28553\nIEtlbGw= 28554\nIENlbnR1cnk= 28555\nIHNwYWdoZXR0aQ== 28556\nIER1cmNo 28557\nIGNpZXJ0bw== 28558\nIEVtcHJlc3M= 28559\nIGd1dHM= 28560\nbmVn 28561\nINC00L7RgdGC0LDRgtC+0YfQvdC+ 28562\nIHZvbHVudGFyeQ== 28563\n5aSx 28564\nIHNxdWlycmVs 28565\n5qyi 28566\n44Gh44KJ 28567\nIE1heg== 28568\ntOyLrA== 28569\nINCy0Lg= 28570\n44Kn 28571\nINGC0LDQutC40YU= 28572\nIFNoYXJvbg== 28573\nIGVudGh1c2lhc3RpYw== 28574\naXJlbWVudA== 28575\nIO2emOuTpA== 28576\nIHBvdHJ6ZQ== 28577\nIGluaXRpYXRlZA== 28578\n44On 28579\nIMWbcm9k 28580\nIOydtOumhA== 28581\nIHJlbWFrZQ== 28582\nIGN1bG1pbg== 28583\nIGNvbmZ1c2U= 28584\nbWl5b3I= 28585\ndXJhcg== 28586\nQ1RPUg== 28587\nIGJ1bm55 28588\nIOWkpw== 28589\n5LiN6IO9 28590\nZWxw 28591\nIHZhbXBpcmU= 28592\nIGlsbHVtaW4= 28593\nIEhlbmQ= 28594\nINC60LDRh9C1 28595\nIFNhbHY= 28596\nINC60LDQvdCw0Ls= 28597\nIHBvcnRh 28598\nIGFzc2hvbGU= 28599\nIHN1cHBvcnRlcg== 28600\nIHNrZXB0aWNhbA== 28601\nIGtuZWFk 28602\nIOyYrA== 28603\nZXph 28604\nIHF1w6o= 28605\nIERI 28606\nIHJvZHo= 28607\nb3duZXJz 28608\nIHBsb3Rz 28609\nIGRlbGF5cw== 28610\nIGJlbG9uZ2Vk 28611\nIGFoaA== 28612\nIGNhcnZlZA== 28613\nIHJpc2Vu 28614\nIG9yZGVu 28615\ncGhvbnk= 28616\naXNzeQ== 28617\nISEhISEhISE= 28618\nIG9sZHXEn3VudQ== 28619\nIHJvc2Vz 28620\nIGludHJpbnM= 28621\nIEFuZ3N0 28622\nIGZpbmFsZW1lbnQ= 28623\n7Ked 28624\nU09VTkQ= 28625\nIGluZHVs 28626\nsIw= 28627\nINeV15Q= 28628\nY2h5 28629\n0LDQutGB0LjQvA== 28630\nIG5nZ2Fr 28631\nIGxpeg== 28632\nIGVsZWN0b3JhbA== 28633\nIFNoYXdu 28634\ncmljaWE= 28635\nIGFyc2Vu 28636\nIFBlcA== 28637\nIDIwMzA= 28638\nIHRyb3BoeQ== 28639\nIHNtb290aGVy 28640\nIGVycmU= 28641\nIGNyYXNoZXM= 28642\nIHNjaG5l 28643\nIGFzaQ== 28644\nIE1hw58= 28645\n0YPQu9C4 28646\n0YfQtdGB0LrQuA== 28647\naWV2ZXM= 28648\nUkVBTQ== 28649\nIHN0aXJyaW5n 28650\n44OA 28651\ndXN0YQ== 28652\nIGludmVy 28653\nc2lnaHQ= 28654\nb3JkdQ== 28655\nb29y 28656\nIMSDbg== 28657\nIHBlcm1pdHRlZA== 28658\n0YDRjA== 28659\nIGNoYWxr 28660\n44KI44GX 28661\nIHRhdHRvb3M= 28662\nIFJlbGF0aW9ucw== 28663\nIEhveQ== 28664\na3NhbQ== 28665\nIGRlbnRpc3Q= 28666\nIOuvuOq1rQ== 28667\nIHNvZmE= 28668\nINGU 28669\nIGZvcm1l 28670\n2YLYqQ== 28671\nIOuyoA== 28672\nIGVtYnJhY2Vk 28673\nbWls 28674\nIHN1bmdsYXNzZXM= 28675\nIOqwlA== 28676\nIHNlYW1sZXNz 28677\nIGJlZXA= 28678\nw6RjaHN0 28679\nIHN3ZWV0cw== 28680\nIHNlbWFpbmU= 28681\nIGlycmVsZXZhbnQ= 28682\nIGRlc2Vudm9s 28683\nz4HPiQ== 28684\nINC/0YDQvtC40LfQstC+0LQ= 28685\nYW5ncw== 28686\nIGFyb21h 28687\nIHBvb2xz 28688\nIGdp4bud 28689\nIFVn 28690\nIGNsaW1iZWQ= 28691\nIHRyZW5kaW5n 28692\nIHNlcGVydGk= 28693\nIEJhcnI= 28694\nIHDFgg== 28695\nIE9yaWdpbmFsbHk= 28696\nINqv 28697\ndXR0bw== 28698\nirjr 28699\nINC60L7RgtC+0YDRi9GF 28700\nINC30LDRhQ== 28701\nIGVpZ2VuZW4= 28702\nIG11cmRlcmVy 28703\nZXJuYW1l 28704\nxZ4= 28705\nIGFubm91bmNpbmc= 28706\nIFBsYXRmb3Jt 28707\nIGV4cGxhbmF0aW9ucw== 28708\nIHByZXNlbnRl 28709\nIE5hc8SxbA== 28710\nIG9ycGhhbg== 28711\nIEZvcnRuaXRl 28712\ncm9zcGVjdA== 28713\nZXJlZGl0aA== 28714\nIOyXhuyWtA== 28715\nIE5JSA== 28716\nd2FnZW4= 28717\nIHJlbWVk 28718\np4Dr 28719\nbW9udA== 28720\nIEplZmZyZXk= 28721\ncHJvbQ== 28722\nIGbDvG5m 28723\nINC90LDQt9Cw0LQ= 28724\nIGN1Y3VtYmVy 28725\nIFN1bW1pdA== 28726\n5Yid 28727\np6Q= 28728\n0J3QkNCv 28729\nIEpldA== 28730\nIGNhbWJpbw== 28731\n0YPQudGC0LU= 28732\nIGN1Ymlj 28733\nIGRpc3Byb3BvcnRpb24= 28734\nZXJleg== 28735\nIG1hZG5lc3M= 28736\n55eb 28737\nIHRpbnQ= 28738\nIGZ1ZXJvbg== 28739\nIGt5 28740\nIGJpcGFydA== 28741\n44G+44Gb 28742\nU2Ft 28743\nIOu9 28744\nIHJpdg== 28745\nIFRhbms= 28746\nIOuGkw== 28747\nIHJlbmRlcmVk 28748\nxZtsxJk= 28749\nY29uZHM= 28750\nIGRpc3J1cHRpb24= 28751\nIGluY29udmVu 28752\nIHF1aXNlcg== 28753\nIGRlbmlhbA== 28754\nIGdhbGF4aWVz 28755\nIHNvdmVyZWlnbg== 28756\nIHBvbHNr 28757\nz4HPjg== 28758\nIG1leA== 28759\nIGNhcmFjdGVy 28760\nIExlZ28= 28761\nYW5kZW4= 28762\nLici 28763\nIO2UjOs= 28764\nIGNvbXByZXNzb3I= 28765\nIE1vdmll 28766\nIGFwcGxpY2FudHM= 28767\nemllaGVu 28768\nIHZlZ2V0YXRpb24= 28769\nIGJlbGxl 28770\nIEdPT0Q= 28771\nIEJhdQ== 28772\nIHJlc2VudA== 28773\nc2V4 28774\nYW1lbnRvcw== 28775\nINeU15bXlA== 28776\nIG92ZXJsb2Fk 28777\nIHNpbGljb25l 28778\n0LXRgdGC0L3Qvg== 28779\nIGRlbmtlbg== 28780\nIGRlZmluaXQ= 28781\nIFdhc24= 28782\nIGFsdGVyZWQ= 28783\nIFNvbw== 28784\nIFdpbmc= 28785\naW5kcmU= 28786\nIE5QQw== 28787\nz4HOrQ== 28788\nIFR3ZW50eQ== 28789\nIExpZWJl 28790\nIGhvbWVsZXNzbmVzcw== 28791\nb3VsZGVy 28792\nINCY0YLQsNC6 28793\n0YHQutCw0Y8= 28794\nIGN1YXRybw== 28795\nIEhhcnZleQ== 28796\nIHBoaWxhbg== 28797\nIEJlZXQ= 28798\nIHBvbGljaW5n 28799\nIEFsZXhhbmQ= 28800\nINC80L7Qu9C+0LQ= 28801\nIG3DvHM= 28802\nIGhpem8= 28803\n67O064uk 28804\nINC/0L7Qt9Cy0L7Quw== 28805\nINC/0YvRgg== 28806\n0L7Rh9C10LzRgw== 28807\nIO2DnA== 28808\nIGNyeXB0b2N1cnJlbmN5 28809\nIGxvcm8= 28810\nIHN1bW1hdGlvbg== 28811\nIGJha2FsxLFt 28812\nIG5ldXJvcw== 28813\n2KU= 28814\nINC80L7QttC10Lw= 28815\nIMO8c3Q= 28816\nIHByZWxpbWluYXJ5 28817\nIGhvcm5z 28818\nIFRJ 28819\n2YPZhA== 28820\nWU8= 28821\nIGhpbmdl 28822\nIHJlcGFpcnM= 28823\nIGJvbmRpbmc= 28824\nIGJpemU= 28825\nINGI0YI= 28826\nIG1vdGl2ZQ== 28827\nIE5pZ2VyaWE= 28828\nMTIw 28829\nYmxvY2s= 28830\nIGF2aWF0aW9u 28831\nIEtvbW11bg== 28832\nINC+0LrQsNC3 28833\nIHRlbmhh 28834\nIGVkdWNhdGluZw== 28835\nIHN0YWF0 28836\n5raI 28837\nINGB0LrQvtC70YzQutC+ 28838\nIGZyaWdodGVuZWQ= 28839\nIHNlZWtz 28840\n0YDRg9GI 28841\ncXVlbnQ= 28842\nIE5vdQ== 28843\nIHByYXQ= 28844\nIFNob3Q= 28845\nV29yaw== 28846\na2FyYW5n 28847\nIExpZ2h0bmluZw== 28848\nbm9sZHM= 28849\ncm9sbGVk 28850\nZ2xhc3M= 28851\nIGNyZWRpYmlsaXR5 28852\nSVRZ 28853\nIGF0bW9zcGhlcmlj 28854\nIGhhdmlh 28855\nw6RuZGVybg== 28856\nY2hlZXJz 28857\nVGhlc2U= 28858\nIENlbGw= 28859\nIG1hZ25lcw== 28860\nIEJyYXZv 28861\nc2Vhc29u 28862\nIMWfZXlsZXI= 28863\n8J+O 28864\nd2hpdGU= 28865\nIE1C 28866\nIHN0YWNrZWQ= 28867\nIDc0 28868\nINC00LDQstCw0Lk= 28869\nIHBhdmU= 28870\nINC+0YU= 28871\nIGRhdGFzZXQ= 28872\nIHJldG91cg== 28873\nIG1hdHVyaXR5 28874\nIHF1YXNl 28875\nIDkz 28876\nIFN5bQ== 28877\nIGJyaWVmaW5n 28878\nIGN1bHR1cmFsbHk= 28879\nIOy3qA== 28880\naW5oYXM= 28881\nIG1hZGFt 28882\nIGFqdWRhcg== 28883\nIFRpYmV0 28884\nIGxlYWtz 28885\nY2lsZQ== 28886\nIHRoZWF0ZXJz 28887\n7Jio 28888\n44OW 28889\nNzI= 28890\nIFdhc2g= 28891\nIFF1YWxpdHk= 28892\nIEl2YW4= 28893\nIEJlbnQ= 28894\naWdhdG9y 28895\nIEdlc2NoaWNodGU= 28896\nIHJlYWN0aXZl 28897\nIDE5MDA= 28898\n5qGI 28899\nIGNvbnRyYWRpY3Q= 28900\nIHppZW1saWNo 28901\nIGNvaG9ydA== 28902\n4bun 28903\nIHBlc3RpYw== 28904\nIG9yYXo= 28905\nIHRlbGxlbWVudA== 28906\n6b4= 28907\nIE5vd2FkYXlz 28908\nY3Jldw== 28909\nU3RldmU= 28910\nIGZpY3Rpb25hbA== 28911\nIGlsaw== 28912\n44GC44Gj 28913\nIGdhc29saW5l 28914\nemFt 28915\nIHBhbmNha2U= 28916\nw6huY2lh 28917\nIG11aXRvcw== 28918\nIGJ1cnk= 28919\nIGtvcA== 28920\nIElR 28921\nIHJlc2VydmF0aW9u 28922\nIFVwZGF0ZQ== 28923\nIGplag== 28924\nIEV5ZXM= 28925\n5Y+R 28926\nIHZpdmU= 28927\nIGNoY2U= 28928\nIEluaQ== 28929\ncmVzcG9ucw== 28930\nIHJlZmxlY3RpdmU= 28931\nIFdhbg== 28932\n0ZbQtw== 28933\nIGVuY2E= 28934\nIGVtYm9k 28935\nIEJ1cmdlcg== 28936\nIGFjYWRlbWlh 28937\nIENpcmM= 28938\nINC/0YDQtdC6 28939\nIGFubGFt 28940\nIHBoaWxhbnRocm9w 28941\nIEJhxZ8= 28942\nIEF1ZGk= 28943\nIHZvc3Q= 28944\n5L2g55+l6YGT 28945\nIHJlcGVy 28946\nUGV0ZXI= 28947\nIGNvbnNvbGVz 28948\nIHNjcnV0 28949\nIFR1cm5lcg== 28950\nINCx0YvQsg== 28951\nSUlJ 28952\n6Ki0 28953\nIEZsaWdodA== 28954\n4LiW 28955\nIFJhdmVu 28956\nIGNvcnJvcw== 28957\nZmVybg== 28958\nIHByb3Zh 28959\nIFNldg== 28960\nIHJlY2lwcm8= 28961\nIDE5ODU= 28962\nIG51ZXZh 28963\nIGRhYg== 28964\n44CB44CM 28965\nIG1leg== 28966\nIFN0YXJr 28967\ncHBpbmdz 28968\n0L7RgdGC0Lg= 28969\n7Kad 28970\nIGZyYW1pbmc= 28971\nINCg0LDQtw== 28972\nIHBvc3Rw 28973\nIFNoYW5ub24= 28974\nINC60YPRgA== 28975\nIGpha2J5 28976\naWVubmVudA== 28977\nIE1hcHM= 28978\nIFJldmVsYXRpb24= 28979\nINGB0YLQsNC7 28980\n7Jq0642w 28981\nIGRldmFudA== 28982\nIEdpdmluZw== 28983\nIFdBUw== 28984\nINC60L7Qs9C+ 28985\nIHJlbWE= 28986\nIFJD 28987\nbsOt 28988\nIHNsaXBwZWQ= 28989\nIFJhbXM= 28990\nIHdlZXQ= 28991\nIG1hc2N1bGluZQ== 28992\nIEVj 28993\nIHJlb3A= 28994\nIFBsYW50 28995\nIE1BWQ== 28996\nIHNwaWtlcw== 28997\nIG5venpsZQ== 28998\nIFdpa2lwZWRpYQ== 28999\nIENvaA== 29000\nSVNTQQ== 29001\nY2hsb3NzZW4= 29002\n7KeA66W8 29003\nIOuvuOs= 29004\nIE5lZGVy 29005\nSm9zaA== 29006\nINCg0L7RgdGB0LjQuA== 29007\nIDE5ODc= 29008\nIFRoZW9yeQ== 29009\nZWtr 29010\nIHV0YW4= 29011\nINC00L7QvNCw 29012\nY2h1 29013\nINGB0LE= 29014\nIGFwcm92ZQ== 29015\nVkVO 29016\ndWVwcmludA== 29017\nIDg0 29018\n5ryC5Lqu 29019\nQ29y 29020\nIHJpY2hlcg== 29021\nIHNhbmR3aWNoZXM= 29022\nYXRzdQ== 29023\n0YjQuNGF 29024\nIGxhdHQ= 29025\nfn5+fg== 29026\nZnJpZW5kcw== 29027\nIGRlcm5pw6hyZQ== 29028\nIHN0ZXJlbw== 29029\nINGN0LrRgdC/ 29030\nIHByb3RlY3Rpb25z 29031\nIGhhdXQ= 29032\nRXZlcnlvbmU= 29033\nIGVudGVycHJpc2Vz 29034\nIE1vc3RseQ== 29035\nIFNwb3RpZnk= 29036\nIFNleA== 29037\nIHVuZw== 29038\njOulvA== 29039\nIGFjdGl2aXNt 29040\nY3RpY2E= 29041\nb3JpZ2luYWw= 29042\nINC/0YDQvtCz0YDQsNC8 29043\nIGJyb2Njb2xp 29044\n4KY= 29045\n0L7Qs9GA0LDRhA== 29046\nIHNla2FyYW5n 29047\nIGNyYWZ0aW5n 29048\nINCx0LDQvQ== 29049\n44G744Gp 29050\nIFJheg== 29051\nIG5haXZl 29052\nIHNjcm9sbGluZw== 29053\nIG51bWVyaWNhbA== 29054\nIHNjaGVkdWxpbmc= 29055\nIGFwYXJ0bWVudHM= 29056\n540= 29057\nIHN0cmV0Y2hlcw== 29058\nYWNleQ== 29059\nIEhFUg== 29060\n44K6 29061\nIHppbmM= 29062\nIGRhcm4= 29063\nIGPDqWw= 29064\nIHdhcmRyb2Jl 29065\nIHJlZGlyZWN0 29066\nIGp1bQ== 29067\nIFN0cmFuZ2U= 29068\nIG7DoG8= 29069\nIGV4cGVyaW1lbnRpbmc= 29070\nw6lyw6k= 29071\nIHZvdWxleg== 29072\nIGdlYmU= 29073\nIEthbm4= 29074\nIMSR4buZ 29075\nIE1heGlt 29076\nIEvDtm4= 29077\nIEdsYXM= 29078\nIHBvbGlzaGVk 29079\nIG51bWE= 29080\nSWNo 29081\nIHJpdHVhbHM= 29082\nIFNJ 29083\n0LjRgtC10LvQuA== 29084\nIGluZmlsdA== 29085\nIHNjYXJm 29086\nb3BoeQ== 29087\nIHlpbmU= 29088\nIGNpdmlj 29089\nIE1lbmc= 29090\nw6RuZ2U= 29091\n1aU= 29092\naGlzdG9pcmU= 29093\nIE9rZQ== 29094\nIOyYhg== 29095\nIHNvbGx0ZW4= 29096\nIDgy 29097\n6aas 29098\nIHByZXNjcmliZWQ= 29099\nIER1YmFp 29100\nIEVsdGVybg== 29101\nIG5hdGlvbndpZGU= 29102\nIHNrYXRpbmc= 29103\naWFyeQ== 29104\nIHJld2FyZGVk 29105\nIG1vcmFsaXR5 29106\nIE1hZ2dpZQ== 29107\nIE9oaGg= 29108\nIEZhaHJlbg== 29109\nb2x2ZWQ= 29110\n5pe25YCZ 29111\nIGRldXhpw6htZQ== 29112\ndGVjaG4= 29113\ncm9sZQ== 29114\nIGxlaWRlcg== 29115\nIEpBWQ== 29116\nINC40L3RhNC+0YDQvA== 29117\nIGNhZmZl 29118\ncmVpY2hlbg== 29119\nIGthcnQ= 29120\nIEN1dGU= 29121\nZmZlY3RpdmU= 29122\nIGJ1bGx5 29123\nYWdhcg== 29124\nIGNvbW1vZGl0eQ== 29125\nIG9icmln 29126\nT1VS 29127\nIHVucGxlYXNhbnQ= 29128\nbm94 29129\nSnVs 29130\nb2xpdGg= 29131\n0YLQvtGP0Yk= 29132\nIEJlbGxh 29133\nIGRvbGxz 29134\nIEhvZmY= 29135\nIGFkdmlzb3Jz 29136\nIHRyYW5zZmVycw== 29137\nIEdva3U= 29138\nIDEyMDA= 29139\naW5ob3M= 29140\nUGFs 29141\nIOuYkQ== 29142\nIHJlcHQ= 29143\nIGFjY29tcGxpc2htZW50 29144\nIHdlYXZl 29145\nIG92ZXJzaWdodA== 29146\nIHVuaGVhbHRoeQ== 29147\nIGZpbHQ= 29148\nIHB1ZGRpbmc= 29149\nIE1pZ3VlbA== 29150\nIGNodWNrbGVz 29151\n5Y+w54Gj 29152\ndmVyc2lvbg== 29153\nIGNvbmZlc3Npb24= 29154\ndmFsdWU= 29155\nIHRyaXVtcGg= 29156\nIHNhaXI= 29157\nIOuFuA== 29158\nIGFydGU= 29159\nIE1hdGVyaWFs 29160\ndXRp 29161\nIGxpcXVvcg== 29162\nIEJheWVybg== 29163\nIE1haWw= 29164\nIO2WpQ== 29165\n0YHQutC+0Lw= 29166\nIGNoZWFwZXN0 29167\nINGH0LDRgdGC0Lg= 29168\nIEpvYnM= 29169\nIENhbnlvbg== 29170\naGFybWE= 29171\nYWxleQ== 29172\nYW5kcm8= 29173\nIGFwcGVhcmFuY2Vz 29174\ncHJvZg== 29175\nINC+0Lc= 29176\nbGFnZW4= 29177\nIC8v 29178\nINC70LjRiNGM 29179\nIHJlY292ZXJpbmc= 29180\n0LTQtg== 29181\ncHN5 29182\n44Oi 29183\nIHN3aWZ0 29184\nIFNwaW4= 29185\n5biI 29186\nIHNlaW5lbQ== 29187\nIGRvbHBo 29188\nZsO8aHI= 29189\nw6J0 29190\nIGFsdGlqZA== 29191\nIE1hcnR5 29192\nIEhvY2g= 29193\nIHByZWRhdG9ycw== 29194\nIHZvcmhlcg== 29195\nINCU0LDQstCw0Lk= 29196\nIGZyYWdtZW50cw== 29197\nIHBhc3RyeQ== 29198\nIGNvbW1lbg== 29199\nIFNhbmE= 29200\nIOqxtOuNsA== 29201\ndXNzZW4= 29202\nIHRlbGE= 29203\nIE5pbmE= 29204\nbGVr 29205\nIGNyaWVz 29206\nIHRoaWdocw== 29207\nIEZsZXg= 29208\nIEJ1eno= 29209\n44Q= 29210\nVXM= 29211\nIHBhc28= 29212\nIGRlY2xpbmVk 29213\nIE55 29214\nYmFsYW5jZQ== 29215\nIG1hc2E= 29216\nIGpvcw== 29217\n44Gq44KL 29218\nINCh0L/QsNGB0LjQsdC+ 29219\nYWNodQ== 29220\nbG91ZA== 29221\nIHBlbmE= 29222\nIFdhbGQ= 29223\nIGVsaW1pbmF0aW9u 29224\nINCy0LXRgdGM 29225\nb3JhZ2U= 29226\nIG1pc3VuZGVyc3RhbmRpbmc= 29227\nIGVuZG9yc2U= 29228\nIG9nw7NsZQ== 29229\nIGdyZWVk 29230\nIGtsZWlu 29231\n15zXlA== 29232\nUkVZ 29233\nIEVhdGluZw== 29234\nIHNlbWluYXI= 29235\nIEJpcnRoZGF5 29236\nIHF1ZWxsZQ== 29237\nIE11bHRp 29238\nIHRpcmFy 29239\nIHBlcmNo 29240\nIGxhdm9y 29241\nIEppYQ== 29242\nIG11dGF0aW9ucw== 29243\nIGNpZ2FyZXR0ZXM= 29244\n2YjYrA== 29245\nIGNvdXNpbnM= 29246\nIGNhcHN1bGU= 29247\nIGhvcnJpZmlj 29248\nIHN0dXI= 29249\nIHplaWd0 29250\nbnV0cw== 29251\nIG1lYW53aGlsZQ== 29252\nIENvbGlu 29253\nIGdvYmllcm5v 29254\nIGd3 29255\nIHVoaA== 29256\nIEpFUg== 29257\nc3BlY2lmaWM= 29258\nIGFsbGVnYXRpb25z 29259\nIOupiw== 29260\nIEVsbGE= 29261\nb29rZWQ= 29262\nIEZpdA== 29263\nYWZmbGU= 29264\nIEFwcsOocw== 29265\nIER1Y2s= 29266\nIGNlbGx1bGFy 29267\nY8Ozdw== 29268\nINGH0YPQstGB0YLQsg== 29269\nZ2Vub21tZW4= 29270\n7Iqk7Yq4 29271\nIGxhaW4= 29272\naXNvbA== 29273\nIGhvbGRlcnM= 29274\nIGJvb3N0ZXI= 29275\nIFNhc2hh 29276\n0YvQstCw0LXRgg== 29277\ngbw= 29278\nIHNlcGFyYXRpbmc= 29279\nIHJlaW5mb3JjZW1lbnQ= 29280\nINC+0LTQvdC+0Lk= 29281\n7JeG 29282\nSURF 29283\nIE9wdGlvbg== 29284\ncGhvbg== 29285\nIHBsYWlz 29286\nIENhbWI= 29287\nIO2ZmA== 29288\nIHVuY29tbW9u 29289\nIjo= 29290\nbWl5b3J1bQ== 29291\nbW9p 29292\nYWNqZQ== 29293\n0LDQttGD 29294\n1bY= 29295\nIGdlbXM= 29296\nw7xsZXI= 29297\nb29scw== 29298\nIGVuenltZXM= 29299\nIGtpZG5hcHBlZA== 29300\nIGtldGNodXA= 29301\ndGFsaw== 29302\nIHphY2g= 29303\nIHdhc2hlcg== 29304\n44CC44CC 29305\nIEFyY2hpdGVjdA== 29306\ndmVudWU= 29307\nIFBsYW5uaW5n 29308\n6YCB 29309\nIFNhdmlvcg== 29310\nINCz0YDRg9C/0L8= 29311\n7Yq8 29312\nYXJ5YQ== 29313\nIHByb2Nlc28= 29314\nIGxpbWJz 29315\nIHJlYWxpemVz 29316\naWFuZGVy 29317\nRlM= 29318\nYWpp 29319\nIHVuaXRl 29320\nIOydmOs= 29321\nIHBvc3PDrXZlbA== 29322\ncmFpdHM= 29323\nIEFncmU= 29324\n24zaqQ== 29325\n7ISc64+E 29326\n5o6J 29327\nINCy0LXQuw== 29328\nINC80LXRgdGP 29329\nYW5vcg== 29330\nUGF0 29331\nIGRlcm5pZXI= 29332\nz4PPhM61 29333\nINC60LDQutCw0Y8= 29334\nIGzDpHNzdA== 29335\n5o6w 29336\nIE1laA== 29337\nIG5naA== 29338\nIGFtYXRldXI= 29339\n6KuW 29340\nRmU= 29341\nIOq2gQ== 29342\nIHNpdHVhY2nDs24= 29343\nIHNlZGFu 29344\nIGNsZWFuc2luZw== 29345\nbGFzdGluZw== 29346\nIGNvbW11bmlzdA== 29347\nQU5F 29348\nIGlycmVndWxhcg== 29349\nIHNvdXQ= 29350\nIENhcm5leQ== 29351\nIGFsbGVtYWFs 29352\nIG11Y2jDrXM= 29353\nIGxpYnJv 29354\n0K3RgtC+ 29355\nINCw0L8= 29356\nIGNvbnRpbnVhdGlvbg== 29357\nIExvcg== 29358\nPyIs 29359\ncXVpbg== 29360\nIGNoYXJhY3Rlcml6ZWQ= 29361\nYWplcw== 29362\nIHNpZ2h0cw== 29363\nINGP0LfRiw== 29364\nIFVoaA== 29365\n6Lez 29366\nYmlydGg= 29367\nZG9uZw== 29368\nIGhhYmxhbmRv 29369\nIHN5bXB0b20= 29370\n57WC 29371\nIGNhcGFjaXRvcg== 29372\nIHRyYW5zcG9ydGVk 29373\nIGlnbm9yYW50 29374\nINC90LjQutC+0LPQtNCw 29375\nIGRyaXA= 29376\nIEV2YQ== 29377\nIGFkamVjdA== 29378\nIG1hc3NpdmVseQ== 29379\nIEV0aGk= 29380\nIENpcmNsZQ== 29381\nIHJhaW5mYWxs 29382\nIE1vdXNl 29383\nIHJlZnVuZA== 29384\nIFp3 29385\nYXNzZW1i 29386\nIDIyMA== 29387\nIE9yZA== 29388\n6KeS 29389\nIHZlaW5z 29390\nIEdpYW50 29391\nIG3Do2U= 29392\nIHZhcA== 29393\nIG1pc3Nlcw== 29394\nzr/Phc+C 29395\nTW8= 29396\nIEVudHdpY2s= 29397\nSU5U 29398\n2YbYqg== 29399\nIHRoZW9yZXRpY2FsbHk= 29400\nIHRlYXJpbmc= 29401\nIHRyb3VibGVk 29402\ncHJlbQ== 29403\nIHJlcGV0aXRpdmU= 29404\nIOKW 29405\nIGhlYXZlbmx5 29406\nIEFtYmVy 29407\nINC/0L7Qu9C+0LY= 29408\nIO2VtOyk 29409\nIHZvd2Vs 29410\nYW5raW5n 29411\nIFdpcnRzY2hhZnQ= 29412\nIGlycg== 29413\nIGNvenk= 29414\nIHVuZmFtaWxpYXI= 29415\nIFBvcnM= 29416\nIOunnuyVhA== 29417\nIFRpbW90aHk= 29418\n0YHQvtC70Y7Rgg== 29419\ncGV4 29420\nIFZJUw== 29421\nKSg= 29422\nIHN1cGVyc3Q= 29423\nIGltcHJvdg== 29424\nIEJlbmc= 29425\nIGRpc2Nvbm5lY3RlZA== 29426\nIGFwdA== 29427\n0YDQtdC9 29428\nIEV4dHJh 29429\nINCx0LXQuw== 29430\nc2hvcA== 29431\nZGluZ3M= 29432\nIENvbm5lY3RpY3V0 29433\n7LCs 29434\nIEdD 29435\n5Y+W 29436\nYmVo 29437\nSmVyZW15 29438\nIEJhdHQ= 29439\n44G4 29440\nYXRoYQ== 29441\nIFp1c2FtbWVu 29442\nc2NyZWFtcw== 29443\nIGdyYXM= 29444\nYWZmdA== 29445\nIEluaXRpYWxseQ== 29446\nIEJyZXR0 29447\nIHNwZWNpZmljYXRpb25z 29448\nIHNlYXdlZWQ= 29449\nIG9hdGg= 29450\nIGZvdW50YWlu 29451\nINC60L7RgtC+0YDQvtC5 29452\nIFN0ZWlu 29453\n6IGy 29454\nIENvcmludGg= 29455\nIGNvbmp1Zw== 29456\n5bem5Y+z 29457\nIGNvbXBlbnNhdGU= 29458\nIOuKkOuCjOydtA== 29459\nIG9uemU= 29460\nIHNraW5jYXJl 29461\nQnJpYW4= 29462\nIHNlcnZpcg== 29463\nfX0= 29464\nIFZpaw== 29465\nIHVuaW50 29466\nIHN1cHBsaWVycw== 29467\nIGJhbGNvbnk= 29468\nIGVuZXJnaWE= 29469\nb21ldHJpYw== 29470\n0LfRjw== 29471\nIHNpZ2g= 29472\nIFRPTQ== 29473\nIFB1cmU= 29474\neXR0 29475\n0YvRgQ== 29476\nIFJhaW5ib3c= 29477\nIFBpdHRz 29478\n15nXng== 29479\nIHN0YXR1ZXM= 29480\naGVhZHM= 29481\nIGNvdXBsZWQ= 29482\n6Yyi 29483\nIGhlcmQ= 29484\n5L2T 29485\nIGV4Y2x1ZGVk 29486\nIGdpbHQ= 29487\nINGO 29488\nIHN3b2pl 29489\nIFN2ZXI= 29490\nNjM= 29491\naXNzYW50 29492\nIGTDvHJmZW4= 29493\noIjr 29494\nIGtpc3Npbmc= 29495\nb29m 29496\n5Lul5LiK 29497\nIGN1cnNlZA== 29498\nIHNob3dlcnM= 29499\nIHN3aW5naW5n 29500\nIHJlcHJvZHVjZQ== 29501\n44Go44GE44GG44GT44Go 29502\nIHPDpHR0 29503\nZWxjb21l 29504\nIGZ1bmRhbWVudGFscw== 29505\nIGFsbW9uZA== 29506\nIHDDqQ== 29507\nIHdlbGxiZWluZw== 29508\nIGh1bnRlcnM= 29509\n5b6A 29510\nU2Vj 29511\nk5zrprQ= 29512\nIGVtaXNzaW9u 29513\nIHBzeWNob2xvZ2lzdA== 29514\nIGJldHJheWVk 29515\nIFJleW5vbGRz 29516\nTEVT 29517\nIHBvbGxpbmc= 29518\nIG5lZ2F0aXZlbHk= 29519\nIGNvbWJpbmVz 29520\n15zXkA== 29521\n0LDRgNCw 29522\nzrvOu86s 29523\nIFR1cm5z 29524\nT1RU 29525\nINeU15k= 29526\nYWlzb24= 29527\nIGFpcmxpbmU= 29528\nIHJlc3RyaWN0aW9u 29529\nd2Fs 29530\nIGF1cmFpdA== 29531\nIExlYmFub24= 29532\nIE1PUg== 29533\nIG1vbmtleXM= 29534\nw6luZXI= 29535\n0ZbRlw== 29536\nIG1vdGhlcmY= 29537\nINmH2LDZhw== 29538\nIGZldQ== 29539\nw7xocmVu 29540\nIGh5Z2llbmU= 29541\nZW50ZWVu 29542\nRGVz 29543\nIGRpc3NpcA== 29544\nRXN0 29545\nIHNhaW50cw== 29546\nIHBvdGFzc2l1bQ== 29547\nIHJlY2tvbg== 29548\nQ2xpbnR1cw== 29549\nIG1hbmlmZXN0YXRpb24= 29550\nIEFwcHJv 29551\nIEluc3BlY3Q= 29552\nIHZlbnRpbGF0aW9u 29553\nIGhlbG0= 29554\nIGthcmE= 29555\n4Liy4LiZ 29556\nIGZhdm9yYWJsZQ== 29557\nIOyViuyVmA== 29558\nIEhpc3Bhbmlj 29559\n4Lic 29560\nINeU15s= 29561\nIHZhbGlkYXRl 29562\nIFJlc2lkZW50 29563\nIGNvbWVueg== 29564\nYmVpdGVy 29565\nZXJlcg== 29566\n5LiA6LW3 29567\nIGRhZG8= 29568\nYXRjaGluZw== 29569\nbWV0cm9z 29570\nIEhpbg== 29571\nIER1bQ== 29572\nIGhhesSxcg== 29573\nIE5hdGFsaWU= 29574\nIGVuY3J5cHRpb24= 29575\n0L7Rh9C60LA= 29576\nbW1h 29577\naG91c2Vz 29578\nIGFuYWx5dGljYWw= 29579\nIERhbmc= 29580\nZmlyc3Q= 29581\n5q2M 29582\n57qM 29583\nIEVuYw== 29584\nY2FuZG8= 29585\nIGx1ZHpp 29586\nd2FydA== 29587\nIHN0YXRpc3RpYw== 29588\nIOyCsA== 29589\nIGNvbW1lbnRpbmc= 29590\nIGNvb3JkaW5hdGVk 29591\nIEh5cGVy 29592\n5Zo= 29593\nIEJlcnQ= 29594\n55y+ 29595\nIEhpcA== 29596\na2Vt 29597\nw7xuw7w= 29598\nIHphbA== 29599\nIO2VmOuKlOuNsA== 29600\nIFJvYm90 29601\n6Zax 29602\ncmF3bg== 29603\nIHJoZXRvcmlj 29604\ndWxsYWg= 29605\nIERpZXQ= 29606\nIHRha2ljaA== 29607\nIHBvc3Nlc3NlZA== 29608\nk5zripQ= 29609\nIHdha2Vz 29610\nIFJhZg== 29611\nTWFydA== 29612\nIGVjYw== 29613\nIEZN 29614\nIGRpZmlj 29615\nIEFsbGV6 29616\nIGN1cmVk 29617\n5a2m 29618\nIFF1YWQ= 29619\nIGJlbGU= 29620\nIGpvdXJuYWxz 29621\nIHRhZA== 29622\nIHNvY2lhbGVz 29623\n5oeC 29624\nIHdoYXRz 29625\nIEJhc3M= 29626\nIGplc3RlbQ== 29627\nIFNhZGx5 29628\nIFNvdXJjZQ== 29629\nIMO8w6c= 29630\nYWx0dW5n 29631\naWVydGVu 29632\nIGp1bGxpZQ== 29633\naWZh 29634\nINCa0L7RgA== 29635\nIERvb3I= 29636\nINCd0LDQtA== 29637\nINC30LTQvtGA0L7Qsg== 29638\nIHJ1bW9y 29639\nIHBpZXM= 29640\nINC/0LXRgNC1 29641\nINC+0YLQsg== 29642\n0LXQvdC90YvQtQ== 29643\nSG9zdA== 29644\nIFNvcGhpZQ== 29645\nYW50ZW4= 29646\nQW55 29647\nIEF1Zmc= 29648\n56iL 29649\nIEhEUg== 29650\nIFJvY2tldA== 29651\ncmVzc28= 29652\nIHZlcmRl 29653\nIHByw6lzaWRlbnQ= 29654\nIGluZG9vcnM= 29655\nIHN0YWdnZXI= 29656\nIHN0YXRv 29657\nIERpYWw= 29658\nIGJ1enppbmc= 29659\nZW1lcg== 29660\nINCS0YHRkQ== 29661\nINC00LXRgNC10LI= 29662\nIHBvdXY= 29663\nIHN0cmFuZHM= 29664\nIOqyg+ydtA== 29665\nIFBhcmw= 29666\n0L7QutC+0Lk= 29667\nIHNpcA== 29668\nICgq 29669\nw6RuZ3Q= 29670\nIGRlYmVy 29671\nIEFpbg== 29672\nIGRyYXN0aWNhbGx5 29673\nIFNsb3dseQ== 29674\nIEJyaWc= 29675\nIFRvcmFo 29676\nIGFjaGU= 29677\nID8/Pw== 29678\nIERvYg== 29679\na2FubnQ= 29680\nTWFyeQ== 29681\nIHN0YW0= 29682\nIERlbW9u 29683\ncGxh 29684\nIEZyZXVuZA== 29685\nIEJlbm4= 29686\nIGhpZ2hz 29687\nINqp2LE= 29688\nIFByZXBhcmU= 29689\nIHByb3h5 29690\nIGNhbXBv 29691\nIEF1Z2Vu 29692\no6jr 29693\nIENobG9l 29694\naWN1bGFybHk= 29695\neW91bmc= 29696\nIOOBjA== 29697\nqZTr 29698\nIHNjcmF0Y2hpbmc= 29699\nIGdsYWM= 29700\nIGdlbWVpbnNhbQ== 29701\nYW5hbA== 29702\nYWNha3PEsW4= 29703\nIEZvcnVt 29704\nZW5uaWFs 29705\nIFJlc291cmNlcw== 29706\n44Go5oCd44GE44G+44GZ 29707\nIG1laXN0ZW4= 29708\nIEZlbGw= 29709\nIHVuYW5pbQ== 29710\nIFRC 29711\nIFNlbGJzdA== 29712\n5oY= 29713\nIGludGltaWRhdGluZw== 29714\nIEdlZsO8aGw= 29715\nIOy9lOuhnA== 29716\n5ouJ 29717\naWRvcg== 29718\naWNpb25lcw== 29719\nYXJzYQ== 29720\nXS4u 29721\nYXpv 29722\nIGtlbmRp 29723\nIFRhZ2U= 29724\ndGVybWlu 29725\nIFByb3plbnQ= 29726\nTWF5YmU= 29727\nbMOp 29728\nIHF1ZXN0aQ== 29729\nIG1lbWVz 29730\nIGNvcnJl 29731\nIFZJUA== 29732\nIEdhbGxlcnk= 29733\nIHVyZ2VuY3k= 29734\nIG5vY2hl 29735\nIGtpbmRseQ== 29736\nIE1lcmVkaXRo 29737\nIHbhuq15 29738\nINin2YTYqA== 29739\nIEVzdGFkbw== 29740\n5Ye65L6G 29741\nenVn 29742\nb3F1ZQ== 29743\nIG9iZXNpdHk= 29744\nT2Zm 29745\nIEV1cm9wZWFucw== 29746\nw7Zk 29747\n7Lm06w== 29748\nIGhvb3A= 29749\nIGVuam95cw== 29750\nIENoaXA= 29751\ncGF0aWVudA== 29752\nIG1pY3Jvc2NvcGU= 29753\nIGxlZ2l0aW0= 29754\nINGP0LLQu9GP0LXRgtGB0Y8= 29755\nz4POuQ== 29756\nYXJnZW50 29757\nIHNoYW0= 29758\nIGxpY2Vuc2luZw== 29759\nb2xpYQ== 29760\nU29ycnk= 29761\ncmFtYQ== 29762\nIGFjY2VsZXJhdGVk 29763\nIHd5bQ== 29764\nIGZhaXJuZXNz 29765\nIFJlYWRpbmc= 29766\nIHNsYWNr 29767\nIERvaw== 29768\nemnEmWt1asSZ 29769\nIHJ1YmJpbmc= 29770\n0LDRgtGD 29771\nIGFsbG9jYXRlZA== 29772\nanVuZw== 29773\nIHBhaW5z 29774\nIHdpbmRpbmc= 29775\nIGdlbGl5b3I= 29776\nIENV 29777\nbW90 29778\nY29jaw== 29779\nIFBvc2l0aW9u 29780\nYnJvcw== 29781\nIGxpdmVzdHJlYW0= 29782\nIEJyYWlu 29783\n7LCp 29784\nIHByemVr 29785\nIEVp 29786\nIENvY28= 29787\n0LHQsA== 29788\nIHNob3ZlbA== 29789\n44OP44OP 29790\nZWE= 29791\nIGNob2NvbA== 29792\nIHJlYmVsbGlvbg== 29793\nIHNob3dj 29794\nIEhhbG8= 29795\nIGRpdmlkZW5k 29796\nbWlzc2lvbg== 29797\nIHVzYW5kbw== 29798\nIFsi 29799\nIGZhbGVp 29800\n5pu4 29801\nQmxhY2s= 29802\nIFN1cmVseQ== 29803\nIMW7 29804\nIHBoaWxvc29waGVy 29805\n5L2g5Lus 29806\nIG92ZXJoZQ== 29807\nIEJvcm4= 29808\nIG9iamV0aXZv 29809\nIDEyOA== 29810\nc2NoZWlk 29811\nIE5hemlz 29812\nIHNvbGNoZQ== 29813\nbGlmdA== 29814\nY2VkZQ== 29815\nYWRvcnM= 29816\nIG1hcnNobQ== 29817\nIExPUkQ= 29818\nlOydtO2BrA== 29819\nIG93bmluZw== 29820\nQ29udA== 29821\nIGxhbmRzY2FwZXM= 29822\nIGxlbmRpbmc= 29823\nIEF1dGhvcml0eQ== 29824\n0L7QstC+0Lk= 29825\nb3F1 29826\nIFNlcw== 29827\nIEZlcnJhcmk= 29828\nIHJlc3BvbnNhYmls 29829\nIHbDoXJpb3M= 29830\nIGRlbGlj 29831\nIGVtYmFyaw== 29832\nIGVtYnJvaWRlcg== 29833\nIGZyYW1ld29ya3M= 29834\nIHNpbW1lcg== 29835\nIG5hY2lvbmFs 29836\nIHJlbWFpbmRlcg== 29837\nIFZpZWxsZWljaHQ= 29838\nIHF1aWVyZXM= 29839\n7JeU 29840\nIHRlc3Rvc3Rlcg== 29841\naWhlbg== 29842\nIE96 29843\nw6hsZQ== 29844\nIHBvcnRyYXllZA== 29845\nzrrOtQ== 29846\nIFBvbGl0aWs= 29847\nIGFwZXJ0dXJl 29848\nIGJsYW5k 29849\naW5kdXN0 29850\nINC+0LHRgNCw0YI= 29851\nIFRob3Vz 29852\nQmF5 29853\nIGRhbmRv 29854\nIHNoZXI= 29855\nIGFkbWlzc2lvbnM= 29856\nIENyZXc= 29857\nINGW0L0= 29858\nU0lOR0lORw== 29859\nIG91bmNl 29860\nIGl5 29861\nIGJhc2ls 29862\nIG92ZXJ0aW1l 29863\nIHRocmVhdGVu 29864\nIHBhcnRuZXJlZA== 29865\nIENhbm4= 29866\nYXZhbmE= 29867\nINC30L3QsNC10YLQtQ== 29868\n6YCZ5Lqb 29869\nINC+0YLRgQ== 29870\nIFR1ZG8= 29871\n7L2U 29872\nIOuGgOs= 29873\nZmVs 29874\nIHJlYXJy 29875\nIGlud2FyZA== 29876\nIFJvZ2Vycw== 29877\n4LmD4Lir 29878\nIHR3ZWFr 29879\nIGRyeWVy 29880\nY2Vzc2lvbg== 29881\nIHJpZ29yb3Vz 29882\nIERhYXI= 29883\nb21pY3M= 29884\nIGZhdHM= 29885\ndmFk 29886\nIHppcHBlcg== 29887\nYWNjZXB0YWJsZQ== 29888\nIGRlbW9uc3RyYXRpbmc= 29889\nIFl1bQ== 29890\nIGJlYXU= 29891\nIHJvc3Rlcg== 29892\nIHByZWRvbWluYW50bHk= 29893\n0LXRgNGD 29894\nbmluZ2Fy 29895\nIHRyaWFuZ2xlcw== 29896\nIHRleHRpbmc= 29897\nIGJlcnJpZXM= 29898\nIOyCrOynhA== 29899\n6ZSZ 29900\nYWRkZXI= 29901\nIGZhaXRlcw== 29902\nIEltYWdl 29903\nbGVyZQ== 29904\nIGJvdW5kcw== 29905\nIExhdXI= 29906\nIOyVhOustOs= 29907\nIG1pbw== 29908\nIHVzYQ== 29909\nINiw 29910\nIHRvZW4= 29911\nIEphbmc= 29912\nxb5l 29913\nY2hvZA== 29914\nYW5hbg== 29915\nINC+0LHRgNCw0LfQvtC8 29916\nIHBlcnNldmVy 29917\nIFN3ZQ== 29918\nIGF1Z21lbnQ= 29919\n5LiD 29920\ndWdnbGluZw== 29921\nacOocmVtZW50 29922\naXN0bGVz 29923\nYWNqxJk= 29924\nOTE= 29925\nIG1haA== 29926\nIEtJUg== 29927\nRGll 29928\nIGRvd25oaWxs 29929\nIDE5Njg= 29930\n0L7RgNC+0YjQvg== 29931\n5bm5 29932\nb2dyYXBoaWNz 29933\nIHTDpHNzw6Q= 29934\n6rKg7KOg 29935\nINC70LjRhw== 29936\nQVVESU8= 29937\nINC/0LvQvtGF 29938\nIHByb3Bvc2luZw== 29939\n6aC7 29940\nIHRlbXB0ZWQ= 29941\nIGNvbnZlcnRpbmc= 29942\nIExlaHI= 29943\nIHBlcnNvbmU= 29944\nIEZlZWxpbmc= 29945\n7Ja07KO8 29946\nb21icmVz 29947\nINec15k= 29948\nIGd1cnU= 29949\nIGRlbWVudA== 29950\n0L3QuNC3 29951\n0LjRgtC10LvQtdC5 29952\nIGNvbXBhw7E= 29953\n5pyq 29954\n5biM5pyb 29955\nIHJlZG8= 29956\nIGNvbmR1Y3Rvcg== 29957\nbWlh 29958\nIGlkb2xz 29959\nIE11bA== 29960\nIGluZXg= 29961\nIHTDpG3DpA== 29962\nIGltcGFjdGluZw== 29963\nIGRheWxpZ2h0 29964\nZ2ls 29965\nIGhlbGZlbg== 29966\nIGVudHNwcmVjaA== 29967\nIHdpxJlrcw== 29968\nIHNjcmlwdHVyZXM= 29969\nIGRpc21pc3NlZA== 29970\n44Oz44OI 29971\nIFBvZGNhc3Q= 29972\n2YXYsQ== 29973\nIGFubnVhbGx5 29974\nIHVzYWJsZQ== 29975\nIGxpYnJl 29976\n0L7Qt9C8 29977\nIHJ1YmJpc2g= 29978\n55qE5Lq6 29979\nIGNvbnRpbnVhcg== 29980\nIGh1bWlsaQ== 29981\nIHNwZWVjaGVz 29982\n0YDQsNGH 29983\nYmFyZA== 29984\nNzE= 29985\nPjw= 29986\nb2xvZ8OtYQ== 29987\nd2VhbHRo 29988\nIG1lZGl0YXRl 29989\nk6TsnZg= 29990\nIENyYWZ0 29991\n6KeJ5b6X 29992\n5pmu 29993\ncml2 29994\nIEFnYWluc3Q= 29995\nIGNlcmFtaWM= 29996\nZXNww6hyZQ== 29997\nIGNvbXBldGVudA== 29998\nIEhvcGtpbnM= 29999\nIGtpbG9z 30000\nIGdyYXZlbA== 30001\nIHBpc3Rvbg== 30002\nIGZyaWVuZHNoaXBz 30003\nIGVzY3Jl 30004\nIHZveg== 30005\nIEdlc2VsbHNjaGFmdA== 30006\nIHVudGVyc3TDvHQ= 30007\nIG11ag== 30008\nIHdhcm5pbmdz 30009\ncG9z 30010\nIFByb2Zlc3Npb25hbA== 30011\nd3N6eQ== 30012\nb2RsZQ== 30013\nYmFuZHM= 30014\nIHRlYW13b3Jr 30015\nc3RlbGx1bmc= 30016\nIGR4 30017\n5Y2K 30018\nIGF0dG9ybmV5cw== 30019\nIHdlaXRlcmU= 30020\n44WL44WL44WL 30021\nIE9yaWdpbmFs 30022\n15nXlw== 30023\nIGJyb2FkY2FzdGluZw== 30024\nINC/0LXRgNCy0YvQuQ== 30025\ndWNoaQ== 30026\nIGhldXJl 30027\nIGdyYWJz 30028\nIFdPUg== 30029\nIFBsYWlk 30030\nTWlu 30031\nIHBheg== 30032\nIFB1aXM= 30033\ndW11 30034\naXRhdGVz 30035\nIGNvYXRz 30036\nIGJ1ZW4= 30037\nIGhlaXI= 30038\nIHBuZXVt 30039\n16nXqA== 30040\nZW5zZXI= 30041\nIEpVREdF 30042\nIGJsb25kZQ== 30043\n4bmb 30044\nIGdhaw== 30045\nIHPEsWs= 30046\nIHF1b3RlZA== 30047\nIGVxdWlwbw== 30048\nIHdpc2hpbmc= 30049\nw61jaWE= 30050\nIHZlcmJz 30051\n57WE 30052\nIENhbmFkaWFucw== 30053\nIGdvdmVybmluZw== 30054\nIEV2YW5z 30055\nRXVybw== 30056\nIGdlbnJlcw== 30057\nIHVudGVyc2NoaWVk 30058\nIEJlY2t5 30059\ns7zqsozsmpQ= 30060\nIGVpbmdl 30061\nIFJhaXNl 30062\nb2xhbmQ= 30063\nIFN0cmF0ZWc= 30064\nIGVyZXM= 30065\nIFZldGVyYW5z 30066\nIGJyZWFrb3V0 30067\nIHNhbnTDqQ== 30068\nIGFkZWw= 30069\nIGludmVzdGlnYXRlZA== 30070\nIHBldXI= 30071\nIGFnaWxl 30072\nIHJhaWxyb2Fk 30073\nYW5za2E= 30074\nINC10Lk= 30075\nIGV4cG9z 30076\nYXRvcmllcw== 30077\nIENvbnRlbnQ= 30078\nIHRydXRocw== 30079\nIFRyYWls 30080\nIGd1YQ== 30081\nIHBvcmVz 30082\nIHdyaXRpbmdz 30083\nIFVocg== 30084\nIFRoYXRz 30085\nIGljaW5n 30086\nT0M= 30087\nIFByb2R1Y3Rpb24= 30088\nIGNhcm5l 30089\nSVNT 30090\nIG5pbmd1w6lt 30091\nbm9u 30092\nIHZpY2lvdXM= 30093\n15XXlA== 30094\nIHJlY29ubmVjdA== 30095\nIGNlbnRyZXM= 30096\nIEtlbQ== 30097\nIGNyZWFzZQ== 30098\nIOydtOuvuA== 30099\n0LDQudGC0LXRgdGM 30100\nINCx0L7RgA== 30101\nIEhhecSxcg== 30102\nINGB0YPQtA== 30103\nIMO6bmljYQ== 30104\nb3dhxYI= 30105\nIGFkaGVy 30106\naHVh 30107\nWlo= 30108\nIHByZWNpc28= 30109\nIGN1cnJlbnRz 30110\nIHNlYXNvbmVk 30111\nIElvVA== 30112\nIEJpc2hvcA== 30113\n6KiI 30114\nc3RlZA== 30115\nIEJlcm5hcmQ= 30116\n7KSY 30117\n5rK7 30118\nIEdsZW5u 30119\nIGt0w7NyeW0= 30120\n4Li34LmI 30121\nIGFzdHJvbG9n 30122\nIEtvdA== 30123\n5aSc 30124\nIHBhcmZvaXM= 30125\nIGZvcndhcmRz 30126\nIFdpxJk= 30127\nIM6Y 30128\nIG5hbm8= 30129\n6LuN 30130\nc3Vi 30131\nIEJyaWxs 30132\nIGdyaXQ= 30133\nIGNpdGVk 30134\nZ2Fkbw== 30135\nIG1lbHRz 30136\nIGZvcmPDqQ== 30137\n4paI4paI 30138\nIGJham8= 30139\nIGRpc2NyZXRpb24= 30140\nsLA= 30141\nYXRpdml0eQ== 30142\nIHNpdHVhdGVk 30143\n44Or44Kv 30144\n0YnQtdC1 30145\n5Zyw5pa5 30146\nINC/0YDQuNC90YbQuNC/ 30147\nYW1heg== 30148\nIGFxdWFyaXVt 30149\nIGRpc3NvbHZl 30150\nIEdvZHM= 30151\nU3VwZXI= 30152\nIGFtaWQ= 30153\nems= 30154\nIOOBhA== 30155\n6aCQ 30156\nYW1wZg== 30157\nIGhlbGE= 30158\nJyE= 30159\nIGRldmVsb3BtZW50YWw= 30160\nIERpc2U= 30161\nINGA0LDQsdC+0YLQsNC10YI= 30162\nIHNuYXBzaG90 30163\n5aW95aW9 30164\n1bg= 30165\nIFl1ZQ== 30166\nIEh1bGs= 30167\nIERvb20= 30168\nIEZlbGl4 30169\nIHLDqWY= 30170\nTWFsZQ== 30171\n57eK 30172\ncGhhbnRz 30173\nRU5T 30174\nIE1lY2hhbg== 30175\nIEdvbGY= 30176\n5YaN6KaL 30177\nIGdlbmVyb3NpdHk= 30178\nw6R0emU= 30179\nIHVubG9ja2Vk 30180\nIOOCkg== 30181\n7YOB 30182\nb2NhbHlwc2U= 30183\nQWxyaWdodA== 30184\nIOqwnOs= 30185\nINeQ15HXnA== 30186\nIEtlZXBpbmc= 30187\nIGNvbGxhYm9yYXRpbmc= 30188\nY2hpZWY= 30189\nIEZlcm5hbmRv 30190\nIGNoZWZz 30191\nIO2UvOu2gA== 30192\nIHNraXBwZWQ= 30193\nIHBlcnNvbm4= 30194\nIGF4ZQ== 30195\nY2hleg== 30196\nIGV4dHJhY3Rpb24= 30197\nIEFW 30198\nIEdpYmJz 30199\nIO2c 30200\nIHPEsQ== 30201\nSUFN 30202\nVmlldw== 30203\nIEdSQU5U 30204\nIOuquA== 30205\nIHZlcmlmaWNhdGlvbg== 30206\nIGRlcGljdGVk 30207\nIE1veg== 30208\nb3V4 30209\nIHR1bA== 30210\nIHNjYW5uZXI= 30211\nIGNvbWVkaWFu 30212\nIFZvbGtz 30213\nIEpFRkY= 30214\n6KiC6Zax 30215\np4Q= 30216\nIGRpc3RyYWN0aW9u 30217\ncsOh 30218\nIElOVEVS 30219\nIHNpbmNlcg== 30220\nINee16o= 30221\nINep16A= 30222\nIGNvbnN0cnVjdGl2ZQ== 30223\nYXJm 30224\nIOuIhOs= 30225\nIGVjbw== 30226\ncmFtb3M= 30227\nIHJlbmV3ZWQ= 30228\naW5lbWVudA== 30229\nIFVi 30230\nIFBlcHBlcg== 30231\n7KeA6rCA 30232\nIERhcndpbg== 30233\nIG1lcmNoYW5k 30234\nIHbDoXJpYXM= 30235\nw6hjZQ== 30236\nTkc= 30237\nIOychO2VtOyEnA== 30238\nINCw0LrRgtC40LI= 30239\nIFVudGVycw== 30240\n2LnZhA== 30241\nIGludHJpYw== 30242\nb21tYQ== 30243\naWV2aW5n 30244\nIENhcm9saW5l 30245\n5ZOB 30246\nIFBSRVM= 30247\nIHBlcmZvcm1lcg== 30248\nIGF1dG91cg== 30249\n44G+44Gb44KT 30250\nIHV0dGVybHk= 30251\nIHN5bnRoZXNpcw== 30252\nIGxlc2JpYW4= 30253\nIHJldHJpZXZl 30254\nIG1hbmVpcmE= 30255\nIGltcGFpcg== 30256\nIG1lbnRvcmluZw== 30257\nIFNvdWxz 30258\nIEdvUHJv 30259\n0YDQsNGC0Yw= 30260\nIGNvc2U= 30261\nIFNTRA== 30262\nSVJF 30263\nIHVwZnJvbnQ= 30264\nIEF1bg== 30265\nIGdhbWVy 30266\nIGxpdHQ= 30267\nIGFnZ3Jlc3Npb24= 30268\nIExpa2V3aXNl 30269\nIEJldHR5 30270\nIERhcnQ= 30271\nIERMQw== 30272\naXNobWVudA== 30273\n7J6l7J2E 30274\nIOWvuQ== 30275\n57uP 30276\nY3JlYW0= 30277\nIEJhYnlsb24= 30278\nIG51Zw== 30279\nYnJhcg== 30280\nIGF5bsSx 30281\nYW1pbHk= 30282\nYmlrZQ== 30283\nYWhhaGFoYQ== 30284\nbG95ZA== 30285\nIG1pcmE= 30286\nIHBlcm1l 30287\nIEdhbWluZw== 30288\nIGZpcm13YXJl 30289\nTWE= 30290\nIGFzc2lzdGVk 30291\nYXRpY3M= 30292\nIOyVnuycvOuhnA== 30293\nIE1lbnRhbA== 30294\nbmllanM= 30295\nIEl6 30296\nb3fEhQ== 30297\nIHRvdWdoZXI= 30298\nIGRlZWQ= 30299\n6Ium 30300\nIHN0eWxpc2g= 30301\nIFRvb2xz 30302\nIEhhbXA= 30303\nIHN1bnNjcmVlbg== 30304\nIGFydGljdWxhdGU= 30305\naXll 30306\n0LjRhA== 30307\nIFNwcmVhZA== 30308\nIEhBVkU= 30309\nIHN3aXJs 30310\nIHNwb25zb3Jpbmc= 30311\n5LuL 30312\naW92YXNjdWxhcg== 30313\nbWVzaQ== 30314\nIHJlbGF4YXRpb24= 30315\nINGB0LLQvtC40YU= 30316\nIG1hcmdpbnM= 30317\nIHNhxJ8= 30318\nIFByaWRl 30319\nIM+Ezr/Phc+C 30320\n0LjRhtC4 30321\nZW5jaQ== 30322\nRG9lcw== 30323\nIGNvcnBzZQ== 30324\nIGVuZHVyYW5jZQ== 30325\nIO2emA== 30326\n7Lm0 30327\nIGhhaXJjdXQ= 30328\nIGludGVycnVwdGVk 30329\nIHdpbmR5 30330\nIENhbGVi 30331\nz4HPhw== 30332\nIFBvdXJxdW9p 30333\nIGhvbGlzdGlj 30334\ndWNsZWFy 30335\nIFdob2xl 30336\n5aOr 30337\nQWN0 30338\nIGdhbGxvbg== 30339\nY2FkZQ== 30340\nIFJlZ2lvbmFs 30341\ncm9hZHM= 30342\nIFNjaG5l 30343\nw6FuZw== 30344\nINC40LfQvNC10L0= 30345\n44KI44Gt 30346\nIG1lbnVz 30347\nIHNwbGl0dGluZw== 30348\nIHByaWNlZA== 30349\nIM6T 30350\nIHVzZXJuYW1l 30351\nINCe0Yc= 30352\nIGNvbXByZXNzZWQ= 30353\neWlu 30354\nIGd1YXJkaWFu 30355\nIGdvb2Y= 30356\nIGNoZWNrbGlzdA== 30357\nIGludGVyY2hhbmdl 30358\nIGV4cGVkaXRpb24= 30359\nIGV4dGVybg== 30360\nIGluZnJhcmVk 30361\nZW5nbw== 30362\nIGRlbnlpbmc= 30363\nIHBhY2tldHM= 30364\nb25lbnQ= 30365\nQkI= 30366\nIEluY3Jl 30367\nIHNpbmk= 30368\nw59lcg== 30369\nw6hn 30370\nbWFhbA== 30371\nZ2VuZXJhdGlvbg== 30372\nIG1pbm9yaXRpZXM= 30373\nIGxsZXZhcg== 30374\nIG5vbWluYXRpb24= 30375\nIGNvbnNpZA== 30376\nINec16I= 30377\nbXXFnw== 30378\nIEVzYw== 30379\nIG51bWVyYXRvcg== 30380\nIGthaWs= 30381\nIGt0w7NyeWNo 30382\naWVzZW4= 30383\nIHbDqg== 30384\nIFVTUw== 30385\nIFByaXZhdGU= 30386\nINC+0LTQvdC+ 30387\nIGFsw6lt 30388\nw610dWxv 30389\nIGxpbWI= 30390\nIGZvcmdpdmVu 30391\nIGRpc2Nsb3N1cmU= 30392\nz4TOrw== 30393\nIG5pbmfDum4= 30394\nIHRoZXJhcGV1dGlj 30395\nIG5lZ290aWF0aW5n 30396\nIE5pa2U= 30397\nZW5zZWZ1bA== 30398\nIGluY2Fw 30399\nIGZsYWdzaGlw 30400\ndG93bg== 30401\n4og= 30402\nIM+Azr/Ouw== 30403\nIHdvbHZlcw== 30404\nIHZpb2xhdGlvbnM= 30405\nIEFybm9sZA== 30406\nIGludGVydmVuZQ== 30407\nIGhlYXRlcg== 30408\nIHJlY3Vyc29z 30409\nIG1haWQ= 30410\n6rK8 30411\nINC00LDQstCw0LnRgtC1 30412\nIENlbGVicg== 30413\nIGNhcGU= 30414\nIFN0eQ== 30415\nYWluZW4= 30416\nc2l0ZQ== 30417\nYmlq 30418\nINC/0L7Qu9GM0Lc= 30419\nIGZyYW1lZA== 30420\nIHB1Ymxpc2hlcnM= 30421\nINGH0YPRgtGM 30422\nIHRlbXB0YXRpb24= 30423\nIGNlcnRlemE= 30424\nIGV4ZW1wdA== 30425\n7Iq5 30426\nc2VsbGluZw== 30427\nIFRhc2s= 30428\naG9vbg== 30429\nIENvYw== 30430\nIFBhcmtz 30431\nIHJlcGV0aXRpb24= 30432\nINGC0YPQtNCw 30433\nIGVuc2w= 30434\nIGRlxJ9pxZ8= 30435\nIE9ybGFuZG8= 30436\nIE1haW50ZW4= 30437\n5q2i 30438\nb2N1bWVudA== 30439\nIEhD 30440\nIHNjb290ZXI= 30441\nINC90LDQv9C40YE= 30442\nIHRpZ2h0ZXI= 30443\nIHRlYXNl 30444\nIHJlbW92ZXM= 30445\nIGtpamtlbg== 30446\nINGB0YPRidC10YHRgtCy 30447\nIHRow6k= 30448\nINCy0YvQs9C70Y/QtA== 30449\nIHJlbGlldmU= 30450\nIG1pdMOk 30451\nIHN0YXRpb25hcnk= 30452\nw7ZmZg== 30453\ncGFibGU= 30454\nIGFydGVy 30455\nIGTDqWY= 30456\ncmF0aXZl 30457\nIGNvbmVjdA== 30458\nIHNhZGRsZQ== 30459\nIERpYW5l 30460\nIGNvbW1lbW9y 30461\nZmVuZGlt 30462\nU8Ot 30463\nIO2BtOs= 30464\nIG1hbmdl 30465\nYXR0ZQ== 30466\nIGFycm9nYW50 30467\nIHJvYm90aWM= 30468\nIGdpw6A= 30469\n5piv55qE 30470\nIG5laWdoYm91cmhvb2Q= 30471\naXNzb24= 30472\nINC00LLQuNC2 30473\nIFJJ 30474\nIE5vcm1hbg== 30475\nYnJhbmQ= 30476\nYW1hdGlvbg== 30477\nIHJhem9y 30478\nIG11cmRlcnM= 30479\nINGC0YM= 30480\nIHdzenlzdGtpbQ== 30481\nIHV0aWxpdGllcw== 30482\nIG1pY3Jvc2NvcA== 30483\n6r8= 30484\nIGRhcXVp 30485\nb2xsYXI= 30486\nINCU0LDQstCw0LnRgtC1 30487\nIGFubsOpZQ== 30488\nIGtpbG9tZXRyZXM= 30489\nIGhvbW9zZXh1YWw= 30490\nIGFyY2hpdGVjdHM= 30491\n44Gh44Gv 30492\nIG5peWU= 30493\nTEVS 30494\nIG1pY3JvcGhvbmVz 30495\nIFN0dW5kZW4= 30496\nIGNvbnNlY3V0aXZl 30497\naWVuZGE= 30498\ndsOkbmQ= 30499\nREVS 30500\nIGxpZnRz 30501\nIE1lYXQ= 30502\nIHNhdmV6 30503\n7ZaI642Y 30504\nTWVu 30505\nIGRpc21hbnQ= 30506\n6rGw66W8 30507\nIGluc3VsYXRpb24= 30508\nIHNjYWxs 30509\nIHNwb29reQ== 30510\nIHBhcmM= 30511\nIGJhbGxldA== 30512\nIFdoYXRzQXBw 30513\nIGZyYW5j 30514\nIGRlbGliZXJhdGU= 30515\nIO2FjA== 30516\nIG1hcnM= 30517\nIFp1cg== 30518\nUHI= 30519\nZGlzY2lwbGluYXJ5 30520\nIG9ic2Vzc2lvbg== 30521\n0LzQtQ== 30522\nIG1hcmNoaW5n 30523\nIEVtZXJnZW5jeQ== 30524\naWd1b3Vz 30525\nIHN6eQ== 30526\nIExhbmRz 30527\nIGJvYXJkaW5n 30528\nINC/0L7Rh9GC0Lg= 30529\nIGVudnk= 30530\nIGNvbXBhc3Npb25hdGU= 30531\nIG1lcmNp 30532\nIGRlc2lyYWJsZQ== 30533\nZGFsZQ== 30534\nIGNhbsSxbQ== 30535\nIEFudGFy 30536\ndGVtcHM= 30537\nIGNvbmZpZ3VyZWQ= 30538\nIENvbXBhcmVk 30539\nbmVo 30540\naWNhdGluZw== 30541\nIG5pY2tlbA== 30542\n2YjZgg== 30543\n2YPZiNmG 30544\nb3Blcw== 30545\nIGZvcm11bGFz 30546\nINCV0YHRgtGM 30547\nIHBvYmw= 30548\nIFBK 30549\nIEx1ZA== 30550\n5LuK5Zue 30551\nIEJyaWQ= 30552\nIEhvZw== 30553\nIEJyaXM= 30554\nSmVu 30555\nIHNoYWRpbmc= 30556\nIFlhcw== 30557\nIGRpc3R1cmJlZA== 30558\nIHJlY29tbWVuZGluZw== 30559\nIGPDqQ== 30560\nIEhPVw== 30561\n7JeI7Ja0 30562\nIHJldmVyc2Vk 30563\nIEludGVyZXN0aW5nbHk= 30564\naW94aWQ= 30565\n5YWt 30566\nIOyYpOy8gOydtA== 30567\n4bq/dQ== 30568\neHg= 30569\nIG91YWlz 30570\nIFlvdVR1YmVycw== 30571\nIFJvc2E= 30572\nIEhhdXB0 30573\namFkaQ== 30574\nIHZsb2dz 30575\nIGN1bHR1cmE= 30576\nIExlYWRlcnNoaXA= 30577\nIEhlcA== 30578\nIGlsbHVt 30579\ntOuPmQ== 30580\nIGN1c3RvbWl6ZWQ= 30581\nIG1hcmNh 30582\nIHF1YXRybw== 30583\nINC90LDQsw== 30584\nIFNwYWNlWA== 30585\nIEVpZ2Vu 30586\nYXN0aW5n 30587\nIG9sZHXEn3U= 30588\nIGZvcnRz 30589\n44GJ 30590\ncmltZW50 30591\naWVuY2lh 30592\nIHRlbmly 30593\ncm9mZmVu 30594\nIDE5Nzk= 30595\nIGNpZQ== 30596\nIOuQmOqzoA== 30597\nIGVzY3Jp 30598\nz4zPgg== 30599\n7Y+s 30600\ndXp6eQ== 30601\nQ29uZw== 30602\n7J247J20 30603\nR3JlYXQ= 30604\nc2ls 30605\nw6ljaA== 30606\n44Go44GL 30607\nIG11bHRpYw== 30608\nIERpc2s= 30609\nspU= 30610\nIGZhemxh 30611\nIGxldmFudA== 30612\nIGFiYWpv 30613\ndXJyeQ== 30614\nc3RydQ== 30615\nIOuoueuKlA== 30616\nIGFjY2Vzc29yeQ== 30617\nINC00LLQuNCz 30618\nIFJpZA== 30619\nMjAxOQ== 30620\nIGRvd25zdHJlYW0= 30621\n5pW4 30622\nIGtheg== 30623\ndXRhbg== 30624\nIGNoYXJjb2Fs 30625\nIGFmZWN0 30626\nd3U= 30627\nIGNvbnRleHRz 30628\nIGZlYXJlZA== 30629\nIOyEpA== 30630\nIGhpc3Rvcmllcw== 30631\nIGZhcw== 30632\nZW5zaWJsZQ== 30633\nIGNvY29h 30634\naWxsYXI= 30635\nZ2VvbnM= 30636\nIHNwaXJpdHVhbGl0eQ== 30637\nIFBldw== 30638\nIHBoYXJtYWN5 30639\nIHBhc3Npb25z 30640\nIGJvcw== 30641\nIGFsbMOh 30642\nIHRocml2aW5n 30643\nIFJlYWN0 30644\nIG9jY3VweQ== 30645\nIHdpdGhkcmF3YWw= 30646\nIGFsbG93YW5jZQ== 30647\nIEZyYWt0aW9u 30648\nIGJ1ZGRpZXM= 30649\nIGlkbGU= 30650\nIGRpc3NvbHZlZA== 30651\nIHByZXZhbGVudA== 30652\nIG1pbGl0YXI= 30653\nIHNlbnNpbmc= 30654\nIHBvamF3 30655\nIGFuY29yYQ== 30656\nIGFidW5kYW50 30657\nIGhhaXJzdA== 30658\n44GC44KM 30659\nIHR3ZWU= 30660\nIG7DpGNoc3Rl 30661\nIE3DtmdsaWNoa2VpdA== 30662\nIGhvbw== 30663\ndWZmaWNpZW50 30664\nIGZhbnRhc3Q= 30665\nIGVkaWJsZQ== 30666\nIOuWqOyWtOw= 30667\n7JuD 30668\nIHZlaW4= 30669\ndWNjaQ== 30670\nIGRldm90aW9u 30671\nIGNvbmNlYWxlcg== 30672\naW5jb21l 30673\nIHJlY3ljbGVk 30674\nIOyKpO2DgA== 30675\nIHBvbnRvcw== 30676\nIGRlc3N1cw== 30677\nIHbDqXJpdA== 30678\nIHJlZmxlY3Rpb25z 30679\nIEFB 30680\nIHRha2Vhd2F5 30681\nYmFyZQ== 30682\nIENvbnRhY3Q= 30683\nZWls 30684\nIEhlYXI= 30685\nIG1pcmFj 30686\nIEdlcmlsaW0= 30687\nINGB0LDQvNGL0Lk= 30688\nIHZpdm8= 30689\nIGtpbG9ncmFtcw== 30690\nIENyaW0= 30691\nw7t0 30692\nNzg= 30693\nIHNpbmNlcmVseQ== 30694\ncmF6 30695\nIOuztQ== 30696\nIGFycml2 30697\nIGNvbmNlcHRpb24= 30698\nIFBlcnNpYW4= 30699\nIHNqw6Rs 30700\nIHN0YXJyaW5n 30701\nIOyVhOustA== 30702\nIEZvcmV2ZXI= 30703\n0LXRgdGC0Yw= 30704\nIHZlaWw= 30705\nIHN1YnRpdA== 30706\nb2RrYQ== 30707\nINC+0YLQvdC+0Yg= 30708\nIGNvb2tz 30709\n0LXQvdGP 30710\nS2F5 30711\nIG5pw7Fvcw== 30712\nIFBob25l 30713\nIHN0aXRjaGluZw== 30714\nIGZpbmdlcnByaW50 30715\n6aKY 30716\nzrvOrA== 30717\nIGRlZGljYXRl 30718\nIExvYg== 30719\nIGJsYWNrcw== 30720\nIEJsZQ== 30721\nYm91dA== 30722\nIMSRYW5n 30723\nIGVrcw== 30724\nIHNxdWFzaA== 30725\nIEvDvA== 30726\nb2Rp 30727\nIG7GsOG7m2M= 30728\nIHZveWFnZQ== 30729\nIHBsYXlmdWw= 30730\nINil2YTZiQ== 30731\nYW5pYw== 30732\nIGNvbmRlbW4= 30733\nIELDtnlsZQ== 30734\nIFBvbGl6ZQ== 30735\n44K/44O8 30736\nIGF5dWRh 30737\nIHBhbQ== 30738\n4LmE4Lib 30739\nIEthdGh5 30740\n0LXQtNC40L0= 30741\n0L3QvtCy0LA= 30742\nIGJyaWc= 30743\nZWdlcg== 30744\nIGVhZ2xl 30745\nIHZpc2lvbnM= 30746\nIO2VreyDgQ== 30747\nIHNoaXR0eQ== 30748\nIGhvdHQ= 30749\nIEJyaXR0 30750\ndXRvcnM= 30751\nRU5URQ== 30752\n5puy 30753\nIHBob24= 30754\nIEJpbmc= 30755\nINC/0L7QtNC00LXRgNC2 30756\nc3ByaW5n 30757\n5pav 30758\nZXR0ZW4= 30759\nIHBpbGdy 30760\nIGVkaXlvcg== 30761\n0LXQvdGC0Ys= 30762\nYWdnaW8= 30763\nIGp1bA== 30764\nIGNvbXByZW5k 30765\ndGVpbA== 30766\nINiy 30767\nIHBlcmZvcm1lcnM= 30768\nIGluZmFtb3Vz 30769\nIE1L 30770\n56o= 30771\n5rOB 30772\nb3RsZQ== 30773\nZWZm 30774\nIEhhc2g= 30775\nIGNvd2FyZA== 30776\nIEJSQQ== 30777\nIERE 30778\nIGNvbWlkYQ== 30779\nIHBsYXRh 30780\nIGZsYXA= 30781\nIE1laHI= 30782\ncmlidXRpb24= 30783\nIFllbWVu 30784\nIG15c3Rlcmllcw== 30785\nIMSweWk= 30786\nIHN0ZWxs 30787\nIGV5ZWxpbmVy 30788\nIGRlbGVz 30789\nIG5haWxlZA== 30790\nIGlsbG5lc3Nlcw== 30791\nIHN0YWNrcw== 30792\nIHRyYWJhamFy 30793\nZmxvd2Vy 30794\nY2l1 30795\nIGNydWRl 30796\nIHN1YnN0YW50aWFsbHk= 30797\nIGhvbWVt 30798\nIG5lcGhldw== 30799\nIHN0YW1wcw== 30800\nIGNhcmJz 30801\n0YzRgtC1 30802\nbW9vdGg= 30803\nIHR1bm5lbHM= 30804\nYWNpZQ== 30805\n5rOi 30806\nIFNlw7E= 30807\nIEhlcmE= 30808\nIOyVhOuLiOyXkOyalA== 30809\nIFd5b21pbmc= 30810\nIEhETUk= 30811\nIExpcw== 30812\ndWNpw7Nu 30813\nIHN0ZWVy 30814\n0L7Rjg== 30815\n0LjRgtCw 30816\nTlQ= 30817\nIOyWvOq1tA== 30818\nIHBhbG1z 30819\nIG5lb24= 30820\n0L7QstCw0L3QuNGP 30821\nIGZpbHRlcmluZw== 30822\nIGpvdWVy 30823\nIEjDtg== 30824\nINC90LXRgQ== 30825\n6rKg7Ja07JqU 30826\nIDgx 30827\nIHN0b3J5bGluZQ== 30828\nIHByemVw 30829\nIHRoYW5raW5n 30830\nIEJvZWluZw== 30831\nIHNvZnRseQ== 30832\namVt 30833\n0LDQu9GM0L3Ri9GF 30834\nIGZsYXNobGlnaHQ= 30835\nINC/0YM= 30836\nIFdPTUFO 30837\n4bqvYw== 30838\nw61jaA== 30839\nIGx1eHVyaW91cw== 30840\nIHfDvG4= 30841\nIGltcGFjdGZ1bA== 30842\nIGNvbnNvbg== 30843\ncmV1 30844\naXJyaW5n 30845\naWZ0ZXI= 30846\nIGNvbnN0aXR1ZW50cw== 30847\n6JC9 30848\nIDk0 30849\nIFRvdQ== 30850\nZ29t 30851\nIOyDneqwgeydhA== 30852\nIHN0ZXJlb3R5cGVz 30853\nIG1vxbxsaQ== 30854\n5YiG5Lqr 30855\ngqg= 30856\nIHBlbmNpbHM= 30857\nINGB0LvQvtC2 30858\nIGlocmVt 30859\nIEJlc2No 30860\nIEtvaA== 30861\nIEVudHNjaGVpZA== 30862\nIGxlaw== 30863\nIGbDtnJz 30864\nIHRvdGFsbWVudGU= 30865\nIGxpdmVseQ== 30866\nIGVudHJvcHk= 30867\nIGRpc2Nlcm4= 30868\nINCX0L3QsA== 30869\nIGRvdg== 30870\nIG15dGhvbG9neQ== 30871\n6KiY5b6X 30872\nYXBhbmVzZQ== 30873\nIGFwcHJveGltYXRl 30874\n0LDRgtC40LI= 30875\naWZpYWJsZQ== 30876\nIFNlbw== 30877\n5YCS 30878\ntOyLrO2eiA== 30879\nIOyYtw== 30880\nIHRlbXBvcmFs 30881\nIGlU 30882\nIGVzdGF0 30883\n0LrQuNC8 30884\nIHNwcmluaw== 30885\nIGdydW5k 30886\nIGluZmFudHJ5 30887\nIHNjaGFmZmVu 30888\n57SE 30889\nIGFuaw== 30890\ncmlhZ2Vz 30891\nIFllb24= 30892\nIE1vcm9j 30893\nIGludmFzaXZl 30894\ngZQ= 30895\nIHBhcmVudGluZw== 30896\nIFJpcw== 30897\naWJpbGU= 30898\nIG1vZHM= 30899\n5b2i 30900\nINC/0YDQvtCy0LXRgA== 30901\nIFRoaW5n 30902\nIFdoZXJldmVy 30903\nIGFja25vd2xlZGdpbmc= 30904\nIHBhd24= 30905\ndW1tZXI= 30906\nb3Ji 30907\nNjk= 30908\nIHJldHJvdXZl 30909\nIHJlbGllcw== 30910\nIEhpZ2h3YXk= 30911\nIGF3ZQ== 30912\n44Gn44GZ44GL 30913\naXRhaXJl 30914\nIGFwcGxpY2FudA== 30915\nIGFpc2xl 30916\nd29ybQ== 30917\nIHBheWxvYWQ= 30918\nIGNhcnJl 30919\nIEJhY2g= 30920\n5qC8 30921\nIOy5nOq1rOs= 30922\n0L3QuNC1 30923\nIGl0w61z 30924\nb25uYWlzZQ== 30925\nc29s 30926\n6I+v 30927\nYWxnaWE= 30928\nIHJvY2tpbmc= 30929\nIGJlc3Rlbg== 30930\ncml0ZXM= 30931\nXl4= 30932\n0LjQvdC+0Lk= 30933\nIGJhaXhv 30934\nIOq4sOyWtQ== 30935\n0L7RgtGA0Lg= 30936\nc2lt 30937\nIGluY2Fybg== 30938\n64uk7J2M 30939\nIGxpY2s= 30940\nc2lkZWQ= 30941\nIDcx 30942\nZm9yZGVy 30943\nIHJlc29uYW5jZQ== 30944\nIHRlZ2Vu 30945\nIG1ldGFwaA== 30946\nb3dzZXI= 30947\nINeQ16DXl9eg15U= 30948\nP+OAjQ== 30949\nIHNwaWVsZW4= 30950\nIHZvbGxleQ== 30951\nlOydtO2BrOyXhQ== 30952\nbG9va2Vk 30953\nIHNlbnRlbmNlZA== 30954\nIG11bHRpcGx5aW5n 30955\nIGlkZWFscw== 30956\nIHdhaHJzY2hlaW5saWNo 30957\nIGRlcG9zaXRz 30958\nYmlsaXI= 30959\nIGVmZmV0 30960\naWxsb24= 30961\niOunjA== 30962\nIHRlc3RpbW9u 30963\nIHphd3N6ZQ== 30964\nINC/0YDQvtGG0LXRgdGB 30965\nIExhdg== 30966\n5LiN6Yyv 30967\nIHRyYXZhaWxsZXI= 30968\nIGxhaXNzZQ== 30969\nIE1vdW50YWlucw== 30970\nINGA0L7QsQ== 30971\nIGV4YW1pbmVk 30972\naXR1cw== 30973\nV2Fz 30974\n0LvRiw== 30975\nIGF0dHJpYnV0ZWQ= 30976\nIOyKuQ== 30977\nIEJhcm9u 30978\nIGdlcA== 30979\nIGF0dGVudA== 30980\nIENvbGxlY3Rpb24= 30981\nIHRoZWF0 30982\nIENhaQ== 30983\nIHdlbGxz 30984\nIGh1bWFubw== 30985\n55eF 30986\nIEhhc3Q= 30987\nINGF0L7RgtGP 30988\nY3phcw== 30989\nIHBlcm1pdHM= 30990\nIGxlZ2c= 30991\nIGVwbw== 30992\nIEZlbg== 30993\nIHRoaQ== 30994\nIEZvaQ== 30995\nIMOpbGVjdA== 30996\nIDgz 30997\nIG92ZXJ0aA== 30998\nIOisneisnQ== 30999\nIHRlbmFudA== 31000\n6LK3 31001\nTmV4dA== 31002\nIHByYWlzZWQ= 31003\nc2VjdXJpdHk= 31004\nIEltcGFjdA== 31005\n5Li65LuA5LmI 31006\nIHZvdWNo 31007\nIG5lZ8Oz 31008\nIHVudmU= 31009\nIGNyaXRpY2l6ZQ== 31010\nIEtlbnlh 31011\nIHRhY3RpYw== 31012\nIGxvZ3I= 31013\nIHBvaXM= 31014\nIHBhcGE= 31015\nc3BlYWtz 31016\n8J+R 31017\naXNwZXJz 31018\nIHN1cnBsdXM= 31019\nIGNvbGRlcg== 31020\n5Y2X 31021\n5ZCs 31022\ncGxldHM= 31023\nIFZpZW5uYQ== 31024\nIExlYWQ= 31025\nIGFlcmlhbA== 31026\nIFRhaA== 31027\n0LXQvdGC0L7Qsg== 31028\nIEdyZWVrcw== 31029\nQ2Ft 31030\nIG3DoXhpbQ== 31031\nIGt1aW4= 31032\nY2hpbw== 31033\nIGRlbW9uc3RyYXRlcw== 31034\nYW5vcw== 31035\nIENlcnQ= 31036\nINGN0L0= 31037\nIGJsb2dz 31038\nIOyEnOyauA== 31039\nIGJlYW1z 31040\n0LjQutC+0LI= 31041\nIHByb21wdGVk 31042\nIGZyaWdodGVuaW5n 31043\nIFBvcnNjaGU= 31044\n44GI44Gm 31045\nbGFyxLFuxLE= 31046\nIGNoaWxsaW5n 31047\naXNwaGVyZQ== 31048\nIGZsYXNoaW5n 31049\nIEthcmQ= 31050\nYnJlYWQ= 31051\nIGV4aA== 31052\nIHR5Y2tlcg== 31053\nIGVjb2xvZ2ljYWw= 31054\nIE1hZQ== 31055\nINee15DXldeT 31056\nIOuCmOuPhA== 31057\n0LvQvtC9 31058\neXNz 31059\nIHBlcmd1bnQ= 31060\nIHByaXg= 31061\naXp6YXJk 31062\nIGNhbmNlcnM= 31063\nIDkx 31064\nc3VzcA== 31065\nIEl0ZW0= 31066\nxZ9h 31067\nIHBlc3Q= 31068\nIHRha8SF 31069\nIGx5bXBo 31070\nIFBhdHJp 31071\nZmlsbA== 31072\nIHJlY29ubmE= 31073\nIG9wdGltaXNt 31074\nIG1pbWlj 31075\nIOyynA== 31076\nIE1hZGFtZQ== 31077\nb2N5 31078\nbGluaW5n 31079\n5ZGK6Ki0 31080\nZXJtZQ== 31081\nIGZvbGRlcnM= 31082\nIGN6xYI= 31083\ndWNoYXI= 31084\nIGN1cnNv 31085\nIGJyZWFjaA== 31086\n0L3QuNGC0Yw= 31087\nIHBhbWnEmQ== 31088\nIGVsaWc= 31089\nIGF1dG9w 31090\nRmxvdw== 31091\nIHByb2dyYW1tZWQ= 31092\nIFByb2Nlc3M= 31093\nIGZpZ3Vy 31094\nIFNG 31095\nIEVsZXM= 31096\nIHByb2dyYW1tZXM= 31097\nIGRpenp5 31098\n7Iuc6rCE 31099\nINC70LjQsdC+ 31100\nIHNuaWZm 31101\nIFNlYmFzdGlhbg== 31102\nIEh5ZQ== 31103\nIDQwMDA= 31104\nIHBlcm1pdGU= 31105\n5qKd 31106\nINC30LDRiQ== 31107\nIGd1aXQ= 31108\nIERhaXM= 31109\nIGFjY29yZGFuY2U= 31110\nIG1vZHVsYXI= 31111\nb2dlbmVvdXM= 31112\n5ouN 31113\nIHBvdXF1aW5obw== 31114\nIGFydGlsbGVyeQ== 31115\nIGx1YnJpYw== 31116\nIHZvbGNhbg== 31117\nIE5I 31118\n8J+k 31119\nIGRlYW4= 31120\nUmg= 31121\nIG1pbmlzdHJl 31122\n5Z2Q 31123\nIEludg== 31124\nIEJ1bGdhcg== 31125\nIERhdGVu 31126\n6I4= 31127\nSW0= 31128\nIG9yaWdpbmF0ZWQ= 31129\nIE5peG9u 31130\naW50ZWdy 31131\nIGxhY2tz 31132\nIE5hY2h0 31133\n7Ja064KY 31134\nY2FtZXJh 31135\nIHJhZGlzaA== 31136\na2l5ZQ== 31137\nIGFuZ2Vz 31138\nIHByw6lm 31139\nanVr 31140\nIEJlZQ== 31141\nIEJV 31142\nINCy0L7RgdC/ 31143\nIEJU 31144\nw6ptZXM= 31145\nIFN0w7xjaw== 31146\nIEluaw== 31147\n5oiW6ICF 31148\nIFNlcmdlYW50 31149\nIE11bHRpcA== 31150\nIGhpw6diaXI= 31151\nINCh0LDQvA== 31152\nIETDqQ== 31153\nb2xwaA== 31154\n7Ja4 31155\nIGltcGF0 31156\nIOyViuqzoA== 31157\nINGC0LDQutC+0LPQvg== 31158\nINC90LDQstC10YDQvdC+0LU= 31159\nIHVucHJlZGljdGFibGU= 31160\nIG1lbmQ= 31161\nIOyXhuyWtOyalA== 31162\nIGpha2llxZs= 31163\nIGFubmk= 31164\nIGRvbm7DqQ== 31165\nIEtpcnN0eQ== 31166\nIHJlY3Rhbmd1bGFy 31167\nIGVtcGV6YXI= 31168\nIEV4Y2hhbmdl 31169\n6rCU 31170\nIMOpY29ub20= 31171\n44GT44KT 31172\nZWxpbg== 31173\ncmVpYnQ= 31174\nINeU16Q= 31175\nIGNlbWV0ZXJ5 31176\nIGVzcGHDsW9s 31177\nb2xpbg== 31178\n0LvRjtC0 31179\nIGdyw6JjZQ== 31180\nYWxsZW4= 31181\nIFBoaWxvcw== 31182\nIEVyc3Q= 31183\nIOyDiA== 31184\nIFZpZA== 31185\nR2l2ZQ== 31186\nT0g= 31187\nzrzOvw== 31188\nIFBhcmU= 31189\nIG1ldGFib2xpc20= 31190\nIG1hcGxl 31191\nIGF4bGU= 31192\nIER5 31193\nIGtvbW1l 31194\nz47OvQ== 31195\nIGdyZWF0bmVzcw== 31196\nIHZlcmlmaWVk 31197\nIHNww6k= 31198\nIEZhaHJlbmhlaXQ= 31199\nIEJyZW4= 31200\nIENvbmZlZGVy 31201\nIGhpc3RvaXJl 31202\nIGVsaW1pbmF0aW5n 31203\nIEFkZGluZw== 31204\nIEFiaQ== 31205\n5p2O 31206\nIGhvc3BpdGFsaXR5 31207\ndGlt 31208\nIGJvbml0bw== 31209\nIHBhcnRlcw== 31210\nINC00YDRg9Cz0LjRhQ== 31211\nIFNoYXk= 31212\nIFNlZA== 31213\nIHJlZ3JldHM= 31214\n0Y/QvNC4 31215\nIHRlbmFudHM= 31216\n6YCf 31217\nIFBUUw== 31218\nIGRldmk= 31219\nIExhdGU= 31220\ndWV6 31221\nIHPDtnls 31222\n44K7 31223\nIOyerOuwjA== 31224\nIHRvZ2dsZQ== 31225\nIG1hc2tpbmc= 31226\n0LDQu9GM0L3QvtCz0L4= 31227\nIHBlcnPDtm4= 31228\nIGFtZXJpY2Fu 31229\nZmlr 31230\nIFJHQg== 31231\nZW5zb24= 31232\nIEtB 31233\nd3d3dw== 31234\nINGA0LXQsw== 31235\nbWV0aWNz 31236\nIGVkdWNhdG9y 31237\n44K344Or44Kv 31238\ncGFyaw== 31239\n0LXQu9GM0LfRjw== 31240\nYXJ1cw== 31241\n0YDQtdGC 31242\nIGZlaXRv 31243\nIGNob2ly 31244\nIGxhcmdv 31245\nIGVlbnM= 31246\nIHdhdHRz 31247\nIFNpbmdsZQ== 31248\nIHN1c2NlcHRpYmxl 31249\naWNlcg== 31250\nINCy0LrQu9GO0Yc= 31251\nIHB1cw== 31252\n7ZmY 31253\nRW5n 31254\nIGZhbnRhcw== 31255\nIHNwZWNpZmljYXRpb24= 31256\nIGNvbmZyb250ZWQ= 31257\nIENvbHVtYnVz 31258\n0LjQstC10YI= 31259\nYXLEsW0= 31260\nIGNhZmZlaW5l 31261\nbXVuaXRpb24= 31262\nIG1pZ3JhbnRz 31263\nbGlkZQ== 31264\naXRhdGlvbnM= 31265\nIEdlbWU= 31266\n4bqr 31267\nIHBsYW5uZXI= 31268\nIHN0aW11bGF0ZQ== 31269\nIGFwcm94aW0= 31270\nY2V1 31271\nIE5vbQ== 31272\nIHZvZw== 31273\nINGA0LDRgdGC 31274\nIGVuc2XDsQ== 31275\nIHNlbGxlcnM= 31276\nIGd1dGVu 31277\nemQ= 31278\nQ2Fs 31279\nIGRlc2NyaXB0 31280\nIHJlY29uY2lsaWF0aW9u 31281\nemluaG8= 31282\n4bmHYQ== 31283\n44GY44KD44GC 31284\nYWN5ag== 31285\nIENPTA== 31286\nc2F3 31287\nIO2ZleyduA== 31288\nIHZhcml0 31289\nIHBhcnRuZXJpbmc= 31290\nIGRldGVudGlvbg== 31291\nIGJvbWJpbmc= 31292\nY2xhcHBpbmc= 31293\naWVuY2llcw== 31294\nb25kdQ== 31295\nQU1F 31296\nIOqwmeyKteuLiOuLpA== 31297\nY8OtYQ== 31298\nINC/0L7RgdGC0L4= 31299\nIEFTTVI= 31300\nIGhvbWVwYWdl 31301\nIHNpw6g= 31302\nYW50aGE= 31303\nIFBvbGw= 31304\nIGlnZW4= 31305\nY3ljaA== 31306\nIOqwkeyekOq4sA== 31307\nIGNvbnNpZGVyYWJseQ== 31308\n5LuW55qE 31309\nIEFyaXN0 31310\nIHdpdGhzdGFuZA== 31311\nIHF1YWxpdGF0aXZl 31312\nIEtyYWZ0 31313\nINGN0LvQtdC60YI= 31314\nIEJlYWQ= 31315\n0LXQutGC0LjQsg== 31316\nIGNydXNoaW5n 31317\n7LOQ 31318\nIG5hdnk= 31319\n2Yjaug== 31320\nc2hv 31321\nIG9haw== 31322\naXBwZXJz 31323\nIHNvaWxz 31324\nIHBpZ21lbnQ= 31325\nIGV2aXRhcg== 31326\n44OH 31327\nIGZ1c2U= 31328\nIERhbGU= 31329\nOiI= 31330\nIGNvbXBsw6h0ZW1lbnQ= 31331\nIGtlbA== 31332\n4LmG 31333\nIHF1YXRyZQ== 31334\nIFVN 31335\nIOunkOs= 31336\n5qC5 31337\nw61y 31338\nIGxlaXN1cmU= 31339\nIEhvdXNpbmc= 31340\nIGZvbGRz 31341\nZXN0aW9u 31342\nQVJT 31343\nIG1hc2g= 31344\ndXJwb3Nl 31345\nIGFjY3VtdWxhdGVk 31346\nIFN0dWZm 31347\n6Kqe 31348\nIHRhcGVz 31349\nINGB0LjQu9GM0L3Qvg== 31350\nIExPVkU= 31351\nIDE5ODI= 31352\nIHNjYXJz 31353\nIGNhcGl0YWxpc3Q= 31354\nIE5lZA== 31355\nIHNvZnRlbg== 31356\nIG5vdGFibHk= 31357\nIGZvcmPDqW1lbnQ= 31358\nIFJhdW0= 31359\nINC90LXQvtCx0YXQvtC0 31360\nIHRyYWRlbWFyaw== 31361\nIGZlcnRpZw== 31362\nID8h 31363\n5peg 31364\nIHJlaW5mb3JjZWQ= 31365\nIHJlY2hhcmdl 31366\nIFB1dHRpbmc= 31367\nIHZpbGxhaW5z 31368\nIGhhbmRpYw== 31369\nIGFkdmVydGlzZW1lbnQ= 31370\n2KrZig== 31371\nINGB0YPQvA== 31372\nIFJpbGV5 31373\n15XXkdc= 31374\n5Lqs 31375\nT3M= 31376\n2KfYsg== 31377\nQm95 31378\nIHNxdWlzaA== 31379\nb2NrZXQ= 31380\nIHRlc3RpZnk= 31381\n5ryU 31382\nINec157X 31383\nINC80LDRgdGB 31384\nbWFudWVs 31385\nIEFya2Fuc2Fz 31386\naWZmZQ== 31387\nIGFuYWx5c3Rz 31388\nIERlYWY= 31389\nIGrDsw== 31390\nIGdyb2Nlcmllcw== 31391\nIFdoZWVs 31392\nINGA0LjRgQ== 31393\nIGPDsm4= 31394\nIENvYg== 31395\nIHByaXNvbnM= 31396\nw6h2ZQ== 31397\nIENhYmluZXQ= 31398\nIHBvc2Vk 31399\nIGd1ZXJyZQ== 31400\nIExsb3lk 31401\nIGNsZXJr 31402\nIGNyaXNlcw== 31403\nIFNobw== 31404\nIE9yZQ== 31405\nIEZvb3RiYWxs 31406\nIEFkdmlz 31407\nIFpoZW5n 31408\n6I0= 31409\nIEFNWQ== 31410\nIHVuZm9y 31411\nIG1vbmFzdGVy 31412\nIGNvbXBpbGU= 31413\nIGltbW9ydGFs 31414\nYXRhYmxl 31415\nIHBhcmFubw== 31416\nIHRpdmVy 31417\nIFN0ZXBo 31418\nIEZ1w58= 31419\nIGRpc2NvbnRpbg== 31420\nIHJpcGU= 31421\nIGhhY2tpbmc= 31422\nIHNpZW5kbw== 31423\nIHNlZ3Vybw== 31424\nYWx0cmVz 31425\nIGFuZGVyZXM= 31426\nIOumrOs= 31427\nIGV4cG9ydHM= 31428\n5q2l 31429\nIHRhYmlp 31430\nIOq4sOuLpOs= 31431\nIGJvdGhlcmluZw== 31432\nIHBpY2tsZQ== 31433\nIEJSSUFO 31434\nIGFsdGFy 31435\nINC/0YDQuNCx 31436\nIHRyYW5zZmVycmluZw== 31437\nIFZvcnM= 31438\nINmH2Yg= 31439\nIFph 31440\nIEZyYW5jZXM= 31441\nIGJyb3dzZQ== 31442\nZW1pdA== 31443\nIGNoZXdpbmc= 31444\nIEZyZWRkeQ== 31445\nIGVkaXRvcnM= 31446\nw6RsbGU= 31447\nIO2MgA== 31448\nIFNxdWU= 31449\nIEN1bHR1cmFs 31450\nYXdr 31451\nIFNhY2hl 31452\nIENhcmJvbg== 31453\n4bqvdA== 31454\nRkw= 31455\nIE5HTw== 31456\ncGXFgg== 31457\nIFNvdQ== 31458\nIGh2b3I= 31459\ndW5pbnRlbGxpZ2libGU= 31460\nIOuylQ== 31461\nIMKw 31462\naWlu 31463\nINei150= 31464\nIGRlcnJpw6hyZQ== 31465\nIGN6eW0= 31466\nIEFwb3N0 31467\nIHJlZ2FyZGVy 31468\nIGFncmFkZQ== 31469\nIENhbmR5 31470\nIG1hcmU= 31471\nIGludHJvZHVjZXM= 31472\nYmlyZHM= 31473\nIHVuaXF1ZWx5 31474\nIG11aw== 31475\nIGNvb2tlcg== 31476\nIGNyZXdz 31477\nIGplaXRv 31478\nRVJU 31479\ntoTr 31480\nbmlzc2U= 31481\nIGVm 31482\nIGNhcnRl 31483\nIFlhaw== 31484\nIFBBVA== 31485\n0LjQvdC+ 31486\nYm9ra2k= 31487\nIG1hdGVz 31488\nIGRpc3RpbnQ= 31489\nIOy9lOuhnOuCmA== 31490\nIHnEsWw= 31491\nIM66zqzOvQ== 31492\nIGNvbmZpZ3VyYXRpb25z 31493\nZW5nYQ== 31494\ncmVjaHQ= 31495\nSGFwcHk= 31496\n44KE44Gj44Gm 31497\naW52ZXN0 31498\nIHJlY29uc3RydWN0 31499\nINGN0YLQvtC80YM= 31500\nIG1vc3F1ZQ== 31501\ncmF1bQ== 31502\nIHZveWV6 31503\nIE5CQw== 31504\nIOyekOyLoA== 31505\nIHN0dXJkeQ== 31506\nINC60LDQvw== 31507\nIGFuc2No 31508\nYWxpZA== 31509\nIG1hc2lo 31510\nIFJFUA== 31511\nIOy9lOs= 31512\nIGRlZHVjdA== 31513\nIHNhbGly 31514\nd3VyZg== 31515\naWxvdA== 31516\nIE11dHRlcg== 31517\nb2xkcw== 31518\nIEZFTUE= 31519\nIEJpYg== 31520\nIG5laWdoYm9yaW5n 31521\nIGJsaXNz 31522\nIO2YvA== 31523\n0LvQuNGB0Yw= 31524\nINGC0YDQtdCx 31525\nIOWwseaYrw== 31526\nIGdyZW5hZGU= 31527\nIGVnYWw= 31528\nIGZpbmVseQ== 31529\nIHBldGFscw== 31530\nIGtlZXI= 31531\nIGNoeWJh 31532\nIHNraXBwaW5n 31533\nIHRoaXJ0ZWVu 31534\nIGdyYXZ5 31535\nIFNBVA== 31536\nNjE= 31537\nINC90L7Qsw== 31538\nIG1pbnM= 31539\nSVRF 31540\nIHNvemlhbA== 31541\n7ZWY66m07ISc 31542\ncnVrdHVy 31543\nINCy0L7Qt9C80L7Qtg== 31544\nINC+0L/Rj9GC0Yw= 31545\nIGFydGg= 31546\nIEN1YmFu 31547\nIHRyZWFzdXJlcw== 31548\nIGZlcnRpbGl6ZXI= 31549\nIGF3YWtlbmluZw== 31550\nIOuwseyLoA== 31551\nIHJhbGw= 31552\nIGRlcGljdA== 31553\nIFBhYmxv 31554\nIG5pbmV0ZWVu 31555\nIHdhdHQ= 31556\nIGVudGlyZXR5 31557\nS1M= 31558\nIFdvb2Rz 31559\nU2No 31560\nINqp2Yg= 31561\nIERyeQ== 31562\n44Ge 31563\ndXZl 31564\nIHJlY29uc3RydWN0aW9u 31565\nIGFuYXRvbXk= 31566\niOulvA== 31567\nIGJhYmE= 31568\nIGxpc3RlbmVy 31569\nIHNoYXJwZW4= 31570\nIFBlcnU= 31571\nINCy0YvQtw== 31572\nIHJlY3JlYXRpb24= 31573\nIGluaXRpYXRl 31574\nIGNhbG9y 31575\nIE5hag== 31576\nZ2Vl 31577\nIEZlZWxz 31578\nIFNuYXBjaGF0 31579\nIFRldA== 31580\nIE5lc3Q= 31581\nIERhZg== 31582\nIEZpbmlzaA== 31583\nINGC0LDQutC40Lw= 31584\nw7pj 31585\naXplbnM= 31586\nIHNwaW5z 31587\nIGVtYnJ5 31588\nIHBhc3NhZ2Vz 31589\nIGNpZW50 31590\nIGp1c3RpZmljYXRpb24= 31591\n5LuW6Kqq 31592\nIG9sbWF6 31593\nIGZsb29kZWQ= 31594\nIGVtb2pp 31595\nIGVtYnJhY2luZw== 31596\nIGRpc2NhcmQ= 31597\nIEJhc2lj 31598\nYWdvZw== 31599\nIOychO2VtA== 31600\nIGFzeWx1bQ== 31601\nZXJpbg== 31602\nIGZpbQ== 31603\nIG5pbmph 31604\nIGF1dG9tYXRl 31605\nIGFsbGVyZ2lj 31606\nw7/Dv8O/w78= 31607\nYW1hbQ== 31608\nINC80LDRgA== 31609\nIE9p 31610\nw6R1cw== 31611\nIGluZHVjdA== 31612\nIEJFTg== 31613\nIHrFgg== 31614\nIGthxbxkeQ== 31615\nIEFNUA== 31616\nbsSb 31617\nU3VyZQ== 31618\nIHF1aWw= 31619\nIGVzcGVj 31620\ncm9r 31621\nQlNDUkk= 31622\nIGxpZWJl 31623\ncHVz 31624\nYWNoc2Vu 31625\nIGNyaWNrZXQ= 31626\n64qQ 31627\nIEZyYW1l 31628\nZWtrw7xy 31629\nYXJi 31630\nIHDFmQ== 31631\n0LjRgdGB 31632\nIHplZ2dlbg== 31633\nIGRvdWJsZXM= 31634\nIERyZQ== 31635\ndGVzdA== 31636\naW5zcA== 31637\nYm95cw== 31638\nIG3Do28= 31639\nIFZlcnNl 31640\nIG11c2N1bGFy 31641\nIE1BTEU= 31642\nIGR1bHU= 31643\nIG9jY2FzaW9uYWw= 31644\nTG8= 31645\nY29ub21pYw== 31646\nIHZhaw== 31647\nIHJlbWVkeQ== 31648\n5aSg 31649\nIOKZquKZquKZqg== 31650\ndmVt 31651\nIMO2bmVt 31652\nIGthcsWfxLE= 31653\nIFNoYXJw 31654\naHVy 31655\nIOuwqeuylQ== 31656\nIGdyYW5kc29u 31657\nIGFrdGl2 31658\nIFRocm9uZXM= 31659\nIOyViOyXkA== 31660\nIHRvdHM= 31661\nIHN1YmQ= 31662\nIFBhdWxh 31663\nIGdyYXZlcw== 31664\nIEJyZW50 31665\nINC90LjQutGC0L4= 31666\nIHPDtno= 31667\nIGNyZWM= 31668\nIFZsYWRpbWly 31669\n55ar 31670\nINC/0L7QuQ== 31671\nICIt 31672\nIHBzeQ== 31673\nYXRyaQ== 31674\naWRhbg== 31675\nIGHDum4= 31676\nIHN0YW5kYXJkaXplZA== 31677\n7LmY6w== 31678\nINC60YDQvtCy 31679\nIFpodQ== 31680\nc29tZXRoaW5n 31681\nIDc1MA== 31682\nIG11amVyZXM= 31683\nIGFpdA== 31684\n6Ze0 31685\nYWd1 31686\nIGNvcnJlY3RlZA== 31687\naWtrYQ== 31688\nZWxlZA== 31689\nIENhcmVlcg== 31690\nb3d5bQ== 31691\nIHJvb21tYXRl 31692\nIGRlc2NlbmRhbnRz 31693\nIE5hcG9sZW9u 31694\nINCU0L4= 31695\n7ZaI7Ja07JqU 31696\nIGJ1bnVu 31697\nIE1pY2hh 31698\n57ea 31699\nIGRlc2NvYg== 31700\nUEk= 31701\nIHBhbGFicmE= 31702\nIHRyYWNrZWQ= 31703\nIGRlcGVuZGVuY2U= 31704\nIEJhcmFjaw== 31705\n5YGH 31706\nIGZlcnRpbGl0eQ== 31707\nIFNvdXRod2VzdA== 31708\nIGluY29tcGxldGU= 31709\nIGNvbXVuaWM= 31710\nIGNvbXByaXM= 31711\nIFJlc3RhdXI= 31712\nIGFjcm9u 31713\nzrrOsQ== 31714\nIGFwcHJlbnRpY2Vz 31715\nIG11c3N0 31716\nIEFicg== 31717\nIHBlbnRydQ== 31718\nIENvbnNvcnQ= 31719\nIEF2ZWM= 31720\nIGR1bXBsaW5ncw== 31721\nTFI= 31722\nIHdzenlzdGtpZQ== 31723\nIHN3YW1w 31724\n0L3QtdCy 31725\ndWdnbGU= 31726\nIHdhdGVyY29sb3I= 31727\nIHByb3Rvbg== 31728\nIEVzcGHDsWE= 31729\nb2NraW5n 31730\n0L7QstCw0Ls= 31731\nIHRha2lt 31732\nVmVyeQ== 31733\nIGRlbWVudGlh 31734\nIMWfZXlp 31735\nSmFj 31736\nIE1hY0Jvb2s= 31737\nIExpdg== 31738\nZmZpY2llbnRz 31739\nIEh1bnQ= 31740\nIG92ZXJsYXk= 31741\n5oSf6Ka6 31742\nIFNreXBl 31743\ncHVua3Q= 31744\nIGNvbmZpbmVk 31745\nIEFkcmlhbg== 31746\n2LHZgw== 31747\nIEplZXA= 31748\nIGVucXVhbnRv 31749\nIGFuZXN0 31750\n0L7RgtCy0LXRgg== 31751\nINC80LXQvdGM 31752\nIGlycmlnYXRpb24= 31753\n4buRbg== 31754\nIGVpZ2h0ZWVu 31755\nIFBvbg== 31756\nIHJlc2N1ZWQ= 31757\nIDE5ODM= 31758\ncsO8 31759\namFl 31760\nIEplb25n 31761\nIGFtYXppbmdseQ== 31762\nIEZEUA== 31763\nIGJhY2tzdGFnZQ== 31764\nY3Vl 31765\nIM+Dz4TOt869 31766\nINin2YTYtQ== 31767\nIGxpdmVzdG9jaw== 31768\nIFdhcm5lcg== 31769\nIG1ham9ycw== 31770\n44OB44Oj 31771\nIGNvb3BlcmF0aXZl 31772\nIEJyYWR5 31773\ncmFpbmVk 31774\ncmllYg== 31775\nINeR157X 31776\nINC00L7QstC+0LvRjNC90L4= 31777\nIEZF 31778\nIGxlYWtlZA== 31779\nIE1lcmN1cnk= 31780\nIHBlcnN1YWRl 31781\nIHRyYW5zZm9ybWVy 31782\nIE5vcndlZw== 31783\nIOyXrOufrA== 31784\nIHpyb2JpxIc= 31785\nIGNhcmRpb3Zhc2N1bGFy 31786\nIENyYXNo 31787\nIGdvc3NpcA== 31788\n0LDRgdGC0Yw= 31789\nIOyqvQ== 31790\nIHN3ZXB0 31791\nIEhvcm4= 31792\nIEF0w6k= 31793\nIGJ1a2Fu 31794\nIEthdw== 31795\nS1k= 31796\nIFN0b3JpZXM= 31797\nR2FyeQ== 31798\nIGdhcmRlbmluZw== 31799\nIFF1aWNrbHk= 31800\nIEZhbGNvbg== 31801\nIG92YXQ= 31802\nY8Sx 31803\nIENvbXBsZXQ= 31804\nIERhdGU= 31805\nINC/0YDQuNC8 31806\nIGzDpHVmdA== 31807\nIEF1ZHJleQ== 31808\nIFdlbnQ= 31809\nIHBlbMOtY3Vs 31810\nIGNhcnJpYWdl 31811\nIHVuYWNjZXB0YWJsZQ== 31812\nbnltaQ== 31813\nINGB0LvRi9GI 31814\nIHRlcnJl 31815\ndWVsbGVtZW50 31816\nRUVFRQ== 31817\nIHBoYXJtYWM= 31818\naMO1ZXM= 31819\nIHppY2g= 31820\nIG1pZ3JhdGU= 31821\nIEZyeQ== 31822\nw7FhbmE= 31823\nIE11aXRv 31824\nRU9WRVI= 31825\nIGZvcnRyZXNz 31826\nIENvbXBhbg== 31827\nIEpTT04= 31828\nb3JkbnVuZw== 31829\nIHdhcnRv 31830\nIHVuZ2Vm 31831\n7IWU7ISc 31832\nINGA0L7Qug== 31833\nIHBhZGRsZQ== 31834\nSmFyZWQ= 31835\nIHN1Ym1pdHRpbmc= 31836\nIGxhdGNo 31837\nIGZ1Zw== 31838\nINC60L7RgQ== 31839\nIEVm 31840\nIGxhdW5jaGVz 31841\nIGZ0 31842\nb3RlY2hu 31843\nIHRyYXZlbGxlZA== 31844\n2KfZgQ== 31845\n6YGV 31846\nIHByb2No 31847\nIGRlZGlt 31848\nODM= 31849\nIHJlYm91bmQ= 31850\nIExV 31851\ncGF0aA== 31852\nINGB0L/RgNCw0LI= 31853\nIMO2bA== 31854\nIO2CpA== 31855\nIHByaXZhdA== 31856\nIHRyYWN0b3I= 31857\nIEF0dGVudGlvbg== 31858\nU2Vy 31859\nIGNvc2Vz 31860\nw6FyaWE= 31861\ncGFs 31862\nIOydgA== 31863\nIHN1Y2Nlc3Nvcg== 31864\nIGNvbm5lY3RvcnM= 31865\nINGD0YHRgtCw0L3QvtCy 31866\nIGdlbm9jaWRl 31867\nIHN1ZmZpY2llbnRseQ== 31868\nIEFpeMOy 31869\nIHN0YWJpbGl6ZQ== 31870\nIGNvbmdlc3Q= 31871\nIGNhcnZpbmc= 31872\nIHpvc3Q= 31873\nINCx0YvRgdGC0YDQvg== 31874\nIHNob3J0ZXN0 31875\nIGxpdmVs 31876\nIDg5 31877\n6YGK 31878\nIGVyaw== 31879\nIHBvcnRyYWl0cw== 31880\n4KWA 31881\n6Jg= 31882\nYm9hdA== 31883\nbGxhaA== 31884\nQU5D 31885\nIGVtcGlyaWNhbA== 31886\nIEVjaG8= 31887\nIE5lZGVybGFuZA== 31888\n6L+Z5LmI 31889\nTmV0 31890\nIGN1aWRhZG8= 31891\nIFJvbWE= 31892\nIGNhbGY= 31893\nIGdpYW50cw== 31894\nIEV4cGxvcmVy 31895\nIENvbGxlY3Q= 31896\nYWxpdGlvbg== 31897\nIERlc3Rpbnk= 31898\nIGF1c2dl 31899\nIEVkdQ== 31900\nIENsbw== 31901\nIGVhcnJpbmdz 31902\nIFRyYWNr 31903\nIFJPUw== 31904\nIEJlbGxl 31905\n55m+ 31906\nIHB1ZWRh 31907\nIGRheXRpbWU= 31908\nIHN1cHBsaWVy 31909\nIFNW 31910\nIEV4aGFsZQ== 31911\nIGdhbGVyYQ== 31912\nY291cnNl 31913\nIGNlbnRpbWV0ZXI= 31914\nIEJhc3Q= 31915\nbXVk 31916\nIHNhbmdhdA== 31917\nIFBoeXNpY2Fs 31918\nIHByaXZhdGVseQ== 31919\nIHRyYXRh 31920\nbHlubg== 31921\naWxsaQ== 31922\nIOuplOydtO2BrOyXhQ== 31923\nIGNyeXN0YWxs 31924\nIHBvZHM= 31925\n4bqjbg== 31926\naW5hdG9y 31927\nIFJlY29yZHM= 31928\n5a6Y 31929\nxJ9pbWl6 31930\naXNzZW1lbnQ= 31931\naGFyZQ== 31932\naGFkb3c= 31933\nIERL 31934\nIOyVjOqzoA== 31935\nIHd5bg== 31936\nIHJlcXVlc3Rpbmc= 31937\nIERvbm5h 31938\nIOyXtOyLrO2eiA== 31939\naW5lYQ== 31940\nIGV4ZXJ0 31941\nIER1bmNhbg== 31942\nINCy0LXRhw== 31943\nIEhhaA== 31944\n4KSC 31945\nIExpZg== 31946\nIEZpbmRpbmc= 31947\nIE5vdg== 31948\nINC30L3QsNC6 31949\nINC+0YQ= 31950\nIFF1w6g= 31951\nIHF1YXJ0ZXJiYWNr 31952\nINGE0LDQug== 31953\nIGJpcGFydGlzYW4= 31954\nxJ9pbg== 31955\nIG7DqWNlc3M= 31956\nIHJlZmVyZW5kdW0= 31957\nIGNvbXBpbGVy 31958\nIHByb2JhYmls 31959\n0LXQtNC4 31960\nIHRyYWRlcg== 31961\n5piT 31962\nIFJ1bQ== 31963\nZ2VtZQ== 31964\nIGRpbw== 31965\nIGLEmWR6aWVteQ== 31966\nIM+Azqw= 31967\n6r64 31968\n15XXmA== 31969\nIOCklQ== 31970\nINCx0LvQsNCz 31971\nIHNjYWxw 31972\nIFBhdXNl 31973\nIGNhcHRpb24= 31974\nIGVuZGFuZ2Vy 31975\nIGVubGFy 31976\nIHJvdHRlbg== 31977\n44OD44OI 31978\nIHdhaA== 31979\n6IKJ 31980\nIGR6aQ== 31981\nIEluc3RhbGw= 31982\nQXk= 31983\nIGNyZWFy 31984\n0LXQvdGC0LA= 31985\nIHdlaWdoaW5n 31986\nIGJ1dHRlcmZsaWVz 31987\nIEdhc3Q= 31988\n5LqV 31989\naG9ybg== 31990\nd2Fyeg== 31991\nSUNFT1ZFUg== 31992\nINC90LDQudGC0Lg= 31993\nIGNvZWZmaWNpZW50cw== 31994\n57Ch5Zau 31995\nIFNwZW5jZXI= 31996\nIEhpZ2hlcg== 31997\nIGNvd29yaw== 31998\n5aiY 31999\nINC60L7RgtC+0YDQvtC1 32000\nIG1vbml0 32001\nIGR5c2Z1bmN0aW9u 32002\nINGB0YLQsNC90L7Qsg== 32003\nIHRvdXJuYW1lbnRz 32004\nIG95c3Rlcg== 32005\nQk4= 32006\nIHRydWQ= 32007\nc2xvdw== 32008\nIFBlbm55 32009\nIE9keXM= 32010\nw6Zy 32011\nIGZvdQ== 32012\nIGVuam95bWVudA== 32013\n0LDRgtGL 32014\nIHd5Z2zEhWRh 32015\n0LDQu9GM0L3QsNGP 32016\nIFByb3RlY3Q= 32017\nIG1veQ== 32018\nIGNsYXc= 32019\nIHN1c3BpY2lvbg== 32020\nIHNhY3JpZmljZWQ= 32021\nIGdvc3Rv 32022\nQmln 32023\nIGFnZ3Jlc3NpdmVseQ== 32024\nIHZvcm5l 32025\n44Og 32026\nIGJsYW1lZA== 32027\nIFNlaHI= 32028\n16TXqA== 32029\nY2l0bw== 32030\nIHNlYWxz 32031\nIG11amVy 32032\nIFdlaXJk 32033\nIGZvcmVucw== 32034\nIGNvbnRyaWJ1dGVz 32035\nZXN0cmE= 32036\nIHBvZw== 32037\nTE9M 32038\nIGhhY2VybG8= 32039\n0L7RgtGM 32040\nZmljdGlvbg== 32041\nNzk= 32042\nzrvOvw== 32043\n5aSn5qaC 32044\n5aOw 32045\nINGC0L7QsQ== 32046\nIEdT 32047\nIENsYXJh 32048\naXRleg== 32049\nIGFkdm9jYXRpbmc= 32050\nIO2UhOs= 32051\nc3VuZw== 32052\nIHZlcnRpY2Vz 32053\nIG5hdmlnYXRpbmc= 32054\nIGV1cm9ww6k= 32055\n55qG 32056\nIHNsb3dlZA== 32057\nIGZvcmVncm91bmQ= 32058\nIEluZHVzdHJpYWw= 32059\nIGFkb3Jl 32060\n7Iut 32061\nIGNyw6llcg== 32062\n5p6X 32063\nY2huaXR0 32064\nIHVuYXdhcmU= 32065\nIGN1cmx5 32066\nZW50YXI= 32067\nIGxlcg== 32068\nIHByb2hpYml0ZWQ= 32069\nIEhlcm9lcw== 32070\nIFJlZWQ= 32071\ndWNh 32072\nIHNtb2s= 32073\nIGt1bm5h 32074\nemVpdGln 32075\naW1tZW4= 32076\nIEx1bg== 32077\nINCw0LHRgdC+0LvRjtGC 32078\nIGRlZ2xp 32079\nIHZpbGxhZ2Vycw== 32080\nIHByZXNldA== 32081\nemVwdA== 32082\ndWRz 32083\nIGVtaXQ= 32084\n5L2g6KaB 32085\nIOuJ 32086\n64qU7KeA 32087\n0L3QsNC60L4= 32088\nIG9zw7Ni 32089\nIDE5Njk= 32090\nINCQ0YA= 32091\nIG1hbmNobWFs 32092\nIEJyb2Nr 32093\nIG1hbnRyYQ== 32094\nIFdJTA== 32095\nYmFjaA== 32096\naW7DpA== 32097\nZWxhcw== 32098\na2Vsbg== 32099\nIGRpc2NpcGxl 32100\nIHF1YWxj 32101\nIGRlaHlk 32102\n7J20652864qU 32103\nQWY= 32104\n7ISx7J20 32105\nUnlhbg== 32106\nIHB1cHBldA== 32107\nINC00YDRg9Cz0LjQtQ== 32108\nIHJ1ZA== 32109\nIHBlbmRpbmc= 32110\nUGx1cw== 32111\nIOyViuydhA== 32112\nIGLhu4s= 32113\nIFNlZ2E= 32114\nw6dl 32115\nIHByb2dyYW1tZXI= 32116\nYmxp 32117\nIHVubA== 32118\nIGVuc2xhdmVk 32119\nIHNvY2nDqXTDqQ== 32120\nxIFo 32121\nIGluaGVyaXRhbmNl 32122\nIEJhbmds 32123\nZXJtYWlk 32124\nIHByYWN0aXRpb25lcg== 32125\nIFN0YWxpbg== 32126\nIFVzZXI= 32127\nY2libGU= 32128\nIGNhcmRpYWM= 32129\nIEtvcmVhbnM= 32130\nIGR1bXBlZA== 32131\nINeU15nXlA== 32132\nw6Fpcw== 32133\nIGh5ZHJhdWxpYw== 32134\nb3VidGVkbHk= 32135\nIFBpdA== 32136\nIHBpY25pYw== 32137\nIGJlaMO2dmVy 32138\nINGB0LzQvtCz 32139\nIGJyYWtpbmc= 32140\n6buR 32141\ndXRhcg== 32142\nIOyEuOs= 32143\ndWJs 32144\nIMO8eg== 32145\nIG1hamVzdHk= 32146\nIGJlcnM= 32147\ndXRhYmxl 32148\nIGhvdHRlcg== 32149\n54Wn 32150\n24zZhg== 32151\nIGJpYXNlcw== 32152\nIHN1YmplY3RlZA== 32153\nIG5hdWdodHk= 32154\nIGNpcmN1cw== 32155\n44GX44GL 32156\nIEltbWVkaQ== 32157\nIFN0ZWZhbg== 32158\nIFRyaXBsZQ== 32159\nZW5r 32160\nIHdpdA== 32161\nIHJlY3ljbGU= 32162\nZW1pZQ== 32163\nZGF0ZWQ= 32164\nIHVubG9hZA== 32165\nIHBvcHVsYQ== 32166\nY2hpbg== 32167\nIHlpZWxkcw== 32168\nIGVuZ2xpc2g= 32169\nIEJvbm5pZQ== 32170\nIHNwaWRlcnM= 32171\nw4E= 32172\nIGVyb3Npb24= 32173\n6YOo5YiG 32174\nIE5JQ0s= 32175\n0LjRj9GF 32176\nIGltcGFydA== 32177\nINC60L3QuA== 32178\nIHJlc29sdXRpb25z 32179\nIGxpdGhpdW0= 32180\nIGNvbnZlcmdlbmNl 32181\nIFRhcmE= 32182\nINC00LLQtQ== 32183\ndGhz 32184\nIENpbmR5 32185\n5oiR6KaB 32186\n5bmr 32187\nIERJRQ== 32188\nIGFzc3VyYW5jZQ== 32189\nINC+0L/QuNGB 32190\nIGJ1Y2tldHM= 32191\nIGN1ZXM= 32192\nIFF1aWV0 32193\nIHNpbWlsYXJpdHk= 32194\nIGZvdW5kYXRpb25hbA== 32195\nIE1pbmlzdA== 32196\n5ru/ 32197\nIHBpYW4= 32198\nIGNlbnRy 32199\nIG51bWI= 32200\nIG1vbmtz 32201\ndWpvdXJk 32202\nZW56aWU= 32203\nIHNrYXRlYm9hcmQ= 32204\nIGRsYXRlZ28= 32205\nINGB0L7Rgg== 32206\nIEFF 32207\nIG1hc3RlcnBpZWNl 32208\nIFNvbG9tb24= 32209\nIFJlZGRpdA== 32210\nIHJpb3Q= 32211\nYWJs 32212\nIEpheno= 32213\nIGVsZWN0cm9tYWduZXRpYw== 32214\nIGluc2VjdXJl 32215\nIENvbXBldA== 32216\nZ2VyaWVz 32217\n0L7QsdC+0LQ= 32218\noNeV 32219\n8J+S 32220\nIHNlbmF0b3Jz 32221\nIEJyaXNiYW5l 32222\nIEFsYg== 32223\ndXR0ZXJpbmc= 32224\nIEFsbG93 32225\nemVybw== 32226\nIHBhaQ== 32227\nINCQ0LvQtdC60YE= 32228\nIERpc3BsYXk= 32229\nIEJsYWRl 32230\nIEFwcHM= 32231\nIHDDpA== 32232\nINC00LXRgdGP 32233\nIHF1ZWxsYQ== 32234\nIEdhbw== 32235\n0LXQvdC90YvRhQ== 32236\nIHNwb2lsZXJz 32237\nIGdhbGxvbnM= 32238\nINmE2Yo= 32239\nIFppb24= 32240\n5pyJ5LiA 32241\nb25pZQ== 32242\ncmFndA== 32243\nIENoYW5k 32244\nIOuzkQ== 32245\nIGJsdW50 32246\nIHVzdQ== 32247\nIEthZA== 32248\ncmFrdA== 32249\nIGNpbmVtYXRpYw== 32250\nIGFtbXVuaXRpb24= 32251\ncmVuZQ== 32252\nIGZvdXJ0ZWVu 32253\nIENhcm4= 32254\nY3JpdA== 32255\nIHRlbnVyZQ== 32256\ndnU= 32257\nIHByaW5jaXBhbG1lbnRl 32258\nIGFsbGVlbg== 32259\n6YCZ5LiA 32260\nIGtvbXBsZXR0 32261\nIGTDvG55 32262\nSmFtZXM= 32263\nIHJlY2VwdG9y 32264\nIG9uZXNlbGY= 32265\nZ3VydQ== 32266\nIG1lcmNoYW50 32267\nbGluZXNz 32268\nIG92ZXJsb29rZWQ= 32269\nIGhhcm1vbmlj 32270\n6ZW/ 32271\naWVzbw== 32272\n15XXng== 32273\nY29sbQ== 32274\nINC/0YDQvtC10LrRgg== 32275\nIEFkYQ== 32276\n2KfYsw== 32277\nVGlt 32278\nIHJlY3VycmluZw== 32279\nIHByb2NlZWRz 32280\nIFBhcnRpY3VsYXJseQ== 32281\nIERvd25sb2Fk 32282\nZXRyaWNhbA== 32283\nIG1hdHJpY2Vz 32284\nIHByb3llY3Rv 32285\nYW5jaWVz 32286\nIFVobQ== 32287\nIGNhdmVz 32288\nIOyWtOugpA== 32289\nIExlYWY= 32290\nINC+0LHRi9GH 32291\nIOydtOycoA== 32292\nRXVyb3Bl 32293\nIHTEhQ== 32294\nIHB1bHM= 32295\nIHRha2llZ28= 32296\n0J3QtQ== 32297\nR1U= 32298\nIGZvcnM= 32299\nz4HOsw== 32300\nIGZvdG9z 32301\nICkp 32302\nIOuppOs= 32303\nIGFxdWlsbw== 32304\nIEt1cmQ= 32305\n77iP 32306\ncHRpYw== 32307\nIERvcnQ= 32308\nIG1pc2VyeQ== 32309\nYXVzbw== 32310\n5Yqf 32311\nY2h1Y2tsaW5n 32312\nIFJpZGdl 32313\nIO2WiOyKteuLiOuLpA== 32314\nICoqKg== 32315\n5a6i 32316\nIEhtbW0= 32317\nIGdlb2dyYXBoaWM= 32318\nIGFueXM= 32319\nIHRhbHZleg== 32320\nIHNrZWxldA== 32321\nIHNpZ25hdHVyZXM= 32322\nIGxpdGVycw== 32323\nkOuptA== 32324\nINGB0LLQvtC10LPQvg== 32325\nIHNraWluZw== 32326\nINCc0L7RgQ== 32327\nIGFkb3B0aW5n 32328\nIGhhZnQ= 32329\nIHN5bW1ldHJpYw== 32330\nIExpcXU= 32331\nIHRoeXJvaWQ= 32332\nIG1pc2lu 32333\nbHVkZQ== 32334\nIGh1bGw= 32335\nIFhE 32336\nIEd1c3Q= 32337\nemVpY2g= 32338\nIHZpYnJhdGlvbnM= 32339\nIGVzZW1w 32340\nINCy0YHRjg== 32341\nIFF1ZW0= 32342\nIMO8YnJpZw== 32343\nIFNrZQ== 32344\nIEx5bmNo 32345\ncm9vbXM= 32346\nYXJ0ZXQ= 32347\nZmVzdA== 32348\nIGZyw7xoZXI= 32349\nIGx1cmU= 32350\n5LiN5aW95oSP5oCd 32351\nIOyVjOyVhA== 32352\nIFdJTg== 32353\nIFJZQU4= 32354\nINC60L7RgtC+0YDRg9GO 32355\nIEthc2g= 32356\nINeU154= 32357\nIHNhZmVn 32358\nIEhhbGxlbHVqYWg= 32359\nINC00LLRg9GF 32360\nIHN0YXBsZQ== 32361\nIHNlZGltZW50 32362\nIEFjdHM= 32363\nIGJsYW1pbmc= 32364\nIG1haW5sYW5k 32365\nIHNwb3J0aW5n 32366\nIGRlY29yYXRpb25z 32367\nIGV4ZWN1dGluZw== 32368\nIHBhcmFu 32369\nIERvbGxhcg== 32370\nIHByb2plY3Rpb25z 32371\nIGNvbW1pc3Npb25lZA== 32372\nIGJvdXI= 32373\nw7Zt 32374\nIHN0ZWFtZWQ= 32375\nIOutmA== 32376\nIHBldHJvbA== 32377\nIGNlbHVsYXI= 32378\n5bi2 32379\nIEh1bmdhcnk= 32380\nIHJlbnRlZA== 32381\nINCy0LDRgNC4 32382\nYmJpZQ== 32383\nIHPDqWN1cg== 32384\nw7xsbA== 32385\nIHN3aW5ncw== 32386\nYmV0d2Vlbg== 32387\nINC40YI= 32388\nZXN0cm8= 32389\nIG5pZW1hbmQ= 32390\nIOyCvA== 32391\nIFBhcmRvbg== 32392\nZXNzZXM= 32393\nIE1JRA== 32394\nIGNlbnRyYWxpemVk 32395\nIEFsaWVu 32396\nY3Vsb3M= 32397\nIGNyaXNl 32398\n6KOh6Z2i 32399\nIGNsYXNzZQ== 32400\nYmVpdGV0 32401\nacSfaQ== 32402\nIHdoYWxlcw== 32403\nIHBlcmltZXRlcg== 32404\nIHR5aW5n 32405\nIHN0cm9ueQ== 32406\nIGxpa2V3aXNl 32407\nIFB1bmNo 32408\nRGE= 32409\nIEJhcHRpc3Q= 32410\nIHNvcnRpbmc= 32411\nIGl2 32412\nIO2VqQ== 32413\nIHJlaGFi 32414\nIGV0YQ== 32415\ncml2ZXI= 32416\nIHNhaQ== 32417\n44GE44Gf44Gg 32418\nb2R1cw== 32419\n44GK6aGY44GE44GX44G+44GZ 32420\nIGVzc2F5ZXI= 32421\nIHR1cnRsZXM= 32422\nIEhhenJhdA== 32423\nIGZhYnJpY3M= 32424\nIGNhdml0eQ== 32425\nIHBvbmlld2HFvA== 32426\nIHNjaGxlY2h0 32427\nIHNhbHNh 32428\nxZ9la2vDvHI= 32429\nIHNlYXRpbmc= 32430\nIGVjb25vbWlzdHM= 32431\nIG1hbmc= 32432\nIHNlZ3VpbnRl 32433\nIHJhbmc= 32434\nIHJhdGlvcw== 32435\nIGNvbnN0ZWxs 32436\nIGxvbmd0ZW1wcw== 32437\ndWF0aW5n 32438\nIHNwb2lsZWQ= 32439\nIHJlY2lwaWVudHM= 32440\nIHNuaXBlcg== 32441\n5LmL5YmN 32442\n7Iq164uI6rmM 32443\nIHdw 32444\nIExJTktF 32445\nIGZsYXJl 32446\nIEFkcmk= 32447\nw7Fhcw== 32448\nIGJhY2ts 32449\nbcOkw58= 32450\nIEJlbmQ= 32451\nIHdvcmtsb2Fkcw== 32452\nINGB0YPQvw== 32453\nIDE5NzU= 32454\n0LjQvNGB0Y8= 32455\n0LDQvdC1 32456\nINC80L7QvQ== 32457\nIGFzcGlyYXRpb25z 32458\nIEFlcg== 32459\nINCz0L7QstC+0YDQuNGC0Yw= 32460\nIFFpYW4= 32461\n5aaI 32462\nIGNvbXByb21pc2Vk 32463\nIHlvbGs= 32464\n0LvQsNGB0YI= 32465\nIGhlbWVu 32466\ncm92ZQ== 32467\nZGVucw== 32468\nINC60L7QvNC80LXQvdGC 32469\nIC0tLQ== 32470\nIGZsdW9yZXM= 32471\n0L3QvtGB 32472\nIExpdmVycG9vbA== 32473\nINGB0L7QsdC+0Lk= 32474\nIFp3ZQ== 32475\nIGx1bWlu 32476\nIE9H 32477\n4bg= 32478\naG9sbQ== 32479\ncHJvZml0cw== 32480\nU04= 32481\nIHByb3BvcnRpb25z 32482\nIG1pY2E= 32483\nIEJvaA== 32484\nIEF0bGFz 32485\nIHVuc3VyZQ== 32486\nIHRvdXJpbmc= 32487\nIG5pZWQ= 32488\nIHTEmQ== 32489\nIGltcGVyYXRpdmU= 32490\nIGRlbWVr 32491\nIFNoZXJpZmY= 32492\ncmFuY2U= 32493\nIGhvbWVsYW5k 32494\nIEhhaWw= 32495\nIEdhbno= 32496\neW1t 32497\nTW9u 32498\n5Ya3 32499\ndmlkYQ== 32500\nIGRlc2Fycm9sbA== 32501\n5oqA 32502\nIGludHJpZ3Vpbmc= 32503\nIEh1Z28= 32504\nIOOCgg== 32505\n6aw= 32506\n0LDRhg== 32507\nIFdpxJlj 32508\nYXR0ZWQ= 32509\nIOyVhOuLiOqzoA== 32510\nIFZhcmk= 32511\nw6Fk 32512\nIHN1cnJlYWw= 32513\nIGRpc3Bhcml0aWVz 32514\nIG3Dsw== 32515\ndWxsZW4= 32516\nIOyeiOuLpOqzoA== 32517\nINC/0L7QttCw0LvRg9C50YHRgtCw 32518\nIG1haW5z 32519\nIGVqZWN0 32520\nIG1ldGhhbmU= 32521\nIG1hcmdpbmFsaXplZA== 32522\nIGNoaWxsaQ== 32523\ncsOocw== 32524\nIHllbQ== 32525\n5L2g5piv 32526\nIENodW4= 32527\nIGRlYnRz 32528\nIGRvd25sb2FkaW5n 32529\nIEF0aGVucw== 32530\naXNpZXJ1bmc= 32531\ncnlu 32532\nIHRla24= 32533\nIFF1aW5kaQ== 32534\n6ZyA 32535\nIHRhcmFm 32536\nIGjDqQ== 32537\nIGNvbnNjaW91c2x5 32538\nIGZpeGVz 32539\ndWNrbGU= 32540\nbWF5xLFu 32541\nIGZyZWk= 32542\nIHNwYQ== 32543\nIOynhO2WiQ== 32544\nINin2YTYsA== 32545\nINGD0Lo= 32546\nbGV0dA== 32547\nIG9sbXXFnw== 32548\nIGNoZWVzeQ== 32549\n4Liy4LiB 32550\nbmFpcmU= 32551\nIHdpZGVu 32552\nIGxpZW4= 32553\nIGVzY2FwaW5n 32554\naWdncw== 32555\nIEJsaWNr 32556\nY8SF 32557\nIOyEnOs= 32558\nINeU16E= 32559\nINCy0L/QtdGA 32560\nb3Bob25l 32561\naWVsbA== 32562\nIFNVQlNDUkk= 32563\nIGxpb25z 32564\nIOq3uOqygw== 32565\nIGluc3BpcmVz 32566\nIGd1YXJhbnRlZXM= 32567\nIGNvbWXDp2E= 32568\nIEdyb3dpbmc= 32569\nIG5lZ2xpZw== 32570\nIEZyYW5rZg== 32571\nIGdlZ2ViZW4= 32572\nIMSR4bqndQ== 32573\nIGVuZGxpY2g= 32574\nIOyNqA== 32575\nIFRU 32576\nIExpdGg= 32577\nz4DOsQ== 32578\nYXN0ZXJu 32579\nIEF6ZXI= 32580\nIGx1bmFy 32581\naGlj 32582\nINC90LDRgNC+0LQ= 32583\nIG5lbmh1bQ== 32584\n6LeR 32585\nIFNhbHZhZG9y 32586\nIFByb2dyZXNz 32587\nIHByaXZpbGVnZXM= 32588\nIOuPmeyViA== 32589\nIGFudGFnb24= 32590\nIEltcGY= 32591\nIGRlc2N1Yg== 32592\nIExlaQ== 32593\nIOyDiOuhnA== 32594\n0YfQtQ== 32595\nIGTDs2xhcmVz 32596\nIE1lZ2hhbg== 32597\nIFdpcmU= 32598\ndG9v 32599\nYXlpbmc= 32600\ndXNj 32601\nIHR1ZA== 32602\nIGFwcGVhbHM= 32603\nZWR1Yw== 32604\nIHBhbmU= 32605\nIGpp 32606\nIGRlY2tz 32607\nIEFsdGVy 32608\nIOWwsQ== 32609\n7ISk 32610\n5YiG6ZCY 32611\nIHByb2R1Y3Rpb25z 32612\nIFdJTExJQU0= 32613\nIGltcGxpZWQ= 32614\nIGZ1bGZpbGxtZW50 32615\nIEFhaA== 32616\nIHNhamE= 32617\neHVz 32618\nIM6azrHOuQ== 32619\nw6Bz 32620\ndWNjaA== 32621\n0L7QutC+ 32622\nIERpc2NvcmQ= 32623\nIFNZ 32624\nanNr 32625\nIFdhbGxhY2U= 32626\ndW5jdGlvbg== 32627\nRGFuaWVs 32628\nIGvDtnQ= 32629\naWphaA== 32630\nIG1hcmNoZQ== 32631\nIGRpc2dy 32632\nIG11bmdraW4= 32633\nIGFsbWE= 32634\ns7U= 32635\nIGV4dGVuc2l2ZWx5 32636\nIEZsb3Jlbg== 32637\nIEFsbGlzb24= 32638\n44Kx 32639\n2YrZhQ== 32640\nIGp1dmVu 32641\nIFJlbmFpc3NhbmNl 32642\nIGZ1bmRyYWlzaW5n 32643\nIENoYW9z 32644\nIHBhcmFseQ== 32645\nIG5hcnJhdG9y 32646\nIGVjb3N5c3RlbXM= 32647\nQXNo 32648\nIG1pdGlnYXRpb24= 32649\nIEF1am91cmQ= 32650\nIElkZWU= 32651\nISw= 32652\nIMK9 32653\nIGxhbmRsb3Jk 32654\nIGRlZmVjdHM= 32655\nIGFjcmU= 32656\ndWxzaXZl 32657\nIGFsZ2Fl 32658\ncGVr 32659\nIGVtYmE= 32660\nIFJvYw== 32661\n6Zui 32662\na3NvbQ== 32663\nw6RjaGU= 32664\nIGxldWs= 32665\nIGxldmVyYWdpbmc= 32666\nIOq3uOugh+yngA== 32667\nIFBhbG0= 32668\nIMOkdmVu 32669\nIGxpcw== 32670\nIEluc3A= 32671\nIFJpdGE= 32672\nIEFiYg== 32673\naXRobQ== 32674\nIHN1cGVydmlzaW9u 32675\nIHJldmlzaXQ= 32676\nIHBpxJk= 32677\nIGV1aA== 32678\nIGZhZGVz 32679\nIG1vdHRv 32680\n5Y2h 32681\n0LXQt9C2 32682\nIFNoaW0= 32683\nIHJlbGV2YW5jZQ== 32684\nIG9v 32685\nIG9zdGF0 32686\nbmljYQ== 32687\nIGNob2l4 32688\nIEZhY3VsdHk= 32689\nIOykkeyXkA== 32690\nIEFib3Zl 32691\nINC90LXQsdC+0LvRjNGI 32692\nIHNlcXVlbmNpbmc= 32693\nIG51dHJpZW50 32694\nIGNvbnF1ZXJlZA== 32695\nIGRpZ2VzdGl2ZQ== 32696\nIGJhY2tkcm9w 32697\nIExvcmk= 32698\nYWlsYWJsZQ== 32699\nR2FtZQ== 32700\nIG5lZ2xlY3RlZA== 32701\nb21vcnBo 32702\naWxsYWg= 32703\nIGtuZQ== 32704\nIHNpaXTDpA== 32705\nIHdvcmtzcGFjZQ== 32706\nIFZlbmljZQ== 32707\nIEtuZQ== 32708\n0YnQvg== 32709\nhYA= 32710\nIEhhc3M= 32711\nIHZpdGE= 32712\nnbzrqbQ= 32713\nIGxheXM= 32714\nw6puY2lhcw== 32715\nw6lyaWNh 32716\nIExs 32717\n5rGC 32718\nIENvY2E= 32719\nIFdIWQ== 32720\n6Iie 32721\nIHJvdXRpbmc= 32722\nIHBlcm1pc3Npb25z 32723\nIGRpbmdz 32724\ncHJlbmQ= 32725\ncHJvZ3JhbQ== 32726\nIGNyb2NvZA== 32727\nYnJhbA== 32728\nQUFBQUFBQUE= 32729\nYWdpdA== 32730\nIE7DpA== 32731\nIGdla29tbWVu 32732\nYXR0ZW4= 32733\nIHJlZmVyZW5jZWQ= 32734\nIHBhaXJpbmc= 32735\nIFBhcnRuZXI= 32736\nIENvcm9uYXZpcnVz 32737\n0ZbRgQ== 32738\n6L2J 32739\nINeU15M= 32740\nIGVzcGVjw61maWM= 32741\nYXJzaQ== 32742\ncXVlbGxl 32743\nIHNwb250YW5lb3Vz 32744\n54ax 32745\nIOqyg+ydhA== 32746\nINCf0L7RgdC70LU= 32747\nINin2YTYrw== 32748\nIFNob3V0 32749\nINC90LDQuw== 32750\nIGRpc2d1aXNl 32751\nIEpvcmQ= 32752\nIHdlZQ== 32753\nIG1pZWpzYw== 32754\nIHNlcnVt 32755\nIHBsYWlzaXI= 32756\nIGNyZWRpYmxl 32757\nIGLDpQ== 32758\nIEFK 32759\nbWFyZXM= 32760\nIHJvZHM= 32761\nIGVyYW4= 32762\n44G+44GC 32763\nIHDDpMOk 32764\nIFVB 32765\nIFVua25vd24= 32766\nINmE2YU= 32767\nIFJhYmJp 32768\nIGxhYXQ= 32769\nIGhhaXJzdHlsZQ== 32770\nINi6 32771\n6YGL 32772\nIGNhY2g= 32773\nIFdyaXRpbmc= 32774\n0L7Rh9C60Lg= 32775\nYWJhZA== 32776\nIHN0cmFpZ2h0ZW4= 32777\nLS0i 32778\nd2lmZQ== 32779\nIGhvdHRlc3Q= 32780\nIHB1bnlh 32781\nIEZhc2hpb24= 32782\nZ3JpZmY= 32783\nIFFS 32784\nb3RjaA== 32785\nINCc0L7QttC10YI= 32786\nQ2xvdWQ= 32787\nIFN0cmlrZQ== 32788\nIEhlaW4= 32789\nIOecn+eahA== 32790\nIGxlaQ== 32791\nIEZsb3c= 32792\nd2Vncw== 32793\nIGhhYnI= 32794\n5Ymb5Ymb 32795\nbmFobWU= 32796\nzIE= 32797\nIHBsZWFzaW5n 32798\nb3BwaW5n 32799\nIOq1rOuPhQ== 32800\nIGRyYW4= 32801\nIGJhbmdz 32802\nIDc5 32803\nIHNrZXQ= 32804\nIGNhdmFs 32805\nIE1hY3Jvbg== 32806\nIHdlaWdodGVk 32807\nIG11dGVk 32808\nIG51ZXN0cmFz 32809\nRUVQ 32810\nIG1hdGhlbWF0aWM= 32811\nIE1SSQ== 32812\nYWd1cw== 32813\nIHRoZXJhcGllcw== 32814\nzrjOtQ== 32815\nIHVucGw= 32816\nIGNvbW1lbmNlcg== 32817\nZnVsbA== 32818\nIHRvd2Vscw== 32819\nIHBydWU= 32820\nIGxpY2Vuc2Vz 32821\n15vXldec 32822\nINCf0L7Rh9C10LzRgw== 32823\nIHBvaW50bGVzcw== 32824\nQnll 32825\nIGVsaWdpYmlsaXR5 32826\nIHNjcmFwZQ== 32827\nIGFidXNpdmU= 32828\nIE1hbnQ= 32829\nIGpldW5lcw== 32830\ndGFs 32831\nIFByaW5jaXA= 32832\nIE9ydGhvZG94 32833\nIG1lbG9k 32834\nINC80LDRgtC10YDQuA== 32835\nIHByb3NlY3V0b3I= 32836\nIG9waW9pZA== 32837\nINGD0LLQtdGA 32838\nIEJlZW4= 32839\nIOygkeyihQ== 32840\nIGR5bmFzdHk= 32841\nIGFqdWRh 32842\nIGVudHJlZw== 32843\nIHdlaWdoZWQ= 32844\nIGV1cmU= 32845\nIEJlbQ== 32846\nIGFibm9ybWFs 32847\nODI= 32848\nIEpS 32849\nIEFrdA== 32850\nIEJyaQ== 32851\nw7p0 32852\nIHN0YWdu 32853\nISo= 32854\nIHdlZ2Vu 32855\nIGxlYWtpbmc= 32856\nIFdvcmRz 32857\nIE1hdQ== 32858\nIHZ1ZQ== 32859\nIExpYW0= 32860\n0LDQvdC40LXQvA== 32861\nIGNsaW5pY2lhbnM= 32862\nIFB1bXA= 32863\nIGbDtnJzdA== 32864\nPy4uLg== 32865\nIGF1dG9tb3RpdmU= 32866\nIE93ZW4= 32867\nenVzYWdlbg== 32868\nIEh1bmRyZWQ= 32869\nIGRlY2VudHJhbGl6ZWQ= 32870\nIGJ1bGJz 32871\nINec15s= 32872\nIHByb3ZpbmNlcw== 32873\nIE1pbGFu 32874\nODE= 32875\na2Fz 32876\nIOuTow== 32877\nIGZvcsOnYQ== 32878\nIHJpZ2h0bHk= 32879\n5bO2 32880\ncsSF 32881\nIHZlbnVlcw== 32882\nIHdhaQ== 32883\nIHByZWRpY3Rpbmc= 32884\nIFdpRmk= 32885\nIOq2geq4iA== 32886\n2LHZiA== 32887\nINeU15Y= 32888\nY2VudHVyeQ== 32889\nIGdyYWR1YWw= 32890\nIFByb2JsZW1l 32891\nIOyXhQ== 32892\nIGNvcGluZw== 32893\nIEJydXM= 32894\nIHBlYW51dHM= 32895\naXJ0c2NoYWZ0 32896\nINC30LDQuw== 32897\nIFRyb3k= 32898\nIHNwZXJt 32899\nIE1pdGFy 32900\nIFTDvHJraXll 32901\nZ3JhbmQ= 32902\npq0= 32903\nINee16E= 32904\nIHBhbnM= 32905\nIEtub3dsZWRnZQ== 32906\nYmVybHk= 32907\nINCV0LPQvg== 32908\nIGRhbmNlZA== 32909\nIEZyb3N0 32910\nIEJ1cmc= 32911\nIGJpdGluZw== 32912\n7KCV7J2E 32913\nbWVhbA== 32914\nIGhlcm9pYw== 32915\nIG1vdGhlcmJvYXJk 32916\nIExpY2h0 32917\n44Gj44E= 32918\nbGxhbg== 32919\n0LDQudC9 32920\nINGA0Y/QtA== 32921\nIOC5gOC4 32922\nb25lbg== 32923\naXJpZQ== 32924\nQXJ0 32925\ncmFuZw== 32926\nzr3Otw== 32927\nIG5ld2Jvcm4= 32928\nIGFtaXM= 32929\nINin2YjYsQ== 32930\nIHNvcGhvbQ== 32931\nIENhcmVmdWw= 32932\nIHByb3NwZWN0cw== 32933\nZW5zZW4= 32934\nIHRocmlsbA== 32935\nIFZp4buHdA== 32936\nQWRhbQ== 32937\ncml0aW9u 32938\nZW50cmlj 32939\ndWRlbg== 32940\nIGNlcnRpZmljYXRlcw== 32941\nIGFzaGVz 32942\n6Kq/ 32943\ncGxheWluZw== 32944\nIHNhZGVjZQ== 32945\nIG9zdA== 32946\nIGFpcnBsYW5lcw== 32947\n0YDQvtC6 32948\nb25lcg== 32949\nIG1hZ25lc2l1bQ== 32950\nIGdvZGRhbW4= 32951\nIDE5NzI= 32952\nIFNjaHVsZQ== 32953\nIHRlbWF0 32954\nIHBhcnRvdXQ= 32955\n4K+C 32956\nIGludmU= 32957\nIFNjaWVudGlzdHM= 32958\nIEh1ZHNvbg== 32959\nd2lubmluZw== 32960\nY2Vrc2lu 32961\nIGNvbmdyZXNzaW9uYWw= 32962\nb3J1 32963\nIHJvcGVz 32964\n0LLQtdC0 32965\nIG1hZHJl 32966\nIGZlcnJ5 32967\nIENvaGVu 32968\nIFByZWQ= 32969\nIHZhZ3k= 32970\nINCx0LXRgdC/ 32971\nIG11bHRpbQ== 32972\nIGRyYWluYWdl 32973\nIHNpbXVsYXRvcg== 32974\nZ2lnZ2xlcw== 32975\nIFN0YWRpdW0= 32976\n0L7QsdGJ 32977\nIG5vdGljZXM= 32978\nIGNyYXdsaW5n 32979\nIGdyb3VwZQ== 32980\n5Y+4 32981\nIGt0b8Wb 32982\nIFlvZ2E= 32983\nIG1lZGlkYQ== 32984\nINGF0LLQsNGC 32985\nIExpdGU= 32986\nIHJhdg== 32987\nb3JhbWE= 32988\nIGRpc2NvcmQ= 32989\nIERJUkU= 32990\nIHRlaA== 32991\nIE51cnM= 32992\n57KJ 32993\nIHBpdGNoZWQ= 32994\nIGJhcmtpbmc= 32995\nIENva2U= 32996\nd2lhZA== 32997\nIHBvcHVsYXRlZA== 32998\n6Zmk 32999\ncGVsbGVk 33000\nINCx0L7Qsw== 33001\nIHBld25v 33002\nIEN1YmU= 33003\nIHJlY3J1aXRlZA== 33004\n6YCZ56iu 33005\nIENhcmE= 33006\nxLHEn8SxbsSx 33007\naW1hdGVk 33008\nINGI0LrQvtC7 33009\naWNpb25hbA== 33010\nINC/0YDQvtGE 33011\nIGNvbnRhbWluYXRpb24= 33012\nIMO6bHRpbW9z 33013\nIGZlYXJmdWw= 33014\nIGVsZXBoYW50cw== 33015\ndXNp 33016\nIGlUdW5lcw== 33017\nIFN3YW1p 33018\n6rw= 33019\nIOyEpOuqhQ== 33020\nIFJpY2hhcmRz 33021\nIG1hZ25ldHM= 33022\nIFJpY2h0dW5n 33023\nIExlZ2lvbg== 33024\n6I+c 33025\nIGtpdHR5 33026\nIGtpc3NlZA== 33027\nIHdhdGVyaW5n 33028\nIGNvbm8= 33029\nIFBhbGVzdGluZQ== 33030\naWRpcg== 33031\nIG1hemU= 33032\nIGZsdWlkcw== 33033\nIFByb2R1Y2Vy 33034\nIEtyc25h 33035\n5aW95ZWm 33036\nbGFm 33037\nINeQ15U= 33038\nIG1pZXN6 33039\nIFhpbmc= 33040\nb2ludGVk 33041\nc2Vpbg== 33042\nIEZ1aw== 33043\nIERlcHJlc3Npb24= 33044\nIER1dHk= 33045\nIFBhbnRoZXI= 33046\nIHN1bmQ= 33047\nIHJlZmVyZQ== 33048\nIGV4Y2x1c2lvbg== 33049\nIG5hdmFs 33050\nIFdpbnN0b24= 33051\nIHNsb2dhbg== 33052\nIGh5cG90aGV0aWNhbA== 33053\nIGVsZXZhdGU= 33054\n66C5 33055\nIGNhYmXDp2E= 33056\nIEdlc3VuZA== 33057\nbWV0ZXI= 33058\nIOyVhOuLiOuptA== 33059\nIGNsb3VkeQ== 33060\n4oCmPw== 33061\nIFNjaHJpdHQ= 33062\nIEpT 33063\n7I0= 33064\nIFNwcmluZ3M= 33065\nIEJhdHRlcg== 33066\nt7A= 33067\nIHRhaWxvcg== 33068\nIFBUU0Q= 33069\nIEdlbnQ= 33070\nIGJhxJ8= 33071\nIHNwYXR1bGE= 33072\nIGNyYXk= 33073\nIExlZ2lzbA== 33074\nIHPDug== 33075\nIGxldmU= 33076\n4Liy4Lih 33077\nIGVyYWQ= 33078\nIGRvbmc= 33079\nIGRlcm0= 33080\nIEJhbmtz 33081\naWNobw== 33082\n5YWI55Sf 33083\nIEZyYW56 33084\ncmF2ZWw= 33085\n6YGU 33086\n0L7Qu9C+ 33087\nIGZsdXRl 33088\nIEVr 33089\nIGpveWZ1bA== 33090\nIGNoYXNlZA== 33091\nIExhcmdl 33092\nT3Zlcg== 33093\nIGVudHJlcHJlbmV1cmlhbA== 33094\nIGNvbnNpZGVycw== 33095\n0YPQtdC8 33096\nb3Bh 33097\nIGRvcm1pcg== 33098\nIEVsZW1lbnRhcnk= 33099\nIHByenlwYWQ= 33100\n0YPRgdC60LA= 33101\nINC+0YfQtdGA 33102\ndWdlbmU= 33103\nIHRlbmlkbw== 33104\nIGx1Z2FyZXM= 33105\n66U= 33106\nINGH0LDRgdGC 33107\nIHNhbw== 33108\nIGJyYWlk 33109\nIFZlcmU= 33110\nIFJlaWNo 33111\nIFBvc3M= 33112\nIGluYW4= 33113\nd2FuZA== 33114\ncmVm 33115\nIG1vbnRyZXI= 33116\nIDE5ODE= 33117\n55Wq 33118\nYXPEsW5kYQ== 33119\nIGNocm9tZQ== 33120\nIFRyaW5pdHk= 33121\nIGV4cGxvaXRhdGlvbg== 33122\nIFNlbnNl 33123\nIENNUw== 33124\nIE5vYmxl 33125\nIOyEoO2DnQ== 33126\nIHN3ZWxsaW5n 33127\nZWxlY3Ryb25pYw== 33128\nXT8= 33129\nIGJydXNoaW5n 33130\nIGxpcXVpZGl0eQ== 33131\nIEhvb2s= 33132\nIENvbm5vcg== 33133\nIEFsdW0= 33134\nIGd1Y2tlbg== 33135\nc3VpdGU= 33136\nIHdpZWxl 33137\nIGJhcnJlbHM= 33138\nIFJlZ2Vs 33139\nIE1lbnQ= 33140\nIFRyaXA= 33141\nIEJydXNo 33142\nIEVyaWs= 33143\ndXJhdGU= 33144\nyZly 33145\nIEN5cg== 33146\nb3VibGU= 33147\nIEJlY2Nh 33148\nIHBhc3N3b3Jkcw== 33149\nxbE= 33150\nYm9yZw== 33151\nIHZlbmRv 33152\nIENsYXVz 33153\nIEZheg== 33154\naW5kZXN0 33155\nIGRlY2Vhc2Vk 33156\nIGNvbXBhcmlzb25z 33157\nIExDRA== 33158\nIFBvcms= 33159\nIGV2ZW50dWFs 33160\nIHBhdHJlb24= 33161\nIGluYWJpbGl0eQ== 33162\nIGV4dGluY3Rpb24= 33163\nIOyii+yVhO2VmOuKlA== 33164\nINGB0L7RgQ== 33165\nYWp1 33166\nINeR15DX 33167\nIHNvZm9ydA== 33168\nIGRlc3RpbmVk 33169\nIFJpbg== 33170\nIG1vdXRocw== 33171\nIE5hdMO8cmxpY2g= 33172\nIHByZXNlcnZpbmc= 33173\nIGxpbXA= 33174\n6buo 33175\nb2N1c2Vk 33176\n0LjQvdCz 33177\nIGV4cG9zaW5n 33178\nIM6+ 33179\n640= 33180\nbGF1Z2g= 33181\nIGhpc3M= 33182\n44Gg44GL44KJ 33183\nIGluZGll 33184\nIGRldGFs 33185\n0YDQsNCy0YHRgtCy 33186\nIHRyw6pu 33187\n5pWw 33188\nIG9nbmk= 33189\nIHNpbXBsZW1lbnRl 33190\nIDE5Nzg= 33191\nIGdvbw== 33192\nIDE5Njc= 33193\nIGdlbnVn 33194\naMO2 33195\nIGhpc3TDsw== 33196\n5a6f 33197\nIGxvYnN0ZXI= 33198\nY2VuZG8= 33199\nIHRlaWw= 33200\nIGFsbGV2aQ== 33201\nMDAwMA== 33202\nT0xE 33203\nIHBlc29z 33204\nIGJvbnVzZXM= 33205\nIGFtaQ== 33206\nIHJldml2YWw= 33207\nIEhvcnNl 33208\nIHNhY2s= 33209\nVGFsaw== 33210\nIG11bGhlcg== 33211\nINC/0L7RgdGC0L7Rj9C9 33212\nIEhvb2Q= 33213\nSHVo 33214\nIOu2gQ== 33215\nIGh5dW5n 33216\nIE1lZXRpbmc= 33217\nIGltcG9ydGE= 33218\nIOywvuyVhA== 33219\nIFZlcm4= 33220\nIHN0cmlwcGVk 33221\nIHJlZnVzZXM= 33222\nIHF1YWxpZmljYXRpb25z 33223\nb3Bs 33224\ngOuPhA== 33225\naXjDrQ== 33226\nIGRpYWI= 33227\naXRpbWU= 33228\nZmxvd3M= 33229\nIGluYWM= 33230\nIEdvbmc= 33231\nIG1lYW5pbmdsZXNz 33232\nIGNvdXJhZ2VvdXM= 33233\nIG1pY3JvYmk= 33234\nYXp5 33235\naGlzdA== 33236\nIHZvbHVudGVlcmluZw== 33237\nVklF 33238\nIHZpb2xhdGVk 33239\nIHN5bXBhdGh5 33240\nIEVkaXQ= 33241\n5aW95YOP 33242\nZWxlY3RyaWM= 33243\ncHJvZHVjdA== 33244\nIHBhbmRlbWlh 33245\nIGdlb21ldHJpYw== 33246\nIENvbnZlcnM= 33247\nZ3Jl 33248\nIGdsdXQ= 33249\naXN0ZWQ= 33250\nINin2YTZgw== 33251\nIENoYWlu 33252\nIFByZXNlbnQ= 33253\nIFlpbg== 33254\nINGB0L7Qsw== 33255\nIFZsb2c= 33256\nIOyWtOuouA== 33257\nIGRvbm4= 33258\nIGhpdGNo 33259\ndWNraW5n 33260\n44GK44GE 33261\nd2FsZA== 33262\ncmlzaw== 33263\nIGhhcmk= 33264\nIEtlbnM= 33265\nIElkb2w= 33266\nINCy0L3QuNC80LDQvdC40LU= 33267\nIHRvZGQ= 33268\nIHNtYXNoZWQ= 33269\nIGludmFyaQ== 33270\nINC60L7QvdGC0YA= 33271\nIGF1dGlzdGlj 33272\n7J6l64uY 33273\nUmVz 33274\n0LTRiw== 33275\nY2hhdQ== 33276\nIHNlbHY= 33277\nIGjDpHR0ZW4= 33278\n4KS/ 33279\nIGV4cGVjdHM= 33280\nz4HOtw== 33281\nIGHDp8Sxaw== 33282\nIEhUVFA= 33283\nbGXFnw== 33284\nIHN3ZWVwaW5n 33285\nIEJldGE= 33286\nIGNvdW50ZXJwYXJ0cw== 33287\nYWJpbGU= 33288\nIFNpbXM= 33289\nQ3M= 33290\nIHJlcGFy 33291\nc3F1 33292\nIHByb3ZpbmNpYWw= 33293\nIHNoYXJlaG9sZGVycw== 33294\nIHJ1bnRlcg== 33295\nIGdlZGFjaHQ= 33296\nIFRlZW4= 33297\nIGdyYW5kcw== 33298\n55Si 33299\nYWdsZXM= 33300\nIHJvY2t5 33301\ndmVucw== 33302\nIHJpdmFscw== 33303\ndW5hbA== 33304\nIHJlYWN0cw== 33305\n66k= 33306\nIG1lcmN1cnk= 33307\nIEx1aWdp 33308\nINC+0LM= 33309\nIEpVU1Q= 33310\nIGxvZA== 33311\nIGNvcnRleA== 33312\nd2ln 33313\nIGxha2g= 33314\n7KSR7JeQ 33315\nIFZpYw== 33316\nIE11bmQ= 33317\nIG1hcHBlZA== 33318\nIERlbGw= 33319\nIERydWNr 33320\nIGxpZmVz 33321\n0LDQu9GM0L3QvtC1 33322\naXZpZHVhbA== 33323\nYWTEsW0= 33324\nIGF0cmF2 33325\nIEZsdWc= 33326\nIEtsZWlu 33327\n6rGw7JW8 33328\n4Lir4LiZ 33329\nIGFwcGxp 33330\n4K6+Pw== 33331\nw7x5b3J1bQ== 33332\nINC40L3RgtC10YDQtdGB0L3Qvg== 33333\nIGRpc2luZmVjdA== 33334\nPi0= 33335\nIGNoYW1wYWduZQ== 33336\nIGtsYQ== 33337\nb3BlcnM= 33338\nVHJhbnM= 33339\nIERlc2VydA== 33340\nIGN1bHRpdmF0ZQ== 33341\nIEZ1Y2tpbmc= 33342\naWRlbGl0eQ== 33343\nINGC0LDQvQ== 33344\nIGluY3Vi 33345\nIHRlbXU= 33346\nIGxlYXJuZXI= 33347\nZm91bmRlcg== 33348\nIFN5bA== 33349\n44KA 33350\nIGZhdG8= 33351\nemllcg== 33352\nIOyXhuydtA== 33353\nIOyIqA== 33354\nIHBzeWNobw== 33355\nINGC0LXQu9C10YQ= 33356\nIHJlZ2FyZGU= 33357\nIHJlcHJlc2VudGF0aW9ucw== 33358\nIGxpdGlnYXRpb24= 33359\nIHNwYW5u 33360\ndWx0cw== 33361\nYmlvcg== 33362\n6KaL44Gm 33363\n5LiN5aSa 33364\nIFN1cnZleQ== 33365\nIExFRHM= 33366\nIHRyw6Q= 33367\nIGzDqm4= 33368\nIGFudGlveGlk 33369\n0LXRgNC+0Lw= 33370\nIGluZHVjdGlvbg== 33371\nIGZvb2xlZA== 33372\nw6R0emxpY2g= 33373\nINCz0L7QstC+0YDRj9GC 33374\nIEZhY3Q= 33375\ndW1iYWk= 33376\nIHdpZ2dsZQ== 33377\nTk9VTg== 33378\nIGTDqXZlbG9wcA== 33379\nIENsYXJv 33380\nIOy4 33381\n66w= 33382\n44Gq44KT44Gg 33383\nIGFjY3VtdWxhdGU= 33384\nIG1haW50YWlucw== 33385\n64Q= 33386\nIEZpZ2h0ZXI= 33387\n7Yag 33388\nIG1hdGlu 33389\nIGNvdXBvbg== 33390\nIHN0dW50 33391\nIGRlYnV0ZWQ= 33392\n5b6F44Gj44Gm 33393\nIHByYWc= 33394\n0LjQstCw0LXQvA== 33395\nNzM= 33396\nIGV4cHJlcw== 33397\nIOyYpOu5oA== 33398\nINC/0LXRgNGB0L7QvQ== 33399\nIGNhbGN1bHVz 33400\nIGFicnVwdA== 33401\nIEluc3BlY3Rvcg== 33402\nb3VydA== 33403\n5paZ 33404\nxbpuaWVq 33405\naW50ZW5zZQ== 33406\nQmE= 33407\nIGxvdW5nZQ== 33408\nIGFzdGhtYQ== 33409\nIEhpw6c= 33410\nqrs= 33411\nIGVkaXRvcmlhbA== 33412\nIHNlaXpl 33413\nIGvEsXI= 33414\nIG1vdXZl 33415\nIHRpZXJyYQ== 33416\nIHRlc3Rvc3Rlcm9uZQ== 33417\nIHJo 33418\nIEtpbmdzdG9u 33419\nRUxMRQ== 33420\nIFJlcHJlc2VudGF0aXZl 33421\nIDE5NzQ= 33422\nIGliYQ== 33423\nVHM= 33424\nIHNvcnRh 33425\nICg/KQ== 33426\nINiq2Yg= 33427\nIOuCtOugpA== 33428\nIGJla29tbXQ= 33429\nIHNwaXJpdHVhbGx5 33430\nIGRpc3RvcnRlZA== 33431\nTWFk 33432\nIHJlaW0= 33433\nw6FuaA== 33434\nIE90dG9tYW4= 33435\nIFJlbGln 33436\nIEVscw== 33437\nIHJldGFpbmVk 33438\nIExhdWdocw== 33439\n5oC7 33440\nIFNBUw== 33441\nINC60L7Qu9C40YfQtdGB0YLQstC+ 33442\n15XXqteo 33443\nIGlubm92YXRl 33444\nIGtvcms= 33445\nINGA0LDRgdGB0LrQsNC30YvQsg== 33446\nb25kZXJl 33447\naXZp 33448\nYXll 33449\nb3VudHk= 33450\nINC/0L7Qu9GD0YfQsNC10YLRgdGP 33451\nIGJ1bnM= 33452\n5YWr 33453\nIHnDvHpkZW4= 33454\nIHN1cmdlcmllcw== 33455\n2KPZhg== 33456\nIGJhbmtydXB0Y3k= 33457\nd2VsdA== 33458\nIHNpYW1v 33459\nIGRhcmtlc3Q= 33460\nIEhhbm4= 33461\nZ2dh 33462\nIGZvcm1hcw== 33463\nIERq 33464\nbmFtZWQ= 33465\nIHNoaWVsZHM= 33466\ndWVsbGVy 33467\nIEZldw== 33468\nIGxhY2U= 33469\nIGZ1cmlvdXM= 33470\nIFlV 33471\nIHNvY2lldGFs 33472\nIGp1ZGdlbWVudA== 33473\nIERvcw== 33474\nIGphYg== 33475\nbGF3cw== 33476\nIHJlaW52ZW50 33477\nIEthdGhlcmluZQ== 33478\nIENob2k= 33479\nYWRvd3M= 33480\nIHJhbnM= 33481\nb2Rlbg== 33482\nIE1pZHdlc3Q= 33483\nbsSxbg== 33484\nIGRlcG9ydA== 33485\nIERpcA== 33486\n57SF 33487\nIGF0ZW5jacOzbg== 33488\nIENvdXJ0bmV5 33489\naXZpZGFk 33490\nINqp24E= 33491\nIGVmZmljYWN5 33492\nIEJyb29rcw== 33493\nIHJlZmVycmFs 33494\nINC60L7QvdGG 33495\nIG1hbGljaW91cw== 33496\nIGtpcg== 33497\nIEdvZGRlc3M= 33498\nIGZ1bmt5 33499\nIGludGVyaW0= 33500\nIEvDtnJwZXI= 33501\nIOyWvOun 33502\na3Vy 33503\nINC60LvQuA== 33504\nIHRydWNz 33505\nZ2VzZXR6 33506\nIHp1Zw== 33507\nIEdsw7xjaw== 33508\nIE1pbnV0ZQ== 33509\nIHByZXN0aWdpb3Vz 33510\nIG5pZXo= 33511\nIGNvbmNlbnRyYXRpb25z 33512\n0LvQsNGB0YLQuA== 33513\nIFNpcw== 33514\nIFZpdGFtaW4= 33515\na292 33516\nIFBCUw== 33517\nINC90LXQtQ== 33518\nIHJldGFpbGVycw== 33519\nIGNvbnZlbnRpb25z 33520\nIFNhbWFudGhh 33521\nIHByb3VkbHk= 33522\nSm9yZGFu 33523\nIEpBU09O 33524\nYXRr 33525\nIHRyaXN0ZQ== 33526\nIHN0w6Ry 33527\nIHJlaXRlcmF0ZQ== 33528\nIHBvc3Rlcmlvcg== 33529\nIDE5NzM= 33530\nIFBpbmU= 33531\nIEp1bGlldA== 33532\nIHBlZGly 33533\na2ls 33534\nIG92ZXJsYXBwaW5n 33535\nIGV4Y2x1ZGU= 33536\nIGVjb27Ds20= 33537\nIGFjY2VwdHM= 33538\nIFN0ZXI= 33539\n5rG6 33540\nIOyatOuPmQ== 33541\nZXN0YWI= 33542\nIHR1Zw== 33543\nYXJn 33544\nIGxpdnJv 33545\n2KfYtQ== 33546\nIHNlYW1z 33547\nIGJ1cmF5YQ== 33548\nIGVsbG8= 33549\nIFRN 33550\nIFBhdw== 33551\nIEluZGV4 33552\nRXhj 33553\nIGluc3BpcmF0aW9uYWw= 33554\nIGR1bms= 33555\n6LCB 33556\nYWt0ZXI= 33557\nIGNvbmRpdGlvbmVy 33558\nIFNhbHV0 33559\nxYJlYw== 33560\nIOyJvQ== 33561\nINGD0LfQvdCw 33562\nIFJvbWVv 33563\nZnJ1aXQ= 33564\nIFlP 33565\nIGNo4buJ 33566\n0LHRgw== 33567\nYm9ucw== 33568\nIHJlcHJvZHVjdGl2ZQ== 33569\nIG9yYWRh 33570\nIO2aqA== 33571\nIHRlbnRhcg== 33572\nIG1hw7FhbmE= 33573\n44Ks 33574\nIHNvbHZlbnQ= 33575\nSmVzc2ljYQ== 33576\nIExlZ2Fs 33577\nIHR1YQ== 33578\nIHNpYw== 33579\nIEVR 33580\nYXVrZWU= 33581\n7Iuc64uk 33582\nIMWedQ== 33583\nIGFkaGVyZQ== 33584\nIFR1bA== 33585\nIOCuhg== 33586\nIHRleHRib29rcw== 33587\nIEZpZnRo 33588\nIGV4cGVyaQ== 33589\nIGNoaWM= 33590\nIGhlYXA= 33591\naW5lbHk= 33592\nYXRyYQ== 33593\nVHdv 33594\nIGhlbGVtYWFs 33595\nIGZyZW4= 33596\n5o6o 33597\nIGJpc2hlcg== 33598\n2KfYtA== 33599\nIOyEoOyDnQ== 33600\nIFRhZ2Vz 33601\nIHPhu7E= 33602\nIGJ1bGxpZWQ= 33603\n2KQ= 33604\nIGJlbmVmaXRlZA== 33605\nIFByZXZpb3VzbHk= 33606\nINGN0YTRhA== 33607\n2Y0= 33608\nIHNlbmF0ZQ== 33609\nIE1vcm0= 33610\naWprZQ== 33611\nIEZsdQ== 33612\nIGluY29ycG9yYXRpbmc= 33613\namFjaw== 33614\nINC/0LjRgg== 33615\nIGltcGx5 33616\nIGhhY2tz 33617\nIFJJQ0g= 33618\nINC60LLQsNGA 33619\nINC/0YDQtdC60YDQsNGB 33620\nIGRlcGVuZGVuY3k= 33621\nIOyaqQ== 33622\nIOyxhQ== 33623\nIHfDpGhyZW5k 33624\nIHN1bGxh 33625\nIFBpdHRzYnVyZ2g= 33626\nIGVzZW1waW8= 33627\nvOuhnA== 33628\ncHJvdA== 33629\nIFJvc2Vu 33630\nIEluZGVwZW5kZW5jZQ== 33631\nIHBhcnNsZXk= 33632\naWVnZW4= 33633\nIGhhdw== 33634\nIGFxdWVsbA== 33635\nIENBUA== 33636\nINGA0LDQsdC+0YLQsNGC0Yw= 33637\nIENsaWZm 33638\naW9uYXI= 33639\nIHNlY3VyaW5n 33640\n5oiR5YCR55qE 33641\nzr3OtQ== 33642\nIHV0aWxpcw== 33643\nIGNvdWxl 33644\nIFBpbmc= 33645\nIHRyZWs= 33646\nIGZhaw== 33647\nIGVub3JtZQ== 33648\nIOyLqw== 33649\n6K6p 33650\nIGRvdWJsaW5n 33651\nINC90YDQsNCy0LjRgtGB0Y8= 33652\nIGhlZA== 33653\naG92ZW4= 33654\nIFN0YW5kaW5n 33655\nIG3DrW4= 33656\nIEppbWlu 33657\nIG1vbmFyY2g= 33658\nIGNva2U= 33659\nIG1y 33660\nIGNsaWM= 33661\nw40= 33662\nIGltcGVhY2htZW50 33663\nIGR1cmFiaWxpdHk= 33664\nIHZhcmlvcw== 33665\nIGNvbW1lcmNpYWxz 33666\nIGdyZWV0aW5ncw== 33667\nIFJp 33668\nIEFwcHJlY2k= 33669\n7J6I64qU 33670\nIHLDqXN1bHQ= 33671\nw6lydA== 33672\nIHNhbHV0ZQ== 33673\nIHBvZGVyaWE= 33674\nIHN1bnJpc2U= 33675\ndmVjaw== 33676\nIHJlbHVjdGFudA== 33677\nIGNvbW1pc3Npb25lcg== 33678\n5b+1 33679\nw6J0ZQ== 33680\nIEtlbm55 33681\nIFNpcmk= 33682\n44OD44OX 33683\nIOuKmA== 33684\nIEVF 33685\nIHVuY2g= 33686\n0LrQvtC9 33687\nINin2YTYpQ== 33688\nIGJlbHRz 33689\nIGhhc3M= 33690\nINC80L7Rjw== 33691\nIGRpc3BsYWNlZA== 33692\nIGFicmE= 33693\nzq3Ouw== 33694\nIHNjcmF0Y2hlcw== 33695\nIGNvbWV0 33696\nIGF1dGhvcml6YXRpb24= 33697\nIExMQw== 33698\nIHByb2R1aw== 33699\nIHJlaGFiaWxpdGF0aW9u 33700\n5Z4= 33701\n0ZbRhw== 33702\ndWRpbmc= 33703\nb2xpdA== 33704\nIDEwNQ== 33705\nIGV4cGFuZHM= 33706\nIGFsdHJp 33707\nIEtvbW1lbnQ= 33708\nIGFuZg== 33709\nUGw= 33710\nIE1hbmE= 33711\nZmVk 33712\nIGJyaQ== 33713\nIG9yYQ== 33714\nR3M= 33715\nIEd1cg== 33716\ndWNrbGFuZA== 33717\nIGp1bmN0aW9u 33718\nIGlyb25pYw== 33719\nIEZlZWQ= 33720\nIHByYWt0 33721\nIEhhbW1lcg== 33722\njOuPhA== 33723\nIFRyYWN5 33724\n57Wx 33725\nIEFzaWRl 33726\n0L3QtdCz0L4= 33727\nINC40YHQv9C+0LvRjNC30L7QstCw0YLRjA== 33728\nIHphag== 33729\nIGVxdWl0YWJsZQ== 33730\nIGN1cmI= 33731\nIOOBk+OCjA== 33732\nIGRlcml2YXRpdmVz 33733\nIHB1cHBpZXM= 33734\nIEtlbm5ldGg= 33735\nIENvbXBs 33736\naWdyYW0= 33737\nIEdhcmNpYQ== 33738\nKSI= 33739\nIEhhcmJvcg== 33740\nZXN0aWFs 33741\nIOS+hg== 33742\nIGVycw== 33743\n5rk= 33744\nIHVud2FudGVk 33745\nIGJlbGFuZw== 33746\n0LDQs9C+ 33747\nZW1i 33748\nZG9z 33749\nIOyZnOs= 33750\nIEJ1ZGdldA== 33751\nIGJhdHRsaW5n 33752\n2K3Yqg== 33753\na29r 33754\n0L3QsNGH0LDQu9Cw 33755\nIHBsYWc= 33756\nIGNhbnRpZGFk 33757\nIGdydXBvcw== 33758\nIHBsdWdpbnM= 33759\nbGVyaW5p 33760\nINC40LzQtdC10YI= 33761\nIHNvenVzYWdlbg== 33762\nb2xpY3M= 33763\nIHB1ZWJsbw== 33764\nIHJlbWluaXM= 33765\ncsOkbg== 33766\nIE1vcnJpc29u 33767\nIGxpbmhh 33768\nIGJyZWF0aHM= 33769\nIFRhc3Rl 33770\nIGVuZnJlbnQ= 33771\nIERvY2tlcg== 33772\nINC00LXQvQ== 33773\nIGV0aG5pY2l0eQ== 33774\nIHdvYg== 33775\nIHN1ZmZlcnM= 33776\nIHRyYW5zaXRpb25pbmc= 33777\nIFJhbmdl 33778\nxJlkenk= 33779\nINC60LDRgg== 33780\nIHN5bmVy 33781\nIGRvbnV0 33782\nIHByb2JhYmlsaXRpZXM= 33783\nIE9tYXI= 33784\nV2hpY2g= 33785\ndWlzaA== 33786\naXNpbg== 33787\nIGRlbW9z 33788\nIOyggOq4sA== 33789\nIOuYkeqwmQ== 33790\nINC10LTQuNC9 33791\nIGNlcnZl 33792\nIGpva2E= 33793\nSUFO 33794\nIGtpbG9tZXRlcg== 33795\nIGhvcml6b250YWxseQ== 33796\nIEJoYWc= 33797\nIC0+ 33798\nIE1vbml0b3I= 33799\nIGtub3dsZWRnZWFibGU= 33800\nIGZhdg== 33801\nIHBpbm5lZA== 33802\nIGVCYXk= 33803\naWNrZXI= 33804\nIOyeoOq5kOunjA== 33805\nIFhpYW9taQ== 33806\nIGNhcGl0 33807\nIG5w 33808\nIDE5NjU= 33809\naG9l 33810\nIG5vaw== 33811\nIFNhZ2U= 33812\nINC90LXQu9GM0LfRjw== 33813\nIFRvdw== 33814\nZ2Ft 33815\nIGRpY2Vu 33816\nIFNVQlNDUklCRQ== 33817\nIHJlYm9vdA== 33818\nIHBhag== 33819\nIOuztOyXrOs= 33820\nIHRoaWNrZW4= 33821\nIFJlYWxpdHk= 33822\naWTDpG4= 33823\nTmE= 33824\nIOqyg+ydgA== 33825\nISEp 33826\nIHJvdXRpbmVz 33827\nINC+0LTQvdC+0LPQvg== 33828\nIGV4dGluZw== 33829\nIOymnQ== 33830\nIHN1bGZ1cg== 33831\nIGNhcnZl 33832\nIGFzdGVyb2lk 33833\nIFdhcnJpb3I= 33834\nIHBob3RvZ3JhcGhlcnM= 33835\nIHBlbGw= 33836\nIGNyb3Nzb3Zlcg== 33837\n5oiR55+l6YGT 33838\nIGhhY2Vtb3M= 33839\nIE5lag== 33840\nIHNldHRsaW5n 33841\nIGlybQ== 33842\nIEJvb2tz 33843\naWVudMO0dA== 33844\nIGVzcGFjaW8= 33845\nIFNjaG9sYXJz 33846\nIGRvb21lZA== 33847\nIElSUw== 33848\nd29obA== 33849\nIHNlZ3Vl 33850\nIOuIhOqwgA== 33851\nIHByYXRpYw== 33852\nQlQ= 33853\nIENvbnNpZGVyaW5n 33854\nIEJ1ZmZhbG8= 33855\nIHRyYWluaW5ncw== 33856\nIGdlYnJ1 33857\nIEdsZWljaA== 33858\nIHBpcmF0ZXM= 33859\nIGVudmVsb3A= 33860\nIHJlb3Blbg== 33861\naW1hdA== 33862\nIHRlZQ== 33863\nIHN1ZWQ= 33864\nZmVo 33865\nINeU16c= 33866\nIGRpZXRz 33867\nIGp1bnRvcw== 33868\nYXN0bw== 33869\nIG1pc3VuZGVyc3Rvb2Q= 33870\nIHJ1aW0= 33871\nIGNsYXNzaWZ5 33872\nINC/0YDQvtC00YPQug== 33873\nIGluc2U= 33874\nIGlsbHVzdHJhdGVk 33875\nIGNvcnJvc2lvbg== 33876\nIGFjY3JlZA== 33877\nIEF1bnRpZQ== 33878\nINC/0YDQuNCy0LXRgg== 33879\nIExJVkU= 33880\nIHJlaw== 33881\nIHJlY2VpcHQ= 33882\n5Yiw5bqV 33883\nIEJhcmJpZQ== 33884\nIFNuYWtl 33885\ndHVybg== 33886\nSmVmZg== 33887\n44GK44GK 33888\nlYQ= 33889\nVk9JQ0VPVkVS 33890\nY29sbA== 33891\nIHJ1bm5lcnM= 33892\n7KCc6w== 33893\nb3Nvcw== 33894\nbW9vbg== 33895\nIGtleW5vdGU= 33896\nIEluc3RpdA== 33897\nU1BFQUs= 33898\nIHBsdWdz 33899\nIGN1cnY= 33900\nIFl1cmk= 33901\nIFRoZXJlcw== 33902\nIFBz 33903\nIM68z4DOvw== 33904\nIGNvbnZlcnRlcg== 33905\nIHJlZmluZQ== 33906\nIGJhZGFzcw== 33907\nIM6/zrk= 33908\nIHJlZ2Vu 33909\nYXp6aQ== 33910\n2YrZgQ== 33911\nIHNlaXplZA== 33912\nIGnDp2Vy 33913\naWxlZQ== 33914\nIHVwc3RyZWFt 33915\nIGJ1ZHM= 33916\nIHBpbQ== 33917\nIO2VmOujqA== 33918\nIGFsbHVkZWQ= 33919\nIHRoZW1lZA== 33920\nIGNvbnNpc3Rpbmc= 33921\nIGJvbnM= 33922\ndW51eg== 33923\nINC/0YDQvtCy0L7QtA== 33924\nIExvdmVseQ== 33925\n4KWL 33926\nIHBhcmFjaA== 33927\nIFN0YWF0cw== 33928\n6ZqK 33929\nIHNlbGVjdGl2ZQ== 33930\nIGZhc2U= 33931\nIEdlb3JnZXQ= 33932\nIGNvY2FpbmU= 33933\nIHJlcHJvZHVjdGlvbg== 33934\nIExhcmE= 33935\nIExE 33936\nIGdo 33937\nSm9u 33938\nIGzDpQ== 33939\nIOuRkOs= 33940\nIHR5cGVk 33941\nIEJhbmE= 33942\n65Oc6w== 33943\nIHNhdm9yeQ== 33944\nIFpvbWI= 33945\nc3RhbmRlbg== 33946\nIHBlZGVzdHJpYW4= 33947\nIGRpZmbDqXJlbnRz 33948\nIOyLuA== 33949\n6Imv 33950\nIGNvbXBsYWluZWQ= 33951\n56aP 33952\nINCa0YLQvg== 33953\nINec16Q= 33954\nYWxpxZtteQ== 33955\nIG1vcnRhcg== 33956\nIHZlcmRpY3Q= 33957\nIHN1ZmljaWVudGU= 33958\nIE1pbGxpb24= 33959\nbWl0dGVs 33960\naW5hbHM= 33961\nINin2YTYrg== 33962\n0LDRjtGB0Yw= 33963\nIG1pxJlkenk= 33964\nIE9sZQ== 33965\nIGludmVydA== 33966\nY3p5xIc= 33967\n0L7Qt9C80L7QttC90L4= 33968\nc3RhcnRlcg== 33969\nIGF1ZGl0b3I= 33970\nIFNjb3V0 33971\nY2hpZW4= 33972\nIFN2ZXJpZ2U= 33973\ndWZmbGVk 33974\nIHplaG4= 33975\nIEF1Y2tsYW5k 33976\nIGFyZ2VudA== 33977\nIDE5NzY= 33978\nIEhvZQ== 33979\nIGJvdGhlcnM= 33980\nIHNvY2lhbGlzdA== 33981\nIHBsaWVycw== 33982\nIGVtZXJnZW4= 33983\nIFhQ 33984\n0LXRgNC+0LI= 33985\nTW9yZQ== 33986\nIExldmk= 33987\nIEFuZGVycw== 33988\naWJpbGlkYWQ= 33989\nIFBhcmVudHM= 33990\nIGluZHVjZWQ= 33991\n7Ja07KQ= 33992\nIGJhbGFuY2Vz 33993\nINCy0YvRiA== 33994\nIHN1Ym1hcmluZQ== 33995\nU3RhcnQ= 33996\nIGRyaWVz 33997\nIHZvbHZlcg== 33998\nIHRpY2tpbmc= 33999\nY290dA== 34000\nIGZhag== 34001\ncHLDqXM= 34002\nIFNhYmI= 34003\nINC30LDRhw== 34004\nINC/0L7QutGD0L8= 34005\nIGJhcHRpemVk 34006\nIEJyaWxsaWFudA== 34007\nINCR0L7Qsw== 34008\nIG1vdHM= 34009\nYml0cw== 34010\nIGxhdHRpY2U= 34011\n5oiR6Lef5L2g 34012\nIGNvcmlhbmRlcg== 34013\nIHJlc2lkZW5jeQ== 34014\neW5j 34015\nIHBpZXJ3c3p5 34016\nIEtub2Nr 34017\nIFphcA== 34018\nINCV0LI= 34019\n6rKs 34020\n5bCP5b+D 34021\nIHVuZXZlbg== 34022\nIEphcw== 34023\nb2Rvcg== 34024\n57+S 34025\nNzQ= 34026\nIFNpdGU= 34027\nIGFjb250ZWNldQ== 34028\neW1wdA== 34029\nIHRyaWxvZ3k= 34030\nIGxhbnRlcm4= 34031\nIFp1Y2tlcg== 34032\ndmFyaQ== 34033\nd2VsbGluZw== 34034\nIFBvdGF0bw== 34035\nZ29tZXJ5 34036\nIHJlYWN0ZWQ= 34037\nIENocm9u 34038\nIGplZGU= 34039\nYmVlbGQ= 34040\nIHR3ZW50 34041\nIGxhY3Q= 34042\n5qiC 34043\nIHLDqXNl 34044\nIHJlbGVudA== 34045\nIGZ1cm5hY2U= 34046\nIHdpZGdldA== 34047\nIGVhcnRocXVha2Vz 34048\nIEFkanVzdA== 34049\naWxpdA== 34050\nINij2Yg= 34051\nIGhlYXJpbmdz 34052\nIGRlZmVuZGFudA== 34053\naXJzaW5peg== 34054\nIGJhc2s= 34055\nY2ph 34056\nnKg= 34057\nIHJpZmxlcw== 34058\nIGluc3RhbA== 34059\nIEZvcmdpdmU= 34060\ncGljYWw= 34061\nINCe0YfQtdC90Yw= 34062\nIHBldGl0ZXM= 34063\nIGhw 34064\nIHJlbm93bmVk 34065\nIElubg== 34066\nIOyjvOyEuOyalA== 34067\nIGVtcGhhc2l6ZWQ= 34068\n6Zeu6aKY 34069\nIOyeiOyjoA== 34070\nIOqyg+ycvOuhnA== 34071\n44KG 34072\nxZM= 34073\nZ2lsaQ== 34074\nRGF2ZQ== 34075\nIGV4aGF1c3Rpbmc= 34076\nxYJ1Zw== 34077\nIHNjaGVtYQ== 34078\nzrzOrA== 34079\nY3ljbA== 34080\nIGF1dGFudA== 34081\nIHBhcmNlbA== 34082\nIG1hdGVyaWE= 34083\nIEJlcnJ5 34084\nINGB0LDQvNC4 34085\nIGV4dHJhY3RlZA== 34086\nIFNheWluZw== 34087\naXNtYXRpYw== 34088\nINC/0L7Qv9GA0L7QsQ== 34089\nIG5ldXJvbg== 34090\nZ3JhcGg= 34091\nnOuptA== 34092\nIGVuY2xvc3VyZQ== 34093\nIEpvaGFubg== 34094\nIGFmdGVybWF0aA== 34095\n0YLQvtCx 34096\nIHXFvHk= 34097\nIHNhbXA= 34098\nMzYw 34099\nIE1laQ== 34100\nIHRhY28= 34101\nIHJlY2VwdG9ycw== 34102\nIHB1bmNoZXM= 34103\nIEhvamU= 34104\nINmH2YbYpw== 34105\nPSIj 34106\nIEFuZ3VsYXI= 34107\nIG11c2lxdWU= 34108\nIHJvbA== 34109\nIMOx 34110\nc3RlcnJlaWNo 34111\nIGNsYW0= 34112\nIFRyZWFzdXJ5 34113\nY2hlbWljYWw= 34114\nIGFwYXI= 34115\nIGFwcGVuZA== 34116\nIGZvcmJpZA== 34117\nIEhhbWJ1cmc= 34118\n0LDQutC+0LI= 34119\nIOq4iA== 34120\naWxkYQ== 34121\nIHByZXBhcmF0aW9ucw== 34122\nIG1vZ8SF 34123\nIGNhbWlubw== 34124\nRXJpYw== 34125\nIEJsaW5k 34126\n6IiH 34127\n5bm055qE 34128\nIERpc2NvdmVyeQ== 34129\n7Lig 34130\n54i2 34131\nIGludGVycHJldGVy 34132\nIGJyZWQ= 34133\nIFBzYWxt 34134\nIGRlZmVuZGVk 34135\n7Ims 34136\nIEVyZmFocg== 34137\nIFBlYWNo 34138\nIG1vb25z 34139\nIE9zdA== 34140\nIHNww6ljaWFs 34141\nIGFycml2ZXI= 34142\nIFdpcw== 34143\ndWNp 34144\nIHJvYm90aWNz 34145\nSVZF 34146\nIHNpZWdl 34147\nYXJsYQ== 34148\nIHNlcGFyYXRlcw== 34149\nIFRD 34150\n7Y+w 34151\ncXVpc2l0ZQ== 34152\nIHBhcmVudGhlc2Vz 34153\n0LjQutC1 34154\n56uZ 34155\nIHRyb3Vz 34156\n5bu6 34157\nINGB0LjQu9GM 34158\nIGJlZXJz 34159\nINC/0LvQsNGC 34160\n44GZ44GU44GE 34161\nIHNvbGE= 34162\nIGTDqHM= 34163\nbWluZ2hhbQ== 34164\naWt0ZQ== 34165\nIG9vcHM= 34166\nIHR3aXRjaA== 34167\n5bCH 34168\nz4g= 34169\nIFNob3VsZG4= 34170\ndXZyZQ== 34171\nIGxlZXI= 34172\nY3JpcHRpb25z 34173\nIGV5ZXNoYWRvdw== 34174\nIEd1bw== 34175\nIFBvd2VsbA== 34176\nIHN1cHVlc3Rv 34177\nIGFuYQ== 34178\ncmFscw== 34179\nIE1vbnRyZWFs 34180\nIHN1cmZpbmc= 34181\nINCf0LXRgNCy 34182\n157XlQ== 34183\nIG1pbGxpc2Vjb25kcw== 34184\nIHN1YnVyYnM= 34185\nIHBsYW5ldGE= 34186\n0YPRiNC60LA= 34187\naHJsaWNo 34188\nIEhZ 34189\nINiz25I= 34190\nIE1N 34191\nIEVmZg== 34192\n5Y+v5oSb 34193\nIEhT 34194\nYW5zb24= 34195\nIOyngeygkQ== 34196\nIHN1bw== 34197\nIGRlcGxveWluZw== 34198\nIGt1bnQ= 34199\ndGVyaW5n 34200\nIGVyZWN0 34201\n7J6l7J20 34202\nIOydjOyLnQ== 34203\nIHNwZWNpbWVu 34204\nIS4uLg== 34205\n5oiR6Kqq 34206\nIGxpZ25l 34207\nIGtvbnN0 34208\nYWRlcXU= 34209\nIOyDge2DnA== 34210\nIGFjY2Vzc2Vk 34211\nIFBvbGU= 34212\na2lsbA== 34213\nIOuyhOs= 34214\nIGF1dGhlbnRpY2l0eQ== 34215\nIGFwcGVsbGU= 34216\ndWxsZQ== 34217\nIHJldmlzaW9u 34218\nIGdvYXRz 34219\n0LPQu9C4 34220\nIHBhdQ== 34221\nIFJhbmdlcg== 34222\nIEltYWc= 34223\nYXV0aG9y 34224\nIGV2ZQ== 34225\nIE1lc3Nlbmdlcg== 34226\nIG5heQ== 34227\nIHdob2xlcw== 34228\nw6R0dGU= 34229\nIG9ud2FyZHM= 34230\nIERlcG9pcw== 34231\nIO2RnO2YhA== 34232\nIFNBUlM= 34233\nIHdzenlzdGtpY2g= 34234\nIGRlc3RydQ== 34235\ndW1iaW5n 34236\nIGNvbXBhdGliaWxpdHk= 34237\nIG1pc2luZm9ybWF0aW9u 34238\nb2RvcmU= 34239\nIEZhdm9y 34240\nZWtv 34241\nj4w= 34242\nd2F1a2Vl 34243\nIFRlYWNoaW5n 34244\nIEtP 34245\nIGJldHRpbmc= 34246\nIHF1ZXN0cw== 34247\nIHZpdnJl 34248\nINC80YPQt9GL 34249\nIHNhZ2E= 34250\nIHN3ZWxs 34251\nIGdlaGU= 34252\n5oCO6bq85qij 34253\nINC+0YDQs9Cw0L3QuNC3 34254\nIGdpZGU= 34255\nIEdyb3Nz 34256\nIGRhbGVq 34257\nIGNsYXdz 34258\n4buZYw== 34259\nIHByZWp1ZGljZQ== 34260\nIGluc2lnbg== 34261\naWhvb2Q= 34262\nIHBsZWQ= 34263\nIGTDs25kZQ== 34264\nIFBvbGl0aWNhbA== 34265\nIHByZW1pc2Vz 34266\ndW5kZXJ0 34267\n2LnYqg== 34268\nb25uZW4= 34269\nIGVzcGHDp28= 34270\nIGbDqQ== 34271\nIEhhcnJpc29u 34272\nIENlbnN1cw== 34273\nIGNhcmRpbw== 34274\nIGRpeQ== 34275\nIG1pbGlldQ== 34276\nIGpvdXJuw6ll 34277\nIFJlbGVhc2U= 34278\nTklF 34279\nIE11aw== 34280\naWTDqWU= 34281\n4buNaQ== 34282\nIGnDp2luZGU= 34283\nnpk= 34284\nIHJlc29uYXRl 34285\nIG1vbGVz 34286\nIEZseWluZw== 34287\nIEdsb3JpYQ== 34288\nIFBhc3Rvcg== 34289\nIEFyZW5h 34290\n5aW95LiN5aW9 34291\nTk9O 34292\n0L7Qu9C+0LI= 34293\nIGFsbMOt 34294\nb21hdA== 34295\n7Ja064+E 34296\nIGNhcmFjdGVyw61zdA== 34297\nIGRlY2xpbmluZw== 34298\n0ZbRjw== 34299\nYW5jbw== 34300\nIEluZm9ybQ== 34301\nIGJhcmdhaW4= 34302\nIGJ1c2hlcw== 34303\nIE5hdHVyYWxseQ== 34304\nIHJlY2h0cw== 34305\nIFRlbnNvcg== 34306\nIFBhdHJpY2lh 34307\nIHByaW5jaXBpbw== 34308\nIE11bWJhaQ== 34309\nIHdvbWI= 34310\nIG5vc3RyYQ== 34311\nIGRpbGVtbWE= 34312\nIGlyZ2VuZHdhbm4= 34313\nIDE5NjQ= 34314\nIGVuZXJnw61h 34315\nINC90LDRgA== 34316\nIHNlZ3JlZ2F0aW9u 34317\nIEF0aGxldA== 34318\nIMK7LA== 34319\nIHllbmk= 34320\nIFNlaXQ= 34321\nIHZlbm9t 34322\nIGRha2lrYQ== 34323\nIOuPjOs= 34324\nIMOJbA== 34325\nIGZ1cw== 34326\nIE1vZw== 34327\npr3ri4jri6Q= 34328\nIHJlbWFy 34329\nIFRlZGR5 34330\nIGJyZWFzdHM= 34331\naWNhbnM= 34332\n5pS255yL 34333\na2Fw 34334\nIGjGoW4= 34335\nIEpQ 34336\n44Oz44K/ 34337\nIHJlc3VycmVjdA== 34338\nIOyduOs= 34339\naGVyaWNhbA== 34340\nIGZvdG9ncmFm 34341\nIEpvc8Op 34342\nIGxpdmVsaWhvb2Q= 34343\nIGJpYmxp 34344\ndGVyaQ== 34345\nIHZvcnN0ZWxsZW4= 34346\nIEFBQQ== 34347\nIGFzc2Vzc2luZw== 34348\nWUE= 34349\nIHNwbGVuZA== 34350\nIGV4Y2F2 34351\nIGJhcHRpc20= 34352\neWxs 34353\nd293 34354\nTWFj 34355\nIHBsYXN0aWNz 34356\ndGVva2Jva2tp 34357\nIGludMOpcmVzc2FudA== 34358\nIGNvbW1hbmRlZA== 34359\nIGZhbW91c2x5 34360\nINCY0LvQuA== 34361\nIE1hbnVlbA== 34362\nIHNvdXRod2VzdA== 34363\nIGRlZm9ybWF0aW9u 34364\nw61jdWxv 34365\nINC90LDRhdC+0LTQuNGC0YHRjw== 34366\nIFBhdHRlcg== 34367\nZGVncmVl 34368\nIGN6xJlzdG8= 34369\nIi0= 34370\nIOyFiw== 34371\nIG1hbmdlcg== 34372\nIFRydXN0ZWU= 34373\ngOumrA== 34374\nIHB1bnRvcw== 34375\naXZhYmxl 34376\nIHZvbGF0aWxl 34377\nIOuKkA== 34378\nIGluc3RhYmlsaXR5 34379\nIGNpZWw= 34380\nY2nEhQ== 34381\nIHB1cml0eQ== 34382\n0L3QvtGB0YI= 34383\nU2ls 34384\nZWRhcg== 34385\n5Zmo 34386\nTk9VTkNFUg== 34387\nIHNwZWxsZWQ= 34388\nR0VS 34389\nIHNhbmN0dWFyeQ== 34390\nIGFjY2VsZXJhdGluZw== 34391\nIHNjb3V0 34392\nINC/0YDQtdCy 34393\nZmFocmVu 34394\n44GT44Gh44KJ 34395\nIOuCmOyYqA== 34396\nIHBvY3rEhXQ= 34397\nIE1ldQ== 34398\na2Fhcg== 34399\ns7Tqs6A= 34400\nYWtyYQ== 34401\nRG93bg== 34402\nIMOEcg== 34403\nIEVsaXRl 34404\nIGFsbG9ucw== 34405\nIG1heW9ubmFpc2U= 34406\nIFN1c3RhaW4= 34407\ncHJpc2luZ2x5 34408\nIHN1cGVydmlz 34409\nIOq3uOugh+yjoA== 34410\nIHVuZW1wbG95ZWQ= 34411\nIGZyZXNobHk= 34412\nINee16I= 34413\nIERo 34414\nIHRhY2tsaW5n 34415\nIG9ncg== 34416\nIOy0iOs= 34417\n44KI44KN 34418\nIGxvZnQ= 34419\nYXJhaA== 34420\nIEFpcmw= 34421\nIERpcg== 34422\nINCc0L7QttC90L4= 34423\nIGJvb2tpbmc= 34424\nIENSQQ== 34425\nIGh0dHBz 34426\nIGNob2tl 34427\nIGdvd24= 34428\nIG5vaXRl 34429\nIHphYw== 34430\naXN0b2w= 34431\nIHNlY3Jl 34432\nIHJlc2VtYmxlcw== 34433\nIGN1YWQ= 34434\n7IKs6rCA 34435\nc2hvdw== 34436\nIGJsYW5j 34437\nIGFndQ== 34438\nIFByaW50 34439\nYXN0ZWQ= 34440\nIFdlYXRoZXI= 34441\naXBs 34442\nIG9ic2N1cmU= 34443\nIGNvbnRl 34444\nb3VnaHM= 34445\nKTs= 34446\nIERhbWU= 34447\n5LiA55u0 34448\nIGNsYXJpZmljYXRpb24= 34449\nIGludGltYWN5 34450\nIHVwaG9sZA== 34451\nIE1pcnJvcg== 34452\nIHdhZ29u 34453\neGlkZQ== 34454\nIGNsb2c= 34455\nYXBwZXI= 34456\nIEltbWVkaWF0ZWx5 34457\nw7pkZQ== 34458\nIHRvdWNoZG93bg== 34459\nIHJvb2Z0 34460\n0LDRiNCw 34461\nIMOnxLFrdA== 34462\nIGxhaXNzZXI= 34463\nIFVucmVhbA== 34464\nZW5zaXRpdmU= 34465\nIDEyMw== 34466\nIHBsYXN0ZXI= 34467\nIGR1Y2tz 34468\nIGV0bWU= 34469\nIGJpc2hvcA== 34470\nYnJldmk= 34471\nIGJpYw== 34472\n5LiL5Y67 34473\nIHJ1bnRpbWU= 34474\nIGFtYml0aW9ucw== 34475\n0LzQsNGC 34476\nIFdlaW4= 34477\nIE1hcmk= 34478\nIO2KuOs= 34479\nIHJlc29sdmVy 34480\nIG5nw6B5 34481\nIFJpc2U= 34482\n44KI44GG44Gr 34483\nIENydXM= 34484\nIG1lcmNoYW5kaXNl 34485\nIGVsaQ== 34486\nIHN0YXRld2lkZQ== 34487\nIG93bA== 34488\n6YGg 34489\n5pS5 34490\nIHR3aXN0aW5n 34491\nIGNvbnRhbWluYXRlZA== 34492\nIENvbW1lcmNl 34493\naHl0aG0= 34494\nIMOI 34495\nIOyLpOs= 34496\nIG11c3N0ZQ== 34497\ndWly 34498\nIHN1bXM= 34499\nIFNvbWV3aGVyZQ== 34500\n44OO 34501\nIGthbWk= 34502\nIGFpcmVk 34503\nIEFORFJFVw== 34504\nIOq6 34505\nIHZpZW5kbw== 34506\nIGFudGlib2R5 34507\nIGFic29sdW1lbnQ= 34508\nIHByb3Rlc3RlcnM= 34509\nIFF1w6liZWM= 34510\nc3RhZHQ= 34511\nU2hhdW4= 34512\nIGNoYW1iZXJz 34513\nIFdlYXI= 34514\nIEVmZmVjdHM= 34515\nIGhhemFyZHM= 34516\nIG5laQ== 34517\nIGNvcmF6w7Nu 34518\nIOG8 34519\nIFNH 34520\nlKk= 34521\nIOyXreyLnA== 34522\nIGNvbWZ5 34523\nIENvZHk= 34524\nIHBlbnNhbmRv 34525\nIGdhbnNrYQ== 34526\nIEFjcm9zcw== 34527\nw7ZsbGln 34528\nYWJ5dGU= 34529\nIHdlZGdl 34530\nIGthbGlhbg== 34531\nIHNpZ3Vl 34532\nZW5kZXM= 34533\nIEdyb8Of 34534\nIHV0aWxpc2Vy 34535\nIGZsb3du 34536\n0LDQvdC40Y4= 34537\nIGxldmFy 34538\ncmVzdHJpYWw= 34539\nIGlsbHVzdHJhdGlvbnM= 34540\nIGFzbMSxbmRh 34541\nQkxFRVA= 34542\nINC00L7RgdGC 34543\nIHR1cnJldA== 34544\nIHN1aXRjYXNl 34545\nemnEmWtp 34546\nIHNrZXRjaGVz 34547\nIGFjcmVk 34548\nIFJlaQ== 34549\nIHRzdW4= 34550\nIFNhZw== 34551\nIHRoaXJkcw== 34552\nIEtJUkJZ 34553\ncmFp 34554\nIGh1bWFub3M= 34555\nIHJlY29tbWVuZHM= 34556\nIGV4dHJhb3JkaW5hcmlseQ== 34557\nIGNvbW1lbmNlbWVudA== 34558\nS04= 34559\nb3Bleg== 34560\nINeR16k= 34561\nIGxldGhhbA== 34562\nIEVzdGFtb3M= 34563\nIGluc3BlY3Rvcg== 34564\nIFNlb2s= 34565\nZXVu 34566\nIG9mZnNob3Jl 34567\nIGdldHRpbg== 34568\neWVhcnM= 34569\nIFNpbGVuY2U= 34570\nIE5hdHVy 34571\ndXB1bg== 34572\nIHRyenk= 34573\nIG5vZ2V0 34574\nIGhhbWJ1cmdlcg== 34575\nIFByYWlzZQ== 34576\nw6luZA== 34577\nIDE5NzE= 34578\neWxpZQ== 34579\na3JpdA== 34580\nIOyDneqwgeydtA== 34581\n55qu 34582\nIG1vbWVudG9z 34583\nIGVzdMOp 34584\nIGRpc3NlbWlu 34585\nIGdpZ3M= 34586\nIGRlc2Fm 34587\nIGF2aXM= 34588\nIFpvbw== 34589\nIOyViuydgA== 34590\naMOkbmc= 34591\n5Y+l 34592\naGFrZQ== 34593\nIEJpc20= 34594\nIHJldGhpbms= 34595\nIE1hbGNvbG0= 34596\nIGlkZW50aWZpZXM= 34597\nbG93ZXI= 34598\naXhlbA== 34599\nIHR2w6U= 34600\na2Vk 34601\naWVyeg== 34602\nIMO2ZmZlbnRsaWNo 34603\nIHByb2NsYWlt 34604\nc29vbg== 34605\nbG9s 34606\nIGxvaQ== 34607\nIGJpdHRlbg== 34608\ncm9sbG8= 34609\nIHNlcm1vbg== 34610\nIGVzcXU= 34611\nIGphY2tldHM= 34612\nIGdyw6FmaWM= 34613\nINC/0L7QutCw0LfRi9Cy 34614\nIGNhYmV6YQ== 34615\nY2hvZHpp 34616\nIHBlbHZpcw== 34617\nIG5vc3RhbGdpYQ== 34618\nIGJyZXc= 34619\nIHNob3J0Y3V0cw== 34620\nIEFkZW3DoXM= 34621\nIHN1cGVyZmljaWFs 34622\n5YWp5YCL 34623\nIGJvY2E= 34624\nIOaIkeaYrw== 34625\naW1lbnRvcw== 34626\n5Zug5Li6 34627\nIHNwcm91dHM= 34628\n6aOb 34629\nIEpvbmFz 34630\nIEZsb3JlbmNl 34631\nc3RhdGlj 34632\nZGF1Z2h0ZXI= 34633\nKik= 34634\nxYJieQ== 34635\nZmFzaGlvbg== 34636\nIEdpbmdlcg== 34637\nIOunpOs= 34638\nIGh1c3RsZQ== 34639\ndXRvcw== 34640\nINGC0Y/Qtg== 34641\nIEzDtnM= 34642\n16nXmded 34643\nYW55Y2g= 34644\ndHViZXI= 34645\nIHRpZHk= 34646\nIGZyb250YWw= 34647\nIHdoaXNrZXk= 34648\nIGh1bWlk 34649\nIM6f 34650\nIHJpZGdl 34651\nIG1hcmlu 34652\nIGJpZW50w7R0 34653\nIENhcnJpZQ== 34654\nY2h3 34655\nIHRhaHVu 34656\nIEVyZ2Vi 34657\nRlI= 34658\nIOygleu2gA== 34659\nIFNvbGRpZXI= 34660\nIGVubGlnaHRlbm1lbnQ= 34661\nIGV4YW1pbmluZw== 34662\nIE5vdHJl 34663\nIGVyYW0= 34664\nIFN1bm55 34665\nIGxheWVyZWQ= 34666\nIERhenU= 34667\ncmFkZXM= 34668\n5aW95ZCD 34669\nINC90LDRiNC10Lk= 34670\nIHRpbWJlcg== 34671\nIG1hbm5lcnM= 34672\nIEJpcm1pbmdoYW0= 34673\nIG1pbmlhdHVyZQ== 34674\nb21ldGVycw== 34675\nIGZpbGxlcg== 34676\nIFJpcA== 34677\nIEtvbWI= 34678\nb3duZXI= 34679\n7L8= 34680\naWRpYW4= 34681\nIGRlbcOhcw== 34682\nINmI2Ko= 34683\nIHByZWNhdXRpb25z 34684\nIGdvdmVybm8= 34685\nemVsZg== 34686\nIENvbXBsZXRl 34687\n5biD 34688\nIFBoYW50b20= 34689\n44G+44Ga 34690\nINC90LXQtw== 34691\nINC60LDRgNGC 34692\nIEFudHdvcnQ= 34693\nIFBmaXplcg== 34694\nIEZyYW5jbw== 34695\nIHfFgg== 34696\nIGZyaWc= 34697\nZXNwZXI= 34698\nIGthbGU= 34699\nIGZpbG1tYWtlcg== 34700\nIGt1cnQ= 34701\nIGludmFsaWQ= 34702\n5bGA 34703\nYXJlbGxh 34704\nxINuZw== 34705\ncmFtZW50bw== 34706\nIG51dHJpdGlvbmFs 34707\nIGRpY3RhdG9ycw== 34708\nIGFmaW4= 34709\nIGZ1enp5 34710\nIEdpbmE= 34711\nw7N0 34712\nIEV4dHJlbWFkdXJh 34713\nIGRlbW9uc3RyYXRpb25z 34714\nIE1vbnRnb21lcnk= 34715\n7ZW07ISk 34716\nIEdhbmRoaQ== 34717\n44Od 34718\n572u 34719\nIHJldW5pb24= 34720\nIGpha2nFmw== 34721\nIFp1Zw== 34722\nT1VHSA== 34723\nbGlmdGluZw== 34724\nIOCy 34725\n4bmb4bmj 34726\nZWI= 34727\nIFdPVw== 34728\nIFNoaXZh 34729\nb21ldHJ5 34730\nIHdpbGRseQ== 34731\nIHRlbmRlZA== 34732\nIG1lZ2Fw 34733\n7LKY 34734\nIG5hdXNl 34735\nIGdlcmVr 34736\n44OL 34737\nIE1hcmNlbA== 34738\nIG5lc3Rl 34739\n2K7YsQ== 34740\nIGZlaA== 34741\n5YaF 34742\nc3VzcGVuc2VmdWw= 34743\nIFdyZXN0bGU= 34744\nIFBhbGVzdGluaWFucw== 34745\nIEdPUkQ= 34746\naXlldA== 34747\nINGA0LDQtNC4 34748\nIHZlcnN1Y2hlbg== 34749\nIHRyYW5zaXN0b3I= 34750\nINCf0YDQvtGB0YLQvg== 34751\nINC/0L7QvdGA0LDQsg== 34752\nIHJoeW1l 34753\nIFZlcm1vbnQ= 34754\ncGxhdHo= 34755\n6K6w 34756\nIMSwxZ90ZQ== 34757\nIEhhZw== 34758\nINCY0Lw= 34759\nINGA0LDRgdGB0LrQsNC3 34760\nIG1ldHJvcw== 34761\nIEluZmluaXR5 34762\nd29sZg== 34763\naWJhbA== 34764\nZnRpZw== 34765\nINqG 34766\nIO2YueyLnA== 34767\nIG9nZ2k= 34768\nIGRpc3Bvc2l0 34769\nINC/0YDQuNC7 34770\nINCy0YvQv9C+0Ls= 34771\nIHRow7Rp 34772\nIEtFTk4= 34773\nIGhhbmRpbmc= 34774\nYWN0dXM= 34775\nIHRhY29z 34776\nIGZvcm1lcmx5 34777\nIENvcmludGhpYW5z 34778\n44Gr44Gv 34779\n0YbRltGX 34780\nIHBhZHJl 34781\nIGNvbmdyZWdhdGlvbg== 34782\n5pE= 34783\nZmVydA== 34784\nIHN1Ymly 34785\nYWlzZXI= 34786\ncXVh 34787\nYXJhb2g= 34788\nIEN1cnJ5 34789\nIOyViuuKlA== 34790\n0LXQu9GO 34791\nIGZ1c3M= 34792\nIGJvb3R5 34793\nIGxvd3M= 34794\nIGhvbW1lcw== 34795\nIE1I 34796\nIERpc25leWxhbmQ= 34797\nd2VudA== 34798\nIHJlc2lkdWU= 34799\nIGJlZXBpbmc= 34800\n6LyV 34801\nw6R0dGE= 34802\nIG1vdWxk 34803\nIFByb2pla3Q= 34804\nc3RhbGs= 34805\nIGFydGlmYWN0 34806\nIEFudHJhZw== 34807\nIEFNRA== 34808\nIENyeXB0 34809\nIOuplA== 34810\nIEZlbGlwZQ== 34811\nIENPQg== 34812\nZWx1 34813\nIHNlbGZpZXM= 34814\nIFNhbnRp 34815\nY2h1dHo= 34816\nINCj0LrRgNCw0Zc= 34817\nZ2VzYW10 34818\nIGZsb2Nr 34819\namF6 34820\ncGxhaW4= 34821\nIHdyaW5rbGVz 34822\nIHJlYWlz 34823\nIHBhbGpvbg== 34824\nIGVtcG93ZXJtZW50 34825\nIGF0dGVuZGVlcw== 34826\ncHBh 34827\nIG5lZGVu 34828\n0L7QvdGL 34829\nIHRpbWVmcmFtZQ== 34830\nIENoZXJyeQ== 34831\nIGlkw6ll 34832\nIGdhZw== 34833\nIGRvbmtleQ== 34834\nIMO0bmc= 34835\nIEhhcmU= 34836\n6Zqb 34837\nIEthcmE= 34838\nIGFjb21wYW4= 34839\ncGxhY2Vz 34840\naW1pZW50b3M= 34841\nIEhhbW0= 34842\n0LHQuA== 34843\ndWJlbg== 34844\naWxpeW9y 34845\nIHRoaXJzdA== 34846\nIGtyeQ== 34847\nIEdlb3JnZXRvd24= 34848\n16DXlA== 34849\nIG9yY2g= 34850\nIGhlYXJ0YmVhdA== 34851\nIHRyYW5zZm9ybWF0aW9ucw== 34852\nZXN0b25lcw== 34853\nIEtI 34854\nIGNhcnRvb25z 34855\nIGFuY2k= 34856\nIHdvcnRobGVzcw== 34857\nIHRhaWxvcmVk 34858\ncHU= 34859\nQW1lcmljYW5z 34860\nIHBpbGVz 34861\nIE1vbmtleQ== 34862\nIGJhc2lu 34863\nIFRlbXBlcg== 34864\nIFBhaW50 34865\nIHB1bmNoaW5n 34866\nIGJhaWs= 34867\nIE9ha2xhbmQ= 34868\ndnJl 34869\nxZ9hbGxhaA== 34870\neWRk 34871\nIGNhc3VhbGx5 34872\nb2R1 34873\nIGNvZGVk 34874\nIE5vcndlZ2lhbg== 34875\nIFZpbmNl 34876\nIHByZW1hdHVyZQ== 34877\nIFByb21pc2U= 34878\n0LXQutGB0YI= 34879\nIGRldmFzdGF0ZWQ= 34880\nIFByZW1pdW0= 34881\nIFBhcmFt 34882\nIMOWeWxl 34883\ndW11eg== 34884\nUE8= 34885\ncmF0b3Jz 34886\nIGxhbXBz 34887\nIHRlcnJpdG9yaWFs 34888\nIGJhY2tib25l 34889\nbGlzdGVk 34890\nRFk= 34891\nINin2YTYsQ== 34892\nIHB1cnN1ZWQ= 34893\nIENvbW1vbnM= 34894\nIOqzoQ== 34895\nbG9ja3M= 34896\nZWRvcg== 34897\nIGNvbmNlaXZlZA== 34898\nZ2VyZQ== 34899\nIGRpc2FwcGVhcmluZw== 34900\nIFN1bGw= 34901\nIOyXsOs= 34902\nIGhvZmZl 34903\nIGRldG94 34904\n7ZSM 34905\nIHJldGly 34906\nIOuBneuC 34907\nIHBlcmd1bnRh 34908\nIEJPWQ== 34909\n57K+ 34910\nIHBlbm4= 34911\n5p2l5LqG 34912\naMOpcw== 34913\naG9u 34914\nIGNhdGFzdHJvcGhpYw== 34915\nIGF1c3Q= 34916\nIHRvcnNv 34917\nIOyWtOuKkA== 34918\nIOyCrOuejOuTpOydtA== 34919\nIG1hcnZlbG91cw== 34920\nIEhhcmxleQ== 34921\nYWNoaW5l 34922\nIHRp4bq/ 34923\naXR0bw== 34924\nIEnDrW0= 34925\neWxvbg== 34926\nIHNodXRkb3du 34927\nLicn 34928\nIGFwb2xvZ2llcw== 34929\nIENvbW11bmljYXRpb24= 34930\nINCz0L7QstC+0YDRjg== 34931\n44GC44O8 34932\n4oSi 34933\nw612ZWlz 34934\nYWN1bg== 34935\nIHJldGFpbmluZw== 34936\nIGNvbnRyYWRpY3Rpb24= 34937\nIEFEQU0= 34938\nQ09N 34939\nQnJ5YW4= 34940\nIE1vbnNpZXVy 34941\nIGFkYXB0aW5n 34942\n0KjQkA== 34943\nIFNjcg== 34944\nw6RuZGVydA== 34945\nIHBsYXVz 34946\n5LuK5aSp55qE 34947\nIG9uc2V0 34948\nIGFzc2lzdGFudHM= 34949\nIHZhbHZlcw== 34950\nIHNjYXR0ZXI= 34951\nIFJ1c3Q= 34952\nYXdpYQ== 34953\nIHJlYWRpbmVzcw== 34954\nIHBhaXM= 34955\nIGJpYmxl 34956\nIGFtYmllbnRl 34957\nINCw0LzQtdGA0LjQug== 34958\nIHVuY29uZA== 34959\nIGthbGs= 34960\n5Yqo 34961\nIG1vYw== 34962\ndW5u 34963\nIGFjdHU= 34964\nIGh1bW1pbmc= 34965\naXNzaW1v 34966\nIFBhdHJvbA== 34967\nZ293 34968\n44Ok 34969\nIFRIRVk= 34970\nIEJvZGVu 34971\nIEJpZQ== 34972\nIHJlZWw= 34973\nINGD0YHQu9C+0LI= 34974\nIGVuZGVhdm9y 34975\nIFBlcmlvZA== 34976\ndXN0b21lZA== 34977\nbWFscw== 34978\nYWxvbg== 34979\nQm94 34980\nIM+DzrHPgg== 34981\nIG9tZGF0 34982\nIGFsdHJl 34983\nIEhlaA== 34984\na2Fk 34985\nIHByb3RlY3Rvcg== 34986\nIGRvbWluYW5jZQ== 34987\nb2R5bmFtaWM= 34988\nIGNvbW11bmljYXRlZA== 34989\na8O2 34990\nIHByZWRlY2Vzc29y 34991\nIEx1aw== 34992\nIEZsb3dlcg== 34993\nIOOBqQ== 34994\ncG9xdWU= 34995\n0YLQuNGA0L7Qsg== 34996\nIHJldHJvc3BlY3Q= 34997\nIGRlY2lzaXZl 34998\nIGV4ZW1wZWw= 34999\ne1w= 35000\nIFLDvGNr 35001\ncml0ZQ== 35002\nIFpldXM= 35003\nIGNhbG9yaWU= 35004\nIGF0dHJhY3Rpb25z 35005\nIEhpbnRlcg== 35006\nIHVobQ== 35007\nIO2MkA== 35008\nIHJ1bGVycw== 35009\nIGRpc2NvdXJhZ2Vk 35010\nIGFjb250ZWNlcg== 35011\nIGFjY2VudHM= 35012\nIE9wdGlt 35013\nIEFsZw== 35014\na2lkcw== 35015\nMjAyMQ== 35016\nIExpbmRzYXk= 35017\nIGZpbG1tYWtlcnM= 35018\ncHJvd2Fk 35019\nIHRlcnVn 35020\n64u0 35021\nIFNvbW1lcg== 35022\nMjAxOA== 35023\nIGJvcnJvd2luZw== 35024\nIFRyYW5zZmVy 35025\n0L3QvtC/ 35026\nYXJpYXM= 35027\nIGhlYWRwaG9uZQ== 35028\n7Lyc 35029\nIHRyYW5zbGF0aW5n 35030\nIGF1Zmdl 35031\n4K6q4K6f 35032\nd2Vpcw== 35033\nYXZhbnQ= 35034\ncGFpZA== 35035\nYmFieQ== 35036\nIHRvdWdoZXN0 35037\nIHJlcGVhdHM= 35038\nIFRlcmVzYQ== 35039\nTG9yZA== 35040\nIGFjYWJhcg== 35041\nIFJpZGU= 35042\nZGly 35043\nIGxlbmc= 35044\nIGR3YQ== 35045\nIGhlYWRhY2hlcw== 35046\nIG7hu69h 35047\nINC90LDRgdGC0L7Rj9GJ 35048\nIGJvaWxz 35049\nIGxvbmdpbmc= 35050\ncmlhcw== 35051\nw7NyaW8= 35052\nIFBhcmFkaXNl 35053\nIFNlw7Fvcg== 35054\nZXJkZW0= 35055\nIHJlaW5zdA== 35056\nIHNhbGFyaWVz 35057\nIGluc2VjdXJpdHk= 35058\nxYJvxZtjaQ== 35059\nINCw0LHRgdC+0LvRjtGC0L3Qvg== 35060\naW5rZW4= 35061\nIEVkZHk= 35062\ndWRvcw== 35063\nIGR1bW15 35064\n0JrQsNC6 35065\nc2l4 35066\nIGluYm94 35067\n4bqp 35068\nUGVvcGxl 35069\n4buTbmc= 35070\nIG9yZ2FuaXplcnM= 35071\nZmluZA== 35072\nIMO8bA== 35073\nIENPTQ== 35074\nxbxh 35075\nd2VpbGU= 35076\nQ29tbWVudGFyeQ== 35077\n7Yq466W8 35078\nIE1pdHRlbA== 35079\na3Vz 35080\n6JuL 35081\n4KSo 35082\naXJhbA== 35083\nIGdhcm1lbnQ= 35084\nzrnOus6s 35085\nIHN0b29s 35086\ncGF5ZXJz 35087\nIHNoaW1tZXI= 35088\nIE9sbGll 35089\nIEplxbxlbGk= 35090\n6L+Y5pyJ 35091\nIDE5Nzc= 35092\nIGpldXg= 35093\nIGV4dGluY3Q= 35094\nIFRyYW5zcG9ydGF0aW9u 35095\nIE1ha2Vy 35096\nIGpvaG4= 35097\nIHJpY2hlc3Q= 35098\nIHRyYXVtYXQ= 35099\nIGxpZWdlbg== 35100\ntOulvA== 35101\n6L+Z6YeM 35102\nIHVucmVzdA== 35103\nIFN0cmF3 35104\n5ouc5ouc 35105\nIGNvbWE= 35106\nIEtyaXN0ZW4= 35107\nINCa0L7QvdC10YfQvdC+ 35108\nIEJyeWNl 35109\nINGP0LrRlg== 35110\nIHBlYXJscw== 35111\nINC/0L7QvdC40LzQsNGO 35112\nIGFkZGl0aW9ucw== 35113\nIGFzeW1wdA== 35114\nINC80LXQvdGM0YjQtQ== 35115\nIHNjYW5z 35116\nQ2hpbGQ= 35117\nIEhpZGU= 35118\n0LrRg9GO 35119\nZXRhcw== 35120\nIGRhbms= 35121\nIHBsZWFz 35122\nIGVzc2F5cw== 35123\nIGpldHM= 35124\n5YWS 35125\nINCy0LXQtA== 35126\nIHBvc2l0aXZlcw== 35127\naG9m 35128\nLSk= 35129\nenpv 35130\nIHN0YXJ0ZXJz 35131\nIHNtaWxlZA== 35132\nIDE5NDQ= 35133\ncXVpZXJh 35134\nIHJvaw== 35135\nIHB1ZXN0bw== 35136\nTmljbw== 35137\nIHNpbXVsYXRpb25z 35138\nIOC2 35139\nIGludHJpZ3VlZA== 35140\nIE92ZXJ3YXRjaA== 35141\n5ZaC 35142\nc2lnaA== 35143\nYmFp 35144\nIOunkOqzoA== 35145\naWTDqQ== 35146\nIGNyYWJz 35147\n4bqtcA== 35148\nIElyYXFp 35149\n7J2066W8 35150\n0YLRjw== 35151\nIFNvcGhpYQ== 35152\nIEROUw== 35153\nIMO2bmVtbGk= 35154\nIEx1bw== 35155\nnaQ= 35156\nIENvdW5zZWw= 35157\nbGlnZW4= 35158\n0LDQvdGM0YjQtQ== 35159\nIHRydW1wZXQ= 35160\nIGRhcGF0 35161\nIEpN 35162\nIEVWRVJZ 35163\nIOWwjeS4jeWwjQ== 35164\n5aSi 35165\nIExheWVy 35166\nIGPDtA== 35167\n0L3QsNC7 35168\nIEpvbw== 35169\nIEhhY2s= 35170\nIHN1bnQ= 35171\nIExlb25hcmQ= 35172\nIEZpcmViYXNl 35173\nw6RuZ2Vy 35174\nIGV4cGxvZGluZw== 35175\ndm95 35176\nIOymkA== 35177\nINGB0LXRgNGM 35178\nIHNldmVyaXR5 35179\nIGJlc3RpbW0= 35180\n57WQ5p6c 35181\nIHRpcmluZw== 35182\nIHByb2N1cmVtZW50 35183\nIGRpcGxvbWFjeQ== 35184\nIGRlY29yYXRpdmU= 35185\nINmK2Kc= 35186\nIHBlbmV0cmF0aW9u 35187\n1as= 35188\nIG91dHJpZ2h0 35189\nRU5F 35190\nIFVuaQ== 35191\nb2RsZXM= 35192\nIHplcm9z 35193\nIGRlbGlnaHRmdWw= 35194\nam0= 35195\nIGRvcG8= 35196\n5rKh5LqL 35197\nIHBvc2l0aXZpdHk= 35198\nIFZJU1RB 35199\nIFJlc291cmNl 35200\n7YOA6w== 35201\n0YjQuNC1 35202\nQ2FybA== 35203\nIHBpcGluZw== 35204\nIGNob3BwaW5n 35205\nIEdhbnpl 35206\nw7xzcw== 35207\nIEFv 35208\nIHNoYXR0ZXJlZA== 35209\nIERldGVjdGl2ZQ== 35210\nIHVuZG91YnRlZGx5 35211\nIGhhbGx1Yw== 35212\nIGVuY2g= 35213\n0YvRh9C90L4= 35214\n0YPQu9GP0YA= 35215\naXNlc3Rp 35216\nIHBlZGFscw== 35217\nIGR1cnVt 35218\npO2U 35219\nbGFpbWVy 35220\nIHByb3ByZQ== 35221\nQ3U= 35222\nIHRyYW5zbGF0b3I= 35223\nIGNhxYI= 35224\nIOq3uOqxuA== 35225\nIGNhxYJ5 35226\nVUE= 35227\nIHJldmlzZWQ= 35228\nINC/0L7QtNC+0LE= 35229\nIEFydGljbGU= 35230\nIEhhaXRp 35231\nIMOT 35232\nIEN0cmw= 35233\nIHJvem0= 35234\nbGFpdA== 35235\nIGxldHp0ZQ== 35236\naXNwZXJpbmc= 35237\nZGlzcGxheQ== 35238\nIGFsdW1pbml1bQ== 35239\nIHBhbGFicmFz 35240\nIGNvbm9jZXI= 35241\nIHppdHRlbg== 35242\nIGRpcmln 35243\n5Y+q5pyJ 35244\nIGJyYWluc3Rvcm0= 35245\nIHdpZmk= 35246\nIFBhcnRpY2lw 35247\nIHZpZXdwb2ludA== 35248\nIFF1YW4= 35249\nIGhpZXJhcmNo 35250\nV2VsY29tZQ== 35251\n5a++ 35252\nIG9mZmVu 35253\nIFJlY292ZXJ5 35254\nZ2Fubw== 35255\nV291bGQ= 35256\nIHJlcHJv 35257\nIHBlcmNlcHRpb25z 35258\nIGRlbWFzaQ== 35259\nIEJhbmdsYWRlc2g= 35260\nIEluY3JlZGlibGU= 35261\nIGxldHp0 35262\nIGJlaGF2aW5n 35263\nIGFzdG9uaXNoaW5n 35264\nIOKG 35265\nIOuCqOyekA== 35266\n6LWw5LqG 35267\n44OU 35268\nIEdPUkRPTg== 35269\nQ0FS 35270\nPyEi 35271\nIFByZXN0 35272\nIOunnuyVhOyalA== 35273\nIHRhbmQ= 35274\nIGxhc2g= 35275\n54o= 35276\naWZpY2FudA== 35277\nIGludG9sZXI= 35278\nINCz0LXRgNC+ 35279\nIHRldQ== 35280\nYXNv 35281\nINGB0L7QstC10YI= 35282\nIHRyYXZlbGVycw== 35283\nIFN5bmQ= 35284\nINCy0LXRgNGB 35285\nRm9uZGE= 35286\nYWTEsQ== 35287\nIHRyYW5zY3JpcHRpb24= 35288\nIHRpdGFuaXVt 35289\nIHR3aXN0cw== 35290\nIGdlYXJib3g= 35291\nZW5zYXRpb24= 35292\nZmF0 35293\nQ29sbA== 35294\nIENvbW1vbndlYWx0aA== 35295\nem9u 35296\nIFBvbGl6ZWk= 35297\nIEFQUExBVVNF 35298\nZnJ5 35299\nIEp1ZGE= 35300\nZXN0ZWVt 35301\nIHNvY2s= 35302\nIEp1Z2VuZA== 35303\nINC60YHRgtCw0YLQuA== 35304\nIERybw== 35305\nIHByb2NoYWluZQ== 35306\n44O844Or 35307\nIGxpa3NvbQ== 35308\nIEVuZXJnaWU= 35309\nIE1hcmluYQ== 35310\nIDIzMA== 35311\nIOqwgOyEnA== 35312\ndW1waW5n 35313\nIGxvbmU= 35314\n57Sa 35315\nIGZvbnRz 35316\nIGJ1c2luZXNzbWFu 35317\nIHBseQ== 35318\nIGRvZQ== 35319\nZ3JpZA== 35320\nIE1pbHdhdWtlZQ== 35321\nIEVkZW4= 35322\nISIu 35323\nINuM24E= 35324\nb2dlbnM= 35325\nIHRlYXNlcg== 35326\nIHF1acOpbg== 35327\nIGluY2VudGl2 35328\nZ292ZXJu 35329\nIGNoaWxkY2FyZQ== 35330\nIHNuZWFrZXJz 35331\nIGltcHJpc29uZWQ= 35332\nwq4= 35333\n0LjRgtC10YHRjA== 35334\nYW5idWw= 35335\nIHJlZ2Fpbg== 35336\nIHRyYW5xdWls 35337\nUmVkbmVy 35338\n6Zuo 35339\nSUZB 35340\nIGlkZW9sb2dpY2Fs 35341\nIG1heW9yw61h 35342\nIGJ1cmVhdQ== 35343\nZXRlcm0= 35344\nIERJRA== 35345\n7Iq3 35346\nIHdhdmluZw== 35347\nIGJlYg== 35348\nIMOhcg== 35349\nINC60LI= 35350\nIGVudm95 35351\nYW51dA== 35352\n0LjQutGD 35353\nIEVudmlyb25tZW50 35354\nIEFzc2Fzcw== 35355\n44KT44Gn 35356\nIEJyZWFk 35357\nINCi0YPRgg== 35358\nIHN0YWlyY2FzZQ== 35359\nIERpc2Vhc2U= 35360\nIGF1Y3Vu 35361\nIOuLiA== 35362\nIGNvbmZyb250YXRpb24= 35363\nIDE5NDE= 35364\nIGlyb255 35365\nIHdvcnNo 35366\n44KM44KL 35367\nIGZpY2s= 35368\nIE5hb21p 35369\nIGJhY2tzaWRl 35370\naWV1eA== 35371\nS2Fw 35372\nIHZlZGVyZQ== 35373\nIGxlbmd0aHk= 35374\nIGJyZWFrZXI= 35375\nIFJvbGxl 35376\nIHByZWRhdG9y 35377\nIG5vc3Nvcw== 35378\nIGFkdmVydGlzZQ== 35379\n6LOH 35380\n0YDQvtC00LU= 35381\nUmVkbmVyd2VjaHNlbA== 35382\ncmV0ZW4= 35383\nIGNvbGxlY3RvcnM= 35384\nxLHEn8SxbcSxeg== 35385\nIHRyaWc= 35386\nIGF4ZXM= 35387\naW50ZXJz 35388\nIHBlbmFsdGllcw== 35389\nIE9zbWFu 35390\nIEplbm5h 35391\nIGZsYWtlcw== 35392\nIHRyYWluZXJz 35393\nIHN0dW5uZWQ= 35394\nIFNjcm9sbA== 35395\nIFBpcA== 35396\nINC90LDRgdGC 35397\nIG5ow6A= 35398\nIFNtYWNr 35399\n4bqrbg== 35400\ncmF0b3M= 35401\nINGA0LDQsdC+0YLRiw== 35402\nIHVjeg== 35403\nIExlbW9u 35404\nIFNpbmQ= 35405\nIHBzeWNoaWM= 35406\nIEFiZw== 35407\nIG1hbW1hbHM= 35408\nIGltbWVyc2l2ZQ== 35409\nIGJvdHM= 35410\nIHZlcnNjaGllZGVuZQ== 35411\nIGdlcmFs 35412\nIGZvbGxvd2Vy 35413\nIOS7lg== 35414\nIHNlZ3VyaWRhZA== 35415\nIGltbWVyc2Vk 35416\nZmVpdG8= 35417\nY3Jvc3M= 35418\nIMO2bGQ= 35419\n7YOE 35420\nIOOBk+OBrg== 35421\nINeU15nXkA== 35422\nIEppYW4= 35423\nIGJpbGl5b3I= 35424\nYXJlYQ== 35425\nIGthZg== 35426\nIGdvZHQ= 35427\n55u45L+h 35428\nIOuwqeyGoQ== 35429\nIGRldHJpbWVudA== 35430\n5qWa 35431\n0ZbQuw== 35432\nIMSRw6J1 35433\nIGNobG9yaWRl 35434\nw7hyZQ== 35435\nbGVp 35436\nIG1vbnRl 35437\nIGRpZmbDqXJlbnRlcw== 35438\n4K+BLg== 35439\nIGNhcmVnaXZlcnM= 35440\nIGluYWRlcXU= 35441\nIGZhcmV3ZWxs 35442\nINGC0LjQv9Cw 35443\nb250ZWM= 35444\nIEVwaA== 35445\nSEhI 35446\nIFRvZG9z 35447\nINCh0KjQkA== 35448\nIHRyb3Y= 35449\nIGxpZ2U= 35450\nIGPDtG5n 35451\nIENpdg== 35452\nIGNhcGF6 35453\nIFZhbGxhaGk= 35454\nIHF1ZXN0ZQ== 35455\nIHJlcGxpY2E= 35456\n2LPYqA== 35457\nem5h 35458\nINGB0LvRg9C2 35459\nIFBU 35460\nd2F2ZQ== 35461\naWVuaQ== 35462\nIHJlbGllZA== 35463\nZGV2ZWxvcA== 35464\nIGRlbWU= 35465\nIEFtYW4= 35466\nIFsuLi5d 35467\nIGNvbXBsaW1lbnRz 35468\ndWFpcw== 35469\nIO2MqA== 35470\nIHNtZWxsaW5n 35471\nIGRhZHVyY2g= 35472\n2YjYqg== 35473\nIG9yYW5nZXM= 35474\nINC70LDQuQ== 35475\nIHN0YWJpbGl6YXRpb24= 35476\n5YCN 35477\n44KM44Gf 35478\n5qW9 35479\nIGFwcGxpYW5jZXM= 35480\nIGht 35481\ng5DrqbQ= 35482\nb2R5bmFtaWNz 35483\nIGNpxJk= 35484\nIENvdHQ= 35485\nTU9O 35486\nIE1hbmc= 35487\n5pSv5oyB 35488\nIGFsbGVyZGluZ3M= 35489\nzrnOus6u 35490\nc2hvdHM= 35491\nIHRz 35492\nIEfDtnI= 35493\nIENIQVI= 35494\nIDoo 35495\nIHdyYXRo 35496\nIGZpcXVl 35497\nIGbDvGhyZW4= 35498\nIHRlc3RhbWVudA== 35499\nIF5e 35500\n4bmb4bmj4bmHYQ== 35501\nQUxE 35502\nIHRleHRv 35503\nIERvZ3M= 35504\nIHNpYg== 35505\nIHBhdGhldGlj 35506\nb2Nrcw== 35507\nIHJhZGljYWxseQ== 35508\nIE1PUkU= 35509\nIEpBTUVT 35510\nIGluZ2w= 35511\nIFRlY2huaWNhbA== 35512\nIHBvcmNo 35513\nIFVU 35514\nINC+0LHRj9C30LDRgtC10LvRjNC90L4= 35515\nIHJlbmV3YWw= 35516\nIGFlc3RoZXRpY3M= 35517\naWt1bQ== 35518\nIGJldmVyYWdl 35519\nZGVybg== 35520\nIHByZWRpY3RpdmU= 35521\nIGNodXk= 35522\nIFJlZ2FyZGluZw== 35523\nIEZvcndhcmQ= 35524\nINmI2YQ= 35525\nIGNvbnRleHR1YWw= 35526\nIGR3YXJm 35527\nIHByZWhl 35528\nIGdvdmVybmVk 35529\nhYQ= 35530\nIHRyYWJhbGhhcg== 35531\nIG5lZ8OzY2lv 35532\nINCx0L7Qu9GM0YjQvtC5 35533\n0LXRh9Cw0YI= 35534\nINC00YPRhQ== 35535\nIGZsb29kcw== 35536\nIGJvd2xpbmc= 35537\nIE9C 35538\nIEjDpHI= 35539\nIGdyYWRpbmc= 35540\n7KO864qU 35541\nIGdhcnM= 35542\nZGxpbmc= 35543\nIHJhaw== 35544\n64g= 35545\nY3JlYXQ= 35546\nINGJ0LU= 35547\nIG5laWdoYm91cnM= 35548\nZm9vZA== 35549\nUXVlcnk= 35550\nIGhlcm9pbg== 35551\naWNlcHM= 35552\nIEtpbmRh 35553\nTkVU 35554\nIG1hcmk= 35555\nIGltaXRhdGU= 35556\nIGFjaHRlcg== 35557\nIHNldHRsZW1lbnRz 35558\ncmFyZQ== 35559\nY2Npb25lcw== 35560\nIOuTnA== 35561\nIGZpaw== 35562\naXR1bmc= 35563\nINC80LDQutGB0LjQvA== 35564\nIGVsZg== 35565\nIGRhbGxh 35566\nIFBvbHNjZQ== 35567\nIFB1bA== 35568\n0KfRgtC+ 35569\nIE1vcmdlbg== 35570\n2K3ZhQ== 35571\nIHN1cHJlbWFjeQ== 35572\nIGt5cw== 35573\nIEh1cnJpY2FuZQ== 35574\nIEdUQQ== 35575\nIEZlaA== 35576\nIGZpbmFsbWVudGU= 35577\nbXVuZA== 35578\nIEtyaWU= 35579\nw6lwb3F1ZQ== 35580\nIFR1Y2tlcg== 35581\nSVRU 35582\nIGx1cg== 35583\nIGRpcHBpbmc= 35584\nw6R2 35585\nIGVlcnN0ZQ== 35586\nIEZsaW50 35587\nYmlsZHVuZw== 35588\n4Li54LmJ 35589\nIHRvaW0= 35590\nIHByYWN5 35591\nIHRyYW5zZm9ybXM= 35592\nIHNwZWVkaW5n 35593\nIHByZXNlbnRlcg== 35594\nIGZlbGxvd3M= 35595\nZmlsbGVk 35596\naWV6YQ== 35597\nIGFkdmlzaW5n 35598\nIEludGVydmlldw== 35599\n0LjQs9GA 35600\nd2Vocg== 35601\nIERhbnRl 35602\ncHR1cmU= 35603\niOusuA== 35604\nr7jr 35605\nkJA= 35606\nIENvdW50ZXI= 35607\nIGNyaXN0 35608\nIOynnA== 35609\nIGpldW5l 35610\nINGB0YLRgNCw0Yg= 35611\nIG1pZcSH 35612\nIHR1dG9y 35613\nIG1hc2FsYQ== 35614\nIHBvd2RlcmVk 35615\nIG5hdQ== 35616\nIEZyZWRlcmljaw== 35617\nIGJpbGxpbmc= 35618\nIEVpc2Vu 35619\nINC00L7QsdGA 35620\nIG1lc3Q= 35621\n5r0= 35622\nIHNuaXBw 35623\nIG1vbm8= 35624\nIEFsbw== 35625\nIE1lcmN5 35626\nw6lyaWVuY2U= 35627\nIGNhc3VhbHRpZXM= 35628\nIEFOTk9VTkNFUg== 35629\n5LuO 35630\nIHRvY2Fy 35631\nIGJhY3RlcmlhbA== 35632\nSG8= 35633\nIHN0cmVhaw== 35634\nIEpFTk4= 35635\nIHBsYXN0 35636\n0YHQu9C10LQ= 35637\nIHJlYXBw 35638\nIHBheWNoZWNr 35639\nIG1pbmVycw== 35640\naGFidA== 35641\nIEphcA== 35642\n0L3Rg9GC 35643\nIHJlZGVtcHRpb24= 35644\nIHF1aXI= 35645\naG5saWNo 35646\nIGFjY3VtdWxhdGlvbg== 35647\nIHNob3Zl 35648\nIGFkcmVuYWxpbmU= 35649\nTWFrZQ== 35650\nIEhlcm4= 35651\nb3NzaW5n 35652\nIFZpbA== 35653\ndWJieQ== 35654\naGVydHo= 35655\nYnJlYWtz 35656\nIHNwdXI= 35657\nIERhaGE= 35658\nVVNUSU4= 35659\nIGNvbnRpbnVlcg== 35660\nIFNhdWw= 35661\n44Gu44Gv 35662\nIO2PrQ== 35663\nIOuQmOuptA== 35664\nIOunkOyUgA== 35665\nINC+0LY= 35666\nIHN1c3BlY3Rz 35667\nIGxhcXVlbGxl 35668\nIE11Y2hhcw== 35669\nIHbDtmxsaWc= 35670\ndWxlbg== 35671\nIGltcHJlcw== 35672\nIGxvYmI= 35673\nZW5lZQ== 35674\nINC90LDQtg== 35675\nVGE= 35676\nIHLDqWFsaXTDqQ== 35677\nIFJleA== 35678\nIGhhcnZlc3Rpbmc= 35679\nIGVzdHI= 35680\n5rY= 35681\nb3NwYWNl 35682\nT1NT 35683\nIGRpc3R1cmJhbmNl 35684\nYXNzaWM= 35685\nIElzYWI= 35686\nIGTDqWNvdXY= 35687\nIEhhbXBzaGlyZQ== 35688\nIG9ybmFtZW50 35689\nIGx1w7Ru 35690\nIFVX 35691\nIGrEhQ== 35692\n6YKj5LmI 35693\nIHJlc3BlY3Rv 35694\nIGNvbXVuaWRhZA== 35695\nIGNvbWlnbw== 35696\nYWduYQ== 35697\nIGludHJpbnNpYw== 35698\nIEFsdW1uaQ== 35699\nIHNlc2xlcmk= 35700\nIGVzdGltYXRpb24= 35701\n4oCU4oCU 35702\nIHByb2R1aXQ= 35703\n44CC44CN 35704\nINCy0YA= 35705\nIHdoaXJs 35706\nIGFjY2Vz 35707\nw6d1 35708\nIHZhcmlhYmlsaXR5 35709\nIHZvZGth 35710\naXRzdQ== 35711\nIGludGVybnNoaXBz 35712\nIGFsbG9jYXRl 35713\nUlI= 35714\n7ZuI 35715\nIGluc3RydWN0aW9uYWw= 35716\ndGFudA== 35717\nIOCuheCupA== 35718\nIGludml0ZXM= 35719\nIGhhaw== 35720\nIHNjYXJlcw== 35721\nIGVjbGlwc2U= 35722\n0L/QvtCy 35723\n0LrQvtC70Yw= 35724\nYXRpdmFz 35725\nIHN0YWJiZWQ= 35726\nIERPTQ== 35727\n5LiN5Yiw 35728\ncm9vdHM= 35729\nIFBpY3R1cmU= 35730\n7Zi8 35731\nIENIQQ== 35732\naWVj 35733\nxLHEsQ== 35734\naGFub2w= 35735\nIG1pc3VuZGVyc3RhbmQ= 35736\nUmF5 35737\nIHJvYWRtYXA= 35738\nb2N1bWVudGVk 35739\naXppb25l 35740\nIE9saXZl 35741\ncmlmdA== 35742\nINeU16A= 35743\n5q+N 35744\nbGVzdA== 35745\nOzs= 35746\nIEVB 35747\n6ZyA6KaB 35748\n0L7QtNGD 35749\nIGhvYmJpZXM= 35750\nIGJ1cmlhbA== 35751\n44Gr44Gh44Gv 35752\n0KQ= 35753\nbGVnZQ== 35754\nIEhK 35755\nIG9iamVjdGlvbg== 35756\nIOOBrQ== 35757\nY3Rvcnk= 35758\nIGluY3JlbWVudGFs 35759\nIGd5bW4= 35760\nIGVwaWRlbWk= 35761\n0YHRi9C7 35762\nw5E= 35763\nIGFkdmFuY2VtZW50 35764\nIHBhcmNo 35765\nTmV3cw== 35766\nIGF5cg== 35767\n0LvQsNC8 35768\nINec16k= 35769\nIGRpcGxvbWE= 35770\n44Gh44KD44KT 35771\nIHJvYmJlZA== 35772\nT25seQ== 35773\nIGluY3Vy 35774\nIGNoYW50aW5n 35775\nIO2VtOuPhA== 35776\nIHJpY2hlcw== 35777\nIENhcm1lbg== 35778\nIG5vc3Rybw== 35779\nzrvOrQ== 35780\nIFBvd2Rlcg== 35781\n4LmA4Lir 35782\nIOyeiOycvOuptA== 35783\nIGdlcsOnZWt0ZW4= 35784\nIFBpa2FjaHU= 35785\n0LXQvNC+0L0= 35786\nT0xM 35787\nIHBsYW5ldGFyeQ== 35788\nIHNsb3dz 35789\nIGNsb2Nrd2lzZQ== 35790\nYWxpb24= 35791\nIOyM 35792\nIHZlcm4= 35793\nIGhvbW1l 35794\nIGVuZHBvaW50 35795\nIGlubm9jZW5jZQ== 35796\nIGVsZW1lbnRvcw== 35797\nIHNvcGhvbW9yZQ== 35798\nIG5vdGlvbnM= 35799\nIENvdWxkbg== 35800\ncHVy 35801\nIHphdA== 35802\nIG9ic2Vzcw== 35803\nIG1vdGl2bw== 35804\nIEt1Yg== 35805\nIERydWc= 35806\nQW50 35807\nIFBsYXllcnM= 35808\nIEh1bWFucw== 35809\nIG1lbGVl 35810\nIFdpbGRsaWZl 35811\nIFZQ 35812\nIHZvbGNhbmlj 35813\nIGNvbWlu 35814\nIEd1YW5n 35815\nIM+EzrnPgg== 35816\nINC+0YHQvtCx0LXQvdC90L4= 35817\nIFNpemU= 35818\nTGlzdGVu 35819\nIEFhYQ== 35820\nYXBwcm8= 35821\nIGJhcmJhcg== 35822\nIFBhcmtpbnNvbg== 35823\n0L3Rj9GC0Yw= 35824\n5Y2w 35825\nIHVuZGVyZXN0aW1hdGU= 35826\nIHN1YnN0aXR1dGlvbg== 35827\nIGNvc21ldGlj 35828\n5LiL5qyh 35829\nIHdpbGxlbg== 35830\nIGJlaWRl 35831\nYW5uaQ== 35832\nIGNvbmRpdGlvbmVk 35833\nIERlYmJpZQ== 35834\nIGlzdG8= 35835\nIEVkd2FyZHM= 35836\n7JuM7JqU 35837\nINGC0L7Qsg== 35838\nIGFiYnJldmk= 35839\nIE3DvG4= 35840\nIFByaW5j 35841\nIExpYW5n 35842\nIHN0aW5r 35843\nIHJhZGlvYWN0aXZl 35844\n44GG44KP 35845\nIGFjb250ZWM= 35846\nIHVuY29u 35847\nIFR1cmJv 35848\n44GQ 35849\nIGtpc3Nlcw== 35850\n5piv5LuA6bq8 35851\n0LXRgtGA0L7Qsg== 35852\nIGZyb250aWVy 35853\nIFNweQ== 35854\nIEJlbGFydXM= 35855\nIENCUw== 35856\n4buX 35857\nYW1vdG8= 35858\n7ZWc642w 35859\nINGB0YLRgNC+ 35860\nIEVuZmlu 35861\nIGJyZWFkdGg= 35862\n6Ziy 35863\nIENhZmU= 35864\nIERhZsO8cg== 35865\nIEJvdXI= 35866\nYXJhcw== 35867\nIGJsdWVwcmludA== 35868\nYW7EsQ== 35869\nIGNvbnN0YW50cw== 35870\nIGF0dGFja2Vy 35871\nIEZvcm11bGE= 35872\nemHEhw== 35873\nIHNvd2ll 35874\nIGV5ZWJyb3c= 35875\nb2Jvb2s= 35876\nIHNldHplbg== 35877\n56ys5LiJ 35878\nb25zaWRlcg== 35879\nYXduaW5n 35880\nIHPDtnlsZXll 35881\nIGludmFkZWQ= 35882\nIHByb25vdW5z 35883\nIGRvYnJ5 35884\nU2k= 35885\nINCl0L7Rgg== 35886\nIHZvbGxleWJhbGw= 35887\nIGxhbWVudA== 35888\naXNjaGVz 35889\nYXJtZQ== 35890\nYXBp 35891\nIFdpa2k= 35892\n0LvQuNGI 35893\nIGthc2lo 35894\nIHBlc3M= 35895\nINGE0L7Rgg== 35896\nIFN1bA== 35897\n5b63 35898\nIHBzZXVkbw== 35899\nIG1lbW8= 35900\nIOyXsOyKtQ== 35901\nINC00L7Qu9C70LDRgNC+0LI= 35902\nINC/0LXRgNC10Lw= 35903\nIFJlYWNo 35904\nbWlyYWw= 35905\nYWx0ZWQ= 35906\nIHN0YXR1dA== 35907\ncmVhZGluZw== 35908\nIHPDtnlsZWQ= 35909\nIExpbmRzZXk= 35910\nIEFobWFk 35911\n67aA6w== 35912\nINCh0LXQs9C+0LTQvdGP 35913\nIHByenlnb3Q= 35914\nIGh5c3Rlcg== 35915\nVVJF 35916\nIE5laWdo 35917\nUmVwb3J0ZXI= 35918\nIEJ1bnU= 35919\nIFRyZWF0eQ== 35920\nIFJhbms= 35921\nIEZhbWU= 35922\naW5pc2hlZA== 35923\nIGdlYXJlZA== 35924\nIGNvbXBvc2U= 35925\nb2RpYQ== 35926\nIExvbg== 35927\nIGplc3RlxZtteQ== 35928\nIERJUkVDVE9S 35929\nIGVsa2Fhcg== 35930\nIFZpZWw= 35931\n15DXqQ== 35932\neW50aGlh 35933\n5Lim 35934\nIG3DqHJl 35935\nIFRvbWF0bw== 35936\nIGV4YXRhbWVudGU= 35937\nbmnEmQ== 35938\nIEZyZWk= 35939\nIERpZg== 35940\nIG9wZW5pbmdz 35941\nIGdyYXBoaWNhbA== 35942\nINGD0LTQvtCx 35943\nINCy0YHQvw== 35944\nIFdlZWtseQ== 35945\n0LXQstCw 35946\nIGhhbmdz 35947\nIHVuc2FmZQ== 35948\nIGVtYmxlbQ== 35949\nIEtvbGxlZ2lubmVu 35950\nYWxheQ== 35951\nIGtzaQ== 35952\nIGhpZGVz 35953\nIG9sbWF5 35954\nIGVudHN0ZQ== 35955\nIGFydGhyaXRpcw== 35956\nw59lcmRlbQ== 35957\nIGJpbm5lbg== 35958\nIGxpc3RlbnM= 35959\nIEhlc3M= 35960\n5YaN5L6G 35961\nIExvdWlzZQ== 35962\nbGRlbg== 35963\n0LXQvdGB 35964\nIFZlcnNpb24= 35965\nIEFncmljdWx0dXJl 35966\n7Iqk66W8 35967\n0LzQsNC9 35968\n64Sk7JqU 35969\nIHdpbmVz 35970\nIElORg== 35971\ncnVs 35972\nIEpL 35973\nxLF5b3JsYXI= 35974\nc2hpZWxk 35975\ncmVhdGg= 35976\nIHRlcnVz 35977\nIEx1bQ== 35978\nIGFudGljaXBhdGlvbg== 35979\nIGFjY3VzdG9tZWQ= 35980\nIE1pbmE= 35981\nIHdpZWxk 35982\naW/DqA== 35983\nbWVyYQ== 35984\nIGNvdW50ZG93bg== 35985\nIGNsaW5n 35986\nIGNvbW1lbmQ= 35987\nIGZha3Rpc2t0 35988\nIGRlZmVuc2Vz 35989\nIGNvY2twaXQ= 35990\nINC60L7QvNCw0L3QtA== 35991\nIGRpc2h3YXM= 35992\nIFRoYW5vcw== 35993\nIGtpZG5leXM= 35994\nIHNlaGU= 35995\nIG1pY3JvYmVz 35996\nIGN1ZmY= 35997\nINCy0YvRgdC+0Lo= 35998\nIFNwaWN5 35999\n562J562J 36000\n4K614K6w 36001\nY3VsdXM= 36002\nb3Jj 36003\n576F 36004\naXhlcw== 36005\nIENyZWRpdA== 36006\nIHJhag== 36007\nIGJyaW5ndA== 36008\nIE5pc3M= 36009\nIGdyaW0= 36010\nIFNPTA== 36011\nIHRlbmlt 36012\nIFN1ZGFu 36013\nIFNwYXJ0 36014\nIHByb21vdGVz 36015\nIE5vc3Nh 36016\nINGB0L7RgdGC0L7Rj9C90Lg= 36017\nIOywqQ== 36018\nIHVuY29udA== 36019\nIExpYmVyYWw= 36020\nINCi0L7Qu9GM0LrQvg== 36021\nIFZpZWxl 36022\nIGt0w7NyZWo= 36023\nICoqKio= 36024\nTWF4 36025\nINCn0YLQvtCx0Ys= 36026\nMzUw 36027\nIO2YvOyekA== 36028\nIOu2hOuTpOydtA== 36029\nIHdhcnA= 36030\nIHRlbmdh 36031\nIHN5bXBhdGhldGlj 36032\nIGJpemk= 36033\nIFphY2s= 36034\naWVkbw== 36035\nIOuJtOw= 36036\ncGllbA== 36037\nINGC0L7Quw== 36038\nIHNjYWxlZA== 36039\nIFBFVEVS 36040\nIENPTU0= 36041\nIENhbWU= 36042\nIGNhdGFzdHJvcGhl 36043\nIHN3ZWF0eQ== 36044\naWdyYXRpb24= 36045\nIHN0dWZmaW5n 36046\nIM+Azr/Ou8+N 36047\nIERyaXZlcg== 36048\nenlzdA== 36049\nVGVjaA== 36050\nIGFzc2Vzc2Vk 36051\nIFN1cmZhY2U= 36052\nxLFyxLFt 36053\nc3Vy 36054\nbGVyd2VpbGU= 36055\nINC00L7Qsw== 36056\nIHNodXR0aW5n 36057\nIGZyYWN0aW9ucw== 36058\nINGB0L7Quw== 36059\nZXZlcnlvbmU= 36060\nIGVybg== 36061\nINCd0L7Qsg== 36062\nIGRlZmVuZGVycw== 36063\nIHZlcnN1Y2h0 36064\n44Oz44OA 36065\nIHBvbGl0eQ== 36066\nINCf0L7QvQ== 36067\ndmVyc3TDpG5k 36068\nIGJyb3dzZXJz 36069\nIHRyYW5zZm9ybWF0aXZl 36070\nIGRpY3RhdGU= 36071\nIExFR08= 36072\nIG5pbmd1bmE= 36073\n6rSR 36074\nIHBpeno= 36075\nIEhhcm9sZA== 36076\nIExvcGV6 36077\n2r7bjA== 36078\nYW7EsXo= 36079\nYXRjaGV0 36080\n2YrYqg== 36081\nIGxlcm5lbg== 36082\nIOq3gOyXrA== 36083\nIGhvdXNlZA== 36084\nIGNsZWFuc2U= 36085\nIFdBVA== 36086\nbGFyYXRpb24= 36087\nIGJ5dGVz 36088\nIHR1Y2tlZA== 36089\nIGZhdWx0cw== 36090\n0LTQvg== 36091\nRlg= 36092\nIOyWvOuniOuCmA== 36093\nIGRlZm9ybQ== 36094\nIGNvbnRyYWN0aW5n 36095\nIFRJTUU= 36096\naXJzZQ== 36097\nIG5lYmVu 36098\nIGNlcmM= 36099\nIEFybXN0cm9uZw== 36100\nIHRlc3Rlcg== 36101\nIHBhcmZhaXQ= 36102\nIGplYWxvdXN5 36103\nIHRveGlucw== 36104\nIGRpc2JlbA== 36105\n0YPRgNGL 36106\naW1wcmVzc2lvbg== 36107\nIHByb3N0YXRl 36108\nIGZpcmV3YWxs 36109\nIGNsYXNzaWNz 36110\n0LXRh9GM 36111\nIHNvY2lhbGlzbQ== 36112\nIGdyYWNpb3Vz 36113\nINGB0L3QvtCy0LA= 36114\nINC00L3Rjw== 36115\nIGJ1cm5lcg== 36116\nIE1pbm9y 36117\nIOyasOumrOs= 36118\nIGplZGVz 36119\nIGNvbnRpbnV1bQ== 36120\nIGhvdHM= 36121\nIG9jY3VycmVuY2U= 36122\nIGFkbWluaXN0ZXJlZA== 36123\nINC30LDQvNC10YI= 36124\nIGhlc2l0YXRpb24= 36125\nIGRyaWxscw== 36126\nZXJjYQ== 36127\nINCy0YLQvtGA0L7QuQ== 36128\nIHN0ZWFkaWx5 36129\nIGluc2FubGFy 36130\nIGloYW4= 36131\n7ZE= 36132\nIGhlbHBlcg== 36133\nIFNlbmlu 36134\n5YGc 36135\n0L7QstCw0L3QuNC1 36136\nIEVSSUM= 36137\nYmxh 36138\nIEFjYWRlbWlj 36139\nIGh1bWFuaXRpZXM= 36140\nYmxhY2s= 36141\ndW1weQ== 36142\nb3J0ZXg= 36143\nIOygiOs= 36144\nINil2YY= 36145\nIGRpc2Nsb3Nl 36146\nIEVsaWphaA== 36147\nIM67zq0= 36148\nIFF1ZXI= 36149\n2KjZhA== 36150\n44Kh 36151\nVGVsbA== 36152\nYXJsZQ== 36153\n0ZbRgA== 36154\nIGF1Z21lbnRlZA== 36155\nIOu5hOyKtw== 36156\nIGFuZHJvaWQ= 36157\n4KSk 36158\nYXJtYQ== 36159\nIHN6ZXI= 36160\nZ2VvcmQ= 36161\nIGdlZWs= 36162\nIHlldXg= 36163\nIHBvbmc= 36164\nIOOBneOBhg== 36165\nIHRvcnR1cmVk 36166\nIEJhdGg= 36167\nemln 36168\nYXNvbmFibGU= 36169\nIG5ldHM= 36170\nIGJhcnU= 36171\nIEZsYXQ= 36172\nIFZhdGVy 36173\nIFRlcnJvcg== 36174\nIEF2bw== 36175\nIGNlcmVtb25pZXM= 36176\ncm9l 36177\n2YHYsw== 36178\nT3Bz 36179\nIGh5dmlu 36180\nIGFwcmVzZW50 36181\nb2xvcg== 36182\nINC40LPRgNGL 36183\nb3J0b24= 36184\nIOq3uOuerA== 36185\nIGxvb2tpbg== 36186\nIFRZ 36187\nIE1pbnQ= 36188\nQWRk 36189\nIG1pdGU= 36190\nIFNtb2tl 36191\nIG5vdGE= 36192\nIG1vc3M= 36193\nIEFiZW5k 36194\nIOy7qA== 36195\nIGV4YWdnZXJhdGVk 36196\nZmlyZXM= 36197\nIHJlZGlzdA== 36198\nZmZpdGk= 36199\nIG9wZW5uZXNz 36200\n6rCQ7J20 36201\nZW5kZXU= 36202\n0LXQvdC90L7QuQ== 36203\nV2F0Y2g= 36204\nIGF2YXRhcg== 36205\nIFBleQ== 36206\ndXJ1bg== 36207\nIHNlbnph 36208\nIOyngOyXrQ== 36209\nIE5hdG9taWFzdA== 36210\nIGVtZXJnZW5jZQ== 36211\ncmF5cw== 36212\nIGNyYWZ0ZWQ= 36213\nZ2FyeQ== 36214\n44Gg44GR 36215\nw7xuZw== 36216\nLSI= 36217\nIGhhY2tlZA== 36218\nIHN0cmF5 36219\nZW5jaWU= 36220\nZW1v 36221\nIGNvbWVu 36222\nIEvEsXo= 36223\nIEphc21pbmU= 36224\nIEhpbmRp 36225\nbWFuYXM= 36226\nIGluZmluaXRlbHk= 36227\nZW1vbg== 36228\n7J24642w7JqU 36229\namFr 36230\nIHJvYXJpbmc= 36231\nw6lyaXF1ZQ== 36232\nc3dlaXNl 36233\nIFJvbGV4 36234\n5aCx5bCO 36235\nIFN0dWFydA== 36236\nYm5i 36237\nIGRpYWdub3Nl 36238\nIGNvaGVyZW50 36239\nIE1K 36240\n5rqW5YKZ 36241\nIHBpa2U= 36242\nbGF2 36243\nIG9yY2hlc3RyYWw= 36244\n0LDRgdGC0Lg= 36245\nIHRlcm1pbmFy 36246\nIGdhdGhlcmluZ3M= 36247\nIGNvbXBsaWFudA== 36248\nIHVwZ3JhZGluZw== 36249\nIHJlZ3VsYXRvcg== 36250\nIGxhbsOn 36251\n6YCj 36252\nIG1lcmNoYW50cw== 36253\ndGF3YQ== 36254\nIG1vbml0b3JlZA== 36255\nIHJlbmRyZQ== 36256\n5Lik 36257\nIHVudGVyd2Vncw== 36258\nYW5ndWFyZA== 36259\nZ2FyZA== 36260\nIEJlbG93 36261\nZHVpbm8= 36262\nINCm0LU= 36263\nIGltcGVkYW5jZQ== 36264\n7Jyh 36265\n5Lu9 36266\nIGFrdHVlbGw= 36267\nIFZhdGlj 36268\n5a2p 36269\nIHN0ZXdhcmRz 36270\nIGJyaWdodGVzdA== 36271\nIGtlbm4= 36272\nIGthdQ== 36273\nIE1hdHJpeA== 36274\nIEJhcms= 36275\nIPCfkQ== 36276\nIHRhcGVy 36277\nIGNhc2lubw== 36278\n16jXlA== 36279\neXNpY2Fs 36280\nIGJ1aWxkZXJz 36281\nIGN6xYJvd2ll 36282\nIE5lcGFs 36283\nICEi 36284\nIHRlcm1l 36285\nIGlubnljaA== 36286\nIG1hdGhz 36287\nIGRyYWZ0ZWQ= 36288\nIEJhbGs= 36289\nIGhlc2l0YW50 36290\nIHZvbHRhcg== 36291\nIHJldml2ZQ== 36292\nINGE0LjQu9GM0LzQsA== 36293\nIGFzc2Fzc2lu 36294\nIFNvbHV0aW9ucw== 36295\nIGR1ZWw= 36296\nIGJlYXJpbmdz 36297\n4LiE4Liw 36298\nIHJvb2tpZQ== 36299\naWthdA== 36300\nIGJpc2N1aXRz 36301\nIGNvcmRz 36302\n0YPQstCw0YLQuA== 36303\nQVJJTg== 36304\nIHByb2dyZXNzaW5n 36305\nIEdpcg== 36306\nIHBlbmV0cmF0ZQ== 36307\nIFN0b3JhZ2U= 36308\nZWlnaHQ= 36309\nINGC0YDRgw== 36310\nIGRvbsOtdA== 36311\nIHNpemlu 36312\nIG91dGRhdGVk 36313\nINC90LDRiNC4 36314\nIGFmZmly 36315\nIHNwb29ucw== 36316\nIG9uaQ== 36317\nIGZsYW5r 36318\nIEdvbA== 36319\naMOj 36320\nIHDDqXJp 36321\nIGhvbm9yYWJsZQ== 36322\nIEJyZWF0aGU= 36323\nc2NlbmVz 36324\nIG9idmlhbWVudGU= 36325\n0LjQutGB 36326\nINep157X 36327\nIHNtb290aGll 36328\nnojr 36329\nIGRpbWU= 36330\nIO2WiOyWtOyalA== 36331\nIGFwcGVs 36332\nIENhdGhvbGljcw== 36333\nIHNpbmdsZXM= 36334\nIGxhdGVu 36335\nIMOnw7xua8O8 36336\nIFZhZGVy 36337\n5o+b 36338\nIHZhcmTEsQ== 36339\nIElzdGFuYnVs 36340\nZ3LDqQ== 36341\nIEVsc2E= 36342\nw6ts 36343\nIGludmVjZQ== 36344\nIGNyYW5l 36345\nIG9iZQ== 36346\nIFNoYXJr 36347\nIHNtYWNr 36348\nIHJlc3RvcmluZw== 36349\nLlw= 36350\nIOu5oOs= 36351\nIGZhZGVk 36352\ndW1iZXJz 36353\nU2luZ2luZw== 36354\nIGRlcHJlc3Npbmc= 36355\ndGhlc3Q= 36356\nIFdhaHI= 36357\nIG11bHRpdHVkZQ== 36358\n0YDQsNCy0YHRgtCy0YPQudGC0LU= 36359\ncmlqaw== 36360\nZWth 36361\nIGNvbXBsZXRlcw== 36362\nIFdlbGxz 36363\nIHJveQ== 36364\nIFByYXk= 36365\nIEthbGF1 36366\naXppbg== 36367\naWHFgmVt 36368\nIGxvY29t 36369\nIE5hc2h2aWxsZQ== 36370\nIFBlbnRhZ29u 36371\n66+4 36372\nIE5FVw== 36373\nxIXEhw== 36374\nw61zcw== 36375\nIG1hcnJ5aW5n 36376\nIGZldWQ= 36377\n7ZmV 36378\n5oCl 36379\nKSE= 36380\nIE9wZXJhdGlvbnM= 36381\n0YPRlA== 36382\nIG1vamU= 36383\nIGluc3RydWN0ZWQ= 36384\nIOuIhOq1rA== 36385\nINeU15I= 36386\nINC/0L7QvNC+0YnRjNGO 36387\nIHNhYmlh 36388\n7JWY7Ja07JqU 36389\ncGxhbmU= 36390\ncHJp 36391\nINC/0L7Qu9C90L7RgdGC0YzRjg== 36392\nIEtpdHR5 36393\nIHByw7Nwcmlv 36394\nZWRlcmU= 36395\nIGludGVyZXNhbnRl 36396\nINC00LU= 36397\nIGNvbmRlbnNlZA== 36398\nIGF2ZW50 36399\nVE9S 36400\nIGdyZWFzeQ== 36401\nQVJL 36402\nb3J0YQ== 36403\nQUo= 36404\nIGRpc3JlZw== 36405\nIGNvcnJlY3Rpb25z 36406\nIHN0ZXJv 36407\nIGluZmx1ZW56YQ== 36408\nIGRlc3Nlcw== 36409\nIGJhbGxvdHM= 36410\nIG1lZ2V0 36411\nIG1hZmlh 36412\nIGLDtmw= 36413\nbm9zdA== 36414\nINGB0YLQsNGC0Yw= 36415\nIHJlc3BvbmRlcg== 36416\nIGhpbnRlbg== 36417\nZ3Jhdg== 36418\n4Lit4Liw 36419\neW5jaHJvbg== 36420\nIHZpZW5z 36421\nIHNhbW8= 36422\nIGR0 36423\ncGFubnQ= 36424\nIMWbd2lhdA== 36425\nINC30LDQv9C40YE= 36426\nIG1lcmdlZA== 36427\nIGtlcA== 36428\nIG1pc2xlYWRpbmc= 36429\nIGRpZ2Ftb3M= 36430\nIGFtbW9u 36431\n6L6b 36432\nY2hldA== 36433\nIOqwgOyguA== 36434\nIHVuaQ== 36435\nIOuQmOuKlOuNsA== 36436\nINC90LDQv9GA0LDQsg== 36437\nINC60L7RgtC+0YDQvtCz0L4= 36438\nIGFuaW1hdGU= 36439\n15XXkNc= 36440\n0LXRgNCy 36441\nIG1pbmNlZA== 36442\nIGthdW0= 36443\n44GC44GB 36444\nz4DOtQ== 36445\n0LvQtdCz 36446\nZXhpc3Rpbmc= 36447\nIHBsYXRhZm9ybQ== 36448\nIEtSSVM= 36449\n7Jug 36450\nIEZhbWlsaWVu 36451\nIExpYnlh 36452\nIGJpb2RpdmVyc2l0eQ== 36453\nIGlkaW90cw== 36454\naXJkaQ== 36455\nIHN6eWI= 36456\nIFJvbGxpbmc= 36457\nw7xjaHQ= 36458\nINGD0LTQuNCy 36459\n0YHRg9C0 36460\nIHJlYWxpemFy 36461\nIGNhbm5lZA== 36462\nINGA0LDQvQ== 36463\nIG1ldGFib2xpYw== 36464\nIEJlZWY= 36465\nIGtpbGth 36466\n0LvRjtGB 36467\nIHJlZ2lzdHJ5 36468\n0LzQvtGC0YDQuNGC0LU= 36469\nIHZpZWzDpA== 36470\nIG9kYw== 36471\nIGNvbmRlbW5lZA== 36472\n5qmL 36473\nZmFs 36474\nIERpbA== 36475\nd2/Fm2Np 36476\nQXc= 36477\nIHN0YXRpc3RpY2FsbHk= 36478\nIHNvZ2Vu 36479\nIEJFVEg= 36480\nIHNoYXZpbmc= 36481\n5bm4 36482\nb2NhbA== 36483\nIEZ1bm55 36484\nIHBlYWNlZnVsbHk= 36485\nIGFkZGljdGl2ZQ== 36486\nIEluc2VydA== 36487\nbGF1Zg== 36488\nIGV4cGVyaWVuY2lh 36489\n6aaW5YWI 36490\n0LjRgtC10LvRjw== 36491\nw61nZW4= 36492\nw6FnaW5h 36493\nIGFiZG9tZW4= 36494\n7ZWc64uk 36495\naWN1cw== 36496\naW1hbmE= 36497\n7I2o 36498\nYXJjaGluZw== 36499\nIGtvbmtyZXQ= 36500\n7JWY6w== 36501\n0LXQutCw 36502\nb3VmbA== 36503\naXZlbA== 36504\nIG51ZGU= 36505\nw6h0cmVz 36506\nIG1vbnNpZXVy 36507\nIGNsYXNo 36508\nIHRoZXJhcGlzdHM= 36509\nIGN1YmVk 36510\nIHJldHJvdXZlcg== 36511\nIHdhdmVmb3Jt 36512\nIHBvdGVt 36513\nIEZvcm1lcg== 36514\naXNpw7Nu 36515\n5bqc 36516\nINeQ150= 36517\ndW5kb3M= 36518\nIE1laW51bmc= 36519\n2LXZhA== 36520\nIEp1ZGU= 36521\nIG7DpXI= 36522\nIExlb25hcmRv 36523\nIENyaXN0bw== 36524\nIEdPVA== 36525\n0YHRgtGA0YPQug== 36526\nTEFO 36527\nIGfDpW5n 36528\nIGTDqWI= 36529\nIEZyYW5rZnVydA== 36530\nIGNyYXBweQ== 36531\nIGxpbA== 36532\nYW5uw6ll 36533\nINC80LXRgdGC0LU= 36534\nUkVU 36535\nIE5lcg== 36536\nIENPU1RB 36537\nIGplZGVt 36538\nIGN1cnRhaW5z 36539\nIGl0ZXJhdGlvbnM= 36540\nIHVuYXY= 36541\nIHBsYXF1ZQ== 36542\nb3J1bQ== 36543\nIM62 36544\nIG7Dum1lcm9z 36545\nIGRlc2Fw 36546\nsr0= 36547\nIGNvbXBpbGVk 36548\nIHJlZmxl 36549\nIHJhbmtpbmdz 36550\nIHJlcGFpcmVk 36551\nINCd0LDQv9GA 36552\nIGRvd25sb2Fkcw== 36553\nIGFybW91cg== 36554\nINeZ15XXqteo 36555\nIGxvbmdldml0eQ== 36556\nIFRPTkVS 36557\nINC60L7QvNC80LXQvdGC0LDRgA== 36558\nIGN6ZWdv 36559\nIG5vdGlmeQ== 36560\nIGFpcnBvcnRz 36561\nIGVuZHVyaW5n 36562\nbGV0dGU= 36563\nIGFwcGFyYXQ= 36564\nIGhhYmls 36565\n4buHYw== 36566\nbmFk 36567\nSUNP 36568\nIEJyYWg= 36569\nIHNlZ8O6bg== 36570\nIGdvdmVybm9ycw== 36571\na2FoYQ== 36572\nIFNjaGx1c3M= 36573\nIG9kcG93aWVk 36574\naXJ0aW5n 36575\nIHJlbXBs 36576\nIEFib3JpZ2luYWw= 36577\naWRlbnRhbGx5 36578\nIGVuaGFuY2luZw== 36579\nbGljdGluZw== 36580\nIEhhd2FpaWFu 36581\nIHN0cml2aW5n 36582\nIE5pZXQ= 36583\nIHpuYWN6eQ== 36584\nIG9iZWRpZW5jZQ== 36585\nIG7DpWdvdA== 36586\nIGV4cGlyZWQ= 36587\nIDE5MTg= 36588\ncHJlc2VudGVk 36589\nIHByb3dhZA== 36590\nIFRlcnI= 36591\nIFByaW5jZXRvbg== 36592\nIG1vcmdlbg== 36593\nIGF0dHJhY3Rpbmc= 36594\nIFNpZ21h 36595\naWduZXI= 36596\nIFJlY2h0cw== 36597\nIFBla2k= 36598\nIG1ldGh5 36599\nIGhhbW0= 36600\nIGRpcmVpdG8= 36601\nIGRlbGVnYXRpb24= 36602\n0LjQstCw0Y7Rgg== 36603\nIGdpbg== 36604\nWW91bmc= 36605\nIGRlcGVuZGVuY2llcw== 36606\nIEJyYWRsZXk= 36607\nYnVkcw== 36608\nIGZpcw== 36609\nIHB5dGFuaWU= 36610\nIGludGVyY29ubmVjdGVk 36611\nIGVtYmFpeG8= 36612\nIFNhcw== 36613\nIHJ1aA== 36614\nIFNpY2h0 36615\nU3Vy 36616\nIHN1cGVyYg== 36617\nIFNhYmJhdGg= 36618\nIERhbmdlcg== 36619\na29s 36620\nIGhvdQ== 36621\nc3VwcA== 36622\nIE5hY2lvbmFs 36623\nIHN1Y2Nlc3Npb24= 36624\nIHbDoQ== 36625\nIE1hw59uYWhtZW4= 36626\nIEplc3NpZQ== 36627\nIElkYWhv 36628\nZm9yZXN0 36629\nhZg= 36630\nINee15M= 36631\nINij2Yo= 36632\nIHN3ZWV0aGVhcnQ= 36633\nIG5lYXRseQ== 36634\nIEV2YW5nZWw= 36635\n6rOh 36636\nIFN1aXRl 36637\nw7pibGljYQ== 36638\nINGD0LvQuA== 36639\nIEFubm91bmNlcg== 36640\nbGlnaA== 36641\nIHNlbnNhdGlvbnM= 36642\nIHNoZWx0ZXJz 36643\nIGhhcnQ= 36644\nIHNxdWVlemluZw== 36645\nIFJpdmVycw== 36646\nIENvb2tpbmc= 36647\n7LGF 36648\ncGVyc29uYWw= 36649\nIG1hbm9z 36650\n0ZHRgtGB0Y8= 36651\nd2lq 36652\nIGdvZ2c= 36653\nIE1pbGxp 36654\nIEZQ 36655\nw7xuc3Q= 36656\nIExT 36657\nIHNwcmF5aW5n 36658\nIGZhdXg= 36659\nIGF1dG9ncmFwaA== 36660\nb2xvZ2lj 36661\nIHRvcm1lbnQ= 36662\nIGVuY3J5cHRlZA== 36663\n4buF 36664\nIGVzdHJl 36665\n57m8 36666\n4LE= 36667\nIHN0dW1ibGVk 36668\nIGFpZGVy 36669\nIHNhYmVu 36670\neHRlcg== 36671\nIENpdGllcw== 36672\nIFTDvHJr 36673\n64ul 36674\nY2hpbmU= 36675\nIHRvcHBpbmc= 36676\nIHBvaXNvbmVk 36677\nIFJvbWFuaWE= 36678\n15PXmQ== 36679\ngOuhnA== 36680\nINC/0L7RgNGP0LQ= 36681\nIGNoaXJwaW5n 36682\nIOyZhOs= 36683\n15HXog== 36684\nIGN1YW50bw== 36685\nIGRvbmF0aW5n 36686\nIFJlZ2VudA== 36687\nIEJlcnVm 36688\nIGRpc3RyYWN0aW5n 36689\nIHN0YW1pbmE= 36690\nIERhcnJlbg== 36691\nIOy2lQ== 36692\nbGlzdHM= 36693\nZGFs 36694\nY2h1c3M= 36695\nIGVjb25vbWlzdA== 36696\n44GI44O8 36697\nb3JndA== 36698\nIGlzdGl5b3J1bQ== 36699\n6L+b 36700\nIFN1cnByaXNl 36701\nIEhhbw== 36702\nIOy1nOqzoA== 36703\nIEdX 36704\nIElubmVy 36705\nIHF1aWVyZW4= 36706\nIG1pbmRlZA== 36707\nIHN1cGVyY29tcHV0ZXI= 36708\nIGRpYWdyYW1z 36709\n7Yqc6w== 36710\n6rKg7Ja0 36711\nINC+0LHRitGP0YE= 36712\nIGVzdGFiYW4= 36713\nIGRlc3Ryb3lz 36714\nIEJyZWFraW5n 36715\nIGthcsSxxZ8= 36716\nIHJlYnVpbGRpbmc= 36717\nnOuMgA== 36718\n0LvQuNCy0L4= 36719\nIFNhdWNl 36720\nIEZ1c2lvbg== 36721\n15XXntc= 36722\nIFF1aW5u 36723\nIGdhdWNoZQ== 36724\nINmI2KM= 36725\nIMg= 36726\n55Oc 36727\nIHRlY2hubw== 36728\nIGRpc3BhdGNo 36729\nIGHFn2s= 36730\nIGVpbnplbA== 36731\nIEdtYWls 36732\n554= 36733\nIOqwnOyduA== 36734\nINGB0LXQvNGM 36735\nIGpvdXJuZXlz 36736\nIGlodA== 36737\nIGZpYnJl 36738\nIGRyYW1hcw== 36739\nb3VjaGVk 36740\nIHJlbmFtZQ== 36741\nINC+0L/QtdGA 36742\nIHBvbw== 36743\nIERydQ== 36744\nINC40YLQvtCz 36745\nIHphc3Q= 36746\nIGNveg== 36747\nIHp1Y2No 36748\nIG9idGFpbmluZw== 36749\nIGNvbW11dGU= 36750\nIHN1Ym1lcg== 36751\nIFZpc2g= 36752\nIFJhYmI= 36753\nb2dn 36754\nIGh1dA== 36755\n7ZaI7Ja0 36756\n5q+U5aaC 36757\nZXJlbWk= 36758\nIM68zrE= 36759\nIGRpc2t1dA== 36760\nINCx0YPQug== 36761\nIGltcGFpcmVk 36762\nZGVwZW5k 36763\nINmI2Kc= 36764\nINGA0YPQug== 36765\nINCx0LDRgA== 36766\nIG94aWRhdGlvbg== 36767\nIHNpdHVhw6fDo28= 36768\nyZlu 36769\ndcOnw6Nv 36770\nIHNhZ3Rl 36771\nIFNFUg== 36772\nIENha2U= 36773\nIHR1cm1lcmlj 36774\nIEthaw== 36775\nYnVuZw== 36776\nIEvhuZvhuaPhuYdh 36777\nIHBvaXNvbmluZw== 36778\nIHNsaXBwaW5n 36779\nIFNheXM= 36780\n5bCx5Y+v5Lul 36781\nw7JuZw== 36782\n55+z 36783\nwqs= 36784\nIENsYXVkaWE= 36785\nIENoYXJhY3Rlcg== 36786\n0L3QuNGG 36787\nY29hdA== 36788\nIHByb2dyZXNzZWQ= 36789\nIEZlcmd1cw== 36790\nIOyYpOuK 36791\nIG9hdA== 36792\nb3JkYWJsZQ== 36793\nIExleQ== 36794\nIEhlcmF1cw== 36795\nIHJlc3VsdGFkb3M= 36796\nIEtheWxh 36797\nIHJpZmY= 36798\nIGNoZWdvdQ== 36799\nIHhp 36800\nIHNwYWNpb3Vz 36801\nIHJlY29nbmlzZWQ= 36802\nIGVjaA== 36803\nIFRpZQ== 36804\nIGxhdW5jaGVy 36805\nSmlt 36806\nIHN1cHByZXNzaW9u 36807\nIEltcG9zc2libGU= 36808\nIGd1aXRhcnM= 36809\nIEZvdXJpZXI= 36810\n0LjRh9C10YHQutC40Lk= 36811\nIFRoZXJhcA== 36812\nIEthZg== 36813\nY2VudGVyZWQ= 36814\nINGB0L7QvtGC0LLQtdGC 36815\nIGtsaW0= 36816\nIGNhcmJvaHlkcmF0ZXM= 36817\naWduYW50 36818\nIEFzdHJvbg== 36819\nIGVtcGxl 36820\nIGRyYXN0aWM= 36821\nINC80LjRgNC1 36822\n0LLQuNC9 36823\ndXc= 36824\nIHByZXR0aWVy 36825\nIGRvbnV0cw== 36826\nIEF0aGVuYQ== 36827\nIGRpc3NlcnQ= 36828\nIHBsYW50ZQ== 36829\nIHVyYW5pdW0= 36830\n7J2M6w== 36831\nYXLDqQ== 36832\nIHJ6ZWN6 36833\nIGRpc3BsYXlpbmc= 36834\n5oiy 36835\nIHNhcmM= 36836\ncsOjbw== 36837\nIHRhbXBvY28= 36838\nIHBoaWxvc29waGVycw== 36839\nIFJlY2h0 36840\n5pOa 36841\nIGNvbWVudGFyaW9z 36842\neXNl 36843\nIOycpA== 36844\nIG1pc2U= 36845\nIEdpbg== 36846\nINC90L7QvA== 36847\nIEZST00= 36848\nbGluZXI= 36849\nYXRpZg== 36850\nIHNwb8WCZWM= 36851\neGE= 36852\nINGC0YDRg9C0 36853\nIHdhZw== 36854\n6riw7JeQ 36855\nIE1H 36856\nIG9mZnNwcmluZw== 36857\nIFVuZGVyc3RhbmRpbmc= 36858\n5Y+q5piv 36859\nT1JB 36860\nIHdoaXJyaW5n 36861\nIHN1cnJlbmQ= 36862\nIHBva2Vy 36863\nIG1vbnVtZW50cw== 36864\nIOKZqQ== 36865\nIG9yZ2FuaXNlZA== 36866\nIFNvemlhbA== 36867\nIEZhY3Rvcnk= 36868\n0YXQsA== 36869\nIHJlc2VtYmxl 36870\n0LfQtA== 36871\nIGV4cGxvc2lvbnM= 36872\nIHBheXJvbGw= 36873\nIG9tbg== 36874\nIEpvcmdl 36875\nzrnPgw== 36876\nIGZyYWN0dXJl 36877\nIHBlcnNlY3V0aW9u 36878\nIGRlbWFpcw== 36879\nRUNI 36880\nLCk= 36881\nIGNyaWFy 36882\nIEpPU0g= 36883\nIGRlbW9ncmFwaGljcw== 36884\nIDE2MDA= 36885\nIGN1cnJlbmNpZXM= 36886\nIFRpcHM= 36887\nIOmAmeWAiw== 36888\nIFJlZmVy 36889\nIERhbmNpbmc= 36890\nIGluY29uc2lzdGVudA== 36891\nIGRlaA== 36892\nIGltbWVucw== 36893\nIG1laXN0 36894\nIGltcGF0aWVudA== 36895\nIGJlaGF2ZXM= 36896\n5p2+ 36897\nIOuCtOyaqQ== 36898\nIGJhY2tzdG9yeQ== 36899\nIGFncmVlaW5n 36900\nIMWB 36901\naWhpbg== 36902\nIHRlbXBlcmF0dXJh 36903\nIEJhY2tncm91bmQ= 36904\nIG51dHplbg== 36905\nIOuFuQ== 36906\nIE3DpG5uZXI= 36907\nIGNvbGxhYm9yYXRpb25z 36908\nIEtvcw== 36909\n6YGO5Y67 36910\nIG5pZ2h0bWFyZXM= 36911\n65Ox 36912\nIFF1ZWVuc2xhbmQ= 36913\nIGFzc29jaWF0ZXM= 36914\nIEtvaw== 36915\nIGZhY3RvcmlhbA== 36916\nIEh5dW5n 36917\nIOq3uOuLpOydjA== 36918\nIGZpbGhv 36919\nIGVsw6l0 36920\nIO2WieuztQ== 36921\nsLE= 36922\nIGdlZnVuZGVu 36923\nIHNlbWljb25kdQ== 36924\nIGNvdW5zZWxvcnM= 36925\nIFVwcGVy 36926\nIEF1Yg== 36927\naWNrZXJz 36928\nVmVy 36929\nIG5vcnRod2VzdA== 36930\nIE1haW50ZW5hbnQ= 36931\nIExha2Vz 36932\n0LDRj9Cy 36933\naW50w6k= 36934\n7LC9 36935\nINCz0LDQtw== 36936\nIGdpb3Ju 36937\nIGRpZ2l0YWxseQ== 36938\nIENpcmN1aXQ= 36939\n7LyA 36940\n44KK44G+44GX44Gf 36941\nIGNoZWVyZnVs 36942\nIFBldGVyc29u 36943\nIERhbmlzaA== 36944\nYXRpdm9z 36945\nIGxpa2Vu 36946\nIGhhcmJvcg== 36947\n0LDQu9C40YHRgg== 36948\neGU= 36949\nIGN1cmxz 36950\nIFJob2Q= 36951\nRW5k 36952\nIEVU 36953\nIGFjcXVhaW50 36954\nIEtlbHZpbg== 36955\nIHRyaWY= 36956\nIEF3YXk= 36957\n7J6Q64qU 36958\ndnM= 36959\nIHDDoWdpbmE= 36960\nIGlubGV0 36961\nIFNhbnRvcw== 36962\nIOyasOyZgA== 36963\nIHlhcMSxeW9yc3Vu 36964\ndGhlbWU= 36965\nIHNvdWZm 36966\nIGluamVjdGVk 36967\nIHDDs8W6bmllag== 36968\naXZlcnNv 36969\nYW1wZWQ= 36970\nIGRhaGVy 36971\nIGRhZ2dlcg== 36972\nINC70Y7QsdC40Lw= 36973\nIHR1bW15 36974\nIGVubGlnaHRlbmVk 36975\nY2VudHM= 36976\nIERhaA== 36977\nIGN1ZXN0 36978\n5L6G6Kqq 36979\nSUxZ 36980\nINeR16g= 36981\nIGJhbmdpbmc= 36982\nIEVtaWw= 36983\nIENsZXI= 36984\nIEJvcmRlcg== 36985\n0LjQttGD 36986\nIHByZXNlbnRlcnM= 36987\nIFNUVUQ= 36988\nY29pbnM= 36989\nIO2ZjQ== 36990\nIHBlcmtz 36991\nIHBhcmFw 36992\nIGNlcnRhaW5lcw== 36993\nIExvcmU= 36994\nw7ZzdA== 36995\nIE1BUlRJTg== 36996\nIGJpb3M= 36997\nIHdoZXJlYnk= 36998\ndmVydHM= 36999\nIE1pcmFuZGE= 37000\nIHN0aXA= 37001\n5r6k 37002\nYW5kZXo= 37003\n15vXnA== 37004\ndWppbg== 37005\nIOq+ 37006\nIGFsbGVyZ2llcw== 37007\ncGxhdGU= 37008\nIHlhcMSxbA== 37009\nIHVuZGVydGFrZQ== 37010\nIOuCmOqwgA== 37011\nUGFydA== 37012\nIGvEsXrEsW0= 37013\naGd1cnU= 37014\n44GC44Go 37015\nIEpvaG5z 37016\nIGV5ZWxhc2hlcw== 37017\nIGRyYWluZWQ= 37018\nIHN0w6Vy 37019\n44GC44KK44G+44GZ 37020\nIEphZGU= 37021\nIGNhbGVuZA== 37022\nZmlsbQ== 37023\nIG1lc2E= 37024\nIGx1ZHppZQ== 37025\nIGF0dHJhY3Rz 37026\nIGp1aWNlcw== 37027\nINC60LjQuw== 37028\nIG5pZXV3ZQ== 37029\nIG1lbmNpb24= 37030\nIGlnbml0aW9u 37031\nIGJsYWRkZXI= 37032\nYW5kYWFn 37033\nIEV4dGVuc2lvbg== 37034\n7YKo 37035\nZmVlZA== 37036\nINmI2Yc= 37037\nIHNwdW4= 37038\nIHTDpHQ= 37039\n0L7RgNC+0YI= 37040\ndHlhcmQ= 37041\ncm9uaWNz 37042\nIEh1Z2U= 37043\n0YPQttC0 37044\nc3RyaW5n 37045\nIHVuanVzdA== 37046\nIHByYXdu 37047\nIGZyb3N0aW5n 37048\nIGRpc2FwcGVhcmFuY2U= 37049\naW9zYQ== 37050\nIGNhcmRp 37051\nIFByaWVzdA== 37052\nIGNpZW50w61maWM= 37053\n5ZOq6KOh 37054\nINCS0LDRgQ== 37055\nIOu2gO2DgQ== 37056\nIHRoaWV2ZXM= 37057\nIHBoeXNpcXVl 37058\nIEV1Z2VuZQ== 37059\nINCx0LvQuNC3 37060\nIG1vbm9wb2x5 37061\nIGJpb2dyYXBoeQ== 37062\nIGhvxZ8= 37063\nIHTDtg== 37064\nbWFj 37065\nIHNob2Nrcw== 37066\n7IS46w== 37067\naGl0 37068\nIHNudWc= 37069\nIGluY2w= 37070\nIGRlZGlj 37071\nIHVsdHJhcw== 37072\nINC40LfQstC10YHRgg== 37073\nIHV0aWxpemF0aW9u 37074\nINGB0L7QstC10YDRiNC10L3QvdC+ 37075\nIHNlcnZp 37076\nc3RhZw== 37077\nMTgw 37078\nIHNld2Vy 37079\nIENob2ljZQ== 37080\nIGRpc2NoYXJnZWQ= 37081\nIEpE 37082\n0L7Qu9C10YI= 37083\nINC60LLQsNGA0YLQuA== 37084\nIHRlbGVzY29w 37085\nIEplxZtsaQ== 37086\nIE5hbmE= 37087\nY2FsZQ== 37088\nINGC0L7QvQ== 37089\nbW1t 37090\n5LqG5ZCn 37091\nIGdlaGFidA== 37092\n64Kg 37093\n5oqV 37094\n4LiZ4LiZ 37095\nIGV0aGVy 37096\nIHplbg== 37097\nIHJlc2VhcmNoZWQ= 37098\nIEN6eWxp 37099\n5a6M5YWo 37100\nd29ya2Vycw== 37101\nIOqyveywsA== 37102\nIHNoZXJpZmY= 37103\nYWxsbw== 37104\nIHRpcG9z 37105\nIHByb3NlY3V0aW9u 37106\nIGZyb2dz 37107\nIGZhbHQ= 37108\namQ= 37109\nIO2MlA== 37110\nIGZpbHRlcmVk 37111\nIE9mdA== 37112\nIOyN 37113\nIGRpc2Zy 37114\nIE11c3Rhbmc= 37115\nIHdvYWg= 37116\nIFJFQUxMWQ== 37117\nINC80L7Qs9C70Lg= 37118\nIGVudHJhZGE= 37119\nINC40LPRgNCw 37120\nIG1peGVz 37121\nINCw0LLRgtC+0LzQvtCx 37122\n0Jk= 37123\nIHNoaW4= 37124\nIHBhcmFub3JtYWw= 37125\nIHNvbWVwbGFjZQ== 37126\nIGRpc2hvbg== 37127\nZXRhYW4= 37128\nIGZ1ZXJ0ZQ== 37129\n2bk= 37130\nIGRvb20= 37131\n7Iic 37132\nIGV4aXN0ZW50aWFs 37133\nIGJ1bGQ= 37134\nIFNESw== 37135\nINC/0YDQsNCy0LTQsA== 37136\nIHR1cm5vdmVy 37137\nIOyXrOq4sOyXkA== 37138\nIOCkuQ== 37139\nIG1vZGVsZWQ= 37140\nIGJ1Z8O8bg== 37141\nIGV4cGVyaW1lbnRhdGlvbg== 37142\nIG1vcm5pbmdz 37143\nIG1lZG8= 37144\nU3Rldmll 37145\nIHBsYXlhYmxl 37146\nIGFpcmxpbmVz 37147\nZ21lbnRz 37148\nIOq4sOu2hA== 37149\nIFRvbWI= 37150\nIE1WUA== 37151\nQVVESUVOQ0U= 37152\nIGNoZWNrb3V0 37153\nIHBhc3N0 37154\nIGJlaXNwaWVs 37155\nIExpbmtz 37156\naGVhdnk= 37157\nIHF1ZXN0aW9uYWJsZQ== 37158\nIOyTsOs= 37159\nIHNpbGw= 37160\nIG1hbmlwdWxhdGVk 37161\nIExvcmVu 37162\nIOycvA== 37163\nIHZlcmdl 37164\nw6Fr 37165\nSUVT 37166\nIHNhYm90 37167\nIEN1c3RvbWVy 37168\nYWxlxbx5 37169\nIG5vbWluZWU= 37170\nIEdhZA== 37171\nIG5vdXZlbGxlcw== 37172\nIFNQRQ== 37173\naXN0bGluZw== 37174\nIG92YWw= 37175\n0L7QsdGA0LDQtg== 37176\naWZ0eQ== 37177\n6YeO 37178\nIGJlemVs 37179\neWV0 37180\nIGZyZWlnaHQ= 37181\nIEhhbsSxbQ== 37182\ncsOtYQ== 37183\nIHpvbmluZw== 37184\nIGluZGVt 37185\nIELDvA== 37186\nIGZlbWluaXNt 37187\nIHZvaXg= 37188\nIG9maWNpYWw= 37189\nIGRpeW9ydW0= 37190\nu5A= 37191\nIGFyb3Nl 37192\nIHBhcmFy 37193\n7J247KeA 37194\nIE1hcnRpbmU= 37195\nIExlY3Q= 37196\nIHJlc3Rlcg== 37197\nIGRyb3duaW5n 37198\ndXlh 37199\nY2lkYQ== 37200\nIEFyaWVs 37201\nIDAy 37202\nINeU15Q= 37203\n57Sg 37204\nIFdlcnQ= 37205\n0KLRiw== 37206\nIHdpZG93 37207\nIHBhcmNobWVudA== 37208\nIGNvdHRhZ2U= 37209\nIFhM 37210\nIFNsYWNr 37211\nIE5FUw== 37212\nIHJvYmU= 37213\nIGdpbW0= 37214\nIGNhbWluaG8= 37215\nIEhhcnBlcg== 37216\nIGNpdHJ1cw== 37217\nIGZpcmVmaWdodGVycw== 37218\nIGRvcGFtaW5l 37219\nZWxldHM= 37220\nIGRlbW9jcmF0 37221\n7KCc66Gc 37222\nIHBsYXliYWNr 37223\nb2o= 37224\nINC/0YDQvtC6 37225\nIFN1bGxpdmFu 37226\nc2VtYmxl 37227\nIFdvcnRo 37228\nIE11c3RhZmE= 37229\n4Liy4Lij 37230\nIG1ldHM= 37231\n6ZaA 37232\n0LvQvtGB0Yw= 37233\nIGluZXJ0aWE= 37234\nIHVuaWZvcm1z 37235\n6Laz 37236\nw6lyaW8= 37237\n15XXqNeU 37238\nw6ludA== 37239\nIOCukg== 37240\nINGB0LDQvNGL0YU= 37241\nIHZvdWxhaXM= 37242\nIFppbW1lcg== 37243\n6rKg6w== 37244\nINC90L7RgQ== 37245\nZW5jaWFz 37246\nIHJlbGFjacOzbg== 37247\nIOqxuOs= 37248\nIGZhY3Rpb24= 37249\nIGdvc3A= 37250\n0L/QvtC70L7Qtg== 37251\nbmFw 37252\naGFr 37253\nIHByb2NlZWRpbmdz 37254\nIOyGlA== 37255\n7JWE64uI 37256\nIOyekOq4sA== 37257\nIHdlcmQ= 37258\nIHNvZg== 37259\nIHNjaGxpbQ== 37260\nIGZsYXZvcmVk 37261\nIHF1YWRyYXRpYw== 37262\nIEJvb3Q= 37263\nIHB1YmxpY2l0eQ== 37264\nIENhcm8= 37265\nID8i 37266\n0L3QuNGG0LA= 37267\nbWFuaWE= 37268\nIFNVUg== 37269\nIEJVUg== 37270\nbGFuY2U= 37271\nw6l0aWNh 37272\nIHpvYmFjenk= 37273\nIHRyaW8= 37274\nc2FtYQ== 37275\nIHRhxZ8= 37276\nIGFzeW1t 37277\ncmVzc2Vy 37278\nINiq2Lk= 37279\nINC/0LXRgQ== 37280\nIGJlZ2lubmluZ3M= 37281\nbGFkxLFt 37282\nINCx0YvRgdGC0YA= 37283\nIG1vbw== 37284\nIEdlbmV2YQ== 37285\nIOWcqA== 37286\nZXJ1cw== 37287\nYm9yYWg= 37288\nIHJlZnVzaW5n 37289\nYnVsbA== 37290\nIFdhaXRpbmc= 37291\nIEluZGl2aWR1YWw= 37292\nIGFub255bQ== 37293\naW1lbnM= 37294\nIG1lZGlkYXM= 37295\nIGZyYWdyYW50 37296\nIGRpcmVjdGVtZW50 37297\nIOyVhOuniA== 37298\ndXJpYQ== 37299\nIHNwaGVyaWNhbA== 37300\nIGFiZ2U= 37301\nIFZpY3Rvcmlhbg== 37302\nIHNwZWN0YWNsZQ== 37303\nIFJvZHJpZ3Vleg== 37304\nIG9jdXA= 37305\nIE7DpHI= 37306\nbWFya3M= 37307\nbmd1bG8= 37308\nIEx1Y2k= 37309\nIHNob3V0ZWQ= 37310\nIHJlZ3VsYXRvcnM= 37311\nxJ9pbmk= 37312\nIGRpc2VudA== 37313\nINGA0YvQvQ== 37314\n64Ko 37315\nIOyCtOs= 37316\nIHByb2Jsw6htZXM= 37317\nIEZpbmdlcg== 37318\nYXNzZW1ibGU= 37319\nIHBlYXI= 37320\nIGRyb2l0ZQ== 37321\nIEV2ZXJ5d2hlcmU= 37322\ndGFt 37323\n0L7RgtC40LI= 37324\n0LLQvtC5 37325\nb3JkaW5hdGU= 37326\nIExhaw== 37327\nIG3hu5tp 37328\nIFRlbGV2aXNpb24= 37329\nIGV4cG9uZW50aWFsbHk= 37330\nYXZhcw== 37331\nIGJsZXY= 37332\nIE1U 37333\n5L+6 37334\nQ29ubmVsbA== 37335\nIOq1reuvvA== 37336\nINGB0LLQvtC40Lw= 37337\nIGFjaGE= 37338\nIER5bmFzdHk= 37339\nSmlu 37340\nIHRvcmU= 37341\nIGZsb3I= 37342\nINC80L3QvtCz0LjQtQ== 37343\n5rKS5LqL 37344\nb3dhbg== 37345\nYmFo 37346\nIOyjhA== 37347\nIENlbGE= 37348\nIOy1nOq3vA== 37349\nIHBlcm1ldHRyZQ== 37350\nIGFicmFz 37351\nIHZlcnN0ZWhlbg== 37352\nIGVzY29ydA== 37353\nIFRoZW0= 37354\nw6Rya2U= 37355\ncG9ydGVy 37356\nIGthaGthaGE= 37357\nIGhlY3Q= 37358\nIGRhdQ== 37359\nd2Fo 37360\nb2x2ZQ== 37361\nIEFnZXM= 37362\nc2NoYWZ0 37363\nIFN0ZWxs 37364\nbmVsbGU= 37365\nIEVuc3VpdGU= 37366\nINCS0YHQtdC8 37367\nIGNyw6lk 37368\nIFBQ 37369\nbG9yZHM= 37370\nZ3J1bnRpbmc= 37371\nIGNvbnRyYWN0aW9u 37372\nR290 37373\nIGFjcXVpcmluZw== 37374\nIHNvcHI= 37375\nIHBvaXNvbm91cw== 37376\nUk5B 37377\nIGFuYXI= 37378\nIEhvZg== 37379\nJyk= 37380\nIHJlbWFya2FibHk= 37381\nIGludGVybmFjaW9uYWw= 37382\nw7xja2U= 37383\naW5xdQ== 37384\nIGR1eQ== 37385\nIGJlYXN0cw== 37386\nIExBTg== 37387\nIHByZWNlZGVudA== 37388\nIFJQTQ== 37389\n5ZGo 37390\nIHNlbG9u 37391\nIG1vcnRl 37392\nIGNvbWXDp291 37393\n0Y/Qu9Cw 37394\nIGludGVycHJldGluZw== 37395\nIEJ1cmtl 37396\n0YLRgNCw 37397\nIOydtOufrA== 37398\nIHBlc3NpbQ== 37399\nIE5vaw== 37400\n7Yyd 37401\nRmVtYWxl 37402\nIOyLpO0= 37403\nmYA= 37404\nIHN0aW11bGF0aW9u 37405\nIHNsaWNr 37406\nIOqwgOuKlA== 37407\nINC60LDQtw== 37408\nIEhCTw== 37409\nIHBhcGllcg== 37410\nIGvDtm5udGVu 37411\n0YPQsdC70Lg= 37412\nIENvbnN0YW50 37413\nU1BFQUtJTkc= 37414\nIGt0w7NyxIU= 37415\nIGNvc21ldGljcw== 37416\nIFRyZW5k 37417\nIHJvYmJlcnk= 37418\nIHRpdHQ= 37419\nIGdqb3J0 37420\nIGRpZXRhcnk= 37421\noIw= 37422\nIEtpcmJ5 37423\nINC/0YDQuNC80LXRgNC90L4= 37424\nIHF1YWxpZmljYXRpb24= 37425\nIOyViQ== 37426\nIGNhYmluZXRz 37427\nIGh0dHA= 37428\nIEVyaWNh 37429\n576p 37430\nIGRpc2FkdmFudGFnZXM= 37431\nIGNoYXR0ZXJpbmc= 37432\neXo= 37433\nZmVpdA== 37434\nIGd1aWxk 37435\nIEVURg== 37436\nIERyYWdvbnM= 37437\nIEhFUkU= 37438\ndmVudGg= 37439\n2YTYp9mF 37440\nIG1hcmNow6k= 37441\nRGFt 37442\nIHBob3Rvbg== 37443\nIGVzdGFibGU= 37444\nTWFn 37445\nIG9saGFy 37446\nIGNvdXBsaW5n 37447\nIEhpbGZl 37448\nIFdpemFyZA== 37449\nINC80LDQu9C+ 37450\naGVscA== 37451\nIGzDrW5lYQ== 37452\nIOyr 37453\nIHN0YW5kYWxvbmU= 37454\nIG1vcmFsZQ== 37455\nIHp3ZWl0ZQ== 37456\n44KI44KN44GX44GP 37457\nw6RocnQ= 37458\nIGRvdHRlZA== 37459\nIGRyaXBwaW5n 37460\nIEZsYWc= 37461\n6Z2S 37462\ncm9ja2V0 37463\ncmF0ZWd5 37464\naXJpbQ== 37465\nIO2VmOuptOyEnA== 37466\nIHNvZ2VuYW4= 37467\nIFVubw== 37468\nIFNjaHV0eg== 37469\nIGVzdGlsbw== 37470\nIFN1YnM= 37471\nIERhaXN5 37472\n0J3QtdGC 37473\nJy4uLg== 37474\nIHBsYXRpbnVt 37475\nIGJpcmw= 37476\nIFNvdmk= 37477\nIHZpb2xhdGU= 37478\n0YPQtdGC0YHRjw== 37479\ncmlsbA== 37480\nIHRyYXo= 37481\nIHNuaXA= 37482\nIGN1bXBs 37483\n4Lit4LiB 37484\nIGN1aw== 37485\n6YWS 37486\nIFBhcmxhbWVudA== 37487\nIGh5cGVydA== 37488\nIHB1bHA= 37489\nIHRvbmd1ZXM= 37490\nYXR0bw== 37491\nIGJ1c2Nh 37492\naWhu 37493\nRVJP 37494\nINmK2Lk= 37495\nIHZhcmlhcw== 37496\nIE1hcmlhbg== 37497\nIGJvdW5kZWQ= 37498\nIHBpdGNoaW5n 37499\nIGRlZmljaWVuY3k= 37500\nIEJsZXNzZWQ= 37501\nIEV4ZXJj 37502\ndWNocw== 37503\nIG5oxrBuZw== 37504\n5pys5b2T 37505\nIHJhcGVk 37506\naGFsZXM= 37507\nIG1hbGE= 37508\ncGlj 37509\nIDQwMQ== 37510\nxZtuaWVq 37511\nYXJpbmE= 37512\n65Ok7J2E 37513\nb3R0aQ== 37514\nINC00L7Qu9Cz0L4= 37515\nIHRyYWNrZXI= 37516\nIFNoZWxieQ== 37517\nIHZhbmlzaGVk 37518\nIGJha2VyeQ== 37519\nS2FwxLE= 37520\nSmVzdXM= 37521\nIEtS 37522\nSk8= 37523\nhbg= 37524\nIGRpc2Nz 37525\n7ISv 37526\n7KeA6w== 37527\n15nXpg== 37528\nZW1hcnk= 37529\nS2VuZHJh 37530\nIHnDvGs= 37531\nw7xja3Q= 37532\nIHZheg== 37533\nIGt1cA== 37534\nYWt0dQ== 37535\nINGB0L/QsNGB0LjQsdC+ 37536\nIGFpaw== 37537\nIG51cnNlcnk= 37538\nIGVuZGFuZ2VyZWQ= 37539\nw6ptZW1lbnQ= 37540\nZW1hdGljcw== 37541\nIHJlc3BvbmRlcnM= 37542\nIFJlcHJlc2VudGF0aXZlcw== 37543\nIHNjdWxwdHVyZXM= 37544\naWdrZWl0ZW4= 37545\nIGRlcGw= 37546\nIGludGVycHJldGF0aW9ucw== 37547\nIGRlYWRsaW5lcw== 37548\nIDE5NDI= 37549\nw5c= 37550\nIHN1Z2Fycw== 37551\nZW11 37552\nbGl2ZWx5 37553\nIHJlY3JlYXRpb25hbA== 37554\nIGRpc3RvcnQ= 37555\nIHVuZGVyc2NvcmU= 37556\nIHVucXVvdGU= 37557\nIHNhZmVzdA== 37558\nIHN3b2xsZW4= 37559\nIGFuYWx5c2Vz 37560\nIGNvbW1lbmPDqQ== 37561\n5aa5 37562\nYW5kaW4= 37563\nINCl0L7RgNC+0YjQvg== 37564\nIGRpYXJy 37565\n44G+44GB 37566\nemllc3Q= 37567\nIHRvb3RoYnJ1c2g= 37568\n6aC76YGT 37569\ndWF0aW9ucw== 37570\nIGNhZGU= 37571\nIGJhY2tsYXNo 37572\naGluZA== 37573\nIHJpc3F1ZQ== 37574\nemVzcw== 37575\nIOydtOyVvOq4sA== 37576\nIGVzcGVyYXI= 37577\nIHRyYW5zbGF0aW9ucw== 37578\naW9uZWQ= 37579\nZ3JvYW5z 37580\nINC/0YPRgg== 37581\nIGdlbmV0aWNhbGx5 37582\n6YCg 37583\nIGhhcHBpZXN0 37584\nIHdlcms= 37585\nYXRvb24= 37586\nIG11c2k= 37587\nIGZ1bsOnw6Nv 37588\nIOyeheuLiOuLpA== 37589\nINGA0LDQuQ== 37590\nIGJldm9y 37591\nQkxBTks= 37592\nIHJlcGVudGFuY2U= 37593\nUHV0 37594\nIHBvdHJ6ZWI= 37595\nIHNhbGE= 37596\nIGNhbXBh 37597\nV0VS 37598\nIGRlY8OtYQ== 37599\nIHPDqWN1cml0w6k= 37600\nIEFwcHJlY2lhdGU= 37601\n0YfQuA== 37602\nIFJhbmRvbQ== 37603\n67OE 37604\na2Fo 37605\nIG3Dtmo= 37606\nIHPDpGdlcg== 37607\nINeZ15vXldec 37608\nIDE5MA== 37609\neHR1cmVz 37610\nRXU= 37611\nIGfDpA== 37612\nINeR16o= 37613\nIENyb2F0 37614\nYXBv 37615\nUExF 37616\nIHBlcnNpc3RlbmNl 37617\n5Yqp 37618\nIGJsZW5kcw== 37619\nIHRyZWZmZW4= 37620\nIFNhbnRpYWdv 37621\neWRpYQ== 37622\nYWxkbw== 37623\nIFRlbnNvckZsb3c= 37624\nIER1YWw= 37625\n44Oc 37626\nIGNoaWZm 37627\n7Je0 37628\nIGNvbnRyYWN0ZWQ= 37629\nIHNlZ3JlZw== 37630\nIEZhaXJ5 37631\nIHdpc2VseQ== 37632\nIHZ1bG5lcmFiaWxpdGllcw== 37633\nIGhhbmRoZWxk 37634\nIGdhZGdldHM= 37635\nIGJvxZ8= 37636\nIFBvcHVsYXI= 37637\nIGN1cnZhdHVyZQ== 37638\n66y4 37639\nIE1BUlk= 37640\n7J207Io= 37641\nIGZvcm11bGF0aW9u 37642\nIGNlbGVyeQ== 37643\nIGJsdXJyeQ== 37644\nIFRT 37645\nYWxleg== 37646\nIHdz 37647\nIHByb2dyYW1t 37648\nIFN0YWNr 37649\nIEpJTQ== 37650\n0L7QstCw0LvQuA== 37651\nxLFsbA== 37652\nIHDDqHJl 37653\nIEthbnll 37654\nIERlbGF3YXJl 37655\nIOOBoA== 37656\nIGRhdW50aW5n 37657\nINCx0LXRgQ== 37658\nIFN0dXBpZA== 37659\nYmln 37660\nZmZpY2lhbA== 37661\nIHByZWNpcGl0YXRpb24= 37662\nIHBsdW5n 37663\n4bulYw== 37664\nYnVyc2U= 37665\nIGRhcmxl 37666\nIGNyaXBw 37667\nIHBpb25lZXI= 37668\nIGRpc3B1dA== 37669\nIHNlYW4= 37670\n44GT44KT44Gq 37671\nIHJlc2lzdG9y 37672\nIGFsbGVpbg== 37673\naXBwbGVz 37674\nYXJlbA== 37675\nIGVuZG9ycw== 37676\nenVzdA== 37677\nINGA0LXQsdGP0YLQsA== 37678\nZWRlZA== 37679\nIOy5tOuplOs= 37680\nIGxsZXZh 37681\nIGtlbm50 37682\nINCx0LDQuw== 37683\nIERvY3VtZW50 37684\nIEtuaWdodHM= 37685\nIGJ1Y2tsZQ== 37686\nIOyJrA== 37687\nIGFsaw== 37688\nIEV2ZXJ5ZGF5 37689\nYXR0ZXJz 37690\nIHRvaWxldHM= 37691\nIGp1Z2Fy 37692\nIOyeiOyngA== 37693\nIGdlbmF1c28= 37694\nIExhbmRlc3JlZ2llcnVuZw== 37695\n44Gj44Gx 37696\naWpl 37697\nIHRyYWlsZXJz 37698\nIFRpZ2Vycw== 37699\nIGdpdHRp 37700\nIGZvcmdpdmluZw== 37701\nIGNvbmN1cnJlbnQ= 37702\nIFZ1 37703\nIO2Kue2eiA== 37704\nIEJST1dO 37705\nb3VuZGVk 37706\nIjs= 37707\nIHRyZW1i 37708\nIHRpZXQ= 37709\nINGA0LXQttC40Lw= 37710\nIG51dHNoZWxs 37711\n0LXQu9C40Yc= 37712\nIGxvc2Vycw== 37713\ncmljdGluZw== 37714\nIHJlZGVlbQ== 37715\nZGVmaW5lZA== 37716\nTmljZQ== 37717\nIGJyb2FkYmFuZA== 37718\nS08= 37719\nIHRlYXNpbmc= 37720\nIHBhcnRpc2Fu 37721\nxLFtYQ== 37722\nIOyerOuvuA== 37723\nIEpvdXJuZXk= 37724\nIHNsb3Blcw== 37725\ndW5pbmc= 37726\nZ3J1bnRz 37727\nIHTDpGxs 37728\nIHVuY292ZXJlZA== 37729\nIG15xZtsxJk= 37730\nIEVzdGhlcg== 37731\n5LqO 37732\nIEhlYWx0aHk= 37733\nIOuwkQ== 37734\ncsOpZQ== 37735\nIHBvbGFyaXphdGlvbg== 37736\nIGZsYXY= 37737\nIGNhbWJpYXI= 37738\nIHly 37739\nIFJhbmNo 37740\nIHNwbGl0cw== 37741\nIHRyb3V2w6k= 37742\n5ZyL5a62 37743\nIHJlY29yZGVy 37744\nIGTDqXBhcnQ= 37745\n2YjYqA== 37746\nIEtyeQ== 37747\nIGludGVyZXNzYW50 37748\nIGVkZXJpbQ== 37749\nxZt3aWFk 37750\naWxhdGVyYWw= 37751\nd3JpZ2h0 37752\nIHBvdXJyYQ== 37753\nw6p0ZXI= 37754\nIGNhbWVs 37755\n4Z4= 37756\nIHJhcGlkZW1lbnQ= 37757\nIG1lag== 37758\nIHN0aWZmbmVzcw== 37759\nQURBUw== 37760\nIGRpZmZlcnM= 37761\nIGFsb3Q= 37762\nIFNpZw== 37763\n0Y/RgtC10LvRjA== 37764\nIGFic3RyYWN0aW9u 37765\n5ZyY 37766\nIGtlaW5lcg== 37767\nZ3J1cHA= 37768\nIFNoZXJsb2Nr 37769\n7ZiU 37770\nIGNpdGU= 37771\nIG92ZXJmbG93 37772\nIHThuqFp 37773\nw7pjYXI= 37774\nYnVsYQ== 37775\nIGNvbmp1bnRv 37776\nIENJ 37777\nIG1vZGVyYXRvcg== 37778\nIGluZGlyZWN0bHk= 37779\nIGFsbGVpbmU= 37780\n4oI= 37781\n0YjQuNCx 37782\nINCx0LDQsQ== 37783\nIGRhbmFjaA== 37784\nIDE5Mzk= 37785\nIHByb21ldA== 37786\nIGRlc3RpbmF0aW9ucw== 37787\nIElsbHVzdA== 37788\nzrnOus+M 37789\nIHNhYmVz 37790\nIGhlaA== 37791\nIEdlc2V0emVudA== 37792\nIE1peg== 37793\n0LXQvdC60L4= 37794\nIE15cw== 37795\n0Kw= 37796\nIEp1ZGFpc20= 37797\nIG11c3RhY2hl 37798\nIHN0aW1tdA== 37799\nIEdhemE= 37800\nIHZvbHRl 37801\nIG51bw== 37802\nIG3Ds24= 37803\nIENvbXB1dA== 37804\n4Li54LmI 37805\nIFJhZGk= 37806\nIGV4Y2VwdGlvbmFsbHk= 37807\nIGFzc3VtZXM= 37808\n6ZaL5b+D 37809\n44GI44Gw 37810\naW5mb3Jt 37811\nIHNocmluZQ== 37812\n5pOK 37813\nIGltcGxpY2F0aW9u 37814\nIEZpdHo= 37815\n5rKS6Zec5L+C 37816\nIS4= 37817\nIGx0 37818\nIGFsbG95 37819\nIGV0aGlj 37820\nIG1vbmFzdGVyeQ== 37821\n7Iuc7KOg 37822\naWNhw6fDo28= 37823\nIGNvb3JkaW5hdGluZw== 37824\nIE1vdG8= 37825\nIG92ZXJsb29r 37826\nIGNob2lz 37827\nIGFudGliaW90aWM= 37828\nIE1pbm5l 37829\nIEJK 37830\nIEFwYQ== 37831\nb3JpYW4= 37832\nIHNwaWxsZWQ= 37833\nSmFt 37834\nIGh1c2JhbmRz 37835\nIGNyZWF0aW9ucw== 37836\nIGHDsQ== 37837\nw7xzc2Vs 37838\nIOydtOyaqQ== 37839\nIGFuYWx5c2U= 37840\ncm9zZQ== 37841\nIHB1bmNoZWQ= 37842\nIHByZXNxdWU= 37843\nIGFzdHJvbm9teQ== 37844\nIHNjaHdpZXJpZw== 37845\nIEVib2xh 37846\nIGNpcw== 37847\nIGFjZXQ= 37848\nIEZY 37849\nZW5kcmU= 37850\nIOydjOyVhQ== 37851\nIHdlYnBhZ2U= 37852\nIGZyZWFrZWQ= 37853\nIGxhdHRl 37854\nIOy/oA== 37855\nIOuouOs= 37856\nTmV2ZXI= 37857\nR3Jh 37858\n7ZmU66W8 37859\nZXllZA== 37860\nIOuwnOudvA== 37861\nIGVzcGVyYQ== 37862\nIGFwYXJlY2U= 37863\ncmHDp8Ojbw== 37864\nIGRpc3J1cHRpdmU= 37865\nIEpvaW50 37866\ndXJvdXM= 37867\ncmVhcw== 37868\nIHF1ZXLDrWE= 37869\nIGRpc3RyaWJ1dGlvbnM= 37870\nIGV4cG9uZW50 37871\n7LmY66W8 37872\nIGRs 37873\nemhvdQ== 37874\nIEhlYXJpbmc= 37875\n5beu5LiN5aSa 37876\nIENyYXc= 37877\nIGZsb2F0cw== 37878\nb3VuY2Vk 37879\nTGFi 37880\nV29ybGQ= 37881\nIGJ1cmRlbnM= 37882\nIGF1dGhvcml0YXJpYW4= 37883\nIEJvbHQ= 37884\nINC+0LTQvdGD 37885\nIHBpZ2Vvbg== 37886\nIGRpc3RyYWN0aW9ucw== 37887\nIEhlcmF1c2ZvcmRlcg== 37888\nIHplc3Q= 37889\nZXNj 37890\nIHNoYWtlcw== 37891\nYXRhcw== 37892\nINmF2LQ= 37893\naG9sZXM= 37894\nIHRoaW5rZXJz 37895\nYWx0YQ== 37896\nIGFyY2hl 37897\nIFN1aw== 37898\nYW5oYQ== 37899\nIHRlbXB0aW5n 37900\nIHlvdXR1YmVy 37901\nIHbDrA== 37902\nIGR6aWHFgmE= 37903\nIFZhdGljYW4= 37904\nUGFyaw== 37905\nIHN1cGVycw== 37906\nIE5pa2tp 37907\n64qQ6w== 37908\nb3Jhbmc= 37909\ncmFtaWVudA== 37910\n6ay8 37911\nIOqwluqzoA== 37912\nIGRlc3NlcnRz 37913\nIGF2ZXJl 37914\nIEdyZWdvcnk= 37915\nIOuTpOyWtOyY 37916\nIGNvc3Rpbmc= 37917\nIENsaW5pYw== 37918\nIHJlYmVscw== 37919\nIE1vYg== 37920\nIGJ1bmxhcg== 37921\nIFlvdXJz 37922\nZXJ0aW1l 37923\nIHJldGFsaQ== 37924\nbWFyYQ== 37925\nYXR1cw== 37926\nYWxsZXM= 37927\nINC00YA= 37928\nINC00LjRgQ== 37929\nIGRpc2NvdW50cw== 37930\nIEdVWQ== 37931\nINC60LDQutC+0LU= 37932\nIEV4cGVyaW1lbnQ= 37933\ncmVtZW50 37934\nIFhpYW5n 37935\nIGJhdGU= 37936\nV0U= 37937\nIHNwZWNpYWxpemU= 37938\nIGRlaXR5 37939\nIExva2k= 37940\nbWFn 37941\nIE5pdA== 37942\nV2VzdA== 37943\nIG1hdGVybmFs 37944\nIHF1aXM= 37945\n5Z+65pys 37946\nYnJva2Vu 37947\nIGxhc2Vycw== 37948\nIGhha2s= 37949\nIEFuZ2Vscw== 37950\nIG1hc3Rlcnk= 37951\nYW50aXM= 37952\nVGlmZmFueQ== 37953\nZWVl 37954\n55E= 37955\nb3JlbQ== 37956\nIGluYWNj 37957\nIGp1cmlzZGljdGlvbnM= 37958\nIEthcmRhc2g= 37959\n5py6 37960\nSWw= 37961\nIFNpbm4= 37962\n5YuV55S7 37963\nIGF0aGxldGljcw== 37964\nY8SZ 37965\nIGxvb3NlbHk= 37966\nIGRpZXRh 37967\nQWc= 37968\nID8/ 37969\nIOuMgO2RnA== 37970\nIHN1cGVydg== 37971\nIG51dHJpdA== 37972\nIGRyaWZ0aW5n 37973\nIOyEoOyDneuLmA== 37974\nINC/0L7QvdGP0Ls= 37975\nIFZpY3Rvcnk= 37976\n2YTYqQ== 37977\n15XXoNeU 37978\nINC/0LjRiA== 37979\nIHNoYXZlZA== 37980\nIG1lc3VyZQ== 37981\nb25kZW4= 37982\n2YPYsQ== 37983\nIGV4aWxl 37984\nIERlc2Rl 37985\nIFBpbnRlcmVzdA== 37986\nIGF0dGFjaG1lbnRz 37987\nIGhvbWJyZXM= 37988\nIGZpbmVz 37989\nIOyEuOyDgQ== 37990\nIHNsZWVwcw== 37991\nIFRhY28= 37992\nIElSQQ== 37993\ncmlvcw== 37994\nIG9sbA== 37995\nZXRlcw== 37996\nIHVudXQ= 37997\nZmFzaGlvbmVk 37998\nIHRyZWJhbGw= 37999\nIE5lYXJseQ== 38000\nINGA0LXQsNC70YzQvdC+ 38001\nIGNoaWw= 38002\n6YCx 38003\nxJ9h 38004\nIE1FTA== 38005\ncm9zY29w 38006\nIENH 38007\nIHZlbmdl 38008\nIGRpc2h3YXNoZXI= 38009\nYWxnaWM= 38010\nIG1vZGlmaWVy 38011\nIGVtYmFzc3k= 38012\ndGltZXI= 38013\nZW1pY3M= 38014\nIGludHJpY2F0ZQ== 38015\nIGV2ZXQ= 38016\nIOuMgOuwlQ== 38017\nIGlzb3Q= 38018\nINC90LDRg9GH 38019\nIFF1aXo= 38020\ncmVzbw== 38021\nzrTPjg== 38022\nIHllbGxlZA== 38023\nIGZlZGVy 38024\nRUxMRVI= 38025\nIGV4Y2VlZGVk 38026\nb25hcw== 38027\naWNhbm8= 38028\nINC20LjQstC+0YI= 38029\nIE1hbw== 38030\nIEthenV0bw== 38031\nIOOFi+OFi+OFi+OFiw== 38032\nIGZyb250bGluZQ== 38033\nIEh1bmdhcmlhbg== 38034\nIMO8YmVyYWxs 38035\nYXdhdA== 38036\nIGdyaXBz 38037\nacOnw7Vlcw== 38038\nYXJueWE= 38039\nIM2h 38040\nIHNlaWQ= 38041\nIGFuYWs= 38042\nIGFjYWJvdQ== 38043\n7ZWR 38044\nIG5vdG9yaW91cw== 38045\nIEdvZHppbGxh 38046\nIG92ZXJjb21pbmc= 38047\nIFBlbmQ= 38048\nIG9sYWJpbGly 38049\nw7xsbWU= 38050\nIGVyaGFsdGVu 38051\n44KJ44GE 38052\n6re5 38053\nIE1ldGVy 38054\nIHN0YWFu 38055\nT2w= 38056\nIGNoYXRz 38057\nIEJ1ZW5vcw== 38058\nw612ZQ== 38059\nYWx1YWJsZQ== 38060\nIHN0cmF0ZWdpY2FsbHk= 38061\nIGNvbXByaXNlZA== 38062\nINC/0LXRgNGB0L7QvdCw0LY= 38063\nIHdhbm4= 38064\nIENlbg== 38065\n0L3QuNGC0LU= 38066\nn4E= 38067\nINGC0L7QsdC+0Lk= 38068\naWFk 38069\nIGthcmRlxZ9pbQ== 38070\nIENvbmdyZXNzbWFu 38071\ncmVhbWluZw== 38072\naG9tbWU= 38073\nIGNvbW11bmF1dA== 38074\nIGFsY29ob2xpYw== 38075\nIHBpY2tsZWQ= 38076\nIGFjb3Jk 38077\ncG9zaXRpb24= 38078\nZWfDs2w= 38079\nIHRyb3VibGluZw== 38080\nIE1hcmNoZWc= 38081\nIHp1bWluZGVzdA== 38082\nIHNlYW1sZXNzbHk= 38083\nIG9sdW4= 38084\nIFRWcw== 38085\nINC/0YDQsNC60YLQuNGH0LXRgdC60Lg= 38086\nIGJhY2tlbmQ= 38087\n44GT44KT44Gr44Gh44Gv 38088\naWRhYmxl 38089\nIGdhZGdldA== 38090\nIGZhw6dv 38091\nIE1hcmNoZWdpYW5p 38092\nIOuwpA== 38093\nIGFjY2lkZW50YWw= 38094\nIExQ 38095\nIGVsZGVzdA== 38096\nIEFkbWlyYWw= 38097\nIG7Eg20= 38098\nbGV2ZXI= 38099\nIHBhc3RlbA== 38100\nIGZvbmRv 38101\nQ29ubmll 38102\nIHRlcmNlcg== 38103\nIHBhY3Q= 38104\nIE1vbnRl 38105\nIG1lYXRz 38106\nIFNNUw== 38107\nIEF1c3RyYWxpYW5z 38108\n57w= 38109\nUmhldHQ= 38110\nIGV4YWN0ZW1lbnQ= 38111\nIOu5vA== 38112\nIE1PRA== 38113\n56E= 38114\nIFJhcHQ= 38115\nIE5vY2g= 38116\nIGFib3J0 38117\nIE5hdmFs 38118\nIEZ1amk= 38119\nSU5URVI= 38120\nINC90L7QstGL0Lk= 38121\nIG1pZWpzY2U= 38122\nIElDVQ== 38123\nIEdyYWR1YXRl 38124\nIEdsZW4= 38125\nYXJkaQ== 38126\nIMiY 38127\nIHNvbGRlcg== 38128\nIHByb2Zlc3Npb25z 38129\nIG9ydGhvZw== 38130\nb21u 38131\naW50cm9kdQ== 38132\nIERlbmlzZQ== 38133\n7J6Q66W8 38134\nIGNvcnJlc3BvbmRlbmNl 38135\nQU1B 38136\nIGluZmxpY3Q= 38137\nIGZhbmQ= 38138\nIEfDvA== 38139\nINGH0LXRgg== 38140\nIHRyYWNlZA== 38141\nIHBhdGVudHM= 38142\nIGFtYnVzaA== 38143\nIGxvdHRh 38144\nZmZlcg== 38145\nIFdhZ25lcg== 38146\nIGltcGVyc29u 38147\nIGV4dHLDqm1lbWVudA== 38148\n2YLYqg== 38149\nY29uZHVjdA== 38150\nQXR0 38151\nIE11ZWxsZXI= 38152\nIEFsaWNpYQ== 38153\nIGN5Yw== 38154\nIGhhY2tlcg== 38155\nIHR5cw== 38156\nIGhhaWw= 38157\nINC30LDRj9Cy 38158\nIHBhc3Nv 38159\nIOy2lOqwgA== 38160\nIM6I 38161\nIHBhY2thZ2Vk 38162\nIEN5bnRoaWE= 38163\naGVldA== 38164\n5Lit5Zu9 38165\nIE5pc3Nhbg== 38166\nIFF1ZXN0bw== 38167\n6ag= 38168\nZGlk 38169\nIM68zrnOsQ== 38170\nIEVsbGlz 38171\nIEFuYWx5c2lz 38172\nY2Vtb3M= 38173\nIGFzZWc= 38174\nIE15c3Rlcg== 38175\nIENhbw== 38176\nIHR1dg== 38177\nIEluZHVzdHJ5 38178\n7KO86rOg 38179\nb3RhbA== 38180\nIHBlcXVlw7Fv 38181\nYnJhcw== 38182\nIGNvbXByZWhlbmQ= 38183\nIFNpbXBzb24= 38184\n0YHRgtCy0LjQtQ== 38185\nb2NyYWN5 38186\n0LjRh9C10YHQutC4 38187\nIE11c2g= 38188\nIExhdXJpZQ== 38189\nIHRyaWFuZ3VsYXI= 38190\nIFByZXNlbnRz 38191\nIEt1bmRlbg== 38192\n57S5 38193\n5q2m 38194\nIElzcw== 38195\nIERlY2s= 38196\n4buDbg== 38197\nIERhcmtuZXNz 38198\nIGluZmxhbW1hdG9yeQ== 38199\nZXJlbWlhaA== 38200\nIHdhcm1lZA== 38201\ndmV5YXJk 38202\nIE1lbW9yeQ== 38203\nZXR0eQ== 38204\nIHRheHBheWVycw== 38205\n4LiT 38206\n2KE= 38207\nIHByYWN0aXNl 38208\n64us6w== 38209\nIGRyaWxsZWQ= 38210\nbcO8xZ8= 38211\nbG9nbw== 38212\nIEZhY2g= 38213\npOuhnA== 38214\nIMO8YnJpZ2Vucw== 38215\nIGtvbm50ZW4= 38216\nIG5vcm1hbG1lbnRl 38217\nIGFyZ3Vlcw== 38218\naWxpbmd1YWw= 38219\nsOulvA== 38220\nZWdhbA== 38221\nIHRyYXZhaWxs 38222\nb3Z5 38223\n0LDRgtC+ 38224\nIHJ1dGg= 38225\nIExpZ2h0cw== 38226\nIGNvbnNpc3RlZA== 38227\n15HXqNeZ150= 38228\nIHN0ZXJlb3R5cGU= 38229\nIHBheWVy 38230\nIFJlZQ== 38231\nIEFpcmJuYg== 38232\nIGRyb3duZWQ= 38233\nIFpvZQ== 38234\nIGNhbm9weQ== 38235\nIGJhcnI= 38236\nINC90L7Rhw== 38237\nIHBhZ2Fu 38238\nIGphcnM= 38239\nIHLDqg== 38240\nZXJ2ZXI= 38241\n5oi/ 38242\naWViZW4= 38243\nIGVzcGVjdA== 38244\nIEZp 38245\nIHVud2lsbGluZw== 38246\nIHRlY2huaWNpYW4= 38247\n4bq3dA== 38248\nbWVtYmVy 38249\nIENhbmFs 38250\n2LPZhQ== 38251\nIGxpZWJlcg== 38252\nIGluZmVyZW5jZQ== 38253\nIGhvbm9yaW5n 38254\n5ZG1 38255\nIENhbXBhaWdu 38256\nIGxpbmVhZ2U= 38257\nIFN0cmVzcw== 38258\nIHZpY3Rvcmllcw== 38259\nIGRlamE= 38260\n16M= 38261\nw6p0ZXM= 38262\nYmxpY2s= 38263\nINC80LXQvdC10LU= 38264\nb3Rocw== 38265\nIENvdXBsZQ== 38266\nSmFzb24= 38267\nIE5pY29sYXM= 38268\n0LXQutGB 38269\nbGli 38270\nIGhlcnJhbWllbnQ= 38271\nINeQ15XXnteo 38272\nINCy0LjQtNC40Lw= 38273\nbWlsbGltZXRlcg== 38274\nIHNpbGhvdWV0dGU= 38275\nIGRyaXZld2F5 38276\nIGNoZXJpc2g= 38277\n44Wg44Wg 38278\nIHJhbnNvbQ== 38279\nIGludGVyZGlzY2lwbGluYXJ5 38280\nIFBvcnRhbA== 38281\nIHRyYWc= 38282\ndGhvb2Q= 38283\nIHRlZGlvdXM= 38284\nIGdsb3NzeQ== 38285\nIHByw6lwYXI= 38286\nIENheQ== 38287\nIFRvb2s= 38288\nIEJvdHRvbQ== 38289\nIHppZw== 38290\n5as= 38291\n5Y2x 38292\ncmVwcmVzZW50ZWQ= 38293\n4LmA4Lil4Lii 38294\nIGRlc2Fycm9sbG8= 38295\n7ISc6w== 38296\nIHZpc2Nvcw== 38297\nIG1pbGxpZ3JhbQ== 38298\nIEd1bmQ= 38299\nIGZlcm1lbnQ= 38300\nZHJ1bQ== 38301\nIGRyYXdlcnM= 38302\nTGF1Z2g= 38303\nIHBlbG9z 38304\nIHBhdmVtZW50 38305\nIG1lbW9pcg== 38306\nYXZhaXQ= 38307\nIDIwNTA= 38308\npOulvA== 38309\nIHJhesOzbg== 38310\nIGZsb3VyaXNo 38311\nIHN0ZXJu 38312\n5LiI 38313\nIENodW5n 38314\nIHNlcnBlbnQ= 38315\nIEdlbnRsZW1lbg== 38316\n55yf55qE5b6I 38317\na29vaw== 38318\nIGx1dA== 38319\naW1wb3J0ZQ== 38320\ncGFyZW50 38321\nIHdzeg== 38322\nIHNjcmVl 38323\nIE1pdGFyYmVpdGVy 38324\n5be0 38325\nbXV0 38326\nIOyWmOq4sOulvA== 38327\nIHNlbWJsZQ== 38328\nIE9X 38329\nIGludmVzdGlnYXRvcg== 38330\nIENoZXJ5bA== 38331\nIEdlcmFsZA== 38332\nIHByZXJl 38333\nIGNvbXBhcmVz 38334\nbnl0 38335\nIGRpZmVyZW7Dp2E= 38336\nPy0= 38337\nIHF1w6E= 38338\n16jXmQ== 38339\nU2Vu 38340\nIGhlcHM= 38341\nIGdyYXR1aXQ= 38342\nIGNvbnNvcnQ= 38343\nIFNUT1A= 38344\nIFByb3Rlc3RhbnQ= 38345\nIGVsZWN0cm9kZQ== 38346\n4pc= 38347\nIHNlY3VyZWx5 38348\n0LjRh9C10YHQutC+0Lk= 38349\nIHTDpMOk 38350\nIHJlZ2lzdGVycw== 38351\nIEhlYXZlbmx5 38352\nb2dseQ== 38353\naXNzw6Q= 38354\nIFBoeXNpY3M= 38355\nIE1lcmtlbA== 38356\nIHLDqXY= 38357\n6Zmi 38358\nIGVyYXNlZA== 38359\nIFNhY3JhbWVudG8= 38360\nIGNvZmZpbg== 38361\nIGV4YWNlcg== 38362\nIGxhbno= 38363\nIHBvZXRz 38364\ndWxpZg== 38365\nIOy5mOs= 38366\nIE5lcmQ= 38367\nIE5DVA== 38368\nIEhvdXI= 38369\nbmVobWVy 38370\nnpjrj4Q= 38371\nIFByaW5jaQ== 38372\nU3c= 38373\nbWllcw== 38374\nYXJtZWQ= 38375\nIEJlYXRsZXM= 38376\nIHByb3BhZ2F0aW9u 38377\nIGV4Y2hhbmdlZA== 38378\nIGN1bXVsYXRpdmU= 38379\nIOynkeyXkA== 38380\nIGRlZmVhdGluZw== 38381\n5oqx 38382\nYmVscw== 38383\nIHdlcw== 38384\nIE9keXNzZXk= 38385\n5L2g5oOz 38386\nYXZpb3I= 38387\nIOychOyXkA== 38388\nIGJyaXQ= 38389\nIGhpam8= 38390\nREFZ 38391\nINin2YTYqtmK 38392\nINCh0LXRgNCz 38393\n0YPQutCw 38394\nZWRzacSZ 38395\nIGltcG9z 38396\nIGVsbGFz 38397\nIGZpcmVhcm1z 38398\nIE5S 38399\nINeR15A= 38400\nINCf0L7QutCw 38401\nYXdp 38402\nIOyEseqztQ== 38403\nIHB1cGlscw== 38404\nIFRhY2s= 38405\nIGZyYXNl 38406\nIFNoaXA= 38407\nIHN0YWQ= 38408\n5Lic 38409\nIEdyZWF0ZXI= 38410\ndW51bg== 38411\naW1tdW5n 38412\nZ3Jvd24= 38413\nIE5YVA== 38414\nIEFtZXJpY2Fz 38415\nZm94 38416\nIG1hbnRlbg== 38417\n6aCQ5YKZ 38418\nINGB0L7Qug== 38419\nIHJpa3Q= 38420\nbGVjdHJpYw== 38421\nZGVlcA== 38422\nINC30L3QsNC10YjRjA== 38423\nIGJlbnV0 38424\nIEluZnJhc3Q= 38425\nIEVtaXI= 38426\nINC+0YLQv9GA0LDQsg== 38427\nIEtpbWNoaQ== 38428\nIEZpbm5pc2g= 38429\ntOyggQ== 38430\naW5haXJl 38431\nIG9pa2U= 38432\n5riF5qWa 38433\nIGhvc3RhZ2U= 38434\nIEJ1dHRvbg== 38435\n2YLZig== 38436\nZWtpbmc= 38437\nIEthemFraA== 38438\nIGNvbWZvcnRpbmc= 38439\nIHNvZw== 38440\nIGdyZWV0ZWQ= 38441\nZ3VpdGFy 38442\ncGF5ZXI= 38443\nIHJlbGF0aW9uYWw= 38444\nIGNvbnN0cnVpcg== 38445\n54m55Yil 38446\nb3BpYW4= 38447\nIFZvbHVtZQ== 38448\naWV0aA== 38449\n0YHRgtCy0L7QvA== 38450\ndXJyZWN0aW9u 38451\nbGnFm215 38452\nIGhlbWlzcGhlcmU= 38453\nIEJlYW4= 38454\nSUdO 38455\nIGvDtnTDvA== 38456\nIEZhbGxvdXQ= 38457\nIGJyYWNl 38458\n57m857qM 38459\nz4DOrA== 38460\nIEhBUw== 38461\nIGfDqQ== 38462\nIGNoYXJhY3Rlcml6ZQ== 38463\n4bq3Yw== 38464\nIE1pbGt5 38465\nIHR1bW9ycw== 38466\nIG51aXQ= 38467\nIEdheg== 38468\nIOyeiOuLpOuKlA== 38469\nINCz0LDRgA== 38470\nZXNzbWVudA== 38471\nIEFiZQ== 38472\nIOu9kQ== 38473\nIEVpbnNhdHo= 38474\nSklO 38475\nasOk 38476\nQ3J5 38477\nIFByb21pc2Vk 38478\nINGB0LXRgNC0 38479\nb2t1cw== 38480\nIHNjYWxhYmxl 38481\nINC/0L7RgdC80L7RgtGA0LXRgtGM 38482\nw7xja2xpY2g= 38483\nIHJlYWxpc20= 38484\nIG1heW8= 38485\nIGp1dmVuaWxl 38486\nIGhlYWRsaWdodHM= 38487\nIGfDtnLDvMWf 38488\nIFJlZm9ybQ== 38489\nIGhhbHZlcw== 38490\nY3puZQ== 38491\nIGJyZWFrdXA= 38492\nxbxlag== 38493\nIHLDpHR0 38494\nRGF5 38495\nIOydvOuzuA== 38496\nIG11ZXJ0ZQ== 38497\nIHR1bmVz 38498\nIFNtaWxl 38499\ncmVjb3Jk 38500\nIHJlY2hlcmNoZQ== 38501\nYXRpc2ZpZWQ= 38502\nIHBvemk= 38503\nIGNlbGVicmF0aW9ucw== 38504\naXNleHVhbA== 38505\nIFJPQg== 38506\ndGhpcmRz 38507\nIEZvcnR1bmU= 38508\nINGC0L7QuQ== 38509\nIGJyYW5kZWQ= 38510\nbG9v 38511\nIGR1ZA== 38512\nIHJhbmRvbWl6ZWQ= 38513\nIGNvbWJpbg== 38514\n5LiA5Lqb 38515\naWVyYW4= 38516\nY3plbmlh 38517\njeODqw== 38518\nIGN1cmF0b3I= 38519\nIGFydGVyeQ== 38520\nINGD0Yg= 38521\nINGH0LjRgg== 38522\nIHN1YnNpZGllcw== 38523\nIGJsb3Nzb20= 38524\nIFR3aWxpZ2h0 38525\nIGh5dsOk 38526\nIFBvbXBl 38527\nIENpc2Nv 38528\nINCf0YDQvg== 38529\nIGJpcmk= 38530\nIGdlcm4= 38531\nIHJlYnVpbHQ= 38532\nIHdjemU= 38533\nIGJlbmVmaWNp 38534\nIGRydW1tZXI= 38535\nIHNvbGlkcw== 38536\nIGRpeW9yc3Vu 38537\n44GC44KK44GM44Go44GG44GU44GW44GE44G+44GX44Gf 38538\nbGF0ZWQ= 38539\nIG11ZGR5 38540\nIGhvbG9n 38541\nIGNsYXBz 38542\nIFJpbmdz 38543\nIE9rZXk= 38544\nIEJyYXZl 38545\nIHZhbHVhdGlvbg== 38546\nIG1pZ3JhbnQ= 38547\nIGludGVybWl0dA== 38548\nIGVpZ2VuZQ== 38549\naWxpYXJ5 38550\n44O844OI 38551\nbWFya3Q= 38552\na3I= 38553\nIFJpYg== 38554\n4buZaQ== 38555\nIGFjY3VzYXRpb25z 38556\nIGFyYWI= 38557\nd2FzaA== 38558\nIEJhcmR6bw== 38559\nIHVnaA== 38560\nZXN0ZXJz 38561\nb3BocmVu 38562\nIGFsaW1lbnRvcw== 38563\nIFV6 38564\n1oI= 38565\nIDY1MA== 38566\nINC/0YDQuNC10YU= 38567\nRkk= 38568\nIHNhbXBhaQ== 38569\nIHBhcmzDqQ== 38570\naGVzaW9u 38571\nIHPEsXI= 38572\nIGFwcGFyYXR1cw== 38573\nIGNvcnJlbGF0ZWQ= 38574\nIFByaW5jaXBhbA== 38575\nIGNvcnI= 38576\nIE9mZmljaWFs 38577\n0LjRh9C10YHQutC40LU= 38578\nIHRlcm1pbmFscw== 38579\nU2hvdWxk 38580\nIHZhY3Vu 38581\nIHN0ZWxsdA== 38582\nIG1vb2k= 38583\nZXR6dW5n 38584\nINC60YDQsA== 38585\nIGRhaQ== 38586\nINC/0L7Qtg== 38587\nVGVhbQ== 38588\nIFBQRQ== 38589\nINCe0YE= 38590\nIExlYWg= 38591\nIEl2eQ== 38592\neXN0 38593\nIHVoaGg= 38594\nIG5pZ2h0dGltZQ== 38595\nIHRyZW5keQ== 38596\nIHNlY3VyaXRpZXM= 38597\nIGNvbnRpbmVudHM= 38598\nIGZpcnN0aGFuZA== 38599\nIFZlcm9u 38600\nIOuCrg== 38601\nIGJyb3dzaW5n 38602\nIENhZGE= 38603\ndHJv 38604\nIHRyYW1w 38605\ncmVpYg== 38606\nIGVyc3RtYWw= 38607\naXJsZXI= 38608\nIHBzaWM= 38609\nIGdldGly 38610\nIE5Q 38611\nIGR6aWVjaQ== 38612\n0L7QsdGA0LDQtw== 38613\nIG1hZ2ljaWFu 38614\nIHNjcnV0aW55 38615\nIHNsYWI= 38616\nIE9U 38617\naXN0eQ== 38618\naXJpZXM= 38619\nb3Jlc3Q= 38620\nIHRhc2tlZA== 38621\nIG1vcmFsbHk= 38622\n7JW87KeA 38623\ndXN0ZXJlZA== 38624\nIGZvb2xz 38625\nIGlycmVzcG9ucw== 38626\nIGVpbmY= 38627\nIHZp4buHYw== 38628\nIHNjb3I= 38629\nIHBpbGxvd3M= 38630\nIEdlZ2Vu 38631\nIHR1dHRl 38632\nIHF1YXJ0ZXJseQ== 38633\nIGRpZG50 38634\nIEd5bQ== 38635\nIEV0aGVy 38636\nINir 38637\n0LvQuNGI0LrQvtC8 38638\nIHNpZ25hbGluZw== 38639\nIE5vZGU= 38640\nIERvbmNz 38641\nIHlhaA== 38642\nIEthbmFs 38643\nIGZhZGluZw== 38644\nZXRpbg== 38645\nIGluZmx1ZW5jZXJz 38646\nIG1lZGFscw== 38647\nIGVuZ2luZWVyZWQ= 38648\nIGZlcm1lbnRlZA== 38649\n6rKg7KeA66eM 38650\nIEJlZXRob3Zlbg== 38651\n157XqQ== 38652\naW5lbnRhbA== 38653\nIOyVjOugpA== 38654\nw7x0ZmVu 38655\nYWxueWE= 38656\nIG92ZXJl 38657\nIGRlbmt0 38658\n0LDQutGC0LXRgA== 38659\nIOKY 38660\nIG5lY2VzaXQ= 38661\nIGdlbmVyYXRvcnM= 38662\nZ3Jhc3M= 38663\nINC/0L7QtNGD0Lw= 38664\nbGllw59lbg== 38665\nQmFy 38666\nnOuPmQ== 38667\nINC00LXRgtC10Lk= 38668\nIHN1Y2tpbmc= 38669\nIHN0ZW5jaWw= 38670\nIHByaW1v 38671\nIEJyZWF0aA== 38672\nc3Ryb20= 38673\nIGltbWVuc2VseQ== 38674\nIGFwcHJlaA== 38675\n7KCV7J20 38676\nUG9w 38677\nIGpvbmc= 38678\nIEdpdWw= 38679\nIEFESEQ= 38680\nIGjDtnJlbg== 38681\nIGVsbw== 38682\naXZlbnQ= 38683\nIHJ1cw== 38684\nIG91dHJhZ2VvdXM= 38685\nIG1hc3RlcmVk 38686\nIOy7pA== 38687\n2YjZgQ== 38688\naXBlcw== 38689\nIFJ1ZHk= 38690\nSmFjb2I= 38691\nIGJ1bGxpc2g= 38692\nIHRhcHBlZA== 38693\nIGZhdWQ= 38694\naXpvcGhyZW4= 38695\nINGB0L7RhQ== 38696\nIERhcmxpbmc= 38697\nIDE5NjM= 38698\nIFByZXZlbnRpb24= 38699\nspQ= 38700\nIGFiZG9taW5hbA== 38701\nc3RvbmVz 38702\nIGF2YWllbnQ= 38703\n4buVaQ== 38704\nbWFrZQ== 38705\nIHNhcmU= 38706\nIEluc3RhbnQ= 38707\n0LrQsNC8 38708\nIGtlZXBlcg== 38709\nIGJsYW5rZXRz 38710\n44Gn44GX44KH44GG 38711\nIHN3ZWF0cw== 38712\nIE1pbm5lYXBvbGlz 38713\n5YWo6YOo 38714\nIGdlbm9tbWVu 38715\nIGZhc3Rlbg== 38716\nIEJydXNzZWxz 38717\n5ZG8 38718\nIGNhZmV0ZXI= 38719\nIGFic29yYmluZw== 38720\nIGhhZ28= 38721\nIEVsbW8= 38722\nIGd1c3Rv 38723\nIFlhcA== 38724\nTcO6c2ljYQ== 38725\nIHRlcnQ= 38726\nIGJhbmRh 38727\nIG1pbHk= 38728\nIHRoZXJlYWZ0ZXI= 38729\nIFN0b2NraG9sbQ== 38730\nIENhcnNvbg== 38731\nIGNhbGlicmF0aW9u 38732\nYXZhxZ8= 38733\nYW5zYQ== 38734\naWtrZQ== 38735\nIGZvcmVzZWU= 38736\nIHF1YWxjaGU= 38737\nIGRlc3Rl 38738\n5qQ= 38739\nw7xuw7x6 38740\nIGZvcmdl 38741\nRGlz 38742\nZXN0ZW4= 38743\nIM60zrnOsQ== 38744\nIGVuY2Fwcw== 38745\nIEdlc3By 38746\nIGNoZXJjaGVy 38747\naWNrZXRz 38748\n0YLQvtGA0Ys= 38749\nQ3I= 38750\nINCi0LDQutC20LU= 38751\nIHJhYmJpdHM= 38752\nIERvdA== 38753\naGVpdGVu 38754\nIGNhdXNhbA== 38755\nIEZvc3Rlcg== 38756\nYWrEhWM= 38757\nIGJlcmVpdA== 38758\nIGF5dWRhcg== 38759\n6auZ 38760\n44Gz 38761\nc29uZw== 38762\nY29tYg== 38763\nIGZyaW5nZQ== 38764\nIGN5YmVyc2VjdXJpdHk= 38765\nIOucqA== 38766\nIGtpZXI= 38767\nIGJlc2Now6RmdA== 38768\nINC60L7QvdGG0LU= 38769\nIGZhY2lsaXQ= 38770\nIE5hbWVu 38771\nIGJpbGF0ZXJhbA== 38772\ndHg= 38773\nIFdpc3NlbnNjaGFmdA== 38774\nIG51YW5jZXM= 38775\nIHJpcHBpbmc= 38776\nIGZ5 38777\nIFNpY2hlcmhlaXQ= 38778\nIEdoYW5h 38779\nb2xvbg== 38780\nIHRvcHBlZA== 38781\nIE1vcm9jY28= 38782\nIHJhZGlhbA== 38783\nIExFRQ== 38784\nIEFuZHJlYXM= 38785\nZWRk 38786\nIOyXtOs= 38787\nIEFpcmxpbmVz 38788\n44GT44KN 38789\nIHZhbG9yZXM= 38790\n6rec 38791\nSHk= 38792\nINC30LDQtNCw0Yc= 38793\nIEtlbmRhbGw= 38794\nINGF0LDRgA== 38795\nIFZhbXA= 38796\nIHB5dGhvbg== 38797\nIG1hbmFnZWFibGU= 38798\nIEdlbnRl 38799\nb2lzZQ== 38800\naWNpYXJ5 38801\nIGltcG9zcw== 38802\nIEJ1bm55 38803\naWVzdGE= 38804\nQW5kcmV3 38805\nIHNlcnQ= 38806\nIENlYw== 38807\nenphcmVsbGE= 38808\nIGF1dG9tb2JpbGU= 38809\nIFRpZXJl 38810\nYWxsb3dz 38811\n5YaG 38812\nIOuwgA== 38813\nIFNjb3Jw 38814\nIEplbGx5 38815\nYWdhcmE= 38816\nIFN0cmV0Y2g= 38817\nIHJlZGVm 38818\nIGV4YWNlcmI= 38819\nIFNIQQ== 38820\nw6lm 38821\nb3JzYQ== 38822\nIGZsYXdlZA== 38823\nIE5vZWw= 38824\nPyE/ 38825\nIHByb2NlbnQ= 38826\nIG1lbnN0cnU= 38827\nINC/0YDQvtGH 38828\nIGluZmFudHM= 38829\n8J+OtQ== 38830\ncGF1c2U= 38831\nIFJhY2luZw== 38832\nIDE5NDg= 38833\nIHN1cGVyaW50ZW5kZW50 38834\naWRvcmVz 38835\naWR5 38836\nYnJhaGlt 38837\nIHVubHVja3k= 38838\nIHBlcms= 38839\nYW5jaQ== 38840\nIOunjOuCmA== 38841\nINCc0L7RgdC60LI= 38842\nIGZpbmFucw== 38843\nIGRpZmVyZW5jaWE= 38844\noIjsnbQ= 38845\n6YWN 38846\nT1JZ 38847\nIFRhYw== 38848\n24zYpw== 38849\nIGRlc2Vt 38850\nINCy0LDQttC90L4= 38851\nIEpV 38852\nIOyeiOyeluyVhOyalA== 38853\nIM6d 38854\nIGluZm9ybWF0aW9ucw== 38855\nIEhFTA== 38856\naHN0 38857\nINC/0L7Qs9C+0LLQvtGA 38858\nIHZvaXR1cmU= 38859\nIHJldXM= 38860\nw6RuZGln 38861\nINC/0L7RhdC+0LY= 38862\namluZw== 38863\nIGRydQ== 38864\nYWx0cmE= 38865\nIHByb2R1aXRz 38866\nIGtpdGU= 38867\nIGV5ZWJhbGw= 38868\nIEJlbHQ= 38869\nIFJlc3RhdXJhbnQ= 38870\nIGdhbWI= 38871\nIHBvcnJpZGdl 38872\naXR0ZXJz 38873\nIGNvbnZlcnRz 38874\nIHlhcmTEsW0= 38875\nIG3DoXhpbW8= 38876\nd2lydHNjaGFmdA== 38877\nIO2VmOuCmOs= 38878\nIOykgA== 38879\nIGljZWJlcmc= 38880\nIHZvcmJlaQ== 38881\nIDI1Ng== 38882\nb2NyYXRpYw== 38883\nIHJlY2tsZXNz 38884\nb25uZXI= 38885\nIG3DunM= 38886\nIGxvZ2ljYWxseQ== 38887\nIFByaXNvbg== 38888\nIE5ldHo= 38889\nIHZhY2FudA== 38890\nIG5pbW10 38891\nIEhBUlI= 38892\nINC30L7Qsg== 38893\nIERlZQ== 38894\ncmluZ2U= 38895\nbmllc3Q= 38896\nIFJ1bGVz 38897\n7Iqk65+9 38898\nY3Vzc2lvbnM= 38899\nIGZsb3JhbA== 38900\nIGNvbnN0cmFpbmVk 38901\nIGRpZmZlcmVudGlhdGlvbg== 38902\nIFF1ZWJlYw== 38903\nINuB24zaug== 38904\nIHDDumJsaWNh 38905\naXRlbA== 38906\nIGFjY29tbW9kYXRpb25z 38907\nIEdyw7w= 38908\n7Zw= 38909\nIHBpY2tsZXM= 38910\n0LjRh9C10YHQutC40YU= 38911\nIGNvbW1pc3Npb25z 38912\nIEJhZWs= 38913\nIMOnb2N1xJ8= 38914\nIE1lZGl1bQ== 38915\nIHBlcmlvZGljYWxseQ== 38916\nIHdvbmRlcmZ1bGx5 38917\nIHN0YWZmaW5n 38918\n7JuQ6w== 38919\ncmlyZQ== 38920\nZmxl 38921\nIE1jTA== 38922\nINGC0LXQvw== 38923\nINC/0LXRgNC10Lo= 38924\n0L3QvtC70L7Qsw== 38925\nIO2BrOqyjA== 38926\n55m854++ 38927\nIHByb3NwZXJvdXM= 38928\nIFNwaXJpdHVhbA== 38929\nIENoaWNr 38930\nRElB 38931\nINCf0YDQuNCy0LXRgg== 38932\nIHBlcsOt 38933\n0YzRjtGC 38934\nIGNvbnN1bHRhbnRz 38935\nIEVhcmw= 38936\n5LuK5bm0 38937\nIHJ1aW5pbmc= 38938\n0L7RgNC1 38939\nIHBlbnNlcg== 38940\nIHRha2llag== 38941\nIHN0cmVuZ3RoZW5lZA== 38942\nIExpcXVpZA== 38943\n0L7QvdC10YY= 38944\n0LDQstCw0YLRjA== 38945\nIGNhbWVy 38946\nIGRpc2FncmVlbWVudA== 38947\nIGJhdGhpbmc= 38948\nIFlvc2g= 38949\nYWFs 38950\ncHJlY2hlbg== 38951\nUklTQURBUw== 38952\nIHN1cGVyc3Rhcg== 38953\n5oGt 38954\n0LvRj9GC0Yw= 38955\nIG5pYg== 38956\nIFRoZXJt 38957\nIERBTklFTA== 38958\nIHBhdw== 38959\nIGxpcXVpZHM= 38960\nIGNhcGFjaXQ= 38961\nYXJrZW4= 38962\nIHZhZ2luYQ== 38963\nIG1hc2hlZA== 38964\nIGVtZXJnZXM= 38965\neXNjeQ== 38966\nIHVucmVsYXRlZA== 38967\nIEd1aWxk 38968\nIGludmVydGVk 38969\naXRpdmVz 38970\nVHJh 38971\nIGJlZ3I= 38972\nIGFsdGU= 38973\n7KeV 38974\n44KB44Gm 38975\nINGA0LDQt9GA0LDQsdC+0YI= 38976\nZmluZGVy 38977\nINC00LDQu9C10LU= 38978\nINCx0LvQsNCz0L7QtNCw0YA= 38979\nd2Fsa2Vy 38980\nIGNyYXRlcg== 38981\nYXNzYWRvcnM= 38982\ncmVuY2Vz 38983\naW5za2k= 38984\nIEtJTQ== 38985\nIEVsbGlvdA== 38986\nMjAxNw== 38987\nIFNy 38988\naW5rYQ== 38989\nYW5vdg== 38990\nIOyemOuquw== 38991\nIHByb3ByaWV0YXJ5 38992\nZGlzcGxheXN0eWxl 38993\nINGB0LjQvA== 38994\nINC40LfQsQ== 38995\nIFBhbmVs 38996\nIGluc3RpbmN0cw== 38997\nIENvbW11bmljYXRpb25z 38998\n6bq7 38999\nbWlkdA== 39000\nIOunjOuTpOyWtA== 39001\nINGB0LvQvtCy0LA= 39002\nIEdpbGJlcnQ= 39003\n55uu5YmN 39004\n0KLQsNC6 39005\ndm9vcmJlZWxk 39006\n0LXRjtGB0Yw= 39007\nYXJ5bg== 39008\ncXVleg== 39009\nIGRhcnQ= 39010\n0ZbRiA== 39011\nIEh1dA== 39012\nU2Fs 39013\nIHNvdXRoZWFzdA== 39014\nIHBlc3RpY2lkZXM= 39015\nIGhlbGljb3B0ZXJz 39016\nIGVuZHVyZWQ= 39017\naWFkYQ== 39018\nIGJyZXdpbmc= 39019\n7Jes6w== 39020\nINGB0LLQvtCx0L7QtA== 39021\nIFNhaW50cw== 39022\nIEZyYW7Dp2Fpcw== 39023\nIEVjb25vbWljcw== 39024\nIGRpc2xvYw== 39025\nb3Bob2JpYQ== 39026\nQ2FtZXI= 39027\nIG5lZ290aWF0ZWQ= 39028\nINGB0YLQsNC70Lg= 39029\n7Iqk7YE= 39030\nb2dpZQ== 39031\nIHRzdW5hbWk= 39032\nIHBlZWxlZA== 39033\nIG1vdGl2YXRpb25z 39034\n6Kit 39035\nb3N0YXQ= 39036\nZmxhbg== 39037\nIERBQw== 39038\nIGthdg== 39039\nJ1JF 39040\nIFBlYXJzb24= 39041\nYmJl 39042\nY3plbmll 39043\nIGF0ZW7Dp8Ojbw== 39044\n7Ya166C5 39045\n44Gj44Gh 39046\nINGD0LTQsNGA 39047\nIGludHJvZHVjdG9yeQ== 39048\nIEljaQ== 39049\n64yA6w== 39050\nYWthdA== 39051\nIHRyZW5jaA== 39052\nIHByb2NlZWRlZA== 39053\nIENvaW4= 39054\nIGRlcmVjaG8= 39055\nIFJlZGU= 39056\n5q+b 39057\n0LDQvdC90YvQuQ== 39058\nIGluY2FyY2VyYXRlZA== 39059\nIFJpY2htb25k 39060\nUm9jaw== 39061\nIFBhdg== 39062\nIEthcm1h 39063\ndWdlcw== 39064\nIGNvbnRlw7o= 39065\n67mE 39066\nIOq3uOunjA== 39067\nIEdvbmU= 39068\nIHdzcMOzxYI= 39069\nIFJhaG1lbg== 39070\ndW5rZW4= 39071\nIOykkeyalO2VnA== 39072\nIGli 39073\nIGF0dGFjaGluZw== 39074\nSGF5 39075\nIHN1a2E= 39076\n7I25 39077\nIHBpdm90YWw= 39078\nIFJlc3BlY3Q= 39079\nw61kYQ== 39080\nSUI= 39081\nIFZlcmFudHdvcnQ= 39082\nd2lldA== 39083\nIGZvcmVuc2lj 39084\n0YDQuNGB0YI= 39085\nINC/0YDQuNC90YbQuNC/0LU= 39086\nIG1hcmtpbmdz 39087\nIGtldHRsZQ== 39088\nIE9wZXJh 39089\nIERvY3RvcnM= 39090\nIHNocmVkZGVk 39091\nIHJlY3Vlcg== 39092\nIHZpZ2ls 39093\nIEZhaWw= 39094\nIGVudHJldg== 39095\nINC00YPRiA== 39096\nIG91dGJyZWFrcw== 39097\n6LWw5ZCn 39098\nIM+Azr8= 39099\nIHJvZ3Vl 39100\nYW5nbGVk 39101\nIHllYXJseQ== 39102\nIENyZWVk 39103\nIHdhbQ== 39104\nIGxvdHVz 39105\n6rO86w== 39106\n44CB44CB 39107\nIFNwaXQ= 39108\nIEl0dQ== 39109\nIHN0cmFpbnM= 39110\nIHN0YW1wZWQ= 39111\nIHBsYWludA== 39112\nIHBvdGlvbg== 39113\nIGNvbnNvbGlkYXRpb24= 39114\n6KmV 39115\n0L7Rh9C60YM= 39116\nIHZsb2dnaW5n 39117\nIHNsYXRl 39118\nIEF1ZnQ= 39119\nIEluY29y 39120\n4burbmc= 39121\np5A= 39122\nZW5o 39123\nIGhlacOf 39124\nIGRvbWVzdA== 39125\nIFN0cm9t 39126\n5Y2z 39127\nYWtpcw== 39128\nIGZyYWdlbg== 39129\nIGZpbmVy 39130\nIFN1Zw== 39131\nIHVwaGlsbA== 39132\nIMOpw6lu 39133\n4oCmKQ== 39134\nINGB0L7Qvw== 39135\nIENvcmV5 39136\nIHNpZWJpZQ== 39137\nIG11c2U= 39138\nIGNsb3Zlcw== 39139\nIHBvdXM= 39140\nIEZpbmFueg== 39141\nIFJvdXRl 39142\nYW1hdA== 39143\nIG11dHVhbGx5 39144\nINCy0L3Rg9GC0YDQuA== 39145\nIFNlbGVuYQ== 39146\n65Q= 39147\nIEdhdXNzaWFu 39148\n67aA7YSw 39149\nINeR15s= 39150\nIGVqZXJj 39151\n5b6u 39152\na2Vh 39153\nIEdlcnJ5 39154\nIFNpYw== 39155\n5aSn55qE 39156\nIDE5NjY= 39157\naWVzZQ== 39158\nIGZvc3NpbHM= 39159\nIGVzdGFk 39160\nIEthbmU= 39161\nY2nEhw== 39162\nIOycoO2KnOs= 39163\nINC/0LDQvA== 39164\nIENydWlzZQ== 39165\naW50w6lyaWV1cg== 39166\nIGJla2FubnQ= 39167\nIFBvZGU= 39168\nIGRlbWFuZGVy 39169\nUmVt 39170\nIGludmFkZQ== 39171\nIGRlY29yYXRpbmc= 39172\ncm9waWM= 39173\nIGNvd2JveQ== 39174\nIFBob3Rv 39175\nb3BvbGl0 39176\nIOy7rOufrOs= 39177\nIHJlYXA= 39178\nIGhhbmR3cml0aW5n 39179\n4LmE4Lij 39180\nIOua 39181\nINio2LnYrw== 39182\nIE10 39183\n2YA= 39184\nIHNwYWNlc2hpcA== 39185\nIG5hdGlvbmFsaXNt 39186\nIGNvdW5jaWxz 39187\nIEdyaWZmaW4= 39188\nIEFobWVk 39189\nIGNsaWNo 39190\nIE9M 39191\nd2w= 39192\nIFBpbG90 39193\n5a6u 39194\nIGFjcm9ueW0= 39195\nIGdlbHM= 39196\nIGVsZWN0cm9seQ== 39197\n6JM= 39198\nINC80L3QvtC5 39199\nIGVwaXNvZA== 39200\nIERpZXNlcw== 39201\nIEFUUA== 39202\nIGVkaXlvcnVt 39203\nIGV4cHJlc3Nlcw== 39204\nIGV4aGliaXRz 39205\nQ29tbQ== 39206\nINC60YDRg9C/ 39207\nIG1hdGFy 39208\nIDIwMjU= 39209\nIEFydGVt 39210\ndmFzaXZl 39211\ncsOg 39212\nIGJlxZ8= 39213\n6buD 39214\nIGxpemFyZA== 39215\nIGZpbGxl 39216\nIOyniOusuA== 39217\nINC80L7RiQ== 39218\nIHTDvHI= 39219\nIGN1bHByaXQ= 39220\nIHdvdmVu 39221\nIEFOWQ== 39222\nbmlt 39223\nIHRheQ== 39224\nIHByb21pbg== 39225\nIGFjb21wYQ== 39226\nIGlkw6k= 39227\nIGJvaWxlcg== 39228\nIFRoZW1lbg== 39229\nIGF2ZW51ZQ== 39230\nIE11ZA== 39231\nINC90L7QstGL0LU= 39232\nIHdpdG5lc3Npbmc= 39233\nIGxhbmNl 39234\nIENIQU4= 39235\nIEJldmVy 39236\n2KrZhQ== 39237\nIGNoZW1vdGhlcmFweQ== 39238\nS2luZw== 39239\nIGLEmWTEmQ== 39240\nIGF0dWFs 39241\nIHRpdmU= 39242\nIHRhbGtpbg== 39243\nIHF1ZWRhcg== 39244\naWXDnw== 39245\nZWRlbA== 39246\nIOyWtOygnA== 39247\nIGpvZ2Fy 39248\nIMO2cg== 39249\nIHVuZGVydGFraW5n 39250\nIFN0cmVuZ3Ro 39251\nIG1pbGjDtWVz 39252\nIFdpbmU= 39253\nIE1vbHQ= 39254\n6K6y 39255\n44GR44KM 39256\nIHVuZGVybWluZQ== 39257\nIEFyY2hpdmVz 39258\ndmFuYQ== 39259\nbWVyY2lhbA== 39260\nTUM= 39261\nIGNhc3Rl 39262\n0L/RgA== 39263\nIGxlZ2lzbGF0b3Jz 39264\ndWxhdG9ycw== 39265\nw6puaW8= 39266\nIOuNsOs= 39267\nINGF0L7RgtC40YLQtQ== 39268\nINC90LXQug== 39269\nIHN1cm4= 39270\nIGNvbnNjaQ== 39271\nIFBPVw== 39272\nIGN1bGluYXJ5 39273\nIEtBVA== 39274\nIEZvbGtz 39275\n0YvQstCw0LXQvA== 39276\nINCy0L7Qug== 39277\n44GR44KL 39278\nc2VydmljZQ== 39279\ncHRz 39280\nINC/0L7QsdC10LQ= 39281\n5piv5ZWK 39282\nIHRlbnRz 39283\nIG5vcmQ= 39284\nU1RF 39285\nIHJlcHVibGljYW4= 39286\nIHd5aw== 39287\nIG1pbmlvbnM= 39288\n6JmV 39289\nIG1lbWFuZw== 39290\namVzdA== 39291\nIGNvbXBhcmF0aXZl 39292\nIHR5bGU= 39293\nY2FyYm9u 39294\nYmVkaW5ndA== 39295\na3Nlbg== 39296\nIG5lZ2F0aXZpdHk= 39297\nIHNqw6Rsdg== 39298\nIGTDug== 39299\n5omA5pyJ 39300\nIHJlY2FsbGVk 39301\nY3Jh 39302\nIFRhZGE= 39303\nINGA0YPQutC4 39304\nINC+0L/RgNC10LTQtdC7 39305\nIHByb2NyYXN0 39306\nIGpvZ29z 39307\nIE9v 39308\nIEhlYXJ0cw== 39309\nIMOpY2g= 39310\nIGtzacSFxbw= 39311\nIGNvYXJzZQ== 39312\nIFR1YmU= 39313\nIEdyZWVucw== 39314\nIMOpbg== 39315\nIGR1bWJiZWxs 39316\nINGC0Lg= 39317\nIHF1ZXJlcg== 39318\n2KfYrQ== 39319\nz4POtc65 39320\nINC/0YDQsNCy0LjQu9GM0L3Qvg== 39321\nINC/0LDQvw== 39322\nIGNvbXByYQ== 39323\nIHTDqXI= 39324\nIEFudGVz 39325\nIG9wdGltdW0= 39326\nIGJpc2N1aXQ= 39327\nzrrOuQ== 39328\nYWN6ZWdv 39329\nIOyLnOqwhOydtA== 39330\nIE1hcmluZXM= 39331\ndmVybw== 39332\nIHZhY2NpbmF0aW9ucw== 39333\nIHBldHR5 39334\ncml0ZXJz 39335\nINCw0Ls= 39336\nY291bnRyeQ== 39337\nIGNvdW50ZXJz 39338\nIGF0dGVuZGFudA== 39339\nIEh1aQ== 39340\n44Go44GE44GG44GT44Go44Gn 39341\nY2th 39342\n0YHRgtCy0LXQvdC90YvQuQ== 39343\nZ3V5 39344\nIHRyaWNrZWQ= 39345\nIFJFRA== 39346\nIHRocmlsbGluZw== 39347\nz4DOv865 39348\nIHBpZ2d5 39349\nIGFudW5jaQ== 39350\nT1JURVI= 39351\nIFZhbHVl 39352\nIHJvbmQ= 39353\nIEFEQQ== 39354\nIHBvc2Vy 39355\naG9yZXM= 39356\nIFJvbGFuZA== 39357\nk68= 39358\nIG5vaXI= 39359\nINep15DX 39360\n67Cc 39361\naWVtYW5k 39362\nINC/0L7RgtC10YA= 39363\n6rOz 39364\nIOqxsQ== 39365\nIGZvcm1hdHRpbmc= 39366\nIExlZA== 39367\n6KeA55y+ 39368\nIGtpbGxlcnM= 39369\nIMSR4bqleQ== 39370\nIGhhYXI= 39371\nYWdhaW4= 39372\nITwv 39373\nIHNvbWV0aGlu 39374\nIGNvdWdoaW5n 39375\nIG5hdmU= 39376\nIHByb3NwZWN0aXZl 39377\nIEhL 39378\nIFJlc2N1ZQ== 39379\nbWF5YmU= 39380\nZ2dlcg== 39381\nINGA0LDQsdC+0YLRgw== 39382\n15XXnNed 39383\ndGFpbHM= 39384\n7ZWY7ZWY 39385\nIGV5ZWxpZA== 39386\nIGN1c3RvbWl6YXRpb24= 39387\nYXZpbGlvbg== 39388\nIHByb2NoYWlu 39389\nIGdsYXpl 39390\n5oOF5rOB 39391\nU2lt 39392\nINC+0L/QsNGB 39393\nIG1vc3F1aXRvZXM= 39394\nIGZlbnQ= 39395\nIGNhcGFjaXRpZXM= 39396\nIGFwb3N0bGVz 39397\nIGFsdHVyYQ== 39398\nIOusuw== 39399\nIHNlcm9udA== 39400\nIEFueXRpbWU= 39401\npbTripQ= 39402\nIGNvc3BsYXk= 39403\nIHNwYWM= 39404\nIHNhbWVu 39405\n44OE 39406\ndWNj 39407\nacOocmVz 39408\nIHNpYmxpbmc= 39409\nIENvY2s= 39410\nIOuPhQ== 39411\nINC/0YDQtdC00YHRgtCw0LLQu9GP 39412\nIGluc3RhbGxtZW50 39413\nIGRpamU= 39414\nIE1DVQ== 39415\nIEVI 39416\nIE5pbmc= 39417\nIHByZXBhcmVz 39418\nIGh5cG9jcg== 39419\ncHR5 39420\nIGthZMSxbg== 39421\nIEZyb3plbg== 39422\naGF1bA== 39423\nIEt5bGll 39424\n6YCZ5qij55qE 39425\nIHNodWZmbGU= 39426\nIGVsZW1lbnRhbA== 39427\nIGF1w59lcg== 39428\nIEtOT1c= 39429\nIEFMSVNTQQ== 39430\nWkE= 39431\n7LKg 39432\n576O5YWD 39433\nIHJlY2l0ZQ== 39434\nIHNjcmli 39435\nIDExNQ== 39436\n5LyR 39437\nIHN0YXJyZWQ= 39438\nIGxlcXVlbA== 39439\nIGJyZXdlcg== 39440\nIE9wcG9ydHVu 39441\nIHLDpA== 39442\nIGNob3BzdGlja3M= 39443\nIEthaA== 39444\nIEV0aGlvcGlh 39445\nIGhhbmRtYWRl 39446\nIGVyZm9sZw== 39447\nIER6 39448\naXR0ZW5z 39449\n6KqN54K6 39450\n0LLQsNC7 39451\nzrfOvQ== 39452\n5Yqe 39453\n44OT 39454\nYnJpbmdlbg== 39455\nIHVucGx1Zw== 39456\nIG9mZnM= 39457\nIGhlcm1hbg== 39458\nbGllZA== 39459\nYXNvbmlj 39460\nIFNlcmJpYQ== 39461\nIEd1YXRlbQ== 39462\nIC4uLiI= 39463\nIGVycmVpY2hlbg== 39464\nIGFtYmlndW91cw== 39465\nIFdoaXRuZXk= 39466\nenVm 39467\nTUFORA== 39468\noLU= 39469\nIHNxdWVlemVk 39470\n44Gd44GG44Gg 39471\neWFz 39472\n6b6N 39473\nIFNob2Nr 39474\nIHV0aWxpc2U= 39475\ndWtv 39476\nYm9sdA== 39477\nIG1vdGlm 39478\nIGlubWF0ZXM= 39479\nIGNvcnJ1cHRlZA== 39480\nIGNvbmNyZXQ= 39481\nIENyaXRpY2Fs 39482\nIFNpbmdpbmc= 39483\nINGE0YPQvdC6 39484\n6a2U 39485\nbm92YQ== 39486\ncmViYmU= 39487\nZHQ= 39488\nVW5pcw== 39489\nIHdlYmNhbQ== 39490\nIGNhbW91Zmw= 39491\nS2Vu 39492\nIGxhd3N1aXRz 39493\nIENvbnN1bWVy 39494\nIHJlY29sbA== 39495\nIGtsZWluZXI= 39496\nIEZJRkE= 39497\nIDE5NjI= 39498\n6K2m 39499\nIG1hbGFk 39500\nIOywvQ== 39501\nIMOldA== 39502\nIGluZmx1ZW5jZXI= 39503\nIEFydGlzdA== 39504\nc3Rp 39505\n44Gq44KL44G744Gp 39506\n4Lin4Lii 39507\neXPFgg== 39508\nIEJpYW4= 39509\niOuEpA== 39510\nIGZpcmVwbGFjZQ== 39511\nIEFwcGxpY2F0aW9u 39512\nIG1uaWVq 39513\nIGFjaWRpYw== 39514\nIE1vcm1vbg== 39515\nc3Nh 39516\n5YuZ 39517\nIHNuZWFreQ== 39518\nIG9qb3M= 39519\nIHZvdWQ= 39520\nIERhaQ== 39521\nIGdyYXNzcm9vdHM= 39522\nIFVuYmVsaWV2YWJsZQ== 39523\nIEdhYmU= 39524\nIEV4dHJlbWU= 39525\nIGhhc3NsZQ== 39526\nIGNvYg== 39527\nbXVtYmxpbmc= 39528\nUGFzcw== 39529\njOufrA== 39530\nIHN5c3RlbWF0aWNhbGx5 39531\nIHNldmVudGVlbg== 39532\nz4DOtc65 39533\n4pmh 39534\nINC60L7Rgg== 39535\nIHNlbmRpcmk= 39536\nIGJhdGhyb29tcw== 39537\nIFN0ZXJu 39538\nIEFyZHVpbm8= 39539\n6Lk= 39540\nY3JpYmluZw== 39541\nIHJlb3BlbmluZw== 39542\nIGNlcnY= 39543\ncGVl 39544\nQVJJ 39545\nIGNhZHJl 39546\nIEFuY2g= 39547\nTGVl 39548\nIE1BWA== 39549\nIG3DpG5u 39550\nIGNob3Jlcw== 39551\nIGFkZXNzbw== 39552\n5p2R 39553\nIE5pZw== 39554\nIGRpc3NlcnRhdGlvbg== 39555\nIFZheQ== 39556\nU1RBTEs= 39557\n0LDQutCw 39558\nYXZhdA== 39559\n56C0 39560\nIHB1bmt0 39561\nIHBhZGRpbmc= 39562\nIFRlbXBs 39563\nIGVqZQ== 39564\nIO2EsA== 39565\nIGF6dA== 39566\nIOuMgO2GteuguQ== 39567\nIHJlYXJyYW5nZQ== 39568\nw6FjaA== 39569\nIOyCrOuejOuTpA== 39570\nIGZyZWFraW4= 39571\nY3JpcmU= 39572\nIOy7pOs= 39573\nIEV4cGxhaW4= 39574\nIM+Ez4nOvQ== 39575\nIGJvZGlseQ== 39576\nIExlaXN0 39577\nIHNpZ3Vp 39578\nIGJ1bmtlcg== 39579\nIGF6dWw= 39580\nIEhhdXNo 39581\nU3Vi 39582\nINCQ0L3QtA== 39583\nINC60YDQsNC5 39584\nIGlsbGVnYWxseQ== 39585\nIE11eQ== 39586\nIEZlaQ== 39587\nIEJhbmFuYQ== 39588\nIHNjaG9sYXJseQ== 39589\nIFByenk= 39590\nIE1vc3M= 39591\nIEZpbHRlcg== 39592\nIOyWtOuWoQ== 39593\nIE1heHdlbGw= 39594\ndGVuc2U= 39595\nIGxvbmdpdHVk 39596\nIGxhbmdzYW0= 39597\nINee16c= 39598\nc21pdGg= 39599\naXphZGE= 39600\nINC90L7RgNC80LDQu9GM0L3Qvg== 39601\nIFZvbGw= 39602\nIEVsZW5h 39603\n5pa56Z2i 39604\nINGF0L7RgtGM 39605\nIERhYmVp 39606\nIGNvbnNlcnZhdGl2ZXM= 39607\nIHByw7Nwcmlh 39608\nIERpZXNlcg== 39609\nIEJyZW5kYQ== 39610\nb29raWU= 39611\nIGJhbmM= 39612\n44Ov 39613\n7J207KY= 39614\n7JuD7J2M 39615\nIGtlaA== 39616\nIHdlZGRpbmdz 39617\nIHRodW5kZXJzdG9ybQ== 39618\n5pS+5b+D 39619\nIENvb3JkaW4= 39620\n7IiY6rCA 39621\nIHByemVjaQ== 39622\n6ZKx 39623\nT1NTVEFMSw== 39624\nbWFhbg== 39625\nIOqxtOs= 39626\nINio2Yc= 39627\nIMW8YWQ= 39628\nIHlhY2h0 39629\nIGfDtnQ= 39630\nIGJsZWFjaA== 39631\nIHNob3J0ZW4= 39632\nINGB0YLQsNC70L4= 39633\ndXNhbg== 39634\nIOyekOyXsA== 39635\nIGRlcnM= 39636\neGlz 39637\njZTri4g= 39638\nIHF1YW50aWRhZGU= 39639\nIG9wcHJlc3NlZA== 39640\nINC30LDQutC+0L3Rhw== 39641\n5LiI5aSr 39642\n44GI44GI 39643\nINGH0LXRgtGL 39644\nINCd0LDQv9GA0LjQvNC10YA= 39645\ndWxw 39646\n5oCW 39647\n2YLZiNmE 39648\n0L7Rh9C1 39649\nzqzOuw== 39650\nemVuaXU= 39651\nIGZvcm1hdGlvbnM= 39652\nIHNwYXJrZWQ= 39653\nIEVudHdpY2tsdW5n 39654\nYWxscw== 39655\nIHZpdmly 39656\nIGV4cGlyYXRpb24= 39657\nb3RpbmU= 39658\nINCn0LXRgA== 39659\nIFR1cm5pbmc= 39660\nIHRhcmlmZnM= 39661\nIG5hc3TEmXA= 39662\nIGFiaWRl 39663\naWtzaQ== 39664\nIGZsYXNoZXM= 39665\nIGRpc3B1dGVz 39666\nIOyytA== 39667\nIG1lcmFr 39668\nIGVub3Jtb3VzbHk= 39669\nemFobA== 39670\nIGbDvGhydA== 39671\n0LLQvtC9 39672\nINC30LDQstC40YE= 39673\nIHBlcnNldmVyYW5jZQ== 39674\nIGRpdmlkZW5kcw== 39675\nIGNvbnRlc3RhbnRz 39676\nIHByb3N6xJk= 39677\nIEZyYW5rZW4= 39678\n44KN44GG 39679\nIGV4cGxvcmVy 39680\nIGJ1ZmZhbG8= 39681\n4oCV 39682\nIGVjb2xvZ3k= 39683\nIHNjYWxhcg== 39684\nIGNyYW4= 39685\nzrXPhM6xzrk= 39686\nxbx5xIc= 39687\nIOyalOs= 39688\nIGdpYQ== 39689\nIEdvZw== 39690\nIFByaXY= 39691\nIOunkOydhA== 39692\nIFJlYXNvbg== 39693\ncmFrdGlvbg== 39694\nIERlYm9yYWg= 39695\nIGtpdHRlbg== 39696\nIEVkaW4= 39697\n5Lm+ 39698\ncGllag== 39699\nIOuLtA== 39700\nIG3DoXF1 39701\nIGJpZGRpbmc= 39702\nIGFmZmluaXR5 39703\nIGFpa2E= 39704\nZm9saw== 39705\nIENvbnNl 39706\nIGRldXRzY2hlbg== 39707\n6IY= 39708\nIGRlYml0 39709\nxLHEn8Sxbg== 39710\naXNlbA== 39711\nIOykkeq1rQ== 39712\nIOutkOqwgA== 39713\nIHRydXN0d29ydGh5 39714\nIFN0YXJ0ZWQ= 39715\n5pWR 39716\nw7xyZA== 39717\nINC/0L7QvdGP0YLQvdC+ 39718\nIHNjaWVudGlmaWNhbGx5 39719\nUG9kcw== 39720\nQ1JPU1NUQUxL 39721\nIHByZWd1bnRhcw== 39722\nIGNhbG1pbmc= 39723\nIFByZW1pZXJl 39724\n15vXqQ== 39725\nINGF0L7Qu9C+0LQ= 39726\nIGNhcGl0YQ== 39727\nIHRvbWE= 39728\nIG11cm0= 39729\nIGZ1ZXJ6YQ== 39730\nIEhhbmk= 39731\n5oiR5pyJ 39732\nw7xm 39733\nYXJsb3M= 39734\nIGjDpHVm 39735\n44GR44Gm 39736\nIG9zb2J5 39737\namVnbw== 39738\nINC/0LjRgQ== 39739\nIGNhbG1seQ== 39740\naWRldA== 39741\nYnVjaA== 39742\nZ29uZQ== 39743\nIHZpc2Nvc2l0eQ== 39744\nIG1vZGFs 39745\nIGdlc2Ft 39746\nIEh6 39747\nIG11bmljaXBhbGl0aWVz 39748\nIGNpcmN1bGF0aW5n 39749\nb2xpbmE= 39750\nU2hv 39751\n6aKR 39752\nIEJlbmVk 39753\nb2x1 39754\nIHJlc3Rz 39755\nIGzDpW5n 39756\nINCe0LTQvdCw0LrQvg== 39757\nIHByemV3 39758\nIHBlcHA= 39759\nIG1hcnJpYWdlcw== 39760\nIEJJRw== 39761\nYW5kYW4= 39762\nIG1hZ2ljYWxseQ== 39763\nIGJhYnlz 39764\nIOuMkw== 39765\nIGhhY2tlcnM= 39766\nQmFieQ== 39767\nIE1vbnN0 39768\nIGNpZXI= 39769\nIEFyYWJz 39770\nINC80LDQs9Cw0Lc= 39771\nIEluZG9uZXNpYW4= 39772\n44GE44GG44GT44Go 39773\nIE1hcmt0 39774\nIGRhY2h0ZQ== 39775\nIFNjaMO8bGVy 39776\nIFZORA== 39777\nIHNwaWVsdA== 39778\nIHBlcmx1 39779\n44K0 39780\n5a2Y 39781\nINC/0YDQvtGF0L7QtA== 39782\nIHNhbHRlZA== 39783\nIGltcHJvdmlz 39784\nIEluc3Ry 39785\ndmVsbWVudGU= 39786\nIG5lc3M= 39787\nIGZ1bmd1cw== 39788\nIGNvbGxhYm9yYXRvcnM= 39789\nIFZpcnVz 39790\nZXN0YXI= 39791\nIHByb2plY3Rvcg== 39792\nINCf0YDQsNCy 39793\nIGFnaWxpdHk= 39794\n15nXoNeV 39795\nZXJlbA== 39796\nINCy0L7Qt9Cy 39797\nINCx0LDQtw== 39798\nIENhdGh5 39799\nxJ91 39800\nINCz0L7QstC+0YDQuNC7 39801\nYmlsaXR5 39802\nIExhbmM= 39803\nIEtpbWJlcmx5 39804\nIEJyaWVm 39805\n5YW3 39806\nIHV0dmVjaw== 39807\nIGdvZ2dsZXM= 39808\nIHByZXNjaG9vbA== 39809\n56eN 39810\nQVRIRVI= 39811\nIG1vdGl2ZXM= 39812\nIEJvbmc= 39813\nRVg= 39814\nIGNoaWxseQ== 39815\nIEFkdmlzb3J5 39816\n4oCL4oCL 39817\nINC60L7RgtC+0YDQvtC8 39818\nIHRyYWl0b3I= 39819\nIGRlbWFzaWFkbw== 39820\nINGG0LXQvQ== 39821\nINC80L7QuA== 39822\n5Z6L 39823\nIG11bHRpZg== 39824\n7JSs 39825\nIEFsZXhpcw== 39826\nIHppZXQ= 39827\nIFJhbWE= 39828\nYnJhbmNl 39829\nIHNhbmN0aW9u 39830\naXRvdXM= 39831\n15XXmg== 39832\nIOuztOuC 39833\n0YHRgtCw0L3QvtCy 39834\n6Laj 39835\nINGA0LXRgQ== 39836\nIENodXJjaGlsbA== 39837\nINC/0YDQtdC3 39838\nIElP 39839\nIEdlZQ== 39840\nIEdhdGhlcg== 39841\nYXRvcmk= 39842\nVHlsZXI= 39843\nINC90LXQvNC90L7Qtg== 39844\nIGLDpWRl 39845\nIEtpbGxlcg== 39846\nIHR1YmVy 39847\nIFJhbWFkYW4= 39848\n4b8= 39849\naWVodA== 39850\nIHN0cmFuZ2VseQ== 39851\n0LvRgw== 39852\nIHJlZGVzaWdu 39853\nIGluY3VtYg== 39854\nIGJlcmFiZXI= 39855\nIFZvbGtzd2FnZW4= 39856\nbWV0YWw= 39857\nZHp5 39858\ncGNpw7Nu 39859\nIOyViuyVhA== 39860\n5ZSx 39861\n5aS0 39862\nIEdvb2RuZXNz 39863\n0LjQstCw0LXRgtGB0Y8= 39864\nYmFobg== 39865\nIEFudGFyY3RpY2E= 39866\n0LXQutGC0L7RgA== 39867\nIGhvbWVvd25lcnM= 39868\nemVpZ3Q= 39869\nIO2YhOyerA== 39870\n7KeA64+E 39871\nIGdlb2dyYXBoaWNhbA== 39872\ndGhpbmtpbmc= 39873\nIGdvc3Rh 39874\nIEltYW0= 39875\ndWxpZmxvd2Vy 39876\nZGFn 39877\nYW5udA== 39878\nYWtvdg== 39879\nIGRvd253YXJkcw== 39880\n7LK06rCA 39881\nQ1VCRQ== 39882\nINCa0YHRgtCw0YLQuA== 39883\nINC/0L7Qu9C+0LI= 39884\nIHBsYXRlYXU= 39885\n44GE44GN 39886\n4bil 39887\nIGNobG9yaW5l 39888\nIGFjY2VsZXJhdG9y 39889\nIHNvbHZlcw== 39890\nIEdyYXNz 39891\ncGlhbm8= 39892\nINqp2Kc= 39893\nINio2Ko= 39894\nIFJvY2hlc3Rlcg== 39895\nINmH2Yo= 39896\nIGNvbGxlY3Rz 39897\njZTrnbw= 39898\nIENoZWVy 39899\nbGluZ2Vu 39900\nINGA0LDQt9Cz 39901\nIGFtw6lyaWM= 39902\naHRh 39903\nRUNU 39904\nIGFydGlmaWM= 39905\nIFBheVBhbA== 39906\naGFuYQ== 39907\nU3RlcGhlbg== 39908\nIEdlc3Q= 39909\ncGhhbHQ= 39910\nIHJlcGxpY2F0aW9u 39911\nIFdpbGxpZQ== 39912\nIG5ldXRy 39913\nIGlycmF0aW9uYWw= 39914\nIGRhZG9z 39915\nIEFpZA== 39916\na2Ft 39917\nYW50ZXI= 39918\nINC00YPQttC1 39919\nIGRldG9u 39920\nIGhhcmU= 39921\nIGJldHM= 39922\nYmFnYWk= 39923\nIHN0YWluZWQ= 39924\nIHBsYXVzaWJsZQ== 39925\nIHBlZWxpbmc= 39926\nIGNyw610 39927\nIGdyb3Rl 39928\n7Law 39929\npbTqsow= 39930\nYWx0ZXQ= 39931\nUGhvbmU= 39932\nRmls 39933\nU1FM 39934\nIGdlZmFsbGVu 39935\n5Y+U 39936\nIHNhw7pkZQ== 39937\nIFRhbWls 39938\nY291cw== 39939\nINCz0LvQsNCy0L3QvtC1 39940\nIGF0cmF2w6lz 39941\ndXNzaWE= 39942\nIHp3ZWl0ZW4= 39943\nIEVsdmlz 39944\nIG1vdmVy 39945\nIGxpbWl0ZQ== 39946\n6L+9 39947\nYXJleg== 39948\npbTqs6A= 39949\nIEtyYW5rZW4= 39950\nw7xyZQ== 39951\nIOyViuyVhOyalA== 39952\nIHRow6BuaA== 39953\nIHByb2ZvdW5kbHk= 39954\nIGJlZHJvb21z 39955\nIHRvb3RocGFzdGU= 39956\nIEFjY2VwdA== 39957\nw6l0aWNv 39958\nIGvDvMOn 39959\nIEFyeQ== 39960\nYWRpbg== 39961\nIGdyYW51bGFy 39962\nZWN0ZWQ= 39963\nIG1lbmphZGk= 39964\nIGNvbXBldGVuY2U= 39965\nZG9j 39966\nIHNwYXJrbGluZw== 39967\nIOyii+ydhA== 39968\nIGNvbnN0cnVjdGluZw== 39969\nIGFtdXNlbWVudA== 39970\nIEluc3VyYW5jZQ== 39971\nIEZldWVy 39972\nIHJlbm92YXRpb24= 39973\nc3VjaA== 39974\ncGxhdA== 39975\nIHByb3N0aA== 39976\nIGJleQ== 39977\nIENvbXBsZXRlbHk= 39978\nIHpvZA== 39979\nYWxu 39980\nVmljdA== 39981\nIGNvbmZpcm1z 39982\nw6R0eg== 39983\n4pY= 39984\naGFtbWVy 39985\nINC30L3QsNC10YI= 39986\nIGFkbWlyZWQ= 39987\noOulvA== 39988\nIEZydWl0 39989\nZXJ0ZW4= 39990\nIG5pZWNl 39991\nIFRpbnk= 39992\nIHBsdW1iaW5n 39993\nZXJtYQ== 39994\nINC70LXQs9C60L4= 39995\nIHdpbmRzaGllbGQ= 39996\nINGB0LzQtdGA 39997\nIGJ6dw== 39998\nIGFib2xpdGlvbg== 39999\nIFNhZGhndXJ1 40000\nIHByZWFjaGVk 40001\nIENyZWF0aW5n 40002\n54mb 40003\ncGVyZWQ= 40004\nIHZvbG9udA== 40005\nIHF1aW50 40006\nIHByaW50ZXJz 40007\nIG5lZ3Jv 40008\nIGdyb3NzZQ== 40009\nIFRoeQ== 40010\nIEZlbGxvd3M= 40011\n5o6l5LiL5L6G 40012\nIHN0YW5pZQ== 40013\nIG5ld2NvbQ== 40014\nIEh1ZQ== 40015\nIEZyZXVuZGU= 40016\nIENvbnN0cnVjdGlvbg== 40017\nIGFkdmVyc2l0eQ== 40018\nIG5lZ2F0aXZlcw== 40019\nIGhhemFyZG91cw== 40020\nIGNvbXBlbGxlZA== 40021\nIHdvaw== 40022\nIE95 40023\n0L/QsA== 40024\nqqjr 40025\nIHJlbmRleg== 40026\nIG92ZXJj 40027\nIHdlYXZpbmc= 40028\nINC40LTQtdGC 40029\nIHByb3NlY3V0b3Jz 40030\nIGF1ZGlvYm9vaw== 40031\nIGFuY2VzdG9y 40032\nIHVuZGVyZ29pbmc= 40033\nIHBvdW5kaW5n 40034\n44GC44KK44GM44Go44GG44GU44GW44GE44G+44GZ 40035\nIO2SgA== 40036\nIOy2pA== 40037\nIHR1bGVl 40038\nIOyXtOw= 40039\nIHpvYWxz 40040\nIG5laW4= 40041\n6a2a 40042\nIG9rZQ== 40043\nIEpveWNl 40044\nIG51ZA== 40045\nIGRpbGlnZW5jZQ== 40046\nIExhYnM= 40047\nIHZlbnRz 40048\nIGFuY2VzdHJhbA== 40049\n4Lir4Lih 40050\nINC80YPQttGH 40051\nIG5vbcOpcw== 40052\n6KGo56S6 40053\nd2FsaQ== 40054\ncWluZw== 40055\nIE11bHRpcGxl 40056\nIENvbnN1bHQ= 40057\nIGlzdGVkaQ== 40058\nIERveQ== 40059\nYWthaA== 40060\nIGRpc2NpcGxpbmVk 40061\nIGFsdGVybmF0aW5n 40062\n55I= 40063\nIHZlcm1l 40064\nINC+0Yk= 40065\nIHRvdGE= 40066\nIFByYWc= 40067\nIHN3b3Ju 40068\nIGJlYmVy 40069\nIEF1ZmdhYmU= 40070\n7Jq06w== 40071\n6L6m5rOV 40072\nIHl1cA== 40073\nIHJlY2xhaW0= 40074\nb251dA== 40075\nIGF1Y3VuZQ== 40076\nIGFtcGg= 40077\nIMWbd2ll 40078\nIGFh 40079\naXNjb3Zlcg== 40080\nIEFyZw== 40081\nY2llxbw= 40082\nIGRlc3Nhcw== 40083\nIFfDpGg= 40084\n4bu5 40085\nINC00LDQstC90L4= 40086\nIHNpbGVudGx5 40087\nYXJj 40088\nIO2bhOuztA== 40089\nIHR3ZWV0aW5n 40090\nIE9uZA== 40091\n6aGe 40092\npqzrqbQ= 40093\nIGJvd2Vs 40094\n7IWo7Ja07JqU 40095\n6IGK 40096\nT1NF 40097\nIHByb3Bpbw== 40098\nIEt1bnN0 40099\na3VuZw== 40100\nIGRvbm7DqWVz 40101\nIEhvcml6b24= 40102\nIEZyb2c= 40103\n5YCL5Lq6 40104\nIGFyaXN0 40105\nw6Js 40106\nINC60L7Qtg== 40107\nIHNlZ3VuZG9z 40108\nIFNob3J0bHk= 40109\nIENyb3dk 40110\naXJhbg== 40111\nIHfFgmHFm2Np 40112\nIExhYw== 40113\naWRlbnRl 40114\nIOqwgOyekA== 40115\nIGxlbg== 40116\nIFNVUw== 40117\nIE1vdG9ycw== 40118\nIFRyZW50 40119\nb21pZQ== 40120\nIHRyYW5zbWl0dGVy 40121\nIEFzc2Fk 40122\nIHBzeWNoaWF0cmlj 40123\nINC20LjRgtGM 40124\nIG91dGxpbmVz 40125\nIGVmZmVjdGl2ZW1lbnQ= 40126\nIFJlbGlnaW9u 40127\ncHJlaA== 40128\nINC00L7Qu9C20L3QsA== 40129\nIM2hwrA= 40130\nIENvbnNlcnZhdGlvbg== 40131\nIOG7 40132\nINC30LDQuQ== 40133\nIHJlc2lkZQ== 40134\nIGNvbXBsZXRv 40135\nS0VO 40136\nIOuCmOyYpOuKlA== 40137\nIHN1YnVyYmFu 40138\nIHLDqXBvbmRyZQ== 40139\nINGA0LDQt9C70LjRhw== 40140\nIGdhbGxlcmllcw== 40141\nIHJhcHQ= 40142\n5oSf6Kyd 40143\nKS4uLg== 40144\nIGNydWVsdHk= 40145\nIFZNd2FyZQ== 40146\n7Yis 40147\nIGhhecSxcg== 40148\nIGdyb3VwaW5n 40149\nIFJpZGVy 40150\nIHN5bGxhYmxl 40151\nIGJlaXNwaWVsc3dlaXNl 40152\nIHNhZmVndWFyZA== 40153\nIHBlbMOtY3VsYQ== 40154\nYXJ0aQ== 40155\nINCh0L4= 40156\nIGNoZWdh 40157\nINC60L7QvNGD 40158\nIHNlaXNt 40159\nIGhhcm1sZXNz 40160\nIFdhcnJpb3Jz 40161\n44GE44Gk 40162\nINC/0YE= 40163\nIHNoYW1lbGVzcw== 40164\nIEJhdW0= 40165\naW5zdGFsbA== 40166\nIHRvb2xraXQ= 40167\nIHBpcGVsaW5lcw== 40168\nIHB1c3N5 40169\nIGNvbmNlYWw= 40170\nIHByb3Rlc3Rpbmc= 40171\nb2Nob25k 40172\nIGR1YQ== 40173\nIFBvc2U= 40174\nIGhlbGl1bQ== 40175\nIFVY 40176\naWtsZQ== 40177\nIFN1ZmY= 40178\nIOyEuOqzhA== 40179\naW5nZXJz 40180\nINGB0LvRg9GH0LDQuQ== 40181\nIGRlc2NlbmRpbmc= 40182\nIOaykuaciQ== 40183\nIG1vbnRhZ2U= 40184\nSGlnaA== 40185\nIOydtOyW 40186\nIElkaQ== 40187\nINeR16E= 40188\nIGV4cHJlc3NpdmU= 40189\n56eL 40190\nINC/0L7Qu9C10Lc= 40191\nIHBvbmU= 40192\nIGFkb2xlc2NlbnQ= 40193\n0LDQvdC90YvQtQ== 40194\nIGFzc2Fzc2luYXRpb24= 40195\nd2Vpc2Vu 40196\nZW1hdGljYWxseQ== 40197\nYXV0aA== 40198\nIHVyZw== 40199\nIGdhbmhhcg== 40200\nIGZ1bmRv 40201\nIFJob2Rl 40202\nINC40YHRgtC+0YDQuNC4 40203\nIGNvbXBhcnRpbA== 40204\n5pWi 40205\nIGRpbWluaXNoZWQ= 40206\nIGFwcHJlbnRpY2U= 40207\nINCR0YPQtA== 40208\nIHBob3RvbnM= 40209\nIGPDs2Q= 40210\n5bmV 40211\n5qyK 40212\nb25haw== 40213\nIGFkZWxhbnRl 40214\nIGNodQ== 40215\nb3BpYw== 40216\nIGFpeMOt 40217\nZWRkYXI= 40218\nIENvbmdyYXRz 40219\nbW9y 40220\n5aW95ZCn 40221\nIHJlc2VydmF0aW9ucw== 40222\nIFRvYnk= 40223\nIEtlcm4= 40224\nIHJhemVt 40225\nIGZvcmdlZA== 40226\nIGhvcnJpZnlpbmc= 40227\n2YrYuQ== 40228\nIEpvaW5pbmc= 40229\n44Op44Kk 40230\nIEF1dGg= 40231\nZGFo 40232\nIGNvbnNpZw== 40233\nIGludGltaWRhdGVk 40234\nIHBlcmlwaGVyYWw= 40235\nIG1lbm8= 40236\nIGRldGVjdGluZw== 40237\nIHRlb3I= 40238\nIHRhZ2dlZA== 40239\nIG5vc3RhbGdpYw== 40240\nIOuvuOyViA== 40241\n5YC8 40242\nIHZlcmRp 40243\nIGxhYmVsaW5n 40244\n0L/QvtC0 40245\nYXN0ZXM= 40246\nIHZpc3Q= 40247\nIGN5dA== 40248\nIGZsaXBz 40249\n0YDQuNC3 40250\nYmFsYW5jZWQ= 40251\n44Gq44GP 40252\nINC+0YjQuNCx 40253\nIGRlc3Rpbg== 40254\nbGFzc2U= 40255\nZXJlaQ== 40256\nIGthbG8= 40257\nIGFycXU= 40258\nIHBsYW5v 40259\nIG9yZGluYW5jZQ== 40260\nIGNvbXBpbGF0aW9u 40261\nIFZvY8Oqcw== 40262\nIEVjbw== 40263\nIOy2lOyynA== 40264\nIGVuY2ltYQ== 40265\nIEdhcnJldHQ= 40266\nIENvcmQ= 40267\nw7Zsa2Vy 40268\nIEFycm93 40269\nIHByb3RvbnM= 40270\nLOKAiw== 40271\nIOyymOs= 40272\nIHNjYW5k 40273\nIGJlaWdl 40274\nY29uZw== 40275\nIGJpa2luZw== 40276\nIFRM 40277\n0YPQvdC0 40278\nIOyGlOyngQ== 40279\nIFZpbGxh 40280\nIEpBQ0s= 40281\n5Lul5Y+K 40282\nIMO2xJ9yZW4= 40283\nIHRlbWFz 40284\nIEt5dW5n 40285\nSmVubg== 40286\nIGN1ZA== 40287\nIGltcG9zaW5n 40288\nIGNvbW1hbmRtZW50cw== 40289\nIE1lYW5z 40290\nIETDpHI= 40291\nIHJlY29tZW5k 40292\nIGRpc3Bvc2l0aW9u 40293\n2KfZhw== 40294\nIHRodQ== 40295\nIHJlZHVjdGlvbnM= 40296\nIGRpdQ== 40297\nINeV15DX 40298\nINC40YHRgdC70LXQtA== 40299\ndGhyZW4= 40300\nIGxhZG9z 40301\nIFJC 40302\naXhlZA== 40303\nIOyP 40304\nRnI= 40305\nc3RpbGw= 40306\nIG9sbWFz 40307\nQ0hVQ0s= 40308\nIO2GoA== 40309\nIEluZGVwZW5kZW50 40310\n0JLQng== 40311\nIHBpdHM= 40312\nIHVuZGVydGFrZW4= 40313\nIGbDuHI= 40314\nIE5hdw== 40315\nIOyekeyXhQ== 40316\nIHNoZXBoZXJk 40317\nIGxhbmd1ZQ== 40318\nIEphYg== 40319\nIERydW0= 40320\nIEVsZWt0 40321\n5ous 40322\n44GY44KD44Gq44GE 40323\n4buRdA== 40324\nIOydtOyqvQ== 40325\nIGJlZ2lubmVu 40326\nIEZ1cnk= 40327\n4buDdQ== 40328\nc2VjdGlvbnM= 40329\nIHNwcmF5ZWQ= 40330\nIG3DoXI= 40331\nIFZvbHQ= 40332\nIFNlb25n 40333\n0LjRgtC10Ls= 40334\nZHVjdGlvbg== 40335\nYXNhbg== 40336\nIGp1ZGdtZW50cw== 40337\naW1hYW4= 40338\nnteq 40339\nIHNpZW50bw== 40340\nIEFDVA== 40341\nIEJI 40342\nZGV2 40343\nIOyii+yVhO2VmA== 40344\nIGpvcm4= 40345\nSVNUSU4= 40346\nIHJvYXI= 40347\nIGltbWVyc2lvbg== 40348\nYWZmbGVz 40349\nIHRyYWluZWU= 40350\nIEJpbGxib2FyZA== 40351\ncmVzc2Vz 40352\nIFdhcm0= 40353\nIFJvYmVydG8= 40354\nIHV0aWxpeno= 40355\nIElnb3I= 40356\nIHJhc2g= 40357\nIGFuYWx5dGlj 40358\naXJhbQ== 40359\nIHN5bW1ldHJpY2Fs 40360\nIGxpZmVzcGFu 40361\nIGVhdGVy 40362\nIEJsb29tYmVyZw== 40363\nYXRlcmlhbA== 40364\nIOuvvw== 40365\nIGlzdGVy 40366\nIGludmFsdWFibGU= 40367\nIGFzc2lzdGluZw== 40368\nIHNoYWNr 40369\nzrzOsc+EzrE= 40370\namlz 40371\nZW5peg== 40372\nINC/0YDQtdC00LvQvtC2 40373\nIGRlY2xhcmluZw== 40374\nIFZpa2luZw== 40375\nIEFzc2lt 40376\nIGV4cGVuZGl0dXJl 40377\nIHBvc2luZw== 40378\nIE9udW4= 40379\nIGluaWM= 40380\n0LDRjtGC0Yw= 40381\ncmV2 40382\nIG1pZWRv 40383\nIGZpbHRoeQ== 40384\nIElC 40385\nIERpc2NvdmVy 40386\naWNodGV0 40387\nbWlsbGlvbg== 40388\ntoTrk6TsnbQ= 40389\nIGFtYmlndQ== 40390\nIEZseW5u 40391\nYmFyZHppZWo= 40392\nIGluY29tcA== 40393\n0LDQstC90L4= 40394\nemlh 40395\nIGluZmx1ZW5jaW5n 40396\nIHdvcmxkbHk= 40397\nIFNhbGVzZm9yY2U= 40398\nemV0 40399\nIHBhcnRpY3VsaWVy 40400\nIEtvY2g= 40401\nIDE5NDM= 40402\nIHRvbmVy 40403\nINGN0LrRgdC/0LXRgA== 40404\nIHN1c2NyaQ== 40405\nIHRyaWdnZXJpbmc= 40406\nSUNFUw== 40407\n7Iqk6rCA 40408\nzrTOsQ== 40409\n0YDQsNCx0L7Rgg== 40410\nIGFmdGVyd2FyZA== 40411\ncGluZQ== 40412\nIElM 40413\nYXJldGg= 40414\nINC/0LDQuw== 40415\nIHNha2Vy 40416\nIDE5NDc= 40417\nQUY= 40418\ndXlvcnN1bg== 40419\nIOyKpOs= 40420\nIHF1YW50aWZ5 40421\nIG1lbnRvcnNoaXA= 40422\nIGxsZWdh 40423\nIFRhbWFyYQ== 40424\nIG9wdGltaXppbmc= 40425\nIGZyb250cw== 40426\nb3N0ZXJz 40427\nIGVzcXVlcg== 40428\nIHN1Ym1pc3Npb25z 40429\nIGFubmlo 40430\nIHN1Y3Rpb24= 40431\nbHVlbmNl 40432\nY2hpZWRlbg== 40433\nSU5HUw== 40434\nINeR15Q= 40435\nINGB0YbQtdC9 40436\nIHdpZWx1 40437\nIG9iamV0bw== 40438\nIGJvb2Jz 40439\nIEdlc2Now6RmdA== 40440\nIGVhcmJ1ZHM= 40441\nINGA0LDQvdGM0YjQtQ== 40442\nIHJvdXRpbmVseQ== 40443\nIGNvbGxhZ2Vu 40444\n0L7QtNGL 40445\nIENpbm5hbW9u 40446\nIGJhaXg= 40447\n2K/ZhQ== 40448\nZnJhZ2U= 40449\nINC60L3QvtC/ 40450\nIGRlY2VwdGlvbg== 40451\nIHVuZXhwZWN0ZWRseQ== 40452\nIHNtZWxsZWQ= 40453\nIGxvb3M= 40454\nIGhpZ2hsaWdodGVy 40455\nIOq4sOuzuA== 40456\nIEdsYXNnb3c= 40457\nb3dhbmE= 40458\nbW4= 40459\nIEplcmVtaWFo 40460\nIERhdGFi 40461\naWV0ZQ== 40462\nIGJhdw== 40463\nIHByb3BpYQ== 40464\nIHByb3ByaQ== 40465\nT09PT09PT08= 40466\naW5rZXI= 40467\nIHBlcnR1cmI= 40468\nIEZha2U= 40469\n7J207JY= 40470\naW1taW5n 40471\nIHVuZG9jdW1lbnRlZA== 40472\nIHRyYWJhamFuZG8= 40473\nIHJvYW0= 40474\nINC00L7Qu9C20L3Qvg== 40475\nIGFyYmU= 40476\nIGFuaQ== 40477\nYXRhbA== 40478\nIGFyYWRh 40479\nIEFuZGE= 40480\nIOybgA== 40481\nIEJyYW5jaA== 40482\nb2lyZXM= 40483\nIG91dHNpZGVy 40484\nZG9sbGFy 40485\n5b2T54S2 40486\naXNzZXM= 40487\nYmVhbnM= 40488\nIEdpZw== 40489\n552h 40490\ncmFkb3M= 40491\nIFN1dA== 40492\nIExhbmNl 40493\nZWRzacSZYmlvcg== 40494\nIGNvbGE= 40495\nb25lbnRz 40496\nIHJlY29uc2lkZXI= 40497\n44K544OI 40498\nIG1vbmRv 40499\n44Oz44ON44Or 40500\nIHVuc3VjY2Vzcw== 40501\nIEvDpA== 40502\n6L65 40503\nIHJlZ2Vs 40504\nIGJpc29n 40505\nZXR1cw== 40506\nIHVucmF2ZWw= 40507\nIHN3ZWV0aWU= 40508\nIHJlcHLDqXNlbnQ= 40509\nb3VyaW5n 40510\nIGdyb3VuZHdhdGVy 40511\nIEJldw== 40512\nIHNjcmF0Y2hlZA== 40513\nIGNhc3NldHRl 40514\nIGNpZGVy 40515\ncGlz 40516\nINGB0LDQvNCw 40517\nIGdsb2JhbGl6YXRpb24= 40518\nIGRlZ3JhZGF0aW9u 40519\nIGRlZ2VuZXI= 40520\nIFJvc2ll 40521\naWNrdA== 40522\nIG92ZXJ3ZWlnaHQ= 40523\nIE1FTQ== 40524\nIGd1YXJkaWFucw== 40525\nIGNvbnNlYw== 40526\nSG1t 40527\n5oiR5Zyo 40528\nINC/0L7RgtGA0LXQsQ== 40529\nIG1ldmE= 40530\nIGdyYWZmaXRp 40531\nIGZsaXJ0 40532\nIEJQ 40533\nIGp1c3Rv 40534\nIFRob3VzYW5kcw== 40535\n55Sc 40536\nn6zsmrQ= 40537\nLio= 40538\nIFJBVw== 40539\nIGZsdW9y 40540\naXlp 40541\nYW50YWw= 40542\namVk 40543\nIFNoZW5n 40544\nIEVsaXNl 40545\nIENoYXJnZQ== 40546\n7J207Yq4 40547\nIGNvbmVz 40548\nbmllcw== 40549\nZ2lh 40550\nINC90LDRh9Cw0LvQsA== 40551\nIERoYXJtYQ== 40552\nIOuLpOyWkQ== 40553\nIGZhdm9ycw== 40554\nIFRydW5n 40555\naGV0dG8= 40556\nIHBvenc= 40557\nIGxvbmdv 40558\nIGtlbHU= 40559\nIGRpZ2VzdGlvbg== 40560\nIEVpZw== 40561\nIFRIRVJF 40562\nIHRpZXJz 40563\nIHN1bms= 40564\nIG15c3RpY2Fs 40565\nenVi 40566\nIMOJdA== 40567\nIGFudGljaXBhdGluZw== 40568\nIFZpbmU= 40569\nWVk= 40570\nIGNvbmNlbnRyYXRpbmc= 40571\nIEFncmVlbWVudA== 40572\nINC+0LrQvtC70L4= 40573\nIGxpZHQ= 40574\nIFlhbw== 40575\nINGB0LvQuNGI0LrQvtC8 40576\ncsOt 40577\nSVNUSU5DVA== 40578\nIE9GRklD 40579\nIHNvYWtpbmc= 40580\nIHNpaWhlbg== 40581\nIHJlZmVyZW5jaW5n 40582\nIFRhbXBh 40583\nYW5leQ== 40584\nIHJlc3B1ZXN0YQ== 40585\nIENvYWxpdGlvbg== 40586\nINGB0L7Qs9C70LDRgQ== 40587\nYW5raW5k 40588\nIOub 40589\nIFl1bW15 40590\n67Cw 40591\nIG9uYw== 40592\ndWnDp8Ojbw== 40593\nIHRoZW8= 40594\nIG11cmFs 40595\nIFRlYWNoZXJz 40596\nIHdhaXRz 40597\nIHJlbnRpbmc= 40598\nIEhhcm1vbg== 40599\nIGXFnw== 40600\nIE11bmljaA== 40601\n7Zmc 40602\n7Ja8 40603\nY2FyZHM= 40604\nIHJvdWdl 40605\nIG7Dqm4= 40606\nY2x1Yg== 40607\nIHVuc2Vlbg== 40608\nIGRlcHJlY2k= 40609\nIGNvbXB1dGVk 40610\nIHdpcGluZw== 40611\nIEVsbGk= 40612\naWRlbnRpZmllZA== 40613\nIGNsdXR0ZXI= 40614\ncm9sZXVt 40615\nIHRlbGVm 40616\nIGxldmVsaW5n 40617\nIFdvb2R5 40618\nIEd1cw== 40619\nIEJlbm5ldHQ= 40620\nIHNpdGlv 40621\nacWC 40622\nIHBvc3Nlc3Npb25z 40623\nIE5hdGFzaGE= 40624\nb2xkb3du 40625\nINGB0L7QvtCx0Yk= 40626\nIExpYw== 40627\nIOunjOuToA== 40628\nIGxvcnNxdWU= 40629\nd2Vo 40630\nINC80LDQvA== 40631\nbGl0ZXI= 40632\nYWRvbW8= 40633\nIGZpbmk= 40634\nz47Pgg== 40635\nINGD0LHQuNC5 40636\nIGluZGlzcA== 40637\nIHRlbGV2aXM= 40638\nIHDDoQ== 40639\nIENyZW8= 40640\nw61sbA== 40641\nIGd1cg== 40642\nIE1BTA== 40643\nINGA0LDQt9C90YvRhQ== 40644\nIHppZWhlbg== 40645\nIGZhc2hpb25lZA== 40646\nIGRlYmF0aW5n 40647\nIFNvdXA= 40648\nIFByb3ZpbmNl 40649\n6re466CH 40650\nIGltcHJvcGVy 40651\nIGltYWdlbg== 40652\nINGB0LTQtdC70LDQuw== 40653\nIGxvZ29z 40654\nIGV2ZW50bw== 40655\n6KeG 40656\n4bqjbw== 40657\nbGFyZGE= 40658\nINC90LDQt9GL0LLQsNC10YLRgdGP 40659\nIHZlcmY= 40660\nIHNjcmVlbnNob3Rz 40661\n15XXk9ei 40662\nIEF1cm9yYQ== 40663\nIEJhbGk= 40664\ndGVyZWQ= 40665\nIGNvbnRhZ2lvdXM= 40666\nIGNvbXBhcnRpcg== 40667\ndmVuaWRvcw== 40668\ncmlrZQ== 40669\nINCy0YvQs9C70Y/QtNC40YI= 40670\nIGZyZWVkb21z 40671\nbmljYXM= 40672\noKTshJw= 40673\nIHJlZHV6 40674\nIEVjdQ== 40675\nIGFib25u 40676\nIFNFw5E= 40677\nIEJpdGNo 40678\nIHByb2pldG8= 40679\n0LjRh9C90L4= 40680\nZXR0cmU= 40681\nQU5OQQ== 40682\ndGhhbms= 40683\nIEFP 40684\n5omA5Lul5ZGi 40685\nYXJuaXNo 40686\naWXDn2Vu 40687\nIHJpcHBsZQ== 40688\nIHBhbnRyeQ== 40689\nIEdI 40690\nzrPOsQ== 40691\nIOydtOuyiOyXkA== 40692\nIHZhbGlkYXRlZA== 40693\nIGJydXNoZWQ= 40694\nIEVtaW4= 40695\nIERhcnRo 40696\nZXNpbg== 40697\nLC4= 40698\nIHZhbGxl 40699\nIGplcnNleQ== 40700\ndWxhbg== 40701\nUmVhZA== 40702\nIFJhbmdlcnM= 40703\nIHNvb3RoaW5n 40704\nIGNvbXBsZW1lbnRhcnk= 40705\nIFZlcmtlaHI= 40706\nYWNha3Q= 40707\nIGJhdGh0 40708\nIE5E 40709\nU29u 40710\nIO2ZlOyepQ== 40711\nIEF2aQ== 40712\nIFNBTA== 40713\nYWlzc2U= 40714\nIHNlbWFpbmVz 40715\nIFN1cnY= 40716\nd2llcg== 40717\nINCy0LjQtNC10Ls= 40718\nIHNpZXRl 40719\nlOuPhA== 40720\nIFJhbXNheQ== 40721\nIFF1ZWVuc2Jvcm91Z2g= 40722\nIE1lbmdl 40723\nIEZvb2Rz 40724\nIHRoZW9sb2dpY2Fs 40725\nIFsj 40726\nINCy0L7QvdC4 40727\nIGltbWlu 40728\naW9zaXR5 40729\nIEFiZ2VvcmQ= 40730\nIEFjaG8= 40731\nIMOU 40732\nIHN0YWlucw== 40733\nIHJlYWxpc3RpY2FsbHk= 40734\nIGZhc2hpb25hYmxl 40735\nIENFT3M= 40736\nIFNraWxs 40737\nINCy0LbQtQ== 40738\nIGRldmVy 40739\nIFBsdWc= 40740\n5qo= 40741\nUG9k 40742\nIGxvYWY= 40743\nIGdlYnJhY2h0 40744\nIGFic29yYnM= 40745\nIEdyYW5ueQ== 40746\nIG1hbHdhcmU= 40747\nYWfEmQ== 40748\nIGNpdmlsaXphdGlvbnM= 40749\nIM+B 40750\nIGjDpGx0 40751\n0KHQog== 40752\nZ3JlYXQ= 40753\nIGxheWVyaW5n 40754\nc2luZ3M= 40755\nINCy0ZbQvQ== 40756\nIHJlY29nbml6YWJsZQ== 40757\nIHdvag== 40758\nIHdldGVu 40759\n56ys5LiA5YCL 40760\nzrPOvw== 40761\nU3R1ZGVudA== 40762\nIGTDqWZpbg== 40763\ncGxlYXNl 40764\nZW5jaA== 40765\nIGF0dGlj 40766\nIE90dGF3YQ== 40767\nIG9wdGVk 40768\nIGNhcHRpdg== 40769\nIG3Fgg== 40770\nIFlB 40771\nIFdhbmQ= 40772\nIGJvdW50eQ== 40773\nIDI3MA== 40774\nIHNwZWN1bGF0ZQ== 40775\nIGVuaGFuY2VtZW50 40776\nIGNvbW1vZGl0aWVz 40777\nIE1pbHRvbg== 40778\nZWo= 40779\nYWxvbQ== 40780\nRGFz 40781\nIGNvb2xkb3du 40782\n16jXkNec 40783\nINeQ16Q= 40784\nIHdjemXFm25pZWo= 40785\nIGVsb25n 40786\nIGRpb2Rl 40787\naW5hw6fDo28= 40788\nIElyaXM= 40789\nIEli 40790\nIHN1bW1vbmVk 40791\nIHJlc3Bl 40792\nIFJhY2g= 40793\n5rOo5oSP 40794\nIMK7Og== 40795\n6YaS 40796\nIHZ1cg== 40797\nIG1vdmltZW50bw== 40798\nIGZsdWVudA== 40799\nIEV2b2x1dGlvbg== 40800\nIEJ1dHQ= 40801\naWZpY2FjacOzbg== 40802\nlJTslrQ= 40803\nINGN0L3QtdGA0LM= 40804\nIG1hbmlwdWxhdGluZw== 40805\nIHBvc2l0aXY= 40806\n0LzQvtGB 40807\nIHdpeg== 40808\nIGludG94 40809\nzq3PgQ== 40810\n0LXQvNGB0Y8= 40811\naXZlc3Nl 40812\naW1pemk= 40813\nIOyauA== 40814\nIGtub2Nrcw== 40815\nIGNvbmdlc3Rpb24= 40816\nIElkZWFsbHk= 40817\nIEhvbGRpbmc= 40818\nIHBvYnJl 40819\nIEpVTA== 40820\nIOu2hOuTpOydgA== 40821\nIM6xzro= 40822\nIEZlcmd1c29u 40823\nIExhYm9yYXRvcnk= 40824\ncmljaHRlbg== 40825\ncm9waHk= 40826\ncHJvZHVjdGlvbg== 40827\nYXNzdW5n 40828\nSVRB 40829\nIHNpw6hjbGU= 40830\n16jXqg== 40831\nY2lzaW9u 40832\nINek15Q= 40833\nIElyZW5l 40834\nYW5jYQ== 40835\nIOyCrOqzoA== 40836\nIHBpbnBvaW50 40837\nIGRlc2lnbmF0aW9u 40838\nxZ9hbQ== 40839\nbMSxxZ8= 40840\nYWF0 40841\nIG7DpWdyYQ== 40842\nIG15dGhpY2Fs 40843\nIERlY2xhcmF0aW9u 40844\nIOyeoeyVhA== 40845\nIGJ5dGU= 40846\nLuKZqg== 40847\nRGVs 40848\nIO2NvA== 40849\nIG51dHJpdGlvdXM= 40850\nINGA0YPQsdC70LXQuQ== 40851\n5YKz 40852\nU0FZ 40853\nTWFzdGVy 40854\nINGE0L7RgtC+0LPRgNCw0YQ= 40855\nIOuSpOyXkA== 40856\nIG5laA== 40857\nIGRva3VtZW50 40858\n56qB 40859\nIGN6YXN1 40860\nIGNvbnRpbnVh 40861\nIFNpbGVudA== 40862\nIHRlbnNvcg== 40863\nIHRhbnRh 40864\nIGlyZ2VuZHdv 40865\nIExFVA== 40866\nIFNoYWt0 40867\nbGFtYQ== 40868\nY2hsYWc= 40869\nIGRpbmdlbg== 40870\n0YHRgtGA0LA= 40871\nIGVocmxpY2g= 40872\nIE1hY2h0 40873\ncmVscw== 40874\nw6BjaWVz 40875\ndmlkZW8= 40876\nIG5hdHVyYWxl 40877\nIFNURVZF 40878\ndW1t 40879\nQkFDSw== 40880\nIDcyMA== 40881\n44Gn44GX44Gf 40882\nIG1vbWVuY2ll 40883\nIFN3YW4= 40884\nIHRlY2huaWNpYW5z 40885\nIGdlZWhy 40886\nIE1lbmQ= 40887\nUmVn 40888\nIHNjYWZm 40889\nIGFpZGU= 40890\nIOuztOuKlA== 40891\nIHByZXNzZXM= 40892\nbGVyZGU= 40893\nXCc= 40894\nIHVsdHJhc291bmQ= 40895\nIGRpc2NsYWltZXI= 40896\nIE1pdHM= 40897\nIEhvbGlkYXk= 40898\nIGV4dGVybmFsbHk= 40899\nIEZhdGU= 40900\nSU5P 40901\nIENhdHM= 40902\n67CV 40903\ndW1v 40904\nY29udHJvbA== 40905\nIHRoZUNVQkU= 40906\ndGlj 40907\naWVydW5ncw== 40908\nINC30L3QsNC60L7QvA== 40909\nIGZyZWVzdHlsZQ== 40910\nTUFOREFSSU4= 40911\nIGlzZQ== 40912\nYXVydXM= 40913\n6Kix 40914\nIFN0cmF0ZWd5 40915\nIEJlYW0= 40916\ncsOkZ2U= 40917\nIGV4cGxvaXRlZA== 40918\n44GI44Gj 40919\naWRpcw== 40920\nIGNoaW1l 40921\nIFBlbmluc3VsYQ== 40922\nIG1lcml0cw== 40923\nIGFsdHJv 40924\nIFRPUA== 40925\nIFNlbnM= 40926\nIEthbnQ= 40927\nb3Jhcw== 40928\nIHJveWFsdHk= 40929\nIElERQ== 40930\n5aSJ 40931\ncmFjeQ== 40932\nIFRIT00= 40933\nb21vcw== 40934\nIGzDpG5nZXI= 40935\nIG51bWJlcmVk 40936\nVW0= 40937\nIE5peWU= 40938\nzrjOtw== 40939\nenlrYQ== 40940\nbGltZQ== 40941\nIFBlcnNvbmVu 40942\nIHZhbGlkaXR5 40943\nIGNvbnRyYXQ= 40944\nIENvbWlj 40945\nw6dvbnM= 40946\nIEhlaWRp 40947\nIHpn 40948\nIHJlbmFtZWQ= 40949\nIGN1bWlu 40950\nIEpG 40951\naW5lbA== 40952\nIGVuZm9yY2Vk 40953\nIGNoYW1h 40954\n0LvQuNGH0L3Qvg== 40955\n4bq7 40956\nINC00LXQvdC10LM= 40957\nIHByb2Z1bmQ= 40958\nIHBlbHZpYw== 40959\nIHBhbGF2cmE= 40960\nIGV4dHJhcw== 40961\nIGFua2xlcw== 40962\n7JeQ7ISc64+E 40963\nIFRG 40964\nIGluc2FuZWx5 40965\nINC80Y/RgQ== 40966\nIHLDqXBvbnNl 40967\nIGfDtnN0ZXI= 40968\nIEJCUQ== 40969\nINGD0YfQsNGB0YI= 40970\nIHNoYWtlbg== 40971\n44Kr44Oz44K/ 40972\nIGFsbW9uZHM= 40973\nZGlzaA== 40974\nIFBH 40975\nIEJsaXp6YXJk 40976\n0YzQvtCz0L4= 40977\nIOOF 40978\nIGtuYXBw 40979\nVG9v 40980\nIHVuZGU= 40981\nIG1vdW50cw== 40982\n0L7QvNC40L3QsA== 40983\nIG5vcnRoZWFzdA== 40984\nIGNlbnNvcnNoaXA= 40985\n0Y/RgtGM0YHRjw== 40986\nbHI= 40987\nIGxhd21ha2Vycw== 40988\nIHPDpWRhbg== 40989\nIGluc2lkZXI= 40990\nIGNsZWFudXA= 40991\nIE5hZGE= 40992\nw7Nj 40993\nIGhhcnZlc3RlZA== 40994\nIERlc3B1w6lz 40995\n7ZqN 40996\nIHJlZHVuZGFudA== 40997\nRU5B 40998\nIGRlbGVnYXRl 40999\nIGJ1cmc= 41000\nIEFsaXNvbg== 41001\n5paw6IGe 41002\nIGNlbGVzdGlhbA== 41003\nIHNpbm5lcnM= 41004\nIG1hcnR5cg== 41005\nIFBlcm0= 41006\nIHNwZWNpbWVucw== 41007\nIG1pdG9jaG9uZA== 41008\nIG1hcmF2aWw= 41009\nIGNhdmFscnk= 41010\nIGFycmF5cw== 41011\nIGFubmV4 41012\nIGxhYm9yYXRvcmllcw== 41013\nIEJ5eg== 41014\nIGF0YWM= 41015\nINGB0LvQvtC20L3Qvg== 41016\nIHRvcGw= 41017\nIGdlcmk= 41018\nIENvbWJhdA== 41019\n0YHRj9GC 41020\nZWtlbg== 41021\nINCS0LvQsNC0 41022\nIGFqdXN0 41023\nIG1hcnF1ZQ== 41024\nIGxvb2tvdXQ= 41025\nIExvbA== 41026\nIHJvb2Z0b3A= 41027\nIE9yaW9u 41028\nINCx0L7QuQ== 41029\nIGhlYXJ0YnJlYWtpbmc= 41030\nIGRldHRv 41031\nemg= 41032\nw6R0dGVy 41033\nY2VyYQ== 41034\nIGhlYXRz 41035\nIGFudGlxdQ== 41036\nIHVuZmluaXNoZWQ= 41037\nIEthenU= 41038\nxLFsxLE= 41039\nIHNsaWdodGVzdA== 41040\nbGVv 41041\nIHbDpXJh 41042\nIHZlcnNjaGllZGVuZW4= 41043\nIGxvdGlvbg== 41044\n5L2g5bCx 41045\n5oy6 41046\n0YjQtdCz0L4= 41047\nY3Rpb25hbA== 41048\nIOydtOyg 41049\nZHJhZ29u 41050\nIHJlc29uYXRlcw== 41051\nIGlubQ== 41052\nYXZpYw== 41053\nIGZ1bGZpbA== 41054\nIOq4sOuMgA== 41055\nIGp1c3RhbWVudGU= 41056\nINC00L7RgdGC0YPQvw== 41057\nIOq3uOqxtA== 41058\nIHJlY29uY2lsZQ== 41059\nIFNjaMO2bg== 41060\nIEF2b2lk 41061\n6rmA 41062\nJ0Q= 41063\nIGNvbmZpbmVtZW50 41064\nIO2R 41065\nIG1vdGl2YXRpbmc= 41066\nIEJyaXR0YW55 41067\nIOOBmQ== 41068\nIHNjcmVhbWVk 41069\nb2JqZWN0 41070\nIGRlY3JlZQ== 41071\nIHRyYXZhaWxsZQ== 41072\naXNzaWJsZQ== 41073\nIGJ1c3RlZA== 41074\ncHJvY2Vzcw== 41075\nIG1hc3NhY3Jl 41076\nIG5naMSp 41077\naWx5bg== 41078\nINCy0YDQvtC00LU= 41079\nIHBvZXRpYw== 41080\nIG5o4bqldA== 41081\nIGlyb25pY2FsbHk= 41082\ndXN1 41083\nbmlv 41084\nIHN0YWdpbmc= 41085\nb21lZGljYWw= 41086\nbGVhc2Vk 41087\nIOyDiOuhnOyatA== 41088\nIE5a 41089\nYWN0aW5n 41090\nIEJhdHRsZWZpZWxk 41091\ncGxheWZ1bA== 41092\nVmk= 41093\nIHNlw7FvcmE= 41094\nIHByb21wdHM= 41095\nbGljaGtlaXQ= 41096\nIMOnxLFrYXI= 41097\namlhbmc= 41098\nIHBpY2t5 41099\nIENhdmU= 41100\nIG1pcmFjdWxvdXM= 41101\nIEh1Z2hlcw== 41102\nMjAxNg== 41103\nIHh1 41104\nIERvcm90aHk= 41105\nIHZpcnR1ZXM= 41106\nIHJldHJhY3Q= 41107\nIHR5cg== 41108\nIGNoYXJpc21hdGlj 41109\nIGJvbGE= 41110\n6bw= 41111\nIOunkOyUgOs= 41112\nIHBhcmVudGFs 41113\nIG1pbGxpb25haXJl 41114\nYXJpYXQ= 41115\n5pS/5bqc 41116\nIGludm9rZQ== 41117\nxbxlbmll 41118\nIGV4dHJlbWVz 41119\nIEFrdQ== 41120\naXZpZGFkZQ== 41121\nIO+3ug== 41122\nIOyLnOyyrQ== 41123\nIEdhcmxpYw== 41124\nUklB 41125\nINC00L7RgQ== 41126\nIFBvbnQ= 41127\nIG1pbGo= 41128\nZWxsaQ== 41129\nIHJhY2tldA== 41130\nIGNvbXBldGl0 41131\nIFdoaXM= 41132\nIHJlYWx0 41133\naWdubWVudA== 41134\nZXN0cmU= 41135\nIHBlcm5haA== 41136\nIE9wZW5pbmc= 41137\nIEZT 41138\nIERlbW9rcmF0ZW4= 41139\nYWNlbWVudHM= 41140\nIHdvcmxkdmlldw== 41141\nIHBsYXlvZmZz 41142\nIENBRA== 41143\nIMOpdGFudA== 41144\nIHllbWVr 41145\nIHNlbnRpbWVudHM= 41146\nb2RlbA== 41147\nYnVzdGVy 41148\nYcWf 41149\nIEtZ 41150\nY3rEmQ== 41151\nIHNjaMO2bmU= 41152\nYXBl 41153\nIFJhc3BiZXJyeQ== 41154\nIGNyZWRpdGVk 41155\nIEhpZGRlbg== 41156\nIHNhdXNhZ2Vz 41157\ncnVjZQ== 41158\nIEJldg== 41159\naWxhbnRybw== 41160\nIHBva2Vtb24= 41161\nIOqwgOqyqQ== 41162\nIHByb2NlZWRpbmc= 41163\nIHZlaW8= 41164\nIDE3NQ== 41165\n6Lg= 41166\nbWF4 41167\nIGZyYXRlcg== 41168\n7KCE7JeQ 41169\nIGVnZW50 41170\nIDI1MDA= 41171\ndXNjaA== 41172\nVHViZQ== 41173\nIGFtcGxpZnk= 41174\nIHByYXdk 41175\nIG9kb3I= 41176\nIFNjYW4= 41177\nIHBsb3R0aW5n 41178\naXRobWV0aWM= 41179\nIHJlc2lnbmVk 41180\nIFNDT1RU 41181\nIHN0ZXJlb3R5 41182\nIGRvYWJsZQ== 41183\nIENvbXBsZXg= 41184\n2YHZig== 41185\ndMSxbQ== 41186\n0YDQuNCz 41187\nbGFyZGFu 41188\nZXNv 41189\nREVO 41190\nIGhvb2RpZQ== 41191\nIENBVA== 41192\n2KfYtw== 41193\nIGJvbmRlZA== 41194\nIEJ1cm5z 41195\n0L7Qv9Cw0YE= 41196\nIHLEmQ== 41197\nzrXOuc6x 41198\nINC+0YLQtNC10LvRjA== 41199\nIHRpbWVsZXNz 41200\nIFZpag== 41201\nIFBhbmFtYQ== 41202\nIHJlb3JnYW4= 41203\nIFTDpA== 41204\nIFBsdXRv 41205\nT3Jhbmdl 41206\nINC/0L7QudC0 41207\nIEJyaXN0b2w= 41208\ndWNlZA== 41209\nIOuQmOyWtA== 41210\nIHVuYmVkaW5ndA== 41211\nYWRsZQ== 41212\nIHZvbHVudGVlcmVk 41213\nIG1pZWxp 41214\nIEVkaW5idXJnaA== 41215\naWthbA== 41216\nIGFsdGVu 41217\nIEFyc2Vu 41218\nIG1vdXZlbWVudA== 41219\nIGFudGlxdWU= 41220\nIGJo 41221\nIEhlcnM= 41222\nIHNhdXRl 41223\nIGFzcGlyZQ== 41224\nIHNwaGVyZXM= 41225\nIFdhbQ== 41226\n4bqvbQ== 41227\nIHdpcGVz 41228\nIDI4MA== 41229\nIFZlaA== 41230\nIGNvbG9jYQ== 41231\n0LDRhA== 41232\nINCy0L7Qt9C80L7QttC90L7RgdGC0Yw= 41233\nIHBoeXNpb2xvZ2ljYWw= 41234\naHdh 41235\nZXR1 41236\nIHByb2xvbmdlZA== 41237\nIGV4cGVyacOqbmNpYQ== 41238\nINCy0LjQtNC90L4= 41239\nIHF1YXJhbnQ= 41240\nIHB1ZWRhbg== 41241\n6JQ= 41242\ndmluZQ== 41243\nIFVTREE= 41244\ncGhlbQ== 41245\nIGZvcm1pZGFibGU= 41246\nIGZsYXR0ZXI= 41247\n7Ja07KeA 41248\nIGLDqW4= 41249\n4LmB4LiV 41250\nIOusvOuhoA== 41251\nIGZhY3Rpb25z 41252\nIExlYXZpbmc= 41253\nINeQ16rXlA== 41254\nIEV4cGVydA== 41255\nZGlv 41256\nIFZlcmQ= 41257\n44G/44Gf44GE 41258\nIHNpbnQ= 41259\n2YbYrw== 41260\nbnVtYmVy 41261\nIG93ZWQ= 41262\nIGluZHVjZQ== 41263\nIEZyZWRkaWU= 41264\nYWJv 41265\nIEZpbGlwaW5v 41266\nr7zr 41267\nYmVsaWV2YWJseQ== 41268\nYXRobG9u 41269\nYW1hYW4= 41270\nIGRldmVuaXI= 41271\nIEdvcw== 41272\nIEplbmtpbnM= 41273\nYmFpdA== 41274\nIGJpbnM= 41275\nIE1JQ0g= 41276\ndXlvcnVt 41277\naWdyYWRl 41278\naXNzbw== 41279\nIOyXtA== 41280\nIOyVhOu5oA== 41281\nIGRpYXJyaGVh 41282\nIHRvcm5hcg== 41283\nYWRkaW4= 41284\nIHVuZ2Vmw6Rocg== 41285\nIHJlc3Ryb29t 41286\nIHBzeWNoaWF0cmlzdA== 41287\nIEtpY2tzdGFydGVy 41288\nIGdlcmE= 41289\nIGFscmVk 41290\nIFdyYXA= 41291\nz4zPgw== 41292\nIHNpbm5lcg== 41293\nQ0hFRVJJTkc= 41294\nIGtpbG93 41295\nIGRldGVybWluYW50 41296\nIGRlbW9uaWM= 41297\naWRlbmNlcw== 41298\nY2hhcw== 41299\nIERlZA== 41300\n5byV 41301\nIHN0dW1ibGU= 41302\nIFVycw== 41303\nIGRlY2VpdmVk 41304\nIFRFUg== 41305\nIEPDsw== 41306\nZWxsZWQ= 41307\nIG5vdHdlbmQ= 41308\nIOyngOq4iOq5jOyngA== 41309\nIHBhcnRpZG8= 41310\nIGRlc2NlbmRlZA== 41311\nIHZhcmTEsXI= 41312\nIGVuYWN0ZWQ= 41313\nIGN6xJnFm2Np 41314\n5bel5L2c 41315\nIHRyYWluZWVz 41316\nIGF1ZGlibGU= 41317\nIG1hbGY= 41318\nIHZlbw== 41319\nw6xu 41320\nIEdQQQ== 41321\nIEFwcGU= 41322\n5YK3 41323\nIHJ1dA== 41324\nIENhcmxh 41325\na2FjaA== 41326\nIHNhdmlvcg== 41327\naXRjaGVk 41328\nIGNsaW1heA== 41329\n0LDRgtC10LvRjw== 41330\nIE1jQ29ubmVsbA== 41331\n0L7Qu9GP 41332\nZXJleWU= 41333\nINGB0L7Qt9C9 41334\nIGNhYm8= 41335\nIFNuZQ== 41336\nIEFmZm9yZGFibGU= 41337\nIHNhcsOg 41338\nIGxlZ2l0aW1hY3k= 41339\nIHNjYXJjZQ== 41340\nLi4uPC8= 41341\nIDEwOA== 41342\nIGFjdW0= 41343\nIEZyYW5rbHk= 41344\nIHJhZGlhdG9y 41345\nIGdlbmVyYWxz 41346\nIGRpdmlkZXM= 41347\nIGNoZWVzZWNha2U= 41348\nIHNvcmNlcg== 41349\nIG1pc2NvbmNlcHRpb24= 41350\nIGhhcmRzaGlwcw== 41351\nIE9uZVBsdXM= 41352\nw7x5b3JzdW4= 41353\nIFNvdmlldHM= 41354\nIEl0YWxpYQ== 41355\naWNraQ== 41356\nIEFmdGVyd2FyZHM= 41357\nIHJpZGljdWxvdXNseQ== 41358\nIGdkemllxZs= 41359\nIE5vdGVz 41360\n2YPYp9mG 41361\nIHJvbWFu 41362\nIG9yZ2FuaXplcg== 41363\nIGNvdXJ0eWFyZA== 41364\nINGH0LXQu9C+0LLQtdGH 41365\nIFdpdG5lc3M= 41366\nINC/0Y/Rgg== 41367\nIENoaWxs 41368\nIFZhbHZl 41369\nIM6szrvOuw== 41370\nIEtQ 41371\nY2hsdXNz 41372\nIGRlZmxlY3Q= 41373\nIFRvbmk= 41374\nIGNsYWly 41375\nIHN0YWNraW5n 41376\n5L2O 41377\ncmFzemFt 41378\nIFNvbnJh 41379\n44Gj44Gh44KD 41380\nIEF0YXJp 41381\nIHBhc8Oz 41382\nIGNoYXJtcw== 41383\nYW5zdA== 41384\nIHRlcmNl 41385\nIExpbGx5 41386\nIHBzeWNob2xvZ2ljYWxseQ== 41387\nIGPFkw== 41388\ndXN0ZQ== 41389\npbTs 41390\nQ1RW 41391\nIG1pZWw= 41392\n55qH 41393\nQ2FyZQ== 41394\nIOKAkQ== 41395\nIHNuYXBwZWQ= 41396\n44Gp44KC 41397\nIOqwkOs= 41398\n0L7RgtGL 41399\nIG3DqnM= 41400\nLj8= 41401\nIHRvbm5lcw== 41402\n15XXk9eU 41403\n4LiE4LiZ 41404\nVHU= 41405\nIGRpc3RyaWJ1dGluZw== 41406\nIGNyYWNrZXJz 41407\nIGNvcmHDp8Ojbw== 41408\nw6Rtw6Ru 41409\n5L2g5Zyo 41410\nY2xhbWF0aW9u 41411\n0L7RgNC0 41412\nk5zrprTqsozsmpQ= 41413\nIFVudGVyc2NoaWVk 41414\nRmluZQ== 41415\nY2tv 41416\nINGA0LXQsdC10L0= 41417\nIHNwaWM= 41418\nIGRvY3RvcmFs 41419\nINGB0LrQvtGA0LXQtQ== 41420\ndW5pdmVycw== 41421\nYWN1bGE= 41422\nIMOWc3RlcnJlaWNo 41423\nIGdyaW5kZXI= 41424\nIGFtYm9z 41425\nIHZhc3RseQ== 41426\n6YCZ5YCL5piv 41427\nIGNvbmZlc3NlZA== 41428\nIFNoaA== 41429\nYW5kZXJz 41430\nIEd1YW4= 41431\nINC90LXQvtCx0YXQvtC00LjQvNC+ 41432\nIGNoYW1waW9uc2hpcHM= 41433\nIFZ1bA== 41434\nIFBoaQ== 41435\nIE1lYXN1cmU= 41436\n5pyo 41437\nIGluc2dlc2FtdA== 41438\n5oWi5oWi 41439\ndmV0dGU= 41440\nIGdlbm9t 41441\naW5kdW5n 41442\nZ2xp 41443\nRGV0 41444\nIHVubXV0ZQ== 41445\n44G+44KK 41446\nIHNhdWNlcw== 41447\nIER3 41448\n15HXqg== 41449\nIEJSRQ== 41450\nIG51cnR1cmU= 41451\nIGRldGFpbmVk 41452\nIEJlZXI= 41453\nINC80LjRgNCw 41454\n0LLQtQ== 41455\nIEJpcmRz 41456\nIG1laWxsZXVy 41457\nIHJld2luZA== 41458\nIHBvcmU= 41459\n15nXlg== 41460\nw6lnZXI= 41461\ncXVlbGE= 41462\nIHRyb3VzZXJz 41463\nIHNpaW7DpA== 41464\nIEdhZ2E= 41465\nIEJSQU5E 41466\nbGViZW4= 41467\nIHJhc3BiZXJyeQ== 41468\n5LuY 41469\naWxpaw== 41470\nIHZlcnPDo28= 41471\nbGFr 41472\nIGxvZ2Fy 41473\nIE1JREk= 41474\nIOychO2VnA== 41475\nINC/0YDQvtC40LfQvtGI 41476\nIHN0ZXJpbA== 41477\nIGhhcm1lZA== 41478\n0LDQstC70LjQsg== 41479\nINGB0YHRi9C7 41480\nIGxhY2tlZA== 41481\nIGNvbnRhY3Rpbmc= 41482\nIOq4sOyekA== 41483\nIGdlZsOkaHI= 41484\nIGNveQ== 41485\naWtlbA== 41486\nIGJpbmdl 41487\nIG9ydGhvZ29uYWw= 41488\nIGVudGVuZHU= 41489\nIFRoaXJ0eQ== 41490\nIHNtYXJ0ZXN0 41491\n5aSa5bCR 41492\nIHJhc2E= 41493\nIFF14buRYw== 41494\n0YvQstCw0Y7Rgg== 41495\nIHNsdXQ= 41496\n0LvRg9GH 41497\naWd0ZW4= 41498\nINGA0LDQsQ== 41499\nIHRhbWFu 41500\nIHF1YWxpZGFkZQ== 41501\nIGRvbWluYXRpb24= 41502\nIHNpbnVz 41503\nIHByb2dyYW1tZXJz 41504\nIGFsbGVyZ3k= 41505\nIFRvcnJlcw== 41506\nIEF1c3RyaWFu 41507\nbmFudHM= 41508\n5a6M5oiQ 41509\nTWVs 41510\nINGD0LLQtdC70LjRhw== 41511\nIEFnZw== 41512\nIHNvaw== 41513\nIHBsdWNr 41514\nIGJpbmRz 41515\nIHByb3Bvcg== 41516\nIE1hZg== 41517\nIG9zb2I= 41518\nIFZJQw== 41519\n6aU= 41520\nINC30LDRh9C10Lw= 41521\nIGV4aGliaXRpb25z 41522\nIGV0dGk= 41523\nY3ph 41524\nINC90LDRiNC40YU= 41525\nIE1pdHRl 41526\n0L7QsdGL0YLQuA== 41527\nIGNsb2Nrcw== 41528\nIHJpY28= 41529\n5pS7 41530\nINC40YHRgtC+0YDQuNGP 41531\nIHNjaGl6b3BocmVu 41532\nIGZsdWZm 41533\nINGB0L7QsdC40YA= 41534\nIGFwb3k= 41535\nIHByaW5jZXM= 41536\nIGJyYWNlcw== 41537\nIEZJUg== 41538\nIFNuYQ== 41539\nIDsp 41540\ndmVuZXM= 41541\nIHZ1ZWx0YQ== 41542\nIG1pZXM= 41543\nIGJyb29t 41544\nIG1lcnJ5 41545\nIGVzcGVjaWFsbWVudGU= 41546\nIEFsYmFu 41547\nINC/0L7RgdGC0L7Rj9C90L3Qvg== 41548\nIExlbmE= 41549\nIEN1bHQ= 41550\nYWxzbw== 41551\nIHF1b3Rpbmc= 41552\nIGdlbmVyZQ== 41553\nIFlhcg== 41554\nIExhZ2U= 41555\nIGRlbW9zdA== 41556\nIGRhZ2U= 41557\nIEVjdWFkb3I= 41558\nIGFudsOkbmQ= 41559\ndcOfZW4= 41560\nIOuwm+yVhA== 41561\nIHBzeWNob2xvZ2lzdHM= 41562\nIExhcnM= 41563\nIHBvc3Nh 41564\nIG91dGdvaW5n 41565\nIG1ldGlj 41566\nIGJhZ2dhZ2U= 41567\nZXJpYQ== 41568\nIHJpY2h0aWdl 41569\n7Iuc7JeQ 41570\nINGB0L7RhdGA0LDQvQ== 41571\nIHJvb3Rpbmc= 41572\nIGRyb3BsZXRz 41573\n55qG44GV44KT 41574\nIG5hc2Fs 41575\nIENveA== 41576\nWGk= 41577\nIGRpc3Bvc2FibGU= 41578\nIGJ1dGNoZXI= 41579\nIFphcg== 41580\nIEFybWVuaWFu 41581\nIOu/jOs= 41582\nIEZvb2w= 41583\nIENCRA== 41584\nIHNvc3Q= 41585\nIHBlcmlzaA== 41586\nIFLDqXA= 41587\n57Sw 41588\n44Gd44KM44Gn44Gv 41589\nIEZyZXVk 41590\nIGZhbmRvbQ== 41591\nIGJsb3F1ZQ== 41592\nIGludmVudG9y 41593\nIGFicmU= 41594\nIMOpbm9ybcOpbWVudA== 41595\nIGltcG9ydHM= 41596\n6Yg= 41597\nIG90dXI= 41598\nIFJ5dQ== 41599\nIOKGkg== 41600\nIHNlY29uZG8= 41601\nIGluY29tcGV0 41602\nIGluY2FyY2VyYXRpb24= 41603\nIGFzY2VuZA== 41604\nYmVuZQ== 41605\n5Zac5qyi 41606\nIG9sdXJz 41607\nbm9jaA== 41608\nIGJyZWVkcw== 41609\n0LvQuNC3 41610\nIFZlcmbDvGc= 41611\nIG1haWxpbmc= 41612\ncmVhbGx5 41613\nIGVzZg== 41614\nIHBlbGU= 41615\nIGxlYXNo 41616\nIGRpc2tz 41617\nINC30LDQvNC10Yc= 41618\n7JWE7JWE 41619\nYWJvdXRz 41620\nIE11bGw= 41621\nIERlbnQ= 41622\nZWRlcmVlbg== 41623\nRHJpdmU= 41624\nIHRpcHBpbmc= 41625\nIG5pZ2dh 41626\nb3JkdW0= 41627\nIHBvcnRlcg== 41628\nIGthcmFva2U= 41629\nIGRvY3VtZW50YXJpZXM= 41630\nIFJJR0hU 41631\nIFB1cmQ= 41632\nINC+0YHRgtCw0L0= 41633\n0LrQu9Cw0LQ= 41634\nw6lyZW5jZQ== 41635\nIOqxuOuhnA== 41636\nINGC0L7Qvw== 41637\nIFdvbmc= 41638\n5LiN5a+5 41639\nINC/0YDQuNGA 41640\nIG5vbWluYWw= 41641\nIGF1bGE= 41642\nINGN0LrRgNCw0L0= 41643\nIGNoZXJjaGU= 41644\nIFRocg== 41645\n5YW25a6e 41646\nIGxhdWZlbg== 41647\nIEthdGhsZWVu 41648\nIHJlYWN0b3Jz 41649\naWhhdA== 41650\nIHNpZGVk 41651\nIFNpbW9uZQ== 41652\nIGd1aWRlbGluZQ== 41653\naW1wb3J0YW50 41654\nYnVtcHM= 41655\ndG9uZQ== 41656\nIGVudHJlcHJpc2Vz 41657\nIGNvbnN0aXR1dGU= 41658\nb3Njb3Bl 41659\nIE15c3Rlcnk= 41660\nY3ljbGVz 41661\nIFdhcnNhdw== 41662\nIGJ1cnN0cw== 41663\nIFpob25n 41664\n5a6M5LqG 41665\nIFNBUkFI 41666\nIOuKkOq7 41667\n6Y0= 41668\nIGJlYWNvbg== 41669\n5Y2H 41670\nQURF 41671\nIOyngOuCmA== 41672\nIGVyc2No 41673\nIGludGVnZXJz 41674\nIENyb3NzaW5n 41675\nc291cmNl 41676\nIHNjaG9vbGluZw== 41677\nIFJPTQ== 41678\nYXRvcml1bQ== 41679\nIOyeiOqyjA== 41680\nIHLDtGxl 41681\n0JXQnQ== 41682\nQ2hhdA== 41683\nIHNocmlua2luZw== 41684\nIHJlaW1idXJzZQ== 41685\nIGx1bWJlcg== 41686\nw7xja3M= 41687\nIHNhbGFo 41688\nTW90aGVy 41689\nIGthbGk= 41690\nIFFhdGFy 41691\nb3Rpb25hbA== 41692\nIG9wYWNpdHk= 41693\nIG5lZQ== 41694\nIENvcnk= 41695\nIOy4oQ== 41696\nIHR1cmJ1bGVudA== 41697\nemVycw== 41698\nINGC0LXRgdGC 41699\nIMOpY3JpdA== 41700\nIOuztO2GtQ== 41701\nIGRpc2dyYWNl 41702\nIOy5tA== 41703\nIGNvdXJ0ZXN5 41704\naW5nYQ== 41705\nIGh1Z2dpbmc= 41706\nIEFCUw== 41707\nbWl0aA== 41708\nIGluc3VmZmljaWVudA== 41709\nIGNyb29rZWQ= 41710\nIOq3uOuMgOuhnA== 41711\n7Iuk7Q== 41712\nIHNpbXVsYXRlZA== 41713\nIOuEpOqwgA== 41714\nIGLDtg== 41715\nIE90dG8= 41716\nTElORw== 41717\nIGlsbHVzdHJhdGVz 41718\nIERlc3Ryb3k= 41719\nIDE5NjE= 41720\nIFRhZ2Vu 41721\nIG1lbG9u 41722\nIFBhc2NhbA== 41723\nUVVF 41724\nINC/0L7Qu9GD0YfQuNGC0Yw= 41725\nIGluY2lkZW5jZQ== 41726\nIFN0ZXZlbnM= 41727\nIEdpbnM= 41728\ncnVl 41729\nIHVucmVhc29uYWJsZQ== 41730\nIEppZQ== 41731\neXNpY3M= 41732\nIOuqsOudvA== 41733\nIGZpc2hlcw== 41734\nqbTs 41735\nIHByZWN1cnM= 41736\nIG1vZ8SZ 41737\ndGlnaHQ= 41738\nZXTDqQ== 41739\nIG11bmRpYWw= 41740\n7JeI64uk 41741\n4oCmIQ== 41742\nQlU= 41743\nIHNvY2lvbG9neQ== 41744\nIGJydXRhbGl0eQ== 41745\nIHBlcnNvbmFqZQ== 41746\nIG7DrXZlbA== 41747\nIGZhemVt 41748\nIGVzc2Vu 41749\nIGR3ZWxsaW5n 41750\nIGNvbW1lcmNpYWxseQ== 41751\nIGVkaXRz 41752\nIGR1ZXM= 41753\nIEdTQQ== 41754\n7J246rCA 41755\nIO2XiO2MnQ== 41756\nIFlhaG9v 41757\n0LXQvdC10YA= 41758\n7Jyo 41759\n0YPRiNC60Lg= 41760\nbGVmdA== 41761\nIGNhcHRpdmU= 41762\nY2lwaGVy 41763\nINee157X 41764\nINCz0YDQvtC8 41765\nIGlubmF0ZQ== 41766\nIGltcHVs 41767\nIOyXrOyekA== 41768\nIHN3YWxsb3dlZA== 41769\nIFRhYmlp 41770\n7J207Is= 41771\nINGB0L7RgdGC0LDQsg== 41772\nIG95dW4= 41773\nIG9icmlnYWRv 41774\nIEFwaA== 41775\nS2F0aWU= 41776\nIGNlbmE= 41777\nIEFsbMSBaA== 41778\n2YjYsw== 41779\nIHByenlw 41780\nIHBlcHQ= 41781\nIHZvbHVudGFyaWx5 41782\nIE/En2x1bQ== 41783\nIEVsbw== 41784\nb3Vl 41785\nQmly 41786\nYnVyZ2Vy 41787\nIFNCUw== 41788\nIDYwMDA= 41789\nIHByb21vdGlvbmFs 41790\nIEhlcnJu 41791\nIHN0YW1waW5n 41792\nIHF1YWxpZnlpbmc= 41793\nIGNvc21vcw== 41794\nIGFmYXI= 41795\n5rGf 41796\nYWJ1cw== 41797\nIGRhZHM= 41798\n44Gt44GH 41799\nINGN0LrQvtC90L7QvA== 41800\naW5jYXJu 41801\nIOyWtOuU 41802\nINC70LXQtg== 41803\nIEJFVA== 41804\nINC90LDQudC0 41805\nb250ZXI= 41806\nIHJldXNhYmxl 41807\nIGtvbW1h 41808\nIEJpag== 41809\nIFRlcmF6 41810\nIE9sw6E= 41811\nIOyVhOy5qA== 41812\nINGA0LDQt9C80LXRgA== 41813\nYXdhbg== 41814\nIGNhcnRh 41815\n5pCe 41816\naWNlbGVzcw== 41817\nIHNtZQ== 41818\nIFR1dGFq 41819\nIMiYaQ== 41820\nIHByb2JhdGlvbg== 41821\nIGFkZXF1YXRlbHk= 41822\nIFByZXNpZGVudGlhbA== 41823\naW5kcnVjaw== 41824\nYmxhZGU= 41825\nIHZldWxlbnQ= 41826\nIGNpb8Oo 41827\n5YyF5ous 41828\nIHJldmVyYg== 41829\nIGdlZ2Vuw7xiZXI= 41830\nIEVzcGVybw== 41831\nIGJlZ2U= 41832\nIFNUVURFTlQ= 41833\nc291bmQ= 41834\nIETDvA== 41835\nIG9mZmVuZA== 41836\nICIuLg== 41837\na2VubnQ= 41838\nINGB0LvRg9GI 41839\nIHB1cnBvc2VseQ== 41840\nIExpdA== 41841\nIO2bqA== 41842\ndWNoZXI= 41843\nIGhpbmE= 41844\nw71jaA== 41845\naWdub24= 41846\nVEhF 41847\nIGdsaWRl 41848\nb3VyY2luZw== 41849\nINij2YbYpw== 41850\nIG9sbHV0 41851\nIGFyY2hldHk= 41852\nIHNoYWR5 41853\nIHNvbW0= 41854\nIGVwaWxl 41855\nS2VlcA== 41856\nIG5hamJhcmR6aWVq 41857\n4KSV 41858\naXR1dGlvbmFs 41859\nINC80LDQuQ== 41860\nIHNpbmZ1bA== 41861\nIEJyb254 41862\nINCz0LvRg9Cx 41863\nIHZhbQ== 41864\nIHByZXNldHM= 41865\nIERhZw== 41866\nIOyZhOyEsQ== 41867\nIGNyZWVr 41868\naXR1cmVz 41869\nIExvcmRz 41870\nw7Z0dA== 41871\nVU5U 41872\nUmE= 41873\nIGluZXF1YWxpdGllcw== 41874\nIGNvbGxhdGVyYWw= 41875\nIHdyaXN0cw== 41876\nIGdyb3VwZWQ= 41877\nINC+0LHRi9GH0L3Qvg== 41878\nIGFybW9yZWQ= 41879\nIHR1bmc= 41880\nIGNvbnZlcmdl 41881\nIGJvaw== 41882\nIERvZGdl 41883\n0L3Rj9GP 41884\nIGZsZWVpbmc= 41885\nIE1hcnRpbmV6 41886\nIERyZWFtcw== 41887\na2Vr 41888\nIHNvY2lhbGU= 41889\nIFBsYXph 41890\n2K/YqQ== 41891\nIGtlbGw= 41892\nIFN0ZWxsZW4= 41893\nZmVsdA== 41894\nINGB0L/QsNGB 41895\nIFB2 41896\nIGNhbmNpw7Nu 41897\nIEhlcnQ= 41898\nIEJhbGFuY2U= 41899\nIHNlbHZlcw== 41900\nIHZhbmRhYWc= 41901\nIHByeQ== 41902\nIG5hamxl 41903\nINCy0LjQtNC40YLQtQ== 41904\nIHZlbHZldA== 41905\nIGdyb290 41906\nIGZvdXQ= 41907\n5qih 41908\nIFNjaHVsZW4= 41909\nIE1vaGFtbWVk 41910\nIENlbnRlcnM= 41911\nIGhhdmVy 41912\nIGZyZXVlbg== 41913\npO2KuA== 41914\n0LvQsNC9 41915\nUE9T 41916\naW5raQ== 41917\nIOuLtQ== 41918\nIHBhcmFseXplZA== 41919\nR0xJU0g= 41920\nIGNhc3Rz 41921\nIFZD 41922\n7J207IWY 41923\nINiq2r4= 41924\n56Wo 41925\nIOykmA== 41926\nINeo15XXpg== 41927\nIHN1Y2Vk 41928\nIHByb2dyZXNzZXM= 41929\nIEXEn2Vy 41930\nsOuPhA== 41931\nIGluc3RhbGxhdGlvbnM= 41932\ncGVkbw== 41933\n0LXRgNCx 41934\naW50ZXJwcmV0 41935\nIOqzoOuvvA== 41936\nIEF6ZXJiYWk= 41937\naXZpZGFkZXM= 41938\nIOyjhOyGoQ== 41939\nIGVudGZlcg== 41940\nIGNod2ls 41941\nIEhlcmJlcnQ= 41942\nIEFsZXhhbmRyaWE= 41943\neXR5 41944\nIHNlY2hz 41945\nIGNhbGliZXI= 41946\nIFdlaXNl 41947\nIEhlY2s= 41948\nIFl1Zw== 41949\nINin2YTYtw== 41950\nIHBlc2Fy 41951\nIGNpZ2Fy 41952\nIG3DqWw= 41953\nIGhhaXJk 41954\nIHByenlwYWRrdQ== 41955\nIGNvbmZpZGVudGx5 41956\nIGFuYXJjaA== 41957\nIEdpYW4= 41958\nIGRvYnJl 41959\nY2rEmQ== 41960\nYXd5 41961\nIFJlY2U= 41962\nIEdvYmllcm5v 41963\nIGNhcmdh 41964\ndW1zeQ== 41965\nIG5vcnRl 41966\nIGhhbmRsZXI= 41967\nIHJlc3BlY3Rpbmc= 41968\nIGFsbGllZA== 41969\nIFBpZXQ= 41970\naWNodGxpY2g= 41971\nIG9sZHM= 41972\nIGR1c3R5 41973\nIGdyeQ== 41974\nIC0uLi4= 41975\nR0hU 41976\nIG5lbw== 41977\n0YfQuNC60Lg= 41978\n0LXQttC0 41979\nYWlkZQ== 41980\nINCx0YPQu9C+ 41981\n7Y28 41982\nIHRlbXBvcmFkYQ== 41983\nIGRvdXRl 41984\n4piG 41985\nIOyIoA== 41986\nIEpVU1RJTg== 41987\nYXV0bw== 41988\nIHJhdGlvbmFsZQ== 41989\ncHJvYg== 41990\nIGZpc2h5 41991\nIGRvb3J3YXk= 41992\nIGVtcHRpbmVzcw== 41993\n0LXQvdC90LDRjw== 41994\nIGJyYWc= 41995\nINCT0LTQtQ== 41996\n54i+ 41997\nIHRyYW5zaWVudA== 41998\nIG1pdHRsZXJ3ZWlsZQ== 41999\nIEJyZXQ= 42000\nIGZpag== 42001\nIGRlcG9zaXRlZA== 42002\nTlM= 42003\nIOyVnuyXkA== 42004\nIGtpbXNl 42005\nIGNoYXJpdGllcw== 42006\nIE1pbGxlbm4= 42007\nZG9ncw== 42008\nIG1veWVu 42009\nIG51ZXZvcw== 42010\nIENvb2tpZQ== 42011\ncGFyYWJsZQ== 42012\nZG9pbmc= 42013\nIFNhaWw= 42014\nIGljeQ== 42015\naGFiYQ== 42016\nIHF1ZWVucw== 42017\nIGNob2NvbGF0ZXM= 42018\nIE5heQ== 42019\nINGE0LjQvQ== 42020\nIHZlYw== 42021\nIGhlbG1ldHM= 42022\nVE0= 42023\nIEFybWVk 42024\nIGltcGFpcm1lbnQ= 42025\nIFR1cw== 42026\nIE3Dqm1l 42027\nb21leg== 42028\nIFJlcXU= 42029\nIEludmVzdGln 42030\n7Y6Y 42031\nIGdvbHBl 42032\nIFJhYw== 42033\naWdyYXBo 42034\nIGt3ZXN0 42035\nIHNhaWxvcnM= 42036\nIHN0YXR1dG9yeQ== 42037\nIG1pbGVzdG9uZXM= 42038\nIE1hc2g= 42039\nIEdlc2V0emVudHd1cmY= 42040\n6Yo= 42041\nIGNvbG91cmVk 42042\naHVtYQ== 42043\nIHllcmU= 42044\nIHN1YnRpdGxlcw== 42045\nIGVtYm9kaWVk 42046\nIG1pc3NjaGllbg== 42047\nIGlQaA== 42048\nw7x0emVu 42049\nIGRldGFjaGVk 42050\nIGRlc2NyacOnw6Nv 42051\nY2lhbW8= 42052\nIHJlY29pbA== 42053\nINCt0YLQvtGC 42054\nIGV4cG9ydGVk 42055\nIEFsb25l 42056\nYW50cnk= 42057\nIGVzdGFu 42058\nIFNvZA== 42059\nIGxhdm9ybw== 42060\n5oqK5a6D 42061\n16jXkQ== 42062\nIMSR4buL 42063\nIHN3YWc= 42064\nIFBDQg== 42065\nIEthaXNlcg== 42066\nIE1vZGVy 42067\nanVn 42068\nIHRleHRpbGU= 42069\nVHc= 42070\nIG5hYw== 42071\nZnJlaQ== 42072\nIHJldGFyZA== 42073\naXNjZXJu 42074\nIHRhbGxlc3Q= 42075\nIEx1Y2E= 42076\nUmFo 42077\nIHByZWFjaGVy 42078\nIGp1dA== 42079\nIFJpY2E= 42080\naWNpZW5jeQ== 42081\nIMSRaeG7gXU= 42082\nIGthdWZlbg== 42083\nIG5ldHQ= 42084\nIGRpc2N1dA== 42085\nIGRlcHJpdmVk 42086\noa0= 42087\nIHNwcmljaHQ= 42088\nIGVuY2xvc2Vk 42089\nIFN1YnN0 42090\n56eR 42091\nIFJhYmJpdA== 42092\ncHJpc2Vk 42093\nIGJpdGNoZXM= 42094\n7J+B 42095\n54mI 42096\nIHRhcGE= 42097\nIEVzc2Vu 42098\nIEJhbw== 42099\nIGRldmllbnQ= 42100\nIFd1aGFu 42101\nIFRpcHA= 42102\nIGRpc2FzdA== 42103\n0YHRgtCy0YM= 42104\ndWJsaXF1ZQ== 42105\nIHF1YWxpdMOp 42106\nIGluYWRlcXVhdGU= 42107\nIGJhcmdhaW5pbmc= 42108\nIEdvdGNoYQ== 42109\n0LXQstC40Yc= 42110\naWV2b3Vz 42111\nZXJ0b24= 42112\nYmx1ZQ== 42113\nIOybgOyngQ== 42114\nIHNhbmRib3g= 42115\nIFJlaW4= 42116\n6Kaq 42117\nIOydtOqyg+uPhA== 42118\nIHNheA== 42119\nem9nZW4= 42120\ndW7DpGNoc3Q= 42121\nIGhlcmtlcw== 42122\nIC0s 42123\nemVuaQ== 42124\ncmlzaW5n 42125\nIHJlc3Bvc3Rh 42126\nIHByb21vdGlvbnM= 42127\nIFVudGVyc3TDvHQ= 42128\nIE1BUw== 42129\nTm90aGluZw== 42130\nb3RpY3M= 42131\nINCy0YvQuQ== 42132\nIHJvdGF0ZXM= 42133\na2llbg== 42134\nIGhhYmxh 42135\nIERhbmk= 42136\ndW5pb24= 42137\nIHdhY2s= 42138\nIGFyY2hhZW9sb2dpY2Fs 42139\nIEN1cnRpcw== 42140\nIEhvcml6 42141\nIOqzqOs= 42142\nIHdhaXZlcg== 42143\n5Zi/ 42144\nQm9u 42145\nIHJvdGF0ZWQ= 42146\nIHBpdGNoZXI= 42147\nIGluYWQ= 42148\nIGh1Z3M= 42149\nIE5vcnRoZWFzdA== 42150\n15nXqteZ 42151\nIHBsZWE= 42152\nIGN1cGNha2U= 42153\nIExZ 42154\nIGZhbWlsaQ== 42155\nIGdyb28= 42156\nIEJsYWly 42157\nIGxpag== 42158\nIGhhYml0YXRz 42159\nIGNvbW11bmlzbQ== 42160\nb3NpdW0= 42161\nYmFycw== 42162\nIEZyZWVtYW4= 42163\nbmVv 42164\nIGRpZmZ1c2U= 42165\nIGN5bGluZGVycw== 42166\nIERlYmF0 42167\n7ZaI64qU642w 42168\n0LXRiNC1 42169\nIGZpbmdlcnByaW50cw== 42170\nIGFtYXI= 42171\n0LLQuNC0 42172\nIOygleuPhOuhnA== 42173\nIGFmZmlsaWF0ZWQ= 42174\nINGF0L7Rh9C10YI= 42175\n44Gw44GE 42176\nIGV0aXF1 42177\nIGNow61uaA== 42178\n5oGt5Zac 42179\nIGNydWlzaW5n 42180\nIFdlaWhu 42181\n55S1 42182\nIFRpdGFuaWM= 42183\n57SA 42184\nIE5hc3Q= 42185\nIOuTpOs= 42186\nINCy0LDQuw== 42187\nIGRlbWk= 42188\nIEtyaXN0aW4= 42189\nTUlO 42190\nIHJpZ29y 42191\nIG1vdG8= 42192\nIExBS0U= 42193\nIO2ZnA== 42194\nIOunjOyVvQ== 42195\nIFN0cm8= 42196\nIHByb3RvdHlwZXM= 42197\nIExD 42198\n7J247J2E 42199\n0YDQuNC8 42200\nIHZpb2xhdGluZw== 42201\nIGdpb3Jubw== 42202\nIGNoaWxkaXNo 42203\n5rCU 42204\nINeQ15fXkw== 42205\nIG92ZXJkb3Nl 42206\nYWdvZ3Vl 42207\n0LDQtNGG 42208\naGV1cw== 42209\nINCz0L7QstC+0YDRjw== 42210\nIGluY3I= 42211\nIGRlYmF0ZWQ= 42212\n2YXZhA== 42213\nIGNoaWNrcw== 42214\nIHF1aW4= 42215\nTEFVR0hJTkc= 42216\nIHRpZ2h0ZW5pbmc= 42217\nIHN1cGVydmlzb3Jz 42218\nIEhhd2s= 42219\nIEJheg== 42220\nINC/0L7QstGC0L7RgA== 42221\nINCx0LvQvtC6 42222\nxIFu 42223\nIGR1bXBpbmc= 42224\nIGZhY3Rv 42225\nYmVyZ2Vy 42226\nIGFyc2VuYWw= 42227\nIEFmcmljYW5z 42228\noYA= 42229\nIGNhZmV0ZXJpYQ== 42230\nZmVlZGluZw== 42231\ncXVpbGE= 42232\nIHBhxYRzdHdv 42233\nxLFudA== 42234\nhLE= 42235\nIGVudmlyb25tZW50YWxseQ== 42236\nIGRlc3Byw6lz 42237\nIFdpbGx5 42238\nIFBhxYRzdHdv 42239\nIEdH 42240\nIGNoYWN1bg== 42241\nIGRpcmVjdGlvbmFs 42242\nIGjDtnJ0 42243\nIPCd 42244\nZW5hcnk= 42245\nIHZvaWNlZA== 42246\nYcSfxLE= 42247\nIHBvcGU= 42248\nIGNvbXJhZGVz 42249\nIEdpYnNvbg== 42250\nIEFDQw== 42251\ndmlr 42252\nIG1vZGVsbGluZw== 42253\nIGFnZ2k= 42254\n44Gq44KT44Gn44GZ 42255\nIGNvbnZlcnNpb25z 42256\nIGF2ZXJhZ2Vz 42257\nRWxsaWU= 42258\nIGdlc3RlbGx0 42259\nIFVF 42260\nb3NhaWM= 42261\n0JLQvtGC 42262\nU2F5 42263\nINGB0LDQvNC+0LPQvg== 42264\nIG1lc3VyZXM= 42265\naXNpZXJ0 42266\nZ2FzcA== 42267\ndm9pY2U= 42268\nIGNoZWNrcG9pbnQ= 42269\nIHBlcmNlbnRhZ2Vz 42270\nIGRpc3J1cHRlZA== 42271\nIFR1Yw== 42272\nIEhvbWVy 42273\nIFdBWQ== 42274\nIFR1cmtz 42275\naGVlbg== 42276\naW1vdG8= 42277\nIE9D 42278\nw61uYQ== 42279\nemllbA== 42280\nIG11ZGFy 42281\n44OQ44Kk 42282\nZ2VzZXR6dA== 42283\nIG1lam9yZXM= 42284\nIENK 42285\n0L3QsNGA0YPQtg== 42286\nIG1vZHVsdXM= 42287\nIG1vZHVsYXRpb24= 42288\nIHJlcGxpZXM= 42289\nIGxhcnZh 42290\nIGdpZGVy 42291\nIE1hbmRhcmlu 42292\nINC/0L7RgdC80L7RgtGA0LjQvA== 42293\nIHNhY3JpZmljaW5n 42294\nIHByZcOnbw== 42295\nIG95c3RlcnM= 42296\nIE15YW4= 42297\nb2xvZ3Vl 42298\nIFdpdA== 42299\nIGTDuw== 42300\nIExldXRlbg== 42301\nIHBhdGVy 42302\nIEtFTk5FVEg= 42303\n0LDQsdCw0YI= 42304\nYXJ0aHk= 42305\nIHNvY2llZGFk 42306\nIG5pw7Fv 42307\n0LXQstC+0Lk= 42308\nIGrEmQ== 42309\nIGFkdmVydGlzZWQ= 42310\nIFBlcHNp 42311\ndXRldXI= 42312\nIG1hc3Nl 42313\nIHNjYXR0ZXJpbmc= 42314\nIHnDtm4= 42315\nIGRlc2FwYXJl 42316\nIEh1YmJsZQ== 42317\nIEjDqQ== 42318\na3LDpA== 42319\nIERhcmU= 42320\nIG92ZXJyaWRl 42321\nIEVsYWluZQ== 42322\nIER1Ymxpbg== 42323\nZHVsbGFo 42324\nTWF0 42325\nIEdhcnI= 42326\nLi4uJw== 42327\nIGFkdWx0aG9vZA== 42328\nRVo= 42329\nIGJlbGFuZ3Jpams= 42330\naWVuemE= 42331\nIHVuaXZlcnNv 42332\nIHN0ZWxsYXI= 42333\n7ZSE6w== 42334\nIOqysOq1rQ== 42335\nIGNvbnN0ZWxsYXRpb24= 42336\nIFNoZWxsZXk= 42337\nIG11bHRpdA== 42338\nIG1hc2NvdA== 42339\nIGhvc3BpdGFsaXplZA== 42340\nIPCdmA== 42341\n0L7RgNGL 42342\nYWRpYQ== 42343\nIE1pa2V5 42344\nIEFtZXJpa2E= 42345\nIGhhaXJ5 42346\nSG9sZA== 42347\n4bqvbg== 42348\na2llZ28= 42349\n6KeC 42350\n4LmA4LiU 42351\nIHJpdmFscnk= 42352\nIEpvbmFo 42353\nIHN1cmdlb25z 42354\nIHJlbGF0YWJsZQ== 42355\n6JI= 42356\nIHN3aW1z 42357\nIGJpbGxpb25haXJl 42358\nbW9kZXJu 42359\nIGRvY3VtZW50aW5n 42360\nIERhZQ== 42361\nIHN3YXRjaA== 42362\nIHB1aXNzZQ== 42363\nIG1hc3Vr 42364\nIG1hcmM= 42365\nIGtyw7M= 42366\nIFBldGVyc2J1cmc= 42367\nIEFyaXN0b3RsZQ== 42368\naXhl 42369\nUHJvZHU= 42370\nINC90LjQvNC4 42371\nIGthbmE= 42372\nINCp 42373\nIHZvbWl0 42374\nIFdvcmtlcnM= 42375\ncG9wdWxhcg== 42376\nIEJpZWJlcg== 42377\n0LXRgtC4 42378\nw6l0aXF1ZQ== 42379\nIGVuY2FudA== 42380\nZ3Jhbg== 42381\nZmly 42382\nIGFudGhlbQ== 42383\n0YHRg9C00LDRgA== 42384\nTGFzdA== 42385\nIGhhZw== 42386\nIHZpY2luaXR5 42387\ncmVuY2hlZA== 42388\nYW5kaW5n 42389\nINCz0L7Qu9C+0YE= 42390\nIENvcm5lcg== 42391\n0JLRiw== 42392\nb3Nhcw== 42393\naWV2ZXJz 42394\nY2lvbmFs 42395\nIHZpZ29y 42396\nIHJlam9pY2U= 42397\nIGNpxIU= 42398\nINC60L7Qvw== 42399\nIHF1YWxjb3Nh 42400\nZGVzc3Vz 42401\nINC10LI= 42402\nIFNjYW5kaW4= 42403\nIFNtb290aA== 42404\n5L2g6K+0 42405\naGFwZQ== 42406\nIOuLrOudvA== 42407\nIFRV 42408\nIGx5cmlj 42409\nIGJlc3M= 42410\n6ZA= 42411\n0YHRgtGA0YPQvNC10L3Rgg== 42412\nIEFjdGluZw== 42413\nIE9yY2hlc3Q= 42414\nw6ljb2xl 42415\nIGRvbG9y 42416\nIO2LsA== 42417\nIHZlcmdlc3Nlbg== 42418\nIGV5ZWxpZHM= 42419\nIFRhbno= 42420\n0LLQtdGA0LY= 42421\nIOyVoOs= 42422\ndcOp 42423\nIHNjw6huZQ== 42424\nIOyasOumrOuKlA== 42425\nIGNyYXRl 42426\na2ljaw== 42427\nIFRoZW1l 42428\nIDMyMA== 42429\nIGdhcm5pc2g= 42430\nIG1ldHJl 42431\nIGNvbnZleA== 42432\ncGxhbnRz 42433\nZXNpYW4= 42434\nIOqxsOyngA== 42435\nIG3DqWRp 42436\nIE1lZGFs 42437\nMTMw 42438\nIEFsbWE= 42439\n5pyJ6bue 42440\nQ29sYQ== 42441\nINCy0LDRgNC40LDQvdGC 42442\nIGdvcmQ= 42443\nIGF2YW56 42444\nIHdoaXNwZXJpbmc= 42445\nIGludGVzdGluZQ== 42446\n0KDQlQ== 42447\nIExJU0E= 42448\nYW3EsXo= 42449\nU1BE 42450\nIHBlYw== 42451\nIHBhc3RvcnM= 42452\nIG114buRbg== 42453\nb2NyZQ== 42454\nU3Vu 42455\nINGC0LDQutGD0Y4= 42456\nIHJldml0YWw= 42457\nIGluY29tZXM= 42458\nIGRldGFpbGluZw== 42459\nIEJhY29u 42460\nIOuFuOuemOs= 42461\nIHBhcnJvdA== 42462\nIGNvbGxhYm9yYXRlZA== 42463\naGVzaWE= 42464\nIHNldmE= 42465\nIHBoeXNpY2lzdA== 42466\nIEJBQ0s= 42467\n15zXmQ== 42468\nIGJpcG9sYXI= 42469\nz4HOtc6v 42470\nY3Jvcw== 42471\nIGtlZA== 42472\nIGVjb25vbWljYWw= 42473\nIGVuZGluZ3M= 42474\nIHRpY2tz 42475\nIOq3vA== 42476\nIE9saXY= 42477\nb25ncw== 42478\nIGNvbnRpbmVudGFs 42479\nIHdlaXRlcmhpbg== 42480\nIGFjdGl2YXRpbmc= 42481\nIHBvbGxlbg== 42482\nIEFuaw== 42483\nYmF5 42484\nINec15c= 42485\nIEVnZ3M= 42486\nIFJBTVNBWQ== 42487\nIEJFUg== 42488\nIO2bqOyUrA== 42489\nIHBhc3NhZG8= 42490\nIGdyb3VuZGJyZWFraW5n 42491\ncHJlc2E= 42492\nIGhpbGZ0 42493\nIFRlY2huaWNhbGx5 42494\n0YbQuNC5 42495\nTkk= 42496\nIHR1cm5vdXQ= 42497\nIExhcA== 42498\nIEd3ZW4= 42499\nIFZpa3Q= 42500\nIGVzY29sYQ== 42501\nIENpbmVtYQ== 42502\n5rC4 42503\nIOOBhg== 42504\nIGNvbnN1bW8= 42505\nIFB1cmR1ZQ== 42506\nIHNlbWFuYXM= 42507\nIFBSRVNJRA== 42508\nxrBuZw== 42509\nIHNhY2g= 42510\n5oCO6bq86L6m 42511\nIHNhdmFnZQ== 42512\nIFJX 42513\nIDU1MA== 42514\nYm9sZA== 42515\nIFNpbW1vbnM= 42516\nIHNsYW5n 42517\nIE5hcnU= 42518\nIFRoZW8= 42519\n7ZaI64uk 42520\nLu+/vQ== 42521\nIHNlaXp1cmU= 42522\nIGhpdmU= 42523\nIGNlbGxwaG9uZQ== 42524\n5aW2 42525\naWlpaQ== 42526\nIE11c2ljYWw= 42527\nIE51Y2xlYXI= 42528\n6KGX 42529\nw6F2ZWlz 42530\nIHByZXN0aWdl 42531\nIGJhbG0= 42532\nIHJlZmlsbA== 42533\neWFo 42534\naGFydA== 42535\nIHRhcHM= 42536\nIGRpc3Bvc2U= 42537\nIE1pY2s= 42538\nIHRoZXJtb21ldGVy 42539\n44Gq44KJ 42540\nIG9iZWRpZW50 42541\nIGluZm9ybWHDp8O1ZXM= 42542\nIFdpZGU= 42543\nbW9t 42544\nU3Vk 42545\nIHN1c3BlbmQ= 42546\nIE9ic2Vydg== 42547\nINC70LXRgQ== 42548\nIHRyYXRhcg== 42549\nIEthdHJpbmE= 42550\nIHRoZXJlcw== 42551\n5Lqe 42552\nIHRleHRlZA== 42553\nIHN0w7Zy 42554\nIHNuYWls 42555\nIEZpb25h 42556\nIHZpY3RvcmlvdXM= 42557\nIGxpYnJhcmlhbg== 42558\ncHJhY3Q= 42559\nIGZpbm8= 42560\nIEFybXM= 42561\ncHB0 42562\nbHVr 42563\nIHR5cmVz 42564\nIHRvYw== 42565\nIEtvbW11bmVu 42566\n56+A55uu 42567\nIHJldm9sdA== 42568\nIG1vdGl2YXRlcw== 42569\nIGJpc2V4dWFs 42570\nIHd1cw== 42571\nIGhhbmRsYXI= 42572\nIE1VRUxMRVI= 42573\nIGV4cGVjdGFuY3k= 42574\nIGVtYm9keQ== 42575\nIFByaW1hcnk= 42576\n5Y6f5Zug 42577\n0YDQtdC5 42578\nIHVuc2NyZXc= 42579\naWFudGx5 42580\nLOKApg== 42581\nIHNuZWw= 42582\nIHByZXZhbGVuY2U= 42583\nIGVydXB0aW9u 42584\nIGRlc2NyaXB0aXZl 42585\ndmFn 42586\nINCx0YPQutCy 42587\nIG3Dqm1lcw== 42588\nIGV0aG4= 42589\nIGhpam9z 42590\nIEFiZHVs 42591\nIFphaGw= 42592\nYmVsdA== 42593\nIGfDtnN0 42594\nIFRoZXJlc2E= 42595\nIFNVTg== 42596\nIEJha2U= 42597\nIOW/qw== 42598\nIG9wdGljcw== 42599\nIGFwb2NhbHlwc2U= 42600\ncHVycG9zZQ== 42601\nIHLDs8W8bnljaA== 42602\nIGNydXM= 42603\nINCX0LXQvA== 42604\nIGhhcmRlbmVk 42605\nIFRE 42606\nIGdyYXZleWFyZA== 42607\nIFNpYmVy 42608\nIFBvcnRlcg== 42609\nIGV4cGxvZGVz 42610\nIFNvZmlh 42611\nINCS0LXQtNGM 42612\nIHdlYWtlbmVk 42613\n5piv5oiR 42614\nVUxM 42615\nIHBpbmt5 42616\nIGNoYXBlbA== 42617\nIEZyZXM= 42618\nINC/0YDQuNCz 42619\nTUVS 42620\nIFNjaG1pZHQ= 42621\nIER1ZA== 42622\n5p+l 42623\nZXN0ZW5z 42624\nIG51YW5jZQ== 42625\nIG1vZGlmeWluZw== 42626\nIE3DtmdsaWNoa2VpdGVu 42627\nIEFuYXQ= 42628\nIGVjY2VudHJpYw== 42629\nIFNjcmV3 42630\nIExlaA== 42631\nIGhvbW9nZW5lb3Vz 42632\nIFRhbGw= 42633\nIFJpY2FyZG8= 42634\nw5o= 42635\naWducw== 42636\nINC70LjRiA== 42637\nIGdlZnJhZ3Q= 42638\nUnVu 42639\nY2FzdGVy 42640\nbm9pc2U= 42641\nIGFzeW5jaHJvbg== 42642\nxJlkemll 42643\nINee15c= 42644\nIHN1cHByZXNzZWQ= 42645\nQXJ0aHVy 42646\nzq7Pgg== 42647\nw6Jy 42648\nZGlzdA== 42649\nINC60LDQtA== 42650\nIGjDtnI= 42651\nIDEzNQ== 42652\nIE1vemFydA== 42653\nINGB0L7QsdGL0YLQuA== 42654\nIE51cnNpbmc= 42655\nIEhhaGFo 42656\nIERvcA== 42657\nIHBvbGljZW1hbg== 42658\ntOyXkOyEnA== 42659\nIOq0gOugqA== 42660\naHl1aw== 42661\nIHJ1Z2dlZA== 42662\nIG51Z2dldHM= 42663\nIENvbW1z 42664\nU3R1ZA== 42665\nINGB0LLQvtC1 42666\nIGN6YXNpZQ== 42667\n44K9 42668\nIHLDqWdpb24= 42669\nIGZpc2hlcm1lbg== 42670\nIExU 42671\nw5M= 42672\nY2lhxbw= 42673\naGVp 42674\nIGNydW1icw== 42675\nIEltbWVy 42676\nIEZlbGQ= 42677\ndGhlc2U= 42678\nIGFkdmVydGlzZXJz 42679\nIHJvYW1pbmc= 42680\nIGZ1bm5pZXN0 42681\nIE5ZVQ== 42682\nIGhlaGU= 42683\nIHBva2luZw== 42684\nIOyViOuPvA== 42685\naXN0aWNhbA== 42686\nIG9wYXF1ZQ== 42687\ndcOn 42688\nd2lyZQ== 42689\nIFdlYmVy 42690\nIEphY3F1ZXM= 42691\nIDIxMA== 42692\nw7xw 42693\ndXl1 42694\nIGVuZmVybWVk 42695\nIGJ1bXBlZA== 42696\nIFNldw== 42697\nIENoYW5lbA== 42698\nIHBlcnPDtm5saWNo 42699\nIGJldHJheWFs 42700\nIGFsbGV2aWF0ZQ== 42701\nIHbDpGjDpG4= 42702\nIGd1ZXNzZXM= 42703\nIENlbGluZQ== 42704\nYXNzaW5n 42705\nc3Ryb2tl 42706\nIOyhsOs= 42707\n5aSP 42708\nINGC0LXRhdC90L7Qu9C+0LM= 42709\nINC+0YHRgtGA 42710\nIHNvaWVudA== 42711\nRGVhcg== 42712\nIGpz 42713\nIGdlc3Byb2NoZW4= 42714\nYXRoaQ== 42715\n57+7 42716\nxaFl 42717\nU2V0 42718\nb2dlcg== 42719\nIFJpZw== 42720\nINC80LXRhw== 42721\nIHNlcnZpY2lvcw== 42722\nIFJ1dA== 42723\nINCe0Lk= 42724\nIE15YW5tYXI= 42725\naWZpZQ== 42726\nIHNuYXBwaW5n 42727\nIEthbWVyYQ== 42728\nIGZlc3RpdmU= 42729\nIEZZ 42730\nIENhcm9seW4= 42731\n0ZbQsQ== 42732\nIGxlZ2dpbmdz 42733\nIHlhdA== 42734\nIGVyZ29u 42735\nIGVwaXPDs2Q= 42736\nIGFub21hbHk= 42737\ndWVzdG9z 42738\nSWQ= 42739\nIGV2YWN1YXRpb24= 42740\nIGdpZ2FieXRlcw== 42741\nIGFuZGFyZQ== 42742\nIFJlbnQ= 42743\nbXQ= 42744\naXN0aW5l 42745\nIGVzdHJhdA== 42746\nZXR0dQ== 42747\nIHJlY2ViZXI= 42748\nIGRyYW1hdA== 42749\ncmljdWxhcg== 42750\nYWxuxLF6 42751\nIFNlbmk= 42752\nIG95bg== 42753\nIENoZW1pY2Fs 42754\nINGB0YU= 42755\nIHR1cmY= 42756\nIDE5MTc= 42757\naXNjZXJuaWJsZQ== 42758\nIG1hbnRlbmVy 42759\nIGV4Y2Vy 42760\nIHNwZWN0cmFs 42761\nIG5ldXJvc2NpZW5jZQ== 42762\nIG1pY3JvZg== 42763\nIGZvcmVpZ25lcg== 42764\nIExhbmth 42765\n5L2g5Y+v5Lul 42766\nINGC0LLQvtGA 42767\nIHRvc3NlZA== 42768\nIHBvYmxhY2nDs24= 42769\nIG1hdGVpeA== 42770\nIHNpZWxsw6Q= 42771\nIG90dA== 42772\nIGNvbXB1bHM= 42773\nYWt1a2Fu 42774\nIG1hbmlmZXN0ZWQ= 42775\nIOyTuA== 42776\nIHV0bW9zdA== 42777\nIHJldmVyc2Fs 42778\nIHBsYWNlYm8= 42779\nIGJsYXQ= 42780\nIFN0dW5kZQ== 42781\nbWFuc2hpcA== 42782\nIGF0dGU= 42783\nIOyGjOqwnA== 42784\nIGlzdGVt 42785\nIGFubmF0 42786\nIFBsYXlzdGF0aW9u 42787\nIHphZA== 42788\nIHF1aXR0aW5n 42789\nIGZhbWluZQ== 42790\nIFJvdWdo 42791\nIEZsYW1l 42792\nIGhldXQ= 42793\nIG9wb3J0dW5pZGFk 42794\nIGZhaXNhaXQ= 42795\nIERQ 42796\nIGRpY2llbmRv 42797\nIE1lbGFuaWU= 42798\nIENhcm5l 42799\nbWVn 42800\ncGV0dG8= 42801\nSlVO 42802\nINC70Y7QsdC+0Lk= 42803\nIG9zdGU= 42804\nIEpKb25haw== 42805\nIHRoZWF0cmljYWw= 42806\nIGludmluY2k= 42807\nIGNvbW11bmlvbg== 42808\ndm9jYWw= 42809\nRWg= 42810\nIERldGFpbHM= 42811\nIHN0cm9sbA== 42812\nIFJheW1vbmQ= 42813\nIEFtZWxpYQ== 42814\nkaU= 42815\nIHByb2R1a3Q= 42816\nIG51ZXZhcw== 42817\nIG11c3Ru 42818\nbWF5xLE= 42819\nY29sb3JlZA== 42820\nZGVj 42821\nIGhqw6Rs 42822\nIHNlbnRpbWVudGFs 42823\nIHJlYWxtcw== 42824\nIGtyaXQ= 42825\nIHNleHQ= 42826\nIFBzeWNob2xvZ3k= 42827\n6IiJ 42828\naGls 42829\nINC60L7RgNCw0LE= 42830\nIOuCtOydvA== 42831\nIFVuZGVyc3Rvb2Q= 42832\nIEd1dGVu 42833\nIGdhbmdz 42834\nIGV2ZW5pbmdz 42835\n5oCO5qij 42836\nRW50 42837\nIExlZ2FjeQ== 42838\nIENvbmdv 42839\nIGR1cmNoYXVz 42840\nIGJ1b3k= 42841\nZXJlbGxh 42842\nV0FO 42843\nUHJl 42844\nINGA0LXQtA== 42845\nIENyaXNpcw== 42846\n44Gq44Gf 42847\nIOydvOydtA== 42848\nIG1hbnVzY3JpcHRz 42849\n0LXRgtGA 42850\nIG5vbnByb2ZpdHM= 42851\nIGRpY3RhdG9y 42852\nIGJhc2tldHM= 42853\nIElzaA== 42854\nIHBlcnRv 42855\nIGRhdGFzZXRz 42856\nIGFtcGxl 42857\nZ2ViYXV0 42858\nIGNvbnRyaWJ1dG9y 42859\nIGNpYW8= 42860\nIGNvbmZpcm1pbmc= 42861\nIFVDTEE= 42862\n4pms 42863\nINGB0L0= 42864\nIG92ZXJ0dXJu 42865\n5ZCJ 42866\nIHVucmVhbGlzdGlj 42867\nIFBpZWNl 42868\nb2NhdGU= 42869\nIGbDpGxsdA== 42870\ncG94 42871\nIOuztOyLnOuptA== 42872\nIOuplOs= 42873\nIENyZWF0aW9u 42874\n0Y7QtNCw 42875\nINeU15A= 42876\nIHdoYWNr 42877\nb2xpdGhpYw== 42878\nY2VseQ== 42879\nINGB0L7QstGA0LXQvA== 42880\nIHNlcXVlbnRpYWw= 42881\nIHByb2Zlc2lvbmFs 42882\nIGNvb2xz 42883\nIHJlcGVudGU= 42884\nIGFpcmU= 42885\nZW5uZXM= 42886\ncml0b3M= 42887\nINCS0LjQtA== 42888\nIGvDtnI= 42889\nIEJpdHRl 42890\ndWxhcnM= 42891\nIGluY29ycmVjdGx5 42892\nIHNoYXJwbHk= 42893\nIGJvbWJhcmQ= 42894\n64uY7J20 42895\nIGNocm9tb3NvbWU= 42896\nIGFkdmVydGlzZW1lbnRz 42897\naHVu 42898\nINGJ0L7QsQ== 42899\nINCU0LDQttC1 42900\nIGJhdGh0dWI= 42901\nIFNubw== 42902\n2ZDZkQ== 42903\nIGJ1ZmZldA== 42904\nIEdyaWQ= 42905\nIEJyZXc= 42906\naXNldA== 42907\nIEltcG9ydGFudA== 42908\nw7xtw7x6 42909\nIHZldG8= 42910\nIFdlcms= 42911\nIFNoYW0= 42912\na3Jh 42913\naWxlZW4= 42914\naGVhcmQ= 42915\nIGRyYWluaW5n 42916\nIGtsYXNz 42917\nIGJha2F5xLFt 42918\nY3R1cmU= 42919\n5L2g6Kqq 42920\nYW1vdXI= 42921\nIHNwb25zb3JzaGlw 42922\nIGRpc3RpbGw= 42923\nIHBhdGlv 42924\nIGtvbWI= 42925\nIG92ZXJ3aGVsbWluZ2x5 42926\nIEphbWFpY2E= 42927\ndWl0ZW4= 42928\nTGl0dGxl 42929\nIExPVA== 42930\ndGHEhw== 42931\nIGNvbW1hbmRlcnM= 42932\nIFdhdHRz 42933\nIE9wdGlvbnM= 42934\n7J2066m0 42935\nQUNU 42936\nIGluZGlzcGVucw== 42937\nIEZvcnNjaA== 42938\nb3RvbQ== 42939\nIM6tz4fOtc65 42940\nIHByYWlzaW5n 42941\nIOyYgeyDgeydhA== 42942\nIGFtYW4= 42943\nIGh5cG5vdA== 42944\ndGhtcw== 42945\nIG5hc3plag== 42946\nIG1vdXJuaW5n 42947\nIFNBWQ== 42948\nY3lq 42949\nINCz0L7RgdGD0LTQsNGA 42950\nIGNhdQ== 42951\nbWVl 42952\nIHRhZGk= 42953\nTWVk 42954\nIGNhbGlkYWQ= 42955\n44Of44O8 42956\nIHN0cmlwZQ== 42957\nIM61zr0= 42958\nIEthdHk= 42959\nIEVzY2FwZQ== 42960\nIOOCkw== 42961\nIG3DvHNzdGU= 42962\nINin2YTYpw== 42963\n0LrRgg== 42964\nIGpvYmJhcg== 42965\nIEplanU= 42966\nb3Jhcg== 42967\nIFNlcsOh 42968\nIE1lc3Np 42969\nw6F6 42970\nIFRyYW4= 42971\nIHBpZXJjaW5n 42972\nIGFyaXRobWV0aWM= 42973\nIHN0YWdnZXJpbmc= 42974\nIHBsdWdnaW5n 42975\nIEtBUg== 42976\ndmw= 42977\ntOyY 42978\nIFJlZ2llcnVuZw== 42979\nIE9jenl3acWbY2ll 42980\nIEVkZ2Fy 42981\nIGNvbmR1Y3Rpdml0eQ== 42982\neWVsbGluZw== 42983\ndmFpcw== 42984\nYWRpYW4= 42985\nIGJ1bGt5 42986\nINGB0YDQsNCy 42987\nINC/0YDQvtC8 42988\nIHBhdmVk 42989\nIGJlbmRz 42990\nIFNraWxsc2hhcmU= 42991\nIE1tbW0= 42992\nIEhvcnJvcg== 42993\nIHR1bWI= 42994\nIGdvb2Z5 42995\nIE1lb3c= 42996\n15nXnNeV 42997\nIFdhc3M= 42998\nIFNjYWxl 42999\nIFJhaw== 43000\nIHByb2plY3Rpbmc= 43001\nIGxpbmd1aXN0aWM= 43002\nIFdvcmxkcw== 43003\nZW5zZW1ibGU= 43004\nIHBlZ2E= 43005\nc3RvcHBhYmxl 43006\nIGltYmFsYW5jZQ== 43007\nIMO4 43008\nIHRocmlsbGVy 43009\n0LrQvtC70YzQutGD 43010\nIGxlZnRvdmVycw== 43011\nIGNhdmVhdA== 43012\nIFNUUg== 43013\ndW5kYWk= 43014\nIHdhdGVyeQ== 43015\nIE1hcmlu 43016\n44Oz44Kw 43017\nIGVnZ3BsYW50 43018\nIEpC 43019\n2YXZg9mG 43020\ndmlkaWE= 43021\nIEZJTg== 43022\naWNhYmxl 43023\nIHBvZG9i 43024\nIGNvaGVzaXZl 43025\nIFZlcmbDvGd1bmc= 43026\nIFBsYXRv 43027\n0LDRgNC40Yk= 43028\nIGtvdA== 43029\nINCf0L7QvA== 43030\nINC00L7QutGD0Lw= 43031\nIGltcGxhbnRz 43032\naXNzZXo= 43033\nQnJl 43034\nIGdhc3Bz 43035\nIFRFRA== 43036\ncmF0bw== 43037\nSkk= 43038\nIGF2ZW51ZXM= 43039\nIENob25n 43040\nbGFkxLE= 43041\n2LHYtg== 43042\nIGluaWNp 43043\nIFN1YmFydQ== 43044\n5pWF 43045\n6YGK5oiy 43046\n4LiL 43047\nIGFjaHQ= 43048\nIEFyY2hpdGVjdHVyZQ== 43049\nINCy0LXRidC4 43050\nIERldk9wcw== 43051\nIHRvcHBpbmdz 43052\nIG9ic29s 43053\nYWluYQ== 43054\nIEJhbmdrb2s= 43055\nZXN0cnVjdA== 43056\nIGtvYg== 43057\nIOuTrw== 43058\nINGA0LDQt9C90YvQtQ== 43059\nIHJlZQ== 43060\nIGJpanZvb3JiZWVsZA== 43061\nIERlbW9jcmFjeQ== 43062\n4LmA4Lij4Liy 43063\nINC60L7QvdGC 43064\nIHNlw6c= 43065\nIHJhaGF0 43066\nIHBhcmxpYW1lbnRhcnk= 43067\nIEJhc2g= 43068\n5oqT 43069\nemlhxYI= 43070\nSVRDSA== 43071\nIEJ1YmJsZQ== 43072\na3TDsw== 43073\nV2hvYQ== 43074\nIGZsYXRz 43075\n5pWI 43076\nem5l 43077\nIHNlcnZpY2lv 43078\nIERldw== 43079\n1bjWgg== 43080\nIHVudGVyc3TDvHR6ZW4= 43081\nIFdpbmRz 43082\n6YKj5Liq 43083\nIOyWmOuKlA== 43084\nIGV2YWx1YXRpb25z 43085\nIHJlY2E= 43086\nIGVsdmVz 43087\nY2hlZXI= 43088\nIGphbA== 43089\nIHJlc3RlZA== 43090\nIHF1aWVuZXM= 43091\nIEJyb29rZQ== 43092\nIOuniOydjOyXkA== 43093\nIGludGVu 43094\nIG9hdHM= 43095\nIHJlZmVyZWU= 43096\nIHBuZXVtb25pYQ== 43097\nIGRlbHZl 43098\ncGVhY2U= 43099\nZW55 43100\nIG1vc3RyYQ== 43101\nIENhbm5vbg== 43102\nz4HOv8+N 43103\nINCQ0Ls= 43104\nIG1vbnVtZW50YWw= 43105\nzr/Pjc68zrU= 43106\naW1tZXJz 43107\nYXZpYW4= 43108\nINC00LXQu9Cw0LXRgg== 43109\nIHBpdGNoZXM= 43110\nIEdyb3Zl 43111\nIHNlbWluYXJz 43112\nIHLDqWN1cA== 43113\nIFZvb3I= 43114\nIGRldmVu 43115\nIGRC 43116\nIGJvb3N0aW5n 43117\nZWdhbg== 43118\nIHdlbHQ= 43119\nIEd1YXRlbWFsYQ== 43120\nIG1pbGVhZ2U= 43121\nIGJlaGFuZA== 43122\nIFdhYXI= 43123\nIFN1cmY= 43124\nIGNhdWxpZmxvd2Vy 43125\nIFR5cg== 43126\nIG1pdGVpbmFuZGVy 43127\nIGRhcmluZw== 43128\nIFNpdHRpbmc= 43129\nZGxlZA== 43130\nIHJlc2VudG1lbnQ= 43131\nbcOkw59pZw== 43132\nIGZpbG1tYWtpbmc= 43133\nd2FydHM= 43134\ndGhvdWdodA== 43135\nb2xvZ2lxdWU= 43136\nIENPUg== 43137\nIGFjY291bnRlZA== 43138\nIGFwZXI= 43139\nIElOVA== 43140\nb2xhcmU= 43141\nIGFjb21wYcOx 43142\n6K2Y 43143\nIMahaQ== 43144\n5Lmd 43145\nIG1lcm1haWQ= 43146\nIEJlbnRsZXk= 43147\nYXRvcmU= 43148\nIHByZW4= 43149\nIGV0aGFub2w= 43150\nIGFzdHJvbm9tZXJz 43151\nc2VhdA== 43152\na2VlcGVycw== 43153\nIGV4ZW1wdGlvbg== 43154\nIGFtbw== 43155\nIOuCmOyEnA== 43156\nIGluaGFs 43157\nIGJvd3M= 43158\n0YHQutGD0Y4= 43159\nMzAwMA== 43160\nIGZlcm1lbnRhdGlvbg== 43161\nIHNpbmtz 43162\nIGNvbWVyY2lhbA== 43163\nIHN0dW1w 43164\nIGNlbGU= 43165\nIFNpc3RlcnM= 43166\nIFJlZ2lzdGVy 43167\nIHNvb3J0 43168\nIG5hdG9taWFzdA== 43169\nIOq3uOumvA== 43170\nIMWeZXk= 43171\nIGh5cGVk 43172\nIFJhZmFlbA== 43173\nIEVpcw== 43174\nIEJhc2ls 43175\nIEFzc2Fzc2lu 43176\nIEFkZQ== 43177\ncsOlbg== 43178\nIG9ubGFy 43179\nIG1vdmltaWVudG8= 43180\nIGFkZGl0aW9uYWxseQ== 43181\nIHNsaXQ= 43182\nIENocnk= 43183\nIEludGVydmlld2Vy 43184\n15zXpw== 43185\nIGRpc2w= 43186\nIGxpZ2dlcg== 43187\n0YPQutC4 43188\nYmVyaXNo 43189\nINGA0Y/QtNC+0Lw= 43190\nQVJPTg== 43191\nXSws 43192\nIGx1bWnDqHJl 43193\nIG9sdmlk 43194\nIGZyZXVl 43195\nIFRpbmc= 43196\nIEvDtg== 43197\nIGdlbw== 43198\nIGR5ZWQ= 43199\n44Gn44GN 43200\n0YjQtdC5 43201\nIMW8eWNpZQ== 43202\nIGll 43203\nIHRheHBheWVy 43204\nIHBlxYI= 43205\nIGTDqWNpZMOp 43206\nIGPFk3Vy 43207\nIGVudHdpY2tlbHQ= 43208\nIEhR 43209\nS0s= 43210\nb2Rhcg== 43211\nIGhvbmU= 43212\nIGNvbmZpYW5jZQ== 43213\nIGlzc3Vpbmc= 43214\nIGRpYWdub3N0 43215\nIOyehA== 43216\nINC60YDRg9GC 43217\nINC60LDRgQ== 43218\nIMO+ 43219\nIHJlc3RyaWN0aXZl 43220\nIENhc3Rybw== 43221\nIHXEnw== 43222\nIGVtcHJl 43223\nIE1vbw== 43224\nIEZpZ3VyZQ== 43225\ncGhvbmV0aWM= 43226\nUHJvZg== 43227\nINC/0YDQtQ== 43228\nIHRpbHRlZA== 43229\nIE5lZ2F0aXZl 43230\nIExpbWl0ZWQ= 43231\nbWVubw== 43232\nbGFtYXRpb24= 43233\nIHRydXN0ZWVz 43234\nIGludGVuc2VseQ== 43235\nIGHDp8SxbA== 43236\nIFVzZWQ= 43237\nIHp1bA== 43238\nIGFwcHJlY2lhdGl2ZQ== 43239\nIHRpbmM= 43240\nIGNvbnF1ZXN0 43241\nINi52YbYrw== 43242\nIHN1aWNpZGFs 43243\nIG11bGhlcmVz 43244\nIGRldGFjaA== 43245\nIGthbWVyYQ== 43246\nIEFpclBvZHM= 43247\nSU5ESVNUSU5DVA== 43248\n0LPQu9C40Lk= 43249\nIOuDhA== 43250\nIHdyZXN0bGU= 43251\n5rSX 43252\nIGZpcmVhcm0= 43253\nIGxpcmU= 43254\ncHJh 43255\nIGpld2Vscw== 43256\nIENvcm5lbGw= 43257\nIO2VoOqyjOyalA== 43258\nIHN1Y2tlcg== 43259\nIG5vbWJyZXV4 43260\nIEZlcm0= 43261\n7JuQ7J20 43262\nIFBpcw== 43263\nINC40LfRg9GH 43264\nIG1pdGVu 43265\nIGNldg== 43266\nIFVSTHM= 43267\nIENBUw== 43268\nIOWPr+S7pQ== 43269\nZmluZGVu 43270\nIGJyYXZlcnk= 43271\nINGB0LvQvtCy0L4= 43272\nIG5lbmh1bWE= 43273\nIGVuY3VlbnRyYQ== 43274\nIFNoaXJsZXk= 43275\nIHBlcmNlcHQ= 43276\nZnJhbWVz 43277\nIFJvdmVy 43278\nIEFsYmVydGE= 43279\nb2Nj 43280\nIOudvOqzoA== 43281\nIHPDunBlcg== 43282\nIHByZXN1bWU= 43283\nIGdsYW5k 43284\nIHBhY2luZw== 43285\nIG5ldXJvdA== 43286\nIHNubw== 43287\nIHBsb3R0ZWQ= 43288\nIHBhxYRzdHdh 43289\nIE93bmVy 43290\nIERlZmVuY2U= 43291\ncmlkZ2Vz 43292\nIHdhbGxwYXBlcg== 43293\nb25pYW4= 43294\nQnJv 43295\nIEFyaWFuYQ== 43296\n55u05o6l 43297\na3J5 43298\nIG5hcnJhdGlvbg== 43299\nIGNyaWFuw6dh 43300\nIEFscmlnaHR5 43301\nIOydvQ== 43302\nIOyTsOqzoA== 43303\nIGxpYmVyYXRlZA== 43304\nIGV4Y2VlZHM= 43305\nIGRvbWluYXRpbmc= 43306\nIGJha8Sxbg== 43307\nbGs= 43308\nIHNsYXBwZWQ= 43309\n0JfQtA== 43310\ndW1lbnRhbA== 43311\nZ2V0dGFibGU= 43312\nIFJveg== 43313\nIEd1bA== 43314\nb3V2ZXJ0 43315\nIHNtYXNoaW5n 43316\nYXp1amU= 43317\nU2ly 43318\nIGdyYXRlZA== 43319\n5L2g5pyJ 43320\nQVRU 43321\nIGFydGljdWxhdGVk 43322\nIHN0b3Jh 43323\nIGV4dHJhdGVy 43324\n4buJ 43325\nz4PPiQ== 43326\nd2ly 43327\nIE1ldGU= 43328\nSW1w 43329\nIGhvb3I= 43330\ncGhhc2U= 43331\nINGH0YPQtA== 43332\nINCx0YDQsNGC 43333\nIGlkYWc= 43334\nIGNpbnE= 43335\nIGFwYXJlY2Vy 43336\nIElDRQ== 43337\n5YiX 43338\nIHF1aWV0ZXI= 43339\nIGZhbHNjaA== 43340\nYWRpYw== 43341\nINC/0LvRjtGB 43342\nIE1lbnU= 43343\ndXhl 43344\nIFTDtGk= 43345\nIE1JTA== 43346\nIEhhag== 43347\ndmVyYnM= 43348\nIHR1YmluZw== 43349\nIG1hY2hzdA== 43350\nIGRhbGw= 43351\nVGVy 43352\nIGdlbGVu 43353\nIGN1Y3VtYmVycw== 43354\nIHdpZGdldHM= 43355\nIGRldnJhaXQ= 43356\nIG1pa2U= 43357\nIGludHJh 43358\n7ZWt 43359\nIMOF 43360\nIEh1bmQ= 43361\n5qeL 43362\ncXVhcnRlcg== 43363\nIGV3 43364\nIGtlbHVhcg== 43365\nIG1hdHM= 43366\nIFRyaWNr 43367\nIEluZmluaXRl 43368\nnqg= 43369\nIHBlYWM= 43370\nIFByb3Rl 43371\n4KWI 43372\nIDE3MDA= 43373\nIFJhaXM= 43374\n4LmK 43375\nw6RobHQ= 43376\naWZpY2E= 43377\nYWltZXI= 43378\nYcSH 43379\nIGFrbA== 43380\nIFZvbHZv 43381\nIFR5c29u 43382\nIFJvbmc= 43383\naXJzaW4= 43384\nIOKZpQ== 43385\nIHBhcm9keQ== 43386\nbmF0aW9uYWw= 43387\ncG9k 43388\nYXlk 43389\nYW1ibGVk 43390\nIGdvdmVybm1lbnRhbA== 43391\nIGNvbmZvcnQ= 43392\naWNpZGVz 43393\nIG5hc3pl 43394\nIFNoZXBoZXJk 43395\nIEtvbnRha3Q= 43396\nIGRpc3Byb3BvcnRpb25hdGVseQ== 43397\nINC60LvRjtGH 43398\nIHTDrXR1bG8= 43399\nIHNpbmE= 43400\nIGNvbXBvc2l0aW9ucw== 43401\nIFBG 43402\nIHZlcmts 43403\nIHN1aXZyZQ== 43404\nIGFzdGE= 43405\nIHN0YWtlaG9sZGVy 43406\nIHNhbW1h 43407\nIEJMQUNL 43408\nIG5vZGln 43409\nIGxldmE= 43410\nIGp1ZWdvcw== 43411\nIGVybnN0 43412\nIGJvdHRvbXM= 43413\nIFNpZ25hbA== 43414\nIHBvbGx1dA== 43415\nIGR1cmE= 43416\nTXVzaWs= 43417\nINC60L7QvNC90LA= 43418\nINCy0YHQtdC5 43419\nYWx0ZXI= 43420\nIFN0ZWY= 43421\nIEJpZ1F1ZXJ5 43422\nIFZlcmFudHdvcnR1bmc= 43423\nIOuLueyXsA== 43424\nIHF1aXp6 43425\nIExldHRlcg== 43426\nIEludmVzdG1lbnQ= 43427\n0YjRgg== 43428\nkOuNsA== 43429\nIGVuY29kaW5n 43430\nIHTDpG5rZXI= 43431\nIEt3 43432\nYW5uaWU= 43433\n5Yud 43434\nMTEw 43435\nIHp3eQ== 43436\nIOynpw== 43437\nIGRhdw== 43438\nZXN0w6Q= 43439\nIGRlY2VpdmU= 43440\nIEzDpG5kZXI= 43441\naXNrbw== 43442\nIHBvZHN0YXc= 43443\nIFBoYXJhb2g= 43444\n7LOk 43445\n6ZmQ 43446\nw7psdA== 43447\nIHR5w7Y= 43448\nIG11c2lteQ== 43449\n6LOq 43450\nIHBj 43451\nIE5U 43452\nIENvc3Rjbw== 43453\nIOWwjw== 43454\nIM+Dzr/PhQ== 43455\nIHVuaW4= 43456\ncm91bmRz 43457\nIHJlbWluZGVycw== 43458\nIHB1aXNxdQ== 43459\nIGtyaWpnZW4= 43460\nIHdvcmtmbG93cw== 43461\nbmV0ZW4= 43462\nIOuQmOyngA== 43463\nIHNsZWVr 43464\nIGNvd29ya2Vycw== 43465\nYW1pZW50b3M= 43466\nIHdpdGNoZXM= 43467\nYmFhcg== 43468\nZXRpZXM= 43469\nIHVubmF0dXJhbA== 43470\nIFNpY2s= 43471\nIEVmZW5kaQ== 43472\n44Oz44OA44Ob 43473\namNpZQ== 43474\nIGNoYW1hZG8= 43475\n7JiA7Iq164uI64uk 43476\nIHByemVkc2nEmWJpb3I= 43477\nIGJvb2tzdG9yZQ== 43478\nIOyeoOq5kA== 43479\nIFNlcGFy 43480\nYW5naQ== 43481\nRXZldA== 43482\nIGVtZXJnZW5jaWVz 43483\nIFhNTA== 43484\n0L3QtA== 43485\npbTrqbQ= 43486\nIOq/iA== 43487\nIOuTpOqzoA== 43488\nIHN1dA== 43489\nIFdpeg== 43490\n5bGV 43491\nIGR5bmFtaWNhbGx5 43492\nb3BlcmF0aW9u 43493\nZG90 43494\nIGluZWZmaWNpZW50 43495\nY2xlYXJz 43496\nIG11bmRhbmU= 43497\nIFZlcm9uaWNh 43498\n6Iy2 43499\n2LHYqg== 43500\ncG9zZQ== 43501\ncGFp 43502\nIG55bG9u 43503\nIGF1bWVudGFy 43504\nIGFsbHRzw6U= 43505\ndmFr 43506\nIGNhcGFjaWRhZA== 43507\nIFdyZXN0bGluZw== 43508\nIGZlcnRpbGU= 43509\nIG3DqWc= 43510\nIE5hbm8= 43511\n0LDRgtC10LvQuA== 43512\nIOyWtOyp 43513\nIHRvY2E= 43514\nIEVn 43515\n4oE= 43516\nIOyz 43517\nbHVlbnQ= 43518\nIHNvbGVt 43519\nIGNpbmVtYXQ= 43520\nIFF1ZWw= 43521\nIG9yYml0cw== 43522\nIEhhcm0= 43523\ncmljYW5lcw== 43524\nIGJsdXJyZWQ= 43525\n5aaC5L2V 43526\nINin2YTYsNmK 43527\nIGppbg== 43528\nIGdyZW5hZGVz 43529\nIGF0cm9j 43530\nIHdoZXJlaW4= 43531\nIHJlcGxlbg== 43532\nIENvbWljcw== 43533\nZWRhYW4= 43534\nIGRlbmlt 43535\nIGVtYmFycmFzc21lbnQ= 43536\nIEdvbWV6 43537\nIEJ1c2Fu 43538\naXZpdGllcw== 43539\nIHNhbGl2YQ== 43540\nIG1lcms= 43541\nIGlsZ2lsaQ== 43542\nINC60YDRg9Cz 43543\nIG9jY3VwYXRpb25hbA== 43544\nIFNhaGli 43545\nU3Rh 43546\nIGFkdmlzZXI= 43547\nIFRydWx5 43548\nIFlFQUg= 43549\nIOyeiOuKlOuNsOyalA== 43550\nemV3 43551\nYmFyZW4= 43552\nIHN0b2w= 43553\nIGJlbG9uZ2luZ3M= 43554\nIFJlc2VhcmNoZXJz 43555\nIGVmZW5kaW0= 43556\nz4XPhw== 43557\nxYLEhWN6 43558\nIFVuZw== 43559\nIEp1Yg== 43560\nIGNlcmVicmFs 43561\n4buHdQ== 43562\nINem16g= 43563\nINC/0L7QtNCw0YA= 43564\nIG1hcmNoZWQ= 43565\nIGF3YWtlbg== 43566\nIGFrbw== 43567\nIGFjZXB0 43568\nIGluaXRpYXRpb24= 43569\n6K+J 43570\nbG90 43571\nIHfFgmFz 43572\nIE1vbmdvbA== 43573\ndXRyYWw= 43574\nIHRlbnRhbmc= 43575\nIGludmVyc2lvbg== 43576\nIOydtO2bhA== 43577\nIGxvaw== 43578\nxYJieW0= 43579\nUlM= 43580\nIHN0b3M= 43581\nIGludGVyYWN0cw== 43582\nIENhbGVuZGFy 43583\nIHZhbmlzaA== 43584\nIHBoeXNpb2xvZ3k= 43585\nIGxpbmVhcmx5 43586\nIEpZ 43587\nxJ9hbg== 43588\nZnVuZGVk 43589\naXppZXJ0 43590\nIHptaWFu 43591\nIEdyaWxs 43592\nIHVuYmVsaWV2YWJseQ== 43593\nb3RlY2hub2xvZ3k= 43594\nIENhcnM= 43595\nINmG24E= 43596\nIEZvbGdl 43597\nIEJldmVybHk= 43598\nw6Rpc2NoZW4= 43599\nIGF1bWVudG8= 43600\n7JuM7ISc 43601\nIG1haWxib3g= 43602\nIHN0ZWVkcw== 43603\nIFBlYWs= 43604\n5ben 43605\nIHd5a29y 43606\nIHByYXdkYQ== 43607\n0LjRgtGL 43608\nIGRpc2NvdXJz 43609\nIGFjY3VzZQ== 43610\nY2Vzc28= 43611\ndWlyZQ== 43612\nINC/0L7Qv9Cw0LQ= 43613\nIHRoYQ== 43614\nIG1lYXN1cmFibGU= 43615\nYmVlcGluZw== 43616\nIElubmVu 43617\nINC/0Y/RgtGM 43618\nIGNvbXBldGVk 43619\nIEl0YWxpYW5z 43620\nIGVuY29udHJh 43621\nIG5pZXc= 43622\nIGZpbHRyYXRpb24= 43623\nINC/0YDQvtGE0LXRgdGB 43624\nIHBhamFtYXM= 43625\nIGNpbGFudHJv 43626\nIFNvYw== 43627\nTHVj 43628\nIOq5gOs= 43629\nIE9kZA== 43630\nIGh5ZHJhdGlvbg== 43631\n0LzQvtCy 43632\nIHBseXdvb2Q= 43633\nIENvbXBldGl0aW9u 43634\n0LjQt9C90LXRgQ== 43635\nZmxpZ2h0 43636\nIEJlaXQ= 43637\nYm91cmc= 43638\nIGNvaWxz 43639\nIGPDom1lcmE= 43640\nIGFtZW5kZWQ= 43641\nxIFt 43642\nQW5nZWw= 43643\nIFN0YWN5 43644\nZmxv 43645\nIG5vcm1hbGU= 43646\nIGNvbnNvbmFudA== 43647\nIGFjY29tcGFueWluZw== 43648\n0LrRlg== 43649\nIGlycml0YXRlZA== 43650\nIGbDpXR0 43651\nIGNyb2NvZGlsZQ== 43652\nkJjripQ= 43653\nIGFsYmVpdA== 43654\nIFBoaWxvc29waHk= 43655\n57Sv 43656\nxYY= 43657\neXRpYw== 43658\nIHLDqGc= 43659\nIGZyYW7Dp2E= 43660\nIGF0dGVudGl2ZQ== 43661\nSGFt 43662\nIGFscmVkZWRvcg== 43663\n5p2/ 43664\nc2Vp 43665\nINGB0LLQuNC0 43666\nIGdpbWJhbA== 43667\nIGNoaW5h 43668\nIPCfjrY= 43669\nINCS0LDQvA== 43670\nIHN0aW11bGF0aW5n 43671\nIE9yYQ== 43672\neXRlcw== 43673\nIGhlZnQ= 43674\nIGhhdGVycw== 43675\nIGNvbXBsZXhlcw== 43676\nIDAz 43677\ncsOzZA== 43678\nY2xlYXI= 43679\nIGJlc3RlaHQ= 43680\n55WZ6KiA 43681\nd255 43682\nbW9pbA== 43683\nIHNsb3BweQ== 43684\nIGluc2lnbmlmaWNhbnQ= 43685\nIGR1YmJlZA== 43686\nIOuWoA== 43687\nIGNvbnNpZ28= 43688\n0LvRg9GI0LDQuQ== 43689\nU24= 43690\nINeU16Y= 43691\nIM6M 43692\nIG5hZHppZQ== 43693\nIGZyZXNobWVu 43694\ndGFh 43695\nIHV3YWfEmQ== 43696\nIEZhdm9yaXRl 43697\nIENyaW1pbmFs 43698\nIGV2aWRlbg== 43699\nIHN5bWI= 43700\nTGVz 43701\nIEJlYXU= 43702\ndW5lZA== 43703\ncGxlbWVudA== 43704\nQWM= 43705\nIGRlcm1hdA== 43706\nIE5vbGFu 43707\n0YvQvw== 43708\nIHNpdHQ= 43709\nIGV2ZXJsYXN0aW5n 43710\nIGVzdGF2YW0= 43711\nINC80LjQug== 43712\nIGtow6Fj 43713\nIGludml0 43714\nIHRyZWJsZQ== 43715\nIGppZw== 43716\nbWFuaQ== 43717\nIHR1dm8= 43718\nIFJVUw== 43719\nIEVyZGU= 43720\nIER6acSZa3VqxJk= 43721\nIGJsdWViZXJyaWVz 43722\na2VsbA== 43723\nYWNpb25z 43724\n54i3 43725\n0LLQuA== 43726\nTEVU 43727\nIHNwcm91dA== 43728\nIHNwb3I= 43729\nIGLDqm4= 43730\nIE1vbmE= 43731\nIENvbnRhaW4= 43732\nIEtleXM= 43733\n0L7Qt9GP 43734\nIGZ1bmNpw7Nu 43735\nIHJhcHBlbGxl 43736\nIGV2b2x2ZXM= 43737\nIHNjcmFwaW5n 43738\nIGNvbWVudMOhcmlvcw== 43739\nIHByYXRpcXVl 43740\nIGF1eGlsaWFyeQ== 43741\nIFNwb25nZQ== 43742\n0YHQutC40Lw= 43743\ndXZv 43744\nINGB0LDQvNC+ 43745\nIHNhbms= 43746\nIGhpZ2h3YXlz 43747\nIGludmVudGlvbnM= 43748\nINC40L3QvtCz0LTQsA== 43749\nIGNyZWF0aXZlbHk= 43750\nIGJlbmNobWFya3M= 43751\nb25jw6k= 43752\nYWxhbA== 43753\nIHNvdHRv 43754\nIGNhbHZlcw== 43755\nIE1vdg== 43756\nIGxhdmVuZGVy 43757\nIGV5ZWJhbGxz 43758\nIGF3YWl0aW5n 43759\nIFBhdHk= 43760\n2YTZhw== 43761\nIGVtYnJvaWRlcnk= 43762\nIGR1aA== 43763\nIGNhbWFy 43764\nIEJPQg== 43765\nIHNwYWNlZA== 43766\nIGfFgm9z 43767\n0LDQtdC80YHRjw== 43768\nIGVzY2FwZXM= 43769\nIFJvZ3Vl 43770\nemN6 43771\n6J4= 43772\nrOulvA== 43773\nIE1vxbxl 43774\nINC10YHRgtC1 43775\nIEJ1cmFkYQ== 43776\n6Yyy 43777\nd2Q= 43778\ndXV1dQ== 43779\nIHNhc2g= 43780\nIEx1Yg== 43781\nIG5vdGVib29rcw== 43782\nIG1hZQ== 43783\nIGNvbmZsaWN0aW5n 43784\nIHN1bW1lcnRpbWU= 43785\nYWNhcw== 43786\nIGJhdWVu 43787\nYmxvd2luZw== 43788\n4bqhbw== 43789\nIOyWuOygnA== 43790\n5LuK5pel44Gv 43791\nIFNlbmhvcg== 43792\nIGlQaG9uZXM= 43793\nIFF1YXJ0ZXI= 43794\nIOygnOuMgOuhnA== 43795\ndcOf 43796\nIOuniOustOs= 43797\nIHNldHRsZXJz 43798\nIGNyZXN0 43799\nIHRyYW5zYw== 43800\n5pu+ 43801\nIHJpb3Rz 43802\nIGNsb25lcw== 43803\nIE9wcmFo 43804\nzq/Otg== 43805\nIHBhbHM= 43806\nLi4uLi4uLg== 43807\n44GU44GW44GE44G+44GZ 43808\nINGA0L7RgdGB 43809\nIExhc2Vy 43810\nIHphY3p5 43811\nIHNldmk= 43812\nIHJlZ2VuZXJhdGlvbg== 43813\n7Je8 43814\nd291bGQ= 43815\nIMO8emVyaW5l 43816\nIFN0cmHDn2U= 43817\nIHZlbmdlYW5jZQ== 43818\nIHJlcg== 43819\nIFNhZmFyaQ== 43820\nIEhFWQ== 43821\n55Wr 43822\nIHNhY2Fy 43823\nIGltYWdlbQ== 43824\nIEJ1bmRlc3Q= 43825\nbWVzYW4= 43826\nIFBhc3Rl 43827\nIHNpeno= 43828\nINC/0L7RgdGC0YPQvw== 43829\n15TXlQ== 43830\ndHJhZA== 43831\nIGZyYW7Dp2Fpc2U= 43832\nIEJvdQ== 43833\nIGJhcnJl 43834\nIFpoaQ== 43835\nIEdlZXo= 43836\naWhhZA== 43837\nIHJlY29ub2M= 43838\nIHBlbGln 43839\nIGluZGljZXM= 43840\nIOuwlOuA 43841\nIGNvbmR1Y3Rpb24= 43842\nIOyVhQ== 43843\nIHpla2Vy 43844\nIGZ1bQ== 43845\nIFfDvHI= 43846\nYnJlYWtlcg== 43847\nIHNwcml0ZQ== 43848\nQ3Jvd2Q= 43849\nIG9wZW5lcg== 43850\nIG9sdg== 43851\nIGJ1ZW5hcw== 43852\nIFNpbGs= 43853\nIEhJTQ== 43854\na29w 43855\nY29tcGw= 43856\nIHBvc3Nvbm8= 43857\ns4A= 43858\nIG9zY2lsbGF0b3I= 43859\nIFNpdGg= 43860\n6IOh 43861\n0LDQttC4 43862\nIHJhZnQ= 43863\naGFsbA== 43864\nIHNjaG5lbGxlcg== 43865\nIGltcG9ydGluZw== 43866\nIGFzc2VtYmxpbmc= 43867\nIHViaXF1 43868\nIGFjdGl2YXRlcw== 43869\nYWNjaQ== 43870\nk5zrpbw= 43871\nIGNvbXBvc2Vycw== 43872\nIEFDTA== 43873\nQ29uZg== 43874\nIOy9mA== 43875\nINC90LXQutC+0YLQvtGA0YvQtQ== 43876\nIGNhbmRpZXM= 43877\n5Yqg5YWl 43878\nIE11c3M= 43879\n4LmD4LiK 43880\nIGR1ZGE= 43881\n0L3QuNC60L7QvA== 43882\nbWVkZW4= 43883\nIOyWtOuVjA== 43884\nIFllc2h1YQ== 43885\nemFn 43886\naG9kb3U= 43887\nIGFsb3Vk 43888\nIFBhbG1lcg== 43889\naW1pemU= 43890\n44K344On 43891\nIG1hcml0aW1l 43892\nIGNvbW11bmFs 43893\nIGJhZGdlcw== 43894\nIHJ1Z2J5 43895\nIG1hcnNobWFsbG93 43896\nIGZpZXJ5 43897\nIGFjY291bnRhbnQ= 43898\nIGFibGE= 43899\nIE1vbnJvZQ== 43900\nIEZvbnQ= 43901\nIEJvb3N0 43902\nIEJhcm5lcw== 43903\nYW5zd2Vy 43904\nIEJ1cm5pbmc= 43905\nIOS4jeaYrw== 43906\nIGFuZ2Vm 43907\nIFdlc2xleQ== 43908\nbGxz 43909\n7LU= 43910\n16nXnA== 43911\naWxpxZtteQ== 43912\n15DXnw== 43913\nYW11cmE= 43914\nIEZ1ag== 43915\nIHBhbmk= 43916\nIFRyb3A= 43917\nYXJiZWl0ZW4= 43918\nIHJ1ZQ== 43919\nIFJhcmU= 43920\nw6RuZ2Vu 43921\nINGB0LzQvtGC0YDQtdGC0Yw= 43922\nINCa0LDRgA== 43923\nIE1UVg== 43924\nYm9hcmRpbmc= 43925\nXVs= 43926\nIOugiOs= 43927\nc3RhbmJ1bA== 43928\ncGllbHQ= 43929\nIEhhcmR5 43930\nIEVuZ2FnZW1lbnQ= 43931\nIERpZW5zdA== 43932\nIHfDpHJlbg== 43933\nIGZ1ZWdv 43934\nIGVzdHJ1Y3Q= 43935\nIGNhbGFt 43936\nIFJlc3BvbnNl 43937\nIOOChA== 43938\nIE1vaGFtbWFk 43939\nIHJlc2lzdGluZw== 43940\nIGR1cmFudA== 43941\n6IGv 43942\n5Ya1 43943\nIE9MRUQ= 43944\nIHZlcno= 43945\nbcOkbg== 43946\nINmG25I= 43947\nIHBhcmFub2lk 43948\nIEF3YXJl 43949\nIEVuZ2luZWVycw== 43950\nIHByb2NlZHVyYWw= 43951\nIHBlcnNvbm5hZ2U= 43952\nIGZhcmtsxLE= 43953\n6aGG 43954\nZmxvd2luZw== 43955\nINC80LXRgdGC0LA= 43956\nIEJhcmU= 43957\naXN0ZW0= 43958\nIHBvY3rEhXRrdQ== 43959\nIHBlcnNvbmFqZXM= 43960\nIOyWtOugtQ== 43961\nrYk= 43962\nINCl0L7RgtGP 43963\nIHVuc2V0dA== 43964\nIEFic29s 43965\nIOG6pXk= 43966\nIE1BWU9S 43967\n0L/QvtC70L3QtQ== 43968\nIGluZm9ybWluZw== 43969\nIGFtcHM= 43970\n0J/RgA== 43971\nIOutlA== 43972\nYWVkYQ== 43973\nINeU15HX 43974\n4bqlbg== 43975\na2VsaWpr 43976\nIGF0aGVpc3Q= 43977\nIHRyb3V0 43978\nIG5ldWVz 43979\nIE5va2lh 43980\nbWFjaGVu 43981\nIHdob2xlc2FsZQ== 43982\nxLFyZA== 43983\nSW5z 43984\nINGN0L8= 43985\nIHByaWNr 43986\nIEtpbmRlcm4= 43987\n4LiX4Liz 43988\nIGNsYXNzeQ== 43989\nIMOubnQ= 43990\nIFNob3BpZnk= 43991\nINGB0L7RgA== 43992\nINC30LDQutGA0Ys= 43993\nenVr 43994\nIHVuaXZlcnNhbGx5 43995\nIHRlYXNwb29ucw== 43996\nIHJlY291bnQ= 43997\nIG7DpWdvbnRpbmc= 43998\nIFh1ZQ== 43999\naXNpw6htZQ== 44000\nIHdlYWtlc3Q= 44001\nIHRlxZ9la2vDvHI= 44002\nIG1hdGhlbWF0aWNhbGx5 44003\nIEhvcw== 44004\nIO2VnOuLpA== 44005\nIHBhcnRhZ2Vy 44006\nIERhcnI= 44007\n6ro= 44008\nIM61zro= 44009\nIGdlcm1z 44010\nIGdlbGly 44011\nIGR1bA== 44012\nLC0= 44013\nIOyWuOs= 44014\nINee16Y= 44015\nINGP0YA= 44016\nIHF1b3RpZA== 44017\nIHByenlzeg== 44018\nIGhhcmRuZXNz 44019\nIGFxdWF0aWM= 44020\nIEp1bmdsZQ== 44021\nIFBDUg== 44022\nIEVsaW90 44023\nIG9zdHI= 44024\nIG1hcGE= 44025\nZXNzw6Q= 44026\nIEdJUg== 44027\nIERyaXZpbmc= 44028\nIFNhbWk= 44029\nIE1lZGllbg== 44030\nIENvbXBhbmllcw== 44031\nIFBoYXJt 44032\nc2VpdHM= 44033\nIFJpbQ== 44034\nIM6/z4DOvw== 44035\nIHdlaXRlcmVu 44036\nIHBpenphcw== 44037\nIEx5ZGlh 44038\nIEhlaWdodHM= 44039\nIHNpbmNlcml0eQ== 44040\nIG5vc3Nhcw== 44041\nIGTFgg== 44042\nIGFsYXJtaW5n 44043\nIENhdWM= 44044\nINGB0LzRi9GB 44045\nZmFjaW5n 44046\nYmFncw== 44047\nV1c= 44048\nINi02Yo= 44049\nIGNvdXJ0cm9vbQ== 44050\nIFBoaWxsaXA= 44051\nIOqyg+yymOufvA== 44052\nIFNwaWVsZXI= 44053\n44KP44GL 44054\nIGthbnQ= 44055\nIGFkbWl0dGluZw== 44056\n44OB44Oj44Oz44ON44Or 44057\nIGNvbnRhaW5tZW50 44058\n5byg 44059\nIHJlbW92YWJsZQ== 44060\nIGp1bXBlcg== 44061\nZm9jdXNlZA== 44062\nINC40YLQvtCz0LU= 44063\nINCi0LXQvA== 44064\nIHZhc2U= 44065\nIFVTQw== 44066\nIE1vbmF0ZQ== 44067\nIEphY29icw== 44068\nIEhPTA== 44069\naWtlZA== 44070\nZXJ3ZWlzZQ== 44071\nIGdvb2RpZXM= 44072\nIGhvbWFnZQ== 44073\n15vXqdeZ15U= 44074\nIHF1YWlz 44075\nIGluaWNpYWw= 44076\nIGd1YXJkaW5n 44077\nIGRheno= 44078\nIGNvbWJvcw== 44079\nINGD0L/RgNCw0LI= 44080\nIFRhbGVudA== 44081\n5aWH5oCq 44082\nIMOzcg== 44083\nIGludGVybWl0dGVudA== 44084\nIE1jQ2FydGh5 44085\nIHNwYW5z 44086\nIHR5cmU= 44087\nIHF1eQ== 44088\n6IiI 44089\nanV0 44090\nIFplbnQ= 44091\nIGdhdA== 44092\n5aSn5ZOl 44093\nIHNjYWZmb2xk 44094\nIG5lY2VzYXJpbw== 44095\nIFphaGxlbg== 44096\nIFNBTkQ= 44097\nIFBV 44098\nRXZlcnl0aGluZw== 44099\nLS0tLS0tLS0tLS0tLS0tLQ== 44100\nINCy0LfRj9GC0Yw= 44101\nIHNwYXJrcw== 44102\nIHBlbmR1bHVt 44103\n157Xnw== 44104\nIOyDieq5 44105\nIG11bHRpcGxpZXI= 44106\nINC70LDQtNC90L4= 44107\ndXJhdA== 44108\nIHVwc2V0dGluZw== 44109\n6KGA 44110\nYmFr 44111\nIOy1nOuMgA== 44112\nIGFuw6Fs 44113\nIEpPRQ== 44114\nIGtvc3Rlbg== 44115\nIFBhdHR5 44116\nIEd1aW4= 44117\nY2tlZA== 44118\nIEVneXB0aWFucw== 44119\nIENpdGl6ZW5z 44120\n16jXmw== 44121\nINCV0YnQtQ== 44122\nINC50L7Qs9C+ 44123\nIHNub3dmbA== 44124\nIGxla2tlcg== 44125\nIGFjb3N0 44126\nIEJhYmU= 44127\nIGdhbWJsZQ== 44128\nIGFkamVjdGl2ZQ== 44129\n0LrQuNC80Lg= 44130\nb3lz 44131\nIG1vbnRyZQ== 44132\nIEh5dW5kYWk= 44133\nIG1vaXN0dXJpemluZw== 44134\nIG1venphcmVsbGE= 44135\nT09P 44136\nIGZhY3VsdA== 44137\nIGRvZXQ= 44138\nIGZlYXJsZXNz 44139\nIGVzcHJlc3Nv 44140\nIGFsbG9yYQ== 44141\nIENpbmM= 44142\n44O844K4 44143\nIGNvbnRlw7pkbw== 44144\nIFBlbG9zaQ== 44145\nIG1pbmRlcg== 44146\ncm9vdA== 44147\nIO2VoOs= 44148\nINC/0LDQtA== 44149\nIENhbGxpbmc= 44150\nIENvbmZpZw== 44151\nIENvbnNvbGU= 44152\naW5za3k= 44153\nw6luZXJnaWU= 44154\nIHNvbGl0YXJ5 44155\n0L7QtNC1 44156\nIGd1YXJkZWQ= 44157\nMTYw 44158\nINC/0YHQuNGF 44159\nIFNoYXA= 44160\nIHRpdHJl 44161\nb2xvZ25l 44162\nINC/0LDRgNGD 44163\nIFBSRQ== 44164\n44O844OJ 44165\nIGxu 44166\nIE1pdGds 44167\nIENhcnJ5 44168\nIHNwaW5k 44169\nIENhbnRvbg== 44170\nIGtpbmdkb21z 44171\ncmVtbw== 44172\nIHJhZ2luZw== 44173\nIGluY2FwYWJsZQ== 44174\nIFdS 44175\n5YaN6KeB 44176\nINGB0L7QsdGB0YLQstC10L0= 44177\nINC60LDQutC40YU= 44178\nIFNIRQ== 44179\n64u57Z6I 44180\nIHNjYXJjaXR5 44181\nIHBlcmRl 44182\nIGV4aXRz 44183\nIFNpbmdlcg== 44184\nIHN1cHBlcg== 44185\nIG11bmljaXBhbGl0eQ== 44186\nIERpdmVyc2l0eQ== 44187\nIHRpcm8= 44188\naWVscw== 44189\nIGzDrWRlcg== 44190\nIGJsdWZm 44191\nIGF0cmE= 44192\nbHlz 44193\nIG1haGQ= 44194\nIGPDs2RpZ28= 44195\nIEhhcmxlbQ== 44196\ncnVsZQ== 44197\naWNpdHk= 44198\nIHNpbXBsaXN0aWM= 44199\nIEtvbnN0 44200\n5YGl 44201\nRUxMSQ== 44202\nIGbDtnJzdGE= 44203\nIGNvbnN0aXR1dGVz 44204\nINGB0YLQvtGA0L7QvdGD 44205\nIHVyZ2Vk 44206\nIFBhbmRh 44207\n7LCo6w== 44208\ncmVjZQ== 44209\nIHBhdHJpb3Q= 44210\nIENydXNo 44211\nIHdpbms= 44212\n0L7QudGC0Lg= 44213\ndXJhbsOnYQ== 44214\nIHNlaXp1cmVz 44215\nIGVsZWN0cm9k 44216\nIERvbmtleQ== 44217\nIElV 44218\nIE1PUw== 44219\nIGFsa2Fs 44220\n7LSJ 44221\nYmVzb25kZXJl 44222\nIHBhcmFsbGVscw== 44223\nIGJpdHRlcm5lc3M= 44224\nw6R0dHJl 44225\nZXNzaW9uYWw= 44226\nIHNveWJlYW4= 44227\nIGNvbGxhYg== 44228\nIFJlcG9ydGluZw== 44229\n5aeU 44230\nINC60L7QvNC/0LDQvdC40Lg= 44231\nIHdzenlzY3k= 44232\nIENydW5jaA== 44233\naXNlZW4= 44234\nIGFtYmFzc2Fkb3Jz 44235\nIENoZXY= 44236\n5Y2I 44237\n0L7QstGL0LU= 44238\nc2Nh 44239\nINGA0LXRiNC40Ls= 44240\n0L7RgtC+ 44241\nIGdsZWljaHplaXRpZw== 44242\nbWVybg== 44243\nw7xzdA== 44244\nIEhhZQ== 44245\ns7TqsqDsirXri4jri6Q= 44246\nIHNob3Jlcw== 44247\nIGRlcHJlc3M= 44248\nIGFob3I= 44249\nIFN0ZXVlcg== 44250\nYWho 44251\nIHJldmlzZQ== 44252\nINGB0LDQvNGL0LU= 44253\namF0 44254\nIGhlcmJhbA== 44255\nIGN1w6FudA== 44256\nIGJ1bmE= 44257\nbmllanN6ZQ== 44258\nRmluYWxseQ== 44259\n15XXlg== 44260\nY2pl 44261\nIOyeiOqxsOuToOyalA== 44262\nIOuCmOuI 44263\nIHByemVzdA== 44264\n44O844Og 44265\nbGljYQ== 44266\nIER1Y2g= 44267\n5bCN5bCN 44268\n0ZbQudGB0Yw= 44269\ncGFzc2Vu 44270\nIHNhdGlzZmllcw== 44271\nIEFkZGl0aW9uYWw= 44272\nIGPDoW1hcmE= 44273\n0LXRh9C10L3QuNC1 44274\nIHBvbXA= 44275\nIOunkOydtA== 44276\nIE1pbGxz 44277\n0LXQstC40LQ= 44278\nIHJlc3BlY3RhYmxl 44279\nIGZpbGFtZW50 44280\nIHZlbmRlcg== 44281\nIG1hdHRlcmVk 44282\nb3VyZQ== 44283\n7Li1 44284\nS29yZWFu 44285\nIGVzdHVkaW8= 44286\nIGNhY3R1cw== 44287\nIFZpdmU= 44288\nIFJhZw== 44289\nIGNvbXBsaXF1w6k= 44290\nINmI24E= 44291\nIHRhbw== 44292\npr8= 44293\nU2luY2U= 44294\nIGplb3BhcmQ= 44295\nIFNlbGw= 44296\n5bqU 44297\nIOyYmw== 44298\nIGtldG8= 44299\nIGludGVsaWc= 44300\nIEFuZ2Vi 44301\nIHRpZGVu 44302\nIHNvY2lv 44303\nIHJlbWluaXNjZW50 44304\nIGNhcmVnaXZlcg== 44305\nU3BhY2U= 44306\nIEV4ZXJjaXNl 44307\nIEJlY29tZQ== 44308\nw6p0cw== 44309\nYWtr 44310\nIS4u 44311\nINGB0L/RgNC+0YE= 44312\nIM6xz4DOvw== 44313\nIHNob290aW5ncw== 44314\nIGFwZQ== 44315\nIFNhbW15 44316\nIEt1bmc= 44317\nIGN1w6Fs 44318\nIEx1cA== 44319\n5p2f 44320\n5L6G5Yiw 44321\nINGB0YLRg9C0 44322\nIHN3ZWV0ZXI= 44323\nIGNvbXVt 44324\nIEFkcw== 44325\naHl1bmc= 44326\nINCx0YPQtNGD0Yk= 44327\nIHdhZmZsZQ== 44328\nIE9yYg== 44329\nIGxhdXQ= 44330\nIGZvcmVjYXN0aW5n 44331\n5ao= 44332\nIHJhcHBpbmc= 44333\nIHByZWZlcnM= 44334\nIGJlbno= 44335\nIG5paw== 44336\nIEJhaG4= 44337\nIHNhbmRpbmc= 44338\nIGltbWluZW50 44339\nINC/0YDQvtCx0LvQtdC80Ys= 44340\nIGRvaXZlbnQ= 44341\n0L7Qu9Cw 44342\nIMW8eWNpYQ== 44343\naWh1 44344\nIGV4aXN0ZW0= 44345\nIEludGVyaW9y 44346\nIFRha2Vz 44347\nIHRvZGRsZXI= 44348\nIGRpY3RhdG9yc2hpcA== 44349\nIFNtaXRoc29u 44350\nIEFsbGFodQ== 44351\nz47Pgc6x 44352\n7JWY7Iq164uI64uk 44353\nIFZvdGU= 44354\nIFNtZWxscw== 44355\n0L7QtNC90L4= 44356\nIGhpbmRzaWdodA== 44357\nVlI= 44358\nIFBhdGNo 44359\nIEphaHJlcw== 44360\nIHNvdXZlbmly 44361\nIG5ldXRyb24= 44362\nIGxvbmd0aW1l 44363\nIHNheWlu 44364\n5LmQ 44365\nYXNha2k= 44366\nINC+0YHRgtCw0L3QvtCy 44367\nIGV4cGVsbGVk 44368\nIGNyeXB0b2N1cnJlbmNpZXM= 44369\nIE11cmRlcg== 44370\nIENpdGl6ZW4= 44371\nV0FZ 44372\nIHBsdQ== 44373\nIGxlbW9uYWRl 44374\nIGNvbnZlbmllbnRseQ== 44375\nIEhJ 44376\nIDIwMjM= 44377\n16nXldeq 44378\n0LDRhtC40L7QvQ== 44379\nIOubsA== 44380\nINmE2YPZhg== 44381\nINC90LXQvNC90L7QttC60L4= 44382\nIHVudXNlZA== 44383\nIG1haW9yaWE= 44384\nIGFzdHJvbG9neQ== 44385\nIERvd250 44386\nTmljaw== 44387\nIHByZW9jY3Vw 44388\nIGRlbWFpbg== 44389\n157Xog== 44390\nINCy0L7QtNGL 44391\nIFNhbnNrcml0 44392\nIHByw6p0 44393\nIHN0cmFuZGVk 44394\nIHJlZmlu 44395\nINC/0YDQuNC90LjQvA== 44396\nINC/0L7QstC10YDRhQ== 44397\n4K+NPw== 44398\nIHpyb2I= 44399\nIGludGVydHc= 44400\nIERhdmlkc29u 44401\n0LvQtdC90LA= 44402\nINC/0L7QvdGP0YLRjA== 44403\nIFJlbm8= 44404\nINC/0L7Qu9GD0YfQuNC70L7RgdGM 44405\nIGNvcnJlc3BvbmRlbnQ= 44406\nIFVyYW4= 44407\nZWxzZQ== 44408\nwrfCtw== 44409\nIHR1dG9yaW5n 44410\nIGdyYW5kZGF1Z2h0ZXI= 44411\nbHVkZWQ= 44412\nIHN0ZXNzbw== 44413\nIGjhur90 44414\nIGdlZ2FuZ2Vu 44415\nINCd0JA= 44416\nIGFudGln 44417\nYmFja2dyb3VuZA== 44418\nIGdlZGFhbg== 44419\nIGZhdm9yZWQ= 44420\nIEVtbWFudWVs 44421\nIGlvZA== 44422\nIGNsYW1wcw== 44423\nIGNvbXBsZQ== 44424\nIEFkdmFuY2U= 44425\nIOyeiOqzoOyalA== 44426\nIFJveA== 44427\nIOyXkOs= 44428\nIGludGVzdGluZXM= 44429\nIHBlcmN1c3Npb24= 44430\nIGxlZ2l0aW1hdGVseQ== 44431\nIEV0ZXJuYWw= 44432\nZmFtaWx5 44433\nYWxvZw== 44434\nQnJhZA== 44435\n0LXQvdC40YLRjA== 44436\nINGB0L3QsNGH0LDQu9Cw 44437\nIGNlcnRh 44438\nIGFra29y 44439\nIM61zrTPjg== 44440\nIG9jdGF2ZQ== 44441\nIFZhYw== 44442\n0LzQvtGC0YDQuA== 44443\nIMOJdGF0cw== 44444\nIGxvbmd1ZQ== 44445\nIGRpc3NvY2k= 44446\n0YDRj9C0 44447\naGVpbg== 44448\nIHBhbnRhbGxh 44449\nIGluZGljYXRpb25z 44450\nIEx0 44451\nIEdyYWRl 44452\n6KOd 44453\nb2luZQ== 44454\nYnVn 44455\nIFZlcml6b24= 44456\nIEFsw6lt 44457\nIHZpZW5uZW50 44458\nINGH0LjRgdGC 44459\nIEJlbmk= 44460\nIFRzY2g= 44461\nIFRQ 44462\nIGluc3VsdGluZw== 44463\nIFdlaWdodA== 44464\nIGFkYXB0YXRpb25z 44465\nIGhhYsOtYW4= 44466\nIGNsaXF1ZQ== 44467\nb8WbY2k= 44468\nanVuYQ== 44469\nIHN1Y2hlbg== 44470\nIEdvZXM= 44471\nIEV4b2R1cw== 44472\nQ2hv 44473\nIGFudGlz 44474\nIO2MjOs= 44475\nc2V2ZW4= 44476\nINGH0LDRgdC+0LI= 44477\nIGJhbGxpc3RpYw== 44478\nem9ueQ== 44479\nSUNJQQ== 44480\nINC/0YDQtdGB0YI= 44481\nIHNpbXBsZXNtZW50ZQ== 44482\nIENvbGxhYm9y 44483\nRnJlZA== 44484\nINGC0LXQu9C10YTQvtC9 44485\nIFJhdmk= 44486\n7ZW07KQ= 44487\n0L/QtdGA0LI= 44488\nIOyeiOycvOuLiOq5jA== 44489\nIMOzdA== 44490\nIGFsZWc= 44491\nw7pw 44492\nIGRpc3JlZ2FyZA== 44493\nIGluZGVudA== 44494\nY2xvdWQ= 44495\nY2hsYWdlbg== 44496\nIGl0ZXJhdGU= 44497\nIGdlbmVyYWxpemVk 44498\n44GX44G+44GX44Gf 44499\n4KS5 44500\nZWxlcmk= 44501\nIGRpc2FzdHJvdXM= 44502\nINGB0YLQsNC70LA= 44503\ns5E= 44504\nS05PV04= 44505\nIHJpY2huZXNz 44506\nIGNvbnNjaWVudA== 44507\naWNodHM= 44508\nINGN0LvQtdC8 44509\n2KjYrw== 44510\naXJlbnM= 44511\nIGhhdW50aW5n 44512\ncnVjdHVyZXM= 44513\nYXR0YWNr 44514\nIGN1cGNha2Vz 44515\nc3F1ZQ== 44516\nIG5hc3plZ28= 44517\nIGFudGhyb3BvbG9neQ== 44518\n44Gf44Gg 44519\n44G144G1 44520\nY2hhZQ== 44521\nIGRpc2NvdmVycw== 44522\nIFBlcnNvbmFsaXR5 44523\nIM6kzr8= 44524\nIGRpxJ9lcg== 44525\n5Y2A 44526\nINC90LXRkQ== 44527\nIEFuaXRh 44528\nIFvimao= 44529\nIENhcm0= 44530\nIEJlbm55 44531\n7Iqs 44532\nIHB1cGls 44533\nIG9jYXM= 44534\nw6RsbGV0 44535\nasWbxIc= 44536\n5aSn5LiI5aSr 44537\nYW1lbnRhbA== 44538\nINC+0YLQvdC+0YE= 44539\nIHBpZA== 44540\nIGFybXA= 44541\nUkVF 44542\nINC+0YLQutGA0YvQsg== 44543\nIHVkYQ== 44544\nIFN5bmRyb21l 44545\nIFN0YW5kYXJkcw== 44546\n44GI44KL 44547\nIHBvaW50ZXJz 44548\nIGVuYW0= 44549\nIFRpZw== 44550\nw616 44551\nINC90LDQvNC4 44552\nIHVuY2hhbmdlZA== 44553\nIHR1cm1vaWw= 44554\n4bupbmc= 44555\nISEi 44556\nNTAwMA== 44557\nIOusvOyWtOs= 44558\nIG1lcmdpbmc= 44559\nIGVudHNjaGVpZGVu 44560\n5Ye65p2l 44561\nZm9ybWU= 44562\nIHRyaW1tZWQ= 44563\nIGRhcmVk 44564\nIGFzcGlyYXRpb24= 44565\nIE15dGhpY2Fs 44566\nIEhlag== 44567\nIEFsZWo= 44568\n0YbQvg== 44569\n0L7RgtGD 44570\nWmU= 44571\nINC40L3RgdGC0YDRg9C80LXQvdGC 44572\nIFJUWA== 44573\nIGxvY2FsaXplZA== 44574\n55qE6K+d 44575\nIHN1cnJvdW5kcw== 44576\nIGVtcGllemE= 44577\nIGNsYXNl 44578\nIOC4gQ== 44579\nIFJhcGlk 44580\nb21pbm91cw== 44581\naWdhaWw= 44582\nINGI0LjRgA== 44583\nIGzDpg== 44584\nIHphc2Fk 44585\nIHVuZm9sZGluZw== 44586\nPyE/IQ== 44587\nIOyInOqwhA== 44588\nIFBvbHNraQ== 44589\nIEthdWY= 44590\nIENlbHQ= 44591\naXRpYw== 44592\nIHRvb2xib3g= 44593\nIFBvY2tldA== 44594\nIOyEnOuhnA== 44595\nIGJlbGtp 44596\nIGFkbWlyYXRpb24= 44597\ncGhy 44598\nIFByb2R1a3Q= 44599\nIFRydWNr 44600\n44GO 44601\nIGRyYXXDn2Vu 44602\nd2HFgg== 44603\nIEhlYnJld3M= 44604\nIO2VmOqyjA== 44605\nIEFDRQ== 44606\ndXJnZW5jZQ== 44607\nYXVyYWlz 44608\nIGNoYXJpdGFibGU= 44609\nxLF0 44610\nIGFybWFz 44611\nIEdlZGFua2Vu 44612\ncmVhdGluZw== 44613\ncG9ydGU= 44614\nIGltcHJpbnQ= 44615\nZsOkaA== 44616\nINC/0L7QtNGF0L7QtA== 44617\nIG91dHNldA== 44618\n4Lin4LiB 44619\n0LXQvdC90L7Qs9C+ 44620\nQ2xhc3M= 44621\nIHZhbml0eQ== 44622\nIFZPSUNFUw== 44623\nIDI2MA== 44624\ncmVzaWRlbnQ= 44625\nVVNF 44626\nIOqwgOyatOuNsA== 44627\n6b0= 44628\nIHRocm91Z2hwdXQ= 44629\nIGN1bWE= 44630\n7Jqx 44631\n44O844Oz 44632\nINC/0LvQvtGJ 44633\nIHBhcnRpcw== 44634\nIEFuaW1hdGlvbg== 44635\np4jr 44636\nQ3Jl 44637\nw7Z0emxpY2g= 44638\nIG1hZ2c= 44639\nIGNsdW1zeQ== 44640\nIGJvdHRsZW5l 44641\nIGJpcmxpa3Rl 44642\nIEdhbWI= 44643\nINeb158= 44644\nIG1ldHJvcG9saXRhbg== 44645\n6K+l 44646\n5o6S 44647\nT29o 44648\nIG9iamVjdGlvbnM= 44649\nINmF2Ko= 44650\nINC80LXQuw== 44651\nIHJlbW5hbnRz 44652\nIFhhdmllcg== 44653\nUmljaA== 44654\nIG9sc2E= 44655\nIFBpbGw= 44656\nIGdyb2Fucw== 44657\nIE5hcnVob2RvdQ== 44658\nIENvbnRyYWN0 44659\n0LDQtNCw 44660\nbmFp 44661\nINGE0LjQtw== 44662\nIG9wcw== 44663\n4bqhdA== 44664\nIHBhcmFjaHV0ZQ== 44665\nIG5lbGw= 44666\nIEVudHNjaGVpZHVuZw== 44667\n15zXmded 44668\nIHRydXRoZnVs 44669\nIHNoYXJwZXI= 44670\nIGJ1cmVhdWNyYWN5 44671\nY2FydA== 44672\nINC40L3Rgg== 44673\nd2llaw== 44674\nIHdpbGxpbmdseQ== 44675\nIEhlcm1hbg== 44676\nIG1laHJlcmU= 44677\nIGVsaXRlcw== 44678\nIEFybW9y 44679\n44OI44Of44O8 44680\nIGVtYm9yYQ== 44681\nIFJlY29nbg== 44682\nINC70Y7QsdC70Y4= 44683\nIEV4Y2VsbGVuY2U= 44684\naWJlbA== 44685\nIGV4cG9ydGluZw== 44686\n7LK07KCB 44687\nS2VsbHk= 44688\nQ2FtZXJhbWFu 44689\nIHNsaXBz 44690\nIGZpZ3VyYQ== 44691\nIOOBoQ== 44692\nIGtvbGw= 44693\nIFBhbmRlbWll 44694\n54+t 44695\nIHRpbWVk 44696\nbGllw59saWNo 44697\nINee15s= 44698\nIHBlcsOtb2Rv 44699\n5b+X 44700\naXZhdA== 44701\nIHF1ZXN0aW9ubmFpcmU= 44702\nIHDDqXJpb2Rl 44703\n56m2 44704\nIHNpZ2hz 44705\nIGFsbGVnaWFuY2U= 44706\nIFhW 44707\nIEtlbnN1a2U= 44708\nIEdlc3VuZGhlaXRz 44709\nIHBvc2l0aXZv 44710\nIEphbmVpcm8= 44711\nIFNFRQ== 44712\nINin2LPYqg== 44713\nIEtlbHNleQ== 44714\ndG9iZXI= 44715\nIM6xzrvOu86s 44716\nIFBhcmVudA== 44717\nIERheXRvbg== 44718\nIEJpbGRlcg== 44719\nb3VyYWdl 44720\nIHNlcmVz 44721\nIG11Y2jDrXNpbW8= 44722\nIFJlYWxt 44723\nIE9GRklDRVI= 44724\nZXJzb25pYw== 44725\n44KC44Gu 44726\nb255YQ== 44727\nIOq4iQ== 44728\nIGFuY2VzdHJ5 44729\nIEp1cmFzc2lj 44730\nIGNlbnRpZ3JhZGU= 44731\n4bqldQ== 44732\ndWrEhWM= 44733\nbWFucw== 44734\nIHRpbw== 44735\nIE1vxbw= 44736\nIHRyYWdlbg== 44737\nIHN0YXJlZA== 44738\nIHNjaGVtYXRpYw== 44739\nIHBhc3NvdQ== 44740\nIG1lYXRiYWxscw== 44741\nxYJvxZvEhw== 44742\nIHN5bmNocm9ub3Vz 44743\nIHBlcm1pcw== 44744\nYXJpYWw= 44745\nIHplcg== 44746\nIHBhcml0eQ== 44747\nIEF2YXRhcg== 44748\naW5kZWVy 44749\nZXN0b24= 44750\nIG1laWTDpG4= 44751\nIENseQ== 44752\ntIk= 44753\nIGVzdHJvZ2Vu 44754\nIGNlbnRpbWV0 44755\n55m6 44756\nIGNvbnZpY3Rpb25z 44757\nIHBvc3NpYW1v 44758\nIHBlcmR1 44759\nIHBhdGhvZ2Vucw== 44760\nIFF1aW4= 44761\nIFByb2dyYW1z 44762\nIFBvaW50cw== 44763\ncmFtZW50 44764\ncmFpbA== 44765\nIHZ5 44766\nIGdyYWZ0 44767\nIGJhcnQ= 44768\nIExvdHVz 44769\n4Kg= 44770\nIOuztOyLnA== 44771\ncmFtZXI= 44772\nRmF0aGVy 44773\nIOucuw== 44774\nINeU150= 44775\nIHRyYXplcg== 44776\nIHRhcms= 44777\nw6hjZXM= 44778\nZm9ydGg= 44779\nINGB0LTQtdC70LDQu9C4 44780\nIHp1Y2NoaW5p 44781\nIHdha3R1 44782\nIGVudGVydGFpbmVk 44783\nIE1pbGxpYXJkZW4= 44784\nIHNoYWt5 44785\nIHByemVkZQ== 44786\nuIzr 44787\nIHJldmVyc2libGU= 44788\nIE5BVQ== 44789\ndWlucw== 44790\nw6lyw6p0 44791\nYW5uZW4= 44792\nIEh1bnRpbmc= 44793\nIEZlbGxvdw== 44794\nw6lsaW9y 44795\nIHJvdGF0aW9ucw== 44796\nIGdyYW5ueQ== 44797\neHRvbg== 44798\nINGB0YLQsNC90L7QstC40YLRgdGP 44799\nINC90LDRh9Cw0Ls= 44800\nIGFydGVyaWVz 44801\ncmnDsw== 44802\nINC/0L7Qu9GM0LfQvtCy 44803\nINCR0Ys= 44804\nIG5vdmVsdHk= 44805\ncG91bmQ= 44806\nIHdlaXJkZXN0 44807\nIGJvaXM= 44808\nw6ltaWU= 44809\ndXBs 44810\nQVRB 44811\nIHRlaGQ= 44812\nIE5pcg== 44813\nc8SxbsSxeg== 44814\nISIs 44815\n5ZGK6K+J 44816\nIGltbW9ydA== 44817\nIGVsaw== 44818\n0LDQvdC40Yc= 44819\nIGZhYnJpY2F0aW9u 44820\nIE5vaXNl 44821\nIEF2YW50 44822\n2LHbjA== 44823\nd2F0 44824\nIHdob29zaGluZw== 44825\nINeb15k= 44826\nINCX0L3QsNGH0LjRgg== 44827\nIGNlbnRyaWY= 44828\nYW5zaW5n 44829\nU291bmQ= 44830\nIOudvOs= 44831\nIGNhcHRpb25z 44832\n4LON 44833\nIG9yZ2Fz 44834\nIGRvbHBoaW5z 44835\nIEJsZW5k 44836\nIFRhag== 44837\nIENDVFY= 44838\nIGlub20= 44839\nIGVkaXRpb25z 44840\nIGJ1cm5vdXQ= 44841\nIGLDpHR0cmU= 44842\nIENhc2E= 44843\nb3ZpY2g= 44844\nIG1vbHRlbg== 44845\nIGJsaW5kZm9sZA== 44846\nIEd1ZQ== 44847\n5pe26Ze0 44848\nIHNwaW5uZXI= 44849\nIG3DtmdsaWNoc3Q= 44850\nIFbDoA== 44851\nZW5lY2E= 44852\nIG3DqWRpY28= 44853\n5bm55Zib 44854\nw6FzdGljbw== 44855\nIGFyZA== 44856\nIFN1bmRheXM= 44857\nIFJlbW90ZQ== 44858\nIOyWvOuniA== 44859\nIHRyxrDhu5tj 44860\n7IWo6w== 44861\nIGRvcHA= 44862\nIGJlxJ8= 44863\naWNhbmE= 44864\nIOuCmOykkeyXkA== 44865\n546H 44866\nIGhvbGluZXNz 44867\nZGlyZWN0 44868\nIOyYge2ZlA== 44869\nIGN1bHBh 44870\nIFN0aXRjaA== 44871\nbGlnaHRseQ== 44872\n0LDQvNC10L0= 44873\nINC80LXRiA== 44874\nINC/0LXRhw== 44875\nIHlodGU= 44876\nb3NwaGVyZQ== 44877\nIOyTsOuKlA== 44878\nw6lr 44879\nIHNlcmlvdXNuZXNz 44880\nIGdhcm1lbnRz 44881\nIGNvbmNpc2U= 44882\nIFNK 44883\nIHZlcmxvcmVu 44884\nIHBhcmVjZXI= 44885\nIFVOQw== 44886\n7Iqk7YOA 44887\nIGVuZmFudA== 44888\nIGJvbWJlcg== 44889\nIEdpZnQ= 44890\nIOyii+uLpA== 44891\nIHJoeXRobXM= 44892\nIEtsYXI= 44893\n5Lq65rCR 44894\nb3duaWs= 44895\nIFJldmVyZW5k 44896\nIGVtaXR0ZWQ= 44897\nbGFzc2Vu 44898\nIHJldmVuaXI= 44899\nIGFyaXNpbmc= 44900\nIHByZWNpc2FtZW50ZQ== 44901\nIGludGVycG9s 44902\nIFRlbmVtb3M= 44903\nb2JlZA== 44904\nIHRlY25vbG9naWE= 44905\nIG5lcmVkZQ== 44906\nIFZpc2E= 44907\nIHNhdmE= 44908\nIGVzY3JldmVy 44909\nIGFzc2F1bHRlZA== 44910\nIEZsZWlzY2g= 44911\nIENvdW5jaWxsb3Jz 44912\nIOqwgOq5jA== 44913\nIGJlZ2c= 44914\nIERldmVsb3Blcg== 44915\nIEJyb256ZQ== 44916\nIEJvbnVz 44917\nINeo16c= 44918\nZmFjdA== 44919\nIGVuZGxlc3NseQ== 44920\nIG1hY2Ft 44921\nIHJ6ZWN6eXdpxZtjaWU= 44922\nIGhvdmVyaW5n 44923\nw6hnZQ== 44924\nIHBvb3Jlc3Q= 44925\nIFNjaGVk 44926\nbWlsZQ== 44927\naXNzZW1lbnRz 44928\nYWPEgw== 44929\nIOumvQ== 44930\nIHZhY2Npbg== 44931\nIGZ1dHVyaXN0aWM= 44932\nIFdpbmRvdw== 44933\n0L/QsNGA 44934\nINGA0L7RgQ== 44935\nIGxvd2Vycw== 44936\nYWNz 44937\nINCQ0LvQtdC60YHQsNC90LQ= 44938\nIEFsZXJ0 44939\naWVtZQ== 44940\nIENhdWNhcw== 44941\nIGphd3M= 44942\nIGh1bnRlZA== 44943\n7Je9 44944\nINio2YY= 44945\nINec16DXlQ== 44946\nIHR1cmJpbmVz 44947\nIGx1bXBz 44948\nIEFsbGllcw== 44949\nYWhsdA== 44950\nIHN1YnNjcmlwdGlvbnM= 44951\nIG5vdXZlYXV4 44952\ndWdlcg== 44953\nYm9uZXM= 44954\nIGJlcnJ5 44955\nIOyEoOusvA== 44956\nIE1hbnVmYWN0 44957\nIEx1bmNo 44958\n6re4656Y 44959\nIGh5ZHJhdGVk 44960\nIGFjaGVp 44961\nIFlheg== 44962\nIFRpYmV0YW4= 44963\nIFF1YW50dW0= 44964\nIEplcm9tZQ== 44965\nINC+0YnRg9GJ 44966\n0L7QstCw0L0= 44967\nbW90aW9u 44968\nIENvbnRyb2xsZXI= 44969\nZW5lcmdldGlj 44970\nINGB0LrQvtGA0L4= 44971\nIHZvd2Vscw== 44972\nINGD0LbQsNGB 44973\nIGhvb2Y= 44974\nIEJ1bGxldA== 44975\naW1hZ2lu 44976\n16DXmded 44977\nIGVuZ2FnZW1lbnRz 44978\nIEJsdWVz 44979\nIGHDsWFk 44980\nIGZwcw== 44981\nIGNhdGVycA== 44982\nIHPhu5E= 44983\nIFRyaWJl 44984\n57aa 44985\n0L/QvtC9 44986\naWZlcmF0aW9u 44987\nIHJ1bWFo 44988\nIFB1bmo= 44989\nbGFi 44990\nIGNvbXByZWhlbnNpb24= 44991\nYnJpbmdpbmc= 44992\nV28= 44993\nIHRpaw== 44994\nIGFueWhvdw== 44995\n5Lul5YmN 44996\nw6F0aWNhcw== 44997\nIHNpdHplbg== 44998\nIGtvbGF5 44999\nIENvbmZlZGVyYXRl 45000\nIENhbGxlZA== 45001\nIG5hc3p5Y2g= 45002\nIGR6acSZa2k= 45003\nIGNsb2Fr 45004\nIEdvb2c= 45005\nIEFzaGU= 45006\n6LGh 45007\nZW5hbg== 45008\nINC80YvRiA== 45009\nINCy0LXRgg== 45010\nIFNwbw== 45011\nIFNrZXQ= 45012\nIEhlbmRlcnNvbg== 45013\naWxhaA== 45014\nINCx0LXQt9C+0L/QsNGB 45015\nIHNla2FsaQ== 45016\n7Ja06rCA 45017\nIHNuYXJl 45018\nIHLhurFuZw== 45019\nIGbDtnJzw7Y= 45020\nc3p5Y2g= 45021\nIMO8YmVycw== 45022\nIHN0cmF0w6ln 45023\nIOy6kOs= 45024\nIHJhcHBlcnM= 45025\nIGNlcA== 45026\nIEhhc3Rh 45027\nIGhvcnJpYmx5 45028\nIGZyw7xo 45029\nINio2Lk= 45030\nIG1hbnRsZQ== 45031\n44CF 45032\nZnVuZGluZw== 45033\nIHp1c3Q= 45034\nIFBlbnM= 45035\nc2Vk 45036\nIO2XpA== 45037\nIGdlcmVraQ== 45038\nIGFsYXJtcw== 45039\nIFdoYQ== 45040\nIE1hcmt1cw== 45041\nYWtzaQ== 45042\nINCQ0LvQtQ== 45043\na2xvcmU= 45044\nIMOpbmVy 45045\nIHRpbGRl 45046\nYm94aW5n 45047\nIOyEng== 45048\nIGVuY29udHJhbW9z 45049\nIFBoYXI= 45050\n0L3QsNC60L7QvA== 45051\nw7NzdA== 45052\nIMSwcw== 45053\nIOuLmA== 45054\nIHNxdWF0cw== 45055\nIHByZXRlbmRlZA== 45056\nIGRleg== 45057\nIOq0nOywruyVhA== 45058\namFjaA== 45059\n65286rOg 45060\nIO2ZleynhA== 45061\nIEFuc2No 45062\naW1lcms= 45063\nIGNvbmp1Z2F0ZQ== 45064\nIHBlbmluc3VsYQ== 45065\nIGdvcmlsbGE= 45066\nIHBob3RvZ3JhcGhlZA== 45067\nIEF1bnF1ZQ== 45068\nIGVudHJlbg== 45069\nIERldXRzY2hlbg== 45070\nIEFsYWRkaW4= 45071\nIOustOyEnA== 45072\nIFN0ZWxsYQ== 45073\nIEVsZWN0aW9u 45074\nb3V0aW5l 45075\nR3JhbmQ= 45076\nIFdhaw== 45077\nIFNlcmdpbw== 45078\naG9yc2U= 45079\nYWhvbg== 45080\nIEZhbWlsaWVz 45081\nIGhhdGluZw== 45082\nIEJldHQ= 45083\n4LiZ4Liw4LiE4Liw 45084\nIGN1cmxpbmc= 45085\nIElzcmFlbGlz 45086\nINec15DX 45087\nIE15ZXJz 45088\nIHNjYW5uZWQ= 45089\nIEJFQw== 45090\naWxlcmk= 45091\nIGNhbGxl 45092\nIE1pbmg= 45093\nIG1pY3Jvbg== 45094\nIGNvbmR1Yw== 45095\nw612 45096\nINCy0L7Qt9GM 45097\nIGFjdGlvbmFibGU= 45098\nIFRydXN0ZWVz 45099\nIHRpZWY= 45100\nIGhlYWRlcnM= 45101\nIGFuaW1hbGVz 45102\n7JuA 45103\n0LvQvtGF 45104\ndW5pdHk= 45105\nbHlh 45106\nIGphbmdhbg== 45107\nIGhhbmk= 45108\nIGNhc2luZw== 45109\nIGrDs3ZlbmVz 45110\nIFNwbGl0 45111\nIENhcmxv 45112\nIEJlaW0= 45113\n5bCN5LiN6LW3 45114\nIG51YW5jZWQ= 45115\nIHRlZGR5 45116\nIENsYW4= 45117\nw6RjaGVu 45118\ncGllcg== 45119\nINC00L7Qv9C+0LvQvQ== 45120\nIGRpYXBlcg== 45121\nZWZmZWN0aXZl 45122\nIE5pYWdhcmE= 45123\nIHdhcnQ= 45124\nIGNvcnJv 45125\nIEthbXBm 45126\nenRl 45127\nIGTDqXZlbG9wcGVtZW50 45128\nIGF0dGFja2Vycw== 45129\nIFNoZXJtYW4= 45130\nIDE5MTQ= 45131\nIG1lb3c= 45132\nIFDDpQ== 45133\n7Lo= 45134\nY2l0 45135\nIGNvdXBl 45136\nIOq3uOuLpOydjOyXkA== 45137\nIGh1bW91cg== 45138\nIGNvbGU= 45139\nIFdhcm5pbmc= 45140\nIFRpbA== 45141\nY2FsbQ== 45142\nYnVhdA== 45143\nIGNpbmU= 45144\na2llag== 45145\nS2V2aW4= 45146\nIG1pbGxpZ3JhbXM= 45147\n15PXqA== 45148\nYXJpYW1lbnRl 45149\nIG9ybw== 45150\nIEhvZA== 45151\nZXJ0b3M= 45152\nIGxpaGF0 45153\nIGZ1bGxlc3Q= 45154\nIGdyYW5kaQ== 45155\nINCx0L7Qug== 45156\nIHdob2xseQ== 45157\nIG1haGRvbGw= 45158\nIGNvbnRyb2xs 45159\nIEJ1bnVu 45160\n6IqC 45161\nIGRpcHBlZA== 45162\nIHJlZ2nDs24= 45163\nINmE2Yg= 45164\nINCx0LDQsw== 45165\nIHByZW1pZXJz 45166\nIGNo4buL 45167\nIOaJgOS7pQ== 45168\n6LGG 45169\naWRleg== 45170\nIHF1b3Rh 45171\nIGdoZWU= 45172\nYXJrYW4= 45173\nIGdlbGF0aW4= 45174\nIENsZXJr 45175\nYmJsZXM= 45176\nIFBhaWdl 45177\nIHN0YWdlZA== 45178\nIHNvY2lhaXM= 45179\nIEJpemlt 45180\nIHZlbG9jaWRhZGU= 45181\nIG1hbGFyaWE= 45182\nIHNob3J0ZW5lZA== 45183\nIHNhbHV0 45184\nIEhlaGU= 45185\nIHbhu4s= 45186\nIFRhaXdhbmVzZQ== 45187\nIEFycmk= 45188\nZ3Jlcw== 45189\n5Y675LqG 45190\nKCk= 45191\ncmlhZA== 45192\nkZDr 45193\nIOOBvuOBmQ== 45194\nIG1hc2N1bGluaXR5 45195\nTFA= 45196\nIOuWoQ== 45197\nIHTDqXJtaW4= 45198\nIFbDpA== 45199\nIFNlaXRlbg== 45200\nIHJlc3BlY3RmdWxseQ== 45201\nw6Fv 45202\nIHRvdGFsZW1lbnQ= 45203\nIHNjcmFwcw== 45204\nIGluZnJpbmc= 45205\nIEJvc2U= 45206\nYW1hcg== 45207\nIEx1aXph 45208\nIEFSTQ== 45209\nINC/0LvQvtGF0L4= 45210\nIG1laWxsw6Q= 45211\nIERpb24= 45212\n5byA5aeL 45213\nIHNvdWhh 45214\nIGdlc2NoYWZmdA== 45215\nIGNvbnZvbHV0aW9u 45216\nIOKAkeKAkQ== 45217\nIDE0NA== 45218\nbGluZ3Q= 45219\nIG3DpG5uaXNr 45220\nIGd1c3RhZG8= 45221\nIGNvaW5lZA== 45222\nIEx1bHU= 45223\n5a6D55qE 45224\nb3BvdA== 45225\nIFByYXllcg== 45226\nIHJvYXN0aW5n 45227\nIGNocm9tb3NvbWVz 45228\n6aOv 45229\n0LXQu9C1 45230\nQmx1ZQ== 45231\nIEVyZm9sZw== 45232\n6Ieq55Sx 45233\nINC/0YDQuNC00YPQvA== 45234\nIHJpc2tpbmc= 45235\nIEd1YXJkaWFucw== 45236\nIDIwMjQ= 45237\nw6hzZQ== 45238\nINCx0YPQtNGC0L4= 45239\nIGNvbnNlcnZl 45240\nIEJyaW5naW5n 45241\nIEFzdHJh 45242\n4LmA4LiC 45243\nINC60LDQutGD0Y4= 45244\ncmVzcGFjZQ== 45245\nINCe0L8= 45246\nINCy0L7QutGA0YPQsw== 45247\n5oWL 45248\nIG1hc2tlZA== 45249\nIFNoeQ== 45250\nIE5pbQ== 45251\nZW5kYXM= 45252\nIO2PrOyduA== 45253\nIOuqqOyWkQ== 45254\nIHZhbGV1cg== 45255\nIE5lZ3Jv 45256\nIENEcw== 45257\naW5rbGluZw== 45258\nIG1vbnTDs24= 45259\nIEhvbmQ= 45260\nUmVhbA== 45261\nIGZ1bGxuZXNz 45262\nIFdob29wcw== 45263\nIFNoYW5r 45264\nIEJyYW4= 45265\nIHRyYW5zbHVj 45266\nIGVycg== 45267\nIEdhcmRlbnM= 45268\nb3l1 45269\nIGFmZmlybWF0aXZl 45270\n5LiL5LiA 45271\nIHBvdHRlcnk= 45272\nbGl2ZQ== 45273\naWF1 45274\nbW91bnQ= 45275\nIGZsdWN0dWF0aW9ucw== 45276\n5Z+O 45277\nw61lbQ== 45278\nIHB1bHNlcw== 45279\nIGNyaWFuw6dhcw== 45280\nzq/Osc+C 45281\nIGJhc3Rh 45282\nRU5OSVM= 45283\nINC60L7RgNC/ 45284\nIEZ1bms= 45285\nIOmAmQ== 45286\nw6VydA== 45287\nINC30LDRgtC10Lw= 45288\nIHBhcmFzaXRlcw== 45289\n44OZ 45290\nIGFpcmZsb3c= 45291\nIFh1YW4= 45292\nR8O8bG1l 45293\nIGJsb29taW5n 45294\nIG11bW15 45295\nIGJhbw== 45296\nIENsYXA= 45297\nYW50aWNz 45298\nc2tpbg== 45299\nY2VudHJpYw== 45300\nYmVmb3Jl 45301\nIFJJQ0hBUkQ= 45302\nIEhhaG4= 45303\nVEFLRQ== 45304\nINGC0YDQtdGC0Yw= 45305\nIHByZXNzdXJlZA== 45306\nIEt1cno= 45307\naXN0aQ== 45308\nINC90LDRiNC10LPQvg== 45309\nIHNlbWljb25kdWN0b3I= 45310\nIENsaW50 45311\nIHBsdXA= 45312\nIE9yaWdpbg== 45313\nIEV2ZW50cw== 45314\nIOqxseyglQ== 45315\nbXBmZW4= 45316\nTkVZ 45317\nIERX 45318\nIOu2ge2VnA== 45319\nIGluZm9ybXM= 45320\nIGZvcnNr 45321\nIGFtaWdh 45322\nIENpbmNpbm4= 45323\nU3Ry 45324\nIHBhcmlzaA== 45325\nIOy7pO2U 45326\nIHNpemk= 45327\nIHBsYW50YXRpb24= 45328\nIGJsaXZlcg== 45329\nINC/0L7Qu9C40YI= 45330\nIHN1YmRpdg== 45331\nIHJhbnQ= 45332\nIHByaW5jaXBhbHM= 45333\n5ZCm 45334\nIGt1bm5l 45335\nw7xnZW4= 45336\nYXJlc3BhY2U= 45337\nIHZhbGxhaGk= 45338\nIGNvbGxhcHNpbmc= 45339\n2KfZhNmF 45340\nIGxpZGVy 45341\nIHRhbWE= 45342\nIGdhZ25lcg== 45343\ncm9sbGU= 45344\nIOunkOyUgOuTnOs= 45345\nIGNhdGhlZHJhbA== 45346\nIFdlYnM= 45347\nIFBvbGl0aWNz 45348\n44GX44G+ 45349\n44Gj44Gm44KL 45350\nIERlbmlz 45351\nIHR1bw== 45352\nIHJlZnJhY3Q= 45353\nIGRpc2ludGVncg== 45354\nc3Rlcw== 45355\nINC70Y7QsdC+0LI= 45356\nIHdpbHQ= 45357\nIHRydXN0cw== 45358\nIGtvbXVu 45359\nIEJhc2tldA== 45360\nfiEh 45361\nbmFl 45362\nINCa0L7Quw== 45363\nIHN5bGxhYmxlcw== 45364\nIEhlbnJp 45365\nIE5hYg== 45366\n2YjYuQ== 45367\nIHdu 45368\nIGthbXA= 45369\nIFByYWd1ZQ== 45370\nIEJyZWFrZmFzdA== 45371\nIOq3uOuftA== 45372\nIGNodXQ= 45373\nIDMzMA== 45374\nIEluZHVzdHJpZXM= 45375\n5LiN566h 45376\nIGnFn2k= 45377\nIEdvbGRtYW4= 45378\nIMSwbnM= 45379\ndXNzYQ== 45380\naXRoZQ== 45381\nhJA= 45382\nIFNPVU5E 45383\n0LDQu9GM0L3Ri9C8 45384\nLig= 45385\nINCz0L7RgNCw0Lc= 45386\nIGRhZ2VnZW4= 45387\nIOuu 45388\nIHdhaXRlcg== 45389\nbGVuZ3Ro 45390\nIM+Dz4TOsQ== 45391\nIGNodW5reQ== 45392\nU2E= 45393\nIHJ1c3R5 45394\nIEp1ZGl0aA== 45395\nNzUw 45396\nIGVwb3h5 45397\n7Lmg 45398\n5Y+y 45399\nbWV0cm8= 45400\nIHJlamVjdGluZw== 45401\nIHNxdWlzaHk= 45402\nIHBsdXBhcnQ= 45403\nIG3DqXRo 45404\nIGFzcGlyaW5n 45405\nIERyYW1h 45406\nIHVwbGlmdA== 45407\np4jri6Q= 45408\nLi4uLi4uLi4uLi4uLi4uLg== 45409\noKTsmpQ= 45410\nIHTDqWNuaWNh 45411\nIHBhc2FuZG8= 45412\nVGhvc2U= 45413\nINGA0LDQt9C00LXQuw== 45414\nIG1lZGlvY3Jl 45415\nIE5pY2tlbA== 45416\nIHN1cGVyaGVyb2Vz 45417\nIG1pc3Npb25hcnk= 45418\nIFBhcmVjZQ== 45419\nIHJvdGF0aW9uYWw= 45420\nIHByZXR0 45421\n44Gd44GG44Gd44GG 45422\nIGxhbWE= 45423\nIGNhbnlvbg== 45424\nIGJldGVy 45425\nIFByb3Zvc3Q= 45426\nIGh2aXM= 45427\nIGRlYWN0aXY= 45428\nIEhlbHM= 45429\ncGZsaWNodA== 45430\nU29tZXRoaW5n 45431\nIFBpZXJjZQ== 45432\nIOqygOywsA== 45433\nbHVuZ2Vu 45434\nIHNpemluZw== 45435\nIGxhdGl0dWRl 45436\nIE5vbmV0aGVsZXNz 45437\nb21uaWE= 45438\nIFNhYnJpbmE= 45439\nIER5bmFtaWM= 45440\n5YO5 45441\nb250YQ== 45442\n7IaQ 45443\nIGRpcmVjdGl2ZQ== 45444\nIERlcG90 45445\nIGZ1ZWxlZA== 45446\nIGV4cGlyZQ== 45447\nIGNvbcO6bg== 45448\nIFNleHVhbA== 45449\nIEdvcmU= 45450\nIHJlc3RsZXNz 45451\nIEpBS0U= 45452\n0YLQtdGA0LXRgQ== 45453\nINGC0YDQsNC9 45454\nIEhvbHo= 45455\n5bCG 45456\nIEFjdG9y 45457\n5p2v 45458\nY2FsbA== 45459\nIGVtYWlsZWQ= 45460\nIFBlYXI= 45461\n0YPQtNC4 45462\n0YDQsNC7 45463\nIG3DoHk= 45464\nIENIRUVSSU5H 45465\n5a6J5YWo 45466\nIHJldGFpbGVy 45467\nIHByb3Ry 45468\nIGRpc2NhcmRlZA== 45469\nIEhJUw== 45470\nIGV2YW5nZWxpY2Fs 45471\nIEVsc2U= 45472\nIGV4cGxvcmVz 45473\nIGNyaXRpY2l6aW5n 45474\naWZpaw== 45475\nIHdoaXBwaW5n 45476\nIG9waXM= 45477\nb3VzZWQ= 45478\nRnJlZQ== 45479\nIO2MrA== 45480\nIG1pY3M= 45481\ncnVubmluZw== 45482\nT2I= 45483\naXRpw6k= 45484\nIG5lY2VzaXRh 45485\nIERvbWluaWNhbg== 45486\nIEJhZ2g= 45487\nIHRlbmRlbmNpZXM= 45488\nIE1ldHJvcG9saXRhbg== 45489\nxZFs 45490\nINC30L3QsNC10Lw= 45491\nIFphbQ== 45492\nIERlYWRwb29s 45493\nYWxlxbw= 45494\nIGludmVzdGlnYXRpdmU= 45495\nIFByb251bmNpYXRpb24= 45496\nIGVtdWxhdGU= 45497\nIGJhbmNv 45498\nIC3imao= 45499\n5Yi7 45500\nIG92ZXJhcmNoaW5n 45501\nbGljaGVz 45502\nINCy0L7Qt9Cy0YDQsNGJ 45503\nIFNjYXJ5 45504\nIEtpYQ== 45505\n5Zyf 45506\ncm9udGluZw== 45507\naW5uZWQ= 45508\nINuB2Yg= 45509\n7IiY66W8 45510\n576O5ZGz 45511\nd2Vs 45512\nIOuzhOuhnA== 45513\nIHVuaW50ZW50aW9u 45514\nYWFT 45515\nIG5pY2VzdA== 45516\nIFRlc3Rpbmc= 45517\nIElTSUw= 45518\nb2dlbm91cw== 45519\nINif 45520\nIGxpZXV0ZW5hbnQ= 45521\nIGJyYXVjaA== 45522\nIFRpcg== 45523\nZHJpdmU= 45524\nIHRvbGVyYW50 45525\nIHNob290ZXJz 45526\nIOyYiOu7kA== 45527\n5q66 45528\nb250b24= 45529\nIHRlcmlh 45530\naWV0ZXQ= 45531\nUm9u 45532\nbGVpZ2g= 45533\nZ2Fl 45534\nIG9sbWFr 45535\nIENsb25l 45536\nc29sZA== 45537\nIHNrZWxldG9ucw== 45538\nIGluY3VtYmVudA== 45539\n0L7QvNC1 45540\nQ09O 45541\nIGxldmVu 45542\nIG1pbGxlbm5pYWxz 45543\nIGVxdWF0b3I= 45544\nIEZlZGVy 45545\nIEFsZXhhbmRyYQ== 45546\nIHZyaWo= 45547\nIEhlYWx0aGNhcmU= 45548\nIO2VkQ== 45549\nIGVtcGhhc2l6aW5n 45550\nIGRpYWxvZ3Vlcw== 45551\nIGNoaWxsZWQ= 45552\nIHByb3c= 45553\nIFBhc3Npb24= 45554\nIExhZGVu 45555\nYXJpZXN0 45556\nYXBocmFn 45557\nIGFkZGl0aXZl 45558\nIFN0YWF0 45559\nIE5lcHQ= 45560\nIEhBTQ== 45561\n4LmA4Lit 45562\nZGF5cw== 45563\nIO2WiOuNmA== 45564\nIHZvaWxh 45565\nINGF0Ls= 45566\nIERldXRzY2hl 45567\ncXVpcg== 45568\nT3Blbg== 45569\nIHJhbmdlZA== 45570\nIGxldmVycw== 45571\nIE1hbnNpb24= 45572\ncGFyZWQ= 45573\nIFRpdGFucw== 45574\nYXRvaXJl 45575\nIGVuZ2FnZXM= 45576\neWV6 45577\nbmFkZW4= 45578\nIG9ic3RydWN0 45579\nIEVtbXk= 45580\n5ZWG 45581\nsKU= 45582\nIHRyb3Bo 45583\nIHRha2Vhd2F5cw== 45584\nKy4= 45585\ndHljem5pZQ== 45586\naMOpc2l0ZXo= 45587\nIHBvZMOtYQ== 45588\nIOyjvOuKlA== 45589\nIGNpdGF0aW9u 45590\nIEFxdWE= 45591\nIGRlYnVnZ2luZw== 45592\n0LLQsNC9 45593\nIOuLueyLoA== 45594\nINin2YTZig== 45595\nIGluc3RhbnRhbmVvdXM= 45596\nIEF1dHVtbg== 45597\nIGtlcGFkYQ== 45598\nIGdldGFu 45599\naGluaQ== 45600\neW50aGVzaXM= 45601\nINC/0LXRgNC4 45602\nIE1hY2Vk 45603\nUGFj 45604\ndW50dQ== 45605\nQnJh 45606\nINCz0L7RgNCw0LfQtNC+ 45607\nIDE5NTk= 45608\nINGC0LXQvNC/0LXRgA== 45609\nIHNhbmU= 45610\nIE9VUg== 45611\nYXN1 45612\nIOustOyX 45613\nIHZhbGxleXM= 45614\nIGxpc3Rpbmdz 45615\nIHByemVkc3Rhdw== 45616\nIGd1bW15 45617\nIGNvcnRpc29s 45618\nIE9icmln 45619\nIEFsbGllZA== 45620\n0L7QttGD 45621\nIGfDqW7DqXI= 45622\nIGRvY3M= 45623\nIENoaWxp 45624\nIEFiZHVsbGFo 45625\nS2l0 45626\nIGNvbnRyaWJ1dG9ycw== 45627\n0LPQvtGA 45628\n0LvQtdGA 45629\nIGJpbmRlcg== 45630\nIG1vZMOobGU= 45631\n7YWQ 45632\nIGludGVpcm8= 45633\nbWlz 45634\nZmVyYQ== 45635\n2KfYsA== 45636\nTWFuaWE= 45637\nIO2ZnOuPmQ== 45638\nIOu0kOyalA== 45639\nIEpheg== 45640\n57uT 45641\n0ZbQu9GM0LrQuA== 45642\ncmlzaG5h 45643\nIOq1sA== 45644\nIHRhbWFuaG8= 45645\nIGFwcGxpYW5jZQ== 45646\nIFJlc2lzdGFuY2U= 45647\nIExPT0s= 45648\nIEh5cA== 45649\nIEhlaWw= 45650\nRmlyZQ== 45651\ndWp1 45652\nIGhlYWxz 45653\nIG1hbHQ= 45654\nIFZFUlk= 45655\nINGF0L7Rh9C10YjRjA== 45656\nIGxpbmdlcg== 45657\nIE5hcnI= 45658\nIFJlZ3VsYXI= 45659\nIExvb3A= 45660\nIExlbm8= 45661\nIHNvcnRpZQ== 45662\nIFNlcnZl 45663\nIOydtQ== 45664\nIEx1ZWdv 45665\naXR0w6Q= 45666\nIHVuZGVz 45667\n6LO9 45668\n5aaC5p6c5L2g 45669\nIHNsaXBwZXJz 45670\nIG9uZGE= 45671\nIMSQw6J5 45672\nIHRhcGVk 45673\nIHRyYXZlcnNl 45674\nIHJlbGF0aXZpdHk= 45675\nIFlvc2hp 45676\nY2pvbg== 45677\naWxhdGVk 45678\nYWN0aXZlbHk= 45679\nINCh0L7Qsg== 45680\n5oiR6KeJ5b6X 45681\nIFBPTA== 45682\n0KDQmA== 45683\naW5mbGFtbQ== 45684\nY2hlZXJmdWw= 45685\nINee15DX 45686\nID4+Ww== 45687\nbWluc3Rlcg== 45688\nINCy0LvQuA== 45689\nIGlkZW50aWZpZXI= 45690\nIExhbWJkYQ== 45691\nIHRyb3M= 45692\nIGZsYXdsZXNz 45693\nIGRldHJpbWVudGFs 45694\nIGJ1bmxhcsSx 45695\nV2Fy 45696\nIHJlZ2nDo28= 45697\n55yf55qE5piv 45698\nIEJpa2U= 45699\nY2Vzc29ycw== 45700\nIGPDuW5n 45701\nIFJO 45702\nIOq9gw== 45703\nIGvDvMOnw7xr 45704\nIEJlZ2lubmluZw== 45705\n7Zi46w== 45706\nIGdld2U= 45707\nIGRlbm90ZQ== 45708\nIEFsYmVydG8= 45709\nIHByb2Jpb3Q= 45710\nIG9kZQ== 45711\nIG1vbGFy 45712\nIGJ1cnN0aW5n 45713\nYXNzdW1lZA== 45714\nIGZvb3RwcmludHM= 45715\ndmVkYQ== 45716\nIHN0ZXJvaWRz 45717\nIGZsYW1pbmc= 45718\nIEVsbGVy 45719\nIGVya2VubmVu 45720\nw6R0emVu 45721\nIGxpZmVjeWNsZQ== 45722\nIERPVQ== 45723\nIEthcmVuYQ== 45724\nIEd1ZXJyYQ== 45725\n6L+Y5piv 45726\nIHNpbmlzdGVy 45727\nIHBvZMOpaXM= 45728\nIHBhcmFi 45729\nIG9rbw== 45730\nIG1hdMOpcmk= 45731\nIGNhcmlj 45732\nc29uYXJv 45733\nIHByYXRpY2FtZW50ZQ== 45734\n0YPRgdCw 45735\nIGNvbXVucXVl 45736\nIHZpZ2lsYW50 45737\nIHJlZ2ltZXM= 45738\nIFNob290aW5n 45739\nIHJhaWRz 45740\nIE5vcmE= 45741\nIFdpZWRlcg== 45742\nbWVucw== 45743\nINGB0L7QtA== 45744\nIOqyveyasOyXkOuKlA== 45745\nINCy0YXQvtC0 45746\nIGF1dG9iaQ== 45747\nIFNjaG4= 45748\nIFJvYmJpZQ== 45749\nIEZpdG5lc3M= 45750\nINC60L7QvdGE 45751\nIHBlbmd1aW4= 45752\n0LzQvtGC0YDRjw== 45753\nINC80LjQvdC40Lw= 45754\ncGxheXM= 45755\nIGRlbGVnYXRlcw== 45756\nTWVy 45757\nIHNpc3RlbQ== 45758\nIE1pY2hhZWxz 45759\nbWFsZQ== 45760\n2KfYuQ== 45761\nIGPDoWNo 45762\nIEjDpA== 45763\nINeZ15XXk9ei 45764\nIHN1cGVycG93ZXI= 45765\nIHN0cm9u 45766\nIHJvdmVy 45767\nIGTDqXBlbmQ= 45768\n6Zmz 45769\nIHJldGlyaW5n 45770\nIHZhbXBpcmVz 45771\nIG1lcmRl 45772\nIENoYW5naW5n 45773\nIHRhbWU= 45774\nIHNwb2tlc3BlcnNvbg== 45775\nIGNheQ== 45776\nIGZsaXJ0aW5n 45777\nIEdyw7Y= 45778\nIHfDpHI= 45779\nIHd5Yg== 45780\nIGNvZXVy 45781\n4bqhbmg= 45782\nIOyZgOyEnA== 45783\nIGNvbm5haXM= 45784\nIEh1bmRyZWRz 45785\nIEJlYQ== 45786\nIM6xz4A= 45787\ncHJ1Y2g= 45788\nIHNvY2llZGFkZQ== 45789\nIFdoaWxzdA== 45790\nIEthaXQ= 45791\nZXNwYWNl 45792\nIGNoaWE= 45793\nIEVybQ== 45794\nIOuwlOq/ 45795\nIGZlbmNlcw== 45796\nIE1vcnRhbA== 45797\n6rKB 45798\nINCz0YDQsNGE 45799\nIEhvbWVsYW5k 45800\nIEpVTg== 45801\naXNzdA== 45802\nIHBhcmxhcg== 45803\nIHNwb3J0eQ== 45804\nw6lv 45805\nIGRlZXBlbg== 45806\nIEJlaGF2aW9y 45807\n6YCP 45808\n5ZOI5ZOI5ZOI 45809\nIGVycmFuZA== 45810\nIHJvdGFyeQ== 45811\nIFdlbGxpbmd0b24= 45812\nV2luZA== 45813\nIG1lc2VsYQ== 45814\n4bqjbmc= 45815\naWVuZGU= 45816\nIGV4Y2VsbA== 45817\nIEdlbml1cw== 45818\nIEVkdWFyZG8= 45819\n5pyJ5Lq6 45820\nIMWfdW51 45821\nIMSwc3RhbmJ1bA== 45822\nIHByb2R1dG8= 45823\nIOOFjuOFjg== 45824\nT0ZG 45825\nIHdvbGx0 45826\n54iG 45827\nIOuJtOyKpA== 45828\nIGxhc3M= 45829\nIGhlcnR6 45830\nIGFyb21hdGlj 45831\nINC30LLQvtC9 45832\nIGF1dG9j 45833\nIEx1c3Q= 45834\nIDExMg== 45835\nIM6X 45836\nIHJldmlld2Vycw== 45837\nIHJlY2VwdGl2ZQ== 45838\n5bCN5LqG 45839\nw6JuZA== 45840\nb2dsbw== 45841\nIOyVhOuLmQ== 45842\nIG5nbw== 45843\n0ZbRgtC4 45844\nw6V0 45845\nY29ubw== 45846\nIHRla3Jhcg== 45847\nIOyjvOqzoA== 45848\nIGdlbG1pxZ8= 45849\nIGJlZHRpbWU= 45850\nIEFyZ2g= 45851\nQURB 45852\nINCz0L7RgNC+0LTQsA== 45853\nIMSH 45854\nIGFsbGlhbmNlcw== 45855\nZ2lnZ2xpbmc= 45856\nIHllcmRl 45857\nIHNwaWVz 45858\nIGd1dGVz 45859\nw6dp 45860\nIGFsbHRpZA== 45861\nIExhaA== 45862\nnpDr 45863\nIGRva8WCYWQ= 45864\n2YjZig== 45865\nIHRveGljaXR5 45866\nIGNhbmNlbGxhdGlvbg== 45867\nIDE5NTg= 45868\nZHJv 45869\nIOyekeydgA== 45870\nIE1vdG9yb2xh 45871\nIG11bHRpbg== 45872\nIGVudGh1c2lhc3Rz 45873\nIE1pZ2h0eQ== 45874\nIENvY29udXQ= 45875\nOuOAjA== 45876\nIFBpY3R1cmVz 45877\nIHNhbmdyZQ== 45878\nIGJsaW5raW5n 45879\nb2xlc29tZQ== 45880\nIOyKpO2DgOydvA== 45881\nRlA= 45882\nIGJvb21pbmc= 45883\nINC00LXRgdGP0YI= 45884\nIHJhdGNoZXQ= 45885\nIHRpbWVsaW5lcw== 45886\nbGVuZXNz 45887\nIGNhZ2Vz 45888\nIEdvb2RuaWdodA== 45889\nb21ldGltZXM= 45890\nIGN1bm5pbmc= 45891\nIFJpc2s= 45892\ndWxlZA== 45893\nZGFkZQ== 45894\nIHByYXRh 45895\nIGd1c3RhcsOtYQ== 45896\nYW11cw== 45897\nIEppbnBpbmc= 45898\nIGVzdHJ1dA== 45899\nIGRlc2NvYnJpcg== 45900\nIE3EgQ== 45901\nIEFsbGFu 45902\nIOWIhg== 45903\nINec16c= 45904\nIHByZXNlcnY= 45905\nIFN0cmF3YmVycnk= 45906\nxI8= 45907\nTHU= 45908\nIGtybw== 45909\nIFJlcG9ydHM= 45910\n7IWU7JW8 45911\nIHZhbHQ= 45912\nIHBvdXZhaXQ= 45913\nIGFwcGFy 45914\nIEJvbmU= 45915\nIHByZWZlcmFibHk= 45916\nIFJlcMO6YmxpY2E= 45917\n5bCx5Yiw 45918\nIGhlcnpsaWNo 45919\nIGNoaW1uZXk= 45920\nIMOnZXY= 45921\nIHZpc2Fz 45922\nIHZlcnI= 45923\nIGN1bHRpdmF0aW9u 45924\nIEFybWVuaWE= 45925\nINCy0LTRgNGD0LM= 45926\nIGNvY2tybw== 45927\ncmV0Y2hlZA== 45928\nYXJ0eg== 45929\nINC70Y7QtNGP0Lw= 45930\nIHBvbMOtdGljYXM= 45931\nIFBhbno= 45932\nIEFLQQ== 45933\nIOuIjOufrA== 45934\nIGVycm8= 45935\nIGNhbXBlcg== 45936\nIDEwMg== 45937\n4KS4 45938\nZG9uZQ== 45939\nIGhvYXJk 45940\nINCf0L7RgtC+0Lw= 45941\namVvbmc= 45942\nIGRlc3Rh 45943\ncGFr 45944\nIGluaW0= 45945\nIGdyb3dlcnM= 45946\nIE1lc3NhZ2U= 45947\nIGVsZWN0b3I= 45948\nZW5nYWdl 45949\nIEZvcmJlcw== 45950\nIENpbmNpbm5hdGk= 45951\nIGRpZmbDqXJlbmNl 45952\nZGY= 45953\nIHNwYXI= 45954\nIGF3YWl0cw== 45955\nIFVTU1I= 45956\nIFJpc2luZw== 45957\nIEhvxZ8= 45958\nIGZvb3Rpbmc= 45959\nIGNvbmRpY2lvbmVz 45960\n0YLQvtGA0L7Qsg== 45961\nIGNsaW5pY2lhbg== 45962\nIERpc2t1c3M= 45963\n5aOT 45964\n16jXkg== 45965\n16U= 45966\naXRlaXQ= 45967\nZ3Jlbg== 45968\nIGNoYXJpc21h 45969\nIGxldWtl 45970\nIGlycml0YXRpbmc= 45971\nIGNpcmNh 45972\nIFJob2Rlcw== 45973\nIHBpb3I= 45974\nIGhhbmRpY2Fw 45975\ncm95YWJsZQ== 45976\nIHZ1bGw= 45977\nT0c= 45978\nIGluw61jaW8= 45979\naWVyaQ== 45980\nIHNwbGFzaGluZw== 45981\nIGRlbWlzZQ== 45982\nIGFzc2lzdGly 45983\n0YfRgtC+ 45984\nIGNvdmVydA== 45985\nIEd1ZA== 45986\n4LiJ 45987\na2zDpHI= 45988\nIOyekOq+uA== 45989\nIHZlcsOkbmRlcnQ= 45990\nIFJFTQ== 45991\nIENvbnZlbg== 45992\nYXRnZQ== 45993\nIHBpZXJ3c3pl 45994\nIGNsZXJneQ== 45995\nbGluZ3Rvbg== 45996\nbGl2 45997\nVlBO 45998\nINGB0L7QttCw0Ls= 45999\nIEhhdGU= 46000\n44Go44GT44KN 46001\nz4bOvw== 46002\nIFJlc3BvbnM= 46003\n0L7Qt9C0 46004\nIGV0bWVr 46005\nIGNoZW1pbg== 46006\n2YXYqQ== 46007\nIOqwgOyhsQ== 46008\nVHJl 46009\nIHVtYXM= 46010\nIEJ1cnRvbg== 46011\nIHBhdHJpYXJjaA== 46012\nIFNtaXRoc29uaWFu 46013\npZg= 46014\nTW9vbg== 46015\nQWly 46016\nIG1lZGlvcw== 46017\nIGVyYXNlcg== 46018\nIHdvbGx0ZW4= 46019\nIHBhcmVpbA== 46020\nIEJpbGxpZQ== 46021\n5oq9 46022\n0LXRgNGC0LI= 46023\nIHBhcmxhbWVudA== 46024\nIGFnb255 46025\nIFFVRQ== 46026\nc2VxdWVudGx5 46027\nQW5vdGhlcg== 46028\nIFdoZXc= 46029\nIEFubnVhbA== 46030\nIHNlYmVu 46031\n7IOB7J2E 46032\ndmFsdWVz 46033\nnpzrp4w= 46034\nIHNpbm9u 46035\nZXJlYWw= 46036\nIEVubGlnaHQ= 46037\nIENoZW1pc3RyeQ== 46038\nIENhdGFsdW55YQ== 46039\nIGRvY3Ry 46040\nYW50b24= 46041\nIHN0dWs= 46042\nIFBsYXRl 46043\nIEthcmRhc2hpYW4= 46044\nIGZpbG9z 46045\nIFdldA== 46046\nINC/0L7Qv9GL0YI= 46047\nIHVua25vd25z 46048\nIFNjaG9u 46049\nIEJhbGR3aW4= 46050\nIHRlbGVzY29wZXM= 46051\nIEd1Y2Np 46052\nb3hpZGU= 46053\nIENvbnNlcnZhdGl2ZQ== 46054\n7ISx7J2E 46055\nIGhpbmF1cw== 46056\nUG93ZXI= 46057\nIOqxtOqwlQ== 46058\nIHByZXZhaWw= 46059\nb3JtYW4= 46060\nbWFjaGluZQ== 46061\nIDE5NDY= 46062\nIHVuYmVs 46063\nIHNjaGF1dA== 46064\nIHBpZWw= 46065\nZWVudGg= 46066\nIG9iamVjdGl2ZWx5 46067\nIGNoYWtyYQ== 46068\nYXVkaW8= 46069\nIGNoaWNvcw== 46070\nIFZhdWx0 46071\n5bCI 46072\nIG1lZGljaW5hbA== 46073\nIFRhaWw= 46074\nV2hpbGU= 46075\nIGFzcGhhbHQ= 46076\nIGZyb3pl 46077\nIEVL 46078\ndW5jaGluZw== 46079\nbm9zaXM= 46080\nMjAxNQ== 46081\nIEdyaQ== 46082\nIG9kZGx5 46083\nIE3DpHI= 46084\nIEFlZw== 46085\nY29sbw== 46086\nUGFy 46087\nIOuTpOyWtOs= 46088\nIHZpbmRlbg== 46089\nIE9WRVI= 46090\nIGljZWQ= 46091\nIHNjb3Jw 46092\nIGhhYw== 46093\ncXVhbGlmaWVk 46094\nINGD0LLQuNC00LXRgtGM 46095\nZXJtbw== 46096\nSEVO 46097\nIHNvaQ== 46098\nIG11bHRpcGxlcw== 46099\nIGxheW91dHM= 46100\nIGJsaW5kbmVzcw== 46101\nIEJvd3Nlcg== 46102\nINC/0L7QtNGC 46103\nIMOO 46104\ndmVudGlvbmFs 46105\nIG1hdGE= 46106\nbWFkxLE= 46107\nIGdlZXo= 46108\nIGNhZGVuY2U= 46109\nIHdhxbxuZQ== 46110\nIENocmlzdGll 46111\ndmVuZ2U= 46112\nQ2FsbA== 46113\nIHR1cm5hcm91bmQ= 46114\nIGJsb2I= 46115\nINCv0Lo= 46116\nIFZvaWNlb3Zlcg== 46117\nIHBlcmls 46118\nIEphaW1l 46119\nIEhPWQ== 46120\nbGFuZQ== 46121\nIHNlYmVs 46122\nIER1bw== 46123\nIEhpc3RvcmljYWw= 46124\nIGRuaQ== 46125\nIGdlbWE= 46126\neWs= 46127\nIHNhYmVt 46128\n4bqvbmc= 46129\nIHZhcnM= 46130\nIFJvbm5pZQ== 46131\nIFJvbmFsZG8= 46132\nIFBlcnF1w6g= 46133\nbnNpbm4= 46134\naGFpcg== 46135\nIHJlbGVudGxlc3M= 46136\nIGx5bg== 46137\nIHRyYXZlbGVy 46138\n5oCO6bq85LqG 46139\nbmluZQ== 46140\nIGFudGlt 46141\nIOy8gA== 46142\nIHNub3diYWxs 46143\nINGF0LDRgNCw0LrRgtC10YA= 46144\nIGludGVybnM= 46145\nIGNvbnN0aXR1ZW5jeQ== 46146\nINCd0LDQvA== 46147\n15zXnA== 46148\nVkVM 46149\nIHZpa3RpZ3Q= 46150\nIGFwb3lv 46151\n2YTYqA== 46152\nIGphcmQ= 46153\nIGhlaWdodGVuZWQ= 46154\n0YDQvtGB0YI= 46155\nIFNNSVRI 46156\nINC00LXQu9Cw 46157\nIHJlcGFpcmluZw== 46158\nIHJpZ3Q= 46159\nIFNoZWlraA== 46160\nIEJyaXRuZXk= 46161\nIGV2ZXJ5dGltZQ== 46162\nIGFkdmVudHVyb3Vz 46163\nb2NrZXk= 46164\nZXJudA== 46165\nIGF0YXF1ZQ== 46166\nIEFsdGVybmF0aXZlbHk= 46167\nZWZmZWN0 46168\nIHBhbGF2cmFz 46169\nIEVsbGlvdHQ= 46170\nIHLDqXVzc2k= 46171\nIGh5cGVydGVuc2lvbg== 46172\nIE1hbnVhbA== 46173\nIHByb3BoZXRpYw== 46174\nIGhhbmRj 46175\n0YzQtQ== 46176\nIHJlZnJhaW4= 46177\nIFNxdWlk 46178\n7J6h 46179\nINC60L7QvNCw0L0= 46180\nw6RsbGVu 46181\nIGxsZWfDsw== 46182\nIGJhc2g= 46183\naW9ueQ== 46184\nINGB0LrQu9Cw0LQ= 46185\nINC60LDQsQ== 46186\nIGNhcmVsZXNz 46187\nIFBvb2w= 46188\nIHRyw6Fz 46189\nIGZpbHM= 46190\nIFNjaHI= 46191\nIHNwcmF3ZA== 46192\nIE1vbmF0ZW4= 46193\nIHVuZm9yZ2V0dGFibGU= 46194\nIENvdHRvbg== 46195\nIGluY29udmVuaWVudA== 46196\nIFJY 46197\nb3Jpcw== 46198\nIGh1bWJsZWQ= 46199\n16rXlw== 46200\nINii2b4= 46201\nIGluY3Jlw60= 46202\nIEtvbW1lbnRhcmU= 46203\n6IiS 46204\ncmFjacOzbg== 46205\nIHZhbnRhZ2U= 46206\nIFNlYWw= 46207\nIOydtOqxsOulvA== 46208\nIGpvdWU= 46209\n44Gd44GG44Gn44GZ44Gt 46210\nIOyYpOuemA== 46211\nINC40YHQv9GL0YI= 46212\nb2Jlbg== 46213\nIGdyYXRl 46214\nIGNvbnRyb2xl 46215\nIFBlcmN5 46216\nxYJhZGE= 46217\nIHNpbXVsdGFuZW91cw== 46218\nIHByb3RvdHk= 46219\nIGdyb8OfZXI= 46220\nIGJld3Vzc3Q= 46221\naW5pemk= 46222\nIHBhc3NpZXJlbg== 46223\nIEhhcHBpbmVzcw== 46224\n5YmH 46225\nc2hp 46226\nZ2VodA== 46227\nIHN0YXRpb25lZA== 46228\nIEVyZ2Vibmlz 46229\nIGRpcmVjdGFtZW50ZQ== 46230\nIHN1cnZpdmVz 46231\nIHBlcnNvbmVz 46232\nQkVSRw== 46233\nIHZvbWl0aW5n 46234\nIGNvbmhlY2Vy 46235\nIGFkam91cg== 46236\nIENpdmlj 46237\ncGVp 46238\nYnVyc3Q= 46239\nIOuLpOuLiA== 46240\n6Y8= 46241\nIHNsZWQ= 46242\nIHBsYXRhZm9ybWE= 46243\nIFNlY3Q= 46244\nIERlZmlu 46245\n55m76Yyy 46246\nw6lub20= 46247\nY2huZXQ= 46248\nIHByb2ZpdGFiaWxpdHk= 46249\nIGVycmVpY2h0 46250\n4buPaQ== 46251\nY2F0aW9u 46252\nIOyngOq4 46253\nIHBlcmRyZQ== 46254\nIGZlbG9ueQ== 46255\nIDE5NTc= 46256\n5oiR5b6I 46257\nIHVuc3VjY2Vzc2Z1bA== 46258\nIG5hZ3lvbg== 46259\nIGVsYXN0aWNpdHk= 46260\nIGZhY2FkZQ== 46261\nIGVhcnRobHk= 46262\nINCw0LzQtdGA0LjQutCw0L0= 46263\nIGNvbm4= 46264\nY2xh 46265\nRHU= 46266\nIHBvbGl0aXF1ZXM= 46267\nIGhhbG8= 46268\naWFudGVz 46269\nINC80L7QtdC5 46270\n44Oz44OJ 46271\ndG9uZXM= 46272\nZWxpZXI= 46273\n6K6a 46274\naHRha2luZw== 46275\nIHdpY2h0aWdl 46276\nIGFubm8= 46277\nIExvaw== 46278\naWxsaW9ucw== 46279\nIHZpdmVy 46280\nIHNvbGNoZW4= 46281\nIHN1Zg== 46282\nIFNhbHo= 46283\nIE52aWRpYQ== 46284\nenVnZQ== 46285\nIFNwaWtl 46286\nVmlkZW8= 46287\nIHR3b3I= 46288\nIEFsYQ== 46289\n6JGJ 46290\nIGhhbnlh 46291\nIEFkbQ== 46292\n7J21 46293\nIFBhdGllbnRlbg== 46294\nIE9uaW9u 46295\nIEtvYmU= 46296\nIFNjZW5l 46297\nIFJhc2g= 46298\n5qiZ 46299\n0YDQsNGB0YI= 46300\naXN0YW5p 46301\nR2VuZXJhbA== 46302\nbGV5ZQ== 46303\naW1iYXA= 46304\nIGNvbmNlYWxlZA== 46305\nIEZyaWRheXM= 46306\nIFdvb2w= 46307\nINC90L7QstGL0YU= 46308\n2LTYsQ== 46309\nIOqysOqzvA== 46310\nIGplZG9jaA== 46311\ntOyLnA== 46312\nk6Trj4Q= 46313\nIOyepeuCnA== 46314\ndWt0 46315\nTG91 46316\nIOuoueyWtA== 46317\nIEV4cGVjdA== 46318\nINC00L7QvNC+0Lk= 46319\nIGlycmVzcG9uc2libGU= 46320\nIGFjZXJjYQ== 46321\nIFp1c3Q= 46322\n16jXmA== 46323\nVUk= 46324\nIHlvdXR1YmVycw== 46325\nIFBvc2l0aXZl 46326\nIHNvY2lvZQ== 46327\nIHNuYXRjaA== 46328\n6IOM 46329\nIHJlZnJlc2hlZA== 46330\nIG5vbWluYXRpb25z 46331\nIFBhdHQ= 46332\nIG9ic29sZXRl 46333\nIGRlbWnFnw== 46334\n5Y+k 46335\nb3JtdcWf 46336\nIOyGlOynge2eiA== 46337\nIGZsYQ== 46338\nIGNyYXppZXN0 46339\nIFppZQ== 46340\nIFTDug== 46341\nemVw 46342\naWNlbQ== 46343\nIOupi+yeiA== 46344\nIGN5bmljYWw= 46345\n44Gd44KT44Gq 46346\nIHRyZXNw 46347\nIGNyYXo= 46348\n1aXV 46349\nIG5lbGxl 46350\nIG1waA== 46351\nIE5lcmVk 46352\nIEtvYg== 46353\nIEVjaw== 46354\nqLjri4g= 46355\nSmFu 46356\nINCi0L7Qs9C00LA= 46357\nIGRlY2k= 46358\nIFZvZw== 46359\nIGJ1YmJsaW5n 46360\n6YCA 46361\nw7ph 46362\nIHByb2R1Y3Rvcw== 46363\naWJlcmFs 46364\nIHJlcGxpY2F0ZWQ= 46365\nIEltcHJvdmU= 46366\naWxsYXJ5 46367\nQ2hh 46368\nIHLDqWR1 46369\ng5DtlZjrqbQ= 46370\nIGNvbm5vdA== 46371\nIEtyaXQ= 46372\nINC00YPRhdC+0LI= 46373\nIHRyZWFkbWlsbA== 46374\nIFBX 46375\nINC30L7QstGD0YI= 46376\nIGNsYW1z 46377\nIGRyYWZ0aW5n 46378\nIDE5NTY= 46379\ndW50YQ== 46380\nIGV4cGVuZGl0dXJlcw== 46381\nIEhvb3Zlcg== 46382\nV09P 46383\n0YjQtdC1 46384\nIGRlZHVjdGlvbg== 46385\nbW9uYXJ5 46386\nIHJlY2li 46387\nIHBvdm8= 46388\nIOuNlOs= 46389\nIFBBTA== 46390\nIEJsb3c= 46391\nIHd5cA== 46392\nIGRlc3RhYw== 46393\nZGVhbA== 46394\nR3JhZW1l 46395\nIG7DqWNlc3NhaXJl 46396\nIGRhbW5lZA== 46397\nIDE5Mzg= 46398\nIOyLpOygnOuhnA== 46399\nIHRyb29w 46400\nIGluc2lnaHRmdWw= 46401\nIFRK 46402\nINC+0YHQsg== 46403\nIGZpZGVsaXR5 46404\nIFNraXA= 46405\nIE1heW8= 46406\n66ed 46407\nYXBwZQ== 46408\nIGJsYXM= 46409\nIFdZ 46410\nIEdO 46411\nY3Rhcg== 46412\nU3U= 46413\nIGN1ZW50 46414\naGV3cw== 46415\nIGNvcnBzZXM= 46416\nQWJz 46417\nIHdhc3Rld2F0ZXI= 46418\nIGNpZWs= 46419\nIE9udQ== 46420\nIGV4cGxvc2l2ZXM= 46421\nIGFybWE= 46422\nIFNURVBIQU4= 46423\ncG9saXRpaw== 46424\nIE9zYWth 46425\ndGHFgg== 46426\nIHlhcMSxeW9y 46427\nIGl6cXVpZXI= 46428\nIGJlbGV6YQ== 46429\nIFd5YXR0 46430\n5ZC4 46431\nIHN1aw== 46432\nIHNwZWNqYWw= 46433\nIGRhbmtl 46434\nd2hpc3RsZQ== 46435\nIGbDrXNpY2E= 46436\nIEhhcnJpZXQ= 46437\nIOyVhO2MjA== 46438\nIHdpbGxrb21tZW4= 46439\naXBpbmc= 46440\nINGB0LzQvtGC0YDQuNGC0LU= 46441\nINC80L7QttC10YjRjA== 46442\nIGluYWNjdXJhdGU= 46443\nIGFycm9nYW5jZQ== 46444\nIFJlbW8= 46445\nzrPOrA== 46446\nYXNzZWQ= 46447\nIGRlbGl2ZXJpZXM= 46448\nIHN0aW5reQ== 46449\nINC/0LXRgNC10LY= 46450\namF5 46451\nIHRyYW5zaXRpb25hbA== 46452\nIHJlcmU= 46453\nIE5HT3M= 46454\nIEFUTQ== 46455\n2K7Yqg== 46456\naW9sb2d5 46457\nINCy0LvQsNC0 46458\nIHNjaG1l 46459\nIFNoaW5l 46460\n7JWh 46461\ncGFudHM= 46462\nIHNlcmdl 46463\nIHNlbmhvcg== 46464\nIGFiZHVjdA== 46465\nIEJyeWFudA== 46466\nVkVT 46467\nIGF3YWtlbmVk 46468\nIExheg== 46469\ncm9wb2xpcw== 46470\nIExhbw== 46471\n6L6b6Ium 46472\nIHZpbGxh 46473\nIHN1bW1lcnM= 46474\nIGVudGhhbA== 46475\nIDE5NDk= 46476\nVmlh 46477\nIOyWtOyo 46478\nIHRlbmRvbg== 46479\nIHZpb2xldA== 46480\nIGludGVsbGVjdHVhbGx5 46481\nIGJvdW5jZWQ= 46482\nYXJhdXM= 46483\nIDE5MTk= 46484\nIHZyYWFn 46485\nIHNwZWw= 46486\nIFNjaHdhcg== 46487\nU2NvdHQ= 46488\nIEluZG8= 46489\nIOunnQ== 46490\nIGNhbm9uaWNhbA== 46491\nIElLRQ== 46492\nIHRoYXTDrXM= 46493\nIG1lbGxhbg== 46494\n5q+S 46495\naWdtYXQ= 46496\nQ291bGQ= 46497\nLi4uPyk= 46498\nIGZvYXJ0ZQ== 46499\nIEt1bWFy 46500\ncmVuZG8= 46501\nIMOpbMOp 46502\n4LQ= 46503\ndmFsdWF0aW9u 46504\nY2FzZXM= 46505\nIGludHVpdGl2ZWx5 46506\naG9uZw== 46507\nZXR0ZWQ= 46508\nIHNvdXZlbg== 46509\nIG1vcmI= 46510\nIGNvcnM= 46511\nIE5W 46512\nIEhhc2Fu 46513\n5oOF5Ya1 46514\naWV2ZWQ= 46515\nIOyngOq4iOydgA== 46516\nIGR1bXBsaW5n 46517\nIGNvbnRyw7RsZQ== 46518\nIGFtYmlndWl0eQ== 46519\n5qmf5pyD 46520\nIGNvZw== 46521\nIFNjcmlwdHVyZXM= 46522\nIGNhaQ== 46523\nIGJldmVy 46524\n5aSn5a626YO9 46525\nIGh1aXM= 46526\nIGFpbWU= 46527\nIGVya2zDpHJlbg== 46528\nIExN 46529\nIEZleQ== 46530\n6Zq+ 46531\n4K6x4K6k 46532\nIHN1cGVydmlzZWQ= 46533\nIGpld2U= 46534\nc3Bs 46535\nINGG0LXQvdGC0YA= 46536\nIGNvbGxpc2lvbnM= 46537\n2YTZgQ== 46538\nIEhvZ3dhcnRz 46539\nIER1cmhhbQ== 46540\n15XXow== 46541\nIHBob3NwaGF0ZQ== 46542\nIG92ZXJzZWU= 46543\nIGluc3BlY3Rpb25z 46544\nIGJyaW5j 46545\nIFphaw== 46546\nIHBheW9mZg== 46547\nIGNoYXVk 46548\nIEh1bmdlcg== 46549\nw6Nvcw== 46550\ndmly 46551\nIGZpYW5jZQ== 46552\nIGJvdWc= 46553\nbGl2ZWQ= 46554\nY3J5 46555\n5Zue5L6G 46556\nIGpvaW50bHk= 46557\nIGdpcmxmcmllbmRz 46558\nIE5leHVz 46559\npqzqsqDsirXri4jri6Q= 46560\nIEt3YW5n 46561\n5ZOI5ZuJ 46562\n5aeR 46563\nxYLEmQ== 46564\nIE5lZGVu 46565\naWVjZQ== 46566\nIGluc2VydGluZw== 46567\n5p+T 46568\nIE11bW15 46569\nIEdsb2Jl 46570\nIGxlZQ== 46571\nIGdlcm1hbg== 46572\nIGNyZWFtcw== 46573\nYWNobw== 46574\nIGNoxrBh 46575\nIEdhbGlsZQ== 46576\nIGbDvHJz 46577\nIGVzdGl2ZXI= 46578\nY2lkb3M= 46579\nQ2hyaXN0aWFu 46580\nIGxvcnNxdQ== 46581\nIGN1dGVzdA== 46582\ndmFsZQ== 46583\nINC60YDQtdC/ 46584\nIHdhcnk= 46585\nIHNsaWNpbmc= 46586\nIGVzcGVyYW5kbw== 46587\nIFZhbmRlcg== 46588\nIERlaXhh 46589\nIDE5NTQ= 46590\nIG3Ds3dpxIU= 46591\n0ZbRlA== 46592\nIHRvb2xpbmc= 46593\nIHJlc3Rvcg== 46594\nIHBvc2ljacOzbg== 46595\nIGludGVudGFy 46596\nIEFwYWNoZQ== 46597\nT1VM 46598\nINmI2Kg= 46599\nIG1hdGnDqHJl 46600\n44O844KT 46601\nIGxpbmVu 46602\nIGVzdHJhdMOpZw== 46603\nIE11dHRh 46604\n6aGv 46605\n6KGM5LqG 46606\nIHBhcnRpbmc= 46607\nIG1pbmltaXppbmc= 46608\nIGFwcHJlbmRyZQ== 46609\n5pyd 46610\nINCw0L3Qs9C70LjQuQ== 46611\nIERvbw== 46612\nIEZpcmVmb3g= 46613\nY8OzbW8= 46614\nIGdlb3BvbGl0 46615\nIG1ha2Fu 46616\nIG1vZ2VsaWpr 46617\nIM+AzrXPgc65 46618\nIGPhu6k= 46619\nIGluc3RhbGxlcg== 46620\nIGRpYnVq 46621\nIEhlYXRo 46622\nbG9vcA== 46623\nIEJyb2tlbg== 46624\nSFlVTg== 46625\nc2hlbGY= 46626\nIGZpemVy 46627\nIGVuaGFuY2Vz 46628\n5L6L44GI44Gw 46629\nINC00L7RgdGC0Lg= 46630\nIFBVQg== 46631\nIEtvbGxlZ2lu 46632\nIGF0dGFpbmVk 46633\nxL4= 46634\nIG1pc3RyZXNz 46635\nIE9mdGVudGltZXM= 46636\n157Xmded 46637\nIGJld2U= 46638\nIFNvcmE= 46639\ncmF1ZW4= 46640\nYmF1bQ== 46641\nIHJvbGxlcnM= 46642\nIG1lcmluZw== 46643\nIFBBQw== 46644\nINC90ZY= 46645\nIFLDqXB1YmxpcXVl 46646\nINGC0YDQsNCy 46647\nIFZhbmd1YXJk 46648\ndWNpb25lcw== 46649\nIOustOuMgA== 46650\nIGdvdXI= 46651\nr6Q= 46652\nIM+J 46653\nIHNhdW5h 46654\nIHBlaW5l 46655\nIFZhbGVyaWU= 46656\nIFNpa2g= 46657\nZmVuZGltaXo= 46658\nYmVybw== 46659\nINGH0Lg= 46660\nIGRvxZt3aWFk 46661\nIEV1cm9z 46662\nIGNvbW1lbnRhaXJlcw== 46663\nIHR3ZWFrcw== 46664\nIEZhc3Rlcg== 46665\nINGA0LDRgdC6 46666\nIHByb2dyZXNzaXZlbHk= 46667\nIEV1Y2g= 46668\nYm9ybw== 46669\nIEluZ3JlZA== 46670\nQ2Fw 46671\nIHVuY2hlY2s= 46672\nIOyYpOuluA== 46673\nIHdyZQ== 46674\nIEZU 46675\nw7ZydW5n 46676\nIG1lbW9yaXplZA== 46677\nIERpbm5lcg== 46678\nIFBoZXc= 46679\nb3VibA== 46680\nIHB1dGE= 46681\nIGFkbWl0cw== 46682\n0LXQt9C00LU= 46683\nb3BvZA== 46684\nIHBhbmRh 46685\nIGhpbmdlcw== 46686\nY2lwZQ== 46687\nIHRyYW5zYWN0 46688\nIHBvZGlh 46689\nIHBpY3M= 46690\nIGNyaXRlcmlvbg== 46691\nIE9yY2hlc3RyYQ== 46692\nIEJsb2c= 46693\nIHNvbGVtbg== 46694\nIFBpeGFy 46695\nVGhyZWU= 46696\nINCy0L3QuNC3 46697\nIFZvbHVudGU= 46698\nIFNhdmFnZQ== 46699\nIFBWQw== 46700\nIENhZg== 46701\nIHd5a29u 46702\nIGdyYWRlcnM= 46703\nIGNyb3VjaA== 46704\nIGNsaWNoZQ== 46705\nIHNveWJlYW5z 46706\nIE1VUg== 46707\nIEdvbnphbGV6 46708\nIE1pbWk= 46709\nIEJvbHNvbmFybw== 46710\nIGRpYXBocmFn 46711\nIGJpbGFuZw== 46712\n65CY64qU 46713\n6YKj5oiR5YCR 46714\nIHJlZ3VsYXRpbmc= 46715\nTWM= 46716\nSnVkZ2U= 46717\nINC90L7Qtg== 46718\nIGpha8SF 46719\naXRlc3Nl 46720\nIFdpag== 46721\nIGxhdGE= 46722\nZ3JvYW5pbmc= 46723\nUE9TSU5H 46724\nINeQ15XXqteV 46725\nIGhhZ2E= 46726\nIGdyb3VuZGluZw== 46727\nIHZpb2xlbnRseQ== 46728\nIHRpbGxz 46729\nIGVuZ2Fn 46730\nIEhvbGxvdw== 46731\nINC/0L7Qv9GD0LvRj9GA 46732\nIHdwcm93YWQ= 46733\nIHJlcGxhY2Vz 46734\nIGZsdW9yZXNjZW50 46735\ndXJnaWNhbA== 46736\naWdnbHk= 46737\nIFRyYWRpdGlvbmFs 46738\ndHRl 46739\nINmE2Yc= 46740\nIHBob3NwaG9ydXM= 46741\nIGFwcm9u 46742\nIFdhdGVycw== 46743\nIEt1bHR1cg== 46744\n0LDQstCw0Lk= 46745\nIG9saXZlcw== 46746\nINeU15DXnA== 46747\nIHRlaWx3ZWlzZQ== 46748\nIHNlbmNpbGw= 46749\nIHByZW5kcw== 46750\nIG5hcnJvd2Vy 46751\nIGrDpHR0ZQ== 46752\nIEluZm9ybWF0aW9uZW4= 46753\n7IOB7J20 46754\nIHN0YXJ2ZQ== 46755\nIGZyaWNr 46756\nIEJld2Vn 46757\n4KSy 46758\nIGRvbHBoaW4= 46759\nIExBVUdIVEVS 46760\nIElOVEVSVklF 46761\n5ZSJ 46762\nIHlhbmzEscWf 46763\nIHRvcnBlZG8= 46764\nIHNob3J0YWdlcw== 46765\n7J2065Oc 46766\nxLFsZMSx 46767\nIHBhd3M= 46768\nIG96b25l 46769\nIGN1bHRpdmF0ZWQ= 46770\nIEZvdA== 46771\nIG5vdG9y 46772\n0L3QvtC3 46773\nINC60L7RiA== 46774\nIHRvdWNoc2NyZWVu 46775\nIEFsbHk= 46776\n5pyA6L+R 46777\nIOunm+yeiOyWtOyalA== 46778\nINCh0LXRgA== 46779\nINCy0L/QvtC70L3QtQ== 46780\nIHBhcHJpa2E= 46781\nIER1c3Rpbg== 46782\nIGVmZWN0bw== 46783\nIG9waW5p 46784\nIG11dXQ= 46785\nIGjhu41j 46786\nIGludGVyamVjdA== 46787\nxJl0 46788\nIGJ1dHRz 46789\ndXJleg== 46790\nIFBpa2U= 46791\nIEhvaw== 46792\nIEd1aW5lYQ== 46793\nIENhdGhlZHJhbA== 46794\nIDE0MDA= 46795\nQ3Jh 46796\nKyw= 46797\n66eb 46798\ns7Trj4TroZ0= 46799\nYWJ5cmlu 46800\nIHZpZGVvZw== 46801\nINC+0YDRg9C2 46802\nIHXFvg== 46803\nIGJ1c2NhbmRv 46804\nIEFzc2lzdGFuY2U= 46805\n6Zm9 46806\nIG1lbGhvcmVz 46807\n7KG0 46808\nIOuBvA== 46809\nIFJK 46810\nINiq2YU= 46811\nIG9taW4= 46812\nIG1vdG9yY3ljbGVz 46813\nIFNhcHA= 46814\nIHN1cHBseWluZw== 46815\nIEFsZ3Vu 46816\nIGFlcm9zcGFjZQ== 46817\n16LXnA== 46818\nb2NjdXA= 46819\nbGVpc3Q= 46820\nIOqxsOuKlA== 46821\nIGNvbXBsZXRh 46822\nYnJlcw== 46823\nISg= 46824\nINCf0YDQtdC0 46825\nIGRpc2FkdmFudGFnZWQ= 46826\nIEF0dGVuZA== 46827\nIEp1ZGFo 46828\n4buLY2g= 46829\neWxlbmU= 46830\nYWN0bHk= 46831\nIHNldHVwcw== 46832\nIGFtbW9uaWE= 46833\nIFNjaHdlaXo= 46834\nIFNoYW1l 46835\nIGJhbmRl 46836\nIEZ1ZWw= 46837\nIHRyb3VibGVzb21l 46838\nIG51bWVybw== 46839\nIE1PTQ== 46840\nINC/0YDQtdC00LvQsNCz 46841\nbWVudGlvbmVk 46842\nINCx0L7Qu9GM0YjQvtC1 46843\nIFZpa3Rvcg== 46844\nIFN0eWxlcw== 46845\nIGNydWNpZmllZA== 46846\ncnVjdHVyZWQ= 46847\nZW52aXJvbg== 46848\nIG1vcmFscw== 46849\nIG1lZGl0YXRpbmc= 46850\nIGF4aWFs 46851\naXNhbmNl 46852\nIEFic3Q= 46853\nR3JlZW4= 46854\nIOqxtOw= 46855\nIHF1YWRyYW50 46856\nIHBlcmdp 46857\nIGNhbWVyYW1hbg== 46858\nIFNlcXU= 46859\nIHBhdXNlZA== 46860\nIExhdWdoaW5n 46861\n6reA 46862\nPy4u 46863\nIMW7ZQ== 46864\nIHBlcm1pdGly 46865\nIGRldGVjdG9ycw== 46866\nIEhVRA== 46867\nYXZhbA== 46868\nIOyXrOq4sOq5jOyngA== 46869\nIGh1YnM= 46870\nIGJlc3RpbW10 46871\nINCx0YPQtNC10YLQtQ== 46872\nSU5URVJQT1NJTkc= 46873\nIHRlbmdhbg== 46874\nIGNyYXZl 46875\nIEJ1bmRlc3JlZ2llcnVuZw== 46876\nIEJsb29keQ== 46877\nIHVzYWJpbGl0eQ== 46878\nIEVhcw== 46879\nIMSR4buZbmc= 46880\nIDE5NTU= 46881\nIGtyaWVnZW4= 46882\nIGhhYml0dWFs 46883\nIGVzc2VudGlhbHM= 46884\ncmltaW5hbA== 46885\nIHJvb21tYXRlcw== 46886\n6YKj5bCx 46887\nINC/0LXRgNC10YXQvtC0 46888\nIG5naGk= 46889\nIG1lbmluZw== 46890\nIFN5bXBob255 46891\nIEh1Zw== 46892\nYWdnaQ== 46893\nIHdpZWQ= 46894\nIG1pdGFk 46895\n44Gj44Gm44GE44GG 46896\ndGVlbnRo 46897\naWRhxIc= 46898\nU2F2ZQ== 46899\nIHJvYmnEhw== 46900\nIGJvdW5jZXM= 46901\nsJbsl5A= 46902\nc3RhcnM= 46903\nIHByYWdtYXRpYw== 46904\nIGNvZ25pdGlvbg== 46905\nIHdyYXBwZXI= 46906\nIHdhcnRlbg== 46907\nYWRo 46908\nIHBlbnNh 46909\nIEhlcnR6 46910\nIG7Emw== 46911\nIFJlaWQ= 46912\nIFBDcw== 46913\nIE1vbGU= 46914\nIC4uLi4u 46915\nIHByZWNpbw== 46916\nIENoYW1waW9uc2hpcHM= 46917\n6rCA6529 46918\nIHbDqXI= 46919\nIGNvcnJpZG9ycw== 46920\nIEVsZWN0cm9uaWM= 46921\nU2w= 46922\nINCw0LvQtQ== 46923\nIG92ZXJ0aHJvdw== 46924\nIGthYnVs 46925\nIFJFUw== 46926\nIEN5YmVycHVuaw== 46927\n0L7Qs9C+0LQ= 46928\nINCd0LDQsg== 46929\nIHdhbg== 46930\nIG1hbmlmZXN0YXRpb25z 46931\nIGN1YWxlcw== 46932\nIFdpc2U= 46933\nIEzDtnN1bmc= 46934\nIGV4Zm9s 46935\nIGVhcm5z 46936\n0YPRgdGC0LjRgtGM 46937\nIHNhcHA= 46938\nIEJyYXVu 46939\nIEJSQU5ET04= 46940\n7LmZ 46941\nIHNhbm8= 46942\nIEZFTA== 46943\n0YvQstCw0LnRgtC10YHRjA== 46944\n0L7QttC00LXQvdC40Y8= 46945\nIHNld24= 46946\nRnVu 46947\nIHJlY2lwcm9jYWw= 46948\nIGV4cGFuc2l2ZQ== 46949\nIFRyYWZmaWM= 46950\nIGt0w7NyZWdv 46951\nINmI2LM= 46952\n5pil 46953\nIOu5qA== 46954\ncHJvdmU= 46955\naWdhcmU= 46956\nIGxvaA== 46957\n2KfYtg== 46958\nSG9wZQ== 46959\nIGRldm90ZWVz 46960\nIEdvbQ== 46961\nIHN0ZWFscw== 46962\nIFVtcw== 46963\nIFR3aWNl 46964\n44Ky 46965\naXlpbQ== 46966\nIHJoeXRobWlj 46967\nIFZvcnRl 46968\nIHByZWZpeA== 46969\nb21pbmF0aW9u 46970\nIGRhdG8= 46971\nIGN1c3RhcmQ= 46972\nIFZPSUNF 46973\n5bee 46974\nIG1lbnk= 46975\naXN0b3Jz 46976\nIO2YkQ== 46977\nIOyCtOyVhA== 46978\nIO2DhA== 46979\nIGtvcnQ= 46980\nIGFiYQ== 46981\nIFZlcmE= 46982\nZXB5 46983\nIOy5tOuplOudvA== 46984\nIHN1Ym1lcmdlZA== 46985\nIENsb2Nr 46986\nIHRodW1ibmFpbHM= 46987\nIGJvYXN0 46988\nIEZhcmU= 46989\nISFd 46990\nIMWbbQ== 46991\nIGthaWtraQ== 46992\nIFRlY2hub2xvZ2llcw== 46993\n7Jm4 46994\n44OS 46995\n0LjRgtCw0Lk= 46996\n5bCP5pmC 46997\nINCw0YI= 46998\nIGtub2Jz 46999\nIHJlaWNodA== 47000\nxrDhu6NuZw== 47001\nZ2xpbw== 47002\nIOunm+ydtA== 47003\n6rCQ7J2E 47004\nIGpvdGth 47005\nIEhhbmR5 47006\nIEhhYmVu 47007\nbm91cw== 47008\nIGlubGFuZA== 47009\nIGFtYXpvbg== 47010\naG9vdGluZw== 47011\nU0w= 47012\nIGxlaXN0ZW4= 47013\nfiI= 47014\nIHByb3Zva2U= 47015\nIFR3aXN0 47016\nINeR15c= 47017\nIGRlcGFydGVk 47018\n6rCc66W8 47019\nIGtvbnNl 47020\nIENhcnd5bg== 47021\n7ZWY7Iug 47022\naWRlbnRhbA== 47023\nRVNDTw== 47024\nIHR0ZW9rYm9ra2k= 47025\nIGRpemVuZG8= 47026\n57e0 47027\nxLFuZGFraQ== 47028\naW1hc3U= 47029\nYWZhcg== 47030\nIGxhbmRmaWxs 47031\nIGNvcnJlY3Rpbmc= 47032\nIGNsZWFycw== 47033\nIE51bW1lcg== 47034\nSEFN 47035\nIGNhcnRyaWRnZXM= 47036\nIERpZXNlbA== 47037\ncGFjZWQ= 47038\nIG9ibGl2 47039\nIG1veWVucw== 47040\nIFNpbm5l 47041\nIFByZWlz 47042\naWxpeg== 47043\nINGB0LzQvtC2 47044\nIGJyb2FkZW4= 47045\n5LuW5piv 47046\neGVz 47047\nIGNhcmJvaHlkcmF0ZQ== 47048\n7Zi5 47049\nc2Vvaw== 47050\nIGVjaG9lcw== 47051\nIGNlc3M= 47052\n67CU 47053\nINCx0LjQt9C90LXRgQ== 47054\nIGxsYW1hZG8= 47055\nIGVzc2VudA== 47056\nIOydvOuwmA== 47057\nIEFpcmVz 47058\ncGhlbg== 47059\nIHplYnJh 47060\nIHN5bWJvbGlzbQ== 47061\nT25jZQ== 47062\nIHJhY2tz 47063\nIEthZmth 47064\nINGB0LXRgNGM0LXQtw== 47065\nIHNpbm4= 47066\ncGljaW91cw== 47067\na2Fh 47068\nIG1vdGhlcmZ1Y2tlcg== 47069\nIGFwcHJlbnRpY2VzaGlw 47070\nIHJwbQ== 47071\nIHRheGF0aW9u 47072\nIGZ1cnJ5 47073\nIFNhY3JlZA== 47074\nINGA0LDQt9C8 47075\ncG9yYQ== 47076\nZW5nZXM= 47077\nIO2XiOs= 47078\nINGB0LjQvQ== 47079\nIHNhbml0aXplcg== 47080\nIGNyaW5nZQ== 47081\nIFNjYQ== 47082\n0L7Rh9C90L4= 47083\nIG9mZXJl 47084\nIG1lbG9kaWVz 47085\nIFZlbHZldA== 47086\nIElocmVy 47087\nIEh5YnJpZA== 47088\nIEdpb3Y= 47089\nIGlyZ2VuZHdhcw== 47090\nIGRlcGVuZGU= 47091\nIFVzZXJz 47092\nIGh1bXA= 47093\nZHJpdmluZw== 47094\nIHNm 47095\nIHJ1dGhsZXNz 47096\n4LmA4LiE 47097\nIGxlbW9ucw== 47098\nIGbDtnJldA== 47099\nIE9q 47100\nINC80LDQvNCw 47101\nIGludGVycGVyc29uYWw= 47102\nIGdldg== 47103\nIGFibm9ybQ== 47104\n0LjRgdC7 47105\nINC40L3QtA== 47106\nIGtvbnRyb2xs 47107\nIHJlZ3Jlcw== 47108\nIGxlZGdl 47109\nIGVyesOkaGx0 47110\nIFRhY3Q= 47111\nIGFycml2w6k= 47112\nIHN1YnN0YW50aXZl 47113\nIHNwb29uZnVs 47114\nendpc2NoZW4= 47115\nb29vb28= 47116\nIGNvbnRlbmlkbw== 47117\nIGJlc2w= 47118\n4buDbQ== 47119\na3Rlbg== 47120\nSmFtaWU= 47121\nIHNhbmR5 47122\n5LiN5ZCM 47123\n4os= 47124\nIHBhc2U= 47125\nIGRldHRl 47126\nIEJlbGdpYW4= 47127\n6rCc6w== 47128\ndWxhcmVz 47129\ncnVk 47130\naWdvcg== 47131\nIO2MrOs= 47132\nIHJlbWVkaWVz 47133\nIGJsYXN0aW5n 47134\nIFNpY2g= 47135\nINC+0LbQuNC0 47136\nIG1vbnN0cg== 47137\nIG1hbmlmb2xk 47138\nIGdsYXViZW4= 47139\nIEVTVA== 47140\nIHN0cmVhbWxpbmU= 47141\nIGxvYmJ5aW5n 47142\nIEdvdGhpYw== 47143\ndG9pcmU= 47144\nLi4n 47145\nIGTDqW1vY3I= 47146\nINC90LDQsdC70Y7QtA== 47147\nIHdzcMOzbA== 47148\nIGN6xJnFm8SH 47149\n5LiL6Z2i 47150\naXPDqXM= 47151\nZ2FuZ2Vu 47152\nIGJlenBpZQ== 47153\ncmVtbGlu 47154\n6rCd 47155\nU3RpbGw= 47156\nIHJlc2lkZXM= 47157\nIGdlbGVjZWs= 47158\nIHTDqWzDqXBob25l 47159\nIHBld24= 47160\nIGxlb3BhcmQ= 47161\nIGNvbXBsaW1lbnRhcnk= 47162\nIGNyaWI= 47163\nIEFuaW1hbHM= 47164\nIGdlaWw= 47165\nZXNzZWw= 47166\nIGdhcmRlcg== 47167\nIGNhdGNoeQ== 47168\n5qi5 47169\nIEV0cw== 47170\nIENvbW1lcmNpYWw= 47171\nIERFTk5JUw== 47172\nIENvb3JkaW5hdG9y 47173\nIEFiaWdhaWw= 47174\nZmZmZmZm 47175\n4bqlcA== 47176\nIHBlcXVlw7Fh 47177\nIGluamVjdGlvbnM= 47178\nY2VrdA== 47179\nIHBoaWxhbnRocm9weQ== 47180\nIHB1Y2s= 47181\nIGNlbGVicmF0ZXM= 47182\nIER1bms= 47183\nIERsYXRlZ28= 47184\n44G+44Gg 47185\nzrTOrg== 47186\nZ3JhZHVhdGU= 47187\nIE1vYmls 47188\ndGlsbA== 47189\nYWNhbQ== 47190\nIHlvbGtz 47191\nIHRhbmdsZWQ= 47192\nIG1hbmlhYw== 47193\nIG9ibGlnZWQ= 47194\nIExhaW5r 47195\nIHZlcmRlcg== 47196\nIERhbW9u 47197\nIG11dGFudA== 47198\nIGhvcHBpbmc= 47199\nIHJlaW5z 47200\nIGludmVydGVy 47201\nIGNvbnRlbXB0 47202\n16DXoQ== 47203\nbGVhcm5pbmc= 47204\nTWlzcw== 47205\nINCT0L7RgQ== 47206\nIE1leWVy 47207\n6ruY7ISc 47208\n6aOO 47209\n15XXoNeZ150= 47210\nYXNraW5n 47211\nIHRyaW1taW5n 47212\nIHRyZWFzdXJ5 47213\nIHNlbnRl 47214\nQXVzdA== 47215\nIFVudGVyc3TDvHR6dW5n 47216\nIENvbWVkeQ== 47217\nIEFuYWtpbg== 47218\n6bk= 47219\n0YDRg9GC 47220\nIEhhcmk= 47221\nb2dyYXBoZXJz 47222\nIG9hdG1lYWw= 47223\nIEJvdHM= 47224\n5LiN5LqG 47225\nINC/0LDQu9GM 47226\nIGFja25vd2xlZGdlbWVudA== 47227\neGlj 47228\nIOq0gOyLrA== 47229\nZ2FzcGluZw== 47230\nIOOBlQ== 47231\nIHRlcnJhY2U= 47232\nIG9ybmFtZW50cw== 47233\nIE1FUg== 47234\nY29tbWl0dGVl 47235\nIOyXhuyKteuLiOuLpA== 47236\nIHJpag== 47237\n6bM= 47238\n16bXnQ== 47239\nbGVtZQ== 47240\nIGxpYmVydGllcw== 47241\nIGZlbGxhcw== 47242\nIENvcHBlcg== 47243\nYmVuY2g= 47244\nIElkZWE= 47245\n4buNbg== 47246\n0YjQsA== 47247\nIHZlcnNpw7Nu 47248\nz4TOv8+N 47249\nINCc0Lg= 47250\nINC/0YDQuNC70L7Qtg== 47251\nIGJveGVy 47252\nIFRhbm5lcg== 47253\nIE1veQ== 47254\n7LmY64qU 47255\nVGhy 47256\nIHRpbmhhbQ== 47257\nIHBvbGlzaGluZw== 47258\nIGNvbnNlcXVlbnRseQ== 47259\nIGFtZW5pdGllcw== 47260\nIEtJ 47261\nIEdSRUVO 47262\nIEZyYW5raWU= 47263\n0L3QuNGC 47264\naXR0ZWw= 47265\n0YHQutC+0LU= 47266\ndXJzZWQ= 47267\nIHVwYnJpbmdpbmc= 47268\nIHRo4bup 47269\nIOyLneycvOuhnA== 47270\nIHdoaW0= 47271\nIGNoaW5lc2U= 47272\nY29uZmlkZW5jZQ== 47273\nIEplZGVy 47274\n44Gq44Gu44Gn 47275\nYWpjaWU= 47276\nIFRvdXM= 47277\nIFBvd2Vycw== 47278\n4burYQ== 47279\nb3RoZXJtYWw= 47280\nINCy0YvRiNC1 47281\ncmFsZQ== 47282\n2KfYrg== 47283\nIOyngOybkA== 47284\nIMOpcGlzb2Rl 47285\nIHN1bHBo 47286\nIGVuY2FyYQ== 47287\na3JhZnQ= 47288\nYWxhcsSx 47289\nIENvbWVz 47290\nIGRpdnVs 47291\nIFJ1ZG9scGg= 47292\nIE11c2U= 47293\nIHV0ZW5z 47294\nIOyekOyjvA== 47295\nIHBhbmE= 47296\nIFZlZ2V0YQ== 47297\nIFBIUA== 47298\nIE5TQQ== 47299\nZW50aW4= 47300\nIENhcm5lZ2ll 47301\n2KfZig== 47302\nacSZY3k= 47303\nSGFycnk= 47304\nIGbEsXI= 47305\n0KHQvw== 47306\nIGdsYWRseQ== 47307\nIGF2ZXJhZ2luZw== 47308\n7ZWY6rKg7Iq164uI64uk 47309\n0LvRj9GO0YLRgdGP 47310\nINCc0LXQvdGP 47311\nIHF1b3RhdGlvbg== 47312\ncmlyZXM= 47313\naXRjaGVucw== 47314\nYXllZA== 47315\nIHVuYXR0 47316\nIFBlcmV6 47317\nINC+0YLQvNC10YI= 47318\nIHRhY3RpbGU= 47319\nIEV1aA== 47320\naXNpbmk= 47321\nYnVo 47322\nIGhhdMSxcg== 47323\nIOyeiOycvA== 47324\nIHBvbGljeW1ha2Vycw== 47325\ns7TshLjsmpQ= 47326\nYWPEsQ== 47327\nIM66zrk= 47328\nIHJlZ2lzdGVyaW5n 47329\ncmV0bw== 47330\nIFNwcmlua2xl 47331\nIEdyYW1teQ== 47332\nYXh0ZXI= 47333\nINCx0Lg= 47334\nIHNpdHRlcg== 47335\nIHByZWRpYw== 47336\nIHRoaW5seQ== 47337\nIHN0cnVt 47338\nIGFnZ3Jhdg== 47339\nIGFoYQ== 47340\n2LHYrA== 47341\nbWVsbG93 47342\nIGNvbnN0YW50ZQ== 47343\nIExhdXQ= 47344\naXN0b24= 47345\nIHRyYW5zaXRpb25lZA== 47346\nIENhbWJvZGlh 47347\n44GE44GN44G+44GZ 47348\n6Lef5aSn5a62 47349\nYXJ0ZWQ= 47350\nIG1pc2Y= 47351\nIFB1bmt0ZQ== 47352\njOuToA== 47353\nIHRyZW1ibGluZw== 47354\nIGdlc3Bhbm50 47355\nINi52YTZitmH 47356\nINC90LjQutCw0LrQuNGF 47357\nIOu2gOuTnOs= 47358\nINGA0LDQt9Cy0LjRgg== 47359\nIGl0Y2h5 47360\nIGNpZW50bw== 47361\nIHBsYWlucw== 47362\nIGtpdHRlbnM= 47363\nIGJhY2tsb2c= 47364\nIFByZXNpZGluZw== 47365\ncHRh 47366\nIGhhdm9j 47367\nIERhcnJpbg== 47368\nINCb0Y7QsQ== 47369\nIHNlZ3JlZ2F0ZWQ= 47370\nIGdoZXR0bw== 47371\nIGVybGVidA== 47372\nIGRydWdpZWo= 47373\nIFNpeHQ= 47374\n5Y+D 47375\n4Lij4Liw 47376\ndWVuY2lh 47377\nIO2VmOq4sA== 47378\nIOuGjQ== 47379\nIHJvYmk= 47380\nIHBpb25lZXJz 47381\nIG1pbGxpYXJkcw== 47382\nIFdpdGNoZXI= 47383\nIOustOyXhw== 47384\nb3Jybw== 47385\nbWFzcw== 47386\nIGRpdmVyZ2VuY2U= 47387\nIFJpdmVyYQ== 47388\nIE5vb2RsZXM= 47389\nIGVuZHJvaXQ= 47390\nIEtvc3Rlbg== 47391\nINC00YDRg9Cz0LA= 47392\nIG3DrW5pbW8= 47393\nIEthemFraHN0YW4= 47394\n2KrZhw== 47395\nINCy0L7Qt9C00YM= 47396\nIGdlc2NocmllYmVu 47397\nIE5pbA== 47398\n0YHQutC4 47399\nIEZyw7xo 47400\nIGJldmVyYWdlcw== 47401\n5rqQ 47402\nIEdvbg== 47403\n5pio 47404\nQXJpbg== 47405\nIEludHJv 47406\nb2NhbHlwdGlj 47407\nIGV4aGF1c3Rpb24= 47408\nIFN0YXR1cw== 47409\nIEJhdHRlcnk= 47410\nw6lzeg== 47411\no7zr 47412\nYWlyeQ== 47413\nIOuztOyXrOuTnOs= 47414\nIGRpc3Bhcml0eQ== 47415\n2Yw= 47416\nIFR1Y3Nvbg== 47417\nIGJyaWdodGx5 47418\ncHJvYmxlbQ== 47419\nIGJpb21hc3M= 47420\n6ZmN 47421\np4k= 47422\nIGh1cmRsZQ== 47423\nIHdhdmVsZW5ndGhz 47424\nIDw8 47425\nIHRlYW1lZA== 47426\nRkZGRg== 47427\nIFNsaW0= 47428\nb21pYWw= 47429\nIHVudmVpbGVk 47430\nIFZlcmVpbg== 47431\n2YLYtw== 47432\nZXN0cnk= 47433\nIGNsw6Fz 47434\nIGNoZWRkYXI= 47435\nIGFjY3VzaW5n 47436\nIFNjaWVudGlmaWM= 47437\nINCx0YPQtNC1 47438\nIEN5cnVz 47439\nzrXPhM61 47440\nhpPqs6A= 47441\nIOuzhA== 47442\nIGN1cmQ= 47443\nIHJlZmVycmFscw== 47444\nc2hpZnQ= 47445\n5Y2V 47446\nbmlrw7N3 47447\nIG1pZXI= 47448\nIGNvbmZyb250aW5n 47449\n6rKD64+E 47450\nYXds 47451\nIHRyeWlu 47452\nIOq3uOuemOyalA== 47453\nIGNoaWFy 47454\nIOyYpOuKmOuPhA== 47455\n5pS/5rK7 47456\nZXNxdWU= 47457\nIG1pc21vcw== 47458\nIFNoYWs= 47459\nIHNvY2lhdXg= 47460\nIHBpxZ8= 47461\nIGtpxZ9p 47462\nIGN5YW4= 47463\naGF5 47464\nYmV3 47465\nYm9k 47466\nIM65 47467\nIE1haW5seQ== 47468\n0Y7RgtGM 47469\naGFiaXR1ZGU= 47470\nINGB0L/QvtC60L7QuQ== 47471\n6Lef5oiR 47472\nIHByZWNvbg== 47473\nIE1hbmR5 47474\n8J+kow== 47475\naWxsb3M= 47476\nIGdydXBw 47477\nIGNydW1ibGU= 47478\nIGNvbnN0cnVjdG9y 47479\nZXJ2aWNlcw== 47480\nIGxpZ2h0aG91c2U= 47481\nIENvbmNlcHQ= 47482\n0LDQvdGC0Lg= 47483\nYWx0cm8= 47484\naG9wZQ== 47485\nIEFsbGVn 47486\n7Ja066W8 47487\ncGllY2Vz 47488\nb3VudGVy 47489\nIO2VmOuLiOq5jA== 47490\nIOyduO2EsOs= 47491\nIHbDqXJpdGFibGU= 47492\nIHRocmVhZGVk 47493\nYmxpbmQ= 47494\ngpjrnbw= 47495\nIHRyYXlz 47496\nIEVkaXNvbg== 47497\nIMOWeg== 47498\nIFN0ZXZpZQ== 47499\nIGxlbmRlcg== 47500\nIGJyaWdhZGU= 47501\nIGRldXRzY2hl 47502\nbXVmZmxlZA== 47503\nYmFydA== 47504\nIGluc2FuaXR5 47505\nIHNhdnZ5 47506\nIHNlbnNhdGlvbmFs 47507\nIGRlcmVjaG9z 47508\nIE1Y 47509\nINC/0YDQtdC/ 47510\nIHRocmVhdGVucw== 47511\nIHJlYWx0w6A= 47512\nIGluZGljYXRpdmU= 47513\nIGNob3Bz 47514\nIGJlbmVmaXRpbmc= 47515\nIFZlcm5vbg== 47516\nIFN0cmFuZA== 47517\nbnVu 47518\ncXVlbnRseQ== 47519\nMTAx 47520\nIGVlbA== 47521\n7IiZ 47522\ncmludHM= 47523\nINmF2LM= 47524\nINio2K8= 47525\nINC/0L7RgdGC0YDQvg== 47526\nIHlhcG3EscWf 47527\nIG9sbWFzxLE= 47528\nIGllZGVyZWVu 47529\nb2zDqQ== 47530\na2Vm 47531\nIOuwnOyDnQ== 47532\nIHJhaW5lZA== 47533\nIGFsbWlnaHR5 47534\nINCy0YvQtA== 47535\nIENQUg== 47536\nRnJl 47537\nIGluaGFiaXRlZA== 47538\nIGFyYmV0cw== 47539\nIGFraW4= 47540\n0LDRgdGC0LI= 47541\ndmFuaWE= 47542\nIGjDpHVmaWc= 47543\nIE1hdHRl 47544\nc29ycnk= 47545\nSmVubnk= 47546\nINCz0YDQsNC0 47547\nIHdoaXQ= 47548\nIGJyb2tlcnM= 47549\n5a+f 47550\nIGhpbmU= 47551\nYXN0ZW4= 47552\nINCz0YDRgw== 47553\nTUI= 47554\nIFBSSQ== 47555\nU2Fi 47556\nIHdyZXN0bGVy 47557\nIGZhY2lsaXRhdGluZw== 47558\nIGVoa8Ok 47559\nIENyZWQ= 47560\nIDEyNw== 47561\nIG5vdGhpbg== 47562\nIG1hbmRhdGVk 47563\n5a+M 47564\n0YPRgtGB0YLQsg== 47565\nRnJhbms= 47566\nIHdvcnM= 47567\nIGR6aWXFhA== 47568\nIFVuZGVyZ3JvdW5k 47569\nIHpuYWpkdQ== 47570\nIELDpA== 47571\nIFByaW56aXA= 47572\n0LDRgtC10LvQtdC5 47573\nIHZldGVyaW5hcg== 47574\nIHNwbGVuZGlk 47575\nIHJvenA= 47576\nIHBzeWNob3BhdGg= 47577\naWdvbg== 47578\nIGhvcHM= 47579\nIGPhuqdu 47580\nIFhpYW4= 47581\nIHRyb2lzacOobWU= 47582\nIHByb2R1Y3Rv 47583\nIGRlxJ9lcg== 47584\nIENvbnRpbnVpbmc= 47585\n0LjQstCw0Ls= 47586\nY8Sxaw== 47587\nIG1vaXN0dXJpemVy 47588\nV2hpdGU= 47589\nIHNpaXM= 47590\nIEV2ZXJlc3Q= 47591\naWVuY2Vk 47592\nIGPhuqNt 47593\nIEphcG9u 47594\ntOyghA== 47595\nIHRlbsOtYW4= 47596\nIGVuY2FudGE= 47597\nTW0= 47598\nIGRyb3Bkb3du 47599\nIEl5YQ== 47600\ns7TrqbQ= 47601\nIHdvcmRpbmc= 47602\nIFNxdWVlemU= 47603\nIE1hcGxl 47604\nIGNsYXJpZmllZA== 47605\nIE11bmljaXA= 47606\nIFJvdWdl 47607\nIE5pY2tp 47608\nIEdvbw== 47609\ndm9sdA== 47610\ndGVr 47611\nZmVjdHVyZQ== 47612\nZnJlZA== 47613\nYXJyaXZl 47614\n44O844GE 47615\ndGV6 47616\nRXA= 47617\nIG9icmFz 47618\nIFZJRA== 47619\nIFJpdg== 47620\nIE1vZGk= 47621\naWJl 47622\nIGFjb250ZWNlbmRv 47623\nIGltaXRhdGlvbg== 47624\nIGNhbW91ZmxhZ2U= 47625\nIHNwYW5uaW5n 47626\nIFNFQ1JFVA== 47627\nIE9yZW8= 47628\n7IaM66as 47629\nIGh1bmNo 47630\nIGNhxYJl 47631\nIHNwb250YW5lb3VzbHk= 47632\nIFBlcmQ= 47633\nIGV0YXA= 47634\nIEhvbGU= 47635\nIERpc2FiaWxpdHk= 47636\nIGFmdGVybGlmZQ== 47637\n5oGp 47638\nIHRlc3RpZmllZA== 47639\nIHByZXN1cA== 47640\nIHBldHJvbGV1bQ== 47641\nIGNvbnRyYXJpbw== 47642\nIEFzc2Vzc21lbnQ= 47643\nxJ9sdQ== 47644\nIHBlc3Rz 47645\nIGRpbGln 47646\nINCy0YHRgtGA0LXRgg== 47647\nIGNvbnPDqXF1 47648\nIGNhbm5vbnM= 47649\nIGNhbm9l 47650\nIE1pbGU= 47651\nIGNpdG95 47652\nIGJlZ2dlZA== 47653\nIE1pbm5pZQ== 47654\nxYJ5Y2g= 47655\nIHByaW5jaXBl 47656\nz4DPjM69 47657\nbW5pZWo= 47658\nIHdlcnQ= 47659\nIOuLpOuTpA== 47660\nYW5zZQ== 47661\nIHVuY2xlcw== 47662\nIHByb3ZvY2F0aXZl 47663\nIGludGVyc2VjdGlvbnM= 47664\nIGRlbW9jcmF0cw== 47665\nIEp1bGl1cw== 47666\n0LjQvdC60Lg= 47667\neWd1c2Fs 47668\nINec15U= 47669\nIGdqb3JkZQ== 47670\nIGdhc2tldA== 47671\nIEJvY2s= 47672\nIMSwbg== 47673\nYnJlYXQ= 47674\nIEVxdWl0eQ== 47675\nYXJkxLE= 47676\nINC60LDQvdCw0LvQtQ== 47677\nINC00L3QtdC5 47678\nIHThu5tp 47679\nIGZpeHR1cmU= 47680\nIGFidXNlcw== 47681\nIHZheWE= 47682\nIG91dmVydA== 47683\nIG11bHRpY3VsdHVyYWw= 47684\nIGNvbnRleHRv 47685\nIFNlc2FtZQ== 47686\nIGTDqXBs 47687\nIGNvbnNvbW0= 47688\nIFBhcnRl 47689\nIHBlbQ== 47690\nIENvbmFu 47691\nINCx0ZbQu9GM 47692\nIHBlcnN1YWRlZA== 47693\nIGRyYWlucw== 47694\nTW9v 47695\nRk9SRQ== 47696\nINCx0LDRgg== 47697\nIGZvZA== 47698\nIFByb2R1Y3Rz 47699\n7KeE7Kec 47700\nICJb 47701\nIFdpY2s= 47702\nIE5hcnV0bw== 47703\n0L3QsNC70Lg= 47704\ncnl3 47705\nIGxvZGdl 47706\nIGluaA== 47707\nIHZvbnRhZGU= 47708\nIGRpag== 47709\nIEplc8O6cw== 47710\nTG9va2luZw== 47711\nIGZvcmVhcm0= 47712\nIEludGVncmF0aW9u 47713\nIEhBUlJJUw== 47714\nIHRvb2xiYXI= 47715\nbGVhZGVy 47716\nIHNlbGRvbQ== 47717\nINCx0YDQvtGB 47718\nIEtvb2s= 47719\n0L7QvdC0 47720\nIG1vbm9wb2w= 47721\nIG1pbGxldA== 47722\nIGxpcmE= 47723\nIEFzaWFucw== 47724\nIDE4OTA= 47725\nY2nEn2lt 47726\nIGVkZW4= 47727\nIElLRUE= 47728\nIE5laWdoYm9y 47729\nIEthenV5YQ== 47730\nw7xk 47731\nIHBzeWNoZWRlbA== 47732\nIGVudmlzaW9uZWQ= 47733\n5Z2X 47734\nIO+3uw== 47735\nIHd1bmRlcg== 47736\nIEJ1bGdhcmlh 47737\nQnJpZA== 47738\nIG1hcnJvdw== 47739\nIGRlcGljdGlvbg== 47740\nIFRpbg== 47741\nIFBoYXJpc2U= 47742\nIGVpbnppZ2U= 47743\nIGJsaW5kbHk= 47744\n44Gb44Gm 47745\nIGRlZmVucw== 47746\nRGlyZQ== 47747\nIHZpYnJhdGluZw== 47748\nIHRyb2xscw== 47749\nIGRpc3Jlc3BlY3RmdWw= 47750\nIHdvZA== 47751\nIHN0aW11bGk= 47752\nIGNyZWVwaW5n 47753\nIGNsYWlyZW1lbnQ= 47754\nIHNjYXJpZXN0 47755\nIGTDqWNvdXZyaXI= 47756\nIDEwNA== 47757\nINCy0LXRgNGF 47758\nIMWCYXQ= 47759\nIHLDs8W8bmU= 47760\nIGJhcmxleQ== 47761\nIFJlcGw= 47762\nIFR3ZQ== 47763\na2tl 47764\nIOOBneOCjA== 47765\nIFJlZG1p 47766\nIE1ldHJvaWQ= 47767\nIM6uz4TOsc69 47768\nQ2hlY2s= 47769\nIFNFTg== 47770\nIGlkbw== 47771\n0YLQvtGA0LjQuA== 47772\nw7Nw 47773\nVU5LTk9XTg== 47774\nIMOkbmRlcm4= 47775\nIEp1aWNl 47776\nIEdlc2ljaHQ= 47777\n5bCx5pyD 47778\nINC90LDRgdGC0L7Qu9GM0LrQvg== 47779\n7YOV 47780\nwq0= 47781\nZXhoYWxlcw== 47782\nIOy0iQ== 47783\nIGpzZW0= 47784\nz4DPic+C 47785\nIGl0dA== 47786\n66qF7J20 47787\nIHJlbWl4 47788\nIGJsb3Nzb21z 47789\nIFJlbmVl 47790\naXNhdGlvbnM= 47791\n7Iqk7YSw 47792\nIOuztOydtOuKlA== 47793\ndWVzdGFz 47794\nb3BlZGlh 47795\nIEFpbQ== 47796\n7J207KaI 47797\nc2NlbmU= 47798\nIGxlYWthZ2U= 47799\ndWNrdA== 47800\nU2Fk 47801\nQXNr 47802\nIHN1c3BlbnNl 47803\nIGltcG9zdA== 47804\nIFN0cmF0ZWdpYw== 47805\nIEl0w61z 47806\n4oCM 47807\nIGtleWJvYXJkcw== 47808\nIGFtdXNpbmc= 47809\nb2dy 47810\naWRlcm1hbg== 47811\nnpY= 47812\nINCy0LjQttGD 47813\nIGRpcHM= 47814\nIGFwb2xvZ2l6ZWQ= 47815\nIFNUQVI= 47816\nIGVzY3VlbGE= 47817\nIENoaW5n 47818\n0L3QtdC90LjRjw== 47819\nIOu2gOu2hOydtA== 47820\nIEZsZWV0 47821\nIHNhbWI= 47822\nIGVudHNwcmVjaGVuZA== 47823\nIGVsZWN0cm9kZXM= 47824\nIEZyZWloZWl0 47825\n5oiR5LiN55+l6YGT 47826\nIFNocmlt 47827\nacOfZQ== 47828\nIHNlbGVjdGlvbnM= 47829\nIGZvcmRp 47830\nIGRvc3M= 47831\n0Y/Rhw== 47832\nIGRpc2NyaW1pbmF0ZQ== 47833\nIEF1w59lcmRlbQ== 47834\nIGRlc2Vudm9sdg== 47835\nIEludGVybmFs 47836\nIEJlbmVkaWN0 47837\n5a+G 47838\nIFNoaXY= 47839\nTWlzc3k= 47840\nINC+0LHQvdCw0YDRg9C2 47841\nINC90LDRgdGC0YDQvg== 47842\nIGNvbnRyb2xhcg== 47843\nIExpYQ== 47844\nIG9waW9pZHM= 47845\nYW50dQ== 47846\nIGN1cGJvYXJk 47847\n5oGQ 47848\n0LPQtQ== 47849\nYWNodHM= 47850\nIGN1cmF0ZWQ= 47851\nIHhlbQ== 47852\nIHdlYXJ5 47853\nIGJyZXRocmVu 47854\nIGJ1ZGdldGluZw== 47855\nIHBvdXJ0YW50 47856\n6Zq7 47857\nYWlzaWE= 47858\nINC+0YLQstC10Yc= 47859\nIEdJUw== 47860\nzrzOsc65 47861\nINep15TXldeQ 47862\nIHNhdWQ= 47863\nIGzhu5s= 47864\n0JXQog== 47865\ndWJpbmU= 47866\nINC90YPQttC10L0= 47867\nIGtpZG5hcHBpbmc= 47868\nIGJyYXQ= 47869\nIFRlcnJl 47870\nIE1vbmV0 47871\nIOuniOyKpO2B 47872\nIGZsYXNoeQ== 47873\nIElTQk4= 47874\nIGZyZWVsYW5jZQ== 47875\naWFnZQ== 47876\nIGp1bmdl 47877\n7Lap 47878\nY2VyYWw= 47879\nINGC0L7Rh9C60Lg= 47880\nIGZvcm11bGF0ZQ== 47881\nIEZFUg== 47882\nIERhcnRtb3V0aA== 47883\n7Jy866m07ISc 47884\n5aKD 47885\nb3dpxIU= 47886\nIOuUlOyekA== 47887\nIHJlZ2ltZW50 47888\nIG1ldGFib2xpc21v 47889\nIFBhcnI= 47890\nIOy2qeu2hA== 47891\nIHNhbml0eQ== 47892\nIExhbA== 47893\nIEfDtg== 47894\nIEdsYQ== 47895\nIHByb3Rv 47896\nIG1pY3Jvc2NvcGlj 47897\nIGthbmc= 47898\nIFNjYWxpYQ== 47899\nIHB1Zw== 47900\nIFNjb3Jl 47901\nIFNhdmFubmFo 47902\nIGdhcmRl 47903\nIE5PUg== 47904\n5bCN5ZCn 47905\nIHNjaGVpbnQ= 47906\nIHDDs8WC 47907\nIGNvcnJp 47908\nIGJydXRl 47909\nIMWCYWQ= 47910\n5LuW5Lus 47911\nIHN1Y2NlZWRpbmc= 47912\nIGJpY3ljbGVz 47913\nTm9u 47914\nIHNlZWtlcnM= 47915\nIHVuY29uZGl0aW9uYWw= 47916\nIHJoeW1lcw== 47917\nIEdhcmFnZQ== 47918\nIGludm9pY2U= 47919\nIGNhbnZp 47920\nbmVjaw== 47921\nIGN1c3RvbWl6YWJsZQ== 47922\naXJpdHVhbA== 47923\nUXVlZW4= 47924\n7ZWY7Iuc64qU 47925\nIHBvd2VybGVzcw== 47926\nIGNzYWs= 47927\n5LiN5Lya 47928\naXNvZnQ= 47929\nIOygle2ZlQ== 47930\nIG5ow6Ju 47931\nIE1BTkQ= 47932\nIEhhZg== 47933\nIHJldm9sdmVz 47934\n5Lmf5Y+v5Lul 47935\nb3Zhbg== 47936\nYXJvbw== 47937\nIEdyaW5k 47938\n6Zuq 47939\nIGluZGlzcGVuc2FibGU= 47940\nIGNvbnN1bHRlZA== 47941\nIENsaW5pY2Fs 47942\nQWNj 47943\nIG9saG9z 47944\nIG1vbnRlcg== 47945\nIEhhbmE= 47946\nZXRhaA== 47947\nIHZhYW4= 47948\nIHRpZ2Vycw== 47949\nIGNhdWN1cw== 47950\n8J+Ygg== 47951\ns7TsnpA= 47952\ncG93ZXJz 47953\naXVtcw== 47954\nIO2GoOs= 47955\nIHRyYWRpY2lvbmFs 47956\nIHJlc29uYXRlZA== 47957\nIOyLoOq4sA== 47958\ndGhlbQ== 47959\nUm9iZXJ0 47960\nIGVsZW1lbnRv 47961\nIGFudGlk 47962\nINC+0LHRgQ== 47963\nIG5hdGl2ZXM= 47964\nIGxvY2E= 47965\nb3dtZW50 47966\nIFRpZ2h0 47967\nIOaAnQ== 47968\nIG1lbGFu 47969\nIE51ZQ== 47970\nYW1pcw== 47971\nIHNvcmdlbg== 47972\nYXPEsW5h 47973\nSG9tZQ== 47974\nIFBVQkc= 47975\nIGF3ZnVsbHk= 47976\nIFNob3Jl 47977\nIFBlcmNow6k= 47978\nIExhdQ== 47979\nIENpbmRlcmVsbGE= 47980\nIENoZXN0 47981\nIHNlbWFudGlj 47982\nIGRlc2VydGVk 47983\nIE1vbW8= 47984\nIEhlcm5hbmRleg== 47985\nZ2VuZXM= 47986\nIEFkdWx0 47987\n0LjRh9C10YHQutC+0LPQvg== 47988\nb3NoaW1h 47989\nIGNhcmFjdGVyw61zdGljYXM= 47990\nIEtM 47991\ntOyepQ== 47992\nb2Nhcg== 47993\nIGZlaGx0 47994\nIGRydWs= 47995\nIFBvcHB5 47996\nRU5HTElTSA== 47997\nIFZlcmdsZWljaA== 47998\nQnJpZW4= 47999\nIHJlY29tcA== 48000\nINGB0LQ= 48001\nIG1lcmdlcg== 48002\nIG1hcmtldGVycw== 48003\nIGhvbmV5bW9vbg== 48004\nIHBlbnNv 48005\nIGJlbGxp 48006\n0LXRgtGD 48007\nIGJhbmtlcg== 48008\nQ2FtZXJh 48009\nIFN0YWxs 48010\nIFN0YW1w 48011\nIEJpdGU= 48012\n0LXQttC00LU= 48013\nIHPDvHI= 48014\nIGfDvMOn 48015\nIFBhc3NvdmVy 48016\nIEJ1Z8O8bg== 48017\nINGB0L7QttCw0LvQtdC90LjRjg== 48018\nINC90LjQtw== 48019\nIG1hbnVyZQ== 48020\nIGdsYWNpZXI= 48021\n6KuH 48022\nUkFZ 48023\ndGVycm9y 48024\nIHNhbGFkcw== 48025\nIGh1cnJpY2FuZXM= 48026\nIERlc2lnbmVy 48027\nYXRvcmlv 48028\nIGZhY3R1YWw= 48029\nIFRhbW15 48030\nINC30LLRg9GH 48031\nIGludHJvZHVjdGlvbnM= 48032\nIGhvdXNla2VlcGluZw== 48033\nIGhhbmdlcg== 48034\n64uY6w== 48035\nYWt0ZQ== 48036\nIENvbGE= 48037\nJ10= 48038\nIEdlbmRlcg== 48039\n0L7RgNC+0L0= 48040\naXBzZQ== 48041\naWNpYXM= 48042\nIHN1Y2Nlc3NpdmU= 48043\nIHBvbGl0aWM= 48044\nIGjDtmhlcg== 48045\nIFFpYW8= 48046\nIEdpbW1l 48047\nINC70L7Qtg== 48048\nIHNlYg== 48049\nIFdlaXRlcg== 48050\nIFNha3VyYQ== 48051\nIEJvdWxkZXI= 48052\nIEFtw6lyaWNh 48053\ncGXFgm5pZQ== 48054\nIHRlY25vbG9nw61h 48055\naXNob3Bz 48056\nZnVy 48057\nIG1vb25saWdodA== 48058\nIGRpc3BlcnNlZA== 48059\nIHJleg== 48060\n0LXQvdC90L7QtQ== 48061\n0LDQu9GM0L3Rg9GO 48062\nIFR3ZWx2ZQ== 48063\nIEhPUg== 48064\n7Iuk7Z6I 48065\naWxhZ2U= 48066\nIHNoYWRlZA== 48067\nIHJlc3VtZXM= 48068\nIFBlYW51dA== 48069\nIE1JTEw= 48070\nYXBvbnM= 48071\nIFVGQw== 48072\nIFNvbGU= 48073\nIGpveXN0aWNr 48074\nIE9saXZpZXI= 48075\nd2FybWluZw== 48076\nIHN5bGxhYnVz 48077\nINC+0LHRidC1 48078\nIGhp4buHbg== 48079\nIGZlc3Rh 48080\nIGNyYWRsZQ== 48081\nIFphYw== 48082\nIHJlbWVtYnJhbmNl 48083\nIOqwmeyVhOyEnA== 48084\nIHBpxJlr 48085\nIGNvZXhpc3Q= 48086\nIFZJSQ== 48087\nIMOhcmVhcw== 48088\nIHV3YcW8 48089\nIG9ic2VydmVycw== 48090\nIG3DpG5uaXNrb3I= 48091\nY29vbg== 48092\nIERBTQ== 48093\nIG5hc3p5bQ== 48094\nIGFsbGlnYXRvcg== 48095\nIEZyZWV6ZQ== 48096\nIEVzdGF0ZQ== 48097\nINGC0YDQsNC00Lg= 48098\nIHVuZGVyY292ZXI= 48099\nIG5pZXM= 48100\nIEZlaGxlcg== 48101\ncGxpbg== 48102\nIEthYnVs 48103\naWxhdGU= 48104\nIOqzoOyWkQ== 48105\nIG1vcA== 48106\n7IS8 48107\nIGFuZGVyZXI= 48108\nIEtFTEw= 48109\n0L7QutC4 48110\nINC20LXRgdGC 48111\nIGdyYXppbmc= 48112\nIGRhw60= 48113\nIGNhcGl0YWxpemU= 48114\nIGFwZXg= 48115\nIG51cnR1cmluZw== 48116\nIGNvcnRhcg== 48117\nIGNvbnRyYWM= 48118\nxLFtxLF6xLE= 48119\nIHRhbmRlbQ== 48120\n6YO95pyJ 48121\nZ2VtZW50 48122\nINGB0LjRgdGC0LXQvNCw 48123\nIG1hbnF1ZQ== 48124\naWFqxIU= 48125\nV09S 48126\nINin2Kg= 48127\nIGNhcnRz 48128\nQU5P 48129\nIOuwm+qzoA== 48130\nIENlbmE= 48131\nIEJpb2xvZ3k= 48132\naWRhcg== 48133\nIGHFvA== 48134\nZXJuZQ== 48135\nYW51 48136\nIHRoYW5rZWQ= 48137\nIHN1Ym1hcmluZXM= 48138\nIG1hbmlj 48139\nINC80L7Qtw== 48140\n5LyK 48141\naW5zdGFudA== 48142\nZXNzZW50aWFs 48143\nIHNhbXVyYWk= 48144\nIHBhc3Rp 48145\nIGFsYW4= 48146\nIGJyb2No 48147\nIGJha2Vy 48148\nIEd1aWxs 48149\nqLw= 48150\nIHdpdGhkcmF3bg== 48151\n64ud 48152\nUGVyZmVjdA== 48153\ncXVlbmN5 48154\nIHN0cmVhbWxpbmVk 48155\nIDEzMDA= 48156\ntOuPhA== 48157\nIOuWoOs= 48158\nIOOBr+OBhA== 48159\nIGh2YWQ= 48160\n5LiA5a6a6KaB 48161\nIHZlcmJhbGx5 48162\nIEtvbnM= 48163\nIOyhsOyLrA== 48164\nIGRpZXo= 48165\n5o6w5o6w 48166\nIGNodWNrbGluZw== 48167\nIE1paA== 48168\nIHJhbGxpZXM= 48169\nIG1hbnRlcg== 48170\nIGVhcm5lc3Q= 48171\nc3VwZXI= 48172\nIGdlY2U= 48173\nIFJlbmQ= 48174\nIEdlcmFkZQ== 48175\namVuaWdlbg== 48176\nIFZhbGw= 48177\nIOyeiOuCmA== 48178\nINGB0LrQsNC30LDQu9Cw 48179\nIHRyYWJhbGg= 48180\nINC90LDRiNC10Lw= 48181\nINC80LXRhQ== 48182\naWtpdA== 48183\nIG5vdW5z 48184\nIG5ldXJvbG9naWNhbA== 48185\nIG1vdGl2YXRpb25hbA== 48186\nIE1jTWFob24= 48187\nIEZpbmlzaGVk 48188\nIOuztOydtA== 48189\nIEZpZWxkcw== 48190\nIGFkb2xlc2NlbnRz 48191\nIFRpc2No 48192\nIE5lYmVu 48193\nIEZsb3dlcnM= 48194\nIEVuZXJn 48195\nIGRpcmV0 48196\nIFRoaQ== 48197\nIFBpY2Fz 48198\n5oOc 48199\n5oCO5LmI5qC3 48200\nIGF2ZXRl 48201\nIEZvcnM= 48202\nIENoYXBlbA== 48203\nTsOjbw== 48204\nRXQ= 48205\nINGB0L7QtNC10YDQtg== 48206\ncmVubw== 48207\nIHN2ZW4= 48208\nIGRvc3TEmXA= 48209\nbmVl 48210\nIFNuYXBkcmFnb24= 48211\nIElEcw== 48212\n7JWY64qU642w 48213\n16jXmg== 48214\nIHN1bmZsb3dlcg== 48215\nIHBlcnBldHVhbA== 48216\n57OW 48217\nIGtuaWdodHM= 48218\nIGdpcmQ= 48219\nIFRvbGQ= 48220\nIHZvbGNhbm9lcw== 48221\nIGFkdmVyc2FyeQ== 48222\nIEVjb25vbXk= 48223\nIGV4dHJhcG9s 48224\nIGJsdWV0b290aA== 48225\nIHpvb21pbmc= 48226\nIHNreXM= 48227\nIGdlbmlhbA== 48228\nw61jdWxvcw== 48229\nYW1icmU= 48230\nINC80LXRgA== 48231\nIHRlZW55 48232\nIHN0cmVzc2luZw== 48233\n7JWM 48234\nT05Z 48235\nIHRyYW5zbHVjZW50 48236\nIHJvdW5kaW5n 48237\nIGdydWVz 48238\n15nXoNeU 48239\nYXByw6hz 48240\nIHBydWViYQ== 48241\nIHBvbHlnb24= 48242\nIGJsdWViZXJyeQ== 48243\nIFByb2dyYW1t 48244\nIHRyZW5jaGVz 48245\nIHNlYmFnYWk= 48246\nIHBhbGF0ZQ== 48247\nIGxhdWRl 48248\nIGJlaGF2ZWQ= 48249\nIGxvbmdpdHVkaW5hbA== 48250\nIE1vZHVsZQ== 48251\nIGFkbWly 48252\nzrvOuQ== 48253\nR3JlZw== 48254\nIHd5c3Q= 48255\nIHByb3BhZ2F0ZQ== 48256\nIG1vbGRz 48257\nIFR1Yg== 48258\nIExvdWQ= 48259\ndXN0bw== 48260\nIHVuc3RvcHBhYmxl 48261\nIHJlaW5mb3JjaW5n 48262\n6Z2e5bi455qE 48263\nINC/0YDQvtCx0LvQtdC80LA= 48264\nIHBvdGVuY2lhbA== 48265\nIGhlbXA= 48266\n7J6U 48267\n4KSv 48268\nIG9wdGlj 48269\nIGVyZm9sZ3JlaWNo 48270\n0YHRiw== 48271\n0L7Qu9GM0YjQtQ== 48272\ndXJzdA== 48273\nIFBvaXM= 48274\nIHJlc3BvbmRlbnRz 48275\nIG5laG1l 48276\nIEV4dGVybmFs 48277\nb2xhdGU= 48278\nSHl1bg== 48279\nIHF1YXJ0eg== 48280\nIG1hdGhlbWF0aWNpYW4= 48281\nIGLDoXNpY2FtZW50ZQ== 48282\nIGFpbA== 48283\n7KCc66W8 48284\nYXR0dXR0bw== 48285\nIG5vb2l0 48286\nIGFmZmxpY3Q= 48287\nIE9sZ2E= 48288\n6K23 48289\nINC90LDRgg== 48290\nIGRpdGVz 48291\nIHJlYWxpZGFkZQ== 48292\nIGvDpG4= 48293\nIHVuaXF1ZW5lc3M= 48294\nIHBhZHJlcw== 48295\nIHN1YnNpZGk= 48296\nIHBpZ2VvbnM= 48297\nzrLOsQ== 48298\nc3RhZA== 48299\nIGRlcmVu 48300\nINCh0LvQtdC0 48301\nZG9v 48302\nINC+0L/QuNGB0LDQvdC40Lg= 48303\nIGFtYmVy 48304\nIGdvb3NlYnVtcHM= 48305\nIGZyw6Vnb3I= 48306\nIFZpdGFs 48307\nIElzcmFlbGl0ZXM= 48308\nd2Fzc2Vy 48309\nSXNu 48310\nIGNvbW1pdHM= 48311\nIFNURVZFTg== 48312\nIEJldsO2bGtlcg== 48313\ndWl0aXZl 48314\nIGxlZ2Vu 48315\nIGJydWs= 48316\n0LjRgNC+0LLQsNC9 48317\neW5lbg== 48318\naGVsbQ== 48319\nIGdlbmVyYXRpb25hbA== 48320\nIEzDpG5kZXJu 48321\nzr/Ouc+Az4zOvQ== 48322\ndXp1 48323\nIGNhbGxlcg== 48324\n0L7QvdGM 48325\nw7xtw7w= 48326\nIGJlc2Fy 48327\nIHBsYXRz 48328\nIG1pZ3JhdGVk 48329\nIGphcA== 48330\nIFdBUg== 48331\nIGRpc3NlY3Q= 48332\nIFp1c2No 48333\nIFplaXRlbg== 48334\nIExpb25z 48335\nIERG 48336\n4pQ= 48337\n0LrQuNCy 48338\nIHBlZGVzdHJpYW5z 48339\nIE1hcmlseW4= 48340\nZG9jaw== 48341\nIHlodA== 48342\nIHJlaW5jYXJu 48343\nIFNvbm8= 48344\nIEdyb3d0aA== 48345\n0YPRgdC+0LI= 48346\nIGR1bmdlb25z 48347\nIGJhZ3Vz 48348\na2ljaA== 48349\nINGD0LrRgNCw0Zc= 48350\n6Yar 48351\nIEtlbGxlcg== 48352\nY2hlbWlzdHJ5 48353\nSmFwYW5lc2U= 48354\nIHdpbGxzdA== 48355\nIGRlY29tcG9zaXRpb24= 48356\nINGB0YLQtdC9 48357\nIHJldml2ZWQ= 48358\n7ZWZ6rWQ 48359\nIMWT 48360\n5L2Q 48361\n7Iu4 48362\naXBweQ== 48363\nIGhvdXJseQ== 48364\nasOkbg== 48365\nIFdvcmtzaG9w 48366\nnbzshJw= 48367\nIGN1YXJ0bw== 48368\nIHBhdHJpbQ== 48369\nIEJ1cmNo 48370\nIOyeiOq4sA== 48371\nIGhlcGF0 48372\nIGjDoG5n 48373\nIOuMgO2VtA== 48374\nINCy0LDRiNC4 48375\nIHJld29yaw== 48376\nIHBhcnNl 48377\nIMOnxLFrdMSx 48378\nIFNheA== 48379\nIE1vbmdv 48380\nIEFhYWg= 48381\ncmFtYmxl 48382\nREo= 48383\nIHN0YWJpbGl6ZWQ= 48384\nIFNwZWVjaA== 48385\nQm9va3M= 48386\nIGh1cmRsZXM= 48387\nIFdP 48388\nIExhbWJvcmc= 48389\nIDE5MzM= 48390\nIHZvcmJlcmU= 48391\nIGNsaW5pY2FsbHk= 48392\nIGJyZWF0aHRha2luZw== 48393\nIEdhdGV3YXk= 48394\n0L/QtdGA0LLRi9GF 48395\ndXRlcnM= 48396\nIOu5tQ== 48397\nIHlldGVy 48398\nIHB1bGxleQ== 48399\nIG11ZmZpbg== 48400\nIFByZWZlcg== 48401\nIFBlbmNl 48402\nIGluZm9ybWHDp8Ojbw== 48403\n7Iqk7Yq46w== 48404\n44K444Oj 48405\nIFR1cnRsZQ== 48406\nIFJlZ2luYQ== 48407\nIExvYWQ= 48408\nZG9lcw== 48409\ncGFuemU= 48410\nuJQ= 48411\nIG1pbmE= 48412\nIExhdGlub3M= 48413\nYW1tZXJz 48414\nIFRvcnQ= 48415\nIEJleW9uY2U= 48416\n0LjQvNC+0YHRgtC4 48417\nINCy0L7Qv9GA0L7RgdGL 48418\nIGJ1bHVu 48419\n6ICM5bey 48420\naW5law== 48421\nYmVyZWljaA== 48422\nIHBhc3R1cmU= 48423\nIE9B 48424\nIE1lbHQ= 48425\nIEV0dA== 48426\nIERZ 48427\nIG9id29obA== 48428\nIGxlYWd1ZXM= 48429\n0YLQtdGB0Yw= 48430\nINC60YPRgQ== 48431\nIHZvcnM= 48432\nIHRvcHA= 48433\nb2dyYXBoaWNhbA== 48434\nYXNzdA== 48435\nIGxpbmRv 48436\nIOuwne2YlA== 48437\nIHLDqWZs 48438\nIGNsaW1icw== 48439\nIHZhcnNh 48440\nIG1ldGh5bA== 48441\nIEthcmVyZQ== 48442\nxrDhu58= 48443\nUmFk 48444\nIHByZXBhcmVkbmVzcw== 48445\n0L7QvdGH 48446\nIE9E 48447\nIENHSQ== 48448\nIOCkrg== 48449\nIHNwZWVjaGxlc3M= 48450\nIGxhc2Np 48451\nIGJvbGFn 48452\nINGF0L7Rh9C10YLRgdGP 48453\nIGdyaWV2aW5n 48454\nIEpvaGFubmVz 48455\nIENhcnJvbGw= 48456\nYWRha2k= 48457\niKzr 48458\nIHPFgnU= 48459\nIGlubmVyaGFsYg== 48460\nIGd5bW5hc3RpY3M= 48461\n0L/RgNC4 48462\naWZpcXVlcw== 48463\nIGthcmF0ZQ== 48464\nIGRvbXU= 48465\n44Gd44KM44Gn 48466\nT1RIRVI= 48467\nIGRlbWFuZMOp 48468\nIGJvb2tsZXQ= 48469\nIEt5b3Rv 48470\nIHdvaA== 48471\nIE1hcsOtYQ== 48472\ndmlvbGVudA== 48473\nSkU= 48474\nIGzDs2c= 48475\nIGJydXRhbGx5 48476\nY290 48477\nINmF24w= 48478\nIFdhcnN6 48479\n5a6I 48480\nd29s 48481\nIG1pa8Ok 48482\nIFByb25vdW5jZQ== 48483\nIEJyZW5kYW4= 48484\nIHJvdXA= 48485\nIGl0YWxpYW5v 48486\n5aaC5q2k 48487\nINC60L7QvNC/0YzRjtGC 48488\nIHVyZ2luZw== 48489\nZWRlcw== 48490\nIGNhcmJvbm8= 48491\nIFJpY2hhcmRzb24= 48492\nINCd0LDRhw== 48493\nIFRyYWluZXI= 48494\nIENyaW1lYQ== 48495\nIGRpYXBlcnM= 48496\nIGNvdmV0 48497\nIE1haGFy 48498\nIEh1dGNo 48499\nIEF1c3c= 48500\nYmVydHk= 48501\nIGluZGlmZmVyZW50 48502\n0LrRgNC10YI= 48503\ndWxkYWRl 48504\nIGhhcm1z 48505\notmG 48506\nbGVzaWE= 48507\nIGdpbw== 48508\nIE1pc3RyZXNz 48509\nIEtub3g= 48510\nIEZSRUU= 48511\nIOujqOs= 48512\nINC90LDRiNCw 48513\nIGludmluY2libGU= 48514\nIG1haWRlbg== 48515\nIEplZXo= 48516\nIGJyZXZl 48517\ncG9sZQ== 48518\nIGNyaXRpY2lzbXM= 48519\nIFJ1c2lh 48520\n4KSu 48521\ncGhpbg== 48522\nIENvbXBhcmU= 48523\nIEJPTg== 48524\nIHNuZWFraW5n 48525\nIFJhaWxz 48526\nIEdlcmFs 48527\nIDE5NTM= 48528\nSG9sYQ== 48529\nINC+0L/Ri9GC 48530\nIHJhaW5mb3Jlc3Q= 48531\nIGJlbHVt 48532\nIE9iaQ== 48533\nIElTUw== 48534\n44KM44Gq44GE 48535\nINCh0LI= 48536\nIGJsb25k 48537\nIHd6Z2w= 48538\nIHBvd2llZHppYcWC 48539\nIGNob2tpbmc= 48540\nIFNvbmdz 48541\nIEJpcmF6 48542\nIHllbGxz 48543\nIHN0eWxpc3Q= 48544\nz4zPhM61 48545\nIHNjaHJlaWJlbg== 48546\nIEphdw== 48547\nIEVsZXZlbg== 48548\nIFJpZg== 48549\nLy4= 48550\nIOyYpOuenOunjA== 48551\nIHRyZWF0aWVz 48552\ndWZmZWQ= 48553\nIOKIkg== 48554\nIHJvb2Zz 48555\n4LmA4Liq 48556\nIOu7 48557\nIHNwYXJrbGU= 48558\nIEtpZXY= 48559\nIEFyZ3U= 48560\nZXJlY2h0 48561\nINCd0LDQtNC+ 48562\nIEZJTA== 48563\nIG1vbHRh 48564\nIERldmk= 48565\nIGNhbXBl 48566\nIGJlbmV2b2w= 48567\nIFRvdWdo 48568\nIG1vaW0= 48569\nIGV2YWN1YXRl 48570\nIGVycmFkbw== 48571\n5amG 48572\n0YDRg9Cz0L4= 48573\nIO2OmA== 48574\nIM6TzrnOsQ== 48575\nIHdlYWtlbg== 48576\nIGlsbHVtaW5hdGVk 48577\nIHNpZ2xv 48578\nIFZhY2M= 48579\n0LjQtdC5 48580\nYWxpcw== 48581\nINGD0YHRgtGA0L7QuQ== 48582\nIGRvbmE= 48583\nxYJvcw== 48584\nw7xtYW4= 48585\nIHByb2R1Y2Npw7Nu 48586\nIGNsb3Q= 48587\nIE1hbmdv 48588\nIHVuZWFzeQ== 48589\nIHNodXRz 48590\nIEV4YW1wbGVz 48591\ndmVsbA== 48592\nZWJl 48593\nIHByb21wdGx5 48594\nIFRlbGVz 48595\nINC/0YDQvtGI0Ls= 48596\nIHB1ZXJ0YQ== 48597\nIMO8YmVyemV1Zw== 48598\nIGNvY2g= 48599\nc29jaWFs 48600\nIEJlbnNvbg== 48601\nIE1ldGg= 48602\nIEV4cGVk 48603\nIHN1cHBsZW1lbnRhbA== 48604\nIGNvbmNlaXZl 48605\nINeY15XXkQ== 48606\nIGNhcHRpdml0eQ== 48607\nj5nslYg= 48608\nINGF0YPQtA== 48609\nZm9ybWluZw== 48610\nIHVwbG9hZHM= 48611\nIHR1cmJ1bGVuY2U= 48612\nam9pbnQ= 48613\nIHNhdGlzZmFjdG9yeQ== 48614\nIEFuaW1l 48615\nIHdhc2hlcw== 48616\nIGxpYmVyYWxz 48617\nIFN1bnNoaW5l 48618\nIFJFQUw= 48619\ndWJsaWs= 48620\nYmluYXJ5 48621\nVG9ueQ== 48622\nIHBvbGFyaXplZA== 48623\nIGVucmljaGVk 48624\ndGFraW5n 48625\nIOuBneuCmA== 48626\nIHBsZWFzdXJlcw== 48627\nIGV4dGVybWlu 48628\naW5lc2U= 48629\nYXRs 48630\ndsOkcg== 48631\n0LDRgNGL 48632\nIG15xZs= 48633\nbmFycmF0b3I= 48634\nINC+0LTQvdC+0Lw= 48635\nIG5handpxJk= 48636\nIG1vYmlsaXpl 48637\nIG1pbGxvcg== 48638\nIGF0YQ== 48639\n5re3 48640\nIHBvbMOtdGljbw== 48641\nIHBsZWFk 48642\nIHBhaW50ZXJz 48643\nIFNvdw== 48644\n0L7RhA== 48645\nIOyYm+uCoA== 48646\nINGH0YLQvtCx 48647\nIHNhYm9y 48648\nIFVuZGVydA== 48649\nIEpFUlJZ 48650\nxaHDrQ== 48651\nIOuwluyXkA== 48652\nIHByw6ljw6lk 48653\nIGFubm90YXRpb24= 48654\nIEluYXVkaWJsZQ== 48655\nIHRleHR1cmVk 48656\nIGZpc2hlcm1hbg== 48657\ndm9yZGFu 48658\naWNoZXJ1bmc= 48659\nIOyggeydtA== 48660\nIGdlemVpZ3Q= 48661\nIG1hbmRhdGVz 48662\nIGJlYWs= 48663\nIFRXTw== 48664\nIEFrYmFy 48665\naWxpYW4= 48666\nIHRp4bq/cA== 48667\nIHN1cGVyaW9yaXR5 48668\naW5rdQ== 48669\nIGx5cw== 48670\nIEZDQw== 48671\nIENQQQ== 48672\ndXN0ZXJpbmc= 48673\nbmljb3M= 48674\nYW5qYQ== 48675\nIGNoaWxscw== 48676\nIENhZ2U= 48677\nIHNlYWxpbmc= 48678\nIHNhw6c= 48679\nIGRlZGFucw== 48680\nIEFsZ2Vy 48681\nIHNwZXppZQ== 48682\nIGNvbG9zcw== 48683\nxLF5xLE= 48684\nY2xvY2t3aXNl 48685\nIGV4YWN0YW1lbnRl 48686\nIGllbWFuZA== 48687\nYW3EsQ== 48688\nIG1hbmRhcg== 48689\ncmFq 48690\nZmFjZWQ= 48691\nYWd1YQ== 48692\nIOq5lOs= 48693\nIGluc2Jlc29uZGVyZQ== 48694\nIGRyaXp6bGU= 48695\nIGRpbWluaXNo 48696\nIFlvZGE= 48697\nQUk= 48698\nIGJpbG1peW9ydW0= 48699\nIE1NQQ== 48700\nYXRlZ29yeQ== 48701\nINC/0LXRgNC10L8= 48702\nIHBhcnRpY2lwYXI= 48703\nIG5vcm1hbGl6ZWQ= 48704\nIGNvbXBsZXhpdGllcw== 48705\n5rSy 48706\n5o6n 48707\n0LDRgNC+0LI= 48708\nbWlzdA== 48709\naWNoYQ== 48710\nR3JvdXA= 48711\nIHJlc2lsaWVuY3k= 48712\nIG5vZ2xl 48713\nIENOQw== 48714\ncHLDvA== 48715\nIHBoeXNpY2lzdHM= 48716\n0L3QvtC6 48717\nTEk= 48718\nIHN0dWZmcw== 48719\nIHNpc3RlbWFz 48720\nIGludGVyZmVyaW5n 48721\nIE1hcnZpbg== 48722\nw6lyY2l0bw== 48723\nIOyXhuqzoA== 48724\nIHNvbmlj 48725\nIGVxdWl2 48726\nIGFib3Jk 48727\nIFJhbWVu 48728\nIDA5 48729\nbWVkaW0= 48730\nYXRpcXVlcw== 48731\nINC00LXQu9Cw0Y7Rgg== 48732\nIHVuYW5pbW91c2x5 48733\nIHNraXJ0cw== 48734\nIO2KueuzhA== 48735\nIFByaXg= 48736\na2FtaQ== 48737\nIGZydWl0aW9u 48738\nIGJpcnRoZGF5cw== 48739\n0LjQutC+0Lw= 48740\nIGluYXVndXJhbA== 48741\nIGNvcnJlbGF0ZQ== 48742\nIFRvcnk= 48743\nIOuCmOyB 48744\nIGRldw== 48745\nIFByZWNpcw== 48746\naWhp 48747\nIOusuOygnOqwgA== 48748\nIGNpdGluZw== 48749\nIExhbmE= 48750\nIEthZw== 48751\nIHBsYXl0aHJvdWdo 48752\nIFByb3RvY29s 48753\nZnJpc3Q= 48754\naG92YWg= 48755\nIG1lcmNpZnVs 48756\nIGJpbGluZ3VhbA== 48757\nIEd1aXRhcg== 48758\ncmg= 48759\nIGdsYW1vcm91cw== 48760\nIFZpa2luZ3M= 48761\nIE9vb29o 48762\n7ZWY64qU642w 48763\nIFVnYW5kYQ== 48764\nIGNvbGxhcHNlcw== 48765\nZW50cnk= 48766\nIGFudGlveGlkYW50cw== 48767\n64KY6w== 48768\n0YjQsNGP 48769\nIHRyaXZpYQ== 48770\nIGfDpGxsZXI= 48771\nIGZ1bmdp 48772\nIG1pbGtz 48773\nIGRpY2h0 48774\nzrzOtw== 48775\ncG9rZQ== 48776\nINCy0YvQv9GD0YHQug== 48777\nIGZlZWRlcg== 48778\nIEFsY29ob2w= 48779\naG93ZXI= 48780\nIGRlc2VydmluZw== 48781\nIFJlYmVs 48782\naW9zaXM= 48783\nIDEwMw== 48784\nIGhhbmRvdXQ= 48785\nIGVubQ== 48786\nIGxhbmRsb3Jkcw== 48787\nIGdlb2xvZ3k= 48788\ncmlscw== 48789\nIGNvYnJh 48790\nIFZvbGQ= 48791\nIFBhbmNo 48792\nIEdSRUc= 48793\nIHByb3Nz 48794\nIGJyYWNlbGV0cw== 48795\nIFZlZ2E= 48796\nIHJvenVt 48797\n5qy+ 48798\n0LDQt9C0 48799\nIEx5bmQ= 48800\nIEhvbm9ycw== 48801\nIHN1cnJlbmRlcmVk 48802\nIGxpYnJhcmlhbnM= 48803\nMTI1 48804\nINGB0LjQsw== 48805\nIHVuaWZvcm1seQ== 48806\nIEVhZ2xlcw== 48807\n7JWZ 48808\n0LjRgtCw0L0= 48809\nYW5kaWQ= 48810\nIOygiOuMgA== 48811\nINi2 48812\nIGFycmVzdHM= 48813\nIENTVg== 48814\nIEF6ZXJiYWlqYW4= 48815\nb3J0aWM= 48816\nIERY 48817\nIEFkdmVudHVyZXM= 48818\nIGFidXM= 48819\nIEZhdQ== 48820\nIHNjaGxpbW0= 48821\nIHJhdHRsaW5n 48822\nIGNvbnN1bWVz 48823\nIFRvbGtpZW4= 48824\nIHJlc3VycmVjdGVk 48825\nIFhZ 48826\n7Yq46rCA 48827\nINCy0YvRgdGC0YPQvw== 48828\nIEFuZ2ll 48829\nxbxlbmlh 48830\nTWlj 48831\nIFNoZWlsYQ== 48832\nYWNodGV0 48833\nIG92ZXJzdA== 48834\nIGzDog== 48835\nIGluZWZmZWN0aXZl 48836\n5p2h 48837\n5oCO5LmI5LqG 48838\n5b+Z 48839\nIHdpY2h0aWdlcg== 48840\nIHZpbm8= 48841\nIHB1bQ== 48842\nIGFuZ2xlZA== 48843\nIFBpb25l 48844\nIE3hu7k= 48845\n44Gd44KM44Gv 48846\nd2/Fm8SH 48847\nZHJhdw== 48848\n4Lix4LmI 48849\nbWFya2V0cw== 48850\nIGNhZmVz 48851\nIENlbQ== 48852\n4p2k 48853\nIFN1aXQ= 48854\nTUs= 48855\nIGVtcGhhc2l6ZXM= 48856\nIHRvcnRpbGxh 48857\nIG1lam9yYXI= 48858\nIFN1cnZpdg== 48859\nY2FzdGluZw== 48860\nIGVkdWNhY2nDs24= 48861\nIEd1bQ== 48862\ndWVseQ== 48863\nIOyXrOq4sOuKlA== 48864\nIHN0cmV0Y2h5 48865\nZW7Dp2E= 48866\nIHdpdGhob2xk 48867\nIGV4aXRpbmc= 48868\nIGVudGhhbHB5 48869\nIFRyYW5zaXQ= 48870\nxLFsbcSxxZ8= 48871\nYWxpZXM= 48872\nIHNhbHZhcg== 48873\nIGxlYW5lZA== 48874\nIGdyb8OfZXM= 48875\nIGZpdHQ= 48876\n0LDQutC4 48877\nU2FyYWg= 48878\nIGhvc3RlbA== 48879\nIGZpbmdlcm5h 48880\nIG5hZHppZWrEmQ== 48881\nd2l2ZXM= 48882\nUmVj 48883\nIHNwb29s 48884\n0LDRgtC+0LI= 48885\nIEVuZW15 48886\nIGZ1cnk= 48887\nIGRldHRh 48888\nIEZheQ== 48889\n6Zqo 48890\n0Y/RjtGC 48891\nIGFwcm94aW1hZGFtZW50ZQ== 48892\nIHNpbG9z 48893\nIG1hZ2lzdA== 48894\nIGNyZWU= 48895\nIEtyYW5r 48896\nIERPV04= 48897\nIHN0YXJ0bGVk 48898\nIHJlYm9ybg== 48899\nIFVtd2VsdA== 48900\nIFN1emFubmU= 48901\n0L3QuNGG0Ys= 48902\nb3V0ZXo= 48903\nIEpBQw== 48904\neWFyZHM= 48905\ncmFkYXM= 48906\ncmF1 48907\naXB0cw== 48908\naGFpbA== 48909\nIHBhcmFncmFwaHM= 48910\nIG1lZ2xpbw== 48911\nIGlzb2xhdGluZw== 48912\nIGFjZWl0ZQ== 48913\nIEhhcnNo 48914\nIGN5c3Q= 48915\nIEJsb2NrY2hhaW4= 48916\nINGF0L7RgNC+0YjQuNC5 48917\nIHZpcnR1b3Vz 48918\nIGludmVzdGlnYWNpw7Nu 48919\nIGRldm9pcg== 48920\nIG1hc3R1cmI= 48921\nIFNhbGU= 48922\n2YrYsdip 48923\nIM6n 48924\nIFN0cmHDn2Vu 48925\nIGRpa2s= 48926\nIGFmb3Jl 48927\nIEp1bmdrb29r 48928\nIGNob2NpYcW8 48929\nIERlYmF0dGU= 48930\nIHdlaXJkbHk= 48931\nIHZpYWpl 48932\ncmVnaXN0 48933\nSGVscA== 48934\nIGtpbmRlcmVu 48935\nIGZvcm11bGF0ZWQ= 48936\nIGVuZmlt 48937\nIFRvd2FyZHM= 48938\n0LrQvtGX 48939\naXZlcmluZw== 48940\nINC00LXRgtC4 48941\nY2hhcmdlcg== 48942\nIHB1cmw= 48943\nIGFjYWRlbWljYWxseQ== 48944\nIE51cnNl 48945\nIGRlbGV0aW5n 48946\nYXlv 48947\nIHJlZnVzYWw= 48948\nIGRlcGljdHM= 48949\nIERyYWN1bGE= 48950\nIHRvYXN0ZWQ= 48951\nIFpvbWJpZQ== 48952\nIFN1cGVyaW9y 48953\nIEJvbGQ= 48954\nIHF1aXp6ZXM= 48955\nIGdsZQ== 48956\nNDUw 48957\nIGNvbWXDp28= 48958\neW5u 48959\nIHZlcnN0 48960\nIE9sYWY= 48961\nIHBvbW9j 48962\nIFNhc2s= 48963\n65g= 48964\nIFRDUA== 48965\nIFByb3BlcnR5 48966\n7ZWY7KOg 48967\n4Lic4Lih 48968\nYm9vbQ== 48969\nYXJvcw== 48970\nINGA0L7RgdGB0LjQuQ== 48971\nINCx0YvQstCw0LXRgg== 48972\n5Ye65Y67 48973\nIOydtOyVvOq4sOulvA== 48974\nIGNvbWJpZW4= 48975\ndmFjYw== 48976\nIGViZW5mYWxscw== 48977\ncGFyYQ== 48978\nINC30Lw= 48979\nIGRlc3BlcmF0aW9u 48980\nb3JkcmU= 48981\nINep15zXmQ== 48982\nIGdlbmVyb3VzbHk= 48983\nINCe0Lo= 48984\nIG9yYml0aW5n 48985\nPjwv 48986\nIGVzcMOt 48987\nIENPUA== 48988\n5a2p5a2Q 48989\ndmlzaWJsZQ== 48990\nINC/0YDQtdGB0YLRg9C/ 48991\nIHN0aXRjaGVk 48992\n4K+ILg== 48993\nIGxhdGVudA== 48994\nIFByYWI= 48995\nIE1jTg== 48996\nIEhlYWxpbmc= 48997\nIEN1cmlvc2l0eQ== 48998\nY2VydA== 48999\nIOuvvOyjvA== 49000\nIHBhdGllbnRseQ== 49001\nIFlU 49002\nZm9yZWlnbg== 49003\nIHbhuqtu 49004\nIGluZHVzdHJp 49005\nIGNvY2t0YWlscw== 49006\nIGJyaWdodGVu 49007\nIGNvbnNvbGlkYXRlZA== 49008\n0LDRgNC0 49009\nbHRyeQ== 49010\nIGdyaWxsZQ== 49011\nIGJvbmE= 49012\nIGRpbGlnZW50bHk= 49013\nIFdyZXN0bGVNYW5pYQ== 49014\nZXJrdA== 49015\nZW5lcmd5 49016\nOTk5 49017\n4K6V4K61 49018\nIHRvdGU= 49019\naW9ubw== 49020\nRElP 49021\nIHNjaGl6b3BocmVuaWE= 49022\nIHBvc3Rwb25lZA== 49023\nIFFpdQ== 49024\nIM+Dz4XOvQ== 49025\nIHpkasSZ 49026\nIHNwYW5uZW5k 49027\nIERJUw== 49028\nUmVs 49029\nIHJoaW4= 49030\naW1tdW5l 49031\nT2xk 49032\nIHBsw7Z0emxpY2g= 49033\nIG1vdW5k 49034\nIGFzdHJvbm9taWNhbA== 49035\nIEd1aWQ= 49036\nIEN1bA== 49037\nSEk= 49038\nIMWg 49039\nIHJlcG8= 49040\nIE1hdXJpY2U= 49041\n5LiA54K5 49042\nIGJhbmRpdHM= 49043\nIERlc2t0b3A= 49044\nw6Rzcw== 49045\nZnRh 49046\nIGxpY2VuY2U= 49047\nIGltYWdpbmFy 49048\nIEVudHJlcHJlbmU= 49049\neG8= 49050\nIOunm+yeiOuKlA== 49051\nINeU15E= 49052\nIHB1bXBraW5z 49053\nIGthbnNzYQ== 49054\nIGrEmXp5 49055\nIGNvbW11bmF1dMOp 49056\nYsO8cg== 49057\nIGVyaMO2 49058\nIFdvbHZlcg== 49059\nIFNoYXJpbmc= 49060\n5Luk 49061\nIHBha2Fp 49062\nIGluc3VsdGVk 49063\n0JzRiw== 49064\n0L7Rlw== 49065\nIGNvbnNpc3Rl 49066\n5oyR 49067\nIHlvdW5nc3RlcnM= 49068\nIGdsZWljaGVu 49069\nd2VkZXI= 49070\nIG1vdGU= 49071\nIGNsYXVzZXM= 49072\nw6l0YXQ= 49073\ncHJ1cw== 49074\nIHdhc3Q= 49075\n57uZ5oiR 49076\nIENyaXNw 49077\nIOeEtuW+jA== 49078\nIG9mZmVuZGVycw== 49079\nIGNvbnZlY3Rpb24= 49080\nIGNvbmZpYW4= 49081\nb2xsb3c= 49082\nYW1ldA== 49083\nINGX0YU= 49084\n56ys5LqM5YCL 49085\nZmZpY2llbmN5 49086\nIHVuZ2xhdWI= 49087\naWdhbnM= 49088\nIG1hcmtldGVk 49089\nIFZBTg== 49090\nIHByb2NsYWltZWQ= 49091\nIGPDqWx1bGFz 49092\nIGNvbGxpZGU= 49093\nIE9jdWx1cw== 49094\nYWRvcmU= 49095\nSmk= 49096\nIHN1c3RhaW5pbmc= 49097\nIEZhc2M= 49098\nIHNldHp0 49099\nIG5vc2FsdHJlcw== 49100\nTW9zdA== 49101\nINCy0Yc= 49102\nIG5hdWM= 49103\nIEJoYXI= 49104\n54i454i4 49105\n5oiR6Lef5L2g6Kyb 49106\nIHnDqnU= 49107\nIHRpbWVzdA== 49108\nIHBlcnRhbWE= 49109\naXJtaQ== 49110\nIHp3cg== 49111\nIHZlcmJlc3M= 49112\nIHZvcnRleA== 49113\nIFNUQUNL 49114\n2KvYsQ== 49115\nuYTr 49116\nlJTsmKQ= 49117\nIGxpbmthZ2U= 49118\nIEZyYXNlcg== 49119\nZW5hcmlv 49120\nIOudvOuKlA== 49121\nIOyEoOuwsA== 49122\naHRoYWw= 49123\nIOq5jA== 49124\nIEtow7RuZw== 49125\nw4M= 49126\nIHNjcmFtYmxlZA== 49127\nIEVpbms= 49128\nIG1pY3Jvb3JnYW4= 49129\nIG5hcmNpc3Npc3Q= 49130\nIEtvbWJhdA== 49131\nIOunoQ== 49132\nIEFHQQ== 49133\nIHBlcmZla3Q= 49134\nIFNlcmll 49135\nZGV0ZXJt 49136\nLSc= 49137\nIHBvbnl0YWls 49138\nIGtvc2th 49139\n7JM= 49140\nIG9iZWM= 49141\nIGNoZXN0cw== 49142\ndmVlcg== 49143\nIHVwcmlzaW5n 49144\nIHN0b2tlZA== 49145\nYXNzb2Np 49146\nIHByb2R1w6fDo28= 49147\nIFNoYXBl 49148\n7KCc6rCA 49149\nIOuUsA== 49150\nIGpvbg== 49151\nIGluYWR2ZXJ0 49152\nYW50YXM= 49153\nINC90LDQutC+0L3QtdGG 49154\nIOWwjeWVig== 49155\nIEFyc2VuYWw= 49156\nIHByb3RlZw== 49157\nIGxpYmVydMOp 49158\nIGdsYXJl 49159\n5Yia 49160\n5bey57uP 49161\nIHZlcmVpbg== 49162\nIGluc2VydHM= 49163\nIEphbmE= 49164\nIHd5ZGFqZQ== 49165\nxYJ1bQ== 49166\nICUu 49167\nb3JpZ2luZQ== 49168\nIHN5bmFnb2d1ZQ== 49169\nIGZhbGxhaXQ= 49170\nIGRpc29iZWQ= 49171\nIGFudGlj 49172\nIEN5Y2w= 49173\nIGFzeW5jaHJvbm91cw== 49174\nIOuyjOyNqA== 49175\nIGdlc3VuZA== 49176\nIGdhZ24= 49177\nIHBlYQ== 49178\nIGdyaW4= 49179\nw6lzdA== 49180\nIHNhdWM= 49181\nIE3DpGQ= 49182\n7ZW064+E 49183\ncHBz 49184\nIM61z4DOuQ== 49185\nIHBldXBsZQ== 49186\nIGRlYmVu 49187\nIEJyZWU= 49188\nINGA0L7Qu9GM 49189\nINC60LDQutC40Lw= 49190\nIMO6dGls 49191\nIGRpc3RyaWJ1dG9y 49192\n0LDQu9GL 49193\nIHN3b2rEhQ== 49194\nIGZvbGtsb3Jl 49195\nIHJlY2VpdmVycw== 49196\nIE1PTw== 49197\nYmlucw== 49198\nYXN0cmU= 49199\n7JWI6w== 49200\nIOuEo+qzoA== 49201\nIG11bHRpbWVkaWE= 49202\nIGdlYmF1dA== 49203\n0L7QstGL0YU= 49204\nw6N5 49205\nIGRhbmU= 49206\nb2tvbA== 49207\nZW1pdGlzbQ== 49208\nT05FWQ== 49209\nIHlhxJ8= 49210\nIGNoYXVmZg== 49211\n5a655piT 49212\nIGVzZnVlcg== 49213\nxINu 49214\nZXJ0YXM= 49215\nIGZvbmN0aW9ubmU= 49216\nb21pbmE= 49217\nIGl2b3J5 49218\nIFlvdXR1YmVy 49219\nIFNreXdhbGtlcg== 49220\n0LjRh9C10YHQutCw0Y8= 49221\ndG9p 49222\nIHZleWE= 49223\nIGdlbGVybnQ= 49224\nIGNoYW5jZWxsb3I= 49225\nIFN0YXRpc3RpY3M= 49226\nIHdlbGRlZA== 49227\nIG9uZGFu 49228\nIFNlaQ== 49229\nIG1lZGljYWxseQ== 49230\nIGVuZXJnaXplZA== 49231\nIFZpYQ== 49232\nINCy0LjQug== 49233\nIHVuaW50ZXI= 49234\nIGhpZ2huZXNz 49235\nIO2MlOs= 49236\nIGFtcGxpZmllZA== 49237\nIFNlcmdleQ== 49238\nIE1pbnM= 49239\nd2FybQ== 49240\ncGVsbA== 49241\nb3BoaWxl 49242\nIGjDqA== 49243\nIEJlbG8= 49244\nIFNrZXRjaA== 49245\nIGNoYXJhY3Rlcml6YXRpb24= 49246\nYW5zZW4= 49247\nINGC0YPRgA== 49248\nIOOFi+OFi+OFiw== 49249\nTm90ZQ== 49250\nIGtvxZ8= 49251\nIGNpZXJ0 49252\nZmx1 49253\nIGJhaHQ= 49254\nIERvd250b3du 49255\nIENSSVM= 49256\nb2RpZQ== 49257\nMTQw 49258\nIGxpdHJlcw== 49259\nIGdyaWV2 49260\n5qeY 49261\nIOyUqOqwgA== 49262\nIHN1Y2NlZWRz 49263\nIF9f 49264\nZW50aW5n 49265\nIHZpbW9z 49266\nIHPDrA== 49267\nZGVmZW5zZQ== 49268\nIE1jRA== 49269\nIE1hcmlvbg== 49270\nIERvbnQ= 49271\nIEREUg== 49272\nIExhemFy 49273\nIERBUg== 49274\nIGt1dg== 49275\nS24= 49276\nIHNlbWJsYQ== 49277\nIGFpcmJvcm5l 49278\nIFZpb2xlbmNl 49279\n65CQ 49280\nIHJlc3RyYWludA== 49281\nIHdoaXN0bGVz 49282\nIHNjb2xkZWQ= 49283\nIGFjY2Vzbw== 49284\nIGFic29sdXRhbWVudGU= 49285\nIFR5bA== 49286\nIFNhcA== 49287\ntoDrtoQ= 49288\naXTDpHRlbg== 49289\nYWRlbQ== 49290\nIMO9 49291\nIHByZXNjcmliZQ== 49292\nIE1hZ2U= 49293\nIEhlbGVuYQ== 49294\n5b6I5pyJ 49295\n5Lqy 49296\ndnQ= 49297\nIHZpZW5lbg== 49298\nIHNuZWV6 49299\nIG1vbMOp 49300\nxrDhu59uZw== 49301\nIHRyYW5zcG9ydGluZw== 49302\nIExlYW4= 49303\nIGt1bmc= 49304\n0YPRgNCw 49305\nz4TOrQ== 49306\ndXRjaGVz 49307\nb25kZXJz 49308\nbGl5b3I= 49309\nTmF0 49310\nIHppag== 49311\nIG1hbW1hbA== 49312\nIGvDpHl0 49313\nIEpvYW5uYQ== 49314\nc2VudA== 49315\nIOCkuA== 49316\nIHZlc3RlZA== 49317\nIEVyZmFocnVuZw== 49318\nb2tlZQ== 49319\nIGNsaXBwaW5n 49320\nIExpc3RlbmluZw== 49321\nICgj 49322\nZsO2 49323\nIHZpZGFyZQ== 49324\nIGJyaXR0bGU= 49325\nIFNUQVJU 49326\nIERhbWFz 49327\nIFlvZw== 49328\n44KT44Go 49329\nZ2FydA== 49330\nIHZlcmxpZXI= 49331\nIGhlYXJ0ZmVsdA== 49332\nIGRvxZvEhw== 49333\n7LmY6rCA 49334\nLsK7 49335\nIG1heGltYWw= 49336\nIGRpc3RpbnRvcw== 49337\nIOyZnOuDkO2VmOuptA== 49338\nIHNhaWxlZA== 49339\nIGNvbnZleWVk 49340\nIFRpbmRlcg== 49341\nIFNVUEVS 49342\n0L3QuNGG0YM= 49343\nY29udHJvbGxlZA== 49344\nIGZ1bno= 49345\nIGJhc3RhcmRz 49346\nIEdpbnNidXJn 49347\nIG51b3Zv 49348\nIFBlcmU= 49349\nIEpFUw== 49350\nIERpbmdlbg== 49351\nIEJldHM= 49352\ndW1iYQ== 49353\nYWNjacOzbg== 49354\nIOyeiOyngOunjA== 49355\nIHJldHJh 49356\nIExhdXJlbnQ= 49357\nIHBvenk= 49358\nIGdyb292ZXM= 49359\nIG3DoXF1aW5h 49360\nIG1pbmlvbg== 49361\nIGRlaW5lbg== 49362\nIFNoYXVu 49363\n15nXmQ== 49364\nIGhvbm9yYXJ5 49365\nb3NhdXJ1cw== 49366\nIHplaXQ= 49367\nIGVzcGVjaWU= 49368\nIEJDRQ== 49369\n0LDRgtC1 49370\nSnVzdGlu 49371\nIFdoZWVscw== 49372\nIOydtO2VtA== 49373\nINio2YrZhg== 49374\nIHByb3B1bHNpb24= 49375\nIHBlcmNlYmVy 49376\nIE5ld21hbg== 49377\n5bQ= 49378\nY3Vsb3Npcw== 49379\nTWk= 49380\nINCw0LrQutGD 49381\nIG1hc3RlcmluZw== 49382\nIGzDpGg= 49383\nIGZpc3Rz 49384\n5LuU 49385\nIG1hcmluYWRl 49386\nTGlsbHk= 49387\nIOuFuOugpQ== 49388\nIFlI 49389\nIHVyZ2VudGx5 49390\nIGluZm9ybWF0aW9uYWw= 49391\nIGFjb3Jkbw== 49392\naXp6eQ== 49393\n44GE44GP 49394\n7J207Ja0 49395\naW1hcg== 49396\nIOuCmOyYpOs= 49397\nIHR3ZW50aWVz 49398\nIHJhc3A= 49399\nIGJ1bXB5 49400\n2KjYqQ== 49401\nd29ya2Vy 49402\nIHF1aWNrZXN0 49403\nIGF0dGFjaGVz 49404\n0LLQuNCz 49405\nIOuCmO2DgOs= 49406\nIHB1cmVl 49407\nIG92ZXJzaXplZA== 49408\nIHN0aXJyZWQ= 49409\nIGpha2lt 49410\nIGhvbWljaWRl 49411\n44KC44GX 49412\naXNjaWxsYQ== 49413\nIOyxmQ== 49414\nIHNwZWN1bGF0aXZl 49415\nIGFzc2lzdHM= 49416\nbWFpbg== 49417\nasOkaHI= 49418\naW5kZXQ= 49419\nIMWfdXI= 49420\nIGZvcmVjYXN0cw== 49421\nIGRpdmVyc2lvbg== 49422\nIHRhcmU= 49423\nIG9nbA== 49424\nIE9yZ2FuaXNhdGlvbg== 49425\nIENoZXZ5 49426\nIGJhamE= 49427\nYW5kxLFy 49428\nINmI2YTYpw== 49429\nIHJhZGlhbnQ= 49430\nIGxpYWlzb24= 49431\nIGRlbW9rcmF0 49432\nIE1BUkM= 49433\nz4DOv8+F 49434\nIHJ1bnQ= 49435\nIHByw6ljaXM= 49436\nIGdldmVu 49437\nIHbDqWhpYw== 49438\nIEpFU1M= 49439\nU1RS 49440\nIOyWmOs= 49441\nIHZpc2lvbmFyeQ== 49442\nIGJ1cmFkYW4= 49443\nIOOBguOCig== 49444\nIHJlYmlydGg= 49445\nIGV4aGliaXRlZA== 49446\nIE1ldGFsbA== 49447\nb2xpZQ== 49448\nZWx5bg== 49449\nIGZsYXZvdXJz 49450\nIGVzY3JpdG8= 49451\nIERlbGV0ZQ== 49452\nIOyVjOyVmOyWtA== 49453\nINGD0LrRgNCw0ZfQvQ== 49454\nIGludGVycnVwdGluZw== 49455\nIGlkZW50aWZpYw== 49456\nIFN1enVraQ== 49457\nIExhbmRpbmc= 49458\n5Lu25LqL5oOF 49459\nYW5kaQ== 49460\nIGVzdHJhbg== 49461\nIGNvdWxldXI= 49462\nIGFncmFk 49463\nIFNueQ== 49464\nIOCuh+Cusg== 49465\nIGFuZGVy 49466\nIHJ1YQ== 49467\nIHByaXNl 49468\nIGxhdXJl 49469\nIO2KgA== 49470\nIG1vZGVyYXRpb24= 49471\nIGVyZmFocmVu 49472\nIGRlY29uc3Q= 49473\nIFJlZXNl 49474\nIFBL 49475\nZXRvcw== 49476\n44GT44KM44Gn 49477\nIEdyYXZpdHk= 49478\nIEVyZW4= 49479\nIG92ZXJib2FyZA== 49480\nIG3DvHNzdA== 49481\nIEVtYWls 49482\n0LXRgNC8 49483\neWRp 49484\nacSZZHp5 49485\nIExPVQ== 49486\nIEZ1w59iYWxs 49487\nIFJE 49488\nYWx0cw== 49489\nIOyKpO2KuOs= 49490\nINCa0YDQsNGB 49491\nIHRlbGV2 49492\nINGA0L4= 49493\nIHJlc2lnbmF0aW9u 49494\nIGppbmdsZQ== 49495\nIFN0dWRpZW4= 49496\nIElY 49497\nIFNlbnRpbmVs 49498\nIFBhbmc= 49499\n6YQ= 49500\nSmFrZQ== 49501\nIHBlcnNvbmFnZW0= 49502\nIG3DqWRpYQ== 49503\nIENoZXJu 49504\nYW50aWNhbGx5 49505\nIHRo4budaQ== 49506\nIHBhcmFseXNpcw== 49507\nIGphcGFuZXNl 49508\nIGNvbmV4 49509\nIGVmaWM= 49510\nIHVuZGVyc2lkZQ== 49511\nIG5lb2w= 49512\nIGZpYW4= 49513\n0LjQvNC+0YHRgtGM 49514\nIHF1aXJreQ== 49515\nIHBpc3Rh 49516\nIENsZW1lbnQ= 49517\nbm90aGluZw== 49518\nINC/0L7QtdGF 49519\nIGhvcnJlbmQ= 49520\nIGNvbnNvbGlkYXRl 49521\ncGxveXM= 49522\nZW1ha2Vy 49523\nSmVubmlmZXI= 49524\nIG51bcOpcm8= 49525\nIGZhbW9zbw== 49526\nIE5lcHR1bmU= 49527\nIO2WiOyWtA== 49528\nINC/0YDQtdC30LjQtA== 49529\nIHNpdGNvbQ== 49530\nIHNlcmlv 49531\nIG11ZQ== 49532\nIGdsYW5kcw== 49533\nIGLDtnJqYXI= 49534\nIFlK 49535\nIFJpb3Q= 49536\ncGFyYWd1cw== 49537\nIHNlZ3VyYW7Dp2E= 49538\nIGltbWF0dXJl 49539\nIE1hZG9ubmE= 49540\n4LiN 49541\nIGxpbmdlcmluZw== 49542\nIGFjZXNzbw== 49543\nIE9yaWVudA== 49544\nIFJlY29tbQ== 49545\nIGNvbXBsYWM= 49546\nZm91bmRlZA== 49547\nYXR0ZW5k 49548\nIGNpZWxv 49549\nIFpoYW4= 49550\nbmFpcmVz 49551\nY2Nv 49552\nINeQ16A= 49553\nIHN0YXRh 49554\nIGNvbnRyYWRpY3Rvcnk= 49555\nIFPDqQ== 49556\nIFNBTg== 49557\nIENvbm5pZQ== 49558\nIOuLueyLnA== 49559\nINGB0LDQvNC+0Lk= 49560\nIG1hamVzdGlj 49561\nIFBlbmd1aW4= 49562\nIENPTUU= 49563\nw61jaW9z 49564\ncGVybw== 49565\nIG1n 49566\nIGZhdWM= 49567\nIGNvcnJlcg== 49568\nIEdvdHRlcw== 49569\nIEFuZ2xv 49570\nSGFy 49571\n4buXaQ== 49572\nIHZpdGVzc2U= 49573\nIGFubm91bmNlcg== 49574\nIE9tYWhh 49575\na3Vt 49576\nIHNwYXJlZA== 49577\nINGA0LDQt9Cw 49578\nINC/0L7Qu9GD0YfQuNGC0YHRjw== 49579\nIHTDpGjDpG4= 49580\nINC/0L7QvdCw0LQ= 49581\nIHBlcnRhaW5pbmc= 49582\nIFJhdGU= 49583\naWVybg== 49584\nR29sZA== 49585\nIHRlc3Rl 49586\nIGRlxJ9pbGQ= 49587\nIGRhbXBpbmc= 49588\nIFBhcnRuZXJzaGlw 49589\nenlzdGE= 49590\nZ2VsZA== 49591\nIHNtb2tlcw== 49592\nIE1hcnJpYWdl 49593\n7Kq97JeQ 49594\n6IWz 49595\naXNjZQ== 49596\nIHRyeW5h 49597\nIERpcmVjdG9yeQ== 49598\nIOuCmOyYrA== 49599\nIHNoYW1lZnVs 49600\nIG1lbnRyZQ== 49601\nIGFzc2lnbmluZw== 49602\n5piv6YCZ5qij 49603\nIHJlcGVydG9pcmU= 49604\nIG9iamV0b3M= 49605\n56ix 49606\nIHVuZGVyd29ybGQ= 49607\nIGVuZGVhdm9ycw== 49608\nIGlnbml0ZQ== 49609\nINmI2Kw= 49610\nIGV4cGVyaWVudA== 49611\nINCX0LDQvw== 49612\nINC30LDQutC70Y7Rhw== 49613\nIHZvbHRhZ2Vz 49614\nIG5pZWdv 49615\nIGRlZmljaXRz 49616\nIGJ1ZW5vcw== 49617\nIFNsZWVwaW5n 49618\nIFNhbGVt 49619\nIHVubG9ja2luZw== 49620\nIGludGVyYWN0ZWQ= 49621\nIGVudGVuZGV1 49622\nIFN1cGVyaW50ZW5kZW50 49623\nIHN6Y3plZ8OzbA== 49624\nIHF1YXM= 49625\nIHBhbGluZw== 49626\nIGtobw== 49627\n2KjYrQ== 49628\nIGNvbGFib3I= 49629\nINC/0YDQuNCz0L7RgtC+0LI= 49630\nIG1hdXY= 49631\nIEp1ZGFz 49632\nIEFzc2lzdA== 49633\nINGC0LXRgNGA0Lg= 49634\nINC90LDRgdC60L7Qu9GM0LrQvg== 49635\nIHN1YnNpZHk= 49636\nIEVtYmFzc3k= 49637\nIGRhZ2Vu 49638\nIFNhbnRv 49639\n6Iis 49640\n16nXldeR 49641\nIGFicnVwdGx5 49642\nIEFkYXB0 49643\nIHZhYWs= 49644\nIHBvc3RhbA== 49645\nIGludmVzdGly 49646\nIGZpcXVlaQ== 49647\nIGRvd250aW1l 49648\nIFdlYmI= 49649\nIE5DQUE= 49650\nIEVzdG95 49651\n0L7Qu9C+0YI= 49652\nIOyCrOqxtA== 49653\nIG5hdGlvbmFsaXN0 49654\nIEthdGhyeW4= 49655\nIEtvcA== 49656\n6ao= 49657\nU2Vhbg== 49658\nT05B 49659\nIEJq 49660\n16LXnQ== 49661\nw61i 49662\naWRhbWVudGU= 49663\nINCz0LvQsNC30LA= 49664\nIHVubmll 49665\nIGdlbWFha3Q= 49666\nIElOVEVSVklFV0VS 49667\nIEhhdXQ= 49668\nzq/Ovw== 49669\nZ2VvaXM= 49670\nd3lkZA== 49671\nINC60L7Qu9C4 49672\nIHRpZ2h0ZW5lZA== 49673\nIHBsYW5uZXJz 49674\nIGhlcnVt 49675\nIGfDtnLDvG4= 49676\nIGVsZWN0cm9uaWNhbGx5 49677\nIGNlcmFt 49678\nIOuLpOyWke2VnA== 49679\nIGVwaWxlcHN5 49680\nIGXEnw== 49681\nbGlucw== 49682\nIFNoaW55 49683\n5qCh 49684\nINGB0L7Qu9C9 49685\nIG1hY2Fyb24= 49686\nIGltcGFjdG8= 49687\nIFZlZ2Fu 49688\nemXFhA== 49689\nIFJhcGhh 49690\nIFBhcnM= 49691\nIExFTw== 49692\n44GK44Gj 49693\nY8O8 49694\nINec15TXmdeV16o= 49695\nIMOkaG5saWNo 49696\nIGZsb3Nz 49697\nIEFa 49698\nIG3DtmNodGVu 49699\nIGdyb29taW5n 49700\nIGdyYXNzZXM= 49701\ncmFuY2g= 49702\nIHJlY2liaXI= 49703\nIGJvdW5jeQ== 49704\nIEhvYmJ5 49705\nIHZpa3RpZw== 49706\nIGJlZ2l0dQ== 49707\nIFBpY2Fzc28= 49708\nIEt1c2g= 49709\n66qo 49710\nIG9ic3RydWN0aW9u 49711\nIOu2hOychA== 49712\nIG1pY3JvYg== 49713\nIFdlc3RtaW5zdGVy 49714\ncm9wcw== 49715\nZHVs 49716\nIGRldm8= 49717\nIExlaHJlcg== 49718\nIEFkdmlzb3I= 49719\ndWNrZW4= 49720\nINCx0YPQvA== 49721\nIGZsYXR0ZXJpbmc= 49722\nIFRydW1hbg== 49723\nIFNlbXByZQ== 49724\nIE1jQ2Fpbg== 49725\nIEhpbmR1cw== 49726\nSnVsaWE= 49727\nIHdhdGVyc2hlZA== 49728\nIGx1c2g= 49729\n7KCE6w== 49730\nQmVmb3Jl 49731\nINCS0YLQvtGA 49732\nIFNhYVM= 49733\nIHNpdHp0 49734\nIGJlZXRsZQ== 49735\nIEVzc2VudGlhbA== 49736\nZW5rbw== 49737\nIOuVjOuPhA== 49738\nIHJldnZpbmc= 49739\nIHBvb3Jlcg== 49740\nIGNvZXJj 49741\nIGlkZWU= 49742\nIGNvw7s= 49743\nYWxldA== 49744\nIHpkcm93 49745\nIGZlbmRlcg== 49746\nZ3Jvd3Ro 49747\nRElORw== 49748\nIHpkZQ== 49749\n5LiK6Z2i 49750\nRU5UUw== 49751\nIGZhY2V0cw== 49752\n6Zqq 49753\ndXNoaW1h 49754\nIMWfZWg= 49755\nIHBhcmFzaXRl 49756\nIGxhcHNl 49757\nIE1lZXI= 49758\nIEt1bmQ= 49759\nIHNsb2c= 49760\nIGJydW5jaA== 49761\nIENoYXJ0 49762\nYXJ6 49763\nIE1VUw== 49764\nIG9mZmVuc2Vz 49765\nIGluZ2zDqXM= 49766\nIGZvbGlhZ2U= 49767\nb3BsYW4= 49768\nQXV0 49769\nIEphY3F1 49770\ndGFr 49771\naWVtYnJl 49772\nIHhlbg== 49773\nIG5vbWluZWVz 49774\nIGJpb21lZGljYWw= 49775\nw6lzdXM= 49776\nIGVzdHV2 49777\nz4TPjA== 49778\nQVRIQU4= 49779\nIO2VnOuNsA== 49780\nIGhlZWQ= 49781\nY3Jvc3N0YWxr 49782\nQmlsbA== 49783\nIHNwb3VzZXM= 49784\nINGB0Y7Qtg== 49785\nIHZlcnNv 49786\nIFN2ZW4= 49787\nIENhdQ== 49788\nY3V6 49789\nIOuztOyEuOyalA== 49790\nINGF0L7Qt9GP 49791\nIG1vY2tpbmc= 49792\nIE9uYQ== 49793\nIETDoQ== 49794\nIGZydWl0ZnVs 49795\nIGJhbnF1ZXQ= 49796\ndWRkaW5n 49797\naW5jdGlvbnM= 49798\nZGVydA== 49799\nc3Vk 49800\nIGRlc2Nvbg== 49801\nIEpD 49802\nIMKn 49803\nIHB1Ymxp 49804\n64iI 49805\n6YGV44GG 49806\nIGVudHNjaGllZGVu 49807\nIFJPSQ== 49808\n44GN44Gf 49809\nIOyDneqyvA== 49810\nIGvDpHl0dA== 49811\neWFuaQ== 49812\nc2hhdw== 49813\nIHVubGVhc2g= 49814\nIG1hbm5l 49815\nIGhpc3RvZ3JhbQ== 49816\n5oql 49817\n4Lit4Liw4LmE4Lij 49818\nIGdu 49819\nIGZlbGxh 49820\nIGVpbmdlcw== 49821\nIEJ1aWx0 49822\nIHJlcHJlc2VudGE= 49823\nIHB1bmlzaGluZw== 49824\nIG91dHNpZGVycw== 49825\n0L3Rg9GC0YzRgdGP 49826\nY3VycmVudA== 49827\nIGZhbWlsaWFyaXR5 49828\nINC00LjQsg== 49829\nIHByb2pldHM= 49830\nIGFxdWVsZXM= 49831\nIEdsdWU= 49832\ndGhvc2U= 49833\nIGluY2VwdGlvbg== 49834\nIGFxdWVsbG9z 49835\nIGlsbHVzaW9ucw== 49836\nIGF0dGVuZHM= 49837\ncmVzZQ== 49838\nIHN3YXJt 49839\nIHN3YWI= 49840\nIHJlZ2FyZGV6 49841\nIHBvc2nDp8Ojbw== 49842\nIGFraGly 49843\nIGV4dHJhY3Rpbmc= 49844\nIGFuZWNkb3Rl 49845\nIFRhbGU= 49846\nINCy0LjQvQ== 49847\nIGFiZ2Vz 49848\nIG9sdcWf 49849\nIGNvbXBsaWNhZG8= 49850\nIGNvdmFyaQ== 49851\n0ZbRgtGM 49852\nRGVy 49853\nINeZ15Q= 49854\nRm9ybQ== 49855\nIOyWtOyojOuToA== 49856\nIHJlYWRhYmxl 49857\nIGluaGliaXQ= 49858\nIGRlY2lwaGVy 49859\nIEFuZ3J5 49860\ncGc= 49861\n4K614K6k 49862\nINGB0L7QsdGB0YLQstC10L3QvdC+ 49863\nIHNhbWg= 49864\nIGVzY3I= 49865\nIGVuY29tcGFzc2Vz 49866\nIGF1c3Rlcg== 49867\nIGNvbmZpc2M= 49868\nIE1hbmRhbA== 49869\nIH0= 49870\nYXRjaGVy 49871\nPSM= 49872\n55qE5pe25YCZ 49873\nINC60LjQvdC+ 49874\nIHN0YWw= 49875\nbHVuZ3M= 49876\nIHZvbGU= 49877\nIHJlcXVpcw== 49878\nIOOCiA== 49879\nIHDDqW4= 49880\nIGxlY3R1cmVy 49881\nIGluc2NyaXB0aW9u 49882\nIGNlcnZpY2Fs 49883\nIFRyZWFzdXJl 49884\nIEpX 49885\nY29taW5ncw== 49886\nIGV5ZXNpZ2h0 49887\nIFRhaWxz 49888\nw61zaW1v 49889\nIHdvcmtzaGVldA== 49890\nIHN3aWZ0bHk= 49891\nIGNvbm9z 49892\nIGVsaW1pbmF0ZXM= 49893\nIEJsYXpl 49894\n0LDQu9C+0LM= 49895\nIHBpY3R1cmVk 49896\nIGdpcmFmZmU= 49897\nIExvZ2lj 49898\n5ZiJ 49899\nIGVucmljaG1lbnQ= 49900\nRml0 49901\nIHVuaW50ZW5kZWQ= 49902\nIHBlcnNlY3V0ZWQ= 49903\nYWthcA== 49904\n67CY 49905\nIGJhcmJlcg== 49906\nIGFyYmVpdGV0 49907\nIFN1cnByaXNpbmdseQ== 49908\nIEF1dG9i 49909\ndW5rdQ== 49910\ncHJvdg== 49911\nIExvY2g= 49912\nb2J5bA== 49913\nINC/0L7QtNCz0L7RgtC+0LI= 49914\nIMOpY29ub21pcXVl 49915\nIHBhdHQ= 49916\nIGNlYXNlZA== 49917\nINGB0L/QuNGB 49918\nIG51Y2xlaQ== 49919\nIGlzdGU= 49920\nIFdhZw== 49921\nIHp1cGXFgm5pZQ== 49922\nIHByb3ZlcmI= 49923\nIEFow60= 49924\n5Zue5Y67 49925\nbGlhbW8= 49926\nIHJlbGlhYmx5 49927\nIHBpaw== 49928\nIFRyYWRpbmc= 49929\nIENvbGVtYW4= 49930\nIM6xzr3OsQ== 49931\nIG1hZ2FyaQ== 49932\nIFBISUw= 49933\nIHNoZWRkaW5n 49934\nb2huZXI= 49935\nIHBvcm5vZ3JhcGh5 49936\nIGJlbmVmaWNpYXJpZXM= 49937\n4oCi 49938\nZW5pbg== 49939\nIHJlc29sdmluZw== 49940\nINGB0L/QvtGA0YI= 49941\nINCx0LXQsw== 49942\nIG5lY3Rhcg== 49943\ndWx0dXJh 49944\naW1zaWNhbA== 49945\njIDrpbw= 49946\n5bm05YmN 49947\n44GX44KD 49948\nIHZpc8Ojbw== 49949\n6YGO5L6G 49950\nw7/Dv8O/w7/Dv8O/w7/Dvw== 49951\nYXR0Zm9ybQ== 49952\nIOunnuuKlA== 49953\nIHBpbGdyaW1hZ2U= 49954\nIG1hdGluZw== 49955\nIFJlYXBlcg== 49956\nIEJyZWY= 49957\n55Sf5rS7 49958\nINeR15M= 49959\nIG5vdmFtZW50ZQ== 49960\nIGdyaWxsaW5n 49961\nIFdpcmVsZXNz 49962\nIFJvbWFuaWFu 49963\n0ps= 49964\n7Jyg6w== 49965\naGFpdA== 49966\nIEJvcmE= 49967\nQVJSWQ== 49968\nIGh5cG90aGVzZXM= 49969\n6ams 49970\naWt1dA== 49971\nIOyVhOuyhA== 49972\nINGW0Lc= 49973\nIG5hdGlvbmFsZQ== 49974\n2KrZiQ== 49975\nw7xsbHQ= 49976\nIMOpbMOpbWVudHM= 49977\nIFdhcmU= 49978\nICgt 49979\n0LDQu9GM0L3QvtC8 49980\nIGluZGljdA== 49981\nIFN0b25lcw== 49982\n44Gf44KB 49983\nZXhwbG9zaW9u 49984\nIOuDhOyDiA== 49985\nIGZlbGlj 49986\nIGp1ZGljaWFyeQ== 49987\nIGluY2FybmF0aW9u 49988\nIGlubmluZw== 49989\nIGZvcm11bA== 49990\nIHNoaXBtZW50 49991\nIHJlaW5kZWVy 49992\n5pKt 49993\nINC+0LfQvdCw0Yc= 49994\nIGVudm9s 49995\ndW5keQ== 49996\nINC30L3QsNGC0Yw= 49997\nINCy0LjQtNC10LvQuA== 49998\nIGV4Y2x1ZGluZw== 49999\nZGVhdGg= 50000\nIGJlcm0= 50001\nIHNvcHJhdHR1dHRv 50002\nIGRlYmlkbw== 50003\nIFppZw== 50004\nIE92 50005\nIEtFVklO 50006\nIFBhbGU= 50007\nIE1pcmU= 50008\nIGFuZGFy 50009\naW5jbHVkaW5n 50010\nIHN3YXBwZWQ= 50011\nIG1pc2NvbmNlcHRpb25z 50012\nIHNwb25n 50013\ncsOpYWw= 50014\nIG9yYml0YWxz 50015\nIGhhc2h0YWdz 50016\nb3JpdA== 50017\nIG1hdXZhaXM= 50018\n0LjRgdCw 50019\nIGxpdnJlcw== 50020\nIElQUw== 50021\nIDA0 50022\nw7Zn 50023\naW5zdHI= 50024\nINCy0L3QtdGI 50025\nIGhpY2U= 50026\naXPDqWU= 50027\nIG93ZXM= 50028\nIGVzaW1lcms= 50029\nIFVI 50030\nIGlycml0YXRpb24= 50031\nIGdpZ2dsZXM= 50032\nIGNvbG9uaWFsaXNt 50033\nIEJsaXNz 50034\nc3RyaW5ncw== 50035\nIHJldW5pdGVk 50036\nIFBzYWtp 50037\nd2FjaA== 50038\nIGNsaWZmcw== 50039\nIEZhbHNl 50040\nw6Rn 50041\ncGlwZQ== 50042\nIHdob3BwaW5n 50043\nIG1lcmluZ3Vl 50044\nIGJ1bmc= 50045\naW5kdXN0cmll 50046\nIGxlY2hl 50047\nIExveQ== 50048\nIGRyaWU= 50049\nIHBhc3NhdA== 50050\nIG9sZWg= 50051\nIGPDqXU= 50052\nIEdhYnJpZQ== 50053\nIHJlZWZz 50054\nIGJvbWJlcnM= 50055\nIGVwaXPDs2Rpbw== 50056\nIFJ1Zw== 50057\nIFByb3Nl 50058\nb25vcw== 50059\nIG9iZXNl 50060\nIGdvb2c= 50061\nIHBpYWNl 50062\nZmxhbnplbg== 50063\n6ZKf 50064\nIGZsYXBz 50065\nIEFsdG8= 50066\n6aOf44G5 50067\nRmlu 50068\nIHJlc2l6ZQ== 50069\n6re4656o 50070\n6LK7 50071\nTmF0aGFu 50072\nnojroKQ= 50073\nINGC0LDQuQ== 50074\nIE5GVA== 50075\nIHNuZWV6ZQ== 50076\nIHNocm91ZA== 50077\nacOp 50078\nIHZlcmFtZW50ZQ== 50079\nIGNhc2NhZGU= 50080\nIE9vaw== 50081\n7JeG7J20 50082\nIGluZnVzZWQ= 50083\nZnBz 50084\nY2VudGVy 50085\nIGdyYXBwbGluZw== 50086\nIFdvaG51bmc= 50087\nIFR1bWI= 50088\nIEltbWE= 50089\nIER1eWd1c2Fs 50090\n0LXQvdGC0Lg= 50091\nIHN0ZXdhcmRzaGlw 50092\nIGhhcnA= 50093\nIGVuZG9yc2Vk 50094\nxLFsYW4= 50095\nINC+0LTQvdC40Lw= 50096\nIGNvbXBldGVuY3k= 50097\nIGJlcnQ= 50098\nIFRhbGVz 50099\nIHJoZQ== 50100\nIG9oaA== 50101\nIOqwhOuLqA== 50102\nIG1STkE= 50103\nIGdhbmdzdGVy 50104\nIFJ1bm5lcg== 50105\n0LXQvdC90YvQvA== 50106\ncGhvcmlh 50107\nIHfFgmHFm2Npd2ll 50108\nIHF1YXJ0bw== 50109\nIG9yZ2FuaXNl 50110\nIFZldA== 50111\nUGFk 50112\nINmF2Ks= 50113\nIHN0aW5rcw== 50114\nIER1bA== 50115\ndWVt 50116\naXNpZWo= 50117\nVG9w 50118\nIHR1c3Nlbg== 50119\nIEVmZW5kaW1peg== 50120\nIEJvdWxl 50121\nIFNsb3Zlbg== 50122\nIEzDtg== 50123\n0ZHQtw== 50124\n0YDQuNC/ 50125\nY2F2ZQ== 50126\nIGJvw64= 50127\nIGFwb2xvZ2lzZQ== 50128\nIE1hcmx5 50129\nIEV4cG9ydA== 50130\nIENhaXRsaW4= 50131\nIHRhdmFsbGE= 50132\nIGVudGFpbHM= 50133\nIGJyb20= 50134\nIENvcGVuaA== 50135\nIHdhbG51dA== 50136\nIGluc2lzdHM= 50137\nIGN14buZYw== 50138\nIFF1aXQ= 50139\nIERldmljZQ== 50140\n15LXnQ== 50141\nIERPVA== 50142\nIHZlbG9jaWRhZA== 50143\nTElF 50144\nQ29vbA== 50145\nIHNhbml0YXRpb24= 50146\nIG9saG8= 50147\nIEVC 50148\nIO2ZleyLpO2eiA== 50149\nINCc0LjRhQ== 50150\nIHp1aw== 50151\nIHN1cm5hbWU= 50152\nIFNjaHVsZA== 50153\ncnVmZg== 50154\nY3VsdHVyYWw= 50155\nINGB0YLQvtC70YzQutC+ 50156\n5pma5LiK 50157\njOuNsA== 50158\nIHRvcnRv 50159\nIGJhY2t1cHM= 50160\n0YDQuNC5 50161\ncmVsYXg= 50162\nIHN5bmVyZ3k= 50163\nIGJ1ZmZz 50164\nIGFwbw== 50165\nIFdlbGxuZXNz 50166\ncm91bmRlZA== 50167\nIHVuaXZlcnNlcw== 50168\nIGZlcmE= 50169\nIHN0YW5kYnk= 50170\nIFNpbHZh 50171\nIEpJ 50172\nZW5zb3JlZA== 50173\nIOyXhuuLpA== 50174\nINCQ0LI= 50175\nINC+0YLQtNC10Ls= 50176\nIGbDuA== 50177\nIFJvY2tlZg== 50178\nIENvbXBhc3M= 50179\nIEJlYXJz 50180\nIOS4jeimgQ== 50181\nVHVybg== 50182\nIHRo4buxYw== 50183\nIHBvc3NpYmlsZQ== 50184\nIGVzdGVt 50185\nIENyb2F0aWE= 50186\nIHTDpHTDpA== 50187\nIENBTA== 50188\n4LmA4Lie 50189\nINGB0YLRgNCw0YU= 50190\nIHNhbHRz 50191\nIG1pbmltYWxpc3Q= 50192\nIGluY29ycG9yYXRlcw== 50193\nINmG24HbjNq6 50194\nYWNhbw== 50195\nIHNsYW1tZWQ= 50196\nIGNhbWE= 50197\nVGV4dA== 50198\nISEhISEh 50199\nIGFsY2Fueg== 50200\nw6ltYQ== 50201\nIGluY2Vuc2U= 50202\nIGhhcmRlbg== 50203\nIGdyYW50aW5n 50204\nIE5haQ== 50205\nIEZpcm1h 50206\nIGh5cG9j 50207\nam9i 50208\nIFJI 50209\nenVy 50210\n0LjQu9GP 50211\nIMW6 50212\nIGRhcmVz 50213\nYW5o 50214\nIOunjO2BvA== 50215\nIGN1ZXN0acOzbg== 50216\nIExpbWE= 50217\n5pmv 50218\nIGFzc3VudG8= 50219\nIElQTw== 50220\nIEJlbmdhbA== 50221\nIEJpZXI= 50222\nIHBzeWNoZQ== 50223\nIGFjcXVhaW50ZWQ= 50224\nIEfDvG4= 50225\n0L7Qt9C4 50226\nxZtjacSF 50227\nQUc= 50228\nIG1hbGZ1bmN0aW9u 50229\nIGFzdGVyb2lkcw== 50230\naXJleg== 50231\nYW1vcnBo 50232\nINGB0L7RgtGA0YPQtA== 50233\nIGZyZXNod2F0ZXI= 50234\nIGFycmFu 50235\nINC/0YDRiw== 50236\n0L3QvtCz 50237\nIGRpYWJldGlj 50238\nINmC2KfZhA== 50239\nIG9wcHJlc3M= 50240\nIGNhcGFjaXRhbmNl 50241\ncGVyZm9ybWFuY2U= 50242\nY3JhdGVz 50243\nIGFwb3N0bGU= 50244\nIEpFTg== 50245\nT1VMRA== 50246\nSW50cm8= 50247\nIHN0YWxscw== 50248\nIEFCT1VU 50249\nY3RpY2FtZW50ZQ== 50250\nIGRpbGlnZW50 50251\nIG1hbmlmZXN0cw== 50252\nIFBha2lzdGFuaQ== 50253\nICgn 50254\n5Zy6 50255\n= 50256\n"
  },
  {
    "path": "xinference/thirdparty/whisper/audio.py",
    "content": "import os\nfrom functools import lru_cache\nfrom subprocess import CalledProcessError, run\nfrom typing import Optional, Union\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\n\nfrom .utils import exact_div\n\n# hard-coded audio hyperparameters\nSAMPLE_RATE = 16000\nN_FFT = 400\nHOP_LENGTH = 160\nCHUNK_LENGTH = 30\nN_SAMPLES = CHUNK_LENGTH * SAMPLE_RATE  # 480000 samples in a 30-second chunk\nN_FRAMES = exact_div(N_SAMPLES, HOP_LENGTH)  # 3000 frames in a mel spectrogram input\n\nN_SAMPLES_PER_TOKEN = HOP_LENGTH * 2  # the initial convolutions has stride 2\nFRAMES_PER_SECOND = exact_div(SAMPLE_RATE, HOP_LENGTH)  # 10ms per audio frame\nTOKENS_PER_SECOND = exact_div(SAMPLE_RATE, N_SAMPLES_PER_TOKEN)  # 20ms per audio token\n\n\ndef load_audio(file: str, sr: int = SAMPLE_RATE):\n    \"\"\"\n    Open an audio file and read as mono waveform, resampling as necessary\n\n    Parameters\n    ----------\n    file: str\n        The audio file to open\n\n    sr: int\n        The sample rate to resample the audio if necessary\n\n    Returns\n    -------\n    A NumPy array containing the audio waveform, in float32 dtype.\n    \"\"\"\n\n    # This launches a subprocess to decode audio while down-mixing\n    # and resampling as necessary.  Requires the ffmpeg CLI in PATH.\n    # fmt: off\n    cmd = [\n        \"ffmpeg\",\n        \"-nostdin\",\n        \"-threads\", \"0\",\n        \"-i\", file,\n        \"-f\", \"s16le\",\n        \"-ac\", \"1\",\n        \"-acodec\", \"pcm_s16le\",\n        \"-ar\", str(sr),\n        \"-\"\n    ]\n    # fmt: on\n    try:\n        out = run(cmd, capture_output=True, check=True).stdout\n    except CalledProcessError as e:\n        raise RuntimeError(f\"Failed to load audio: {e.stderr.decode()}\") from e\n\n    return np.frombuffer(out, np.int16).flatten().astype(np.float32) / 32768.0\n\n\ndef pad_or_trim(array, length: int = N_SAMPLES, *, axis: int = -1):\n    \"\"\"\n    Pad or trim the audio array to N_SAMPLES, as expected by the encoder.\n    \"\"\"\n    if torch.is_tensor(array):\n        if array.shape[axis] > length:\n            array = array.index_select(\n                dim=axis, index=torch.arange(length, device=array.device)\n            )\n\n        if array.shape[axis] < length:\n            pad_widths = [(0, 0)] * array.ndim\n            pad_widths[axis] = (0, length - array.shape[axis])\n            array = F.pad(array, [pad for sizes in pad_widths[::-1] for pad in sizes])\n    else:\n        if array.shape[axis] > length:\n            array = array.take(indices=range(length), axis=axis)\n\n        if array.shape[axis] < length:\n            pad_widths = [(0, 0)] * array.ndim\n            pad_widths[axis] = (0, length - array.shape[axis])\n            array = np.pad(array, pad_widths)\n\n    return array\n\n\n@lru_cache(maxsize=None)\ndef mel_filters(device, n_mels: int) -> torch.Tensor:\n    \"\"\"\n    load the mel filterbank matrix for projecting STFT into a Mel spectrogram.\n    Allows decoupling librosa dependency; saved using:\n\n        np.savez_compressed(\n            \"mel_filters.npz\",\n            mel_80=librosa.filters.mel(sr=16000, n_fft=400, n_mels=80),\n            mel_128=librosa.filters.mel(sr=16000, n_fft=400, n_mels=128),\n        )\n    \"\"\"\n    assert n_mels in {80, 128}, f\"Unsupported n_mels: {n_mels}\"\n\n    filters_path = os.path.join(os.path.dirname(__file__), \"assets\", \"mel_filters.npz\")\n    with np.load(filters_path, allow_pickle=False) as f:\n        return torch.from_numpy(f[f\"mel_{n_mels}\"]).to(device)\n\n\ndef log_mel_spectrogram(\n    audio: Union[str, np.ndarray, torch.Tensor],\n    n_mels: int = 80,\n    padding: int = 0,\n    device: Optional[Union[str, torch.device]] = None,\n):\n    \"\"\"\n    Compute the log-Mel spectrogram of\n\n    Parameters\n    ----------\n    audio: Union[str, np.ndarray, torch.Tensor], shape = (*)\n        The path to audio or either a NumPy array or Tensor containing the audio waveform in 16 kHz\n\n    n_mels: int\n        The number of Mel-frequency filters, only 80 is supported\n\n    padding: int\n        Number of zero samples to pad to the right\n\n    device: Optional[Union[str, torch.device]]\n        If given, the audio tensor is moved to this device before STFT\n\n    Returns\n    -------\n    torch.Tensor, shape = (80, n_frames)\n        A Tensor that contains the Mel spectrogram\n    \"\"\"\n    if not torch.is_tensor(audio):\n        if isinstance(audio, str):\n            audio = load_audio(audio)\n        audio = torch.from_numpy(audio)\n\n    if device is not None:\n        audio = audio.to(device)\n    if padding > 0:\n        audio = F.pad(audio, (0, padding))\n    window = torch.hann_window(N_FFT).to(audio.device)\n    stft = torch.stft(audio, N_FFT, HOP_LENGTH, window=window, return_complex=True)\n    magnitudes = stft[..., :-1].abs() ** 2\n\n    filters = mel_filters(audio.device, n_mels)\n    mel_spec = filters @ magnitudes\n\n    log_spec = torch.clamp(mel_spec, min=1e-10).log10()\n    log_spec = torch.maximum(log_spec, log_spec.max() - 8.0)\n    log_spec = (log_spec + 4.0) / 4.0\n    return log_spec\n"
  },
  {
    "path": "xinference/thirdparty/whisper/decoding.py",
    "content": "from dataclasses import dataclass, field, replace\nfrom typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Sequence, Tuple, Union\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom torch import Tensor\nfrom torch.distributions import Categorical\n\nfrom .audio import CHUNK_LENGTH\nfrom .tokenizer import Tokenizer, get_tokenizer\nfrom .utils import compression_ratio\n\nif TYPE_CHECKING:\n    from .model import Whisper\n\n\n@torch.no_grad()\ndef detect_language(\n    model: \"Whisper\", mel: Tensor, tokenizer: Tokenizer = None\n) -> Tuple[Tensor, List[dict]]:\n    \"\"\"\n    Detect the spoken language in the audio, and return them as list of strings, along with the ids\n    of the most probable language tokens and the probability distribution over all language tokens.\n    This is performed outside the main decode loop in order to not interfere with kv-caching.\n\n    Returns\n    -------\n    language_tokens : Tensor, shape = (n_audio,)\n        ids of the most probable language tokens, which appears after the startoftranscript token.\n    language_probs : List[Dict[str, float]], length = n_audio\n        list of dictionaries containing the probability distribution over all languages.\n    \"\"\"\n    if tokenizer is None:\n        tokenizer = get_tokenizer(\n            model.is_multilingual, num_languages=model.num_languages\n        )\n    if (\n        tokenizer.language is None\n        or tokenizer.language_token not in tokenizer.sot_sequence\n    ):\n        raise ValueError(\n            \"This model doesn't have language tokens so it can't perform lang id\"\n        )\n\n    single = mel.ndim == 2\n    if single:\n        mel = mel.unsqueeze(0)\n\n    # skip encoder forward pass if already-encoded audio features were given\n    if mel.shape[-2:] != (model.dims.n_audio_ctx, model.dims.n_audio_state):\n        mel = model.encoder(mel)\n\n    # forward pass using a single token, startoftranscript\n    n_audio = mel.shape[0]\n    x = torch.tensor([[tokenizer.sot]] * n_audio).to(mel.device)  # [n_audio, 1]\n    logits = model.logits(x, mel)[:, 0]\n\n    # collect detected languages; suppress all non-language tokens\n    mask = torch.ones(logits.shape[-1], dtype=torch.bool)\n    mask[list(tokenizer.all_language_tokens)] = False\n    logits[:, mask] = -np.inf\n    language_tokens = logits.argmax(dim=-1)\n    language_token_probs = logits.softmax(dim=-1).cpu()\n    language_probs = [\n        {\n            c: language_token_probs[i, j].item()\n            for j, c in zip(tokenizer.all_language_tokens, tokenizer.all_language_codes)\n        }\n        for i in range(n_audio)\n    ]\n\n    if single:\n        language_tokens = language_tokens[0]\n        language_probs = language_probs[0]\n\n    return language_tokens, language_probs\n\n\n@dataclass(frozen=True)\nclass DecodingOptions:\n    # whether to perform X->X \"transcribe\" or X->English \"translate\"\n    task: str = \"transcribe\"\n\n    # language that the audio is in; uses detected language if None\n    language: Optional[str] = None\n\n    # sampling-related options\n    temperature: float = 0.0\n    sample_len: Optional[int] = None  # maximum number of tokens to sample\n    best_of: Optional[int] = None  # number of independent sample trajectories, if t > 0\n    beam_size: Optional[int] = None  # number of beams in beam search, if t == 0\n    patience: Optional[float] = None  # patience in beam search (arxiv:2204.05424)\n\n    # \"alpha\" in Google NMT, or None for length norm, when ranking generations\n    # to select which to return among the beams or best-of-N samples\n    length_penalty: Optional[float] = None\n\n    # text or tokens to feed as the prompt or the prefix; for more info:\n    # https://github.com/openai/whisper/discussions/117#discussioncomment-3727051\n    prompt: Optional[Union[str, List[int]]] = None  # for the previous context\n    prefix: Optional[Union[str, List[int]]] = None  # to prefix the current context\n\n    # list of tokens ids (or comma-separated token ids) to suppress\n    # \"-1\" will suppress a set of symbols as defined in `tokenizer.non_speech_tokens()`\n    suppress_tokens: Optional[Union[str, Iterable[int]]] = \"-1\"\n    suppress_blank: bool = True  # this will suppress blank outputs\n\n    # timestamp sampling options\n    without_timestamps: bool = False  # use <|notimestamps|> to sample text tokens only\n    max_initial_timestamp: Optional[float] = 1.0\n\n    # implementation details\n    fp16: bool = True  # use fp16 for most of the calculation\n\n\n@dataclass(frozen=True)\nclass DecodingResult:\n    audio_features: Tensor\n    language: str\n    language_probs: Optional[Dict[str, float]] = None\n    tokens: List[int] = field(default_factory=list)\n    text: str = \"\"\n    avg_logprob: float = np.nan\n    no_speech_prob: float = np.nan\n    temperature: float = np.nan\n    compression_ratio: float = np.nan\n\n\nclass Inference:\n    def logits(self, tokens: Tensor, audio_features: Tensor) -> Tensor:\n        \"\"\"Perform a forward pass on the decoder and return per-token logits\"\"\"\n        raise NotImplementedError\n\n    def rearrange_kv_cache(self, source_indices) -> None:\n        \"\"\"Update the key-value cache according to the updated beams\"\"\"\n        raise NotImplementedError\n\n    def cleanup_caching(self) -> None:\n        \"\"\"Clean up any resources or hooks after decoding is finished\"\"\"\n        pass\n\n\nclass PyTorchInference(Inference):\n    def __init__(self, model: \"Whisper\", initial_token_length: int):\n        self.model: \"Whisper\" = model\n        self.initial_token_length = initial_token_length\n        self.kv_cache = {}\n        self.hooks = []\n\n        key_modules = [block.attn.key for block in self.model.decoder.blocks]\n        value_modules = [block.attn.value for block in self.model.decoder.blocks]\n        self.kv_modules = key_modules + value_modules\n\n    def logits(self, tokens: Tensor, audio_features: Tensor) -> Tensor:\n        if not self.kv_cache:\n            self.kv_cache, self.hooks = self.model.install_kv_cache_hooks()\n\n        if tokens.shape[-1] > self.initial_token_length:\n            # only need to use the last token except in the first forward pass\n            tokens = tokens[:, -1:]\n\n        return self.model.decoder(tokens, audio_features, kv_cache=self.kv_cache)\n\n    def cleanup_caching(self):\n        for hook in self.hooks:\n            hook.remove()\n\n        self.kv_cache = {}\n        self.hooks = []\n\n    def rearrange_kv_cache(self, source_indices):\n        if source_indices != list(range(len(source_indices))):\n            for module in self.kv_modules:\n                # update the key/value cache to contain the selected sequences\n                self.kv_cache[module] = self.kv_cache[module][source_indices].detach()\n\n\nclass SequenceRanker:\n    def rank(\n        self, tokens: List[List[Tensor]], sum_logprobs: List[List[float]]\n    ) -> List[int]:\n        \"\"\"\n        Given a list of groups of samples and their cumulative log probabilities,\n        return the indices of the samples in each group to select as the final result\n        \"\"\"\n        raise NotImplementedError\n\n\nclass MaximumLikelihoodRanker(SequenceRanker):\n    \"\"\"\n    Select the sample with the highest log probabilities, penalized using either\n    a simple length normalization or Google NMT paper's length penalty\n    \"\"\"\n\n    def __init__(self, length_penalty: Optional[float]):\n        self.length_penalty = length_penalty\n\n    def rank(self, tokens: List[List[Tensor]], sum_logprobs: List[List[float]]):\n        def scores(logprobs, lengths):\n            result = []\n            for logprob, length in zip(logprobs, lengths):\n                if self.length_penalty is None:\n                    penalty = length\n                else:\n                    # from the Google NMT paper\n                    penalty = ((5 + length) / 6) ** self.length_penalty\n                result.append(logprob / penalty)\n            return result\n\n        # get the sequence with the highest score\n        lengths = [[len(t) for t in s] for s in tokens]\n        return [np.argmax(scores(p, l)) for p, l in zip(sum_logprobs, lengths)]\n\n\nclass TokenDecoder:\n    def reset(self):\n        \"\"\"Initialize any stateful variables for decoding a new sequence\"\"\"\n\n    def update(\n        self, tokens: Tensor, logits: Tensor, sum_logprobs: Tensor\n    ) -> Tuple[Tensor, bool]:\n        \"\"\"Specify how to select the next token, based on the current trace and logits\n\n        Parameters\n        ----------\n        tokens : Tensor, shape = (n_batch, current_sequence_length)\n            all tokens in the context so far, including the prefix and sot_sequence tokens\n\n        logits : Tensor, shape = (n_batch, vocab_size)\n            per-token logits of the probability distribution at the current step\n\n        sum_logprobs : Tensor, shape = (n_batch)\n            cumulative log probabilities for each sequence\n\n        Returns\n        -------\n        tokens : Tensor, shape = (n_batch, current_sequence_length + 1)\n            the tokens, appended with the selected next token\n\n        completed : bool\n            True if all sequences has reached the end of text\n\n        \"\"\"\n        raise NotImplementedError\n\n    def finalize(\n        self, tokens: Tensor, sum_logprobs: Tensor\n    ) -> Tuple[Sequence[Sequence[Tensor]], List[List[float]]]:\n        \"\"\"Finalize search and return the final candidate sequences\n\n        Parameters\n        ----------\n        tokens : Tensor, shape = (n_audio, n_group, current_sequence_length)\n            all tokens in the context so far, including the prefix and sot_sequence\n\n        sum_logprobs : Tensor, shape = (n_audio, n_group)\n            cumulative log probabilities for each sequence\n\n        Returns\n        -------\n        tokens : Sequence[Sequence[Tensor]], length = n_audio\n            sequence of Tensors containing candidate token sequences, for each audio input\n\n        sum_logprobs : List[List[float]], length = n_audio\n            sequence of cumulative log probabilities corresponding to the above\n\n        \"\"\"\n        raise NotImplementedError\n\n\nclass GreedyDecoder(TokenDecoder):\n    def __init__(self, temperature: float, eot: int):\n        self.temperature = temperature\n        self.eot = eot\n\n    def update(\n        self, tokens: Tensor, logits: Tensor, sum_logprobs: Tensor\n    ) -> Tuple[Tensor, bool]:\n        if self.temperature == 0:\n            next_tokens = logits.argmax(dim=-1)\n        else:\n            next_tokens = Categorical(logits=logits / self.temperature).sample()\n\n        logprobs = F.log_softmax(logits.float(), dim=-1)\n        current_logprobs = logprobs[torch.arange(logprobs.shape[0]), next_tokens]\n        sum_logprobs += current_logprobs * (tokens[:, -1] != self.eot)\n\n        next_tokens[tokens[:, -1] == self.eot] = self.eot\n        tokens = torch.cat([tokens, next_tokens[:, None]], dim=-1)\n\n        completed = (tokens[:, -1] == self.eot).all()\n        return tokens, completed\n\n    def finalize(self, tokens: Tensor, sum_logprobs: Tensor):\n        # make sure each sequence has at least one EOT token at the end\n        tokens = F.pad(tokens, (0, 1), value=self.eot)\n        return tokens, sum_logprobs.tolist()\n\n\nclass BeamSearchDecoder(TokenDecoder):\n    def __init__(\n        self,\n        beam_size: int,\n        eot: int,\n        inference: Inference,\n        patience: Optional[float] = None,\n    ):\n        self.beam_size = beam_size\n        self.eot = eot\n        self.inference = inference\n        self.patience = patience or 1.0\n        self.max_candidates: int = round(beam_size * self.patience)\n        self.finished_sequences = None\n\n        assert (\n            self.max_candidates > 0\n        ), f\"Invalid beam size ({beam_size}) or patience ({patience})\"\n\n    def reset(self):\n        self.finished_sequences = None\n\n    def update(\n        self, tokens: Tensor, logits: Tensor, sum_logprobs: Tensor\n    ) -> Tuple[Tensor, bool]:\n        if tokens.shape[0] % self.beam_size != 0:\n            raise ValueError(f\"{tokens.shape}[0] % {self.beam_size} != 0\")\n\n        n_audio = tokens.shape[0] // self.beam_size\n        if self.finished_sequences is None:  # for the first update\n            self.finished_sequences = [{} for _ in range(n_audio)]\n\n        logprobs = F.log_softmax(logits.float(), dim=-1)\n        next_tokens, source_indices, finished_sequences = [], [], []\n        for i in range(n_audio):\n            scores, sources, finished = {}, {}, {}\n\n            # STEP 1: calculate the cumulative log probabilities for possible candidates\n            for j in range(self.beam_size):\n                idx = i * self.beam_size + j\n                prefix = tokens[idx].tolist()\n                for logprob, token in zip(*logprobs[idx].topk(self.beam_size + 1)):\n                    new_logprob = (sum_logprobs[idx] + logprob).item()\n                    sequence = tuple(prefix + [token.item()])\n                    scores[sequence] = new_logprob\n                    sources[sequence] = idx\n\n            # STEP 2: rank the candidates and keep the top beam_size sequences for each audio\n            saved = 0\n            for sequence in sorted(scores, key=scores.get, reverse=True):\n                if sequence[-1] == self.eot:\n                    finished[sequence] = scores[sequence]\n                else:\n                    sum_logprobs[len(next_tokens)] = scores[sequence]\n                    next_tokens.append(sequence)\n                    source_indices.append(sources[sequence])\n\n                    saved += 1\n                    if saved == self.beam_size:\n                        break\n\n            finished_sequences.append(finished)\n\n        tokens = torch.tensor(next_tokens, device=tokens.device)\n        self.inference.rearrange_kv_cache(source_indices)\n\n        # add newly finished sequences to self.finished_sequences\n        assert len(self.finished_sequences) == len(finished_sequences)\n        for previously_finished, newly_finished in zip(\n            self.finished_sequences, finished_sequences\n        ):\n            for seq in sorted(newly_finished, key=newly_finished.get, reverse=True):\n                if len(previously_finished) >= self.max_candidates:\n                    break  # the candidate list is full\n                previously_finished[seq] = newly_finished[seq]\n\n        # mark as completed if all audio has enough number of samples\n        completed = all(\n            len(sequences) >= self.max_candidates\n            for sequences in self.finished_sequences\n        )\n        return tokens, completed\n\n    def finalize(self, preceding_tokens: Tensor, sum_logprobs: Tensor):\n        # collect all finished sequences, including patience, and add unfinished ones if not enough\n        sum_logprobs = sum_logprobs.cpu()\n        for i, sequences in enumerate(self.finished_sequences):\n            if (\n                len(sequences) < self.beam_size\n            ):  # when not enough sequences are finished\n                for j in list(np.argsort(sum_logprobs[i]))[::-1]:\n                    sequence = preceding_tokens[i, j].tolist() + [self.eot]\n                    sequences[tuple(sequence)] = sum_logprobs[i][j].item()\n                    if len(sequences) >= self.beam_size:\n                        break\n\n        tokens: List[List[Tensor]] = [\n            [torch.tensor(seq) for seq in sequences.keys()]\n            for sequences in self.finished_sequences\n        ]\n        sum_logprobs: List[List[float]] = [\n            list(sequences.values()) for sequences in self.finished_sequences\n        ]\n        return tokens, sum_logprobs\n\n\nclass LogitFilter:\n    def apply(self, logits: Tensor, tokens: Tensor) -> None:\n        \"\"\"Apply any filtering or masking to logits in-place\n\n        Parameters\n        ----------\n        logits : Tensor, shape = (n_batch, vocab_size)\n            per-token logits of the probability distribution at the current step\n\n        tokens : Tensor, shape = (n_batch, current_sequence_length)\n            all tokens in the context so far, including the prefix and sot_sequence tokens\n\n        \"\"\"\n        raise NotImplementedError\n\n\nclass SuppressBlank(LogitFilter):\n    def __init__(self, tokenizer: Tokenizer, sample_begin: int):\n        self.tokenizer = tokenizer\n        self.sample_begin = sample_begin\n\n    def apply(self, logits: Tensor, tokens: Tensor):\n        if tokens.shape[1] == self.sample_begin:\n            logits[:, self.tokenizer.encode(\" \") + [self.tokenizer.eot]] = -np.inf\n\n\nclass SuppressTokens(LogitFilter):\n    def __init__(self, suppress_tokens: Sequence[int]):\n        self.suppress_tokens = list(suppress_tokens)\n\n    def apply(self, logits: Tensor, tokens: Tensor):\n        logits[:, self.suppress_tokens] = -np.inf\n\n\nclass ApplyTimestampRules(LogitFilter):\n    def __init__(\n        self,\n        tokenizer: Tokenizer,\n        sample_begin: int,\n        max_initial_timestamp_index: Optional[int],\n    ):\n        self.tokenizer = tokenizer\n        self.sample_begin = sample_begin\n        self.max_initial_timestamp_index = max_initial_timestamp_index\n\n    def apply(self, logits: Tensor, tokens: Tensor):\n        # suppress <|notimestamps|> which is handled by without_timestamps\n        if self.tokenizer.no_timestamps is not None:\n            logits[:, self.tokenizer.no_timestamps] = -np.inf\n\n        # timestamps have to appear in pairs, except directly before EOT; mask logits accordingly\n        for k in range(tokens.shape[0]):\n            sampled_tokens = tokens[k, self.sample_begin :]\n            seq = [t for t in sampled_tokens.tolist()]\n            last_was_timestamp = (\n                len(seq) >= 1 and seq[-1] >= self.tokenizer.timestamp_begin\n            )\n            penultimate_was_timestamp = (\n                len(seq) < 2 or seq[-2] >= self.tokenizer.timestamp_begin\n            )\n\n            if last_was_timestamp:\n                if penultimate_was_timestamp:  # has to be non-timestamp\n                    logits[k, self.tokenizer.timestamp_begin :] = -np.inf\n                else:  # cannot be normal text tokens\n                    logits[k, : self.tokenizer.eot] = -np.inf\n\n            timestamps = sampled_tokens[\n                sampled_tokens.ge(self.tokenizer.timestamp_begin)\n            ]\n            if timestamps.numel() > 0:\n                # timestamps shouldn't decrease; forbid timestamp tokens smaller than the last\n                # also force each segment to have a nonzero length, to prevent infinite looping\n                if last_was_timestamp and not penultimate_was_timestamp:\n                    timestamp_last = timestamps[-1]\n                else:\n                    timestamp_last = timestamps[-1] + 1\n                logits[k, self.tokenizer.timestamp_begin : timestamp_last] = -np.inf\n\n        if tokens.shape[1] == self.sample_begin:\n            # suppress generating non-timestamp tokens at the beginning\n            logits[:, : self.tokenizer.timestamp_begin] = -np.inf\n\n            # apply the `max_initial_timestamp` option\n            if self.max_initial_timestamp_index is not None:\n                last_allowed = (\n                    self.tokenizer.timestamp_begin + self.max_initial_timestamp_index\n                )\n                logits[:, last_allowed + 1 :] = -np.inf\n\n        # if sum of probability over timestamps is above any other token, sample timestamp\n        logprobs = F.log_softmax(logits.float(), dim=-1)\n        for k in range(tokens.shape[0]):\n            timestamp_logprob = logprobs[k, self.tokenizer.timestamp_begin :].logsumexp(\n                dim=-1\n            )\n            max_text_token_logprob = logprobs[k, : self.tokenizer.timestamp_begin].max()\n            if timestamp_logprob > max_text_token_logprob:\n                logits[k, : self.tokenizer.timestamp_begin] = -np.inf\n\n\nclass DecodingTask:\n    inference: Inference\n    sequence_ranker: SequenceRanker\n    decoder: TokenDecoder\n    logit_filters: List[LogitFilter]\n\n    def __init__(self, model: \"Whisper\", options: DecodingOptions):\n        self.model = model\n\n        language = options.language or \"en\"\n        tokenizer = get_tokenizer(\n            model.is_multilingual,\n            num_languages=model.num_languages,\n            language=language,\n            task=options.task,\n        )\n        self.tokenizer: Tokenizer = tokenizer\n        self.options: DecodingOptions = self._verify_options(options)\n\n        self.n_group: int = options.beam_size or options.best_of or 1\n        self.n_ctx: int = model.dims.n_text_ctx\n        self.sample_len: int = options.sample_len or model.dims.n_text_ctx // 2\n\n        self.sot_sequence: Tuple[int] = tokenizer.sot_sequence\n        if self.options.without_timestamps:\n            self.sot_sequence = tokenizer.sot_sequence_including_notimestamps\n\n        self.initial_tokens: Tuple[int] = self._get_initial_tokens()\n        self.sample_begin: int = len(self.initial_tokens)\n        self.sot_index: int = self.initial_tokens.index(tokenizer.sot)\n\n        # inference: implements the forward pass through the decoder, including kv caching\n        self.inference = PyTorchInference(model, len(self.initial_tokens))\n\n        # sequence ranker: implements how to rank a group of sampled sequences\n        self.sequence_ranker = MaximumLikelihoodRanker(options.length_penalty)\n\n        # decoder: implements how to select the next tokens, given the autoregressive distribution\n        if options.beam_size is not None:\n            self.decoder = BeamSearchDecoder(\n                options.beam_size, tokenizer.eot, self.inference, options.patience\n            )\n        else:\n            self.decoder = GreedyDecoder(options.temperature, tokenizer.eot)\n\n        # logit filters: applies various rules to suppress or penalize certain tokens\n        self.logit_filters = []\n        if self.options.suppress_blank:\n            self.logit_filters.append(SuppressBlank(self.tokenizer, self.sample_begin))\n        if self.options.suppress_tokens:\n            self.logit_filters.append(SuppressTokens(self._get_suppress_tokens()))\n        if not options.without_timestamps:\n            precision = CHUNK_LENGTH / model.dims.n_audio_ctx  # usually 0.02 seconds\n            max_initial_timestamp_index = None\n            if options.max_initial_timestamp:\n                max_initial_timestamp_index = round(\n                    self.options.max_initial_timestamp / precision\n                )\n            self.logit_filters.append(\n                ApplyTimestampRules(\n                    tokenizer, self.sample_begin, max_initial_timestamp_index\n                )\n            )\n\n    def _verify_options(self, options: DecodingOptions) -> DecodingOptions:\n        if options.beam_size is not None and options.best_of is not None:\n            raise ValueError(\"beam_size and best_of can't be given together\")\n        if options.temperature == 0:\n            if options.best_of is not None:\n                raise ValueError(\"best_of with greedy sampling (T=0) is not compatible\")\n        if options.patience is not None and options.beam_size is None:\n            raise ValueError(\"patience requires beam_size to be given\")\n        if options.length_penalty is not None and not (\n            0 <= options.length_penalty <= 1\n        ):\n            raise ValueError(\"length_penalty (alpha) should be a value between 0 and 1\")\n\n        return options\n\n    def _get_initial_tokens(self) -> Tuple[int]:\n        tokens = list(self.sot_sequence)\n\n        if prefix := self.options.prefix:\n            prefix_tokens = (\n                self.tokenizer.encode(\" \" + prefix.strip())\n                if isinstance(prefix, str)\n                else prefix\n            )\n            if self.sample_len is not None:\n                max_prefix_len = self.n_ctx // 2 - self.sample_len\n                prefix_tokens = prefix_tokens[-max_prefix_len:]\n            tokens = tokens + prefix_tokens\n\n        if prompt := self.options.prompt:\n            prompt_tokens = (\n                self.tokenizer.encode(\" \" + prompt.strip())\n                if isinstance(prompt, str)\n                else prompt\n            )\n            tokens = (\n                [self.tokenizer.sot_prev]\n                + prompt_tokens[-(self.n_ctx // 2 - 1) :]\n                + tokens\n            )\n\n        return tuple(tokens)\n\n    def _get_suppress_tokens(self) -> Tuple[int]:\n        suppress_tokens = self.options.suppress_tokens\n\n        if isinstance(suppress_tokens, str):\n            suppress_tokens = [int(t) for t in suppress_tokens.split(\",\")]\n\n        if -1 in suppress_tokens:\n            suppress_tokens = [t for t in suppress_tokens if t >= 0]\n            suppress_tokens.extend(self.tokenizer.non_speech_tokens)\n        elif suppress_tokens is None or len(suppress_tokens) == 0:\n            suppress_tokens = []  # interpret empty string as an empty list\n        else:\n            assert isinstance(suppress_tokens, list), \"suppress_tokens must be a list\"\n\n        suppress_tokens.extend(\n            [\n                self.tokenizer.transcribe,\n                self.tokenizer.translate,\n                self.tokenizer.sot,\n                self.tokenizer.sot_prev,\n                self.tokenizer.sot_lm,\n            ]\n        )\n        if self.tokenizer.no_speech is not None:\n            # no-speech probability is collected separately\n            suppress_tokens.append(self.tokenizer.no_speech)\n\n        return tuple(sorted(set(suppress_tokens)))\n\n    def _get_audio_features(self, mel: Tensor):\n        if self.options.fp16:\n            mel = mel.half()\n\n        if mel.shape[-2:] == (\n            self.model.dims.n_audio_ctx,\n            self.model.dims.n_audio_state,\n        ):\n            # encoded audio features are given; skip audio encoding\n            audio_features = mel\n        else:\n            audio_features = self.model.encoder(mel)\n\n        if audio_features.dtype != (\n            torch.float16 if self.options.fp16 else torch.float32\n        ):\n            return TypeError(\n                f\"audio_features has an incorrect dtype: {audio_features.dtype}\"\n            )\n\n        return audio_features\n\n    def _detect_language(self, audio_features: Tensor, tokens: Tensor):\n        languages = [self.options.language] * audio_features.shape[0]\n        lang_probs = None\n\n        if self.options.language is None or self.options.task == \"lang_id\":\n            lang_tokens, lang_probs = self.model.detect_language(\n                audio_features, self.tokenizer\n            )\n            languages = [max(probs, key=probs.get) for probs in lang_probs]\n            if self.options.language is None:\n                tokens[:, self.sot_index + 1] = lang_tokens  # write language tokens\n\n        return languages, lang_probs\n\n    def _main_loop(self, audio_features: Tensor, tokens: Tensor):\n        n_batch = tokens.shape[0]\n        sum_logprobs: Tensor = torch.zeros(n_batch, device=audio_features.device)\n        no_speech_probs = [np.nan] * n_batch\n\n        try:\n            for i in range(self.sample_len):\n                logits = self.inference.logits(tokens, audio_features)\n\n                if (\n                    i == 0 and self.tokenizer.no_speech is not None\n                ):  # save no_speech_probs\n                    probs_at_sot = logits[:, self.sot_index].float().softmax(dim=-1)\n                    no_speech_probs = probs_at_sot[:, self.tokenizer.no_speech].tolist()\n\n                # now we need to consider the logits at the last token only\n                logits = logits[:, -1]\n\n                # apply the logit filters, e.g. for suppressing or applying penalty to\n                for logit_filter in self.logit_filters:\n                    logit_filter.apply(logits, tokens)\n\n                # expand the tokens tensor with the selected next tokens\n                tokens, completed = self.decoder.update(tokens, logits, sum_logprobs)\n\n                if completed or tokens.shape[-1] > self.n_ctx:\n                    break\n        finally:\n            self.inference.cleanup_caching()\n\n        return tokens, sum_logprobs, no_speech_probs\n\n    @torch.no_grad()\n    def run(self, mel: Tensor) -> List[DecodingResult]:\n        self.decoder.reset()\n        tokenizer: Tokenizer = self.tokenizer\n        n_audio: int = mel.shape[0]\n\n        audio_features: Tensor = self._get_audio_features(mel)  # encoder forward pass\n        tokens: Tensor = torch.tensor([self.initial_tokens]).repeat(n_audio, 1)\n\n        # detect language if requested, overwriting the language token\n        languages, language_probs = self._detect_language(audio_features, tokens)\n        if self.options.task == \"lang_id\":\n            return [\n                DecodingResult(\n                    audio_features=features, language=language, language_probs=probs\n                )\n                for features, language, probs in zip(\n                    audio_features, languages, language_probs\n                )\n            ]\n\n        # repeat text tensors by the group size, for beam search or best-of-n sampling\n        tokens = tokens.repeat_interleave(self.n_group, dim=0).to(audio_features.device)\n\n        # call the main sampling loop\n        tokens, sum_logprobs, no_speech_probs = self._main_loop(audio_features, tokens)\n\n        # reshape the tensors to have (n_audio, n_group) as the first two dimensions\n        audio_features = audio_features[:: self.n_group]\n        no_speech_probs = no_speech_probs[:: self.n_group]\n        assert audio_features.shape[0] == len(no_speech_probs) == n_audio\n\n        tokens = tokens.reshape(n_audio, self.n_group, -1)\n        sum_logprobs = sum_logprobs.reshape(n_audio, self.n_group)\n\n        # get the final candidates for each group, and slice between the first sampled token and EOT\n        tokens, sum_logprobs = self.decoder.finalize(tokens, sum_logprobs)\n        tokens: List[List[Tensor]] = [\n            [t[self.sample_begin : (t == tokenizer.eot).nonzero()[0, 0]] for t in s]\n            for s in tokens\n        ]\n\n        # select the top-ranked sample in each group\n        selected = self.sequence_ranker.rank(tokens, sum_logprobs)\n        tokens: List[List[int]] = [t[i].tolist() for i, t in zip(selected, tokens)]\n        texts: List[str] = [tokenizer.decode(t).strip() for t in tokens]\n\n        sum_logprobs: List[float] = [lp[i] for i, lp in zip(selected, sum_logprobs)]\n        avg_logprobs: List[float] = [\n            lp / (len(t) + 1) for t, lp in zip(tokens, sum_logprobs)\n        ]\n\n        fields = (\n            texts,\n            languages,\n            tokens,\n            audio_features,\n            avg_logprobs,\n            no_speech_probs,\n        )\n        if len(set(map(len, fields))) != 1:\n            raise RuntimeError(f\"inconsistent result lengths: {list(map(len, fields))}\")\n\n        return [\n            DecodingResult(\n                audio_features=features,\n                language=language,\n                tokens=tokens,\n                text=text,\n                avg_logprob=avg_logprob,\n                no_speech_prob=no_speech_prob,\n                temperature=self.options.temperature,\n                compression_ratio=compression_ratio(text),\n            )\n            for text, language, tokens, features, avg_logprob, no_speech_prob in zip(\n                *fields\n            )\n        ]\n\n\n@torch.no_grad()\ndef decode(\n    model: \"Whisper\",\n    mel: Tensor,\n    options: DecodingOptions = DecodingOptions(),\n    **kwargs,\n) -> Union[DecodingResult, List[DecodingResult]]:\n    \"\"\"\n    Performs decoding of 30-second audio segment(s), provided as Mel spectrogram(s).\n\n    Parameters\n    ----------\n    model: Whisper\n        the Whisper model instance\n\n    mel: torch.Tensor, shape = (80, 3000) or (*, 80, 3000)\n        A tensor containing the Mel spectrogram(s)\n\n    options: DecodingOptions\n        A dataclass that contains all necessary options for decoding 30-second segments\n\n    Returns\n    -------\n    result: Union[DecodingResult, List[DecodingResult]]\n        The result(s) of decoding contained in `DecodingResult` dataclass instance(s)\n    \"\"\"\n    if single := mel.ndim == 2:\n        mel = mel.unsqueeze(0)\n\n    if kwargs:\n        options = replace(options, **kwargs)\n\n    result = DecodingTask(model, options).run(mel)\n\n    return result[0] if single else result\n"
  },
  {
    "path": "xinference/thirdparty/whisper/model.py",
    "content": "import base64\nimport gzip\nfrom dataclasses import dataclass\nfrom typing import Dict, Iterable, Optional\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom torch import Tensor, nn\n\nfrom .decoding import decode as decode_function\nfrom .decoding import detect_language as detect_language_function\nfrom .transcribe import transcribe as transcribe_function\n\n\n@dataclass\nclass ModelDimensions:\n    n_mels: int\n    n_audio_ctx: int\n    n_audio_state: int\n    n_audio_head: int\n    n_audio_layer: int\n    n_vocab: int\n    n_text_ctx: int\n    n_text_state: int\n    n_text_head: int\n    n_text_layer: int\n\n\nclass LayerNorm(nn.LayerNorm):\n    def forward(self, x: Tensor) -> Tensor:\n        return super().forward(x.float()).type(x.dtype)\n\n\nclass Linear(nn.Linear):\n    def forward(self, x: Tensor) -> Tensor:\n        return F.linear(\n            x,\n            self.weight.to(x.dtype),\n            None if self.bias is None else self.bias.to(x.dtype),\n        )\n\n\nclass Conv1d(nn.Conv1d):\n    def _conv_forward(\n        self, x: Tensor, weight: Tensor, bias: Optional[Tensor]\n    ) -> Tensor:\n        return super()._conv_forward(\n            x, weight.to(x.dtype), None if bias is None else bias.to(x.dtype)\n        )\n\n\ndef sinusoids(length, channels, max_timescale=10000):\n    \"\"\"Returns sinusoids for positional embedding\"\"\"\n    assert channels % 2 == 0\n    log_timescale_increment = np.log(max_timescale) / (channels // 2 - 1)\n    inv_timescales = torch.exp(-log_timescale_increment * torch.arange(channels // 2))\n    scaled_time = torch.arange(length)[:, np.newaxis] * inv_timescales[np.newaxis, :]\n    return torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], dim=1)\n\n\nclass MultiHeadAttention(nn.Module):\n    def __init__(self, n_state: int, n_head: int):\n        super().__init__()\n        self.n_head = n_head\n        self.query = Linear(n_state, n_state)\n        self.key = Linear(n_state, n_state, bias=False)\n        self.value = Linear(n_state, n_state)\n        self.out = Linear(n_state, n_state)\n\n    def forward(\n        self,\n        x: Tensor,\n        xa: Optional[Tensor] = None,\n        mask: Optional[Tensor] = None,\n        kv_cache: Optional[dict] = None,\n    ):\n        q = self.query(x)\n\n        if kv_cache is None or xa is None or self.key not in kv_cache:\n            # hooks, if installed (i.e. kv_cache is not None), will prepend the cached kv tensors;\n            # otherwise, perform key/value projections for self- or cross-attention as usual.\n            k = self.key(x if xa is None else xa)\n            v = self.value(x if xa is None else xa)\n        else:\n            # for cross-attention, calculate keys and values once and reuse in subsequent calls.\n            k = kv_cache[self.key]\n            v = kv_cache[self.value]\n\n        wv, qk = self.qkv_attention(q, k, v, mask)\n        return self.out(wv), qk\n\n    def qkv_attention(\n        self, q: Tensor, k: Tensor, v: Tensor, mask: Optional[Tensor] = None\n    ):\n        n_batch, n_ctx, n_state = q.shape\n        scale = (n_state // self.n_head) ** -0.25\n        q = q.view(*q.shape[:2], self.n_head, -1).permute(0, 2, 1, 3) * scale\n        k = k.view(*k.shape[:2], self.n_head, -1).permute(0, 2, 3, 1) * scale\n        v = v.view(*v.shape[:2], self.n_head, -1).permute(0, 2, 1, 3)\n\n        qk = q @ k\n        if mask is not None:\n            qk = qk + mask[:n_ctx, :n_ctx]\n        qk = qk.float()\n\n        w = F.softmax(qk, dim=-1).to(q.dtype)\n        return (w @ v).permute(0, 2, 1, 3).flatten(start_dim=2), qk.detach()\n\n\nclass ResidualAttentionBlock(nn.Module):\n    def __init__(self, n_state: int, n_head: int, cross_attention: bool = False):\n        super().__init__()\n\n        self.attn = MultiHeadAttention(n_state, n_head)\n        self.attn_ln = LayerNorm(n_state)\n\n        self.cross_attn = (\n            MultiHeadAttention(n_state, n_head) if cross_attention else None\n        )\n        self.cross_attn_ln = LayerNorm(n_state) if cross_attention else None\n\n        n_mlp = n_state * 4\n        self.mlp = nn.Sequential(\n            Linear(n_state, n_mlp), nn.GELU(), Linear(n_mlp, n_state)\n        )\n        self.mlp_ln = LayerNorm(n_state)\n\n    def forward(\n        self,\n        x: Tensor,\n        xa: Optional[Tensor] = None,\n        mask: Optional[Tensor] = None,\n        kv_cache: Optional[dict] = None,\n    ):\n        x = x + self.attn(self.attn_ln(x), mask=mask, kv_cache=kv_cache)[0]\n        if self.cross_attn:\n            x = x + self.cross_attn(self.cross_attn_ln(x), xa, kv_cache=kv_cache)[0]\n        x = x + self.mlp(self.mlp_ln(x))\n        return x\n\n\nclass AudioEncoder(nn.Module):\n    def __init__(\n        self, n_mels: int, n_ctx: int, n_state: int, n_head: int, n_layer: int\n    ):\n        super().__init__()\n        self.conv1 = Conv1d(n_mels, n_state, kernel_size=3, padding=1)\n        self.conv2 = Conv1d(n_state, n_state, kernel_size=3, stride=2, padding=1)\n        self.register_buffer(\"positional_embedding\", sinusoids(n_ctx, n_state))\n\n        self.blocks: Iterable[ResidualAttentionBlock] = nn.ModuleList(\n            [ResidualAttentionBlock(n_state, n_head) for _ in range(n_layer)]\n        )\n        self.ln_post = LayerNorm(n_state)\n\n    def forward(self, x: Tensor):\n        \"\"\"\n        x : torch.Tensor, shape = (batch_size, n_mels, n_ctx)\n            the mel spectrogram of the audio\n        \"\"\"\n        x = F.gelu(self.conv1(x))\n        x = F.gelu(self.conv2(x))\n        x = x.permute(0, 2, 1)\n\n        assert x.shape[1:] == self.positional_embedding.shape, \"incorrect audio shape\"\n        x = (x + self.positional_embedding).to(x.dtype)\n\n        for block in self.blocks:\n            x = block(x)\n\n        x = self.ln_post(x)\n        return x\n\n\nclass TextDecoder(nn.Module):\n    def __init__(\n        self, n_vocab: int, n_ctx: int, n_state: int, n_head: int, n_layer: int\n    ):\n        super().__init__()\n\n        self.token_embedding = nn.Embedding(n_vocab, n_state)\n        self.positional_embedding = nn.Parameter(torch.empty(n_ctx, n_state))\n\n        self.blocks: Iterable[ResidualAttentionBlock] = nn.ModuleList(\n            [\n                ResidualAttentionBlock(n_state, n_head, cross_attention=True)\n                for _ in range(n_layer)\n            ]\n        )\n        self.ln = LayerNorm(n_state)\n\n        mask = torch.empty(n_ctx, n_ctx).fill_(-np.inf).triu_(1)\n        self.register_buffer(\"mask\", mask, persistent=False)\n\n    def forward(self, x: Tensor, xa: Tensor, kv_cache: Optional[dict] = None):\n        \"\"\"\n        x : torch.LongTensor, shape = (batch_size, <= n_ctx)\n            the text tokens\n        xa : torch.Tensor, shape = (batch_size, n_audio_ctx, n_audio_state)\n            the encoded audio features to be attended on\n        \"\"\"\n        offset = next(iter(kv_cache.values())).shape[1] if kv_cache else 0\n        x = (\n            self.token_embedding(x)\n            + self.positional_embedding[offset : offset + x.shape[-1]]\n        )\n        x = x.to(xa.dtype)\n\n        for block in self.blocks:\n            x = block(x, xa, mask=self.mask, kv_cache=kv_cache)\n\n        x = self.ln(x)\n        logits = (\n            x @ torch.transpose(self.token_embedding.weight.to(x.dtype), 0, 1)\n        ).float()\n\n        return logits\n\n\nclass Whisper(nn.Module):\n    def __init__(self, dims: ModelDimensions):\n        super().__init__()\n        self.dims = dims\n        self.encoder = AudioEncoder(\n            self.dims.n_mels,\n            self.dims.n_audio_ctx,\n            self.dims.n_audio_state,\n            self.dims.n_audio_head,\n            self.dims.n_audio_layer,\n        )\n        self.decoder = TextDecoder(\n            self.dims.n_vocab,\n            self.dims.n_text_ctx,\n            self.dims.n_text_state,\n            self.dims.n_text_head,\n            self.dims.n_text_layer,\n        )\n        # use the last half among the decoder layers for time alignment by default;\n        # to use a specific set of heads, see `set_alignment_heads()` below.\n        all_heads = torch.zeros(\n            self.dims.n_text_layer, self.dims.n_text_head, dtype=torch.bool\n        )\n        all_heads[self.dims.n_text_layer // 2 :] = True\n        self.register_buffer(\"alignment_heads\", all_heads.to_sparse(), persistent=False)\n\n    def set_alignment_heads(self, dump: bytes):\n        array = np.frombuffer(\n            gzip.decompress(base64.b85decode(dump)), dtype=bool\n        ).copy()\n        mask = torch.from_numpy(array).reshape(\n            self.dims.n_text_layer, self.dims.n_text_head\n        )\n        self.register_buffer(\"alignment_heads\", mask.to_sparse(), persistent=False)\n\n    def embed_audio(self, mel: torch.Tensor):\n        return self.encoder(mel)\n\n    def logits(self, tokens: torch.Tensor, audio_features: torch.Tensor):\n        return self.decoder(tokens, audio_features)\n\n    def forward(\n        self, mel: torch.Tensor, tokens: torch.Tensor\n    ) -> Dict[str, torch.Tensor]:\n        return self.decoder(tokens, self.encoder(mel))\n\n    @property\n    def device(self):\n        return next(self.parameters()).device\n\n    @property\n    def is_multilingual(self):\n        return self.dims.n_vocab >= 51865\n\n    @property\n    def num_languages(self):\n        return self.dims.n_vocab - 51765 - int(self.is_multilingual)\n\n    def install_kv_cache_hooks(self, cache: Optional[dict] = None):\n        \"\"\"\n        The `MultiHeadAttention` module optionally accepts `kv_cache` which stores the key and value\n        tensors calculated for the previous positions. This method returns a dictionary that stores\n        all caches, and the necessary hooks for the key and value projection modules that save the\n        intermediate tensors to be reused during later calculations.\n\n        Returns\n        -------\n        cache : Dict[nn.Module, torch.Tensor]\n            A dictionary object mapping the key/value projection modules to its cache\n        hooks : List[RemovableHandle]\n            List of PyTorch RemovableHandle objects to stop the hooks to be called\n        \"\"\"\n        cache = {**cache} if cache is not None else {}\n        hooks = []\n\n        def save_to_cache(module, _, output):\n            if module not in cache or output.shape[1] > self.dims.n_text_ctx:\n                # save as-is, for the first token or cross attention\n                cache[module] = output\n            else:\n                cache[module] = torch.cat([cache[module], output], dim=1).detach()\n            return cache[module]\n\n        def install_hooks(layer: nn.Module):\n            if isinstance(layer, MultiHeadAttention):\n                hooks.append(layer.key.register_forward_hook(save_to_cache))\n                hooks.append(layer.value.register_forward_hook(save_to_cache))\n\n        self.decoder.apply(install_hooks)\n        return cache, hooks\n\n    detect_language = detect_language_function\n    transcribe = transcribe_function\n    decode = decode_function\n"
  },
  {
    "path": "xinference/thirdparty/whisper/normalizers/__init__.py",
    "content": "from .basic import BasicTextNormalizer as BasicTextNormalizer\nfrom .english import EnglishTextNormalizer as EnglishTextNormalizer\n"
  },
  {
    "path": "xinference/thirdparty/whisper/normalizers/basic.py",
    "content": "import re\nimport unicodedata\n\nimport regex\n\n# non-ASCII letters that are not separated by \"NFKD\" normalization\nADDITIONAL_DIACRITICS = {\n    \"œ\": \"oe\",\n    \"Œ\": \"OE\",\n    \"ø\": \"o\",\n    \"Ø\": \"O\",\n    \"æ\": \"ae\",\n    \"Æ\": \"AE\",\n    \"ß\": \"ss\",\n    \"ẞ\": \"SS\",\n    \"đ\": \"d\",\n    \"Đ\": \"D\",\n    \"ð\": \"d\",\n    \"Ð\": \"D\",\n    \"þ\": \"th\",\n    \"Þ\": \"th\",\n    \"ł\": \"l\",\n    \"Ł\": \"L\",\n}\n\n\ndef remove_symbols_and_diacritics(s: str, keep=\"\"):\n    \"\"\"\n    Replace any other markers, symbols, and punctuations with a space,\n    and drop any diacritics (category 'Mn' and some manual mappings)\n    \"\"\"\n    return \"\".join(\n        c\n        if c in keep\n        else ADDITIONAL_DIACRITICS[c]\n        if c in ADDITIONAL_DIACRITICS\n        else \"\"\n        if unicodedata.category(c) == \"Mn\"\n        else \" \"\n        if unicodedata.category(c)[0] in \"MSP\"\n        else c\n        for c in unicodedata.normalize(\"NFKD\", s)\n    )\n\n\ndef remove_symbols(s: str):\n    \"\"\"\n    Replace any other markers, symbols, punctuations with a space, keeping diacritics\n    \"\"\"\n    return \"\".join(\n        \" \" if unicodedata.category(c)[0] in \"MSP\" else c\n        for c in unicodedata.normalize(\"NFKC\", s)\n    )\n\n\nclass BasicTextNormalizer:\n    def __init__(self, remove_diacritics: bool = False, split_letters: bool = False):\n        self.clean = (\n            remove_symbols_and_diacritics if remove_diacritics else remove_symbols\n        )\n        self.split_letters = split_letters\n\n    def __call__(self, s: str):\n        s = s.lower()\n        s = re.sub(r\"[<\\[][^>\\]]*[>\\]]\", \"\", s)  # remove words between brackets\n        s = re.sub(r\"\\(([^)]+?)\\)\", \"\", s)  # remove words between parenthesis\n        s = self.clean(s).lower()\n\n        if self.split_letters:\n            s = \" \".join(regex.findall(r\"\\X\", s, regex.U))\n\n        s = re.sub(\n            r\"\\s+\", \" \", s\n        )  # replace any successive whitespace characters with a space\n\n        return s\n"
  },
  {
    "path": "xinference/thirdparty/whisper/normalizers/english.json",
    "content": "{\n    \"accessorise\": \"accessorize\",\n    \"accessorised\": \"accessorized\",\n    \"accessorises\": \"accessorizes\",\n    \"accessorising\": \"accessorizing\",\n    \"acclimatisation\": \"acclimatization\",\n    \"acclimatise\": \"acclimatize\",\n    \"acclimatised\": \"acclimatized\",\n    \"acclimatises\": \"acclimatizes\",\n    \"acclimatising\": \"acclimatizing\",\n    \"accoutrements\": \"accouterments\",\n    \"aeon\": \"eon\",\n    \"aeons\": \"eons\",\n    \"aerogramme\": \"aerogram\",\n    \"aerogrammes\": \"aerograms\",\n    \"aeroplane\": \"airplane\",\n    \"aeroplanes\": \"airplanes\",\n    \"aesthete\": \"esthete\",\n    \"aesthetes\": \"esthetes\",\n    \"aesthetic\": \"esthetic\",\n    \"aesthetically\": \"esthetically\",\n    \"aesthetics\": \"esthetics\",\n    \"aetiology\": \"etiology\",\n    \"ageing\": \"aging\",\n    \"aggrandisement\": \"aggrandizement\",\n    \"agonise\": \"agonize\",\n    \"agonised\": \"agonized\",\n    \"agonises\": \"agonizes\",\n    \"agonising\": \"agonizing\",\n    \"agonisingly\": \"agonizingly\",\n    \"almanack\": \"almanac\",\n    \"almanacks\": \"almanacs\",\n    \"aluminium\": \"aluminum\",\n    \"amortisable\": \"amortizable\",\n    \"amortisation\": \"amortization\",\n    \"amortisations\": \"amortizations\",\n    \"amortise\": \"amortize\",\n    \"amortised\": \"amortized\",\n    \"amortises\": \"amortizes\",\n    \"amortising\": \"amortizing\",\n    \"amphitheatre\": \"amphitheater\",\n    \"amphitheatres\": \"amphitheaters\",\n    \"anaemia\": \"anemia\",\n    \"anaemic\": \"anemic\",\n    \"anaesthesia\": \"anesthesia\",\n    \"anaesthetic\": \"anesthetic\",\n    \"anaesthetics\": \"anesthetics\",\n    \"anaesthetise\": \"anesthetize\",\n    \"anaesthetised\": \"anesthetized\",\n    \"anaesthetises\": \"anesthetizes\",\n    \"anaesthetising\": \"anesthetizing\",\n    \"anaesthetist\": \"anesthetist\",\n    \"anaesthetists\": \"anesthetists\",\n    \"anaesthetize\": \"anesthetize\",\n    \"anaesthetized\": \"anesthetized\",\n    \"anaesthetizes\": \"anesthetizes\",\n    \"anaesthetizing\": \"anesthetizing\",\n    \"analogue\": \"analog\",\n    \"analogues\": \"analogs\",\n    \"analyse\": \"analyze\",\n    \"analysed\": \"analyzed\",\n    \"analyses\": \"analyzes\",\n    \"analysing\": \"analyzing\",\n    \"anglicise\": \"anglicize\",\n    \"anglicised\": \"anglicized\",\n    \"anglicises\": \"anglicizes\",\n    \"anglicising\": \"anglicizing\",\n    \"annualised\": \"annualized\",\n    \"antagonise\": \"antagonize\",\n    \"antagonised\": \"antagonized\",\n    \"antagonises\": \"antagonizes\",\n    \"antagonising\": \"antagonizing\",\n    \"apologise\": \"apologize\",\n    \"apologised\": \"apologized\",\n    \"apologises\": \"apologizes\",\n    \"apologising\": \"apologizing\",\n    \"appal\": \"appall\",\n    \"appals\": \"appalls\",\n    \"appetiser\": \"appetizer\",\n    \"appetisers\": \"appetizers\",\n    \"appetising\": \"appetizing\",\n    \"appetisingly\": \"appetizingly\",\n    \"arbour\": \"arbor\",\n    \"arbours\": \"arbors\",\n    \"archeological\": \"archaeological\",\n    \"archaeologically\": \"archeologically\",\n    \"archaeologist\": \"archeologist\",\n    \"archaeologists\": \"archeologists\",\n    \"archaeology\": \"archeology</span>\",\n    \"ardour\": \"ardor\",\n    \"armour\": \"armor\",\n    \"armoured\": \"armored\",\n    \"armourer\": \"armorer\",\n    \"armourers\": \"armorers\",\n    \"armouries\": \"armories\",\n    \"armoury\": \"armory\",\n    \"artefact\": \"artifact\",\n    \"artefacts\": \"artifacts\",\n    \"authorise\": \"authorize\",\n    \"authorised\": \"authorized\",\n    \"authorises\": \"authorizes\",\n    \"authorising\": \"authorizing\",\n    \"axe\": \"ax\",\n    \"backpedalled\": \"backpedaled\",\n    \"backpedalling\": \"backpedaling\",\n    \"bannister\": \"banister\",\n    \"bannisters\": \"banisters\",\n    \"baptise\": \"baptize\",\n    \"baptised\": \"baptized\",\n    \"baptises\": \"baptizes\",\n    \"baptising\": \"baptizing\",\n    \"bastardise\": \"bastardize\",\n    \"bastardised\": \"bastardized\",\n    \"bastardises\": \"bastardizes\",\n    \"bastardising\": \"bastardizing\",\n    \"battleax\": \"battleaxe\",\n    \"baulk\": \"balk\",\n    \"baulked\": \"balked\",\n    \"baulking\": \"balking\",\n    \"baulks\": \"balks\",\n    \"bedevilled\": \"bedeviled\",\n    \"bedevilling\": \"bedeviling\",\n    \"behaviour\": \"behavior\",\n    \"behavioural\": \"behavioral\",\n    \"behaviourism\": \"behaviorism\",\n    \"behaviourist\": \"behaviorist\",\n    \"behaviourists\": \"behaviorists\",\n    \"behaviours\": \"behaviors\",\n    \"behove\": \"behoove\",\n    \"behoved\": \"behooved\",\n    \"behoves\": \"behooves\",\n    \"bejewelled\": \"bejeweled\",\n    \"belabour\": \"belabor\",\n    \"belaboured\": \"belabored\",\n    \"belabouring\": \"belaboring\",\n    \"belabours\": \"belabors\",\n    \"bevelled\": \"beveled\",\n    \"bevvies\": \"bevies\",\n    \"bevvy\": \"bevy\",\n    \"biassed\": \"biased\",\n    \"biassing\": \"biasing\",\n    \"bingeing\": \"binging\",\n    \"bougainvillaea\": \"bougainvillea\",\n    \"bougainvillaeas\": \"bougainvilleas\",\n    \"bowdlerise\": \"bowdlerize\",\n    \"bowdlerised\": \"bowdlerized\",\n    \"bowdlerises\": \"bowdlerizes\",\n    \"bowdlerising\": \"bowdlerizing\",\n    \"breathalyse\": \"breathalyze\",\n    \"breathalysed\": \"breathalyzed\",\n    \"breathalyser\": \"breathalyzer\",\n    \"breathalysers\": \"breathalyzers\",\n    \"breathalyses\": \"breathalyzes\",\n    \"breathalysing\": \"breathalyzing\",\n    \"brutalise\": \"brutalize\",\n    \"brutalised\": \"brutalized\",\n    \"brutalises\": \"brutalizes\",\n    \"brutalising\": \"brutalizing\",\n    \"busses\": \"buses\",\n    \"bussing\": \"busing\",\n    \"caesarean\": \"cesarean\",\n    \"caesareans\": \"cesareans\",\n    \"calibre\": \"caliber\",\n    \"calibres\": \"calibers\",\n    \"calliper\": \"caliper\",\n    \"callipers\": \"calipers\",\n    \"callisthenics\": \"calisthenics\",\n    \"canalise\": \"canalize\",\n    \"canalised\": \"canalized\",\n    \"canalises\": \"canalizes\",\n    \"canalising\": \"canalizing\",\n    \"cancelation\": \"cancellation\",\n    \"cancelations\": \"cancellations\",\n    \"cancelled\": \"canceled\",\n    \"cancelling\": \"canceling\",\n    \"candour\": \"candor\",\n    \"cannibalise\": \"cannibalize\",\n    \"cannibalised\": \"cannibalized\",\n    \"cannibalises\": \"cannibalizes\",\n    \"cannibalising\": \"cannibalizing\",\n    \"canonise\": \"canonize\",\n    \"canonised\": \"canonized\",\n    \"canonises\": \"canonizes\",\n    \"canonising\": \"canonizing\",\n    \"capitalise\": \"capitalize\",\n    \"capitalised\": \"capitalized\",\n    \"capitalises\": \"capitalizes\",\n    \"capitalising\": \"capitalizing\",\n    \"caramelise\": \"caramelize\",\n    \"caramelised\": \"caramelized\",\n    \"caramelises\": \"caramelizes\",\n    \"caramelising\": \"caramelizing\",\n    \"carbonise\": \"carbonize\",\n    \"carbonised\": \"carbonized\",\n    \"carbonises\": \"carbonizes\",\n    \"carbonising\": \"carbonizing\",\n    \"carolled\": \"caroled\",\n    \"carolling\": \"caroling\",\n    \"catalogue\": \"catalog\",\n    \"catalogued\": \"cataloged\",\n    \"catalogues\": \"catalogs\",\n    \"cataloguing\": \"cataloging\",\n    \"catalyse\": \"catalyze\",\n    \"catalysed\": \"catalyzed\",\n    \"catalyses\": \"catalyzes\",\n    \"catalysing\": \"catalyzing\",\n    \"categorise\": \"categorize\",\n    \"categorised\": \"categorized\",\n    \"categorises\": \"categorizes\",\n    \"categorising\": \"categorizing\",\n    \"cauterise\": \"cauterize\",\n    \"cauterised\": \"cauterized\",\n    \"cauterises\": \"cauterizes\",\n    \"cauterising\": \"cauterizing\",\n    \"cavilled\": \"caviled\",\n    \"cavilling\": \"caviling\",\n    \"centigramme\": \"centigram\",\n    \"centigrammes\": \"centigrams\",\n    \"centilitre\": \"centiliter\",\n    \"centilitres\": \"centiliters\",\n    \"centimetre\": \"centimeter\",\n    \"centimetres\": \"centimeters\",\n    \"centralise\": \"centralize\",\n    \"centralised\": \"centralized\",\n    \"centralises\": \"centralizes\",\n    \"centralising\": \"centralizing\",\n    \"centre\": \"center\",\n    \"centred\": \"centered\",\n    \"centrefold\": \"centerfold\",\n    \"centrefolds\": \"centerfolds\",\n    \"centrepiece\": \"centerpiece\",\n    \"centrepieces\": \"centerpieces\",\n    \"centres\": \"centers\",\n    \"channelled\": \"channeled\",\n    \"channelling\": \"channeling\",\n    \"characterise\": \"characterize\",\n    \"characterised\": \"characterized\",\n    \"characterises\": \"characterizes\",\n    \"characterising\": \"characterizing\",\n    \"cheque\": \"check\",\n    \"chequebook\": \"checkbook\",\n    \"chequebooks\": \"checkbooks\",\n    \"chequered\": \"checkered\",\n    \"cheques\": \"checks\",\n    \"chilli\": \"chili\",\n    \"chimaera\": \"chimera\",\n    \"chimaeras\": \"chimeras\",\n    \"chiselled\": \"chiseled\",\n    \"chiselling\": \"chiseling\",\n    \"circularise\": \"circularize\",\n    \"circularised\": \"circularized\",\n    \"circularises\": \"circularizes\",\n    \"circularising\": \"circularizing\",\n    \"civilise\": \"civilize\",\n    \"civilised\": \"civilized\",\n    \"civilises\": \"civilizes\",\n    \"civilising\": \"civilizing\",\n    \"clamour\": \"clamor\",\n    \"clamoured\": \"clamored\",\n    \"clamouring\": \"clamoring\",\n    \"clamours\": \"clamors\",\n    \"clangour\": \"clangor\",\n    \"clarinettist\": \"clarinetist\",\n    \"clarinettists\": \"clarinetists\",\n    \"collectivise\": \"collectivize\",\n    \"collectivised\": \"collectivized\",\n    \"collectivises\": \"collectivizes\",\n    \"collectivising\": \"collectivizing\",\n    \"colonisation\": \"colonization\",\n    \"colonise\": \"colonize\",\n    \"colonised\": \"colonized\",\n    \"coloniser\": \"colonizer\",\n    \"colonisers\": \"colonizers\",\n    \"colonises\": \"colonizes\",\n    \"colonising\": \"colonizing\",\n    \"colour\": \"color\",\n    \"colourant\": \"colorant\",\n    \"colourants\": \"colorants\",\n    \"coloured\": \"colored\",\n    \"coloureds\": \"coloreds\",\n    \"colourful\": \"colorful\",\n    \"colourfully\": \"colorfully\",\n    \"colouring\": \"coloring\",\n    \"colourize\": \"colorize\",\n    \"colourized\": \"colorized\",\n    \"colourizes\": \"colorizes\",\n    \"colourizing\": \"colorizing\",\n    \"colourless\": \"colorless\",\n    \"colours\": \"colors\",\n    \"commercialise\": \"commercialize\",\n    \"commercialised\": \"commercialized\",\n    \"commercialises\": \"commercializes\",\n    \"commercialising\": \"commercializing\",\n    \"compartmentalise\": \"compartmentalize\",\n    \"compartmentalised\": \"compartmentalized\",\n    \"compartmentalises\": \"compartmentalizes\",\n    \"compartmentalising\": \"compartmentalizing\",\n    \"computerise\": \"computerize\",\n    \"computerised\": \"computerized\",\n    \"computerises\": \"computerizes\",\n    \"computerising\": \"computerizing\",\n    \"conceptualise\": \"conceptualize\",\n    \"conceptualised\": \"conceptualized\",\n    \"conceptualises\": \"conceptualizes\",\n    \"conceptualising\": \"conceptualizing\",\n    \"connexion\": \"connection\",\n    \"connexions\": \"connections\",\n    \"contextualise\": \"contextualize\",\n    \"contextualised\": \"contextualized\",\n    \"contextualises\": \"contextualizes\",\n    \"contextualising\": \"contextualizing\",\n    \"cosier\": \"cozier\",\n    \"cosies\": \"cozies\",\n    \"cosiest\": \"coziest\",\n    \"cosily\": \"cozily\",\n    \"cosiness\": \"coziness\",\n    \"cosy\": \"cozy\",\n    \"councillor\": \"councilor\",\n    \"councillors\": \"councilors\",\n    \"counselled\": \"counseled\",\n    \"counselling\": \"counseling\",\n    \"counsellor\": \"counselor\",\n    \"counsellors\": \"counselors\",\n    \"crenelated\": \"crenellated\",\n    \"criminalise\": \"criminalize\",\n    \"criminalised\": \"criminalized\",\n    \"criminalises\": \"criminalizes\",\n    \"criminalising\": \"criminalizing\",\n    \"criticise\": \"criticize\",\n    \"criticised\": \"criticized\",\n    \"criticises\": \"criticizes\",\n    \"criticising\": \"criticizing\",\n    \"crueller\": \"crueler\",\n    \"cruellest\": \"cruelest\",\n    \"crystallisation\": \"crystallization\",\n    \"crystallise\": \"crystallize\",\n    \"crystallised\": \"crystallized\",\n    \"crystallises\": \"crystallizes\",\n    \"crystallising\": \"crystallizing\",\n    \"cudgelled\": \"cudgeled\",\n    \"cudgelling\": \"cudgeling\",\n    \"customise\": \"customize\",\n    \"customised\": \"customized\",\n    \"customises\": \"customizes\",\n    \"customising\": \"customizing\",\n    \"cypher\": \"cipher\",\n    \"cyphers\": \"ciphers\",\n    \"decentralisation\": \"decentralization\",\n    \"decentralise\": \"decentralize\",\n    \"decentralised\": \"decentralized\",\n    \"decentralises\": \"decentralizes\",\n    \"decentralising\": \"decentralizing\",\n    \"decriminalisation\": \"decriminalization\",\n    \"decriminalise\": \"decriminalize\",\n    \"decriminalised\": \"decriminalized\",\n    \"decriminalises\": \"decriminalizes\",\n    \"decriminalising\": \"decriminalizing\",\n    \"defence\": \"defense\",\n    \"defenceless\": \"defenseless\",\n    \"defences\": \"defenses\",\n    \"dehumanisation\": \"dehumanization\",\n    \"dehumanise\": \"dehumanize\",\n    \"dehumanised\": \"dehumanized\",\n    \"dehumanises\": \"dehumanizes\",\n    \"dehumanising\": \"dehumanizing\",\n    \"demeanour\": \"demeanor\",\n    \"demilitarisation\": \"demilitarization\",\n    \"demilitarise\": \"demilitarize\",\n    \"demilitarised\": \"demilitarized\",\n    \"demilitarises\": \"demilitarizes\",\n    \"demilitarising\": \"demilitarizing\",\n    \"demobilisation\": \"demobilization\",\n    \"demobilise\": \"demobilize\",\n    \"demobilised\": \"demobilized\",\n    \"demobilises\": \"demobilizes\",\n    \"demobilising\": \"demobilizing\",\n    \"democratisation\": \"democratization\",\n    \"democratise\": \"democratize\",\n    \"democratised\": \"democratized\",\n    \"democratises\": \"democratizes\",\n    \"democratising\": \"democratizing\",\n    \"demonise\": \"demonize\",\n    \"demonised\": \"demonized\",\n    \"demonises\": \"demonizes\",\n    \"demonising\": \"demonizing\",\n    \"demoralisation\": \"demoralization\",\n    \"demoralise\": \"demoralize\",\n    \"demoralised\": \"demoralized\",\n    \"demoralises\": \"demoralizes\",\n    \"demoralising\": \"demoralizing\",\n    \"denationalisation\": \"denationalization\",\n    \"denationalise\": \"denationalize\",\n    \"denationalised\": \"denationalized\",\n    \"denationalises\": \"denationalizes\",\n    \"denationalising\": \"denationalizing\",\n    \"deodorise\": \"deodorize\",\n    \"deodorised\": \"deodorized\",\n    \"deodorises\": \"deodorizes\",\n    \"deodorising\": \"deodorizing\",\n    \"depersonalise\": \"depersonalize\",\n    \"depersonalised\": \"depersonalized\",\n    \"depersonalises\": \"depersonalizes\",\n    \"depersonalising\": \"depersonalizing\",\n    \"deputise\": \"deputize\",\n    \"deputised\": \"deputized\",\n    \"deputises\": \"deputizes\",\n    \"deputising\": \"deputizing\",\n    \"desensitisation\": \"desensitization\",\n    \"desensitise\": \"desensitize\",\n    \"desensitised\": \"desensitized\",\n    \"desensitises\": \"desensitizes\",\n    \"desensitising\": \"desensitizing\",\n    \"destabilisation\": \"destabilization\",\n    \"destabilise\": \"destabilize\",\n    \"destabilised\": \"destabilized\",\n    \"destabilises\": \"destabilizes\",\n    \"destabilising\": \"destabilizing\",\n    \"dialled\": \"dialed\",\n    \"dialling\": \"dialing\",\n    \"dialogue\": \"dialog\",\n    \"dialogues\": \"dialogs\",\n    \"diarrhoea\": \"diarrhea\",\n    \"digitise\": \"digitize\",\n    \"digitised\": \"digitized\",\n    \"digitises\": \"digitizes\",\n    \"digitising\": \"digitizing\",\n    \"disc\": \"disk\",\n    \"discolour\": \"discolor\",\n    \"discoloured\": \"discolored\",\n    \"discolouring\": \"discoloring\",\n    \"discolours\": \"discolors\",\n    \"discs\": \"disks\",\n    \"disembowelled\": \"disemboweled\",\n    \"disembowelling\": \"disemboweling\",\n    \"disfavour\": \"disfavor\",\n    \"dishevelled\": \"disheveled\",\n    \"dishonour\": \"dishonor\",\n    \"dishonourable\": \"dishonorable\",\n    \"dishonourably\": \"dishonorably\",\n    \"dishonoured\": \"dishonored\",\n    \"dishonouring\": \"dishonoring\",\n    \"dishonours\": \"dishonors\",\n    \"disorganisation\": \"disorganization\",\n    \"disorganised\": \"disorganized\",\n    \"distil\": \"distill\",\n    \"distils\": \"distills\",\n    \"dramatisation\": \"dramatization\",\n    \"dramatisations\": \"dramatizations\",\n    \"dramatise\": \"dramatize\",\n    \"dramatised\": \"dramatized\",\n    \"dramatises\": \"dramatizes\",\n    \"dramatising\": \"dramatizing\",\n    \"draught\": \"draft\",\n    \"draughtboard\": \"draftboard\",\n    \"draughtboards\": \"draftboards\",\n    \"draughtier\": \"draftier\",\n    \"draughtiest\": \"draftiest\",\n    \"draughts\": \"drafts\",\n    \"draughtsman\": \"draftsman\",\n    \"draughtsmanship\": \"draftsmanship\",\n    \"draughtsmen\": \"draftsmen\",\n    \"draughtswoman\": \"draftswoman\",\n    \"draughtswomen\": \"draftswomen\",\n    \"draughty\": \"drafty\",\n    \"drivelled\": \"driveled\",\n    \"drivelling\": \"driveling\",\n    \"duelled\": \"dueled\",\n    \"duelling\": \"dueling\",\n    \"economise\": \"economize\",\n    \"economised\": \"economized\",\n    \"economises\": \"economizes\",\n    \"economising\": \"economizing\",\n    \"edoema\": \"edema\",\n    \"editorialise\": \"editorialize\",\n    \"editorialised\": \"editorialized\",\n    \"editorialises\": \"editorializes\",\n    \"editorialising\": \"editorializing\",\n    \"empathise\": \"empathize\",\n    \"empathised\": \"empathized\",\n    \"empathises\": \"empathizes\",\n    \"empathising\": \"empathizing\",\n    \"emphasise\": \"emphasize\",\n    \"emphasised\": \"emphasized\",\n    \"emphasises\": \"emphasizes\",\n    \"emphasising\": \"emphasizing\",\n    \"enamelled\": \"enameled\",\n    \"enamelling\": \"enameling\",\n    \"enamoured\": \"enamored\",\n    \"encyclopaedia\": \"encyclopedia\",\n    \"encyclopaedias\": \"encyclopedias\",\n    \"encyclopaedic\": \"encyclopedic\",\n    \"endeavour\": \"endeavor\",\n    \"endeavoured\": \"endeavored\",\n    \"endeavouring\": \"endeavoring\",\n    \"endeavours\": \"endeavors\",\n    \"energise\": \"energize\",\n    \"energised\": \"energized\",\n    \"energises\": \"energizes\",\n    \"energising\": \"energizing\",\n    \"enrol\": \"enroll\",\n    \"enrols\": \"enrolls\",\n    \"enthral\": \"enthrall\",\n    \"enthrals\": \"enthralls\",\n    \"epaulette\": \"epaulet\",\n    \"epaulettes\": \"epaulets\",\n    \"epicentre\": \"epicenter\",\n    \"epicentres\": \"epicenters\",\n    \"epilogue\": \"epilog\",\n    \"epilogues\": \"epilogs\",\n    \"epitomise\": \"epitomize\",\n    \"epitomised\": \"epitomized\",\n    \"epitomises\": \"epitomizes\",\n    \"epitomising\": \"epitomizing\",\n    \"equalisation\": \"equalization\",\n    \"equalise\": \"equalize\",\n    \"equalised\": \"equalized\",\n    \"equaliser\": \"equalizer\",\n    \"equalisers\": \"equalizers\",\n    \"equalises\": \"equalizes\",\n    \"equalising\": \"equalizing\",\n    \"eulogise\": \"eulogize\",\n    \"eulogised\": \"eulogized\",\n    \"eulogises\": \"eulogizes\",\n    \"eulogising\": \"eulogizing\",\n    \"evangelise\": \"evangelize\",\n    \"evangelised\": \"evangelized\",\n    \"evangelises\": \"evangelizes\",\n    \"evangelising\": \"evangelizing\",\n    \"exorcise\": \"exorcize\",\n    \"exorcised\": \"exorcized\",\n    \"exorcises\": \"exorcizes\",\n    \"exorcising\": \"exorcizing\",\n    \"extemporisation\": \"extemporization\",\n    \"extemporise\": \"extemporize\",\n    \"extemporised\": \"extemporized\",\n    \"extemporises\": \"extemporizes\",\n    \"extemporising\": \"extemporizing\",\n    \"externalisation\": \"externalization\",\n    \"externalisations\": \"externalizations\",\n    \"externalise\": \"externalize\",\n    \"externalised\": \"externalized\",\n    \"externalises\": \"externalizes\",\n    \"externalising\": \"externalizing\",\n    \"factorise\": \"factorize\",\n    \"factorised\": \"factorized\",\n    \"factorises\": \"factorizes\",\n    \"factorising\": \"factorizing\",\n    \"faecal\": \"fecal\",\n    \"faeces\": \"feces\",\n    \"familiarisation\": \"familiarization\",\n    \"familiarise\": \"familiarize\",\n    \"familiarised\": \"familiarized\",\n    \"familiarises\": \"familiarizes\",\n    \"familiarising\": \"familiarizing\",\n    \"fantasise\": \"fantasize\",\n    \"fantasised\": \"fantasized\",\n    \"fantasises\": \"fantasizes\",\n    \"fantasising\": \"fantasizing\",\n    \"favour\": \"favor\",\n    \"favourable\": \"favorable\",\n    \"favourably\": \"favorably\",\n    \"favoured\": \"favored\",\n    \"favouring\": \"favoring\",\n    \"favourite\": \"favorite\",\n    \"favourites\": \"favorites\",\n    \"favouritism\": \"favoritism\",\n    \"favours\": \"favors\",\n    \"feminise\": \"feminize\",\n    \"feminised\": \"feminized\",\n    \"feminises\": \"feminizes\",\n    \"feminising\": \"feminizing\",\n    \"fertilisation\": \"fertilization\",\n    \"fertilise\": \"fertilize\",\n    \"fertilised\": \"fertilized\",\n    \"fertiliser\": \"fertilizer\",\n    \"fertilisers\": \"fertilizers\",\n    \"fertilises\": \"fertilizes\",\n    \"fertilising\": \"fertilizing\",\n    \"fervour\": \"fervor\",\n    \"fibre\": \"fiber\",\n    \"fibreglass\": \"fiberglass\",\n    \"fibres\": \"fibers\",\n    \"fictionalisation\": \"fictionalization\",\n    \"fictionalisations\": \"fictionalizations\",\n    \"fictionalise\": \"fictionalize\",\n    \"fictionalised\": \"fictionalized\",\n    \"fictionalises\": \"fictionalizes\",\n    \"fictionalising\": \"fictionalizing\",\n    \"fillet\": \"filet\",\n    \"filleted\": \"fileted\",\n    \"filleting\": \"fileting\",\n    \"fillets\": \"filets\",\n    \"finalisation\": \"finalization\",\n    \"finalise\": \"finalize\",\n    \"finalised\": \"finalized\",\n    \"finalises\": \"finalizes\",\n    \"finalising\": \"finalizing\",\n    \"flautist\": \"flutist\",\n    \"flautists\": \"flutists\",\n    \"flavour\": \"flavor\",\n    \"flavoured\": \"flavored\",\n    \"flavouring\": \"flavoring\",\n    \"flavourings\": \"flavorings\",\n    \"flavourless\": \"flavorless\",\n    \"flavours\": \"flavors\",\n    \"flavoursome\": \"flavorsome\",\n    \"flyer / flier\": \"flier / flyer\",\n    \"foetal\": \"fetal\",\n    \"foetid\": \"fetid\",\n    \"foetus\": \"fetus\",\n    \"foetuses\": \"fetuses\",\n    \"formalisation\": \"formalization\",\n    \"formalise\": \"formalize\",\n    \"formalised\": \"formalized\",\n    \"formalises\": \"formalizes\",\n    \"formalising\": \"formalizing\",\n    \"fossilisation\": \"fossilization\",\n    \"fossilise\": \"fossilize\",\n    \"fossilised\": \"fossilized\",\n    \"fossilises\": \"fossilizes\",\n    \"fossilising\": \"fossilizing\",\n    \"fraternisation\": \"fraternization\",\n    \"fraternise\": \"fraternize\",\n    \"fraternised\": \"fraternized\",\n    \"fraternises\": \"fraternizes\",\n    \"fraternising\": \"fraternizing\",\n    \"fulfil\": \"fulfill\",\n    \"fulfilment\": \"fulfillment\",\n    \"fulfils\": \"fulfills\",\n    \"funnelled\": \"funneled\",\n    \"funnelling\": \"funneling\",\n    \"galvanise\": \"galvanize\",\n    \"galvanised\": \"galvanized\",\n    \"galvanises\": \"galvanizes\",\n    \"galvanising\": \"galvanizing\",\n    \"gambolled\": \"gamboled\",\n    \"gambolling\": \"gamboling\",\n    \"gaol\": \"jail\",\n    \"gaolbird\": \"jailbird\",\n    \"gaolbirds\": \"jailbirds\",\n    \"gaolbreak\": \"jailbreak\",\n    \"gaolbreaks\": \"jailbreaks\",\n    \"gaoled\": \"jailed\",\n    \"gaoler\": \"jailer\",\n    \"gaolers\": \"jailers\",\n    \"gaoling\": \"jailing\",\n    \"gaols\": \"jails\",\n    \"gasses\": \"gases\",\n    \"gage\": \"gauge\",\n    \"gaged\": \"gauged\",\n    \"gages\": \"gauges\",\n    \"gaging\": \"gauging\",\n    \"generalisation\": \"generalization\",\n    \"generalisations\": \"generalizations\",\n    \"generalise\": \"generalize\",\n    \"generalised\": \"generalized\",\n    \"generalises\": \"generalizes\",\n    \"generalising\": \"generalizing\",\n    \"ghettoise\": \"ghettoize\",\n    \"ghettoised\": \"ghettoized\",\n    \"ghettoises\": \"ghettoizes\",\n    \"ghettoising\": \"ghettoizing\",\n    \"gipsies\": \"gypsies\",\n    \"glamorise\": \"glamorize\",\n    \"glamorised\": \"glamorized\",\n    \"glamorises\": \"glamorizes\",\n    \"glamorising\": \"glamorizing\",\n    \"glamor\": \"glamour\",\n    \"globalisation\": \"globalization\",\n    \"globalise\": \"globalize\",\n    \"globalised\": \"globalized\",\n    \"globalises\": \"globalizes\",\n    \"globalising\": \"globalizing\",\n    \"glueing\": \"gluing\",\n    \"goitre\": \"goiter\",\n    \"goitres\": \"goiters\",\n    \"gonorrhoea\": \"gonorrhea\",\n    \"gramme\": \"gram\",\n    \"grammes\": \"grams\",\n    \"gravelled\": \"graveled\",\n    \"grey\": \"gray\",\n    \"greyed\": \"grayed\",\n    \"greying\": \"graying\",\n    \"greyish\": \"grayish\",\n    \"greyness\": \"grayness\",\n    \"greys\": \"grays\",\n    \"grovelled\": \"groveled\",\n    \"grovelling\": \"groveling\",\n    \"groyne\": \"groin\",\n    \"groynes\": \"groins\",\n    \"gruelling\": \"grueling\",\n    \"gruellingly\": \"gruelingly\",\n    \"gryphon\": \"griffin\",\n    \"gryphons\": \"griffins\",\n    \"gynaecological\": \"gynecological\",\n    \"gynaecologist\": \"gynecologist\",\n    \"gynaecologists\": \"gynecologists\",\n    \"gynaecology\": \"gynecology\",\n    \"haematological\": \"hematological\",\n    \"haematologist\": \"hematologist\",\n    \"haematologists\": \"hematologists\",\n    \"haematology\": \"hematology\",\n    \"haemoglobin\": \"hemoglobin\",\n    \"haemophilia\": \"hemophilia\",\n    \"haemophiliac\": \"hemophiliac\",\n    \"haemophiliacs\": \"hemophiliacs\",\n    \"haemorrhage\": \"hemorrhage\",\n    \"haemorrhaged\": \"hemorrhaged\",\n    \"haemorrhages\": \"hemorrhages\",\n    \"haemorrhaging\": \"hemorrhaging\",\n    \"haemorrhoids\": \"hemorrhoids\",\n    \"harbour\": \"harbor\",\n    \"harboured\": \"harbored\",\n    \"harbouring\": \"harboring\",\n    \"harbours\": \"harbors\",\n    \"harmonisation\": \"harmonization\",\n    \"harmonise\": \"harmonize\",\n    \"harmonised\": \"harmonized\",\n    \"harmonises\": \"harmonizes\",\n    \"harmonising\": \"harmonizing\",\n    \"homoeopath\": \"homeopath\",\n    \"homoeopathic\": \"homeopathic\",\n    \"homoeopaths\": \"homeopaths\",\n    \"homoeopathy\": \"homeopathy\",\n    \"homogenise\": \"homogenize\",\n    \"homogenised\": \"homogenized\",\n    \"homogenises\": \"homogenizes\",\n    \"homogenising\": \"homogenizing\",\n    \"honour\": \"honor\",\n    \"honourable\": \"honorable\",\n    \"honourably\": \"honorably\",\n    \"honoured\": \"honored\",\n    \"honouring\": \"honoring\",\n    \"honours\": \"honors\",\n    \"hospitalisation\": \"hospitalization\",\n    \"hospitalise\": \"hospitalize\",\n    \"hospitalised\": \"hospitalized\",\n    \"hospitalises\": \"hospitalizes\",\n    \"hospitalising\": \"hospitalizing\",\n    \"humanise\": \"humanize\",\n    \"humanised\": \"humanized\",\n    \"humanises\": \"humanizes\",\n    \"humanising\": \"humanizing\",\n    \"humour\": \"humor\",\n    \"humoured\": \"humored\",\n    \"humouring\": \"humoring\",\n    \"humourless\": \"humorless\",\n    \"humours\": \"humors\",\n    \"hybridise\": \"hybridize\",\n    \"hybridised\": \"hybridized\",\n    \"hybridises\": \"hybridizes\",\n    \"hybridising\": \"hybridizing\",\n    \"hypnotise\": \"hypnotize\",\n    \"hypnotised\": \"hypnotized\",\n    \"hypnotises\": \"hypnotizes\",\n    \"hypnotising\": \"hypnotizing\",\n    \"hypothesise\": \"hypothesize\",\n    \"hypothesised\": \"hypothesized\",\n    \"hypothesises\": \"hypothesizes\",\n    \"hypothesising\": \"hypothesizing\",\n    \"idealisation\": \"idealization\",\n    \"idealise\": \"idealize\",\n    \"idealised\": \"idealized\",\n    \"idealises\": \"idealizes\",\n    \"idealising\": \"idealizing\",\n    \"idolise\": \"idolize\",\n    \"idolised\": \"idolized\",\n    \"idolises\": \"idolizes\",\n    \"idolising\": \"idolizing\",\n    \"immobilisation\": \"immobilization\",\n    \"immobilise\": \"immobilize\",\n    \"immobilised\": \"immobilized\",\n    \"immobiliser\": \"immobilizer\",\n    \"immobilisers\": \"immobilizers\",\n    \"immobilises\": \"immobilizes\",\n    \"immobilising\": \"immobilizing\",\n    \"immortalise\": \"immortalize\",\n    \"immortalised\": \"immortalized\",\n    \"immortalises\": \"immortalizes\",\n    \"immortalising\": \"immortalizing\",\n    \"immunisation\": \"immunization\",\n    \"immunise\": \"immunize\",\n    \"immunised\": \"immunized\",\n    \"immunises\": \"immunizes\",\n    \"immunising\": \"immunizing\",\n    \"impanelled\": \"impaneled\",\n    \"impanelling\": \"impaneling\",\n    \"imperilled\": \"imperiled\",\n    \"imperilling\": \"imperiling\",\n    \"individualise\": \"individualize\",\n    \"individualised\": \"individualized\",\n    \"individualises\": \"individualizes\",\n    \"individualising\": \"individualizing\",\n    \"industrialise\": \"industrialize\",\n    \"industrialised\": \"industrialized\",\n    \"industrialises\": \"industrializes\",\n    \"industrialising\": \"industrializing\",\n    \"inflexion\": \"inflection\",\n    \"inflexions\": \"inflections\",\n    \"initialise\": \"initialize\",\n    \"initialised\": \"initialized\",\n    \"initialises\": \"initializes\",\n    \"initialising\": \"initializing\",\n    \"initialled\": \"initialed\",\n    \"initialling\": \"initialing\",\n    \"instal\": \"install\",\n    \"instalment\": \"installment\",\n    \"instalments\": \"installments\",\n    \"instals\": \"installs\",\n    \"instil\": \"instill\",\n    \"instils\": \"instills\",\n    \"institutionalisation\": \"institutionalization\",\n    \"institutionalise\": \"institutionalize\",\n    \"institutionalised\": \"institutionalized\",\n    \"institutionalises\": \"institutionalizes\",\n    \"institutionalising\": \"institutionalizing\",\n    \"intellectualise\": \"intellectualize\",\n    \"intellectualised\": \"intellectualized\",\n    \"intellectualises\": \"intellectualizes\",\n    \"intellectualising\": \"intellectualizing\",\n    \"internalisation\": \"internalization\",\n    \"internalise\": \"internalize\",\n    \"internalised\": \"internalized\",\n    \"internalises\": \"internalizes\",\n    \"internalising\": \"internalizing\",\n    \"internationalisation\": \"internationalization\",\n    \"internationalise\": \"internationalize\",\n    \"internationalised\": \"internationalized\",\n    \"internationalises\": \"internationalizes\",\n    \"internationalising\": \"internationalizing\",\n    \"ionisation\": \"ionization\",\n    \"ionise\": \"ionize\",\n    \"ionised\": \"ionized\",\n    \"ioniser\": \"ionizer\",\n    \"ionisers\": \"ionizers\",\n    \"ionises\": \"ionizes\",\n    \"ionising\": \"ionizing\",\n    \"italicise\": \"italicize\",\n    \"italicised\": \"italicized\",\n    \"italicises\": \"italicizes\",\n    \"italicising\": \"italicizing\",\n    \"itemise\": \"itemize\",\n    \"itemised\": \"itemized\",\n    \"itemises\": \"itemizes\",\n    \"itemising\": \"itemizing\",\n    \"jeopardise\": \"jeopardize\",\n    \"jeopardised\": \"jeopardized\",\n    \"jeopardises\": \"jeopardizes\",\n    \"jeopardising\": \"jeopardizing\",\n    \"jewelled\": \"jeweled\",\n    \"jeweller\": \"jeweler\",\n    \"jewellers\": \"jewelers\",\n    \"jewellery\": \"jewelry\",\n    \"judgement\": \"judgment\",\n    \"kilogramme\": \"kilogram\",\n    \"kilogrammes\": \"kilograms\",\n    \"kilometre\": \"kilometer\",\n    \"kilometres\": \"kilometers\",\n    \"labelled\": \"labeled\",\n    \"labelling\": \"labeling\",\n    \"labour\": \"labor\",\n    \"laboured\": \"labored\",\n    \"labourer\": \"laborer\",\n    \"labourers\": \"laborers\",\n    \"labouring\": \"laboring\",\n    \"labours\": \"labors\",\n    \"lacklustre\": \"lackluster\",\n    \"legalisation\": \"legalization\",\n    \"legalise\": \"legalize\",\n    \"legalised\": \"legalized\",\n    \"legalises\": \"legalizes\",\n    \"legalising\": \"legalizing\",\n    \"legitimise\": \"legitimize\",\n    \"legitimised\": \"legitimized\",\n    \"legitimises\": \"legitimizes\",\n    \"legitimising\": \"legitimizing\",\n    \"leukaemia\": \"leukemia\",\n    \"levelled\": \"leveled\",\n    \"leveller\": \"leveler\",\n    \"levellers\": \"levelers\",\n    \"levelling\": \"leveling\",\n    \"libelled\": \"libeled\",\n    \"libelling\": \"libeling\",\n    \"libellous\": \"libelous\",\n    \"liberalisation\": \"liberalization\",\n    \"liberalise\": \"liberalize\",\n    \"liberalised\": \"liberalized\",\n    \"liberalises\": \"liberalizes\",\n    \"liberalising\": \"liberalizing\",\n    \"licence\": \"license\",\n    \"licenced\": \"licensed\",\n    \"licences\": \"licenses\",\n    \"licencing\": \"licensing\",\n    \"likeable\": \"likable\",\n    \"lionisation\": \"lionization\",\n    \"lionise\": \"lionize\",\n    \"lionised\": \"lionized\",\n    \"lionises\": \"lionizes\",\n    \"lionising\": \"lionizing\",\n    \"liquidise\": \"liquidize\",\n    \"liquidised\": \"liquidized\",\n    \"liquidiser\": \"liquidizer\",\n    \"liquidisers\": \"liquidizers\",\n    \"liquidises\": \"liquidizes\",\n    \"liquidising\": \"liquidizing\",\n    \"litre\": \"liter\",\n    \"litres\": \"liters\",\n    \"localise\": \"localize\",\n    \"localised\": \"localized\",\n    \"localises\": \"localizes\",\n    \"localising\": \"localizing\",\n    \"louvre\": \"louver\",\n    \"louvred\": \"louvered\",\n    \"louvres\": \"louvers\",\n    \"lustre\": \"luster\",\n    \"magnetise\": \"magnetize\",\n    \"magnetised\": \"magnetized\",\n    \"magnetises\": \"magnetizes\",\n    \"magnetising\": \"magnetizing\",\n    \"manoeuvrability\": \"maneuverability\",\n    \"manoeuvrable\": \"maneuverable\",\n    \"manoeuvre\": \"maneuver\",\n    \"manoeuvred\": \"maneuvered\",\n    \"manoeuvres\": \"maneuvers\",\n    \"manoeuvring\": \"maneuvering\",\n    \"manoeuvrings\": \"maneuverings\",\n    \"marginalisation\": \"marginalization\",\n    \"marginalise\": \"marginalize\",\n    \"marginalised\": \"marginalized\",\n    \"marginalises\": \"marginalizes\",\n    \"marginalising\": \"marginalizing\",\n    \"marshalled\": \"marshaled\",\n    \"marshalling\": \"marshaling\",\n    \"marvelled\": \"marveled\",\n    \"marvelling\": \"marveling\",\n    \"marvellous\": \"marvelous\",\n    \"marvellously\": \"marvelously\",\n    \"materialisation\": \"materialization\",\n    \"materialise\": \"materialize\",\n    \"materialised\": \"materialized\",\n    \"materialises\": \"materializes\",\n    \"materialising\": \"materializing\",\n    \"maximisation\": \"maximization\",\n    \"maximise\": \"maximize\",\n    \"maximised\": \"maximized\",\n    \"maximises\": \"maximizes\",\n    \"maximising\": \"maximizing\",\n    \"meagre\": \"meager\",\n    \"mechanisation\": \"mechanization\",\n    \"mechanise\": \"mechanize\",\n    \"mechanised\": \"mechanized\",\n    \"mechanises\": \"mechanizes\",\n    \"mechanising\": \"mechanizing\",\n    \"mediaeval\": \"medieval\",\n    \"memorialise\": \"memorialize\",\n    \"memorialised\": \"memorialized\",\n    \"memorialises\": \"memorializes\",\n    \"memorialising\": \"memorializing\",\n    \"memorise\": \"memorize\",\n    \"memorised\": \"memorized\",\n    \"memorises\": \"memorizes\",\n    \"memorising\": \"memorizing\",\n    \"mesmerise\": \"mesmerize\",\n    \"mesmerised\": \"mesmerized\",\n    \"mesmerises\": \"mesmerizes\",\n    \"mesmerising\": \"mesmerizing\",\n    \"metabolise\": \"metabolize\",\n    \"metabolised\": \"metabolized\",\n    \"metabolises\": \"metabolizes\",\n    \"metabolising\": \"metabolizing\",\n    \"metre\": \"meter\",\n    \"metres\": \"meters\",\n    \"micrometre\": \"micrometer\",\n    \"micrometres\": \"micrometers\",\n    \"militarise\": \"militarize\",\n    \"militarised\": \"militarized\",\n    \"militarises\": \"militarizes\",\n    \"militarising\": \"militarizing\",\n    \"milligramme\": \"milligram\",\n    \"milligrammes\": \"milligrams\",\n    \"millilitre\": \"milliliter\",\n    \"millilitres\": \"milliliters\",\n    \"millimetre\": \"millimeter\",\n    \"millimetres\": \"millimeters\",\n    \"miniaturisation\": \"miniaturization\",\n    \"miniaturise\": \"miniaturize\",\n    \"miniaturised\": \"miniaturized\",\n    \"miniaturises\": \"miniaturizes\",\n    \"miniaturising\": \"miniaturizing\",\n    \"minibusses\": \"minibuses\",\n    \"minimise\": \"minimize\",\n    \"minimised\": \"minimized\",\n    \"minimises\": \"minimizes\",\n    \"minimising\": \"minimizing\",\n    \"misbehaviour\": \"misbehavior\",\n    \"misdemeanour\": \"misdemeanor\",\n    \"misdemeanours\": \"misdemeanors\",\n    \"misspelt\": \"misspelled\",\n    \"mitre\": \"miter\",\n    \"mitres\": \"miters\",\n    \"mobilisation\": \"mobilization\",\n    \"mobilise\": \"mobilize\",\n    \"mobilised\": \"mobilized\",\n    \"mobilises\": \"mobilizes\",\n    \"mobilising\": \"mobilizing\",\n    \"modelled\": \"modeled\",\n    \"modeller\": \"modeler\",\n    \"modellers\": \"modelers\",\n    \"modelling\": \"modeling\",\n    \"modernise\": \"modernize\",\n    \"modernised\": \"modernized\",\n    \"modernises\": \"modernizes\",\n    \"modernising\": \"modernizing\",\n    \"moisturise\": \"moisturize\",\n    \"moisturised\": \"moisturized\",\n    \"moisturiser\": \"moisturizer\",\n    \"moisturisers\": \"moisturizers\",\n    \"moisturises\": \"moisturizes\",\n    \"moisturising\": \"moisturizing\",\n    \"monologue\": \"monolog\",\n    \"monologues\": \"monologs\",\n    \"monopolisation\": \"monopolization\",\n    \"monopolise\": \"monopolize\",\n    \"monopolised\": \"monopolized\",\n    \"monopolises\": \"monopolizes\",\n    \"monopolising\": \"monopolizing\",\n    \"moralise\": \"moralize\",\n    \"moralised\": \"moralized\",\n    \"moralises\": \"moralizes\",\n    \"moralising\": \"moralizing\",\n    \"motorised\": \"motorized\",\n    \"mould\": \"mold\",\n    \"moulded\": \"molded\",\n    \"moulder\": \"molder\",\n    \"mouldered\": \"moldered\",\n    \"mouldering\": \"moldering\",\n    \"moulders\": \"molders\",\n    \"mouldier\": \"moldier\",\n    \"mouldiest\": \"moldiest\",\n    \"moulding\": \"molding\",\n    \"mouldings\": \"moldings\",\n    \"moulds\": \"molds\",\n    \"mouldy\": \"moldy\",\n    \"moult\": \"molt\",\n    \"moulted\": \"molted\",\n    \"moulting\": \"molting\",\n    \"moults\": \"molts\",\n    \"moustache\": \"mustache\",\n    \"moustached\": \"mustached\",\n    \"moustaches\": \"mustaches\",\n    \"moustachioed\": \"mustachioed\",\n    \"multicoloured\": \"multicolored\",\n    \"nationalisation\": \"nationalization\",\n    \"nationalisations\": \"nationalizations\",\n    \"nationalise\": \"nationalize\",\n    \"nationalised\": \"nationalized\",\n    \"nationalises\": \"nationalizes\",\n    \"nationalising\": \"nationalizing\",\n    \"naturalisation\": \"naturalization\",\n    \"naturalise\": \"naturalize\",\n    \"naturalised\": \"naturalized\",\n    \"naturalises\": \"naturalizes\",\n    \"naturalising\": \"naturalizing\",\n    \"neighbour\": \"neighbor\",\n    \"neighbourhood\": \"neighborhood\",\n    \"neighbourhoods\": \"neighborhoods\",\n    \"neighbouring\": \"neighboring\",\n    \"neighbourliness\": \"neighborliness\",\n    \"neighbourly\": \"neighborly\",\n    \"neighbours\": \"neighbors\",\n    \"neutralisation\": \"neutralization\",\n    \"neutralise\": \"neutralize\",\n    \"neutralised\": \"neutralized\",\n    \"neutralises\": \"neutralizes\",\n    \"neutralising\": \"neutralizing\",\n    \"normalisation\": \"normalization\",\n    \"normalise\": \"normalize\",\n    \"normalised\": \"normalized\",\n    \"normalises\": \"normalizes\",\n    \"normalising\": \"normalizing\",\n    \"odour\": \"odor\",\n    \"odourless\": \"odorless\",\n    \"odours\": \"odors\",\n    \"oesophagus\": \"esophagus\",\n    \"oesophaguses\": \"esophaguses\",\n    \"oestrogen\": \"estrogen\",\n    \"offence\": \"offense\",\n    \"offences\": \"offenses\",\n    \"omelette\": \"omelet\",\n    \"omelettes\": \"omelets\",\n    \"optimise\": \"optimize\",\n    \"optimised\": \"optimized\",\n    \"optimises\": \"optimizes\",\n    \"optimising\": \"optimizing\",\n    \"organisation\": \"organization\",\n    \"organisational\": \"organizational\",\n    \"organisations\": \"organizations\",\n    \"organise\": \"organize\",\n    \"organised\": \"organized\",\n    \"organiser\": \"organizer\",\n    \"organisers\": \"organizers\",\n    \"organises\": \"organizes\",\n    \"organising\": \"organizing\",\n    \"orthopaedic\": \"orthopedic\",\n    \"orthopaedics\": \"orthopedics\",\n    \"ostracise\": \"ostracize\",\n    \"ostracised\": \"ostracized\",\n    \"ostracises\": \"ostracizes\",\n    \"ostracising\": \"ostracizing\",\n    \"outmanoeuvre\": \"outmaneuver\",\n    \"outmanoeuvred\": \"outmaneuvered\",\n    \"outmanoeuvres\": \"outmaneuvers\",\n    \"outmanoeuvring\": \"outmaneuvering\",\n    \"overemphasise\": \"overemphasize\",\n    \"overemphasised\": \"overemphasized\",\n    \"overemphasises\": \"overemphasizes\",\n    \"overemphasising\": \"overemphasizing\",\n    \"oxidisation\": \"oxidization\",\n    \"oxidise\": \"oxidize\",\n    \"oxidised\": \"oxidized\",\n    \"oxidises\": \"oxidizes\",\n    \"oxidising\": \"oxidizing\",\n    \"paederast\": \"pederast\",\n    \"paederasts\": \"pederasts\",\n    \"paediatric\": \"pediatric\",\n    \"paediatrician\": \"pediatrician\",\n    \"paediatricians\": \"pediatricians\",\n    \"paediatrics\": \"pediatrics\",\n    \"paedophile\": \"pedophile\",\n    \"paedophiles\": \"pedophiles\",\n    \"paedophilia\": \"pedophilia\",\n    \"palaeolithic\": \"paleolithic\",\n    \"palaeontologist\": \"paleontologist\",\n    \"palaeontologists\": \"paleontologists\",\n    \"palaeontology\": \"paleontology\",\n    \"panelled\": \"paneled\",\n    \"panelling\": \"paneling\",\n    \"panellist\": \"panelist\",\n    \"panellists\": \"panelists\",\n    \"paralyse\": \"paralyze\",\n    \"paralysed\": \"paralyzed\",\n    \"paralyses\": \"paralyzes\",\n    \"paralysing\": \"paralyzing\",\n    \"parcelled\": \"parceled\",\n    \"parcelling\": \"parceling\",\n    \"parlour\": \"parlor\",\n    \"parlours\": \"parlors\",\n    \"particularise\": \"particularize\",\n    \"particularised\": \"particularized\",\n    \"particularises\": \"particularizes\",\n    \"particularising\": \"particularizing\",\n    \"passivisation\": \"passivization\",\n    \"passivise\": \"passivize\",\n    \"passivised\": \"passivized\",\n    \"passivises\": \"passivizes\",\n    \"passivising\": \"passivizing\",\n    \"pasteurisation\": \"pasteurization\",\n    \"pasteurise\": \"pasteurize\",\n    \"pasteurised\": \"pasteurized\",\n    \"pasteurises\": \"pasteurizes\",\n    \"pasteurising\": \"pasteurizing\",\n    \"patronise\": \"patronize\",\n    \"patronised\": \"patronized\",\n    \"patronises\": \"patronizes\",\n    \"patronising\": \"patronizing\",\n    \"patronisingly\": \"patronizingly\",\n    \"pedalled\": \"pedaled\",\n    \"pedalling\": \"pedaling\",\n    \"pedestrianisation\": \"pedestrianization\",\n    \"pedestrianise\": \"pedestrianize\",\n    \"pedestrianised\": \"pedestrianized\",\n    \"pedestrianises\": \"pedestrianizes\",\n    \"pedestrianising\": \"pedestrianizing\",\n    \"penalise\": \"penalize\",\n    \"penalised\": \"penalized\",\n    \"penalises\": \"penalizes\",\n    \"penalising\": \"penalizing\",\n    \"pencilled\": \"penciled\",\n    \"pencilling\": \"penciling\",\n    \"personalise\": \"personalize\",\n    \"personalised\": \"personalized\",\n    \"personalises\": \"personalizes\",\n    \"personalising\": \"personalizing\",\n    \"pharmacopoeia\": \"pharmacopeia\",\n    \"pharmacopoeias\": \"pharmacopeias\",\n    \"philosophise\": \"philosophize\",\n    \"philosophised\": \"philosophized\",\n    \"philosophises\": \"philosophizes\",\n    \"philosophising\": \"philosophizing\",\n    \"philtre\": \"filter\",\n    \"philtres\": \"filters\",\n    \"phoney\": \"phony\",\n    \"plagiarise\": \"plagiarize\",\n    \"plagiarised\": \"plagiarized\",\n    \"plagiarises\": \"plagiarizes\",\n    \"plagiarising\": \"plagiarizing\",\n    \"plough\": \"plow\",\n    \"ploughed\": \"plowed\",\n    \"ploughing\": \"plowing\",\n    \"ploughman\": \"plowman\",\n    \"ploughmen\": \"plowmen\",\n    \"ploughs\": \"plows\",\n    \"ploughshare\": \"plowshare\",\n    \"ploughshares\": \"plowshares\",\n    \"polarisation\": \"polarization\",\n    \"polarise\": \"polarize\",\n    \"polarised\": \"polarized\",\n    \"polarises\": \"polarizes\",\n    \"polarising\": \"polarizing\",\n    \"politicisation\": \"politicization\",\n    \"politicise\": \"politicize\",\n    \"politicised\": \"politicized\",\n    \"politicises\": \"politicizes\",\n    \"politicising\": \"politicizing\",\n    \"popularisation\": \"popularization\",\n    \"popularise\": \"popularize\",\n    \"popularised\": \"popularized\",\n    \"popularises\": \"popularizes\",\n    \"popularising\": \"popularizing\",\n    \"pouffe\": \"pouf\",\n    \"pouffes\": \"poufs\",\n    \"practise\": \"practice\",\n    \"practised\": \"practiced\",\n    \"practises\": \"practices\",\n    \"practising\": \"practicing\",\n    \"praesidium\": \"presidium\",\n    \"praesidiums\": \"presidiums\",\n    \"pressurisation\": \"pressurization\",\n    \"pressurise\": \"pressurize\",\n    \"pressurised\": \"pressurized\",\n    \"pressurises\": \"pressurizes\",\n    \"pressurising\": \"pressurizing\",\n    \"pretence\": \"pretense\",\n    \"pretences\": \"pretenses\",\n    \"primaeval\": \"primeval\",\n    \"prioritisation\": \"prioritization\",\n    \"prioritise\": \"prioritize\",\n    \"prioritised\": \"prioritized\",\n    \"prioritises\": \"prioritizes\",\n    \"prioritising\": \"prioritizing\",\n    \"privatisation\": \"privatization\",\n    \"privatisations\": \"privatizations\",\n    \"privatise\": \"privatize\",\n    \"privatised\": \"privatized\",\n    \"privatises\": \"privatizes\",\n    \"privatising\": \"privatizing\",\n    \"professionalisation\": \"professionalization\",\n    \"professionalise\": \"professionalize\",\n    \"professionalised\": \"professionalized\",\n    \"professionalises\": \"professionalizes\",\n    \"professionalising\": \"professionalizing\",\n    \"programme\": \"program\",\n    \"programmes\": \"programs\",\n    \"prologue\": \"prolog\",\n    \"prologues\": \"prologs\",\n    \"propagandise\": \"propagandize\",\n    \"propagandised\": \"propagandized\",\n    \"propagandises\": \"propagandizes\",\n    \"propagandising\": \"propagandizing\",\n    \"proselytise\": \"proselytize\",\n    \"proselytised\": \"proselytized\",\n    \"proselytiser\": \"proselytizer\",\n    \"proselytisers\": \"proselytizers\",\n    \"proselytises\": \"proselytizes\",\n    \"proselytising\": \"proselytizing\",\n    \"psychoanalyse\": \"psychoanalyze\",\n    \"psychoanalysed\": \"psychoanalyzed\",\n    \"psychoanalyses\": \"psychoanalyzes\",\n    \"psychoanalysing\": \"psychoanalyzing\",\n    \"publicise\": \"publicize\",\n    \"publicised\": \"publicized\",\n    \"publicises\": \"publicizes\",\n    \"publicising\": \"publicizing\",\n    \"pulverisation\": \"pulverization\",\n    \"pulverise\": \"pulverize\",\n    \"pulverised\": \"pulverized\",\n    \"pulverises\": \"pulverizes\",\n    \"pulverising\": \"pulverizing\",\n    \"pummelled\": \"pummel\",\n    \"pummelling\": \"pummeled\",\n    \"pyjama\": \"pajama\",\n    \"pyjamas\": \"pajamas\",\n    \"pzazz\": \"pizzazz\",\n    \"quarrelled\": \"quarreled\",\n    \"quarrelling\": \"quarreling\",\n    \"radicalise\": \"radicalize\",\n    \"radicalised\": \"radicalized\",\n    \"radicalises\": \"radicalizes\",\n    \"radicalising\": \"radicalizing\",\n    \"rancour\": \"rancor\",\n    \"randomise\": \"randomize\",\n    \"randomised\": \"randomized\",\n    \"randomises\": \"randomizes\",\n    \"randomising\": \"randomizing\",\n    \"rationalisation\": \"rationalization\",\n    \"rationalisations\": \"rationalizations\",\n    \"rationalise\": \"rationalize\",\n    \"rationalised\": \"rationalized\",\n    \"rationalises\": \"rationalizes\",\n    \"rationalising\": \"rationalizing\",\n    \"ravelled\": \"raveled\",\n    \"ravelling\": \"raveling\",\n    \"realisable\": \"realizable\",\n    \"realisation\": \"realization\",\n    \"realisations\": \"realizations\",\n    \"realise\": \"realize\",\n    \"realised\": \"realized\",\n    \"realises\": \"realizes\",\n    \"realising\": \"realizing\",\n    \"recognisable\": \"recognizable\",\n    \"recognisably\": \"recognizably\",\n    \"recognisance\": \"recognizance\",\n    \"recognise\": \"recognize\",\n    \"recognised\": \"recognized\",\n    \"recognises\": \"recognizes\",\n    \"recognising\": \"recognizing\",\n    \"reconnoitre\": \"reconnoiter\",\n    \"reconnoitred\": \"reconnoitered\",\n    \"reconnoitres\": \"reconnoiters\",\n    \"reconnoitring\": \"reconnoitering\",\n    \"refuelled\": \"refueled\",\n    \"refuelling\": \"refueling\",\n    \"regularisation\": \"regularization\",\n    \"regularise\": \"regularize\",\n    \"regularised\": \"regularized\",\n    \"regularises\": \"regularizes\",\n    \"regularising\": \"regularizing\",\n    \"remodelled\": \"remodeled\",\n    \"remodelling\": \"remodeling\",\n    \"remould\": \"remold\",\n    \"remoulded\": \"remolded\",\n    \"remoulding\": \"remolding\",\n    \"remoulds\": \"remolds\",\n    \"reorganisation\": \"reorganization\",\n    \"reorganisations\": \"reorganizations\",\n    \"reorganise\": \"reorganize\",\n    \"reorganised\": \"reorganized\",\n    \"reorganises\": \"reorganizes\",\n    \"reorganising\": \"reorganizing\",\n    \"revelled\": \"reveled\",\n    \"reveller\": \"reveler\",\n    \"revellers\": \"revelers\",\n    \"revelling\": \"reveling\",\n    \"revitalise\": \"revitalize\",\n    \"revitalised\": \"revitalized\",\n    \"revitalises\": \"revitalizes\",\n    \"revitalising\": \"revitalizing\",\n    \"revolutionise\": \"revolutionize\",\n    \"revolutionised\": \"revolutionized\",\n    \"revolutionises\": \"revolutionizes\",\n    \"revolutionising\": \"revolutionizing\",\n    \"rhapsodise\": \"rhapsodize\",\n    \"rhapsodised\": \"rhapsodized\",\n    \"rhapsodises\": \"rhapsodizes\",\n    \"rhapsodising\": \"rhapsodizing\",\n    \"rigour\": \"rigor\",\n    \"rigours\": \"rigors\",\n    \"ritualised\": \"ritualized\",\n    \"rivalled\": \"rivaled\",\n    \"rivalling\": \"rivaling\",\n    \"romanticise\": \"romanticize\",\n    \"romanticised\": \"romanticized\",\n    \"romanticises\": \"romanticizes\",\n    \"romanticising\": \"romanticizing\",\n    \"rumour\": \"rumor\",\n    \"rumoured\": \"rumored\",\n    \"rumours\": \"rumors\",\n    \"sabre\": \"saber\",\n    \"sabres\": \"sabers\",\n    \"saltpetre\": \"saltpeter\",\n    \"sanitise\": \"sanitize\",\n    \"sanitised\": \"sanitized\",\n    \"sanitises\": \"sanitizes\",\n    \"sanitising\": \"sanitizing\",\n    \"satirise\": \"satirize\",\n    \"satirised\": \"satirized\",\n    \"satirises\": \"satirizes\",\n    \"satirising\": \"satirizing\",\n    \"saviour\": \"savior\",\n    \"saviours\": \"saviors\",\n    \"savour\": \"savor\",\n    \"savoured\": \"savored\",\n    \"savouries\": \"savories\",\n    \"savouring\": \"savoring\",\n    \"savours\": \"savors\",\n    \"savoury\": \"savory\",\n    \"scandalise\": \"scandalize\",\n    \"scandalised\": \"scandalized\",\n    \"scandalises\": \"scandalizes\",\n    \"scandalising\": \"scandalizing\",\n    \"sceptic\": \"skeptic\",\n    \"sceptical\": \"skeptical\",\n    \"sceptically\": \"skeptically\",\n    \"scepticism\": \"skepticism\",\n    \"sceptics\": \"skeptics\",\n    \"sceptre\": \"scepter\",\n    \"sceptres\": \"scepters\",\n    \"scrutinise\": \"scrutinize\",\n    \"scrutinised\": \"scrutinized\",\n    \"scrutinises\": \"scrutinizes\",\n    \"scrutinising\": \"scrutinizing\",\n    \"secularisation\": \"secularization\",\n    \"secularise\": \"secularize\",\n    \"secularised\": \"secularized\",\n    \"secularises\": \"secularizes\",\n    \"secularising\": \"secularizing\",\n    \"sensationalise\": \"sensationalize\",\n    \"sensationalised\": \"sensationalized\",\n    \"sensationalises\": \"sensationalizes\",\n    \"sensationalising\": \"sensationalizing\",\n    \"sensitise\": \"sensitize\",\n    \"sensitised\": \"sensitized\",\n    \"sensitises\": \"sensitizes\",\n    \"sensitising\": \"sensitizing\",\n    \"sentimentalise\": \"sentimentalize\",\n    \"sentimentalised\": \"sentimentalized\",\n    \"sentimentalises\": \"sentimentalizes\",\n    \"sentimentalising\": \"sentimentalizing\",\n    \"sepulchre\": \"sepulcher\",\n    \"sepulchres\": \"sepulchers\",\n    \"serialisation\": \"serialization\",\n    \"serialisations\": \"serializations\",\n    \"serialise\": \"serialize\",\n    \"serialised\": \"serialized\",\n    \"serialises\": \"serializes\",\n    \"serialising\": \"serializing\",\n    \"sermonise\": \"sermonize\",\n    \"sermonised\": \"sermonized\",\n    \"sermonises\": \"sermonizes\",\n    \"sermonising\": \"sermonizing\",\n    \"sheikh\": \"sheik\",\n    \"shovelled\": \"shoveled\",\n    \"shovelling\": \"shoveling\",\n    \"shrivelled\": \"shriveled\",\n    \"shrivelling\": \"shriveling\",\n    \"signalise\": \"signalize\",\n    \"signalised\": \"signalized\",\n    \"signalises\": \"signalizes\",\n    \"signalising\": \"signalizing\",\n    \"signalled\": \"signaled\",\n    \"signalling\": \"signaling\",\n    \"smoulder\": \"smolder\",\n    \"smouldered\": \"smoldered\",\n    \"smouldering\": \"smoldering\",\n    \"smoulders\": \"smolders\",\n    \"snivelled\": \"sniveled\",\n    \"snivelling\": \"sniveling\",\n    \"snorkelled\": \"snorkeled\",\n    \"snorkelling\": \"snorkeling\",\n    \"snowplough\": \"snowplow\",\n    \"snowploughs\": \"snowplow\",\n    \"socialisation\": \"socialization\",\n    \"socialise\": \"socialize\",\n    \"socialised\": \"socialized\",\n    \"socialises\": \"socializes\",\n    \"socialising\": \"socializing\",\n    \"sodomise\": \"sodomize\",\n    \"sodomised\": \"sodomized\",\n    \"sodomises\": \"sodomizes\",\n    \"sodomising\": \"sodomizing\",\n    \"solemnise\": \"solemnize\",\n    \"solemnised\": \"solemnized\",\n    \"solemnises\": \"solemnizes\",\n    \"solemnising\": \"solemnizing\",\n    \"sombre\": \"somber\",\n    \"specialisation\": \"specialization\",\n    \"specialisations\": \"specializations\",\n    \"specialise\": \"specialize\",\n    \"specialised\": \"specialized\",\n    \"specialises\": \"specializes\",\n    \"specialising\": \"specializing\",\n    \"spectre\": \"specter\",\n    \"spectres\": \"specters\",\n    \"spiralled\": \"spiraled\",\n    \"spiralling\": \"spiraling\",\n    \"splendour\": \"splendor\",\n    \"splendours\": \"splendors\",\n    \"squirrelled\": \"squirreled\",\n    \"squirrelling\": \"squirreling\",\n    \"stabilisation\": \"stabilization\",\n    \"stabilise\": \"stabilize\",\n    \"stabilised\": \"stabilized\",\n    \"stabiliser\": \"stabilizer\",\n    \"stabilisers\": \"stabilizers\",\n    \"stabilises\": \"stabilizes\",\n    \"stabilising\": \"stabilizing\",\n    \"standardisation\": \"standardization\",\n    \"standardise\": \"standardize\",\n    \"standardised\": \"standardized\",\n    \"standardises\": \"standardizes\",\n    \"standardising\": \"standardizing\",\n    \"stencilled\": \"stenciled\",\n    \"stencilling\": \"stenciling\",\n    \"sterilisation\": \"sterilization\",\n    \"sterilisations\": \"sterilizations\",\n    \"sterilise\": \"sterilize\",\n    \"sterilised\": \"sterilized\",\n    \"steriliser\": \"sterilizer\",\n    \"sterilisers\": \"sterilizers\",\n    \"sterilises\": \"sterilizes\",\n    \"sterilising\": \"sterilizing\",\n    \"stigmatisation\": \"stigmatization\",\n    \"stigmatise\": \"stigmatize\",\n    \"stigmatised\": \"stigmatized\",\n    \"stigmatises\": \"stigmatizes\",\n    \"stigmatising\": \"stigmatizing\",\n    \"storey\": \"story\",\n    \"storeys\": \"stories\",\n    \"subsidisation\": \"subsidization\",\n    \"subsidise\": \"subsidize\",\n    \"subsidised\": \"subsidized\",\n    \"subsidiser\": \"subsidizer\",\n    \"subsidisers\": \"subsidizers\",\n    \"subsidises\": \"subsidizes\",\n    \"subsidising\": \"subsidizing\",\n    \"succour\": \"succor\",\n    \"succoured\": \"succored\",\n    \"succouring\": \"succoring\",\n    \"succours\": \"succors\",\n    \"sulphate\": \"sulfate\",\n    \"sulphates\": \"sulfates\",\n    \"sulphide\": \"sulfide\",\n    \"sulphides\": \"sulfides\",\n    \"sulphur\": \"sulfur\",\n    \"sulphurous\": \"sulfurous\",\n    \"summarise\": \"summarize\",\n    \"summarised\": \"summarized\",\n    \"summarises\": \"summarizes\",\n    \"summarising\": \"summarizing\",\n    \"swivelled\": \"swiveled\",\n    \"swivelling\": \"swiveling\",\n    \"symbolise\": \"symbolize\",\n    \"symbolised\": \"symbolized\",\n    \"symbolises\": \"symbolizes\",\n    \"symbolising\": \"symbolizing\",\n    \"sympathise\": \"sympathize\",\n    \"sympathised\": \"sympathized\",\n    \"sympathiser\": \"sympathizer\",\n    \"sympathisers\": \"sympathizers\",\n    \"sympathises\": \"sympathizes\",\n    \"sympathising\": \"sympathizing\",\n    \"synchronisation\": \"synchronization\",\n    \"synchronise\": \"synchronize\",\n    \"synchronised\": \"synchronized\",\n    \"synchronises\": \"synchronizes\",\n    \"synchronising\": \"synchronizing\",\n    \"synthesise\": \"synthesize\",\n    \"synthesised\": \"synthesized\",\n    \"synthesiser\": \"synthesizer\",\n    \"synthesisers\": \"synthesizers\",\n    \"synthesises\": \"synthesizes\",\n    \"synthesising\": \"synthesizing\",\n    \"syphon\": \"siphon\",\n    \"syphoned\": \"siphoned\",\n    \"syphoning\": \"siphoning\",\n    \"syphons\": \"siphons\",\n    \"systematisation\": \"systematization\",\n    \"systematise\": \"systematize\",\n    \"systematised\": \"systematized\",\n    \"systematises\": \"systematizes\",\n    \"systematising\": \"systematizing\",\n    \"tantalise\": \"tantalize\",\n    \"tantalised\": \"tantalized\",\n    \"tantalises\": \"tantalizes\",\n    \"tantalising\": \"tantalizing\",\n    \"tantalisingly\": \"tantalizingly\",\n    \"tasselled\": \"tasseled\",\n    \"technicolour\": \"technicolor\",\n    \"temporise\": \"temporize\",\n    \"temporised\": \"temporized\",\n    \"temporises\": \"temporizes\",\n    \"temporising\": \"temporizing\",\n    \"tenderise\": \"tenderize\",\n    \"tenderised\": \"tenderized\",\n    \"tenderises\": \"tenderizes\",\n    \"tenderising\": \"tenderizing\",\n    \"terrorise\": \"terrorize\",\n    \"terrorised\": \"terrorized\",\n    \"terrorises\": \"terrorizes\",\n    \"terrorising\": \"terrorizing\",\n    \"theatre\": \"theater\",\n    \"theatregoer\": \"theatergoer\",\n    \"theatregoers\": \"theatergoers\",\n    \"theatres\": \"theaters\",\n    \"theorise\": \"theorize\",\n    \"theorised\": \"theorized\",\n    \"theorises\": \"theorizes\",\n    \"theorising\": \"theorizing\",\n    \"tonne\": \"ton\",\n    \"tonnes\": \"tons\",\n    \"towelled\": \"toweled\",\n    \"towelling\": \"toweling\",\n    \"toxaemia\": \"toxemia\",\n    \"tranquillise\": \"tranquilize\",\n    \"tranquillised\": \"tranquilized\",\n    \"tranquilliser\": \"tranquilizer\",\n    \"tranquillisers\": \"tranquilizers\",\n    \"tranquillises\": \"tranquilizes\",\n    \"tranquillising\": \"tranquilizing\",\n    \"tranquillity\": \"tranquility\",\n    \"tranquillize\": \"tranquilize\",\n    \"tranquillized\": \"tranquilized\",\n    \"tranquillizer\": \"tranquilizer\",\n    \"tranquillizers\": \"tranquilizers\",\n    \"tranquillizes\": \"tranquilizes\",\n    \"tranquillizing\": \"tranquilizing\",\n    \"tranquilly\": \"tranquility\",\n    \"transistorised\": \"transistorized\",\n    \"traumatise\": \"traumatize\",\n    \"traumatised\": \"traumatized\",\n    \"traumatises\": \"traumatizes\",\n    \"traumatising\": \"traumatizing\",\n    \"travelled\": \"traveled\",\n    \"traveller\": \"traveler\",\n    \"travellers\": \"travelers\",\n    \"travelling\": \"traveling\",\n    \"travelog\": \"travelogue\",\n    \"travelogs\": \"travelogues\",\n    \"trialled\": \"trialed\",\n    \"trialling\": \"trialing\",\n    \"tricolour\": \"tricolor\",\n    \"tricolours\": \"tricolors\",\n    \"trivialise\": \"trivialize\",\n    \"trivialised\": \"trivialized\",\n    \"trivialises\": \"trivializes\",\n    \"trivialising\": \"trivializing\",\n    \"tumour\": \"tumor\",\n    \"tumours\": \"tumors\",\n    \"tunnelled\": \"tunneled\",\n    \"tunnelling\": \"tunneling\",\n    \"tyrannise\": \"tyrannize\",\n    \"tyrannised\": \"tyrannized\",\n    \"tyrannises\": \"tyrannizes\",\n    \"tyrannising\": \"tyrannizing\",\n    \"tyre\": \"tire\",\n    \"tyres\": \"tires\",\n    \"unauthorised\": \"unauthorized\",\n    \"uncivilised\": \"uncivilized\",\n    \"underutilised\": \"underutilized\",\n    \"unequalled\": \"unequaled\",\n    \"unfavourable\": \"unfavorable\",\n    \"unfavourably\": \"unfavorably\",\n    \"unionisation\": \"unionization\",\n    \"unionise\": \"unionize\",\n    \"unionised\": \"unionized\",\n    \"unionises\": \"unionizes\",\n    \"unionising\": \"unionizing\",\n    \"unorganised\": \"unorganized\",\n    \"unravelled\": \"unraveled\",\n    \"unravelling\": \"unraveling\",\n    \"unrecognisable\": \"unrecognizable\",\n    \"unrecognised\": \"unrecognized\",\n    \"unrivalled\": \"unrivaled\",\n    \"unsavoury\": \"unsavory\",\n    \"untrammelled\": \"untrammeled\",\n    \"urbanisation\": \"urbanization\",\n    \"urbanise\": \"urbanize\",\n    \"urbanised\": \"urbanized\",\n    \"urbanises\": \"urbanizes\",\n    \"urbanising\": \"urbanizing\",\n    \"utilisable\": \"utilizable\",\n    \"utilisation\": \"utilization\",\n    \"utilise\": \"utilize\",\n    \"utilised\": \"utilized\",\n    \"utilises\": \"utilizes\",\n    \"utilising\": \"utilizing\",\n    \"valour\": \"valor\",\n    \"vandalise\": \"vandalize\",\n    \"vandalised\": \"vandalized\",\n    \"vandalises\": \"vandalizes\",\n    \"vandalising\": \"vandalizing\",\n    \"vaporisation\": \"vaporization\",\n    \"vaporise\": \"vaporize\",\n    \"vaporised\": \"vaporized\",\n    \"vaporises\": \"vaporizes\",\n    \"vaporising\": \"vaporizing\",\n    \"vapour\": \"vapor\",\n    \"vapours\": \"vapors\",\n    \"verbalise\": \"verbalize\",\n    \"verbalised\": \"verbalized\",\n    \"verbalises\": \"verbalizes\",\n    \"verbalising\": \"verbalizing\",\n    \"victimisation\": \"victimization\",\n    \"victimise\": \"victimize\",\n    \"victimised\": \"victimized\",\n    \"victimises\": \"victimizes\",\n    \"victimising\": \"victimizing\",\n    \"videodisc\": \"videodisk\",\n    \"videodiscs\": \"videodisks\",\n    \"vigour\": \"vigor\",\n    \"visualisation\": \"visualization\",\n    \"visualisations\": \"visualizations\",\n    \"visualise\": \"visualize\",\n    \"visualised\": \"visualized\",\n    \"visualises\": \"visualizes\",\n    \"visualising\": \"visualizing\",\n    \"vocalisation\": \"vocalization\",\n    \"vocalisations\": \"vocalizations\",\n    \"vocalise\": \"vocalize\",\n    \"vocalised\": \"vocalized\",\n    \"vocalises\": \"vocalizes\",\n    \"vocalising\": \"vocalizing\",\n    \"vulcanised\": \"vulcanized\",\n    \"vulgarisation\": \"vulgarization\",\n    \"vulgarise\": \"vulgarize\",\n    \"vulgarised\": \"vulgarized\",\n    \"vulgarises\": \"vulgarizes\",\n    \"vulgarising\": \"vulgarizing\",\n    \"waggon\": \"wagon\",\n    \"waggons\": \"wagons\",\n    \"watercolour\": \"watercolor\",\n    \"watercolours\": \"watercolors\",\n    \"weaselled\": \"weaseled\",\n    \"weaselling\": \"weaseling\",\n    \"westernisation\": \"westernization\",\n    \"westernise\": \"westernize\",\n    \"westernised\": \"westernized\",\n    \"westernises\": \"westernizes\",\n    \"westernising\": \"westernizing\",\n    \"womanise\": \"womanize\",\n    \"womanised\": \"womanized\",\n    \"womaniser\": \"womanizer\",\n    \"womanisers\": \"womanizers\",\n    \"womanises\": \"womanizes\",\n    \"womanising\": \"womanizing\",\n    \"woollen\": \"woolen\",\n    \"woollens\": \"woolens\",\n    \"woollies\": \"woolies\",\n    \"woolly\": \"wooly\",\n    \"worshipped\": \"worshiped\",\n    \"worshipping\": \"worshiping\",\n    \"worshipper\": \"worshiper\",\n    \"yodelled\": \"yodeled\",\n    \"yodelling\": \"yodeling\",\n    \"yoghourt\": \"yogurt\",\n    \"yoghourts\": \"yogurts\",\n    \"yoghurt\": \"yogurt\",\n    \"yoghurts\": \"yogurts\",\n    \"mhm\": \"hmm\",\n    \"mmm\": \"hmm\"\n}"
  },
  {
    "path": "xinference/thirdparty/whisper/normalizers/english.py",
    "content": "import json\nimport os\nimport re\nfrom fractions import Fraction\nfrom typing import Iterator, List, Match, Optional, Union\n\nfrom more_itertools import windowed\n\nfrom .basic import remove_symbols_and_diacritics\n\n\nclass EnglishNumberNormalizer:\n    \"\"\"\n    Convert any spelled-out numbers into arabic numbers, while handling:\n\n    - remove any commas\n    - keep the suffixes such as: `1960s`, `274th`, `32nd`, etc.\n    - spell out currency symbols after the number. e.g. `$20 million` -> `20000000 dollars`\n    - spell out `one` and `ones`\n    - interpret successive single-digit numbers as nominal: `one oh one` -> `101`\n    \"\"\"\n\n    def __init__(self):\n        super().__init__()\n\n        self.zeros = {\"o\", \"oh\", \"zero\"}\n        self.ones = {\n            name: i\n            for i, name in enumerate(\n                [\n                    \"one\",\n                    \"two\",\n                    \"three\",\n                    \"four\",\n                    \"five\",\n                    \"six\",\n                    \"seven\",\n                    \"eight\",\n                    \"nine\",\n                    \"ten\",\n                    \"eleven\",\n                    \"twelve\",\n                    \"thirteen\",\n                    \"fourteen\",\n                    \"fifteen\",\n                    \"sixteen\",\n                    \"seventeen\",\n                    \"eighteen\",\n                    \"nineteen\",\n                ],\n                start=1,\n            )\n        }\n        self.ones_plural = {\n            \"sixes\" if name == \"six\" else name + \"s\": (value, \"s\")\n            for name, value in self.ones.items()\n        }\n        self.ones_ordinal = {\n            \"zeroth\": (0, \"th\"),\n            \"first\": (1, \"st\"),\n            \"second\": (2, \"nd\"),\n            \"third\": (3, \"rd\"),\n            \"fifth\": (5, \"th\"),\n            \"twelfth\": (12, \"th\"),\n            **{\n                name + (\"h\" if name.endswith(\"t\") else \"th\"): (value, \"th\")\n                for name, value in self.ones.items()\n                if value > 3 and value != 5 and value != 12\n            },\n        }\n        self.ones_suffixed = {**self.ones_plural, **self.ones_ordinal}\n\n        self.tens = {\n            \"twenty\": 20,\n            \"thirty\": 30,\n            \"forty\": 40,\n            \"fifty\": 50,\n            \"sixty\": 60,\n            \"seventy\": 70,\n            \"eighty\": 80,\n            \"ninety\": 90,\n        }\n        self.tens_plural = {\n            name.replace(\"y\", \"ies\"): (value, \"s\") for name, value in self.tens.items()\n        }\n        self.tens_ordinal = {\n            name.replace(\"y\", \"ieth\"): (value, \"th\")\n            for name, value in self.tens.items()\n        }\n        self.tens_suffixed = {**self.tens_plural, **self.tens_ordinal}\n\n        self.multipliers = {\n            \"hundred\": 100,\n            \"thousand\": 1_000,\n            \"million\": 1_000_000,\n            \"billion\": 1_000_000_000,\n            \"trillion\": 1_000_000_000_000,\n            \"quadrillion\": 1_000_000_000_000_000,\n            \"quintillion\": 1_000_000_000_000_000_000,\n            \"sextillion\": 1_000_000_000_000_000_000_000,\n            \"septillion\": 1_000_000_000_000_000_000_000_000,\n            \"octillion\": 1_000_000_000_000_000_000_000_000_000,\n            \"nonillion\": 1_000_000_000_000_000_000_000_000_000_000,\n            \"decillion\": 1_000_000_000_000_000_000_000_000_000_000_000,\n        }\n        self.multipliers_plural = {\n            name + \"s\": (value, \"s\") for name, value in self.multipliers.items()\n        }\n        self.multipliers_ordinal = {\n            name + \"th\": (value, \"th\") for name, value in self.multipliers.items()\n        }\n        self.multipliers_suffixed = {\n            **self.multipliers_plural,\n            **self.multipliers_ordinal,\n        }\n        self.decimals = {*self.ones, *self.tens, *self.zeros}\n\n        self.preceding_prefixers = {\n            \"minus\": \"-\",\n            \"negative\": \"-\",\n            \"plus\": \"+\",\n            \"positive\": \"+\",\n        }\n        self.following_prefixers = {\n            \"pound\": \"£\",\n            \"pounds\": \"£\",\n            \"euro\": \"€\",\n            \"euros\": \"€\",\n            \"dollar\": \"$\",\n            \"dollars\": \"$\",\n            \"cent\": \"¢\",\n            \"cents\": \"¢\",\n        }\n        self.prefixes = set(\n            list(self.preceding_prefixers.values())\n            + list(self.following_prefixers.values())\n        )\n        self.suffixers = {\n            \"per\": {\"cent\": \"%\"},\n            \"percent\": \"%\",\n        }\n        self.specials = {\"and\", \"double\", \"triple\", \"point\"}\n\n        self.words = set(\n            [\n                key\n                for mapping in [\n                    self.zeros,\n                    self.ones,\n                    self.ones_suffixed,\n                    self.tens,\n                    self.tens_suffixed,\n                    self.multipliers,\n                    self.multipliers_suffixed,\n                    self.preceding_prefixers,\n                    self.following_prefixers,\n                    self.suffixers,\n                    self.specials,\n                ]\n                for key in mapping\n            ]\n        )\n        self.literal_words = {\"one\", \"ones\"}\n\n    def process_words(self, words: List[str]) -> Iterator[str]:\n        prefix: Optional[str] = None\n        value: Optional[Union[str, int]] = None\n        skip = False\n\n        def to_fraction(s: str):\n            try:\n                return Fraction(s)\n            except ValueError:\n                return None\n\n        def output(result: Union[str, int]):\n            nonlocal prefix, value\n            result = str(result)\n            if prefix is not None:\n                result = prefix + result\n            value = None\n            prefix = None\n            return result\n\n        if len(words) == 0:\n            return\n\n        for prev, current, next in windowed([None] + words + [None], 3):\n            if skip:\n                skip = False\n                continue\n\n            next_is_numeric = next is not None and re.match(r\"^\\d+(\\.\\d+)?$\", next)\n            has_prefix = current[0] in self.prefixes\n            current_without_prefix = current[1:] if has_prefix else current\n            if re.match(r\"^\\d+(\\.\\d+)?$\", current_without_prefix):\n                # arabic numbers (potentially with signs and fractions)\n                f = to_fraction(current_without_prefix)\n                assert f is not None\n                if value is not None:\n                    if isinstance(value, str) and value.endswith(\".\"):\n                        # concatenate decimals / ip address components\n                        value = str(value) + str(current)\n                        continue\n                    else:\n                        yield output(value)\n\n                prefix = current[0] if has_prefix else prefix\n                if f.denominator == 1:\n                    value = f.numerator  # store integers as int\n                else:\n                    value = current_without_prefix\n            elif current not in self.words:\n                # non-numeric words\n                if value is not None:\n                    yield output(value)\n                yield output(current)\n            elif current in self.zeros:\n                value = str(value or \"\") + \"0\"\n            elif current in self.ones:\n                ones = self.ones[current]\n\n                if value is None:\n                    value = ones\n                elif isinstance(value, str) or prev in self.ones:\n                    if (\n                        prev in self.tens and ones < 10\n                    ):  # replace the last zero with the digit\n                        assert value[-1] == \"0\"\n                        value = value[:-1] + str(ones)\n                    else:\n                        value = str(value) + str(ones)\n                elif ones < 10:\n                    if value % 10 == 0:\n                        value += ones\n                    else:\n                        value = str(value) + str(ones)\n                else:  # eleven to nineteen\n                    if value % 100 == 0:\n                        value += ones\n                    else:\n                        value = str(value) + str(ones)\n            elif current in self.ones_suffixed:\n                # ordinal or cardinal; yield the number right away\n                ones, suffix = self.ones_suffixed[current]\n                if value is None:\n                    yield output(str(ones) + suffix)\n                elif isinstance(value, str) or prev in self.ones:\n                    if prev in self.tens and ones < 10:\n                        assert value[-1] == \"0\"\n                        yield output(value[:-1] + str(ones) + suffix)\n                    else:\n                        yield output(str(value) + str(ones) + suffix)\n                elif ones < 10:\n                    if value % 10 == 0:\n                        yield output(str(value + ones) + suffix)\n                    else:\n                        yield output(str(value) + str(ones) + suffix)\n                else:  # eleven to nineteen\n                    if value % 100 == 0:\n                        yield output(str(value + ones) + suffix)\n                    else:\n                        yield output(str(value) + str(ones) + suffix)\n                value = None\n            elif current in self.tens:\n                tens = self.tens[current]\n                if value is None:\n                    value = tens\n                elif isinstance(value, str):\n                    value = str(value) + str(tens)\n                else:\n                    if value % 100 == 0:\n                        value += tens\n                    else:\n                        value = str(value) + str(tens)\n            elif current in self.tens_suffixed:\n                # ordinal or cardinal; yield the number right away\n                tens, suffix = self.tens_suffixed[current]\n                if value is None:\n                    yield output(str(tens) + suffix)\n                elif isinstance(value, str):\n                    yield output(str(value) + str(tens) + suffix)\n                else:\n                    if value % 100 == 0:\n                        yield output(str(value + tens) + suffix)\n                    else:\n                        yield output(str(value) + str(tens) + suffix)\n            elif current in self.multipliers:\n                multiplier = self.multipliers[current]\n                if value is None:\n                    value = multiplier\n                elif isinstance(value, str) or value == 0:\n                    f = to_fraction(value)\n                    p = f * multiplier if f is not None else None\n                    if f is not None and p.denominator == 1:\n                        value = p.numerator\n                    else:\n                        yield output(value)\n                        value = multiplier\n                else:\n                    before = value // 1000 * 1000\n                    residual = value % 1000\n                    value = before + residual * multiplier\n            elif current in self.multipliers_suffixed:\n                multiplier, suffix = self.multipliers_suffixed[current]\n                if value is None:\n                    yield output(str(multiplier) + suffix)\n                elif isinstance(value, str):\n                    f = to_fraction(value)\n                    p = f * multiplier if f is not None else None\n                    if f is not None and p.denominator == 1:\n                        yield output(str(p.numerator) + suffix)\n                    else:\n                        yield output(value)\n                        yield output(str(multiplier) + suffix)\n                else:  # int\n                    before = value // 1000 * 1000\n                    residual = value % 1000\n                    value = before + residual * multiplier\n                    yield output(str(value) + suffix)\n                value = None\n            elif current in self.preceding_prefixers:\n                # apply prefix (positive, minus, etc.) if it precedes a number\n                if value is not None:\n                    yield output(value)\n\n                if next in self.words or next_is_numeric:\n                    prefix = self.preceding_prefixers[current]\n                else:\n                    yield output(current)\n            elif current in self.following_prefixers:\n                # apply prefix (dollars, cents, etc.) only after a number\n                if value is not None:\n                    prefix = self.following_prefixers[current]\n                    yield output(value)\n                else:\n                    yield output(current)\n            elif current in self.suffixers:\n                # apply suffix symbols (percent -> '%')\n                if value is not None:\n                    suffix = self.suffixers[current]\n                    if isinstance(suffix, dict):\n                        if next in suffix:\n                            yield output(str(value) + suffix[next])\n                            skip = True\n                        else:\n                            yield output(value)\n                            yield output(current)\n                    else:\n                        yield output(str(value) + suffix)\n                else:\n                    yield output(current)\n            elif current in self.specials:\n                if next not in self.words and not next_is_numeric:\n                    # apply special handling only if the next word can be numeric\n                    if value is not None:\n                        yield output(value)\n                    yield output(current)\n                elif current == \"and\":\n                    # ignore \"and\" after hundreds, thousands, etc.\n                    if prev not in self.multipliers:\n                        if value is not None:\n                            yield output(value)\n                        yield output(current)\n                elif current == \"double\" or current == \"triple\":\n                    if next in self.ones or next in self.zeros:\n                        repeats = 2 if current == \"double\" else 3\n                        ones = self.ones.get(next, 0)\n                        value = str(value or \"\") + str(ones) * repeats\n                        skip = True\n                    else:\n                        if value is not None:\n                            yield output(value)\n                        yield output(current)\n                elif current == \"point\":\n                    if next in self.decimals or next_is_numeric:\n                        value = str(value or \"\") + \".\"\n                else:\n                    # should all have been covered at this point\n                    raise ValueError(f\"Unexpected token: {current}\")\n            else:\n                # all should have been covered at this point\n                raise ValueError(f\"Unexpected token: {current}\")\n\n        if value is not None:\n            yield output(value)\n\n    def preprocess(self, s: str):\n        # replace \"<number> and a half\" with \"<number> point five\"\n        results = []\n\n        segments = re.split(r\"\\band\\s+a\\s+half\\b\", s)\n        for i, segment in enumerate(segments):\n            if len(segment.strip()) == 0:\n                continue\n            if i == len(segments) - 1:\n                results.append(segment)\n            else:\n                results.append(segment)\n                last_word = segment.rsplit(maxsplit=2)[-1]\n                if last_word in self.decimals or last_word in self.multipliers:\n                    results.append(\"point five\")\n                else:\n                    results.append(\"and a half\")\n\n        s = \" \".join(results)\n\n        # put a space at number/letter boundary\n        s = re.sub(r\"([a-z])([0-9])\", r\"\\1 \\2\", s)\n        s = re.sub(r\"([0-9])([a-z])\", r\"\\1 \\2\", s)\n\n        # but remove spaces which could be a suffix\n        s = re.sub(r\"([0-9])\\s+(st|nd|rd|th|s)\\b\", r\"\\1\\2\", s)\n\n        return s\n\n    def postprocess(self, s: str):\n        def combine_cents(m: Match):\n            try:\n                currency = m.group(1)\n                integer = m.group(2)\n                cents = int(m.group(3))\n                return f\"{currency}{integer}.{cents:02d}\"\n            except ValueError:\n                return m.string\n\n        def extract_cents(m: Match):\n            try:\n                return f\"¢{int(m.group(1))}\"\n            except ValueError:\n                return m.string\n\n        # apply currency postprocessing; \"$2 and ¢7\" -> \"$2.07\"\n        s = re.sub(r\"([€£$])([0-9]+) (?:and )?¢([0-9]{1,2})\\b\", combine_cents, s)\n        s = re.sub(r\"[€£$]0.([0-9]{1,2})\\b\", extract_cents, s)\n\n        # write \"one(s)\" instead of \"1(s)\", just for the readability\n        s = re.sub(r\"\\b1(s?)\\b\", r\"one\\1\", s)\n\n        return s\n\n    def __call__(self, s: str):\n        s = self.preprocess(s)\n        s = \" \".join(word for word in self.process_words(s.split()) if word is not None)\n        s = self.postprocess(s)\n\n        return s\n\n\nclass EnglishSpellingNormalizer:\n    \"\"\"\n    Applies British-American spelling mappings as listed in [1].\n\n    [1] https://www.tysto.com/uk-us-spelling-list.html\n    \"\"\"\n\n    def __init__(self):\n        mapping_path = os.path.join(os.path.dirname(__file__), \"english.json\")\n        self.mapping = json.load(open(mapping_path))\n\n    def __call__(self, s: str):\n        return \" \".join(self.mapping.get(word, word) for word in s.split())\n\n\nclass EnglishTextNormalizer:\n    def __init__(self):\n        self.ignore_patterns = r\"\\b(hmm|mm|mhm|mmm|uh|um)\\b\"\n        self.replacers = {\n            # common contractions\n            r\"\\bwon't\\b\": \"will not\",\n            r\"\\bcan't\\b\": \"can not\",\n            r\"\\blet's\\b\": \"let us\",\n            r\"\\bain't\\b\": \"aint\",\n            r\"\\by'all\\b\": \"you all\",\n            r\"\\bwanna\\b\": \"want to\",\n            r\"\\bgotta\\b\": \"got to\",\n            r\"\\bgonna\\b\": \"going to\",\n            r\"\\bi'ma\\b\": \"i am going to\",\n            r\"\\bimma\\b\": \"i am going to\",\n            r\"\\bwoulda\\b\": \"would have\",\n            r\"\\bcoulda\\b\": \"could have\",\n            r\"\\bshoulda\\b\": \"should have\",\n            r\"\\bma'am\\b\": \"madam\",\n            # contractions in titles/prefixes\n            r\"\\bmr\\b\": \"mister \",\n            r\"\\bmrs\\b\": \"missus \",\n            r\"\\bst\\b\": \"saint \",\n            r\"\\bdr\\b\": \"doctor \",\n            r\"\\bprof\\b\": \"professor \",\n            r\"\\bcapt\\b\": \"captain \",\n            r\"\\bgov\\b\": \"governor \",\n            r\"\\bald\\b\": \"alderman \",\n            r\"\\bgen\\b\": \"general \",\n            r\"\\bsen\\b\": \"senator \",\n            r\"\\brep\\b\": \"representative \",\n            r\"\\bpres\\b\": \"president \",\n            r\"\\brev\\b\": \"reverend \",\n            r\"\\bhon\\b\": \"honorable \",\n            r\"\\basst\\b\": \"assistant \",\n            r\"\\bassoc\\b\": \"associate \",\n            r\"\\blt\\b\": \"lieutenant \",\n            r\"\\bcol\\b\": \"colonel \",\n            r\"\\bjr\\b\": \"junior \",\n            r\"\\bsr\\b\": \"senior \",\n            r\"\\besq\\b\": \"esquire \",\n            # prefect tenses, ideally it should be any past participles, but it's harder..\n            r\"'d been\\b\": \" had been\",\n            r\"'s been\\b\": \" has been\",\n            r\"'d gone\\b\": \" had gone\",\n            r\"'s gone\\b\": \" has gone\",\n            r\"'d done\\b\": \" had done\",  # \"'s done\" is ambiguous\n            r\"'s got\\b\": \" has got\",\n            # general contractions\n            r\"n't\\b\": \" not\",\n            r\"'re\\b\": \" are\",\n            r\"'s\\b\": \" is\",\n            r\"'d\\b\": \" would\",\n            r\"'ll\\b\": \" will\",\n            r\"'t\\b\": \" not\",\n            r\"'ve\\b\": \" have\",\n            r\"'m\\b\": \" am\",\n        }\n        self.standardize_numbers = EnglishNumberNormalizer()\n        self.standardize_spellings = EnglishSpellingNormalizer()\n\n    def __call__(self, s: str):\n        s = s.lower()\n\n        s = re.sub(r\"[<\\[][^>\\]]*[>\\]]\", \"\", s)  # remove words between brackets\n        s = re.sub(r\"\\(([^)]+?)\\)\", \"\", s)  # remove words between parenthesis\n        s = re.sub(self.ignore_patterns, \"\", s)\n        s = re.sub(r\"\\s+'\", \"'\", s)  # when there's a space before an apostrophe\n\n        for pattern, replacement in self.replacers.items():\n            s = re.sub(pattern, replacement, s)\n\n        s = re.sub(r\"(\\d),(\\d)\", r\"\\1\\2\", s)  # remove commas between digits\n        s = re.sub(r\"\\.([^0-9]|$)\", r\" \\1\", s)  # remove periods not followed by numbers\n        s = remove_symbols_and_diacritics(s, keep=\".%$¢€£\")  # keep numeric symbols\n\n        s = self.standardize_numbers(s)\n        s = self.standardize_spellings(s)\n\n        # now remove prefix/suffix symbols that are not preceded/followed by numbers\n        s = re.sub(r\"[.$¢€£]([^0-9])\", r\" \\1\", s)\n        s = re.sub(r\"([^0-9])%\", r\"\\1 \", s)\n\n        s = re.sub(r\"\\s+\", \" \", s)  # replace any successive whitespaces with a space\n\n        return s\n"
  },
  {
    "path": "xinference/thirdparty/whisper/timing.py",
    "content": "import itertools\nimport subprocess\nimport warnings\nfrom dataclasses import dataclass\nfrom typing import TYPE_CHECKING, List\n\nimport numba\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\n\nfrom .audio import HOP_LENGTH, SAMPLE_RATE, TOKENS_PER_SECOND\nfrom .tokenizer import Tokenizer\n\nif TYPE_CHECKING:\n    from .model import Whisper\n\n\ndef median_filter(x: torch.Tensor, filter_width: int):\n    \"\"\"Apply a median filter of width `filter_width` along the last dimension of `x`\"\"\"\n    pad_width = filter_width // 2\n    if x.shape[-1] <= pad_width:\n        # F.pad requires the padding width to be smaller than the input dimension\n        return x\n\n    if (ndim := x.ndim) <= 2:\n        # `F.pad` does not support 1D or 2D inputs for reflect padding but supports 3D and 4D\n        x = x[None, None, :]\n\n    assert (\n        filter_width > 0 and filter_width % 2 == 1\n    ), \"`filter_width` should be an odd number\"\n\n    result = None\n    x = F.pad(x, (filter_width // 2, filter_width // 2, 0, 0), mode=\"reflect\")\n    if x.is_cuda:\n        try:\n            from .triton_ops import median_filter_cuda\n\n            result = median_filter_cuda(x, filter_width)\n        except (RuntimeError, subprocess.CalledProcessError):\n            warnings.warn(\n                \"Failed to launch Triton kernels, likely due to missing CUDA toolkit; \"\n                \"falling back to a slower median kernel implementation...\"\n            )\n\n    if result is None:\n        # sort() is faster than torch.median (https://github.com/pytorch/pytorch/issues/51450)\n        result = x.unfold(-1, filter_width, 1).sort()[0][..., filter_width // 2]\n\n    if ndim <= 2:\n        result = result[0, 0]\n\n    return result\n\n\n@numba.jit(nopython=True)\ndef backtrace(trace: np.ndarray):\n    i = trace.shape[0] - 1\n    j = trace.shape[1] - 1\n    trace[0, :] = 2\n    trace[:, 0] = 1\n\n    result = []\n    while i > 0 or j > 0:\n        result.append((i - 1, j - 1))\n\n        if trace[i, j] == 0:\n            i -= 1\n            j -= 1\n        elif trace[i, j] == 1:\n            i -= 1\n        elif trace[i, j] == 2:\n            j -= 1\n        else:\n            raise ValueError(\"Unexpected trace[i, j]\")\n\n    result = np.array(result)\n    return result[::-1, :].T\n\n\n@numba.jit(nopython=True, parallel=True)\ndef dtw_cpu(x: np.ndarray):\n    N, M = x.shape\n    cost = np.ones((N + 1, M + 1), dtype=np.float32) * np.inf\n    trace = -np.ones((N + 1, M + 1), dtype=np.float32)\n\n    cost[0, 0] = 0\n    for j in range(1, M + 1):\n        for i in range(1, N + 1):\n            c0 = cost[i - 1, j - 1]\n            c1 = cost[i - 1, j]\n            c2 = cost[i, j - 1]\n\n            if c0 < c1 and c0 < c2:\n                c, t = c0, 0\n            elif c1 < c0 and c1 < c2:\n                c, t = c1, 1\n            else:\n                c, t = c2, 2\n\n            cost[i, j] = x[i - 1, j - 1] + c\n            trace[i, j] = t\n\n    return backtrace(trace)\n\n\ndef dtw_cuda(x, BLOCK_SIZE=1024):\n    from .triton_ops import dtw_kernel\n\n    M, N = x.shape\n    assert M < BLOCK_SIZE, f\"M should be smaller than {BLOCK_SIZE=}\"\n\n    x_skew = (\n        F.pad(x, (0, M + 1), value=np.inf).flatten()[: M * (N + M)].reshape(M, N + M)\n    )\n    x_skew = x_skew.T.contiguous()\n    cost = torch.ones(N + M + 2, M + 2) * np.inf\n    cost[0, 0] = 0\n    cost = cost.cuda()\n    trace = torch.zeros_like(cost, dtype=torch.int32)\n\n    dtw_kernel[(1,)](\n        cost,\n        trace,\n        x_skew,\n        x_skew.stride(0),\n        cost.stride(0),\n        trace.stride(0),\n        N,\n        M,\n        BLOCK_SIZE=BLOCK_SIZE,\n    )\n\n    trace = trace.T.flatten()[: (M + 1) * (M + N + 3)].reshape(M + 1, M + N + 3)[\n        :, : N + 1\n    ]\n    return backtrace(trace.cpu().numpy())\n\n\ndef dtw(x: torch.Tensor) -> np.ndarray:\n    if x.is_cuda:\n        try:\n            return dtw_cuda(x)\n        except (RuntimeError, subprocess.CalledProcessError):\n            warnings.warn(\n                \"Failed to launch Triton kernels, likely due to missing CUDA toolkit; \"\n                \"falling back to a slower DTW implementation...\"\n            )\n\n    return dtw_cpu(x.double().cpu().numpy())\n\n\n@dataclass\nclass WordTiming:\n    word: str\n    tokens: List[int]\n    start: float\n    end: float\n    probability: float\n\n\ndef find_alignment(\n    model: \"Whisper\",\n    tokenizer: Tokenizer,\n    text_tokens: List[int],\n    mel: torch.Tensor,\n    num_frames: int,\n    *,\n    medfilt_width: int = 7,\n    qk_scale: float = 1.0,\n) -> List[WordTiming]:\n    if len(text_tokens) == 0:\n        return []\n\n    tokens = torch.tensor(\n        [\n            *tokenizer.sot_sequence,\n            tokenizer.no_timestamps,\n            *text_tokens,\n            tokenizer.eot,\n        ]\n    ).to(model.device)\n\n    # install hooks on the cross attention layers to retrieve the attention weights\n    QKs = [None] * model.dims.n_text_layer\n    hooks = [\n        block.cross_attn.register_forward_hook(\n            lambda _, ins, outs, index=i: QKs.__setitem__(index, outs[-1][0])\n        )\n        for i, block in enumerate(model.decoder.blocks)\n    ]\n\n    with torch.no_grad():\n        logits = model(mel.unsqueeze(0), tokens.unsqueeze(0))[0]\n        sampled_logits = logits[len(tokenizer.sot_sequence) :, : tokenizer.eot]\n        token_probs = sampled_logits.softmax(dim=-1)\n        text_token_probs = token_probs[np.arange(len(text_tokens)), text_tokens]\n        text_token_probs = text_token_probs.tolist()\n\n    for hook in hooks:\n        hook.remove()\n\n    # heads * tokens * frames\n    weights = torch.stack([QKs[_l][_h] for _l, _h in model.alignment_heads.indices().T])\n    weights = weights[:, :, : num_frames // 2]\n    weights = (weights * qk_scale).softmax(dim=-1)\n    std, mean = torch.std_mean(weights, dim=-2, keepdim=True, unbiased=False)\n    weights = (weights - mean) / std\n    weights = median_filter(weights, medfilt_width)\n\n    matrix = weights.mean(axis=0)\n    matrix = matrix[len(tokenizer.sot_sequence) : -1]\n    text_indices, time_indices = dtw(-matrix)\n\n    words, word_tokens = tokenizer.split_to_word_tokens(text_tokens + [tokenizer.eot])\n    if len(word_tokens) <= 1:\n        # return on eot only\n        # >>> np.pad([], (1, 0))\n        # array([0.])\n        # This results in crashes when we lookup jump_times with float, like\n        # IndexError: arrays used as indices must be of integer (or boolean) type\n        return []\n    word_boundaries = np.pad(np.cumsum([len(t) for t in word_tokens[:-1]]), (1, 0))\n\n    jumps = np.pad(np.diff(text_indices), (1, 0), constant_values=1).astype(bool)\n    jump_times = time_indices[jumps] / TOKENS_PER_SECOND\n    start_times = jump_times[word_boundaries[:-1]]\n    end_times = jump_times[word_boundaries[1:]]\n    word_probabilities = [\n        np.mean(text_token_probs[i:j])\n        for i, j in zip(word_boundaries[:-1], word_boundaries[1:])\n    ]\n\n    return [\n        WordTiming(word, tokens, start, end, probability)\n        for word, tokens, start, end, probability in zip(\n            words, word_tokens, start_times, end_times, word_probabilities\n        )\n    ]\n\n\ndef merge_punctuations(alignment: List[WordTiming], prepended: str, appended: str):\n    # merge prepended punctuations\n    i = len(alignment) - 2\n    j = len(alignment) - 1\n    while i >= 0:\n        previous = alignment[i]\n        following = alignment[j]\n        if previous.word.startswith(\" \") and previous.word.strip() in prepended:\n            # prepend it to the following word\n            following.word = previous.word + following.word\n            following.tokens = previous.tokens + following.tokens\n            previous.word = \"\"\n            previous.tokens = []\n        else:\n            j = i\n        i -= 1\n\n    # merge appended punctuations\n    i = 0\n    j = 1\n    while j < len(alignment):\n        previous = alignment[i]\n        following = alignment[j]\n        if not previous.word.endswith(\" \") and following.word in appended:\n            # append it to the previous word\n            previous.word = previous.word + following.word\n            previous.tokens = previous.tokens + following.tokens\n            following.word = \"\"\n            following.tokens = []\n        else:\n            i = j\n        j += 1\n\n\ndef add_word_timestamps(\n    *,\n    segments: List[dict],\n    model: \"Whisper\",\n    tokenizer: Tokenizer,\n    mel: torch.Tensor,\n    num_frames: int,\n    prepend_punctuations: str = \"\\\"'“¿([{-\",\n    append_punctuations: str = \"\\\"'.。,，!！?？:：”)]}、\",\n    last_speech_timestamp: float,\n    **kwargs,\n):\n    if len(segments) == 0:\n        return\n\n    text_tokens_per_segment = [\n        [token for token in segment[\"tokens\"] if token < tokenizer.eot]\n        for segment in segments\n    ]\n\n    text_tokens = list(itertools.chain.from_iterable(text_tokens_per_segment))\n    alignment = find_alignment(model, tokenizer, text_tokens, mel, num_frames, **kwargs)\n    word_durations = np.array([t.end - t.start for t in alignment])\n    word_durations = word_durations[word_durations.nonzero()]\n    median_duration = np.median(word_durations) if len(word_durations) > 0 else 0.0\n    median_duration = min(0.7, float(median_duration))\n    max_duration = median_duration * 2\n\n    # hack: truncate long words at sentence boundaries.\n    # a better segmentation algorithm based on VAD should be able to replace this.\n    if len(word_durations) > 0:\n        sentence_end_marks = \".。!！?？\"\n        # ensure words at sentence boundaries are not longer than twice the median word duration.\n        for i in range(1, len(alignment)):\n            if alignment[i].end - alignment[i].start > max_duration:\n                if alignment[i].word in sentence_end_marks:\n                    alignment[i].end = alignment[i].start + max_duration\n                elif alignment[i - 1].word in sentence_end_marks:\n                    alignment[i].start = alignment[i].end - max_duration\n\n    merge_punctuations(alignment, prepend_punctuations, append_punctuations)\n\n    time_offset = segments[0][\"seek\"] * HOP_LENGTH / SAMPLE_RATE\n    word_index = 0\n\n    for segment, text_tokens in zip(segments, text_tokens_per_segment):\n        saved_tokens = 0\n        words = []\n\n        while word_index < len(alignment) and saved_tokens < len(text_tokens):\n            timing = alignment[word_index]\n\n            if timing.word:\n                words.append(\n                    dict(\n                        word=timing.word,\n                        start=round(time_offset + timing.start, 2),\n                        end=round(time_offset + timing.end, 2),\n                        probability=timing.probability,\n                    )\n                )\n\n            saved_tokens += len(timing.tokens)\n            word_index += 1\n\n        # hack: truncate long words at segment boundaries.\n        # a better segmentation algorithm based on VAD should be able to replace this.\n        if len(words) > 0:\n            # ensure the first and second word after a pause is not longer than\n            # twice the median word duration.\n            if words[0][\"end\"] - last_speech_timestamp > median_duration * 4 and (\n                words[0][\"end\"] - words[0][\"start\"] > max_duration\n                or (\n                    len(words) > 1\n                    and words[1][\"end\"] - words[0][\"start\"] > max_duration * 2\n                )\n            ):\n                if (\n                    len(words) > 1\n                    and words[1][\"end\"] - words[1][\"start\"] > max_duration\n                ):\n                    boundary = max(words[1][\"end\"] / 2, words[1][\"end\"] - max_duration)\n                    words[0][\"end\"] = words[1][\"start\"] = boundary\n                words[0][\"start\"] = max(0, words[0][\"end\"] - max_duration)\n\n            # prefer the segment-level start timestamp if the first word is too long.\n            if (\n                segment[\"start\"] < words[0][\"end\"]\n                and segment[\"start\"] - 0.5 > words[0][\"start\"]\n            ):\n                words[0][\"start\"] = max(\n                    0, min(words[0][\"end\"] - median_duration, segment[\"start\"])\n                )\n            else:\n                segment[\"start\"] = words[0][\"start\"]\n\n            # prefer the segment-level end timestamp if the last word is too long.\n            if (\n                segment[\"end\"] > words[-1][\"start\"]\n                and segment[\"end\"] + 0.5 < words[-1][\"end\"]\n            ):\n                words[-1][\"end\"] = max(\n                    words[-1][\"start\"] + median_duration, segment[\"end\"]\n                )\n            else:\n                segment[\"end\"] = words[-1][\"end\"]\n\n            last_speech_timestamp = segment[\"end\"]\n\n        segment[\"words\"] = words\n"
  },
  {
    "path": "xinference/thirdparty/whisper/tokenizer.py",
    "content": "import base64\nimport os\nimport string\nfrom dataclasses import dataclass, field\nfrom functools import cached_property, lru_cache\nfrom typing import Dict, List, Optional, Tuple\n\nimport tiktoken\n\nLANGUAGES = {\n    \"en\": \"english\",\n    \"zh\": \"chinese\",\n    \"de\": \"german\",\n    \"es\": \"spanish\",\n    \"ru\": \"russian\",\n    \"ko\": \"korean\",\n    \"fr\": \"french\",\n    \"ja\": \"japanese\",\n    \"pt\": \"portuguese\",\n    \"tr\": \"turkish\",\n    \"pl\": \"polish\",\n    \"ca\": \"catalan\",\n    \"nl\": \"dutch\",\n    \"ar\": \"arabic\",\n    \"sv\": \"swedish\",\n    \"it\": \"italian\",\n    \"id\": \"indonesian\",\n    \"hi\": \"hindi\",\n    \"fi\": \"finnish\",\n    \"vi\": \"vietnamese\",\n    \"he\": \"hebrew\",\n    \"uk\": \"ukrainian\",\n    \"el\": \"greek\",\n    \"ms\": \"malay\",\n    \"cs\": \"czech\",\n    \"ro\": \"romanian\",\n    \"da\": \"danish\",\n    \"hu\": \"hungarian\",\n    \"ta\": \"tamil\",\n    \"no\": \"norwegian\",\n    \"th\": \"thai\",\n    \"ur\": \"urdu\",\n    \"hr\": \"croatian\",\n    \"bg\": \"bulgarian\",\n    \"lt\": \"lithuanian\",\n    \"la\": \"latin\",\n    \"mi\": \"maori\",\n    \"ml\": \"malayalam\",\n    \"cy\": \"welsh\",\n    \"sk\": \"slovak\",\n    \"te\": \"telugu\",\n    \"fa\": \"persian\",\n    \"lv\": \"latvian\",\n    \"bn\": \"bengali\",\n    \"sr\": \"serbian\",\n    \"az\": \"azerbaijani\",\n    \"sl\": \"slovenian\",\n    \"kn\": \"kannada\",\n    \"et\": \"estonian\",\n    \"mk\": \"macedonian\",\n    \"br\": \"breton\",\n    \"eu\": \"basque\",\n    \"is\": \"icelandic\",\n    \"hy\": \"armenian\",\n    \"ne\": \"nepali\",\n    \"mn\": \"mongolian\",\n    \"bs\": \"bosnian\",\n    \"kk\": \"kazakh\",\n    \"sq\": \"albanian\",\n    \"sw\": \"swahili\",\n    \"gl\": \"galician\",\n    \"mr\": \"marathi\",\n    \"pa\": \"punjabi\",\n    \"si\": \"sinhala\",\n    \"km\": \"khmer\",\n    \"sn\": \"shona\",\n    \"yo\": \"yoruba\",\n    \"so\": \"somali\",\n    \"af\": \"afrikaans\",\n    \"oc\": \"occitan\",\n    \"ka\": \"georgian\",\n    \"be\": \"belarusian\",\n    \"tg\": \"tajik\",\n    \"sd\": \"sindhi\",\n    \"gu\": \"gujarati\",\n    \"am\": \"amharic\",\n    \"yi\": \"yiddish\",\n    \"lo\": \"lao\",\n    \"uz\": \"uzbek\",\n    \"fo\": \"faroese\",\n    \"ht\": \"haitian creole\",\n    \"ps\": \"pashto\",\n    \"tk\": \"turkmen\",\n    \"nn\": \"nynorsk\",\n    \"mt\": \"maltese\",\n    \"sa\": \"sanskrit\",\n    \"lb\": \"luxembourgish\",\n    \"my\": \"myanmar\",\n    \"bo\": \"tibetan\",\n    \"tl\": \"tagalog\",\n    \"mg\": \"malagasy\",\n    \"as\": \"assamese\",\n    \"tt\": \"tatar\",\n    \"haw\": \"hawaiian\",\n    \"ln\": \"lingala\",\n    \"ha\": \"hausa\",\n    \"ba\": \"bashkir\",\n    \"jw\": \"javanese\",\n    \"su\": \"sundanese\",\n    \"yue\": \"cantonese\",\n}\n\n# language code lookup by name, with a few language aliases\nTO_LANGUAGE_CODE = {\n    **{language: code for code, language in LANGUAGES.items()},\n    \"burmese\": \"my\",\n    \"valencian\": \"ca\",\n    \"flemish\": \"nl\",\n    \"haitian\": \"ht\",\n    \"letzeburgesch\": \"lb\",\n    \"pushto\": \"ps\",\n    \"panjabi\": \"pa\",\n    \"moldavian\": \"ro\",\n    \"moldovan\": \"ro\",\n    \"sinhalese\": \"si\",\n    \"castilian\": \"es\",\n    \"mandarin\": \"zh\",\n}\n\n\n@dataclass\nclass Tokenizer:\n    \"\"\"A thin wrapper around `tiktoken` providing quick access to special tokens\"\"\"\n\n    encoding: tiktoken.Encoding\n    num_languages: int\n    language: Optional[str] = None\n    task: Optional[str] = None\n    sot_sequence: Tuple[int] = ()\n    special_tokens: Dict[str, int] = field(default_factory=dict)\n\n    def __post_init__(self):\n        for special in self.encoding.special_tokens_set:\n            special_token = self.encoding.encode_single_token(special)\n            self.special_tokens[special] = special_token\n\n        sot: int = self.special_tokens[\"<|startoftranscript|>\"]\n        translate: int = self.special_tokens[\"<|translate|>\"]\n        transcribe: int = self.special_tokens[\"<|transcribe|>\"]\n\n        langs = tuple(LANGUAGES.keys())[: self.num_languages]\n        sot_sequence = [sot]\n        if self.language is not None:\n            sot_sequence.append(sot + 1 + langs.index(self.language))\n        if self.task is not None:\n            task_token: int = transcribe if self.task == \"transcribe\" else translate\n            sot_sequence.append(task_token)\n\n        self.sot_sequence = tuple(sot_sequence)\n\n    def encode(self, text, **kwargs):\n        return self.encoding.encode(text, **kwargs)\n\n    def decode(self, token_ids: List[int], **kwargs) -> str:\n        token_ids = [t for t in token_ids if t < self.timestamp_begin]\n        return self.encoding.decode(token_ids, **kwargs)\n\n    def decode_with_timestamps(self, token_ids: List[int], **kwargs) -> str:\n        \"\"\"\n        Timestamp tokens are above other special tokens' id range and are ignored by `decode()`.\n        This method decodes given tokens with timestamps tokens annotated, e.g. \"<|1.08|>\".\n        \"\"\"\n        return self.encoding.decode(token_ids, **kwargs)\n\n    @cached_property\n    def eot(self) -> int:\n        return self.encoding.eot_token\n\n    @cached_property\n    def transcribe(self) -> int:\n        return self.special_tokens[\"<|transcribe|>\"]\n\n    @cached_property\n    def translate(self) -> int:\n        return self.special_tokens[\"<|translate|>\"]\n\n    @cached_property\n    def sot(self) -> int:\n        return self.special_tokens[\"<|startoftranscript|>\"]\n\n    @cached_property\n    def sot_lm(self) -> int:\n        return self.special_tokens[\"<|startoflm|>\"]\n\n    @cached_property\n    def sot_prev(self) -> int:\n        return self.special_tokens[\"<|startofprev|>\"]\n\n    @cached_property\n    def no_speech(self) -> int:\n        return self.special_tokens[\"<|nospeech|>\"]\n\n    @cached_property\n    def no_timestamps(self) -> int:\n        return self.special_tokens[\"<|notimestamps|>\"]\n\n    @cached_property\n    def timestamp_begin(self) -> int:\n        return self.special_tokens[\"<|0.00|>\"]\n\n    @cached_property\n    def language_token(self) -> int:\n        \"\"\"Returns the token id corresponding to the value of the `language` field\"\"\"\n        if self.language is None:\n            raise ValueError(\"This tokenizer does not have language token configured\")\n\n        return self.to_language_token(self.language)\n\n    def to_language_token(self, language):\n        if token := self.special_tokens.get(f\"<|{language}|>\", None):\n            return token\n\n        raise KeyError(f\"Language {language} not found in tokenizer.\")\n\n    @cached_property\n    def all_language_tokens(self) -> Tuple[int]:\n        result = []\n        for token, token_id in self.special_tokens.items():\n            if token.strip(\"<|>\") in LANGUAGES:\n                result.append(token_id)\n        return tuple(result)[: self.num_languages]\n\n    @cached_property\n    def all_language_codes(self) -> Tuple[str]:\n        return tuple(self.decode([_l]).strip(\"<|>\") for _l in self.all_language_tokens)\n\n    @cached_property\n    def sot_sequence_including_notimestamps(self) -> Tuple[int]:\n        return tuple(list(self.sot_sequence) + [self.no_timestamps])\n\n    @cached_property\n    def non_speech_tokens(self) -> Tuple[int]:\n        \"\"\"\n        Returns the list of tokens to suppress in order to avoid any speaker tags or non-speech\n        annotations, to prevent sampling texts that are not actually spoken in the audio, e.g.\n\n        - ♪♪♪\n        - ( SPEAKING FOREIGN LANGUAGE )\n        - [DAVID] Hey there,\n\n        keeping basic punctuations like commas, periods, question marks, exclamation points, etc.\n        \"\"\"\n        symbols = list('\"#()*+/:;<=>@[\\\\]^_`{|}~「」『』')\n        symbols += (\n            \"<< >> <<< >>> -- --- -( -[ (' (\\\" (( )) ((( ))) [[ ]] {{ }} ♪♪ ♪♪♪\".split()\n        )\n\n        # symbols that may be a single token or multiple tokens depending on the tokenizer.\n        # In case they're multiple tokens, suppress the first token, which is safe because:\n        # These are between U+2640 and U+267F miscellaneous symbols that are okay to suppress\n        # in generations, and in the 3-byte UTF-8 representation they share the first two bytes.\n        miscellaneous = set(\"♩♪♫♬♭♮♯\")\n        assert all(0x2640 <= ord(c) <= 0x267F for c in miscellaneous)\n\n        # allow hyphens \"-\" and single quotes \"'\" between words, but not at the beginning of a word\n        result = {self.encoding.encode(\" -\")[0], self.encoding.encode(\" '\")[0]}\n        for symbol in symbols + list(miscellaneous):\n            for tokens in [\n                self.encoding.encode(symbol),\n                self.encoding.encode(\" \" + symbol),\n            ]:\n                if len(tokens) == 1 or symbol in miscellaneous:\n                    result.add(tokens[0])\n\n        return tuple(sorted(result))\n\n    def split_to_word_tokens(self, tokens: List[int]):\n        if self.language in {\"zh\", \"ja\", \"th\", \"lo\", \"my\", \"yue\"}:\n            # These languages don't typically use spaces, so it is difficult to split words\n            # without morpheme analysis. Here, we instead split words at any\n            # position where the tokens are decoded as valid unicode points\n            return self.split_tokens_on_unicode(tokens)\n\n        return self.split_tokens_on_spaces(tokens)\n\n    def split_tokens_on_unicode(self, tokens: List[int]):\n        decoded_full = self.decode_with_timestamps(tokens)\n        replacement_char = \"\\ufffd\"\n\n        words = []\n        word_tokens = []\n        current_tokens = []\n        unicode_offset = 0\n\n        for token in tokens:\n            current_tokens.append(token)\n            decoded = self.decode_with_timestamps(current_tokens)\n\n            if (\n                replacement_char not in decoded\n                or decoded_full[unicode_offset + decoded.index(replacement_char)]\n                == replacement_char\n            ):\n                words.append(decoded)\n                word_tokens.append(current_tokens)\n                current_tokens = []\n                unicode_offset += len(decoded)\n\n        return words, word_tokens\n\n    def split_tokens_on_spaces(self, tokens: List[int]):\n        subwords, subword_tokens_list = self.split_tokens_on_unicode(tokens)\n        words = []\n        word_tokens = []\n\n        for subword, subword_tokens in zip(subwords, subword_tokens_list):\n            special = subword_tokens[0] >= self.eot\n            with_space = subword.startswith(\" \")\n            punctuation = subword.strip() in string.punctuation\n            if special or with_space or punctuation or len(words) == 0:\n                words.append(subword)\n                word_tokens.append(subword_tokens)\n            else:\n                words[-1] = words[-1] + subword\n                word_tokens[-1].extend(subword_tokens)\n\n        return words, word_tokens\n\n\n@lru_cache(maxsize=None)\ndef get_encoding(name: str = \"gpt2\", num_languages: int = 99):\n    vocab_path = os.path.join(os.path.dirname(__file__), \"assets\", f\"{name}.tiktoken\")\n    ranks = {\n        base64.b64decode(token): int(rank)\n        for token, rank in (line.split() for line in open(vocab_path) if line)\n    }\n    n_vocab = len(ranks)\n    special_tokens = {}\n\n    specials = [\n        \"<|endoftext|>\",\n        \"<|startoftranscript|>\",\n        *[f\"<|{lang}|>\" for lang in list(LANGUAGES.keys())[:num_languages]],\n        \"<|translate|>\",\n        \"<|transcribe|>\",\n        \"<|startoflm|>\",\n        \"<|startofprev|>\",\n        \"<|nospeech|>\",\n        \"<|notimestamps|>\",\n        *[f\"<|{i * 0.02:.2f}|>\" for i in range(1501)],\n    ]\n\n    for token in specials:\n        special_tokens[token] = n_vocab\n        n_vocab += 1\n\n    return tiktoken.Encoding(\n        name=os.path.basename(vocab_path),\n        explicit_n_vocab=n_vocab,\n        pat_str=r\"\"\"'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+\"\"\",\n        mergeable_ranks=ranks,\n        special_tokens=special_tokens,\n    )\n\n\n@lru_cache(maxsize=None)\ndef get_tokenizer(\n    multilingual: bool,\n    *,\n    num_languages: int = 99,\n    language: Optional[str] = None,\n    task: Optional[str] = None,  # Literal[\"transcribe\", \"translate\", None]\n) -> Tokenizer:\n    if language is not None:\n        language = language.lower()\n        if language not in LANGUAGES:\n            if language in TO_LANGUAGE_CODE:\n                language = TO_LANGUAGE_CODE[language]\n            else:\n                raise ValueError(f\"Unsupported language: {language}\")\n\n    if multilingual:\n        encoding_name = \"multilingual\"\n        language = language or \"en\"\n        task = task or \"transcribe\"\n    else:\n        encoding_name = \"gpt2\"\n        language = None\n        task = None\n\n    encoding = get_encoding(name=encoding_name, num_languages=num_languages)\n\n    return Tokenizer(\n        encoding=encoding, num_languages=num_languages, language=language, task=task\n    )\n"
  },
  {
    "path": "xinference/thirdparty/whisper/transcribe.py",
    "content": "import argparse\nimport os\nimport traceback\nimport warnings\nfrom typing import TYPE_CHECKING, List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nimport tqdm\n\nfrom .audio import (\n    FRAMES_PER_SECOND,\n    HOP_LENGTH,\n    N_FRAMES,\n    N_SAMPLES,\n    SAMPLE_RATE,\n    log_mel_spectrogram,\n    pad_or_trim,\n)\nfrom .decoding import DecodingOptions, DecodingResult\nfrom .timing import add_word_timestamps\nfrom .tokenizer import LANGUAGES, TO_LANGUAGE_CODE, get_tokenizer\nfrom .utils import (\n    exact_div,\n    format_timestamp,\n    get_end,\n    get_writer,\n    make_safe,\n    optional_float,\n    optional_int,\n    str2bool,\n)\n\nif TYPE_CHECKING:\n    from .model import Whisper\n\n\ndef transcribe(\n    model: \"Whisper\",\n    audio: Union[str, np.ndarray, torch.Tensor],\n    *,\n    verbose: Optional[bool] = None,\n    temperature: Union[float, Tuple[float, ...]] = (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),\n    compression_ratio_threshold: Optional[float] = 2.4,\n    logprob_threshold: Optional[float] = -1.0,\n    no_speech_threshold: Optional[float] = 0.6,\n    condition_on_previous_text: bool = True,\n    initial_prompt: Optional[str] = None,\n    word_timestamps: bool = False,\n    prepend_punctuations: str = \"\\\"'“¿([{-\",\n    append_punctuations: str = \"\\\"'.。,，!！?？:：”)]}、\",\n    clip_timestamps: Union[str, List[float]] = \"0\",\n    hallucination_silence_threshold: Optional[float] = None,\n    **decode_options,\n):\n    \"\"\"\n    Transcribe an audio file using Whisper\n\n    Parameters\n    ----------\n    model: Whisper\n        The Whisper model instance\n\n    audio: Union[str, np.ndarray, torch.Tensor]\n        The path to the audio file to open, or the audio waveform\n\n    verbose: bool\n        Whether to display the text being decoded to the console. If True, displays all the details,\n        If False, displays minimal details. If None, does not display anything\n\n    temperature: Union[float, Tuple[float, ...]]\n        Temperature for sampling. It can be a tuple of temperatures, which will be successively used\n        upon failures according to either `compression_ratio_threshold` or `logprob_threshold`.\n\n    compression_ratio_threshold: float\n        If the gzip compression ratio is above this value, treat as failed\n\n    logprob_threshold: float\n        If the average log probability over sampled tokens is below this value, treat as failed\n\n    no_speech_threshold: float\n        If the no_speech probability is higher than this value AND the average log probability\n        over sampled tokens is below `logprob_threshold`, consider the segment as silent\n\n    condition_on_previous_text: bool\n        if True, the previous output of the model is provided as a prompt for the next window;\n        disabling may make the text inconsistent across windows, but the model becomes less prone to\n        getting stuck in a failure loop, such as repetition looping or timestamps going out of sync.\n\n    word_timestamps: bool\n        Extract word-level timestamps using the cross-attention pattern and dynamic time warping,\n        and include the timestamps for each word in each segment.\n\n    prepend_punctuations: str\n        If word_timestamps is True, merge these punctuation symbols with the next word\n\n    append_punctuations: str\n        If word_timestamps is True, merge these punctuation symbols with the previous word\n\n    initial_prompt: Optional[str]\n        Optional text to provide as a prompt for the first window. This can be used to provide, or\n        \"prompt-engineer\" a context for transcription, e.g. custom vocabularies or proper nouns\n        to make it more likely to predict those word correctly.\n\n    decode_options: dict\n        Keyword arguments to construct `DecodingOptions` instances\n\n    clip_timestamps: Union[str, List[float]]\n        Comma-separated list start,end,start,end,... timestamps (in seconds) of clips to process.\n        The last end timestamp defaults to the end of the file.\n\n    hallucination_silence_threshold: Optional[float]\n        When word_timestamps is True, skip silent periods longer than this threshold (in seconds)\n        when a possible hallucination is detected\n\n    Returns\n    -------\n    A dictionary containing the resulting text (\"text\") and segment-level details (\"segments\"), and\n    the spoken language (\"language\"), which is detected when `decode_options[\"language\"]` is None.\n    \"\"\"\n    dtype = torch.float16 if decode_options.get(\"fp16\", True) else torch.float32\n    if model.device == torch.device(\"cpu\"):\n        if torch.cuda.is_available():\n            warnings.warn(\"Performing inference on CPU when CUDA is available\")\n        if dtype == torch.float16:\n            warnings.warn(\"FP16 is not supported on CPU; using FP32 instead\")\n            dtype = torch.float32\n\n    if dtype == torch.float32:\n        decode_options[\"fp16\"] = False\n\n    # Pad 30-seconds of silence to the input audio, for slicing\n    mel = log_mel_spectrogram(audio, model.dims.n_mels, padding=N_SAMPLES)\n    content_frames = mel.shape[-1] - N_FRAMES\n    content_duration = float(content_frames * HOP_LENGTH / SAMPLE_RATE)\n\n    if decode_options.get(\"language\", None) is None:\n        if not model.is_multilingual:\n            decode_options[\"language\"] = \"en\"\n        else:\n            if verbose:\n                print(\n                    \"Detecting language using up to the first 30 seconds. Use `--language` to specify the language\"\n                )\n            mel_segment = pad_or_trim(mel, N_FRAMES).to(model.device).to(dtype)\n            _, probs = model.detect_language(mel_segment)\n            decode_options[\"language\"] = max(probs, key=probs.get)\n            if verbose is not None:\n                print(\n                    f\"Detected language: {LANGUAGES[decode_options['language']].title()}\"\n                )\n\n    language: str = decode_options[\"language\"]\n    task: str = decode_options.get(\"task\", \"transcribe\")\n    tokenizer = get_tokenizer(\n        model.is_multilingual,\n        num_languages=model.num_languages,\n        language=language,\n        task=task,\n    )\n\n    if isinstance(clip_timestamps, str):\n        clip_timestamps = [\n            float(ts) for ts in (clip_timestamps.split(\",\") if clip_timestamps else [])\n        ]\n    seek_points: List[int] = [round(ts * FRAMES_PER_SECOND) for ts in clip_timestamps]\n    if len(seek_points) == 0:\n        seek_points.append(0)\n    if len(seek_points) % 2 == 1:\n        seek_points.append(content_frames)\n    seek_clips: List[Tuple[int, int]] = list(zip(seek_points[::2], seek_points[1::2]))\n\n    punctuation = \"\\\"'“¿([{-\\\"'.。,，!！?？:：”)]}、\"\n\n    if word_timestamps and task == \"translate\":\n        warnings.warn(\"Word-level timestamps on translations may not be reliable.\")\n\n    def decode_with_fallback(segment: torch.Tensor) -> DecodingResult:\n        temperatures = (\n            [temperature] if isinstance(temperature, (int, float)) else temperature\n        )\n        decode_result = None\n\n        for t in temperatures:\n            kwargs = {**decode_options}\n            if t > 0:\n                # disable beam_size and patience when t > 0\n                kwargs.pop(\"beam_size\", None)\n                kwargs.pop(\"patience\", None)\n            else:\n                # disable best_of when t == 0\n                kwargs.pop(\"best_of\", None)\n\n            options = DecodingOptions(**kwargs, temperature=t)\n            decode_result = model.decode(segment, options)\n\n            needs_fallback = False\n            if (\n                compression_ratio_threshold is not None\n                and decode_result.compression_ratio > compression_ratio_threshold\n            ):\n                needs_fallback = True  # too repetitive\n            if (\n                logprob_threshold is not None\n                and decode_result.avg_logprob < logprob_threshold\n            ):\n                needs_fallback = True  # average log probability is too low\n            if (\n                no_speech_threshold is not None\n                and decode_result.no_speech_prob > no_speech_threshold\n            ):\n                needs_fallback = False  # silence\n            if not needs_fallback:\n                break\n\n        return decode_result\n\n    clip_idx = 0\n    seek = seek_clips[clip_idx][0]\n    input_stride = exact_div(\n        N_FRAMES, model.dims.n_audio_ctx\n    )  # mel frames per output token: 2\n    time_precision = (\n        input_stride * HOP_LENGTH / SAMPLE_RATE\n    )  # time per output token: 0.02 (seconds)\n    all_tokens = []\n    all_segments = []\n    prompt_reset_since = 0\n\n    if initial_prompt is not None:\n        initial_prompt_tokens = tokenizer.encode(\" \" + initial_prompt.strip())\n        all_tokens.extend(initial_prompt_tokens)\n    else:\n        initial_prompt_tokens = []\n\n    def new_segment(\n        *, start: float, end: float, tokens: torch.Tensor, result: DecodingResult\n    ):\n        tokens = tokens.tolist()\n        text_tokens = [token for token in tokens if token < tokenizer.eot]\n        return {\n            \"seek\": seek,\n            \"start\": start,\n            \"end\": end,\n            \"text\": tokenizer.decode(text_tokens),\n            \"tokens\": tokens,\n            \"temperature\": result.temperature,\n            \"avg_logprob\": result.avg_logprob,\n            \"compression_ratio\": result.compression_ratio,\n            \"no_speech_prob\": result.no_speech_prob,\n        }\n\n    # show the progress bar when verbose is False (if True, transcribed text will be printed)\n    with tqdm.tqdm(\n        total=content_frames, unit=\"frames\", disable=verbose is not False\n    ) as pbar:\n        last_speech_timestamp = 0.0\n        # NOTE: This loop is obscurely flattened to make the diff readable.\n        # A later commit should turn this into a simpler nested loop.\n        # for seek_clip_start, seek_clip_end in seek_clips:\n        #     while seek < seek_clip_end\n        while clip_idx < len(seek_clips):\n            seek_clip_start, seek_clip_end = seek_clips[clip_idx]\n            if seek < seek_clip_start:\n                seek = seek_clip_start\n            if seek >= seek_clip_end:\n                clip_idx += 1\n                if clip_idx < len(seek_clips):\n                    seek = seek_clips[clip_idx][0]\n                continue\n            time_offset = float(seek * HOP_LENGTH / SAMPLE_RATE)\n            window_end_time = float((seek + N_FRAMES) * HOP_LENGTH / SAMPLE_RATE)\n            segment_size = min(N_FRAMES, content_frames - seek, seek_clip_end - seek)\n            mel_segment = mel[:, seek : seek + segment_size]\n            segment_duration = segment_size * HOP_LENGTH / SAMPLE_RATE\n            mel_segment = pad_or_trim(mel_segment, N_FRAMES).to(model.device).to(dtype)\n\n            decode_options[\"prompt\"] = all_tokens[prompt_reset_since:]\n            result: DecodingResult = decode_with_fallback(mel_segment)\n            tokens = torch.tensor(result.tokens)\n\n            if no_speech_threshold is not None:\n                # no voice activity check\n                should_skip = result.no_speech_prob > no_speech_threshold\n                if (\n                    logprob_threshold is not None\n                    and result.avg_logprob > logprob_threshold\n                ):\n                    # don't skip if the logprob is high enough, despite the no_speech_prob\n                    should_skip = False\n\n                if should_skip:\n                    seek += segment_size  # fast-forward to the next segment boundary\n                    continue\n\n            previous_seek = seek\n            current_segments = []\n\n            # anomalous words are very long/short/improbable\n            def word_anomaly_score(word: dict) -> float:\n                probability = word.get(\"probability\", 0.0)\n                duration = word[\"end\"] - word[\"start\"]\n                score = 0.0\n                if probability < 0.15:\n                    score += 1.0\n                if duration < 0.133:\n                    score += (0.133 - duration) * 15\n                if duration > 2.0:\n                    score += duration - 2.0\n                return score\n\n            def is_segment_anomaly(segment: Optional[dict]) -> bool:\n                if segment is None or not segment[\"words\"]:\n                    return False\n                words = [w for w in segment[\"words\"] if w[\"word\"] not in punctuation]\n                words = words[:8]\n                score = sum(word_anomaly_score(w) for w in words)\n                return score >= 3 or score + 0.01 >= len(words)\n\n            def next_words_segment(segments: List[dict]) -> Optional[dict]:\n                return next((s for s in segments if s[\"words\"]), None)\n\n            timestamp_tokens: torch.Tensor = tokens.ge(tokenizer.timestamp_begin)\n            single_timestamp_ending = timestamp_tokens[-2:].tolist() == [False, True]\n\n            consecutive = torch.where(timestamp_tokens[:-1] & timestamp_tokens[1:])[0]\n            consecutive.add_(1)\n            if len(consecutive) > 0:\n                # if the output contains two consecutive timestamp tokens\n                slices = consecutive.tolist()\n                if single_timestamp_ending:\n                    slices.append(len(tokens))\n\n                last_slice = 0\n                for current_slice in slices:\n                    sliced_tokens = tokens[last_slice:current_slice]\n                    start_timestamp_pos = (\n                        sliced_tokens[0].item() - tokenizer.timestamp_begin\n                    )\n                    end_timestamp_pos = (\n                        sliced_tokens[-1].item() - tokenizer.timestamp_begin\n                    )\n                    current_segments.append(\n                        new_segment(\n                            start=time_offset + start_timestamp_pos * time_precision,\n                            end=time_offset + end_timestamp_pos * time_precision,\n                            tokens=sliced_tokens,\n                            result=result,\n                        )\n                    )\n                    last_slice = current_slice\n\n                if single_timestamp_ending:\n                    # single timestamp at the end means no speech after the last timestamp.\n                    seek += segment_size\n                else:\n                    # otherwise, ignore the unfinished segment and seek to the last timestamp\n                    last_timestamp_pos = (\n                        tokens[last_slice - 1].item() - tokenizer.timestamp_begin\n                    )\n                    seek += last_timestamp_pos * input_stride\n            else:\n                duration = segment_duration\n                timestamps = tokens[timestamp_tokens.nonzero().flatten()]\n                if (\n                    len(timestamps) > 0\n                    and timestamps[-1].item() != tokenizer.timestamp_begin\n                ):\n                    # no consecutive timestamps but it has a timestamp; use the last one.\n                    last_timestamp_pos = (\n                        timestamps[-1].item() - tokenizer.timestamp_begin\n                    )\n                    duration = last_timestamp_pos * time_precision\n\n                current_segments.append(\n                    new_segment(\n                        start=time_offset,\n                        end=time_offset + duration,\n                        tokens=tokens,\n                        result=result,\n                    )\n                )\n                seek += segment_size\n\n            if word_timestamps:\n                add_word_timestamps(\n                    segments=current_segments,\n                    model=model,\n                    tokenizer=tokenizer,\n                    mel=mel_segment,\n                    num_frames=segment_size,\n                    prepend_punctuations=prepend_punctuations,\n                    append_punctuations=append_punctuations,\n                    last_speech_timestamp=last_speech_timestamp,\n                )\n\n                if not single_timestamp_ending:\n                    last_word_end = get_end(current_segments)\n                    if last_word_end is not None and last_word_end > time_offset:\n                        seek = round(last_word_end * FRAMES_PER_SECOND)\n\n                # skip silence before possible hallucinations\n                if hallucination_silence_threshold is not None:\n                    threshold = hallucination_silence_threshold\n                    if not single_timestamp_ending:\n                        last_word_end = get_end(current_segments)\n                        if last_word_end is not None and last_word_end > time_offset:\n                            remaining_duration = window_end_time - last_word_end\n                            if remaining_duration > threshold:\n                                seek = round(last_word_end * FRAMES_PER_SECOND)\n                            else:\n                                seek = previous_seek + segment_size\n\n                    # if first segment might be a hallucination, skip leading silence\n                    first_segment = next_words_segment(current_segments)\n                    if first_segment is not None and is_segment_anomaly(first_segment):\n                        gap = first_segment[\"start\"] - time_offset\n                        if gap > threshold:\n                            seek = previous_seek + round(gap * FRAMES_PER_SECOND)\n                            continue\n\n                    # skip silence before any possible hallucination that is surrounded\n                    # by silence or more hallucinations\n                    hal_last_end = last_speech_timestamp\n                    for si in range(len(current_segments)):\n                        segment = current_segments[si]\n                        if not segment[\"words\"]:\n                            continue\n                        if is_segment_anomaly(segment):\n                            next_segment = next_words_segment(\n                                current_segments[si + 1 :]\n                            )\n                            if next_segment is not None:\n                                hal_next_start = next_segment[\"words\"][0][\"start\"]\n                            else:\n                                hal_next_start = time_offset + segment_duration\n                            silence_before = (\n                                segment[\"start\"] - hal_last_end > threshold\n                                or segment[\"start\"] < threshold\n                                or segment[\"start\"] - time_offset < 2.0\n                            )\n                            silence_after = (\n                                hal_next_start - segment[\"end\"] > threshold\n                                or is_segment_anomaly(next_segment)\n                                or window_end_time - segment[\"end\"] < 2.0\n                            )\n                            if silence_before and silence_after:\n                                seek = round(\n                                    max(time_offset + 1, segment[\"start\"])\n                                    * FRAMES_PER_SECOND\n                                )\n                                if content_duration - segment[\"end\"] < threshold:\n                                    seek = content_frames\n                                current_segments[si:] = []\n                                break\n                        hal_last_end = segment[\"end\"]\n\n                last_word_end = get_end(current_segments)\n                if last_word_end is not None:\n                    last_speech_timestamp = last_word_end\n\n            if verbose:\n                for segment in current_segments:\n                    start, end, text = segment[\"start\"], segment[\"end\"], segment[\"text\"]\n                    line = f\"[{format_timestamp(start)} --> {format_timestamp(end)}] {text}\"\n                    print(make_safe(line))\n\n            # if a segment is instantaneous or does not contain text, clear it\n            for i, segment in enumerate(current_segments):\n                if segment[\"start\"] == segment[\"end\"] or segment[\"text\"].strip() == \"\":\n                    segment[\"text\"] = \"\"\n                    segment[\"tokens\"] = []\n                    segment[\"words\"] = []\n\n            all_segments.extend(\n                [\n                    {\"id\": i, **segment}\n                    for i, segment in enumerate(\n                        current_segments, start=len(all_segments)\n                    )\n                ]\n            )\n            all_tokens.extend(\n                [token for segment in current_segments for token in segment[\"tokens\"]]\n            )\n\n            if not condition_on_previous_text or result.temperature > 0.5:\n                # do not feed the prompt tokens if a high temperature was used\n                prompt_reset_since = len(all_tokens)\n\n            # update progress bar\n            pbar.update(min(content_frames, seek) - previous_seek)\n\n    return dict(\n        text=tokenizer.decode(all_tokens[len(initial_prompt_tokens) :]),\n        segments=all_segments,\n        language=language,\n    )\n\n\ndef cli():\n    from . import available_models\n\n    def valid_model_name(name):\n        if name in available_models() or os.path.exists(name):\n            return name\n        raise ValueError(\n            f\"model should be one of {available_models()} or path to a model checkpoint\"\n        )\n\n    # fmt: off\n    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument(\"audio\", nargs=\"+\", type=str, help=\"audio file(s) to transcribe\")\n    parser.add_argument(\"--model\", default=\"small\", type=valid_model_name, help=\"name of the Whisper model to use\")\n    parser.add_argument(\"--model_dir\", type=str, default=None, help=\"the path to save model files; uses ~/.cache/whisper by default\")\n    parser.add_argument(\"--device\", default=\"cuda\" if torch.cuda.is_available() else \"cpu\", help=\"device to use for PyTorch inference\")\n    parser.add_argument(\"--output_dir\", \"-o\", type=str, default=\".\", help=\"directory to save the outputs\")\n    parser.add_argument(\"--output_format\", \"-f\", type=str, default=\"all\", choices=[\"txt\", \"vtt\", \"srt\", \"tsv\", \"json\", \"all\"], help=\"format of the output file; if not specified, all available formats will be produced\")\n    parser.add_argument(\"--verbose\", type=str2bool, default=True, help=\"whether to print out the progress and debug messages\")\n\n    parser.add_argument(\"--task\", type=str, default=\"transcribe\", choices=[\"transcribe\", \"translate\"], help=\"whether to perform X->X speech recognition ('transcribe') or X->English translation ('translate')\")\n    parser.add_argument(\"--language\", type=str, default=None, choices=sorted(LANGUAGES.keys()) + sorted([k.title() for k in TO_LANGUAGE_CODE.keys()]), help=\"language spoken in the audio, specify None to perform language detection\")\n\n    parser.add_argument(\"--temperature\", type=float, default=0, help=\"temperature to use for sampling\")\n    parser.add_argument(\"--best_of\", type=optional_int, default=5, help=\"number of candidates when sampling with non-zero temperature\")\n    parser.add_argument(\"--beam_size\", type=optional_int, default=5, help=\"number of beams in beam search, only applicable when temperature is zero\")\n    parser.add_argument(\"--patience\", type=float, default=None, help=\"optional patience value to use in beam decoding, as in https://arxiv.org/abs/2204.05424, the default (1.0) is equivalent to conventional beam search\")\n    parser.add_argument(\"--length_penalty\", type=float, default=None, help=\"optional token length penalty coefficient (alpha) as in https://arxiv.org/abs/1609.08144, uses simple length normalization by default\")\n\n    parser.add_argument(\"--suppress_tokens\", type=str, default=\"-1\", help=\"comma-separated list of token ids to suppress during sampling; '-1' will suppress most special characters except common punctuations\")\n    parser.add_argument(\"--initial_prompt\", type=str, default=None, help=\"optional text to provide as a prompt for the first window.\")\n    parser.add_argument(\"--condition_on_previous_text\", type=str2bool, default=True, help=\"if True, provide the previous output of the model as a prompt for the next window; disabling may make the text inconsistent across windows, but the model becomes less prone to getting stuck in a failure loop\")\n    parser.add_argument(\"--fp16\", type=str2bool, default=True, help=\"whether to perform inference in fp16; True by default\")\n\n    parser.add_argument(\"--temperature_increment_on_fallback\", type=optional_float, default=0.2, help=\"temperature to increase when falling back when the decoding fails to meet either of the thresholds below\")\n    parser.add_argument(\"--compression_ratio_threshold\", type=optional_float, default=2.4, help=\"if the gzip compression ratio is higher than this value, treat the decoding as failed\")\n    parser.add_argument(\"--logprob_threshold\", type=optional_float, default=-1.0, help=\"if the average log probability is lower than this value, treat the decoding as failed\")\n    parser.add_argument(\"--no_speech_threshold\", type=optional_float, default=0.6, help=\"if the probability of the <|nospeech|> token is higher than this value AND the decoding has failed due to `logprob_threshold`, consider the segment as silence\")\n    parser.add_argument(\"--word_timestamps\", type=str2bool, default=False, help=\"(experimental) extract word-level timestamps and refine the results based on them\")\n    parser.add_argument(\"--prepend_punctuations\", type=str, default=\"\\\"\\'“¿([{-\", help=\"if word_timestamps is True, merge these punctuation symbols with the next word\")\n    parser.add_argument(\"--append_punctuations\", type=str, default=\"\\\"\\'.。,，!！?？:：”)]}、\", help=\"if word_timestamps is True, merge these punctuation symbols with the previous word\")\n    parser.add_argument(\"--highlight_words\", type=str2bool, default=False, help=\"(requires --word_timestamps True) underline each word as it is spoken in srt and vtt\")\n    parser.add_argument(\"--max_line_width\", type=optional_int, default=None, help=\"(requires --word_timestamps True) the maximum number of characters in a line before breaking the line\")\n    parser.add_argument(\"--max_line_count\", type=optional_int, default=None, help=\"(requires --word_timestamps True) the maximum number of lines in a segment\")\n    parser.add_argument(\"--max_words_per_line\", type=optional_int, default=None, help=\"(requires --word_timestamps True, no effect with --max_line_width) the maximum number of words in a segment\")\n    parser.add_argument(\"--threads\", type=optional_int, default=0, help=\"number of threads used by torch for CPU inference; supercedes MKL_NUM_THREADS/OMP_NUM_THREADS\")\n    parser.add_argument(\"--clip_timestamps\", type=str, default=\"0\", help=\"comma-separated list start,end,start,end,... timestamps (in seconds) of clips to process, where the last end timestamp defaults to the end of the file\")\n    parser.add_argument(\"--hallucination_silence_threshold\", type=optional_float, help=\"(requires --word_timestamps True) skip silent periods longer than this threshold (in seconds) when a possible hallucination is detected\")\n    # fmt: on\n\n    args = parser.parse_args().__dict__\n    model_name: str = args.pop(\"model\")\n    model_dir: str = args.pop(\"model_dir\")\n    output_dir: str = args.pop(\"output_dir\")\n    output_format: str = args.pop(\"output_format\")\n    device: str = args.pop(\"device\")\n    os.makedirs(output_dir, exist_ok=True)\n\n    if model_name.endswith(\".en\") and args[\"language\"] not in {\"en\", \"English\"}:\n        if args[\"language\"] is not None:\n            warnings.warn(\n                f\"{model_name} is an English-only model but receipted '{args['language']}'; using English instead.\"\n            )\n        args[\"language\"] = \"en\"\n\n    temperature = args.pop(\"temperature\")\n    if (increment := args.pop(\"temperature_increment_on_fallback\")) is not None:\n        temperature = tuple(np.arange(temperature, 1.0 + 1e-6, increment))\n    else:\n        temperature = [temperature]\n\n    if (threads := args.pop(\"threads\")) > 0:\n        torch.set_num_threads(threads)\n\n    from . import load_model\n\n    model = load_model(model_name, device=device, download_root=model_dir)\n\n    writer = get_writer(output_format, output_dir)\n    word_options = [\n        \"highlight_words\",\n        \"max_line_count\",\n        \"max_line_width\",\n        \"max_words_per_line\",\n    ]\n    if not args[\"word_timestamps\"]:\n        for option in word_options:\n            if args[option]:\n                parser.error(f\"--{option} requires --word_timestamps True\")\n    if args[\"max_line_count\"] and not args[\"max_line_width\"]:\n        warnings.warn(\"--max_line_count has no effect without --max_line_width\")\n    if args[\"max_words_per_line\"] and args[\"max_line_width\"]:\n        warnings.warn(\"--max_words_per_line has no effect with --max_line_width\")\n    writer_args = {arg: args.pop(arg) for arg in word_options}\n    for audio_path in args.pop(\"audio\"):\n        try:\n            result = transcribe(model, audio_path, temperature=temperature, **args)\n            writer(result, audio_path, **writer_args)\n        except Exception as e:\n            traceback.print_exc()\n            print(f\"Skipping {audio_path} due to {type(e).__name__}: {str(e)}\")\n\n\nif __name__ == \"__main__\":\n    cli()\n"
  },
  {
    "path": "xinference/thirdparty/whisper/triton_ops.py",
    "content": "from functools import lru_cache\n\nimport numpy as np\nimport torch\n\ntry:\n    import triton\n    import triton.language as tl\nexcept ImportError:\n    raise RuntimeError(\"triton import failed; try `pip install --pre triton`\")\n\n\n@triton.jit\ndef dtw_kernel(\n    cost, trace, x, x_stride, cost_stride, trace_stride, N, M, BLOCK_SIZE: tl.constexpr\n):\n    offsets = tl.arange(0, BLOCK_SIZE)\n    mask = offsets < M\n\n    for k in range(1, N + M + 1):  # k = i + j\n        tl.debug_barrier()\n\n        p0 = cost + (k - 1) * cost_stride\n        p1 = cost + k * cost_stride\n        p2 = cost + k * cost_stride + 1\n\n        c0 = tl.load(p0 + offsets, mask=mask)\n        c1 = tl.load(p1 + offsets, mask=mask)\n        c2 = tl.load(p2 + offsets, mask=mask)\n\n        x_row = tl.load(x + (k - 1) * x_stride + offsets, mask=mask, other=0)\n        cost_row = x_row + tl.minimum(tl.minimum(c0, c1), c2)\n\n        cost_ptr = cost + (k + 1) * cost_stride + 1\n        tl.store(cost_ptr + offsets, cost_row, mask=mask)\n\n        trace_ptr = trace + (k + 1) * trace_stride + 1\n        tl.store(trace_ptr + offsets, 2, mask=mask & (c2 <= c0) & (c2 <= c1))\n        tl.store(trace_ptr + offsets, 1, mask=mask & (c1 <= c0) & (c1 <= c2))\n        tl.store(trace_ptr + offsets, 0, mask=mask & (c0 <= c1) & (c0 <= c2))\n\n\n@lru_cache(maxsize=None)\ndef median_kernel(filter_width: int):\n    @triton.jit\n    def kernel(\n        y, x, x_stride, y_stride, BLOCK_SIZE: tl.constexpr\n    ):  # x.shape[-1] == filter_width\n        row_idx = tl.program_id(0)\n        offsets = tl.arange(0, BLOCK_SIZE)\n        mask = offsets < y_stride\n\n        x_ptr = x + row_idx * x_stride  # noqa: F841\n        y_ptr = y + row_idx * y_stride\n\n        LOAD_ALL_ROWS_HERE  # noqa: F821\n\n        BUBBLESORT_HERE  # noqa: F821\n\n        tl.store(y_ptr + offsets, MIDDLE_ROW_HERE, mask=mask)  # noqa: F821\n\n    kernel = triton.JITFunction(kernel.fn)\n    kernel.src = kernel.src.replace(\n        \"    LOAD_ALL_ROWS_HERE\",\n        \"\\n\".join(\n            [\n                f\"    row{i} = tl.load(x_ptr + offsets + {i}, mask=mask)\"\n                for i in range(filter_width)\n            ]\n        ),\n    )\n    kernel.src = kernel.src.replace(\n        \"    BUBBLESORT_HERE\",\n        \"\\n\\n\".join(\n            [\n                \"\\n\\n\".join(\n                    [\n                        \"\\n\".join(\n                            [\n                                f\"    smaller = tl.where(row{j} < row{j + 1}, row{j}, row{j + 1})\",\n                                f\"    larger = tl.where(row{j} > row{j + 1}, row{j}, row{j + 1})\",\n                                f\"    row{j} = smaller\",\n                                f\"    row{j + 1} = larger\",\n                            ]\n                        )\n                        for j in range(filter_width - i - 1)\n                    ]\n                )\n                for i in range(filter_width // 2 + 1)\n            ]\n        ),\n    )\n    kernel.src = kernel.src.replace(\"MIDDLE_ROW_HERE\", f\"row{filter_width // 2}\")\n\n    return kernel\n\n\ndef median_filter_cuda(x: torch.Tensor, filter_width: int):\n    \"\"\"Apply a median filter of given width along the last dimension of x\"\"\"\n    slices = x.contiguous().unfold(-1, filter_width, 1)\n    grid = np.prod(slices.shape[:-2])\n\n    kernel = median_kernel(filter_width)\n    y = torch.empty_like(slices[..., 0])\n\n    BLOCK_SIZE = 1 << (y.stride(-2) - 1).bit_length()\n    kernel[(grid,)](y, x, x.stride(-2), y.stride(-2), BLOCK_SIZE=BLOCK_SIZE)\n\n    return y\n"
  },
  {
    "path": "xinference/thirdparty/whisper/utils.py",
    "content": "import json\nimport os\nimport re\nimport sys\nimport zlib\nfrom typing import Callable, List, Optional, TextIO\n\nsystem_encoding = sys.getdefaultencoding()\n\nif system_encoding != \"utf-8\":\n\n    def make_safe(string):\n        # replaces any character not representable using the system default encoding with an '?',\n        # avoiding UnicodeEncodeError (https://github.com/openai/whisper/discussions/729).\n        return string.encode(system_encoding, errors=\"replace\").decode(system_encoding)\n\nelse:\n\n    def make_safe(string):\n        # utf-8 can encode any Unicode code point, so no need to do the round-trip encoding\n        return string\n\n\ndef exact_div(x, y):\n    assert x % y == 0\n    return x // y\n\n\ndef str2bool(string):\n    str2val = {\"True\": True, \"False\": False}\n    if string in str2val:\n        return str2val[string]\n    else:\n        raise ValueError(f\"Expected one of {set(str2val.keys())}, got {string}\")\n\n\ndef optional_int(string):\n    return None if string == \"None\" else int(string)\n\n\ndef optional_float(string):\n    return None if string == \"None\" else float(string)\n\n\ndef compression_ratio(text) -> float:\n    text_bytes = text.encode(\"utf-8\")\n    return len(text_bytes) / len(zlib.compress(text_bytes))\n\n\ndef format_timestamp(\n    seconds: float, always_include_hours: bool = False, decimal_marker: str = \".\"\n):\n    assert seconds >= 0, \"non-negative timestamp expected\"\n    milliseconds = round(seconds * 1000.0)\n\n    hours = milliseconds // 3_600_000\n    milliseconds -= hours * 3_600_000\n\n    minutes = milliseconds // 60_000\n    milliseconds -= minutes * 60_000\n\n    seconds = milliseconds // 1_000\n    milliseconds -= seconds * 1_000\n\n    hours_marker = f\"{hours:02d}:\" if always_include_hours or hours > 0 else \"\"\n    return (\n        f\"{hours_marker}{minutes:02d}:{seconds:02d}{decimal_marker}{milliseconds:03d}\"\n    )\n\n\ndef get_start(segments: List[dict]) -> Optional[float]:\n    return next(\n        (w[\"start\"] for s in segments for w in s[\"words\"]),\n        segments[0][\"start\"] if segments else None,\n    )\n\n\ndef get_end(segments: List[dict]) -> Optional[float]:\n    return next(\n        (w[\"end\"] for s in reversed(segments) for w in reversed(s[\"words\"])),\n        segments[-1][\"end\"] if segments else None,\n    )\n\n\nclass ResultWriter:\n    extension: str\n\n    def __init__(self, output_dir: str):\n        self.output_dir = output_dir\n\n    def __call__(\n        self, result: dict, audio_path: str, options: Optional[dict] = None, **kwargs\n    ):\n        audio_basename = os.path.basename(audio_path)\n        audio_basename = os.path.splitext(audio_basename)[0]\n        output_path = os.path.join(\n            self.output_dir, audio_basename + \".\" + self.extension\n        )\n\n        with open(output_path, \"w\", encoding=\"utf-8\") as f:\n            self.write_result(result, file=f, options=options, **kwargs)\n\n    def write_result(\n        self, result: dict, file: TextIO, options: Optional[dict] = None, **kwargs\n    ):\n        raise NotImplementedError\n\n\nclass WriteTXT(ResultWriter):\n    extension: str = \"txt\"\n\n    def write_result(\n        self, result: dict, file: TextIO, options: Optional[dict] = None, **kwargs\n    ):\n        for segment in result[\"segments\"]:\n            print(segment[\"text\"].strip(), file=file, flush=True)\n\n\nclass SubtitlesWriter(ResultWriter):\n    always_include_hours: bool\n    decimal_marker: str\n\n    def iterate_result(\n        self,\n        result: dict,\n        options: Optional[dict] = None,\n        *,\n        max_line_width: Optional[int] = None,\n        max_line_count: Optional[int] = None,\n        highlight_words: bool = False,\n        max_words_per_line: Optional[int] = None,\n    ):\n        options = options or {}\n        max_line_width = max_line_width or options.get(\"max_line_width\")\n        max_line_count = max_line_count or options.get(\"max_line_count\")\n        highlight_words = highlight_words or options.get(\"highlight_words\", False)\n        max_words_per_line = max_words_per_line or options.get(\"max_words_per_line\")\n        preserve_segments = max_line_count is None or max_line_width is None\n        max_line_width = max_line_width or 1000\n        max_words_per_line = max_words_per_line or 1000\n\n        def iterate_subtitles():\n            line_len = 0\n            line_count = 1\n            # the next subtitle to yield (a list of word timings with whitespace)\n            subtitle: List[dict] = []\n            last: float = get_start(result[\"segments\"]) or 0.0\n            for segment in result[\"segments\"]:\n                chunk_index = 0\n                words_count = max_words_per_line\n                while chunk_index < len(segment[\"words\"]):\n                    remaining_words = len(segment[\"words\"]) - chunk_index\n                    if max_words_per_line > len(segment[\"words\"]) - chunk_index:\n                        words_count = remaining_words\n                    for i, original_timing in enumerate(\n                        segment[\"words\"][chunk_index : chunk_index + words_count]\n                    ):\n                        timing = original_timing.copy()\n                        long_pause = (\n                            not preserve_segments and timing[\"start\"] - last > 3.0\n                        )\n                        has_room = line_len + len(timing[\"word\"]) <= max_line_width\n                        seg_break = i == 0 and len(subtitle) > 0 and preserve_segments\n                        if (\n                            line_len > 0\n                            and has_room\n                            and not long_pause\n                            and not seg_break\n                        ):\n                            # line continuation\n                            line_len += len(timing[\"word\"])\n                        else:\n                            # new line\n                            timing[\"word\"] = timing[\"word\"].strip()\n                            if (\n                                len(subtitle) > 0\n                                and max_line_count is not None\n                                and (long_pause or line_count >= max_line_count)\n                                or seg_break\n                            ):\n                                # subtitle break\n                                yield subtitle\n                                subtitle = []\n                                line_count = 1\n                            elif line_len > 0:\n                                # line break\n                                line_count += 1\n                                timing[\"word\"] = \"\\n\" + timing[\"word\"]\n                            line_len = len(timing[\"word\"].strip())\n                        subtitle.append(timing)\n                        last = timing[\"start\"]\n                    chunk_index += max_words_per_line\n            if len(subtitle) > 0:\n                yield subtitle\n\n        if len(result[\"segments\"]) > 0 and \"words\" in result[\"segments\"][0]:\n            for subtitle in iterate_subtitles():\n                subtitle_start = self.format_timestamp(subtitle[0][\"start\"])\n                subtitle_end = self.format_timestamp(subtitle[-1][\"end\"])\n                subtitle_text = \"\".join([word[\"word\"] for word in subtitle])\n                if highlight_words:\n                    last = subtitle_start\n                    all_words = [timing[\"word\"] for timing in subtitle]\n                    for i, this_word in enumerate(subtitle):\n                        start = self.format_timestamp(this_word[\"start\"])\n                        end = self.format_timestamp(this_word[\"end\"])\n                        if last != start:\n                            yield last, start, subtitle_text\n\n                        yield start, end, \"\".join(\n                            [\n                                re.sub(r\"^(\\s*)(.*)$\", r\"\\1<u>\\2</u>\", word)\n                                if j == i\n                                else word\n                                for j, word in enumerate(all_words)\n                            ]\n                        )\n                        last = end\n                else:\n                    yield subtitle_start, subtitle_end, subtitle_text\n        else:\n            for segment in result[\"segments\"]:\n                segment_start = self.format_timestamp(segment[\"start\"])\n                segment_end = self.format_timestamp(segment[\"end\"])\n                segment_text = segment[\"text\"].strip().replace(\"-->\", \"->\")\n                yield segment_start, segment_end, segment_text\n\n    def format_timestamp(self, seconds: float):\n        return format_timestamp(\n            seconds=seconds,\n            always_include_hours=self.always_include_hours,\n            decimal_marker=self.decimal_marker,\n        )\n\n\nclass WriteVTT(SubtitlesWriter):\n    extension: str = \"vtt\"\n    always_include_hours: bool = False\n    decimal_marker: str = \".\"\n\n    def write_result(\n        self, result: dict, file: TextIO, options: Optional[dict] = None, **kwargs\n    ):\n        print(\"WEBVTT\\n\", file=file)\n        for start, end, text in self.iterate_result(result, options, **kwargs):\n            print(f\"{start} --> {end}\\n{text}\\n\", file=file, flush=True)\n\n\nclass WriteSRT(SubtitlesWriter):\n    extension: str = \"srt\"\n    always_include_hours: bool = True\n    decimal_marker: str = \",\"\n\n    def write_result(\n        self, result: dict, file: TextIO, options: Optional[dict] = None, **kwargs\n    ):\n        for i, (start, end, text) in enumerate(\n            self.iterate_result(result, options, **kwargs), start=1\n        ):\n            print(f\"{i}\\n{start} --> {end}\\n{text}\\n\", file=file, flush=True)\n\n\nclass WriteTSV(ResultWriter):\n    \"\"\"\n    Write a transcript to a file in TSV (tab-separated values) format containing lines like:\n    <start time in integer milliseconds>\\t<end time in integer milliseconds>\\t<transcript text>\n\n    Using integer milliseconds as start and end times means there's no chance of interference from\n    an environment setting a language encoding that causes the decimal in a floating point number\n    to appear as a comma; also is faster and more efficient to parse & store, e.g., in C++.\n    \"\"\"\n\n    extension: str = \"tsv\"\n\n    def write_result(\n        self, result: dict, file: TextIO, options: Optional[dict] = None, **kwargs\n    ):\n        print(\"start\", \"end\", \"text\", sep=\"\\t\", file=file)\n        for segment in result[\"segments\"]:\n            print(round(1000 * segment[\"start\"]), file=file, end=\"\\t\")\n            print(round(1000 * segment[\"end\"]), file=file, end=\"\\t\")\n            print(segment[\"text\"].strip().replace(\"\\t\", \" \"), file=file, flush=True)\n\n\nclass WriteJSON(ResultWriter):\n    extension: str = \"json\"\n\n    def write_result(\n        self, result: dict, file: TextIO, options: Optional[dict] = None, **kwargs\n    ):\n        json.dump(result, file)\n\n\ndef get_writer(\n    output_format: str, output_dir: str\n) -> Callable[[dict, TextIO, dict], None]:\n    writers = {\n        \"txt\": WriteTXT,\n        \"vtt\": WriteVTT,\n        \"srt\": WriteSRT,\n        \"tsv\": WriteTSV,\n        \"json\": WriteJSON,\n    }\n\n    if output_format == \"all\":\n        all_writers = [writer(output_dir) for writer in writers.values()]\n\n        def write_all(\n            result: dict, file: TextIO, options: Optional[dict] = None, **kwargs\n        ):\n            for writer in all_writers:\n                writer(result, file, options, **kwargs)\n\n        return write_all\n\n    return writers[output_format](output_dir)\n"
  },
  {
    "path": "xinference/thirdparty/whisper/version.py",
    "content": "__version__ = \"20231117\"\n"
  },
  {
    "path": "xinference/types.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom typing import Any, Callable, Dict, ForwardRef, Iterable, List, Optional, Union\n\nfrom typing_extensions import Literal, NotRequired, TypedDict\n\nfrom ._compat import (\n    BaseModel,\n    create_model,\n    create_model_from_typeddict,\n    validate_arguments,\n)\nfrom .fields import (\n    echo_field,\n    max_tokens_field,\n    none_field,\n    repeat_penalty_field,\n    stop_field,\n    stream_field,\n    stream_interval_field,\n    stream_option_field,\n    temperature_field,\n    top_k_field,\n    top_p_field,\n)\n\n\nclass Image(TypedDict):\n    url: Optional[str]\n    b64_json: Optional[str]\n\n\nclass ImageList(TypedDict):\n    created: int\n    data: List[Image]\n\n\nclass ImageEditRequest(TypedDict, total=False):\n    image: Union[Union[str, bytes], List[Union[str, bytes]]]\n    mask: Optional[Union[str, bytes]]\n    prompt: str\n    n: int\n    size: Optional[str]\n    response_format: str\n\n\nclass SDAPIResult(TypedDict):\n    images: List[str]\n    parameters: dict\n    info: dict\n\n\nclass Video(TypedDict):\n    url: Optional[str]\n    b64_json: Optional[str]\n\n\nclass VideoList(TypedDict):\n    created: int\n    data: List[Video]\n\n\nclass EmbeddingUsage(TypedDict):\n    prompt_tokens: int\n    total_tokens: int\n\n\nclass EmbeddingData(TypedDict):\n    index: int\n    object: str\n    # support sparse embedding\n    embedding: Union[List[float], Dict[str, float]]\n\n\nclass Embedding(TypedDict):\n    object: Literal[\"list\"]\n    model: str\n    model_replica: str\n    data: List[EmbeddingData]\n    usage: EmbeddingUsage\n\n\nclass Document(TypedDict):\n    text: str\n\n\nclass DocumentObj(TypedDict):\n    index: int\n    relevance_score: float\n    document: Optional[Document]\n\n\n# Cohere API compatibility\nclass ApiVersion(TypedDict):\n    version: str\n    is_deprecated: bool\n    is_experimental: bool\n\n\n# Cohere API compatibility\nclass BilledUnit(TypedDict):\n    input_tokens: int\n    output_tokens: int\n    search_units: int\n    classifications: int\n\n\nclass RerankTokens(TypedDict):\n    input_tokens: int\n    output_tokens: int\n\n\nclass Meta(TypedDict):\n    api_version: Optional[ApiVersion]\n    billed_units: Optional[BilledUnit]\n    tokens: RerankTokens\n    warnings: Optional[List[str]]\n\n\nclass Rerank(TypedDict):\n    id: str\n    results: List[DocumentObj]\n    meta: Meta\n\n\nclass CompletionLogprobs(TypedDict):\n    text_offset: List[int]\n    token_logprobs: List[Optional[float]]\n    tokens: List[str]\n    top_logprobs: List[Optional[Dict[str, float]]]\n\n\nclass ToolCallFunction(TypedDict):\n    name: str\n    arguments: str\n\n\nclass ToolCalls(TypedDict):\n    id: str\n    type: Literal[\"function\"]\n    function: ToolCallFunction\n\n\nclass CompletionChoice(TypedDict):\n    text: NotRequired[str]\n    index: int\n    logprobs: Optional[CompletionLogprobs]\n    finish_reason: Optional[str]\n    tool_calls: NotRequired[List[ToolCalls]]\n\n\nclass CompletionUsage(TypedDict):\n    prompt_tokens: int\n    completion_tokens: int\n    total_tokens: int\n\n\nclass CompletionChunk(TypedDict):\n    id: str\n    object: Literal[\"text_completion\"]\n    created: int\n    model: str\n    choices: List[CompletionChoice]\n    usage: NotRequired[CompletionUsage]\n\n\nclass Completion(TypedDict):\n    id: str\n    object: Literal[\"text_completion\"]\n    created: int\n    model: str\n    choices: List[CompletionChoice]\n    usage: CompletionUsage\n\n\nclass ChatCompletionAudio(TypedDict):\n    id: str\n    data: str\n    expires_at: int\n    transcript: str\n\n\nclass ChatCompletionMessage(TypedDict):\n    role: str\n    reasoning_content: NotRequired[str]\n    content: Optional[str]\n    audio: NotRequired[ChatCompletionAudio]\n    user: NotRequired[str]\n    tool_calls: NotRequired[List]\n\n\nclass ChatCompletionChoice(TypedDict):\n    index: int\n    message: ChatCompletionMessage\n    finish_reason: Optional[str]\n\n\nclass ChatCompletion(TypedDict):\n    id: str\n    object: Literal[\"chat.completion\"]\n    created: int\n    model: str\n    choices: List[ChatCompletionChoice]\n    usage: CompletionUsage\n\n\nclass ChatCompletionChunkDelta(TypedDict):\n    role: NotRequired[str]\n    reasoning_content: NotRequired[Union[str, None]]\n    content: NotRequired[Union[str, None]]\n    tool_calls: NotRequired[List[ToolCalls]]\n\n\nclass ChatCompletionChunkChoice(TypedDict):\n    index: int\n    delta: ChatCompletionChunkDelta\n    finish_reason: Optional[str]\n\n\nclass ChatCompletionChunk(TypedDict):\n    id: str\n    model: str\n    object: Literal[\"chat.completion.chunk\"]\n    created: int\n    choices: List[ChatCompletionChunkChoice]\n    usage: NotRequired[CompletionUsage]\n\n\nStoppingCriteria = Callable[[List[int], List[float]], bool]\n\n\nclass StoppingCriteriaList(List[StoppingCriteria]):\n    def __call__(self, input_ids: List[int], logits: List[float]) -> bool:\n        return any([stopping_criteria(input_ids, logits) for stopping_criteria in self])\n\n\nLogitsProcessor = Callable[[List[int], List[float]], List[float]]\n\n\nclass LogitsProcessorList(List[LogitsProcessor]):\n    def __call__(self, input_ids: List[int], scores: List[float]) -> List[float]:\n        for processor in self:\n            scores = processor(input_ids, scores)\n        return scores\n\n\nclass PytorchGenerateConfig(TypedDict, total=False):\n    temperature: float\n    repetition_penalty: float\n    top_p: float\n    top_k: int\n    stream: bool\n    max_tokens: int\n    echo: bool\n    stop: Optional[Union[str, List[str]]]\n    stop_token_ids: Optional[Union[int, List[int]]]\n    stream_interval: int\n    model: Optional[str]\n    tools: Optional[List[Dict]]\n    lora_name: Optional[str]\n    stream_options: Optional[Union[dict, None]]\n    request_id: Optional[str]\n\n\nclass CogagentGenerateConfig(PytorchGenerateConfig, total=False):\n    platform: Optional[Literal[\"Mac\", \"WIN\", \"Mobile\"]]\n    format: Optional[\n        Literal[\n            \"(Answer in Action-Operation-Sensitive format.)\",\n            \"(Answer in Status-Plan-Action-Operation format.)\",\n            \"(Answer in Status-Action-Operation-Sensitive format.)\",\n            \"(Answer in Status-Action-Operation format.)\",\n            \"(Answer in Action-Operation format.)\",\n        ]\n    ]\n\n\nclass PytorchModelConfig(TypedDict, total=False):\n    revision: Optional[str]\n    device: str\n    gpus: Optional[str]\n    num_gpus: int\n    max_gpu_memory: str\n    gptq_ckpt: Optional[str]\n    gptq_wbits: int\n    gptq_groupsize: int\n    gptq_act_order: bool\n    trust_remote_code: bool\n    max_num_seqs: int\n    enable_tensorizer: Optional[bool]\n    reasoning_content: bool\n    min_pixels: NotRequired[int]\n    max_pixels: NotRequired[int]\n    quantization_config: NotRequired[Dict]\n    context_length: NotRequired[int]\n    torch_dtype: NotRequired[str]\n    enable_flash_attn: NotRequired[bool]\n\n\ndef get_pydantic_model_from_method(\n    meth,\n    exclude_fields: Optional[Iterable[str]] = None,\n    include_fields: Optional[Dict[str, Any]] = None,\n) -> BaseModel:\n    # The validate_arguments set Config.extra = \"forbid\" by default.\n    f = validate_arguments(meth, config={\"arbitrary_types_allowed\": True})\n    model = f.model\n    model.Config.extra = \"ignore\"\n    model.__fields__.pop(\"self\", None)\n    model.__fields__.pop(\"args\", None)\n    model.__fields__.pop(\"kwargs\", None)\n    pydantic_private_keys = [\n        key for key in model.__fields__.keys() if key.startswith(\"v__\")\n    ]\n    for key in pydantic_private_keys:\n        model.__fields__.pop(key)\n    if exclude_fields is not None:\n        for key in exclude_fields:\n            model.__fields__.pop(key, None)\n    if include_fields is not None:\n        dummy_model = create_model(\"DummyModel\", **include_fields)\n        model.__fields__.update(dummy_model.__fields__)\n    return model\n\n\ndef fix_forward_ref(model):\n    \"\"\"\n    pydantic in Python 3.8 generates ForwardRef field, we replace them\n    by the Optional[Any]\n    \"\"\"\n    exclude_fields = []\n    include_fields = {}\n    for key, field in model.__fields__.items():\n        if isinstance(field.annotation, ForwardRef):\n            exclude_fields.append(key)\n            include_fields[key] = (Optional[Any], None)\n    if exclude_fields:\n        for key in exclude_fields:\n            model.__fields__.pop(key, None)\n    if include_fields:\n        dummy_model = create_model(\"DummyModel\", **include_fields)\n        model.__fields__.update(dummy_model.__fields__)\n    return model\n\n\nclass ModelAndPrompt(BaseModel):\n    model: str\n    prompt: str\n\n\nclass ModelAndMessages(BaseModel):\n    model: str\n    messages: List[Dict[str, Any]]\n\n\nclass CreateCompletionTorch(BaseModel):\n    echo: bool = echo_field\n    max_tokens: Optional[int] = max_tokens_field\n    repetition_penalty: float = repeat_penalty_field\n    stop: Optional[Union[str, List[str]]] = stop_field\n    stop_token_ids: Optional[Union[int, List[int]]] = none_field\n    stream: bool = stream_field\n    stream_options: Optional[Union[dict, None]] = stream_option_field\n    stream_interval: int = stream_interval_field\n    temperature: float = temperature_field\n    top_p: float = top_p_field\n    top_k: int = top_k_field\n    lora_name: Optional[str]\n    request_id: Optional[str]\n    chat_template_kwargs: Optional[Union[str, Dict[str, Any]]]\n\n\n# This type is for openai API compatibility\nCreateCompletionOpenAI: BaseModel\n\nfrom openai.types.completion_create_params import CompletionCreateParamsNonStreaming\n\nCreateCompletionOpenAI = create_model_from_typeddict(\n    CompletionCreateParamsNonStreaming,\n)\nCreateCompletionOpenAI = fix_forward_ref(CreateCompletionOpenAI)\n\n\nclass CreateCompletion(\n    ModelAndPrompt,\n    CreateCompletionTorch,\n    CreateCompletionOpenAI,\n):\n    pass\n\n\nclass CreateChatModel(BaseModel):\n    model: str\n\n\n# Currently, chat calls generates, so the params share the same one.\nCreateChatCompletionTorch = CreateCompletionTorch\n\nfrom ._compat import CreateChatCompletionOpenAI\n\n\nclass CreateChatCompletion(  # type: ignore\n    CreateChatModel,\n    CreateChatCompletionTorch,\n    CreateChatCompletionOpenAI,\n):\n    pass\n\n\nclass LoRA:\n    def __init__(self, lora_name: str, local_path: str):\n        self.lora_name = lora_name\n        self.local_path = local_path\n\n    def to_dict(self):\n        return {\n            \"lora_name\": self.lora_name,\n            \"local_path\": self.local_path,\n        }\n\n    @classmethod\n    def from_dict(cls, data: Dict):\n        return cls(\n            lora_name=data[\"lora_name\"],\n            local_path=data[\"local_path\"],\n        )\n\n\nclass PeftModelConfig:\n    def __init__(\n        self,\n        peft_model: Optional[List[LoRA]] = None,\n        image_lora_load_kwargs: Optional[Dict] = None,\n        image_lora_fuse_kwargs: Optional[Dict] = None,\n    ):\n        self.peft_model = peft_model\n        self.image_lora_load_kwargs = image_lora_load_kwargs\n        self.image_lora_fuse_kwargs = image_lora_fuse_kwargs\n\n    def to_dict(self):\n        return {\n            \"lora_list\": (\n                [lora.to_dict() for lora in self.peft_model]\n                if self.peft_model\n                else None\n            ),\n            \"image_lora_load_kwargs\": self.image_lora_load_kwargs,\n            \"image_lora_fuse_kwargs\": self.image_lora_fuse_kwargs,\n        }\n\n    @classmethod\n    def from_dict(cls, data: Dict):\n        peft_model_list = data.get(\"lora_list\", None)\n        peft_model = (\n            [LoRA.from_dict(lora_dict) for lora_dict in peft_model_list]\n            if peft_model_list is not None\n            else None\n        )\n\n        return cls(\n            peft_model=peft_model,\n            image_lora_load_kwargs=data.get(\"image_lora_load_kwargs\"),\n            image_lora_fuse_kwargs=data.get(\"image_lora_fuse_kwargs\"),\n        )\n\n\n# This type is for Anthropic API compatibility\nANTHROPIC_AVAILABLE = False\n\ntry:\n    from anthropic.types import ContentBlock, Usage\n\n    ANTHROPIC_AVAILABLE = True\nexcept ImportError:\n    ContentBlock = None\n    Usage = None\n\n# Use TYPE_CHECKING to avoid runtime issues with mypy\nfrom typing import TYPE_CHECKING\n\nif TYPE_CHECKING:\n    # For type checking, define the types as if Anthropic is available\n    from anthropic.types import ContentBlock as ContentBlock_\n    from anthropic.types import Usage as Usage_\n\n    class AnthropicMessage(TypedDict):\n        id: str\n        type: str\n        role: str\n        content: List[ContentBlock_]\n        model: str\n        stop_reason: str\n        stop_sequence: str\n        usage: Usage_\n        container: Dict[str, Any]\n\n    class MessageCreateParams(TypedDict):\n        model: str\n        messages: List[Dict[str, Any]]\n        max_tokens: int\n        stream: NotRequired[bool]\n        temperature: NotRequired[float]\n        top_p: NotRequired[float]\n        top_k: NotRequired[int]\n        stop_sequences: NotRequired[List[str]]\n        metadata: NotRequired[Dict[str, Any]]\n        tools: NotRequired[List[Dict[str, Any]]]\n        tool_choice: NotRequired[Union[str, Dict[str, Any]]]\n\n    CreateMessageAnthropic: BaseModel\n\n    class CreateMessage(\n        ModelAndMessages,\n    ):\n        pass\n\nelse:\n    # Runtime definitions\n    if ANTHROPIC_AVAILABLE:\n\n        class AnthropicMessage(TypedDict):\n            id: str\n            type: str\n            role: str\n            content: List[ContentBlock]\n            model: str\n            stop_reason: str\n            stop_sequence: str\n            usage: Usage\n            container: Dict[str, Any]\n\n        class MessageCreateParams(TypedDict):\n            model: str\n            messages: List[Dict[str, Any]]\n            max_tokens: int\n            stream: NotRequired[bool]\n            temperature: NotRequired[float]\n            top_p: NotRequired[float]\n            top_k: NotRequired[int]\n            stop_sequences: NotRequired[List[str]]\n            metadata: NotRequired[Dict[str, Any]]\n            tools: NotRequired[List[Dict[str, Any]]]\n            tool_choice: NotRequired[Union[str, Dict[str, Any]]]\n\n        CreateMessageAnthropic: BaseModel = create_model_from_typeddict(\n            MessageCreateParams,\n        )\n        CreateMessageAnthropic = fix_forward_ref(CreateMessageAnthropic)\n\n        class CreateMessage(CreateMessageAnthropic):\n            pass\n\n    else:\n        # Define dummy types when Anthropic is not available\n        class AnthropicMessage:\n            pass\n\n        class MessageCreateParams:\n            pass\n\n        CreateMessageAnthropic = None\n\n        class CreateMessage:\n            pass\n"
  },
  {
    "path": "xinference/ui/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom .gradio import GradioInterface, MediaInterface\n\n__all__ = [\"GradioInterface\", \"MediaInterface\"]\n"
  },
  {
    "path": "xinference/ui/gradio/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom .chat_interface import GradioInterface\nfrom .media_interface import MediaInterface\n\n__all__ = [\"GradioInterface\", \"MediaInterface\"]\n"
  },
  {
    "path": "xinference/ui/gradio/chat_interface.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nimport html\nimport logging\nimport os\nimport tempfile\nfrom io import BytesIO\nfrom typing import Generator, List, Optional\n\nimport gradio as gr\nimport PIL.Image\nfrom gradio import ChatMessage\nfrom gradio.components import Markdown, Textbox\nfrom gradio.layouts import Accordion, Column, Row\n\nfrom ...client.restful.restful_client import (\n    RESTfulChatModelHandle,\n    RESTfulGenerateModelHandle,\n)\n\nlogger = logging.getLogger(__name__)\n\n\nclass GradioInterface:\n    def __init__(\n        self,\n        endpoint: str,\n        model_uid: str,\n        model_name: str,\n        model_size_in_billions: int,\n        model_type: str,\n        model_format: str,\n        quantization: str,\n        context_length: int,\n        model_ability: List[str],\n        model_description: str,\n        model_lang: List[str],\n        access_token: Optional[str],\n    ):\n        self.endpoint = endpoint\n        self.model_uid = model_uid\n        self.model_name = model_name\n        self.model_size_in_billions = model_size_in_billions\n        self.model_type = model_type\n        self.model_format = model_format\n        self.quantization = quantization\n        self.context_length = context_length\n        self.model_ability = model_ability\n        self.model_description = model_description\n        self.model_lang = model_lang\n        self._access_token = (\n            access_token.replace(\"Bearer \", \"\") if access_token is not None else None\n        )\n\n    def build(self) -> \"gr.Blocks\":\n        if \"vision\" in self.model_ability:\n            interface = self.build_chat_multimodel_interface()\n        elif \"chat\" in self.model_ability:\n            interface = self.build_chat_interface()\n        else:\n            interface = self.build_generate_interface()\n\n        interface.queue(default_concurrency_limit=os.cpu_count())\n        # Gradio initiates the queue during a startup event, but since the app has already been\n        # started, that event will not run, so manually invoke the startup events.\n        # See: https://github.com/gradio-app/gradio/issues/5228\n        try:\n            interface.run_startup_events()\n        except AttributeError:\n            # compatibility\n            interface.startup_events()\n        favicon_path = os.path.join(\n            os.path.dirname(os.path.abspath(__file__)),\n            os.path.pardir,\n            \"web\",\n            \"ui\",\n            \"public\",\n            \"favicon.svg\",\n        )\n        interface.favicon_path = favicon_path\n        return interface\n\n    def build_chat_interface(self) -> \"gr.Blocks\":\n        def generate_wrapper(\n            message: str,\n            history: List[ChatMessage],\n            max_tokens: int,\n            temperature: float,\n            lora_name: str,\n            stream: bool,\n        ) -> Generator:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self._access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulChatModelHandle)\n\n            generate_config = {\n                \"temperature\": temperature,\n                \"stream\": stream,\n                \"lora_name\": lora_name,\n            }\n            if max_tokens > 0:\n                generate_config[\"max_tokens\"] = max_tokens\n\n            # Convert history to messages format\n            messages = []\n            for msg in history:\n                # ignore thinking content\n                if msg[\"metadata\"]:\n                    continue\n                messages.append({\"role\": msg[\"role\"], \"content\": msg[\"content\"]})\n\n            if stream:\n                response_content = \"\"\n                reasoning_content = \"\"\n                is_first_reasoning_content = True\n                is_first_content = True\n                for chunk in model.chat(\n                    messages=messages,\n                    generate_config=generate_config,  # type: ignore\n                ):\n                    assert isinstance(chunk, dict)\n                    if not chunk[\"choices\"]:\n                        continue\n                    delta = chunk[\"choices\"][0][\"delta\"]\n\n                    if (\n                        \"reasoning_content\" in delta\n                        and delta[\"reasoning_content\"] is not None\n                        and is_first_reasoning_content\n                    ):\n                        reasoning_content += html.escape(delta[\"reasoning_content\"])\n                        history.append(\n                            ChatMessage(\n                                role=\"assistant\",\n                                content=reasoning_content,\n                                metadata={\"title\": \"💭 Thinking Process\"},\n                            )\n                        )\n                        is_first_reasoning_content = False\n                    elif (\n                        \"reasoning_content\" in delta\n                        and delta[\"reasoning_content\"] is not None\n                    ):\n                        reasoning_content += html.escape(delta[\"reasoning_content\"])\n                        history[-1] = ChatMessage(\n                            role=\"assistant\",\n                            content=reasoning_content,\n                            metadata={\"title\": \"💭  Thinking Process\"},\n                        )\n                    elif (\n                        \"content\" in delta\n                        and delta[\"content\"] is not None\n                        and is_first_content\n                    ):\n                        response_content += html.escape(delta[\"content\"])\n                        history.append(\n                            ChatMessage(role=\"assistant\", content=response_content)\n                        )\n                        is_first_content = False\n                    elif \"content\" in delta and delta[\"content\"] is not None:\n                        response_content += html.escape(delta[\"content\"])\n                        # Replace thinking message with actual response\n                        history[-1] = ChatMessage(\n                            role=\"assistant\", content=response_content\n                        )\n                    yield history\n            else:\n                result = model.chat(\n                    messages=messages,\n                    generate_config=generate_config,  # type: ignore\n                )\n                assert isinstance(result, dict)\n                mg = result[\"choices\"][0][\"message\"]\n                if \"reasoning_content\" in mg:\n                    reasoning_content = mg[\"reasoning_content\"]\n                    if reasoning_content is not None:\n                        reasoning_content = html.escape(str(reasoning_content))\n                        history.append(\n                            ChatMessage(\n                                role=\"assistant\",\n                                content=reasoning_content,\n                                metadata={\"title\": \"💭 Thinking Process\"},\n                            )\n                        )\n\n                content = mg[\"content\"]\n                response_content = (\n                    html.escape(str(content)) if content is not None else \"\"\n                )\n                history.append(ChatMessage(role=\"assistant\", content=response_content))\n                yield history\n\n        with gr.Blocks(\n            title=f\"🚀 Xinference Chat Bot : {self.model_name} 🚀\",\n            css=\"\"\"\n            .center{\n                display: flex;\n                justify-content: center;\n                align-items: center;\n                padding: 0px;\n                color: #9ea4b0 !important;\n            }\n            .main-container {\n                display: flex;\n                flex-direction: column;\n                padding: 0.5rem;\n                box-sizing: border-box;\n                gap: 0.25rem;\n                flex-grow: 1;\n                min-width: min(320px, 100%);\n                height: calc(100vh - 70px)!important;\n            }\n            .header {\n                flex-grow: 0!important;\n            }\n            .header h1 {\n                margin: 0.5rem 0;\n                font-size: 1.5rem;\n            }\n            .center {\n                font-size: 0.9rem;\n                margin: 0.1rem 0;\n            }\n            .chat-container {\n                flex: 1;\n                display: flex;\n                min-height: 0;\n                margin: 0.25rem 0;\n            }\n            .chat-container .block {\n                height: 100%!important;\n            }\n            .input-container {\n                flex-grow: 0!important;\n            }\n            \"\"\",\n            analytics_enabled=False,\n        ) as chat_interface:\n            with gr.Column(elem_classes=\"main-container\"):\n                # Header section\n                with gr.Column(elem_classes=\"header\"):\n                    gr.Markdown(\n                        f\"\"\"<h1 style='text-align: center; margin-bottom: 1rem'>🚀 Xinference Chat Bot : {self.model_name} 🚀</h1>\"\"\"\n                    )\n                    gr.Markdown(\n                        f\"\"\"\n                        <div class=\"center\">Model ID: {self.model_uid}</div>\n                        <div class=\"center\">Model Size: {self.model_size_in_billions} Billion Parameters</div>\n                        <div class=\"center\">Model Format: {self.model_format}</div>\n                        <div class=\"center\">Model Quantization: {self.quantization}</div>\n                        \"\"\"\n                    )\n\n                # Chat container\n                with gr.Column(elem_classes=\"chat-container\"):\n                    chatbot = gr.Chatbot(\n                        type=\"messages\",\n                        label=self.model_name,\n                        show_label=True,\n                        render_markdown=True,\n                        container=True,\n                    )\n\n                # Input container\n                with gr.Column(elem_classes=\"input-container\"):\n                    with gr.Row():\n                        with gr.Column(scale=12):\n                            textbox = gr.Textbox(\n                                show_label=False,\n                                placeholder=\"Type a message...\",\n                                container=False,\n                            )\n                        with gr.Column(scale=1, min_width=50):\n                            submit_btn = gr.Button(\"Enter\", variant=\"primary\")\n\n                    with gr.Accordion(\"Additional Inputs\", open=False):\n                        max_tokens = gr.Slider(\n                            minimum=0,\n                            maximum=self.context_length,\n                            value=0,\n                            step=1,\n                            label=\"Max Tokens\",\n                        )\n                        temperature = gr.Slider(\n                            minimum=0,\n                            maximum=2,\n                            value=1,\n                            step=0.01,\n                            label=\"Temperature\",\n                        )\n                        stream = gr.Checkbox(label=\"Stream\", value=True)\n                        lora_name = gr.Text(label=\"LoRA Name\")\n\n            # deal with message submit\n            textbox.submit(\n                lambda m, h: (\"\", h + [ChatMessage(role=\"user\", content=m)]),\n                [textbox, chatbot],\n                [textbox, chatbot],\n            ).then(\n                generate_wrapper,\n                [textbox, chatbot, max_tokens, temperature, lora_name, stream],\n                chatbot,\n            )\n\n            submit_btn.click(\n                lambda m, h: (\"\", h + [ChatMessage(role=\"user\", content=m)]),\n                [textbox, chatbot],\n                [textbox, chatbot],\n            ).then(\n                generate_wrapper,\n                [textbox, chatbot, max_tokens, temperature, lora_name, stream],\n                chatbot,\n            )\n\n            return chat_interface\n\n    def build_chat_multimodel_interface(\n        self,\n    ) -> \"gr.Blocks\":\n        def predict(history, bot, max_tokens, temperature, stream):\n            from ...client import RESTfulClient\n\n            generate_config = {\n                \"temperature\": temperature,\n                \"stream\": stream,\n            }\n            if max_tokens > 0:\n                generate_config[\"max_tokens\"] = max_tokens\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self._access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulChatModelHandle)\n\n            if stream:\n                response_content = \"\"\n                for chunk in model.chat(\n                    messages=history,\n                    generate_config=generate_config,\n                ):\n                    assert isinstance(chunk, dict)\n                    delta = chunk[\"choices\"][0][\"delta\"]\n                    if \"content\" not in delta:\n                        continue\n                    else:\n                        response_content += html.escape(delta[\"content\"])\n                        bot[-1][1] = response_content\n                        yield history, bot\n                history.append(\n                    {\n                        \"content\": response_content,\n                        \"role\": \"assistant\",\n                    }\n                )\n                bot[-1][1] = response_content\n                yield history, bot\n            else:\n                response = model.chat(\n                    messages=history,\n                    generate_config=generate_config,\n                )\n                history.append(response[\"choices\"][0][\"message\"])\n                if \"audio\" in history[-1]:\n                    # audio output\n                    audio_bytes = base64.b64decode(history[-1][\"audio\"][\"data\"])\n                    audio_file = tempfile.NamedTemporaryFile(\n                        delete=False, suffix=\".wav\"\n                    )\n                    audio_file.write(audio_bytes)\n                    audio_file.close()\n\n                    def audio_to_base64(audio_path):\n                        with open(audio_path, \"rb\") as audio_file:\n                            return base64.b64encode(audio_file.read()).decode(\"utf-8\")\n\n                    def generate_html_audio(audio_path):\n                        base64_audio = audio_to_base64(audio_path)\n                        audio_format = audio_path.split(\".\")[-1]\n                        return (\n                            f\"<audio controls style='max-width:100%;'>\"\n                            f\"<source src='data:audio/{audio_format};base64,{base64_audio}' type='audio/{audio_format}'>\"\n                            f\"Your browser does not support the audio tag.</audio>\"\n                        )\n\n                    bot[-1] = (bot[-1][0], history[-1][\"content\"])\n                    yield history, bot\n\n                    # append html audio tag instead of gr.Audio\n                    bot.append((None, generate_html_audio(audio_file.name)))\n                    yield history, bot\n                else:\n                    bot[-1][1] = history[-1][\"content\"]\n                    yield history, bot\n\n        def add_text(history, bot, text, image, video, audio):\n            logger.debug(\n                \"Add text, text: %s, image: %s, video: %s, audio: %s\",\n                text,\n                image,\n                video,\n                audio,\n            )\n\n            if image:\n                buffered = BytesIO()\n                with PIL.Image.open(image) as img:\n                    img.thumbnail((500, 500))\n                    img.save(buffered, format=\"JPEG\")\n                img_b64_str = base64.b64encode(buffered.getvalue()).decode()\n                display_content = f'<img src=\"data:image/png;base64,{img_b64_str}\" alt=\"user upload image\" />\\n{text}'\n                message = {\n                    \"role\": \"user\",\n                    \"content\": [\n                        {\"type\": \"text\", \"text\": text},\n                        {\n                            \"type\": \"image_url\",\n                            \"image_url\": {\n                                \"url\": f\"data:image/png;base64,{img_b64_str}\"\n                            },\n                        },\n                    ],\n                }\n            elif video:\n\n                def video_to_base64(video_path):\n                    with open(video_path, \"rb\") as video_file:\n                        encoded_string = base64.b64encode(video_file.read()).decode(\n                            \"utf-8\"\n                        )\n                    return encoded_string\n\n                def generate_html_video(video_path):\n                    base64_video = video_to_base64(video_path)\n                    video_format = video_path.split(\".\")[-1]\n                    html_code = f\"\"\"\n                    <video controls>\n                        <source src=\"data:video/{video_format};base64,{base64_video}\" type=\"video/{video_format}\">\n                        Your browser does not support the video tag.\n                    </video>\n                    \"\"\"\n                    return html_code\n\n                display_content = f\"{generate_html_video(video)}\\n{text}\"\n                message = {\n                    \"role\": \"user\",\n                    \"content\": [\n                        {\"type\": \"text\", \"text\": text},\n                        {\n                            \"type\": \"video_url\",\n                            \"video_url\": {\"url\": video},\n                        },\n                    ],\n                }\n\n            elif audio:\n\n                def audio_to_base64(audio_path):\n                    with open(audio_path, \"rb\") as audio_file:\n                        encoded_string = base64.b64encode(audio_file.read()).decode(\n                            \"utf-8\"\n                        )\n                    return encoded_string\n\n                def generate_html_audio(audio_path):\n                    base64_audio = audio_to_base64(audio_path)\n                    audio_format = audio_path.split(\".\")[-1]\n                    return (\n                        f\"<audio controls style='max-width:100%;'>\"\n                        f\"<source src='data:audio/{audio_format};base64,{base64_audio}' type='audio/{audio_format}'>\"\n                        f\"Your browser does not support the audio tag.</audio>\"\n                    )\n\n                display_content = f\"{generate_html_audio(audio)}<br>{text}\"\n                message = {\n                    \"role\": \"user\",\n                    \"content\": [\n                        {\"type\": \"text\", \"text\": text},\n                        {\n                            \"type\": \"audio_url\",\n                            \"audio_url\": {\"url\": audio},\n                        },\n                    ],\n                }\n\n            else:\n                display_content = text\n                message = {\"role\": \"user\", \"content\": text}\n            history = history + [message]\n            bot = bot + [[display_content, None]]\n            return history, bot, \"\", None, None, None\n\n        def clear_history():\n            logger.debug(\"Clear history.\")\n            return [], None, \"\", None, None, None\n\n        def update_button(text):\n            return gr.update(interactive=bool(text))\n\n        has_vision = \"vision\" in self.model_ability\n        has_audio = \"audio\" in self.model_ability\n\n        with gr.Blocks(\n            title=f\"🚀 Xinference Chat Bot : {self.model_name} 🚀\",\n            css=\"\"\"\n        .center{\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            padding: 0px;\n            color: #9ea4b0 !important;\n        }\n        \"\"\",\n            analytics_enabled=False,\n        ) as chat_vl_interface:\n            Markdown(\n                f\"\"\"\n                <h1 style='text-align: center; margin-bottom: 1rem'>🚀 Xinference Chat Bot : {self.model_name} 🚀</h1>\n                \"\"\"\n            )\n            Markdown(\n                f\"\"\"\n                <div class=\"center\">\n                Model ID: {self.model_uid}\n                </div>\n                <div class=\"center\">\n                Model Size: {self.model_size_in_billions} Billion Parameters\n                </div>\n                <div class=\"center\">\n                Model Format: {self.model_format}\n                </div>\n                <div class=\"center\">\n                Model Quantization: {self.quantization}\n                </div>\n                \"\"\"\n            )\n\n            state = gr.State([])\n            with gr.Row():\n                chatbot = gr.Chatbot(\n                    elem_id=\"chatbot\", label=self.model_name, scale=7, min_height=900\n                )\n                with gr.Column(scale=3):\n                    if has_vision:\n                        imagebox = gr.Image(type=\"filepath\")\n                        videobox = gr.Video()\n                    else:\n                        imagebox = gr.Image(type=\"filepath\", visible=False)\n                        videobox = gr.Video(visible=False)\n\n                    if has_audio:\n                        audiobox = gr.Audio(\n                            sources=[\"microphone\", \"upload\"],\n                            type=\"filepath\",\n                            visible=True,\n                        )\n                    else:\n                        audiobox = gr.Audio(\n                            sources=[\"microphone\", \"upload\"],\n                            type=\"filepath\",\n                            visible=False,\n                        )\n\n                    textbox = gr.Textbox(\n                        show_label=False,\n                        placeholder=\"Enter text and press ENTER\",\n                        container=False,\n                    )\n                    submit_btn = gr.Button(\n                        value=\"Send\", variant=\"primary\", interactive=False\n                    )\n                    clear_btn = gr.Button(value=\"Clear\")\n\n            with gr.Accordion(\"Additional Inputs\", open=False):\n                max_tokens = gr.Slider(\n                    minimum=0,\n                    maximum=self.context_length,\n                    value=0,\n                    step=1,\n                    label=\"Max Tokens (0 stands for maximum possible tokens)\",\n                )\n                temperature = gr.Slider(\n                    minimum=0, maximum=2, value=1, step=0.01, label=\"Temperature\"\n                )\n                stream = gr.Checkbox(label=\"Stream\", value=False)\n\n            textbox.change(update_button, [textbox], [submit_btn], queue=False)\n\n            textbox.submit(\n                add_text,\n                [state, chatbot, textbox, imagebox, videobox, audiobox],\n                [state, chatbot, textbox, imagebox, videobox, audiobox],\n                queue=False,\n            ).then(\n                predict,\n                [state, chatbot, max_tokens, temperature, stream],\n                [state, chatbot],\n            )\n\n            submit_btn.click(\n                add_text,\n                [state, chatbot, textbox, imagebox, videobox, audiobox],\n                [state, chatbot, textbox, imagebox, videobox, audiobox],\n                queue=False,\n            ).then(\n                predict,\n                [state, chatbot, max_tokens, temperature, stream],\n                [state, chatbot],\n            )\n\n            clear_btn.click(\n                clear_history,\n                None,\n                [state, chatbot, textbox, imagebox, videobox, audiobox],\n                queue=False,\n            )\n\n        return chat_vl_interface\n\n    def build_generate_interface(\n        self,\n    ):\n        def undo(text, hist):\n            if len(hist) == 0:\n                return {\n                    textbox: \"\",\n                    history: [text],\n                }\n            if text == hist[-1]:\n                hist = hist[:-1]\n\n            return {\n                textbox: hist[-1] if len(hist) > 0 else \"\",\n                history: hist,\n            }\n\n        def clear(text, hist):\n            if len(hist) == 0 or (len(hist) > 0 and text != hist[-1]):\n                hist.append(text)\n            hist.append(\"\")\n            return {\n                textbox: \"\",\n                history: hist,\n            }\n\n        def complete(text, hist, max_tokens, temperature, lora_name) -> Generator:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self._access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulGenerateModelHandle)\n\n            if len(hist) == 0 or (len(hist) > 0 and text != hist[-1]):\n                hist.append(text)\n\n            generate_config = {\n                \"temperature\": temperature,\n                \"stream\": True,\n                \"lora_name\": lora_name,\n            }\n            if max_tokens > 0:\n                generate_config[\"max_tokens\"] = max_tokens\n\n            response_content = text\n            for chunk in model.generate(\n                prompt=text,\n                generate_config=generate_config,  # type: ignore\n            ):\n                assert isinstance(chunk, dict)\n                choice = chunk[\"choices\"][0]\n                if \"text\" not in choice:\n                    continue\n                else:\n                    response_content += choice[\"text\"]\n                    yield {\n                        textbox: response_content,\n                        history: hist,\n                    }\n\n            hist.append(response_content)\n            return {  # type: ignore\n                textbox: response_content,\n                history: hist,\n            }\n\n        def retry(text, hist, max_tokens, temperature, lora_name) -> Generator:\n            from ...client import RESTfulClient\n\n            generate_config = {\n                \"temperature\": temperature,\n                \"stream\": True,\n                \"lora_name\": lora_name,\n            }\n            if max_tokens > 0:\n                generate_config[\"max_tokens\"] = max_tokens\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self._access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulGenerateModelHandle)\n\n            if len(hist) == 0 or (len(hist) > 0 and text != hist[-1]):\n                hist.append(text)\n            text = hist[-2] if len(hist) > 1 else \"\"\n\n            response_content = text\n            for chunk in model.generate(prompt=text, generate_config=generate_config):  # type: ignore\n                assert isinstance(chunk, dict)\n                choice = chunk[\"choices\"][0]\n                if \"text\" not in choice:\n                    continue\n                else:\n                    response_content += choice[\"text\"]\n                    yield {\n                        textbox: response_content,\n                        history: hist,\n                    }\n\n            hist.append(response_content)\n            return {  # type: ignore\n                textbox: response_content,\n                history: hist,\n            }\n\n        with gr.Blocks(\n            title=f\"🚀 Xinference Generate Bot : {self.model_name} 🚀\",\n            css=\"\"\"\n            .center{\n                display: flex;\n                justify-content: center;\n                align-items: center;\n                padding: 0px;\n                color: #9ea4b0 !important;\n            }\n            \"\"\",\n            analytics_enabled=False,\n        ) as generate_interface:\n            history = gr.State([])\n\n            Markdown(\n                f\"\"\"\n                <h1 style='text-align: center; margin-bottom: 1rem'>🚀 Xinference Generate Bot : {self.model_name} 🚀</h1>\n                \"\"\"\n            )\n            Markdown(\n                f\"\"\"\n                <div class=\"center\">\n                Model ID: {self.model_uid}\n                </div>\n                <div class=\"center\">\n                Model Size: {self.model_size_in_billions} Billion Parameters\n                </div>\n                <div class=\"center\">\n                Model Format: {self.model_format}\n                </div>\n                <div class=\"center\">\n                Model Quantization: {self.quantization}\n                </div>\n                \"\"\"\n            )\n\n            with Column(variant=\"panel\"):\n                textbox = Textbox(\n                    container=False,\n                    show_label=False,\n                    label=\"Message\",\n                    placeholder=\"Type a message...\",\n                    lines=21,\n                    max_lines=50,\n                )\n\n                with Row():\n                    btn_generate = gr.Button(\"Generate\", variant=\"primary\")\n                with Row():\n                    btn_undo = gr.Button(\"↩️  Undo\")\n                    btn_retry = gr.Button(\"🔄  Retry\")\n                    btn_clear = gr.Button(\"🗑️  Clear\")\n                with Accordion(\"Additional Inputs\", open=False):\n                    length = gr.Slider(\n                        minimum=0,\n                        maximum=self.context_length,\n                        value=0,\n                        step=1,\n                        label=\"Max Tokens (0 stands for maximum possible tokens)\",\n                    )\n                    temperature = gr.Slider(\n                        minimum=0, maximum=2, value=1, step=0.01, label=\"Temperature\"\n                    )\n                    lora_name = gr.Text(label=\"LoRA Name\")\n\n                btn_generate.click(\n                    fn=complete,\n                    inputs=[textbox, history, length, temperature, lora_name],\n                    outputs=[textbox, history],\n                )\n\n                btn_undo.click(\n                    fn=undo,\n                    inputs=[textbox, history],\n                    outputs=[textbox, history],\n                )\n\n                btn_retry.click(\n                    fn=retry,\n                    inputs=[textbox, history, length, temperature, lora_name],\n                    outputs=[textbox, history],\n                )\n\n                btn_clear.click(\n                    fn=clear,\n                    inputs=[textbox, history],\n                    outputs=[textbox, history],\n                )\n\n        return generate_interface\n"
  },
  {
    "path": "xinference/ui/gradio/media_interface.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport base64\nimport io\nimport logging\nimport os\nimport tempfile\nimport threading\nimport time\nimport uuid\nfrom typing import Any, Dict, List, Optional, Tuple, Union\n\nimport gradio as gr\nimport PIL.Image\nfrom gradio import Markdown\n\nfrom ...client.restful.restful_client import (\n    RESTfulAudioModelHandle,\n    RESTfulImageModelHandle,\n    RESTfulVideoModelHandle,\n)\n\nlogger = logging.getLogger(__name__)\n\n\nclass MediaInterface:\n    def __init__(\n        self,\n        endpoint: str,\n        model_uid: str,\n        model_family: str,\n        model_name: str,\n        model_id: str,\n        model_revision: str,\n        model_ability: List[str],\n        model_type: str,\n        controlnet: Union[None, List[Dict[str, Union[str, None]]]],\n        access_token: Optional[str],\n    ):\n        self.endpoint = endpoint\n        self.model_uid = model_uid\n        self.model_family = model_family\n        self.model_name = model_name\n        self.model_id = model_id\n        self.model_revision = model_revision\n        self.model_ability = model_ability\n        self.model_type = model_type\n        self.controlnet = controlnet\n        self.access_token = (\n            access_token.replace(\"Bearer \", \"\") if access_token is not None else None\n        )\n\n    def build(self) -> gr.Blocks:\n        # Remove the stable_diffusion restriction to support OCR models\n        interface = self.build_main_interface()\n        interface.queue()\n        # Gradio initiates the queue during a startup event, but since the app has already been\n        # started, that event will not run, so manually invoke the startup events.\n        # See: https://github.com/gradio-app/gradio/issues/5228\n        try:\n            interface.run_startup_events()\n        except AttributeError:\n            # compatibility\n            interface.startup_events()\n        favicon_path = os.path.join(\n            os.path.dirname(os.path.abspath(__file__)),\n            os.path.pardir,\n            \"web\",\n            \"ui\",\n            \"public\",\n            \"favicon.svg\",\n        )\n        interface.favicon_path = favicon_path\n        return interface\n\n    def text2image_interface(self) -> \"gr.Blocks\":\n        from ...model.image.stable_diffusion.core import SAMPLING_METHODS\n\n        def text_generate_image(\n            prompt: str,\n            n: int,\n            size_width: int,\n            size_height: int,\n            guidance_scale: int,\n            num_inference_steps: int,\n            negative_prompt: Optional[str] = None,\n            sampler_name: Optional[str] = None,\n            progress=gr.Progress(),\n        ) -> PIL.Image.Image:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulImageModelHandle)\n\n            size = f\"{int(size_width)}*{int(size_height)}\"\n            guidance_scale = None if guidance_scale == -1 else guidance_scale  # type: ignore\n            num_inference_steps = (\n                None if num_inference_steps == -1 else num_inference_steps  # type: ignore\n            )\n            sampler_name = None if sampler_name == \"default\" else sampler_name\n\n            response = None\n            exc = None\n            request_id = str(uuid.uuid4())\n\n            def run_in_thread():\n                nonlocal exc, response\n                try:\n                    response = model.text_to_image(\n                        request_id=request_id,\n                        prompt=prompt,\n                        n=n,\n                        size=size,\n                        num_inference_steps=num_inference_steps,\n                        guidance_scale=guidance_scale,\n                        negative_prompt=negative_prompt,\n                        sampler_name=sampler_name,\n                        response_format=\"b64_json\",\n                    )\n                except Exception as e:\n                    exc = e\n\n            t = threading.Thread(target=run_in_thread)\n            t.start()\n            while t.is_alive():\n                try:\n                    cur_progress = client.get_progress(request_id)[\"progress\"]\n                except (KeyError, RuntimeError):\n                    cur_progress = 0.0\n\n                progress(cur_progress, desc=\"Generating images\")\n                time.sleep(1)\n\n            if exc:\n                raise exc\n\n            images = []\n            for image_dict in response[\"data\"]:  # type: ignore\n                assert image_dict[\"b64_json\"] is not None\n                image_data = base64.b64decode(image_dict[\"b64_json\"])\n                image = PIL.Image.open(io.BytesIO(image_data))\n                images.append(image)\n\n            return images\n\n        with gr.Blocks() as text2image_vl_interface:\n            with gr.Column():\n                with gr.Row():\n                    with gr.Column(scale=10):\n                        prompt = gr.Textbox(\n                            label=\"Prompt\",\n                            show_label=True,\n                            placeholder=\"Enter prompt here...\",\n                        )\n                        negative_prompt = gr.Textbox(\n                            label=\"Negative prompt\",\n                            show_label=True,\n                            placeholder=\"Enter negative prompt here...\",\n                        )\n                    with gr.Column(scale=1):\n                        generate_button = gr.Button(\"Generate\")\n\n                with gr.Row():\n                    n = gr.Number(label=\"Number of Images\", value=1)\n                    size_width = gr.Number(label=\"Width\", value=1024)\n                    size_height = gr.Number(label=\"Height\", value=1024)\n                with gr.Row():\n                    guidance_scale = gr.Number(label=\"Guidance scale\", value=-1)\n                    num_inference_steps = gr.Number(\n                        label=\"Inference Step Number\", value=-1\n                    )\n                    sampler_name = gr.Dropdown(\n                        choices=SAMPLING_METHODS,\n                        value=\"default\",\n                        label=\"Sampling method\",\n                    )\n\n                with gr.Column():\n                    image_output = gr.Gallery()\n\n            generate_button.click(\n                text_generate_image,\n                inputs=[\n                    prompt,\n                    n,\n                    size_width,\n                    size_height,\n                    guidance_scale,\n                    num_inference_steps,\n                    negative_prompt,\n                    sampler_name,\n                ],\n                outputs=image_output,\n            )\n\n        return text2image_vl_interface\n\n    def image2image_interface(self) -> \"gr.Blocks\":\n        from ...model.image.stable_diffusion.core import SAMPLING_METHODS\n\n        def image_generate_image(\n            prompt: str,\n            negative_prompt: str,\n            images: Optional[List[PIL.Image.Image]],\n            n: int,\n            size_width: int,\n            size_height: int,\n            guidance_scale: int,\n            num_inference_steps: int,\n            padding_image_to_multiple: int,\n            strength: float,\n            sampler_name: Optional[str] = None,\n            progress=gr.Progress(),\n        ) -> PIL.Image.Image:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulImageModelHandle)\n\n            if size_width > 0 and size_height > 0:\n                size = f\"{int(size_width)}*{int(size_height)}\"\n            else:\n                size = None\n            guidance_scale = None if guidance_scale == -1 else guidance_scale  # type: ignore\n            num_inference_steps = (\n                None if num_inference_steps == -1 else num_inference_steps  # type: ignore\n            )\n            padding_image_to_multiple = None if padding_image_to_multiple == -1 else padding_image_to_multiple  # type: ignore\n            # Initialize kwargs and handle strength parameter\n            kwargs = {}\n            if strength is not None:\n                kwargs[\"strength\"] = strength\n            sampler_name = None if sampler_name == \"default\" else sampler_name\n\n            # Handle single image or multiple images\n            if images is None:\n                raise ValueError(\"Please upload at least one image\")\n\n            # Process uploaded files to get PIL images\n            processed_images = process_uploaded_files(images)\n            if processed_images is None:\n                raise ValueError(\"Please upload at least one image\")\n\n            # Convert all images to bytes\n            image_bytes_list = []\n            for img in processed_images:\n                bio = io.BytesIO()\n                img.save(bio, format=\"png\")\n                image_bytes_list.append(bio.getvalue())\n\n            response = None\n            exc = None\n            request_id = str(uuid.uuid4())\n\n            def run_in_thread():\n                nonlocal exc, response\n                try:\n                    response = model.image_to_image(\n                        request_id=request_id,\n                        prompt=prompt,\n                        negative_prompt=negative_prompt,\n                        n=n,\n                        image=image_bytes_list,\n                        size=size,\n                        response_format=\"b64_json\",\n                        num_inference_steps=num_inference_steps,\n                        guidance_scale=guidance_scale,\n                        padding_image_to_multiple=padding_image_to_multiple,\n                        sampler_name=sampler_name,\n                        **kwargs,\n                    )\n                except Exception as e:\n                    exc = e\n\n            t = threading.Thread(target=run_in_thread)\n            t.start()\n            while t.is_alive():\n                try:\n                    cur_progress = client.get_progress(request_id)[\"progress\"]\n                except (KeyError, RuntimeError):\n                    cur_progress = 0.0\n\n                progress(cur_progress, desc=\"Generating images\")\n                time.sleep(1)\n\n            if exc:\n                raise exc\n\n            images = []\n            for image_dict in response[\"data\"]:  # type: ignore\n                assert image_dict[\"b64_json\"] is not None\n                image_data = base64.b64decode(image_dict[\"b64_json\"])\n                image = PIL.Image.open(io.BytesIO(image_data))\n                images.append(image)\n\n            return images\n\n        with gr.Blocks() as image2image_interface:\n            with gr.Column():\n                with gr.Row():\n                    with gr.Column(scale=10):\n                        prompt = gr.Textbox(\n                            label=\"Prompt\",\n                            show_label=True,\n                            placeholder=\"Enter prompt here...\",\n                        )\n                        negative_prompt = gr.Textbox(\n                            label=\"Negative Prompt\",\n                            show_label=True,\n                            placeholder=\"Enter negative prompt here...\",\n                        )\n                    with gr.Column(scale=1):\n                        generate_button = gr.Button(\"Generate\")\n\n                with gr.Row():\n                    n = gr.Number(label=\"Number of image\", value=1)\n                    size_width = gr.Number(label=\"Width\", value=-1)\n                    size_height = gr.Number(label=\"Height\", value=-1)\n\n                with gr.Row():\n                    guidance_scale = gr.Number(label=\"Guidance scale\", value=-1)\n                    num_inference_steps = gr.Number(\n                        label=\"Inference Step Number\", value=-1\n                    )\n                    padding_image_to_multiple = gr.Number(\n                        label=\"Padding image to multiple\", value=-1\n                    )\n                    strength = gr.Slider(\n                        label=\"Strength\", value=0.6, step=0.1, minimum=0.0, maximum=1.0\n                    )\n                    sampler_name = gr.Dropdown(\n                        choices=SAMPLING_METHODS,\n                        value=\"default\",\n                        label=\"Sampling method\",\n                    )\n\n                with gr.Row():\n                    with gr.Column(scale=1):\n                        gr.Markdown(\"### Upload Images\")\n                        gr.Markdown(\n                            \"*Multiple images supported for image-to-image generation*\"\n                        )\n                        uploaded_images = gr.File(\n                            file_count=\"multiple\",\n                            file_types=[\"image\"],\n                            label=\"Upload Images\",\n                        )\n                        image_preview = gr.Gallery(label=\"Image Preview\", height=300)\n                    with gr.Column(scale=1):\n                        output_gallery = gr.Gallery()\n\n            # Function to handle file uploads and convert to PIL images\n            def process_uploaded_files(files):\n                if files is None:\n                    return None\n\n                images = []\n                for file_info in files:\n                    if isinstance(file_info, dict) and \"name\" in file_info:\n                        # Handle file info format from gradio\n                        file_path = file_info[\"name\"]\n                        try:\n                            img = PIL.Image.open(file_path)\n                            images.append(img)\n                        except Exception as e:\n                            logger.warning(f\"Failed to load image {file_path}: {e}\")\n                    elif hasattr(file_info, \"name\"):\n                        # Handle file object\n                        try:\n                            img = PIL.Image.open(file_info.name)\n                            images.append(img)\n                        except Exception as e:\n                            logger.warning(\n                                f\"Failed to load image {file_info.name}: {e}\"\n                            )\n\n                return images if images else None\n\n            # Update gallery when files are uploaded\n            def update_gallery(files):\n                images = process_uploaded_files(files)\n                return images if images else []\n\n            uploaded_images.change(\n                update_gallery, inputs=[uploaded_images], outputs=[image_preview]\n            )\n\n            generate_button.click(\n                image_generate_image,\n                inputs=[\n                    prompt,\n                    negative_prompt,\n                    uploaded_images,\n                    n,\n                    size_width,\n                    size_height,\n                    guidance_scale,\n                    num_inference_steps,\n                    padding_image_to_multiple,\n                    strength,\n                    sampler_name,\n                ],\n                outputs=output_gallery,\n            )\n        return image2image_interface\n\n    def inpainting_interface(self) -> \"gr.Blocks\":\n        from ...model.image.stable_diffusion.core import SAMPLING_METHODS\n\n        def preview_mask(\n            image_editor_output: Dict[str, Any],\n        ) -> PIL.Image.Image:\n            \"\"\"Preview the generated mask without submitting inpainting task\"\"\"\n            # Extract original image and mask from ImageEditor output\n            if not image_editor_output or \"background\" not in image_editor_output:\n                return PIL.Image.new(\n                    \"L\", (512, 512), 0\n                )  # Return black image if no input\n\n            # Get the original image (background)\n            original_image = image_editor_output[\"background\"]\n\n            # Get the composite image which contains the edits\n            composite_image = image_editor_output.get(\"composite\", original_image)\n\n            # Create mask from the differences between original and composite\n            # White areas in composite indicate regions to inpaint\n            if original_image.mode != \"RGB\":\n                original_image = original_image.convert(\"RGB\")\n            if composite_image.mode != \"RGB\":\n                composite_image = composite_image.convert(\"RGB\")\n\n            # Create mask by finding differences (white drawn areas)\n            mask_image = PIL.Image.new(\"L\", original_image.size, 0)\n            orig_data = original_image.load()\n            comp_data = composite_image.load()\n            mask_data = mask_image.load()\n\n            for y in range(original_image.size[1]):\n                for x in range(original_image.size[0]):\n                    orig_pixel = orig_data[x, y]\n                    comp_pixel = comp_data[x, y]\n                    # If pixels are different, assume it's a drawn area (white for inpainting)\n                    if orig_pixel != comp_pixel:\n                        mask_data[x, y] = 255  # White for inpainting\n\n            return mask_image\n\n        def process_inpainting(\n            prompt: str,\n            negative_prompt: str,\n            image_editor_output: Dict[str, Any],\n            uploaded_mask: Optional[PIL.Image.Image],\n            n: int,\n            size_width: int,\n            size_height: int,\n            guidance_scale: int,\n            num_inference_steps: int,\n            padding_image_to_multiple: int,\n            strength: float,\n            sampler_name: Optional[str] = None,\n            progress=gr.Progress(),\n        ) -> List[PIL.Image.Image]:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulImageModelHandle)\n\n            if size_width > 0 and size_height > 0:\n                size = f\"{int(size_width)}*{int(size_height)}\"\n            else:\n                size = None\n            guidance_scale = None if guidance_scale == -1 else guidance_scale  # type: ignore\n            num_inference_steps = (\n                None if num_inference_steps == -1 else num_inference_steps  # type: ignore\n            )\n            padding_image_to_multiple = None if padding_image_to_multiple == -1 else padding_image_to_multiple  # type: ignore\n            # Initialize kwargs and handle strength parameter\n            kwargs = {}\n            if strength is not None:\n                kwargs[\"strength\"] = strength\n            sampler_name = None if sampler_name == \"default\" else sampler_name\n\n            # Get the original image for inpainting\n            if not image_editor_output or \"background\" not in image_editor_output:\n                raise ValueError(\"Please upload and edit an image first\")\n            original_image = image_editor_output[\"background\"]\n\n            # Convert original image to RGB if needed\n            if original_image.mode == \"RGBA\":\n                # Create a white background and paste the RGBA image onto it\n                rgb_image = PIL.Image.new(\"RGB\", original_image.size, (255, 255, 255))\n                rgb_image.paste(\n                    original_image, mask=original_image.split()[3]\n                )  # Use alpha channel as mask\n                original_image = rgb_image\n            elif original_image.mode != \"RGB\":\n                original_image = original_image.convert(\"RGB\")\n\n            # Assert that original image is RGB format\n            assert (\n                original_image.mode == \"RGB\"\n            ), f\"Expected RGB image, got {original_image.mode}\"\n\n            # Use uploaded mask if provided, otherwise generate from editor\n            if uploaded_mask is not None:\n                mask_image = uploaded_mask\n\n                # Convert RGBA to RGB if needed\n                if mask_image.mode == \"RGBA\":\n                    # Create a white background and paste the RGBA image onto it\n                    rgb_mask = PIL.Image.new(\"RGB\", mask_image.size, (255, 255, 255))\n                    rgb_mask.paste(\n                        mask_image, mask=(mask_image.split()[3])\n                    )  # Use alpha channel as mask\n                    mask_image = rgb_mask\n                elif mask_image.mode != \"RGB\":\n                    mask_image = mask_image.convert(\"RGB\")\n\n                # Ensure mask is the same size as original image\n                if mask_image.size != original_image.size:\n                    mask_image = mask_image.resize(original_image.size)\n\n                # Assert that mask image is RGB format\n                assert (\n                    mask_image.mode == \"RGB\"\n                ), f\"Expected RGB mask, got {mask_image.mode}\"\n            else:\n                # Generate mask using the preview function\n                mask_image = preview_mask(image_editor_output)\n                # Assert that generated mask is L format (grayscale)\n                assert mask_image.mode == \"L\", f\"Expected L mask, got {mask_image.mode}\"\n\n            bio = io.BytesIO()\n            original_image.save(bio, format=\"png\")\n\n            mask_bio = io.BytesIO()\n            mask_image.save(mask_bio, format=\"png\")\n\n            response = None\n            exc = None\n            request_id = str(uuid.uuid4())\n\n            def run_in_thread():\n                nonlocal exc, response\n                try:\n                    response = model.inpainting(\n                        request_id=request_id,\n                        prompt=prompt,\n                        negative_prompt=negative_prompt,\n                        n=n,\n                        image=bio.getvalue(),\n                        mask_image=mask_bio.getvalue(),\n                        size=size,\n                        response_format=\"b64_json\",\n                        num_inference_steps=num_inference_steps,\n                        guidance_scale=guidance_scale,\n                        padding_image_to_multiple=padding_image_to_multiple,\n                        sampler_name=sampler_name,\n                        **kwargs,\n                    )\n                except Exception as e:\n                    exc = e\n\n            t = threading.Thread(target=run_in_thread)\n            t.start()\n            while t.is_alive():\n                try:\n                    cur_progress = client.get_progress(request_id)[\"progress\"]\n                except (KeyError, RuntimeError):\n                    cur_progress = 0.0\n\n                progress(cur_progress, desc=\"Inpainting images\")\n                time.sleep(1)\n\n            if exc:\n                raise exc\n\n            images = []\n            for image_dict in response[\"data\"]:  # type: ignore\n                assert image_dict[\"b64_json\"] is not None\n                image_data = base64.b64decode(image_dict[\"b64_json\"])\n                image = PIL.Image.open(io.BytesIO(image_data))\n                images.append(image)\n\n            return images\n\n        with gr.Blocks() as inpainting_interface:\n            with gr.Column():\n                with gr.Row():\n                    with gr.Column(scale=10):\n                        prompt = gr.Textbox(\n                            label=\"Prompt\",\n                            show_label=True,\n                            placeholder=\"Enter prompt here...\",\n                        )\n                        negative_prompt = gr.Textbox(\n                            label=\"Negative Prompt\",\n                            show_label=True,\n                            placeholder=\"Enter negative prompt here...\",\n                        )\n                    with gr.Column(scale=1):\n                        generate_button = gr.Button(\"Generate\")\n\n                with gr.Row():\n                    n = gr.Number(label=\"Number of image\", value=1)\n                    size_width = gr.Number(label=\"Width\", value=-1)\n                    size_height = gr.Number(label=\"Height\", value=-1)\n\n                with gr.Row():\n                    guidance_scale = gr.Number(label=\"Guidance scale\", value=-1)\n                    num_inference_steps = gr.Number(\n                        label=\"Inference Step Number\", value=-1\n                    )\n                    padding_image_to_multiple = gr.Number(\n                        label=\"Padding image to multiple\", value=-1\n                    )\n                    strength = gr.Slider(\n                        label=\"Strength\", value=0.6, step=0.1, minimum=0.0, maximum=1.0\n                    )\n                    sampler_name = gr.Dropdown(\n                        choices=SAMPLING_METHODS,\n                        value=\"default\",\n                        label=\"Sampling method\",\n                    )\n\n                with gr.Row():\n                    with gr.Column(scale=2):\n                        image_editor = gr.ImageEditor(\n                            type=\"pil\",\n                            label=\"Edit Image and Create Mask (Draw white areas to inpaint)\",\n                            interactive=True,\n                            height=400,\n                        )\n\n                        # Mask controls below the editor\n                        with gr.Row():\n                            preview_button = gr.Button(\"Preview Mask\", size=\"sm\")\n                            upload_mask = gr.Image(\n                                type=\"pil\",\n                                label=\"Or upload mask image directly\",\n                                interactive=True,\n                            )\n                        with gr.Row():\n                            mask_output = gr.Image(\n                                label=\"Current Mask Preview\",\n                                interactive=False,\n                                height=200,\n                            )\n\n                    with gr.Column(scale=1):\n                        gr.Markdown(\"### Inpainting Results\")\n                        output_gallery = gr.Gallery()\n\n            preview_button.click(\n                preview_mask,\n                inputs=[image_editor],\n                outputs=[mask_output],\n            )\n\n            # When user uploads a mask, display it\n            def process_uploaded_mask(\n                mask: Optional[PIL.Image.Image],\n            ) -> PIL.Image.Image:\n                if mask is None:\n                    return PIL.Image.new(\"L\", (512, 512), 0)\n\n                # Convert RGBA to grayscale for preview\n                if mask.mode == \"RGBA\":\n                    # Use alpha channel for mask preview\n                    alpha = mask.split()[3]\n                    mask = alpha.convert(\"L\")\n                elif mask.mode != \"L\":\n                    # Convert to grayscale\n                    mask = mask.convert(\"L\")\n\n                return mask\n\n            upload_mask.change(\n                process_uploaded_mask, inputs=[upload_mask], outputs=[mask_output]\n            )\n\n            generate_button.click(\n                process_inpainting,\n                inputs=[\n                    prompt,\n                    negative_prompt,\n                    image_editor,\n                    upload_mask,\n                    n,\n                    size_width,\n                    size_height,\n                    guidance_scale,\n                    num_inference_steps,\n                    padding_image_to_multiple,\n                    strength,\n                    sampler_name,\n                ],\n                outputs=[output_gallery],\n            )\n        return inpainting_interface\n\n    def text2video_interface(self) -> \"gr.Blocks\":\n        def text_generate_video(\n            prompt: str,\n            negative_prompt: str,\n            num_frames: int,\n            fps: int,\n            num_inference_steps: int,\n            guidance_scale: float,\n            width: int,\n            height: int,\n            progress=gr.Progress(),\n        ) -> List[Tuple[str, str]]:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulVideoModelHandle)\n\n            request_id = str(uuid.uuid4())\n            response = None\n            exc = None\n\n            # Run generation in a separate thread to allow progress tracking\n            def run_in_thread():\n                nonlocal exc, response\n                try:\n                    response = model.text_to_video(\n                        request_id=request_id,\n                        prompt=prompt,\n                        negative_prompt=negative_prompt,\n                        num_frames=num_frames,\n                        fps=fps,\n                        num_inference_steps=num_inference_steps,\n                        guidance_scale=guidance_scale,\n                        width=width,\n                        height=height,\n                        response_format=\"b64_json\",\n                    )\n                except Exception as e:\n                    exc = e\n\n            t = threading.Thread(target=run_in_thread)\n            t.start()\n\n            # Update progress bar during generation\n            while t.is_alive():\n                try:\n                    cur_progress = client.get_progress(request_id)[\"progress\"]\n                except Exception:\n                    cur_progress = 0.0\n                progress(cur_progress, desc=\"Generating video\")\n                time.sleep(1)\n\n            if exc:\n                raise exc\n\n            # Decode and return the generated video\n            videos = []\n            for video_dict in response[\"data\"]:  # type: ignore\n                video_data = base64.b64decode(video_dict[\"b64_json\"])\n                video_path = f\"/tmp/{uuid.uuid4()}.mp4\"\n                with open(video_path, \"wb\") as f:\n                    f.write(video_data)\n                videos.append((video_path, \"Generated Video\"))\n\n            return videos\n\n        # Gradio UI definition\n        with gr.Blocks() as text2video_ui:\n            # Prompt & Negative Prompt (stacked vertically)\n            prompt = gr.Textbox(label=\"Prompt\", placeholder=\"Enter video prompt\")\n            negative_prompt = gr.Textbox(\n                label=\"Negative Prompt\", placeholder=\"Enter negative prompt\"\n            )\n\n            # Parameters (2-column layout)\n            with gr.Row():\n                with gr.Column():\n                    width = gr.Number(label=\"Width\", value=512)\n                    num_frames = gr.Number(label=\"Frames\", value=16)\n                    steps = gr.Number(label=\"Inference Steps\", value=25)\n                with gr.Column():\n                    height = gr.Number(label=\"Height\", value=512)\n                    fps = gr.Number(label=\"FPS\", value=8)\n                    guidance_scale = gr.Slider(\n                        label=\"Guidance Scale\", minimum=1, maximum=20, value=7.5\n                    )\n\n            # Generate button\n            generate = gr.Button(\"Generate\")\n\n            # Output gallery\n            gallery = gr.Gallery(label=\"Generated Videos\", columns=2)\n\n            # Button click logic\n            generate.click(\n                fn=text_generate_video,\n                inputs=[\n                    prompt,\n                    negative_prompt,\n                    num_frames,\n                    fps,\n                    steps,\n                    guidance_scale,\n                    width,\n                    height,\n                ],\n                outputs=gallery,\n            )\n\n        return text2video_ui\n\n    def image2video_interface(self) -> \"gr.Blocks\":\n        def image_generate_video(\n            image: \"PIL.Image.Image\",\n            prompt: str,\n            negative_prompt: str,\n            num_frames: int,\n            fps: int,\n            num_inference_steps: int,\n            guidance_scale: float,\n            width: int,\n            height: int,\n            progress=gr.Progress(),\n        ) -> List[Tuple[str, str]]:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulVideoModelHandle)\n\n            request_id = str(uuid.uuid4())\n            response = None\n            exc = None\n\n            # Convert uploaded image to base64\n            buffered = io.BytesIO()\n            image.save(buffered, format=\"PNG\")\n\n            # Run generation in a separate thread\n            def run_in_thread():\n                nonlocal exc, response\n                try:\n                    response = model.image_to_video(\n                        request_id=request_id,\n                        image=buffered.getvalue(),\n                        prompt=prompt,\n                        negative_prompt=negative_prompt,\n                        num_frames=num_frames,\n                        fps=fps,\n                        num_inference_steps=num_inference_steps,\n                        guidance_scale=guidance_scale,\n                        width=width,\n                        height=height,\n                        response_format=\"b64_json\",\n                    )\n                except Exception as e:\n                    exc = e\n\n            t = threading.Thread(target=run_in_thread)\n            t.start()\n\n            # Progress loop\n            while t.is_alive():\n                try:\n                    cur_progress = client.get_progress(request_id)[\"progress\"]\n                except Exception:\n                    cur_progress = 0.0\n                progress(cur_progress, desc=\"Generating video from image\")\n                time.sleep(1)\n\n            if exc:\n                raise exc\n\n            # Decode and return video files\n            videos = []\n            for video_dict in response[\"data\"]:  # type: ignore\n                video_data = base64.b64decode(video_dict[\"b64_json\"])\n                video_path = f\"/tmp/{uuid.uuid4()}.mp4\"\n                with open(video_path, \"wb\") as f:\n                    f.write(video_data)\n                videos.append((video_path, \"Generated Video\"))\n\n            return videos\n\n        # Gradio UI\n        with gr.Blocks() as image2video_ui:\n            image = gr.Image(label=\"Input Image\", type=\"pil\")\n\n            prompt = gr.Textbox(label=\"Prompt\", placeholder=\"Enter video prompt\")\n            negative_prompt = gr.Textbox(\n                label=\"Negative Prompt\", placeholder=\"Enter negative prompt\"\n            )\n\n            with gr.Row():\n                with gr.Column():\n                    width = gr.Number(label=\"Width\", value=512)\n                    num_frames = gr.Number(label=\"Frames\", value=16)\n                    steps = gr.Number(label=\"Inference Steps\", value=25)\n                with gr.Column():\n                    height = gr.Number(label=\"Height\", value=512)\n                    fps = gr.Number(label=\"FPS\", value=8)\n                    guidance_scale = gr.Slider(\n                        label=\"Guidance Scale\", minimum=1, maximum=20, value=7.5\n                    )\n\n            generate = gr.Button(\"Generate\")\n            gallery = gr.Gallery(label=\"Generated Videos\", columns=2)\n\n            generate.click(\n                fn=image_generate_video,\n                inputs=[\n                    image,\n                    prompt,\n                    negative_prompt,\n                    num_frames,\n                    fps,\n                    steps,\n                    guidance_scale,\n                    width,\n                    height,\n                ],\n                outputs=gallery,\n            )\n\n        return image2video_ui\n\n    def flf2video_interface(self) -> \"gr.Blocks\":\n        def generate_video_from_flf(\n            first_frame: \"PIL.Image.Image\",\n            last_frame: \"PIL.Image.Image\",\n            prompt: str,\n            negative_prompt: str,\n            num_frames: int,\n            fps: int,\n            num_inference_steps: int,\n            guidance_scale: float,\n            width: int,\n            height: int,\n            progress=gr.Progress(),\n        ) -> List[Tuple[str, str]]:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n            assert hasattr(model, \"flf_to_video\")\n\n            request_id = str(uuid.uuid4())\n            response = None\n            exc = None\n\n            buffer_first = io.BytesIO()\n            buffer_last = io.BytesIO()\n            first_frame.save(buffer_first, format=\"PNG\")\n            last_frame.save(buffer_last, format=\"PNG\")\n\n            def run_in_thread():\n                nonlocal exc, response\n                try:\n                    response = model.flf_to_video(\n                        first_frame=buffer_first.getvalue(),\n                        last_frame=buffer_last.getvalue(),\n                        prompt=prompt,\n                        negative_prompt=negative_prompt,\n                        n=1,\n                        num_frames=num_frames,\n                        fps=fps,\n                        num_inference_steps=num_inference_steps,\n                        guidance_scale=guidance_scale,\n                        width=width,\n                        height=height,\n                        response_format=\"b64_json\",\n                        request_id=request_id,\n                    )\n                except Exception as e:\n                    exc = e\n\n            t = threading.Thread(target=run_in_thread)\n            t.start()\n\n            while t.is_alive():\n                try:\n                    cur_progress = client.get_progress(request_id)[\"progress\"]\n                except Exception:\n                    cur_progress = 0.0\n                progress(cur_progress, desc=\"Generating video from first/last frames\")\n                time.sleep(1)\n\n            if exc:\n                raise exc\n\n            videos = []\n            for video_dict in response[\"data\"]:  # type: ignore\n                video_data = base64.b64decode(video_dict[\"b64_json\"])\n                video_path = f\"/tmp/{uuid.uuid4()}.mp4\"\n                with open(video_path, \"wb\") as f:\n                    f.write(video_data)\n                videos.append((video_path, \"Generated Video\"))\n\n            return videos\n\n        # Gradio UI\n        with gr.Blocks() as flf2video_ui:\n            with gr.Row():\n                first_frame = gr.Image(label=\"First Frame\", type=\"pil\")\n                last_frame = gr.Image(label=\"Last Frame\", type=\"pil\")\n\n            prompt = gr.Textbox(label=\"Prompt\", placeholder=\"Enter video prompt\")\n            negative_prompt = gr.Textbox(\n                label=\"Negative Prompt\", placeholder=\"Enter negative prompt\"\n            )\n\n            with gr.Row():\n                with gr.Column():\n                    width = gr.Number(label=\"Width\", value=512)\n                    num_frames = gr.Number(label=\"Frames\", value=16)\n                    steps = gr.Number(label=\"Inference Steps\", value=25)\n                with gr.Column():\n                    height = gr.Number(label=\"Height\", value=512)\n                    fps = gr.Number(label=\"FPS\", value=8)\n                    guidance_scale = gr.Slider(\n                        label=\"Guidance Scale\", minimum=1, maximum=20, value=7.5\n                    )\n\n            generate = gr.Button(\"Generate\")\n            gallery = gr.Gallery(label=\"Generated Videos\", columns=2)\n\n            generate.click(\n                fn=generate_video_from_flf,\n                inputs=[\n                    first_frame,\n                    last_frame,\n                    prompt,\n                    negative_prompt,\n                    num_frames,\n                    fps,\n                    steps,\n                    guidance_scale,\n                    width,\n                    height,\n                ],\n                outputs=gallery,\n            )\n\n        return flf2video_ui\n\n    def audio2text_interface(self) -> \"gr.Blocks\":\n        def transcribe_audio(\n            audio_path: str,\n            language: Optional[str],\n            prompt: Optional[str],\n            temperature: float,\n        ) -> str:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n            assert isinstance(model, RESTfulAudioModelHandle)\n\n            with open(audio_path, \"rb\") as f:\n                audio_data = f.read()\n\n            response = model.transcriptions(\n                audio=audio_data,\n                language=language or None,\n                prompt=prompt or None,\n                temperature=temperature,\n                response_format=\"json\",\n            )\n\n            return response.get(\"text\", \"No transcription result.\")\n\n        with gr.Blocks() as audio2text_ui:\n            with gr.Row():\n                audio_input = gr.Audio(\n                    type=\"filepath\",\n                    label=\"Upload or Record Audio\",\n                    sources=[\"upload\", \"microphone\"],  # ✅ support both\n                )\n            with gr.Row():\n                language = gr.Textbox(\n                    label=\"Language\", placeholder=\"e.g. en or zh\", value=\"\"\n                )\n                prompt = gr.Textbox(\n                    label=\"Prompt (optional)\",\n                    placeholder=\"Provide context or vocabulary\",\n                )\n                temperature = gr.Slider(\n                    label=\"Temperature\", minimum=0.0, maximum=1.0, value=0.0, step=0.1\n                )\n            transcribe_btn = gr.Button(\"Transcribe\")\n            output_text = gr.Textbox(label=\"Transcription\", lines=5)\n\n            transcribe_btn.click(\n                fn=transcribe_audio,\n                inputs=[audio_input, language, prompt, temperature],\n                outputs=output_text,\n            )\n\n        return audio2text_ui\n\n    def text2speech_interface(self) -> \"gr.Blocks\":\n        def tts_generate(\n            input_text: str,\n            voice: str,\n            speed: float,\n            prompt_speech_file,\n            prompt_text: Optional[str],\n        ) -> str:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n            assert hasattr(model, \"speech\")\n\n            prompt_speech_bytes = None\n            if prompt_speech_file is not None:\n                with open(prompt_speech_file, \"rb\") as f:\n                    prompt_speech_bytes = f.read()\n\n            kw: Dict[str, Any] = {}\n            if prompt_speech_bytes:\n                kw[\"prompt_speech\"] = prompt_speech_bytes\n            if prompt_text:\n                kw[\"prompt_text\"] = prompt_text\n\n            response = model.speech(\n                input=input_text, voice=voice, speed=speed, response_format=\"mp3\", **kw\n            )\n\n            # Write to a temp .mp3 file and return its path\n            temp_dir = tempfile.gettempdir()\n            audio_path = os.path.join(temp_dir, f\"{uuid.uuid4()}.mp3\")\n            with open(audio_path, \"wb\") as f:\n                f.write(response)\n\n            return audio_path\n\n        # Determine model abilities\n        supports_basic_tts = \"text2audio\" in self.model_ability\n        supports_zero_shot = \"text2audio_zero_shot\" in self.model_ability\n        supports_voice_cloning = \"text2audio_voice_cloning\" in self.model_ability\n\n        # Show ability info\n        ability_info = []\n        if supports_basic_tts:\n            ability_info.append(\"✅ Basic TTS (text-to-speech)\")\n        if supports_zero_shot:\n            ability_info.append(\"✅ Zero-shot TTS (voice selection)\")\n        if supports_voice_cloning:\n            ability_info.append(\"✅ Voice Cloning (requires reference audio)\")\n\n        # Gradio UI\n        with gr.Blocks() as tts_ui:\n            gr.Markdown(f\"**Model Abilities:**\\n{chr(10).join(ability_info)}\")\n\n            with gr.Row():\n                with gr.Column():\n                    input_text = gr.Textbox(\n                        label=\"Text\", placeholder=\"Enter text to synthesize\"\n                    )\n                    voice = gr.Textbox(\n                        label=\"Voice\", placeholder=\"Optional voice ID\", value=\"\"\n                    )\n                    speed = gr.Slider(\n                        label=\"Speed\", minimum=0.5, maximum=2.0, value=1.0, step=0.1\n                    )\n\n                    # Show voice cloning controls if supported\n                    if supports_voice_cloning:\n                        gr.Markdown(\"---\\n**Voice Cloning Options**\")\n                        # Make voice cloning required if model doesn't support zero-shot\n                        if supports_zero_shot:\n                            prompt_speech = gr.Audio(\n                                label=\"Prompt Speech (for cloning, optional)\",\n                                type=\"filepath\",\n                            )\n                            prompt_text = gr.Textbox(\n                                label=\"Prompt Text (for cloning, optional)\",\n                                placeholder=\"Text of the prompt speech\",\n                            )\n                        else:\n                            prompt_speech = gr.Audio(\n                                label=\"Prompt Speech (for cloning, required)\",\n                                type=\"filepath\",\n                            )\n                            prompt_text = gr.Textbox(\n                                label=\"Prompt Text (for cloning, optional)\",\n                                placeholder=\"Text of the prompt speech (optional)\",\n                            )\n                    else:\n                        # Hidden components for API compatibility\n                        prompt_speech = gr.Audio(visible=False)\n                        prompt_text = gr.Textbox(visible=False)\n\n                    generate = gr.Button(\"Generate\")\n\n                with gr.Column():\n                    audio_output = gr.Audio(label=\"Generated Audio\", type=\"filepath\")\n\n            generate.click(\n                fn=tts_generate,\n                inputs=[input_text, voice, speed, prompt_speech, prompt_text],\n                outputs=audio_output,\n            )\n\n        return tts_ui\n\n    def ocr_interface(self) -> \"gr.Blocks\":\n        def extract_text_from_image(\n            image: \"PIL.Image.Image\",\n            ocr_type: str = \"ocr\",\n            model_size: str = \"gundam\",\n            test_compress: bool = False,\n            enable_visualization: bool = False,\n            save_results: bool = False,\n            progress=gr.Progress(),\n        ) -> Union[str, Tuple[str, str, str]]:\n            from ...client import RESTfulClient\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n            assert hasattr(model, \"ocr\")\n\n            # Convert PIL image to bytes\n            import io\n\n            buffered = io.BytesIO()\n            if image.mode == \"RGBA\" or image.mode == \"CMYK\":\n                image = image.convert(\"RGB\")\n            image.save(buffered, format=\"PNG\")\n            image_bytes = buffered.getvalue()\n\n            progress(0.1, desc=\"Processing image for OCR\")\n\n            # Prepare prompt based on OCR type\n            if ocr_type == \"markdown\":\n                prompt = \"<image>\\nConvert this document to clean markdown format. Extract the text content and format it properly using markdown syntax. Do not include any coordinate annotations or special formatting markers.\"\n            elif ocr_type == \"format\":\n                prompt = \"<image>\\n<|grounding|>Convert the document to markdown with structure annotations. Include coordinate information for text regions and maintain the document structure.\"\n            else:  # ocr\n                prompt = \"<image>\\nFree OCR. Extract all text content from the image.\"\n\n            try:\n                logger.info(\n                    f\"Starting OCR processing - Type: {ocr_type}, Model Size: {model_size}\"\n                )\n                logger.info(\n                    f\"Image info: {image.size if image else 'None'}, Mode: {image.mode if image else 'None'}\"\n                )\n\n                if enable_visualization and hasattr(model, \"visualize_ocr\"):\n                    # Use visualization method\n                    logger.info(\"Using visualization method\")\n                    response = model.visualize_ocr(\n                        image=image_bytes,\n                        prompt=prompt,\n                        model_size=model_size,\n                        save_results=save_results,\n                        eval_mode=True,\n                    )\n\n                    progress(0.8, desc=\"Processing visualization\")\n\n                    # Debug: Log response type and content\n                    logger.info(f\"Visualization response type: {type(response)}\")\n                    logger.info(f\"Visualization response: {response}\")\n\n                    # Format response - handle both string and dict responses\n                    if isinstance(response, dict):\n                        if response.get(\"success\"):\n                            text_result = response.get(\"text\", \"No text extracted\")\n                        else:\n                            error_msg = response.get(\n                                \"error\", \"OCR visualization failed\"\n                            )\n                            # Return formatted error message for Markdown\n                            error_md = f\"**Error**: {error_msg}\"\n                            return error_md, \"\", \"\"\n                    elif isinstance(response, str):\n                        # Handle string response from original model\n                        text_result = response\n                    else:\n                        text_result = str(response)\n\n                    # Check if the result looks like Markdown and format it properly\n                    if ocr_type == \"markdown\" and isinstance(text_result, str):\n                        # Markdown mode - process LaTeX formulas for better rendering\n                        try:\n                            from .utils.latex import process_ocr_latex\n\n                            if \"\\\\\" in text_result and (\n                                \"\\\\[\" in text_result\n                                or \"\\\\(\" in text_result\n                                or \"$\" in text_result\n                            ):\n                                # Process LaTeX formulas for Markdown compatibility\n                                text_result = process_ocr_latex(\n                                    text_result, output_format=\"markdown\"\n                                )\n                                logger.info(\n                                    \"Applied LaTeX processing for Markdown rendering (visualization)\"\n                                )\n                        except ImportError:\n                            logger.warning(\n                                \"LaTeX processing utils not available, using raw text\"\n                            )\n                        pass\n                    elif ocr_type == \"format\" and isinstance(text_result, str):\n                        # For format mode, keep annotations but format as code block\n                        if \"<|ref|>\" in text_result:\n                            text_result = f\"```\\n{text_result}\\n```\"\n                    elif ocr_type == \"ocr\" and isinstance(text_result, str):\n                        # For plain text, format as a simple block\n                        text_result = text_result  # Keep as plain text, Markdown will render it normally\n\n                        # Add compression info if available\n                    if (\n                        isinstance(response, dict)\n                        and test_compress\n                        and \"compression_ratio\" in response\n                    ):\n                        compression_info = (\n                            f\"\\n\\n--- Compression Ratio Information ---\\n\"\n                        )\n                        compression_info += f\"Compression Ratio: {response.get('compression_ratio', 'N/A')}\\n\"\n                        compression_info += f\"Valid Image Tokens: {response.get('valid_image_tokens', 'N/A')}\\n\"\n                        compression_info += f\"Output Text Tokens: {response.get('output_text_tokens', 'N/A')}\\n\"\n                        text_result += compression_info\n\n                    # Add visualization info\n                    viz_info = {}\n                    if isinstance(response, dict):\n                        viz_info = response.get(\"visualization\", {})\n                        if viz_info.get(\"has_annotations\"):\n                            viz_text = f\"\\n\\n--- Visualization Information ---\\n\"\n                            viz_text += f\"Number of Bounding Boxes: {viz_info.get('num_bounding_boxes', 0)}\\n\"\n                            viz_text += f\"Number of Extracted Images: {viz_info.get('num_extracted_images', 0)}\\n\"\n                            text_result += viz_text\n\n                        saved_files = response.get(\"saved_files\", {})\n                    else:\n                        saved_files = {}\n\n                    # Return text and visualization info\n                    return text_result, str(viz_info), str(saved_files)\n                else:\n                    # Standard OCR branch\n                    logger.info(\"Using standard OCR branch (not visualization)\")\n                    response = model.ocr(\n                        image=image_bytes,\n                        prompt=prompt,\n                        model_size=model_size,\n                        test_compress=test_compress,\n                        save_results=save_results,\n                        eval_mode=True,\n                    )\n\n                    progress(0.8, desc=\"Extracting text\")\n\n                    # Debug: Log response type and content\n                    logger.info(f\"Standard OCR response type: {type(response)}\")\n                    logger.info(\n                        f\"Standard OCR response content: {str(response)[:200]}...\"\n                    )\n\n                    # Format response - handle both string and dict responses\n                    if isinstance(response, dict):\n                        if response.get(\"success\"):\n                            text_result = response.get(\"text\", \"No text extracted\")\n\n                            # Debug: Check if text is empty\n                            if not text_result or not text_result.strip():\n                                logger.warning(\"OCR returned empty text\")\n                                logger.warning(f\"Full response: {response}\")\n                                # Return a helpful message instead of empty result\n                                text_result = \"\"\"**OCR Recognition Complete, No Text Detected**\n\n**Possible Reasons:**\n- Text in image is unclear or insufficient resolution\n- Image format not supported\n- Model unable to recognize text in image\n\n**Suggestions:**\n- Try uploading a clearer image\n- Ensure text in image is clear and legible\n- Handwritten text may have poor results\n\n**Technical Information:**\n- Model Status: Normal\n- Image Size: Original {image.size if image else 'Unknown'}, Processed {response.get('image_size', 'Unknown')}\n- Processing Mode: {response.get('model_size', 'Unknown')}\"\"\"\n                        else:\n                            error_msg = response.get(\"error\", \"OCR failed\")\n                            error_md = f\"**Error**: {error_msg}\"\n                            return error_md, \"\", \"\"\n                    elif isinstance(response, str):\n                        # Handle string response from original model\n                        text_result = response\n                    else:\n                        text_result = str(response)\n\n                    # Format based on OCR type\n                    if ocr_type == \"markdown\" and isinstance(text_result, str):\n                        # Markdown mode - process LaTeX formulas for better rendering\n                        try:\n                            from .utils.latex import process_ocr_latex\n\n                            if \"\\\\\" in text_result and (\n                                \"\\\\[\" in text_result\n                                or \"\\\\(\" in text_result\n                                or \"$\" in text_result\n                            ):\n                                # Process LaTeX formulas for Markdown compatibility\n                                text_result = process_ocr_latex(\n                                    text_result, output_format=\"markdown\"\n                                )\n                                logger.info(\n                                    \"Applied LaTeX processing for Markdown rendering\"\n                                )\n                        except ImportError:\n                            logger.warning(\n                                \"LaTeX processing utils not available, using raw text\"\n                            )\n                        pass\n                    elif ocr_type == \"format\" and isinstance(text_result, str):\n                        # Format mode - show annotations in code block\n                        if \"<|ref|>\" in text_result:\n                            text_result = f\"```text\\n{text_result}\\n```\"\n                    elif ocr_type == \"ocr\" and isinstance(text_result, str):\n                        # Plain text mode - keep as plain text\n                        text_result = text_result\n\n                    # Add compression info if available\n                    if (\n                        isinstance(response, dict)\n                        and test_compress\n                        and \"compression_ratio\" in response\n                    ):\n                        compression_info = (\n                            f\"\\n\\n--- Compression Ratio Information ---\\n\"\n                        )\n                        compression_info += f\"Compression Ratio: {response.get('compression_ratio', 'N/A')}\\n\"\n                        compression_info += f\"Valid Image Tokens: {response.get('valid_image_tokens', 'N/A')}\\n\"\n                        compression_info += f\"Output Text Tokens: {response.get('output_text_tokens', 'N/A')}\\n\"\n                        text_result += compression_info\n\n                    return text_result, \"\", \"\"\n\n            except Exception as e:\n                logger.error(f\"OCR processing error: {e}\")\n                import traceback\n\n                error_details = traceback.format_exc()\n                logger.error(f\"Full traceback: {error_details}\")\n                # Show error in markdown format for better visibility\n                error_msg = f\"\"\"**OCR Processing Error**\n\n```\n{str(e)}\n```\n\n**Debug Info:**\n- OCR Type: {ocr_type}\n- Model Size: {model_size}\n- Image Mode: {image.mode if image else 'None'}\n- Image Size: {image.size if image else 'None'}\n\"\"\"\n                return error_msg, \"\", \"\"\n\n            finally:\n                progress(1.0, desc=\"OCR complete\")\n\n        with gr.Blocks() as ocr_interface:\n            gr.Markdown(f\"### Enhanced OCR Text Extraction with {self.model_name}\")\n\n            with gr.Row():\n                with gr.Column(scale=1):\n                    image_input = gr.Image(\n                        type=\"pil\",\n                        label=\"Upload Image for OCR\",\n                        interactive=True,\n                        height=400,\n                    )\n\n                    gr.Markdown(f\"**Current OCR Model:** {self.model_name}\")\n\n                    # Model configuration options\n                    model_size = gr.Dropdown(\n                        choices=[\"tiny\", \"small\", \"base\", \"large\", \"gundam\"],\n                        value=\"gundam\",\n                        label=\"Model Size\",\n                        info=\"Choose model size configuration\",\n                    )\n\n                    ocr_type = gr.Dropdown(\n                        choices=[\"ocr\", \"format\", \"markdown\"],\n                        value=\"ocr\",\n                        label=\"Output Format\",\n                        info=\"ocr: Plain text extraction, format: Structured document (with annotations), markdown: Standard Markdown format\",\n                    )\n\n                    enable_visualization = gr.Checkbox(\n                        label=\"Enable Visualization\",\n                        value=False,\n                        info=\"Generate bounding boxes and annotations (only applicable to format mode)\",\n                    )\n\n                    test_compress = gr.Checkbox(\n                        label=\"Test Compression Ratio\",\n                        value=False,\n                        info=\"Analyze image compression performance\",\n                    )\n\n                    save_results = gr.Checkbox(\n                        label=\"Save Results\",\n                        value=False,\n                        info=\"Save OCR results to files (if supported)\",\n                    )\n\n                    extract_btn = gr.Button(\"Extract Text\", variant=\"primary\")\n\n                with gr.Column(scale=1):\n                    # Create a bordered container for the output\n                    with gr.Group(elem_classes=\"output-container\"):\n                        gr.Markdown(\"### 📄 Extraction Results\")\n\n                        text_output = gr.Markdown(\n                            value=\"Extracted text will be displayed here...\",\n                            elem_classes=\"output-text\",\n                            container=False,\n                        )\n\n                    # Additional info outputs (hidden by default)\n                    viz_info_output = gr.Textbox(\n                        label=\"Visualization Info\",\n                        lines=5,\n                        visible=False,\n                        interactive=False,\n                    )\n\n                    file_info_output = gr.Textbox(\n                        label=\"File Info\",\n                        lines=3,\n                        visible=False,\n                        interactive=False,\n                    )\n\n            # Toggle visibility of additional outputs\n            def toggle_additional_outputs(enable_viz):\n                return {\n                    viz_info_output: gr.update(visible=enable_viz),\n                    file_info_output: gr.update(visible=enable_viz),\n                }\n\n            enable_visualization.change(\n                fn=toggle_additional_outputs,\n                inputs=[enable_visualization],\n                outputs=[viz_info_output, file_info_output],\n            )\n\n            # Examples section\n            gr.Markdown(\"### Examples\")\n            gr.Examples(\n                examples=[\n                    # You can add example image paths here if needed\n                ],\n                inputs=[image_input],\n                label=\"Example Images\",\n            )\n\n            # Extract button click event\n            extract_btn.click(\n                fn=extract_text_from_image,\n                inputs=[\n                    image_input,\n                    ocr_type,\n                    model_size,\n                    test_compress,\n                    enable_visualization,\n                    save_results,\n                ],\n                outputs=[text_output, viz_info_output, file_info_output],\n            )\n\n        return ocr_interface\n\n    def document_parsing_interface(self) -> \"gr.Blocks\":\n        \"\"\"Document parsing interface that supports PDF file uploads (for MinerU).\"\"\"\n\n        def parse_document(\n            file_path: str,\n            backend: str = \"hybrid-auto-engine\",\n            parse_method: str = \"auto\",\n            language: str = \"ch\",\n            output_format: str = \"markdown\",\n            progress=gr.Progress(),\n        ) -> str:\n            from ...client import RESTfulClient\n\n            if not file_path:\n                return \"**Error**: Please upload a PDF or image file.\"\n\n            client = RESTfulClient(self.endpoint)\n            client._set_token(self.access_token)\n            model = client.get_model(self.model_uid)\n\n            if not hasattr(model, \"ocr\"):\n                return \"**Error**: Model does not support OCR/document parsing.\"\n\n            progress(0.1, desc=\"Reading file...\")\n\n            try:\n                # Read file content\n                with open(file_path, \"rb\") as f:\n                    file_bytes = f.read()\n                progress(0.3, desc=\"Processing document...\")\n\n                # Call model's ocr method\n                response = model.ocr(\n                    image=file_bytes,\n                    backend=backend,\n                    parse_method=parse_method,\n                    language=language,\n                    output_format=output_format,\n                    return_dict=True,\n                )\n\n                progress(0.9, desc=\"Formatting output...\")\n\n                if isinstance(response, dict):\n                    if response.get(\"success\"):\n                        result = response.get(\n                            \"markdown\", response.get(\"text\", \"No content extracted\")\n                        )\n                        return result or \"No content extracted\"\n                    else:\n                        return f\"**Error**: {response.get('error', 'Unknown error')}\"\n                elif isinstance(response, str):\n                    return response\n                else:\n                    return str(response)\n\n            except Exception as e:\n                logger.error(f\"Document parsing error: {e}\")\n                import traceback\n\n                error_details = traceback.format_exc()\n                logger.error(f\"Full traceback: {error_details}\")\n                return f\"\"\"**Document Parsing Error**\n\n```\n{str(e)}\n```\n\n**Debug Info:**\n- File: {file_path}\n- Backend: {backend}\n- Parse Method: {parse_method}\n- Language: {language}\n\"\"\"\n            finally:\n                progress(1.0, desc=\"Complete\")\n\n        with gr.Blocks() as doc_parsing_interface:\n            gr.Markdown(f\"### 📄 Document Parsing with {self.model_name}\")\n            gr.Markdown(\n                \"Upload PDF or image files for high-precision document parsing to Markdown/JSON.\"\n            )\n\n            with gr.Row():\n                with gr.Column(scale=1):\n                    # File upload that accepts PDF and images\n                    file_input = gr.File(\n                        label=\"Upload Document (PDF or Image)\",\n                        file_types=[\n                            \".pdf\",\n                            \".png\",\n                            \".jpg\",\n                            \".jpeg\",\n                            \".webp\",\n                            \".bmp\",\n                            \".gif\",\n                        ],\n                        type=\"filepath\",\n                    )\n\n                    gr.Markdown(f\"**Current Model:** {self.model_name}\")\n\n                    # MinerU-specific configuration\n                    backend = gr.Dropdown(\n                        choices=[\n                            \"pipeline\",  # General mode\n                            \"vlm-auto-engine\",  # Local VLM high accuracy\n                            \"hybrid-auto-engine\",  # Hybrid mode (recommended)\n                        ],\n                        value=\"hybrid-auto-engine\",\n                        label=\"Backend\",\n                        info=\"pipeline: General, vlm: High accuracy (local), hybrid: Recommended\",\n                    )\n\n                    parse_method = gr.Dropdown(\n                        choices=[\"auto\", \"txt\", \"ocr\"],\n                        value=\"auto\",\n                        label=\"Parse Method\",\n                        info=\"auto: Auto-detect, txt: Text extraction, ocr: OCR for scanned documents\",\n                    )\n\n                    language = gr.Dropdown(\n                        choices=[\n                            \"ch\",  # Chinese\n                            \"en\",  # English\n                            \"chinese_cht\",  # Traditional Chinese\n                        ],\n                        value=\"ch\",\n                        label=\"Document Language\",\n                        info=\"Select the primary language of your document\",\n                    )\n\n                    output_format = gr.Dropdown(\n                        choices=[\"markdown\", \"json\"],\n                        value=\"markdown\",\n                        label=\"Output Format\",\n                    )\n\n                    parse_btn = gr.Button(\"Parse Document\", variant=\"primary\")\n\n                with gr.Column(scale=1):\n                    with gr.Group(elem_classes=\"output-container\"):\n                        gr.Markdown(\"### 📄 Parsing Results\")\n\n                        result_output = gr.Markdown(\n                            value=\"Parsed content will be displayed here...\",\n                            elem_classes=\"output-text\",\n                            container=False,\n                        )\n\n            parse_btn.click(\n                fn=parse_document,\n                inputs=[\n                    file_input,\n                    backend,\n                    parse_method,\n                    language,\n                    output_format,\n                ],\n                outputs=result_output,\n            )\n\n        return doc_parsing_interface\n\n    def build_main_interface(self) -> \"gr.Blocks\":\n        if self.model_type == \"image\":\n            if \"ocr\" in self.model_ability:\n                title = f\"🔍 Xinference OCR: {self.model_name} 🔍\"\n            else:\n                title = f\"🎨 Xinference Stable Diffusion: {self.model_name} 🎨\"\n        elif self.model_type == \"video\":\n            title = f\"🎨 Xinference Video Generation: {self.model_name} 🎨\"\n        else:\n            assert self.model_type == \"audio\"\n            title = f\"🎨 Xinference Audio Model: {self.model_name} 🎨\"\n        with gr.Blocks(\n            title=title,\n            css=\"\"\"\n                    .center{\n                        display: flex;\n                        justify-content: center;\n                        align-items: center;\n                        padding: 0px;\n                        color: #9ea4b0 !important;\n                    }\n\n                    .output-container {\n                        border: 1px solid #e0e0e0;\n                        border-radius: 8px;\n                        padding: 16px;\n                        background-color: #f8f9fa;\n                        margin: 8px 0;\n                    }\n\n                    .output-text {\n                        background-color: white;\n                        border: 1px solid #dee2e6;\n                        border-radius: 6px;\n                        padding: 16px;\n                        min-height: 200px;\n                        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n                        line-height: 1.6;\n                    }\n\n                    .output-text h1, .output-text h2, .output-text h3,\n                    .output-text h4, .output-text h5, .output-text h6 {\n                        margin-top: 0.5em !important;\n                        margin-bottom: 0.5em !important;\n                        color: #2d3748 !important;\n                    }\n\n                    .output-text p {\n                        margin: 0.5em 0 !important;\n                    }\n\n                    .output-text pre {\n                        background-color: #f6f8fa !important;\n                        border: 1px solid #e9ecef !important;\n                        border-radius: 4px !important;\n                        padding: 12px !important;\n                        margin: 8px 0 !important;\n                    }\n\n                    .output-text code {\n                        background-color: #e9ecef !important;\n                        padding: 2px 4px !important;\n                        border-radius: 3px !important;\n                        font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, Courier, monospace !important;\n                    }\n\n                    .output-text ul, .output-text ol {\n                        margin: 0.5em 0 !important;\n                        padding-left: 20px !important;\n                    }\n\n                    .output-text blockquote {\n                        border-left: 4px solid #6c757d !important;\n                        padding-left: 16px !important;\n                        margin: 0.5em 0 !important;\n                        color: #6c757d !important;\n                        background-color: #f8f9fa !important;\n                    }\n\n                    .output-text table {\n                        border-collapse: collapse !important;\n                        width: 100% !important;\n                        margin: 8px 0 !important;\n                    }\n\n                    .output-text th, .output-text td {\n                        border: 1px solid #dee2e6 !important;\n                        padding: 8px 12px !important;\n                        text-align: left !important;\n                    }\n\n                    .output-text th {\n                        background-color: #f8f9fa !important;\n                        font-weight: bold !important;\n                    }\n\n                    /* Ensure Markdown displays correctly */\n                    .output-text .katex-display {\n                        display: block !important;\n                        text-align: center !important;\n                        margin: 1em 0 !important;\n                    }\n                    \"\"\",\n            analytics_enabled=False,\n        ) as app:\n            Markdown(\n                f\"\"\"\n                    <h1 class=\"center\" style='text-align: center; margin-bottom: 1rem'>{title}</h1>\n                    \"\"\"\n            )\n            Markdown(\n                f\"\"\"\n                    <div class=\"center\">\n                    Model ID: {self.model_uid}\n                    </div>\n                    \"\"\"\n            )\n            if \"ocr\" in self.model_ability:\n                with gr.Tab(\"OCR\"):\n                    self.ocr_interface()\n            if \"document-parsing\" in self.model_ability:\n                with gr.Tab(\"Document Parsing\"):\n                    self.document_parsing_interface()\n            if \"text2image\" in self.model_ability:\n                with gr.Tab(\"Text to Image\"):\n                    self.text2image_interface()\n            if \"image2image\" in self.model_ability:\n                with gr.Tab(\"Image to Image\"):\n                    self.image2image_interface()\n            if \"inpainting\" in self.model_ability:\n                with gr.Tab(\"Inpainting\"):\n                    self.inpainting_interface()\n            if \"text2video\" in self.model_ability:\n                with gr.Tab(\"Text to Video\"):\n                    self.text2video_interface()\n            if \"image2video\" in self.model_ability:\n                with gr.Tab(\"Image to Video\"):\n                    self.image2video_interface()\n            if \"firstlastframe2video\" in self.model_ability:\n                with gr.Tab(\"FirstLastFrame to Video\"):\n                    self.flf2video_interface()\n            if \"audio2text\" in self.model_ability:\n                with gr.Tab(\"Audio to Text\"):\n                    self.audio2text_interface()\n            if \"text2audio\" in self.model_ability:\n                with gr.Tab(\"Text to Audio\"):\n                    self.text2speech_interface()\n        return app\n"
  },
  {
    "path": "xinference/ui/gradio/utils/__init__.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Utilities for Gradio UI components.\"\"\"\n\nfrom .latex import clean_latex_syntax, process_latex_formulas, process_ocr_latex\n\n__all__ = [\"process_latex_formulas\", \"clean_latex_syntax\", \"process_ocr_latex\"]\n"
  },
  {
    "path": "xinference/ui/gradio/utils/latex.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nLaTeX processing utilities for OCR text formatting.\n\nThis module provides functions to process LaTeX formulas in OCR text,\nmaking them compatible with different output formats like Markdown,\nHTML, and pure LaTeX.\n\"\"\"\n\nimport re\nfrom typing import Any, Dict, Union\n\n\ndef process_latex_formulas(text: str, output_format: str = \"markdown\") -> str:\n    \"\"\"\n    Process LaTeX formulas in OCR text to make them compatible with different output formats.\n\n    Args:\n        text: The OCR text containing LaTeX formulas\n        output_format: Target format (\"markdown\", \"html\", \"latex\", \"gradio\")\n\n    Returns:\n        Processed text with formulas converted to the target format\n    \"\"\"\n    if not text:\n        return text\n\n    processed_text = text\n\n    if output_format == \"markdown\":\n        # Convert \\[ ... \\] to $$ ... $$ for block math in Markdown\n        processed_text = re.sub(\n            r\"\\\\\\[\\s*(.*?)\\s*\\\\\\]\",\n            lambda m: f\"\\n$$\\n{m.group(1).strip()}\\n$$\\n\",\n            processed_text,\n            flags=re.DOTALL,\n        )\n\n        # Convert \\( ... \\) to $ ... $ for inline math in Markdown\n        processed_text = re.sub(\n            r\"\\\\\\((.*?)\\\\\\)\",\n            lambda m: f\"${m.group(1).strip()}$\",\n            processed_text,\n            flags=re.DOTALL,\n        )\n\n        # Handle common LaTeX math environments\n        # Convert \\begin{equation} ... \\end{equation} to $$ ... $$\n        processed_text = re.sub(\n            r\"\\\\begin\\{equation\\}(.*?)\\\\end\\{equation\\}\",\n            lambda m: f\"\\n$$\\n{m.group(1).strip()}\\n$$\\n\",\n            processed_text,\n            flags=re.DOTALL,\n        )\n\n        # Convert \\begin{align} ... \\end{align} to $$ ... $$\n        processed_text = re.sub(\n            r\"\\\\begin\\{align\\*?\\}(.*?)\\\\end\\{align\\*?\\}\",\n            lambda m: f\"\\n$$\\n{m.group(1).strip()}\\n$$\\n\",\n            processed_text,\n            flags=re.DOTALL,\n        )\n\n        # Convert \\begin{gather} ... \\end{gather} to $$ ... $$\n        processed_text = re.sub(\n            r\"\\\\begin\\{gather\\}(.*?)\\\\end\\{gather\\}\",\n            lambda m: f\"\\n$$\\n{m.group(1).strip()}\\n$$\\n\",\n            processed_text,\n            flags=re.DOTALL,\n        )\n\n    elif output_format == \"html\":\n        # Convert \\[ ... \\] to <div>...</div> with proper formatting\n        processed_text = re.sub(\n            r\"\\\\\\[(.*?)\\\\\\]\",\n            lambda m: f'<div class=\"math-display\">\\\\[{m.group(1).strip()}\\\\]</div>',\n            processed_text,\n            flags=re.DOTALL,\n        )\n\n        # Convert \\( ... \\) to <span>...</span> for inline math\n        processed_text = re.sub(\n            r\"\\\\\\((.*?)\\\\\\)\",\n            lambda m: f'<span class=\"math-inline\">\\\\({m.group(1).strip()}\\\\)</span>',\n            processed_text,\n            flags=re.DOTALL,\n        )\n\n    elif output_format == \"latex\":\n        # Keep original LaTeX format, just clean up spacing\n        processed_text = re.sub(\n            r\"\\\\\\[(.*?)\\\\\\]\",\n            lambda m: f\"\\\\[\\n{m.group(1).strip()}\\n\\\\]\",\n            processed_text,\n            flags=re.DOTALL,\n        )\n\n        processed_text = re.sub(\n            r\"\\\\\\((.*?)\\\\\\)\",\n            lambda m: f\"\\\\({m.group(1).strip()}\\\\)\",\n            processed_text,\n            flags=re.DOTALL,\n        )\n\n    return processed_text\n\n\ndef clean_latex_syntax(text: str) -> str:\n    \"\"\"\n    Clean up common LaTeX syntax issues in OCR text.\n\n    Args:\n        text: The OCR text containing LaTeX\n\n    Returns:\n        Cleaned LaTeX text\n    \"\"\"\n    if not text:\n        return text\n\n    # Fix common OCR errors in LaTeX\n    cleaned = text\n\n    # Fix spacing around operators\n    cleaned = re.sub(r\"(\\w)([+\\-=*/])(\\w)\", r\"\\1 \\2 \\3\", cleaned)\n\n    # Fix double backslashes that might be mangled, but preserve LaTeX delimiters\n    # Only fix excessive backslashes (3+), not double backslashes which are valid LaTeX\n    cleaned = re.sub(r\"\\\\\\\\{3,}\", r\"\\\\\\\\\", cleaned)\n\n    # Fix fractions that might be incorrectly spaced\n    cleaned = re.sub(\n        r\"\\\\frac\\s*\\{\\s*(\\w+)\\s*\\}\\s*\\{\\s*(\\w+)\\s*\\}\", r\"\\\\frac{\\1}{\\2}\", cleaned\n    )\n\n    # Fix superscripts and subscripts\n    cleaned = re.sub(r\"\\^\\s*\\{\\s*(\\w+)\\s*\\}\", r\"^{\\1}\", cleaned)\n    cleaned = re.sub(r\"_\\s*\\{\\s*(\\w+)\\s*\\}\", r\"_{\\1}\", cleaned)\n\n    # Fix common misrecognized Greek letters\n    greek_corrections = {\n        r\"\\\\alpha\\s\": r\"\\\\alpha \",\n        r\"\\\\beta\\s\": r\"\\\\beta \",\n        r\"\\\\gamma\\s\": r\"\\\\gamma \",\n        r\"\\\\delta\\s\": r\"\\\\delta \",\n        r\"\\\\epsilon\\s\": r\"\\\\epsilon \",\n        r\"\\\\theta\\s\": r\"\\\\theta \",\n        r\"\\\\lambda\\s\": r\"\\\\lambda \",\n        r\"\\\\mu\\s\": r\"\\\\mu \",\n        r\"\\\\pi\\s\": r\"\\\\pi \",\n        r\"\\\\sigma\\s\": r\"\\\\sigma \",\n        r\"\\\\phi\\s\": r\"\\\\phi \",\n        r\"\\\\omega\\s\": r\"\\\\omega \",\n        r\"\\\\Delta\\s\": r\"\\\\Delta \",\n        r\"\\\\Sigma\\s\": r\"\\\\Sigma \",\n        r\"\\\\Pi\\s\": r\"\\\\Pi \",\n        r\"\\\\infty\\s\": r\"\\\\infty \",\n        r\"\\\\pm\\s\": r\"\\\\pm \",\n        r\"\\\\times\\s\": r\"\\\\times \",\n        r\"\\\\div\\s\": r\"\\\\div \",\n        r\"\\\\neq\\s\": r\"\\\\neq \",\n        r\"\\\\leq\\s\": r\"\\\\leq \",\n        r\"\\\\geq\\s\": r\"\\\\geq \",\n        r\"\\\\approx\\s\": r\"\\\\approx \",\n        r\"\\\\in\\s\": r\"\\\\in \",\n        r\"\\\\subset\\s\": r\"\\\\subset \",\n        r\"\\\\supset\\s\": r\"\\\\supset \",\n        r\"\\\\int\\s\": r\"\\\\int \",\n        r\"\\\\sum\\s\": r\"\\\\sum \",\n        r\"\\\\prod\\s\": r\"\\\\prod \",\n        r\"\\\\partial\\s\": r\"\\\\partial \",\n        r\"\\\\nabla\\s\": r\"\\\\nabla \",\n        r\"\\\\sqrt\\s\": r\"\\\\sqrt \",\n        r\"^\\{2\\}\": r\"²\",\n        r\"^\\{3\\}\": r\"³\",\n    }\n\n    for latex, unicode in greek_corrections.items():\n        cleaned = re.sub(latex, unicode, cleaned)\n\n    return cleaned\n\n\ndef process_ocr_latex(text: str, output_format: str = \"markdown\") -> str:\n    \"\"\"\n    Convenience function to process OCR text containing LaTeX formulas.\n\n    This function combines LaTeX syntax cleaning and formula formatting\n    in a single call, which is useful for OCR post-processing.\n\n    Args:\n        text: The OCR text containing LaTeX formulas\n        output_format: Target format (\"markdown\", \"html\", \"latex\", \"gradio\")\n\n    Returns:\n        Processed text with cleaned LaTeX syntax and properly formatted formulas\n    \"\"\"\n    if not text:\n        return text\n\n    # First clean up LaTeX syntax issues\n    cleaned_text = clean_latex_syntax(text)\n\n    # Then convert formulas to the desired format\n    processed_text = process_latex_formulas(cleaned_text, output_format)\n\n    return processed_text\n\n\ndef contains_latex(text: str) -> bool:\n    \"\"\"\n    Detect if text contains LaTeX formulas.\n\n    Args:\n        text: The text to check for LaTeX formulas\n\n    Returns:\n        True if the text contains LaTeX formulas, False otherwise\n    \"\"\"\n    if not text:\n        return False\n\n    # Check for common LaTeX indicators\n    latex_indicators = [\n        r\"\\\\\\[.*?\\\\\\]\",  # Block formulas \\[...\\]\n        r\"\\\\\\(.*?\\\\\\)\",  # Inline formulas \\(...\\)\n        r\"\\$.*?\\$\",  # Inline formulas $...$\n        r\"\\$\\$.*?\\$\\$\",  # Block formulas $$...$$\n        r\"\\\\begin\\{.*?\\}\",  # LaTeX environments\n        r\"\\\\[a-zA-Z]+\\{\",  # LaTeX commands with arguments\n        r\"\\\\[a-zA-Z]+\",  # Simple LaTeX commands\n    ]\n\n    for pattern in latex_indicators:\n        if re.search(pattern, text):\n            return True\n\n    return False\n\n\ndef process_ocr_result_with_latex(\n    result: Union[str, Dict[str, Any]],\n    output_format: str = \"markdown\",\n    debug_info: bool = False,\n) -> Union[str, Dict[str, Any]]:\n    \"\"\"\n    Process OCR results, applying LaTeX formatting if needed.\n\n    This is a unified function to handle both LaTeX detection and processing\n    for OCR results, supporting both string and dict formats.\n\n    Args:\n        result: OCR result, either as string or dict with 'text' key\n        output_format: Target format (\"markdown\", \"html\", \"latex\", \"gradio\")\n        debug_info: Whether to print debug information about LaTeX processing\n\n    Returns:\n        Processed result with LaTeX formulas formatted appropriately\n    \"\"\"\n    # Handle dict format (from visualize_ocr and other methods)\n    if isinstance(result, dict):\n        if \"text\" not in result:\n            return result\n\n        text = result[\"text\"]\n        if not contains_latex(text):\n            return result\n\n        # Process LaTeX\n        processed_text = process_ocr_latex(text, output_format)\n\n        # Create new result dict with processed text\n        processed_result = result.copy()\n        processed_result[\"text\"] = processed_text\n        processed_result[\"latex_processing\"] = {\n            \"latex_detected\": True,\n            \"output_format\": output_format,\n        }\n\n        if debug_info:\n            print(\"🧮 LaTeX Formula Processing:\")\n            original_block_formulas = len(re.findall(r\"\\\\\\[(.*?)\\\\\\]\", text, re.DOTALL))\n            original_inline_dollar = len(re.findall(r\"\\$(.*?)\\$\", text, re.DOTALL))\n            original_inline_paren = len(re.findall(r\"\\\\\\((.*?)\\\\\\)\", text, re.DOTALL))\n            converted_inline = len(re.findall(r\"\\$(.*?)\\$\", processed_text, re.DOTALL))\n\n            print(f\"  - Original block formulas (\\\\[...\\\\]): {original_block_formulas}\")\n            print(f\"  - Original inline formulas ($...$): {original_inline_dollar}\")\n            print(f\"  - Original inline formulas (\\\\(...\\\\)): {original_inline_paren}\")\n            print(f\"  - Final inline formulas ($...$): {converted_inline}\")\n            print(\n                f\"  - Format: Markdown-compatible ($...$ for inline, $$...$$ for block)\"\n            )\n\n        return processed_result\n\n    # Handle string format\n    else:\n        # Ensure result is treated as string\n        text_result = str(result)\n\n        if not contains_latex(text_result):\n            return result\n\n        if debug_info:\n            print(\"🧮 LaTeX Formula Processing:\")\n            original_block_formulas = len(\n                re.findall(r\"\\\\\\[(.*?)\\\\\\]\", text_result, re.DOTALL)\n            )\n            original_inline_dollar = len(\n                re.findall(r\"\\$(.*?)\\$\", text_result, re.DOTALL)\n            )\n            original_inline_paren = len(\n                re.findall(r\"\\\\\\((.*?)\\\\\\)\", text_result, re.DOTALL)\n            )\n\n        processed_text = process_ocr_latex(text_result, output_format)\n\n        if debug_info:\n            converted_inline = len(re.findall(r\"\\$(.*?)\\$\", processed_text, re.DOTALL))\n            print(f\"  - Original block formulas (\\\\[...\\\\]): {original_block_formulas}\")\n            print(f\"  - Original inline formulas ($...$): {original_inline_dollar}\")\n            print(f\"  - Original inline formulas (\\\\(...\\\\)): {original_inline_paren}\")\n            print(f\"  - Final inline formulas ($...$): {converted_inline}\")\n            print(\n                f\"  - Format: Markdown-compatible ($...$ for inline, $$...$$ for block)\"\n            )\n\n        return processed_text\n"
  },
  {
    "path": "xinference/ui/web/ui/.eslintignore",
    "content": ".idea\n.github\nnode_modules\nbuild\npublic\n"
  },
  {
    "path": "xinference/ui/web/ui/.eslintrc.yml",
    "content": "env:\n  browser: true\n  es2021: true\n  node: true\nextends:\n  - 'eslint:recommended'\n  - 'plugin:react/recommended'\n  - 'prettier'\nparserOptions:\n  parser: '@babel/eslint-parser'\n  requireConfigFile: false\n  ecmaFeatures:\n    jsx: true\n  ecmaVersion: 12\n  sourceType: module\nplugins:\n  - react\n  - simple-import-sort\nrules:\n  new-cap: 'error'\n  no-var: 'error'\n  simple-import-sort/imports: 'error'\n  simple-import-sort/exports: 'error'\n  quote-props: ['error', 'consistent']\n  'react/react-in-jsx-scope': 'off'\n  'react/prop-types': 'off'\n  'react/jsx-key': 'off'\nsettings:\n  react:\n    version: 'detect'\n"
  },
  {
    "path": "xinference/ui/web/ui/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "xinference/ui/web/ui/.prettierignore",
    "content": ".idea\n.github\nnode_modules\nbuild\npublic\n"
  },
  {
    "path": "xinference/ui/web/ui/.prettierrc.yml",
    "content": "trailingComma: 'es5'\ntabWidth: 2\nsemi: false\nsingleQuote: true\nprintWidth: 80\nbracketSpacing: true\nbracketSameLine: false\narrowParens: 'always'\nquoteProps: 'consistent'\n"
  },
  {
    "path": "xinference/ui/web/ui/package.json",
    "content": "{\n  \"name\": \"xinference-ui\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"homepage\": \".\",\n  \"dependencies\": {\n    \"@emotion/react\": \"^11.11.1\",\n    \"@emotion/styled\": \"^11.11.0\",\n    \"@fullcalendar/core\": \"^6.1.8\",\n    \"@fullcalendar/daygrid\": \"^6.1.8\",\n    \"@fullcalendar/list\": \"^6.1.8\",\n    \"@fullcalendar/timegrid\": \"^6.1.8\",\n    \"@mui/icons-material\": \"^5.14.0\",\n    \"@mui/lab\": \"^5.0.0-alpha.173\",\n    \"@mui/material\": \"^5.14.0\",\n    \"@mui/system\": \"^5.15.9\",\n    \"@mui/x-data-grid\": \"^6.20.4\",\n    \"@nivo/bar\": \"^0.83.0\",\n    \"@nivo/core\": \"^0.83.0\",\n    \"@nivo/geo\": \"^0.83.0\",\n    \"@nivo/line\": \"^0.83.0\",\n    \"@nivo/pie\": \"^0.83.0\",\n    \"@testing-library/jest-dom\": \"^5.16.5\",\n    \"@testing-library/react\": \"^13.4.0\",\n    \"@testing-library/user-event\": \"^13.5.0\",\n    \"formik\": \"^2.4.2\",\n    \"i18next\": \"^23.0.0\",\n    \"nunjucks\": \"^3.2.4\",\n    \"prop-types\": \"^15.8.1\",\n    \"react\": \"^18.2.0\",\n    \"react-cookie\": \"^6.1.1\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-i18next\": \"^15.4.0\",\n    \"react-pro-sidebar\": \"^1.1.0-alpha.1\",\n    \"react-router-dom\": \"^6.14.1\",\n    \"react-scripts\": \"5.0.1\",\n    \"uuid\": \"^9.0.0\",\n    \"web-vitals\": \"^2.1.4\",\n    \"yup\": \"^1.2.0\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\",\n    \"format\": \"eslint --fix . && prettier . --write\"\n  },\n  \"eslintConfig\": {\n    \"extends\": [\n      \"react-app\",\n      \"react-app/jest\"\n    ]\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.0\",\n    \"@babel/eslint-parser\": \"^7.19.1\",\n    \"@babel/plugin-proposal-private-property-in-object\": \"^7.21.11\",\n    \"eslint\": \"^7.32.0\",\n    \"eslint-config-prettier\": \"^8.5.0\",\n    \"eslint-plugin-react\": \"^7.24.0\",\n    \"eslint-plugin-simple-import-sort\": \"^8.0.0\",\n    \"prettier\": \"2.8.0\"\n  }\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/public/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Web site created using create-react-app\"\n    />\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>Xinference</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "xinference/ui/web/ui/src/App.js",
    "content": "import { CssBaseline } from '@mui/material'\nimport Snackbar from '@mui/material/Snackbar'\nimport React, { useEffect, useState } from 'react'\nimport { useCookies } from 'react-cookie'\nimport { HashRouter } from 'react-router-dom'\n\nimport { Alert } from './components/alertComponent'\nimport { ApiContextProvider } from './components/apiContext'\nimport AuthAlertDialog from './components/authAlertDialog'\nimport { ThemeProvider } from './components/themeContext'\nimport { getEndpoint } from './components/utils'\nimport WraperRoutes from './router/index'\n\nfunction App() {\n  const [cookie, setCookie, removeCookie] = useCookies(['token'])\n  const [msg, setMsg] = useState('')\n\n  const endPoint = getEndpoint()\n\n  useEffect(() => {\n    // token possible value: no_auth / need_auth / <real bearer token>\n    fetch(endPoint + '/v1/cluster/auth', {\n      method: 'GET',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n    }).then((res) => {\n      if (!res.ok) {\n        res.json().then((errorData) => {\n          setMsg(\n            `Server error: ${res.status} - ${\n              errorData.detail || 'Unknown error'\n            }`\n          )\n        })\n      } else {\n        res.json().then((data) => {\n          if (!data.auth) {\n            setCookie('token', 'no_auth', { path: '/' })\n            sessionStorage.setItem('token', 'no_auth')\n          } else if (\n            data.auth &&\n            sessionStorage.getItem('token') === 'no_auth'\n          ) {\n            removeCookie('token', { path: '/' })\n            sessionStorage.removeItem('token')\n          }\n          sessionStorage.setItem('auth', String(data.auth)) // sessionStorage only can set string value\n        })\n      }\n    })\n  }, [cookie])\n\n  const handleClose = (event, reason) => {\n    if (reason === 'clickaway') {\n      return\n    }\n    setMsg('')\n  }\n\n  return (\n    <div className=\"app\">\n      <ThemeProvider>\n        <Snackbar\n          open={msg !== ''}\n          autoHideDuration={10000}\n          anchorOrigin={{ vertical: 'top', horizontal: 'center' }}\n          onClose={handleClose}\n        >\n          <Alert severity=\"error\" onClose={handleClose} sx={{ width: '100%' }}>\n            {msg}\n          </Alert>\n        </Snackbar>\n        <HashRouter>\n          <ApiContextProvider>\n            <CssBaseline />\n            <AuthAlertDialog />\n            <WraperRoutes />\n          </ApiContextProvider>\n        </HashRouter>\n      </ThemeProvider>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/MenuSide.js",
    "content": "import {\n  AddBoxOutlined,\n  ChevronRightOutlined,\n  DescriptionOutlined,\n  DnsOutlined,\n  GitHub,\n  Language,\n  OpenInNew,\n  Psychology,\n  RocketLaunchOutlined,\n  SmartToyOutlined,\n} from '@mui/icons-material'\nimport {\n  Box,\n  Drawer,\n  List,\n  ListItem,\n  ListItemButton,\n  ListItemIcon,\n  ListItemText,\n  Typography,\n  useTheme,\n} from '@mui/material'\nimport { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport icon from '../media/icon.webp'\nimport ThemeButton from './themeButton'\nimport TranslateButton from './translateButton'\nimport VersionLabel from './versionLabel'\n\nconst MenuSide = () => {\n  const theme = useTheme()\n  const navigate = useNavigate()\n  const [drawerWidth, setDrawerWidth] = useState(\n    `${Math.min(Math.max(window.innerWidth * 0.2, 287), 320)}px`\n  )\n  const { i18n, t } = useTranslation()\n\n  const navItems = [\n    {\n      text: 'launch_model',\n      label: t('menu.launchModel'),\n      icon: <RocketLaunchOutlined />,\n      action: 'navigate',\n      path: '/launch_model/llm',\n      session: {\n        modelType: '/launch_model/llm',\n        lastActiveUrl: 'launch_model',\n      },\n    },\n    {\n      text: 'running_models',\n      label: t('menu.runningModels'),\n      icon: <SmartToyOutlined />,\n      action: 'navigate',\n      path: '/running_models/LLM',\n      session: {\n        runningModelType: '/running_models/LLM',\n        lastActiveUrl: 'running_models',\n      },\n    },\n    {\n      text: 'register_model',\n      label: t('menu.registerModel'),\n      icon: <AddBoxOutlined />,\n      action: 'navigate',\n      path: '/register_model/llm',\n      session: {\n        registerModelType: '/register_model/llm',\n        lastActiveUrl: 'register_model',\n      },\n    },\n    {\n      text: 'cluster_information',\n      label: t('menu.clusterInfo'),\n      icon: <DnsOutlined />,\n      action: 'navigate',\n      path: '/cluster_info',\n    },\n    {\n      text: 'documentation',\n      label: t('menu.documentation'),\n      icon: <DescriptionOutlined />,\n      action: 'external',\n      url:\n        'https://inference.readthedocs.io/' +\n        (i18n.language === 'zh' ? 'zh-cn' : ''),\n    },\n    {\n      text: 'contact_us',\n      label: t('menu.contactUs'),\n      icon: <GitHub />,\n      action: 'external',\n      url: 'https://github.com/xorbitsai/inference',\n    },\n    {\n      text: 'website',\n      label: t('menu.website'),\n      icon: <Language />,\n      action: 'external',\n      url:\n        i18n.language === 'zh'\n          ? 'https://xinference.cn'\n          : 'https://xinference.io',\n    },\n    {\n      text: 'xagent',\n      label: t('menu.xagent'),\n      icon: (\n        <Psychology sx={{ fontSize: 26, marginLeft: -0.5, color: '#1e88e5' }} />\n      ),\n      action: 'external',\n      url: 'https://github.com/xorbitsai/xagent',\n    },\n  ]\n\n  useEffect(() => {\n    const screenWidth = window.innerWidth\n    const maxDrawerWidth = Math.min(Math.max(screenWidth * 0.2, 287), 320)\n    setDrawerWidth(`${maxDrawerWidth}px`)\n\n    // Update the drawer width on window resize\n    const handleResize = () => {\n      const newScreenWidth = window.innerWidth\n      const newMaxDrawerWidth = Math.min(\n        Math.max(newScreenWidth * 0.2, 287),\n        320\n      )\n      setDrawerWidth(`${newMaxDrawerWidth}px`)\n    }\n\n    window.addEventListener('resize', handleResize)\n    return () => {\n      window.removeEventListener('resize', handleResize)\n    }\n  }, [])\n\n  const handleNavClick = (item) => {\n    const { action, url, path, text, session } = item\n    if (action === 'external' && url) {\n      window.open(url, '_blank', 'noreferrer')\n      return\n    }\n\n    if (action === 'navigate') {\n      if (session) {\n        Object.entries(session).forEach(([key, value]) => {\n          sessionStorage.setItem(key, value)\n        })\n      }\n      navigate(path ?? `/${text}`)\n      return\n    }\n\n    // default behavior\n    navigate(`/${text}`)\n  }\n\n  return (\n    <Drawer\n      variant=\"permanent\"\n      sx={{\n        width: drawerWidth,\n        ...theme.mixins.toolbar,\n        flexShrink: 0,\n        [`& .MuiDrawer-paper`]: {\n          width: drawerWidth,\n          boxSizing: 'border-box',\n        },\n      }}\n      style={{ zIndex: 1 }}\n    >\n      {/* Title */}\n      <Box\n        display=\"flex\"\n        alignItems=\"center\"\n        gap=\"1rem\"\n        margin=\"2rem 0rem 2rem 2rem\"\n      >\n        <Box\n          component=\"img\"\n          alt=\"profile\"\n          src={icon}\n          width=\"60px\"\n          borderRadius=\"50%\"\n        />\n        <Box textAlign=\"left\">\n          <Typography fontWeight=\"bold\" fontSize=\"1.7rem\">\n            {'Xinference'}\n          </Typography>\n        </Box>\n      </Box>\n\n      <Box sx={{ flexGrow: 1 }}>\n        <List>\n          {navItems.map((item) => {\n            const { text, label, icon, action } = item\n            return (\n              <ListItem key={text}>\n                <ListItemButton\n                  sx={{ pl: '1.5rem' }}\n                  onClick={() => handleNavClick(item)}\n                >\n                  <ListItemIcon sx={{ minWidth: '2rem' }}>{icon}</ListItemIcon>\n                  <ListItemText primary={label} />\n                  {action === 'external' ? (\n                    <OpenInNew sx={{ fontSize: 'small' }} />\n                  ) : (\n                    <ChevronRightOutlined />\n                  )}\n                </ListItemButton>\n              </ListItem>\n            )\n          })}\n        </List>\n      </Box>\n\n      <Box display=\"flex\" alignItems=\"center\" marginX={'3rem'}>\n        <ThemeButton sx={{ m: '1rem' }} />\n        <TranslateButton />\n        <VersionLabel sx={{ ml: 'auto' }} />\n      </Box>\n    </Drawer>\n  )\n}\n\nexport default MenuSide\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/Title.js",
    "content": "import ExitToAppIcon from '@mui/icons-material/ExitToApp'\nimport { Box, Stack, Typography } from '@mui/material'\nimport Button from '@mui/material/Button'\nimport { useCookies } from 'react-cookie'\nimport { useNavigate } from 'react-router-dom'\n\nimport { isValidBearerToken } from './utils'\n\nconst Title = ({ title }) => {\n  const [cookie, , removeCookie] = useCookies(['token'])\n  const navigate = useNavigate()\n\n  const handleLogout = () => {\n    removeCookie('token', { path: '/' })\n    sessionStorage.removeItem('token')\n    sessionStorage.removeItem('auth')\n    sessionStorage.removeItem('modelType')\n    sessionStorage.removeItem('lastActiveUrl')\n    sessionStorage.removeItem('runningModelType')\n    sessionStorage.removeItem('registerModelType')\n    navigate('/login', { replace: true })\n  }\n\n  return (\n    <Box mb=\"30px\">\n      <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n        <Typography variant=\"h2\" fontWeight=\"bold\" sx={{ m: '0 0 5px 0' }}>\n          {title}\n        </Typography>\n        {(isValidBearerToken(cookie.token) ||\n          isValidBearerToken(sessionStorage.getItem('token'))) && (\n          <Button\n            variant=\"outlined\"\n            size=\"large\"\n            onClick={handleLogout}\n            startIcon={<ExitToAppIcon />}\n          >\n            LOG OUT\n          </Button>\n        )}\n      </Stack>\n    </Box>\n  )\n}\n\nexport default Title\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/alertComponent.js",
    "content": "import MuiAlert from '@mui/material/Alert'\nimport React from 'react'\n\nconst Alert = React.forwardRef(function Alert(props, ref) {\n  return <MuiAlert elevation={6} ref={ref} variant=\"filled\" {...props} />\n})\n\nexport { Alert }\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/apiContext.js",
    "content": "import React, { createContext, useState } from 'react'\n\nimport { getEndpoint } from './utils'\n\nexport const ApiContext = createContext()\n\nexport const ApiContextProvider = ({ children }) => {\n  const [isCallingApi, setIsCallingApi] = useState(false)\n  const [isUpdatingModel, setIsUpdatingModel] = useState(false)\n  const [errorMsg, setErrorMsg] = useState('')\n  const [successMsg, setSuccessMsg] = useState('')\n  const endPoint = getEndpoint()\n\n  return (\n    <ApiContext.Provider\n      value={{\n        isCallingApi,\n        setIsCallingApi,\n        isUpdatingModel,\n        setIsUpdatingModel,\n        endPoint,\n        errorMsg,\n        setErrorMsg,\n        successMsg,\n        setSuccessMsg,\n      }}\n    >\n      {children}\n    </ApiContext.Provider>\n  )\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/authAlertDialog.js",
    "content": "import {\n  Button,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogContentText,\n  DialogTitle,\n} from '@mui/material'\nimport * as React from 'react'\nimport { useEffect, useState } from 'react'\nimport { useCookies } from 'react-cookie'\nimport { useNavigate } from 'react-router-dom'\n\nexport default function AuthAlertDialog() {\n  const navigate = useNavigate()\n  const [authStatus, setAuthStatus] = useState('')\n  const [, , removeCookie] = useCookies(['token'])\n\n  const handleAuthStatus = () => {\n    const status = localStorage.getItem('authStatus')\n    if (status === '401') {\n      removeCookie('token', { path: '/' })\n      localStorage.removeItem('authStatus')\n      sessionStorage.removeItem('token')\n      navigate('/login', { replace: true })\n      return\n    }\n    if (status) {\n      setAuthStatus(status)\n    } else {\n      setAuthStatus('')\n    }\n  }\n\n  useEffect(() => {\n    localStorage.removeItem('authStatus')\n    window.addEventListener('auth-status', handleAuthStatus)\n\n    return () => {\n      window.removeEventListener('auth-status', handleAuthStatus)\n    }\n  }, [])\n\n  const handleClose = () => {\n    // trigger first\n    const code = localStorage.getItem('authStatus')\n    localStorage.removeItem('authStatus')\n    setAuthStatus('')\n    if (code === '401') {\n      removeCookie('token', { path: '/' })\n      sessionStorage.removeItem('token')\n      navigate('/login', { replace: true })\n    }\n  }\n\n  const handleDialogClose = (event, reason) => {\n    if (reason && reason === 'backdropClick') {\n      return\n    }\n    localStorage.removeItem('authStatus')\n    setAuthStatus('')\n  }\n\n  return (\n    <React.Fragment>\n      <Dialog\n        fullWidth\n        maxWidth=\"md\"\n        open={authStatus === '401' || authStatus === '403'}\n        onClose={handleDialogClose}\n        aria-labelledby=\"alert-dialog-title\"\n        aria-describedby=\"alert-dialog-description\"\n      >\n        {authStatus === '403' && (\n          <DialogTitle id=\"alert-dialog-title\">\n            {'Permission Error'}\n          </DialogTitle>\n        )}\n        {authStatus === '401' && (\n          <DialogTitle id=\"alert-dialog-title\">\n            {'Authentication Error'}\n          </DialogTitle>\n        )}\n        <DialogContent>\n          {authStatus === '403' && (\n            <DialogContentText id=\"alert-dialog-description\">\n              {'You do not have permissions to do this!'}\n            </DialogContentText>\n          )}\n          {authStatus === '401' && (\n            <DialogContentText id=\"alert-dialog-description\">\n              {'Invalid credentials! Please login.'}\n            </DialogContentText>\n          )}\n        </DialogContent>\n        <DialogActions>\n          <Button onClick={handleClose}>CONFIRMED</Button>\n        </DialogActions>\n      </Dialog>\n    </React.Fragment>\n  )\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/copyComponent.js",
    "content": "import { Clear, ContentCopy, Done } from '@mui/icons-material'\nimport { IconButton, Tooltip } from '@mui/material'\nimport React, { useState } from 'react'\n\nimport { copyToClipboard } from './utils'\n\nconst CopyComponent = ({ tip, text }) => {\n  const [copyStatus, setCopyStatus] = useState('pending')\n\n  const showTooltipTemporarily = (status) => {\n    setCopyStatus(status)\n    setTimeout(() => setCopyStatus('pending'), 1500)\n  }\n\n  const handleCopy = async (event) => {\n    event.stopPropagation()\n    const textToCopy = String(text ?? '')\n    const success = await copyToClipboard(textToCopy)\n    showTooltipTemporarily(success ? 'success' : 'failed')\n  }\n\n  return (\n    <>\n      {copyStatus === 'pending' ? (\n        <Tooltip title={tip} placement=\"top\">\n          <IconButton aria-label=\"copy\" onClick={handleCopy}>\n            <ContentCopy fontSize=\"small\" />\n          </IconButton>\n        </Tooltip>\n      ) : copyStatus === 'success' ? (\n        <IconButton aria-label=\"copy\">\n          <Done fontSize=\"small\" color=\"success\" />\n        </IconButton>\n      ) : (\n        <IconButton aria-label=\"copy\">\n          <Clear fontSize=\"small\" color=\"error\" />\n        </IconButton>\n      )}\n    </>\n  )\n}\n\nexport default CopyComponent\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/deleteDialog.js",
    "content": "import { WarningAmber } from '@mui/icons-material'\nimport {\n  Button,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogContentText,\n  DialogTitle,\n} from '@mui/material'\nimport React from 'react'\nimport { useTranslation } from 'react-i18next'\n\nconst DeleteDialog = ({ text, isDelete, onHandleIsDelete, onHandleDelete }) => {\n  const { t } = useTranslation()\n  return (\n    <Dialog\n      open={isDelete}\n      aria-labelledby=\"alert-dialog-title\"\n      aria-describedby=\"alert-dialog-description\"\n    >\n      <DialogTitle id=\"alert-dialog-title\">\n        {t('components.warning')}\n      </DialogTitle>\n      <DialogContent>\n        <DialogContentText\n          className=\"deleteDialog\"\n          id=\"alert-dialog-description\"\n        >\n          <WarningAmber className=\"warningIcon\" />\n          <p>{text}</p>\n        </DialogContentText>\n      </DialogContent>\n      <DialogActions>\n        <Button\n          onClick={() => {\n            onHandleIsDelete()\n          }}\n        >\n          {t('components.cancel')}\n        </Button>\n        <Button onClick={onHandleDelete} autoFocus>\n          {t('components.ok')}\n        </Button>\n      </DialogActions>\n    </Dialog>\n  )\n}\n\nexport default DeleteDialog\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/errorMessageSnackBar.js",
    "content": "import Snackbar from '@mui/material/Snackbar'\nimport React, { useContext } from 'react'\n\nimport { Alert } from './alertComponent'\nimport { ApiContext } from './apiContext'\n\nconst ErrorMessageSnackBar = () => {\n  const { errorMsg, setErrorMsg } = useContext(ApiContext)\n\n  const handleClose = (event, reason) => {\n    if (reason === 'clickaway') {\n      return\n    }\n    setErrorMsg('')\n  }\n\n  return (\n    <Snackbar\n      open={errorMsg !== ''}\n      autoHideDuration={10000}\n      anchorOrigin={{ vertical: 'top', horizontal: 'center' }}\n      onClose={handleClose}\n    >\n      <Alert severity=\"error\" onClose={handleClose} sx={{ width: '100%' }}>\n        {errorMsg}\n      </Alert>\n    </Snackbar>\n  )\n}\n\nexport default ErrorMessageSnackBar\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/fetchWrapper.js",
    "content": "import { Cookies } from 'react-cookie'\n\nconst cookies = new Cookies()\n\nconst getBaseUrl = () => {\n  let base_URL = ''\n  if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {\n    base_URL = 'http://127.0.0.1:9997'\n  } else {\n    const fullUrl = window.location.href\n    base_URL = fullUrl.split('/ui')[0]\n  }\n  return base_URL\n}\n\nconst apiBase = getBaseUrl()\n\nconst fetchWrapper = {\n  get: async (endpoint, config = {}) => {\n    const url = `${apiBase}${endpoint}`\n    const headers = {\n      'Content-Type': 'application/json',\n      ...config.headers,\n    }\n    if (\n      cookies.get('token') !== 'no_auth' &&\n      sessionStorage.getItem('token') !== 'no_auth'\n    ) {\n      headers.Authorization = 'Bearer ' + sessionStorage.getItem('token')\n    }\n    const response = await fetch(url, {\n      method: 'GET',\n      ...config,\n      headers,\n    })\n\n    return fetchWrapper.handleResponse(response)\n  },\n\n  post: async (endpoint, body, config = {}) => {\n    const url = `${apiBase}${endpoint}`\n    const headers = {\n      'Content-Type': 'application/json',\n      ...config.headers,\n    }\n    if (\n      cookies.get('token') !== 'no_auth' &&\n      sessionStorage.getItem('token') !== 'no_auth'\n    ) {\n      headers.Authorization = 'Bearer ' + sessionStorage.getItem('token')\n    }\n    const response = await fetch(url, {\n      method: 'POST',\n      body: JSON.stringify(body),\n      ...config,\n      headers,\n    })\n\n    return fetchWrapper.handleResponse(response)\n  },\n\n  put: async (endpoint, body, config = {}) => {\n    const url = `${apiBase}${endpoint}`\n    const headers = {\n      'Content-Type': 'application/json',\n      ...config.headers,\n    }\n    if (\n      cookies.get('token') !== 'no_auth' &&\n      sessionStorage.getItem('token') !== 'no_auth'\n    ) {\n      headers.Authorization = 'Bearer ' + sessionStorage.getItem('token')\n    }\n    const response = await fetch(url, {\n      method: 'PUT',\n      body: JSON.stringify(body),\n      ...config,\n      headers,\n    })\n\n    return fetchWrapper.handleResponse(response)\n  },\n\n  delete: async (endpoint, config = {}) => {\n    const url = `${apiBase}${endpoint}`\n    const headers = {\n      'Content-Type': 'application/json',\n      ...config.headers,\n    }\n    if (\n      cookies.get('token') !== 'no_auth' &&\n      sessionStorage.getItem('token') !== 'no_auth'\n    ) {\n      headers.Authorization = 'Bearer ' + sessionStorage.getItem('token')\n    }\n    const response = await fetch(url, {\n      method: 'DELETE',\n      ...config,\n      headers,\n    })\n\n    return fetchWrapper.handleResponse(response)\n  },\n\n  handleResponse: async (response) => {\n    if (\n      response.status == 401 &&\n      localStorage.getItem('authStatus') !== '401'\n    ) {\n      localStorage.setItem('authStatus', '401')\n      window.dispatchEvent(new Event('auth-status'))\n    } else if (\n      response.status == 403 &&\n      localStorage.getItem('authStatus') !== '403'\n    ) {\n      localStorage.setItem('authStatus', '403')\n      window.dispatchEvent(new Event('auth-status'))\n    }\n\n    if (!response.ok) {\n      const errorData = await response.json()\n      const error = new Error(\n        `Server error: ${response.status} - ${\n          errorData.detail || 'Unknown error'\n        }`\n      )\n      error.response = response\n      throw error\n    }\n    const data = await response.json()\n    return data\n  },\n}\n\nexport default fetchWrapper\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/fetcher.js",
    "content": "import { Cookies } from 'react-cookie'\n\nconst cookies = new Cookies()\n\nconst updateOptions = (url, options) => {\n  const update = { ...options }\n  if (\n    cookies.get('token') !== 'no_auth' &&\n    sessionStorage.getItem('token') !== 'no_auth'\n  ) {\n    update.headers = {\n      ...update.headers,\n      Authorization: 'Bearer ' + sessionStorage.getItem('token'),\n    }\n  }\n  return update\n}\n\nexport default function fetcher(url, options) {\n  return fetch(url, updateOptions(url, options)).then((res) => {\n    // For the situation that server has already been restarted, the current token may become invalid,\n    // which leads to UI hangs.\n    if (res.status == 401 && localStorage.getItem('authStatus') !== '401') {\n      localStorage.setItem('authStatus', '401')\n      window.dispatchEvent(new Event('auth-status'))\n    } else if (\n      res.status == 403 &&\n      localStorage.getItem('authStatus') !== '403'\n    ) {\n      localStorage.setItem('authStatus', '403')\n      window.dispatchEvent(new Event('auth-status'))\n    } else {\n      return res\n    }\n  })\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/hotkeyFocusTextField.js",
    "content": "import { TextField } from '@mui/material'\nimport InputAdornment from '@mui/material/InputAdornment'\nimport Typography from '@mui/material/Typography'\nimport React, { useEffect, useRef, useState } from 'react'\n\nconst HotkeyFocusTextField = ({\n  label,\n  value,\n  onChange,\n  hotkey = 'Enter',\n  t,\n  ...props\n}) => {\n  const [isFocused, setIsFocused] = useState(false)\n  const textFieldRef = useRef(null)\n  const handleKeyDown = (event) => {\n    if (\n      event.key === hotkey &&\n      document.activeElement !== textFieldRef.current\n    ) {\n      event.preventDefault()\n      setIsFocused(true)\n      textFieldRef.current?.focus()\n    }\n  }\n\n  useEffect(() => {\n    document.addEventListener('keydown', handleKeyDown)\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown)\n    }\n  }, [hotkey])\n\n  return (\n    <TextField\n      {...props}\n      label={label}\n      value={value}\n      onChange={onChange}\n      inputRef={textFieldRef}\n      autoFocus={isFocused}\n      onBlur={() => setIsFocused(false)}\n      onFocus={() => setIsFocused(true)}\n      InputProps={{\n        endAdornment:\n          !isFocused && !value ? (\n            <InputAdornment position=\"end\">\n              <Typography color=\"textSecondary\" style={{ fontSize: 'inherit' }}>\n                {t('launchModel.searchInstruction', { hotkey })}\n              </Typography>\n            </InputAdornment>\n          ) : null,\n      }}\n    />\n  )\n}\n\nexport default HotkeyFocusTextField\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/successMessageSnackBar.js",
    "content": "import Snackbar from '@mui/material/Snackbar'\nimport React, { useContext } from 'react'\n\nimport { Alert } from './alertComponent'\nimport { ApiContext } from './apiContext'\n\nconst SuccessMessageSnackBar = () => {\n  const { successMsg, setSuccessMsg } = useContext(ApiContext)\n\n  const handleClose = (event, reason) => {\n    if (reason === 'clickaway') {\n      return\n    }\n    setSuccessMsg('')\n  }\n\n  return (\n    <Snackbar\n      open={successMsg !== ''}\n      autoHideDuration={3000}\n      anchorOrigin={{ vertical: 'top', horizontal: 'center' }}\n      onClose={handleClose}\n    >\n      <Alert severity=\"success\" onClose={handleClose} sx={{ width: '100%' }}>\n        {successMsg}\n      </Alert>\n    </Snackbar>\n  )\n}\n\nexport default SuccessMessageSnackBar\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/tableTitle.js",
    "content": "import Typography from '@mui/material/Typography'\nimport PropTypes from 'prop-types'\nimport React from 'react'\n\nexport default function TableTitle(props) {\n  return (\n    <Typography\n      component={props.component === undefined ? 'h2' : props.component}\n      variant=\"h6\"\n      style={{ fontWeight: 'bolder', color: '#781FF5' }}\n      gutterBottom\n    >\n      {props.children}\n    </Typography>\n  )\n}\n\nTableTitle.propTypes = {\n  component: PropTypes.elementType,\n  children: PropTypes.node,\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/themeButton.js",
    "content": "import DarkModeIcon from '@mui/icons-material/DarkMode'\nimport LightModeIcon from '@mui/icons-material/LightMode'\nimport { Box, IconButton } from '@mui/material'\nimport React from 'react'\n\nimport { useThemeContext } from './themeContext'\n\nconst ThemeButton = ({ sx }) => {\n  const { themeMode, toggleTheme } = useThemeContext()\n\n  return (\n    <Box sx={sx}>\n      <IconButton size=\"large\" onClick={toggleTheme}>\n        {themeMode === 'light' ? <LightModeIcon /> : <DarkModeIcon />}\n      </IconButton>\n    </Box>\n  )\n}\n\nexport default ThemeButton\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/themeContext.js",
    "content": "import { ThemeProvider as MuiThemeProvider } from '@mui/material'\nimport { createContext, useContext, useState } from 'react'\n\nimport { useMode } from '../theme'\n\nconst ThemeContext = createContext()\n\nexport function useThemeContext() {\n  return useContext(ThemeContext)\n}\n\nexport const ThemeProvider = ({ children }) => {\n  const themeKey = 'theme'\n  const systemPreference = window.matchMedia('(prefers-color-scheme: dark)')\n    .matches\n    ? 'dark'\n    : 'light'\n  const initialMode = localStorage.getItem(themeKey) || systemPreference\n\n  const [themeMode, setThemeMode] = useState(initialMode)\n  const theme = useMode(themeMode)[0]\n\n  const switchTheme = () => {\n    const nextTheme = themeMode === 'light' ? 'dark' : 'light'\n    setThemeMode(nextTheme)\n    localStorage.setItem(themeKey, nextTheme)\n  }\n\n  return (\n    <MuiThemeProvider theme={theme}>\n      <ThemeContext.Provider value={{ themeMode, toggleTheme: switchTheme }}>\n        {children}\n      </ThemeContext.Provider>\n    </MuiThemeProvider>\n  )\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/titleTypography.js",
    "content": "import Typography from '@mui/material/Typography'\nimport React from 'react'\n\nconst h2Style = {\n  margin: '10px 10px',\n  fontSize: '20px',\n  fontWeight: 'bold',\n}\n\nexport default function TitleTypography({ value }) {\n  return (\n    <Typography\n      variant=\"h2\"\n      gutterBottom\n      noWrap\n      sx={{ ...h2Style }}\n      title={value}\n    >\n      {value}\n    </Typography>\n  )\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/translateButton.js",
    "content": "import Translate from '@mui/icons-material/Translate'\nimport {\n  Box,\n  ClickAwayListener,\n  IconButton,\n  List,\n  ListItem,\n  ListItemButton,\n  ListItemText,\n  Tooltip,\n} from '@mui/material'\nimport React from 'react'\nimport { useTranslation } from 'react-i18next'\n\nconst TranslateButton = ({ sx }) => {\n  const [open, setOpen] = React.useState(false)\n  const { i18n } = useTranslation()\n  const languages = React.useMemo(\n    () => [\n      { language: 'English', code: 'en', flag: '🇺🇸' },\n      { language: '中文', code: 'zh', flag: '🇨🇳' },\n      { language: '日本語', code: 'ja', flag: '🇯🇵' },\n      { language: '한국어', code: 'ko', flag: '🇰🇷' },\n    ],\n    []\n  )\n\n  const normalizeLang = (lng) =>\n    String(lng || '')\n      .toLowerCase()\n      .split('-')[0]\n  const currentLang = normalizeLang(i18n.language)\n\n  const changeLanguage = (lng) => {\n    if (normalizeLang(i18n.language) === lng) {\n      handleTooltipClose()\n      return\n    }\n    i18n.changeLanguage(lng)\n    handleTooltipClose()\n  }\n\n  const handleTooltipClose = () => {\n    setOpen(false)\n  }\n\n  const handleKeyDown = (e) => {\n    if (e.key === 'Escape') {\n      handleTooltipClose()\n    }\n  }\n\n  return (\n    <ClickAwayListener onClickAway={handleTooltipClose}>\n      <Tooltip\n        onClose={handleTooltipClose}\n        open={open}\n        disableFocusListener\n        disableHoverListener\n        disableTouchListener\n        placement=\"top\"\n        slotProps={{\n          popper: {\n            disablePortal: true,\n          },\n        }}\n        title={\n          <List sx={{ pt: 0 }}>\n            {languages.map((item, index) => {\n              return (\n                <ListItem\n                  key={index}\n                  disablePadding\n                  onClick={() => changeLanguage(item.code)}\n                >\n                  <ListItemButton\n                    selected={currentLang === item.code}\n                    sx={{\n                      '&': {\n                        paddingY: 0,\n                        marginY: '2px',\n                      },\n                      '&:hover, &:focus': {\n                        bgcolor: '#bbb',\n                        color: '#333',\n                      },\n                    }}\n                  >\n                    <ListItemText primary={item.flag + ' ' + item.language} />\n                  </ListItemButton>\n                </ListItem>\n              )\n            })}\n          </List>\n        }\n      >\n        <Box sx={sx} onKeyDown={handleKeyDown}>\n          <IconButton\n            size=\"large\"\n            aria-label=\"Change language\"\n            onClick={() => setOpen((prev) => !prev)}\n          >\n            <Translate />\n          </IconButton>\n        </Box>\n      </Tooltip>\n    </ClickAwayListener>\n  )\n}\n\nexport default TranslateButton\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/utils.js",
    "content": "export const getEndpoint = () => {\n  let endPoint = ''\n  if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {\n    endPoint = 'http://127.0.0.1:9997'\n  } else {\n    const fullUrl = window.location.href\n    endPoint = fullUrl.split('/ui')[0]\n  }\n  return endPoint\n}\n\nexport const isValidBearerToken = (token) => {\n  return (\n    token !== '' && token !== undefined && token !== null && token.length > 10\n  )\n}\n\nexport const toReadableSize = (size) => {\n  const res_size = size / 1024.0 ** 2\n  return res_size.toFixed(2) + 'MiB'\n}\n\nexport async function copyToClipboard(text) {\n  if (navigator.clipboard && window.isSecureContext) {\n    try {\n      await navigator.clipboard.writeText(text)\n      return true\n    } catch {\n      return false\n    }\n  }\n\n  try {\n    const container =\n      document.querySelector('[role=\"dialog\"]') ||\n      document.querySelector('.drawerCard') ||\n      document.body\n\n    const textArea = document.createElement('textarea')\n    textArea.value = text\n    textArea.style.position = 'absolute'\n    textArea.style.left = '-9999px'\n    container.appendChild(textArea)\n\n    textArea.select()\n    const success = document.execCommand('copy')\n\n    container.removeChild(textArea)\n    return success\n  } catch {\n    return false\n  }\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/components/versionLabel.js",
    "content": "import { Box, Typography } from '@mui/material'\nimport React, { useEffect, useState } from 'react'\n\nimport fetchWrapper from '../components/fetchWrapper'\n\nconst VersionLabel = ({ sx }) => {\n  const [version, setVersion] = useState('')\n\n  useEffect(() => {\n    fetchWrapper\n      .get('/v1/cluster/version')\n      .then((data) => {\n        setVersion('v' + data['version'])\n      })\n      .catch((error) => {\n        console.error('Error:', error)\n      })\n  }, [])\n\n  return (\n    <Box sx={sx}>\n      <Typography variant=\"h5\">{version}</Typography>\n    </Box>\n  )\n}\n\nexport default VersionLabel\n"
  },
  {
    "path": "xinference/ui/web/ui/src/i18n.js",
    "content": "import i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\n\nimport en from './locales/en.json'\nimport ja from './locales/ja.json'\nimport ko from './locales/ko.json'\nimport zh from './locales/zh.json'\n\nconst supportedLangs = ['en', 'zh', 'ja', 'ko']\nconst detectBrowserLanguage = () => {\n  try {\n    const candidate =\n      (typeof navigator !== 'undefined' &&\n        (navigator.languages?.[0] || navigator.language)) ||\n      ''\n    const normalized = String(candidate).toLowerCase()\n    const prefix = normalized.split('-')[0]\n    return supportedLangs.includes(prefix) ? prefix : 'en'\n  } catch {\n    return 'en'\n  }\n}\n\ni18n.use(initReactI18next).init({\n  fallbackLng: 'en',\n  lng: localStorage.getItem('language') || detectBrowserLanguage(),\n  debug: true,\n  interpolation: {\n    escapeValue: false,\n  },\n  resources: {\n    en: { translation: en },\n    zh: { translation: zh },\n    ja: { translation: ja },\n    ko: { translation: ko },\n  },\n})\n\ni18n.on('languageChanged', (lng) => {\n  localStorage.setItem('language', lng)\n})\n\nexport default i18n\n"
  },
  {
    "path": "xinference/ui/web/ui/src/index.css",
    "content": "@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap');\n\nhtml,\nbody,\n#root,\n.app {\n  height: 100%;\n  width: 100%;\n  font-family: 'Inter', sans-serif;\n}\n\n::-webkit-scrollbar {\n  width: 8px;\n}\n\n/* Track */\n::-webkit-scrollbar-track {\n  background: #00000000;\n}\n\n/* Handle */\n::-webkit-scrollbar-thumb {\n  background: #7c767640;\n  border-radius: 120px;\n}\n\n/* Handle on Hover */\n::-webkit-scrollbar-track:hover {\n  background: #b3b4ba10;\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/index.js",
    "content": "import './i18n'\n\nimport React from 'react'\nimport { CookiesProvider } from 'react-cookie'\nimport ReactDOM from 'react-dom/client'\n\nimport App from './App'\n\nconst root = ReactDOM.createRoot(document.getElementById('root'))\nroot.render(\n  <React.StrictMode>\n    <CookiesProvider>\n      <App />\n    </CookiesProvider>\n  </React.StrictMode>\n)\n"
  },
  {
    "path": "xinference/ui/web/ui/src/locales/en.json",
    "content": "{\n  \"menu\": {\n    \"launchModel\": \"Launch Model\",\n    \"runningModels\": \"Running Models\",\n    \"registerModel\": \"Register Model\",\n    \"clusterInfo\": \"Cluster Information\",\n    \"xagent\": \"Build AI Agents with Xagent\",\n    \"contactUs\": \"Contact Us\",\n    \"documentation\": \"Documentation\",\n    \"website\": \"Official Website\"\n  },\n\n  \"model\": {\n    \"languageModels\": \"Language Models\",\n    \"embeddingModels\": \"Embedding Models\",\n    \"rerankModels\": \"Rerank Models\",\n    \"imageModels\": \"Image Models\",\n    \"audioModels\": \"Audio Models\",\n    \"videoModels\": \"Video Models\",\n    \"customModels\": \"Custom Models\",\n    \"flexibleModels\": \"Flexible Models\"\n  },\n\n  \"launchModel\": {\n    \"modelAbility\": \"Model Ability\",\n    \"generate\": \"Text Generation\",\n    \"chat\": \"Conversation\",\n    \"vision\": \"Vision\",\n    \"reasoning\": \"Reasoning\",\n    \"tools\": \"Tool Use\",\n    \"audio\": \"Audio Processing\",\n    \"omni\": \"Multimodal (Omni)\",\n    \"hybrid\": \"Hybrid Capability\",\n    \"text2image\": \"Text to Image\",\n    \"image2image\": \"Image to Image\",\n    \"inpainting\": \"Image Inpainting\",\n    \"ocr\": \"Optical Character Recognition (OCR)\",\n    \"audio2text\": \"Audio to Text\",\n    \"text2audio\": \"Text to Audio\",\n    \"text2audio_zero_shot\": \"Text to Audio (Zero-Shot)\",\n    \"text2audio_voice_cloning\": \"Text to Audio (Voice Cloning)\",\n    \"text2video\": \"Text to Video\",\n    \"image2video\": \"Image to Video\",\n    \"firstlastframe2video\": \"First & Last Frame to Video\",\n    \"status\": \"Status\",\n    \"cached\": \"Cached\",\n    \"manageCachedModels\": \"Manage Cached Models\",\n    \"manageVirtualEnvironments\": \"Manage Virtual Environments\",\n    \"favorite\": \"Favorite\",\n    \"unfavorite\": \"Unfavorite\",\n    \"search\": \"Search for model name and description\",\n    \"searchModelType\": \"Search for {{modelType}} model name\",\n    \"searchInstruction\": \"Type {{hotkey}} to search\",\n    \"clickToLaunchModel\": \"Click with mouse to launch the model\",\n    \"dimensions\": \"dimensions\",\n    \"maxTokens\": \"max tokens\",\n    \"edit\": \"Edit\",\n    \"delete\": \"Delete\",\n    \"contextLength\": \"context length\",\n    \"chatModel\": \"chat model\",\n    \"generateModel\": \"generate model\",\n    \"otherModel\": \"other model\",\n    \"confirmDeleteCustomModel\": \"Are you sure to delete this custom model? This behavior is irreversible.\",\n    \"modelName\": \"Model Name\",\n    \"envPath\": \"Environment Path\",\n    \"realPath\": \"Real Path\",\n    \"copyEnvPath\": \"Copy environment path\",\n    \"viewPackages\": \"View Packages\",\n    \"installedPackages\": \"Installed Packages\",\n    \"packageName\": \"Package Name\",\n    \"version\": \"Version\",\n    \"location\": \"Location\",\n    \"packagesCount\": \"Packages Count\",\n    \"size\": \"Size\",\n    \"pythonVersion\": \"Python Version\",\n    \"createdAt\": \"Created At\",\n    \"noVirtualEnvironmentsForNow\": \"No virtual environments for now!\",\n    \"noPackagesInstalled\": \"No packages installed\",\n    \"lastConfig\": \"Last Config\",\n    \"commandLineParsing\": \"Command Line Argument Parsing\",\n    \"copyToCommandLine\": \"Copy as Command Line Command\",\n    \"modelEngine\": \"Model Engine\",\n    \"modelFormat\": \"Model Format\",\n    \"modelSize\": \"Model Size\",\n    \"quantization\": \"Quantization\",\n    \"multimodelProjector\": \"Multimodel Projector\",\n    \"nGPU\": \"GPU Count per Replica\",\n    \"nGPUPerWorker\": \"GPU Count per Worker\",\n    \"nGpuLayers\": \"N GPU Layers\",\n    \"replica\": \"Replica\",\n    \"optionalConfigurations\": \"Optional Configurations\",\n    \"modelUID.optional\": \"(Optional) Model UID, model name by default\",\n    \"requestLimits.optional\": \"(Optional) Request Limits, the number of request limits for this model, default is None\",\n    \"workerIp.optional\": \"(Optional) Worker Ip, specify the worker ip where the model is located in a distributed scenario,multiple IPs can be specified by separating them with commas.\",\n    \"workerIp\": \"Worker Ip, specify the worker ip where the model is located in a distributed scenario\",\n    \"workerCount.optional\": \"(Optional) Worker Count\",\n    \"GPUIdx.optional\": \"(Optional) GPU Idx, Specify the GPU index where the model is located\",\n    \"GPUIdx\": \"GPU Idx, Specify the GPU index where the model is located\",\n    \"downloadHub.optional\": \"(Optional) Download_hub\",\n    \"modelPath.optional\": \"(Optional) Model Path, For PyTorch, provide the model directory. For GGML/GGUF, provide the model file path.\",\n    \"GGUFQuantization.optional\": \"(Optional) GGUF quantization format, quantizing the Transformer part.\",\n    \"GGUFModelPath.optional\": \"(Optional) GGUF model path, should be a file ending with .gguf.\",\n    \"lightningVersions.optional\": \"(Optional) Lightning Versions\",\n    \"lightningModelPath.optional\": \"(Optional) Lightning Model Path\",\n    \"enableThinking\": \"Enable Thinking\",\n    \"parsingReasoningContent\": \"Parsing Reasoning Content\",\n    \"CPUOffload\": \"CPU Offload\",\n    \"CPUOffload.tip\": \"Unload the model to the CPU. Recommend to enable this when resources are limited or when using the GGUF option.\",\n    \"loraConfig\": \"Lora Config\",\n    \"loraModelConfig\": \"Lora Model Config\",\n    \"virtualEnvConfig\": \"Virtual Environments Config\",\n    \"modelVirtualEnv\": \"Model Virtual Environments\",\n    \"virtualEnvPackage\": \"Virtual Environment Packages\",\n    \"envVariable\": \"Environment Variables\",\n    \"envVariableConfig\": \"Environment Variable Config\",\n    \"additionalQuantizationParametersForInferenceEngine\": \"Additional quantization parameters passed to the inference engine\",\n    \"additionalParametersForInferenceEngine\": \"Additional parameters passed to the inference engine\",\n    \"enterIntegerGreaterThanZero\": \"Please enter an integer greater than 0.\",\n    \"enterCommaSeparatedNumbers\": \"Please enter numeric data separated by commas, for example: 0,1,2\",\n    \"device\": \"Device\",\n    \"loraLoadKwargsForImageModel\": \"Lora Load Kwargs for Image Model\",\n    \"loraFuseKwargsForImageModel\": \"Lora Fuse Kwargs for Image Model\",\n    \"launch\": \"Launch\",\n    \"goBack\": \"Go Back\",\n    \"copyJson\": \"Copy Json\",\n    \"cancel\": \"Cancel\",\n    \"confirm\": \"Confirm\",\n    \"placeholderTip\": \"Please enter\",\n    \"fillCompleteParametersBeforeAdding\": \"Please fill in the complete parameters before adding!\",\n    \"model_format\": \"model_format\",\n    \"model_size_in_billions\": \"model_size_in_billions\",\n    \"quantizations\": \"quantizations\",\n    \"real_path\": \"real_path\",\n    \"path\": \"path\",\n    \"ipAddress\": \"IP Address\",\n    \"operation\": \"operation\",\n    \"copyRealPath\": \"Copy real_path\",\n    \"copyPath\": \"Copy path\",\n    \"noCacheForNow\": \"No cache for now!\",\n    \"confirmDeleteCacheFiles\": \"Confirm deletion of cache files? This action is irreversible.\",\n    \"confirmDeleteVirtualEnv\": \"Confirm deletion of virtual environment? This action is irreversible.\",\n    \"commandLineTip\": \"Please confirm whether the model names are consistent.\",\n    \"featured\": \"featured\",\n    \"all\": \"all\",\n    \"cancelledSuccessfully\": \"Cancelled Successfully!\",\n    \"mustBeUnique\": \"{{key}} must be unique\",\n    \"update\": \"Update\",\n    \"launchProgress\": \"Launch Progress\",\n    \"initializing\": \"Initializing...\",\n    \"moreDetails\": \"More Details\"\n  },\n  \"modelReplicaDetails\": {\n    \"title\": \"Model Replica Details\",\n    \"modelUid\": \"Model UID\",\n    \"replicaId\": \"Replica ID\",\n    \"workerAddress\": \"Worker Address\",\n    \"status\": \"Status\",\n    \"createdTime\": \"Created Time\",\n    \"noReplicaInfo\": \"No replica information available\",\n    \"errors\": \"Errors\",\n    \"replica\": \"Replica\",\n    \"close\": \"Close\"\n  },\n\n  \"runningModels\": {\n    \"name\": \"Name\",\n    \"address\": \"Address\",\n    \"gpuIndexes\": \"GPU Indexes\",\n    \"size\": \"Size\",\n    \"quantization\": \"Quantization\",\n    \"replica\": \"Replica\",\n    \"actions\": \"Actions\",\n    \"noRunningModels\": \"No Running Models\",\n    \"noRunningModelsMatches\": \"No Running Models Matches\",\n    \"copy\": \"Copy\",\n    \"copied\": \"Copied!\",\n    \"copyFailed\": \"Copy failed\",\n    \"viewDetails\": \"View Details\"\n  },\n\n  \"registerModel\": {\n    \"modelName\": \"Model Name\",\n    \"modelDescription\": \"Model Description (Optional)\",\n    \"contextLength\": \"Context Length\",\n    \"dimensions\": \"Dimensions\",\n    \"maxTokens\": \"Max Tokens\",\n    \"modelPath\": \"Model Path\",\n    \"modelLanguages\": \"Model Languages\",\n    \"languages\": \"Languages\",\n    \"multilingual\": \"Multilingual\",\n    \"modelAbilities\": \"Model Abilities\",\n    \"modelFamily\": \"Model Family\",\n    \"chatTemplate\": \"Chat Template\",\n    \"test\": \"test\",\n    \"testResult\": \"test result\",\n    \"noTestResults\": \"No test results...\",\n    \"stopTokenIds\": \"Stop Token Ids\",\n    \"stop\": \"Stop\",\n    \"reasoningStartTag\": \"Reasoning Start Tag\",\n    \"reasoningEndTag\": \"Reasoning End Tag\",\n    \"toolParser\": \"Tool Parser\",\n    \"launcher\": \"Launcher\",\n    \"launcherArguments\": \"Launcher Arguments (Optional)\",\n    \"edit\": \"Edit\",\n    \"cancel\": \"Cancel\",\n    \"registerModel\": \"Register Model\",\n    \"messagesExample\": \"Messages Example\",\n    \"JSONFormat\": \"JSON Format\",\n    \"modelSpecs\": \"Model Specs\",\n    \"modelSizeBillions\": \"Model Size in Billions\",\n    \"quantization\": \"Quantization\",\n    \"quantizationOptional\": \"Quantization (Optional)\",\n    \"delete\": \"Delete\",\n    \"controlnet\": \"Controlnet\",\n    \"packages\": \"Packages in Virtual Env\",\n    \"more\": \"more\",\n    \"modelFormat\": \"Model Format\",\n    \"enterNumberGreaterThanZero\": \"Please enter a number greater than 0.\",\n    \"carefulQuantizationForModelRegistration\": \"For GPTQ/AWQ/FP8/MLX models, please be careful to fill in the quantization corresponding to the model you want to register.\",\n    \"quantizationCannotBeEmpty\": \"Quantization cannot be left empty.\",\n    \"enterInteger\": \"Please enter an integer.\",\n    \"enterIntegerGreaterThanZero\": \"Please enter an integer greater than 0.\",\n    \"showCustomJsonConfig\": \"Show custom json config used by api\",\n    \"packUp\": \"Pack up\",\n    \"unfold\": \"Unfold\",\n    \"copyAll\": \"Copy all\",\n    \"alphanumericWithHyphensUnderscores\": \"Alphanumeric characters with properly placed hyphens and underscores. Must not match any built-in model names.\",\n    \"chooseBuiltInOrCustomModel\": \"You can choose from the built-in models or input your own.\",\n    \"chooseOnlyBuiltInModel\": \"You can only choose from the built-in models.\",\n    \"provideModelDirectoryPath\": \"Provide the model directory path.\",\n    \"provideModelLauncher\": \"Provide the model launcher.\",\n    \"jsonArgumentsForLauncher\": \"A JSON-formatted dictionary representing the arguments passed to the Launcher.\",\n    \"provideModelDirectoryOrFilePath\": \"For PyTorch, provide the model directory. For GGUF, provide the model file path.\",\n    \"ensureChatTemplatePassesTest\": \"Please make sure this chat_template passes the test by clicking the TEST button on the right. Please note that this test may not cover all cases and will only be used for the most basic case.\",\n    \"testFailurePreventsChatWorking\": \"Please note that failure to pass test may prevent chats from working properly.\",\n    \"stopControlForChatModels\": \"int type, used to control the stopping of chat models\",\n    \"stopControlStringForChatModels\": \"string type, used to control the stopping of chat models\",\n    \"enterJsonFormattedDictionary\": \"Please enter the JSON-formatted dictionary.\",\n    \"autoFill\": \"Auto Fill\",\n    \"fillInModelPathFirst\": \"Please fill in modelPath first\",\n    \"fillInModelFamilyFirst\": \"Please select model family first\"\n  },\n\n  \"clusterInfo\": {\n    \"supervisor\": \"Supervisor\",\n    \"workers\": \"Workers\",\n    \"workerDetails\": \"Worker Details\",\n    \"count\": \"Count\",\n    \"cpuInfo\": \"CPU Info\",\n    \"usage\": \"Usage:\",\n    \"total\": \"Total\",\n    \"cpuMemoryInfo\": \"CPU Memory Info\",\n    \"version\": \"Version\",\n    \"release\": \"Release:\",\n    \"commit\": \"Commit:\",\n    \"gpuInfo\": \"GPU Info\",\n    \"gpuMemoryInfo\": \"GPU Memory Info\",\n    \"address\": \"Address\",\n    \"item\": \"Item\",\n    \"value\": \"Value\",\n    \"nodeType\": \"Node Type\",\n    \"cpuUsage\": \"CPU Usage\",\n    \"cpuTotal\": \"CPU Total\",\n    \"memUsage\": \"Mem Usage\",\n    \"memTotal\": \"Mem Total\",\n    \"gpuCount\": \"GPU Count\",\n    \"gpuMemUsage\": \"GPU Mem Usage\",\n    \"gpuMemTotal\": \"GPU Mem Total\",\n    \"worker\": \"Worker\"\n  },\n\n  \"components\": {\n    \"suggestsCommonParameters\": \"Suggests common parameters; others allowed.\",\n    \"warning\": \"Warning\",\n    \"ok\": \"OK\",\n    \"cancel\": \"Cancel\"\n  }\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/locales/ja.json",
    "content": "{\n  \"menu\": {\n    \"launchModel\": \"モデル起動\",\n    \"runningModels\": \"実行中のモデル\",\n    \"registerModel\": \"モデル登録\",\n    \"clusterInfo\": \"クラスター情報\",\n    \"xagent\": \"XagentでAIエージェントを構築\",\n    \"contactUs\": \"お問い合わせ\",\n    \"documentation\": \"ドキュメント\",\n    \"website\": \"公式サイト\"\n  },\n  \"model\": {\n    \"languageModels\": \"言語モデル\",\n    \"embeddingModels\": \"埋め込みモデル\",\n    \"rerankModels\": \"再ランクモデル\",\n    \"imageModels\": \"画像モデル\",\n    \"audioModels\": \"音声モデル\",\n    \"videoModels\": \"動画モデル\",\n    \"customModels\": \"カスタムモデル\",\n    \"flexibleModels\": \"フレキシブルモデル\"\n  },\n  \"launchModel\": {\n    \"modelAbility\": \"モデル機能\",\n    \"generate\": \"テキスト生成\",\n    \"chat\": \"会話\",\n    \"vision\": \"視覚\",\n    \"reasoning\": \"推論\",\n    \"tools\": \"ツール使用\",\n    \"audio\": \"音声処理\",\n    \"omni\": \"マルチモーダル (Omni)\",\n    \"hybrid\": \"ハイブリッド機能\",\n    \"text2image\": \"テキストから画像\",\n    \"image2image\": \"画像から画像\",\n    \"inpainting\": \"画像修復\",\n    \"ocr\": \"光学文字認識 (OCR)\",\n    \"audio2text\": \"音声からテキスト\",\n    \"text2audio\": \"テキストから音声\",\n    \"text2audio_zero_shot\": \"テキストから音声 (ゼロショット)\",\n    \"text2audio_voice_cloning\": \"テキストから音声 (声のクローン)\",\n    \"text2video\": \"テキストから動画\",\n    \"image2video\": \"画像から動画\",\n    \"firstlastframe2video\": \"最初と最後のフレームから動画\",\n    \"status\": \"ステータス\",\n    \"cached\": \"キャッシュ済み\",\n    \"manageCachedModels\": \"キャッシュモデル管理\",\n    \"manageVirtualEnvironments\": \"仮想環境を管理\",\n    \"favorite\": \"お気に入り\",\n    \"unfavorite\": \"お気に入り解除\",\n    \"search\": \"モデル名と説明を検索\",\n    \"searchModelType\": \"{{modelType}}モデル名を検索\",\n    \"searchInstruction\": \"{{hotkey}}で検索\",\n    \"clickToLaunchModel\": \"マウスクリックでモデルを起動\",\n    \"dimensions\": \"次元\",\n    \"maxTokens\": \"最大トークン数\",\n    \"edit\": \"編集\",\n    \"delete\": \"削除\",\n    \"contextLength\": \"コンテキスト長\",\n    \"chatModel\": \"チャットモデル\",\n    \"generateModel\": \"生成モデル\",\n    \"otherModel\": \"その他モデル\",\n    \"confirmDeleteCustomModel\": \"このカスタムモデルを削除しますか？この操作は元に戻せません。\",\n    \"modelName\": \"모델 이름\",\n    \"envPath\": \"환경 경로\",\n    \"realPath\": \"실제 경로\",\n    \"copyEnvPath\": \"환경 경로 복사\",\n    \"viewPackages\": \"패키지 목록 보기\",\n    \"installedPackages\": \"설치된 패키지\",\n    \"packageName\": \"패키지 이름\",\n    \"version\": \"버전\",\n    \"location\": \"위치\",\n    \"packagesCount\": \"패키지 수\",\n    \"size\": \"크기\",\n    \"pythonVersion\": \"Python 버전\",\n    \"createdAt\": \"생성 시간\",\n    \"noVirtualEnvironmentsForNow\": \"현재 가상환경이 없습니다!\",\n    \"noPackagesInstalled\": \"설치된 패키지가 없습니다\",\n    \"lastConfig\": \"最終設定\",\n    \"commandLineParsing\": \"コマンドライン引数解析\",\n    \"copyToCommandLine\": \"コマンドラインコマンドとしてコピー\",\n    \"modelEngine\": \"モデルエンジン\",\n    \"modelFormat\": \"モデルフォーマット\",\n    \"modelSize\": \"モデルサイズ\",\n    \"quantization\": \"量子化\",\n    \"multimodelProjector\": \"マルチモデルプロジェクター\",\n    \"nGPU\": \"レプリカあたりのGPU数\",\n    \"nGPUPerWorker\": \"ワーカーあたりのGPU数\",\n    \"nGpuLayers\": \"GPUレイヤー数\",\n    \"replica\": \"レプリカ\",\n    \"optionalConfigurations\": \"オプション設定\",\n    \"modelUID.optional\": \"(オプション) モデルUID、デフォルトはモデル名\",\n    \"requestLimits.optional\": \"(オプション) リクエスト制限、このモデルのリクエスト制限数、デフォルトは無制限\",\n    \"workerIp.optional\": \"(オプション) ワーカーIP、分散シナリオでモデルが配置されているワーカーIPを指定,カンマで区切ることで複数の IP を指定できます。\",\n    \"workerIp\": \"ワーカーIP、分散シナリオでモデルが配置されているワーカーIPを指定\",\n    \"workerCount.optional\": \"(オプション) ワーカー数\",\n    \"GPUIdx.optional\": \"(オプション) GPUインデックス、モデルが配置されているGPUインデックスを指定\",\n    \"GPUIdx\": \"GPUインデックス、モデルが配置されているGPUインデックスを指定\",\n    \"downloadHub.optional\": \"(オプション) ダウンロードハブ\",\n    \"modelPath.optional\": \"(オプション) モデルパス、PyTorchの場合はモデルディレクトリ、GGML/GGUFの場合はモデルファイルパスを指定\",\n    \"GGUFQuantization.optional\": \"(オプション) GGUF量子化フォーマット、Transformer部分を量子化\",\n    \"GGUFModelPath.optional\": \"(オプション) GGUFモデルパス、.ggufで終わるファイルを指定\",\n    \"lightningVersions.optional\": \"(オプション) 軽量化バージョン\",\n    \"lightningModelPath.optional\": \"(オプション) 軽量化LoRAモデルパス\",\n    \"enableThinking\": \"思考を有効化\",\n    \"parsingReasoningContent\": \"推論内容の解析\",\n    \"CPUOffload\": \"CPUオフロード\",\n    \"CPUOffload.tip\": \"モデルをCPUにアンロードします。リソースが限られている場合やGGUFオプションを使用する場合に推奨されます。\",\n    \"loraConfig\": \"Lora設定\",\n    \"loraModelConfig\": \"Loraモデル設定\",\n    \"virtualEnvConfig\": \"仮想環境の設定\",\n    \"modelVirtualEnv\": \"モデルの仮想環境\",\n    \"virtualEnvPackage\": \"仮想環境パッケージ\",\n    \"envVariable\": \"環境変数\",\n    \"envVariableConfig\": \"環境変数の設定\",\n    \"additionalQuantizationParametersForInferenceEngine\": \"推論エンジンに渡される追加の量子化パラメータ\",\n    \"additionalParametersForInferenceEngine\": \"推論エンジンに渡される追加のパラメータ\",\n    \"enterIntegerGreaterThanZero\": \"0より大きい整数を入力してください。\",\n    \"enterCommaSeparatedNumbers\": \"カンマ区切りの数値を入力してください。例: 0,1,2\",\n    \"device\": \"デバイス\",\n    \"loraLoadKwargsForImageModel\": \"画像モデルのLora読み込み引数\",\n    \"loraFuseKwargsForImageModel\": \"画像モデルのLora融合引数\",\n    \"launch\": \"起動\",\n    \"goBack\": \"戻る\",\n    \"copyJson\": \"Jsonをコピー\",\n    \"cancel\": \"キャンセル\",\n    \"confirm\": \"確認\",\n    \"placeholderTip\": \"入力してください\",\n    \"fillCompleteParametersBeforeAdding\": \"追加前に完全なパラメータを入力してください！\",\n    \"model_format\": \"モデルフォーマット\",\n    \"model_size_in_billions\": \"モデルサイズ（億単位）\",\n    \"quantizations\": \"量子化\",\n    \"real_path\": \"実際のパス\",\n    \"path\": \"パス\",\n    \"ipAddress\": \"IPアドレス\",\n    \"operation\": \"操作\",\n    \"copyRealPath\": \"実際のパスをコピー\",\n    \"copyPath\": \"パスをコピー\",\n    \"noCacheForNow\": \"現在キャッシュはありません！\",\n    \"confirmDeleteCacheFiles\": \"キャッシュファイルを削除しますか？この操作は元に戻せません。\",\n    \"confirmDeleteVirtualEnv\": \"仮想環境を削除しますか？この操作は元に戻せません。\",\n    \"commandLineTip\": \"モデル名が一致しているか確認してください。\",\n    \"featured\": \"おすすめとお気に入り\",\n    \"all\": \"すべて\",\n    \"cancelledSuccessfully\": \"正常にキャンセルされました！\",\n    \"mustBeUnique\": \"{{key}} は一意でなければなりません\",\n    \"update\": \"更新\",\n    \"launchProgress\": \"起動状況\",\n    \"initializing\": \"初期化中...\",\n    \"moreDetails\": \"詳細を見る\"\n  },\n  \"modelReplicaDetails\": {\n    \"title\": \"モデルレプリカの詳細\",\n    \"modelUid\": \"モデル UID\",\n    \"replicaId\": \"レプリカ ID\",\n    \"workerAddress\": \"ワーカーアドレス\",\n    \"status\": \"ステータス\",\n    \"createdTime\": \"作成日時\",\n    \"noReplicaInfo\": \"レプリカ情報はありません\",\n    \"errors\": \"エラー\",\n    \"replica\": \"レプリカ\",\n    \"close\": \"閉じる\"\n  },\n  \"runningModels\": {\n    \"name\": \"名前\",\n    \"address\": \"アドレス\",\n    \"gpuIndexes\": \"GPUインデックス\",\n    \"size\": \"サイズ\",\n    \"quantization\": \"量子化\",\n    \"replica\": \"レプリカ\",\n    \"actions\": \"操作\",\n    \"noRunningModels\": \"実行中のモデルはありません\",\n    \"noRunningModelsMatches\": \"一致する実行中のモデルはありません\",\n    \"copy\": \"コピー\",\n    \"copied\": \"コピーしました！\",\n    \"copyFailed\": \"コピーに失敗しました\",\n    \"viewDetails\": \"詳細を表示\"\n  },\n  \"registerModel\": {\n    \"modelName\": \"モデル名\",\n    \"modelDescription\": \"モデル説明（オプション）\",\n    \"contextLength\": \"コンテキスト長\",\n    \"dimensions\": \"次元\",\n    \"maxTokens\": \"最大トークン数\",\n    \"modelPath\": \"モデルパス\",\n    \"modelLanguages\": \"モデル言語\",\n    \"languages\": \"言語\",\n    \"multilingual\": \"多言語\",\n    \"modelAbilities\": \"モデル機能\",\n    \"modelFamily\": \"モデルファミリー\",\n    \"chatTemplate\": \"チャットテンプレート\",\n    \"test\": \"テスト\",\n    \"testResult\": \"テスト結果\",\n    \"noTestResults\": \"テスト結果がありません...\",\n    \"stopTokenIds\": \"停止トークンID\",\n    \"stop\": \"停止\",\n    \"reasoningStartTag\": \"推論開始タグ\",\n    \"reasoningEndTag\": \"推論終了タグ\",\n    \"toolParser\": \"ツールパーサー\",\n    \"launcher\": \"ランチャー\",\n    \"launcherArguments\": \"ランチャー引数（オプション）\",\n    \"edit\": \"編集\",\n    \"cancel\": \"キャンセル\",\n    \"registerModel\": \"モデル登録\",\n    \"messagesExample\": \"メッセージ例\",\n    \"JSONFormat\": \"JSONフォーマット\",\n    \"modelSpecs\": \"モデル仕様\",\n    \"modelSizeBillions\": \"モデルサイズ（億単位）\",\n    \"quantization\": \"量子化\",\n    \"quantizationOptional\": \"量子化（オプション）\",\n    \"delete\": \"削除\",\n    \"controlnet\": \"Controlnet\",\n    \"packages\": \"仮想環境パッケージ\",\n    \"more\": \"詳細\",\n    \"modelFormat\": \"モデルフォーマット\",\n    \"enterNumberGreaterThanZero\": \"0より大きい数値を入力してください。\",\n    \"carefulQuantizationForModelRegistration\": \"GPTQ/AWQ/FP8/MLXモデルの場合、登録するモデルに対応する量子化を慎重に入力してください。\",\n    \"quantizationCannotBeEmpty\": \"量子化は空にできません。\",\n    \"enterInteger\": \"整数を入力してください。\",\n    \"enterIntegerGreaterThanZero\": \"0より大きい整数を入力してください。\",\n    \"showCustomJsonConfig\": \"APIで使用されるカスタムjson設定を表示\",\n    \"packUp\": \"折りたたむ\",\n    \"unfold\": \"展開\",\n    \"copyAll\": \"すべてコピー\",\n    \"alphanumericWithHyphensUnderscores\": \"ハイフンとアンダースコアを適切に配置した英数字。組み込みモデル名と一致してはいけません。\",\n    \"chooseBuiltInOrCustomModel\": \"組み込みモデルから選択するか、独自のモデルを入力できます。\",\n    \"chooseOnlyBuiltInModel\": \"組み込みモデルのみから選択できます。\",\n    \"provideModelDirectoryPath\": \"モデルディレクトリパスを指定してください。\",\n    \"provideModelLauncher\": \"モデルランチャーを指定してください。\",\n    \"jsonArgumentsForLauncher\": \"ランチャーに渡される引数を表すJSON形式の辞書。\",\n    \"provideModelDirectoryOrFilePath\": \"PyTorchの場合はモデルディレクトリ、GGUFの場合はモデルファイルパスを指定してください。\",\n    \"ensureChatTemplatePassesTest\": \"右側のTESTボタンをクリックして、このchat_templateがテストに合格することを確認してください。このテストはすべてのケースをカバーするわけではなく、最も基本的なケースにのみ使用されます。\",\n    \"testFailurePreventsChatWorking\": \"テストに合格しないと、チャットが正常に動作しない可能性があることに注意してください。\",\n    \"stopControlForChatModels\": \"int型、チャットモデルの停止を制御するために使用\",\n    \"stopControlStringForChatModels\": \"string型、チャットモデルの停止を制御するために使用\",\n    \"enterJsonFormattedDictionary\": \"JSON形式の辞書を入力してください。\",\n    \"autoFill\": \"自動入力\",\n    \"fillInModelPathFirst\": \"まずモデルパスを入力してください\",\n    \"fillInModelFamilyFirst\": \"まずモデルファミリーを選択してください\"\n  },\n  \"clusterInfo\": {\n    \"supervisor\": \"スーパーバイザー\",\n    \"workers\": \"ワーカー\",\n    \"workerDetails\": \"ワーカー詳細\",\n    \"count\": \"数\",\n    \"cpuInfo\": \"CPU情報\",\n    \"usage\": \"使用率:\",\n    \"total\": \"合計\",\n    \"cpuMemoryInfo\": \"CPUメモリ情報\",\n    \"version\": \"バージョン\",\n    \"release\": \"リリース:\",\n    \"commit\": \"コミット:\",\n    \"gpuInfo\": \"GPU情報\",\n    \"gpuMemoryInfo\": \"GPUメモリ情報\",\n    \"address\": \"アドレス\",\n    \"item\": \"項目\",\n    \"value\": \"値\",\n    \"nodeType\": \"ノードタイプ\",\n    \"cpuUsage\": \"CPU使用率\",\n    \"cpuTotal\": \"CPU合計\",\n    \"memUsage\": \"メモリ使用率\",\n    \"memTotal\": \"メモリ合計\",\n    \"gpuCount\": \"GPU数\",\n    \"gpuMemUsage\": \"GPUメモリ使用率\",\n    \"gpuMemTotal\": \"GPUメモリ合計\",\n    \"worker\": \"ワーカー\"\n  },\n  \"components\": {\n    \"suggestsCommonParameters\": \"一般的なパラメータを提案します。他のパラメータも使用可能です。\",\n    \"warning\": \"警告\",\n    \"ok\": \"確認\",\n    \"cancel\": \"キャンセル\"\n  }\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/locales/ko.json",
    "content": "{\n  \"menu\": {\n    \"launchModel\": \"모델 실행\",\n    \"runningModels\": \"실행 중인 모델\",\n    \"registerModel\": \"모델 등록\",\n    \"clusterInfo\": \"클러스터 정보\",\n    \"xagent\": \"Xagent로 AI 에이전트 구축\",\n    \"contactUs\": \"문의하기\",\n    \"documentation\": \"문서\",\n    \"website\": \"공식 웹사이트\"\n  },\n  \"model\": {\n    \"languageModels\": \"언어 모델\",\n    \"embeddingModels\": \"임베딩 모델\",\n    \"rerankModels\": \"재순위 모델\",\n    \"imageModels\": \"이미지 모델\",\n    \"audioModels\": \"오디오 모델\",\n    \"videoModels\": \"비디오 모델\",\n    \"customModels\": \"커스텀 모델\",\n    \"flexibleModels\": \"유연한 모델\"\n  },\n  \"launchModel\": {\n    \"modelAbility\": \"모델 기능\",\n    \"generate\": \"텍스트 생성\",\n    \"chat\": \"대화\",\n    \"vision\": \"비전\",\n    \"reasoning\": \"추론\",\n    \"tools\": \"도구 사용\",\n    \"audio\": \"오디오 처리\",\n    \"omni\": \"멀티모달 (Omni)\",\n    \"hybrid\": \"하이브리드 기능\",\n    \"text2image\": \"텍스트에서 이미지\",\n    \"image2image\": \"이미지에서 이미지\",\n    \"inpainting\": \"이미지 인페인팅\",\n    \"ocr\": \"광학 문자 인식 (OCR)\",\n    \"audio2text\": \"오디오에서 텍스트\",\n    \"text2audio\": \"텍스트에서 오디오\",\n    \"text2audio_zero_shot\": \"텍스트에서 오디오 (제로 샷)\",\n    \"text2audio_voice_cloning\": \"텍스트에서 오디오 (음성 클로닝)\",\n    \"text2video\": \"텍스트에서 비디오\",\n    \"image2video\": \"이미지에서 비디오\",\n    \"firstlastframe2video\": \"첫 번째와 마지막 프레임에서 비디오\",\n    \"status\": \"상태\",\n    \"cached\": \"캐시됨\",\n    \"manageCachedModels\": \"캐시 모델 관리\",\n    \"manageVirtualEnvironments\": \"가상 환경 관리\",\n    \"favorite\": \"즐겨찾기\",\n    \"unfavorite\": \"즐겨찾기 해제\",\n    \"search\": \"모델 이름 및 설명 검색\",\n    \"searchModelType\": \"{{modelType}} 모델 이름 검색\",\n    \"searchInstruction\": \"{{hotkey}}로 검색\",\n    \"clickToLaunchModel\": \"마우스 클릭으로 모델 실행\",\n    \"dimensions\": \"차원\",\n    \"maxTokens\": \"최대 토큰 수\",\n    \"edit\": \"편집\",\n    \"delete\": \"삭제\",\n    \"contextLength\": \"컨텍스트 길이\",\n    \"chatModel\": \"채팅 모델\",\n    \"generateModel\": \"생성 모델\",\n    \"otherModel\": \"기타 모델\",\n    \"confirmDeleteCustomModel\": \"이 커스텀 모델을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.\",\n    \"modelName\": \"모델 이름\",\n    \"envPath\": \"환경 경로\",\n    \"realPath\": \"실제 경로\",\n    \"copyEnvPath\": \"환경 경로 복사\",\n    \"viewPackages\": \"패키지 목록 보기\",\n    \"installedPackages\": \"설치된 패키지\",\n    \"packageName\": \"패키지 이름\",\n    \"version\": \"버전\",\n    \"location\": \"위치\",\n    \"packagesCount\": \"패키지 수\",\n    \"size\": \"크기\",\n    \"pythonVersion\": \"Python 버전\",\n    \"createdAt\": \"생성 시간\",\n    \"noVirtualEnvironmentsForNow\": \"현재 가상환경이 없습니다!\",\n    \"noPackagesInstalled\": \"설치된 패키지가 없습니다\",\n    \"lastConfig\": \"마지막 설정\",\n    \"commandLineParsing\": \"명령줄 인수 파싱\",\n    \"copyToCommandLine\": \"명령줄 명령으로 복사\",\n    \"modelEngine\": \"모델 엔진\",\n    \"modelFormat\": \"모델 형식\",\n    \"modelSize\": \"모델 크기\",\n    \"quantization\": \"양자화\",\n    \"multimodelProjector\": \"멀티모델 프로젝터\",\n    \"nGPU\": \"레플리카당 GPU 수\",\n    \"nGPUPerWorker\": \"워커당 GPU 수\",\n    \"nGpuLayers\": \"GPU 레이어 수\",\n    \"replica\": \"레플리카\",\n    \"optionalConfigurations\": \"선택적 구성\",\n    \"modelUID.optional\": \"(선택) 모델 UID, 기본값은 모델 이름\",\n    \"requestLimits.optional\": \"(선택) 요청 제한, 이 모델의 요청 제한 수, 기본값은 없음\",\n    \"workerIp.optional\": \"(선택) 워커 IP, 분산 시나리오에서 모델이 위치한 워커 IP 지정,여러 개의 IP를 쉼표로 구분하여 지정할 수 있습니다.\",\n    \"workerIp\": \"워커 IP, 분산 시나리오에서 모델이 위치한 워커 IP 지정\",\n    \"workerCount.optional\": \"(선택) 워커 수\",\n    \"GPUIdx.optional\": \"(선택) GPU 인덱스, 모델이 위치한 GPU 인덱스 지정\",\n    \"GPUIdx\": \"GPU 인덱스, 모델이 위치한 GPU 인덱스 지정\",\n    \"downloadHub.optional\": \"(선택) 다운로드 허브\",\n    \"modelPath.optional\": \"(선택) 모델 경로, PyTorch의 경우 모델 디렉토리, GGML/GGUF의 경우 모델 파일 경로 지정\",\n    \"GGUFQuantization.optional\": \"(선택) GGUF 양자화 형식, Transformer 부분 양자화\",\n    \"GGUFModelPath.optional\": \"(선택) GGUF 모델 경로, .gguf로 끝나는 파일 지정\",\n    \"lightningVersions.optional\": \"(선택) 경량화 버전\",\n    \"lightningModelPath.optional\": \"(선택) 경량화 lora 모델 경로\",\n    \"enableThinking\": \"사고 활성화\",\n    \"parsingReasoningContent\": \"추론 내용 파싱\",\n    \"CPUOffload\": \"CPU 오프로드\",\n    \"CPUOffload.tip\": \"모델을 CPU로 언로드합니다. 리소스가 제한된 경우 또는 GGUF 옵션을 사용할 때 권장됩니다.\",\n    \"loraConfig\": \"Lora 설정\",\n    \"loraModelConfig\": \"Lora 모델 설정\",\n    \"virtualEnvConfig\": \"가상 환경 설정\",\n    \"modelVirtualEnv\": \"모델 가상 환경\",\n    \"virtualEnvPackage\": \"가상 환경 패키지\",\n    \"envVariable\": \"환경 변수\",\n    \"envVariableConfig\": \"환경 변수 설정\",\n    \"additionalQuantizationParametersForInferenceEngine\": \"추론 엔진에 전달되는 추가 양자화 매개변수\",\n    \"additionalParametersForInferenceEngine\": \"추론 엔진에 전달되는 추가 매개변수\",\n    \"enterIntegerGreaterThanZero\": \"0보다 큰 정수를 입력하세요.\",\n    \"enterCommaSeparatedNumbers\": \"쉼표로 구분된 숫자를 입력하세요. 예: 0,1,2\",\n    \"device\": \"장치\",\n    \"loraLoadKwargsForImageModel\": \"이미지 모델의 Lora 로드 인수\",\n    \"loraFuseKwargsForImageModel\": \"이미지 모델의 Lora 퓨즈 인수\",\n    \"launch\": \"실행\",\n    \"goBack\": \"뒤로 가기\",\n    \"copyJson\": \"Json 복사\",\n    \"cancel\": \"취소\",\n    \"confirm\": \"확인\",\n    \"placeholderTip\": \"입력하세요\",\n    \"fillCompleteParametersBeforeAdding\": \"추가하기 전에 완전한 매개변수를 입력하세요!\",\n    \"model_format\": \"모델 형식\",\n    \"model_size_in_billions\": \"모델 크기(억 단위)\",\n    \"quantizations\": \"양자화\",\n    \"real_path\": \"실제 경로\",\n    \"path\": \"경로\",\n    \"ipAddress\": \"IP 주소\",\n    \"operation\": \"작업\",\n    \"copyRealPath\": \"실제 경로 복사\",\n    \"copyPath\": \"경로 복사\",\n    \"noCacheForNow\": \"현재 캐시가 없습니다!\",\n    \"confirmDeleteCacheFiles\": \"캐시 파일을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.\",\n    \"confirmDeleteVirtualEnv\": \"가상 환경을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.\",\n    \"commandLineTip\": \"모델 이름이 일치하는지 확인하세요.\",\n    \"featured\": \"추천 및 즐겨찾기\",\n    \"all\": \"모두\",\n    \"cancelledSuccessfully\": \"성공적으로 취소되었습니다!\",\n    \"mustBeUnique\": \"{{key}} 는 고유해야 합니다\",\n    \"update\": \"업데이트\",\n    \"launchProgress\": \"시작 진행 상황\",\n    \"initializing\": \"초기화 중...\",\n    \"moreDetails\": \"자세히 보기\"\n  },\n  \"modelReplicaDetails\": {\n    \"title\": \"모델 복제본 세부 정보\",\n    \"modelUid\": \"모델 UID\",\n    \"replicaId\": \"복제본 ID\",\n    \"workerAddress\": \"워커 주소\",\n    \"status\": \"상태\",\n    \"createdTime\": \"생성 시간\",\n    \"noReplicaInfo\": \"복제본 정보를 사용할 수 없습니다\",\n    \"errors\": \"오류\",\n    \"replica\": \"복제본\",\n    \"close\": \"닫기\"\n  },\n  \"runningModels\": {\n    \"name\": \"이름\",\n    \"address\": \"주소\",\n    \"gpuIndexes\": \"GPU 인덱스\",\n    \"size\": \"크기\",\n    \"quantization\": \"양자화\",\n    \"replica\": \"레플리카\",\n    \"actions\": \"작업\",\n    \"noRunningModels\": \"실행 중인 모델이 없습니다\",\n    \"noRunningModelsMatches\": \"일치하는 실행 중인 모델이 없습니다\",\n    \"copy\": \"복사\",\n    \"copied\": \"복사되었습니다!\",\n    \"copyFailed\": \"복사 실패\",\n    \"viewDetails\": \"상세 보기\"\n  },\n  \"registerModel\": {\n    \"modelName\": \"모델 이름\",\n    \"modelDescription\": \"모델 설명 (선택)\",\n    \"contextLength\": \"컨텍스트 길이\",\n    \"dimensions\": \"차원\",\n    \"maxTokens\": \"최대 토큰 수\",\n    \"modelPath\": \"모델 경로\",\n    \"modelLanguages\": \"모델 언어\",\n    \"languages\": \"언어\",\n    \"multilingual\": \"다국어\",\n    \"modelAbilities\": \"모델 기능\",\n    \"modelFamily\": \"모델 패밀리\",\n    \"chatTemplate\": \"채팅 템플릿\",\n    \"test\": \"테스트\",\n    \"testResult\": \"테스트 결과\",\n    \"noTestResults\": \"테스트 결과가 없습니다...\",\n    \"stopTokenIds\": \"중지 토큰 ID\",\n    \"stop\": \"중지\",\n    \"reasoningStartTag\": \"추론 시작 태그\",\n    \"reasoningEndTag\": \"추론 종료 태그\",\n    \"toolParser\": \"도구 파서\",\n    \"launcher\": \"런처\",\n    \"launcherArguments\": \"런처 인수 (선택)\",\n    \"edit\": \"편집\",\n    \"cancel\": \"취소\",\n    \"registerModel\": \"모델 등록\",\n    \"messagesExample\": \"메시지 예시\",\n    \"JSONFormat\": \"JSON 형식\",\n    \"modelSpecs\": \"모델 사양\",\n    \"modelSizeBillions\": \"모델 크기(억 단위)\",\n    \"quantization\": \"양자화\",\n    \"quantizationOptional\": \"양자화 (선택)\",\n    \"delete\": \"삭제\",\n    \"controlnet\": \"Controlnet\",\n    \"packages\": \"가상환경 패키지\",\n    \"more\": \"더보기\",\n    \"modelFormat\": \"모델 형식\",\n    \"enterNumberGreaterThanZero\": \"0보다 큰 숫자를 입력하세요.\",\n    \"carefulQuantizationForModelRegistration\": \"GPTQ/AWQ/FP8/MLX 모델의 경우, 등록하려는 모델에 해당하는 양자화를 신중하게 입력하세요.\",\n    \"quantizationCannotBeEmpty\": \"양자화는 비워둘 수 없습니다.\",\n    \"enterInteger\": \"정수를 입력하세요.\",\n    \"enterIntegerGreaterThanZero\": \"0보다 큰 정수를 입력하세요.\",\n    \"showCustomJsonConfig\": \"API에서 사용하는 사용자 정의 json 설정 표시\",\n    \"packUp\": \"접기\",\n    \"unfold\": \"펼치기\",\n    \"copyAll\": \"모두 복사\",\n    \"alphanumericWithHyphensUnderscores\": \"하이픈과 언더스코어가 적절히 배치된 영숫자. 내장 모델 이름과 일치하지 않아야 합니다.\",\n    \"chooseBuiltInOrCustomModel\": \"내장 모델에서 선택하거나 자신의 모델을 입력할 수 있습니다.\",\n    \"chooseOnlyBuiltInModel\": \"내장 모델만 선택할 수 있습니다.\",\n    \"provideModelDirectoryPath\": \"모델 디렉토리 경로를 제공하세요.\",\n    \"provideModelLauncher\": \"모델 런처를 제공하세요.\",\n    \"jsonArgumentsForLauncher\": \"런처에 전달되는 인수를 나타내는 JSON 형식의 사전.\",\n    \"provideModelDirectoryOrFilePath\": \"PyTorch의 경우 모델 디렉토리, GGUF의 경우 모델 파일 경로를 제공하세요.\",\n    \"ensureChatTemplatePassesTest\": \"오른쪽의 TEST 버튼을 클릭하여 이 chat_template이 테스트를 통과하는지 확인하세요. 이 테스트는 모든 경우를 다루지 않으며 가장 기본적인 경우에만 사용됩니다.\",\n    \"testFailurePreventsChatWorking\": \"테스트를 통과하지 못하면 채팅이 제대로 작동하지 않을 수 있습니다.\",\n    \"stopControlForChatModels\": \"int 유형, 채팅 모델의 중지를 제어하는 데 사용\",\n    \"stopControlStringForChatModels\": \"string 유형, 채팅 모델의 중지를 제어하는 데 사용\",\n    \"enterJsonFormattedDictionary\": \"JSON 형식의 사전을 입력하세요.\",\n    \"autoFill\": \"자동 채우기\",\n    \"fillInModelPathFirst\": \"먼저 모델 경로를 입력하세요\",\n    \"fillInModelFamilyFirst\": \"먼저 모델 패밀리를 선택하세요\"\n  },\n  \"clusterInfo\": {\n    \"supervisor\": \"슈퍼바이저\",\n    \"workers\": \"워커\",\n    \"workerDetails\": \"워커 세부 정보\",\n    \"count\": \"수\",\n    \"cpuInfo\": \"CPU 정보\",\n    \"usage\": \"사용률:\",\n    \"total\": \"총계\",\n    \"cpuMemoryInfo\": \"CPU 메모리 정보\",\n    \"version\": \"버전\",\n    \"release\": \"릴리스:\",\n    \"commit\": \"커밋:\",\n    \"gpuInfo\": \"GPU 정보\",\n    \"gpuMemoryInfo\": \"GPU 메모리 정보\",\n    \"address\": \"주소\",\n    \"item\": \"항목\",\n    \"value\": \"값\",\n    \"nodeType\": \"노드 유형\",\n    \"cpuUsage\": \"CPU 사용률\",\n    \"cpuTotal\": \"CPU 총계\",\n    \"memUsage\": \"메모리 사용률\",\n    \"memTotal\": \"메모리 총계\",\n    \"gpuCount\": \"GPU 수\",\n    \"gpuMemUsage\": \"GPU 메모리 사용률\",\n    \"gpuMemTotal\": \"GPU 메모리 총계\",\n    \"worker\": \"워커\"\n  },\n  \"components\": {\n    \"suggestsCommonParameters\": \"일반적인 매개변수를 제안합니다. 다른 매개변수도 사용 가능합니다.\",\n    \"warning\": \"경고\",\n    \"ok\": \"확인\",\n    \"cancel\": \"취소\"\n  }\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/locales/zh.json",
    "content": "{\n  \"menu\": {\n    \"launchModel\": \"启动模型\",\n    \"runningModels\": \"运行模型\",\n    \"registerModel\": \"注册模型\",\n    \"clusterInfo\": \"集群信息\",\n    \"xagent\": \"使用 Xagent 构建 AI 智能体\",\n    \"contactUs\": \"联系我们\",\n    \"documentation\": \"文档\",\n    \"website\": \"官网\"\n  },\n  \"model\": {\n    \"languageModels\": \"语言模型\",\n    \"embeddingModels\": \"嵌入模型\",\n    \"rerankModels\": \"重排序模型\",\n    \"imageModels\": \"图像模型\",\n    \"audioModels\": \"音频模型\",\n    \"videoModels\": \"视频模型\",\n    \"customModels\": \"自定义模型\",\n    \"flexibleModels\": \"灵活模型\"\n  },\n  \"launchModel\": {\n    \"modelAbility\": \"模型能力\",\n    \"generate\": \"文本生成\",\n    \"chat\": \"对话\",\n    \"vision\": \"图像识别\",\n    \"reasoning\": \"推理能力\",\n    \"tools\": \"工具使用能力\",\n    \"audio\": \"音频处理\",\n    \"omni\": \"全模态\",\n    \"hybrid\": \"混合能力\",\n    \"text2image\": \"文生图\",\n    \"image2image\": \"图生图\",\n    \"inpainting\": \"图像修复\",\n    \"ocr\": \"光学字符识别\",\n    \"audio2text\": \"语音转文本\",\n    \"text2audio\": \"文本转语音\",\n    \"text2audio_zero_shot\": \"文本转语音（零样本）\",\n    \"text2audio_voice_cloning\": \"文本转语音（声音克隆）\",\n    \"text2video\": \"文生视频\",\n    \"image2video\": \"图生视频\",\n    \"firstlastframe2video\": \"首尾帧生视频\",\n    \"status\": \"状态\",\n    \"cached\": \"已缓存\",\n    \"manageCachedModels\": \"管理缓存模型\",\n    \"manageVirtualEnvironments\": \"管理虚拟环境\",\n    \"favorite\": \"收藏\",\n    \"unfavorite\": \"取消收藏\",\n    \"search\": \"搜索模型名称和描述\",\n    \"searchModelType\": \"搜索 {{modelType}} 相关的模型名称\",\n    \"searchInstruction\": \"输入 {{hotkey}} 进行搜索\",\n    \"clickToLaunchModel\": \"点击鼠标以启动模型\",\n    \"dimensions\": \"维度\",\n    \"maxTokens\": \"最大 token 数\",\n    \"edit\": \"编辑\",\n    \"delete\": \"删除\",\n    \"contextLength\": \"上下文长度\",\n    \"chatModel\": \"聊天模型\",\n    \"generateModel\": \"生成模型\",\n    \"otherModel\": \"其他模型\",\n    \"confirmDeleteCustomModel\": \"您确定要删除这个自定义模型吗？此操作无法恢复。\",\n    \"modelName\": \"模型名称\",\n    \"envPath\": \"环境路径\",\n    \"realPath\": \"真实路径\",\n    \"copyEnvPath\": \"复制环境路径\",\n    \"viewPackages\": \"查看包列表\",\n    \"installedPackages\": \"已安装的包\",\n    \"packageName\": \"包名称\",\n    \"version\": \"版本\",\n    \"location\": \"位置\",\n    \"packagesCount\": \"包数量\",\n    \"size\": \"大小\",\n    \"pythonVersion\": \"Python 版本\",\n    \"createdAt\": \"创建时间\",\n    \"noVirtualEnvironmentsForNow\": \"当前没有虚拟环境！\",\n    \"noPackagesInstalled\": \"未安装任何包\",\n    \"lastConfig\": \"最后配置\",\n    \"commandLineParsing\": \"解析命令行参数\",\n    \"copyToCommandLine\": \"复制为命令行指令\",\n    \"modelEngine\": \"模型引擎\",\n    \"modelFormat\": \"模型格式\",\n    \"modelSize\": \"模型大小\",\n    \"quantization\": \"量化\",\n    \"multimodelProjector\": \"多模态投影器\",\n    \"nGPU\": \"GPU 数量 (每个副本)\",\n    \"nGPUPerWorker\": \"每个 Worker 上的 GPU 数量\",\n    \"nGpuLayers\": \"GPU 层数\",\n    \"replica\": \"副本\",\n    \"optionalConfigurations\": \"可选配置\",\n    \"modelUID.optional\": \"(可选) 模型 UID，默认是模型名称\",\n    \"requestLimits.optional\": \"(可选) 请求限制，模型的请求限制数，默认值为无\",\n    \"workerIp.optional\": \"(可选) 工作节点 IP，在分布式场景中指定模型所在的工作节点 IP,可以用英文逗号分隔指定多个 IP\",\n    \"workerIp\": \"工作节点 IP，在分布式场景中指定模型所在的工作节点 IP\",\n    \"workerCount.optional\": \"(可选) Worker 数量\",\n    \"GPUIdx.optional\": \"(可选) GPU 索引，指定模型所在的 GPU 索引\",\n    \"GPUIdx\": \"GPU 索引，指定模型所在的 GPU 索引\",\n    \"downloadHub.optional\": \"(可选) 下载中心\",\n    \"modelPath.optional\": \"(可选) 模型路径，对于 PyTorch，提供模型目录；对于 GGML/GGUF，提供模型文件路径。\",\n    \"GGUFQuantization.optional\": \"(可选) GGUF量化格式，对Transformer部分进行量化。\",\n    \"GGUFModelPath.optional\": \"(可选) GGUF模型路径，应为以 .gguf 结尾的文件。\",\n    \"lightningVersions.optional\": \"(可选) 蒸馏版本\",\n    \"lightningModelPath.optional\": \"(可选) 蒸馏lora路径\",\n    \"enableThinking\": \"开启思考模式\",\n    \"parsingReasoningContent\": \"解析推理内容\",\n    \"CPUOffload\": \"CPU卸载\",\n    \"CPUOffload.tip\": \"将模型卸载到CPU。当资源有限或使用GGUF选项时，建议启用此功能。\",\n    \"loraConfig\": \"Lora 配置\",\n    \"loraModelConfig\": \"Lora 模型配置\",\n    \"virtualEnvConfig\": \"虚拟空间配置\",\n    \"modelVirtualEnv\": \"模型虚拟空间\",\n    \"virtualEnvPackage\": \"虚拟空间安装包\",\n    \"envVariable\": \"环境变量\",\n    \"envVariableConfig\": \"环境变量配置\",\n    \"additionalQuantizationParametersForInferenceEngine\": \"传递给推理引擎的量化参数\",\n    \"additionalParametersForInferenceEngine\": \"传递给推理引擎的附加参数\",\n    \"enterIntegerGreaterThanZero\": \"请输入大于 0 的整数。\",\n    \"enterCommaSeparatedNumbers\": \"请输入以逗号分隔的数字数据，例如：0,1,2\",\n    \"device\": \"设备\",\n    \"loraLoadKwargsForImageModel\": \"图像模型的 Lora 加载参数\",\n    \"loraFuseKwargsForImageModel\": \"图像模型的 Lora 融合参数\",\n    \"launch\": \"启动\",\n    \"goBack\": \"返回\",\n    \"copyJson\": \"复制 JSON\",\n    \"cancel\": \"取消\",\n    \"confirm\": \"确定\",\n    \"placeholderTip\": \"请输入\",\n    \"fillCompleteParametersBeforeAdding\": \"请在添加之前填写完整的参数！\",\n    \"model_format\": \"模型格式\",\n    \"model_size_in_billions\": \"模型大小（以十亿为单位）\",\n    \"quantizations\": \"量化方式\",\n    \"real_path\": \"真实路径\",\n    \"path\": \"路径\",\n    \"ipAddress\": \"IP 地址\",\n    \"operation\": \"操作\",\n    \"copyRealPath\": \"复制真实路径\",\n    \"copyPath\": \"复制路径\",\n    \"noCacheForNow\": \"当前没有缓存！\",\n    \"confirmDeleteCacheFiles\": \"确认删除缓存文件吗？此操作无法恢复。\",\n    \"confirmDeleteVirtualEnv\": \"确认删除虚拟环境吗？此操作无法恢复。\",\n    \"commandLineTip\": \"请确定模型名称是否一致。\",\n    \"featured\": \"推荐和收藏\",\n    \"all\": \"全部\",\n    \"cancelledSuccessfully\": \"取消成功!\",\n    \"mustBeUnique\": \"{{key}} 必须唯一\",\n    \"update\": \"更新\",\n    \"launchProgress\": \"启动进度\",\n    \"initializing\": \"初始化中...\",\n    \"moreDetails\": \"更多详情\"\n  },\n  \"modelReplicaDetails\": {\n    \"title\": \"模型副本详情\",\n    \"modelUid\": \"模型 UID\",\n    \"replicaId\": \"副本 ID\",\n    \"workerAddress\": \"工作节点地址\",\n    \"status\": \"状态\",\n    \"createdTime\": \"创建时间\",\n    \"noReplicaInfo\": \"暂无副本信息\",\n    \"errors\": \"错误\",\n    \"replica\": \"副本\",\n    \"close\": \"关闭\"\n  },\n  \"runningModels\": {\n    \"name\": \"名称\",\n    \"address\": \"地址\",\n    \"gpuIndexes\": \"GPU 索引\",\n    \"size\": \"大小\",\n    \"quantization\": \"量化\",\n    \"replica\": \"副本\",\n    \"actions\": \"操作\",\n    \"noRunningModels\": \"没有运行中的模型\",\n    \"noRunningModelsMatches\": \"没有匹配的运行模型\",\n    \"copy\": \"复制\",\n    \"copied\": \"已复制!\",\n    \"copyFailed\": \"复制失败\",\n    \"viewDetails\": \"查看详情\"\n  },\n  \"registerModel\": {\n    \"modelName\": \"模型名称\",\n    \"modelDescription\": \"模型描述（可选）\",\n    \"contextLength\": \"上下文长度\",\n    \"dimensions\": \"维度\",\n    \"maxTokens\": \"最大 token 数\",\n    \"modelPath\": \"模型路径\",\n    \"modelLanguages\": \"模型语言\",\n    \"languages\": \"语言\",\n    \"multilingual\": \"多语言\",\n    \"modelAbilities\": \"模型能力\",\n    \"modelFamily\": \"模型系列\",\n    \"chatTemplate\": \"聊天模板\",\n    \"test\": \"测试\",\n    \"testResult\": \"测试结果\",\n    \"noTestResults\": \"没有测试结果...\",\n    \"stopTokenIds\": \"停止token ID\",\n    \"stop\": \"停止\",\n    \"reasoningStartTag\": \"推理开始标签\",\n    \"reasoningEndTag\": \"推理结束标签\",\n    \"toolParser\": \"工具解析器\",\n    \"launcher\": \"启动器\",\n    \"launcherArguments\": \"启动器参数（可选）\",\n    \"edit\": \"编辑\",\n    \"cancel\": \"取消\",\n    \"registerModel\": \"注册模型\",\n    \"messagesExample\": \"消息示例\",\n    \"JSONFormat\": \"JSON 格式\",\n    \"modelSpecs\": \"模型规格\",\n    \"modelSizeBillions\": \"模型大小（以十亿为单位）\",\n    \"quantization\": \"量化\",\n    \"quantizationOptional\": \"量化（可选）\",\n    \"delete\": \"删除\",\n    \"controlnet\": \"控制网\",\n    \"packages\": \"虚拟环境安装包\",\n    \"more\": \"更多\",\n    \"modelFormat\": \"模型格式\",\n    \"enterNumberGreaterThanZero\": \"请输入大于 0 的数字。\",\n    \"carefulQuantizationForModelRegistration\": \"对于 GPTQ/AWQ/FP8/MLX 模型，请小心填写与您要注册的模型对应的量化方式。\",\n    \"quantizationCannotBeEmpty\": \"量化方式不能为空。\",\n    \"enterInteger\": \"请输入一个整数。\",\n    \"enterIntegerGreaterThanZero\": \"请输入大于 0 的整数。\",\n    \"showCustomJsonConfig\": \"显示由 API 使用的自定义 JSON 配置\",\n    \"packUp\": \"收起\",\n    \"unfold\": \"展开\",\n    \"copyAll\": \"复制全部\",\n    \"alphanumericWithHyphensUnderscores\": \"字母数字字符，连字符和下划线应正确放置。不能与任何内置模型名称匹配。\",\n    \"chooseBuiltInOrCustomModel\": \"您可以选择内置模型或输入自定义模型。\",\n    \"chooseOnlyBuiltInModel\": \"您只能从内置模型中选择。\",\n    \"provideModelDirectoryPath\": \"提供模型目录路径。\",\n    \"provideModelLauncher\": \"提供模型启动器。\",\n    \"jsonArgumentsForLauncher\": \"一个 JSON 格式的字典，表示传递给启动器的参数。\",\n    \"provideModelDirectoryOrFilePath\": \"对于 PyTorch，提供模型目录。对于 GGUF，提供模型文件路径。\",\n    \"ensureChatTemplatePassesTest\": \"请确保通过点击右侧的测试按钮，使此聊天模板通过测试。请注意，此测试可能无法涵盖所有情况，只会用于最基本的情况。\",\n    \"testFailurePreventsChatWorking\": \"请注意，未通过测试可能会导致聊天无法正常工作。\",\n    \"stopControlForChatModels\": \"整数类型，用于控制聊天模型的停止。\",\n    \"stopControlStringForChatModels\": \"字符串类型，用于控制聊天模型的停止。\",\n    \"enterJsonFormattedDictionary\": \"请输入 JSON 格式的字典。\",\n    \"autoFill\": \"自动填充\",\n    \"fillInModelPathFirst\": \"请先填写模型路径\",\n    \"fillInModelFamilyFirst\": \"请先选择模型系列\"\n  },\n  \"clusterInfo\": {\n    \"supervisor\": \"主管\",\n    \"workers\": \"工作节点\",\n    \"workerDetails\": \"工作节点详情\",\n    \"count\": \"数量\",\n    \"cpuInfo\": \"CPU 信息\",\n    \"usage\": \"使用率：\",\n    \"total\": \"总计\",\n    \"cpuMemoryInfo\": \"CPU 内存信息\",\n    \"version\": \"版本\",\n    \"release\": \"发布：\",\n    \"commit\": \"提交：\",\n    \"gpuInfo\": \"GPU 信息\",\n    \"gpuMemoryInfo\": \"GPU 内存信息\",\n    \"address\": \"地址\",\n    \"item\": \"项\",\n    \"value\": \"值\",\n    \"nodeType\": \"节点类型\",\n    \"cpuUsage\": \"CPU 使用率\",\n    \"cpuTotal\": \"CPU 总数\",\n    \"memUsage\": \"内存使用率\",\n    \"memTotal\": \"内存总量\",\n    \"gpuCount\": \"GPU 数量\",\n    \"gpuMemUsage\": \"GPU 内存使用率\",\n    \"gpuMemTotal\": \"GPU 内存总量\",\n    \"worker\": \"工作节点\"\n  },\n  \"components\": {\n    \"suggestsCommonParameters\": \"提示常用参数，也允许输入其他参数\",\n    \"warning\": \"警告\",\n    \"ok\": \"确定\",\n    \"cancel\": \"取消\"\n  }\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/router/index.js",
    "content": "import { useContext, useEffect, useState } from 'react'\nimport { Navigate, useRoutes } from 'react-router-dom'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ApiContext } from '../components/apiContext'\nimport Layout from '../scenes/_layout'\nimport ClusterInfo from '../scenes/cluster_info'\nimport LaunchModel from '../scenes/launch_model'\nimport Login from '../scenes/login/login'\nimport RegisterModel from '../scenes/register_model'\nimport RunningModels from '../scenes/running_models'\n\nconst LoginAuth = () => {\n  const [authority, setAuthority] = useState(true)\n\n  const navigate = useNavigate()\n  const { endPoint } = useContext(ApiContext)\n\n  useEffect(() => {\n    fetch(endPoint + '/v1/cluster/auth', {\n      method: 'GET',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n    }).then((res) => {\n      if (res.ok) {\n        res.json().then((data) => {\n          setAuthority(data.auth)\n          sessionStorage.setItem('auth', String(data.auth)) // sessionStorage only can set string value\n        })\n      }\n    })\n  }, [])\n\n  useEffect(() => {\n    if (!authority) navigate('/launch_model/llm')\n  }, [authority])\n\n  return <Login />\n}\n\nconst routes = [\n  {\n    path: '/',\n    element: <Layout />,\n    children: [\n      {\n        path: '/',\n        element: <Navigate to=\"launch_model/llm\" replace />,\n      },\n      {\n        path: 'launch_model/:Modeltype/:subType?',\n        element: <LaunchModel />,\n      },\n      {\n        path: 'running_models/:runningModelType',\n        element: <RunningModels />,\n      },\n      {\n        path: 'register_model/:registerModelType/:model_name?',\n        element: <RegisterModel />,\n      },\n      {\n        path: 'cluster_info',\n        element: <ClusterInfo />,\n      },\n    ],\n  },\n  {\n    path: '/login',\n    element: <LoginAuth />,\n  },\n  {\n    path: '*',\n    element: <Navigate to=\"launch_model/llm\" replace />,\n  },\n]\nconst WraperRoutes = () => {\n  let element = useRoutes(routes)\n  return element\n}\n\nexport default WraperRoutes\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/_layout/index.js",
    "content": "import { Box } from '@mui/material'\nimport React from 'react'\nimport { Outlet } from 'react-router-dom'\n\nimport MenuSide from '../../components/MenuSide'\n\nconst Layout = () => {\n  return (\n    <Box display=\"flex\" width=\"100%\" height=\"100%\">\n      <MenuSide />\n      <Box flexGrow={1}>\n        <Outlet />\n      </Box>\n    </Box>\n  )\n}\n\nexport default Layout\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/cluster_info/index.js",
    "content": "import { Box } from '@mui/material'\nimport Paper from '@mui/material/Paper'\nimport Grid from '@mui/material/Unstable_Grid2'\nimport React, { useContext, useEffect } from 'react'\nimport { useCookies } from 'react-cookie'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ApiContext } from '../../components/apiContext'\nimport TableTitle from '../../components/tableTitle'\nimport Title from '../../components/Title'\nimport { isValidBearerToken } from '../../components/utils'\nimport NodeInfo from './nodeInfo'\n\nconst ClusterInfo = () => {\n  const endPoint = useContext(ApiContext).endPoint\n  const [cookie] = useCookies(['token'])\n  const navigate = useNavigate()\n  const { t } = useTranslation()\n\n  useEffect(() => {\n    if (\n      sessionStorage.getItem('auth') === 'true' &&\n      !isValidBearerToken(sessionStorage.getItem('token')) &&\n      !isValidBearerToken(cookie.token)\n    ) {\n      navigate('/login', { replace: true })\n    }\n  }, [cookie.token])\n\n  const handleGoBack = () => {\n    const lastUrl = sessionStorage.getItem('lastActiveUrl')\n    if (lastUrl === 'launch_model') {\n      navigate(sessionStorage.getItem('modelType'))\n    } else if (lastUrl === 'running_models') {\n      navigate(sessionStorage.getItem('runningModelType'))\n    } else if (lastUrl === 'register_model') {\n      navigate(sessionStorage.getItem('registerModelType'))\n    } else {\n      navigate('/launch_model/llm')\n    }\n  }\n\n  return (\n    <Box\n      sx={{\n        height: '100%',\n        width: '100%',\n        padding: '20px 20px 0 20px',\n      }}\n    >\n      <Title title={t('menu.clusterInfo')} />\n      <Grid container spacing={3} style={{ width: '100%' }}>\n        <Grid item xs={12}>\n          <Paper\n            sx={{\n              padding: 2,\n              display: 'flex',\n              overflow: 'auto',\n              flexDirection: 'column',\n            }}\n          >\n            <TableTitle>{t('clusterInfo.supervisor')}</TableTitle>\n            <NodeInfo\n              nodeRole=\"Supervisor\"\n              endpoint={endPoint}\n              cookie={cookie}\n              handleGoBack={handleGoBack}\n              t={t}\n            />\n          </Paper>\n        </Grid>\n        <Grid item xs={12}>\n          <Paper\n            sx={{\n              padding: 2,\n              display: 'flex',\n              overflow: 'auto',\n              flexDirection: 'column',\n            }}\n          >\n            <TableTitle>{t('clusterInfo.workers')}</TableTitle>\n            <NodeInfo\n              nodeRole=\"Worker\"\n              endpoint={endPoint}\n              cookie={cookie}\n              handleGoBack={handleGoBack}\n              t={t}\n            />\n          </Paper>\n        </Grid>\n        <Grid item xs={12}>\n          <Paper\n            sx={{\n              padding: 2,\n              display: 'flex',\n              overflow: 'auto',\n              flexDirection: 'column',\n            }}\n          >\n            <TableTitle>{t('clusterInfo.workerDetails')}</TableTitle>\n            <NodeInfo\n              nodeRole=\"Worker-Details\"\n              endpoint={endPoint}\n              cookie={cookie}\n              handleGoBack={handleGoBack}\n              t={t}\n            />\n          </Paper>\n        </Grid>\n      </Grid>\n    </Box>\n  )\n}\n\nexport default ClusterInfo\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/cluster_info/nodeInfo.js",
    "content": "import Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport Grid from '@mui/material/Unstable_Grid2'\nimport PropTypes from 'prop-types'\nimport React from 'react'\n\nimport fetchWrapper from '../../components/fetchWrapper'\nimport { toReadableSize } from '../../components/utils'\nimport { StyledTableCell, StyledTableRow } from './style'\n\nclass NodeInfo extends React.Component {\n  constructor(props) {\n    super(props)\n    this.nodeRole = props.nodeRole\n    this.endpoint = props.endpoint\n    this.state = {\n      version: {},\n      info: [],\n    }\n    this.t = props.t\n  }\n\n  refreshInfo() {\n    if (\n      this.props.cookie.token === '' ||\n      this.props.cookie.token === undefined ||\n      (this.props.cookie.token !== 'no_auth' &&\n        !sessionStorage.getItem('token'))\n    ) {\n      return\n    }\n    fetchWrapper\n      .get('/v1/cluster/info?detailed=true')\n      .then((data) => {\n        const { state } = this\n        state['info'] = data\n        this.setState(state)\n      })\n      .catch((error) => {\n        console.error('Error:', error)\n        if (error.response.status == 403) {\n          this.props.handleGoBack()\n        }\n      })\n\n    if (JSON.stringify(this.state.version) === '{}') {\n      fetchWrapper\n        .get('/v1/cluster/version')\n        .then((data) => {\n          const { state } = this\n          state['version'] = {\n            release: 'v' + data['version'],\n            commit: data['full-revisionid'],\n          }\n          this.setState(state)\n        })\n        .catch((error) => {\n          console.error('Error:', error)\n          if (error.response.status == 403) {\n            this.props.handleGoBack()\n          }\n        })\n    }\n  }\n\n  componentDidMount() {\n    this.interval = setInterval(() => this.refreshInfo(), 5000)\n    this.refreshInfo()\n  }\n\n  componentWillUnmount() {\n    clearInterval(this.interval)\n  }\n\n  render() {\n    if (this.state === undefined || this.state['info'] === []) {\n      return <div>Loading</div>\n    }\n\n    if (this.nodeRole !== 'Worker-Details') {\n      const roleData = this.state['info'].filter(\n        (obj) => obj['node_type'] === this.nodeRole\n      )\n\n      const sum = (arr) => {\n        return arr.reduce((a, b) => a + b, 0)\n      }\n\n      const gatherResourceStats = (prop) =>\n        sum(roleData.map((obj) => obj[prop]))\n\n      const resourceStats = {\n        cpu_total: gatherResourceStats('cpu_count'),\n        cpu_avail: gatherResourceStats('cpu_available'),\n        memory_total: gatherResourceStats('mem_total'),\n        memory_avail: gatherResourceStats('mem_available'),\n        gpu_total: gatherResourceStats('gpu_count'),\n        gpu_memory_total: gatherResourceStats('gpu_vram_total'),\n        gpu_memory_avail: gatherResourceStats('gpu_vram_available'),\n      }\n\n      //for all cases, we will at least have cpu information available.\n      resourceStats.cpu_used = resourceStats.cpu_total - resourceStats.cpu_avail\n      resourceStats.memory_used =\n        resourceStats.memory_total - resourceStats.memory_avail\n\n      const row_count = (\n        <StyledTableRow>\n          <StyledTableCell>{this.t('clusterInfo.count')}</StyledTableCell>\n          <StyledTableCell>\n            <Grid container>\n              <Grid>{roleData.length}</Grid>\n            </Grid>\n          </StyledTableCell>\n        </StyledTableRow>\n      )\n\n      const CPU_row = (\n        <StyledTableRow>\n          <StyledTableCell>{this.t('clusterInfo.cpuInfo')}</StyledTableCell>\n          <StyledTableCell>\n            <Grid container>\n              <Grid xs={4}>\n                {this.t('clusterInfo.usage')}{' '}\n                {resourceStats.cpu_used.toFixed(2)}\n              </Grid>\n              <Grid xs={8}>\n                {this.t('clusterInfo.total')}{' '}\n                {resourceStats.cpu_total.toFixed(2)}\n              </Grid>\n            </Grid>\n          </StyledTableCell>\n        </StyledTableRow>\n      )\n\n      const CPU_Memory_Info_row = (\n        <StyledTableRow>\n          <StyledTableCell>\n            {this.t('clusterInfo.cpuMemoryInfo')}\n          </StyledTableCell>\n          <StyledTableCell>\n            <Grid container>\n              <Grid xs={4}>\n                {this.t('clusterInfo.usage')}{' '}\n                {toReadableSize(resourceStats.memory_used)}\n              </Grid>\n              <Grid xs={8}>\n                {this.t('clusterInfo.total')}{' '}\n                {toReadableSize(resourceStats.memory_total)}\n              </Grid>\n            </Grid>\n          </StyledTableCell>\n        </StyledTableRow>\n      )\n\n      const version_row = (\n        <StyledTableRow>\n          <StyledTableCell>{this.t('clusterInfo.version')}</StyledTableCell>\n          <StyledTableCell>\n            <Grid container>\n              <Grid xs={4}>\n                {this.t('clusterInfo.release')} {this.state.version.release}\n              </Grid>\n              <Grid xs={8}>\n                {this.t('clusterInfo.commit')} {this.state.version.commit}\n              </Grid>\n            </Grid>\n          </StyledTableCell>\n        </StyledTableRow>\n      )\n\n      let table_bodies\n      //case that we do not have GPU presents.\n      if (resourceStats.gpu_memory_total === 0) {\n        table_bodies = [row_count, CPU_row, CPU_Memory_Info_row, version_row]\n      } else {\n        resourceStats.gpu_memory_used =\n          resourceStats.gpu_memory_total - resourceStats.gpu_memory_avail\n\n        const GPU_row = (\n          <StyledTableRow>\n            <StyledTableCell>{this.t('clusterInfo.gpuInfo')}</StyledTableCell>\n            <StyledTableCell>\n              <Grid container>\n                <Grid xs={12}>\n                  {this.t('clusterInfo.total')}{' '}\n                  {resourceStats.gpu_total.toFixed(2)}\n                </Grid>\n              </Grid>\n            </StyledTableCell>\n          </StyledTableRow>\n        )\n\n        const GPU_Memory_Info_row = (\n          <StyledTableRow>\n            <StyledTableCell>\n              {this.t('clusterInfo.gpuMemoryInfo')}\n            </StyledTableCell>\n            <StyledTableCell>\n              <Grid container>\n                <Grid xs={4}>\n                  {this.t('clusterInfo.usage')}{' '}\n                  {toReadableSize(resourceStats.gpu_memory_used)}\n                </Grid>\n                <Grid xs={8}>\n                  {this.t('clusterInfo.total')}{' '}\n                  {toReadableSize(resourceStats.gpu_memory_total)}\n                </Grid>\n              </Grid>\n            </StyledTableCell>\n          </StyledTableRow>\n        )\n\n        table_bodies = [\n          row_count,\n          CPU_row,\n          CPU_Memory_Info_row,\n          GPU_row,\n          GPU_Memory_Info_row,\n          version_row,\n        ]\n      }\n\n      if (this.nodeRole === 'Supervisor') {\n        const supervisor_addr_row = (\n          <StyledTableRow>\n            <StyledTableCell>{this.t('clusterInfo.address')}</StyledTableCell>\n            <StyledTableCell>\n              <Grid container>\n                <Grid>{roleData[0] ? roleData[0]['ip_address'] : '-'}</Grid>\n              </Grid>\n            </StyledTableCell>\n          </StyledTableRow>\n        )\n        table_bodies.splice(1, 0, supervisor_addr_row)\n      }\n\n      return (\n        <Table size=\"small\">\n          <TableHead>\n            <TableRow>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.item')}\n              </StyledTableCell>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                <Grid container>\n                  <Grid>{this.t('clusterInfo.value')}</Grid>\n                </Grid>\n              </StyledTableCell>\n            </TableRow>\n          </TableHead>\n          <TableBody>{table_bodies}</TableBody>\n        </Table>\n      )\n    } else {\n      const workerData = this.state['info'].filter(\n        (obj) => obj['node_type'] === 'Worker'\n      )\n\n      return (\n        <Table size=\"small\">\n          <TableHead>\n            <TableRow>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.nodeType')}\n              </StyledTableCell>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.address')}\n              </StyledTableCell>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.cpuUsage')}\n              </StyledTableCell>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.cpuTotal')}\n              </StyledTableCell>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.memUsage')}\n              </StyledTableCell>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.memTotal')}\n              </StyledTableCell>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.gpuCount')}\n              </StyledTableCell>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.gpuMemUsage')}\n              </StyledTableCell>\n              <StyledTableCell style={{ fontWeight: 'bolder' }}>\n                {this.t('clusterInfo.gpuMemTotal')}\n              </StyledTableCell>\n            </TableRow>\n          </TableHead>\n          <TableBody>\n            {workerData.map((row) => (\n              <StyledTableRow>\n                <StyledTableCell>\n                  {this.t('clusterInfo.worker')}\n                </StyledTableCell>\n                <StyledTableCell>{row['ip_address']}</StyledTableCell>\n                <StyledTableCell>\n                  {(row['cpu_count'] - row['cpu_available']).toFixed(2)}\n                </StyledTableCell>\n                <StyledTableCell>{row['cpu_count'].toFixed(2)}</StyledTableCell>\n                <StyledTableCell>\n                  {toReadableSize(row['mem_total'] - row['mem_available'])}\n                </StyledTableCell>\n                <StyledTableCell>\n                  {toReadableSize(row['mem_total'])}\n                </StyledTableCell>\n                <StyledTableCell>{row['gpu_count'].toFixed(2)}</StyledTableCell>\n                <StyledTableCell>\n                  {toReadableSize(\n                    row['gpu_vram_total'] - row['gpu_vram_available']\n                  )}\n                </StyledTableCell>\n                <StyledTableCell>\n                  {toReadableSize(row['gpu_vram_total'])}\n                </StyledTableCell>\n              </StyledTableRow>\n            ))}\n          </TableBody>\n        </Table>\n      )\n    }\n  }\n}\n\nNodeInfo.propTypes = {\n  nodeRole: PropTypes.string,\n  endpoint: PropTypes.string,\n}\n\nexport default NodeInfo\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/cluster_info/style.js",
    "content": "import { createTheme, tableCellClasses } from '@mui/material'\nimport Paper from '@mui/material/Paper'\nimport TableCell from '@mui/material/TableCell'\nimport TableRow from '@mui/material/TableRow'\nimport { styled } from '@mui/system'\n\nexport const theme = createTheme()\n\nexport const StyledTableCell = styled(TableCell)(() => ({\n  [`&.${tableCellClasses.body}`]: {\n    fontSize: 14,\n  },\n}))\n\nexport const StyledTableRow = styled(TableRow)(({ theme }) => ({\n  '&:nth-of-type(odd)': {\n    backgroundColor: theme.palette.action.hover,\n  },\n  // hide last border\n  '&:last-child td, &:last-child th': {\n    border: 0,\n  },\n}))\n\nexport const StyledPaper = styled(Paper)({\n  padding: theme.spacing(2),\n  display: 'flex',\n  overflow: 'auto',\n  flexDirection: 'column',\n})\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/LaunchModel.js",
    "content": "import {\n  Box,\n  Chip,\n  CircularProgress,\n  FormControl,\n  InputLabel,\n  MenuItem,\n  Select,\n} from '@mui/material'\nimport React, {\n  forwardRef,\n  useCallback,\n  useContext,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from 'react'\nimport { useCookies } from 'react-cookie'\nimport { useTranslation } from 'react-i18next'\n\nimport { ApiContext } from '../../components/apiContext'\nimport fetchWrapper from '../../components/fetchWrapper'\nimport HotkeyFocusTextField from '../../components/hotkeyFocusTextField'\nimport LaunchModelDrawer from './components/launchModelDrawer'\nimport ModelCard from './modelCard'\n\n// Toggle pagination globally for this page. Set to false to disable pagination and load all items.\nconst ENABLE_PAGINATION = false\n\nconst LaunchModelComponent = forwardRef(({ modelType, gpuAvailable }, ref) => {\n  const { isCallingApi, setIsCallingApi, endPoint } = useContext(ApiContext)\n  const { isUpdatingModel } = useContext(ApiContext)\n  const { setErrorMsg } = useContext(ApiContext)\n  const [cookie] = useCookies(['token'])\n\n  const [registrationData, setRegistrationData] = useState([])\n  // States used for filtering\n  const [searchTerm, setSearchTerm] = useState('')\n  const [status, setStatus] = useState('')\n  const [statusArr, setStatusArr] = useState([])\n  const [collectionArr, setCollectionArr] = useState([])\n  const [filterArr, setFilterArr] = useState([])\n  const { t } = useTranslation()\n  const [modelAbilityData, setModelAbilityData] = useState({\n    type: modelType,\n    modelAbility: '',\n    options: [],\n  })\n  const [selectedModel, setSelectedModel] = useState(null)\n  const [isOpenLaunchModelDrawer, setIsOpenLaunchModelDrawer] = useState(false)\n\n  // Pagination status\n  const [displayedData, setDisplayedData] = useState([])\n  // Virtual environments data\n  const [virtualEnvs, setVirtualEnvs] = useState([])\n  const [currentPage, setCurrentPage] = useState(1)\n  const [hasMore, setHasMore] = useState(true)\n  const itemsPerPage = 20\n  const loaderRef = useRef(null)\n\n  const filter = useCallback(\n    (registration) => {\n      if (searchTerm !== '') {\n        if (!registration || typeof searchTerm !== 'string') return false\n        const modelName = registration.model_name\n          ? registration.model_name.toLowerCase()\n          : ''\n        const modelDescription = registration.model_description\n          ? registration.model_description.toLowerCase()\n          : ''\n\n        if (\n          !modelName.includes(searchTerm.toLowerCase()) &&\n          !modelDescription.includes(searchTerm.toLowerCase())\n        ) {\n          return false\n        }\n      }\n\n      if (\n        modelAbilityData.modelAbility &&\n        ((Array.isArray(registration.model_ability) &&\n          registration.model_ability.indexOf(modelAbilityData.modelAbility) <\n            0) ||\n          (typeof registration.model_ability === 'string' &&\n            registration.model_ability !== modelAbilityData.modelAbility))\n      )\n        return false\n\n      if (statusArr.length === 1) {\n        if (statusArr[0] === 'cached') {\n          const judge =\n            registration.model_specs?.some((spec) => filterCache(spec)) ||\n            registration?.cache_status\n          return judge\n        } else {\n          return collectionArr?.includes(registration.model_name)\n        }\n      } else if (statusArr.length > 1) {\n        const judge =\n          registration.model_specs?.some((spec) => filterCache(spec)) ||\n          registration?.cache_status\n        return judge && collectionArr?.includes(registration.model_name)\n      }\n\n      return true\n    },\n    [searchTerm, collectionArr, modelAbilityData.modelAbility, statusArr]\n  )\n\n  const filterCache = useCallback((spec) => {\n    if (Array.isArray(spec.cache_status)) {\n      return spec.cache_status?.some((cs) => cs)\n    } else {\n      return spec.cache_status === true\n    }\n  }, [])\n\n  function getUniqueModelAbilities(arr) {\n    const uniqueAbilities = new Set()\n\n    arr.forEach((item) => {\n      if (Array.isArray(item.model_ability)) {\n        item.model_ability.forEach((ability) => {\n          uniqueAbilities.add(ability)\n        })\n      }\n    })\n\n    return Array.from(uniqueAbilities)\n  }\n\n  const update = () => {\n    if (\n      isCallingApi ||\n      isUpdatingModel ||\n      (cookie.token !== 'no_auth' && !sessionStorage.getItem('token'))\n    )\n      return\n\n    try {\n      setIsCallingApi(true)\n\n      // Fetch both model registrations and virtual environments in parallel\n      Promise.all([\n        fetchWrapper.get(`/v1/model_registrations/${modelType}?detailed=true`),\n        fetchWrapper.get('/v1/virtualenvs').catch(() => ({ list: [] })), // Fallback for virtual env API\n      ])\n        .then(([modelData, virtualEnvData]) => {\n          const builtinRegistrations = modelData.filter((v) => v.is_builtin)\n          setModelAbilityData({\n            ...modelAbilityData,\n            options: getUniqueModelAbilities(builtinRegistrations),\n          })\n          setRegistrationData(builtinRegistrations)\n          setVirtualEnvs(virtualEnvData.list || [])\n          const collectionData = JSON.parse(\n            localStorage.getItem('collectionArr')\n          )\n          setCollectionArr(collectionData)\n\n          // Reset pagination status\n          setCurrentPage(1)\n          setHasMore(true)\n        })\n        .catch((error) => {\n          console.error('Error:', error)\n          if (error.response.status !== 403 && error.response.status !== 401) {\n            setErrorMsg(error.message)\n          }\n        })\n    } catch (error) {\n      console.error('Error:', error)\n    } finally {\n      setIsCallingApi(false)\n    }\n  }\n\n  useEffect(() => {\n    update()\n  }, [cookie.token])\n\n  // Update pagination data\n  const updateDisplayedData = useCallback(() => {\n    const filteredData = registrationData.filter((registration) =>\n      filter(registration)\n    )\n\n    const sortedData = [...filteredData].sort((a, b) => {\n      const isFavA =\n        Array.isArray(collectionArr) && collectionArr.includes(a.model_name)\n      const isFavB =\n        Array.isArray(collectionArr) && collectionArr.includes(b.model_name)\n      const rankA = a.featured === true ? 0 : isFavA ? 1 : 2\n      const rankB = b.featured === true ? 0 : isFavB ? 1 : 2\n      return rankA - rankB\n    })\n\n    // If pagination is disabled, show all data at once\n    if (!ENABLE_PAGINATION) {\n      setDisplayedData(sortedData)\n      setHasMore(false)\n      return\n    }\n\n    const startIndex = (currentPage - 1) * itemsPerPage\n    const endIndex = currentPage * itemsPerPage\n    const newData = sortedData.slice(startIndex, endIndex)\n\n    if (currentPage === 1) {\n      setDisplayedData(newData)\n    } else {\n      setDisplayedData((prev) => [...prev, ...newData])\n    }\n    setHasMore(endIndex < sortedData.length)\n  }, [registrationData, filter, currentPage, itemsPerPage])\n\n  useEffect(() => {\n    updateDisplayedData()\n  }, [updateDisplayedData])\n\n  // Reset pagination when filters change\n  useEffect(() => {\n    setCurrentPage(1)\n    setHasMore(true)\n  }, [searchTerm, modelAbilityData.modelAbility, status])\n\n  // Infinite scroll observer\n  useEffect(() => {\n    if (!ENABLE_PAGINATION) return\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        if (entries[0].isIntersecting && hasMore && !isCallingApi) {\n          setCurrentPage((prev) => prev + 1)\n        }\n      },\n      { threshold: 1.0 }\n    )\n\n    if (loaderRef.current) {\n      observer.observe(loaderRef.current)\n    }\n\n    return () => {\n      if (loaderRef.current) {\n        observer.unobserve(loaderRef.current)\n      }\n    }\n  }, [hasMore, isCallingApi, currentPage])\n\n  const getCollectionArr = (data) => {\n    setCollectionArr(data)\n  }\n\n  const handleChangeFilter = (type, value) => {\n    const typeMap = {\n      modelAbility: {\n        setter: (value) => {\n          setModelAbilityData({\n            ...modelAbilityData,\n            modelAbility: value,\n          })\n        },\n        filterArr: modelAbilityData.options,\n      },\n      status: { setter: setStatus, filterArr: [] },\n    }\n\n    const { setter, filterArr: excludeArr } = typeMap[type] || {}\n    if (!setter) return\n\n    setter(value)\n\n    const updatedFilterArr = Array.from(\n      new Set([\n        ...filterArr.filter((item) => !excludeArr.includes(item)),\n        value,\n      ])\n    )\n\n    setFilterArr(updatedFilterArr)\n\n    if (type === 'status') {\n      setStatusArr(\n        updatedFilterArr.filter(\n          (item) => ![...modelAbilityData.options].includes(item)\n        )\n      )\n    }\n\n    // Reset pagination status\n    setDisplayedData([])\n    setCurrentPage(1)\n    setHasMore(true)\n  }\n\n  const handleDeleteChip = (item) => {\n    setFilterArr(\n      filterArr.filter((subItem) => {\n        return subItem !== item\n      })\n    )\n    if (item === modelAbilityData.modelAbility) {\n      setModelAbilityData({\n        ...modelAbilityData,\n        modelAbility: '',\n      })\n    } else {\n      setStatusArr(\n        statusArr.filter((subItem) => {\n          return subItem !== item\n        })\n      )\n      if (item === status) setStatus('')\n    }\n\n    // Reset pagination status\n    setCurrentPage(1)\n    setHasMore(true)\n  }\n\n  function getLabel(item) {\n    const translation = t(`launchModel.${item}`)\n    return translation === `launchModel.${item}` ? item : translation\n  }\n\n  useImperativeHandle(ref, () => ({\n    update,\n  }))\n\n  return (\n    <Box m=\"20px\">\n      <div\n        style={{\n          display: 'grid',\n          gridTemplateColumns: (() => {\n            const hasAbility = modelAbilityData.options.length > 0\n            const columns = hasAbility\n              ? ['150px', '150px', '1fr']\n              : ['150px', '1fr']\n            return columns.join(' ')\n          })(),\n          columnGap: '20px',\n          margin: '30px 2rem',\n          alignItems: 'center',\n        }}\n      >\n        {modelAbilityData.options.length > 0 && (\n          <FormControl sx={{ minWidth: 120 }} size=\"small\">\n            <InputLabel id=\"ability-select-label\">\n              {t('launchModel.modelAbility')}\n            </InputLabel>\n            <Select\n              id=\"ability\"\n              labelId=\"ability-select-label\"\n              label=\"Model Ability\"\n              onChange={(e) =>\n                handleChangeFilter('modelAbility', e.target.value)\n              }\n              value={modelAbilityData.modelAbility}\n              size=\"small\"\n              sx={{ width: '150px' }}\n            >\n              {modelAbilityData.options.map((item) => (\n                <MenuItem key={item} value={item}>\n                  {getLabel(item)}\n                </MenuItem>\n              ))}\n            </Select>\n          </FormControl>\n        )}\n        <FormControl sx={{ minWidth: 120 }} size=\"small\">\n          <InputLabel id=\"select-status\">{t('launchModel.status')}</InputLabel>\n          <Select\n            id=\"status\"\n            labelId=\"select-status\"\n            label={t('launchModel.status')}\n            onChange={(e) => handleChangeFilter('status', e.target.value)}\n            value={status}\n            size=\"small\"\n            sx={{ width: '150px' }}\n          >\n            <MenuItem value=\"cached\">{t('launchModel.cached')}</MenuItem>\n            <MenuItem value=\"favorite\">{t('launchModel.favorite')}</MenuItem>\n          </Select>\n        </FormControl>\n\n        <FormControl sx={{ marginTop: 1 }} variant=\"outlined\" margin=\"normal\">\n          <HotkeyFocusTextField\n            id=\"search\"\n            type=\"search\"\n            label={t('launchModel.search')}\n            value={searchTerm}\n            onChange={(e) => {\n              setSearchTerm(e.target.value)\n            }}\n            size=\"small\"\n            hotkey=\"Enter\"\n            t={t}\n          />\n        </FormControl>\n      </div>\n      <div style={{ margin: '0 0 30px 30px' }}>\n        {filterArr.map((item, index) => (\n          <Chip\n            key={index}\n            label={getLabel(item)}\n            variant=\"outlined\"\n            size=\"small\"\n            color=\"primary\"\n            style={{ marginRight: 10 }}\n            onDelete={() => handleDeleteChip(item)}\n          />\n        ))}\n      </div>\n      <div\n        style={{\n          display: 'grid',\n          gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n          paddingLeft: '2rem',\n          gridGap: '2rem 0rem',\n        }}\n      >\n        {displayedData.map((filteredRegistration) => (\n          <ModelCard\n            key={filteredRegistration.model_name}\n            url={endPoint}\n            modelData={filteredRegistration}\n            gpuAvailable={gpuAvailable}\n            modelType={modelType}\n            onGetCollectionArr={getCollectionArr}\n            onUpdate={update}\n            virtualEnvs={virtualEnvs}\n            onClick={() => {\n              setSelectedModel(filteredRegistration)\n              setIsOpenLaunchModelDrawer(true)\n            }}\n          />\n        ))}\n      </div>\n\n      <div ref={loaderRef} style={{ height: '20px', margin: '20px 0' }}>\n        {ENABLE_PAGINATION && hasMore && !isCallingApi && (\n          <div style={{ textAlign: 'center', padding: '10px' }}>\n            <CircularProgress />\n          </div>\n        )}\n      </div>\n\n      {selectedModel && (\n        <LaunchModelDrawer\n          key={selectedModel.model_name}\n          modelData={selectedModel}\n          modelType={modelType}\n          gpuAvailable={gpuAvailable}\n          open={isOpenLaunchModelDrawer}\n          onClose={() => setIsOpenLaunchModelDrawer(false)}\n        />\n      )}\n    </Box>\n  )\n})\n\nLaunchModelComponent.displayName = 'LaunchModelComponent'\n\nexport default LaunchModelComponent\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/cachedListDialog.js",
    "content": "import { Close, Delete } from '@mui/icons-material'\nimport {\n  Box,\n  Dialog,\n  DialogContent,\n  DialogTitle,\n  IconButton,\n  Paper,\n  Table,\n  TableBody,\n  TableCell,\n  TableContainer,\n  TableHead,\n  TablePagination,\n  TableRow,\n  Tooltip,\n} from '@mui/material'\nimport { styled } from '@mui/material/styles'\nimport React, { useContext, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { ApiContext } from '../../../components/apiContext'\nimport CopyComponent from '../../../components/copyComponent'\nimport DeleteDialog from '../../../components/deleteDialog'\nimport fetchWrapper from '../../../components/fetchWrapper'\n\nconst EditCustomModel = ({ open, modelData, modelType, onClose, onUpdate }) => {\n  const { t } = useTranslation()\n  const { setErrorMsg } = useContext(ApiContext)\n  const [cachedListArr, setCachedListArr] = useState([])\n  const [page, setPage] = useState(0)\n  const [isDeleteCached, setIsDeleteCached] = useState(false)\n  const [cachedModelVersion, setCachedModelVersion] = useState('')\n\n  const StyledTableRow = styled(TableRow)(({ theme }) => ({\n    '&:nth-of-type(odd)': {\n      backgroundColor: theme.palette.action.hover,\n    },\n  }))\n\n  const emptyRows =\n    page >= 0 ? Math.max(0, (1 + page) * 5 - cachedListArr.length) : 0\n\n  const getCachedList = () => {\n    fetchWrapper\n      .get(`/v1/cache/models?model_name=${modelData.model_name}`)\n      .then((data) => {\n        setCachedListArr(data.list)\n        if (\n          page !== 0 &&\n          data.list.length &&\n          (page + 1) * 5 >= data.list.length &&\n          data.list.length % 5 === 0\n        ) {\n          setPage(data.list.length / 5 - 1)\n        }\n      })\n      .catch((error) => {\n        console.error(error)\n        if (error.response.status !== 403) {\n          setErrorMsg(error.message)\n        }\n      })\n  }\n\n  const handleDeleteCached = () => {\n    fetchWrapper\n      .delete(`/v1/cache/models?model_version=${cachedModelVersion}`)\n      .then(() => {\n        getCachedList()\n        setIsDeleteCached(false)\n      })\n      .catch((error) => {\n        console.error(error)\n        if (error.response.status !== 403) {\n          setErrorMsg(error.message)\n        }\n      })\n  }\n\n  const handleChangePage = (_, newPage) => {\n    setPage(newPage)\n  }\n\n  const handleOpenDeleteCachedDialog = (model_version) => {\n    setCachedModelVersion(model_version)\n    setIsDeleteCached(true)\n  }\n\n  const handleCloseCachedList = () => {\n    onClose()\n    onUpdate()\n  }\n\n  useEffect(() => {\n    if (open) getCachedList()\n  }, [open])\n\n  return (\n    <Dialog\n      open={open}\n      onClose={onClose}\n      maxWidth=\"xl\"\n      aria-labelledby=\"alert-dialog-title\"\n      aria-describedby=\"alert-dialog-description\"\n    >\n      <DialogTitle sx={{ m: 0, p: 2 }} id=\"customized-dialog-title\">\n        {modelData.model_name}\n      </DialogTitle>\n      <Box\n        sx={(theme) => ({\n          position: 'absolute',\n          right: 8,\n          top: 8,\n          color: theme.palette.grey[500],\n        })}\n      >\n        <Close style={{ cursor: 'pointer' }} onClick={handleCloseCachedList} />\n      </Box>\n      <DialogContent>\n        <TableContainer component={Paper}>\n          <Table\n            sx={{ minWidth: 500 }}\n            style={{ height: '500px', width: '100%' }}\n            stickyHeader\n            aria-label=\"simple pagination table\"\n          >\n            <TableHead>\n              <TableRow>\n                {modelType === 'LLM' && (\n                  <>\n                    <TableCell align=\"left\">\n                      {t('launchModel.model_format')}\n                    </TableCell>\n                    <TableCell align=\"left\">\n                      {t('launchModel.model_size_in_billions')}\n                    </TableCell>\n                    <TableCell align=\"left\">\n                      {t('launchModel.quantizations')}\n                    </TableCell>\n                  </>\n                )}\n                <TableCell align=\"left\" style={{ width: 192 }}>\n                  {t('launchModel.real_path')}\n                </TableCell>\n                <TableCell align=\"left\" style={{ width: 46 }}></TableCell>\n                <TableCell align=\"left\" style={{ width: 192 }}>\n                  {t('launchModel.path')}\n                </TableCell>\n                <TableCell align=\"left\" style={{ width: 46 }}></TableCell>\n                <TableCell\n                  align=\"left\"\n                  style={{ whiteSpace: 'nowrap', minWidth: 116 }}\n                >\n                  {t('launchModel.ipAddress')}\n                </TableCell>\n                <TableCell align=\"left\">{t('launchModel.operation')}</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody style={{ position: 'relative' }}>\n              {cachedListArr.slice(page * 5, page * 5 + 5).map((row) => (\n                <StyledTableRow style={{ maxHeight: 90 }} key={row.model_name}>\n                  {modelType === 'LLM' && (\n                    <>\n                      <TableCell component=\"th\" scope=\"row\">\n                        {row.model_format === null ? '—' : row.model_format}\n                      </TableCell>\n                      <TableCell>\n                        {row.model_size_in_billions === null\n                          ? '—'\n                          : row.model_size_in_billions}\n                      </TableCell>\n                      <TableCell>\n                        {row.quantization === null ? '—' : row.quantization}\n                      </TableCell>\n                    </>\n                  )}\n                  <TableCell>\n                    <Tooltip title={row.real_path}>\n                      <div\n                        className={\n                          modelType === 'LLM' ? 'pathBox' : 'pathBox pathBox2'\n                        }\n                      >\n                        {row.real_path}\n                      </div>\n                    </Tooltip>\n                  </TableCell>\n                  <TableCell>\n                    <CopyComponent\n                      tip={t('launchModel.copyRealPath')}\n                      text={row.real_path}\n                    />\n                  </TableCell>\n                  <TableCell>\n                    <Tooltip title={row.path}>\n                      <div\n                        className={\n                          modelType === 'LLM' ? 'pathBox' : 'pathBox pathBox2'\n                        }\n                      >\n                        {row.path}\n                      </div>\n                    </Tooltip>\n                  </TableCell>\n                  <TableCell>\n                    <CopyComponent\n                      tip={t('launchModel.copyPath')}\n                      text={row.path}\n                    />\n                  </TableCell>\n                  <TableCell>{row.actor_ip_address}</TableCell>\n                  <TableCell align={modelType === 'LLM' ? 'center' : 'left'}>\n                    <IconButton\n                      aria-label=\"delete\"\n                      size=\"large\"\n                      onClick={() =>\n                        handleOpenDeleteCachedDialog(row.model_version)\n                      }\n                    >\n                      <Delete />\n                    </IconButton>\n                  </TableCell>\n                </StyledTableRow>\n              ))}\n              {emptyRows > 0 && (\n                <TableRow style={{ height: 89.4 * emptyRows }}>\n                  <TableCell />\n                </TableRow>\n              )}\n              {cachedListArr.length === 0 && (\n                <div className=\"empty\">{t('launchModel.noCacheForNow')}</div>\n              )}\n            </TableBody>\n          </Table>\n        </TableContainer>\n        <TablePagination\n          style={{ float: 'right' }}\n          rowsPerPageOptions={[5]}\n          count={cachedListArr.length}\n          rowsPerPage={5}\n          page={page}\n          onPageChange={handleChangePage}\n        />\n      </DialogContent>\n\n      <DeleteDialog\n        text={t('launchModel.confirmDeleteCacheFiles')}\n        isDelete={isDeleteCached}\n        onHandleIsDelete={() => setIsDeleteCached(false)}\n        onHandleDelete={handleDeleteCached}\n      />\n    </Dialog>\n  )\n}\n\nexport default EditCustomModel\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/commandBuilder.js",
    "content": "import { Clear, Done, FilterNone } from '@mui/icons-material'\nimport { Tooltip } from '@mui/material'\nimport React, { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { copyToClipboard } from '../../../components/utils'\n\nconst keyMap = {\n  model_size_in_billions: '--size-in-billions',\n  download_hub: '--download_hub',\n  enable_thinking: '--enable-thinking',\n  reasoning_content: '--reasoning_content',\n  lightning_version: '--lightning_version',\n  lightning_model_path: '--lightning_model_path',\n}\n\nconst CopyComponent = ({ getData, predefinedKeys }) => {\n  const { t } = useTranslation()\n  const [copyStatus, setCopyStatus] = useState('pending')\n\n  const generateCommandLineStatement = (params) => {\n    const args = Object.entries(params)\n      .filter(\n        ([key, value]) =>\n          (predefinedKeys.includes(key) &&\n            value !== null &&\n            value !== undefined) ||\n          !predefinedKeys.includes(key)\n      )\n      .flatMap(([key, value]) => {\n        if (key === 'gpu_idx' && Array.isArray(value)) {\n          return `--gpu-idx ${value.join(',')}`\n        } else if (key === 'peft_model_config' && typeof value === 'object') {\n          const peftArgs = []\n          if (value.lora_list) {\n            peftArgs.push(\n              ...value.lora_list.map(\n                (lora) => `--lora-modules ${lora.lora_name} ${lora.local_path}`\n              )\n            )\n          }\n          if (value.image_lora_load_kwargs) {\n            peftArgs.push(\n              ...Object.entries(value.image_lora_load_kwargs).map(\n                ([k, v]) => `--image-lora-load-kwargs ${k} ${v}`\n              )\n            )\n          }\n          if (value.image_lora_fuse_kwargs) {\n            peftArgs.push(\n              ...Object.entries(value.image_lora_fuse_kwargs).map(\n                ([k, v]) => `--image-lora-fuse-kwargs ${k} ${v}`\n              )\n            )\n          }\n          return peftArgs\n        } else if (key === 'quantization_config' && typeof value === 'object') {\n          return Object.entries(value).map(\n            ([k, v]) => `--quantization-config ${k} ${v === null ? 'none' : v}`\n          )\n        } else if (key === 'envs' && typeof value === 'object') {\n          return Object.entries(value).map(([k, v]) => `--env ${k} ${v}`)\n        } else if (key === 'virtual_env_packages' && Array.isArray(value)) {\n          return value.map((pkg) => `--virtual-env-package ${pkg}`)\n        } else if (key === 'enable_virtual_env') {\n          if (value === true) return `--enable-virtual-env`\n          if (value === false) return `--disable-virtual-env`\n          return []\n        } else if (key === 'enable_thinking') {\n          if (value === true) return `--enable-thinking`\n          return []\n        } else if (predefinedKeys.includes(key)) {\n          const newKey = keyMap[key] ?? `--${key.replace(/_/g, '-')}`\n          return `${newKey} ${\n            value === false ? 'false' : value === null ? 'none' : value\n          }`\n        } else {\n          return `--${key} ${\n            value === false ? 'false' : value === null ? 'none' : value\n          }`\n        }\n      })\n      .join(' ')\n\n    return `xinference launch ${args}`\n  }\n\n  const showTooltipTemporarily = (status) => {\n    setCopyStatus(status)\n    setTimeout(() => setCopyStatus('pending'), 1500)\n  }\n\n  const handleCopy = async (event) => {\n    const text = generateCommandLineStatement(getData())\n    event.stopPropagation()\n    const textToCopy = String(text ?? '')\n    const success = await copyToClipboard(textToCopy)\n    showTooltipTemporarily(success ? 'success' : 'failed')\n  }\n\n  return (\n    <>\n      {copyStatus === 'pending' ? (\n        <Tooltip title={t('launchModel.copyToCommandLine')} placement=\"top\">\n          <FilterNone className=\"copyToCommandLine\" onClick={handleCopy} />\n        </Tooltip>\n      ) : copyStatus === 'success' ? (\n        <Done fontSize=\"small\" color=\"success\" />\n      ) : (\n        <Clear fontSize=\"small\" color=\"error\" />\n      )}\n    </>\n  )\n}\n\nexport default CopyComponent\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/dynamicFieldList.js",
    "content": "import AddCircle from '@mui/icons-material/AddCircle'\nimport DeleteIcon from '@mui/icons-material/Delete'\nimport { Autocomplete, Box, IconButton, Stack, TextField } from '@mui/material'\nimport React, { useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { ApiContext } from '../../../components/apiContext'\n\nconst DynamicFieldList = ({\n  name,\n  label,\n  mode,\n  value = [],\n  onChange,\n  keyPlaceholder = 'key',\n  valuePlaceholder = 'value',\n  keyOptions = [],\n}) => {\n  const { t } = useTranslation()\n  const { setErrorMsg } = useContext(ApiContext)\n  const [errors, setErrors] = React.useState({})\n\n  const handleAdd = () => {\n    if (value.length > 0) {\n      const lastItem = value[value.length - 1]\n      let isIncomplete = false\n\n      if (mode === 'key-value') {\n        isIncomplete = Object.values(lastItem).some((val) =>\n          typeof val === 'string'\n            ? val.trim() === ''\n            : val === undefined || val === null\n        )\n      } else if (mode === 'value') {\n        if (typeof lastItem === 'string') {\n          isIncomplete = lastItem.trim() === ''\n        } else {\n          isIncomplete = lastItem === undefined || lastItem === null\n        }\n      }\n\n      if (isIncomplete) {\n        setErrorMsg(t('launchModel.fillCompleteParametersBeforeAdding'))\n        return\n      }\n    }\n\n    const newItem =\n      mode === 'key-value'\n        ? { [keyPlaceholder]: '', [valuePlaceholder]: '' }\n        : ''\n    onChange(name, [...value, newItem])\n  }\n\n  const handleDelete = (index) => {\n    const newItems = [...value]\n    newItems.splice(index, 1)\n    onChange(name, newItems)\n  }\n\n  const handleChange = (index, field, val) => {\n    const newItems = [...value]\n    newItems[index] = { ...newItems[index], [field]: val }\n    if (field === keyPlaceholder) {\n      const errorMap = {}\n      const keys = new Map()\n\n      newItems.forEach((item, idx) => {\n        const key = item[keyPlaceholder]\n        if (!key) return\n\n        if (keys.has(key)) {\n          const firstIdx = keys.get(key)\n          errorMap[firstIdx] = t('launchModel.mustBeUnique', {\n            key: keyPlaceholder,\n          })\n          errorMap[idx] = t('launchModel.mustBeUnique', { key: keyPlaceholder })\n        } else {\n          keys.set(key, idx)\n        }\n      })\n      setErrors(errorMap)\n    }\n    onChange(name, newItems)\n  }\n\n  const handleChangeValueOnly = (index, val) => {\n    const newItems = [...value]\n    newItems[index] = val\n    onChange(name, newItems)\n  }\n\n  return (\n    <Box>\n      <Stack spacing={2}>\n        <Box\n          display=\"flex\"\n          alignItems=\"center\"\n          gap={1}\n          paddingLeft={2}\n          paddingTop={1}\n        >\n          <div>{label}</div>\n          <IconButton color=\"primary\" onClick={handleAdd}>\n            <AddCircle />\n          </IconButton>\n        </Box>\n        {value.map((item, index) => (\n          <Box\n            key={index}\n            display=\"flex\"\n            alignItems=\"start\"\n            justifyContent=\"space-between\"\n            gap={1}\n            paddingLeft={2}\n          >\n            {mode === 'key-value' ? (\n              <>\n                <Autocomplete\n                  style={{ width: '44%' }}\n                  freeSolo\n                  disablePortal\n                  options={keyOptions}\n                  groupBy={() => t('components.suggestsCommonParameters')}\n                  value={item[keyPlaceholder]}\n                  inputValue={item[keyPlaceholder]}\n                  onInputChange={(_, newValue) =>\n                    handleChange(index, keyPlaceholder, newValue)\n                  }\n                  renderInput={(params) => (\n                    <TextField\n                      {...params}\n                      className=\"textHighlight\"\n                      label={keyPlaceholder}\n                      error={!!errors[index]}\n                      helperText={errors[index]}\n                    />\n                  )}\n                />\n                <TextField\n                  className=\"textHighlight\"\n                  style={{ width: '44%' }}\n                  label={valuePlaceholder}\n                  value={item[valuePlaceholder]}\n                  onChange={(e) =>\n                    handleChange(index, valuePlaceholder, e.target.value)\n                  }\n                />\n              </>\n            ) : (\n              <TextField\n                fullWidth\n                className=\"textHighlight\"\n                label={valuePlaceholder}\n                value={item}\n                onChange={(e) => handleChangeValueOnly(index, e.target.value)}\n              />\n            )}\n            <IconButton onClick={() => handleDelete(index)} size=\"large\">\n              <DeleteIcon />\n            </IconButton>\n          </Box>\n        ))}\n      </Stack>\n    </Box>\n  )\n}\n\nexport default DynamicFieldList\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/editCustomModelDialog.js",
    "content": "import {\n  Box,\n  Button,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogTitle,\n  TextField,\n} from '@mui/material'\nimport React from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport CopyComponent from '../../../components/copyComponent'\n\nconst EditCustomModel = ({\n  open,\n  modelData,\n  onClose,\n  handleJsonDataPresentation,\n}) => {\n  const { t } = useTranslation()\n\n  return (\n    <Dialog\n      open={open}\n      onClose={onClose}\n      maxWidth=\"md\"\n      aria-labelledby=\"alert-dialog-title\"\n      aria-describedby=\"alert-dialog-description\"\n    >\n      <DialogTitle sx={{ m: 0, p: 2 }} id=\"customized-dialog-title\">\n        {modelData.model_name}\n      </DialogTitle>\n      <Box\n        sx={(theme) => ({\n          position: 'absolute',\n          right: 8,\n          top: 8,\n          color: theme.palette.grey[500],\n        })}\n      >\n        <CopyComponent\n          tip={t('launchModel.copyJson')}\n          text={JSON.stringify(modelData, null, 4)}\n        />\n      </Box>\n      <DialogContent>\n        <TextField\n          sx={{ width: '700px' }}\n          multiline\n          rows={24}\n          disabled\n          defaultValue={JSON.stringify(modelData, null, 4)}\n        />\n      </DialogContent>\n      <DialogActions>\n        <Button onClick={onClose}>{t('launchModel.cancel')}</Button>\n        <Button onClick={handleJsonDataPresentation} autoFocus>\n          {t('launchModel.edit')}\n        </Button>\n      </DialogActions>\n    </Dialog>\n  )\n}\n\nexport default EditCustomModel\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/launchModelDrawer.js",
    "content": "import {\n  ContentPasteGo,\n  ExpandLess,\n  ExpandMore,\n  RocketLaunchOutlined,\n  StopCircle,\n  UndoOutlined,\n} from '@mui/icons-material'\nimport {\n  Box,\n  Button,\n  Chip,\n  CircularProgress,\n  Collapse,\n  Drawer,\n  FormControlLabel,\n  ListItemButton,\n  ListItemText,\n  Radio,\n  RadioGroup,\n  Switch,\n  TextField,\n  Tooltip,\n  Typography,\n} from '@mui/material'\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ApiContext } from '../../../components/apiContext'\nimport fetchWrapper from '../../../components/fetchWrapper'\nimport TitleTypography from '../../../components/titleTypography'\nimport { llmAllDataKey } from '../data/data'\nimport CopyToCommandLine from './commandBuilder'\nimport DynamicFieldList from './dynamicFieldList'\nimport getModelFormConfig from './modelFormConfig'\nimport PasteDialog from './pasteDialog'\nimport Progress from './progress'\nimport SelectField from './selectField'\n\nconst enginesWithNWorker = ['SGLang', 'vLLM', 'MLX']\nconst modelEngineType = ['LLM', 'embedding', 'rerank', 'image']\n\nconst LaunchModelDrawer = ({\n  modelData,\n  modelType,\n  gpuAvailable,\n  open,\n  onClose,\n}) => {\n  const navigate = useNavigate()\n  const { t } = useTranslation()\n  const {\n    isCallingApi,\n    isUpdatingModel,\n    setErrorMsg,\n    setSuccessMsg,\n    setIsCallingApi,\n  } = useContext(ApiContext)\n  const [formData, setFormData] = useState({})\n  const [hasHistory, setHasHistory] = useState(false)\n\n  const [enginesObj, setEnginesObj] = useState({})\n  const [engineOptions, setEngineOptions] = useState([])\n  const [formatOptions, setFormatOptions] = useState([])\n  const [sizeOptions, setSizeOptions] = useState([])\n  const [quantizationOptions, setQuantizationOptions] = useState([])\n  const [multimodalProjectorOptions, setMultimodalProjectorOptions] = useState(\n    []\n  )\n  const [multimodalProjector, setMultimodalProjector] = useState([])\n  const [isOpenPasteDialog, setIsOpenPasteDialog] = useState(false)\n  const [collapseState, setCollapseState] = useState({})\n  const [isShowProgress, setIsShowProgress] = useState(false)\n  const [isShowCancel, setIsShowCancel] = useState(false)\n  const [isLoading, setIsLoading] = useState(false)\n  const [progress, setProgress] = useState(0)\n  const [checkDynamicFieldComplete, setCheckDynamicFieldComplete] = useState([])\n  const [replicaStatuses, setReplicaStatuses] = useState([])\n  const [pendingHistory, setPendingHistory] = useState(null)\n  const [hasFetchedEngines, setHasFetchedEngines] = useState(false)\n\n  const intervalRef = useRef(null)\n\n  const modelSpecs = modelData.model_specs || []\n\n  const downloadHubOptions = useMemo(\n    () => ['none', ...(modelData?.download_hubs || [])],\n    [modelData?.download_hubs]\n  )\n\n  const isCached = (spec) => {\n    if (Array.isArray(spec.cache_status)) {\n      return spec.cache_status.some((cs) => cs)\n    } else {\n      return spec.cache_status === true\n    }\n  }\n\n  const convertModelSize = (size) => {\n    return size.toString().includes('_') ? size : parseInt(size, 10)\n  }\n\n  const range = (start, end) => {\n    return new Array(end - start + 1).fill(undefined).map((_, i) => i + start)\n  }\n\n  const getNGPURange = (modelType) => {\n    if (['LLM', 'image'].includes(modelType)) {\n      return gpuAvailable > 0\n        ? ['auto', 'CPU', ...range(1, gpuAvailable)]\n        : ['auto', 'CPU']\n    } else {\n      return gpuAvailable === 0 ? ['CPU'] : ['GPU', 'CPU']\n    }\n  }\n\n  const normalizeNGPU = (value) => {\n    if (!value) return null\n\n    if (value === 'CPU') return null\n    if (value === 'auto' || value === 'GPU') return 'auto'\n\n    const num = parseInt(value, 10)\n    return isNaN(num) || num === 0 ? null : num\n  }\n\n  const handleValueType = (str) => {\n    let val = String(str).trim()\n\n    const isBracketed = (s) =>\n      (s.startsWith('{') && s.endsWith('}')) ||\n      (s.startsWith('[') && s.endsWith(']'))\n\n    const tryParseStructured = (s) => {\n      try {\n        const normalized = s\n          .replace(/\\bNone\\b/g, 'null')\n          .replace(/\\bTrue\\b/g, 'true')\n          .replace(/\\bFalse\\b/g, 'false')\n          .replace(/'([^']*)'/g, '\"$1\"')\n        return JSON.parse(normalized)\n      } catch (e) {\n        return null\n      }\n    }\n\n    if (val.toLowerCase() === 'none') {\n      return null\n    } else if (val.toLowerCase() === 'true') {\n      return true\n    } else if (val.toLowerCase() === 'false') {\n      return false\n    } else if (isBracketed(val)) {\n      const parsed = tryParseStructured(val)\n      if (parsed !== null) return parsed\n      // parsing failed: keep original string without splitting by comma\n      return val\n    } else if (val.includes(',')) {\n      return val.split(',').map((item) => item.trim())\n    } else if (val.includes('，')) {\n      return val.split('，').map((item) => item.trim())\n    } else if (\n      !Number.isNaN(Number(val)) &&\n      (val !== '' || Number(val) === 0)\n    ) {\n      return Number(val)\n    } else {\n      return val\n    }\n  }\n\n  const arrayToObject = (arr, transformValue = (v) => v) =>\n    Object.fromEntries(\n      arr.map(({ key, value }) => [key, transformValue(value)])\n    )\n\n  const handleGetHistory = () => {\n    const historyArr = JSON.parse(localStorage.getItem('historyArr')) || []\n    return historyArr.find((item) => item.model_name === modelData.model_name)\n  }\n\n  const deleteHistory = () => {\n    const arr = JSON.parse(localStorage.getItem('historyArr'))\n    const newArr = arr.filter(\n      (item) => item.model_name !== modelData.model_name\n    )\n    localStorage.setItem('historyArr', JSON.stringify(newArr))\n    setHasHistory(false)\n    setFormData({})\n    setCollapseState({})\n  }\n\n  const objectToArray = (obj) => {\n    if (!obj || typeof obj !== 'object') return []\n    return Object.entries(obj).map(([key, value]) => ({ key, value }))\n  }\n\n  const restoreNGPU = (value) => {\n    if (value === null) return 'CPU'\n    if (value === 'auto') {\n      return ['LLM', 'image'].includes(modelType) ? 'auto' : 'GPU'\n    }\n    if (typeof value === 'number') return String(value)\n    return value || 'CPU'\n  }\n\n  const stringifyStructuredForInput = (val) => {\n    if (val === null) return 'none'\n\n    if (Array.isArray(val)) {\n      const allPrimitives = val.every(\n        (item) =>\n          item === null || ['string', 'number', 'boolean'].includes(typeof item)\n      )\n      if (allPrimitives) {\n        return val.map((v) => String(v)).join(',')\n      }\n    }\n\n    try {\n      const json = JSON.stringify(val)\n      return json.replace(/\"/g, \"'\").replace(/:/g, ': ').replace(/,/g, ', ')\n    } catch (e) {\n      return String(val)\n    }\n  }\n\n  const restoreFormDataFormat = (finalData) => {\n    const result = { ...finalData }\n\n    let customData = []\n    for (let key in result) {\n      !llmAllDataKey.includes(key) &&\n        customData.push({\n          key: key,\n          value:\n            result[key] === null\n              ? 'none'\n              : typeof result[key] === 'object'\n              ? stringifyStructuredForInput(result[key])\n              : result[key],\n        })\n    }\n    if (customData.length) result.custom = customData\n\n    result.n_gpu = restoreNGPU(result.n_gpu)\n    if (result?.gpu_idx && Array.isArray(result.gpu_idx)) {\n      result.gpu_idx = result.gpu_idx.join(',')\n    }\n\n    if (result?.peft_model_config) {\n      const pmc = result.peft_model_config\n\n      if (pmc.image_lora_load_kwargs) {\n        result.image_lora_load_kwargs = objectToArray(\n          pmc.image_lora_load_kwargs\n        )\n      }\n\n      if (pmc.image_lora_fuse_kwargs) {\n        result.image_lora_fuse_kwargs = objectToArray(\n          pmc.image_lora_fuse_kwargs\n        )\n      }\n\n      if (pmc.lora_list) {\n        result.lora_list = pmc.lora_list\n      }\n\n      delete result.peft_model_config\n    }\n\n    if (\n      result?.envs &&\n      typeof result.envs === 'object' &&\n      !Array.isArray(result.envs)\n    ) {\n      result.envs = objectToArray(result.envs)\n    }\n\n    if (\n      result?.quantization_config &&\n      typeof result.quantization_config === 'object' &&\n      !Array.isArray(result.quantization_config)\n    ) {\n      result.quantization_config = objectToArray(result.quantization_config)\n    }\n\n    return result\n  }\n\n  const applyHistory = (data) => {\n    const restoredData = restoreFormDataFormat(data)\n    setFormData(restoredData)\n    const collapseFromData = getCollapseStateFromData(restoredData)\n    setCollapseState((prev) => ({ ...prev, ...collapseFromData }))\n  }\n\n  const getCollapseStateFromData = (result) => {\n    const newState = {}\n\n    if (\n      result.model_uid ||\n      result.request_limits ||\n      result.worker_ip ||\n      result.gpu_idx ||\n      result.download_hub ||\n      result.model_path\n    ) {\n      newState.nested_section_optional = true\n    }\n\n    if (\n      result.image_lora_load_kwargs?.length ||\n      result.image_lora_fuse_kwargs?.length ||\n      result.lora_list?.length\n    ) {\n      newState.nested_section_optional = true\n      newState.nested_section_lora = true\n    }\n\n    if (result.envs?.length) {\n      newState.nested_section_optional = true\n      newState.nested_section_env = true\n    }\n\n    if (\n      (result.virtual_env_packages?.length ?? 0) > 0 ||\n      result.enable_virtual_env !== undefined\n    ) {\n      newState.nested_section_optional = true\n      newState.nested_section_virtualEnv = true\n    }\n\n    return newState\n  }\n\n  const handleCommandLine = (data) => {\n    if (data.model_name === modelData.model_name) {\n      const restoredData = restoreFormDataFormat(data)\n      setFormData(restoredData)\n\n      const collapseFromData = getCollapseStateFromData(restoredData)\n      setCollapseState((prev) => ({ ...prev, ...collapseFromData }))\n    } else {\n      setErrorMsg(t('launchModel.commandLineTip'))\n    }\n  }\n\n  const fetchModelEngine = (model_name, model_type) => {\n    setHasFetchedEngines(false)\n    const enableVirtualEnv =\n      formData?.enable_virtual_env === true ||\n      formData?.enable_virtual_env === 'true'\n        ? 'true'\n        : formData?.enable_virtual_env === false ||\n          formData?.enable_virtual_env === 'false'\n        ? 'false'\n        : null\n    const enableVirtualEnvQuery = enableVirtualEnv\n      ? `?enable_virtual_env=${enableVirtualEnv}`\n      : ''\n    fetchWrapper\n      .get(\n        model_type === 'LLM'\n          ? `/v1/engines/${model_name}${enableVirtualEnvQuery}`\n          : `/v1/engines/${model_type}/${model_name}${enableVirtualEnvQuery}`\n      )\n      .then((data) => {\n        if (!data) {\n          setEnginesObj({})\n          setEngineOptions([])\n          return\n        }\n        setEnginesObj(data)\n        setEngineOptions(Object.keys(data))\n      })\n      .catch((error) => {\n        console.error('Error:', error)\n        if (error?.response?.status !== 403) {\n          setErrorMsg(error.message)\n        }\n      })\n      .finally(() => {\n        setIsCallingApi(false)\n        setHasFetchedEngines(true)\n      })\n  }\n\n  const fetchCancelModel = async () => {\n    try {\n      await fetchWrapper.post(`/v1/models/${modelData.model_name}/cancel`)\n      setIsLoading(true)\n    } catch (error) {\n      console.error('Error:', error)\n      if (error?.response?.status !== 403) {\n        setErrorMsg(error.message)\n      }\n    } finally {\n      setProgress(0)\n      stopPolling()\n      setIsShowProgress(false)\n      setIsShowCancel(false)\n    }\n  }\n\n  const fetchProgress = async () => {\n    try {\n      const data = getFinalFormData()\n      const modelUid = data.model_uid || data.model_name\n\n      // Fetch overall progress (existing logic)\n      const res = await fetchWrapper.get(\n        `/v1/models/${modelData.model_name}/progress`\n      )\n      if (res.progress !== 1.0) setProgress(Number(res.progress))\n\n      // Fetch replica statuses (new logic)\n      const replicaRes = await fetchWrapper.get(\n        `/v1/models/${modelUid}/replicas`\n      )\n      setReplicaStatuses(replicaRes)\n    } catch (error) {\n      console.error('Error:', error)\n      // Suppress 404 errors during early launch phase as model might not exist yet\n      if (error?.response?.status !== 403 && error?.response?.status !== 404) {\n        setErrorMsg(error.message)\n      }\n    }\n  }\n\n  const startPolling = () => {\n    if (intervalRef.current) return\n    intervalRef.current = setInterval(fetchProgress, 500)\n  }\n\n  const stopPolling = () => {\n    if (intervalRef.current !== null) {\n      clearInterval(intervalRef.current)\n      intervalRef.current = null\n    }\n  }\n\n  useEffect(() => {\n    const data = handleGetHistory()\n    if (data) {\n      setHasHistory(true)\n      if (modelEngineType.includes(modelType)) {\n        setPendingHistory(data)\n      } else {\n        applyHistory(data)\n      }\n    }\n  }, [])\n\n  useEffect(() => {\n    if (!pendingHistory || !modelEngineType.includes(modelType)) return\n    if (!open || !hasFetchedEngines) return\n\n    if (!pendingHistory.model_engine) {\n      setHasHistory(false)\n      setFormData({})\n      setCollapseState({})\n      setPendingHistory(null)\n      return\n    }\n\n    const engineData = enginesObj[pendingHistory.model_engine]\n    const isValidEngine =\n      engineOptions.includes(pendingHistory.model_engine) &&\n      Array.isArray(engineData) &&\n      engineData.length > 0\n\n    if (isValidEngine) {\n      applyHistory(pendingHistory)\n    } else {\n      setHasHistory(false)\n      setFormData({})\n      setCollapseState({})\n    }\n    setPendingHistory(null)\n  }, [pendingHistory, open, hasFetchedEngines, engineOptions, modelType])\n\n  useEffect(() => {\n    if (open && modelEngineType.includes(modelType))\n      fetchModelEngine(modelData.model_name, modelType)\n  }, [open, modelData.model_name, modelType])\n\n  useEffect(() => {\n    if (formData.model_engine && modelEngineType.includes(modelType)) {\n      const format = [\n        ...new Set(\n          enginesObj[formData.model_engine]?.map((item) => item.model_format)\n        ),\n      ].filter((value) => value !== undefined && value !== null && value !== '')\n      setFormatOptions(format)\n\n      if (!format.includes(formData.model_format)) {\n        setFormData((prev) => ({\n          ...prev,\n          model_format: '',\n        }))\n      }\n      if (format.length === 1) {\n        setFormData((prev) => ({\n          ...prev,\n          model_format: format[0],\n        }))\n      }\n    }\n  }, [formData.model_engine, enginesObj])\n\n  useEffect(() => {\n    if (!formData.model_engine || !formData.model_format) return\n\n    const configMap = {\n      LLM: {\n        field: 'model_size_in_billions',\n        optionSetter: setSizeOptions,\n        extractor: (item) => item.model_size_in_billions,\n      },\n      embedding: {\n        field: 'quantization',\n        optionSetter: setQuantizationOptions,\n        extractor: (item) => item.quantization,\n      },\n      rerank: {\n        field: 'quantization',\n        optionSetter: setQuantizationOptions,\n        extractor: (item) => item.quantization,\n      },\n      image: {\n        field: 'quantization',\n        optionSetter: setQuantizationOptions,\n        extractor: (item) => item.quantization,\n      },\n    }\n\n    const config = configMap[modelType]\n    if (!config) return\n\n    const options = [\n      ...new Set(\n        enginesObj[formData.model_engine]\n          ?.filter((item) => item.model_format === formData.model_format)\n          ?.map(config.extractor)\n      ),\n    ].filter(\n      (option) => option !== undefined && option !== null && option !== ''\n    )\n\n    config.optionSetter(options)\n    if (!options.includes(formData[config.field])) {\n      setFormData((prev) => ({ ...prev, [config.field]: '' }))\n    }\n\n    if (options.length === 1) {\n      setFormData((prev) => ({ ...prev, [config.field]: options[0] }))\n    }\n  }, [formData.model_engine, formData.model_format, enginesObj])\n\n  useEffect(() => {\n    if (\n      formData.model_engine &&\n      formData.model_format &&\n      formData.model_size_in_billions\n    ) {\n      const quants = [\n        ...new Set(\n          enginesObj[formData.model_engine]\n            ?.filter(\n              (item) =>\n                item.model_format === formData.model_format &&\n                item.model_size_in_billions ===\n                  convertModelSize(formData.model_size_in_billions)\n            )\n            .flatMap((item) => item.quantizations)\n        ),\n      ]\n      const multimodal_projectors = [\n        ...new Set(\n          enginesObj[formData.model_engine]\n            ?.filter(\n              (item) =>\n                item.model_format === formData.model_format &&\n                item.model_size_in_billions ===\n                  convertModelSize(formData.model_size_in_billions)\n            )\n            .flatMap((item) => item.multimodal_projectors || [])\n        ),\n      ]\n      setQuantizationOptions(quants)\n      setMultimodalProjectorOptions(multimodal_projectors || [])\n      if (!quants.includes(formData.quantization)) {\n        setFormData((prev) => ({\n          ...prev,\n          quantization: '',\n        }))\n      }\n      if (quants.length === 1) {\n        setFormData((prev) => ({\n          ...prev,\n          quantization: quants[0],\n        }))\n      }\n      if (!multimodal_projectors.includes(multimodalProjector)) {\n        setMultimodalProjector('')\n      }\n      if (multimodal_projectors.length > 0 && !multimodalProjector) {\n        setMultimodalProjector(multimodal_projectors[0])\n      }\n    }\n  }, [\n    formData.model_engine,\n    formData.model_format,\n    formData.model_size_in_billions,\n    enginesObj,\n  ])\n\n  const engineItems = useMemo(() => {\n    return engineOptions.map((engine) => {\n      const engineData = enginesObj[engine]\n      let modelFormats = []\n      let label = engine\n      let disabled = false\n\n      if (Array.isArray(engineData)) {\n        modelFormats = Array.from(\n          new Set(engineData.map((item) => item.model_format))\n        )\n\n        const relevantSpecs = modelSpecs.filter((spec) =>\n          modelFormats.includes(spec.model_format)\n        )\n\n        const cached = relevantSpecs.some((spec) => isCached(spec))\n\n        label = cached ? `${engine} ${t('launchModel.cached')}` : engine\n      } else if (typeof engineData === 'string') {\n        label = `${engine} (${engineData})`\n        disabled = true\n      }\n\n      return {\n        value: engine,\n        label,\n        disabled,\n      }\n    })\n  }, [engineOptions, enginesObj, modelData])\n\n  const formatItems = useMemo(() => {\n    return formatOptions\n      .filter(\n        (format) => format !== undefined && format !== null && format !== ''\n      )\n      .map((format) => {\n        const specs = modelSpecs.filter((spec) => spec.model_format === format)\n\n        const cached = specs.some((spec) => isCached(spec))\n\n        return {\n          value: format,\n          label: cached ? `${format} ${t('launchModel.cached')}` : format,\n        }\n      })\n  }, [formatOptions, modelData])\n\n  const sizeItems = useMemo(() => {\n    return sizeOptions.map((size) => {\n      const specs = modelSpecs\n        .filter((spec) => spec.model_format === formData.model_format)\n        .filter((spec) => spec.model_size_in_billions === size)\n      const cached = specs.some((spec) => isCached(spec))\n\n      return {\n        value: size,\n        label: cached ? `${size} ${t('launchModel.cached')}` : size,\n      }\n    })\n  }, [sizeOptions, modelData])\n\n  const quantizationItems = useMemo(() => {\n    return quantizationOptions.map((quant) => {\n      const specs = modelSpecs\n        .filter((spec) => spec.model_format === formData.model_format)\n        .filter((spec) =>\n          modelType === 'LLM'\n            ? spec.model_size_in_billions ===\n              convertModelSize(formData.model_size_in_billions)\n            : true\n        )\n\n      const spec = specs.find((s) => {\n        return modelType === 'LLM'\n          ? s.quantizations === quant\n          : s.quantization === quant\n      })\n      const cached =\n        modelType === 'LLM' && Array.isArray(spec?.cache_status)\n          ? spec?.cache_status[spec?.quantizations.indexOf(quant)]\n          : spec?.cache_status\n\n      return {\n        value: quant,\n        label: cached ? `${quant} ${t('launchModel.cached')}` : quant,\n      }\n    })\n  }, [quantizationOptions, modelData])\n\n  const modelFormConfig = useMemo(\n    () =>\n      getModelFormConfig({\n        t,\n        formData,\n        modelData,\n        gpuAvailable,\n        engineItems,\n        formatItems,\n        sizeItems,\n        quantizationItems,\n        getNGPURange,\n        downloadHubOptions,\n        enginesWithNWorker,\n        multimodalProjectorOptions,\n      }),\n    [\n      t,\n      formData,\n      modelData,\n      gpuAvailable,\n      engineItems,\n      formatItems,\n      sizeItems,\n      quantizationItems,\n      getNGPURange,\n      downloadHubOptions,\n      enginesWithNWorker,\n      multimodalProjectorOptions,\n    ]\n  )\n\n  useEffect(() => {\n    if (modelFormConfig[modelType]) {\n      const defaults = {}\n      const traverse = (fields) => {\n        fields.forEach((field) => {\n          if (\n            field.default !== undefined &&\n            formData[field.name] === undefined\n          ) {\n            defaults[field.name] = field.default\n          }\n          if (field.children) {\n            traverse(field.children)\n          }\n        })\n      }\n      traverse(modelFormConfig[modelType])\n      if (Object.keys(defaults).length > 0) {\n        setFormData((prev) => ({ ...prev, ...defaults }))\n      }\n    }\n  }, [modelFormConfig, modelType])\n\n  const checkRequiredFields = (fields, data) => {\n    return fields.every((field) => {\n      if (field.type === 'collapse' && field.children) {\n        return checkRequiredFields(field.children, data)\n      }\n      if (field.visible && field.required) {\n        const value = data[field.name]\n        return (\n          value !== undefined && value !== null && String(value).trim() !== ''\n        )\n      }\n      return true\n    })\n  }\n\n  const isDynamicFieldComplete = (val) => {\n    if (!val) return false\n    if (Array.isArray(val) && typeof val[0] === 'string') {\n      return val.every((item) => item?.trim())\n    }\n    if (Array.isArray(val) && typeof val[0] === 'object') {\n      return val.every((obj) => {\n        return Object.values(obj).every(\n          (v) => typeof v !== 'string' || v.trim()\n        )\n      })\n    }\n    return true\n  }\n\n  const handleDynamicField = (name, val) => {\n    setCheckDynamicFieldComplete((prev) => {\n      const filtered = prev.filter((item) => item.name !== name)\n      return [...filtered, { name, isComplete: isDynamicFieldComplete(val) }]\n    })\n    setFormData((prev) => ({\n      ...prev,\n      [name]: val,\n    }))\n  }\n\n  const handleChange = (e) => {\n    const { name, value, type, checked } = e.target\n    setFormData((prev) => ({\n      ...prev,\n      [name]: type === 'checkbox' ? checked : value,\n    }))\n  }\n\n  const handleGPUIdx = (data) => {\n    const arr = []\n    data?.split(',').forEach((item) => {\n      arr.push(Number(item))\n    })\n    return arr\n  }\n\n  const processFieldsRecursively = (fields, result) => {\n    fields.forEach((field) => {\n      if (result[field.name] === undefined && field.default !== undefined) {\n        result[field.name] = field.default\n      }\n      if (\n        (result[field.name] || result[field.name] === 0) &&\n        field.type === 'number' &&\n        typeof result[field.name] !== 'number'\n      ) {\n        result[field.name] = parseInt(result[field.name], 10)\n      }\n      if (field.name === 'gpu_idx' && result[field.name]) {\n        result[field.name] = handleGPUIdx(result[field.name])\n      }\n      if (\n        field.visible === false ||\n        result[field.name] === '' ||\n        result[field.name] == null\n      ) {\n        delete result[field.name]\n      }\n      if (field.type === 'dynamicField' && Array.isArray(result[field.name])) {\n        result[field.name] = result[field.name].filter((item) => {\n          if (typeof item === 'string') {\n            return item.trim() !== ''\n          } else if (typeof item === 'object' && item !== null) {\n            return Object.values(item).every((val) => {\n              if (typeof val === 'string') {\n                return val.trim() !== ''\n              }\n              return val !== undefined && val !== null\n            })\n          }\n          return false\n        })\n        if (result[field.name].length === 0) {\n          delete result[field.name]\n        }\n      }\n      if (field.type === 'collapse' && Array.isArray(field.children)) {\n        processFieldsRecursively(field.children, result)\n      }\n    })\n  }\n\n  const getFinalFormData = () => {\n    const fields = modelFormConfig[modelType] || []\n    let result = {\n      model_name: modelData.model_name,\n      model_type: modelType,\n      ...formData,\n    }\n\n    processFieldsRecursively(fields, result)\n\n    if (result.n_gpu) {\n      result.n_gpu = normalizeNGPU(result.n_gpu)\n    }\n\n    if (result.n_gpu_layers < 0) {\n      delete result.n_gpu_layers\n    }\n    if (result.download_hub === 'none') {\n      delete result.download_hub\n    }\n    if (result.gguf_quantization === 'none') {\n      delete result.gguf_quantization\n    }\n\n    const peft_model_config = {}\n    ;['image_lora_load_kwargs', 'image_lora_fuse_kwargs'].forEach((key) => {\n      if (result[key]?.length) {\n        peft_model_config[key] = arrayToObject(result[key], handleValueType)\n        delete result[key]\n      }\n    })\n    if (result.lora_list?.length) {\n      peft_model_config.lora_list = result.lora_list\n      delete result.lora_list\n    }\n    if (Object.keys(peft_model_config).length) {\n      result.peft_model_config = peft_model_config\n    }\n\n    if (result.enable_virtual_env === 'unset') {\n      delete result.enable_virtual_env\n    } else if (result.enable_virtual_env === 'true') {\n      result.enable_virtual_env = true\n    } else if (result.enable_virtual_env === 'false') {\n      result.enable_virtual_env = false\n    }\n\n    if (result.envs?.length) {\n      result.envs = arrayToObject(result.envs)\n    }\n\n    if (result.quantization_config?.length) {\n      result.quantization_config = arrayToObject(\n        result.quantization_config,\n        handleValueType\n      )\n    }\n\n    for (const key in result) {\n      if (![...llmAllDataKey, 'custom'].includes(key)) {\n        delete result[key]\n      }\n    }\n    if (result.custom?.length) {\n      Object.assign(result, arrayToObject(result.custom, handleValueType))\n      delete result.custom\n    }\n\n    return result\n  }\n\n  const handleSubmit = () => {\n    if (isCallingApi || isUpdatingModel) {\n      return\n    }\n\n    setIsCallingApi(true)\n    setProgress(0)\n    setIsShowProgress(true)\n    setIsShowCancel(true)\n\n    try {\n      const data = getFinalFormData()\n      // First fetcher request to initiate the model\n      fetchWrapper\n        .post('/v1/models', data)\n        .then(() => {\n          navigate(`/running_models/${modelType}`)\n          sessionStorage.setItem(\n            'runningModelType',\n            `/running_models/${modelType}`\n          )\n          let historyArr = JSON.parse(localStorage.getItem('historyArr')) || []\n          const historyModelNameArr = historyArr.map((item) => item.model_name)\n          if (historyModelNameArr.includes(data.model_name)) {\n            historyArr = historyArr.map((item) => {\n              if (item.model_name === data.model_name) {\n                return data\n              }\n              return item\n            })\n          } else {\n            historyArr.push(data)\n          }\n          localStorage.setItem('historyArr', JSON.stringify(historyArr))\n        })\n        .catch((error) => {\n          console.error('Error:', error)\n          if (error.response?.status === 499) {\n            setSuccessMsg(t('launchModel.cancelledSuccessfully'))\n          } else if (error.response?.status !== 403) {\n            setErrorMsg(error.message)\n          }\n        })\n        .finally(() => {\n          setIsCallingApi(false)\n          stopPolling()\n          setIsShowProgress(false)\n          setIsShowCancel(false)\n          setIsLoading(false)\n        })\n      startPolling()\n    } catch (error) {\n      setErrorMsg(`${error}`)\n      setIsCallingApi(false)\n    }\n  }\n\n  const areRequiredFieldsFilled = useMemo(() => {\n    const data = getFinalFormData()\n    const fields = modelFormConfig[modelType] || []\n    return checkRequiredFields(fields, data)\n  }, [formData, modelType])\n\n  const renderFormFields = (fields = []) => {\n    const enhancedFields = fields.map((field) => {\n      if (field.name === 'reasoning_content') {\n        const enable_thinking_default = fields.find(\n          (item) => item.name === 'enable_thinking'\n        ).default\n        return {\n          ...field,\n          visible:\n            !!modelData.model_ability?.includes('reasoning') &&\n            (formData.enable_thinking ??\n              enable_thinking_default ??\n              field.default ??\n              false),\n        }\n      }\n\n      return field\n    })\n\n    return enhancedFields\n      .filter((field) => field.visible)\n      .map((field) => {\n        const fieldKey = field.name\n        switch (field.type) {\n          case 'collapse': {\n            const open = collapseState[fieldKey] ?? false\n\n            const toggleCollapse = () => {\n              setCollapseState((prev) => ({\n                ...prev,\n                [fieldKey]: !prev[fieldKey],\n              }))\n            }\n\n            return (\n              <Box key={fieldKey} sx={{ mt: 2 }}>\n                <ListItemButton onClick={toggleCollapse}>\n                  <div\n                    style={{ display: 'flex', alignItems: 'center', gap: 10 }}\n                  >\n                    <ListItemText primary={field.label} />\n                    {open ? <ExpandLess /> : <ExpandMore />}\n                  </div>\n                </ListItemButton>\n                <Collapse in={open} timeout=\"auto\" unmountOnExit>\n                  <Box sx={{ pl: 2 }}>\n                    {renderFormFields(field.children || [])}\n                  </Box>\n                </Collapse>\n              </Box>\n            )\n          }\n          case 'select':\n            return (\n              <SelectField\n                key={fieldKey}\n                label={field.label}\n                labelId={`${field.name}-label`}\n                name={field.name}\n                disabled={field.disabled}\n                value={formData[field.name] ?? field.default ?? ''}\n                onChange={handleChange}\n                options={field.options}\n                required={field.required}\n              />\n            )\n          case 'number':\n            return (\n              <TextField\n                key={fieldKey}\n                name={field.name}\n                label={field.label}\n                type=\"number\"\n                disabled={field.disabled}\n                InputProps={field.inputProps}\n                value={formData[field.name] ?? field.default ?? ''}\n                onChange={handleChange}\n                required={field.required}\n                error={field.error}\n                helperText={field.error && field.helperText}\n                fullWidth\n                margin=\"normal\"\n                className=\"textHighlight\"\n              />\n            )\n          case 'input':\n            return (\n              <TextField\n                key={fieldKey}\n                name={field.name}\n                label={field.label}\n                disabled={field.disabled}\n                InputProps={field.inputProps}\n                value={formData[field.name] ?? field.default ?? ''}\n                onChange={handleChange}\n                required={field.required}\n                error={field.error}\n                helperText={field.error && field.helperText}\n                fullWidth\n                margin=\"normal\"\n                className=\"textHighlight\"\n              />\n            )\n          case 'switch':\n            return (\n              <div key={fieldKey}>\n                <Tooltip title={field.tip} placement=\"top\">\n                  <FormControlLabel\n                    name={field.name}\n                    label={field.label}\n                    labelPlacement=\"start\"\n                    control={\n                      <Switch\n                        checked={formData[field.name] ?? field.default ?? false}\n                      />\n                    }\n                    onChange={handleChange}\n                    required={field.required}\n                  />\n                </Tooltip>\n              </div>\n            )\n          case 'radio':\n            return (\n              <div\n                key={fieldKey}\n                style={{\n                  display: 'flex',\n                  alignItems: 'center',\n                  gap: 10,\n                  marginLeft: 15,\n                }}\n              >\n                <span>{field.label}</span>\n                <RadioGroup\n                  row\n                  name={field.name}\n                  value={\n                    formData[field.name] ??\n                    field.default ??\n                    field.options?.[0]?.value ??\n                    ''\n                  }\n                  onChange={handleChange}\n                >\n                  {field.options.map((item) => (\n                    <FormControlLabel\n                      key={item.label}\n                      value={item.value}\n                      control={<Radio />}\n                      label={item.label}\n                    />\n                  ))}\n                </RadioGroup>\n              </div>\n            )\n          case 'dynamicField':\n            return (\n              <DynamicFieldList\n                key={fieldKey}\n                name={field.name}\n                label={field.label}\n                mode={field.mode}\n                keyPlaceholder={field.keyPlaceholder}\n                valuePlaceholder={field.valuePlaceholder}\n                value={formData[field.name]}\n                onChange={handleDynamicField}\n                keyOptions={field.keyOptions}\n              />\n            )\n          default:\n            return null\n        }\n      })\n  }\n\n  const renderButtonContent = () => {\n    if (isShowCancel) {\n      return <StopCircle sx={{ fontSize: 26 }} />\n    }\n    if (isLoading) {\n      return <CircularProgress size={26} />\n    }\n\n    return <RocketLaunchOutlined sx={{ fontSize: 26 }} />\n  }\n\n  return (\n    <Drawer open={open} onClose={onClose} anchor=\"right\">\n      <Box className=\"drawerCard\">\n        <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\">\n          <Box display=\"flex\" alignItems=\"center\">\n            <TitleTypography value={modelData.model_name} />\n            {hasHistory && (\n              <Chip\n                label={t('launchModel.lastConfig')}\n                variant=\"outlined\"\n                size=\"small\"\n                color=\"primary\"\n                onDelete={deleteHistory}\n              />\n            )}\n          </Box>\n          <Box display=\"flex\" alignItems=\"center\" gap={1}>\n            <Tooltip\n              title={t('launchModel.commandLineParsing')}\n              placement=\"top\"\n            >\n              <ContentPasteGo\n                className=\"pasteText\"\n                onClick={() => setIsOpenPasteDialog(true)}\n              />\n            </Tooltip>\n\n            {areRequiredFieldsFilled && (\n              <CopyToCommandLine\n                getData={getFinalFormData}\n                predefinedKeys={llmAllDataKey}\n              />\n            )}\n          </Box>\n        </Box>\n\n        <Box\n          sx={{\n            flex: 1,\n            display: 'flex',\n            flexDirection: 'column',\n            justifyContent: 'space-between',\n          }}\n          component=\"form\"\n          onSubmit={handleSubmit}\n        >\n          <Box>{renderFormFields(modelFormConfig[modelType])}</Box>\n\n          <Box marginTop={4}>\n            <Box height={16}>\n              {isShowProgress && (\n                <Progress style={{ marginBottom: 20 }} progress={progress} />\n              )}\n            </Box>\n            <Box display=\"flex\" gap={2}>\n              <Tooltip\n                title={\n                  isShowCancel ? (\n                    <Box sx={{ minWidth: 200 }}>\n                      <Typography variant=\"subtitle2\" sx={{ mb: 1 }}>\n                        {t('launchModel.launchProgress')}:\n                      </Typography>\n                      {replicaStatuses.length > 0 ? (\n                        replicaStatuses.map((replica) => (\n                          <Box\n                            key={replica.replica_id}\n                            sx={{\n                              display: 'flex',\n                              justifyContent: 'space-between',\n                              alignItems: 'center',\n                              mb: 0.5,\n                            }}\n                          >\n                            <Typography variant=\"caption\">\n                              {t('modelReplicaDetails.replica')}{' '}\n                              {replica.replica_id}:\n                            </Typography>\n                            <Chip\n                              label={replica.status}\n                              color={\n                                replica.status === 'READY'\n                                  ? 'success'\n                                  : replica.status === 'ERROR'\n                                  ? 'error'\n                                  : 'default'\n                              }\n                              size=\"small\"\n                              sx={{ height: 20, fontSize: '0.7rem' }}\n                            />\n                          </Box>\n                        ))\n                      ) : (\n                        <Typography variant=\"caption\">\n                          {t('launchModel.initializing')}\n                        </Typography>\n                      )}\n                    </Box>\n                  ) : (\n                    t('launchModel.launch')\n                  )\n                }\n                placement=\"top\"\n                arrow\n              >\n                <Button\n                  style={{ flex: 1 }}\n                  variant=\"outlined\"\n                  color=\"primary\"\n                  disabled={\n                    !isShowCancel &&\n                    (!areRequiredFieldsFilled ||\n                      isLoading ||\n                      isCallingApi ||\n                      checkDynamicFieldComplete.some(\n                        (item) => !item.isComplete\n                      ))\n                  }\n                  onClick={() => {\n                    if (isShowCancel) {\n                      fetchCancelModel()\n                    } else {\n                      handleSubmit()\n                    }\n                  }}\n                >\n                  {renderButtonContent()}\n                </Button>\n              </Tooltip>\n              <Button\n                style={{ flex: 1 }}\n                variant=\"outlined\"\n                color=\"primary\"\n                onClick={onClose}\n                title={t('launchModel.goBack')}\n              >\n                <UndoOutlined sx={{ fontSize: 26 }} />\n              </Button>\n            </Box>\n          </Box>\n        </Box>\n\n        <PasteDialog\n          open={isOpenPasteDialog}\n          onHandleClose={() => setIsOpenPasteDialog(false)}\n          onHandleCommandLine={handleCommandLine}\n        />\n      </Box>\n    </Drawer>\n  )\n}\n\nexport default LaunchModelDrawer\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/modelFormConfig.js",
    "content": "import {\n  additionalParameterTipList,\n  quantizationParametersTipList,\n} from '../data/data'\n\nexport default function getModelFormConfig({\n  t,\n  formData,\n  modelData,\n  gpuAvailable,\n  engineItems,\n  formatItems,\n  sizeItems,\n  quantizationItems,\n  getNGPURange,\n  downloadHubOptions,\n  enginesWithNWorker,\n  multimodalProjectorOptions,\n}) {\n  const ggufQuantizations =\n    modelData?.gguf_quantizations ??\n    modelData?.model_specs?.find((spec) => spec.gguf_quantizations)\n      ?.gguf_quantizations\n  const config = {\n    LLM: [\n      {\n        name: 'model_engine',\n        label: t('launchModel.modelEngine'),\n        type: 'select',\n        options: engineItems,\n        visible: true,\n        required: true,\n      },\n      {\n        name: 'model_format',\n        label: t('launchModel.modelFormat'),\n        type: 'select',\n        options: formatItems,\n        visible: true,\n        disabled: !formData.model_engine,\n        required: true,\n      },\n      {\n        name: 'model_size_in_billions',\n        label: t('launchModel.modelSize'),\n        type: 'select',\n        options: sizeItems,\n        visible: true,\n        disabled: !formData.model_format,\n        required: true,\n      },\n      {\n        name: 'quantization',\n        label: t('launchModel.quantization'),\n        type: 'select',\n        options: quantizationItems,\n        visible: true,\n        disabled: !formData.model_size_in_billions,\n        required: true,\n      },\n      {\n        name: 'multimodal_projector',\n        label: t('launchModel.multimodelProjector'),\n        type: 'select',\n        default: multimodalProjectorOptions[0],\n        options: multimodalProjectorOptions,\n        disabled: !formData.model_size_in_billions,\n        required: true,\n        visible: !!multimodalProjectorOptions.length,\n      },\n      {\n        name: 'n_gpu',\n        label: t(\n          enginesWithNWorker.includes(formData.model_engine)\n            ? 'launchModel.nGPUPerWorker'\n            : 'launchModel.nGPU'\n        ),\n        type: 'select',\n        default: 'auto',\n        options: getNGPURange('LLM'),\n        disabled: !formData.quantization,\n        visible: true,\n      },\n      {\n        name: 'n_gpu_layers',\n        label: t('launchModel.nGpuLayers'),\n        type: 'number',\n        default: -1,\n        inputProps: {\n          inputProps: {\n            min: -1,\n          },\n        },\n        disabled: !formData.quantization,\n        visible: !!['ggufv2', 'ggmlv3'].includes(formData.model_format),\n      },\n      {\n        name: 'replica',\n        label: t('launchModel.replica'),\n        type: 'number',\n        default: 1,\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error: !!formData.replica && !/^[1-9]\\d*$/.test(formData.replica),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n        disabled: !formData.quantization,\n        visible: true,\n      },\n      {\n        name: 'enable_thinking',\n        label: t('launchModel.enableThinking'),\n        type: 'switch',\n        visible: !!modelData.model_ability?.includes('hybrid'),\n        default: true,\n      },\n      {\n        name: 'reasoning_content',\n        label: t('launchModel.parsingReasoningContent'),\n        type: 'switch',\n        default: false,\n      },\n      {\n        name: 'nested_section_optional',\n        label: t('launchModel.optionalConfigurations'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'model_uid',\n            label: t('launchModel.modelUID.optional'),\n            type: 'input',\n            visible: true,\n          },\n          {\n            name: 'request_limits',\n            label: t('launchModel.requestLimits.optional'),\n            type: 'number',\n            inputProps: {\n              inputProps: {\n                min: 1,\n              },\n            },\n            error:\n              !!formData.request_limits &&\n              !/^[1-9]\\d*$/.test(formData.request_limits),\n            helperText: t('launchModel.enterIntegerGreaterThanZero'),\n            visible: true,\n          },\n          {\n            name: 'n_worker',\n            label: t('launchModel.workerCount.optional'),\n            type: 'number',\n            default: 1,\n            inputProps: {\n              inputProps: {\n                min: 1,\n              },\n            },\n            error: !!formData.n_worker && !/^[1-9]\\d*$/.test(formData.n_worker),\n            helperText: t('launchModel.enterIntegerGreaterThanZero'),\n            visible:\n              !!formData.model_engine &&\n              enginesWithNWorker.includes(formData.model_engine),\n          },\n          {\n            name: 'worker_ip',\n            label: t('launchModel.workerIp.optional'),\n            type: 'input',\n            visible: true,\n          },\n          {\n            name: 'gpu_idx',\n            label: t('launchModel.GPUIdx'),\n            type: 'input',\n            error:\n              !!formData.gpu_idx && !/^\\d+(?:,\\d+)*$/.test(formData.gpu_idx),\n            helperText: t('launchModel.enterCommaSeparatedNumbers'),\n            visible: true,\n          },\n          {\n            name: 'download_hub',\n            label: t('launchModel.downloadHub.optional'),\n            type: 'select',\n            options: downloadHubOptions,\n            visible: true,\n          },\n          {\n            name: 'model_path',\n            label: t('launchModel.modelPath.optional'),\n            type: 'input',\n            visible: true,\n          },\n          {\n            name: 'nested_section_lora',\n            label: t('launchModel.loraConfig'),\n            type: 'collapse',\n            visible: true,\n            children: [\n              {\n                name: 'lora_list',\n                label: t('launchModel.loraModelConfig'),\n                type: 'dynamicField',\n                mode: 'key-value',\n                keyPlaceholder: 'lora_name',\n                valuePlaceholder: 'local_path',\n                visible: true,\n              },\n            ],\n          },\n          {\n            name: 'nested_section_virtualEnv',\n            label: t('launchModel.virtualEnvConfig'),\n            type: 'collapse',\n            visible: true,\n            children: [\n              {\n                name: 'enable_virtual_env',\n                label: t('launchModel.modelVirtualEnv'),\n                type: 'radio',\n                options: [\n                  { label: 'Unset', value: 'unset' },\n                  { label: 'False', value: false },\n                  { label: 'True', value: true },\n                ],\n                default: 'unset',\n                visible: true,\n              },\n              {\n                name: 'virtual_env_packages',\n                label: t('launchModel.virtualEnvPackage'),\n                type: 'dynamicField',\n                mode: 'value',\n                valuePlaceholder: 'value',\n                visible: true,\n              },\n            ],\n          },\n          {\n            name: 'nested_section_env',\n            label: t('launchModel.envVariableConfig'),\n            type: 'collapse',\n            visible: true,\n            children: [\n              {\n                name: 'envs',\n                label: t('launchModel.envVariable'),\n                type: 'dynamicField',\n                mode: 'key-value',\n                keyPlaceholder: 'key',\n                valuePlaceholder: 'value',\n                visible: true,\n              },\n            ],\n          },\n        ],\n      },\n      {\n        name: 'quantization_config',\n        label: t(\n          'launchModel.additionalQuantizationParametersForInferenceEngine'\n        ),\n        type: 'dynamicField',\n        mode: 'key-value',\n        keyPlaceholder: 'key',\n        valuePlaceholder: 'value',\n        keyOptions: quantizationParametersTipList,\n        visible:\n          !!formData.model_engine && formData.model_engine === 'Transformers',\n      },\n      {\n        name: 'custom',\n        label: `${t('launchModel.additionalParametersForInferenceEngine')}${\n          formData.model_engine ? ': ' + formData.model_engine : ''\n        }`,\n        type: 'dynamicField',\n        mode: 'key-value',\n        keyPlaceholder: 'key',\n        valuePlaceholder: 'value',\n        keyOptions:\n          additionalParameterTipList[\n            formData.model_engine?.toLocaleLowerCase()\n          ],\n        visible: true,\n      },\n    ],\n    embedding: [\n      {\n        name: 'model_engine',\n        label: t('launchModel.modelEngine'),\n        type: 'select',\n        options: engineItems,\n        visible: true,\n      },\n      {\n        name: 'model_format',\n        label: t('launchModel.modelFormat'),\n        type: 'select',\n        options: formatItems,\n        visible: true,\n        disabled: !formData.model_engine,\n      },\n      {\n        name: 'quantization',\n        label: t('launchModel.quantization'),\n        type: 'select',\n        options: quantizationItems,\n        visible: true,\n        disabled: !formData.model_format,\n      },\n      {\n        name: 'replica',\n        label: t('launchModel.replica'),\n        type: 'number',\n        visible: true,\n        default: 1,\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error: !!formData.replica && !/^[1-9]\\d*$/.test(formData.replica),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n        disabled: !formData.quantization,\n      },\n      {\n        name: 'n_gpu',\n        label: t('launchModel.device'),\n        type: 'select',\n        default: gpuAvailable === 0 ? 'CPU' : 'GPU',\n        options: getNGPURange('embedding'),\n        visible: true,\n      },\n      {\n        name: 'gpu_idx',\n        label: t('launchModel.GPUIdx'),\n        type: 'input',\n        error: !!formData.gpu_idx && !/^\\d+(?:,\\d+)*$/.test(formData.gpu_idx),\n        helperText: t('launchModel.enterCommaSeparatedNumbers'),\n        visible: !!formData.n_gpu && formData.n_gpu === 'GPU',\n      },\n      {\n        name: 'model_uid',\n        label: t('launchModel.modelUID.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'worker_ip',\n        label: t('launchModel.workerIp.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'download_hub',\n        label: t('launchModel.downloadHub.optional'),\n        type: 'select',\n        options: downloadHubOptions,\n        visible: true,\n      },\n      {\n        name: 'model_path',\n        label: t('launchModel.modelPath.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'request_limits',\n        label: t('launchModel.requestLimits.optional'),\n        type: 'number',\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error:\n          !!formData.request_limits &&\n          !/^[1-9]\\d*$/.test(formData.request_limits),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n        visible: true,\n      },\n      {\n        name: 'nested_section_virtualEnv',\n        label: t('launchModel.virtualEnvConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'enable_virtual_env',\n            label: t('launchModel.modelVirtualEnv'),\n            type: 'radio',\n            options: [\n              { label: 'Unset', value: 'unset' },\n              { label: 'False', value: false },\n              { label: 'True', value: true },\n            ],\n            default: 'unset',\n            visible: true,\n          },\n          {\n            name: 'virtual_env_packages',\n            label: t('launchModel.virtualEnvPackage'),\n            type: 'dynamicField',\n            mode: 'value',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'nested_section_env',\n        label: t('launchModel.envVariableConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'envs',\n            label: t('launchModel.envVariable'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            keyPlaceholder: 'key',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'custom',\n        label: `${t('launchModel.additionalParametersForInferenceEngine')}${\n          formData.model_engine ? ': ' + formData.model_engine : ''\n        }`,\n        type: 'dynamicField',\n        mode: 'key-value',\n        keyPlaceholder: 'key',\n        valuePlaceholder: 'value',\n        visible: true,\n      },\n    ],\n    rerank: [\n      {\n        name: 'model_engine',\n        label: t('launchModel.modelEngine'),\n        type: 'select',\n        options: engineItems,\n        visible: true,\n      },\n      {\n        name: 'model_format',\n        label: t('launchModel.modelFormat'),\n        type: 'select',\n        options: formatItems,\n        visible: true,\n        disabled: !formData.model_engine,\n      },\n      {\n        name: 'quantization',\n        label: t('launchModel.quantization'),\n        type: 'select',\n        options: quantizationItems,\n        visible: true,\n        disabled: !formData.model_format,\n      },\n      {\n        name: 'replica',\n        label: t('launchModel.replica'),\n        type: 'number',\n        visible: true,\n        default: 1,\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error: !!formData.replica && !/^[1-9]\\d*$/.test(formData.replica),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n      },\n      {\n        name: 'n_gpu',\n        label: t('launchModel.device'),\n        type: 'select',\n        default: gpuAvailable === 0 ? 'CPU' : 'GPU',\n        options: getNGPURange('rerank'),\n        visible: true,\n      },\n      {\n        name: 'gpu_idx',\n        label: t('launchModel.GPUIdx'),\n        type: 'input',\n        error: !!formData.gpu_idx && !/^\\d+(?:,\\d+)*$/.test(formData.gpu_idx),\n        helperText: t('launchModel.enterCommaSeparatedNumbers'),\n        visible: !!formData.n_gpu && formData.n_gpu === 'GPU',\n      },\n      {\n        name: 'model_uid',\n        label: t('launchModel.modelUID.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'worker_ip',\n        label: t('launchModel.workerIp.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'download_hub',\n        label: t('launchModel.downloadHub.optional'),\n        type: 'select',\n        options: downloadHubOptions,\n        visible: true,\n      },\n      {\n        name: 'model_path',\n        label: t('launchModel.modelPath.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'gguf_quantization',\n        label: t('launchModel.GGUFQuantization.optional'),\n        type: 'select',\n        options: ['none', ...(ggufQuantizations || [])],\n        visible: !!ggufQuantizations,\n      },\n      {\n        name: 'gguf_model_path',\n        label: t('launchModel.GGUFModelPath.optional'),\n        type: 'input',\n        visible: !!ggufQuantizations,\n      },\n      {\n        name: 'request_limits',\n        label: t('launchModel.requestLimits.optional'),\n        type: 'number',\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error:\n          !!formData.request_limits &&\n          !/^[1-9]\\d*$/.test(formData.request_limits),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n        visible: true,\n      },\n      {\n        name: 'nested_section_virtualEnv',\n        label: t('launchModel.virtualEnvConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'enable_virtual_env',\n            label: t('launchModel.modelVirtualEnv'),\n            type: 'radio',\n            options: [\n              { label: 'Unset', value: 'unset' },\n              { label: 'False', value: false },\n              { label: 'True', value: true },\n            ],\n            default: 'unset',\n            visible: true,\n          },\n          {\n            name: 'virtual_env_packages',\n            label: t('launchModel.virtualEnvPackage'),\n            type: 'dynamicField',\n            mode: 'value',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'nested_section_env',\n        label: t('launchModel.envVariableConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'envs',\n            label: t('launchModel.envVariable'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            keyPlaceholder: 'key',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'custom',\n        label: t('launchModel.additionalParametersForInferenceEngine'),\n        type: 'dynamicField',\n        mode: 'key-value',\n        keyPlaceholder: 'key',\n        valuePlaceholder: 'value',\n        visible: true,\n      },\n    ],\n    image: [\n      {\n        name: 'model_uid',\n        label: t('launchModel.modelUID.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'model_engine',\n        label: t('launchModel.modelEngine'),\n        type: 'select',\n        options: engineItems,\n        visible: !!engineItems?.length,\n        required: false,\n      },\n      {\n        name: 'model_format',\n        label: t('launchModel.modelFormat'),\n        type: 'select',\n        options: formatItems,\n        visible: !!formatItems?.length,\n        disabled: !formData.model_engine,\n      },\n      {\n        name: 'quantization',\n        label: t('launchModel.quantization'),\n        type: 'select',\n        options: quantizationItems,\n        visible: !!quantizationItems?.length,\n        disabled: !formData.model_format,\n      },\n      {\n        name: 'replica',\n        label: t('launchModel.replica'),\n        type: 'number',\n        visible: true,\n        default: 1,\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error: !!formData.replica && !/^[1-9]\\d*$/.test(formData.replica),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n      },\n      {\n        name: 'n_gpu',\n        label: t('launchModel.nGPU'),\n        type: 'select',\n        default: 'auto',\n        options: getNGPURange('image'),\n        visible: true,\n      },\n      {\n        name: 'gpu_idx',\n        label: t('launchModel.GPUIdx'),\n        type: 'input',\n        error: !!formData.gpu_idx && !/^\\d+(?:,\\d+)*$/.test(formData.gpu_idx),\n        helperText: t('launchModel.enterCommaSeparatedNumbers'),\n        visible: !!formData.n_gpu && formData.n_gpu !== 'CPU',\n      },\n      {\n        name: 'worker_ip',\n        label: t('launchModel.workerIp.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'download_hub',\n        label: t('launchModel.downloadHub.optional'),\n        type: 'select',\n        options: downloadHubOptions,\n        visible: true,\n      },\n      {\n        name: 'model_path',\n        label: t('launchModel.modelPath.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'gguf_quantization',\n        label: t('launchModel.GGUFQuantization.optional'),\n        type: 'select',\n        options: ['none', ...(ggufQuantizations || [])],\n        visible: !!ggufQuantizations,\n      },\n      {\n        name: 'gguf_model_path',\n        label: t('launchModel.GGUFModelPath.optional'),\n        type: 'input',\n        visible: !!ggufQuantizations,\n      },\n      {\n        name: 'lightning_version',\n        label: t('launchModel.lightningVersions.optional'),\n        type: 'select',\n        options: ['none', ...(modelData.lightning_versions || [])],\n        visible: !!modelData.lightning_versions,\n      },\n      {\n        name: 'lightning_model_path',\n        label: t('launchModel.lightningModelPath.optional'),\n        type: 'input',\n        visible: !!modelData.lightning_versions,\n      },\n      {\n        name: 'request_limits',\n        label: t('launchModel.requestLimits.optional'),\n        type: 'number',\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error:\n          !!formData.request_limits &&\n          !/^[1-9]\\d*$/.test(formData.request_limits),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n        visible: true,\n      },\n      {\n        name: 'cpu_offload',\n        label: t('launchModel.CPUOffload'),\n        type: 'switch',\n        default: false,\n        tip: t('launchModel.CPUOffload.tip'),\n        visible: true,\n      },\n      {\n        name: 'nested_section_lora',\n        label: t('launchModel.loraConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'lora_list',\n            label: t('launchModel.loraModelConfig'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            keyPlaceholder: 'lora_name',\n            valuePlaceholder: 'local_path',\n            visible: true,\n          },\n          {\n            name: 'image_lora_load_kwargs',\n            label: t('launchModel.loraLoadKwargsForImageModel'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            visible: true,\n          },\n          {\n            name: 'image_lora_fuse_kwargs',\n            label: t('launchModel.loraFuseKwargsForImageModel'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'nested_section_virtualEnv',\n        label: t('launchModel.virtualEnvConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'enable_virtual_env',\n            label: t('launchModel.modelVirtualEnv'),\n            type: 'radio',\n            options: [\n              { label: 'Unset', value: 'unset' },\n              { label: 'False', value: false },\n              { label: 'True', value: true },\n            ],\n            default: 'unset',\n            visible: true,\n          },\n          {\n            name: 'virtual_env_packages',\n            label: t('launchModel.virtualEnvPackage'),\n            type: 'dynamicField',\n            mode: 'value',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'nested_section_env',\n        label: t('launchModel.envVariableConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'envs',\n            label: t('launchModel.envVariable'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            keyPlaceholder: 'key',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'custom',\n        label: t('launchModel.additionalParametersForInferenceEngine'),\n        type: 'dynamicField',\n        mode: 'key-value',\n        keyPlaceholder: 'key',\n        valuePlaceholder: 'value',\n        visible: true,\n      },\n    ],\n    audio: [\n      {\n        name: 'model_uid',\n        label: t('launchModel.modelUID.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'replica',\n        label: t('launchModel.replica'),\n        type: 'number',\n        visible: true,\n        default: 1,\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error: !!formData.replica && !/^[1-9]\\d*$/.test(formData.replica),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n      },\n      {\n        name: 'n_gpu',\n        label: t('launchModel.device'),\n        type: 'select',\n        default: gpuAvailable === 0 ? 'CPU' : 'GPU',\n        options: getNGPURange('audio'),\n        visible: true,\n      },\n      {\n        name: 'gpu_idx',\n        label: t('launchModel.GPUIdx'),\n        type: 'input',\n        error: !!formData.gpu_idx && !/^\\d+(?:,\\d+)*$/.test(formData.gpu_idx),\n        helperText: t('launchModel.enterCommaSeparatedNumbers'),\n        visible: !!formData.n_gpu && formData.n_gpu === 'GPU',\n      },\n      {\n        name: 'worker_ip',\n        label: t('launchModel.workerIp.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'download_hub',\n        label: t('launchModel.downloadHub.optional'),\n        type: 'select',\n        options: downloadHubOptions,\n        visible: true,\n      },\n      {\n        name: 'model_path',\n        label: t('launchModel.modelPath.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'gguf_quantization',\n        label: t('launchModel.GGUFQuantization.optional'),\n        type: 'select',\n        options: ['none', ...(ggufQuantizations || [])],\n        visible: !!ggufQuantizations,\n      },\n      {\n        name: 'gguf_model_path',\n        label: t('launchModel.GGUFModelPath.optional'),\n        type: 'input',\n        visible: !!ggufQuantizations,\n      },\n      {\n        name: 'request_limits',\n        label: t('launchModel.requestLimits.optional'),\n        type: 'number',\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error:\n          !!formData.request_limits &&\n          !/^[1-9]\\d*$/.test(formData.request_limits),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n        visible: true,\n      },\n      {\n        name: 'nested_section_virtualEnv',\n        label: t('launchModel.virtualEnvConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'enable_virtual_env',\n            label: t('launchModel.modelVirtualEnv'),\n            type: 'radio',\n            options: [\n              { label: 'Unset', value: 'unset' },\n              { label: 'False', value: false },\n              { label: 'True', value: true },\n            ],\n            default: 'unset',\n            visible: true,\n          },\n          {\n            name: 'virtual_env_packages',\n            label: t('launchModel.virtualEnvPackage'),\n            type: 'dynamicField',\n            mode: 'value',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'nested_section_env',\n        label: t('launchModel.envVariableConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'envs',\n            label: t('launchModel.envVariable'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            keyPlaceholder: 'key',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'custom',\n        label: t('launchModel.additionalParametersForInferenceEngine'),\n        type: 'dynamicField',\n        mode: 'key-value',\n        keyPlaceholder: 'key',\n        valuePlaceholder: 'value',\n        visible: true,\n      },\n    ],\n    video: [\n      {\n        name: 'model_uid',\n        label: t('launchModel.modelUID.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'replica',\n        label: t('launchModel.replica'),\n        type: 'number',\n        visible: true,\n        default: 1,\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error: !!formData.replica && !/^[1-9]\\d*$/.test(formData.replica),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n      },\n      {\n        name: 'n_gpu',\n        label: t('launchModel.device'),\n        type: 'select',\n        default: gpuAvailable === 0 ? 'CPU' : 'GPU',\n        options: getNGPURange('video'),\n        visible: true,\n      },\n      {\n        name: 'gpu_idx',\n        label: t('launchModel.GPUIdx'),\n        type: 'input',\n        error: !!formData.gpu_idx && !/^\\d+(?:,\\d+)*$/.test(formData.gpu_idx),\n        helperText: t('launchModel.enterCommaSeparatedNumbers'),\n        visible: !!formData.n_gpu && formData.n_gpu === 'GPU',\n      },\n      {\n        name: 'worker_ip',\n        label: t('launchModel.workerIp.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'download_hub',\n        label: t('launchModel.downloadHub.optional'),\n        type: 'select',\n        options: downloadHubOptions,\n        visible: true,\n      },\n      {\n        name: 'model_path',\n        label: t('launchModel.modelPath.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'gguf_quantization',\n        label: t('launchModel.GGUFQuantization.optional'),\n        type: 'select',\n        options: ['none', ...(ggufQuantizations || [])],\n        visible: !!ggufQuantizations,\n      },\n      {\n        name: 'gguf_model_path',\n        label: t('launchModel.GGUFModelPath.optional'),\n        type: 'input',\n        visible: !!ggufQuantizations,\n      },\n      {\n        name: 'request_limits',\n        label: t('launchModel.requestLimits.optional'),\n        type: 'number',\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error:\n          !!formData.request_limits &&\n          !/^[1-9]\\d*$/.test(formData.request_limits),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n        visible: true,\n      },\n      {\n        name: 'cpu_offload',\n        label: t('launchModel.CPUOffload'),\n        type: 'switch',\n        default: false,\n        tip: t('launchModel.CPUOffload.tip'),\n        visible: true,\n      },\n      {\n        name: 'nested_section_lora',\n        label: t('launchModel.loraConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'lora_list',\n            label: t('launchModel.loraModelConfig'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            keyPlaceholder: 'lora_name',\n            valuePlaceholder: 'local_path',\n            visible: true,\n          },\n          {\n            name: 'image_lora_load_kwargs',\n            label: t('launchModel.loraLoadKwargsForImageModel'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            visible: true,\n          },\n          {\n            name: 'image_lora_fuse_kwargs',\n            label: t('launchModel.loraFuseKwargsForImageModel'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'nested_section_virtualEnv',\n        label: t('launchModel.virtualEnvConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'enable_virtual_env',\n            label: t('launchModel.modelVirtualEnv'),\n            type: 'radio',\n            options: [\n              { label: 'Unset', value: 'unset' },\n              { label: 'False', value: false },\n              { label: 'True', value: true },\n            ],\n            default: 'unset',\n            visible: true,\n          },\n          {\n            name: 'virtual_env_packages',\n            label: t('launchModel.virtualEnvPackage'),\n            type: 'dynamicField',\n            mode: 'value',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'nested_section_env',\n        label: t('launchModel.envVariableConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'envs',\n            label: t('launchModel.envVariable'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            keyPlaceholder: 'key',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'custom',\n        label: t('launchModel.additionalParametersForInferenceEngine'),\n        type: 'dynamicField',\n        mode: 'key-value',\n        keyPlaceholder: 'key',\n        valuePlaceholder: 'value',\n        visible: true,\n      },\n    ],\n    flexible: [\n      {\n        name: 'model_uid',\n        label: t('launchModel.modelUID.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'replica',\n        label: t('launchModel.replica'),\n        type: 'number',\n        visible: true,\n        default: 1,\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error: !!formData.replica && !/^[1-9]\\d*$/.test(formData.replica),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n      },\n      {\n        name: 'n_gpu',\n        label: t('launchModel.device'),\n        type: 'select',\n        default: gpuAvailable === 0 ? 'CPU' : 'GPU',\n        options: getNGPURange('audio'),\n        visible: true,\n      },\n      {\n        name: 'gpu_idx',\n        label: t('launchModel.GPUIdx'),\n        type: 'input',\n        error: !!formData.gpu_idx && !/^\\d+(?:,\\d+)*$/.test(formData.gpu_idx),\n        helperText: t('launchModel.enterCommaSeparatedNumbers'),\n        visible: !!formData.n_gpu && formData.n_gpu === 'GPU',\n      },\n      {\n        name: 'worker_ip',\n        label: t('launchModel.workerIp.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'model_path',\n        label: t('launchModel.modelPath.optional'),\n        type: 'input',\n        visible: true,\n      },\n      {\n        name: 'request_limits',\n        label: t('launchModel.requestLimits.optional'),\n        type: 'number',\n        inputProps: {\n          inputProps: {\n            min: 1,\n          },\n        },\n        error:\n          !!formData.request_limits &&\n          !/^[1-9]\\d*$/.test(formData.request_limits),\n        helperText: t('launchModel.enterIntegerGreaterThanZero'),\n        visible: true,\n      },\n      {\n        name: 'nested_section_virtualEnv',\n        label: t('launchModel.virtualEnvConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'enable_virtual_env',\n            label: t('launchModel.modelVirtualEnv'),\n            type: 'radio',\n            options: [\n              { label: 'Unset', value: 'unset' },\n              { label: 'False', value: false },\n              { label: 'True', value: true },\n            ],\n            default: 'unset',\n            visible: true,\n          },\n          {\n            name: 'virtual_env_packages',\n            label: t('launchModel.virtualEnvPackage'),\n            type: 'dynamicField',\n            mode: 'value',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'nested_section_env',\n        label: t('launchModel.envVariableConfig'),\n        type: 'collapse',\n        visible: true,\n        children: [\n          {\n            name: 'envs',\n            label: t('launchModel.envVariable'),\n            type: 'dynamicField',\n            mode: 'key-value',\n            keyPlaceholder: 'key',\n            valuePlaceholder: 'value',\n            visible: true,\n          },\n        ],\n      },\n      {\n        name: 'custom',\n        label: t('launchModel.additionalParametersForInferenceEngine'),\n        type: 'dynamicField',\n        mode: 'key-value',\n        keyPlaceholder: 'key',\n        valuePlaceholder: 'value',\n        visible: true,\n      },\n    ],\n  }\n\n  return config\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/pasteDialog.js",
    "content": "import {\n  Button,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogTitle,\n  TextField,\n} from '@mui/material'\nimport React, { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nconst PasteDialog = ({ open, onHandleClose, onHandleCommandLine }) => {\n  const { t } = useTranslation()\n  const [command, setCommand] = useState('')\n\n  const handleClose = () => {\n    onHandleClose()\n    setCommand('')\n  }\n\n  const parseXinferenceCommand = () => {\n    const params = {}\n    const peftModelConfig = {\n      lora_list: [],\n      image_lora_load_kwargs: {},\n      image_lora_fuse_kwargs: {},\n    }\n    const quantizationConfig = {}\n    const virtualEnvPackages = []\n    const envs = {}\n\n    let newcommand = command.replace('xinference launch', '').trim()\n    const args =\n      newcommand.match(\n        /--[\\w-]+(?:\\s+(?:\"[^\"]*\"|'[^']*'|(?:[^\\s-][^\\s]*\\s*)+))?/g\n      ) || []\n\n    for (const arg of args) {\n      const match = arg\n        .trim()\n        .match(/^--([\\w-]+)(?:\\s+(?:\"([^\"]+)\"|'([^']+)'|(.+)))?$/)\n      if (!match) continue\n\n      const key = match[1]\n      const value = match[2] || match[3] || match[4] || ''\n      const normalizedKey = key.replace(/-/g, '_')\n\n      if (normalizedKey === 'gpu_idx') {\n        params[normalizedKey] = value.split(',').map(Number)\n      } else if (normalizedKey === 'lora_modules') {\n        const loraPairs = value.split(/\\s+/)\n        for (let i = 0; i < loraPairs.length; i += 2) {\n          const lora_name = loraPairs[i]\n          const local_path = loraPairs[i + 1]\n          if (lora_name && local_path) {\n            peftModelConfig.lora_list.push({ lora_name, local_path })\n          }\n        }\n      } else if (normalizedKey === 'image_lora_load_kwargs') {\n        peftModelConfig.image_lora_load_kwargs = {}\n        const [load_param, load_value] = value.split(/\\s+/)\n        peftModelConfig.image_lora_load_kwargs[load_param] = load_value\n      } else if (normalizedKey === 'image_lora_fuse_kwargs') {\n        peftModelConfig.image_lora_fuse_kwargs = {}\n        const [fuse_param, fuse_value] = value.split(/\\s+/)\n        peftModelConfig.image_lora_fuse_kwargs[fuse_param] = fuse_value\n      } else if (normalizedKey === 'quantization_config') {\n        const [k, v] = value.split(/\\s+/)\n        quantizationConfig[k] = v\n      } else if (key === 'enable-virtual-env') {\n        params.enable_virtual_env = true\n      } else if (key === 'disable-virtual-env') {\n        params.enable_virtual_env = false\n      } else if (normalizedKey === 'virtual_env_package') {\n        virtualEnvPackages.push(value)\n      } else if (normalizedKey === 'env') {\n        const [envKey, envVal] = value.split(/\\s+/)\n        if (envKey && envVal !== undefined) {\n          envs[envKey] = envVal\n        }\n      } else {\n        if (\n          ['enable_thinking', 'cpu_offload', 'reasoning_content'].includes(\n            normalizedKey\n          )\n        ) {\n          params[normalizedKey] = value === 'true'\n        } else if (normalizedKey === 'size_in_billions') {\n          params['model_size_in_billions'] = value\n        } else {\n          params[normalizedKey] = value\n        }\n      }\n    }\n\n    if (\n      peftModelConfig.lora_list.length > 0 ||\n      Object.keys(peftModelConfig.image_lora_load_kwargs)?.length > 0 ||\n      Object.keys(peftModelConfig.image_lora_fuse_kwargs)?.length > 0\n    ) {\n      params.peft_model_config = peftModelConfig\n    }\n\n    if (Object.keys(quantizationConfig).length > 0) {\n      params.quantization_config = quantizationConfig\n    }\n\n    if (virtualEnvPackages.length > 0) {\n      params.virtual_env_packages = virtualEnvPackages\n    }\n\n    if (Object.keys(envs).length > 0) {\n      params.envs = envs\n    }\n\n    onHandleCommandLine(params)\n    handleClose()\n  }\n\n  return (\n    <Dialog open={open}>\n      <DialogTitle>{t('launchModel.commandLineParsing')}</DialogTitle>\n      <DialogContent>\n        <div style={{ width: '500px', height: '120px' }}>\n          <TextField\n            multiline\n            fullWidth\n            rows={5}\n            placeholder={t('launchModel.placeholderTip')}\n            value={command}\n            onChange={(e) => {\n              setCommand(e.target.value)\n            }}\n          />\n        </div>\n      </DialogContent>\n      <DialogActions>\n        <Button onClick={handleClose}>{t('launchModel.cancel')}</Button>\n        <Button autoFocus onClick={parseXinferenceCommand}>\n          {t('launchModel.confirm')}\n        </Button>\n      </DialogActions>\n    </Dialog>\n  )\n}\n\nexport default PasteDialog\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/progress.js",
    "content": "import LinearProgress from '@mui/material/LinearProgress'\nimport React from 'react'\n\nconst Progress = ({ progress }) => {\n  return (\n    <div style={{ marginBottom: 10 }}>\n      <LinearProgress variant=\"determinate\" value={progress * 100} />\n    </div>\n  )\n}\n\nexport default Progress\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/selectField.js",
    "content": "import { FormControl, InputLabel, MenuItem, Select } from '@mui/material'\nimport { useEffect, useRef, useState } from 'react'\n\nconst SelectField = ({\n  label,\n  labelId,\n  name,\n  value,\n  onChange,\n  options = [],\n  disabled = false,\n  required = false,\n}) => {\n  const wrapperRef = useRef(null)\n  const [menuWidth, setMenuWidth] = useState(0)\n\n  useEffect(() => {\n    if (wrapperRef.current) {\n      setMenuWidth(wrapperRef.current.offsetWidth)\n    }\n  }, [])\n\n  return (\n    <div ref={wrapperRef}>\n      <FormControl\n        variant=\"outlined\"\n        margin=\"normal\"\n        disabled={disabled}\n        required={required}\n        fullWidth\n      >\n        <InputLabel id={labelId}>{label}</InputLabel>\n        <Select\n          labelId={labelId}\n          name={name}\n          value={value}\n          onChange={onChange}\n          label={label}\n          className=\"textHighlight\"\n          MenuProps={{\n            PaperProps: {\n              sx: {\n                width: menuWidth,\n                maxWidth: menuWidth,\n              },\n            },\n          }}\n        >\n          {options.map((item) => (\n            <MenuItem\n              key={item.value || item}\n              value={item.value || item}\n              disabled={item.disabled}\n              sx={{\n                whiteSpace: 'normal',\n              }}\n            >\n              {item.label || item}\n            </MenuItem>\n          ))}\n        </Select>\n      </FormControl>\n    </div>\n  )\n}\n\nexport default SelectField\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/components/virtualenvListDialog.js",
    "content": "import { Close, Delete } from '@mui/icons-material'\nimport {\n  Box,\n  Dialog,\n  DialogContent,\n  DialogTitle,\n  IconButton,\n  Paper,\n  Table,\n  TableBody,\n  TableCell,\n  TableContainer,\n  TableHead,\n  TablePagination,\n  TableRow,\n  Tooltip,\n} from '@mui/material'\nimport { styled } from '@mui/material/styles'\nimport React, { useContext, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { ApiContext } from '../../../components/apiContext'\nimport CopyComponent from '../../../components/copyComponent'\nimport DeleteDialog from '../../../components/deleteDialog'\nimport fetchWrapper from '../../../components/fetchWrapper'\n\nconst VirtualEnvListDialog = ({ open, onClose, onUpdate, modelData }) => {\n  const { t } = useTranslation()\n  const { setErrorMsg } = useContext(ApiContext)\n  const [virtualenvListArr, setVirtualenvListArr] = useState([])\n  const [page, setPage] = useState(0)\n  const [isDeleteVirtualenv, setIsDeleteVirtualenv] = useState(false)\n  const [selectedVirtualEnv, setSelectedVirtualEnv] = useState(null)\n\n  const StyledTableRow = styled(TableRow)(({ theme }) => ({\n    '&:nth-of-type(odd)': {\n      backgroundColor: theme.palette.action.hover,\n    },\n  }))\n\n  const emptyRows =\n    page >= 0 ? Math.max(0, (1 + page) * 5 - virtualenvListArr.length) : 0\n\n  const getVirtualenvList = () => {\n    if (!modelData?.model_name) return\n\n    fetchWrapper\n      .get(`/v1/virtualenvs?model_name=${modelData.model_name}`)\n      .then((data) => {\n        setVirtualenvListArr(data.list)\n        // Always reset to page 0 since we only show one model's virtual environment\n        setPage(0)\n      })\n      .catch((error) => {\n        if (error.response.status !== 403) {\n          setErrorMsg(error.message)\n        }\n      })\n  }\n\n  const buildDeleteQuery = (virtualEnv) => {\n    const params = new URLSearchParams()\n    if (virtualEnv?.model_name) params.set('model_name', virtualEnv.model_name)\n    if (virtualEnv?.model_engine)\n      params.set('model_engine', virtualEnv.model_engine)\n    if (virtualEnv?.python_version)\n      params.set('python_version', virtualEnv.python_version)\n    if (virtualEnv?.actor_ip_address)\n      params.set('worker_ip', virtualEnv.actor_ip_address)\n    return params.toString()\n  }\n\n  const handleDeleteVirtualenv = () => {\n    if (!selectedVirtualEnv?.model_name) {\n      setIsDeleteVirtualenv(false)\n      return\n    }\n    fetchWrapper\n      .delete(`/v1/virtualenvs?${buildDeleteQuery(selectedVirtualEnv)}`)\n      .then(() => {\n        getVirtualenvList()\n        setIsDeleteVirtualenv(false)\n        setSelectedVirtualEnv(null)\n      })\n      .catch((error) => {\n        console.error(error)\n        if (!error.response || error.response.status !== 403)\n          setErrorMsg(error.message)\n      })\n  }\n\n  const handleChangePage = (_, newPage) => {\n    setPage(newPage)\n  }\n\n  const handleOpenDeleteVirtualenvDialog = (virtualEnv) => {\n    setSelectedVirtualEnv(virtualEnv)\n    setIsDeleteVirtualenv(true)\n  }\n\n  const handleCloseVirtualenvList = () => {\n    onClose()\n    onUpdate()\n  }\n\n  useEffect(() => {\n    if (open) getVirtualenvList()\n  }, [open])\n\n  return (\n    <>\n      <Dialog\n        open={open}\n        onClose={onClose}\n        maxWidth=\"xl\"\n        aria-labelledby=\"virtualenv-dialog-title\"\n        aria-describedby=\"virtualenv-dialog-description\"\n      >\n        <DialogTitle sx={{ m: 0, p: 2 }} id=\"customized-dialog-title\">\n          {modelData?.model_name || t('launchModel.manageVirtualEnvironments')}\n        </DialogTitle>\n        <Box\n          sx={(theme) => ({\n            position: 'absolute',\n            right: 8,\n            top: 8,\n            color: theme.palette.grey[500],\n          })}\n        >\n          <Close\n            style={{ cursor: 'pointer' }}\n            onClick={handleCloseVirtualenvList}\n          />\n        </Box>\n        <DialogContent>\n          <TableContainer component={Paper}>\n            <Table\n              sx={{ minWidth: 700 }}\n              style={{ height: '500px', width: '100%' }}\n              stickyHeader\n              aria-label=\"virtualenv pagination table\"\n            >\n              <TableHead>\n                <TableRow>\n                  <TableCell align=\"left\">\n                    {t('launchModel.modelName')}\n                  </TableCell>\n                  <TableCell align=\"left\">{t('launchModel.envPath')}</TableCell>\n                  <TableCell align=\"left\" style={{ width: 46 }}></TableCell>\n                  <TableCell align=\"left\">\n                    {t('launchModel.pythonVersion')}\n                  </TableCell>\n                  <TableCell align=\"left\">\n                    {t('launchModel.ipAddress')}\n                  </TableCell>\n                  <TableCell align=\"left\">\n                    {t('launchModel.operation')}\n                  </TableCell>\n                </TableRow>\n              </TableHead>\n              <TableBody style={{ position: 'relative' }}>\n                {virtualenvListArr.slice(page * 5, page * 5 + 5).map((row) => (\n                  <StyledTableRow\n                    style={{ maxHeight: 90 }}\n                    key={\n                      row.path ||\n                      `${row.model_name}-${row.model_engine || 'default'}-${\n                        row.python_version || 'unknown'\n                      }`\n                    }\n                  >\n                    <TableCell component=\"th\" scope=\"row\">\n                      <Tooltip title={row.model_name}>\n                        <div className=\"pathBox\" style={{ maxWidth: 150 }}>\n                          {row.model_name}\n                        </div>\n                      </Tooltip>\n                    </TableCell>\n                    <TableCell>\n                      <Tooltip title={row.path}>\n                        <div className=\"pathBox\" style={{ maxWidth: 200 }}>\n                          {row.path}\n                        </div>\n                      </Tooltip>\n                    </TableCell>\n                    <TableCell>\n                      <CopyComponent\n                        tip={t('launchModel.copyEnvPath')}\n                        text={row.path}\n                      />\n                    </TableCell>\n                    <TableCell>{row.python_version || '—'}</TableCell>\n                    <TableCell>{row.actor_ip_address}</TableCell>\n                    <TableCell align=\"center\">\n                      <Tooltip title={t('launchModel.delete')}>\n                        <IconButton\n                          aria-label=\"delete\"\n                          size=\"large\"\n                          onClick={() => handleOpenDeleteVirtualenvDialog(row)}\n                        >\n                          <Delete />\n                        </IconButton>\n                      </Tooltip>\n                    </TableCell>\n                  </StyledTableRow>\n                ))}\n                {emptyRows > 0 && (\n                  <TableRow style={{ height: 89.4 * emptyRows }}>\n                    <TableCell />\n                  </TableRow>\n                )}\n                {virtualenvListArr.length === 0 && (\n                  <div className=\"empty\">\n                    {t('launchModel.noVirtualEnvironmentsForNow')}\n                  </div>\n                )}\n              </TableBody>\n            </Table>\n          </TableContainer>\n          <TablePagination\n            style={{ float: 'right' }}\n            rowsPerPageOptions={[5]}\n            count={virtualenvListArr.length}\n            rowsPerPage={5}\n            page={page}\n            onPageChange={handleChangePage}\n          />\n        </DialogContent>\n      </Dialog>\n\n      {/* Delete Confirmation Dialog */}\n      <DeleteDialog\n        text={t('launchModel.confirmDeleteVirtualEnv')}\n        isDelete={isDeleteVirtualenv}\n        onHandleIsDelete={() => setIsDeleteVirtualenv(false)}\n        onHandleDelete={handleDeleteVirtualenv}\n      />\n    </>\n  )\n}\n\nexport default VirtualEnvListDialog\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/data/data.js",
    "content": "export const llmAllDataKey = [\n  'model_uid',\n  'model_name',\n  'model_type',\n  'model_engine',\n  'model_format',\n  'model_size_in_billions',\n  'quantization',\n  'n_worker',\n  'n_gpu',\n  'n_gpu_layers',\n  'replica',\n  'request_limits',\n  'worker_ip',\n  'gpu_idx',\n  'download_hub',\n  'model_path',\n  'reasoning_content',\n  'gguf_quantization',\n  'gguf_model_path',\n  'lightning_version',\n  'lightning_model_path',\n  'cpu_offload',\n  'peft_model_config',\n  'quantization_config',\n  'enable_thinking',\n  'multimodal_projector',\n  'enable_virtual_env',\n  'virtual_env_packages',\n  'envs',\n]\n\nexport const additionalParameterTipList = {\n  'transformers': ['torch_dtype', 'device', 'enable_flash_attn'],\n  'llama.cpp': ['n_ctx', 'use_mmap', 'use_mlock'],\n  'vllm': [\n    'block_size',\n    'gpu_memory_utilization',\n    'max_num_seqs',\n    'max_model_len',\n    'guided_decoding_backend',\n    'scheduling_policy',\n    'tensor_parallel_size',\n    'pipeline_parallel_size',\n    'enable_prefix_caching',\n    'enable_chunked_prefill',\n    'enable_expert_parallel',\n    'enforce_eager',\n    'cpu_offload_gb',\n    'disable_custom_all_reduce',\n    'limit_mm_per_prompt',\n    'model_quantization',\n    'mm_processor_kwargs',\n    'min_pixels',\n    'max_pixels',\n  ],\n  'sglang': [\n    'mem_fraction_static',\n    'attention_reduce_in_fp32',\n    'tp_size',\n    'dp_size',\n    'chunked_prefill_size',\n    'cpu_offload_gb',\n    'enable_dp_attention',\n    'enable_ep_moe',\n  ],\n  'mlx': ['cache_limit_gb', 'max_kv_size'],\n}\n\nexport const quantizationParametersTipList = [\n  'load_in_8bit',\n  'load_in_4bit',\n  'llm_int8_threshold',\n  'llm_int8_skip_modules',\n  'llm_int8_enable_fp32_cpu_offload',\n  'llm_int8_has_fp16_weight',\n  'bnb_4bit_compute_dtype',\n  'bnb_4bit_quant_type',\n  'bnb_4bit_use_double_quant',\n  'bnb_4bit_quant_storage',\n]\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/index.js",
    "content": "import { LoadingButton, TabContext, TabList, TabPanel } from '@mui/lab'\nimport { Box, MenuItem, Select, Tab } from '@mui/material'\nimport React, { useContext, useEffect, useRef, useState } from 'react'\nimport { useCookies } from 'react-cookie'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ApiContext } from '../../components/apiContext'\nimport ErrorMessageSnackBar from '../../components/errorMessageSnackBar'\nimport fetchWrapper from '../../components/fetchWrapper'\nimport SuccessMessageSnackBar from '../../components/successMessageSnackBar'\nimport Title from '../../components/Title'\nimport { isValidBearerToken } from '../../components/utils'\nimport LaunchCustom from './launchCustom'\nimport LaunchModelComponent from './LaunchModel'\n\nconst LaunchModel = () => {\n  const [value, setValue] = React.useState(\n    sessionStorage.getItem('modelType')\n      ? sessionStorage.getItem('modelType')\n      : '/launch_model/llm'\n  )\n  const [gpuAvailable, setGPUAvailable] = useState(-1)\n  const [modelType, setModelType] = useState('llm')\n  const [loading, setLoading] = useState(false)\n\n  const { setErrorMsg } = useContext(ApiContext)\n  const [cookie] = useCookies(['token'])\n  const navigate = useNavigate()\n  const { t } = useTranslation()\n  const LaunchModelRefs = useRef({})\n\n  const handleTabChange = (newValue) => {\n    setValue(newValue)\n    navigate(newValue)\n    sessionStorage.setItem('modelType', newValue)\n    newValue === '/launch_model/custom/llm'\n      ? sessionStorage.setItem('subType', newValue)\n      : ''\n  }\n\n  useEffect(() => {\n    if (\n      sessionStorage.getItem('auth') === 'true' &&\n      !isValidBearerToken(sessionStorage.getItem('token')) &&\n      !isValidBearerToken(cookie.token)\n    ) {\n      navigate('/login', { replace: true })\n    }\n\n    if (gpuAvailable === -1) {\n      fetchWrapper\n        .get('/v1/cluster/devices')\n        .then((data) => setGPUAvailable(parseInt(data, 10)))\n        .catch((error) => {\n          console.error('Error:', error)\n          if (error.response.status !== 403 && error.response.status !== 401) {\n            setErrorMsg(error.message)\n          }\n        })\n    }\n  }, [cookie.token])\n\n  const updateList = (modelType) => {\n    LaunchModelRefs.current[modelType]?.update()\n  }\n\n  const updateModels = () => {\n    setLoading(true)\n    fetchWrapper\n      .post('/v1/models/update_type', { model_type: modelType })\n      .then(() => {\n        handleTabChange(`/launch_model/${modelType}`)\n        updateList(modelType)\n      })\n      .catch((error) => {\n        console.error('Error:', error)\n        if (error.response.status !== 403 && error.response.status !== 401) {\n          setErrorMsg(error.message)\n        }\n      })\n      .finally(() => {\n        setLoading(false)\n      })\n  }\n\n  return (\n    <Box m=\"20px\">\n      <Title title={t('menu.launchModel')} />\n      <ErrorMessageSnackBar />\n      <SuccessMessageSnackBar />\n      <TabContext value={value}>\n        <Box\n          sx={{\n            borderBottom: 1,\n            borderColor: 'divider',\n            display: 'flex',\n            justifyContent: 'space-between',\n            alignItems: 'center',\n          }}\n        >\n          <TabList\n            value={value}\n            onChange={(_, value) => handleTabChange(value)}\n            aria-label=\"tabs\"\n          >\n            <Tab label={t('model.languageModels')} value=\"/launch_model/llm\" />\n            <Tab\n              label={t('model.embeddingModels')}\n              value=\"/launch_model/embedding\"\n            />\n            <Tab label={t('model.rerankModels')} value=\"/launch_model/rerank\" />\n            <Tab label={t('model.imageModels')} value=\"/launch_model/image\" />\n            <Tab label={t('model.audioModels')} value=\"/launch_model/audio\" />\n            <Tab label={t('model.videoModels')} value=\"/launch_model/video\" />\n            <Tab\n              label={t('model.customModels')}\n              value=\"/launch_model/custom/llm\"\n            />\n          </TabList>\n          <Box sx={{ display: 'flex', gap: 0 }}>\n            <Select\n              value={modelType}\n              onChange={(e) => setModelType(e.target.value)}\n              size=\"small\"\n              sx={{\n                borderTopRightRadius: 0,\n                borderBottomRightRadius: 0,\n                minWidth: 100,\n              }}\n            >\n              <MenuItem value=\"llm\">LLM</MenuItem>\n              <MenuItem value=\"embedding\">Embedding</MenuItem>\n              <MenuItem value=\"rerank\">Rerank</MenuItem>\n              <MenuItem value=\"image\">Image</MenuItem>\n              <MenuItem value=\"audio\">Audio</MenuItem>\n              <MenuItem value=\"video\">Video</MenuItem>\n            </Select>\n\n            <LoadingButton\n              variant=\"contained\"\n              onClick={updateModels}\n              loading={loading}\n              sx={{\n                borderTopLeftRadius: 0,\n                borderBottomLeftRadius: 0,\n                whiteSpace: 'nowrap',\n              }}\n            >\n              {t('launchModel.update')}\n            </LoadingButton>\n          </Box>\n        </Box>\n        <TabPanel value=\"/launch_model/llm\" sx={{ padding: 0 }}>\n          <LaunchModelComponent\n            modelType={'LLM'}\n            gpuAvailable={gpuAvailable}\n            ref={(ref) => (LaunchModelRefs.current.llm = ref)}\n          />\n        </TabPanel>\n        <TabPanel value=\"/launch_model/embedding\" sx={{ padding: 0 }}>\n          <LaunchModelComponent\n            modelType={'embedding'}\n            gpuAvailable={gpuAvailable}\n            ref={(ref) => (LaunchModelRefs.current.embedding = ref)}\n          />\n        </TabPanel>\n        <TabPanel value=\"/launch_model/rerank\" sx={{ padding: 0 }}>\n          <LaunchModelComponent\n            modelType={'rerank'}\n            gpuAvailable={gpuAvailable}\n            ref={(ref) => (LaunchModelRefs.current.rerank = ref)}\n          />\n        </TabPanel>\n        <TabPanel value=\"/launch_model/image\" sx={{ padding: 0 }}>\n          <LaunchModelComponent\n            modelType={'image'}\n            gpuAvailable={gpuAvailable}\n            ref={(ref) => (LaunchModelRefs.current.image = ref)}\n          />\n        </TabPanel>\n        <TabPanel value=\"/launch_model/audio\" sx={{ padding: 0 }}>\n          <LaunchModelComponent\n            modelType={'audio'}\n            gpuAvailable={gpuAvailable}\n            ref={(ref) => (LaunchModelRefs.current.audio = ref)}\n          />\n        </TabPanel>\n        <TabPanel value=\"/launch_model/video\" sx={{ padding: 0 }}>\n          <LaunchModelComponent\n            modelType={'video'}\n            gpuAvailable={gpuAvailable}\n            ref={(ref) => (LaunchModelRefs.current.video = ref)}\n          />\n        </TabPanel>\n        <TabPanel value=\"/launch_model/custom/llm\" sx={{ padding: 0 }}>\n          <LaunchCustom gpuAvailable={gpuAvailable} />\n        </TabPanel>\n      </TabContext>\n    </Box>\n  )\n}\n\nexport default LaunchModel\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/launchCustom.js",
    "content": "import { TabContext, TabList, TabPanel } from '@mui/lab'\nimport { Box, FormControl, Tab } from '@mui/material'\nimport React, { useContext, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ApiContext } from '../../components/apiContext'\nimport fetchWrapper from '../../components/fetchWrapper'\nimport HotkeyFocusTextField from '../../components/hotkeyFocusTextField'\nimport LaunchModelDrawer from './components/launchModelDrawer'\nimport ModelCard from './modelCard'\n\nconst customType = ['llm', 'embedding', 'rerank', 'image', 'audio', 'flexible']\n\nconst LaunchCustom = ({ gpuAvailable }) => {\n  let endPoint = useContext(ApiContext).endPoint\n  const [registrationData, setRegistrationData] = useState([])\n  const { isCallingApi, setIsCallingApi } = useContext(ApiContext)\n  const { isUpdatingModel } = useContext(ApiContext)\n\n  // States used for filtering\n  const [searchTerm, setSearchTerm] = useState('')\n  const [value, setValue] = useState(sessionStorage.getItem('subType'))\n  const [selectedModel, setSelectedModel] = useState(null)\n  const [isOpenLaunchModelDrawer, setIsOpenLaunchModelDrawer] = useState(false)\n  const { t } = useTranslation()\n\n  const navigate = useNavigate()\n  const handleTabChange = (_, newValue) => {\n    const type =\n      newValue.split('/')[3] === 'llm' ? 'LLM' : newValue.split('/')[3]\n    update(type)\n    setValue(newValue)\n    navigate(newValue)\n    sessionStorage.setItem('subType', newValue)\n  }\n\n  const handleSearchChange = (event) => {\n    setSearchTerm(event.target.value)\n  }\n\n  const filter = (registration) => {\n    if (!registration || typeof searchTerm !== 'string') return false\n    const modelName = registration.model_name\n      ? registration.model_name.toLowerCase()\n      : ''\n    return modelName.includes(searchTerm.toLowerCase())\n  }\n\n  useEffect(() => {\n    const type = sessionStorage.getItem('subType').split('/')[3]\n    update(type === 'llm' ? 'LLM' : type)\n  }, [])\n\n  const update = async (type) => {\n    if (isCallingApi || isUpdatingModel) return\n    try {\n      setIsCallingApi(true)\n\n      const data = await fetchWrapper.get(`/v1/model_registrations/${type}`)\n      const customRegistrations = data.filter((data) => !data.is_builtin)\n\n      const newData = await Promise.all(\n        customRegistrations.map(async (registration) => {\n          const desc = await fetchWrapper.get(\n            `/v1/model_registrations/${type}/${registration.model_name}`\n          )\n\n          return {\n            ...desc,\n            is_builtin: registration.is_builtin,\n          }\n        })\n      )\n      setRegistrationData(newData)\n    } catch (error) {\n      console.error('Error:', error)\n    } finally {\n      setIsCallingApi(false)\n    }\n  }\n\n  const style = {\n    display: 'grid',\n    gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n    paddingLeft: '2rem',\n    paddingBottom: '2rem',\n    gridGap: '2rem 0rem',\n  }\n\n  return (\n    <Box m=\"20px\">\n      <TabContext value={value}>\n        <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>\n          <TabList value={value} onChange={handleTabChange} aria-label=\"tabs\">\n            <Tab\n              label={t('model.languageModels')}\n              value=\"/launch_model/custom/llm\"\n            />\n            <Tab\n              label={t('model.embeddingModels')}\n              value=\"/launch_model/custom/embedding\"\n            />\n            <Tab\n              label={t('model.rerankModels')}\n              value=\"/launch_model/custom/rerank\"\n            />\n            <Tab\n              label={t('model.imageModels')}\n              value=\"/launch_model/custom/image\"\n            />\n            <Tab\n              label={t('model.audioModels')}\n              value=\"/launch_model/custom/audio\"\n            />\n            <Tab\n              label={t('model.flexibleModels')}\n              value=\"/launch_model/custom/flexible\"\n            />\n          </TabList>\n        </Box>\n        {customType.map((item) => (\n          <TabPanel\n            key={item}\n            value={`/launch_model/custom/${item}`}\n            sx={{ padding: 0 }}\n          >\n            <div\n              style={{\n                display: 'grid',\n                gridTemplateColumns: '1fr',\n                margin: '30px 2rem',\n              }}\n            >\n              <FormControl variant=\"outlined\" margin=\"normal\">\n                <HotkeyFocusTextField\n                  id=\"search\"\n                  type=\"search\"\n                  label={t('launchModel.search')}\n                  value={searchTerm}\n                  onChange={handleSearchChange}\n                  size=\"small\"\n                  hotkey=\"Enter\"\n                  t={t}\n                />\n              </FormControl>\n            </div>\n            <div style={style}>\n              {registrationData\n                .filter((registration) => filter(registration))\n                .map((filteredRegistration) => (\n                  <ModelCard\n                    key={filteredRegistration.model_name}\n                    url={endPoint}\n                    modelData={filteredRegistration}\n                    gpuAvailable={gpuAvailable}\n                    is_custom={true}\n                    modelType={item === 'llm' ? 'LLM' : item}\n                    onUpdate={update}\n                    onClick={() => {\n                      setSelectedModel(filteredRegistration)\n                      setIsOpenLaunchModelDrawer(true)\n                    }}\n                  />\n                ))}\n            </div>\n            {selectedModel && (\n              <LaunchModelDrawer\n                key={selectedModel.model_name}\n                modelData={selectedModel}\n                modelType={item === 'llm' ? 'LLM' : item}\n                gpuAvailable={gpuAvailable}\n                open={isOpenLaunchModelDrawer}\n                onClose={() => setIsOpenLaunchModelDrawer(false)}\n              />\n            )}\n          </TabPanel>\n        ))}\n      </TabContext>\n    </Box>\n  )\n}\n\nexport default LaunchCustom\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/modelCard.js",
    "content": "import './styles/modelCardStyle.css'\n\nimport {\n  ChatOutlined,\n  Computer,\n  Delete,\n  EditNote,\n  EditNoteOutlined,\n  Grade,\n  HelpCenterOutlined,\n  StarBorder,\n} from '@mui/icons-material'\nimport {\n  Box,\n  Button,\n  Chip,\n  IconButton,\n  Paper,\n  Stack,\n  Tooltip,\n  Typography,\n} from '@mui/material'\nimport React, { useContext, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ApiContext } from '../../components/apiContext'\nimport DeleteDialog from '../../components/deleteDialog'\nimport fetchWrapper from '../../components/fetchWrapper'\nimport TitleTypography from '../../components/titleTypography'\nimport CachedListDialog from './components/cachedListDialog'\nimport EditCustomModel from './components/editCustomModelDialog'\nimport VirtualEnvListDialog from './components/virtualenvListDialog'\n\nconst modelAbilityIcons = {\n  chat: <ChatOutlined />,\n  generate: <EditNoteOutlined />,\n  default: <HelpCenterOutlined />,\n}\n\nconst ModelCard = ({\n  modelData,\n  modelType,\n  is_custom = false,\n  onGetCollectionArr,\n  onUpdate,\n  onClick,\n  virtualEnvs = [],\n}) => {\n  const navigate = useNavigate()\n  const { t } = useTranslation()\n  const { setErrorMsg } = useContext(ApiContext)\n  const [isHovered, setIsHovered] = useState(false)\n  const [isDeleteCustomModel, setIsDeleteCustomModel] = useState(false)\n  const [isJsonShow, setIsJsonShow] = useState(false)\n  const [isOpenCachedList, setIsOpenCachedList] = useState(false)\n  const [isOpenVirtualenvList, setIsOpenVirtualenvList] = useState(false)\n  const [hasVirtualEnv, setHasVirtualEnv] = useState(null) // null = not checked yet\n\n  const descriptionContainerRef = useRef(null)\n  const descriptionTextRef = useRef(null)\n  const detailsButtonRef = useRef(null)\n  const [descClamp, setDescClamp] = useState(5)\n\n  const measureClamp = () => {\n    const container = descriptionContainerRef.current\n    const textEl = descriptionTextRef.current\n    const btnEl = detailsButtonRef.current\n    if (!container || !textEl) return\n    const containerHeight = container.clientHeight\n    const btnHeight = btnEl ? btnEl.offsetHeight : 0\n    const btnStyle = btnEl ? window.getComputedStyle(btnEl) : null\n    const btnMarginTop = btnStyle ? parseFloat(btnStyle.marginTop) || 0 : 0\n    const btnMarginBottom = btnStyle\n      ? parseFloat(btnStyle.marginBottom) || 0\n      : 0\n    const computed = window.getComputedStyle(textEl)\n    const lineHeightPx = parseFloat(computed.lineHeight)\n    const textMarginTop = parseFloat(computed.marginTop) || 0\n    const textMarginBottom = parseFloat(computed.marginBottom) || 0\n    if (!lineHeightPx || !containerHeight) return\n    const availableHeight = Math.max(\n      0,\n      containerHeight -\n        btnHeight -\n        btnMarginTop -\n        btnMarginBottom -\n        textMarginTop -\n        textMarginBottom\n    )\n    const maxLines = Math.floor(availableHeight / lineHeightPx)\n    const clamped = Math.max(1, Math.min(5, maxLines - 1))\n    setDescClamp(clamped)\n  }\n\n  useEffect(() => {\n    measureClamp()\n  }, [modelData, isHovered, hasVirtualEnv])\n\n  useEffect(() => {\n    const el = descriptionContainerRef.current\n    if (!el) return\n    const ro = new ResizeObserver(() => measureClamp())\n    ro.observe(el)\n    window.addEventListener('resize', measureClamp)\n    return () => {\n      ro.disconnect()\n      window.removeEventListener('resize', measureClamp)\n    }\n  }, [])\n\n  const isCached = (spec) => {\n    if (Array.isArray(spec.cache_status)) {\n      return spec.cache_status.some((cs) => cs)\n    } else {\n      return spec.cache_status === true\n    }\n  }\n\n  // Check if model has virtual environment using virtualEnvs data from parent\n  useEffect(() => {\n    if (modelData?.model_name) {\n      const hasEnv = virtualEnvs.some(\n        (env) => env.model_name === modelData.model_name\n      )\n      setHasVirtualEnv(hasEnv)\n    }\n  }, [modelData?.model_name, virtualEnvs])\n\n  // Handle favorite feature\n  const handleCollection = (shouldAdd) => {\n    const collectionArr =\n      JSON.parse(localStorage.getItem('collectionArr')) || []\n    const updatedCollection = shouldAdd\n      ? [...collectionArr, modelData.model_name]\n      : collectionArr.filter((item) => item !== modelData.model_name)\n\n    localStorage.setItem('collectionArr', JSON.stringify(updatedCollection))\n    onGetCollectionArr?.(updatedCollection)\n  }\n\n  // Retrieve model language array\n  const getModelLanguages = () => {\n    // Check possible language field names\n    const lang = modelData?.model_lang || modelData?.language\n\n    if (!lang) return []\n    return Array.isArray(lang) ? lang : [lang]\n  }\n\n  // Render generic chip component\n  const renderChips = ({ items, variant = 'default', onClick }) => {\n    if (!items || items.length === 0) return null\n\n    return items.map((item) => (\n      <Chip\n        key={item}\n        label={item}\n        size=\"small\"\n        variant={variant}\n        onClick={(e) => {\n          e?.stopPropagation()\n          onClick?.(e)\n        }}\n      />\n    ))\n  }\n\n  const renderAbilityChips = () => {\n    const abilities = modelData?.model_ability\n    if (!abilities) return null\n\n    const abilityArray = Array.isArray(abilities) ? abilities : [abilities]\n    return renderChips({ items: abilityArray })\n  }\n\n  const renderLanguageChips = () => {\n    const languages = getModelLanguages()\n    return renderChips({\n      items: languages,\n      variant: 'outlined',\n    })\n  }\n\n  const renderCacheChip = () => {\n    const hasCachedSpecs = modelData?.model_specs?.some((spec) =>\n      isCached(spec)\n    )\n    if (!hasCachedSpecs) return null\n\n    return (\n      <Chip\n        label={t('launchModel.manageCachedModels')}\n        variant=\"outlined\"\n        color=\"primary\"\n        size=\"small\"\n        deleteIcon={<EditNote />}\n        onDelete={handleOpenCachedList}\n        onClick={(e) => {\n          e?.stopPropagation()\n          handleOpenCachedList()\n        }}\n      />\n    )\n  }\n\n  const renderVirtualEnvChip = () => {\n    // Only show if we've determined the model might have a virtual environment\n    if (!hasVirtualEnv) return null\n\n    return (\n      <Chip\n        label={t('launchModel.manageVirtualEnvironments')}\n        variant=\"outlined\"\n        color=\"secondary\"\n        size=\"small\"\n        deleteIcon={<Computer />}\n        onDelete={() => setIsOpenVirtualenvList(true)}\n        onClick={(e) => {\n          e?.stopPropagation()\n          setIsOpenVirtualenvList(true)\n        }}\n      />\n    )\n  }\n\n  // Check if already favorited\n  const isFavorite = () => {\n    const collectionArr =\n      JSON.parse(localStorage.getItem('collectionArr')) || []\n    return collectionArr.includes(modelData.model_name)\n  }\n\n  // Render favorite/unfavorite button\n  const renderFavoriteButton = () => {\n    const favorite = isFavorite()\n    const icon = favorite ? (\n      <Grade style={{ color: 'rgb(255, 206, 0)' }} />\n    ) : (\n      <StarBorder />\n    )\n\n    const tooltipTitle = favorite\n      ? t('launchModel.unfavorite')\n      : t('launchModel.favorite')\n\n    return (\n      <Tooltip title={tooltipTitle} placement=\"top\">\n        <IconButton\n          aria-label={favorite ? 'collection' : 'cancellation-of-collections'}\n          onClick={(e) => {\n            e?.stopPropagation()\n            handleCollection(!favorite)\n          }}\n        >\n          {icon}\n        </IconButton>\n      </Tooltip>\n    )\n  }\n\n  // Render custom model action buttons\n  const renderCustomModelActions = () => (\n    <>\n      <Tooltip title={t('launchModel.edit')} placement=\"top\">\n        <IconButton\n          aria-label=\"show\"\n          onClick={(e) => {\n            e?.stopPropagation()\n            setIsJsonShow(true)\n          }}\n        >\n          <EditNote />\n        </IconButton>\n      </Tooltip>\n      <Tooltip title={t('launchModel.delete')} placement=\"top\">\n        <IconButton\n          aria-label=\"delete\"\n          onClick={(e) => {\n            e?.stopPropagation()\n            setIsDeleteCustomModel(true)\n          }}\n        >\n          <Delete />\n        </IconButton>\n      </Tooltip>\n    </>\n  )\n\n  const MetricItem = ({ value, label, icon }) => (\n    <Box\n      sx={{\n        display: 'flex',\n        flexDirection: 'column',\n        alignItems: 'center',\n        minWidth: 80,\n      }}\n    >\n      {icon && React.cloneElement(icon, { sx: { fontSize: 20, mb: 0.5 } })}\n      {value && (\n        <Typography variant=\"body2\" sx={{ fontWeight: 600, fontSize: '1.2em' }}>\n          {value}\n        </Typography>\n      )}\n      <Typography\n        variant=\"caption\"\n        color=\"text.secondary\"\n        sx={{ fontWeight: 600, fontSize: '0.8em' }}\n      >\n        {label}\n      </Typography>\n    </Box>\n  )\n\n  // Delete custom model\n  const handeCustomDelete = (e) => {\n    e.stopPropagation()\n\n    const subType = sessionStorage.getItem('subType').split('/')\n    if (subType) {\n      subType[3]\n      fetchWrapper\n        .delete(\n          `/v1/model_registrations/${\n            subType[3] === 'llm' ? 'LLM' : subType[3]\n          }/${modelData.model_name}`\n        )\n        .then(() => {\n          onUpdate(subType[3] === 'llm' ? 'LLM' : subType[3])\n          setIsDeleteCustomModel(false)\n        })\n        .catch((error) => {\n          console.error(error)\n          if (error.response.status !== 403) {\n            setErrorMsg(error.message)\n          }\n        })\n    }\n  }\n\n  const handleJsonDataPresentation = () => {\n    const arr = sessionStorage.getItem('subType').split('/')\n    sessionStorage.setItem(\n      'registerModelType',\n      `/register_model/${arr[arr.length - 1]}`\n    )\n    sessionStorage.setItem('customJsonData', JSON.stringify(modelData))\n    navigate(`/register_model/${arr[arr.length - 1]}/${modelData.model_name}`)\n  }\n\n  const handleOpenCachedList = () => {\n    setIsOpenCachedList(true)\n  }\n\n  const detailUrl = `https://model.xinference.io/models/detail/${encodeURIComponent(\n    modelData?.model_name || ''\n  )}`\n\n  const renderDetailsButton = () => {\n    if (is_custom) return null\n    return (\n      <Button\n        ref={detailsButtonRef}\n        component=\"a\"\n        href={detailUrl}\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        variant=\"text\"\n        size=\"small\"\n        sx={{ mt: 0.5 }}\n        onClick={(e) => {\n          e.stopPropagation()\n        }}\n      >\n        {t('launchModel.moreDetails')}\n      </Button>\n    )\n  }\n\n  return (\n    <>\n      <Tooltip title={modelData.model_name} placement=\"top\">\n        <Paper\n          className=\"container\"\n          onMouseEnter={() => setIsHovered(true)}\n          onMouseLeave={() => setIsHovered(false)}\n          elevation={isHovered ? 24 : 4}\n          onClick={onClick}\n        >\n          <Box className=\"descriptionCard\">\n            <Box>\n              <Box className=\"cardTitle\">\n                <TitleTypography value={modelData.model_name} />\n                <Box className=\"iconButtonBox\">\n                  {is_custom\n                    ? renderCustomModelActions()\n                    : renderFavoriteButton()}\n                </Box>\n              </Box>\n\n              <Stack\n                spacing={1}\n                direction=\"row\"\n                useFlexGap\n                flexWrap=\"wrap\"\n                sx={{ marginLeft: 1 }}\n              >\n                {renderAbilityChips()}\n                {renderLanguageChips()}\n                {renderCacheChip()}\n                {renderVirtualEnvChip()}\n              </Stack>\n            </Box>\n\n            <Box\n              ref={descriptionContainerRef}\n              sx={{\n                flex: 1,\n                display: 'flex',\n                flexDirection: 'column',\n                justifyContent: 'center',\n                alignItems: 'center',\n                color: 'text.secondary',\n              }}\n            >\n              {modelData.model_description ? (\n                <>\n                  <Box\n                    component=\"p\"\n                    ref={descriptionTextRef}\n                    sx={{\n                      m: 0,\n                      mt: 0.5,\n                      display: '-webkit-box',\n                      WebkitLineClamp: descClamp,\n                      WebkitBoxOrient: 'vertical',\n                      overflow: 'hidden',\n                      textOverflow: 'ellipsis',\n                      fontSize: '14px',\n                      lineHeight: '20px',\n                      paddingInline: '10px',\n                    }}\n                    title={modelData.model_description}\n                  >\n                    {modelData.model_description}\n                  </Box>\n                </>\n              ) : (\n                <>\n                  {isHovered && (\n                    <Box\n                      component=\"p\"\n                      sx={{\n                        m: 0,\n                        textAlign: 'center',\n                        fontStyle: 'italic',\n                      }}\n                    >\n                      {t('launchModel.clickToLaunchModel')}\n                    </Box>\n                  )}\n                </>\n              )}\n              {renderDetailsButton()}\n            </Box>\n\n            {modelType === 'LLM' && (\n              <Box\n                sx={{\n                  display: 'flex',\n                  justifyContent: 'space-between',\n                  alignItems: 'center',\n                }}\n              >\n                <MetricItem\n                  value={`${Math.floor(modelData.context_length / 1000)}K`}\n                  label={t('launchModel.contextLength')}\n                />\n\n                <MetricItem\n                  icon={\n                    modelData.model_ability?.includes('chat')\n                      ? modelAbilityIcons.chat\n                      : modelData.model_ability?.includes('generate')\n                      ? modelAbilityIcons.generate\n                      : modelAbilityIcons.default\n                  }\n                  label={\n                    modelData.model_ability?.includes('chat')\n                      ? t('launchModel.chatModel')\n                      : modelData.model_ability?.includes('generate')\n                      ? t('launchModel.generateModel')\n                      : t('launchModel.otherModel')\n                  }\n                />\n              </Box>\n            )}\n\n            {(modelData.dimensions || modelData.max_tokens) && (\n              <Box\n                sx={{\n                  display: 'flex',\n                  justifyContent: 'space-between',\n                  alignItems: 'center',\n                }}\n              >\n                <Box>\n                  {modelData.dimensions && (\n                    <MetricItem\n                      value={modelData.dimensions}\n                      label={t('launchModel.dimensions')}\n                    />\n                  )}\n                </Box>\n\n                <Box>\n                  {modelData.max_tokens && (\n                    <MetricItem\n                      value={modelData.max_tokens}\n                      label={t('launchModel.maxTokens')}\n                    />\n                  )}\n                </Box>\n              </Box>\n            )}\n          </Box>\n        </Paper>\n      </Tooltip>\n\n      <DeleteDialog\n        text={t('launchModel.confirmDeleteCustomModel')}\n        isDelete={isDeleteCustomModel}\n        onHandleIsDelete={() => setIsDeleteCustomModel(false)}\n        onHandleDelete={handeCustomDelete}\n      />\n\n      <CachedListDialog\n        open={isOpenCachedList}\n        modelData={modelData}\n        modelType={modelType}\n        onClose={() => setIsOpenCachedList(false)}\n        onUpdate={onUpdate}\n      />\n\n      <VirtualEnvListDialog\n        open={isOpenVirtualenvList}\n        onClose={() => setIsOpenVirtualenvList(false)}\n        onUpdate={onUpdate}\n        modelData={modelData}\n      />\n\n      <EditCustomModel\n        open={isJsonShow}\n        modelData={modelData}\n        onClose={() => setIsJsonShow(false)}\n        handleJsonDataPresentation={handleJsonDataPresentation}\n      />\n    </>\n  )\n}\n\nexport default ModelCard\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/launch_model/styles/modelCardStyle.css",
    "content": ".container {\n  display: block;\n  position: relative;\n  width: 300px;\n  height: 300px;\n  cursor: pointer;\n  border-radius: 20px !important;\n}\n.descriptionCard {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  position: relative;\n  top: -1px;\n  left: -1px;\n  width: 300px;\n  height: 300px;\n  padding: 20px;\n  border-radius: 20px;\n}\n.cardTitle {\n  display: flex;\n  justify-content: space-between;\n}\n.iconButtonBox {\n  display: flex;\n  align-items: center;\n}\n.drawerCard {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  padding: 20px 80px 100px;\n  min-height: 100%;\n  width: 60vw;\n  min-width: 350px;\n  overflow-y: scroll;\n}\n.pasteText {\n  font-size: 18px !important;\n  color: #1976d2;\n  cursor: pointer;\n  margin-inline: 10px;\n}\n.pasteText:hover {\n  color: #1976d2b3;\n}\n.copyToCommandLine {\n  font-size: 16px !important;\n  color: #1976d2;\n  cursor: pointer;\n}\n.copyToCommandLine:hover {\n  color: #1976d2b3;\n}\n.css-1be5mm1-MuiLinearProgress-root-MuiMobileStepper-progress {\n  width: 100% !important;\n}\n.css-r5rjnf-MuiLinearProgress-root-MuiMobileStepper-progress {\n  width: 100% !important;\n}\n.pathBox {\n  width: 160px;\n  cursor: pointer;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.pathBox2 {\n  width: 300px;\n}\n.empty {\n  position: absolute;\n  left: 50%;\n  top: 30%;\n  font-size: 20px;\n  color: #555;\n  transform: translate(-50%, 0);\n}\n.deleteDialog {\n  display: flex;\n  align-items: center;\n}\n.warningIcon {\n  margin-right: 10px;\n  color: rgb(237, 108, 2);\n}\n.textHighlight .MuiSelect-select {\n  color: #1976d2;\n}\n.textHighlight .MuiInputBase-input {\n  color: #1976d2;\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/login/header.js",
    "content": "import { AppBar, Box, Toolbar } from '@mui/material'\nimport Typography from '@mui/material/Typography'\nimport * as React from 'react'\n\nimport icon from '../../media/icon.webp'\n\nexport default function Header() {\n  return (\n    <AppBar\n      elevation={0}\n      color=\"transparent\"\n      sx={{\n        backdropFilter: 'blur(20px)',\n        borderBottom: 1,\n        borderColor: 'grey.300',\n        zIndex: (theme) => theme.zIndex.drawer + 1,\n      }}\n    >\n      <Toolbar sx={{ justifyContent: 'start' }}>\n        <Box\n          component=\"img\"\n          alt=\"profile\"\n          src={icon}\n          height=\"60px\"\n          width=\"60px\"\n          borderRadius=\"50%\"\n          sx={{ objectFit: 'cover', mr: 1.5 }}\n        />\n        <Box textAlign=\"left\">\n          <Typography fontWeight=\"bold\" fontSize=\"1.7rem\">\n            {'Xinference'}\n          </Typography>\n        </Box>\n      </Toolbar>\n    </AppBar>\n  )\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/login/login.js",
    "content": "import { Box } from '@mui/material'\nimport Button from '@mui/material/Button'\nimport Container from '@mui/material/Container'\nimport TextField from '@mui/material/TextField'\nimport Typography from '@mui/material/Typography'\nimport * as React from 'react'\nimport { Fragment, useContext, useState } from 'react'\nimport { useCookies } from 'react-cookie'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ApiContext } from '../../components/apiContext'\nimport ErrorMessageSnackBar from '../../components/errorMessageSnackBar'\nimport { getEndpoint } from '../../components/utils'\nimport Header from './header'\n\nfunction Login() {\n  const [, setCookie] = useCookies(['token'])\n  const navigate = useNavigate()\n  const [username, setUsername] = useState('')\n  const [password, setPassword] = useState('')\n  const { setErrorMsg } = useContext(ApiContext)\n  const endpoint = getEndpoint()\n\n  const handleSubmit = () => {\n    fetch(endpoint + '/token', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        username: username,\n        password: password,\n      }),\n    }).then((res) => {\n      if (!res.ok) {\n        res.json().then((errorData) => {\n          setErrorMsg(\n            `Login failed: ${res.status} - ${\n              errorData.detail || 'Unknown error'\n            }`\n          )\n        })\n      } else {\n        res.json().then((data) => {\n          setCookie('token', data['access_token'], { path: '/' })\n          sessionStorage.setItem('token', data['access_token'])\n          navigate('/launch_model/llm')\n        })\n      }\n    })\n  }\n\n  return (\n    <Fragment>\n      <Header />\n      <Container component=\"main\" maxWidth=\"xl\" sx={{ marginTop: 20 }}>\n        <ErrorMessageSnackBar />\n        <Box\n          sx={{\n            marginTop: 8,\n            display: 'flex',\n            flexDirection: 'column',\n            alignItems: 'center',\n          }}\n        >\n          <Typography component=\"h1\" variant=\"h5\">\n            LOGIN\n          </Typography>\n          <Box component=\"main\" noValidate sx={{ mt: 1 }}>\n            <TextField\n              margin=\"normal\"\n              required\n              fullWidth\n              id=\"username\"\n              label=\"Username\"\n              name=\"username\"\n              value={username}\n              onChange={(e) => {\n                setUsername(e.target.value)\n              }}\n              autoFocus\n            />\n            <TextField\n              margin=\"normal\"\n              required\n              fullWidth\n              name=\"password\"\n              label=\"Password\"\n              type=\"password\"\n              id=\"password\"\n              autoComplete=\"current-password\"\n              value={password}\n              onChange={(e) => {\n                setPassword(e.target.value)\n              }}\n            />\n            <Button\n              type=\"submit\"\n              fullWidth\n              variant=\"contained\"\n              sx={{ mt: 3, mb: 2 }}\n              onClick={handleSubmit}\n            >\n              Sign In\n            </Button>\n          </Box>\n        </Box>\n      </Container>\n    </Fragment>\n  )\n}\n\nexport default Login\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/register_model/components/addControlnet.js",
    "content": "import AddIcon from '@mui/icons-material/Add'\nimport DeleteIcon from '@mui/icons-material/Delete'\nimport {\n  Box,\n  Button,\n  FormControlLabel,\n  Radio,\n  RadioGroup,\n  TextField,\n  Tooltip,\n} from '@mui/material'\nimport React, { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nconst AddControlnet = ({\n  controlnetDataArr,\n  onGetControlnetArr,\n  scrollRef,\n}) => {\n  const [count, setCount] = useState(0)\n  const [controlnetArr, setControlnetArr] = useState([])\n  const [isAdd, setIsAdd] = useState(false)\n  const { t } = useTranslation()\n\n  useEffect(() => {\n    if (controlnetDataArr && controlnetDataArr.length) {\n      const dataArr = controlnetDataArr.map((item) => {\n        setCount(count + 1)\n        item.id = count\n        return item\n      })\n      setControlnetArr(dataArr)\n    }\n  }, [])\n\n  useEffect(() => {\n    const arr = controlnetArr.map((item) => {\n      const { model_name: name, model_uri: uri, model_family } = item\n      return {\n        model_name: name,\n        model_uri: uri,\n        model_family,\n      }\n    })\n    onGetControlnetArr(arr)\n    isAdd && handleScrollBottom()\n    setIsAdd(false)\n  }, [controlnetArr])\n\n  const handleAddControlnet = () => {\n    setCount(count + 1)\n    const item = {\n      id: count,\n      model_name: 'custom-controlnet',\n      model_uri: '/path/to/controlnet-model',\n      model_family: 'controlnet',\n    }\n    setControlnetArr([...controlnetArr, item])\n    setIsAdd(true)\n  }\n\n  const handleUpdateSpecsArr = (index, type, newValue) => {\n    setControlnetArr(\n      controlnetArr.map((item, subIndex) => {\n        if (subIndex === index) {\n          return { ...item, [type]: newValue }\n        }\n        return item\n      })\n    )\n  }\n\n  const handleDeleteControlnet = (index) => {\n    setControlnetArr(controlnetArr.filter((_, subIndex) => index !== subIndex))\n  }\n\n  const handleScrollBottom = () => {\n    scrollRef.current.scrollTo({\n      top: scrollRef.current.scrollHeight,\n      behavior: 'smooth',\n    })\n  }\n\n  return (\n    <>\n      <div>\n        <label style={{ marginBottom: '20px' }}>\n          {t('registerModel.controlnet')}\n        </label>\n        <Button\n          variant=\"contained\"\n          size=\"small\"\n          endIcon={<AddIcon />}\n          className=\"addBtn\"\n          onClick={handleAddControlnet}\n        >\n          {t('registerModel.more')}\n        </Button>\n      </div>\n      <div className=\"specs_container\">\n        {controlnetArr.map((item, index) => (\n          <div className=\"item\" key={item.id}>\n            <TextField\n              error={item.model_name !== '' ? false : true}\n              style={{ minWidth: '60%', marginTop: '10px' }}\n              label=\"Model Name\"\n              size=\"small\"\n              value={item.model_name}\n              onChange={(e) => {\n                handleUpdateSpecsArr(index, 'model_name', e.target.value)\n              }}\n            />\n            <Box padding=\"15px\"></Box>\n\n            <TextField\n              error={item.model_uri !== '' ? false : true}\n              style={{ minWidth: '60%' }}\n              label=\"Model Path\"\n              size=\"small\"\n              value={item.model_uri}\n              onChange={(e) => {\n                handleUpdateSpecsArr(index, 'model_uri', e.target.value)\n              }}\n            />\n            <Box padding=\"15px\"></Box>\n\n            <label\n              style={{\n                paddingLeft: 5,\n              }}\n            >\n              {t('registerModel.modelFormat')}\n            </label>\n            <RadioGroup\n              value={item.model_format}\n              onChange={(e) => {\n                handleUpdateSpecsArr(index, 'model_format', e.target.value)\n              }}\n            >\n              <Box sx={styles.checkboxWrapper}>\n                <Box key={item} sx={{ marginLeft: '10px' }}>\n                  <FormControlLabel\n                    value=\"controlnet\"\n                    checked\n                    control={<Radio />}\n                    label=\"controlnet\"\n                  />\n                </Box>\n              </Box>\n            </RadioGroup>\n\n            <Tooltip title={t('registerModel.delete')} placement=\"top\">\n              <div\n                className=\"deleteBtn\"\n                onClick={() => handleDeleteControlnet(index)}\n              >\n                <DeleteIcon className=\"deleteIcon\" />\n              </div>\n            </Tooltip>\n          </div>\n        ))}\n      </div>\n    </>\n  )\n}\n\nexport default AddControlnet\n\nconst styles = {\n  baseFormControl: {\n    width: '100%',\n    margin: 'normal',\n    size: 'small',\n  },\n  checkboxWrapper: {\n    display: 'flex',\n    flexWrap: 'wrap',\n    alignItems: 'center',\n    width: '100%',\n  },\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/register_model/components/addModelSpecs.js",
    "content": "import AddIcon from '@mui/icons-material/Add'\nimport DeleteIcon from '@mui/icons-material/Delete'\nimport {\n  Alert,\n  Box,\n  Button,\n  FormControlLabel,\n  Radio,\n  RadioGroup,\n  TextField,\n  Tooltip,\n} from '@mui/material'\nimport React, { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nconst modelFormatData = [\n  {\n    type: 'LLM',\n    options: [\n      { value: 'pytorch', label: 'PyTorch' },\n      { value: 'ggufv2', label: 'GGUF' },\n      { value: 'gptq', label: 'GPTQ' },\n      { value: 'awq', label: 'AWQ' },\n      { value: 'fp8', label: 'FP8' },\n      { value: 'mlx', label: 'MLX' },\n    ],\n  },\n  {\n    type: 'embedding',\n    options: [\n      { value: 'pytorch', label: 'PyTorch' },\n      { value: 'ggufv2', label: 'GGUF' },\n    ],\n  },\n  {\n    type: 'rerank',\n    options: [\n      { value: 'pytorch', label: 'PyTorch' },\n      { value: 'ggufv2', label: 'GGUF' },\n    ],\n  },\n]\n\nconst modelUriDefault = {\n  LLM: '/path/to/llama',\n  embedding: '/path/to/embedding',\n  rerank: '/path/to/rerank',\n}\n\nconst AddModelSpecs = ({\n  isJump,\n  formData,\n  specsDataArr,\n  onGetArr,\n  scrollRef,\n  modelType,\n}) => {\n  const [count, setCount] = useState(0)\n  const [specsArr, setSpecsArr] = useState([])\n  const [pathArr, setPathArr] = useState([])\n  const [modelSizeAlertId, setModelSizeAlertId] = useState([])\n  const [quantizationAlertId, setQuantizationAlertId] = useState([])\n  const [isError, setIsError] = useState(false)\n  const [isAdd, setIsAdd] = useState(false)\n  const { t } = useTranslation()\n\n  useEffect(() => {\n    if (isJump) {\n      const dataArr = specsDataArr.map((item, index) => {\n        const {\n          model_uri,\n          model_size_in_billions,\n          model_format,\n          quantization,\n          model_file_name_template,\n        } = item\n        let size = model_size_in_billions\n        if (typeof size !== 'number') size = size?.split('_').join('.')\n\n        return {\n          id: index,\n          model_uri,\n          model_size_in_billions: size,\n          model_format,\n          quantization,\n          model_file_name_template,\n        }\n      })\n      setCount(dataArr.length)\n      setSpecsArr(dataArr)\n\n      const subPathArr = []\n      specsDataArr.forEach((item) => {\n        if (item.model_format !== 'ggufv2') {\n          subPathArr.push(item.model_uri)\n        } else {\n          subPathArr.push(item.model_uri + '/' + item.model_file_name_template)\n        }\n      })\n      setPathArr(subPathArr)\n    } else {\n      setSpecsArr([\n        {\n          id: count,\n          ...formData,\n        },\n      ])\n      setCount(count + 1)\n      setPathArr([formData.model_uri])\n    }\n  }, [specsDataArr])\n\n  useEffect(() => {\n    const arr = specsArr.map((item) => {\n      const {\n        model_uri: uri,\n        model_size_in_billions: size,\n        model_format: modelFormat,\n        quantization,\n        model_file_name_template,\n      } = item\n\n      let handleSize\n      if (modelType === 'LLM') {\n        handleSize =\n          parseInt(size) === parseFloat(size)\n            ? Number(size)\n            : size.split('.').join('_')\n      }\n\n      let handleQuantization = quantization\n      if (modelFormat === 'pytorch') {\n        handleQuantization = 'none'\n      } else if (handleQuantization === '' && modelFormat === 'ggufv2') {\n        handleQuantization = 'default'\n      }\n\n      return {\n        model_uri: uri,\n        ...(modelType === 'LLM' && {\n          model_size_in_billions: handleSize,\n        }),\n        model_format: modelFormat,\n        quantization: handleQuantization,\n        model_file_name_template,\n      }\n    })\n    setIsError(true)\n    if (modelSizeAlertId.length === 0 && quantizationAlertId.length === 0) {\n      setIsError(false)\n    }\n    onGetArr(arr, isError)\n    isAdd && handleScrollBottom()\n    setIsAdd(false)\n  }, [specsArr, isError])\n\n  const handleAddSpecs = () => {\n    setCount(count + 1)\n    const item = {\n      id: count,\n      model_uri: modelUriDefault[modelType],\n      model_size_in_billions: 7,\n      model_format: 'pytorch',\n      quantization: '',\n    }\n    setSpecsArr([...specsArr, item])\n    setIsAdd(true)\n    setPathArr([...pathArr, modelUriDefault[modelType]])\n  }\n\n  const handleUpdateSpecsArr = (index, type, newValue) => {\n    if (type === 'model_format') {\n      const subPathArr = [...pathArr]\n      if (specsArr[index].model_format !== 'ggufv2') {\n        pathArr[index] = specsArr[index].model_uri\n      } else {\n        pathArr[index] =\n          specsArr[index].model_uri +\n          '/' +\n          specsArr[index].model_file_name_template\n      }\n      setPathArr(subPathArr)\n    }\n\n    setSpecsArr(\n      specsArr.map((item, subIndex) => {\n        if (subIndex === index) {\n          if (type === '') {\n            return { ...item, [type]: [newValue] }\n          } else if (type === 'model_format') {\n            if (newValue === 'ggufv2') {\n              const { baseDir, filename } = getPathComponents(pathArr[index])\n              const obj = {\n                ...item,\n                model_format: newValue,\n                quantization: '',\n                model_uri: baseDir,\n                model_file_name_template: filename,\n              }\n              return obj\n            } else {\n              const { id, model_size_in_billions, model_format } = item\n              return {\n                id,\n                model_uri: pathArr[index],\n                model_size_in_billions,\n                model_format,\n                [type]: newValue,\n                quantization: '',\n              }\n            }\n          } else if (type === 'model_uri') {\n            const subPathArr = [...pathArr]\n            subPathArr[index] = newValue\n            setPathArr(subPathArr)\n            if (item.model_format === 'ggufv2') {\n              const { baseDir, filename } = getPathComponents(newValue)\n              const obj = {\n                ...item,\n                model_uri: baseDir,\n                model_file_name_template: filename,\n              }\n              return obj\n            } else {\n              return { ...item, [type]: newValue }\n            }\n          } else {\n            return { ...item, [type]: newValue }\n          }\n        }\n        return item\n      })\n    )\n  }\n\n  const handleDeleteSpecs = (index) => {\n    setSpecsArr(specsArr.filter((_, subIndex) => index !== subIndex))\n  }\n\n  const getPathComponents = (path) => {\n    const normalizedPath = path.replace(/\\\\/g, '/')\n    const baseDir = normalizedPath.substring(0, normalizedPath.lastIndexOf('/'))\n    const filename = normalizedPath.substring(\n      normalizedPath.lastIndexOf('/') + 1\n    )\n    return { baseDir, filename }\n  }\n\n  const handleModelSize = (index, value, id) => {\n    setModelSizeAlertId(modelSizeAlertId.filter((item) => item !== id))\n    handleUpdateSpecsArr(index, 'model_size_in_billions', value)\n    if (value !== '' && (!Number(value) || Number(value) <= 0)) {\n      const modelSizeAlertIdArr = Array.from(new Set([...modelSizeAlertId, id]))\n      setModelSizeAlertId(modelSizeAlertIdArr)\n    }\n  }\n\n  const handleQuantization = (model_format, index, value, id) => {\n    setQuantizationAlertId(quantizationAlertId.filter((item) => item !== id))\n    handleUpdateSpecsArr(index, 'quantization', value)\n    if (\n      (model_format === 'gptq' ||\n        model_format === 'awq' ||\n        model_format === 'fp8' ||\n        model_format === 'mlx') &&\n      value === ''\n    ) {\n      const quantizationAlertIdArr = Array.from(\n        new Set([...quantizationAlertId, id])\n      )\n      setQuantizationAlertId(quantizationAlertIdArr)\n    }\n  }\n\n  const handleScrollBottom = () => {\n    scrollRef.current.scrollTo({\n      top: scrollRef.current.scrollHeight,\n      behavior: 'smooth',\n    })\n  }\n\n  return (\n    <>\n      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 10 }}>\n        <label style={{ width: '100px' }}>\n          {t('registerModel.modelSpecs')}\n        </label>\n        <Button\n          variant=\"contained\"\n          size=\"small\"\n          endIcon={<AddIcon />}\n          className=\"addBtn\"\n          onClick={handleAddSpecs}\n        >\n          {t('registerModel.more')}\n        </Button>\n      </div>\n      <div className=\"specs_container\">\n        {specsArr.map((item, index) => (\n          <div className=\"item\" key={item.id}>\n            <label\n              style={{\n                paddingLeft: 5,\n              }}\n            >\n              {t('registerModel.modelFormat')}\n            </label>\n            <RadioGroup\n              value={item.model_format}\n              onChange={(e) => {\n                handleUpdateSpecsArr(index, 'model_format', e.target.value)\n                if (\n                  e.target.value === 'gptq' ||\n                  e.target.value === 'awq' ||\n                  e.target.value === 'fp8' ||\n                  e.target.value === 'mlx'\n                ) {\n                  const quantizationAlertIdArr = Array.from(\n                    new Set([...quantizationAlertId, item.id])\n                  )\n                  setQuantizationAlertId(quantizationAlertIdArr)\n                } else {\n                  setQuantizationAlertId([])\n                }\n              }}\n            >\n              <Box sx={styles.checkboxWrapper}>\n                {modelFormatData\n                  .find((item) => item.type === modelType)\n                  .options.map((item) => (\n                    <Box key={item.value} sx={{ marginLeft: '10px' }}>\n                      <FormControlLabel\n                        value={item.value}\n                        control={<Radio />}\n                        label={item.label}\n                      />\n                    </Box>\n                  ))}\n              </Box>\n            </RadioGroup>\n            <Box padding=\"15px\"></Box>\n\n            <TextField\n              error={item.model_uri !== '' ? false : true}\n              style={{ minWidth: '60%' }}\n              label={t('registerModel.modelPath')}\n              size=\"small\"\n              value={\n                item.model_format !== 'ggufv2'\n                  ? item.model_uri\n                  : item.model_uri + '/' + item.model_file_name_template\n              }\n              onChange={(e) => {\n                handleUpdateSpecsArr(index, 'model_uri', e.target.value)\n              }}\n              helperText={t('registerModel.provideModelDirectoryOrFilePath')}\n            />\n            <Box padding=\"15px\"></Box>\n\n            {modelType === 'LLM' && (\n              <>\n                <TextField\n                  error={Number(item.model_size_in_billions) > 0 ? false : true}\n                  label={t('registerModel.modelSizeBillions')}\n                  size=\"small\"\n                  value={item.model_size_in_billions}\n                  onChange={(e) => {\n                    handleModelSize(index, e.target.value, item.id)\n                  }}\n                />\n                {modelSizeAlertId.includes(item.id) && (\n                  <Alert severity=\"error\">\n                    {t('registerModel.enterNumberGreaterThanZero')}\n                  </Alert>\n                )}\n                <Box padding=\"15px\"></Box>\n              </>\n            )}\n\n            {item.model_format !== 'pytorch' && (\n              <>\n                <TextField\n                  style={{ minWidth: '60%' }}\n                  label={\n                    item.model_format === 'gptq' ||\n                    item.model_format === 'awq' ||\n                    item.model_format === 'fp8' ||\n                    item.model_format === 'mlx'\n                      ? t('registerModel.quantization')\n                      : t('registerModel.quantizationOptional')\n                  }\n                  size=\"small\"\n                  value={item.quantization}\n                  onChange={(e) => {\n                    handleQuantization(\n                      item.model_format,\n                      index,\n                      e.target.value,\n                      item.id\n                    )\n                  }}\n                  helperText={\n                    item.model_format === 'gptq' ||\n                    item.model_format === 'awq' ||\n                    item.model_format === 'fp8' ||\n                    item.model_format === 'mlx'\n                      ? t(\n                          'registerModel.carefulQuantizationForModelRegistration'\n                        )\n                      : ''\n                  }\n                />\n                {item.model_format !== 'ggufv2' &&\n                  quantizationAlertId.includes(item.id) &&\n                  item.quantization == '' && (\n                    <Alert severity=\"error\">\n                      {t('registerModel.quantizationCannotBeEmpty')}\n                    </Alert>\n                  )}\n              </>\n            )}\n\n            {specsArr.length > 1 && (\n              <Tooltip title={t('registerModel.delete')} placement=\"top\">\n                <div\n                  className=\"deleteBtn\"\n                  onClick={() => handleDeleteSpecs(index)}\n                >\n                  <DeleteIcon className=\"deleteIcon\" />\n                </div>\n              </Tooltip>\n            )}\n          </div>\n        ))}\n      </div>\n    </>\n  )\n}\n\nexport default AddModelSpecs\n\nconst styles = {\n  baseFormControl: {\n    width: '100%',\n    margin: 'normal',\n    size: 'small',\n  },\n  checkboxWrapper: {\n    display: 'flex',\n    flexWrap: 'wrap',\n    alignItems: 'center',\n    width: '100%',\n  },\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/register_model/components/addStop.js",
    "content": "import AddIcon from '@mui/icons-material/Add'\nimport DeleteIcon from '@mui/icons-material/Delete'\nimport { Alert, Button, TextField } from '@mui/material'\nimport React from 'react'\nimport { useTranslation } from 'react-i18next'\n\nconst regex = /^-?[0-9]\\d*$/\n\nconst AddStop = ({\n  label,\n  onGetData,\n  arrItemType,\n  formData,\n  onGetError,\n  helperText,\n}) => {\n  const { t } = useTranslation()\n  const handleChange = (value, index) => {\n    const arr = [...formData]\n    arr[index] = value\n    if (arrItemType === 'number') {\n      const newDataArr = arr.map((item) => {\n        if (item && regex.test(item)) {\n          arr.push('true')\n          return Number(item)\n        }\n        if (item && !regex.test(item)) arr.push('false')\n        return item\n      })\n      onGetError(arr)\n      onGetData(newDataArr)\n    } else {\n      onGetData([...arr])\n    }\n  }\n\n  const handleAdd = () => {\n    if (formData[formData.length - 1]) {\n      onGetData([...formData, ''])\n    }\n  }\n\n  const handleDelete = (index) => {\n    onGetData(formData.filter((_, subIndex) => index !== subIndex))\n  }\n\n  const handleShowAlert = (item) => {\n    return item !== '' && !regex.test(item) && arrItemType === 'number'\n  }\n\n  return (\n    <>\n      <div>\n        <div\n          style={{ display: 'flex', alignItems: 'center', marginBottom: 10 }}\n        >\n          <label style={{ width: '100px' }}>{label}</label>\n          <Button\n            variant=\"contained\"\n            size=\"small\"\n            endIcon={<AddIcon />}\n            className=\"addBtn\"\n            onClick={handleAdd}\n          >\n            {t('registerModel.more')}\n          </Button>\n        </div>\n        <div\n          style={{\n            display: 'flex',\n            flexDirection: 'column',\n            gap: 10,\n            marginInline: 50,\n            padding: 20,\n            borderRadius: 10,\n          }}\n        >\n          {(formData?.length ? formData : ['']).map((item, index) => (\n            <div key={index}>\n              <div style={{ display: 'flex', alignItems: 'center', gap: 5 }}>\n                <TextField\n                  value={item}\n                  onChange={(e) => handleChange(e.target.value, index)}\n                  label={helperText}\n                  size=\"small\"\n                  style={{ width: '100%' }}\n                />\n                {formData?.length > 1 && (\n                  <DeleteIcon\n                    onClick={() => handleDelete(index)}\n                    style={{ cursor: 'pointer', color: '#1976d2' }}\n                  />\n                )}\n              </div>\n\n              {handleShowAlert(item) && (\n                <Alert severity=\"error\">\n                  {t('registerModel.enterInteger')}\n                </Alert>\n              )}\n            </div>\n          ))}\n        </div>\n      </div>\n    </>\n  )\n}\n\nexport default AddStop\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/register_model/components/addVirtualenv.js",
    "content": "import AddIcon from '@mui/icons-material/Add'\nimport DeleteIcon from '@mui/icons-material/Delete'\nimport { Button, TextField } from '@mui/material'\nimport React, { useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nconst AddVirtualenv = ({ virtualenv, onChangeVirtualenv, scrollRef }) => {\n  const { t } = useTranslation()\n\n  const [packageKeys, setPackageKeys] = useState(() =>\n    virtualenv.packages.map(() => `${Date.now()}-${Math.random()}`)\n  )\n\n  const prevPackagesLenRef = useRef(virtualenv.packages.length)\n\n  useEffect(() => {\n    const newLen = virtualenv.packages.length\n    if (newLen > prevPackagesLenRef.current) {\n      scrollRef.current.scrollTo({\n        top: scrollRef.current.scrollHeight,\n        behavior: 'smooth',\n      })\n    }\n    prevPackagesLenRef.current = newLen\n\n    setPackageKeys((prevKeys) => {\n      const lengthDiff = virtualenv.packages.length - prevKeys.length\n\n      if (lengthDiff > 0) {\n        return [\n          ...prevKeys,\n          ...new Array(lengthDiff)\n            .fill(0)\n            .map(() => `${Date.now()}-${Math.random()}`),\n        ]\n      } else if (lengthDiff < 0) {\n        return prevKeys.slice(0, virtualenv.packages.length)\n      }\n\n      return prevKeys\n    })\n  }, [virtualenv.packages])\n\n  return (\n    <div>\n      <label style={{ marginBottom: '20px', marginRight: '20px' }}>\n        {t('registerModel.packages')}\n      </label>\n      <Button\n        variant=\"contained\"\n        size=\"small\"\n        endIcon={<AddIcon />}\n        onClick={() => onChangeVirtualenv('add')}\n      >\n        {t('registerModel.more')}\n      </Button>\n\n      <div>\n        {virtualenv.packages.map((item, index) => (\n          <div\n            key={packageKeys[index]}\n            style={{\n              display: 'flex',\n              alignItems: 'center',\n              gap: 5,\n              marginTop: '10px',\n              marginLeft: 50,\n            }}\n          >\n            <TextField\n              style={{ width: '100%' }}\n              size=\"small\"\n              value={item}\n              onChange={(e) => {\n                onChangeVirtualenv('change', index, e.target.value)\n              }}\n            />\n            <DeleteIcon\n              onClick={() => onChangeVirtualenv('delete', index)}\n              style={{ cursor: 'pointer', color: '#1976d2' }}\n            />\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default AddVirtualenv\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/register_model/data/languages.js",
    "content": "const languagesArr = [\n  { code: 'ab', language: 'Abkhazian' },\n  { code: 'aa', language: 'Afar' },\n  { code: 'af', language: 'Afrikaans' },\n  { code: 'ak', language: 'Akan' },\n  { code: 'sq', language: 'Albanian' },\n  { code: 'am', language: 'Amharic' },\n  { code: 'ar', language: 'Arabic' },\n  { code: 'an', language: 'Aragonese' },\n  { code: 'hy', language: 'Armenian' },\n  { code: 'as', language: 'Assamese' },\n  { code: 'av', language: 'Avaric' },\n  { code: 'ae', language: 'Avestan' },\n  { code: 'ay', language: 'Aymara' },\n  { code: 'az', language: 'Azerbaijani' },\n  { code: 'bm', language: 'Bambara' },\n  { code: 'ba', language: 'Bashkir' },\n  { code: 'eu', language: 'Basque' },\n  { code: 'be', language: 'Belarusian' },\n  { code: 'bn', language: 'Bengali' },\n  { code: 'bh', language: 'Bihari' },\n  { code: 'bi', language: 'Bislama' },\n  { code: 'bs', language: 'Bosnian' },\n  { code: 'br', language: 'Breton' },\n  { code: 'bg', language: 'Bulgarian' },\n  { code: 'my', language: 'Burmese' },\n  { code: 'ca', language: 'Catalan, Valencian' },\n  { code: 'ch', language: 'Chamorro' },\n  { code: 'ce', language: 'Chechen' },\n  { code: 'ny', language: 'Chichewa, Chewa, Nyanja' },\n  // { code: 'zh', language: 'Chinese' },\n  { code: 'cv', language: 'Chuvash' },\n  { code: 'kw', language: 'Cornish' },\n  { code: 'co', language: 'Corsican' },\n  { code: 'cr', language: 'Cree' },\n  { code: 'hr', language: 'Croatian' },\n  { code: 'cs', language: 'Czech' },\n  { code: 'da', language: 'Danish' },\n  { code: 'dv', language: 'Divehi, Dhivehi, Maldivian' },\n  { code: 'nl', language: 'Dutch, Flemish' },\n  { code: 'dz', language: 'Dzongkha' },\n  // { code: 'en', language: 'English' },\n  { code: 'eo', language: 'Esperanto' },\n  { code: 'et', language: 'Estonian' },\n  { code: 'ee', language: 'Ewe' },\n  { code: 'fo', language: 'Faroese' },\n  { code: 'fj', language: 'Fijian' },\n  { code: 'fi', language: 'Finnish' },\n  { code: 'fr', language: 'French' },\n  { code: 'ff', language: 'Fulah' },\n  { code: 'gl', language: 'Galician' },\n  { code: 'ka', language: 'Georgian' },\n  { code: 'de', language: 'German' },\n  { code: 'el', language: 'Greek' },\n  { code: 'gn', language: 'Guarani' },\n  { code: 'gu', language: 'Gujarati' },\n  { code: 'ht', language: 'Haitian, Haitian Creole' },\n  { code: 'ha', language: 'Hausa' },\n  { code: 'he', language: 'Hebrew' },\n  { code: 'hz', language: 'Herero' },\n  { code: 'hi', language: 'Hindi' },\n  { code: 'ho', language: 'Hiri Motu' },\n  { code: 'hu', language: 'Hungarian' },\n  { code: 'ia', language: 'Interlingua' },\n  { code: 'id', language: 'Indonesian' },\n  { code: 'ie', language: 'Interlingue, Occidental' },\n  { code: 'ga', language: 'Irish' },\n  { code: 'ig', language: 'Igbo' },\n  { code: 'ik', language: 'Inupiaq' },\n  { code: 'io', language: 'Ido' },\n  { code: 'is', language: 'Icelandic' },\n  { code: 'it', language: 'Italian' },\n  { code: 'iu', language: 'Inuktitut' },\n  { code: 'ja', language: 'Japanese' },\n  { code: 'jv', language: 'Javanese' },\n  { code: 'kl', language: 'Kalaallisut, Greenlandic' },\n  { code: 'kn', language: 'Kannada' },\n  { code: 'kr', language: 'Kanuri' },\n  { code: 'ks', language: 'Kashmiri' },\n  { code: 'kk', language: 'Kazakh' },\n  { code: 'km', language: 'Central Khmer' },\n  { code: 'ki', language: 'Kikuyu, Gikuyu' },\n  { code: 'rw', language: 'Kinyarwanda' },\n  { code: 'ky', language: 'Kirghiz, Kyrgyz' },\n  { code: 'kv', language: 'Komi' },\n  { code: 'kg', language: 'Kongo' },\n  { code: 'ko', language: 'Korean' },\n  { code: 'ku', language: 'Kurdish' },\n  { code: 'kj', language: 'Kuanyama, Kwanyama' },\n  { code: 'la', language: 'Latin' },\n  { code: 'lb', language: 'Luxembourgish, Letzeburgesch' },\n  { code: 'lg', language: 'Ganda' },\n  { code: 'li', language: 'Limburgan, Limburger, Limburgish' },\n  { code: 'ln', language: 'Lingala' },\n  { code: 'lo', language: 'Lao' },\n  { code: 'lt', language: 'Lithuanian' },\n  { code: 'lu', language: 'Luba-Katanga' },\n  { code: 'lv', language: 'Latvian' },\n  { code: 'gv', language: 'Manx' },\n  { code: 'mk', language: 'Macedonian' },\n  { code: 'mg', language: 'Malagasy' },\n  { code: 'ms', language: 'Malay' },\n  { code: 'ml', language: 'Malayalam' },\n  { code: 'mt', language: 'Maltese' },\n  { code: 'mi', language: 'Maori' },\n  { code: 'mr', language: 'Marathi' },\n  { code: 'mh', language: 'Marshallese' },\n  { code: 'mn', language: 'Mongolian' },\n  { code: 'na', language: 'Nauru' },\n  { code: 'nv', language: 'Navajo, Navaho' },\n  { code: 'nd', language: 'North Ndebele' },\n  { code: 'ne', language: 'Nepali' },\n  { code: 'ng', language: 'Ndonga' },\n  { code: 'nb', language: 'Norwegian Bokmål' },\n  { code: 'nn', language: 'Norwegian Nynorsk' },\n  { code: 'no', language: 'Norwegian' },\n  { code: 'ii', language: 'Sichuan Yi, Nuosu' },\n  { code: 'nr', language: 'South Ndebele' },\n  { code: 'oc', language: 'Occitan' },\n  { code: 'oj', language: 'Ojibwa' },\n  {\n    code: 'cu',\n    language:\n      'Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic',\n  },\n  { code: 'om', language: 'Oromo' },\n  { code: 'or', language: 'Oriya' },\n  { code: 'os', language: 'Ossetian, Ossetic' },\n  { code: 'pa', language: 'Punjabi, Panjabi' },\n  { code: 'pi', language: 'Pali' },\n  { code: 'fa', language: 'Persian' },\n  { code: 'pl', language: 'Polish' },\n  { code: 'ps', language: 'Pashto, Pushto' },\n  { code: 'pt', language: 'Portuguese' },\n  { code: 'qu', language: 'Quechua' },\n  { code: 'rm', language: 'Romansh' },\n  { code: 'rn', language: 'Rundi' },\n  { code: 'ro', language: 'Romanian, Moldavian, Moldovan' },\n  { code: 'ru', language: 'Russian' },\n  { code: 'sa', language: 'Sanskrit' },\n  { code: 'sc', language: 'Sardinian' },\n  { code: 'sd', language: 'Sindhi' },\n  { code: 'se', language: 'Northern Sami' },\n  { code: 'sm', language: 'Samoan' },\n  { code: 'sg', language: 'Sango' },\n  { code: 'sr', language: 'Serbian' },\n  { code: 'gd', language: 'Gaelic, Scottish Gaelic' },\n  { code: 'sn', language: 'Shona' },\n  { code: 'si', language: 'Sinhala, Sinhalese' },\n  { code: 'sk', language: 'Slovak' },\n  { code: 'sl', language: 'Slovenian' },\n  { code: 'so', language: 'Somali' },\n  { code: 'st', language: 'Southern Sotho' },\n  { code: 'es', language: 'Spanish, Castilian' },\n  { code: 'su', language: 'Sundanese' },\n  { code: 'sw', language: 'Swahili' },\n  { code: 'ss', language: 'Swati' },\n  { code: 'sv', language: 'Swedish' },\n  { code: 'ta', language: 'Tamil' },\n  { code: 'te', language: 'Telugu' },\n  { code: 'tg', language: 'Tajik' },\n  { code: 'th', language: 'Thai' },\n  { code: 'ti', language: 'Tigrinya' },\n  { code: 'bo', language: 'Tibetan' },\n  { code: 'tk', language: 'Turkmen' },\n  { code: 'tl', language: 'Tagalog' },\n  { code: 'tn', language: 'Tswana' },\n  { code: 'to', language: 'Tonga' },\n  { code: 'tr', language: 'Turkish' },\n  { code: 'ts', language: 'Tsonga' },\n  { code: 'tt', language: 'Tatar' },\n  { code: 'tw', language: 'Twi' },\n  { code: 'ty', language: 'Tahitian' },\n  { code: 'ug', language: 'Uighur, Uyghur' },\n  { code: 'uk', language: 'Ukrainian' },\n  { code: 'ur', language: 'Urdu' },\n  { code: 'uz', language: 'Uzbek' },\n  { code: 've', language: 'Venda' },\n  { code: 'vi', language: 'Vietnamese' },\n  { code: 'vo', language: 'Volapük' },\n  { code: 'wa', language: 'Walloon' },\n  { code: 'cy', language: 'Welsh' },\n  { code: 'wo', language: 'Wolof' },\n  { code: 'fy', language: 'West Frisian' },\n  { code: 'xh', language: 'Xhosa' },\n  { code: 'yi', language: 'Yiddish' },\n  { code: 'yo', language: 'Yoruba' },\n  { code: 'za', language: 'Zhuang, Chuang' },\n  { code: 'zu', language: 'Zulu' },\n]\n\nexport default languagesArr\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/register_model/index.js",
    "content": "import { TabContext, TabList, TabPanel } from '@mui/lab'\nimport { Box, Tab } from '@mui/material'\nimport React, { useEffect } from 'react'\nimport { useCookies } from 'react-cookie'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport ErrorMessageSnackBar from '../../components/errorMessageSnackBar'\nimport Title from '../../components/Title'\nimport { isValidBearerToken } from '../../components/utils'\nimport RegisterModelComponent from './registerModel'\n\nconst RegisterModel = () => {\n  const [tabValue, setTabValue] = React.useState(\n    sessionStorage.getItem('registerModelType')\n      ? sessionStorage.getItem('registerModelType')\n      : '/register_model/llm'\n  )\n  const [cookie] = useCookies(['token'])\n  const navigate = useNavigate()\n  const { t } = useTranslation()\n\n  useEffect(() => {\n    if (\n      sessionStorage.getItem('auth') === 'true' &&\n      !isValidBearerToken(sessionStorage.getItem('token')) &&\n      !isValidBearerToken(cookie.token)\n    ) {\n      navigate('/login', { replace: true })\n    }\n  }, [cookie.token])\n\n  const handleTabChange = (_, newValue) => {\n    setTabValue(newValue)\n    navigate(newValue)\n    sessionStorage.setItem('registerModelType', newValue)\n  }\n\n  return (\n    <Box m=\"20px\" style={{ overflow: 'hidden' }}>\n      <Title title={t('menu.registerModel')} />\n      <ErrorMessageSnackBar />\n      <TabContext value={tabValue}>\n        <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>\n          <TabList\n            value={tabValue}\n            onChange={handleTabChange}\n            aria-label=\"tabs\"\n          >\n            <Tab\n              label={t('model.languageModels')}\n              value=\"/register_model/llm\"\n            />\n            <Tab\n              label={t('model.embeddingModels')}\n              value=\"/register_model/embedding\"\n            />\n            <Tab\n              label={t('model.rerankModels')}\n              value=\"/register_model/rerank\"\n            />\n            <Tab label={t('model.imageModels')} value=\"/register_model/image\" />\n            <Tab label={t('model.audioModels')} value=\"/register_model/audio\" />\n            <Tab\n              label={t('model.flexibleModels')}\n              value=\"/register_model/flexible\"\n            />\n          </TabList>\n        </Box>\n        <TabPanel value=\"/register_model/llm\" sx={{ padding: 0 }}>\n          <RegisterModelComponent\n            modelType=\"LLM\"\n            customData={{\n              version: 2,\n              model_name: 'custom-llm',\n              model_description: 'This is a custom model description.',\n              context_length: 2048,\n              model_lang: ['en'],\n              model_ability: ['generate'],\n              model_specs: [\n                {\n                  model_uri: '/path/to/llama-1',\n                  model_size_in_billions: 7,\n                  model_format: 'pytorch',\n                  quantization: 'none',\n                },\n              ],\n              model_family: 'your_custom_model',\n              virtualenv: {\n                packages: [],\n              },\n            }}\n          />\n        </TabPanel>\n        <TabPanel value=\"/register_model/embedding\" sx={{ padding: 0 }}>\n          <RegisterModelComponent\n            modelType=\"embedding\"\n            customData={{\n              version: 2,\n              model_name: 'custom-embedding',\n              dimensions: 768,\n              max_tokens: 512,\n              language: ['en'],\n              model_specs: [\n                {\n                  model_uri: '/path/to/embedding-1',\n                  model_format: 'pytorch',\n                  quantization: 'none',\n                },\n              ],\n              virtualenv: {\n                packages: [],\n              },\n            }}\n          />\n        </TabPanel>\n        <TabPanel value=\"/register_model/rerank\" sx={{ padding: 0 }}>\n          <RegisterModelComponent\n            modelType=\"rerank\"\n            customData={{\n              version: 2,\n              model_name: 'custom-rerank',\n              language: ['en'],\n              max_tokens: 512,\n              model_specs: [\n                {\n                  model_uri: '/path/to/rerank-1',\n                  model_format: 'pytorch',\n                  quantization: 'none',\n                },\n              ],\n              virtualenv: {\n                packages: [],\n              },\n            }}\n          />\n        </TabPanel>\n        <TabPanel value=\"/register_model/image\" sx={{ padding: 0 }}>\n          <RegisterModelComponent\n            modelType=\"image\"\n            customData={{\n              version: 2,\n              model_name: 'custom-image',\n              model_uri: '/path/to/image-model',\n              model_ability: [],\n              model_family: 'stable_diffusion',\n              controlnet: [],\n              virtualenv: {\n                packages: [],\n              },\n            }}\n          />\n        </TabPanel>\n        <TabPanel value=\"/register_model/audio\" sx={{ padding: 0 }}>\n          <RegisterModelComponent\n            modelType=\"audio\"\n            customData={{\n              version: 2,\n              model_name: 'custom-audio',\n              model_uri: '/path/to/audio-model',\n              multilingual: false,\n              model_family: 'whisper',\n              model_ability: ['text2audio'],\n              virtualenv: {\n                packages: [],\n              },\n            }}\n          />\n        </TabPanel>\n        <TabPanel value=\"/register_model/flexible\" sx={{ padding: 0 }}>\n          <RegisterModelComponent\n            modelType=\"flexible\"\n            customData={{\n              version: 2,\n              model_name: 'flexible-model',\n              model_description: 'This is a model description.',\n              model_uri: '/path/to/model',\n              launcher: 'xinference.model.flexible.launchers.transformers',\n              launcher_args: '{}',\n              virtualenv: {\n                packages: [],\n              },\n            }}\n          />\n        </TabPanel>\n      </TabContext>\n    </Box>\n  )\n}\n\nexport default RegisterModel\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/register_model/registerModel.js",
    "content": "import './styles/registerModelStyle.css'\n\nimport {\n  AutoFixHigh,\n  Cancel,\n  CheckCircle,\n  KeyboardDoubleArrowRight,\n  Notes,\n  OpenInFull,\n} from '@mui/icons-material'\nimport {\n  Alert,\n  Autocomplete,\n  Box,\n  Button,\n  Checkbox,\n  Chip,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogTitle,\n  FormControl,\n  FormControlLabel,\n  InputLabel,\n  MenuItem,\n  Radio,\n  RadioGroup,\n  Select,\n  Stack,\n  Switch,\n  TextField,\n  Tooltip,\n} from '@mui/material'\nimport nunjucks from 'nunjucks'\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCookies } from 'react-cookie'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate, useParams } from 'react-router-dom'\n\nimport { ApiContext } from '../../components/apiContext'\nimport CopyComponent from '../../components/copyComponent'\nimport fetchWrapper from '../../components/fetchWrapper'\nimport { isValidBearerToken } from '../../components/utils'\nimport AddControlnet from './components/addControlnet'\nimport AddModelSpecs from './components/addModelSpecs'\nimport AddStop from './components/addStop'\nimport AddVirtualenv from './components/addVirtualenv'\nimport languages from './data/languages'\nconst SUPPORTED_LANGUAGES_DICT = { en: 'English', zh: 'Chinese' }\nconst model_ability_options = [\n  {\n    type: 'LLM',\n    options: [\n      'Generate',\n      'Chat',\n      'Vision',\n      'Tools',\n      'Reasoning',\n      'Audio',\n      'Omni',\n      'Hybrid',\n    ],\n  },\n  {\n    type: 'image',\n    options: ['text2image', 'image2image', 'inpainting'],\n  },\n  {\n    type: 'audio',\n    options: ['text2audio', 'audio2text'],\n  },\n]\nconst messages = [\n  {\n    role: 'assistant',\n    content: 'This is the message content replied by the assistant previously',\n  },\n  {\n    role: 'user',\n    content: 'This is the message content sent by the user currently',\n  },\n]\nconst model_family_options = [\n  {\n    type: 'image',\n    options: ['stable_diffusion'],\n  },\n  {\n    type: 'audio',\n    options: [\n      'whisper',\n      'ChatTTS',\n      'CosyVoice',\n      'F5-TTS',\n      'F5-TTS-MLX',\n      'FishAudio',\n      'Kokoro',\n      'MegaTTS',\n      'MeloTTS',\n      'funasr',\n    ],\n  },\n]\n\n// Convert dictionary of supported languages into list\nconst SUPPORTED_LANGUAGES = Object.keys(SUPPORTED_LANGUAGES_DICT)\n\nconst RegisterModelComponent = ({ modelType, customData }) => {\n  const endPoint = useContext(ApiContext).endPoint\n  const { setErrorMsg } = useContext(ApiContext)\n  const [formData, setFormData] = useState(customData)\n  const [promptStyles, setPromptStyles] = useState([])\n  const [family, setFamily] = useState({})\n  const [languagesArr, setLanguagesArr] = useState([])\n  const [isContextLengthAlert, setIsContextLengthAlert] = useState(false)\n  const [isDimensionsAlert, setIsDimensionsAlert] = useState(false)\n  const [isMaxTokensAlert, setIsMaxTokensAlert] = useState(false)\n  const [jsonData, setJsonData] = useState('')\n  const [isSpecsArrError, setIsSpecsArrError] = useState(false)\n  const [isValidLauncherArgsAlert, setIsValidLauncherArgsAlert] =\n    useState(false)\n  const scrollRef = useRef(null)\n  const [cookie] = useCookies(['token'])\n  const navigate = useNavigate()\n\n  const { registerModelType, model_name } = useParams()\n  const [isShow, setIsShow] = useState(model_name ? true : false)\n  const [specsArr, setSpecsArr] = useState(\n    model_name\n      ? JSON.parse(sessionStorage.getItem('customJsonData')).model_specs\n      : []\n  )\n  const [controlnetArr, setControlnetArr] = useState(\n    model_name\n      ? JSON.parse(sessionStorage.getItem('customJsonData')).controlnet\n      : []\n  )\n  const [contrastObj, setContrastObj] = useState({})\n  const [isEqual, setIsEqual] = useState(true)\n  const [testRes, setTestRes] = useState('')\n  const [isOpenMessages, setIsOpenMessages] = useState(false)\n  const [testErrorInfo, setTestErrorInfo] = useState('')\n  const [isStopTokenIdsAlert, setIsStopTokenIdsAlert] = useState(false)\n  const [familyOptions, setFamilyOptions] = useState([])\n  const [isEditableFamily, setIsEditableFamily] = useState(true)\n  const [openAutoFillDialog, setOpenAutoFillDialog] = useState(false)\n  const [autoFillModelPath, setAutoFillModelPath] = useState('')\n  const [autoFillModelFamily, setAutoFillModelFamily] = useState('')\n  const { t } = useTranslation()\n\n  const allFamilies = useMemo(() => {\n    return [\n      ...new Set(\n        Object.values(family || {}).reduce(\n          (acc, cur) => acc.concat(cur || []),\n          []\n        )\n      ),\n    ]\n  }, [family])\n\n  useEffect(() => {\n    if (model_name) {\n      const data = JSON.parse(sessionStorage.getItem('customJsonData'))\n\n      if (modelType === 'LLM') {\n        const lagArr = data.model_lang.filter(\n          (item) => item !== 'en' && item !== 'zh'\n        )\n        setLanguagesArr(lagArr)\n\n        const {\n          version,\n          model_name,\n          model_description,\n          context_length,\n          model_lang,\n          model_ability,\n          model_family,\n          model_specs,\n          chat_template,\n          stop_token_ids,\n          stop,\n          reasoning_start_tag = '',\n          reasoning_end_tag = '',\n        } = data\n        const virtualenv = data.virtualenv ?? { packages: [] }\n        const specsDataArr = model_specs.map((item) => {\n          const {\n            model_uri,\n            model_size_in_billions,\n            model_format,\n            quantizations,\n            model_file_name_template,\n          } = item\n          return {\n            model_uri,\n            model_size_in_billions,\n            model_format,\n            quantizations,\n            model_file_name_template,\n          }\n        })\n        const llmData = {\n          version,\n          model_name,\n          model_description,\n          context_length,\n          model_lang,\n          model_ability,\n          model_family,\n          model_specs: specsDataArr,\n          chat_template,\n          stop_token_ids,\n          stop,\n          ...(model_ability.includes('reasoning') && {\n            reasoning_start_tag,\n            reasoning_end_tag,\n          }),\n          virtualenv,\n        }\n        setFormData(llmData)\n        setContrastObj(llmData)\n        setSpecsArr(specsDataArr)\n      } else {\n        if (modelType === 'embedding') {\n          const lagArr = data.language.filter(\n            (item) => item !== 'en' && item !== 'zh'\n          )\n          setLanguagesArr(lagArr)\n\n          const {\n            version,\n            model_name,\n            dimensions,\n            max_tokens,\n            model_uri,\n            language,\n          } = data\n          const model_specs = data.model_specs ?? [\n            {\n              model_uri: model_uri,\n              model_format: 'pytorch',\n              quantization: 'none',\n            },\n          ]\n          const virtualenv = data.virtualenv ?? { packages: [] }\n          const embeddingData = {\n            version,\n            model_name,\n            dimensions,\n            max_tokens,\n            language,\n            model_specs,\n            virtualenv,\n          }\n          setFormData(embeddingData)\n          setContrastObj(embeddingData)\n        } else if (modelType === 'rerank') {\n          const lagArr = data.language.filter(\n            (item) => item !== 'en' && item !== 'zh'\n          )\n          setLanguagesArr(lagArr)\n\n          const {\n            version,\n            model_name,\n            max_tokens = 512,\n            model_uri,\n            language,\n          } = data\n          const model_specs = data.model_specs ?? [\n            {\n              model_uri: model_uri,\n              model_format: 'pytorch',\n              quantization: 'none',\n            },\n          ]\n          const virtualenv = data.virtualenv ?? { packages: [] }\n          const rerankData = {\n            version,\n            model_name,\n            max_tokens,\n            language,\n            model_specs,\n            virtualenv,\n          }\n          setFormData(rerankData)\n          setContrastObj(rerankData)\n        } else if (modelType === 'image') {\n          const {\n            version,\n            model_name,\n            model_uri,\n            model_family,\n            model_ability = [],\n            controlnet,\n          } = data\n          const virtualenv = data.virtualenv ?? { packages: [] }\n          const controlnetArr = controlnet.map((item) => {\n            const { model_name, model_uri, model_family } = item\n            return {\n              model_name,\n              model_uri,\n              model_family,\n            }\n          })\n          const imageData = {\n            version,\n            model_name,\n            model_uri,\n            model_family,\n            model_ability,\n            controlnet: controlnetArr,\n            virtualenv,\n          }\n          setFormData(imageData)\n          setContrastObj(imageData)\n          setControlnetArr(controlnetArr)\n        } else if (modelType === 'audio') {\n          const {\n            version,\n            model_name,\n            model_uri,\n            multilingual,\n            model_ability = [],\n            model_family,\n          } = data\n          const virtualenv = data.virtualenv ?? { packages: [] }\n          const audioData = {\n            version,\n            model_name,\n            model_uri,\n            multilingual,\n            model_ability,\n            model_family,\n            virtualenv,\n          }\n          setFormData(audioData)\n          setContrastObj(audioData)\n        } else if (modelType === 'flexible') {\n          const {\n            version,\n            model_name,\n            model_uri,\n            model_description,\n            launcher,\n            launcher_args,\n          } = data\n          const virtualenv = data.virtualenv ?? { packages: [] }\n          const flexibleData = {\n            version,\n            model_name,\n            model_uri,\n            model_description,\n            launcher,\n            launcher_args,\n            virtualenv,\n          }\n          setFormData(flexibleData)\n          setContrastObj(flexibleData)\n        }\n      }\n    }\n  }, [model_name])\n\n  useEffect(() => {\n    if (\n      sessionStorage.getItem('auth') === 'true' &&\n      !isValidBearerToken(sessionStorage.getItem('token')) &&\n      !isValidBearerToken(cookie.token)\n    ) {\n      navigate('/login', { replace: true })\n      return\n    }\n\n    const getBuiltinFamilies = async () => {\n      const response = await fetch(endPoint + '/v1/models/families', {\n        method: 'GET',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n      })\n      if (!response.ok) {\n        const errorData = await response.json() // Assuming the server returns error details in JSON format\n        setErrorMsg(\n          `Server error: ${response.status} - ${\n            errorData.detail || 'Unknown error'\n          }`\n        )\n      } else {\n        const data = await response.json()\n        for (let key in data) {\n          data[key] = data[key].sort(function (a, b) {\n            let lowerA = a.toLowerCase()\n            let lowerB = b.toLowerCase()\n\n            if (lowerA < lowerB) {\n              return -1\n            }\n            if (lowerA > lowerB) {\n              return 1\n            }\n            return 0\n          })\n        }\n        setFamily(data)\n      }\n    }\n\n    const getBuiltInPromptStyles = async () => {\n      const response = await fetch(endPoint + '/v1/models/prompts', {\n        method: 'GET',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n      })\n      if (!response.ok) {\n        const errorData = await response.json() // Assuming the server returns error details in JSON format\n        setErrorMsg(\n          `Server error: ${response.status} - ${\n            errorData.detail || 'Unknown error'\n          }`\n        )\n      } else {\n        const data = await response.json()\n        let res = []\n        for (const key in data) {\n          let v = data[key]\n          v['name'] = key\n          res.push(v)\n        }\n        setPromptStyles(res)\n      }\n    }\n\n    if (\n      Object.prototype.hasOwnProperty.call(customData, 'model_ability') &&\n      Object.prototype.hasOwnProperty.call(customData, 'model_family')\n    ) {\n      if (promptStyles.length === 0) {\n        getBuiltInPromptStyles().catch((error) => {\n          setErrorMsg(\n            error.message ||\n              'An unexpected error occurred when getting builtin prompt styles.'\n          )\n          console.error('Error: ', error)\n        })\n      }\n      if (family?.chat === undefined) {\n        getBuiltinFamilies().catch((error) => {\n          setErrorMsg(\n            error.message ||\n              'An unexpected error occurred when getting builtin prompt styles.'\n          )\n          console.error('Error: ', error)\n        })\n      }\n    }\n  }, [cookie.token])\n\n  useEffect(() => {\n    setJsonData(JSON.stringify(formData, customReplacer, 4))\n    if (contrastObj.model_name) {\n      deepEqual(contrastObj, formData) ? setIsEqual(true) : setIsEqual(false)\n    }\n    if (family?.chat?.length) handleFamilyOptions(formData.model_ability)\n  }, [formData])\n\n  useEffect(() => {\n    if (family?.chat?.length) handleFamilyOptions(formData.model_ability)\n  }, [family])\n\n  const customReplacer = (key, value) => {\n    if (key === 'chat_template' && value) {\n      return value.replace(/\\\\n/g, '\\n')\n    }\n    return value\n  }\n\n  const handleClick = async () => {\n    for (let key in formData) {\n      const type = Object.prototype.toString.call(formData[key]).slice(8, -1)\n      if (\n        key !== 'model_description' &&\n        ((type === 'Array' &&\n          key !== 'controlnet' &&\n          key !== 'stop_token_ids' &&\n          key !== 'stop' &&\n          formData[key].length === 0) ||\n          (type === 'String' && formData[key] === '') ||\n          (type === 'Number' && formData[key] <= 0))\n      ) {\n        setErrorMsg('Please fill in valid value for all fields')\n        return\n      }\n    }\n\n    if (\n      isSpecsArrError ||\n      isContextLengthAlert ||\n      isDimensionsAlert ||\n      isMaxTokensAlert\n    ) {\n      setErrorMsg('Please fill in valid value for all fields')\n      return\n    }\n\n    try {\n      fetchWrapper\n        .post(`/v1/model_registrations/${modelType}`, {\n          model: JSON.stringify(formData, customReplacer),\n          persist: true,\n        })\n        .then(() => {\n          navigate(`/launch_model/custom/${modelType.toLowerCase()}`)\n          sessionStorage.setItem('modelType', '/launch_model/custom/llm')\n          sessionStorage.setItem(\n            'subType',\n            `/launch_model/custom/${modelType.toLowerCase()}`\n          )\n        })\n        .catch((error) => {\n          console.error('Error:', error)\n          if (error.response.status !== 403 && error.response.status !== 401) {\n            setErrorMsg(error.message)\n          }\n        })\n    } catch (error) {\n      console.error('There was a problem with the fetch operation:', error)\n      setErrorMsg(error.message || 'An unexpected error occurred.')\n    }\n  }\n\n  const handleNumber = (value, parameterName) => {\n    setIsContextLengthAlert(false)\n    setIsDimensionsAlert(false)\n    setIsMaxTokensAlert(false)\n    setFormData({ ...formData, [parameterName]: value })\n\n    if (\n      value !== '' &&\n      (!Number(value) ||\n        Number(value) <= 0 ||\n        parseInt(value) !== parseFloat(value))\n    ) {\n      parameterName === 'context_length' ? setIsContextLengthAlert(true) : ''\n      parameterName === 'dimensions' ? setIsDimensionsAlert(true) : ''\n      parameterName === 'max_tokens' ? setIsMaxTokensAlert(true) : ''\n    } else if (value !== '') {\n      setFormData({ ...formData, [parameterName]: Number(value) })\n    }\n  }\n\n  const toggleLanguage = (lang) => {\n    if (modelType === 'LLM') {\n      if (formData.model_lang.includes(lang)) {\n        setFormData({\n          ...formData,\n          model_lang: formData.model_lang.filter((l) => l !== lang),\n        })\n      } else {\n        setFormData({\n          ...formData,\n          model_lang: [...formData.model_lang, lang],\n        })\n      }\n    } else {\n      if (formData.language.includes(lang)) {\n        setFormData({\n          ...formData,\n          language: formData.language.filter((l) => l !== lang),\n        })\n      } else {\n        setFormData({\n          ...formData,\n          language: [...formData.language, lang],\n        })\n      }\n    }\n  }\n\n  const toggleAbility = (ability) => {\n    const obj = JSON.parse(JSON.stringify(formData))\n    const fieldsToDelete = [\n      'chat_template',\n      'stop_token_ids',\n      'stop',\n      'reasoning_start_tag',\n      'reasoning_end_tag',\n      'tool_parser',\n    ]\n    fieldsToDelete.forEach((key) => delete obj[key])\n\n    const currentAbilities = formData.model_ability\n    const isRemoving = currentAbilities.includes(ability)\n    const chatRelatedAbilities = [\n      'chat',\n      'vision',\n      'tools',\n      'reasoning',\n      'audio',\n      'omni',\n      'hybrid',\n    ]\n    const isChatRelated = chatRelatedAbilities.includes(ability)\n    const mutuallyExclusive = { vision: 'tools', tools: 'vision' }\n\n    if (currentAbilities.includes('chat') && ability !== 'chat') {\n      obj.chat_template = ''\n      obj.stop_token_ids = []\n      obj.stop = []\n    }\n\n    if (\n      currentAbilities.includes('reasoning') &&\n      ability !== 'reasoning' &&\n      ability !== 'chat'\n    ) {\n      obj.reasoning_start_tag = ''\n      obj.reasoning_end_tag = ''\n    }\n\n    if (\n      currentAbilities.includes('tools') &&\n      ability !== 'tools' &&\n      ability !== 'chat'\n    ) {\n      delete obj.tool_parser\n    }\n\n    if (isRemoving) {\n      const updatedAbilities =\n        ability === 'chat'\n          ? currentAbilities.filter(\n              (item) => !chatRelatedAbilities.includes(item)\n            )\n          : currentAbilities.filter((item) => item !== ability)\n\n      if (ability === 'tools') {\n        delete obj.tool_parser\n      }\n\n      setFormData({\n        ...obj,\n        model_family: '',\n        model_ability: updatedAbilities,\n      })\n      return\n    }\n\n    let model_ability = [...currentAbilities]\n\n    if (ability === 'reasoning') {\n      obj.reasoning_start_tag = ''\n      obj.reasoning_end_tag = ''\n    }\n\n    if (ability === 'tools') {\n      obj.tool_parser = ''\n    }\n\n    if (\n      ability === 'chat' ||\n      (isChatRelated && !currentAbilities.includes('chat'))\n    ) {\n      obj.chat_template = ''\n      obj.stop_token_ids = []\n      obj.stop = []\n\n      if (ability !== 'chat' && !model_ability.includes('chat')) {\n        model_ability.push('chat')\n      }\n      model_ability.push(ability)\n    } else {\n      const conflict = mutuallyExclusive[ability]\n      if (conflict && model_ability.includes(conflict)) {\n        model_ability = model_ability.filter((item) => item !== conflict)\n      }\n      model_ability.push(ability)\n    }\n\n    setFormData({\n      ...obj,\n      model_family: '',\n      model_ability,\n    })\n  }\n\n  const toggleImageAbility = (ability) => {\n    const currentAbilities = formData.model_ability || []\n    const isRemoving = currentAbilities.includes(ability)\n    const updated = isRemoving\n      ? currentAbilities.filter((item) => item !== ability)\n      : [...currentAbilities, ability]\n\n    setFormData({\n      ...formData,\n      model_ability: updated,\n    })\n  }\n\n  const handleFamily = (value) => {\n    if (formData.model_ability.includes('chat')) {\n      if (family?.chat?.includes(value)) {\n        const data = promptStyles.find((item) => {\n          return item.name === value\n        })\n\n        const form_data = {\n          ...formData,\n          model_family: value,\n          chat_template: data?.chat_template || null,\n          stop_token_ids: data?.stop_token_ids || [],\n          stop: data?.stop || [],\n        }\n\n        if (formData.model_ability.includes('tools')) {\n          form_data.tool_parser = data?.tool_parser || ''\n        }\n\n        if (formData.model_ability.includes('reasoning')) {\n          form_data.reasoning_start_tag = data?.reasoning_start_tag || ''\n          form_data.reasoning_end_tag = data?.reasoning_end_tag || ''\n        }\n\n        setFormData(form_data)\n      } else {\n        setFormData({\n          ...formData,\n          model_family: value,\n          chat_template: '',\n          stop_token_ids: [],\n          stop: [],\n        })\n      }\n    } else {\n      if (modelType === 'image') {\n        setFormData({\n          ...formData,\n          model_family: value,\n        })\n      } else {\n        setFormData({\n          ...formData,\n          model_family: value,\n        })\n      }\n    }\n  }\n\n  const handleSelectLanguages = (value) => {\n    const arr = [...languagesArr, value]\n    setLanguagesArr(arr)\n    if (modelType === 'LLM') {\n      setFormData({\n        ...formData,\n        model_lang: Array.from(new Set([...formData.model_lang, ...arr])),\n      })\n    } else {\n      setFormData({\n        ...formData,\n        language: Array.from(new Set([...formData.language, ...arr])),\n      })\n    }\n  }\n\n  const handleDeleteLanguages = (item) => {\n    const arr = languagesArr.filter((subItem) => subItem !== item)\n    setLanguagesArr(arr)\n    if (modelType === 'LLM') {\n      setFormData({\n        ...formData,\n        model_lang: formData.model_lang.filter((subItem) => subItem !== item),\n      })\n    } else {\n      setFormData({\n        ...formData,\n        language: formData.language.filter((subItem) => subItem !== item),\n      })\n    }\n  }\n\n  const getSpecsArr = (arr, isSpecsArrError) => {\n    setFormData({ ...formData, model_specs: arr })\n    setIsSpecsArrError(isSpecsArrError)\n  }\n\n  const getControlnetArr = (arr) => {\n    setFormData({ ...formData, controlnet: arr })\n  }\n\n  const handleCancel = () => {\n    navigate(`/launch_model/custom/${registerModelType}`)\n  }\n\n  const handleEdit = () => {\n    fetchWrapper\n      .delete(\n        `/v1/model_registrations/${\n          registerModelType === 'llm' ? 'LLM' : registerModelType\n        }/${model_name}`\n      )\n      .then(() => handleClick())\n      .catch((error) => {\n        console.error('Error:', error)\n        if (error.response.status !== 403 && error.response.status !== 401) {\n          setErrorMsg(error.message)\n        }\n      })\n  }\n\n  const deepEqual = (obj1, obj2) => {\n    if (obj1 === obj2) return true\n    if (\n      typeof obj1 !== 'object' ||\n      typeof obj2 !== 'object' ||\n      obj1 == null ||\n      obj2 == null\n    ) {\n      return false\n    }\n\n    let keysA = Object.keys(obj1)\n    let keysB = Object.keys(obj2)\n    if (keysA.length !== keysB.length) return false\n    for (let key of keysA) {\n      if (!keysB.includes(key) || !deepEqual(obj1[key], obj2[key])) {\n        return false\n      }\n    }\n    return true\n  }\n\n  const handleTest = () => {\n    setTestRes('')\n    if (formData.chat_template) {\n      try {\n        nunjucks.configure({ autoescape: false })\n        const test_res = nunjucks.renderString(formData.chat_template, {\n          messages: messages,\n        })\n        if (test_res === '') {\n          setTestRes(test_res)\n          setTestErrorInfo('error')\n        } else {\n          setTestRes(test_res)\n          setTestErrorInfo('')\n        }\n      } catch (error) {\n        setTestErrorInfo(`${error}`)\n      }\n    }\n  }\n\n  const getStopTokenIds = (value) => {\n    if (value.length === 1 && value[0] === '') {\n      setFormData({\n        ...formData,\n        stop_token_ids: [],\n      })\n    } else {\n      setFormData({\n        ...formData,\n        stop_token_ids: value,\n      })\n    }\n  }\n\n  const getStop = (value) => {\n    if (value.length === 1 && value[0] === '') {\n      setFormData({\n        ...formData,\n        stop: [],\n      })\n    } else {\n      setFormData({\n        ...formData,\n        stop: value,\n      })\n    }\n  }\n\n  const handleFamilyAlert = () => {\n    if (\n      formData.model_ability?.includes('vision') &&\n      !family?.vision?.includes(formData.model_family)\n    ) {\n      return true\n    } else if (\n      formData.model_ability?.includes('tools') &&\n      !family?.tools?.includes(formData.model_family)\n    ) {\n      return true\n    }\n    return false\n  }\n\n  const handleChatTemplateAlert = () => {\n    if (\n      familyOptions?.filter((item) => item.id === formData.model_family)\n        .length === 0 &&\n      !formData.chat_template\n    ) {\n      return true\n    }\n    return false\n  }\n\n  const handleFamilyOptions = (model_ability) => {\n    const abilityMap = {\n      reasoning: { editable: false, source: family?.reasoning },\n      audio: { editable: false, source: family?.audio },\n      omni: { editable: false, source: family?.omni },\n      hybrid: { editable: false, source: family?.hybrid },\n      vision: { editable: false, source: family?.vision },\n      tools: { editable: false, source: family?.tools },\n      chat: { editable: true, source: family?.chat },\n      generate: { editable: true, source: family?.generate },\n    }\n\n    const nonEditableGroup = [\n      'reasoning',\n      'audio',\n      'omni',\n      'hybrid',\n      'vision',\n      'tools',\n    ]\n\n    const matchedAbilities = Object.keys(abilityMap).filter((key) =>\n      model_ability.includes(key)\n    )\n\n    const matchedNonEditable = matchedAbilities.filter((key) =>\n      nonEditableGroup.includes(key)\n    )\n\n    if (matchedNonEditable.length > 1) {\n      const baseSource = abilityMap[matchedNonEditable[0]]?.source || []\n      let intersection = new Set(baseSource)\n\n      for (let i = 1; i < matchedNonEditable.length; i++) {\n        const currentSource = new Set(\n          abilityMap[matchedNonEditable[i]]?.source || []\n        )\n        intersection = new Set(\n          [...intersection].filter((item) => currentSource.has(item))\n        )\n      }\n\n      setIsEditableFamily(false)\n      setFamilyOptions(\n        Array.from(intersection).map((item) => ({\n          id: item,\n          label: item,\n        }))\n      )\n      return\n    }\n\n    const matched = matchedAbilities[0]\n    if (matched) {\n      const { editable, source } = abilityMap[matched]\n      setIsEditableFamily(editable)\n      setFamilyOptions(\n        (source || []).map((item) => ({ id: item, label: item }))\n      )\n    } else {\n      setIsEditableFamily(true)\n      setFamilyOptions([])\n    }\n  }\n\n  const changeVirtualenv = (type, index, value) => {\n    if (type === 'add') {\n      setFormData((prev) => {\n        return {\n          ...prev,\n          virtualenv: {\n            ...prev.virtualenv,\n            packages: [...prev.virtualenv.packages, ''],\n          },\n        }\n      })\n    } else if (type === 'delete') {\n      setFormData((prev) => {\n        const newPackages = [...prev.virtualenv.packages]\n        newPackages.splice(index, 1)\n\n        return {\n          ...prev,\n          virtualenv: {\n            ...prev.virtualenv,\n            packages: newPackages,\n          },\n        }\n      })\n    } else if (type === 'change') {\n      setFormData((prev) => {\n        const newPackages = [...prev.virtualenv.packages]\n        newPackages[index] = value\n\n        return {\n          ...prev,\n          virtualenv: {\n            ...prev.virtualenv,\n            packages: newPackages,\n          },\n        }\n      })\n    }\n  }\n\n  const autoFillForm = async () => {\n    if (!autoFillModelPath || !autoFillModelFamily) {\n      setErrorMsg(\n        t(\n          !autoFillModelPath\n            ? 'registerModel.fillInModelPathFirst'\n            : 'registerModel.fillInModelFamilyFirst'\n        )\n      )\n      return\n    }\n    try {\n      const res = await fetchWrapper.post('/v1/models/llm/auto-register', {\n        model_path: autoFillModelPath,\n        model_family: autoFillModelFamily,\n      })\n      setFormData((prev) => ({ ...prev, ...res }))\n      setContrastObj(res)\n      setSpecsArr(res.model_specs)\n\n      setOpenAutoFillDialog(false)\n    } catch (error) {\n      console.error('Error:', error)\n      if (error?.response?.status !== 403 && error?.response?.status !== 401) {\n        setErrorMsg(error.message)\n      }\n    }\n  }\n\n  return (\n    <Box style={{ display: 'flex', overFlow: 'hidden', maxWidth: '100%' }}>\n      <div className=\"show-json\">\n        <p>{t('registerModel.showCustomJsonConfig')}</p>\n        {isShow ? (\n          <Tooltip title={t('registerModel.packUp')} placement=\"top\">\n            <KeyboardDoubleArrowRight\n              className=\"icon arrow\"\n              onClick={() => setIsShow(!isShow)}\n            />\n          </Tooltip>\n        ) : (\n          <Tooltip title={t('registerModel.unfold')} placement=\"top\">\n            <Notes className=\"icon notes\" onClick={() => setIsShow(!isShow)} />\n          </Tooltip>\n        )}\n      </div>\n      <div ref={scrollRef} className={isShow ? 'formBox' : 'formBox broaden'}>\n        {modelType === 'LLM' && (\n          <>\n            <Button\n              variant=\"contained\"\n              color=\"primary\"\n              startIcon={<AutoFixHigh />}\n              onClick={() => setOpenAutoFillDialog(true)}\n            >\n              {t('registerModel.autoFill')}\n            </Button>\n            <Box padding=\"15px\"></Box>\n          </>\n        )}\n\n        {/* Base Information */}\n        <FormControl style={{ width: '100%' }}>\n          {/* name */}\n          {customData.model_name && (\n            <>\n              <TextField\n                label={t('registerModel.modelName')}\n                error={formData.model_name ? false : true}\n                value={formData.model_name}\n                size=\"small\"\n                helperText={t(\n                  'registerModel.alphanumericWithHyphensUnderscores'\n                )}\n                onChange={(event) =>\n                  setFormData({ ...formData, model_name: event.target.value })\n                }\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* description */}\n          {customData.model_description && (\n            <>\n              <TextField\n                label={t('registerModel.modelDescription')}\n                value={formData.model_description}\n                size=\"small\"\n                onChange={(event) =>\n                  setFormData({\n                    ...formData,\n                    model_description: event.target.value,\n                  })\n                }\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* Context Length */}\n          {customData.context_length && (\n            <>\n              <TextField\n                error={Number(formData.context_length) > 0 ? false : true}\n                label={t('registerModel.contextLength')}\n                value={formData.context_length}\n                size=\"small\"\n                onChange={(event) => {\n                  handleNumber(event.target.value, 'context_length')\n                }}\n              />\n              {isContextLengthAlert && (\n                <Alert severity=\"error\">\n                  {t('registerModel.enterIntegerGreaterThanZero')}\n                </Alert>\n              )}\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* dimensions */}\n          {customData.dimensions && (\n            <>\n              <TextField\n                label={t('registerModel.dimensions')}\n                error={Number(formData.dimensions) > 0 ? false : true}\n                value={formData.dimensions}\n                size=\"small\"\n                onChange={(event) => {\n                  handleNumber(event.target.value, 'dimensions')\n                }}\n              />\n              {isDimensionsAlert && (\n                <Alert severity=\"error\">\n                  {t('registerModel.enterIntegerGreaterThanZero')}\n                </Alert>\n              )}\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* Max Tokens */}\n          {customData.max_tokens && (\n            <>\n              <TextField\n                label={t('registerModel.maxTokens')}\n                error={Number(formData.max_tokens) > 0 ? false : true}\n                value={formData.max_tokens}\n                size=\"small\"\n                onChange={(event) => {\n                  handleNumber(event.target.value, 'max_tokens')\n                }}\n              />\n              {isMaxTokensAlert && (\n                <Alert severity=\"error\">\n                  {t('registerModel.enterIntegerGreaterThanZero')}\n                </Alert>\n              )}\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* path */}\n          {customData.model_uri && (\n            <>\n              <TextField\n                label={t('registerModel.modelPath')}\n                error={formData.model_uri ? false : true}\n                value={formData.model_uri}\n                size=\"small\"\n                helperText={t('registerModel.provideModelDirectoryPath')}\n                onChange={(event) =>\n                  setFormData({ ...formData, model_uri: event.target.value })\n                }\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* model_lang */}\n          {(customData.model_lang || customData.language) && (\n            <>\n              <label\n                style={{\n                  paddingLeft: 5,\n                  color:\n                    modelType === 'LLM'\n                      ? formData.model_lang.length === 0\n                        ? '#d32f2f'\n                        : 'inherit'\n                      : formData.language.length === 0\n                      ? '#d32f2f'\n                      : 'inherit',\n                }}\n              >\n                {t('registerModel.modelLanguages')}\n              </label>\n              <Box className=\"checkboxWrapper\">\n                {SUPPORTED_LANGUAGES.map((lang) => (\n                  <Box key={lang} sx={{ marginRight: '10px' }}>\n                    <FormControlLabel\n                      control={\n                        <Checkbox\n                          checked={\n                            modelType === 'LLM'\n                              ? formData.model_lang.includes(lang)\n                              : formData.language.includes(lang)\n                          }\n                          onChange={() => toggleLanguage(lang)}\n                          name={lang}\n                        />\n                      }\n                      label={SUPPORTED_LANGUAGES_DICT[lang]}\n                      style={{\n                        paddingLeft: 10,\n                      }}\n                    />\n                  </Box>\n                ))}\n                <FormControl sx={{ m: 1, minWidth: 120 }} size=\"small\">\n                  <InputLabel>{t('registerModel.languages')}</InputLabel>\n                  <Select\n                    value={''}\n                    label={t('registerModel.languages')}\n                    onChange={(e) => handleSelectLanguages(e.target.value)}\n                    MenuProps={{\n                      PaperProps: {\n                        style: { maxHeight: '20vh' },\n                      },\n                    }}\n                  >\n                    {languages\n                      .filter((item) => !languagesArr.includes(item.code))\n                      .map((item) => (\n                        <MenuItem key={item.code} value={item.code}>\n                          {item.code}\n                        </MenuItem>\n                      ))}\n                  </Select>\n                </FormControl>\n              </Box>\n              <Stack direction=\"row\" spacing={1} style={{ marginLeft: '10px' }}>\n                {languagesArr.map((item) => (\n                  <Chip\n                    key={item}\n                    label={item}\n                    variant=\"outlined\"\n                    size=\"small\"\n                    color=\"primary\"\n                    onDelete={() => handleDeleteLanguages(item)}\n                  />\n                ))}\n              </Stack>\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* multilingual */}\n          {'multilingual' in customData && (\n            <>\n              <label\n                style={{\n                  paddingLeft: 5,\n                }}\n              >\n                {t('registerModel.multilingual')}\n              </label>\n              <FormControlLabel\n                style={{ marginLeft: 0, width: 50 }}\n                control={<Switch checked={formData.multilingual} />}\n                onChange={(e) =>\n                  setFormData({ ...formData, multilingual: e.target.checked })\n                }\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* abilities */}\n          {customData.model_ability && (\n            <>\n              <label\n                style={{\n                  paddingLeft: 5,\n                  color:\n                    formData.model_ability.length == 0 ? '#d32f2f' : 'inherit',\n                }}\n              >\n                {t('registerModel.modelAbilities')}\n              </label>\n              <Box className=\"checkboxWrapper\">\n                {modelType === 'LLM' ? (\n                  <>\n                    {model_ability_options\n                      .find((item) => item.type === modelType)\n                      .options.map((ability) => (\n                        <Box key={ability} sx={{ marginRight: '10px' }}>\n                          <FormControlLabel\n                            control={\n                              <Checkbox\n                                checked={formData.model_ability.includes(\n                                  ability.toLowerCase()\n                                )}\n                                onChange={() =>\n                                  toggleAbility(ability.toLowerCase())\n                                }\n                                name={ability}\n                              />\n                            }\n                            label={ability}\n                            style={{\n                              paddingLeft: 10,\n                            }}\n                          />\n                        </Box>\n                      ))}\n                  </>\n                ) : modelType === 'image' ? (\n                  <Box className=\"checkboxWrapper\">\n                    {model_ability_options\n                      .find((item) => item.type === modelType)\n                      .options.map((ability) => {\n                        return (\n                          <Box key={ability} sx={{ marginRight: '10px' }}>\n                            <FormControlLabel\n                              control={\n                                <Checkbox\n                                  checked={formData.model_ability.includes(\n                                    ability\n                                  )}\n                                  onChange={() => toggleImageAbility(ability)}\n                                  name={ability}\n                                />\n                              }\n                              label={ability}\n                              style={{\n                                paddingLeft: 10,\n                              }}\n                            />\n                          </Box>\n                        )\n                      })}\n                  </Box>\n                ) : (\n                  <RadioGroup\n                    value={formData.model_ability}\n                    style={{ display: 'flex' }}\n                    onChange={(e) => {\n                      setFormData({\n                        ...formData,\n                        model_ability: [e.target.value],\n                      })\n                    }}\n                  >\n                    <Box\n                      className=\"checkboxWrapper\"\n                      sx={{ paddingLeft: '10px' }}\n                    >\n                      {model_ability_options\n                        .find((item) => item.type === modelType)\n                        .options.map((subItem) => (\n                          <FormControlLabel\n                            key={subItem}\n                            value={subItem}\n                            control={<Radio />}\n                            label={subItem}\n                          />\n                        ))}\n                    </Box>\n                  </RadioGroup>\n                )}\n              </Box>\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* family */}\n          {(customData.model_family === '' || customData.model_family) && (\n            <>\n              {modelType === 'LLM' && (\n                <>\n                  <Autocomplete\n                    id=\"free-solo-demo\"\n                    freeSolo={isEditableFamily}\n                    options={familyOptions || []}\n                    size=\"small\"\n                    renderInput={(params) => (\n                      <TextField\n                        {...params}\n                        helperText={\n                          isEditableFamily\n                            ? t('registerModel.chooseBuiltInOrCustomModel')\n                            : t('registerModel.chooseOnlyBuiltInModel')\n                        }\n                        InputProps={{\n                          ...params.InputProps,\n                          disabled: !isEditableFamily,\n                        }}\n                        label={t('registerModel.modelFamily')}\n                      />\n                    )}\n                    value={formData.model_family}\n                    onChange={(_, newValue) => {\n                      handleFamily(newValue?.id)\n                    }}\n                    onInputChange={(_, newInputValue) => {\n                      if (isEditableFamily) {\n                        handleFamily(newInputValue)\n                      }\n                    }}\n                  />\n                  <Box padding=\"15px\"></Box>\n                </>\n              )}\n              {(modelType === 'image' || modelType === 'audio') && (\n                <>\n                  <FormControl>\n                    <label\n                      style={{\n                        paddingLeft: 5,\n                        color: 'inherit',\n                      }}\n                    >\n                      {t('registerModel.modelFamily')}\n                    </label>\n                    <RadioGroup\n                      value={formData.model_family}\n                      style={{ display: 'flex' }}\n                      onChange={(e) => {\n                        setFormData({\n                          ...formData,\n                          model_family: e.target.value,\n                        })\n                      }}\n                    >\n                      <Box\n                        className=\"checkboxWrapper\"\n                        sx={{ paddingLeft: '10px' }}\n                      >\n                        {model_family_options\n                          .find((item) => item.type === modelType)\n                          .options.map((subItem) => (\n                            <FormControlLabel\n                              key={subItem}\n                              value={subItem}\n                              control={<Radio />}\n                              label={subItem}\n                            />\n                          ))}\n                      </Box>\n                    </RadioGroup>\n                  </FormControl>\n                  <Box padding=\"15px\"></Box>\n                </>\n              )}\n            </>\n          )}\n\n          {/* chat_template */}\n          {formData.model_ability?.includes('chat') && (\n            <>\n              <div className=\"chat_template_box\">\n                <TextField\n                  label={t('registerModel.chatTemplate')}\n                  error={handleChatTemplateAlert()}\n                  value={formData.chat_template || ''}\n                  size=\"small\"\n                  helperText={t('registerModel.ensureChatTemplatePassesTest')}\n                  multiline\n                  rows={6}\n                  onChange={(event) =>\n                    setFormData({\n                      ...formData,\n                      chat_template: event.target.value,\n                    })\n                  }\n                  style={{ flex: 1 }}\n                />\n                <Button\n                  variant=\"contained\"\n                  onClick={handleTest}\n                  style={{ marginTop: 50 }}\n                >\n                  {t('registerModel.test')}\n                </Button>\n                <div className=\"chat_template_test\">\n                  <div className=\"chat_template_test_mainBox\">\n                    <div\n                      style={{ display: 'flex', alignItems: 'center', gap: 5 }}\n                    >\n                      <span style={{ fontSize: 16 }}>\n                        {t('registerModel.messagesExample')}\n                      </span>\n                      <OpenInFull\n                        onClick={() => setIsOpenMessages(true)}\n                        style={{\n                          fontSize: 14,\n                          color: '#666',\n                          cursor: 'pointer',\n                        }}\n                      />\n                    </div>\n                    <div>\n                      <span\n                        style={{\n                          display: 'flex',\n                          alignItems: 'center',\n                          gap: 10,\n                          fontSize: 16,\n                        }}\n                      >\n                        {t('registerModel.testResult')}\n                        {testErrorInfo ? (\n                          <Cancel style={{ color: 'red' }} />\n                        ) : testRes ? (\n                          <CheckCircle style={{ color: 'rgb(46, 125, 50)' }} />\n                        ) : (\n                          ''\n                        )}\n                      </span>\n                      <div\n                        className=\"test_res_box\"\n                        style={{\n                          borderColor:\n                            testErrorInfo === ''\n                              ? testRes\n                                ? 'rgb(46, 125, 50)'\n                                : '#ddd'\n                              : 'rgb(46, 125, 50)',\n                        }}\n                      >\n                        {testErrorInfo !== ''\n                          ? testErrorInfo\n                          : testRes\n                          ? testRes\n                          : t('registerModel.noTestResults')}\n                      </div>\n                    </div>\n                  </div>\n                  <div\n                    className=\"chat_template_test_tip\"\n                    style={{ color: testErrorInfo === '' ? '' : '#d32f2f' }}\n                  >\n                    {t('registerModel.testFailurePreventsChatWorking')}\n                  </div>\n                </div>\n              </div>\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* stop_token_ids */}\n          {formData.model_ability?.includes('chat') && (\n            <>\n              <AddStop\n                label={t('registerModel.stopTokenIds')}\n                arrItemType=\"number\"\n                formData={formData.stop_token_ids}\n                onGetData={getStopTokenIds}\n                onGetError={(value) => {\n                  if (value.includes('false')) {\n                    setIsStopTokenIdsAlert(true)\n                  } else {\n                    setIsStopTokenIdsAlert(false)\n                  }\n                }}\n                helperText={t('registerModel.stopControlForChatModels')}\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* stop */}\n          {formData.model_ability?.includes('chat') && (\n            <>\n              <AddStop\n                label={t('registerModel.stop')}\n                arrItemType=\"string\"\n                formData={formData.stop}\n                onGetData={getStop}\n                helperText={t('registerModel.stopControlStringForChatModels')}\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* reasoning_start_tag */}\n          {formData.model_ability?.includes('reasoning') && (\n            <>\n              <TextField\n                label={t('registerModel.reasoningStartTag')}\n                value={formData.reasoning_start_tag}\n                size=\"small\"\n                onChange={(event) =>\n                  setFormData({\n                    ...formData,\n                    reasoning_start_tag: event.target.value,\n                  })\n                }\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* reasoning_end_tag */}\n          {formData.model_ability?.includes('reasoning') && (\n            <>\n              <TextField\n                label={t('registerModel.reasoningEndTag')}\n                value={formData.reasoning_end_tag}\n                size=\"small\"\n                onChange={(event) =>\n                  setFormData({\n                    ...formData,\n                    reasoning_end_tag: event.target.value,\n                  })\n                }\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* tool_parser */}\n          {formData.model_ability?.includes('tools') && (\n            <>\n              <TextField\n                label={t('registerModel.toolParser')}\n                value={formData.tool_parser}\n                size=\"small\"\n                onChange={(event) =>\n                  setFormData({\n                    ...formData,\n                    tool_parser: event.target.value,\n                  })\n                }\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* specs */}\n          {customData.model_specs && (\n            <>\n              <AddModelSpecs\n                isJump={\n                  (model_name ? true : false) ||\n                  (specsArr && specsArr.length > 0)\n                }\n                formData={\n                  (formData?.model_specs && formData.model_specs[0]) ||\n                  customData.model_specs[0]\n                }\n                specsDataArr={specsArr}\n                onGetArr={getSpecsArr}\n                scrollRef={scrollRef}\n                modelType={modelType}\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* controlnet */}\n          {customData.controlnet && (\n            <>\n              <AddControlnet\n                controlnetDataArr={controlnetArr}\n                onGetControlnetArr={getControlnetArr}\n                scrollRef={scrollRef}\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* launcher */}\n          {customData.launcher && (\n            <>\n              <TextField\n                label={t('registerModel.launcher')}\n                error={formData.launcher ? false : true}\n                value={formData.launcher}\n                size=\"small\"\n                helperText={t('registerModel.provideModelLauncher')}\n                onChange={(event) =>\n                  setFormData({ ...formData, launcher: event.target.value })\n                }\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* launcher_args */}\n          {customData.launcher_args && (\n            <>\n              <TextField\n                label={t('registerModel.launcherArguments')}\n                value={formData.launcher_args}\n                size=\"small\"\n                helperText={t('registerModel.jsonArgumentsForLauncher')}\n                onChange={(event) => {\n                  try {\n                    JSON.parse(event.target.value)\n                    setIsValidLauncherArgsAlert(false)\n                  } catch {\n                    setIsValidLauncherArgsAlert(true)\n                  }\n                  return setFormData({\n                    ...formData,\n                    launcher_args: event.target.value,\n                  })\n                }}\n                multiline\n                rows={4}\n              />\n              {isValidLauncherArgsAlert && (\n                <Alert severity=\"error\">\n                  {t('registerModel.enterJsonFormattedDictionary')}\n                </Alert>\n              )}\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n\n          {/* virtualenv */}\n          {customData.virtualenv && (\n            <>\n              <AddVirtualenv\n                virtualenv={formData.virtualenv}\n                onChangeVirtualenv={changeVirtualenv}\n                scrollRef={scrollRef}\n              />\n              <Box padding=\"15px\"></Box>\n            </>\n          )}\n        </FormControl>\n\n        {model_name ? (\n          <>\n            <Button\n              variant=\"contained\"\n              color=\"primary\"\n              type=\"submit\"\n              onClick={handleEdit}\n              disabled={isEqual}\n            >\n              {t('registerModel.edit')}\n            </Button>\n            <Button\n              style={{ marginLeft: 30 }}\n              variant=\"outlined\"\n              color=\"primary\"\n              type=\"submit\"\n              onClick={handleCancel}\n            >\n              {t('registerModel.cancel')}\n            </Button>\n          </>\n        ) : (\n          <Box width={'100%'}>\n            <Button\n              variant=\"contained\"\n              color=\"primary\"\n              type=\"submit\"\n              onClick={handleClick}\n              disabled={\n                isContextLengthAlert ||\n                isDimensionsAlert ||\n                isMaxTokensAlert ||\n                formData.model_lang?.length === 0 ||\n                formData.language?.length === 0 ||\n                formData.model_ability?.length === 0 ||\n                (modelType === 'LLM' && !formData.model_family) ||\n                isStopTokenIdsAlert ||\n                handleFamilyAlert()\n              }\n            >\n              {t('registerModel.registerModel')}\n            </Button>\n          </Box>\n        )}\n      </div>\n\n      <Dialog\n        open={isOpenMessages}\n        onClose={() => setIsOpenMessages(false)}\n        aria-labelledby=\"alert-dialog-title\"\n        aria-describedby=\"alert-dialog-description\"\n      >\n        <DialogTitle id=\"alert-dialog-title\">\n          {t('registerModel.messagesExample')}\n        </DialogTitle>\n        <DialogContent style={{ width: 600 }}>\n          <TextField\n            multiline\n            fullWidth\n            rows={10}\n            disabled\n            defaultValue={JSON.stringify(messages, null, 4)}\n          />\n        </DialogContent>\n        <DialogActions>\n          <Button\n            variant=\"contained\"\n            onClick={() => setIsOpenMessages(false)}\n            style={{ marginRight: 15, marginBottom: 15 }}\n          >\n            OK\n          </Button>\n        </DialogActions>\n      </Dialog>\n\n      <Dialog\n        open={openAutoFillDialog}\n        onClose={() => setOpenAutoFillDialog(false)}\n        aria-labelledby=\"alert-dialog-title\"\n        aria-describedby=\"alert-dialog-description\"\n      >\n        <DialogTitle id=\"alert-dialog-title\">\n          {t('registerModel.autoFill')}\n        </DialogTitle>\n        <DialogContent style={{ width: 600, padding: 20 }}>\n          <TextField\n            label={t('registerModel.modelPath')}\n            value={autoFillModelPath}\n            size=\"small\"\n            fullWidth\n            onChange={(e) => setAutoFillModelPath(e.target.value)}\n          />\n          <Box padding=\"15px\"></Box>\n\n          <FormControl fullWidth size=\"small\">\n            <InputLabel>{t('registerModel.modelFamily')}</InputLabel>\n            <Select\n              value={autoFillModelFamily}\n              label={t('registerModel.modelFamily')}\n              onChange={(e) => setAutoFillModelFamily(e.target.value)}\n              MenuProps={{\n                PaperProps: {\n                  style: {\n                    maxHeight: 300,\n                  },\n                },\n              }}\n            >\n              {(allFamilies || []).map((subItem) => (\n                <MenuItem key={subItem} value={subItem}>\n                  {subItem}\n                </MenuItem>\n              ))}\n            </Select>\n          </FormControl>\n        </DialogContent>\n        <DialogActions>\n          <Button\n            variant=\"contained\"\n            onClick={autoFillForm}\n            style={{ marginRight: 15, marginBottom: 15 }}\n          >\n            {t('registerModel.autoFill')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n\n      {/* JSON */}\n      <div className={isShow ? 'jsonBox' : 'jsonBox hide'}>\n        <div className=\"jsonBox-header\">\n          <div className=\"jsonBox-title\">{t('registerModel.JSONFormat')}</div>\n          <CopyComponent tip={t('registerModel.copyAll')} text={jsonData} />\n        </div>\n        <textarea readOnly className=\"textarea\" value={jsonData} />\n      </div>\n    </Box>\n  )\n}\n\nexport default RegisterModelComponent\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/register_model/styles/registerModelStyle.css",
    "content": ".formBox {\n  position: relative;\n  max-width: 50vw;\n  min-width: 50vw;\n  max-height: 80vh;\n  overflow: auto;\n  padding: 40px 20px 0 0;\n  transition: all 0.4s ease-in-out;\n}\n\n.broaden {\n  max-width: 100%;\n  min-width: 100%;\n  padding-right: 0;\n}\n\n.show-json {\n  display: flex;\n  align-items: center;\n  position: absolute;\n  top: 90px;\n  right: 60px;\n}\n\n.icon {\n  position: absolute;\n  right: -40px;\n  cursor: pointer;\n  margin-left: 20px;\n}\n\n.icon:hover {\n  color: #1976d2;\n}\n\n.arrow {\n  font-size: 24px !important;\n}\n\n.jsonBox {\n  position: relative;\n  min-height: 80vh;\n  width: 100%;\n  transition: all 0.4s ease-in-out;\n}\n\n.hide {\n  width: 0;\n  transform: translate(30vw, 0);\n  overflow: hidden;\n}\n\n.checkboxWrapper {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  width: 100%;\n}\n\n.jsonBox-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.jsonBox-title {\n  line-height: 40px;\n  font-weight: 700;\n}\n\n.textarea {\n  width: 100%;\n  height: calc(100% - 40px);\n  padding: 5px 10px;\n  border: 1px solid #ddd;\n  border-radius: 5px;\n  resize: none;\n  color: #666;\n  background-color: transparent;\n}\n\n.addBtn {\n  margin-left: 20px !important;\n}\n\n.item {\n  position: relative;\n  border: 1px solid #ddd;\n  margin: 10px 50px 0;\n  padding: 20px;\n  border-radius: 10px;\n  overflow: hidden;\n}\n\n.item:hover .deleteBtn {\n  transform: translateX(-50px);\n}\n\n.deleteBtn {\n  position: absolute;\n  right: 20px;\n  top: calc(50% - 25px);\n  width: 50px;\n  height: 50px;\n  transform: translateX(80px);\n  text-align: center;\n  line-height: 70px;\n  border-radius: 25px;\n  background-color: #1976d2;\n  transition: all 0.3s ease-in-out;\n}\n\n.deleteBtn:hover {\n  cursor: pointer;\n  box-shadow: 0 0 10px #aaa;\n}\n\n.deleteIcon {\n  font-size: 28px !important;\n  color: #fff;\n}\n\n.chat_template_box {\n  display: flex;\n  align-items: start;\n  gap: 10px;\n}\n\n.chat_template_test {\n  width: 30%;\n}\n\n.chat_template_test_mainBox {\n  height: 137px;\n  padding: 10px;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  overflow: scroll;\n}\n\n.chat_template_test_tip {\n  font-size: 10px;\n  margin: 4px 14px 0;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.test_res_box {\n  border: 1px solid #ddd;\n  min-height: 55px;\n  padding: 10px;\n  margin-top: 5px;\n  border-radius: 4px;\n}\n\n.css-19qh8xo-MuiInputBase-input-MuiOutlinedInput-input.Mui-disabled {\n  -webkit-text-fill-color: #000 !important;\n}\n"
  },
  {
    "path": "xinference/ui/web/ui/src/scenes/running_models/index.js",
    "content": "import ContentCopyOutlinedIcon from '@mui/icons-material/ContentCopyOutlined'\nimport DeleteOutlineOutlinedIcon from '@mui/icons-material/DeleteOutlineOutlined'\nimport OpenInBrowserOutlinedIcon from '@mui/icons-material/OpenInBrowserOutlined'\nimport { TabContext, TabList, TabPanel } from '@mui/lab'\nimport {\n  Badge,\n  Box,\n  Button,\n  Chip,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogTitle,\n  IconButton,\n  Paper,\n  Stack,\n  Tab,\n  Table,\n  TableBody,\n  TableCell,\n  TableContainer,\n  TableHead,\n  TableRow,\n  Tooltip,\n  Typography,\n} from '@mui/material'\nimport { DataGrid } from '@mui/x-data-grid'\nimport React, { useContext, useEffect, useState } from 'react'\nimport { useCookies } from 'react-cookie'\nimport { useTranslation } from 'react-i18next'\nimport { useLocation, useNavigate } from 'react-router-dom'\n\nimport { ApiContext } from '../../components/apiContext'\nimport ErrorMessageSnackBar from '../../components/errorMessageSnackBar'\nimport fetcher from '../../components/fetcher'\nimport fetchWrapper from '../../components/fetchWrapper'\nimport Title from '../../components/Title'\nimport { isValidBearerToken } from '../../components/utils'\n\nconst tabArr = [\n  {\n    label: 'model.languageModels',\n    value: '/running_models/LLM',\n    showPrompt: false,\n  },\n  {\n    label: 'model.embeddingModels',\n    value: '/running_models/embedding',\n    showPrompt: false,\n  },\n  {\n    label: 'model.rerankModels',\n    value: '/running_models/rerank',\n    showPrompt: false,\n  },\n  {\n    label: 'model.imageModels',\n    value: '/running_models/image',\n    showPrompt: false,\n  },\n  {\n    label: 'model.audioModels',\n    value: '/running_models/audio',\n    showPrompt: false,\n  },\n  {\n    label: 'model.videoModels',\n    value: '/running_models/video',\n    showPrompt: false,\n  },\n  {\n    label: 'model.flexibleModels',\n    value: '/running_models/flexible',\n    showPrompt: false,\n  },\n]\n\nconst RunningModels = () => {\n  const [tabValue, setTabValue] = React.useState(\n    sessionStorage.getItem('runningModelType')\n  )\n  const [tabList, setTabList] = useState(tabArr)\n  const [llmData, setLlmData] = useState([])\n  const [embeddingModelData, setEmbeddingModelData] = useState([])\n  const [imageModelData, setImageModelData] = useState([])\n  const [audioModelData, setAudioModelData] = useState([])\n  const [videoModelData, setVideoModelData] = useState([])\n  const [rerankModelData, setRerankModelData] = useState([])\n  const [flexibleModelData, setFlexibleModelData] = useState([])\n  const [replicaDialogOpen, setReplicaDialogOpen] = useState(false)\n  const [selectedModelReplicas, setSelectedModelReplicas] = useState([])\n  const [selectedModelUid, setSelectedModelUid] = useState('')\n  const { isCallingApi, setIsCallingApi } = useContext(ApiContext)\n  const { isUpdatingModel, setIsUpdatingModel } = useContext(ApiContext)\n  const { setErrorMsg } = useContext(ApiContext)\n  const [cookie] = useCookies(['token'])\n  const navigate = useNavigate()\n  const endPoint = useContext(ApiContext).endPoint\n  const { t } = useTranslation()\n  const location = useLocation()\n\n  const handleTabChange = (event, newValue) => {\n    setTabValue(newValue)\n    navigate(newValue)\n    sessionStorage.setItem('runningModelType', newValue)\n  }\n\n  const update = (isCallingApi) => {\n    if (\n      sessionStorage.getItem('auth') === 'true' &&\n      !isValidBearerToken(sessionStorage.getItem('token')) &&\n      !isValidBearerToken(cookie.token)\n    ) {\n      navigate('/login', { replace: true })\n      return\n    }\n    if (isCallingApi) {\n      setLlmData([{ id: 'Loading, do not refresh page...', url: 'IS_LOADING' }])\n      setEmbeddingModelData([\n        { id: 'Loading, do not refresh page...', url: 'IS_LOADING' },\n      ])\n      setAudioModelData([\n        { id: 'Loading, do not refresh page...', url: 'IS_LOADING' },\n      ])\n      setVideoModelData([\n        { id: 'Loading, do not refresh page...', url: 'IS_LOADING' },\n      ])\n      setImageModelData([\n        { id: 'Loading, do not refresh page...', url: 'IS_LOADING' },\n      ])\n      setRerankModelData([\n        { id: 'Loading, do not refresh page...', url: 'IS_LOADING' },\n      ])\n      setFlexibleModelData([\n        { id: 'Loading, do not refresh page...', url: 'IS_LOADING' },\n      ])\n    } else {\n      setIsUpdatingModel(true)\n\n      fetchWrapper\n        .get('/v1/models')\n        .then((response) => {\n          const modelMap = {\n            LLM: [],\n            embedding: [],\n            image: [],\n            audio: [],\n            video: [],\n            rerank: [],\n            flexible: [],\n          }\n\n          response.data.forEach((model) => {\n            const newValue = {\n              ...model,\n              id: model.id,\n              url: model.id,\n            }\n            if (modelMap[newValue.model_type]) {\n              modelMap[newValue.model_type].push(newValue)\n            }\n          })\n\n          setLlmData(modelMap.LLM)\n          setEmbeddingModelData(modelMap.embedding)\n          setImageModelData(modelMap.image)\n          setAudioModelData(modelMap.audio)\n          setVideoModelData(modelMap.video)\n          setRerankModelData(modelMap.rerank)\n          setFlexibleModelData(modelMap.flexible)\n\n          if (location.pathname.endsWith('/LLM')) {\n            const modelOrder = [\n              'LLM',\n              'embedding',\n              'image',\n              'audio',\n              'video',\n              'rerank',\n              'flexible',\n            ]\n            for (const type of modelOrder) {\n              if (modelMap[type] && modelMap[type].length > 0) {\n                navigate(`/running_models/${type}`)\n                setTabValue(`/running_models/${type}`)\n                break\n              }\n            }\n          }\n\n          setIsUpdatingModel(false)\n        })\n        .catch((error) => {\n          console.error('Error:', error)\n          setIsUpdatingModel(false)\n          if (error.response.status !== 403 && error.response.status !== 401) {\n            setErrorMsg(error.message)\n          }\n        })\n    }\n  }\n\n  const handleViewReplicas = async (modelUid) => {\n    try {\n      const response = await fetch(`${endPoint}/v1/models/${modelUid}/replicas`)\n      if (!response.ok) {\n        throw new Error('Failed to fetch replica status')\n      }\n      const replicas = await response.json()\n      setSelectedModelReplicas(replicas)\n      setSelectedModelUid(modelUid)\n      setReplicaDialogOpen(true)\n    } catch (error) {\n      console.error('Error fetching replica details:', error)\n      setErrorMsg('Failed to load replica details: ' + error.message)\n    }\n  }\n\n  useEffect(() => {\n    update(isCallingApi)\n    // eslint-disable-next-line\n  }, [isCallingApi, cookie.token])\n\n  const replicaColumn = {\n    field: 'replica',\n    headerName: t('runningModels.replica'),\n    flex: 1,\n    renderCell: ({ row }) => {\n      return (\n        <Box\n          sx={{\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'space-between',\n            width: '100%',\n            paddingRight: 2,\n          }}\n        >\n          <span>{row.replica}</span>\n          <Button\n            size=\"small\"\n            variant=\"text\"\n            onClick={(e) => {\n              e.stopPropagation()\n              handleViewReplicas(row.id)\n            }}\n            sx={{ minWidth: 'auto', padding: '4px 8px' }}\n          >\n            {t('runningModels.viewDetails')}\n          </Button>\n        </Box>\n      )\n    },\n  }\n\n  const llmColumns = [\n    {\n      field: 'id',\n      headerName: 'ID',\n      flex: 1,\n      minWidth: 250,\n      renderCell: ({ row }) => {\n        return renderWithCopy(row.id)\n      },\n    },\n    {\n      field: 'model_name',\n      headerName: t('runningModels.name'),\n      flex: 1,\n      renderCell: ({ row }) => {\n        return renderWithCopy(row.model_name)\n      },\n    },\n    {\n      field: 'address',\n      headerName: t('runningModels.address'),\n      flex: 1,\n    },\n    {\n      field: 'accelerators',\n      headerName: t('runningModels.gpuIndexes'),\n      flex: 1,\n    },\n    {\n      field: 'model_size_in_billions',\n      headerName: t('runningModels.size'),\n      flex: 1,\n    },\n    {\n      field: 'quantization',\n      headerName: t('runningModels.quantization'),\n      flex: 1,\n    },\n    replicaColumn,\n    {\n      field: 'url',\n      headerName: t('runningModels.actions'),\n      flex: 1,\n      minWidth: 200,\n      sortable: false,\n      filterable: false,\n      disableColumnMenu: true,\n      renderCell: ({ row }) => {\n        const url = row.url\n        const openUrl = `${endPoint}/` + url\n        const closeUrl = `${endPoint}/v1/models/` + url\n        const gradioUrl = `${endPoint}/v1/ui/` + url\n\n        if (url === 'IS_LOADING') {\n          return <div></div>\n        }\n\n        return (\n          <Box\n            style={{\n              width: '100%',\n              display: 'flex',\n              justifyContent: 'left',\n              alignItems: 'left',\n            }}\n          >\n            <IconButton\n              title=\"Launch Web UI\"\n              style={{\n                borderWidth: '0px',\n                backgroundColor: 'transparent',\n                paddingLeft: '0px',\n                paddingRight: '10px',\n              }}\n              onClick={() => {\n                if (isCallingApi || isUpdatingModel) {\n                  // Make sure no ongoing call\n                  return\n                }\n\n                setIsCallingApi(true)\n\n                fetcher(openUrl, {\n                  method: 'HEAD',\n                })\n                  .then((response) => {\n                    if (response.status === 404) {\n                      // If web UI doesn't exist (404 Not Found)\n                      console.log('UI does not exist, creating new...')\n                      return fetcher(gradioUrl, {\n                        method: 'POST',\n                        headers: {\n                          'Content-Type': 'application/json',\n                        },\n                        body: JSON.stringify({\n                          model_type: row.model_type,\n                          model_name: row.model_family,\n                          model_size_in_billions: row.model_size_in_billions,\n                          model_format: row.model_format,\n                          quantization: row.quantization,\n                          context_length: row.context_length,\n                          model_ability: row.model_ability,\n                          model_description: row.model_description,\n                          model_lang: row.model_lang,\n                        }),\n                      })\n                        .then((response) => response.json())\n                        .then(() =>\n                          window.open(openUrl, '_blank', 'noopener noreferrer')\n                        )\n                        .finally(() => setIsCallingApi(false))\n                    } else if (response.ok) {\n                      // If web UI does exist\n                      console.log('UI exists, opening...')\n                      window.open(openUrl, '_blank', 'noopener noreferrer')\n                      setIsCallingApi(false)\n                    } else {\n                      // Other HTTP errors\n                      console.error(\n                        `Unexpected response status: ${response.status}`\n                      )\n                      setIsCallingApi(false)\n                    }\n                  })\n                  .catch((error) => {\n                    console.error('Error:', error)\n                    setIsCallingApi(false)\n                  })\n              }}\n            >\n              <Box\n                width=\"40px\"\n                m=\"0 auto\"\n                p=\"5px\"\n                display=\"flex\"\n                justifyContent=\"center\"\n                borderRadius=\"4px\"\n                style={{\n                  border: '1px solid #e5e7eb',\n                  borderWidth: '1px',\n                  borderColor: '#e5e7eb',\n                }}\n              >\n                <OpenInBrowserOutlinedIcon />\n              </Box>\n            </IconButton>\n            <IconButton\n              title=\"Terminate Model\"\n              style={{\n                borderWidth: '0px',\n                backgroundColor: 'transparent',\n                paddingLeft: '0px',\n                paddingRight: '10px',\n              }}\n              onClick={() => {\n                if (isCallingApi || isUpdatingModel) {\n                  return\n                }\n                setIsCallingApi(true)\n                fetcher(closeUrl, {\n                  method: 'DELETE',\n                })\n                  .then((response) => {\n                    response.json()\n                  })\n                  .then(() => {\n                    setIsCallingApi(false)\n                  })\n                  .catch((error) => {\n                    console.error('Error:', error)\n                    setIsCallingApi(false)\n                  })\n              }}\n            >\n              <Box\n                width=\"40px\"\n                m=\"0 auto\"\n                p=\"5px\"\n                display=\"flex\"\n                justifyContent=\"center\"\n                borderRadius=\"4px\"\n                style={{\n                  border: '1px solid #e5e7eb',\n                  borderWidth: '1px',\n                  borderColor: '#e5e7eb',\n                }}\n              >\n                <DeleteOutlineOutlinedIcon />\n              </Box>\n            </IconButton>\n          </Box>\n        )\n      },\n    },\n  ]\n  const embeddingModelColumns = [\n    {\n      field: 'id',\n      headerName: 'ID',\n      flex: 1,\n      minWidth: 250,\n      renderCell: ({ row }) => {\n        return renderWithCopy(row.id)\n      },\n    },\n    {\n      field: 'model_name',\n      headerName: t('runningModels.name'),\n      flex: 1,\n      renderCell: ({ row }) => {\n        return renderWithCopy(row.model_name)\n      },\n    },\n    {\n      field: 'address',\n      headerName: t('runningModels.address'),\n      flex: 1,\n    },\n    {\n      field: 'accelerators',\n      headerName: t('runningModels.gpuIndexes'),\n      flex: 1,\n    },\n    replicaColumn,\n    {\n      field: 'url',\n      headerName: t('runningModels.actions'),\n      flex: 1,\n      minWidth: 200,\n      sortable: false,\n      filterable: false,\n      disableColumnMenu: true,\n      renderCell: ({ row }) => {\n        const url = row.url\n        const closeUrl = `${endPoint}/v1/models/` + url\n\n        if (url === 'IS_LOADING') {\n          return <div></div>\n        }\n\n        return (\n          <Box\n            style={{\n              width: '100%',\n              display: 'flex',\n              justifyContent: 'left',\n              alignItems: 'left',\n            }}\n          >\n            <IconButton\n              title=\"Terminate Model\"\n              style={{\n                borderWidth: '0px',\n                backgroundColor: 'transparent',\n                paddingLeft: '0px',\n                paddingRight: '10px',\n              }}\n              onClick={() => {\n                if (isCallingApi || isUpdatingModel) {\n                  return\n                }\n                setIsCallingApi(true)\n                fetcher(closeUrl, {\n                  method: 'DELETE',\n                })\n                  .then((response) => {\n                    response.json()\n                  })\n                  .then(() => {\n                    setIsCallingApi(false)\n                  })\n                  .catch((error) => {\n                    console.error('Error:', error)\n                    setIsCallingApi(false)\n                  })\n              }}\n            >\n              <Box\n                width=\"40px\"\n                m=\"0 auto\"\n                p=\"5px\"\n                display=\"flex\"\n                justifyContent=\"center\"\n                borderRadius=\"4px\"\n                style={{\n                  border: '1px solid #e5e7eb',\n                  borderWidth: '1px',\n                  borderColor: '#e5e7eb',\n                }}\n              >\n                <DeleteOutlineOutlinedIcon />\n              </Box>\n            </IconButton>\n          </Box>\n        )\n      },\n    },\n  ]\n  const imageModelColumns = [\n    {\n      field: 'id',\n      headerName: 'ID',\n      flex: 1,\n      minWidth: 250,\n      renderCell: ({ row }) => {\n        return renderWithCopy(row.id)\n      },\n    },\n    {\n      field: 'model_name',\n      headerName: t('runningModels.name'),\n      flex: 1,\n      renderCell: ({ row }) => {\n        return renderWithCopy(row.model_name)\n      },\n    },\n    {\n      field: 'address',\n      headerName: t('runningModels.address'),\n      flex: 1,\n    },\n    {\n      field: 'accelerators',\n      headerName: t('runningModels.gpuIndexes'),\n      flex: 1,\n    },\n    replicaColumn,\n    {\n      field: 'url',\n      headerName: t('runningModels.actions'),\n      flex: 1,\n      minWidth: 200,\n      sortable: false,\n      filterable: false,\n      disableColumnMenu: true,\n      renderCell: ({ row }) => {\n        // this URL means model_uid\n        const url = row.url\n        const openUrl = `${endPoint}/` + url\n        const closeUrl = `${endPoint}/v1/models/` + url\n        let pathType\n        if (row.model_type === 'video') {\n          pathType = 'videos'\n        } else if (row.model_type === 'audio') {\n          pathType = 'audios'\n        } else {\n          pathType = 'images' // default\n        }\n        const gradioUrl = `${endPoint}/v1/ui/${pathType}/` + url\n\n        if (url === 'IS_LOADING') {\n          return <div></div>\n        }\n\n        return (\n          <Box\n            style={{\n              width: '100%',\n              display: 'flex',\n              justifyContent: 'left',\n              alignItems: 'left',\n            }}\n          >\n            <IconButton\n              title=\"Launch Web UI\"\n              style={{\n                borderWidth: '0px',\n                backgroundColor: 'transparent',\n                paddingLeft: '0px',\n                paddingRight: '10px',\n              }}\n              onClick={() => {\n                if (isCallingApi || isUpdatingModel) {\n                  // Make sure no ongoing call\n                  return\n                }\n\n                setIsCallingApi(true)\n\n                fetcher(openUrl, {\n                  method: 'HEAD',\n                })\n                  .then((response) => {\n                    if (response.status === 404) {\n                      // If web UI doesn't exist (404 Not Found)\n                      console.log('UI does not exist, creating new...')\n                      return fetcher(gradioUrl, {\n                        method: 'POST',\n                        headers: {\n                          'Content-Type': 'application/json',\n                        },\n                        body: JSON.stringify({\n                          model_type: row.model_type,\n                          model_family: row.model_family,\n                          model_id: row.id,\n                          controlnet: row.controlnet,\n                          model_revision: row.model_revision,\n                          model_name: row.model_name,\n                          model_ability: row.model_ability,\n                        }),\n                      })\n                        .then((response) => response.json())\n                        .then(() =>\n                          window.open(openUrl, '_blank', 'noopener noreferrer')\n                        )\n                        .finally(() => setIsCallingApi(false))\n                    } else if (response.ok) {\n                      // If web UI does exist\n                      console.log('UI exists, opening...')\n                      window.open(openUrl, '_blank', 'noopener noreferrer')\n                      setIsCallingApi(false)\n                    } else {\n                      // Other HTTP errors\n                      console.error(\n                        `Unexpected response status: ${response.status}`\n                      )\n                      setIsCallingApi(false)\n                    }\n                  })\n                  .catch((error) => {\n                    console.error('Error:', error)\n                    setIsCallingApi(false)\n                  })\n              }}\n            >\n              <Box\n                width=\"40px\"\n                m=\"0 auto\"\n                p=\"5px\"\n                display=\"flex\"\n                justifyContent=\"center\"\n                borderRadius=\"4px\"\n                style={{\n                  border: '1px solid #e5e7eb',\n                  borderWidth: '1px',\n                  borderColor: '#e5e7eb',\n                }}\n              >\n                <OpenInBrowserOutlinedIcon />\n              </Box>\n            </IconButton>\n            <IconButton\n              title=\"Terminate Model\"\n              style={{\n                borderWidth: '0px',\n                backgroundColor: 'transparent',\n                paddingLeft: '0px',\n                paddingRight: '10px',\n              }}\n              onClick={() => {\n                if (isCallingApi || isUpdatingModel) {\n                  return\n                }\n                setIsCallingApi(true)\n                fetcher(closeUrl, {\n                  method: 'DELETE',\n                })\n                  .then((response) => {\n                    response.json()\n                  })\n                  .then(() => {\n                    setIsCallingApi(false)\n                  })\n                  .catch((error) => {\n                    console.error('Error:', error)\n                    setIsCallingApi(false)\n                  })\n              }}\n            >\n              <Box\n                width=\"40px\"\n                m=\"0 auto\"\n                p=\"5px\"\n                display=\"flex\"\n                justifyContent=\"center\"\n                borderRadius=\"4px\"\n                style={{\n                  border: '1px solid #e5e7eb',\n                  borderWidth: '1px',\n                  borderColor: '#e5e7eb',\n                }}\n              >\n                <DeleteOutlineOutlinedIcon />\n              </Box>\n            </IconButton>\n          </Box>\n        )\n      },\n    },\n  ]\n  const audioModelColumns = imageModelColumns\n  const videoModelColumns = imageModelColumns\n  const rerankModelColumns = embeddingModelColumns\n  const flexibleModelColumns = embeddingModelColumns\n\n  const dataGridStyle = {\n    '& .MuiDataGrid-cell': {\n      borderBottom: 'none',\n    },\n    '& .MuiDataGrid-columnHeaders': {\n      borderBottom: 'none',\n    },\n    '& .MuiDataGrid-columnHeaderTitle': {\n      fontWeight: 'bold',\n    },\n    '& .MuiDataGrid-virtualScroller': {\n      overflowX: 'visible !important',\n      overflow: 'visible',\n    },\n    '& .MuiDataGrid-footerContainer': {\n      borderTop: 'none',\n    },\n    'border-width': '0px',\n  }\n\n  const noRowsOverlay = () => {\n    return (\n      <Stack height=\"100%\" alignItems=\"center\" justifyContent=\"center\">\n        {t('runningModels.noRunningModels')}\n      </Stack>\n    )\n  }\n\n  const noResultsOverlay = () => {\n    return (\n      <Stack height=\"100%\" alignItems=\"center\" justifyContent=\"center\">\n        {t('runningModels.noRunningModelsMatches')}\n      </Stack>\n    )\n  }\n\n  const renderWithCopy = (display) => {\n    const [tooltipOpen, setTooltipOpen] = useState(false)\n    const [tooltipText, setTooltipText] = useState(t('runningModels.copy'))\n\n    const handleCopy = (event) => {\n      event.stopPropagation()\n\n      if (navigator.clipboard && window.isSecureContext) {\n        // for HTTPS\n        navigator.clipboard\n          .writeText(display)\n          .then(() => {\n            setTooltipText(t('runningModels.copied'))\n          })\n          .catch(() => {\n            setTooltipText(t('runningModels.copyFailed'))\n          })\n          .finally(() => {\n            setTooltipOpen(true)\n            setTimeout(() => {\n              setTooltipOpen(false)\n              setTooltipText(t('runningModels.copy'))\n            }, 1500)\n          })\n      } else {\n        // for HTTP\n        const textArea = document.createElement('textarea')\n        textArea.value = display\n        textArea.style.position = 'absolute'\n        textArea.style.left = '-9999px'\n        document.body.appendChild(textArea)\n        textArea.select()\n\n        try {\n          const success = document.execCommand('copy')\n          if (success) {\n            setTooltipText(t('runningModels.copied'))\n          } else {\n            setTooltipText(t('runningModels.copyFailed'))\n          }\n        } catch (err) {\n          setTooltipText(t('runningModels.copyFailed'))\n        }\n\n        document.body.removeChild(textArea)\n\n        setTooltipOpen(true)\n        setTimeout(() => {\n          setTooltipOpen(false)\n          setTooltipText(t('runningModels.copy'))\n        }, 1500)\n      }\n    }\n\n    return (\n      <div\n        style={{\n          display: 'flex',\n          alignItems: 'center',\n          maxWidth: '100%',\n          overflow: 'hidden',\n        }}\n      >\n        <span\n          style={{\n            flex: 1,\n            minWidth: 0,\n            overflow: 'hidden',\n            whiteSpace: 'nowrap',\n            textOverflow: 'ellipsis',\n            marginRight: 8,\n          }}\n        >\n          {display}\n        </span>\n        <Tooltip title={tooltipText} open={tooltipOpen}>\n          <IconButton size=\"small\" onClick={handleCopy}>\n            <ContentCopyOutlinedIcon fontSize=\"small\" />\n          </IconButton>\n        </Tooltip>\n      </div>\n    )\n  }\n\n  useEffect(() => {\n    const dataMap = {\n      'model.languageModels': llmData,\n      'model.embeddingModels': embeddingModelData,\n      'model.rerankModels': rerankModelData,\n      'model.imageModels': imageModelData,\n      'model.audioModels': audioModelData,\n      'model.videoModels': videoModelData,\n      'model.flexibleModels': flexibleModelData,\n    }\n\n    setTabList(\n      tabList.map((item) => {\n        if (dataMap[item.label]?.length && dataMap[item.label][0].model_type) {\n          return {\n            ...item,\n            showPrompt: true,\n          }\n        }\n        return {\n          ...item,\n          showPrompt: false,\n        }\n      })\n    )\n  }, [\n    llmData,\n    embeddingModelData,\n    rerankModelData,\n    imageModelData,\n    audioModelData,\n    videoModelData,\n    flexibleModelData,\n  ])\n\n  return (\n    <Box\n      sx={{\n        height: '100%',\n        width: '100%',\n        padding: '20px 20px 0 20px',\n      }}\n    >\n      <Title title={t('menu.runningModels')} />\n      <ErrorMessageSnackBar />\n      <TabContext value={tabValue}>\n        <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>\n          <TabList\n            value={tabValue}\n            onChange={handleTabChange}\n            aria-label=\"tabs\"\n          >\n            {tabList.map((item) => (\n              <Tab\n                key={item.value}\n                label={\n                  <Badge\n                    color=\"secondary\"\n                    variant=\"dot\"\n                    invisible={!item.showPrompt}\n                  >\n                    {t(item.label)}\n                  </Badge>\n                }\n                value={item.value}\n              />\n            ))}\n          </TabList>\n        </Box>\n        <TabPanel value=\"/running_models/LLM\" sx={{ padding: 0 }}>\n          <Box sx={{ height: '100%', width: '100%' }}>\n            <DataGrid\n              rows={llmData}\n              columns={llmColumns}\n              autoHeight={true}\n              sx={dataGridStyle}\n              slots={{\n                noRowsOverlay: noRowsOverlay,\n                noResultsOverlay: noResultsOverlay,\n              }}\n            />\n          </Box>\n        </TabPanel>\n        <TabPanel value=\"/running_models/embedding\" sx={{ padding: 0 }}>\n          <Box sx={{ height: '100%', width: '100%' }}>\n            <DataGrid\n              rows={embeddingModelData}\n              columns={embeddingModelColumns}\n              autoHeight={true}\n              sx={dataGridStyle}\n              slots={{\n                noRowsOverlay: noRowsOverlay,\n                noResultsOverlay: noResultsOverlay,\n              }}\n            />\n          </Box>\n        </TabPanel>\n        <TabPanel value=\"/running_models/rerank\" sx={{ padding: 0 }}>\n          <Box sx={{ height: '100%', width: '100%' }}>\n            <DataGrid\n              rows={rerankModelData}\n              columns={rerankModelColumns}\n              autoHeight={true}\n              sx={dataGridStyle}\n              slots={{\n                noRowsOverlay: noRowsOverlay,\n                noResultsOverlay: noResultsOverlay,\n              }}\n            />\n          </Box>\n        </TabPanel>\n        <TabPanel value=\"/running_models/image\" sx={{ padding: 0 }}>\n          <Box sx={{ height: '100%', width: '100%' }}>\n            <DataGrid\n              rows={imageModelData}\n              columns={imageModelColumns}\n              autoHeight={true}\n              sx={dataGridStyle}\n              slots={{\n                noRowsOverlay: noRowsOverlay,\n                noResultsOverlay: noResultsOverlay,\n              }}\n            />\n          </Box>\n        </TabPanel>\n        <TabPanel value=\"/running_models/audio\" sx={{ padding: 0 }}>\n          <Box sx={{ height: '100%', width: '100%' }}>\n            <DataGrid\n              rows={audioModelData}\n              columns={audioModelColumns}\n              autoHeight={true}\n              sx={dataGridStyle}\n              slots={{\n                noRowsOverlay: noRowsOverlay,\n                noResultsOverlay: noResultsOverlay,\n              }}\n            />\n          </Box>\n        </TabPanel>\n        <TabPanel value=\"/running_models/video\" sx={{ padding: 0 }}>\n          <Box sx={{ height: '100%', width: '100%' }}>\n            <DataGrid\n              rows={videoModelData}\n              columns={videoModelColumns}\n              autoHeight={true}\n              sx={dataGridStyle}\n              slots={{\n                noRowsOverlay: noRowsOverlay,\n                noResultsOverlay: noResultsOverlay,\n              }}\n            />\n          </Box>\n        </TabPanel>\n        <TabPanel value=\"/running_models/flexible\" sx={{ padding: 0 }}>\n          <Box sx={{ height: '100%', width: '100%' }}>\n            <DataGrid\n              rows={flexibleModelData}\n              columns={flexibleModelColumns}\n              autoHeight={true}\n              sx={dataGridStyle}\n              slots={{\n                noRowsOverlay: noRowsOverlay,\n                noResultsOverlay: noResultsOverlay,\n              }}\n            />\n          </Box>\n        </TabPanel>\n      </TabContext>\n\n      {/* Replica Details Dialog */}\n      <Dialog\n        open={replicaDialogOpen}\n        onClose={() => setReplicaDialogOpen(false)}\n        maxWidth=\"md\"\n        fullWidth\n      >\n        <DialogTitle>\n          {t('modelReplicaDetails.title')}\n          <Typography variant=\"caption\" display=\"block\" color=\"text.secondary\">\n            {t('modelReplicaDetails.modelUid')}: {selectedModelUid}\n          </Typography>\n        </DialogTitle>\n        <DialogContent>\n          <TableContainer component={Paper} variant=\"outlined\">\n            <Table size=\"small\">\n              <TableHead>\n                <TableRow>\n                  <TableCell>{t('modelReplicaDetails.replicaId')}</TableCell>\n                  <TableCell>{t('modelReplicaDetails.modelUid')}</TableCell>\n                  <TableCell>\n                    {t('modelReplicaDetails.workerAddress')}\n                  </TableCell>\n                  <TableCell>{t('modelReplicaDetails.status')}</TableCell>\n                  <TableCell>{t('modelReplicaDetails.createdTime')}</TableCell>\n                </TableRow>\n              </TableHead>\n              <TableBody>\n                {selectedModelReplicas.map((replica) => (\n                  <TableRow key={replica.replica_id}>\n                    <TableCell>{replica.replica_id}</TableCell>\n                    <TableCell>\n                      <Typography\n                        variant=\"caption\"\n                        sx={{ fontFamily: 'monospace', fontSize: '0.75rem' }}\n                      >\n                        {replica.replica_model_uid}\n                      </Typography>\n                    </TableCell>\n                    <TableCell>{replica.worker_address}</TableCell>\n                    <TableCell>\n                      <Chip\n                        label={replica.status}\n                        color={\n                          replica.status === 'READY'\n                            ? 'success'\n                            : replica.status === 'ERROR'\n                            ? 'error'\n                            : 'default'\n                        }\n                        size=\"small\"\n                      />\n                    </TableCell>\n                    <TableCell>\n                      {new Date(replica.created_ts * 1000).toLocaleString()}\n                    </TableCell>\n                  </TableRow>\n                ))}\n                {selectedModelReplicas.length === 0 && (\n                  <TableRow>\n                    <TableCell colSpan={5} align=\"center\">\n                      <Typography variant=\"body2\" color=\"text.secondary\">\n                        {t('modelReplicaDetails.noReplicaInfo')}\n                      </Typography>\n                    </TableCell>\n                  </TableRow>\n                )}\n              </TableBody>\n            </Table>\n          </TableContainer>\n          {selectedModelReplicas.some((r) => r.error_message) && (\n            <Box sx={{ mt: 2 }}>\n              <Typography variant=\"subtitle2\" color=\"error\">\n                {t('modelReplicaDetails.errors')}:\n              </Typography>\n              {selectedModelReplicas\n                .filter((r) => r.error_message)\n                .map((replica, idx) => (\n                  <Typography\n                    key={idx}\n                    variant=\"caption\"\n                    display=\"block\"\n                    color=\"error\"\n                  >\n                    {t('modelReplicaDetails.replica')} {replica.replica_id}:{' '}\n                    {replica.error_message}\n                  </Typography>\n                ))}\n            </Box>\n          )}\n        </DialogContent>\n        <DialogActions>\n          <Button onClick={() => setReplicaDialogOpen(false)}>\n            {t('modelReplicaDetails.close')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n    </Box>\n  )\n}\n\nexport default RunningModels\n"
  },
  {
    "path": "xinference/ui/web/ui/src/theme.js",
    "content": "import { createTheme } from '@mui/material/styles'\n\n// mui theme settings\nexport const themeSettings = (mode) => {\n  return {\n    ERROR_COLOR: '#d8342c',\n    typography: {\n      fontFamily: ['Source Sans Pro', 'sans-serif'].join(','),\n      fontSize: 12,\n      h1: {\n        fontFamily: ['Source Sans Pro', 'sans-serif'].join(','),\n        fontSize: 40,\n      },\n      h2: {\n        fontFamily: ['Source Sans Pro', 'sans-serif'].join(','),\n        fontSize: 32,\n      },\n      h3: {\n        fontFamily: ['Source Sans Pro', 'sans-serif'].join(','),\n        fontSize: 24,\n      },\n      h4: {\n        fontFamily: ['Source Sans Pro', 'sans-serif'].join(','),\n        fontSize: 20,\n      },\n      h5: {\n        fontFamily: ['Source Sans Pro', 'sans-serif'].join(','),\n        fontSize: 16,\n      },\n      h6: {\n        fontFamily: ['Source Sans Pro', 'sans-serif'].join(','),\n        fontSize: 14,\n      },\n    },\n    palette: {\n      mode: mode,\n    },\n  }\n}\n\nexport const useMode = (mode = 'light') => {\n  const theme = createTheme(themeSettings(mode))\n  return [theme]\n}\n"
  },
  {
    "path": "xinference/utils.py",
    "content": "# Copyright 2022-2026 XProbe Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport subprocess\nimport sys\nfrom typing import Optional\n\n\ndef cuda_count():\n    import torch\n\n    # even if install torch cpu, this interface would return 0.\n    return torch.cuda.device_count()\n\n\ndef get_real_path(path: str) -> Optional[str]:\n    # parsing soft links\n    if os.path.isdir(path):\n        files = os.listdir(path)\n        # dir has files\n        if files:\n            resolved_file = os.path.realpath(os.path.join(path, files[0]))\n            if resolved_file:\n                return os.path.dirname(resolved_file)\n        return None\n    else:\n        return os.path.realpath(path)\n\n\ndef get_pip_config_args() -> dict[str, str | list[str]]:\n    \"\"\"\n    Parse pip config and return a dict with keys matching install_packages kwargs:\n    index_url, extra_index_url, find_links, trusted_host.\n    \"\"\"\n    key_map = {\n        \"global.index-url\": \"index_url\",\n        \"global.extra-index-url\": \"extra_index_url\",\n        \"global.trusted-host\": \"trusted_host\",\n        \"global.find-links\": \"find_links\",\n    }\n\n    try:\n        result = subprocess.run(\n            [sys.executable, \"-m\", \"pip\", \"config\", \"list\"],\n            capture_output=True,\n            text=True,\n            check=True,\n        )\n        args: dict[str, str | list[str]] = {}\n        for line in result.stdout.splitlines():\n            if \"=\" not in line:\n                continue\n            raw_key, raw_value = line.split(\"=\", 1)\n            key = raw_key.strip()\n            value = raw_value.strip().strip(\"'\\\"\")\n            mapped_key = key_map.get(key)\n            if mapped_key and value:\n                if mapped_key in (\"extra_index_url\", \"find_links\", \"trusted_host\"):\n                    existing = args.get(mapped_key)\n                    if existing is None:\n                        args[mapped_key] = value\n                    elif isinstance(existing, list):\n                        existing.append(value)\n                    else:\n                        args[mapped_key] = [existing, value]\n                else:\n                    args[mapped_key] = value\n\n        return args\n    except subprocess.CalledProcessError:\n        return {}\n\n\ndef make_hashable(obj):\n    \"\"\"\n    Recursively convert an object into a hashable form.\n\n    This function is useful for creating deterministic cache keys or\n    comparing complex structures (dicts, lists, sets, etc.) that are\n    otherwise unhashable. It ensures consistent ordering for dictionaries\n    and sets, so that equivalent objects produce identical hashable results.\n\n    Examples:\n        make_hashable({\"a\": [1, 2], \"b\": {\"x\": True}})\n        -> ((\"a\", (1, 2)), (\"b\", ((\"x\", True),)))\n\n    Args:\n        obj: Any Python object.\n\n    Returns:\n        A hashable version of `obj`, typically composed of tuples.\n    \"\"\"\n    if isinstance(obj, (tuple, list)):\n        return tuple(make_hashable(o) for o in obj)\n    elif isinstance(obj, dict):\n        # Sort by key to ensure consistent ordering\n        return tuple(sorted((k, make_hashable(v)) for k, v in obj.items()))\n    elif isinstance(obj, set):\n        # Sort elements for deterministic output\n        return tuple(sorted(make_hashable(o) for o in obj))\n    else:\n        # Assume it's already hashable (int, str, float, bool, None, etc.)\n        return obj\n"
  }
]